(self.webpackChunkitg_nextgen_frontend=self.webpackChunkitg_nextgen_frontend||[]).push([[96],{119:function(__unused_webpack_module,__unused_webpack_exports,__webpack_require__){eval("//! moment.js locale configuration\n//! locale : Persian [fa]\n//! author : Ebrahim Byagowi : https://github.com/ebraminio\n\n;(function (global, factory) {\n true ? factory(__webpack_require__(95093)) :\n 0\n}(this, (function (moment) { 'use strict';\n\n //! moment.js locale configuration\n\n var symbolMap = {\n 1: '۱',\n 2: '۲',\n 3: '۳',\n 4: '۴',\n 5: '۵',\n 6: '۶',\n 7: '۷',\n 8: '۸',\n 9: '۹',\n 0: '۰',\n },\n numberMap = {\n '۱': '1',\n '۲': '2',\n '۳': '3',\n '۴': '4',\n '۵': '5',\n '۶': '6',\n '۷': '7',\n '۸': '8',\n '۹': '9',\n '۰': '0',\n };\n\n var fa = moment.defineLocale('fa', {\n months: 'ژانویه_فوریه_مارس_آوریل_مه_ژوئن_ژوئیه_اوت_سپتامبر_اکتبر_نوامبر_دسامبر'.split(\n '_'\n ),\n monthsShort:\n 'ژانویه_فوریه_مارس_آوریل_مه_ژوئن_ژوئیه_اوت_سپتامبر_اکتبر_نوامبر_دسامبر'.split(\n '_'\n ),\n weekdays:\n 'یک\\u200cشنبه_دوشنبه_سه\\u200cشنبه_چهارشنبه_پنج\\u200cشنبه_جمعه_شنبه'.split(\n '_'\n ),\n weekdaysShort:\n 'یک\\u200cشنبه_دوشنبه_سه\\u200cشنبه_چهارشنبه_پنج\\u200cشنبه_جمعه_شنبه'.split(\n '_'\n ),\n weekdaysMin: 'ی_د_س_چ_پ_ج_ش'.split('_'),\n weekdaysParseExact: true,\n longDateFormat: {\n LT: 'HH:mm',\n LTS: 'HH:mm:ss',\n L: 'DD/MM/YYYY',\n LL: 'D MMMM YYYY',\n LLL: 'D MMMM YYYY HH:mm',\n LLLL: 'dddd, D MMMM YYYY HH:mm',\n },\n meridiemParse: /قبل از ظهر|بعد از ظهر/,\n isPM: function (input) {\n return /بعد از ظهر/.test(input);\n },\n meridiem: function (hour, minute, isLower) {\n if (hour < 12) {\n return 'قبل از ظهر';\n } else {\n return 'بعد از ظهر';\n }\n },\n calendar: {\n sameDay: '[امروز ساعت] LT',\n nextDay: '[فردا ساعت] LT',\n nextWeek: 'dddd [ساعت] LT',\n lastDay: '[دیروز ساعت] LT',\n lastWeek: 'dddd [پیش] [ساعت] LT',\n sameElse: 'L',\n },\n relativeTime: {\n future: 'در %s',\n past: '%s پیش',\n s: 'چند ثانیه',\n ss: '%d ثانیه',\n m: 'یک دقیقه',\n mm: '%d دقیقه',\n h: 'یک ساعت',\n hh: '%d ساعت',\n d: 'یک روز',\n dd: '%d روز',\n M: 'یک ماه',\n MM: '%d ماه',\n y: 'یک سال',\n yy: '%d سال',\n },\n preparse: function (string) {\n return string\n .replace(/[۰-۹]/g, function (match) {\n return numberMap[match];\n })\n .replace(/،/g, ',');\n },\n postformat: function (string) {\n return string\n .replace(/\\d/g, function (match) {\n return symbolMap[match];\n })\n .replace(/,/g, '،');\n },\n dayOfMonthOrdinalParse: /\\d{1,2}م/,\n ordinal: '%dم',\n week: {\n dow: 6, // Saturday is the first day of the week.\n doy: 12, // The week that contains Jan 12th is the first week of the year.\n },\n });\n\n return fa;\n\n})));\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMTE5LmpzIiwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9pdGctbmV4dGdlbi1mcm9udGVuZC8uL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL2ZhLmpzPzhkZjQiXSwic291cmNlc0NvbnRlbnQiOlsiLy8hIG1vbWVudC5qcyBsb2NhbGUgY29uZmlndXJhdGlvblxuLy8hIGxvY2FsZSA6IFBlcnNpYW4gW2ZhXVxuLy8hIGF1dGhvciA6IEVicmFoaW0gQnlhZ293aSA6IGh0dHBzOi8vZ2l0aHViLmNvbS9lYnJhbWluaW9cblxuOyhmdW5jdGlvbiAoZ2xvYmFsLCBmYWN0b3J5KSB7XG4gICB0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcgJiYgdHlwZW9mIG1vZHVsZSAhPT0gJ3VuZGVmaW5lZCdcbiAgICAgICAmJiB0eXBlb2YgcmVxdWlyZSA9PT0gJ2Z1bmN0aW9uJyA/IGZhY3RvcnkocmVxdWlyZSgnLi4vbW9tZW50JykpIDpcbiAgIHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgZGVmaW5lLmFtZCA/IGRlZmluZShbJy4uL21vbWVudCddLCBmYWN0b3J5KSA6XG4gICBmYWN0b3J5KGdsb2JhbC5tb21lbnQpXG59KHRoaXMsIChmdW5jdGlvbiAobW9tZW50KSB7ICd1c2Ugc3RyaWN0JztcblxuICAgIC8vISBtb21lbnQuanMgbG9jYWxlIGNvbmZpZ3VyYXRpb25cblxuICAgIHZhciBzeW1ib2xNYXAgPSB7XG4gICAgICAgICAgICAxOiAn27EnLFxuICAgICAgICAgICAgMjogJ9uyJyxcbiAgICAgICAgICAgIDM6ICfbsycsXG4gICAgICAgICAgICA0OiAn27QnLFxuICAgICAgICAgICAgNTogJ9u1JyxcbiAgICAgICAgICAgIDY6ICfbticsXG4gICAgICAgICAgICA3OiAn27cnLFxuICAgICAgICAgICAgODogJ9u4JyxcbiAgICAgICAgICAgIDk6ICfbuScsXG4gICAgICAgICAgICAwOiAn27AnLFxuICAgICAgICB9LFxuICAgICAgICBudW1iZXJNYXAgPSB7XG4gICAgICAgICAgICAn27EnOiAnMScsXG4gICAgICAgICAgICAn27InOiAnMicsXG4gICAgICAgICAgICAn27MnOiAnMycsXG4gICAgICAgICAgICAn27QnOiAnNCcsXG4gICAgICAgICAgICAn27UnOiAnNScsXG4gICAgICAgICAgICAn27YnOiAnNicsXG4gICAgICAgICAgICAn27cnOiAnNycsXG4gICAgICAgICAgICAn27gnOiAnOCcsXG4gICAgICAgICAgICAn27knOiAnOScsXG4gICAgICAgICAgICAn27AnOiAnMCcsXG4gICAgICAgIH07XG5cbiAgICB2YXIgZmEgPSBtb21lbnQuZGVmaW5lTG9jYWxlKCdmYScsIHtcbiAgICAgICAgbW9udGhzOiAn2pjYp9mG2YjbjNmHX9mB2YjYsduM2Ydf2YXYp9ix2LNf2KLZiNix24zZhF/ZhdmHX9qY2YjYptmGX9qY2YjYptuM2Ydf2KfZiNiqX9iz2b7Yqtin2YXYqNixX9in2qnYqtio2LFf2YbZiNin2YXYqNixX9iv2LPYp9mF2KjYsScuc3BsaXQoXG4gICAgICAgICAgICAnXydcbiAgICAgICAgKSxcbiAgICAgICAgbW9udGhzU2hvcnQ6XG4gICAgICAgICAgICAn2pjYp9mG2YjbjNmHX9mB2YjYsduM2Ydf2YXYp9ix2LNf2KLZiNix24zZhF/ZhdmHX9qY2YjYptmGX9qY2YjYptuM2Ydf2KfZiNiqX9iz2b7Yqtin2YXYqNixX9in2qnYqtio2LFf2YbZiNin2YXYqNixX9iv2LPYp9mF2KjYsScuc3BsaXQoXG4gICAgICAgICAgICAgICAgJ18nXG4gICAgICAgICAgICApLFxuICAgICAgICB3ZWVrZGF5czpcbiAgICAgICAgICAgICfbjNqpXFx1MjAwY9i02YbYqNmHX9iv2YjYtNmG2KjZh1/Ys9mHXFx1MjAwY9i02YbYqNmHX9qG2YfYp9ix2LTZhtio2Ydf2b7ZhtisXFx1MjAwY9i02YbYqNmHX9is2YXYudmHX9i02YbYqNmHJy5zcGxpdChcbiAgICAgICAgICAgICAgICAnXydcbiAgICAgICAgICAgICksXG4gICAgICAgIHdlZWtkYXlzU2hvcnQ6XG4gICAgICAgICAgICAn24zaqVxcdTIwMGPYtNmG2KjZh1/Yr9mI2LTZhtio2Ydf2LPZh1xcdTIwMGPYtNmG2KjZh1/ahtmH2KfYsdi02YbYqNmHX9m+2YbYrFxcdTIwMGPYtNmG2KjZh1/YrNmF2LnZh1/YtNmG2KjZhycuc3BsaXQoXG4gICAgICAgICAgICAgICAgJ18nXG4gICAgICAgICAgICApLFxuICAgICAgICB3ZWVrZGF5c01pbjogJ9uMX9ivX9izX9qGX9m+X9isX9i0Jy5zcGxpdCgnXycpLFxuICAgICAgICB3ZWVrZGF5c1BhcnNlRXhhY3Q6IHRydWUsXG4gICAgICAgIGxvbmdEYXRlRm9ybWF0OiB7XG4gICAgICAgICAgICBMVDogJ0hIOm1tJyxcbiAgICAgICAgICAgIExUUzogJ0hIOm1tOnNzJyxcbiAgICAgICAgICAgIEw6ICdERC9NTS9ZWVlZJyxcbiAgICAgICAgICAgIExMOiAnRCBNTU1NIFlZWVknLFxuICAgICAgICAgICAgTExMOiAnRCBNTU1NIFlZWVkgSEg6bW0nLFxuICAgICAgICAgICAgTExMTDogJ2RkZGQsIEQgTU1NTSBZWVlZIEhIOm1tJyxcbiAgICAgICAgfSxcbiAgICAgICAgbWVyaWRpZW1QYXJzZTogL9mC2KjZhCDYp9iyINi42YfYsXzYqNi52K8g2KfYsiDYuNmH2LEvLFxuICAgICAgICBpc1BNOiBmdW5jdGlvbiAoaW5wdXQpIHtcbiAgICAgICAgICAgIHJldHVybiAv2KjYudivINin2LIg2LjZh9ixLy50ZXN0KGlucHV0KTtcbiAgICAgICAgfSxcbiAgICAgICAgbWVyaWRpZW06IGZ1bmN0aW9uIChob3VyLCBtaW51dGUsIGlzTG93ZXIpIHtcbiAgICAgICAgICAgIGlmIChob3VyIDwgMTIpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gJ9mC2KjZhCDYp9iyINi42YfYsSc7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHJldHVybiAn2KjYudivINin2LIg2LjZh9ixJztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgY2FsZW5kYXI6IHtcbiAgICAgICAgICAgIHNhbWVEYXk6ICdb2KfZhdix2YjYsiDYs9in2LnYql0gTFQnLFxuICAgICAgICAgICAgbmV4dERheTogJ1vZgdix2K/YpyDYs9in2LnYql0gTFQnLFxuICAgICAgICAgICAgbmV4dFdlZWs6ICdkZGRkIFvYs9in2LnYql0gTFQnLFxuICAgICAgICAgICAgbGFzdERheTogJ1vYr9uM2LHZiNiyINiz2KfYudiqXSBMVCcsXG4gICAgICAgICAgICBsYXN0V2VlazogJ2RkZGQgW9m+24zYtF0gW9iz2KfYudiqXSBMVCcsXG4gICAgICAgICAgICBzYW1lRWxzZTogJ0wnLFxuICAgICAgICB9LFxuICAgICAgICByZWxhdGl2ZVRpbWU6IHtcbiAgICAgICAgICAgIGZ1dHVyZTogJ9iv2LEgJXMnLFxuICAgICAgICAgICAgcGFzdDogJyVzINm+24zYtCcsXG4gICAgICAgICAgICBzOiAn2obZhtivINir2KfZhtuM2YcnLFxuICAgICAgICAgICAgc3M6ICclZCDYq9in2YbbjNmHJyxcbiAgICAgICAgICAgIG06ICfbjNqpINiv2YLbjNmC2YcnLFxuICAgICAgICAgICAgbW06ICclZCDYr9mC24zZgtmHJyxcbiAgICAgICAgICAgIGg6ICfbjNqpINiz2KfYudiqJyxcbiAgICAgICAgICAgIGhoOiAnJWQg2LPYp9i52KonLFxuICAgICAgICAgICAgZDogJ9uM2qkg2LHZiNiyJyxcbiAgICAgICAgICAgIGRkOiAnJWQg2LHZiNiyJyxcbiAgICAgICAgICAgIE06ICfbjNqpINmF2KfZhycsXG4gICAgICAgICAgICBNTTogJyVkINmF2KfZhycsXG4gICAgICAgICAgICB5OiAn24zaqSDYs9in2YQnLFxuICAgICAgICAgICAgeXk6ICclZCDYs9in2YQnLFxuICAgICAgICB9LFxuICAgICAgICBwcmVwYXJzZTogZnVuY3Rpb24gKHN0cmluZykge1xuICAgICAgICAgICAgcmV0dXJuIHN0cmluZ1xuICAgICAgICAgICAgICAgIC5yZXBsYWNlKC9b27At27ldL2csIGZ1bmN0aW9uIChtYXRjaCkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gbnVtYmVyTWFwW21hdGNoXTtcbiAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgIC5yZXBsYWNlKC/YjC9nLCAnLCcpO1xuICAgICAgICB9LFxuICAgICAgICBwb3N0Zm9ybWF0OiBmdW5jdGlvbiAoc3RyaW5nKSB7XG4gICAgICAgICAgICByZXR1cm4gc3RyaW5nXG4gICAgICAgICAgICAgICAgLnJlcGxhY2UoL1xcZC9nLCBmdW5jdGlvbiAobWF0Y2gpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHN5bWJvbE1hcFttYXRjaF07XG4gICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAucmVwbGFjZSgvLC9nLCAn2IwnKTtcbiAgICAgICAgfSxcbiAgICAgICAgZGF5T2ZNb250aE9yZGluYWxQYXJzZTogL1xcZHsxLDJ92YUvLFxuICAgICAgICBvcmRpbmFsOiAnJWTZhScsXG4gICAgICAgIHdlZWs6IHtcbiAgICAgICAgICAgIGRvdzogNiwgLy8gU2F0dXJkYXkgaXMgdGhlIGZpcnN0IGRheSBvZiB0aGUgd2Vlay5cbiAgICAgICAgICAgIGRveTogMTIsIC8vIFRoZSB3ZWVrIHRoYXQgY29udGFpbnMgSmFuIDEydGggaXMgdGhlIGZpcnN0IHdlZWsgb2YgdGhlIHllYXIuXG4gICAgICAgIH0sXG4gICAgfSk7XG5cbiAgICByZXR1cm4gZmE7XG5cbn0pKSk7XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///119\n")},251:(__unused_webpack_module,exports)=>{eval("/*! ieee754. BSD-3-Clause License. Feross Aboukhadijeh */\nexports.read = function (buffer, offset, isLE, mLen, nBytes) {\n var e, m\n var eLen = (nBytes * 8) - mLen - 1\n var eMax = (1 << eLen) - 1\n var eBias = eMax >> 1\n var nBits = -7\n var i = isLE ? (nBytes - 1) : 0\n var d = isLE ? -1 : 1\n var s = buffer[offset + i]\n\n i += d\n\n e = s & ((1 << (-nBits)) - 1)\n s >>= (-nBits)\n nBits += eLen\n for (; nBits > 0; e = (e * 256) + buffer[offset + i], i += d, nBits -= 8) {}\n\n m = e & ((1 << (-nBits)) - 1)\n e >>= (-nBits)\n nBits += mLen\n for (; nBits > 0; m = (m * 256) + buffer[offset + i], i += d, nBits -= 8) {}\n\n if (e === 0) {\n e = 1 - eBias\n } else if (e === eMax) {\n return m ? NaN : ((s ? -1 : 1) * Infinity)\n } else {\n m = m + Math.pow(2, mLen)\n e = e - eBias\n }\n return (s ? -1 : 1) * m * Math.pow(2, e - mLen)\n}\n\nexports.write = function (buffer, value, offset, isLE, mLen, nBytes) {\n var e, m, c\n var eLen = (nBytes * 8) - mLen - 1\n var eMax = (1 << eLen) - 1\n var eBias = eMax >> 1\n var rt = (mLen === 23 ? Math.pow(2, -24) - Math.pow(2, -77) : 0)\n var i = isLE ? 0 : (nBytes - 1)\n var d = isLE ? 1 : -1\n var s = value < 0 || (value === 0 && 1 / value < 0) ? 1 : 0\n\n value = Math.abs(value)\n\n if (isNaN(value) || value === Infinity) {\n m = isNaN(value) ? 1 : 0\n e = eMax\n } else {\n e = Math.floor(Math.log(value) / Math.LN2)\n if (value * (c = Math.pow(2, -e)) < 1) {\n e--\n c *= 2\n }\n if (e + eBias >= 1) {\n value += rt / c\n } else {\n value += rt * Math.pow(2, 1 - eBias)\n }\n if (value * c >= 2) {\n e++\n c /= 2\n }\n\n if (e + eBias >= eMax) {\n m = 0\n e = eMax\n } else if (e + eBias >= 1) {\n m = ((value * c) - 1) * Math.pow(2, mLen)\n e = e + eBias\n } else {\n m = value * Math.pow(2, eBias - 1) * Math.pow(2, mLen)\n e = 0\n }\n }\n\n for (; mLen >= 8; buffer[offset + i] = m & 0xff, i += d, m /= 256, mLen -= 8) {}\n\n e = (e << mLen) | m\n eLen += mLen\n for (; eLen > 0; buffer[offset + i] = e & 0xff, i += d, e /= 256, eLen -= 8) {}\n\n buffer[offset + i - d] |= s * 128\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMjUxLmpzIiwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vaXRnLW5leHRnZW4tZnJvbnRlbmQvLi9ub2RlX21vZHVsZXMvaWVlZTc1NC9pbmRleC5qcz85MTUyIl0sInNvdXJjZXNDb250ZW50IjpbIi8qISBpZWVlNzU0LiBCU0QtMy1DbGF1c2UgTGljZW5zZS4gRmVyb3NzIEFib3VraGFkaWplaCA8aHR0cHM6Ly9mZXJvc3Mub3JnL29wZW5zb3VyY2U+ICovXG5leHBvcnRzLnJlYWQgPSBmdW5jdGlvbiAoYnVmZmVyLCBvZmZzZXQsIGlzTEUsIG1MZW4sIG5CeXRlcykge1xuICB2YXIgZSwgbVxuICB2YXIgZUxlbiA9IChuQnl0ZXMgKiA4KSAtIG1MZW4gLSAxXG4gIHZhciBlTWF4ID0gKDEgPDwgZUxlbikgLSAxXG4gIHZhciBlQmlhcyA9IGVNYXggPj4gMVxuICB2YXIgbkJpdHMgPSAtN1xuICB2YXIgaSA9IGlzTEUgPyAobkJ5dGVzIC0gMSkgOiAwXG4gIHZhciBkID0gaXNMRSA/IC0xIDogMVxuICB2YXIgcyA9IGJ1ZmZlcltvZmZzZXQgKyBpXVxuXG4gIGkgKz0gZFxuXG4gIGUgPSBzICYgKCgxIDw8ICgtbkJpdHMpKSAtIDEpXG4gIHMgPj49ICgtbkJpdHMpXG4gIG5CaXRzICs9IGVMZW5cbiAgZm9yICg7IG5CaXRzID4gMDsgZSA9IChlICogMjU2KSArIGJ1ZmZlcltvZmZzZXQgKyBpXSwgaSArPSBkLCBuQml0cyAtPSA4KSB7fVxuXG4gIG0gPSBlICYgKCgxIDw8ICgtbkJpdHMpKSAtIDEpXG4gIGUgPj49ICgtbkJpdHMpXG4gIG5CaXRzICs9IG1MZW5cbiAgZm9yICg7IG5CaXRzID4gMDsgbSA9IChtICogMjU2KSArIGJ1ZmZlcltvZmZzZXQgKyBpXSwgaSArPSBkLCBuQml0cyAtPSA4KSB7fVxuXG4gIGlmIChlID09PSAwKSB7XG4gICAgZSA9IDEgLSBlQmlhc1xuICB9IGVsc2UgaWYgKGUgPT09IGVNYXgpIHtcbiAgICByZXR1cm4gbSA/IE5hTiA6ICgocyA/IC0xIDogMSkgKiBJbmZpbml0eSlcbiAgfSBlbHNlIHtcbiAgICBtID0gbSArIE1hdGgucG93KDIsIG1MZW4pXG4gICAgZSA9IGUgLSBlQmlhc1xuICB9XG4gIHJldHVybiAocyA/IC0xIDogMSkgKiBtICogTWF0aC5wb3coMiwgZSAtIG1MZW4pXG59XG5cbmV4cG9ydHMud3JpdGUgPSBmdW5jdGlvbiAoYnVmZmVyLCB2YWx1ZSwgb2Zmc2V0LCBpc0xFLCBtTGVuLCBuQnl0ZXMpIHtcbiAgdmFyIGUsIG0sIGNcbiAgdmFyIGVMZW4gPSAobkJ5dGVzICogOCkgLSBtTGVuIC0gMVxuICB2YXIgZU1heCA9ICgxIDw8IGVMZW4pIC0gMVxuICB2YXIgZUJpYXMgPSBlTWF4ID4+IDFcbiAgdmFyIHJ0ID0gKG1MZW4gPT09IDIzID8gTWF0aC5wb3coMiwgLTI0KSAtIE1hdGgucG93KDIsIC03NykgOiAwKVxuICB2YXIgaSA9IGlzTEUgPyAwIDogKG5CeXRlcyAtIDEpXG4gIHZhciBkID0gaXNMRSA/IDEgOiAtMVxuICB2YXIgcyA9IHZhbHVlIDwgMCB8fCAodmFsdWUgPT09IDAgJiYgMSAvIHZhbHVlIDwgMCkgPyAxIDogMFxuXG4gIHZhbHVlID0gTWF0aC5hYnModmFsdWUpXG5cbiAgaWYgKGlzTmFOKHZhbHVlKSB8fCB2YWx1ZSA9PT0gSW5maW5pdHkpIHtcbiAgICBtID0gaXNOYU4odmFsdWUpID8gMSA6IDBcbiAgICBlID0gZU1heFxuICB9IGVsc2Uge1xuICAgIGUgPSBNYXRoLmZsb29yKE1hdGgubG9nKHZhbHVlKSAvIE1hdGguTE4yKVxuICAgIGlmICh2YWx1ZSAqIChjID0gTWF0aC5wb3coMiwgLWUpKSA8IDEpIHtcbiAgICAgIGUtLVxuICAgICAgYyAqPSAyXG4gICAgfVxuICAgIGlmIChlICsgZUJpYXMgPj0gMSkge1xuICAgICAgdmFsdWUgKz0gcnQgLyBjXG4gICAgfSBlbHNlIHtcbiAgICAgIHZhbHVlICs9IHJ0ICogTWF0aC5wb3coMiwgMSAtIGVCaWFzKVxuICAgIH1cbiAgICBpZiAodmFsdWUgKiBjID49IDIpIHtcbiAgICAgIGUrK1xuICAgICAgYyAvPSAyXG4gICAgfVxuXG4gICAgaWYgKGUgKyBlQmlhcyA+PSBlTWF4KSB7XG4gICAgICBtID0gMFxuICAgICAgZSA9IGVNYXhcbiAgICB9IGVsc2UgaWYgKGUgKyBlQmlhcyA+PSAxKSB7XG4gICAgICBtID0gKCh2YWx1ZSAqIGMpIC0gMSkgKiBNYXRoLnBvdygyLCBtTGVuKVxuICAgICAgZSA9IGUgKyBlQmlhc1xuICAgIH0gZWxzZSB7XG4gICAgICBtID0gdmFsdWUgKiBNYXRoLnBvdygyLCBlQmlhcyAtIDEpICogTWF0aC5wb3coMiwgbUxlbilcbiAgICAgIGUgPSAwXG4gICAgfVxuICB9XG5cbiAgZm9yICg7IG1MZW4gPj0gODsgYnVmZmVyW29mZnNldCArIGldID0gbSAmIDB4ZmYsIGkgKz0gZCwgbSAvPSAyNTYsIG1MZW4gLT0gOCkge31cblxuICBlID0gKGUgPDwgbUxlbikgfCBtXG4gIGVMZW4gKz0gbUxlblxuICBmb3IgKDsgZUxlbiA+IDA7IGJ1ZmZlcltvZmZzZXQgKyBpXSA9IGUgJiAweGZmLCBpICs9IGQsIGUgLz0gMjU2LCBlTGVuIC09IDgpIHt9XG5cbiAgYnVmZmVyW29mZnNldCArIGkgLSBkXSB8PSBzICogMTI4XG59XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///251\n")},391:(I,g,t)=>{"use strict";I.exports=t.p+"2f8704752126fde9c7cb.png"},705:(I,g,t)=>{"use strict";I.exports=t.p+"74650407adecad72eabf.png"},723:(I,g,t)=>{"use strict";I.exports=t.p+"701d6fc251f287bf9eca.png"},786:(I,g,t)=>{"use strict";I.exports=t.p+"af3ea11b20f62aa9a79d.png"},1063:(I,g,t)=>{"use strict";I.exports=t.p+"5b8a1fdbe97764d30f36.png"},1190:(I,g,t)=>{"use strict";I.exports=t.p+"cc481acf63aa33e0d367.png"},1221:function(__unused_webpack_module,__unused_webpack_exports,__webpack_require__){eval("//! moment.js locale configuration\n//! locale : Sindhi [sd]\n//! author : Narain Sagar : https://github.com/narainsagar\n\n;(function (global, factory) {\n true ? factory(__webpack_require__(95093)) :\n 0\n}(this, (function (moment) { 'use strict';\n\n //! moment.js locale configuration\n\n var months = [\n 'جنوري',\n 'فيبروري',\n 'مارچ',\n 'اپريل',\n 'مئي',\n 'جون',\n 'جولاءِ',\n 'آگسٽ',\n 'سيپٽمبر',\n 'آڪٽوبر',\n 'نومبر',\n 'ڊسمبر',\n ],\n days = ['آچر', 'سومر', 'اڱارو', 'اربع', 'خميس', 'جمع', 'ڇنڇر'];\n\n var sd = moment.defineLocale('sd', {\n months: months,\n monthsShort: months,\n weekdays: days,\n weekdaysShort: days,\n weekdaysMin: days,\n longDateFormat: {\n LT: 'HH:mm',\n LTS: 'HH:mm:ss',\n L: 'DD/MM/YYYY',\n LL: 'D MMMM YYYY',\n LLL: 'D MMMM YYYY HH:mm',\n LLLL: 'dddd، D MMMM YYYY HH:mm',\n },\n meridiemParse: /صبح|شام/,\n isPM: function (input) {\n return 'شام' === input;\n },\n meridiem: function (hour, minute, isLower) {\n if (hour < 12) {\n return 'صبح';\n }\n return 'شام';\n },\n calendar: {\n sameDay: '[اڄ] LT',\n nextDay: '[سڀاڻي] LT',\n nextWeek: 'dddd [اڳين هفتي تي] LT',\n lastDay: '[ڪالهه] LT',\n lastWeek: '[گزريل هفتي] dddd [تي] LT',\n sameElse: 'L',\n },\n relativeTime: {\n future: '%s پوء',\n past: '%s اڳ',\n s: 'چند سيڪنڊ',\n ss: '%d سيڪنڊ',\n m: 'هڪ منٽ',\n mm: '%d منٽ',\n h: 'هڪ ڪلاڪ',\n hh: '%d ڪلاڪ',\n d: 'هڪ ڏينهن',\n dd: '%d ڏينهن',\n M: 'هڪ مهينو',\n MM: '%d مهينا',\n y: 'هڪ سال',\n yy: '%d سال',\n },\n preparse: function (string) {\n return string.replace(/،/g, ',');\n },\n postformat: function (string) {\n return string.replace(/,/g, '،');\n },\n week: {\n dow: 1, // Monday is the first day of the week.\n doy: 4, // The week that contains Jan 4th is the first week of the year.\n },\n });\n\n return sd;\n\n})));\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMTIyMS5qcyIsIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9pdGctbmV4dGdlbi1mcm9udGVuZC8uL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL3NkLmpzPzY3ODQiXSwic291cmNlc0NvbnRlbnQiOlsiLy8hIG1vbWVudC5qcyBsb2NhbGUgY29uZmlndXJhdGlvblxuLy8hIGxvY2FsZSA6IFNpbmRoaSBbc2RdXG4vLyEgYXV0aG9yIDogTmFyYWluIFNhZ2FyIDogaHR0cHM6Ly9naXRodWIuY29tL25hcmFpbnNhZ2FyXG5cbjsoZnVuY3Rpb24gKGdsb2JhbCwgZmFjdG9yeSkge1xuICAgdHlwZW9mIGV4cG9ydHMgPT09ICdvYmplY3QnICYmIHR5cGVvZiBtb2R1bGUgIT09ICd1bmRlZmluZWQnXG4gICAgICAgJiYgdHlwZW9mIHJlcXVpcmUgPT09ICdmdW5jdGlvbicgPyBmYWN0b3J5KHJlcXVpcmUoJy4uL21vbWVudCcpKSA6XG4gICB0eXBlb2YgZGVmaW5lID09PSAnZnVuY3Rpb24nICYmIGRlZmluZS5hbWQgPyBkZWZpbmUoWycuLi9tb21lbnQnXSwgZmFjdG9yeSkgOlxuICAgZmFjdG9yeShnbG9iYWwubW9tZW50KVxufSh0aGlzLCAoZnVuY3Rpb24gKG1vbWVudCkgeyAndXNlIHN0cmljdCc7XG5cbiAgICAvLyEgbW9tZW50LmpzIGxvY2FsZSBjb25maWd1cmF0aW9uXG5cbiAgICB2YXIgbW9udGhzID0gW1xuICAgICAgICAgICAgJ9is2YbZiNix2YonLFxuICAgICAgICAgICAgJ9mB2YrYqNix2YjYsdmKJyxcbiAgICAgICAgICAgICfZhdin2LHahicsXG4gICAgICAgICAgICAn2KfZvtix2YrZhCcsXG4gICAgICAgICAgICAn2YXYptmKJyxcbiAgICAgICAgICAgICfYrNmI2YYnLFxuICAgICAgICAgICAgJ9is2YjZhNin2KHZkCcsXG4gICAgICAgICAgICAn2KLar9iz2b0nLFxuICAgICAgICAgICAgJ9iz2YrZvtm92YXYqNixJyxcbiAgICAgICAgICAgICfYotqq2b3ZiNio2LEnLFxuICAgICAgICAgICAgJ9mG2YjZhdio2LEnLFxuICAgICAgICAgICAgJ9qK2LPZhdio2LEnLFxuICAgICAgICBdLFxuICAgICAgICBkYXlzID0gWyfYotqG2LEnLCAn2LPZiNmF2LEnLCAn2Kfasdin2LHZiCcsICfYp9ix2KjYuScsICfYrtmF2YrYsycsICfYrNmF2LknLCAn2ofZhtqH2LEnXTtcblxuICAgIHZhciBzZCA9IG1vbWVudC5kZWZpbmVMb2NhbGUoJ3NkJywge1xuICAgICAgICBtb250aHM6IG1vbnRocyxcbiAgICAgICAgbW9udGhzU2hvcnQ6IG1vbnRocyxcbiAgICAgICAgd2Vla2RheXM6IGRheXMsXG4gICAgICAgIHdlZWtkYXlzU2hvcnQ6IGRheXMsXG4gICAgICAgIHdlZWtkYXlzTWluOiBkYXlzLFxuICAgICAgICBsb25nRGF0ZUZvcm1hdDoge1xuICAgICAgICAgICAgTFQ6ICdISDptbScsXG4gICAgICAgICAgICBMVFM6ICdISDptbTpzcycsXG4gICAgICAgICAgICBMOiAnREQvTU0vWVlZWScsXG4gICAgICAgICAgICBMTDogJ0QgTU1NTSBZWVlZJyxcbiAgICAgICAgICAgIExMTDogJ0QgTU1NTSBZWVlZIEhIOm1tJyxcbiAgICAgICAgICAgIExMTEw6ICdkZGRk2IwgRCBNTU1NIFlZWVkgSEg6bW0nLFxuICAgICAgICB9LFxuICAgICAgICBtZXJpZGllbVBhcnNlOiAv2LXYqNitfNi02KfZhS8sXG4gICAgICAgIGlzUE06IGZ1bmN0aW9uIChpbnB1dCkge1xuICAgICAgICAgICAgcmV0dXJuICfYtNin2YUnID09PSBpbnB1dDtcbiAgICAgICAgfSxcbiAgICAgICAgbWVyaWRpZW06IGZ1bmN0aW9uIChob3VyLCBtaW51dGUsIGlzTG93ZXIpIHtcbiAgICAgICAgICAgIGlmIChob3VyIDwgMTIpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gJ9i12KjYrSc7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gJ9i02KfZhSc7XG4gICAgICAgIH0sXG4gICAgICAgIGNhbGVuZGFyOiB7XG4gICAgICAgICAgICBzYW1lRGF5OiAnW9in2oRdIExUJyxcbiAgICAgICAgICAgIG5leHREYXk6ICdb2LPagNin2rvZil0gTFQnLFxuICAgICAgICAgICAgbmV4dFdlZWs6ICdkZGRkIFvYp9qz2YrZhiDZh9mB2KrZiiDYqtmKXSBMVCcsXG4gICAgICAgICAgICBsYXN0RGF5OiAnW9qq2KfZhNmH2YddIExUJyxcbiAgICAgICAgICAgIGxhc3RXZWVrOiAnW9qv2LLYsdmK2YQg2YfZgdiq2YpdIGRkZGQgW9iq2YpdIExUJyxcbiAgICAgICAgICAgIHNhbWVFbHNlOiAnTCcsXG4gICAgICAgIH0sXG4gICAgICAgIHJlbGF0aXZlVGltZToge1xuICAgICAgICAgICAgZnV0dXJlOiAnJXMg2b7ZiNihJyxcbiAgICAgICAgICAgIHBhc3Q6ICclcyDYp9qzJyxcbiAgICAgICAgICAgIHM6ICfahtmG2K8g2LPZitqq2YbaiicsXG4gICAgICAgICAgICBzczogJyVkINiz2YraqtmG2oonLFxuICAgICAgICAgICAgbTogJ9mH2qog2YXZhtm9JyxcbiAgICAgICAgICAgIG1tOiAnJWQg2YXZhtm9JyxcbiAgICAgICAgICAgIGg6ICfZh9qqINqq2YTYp9qqJyxcbiAgICAgICAgICAgIGhoOiAnJWQg2qrZhNin2qonLFxuICAgICAgICAgICAgZDogJ9mH2qog2o/ZitmG2YfZhicsXG4gICAgICAgICAgICBkZDogJyVkINqP2YrZhtmH2YYnLFxuICAgICAgICAgICAgTTogJ9mH2qog2YXZh9mK2YbZiCcsXG4gICAgICAgICAgICBNTTogJyVkINmF2YfZitmG2KcnLFxuICAgICAgICAgICAgeTogJ9mH2qog2LPYp9mEJyxcbiAgICAgICAgICAgIHl5OiAnJWQg2LPYp9mEJyxcbiAgICAgICAgfSxcbiAgICAgICAgcHJlcGFyc2U6IGZ1bmN0aW9uIChzdHJpbmcpIHtcbiAgICAgICAgICAgIHJldHVybiBzdHJpbmcucmVwbGFjZSgv2IwvZywgJywnKTtcbiAgICAgICAgfSxcbiAgICAgICAgcG9zdGZvcm1hdDogZnVuY3Rpb24gKHN0cmluZykge1xuICAgICAgICAgICAgcmV0dXJuIHN0cmluZy5yZXBsYWNlKC8sL2csICfYjCcpO1xuICAgICAgICB9LFxuICAgICAgICB3ZWVrOiB7XG4gICAgICAgICAgICBkb3c6IDEsIC8vIE1vbmRheSBpcyB0aGUgZmlyc3QgZGF5IG9mIHRoZSB3ZWVrLlxuICAgICAgICAgICAgZG95OiA0LCAvLyBUaGUgd2VlayB0aGF0IGNvbnRhaW5zIEphbiA0dGggaXMgdGhlIGZpcnN0IHdlZWsgb2YgdGhlIHllYXIuXG4gICAgICAgIH0sXG4gICAgfSk7XG5cbiAgICByZXR1cm4gc2Q7XG5cbn0pKSk7XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///1221\n")},1632:function(__unused_webpack_module,__unused_webpack_exports,__webpack_require__){eval("//! moment.js locale configuration\n//! locale : Chinese (Hong Kong) [zh-hk]\n//! author : Ben : https://github.com/ben-lin\n//! author : Chris Lam : https://github.com/hehachris\n//! author : Konstantin : https://github.com/skfd\n//! author : Anthony : https://github.com/anthonylau\n\n;(function (global, factory) {\n true ? factory(__webpack_require__(95093)) :\n 0\n}(this, (function (moment) { 'use strict';\n\n //! moment.js locale configuration\n\n var zhHk = moment.defineLocale('zh-hk', {\n months: '一月_二月_三月_四月_五月_六月_七月_八月_九月_十月_十一月_十二月'.split(\n '_'\n ),\n monthsShort: '1月_2月_3月_4月_5月_6月_7月_8月_9月_10月_11月_12月'.split(\n '_'\n ),\n weekdays: '星期日_星期一_星期二_星期三_星期四_星期五_星期六'.split('_'),\n weekdaysShort: '週日_週一_週二_週三_週四_週五_週六'.split('_'),\n weekdaysMin: '日_一_二_三_四_五_六'.split('_'),\n longDateFormat: {\n LT: 'HH:mm',\n LTS: 'HH:mm:ss',\n L: 'YYYY/MM/DD',\n LL: 'YYYY年M月D日',\n LLL: 'YYYY年M月D日 HH:mm',\n LLLL: 'YYYY年M月D日dddd HH:mm',\n l: 'YYYY/M/D',\n ll: 'YYYY年M月D日',\n lll: 'YYYY年M月D日 HH:mm',\n llll: 'YYYY年M月D日dddd HH:mm',\n },\n meridiemParse: /凌晨|早上|上午|中午|下午|晚上/,\n meridiemHour: function (hour, meridiem) {\n if (hour === 12) {\n hour = 0;\n }\n if (meridiem === '凌晨' || meridiem === '早上' || meridiem === '上午') {\n return hour;\n } else if (meridiem === '中午') {\n return hour >= 11 ? hour : hour + 12;\n } else if (meridiem === '下午' || meridiem === '晚上') {\n return hour + 12;\n }\n },\n meridiem: function (hour, minute, isLower) {\n var hm = hour * 100 + minute;\n if (hm < 600) {\n return '凌晨';\n } else if (hm < 900) {\n return '早上';\n } else if (hm < 1200) {\n return '上午';\n } else if (hm === 1200) {\n return '中午';\n } else if (hm < 1800) {\n return '下午';\n } else {\n return '晚上';\n }\n },\n calendar: {\n sameDay: '[今天]LT',\n nextDay: '[明天]LT',\n nextWeek: '[下]ddddLT',\n lastDay: '[昨天]LT',\n lastWeek: '[上]ddddLT',\n sameElse: 'L',\n },\n dayOfMonthOrdinalParse: /\\d{1,2}(日|月|週)/,\n ordinal: function (number, period) {\n switch (period) {\n case 'd':\n case 'D':\n case 'DDD':\n return number + '日';\n case 'M':\n return number + '月';\n case 'w':\n case 'W':\n return number + '週';\n default:\n return number;\n }\n },\n relativeTime: {\n future: '%s後',\n past: '%s前',\n s: '幾秒',\n ss: '%d 秒',\n m: '1 分鐘',\n mm: '%d 分鐘',\n h: '1 小時',\n hh: '%d 小時',\n d: '1 天',\n dd: '%d 天',\n M: '1 個月',\n MM: '%d 個月',\n y: '1 年',\n yy: '%d 年',\n },\n });\n\n return zhHk;\n\n})));\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMTYzMi5qcyIsIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vaXRnLW5leHRnZW4tZnJvbnRlbmQvLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS96aC1oay5qcz80OWFiIl0sInNvdXJjZXNDb250ZW50IjpbIi8vISBtb21lbnQuanMgbG9jYWxlIGNvbmZpZ3VyYXRpb25cbi8vISBsb2NhbGUgOiBDaGluZXNlIChIb25nIEtvbmcpIFt6aC1oa11cbi8vISBhdXRob3IgOiBCZW4gOiBodHRwczovL2dpdGh1Yi5jb20vYmVuLWxpblxuLy8hIGF1dGhvciA6IENocmlzIExhbSA6IGh0dHBzOi8vZ2l0aHViLmNvbS9oZWhhY2hyaXNcbi8vISBhdXRob3IgOiBLb25zdGFudGluIDogaHR0cHM6Ly9naXRodWIuY29tL3NrZmRcbi8vISBhdXRob3IgOiBBbnRob255IDogaHR0cHM6Ly9naXRodWIuY29tL2FudGhvbnlsYXVcblxuOyhmdW5jdGlvbiAoZ2xvYmFsLCBmYWN0b3J5KSB7XG4gICB0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcgJiYgdHlwZW9mIG1vZHVsZSAhPT0gJ3VuZGVmaW5lZCdcbiAgICAgICAmJiB0eXBlb2YgcmVxdWlyZSA9PT0gJ2Z1bmN0aW9uJyA/IGZhY3RvcnkocmVxdWlyZSgnLi4vbW9tZW50JykpIDpcbiAgIHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgZGVmaW5lLmFtZCA/IGRlZmluZShbJy4uL21vbWVudCddLCBmYWN0b3J5KSA6XG4gICBmYWN0b3J5KGdsb2JhbC5tb21lbnQpXG59KHRoaXMsIChmdW5jdGlvbiAobW9tZW50KSB7ICd1c2Ugc3RyaWN0JztcblxuICAgIC8vISBtb21lbnQuanMgbG9jYWxlIGNvbmZpZ3VyYXRpb25cblxuICAgIHZhciB6aEhrID0gbW9tZW50LmRlZmluZUxvY2FsZSgnemgtaGsnLCB7XG4gICAgICAgIG1vbnRoczogJ+S4gOaciF/kuozmnIhf5LiJ5pyIX+Wbm+aciF/kupTmnIhf5YWt5pyIX+S4g+aciF/lhavmnIhf5Lmd5pyIX+WNgeaciF/ljYHkuIDmnIhf5Y2B5LqM5pyIJy5zcGxpdChcbiAgICAgICAgICAgICdfJ1xuICAgICAgICApLFxuICAgICAgICBtb250aHNTaG9ydDogJzHmnIhfMuaciF8z5pyIXzTmnIhfNeaciF825pyIXzfmnIhfOOaciF855pyIXzEw5pyIXzEx5pyIXzEy5pyIJy5zcGxpdChcbiAgICAgICAgICAgICdfJ1xuICAgICAgICApLFxuICAgICAgICB3ZWVrZGF5czogJ+aYn+acn+aXpV/mmJ/mnJ/kuIBf5pif5pyf5LqMX+aYn+acn+S4iV/mmJ/mnJ/lm5tf5pif5pyf5LqUX+aYn+acn+WFrScuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXNTaG9ydDogJ+mAseaXpV/pgLHkuIBf6YCx5LqMX+mAseS4iV/pgLHlm5tf6YCx5LqUX+mAseWFrScuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXNNaW46ICfml6Vf5LiAX+S6jF/kuIlf5ZubX+S6lF/lha0nLnNwbGl0KCdfJyksXG4gICAgICAgIGxvbmdEYXRlRm9ybWF0OiB7XG4gICAgICAgICAgICBMVDogJ0hIOm1tJyxcbiAgICAgICAgICAgIExUUzogJ0hIOm1tOnNzJyxcbiAgICAgICAgICAgIEw6ICdZWVlZL01NL0REJyxcbiAgICAgICAgICAgIExMOiAnWVlZWeW5tE3mnIhE5pelJyxcbiAgICAgICAgICAgIExMTDogJ1lZWVnlubRN5pyIROaXpSBISDptbScsXG4gICAgICAgICAgICBMTExMOiAnWVlZWeW5tE3mnIhE5pelZGRkZCBISDptbScsXG4gICAgICAgICAgICBsOiAnWVlZWS9NL0QnLFxuICAgICAgICAgICAgbGw6ICdZWVlZ5bm0TeaciETml6UnLFxuICAgICAgICAgICAgbGxsOiAnWVlZWeW5tE3mnIhE5pelIEhIOm1tJyxcbiAgICAgICAgICAgIGxsbGw6ICdZWVlZ5bm0TeaciETml6VkZGRkIEhIOm1tJyxcbiAgICAgICAgfSxcbiAgICAgICAgbWVyaWRpZW1QYXJzZTogL+WHjOaZqHzml6nkuIp85LiK5Y2IfOS4reWNiHzkuIvljYh85pma5LiKLyxcbiAgICAgICAgbWVyaWRpZW1Ib3VyOiBmdW5jdGlvbiAoaG91ciwgbWVyaWRpZW0pIHtcbiAgICAgICAgICAgIGlmIChob3VyID09PSAxMikge1xuICAgICAgICAgICAgICAgIGhvdXIgPSAwO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKG1lcmlkaWVtID09PSAn5YeM5pmoJyB8fCBtZXJpZGllbSA9PT0gJ+aXqeS4iicgfHwgbWVyaWRpZW0gPT09ICfkuIrljYgnKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGhvdXI7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKG1lcmlkaWVtID09PSAn5Lit5Y2IJykge1xuICAgICAgICAgICAgICAgIHJldHVybiBob3VyID49IDExID8gaG91ciA6IGhvdXIgKyAxMjtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAobWVyaWRpZW0gPT09ICfkuIvljYgnIHx8IG1lcmlkaWVtID09PSAn5pma5LiKJykge1xuICAgICAgICAgICAgICAgIHJldHVybiBob3VyICsgMTI7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIG1lcmlkaWVtOiBmdW5jdGlvbiAoaG91ciwgbWludXRlLCBpc0xvd2VyKSB7XG4gICAgICAgICAgICB2YXIgaG0gPSBob3VyICogMTAwICsgbWludXRlO1xuICAgICAgICAgICAgaWYgKGhtIDwgNjAwKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuICflh4zmmagnO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChobSA8IDkwMCkge1xuICAgICAgICAgICAgICAgIHJldHVybiAn5pep5LiKJztcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoaG0gPCAxMjAwKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuICfkuIrljYgnO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChobSA9PT0gMTIwMCkge1xuICAgICAgICAgICAgICAgIHJldHVybiAn5Lit5Y2IJztcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoaG0gPCAxODAwKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuICfkuIvljYgnO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gJ+aZmuS4iic7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIGNhbGVuZGFyOiB7XG4gICAgICAgICAgICBzYW1lRGF5OiAnW+S7iuWkqV1MVCcsXG4gICAgICAgICAgICBuZXh0RGF5OiAnW+aYjuWkqV1MVCcsXG4gICAgICAgICAgICBuZXh0V2VlazogJ1vkuItdZGRkZExUJyxcbiAgICAgICAgICAgIGxhc3REYXk6ICdb5pio5aSpXUxUJyxcbiAgICAgICAgICAgIGxhc3RXZWVrOiAnW+S4il1kZGRkTFQnLFxuICAgICAgICAgICAgc2FtZUVsc2U6ICdMJyxcbiAgICAgICAgfSxcbiAgICAgICAgZGF5T2ZNb250aE9yZGluYWxQYXJzZTogL1xcZHsxLDJ9KOaXpXzmnIh86YCxKS8sXG4gICAgICAgIG9yZGluYWw6IGZ1bmN0aW9uIChudW1iZXIsIHBlcmlvZCkge1xuICAgICAgICAgICAgc3dpdGNoIChwZXJpb2QpIHtcbiAgICAgICAgICAgICAgICBjYXNlICdkJzpcbiAgICAgICAgICAgICAgICBjYXNlICdEJzpcbiAgICAgICAgICAgICAgICBjYXNlICdEREQnOlxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gbnVtYmVyICsgJ+aXpSc7XG4gICAgICAgICAgICAgICAgY2FzZSAnTSc6XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBudW1iZXIgKyAn5pyIJztcbiAgICAgICAgICAgICAgICBjYXNlICd3JzpcbiAgICAgICAgICAgICAgICBjYXNlICdXJzpcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG51bWJlciArICfpgLEnO1xuICAgICAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBudW1iZXI7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIHJlbGF0aXZlVGltZToge1xuICAgICAgICAgICAgZnV0dXJlOiAnJXPlvownLFxuICAgICAgICAgICAgcGFzdDogJyVz5YmNJyxcbiAgICAgICAgICAgIHM6ICflub7np5InLFxuICAgICAgICAgICAgc3M6ICclZCDnp5InLFxuICAgICAgICAgICAgbTogJzEg5YiG6ZCYJyxcbiAgICAgICAgICAgIG1tOiAnJWQg5YiG6ZCYJyxcbiAgICAgICAgICAgIGg6ICcxIOWwj+aZgicsXG4gICAgICAgICAgICBoaDogJyVkIOWwj+aZgicsXG4gICAgICAgICAgICBkOiAnMSDlpKknLFxuICAgICAgICAgICAgZGQ6ICclZCDlpKknLFxuICAgICAgICAgICAgTTogJzEg5YCL5pyIJyxcbiAgICAgICAgICAgIE1NOiAnJWQg5YCL5pyIJyxcbiAgICAgICAgICAgIHk6ICcxIOW5tCcsXG4gICAgICAgICAgICB5eTogJyVkIOW5tCcsXG4gICAgICAgIH0sXG4gICAgfSk7XG5cbiAgICByZXR1cm4gemhIaztcblxufSkpKTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///1632\n")},2246:(I,g,t)=>{"use strict";I.exports=t.p+"c7dc1f998cc02a16890f.png"},2355:(I,g,t)=>{"use strict";I.exports=t.p+"f4b352b31ee751d11826.png"},2694:(module,__unused_webpack_exports,__webpack_require__)=>{"use strict";eval("/**\n * Copyright (c) 2013-present, Facebook, Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n\n\nvar ReactPropTypesSecret = __webpack_require__(6925);\n\nfunction emptyFunction() {}\nfunction emptyFunctionWithReset() {}\nemptyFunctionWithReset.resetWarningCache = emptyFunction;\n\nmodule.exports = function() {\n function shim(props, propName, componentName, location, propFullName, secret) {\n if (secret === ReactPropTypesSecret) {\n // It is still safe when called from React.\n return;\n }\n var err = new Error(\n 'Calling PropTypes validators directly is not supported by the `prop-types` package. ' +\n 'Use PropTypes.checkPropTypes() to call them. ' +\n 'Read more at http://fb.me/use-check-prop-types'\n );\n err.name = 'Invariant Violation';\n throw err;\n };\n shim.isRequired = shim;\n function getShim() {\n return shim;\n };\n // Important!\n // Keep this list in sync with production version in `./factoryWithTypeCheckers.js`.\n var ReactPropTypes = {\n array: shim,\n bigint: shim,\n bool: shim,\n func: shim,\n number: shim,\n object: shim,\n string: shim,\n symbol: shim,\n\n any: shim,\n arrayOf: getShim,\n element: shim,\n elementType: shim,\n instanceOf: getShim,\n node: shim,\n objectOf: getShim,\n oneOf: getShim,\n oneOfType: getShim,\n shape: getShim,\n exact: getShim,\n\n checkPropTypes: emptyFunctionWithReset,\n resetWarningCache: emptyFunction\n };\n\n ReactPropTypes.PropTypes = ReactPropTypes;\n\n return ReactPropTypes;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMjY5NC5qcyIsIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vaXRnLW5leHRnZW4tZnJvbnRlbmQvLi9ub2RlX21vZHVsZXMvcHJvcC10eXBlcy9mYWN0b3J5V2l0aFRocm93aW5nU2hpbXMuanM/ZDdhMCJdLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIENvcHlyaWdodCAoYykgMjAxMy1wcmVzZW50LCBGYWNlYm9vaywgSW5jLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLlxuICovXG5cbid1c2Ugc3RyaWN0JztcblxudmFyIFJlYWN0UHJvcFR5cGVzU2VjcmV0ID0gcmVxdWlyZSgnLi9saWIvUmVhY3RQcm9wVHlwZXNTZWNyZXQnKTtcblxuZnVuY3Rpb24gZW1wdHlGdW5jdGlvbigpIHt9XG5mdW5jdGlvbiBlbXB0eUZ1bmN0aW9uV2l0aFJlc2V0KCkge31cbmVtcHR5RnVuY3Rpb25XaXRoUmVzZXQucmVzZXRXYXJuaW5nQ2FjaGUgPSBlbXB0eUZ1bmN0aW9uO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKCkge1xuICBmdW5jdGlvbiBzaGltKHByb3BzLCBwcm9wTmFtZSwgY29tcG9uZW50TmFtZSwgbG9jYXRpb24sIHByb3BGdWxsTmFtZSwgc2VjcmV0KSB7XG4gICAgaWYgKHNlY3JldCA9PT0gUmVhY3RQcm9wVHlwZXNTZWNyZXQpIHtcbiAgICAgIC8vIEl0IGlzIHN0aWxsIHNhZmUgd2hlbiBjYWxsZWQgZnJvbSBSZWFjdC5cbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdmFyIGVyciA9IG5ldyBFcnJvcihcbiAgICAgICdDYWxsaW5nIFByb3BUeXBlcyB2YWxpZGF0b3JzIGRpcmVjdGx5IGlzIG5vdCBzdXBwb3J0ZWQgYnkgdGhlIGBwcm9wLXR5cGVzYCBwYWNrYWdlLiAnICtcbiAgICAgICdVc2UgUHJvcFR5cGVzLmNoZWNrUHJvcFR5cGVzKCkgdG8gY2FsbCB0aGVtLiAnICtcbiAgICAgICdSZWFkIG1vcmUgYXQgaHR0cDovL2ZiLm1lL3VzZS1jaGVjay1wcm9wLXR5cGVzJ1xuICAgICk7XG4gICAgZXJyLm5hbWUgPSAnSW52YXJpYW50IFZpb2xhdGlvbic7XG4gICAgdGhyb3cgZXJyO1xuICB9O1xuICBzaGltLmlzUmVxdWlyZWQgPSBzaGltO1xuICBmdW5jdGlvbiBnZXRTaGltKCkge1xuICAgIHJldHVybiBzaGltO1xuICB9O1xuICAvLyBJbXBvcnRhbnQhXG4gIC8vIEtlZXAgdGhpcyBsaXN0IGluIHN5bmMgd2l0aCBwcm9kdWN0aW9uIHZlcnNpb24gaW4gYC4vZmFjdG9yeVdpdGhUeXBlQ2hlY2tlcnMuanNgLlxuICB2YXIgUmVhY3RQcm9wVHlwZXMgPSB7XG4gICAgYXJyYXk6IHNoaW0sXG4gICAgYmlnaW50OiBzaGltLFxuICAgIGJvb2w6IHNoaW0sXG4gICAgZnVuYzogc2hpbSxcbiAgICBudW1iZXI6IHNoaW0sXG4gICAgb2JqZWN0OiBzaGltLFxuICAgIHN0cmluZzogc2hpbSxcbiAgICBzeW1ib2w6IHNoaW0sXG5cbiAgICBhbnk6IHNoaW0sXG4gICAgYXJyYXlPZjogZ2V0U2hpbSxcbiAgICBlbGVtZW50OiBzaGltLFxuICAgIGVsZW1lbnRUeXBlOiBzaGltLFxuICAgIGluc3RhbmNlT2Y6IGdldFNoaW0sXG4gICAgbm9kZTogc2hpbSxcbiAgICBvYmplY3RPZjogZ2V0U2hpbSxcbiAgICBvbmVPZjogZ2V0U2hpbSxcbiAgICBvbmVPZlR5cGU6IGdldFNoaW0sXG4gICAgc2hhcGU6IGdldFNoaW0sXG4gICAgZXhhY3Q6IGdldFNoaW0sXG5cbiAgICBjaGVja1Byb3BUeXBlczogZW1wdHlGdW5jdGlvbldpdGhSZXNldCxcbiAgICByZXNldFdhcm5pbmdDYWNoZTogZW1wdHlGdW5jdGlvblxuICB9O1xuXG4gIFJlYWN0UHJvcFR5cGVzLlByb3BUeXBlcyA9IFJlYWN0UHJvcFR5cGVzO1xuXG4gIHJldHVybiBSZWFjdFByb3BUeXBlcztcbn07XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///2694\n")},2833:module=>{eval('//\n\nmodule.exports = function shallowEqual(objA, objB, compare, compareContext) {\n var ret = compare ? compare.call(compareContext, objA, objB) : void 0;\n\n if (ret !== void 0) {\n return !!ret;\n }\n\n if (objA === objB) {\n return true;\n }\n\n if (typeof objA !== "object" || !objA || typeof objB !== "object" || !objB) {\n return false;\n }\n\n var keysA = Object.keys(objA);\n var keysB = Object.keys(objB);\n\n if (keysA.length !== keysB.length) {\n return false;\n }\n\n var bHasOwnProperty = Object.prototype.hasOwnProperty.bind(objB);\n\n // Test for A\'s keys different from B.\n for (var idx = 0; idx < keysA.length; idx++) {\n var key = keysA[idx];\n\n if (!bHasOwnProperty(key)) {\n return false;\n }\n\n var valueA = objA[key];\n var valueB = objB[key];\n\n ret = compare ? compare.call(compareContext, valueA, valueB, key) : void 0;\n\n if (ret === false || (ret === void 0 && valueA !== valueB)) {\n return false;\n }\n }\n\n return true;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMjgzMy5qcyIsIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL2l0Zy1uZXh0Z2VuLWZyb250ZW5kLy4vbm9kZV9tb2R1bGVzL3NoYWxsb3dlcXVhbC9pbmRleC5qcz8xYjJiIl0sInNvdXJjZXNDb250ZW50IjpbIi8vXG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gc2hhbGxvd0VxdWFsKG9iakEsIG9iakIsIGNvbXBhcmUsIGNvbXBhcmVDb250ZXh0KSB7XG4gIHZhciByZXQgPSBjb21wYXJlID8gY29tcGFyZS5jYWxsKGNvbXBhcmVDb250ZXh0LCBvYmpBLCBvYmpCKSA6IHZvaWQgMDtcblxuICBpZiAocmV0ICE9PSB2b2lkIDApIHtcbiAgICByZXR1cm4gISFyZXQ7XG4gIH1cblxuICBpZiAob2JqQSA9PT0gb2JqQikge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgaWYgKHR5cGVvZiBvYmpBICE9PSBcIm9iamVjdFwiIHx8ICFvYmpBIHx8IHR5cGVvZiBvYmpCICE9PSBcIm9iamVjdFwiIHx8ICFvYmpCKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgdmFyIGtleXNBID0gT2JqZWN0LmtleXMob2JqQSk7XG4gIHZhciBrZXlzQiA9IE9iamVjdC5rZXlzKG9iakIpO1xuXG4gIGlmIChrZXlzQS5sZW5ndGggIT09IGtleXNCLmxlbmd0aCkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIHZhciBiSGFzT3duUHJvcGVydHkgPSBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmJpbmQob2JqQik7XG5cbiAgLy8gVGVzdCBmb3IgQSdzIGtleXMgZGlmZmVyZW50IGZyb20gQi5cbiAgZm9yICh2YXIgaWR4ID0gMDsgaWR4IDwga2V5c0EubGVuZ3RoOyBpZHgrKykge1xuICAgIHZhciBrZXkgPSBrZXlzQVtpZHhdO1xuXG4gICAgaWYgKCFiSGFzT3duUHJvcGVydHkoa2V5KSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIHZhciB2YWx1ZUEgPSBvYmpBW2tleV07XG4gICAgdmFyIHZhbHVlQiA9IG9iakJba2V5XTtcblxuICAgIHJldCA9IGNvbXBhcmUgPyBjb21wYXJlLmNhbGwoY29tcGFyZUNvbnRleHQsIHZhbHVlQSwgdmFsdWVCLCBrZXkpIDogdm9pZCAwO1xuXG4gICAgaWYgKHJldCA9PT0gZmFsc2UgfHwgKHJldCA9PT0gdm9pZCAwICYmIHZhbHVlQSAhPT0gdmFsdWVCKSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiB0cnVlO1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///2833\n')},2955:(module,__unused_webpack_exports,__webpack_require__)=>{"use strict";eval("\n\nvar _Object$setPrototypeO;\nfunction _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; }\nfunction _toPropertyKey(arg) { var key = _toPrimitive(arg, \"string\"); return typeof key === \"symbol\" ? key : String(key); }\nfunction _toPrimitive(input, hint) { if (typeof input !== \"object\" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || \"default\"); if (typeof res !== \"object\") return res; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (hint === \"string\" ? String : Number)(input); }\nvar finished = __webpack_require__(86238);\nvar kLastResolve = Symbol('lastResolve');\nvar kLastReject = Symbol('lastReject');\nvar kError = Symbol('error');\nvar kEnded = Symbol('ended');\nvar kLastPromise = Symbol('lastPromise');\nvar kHandlePromise = Symbol('handlePromise');\nvar kStream = Symbol('stream');\nfunction createIterResult(value, done) {\n return {\n value: value,\n done: done\n };\n}\nfunction readAndResolve(iter) {\n var resolve = iter[kLastResolve];\n if (resolve !== null) {\n var data = iter[kStream].read();\n // we defer if data is null\n // we can be expecting either 'end' or\n // 'error'\n if (data !== null) {\n iter[kLastPromise] = null;\n iter[kLastResolve] = null;\n iter[kLastReject] = null;\n resolve(createIterResult(data, false));\n }\n }\n}\nfunction onReadable(iter) {\n // we wait for the next tick, because it might\n // emit an error with process.nextTick\n process.nextTick(readAndResolve, iter);\n}\nfunction wrapForNext(lastPromise, iter) {\n return function (resolve, reject) {\n lastPromise.then(function () {\n if (iter[kEnded]) {\n resolve(createIterResult(undefined, true));\n return;\n }\n iter[kHandlePromise](resolve, reject);\n }, reject);\n };\n}\nvar AsyncIteratorPrototype = Object.getPrototypeOf(function () {});\nvar ReadableStreamAsyncIteratorPrototype = Object.setPrototypeOf((_Object$setPrototypeO = {\n get stream() {\n return this[kStream];\n },\n next: function next() {\n var _this = this;\n // if we have detected an error in the meanwhile\n // reject straight away\n var error = this[kError];\n if (error !== null) {\n return Promise.reject(error);\n }\n if (this[kEnded]) {\n return Promise.resolve(createIterResult(undefined, true));\n }\n if (this[kStream].destroyed) {\n // We need to defer via nextTick because if .destroy(err) is\n // called, the error will be emitted via nextTick, and\n // we cannot guarantee that there is no error lingering around\n // waiting to be emitted.\n return new Promise(function (resolve, reject) {\n process.nextTick(function () {\n if (_this[kError]) {\n reject(_this[kError]);\n } else {\n resolve(createIterResult(undefined, true));\n }\n });\n });\n }\n\n // if we have multiple next() calls\n // we will wait for the previous Promise to finish\n // this logic is optimized to support for await loops,\n // where next() is only called once at a time\n var lastPromise = this[kLastPromise];\n var promise;\n if (lastPromise) {\n promise = new Promise(wrapForNext(lastPromise, this));\n } else {\n // fast path needed to support multiple this.push()\n // without triggering the next() queue\n var data = this[kStream].read();\n if (data !== null) {\n return Promise.resolve(createIterResult(data, false));\n }\n promise = new Promise(this[kHandlePromise]);\n }\n this[kLastPromise] = promise;\n return promise;\n }\n}, _defineProperty(_Object$setPrototypeO, Symbol.asyncIterator, function () {\n return this;\n}), _defineProperty(_Object$setPrototypeO, \"return\", function _return() {\n var _this2 = this;\n // destroy(err, cb) is a private API\n // we can guarantee we have that here, because we control the\n // Readable class this is attached to\n return new Promise(function (resolve, reject) {\n _this2[kStream].destroy(null, function (err) {\n if (err) {\n reject(err);\n return;\n }\n resolve(createIterResult(undefined, true));\n });\n });\n}), _Object$setPrototypeO), AsyncIteratorPrototype);\nvar createReadableStreamAsyncIterator = function createReadableStreamAsyncIterator(stream) {\n var _Object$create;\n var iterator = Object.create(ReadableStreamAsyncIteratorPrototype, (_Object$create = {}, _defineProperty(_Object$create, kStream, {\n value: stream,\n writable: true\n }), _defineProperty(_Object$create, kLastResolve, {\n value: null,\n writable: true\n }), _defineProperty(_Object$create, kLastReject, {\n value: null,\n writable: true\n }), _defineProperty(_Object$create, kError, {\n value: null,\n writable: true\n }), _defineProperty(_Object$create, kEnded, {\n value: stream._readableState.endEmitted,\n writable: true\n }), _defineProperty(_Object$create, kHandlePromise, {\n value: function value(resolve, reject) {\n var data = iterator[kStream].read();\n if (data) {\n iterator[kLastPromise] = null;\n iterator[kLastResolve] = null;\n iterator[kLastReject] = null;\n resolve(createIterResult(data, false));\n } else {\n iterator[kLastResolve] = resolve;\n iterator[kLastReject] = reject;\n }\n },\n writable: true\n }), _Object$create));\n iterator[kLastPromise] = null;\n finished(stream, function (err) {\n if (err && err.code !== 'ERR_STREAM_PREMATURE_CLOSE') {\n var reject = iterator[kLastReject];\n // reject if we are waiting for data in the Promise\n // returned by next() and store the error\n if (reject !== null) {\n iterator[kLastPromise] = null;\n iterator[kLastResolve] = null;\n iterator[kLastReject] = null;\n reject(err);\n }\n iterator[kError] = err;\n return;\n }\n var resolve = iterator[kLastResolve];\n if (resolve !== null) {\n iterator[kLastPromise] = null;\n iterator[kLastResolve] = null;\n iterator[kLastReject] = null;\n resolve(createIterResult(undefined, true));\n }\n iterator[kEnded] = true;\n });\n stream.on('readable', onReadable.bind(null, iterator));\n return iterator;\n};\nmodule.exports = createReadableStreamAsyncIterator;//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMjk1NS5qcyIsIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9pdGctbmV4dGdlbi1mcm9udGVuZC8uL25vZGVfbW9kdWxlcy9yZWFkYWJsZS1zdHJlYW0vbGliL2ludGVybmFsL3N0cmVhbXMvYXN5bmNfaXRlcmF0b3IuanM/OWMwZSJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciBfT2JqZWN0JHNldFByb3RvdHlwZU87XG5mdW5jdGlvbiBfZGVmaW5lUHJvcGVydHkob2JqLCBrZXksIHZhbHVlKSB7IGtleSA9IF90b1Byb3BlcnR5S2V5KGtleSk7IGlmIChrZXkgaW4gb2JqKSB7IE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvYmosIGtleSwgeyB2YWx1ZTogdmFsdWUsIGVudW1lcmFibGU6IHRydWUsIGNvbmZpZ3VyYWJsZTogdHJ1ZSwgd3JpdGFibGU6IHRydWUgfSk7IH0gZWxzZSB7IG9ialtrZXldID0gdmFsdWU7IH0gcmV0dXJuIG9iajsgfVxuZnVuY3Rpb24gX3RvUHJvcGVydHlLZXkoYXJnKSB7IHZhciBrZXkgPSBfdG9QcmltaXRpdmUoYXJnLCBcInN0cmluZ1wiKTsgcmV0dXJuIHR5cGVvZiBrZXkgPT09IFwic3ltYm9sXCIgPyBrZXkgOiBTdHJpbmcoa2V5KTsgfVxuZnVuY3Rpb24gX3RvUHJpbWl0aXZlKGlucHV0LCBoaW50KSB7IGlmICh0eXBlb2YgaW5wdXQgIT09IFwib2JqZWN0XCIgfHwgaW5wdXQgPT09IG51bGwpIHJldHVybiBpbnB1dDsgdmFyIHByaW0gPSBpbnB1dFtTeW1ib2wudG9QcmltaXRpdmVdOyBpZiAocHJpbSAhPT0gdW5kZWZpbmVkKSB7IHZhciByZXMgPSBwcmltLmNhbGwoaW5wdXQsIGhpbnQgfHwgXCJkZWZhdWx0XCIpOyBpZiAodHlwZW9mIHJlcyAhPT0gXCJvYmplY3RcIikgcmV0dXJuIHJlczsgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuXCIpOyB9IHJldHVybiAoaGludCA9PT0gXCJzdHJpbmdcIiA/IFN0cmluZyA6IE51bWJlcikoaW5wdXQpOyB9XG52YXIgZmluaXNoZWQgPSByZXF1aXJlKCcuL2VuZC1vZi1zdHJlYW0nKTtcbnZhciBrTGFzdFJlc29sdmUgPSBTeW1ib2woJ2xhc3RSZXNvbHZlJyk7XG52YXIga0xhc3RSZWplY3QgPSBTeW1ib2woJ2xhc3RSZWplY3QnKTtcbnZhciBrRXJyb3IgPSBTeW1ib2woJ2Vycm9yJyk7XG52YXIga0VuZGVkID0gU3ltYm9sKCdlbmRlZCcpO1xudmFyIGtMYXN0UHJvbWlzZSA9IFN5bWJvbCgnbGFzdFByb21pc2UnKTtcbnZhciBrSGFuZGxlUHJvbWlzZSA9IFN5bWJvbCgnaGFuZGxlUHJvbWlzZScpO1xudmFyIGtTdHJlYW0gPSBTeW1ib2woJ3N0cmVhbScpO1xuZnVuY3Rpb24gY3JlYXRlSXRlclJlc3VsdCh2YWx1ZSwgZG9uZSkge1xuICByZXR1cm4ge1xuICAgIHZhbHVlOiB2YWx1ZSxcbiAgICBkb25lOiBkb25lXG4gIH07XG59XG5mdW5jdGlvbiByZWFkQW5kUmVzb2x2ZShpdGVyKSB7XG4gIHZhciByZXNvbHZlID0gaXRlcltrTGFzdFJlc29sdmVdO1xuICBpZiAocmVzb2x2ZSAhPT0gbnVsbCkge1xuICAgIHZhciBkYXRhID0gaXRlcltrU3RyZWFtXS5yZWFkKCk7XG4gICAgLy8gd2UgZGVmZXIgaWYgZGF0YSBpcyBudWxsXG4gICAgLy8gd2UgY2FuIGJlIGV4cGVjdGluZyBlaXRoZXIgJ2VuZCcgb3JcbiAgICAvLyAnZXJyb3InXG4gICAgaWYgKGRhdGEgIT09IG51bGwpIHtcbiAgICAgIGl0ZXJba0xhc3RQcm9taXNlXSA9IG51bGw7XG4gICAgICBpdGVyW2tMYXN0UmVzb2x2ZV0gPSBudWxsO1xuICAgICAgaXRlcltrTGFzdFJlamVjdF0gPSBudWxsO1xuICAgICAgcmVzb2x2ZShjcmVhdGVJdGVyUmVzdWx0KGRhdGEsIGZhbHNlKSk7XG4gICAgfVxuICB9XG59XG5mdW5jdGlvbiBvblJlYWRhYmxlKGl0ZXIpIHtcbiAgLy8gd2Ugd2FpdCBmb3IgdGhlIG5leHQgdGljaywgYmVjYXVzZSBpdCBtaWdodFxuICAvLyBlbWl0IGFuIGVycm9yIHdpdGggcHJvY2Vzcy5uZXh0VGlja1xuICBwcm9jZXNzLm5leHRUaWNrKHJlYWRBbmRSZXNvbHZlLCBpdGVyKTtcbn1cbmZ1bmN0aW9uIHdyYXBGb3JOZXh0KGxhc3RQcm9taXNlLCBpdGVyKSB7XG4gIHJldHVybiBmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgbGFzdFByb21pc2UudGhlbihmdW5jdGlvbiAoKSB7XG4gICAgICBpZiAoaXRlcltrRW5kZWRdKSB7XG4gICAgICAgIHJlc29sdmUoY3JlYXRlSXRlclJlc3VsdCh1bmRlZmluZWQsIHRydWUpKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgaXRlcltrSGFuZGxlUHJvbWlzZV0ocmVzb2x2ZSwgcmVqZWN0KTtcbiAgICB9LCByZWplY3QpO1xuICB9O1xufVxudmFyIEFzeW5jSXRlcmF0b3JQcm90b3R5cGUgPSBPYmplY3QuZ2V0UHJvdG90eXBlT2YoZnVuY3Rpb24gKCkge30pO1xudmFyIFJlYWRhYmxlU3RyZWFtQXN5bmNJdGVyYXRvclByb3RvdHlwZSA9IE9iamVjdC5zZXRQcm90b3R5cGVPZigoX09iamVjdCRzZXRQcm90b3R5cGVPID0ge1xuICBnZXQgc3RyZWFtKCkge1xuICAgIHJldHVybiB0aGlzW2tTdHJlYW1dO1xuICB9LFxuICBuZXh0OiBmdW5jdGlvbiBuZXh0KCkge1xuICAgIHZhciBfdGhpcyA9IHRoaXM7XG4gICAgLy8gaWYgd2UgaGF2ZSBkZXRlY3RlZCBhbiBlcnJvciBpbiB0aGUgbWVhbndoaWxlXG4gICAgLy8gcmVqZWN0IHN0cmFpZ2h0IGF3YXlcbiAgICB2YXIgZXJyb3IgPSB0aGlzW2tFcnJvcl07XG4gICAgaWYgKGVycm9yICE9PSBudWxsKSB7XG4gICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QoZXJyb3IpO1xuICAgIH1cbiAgICBpZiAodGhpc1trRW5kZWRdKSB7XG4gICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKGNyZWF0ZUl0ZXJSZXN1bHQodW5kZWZpbmVkLCB0cnVlKSk7XG4gICAgfVxuICAgIGlmICh0aGlzW2tTdHJlYW1dLmRlc3Ryb3llZCkge1xuICAgICAgLy8gV2UgbmVlZCB0byBkZWZlciB2aWEgbmV4dFRpY2sgYmVjYXVzZSBpZiAuZGVzdHJveShlcnIpIGlzXG4gICAgICAvLyBjYWxsZWQsIHRoZSBlcnJvciB3aWxsIGJlIGVtaXR0ZWQgdmlhIG5leHRUaWNrLCBhbmRcbiAgICAgIC8vIHdlIGNhbm5vdCBndWFyYW50ZWUgdGhhdCB0aGVyZSBpcyBubyBlcnJvciBsaW5nZXJpbmcgYXJvdW5kXG4gICAgICAvLyB3YWl0aW5nIHRvIGJlIGVtaXR0ZWQuXG4gICAgICByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkge1xuICAgICAgICBwcm9jZXNzLm5leHRUaWNrKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICBpZiAoX3RoaXNba0Vycm9yXSkge1xuICAgICAgICAgICAgcmVqZWN0KF90aGlzW2tFcnJvcl0pO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXNvbHZlKGNyZWF0ZUl0ZXJSZXN1bHQodW5kZWZpbmVkLCB0cnVlKSk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIC8vIGlmIHdlIGhhdmUgbXVsdGlwbGUgbmV4dCgpIGNhbGxzXG4gICAgLy8gd2Ugd2lsbCB3YWl0IGZvciB0aGUgcHJldmlvdXMgUHJvbWlzZSB0byBmaW5pc2hcbiAgICAvLyB0aGlzIGxvZ2ljIGlzIG9wdGltaXplZCB0byBzdXBwb3J0IGZvciBhd2FpdCBsb29wcyxcbiAgICAvLyB3aGVyZSBuZXh0KCkgaXMgb25seSBjYWxsZWQgb25jZSBhdCBhIHRpbWVcbiAgICB2YXIgbGFzdFByb21pc2UgPSB0aGlzW2tMYXN0UHJvbWlzZV07XG4gICAgdmFyIHByb21pc2U7XG4gICAgaWYgKGxhc3RQcm9taXNlKSB7XG4gICAgICBwcm9taXNlID0gbmV3IFByb21pc2Uod3JhcEZvck5leHQobGFzdFByb21pc2UsIHRoaXMpKTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gZmFzdCBwYXRoIG5lZWRlZCB0byBzdXBwb3J0IG11bHRpcGxlIHRoaXMucHVzaCgpXG4gICAgICAvLyB3aXRob3V0IHRyaWdnZXJpbmcgdGhlIG5leHQoKSBxdWV1ZVxuICAgICAgdmFyIGRhdGEgPSB0aGlzW2tTdHJlYW1dLnJlYWQoKTtcbiAgICAgIGlmIChkYXRhICE9PSBudWxsKSB7XG4gICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoY3JlYXRlSXRlclJlc3VsdChkYXRhLCBmYWxzZSkpO1xuICAgICAgfVxuICAgICAgcHJvbWlzZSA9IG5ldyBQcm9taXNlKHRoaXNba0hhbmRsZVByb21pc2VdKTtcbiAgICB9XG4gICAgdGhpc1trTGFzdFByb21pc2VdID0gcHJvbWlzZTtcbiAgICByZXR1cm4gcHJvbWlzZTtcbiAgfVxufSwgX2RlZmluZVByb3BlcnR5KF9PYmplY3Qkc2V0UHJvdG90eXBlTywgU3ltYm9sLmFzeW5jSXRlcmF0b3IsIGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuIHRoaXM7XG59KSwgX2RlZmluZVByb3BlcnR5KF9PYmplY3Qkc2V0UHJvdG90eXBlTywgXCJyZXR1cm5cIiwgZnVuY3Rpb24gX3JldHVybigpIHtcbiAgdmFyIF90aGlzMiA9IHRoaXM7XG4gIC8vIGRlc3Ryb3koZXJyLCBjYikgaXMgYSBwcml2YXRlIEFQSVxuICAvLyB3ZSBjYW4gZ3VhcmFudGVlIHdlIGhhdmUgdGhhdCBoZXJlLCBiZWNhdXNlIHdlIGNvbnRyb2wgdGhlXG4gIC8vIFJlYWRhYmxlIGNsYXNzIHRoaXMgaXMgYXR0YWNoZWQgdG9cbiAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHtcbiAgICBfdGhpczJba1N0cmVhbV0uZGVzdHJveShudWxsLCBmdW5jdGlvbiAoZXJyKSB7XG4gICAgICBpZiAoZXJyKSB7XG4gICAgICAgIHJlamVjdChlcnIpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICByZXNvbHZlKGNyZWF0ZUl0ZXJSZXN1bHQodW5kZWZpbmVkLCB0cnVlKSk7XG4gICAgfSk7XG4gIH0pO1xufSksIF9PYmplY3Qkc2V0UHJvdG90eXBlTyksIEFzeW5jSXRlcmF0b3JQcm90b3R5cGUpO1xudmFyIGNyZWF0ZVJlYWRhYmxlU3RyZWFtQXN5bmNJdGVyYXRvciA9IGZ1bmN0aW9uIGNyZWF0ZVJlYWRhYmxlU3RyZWFtQXN5bmNJdGVyYXRvcihzdHJlYW0pIHtcbiAgdmFyIF9PYmplY3QkY3JlYXRlO1xuICB2YXIgaXRlcmF0b3IgPSBPYmplY3QuY3JlYXRlKFJlYWRhYmxlU3RyZWFtQXN5bmNJdGVyYXRvclByb3RvdHlwZSwgKF9PYmplY3QkY3JlYXRlID0ge30sIF9kZWZpbmVQcm9wZXJ0eShfT2JqZWN0JGNyZWF0ZSwga1N0cmVhbSwge1xuICAgIHZhbHVlOiBzdHJlYW0sXG4gICAgd3JpdGFibGU6IHRydWVcbiAgfSksIF9kZWZpbmVQcm9wZXJ0eShfT2JqZWN0JGNyZWF0ZSwga0xhc3RSZXNvbHZlLCB7XG4gICAgdmFsdWU6IG51bGwsXG4gICAgd3JpdGFibGU6IHRydWVcbiAgfSksIF9kZWZpbmVQcm9wZXJ0eShfT2JqZWN0JGNyZWF0ZSwga0xhc3RSZWplY3QsIHtcbiAgICB2YWx1ZTogbnVsbCxcbiAgICB3cml0YWJsZTogdHJ1ZVxuICB9KSwgX2RlZmluZVByb3BlcnR5KF9PYmplY3QkY3JlYXRlLCBrRXJyb3IsIHtcbiAgICB2YWx1ZTogbnVsbCxcbiAgICB3cml0YWJsZTogdHJ1ZVxuICB9KSwgX2RlZmluZVByb3BlcnR5KF9PYmplY3QkY3JlYXRlLCBrRW5kZWQsIHtcbiAgICB2YWx1ZTogc3RyZWFtLl9yZWFkYWJsZVN0YXRlLmVuZEVtaXR0ZWQsXG4gICAgd3JpdGFibGU6IHRydWVcbiAgfSksIF9kZWZpbmVQcm9wZXJ0eShfT2JqZWN0JGNyZWF0ZSwga0hhbmRsZVByb21pc2UsIHtcbiAgICB2YWx1ZTogZnVuY3Rpb24gdmFsdWUocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgICB2YXIgZGF0YSA9IGl0ZXJhdG9yW2tTdHJlYW1dLnJlYWQoKTtcbiAgICAgIGlmIChkYXRhKSB7XG4gICAgICAgIGl0ZXJhdG9yW2tMYXN0UHJvbWlzZV0gPSBudWxsO1xuICAgICAgICBpdGVyYXRvcltrTGFzdFJlc29sdmVdID0gbnVsbDtcbiAgICAgICAgaXRlcmF0b3Jba0xhc3RSZWplY3RdID0gbnVsbDtcbiAgICAgICAgcmVzb2x2ZShjcmVhdGVJdGVyUmVzdWx0KGRhdGEsIGZhbHNlKSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpdGVyYXRvcltrTGFzdFJlc29sdmVdID0gcmVzb2x2ZTtcbiAgICAgICAgaXRlcmF0b3Jba0xhc3RSZWplY3RdID0gcmVqZWN0O1xuICAgICAgfVxuICAgIH0sXG4gICAgd3JpdGFibGU6IHRydWVcbiAgfSksIF9PYmplY3QkY3JlYXRlKSk7XG4gIGl0ZXJhdG9yW2tMYXN0UHJvbWlzZV0gPSBudWxsO1xuICBmaW5pc2hlZChzdHJlYW0sIGZ1bmN0aW9uIChlcnIpIHtcbiAgICBpZiAoZXJyICYmIGVyci5jb2RlICE9PSAnRVJSX1NUUkVBTV9QUkVNQVRVUkVfQ0xPU0UnKSB7XG4gICAgICB2YXIgcmVqZWN0ID0gaXRlcmF0b3Jba0xhc3RSZWplY3RdO1xuICAgICAgLy8gcmVqZWN0IGlmIHdlIGFyZSB3YWl0aW5nIGZvciBkYXRhIGluIHRoZSBQcm9taXNlXG4gICAgICAvLyByZXR1cm5lZCBieSBuZXh0KCkgYW5kIHN0b3JlIHRoZSBlcnJvclxuICAgICAgaWYgKHJlamVjdCAhPT0gbnVsbCkge1xuICAgICAgICBpdGVyYXRvcltrTGFzdFByb21pc2VdID0gbnVsbDtcbiAgICAgICAgaXRlcmF0b3Jba0xhc3RSZXNvbHZlXSA9IG51bGw7XG4gICAgICAgIGl0ZXJhdG9yW2tMYXN0UmVqZWN0XSA9IG51bGw7XG4gICAgICAgIHJlamVjdChlcnIpO1xuICAgICAgfVxuICAgICAgaXRlcmF0b3Jba0Vycm9yXSA9IGVycjtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdmFyIHJlc29sdmUgPSBpdGVyYXRvcltrTGFzdFJlc29sdmVdO1xuICAgIGlmIChyZXNvbHZlICE9PSBudWxsKSB7XG4gICAgICBpdGVyYXRvcltrTGFzdFByb21pc2VdID0gbnVsbDtcbiAgICAgIGl0ZXJhdG9yW2tMYXN0UmVzb2x2ZV0gPSBudWxsO1xuICAgICAgaXRlcmF0b3Jba0xhc3RSZWplY3RdID0gbnVsbDtcbiAgICAgIHJlc29sdmUoY3JlYXRlSXRlclJlc3VsdCh1bmRlZmluZWQsIHRydWUpKTtcbiAgICB9XG4gICAgaXRlcmF0b3Jba0VuZGVkXSA9IHRydWU7XG4gIH0pO1xuICBzdHJlYW0ub24oJ3JlYWRhYmxlJywgb25SZWFkYWJsZS5iaW5kKG51bGwsIGl0ZXJhdG9yKSk7XG4gIHJldHVybiBpdGVyYXRvcjtcbn07XG5tb2R1bGUuZXhwb3J0cyA9IGNyZWF0ZVJlYWRhYmxlU3RyZWFtQXN5bmNJdGVyYXRvcjsiXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///2955\n")},3035:function(__unused_webpack_module,__unused_webpack_exports,__webpack_require__){eval("//! moment.js locale configuration\n//! locale : Estonian [et]\n//! author : Henry Kehlmann : https://github.com/madhenry\n//! improvements : Illimar Tambek : https://github.com/ragulka\n\n;(function (global, factory) {\n true ? factory(__webpack_require__(95093)) :\n 0\n}(this, (function (moment) { 'use strict';\n\n //! moment.js locale configuration\n\n function processRelativeTime(number, withoutSuffix, key, isFuture) {\n var format = {\n s: ['mõne sekundi', 'mõni sekund', 'paar sekundit'],\n ss: [number + 'sekundi', number + 'sekundit'],\n m: ['ühe minuti', 'üks minut'],\n mm: [number + ' minuti', number + ' minutit'],\n h: ['ühe tunni', 'tund aega', 'üks tund'],\n hh: [number + ' tunni', number + ' tundi'],\n d: ['ühe päeva', 'üks päev'],\n M: ['kuu aja', 'kuu aega', 'üks kuu'],\n MM: [number + ' kuu', number + ' kuud'],\n y: ['ühe aasta', 'aasta', 'üks aasta'],\n yy: [number + ' aasta', number + ' aastat'],\n };\n if (withoutSuffix) {\n return format[key][2] ? format[key][2] : format[key][1];\n }\n return isFuture ? format[key][0] : format[key][1];\n }\n\n var et = moment.defineLocale('et', {\n months: 'jaanuar_veebruar_märts_aprill_mai_juuni_juuli_august_september_oktoober_november_detsember'.split(\n '_'\n ),\n monthsShort:\n 'jaan_veebr_märts_apr_mai_juuni_juuli_aug_sept_okt_nov_dets'.split('_'),\n weekdays:\n 'pühapäev_esmaspäev_teisipäev_kolmapäev_neljapäev_reede_laupäev'.split(\n '_'\n ),\n weekdaysShort: 'P_E_T_K_N_R_L'.split('_'),\n weekdaysMin: 'P_E_T_K_N_R_L'.split('_'),\n longDateFormat: {\n LT: 'H:mm',\n LTS: 'H:mm:ss',\n L: 'DD.MM.YYYY',\n LL: 'D. MMMM YYYY',\n LLL: 'D. MMMM YYYY H:mm',\n LLLL: 'dddd, D. MMMM YYYY H:mm',\n },\n calendar: {\n sameDay: '[Täna,] LT',\n nextDay: '[Homme,] LT',\n nextWeek: '[Järgmine] dddd LT',\n lastDay: '[Eile,] LT',\n lastWeek: '[Eelmine] dddd LT',\n sameElse: 'L',\n },\n relativeTime: {\n future: '%s pärast',\n past: '%s tagasi',\n s: processRelativeTime,\n ss: processRelativeTime,\n m: processRelativeTime,\n mm: processRelativeTime,\n h: processRelativeTime,\n hh: processRelativeTime,\n d: processRelativeTime,\n dd: '%d päeva',\n M: processRelativeTime,\n MM: processRelativeTime,\n y: processRelativeTime,\n yy: processRelativeTime,\n },\n dayOfMonthOrdinalParse: /\\d{1,2}\\./,\n ordinal: '%d.',\n week: {\n dow: 1, // Monday is the first day of the week.\n doy: 4, // The week that contains Jan 4th is the first week of the year.\n },\n });\n\n return et;\n\n})));\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMzAzNS5qcyIsIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9pdGctbmV4dGdlbi1mcm9udGVuZC8uL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL2V0LmpzP2VjMTgiXSwic291cmNlc0NvbnRlbnQiOlsiLy8hIG1vbWVudC5qcyBsb2NhbGUgY29uZmlndXJhdGlvblxuLy8hIGxvY2FsZSA6IEVzdG9uaWFuIFtldF1cbi8vISBhdXRob3IgOiBIZW5yeSBLZWhsbWFubiA6IGh0dHBzOi8vZ2l0aHViLmNvbS9tYWRoZW5yeVxuLy8hIGltcHJvdmVtZW50cyA6IElsbGltYXIgVGFtYmVrIDogaHR0cHM6Ly9naXRodWIuY29tL3JhZ3Vsa2FcblxuOyhmdW5jdGlvbiAoZ2xvYmFsLCBmYWN0b3J5KSB7XG4gICB0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcgJiYgdHlwZW9mIG1vZHVsZSAhPT0gJ3VuZGVmaW5lZCdcbiAgICAgICAmJiB0eXBlb2YgcmVxdWlyZSA9PT0gJ2Z1bmN0aW9uJyA/IGZhY3RvcnkocmVxdWlyZSgnLi4vbW9tZW50JykpIDpcbiAgIHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgZGVmaW5lLmFtZCA/IGRlZmluZShbJy4uL21vbWVudCddLCBmYWN0b3J5KSA6XG4gICBmYWN0b3J5KGdsb2JhbC5tb21lbnQpXG59KHRoaXMsIChmdW5jdGlvbiAobW9tZW50KSB7ICd1c2Ugc3RyaWN0JztcblxuICAgIC8vISBtb21lbnQuanMgbG9jYWxlIGNvbmZpZ3VyYXRpb25cblxuICAgIGZ1bmN0aW9uIHByb2Nlc3NSZWxhdGl2ZVRpbWUobnVtYmVyLCB3aXRob3V0U3VmZml4LCBrZXksIGlzRnV0dXJlKSB7XG4gICAgICAgIHZhciBmb3JtYXQgPSB7XG4gICAgICAgICAgICBzOiBbJ23DtW5lIHNla3VuZGknLCAnbcO1bmkgc2VrdW5kJywgJ3BhYXIgc2VrdW5kaXQnXSxcbiAgICAgICAgICAgIHNzOiBbbnVtYmVyICsgJ3Nla3VuZGknLCBudW1iZXIgKyAnc2VrdW5kaXQnXSxcbiAgICAgICAgICAgIG06IFsnw7xoZSBtaW51dGknLCAnw7xrcyBtaW51dCddLFxuICAgICAgICAgICAgbW06IFtudW1iZXIgKyAnIG1pbnV0aScsIG51bWJlciArICcgbWludXRpdCddLFxuICAgICAgICAgICAgaDogWyfDvGhlIHR1bm5pJywgJ3R1bmQgYWVnYScsICfDvGtzIHR1bmQnXSxcbiAgICAgICAgICAgIGhoOiBbbnVtYmVyICsgJyB0dW5uaScsIG51bWJlciArICcgdHVuZGknXSxcbiAgICAgICAgICAgIGQ6IFsnw7xoZSBww6RldmEnLCAnw7xrcyBww6RldiddLFxuICAgICAgICAgICAgTTogWydrdXUgYWphJywgJ2t1dSBhZWdhJywgJ8O8a3Mga3V1J10sXG4gICAgICAgICAgICBNTTogW251bWJlciArICcga3V1JywgbnVtYmVyICsgJyBrdXVkJ10sXG4gICAgICAgICAgICB5OiBbJ8O8aGUgYWFzdGEnLCAnYWFzdGEnLCAnw7xrcyBhYXN0YSddLFxuICAgICAgICAgICAgeXk6IFtudW1iZXIgKyAnIGFhc3RhJywgbnVtYmVyICsgJyBhYXN0YXQnXSxcbiAgICAgICAgfTtcbiAgICAgICAgaWYgKHdpdGhvdXRTdWZmaXgpIHtcbiAgICAgICAgICAgIHJldHVybiBmb3JtYXRba2V5XVsyXSA/IGZvcm1hdFtrZXldWzJdIDogZm9ybWF0W2tleV1bMV07XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGlzRnV0dXJlID8gZm9ybWF0W2tleV1bMF0gOiBmb3JtYXRba2V5XVsxXTtcbiAgICB9XG5cbiAgICB2YXIgZXQgPSBtb21lbnQuZGVmaW5lTG9jYWxlKCdldCcsIHtcbiAgICAgICAgbW9udGhzOiAnamFhbnVhcl92ZWVicnVhcl9tw6RydHNfYXByaWxsX21haV9qdXVuaV9qdXVsaV9hdWd1c3Rfc2VwdGVtYmVyX29rdG9vYmVyX25vdmVtYmVyX2RldHNlbWJlcicuc3BsaXQoXG4gICAgICAgICAgICAnXydcbiAgICAgICAgKSxcbiAgICAgICAgbW9udGhzU2hvcnQ6XG4gICAgICAgICAgICAnamFhbl92ZWVicl9tw6RydHNfYXByX21haV9qdXVuaV9qdXVsaV9hdWdfc2VwdF9va3Rfbm92X2RldHMnLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzOlxuICAgICAgICAgICAgJ3DDvGhhcMOkZXZfZXNtYXNww6Rldl90ZWlzaXDDpGV2X2tvbG1hcMOkZXZfbmVsamFww6Rldl9yZWVkZV9sYXVww6Rldicuc3BsaXQoXG4gICAgICAgICAgICAgICAgJ18nXG4gICAgICAgICAgICApLFxuICAgICAgICB3ZWVrZGF5c1Nob3J0OiAnUF9FX1RfS19OX1JfTCcuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXNNaW46ICdQX0VfVF9LX05fUl9MJy5zcGxpdCgnXycpLFxuICAgICAgICBsb25nRGF0ZUZvcm1hdDoge1xuICAgICAgICAgICAgTFQ6ICdIOm1tJyxcbiAgICAgICAgICAgIExUUzogJ0g6bW06c3MnLFxuICAgICAgICAgICAgTDogJ0RELk1NLllZWVknLFxuICAgICAgICAgICAgTEw6ICdELiBNTU1NIFlZWVknLFxuICAgICAgICAgICAgTExMOiAnRC4gTU1NTSBZWVlZIEg6bW0nLFxuICAgICAgICAgICAgTExMTDogJ2RkZGQsIEQuIE1NTU0gWVlZWSBIOm1tJyxcbiAgICAgICAgfSxcbiAgICAgICAgY2FsZW5kYXI6IHtcbiAgICAgICAgICAgIHNhbWVEYXk6ICdbVMOkbmEsXSBMVCcsXG4gICAgICAgICAgICBuZXh0RGF5OiAnW0hvbW1lLF0gTFQnLFxuICAgICAgICAgICAgbmV4dFdlZWs6ICdbSsOkcmdtaW5lXSBkZGRkIExUJyxcbiAgICAgICAgICAgIGxhc3REYXk6ICdbRWlsZSxdIExUJyxcbiAgICAgICAgICAgIGxhc3RXZWVrOiAnW0VlbG1pbmVdIGRkZGQgTFQnLFxuICAgICAgICAgICAgc2FtZUVsc2U6ICdMJyxcbiAgICAgICAgfSxcbiAgICAgICAgcmVsYXRpdmVUaW1lOiB7XG4gICAgICAgICAgICBmdXR1cmU6ICclcyBww6RyYXN0JyxcbiAgICAgICAgICAgIHBhc3Q6ICclcyB0YWdhc2knLFxuICAgICAgICAgICAgczogcHJvY2Vzc1JlbGF0aXZlVGltZSxcbiAgICAgICAgICAgIHNzOiBwcm9jZXNzUmVsYXRpdmVUaW1lLFxuICAgICAgICAgICAgbTogcHJvY2Vzc1JlbGF0aXZlVGltZSxcbiAgICAgICAgICAgIG1tOiBwcm9jZXNzUmVsYXRpdmVUaW1lLFxuICAgICAgICAgICAgaDogcHJvY2Vzc1JlbGF0aXZlVGltZSxcbiAgICAgICAgICAgIGhoOiBwcm9jZXNzUmVsYXRpdmVUaW1lLFxuICAgICAgICAgICAgZDogcHJvY2Vzc1JlbGF0aXZlVGltZSxcbiAgICAgICAgICAgIGRkOiAnJWQgcMOkZXZhJyxcbiAgICAgICAgICAgIE06IHByb2Nlc3NSZWxhdGl2ZVRpbWUsXG4gICAgICAgICAgICBNTTogcHJvY2Vzc1JlbGF0aXZlVGltZSxcbiAgICAgICAgICAgIHk6IHByb2Nlc3NSZWxhdGl2ZVRpbWUsXG4gICAgICAgICAgICB5eTogcHJvY2Vzc1JlbGF0aXZlVGltZSxcbiAgICAgICAgfSxcbiAgICAgICAgZGF5T2ZNb250aE9yZGluYWxQYXJzZTogL1xcZHsxLDJ9XFwuLyxcbiAgICAgICAgb3JkaW5hbDogJyVkLicsXG4gICAgICAgIHdlZWs6IHtcbiAgICAgICAgICAgIGRvdzogMSwgLy8gTW9uZGF5IGlzIHRoZSBmaXJzdCBkYXkgb2YgdGhlIHdlZWsuXG4gICAgICAgICAgICBkb3k6IDQsIC8vIFRoZSB3ZWVrIHRoYXQgY29udGFpbnMgSmFuIDR0aCBpcyB0aGUgZmlyc3Qgd2VlayBvZiB0aGUgeWVhci5cbiAgICAgICAgfSxcbiAgICB9KTtcblxuICAgIHJldHVybiBldDtcblxufSkpKTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///3035\n")},3072:(__unused_webpack_module,exports)=>{"use strict";eval('/** @license React v16.13.1\n * react-is.production.min.js\n *\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\nvar b="function"===typeof Symbol&&Symbol.for,c=b?Symbol.for("react.element"):60103,d=b?Symbol.for("react.portal"):60106,e=b?Symbol.for("react.fragment"):60107,f=b?Symbol.for("react.strict_mode"):60108,g=b?Symbol.for("react.profiler"):60114,h=b?Symbol.for("react.provider"):60109,k=b?Symbol.for("react.context"):60110,l=b?Symbol.for("react.async_mode"):60111,m=b?Symbol.for("react.concurrent_mode"):60111,n=b?Symbol.for("react.forward_ref"):60112,p=b?Symbol.for("react.suspense"):60113,q=b?\nSymbol.for("react.suspense_list"):60120,r=b?Symbol.for("react.memo"):60115,t=b?Symbol.for("react.lazy"):60116,v=b?Symbol.for("react.block"):60121,w=b?Symbol.for("react.fundamental"):60117,x=b?Symbol.for("react.responder"):60118,y=b?Symbol.for("react.scope"):60119;\nfunction z(a){if("object"===typeof a&&null!==a){var u=a.$$typeof;switch(u){case c:switch(a=a.type,a){case l:case m:case e:case g:case f:case p:return a;default:switch(a=a&&a.$$typeof,a){case k:case n:case t:case r:case h:return a;default:return u}}case d:return u}}}function A(a){return z(a)===m}exports.AsyncMode=l;exports.ConcurrentMode=m;exports.ContextConsumer=k;exports.ContextProvider=h;exports.Element=c;exports.ForwardRef=n;exports.Fragment=e;exports.Lazy=t;exports.Memo=r;exports.Portal=d;\nexports.Profiler=g;exports.StrictMode=f;exports.Suspense=p;exports.isAsyncMode=function(a){return A(a)||z(a)===l};exports.isConcurrentMode=A;exports.isContextConsumer=function(a){return z(a)===k};exports.isContextProvider=function(a){return z(a)===h};exports.isElement=function(a){return"object"===typeof a&&null!==a&&a.$$typeof===c};exports.isForwardRef=function(a){return z(a)===n};exports.isFragment=function(a){return z(a)===e};exports.isLazy=function(a){return z(a)===t};\nexports.isMemo=function(a){return z(a)===r};exports.isPortal=function(a){return z(a)===d};exports.isProfiler=function(a){return z(a)===g};exports.isStrictMode=function(a){return z(a)===f};exports.isSuspense=function(a){return z(a)===p};\nexports.isValidElementType=function(a){return"string"===typeof a||"function"===typeof a||a===e||a===m||a===g||a===f||a===p||a===q||"object"===typeof a&&null!==a&&(a.$$typeof===t||a.$$typeof===r||a.$$typeof===h||a.$$typeof===k||a.$$typeof===n||a.$$typeof===w||a.$$typeof===x||a.$$typeof===y||a.$$typeof===v)};exports.typeOf=z;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMzA3Mi5qcyIsIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9pdGctbmV4dGdlbi1mcm9udGVuZC8uL25vZGVfbW9kdWxlcy9ob2lzdC1ub24tcmVhY3Qtc3RhdGljcy9ub2RlX21vZHVsZXMvcmVhY3QtaXMvY2pzL3JlYWN0LWlzLnByb2R1Y3Rpb24ubWluLmpzPzBhOGEiXSwic291cmNlc0NvbnRlbnQiOlsiLyoqIEBsaWNlbnNlIFJlYWN0IHYxNi4xMy4xXG4gKiByZWFjdC1pcy5wcm9kdWN0aW9uLm1pbi5qc1xuICpcbiAqIENvcHlyaWdodCAoYykgRmFjZWJvb2ssIEluYy4gYW5kIGl0cyBhZmZpbGlhdGVzLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLlxuICovXG5cbid1c2Ugc3RyaWN0Jzt2YXIgYj1cImZ1bmN0aW9uXCI9PT10eXBlb2YgU3ltYm9sJiZTeW1ib2wuZm9yLGM9Yj9TeW1ib2wuZm9yKFwicmVhY3QuZWxlbWVudFwiKTo2MDEwMyxkPWI/U3ltYm9sLmZvcihcInJlYWN0LnBvcnRhbFwiKTo2MDEwNixlPWI/U3ltYm9sLmZvcihcInJlYWN0LmZyYWdtZW50XCIpOjYwMTA3LGY9Yj9TeW1ib2wuZm9yKFwicmVhY3Quc3RyaWN0X21vZGVcIik6NjAxMDgsZz1iP1N5bWJvbC5mb3IoXCJyZWFjdC5wcm9maWxlclwiKTo2MDExNCxoPWI/U3ltYm9sLmZvcihcInJlYWN0LnByb3ZpZGVyXCIpOjYwMTA5LGs9Yj9TeW1ib2wuZm9yKFwicmVhY3QuY29udGV4dFwiKTo2MDExMCxsPWI/U3ltYm9sLmZvcihcInJlYWN0LmFzeW5jX21vZGVcIik6NjAxMTEsbT1iP1N5bWJvbC5mb3IoXCJyZWFjdC5jb25jdXJyZW50X21vZGVcIik6NjAxMTEsbj1iP1N5bWJvbC5mb3IoXCJyZWFjdC5mb3J3YXJkX3JlZlwiKTo2MDExMixwPWI/U3ltYm9sLmZvcihcInJlYWN0LnN1c3BlbnNlXCIpOjYwMTEzLHE9Yj9cblN5bWJvbC5mb3IoXCJyZWFjdC5zdXNwZW5zZV9saXN0XCIpOjYwMTIwLHI9Yj9TeW1ib2wuZm9yKFwicmVhY3QubWVtb1wiKTo2MDExNSx0PWI/U3ltYm9sLmZvcihcInJlYWN0LmxhenlcIik6NjAxMTYsdj1iP1N5bWJvbC5mb3IoXCJyZWFjdC5ibG9ja1wiKTo2MDEyMSx3PWI/U3ltYm9sLmZvcihcInJlYWN0LmZ1bmRhbWVudGFsXCIpOjYwMTE3LHg9Yj9TeW1ib2wuZm9yKFwicmVhY3QucmVzcG9uZGVyXCIpOjYwMTE4LHk9Yj9TeW1ib2wuZm9yKFwicmVhY3Quc2NvcGVcIik6NjAxMTk7XG5mdW5jdGlvbiB6KGEpe2lmKFwib2JqZWN0XCI9PT10eXBlb2YgYSYmbnVsbCE9PWEpe3ZhciB1PWEuJCR0eXBlb2Y7c3dpdGNoKHUpe2Nhc2UgYzpzd2l0Y2goYT1hLnR5cGUsYSl7Y2FzZSBsOmNhc2UgbTpjYXNlIGU6Y2FzZSBnOmNhc2UgZjpjYXNlIHA6cmV0dXJuIGE7ZGVmYXVsdDpzd2l0Y2goYT1hJiZhLiQkdHlwZW9mLGEpe2Nhc2UgazpjYXNlIG46Y2FzZSB0OmNhc2UgcjpjYXNlIGg6cmV0dXJuIGE7ZGVmYXVsdDpyZXR1cm4gdX19Y2FzZSBkOnJldHVybiB1fX19ZnVuY3Rpb24gQShhKXtyZXR1cm4geihhKT09PW19ZXhwb3J0cy5Bc3luY01vZGU9bDtleHBvcnRzLkNvbmN1cnJlbnRNb2RlPW07ZXhwb3J0cy5Db250ZXh0Q29uc3VtZXI9aztleHBvcnRzLkNvbnRleHRQcm92aWRlcj1oO2V4cG9ydHMuRWxlbWVudD1jO2V4cG9ydHMuRm9yd2FyZFJlZj1uO2V4cG9ydHMuRnJhZ21lbnQ9ZTtleHBvcnRzLkxhenk9dDtleHBvcnRzLk1lbW89cjtleHBvcnRzLlBvcnRhbD1kO1xuZXhwb3J0cy5Qcm9maWxlcj1nO2V4cG9ydHMuU3RyaWN0TW9kZT1mO2V4cG9ydHMuU3VzcGVuc2U9cDtleHBvcnRzLmlzQXN5bmNNb2RlPWZ1bmN0aW9uKGEpe3JldHVybiBBKGEpfHx6KGEpPT09bH07ZXhwb3J0cy5pc0NvbmN1cnJlbnRNb2RlPUE7ZXhwb3J0cy5pc0NvbnRleHRDb25zdW1lcj1mdW5jdGlvbihhKXtyZXR1cm4geihhKT09PWt9O2V4cG9ydHMuaXNDb250ZXh0UHJvdmlkZXI9ZnVuY3Rpb24oYSl7cmV0dXJuIHooYSk9PT1ofTtleHBvcnRzLmlzRWxlbWVudD1mdW5jdGlvbihhKXtyZXR1cm5cIm9iamVjdFwiPT09dHlwZW9mIGEmJm51bGwhPT1hJiZhLiQkdHlwZW9mPT09Y307ZXhwb3J0cy5pc0ZvcndhcmRSZWY9ZnVuY3Rpb24oYSl7cmV0dXJuIHooYSk9PT1ufTtleHBvcnRzLmlzRnJhZ21lbnQ9ZnVuY3Rpb24oYSl7cmV0dXJuIHooYSk9PT1lfTtleHBvcnRzLmlzTGF6eT1mdW5jdGlvbihhKXtyZXR1cm4geihhKT09PXR9O1xuZXhwb3J0cy5pc01lbW89ZnVuY3Rpb24oYSl7cmV0dXJuIHooYSk9PT1yfTtleHBvcnRzLmlzUG9ydGFsPWZ1bmN0aW9uKGEpe3JldHVybiB6KGEpPT09ZH07ZXhwb3J0cy5pc1Byb2ZpbGVyPWZ1bmN0aW9uKGEpe3JldHVybiB6KGEpPT09Z307ZXhwb3J0cy5pc1N0cmljdE1vZGU9ZnVuY3Rpb24oYSl7cmV0dXJuIHooYSk9PT1mfTtleHBvcnRzLmlzU3VzcGVuc2U9ZnVuY3Rpb24oYSl7cmV0dXJuIHooYSk9PT1wfTtcbmV4cG9ydHMuaXNWYWxpZEVsZW1lbnRUeXBlPWZ1bmN0aW9uKGEpe3JldHVyblwic3RyaW5nXCI9PT10eXBlb2YgYXx8XCJmdW5jdGlvblwiPT09dHlwZW9mIGF8fGE9PT1lfHxhPT09bXx8YT09PWd8fGE9PT1mfHxhPT09cHx8YT09PXF8fFwib2JqZWN0XCI9PT10eXBlb2YgYSYmbnVsbCE9PWEmJihhLiQkdHlwZW9mPT09dHx8YS4kJHR5cGVvZj09PXJ8fGEuJCR0eXBlb2Y9PT1ofHxhLiQkdHlwZW9mPT09a3x8YS4kJHR5cGVvZj09PW58fGEuJCR0eXBlb2Y9PT13fHxhLiQkdHlwZW9mPT09eHx8YS4kJHR5cGVvZj09PXl8fGEuJCR0eXBlb2Y9PT12KX07ZXhwb3J0cy50eXBlT2Y9ejtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///3072\n')},3191:(module,__unused_webpack_exports,__webpack_require__)=>{"use strict";eval("\n\nvar Cancel = __webpack_require__(31928);\n\n/**\n * A `CancelToken` is an object that can be used to request cancellation of an operation.\n *\n * @class\n * @param {Function} executor The executor function.\n */\nfunction CancelToken(executor) {\n if (typeof executor !== 'function') {\n throw new TypeError('executor must be a function.');\n }\n\n var resolvePromise;\n\n this.promise = new Promise(function promiseExecutor(resolve) {\n resolvePromise = resolve;\n });\n\n var token = this;\n\n // eslint-disable-next-line func-names\n this.promise.then(function(cancel) {\n if (!token._listeners) return;\n\n var i;\n var l = token._listeners.length;\n\n for (i = 0; i < l; i++) {\n token._listeners[i](cancel);\n }\n token._listeners = null;\n });\n\n // eslint-disable-next-line func-names\n this.promise.then = function(onfulfilled) {\n var _resolve;\n // eslint-disable-next-line func-names\n var promise = new Promise(function(resolve) {\n token.subscribe(resolve);\n _resolve = resolve;\n }).then(onfulfilled);\n\n promise.cancel = function reject() {\n token.unsubscribe(_resolve);\n };\n\n return promise;\n };\n\n executor(function cancel(message) {\n if (token.reason) {\n // Cancellation has already been requested\n return;\n }\n\n token.reason = new Cancel(message);\n resolvePromise(token.reason);\n });\n}\n\n/**\n * Throws a `Cancel` if cancellation has been requested.\n */\nCancelToken.prototype.throwIfRequested = function throwIfRequested() {\n if (this.reason) {\n throw this.reason;\n }\n};\n\n/**\n * Subscribe to the cancel signal\n */\n\nCancelToken.prototype.subscribe = function subscribe(listener) {\n if (this.reason) {\n listener(this.reason);\n return;\n }\n\n if (this._listeners) {\n this._listeners.push(listener);\n } else {\n this._listeners = [listener];\n }\n};\n\n/**\n * Unsubscribe from the cancel signal\n */\n\nCancelToken.prototype.unsubscribe = function unsubscribe(listener) {\n if (!this._listeners) {\n return;\n }\n var index = this._listeners.indexOf(listener);\n if (index !== -1) {\n this._listeners.splice(index, 1);\n }\n};\n\n/**\n * Returns an object that contains a new `CancelToken` and a function that, when called,\n * cancels the `CancelToken`.\n */\nCancelToken.source = function source() {\n var cancel;\n var token = new CancelToken(function executor(c) {\n cancel = c;\n });\n return {\n token: token,\n cancel: cancel\n };\n};\n\nmodule.exports = CancelToken;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMzE5MS5qcyIsIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vaXRnLW5leHRnZW4tZnJvbnRlbmQvLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2NhbmNlbC9DYW5jZWxUb2tlbi5qcz84ZGY0Il0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIENhbmNlbCA9IHJlcXVpcmUoJy4vQ2FuY2VsJyk7XG5cbi8qKlxuICogQSBgQ2FuY2VsVG9rZW5gIGlzIGFuIG9iamVjdCB0aGF0IGNhbiBiZSB1c2VkIHRvIHJlcXVlc3QgY2FuY2VsbGF0aW9uIG9mIGFuIG9wZXJhdGlvbi5cbiAqXG4gKiBAY2xhc3NcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGV4ZWN1dG9yIFRoZSBleGVjdXRvciBmdW5jdGlvbi5cbiAqL1xuZnVuY3Rpb24gQ2FuY2VsVG9rZW4oZXhlY3V0b3IpIHtcbiAgaWYgKHR5cGVvZiBleGVjdXRvciAhPT0gJ2Z1bmN0aW9uJykge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ2V4ZWN1dG9yIG11c3QgYmUgYSBmdW5jdGlvbi4nKTtcbiAgfVxuXG4gIHZhciByZXNvbHZlUHJvbWlzZTtcblxuICB0aGlzLnByb21pc2UgPSBuZXcgUHJvbWlzZShmdW5jdGlvbiBwcm9taXNlRXhlY3V0b3IocmVzb2x2ZSkge1xuICAgIHJlc29sdmVQcm9taXNlID0gcmVzb2x2ZTtcbiAgfSk7XG5cbiAgdmFyIHRva2VuID0gdGhpcztcblxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZnVuYy1uYW1lc1xuICB0aGlzLnByb21pc2UudGhlbihmdW5jdGlvbihjYW5jZWwpIHtcbiAgICBpZiAoIXRva2VuLl9saXN0ZW5lcnMpIHJldHVybjtcblxuICAgIHZhciBpO1xuICAgIHZhciBsID0gdG9rZW4uX2xpc3RlbmVycy5sZW5ndGg7XG5cbiAgICBmb3IgKGkgPSAwOyBpIDwgbDsgaSsrKSB7XG4gICAgICB0b2tlbi5fbGlzdGVuZXJzW2ldKGNhbmNlbCk7XG4gICAgfVxuICAgIHRva2VuLl9saXN0ZW5lcnMgPSBudWxsO1xuICB9KTtcblxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZnVuYy1uYW1lc1xuICB0aGlzLnByb21pc2UudGhlbiA9IGZ1bmN0aW9uKG9uZnVsZmlsbGVkKSB7XG4gICAgdmFyIF9yZXNvbHZlO1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBmdW5jLW5hbWVzXG4gICAgdmFyIHByb21pc2UgPSBuZXcgUHJvbWlzZShmdW5jdGlvbihyZXNvbHZlKSB7XG4gICAgICB0b2tlbi5zdWJzY3JpYmUocmVzb2x2ZSk7XG4gICAgICBfcmVzb2x2ZSA9IHJlc29sdmU7XG4gICAgfSkudGhlbihvbmZ1bGZpbGxlZCk7XG5cbiAgICBwcm9taXNlLmNhbmNlbCA9IGZ1bmN0aW9uIHJlamVjdCgpIHtcbiAgICAgIHRva2VuLnVuc3Vic2NyaWJlKF9yZXNvbHZlKTtcbiAgICB9O1xuXG4gICAgcmV0dXJuIHByb21pc2U7XG4gIH07XG5cbiAgZXhlY3V0b3IoZnVuY3Rpb24gY2FuY2VsKG1lc3NhZ2UpIHtcbiAgICBpZiAodG9rZW4ucmVhc29uKSB7XG4gICAgICAvLyBDYW5jZWxsYXRpb24gaGFzIGFscmVhZHkgYmVlbiByZXF1ZXN0ZWRcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0b2tlbi5yZWFzb24gPSBuZXcgQ2FuY2VsKG1lc3NhZ2UpO1xuICAgIHJlc29sdmVQcm9taXNlKHRva2VuLnJlYXNvbik7XG4gIH0pO1xufVxuXG4vKipcbiAqIFRocm93cyBhIGBDYW5jZWxgIGlmIGNhbmNlbGxhdGlvbiBoYXMgYmVlbiByZXF1ZXN0ZWQuXG4gKi9cbkNhbmNlbFRva2VuLnByb3RvdHlwZS50aHJvd0lmUmVxdWVzdGVkID0gZnVuY3Rpb24gdGhyb3dJZlJlcXVlc3RlZCgpIHtcbiAgaWYgKHRoaXMucmVhc29uKSB7XG4gICAgdGhyb3cgdGhpcy5yZWFzb247XG4gIH1cbn07XG5cbi8qKlxuICogU3Vic2NyaWJlIHRvIHRoZSBjYW5jZWwgc2lnbmFsXG4gKi9cblxuQ2FuY2VsVG9rZW4ucHJvdG90eXBlLnN1YnNjcmliZSA9IGZ1bmN0aW9uIHN1YnNjcmliZShsaXN0ZW5lcikge1xuICBpZiAodGhpcy5yZWFzb24pIHtcbiAgICBsaXN0ZW5lcih0aGlzLnJlYXNvbik7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgaWYgKHRoaXMuX2xpc3RlbmVycykge1xuICAgIHRoaXMuX2xpc3RlbmVycy5wdXNoKGxpc3RlbmVyKTtcbiAgfSBlbHNlIHtcbiAgICB0aGlzLl9saXN0ZW5lcnMgPSBbbGlzdGVuZXJdO1xuICB9XG59O1xuXG4vKipcbiAqIFVuc3Vic2NyaWJlIGZyb20gdGhlIGNhbmNlbCBzaWduYWxcbiAqL1xuXG5DYW5jZWxUb2tlbi5wcm90b3R5cGUudW5zdWJzY3JpYmUgPSBmdW5jdGlvbiB1bnN1YnNjcmliZShsaXN0ZW5lcikge1xuICBpZiAoIXRoaXMuX2xpc3RlbmVycykge1xuICAgIHJldHVybjtcbiAgfVxuICB2YXIgaW5kZXggPSB0aGlzLl9saXN0ZW5lcnMuaW5kZXhPZihsaXN0ZW5lcik7XG4gIGlmIChpbmRleCAhPT0gLTEpIHtcbiAgICB0aGlzLl9saXN0ZW5lcnMuc3BsaWNlKGluZGV4LCAxKTtcbiAgfVxufTtcblxuLyoqXG4gKiBSZXR1cm5zIGFuIG9iamVjdCB0aGF0IGNvbnRhaW5zIGEgbmV3IGBDYW5jZWxUb2tlbmAgYW5kIGEgZnVuY3Rpb24gdGhhdCwgd2hlbiBjYWxsZWQsXG4gKiBjYW5jZWxzIHRoZSBgQ2FuY2VsVG9rZW5gLlxuICovXG5DYW5jZWxUb2tlbi5zb3VyY2UgPSBmdW5jdGlvbiBzb3VyY2UoKSB7XG4gIHZhciBjYW5jZWw7XG4gIHZhciB0b2tlbiA9IG5ldyBDYW5jZWxUb2tlbihmdW5jdGlvbiBleGVjdXRvcihjKSB7XG4gICAgY2FuY2VsID0gYztcbiAgfSk7XG4gIHJldHVybiB7XG4gICAgdG9rZW46IHRva2VuLFxuICAgIGNhbmNlbDogY2FuY2VsXG4gIH07XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IENhbmNlbFRva2VuO1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///3191\n")},3322:function(__unused_webpack_module,__unused_webpack_exports,__webpack_require__){eval("//! moment.js locale configuration\n//! locale : Serbian Cyrillic [sr-cyrl]\n//! author : Milan Janačković : https://github.com/milan-j\n//! author : Stefan Crnjaković : https://github.com/crnjakovic\n\n;(function (global, factory) {\n true ? factory(__webpack_require__(95093)) :\n 0\n}(this, (function (moment) { 'use strict';\n\n //! moment.js locale configuration\n\n var translator = {\n words: {\n //Different grammatical cases\n ss: ['секунда', 'секунде', 'секунди'],\n m: ['један минут', 'једног минута'],\n mm: ['минут', 'минута', 'минута'],\n h: ['један сат', 'једног сата'],\n hh: ['сат', 'сата', 'сати'],\n d: ['један дан', 'једног дана'],\n dd: ['дан', 'дана', 'дана'],\n M: ['један месец', 'једног месеца'],\n MM: ['месец', 'месеца', 'месеци'],\n y: ['једну годину', 'једне године'],\n yy: ['годину', 'године', 'година'],\n },\n correctGrammaticalCase: function (number, wordKey) {\n if (\n number % 10 >= 1 &&\n number % 10 <= 4 &&\n (number % 100 < 10 || number % 100 >= 20)\n ) {\n return number % 10 === 1 ? wordKey[0] : wordKey[1];\n }\n return wordKey[2];\n },\n translate: function (number, withoutSuffix, key, isFuture) {\n var wordKey = translator.words[key],\n word;\n\n if (key.length === 1) {\n // Nominativ\n if (key === 'y' && withoutSuffix) return 'једна година';\n return isFuture || withoutSuffix ? wordKey[0] : wordKey[1];\n }\n\n word = translator.correctGrammaticalCase(number, wordKey);\n // Nominativ\n if (key === 'yy' && withoutSuffix && word === 'годину') {\n return number + ' година';\n }\n\n return number + ' ' + word;\n },\n };\n\n var srCyrl = moment.defineLocale('sr-cyrl', {\n months: 'јануар_фебруар_март_април_мај_јун_јул_август_септембар_октобар_новембар_децембар'.split(\n '_'\n ),\n monthsShort:\n 'јан._феб._мар._апр._мај_јун_јул_авг._сеп._окт._нов._дец.'.split('_'),\n monthsParseExact: true,\n weekdays: 'недеља_понедељак_уторак_среда_четвртак_петак_субота'.split('_'),\n weekdaysShort: 'нед._пон._уто._сре._чет._пет._суб.'.split('_'),\n weekdaysMin: 'не_по_ут_ср_че_пе_су'.split('_'),\n weekdaysParseExact: true,\n longDateFormat: {\n LT: 'H:mm',\n LTS: 'H:mm:ss',\n L: 'D. M. YYYY.',\n LL: 'D. MMMM YYYY.',\n LLL: 'D. MMMM YYYY. H:mm',\n LLLL: 'dddd, D. MMMM YYYY. H:mm',\n },\n calendar: {\n sameDay: '[данас у] LT',\n nextDay: '[сутра у] LT',\n nextWeek: function () {\n switch (this.day()) {\n case 0:\n return '[у] [недељу] [у] LT';\n case 3:\n return '[у] [среду] [у] LT';\n case 6:\n return '[у] [суботу] [у] LT';\n case 1:\n case 2:\n case 4:\n case 5:\n return '[у] dddd [у] LT';\n }\n },\n lastDay: '[јуче у] LT',\n lastWeek: function () {\n var lastWeekDays = [\n '[прошле] [недеље] [у] LT',\n '[прошлог] [понедељка] [у] LT',\n '[прошлог] [уторка] [у] LT',\n '[прошле] [среде] [у] LT',\n '[прошлог] [четвртка] [у] LT',\n '[прошлог] [петка] [у] LT',\n '[прошле] [суботе] [у] LT',\n ];\n return lastWeekDays[this.day()];\n },\n sameElse: 'L',\n },\n relativeTime: {\n future: 'за %s',\n past: 'пре %s',\n s: 'неколико секунди',\n ss: translator.translate,\n m: translator.translate,\n mm: translator.translate,\n h: translator.translate,\n hh: translator.translate,\n d: translator.translate,\n dd: translator.translate,\n M: translator.translate,\n MM: translator.translate,\n y: translator.translate,\n yy: translator.translate,\n },\n dayOfMonthOrdinalParse: /\\d{1,2}\\./,\n ordinal: '%d.',\n week: {\n dow: 1, // Monday is the first day of the week.\n doy: 7, // The week that contains Jan 1st is the first week of the year.\n },\n });\n\n return srCyrl;\n\n})));\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMzMyMi5qcyIsIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL2l0Zy1uZXh0Z2VuLWZyb250ZW5kLy4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvc3ItY3lybC5qcz8xM2U5Il0sInNvdXJjZXNDb250ZW50IjpbIi8vISBtb21lbnQuanMgbG9jYWxlIGNvbmZpZ3VyYXRpb25cbi8vISBsb2NhbGUgOiBTZXJiaWFuIEN5cmlsbGljIFtzci1jeXJsXVxuLy8hIGF1dGhvciA6IE1pbGFuIEphbmHEjWtvdmnEhzxtaWxhbmphbmFja292aWNAZ21haWwuY29tPiA6IGh0dHBzOi8vZ2l0aHViLmNvbS9taWxhbi1qXG4vLyEgYXV0aG9yIDogU3RlZmFuIENybmpha292acSHIDxzdGVmYW5AaG90bWFpbC5ycz4gOiBodHRwczovL2dpdGh1Yi5jb20vY3JuamFrb3ZpY1xuXG47KGZ1bmN0aW9uIChnbG9iYWwsIGZhY3RvcnkpIHtcbiAgIHR5cGVvZiBleHBvcnRzID09PSAnb2JqZWN0JyAmJiB0eXBlb2YgbW9kdWxlICE9PSAndW5kZWZpbmVkJ1xuICAgICAgICYmIHR5cGVvZiByZXF1aXJlID09PSAnZnVuY3Rpb24nID8gZmFjdG9yeShyZXF1aXJlKCcuLi9tb21lbnQnKSkgOlxuICAgdHlwZW9mIGRlZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiBkZWZpbmUuYW1kID8gZGVmaW5lKFsnLi4vbW9tZW50J10sIGZhY3RvcnkpIDpcbiAgIGZhY3RvcnkoZ2xvYmFsLm1vbWVudClcbn0odGhpcywgKGZ1bmN0aW9uIChtb21lbnQpIHsgJ3VzZSBzdHJpY3QnO1xuXG4gICAgLy8hIG1vbWVudC5qcyBsb2NhbGUgY29uZmlndXJhdGlvblxuXG4gICAgdmFyIHRyYW5zbGF0b3IgPSB7XG4gICAgICAgIHdvcmRzOiB7XG4gICAgICAgICAgICAvL0RpZmZlcmVudCBncmFtbWF0aWNhbCBjYXNlc1xuICAgICAgICAgICAgc3M6IFsn0YHQtdC60YPQvdC00LAnLCAn0YHQtdC60YPQvdC00LUnLCAn0YHQtdC60YPQvdC00LgnXSxcbiAgICAgICAgICAgIG06IFsn0ZjQtdC00LDQvSDQvNC40L3Rg9GCJywgJ9GY0LXQtNC90L7QsyDQvNC40L3Rg9GC0LAnXSxcbiAgICAgICAgICAgIG1tOiBbJ9C80LjQvdGD0YInLCAn0LzQuNC90YPRgtCwJywgJ9C80LjQvdGD0YLQsCddLFxuICAgICAgICAgICAgaDogWyfRmNC10LTQsNC9INGB0LDRgicsICfRmNC10LTQvdC+0LMg0YHQsNGC0LAnXSxcbiAgICAgICAgICAgIGhoOiBbJ9GB0LDRgicsICfRgdCw0YLQsCcsICfRgdCw0YLQuCddLFxuICAgICAgICAgICAgZDogWyfRmNC10LTQsNC9INC00LDQvScsICfRmNC10LTQvdC+0LMg0LTQsNC90LAnXSxcbiAgICAgICAgICAgIGRkOiBbJ9C00LDQvScsICfQtNCw0L3QsCcsICfQtNCw0L3QsCddLFxuICAgICAgICAgICAgTTogWyfRmNC10LTQsNC9INC80LXRgdC10YYnLCAn0ZjQtdC00L3QvtCzINC80LXRgdC10YbQsCddLFxuICAgICAgICAgICAgTU06IFsn0LzQtdGB0LXRhicsICfQvNC10YHQtdGG0LAnLCAn0LzQtdGB0LXRhtC4J10sXG4gICAgICAgICAgICB5OiBbJ9GY0LXQtNC90YMg0LPQvtC00LjQvdGDJywgJ9GY0LXQtNC90LUg0LPQvtC00LjQvdC1J10sXG4gICAgICAgICAgICB5eTogWyfQs9C+0LTQuNC90YMnLCAn0LPQvtC00LjQvdC1JywgJ9Cz0L7QtNC40L3QsCddLFxuICAgICAgICB9LFxuICAgICAgICBjb3JyZWN0R3JhbW1hdGljYWxDYXNlOiBmdW5jdGlvbiAobnVtYmVyLCB3b3JkS2V5KSB7XG4gICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgbnVtYmVyICUgMTAgPj0gMSAmJlxuICAgICAgICAgICAgICAgIG51bWJlciAlIDEwIDw9IDQgJiZcbiAgICAgICAgICAgICAgICAobnVtYmVyICUgMTAwIDwgMTAgfHwgbnVtYmVyICUgMTAwID49IDIwKVxuICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG51bWJlciAlIDEwID09PSAxID8gd29yZEtleVswXSA6IHdvcmRLZXlbMV07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gd29yZEtleVsyXTtcbiAgICAgICAgfSxcbiAgICAgICAgdHJhbnNsYXRlOiBmdW5jdGlvbiAobnVtYmVyLCB3aXRob3V0U3VmZml4LCBrZXksIGlzRnV0dXJlKSB7XG4gICAgICAgICAgICB2YXIgd29yZEtleSA9IHRyYW5zbGF0b3Iud29yZHNba2V5XSxcbiAgICAgICAgICAgICAgICB3b3JkO1xuXG4gICAgICAgICAgICBpZiAoa2V5Lmxlbmd0aCA9PT0gMSkge1xuICAgICAgICAgICAgICAgIC8vIE5vbWluYXRpdlxuICAgICAgICAgICAgICAgIGlmIChrZXkgPT09ICd5JyAmJiB3aXRob3V0U3VmZml4KSByZXR1cm4gJ9GY0LXQtNC90LAg0LPQvtC00LjQvdCwJztcbiAgICAgICAgICAgICAgICByZXR1cm4gaXNGdXR1cmUgfHwgd2l0aG91dFN1ZmZpeCA/IHdvcmRLZXlbMF0gOiB3b3JkS2V5WzFdO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB3b3JkID0gdHJhbnNsYXRvci5jb3JyZWN0R3JhbW1hdGljYWxDYXNlKG51bWJlciwgd29yZEtleSk7XG4gICAgICAgICAgICAvLyBOb21pbmF0aXZcbiAgICAgICAgICAgIGlmIChrZXkgPT09ICd5eScgJiYgd2l0aG91dFN1ZmZpeCAmJiB3b3JkID09PSAn0LPQvtC00LjQvdGDJykge1xuICAgICAgICAgICAgICAgIHJldHVybiBudW1iZXIgKyAnINCz0L7QtNC40L3QsCc7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHJldHVybiBudW1iZXIgKyAnICcgKyB3b3JkO1xuICAgICAgICB9LFxuICAgIH07XG5cbiAgICB2YXIgc3JDeXJsID0gbW9tZW50LmRlZmluZUxvY2FsZSgnc3ItY3lybCcsIHtcbiAgICAgICAgbW9udGhzOiAn0ZjQsNC90YPQsNGAX9GE0LXQsdGA0YPQsNGAX9C80LDRgNGCX9Cw0L/RgNC40Ltf0LzQsNGYX9GY0YPQvV/RmNGD0Ltf0LDQstCz0YPRgdGCX9GB0LXQv9GC0LXQvNCx0LDRgF/QvtC60YLQvtCx0LDRgF/QvdC+0LLQtdC80LHQsNGAX9C00LXRhtC10LzQsdCw0YAnLnNwbGl0KFxuICAgICAgICAgICAgJ18nXG4gICAgICAgICksXG4gICAgICAgIG1vbnRoc1Nob3J0OlxuICAgICAgICAgICAgJ9GY0LDQvS5f0YTQtdCxLl/QvNCw0YAuX9Cw0L/RgC5f0LzQsNGYX9GY0YPQvV/RmNGD0Ltf0LDQstCzLl/RgdC10L8uX9C+0LrRgi5f0L3QvtCyLl/QtNC10YYuJy5zcGxpdCgnXycpLFxuICAgICAgICBtb250aHNQYXJzZUV4YWN0OiB0cnVlLFxuICAgICAgICB3ZWVrZGF5czogJ9C90LXQtNC10ZnQsF/Qv9C+0L3QtdC00LXRmdCw0Lpf0YPRgtC+0YDQsNC6X9GB0YDQtdC00LBf0YfQtdGC0LLRgNGC0LDQul/Qv9C10YLQsNC6X9GB0YPQsdC+0YLQsCcuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXNTaG9ydDogJ9C90LXQtC5f0L/QvtC9Ll/Rg9GC0L4uX9GB0YDQtS5f0YfQtdGCLl/Qv9C10YIuX9GB0YPQsS4nLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzTWluOiAn0L3QtV/Qv9C+X9GD0YJf0YHRgF/Rh9C1X9C/0LVf0YHRgycuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXNQYXJzZUV4YWN0OiB0cnVlLFxuICAgICAgICBsb25nRGF0ZUZvcm1hdDoge1xuICAgICAgICAgICAgTFQ6ICdIOm1tJyxcbiAgICAgICAgICAgIExUUzogJ0g6bW06c3MnLFxuICAgICAgICAgICAgTDogJ0QuIE0uIFlZWVkuJyxcbiAgICAgICAgICAgIExMOiAnRC4gTU1NTSBZWVlZLicsXG4gICAgICAgICAgICBMTEw6ICdELiBNTU1NIFlZWVkuIEg6bW0nLFxuICAgICAgICAgICAgTExMTDogJ2RkZGQsIEQuIE1NTU0gWVlZWS4gSDptbScsXG4gICAgICAgIH0sXG4gICAgICAgIGNhbGVuZGFyOiB7XG4gICAgICAgICAgICBzYW1lRGF5OiAnW9C00LDQvdCw0YEg0YNdIExUJyxcbiAgICAgICAgICAgIG5leHREYXk6ICdb0YHRg9GC0YDQsCDRg10gTFQnLFxuICAgICAgICAgICAgbmV4dFdlZWs6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICBzd2l0Y2ggKHRoaXMuZGF5KCkpIHtcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAwOlxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICdb0YNdIFvQvdC10LTQtdGZ0YNdIFvRg10gTFQnO1xuICAgICAgICAgICAgICAgICAgICBjYXNlIDM6XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gJ1vRg10gW9GB0YDQtdC00YNdIFvRg10gTFQnO1xuICAgICAgICAgICAgICAgICAgICBjYXNlIDY6XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gJ1vRg10gW9GB0YPQsdC+0YLRg10gW9GDXSBMVCc7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgMTpcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAyOlxuICAgICAgICAgICAgICAgICAgICBjYXNlIDQ6XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgNTpcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAnW9GDXSBkZGRkIFvRg10gTFQnO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBsYXN0RGF5OiAnW9GY0YPRh9C1INGDXSBMVCcsXG4gICAgICAgICAgICBsYXN0V2VlazogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIHZhciBsYXN0V2Vla0RheXMgPSBbXG4gICAgICAgICAgICAgICAgICAgICdb0L/RgNC+0YjQu9C1XSBb0L3QtdC00LXRmdC1XSBb0YNdIExUJyxcbiAgICAgICAgICAgICAgICAgICAgJ1vQv9GA0L7RiNC70L7Qs10gW9C/0L7QvdC10LTQtdGZ0LrQsF0gW9GDXSBMVCcsXG4gICAgICAgICAgICAgICAgICAgICdb0L/RgNC+0YjQu9C+0LNdIFvRg9GC0L7RgNC60LBdIFvRg10gTFQnLFxuICAgICAgICAgICAgICAgICAgICAnW9C/0YDQvtGI0LvQtV0gW9GB0YDQtdC00LVdIFvRg10gTFQnLFxuICAgICAgICAgICAgICAgICAgICAnW9C/0YDQvtGI0LvQvtCzXSBb0YfQtdGC0LLRgNGC0LrQsF0gW9GDXSBMVCcsXG4gICAgICAgICAgICAgICAgICAgICdb0L/RgNC+0YjQu9C+0LNdIFvQv9C10YLQutCwXSBb0YNdIExUJyxcbiAgICAgICAgICAgICAgICAgICAgJ1vQv9GA0L7RiNC70LVdIFvRgdGD0LHQvtGC0LVdIFvRg10gTFQnLFxuICAgICAgICAgICAgICAgIF07XG4gICAgICAgICAgICAgICAgcmV0dXJuIGxhc3RXZWVrRGF5c1t0aGlzLmRheSgpXTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBzYW1lRWxzZTogJ0wnLFxuICAgICAgICB9LFxuICAgICAgICByZWxhdGl2ZVRpbWU6IHtcbiAgICAgICAgICAgIGZ1dHVyZTogJ9C30LAgJXMnLFxuICAgICAgICAgICAgcGFzdDogJ9C/0YDQtSAlcycsXG4gICAgICAgICAgICBzOiAn0L3QtdC60L7Qu9C40LrQviDRgdC10LrRg9C90LTQuCcsXG4gICAgICAgICAgICBzczogdHJhbnNsYXRvci50cmFuc2xhdGUsXG4gICAgICAgICAgICBtOiB0cmFuc2xhdG9yLnRyYW5zbGF0ZSxcbiAgICAgICAgICAgIG1tOiB0cmFuc2xhdG9yLnRyYW5zbGF0ZSxcbiAgICAgICAgICAgIGg6IHRyYW5zbGF0b3IudHJhbnNsYXRlLFxuICAgICAgICAgICAgaGg6IHRyYW5zbGF0b3IudHJhbnNsYXRlLFxuICAgICAgICAgICAgZDogdHJhbnNsYXRvci50cmFuc2xhdGUsXG4gICAgICAgICAgICBkZDogdHJhbnNsYXRvci50cmFuc2xhdGUsXG4gICAgICAgICAgICBNOiB0cmFuc2xhdG9yLnRyYW5zbGF0ZSxcbiAgICAgICAgICAgIE1NOiB0cmFuc2xhdG9yLnRyYW5zbGF0ZSxcbiAgICAgICAgICAgIHk6IHRyYW5zbGF0b3IudHJhbnNsYXRlLFxuICAgICAgICAgICAgeXk6IHRyYW5zbGF0b3IudHJhbnNsYXRlLFxuICAgICAgICB9LFxuICAgICAgICBkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOiAvXFxkezEsMn1cXC4vLFxuICAgICAgICBvcmRpbmFsOiAnJWQuJyxcbiAgICAgICAgd2Vlazoge1xuICAgICAgICAgICAgZG93OiAxLCAvLyBNb25kYXkgaXMgdGhlIGZpcnN0IGRheSBvZiB0aGUgd2Vlay5cbiAgICAgICAgICAgIGRveTogNywgLy8gVGhlIHdlZWsgdGhhdCBjb250YWlucyBKYW4gMXN0IGlzIHRoZSBmaXJzdCB3ZWVrIG9mIHRoZSB5ZWFyLlxuICAgICAgICB9LFxuICAgIH0pO1xuXG4gICAgcmV0dXJuIHNyQ3lybDtcblxufSkpKTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///3322\n")},3508:function(__unused_webpack_module,__unused_webpack_exports,__webpack_require__){eval("//! moment.js locale configuration\n//! locale : Basque [eu]\n//! author : Eneko Illarramendi : https://github.com/eillarra\n\n;(function (global, factory) {\n true ? factory(__webpack_require__(95093)) :\n 0\n}(this, (function (moment) { 'use strict';\n\n //! moment.js locale configuration\n\n var eu = moment.defineLocale('eu', {\n months: 'urtarrila_otsaila_martxoa_apirila_maiatza_ekaina_uztaila_abuztua_iraila_urria_azaroa_abendua'.split(\n '_'\n ),\n monthsShort:\n 'urt._ots._mar._api._mai._eka._uzt._abu._ira._urr._aza._abe.'.split(\n '_'\n ),\n monthsParseExact: true,\n weekdays:\n 'igandea_astelehena_asteartea_asteazkena_osteguna_ostirala_larunbata'.split(\n '_'\n ),\n weekdaysShort: 'ig._al._ar._az._og._ol._lr.'.split('_'),\n weekdaysMin: 'ig_al_ar_az_og_ol_lr'.split('_'),\n weekdaysParseExact: true,\n longDateFormat: {\n LT: 'HH:mm',\n LTS: 'HH:mm:ss',\n L: 'YYYY-MM-DD',\n LL: 'YYYY[ko] MMMM[ren] D[a]',\n LLL: 'YYYY[ko] MMMM[ren] D[a] HH:mm',\n LLLL: 'dddd, YYYY[ko] MMMM[ren] D[a] HH:mm',\n l: 'YYYY-M-D',\n ll: 'YYYY[ko] MMM D[a]',\n lll: 'YYYY[ko] MMM D[a] HH:mm',\n llll: 'ddd, YYYY[ko] MMM D[a] HH:mm',\n },\n calendar: {\n sameDay: '[gaur] LT[etan]',\n nextDay: '[bihar] LT[etan]',\n nextWeek: 'dddd LT[etan]',\n lastDay: '[atzo] LT[etan]',\n lastWeek: '[aurreko] dddd LT[etan]',\n sameElse: 'L',\n },\n relativeTime: {\n future: '%s barru',\n past: 'duela %s',\n s: 'segundo batzuk',\n ss: '%d segundo',\n m: 'minutu bat',\n mm: '%d minutu',\n h: 'ordu bat',\n hh: '%d ordu',\n d: 'egun bat',\n dd: '%d egun',\n M: 'hilabete bat',\n MM: '%d hilabete',\n y: 'urte bat',\n yy: '%d urte',\n },\n dayOfMonthOrdinalParse: /\\d{1,2}\\./,\n ordinal: '%d.',\n week: {\n dow: 1, // Monday is the first day of the week.\n doy: 7, // The week that contains Jan 7th is the first week of the year.\n },\n });\n\n return eu;\n\n})));\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMzUwOC5qcyIsIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vaXRnLW5leHRnZW4tZnJvbnRlbmQvLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9ldS5qcz8wZmYyIl0sInNvdXJjZXNDb250ZW50IjpbIi8vISBtb21lbnQuanMgbG9jYWxlIGNvbmZpZ3VyYXRpb25cbi8vISBsb2NhbGUgOiBCYXNxdWUgW2V1XVxuLy8hIGF1dGhvciA6IEVuZWtvIElsbGFycmFtZW5kaSA6IGh0dHBzOi8vZ2l0aHViLmNvbS9laWxsYXJyYVxuXG47KGZ1bmN0aW9uIChnbG9iYWwsIGZhY3RvcnkpIHtcbiAgIHR5cGVvZiBleHBvcnRzID09PSAnb2JqZWN0JyAmJiB0eXBlb2YgbW9kdWxlICE9PSAndW5kZWZpbmVkJ1xuICAgICAgICYmIHR5cGVvZiByZXF1aXJlID09PSAnZnVuY3Rpb24nID8gZmFjdG9yeShyZXF1aXJlKCcuLi9tb21lbnQnKSkgOlxuICAgdHlwZW9mIGRlZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiBkZWZpbmUuYW1kID8gZGVmaW5lKFsnLi4vbW9tZW50J10sIGZhY3RvcnkpIDpcbiAgIGZhY3RvcnkoZ2xvYmFsLm1vbWVudClcbn0odGhpcywgKGZ1bmN0aW9uIChtb21lbnQpIHsgJ3VzZSBzdHJpY3QnO1xuXG4gICAgLy8hIG1vbWVudC5qcyBsb2NhbGUgY29uZmlndXJhdGlvblxuXG4gICAgdmFyIGV1ID0gbW9tZW50LmRlZmluZUxvY2FsZSgnZXUnLCB7XG4gICAgICAgIG1vbnRoczogJ3VydGFycmlsYV9vdHNhaWxhX21hcnR4b2FfYXBpcmlsYV9tYWlhdHphX2VrYWluYV91enRhaWxhX2FidXp0dWFfaXJhaWxhX3VycmlhX2F6YXJvYV9hYmVuZHVhJy5zcGxpdChcbiAgICAgICAgICAgICdfJ1xuICAgICAgICApLFxuICAgICAgICBtb250aHNTaG9ydDpcbiAgICAgICAgICAgICd1cnQuX290cy5fbWFyLl9hcGkuX21haS5fZWthLl91enQuX2FidS5faXJhLl91cnIuX2F6YS5fYWJlLicuc3BsaXQoXG4gICAgICAgICAgICAgICAgJ18nXG4gICAgICAgICAgICApLFxuICAgICAgICBtb250aHNQYXJzZUV4YWN0OiB0cnVlLFxuICAgICAgICB3ZWVrZGF5czpcbiAgICAgICAgICAgICdpZ2FuZGVhX2FzdGVsZWhlbmFfYXN0ZWFydGVhX2FzdGVhemtlbmFfb3N0ZWd1bmFfb3N0aXJhbGFfbGFydW5iYXRhJy5zcGxpdChcbiAgICAgICAgICAgICAgICAnXydcbiAgICAgICAgICAgICksXG4gICAgICAgIHdlZWtkYXlzU2hvcnQ6ICdpZy5fYWwuX2FyLl9hei5fb2cuX29sLl9sci4nLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzTWluOiAnaWdfYWxfYXJfYXpfb2dfb2xfbHInLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzUGFyc2VFeGFjdDogdHJ1ZSxcbiAgICAgICAgbG9uZ0RhdGVGb3JtYXQ6IHtcbiAgICAgICAgICAgIExUOiAnSEg6bW0nLFxuICAgICAgICAgICAgTFRTOiAnSEg6bW06c3MnLFxuICAgICAgICAgICAgTDogJ1lZWVktTU0tREQnLFxuICAgICAgICAgICAgTEw6ICdZWVlZW2tvXSBNTU1NW3Jlbl0gRFthXScsXG4gICAgICAgICAgICBMTEw6ICdZWVlZW2tvXSBNTU1NW3Jlbl0gRFthXSBISDptbScsXG4gICAgICAgICAgICBMTExMOiAnZGRkZCwgWVlZWVtrb10gTU1NTVtyZW5dIERbYV0gSEg6bW0nLFxuICAgICAgICAgICAgbDogJ1lZWVktTS1EJyxcbiAgICAgICAgICAgIGxsOiAnWVlZWVtrb10gTU1NIERbYV0nLFxuICAgICAgICAgICAgbGxsOiAnWVlZWVtrb10gTU1NIERbYV0gSEg6bW0nLFxuICAgICAgICAgICAgbGxsbDogJ2RkZCwgWVlZWVtrb10gTU1NIERbYV0gSEg6bW0nLFxuICAgICAgICB9LFxuICAgICAgICBjYWxlbmRhcjoge1xuICAgICAgICAgICAgc2FtZURheTogJ1tnYXVyXSBMVFtldGFuXScsXG4gICAgICAgICAgICBuZXh0RGF5OiAnW2JpaGFyXSBMVFtldGFuXScsXG4gICAgICAgICAgICBuZXh0V2VlazogJ2RkZGQgTFRbZXRhbl0nLFxuICAgICAgICAgICAgbGFzdERheTogJ1thdHpvXSBMVFtldGFuXScsXG4gICAgICAgICAgICBsYXN0V2VlazogJ1thdXJyZWtvXSBkZGRkIExUW2V0YW5dJyxcbiAgICAgICAgICAgIHNhbWVFbHNlOiAnTCcsXG4gICAgICAgIH0sXG4gICAgICAgIHJlbGF0aXZlVGltZToge1xuICAgICAgICAgICAgZnV0dXJlOiAnJXMgYmFycnUnLFxuICAgICAgICAgICAgcGFzdDogJ2R1ZWxhICVzJyxcbiAgICAgICAgICAgIHM6ICdzZWd1bmRvIGJhdHp1aycsXG4gICAgICAgICAgICBzczogJyVkIHNlZ3VuZG8nLFxuICAgICAgICAgICAgbTogJ21pbnV0dSBiYXQnLFxuICAgICAgICAgICAgbW06ICclZCBtaW51dHUnLFxuICAgICAgICAgICAgaDogJ29yZHUgYmF0JyxcbiAgICAgICAgICAgIGhoOiAnJWQgb3JkdScsXG4gICAgICAgICAgICBkOiAnZWd1biBiYXQnLFxuICAgICAgICAgICAgZGQ6ICclZCBlZ3VuJyxcbiAgICAgICAgICAgIE06ICdoaWxhYmV0ZSBiYXQnLFxuICAgICAgICAgICAgTU06ICclZCBoaWxhYmV0ZScsXG4gICAgICAgICAgICB5OiAndXJ0ZSBiYXQnLFxuICAgICAgICAgICAgeXk6ICclZCB1cnRlJyxcbiAgICAgICAgfSxcbiAgICAgICAgZGF5T2ZNb250aE9yZGluYWxQYXJzZTogL1xcZHsxLDJ9XFwuLyxcbiAgICAgICAgb3JkaW5hbDogJyVkLicsXG4gICAgICAgIHdlZWs6IHtcbiAgICAgICAgICAgIGRvdzogMSwgLy8gTW9uZGF5IGlzIHRoZSBmaXJzdCBkYXkgb2YgdGhlIHdlZWsuXG4gICAgICAgICAgICBkb3k6IDcsIC8vIFRoZSB3ZWVrIHRoYXQgY29udGFpbnMgSmFuIDd0aCBpcyB0aGUgZmlyc3Qgd2VlayBvZiB0aGUgeWVhci5cbiAgICAgICAgfSxcbiAgICB9KTtcblxuICAgIHJldHVybiBldTtcblxufSkpKTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///3508\n")},4146:(module,__unused_webpack_exports,__webpack_require__)=>{"use strict";eval("\n\nvar reactIs = __webpack_require__(73404);\n\n/**\n * Copyright 2015, Yahoo! Inc.\n * Copyrights licensed under the New BSD License. See the accompanying LICENSE file for terms.\n */\nvar REACT_STATICS = {\n childContextTypes: true,\n contextType: true,\n contextTypes: true,\n defaultProps: true,\n displayName: true,\n getDefaultProps: true,\n getDerivedStateFromError: true,\n getDerivedStateFromProps: true,\n mixins: true,\n propTypes: true,\n type: true\n};\nvar KNOWN_STATICS = {\n name: true,\n length: true,\n prototype: true,\n caller: true,\n callee: true,\n arguments: true,\n arity: true\n};\nvar FORWARD_REF_STATICS = {\n '$$typeof': true,\n render: true,\n defaultProps: true,\n displayName: true,\n propTypes: true\n};\nvar MEMO_STATICS = {\n '$$typeof': true,\n compare: true,\n defaultProps: true,\n displayName: true,\n propTypes: true,\n type: true\n};\nvar TYPE_STATICS = {};\nTYPE_STATICS[reactIs.ForwardRef] = FORWARD_REF_STATICS;\nTYPE_STATICS[reactIs.Memo] = MEMO_STATICS;\n\nfunction getStatics(component) {\n // React v16.11 and below\n if (reactIs.isMemo(component)) {\n return MEMO_STATICS;\n } // React v16.12 and above\n\n\n return TYPE_STATICS[component['$$typeof']] || REACT_STATICS;\n}\n\nvar defineProperty = Object.defineProperty;\nvar getOwnPropertyNames = Object.getOwnPropertyNames;\nvar getOwnPropertySymbols = Object.getOwnPropertySymbols;\nvar getOwnPropertyDescriptor = Object.getOwnPropertyDescriptor;\nvar getPrototypeOf = Object.getPrototypeOf;\nvar objectPrototype = Object.prototype;\nfunction hoistNonReactStatics(targetComponent, sourceComponent, blacklist) {\n if (typeof sourceComponent !== 'string') {\n // don't hoist over string (html) components\n if (objectPrototype) {\n var inheritedComponent = getPrototypeOf(sourceComponent);\n\n if (inheritedComponent && inheritedComponent !== objectPrototype) {\n hoistNonReactStatics(targetComponent, inheritedComponent, blacklist);\n }\n }\n\n var keys = getOwnPropertyNames(sourceComponent);\n\n if (getOwnPropertySymbols) {\n keys = keys.concat(getOwnPropertySymbols(sourceComponent));\n }\n\n var targetStatics = getStatics(targetComponent);\n var sourceStatics = getStatics(sourceComponent);\n\n for (var i = 0; i < keys.length; ++i) {\n var key = keys[i];\n\n if (!KNOWN_STATICS[key] && !(blacklist && blacklist[key]) && !(sourceStatics && sourceStatics[key]) && !(targetStatics && targetStatics[key])) {\n var descriptor = getOwnPropertyDescriptor(sourceComponent, key);\n\n try {\n // Avoid failures from read-only properties\n defineProperty(targetComponent, key, descriptor);\n } catch (e) {}\n }\n }\n }\n\n return targetComponent;\n}\n\nmodule.exports = hoistNonReactStatics;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNDE0Ni5qcyIsIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL2l0Zy1uZXh0Z2VuLWZyb250ZW5kLy4vbm9kZV9tb2R1bGVzL2hvaXN0LW5vbi1yZWFjdC1zdGF0aWNzL2Rpc3QvaG9pc3Qtbm9uLXJlYWN0LXN0YXRpY3MuY2pzLmpzP2RhNmEiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG52YXIgcmVhY3RJcyA9IHJlcXVpcmUoJ3JlYWN0LWlzJyk7XG5cbi8qKlxuICogQ29weXJpZ2h0IDIwMTUsIFlhaG9vISBJbmMuXG4gKiBDb3B5cmlnaHRzIGxpY2Vuc2VkIHVuZGVyIHRoZSBOZXcgQlNEIExpY2Vuc2UuIFNlZSB0aGUgYWNjb21wYW55aW5nIExJQ0VOU0UgZmlsZSBmb3IgdGVybXMuXG4gKi9cbnZhciBSRUFDVF9TVEFUSUNTID0ge1xuICBjaGlsZENvbnRleHRUeXBlczogdHJ1ZSxcbiAgY29udGV4dFR5cGU6IHRydWUsXG4gIGNvbnRleHRUeXBlczogdHJ1ZSxcbiAgZGVmYXVsdFByb3BzOiB0cnVlLFxuICBkaXNwbGF5TmFtZTogdHJ1ZSxcbiAgZ2V0RGVmYXVsdFByb3BzOiB0cnVlLFxuICBnZXREZXJpdmVkU3RhdGVGcm9tRXJyb3I6IHRydWUsXG4gIGdldERlcml2ZWRTdGF0ZUZyb21Qcm9wczogdHJ1ZSxcbiAgbWl4aW5zOiB0cnVlLFxuICBwcm9wVHlwZXM6IHRydWUsXG4gIHR5cGU6IHRydWVcbn07XG52YXIgS05PV05fU1RBVElDUyA9IHtcbiAgbmFtZTogdHJ1ZSxcbiAgbGVuZ3RoOiB0cnVlLFxuICBwcm90b3R5cGU6IHRydWUsXG4gIGNhbGxlcjogdHJ1ZSxcbiAgY2FsbGVlOiB0cnVlLFxuICBhcmd1bWVudHM6IHRydWUsXG4gIGFyaXR5OiB0cnVlXG59O1xudmFyIEZPUldBUkRfUkVGX1NUQVRJQ1MgPSB7XG4gICckJHR5cGVvZic6IHRydWUsXG4gIHJlbmRlcjogdHJ1ZSxcbiAgZGVmYXVsdFByb3BzOiB0cnVlLFxuICBkaXNwbGF5TmFtZTogdHJ1ZSxcbiAgcHJvcFR5cGVzOiB0cnVlXG59O1xudmFyIE1FTU9fU1RBVElDUyA9IHtcbiAgJyQkdHlwZW9mJzogdHJ1ZSxcbiAgY29tcGFyZTogdHJ1ZSxcbiAgZGVmYXVsdFByb3BzOiB0cnVlLFxuICBkaXNwbGF5TmFtZTogdHJ1ZSxcbiAgcHJvcFR5cGVzOiB0cnVlLFxuICB0eXBlOiB0cnVlXG59O1xudmFyIFRZUEVfU1RBVElDUyA9IHt9O1xuVFlQRV9TVEFUSUNTW3JlYWN0SXMuRm9yd2FyZFJlZl0gPSBGT1JXQVJEX1JFRl9TVEFUSUNTO1xuVFlQRV9TVEFUSUNTW3JlYWN0SXMuTWVtb10gPSBNRU1PX1NUQVRJQ1M7XG5cbmZ1bmN0aW9uIGdldFN0YXRpY3MoY29tcG9uZW50KSB7XG4gIC8vIFJlYWN0IHYxNi4xMSBhbmQgYmVsb3dcbiAgaWYgKHJlYWN0SXMuaXNNZW1vKGNvbXBvbmVudCkpIHtcbiAgICByZXR1cm4gTUVNT19TVEFUSUNTO1xuICB9IC8vIFJlYWN0IHYxNi4xMiBhbmQgYWJvdmVcblxuXG4gIHJldHVybiBUWVBFX1NUQVRJQ1NbY29tcG9uZW50WyckJHR5cGVvZiddXSB8fCBSRUFDVF9TVEFUSUNTO1xufVxuXG52YXIgZGVmaW5lUHJvcGVydHkgPSBPYmplY3QuZGVmaW5lUHJvcGVydHk7XG52YXIgZ2V0T3duUHJvcGVydHlOYW1lcyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzO1xudmFyIGdldE93blByb3BlcnR5U3ltYm9scyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHM7XG52YXIgZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcjtcbnZhciBnZXRQcm90b3R5cGVPZiA9IE9iamVjdC5nZXRQcm90b3R5cGVPZjtcbnZhciBvYmplY3RQcm90b3R5cGUgPSBPYmplY3QucHJvdG90eXBlO1xuZnVuY3Rpb24gaG9pc3ROb25SZWFjdFN0YXRpY3ModGFyZ2V0Q29tcG9uZW50LCBzb3VyY2VDb21wb25lbnQsIGJsYWNrbGlzdCkge1xuICBpZiAodHlwZW9mIHNvdXJjZUNvbXBvbmVudCAhPT0gJ3N0cmluZycpIHtcbiAgICAvLyBkb24ndCBob2lzdCBvdmVyIHN0cmluZyAoaHRtbCkgY29tcG9uZW50c1xuICAgIGlmIChvYmplY3RQcm90b3R5cGUpIHtcbiAgICAgIHZhciBpbmhlcml0ZWRDb21wb25lbnQgPSBnZXRQcm90b3R5cGVPZihzb3VyY2VDb21wb25lbnQpO1xuXG4gICAgICBpZiAoaW5oZXJpdGVkQ29tcG9uZW50ICYmIGluaGVyaXRlZENvbXBvbmVudCAhPT0gb2JqZWN0UHJvdG90eXBlKSB7XG4gICAgICAgIGhvaXN0Tm9uUmVhY3RTdGF0aWNzKHRhcmdldENvbXBvbmVudCwgaW5oZXJpdGVkQ29tcG9uZW50LCBibGFja2xpc3QpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHZhciBrZXlzID0gZ2V0T3duUHJvcGVydHlOYW1lcyhzb3VyY2VDb21wb25lbnQpO1xuXG4gICAgaWYgKGdldE93blByb3BlcnR5U3ltYm9scykge1xuICAgICAga2V5cyA9IGtleXMuY29uY2F0KGdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2VDb21wb25lbnQpKTtcbiAgICB9XG5cbiAgICB2YXIgdGFyZ2V0U3RhdGljcyA9IGdldFN0YXRpY3ModGFyZ2V0Q29tcG9uZW50KTtcbiAgICB2YXIgc291cmNlU3RhdGljcyA9IGdldFN0YXRpY3Moc291cmNlQ29tcG9uZW50KTtcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwga2V5cy5sZW5ndGg7ICsraSkge1xuICAgICAgdmFyIGtleSA9IGtleXNbaV07XG5cbiAgICAgIGlmICghS05PV05fU1RBVElDU1trZXldICYmICEoYmxhY2tsaXN0ICYmIGJsYWNrbGlzdFtrZXldKSAmJiAhKHNvdXJjZVN0YXRpY3MgJiYgc291cmNlU3RhdGljc1trZXldKSAmJiAhKHRhcmdldFN0YXRpY3MgJiYgdGFyZ2V0U3RhdGljc1trZXldKSkge1xuICAgICAgICB2YXIgZGVzY3JpcHRvciA9IGdldE93blByb3BlcnR5RGVzY3JpcHRvcihzb3VyY2VDb21wb25lbnQsIGtleSk7XG5cbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAvLyBBdm9pZCBmYWlsdXJlcyBmcm9tIHJlYWQtb25seSBwcm9wZXJ0aWVzXG4gICAgICAgICAgZGVmaW5lUHJvcGVydHkodGFyZ2V0Q29tcG9uZW50LCBrZXksIGRlc2NyaXB0b3IpO1xuICAgICAgICB9IGNhdGNoIChlKSB7fVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiB0YXJnZXRDb21wb25lbnQ7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gaG9pc3ROb25SZWFjdFN0YXRpY3M7XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///4146\n")},4265:(I,g,t)=>{"use strict";I.exports=t.p+"19f639343496e166a37e.png"},4417:module=>{"use strict";eval('\n\nmodule.exports = function (url, options) {\n if (!options) {\n // eslint-disable-next-line no-param-reassign\n options = {};\n } // eslint-disable-next-line no-underscore-dangle, no-param-reassign\n\n\n url = url && url.__esModule ? url.default : url;\n\n if (typeof url !== "string") {\n return url;\n } // If url is already wrapped in quotes, remove them\n\n\n if (/^[\'"].*[\'"]$/.test(url)) {\n // eslint-disable-next-line no-param-reassign\n url = url.slice(1, -1);\n }\n\n if (options.hash) {\n // eslint-disable-next-line no-param-reassign\n url += options.hash;\n } // Should url be wrapped?\n // See https://drafts.csswg.org/css-values-3/#urls\n\n\n if (/["\'() \\t\\n]/.test(url) || options.needQuotes) {\n return "\\"".concat(url.replace(/"/g, \'\\\\"\').replace(/\\n/g, "\\\\n"), "\\"");\n }\n\n return url;\n};//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNDQxNy5qcyIsIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL2l0Zy1uZXh0Z2VuLWZyb250ZW5kLy4vbm9kZV9tb2R1bGVzL2Nzcy1sb2FkZXIvZGlzdC9ydW50aW1lL2dldFVybC5qcz8xZGU1Il0sInNvdXJjZXNDb250ZW50IjpbIlwidXNlIHN0cmljdFwiO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uICh1cmwsIG9wdGlvbnMpIHtcbiAgaWYgKCFvcHRpb25zKSB7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXBhcmFtLXJlYXNzaWduXG4gICAgb3B0aW9ucyA9IHt9O1xuICB9IC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11bmRlcnNjb3JlLWRhbmdsZSwgbm8tcGFyYW0tcmVhc3NpZ25cblxuXG4gIHVybCA9IHVybCAmJiB1cmwuX19lc01vZHVsZSA/IHVybC5kZWZhdWx0IDogdXJsO1xuXG4gIGlmICh0eXBlb2YgdXJsICE9PSBcInN0cmluZ1wiKSB7XG4gICAgcmV0dXJuIHVybDtcbiAgfSAvLyBJZiB1cmwgaXMgYWxyZWFkeSB3cmFwcGVkIGluIHF1b3RlcywgcmVtb3ZlIHRoZW1cblxuXG4gIGlmICgvXlsnXCJdLipbJ1wiXSQvLnRlc3QodXJsKSkge1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1wYXJhbS1yZWFzc2lnblxuICAgIHVybCA9IHVybC5zbGljZSgxLCAtMSk7XG4gIH1cblxuICBpZiAob3B0aW9ucy5oYXNoKSB7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXBhcmFtLXJlYXNzaWduXG4gICAgdXJsICs9IG9wdGlvbnMuaGFzaDtcbiAgfSAvLyBTaG91bGQgdXJsIGJlIHdyYXBwZWQ/XG4gIC8vIFNlZSBodHRwczovL2RyYWZ0cy5jc3N3Zy5vcmcvY3NzLXZhbHVlcy0zLyN1cmxzXG5cblxuICBpZiAoL1tcIicoKSBcXHRcXG5dLy50ZXN0KHVybCkgfHwgb3B0aW9ucy5uZWVkUXVvdGVzKSB7XG4gICAgcmV0dXJuIFwiXFxcIlwiLmNvbmNhdCh1cmwucmVwbGFjZSgvXCIvZywgJ1xcXFxcIicpLnJlcGxhY2UoL1xcbi9nLCBcIlxcXFxuXCIpLCBcIlxcXCJcIik7XG4gIH1cblxuICByZXR1cm4gdXJsO1xufTsiXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///4417\n')},4522:(I,g,t)=>{"use strict";I.exports=t.p+"64918220967d8ddaf426.png"},4565:(I,g,t)=>{"use strict";I.exports=t.p+"3d0f0af9a84fc86da124.png"},5209:(I,g,t)=>{"use strict";I.exports=t.p+"02b192017637f8e379e0.png"},5449:module=>{"use strict";eval("\n\n/**\n * Update an Error with the specified config, error code, and response.\n *\n * @param {Error} error The error to update.\n * @param {Object} config The config.\n * @param {string} [code] The error code (for example, 'ECONNABORTED').\n * @param {Object} [request] The request.\n * @param {Object} [response] The response.\n * @returns {Error} The error.\n */\nmodule.exports = function enhanceError(error, config, code, request, response) {\n error.config = config;\n if (code) {\n error.code = code;\n }\n\n error.request = request;\n error.response = response;\n error.isAxiosError = true;\n\n error.toJSON = function toJSON() {\n return {\n // Standard\n message: this.message,\n name: this.name,\n // Microsoft\n description: this.description,\n number: this.number,\n // Mozilla\n fileName: this.fileName,\n lineNumber: this.lineNumber,\n columnNumber: this.columnNumber,\n stack: this.stack,\n // Axios\n config: this.config,\n code: this.code,\n status: this.response && this.response.status ? this.response.status : null\n };\n };\n return error;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNTQ0OS5qcyIsIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL2l0Zy1uZXh0Z2VuLWZyb250ZW5kLy4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9jb3JlL2VuaGFuY2VFcnJvci5qcz8zODdmIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxuLyoqXG4gKiBVcGRhdGUgYW4gRXJyb3Igd2l0aCB0aGUgc3BlY2lmaWVkIGNvbmZpZywgZXJyb3IgY29kZSwgYW5kIHJlc3BvbnNlLlxuICpcbiAqIEBwYXJhbSB7RXJyb3J9IGVycm9yIFRoZSBlcnJvciB0byB1cGRhdGUuXG4gKiBAcGFyYW0ge09iamVjdH0gY29uZmlnIFRoZSBjb25maWcuXG4gKiBAcGFyYW0ge3N0cmluZ30gW2NvZGVdIFRoZSBlcnJvciBjb2RlIChmb3IgZXhhbXBsZSwgJ0VDT05OQUJPUlRFRCcpLlxuICogQHBhcmFtIHtPYmplY3R9IFtyZXF1ZXN0XSBUaGUgcmVxdWVzdC5cbiAqIEBwYXJhbSB7T2JqZWN0fSBbcmVzcG9uc2VdIFRoZSByZXNwb25zZS5cbiAqIEByZXR1cm5zIHtFcnJvcn0gVGhlIGVycm9yLlxuICovXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGVuaGFuY2VFcnJvcihlcnJvciwgY29uZmlnLCBjb2RlLCByZXF1ZXN0LCByZXNwb25zZSkge1xuICBlcnJvci5jb25maWcgPSBjb25maWc7XG4gIGlmIChjb2RlKSB7XG4gICAgZXJyb3IuY29kZSA9IGNvZGU7XG4gIH1cblxuICBlcnJvci5yZXF1ZXN0ID0gcmVxdWVzdDtcbiAgZXJyb3IucmVzcG9uc2UgPSByZXNwb25zZTtcbiAgZXJyb3IuaXNBeGlvc0Vycm9yID0gdHJ1ZTtcblxuICBlcnJvci50b0pTT04gPSBmdW5jdGlvbiB0b0pTT04oKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIC8vIFN0YW5kYXJkXG4gICAgICBtZXNzYWdlOiB0aGlzLm1lc3NhZ2UsXG4gICAgICBuYW1lOiB0aGlzLm5hbWUsXG4gICAgICAvLyBNaWNyb3NvZnRcbiAgICAgIGRlc2NyaXB0aW9uOiB0aGlzLmRlc2NyaXB0aW9uLFxuICAgICAgbnVtYmVyOiB0aGlzLm51bWJlcixcbiAgICAgIC8vIE1vemlsbGFcbiAgICAgIGZpbGVOYW1lOiB0aGlzLmZpbGVOYW1lLFxuICAgICAgbGluZU51bWJlcjogdGhpcy5saW5lTnVtYmVyLFxuICAgICAgY29sdW1uTnVtYmVyOiB0aGlzLmNvbHVtbk51bWJlcixcbiAgICAgIHN0YWNrOiB0aGlzLnN0YWNrLFxuICAgICAgLy8gQXhpb3NcbiAgICAgIGNvbmZpZzogdGhpcy5jb25maWcsXG4gICAgICBjb2RlOiB0aGlzLmNvZGUsXG4gICAgICBzdGF0dXM6IHRoaXMucmVzcG9uc2UgJiYgdGhpcy5yZXNwb25zZS5zdGF0dXMgPyB0aGlzLnJlc3BvbnNlLnN0YXR1cyA6IG51bGxcbiAgICB9O1xuICB9O1xuICByZXR1cm4gZXJyb3I7XG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///5449\n")},5531:(I,g,t)=>{"use strict";I.exports=t.p+"90dc7c772b95808091f5.png"},5556:(module,__unused_webpack_exports,__webpack_require__)=>{eval("/**\n * Copyright (c) 2013-present, Facebook, Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\nif (false) { var throwOnDirectAccess, ReactIs; } else {\n // By explicitly using `prop-types` you are opting into new production behavior.\n // http://fb.me/prop-types-in-prod\n module.exports = __webpack_require__(2694)();\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNTU1Ni5qcyIsIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBUUE7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9pdGctbmV4dGdlbi1mcm9udGVuZC8uL25vZGVfbW9kdWxlcy9wcm9wLXR5cGVzL2luZGV4LmpzP2Q3YmMiXSwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBDb3B5cmlnaHQgKGMpIDIwMTMtcHJlc2VudCwgRmFjZWJvb2ssIEluYy5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS5cbiAqL1xuXG5pZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICB2YXIgUmVhY3RJcyA9IHJlcXVpcmUoJ3JlYWN0LWlzJyk7XG5cbiAgLy8gQnkgZXhwbGljaXRseSB1c2luZyBgcHJvcC10eXBlc2AgeW91IGFyZSBvcHRpbmcgaW50byBuZXcgZGV2ZWxvcG1lbnQgYmVoYXZpb3IuXG4gIC8vIGh0dHA6Ly9mYi5tZS9wcm9wLXR5cGVzLWluLXByb2RcbiAgdmFyIHRocm93T25EaXJlY3RBY2Nlc3MgPSB0cnVlO1xuICBtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoJy4vZmFjdG9yeVdpdGhUeXBlQ2hlY2tlcnMnKShSZWFjdElzLmlzRWxlbWVudCwgdGhyb3dPbkRpcmVjdEFjY2Vzcyk7XG59IGVsc2Uge1xuICAvLyBCeSBleHBsaWNpdGx5IHVzaW5nIGBwcm9wLXR5cGVzYCB5b3UgYXJlIG9wdGluZyBpbnRvIG5ldyBwcm9kdWN0aW9uIGJlaGF2aW9yLlxuICAvLyBodHRwOi8vZmIubWUvcHJvcC10eXBlcy1pbi1wcm9kXG4gIG1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi9mYWN0b3J5V2l0aFRocm93aW5nU2hpbXMnKSgpO1xufVxuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///5556\n")},5784:function(__unused_webpack_module,__unused_webpack_exports,__webpack_require__){eval("//! moment.js locale configuration\n//! locale : Slovak [sk]\n//! author : Martin Minka : https://github.com/k2s\n//! based on work of petrbela : https://github.com/petrbela\n\n;(function (global, factory) {\n true ? factory(__webpack_require__(95093)) :\n 0\n}(this, (function (moment) { 'use strict';\n\n //! moment.js locale configuration\n\n var months =\n 'január_február_marec_apríl_máj_jún_júl_august_september_október_november_december'.split(\n '_'\n ),\n monthsShort = 'jan_feb_mar_apr_máj_jún_júl_aug_sep_okt_nov_dec'.split('_');\n function plural(n) {\n return n > 1 && n < 5;\n }\n function translate(number, withoutSuffix, key, isFuture) {\n var result = number + ' ';\n switch (key) {\n case 's': // a few seconds / in a few seconds / a few seconds ago\n return withoutSuffix || isFuture ? 'pár sekúnd' : 'pár sekundami';\n case 'ss': // 9 seconds / in 9 seconds / 9 seconds ago\n if (withoutSuffix || isFuture) {\n return result + (plural(number) ? 'sekundy' : 'sekúnd');\n } else {\n return result + 'sekundami';\n }\n case 'm': // a minute / in a minute / a minute ago\n return withoutSuffix ? 'minúta' : isFuture ? 'minútu' : 'minútou';\n case 'mm': // 9 minutes / in 9 minutes / 9 minutes ago\n if (withoutSuffix || isFuture) {\n return result + (plural(number) ? 'minúty' : 'minút');\n } else {\n return result + 'minútami';\n }\n case 'h': // an hour / in an hour / an hour ago\n return withoutSuffix ? 'hodina' : isFuture ? 'hodinu' : 'hodinou';\n case 'hh': // 9 hours / in 9 hours / 9 hours ago\n if (withoutSuffix || isFuture) {\n return result + (plural(number) ? 'hodiny' : 'hodín');\n } else {\n return result + 'hodinami';\n }\n case 'd': // a day / in a day / a day ago\n return withoutSuffix || isFuture ? 'deň' : 'dňom';\n case 'dd': // 9 days / in 9 days / 9 days ago\n if (withoutSuffix || isFuture) {\n return result + (plural(number) ? 'dni' : 'dní');\n } else {\n return result + 'dňami';\n }\n case 'M': // a month / in a month / a month ago\n return withoutSuffix || isFuture ? 'mesiac' : 'mesiacom';\n case 'MM': // 9 months / in 9 months / 9 months ago\n if (withoutSuffix || isFuture) {\n return result + (plural(number) ? 'mesiace' : 'mesiacov');\n } else {\n return result + 'mesiacmi';\n }\n case 'y': // a year / in a year / a year ago\n return withoutSuffix || isFuture ? 'rok' : 'rokom';\n case 'yy': // 9 years / in 9 years / 9 years ago\n if (withoutSuffix || isFuture) {\n return result + (plural(number) ? 'roky' : 'rokov');\n } else {\n return result + 'rokmi';\n }\n }\n }\n\n var sk = moment.defineLocale('sk', {\n months: months,\n monthsShort: monthsShort,\n weekdays: 'nedeľa_pondelok_utorok_streda_štvrtok_piatok_sobota'.split('_'),\n weekdaysShort: 'ne_po_ut_st_št_pi_so'.split('_'),\n weekdaysMin: 'ne_po_ut_st_št_pi_so'.split('_'),\n longDateFormat: {\n LT: 'H:mm',\n LTS: 'H:mm:ss',\n L: 'DD.MM.YYYY',\n LL: 'D. MMMM YYYY',\n LLL: 'D. MMMM YYYY H:mm',\n LLLL: 'dddd D. MMMM YYYY H:mm',\n },\n calendar: {\n sameDay: '[dnes o] LT',\n nextDay: '[zajtra o] LT',\n nextWeek: function () {\n switch (this.day()) {\n case 0:\n return '[v nedeľu o] LT';\n case 1:\n case 2:\n return '[v] dddd [o] LT';\n case 3:\n return '[v stredu o] LT';\n case 4:\n return '[vo štvrtok o] LT';\n case 5:\n return '[v piatok o] LT';\n case 6:\n return '[v sobotu o] LT';\n }\n },\n lastDay: '[včera o] LT',\n lastWeek: function () {\n switch (this.day()) {\n case 0:\n return '[minulú nedeľu o] LT';\n case 1:\n case 2:\n return '[minulý] dddd [o] LT';\n case 3:\n return '[minulú stredu o] LT';\n case 4:\n case 5:\n return '[minulý] dddd [o] LT';\n case 6:\n return '[minulú sobotu o] LT';\n }\n },\n sameElse: 'L',\n },\n relativeTime: {\n future: 'za %s',\n past: 'pred %s',\n s: translate,\n ss: translate,\n m: translate,\n mm: translate,\n h: translate,\n hh: translate,\n d: translate,\n dd: translate,\n M: translate,\n MM: translate,\n y: translate,\n yy: translate,\n },\n dayOfMonthOrdinalParse: /\\d{1,2}\\./,\n ordinal: '%d.',\n week: {\n dow: 1, // Monday is the first day of the week.\n doy: 4, // The week that contains Jan 4th is the first week of the year.\n },\n });\n\n return sk;\n\n})));\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNTc4NC5qcyIsIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL2l0Zy1uZXh0Z2VuLWZyb250ZW5kLy4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvc2suanM/N2JlNiJdLCJzb3VyY2VzQ29udGVudCI6WyIvLyEgbW9tZW50LmpzIGxvY2FsZSBjb25maWd1cmF0aW9uXG4vLyEgbG9jYWxlIDogU2xvdmFrIFtza11cbi8vISBhdXRob3IgOiBNYXJ0aW4gTWlua2EgOiBodHRwczovL2dpdGh1Yi5jb20vazJzXG4vLyEgYmFzZWQgb24gd29yayBvZiBwZXRyYmVsYSA6IGh0dHBzOi8vZ2l0aHViLmNvbS9wZXRyYmVsYVxuXG47KGZ1bmN0aW9uIChnbG9iYWwsIGZhY3RvcnkpIHtcbiAgIHR5cGVvZiBleHBvcnRzID09PSAnb2JqZWN0JyAmJiB0eXBlb2YgbW9kdWxlICE9PSAndW5kZWZpbmVkJ1xuICAgICAgICYmIHR5cGVvZiByZXF1aXJlID09PSAnZnVuY3Rpb24nID8gZmFjdG9yeShyZXF1aXJlKCcuLi9tb21lbnQnKSkgOlxuICAgdHlwZW9mIGRlZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiBkZWZpbmUuYW1kID8gZGVmaW5lKFsnLi4vbW9tZW50J10sIGZhY3RvcnkpIDpcbiAgIGZhY3RvcnkoZ2xvYmFsLm1vbWVudClcbn0odGhpcywgKGZ1bmN0aW9uIChtb21lbnQpIHsgJ3VzZSBzdHJpY3QnO1xuXG4gICAgLy8hIG1vbWVudC5qcyBsb2NhbGUgY29uZmlndXJhdGlvblxuXG4gICAgdmFyIG1vbnRocyA9XG4gICAgICAgICAgICAnamFudcOhcl9mZWJydcOhcl9tYXJlY19hcHLDrWxfbcOhal9qw7puX2rDumxfYXVndXN0X3NlcHRlbWJlcl9va3TDs2Jlcl9ub3ZlbWJlcl9kZWNlbWJlcicuc3BsaXQoXG4gICAgICAgICAgICAgICAgJ18nXG4gICAgICAgICAgICApLFxuICAgICAgICBtb250aHNTaG9ydCA9ICdqYW5fZmViX21hcl9hcHJfbcOhal9qw7puX2rDumxfYXVnX3NlcF9va3Rfbm92X2RlYycuc3BsaXQoJ18nKTtcbiAgICBmdW5jdGlvbiBwbHVyYWwobikge1xuICAgICAgICByZXR1cm4gbiA+IDEgJiYgbiA8IDU7XG4gICAgfVxuICAgIGZ1bmN0aW9uIHRyYW5zbGF0ZShudW1iZXIsIHdpdGhvdXRTdWZmaXgsIGtleSwgaXNGdXR1cmUpIHtcbiAgICAgICAgdmFyIHJlc3VsdCA9IG51bWJlciArICcgJztcbiAgICAgICAgc3dpdGNoIChrZXkpIHtcbiAgICAgICAgICAgIGNhc2UgJ3MnOiAvLyBhIGZldyBzZWNvbmRzIC8gaW4gYSBmZXcgc2Vjb25kcyAvIGEgZmV3IHNlY29uZHMgYWdvXG4gICAgICAgICAgICAgICAgcmV0dXJuIHdpdGhvdXRTdWZmaXggfHwgaXNGdXR1cmUgPyAncMOhciBzZWvDum5kJyA6ICdww6FyIHNla3VuZGFtaSc7XG4gICAgICAgICAgICBjYXNlICdzcyc6IC8vIDkgc2Vjb25kcyAvIGluIDkgc2Vjb25kcyAvIDkgc2Vjb25kcyBhZ29cbiAgICAgICAgICAgICAgICBpZiAod2l0aG91dFN1ZmZpeCB8fCBpc0Z1dHVyZSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0ICsgKHBsdXJhbChudW1iZXIpID8gJ3Nla3VuZHknIDogJ3Nla8O6bmQnKTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0ICsgJ3Nla3VuZGFtaSc7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2FzZSAnbSc6IC8vIGEgbWludXRlIC8gaW4gYSBtaW51dGUgLyBhIG1pbnV0ZSBhZ29cbiAgICAgICAgICAgICAgICByZXR1cm4gd2l0aG91dFN1ZmZpeCA/ICdtaW7DunRhJyA6IGlzRnV0dXJlID8gJ21pbsO6dHUnIDogJ21pbsO6dG91JztcbiAgICAgICAgICAgIGNhc2UgJ21tJzogLy8gOSBtaW51dGVzIC8gaW4gOSBtaW51dGVzIC8gOSBtaW51dGVzIGFnb1xuICAgICAgICAgICAgICAgIGlmICh3aXRob3V0U3VmZml4IHx8IGlzRnV0dXJlKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQgKyAocGx1cmFsKG51bWJlcikgPyAnbWluw7p0eScgOiAnbWluw7p0Jyk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdCArICdtaW7DunRhbWknO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhc2UgJ2gnOiAvLyBhbiBob3VyIC8gaW4gYW4gaG91ciAvIGFuIGhvdXIgYWdvXG4gICAgICAgICAgICAgICAgcmV0dXJuIHdpdGhvdXRTdWZmaXggPyAnaG9kaW5hJyA6IGlzRnV0dXJlID8gJ2hvZGludScgOiAnaG9kaW5vdSc7XG4gICAgICAgICAgICBjYXNlICdoaCc6IC8vIDkgaG91cnMgLyBpbiA5IGhvdXJzIC8gOSBob3VycyBhZ29cbiAgICAgICAgICAgICAgICBpZiAod2l0aG91dFN1ZmZpeCB8fCBpc0Z1dHVyZSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0ICsgKHBsdXJhbChudW1iZXIpID8gJ2hvZGlueScgOiAnaG9kw61uJyk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdCArICdob2RpbmFtaSc7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2FzZSAnZCc6IC8vIGEgZGF5IC8gaW4gYSBkYXkgLyBhIGRheSBhZ29cbiAgICAgICAgICAgICAgICByZXR1cm4gd2l0aG91dFN1ZmZpeCB8fCBpc0Z1dHVyZSA/ICdkZcWIJyA6ICdkxYhvbSc7XG4gICAgICAgICAgICBjYXNlICdkZCc6IC8vIDkgZGF5cyAvIGluIDkgZGF5cyAvIDkgZGF5cyBhZ29cbiAgICAgICAgICAgICAgICBpZiAod2l0aG91dFN1ZmZpeCB8fCBpc0Z1dHVyZSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0ICsgKHBsdXJhbChudW1iZXIpID8gJ2RuaScgOiAnZG7DrScpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQgKyAnZMWIYW1pJztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXNlICdNJzogLy8gYSBtb250aCAvIGluIGEgbW9udGggLyBhIG1vbnRoIGFnb1xuICAgICAgICAgICAgICAgIHJldHVybiB3aXRob3V0U3VmZml4IHx8IGlzRnV0dXJlID8gJ21lc2lhYycgOiAnbWVzaWFjb20nO1xuICAgICAgICAgICAgY2FzZSAnTU0nOiAvLyA5IG1vbnRocyAvIGluIDkgbW9udGhzIC8gOSBtb250aHMgYWdvXG4gICAgICAgICAgICAgICAgaWYgKHdpdGhvdXRTdWZmaXggfHwgaXNGdXR1cmUpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdCArIChwbHVyYWwobnVtYmVyKSA/ICdtZXNpYWNlJyA6ICdtZXNpYWNvdicpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQgKyAnbWVzaWFjbWknO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhc2UgJ3knOiAvLyBhIHllYXIgLyBpbiBhIHllYXIgLyBhIHllYXIgYWdvXG4gICAgICAgICAgICAgICAgcmV0dXJuIHdpdGhvdXRTdWZmaXggfHwgaXNGdXR1cmUgPyAncm9rJyA6ICdyb2tvbSc7XG4gICAgICAgICAgICBjYXNlICd5eSc6IC8vIDkgeWVhcnMgLyBpbiA5IHllYXJzIC8gOSB5ZWFycyBhZ29cbiAgICAgICAgICAgICAgICBpZiAod2l0aG91dFN1ZmZpeCB8fCBpc0Z1dHVyZSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0ICsgKHBsdXJhbChudW1iZXIpID8gJ3Jva3knIDogJ3Jva292Jyk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdCArICdyb2ttaSc7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgdmFyIHNrID0gbW9tZW50LmRlZmluZUxvY2FsZSgnc2snLCB7XG4gICAgICAgIG1vbnRoczogbW9udGhzLFxuICAgICAgICBtb250aHNTaG9ydDogbW9udGhzU2hvcnQsXG4gICAgICAgIHdlZWtkYXlzOiAnbmVkZcS+YV9wb25kZWxva191dG9yb2tfc3RyZWRhX8WhdHZydG9rX3BpYXRva19zb2JvdGEnLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzU2hvcnQ6ICduZV9wb191dF9zdF/FoXRfcGlfc28nLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzTWluOiAnbmVfcG9fdXRfc3RfxaF0X3BpX3NvJy5zcGxpdCgnXycpLFxuICAgICAgICBsb25nRGF0ZUZvcm1hdDoge1xuICAgICAgICAgICAgTFQ6ICdIOm1tJyxcbiAgICAgICAgICAgIExUUzogJ0g6bW06c3MnLFxuICAgICAgICAgICAgTDogJ0RELk1NLllZWVknLFxuICAgICAgICAgICAgTEw6ICdELiBNTU1NIFlZWVknLFxuICAgICAgICAgICAgTExMOiAnRC4gTU1NTSBZWVlZIEg6bW0nLFxuICAgICAgICAgICAgTExMTDogJ2RkZGQgRC4gTU1NTSBZWVlZIEg6bW0nLFxuICAgICAgICB9LFxuICAgICAgICBjYWxlbmRhcjoge1xuICAgICAgICAgICAgc2FtZURheTogJ1tkbmVzIG9dIExUJyxcbiAgICAgICAgICAgIG5leHREYXk6ICdbemFqdHJhIG9dIExUJyxcbiAgICAgICAgICAgIG5leHRXZWVrOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgc3dpdGNoICh0aGlzLmRheSgpKSB7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgMDpcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAnW3YgbmVkZcS+dSBvXSBMVCc7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgMTpcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAyOlxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICdbdl0gZGRkZCBbb10gTFQnO1xuICAgICAgICAgICAgICAgICAgICBjYXNlIDM6XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gJ1t2IHN0cmVkdSBvXSBMVCc7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgNDpcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAnW3ZvIMWhdHZydG9rIG9dIExUJztcbiAgICAgICAgICAgICAgICAgICAgY2FzZSA1OlxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICdbdiBwaWF0b2sgb10gTFQnO1xuICAgICAgICAgICAgICAgICAgICBjYXNlIDY6XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gJ1t2IHNvYm90dSBvXSBMVCc7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGxhc3REYXk6ICdbdsSNZXJhIG9dIExUJyxcbiAgICAgICAgICAgIGxhc3RXZWVrOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgc3dpdGNoICh0aGlzLmRheSgpKSB7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgMDpcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAnW21pbnVsw7ogbmVkZcS+dSBvXSBMVCc7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgMTpcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAyOlxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICdbbWludWzDvV0gZGRkZCBbb10gTFQnO1xuICAgICAgICAgICAgICAgICAgICBjYXNlIDM6XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gJ1ttaW51bMO6IHN0cmVkdSBvXSBMVCc7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgNDpcbiAgICAgICAgICAgICAgICAgICAgY2FzZSA1OlxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICdbbWludWzDvV0gZGRkZCBbb10gTFQnO1xuICAgICAgICAgICAgICAgICAgICBjYXNlIDY6XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gJ1ttaW51bMO6IHNvYm90dSBvXSBMVCc7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHNhbWVFbHNlOiAnTCcsXG4gICAgICAgIH0sXG4gICAgICAgIHJlbGF0aXZlVGltZToge1xuICAgICAgICAgICAgZnV0dXJlOiAnemEgJXMnLFxuICAgICAgICAgICAgcGFzdDogJ3ByZWQgJXMnLFxuICAgICAgICAgICAgczogdHJhbnNsYXRlLFxuICAgICAgICAgICAgc3M6IHRyYW5zbGF0ZSxcbiAgICAgICAgICAgIG06IHRyYW5zbGF0ZSxcbiAgICAgICAgICAgIG1tOiB0cmFuc2xhdGUsXG4gICAgICAgICAgICBoOiB0cmFuc2xhdGUsXG4gICAgICAgICAgICBoaDogdHJhbnNsYXRlLFxuICAgICAgICAgICAgZDogdHJhbnNsYXRlLFxuICAgICAgICAgICAgZGQ6IHRyYW5zbGF0ZSxcbiAgICAgICAgICAgIE06IHRyYW5zbGF0ZSxcbiAgICAgICAgICAgIE1NOiB0cmFuc2xhdGUsXG4gICAgICAgICAgICB5OiB0cmFuc2xhdGUsXG4gICAgICAgICAgICB5eTogdHJhbnNsYXRlLFxuICAgICAgICB9LFxuICAgICAgICBkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOiAvXFxkezEsMn1cXC4vLFxuICAgICAgICBvcmRpbmFsOiAnJWQuJyxcbiAgICAgICAgd2Vlazoge1xuICAgICAgICAgICAgZG93OiAxLCAvLyBNb25kYXkgaXMgdGhlIGZpcnN0IGRheSBvZiB0aGUgd2Vlay5cbiAgICAgICAgICAgIGRveTogNCwgLy8gVGhlIHdlZWsgdGhhdCBjb250YWlucyBKYW4gNHRoIGlzIHRoZSBmaXJzdCB3ZWVrIG9mIHRoZSB5ZWFyLlxuICAgICAgICB9LFxuICAgIH0pO1xuXG4gICAgcmV0dXJuIHNrO1xuXG59KSkpO1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///5784\n")},6062:(I,g,t)=>{"use strict";I.exports=t.p+"7baba4ad51af0ec74705.png"},6181:function(__unused_webpack_module,__unused_webpack_exports,__webpack_require__){eval("//! moment.js locale configuration\n//! locale : Northern Kurdish [ku-kmr]\n//! authors : Mazlum Özdogan : https://github.com/mergehez\n\n;(function (global, factory) {\n true ? factory(__webpack_require__(95093)) :\n 0\n}(this, (function (moment) { 'use strict';\n\n //! moment.js locale configuration\n\n function processRelativeTime(num, withoutSuffix, key, isFuture) {\n var format = {\n s: ['çend sanîye', 'çend sanîyeyan'],\n ss: [num + ' sanîye', num + ' sanîyeyan'],\n m: ['deqîqeyek', 'deqîqeyekê'],\n mm: [num + ' deqîqe', num + ' deqîqeyan'],\n h: ['saetek', 'saetekê'],\n hh: [num + ' saet', num + ' saetan'],\n d: ['rojek', 'rojekê'],\n dd: [num + ' roj', num + ' rojan'],\n w: ['hefteyek', 'hefteyekê'],\n ww: [num + ' hefte', num + ' hefteyan'],\n M: ['mehek', 'mehekê'],\n MM: [num + ' meh', num + ' mehan'],\n y: ['salek', 'salekê'],\n yy: [num + ' sal', num + ' salan'],\n };\n return withoutSuffix ? format[key][0] : format[key][1];\n }\n // function obliqueNumSuffix(num) {\n // if(num.includes(':'))\n // num = parseInt(num.split(':')[0]);\n // else\n // num = parseInt(num);\n // return num == 0 || num % 10 == 1 ? 'ê'\n // : (num > 10 && num % 10 == 0 ? 'î' : 'an');\n // }\n function ezafeNumSuffix(num) {\n num = '' + num;\n var l = num.substring(num.length - 1),\n ll = num.length > 1 ? num.substring(num.length - 2) : '';\n if (\n !(ll == 12 || ll == 13) &&\n (l == '2' || l == '3' || ll == '50' || l == '70' || l == '80')\n )\n return 'yê';\n return 'ê';\n }\n\n var kuKmr = moment.defineLocale('ku-kmr', {\n // According to the spelling rules defined by the work group of Weqfa Mezopotamyayê (Mesopotamia Foundation)\n // this should be: 'Kanûna Paşîn_Sibat_Adar_Nîsan_Gulan_Hezîran_Tîrmeh_Tebax_Îlon_Çirîya Pêşîn_Çirîya Paşîn_Kanûna Pêşîn'\n // But the names below are more well known and handy\n months: 'Rêbendan_Sibat_Adar_Nîsan_Gulan_Hezîran_Tîrmeh_Tebax_Îlon_Cotmeh_Mijdar_Berfanbar'.split(\n '_'\n ),\n monthsShort: 'Rêb_Sib_Ada_Nîs_Gul_Hez_Tîr_Teb_Îlo_Cot_Mij_Ber'.split('_'),\n monthsParseExact: true,\n weekdays: 'Yekşem_Duşem_Sêşem_Çarşem_Pêncşem_În_Şemî'.split('_'),\n weekdaysShort: 'Yek_Du_Sê_Çar_Pên_În_Şem'.split('_'),\n weekdaysMin: 'Ye_Du_Sê_Ça_Pê_În_Şe'.split('_'),\n meridiem: function (hours, minutes, isLower) {\n if (hours < 12) {\n return isLower ? 'bn' : 'BN';\n } else {\n return isLower ? 'pn' : 'PN';\n }\n },\n meridiemParse: /bn|BN|pn|PN/,\n longDateFormat: {\n LT: 'HH:mm',\n LTS: 'HH:mm:ss',\n L: 'DD.MM.YYYY',\n LL: 'Do MMMM[a] YYYY[an]',\n LLL: 'Do MMMM[a] YYYY[an] HH:mm',\n LLLL: 'dddd, Do MMMM[a] YYYY[an] HH:mm',\n ll: 'Do MMM[.] YYYY[an]',\n lll: 'Do MMM[.] YYYY[an] HH:mm',\n llll: 'ddd[.], Do MMM[.] YYYY[an] HH:mm',\n },\n calendar: {\n sameDay: '[Îro di saet] LT [de]',\n nextDay: '[Sibê di saet] LT [de]',\n nextWeek: 'dddd [di saet] LT [de]',\n lastDay: '[Duh di saet] LT [de]',\n lastWeek: 'dddd[a borî di saet] LT [de]',\n sameElse: 'L',\n },\n relativeTime: {\n future: 'di %s de',\n past: 'berî %s',\n s: processRelativeTime,\n ss: processRelativeTime,\n m: processRelativeTime,\n mm: processRelativeTime,\n h: processRelativeTime,\n hh: processRelativeTime,\n d: processRelativeTime,\n dd: processRelativeTime,\n w: processRelativeTime,\n ww: processRelativeTime,\n M: processRelativeTime,\n MM: processRelativeTime,\n y: processRelativeTime,\n yy: processRelativeTime,\n },\n dayOfMonthOrdinalParse: /\\d{1,2}(?:yê|ê|\\.)/,\n ordinal: function (num, period) {\n var p = period.toLowerCase();\n if (p.includes('w') || p.includes('m')) return num + '.';\n\n return num + ezafeNumSuffix(num);\n },\n week: {\n dow: 1, // Monday is the first day of the week.\n doy: 4, // The week that contains Jan 4th is the first week of the year.\n },\n });\n\n return kuKmr;\n\n})));\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNjE4MS5qcyIsIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9pdGctbmV4dGdlbi1mcm9udGVuZC8uL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL2t1LWttci5qcz83NTU4Il0sInNvdXJjZXNDb250ZW50IjpbIi8vISBtb21lbnQuanMgbG9jYWxlIGNvbmZpZ3VyYXRpb25cbi8vISBsb2NhbGUgOiBOb3J0aGVybiBLdXJkaXNoIFtrdS1rbXJdXG4vLyEgYXV0aG9ycyA6IE1hemx1bSDDlnpkb2dhbiA6IGh0dHBzOi8vZ2l0aHViLmNvbS9tZXJnZWhlelxuXG47KGZ1bmN0aW9uIChnbG9iYWwsIGZhY3RvcnkpIHtcbiAgIHR5cGVvZiBleHBvcnRzID09PSAnb2JqZWN0JyAmJiB0eXBlb2YgbW9kdWxlICE9PSAndW5kZWZpbmVkJ1xuICAgICAgICYmIHR5cGVvZiByZXF1aXJlID09PSAnZnVuY3Rpb24nID8gZmFjdG9yeShyZXF1aXJlKCcuLi9tb21lbnQnKSkgOlxuICAgdHlwZW9mIGRlZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiBkZWZpbmUuYW1kID8gZGVmaW5lKFsnLi4vbW9tZW50J10sIGZhY3RvcnkpIDpcbiAgIGZhY3RvcnkoZ2xvYmFsLm1vbWVudClcbn0odGhpcywgKGZ1bmN0aW9uIChtb21lbnQpIHsgJ3VzZSBzdHJpY3QnO1xuXG4gICAgLy8hIG1vbWVudC5qcyBsb2NhbGUgY29uZmlndXJhdGlvblxuXG4gICAgZnVuY3Rpb24gcHJvY2Vzc1JlbGF0aXZlVGltZShudW0sIHdpdGhvdXRTdWZmaXgsIGtleSwgaXNGdXR1cmUpIHtcbiAgICAgICAgdmFyIGZvcm1hdCA9IHtcbiAgICAgICAgICAgIHM6IFsnw6dlbmQgc2Fuw655ZScsICfDp2VuZCBzYW7DrnlleWFuJ10sXG4gICAgICAgICAgICBzczogW251bSArICcgc2Fuw655ZScsIG51bSArICcgc2Fuw655ZXlhbiddLFxuICAgICAgICAgICAgbTogWydkZXHDrnFleWVrJywgJ2RlccOucWV5ZWvDqiddLFxuICAgICAgICAgICAgbW06IFtudW0gKyAnIGRlccOucWUnLCBudW0gKyAnIGRlccOucWV5YW4nXSxcbiAgICAgICAgICAgIGg6IFsnc2FldGVrJywgJ3NhZXRla8OqJ10sXG4gICAgICAgICAgICBoaDogW251bSArICcgc2FldCcsIG51bSArICcgc2FldGFuJ10sXG4gICAgICAgICAgICBkOiBbJ3JvamVrJywgJ3JvamVrw6onXSxcbiAgICAgICAgICAgIGRkOiBbbnVtICsgJyByb2onLCBudW0gKyAnIHJvamFuJ10sXG4gICAgICAgICAgICB3OiBbJ2hlZnRleWVrJywgJ2hlZnRleWVrw6onXSxcbiAgICAgICAgICAgIHd3OiBbbnVtICsgJyBoZWZ0ZScsIG51bSArICcgaGVmdGV5YW4nXSxcbiAgICAgICAgICAgIE06IFsnbWVoZWsnLCAnbWVoZWvDqiddLFxuICAgICAgICAgICAgTU06IFtudW0gKyAnIG1laCcsIG51bSArICcgbWVoYW4nXSxcbiAgICAgICAgICAgIHk6IFsnc2FsZWsnLCAnc2FsZWvDqiddLFxuICAgICAgICAgICAgeXk6IFtudW0gKyAnIHNhbCcsIG51bSArICcgc2FsYW4nXSxcbiAgICAgICAgfTtcbiAgICAgICAgcmV0dXJuIHdpdGhvdXRTdWZmaXggPyBmb3JtYXRba2V5XVswXSA6IGZvcm1hdFtrZXldWzFdO1xuICAgIH1cbiAgICAvLyBmdW5jdGlvbiBvYmxpcXVlTnVtU3VmZml4KG51bSkge1xuICAgIC8vICAgICBpZihudW0uaW5jbHVkZXMoJzonKSlcbiAgICAvLyAgICAgICAgIG51bSA9IHBhcnNlSW50KG51bS5zcGxpdCgnOicpWzBdKTtcbiAgICAvLyAgICAgZWxzZVxuICAgIC8vICAgICAgICAgbnVtID0gcGFyc2VJbnQobnVtKTtcbiAgICAvLyAgICAgcmV0dXJuIG51bSA9PSAwIHx8IG51bSAlIDEwID09IDEgPyAnw6onXG4gICAgLy8gICAgICAgICAgICAgICAgICAgICAgICAgOiAobnVtID4gMTAgJiYgbnVtICUgMTAgPT0gMCA/ICfDricgOiAnYW4nKTtcbiAgICAvLyB9XG4gICAgZnVuY3Rpb24gZXphZmVOdW1TdWZmaXgobnVtKSB7XG4gICAgICAgIG51bSA9ICcnICsgbnVtO1xuICAgICAgICB2YXIgbCA9IG51bS5zdWJzdHJpbmcobnVtLmxlbmd0aCAtIDEpLFxuICAgICAgICAgICAgbGwgPSBudW0ubGVuZ3RoID4gMSA/IG51bS5zdWJzdHJpbmcobnVtLmxlbmd0aCAtIDIpIDogJyc7XG4gICAgICAgIGlmIChcbiAgICAgICAgICAgICEobGwgPT0gMTIgfHwgbGwgPT0gMTMpICYmXG4gICAgICAgICAgICAobCA9PSAnMicgfHwgbCA9PSAnMycgfHwgbGwgPT0gJzUwJyB8fCBsID09ICc3MCcgfHwgbCA9PSAnODAnKVxuICAgICAgICApXG4gICAgICAgICAgICByZXR1cm4gJ3nDqic7XG4gICAgICAgIHJldHVybiAnw6onO1xuICAgIH1cblxuICAgIHZhciBrdUttciA9IG1vbWVudC5kZWZpbmVMb2NhbGUoJ2t1LWttcicsIHtcbiAgICAgICAgLy8gQWNjb3JkaW5nIHRvIHRoZSBzcGVsbGluZyBydWxlcyBkZWZpbmVkIGJ5IHRoZSB3b3JrIGdyb3VwIG9mIFdlcWZhIE1lem9wb3RhbXlhecOqIChNZXNvcG90YW1pYSBGb3VuZGF0aW9uKVxuICAgICAgICAvLyB0aGlzIHNob3VsZCBiZTogJ0thbsO7bmEgUGHFn8Oubl9TaWJhdF9BZGFyX07DrnNhbl9HdWxhbl9IZXrDrnJhbl9Uw65ybWVoX1RlYmF4X8OObG9uX8OHaXLDrnlhIFDDqsWfw65uX8OHaXLDrnlhIFBhxZ/Drm5fS2Fuw7tuYSBQw6rFn8OubidcbiAgICAgICAgLy8gQnV0IHRoZSBuYW1lcyBiZWxvdyBhcmUgbW9yZSB3ZWxsIGtub3duIGFuZCBoYW5keVxuICAgICAgICBtb250aHM6ICdSw6piZW5kYW5fU2liYXRfQWRhcl9Ow65zYW5fR3VsYW5fSGV6w65yYW5fVMOucm1laF9UZWJheF/Djmxvbl9Db3RtZWhfTWlqZGFyX0JlcmZhbmJhcicuc3BsaXQoXG4gICAgICAgICAgICAnXydcbiAgICAgICAgKSxcbiAgICAgICAgbW9udGhzU2hvcnQ6ICdSw6piX1NpYl9BZGFfTsOuc19HdWxfSGV6X1TDrnJfVGViX8OObG9fQ290X01pal9CZXInLnNwbGl0KCdfJyksXG4gICAgICAgIG1vbnRoc1BhcnNlRXhhY3Q6IHRydWUsXG4gICAgICAgIHdlZWtkYXlzOiAnWWVrxZ9lbV9EdcWfZW1fU8OqxZ9lbV/Dh2FyxZ9lbV9Qw6puY8WfZW1fw45uX8WeZW3Dricuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXNTaG9ydDogJ1lla19EdV9Tw6pfw4dhcl9Qw6puX8OObl/FnmVtJy5zcGxpdCgnXycpLFxuICAgICAgICB3ZWVrZGF5c01pbjogJ1llX0R1X1PDql/Dh2FfUMOqX8OObl/FnmUnLnNwbGl0KCdfJyksXG4gICAgICAgIG1lcmlkaWVtOiBmdW5jdGlvbiAoaG91cnMsIG1pbnV0ZXMsIGlzTG93ZXIpIHtcbiAgICAgICAgICAgIGlmIChob3VycyA8IDEyKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGlzTG93ZXIgPyAnYm4nIDogJ0JOJztcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGlzTG93ZXIgPyAncG4nIDogJ1BOJztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgbWVyaWRpZW1QYXJzZTogL2JufEJOfHBufFBOLyxcbiAgICAgICAgbG9uZ0RhdGVGb3JtYXQ6IHtcbiAgICAgICAgICAgIExUOiAnSEg6bW0nLFxuICAgICAgICAgICAgTFRTOiAnSEg6bW06c3MnLFxuICAgICAgICAgICAgTDogJ0RELk1NLllZWVknLFxuICAgICAgICAgICAgTEw6ICdEbyBNTU1NW2FdIFlZWVlbYW5dJyxcbiAgICAgICAgICAgIExMTDogJ0RvIE1NTU1bYV0gWVlZWVthbl0gSEg6bW0nLFxuICAgICAgICAgICAgTExMTDogJ2RkZGQsIERvIE1NTU1bYV0gWVlZWVthbl0gSEg6bW0nLFxuICAgICAgICAgICAgbGw6ICdEbyBNTU1bLl0gWVlZWVthbl0nLFxuICAgICAgICAgICAgbGxsOiAnRG8gTU1NWy5dIFlZWVlbYW5dIEhIOm1tJyxcbiAgICAgICAgICAgIGxsbGw6ICdkZGRbLl0sIERvIE1NTVsuXSBZWVlZW2FuXSBISDptbScsXG4gICAgICAgIH0sXG4gICAgICAgIGNhbGVuZGFyOiB7XG4gICAgICAgICAgICBzYW1lRGF5OiAnW8OOcm8gZGkgc2FldF0gTFQgW2RlXScsXG4gICAgICAgICAgICBuZXh0RGF5OiAnW1NpYsOqIGRpIHNhZXRdIExUIFtkZV0nLFxuICAgICAgICAgICAgbmV4dFdlZWs6ICdkZGRkIFtkaSBzYWV0XSBMVCBbZGVdJyxcbiAgICAgICAgICAgIGxhc3REYXk6ICdbRHVoIGRpIHNhZXRdIExUIFtkZV0nLFxuICAgICAgICAgICAgbGFzdFdlZWs6ICdkZGRkW2EgYm9yw64gZGkgc2FldF0gTFQgW2RlXScsXG4gICAgICAgICAgICBzYW1lRWxzZTogJ0wnLFxuICAgICAgICB9LFxuICAgICAgICByZWxhdGl2ZVRpbWU6IHtcbiAgICAgICAgICAgIGZ1dHVyZTogJ2RpICVzIGRlJyxcbiAgICAgICAgICAgIHBhc3Q6ICdiZXLDriAlcycsXG4gICAgICAgICAgICBzOiBwcm9jZXNzUmVsYXRpdmVUaW1lLFxuICAgICAgICAgICAgc3M6IHByb2Nlc3NSZWxhdGl2ZVRpbWUsXG4gICAgICAgICAgICBtOiBwcm9jZXNzUmVsYXRpdmVUaW1lLFxuICAgICAgICAgICAgbW06IHByb2Nlc3NSZWxhdGl2ZVRpbWUsXG4gICAgICAgICAgICBoOiBwcm9jZXNzUmVsYXRpdmVUaW1lLFxuICAgICAgICAgICAgaGg6IHByb2Nlc3NSZWxhdGl2ZVRpbWUsXG4gICAgICAgICAgICBkOiBwcm9jZXNzUmVsYXRpdmVUaW1lLFxuICAgICAgICAgICAgZGQ6IHByb2Nlc3NSZWxhdGl2ZVRpbWUsXG4gICAgICAgICAgICB3OiBwcm9jZXNzUmVsYXRpdmVUaW1lLFxuICAgICAgICAgICAgd3c6IHByb2Nlc3NSZWxhdGl2ZVRpbWUsXG4gICAgICAgICAgICBNOiBwcm9jZXNzUmVsYXRpdmVUaW1lLFxuICAgICAgICAgICAgTU06IHByb2Nlc3NSZWxhdGl2ZVRpbWUsXG4gICAgICAgICAgICB5OiBwcm9jZXNzUmVsYXRpdmVUaW1lLFxuICAgICAgICAgICAgeXk6IHByb2Nlc3NSZWxhdGl2ZVRpbWUsXG4gICAgICAgIH0sXG4gICAgICAgIGRheU9mTW9udGhPcmRpbmFsUGFyc2U6IC9cXGR7MSwyfSg/OnnDqnzDqnxcXC4pLyxcbiAgICAgICAgb3JkaW5hbDogZnVuY3Rpb24gKG51bSwgcGVyaW9kKSB7XG4gICAgICAgICAgICB2YXIgcCA9IHBlcmlvZC50b0xvd2VyQ2FzZSgpO1xuICAgICAgICAgICAgaWYgKHAuaW5jbHVkZXMoJ3cnKSB8fCBwLmluY2x1ZGVzKCdtJykpIHJldHVybiBudW0gKyAnLic7XG5cbiAgICAgICAgICAgIHJldHVybiBudW0gKyBlemFmZU51bVN1ZmZpeChudW0pO1xuICAgICAgICB9LFxuICAgICAgICB3ZWVrOiB7XG4gICAgICAgICAgICBkb3c6IDEsIC8vIE1vbmRheSBpcyB0aGUgZmlyc3QgZGF5IG9mIHRoZSB3ZWVrLlxuICAgICAgICAgICAgZG95OiA0LCAvLyBUaGUgd2VlayB0aGF0IGNvbnRhaW5zIEphbiA0dGggaXMgdGhlIGZpcnN0IHdlZWsgb2YgdGhlIHllYXIuXG4gICAgICAgIH0sXG4gICAgfSk7XG5cbiAgICByZXR1cm4ga3VLbXI7XG5cbn0pKSk7XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///6181\n")},6340:(I,g,t)=>{"use strict";I.exports=t.p+"dbb54d922122179ebbb5.png"},6372:function(module,exports,__webpack_require__){eval(";(function (root, factory, undef) {\n\tif (true) {\n\t\t// CommonJS\n\t\tmodule.exports = exports = factory(__webpack_require__(19021), __webpack_require__(57165));\n\t}\n\telse {}\n}(this, function (CryptoJS) {\n\n\t/** @preserve\n\t * Counter block mode compatible with Dr Brian Gladman fileenc.c\n\t * derived from CryptoJS.mode.CTR\n\t * Jan Hruby jhruby.web@gmail.com\n\t */\n\tCryptoJS.mode.CTRGladman = (function () {\n\t var CTRGladman = CryptoJS.lib.BlockCipherMode.extend();\n\n\t\tfunction incWord(word)\n\t\t{\n\t\t\tif (((word >> 24) & 0xff) === 0xff) { //overflow\n\t\t\tvar b1 = (word >> 16)&0xff;\n\t\t\tvar b2 = (word >> 8)&0xff;\n\t\t\tvar b3 = word & 0xff;\n\n\t\t\tif (b1 === 0xff) // overflow b1\n\t\t\t{\n\t\t\tb1 = 0;\n\t\t\tif (b2 === 0xff)\n\t\t\t{\n\t\t\t\tb2 = 0;\n\t\t\t\tif (b3 === 0xff)\n\t\t\t\t{\n\t\t\t\t\tb3 = 0;\n\t\t\t\t}\n\t\t\t\telse\n\t\t\t\t{\n\t\t\t\t\t++b3;\n\t\t\t\t}\n\t\t\t}\n\t\t\telse\n\t\t\t{\n\t\t\t\t++b2;\n\t\t\t}\n\t\t\t}\n\t\t\telse\n\t\t\t{\n\t\t\t++b1;\n\t\t\t}\n\n\t\t\tword = 0;\n\t\t\tword += (b1 << 16);\n\t\t\tword += (b2 << 8);\n\t\t\tword += b3;\n\t\t\t}\n\t\t\telse\n\t\t\t{\n\t\t\tword += (0x01 << 24);\n\t\t\t}\n\t\t\treturn word;\n\t\t}\n\n\t\tfunction incCounter(counter)\n\t\t{\n\t\t\tif ((counter[0] = incWord(counter[0])) === 0)\n\t\t\t{\n\t\t\t\t// encr_data in fileenc.c from Dr Brian Gladman's counts only with DWORD j < 8\n\t\t\t\tcounter[1] = incWord(counter[1]);\n\t\t\t}\n\t\t\treturn counter;\n\t\t}\n\n\t var Encryptor = CTRGladman.Encryptor = CTRGladman.extend({\n\t processBlock: function (words, offset) {\n\t // Shortcuts\n\t var cipher = this._cipher\n\t var blockSize = cipher.blockSize;\n\t var iv = this._iv;\n\t var counter = this._counter;\n\n\t // Generate keystream\n\t if (iv) {\n\t counter = this._counter = iv.slice(0);\n\n\t // Remove IV for subsequent blocks\n\t this._iv = undefined;\n\t }\n\n\t\t\t\tincCounter(counter);\n\n\t\t\t\tvar keystream = counter.slice(0);\n\t cipher.encryptBlock(keystream, 0);\n\n\t // Encrypt\n\t for (var i = 0; i < blockSize; i++) {\n\t words[offset + i] ^= keystream[i];\n\t }\n\t }\n\t });\n\n\t CTRGladman.Decryptor = Encryptor;\n\n\t return CTRGladman;\n\t}());\n\n\n\n\n\treturn CryptoJS.mode.CTRGladman;\n\n}));//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNjM3Mi5qcyIsIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFRQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL2l0Zy1uZXh0Z2VuLWZyb250ZW5kLy4vbm9kZV9tb2R1bGVzL2NyeXB0by1qcy9tb2RlLWN0ci1nbGFkbWFuLmpzP2FhZWYiXSwic291cmNlc0NvbnRlbnQiOlsiOyhmdW5jdGlvbiAocm9vdCwgZmFjdG9yeSwgdW5kZWYpIHtcblx0aWYgKHR5cGVvZiBleHBvcnRzID09PSBcIm9iamVjdFwiKSB7XG5cdFx0Ly8gQ29tbW9uSlNcblx0XHRtb2R1bGUuZXhwb3J0cyA9IGV4cG9ydHMgPSBmYWN0b3J5KHJlcXVpcmUoXCIuL2NvcmVcIiksIHJlcXVpcmUoXCIuL2NpcGhlci1jb3JlXCIpKTtcblx0fVxuXHRlbHNlIGlmICh0eXBlb2YgZGVmaW5lID09PSBcImZ1bmN0aW9uXCIgJiYgZGVmaW5lLmFtZCkge1xuXHRcdC8vIEFNRFxuXHRcdGRlZmluZShbXCIuL2NvcmVcIiwgXCIuL2NpcGhlci1jb3JlXCJdLCBmYWN0b3J5KTtcblx0fVxuXHRlbHNlIHtcblx0XHQvLyBHbG9iYWwgKGJyb3dzZXIpXG5cdFx0ZmFjdG9yeShyb290LkNyeXB0b0pTKTtcblx0fVxufSh0aGlzLCBmdW5jdGlvbiAoQ3J5cHRvSlMpIHtcblxuXHQvKiogQHByZXNlcnZlXG5cdCAqIENvdW50ZXIgYmxvY2sgbW9kZSBjb21wYXRpYmxlIHdpdGggIERyIEJyaWFuIEdsYWRtYW4gZmlsZWVuYy5jXG5cdCAqIGRlcml2ZWQgZnJvbSBDcnlwdG9KUy5tb2RlLkNUUlxuXHQgKiBKYW4gSHJ1YnkgamhydWJ5LndlYkBnbWFpbC5jb21cblx0ICovXG5cdENyeXB0b0pTLm1vZGUuQ1RSR2xhZG1hbiA9IChmdW5jdGlvbiAoKSB7XG5cdCAgICB2YXIgQ1RSR2xhZG1hbiA9IENyeXB0b0pTLmxpYi5CbG9ja0NpcGhlck1vZGUuZXh0ZW5kKCk7XG5cblx0XHRmdW5jdGlvbiBpbmNXb3JkKHdvcmQpXG5cdFx0e1xuXHRcdFx0aWYgKCgod29yZCA+PiAyNCkgJiAweGZmKSA9PT0gMHhmZikgeyAvL292ZXJmbG93XG5cdFx0XHR2YXIgYjEgPSAod29yZCA+PiAxNikmMHhmZjtcblx0XHRcdHZhciBiMiA9ICh3b3JkID4+IDgpJjB4ZmY7XG5cdFx0XHR2YXIgYjMgPSB3b3JkICYgMHhmZjtcblxuXHRcdFx0aWYgKGIxID09PSAweGZmKSAvLyBvdmVyZmxvdyBiMVxuXHRcdFx0e1xuXHRcdFx0YjEgPSAwO1xuXHRcdFx0aWYgKGIyID09PSAweGZmKVxuXHRcdFx0e1xuXHRcdFx0XHRiMiA9IDA7XG5cdFx0XHRcdGlmIChiMyA9PT0gMHhmZilcblx0XHRcdFx0e1xuXHRcdFx0XHRcdGIzID0gMDtcblx0XHRcdFx0fVxuXHRcdFx0XHRlbHNlXG5cdFx0XHRcdHtcblx0XHRcdFx0XHQrK2IzO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0XHRlbHNlXG5cdFx0XHR7XG5cdFx0XHRcdCsrYjI7XG5cdFx0XHR9XG5cdFx0XHR9XG5cdFx0XHRlbHNlXG5cdFx0XHR7XG5cdFx0XHQrK2IxO1xuXHRcdFx0fVxuXG5cdFx0XHR3b3JkID0gMDtcblx0XHRcdHdvcmQgKz0gKGIxIDw8IDE2KTtcblx0XHRcdHdvcmQgKz0gKGIyIDw8IDgpO1xuXHRcdFx0d29yZCArPSBiMztcblx0XHRcdH1cblx0XHRcdGVsc2Vcblx0XHRcdHtcblx0XHRcdHdvcmQgKz0gKDB4MDEgPDwgMjQpO1xuXHRcdFx0fVxuXHRcdFx0cmV0dXJuIHdvcmQ7XG5cdFx0fVxuXG5cdFx0ZnVuY3Rpb24gaW5jQ291bnRlcihjb3VudGVyKVxuXHRcdHtcblx0XHRcdGlmICgoY291bnRlclswXSA9IGluY1dvcmQoY291bnRlclswXSkpID09PSAwKVxuXHRcdFx0e1xuXHRcdFx0XHQvLyBlbmNyX2RhdGEgaW4gZmlsZWVuYy5jIGZyb20gIERyIEJyaWFuIEdsYWRtYW4ncyBjb3VudHMgb25seSB3aXRoIERXT1JEIGogPCA4XG5cdFx0XHRcdGNvdW50ZXJbMV0gPSBpbmNXb3JkKGNvdW50ZXJbMV0pO1xuXHRcdFx0fVxuXHRcdFx0cmV0dXJuIGNvdW50ZXI7XG5cdFx0fVxuXG5cdCAgICB2YXIgRW5jcnlwdG9yID0gQ1RSR2xhZG1hbi5FbmNyeXB0b3IgPSBDVFJHbGFkbWFuLmV4dGVuZCh7XG5cdCAgICAgICAgcHJvY2Vzc0Jsb2NrOiBmdW5jdGlvbiAod29yZHMsIG9mZnNldCkge1xuXHQgICAgICAgICAgICAvLyBTaG9ydGN1dHNcblx0ICAgICAgICAgICAgdmFyIGNpcGhlciA9IHRoaXMuX2NpcGhlclxuXHQgICAgICAgICAgICB2YXIgYmxvY2tTaXplID0gY2lwaGVyLmJsb2NrU2l6ZTtcblx0ICAgICAgICAgICAgdmFyIGl2ID0gdGhpcy5faXY7XG5cdCAgICAgICAgICAgIHZhciBjb3VudGVyID0gdGhpcy5fY291bnRlcjtcblxuXHQgICAgICAgICAgICAvLyBHZW5lcmF0ZSBrZXlzdHJlYW1cblx0ICAgICAgICAgICAgaWYgKGl2KSB7XG5cdCAgICAgICAgICAgICAgICBjb3VudGVyID0gdGhpcy5fY291bnRlciA9IGl2LnNsaWNlKDApO1xuXG5cdCAgICAgICAgICAgICAgICAvLyBSZW1vdmUgSVYgZm9yIHN1YnNlcXVlbnQgYmxvY2tzXG5cdCAgICAgICAgICAgICAgICB0aGlzLl9pdiA9IHVuZGVmaW5lZDtcblx0ICAgICAgICAgICAgfVxuXG5cdFx0XHRcdGluY0NvdW50ZXIoY291bnRlcik7XG5cblx0XHRcdFx0dmFyIGtleXN0cmVhbSA9IGNvdW50ZXIuc2xpY2UoMCk7XG5cdCAgICAgICAgICAgIGNpcGhlci5lbmNyeXB0QmxvY2soa2V5c3RyZWFtLCAwKTtcblxuXHQgICAgICAgICAgICAvLyBFbmNyeXB0XG5cdCAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYmxvY2tTaXplOyBpKyspIHtcblx0ICAgICAgICAgICAgICAgIHdvcmRzW29mZnNldCArIGldIF49IGtleXN0cmVhbVtpXTtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXG5cdCAgICBDVFJHbGFkbWFuLkRlY3J5cHRvciA9IEVuY3J5cHRvcjtcblxuXHQgICAgcmV0dXJuIENUUkdsYWRtYW47XG5cdH0oKSk7XG5cblxuXG5cblx0cmV0dXJuIENyeXB0b0pTLm1vZGUuQ1RSR2xhZG1hbjtcblxufSkpOyJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///6372\n")},6373:(I,g,t)=>{"use strict";I.exports=t.p+"8c37c256a0d0d69b7cfc.png"},6440:function(module,exports,__webpack_require__){eval(";(function (root, factory) {\n\tif (true) {\n\t\t// CommonJS\n\t\tmodule.exports = exports = factory(__webpack_require__(19021));\n\t}\n\telse {}\n}(this, function (CryptoJS) {\n\n\t(function () {\n\t // Check if typed arrays are supported\n\t if (typeof ArrayBuffer != 'function') {\n\t return;\n\t }\n\n\t // Shortcuts\n\t var C = CryptoJS;\n\t var C_lib = C.lib;\n\t var WordArray = C_lib.WordArray;\n\n\t // Reference original init\n\t var superInit = WordArray.init;\n\n\t // Augment WordArray.init to handle typed arrays\n\t var subInit = WordArray.init = function (typedArray) {\n\t // Convert buffers to uint8\n\t if (typedArray instanceof ArrayBuffer) {\n\t typedArray = new Uint8Array(typedArray);\n\t }\n\n\t // Convert other array views to uint8\n\t if (\n\t typedArray instanceof Int8Array ||\n\t (typeof Uint8ClampedArray !== \"undefined\" && typedArray instanceof Uint8ClampedArray) ||\n\t typedArray instanceof Int16Array ||\n\t typedArray instanceof Uint16Array ||\n\t typedArray instanceof Int32Array ||\n\t typedArray instanceof Uint32Array ||\n\t typedArray instanceof Float32Array ||\n\t typedArray instanceof Float64Array\n\t ) {\n\t typedArray = new Uint8Array(typedArray.buffer, typedArray.byteOffset, typedArray.byteLength);\n\t }\n\n\t // Handle Uint8Array\n\t if (typedArray instanceof Uint8Array) {\n\t // Shortcut\n\t var typedArrayByteLength = typedArray.byteLength;\n\n\t // Extract bytes\n\t var words = [];\n\t for (var i = 0; i < typedArrayByteLength; i++) {\n\t words[i >>> 2] |= typedArray[i] << (24 - (i % 4) * 8);\n\t }\n\n\t // Initialize this word array\n\t superInit.call(this, words, typedArrayByteLength);\n\t } else {\n\t // Else call normal init\n\t superInit.apply(this, arguments);\n\t }\n\t };\n\n\t subInit.prototype = WordArray;\n\t}());\n\n\n\treturn CryptoJS.lib.WordArray;\n\n}));//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNjQ0MC5qcyIsIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFRQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9pdGctbmV4dGdlbi1mcm9udGVuZC8uL25vZGVfbW9kdWxlcy9jcnlwdG8tanMvbGliLXR5cGVkYXJyYXlzLmpzPzE3ZTEiXSwic291cmNlc0NvbnRlbnQiOlsiOyhmdW5jdGlvbiAocm9vdCwgZmFjdG9yeSkge1xuXHRpZiAodHlwZW9mIGV4cG9ydHMgPT09IFwib2JqZWN0XCIpIHtcblx0XHQvLyBDb21tb25KU1xuXHRcdG1vZHVsZS5leHBvcnRzID0gZXhwb3J0cyA9IGZhY3RvcnkocmVxdWlyZShcIi4vY29yZVwiKSk7XG5cdH1cblx0ZWxzZSBpZiAodHlwZW9mIGRlZmluZSA9PT0gXCJmdW5jdGlvblwiICYmIGRlZmluZS5hbWQpIHtcblx0XHQvLyBBTURcblx0XHRkZWZpbmUoW1wiLi9jb3JlXCJdLCBmYWN0b3J5KTtcblx0fVxuXHRlbHNlIHtcblx0XHQvLyBHbG9iYWwgKGJyb3dzZXIpXG5cdFx0ZmFjdG9yeShyb290LkNyeXB0b0pTKTtcblx0fVxufSh0aGlzLCBmdW5jdGlvbiAoQ3J5cHRvSlMpIHtcblxuXHQoZnVuY3Rpb24gKCkge1xuXHQgICAgLy8gQ2hlY2sgaWYgdHlwZWQgYXJyYXlzIGFyZSBzdXBwb3J0ZWRcblx0ICAgIGlmICh0eXBlb2YgQXJyYXlCdWZmZXIgIT0gJ2Z1bmN0aW9uJykge1xuXHQgICAgICAgIHJldHVybjtcblx0ICAgIH1cblxuXHQgICAgLy8gU2hvcnRjdXRzXG5cdCAgICB2YXIgQyA9IENyeXB0b0pTO1xuXHQgICAgdmFyIENfbGliID0gQy5saWI7XG5cdCAgICB2YXIgV29yZEFycmF5ID0gQ19saWIuV29yZEFycmF5O1xuXG5cdCAgICAvLyBSZWZlcmVuY2Ugb3JpZ2luYWwgaW5pdFxuXHQgICAgdmFyIHN1cGVySW5pdCA9IFdvcmRBcnJheS5pbml0O1xuXG5cdCAgICAvLyBBdWdtZW50IFdvcmRBcnJheS5pbml0IHRvIGhhbmRsZSB0eXBlZCBhcnJheXNcblx0ICAgIHZhciBzdWJJbml0ID0gV29yZEFycmF5LmluaXQgPSBmdW5jdGlvbiAodHlwZWRBcnJheSkge1xuXHQgICAgICAgIC8vIENvbnZlcnQgYnVmZmVycyB0byB1aW50OFxuXHQgICAgICAgIGlmICh0eXBlZEFycmF5IGluc3RhbmNlb2YgQXJyYXlCdWZmZXIpIHtcblx0ICAgICAgICAgICAgdHlwZWRBcnJheSA9IG5ldyBVaW50OEFycmF5KHR5cGVkQXJyYXkpO1xuXHQgICAgICAgIH1cblxuXHQgICAgICAgIC8vIENvbnZlcnQgb3RoZXIgYXJyYXkgdmlld3MgdG8gdWludDhcblx0ICAgICAgICBpZiAoXG5cdCAgICAgICAgICAgIHR5cGVkQXJyYXkgaW5zdGFuY2VvZiBJbnQ4QXJyYXkgfHxcblx0ICAgICAgICAgICAgKHR5cGVvZiBVaW50OENsYW1wZWRBcnJheSAhPT0gXCJ1bmRlZmluZWRcIiAmJiB0eXBlZEFycmF5IGluc3RhbmNlb2YgVWludDhDbGFtcGVkQXJyYXkpIHx8XG5cdCAgICAgICAgICAgIHR5cGVkQXJyYXkgaW5zdGFuY2VvZiBJbnQxNkFycmF5IHx8XG5cdCAgICAgICAgICAgIHR5cGVkQXJyYXkgaW5zdGFuY2VvZiBVaW50MTZBcnJheSB8fFxuXHQgICAgICAgICAgICB0eXBlZEFycmF5IGluc3RhbmNlb2YgSW50MzJBcnJheSB8fFxuXHQgICAgICAgICAgICB0eXBlZEFycmF5IGluc3RhbmNlb2YgVWludDMyQXJyYXkgfHxcblx0ICAgICAgICAgICAgdHlwZWRBcnJheSBpbnN0YW5jZW9mIEZsb2F0MzJBcnJheSB8fFxuXHQgICAgICAgICAgICB0eXBlZEFycmF5IGluc3RhbmNlb2YgRmxvYXQ2NEFycmF5XG5cdCAgICAgICAgKSB7XG5cdCAgICAgICAgICAgIHR5cGVkQXJyYXkgPSBuZXcgVWludDhBcnJheSh0eXBlZEFycmF5LmJ1ZmZlciwgdHlwZWRBcnJheS5ieXRlT2Zmc2V0LCB0eXBlZEFycmF5LmJ5dGVMZW5ndGgpO1xuXHQgICAgICAgIH1cblxuXHQgICAgICAgIC8vIEhhbmRsZSBVaW50OEFycmF5XG5cdCAgICAgICAgaWYgKHR5cGVkQXJyYXkgaW5zdGFuY2VvZiBVaW50OEFycmF5KSB7XG5cdCAgICAgICAgICAgIC8vIFNob3J0Y3V0XG5cdCAgICAgICAgICAgIHZhciB0eXBlZEFycmF5Qnl0ZUxlbmd0aCA9IHR5cGVkQXJyYXkuYnl0ZUxlbmd0aDtcblxuXHQgICAgICAgICAgICAvLyBFeHRyYWN0IGJ5dGVzXG5cdCAgICAgICAgICAgIHZhciB3b3JkcyA9IFtdO1xuXHQgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHR5cGVkQXJyYXlCeXRlTGVuZ3RoOyBpKyspIHtcblx0ICAgICAgICAgICAgICAgIHdvcmRzW2kgPj4+IDJdIHw9IHR5cGVkQXJyYXlbaV0gPDwgKDI0IC0gKGkgJSA0KSAqIDgpO1xuXHQgICAgICAgICAgICB9XG5cblx0ICAgICAgICAgICAgLy8gSW5pdGlhbGl6ZSB0aGlzIHdvcmQgYXJyYXlcblx0ICAgICAgICAgICAgc3VwZXJJbml0LmNhbGwodGhpcywgd29yZHMsIHR5cGVkQXJyYXlCeXRlTGVuZ3RoKTtcblx0ICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICAvLyBFbHNlIGNhbGwgbm9ybWFsIGluaXRcblx0ICAgICAgICAgICAgc3VwZXJJbml0LmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG5cdCAgICAgICAgfVxuXHQgICAgfTtcblxuXHQgICAgc3ViSW5pdC5wcm90b3R5cGUgPSBXb3JkQXJyYXk7XG5cdH0oKSk7XG5cblxuXHRyZXR1cm4gQ3J5cHRvSlMubGliLldvcmRBcnJheTtcblxufSkpOyJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///6440\n")},6897:(I,g,t)=>{"use strict";I.exports=t.p+"9a32c2fb41aed2e6a191.png"},6925:module=>{"use strict";eval("/**\n * Copyright (c) 2013-present, Facebook, Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n\n\nvar ReactPropTypesSecret = 'SECRET_DO_NOT_PASS_THIS_OR_YOU_WILL_BE_FIRED';\n\nmodule.exports = ReactPropTypesSecret;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNjkyNS5qcyIsIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9pdGctbmV4dGdlbi1mcm9udGVuZC8uL25vZGVfbW9kdWxlcy9wcm9wLXR5cGVzL2xpYi9SZWFjdFByb3BUeXBlc1NlY3JldC5qcz81OWIwIl0sInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQ29weXJpZ2h0IChjKSAyMDEzLXByZXNlbnQsIEZhY2Vib29rLCBJbmMuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuXG4gKi9cblxuJ3VzZSBzdHJpY3QnO1xuXG52YXIgUmVhY3RQcm9wVHlwZXNTZWNyZXQgPSAnU0VDUkVUX0RPX05PVF9QQVNTX1RISVNfT1JfWU9VX1dJTExfQkVfRklSRUQnO1xuXG5tb2R1bGUuZXhwb3J0cyA9IFJlYWN0UHJvcFR5cGVzU2VjcmV0O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///6925\n")},6947:function(__unused_webpack_module,__unused_webpack_exports,__webpack_require__){eval("//! moment.js locale configuration\n//! locale : Arabic (Palestine) [ar-ps]\n//! author : Majd Al-Shihabi : https://github.com/majdal\n\n;(function (global, factory) {\n true ? factory(__webpack_require__(95093)) :\n 0\n}(this, (function (moment) { 'use strict';\n\n //! moment.js locale configuration\n\n var symbolMap = {\n 1: '١',\n 2: '٢',\n 3: '٣',\n 4: '٤',\n 5: '٥',\n 6: '٦',\n 7: '٧',\n 8: '٨',\n 9: '٩',\n 0: '٠',\n },\n numberMap = {\n '١': '1',\n '٢': '2',\n '٣': '3',\n '٤': '4',\n '٥': '5',\n '٦': '6',\n '٧': '7',\n '٨': '8',\n '٩': '9',\n '٠': '0',\n };\n\n var arPs = moment.defineLocale('ar-ps', {\n months: 'كانون الثاني_شباط_آذار_نيسان_أيّار_حزيران_تمّوز_آب_أيلول_تشري الأوّل_تشرين الثاني_كانون الأوّل'.split(\n '_'\n ),\n monthsShort:\n 'ك٢_شباط_آذار_نيسان_أيّار_حزيران_تمّوز_آب_أيلول_ت١_ت٢_ك١'.split('_'),\n weekdays: 'الأحد_الإثنين_الثلاثاء_الأربعاء_الخميس_الجمعة_السبت'.split('_'),\n weekdaysShort: 'أحد_إثنين_ثلاثاء_أربعاء_خميس_جمعة_سبت'.split('_'),\n weekdaysMin: 'ح_ن_ث_ر_خ_ج_س'.split('_'),\n weekdaysParseExact: true,\n longDateFormat: {\n LT: 'HH:mm',\n LTS: 'HH:mm:ss',\n L: 'DD/MM/YYYY',\n LL: 'D MMMM YYYY',\n LLL: 'D MMMM YYYY HH:mm',\n LLLL: 'dddd D MMMM YYYY HH:mm',\n },\n meridiemParse: /ص|م/,\n isPM: function (input) {\n return 'م' === input;\n },\n meridiem: function (hour, minute, isLower) {\n if (hour < 12) {\n return 'ص';\n } else {\n return 'م';\n }\n },\n calendar: {\n sameDay: '[اليوم على الساعة] LT',\n nextDay: '[غدا على الساعة] LT',\n nextWeek: 'dddd [على الساعة] LT',\n lastDay: '[أمس على الساعة] LT',\n lastWeek: 'dddd [على الساعة] LT',\n sameElse: 'L',\n },\n relativeTime: {\n future: 'في %s',\n past: 'منذ %s',\n s: 'ثوان',\n ss: '%d ثانية',\n m: 'دقيقة',\n mm: '%d دقائق',\n h: 'ساعة',\n hh: '%d ساعات',\n d: 'يوم',\n dd: '%d أيام',\n M: 'شهر',\n MM: '%d أشهر',\n y: 'سنة',\n yy: '%d سنوات',\n },\n preparse: function (string) {\n return string\n .replace(/[٣٤٥٦٧٨٩٠]/g, function (match) {\n return numberMap[match];\n })\n .split('') // reversed since negative lookbehind not supported everywhere\n .reverse()\n .join('')\n .replace(/[١٢](?![\\u062a\\u0643])/g, function (match) {\n return numberMap[match];\n })\n .split('')\n .reverse()\n .join('')\n .replace(/،/g, ',');\n },\n postformat: function (string) {\n return string\n .replace(/\\d/g, function (match) {\n return symbolMap[match];\n })\n .replace(/,/g, '،');\n },\n week: {\n dow: 0, // Sunday is the first day of the week.\n doy: 6, // The week that contains Jan 6th is the first week of the year.\n },\n });\n\n return arPs;\n\n})));\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNjk0Ny5qcyIsIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL2l0Zy1uZXh0Z2VuLWZyb250ZW5kLy4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvYXItcHMuanM/NGM5OCJdLCJzb3VyY2VzQ29udGVudCI6WyIvLyEgbW9tZW50LmpzIGxvY2FsZSBjb25maWd1cmF0aW9uXG4vLyEgbG9jYWxlIDogQXJhYmljIChQYWxlc3RpbmUpIFthci1wc11cbi8vISBhdXRob3IgOiBNYWpkIEFsLVNoaWhhYmkgOiBodHRwczovL2dpdGh1Yi5jb20vbWFqZGFsXG5cbjsoZnVuY3Rpb24gKGdsb2JhbCwgZmFjdG9yeSkge1xuICAgdHlwZW9mIGV4cG9ydHMgPT09ICdvYmplY3QnICYmIHR5cGVvZiBtb2R1bGUgIT09ICd1bmRlZmluZWQnXG4gICAgICAgJiYgdHlwZW9mIHJlcXVpcmUgPT09ICdmdW5jdGlvbicgPyBmYWN0b3J5KHJlcXVpcmUoJy4uL21vbWVudCcpKSA6XG4gICB0eXBlb2YgZGVmaW5lID09PSAnZnVuY3Rpb24nICYmIGRlZmluZS5hbWQgPyBkZWZpbmUoWycuLi9tb21lbnQnXSwgZmFjdG9yeSkgOlxuICAgZmFjdG9yeShnbG9iYWwubW9tZW50KVxufSh0aGlzLCAoZnVuY3Rpb24gKG1vbWVudCkgeyAndXNlIHN0cmljdCc7XG5cbiAgICAvLyEgbW9tZW50LmpzIGxvY2FsZSBjb25maWd1cmF0aW9uXG5cbiAgICB2YXIgc3ltYm9sTWFwID0ge1xuICAgICAgICAgICAgMTogJ9mhJyxcbiAgICAgICAgICAgIDI6ICfZoicsXG4gICAgICAgICAgICAzOiAn2aMnLFxuICAgICAgICAgICAgNDogJ9mkJyxcbiAgICAgICAgICAgIDU6ICfZpScsXG4gICAgICAgICAgICA2OiAn2aYnLFxuICAgICAgICAgICAgNzogJ9mnJyxcbiAgICAgICAgICAgIDg6ICfZqCcsXG4gICAgICAgICAgICA5OiAn2aknLFxuICAgICAgICAgICAgMDogJ9mgJyxcbiAgICAgICAgfSxcbiAgICAgICAgbnVtYmVyTWFwID0ge1xuICAgICAgICAgICAgJ9mhJzogJzEnLFxuICAgICAgICAgICAgJ9miJzogJzInLFxuICAgICAgICAgICAgJ9mjJzogJzMnLFxuICAgICAgICAgICAgJ9mkJzogJzQnLFxuICAgICAgICAgICAgJ9mlJzogJzUnLFxuICAgICAgICAgICAgJ9mmJzogJzYnLFxuICAgICAgICAgICAgJ9mnJzogJzcnLFxuICAgICAgICAgICAgJ9moJzogJzgnLFxuICAgICAgICAgICAgJ9mpJzogJzknLFxuICAgICAgICAgICAgJ9mgJzogJzAnLFxuICAgICAgICB9O1xuXG4gICAgdmFyIGFyUHMgPSBtb21lbnQuZGVmaW5lTG9jYWxlKCdhci1wcycsIHtcbiAgICAgICAgbW9udGhzOiAn2YPYp9mG2YjZhiDYp9mE2KvYp9mG2Ypf2LTYqNin2Ldf2KLYsNin2LFf2YbZitiz2KfZhl/Yo9mK2ZHYp9ixX9it2LLZitix2KfZhl/YqtmF2ZHZiNiyX9ii2Khf2KPZitmE2YjZhF/Yqti02LHZiiDYp9mE2KPZiNmR2YRf2KrYtNix2YrZhiDYp9mE2KvYp9mG2Ypf2YPYp9mG2YjZhiDYp9mE2KPZiNmR2YQnLnNwbGl0KFxuICAgICAgICAgICAgJ18nXG4gICAgICAgICksXG4gICAgICAgIG1vbnRoc1Nob3J0OlxuICAgICAgICAgICAgJ9mD2aJf2LTYqNin2Ldf2KLYsNin2LFf2YbZitiz2KfZhl/Yo9mK2ZHYp9ixX9it2LLZitix2KfZhl/YqtmF2ZHZiNiyX9ii2Khf2KPZitmE2YjZhF/YqtmhX9iq2aJf2YPZoScuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXM6ICfYp9mE2KPYrdivX9in2YTYpdir2YbZitmGX9in2YTYq9mE2KfYq9in2KFf2KfZhNij2LHYqNi52KfYoV/Yp9mE2K7ZhdmK2LNf2KfZhNis2YXYudipX9in2YTYs9io2KonLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzU2hvcnQ6ICfYo9it2K9f2KXYq9mG2YrZhl/Yq9mE2KfYq9in2KFf2KPYsdio2LnYp9ihX9iu2YXZitizX9is2YXYudipX9iz2KjYqicuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXNNaW46ICfYrV/Zhl/Yq1/YsV/Yrl/YrF/Ysycuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXNQYXJzZUV4YWN0OiB0cnVlLFxuICAgICAgICBsb25nRGF0ZUZvcm1hdDoge1xuICAgICAgICAgICAgTFQ6ICdISDptbScsXG4gICAgICAgICAgICBMVFM6ICdISDptbTpzcycsXG4gICAgICAgICAgICBMOiAnREQvTU0vWVlZWScsXG4gICAgICAgICAgICBMTDogJ0QgTU1NTSBZWVlZJyxcbiAgICAgICAgICAgIExMTDogJ0QgTU1NTSBZWVlZIEhIOm1tJyxcbiAgICAgICAgICAgIExMTEw6ICdkZGRkIEQgTU1NTSBZWVlZIEhIOm1tJyxcbiAgICAgICAgfSxcbiAgICAgICAgbWVyaWRpZW1QYXJzZTogL9i1fNmFLyxcbiAgICAgICAgaXNQTTogZnVuY3Rpb24gKGlucHV0KSB7XG4gICAgICAgICAgICByZXR1cm4gJ9mFJyA9PT0gaW5wdXQ7XG4gICAgICAgIH0sXG4gICAgICAgIG1lcmlkaWVtOiBmdW5jdGlvbiAoaG91ciwgbWludXRlLCBpc0xvd2VyKSB7XG4gICAgICAgICAgICBpZiAoaG91ciA8IDEyKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuICfYtSc7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHJldHVybiAn2YUnO1xuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBjYWxlbmRhcjoge1xuICAgICAgICAgICAgc2FtZURheTogJ1vYp9mE2YrZiNmFINi52YTZiSDYp9mE2LPYp9i52KldIExUJyxcbiAgICAgICAgICAgIG5leHREYXk6ICdb2LrYr9inINi52YTZiSDYp9mE2LPYp9i52KldIExUJyxcbiAgICAgICAgICAgIG5leHRXZWVrOiAnZGRkZCBb2LnZhNmJINin2YTYs9in2LnYqV0gTFQnLFxuICAgICAgICAgICAgbGFzdERheTogJ1vYo9mF2LMg2LnZhNmJINin2YTYs9in2LnYqV0gTFQnLFxuICAgICAgICAgICAgbGFzdFdlZWs6ICdkZGRkIFvYudmE2Ykg2KfZhNiz2KfYudipXSBMVCcsXG4gICAgICAgICAgICBzYW1lRWxzZTogJ0wnLFxuICAgICAgICB9LFxuICAgICAgICByZWxhdGl2ZVRpbWU6IHtcbiAgICAgICAgICAgIGZ1dHVyZTogJ9mB2YogJXMnLFxuICAgICAgICAgICAgcGFzdDogJ9mF2YbYsCAlcycsXG4gICAgICAgICAgICBzOiAn2KvZiNin2YYnLFxuICAgICAgICAgICAgc3M6ICclZCDYq9in2YbZitipJyxcbiAgICAgICAgICAgIG06ICfYr9mC2YrZgtipJyxcbiAgICAgICAgICAgIG1tOiAnJWQg2K/Zgtin2KbZgicsXG4gICAgICAgICAgICBoOiAn2LPYp9i52KknLFxuICAgICAgICAgICAgaGg6ICclZCDYs9in2LnYp9iqJyxcbiAgICAgICAgICAgIGQ6ICfZitmI2YUnLFxuICAgICAgICAgICAgZGQ6ICclZCDYo9mK2KfZhScsXG4gICAgICAgICAgICBNOiAn2LTZh9ixJyxcbiAgICAgICAgICAgIE1NOiAnJWQg2KPYtNmH2LEnLFxuICAgICAgICAgICAgeTogJ9iz2YbYqScsXG4gICAgICAgICAgICB5eTogJyVkINiz2YbZiNin2KonLFxuICAgICAgICB9LFxuICAgICAgICBwcmVwYXJzZTogZnVuY3Rpb24gKHN0cmluZykge1xuICAgICAgICAgICAgcmV0dXJuIHN0cmluZ1xuICAgICAgICAgICAgICAgIC5yZXBsYWNlKC9b2aPZpNml2abZp9mo2anZoF0vZywgZnVuY3Rpb24gKG1hdGNoKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBudW1iZXJNYXBbbWF0Y2hdO1xuICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgLnNwbGl0KCcnKSAvLyByZXZlcnNlZCBzaW5jZSBuZWdhdGl2ZSBsb29rYmVoaW5kIG5vdCBzdXBwb3J0ZWQgZXZlcnl3aGVyZVxuICAgICAgICAgICAgICAgIC5yZXZlcnNlKClcbiAgICAgICAgICAgICAgICAuam9pbignJylcbiAgICAgICAgICAgICAgICAucmVwbGFjZSgvW9mh2aJdKD8hW1xcdTA2MmFcXHUwNjQzXSkvZywgZnVuY3Rpb24gKG1hdGNoKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBudW1iZXJNYXBbbWF0Y2hdO1xuICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgLnNwbGl0KCcnKVxuICAgICAgICAgICAgICAgIC5yZXZlcnNlKClcbiAgICAgICAgICAgICAgICAuam9pbignJylcbiAgICAgICAgICAgICAgICAucmVwbGFjZSgv2IwvZywgJywnKTtcbiAgICAgICAgfSxcbiAgICAgICAgcG9zdGZvcm1hdDogZnVuY3Rpb24gKHN0cmluZykge1xuICAgICAgICAgICAgcmV0dXJuIHN0cmluZ1xuICAgICAgICAgICAgICAgIC5yZXBsYWNlKC9cXGQvZywgZnVuY3Rpb24gKG1hdGNoKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBzeW1ib2xNYXBbbWF0Y2hdO1xuICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgLnJlcGxhY2UoLywvZywgJ9iMJyk7XG4gICAgICAgIH0sXG4gICAgICAgIHdlZWs6IHtcbiAgICAgICAgICAgIGRvdzogMCwgLy8gU3VuZGF5IGlzIHRoZSBmaXJzdCBkYXkgb2YgdGhlIHdlZWsuXG4gICAgICAgICAgICBkb3k6IDYsIC8vIFRoZSB3ZWVrIHRoYXQgY29udGFpbnMgSmFuIDZ0aCBpcyB0aGUgZmlyc3Qgd2VlayBvZiB0aGUgeWVhci5cbiAgICAgICAgfSxcbiAgICB9KTtcblxuICAgIHJldHVybiBhclBzO1xuXG59KSkpO1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///6947\n")},6963:(I,g,t)=>{"use strict";I.exports=t.p+"7ccaa2b1799b2bed444c.png"},7018:(module,__unused_webpack_exports,__webpack_require__)=>{"use strict";eval("\n\nvar utils = __webpack_require__(9516);\n\nmodule.exports = function normalizeHeaderName(headers, normalizedName) {\n utils.forEach(headers, function processHeader(value, name) {\n if (name !== normalizedName && name.toUpperCase() === normalizedName.toUpperCase()) {\n headers[normalizedName] = value;\n delete headers[name];\n }\n });\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNzAxOC5qcyIsIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9pdGctbmV4dGdlbi1mcm9udGVuZC8uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvaGVscGVycy9ub3JtYWxpemVIZWFkZXJOYW1lLmpzP2M4YWYiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG52YXIgdXRpbHMgPSByZXF1aXJlKCcuLi91dGlscycpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIG5vcm1hbGl6ZUhlYWRlck5hbWUoaGVhZGVycywgbm9ybWFsaXplZE5hbWUpIHtcbiAgdXRpbHMuZm9yRWFjaChoZWFkZXJzLCBmdW5jdGlvbiBwcm9jZXNzSGVhZGVyKHZhbHVlLCBuYW1lKSB7XG4gICAgaWYgKG5hbWUgIT09IG5vcm1hbGl6ZWROYW1lICYmIG5hbWUudG9VcHBlckNhc2UoKSA9PT0gbm9ybWFsaXplZE5hbWUudG9VcHBlckNhc2UoKSkge1xuICAgICAgaGVhZGVyc1tub3JtYWxpemVkTmFtZV0gPSB2YWx1ZTtcbiAgICAgIGRlbGV0ZSBoZWFkZXJzW25hbWVdO1xuICAgIH1cbiAgfSk7XG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///7018\n")},7265:(I,g,t)=>{"use strict";I.exports=t.p+"3213adeb99448322ef87.png"},7306:function(__unused_webpack_module,__unused_webpack_exports,__webpack_require__){eval("//! moment.js locale configuration\n//! locale : Catalan [ca]\n//! author : Juan G. Hurtado : https://github.com/juanghurtado\n\n;(function (global, factory) {\n true ? factory(__webpack_require__(95093)) :\n 0\n}(this, (function (moment) { 'use strict';\n\n //! moment.js locale configuration\n\n var ca = moment.defineLocale('ca', {\n months: {\n standalone:\n 'gener_febrer_març_abril_maig_juny_juliol_agost_setembre_octubre_novembre_desembre'.split(\n '_'\n ),\n format: \"de gener_de febrer_de març_d'abril_de maig_de juny_de juliol_d'agost_de setembre_d'octubre_de novembre_de desembre\".split(\n '_'\n ),\n isFormat: /D[oD]?(\\s)+MMMM/,\n },\n monthsShort:\n 'gen._febr._març_abr._maig_juny_jul._ag._set._oct._nov._des.'.split(\n '_'\n ),\n monthsParseExact: true,\n weekdays:\n 'diumenge_dilluns_dimarts_dimecres_dijous_divendres_dissabte'.split(\n '_'\n ),\n weekdaysShort: 'dg._dl._dt._dc._dj._dv._ds.'.split('_'),\n weekdaysMin: 'dg_dl_dt_dc_dj_dv_ds'.split('_'),\n weekdaysParseExact: true,\n longDateFormat: {\n LT: 'H:mm',\n LTS: 'H:mm:ss',\n L: 'DD/MM/YYYY',\n LL: 'D MMMM [de] YYYY',\n ll: 'D MMM YYYY',\n LLL: 'D MMMM [de] YYYY [a les] H:mm',\n lll: 'D MMM YYYY, H:mm',\n LLLL: 'dddd D MMMM [de] YYYY [a les] H:mm',\n llll: 'ddd D MMM YYYY, H:mm',\n },\n calendar: {\n sameDay: function () {\n return '[avui a ' + (this.hours() !== 1 ? 'les' : 'la') + '] LT';\n },\n nextDay: function () {\n return '[demà a ' + (this.hours() !== 1 ? 'les' : 'la') + '] LT';\n },\n nextWeek: function () {\n return 'dddd [a ' + (this.hours() !== 1 ? 'les' : 'la') + '] LT';\n },\n lastDay: function () {\n return '[ahir a ' + (this.hours() !== 1 ? 'les' : 'la') + '] LT';\n },\n lastWeek: function () {\n return (\n '[el] dddd [passat a ' +\n (this.hours() !== 1 ? 'les' : 'la') +\n '] LT'\n );\n },\n sameElse: 'L',\n },\n relativeTime: {\n future: \"d'aquí %s\",\n past: 'fa %s',\n s: 'uns segons',\n ss: '%d segons',\n m: 'un minut',\n mm: '%d minuts',\n h: 'una hora',\n hh: '%d hores',\n d: 'un dia',\n dd: '%d dies',\n M: 'un mes',\n MM: '%d mesos',\n y: 'un any',\n yy: '%d anys',\n },\n dayOfMonthOrdinalParse: /\\d{1,2}(r|n|t|è|a)/,\n ordinal: function (number, period) {\n var output =\n number === 1\n ? 'r'\n : number === 2\n ? 'n'\n : number === 3\n ? 'r'\n : number === 4\n ? 't'\n : 'è';\n if (period === 'w' || period === 'W') {\n output = 'a';\n }\n return number + output;\n },\n week: {\n dow: 1, // Monday is the first day of the week.\n doy: 4, // The week that contains Jan 4th is the first week of the year.\n },\n });\n\n return ca;\n\n})));\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNzMwNi5qcyIsIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL2l0Zy1uZXh0Z2VuLWZyb250ZW5kLy4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvY2EuanM/ZDcxNiJdLCJzb3VyY2VzQ29udGVudCI6WyIvLyEgbW9tZW50LmpzIGxvY2FsZSBjb25maWd1cmF0aW9uXG4vLyEgbG9jYWxlIDogQ2F0YWxhbiBbY2FdXG4vLyEgYXV0aG9yIDogSnVhbiBHLiBIdXJ0YWRvIDogaHR0cHM6Ly9naXRodWIuY29tL2p1YW5naHVydGFkb1xuXG47KGZ1bmN0aW9uIChnbG9iYWwsIGZhY3RvcnkpIHtcbiAgIHR5cGVvZiBleHBvcnRzID09PSAnb2JqZWN0JyAmJiB0eXBlb2YgbW9kdWxlICE9PSAndW5kZWZpbmVkJ1xuICAgICAgICYmIHR5cGVvZiByZXF1aXJlID09PSAnZnVuY3Rpb24nID8gZmFjdG9yeShyZXF1aXJlKCcuLi9tb21lbnQnKSkgOlxuICAgdHlwZW9mIGRlZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiBkZWZpbmUuYW1kID8gZGVmaW5lKFsnLi4vbW9tZW50J10sIGZhY3RvcnkpIDpcbiAgIGZhY3RvcnkoZ2xvYmFsLm1vbWVudClcbn0odGhpcywgKGZ1bmN0aW9uIChtb21lbnQpIHsgJ3VzZSBzdHJpY3QnO1xuXG4gICAgLy8hIG1vbWVudC5qcyBsb2NhbGUgY29uZmlndXJhdGlvblxuXG4gICAgdmFyIGNhID0gbW9tZW50LmRlZmluZUxvY2FsZSgnY2EnLCB7XG4gICAgICAgIG1vbnRoczoge1xuICAgICAgICAgICAgc3RhbmRhbG9uZTpcbiAgICAgICAgICAgICAgICAnZ2VuZXJfZmVicmVyX21hcsOnX2FicmlsX21haWdfanVueV9qdWxpb2xfYWdvc3Rfc2V0ZW1icmVfb2N0dWJyZV9ub3ZlbWJyZV9kZXNlbWJyZScuc3BsaXQoXG4gICAgICAgICAgICAgICAgICAgICdfJ1xuICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICBmb3JtYXQ6IFwiZGUgZ2VuZXJfZGUgZmVicmVyX2RlIG1hcsOnX2QnYWJyaWxfZGUgbWFpZ19kZSBqdW55X2RlIGp1bGlvbF9kJ2Fnb3N0X2RlIHNldGVtYnJlX2Qnb2N0dWJyZV9kZSBub3ZlbWJyZV9kZSBkZXNlbWJyZVwiLnNwbGl0KFxuICAgICAgICAgICAgICAgICdfJ1xuICAgICAgICAgICAgKSxcbiAgICAgICAgICAgIGlzRm9ybWF0OiAvRFtvRF0/KFxccykrTU1NTS8sXG4gICAgICAgIH0sXG4gICAgICAgIG1vbnRoc1Nob3J0OlxuICAgICAgICAgICAgJ2dlbi5fZmVici5fbWFyw6dfYWJyLl9tYWlnX2p1bnlfanVsLl9hZy5fc2V0Ll9vY3QuX25vdi5fZGVzLicuc3BsaXQoXG4gICAgICAgICAgICAgICAgJ18nXG4gICAgICAgICAgICApLFxuICAgICAgICBtb250aHNQYXJzZUV4YWN0OiB0cnVlLFxuICAgICAgICB3ZWVrZGF5czpcbiAgICAgICAgICAgICdkaXVtZW5nZV9kaWxsdW5zX2RpbWFydHNfZGltZWNyZXNfZGlqb3VzX2RpdmVuZHJlc19kaXNzYWJ0ZScuc3BsaXQoXG4gICAgICAgICAgICAgICAgJ18nXG4gICAgICAgICAgICApLFxuICAgICAgICB3ZWVrZGF5c1Nob3J0OiAnZGcuX2RsLl9kdC5fZGMuX2RqLl9kdi5fZHMuJy5zcGxpdCgnXycpLFxuICAgICAgICB3ZWVrZGF5c01pbjogJ2RnX2RsX2R0X2RjX2RqX2R2X2RzJy5zcGxpdCgnXycpLFxuICAgICAgICB3ZWVrZGF5c1BhcnNlRXhhY3Q6IHRydWUsXG4gICAgICAgIGxvbmdEYXRlRm9ybWF0OiB7XG4gICAgICAgICAgICBMVDogJ0g6bW0nLFxuICAgICAgICAgICAgTFRTOiAnSDptbTpzcycsXG4gICAgICAgICAgICBMOiAnREQvTU0vWVlZWScsXG4gICAgICAgICAgICBMTDogJ0QgTU1NTSBbZGVdIFlZWVknLFxuICAgICAgICAgICAgbGw6ICdEIE1NTSBZWVlZJyxcbiAgICAgICAgICAgIExMTDogJ0QgTU1NTSBbZGVdIFlZWVkgW2EgbGVzXSBIOm1tJyxcbiAgICAgICAgICAgIGxsbDogJ0QgTU1NIFlZWVksIEg6bW0nLFxuICAgICAgICAgICAgTExMTDogJ2RkZGQgRCBNTU1NIFtkZV0gWVlZWSBbYSBsZXNdIEg6bW0nLFxuICAgICAgICAgICAgbGxsbDogJ2RkZCBEIE1NTSBZWVlZLCBIOm1tJyxcbiAgICAgICAgfSxcbiAgICAgICAgY2FsZW5kYXI6IHtcbiAgICAgICAgICAgIHNhbWVEYXk6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gJ1thdnVpIGEgJyArICh0aGlzLmhvdXJzKCkgIT09IDEgPyAnbGVzJyA6ICdsYScpICsgJ10gTFQnO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIG5leHREYXk6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gJ1tkZW3DoCBhICcgKyAodGhpcy5ob3VycygpICE9PSAxID8gJ2xlcycgOiAnbGEnKSArICddIExUJztcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBuZXh0V2VlazogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIHJldHVybiAnZGRkZCBbYSAnICsgKHRoaXMuaG91cnMoKSAhPT0gMSA/ICdsZXMnIDogJ2xhJykgKyAnXSBMVCc7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgbGFzdERheTogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIHJldHVybiAnW2FoaXIgYSAnICsgKHRoaXMuaG91cnMoKSAhPT0gMSA/ICdsZXMnIDogJ2xhJykgKyAnXSBMVCc7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgbGFzdFdlZWs6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgICAgICAgICAnW2VsXSBkZGRkIFtwYXNzYXQgYSAnICtcbiAgICAgICAgICAgICAgICAgICAgKHRoaXMuaG91cnMoKSAhPT0gMSA/ICdsZXMnIDogJ2xhJykgK1xuICAgICAgICAgICAgICAgICAgICAnXSBMVCdcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHNhbWVFbHNlOiAnTCcsXG4gICAgICAgIH0sXG4gICAgICAgIHJlbGF0aXZlVGltZToge1xuICAgICAgICAgICAgZnV0dXJlOiBcImQnYXF1w60gJXNcIixcbiAgICAgICAgICAgIHBhc3Q6ICdmYSAlcycsXG4gICAgICAgICAgICBzOiAndW5zIHNlZ29ucycsXG4gICAgICAgICAgICBzczogJyVkIHNlZ29ucycsXG4gICAgICAgICAgICBtOiAndW4gbWludXQnLFxuICAgICAgICAgICAgbW06ICclZCBtaW51dHMnLFxuICAgICAgICAgICAgaDogJ3VuYSBob3JhJyxcbiAgICAgICAgICAgIGhoOiAnJWQgaG9yZXMnLFxuICAgICAgICAgICAgZDogJ3VuIGRpYScsXG4gICAgICAgICAgICBkZDogJyVkIGRpZXMnLFxuICAgICAgICAgICAgTTogJ3VuIG1lcycsXG4gICAgICAgICAgICBNTTogJyVkIG1lc29zJyxcbiAgICAgICAgICAgIHk6ICd1biBhbnknLFxuICAgICAgICAgICAgeXk6ICclZCBhbnlzJyxcbiAgICAgICAgfSxcbiAgICAgICAgZGF5T2ZNb250aE9yZGluYWxQYXJzZTogL1xcZHsxLDJ9KHJ8bnx0fMOofGEpLyxcbiAgICAgICAgb3JkaW5hbDogZnVuY3Rpb24gKG51bWJlciwgcGVyaW9kKSB7XG4gICAgICAgICAgICB2YXIgb3V0cHV0ID1cbiAgICAgICAgICAgICAgICBudW1iZXIgPT09IDFcbiAgICAgICAgICAgICAgICAgICAgPyAncidcbiAgICAgICAgICAgICAgICAgICAgOiBudW1iZXIgPT09IDJcbiAgICAgICAgICAgICAgICAgICAgICA/ICduJ1xuICAgICAgICAgICAgICAgICAgICAgIDogbnVtYmVyID09PSAzXG4gICAgICAgICAgICAgICAgICAgICAgICA/ICdyJ1xuICAgICAgICAgICAgICAgICAgICAgICAgOiBudW1iZXIgPT09IDRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPyAndCdcbiAgICAgICAgICAgICAgICAgICAgICAgICAgOiAnw6gnO1xuICAgICAgICAgICAgaWYgKHBlcmlvZCA9PT0gJ3cnIHx8IHBlcmlvZCA9PT0gJ1cnKSB7XG4gICAgICAgICAgICAgICAgb3V0cHV0ID0gJ2EnO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIG51bWJlciArIG91dHB1dDtcbiAgICAgICAgfSxcbiAgICAgICAgd2Vlazoge1xuICAgICAgICAgICAgZG93OiAxLCAvLyBNb25kYXkgaXMgdGhlIGZpcnN0IGRheSBvZiB0aGUgd2Vlay5cbiAgICAgICAgICAgIGRveTogNCwgLy8gVGhlIHdlZWsgdGhhdCBjb250YWlucyBKYW4gNHRoIGlzIHRoZSBmaXJzdCB3ZWVrIG9mIHRoZSB5ZWFyLlxuICAgICAgICB9LFxuICAgIH0pO1xuXG4gICAgcmV0dXJuIGNhO1xuXG59KSkpO1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///7306\n")},7463:(__unused_webpack_module,exports)=>{"use strict";eval('/** @license React v0.20.2\n * scheduler.production.min.js\n *\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\nvar f,g,h,k;if("object"===typeof performance&&"function"===typeof performance.now){var l=performance;exports.unstable_now=function(){return l.now()}}else{var p=Date,q=p.now();exports.unstable_now=function(){return p.now()-q}}\nif("undefined"===typeof window||"function"!==typeof MessageChannel){var t=null,u=null,w=function(){if(null!==t)try{var a=exports.unstable_now();t(!0,a);t=null}catch(b){throw setTimeout(w,0),b;}};f=function(a){null!==t?setTimeout(f,0,a):(t=a,setTimeout(w,0))};g=function(a,b){u=setTimeout(a,b)};h=function(){clearTimeout(u)};exports.unstable_shouldYield=function(){return!1};k=exports.unstable_forceFrameRate=function(){}}else{var x=window.setTimeout,y=window.clearTimeout;if("undefined"!==typeof console){var z=\nwindow.cancelAnimationFrame;"function"!==typeof window.requestAnimationFrame&&console.error("This browser doesn\'t support requestAnimationFrame. Make sure that you load a polyfill in older browsers. https://reactjs.org/link/react-polyfills");"function"!==typeof z&&console.error("This browser doesn\'t support cancelAnimationFrame. Make sure that you load a polyfill in older browsers. https://reactjs.org/link/react-polyfills")}var A=!1,B=null,C=-1,D=5,E=0;exports.unstable_shouldYield=function(){return exports.unstable_now()>=\nE};k=function(){};exports.unstable_forceFrameRate=function(a){0>a||125>>1,e=a[d];if(void 0!==e&&0I(n,c))void 0!==r&&0>I(r,n)?(a[d]=r,a[v]=c,d=v):(a[d]=n,a[m]=c,d=m);else if(void 0!==r&&0>I(r,c))a[d]=r,a[v]=c,d=v;else break a}}return b}return null}function I(a,b){var c=a.sortIndex-b.sortIndex;return 0!==c?c:a.id-b.id}var L=[],M=[],N=1,O=null,P=3,Q=!1,R=!1,S=!1;\nfunction T(a){for(var b=J(M);null!==b;){if(null===b.callback)K(M);else if(b.startTime<=a)K(M),b.sortIndex=b.expirationTime,H(L,b);else break;b=J(M)}}function U(a){S=!1;T(a);if(!R)if(null!==J(L))R=!0,f(V);else{var b=J(M);null!==b&&g(U,b.startTime-a)}}\nfunction V(a,b){R=!1;S&&(S=!1,h());Q=!0;var c=P;try{T(b);for(O=J(L);null!==O&&(!(O.expirationTime>b)||a&&!exports.unstable_shouldYield());){var d=O.callback;if("function"===typeof d){O.callback=null;P=O.priorityLevel;var e=d(O.expirationTime<=b);b=exports.unstable_now();"function"===typeof e?O.callback=e:O===J(L)&&K(L);T(b)}else K(L);O=J(L)}if(null!==O)var m=!0;else{var n=J(M);null!==n&&g(U,n.startTime-b);m=!1}return m}finally{O=null,P=c,Q=!1}}var W=k;exports.unstable_IdlePriority=5;\nexports.unstable_ImmediatePriority=1;exports.unstable_LowPriority=4;exports.unstable_NormalPriority=3;exports.unstable_Profiling=null;exports.unstable_UserBlockingPriority=2;exports.unstable_cancelCallback=function(a){a.callback=null};exports.unstable_continueExecution=function(){R||Q||(R=!0,f(V))};exports.unstable_getCurrentPriorityLevel=function(){return P};exports.unstable_getFirstCallbackNode=function(){return J(L)};\nexports.unstable_next=function(a){switch(P){case 1:case 2:case 3:var b=3;break;default:b=P}var c=P;P=b;try{return a()}finally{P=c}};exports.unstable_pauseExecution=function(){};exports.unstable_requestPaint=W;exports.unstable_runWithPriority=function(a,b){switch(a){case 1:case 2:case 3:case 4:case 5:break;default:a=3}var c=P;P=a;try{return b()}finally{P=c}};\nexports.unstable_scheduleCallback=function(a,b,c){var d=exports.unstable_now();"object"===typeof c&&null!==c?(c=c.delay,c="number"===typeof c&&0d?(a.sortIndex=c,H(M,a),null===J(L)&&a===J(M)&&(S?h():S=!0,g(U,c-d))):(a.sortIndex=e,H(L,a),R||Q||(R=!0,f(V)));return a};\nexports.unstable_wrapCallback=function(a){var b=P;return function(){var c=P;P=b;try{return a.apply(this,arguments)}finally{P=c}}};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNzQ2My5qcyIsIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vaXRnLW5leHRnZW4tZnJvbnRlbmQvLi9ub2RlX21vZHVsZXMvc2NoZWR1bGVyL2Nqcy9zY2hlZHVsZXIucHJvZHVjdGlvbi5taW4uanM/ZmIwNyJdLCJzb3VyY2VzQ29udGVudCI6WyIvKiogQGxpY2Vuc2UgUmVhY3QgdjAuMjAuMlxuICogc2NoZWR1bGVyLnByb2R1Y3Rpb24ubWluLmpzXG4gKlxuICogQ29weXJpZ2h0IChjKSBGYWNlYm9vaywgSW5jLiBhbmQgaXRzIGFmZmlsaWF0ZXMuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuXG4gKi9cbid1c2Ugc3RyaWN0Jzt2YXIgZixnLGgsaztpZihcIm9iamVjdFwiPT09dHlwZW9mIHBlcmZvcm1hbmNlJiZcImZ1bmN0aW9uXCI9PT10eXBlb2YgcGVyZm9ybWFuY2Uubm93KXt2YXIgbD1wZXJmb3JtYW5jZTtleHBvcnRzLnVuc3RhYmxlX25vdz1mdW5jdGlvbigpe3JldHVybiBsLm5vdygpfX1lbHNle3ZhciBwPURhdGUscT1wLm5vdygpO2V4cG9ydHMudW5zdGFibGVfbm93PWZ1bmN0aW9uKCl7cmV0dXJuIHAubm93KCktcX19XG5pZihcInVuZGVmaW5lZFwiPT09dHlwZW9mIHdpbmRvd3x8XCJmdW5jdGlvblwiIT09dHlwZW9mIE1lc3NhZ2VDaGFubmVsKXt2YXIgdD1udWxsLHU9bnVsbCx3PWZ1bmN0aW9uKCl7aWYobnVsbCE9PXQpdHJ5e3ZhciBhPWV4cG9ydHMudW5zdGFibGVfbm93KCk7dCghMCxhKTt0PW51bGx9Y2F0Y2goYil7dGhyb3cgc2V0VGltZW91dCh3LDApLGI7fX07Zj1mdW5jdGlvbihhKXtudWxsIT09dD9zZXRUaW1lb3V0KGYsMCxhKToodD1hLHNldFRpbWVvdXQodywwKSl9O2c9ZnVuY3Rpb24oYSxiKXt1PXNldFRpbWVvdXQoYSxiKX07aD1mdW5jdGlvbigpe2NsZWFyVGltZW91dCh1KX07ZXhwb3J0cy51bnN0YWJsZV9zaG91bGRZaWVsZD1mdW5jdGlvbigpe3JldHVybiExfTtrPWV4cG9ydHMudW5zdGFibGVfZm9yY2VGcmFtZVJhdGU9ZnVuY3Rpb24oKXt9fWVsc2V7dmFyIHg9d2luZG93LnNldFRpbWVvdXQseT13aW5kb3cuY2xlYXJUaW1lb3V0O2lmKFwidW5kZWZpbmVkXCIhPT10eXBlb2YgY29uc29sZSl7dmFyIHo9XG53aW5kb3cuY2FuY2VsQW5pbWF0aW9uRnJhbWU7XCJmdW5jdGlvblwiIT09dHlwZW9mIHdpbmRvdy5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUmJmNvbnNvbGUuZXJyb3IoXCJUaGlzIGJyb3dzZXIgZG9lc24ndCBzdXBwb3J0IHJlcXVlc3RBbmltYXRpb25GcmFtZS4gTWFrZSBzdXJlIHRoYXQgeW91IGxvYWQgYSBwb2x5ZmlsbCBpbiBvbGRlciBicm93c2Vycy4gaHR0cHM6Ly9yZWFjdGpzLm9yZy9saW5rL3JlYWN0LXBvbHlmaWxsc1wiKTtcImZ1bmN0aW9uXCIhPT10eXBlb2YgeiYmY29uc29sZS5lcnJvcihcIlRoaXMgYnJvd3NlciBkb2Vzbid0IHN1cHBvcnQgY2FuY2VsQW5pbWF0aW9uRnJhbWUuIE1ha2Ugc3VyZSB0aGF0IHlvdSBsb2FkIGEgcG9seWZpbGwgaW4gb2xkZXIgYnJvd3NlcnMuIGh0dHBzOi8vcmVhY3Rqcy5vcmcvbGluay9yZWFjdC1wb2x5ZmlsbHNcIil9dmFyIEE9ITEsQj1udWxsLEM9LTEsRD01LEU9MDtleHBvcnRzLnVuc3RhYmxlX3Nob3VsZFlpZWxkPWZ1bmN0aW9uKCl7cmV0dXJuIGV4cG9ydHMudW5zdGFibGVfbm93KCk+PVxuRX07az1mdW5jdGlvbigpe307ZXhwb3J0cy51bnN0YWJsZV9mb3JjZUZyYW1lUmF0ZT1mdW5jdGlvbihhKXswPmF8fDEyNTxhP2NvbnNvbGUuZXJyb3IoXCJmb3JjZUZyYW1lUmF0ZSB0YWtlcyBhIHBvc2l0aXZlIGludCBiZXR3ZWVuIDAgYW5kIDEyNSwgZm9yY2luZyBmcmFtZSByYXRlcyBoaWdoZXIgdGhhbiAxMjUgZnBzIGlzIG5vdCBzdXBwb3J0ZWRcIik6RD0wPGE/TWF0aC5mbG9vcigxRTMvYSk6NX07dmFyIEY9bmV3IE1lc3NhZ2VDaGFubmVsLEc9Ri5wb3J0MjtGLnBvcnQxLm9ubWVzc2FnZT1mdW5jdGlvbigpe2lmKG51bGwhPT1CKXt2YXIgYT1leHBvcnRzLnVuc3RhYmxlX25vdygpO0U9YStEO3RyeXtCKCEwLGEpP0cucG9zdE1lc3NhZ2UobnVsbCk6KEE9ITEsQj1udWxsKX1jYXRjaChiKXt0aHJvdyBHLnBvc3RNZXNzYWdlKG51bGwpLGI7fX1lbHNlIEE9ITF9O2Y9ZnVuY3Rpb24oYSl7Qj1hO0F8fChBPSEwLEcucG9zdE1lc3NhZ2UobnVsbCkpfTtnPWZ1bmN0aW9uKGEsYil7Qz1cbngoZnVuY3Rpb24oKXthKGV4cG9ydHMudW5zdGFibGVfbm93KCkpfSxiKX07aD1mdW5jdGlvbigpe3koQyk7Qz0tMX19ZnVuY3Rpb24gSChhLGIpe3ZhciBjPWEubGVuZ3RoO2EucHVzaChiKTthOmZvcig7Oyl7dmFyIGQ9Yy0xPj4+MSxlPWFbZF07aWYodm9pZCAwIT09ZSYmMDxJKGUsYikpYVtkXT1iLGFbY109ZSxjPWQ7ZWxzZSBicmVhayBhfX1mdW5jdGlvbiBKKGEpe2E9YVswXTtyZXR1cm4gdm9pZCAwPT09YT9udWxsOmF9XG5mdW5jdGlvbiBLKGEpe3ZhciBiPWFbMF07aWYodm9pZCAwIT09Yil7dmFyIGM9YS5wb3AoKTtpZihjIT09Yil7YVswXT1jO2E6Zm9yKHZhciBkPTAsZT1hLmxlbmd0aDtkPGU7KXt2YXIgbT0yKihkKzEpLTEsbj1hW21dLHY9bSsxLHI9YVt2XTtpZih2b2lkIDAhPT1uJiYwPkkobixjKSl2b2lkIDAhPT1yJiYwPkkocixuKT8oYVtkXT1yLGFbdl09YyxkPXYpOihhW2RdPW4sYVttXT1jLGQ9bSk7ZWxzZSBpZih2b2lkIDAhPT1yJiYwPkkocixjKSlhW2RdPXIsYVt2XT1jLGQ9djtlbHNlIGJyZWFrIGF9fXJldHVybiBifXJldHVybiBudWxsfWZ1bmN0aW9uIEkoYSxiKXt2YXIgYz1hLnNvcnRJbmRleC1iLnNvcnRJbmRleDtyZXR1cm4gMCE9PWM/YzphLmlkLWIuaWR9dmFyIEw9W10sTT1bXSxOPTEsTz1udWxsLFA9MyxRPSExLFI9ITEsUz0hMTtcbmZ1bmN0aW9uIFQoYSl7Zm9yKHZhciBiPUooTSk7bnVsbCE9PWI7KXtpZihudWxsPT09Yi5jYWxsYmFjaylLKE0pO2Vsc2UgaWYoYi5zdGFydFRpbWU8PWEpSyhNKSxiLnNvcnRJbmRleD1iLmV4cGlyYXRpb25UaW1lLEgoTCxiKTtlbHNlIGJyZWFrO2I9SihNKX19ZnVuY3Rpb24gVShhKXtTPSExO1QoYSk7aWYoIVIpaWYobnVsbCE9PUooTCkpUj0hMCxmKFYpO2Vsc2V7dmFyIGI9SihNKTtudWxsIT09YiYmZyhVLGIuc3RhcnRUaW1lLWEpfX1cbmZ1bmN0aW9uIFYoYSxiKXtSPSExO1MmJihTPSExLGgoKSk7UT0hMDt2YXIgYz1QO3RyeXtUKGIpO2ZvcihPPUooTCk7bnVsbCE9PU8mJighKE8uZXhwaXJhdGlvblRpbWU+Yil8fGEmJiFleHBvcnRzLnVuc3RhYmxlX3Nob3VsZFlpZWxkKCkpOyl7dmFyIGQ9Ty5jYWxsYmFjaztpZihcImZ1bmN0aW9uXCI9PT10eXBlb2YgZCl7Ty5jYWxsYmFjaz1udWxsO1A9Ty5wcmlvcml0eUxldmVsO3ZhciBlPWQoTy5leHBpcmF0aW9uVGltZTw9Yik7Yj1leHBvcnRzLnVuc3RhYmxlX25vdygpO1wiZnVuY3Rpb25cIj09PXR5cGVvZiBlP08uY2FsbGJhY2s9ZTpPPT09SihMKSYmSyhMKTtUKGIpfWVsc2UgSyhMKTtPPUooTCl9aWYobnVsbCE9PU8pdmFyIG09ITA7ZWxzZXt2YXIgbj1KKE0pO251bGwhPT1uJiZnKFUsbi5zdGFydFRpbWUtYik7bT0hMX1yZXR1cm4gbX1maW5hbGx5e089bnVsbCxQPWMsUT0hMX19dmFyIFc9aztleHBvcnRzLnVuc3RhYmxlX0lkbGVQcmlvcml0eT01O1xuZXhwb3J0cy51bnN0YWJsZV9JbW1lZGlhdGVQcmlvcml0eT0xO2V4cG9ydHMudW5zdGFibGVfTG93UHJpb3JpdHk9NDtleHBvcnRzLnVuc3RhYmxlX05vcm1hbFByaW9yaXR5PTM7ZXhwb3J0cy51bnN0YWJsZV9Qcm9maWxpbmc9bnVsbDtleHBvcnRzLnVuc3RhYmxlX1VzZXJCbG9ja2luZ1ByaW9yaXR5PTI7ZXhwb3J0cy51bnN0YWJsZV9jYW5jZWxDYWxsYmFjaz1mdW5jdGlvbihhKXthLmNhbGxiYWNrPW51bGx9O2V4cG9ydHMudW5zdGFibGVfY29udGludWVFeGVjdXRpb249ZnVuY3Rpb24oKXtSfHxRfHwoUj0hMCxmKFYpKX07ZXhwb3J0cy51bnN0YWJsZV9nZXRDdXJyZW50UHJpb3JpdHlMZXZlbD1mdW5jdGlvbigpe3JldHVybiBQfTtleHBvcnRzLnVuc3RhYmxlX2dldEZpcnN0Q2FsbGJhY2tOb2RlPWZ1bmN0aW9uKCl7cmV0dXJuIEooTCl9O1xuZXhwb3J0cy51bnN0YWJsZV9uZXh0PWZ1bmN0aW9uKGEpe3N3aXRjaChQKXtjYXNlIDE6Y2FzZSAyOmNhc2UgMzp2YXIgYj0zO2JyZWFrO2RlZmF1bHQ6Yj1QfXZhciBjPVA7UD1iO3RyeXtyZXR1cm4gYSgpfWZpbmFsbHl7UD1jfX07ZXhwb3J0cy51bnN0YWJsZV9wYXVzZUV4ZWN1dGlvbj1mdW5jdGlvbigpe307ZXhwb3J0cy51bnN0YWJsZV9yZXF1ZXN0UGFpbnQ9VztleHBvcnRzLnVuc3RhYmxlX3J1bldpdGhQcmlvcml0eT1mdW5jdGlvbihhLGIpe3N3aXRjaChhKXtjYXNlIDE6Y2FzZSAyOmNhc2UgMzpjYXNlIDQ6Y2FzZSA1OmJyZWFrO2RlZmF1bHQ6YT0zfXZhciBjPVA7UD1hO3RyeXtyZXR1cm4gYigpfWZpbmFsbHl7UD1jfX07XG5leHBvcnRzLnVuc3RhYmxlX3NjaGVkdWxlQ2FsbGJhY2s9ZnVuY3Rpb24oYSxiLGMpe3ZhciBkPWV4cG9ydHMudW5zdGFibGVfbm93KCk7XCJvYmplY3RcIj09PXR5cGVvZiBjJiZudWxsIT09Yz8oYz1jLmRlbGF5LGM9XCJudW1iZXJcIj09PXR5cGVvZiBjJiYwPGM/ZCtjOmQpOmM9ZDtzd2l0Y2goYSl7Y2FzZSAxOnZhciBlPS0xO2JyZWFrO2Nhc2UgMjplPTI1MDticmVhaztjYXNlIDU6ZT0xMDczNzQxODIzO2JyZWFrO2Nhc2UgNDplPTFFNDticmVhaztkZWZhdWx0OmU9NUUzfWU9YytlO2E9e2lkOk4rKyxjYWxsYmFjazpiLHByaW9yaXR5TGV2ZWw6YSxzdGFydFRpbWU6YyxleHBpcmF0aW9uVGltZTplLHNvcnRJbmRleDotMX07Yz5kPyhhLnNvcnRJbmRleD1jLEgoTSxhKSxudWxsPT09SihMKSYmYT09PUooTSkmJihTP2goKTpTPSEwLGcoVSxjLWQpKSk6KGEuc29ydEluZGV4PWUsSChMLGEpLFJ8fFF8fChSPSEwLGYoVikpKTtyZXR1cm4gYX07XG5leHBvcnRzLnVuc3RhYmxlX3dyYXBDYWxsYmFjaz1mdW5jdGlvbihhKXt2YXIgYj1QO3JldHVybiBmdW5jdGlvbigpe3ZhciBjPVA7UD1iO3RyeXtyZXR1cm4gYS5hcHBseSh0aGlzLGFyZ3VtZW50cyl9ZmluYWxseXtQPWN9fX07XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///7463\n')},7498:(I,g,t)=>{"use strict";I.exports=t.p+"1f94c3be1a48ce1fea59.png"},7522:(module,__unused_webpack_exports,__webpack_require__)=>{"use strict";eval("\n\nvar createError = __webpack_require__(47763);\n\n/**\n * Resolve or reject a Promise based on response status.\n *\n * @param {Function} resolve A function that resolves the promise.\n * @param {Function} reject A function that rejects the promise.\n * @param {object} response The response.\n */\nmodule.exports = function settle(resolve, reject, response) {\n var validateStatus = response.config.validateStatus;\n if (!response.status || !validateStatus || validateStatus(response.status)) {\n resolve(response);\n } else {\n reject(createError(\n 'Request failed with status code ' + response.status,\n response.config,\n null,\n response.request,\n response\n ));\n }\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNzUyMi5qcyIsIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL2l0Zy1uZXh0Z2VuLWZyb250ZW5kLy4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9jb3JlL3NldHRsZS5qcz80NjdmIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIGNyZWF0ZUVycm9yID0gcmVxdWlyZSgnLi9jcmVhdGVFcnJvcicpO1xuXG4vKipcbiAqIFJlc29sdmUgb3IgcmVqZWN0IGEgUHJvbWlzZSBiYXNlZCBvbiByZXNwb25zZSBzdGF0dXMuXG4gKlxuICogQHBhcmFtIHtGdW5jdGlvbn0gcmVzb2x2ZSBBIGZ1bmN0aW9uIHRoYXQgcmVzb2x2ZXMgdGhlIHByb21pc2UuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSByZWplY3QgQSBmdW5jdGlvbiB0aGF0IHJlamVjdHMgdGhlIHByb21pc2UuXG4gKiBAcGFyYW0ge29iamVjdH0gcmVzcG9uc2UgVGhlIHJlc3BvbnNlLlxuICovXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIHNldHRsZShyZXNvbHZlLCByZWplY3QsIHJlc3BvbnNlKSB7XG4gIHZhciB2YWxpZGF0ZVN0YXR1cyA9IHJlc3BvbnNlLmNvbmZpZy52YWxpZGF0ZVN0YXR1cztcbiAgaWYgKCFyZXNwb25zZS5zdGF0dXMgfHwgIXZhbGlkYXRlU3RhdHVzIHx8IHZhbGlkYXRlU3RhdHVzKHJlc3BvbnNlLnN0YXR1cykpIHtcbiAgICByZXNvbHZlKHJlc3BvbnNlKTtcbiAgfSBlbHNlIHtcbiAgICByZWplY3QoY3JlYXRlRXJyb3IoXG4gICAgICAnUmVxdWVzdCBmYWlsZWQgd2l0aCBzdGF0dXMgY29kZSAnICsgcmVzcG9uc2Uuc3RhdHVzLFxuICAgICAgcmVzcG9uc2UuY29uZmlnLFxuICAgICAgbnVsbCxcbiAgICAgIHJlc3BvbnNlLnJlcXVlc3QsXG4gICAgICByZXNwb25zZVxuICAgICkpO1xuICB9XG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///7522\n")},7628:function(module,exports,__webpack_require__){eval(";(function (root, factory, undef) {\n\tif (true) {\n\t\t// CommonJS\n\t\tmodule.exports = exports = factory(__webpack_require__(19021), __webpack_require__(80754), __webpack_require__(84636), __webpack_require__(39506), __webpack_require__(57165));\n\t}\n\telse {}\n}(this, function (CryptoJS) {\n\n\t(function () {\n\t // Shortcuts\n\t var C = CryptoJS;\n\t var C_lib = C.lib;\n\t var WordArray = C_lib.WordArray;\n\t var BlockCipher = C_lib.BlockCipher;\n\t var C_algo = C.algo;\n\n\t // Permuted Choice 1 constants\n\t var PC1 = [\n\t 57, 49, 41, 33, 25, 17, 9, 1,\n\t 58, 50, 42, 34, 26, 18, 10, 2,\n\t 59, 51, 43, 35, 27, 19, 11, 3,\n\t 60, 52, 44, 36, 63, 55, 47, 39,\n\t 31, 23, 15, 7, 62, 54, 46, 38,\n\t 30, 22, 14, 6, 61, 53, 45, 37,\n\t 29, 21, 13, 5, 28, 20, 12, 4\n\t ];\n\n\t // Permuted Choice 2 constants\n\t var PC2 = [\n\t 14, 17, 11, 24, 1, 5,\n\t 3, 28, 15, 6, 21, 10,\n\t 23, 19, 12, 4, 26, 8,\n\t 16, 7, 27, 20, 13, 2,\n\t 41, 52, 31, 37, 47, 55,\n\t 30, 40, 51, 45, 33, 48,\n\t 44, 49, 39, 56, 34, 53,\n\t 46, 42, 50, 36, 29, 32\n\t ];\n\n\t // Cumulative bit shift constants\n\t var BIT_SHIFTS = [1, 2, 4, 6, 8, 10, 12, 14, 15, 17, 19, 21, 23, 25, 27, 28];\n\n\t // SBOXes and round permutation constants\n\t var SBOX_P = [\n\t {\n\t 0x0: 0x808200,\n\t 0x10000000: 0x8000,\n\t 0x20000000: 0x808002,\n\t 0x30000000: 0x2,\n\t 0x40000000: 0x200,\n\t 0x50000000: 0x808202,\n\t 0x60000000: 0x800202,\n\t 0x70000000: 0x800000,\n\t 0x80000000: 0x202,\n\t 0x90000000: 0x800200,\n\t 0xa0000000: 0x8200,\n\t 0xb0000000: 0x808000,\n\t 0xc0000000: 0x8002,\n\t 0xd0000000: 0x800002,\n\t 0xe0000000: 0x0,\n\t 0xf0000000: 0x8202,\n\t 0x8000000: 0x0,\n\t 0x18000000: 0x808202,\n\t 0x28000000: 0x8202,\n\t 0x38000000: 0x8000,\n\t 0x48000000: 0x808200,\n\t 0x58000000: 0x200,\n\t 0x68000000: 0x808002,\n\t 0x78000000: 0x2,\n\t 0x88000000: 0x800200,\n\t 0x98000000: 0x8200,\n\t 0xa8000000: 0x808000,\n\t 0xb8000000: 0x800202,\n\t 0xc8000000: 0x800002,\n\t 0xd8000000: 0x8002,\n\t 0xe8000000: 0x202,\n\t 0xf8000000: 0x800000,\n\t 0x1: 0x8000,\n\t 0x10000001: 0x2,\n\t 0x20000001: 0x808200,\n\t 0x30000001: 0x800000,\n\t 0x40000001: 0x808002,\n\t 0x50000001: 0x8200,\n\t 0x60000001: 0x200,\n\t 0x70000001: 0x800202,\n\t 0x80000001: 0x808202,\n\t 0x90000001: 0x808000,\n\t 0xa0000001: 0x800002,\n\t 0xb0000001: 0x8202,\n\t 0xc0000001: 0x202,\n\t 0xd0000001: 0x800200,\n\t 0xe0000001: 0x8002,\n\t 0xf0000001: 0x0,\n\t 0x8000001: 0x808202,\n\t 0x18000001: 0x808000,\n\t 0x28000001: 0x800000,\n\t 0x38000001: 0x200,\n\t 0x48000001: 0x8000,\n\t 0x58000001: 0x800002,\n\t 0x68000001: 0x2,\n\t 0x78000001: 0x8202,\n\t 0x88000001: 0x8002,\n\t 0x98000001: 0x800202,\n\t 0xa8000001: 0x202,\n\t 0xb8000001: 0x808200,\n\t 0xc8000001: 0x800200,\n\t 0xd8000001: 0x0,\n\t 0xe8000001: 0x8200,\n\t 0xf8000001: 0x808002\n\t },\n\t {\n\t 0x0: 0x40084010,\n\t 0x1000000: 0x4000,\n\t 0x2000000: 0x80000,\n\t 0x3000000: 0x40080010,\n\t 0x4000000: 0x40000010,\n\t 0x5000000: 0x40084000,\n\t 0x6000000: 0x40004000,\n\t 0x7000000: 0x10,\n\t 0x8000000: 0x84000,\n\t 0x9000000: 0x40004010,\n\t 0xa000000: 0x40000000,\n\t 0xb000000: 0x84010,\n\t 0xc000000: 0x80010,\n\t 0xd000000: 0x0,\n\t 0xe000000: 0x4010,\n\t 0xf000000: 0x40080000,\n\t 0x800000: 0x40004000,\n\t 0x1800000: 0x84010,\n\t 0x2800000: 0x10,\n\t 0x3800000: 0x40004010,\n\t 0x4800000: 0x40084010,\n\t 0x5800000: 0x40000000,\n\t 0x6800000: 0x80000,\n\t 0x7800000: 0x40080010,\n\t 0x8800000: 0x80010,\n\t 0x9800000: 0x0,\n\t 0xa800000: 0x4000,\n\t 0xb800000: 0x40080000,\n\t 0xc800000: 0x40000010,\n\t 0xd800000: 0x84000,\n\t 0xe800000: 0x40084000,\n\t 0xf800000: 0x4010,\n\t 0x10000000: 0x0,\n\t 0x11000000: 0x40080010,\n\t 0x12000000: 0x40004010,\n\t 0x13000000: 0x40084000,\n\t 0x14000000: 0x40080000,\n\t 0x15000000: 0x10,\n\t 0x16000000: 0x84010,\n\t 0x17000000: 0x4000,\n\t 0x18000000: 0x4010,\n\t 0x19000000: 0x80000,\n\t 0x1a000000: 0x80010,\n\t 0x1b000000: 0x40000010,\n\t 0x1c000000: 0x84000,\n\t 0x1d000000: 0x40004000,\n\t 0x1e000000: 0x40000000,\n\t 0x1f000000: 0x40084010,\n\t 0x10800000: 0x84010,\n\t 0x11800000: 0x80000,\n\t 0x12800000: 0x40080000,\n\t 0x13800000: 0x4000,\n\t 0x14800000: 0x40004000,\n\t 0x15800000: 0x40084010,\n\t 0x16800000: 0x10,\n\t 0x17800000: 0x40000000,\n\t 0x18800000: 0x40084000,\n\t 0x19800000: 0x40000010,\n\t 0x1a800000: 0x40004010,\n\t 0x1b800000: 0x80010,\n\t 0x1c800000: 0x0,\n\t 0x1d800000: 0x4010,\n\t 0x1e800000: 0x40080010,\n\t 0x1f800000: 0x84000\n\t },\n\t {\n\t 0x0: 0x104,\n\t 0x100000: 0x0,\n\t 0x200000: 0x4000100,\n\t 0x300000: 0x10104,\n\t 0x400000: 0x10004,\n\t 0x500000: 0x4000004,\n\t 0x600000: 0x4010104,\n\t 0x700000: 0x4010000,\n\t 0x800000: 0x4000000,\n\t 0x900000: 0x4010100,\n\t 0xa00000: 0x10100,\n\t 0xb00000: 0x4010004,\n\t 0xc00000: 0x4000104,\n\t 0xd00000: 0x10000,\n\t 0xe00000: 0x4,\n\t 0xf00000: 0x100,\n\t 0x80000: 0x4010100,\n\t 0x180000: 0x4010004,\n\t 0x280000: 0x0,\n\t 0x380000: 0x4000100,\n\t 0x480000: 0x4000004,\n\t 0x580000: 0x10000,\n\t 0x680000: 0x10004,\n\t 0x780000: 0x104,\n\t 0x880000: 0x4,\n\t 0x980000: 0x100,\n\t 0xa80000: 0x4010000,\n\t 0xb80000: 0x10104,\n\t 0xc80000: 0x10100,\n\t 0xd80000: 0x4000104,\n\t 0xe80000: 0x4010104,\n\t 0xf80000: 0x4000000,\n\t 0x1000000: 0x4010100,\n\t 0x1100000: 0x10004,\n\t 0x1200000: 0x10000,\n\t 0x1300000: 0x4000100,\n\t 0x1400000: 0x100,\n\t 0x1500000: 0x4010104,\n\t 0x1600000: 0x4000004,\n\t 0x1700000: 0x0,\n\t 0x1800000: 0x4000104,\n\t 0x1900000: 0x4000000,\n\t 0x1a00000: 0x4,\n\t 0x1b00000: 0x10100,\n\t 0x1c00000: 0x4010000,\n\t 0x1d00000: 0x104,\n\t 0x1e00000: 0x10104,\n\t 0x1f00000: 0x4010004,\n\t 0x1080000: 0x4000000,\n\t 0x1180000: 0x104,\n\t 0x1280000: 0x4010100,\n\t 0x1380000: 0x0,\n\t 0x1480000: 0x10004,\n\t 0x1580000: 0x4000100,\n\t 0x1680000: 0x100,\n\t 0x1780000: 0x4010004,\n\t 0x1880000: 0x10000,\n\t 0x1980000: 0x4010104,\n\t 0x1a80000: 0x10104,\n\t 0x1b80000: 0x4000004,\n\t 0x1c80000: 0x4000104,\n\t 0x1d80000: 0x4010000,\n\t 0x1e80000: 0x4,\n\t 0x1f80000: 0x10100\n\t },\n\t {\n\t 0x0: 0x80401000,\n\t 0x10000: 0x80001040,\n\t 0x20000: 0x401040,\n\t 0x30000: 0x80400000,\n\t 0x40000: 0x0,\n\t 0x50000: 0x401000,\n\t 0x60000: 0x80000040,\n\t 0x70000: 0x400040,\n\t 0x80000: 0x80000000,\n\t 0x90000: 0x400000,\n\t 0xa0000: 0x40,\n\t 0xb0000: 0x80001000,\n\t 0xc0000: 0x80400040,\n\t 0xd0000: 0x1040,\n\t 0xe0000: 0x1000,\n\t 0xf0000: 0x80401040,\n\t 0x8000: 0x80001040,\n\t 0x18000: 0x40,\n\t 0x28000: 0x80400040,\n\t 0x38000: 0x80001000,\n\t 0x48000: 0x401000,\n\t 0x58000: 0x80401040,\n\t 0x68000: 0x0,\n\t 0x78000: 0x80400000,\n\t 0x88000: 0x1000,\n\t 0x98000: 0x80401000,\n\t 0xa8000: 0x400000,\n\t 0xb8000: 0x1040,\n\t 0xc8000: 0x80000000,\n\t 0xd8000: 0x400040,\n\t 0xe8000: 0x401040,\n\t 0xf8000: 0x80000040,\n\t 0x100000: 0x400040,\n\t 0x110000: 0x401000,\n\t 0x120000: 0x80000040,\n\t 0x130000: 0x0,\n\t 0x140000: 0x1040,\n\t 0x150000: 0x80400040,\n\t 0x160000: 0x80401000,\n\t 0x170000: 0x80001040,\n\t 0x180000: 0x80401040,\n\t 0x190000: 0x80000000,\n\t 0x1a0000: 0x80400000,\n\t 0x1b0000: 0x401040,\n\t 0x1c0000: 0x80001000,\n\t 0x1d0000: 0x400000,\n\t 0x1e0000: 0x40,\n\t 0x1f0000: 0x1000,\n\t 0x108000: 0x80400000,\n\t 0x118000: 0x80401040,\n\t 0x128000: 0x0,\n\t 0x138000: 0x401000,\n\t 0x148000: 0x400040,\n\t 0x158000: 0x80000000,\n\t 0x168000: 0x80001040,\n\t 0x178000: 0x40,\n\t 0x188000: 0x80000040,\n\t 0x198000: 0x1000,\n\t 0x1a8000: 0x80001000,\n\t 0x1b8000: 0x80400040,\n\t 0x1c8000: 0x1040,\n\t 0x1d8000: 0x80401000,\n\t 0x1e8000: 0x400000,\n\t 0x1f8000: 0x401040\n\t },\n\t {\n\t 0x0: 0x80,\n\t 0x1000: 0x1040000,\n\t 0x2000: 0x40000,\n\t 0x3000: 0x20000000,\n\t 0x4000: 0x20040080,\n\t 0x5000: 0x1000080,\n\t 0x6000: 0x21000080,\n\t 0x7000: 0x40080,\n\t 0x8000: 0x1000000,\n\t 0x9000: 0x20040000,\n\t 0xa000: 0x20000080,\n\t 0xb000: 0x21040080,\n\t 0xc000: 0x21040000,\n\t 0xd000: 0x0,\n\t 0xe000: 0x1040080,\n\t 0xf000: 0x21000000,\n\t 0x800: 0x1040080,\n\t 0x1800: 0x21000080,\n\t 0x2800: 0x80,\n\t 0x3800: 0x1040000,\n\t 0x4800: 0x40000,\n\t 0x5800: 0x20040080,\n\t 0x6800: 0x21040000,\n\t 0x7800: 0x20000000,\n\t 0x8800: 0x20040000,\n\t 0x9800: 0x0,\n\t 0xa800: 0x21040080,\n\t 0xb800: 0x1000080,\n\t 0xc800: 0x20000080,\n\t 0xd800: 0x21000000,\n\t 0xe800: 0x1000000,\n\t 0xf800: 0x40080,\n\t 0x10000: 0x40000,\n\t 0x11000: 0x80,\n\t 0x12000: 0x20000000,\n\t 0x13000: 0x21000080,\n\t 0x14000: 0x1000080,\n\t 0x15000: 0x21040000,\n\t 0x16000: 0x20040080,\n\t 0x17000: 0x1000000,\n\t 0x18000: 0x21040080,\n\t 0x19000: 0x21000000,\n\t 0x1a000: 0x1040000,\n\t 0x1b000: 0x20040000,\n\t 0x1c000: 0x40080,\n\t 0x1d000: 0x20000080,\n\t 0x1e000: 0x0,\n\t 0x1f000: 0x1040080,\n\t 0x10800: 0x21000080,\n\t 0x11800: 0x1000000,\n\t 0x12800: 0x1040000,\n\t 0x13800: 0x20040080,\n\t 0x14800: 0x20000000,\n\t 0x15800: 0x1040080,\n\t 0x16800: 0x80,\n\t 0x17800: 0x21040000,\n\t 0x18800: 0x40080,\n\t 0x19800: 0x21040080,\n\t 0x1a800: 0x0,\n\t 0x1b800: 0x21000000,\n\t 0x1c800: 0x1000080,\n\t 0x1d800: 0x40000,\n\t 0x1e800: 0x20040000,\n\t 0x1f800: 0x20000080\n\t },\n\t {\n\t 0x0: 0x10000008,\n\t 0x100: 0x2000,\n\t 0x200: 0x10200000,\n\t 0x300: 0x10202008,\n\t 0x400: 0x10002000,\n\t 0x500: 0x200000,\n\t 0x600: 0x200008,\n\t 0x700: 0x10000000,\n\t 0x800: 0x0,\n\t 0x900: 0x10002008,\n\t 0xa00: 0x202000,\n\t 0xb00: 0x8,\n\t 0xc00: 0x10200008,\n\t 0xd00: 0x202008,\n\t 0xe00: 0x2008,\n\t 0xf00: 0x10202000,\n\t 0x80: 0x10200000,\n\t 0x180: 0x10202008,\n\t 0x280: 0x8,\n\t 0x380: 0x200000,\n\t 0x480: 0x202008,\n\t 0x580: 0x10000008,\n\t 0x680: 0x10002000,\n\t 0x780: 0x2008,\n\t 0x880: 0x200008,\n\t 0x980: 0x2000,\n\t 0xa80: 0x10002008,\n\t 0xb80: 0x10200008,\n\t 0xc80: 0x0,\n\t 0xd80: 0x10202000,\n\t 0xe80: 0x202000,\n\t 0xf80: 0x10000000,\n\t 0x1000: 0x10002000,\n\t 0x1100: 0x10200008,\n\t 0x1200: 0x10202008,\n\t 0x1300: 0x2008,\n\t 0x1400: 0x200000,\n\t 0x1500: 0x10000000,\n\t 0x1600: 0x10000008,\n\t 0x1700: 0x202000,\n\t 0x1800: 0x202008,\n\t 0x1900: 0x0,\n\t 0x1a00: 0x8,\n\t 0x1b00: 0x10200000,\n\t 0x1c00: 0x2000,\n\t 0x1d00: 0x10002008,\n\t 0x1e00: 0x10202000,\n\t 0x1f00: 0x200008,\n\t 0x1080: 0x8,\n\t 0x1180: 0x202000,\n\t 0x1280: 0x200000,\n\t 0x1380: 0x10000008,\n\t 0x1480: 0x10002000,\n\t 0x1580: 0x2008,\n\t 0x1680: 0x10202008,\n\t 0x1780: 0x10200000,\n\t 0x1880: 0x10202000,\n\t 0x1980: 0x10200008,\n\t 0x1a80: 0x2000,\n\t 0x1b80: 0x202008,\n\t 0x1c80: 0x200008,\n\t 0x1d80: 0x0,\n\t 0x1e80: 0x10000000,\n\t 0x1f80: 0x10002008\n\t },\n\t {\n\t 0x0: 0x100000,\n\t 0x10: 0x2000401,\n\t 0x20: 0x400,\n\t 0x30: 0x100401,\n\t 0x40: 0x2100401,\n\t 0x50: 0x0,\n\t 0x60: 0x1,\n\t 0x70: 0x2100001,\n\t 0x80: 0x2000400,\n\t 0x90: 0x100001,\n\t 0xa0: 0x2000001,\n\t 0xb0: 0x2100400,\n\t 0xc0: 0x2100000,\n\t 0xd0: 0x401,\n\t 0xe0: 0x100400,\n\t 0xf0: 0x2000000,\n\t 0x8: 0x2100001,\n\t 0x18: 0x0,\n\t 0x28: 0x2000401,\n\t 0x38: 0x2100400,\n\t 0x48: 0x100000,\n\t 0x58: 0x2000001,\n\t 0x68: 0x2000000,\n\t 0x78: 0x401,\n\t 0x88: 0x100401,\n\t 0x98: 0x2000400,\n\t 0xa8: 0x2100000,\n\t 0xb8: 0x100001,\n\t 0xc8: 0x400,\n\t 0xd8: 0x2100401,\n\t 0xe8: 0x1,\n\t 0xf8: 0x100400,\n\t 0x100: 0x2000000,\n\t 0x110: 0x100000,\n\t 0x120: 0x2000401,\n\t 0x130: 0x2100001,\n\t 0x140: 0x100001,\n\t 0x150: 0x2000400,\n\t 0x160: 0x2100400,\n\t 0x170: 0x100401,\n\t 0x180: 0x401,\n\t 0x190: 0x2100401,\n\t 0x1a0: 0x100400,\n\t 0x1b0: 0x1,\n\t 0x1c0: 0x0,\n\t 0x1d0: 0x2100000,\n\t 0x1e0: 0x2000001,\n\t 0x1f0: 0x400,\n\t 0x108: 0x100400,\n\t 0x118: 0x2000401,\n\t 0x128: 0x2100001,\n\t 0x138: 0x1,\n\t 0x148: 0x2000000,\n\t 0x158: 0x100000,\n\t 0x168: 0x401,\n\t 0x178: 0x2100400,\n\t 0x188: 0x2000001,\n\t 0x198: 0x2100000,\n\t 0x1a8: 0x0,\n\t 0x1b8: 0x2100401,\n\t 0x1c8: 0x100401,\n\t 0x1d8: 0x400,\n\t 0x1e8: 0x2000400,\n\t 0x1f8: 0x100001\n\t },\n\t {\n\t 0x0: 0x8000820,\n\t 0x1: 0x20000,\n\t 0x2: 0x8000000,\n\t 0x3: 0x20,\n\t 0x4: 0x20020,\n\t 0x5: 0x8020820,\n\t 0x6: 0x8020800,\n\t 0x7: 0x800,\n\t 0x8: 0x8020000,\n\t 0x9: 0x8000800,\n\t 0xa: 0x20800,\n\t 0xb: 0x8020020,\n\t 0xc: 0x820,\n\t 0xd: 0x0,\n\t 0xe: 0x8000020,\n\t 0xf: 0x20820,\n\t 0x80000000: 0x800,\n\t 0x80000001: 0x8020820,\n\t 0x80000002: 0x8000820,\n\t 0x80000003: 0x8000000,\n\t 0x80000004: 0x8020000,\n\t 0x80000005: 0x20800,\n\t 0x80000006: 0x20820,\n\t 0x80000007: 0x20,\n\t 0x80000008: 0x8000020,\n\t 0x80000009: 0x820,\n\t 0x8000000a: 0x20020,\n\t 0x8000000b: 0x8020800,\n\t 0x8000000c: 0x0,\n\t 0x8000000d: 0x8020020,\n\t 0x8000000e: 0x8000800,\n\t 0x8000000f: 0x20000,\n\t 0x10: 0x20820,\n\t 0x11: 0x8020800,\n\t 0x12: 0x20,\n\t 0x13: 0x800,\n\t 0x14: 0x8000800,\n\t 0x15: 0x8000020,\n\t 0x16: 0x8020020,\n\t 0x17: 0x20000,\n\t 0x18: 0x0,\n\t 0x19: 0x20020,\n\t 0x1a: 0x8020000,\n\t 0x1b: 0x8000820,\n\t 0x1c: 0x8020820,\n\t 0x1d: 0x20800,\n\t 0x1e: 0x820,\n\t 0x1f: 0x8000000,\n\t 0x80000010: 0x20000,\n\t 0x80000011: 0x800,\n\t 0x80000012: 0x8020020,\n\t 0x80000013: 0x20820,\n\t 0x80000014: 0x20,\n\t 0x80000015: 0x8020000,\n\t 0x80000016: 0x8000000,\n\t 0x80000017: 0x8000820,\n\t 0x80000018: 0x8020820,\n\t 0x80000019: 0x8000020,\n\t 0x8000001a: 0x8000800,\n\t 0x8000001b: 0x0,\n\t 0x8000001c: 0x20800,\n\t 0x8000001d: 0x820,\n\t 0x8000001e: 0x20020,\n\t 0x8000001f: 0x8020800\n\t }\n\t ];\n\n\t // Masks that select the SBOX input\n\t var SBOX_MASK = [\n\t 0xf8000001, 0x1f800000, 0x01f80000, 0x001f8000,\n\t 0x0001f800, 0x00001f80, 0x000001f8, 0x8000001f\n\t ];\n\n\t /**\n\t * DES block cipher algorithm.\n\t */\n\t var DES = C_algo.DES = BlockCipher.extend({\n\t _doReset: function () {\n\t // Shortcuts\n\t var key = this._key;\n\t var keyWords = key.words;\n\n\t // Select 56 bits according to PC1\n\t var keyBits = [];\n\t for (var i = 0; i < 56; i++) {\n\t var keyBitPos = PC1[i] - 1;\n\t keyBits[i] = (keyWords[keyBitPos >>> 5] >>> (31 - keyBitPos % 32)) & 1;\n\t }\n\n\t // Assemble 16 subkeys\n\t var subKeys = this._subKeys = [];\n\t for (var nSubKey = 0; nSubKey < 16; nSubKey++) {\n\t // Create subkey\n\t var subKey = subKeys[nSubKey] = [];\n\n\t // Shortcut\n\t var bitShift = BIT_SHIFTS[nSubKey];\n\n\t // Select 48 bits according to PC2\n\t for (var i = 0; i < 24; i++) {\n\t // Select from the left 28 key bits\n\t subKey[(i / 6) | 0] |= keyBits[((PC2[i] - 1) + bitShift) % 28] << (31 - i % 6);\n\n\t // Select from the right 28 key bits\n\t subKey[4 + ((i / 6) | 0)] |= keyBits[28 + (((PC2[i + 24] - 1) + bitShift) % 28)] << (31 - i % 6);\n\t }\n\n\t // Since each subkey is applied to an expanded 32-bit input,\n\t // the subkey can be broken into 8 values scaled to 32-bits,\n\t // which allows the key to be used without expansion\n\t subKey[0] = (subKey[0] << 1) | (subKey[0] >>> 31);\n\t for (var i = 1; i < 7; i++) {\n\t subKey[i] = subKey[i] >>> ((i - 1) * 4 + 3);\n\t }\n\t subKey[7] = (subKey[7] << 5) | (subKey[7] >>> 27);\n\t }\n\n\t // Compute inverse subkeys\n\t var invSubKeys = this._invSubKeys = [];\n\t for (var i = 0; i < 16; i++) {\n\t invSubKeys[i] = subKeys[15 - i];\n\t }\n\t },\n\n\t encryptBlock: function (M, offset) {\n\t this._doCryptBlock(M, offset, this._subKeys);\n\t },\n\n\t decryptBlock: function (M, offset) {\n\t this._doCryptBlock(M, offset, this._invSubKeys);\n\t },\n\n\t _doCryptBlock: function (M, offset, subKeys) {\n\t // Get input\n\t this._lBlock = M[offset];\n\t this._rBlock = M[offset + 1];\n\n\t // Initial permutation\n\t exchangeLR.call(this, 4, 0x0f0f0f0f);\n\t exchangeLR.call(this, 16, 0x0000ffff);\n\t exchangeRL.call(this, 2, 0x33333333);\n\t exchangeRL.call(this, 8, 0x00ff00ff);\n\t exchangeLR.call(this, 1, 0x55555555);\n\n\t // Rounds\n\t for (var round = 0; round < 16; round++) {\n\t // Shortcuts\n\t var subKey = subKeys[round];\n\t var lBlock = this._lBlock;\n\t var rBlock = this._rBlock;\n\n\t // Feistel function\n\t var f = 0;\n\t for (var i = 0; i < 8; i++) {\n\t f |= SBOX_P[i][((rBlock ^ subKey[i]) & SBOX_MASK[i]) >>> 0];\n\t }\n\t this._lBlock = rBlock;\n\t this._rBlock = lBlock ^ f;\n\t }\n\n\t // Undo swap from last round\n\t var t = this._lBlock;\n\t this._lBlock = this._rBlock;\n\t this._rBlock = t;\n\n\t // Final permutation\n\t exchangeLR.call(this, 1, 0x55555555);\n\t exchangeRL.call(this, 8, 0x00ff00ff);\n\t exchangeRL.call(this, 2, 0x33333333);\n\t exchangeLR.call(this, 16, 0x0000ffff);\n\t exchangeLR.call(this, 4, 0x0f0f0f0f);\n\n\t // Set output\n\t M[offset] = this._lBlock;\n\t M[offset + 1] = this._rBlock;\n\t },\n\n\t keySize: 64/32,\n\n\t ivSize: 64/32,\n\n\t blockSize: 64/32\n\t });\n\n\t // Swap bits across the left and right words\n\t function exchangeLR(offset, mask) {\n\t var t = ((this._lBlock >>> offset) ^ this._rBlock) & mask;\n\t this._rBlock ^= t;\n\t this._lBlock ^= t << offset;\n\t }\n\n\t function exchangeRL(offset, mask) {\n\t var t = ((this._rBlock >>> offset) ^ this._lBlock) & mask;\n\t this._lBlock ^= t;\n\t this._rBlock ^= t << offset;\n\t }\n\n\t /**\n\t * Shortcut functions to the cipher's object interface.\n\t *\n\t * @example\n\t *\n\t * var ciphertext = CryptoJS.DES.encrypt(message, key, cfg);\n\t * var plaintext = CryptoJS.DES.decrypt(ciphertext, key, cfg);\n\t */\n\t C.DES = BlockCipher._createHelper(DES);\n\n\t /**\n\t * Triple-DES block cipher algorithm.\n\t */\n\t var TripleDES = C_algo.TripleDES = BlockCipher.extend({\n\t _doReset: function () {\n\t // Shortcuts\n\t var key = this._key;\n\t var keyWords = key.words;\n\t // Make sure the key length is valid (64, 128 or >= 192 bit)\n\t if (keyWords.length !== 2 && keyWords.length !== 4 && keyWords.length < 6) {\n\t throw new Error('Invalid key length - 3DES requires the key length to be 64, 128, 192 or >192.');\n\t }\n\n\t // Extend the key according to the keying options defined in 3DES standard\n\t var key1 = keyWords.slice(0, 2);\n\t var key2 = keyWords.length < 4 ? keyWords.slice(0, 2) : keyWords.slice(2, 4);\n\t var key3 = keyWords.length < 6 ? keyWords.slice(0, 2) : keyWords.slice(4, 6);\n\n\t // Create DES instances\n\t this._des1 = DES.createEncryptor(WordArray.create(key1));\n\t this._des2 = DES.createEncryptor(WordArray.create(key2));\n\t this._des3 = DES.createEncryptor(WordArray.create(key3));\n\t },\n\n\t encryptBlock: function (M, offset) {\n\t this._des1.encryptBlock(M, offset);\n\t this._des2.decryptBlock(M, offset);\n\t this._des3.encryptBlock(M, offset);\n\t },\n\n\t decryptBlock: function (M, offset) {\n\t this._des3.decryptBlock(M, offset);\n\t this._des2.encryptBlock(M, offset);\n\t this._des1.decryptBlock(M, offset);\n\t },\n\n\t keySize: 192/32,\n\n\t ivSize: 64/32,\n\n\t blockSize: 64/32\n\t });\n\n\t /**\n\t * Shortcut functions to the cipher's object interface.\n\t *\n\t * @example\n\t *\n\t * var ciphertext = CryptoJS.TripleDES.encrypt(message, key, cfg);\n\t * var plaintext = CryptoJS.TripleDES.decrypt(ciphertext, key, cfg);\n\t */\n\t C.TripleDES = BlockCipher._createHelper(TripleDES);\n\t}());\n\n\n\treturn CryptoJS.TripleDES;\n\n}));//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNzYyOC5qcyIsIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFRQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL2l0Zy1uZXh0Z2VuLWZyb250ZW5kLy4vbm9kZV9tb2R1bGVzL2NyeXB0by1qcy90cmlwbGVkZXMuanM/YTQwZSJdLCJzb3VyY2VzQ29udGVudCI6WyI7KGZ1bmN0aW9uIChyb290LCBmYWN0b3J5LCB1bmRlZikge1xuXHRpZiAodHlwZW9mIGV4cG9ydHMgPT09IFwib2JqZWN0XCIpIHtcblx0XHQvLyBDb21tb25KU1xuXHRcdG1vZHVsZS5leHBvcnRzID0gZXhwb3J0cyA9IGZhY3RvcnkocmVxdWlyZShcIi4vY29yZVwiKSwgcmVxdWlyZShcIi4vZW5jLWJhc2U2NFwiKSwgcmVxdWlyZShcIi4vbWQ1XCIpLCByZXF1aXJlKFwiLi9ldnBrZGZcIiksIHJlcXVpcmUoXCIuL2NpcGhlci1jb3JlXCIpKTtcblx0fVxuXHRlbHNlIGlmICh0eXBlb2YgZGVmaW5lID09PSBcImZ1bmN0aW9uXCIgJiYgZGVmaW5lLmFtZCkge1xuXHRcdC8vIEFNRFxuXHRcdGRlZmluZShbXCIuL2NvcmVcIiwgXCIuL2VuYy1iYXNlNjRcIiwgXCIuL21kNVwiLCBcIi4vZXZwa2RmXCIsIFwiLi9jaXBoZXItY29yZVwiXSwgZmFjdG9yeSk7XG5cdH1cblx0ZWxzZSB7XG5cdFx0Ly8gR2xvYmFsIChicm93c2VyKVxuXHRcdGZhY3Rvcnkocm9vdC5DcnlwdG9KUyk7XG5cdH1cbn0odGhpcywgZnVuY3Rpb24gKENyeXB0b0pTKSB7XG5cblx0KGZ1bmN0aW9uICgpIHtcblx0ICAgIC8vIFNob3J0Y3V0c1xuXHQgICAgdmFyIEMgPSBDcnlwdG9KUztcblx0ICAgIHZhciBDX2xpYiA9IEMubGliO1xuXHQgICAgdmFyIFdvcmRBcnJheSA9IENfbGliLldvcmRBcnJheTtcblx0ICAgIHZhciBCbG9ja0NpcGhlciA9IENfbGliLkJsb2NrQ2lwaGVyO1xuXHQgICAgdmFyIENfYWxnbyA9IEMuYWxnbztcblxuXHQgICAgLy8gUGVybXV0ZWQgQ2hvaWNlIDEgY29uc3RhbnRzXG5cdCAgICB2YXIgUEMxID0gW1xuXHQgICAgICAgIDU3LCA0OSwgNDEsIDMzLCAyNSwgMTcsIDksICAxLFxuXHQgICAgICAgIDU4LCA1MCwgNDIsIDM0LCAyNiwgMTgsIDEwLCAyLFxuXHQgICAgICAgIDU5LCA1MSwgNDMsIDM1LCAyNywgMTksIDExLCAzLFxuXHQgICAgICAgIDYwLCA1MiwgNDQsIDM2LCA2MywgNTUsIDQ3LCAzOSxcblx0ICAgICAgICAzMSwgMjMsIDE1LCA3LCAgNjIsIDU0LCA0NiwgMzgsXG5cdCAgICAgICAgMzAsIDIyLCAxNCwgNiwgIDYxLCA1MywgNDUsIDM3LFxuXHQgICAgICAgIDI5LCAyMSwgMTMsIDUsICAyOCwgMjAsIDEyLCA0XG5cdCAgICBdO1xuXG5cdCAgICAvLyBQZXJtdXRlZCBDaG9pY2UgMiBjb25zdGFudHNcblx0ICAgIHZhciBQQzIgPSBbXG5cdCAgICAgICAgMTQsIDE3LCAxMSwgMjQsIDEsICA1LFxuXHQgICAgICAgIDMsICAyOCwgMTUsIDYsICAyMSwgMTAsXG5cdCAgICAgICAgMjMsIDE5LCAxMiwgNCwgIDI2LCA4LFxuXHQgICAgICAgIDE2LCA3LCAgMjcsIDIwLCAxMywgMixcblx0ICAgICAgICA0MSwgNTIsIDMxLCAzNywgNDcsIDU1LFxuXHQgICAgICAgIDMwLCA0MCwgNTEsIDQ1LCAzMywgNDgsXG5cdCAgICAgICAgNDQsIDQ5LCAzOSwgNTYsIDM0LCA1Myxcblx0ICAgICAgICA0NiwgNDIsIDUwLCAzNiwgMjksIDMyXG5cdCAgICBdO1xuXG5cdCAgICAvLyBDdW11bGF0aXZlIGJpdCBzaGlmdCBjb25zdGFudHNcblx0ICAgIHZhciBCSVRfU0hJRlRTID0gWzEsICAyLCAgNCwgIDYsICA4LCAgMTAsIDEyLCAxNCwgMTUsIDE3LCAxOSwgMjEsIDIzLCAyNSwgMjcsIDI4XTtcblxuXHQgICAgLy8gU0JPWGVzIGFuZCByb3VuZCBwZXJtdXRhdGlvbiBjb25zdGFudHNcblx0ICAgIHZhciBTQk9YX1AgPSBbXG5cdCAgICAgICAge1xuXHQgICAgICAgICAgICAweDA6IDB4ODA4MjAwLFxuXHQgICAgICAgICAgICAweDEwMDAwMDAwOiAweDgwMDAsXG5cdCAgICAgICAgICAgIDB4MjAwMDAwMDA6IDB4ODA4MDAyLFxuXHQgICAgICAgICAgICAweDMwMDAwMDAwOiAweDIsXG5cdCAgICAgICAgICAgIDB4NDAwMDAwMDA6IDB4MjAwLFxuXHQgICAgICAgICAgICAweDUwMDAwMDAwOiAweDgwODIwMixcblx0ICAgICAgICAgICAgMHg2MDAwMDAwMDogMHg4MDAyMDIsXG5cdCAgICAgICAgICAgIDB4NzAwMDAwMDA6IDB4ODAwMDAwLFxuXHQgICAgICAgICAgICAweDgwMDAwMDAwOiAweDIwMixcblx0ICAgICAgICAgICAgMHg5MDAwMDAwMDogMHg4MDAyMDAsXG5cdCAgICAgICAgICAgIDB4YTAwMDAwMDA6IDB4ODIwMCxcblx0ICAgICAgICAgICAgMHhiMDAwMDAwMDogMHg4MDgwMDAsXG5cdCAgICAgICAgICAgIDB4YzAwMDAwMDA6IDB4ODAwMixcblx0ICAgICAgICAgICAgMHhkMDAwMDAwMDogMHg4MDAwMDIsXG5cdCAgICAgICAgICAgIDB4ZTAwMDAwMDA6IDB4MCxcblx0ICAgICAgICAgICAgMHhmMDAwMDAwMDogMHg4MjAyLFxuXHQgICAgICAgICAgICAweDgwMDAwMDA6IDB4MCxcblx0ICAgICAgICAgICAgMHgxODAwMDAwMDogMHg4MDgyMDIsXG5cdCAgICAgICAgICAgIDB4MjgwMDAwMDA6IDB4ODIwMixcblx0ICAgICAgICAgICAgMHgzODAwMDAwMDogMHg4MDAwLFxuXHQgICAgICAgICAgICAweDQ4MDAwMDAwOiAweDgwODIwMCxcblx0ICAgICAgICAgICAgMHg1ODAwMDAwMDogMHgyMDAsXG5cdCAgICAgICAgICAgIDB4NjgwMDAwMDA6IDB4ODA4MDAyLFxuXHQgICAgICAgICAgICAweDc4MDAwMDAwOiAweDIsXG5cdCAgICAgICAgICAgIDB4ODgwMDAwMDA6IDB4ODAwMjAwLFxuXHQgICAgICAgICAgICAweDk4MDAwMDAwOiAweDgyMDAsXG5cdCAgICAgICAgICAgIDB4YTgwMDAwMDA6IDB4ODA4MDAwLFxuXHQgICAgICAgICAgICAweGI4MDAwMDAwOiAweDgwMDIwMixcblx0ICAgICAgICAgICAgMHhjODAwMDAwMDogMHg4MDAwMDIsXG5cdCAgICAgICAgICAgIDB4ZDgwMDAwMDA6IDB4ODAwMixcblx0ICAgICAgICAgICAgMHhlODAwMDAwMDogMHgyMDIsXG5cdCAgICAgICAgICAgIDB4ZjgwMDAwMDA6IDB4ODAwMDAwLFxuXHQgICAgICAgICAgICAweDE6IDB4ODAwMCxcblx0ICAgICAgICAgICAgMHgxMDAwMDAwMTogMHgyLFxuXHQgICAgICAgICAgICAweDIwMDAwMDAxOiAweDgwODIwMCxcblx0ICAgICAgICAgICAgMHgzMDAwMDAwMTogMHg4MDAwMDAsXG5cdCAgICAgICAgICAgIDB4NDAwMDAwMDE6IDB4ODA4MDAyLFxuXHQgICAgICAgICAgICAweDUwMDAwMDAxOiAweDgyMDAsXG5cdCAgICAgICAgICAgIDB4NjAwMDAwMDE6IDB4MjAwLFxuXHQgICAgICAgICAgICAweDcwMDAwMDAxOiAweDgwMDIwMixcblx0ICAgICAgICAgICAgMHg4MDAwMDAwMTogMHg4MDgyMDIsXG5cdCAgICAgICAgICAgIDB4OTAwMDAwMDE6IDB4ODA4MDAwLFxuXHQgICAgICAgICAgICAweGEwMDAwMDAxOiAweDgwMDAwMixcblx0ICAgICAgICAgICAgMHhiMDAwMDAwMTogMHg4MjAyLFxuXHQgICAgICAgICAgICAweGMwMDAwMDAxOiAweDIwMixcblx0ICAgICAgICAgICAgMHhkMDAwMDAwMTogMHg4MDAyMDAsXG5cdCAgICAgICAgICAgIDB4ZTAwMDAwMDE6IDB4ODAwMixcblx0ICAgICAgICAgICAgMHhmMDAwMDAwMTogMHgwLFxuXHQgICAgICAgICAgICAweDgwMDAwMDE6IDB4ODA4MjAyLFxuXHQgICAgICAgICAgICAweDE4MDAwMDAxOiAweDgwODAwMCxcblx0ICAgICAgICAgICAgMHgyODAwMDAwMTogMHg4MDAwMDAsXG5cdCAgICAgICAgICAgIDB4MzgwMDAwMDE6IDB4MjAwLFxuXHQgICAgICAgICAgICAweDQ4MDAwMDAxOiAweDgwMDAsXG5cdCAgICAgICAgICAgIDB4NTgwMDAwMDE6IDB4ODAwMDAyLFxuXHQgICAgICAgICAgICAweDY4MDAwMDAxOiAweDIsXG5cdCAgICAgICAgICAgIDB4NzgwMDAwMDE6IDB4ODIwMixcblx0ICAgICAgICAgICAgMHg4ODAwMDAwMTogMHg4MDAyLFxuXHQgICAgICAgICAgICAweDk4MDAwMDAxOiAweDgwMDIwMixcblx0ICAgICAgICAgICAgMHhhODAwMDAwMTogMHgyMDIsXG5cdCAgICAgICAgICAgIDB4YjgwMDAwMDE6IDB4ODA4MjAwLFxuXHQgICAgICAgICAgICAweGM4MDAwMDAxOiAweDgwMDIwMCxcblx0ICAgICAgICAgICAgMHhkODAwMDAwMTogMHgwLFxuXHQgICAgICAgICAgICAweGU4MDAwMDAxOiAweDgyMDAsXG5cdCAgICAgICAgICAgIDB4ZjgwMDAwMDE6IDB4ODA4MDAyXG5cdCAgICAgICAgfSxcblx0ICAgICAgICB7XG5cdCAgICAgICAgICAgIDB4MDogMHg0MDA4NDAxMCxcblx0ICAgICAgICAgICAgMHgxMDAwMDAwOiAweDQwMDAsXG5cdCAgICAgICAgICAgIDB4MjAwMDAwMDogMHg4MDAwMCxcblx0ICAgICAgICAgICAgMHgzMDAwMDAwOiAweDQwMDgwMDEwLFxuXHQgICAgICAgICAgICAweDQwMDAwMDA6IDB4NDAwMDAwMTAsXG5cdCAgICAgICAgICAgIDB4NTAwMDAwMDogMHg0MDA4NDAwMCxcblx0ICAgICAgICAgICAgMHg2MDAwMDAwOiAweDQwMDA0MDAwLFxuXHQgICAgICAgICAgICAweDcwMDAwMDA6IDB4MTAsXG5cdCAgICAgICAgICAgIDB4ODAwMDAwMDogMHg4NDAwMCxcblx0ICAgICAgICAgICAgMHg5MDAwMDAwOiAweDQwMDA0MDEwLFxuXHQgICAgICAgICAgICAweGEwMDAwMDA6IDB4NDAwMDAwMDAsXG5cdCAgICAgICAgICAgIDB4YjAwMDAwMDogMHg4NDAxMCxcblx0ICAgICAgICAgICAgMHhjMDAwMDAwOiAweDgwMDEwLFxuXHQgICAgICAgICAgICAweGQwMDAwMDA6IDB4MCxcblx0ICAgICAgICAgICAgMHhlMDAwMDAwOiAweDQwMTAsXG5cdCAgICAgICAgICAgIDB4ZjAwMDAwMDogMHg0MDA4MDAwMCxcblx0ICAgICAgICAgICAgMHg4MDAwMDA6IDB4NDAwMDQwMDAsXG5cdCAgICAgICAgICAgIDB4MTgwMDAwMDogMHg4NDAxMCxcblx0ICAgICAgICAgICAgMHgyODAwMDAwOiAweDEwLFxuXHQgICAgICAgICAgICAweDM4MDAwMDA6IDB4NDAwMDQwMTAsXG5cdCAgICAgICAgICAgIDB4NDgwMDAwMDogMHg0MDA4NDAxMCxcblx0ICAgICAgICAgICAgMHg1ODAwMDAwOiAweDQwMDAwMDAwLFxuXHQgICAgICAgICAgICAweDY4MDAwMDA6IDB4ODAwMDAsXG5cdCAgICAgICAgICAgIDB4NzgwMDAwMDogMHg0MDA4MDAxMCxcblx0ICAgICAgICAgICAgMHg4ODAwMDAwOiAweDgwMDEwLFxuXHQgICAgICAgICAgICAweDk4MDAwMDA6IDB4MCxcblx0ICAgICAgICAgICAgMHhhODAwMDAwOiAweDQwMDAsXG5cdCAgICAgICAgICAgIDB4YjgwMDAwMDogMHg0MDA4MDAwMCxcblx0ICAgICAgICAgICAgMHhjODAwMDAwOiAweDQwMDAwMDEwLFxuXHQgICAgICAgICAgICAweGQ4MDAwMDA6IDB4ODQwMDAsXG5cdCAgICAgICAgICAgIDB4ZTgwMDAwMDogMHg0MDA4NDAwMCxcblx0ICAgICAgICAgICAgMHhmODAwMDAwOiAweDQwMTAsXG5cdCAgICAgICAgICAgIDB4MTAwMDAwMDA6IDB4MCxcblx0ICAgICAgICAgICAgMHgxMTAwMDAwMDogMHg0MDA4MDAxMCxcblx0ICAgICAgICAgICAgMHgxMjAwMDAwMDogMHg0MDAwNDAxMCxcblx0ICAgICAgICAgICAgMHgxMzAwMDAwMDogMHg0MDA4NDAwMCxcblx0ICAgICAgICAgICAgMHgxNDAwMDAwMDogMHg0MDA4MDAwMCxcblx0ICAgICAgICAgICAgMHgxNTAwMDAwMDogMHgxMCxcblx0ICAgICAgICAgICAgMHgxNjAwMDAwMDogMHg4NDAxMCxcblx0ICAgICAgICAgICAgMHgxNzAwMDAwMDogMHg0MDAwLFxuXHQgICAgICAgICAgICAweDE4MDAwMDAwOiAweDQwMTAsXG5cdCAgICAgICAgICAgIDB4MTkwMDAwMDA6IDB4ODAwMDAsXG5cdCAgICAgICAgICAgIDB4MWEwMDAwMDA6IDB4ODAwMTAsXG5cdCAgICAgICAgICAgIDB4MWIwMDAwMDA6IDB4NDAwMDAwMTAsXG5cdCAgICAgICAgICAgIDB4MWMwMDAwMDA6IDB4ODQwMDAsXG5cdCAgICAgICAgICAgIDB4MWQwMDAwMDA6IDB4NDAwMDQwMDAsXG5cdCAgICAgICAgICAgIDB4MWUwMDAwMDA6IDB4NDAwMDAwMDAsXG5cdCAgICAgICAgICAgIDB4MWYwMDAwMDA6IDB4NDAwODQwMTAsXG5cdCAgICAgICAgICAgIDB4MTA4MDAwMDA6IDB4ODQwMTAsXG5cdCAgICAgICAgICAgIDB4MTE4MDAwMDA6IDB4ODAwMDAsXG5cdCAgICAgICAgICAgIDB4MTI4MDAwMDA6IDB4NDAwODAwMDAsXG5cdCAgICAgICAgICAgIDB4MTM4MDAwMDA6IDB4NDAwMCxcblx0ICAgICAgICAgICAgMHgxNDgwMDAwMDogMHg0MDAwNDAwMCxcblx0ICAgICAgICAgICAgMHgxNTgwMDAwMDogMHg0MDA4NDAxMCxcblx0ICAgICAgICAgICAgMHgxNjgwMDAwMDogMHgxMCxcblx0ICAgICAgICAgICAgMHgxNzgwMDAwMDogMHg0MDAwMDAwMCxcblx0ICAgICAgICAgICAgMHgxODgwMDAwMDogMHg0MDA4NDAwMCxcblx0ICAgICAgICAgICAgMHgxOTgwMDAwMDogMHg0MDAwMDAxMCxcblx0ICAgICAgICAgICAgMHgxYTgwMDAwMDogMHg0MDAwNDAxMCxcblx0ICAgICAgICAgICAgMHgxYjgwMDAwMDogMHg4MDAxMCxcblx0ICAgICAgICAgICAgMHgxYzgwMDAwMDogMHgwLFxuXHQgICAgICAgICAgICAweDFkODAwMDAwOiAweDQwMTAsXG5cdCAgICAgICAgICAgIDB4MWU4MDAwMDA6IDB4NDAwODAwMTAsXG5cdCAgICAgICAgICAgIDB4MWY4MDAwMDA6IDB4ODQwMDBcblx0ICAgICAgICB9LFxuXHQgICAgICAgIHtcblx0ICAgICAgICAgICAgMHgwOiAweDEwNCxcblx0ICAgICAgICAgICAgMHgxMDAwMDA6IDB4MCxcblx0ICAgICAgICAgICAgMHgyMDAwMDA6IDB4NDAwMDEwMCxcblx0ICAgICAgICAgICAgMHgzMDAwMDA6IDB4MTAxMDQsXG5cdCAgICAgICAgICAgIDB4NDAwMDAwOiAweDEwMDA0LFxuXHQgICAgICAgICAgICAweDUwMDAwMDogMHg0MDAwMDA0LFxuXHQgICAgICAgICAgICAweDYwMDAwMDogMHg0MDEwMTA0LFxuXHQgICAgICAgICAgICAweDcwMDAwMDogMHg0MDEwMDAwLFxuXHQgICAgICAgICAgICAweDgwMDAwMDogMHg0MDAwMDAwLFxuXHQgICAgICAgICAgICAweDkwMDAwMDogMHg0MDEwMTAwLFxuXHQgICAgICAgICAgICAweGEwMDAwMDogMHgxMDEwMCxcblx0ICAgICAgICAgICAgMHhiMDAwMDA6IDB4NDAxMDAwNCxcblx0ICAgICAgICAgICAgMHhjMDAwMDA6IDB4NDAwMDEwNCxcblx0ICAgICAgICAgICAgMHhkMDAwMDA6IDB4MTAwMDAsXG5cdCAgICAgICAgICAgIDB4ZTAwMDAwOiAweDQsXG5cdCAgICAgICAgICAgIDB4ZjAwMDAwOiAweDEwMCxcblx0ICAgICAgICAgICAgMHg4MDAwMDogMHg0MDEwMTAwLFxuXHQgICAgICAgICAgICAweDE4MDAwMDogMHg0MDEwMDA0LFxuXHQgICAgICAgICAgICAweDI4MDAwMDogMHgwLFxuXHQgICAgICAgICAgICAweDM4MDAwMDogMHg0MDAwMTAwLFxuXHQgICAgICAgICAgICAweDQ4MDAwMDogMHg0MDAwMDA0LFxuXHQgICAgICAgICAgICAweDU4MDAwMDogMHgxMDAwMCxcblx0ICAgICAgICAgICAgMHg2ODAwMDA6IDB4MTAwMDQsXG5cdCAgICAgICAgICAgIDB4NzgwMDAwOiAweDEwNCxcblx0ICAgICAgICAgICAgMHg4ODAwMDA6IDB4NCxcblx0ICAgICAgICAgICAgMHg5ODAwMDA6IDB4MTAwLFxuXHQgICAgICAgICAgICAweGE4MDAwMDogMHg0MDEwMDAwLFxuXHQgICAgICAgICAgICAweGI4MDAwMDogMHgxMDEwNCxcblx0ICAgICAgICAgICAgMHhjODAwMDA6IDB4MTAxMDAsXG5cdCAgICAgICAgICAgIDB4ZDgwMDAwOiAweDQwMDAxMDQsXG5cdCAgICAgICAgICAgIDB4ZTgwMDAwOiAweDQwMTAxMDQsXG5cdCAgICAgICAgICAgIDB4ZjgwMDAwOiAweDQwMDAwMDAsXG5cdCAgICAgICAgICAgIDB4MTAwMDAwMDogMHg0MDEwMTAwLFxuXHQgICAgICAgICAgICAweDExMDAwMDA6IDB4MTAwMDQsXG5cdCAgICAgICAgICAgIDB4MTIwMDAwMDogMHgxMDAwMCxcblx0ICAgICAgICAgICAgMHgxMzAwMDAwOiAweDQwMDAxMDAsXG5cdCAgICAgICAgICAgIDB4MTQwMDAwMDogMHgxMDAsXG5cdCAgICAgICAgICAgIDB4MTUwMDAwMDogMHg0MDEwMTA0LFxuXHQgICAgICAgICAgICAweDE2MDAwMDA6IDB4NDAwMDAwNCxcblx0ICAgICAgICAgICAgMHgxNzAwMDAwOiAweDAsXG5cdCAgICAgICAgICAgIDB4MTgwMDAwMDogMHg0MDAwMTA0LFxuXHQgICAgICAgICAgICAweDE5MDAwMDA6IDB4NDAwMDAwMCxcblx0ICAgICAgICAgICAgMHgxYTAwMDAwOiAweDQsXG5cdCAgICAgICAgICAgIDB4MWIwMDAwMDogMHgxMDEwMCxcblx0ICAgICAgICAgICAgMHgxYzAwMDAwOiAweDQwMTAwMDAsXG5cdCAgICAgICAgICAgIDB4MWQwMDAwMDogMHgxMDQsXG5cdCAgICAgICAgICAgIDB4MWUwMDAwMDogMHgxMDEwNCxcblx0ICAgICAgICAgICAgMHgxZjAwMDAwOiAweDQwMTAwMDQsXG5cdCAgICAgICAgICAgIDB4MTA4MDAwMDogMHg0MDAwMDAwLFxuXHQgICAgICAgICAgICAweDExODAwMDA6IDB4MTA0LFxuXHQgICAgICAgICAgICAweDEyODAwMDA6IDB4NDAxMDEwMCxcblx0ICAgICAgICAgICAgMHgxMzgwMDAwOiAweDAsXG5cdCAgICAgICAgICAgIDB4MTQ4MDAwMDogMHgxMDAwNCxcblx0ICAgICAgICAgICAgMHgxNTgwMDAwOiAweDQwMDAxMDAsXG5cdCAgICAgICAgICAgIDB4MTY4MDAwMDogMHgxMDAsXG5cdCAgICAgICAgICAgIDB4MTc4MDAwMDogMHg0MDEwMDA0LFxuXHQgICAgICAgICAgICAweDE4ODAwMDA6IDB4MTAwMDAsXG5cdCAgICAgICAgICAgIDB4MTk4MDAwMDogMHg0MDEwMTA0LFxuXHQgICAgICAgICAgICAweDFhODAwMDA6IDB4MTAxMDQsXG5cdCAgICAgICAgICAgIDB4MWI4MDAwMDogMHg0MDAwMDA0LFxuXHQgICAgICAgICAgICAweDFjODAwMDA6IDB4NDAwMDEwNCxcblx0ICAgICAgICAgICAgMHgxZDgwMDAwOiAweDQwMTAwMDAsXG5cdCAgICAgICAgICAgIDB4MWU4MDAwMDogMHg0LFxuXHQgICAgICAgICAgICAweDFmODAwMDA6IDB4MTAxMDBcblx0ICAgICAgICB9LFxuXHQgICAgICAgIHtcblx0ICAgICAgICAgICAgMHgwOiAweDgwNDAxMDAwLFxuXHQgICAgICAgICAgICAweDEwMDAwOiAweDgwMDAxMDQwLFxuXHQgICAgICAgICAgICAweDIwMDAwOiAweDQwMTA0MCxcblx0ICAgICAgICAgICAgMHgzMDAwMDogMHg4MDQwMDAwMCxcblx0ICAgICAgICAgICAgMHg0MDAwMDogMHgwLFxuXHQgICAgICAgICAgICAweDUwMDAwOiAweDQwMTAwMCxcblx0ICAgICAgICAgICAgMHg2MDAwMDogMHg4MDAwMDA0MCxcblx0ICAgICAgICAgICAgMHg3MDAwMDogMHg0MDAwNDAsXG5cdCAgICAgICAgICAgIDB4ODAwMDA6IDB4ODAwMDAwMDAsXG5cdCAgICAgICAgICAgIDB4OTAwMDA6IDB4NDAwMDAwLFxuXHQgICAgICAgICAgICAweGEwMDAwOiAweDQwLFxuXHQgICAgICAgICAgICAweGIwMDAwOiAweDgwMDAxMDAwLFxuXHQgICAgICAgICAgICAweGMwMDAwOiAweDgwNDAwMDQwLFxuXHQgICAgICAgICAgICAweGQwMDAwOiAweDEwNDAsXG5cdCAgICAgICAgICAgIDB4ZTAwMDA6IDB4MTAwMCxcblx0ICAgICAgICAgICAgMHhmMDAwMDogMHg4MDQwMTA0MCxcblx0ICAgICAgICAgICAgMHg4MDAwOiAweDgwMDAxMDQwLFxuXHQgICAgICAgICAgICAweDE4MDAwOiAweDQwLFxuXHQgICAgICAgICAgICAweDI4MDAwOiAweDgwNDAwMDQwLFxuXHQgICAgICAgICAgICAweDM4MDAwOiAweDgwMDAxMDAwLFxuXHQgICAgICAgICAgICAweDQ4MDAwOiAweDQwMTAwMCxcblx0ICAgICAgICAgICAgMHg1ODAwMDogMHg4MDQwMTA0MCxcblx0ICAgICAgICAgICAgMHg2ODAwMDogMHgwLFxuXHQgICAgICAgICAgICAweDc4MDAwOiAweDgwNDAwMDAwLFxuXHQgICAgICAgICAgICAweDg4MDAwOiAweDEwMDAsXG5cdCAgICAgICAgICAgIDB4OTgwMDA6IDB4ODA0MDEwMDAsXG5cdCAgICAgICAgICAgIDB4YTgwMDA6IDB4NDAwMDAwLFxuXHQgICAgICAgICAgICAweGI4MDAwOiAweDEwNDAsXG5cdCAgICAgICAgICAgIDB4YzgwMDA6IDB4ODAwMDAwMDAsXG5cdCAgICAgICAgICAgIDB4ZDgwMDA6IDB4NDAwMDQwLFxuXHQgICAgICAgICAgICAweGU4MDAwOiAweDQwMTA0MCxcblx0ICAgICAgICAgICAgMHhmODAwMDogMHg4MDAwMDA0MCxcblx0ICAgICAgICAgICAgMHgxMDAwMDA6IDB4NDAwMDQwLFxuXHQgICAgICAgICAgICAweDExMDAwMDogMHg0MDEwMDAsXG5cdCAgICAgICAgICAgIDB4MTIwMDAwOiAweDgwMDAwMDQwLFxuXHQgICAgICAgICAgICAweDEzMDAwMDogMHgwLFxuXHQgICAgICAgICAgICAweDE0MDAwMDogMHgxMDQwLFxuXHQgICAgICAgICAgICAweDE1MDAwMDogMHg4MDQwMDA0MCxcblx0ICAgICAgICAgICAgMHgxNjAwMDA6IDB4ODA0MDEwMDAsXG5cdCAgICAgICAgICAgIDB4MTcwMDAwOiAweDgwMDAxMDQwLFxuXHQgICAgICAgICAgICAweDE4MDAwMDogMHg4MDQwMTA0MCxcblx0ICAgICAgICAgICAgMHgxOTAwMDA6IDB4ODAwMDAwMDAsXG5cdCAgICAgICAgICAgIDB4MWEwMDAwOiAweDgwNDAwMDAwLFxuXHQgICAgICAgICAgICAweDFiMDAwMDogMHg0MDEwNDAsXG5cdCAgICAgICAgICAgIDB4MWMwMDAwOiAweDgwMDAxMDAwLFxuXHQgICAgICAgICAgICAweDFkMDAwMDogMHg0MDAwMDAsXG5cdCAgICAgICAgICAgIDB4MWUwMDAwOiAweDQwLFxuXHQgICAgICAgICAgICAweDFmMDAwMDogMHgxMDAwLFxuXHQgICAgICAgICAgICAweDEwODAwMDogMHg4MDQwMDAwMCxcblx0ICAgICAgICAgICAgMHgxMTgwMDA6IDB4ODA0MDEwNDAsXG5cdCAgICAgICAgICAgIDB4MTI4MDAwOiAweDAsXG5cdCAgICAgICAgICAgIDB4MTM4MDAwOiAweDQwMTAwMCxcblx0ICAgICAgICAgICAgMHgxNDgwMDA6IDB4NDAwMDQwLFxuXHQgICAgICAgICAgICAweDE1ODAwMDogMHg4MDAwMDAwMCxcblx0ICAgICAgICAgICAgMHgxNjgwMDA6IDB4ODAwMDEwNDAsXG5cdCAgICAgICAgICAgIDB4MTc4MDAwOiAweDQwLFxuXHQgICAgICAgICAgICAweDE4ODAwMDogMHg4MDAwMDA0MCxcblx0ICAgICAgICAgICAgMHgxOTgwMDA6IDB4MTAwMCxcblx0ICAgICAgICAgICAgMHgxYTgwMDA6IDB4ODAwMDEwMDAsXG5cdCAgICAgICAgICAgIDB4MWI4MDAwOiAweDgwNDAwMDQwLFxuXHQgICAgICAgICAgICAweDFjODAwMDogMHgxMDQwLFxuXHQgICAgICAgICAgICAweDFkODAwMDogMHg4MDQwMTAwMCxcblx0ICAgICAgICAgICAgMHgxZTgwMDA6IDB4NDAwMDAwLFxuXHQgICAgICAgICAgICAweDFmODAwMDogMHg0MDEwNDBcblx0ICAgICAgICB9LFxuXHQgICAgICAgIHtcblx0ICAgICAgICAgICAgMHgwOiAweDgwLFxuXHQgICAgICAgICAgICAweDEwMDA6IDB4MTA0MDAwMCxcblx0ICAgICAgICAgICAgMHgyMDAwOiAweDQwMDAwLFxuXHQgICAgICAgICAgICAweDMwMDA6IDB4MjAwMDAwMDAsXG5cdCAgICAgICAgICAgIDB4NDAwMDogMHgyMDA0MDA4MCxcblx0ICAgICAgICAgICAgMHg1MDAwOiAweDEwMDAwODAsXG5cdCAgICAgICAgICAgIDB4NjAwMDogMHgyMTAwMDA4MCxcblx0ICAgICAgICAgICAgMHg3MDAwOiAweDQwMDgwLFxuXHQgICAgICAgICAgICAweDgwMDA6IDB4MTAwMDAwMCxcblx0ICAgICAgICAgICAgMHg5MDAwOiAweDIwMDQwMDAwLFxuXHQgICAgICAgICAgICAweGEwMDA6IDB4MjAwMDAwODAsXG5cdCAgICAgICAgICAgIDB4YjAwMDogMHgyMTA0MDA4MCxcblx0ICAgICAgICAgICAgMHhjMDAwOiAweDIxMDQwMDAwLFxuXHQgICAgICAgICAgICAweGQwMDA6IDB4MCxcblx0ICAgICAgICAgICAgMHhlMDAwOiAweDEwNDAwODAsXG5cdCAgICAgICAgICAgIDB4ZjAwMDogMHgyMTAwMDAwMCxcblx0ICAgICAgICAgICAgMHg4MDA6IDB4MTA0MDA4MCxcblx0ICAgICAgICAgICAgMHgxODAwOiAweDIxMDAwMDgwLFxuXHQgICAgICAgICAgICAweDI4MDA6IDB4ODAsXG5cdCAgICAgICAgICAgIDB4MzgwMDogMHgxMDQwMDAwLFxuXHQgICAgICAgICAgICAweDQ4MDA6IDB4NDAwMDAsXG5cdCAgICAgICAgICAgIDB4NTgwMDogMHgyMDA0MDA4MCxcblx0ICAgICAgICAgICAgMHg2ODAwOiAweDIxMDQwMDAwLFxuXHQgICAgICAgICAgICAweDc4MDA6IDB4MjAwMDAwMDAsXG5cdCAgICAgICAgICAgIDB4ODgwMDogMHgyMDA0MDAwMCxcblx0ICAgICAgICAgICAgMHg5ODAwOiAweDAsXG5cdCAgICAgICAgICAgIDB4YTgwMDogMHgyMTA0MDA4MCxcblx0ICAgICAgICAgICAgMHhiODAwOiAweDEwMDAwODAsXG5cdCAgICAgICAgICAgIDB4YzgwMDogMHgyMDAwMDA4MCxcblx0ICAgICAgICAgICAgMHhkODAwOiAweDIxMDAwMDAwLFxuXHQgICAgICAgICAgICAweGU4MDA6IDB4MTAwMDAwMCxcblx0ICAgICAgICAgICAgMHhmODAwOiAweDQwMDgwLFxuXHQgICAgICAgICAgICAweDEwMDAwOiAweDQwMDAwLFxuXHQgICAgICAgICAgICAweDExMDAwOiAweDgwLFxuXHQgICAgICAgICAgICAweDEyMDAwOiAweDIwMDAwMDAwLFxuXHQgICAgICAgICAgICAweDEzMDAwOiAweDIxMDAwMDgwLFxuXHQgICAgICAgICAgICAweDE0MDAwOiAweDEwMDAwODAsXG5cdCAgICAgICAgICAgIDB4MTUwMDA6IDB4MjEwNDAwMDAsXG5cdCAgICAgICAgICAgIDB4MTYwMDA6IDB4MjAwNDAwODAsXG5cdCAgICAgICAgICAgIDB4MTcwMDA6IDB4MTAwMDAwMCxcblx0ICAgICAgICAgICAgMHgxODAwMDogMHgyMTA0MDA4MCxcblx0ICAgICAgICAgICAgMHgxOTAwMDogMHgyMTAwMDAwMCxcblx0ICAgICAgICAgICAgMHgxYTAwMDogMHgxMDQwMDAwLFxuXHQgICAgICAgICAgICAweDFiMDAwOiAweDIwMDQwMDAwLFxuXHQgICAgICAgICAgICAweDFjMDAwOiAweDQwMDgwLFxuXHQgICAgICAgICAgICAweDFkMDAwOiAweDIwMDAwMDgwLFxuXHQgICAgICAgICAgICAweDFlMDAwOiAweDAsXG5cdCAgICAgICAgICAgIDB4MWYwMDA6IDB4MTA0MDA4MCxcblx0ICAgICAgICAgICAgMHgxMDgwMDogMHgyMTAwMDA4MCxcblx0ICAgICAgICAgICAgMHgxMTgwMDogMHgxMDAwMDAwLFxuXHQgICAgICAgICAgICAweDEyODAwOiAweDEwNDAwMDAsXG5cdCAgICAgICAgICAgIDB4MTM4MDA6IDB4MjAwNDAwODAsXG5cdCAgICAgICAgICAgIDB4MTQ4MDA6IDB4MjAwMDAwMDAsXG5cdCAgICAgICAgICAgIDB4MTU4MDA6IDB4MTA0MDA4MCxcblx0ICAgICAgICAgICAgMHgxNjgwMDogMHg4MCxcblx0ICAgICAgICAgICAgMHgxNzgwMDogMHgyMTA0MDAwMCxcblx0ICAgICAgICAgICAgMHgxODgwMDogMHg0MDA4MCxcblx0ICAgICAgICAgICAgMHgxOTgwMDogMHgyMTA0MDA4MCxcblx0ICAgICAgICAgICAgMHgxYTgwMDogMHgwLFxuXHQgICAgICAgICAgICAweDFiODAwOiAweDIxMDAwMDAwLFxuXHQgICAgICAgICAgICAweDFjODAwOiAweDEwMDAwODAsXG5cdCAgICAgICAgICAgIDB4MWQ4MDA6IDB4NDAwMDAsXG5cdCAgICAgICAgICAgIDB4MWU4MDA6IDB4MjAwNDAwMDAsXG5cdCAgICAgICAgICAgIDB4MWY4MDA6IDB4MjAwMDAwODBcblx0ICAgICAgICB9LFxuXHQgICAgICAgIHtcblx0ICAgICAgICAgICAgMHgwOiAweDEwMDAwMDA4LFxuXHQgICAgICAgICAgICAweDEwMDogMHgyMDAwLFxuXHQgICAgICAgICAgICAweDIwMDogMHgxMDIwMDAwMCxcblx0ICAgICAgICAgICAgMHgzMDA6IDB4MTAyMDIwMDgsXG5cdCAgICAgICAgICAgIDB4NDAwOiAweDEwMDAyMDAwLFxuXHQgICAgICAgICAgICAweDUwMDogMHgyMDAwMDAsXG5cdCAgICAgICAgICAgIDB4NjAwOiAweDIwMDAwOCxcblx0ICAgICAgICAgICAgMHg3MDA6IDB4MTAwMDAwMDAsXG5cdCAgICAgICAgICAgIDB4ODAwOiAweDAsXG5cdCAgICAgICAgICAgIDB4OTAwOiAweDEwMDAyMDA4LFxuXHQgICAgICAgICAgICAweGEwMDogMHgyMDIwMDAsXG5cdCAgICAgICAgICAgIDB4YjAwOiAweDgsXG5cdCAgICAgICAgICAgIDB4YzAwOiAweDEwMjAwMDA4LFxuXHQgICAgICAgICAgICAweGQwMDogMHgyMDIwMDgsXG5cdCAgICAgICAgICAgIDB4ZTAwOiAweDIwMDgsXG5cdCAgICAgICAgICAgIDB4ZjAwOiAweDEwMjAyMDAwLFxuXHQgICAgICAgICAgICAweDgwOiAweDEwMjAwMDAwLFxuXHQgICAgICAgICAgICAweDE4MDogMHgxMDIwMjAwOCxcblx0ICAgICAgICAgICAgMHgyODA6IDB4OCxcblx0ICAgICAgICAgICAgMHgzODA6IDB4MjAwMDAwLFxuXHQgICAgICAgICAgICAweDQ4MDogMHgyMDIwMDgsXG5cdCAgICAgICAgICAgIDB4NTgwOiAweDEwMDAwMDA4LFxuXHQgICAgICAgICAgICAweDY4MDogMHgxMDAwMjAwMCxcblx0ICAgICAgICAgICAgMHg3ODA6IDB4MjAwOCxcblx0ICAgICAgICAgICAgMHg4ODA6IDB4MjAwMDA4LFxuXHQgICAgICAgICAgICAweDk4MDogMHgyMDAwLFxuXHQgICAgICAgICAgICAweGE4MDogMHgxMDAwMjAwOCxcblx0ICAgICAgICAgICAgMHhiODA6IDB4MTAyMDAwMDgsXG5cdCAgICAgICAgICAgIDB4YzgwOiAweDAsXG5cdCAgICAgICAgICAgIDB4ZDgwOiAweDEwMjAyMDAwLFxuXHQgICAgICAgICAgICAweGU4MDogMHgyMDIwMDAsXG5cdCAgICAgICAgICAgIDB4ZjgwOiAweDEwMDAwMDAwLFxuXHQgICAgICAgICAgICAweDEwMDA6IDB4MTAwMDIwMDAsXG5cdCAgICAgICAgICAgIDB4MTEwMDogMHgxMDIwMDAwOCxcblx0ICAgICAgICAgICAgMHgxMjAwOiAweDEwMjAyMDA4LFxuXHQgICAgICAgICAgICAweDEzMDA6IDB4MjAwOCxcblx0ICAgICAgICAgICAgMHgxNDAwOiAweDIwMDAwMCxcblx0ICAgICAgICAgICAgMHgxNTAwOiAweDEwMDAwMDAwLFxuXHQgICAgICAgICAgICAweDE2MDA6IDB4MTAwMDAwMDgsXG5cdCAgICAgICAgICAgIDB4MTcwMDogMHgyMDIwMDAsXG5cdCAgICAgICAgICAgIDB4MTgwMDogMHgyMDIwMDgsXG5cdCAgICAgICAgICAgIDB4MTkwMDogMHgwLFxuXHQgICAgICAgICAgICAweDFhMDA6IDB4OCxcblx0ICAgICAgICAgICAgMHgxYjAwOiAweDEwMjAwMDAwLFxuXHQgICAgICAgICAgICAweDFjMDA6IDB4MjAwMCxcblx0ICAgICAgICAgICAgMHgxZDAwOiAweDEwMDAyMDA4LFxuXHQgICAgICAgICAgICAweDFlMDA6IDB4MTAyMDIwMDAsXG5cdCAgICAgICAgICAgIDB4MWYwMDogMHgyMDAwMDgsXG5cdCAgICAgICAgICAgIDB4MTA4MDogMHg4LFxuXHQgICAgICAgICAgICAweDExODA6IDB4MjAyMDAwLFxuXHQgICAgICAgICAgICAweDEyODA6IDB4MjAwMDAwLFxuXHQgICAgICAgICAgICAweDEzODA6IDB4MTAwMDAwMDgsXG5cdCAgICAgICAgICAgIDB4MTQ4MDogMHgxMDAwMjAwMCxcblx0ICAgICAgICAgICAgMHgxNTgwOiAweDIwMDgsXG5cdCAgICAgICAgICAgIDB4MTY4MDogMHgxMDIwMjAwOCxcblx0ICAgICAgICAgICAgMHgxNzgwOiAweDEwMjAwMDAwLFxuXHQgICAgICAgICAgICAweDE4ODA6IDB4MTAyMDIwMDAsXG5cdCAgICAgICAgICAgIDB4MTk4MDogMHgxMDIwMDAwOCxcblx0ICAgICAgICAgICAgMHgxYTgwOiAweDIwMDAsXG5cdCAgICAgICAgICAgIDB4MWI4MDogMHgyMDIwMDgsXG5cdCAgICAgICAgICAgIDB4MWM4MDogMHgyMDAwMDgsXG5cdCAgICAgICAgICAgIDB4MWQ4MDogMHgwLFxuXHQgICAgICAgICAgICAweDFlODA6IDB4MTAwMDAwMDAsXG5cdCAgICAgICAgICAgIDB4MWY4MDogMHgxMDAwMjAwOFxuXHQgICAgICAgIH0sXG5cdCAgICAgICAge1xuXHQgICAgICAgICAgICAweDA6IDB4MTAwMDAwLFxuXHQgICAgICAgICAgICAweDEwOiAweDIwMDA0MDEsXG5cdCAgICAgICAgICAgIDB4MjA6IDB4NDAwLFxuXHQgICAgICAgICAgICAweDMwOiAweDEwMDQwMSxcblx0ICAgICAgICAgICAgMHg0MDogMHgyMTAwNDAxLFxuXHQgICAgICAgICAgICAweDUwOiAweDAsXG5cdCAgICAgICAgICAgIDB4NjA6IDB4MSxcblx0ICAgICAgICAgICAgMHg3MDogMHgyMTAwMDAxLFxuXHQgICAgICAgICAgICAweDgwOiAweDIwMDA0MDAsXG5cdCAgICAgICAgICAgIDB4OTA6IDB4MTAwMDAxLFxuXHQgICAgICAgICAgICAweGEwOiAweDIwMDAwMDEsXG5cdCAgICAgICAgICAgIDB4YjA6IDB4MjEwMDQwMCxcblx0ICAgICAgICAgICAgMHhjMDogMHgyMTAwMDAwLFxuXHQgICAgICAgICAgICAweGQwOiAweDQwMSxcblx0ICAgICAgICAgICAgMHhlMDogMHgxMDA0MDAsXG5cdCAgICAgICAgICAgIDB4ZjA6IDB4MjAwMDAwMCxcblx0ICAgICAgICAgICAgMHg4OiAweDIxMDAwMDEsXG5cdCAgICAgICAgICAgIDB4MTg6IDB4MCxcblx0ICAgICAgICAgICAgMHgyODogMHgyMDAwNDAxLFxuXHQgICAgICAgICAgICAweDM4OiAweDIxMDA0MDAsXG5cdCAgICAgICAgICAgIDB4NDg6IDB4MTAwMDAwLFxuXHQgICAgICAgICAgICAweDU4OiAweDIwMDAwMDEsXG5cdCAgICAgICAgICAgIDB4Njg6IDB4MjAwMDAwMCxcblx0ICAgICAgICAgICAgMHg3ODogMHg0MDEsXG5cdCAgICAgICAgICAgIDB4ODg6IDB4MTAwNDAxLFxuXHQgICAgICAgICAgICAweDk4OiAweDIwMDA0MDAsXG5cdCAgICAgICAgICAgIDB4YTg6IDB4MjEwMDAwMCxcblx0ICAgICAgICAgICAgMHhiODogMHgxMDAwMDEsXG5cdCAgICAgICAgICAgIDB4Yzg6IDB4NDAwLFxuXHQgICAgICAgICAgICAweGQ4OiAweDIxMDA0MDEsXG5cdCAgICAgICAgICAgIDB4ZTg6IDB4MSxcblx0ICAgICAgICAgICAgMHhmODogMHgxMDA0MDAsXG5cdCAgICAgICAgICAgIDB4MTAwOiAweDIwMDAwMDAsXG5cdCAgICAgICAgICAgIDB4MTEwOiAweDEwMDAwMCxcblx0ICAgICAgICAgICAgMHgxMjA6IDB4MjAwMDQwMSxcblx0ICAgICAgICAgICAgMHgxMzA6IDB4MjEwMDAwMSxcblx0ICAgICAgICAgICAgMHgxNDA6IDB4MTAwMDAxLFxuXHQgICAgICAgICAgICAweDE1MDogMHgyMDAwNDAwLFxuXHQgICAgICAgICAgICAweDE2MDogMHgyMTAwNDAwLFxuXHQgICAgICAgICAgICAweDE3MDogMHgxMDA0MDEsXG5cdCAgICAgICAgICAgIDB4MTgwOiAweDQwMSxcblx0ICAgICAgICAgICAgMHgxOTA6IDB4MjEwMDQwMSxcblx0ICAgICAgICAgICAgMHgxYTA6IDB4MTAwNDAwLFxuXHQgICAgICAgICAgICAweDFiMDogMHgxLFxuXHQgICAgICAgICAgICAweDFjMDogMHgwLFxuXHQgICAgICAgICAgICAweDFkMDogMHgyMTAwMDAwLFxuXHQgICAgICAgICAgICAweDFlMDogMHgyMDAwMDAxLFxuXHQgICAgICAgICAgICAweDFmMDogMHg0MDAsXG5cdCAgICAgICAgICAgIDB4MTA4OiAweDEwMDQwMCxcblx0ICAgICAgICAgICAgMHgxMTg6IDB4MjAwMDQwMSxcblx0ICAgICAgICAgICAgMHgxMjg6IDB4MjEwMDAwMSxcblx0ICAgICAgICAgICAgMHgxMzg6IDB4MSxcblx0ICAgICAgICAgICAgMHgxNDg6IDB4MjAwMDAwMCxcblx0ICAgICAgICAgICAgMHgxNTg6IDB4MTAwMDAwLFxuXHQgICAgICAgICAgICAweDE2ODogMHg0MDEsXG5cdCAgICAgICAgICAgIDB4MTc4OiAweDIxMDA0MDAsXG5cdCAgICAgICAgICAgIDB4MTg4OiAweDIwMDAwMDEsXG5cdCAgICAgICAgICAgIDB4MTk4OiAweDIxMDAwMDAsXG5cdCAgICAgICAgICAgIDB4MWE4OiAweDAsXG5cdCAgICAgICAgICAgIDB4MWI4OiAweDIxMDA0MDEsXG5cdCAgICAgICAgICAgIDB4MWM4OiAweDEwMDQwMSxcblx0ICAgICAgICAgICAgMHgxZDg6IDB4NDAwLFxuXHQgICAgICAgICAgICAweDFlODogMHgyMDAwNDAwLFxuXHQgICAgICAgICAgICAweDFmODogMHgxMDAwMDFcblx0ICAgICAgICB9LFxuXHQgICAgICAgIHtcblx0ICAgICAgICAgICAgMHgwOiAweDgwMDA4MjAsXG5cdCAgICAgICAgICAgIDB4MTogMHgyMDAwMCxcblx0ICAgICAgICAgICAgMHgyOiAweDgwMDAwMDAsXG5cdCAgICAgICAgICAgIDB4MzogMHgyMCxcblx0ICAgICAgICAgICAgMHg0OiAweDIwMDIwLFxuXHQgICAgICAgICAgICAweDU6IDB4ODAyMDgyMCxcblx0ICAgICAgICAgICAgMHg2OiAweDgwMjA4MDAsXG5cdCAgICAgICAgICAgIDB4NzogMHg4MDAsXG5cdCAgICAgICAgICAgIDB4ODogMHg4MDIwMDAwLFxuXHQgICAgICAgICAgICAweDk6IDB4ODAwMDgwMCxcblx0ICAgICAgICAgICAgMHhhOiAweDIwODAwLFxuXHQgICAgICAgICAgICAweGI6IDB4ODAyMDAyMCxcblx0ICAgICAgICAgICAgMHhjOiAweDgyMCxcblx0ICAgICAgICAgICAgMHhkOiAweDAsXG5cdCAgICAgICAgICAgIDB4ZTogMHg4MDAwMDIwLFxuXHQgICAgICAgICAgICAweGY6IDB4MjA4MjAsXG5cdCAgICAgICAgICAgIDB4ODAwMDAwMDA6IDB4ODAwLFxuXHQgICAgICAgICAgICAweDgwMDAwMDAxOiAweDgwMjA4MjAsXG5cdCAgICAgICAgICAgIDB4ODAwMDAwMDI6IDB4ODAwMDgyMCxcblx0ICAgICAgICAgICAgMHg4MDAwMDAwMzogMHg4MDAwMDAwLFxuXHQgICAgICAgICAgICAweDgwMDAwMDA0OiAweDgwMjAwMDAsXG5cdCAgICAgICAgICAgIDB4ODAwMDAwMDU6IDB4MjA4MDAsXG5cdCAgICAgICAgICAgIDB4ODAwMDAwMDY6IDB4MjA4MjAsXG5cdCAgICAgICAgICAgIDB4ODAwMDAwMDc6IDB4MjAsXG5cdCAgICAgICAgICAgIDB4ODAwMDAwMDg6IDB4ODAwMDAyMCxcblx0ICAgICAgICAgICAgMHg4MDAwMDAwOTogMHg4MjAsXG5cdCAgICAgICAgICAgIDB4ODAwMDAwMGE6IDB4MjAwMjAsXG5cdCAgICAgICAgICAgIDB4ODAwMDAwMGI6IDB4ODAyMDgwMCxcblx0ICAgICAgICAgICAgMHg4MDAwMDAwYzogMHgwLFxuXHQgICAgICAgICAgICAweDgwMDAwMDBkOiAweDgwMjAwMjAsXG5cdCAgICAgICAgICAgIDB4ODAwMDAwMGU6IDB4ODAwMDgwMCxcblx0ICAgICAgICAgICAgMHg4MDAwMDAwZjogMHgyMDAwMCxcblx0ICAgICAgICAgICAgMHgxMDogMHgyMDgyMCxcblx0ICAgICAgICAgICAgMHgxMTogMHg4MDIwODAwLFxuXHQgICAgICAgICAgICAweDEyOiAweDIwLFxuXHQgICAgICAgICAgICAweDEzOiAweDgwMCxcblx0ICAgICAgICAgICAgMHgxNDogMHg4MDAwODAwLFxuXHQgICAgICAgICAgICAweDE1OiAweDgwMDAwMjAsXG5cdCAgICAgICAgICAgIDB4MTY6IDB4ODAyMDAyMCxcblx0ICAgICAgICAgICAgMHgxNzogMHgyMDAwMCxcblx0ICAgICAgICAgICAgMHgxODogMHgwLFxuXHQgICAgICAgICAgICAweDE5OiAweDIwMDIwLFxuXHQgICAgICAgICAgICAweDFhOiAweDgwMjAwMDAsXG5cdCAgICAgICAgICAgIDB4MWI6IDB4ODAwMDgyMCxcblx0ICAgICAgICAgICAgMHgxYzogMHg4MDIwODIwLFxuXHQgICAgICAgICAgICAweDFkOiAweDIwODAwLFxuXHQgICAgICAgICAgICAweDFlOiAweDgyMCxcblx0ICAgICAgICAgICAgMHgxZjogMHg4MDAwMDAwLFxuXHQgICAgICAgICAgICAweDgwMDAwMDEwOiAweDIwMDAwLFxuXHQgICAgICAgICAgICAweDgwMDAwMDExOiAweDgwMCxcblx0ICAgICAgICAgICAgMHg4MDAwMDAxMjogMHg4MDIwMDIwLFxuXHQgICAgICAgICAgICAweDgwMDAwMDEzOiAweDIwODIwLFxuXHQgICAgICAgICAgICAweDgwMDAwMDE0OiAweDIwLFxuXHQgICAgICAgICAgICAweDgwMDAwMDE1OiAweDgwMjAwMDAsXG5cdCAgICAgICAgICAgIDB4ODAwMDAwMTY6IDB4ODAwMDAwMCxcblx0ICAgICAgICAgICAgMHg4MDAwMDAxNzogMHg4MDAwODIwLFxuXHQgICAgICAgICAgICAweDgwMDAwMDE4OiAweDgwMjA4MjAsXG5cdCAgICAgICAgICAgIDB4ODAwMDAwMTk6IDB4ODAwMDAyMCxcblx0ICAgICAgICAgICAgMHg4MDAwMDAxYTogMHg4MDAwODAwLFxuXHQgICAgICAgICAgICAweDgwMDAwMDFiOiAweDAsXG5cdCAgICAgICAgICAgIDB4ODAwMDAwMWM6IDB4MjA4MDAsXG5cdCAgICAgICAgICAgIDB4ODAwMDAwMWQ6IDB4ODIwLFxuXHQgICAgICAgICAgICAweDgwMDAwMDFlOiAweDIwMDIwLFxuXHQgICAgICAgICAgICAweDgwMDAwMDFmOiAweDgwMjA4MDBcblx0ICAgICAgICB9XG5cdCAgICBdO1xuXG5cdCAgICAvLyBNYXNrcyB0aGF0IHNlbGVjdCB0aGUgU0JPWCBpbnB1dFxuXHQgICAgdmFyIFNCT1hfTUFTSyA9IFtcblx0ICAgICAgICAweGY4MDAwMDAxLCAweDFmODAwMDAwLCAweDAxZjgwMDAwLCAweDAwMWY4MDAwLFxuXHQgICAgICAgIDB4MDAwMWY4MDAsIDB4MDAwMDFmODAsIDB4MDAwMDAxZjgsIDB4ODAwMDAwMWZcblx0ICAgIF07XG5cblx0ICAgIC8qKlxuXHQgICAgICogREVTIGJsb2NrIGNpcGhlciBhbGdvcml0aG0uXG5cdCAgICAgKi9cblx0ICAgIHZhciBERVMgPSBDX2FsZ28uREVTID0gQmxvY2tDaXBoZXIuZXh0ZW5kKHtcblx0ICAgICAgICBfZG9SZXNldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICAvLyBTaG9ydGN1dHNcblx0ICAgICAgICAgICAgdmFyIGtleSA9IHRoaXMuX2tleTtcblx0ICAgICAgICAgICAgdmFyIGtleVdvcmRzID0ga2V5LndvcmRzO1xuXG5cdCAgICAgICAgICAgIC8vIFNlbGVjdCA1NiBiaXRzIGFjY29yZGluZyB0byBQQzFcblx0ICAgICAgICAgICAgdmFyIGtleUJpdHMgPSBbXTtcblx0ICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCA1NjsgaSsrKSB7XG5cdCAgICAgICAgICAgICAgICB2YXIga2V5Qml0UG9zID0gUEMxW2ldIC0gMTtcblx0ICAgICAgICAgICAgICAgIGtleUJpdHNbaV0gPSAoa2V5V29yZHNba2V5Qml0UG9zID4+PiA1XSA+Pj4gKDMxIC0ga2V5Qml0UG9zICUgMzIpKSAmIDE7XG5cdCAgICAgICAgICAgIH1cblxuXHQgICAgICAgICAgICAvLyBBc3NlbWJsZSAxNiBzdWJrZXlzXG5cdCAgICAgICAgICAgIHZhciBzdWJLZXlzID0gdGhpcy5fc3ViS2V5cyA9IFtdO1xuXHQgICAgICAgICAgICBmb3IgKHZhciBuU3ViS2V5ID0gMDsgblN1YktleSA8IDE2OyBuU3ViS2V5KyspIHtcblx0ICAgICAgICAgICAgICAgIC8vIENyZWF0ZSBzdWJrZXlcblx0ICAgICAgICAgICAgICAgIHZhciBzdWJLZXkgPSBzdWJLZXlzW25TdWJLZXldID0gW107XG5cblx0ICAgICAgICAgICAgICAgIC8vIFNob3J0Y3V0XG5cdCAgICAgICAgICAgICAgICB2YXIgYml0U2hpZnQgPSBCSVRfU0hJRlRTW25TdWJLZXldO1xuXG5cdCAgICAgICAgICAgICAgICAvLyBTZWxlY3QgNDggYml0cyBhY2NvcmRpbmcgdG8gUEMyXG5cdCAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IDI0OyBpKyspIHtcblx0ICAgICAgICAgICAgICAgICAgICAvLyBTZWxlY3QgZnJvbSB0aGUgbGVmdCAyOCBrZXkgYml0c1xuXHQgICAgICAgICAgICAgICAgICAgIHN1YktleVsoaSAvIDYpIHwgMF0gfD0ga2V5Qml0c1soKFBDMltpXSAtIDEpICsgYml0U2hpZnQpICUgMjhdIDw8ICgzMSAtIGkgJSA2KTtcblxuXHQgICAgICAgICAgICAgICAgICAgIC8vIFNlbGVjdCBmcm9tIHRoZSByaWdodCAyOCBrZXkgYml0c1xuXHQgICAgICAgICAgICAgICAgICAgIHN1YktleVs0ICsgKChpIC8gNikgfCAwKV0gfD0ga2V5Qml0c1syOCArICgoKFBDMltpICsgMjRdIC0gMSkgKyBiaXRTaGlmdCkgJSAyOCldIDw8ICgzMSAtIGkgJSA2KTtcblx0ICAgICAgICAgICAgICAgIH1cblxuXHQgICAgICAgICAgICAgICAgLy8gU2luY2UgZWFjaCBzdWJrZXkgaXMgYXBwbGllZCB0byBhbiBleHBhbmRlZCAzMi1iaXQgaW5wdXQsXG5cdCAgICAgICAgICAgICAgICAvLyB0aGUgc3Via2V5IGNhbiBiZSBicm9rZW4gaW50byA4IHZhbHVlcyBzY2FsZWQgdG8gMzItYml0cyxcblx0ICAgICAgICAgICAgICAgIC8vIHdoaWNoIGFsbG93cyB0aGUga2V5IHRvIGJlIHVzZWQgd2l0aG91dCBleHBhbnNpb25cblx0ICAgICAgICAgICAgICAgIHN1YktleVswXSA9IChzdWJLZXlbMF0gPDwgMSkgfCAoc3ViS2V5WzBdID4+PiAzMSk7XG5cdCAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMTsgaSA8IDc7IGkrKykge1xuXHQgICAgICAgICAgICAgICAgICAgIHN1YktleVtpXSA9IHN1YktleVtpXSA+Pj4gKChpIC0gMSkgKiA0ICsgMyk7XG5cdCAgICAgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgICAgICBzdWJLZXlbN10gPSAoc3ViS2V5WzddIDw8IDUpIHwgKHN1YktleVs3XSA+Pj4gMjcpO1xuXHQgICAgICAgICAgICB9XG5cblx0ICAgICAgICAgICAgLy8gQ29tcHV0ZSBpbnZlcnNlIHN1YmtleXNcblx0ICAgICAgICAgICAgdmFyIGludlN1YktleXMgPSB0aGlzLl9pbnZTdWJLZXlzID0gW107XG5cdCAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgMTY7IGkrKykge1xuXHQgICAgICAgICAgICAgICAgaW52U3ViS2V5c1tpXSA9IHN1YktleXNbMTUgLSBpXTtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgIH0sXG5cblx0ICAgICAgICBlbmNyeXB0QmxvY2s6IGZ1bmN0aW9uIChNLCBvZmZzZXQpIHtcblx0ICAgICAgICAgICAgdGhpcy5fZG9DcnlwdEJsb2NrKE0sIG9mZnNldCwgdGhpcy5fc3ViS2V5cyk7XG5cdCAgICAgICAgfSxcblxuXHQgICAgICAgIGRlY3J5cHRCbG9jazogZnVuY3Rpb24gKE0sIG9mZnNldCkge1xuXHQgICAgICAgICAgICB0aGlzLl9kb0NyeXB0QmxvY2soTSwgb2Zmc2V0LCB0aGlzLl9pbnZTdWJLZXlzKTtcblx0ICAgICAgICB9LFxuXG5cdCAgICAgICAgX2RvQ3J5cHRCbG9jazogZnVuY3Rpb24gKE0sIG9mZnNldCwgc3ViS2V5cykge1xuXHQgICAgICAgICAgICAvLyBHZXQgaW5wdXRcblx0ICAgICAgICAgICAgdGhpcy5fbEJsb2NrID0gTVtvZmZzZXRdO1xuXHQgICAgICAgICAgICB0aGlzLl9yQmxvY2sgPSBNW29mZnNldCArIDFdO1xuXG5cdCAgICAgICAgICAgIC8vIEluaXRpYWwgcGVybXV0YXRpb25cblx0ICAgICAgICAgICAgZXhjaGFuZ2VMUi5jYWxsKHRoaXMsIDQsICAweDBmMGYwZjBmKTtcblx0ICAgICAgICAgICAgZXhjaGFuZ2VMUi5jYWxsKHRoaXMsIDE2LCAweDAwMDBmZmZmKTtcblx0ICAgICAgICAgICAgZXhjaGFuZ2VSTC5jYWxsKHRoaXMsIDIsICAweDMzMzMzMzMzKTtcblx0ICAgICAgICAgICAgZXhjaGFuZ2VSTC5jYWxsKHRoaXMsIDgsICAweDAwZmYwMGZmKTtcblx0ICAgICAgICAgICAgZXhjaGFuZ2VMUi5jYWxsKHRoaXMsIDEsICAweDU1NTU1NTU1KTtcblxuXHQgICAgICAgICAgICAvLyBSb3VuZHNcblx0ICAgICAgICAgICAgZm9yICh2YXIgcm91bmQgPSAwOyByb3VuZCA8IDE2OyByb3VuZCsrKSB7XG5cdCAgICAgICAgICAgICAgICAvLyBTaG9ydGN1dHNcblx0ICAgICAgICAgICAgICAgIHZhciBzdWJLZXkgPSBzdWJLZXlzW3JvdW5kXTtcblx0ICAgICAgICAgICAgICAgIHZhciBsQmxvY2sgPSB0aGlzLl9sQmxvY2s7XG5cdCAgICAgICAgICAgICAgICB2YXIgckJsb2NrID0gdGhpcy5fckJsb2NrO1xuXG5cdCAgICAgICAgICAgICAgICAvLyBGZWlzdGVsIGZ1bmN0aW9uXG5cdCAgICAgICAgICAgICAgICB2YXIgZiA9IDA7XG5cdCAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IDg7IGkrKykge1xuXHQgICAgICAgICAgICAgICAgICAgIGYgfD0gU0JPWF9QW2ldWygockJsb2NrIF4gc3ViS2V5W2ldKSAmIFNCT1hfTUFTS1tpXSkgPj4+IDBdO1xuXHQgICAgICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICAgICAgdGhpcy5fbEJsb2NrID0gckJsb2NrO1xuXHQgICAgICAgICAgICAgICAgdGhpcy5fckJsb2NrID0gbEJsb2NrIF4gZjtcblx0ICAgICAgICAgICAgfVxuXG5cdCAgICAgICAgICAgIC8vIFVuZG8gc3dhcCBmcm9tIGxhc3Qgcm91bmRcblx0ICAgICAgICAgICAgdmFyIHQgPSB0aGlzLl9sQmxvY2s7XG5cdCAgICAgICAgICAgIHRoaXMuX2xCbG9jayA9IHRoaXMuX3JCbG9jaztcblx0ICAgICAgICAgICAgdGhpcy5fckJsb2NrID0gdDtcblxuXHQgICAgICAgICAgICAvLyBGaW5hbCBwZXJtdXRhdGlvblxuXHQgICAgICAgICAgICBleGNoYW5nZUxSLmNhbGwodGhpcywgMSwgIDB4NTU1NTU1NTUpO1xuXHQgICAgICAgICAgICBleGNoYW5nZVJMLmNhbGwodGhpcywgOCwgIDB4MDBmZjAwZmYpO1xuXHQgICAgICAgICAgICBleGNoYW5nZVJMLmNhbGwodGhpcywgMiwgIDB4MzMzMzMzMzMpO1xuXHQgICAgICAgICAgICBleGNoYW5nZUxSLmNhbGwodGhpcywgMTYsIDB4MDAwMGZmZmYpO1xuXHQgICAgICAgICAgICBleGNoYW5nZUxSLmNhbGwodGhpcywgNCwgIDB4MGYwZjBmMGYpO1xuXG5cdCAgICAgICAgICAgIC8vIFNldCBvdXRwdXRcblx0ICAgICAgICAgICAgTVtvZmZzZXRdID0gdGhpcy5fbEJsb2NrO1xuXHQgICAgICAgICAgICBNW29mZnNldCArIDFdID0gdGhpcy5fckJsb2NrO1xuXHQgICAgICAgIH0sXG5cblx0ICAgICAgICBrZXlTaXplOiA2NC8zMixcblxuXHQgICAgICAgIGl2U2l6ZTogNjQvMzIsXG5cblx0ICAgICAgICBibG9ja1NpemU6IDY0LzMyXG5cdCAgICB9KTtcblxuXHQgICAgLy8gU3dhcCBiaXRzIGFjcm9zcyB0aGUgbGVmdCBhbmQgcmlnaHQgd29yZHNcblx0ICAgIGZ1bmN0aW9uIGV4Y2hhbmdlTFIob2Zmc2V0LCBtYXNrKSB7XG5cdCAgICAgICAgdmFyIHQgPSAoKHRoaXMuX2xCbG9jayA+Pj4gb2Zmc2V0KSBeIHRoaXMuX3JCbG9jaykgJiBtYXNrO1xuXHQgICAgICAgIHRoaXMuX3JCbG9jayBePSB0O1xuXHQgICAgICAgIHRoaXMuX2xCbG9jayBePSB0IDw8IG9mZnNldDtcblx0ICAgIH1cblxuXHQgICAgZnVuY3Rpb24gZXhjaGFuZ2VSTChvZmZzZXQsIG1hc2spIHtcblx0ICAgICAgICB2YXIgdCA9ICgodGhpcy5fckJsb2NrID4+PiBvZmZzZXQpIF4gdGhpcy5fbEJsb2NrKSAmIG1hc2s7XG5cdCAgICAgICAgdGhpcy5fbEJsb2NrIF49IHQ7XG5cdCAgICAgICAgdGhpcy5fckJsb2NrIF49IHQgPDwgb2Zmc2V0O1xuXHQgICAgfVxuXG5cdCAgICAvKipcblx0ICAgICAqIFNob3J0Y3V0IGZ1bmN0aW9ucyB0byB0aGUgY2lwaGVyJ3Mgb2JqZWN0IGludGVyZmFjZS5cblx0ICAgICAqXG5cdCAgICAgKiBAZXhhbXBsZVxuXHQgICAgICpcblx0ICAgICAqICAgICB2YXIgY2lwaGVydGV4dCA9IENyeXB0b0pTLkRFUy5lbmNyeXB0KG1lc3NhZ2UsIGtleSwgY2ZnKTtcblx0ICAgICAqICAgICB2YXIgcGxhaW50ZXh0ICA9IENyeXB0b0pTLkRFUy5kZWNyeXB0KGNpcGhlcnRleHQsIGtleSwgY2ZnKTtcblx0ICAgICAqL1xuXHQgICAgQy5ERVMgPSBCbG9ja0NpcGhlci5fY3JlYXRlSGVscGVyKERFUyk7XG5cblx0ICAgIC8qKlxuXHQgICAgICogVHJpcGxlLURFUyBibG9jayBjaXBoZXIgYWxnb3JpdGhtLlxuXHQgICAgICovXG5cdCAgICB2YXIgVHJpcGxlREVTID0gQ19hbGdvLlRyaXBsZURFUyA9IEJsb2NrQ2lwaGVyLmV4dGVuZCh7XG5cdCAgICAgICAgX2RvUmVzZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgLy8gU2hvcnRjdXRzXG5cdCAgICAgICAgICAgIHZhciBrZXkgPSB0aGlzLl9rZXk7XG5cdCAgICAgICAgICAgIHZhciBrZXlXb3JkcyA9IGtleS53b3Jkcztcblx0ICAgICAgICAgICAgLy8gTWFrZSBzdXJlIHRoZSBrZXkgbGVuZ3RoIGlzIHZhbGlkICg2NCwgMTI4IG9yID49IDE5MiBiaXQpXG5cdCAgICAgICAgICAgIGlmIChrZXlXb3Jkcy5sZW5ndGggIT09IDIgJiYga2V5V29yZHMubGVuZ3RoICE9PSA0ICYmIGtleVdvcmRzLmxlbmd0aCA8IDYpIHtcblx0ICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignSW52YWxpZCBrZXkgbGVuZ3RoIC0gM0RFUyByZXF1aXJlcyB0aGUga2V5IGxlbmd0aCB0byBiZSA2NCwgMTI4LCAxOTIgb3IgPjE5Mi4nKTtcblx0ICAgICAgICAgICAgfVxuXG5cdCAgICAgICAgICAgIC8vIEV4dGVuZCB0aGUga2V5IGFjY29yZGluZyB0byB0aGUga2V5aW5nIG9wdGlvbnMgZGVmaW5lZCBpbiAzREVTIHN0YW5kYXJkXG5cdCAgICAgICAgICAgIHZhciBrZXkxID0ga2V5V29yZHMuc2xpY2UoMCwgMik7XG5cdCAgICAgICAgICAgIHZhciBrZXkyID0ga2V5V29yZHMubGVuZ3RoIDwgNCA/IGtleVdvcmRzLnNsaWNlKDAsIDIpIDoga2V5V29yZHMuc2xpY2UoMiwgNCk7XG5cdCAgICAgICAgICAgIHZhciBrZXkzID0ga2V5V29yZHMubGVuZ3RoIDwgNiA/IGtleVdvcmRzLnNsaWNlKDAsIDIpIDoga2V5V29yZHMuc2xpY2UoNCwgNik7XG5cblx0ICAgICAgICAgICAgLy8gQ3JlYXRlIERFUyBpbnN0YW5jZXNcblx0ICAgICAgICAgICAgdGhpcy5fZGVzMSA9IERFUy5jcmVhdGVFbmNyeXB0b3IoV29yZEFycmF5LmNyZWF0ZShrZXkxKSk7XG5cdCAgICAgICAgICAgIHRoaXMuX2RlczIgPSBERVMuY3JlYXRlRW5jcnlwdG9yKFdvcmRBcnJheS5jcmVhdGUoa2V5MikpO1xuXHQgICAgICAgICAgICB0aGlzLl9kZXMzID0gREVTLmNyZWF0ZUVuY3J5cHRvcihXb3JkQXJyYXkuY3JlYXRlKGtleTMpKTtcblx0ICAgICAgICB9LFxuXG5cdCAgICAgICAgZW5jcnlwdEJsb2NrOiBmdW5jdGlvbiAoTSwgb2Zmc2V0KSB7XG5cdCAgICAgICAgICAgIHRoaXMuX2RlczEuZW5jcnlwdEJsb2NrKE0sIG9mZnNldCk7XG5cdCAgICAgICAgICAgIHRoaXMuX2RlczIuZGVjcnlwdEJsb2NrKE0sIG9mZnNldCk7XG5cdCAgICAgICAgICAgIHRoaXMuX2RlczMuZW5jcnlwdEJsb2NrKE0sIG9mZnNldCk7XG5cdCAgICAgICAgfSxcblxuXHQgICAgICAgIGRlY3J5cHRCbG9jazogZnVuY3Rpb24gKE0sIG9mZnNldCkge1xuXHQgICAgICAgICAgICB0aGlzLl9kZXMzLmRlY3J5cHRCbG9jayhNLCBvZmZzZXQpO1xuXHQgICAgICAgICAgICB0aGlzLl9kZXMyLmVuY3J5cHRCbG9jayhNLCBvZmZzZXQpO1xuXHQgICAgICAgICAgICB0aGlzLl9kZXMxLmRlY3J5cHRCbG9jayhNLCBvZmZzZXQpO1xuXHQgICAgICAgIH0sXG5cblx0ICAgICAgICBrZXlTaXplOiAxOTIvMzIsXG5cblx0ICAgICAgICBpdlNpemU6IDY0LzMyLFxuXG5cdCAgICAgICAgYmxvY2tTaXplOiA2NC8zMlxuXHQgICAgfSk7XG5cblx0ICAgIC8qKlxuXHQgICAgICogU2hvcnRjdXQgZnVuY3Rpb25zIHRvIHRoZSBjaXBoZXIncyBvYmplY3QgaW50ZXJmYWNlLlxuXHQgICAgICpcblx0ICAgICAqIEBleGFtcGxlXG5cdCAgICAgKlxuXHQgICAgICogICAgIHZhciBjaXBoZXJ0ZXh0ID0gQ3J5cHRvSlMuVHJpcGxlREVTLmVuY3J5cHQobWVzc2FnZSwga2V5LCBjZmcpO1xuXHQgICAgICogICAgIHZhciBwbGFpbnRleHQgID0gQ3J5cHRvSlMuVHJpcGxlREVTLmRlY3J5cHQoY2lwaGVydGV4dCwga2V5LCBjZmcpO1xuXHQgICAgICovXG5cdCAgICBDLlRyaXBsZURFUyA9IEJsb2NrQ2lwaGVyLl9jcmVhdGVIZWxwZXIoVHJpcGxlREVTKTtcblx0fSgpKTtcblxuXG5cdHJldHVybiBDcnlwdG9KUy5UcmlwbGVERVM7XG5cbn0pKTsiXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///7628\n")},7952:(I,g,t)=>{"use strict";I.exports=t.p+"63046345ad9c36a73eda.png"},8235:function(__unused_webpack_module,__unused_webpack_exports,__webpack_require__){eval("//! moment.js locale configuration\n//! locale : Nepalese [ne]\n//! author : suvash : https://github.com/suvash\n\n;(function (global, factory) {\n true ? factory(__webpack_require__(95093)) :\n 0\n}(this, (function (moment) { 'use strict';\n\n //! moment.js locale configuration\n\n var symbolMap = {\n 1: '१',\n 2: '२',\n 3: '३',\n 4: '४',\n 5: '५',\n 6: '६',\n 7: '७',\n 8: '८',\n 9: '९',\n 0: '०',\n },\n numberMap = {\n '१': '1',\n '२': '2',\n '३': '3',\n '४': '4',\n '५': '5',\n '६': '6',\n '७': '7',\n '८': '8',\n '९': '9',\n '०': '0',\n };\n\n var ne = moment.defineLocale('ne', {\n months: 'जनवरी_फेब्रुवरी_मार्च_अप्रिल_मई_जुन_जुलाई_अगष्ट_सेप्टेम्बर_अक्टोबर_नोभेम्बर_डिसेम्बर'.split(\n '_'\n ),\n monthsShort:\n 'जन._फेब्रु._मार्च_अप्रि._मई_जुन_जुलाई._अग._सेप्ट._अक्टो._नोभे._डिसे.'.split(\n '_'\n ),\n monthsParseExact: true,\n weekdays: 'आइतबार_सोमबार_मङ्गलबार_बुधबार_बिहिबार_शुक्रबार_शनिबार'.split(\n '_'\n ),\n weekdaysShort: 'आइत._सोम._मङ्गल._बुध._बिहि._शुक्र._शनि.'.split('_'),\n weekdaysMin: 'आ._सो._मं._बु._बि._शु._श.'.split('_'),\n weekdaysParseExact: true,\n longDateFormat: {\n LT: 'Aको h:mm बजे',\n LTS: 'Aको h:mm:ss बजे',\n L: 'DD/MM/YYYY',\n LL: 'D MMMM YYYY',\n LLL: 'D MMMM YYYY, Aको h:mm बजे',\n LLLL: 'dddd, D MMMM YYYY, Aको h:mm बजे',\n },\n preparse: function (string) {\n return string.replace(/[१२३४५६७८९०]/g, function (match) {\n return numberMap[match];\n });\n },\n postformat: function (string) {\n return string.replace(/\\d/g, function (match) {\n return symbolMap[match];\n });\n },\n meridiemParse: /राति|बिहान|दिउँसो|साँझ/,\n meridiemHour: function (hour, meridiem) {\n if (hour === 12) {\n hour = 0;\n }\n if (meridiem === 'राति') {\n return hour < 4 ? hour : hour + 12;\n } else if (meridiem === 'बिहान') {\n return hour;\n } else if (meridiem === 'दिउँसो') {\n return hour >= 10 ? hour : hour + 12;\n } else if (meridiem === 'साँझ') {\n return hour + 12;\n }\n },\n meridiem: function (hour, minute, isLower) {\n if (hour < 3) {\n return 'राति';\n } else if (hour < 12) {\n return 'बिहान';\n } else if (hour < 16) {\n return 'दिउँसो';\n } else if (hour < 20) {\n return 'साँझ';\n } else {\n return 'राति';\n }\n },\n calendar: {\n sameDay: '[आज] LT',\n nextDay: '[भोलि] LT',\n nextWeek: '[आउँदो] dddd[,] LT',\n lastDay: '[हिजो] LT',\n lastWeek: '[गएको] dddd[,] LT',\n sameElse: 'L',\n },\n relativeTime: {\n future: '%sमा',\n past: '%s अगाडि',\n s: 'केही क्षण',\n ss: '%d सेकेण्ड',\n m: 'एक मिनेट',\n mm: '%d मिनेट',\n h: 'एक घण्टा',\n hh: '%d घण्टा',\n d: 'एक दिन',\n dd: '%d दिन',\n M: 'एक महिना',\n MM: '%d महिना',\n y: 'एक बर्ष',\n yy: '%d बर्ष',\n },\n week: {\n dow: 0, // Sunday is the first day of the week.\n doy: 6, // The week that contains Jan 6th is the first week of the year.\n },\n });\n\n return ne;\n\n})));\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiODIzNS5qcyIsIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL2l0Zy1uZXh0Z2VuLWZyb250ZW5kLy4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvbmUuanM/M2EzOSJdLCJzb3VyY2VzQ29udGVudCI6WyIvLyEgbW9tZW50LmpzIGxvY2FsZSBjb25maWd1cmF0aW9uXG4vLyEgbG9jYWxlIDogTmVwYWxlc2UgW25lXVxuLy8hIGF1dGhvciA6IHN1dmFzaCA6IGh0dHBzOi8vZ2l0aHViLmNvbS9zdXZhc2hcblxuOyhmdW5jdGlvbiAoZ2xvYmFsLCBmYWN0b3J5KSB7XG4gICB0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcgJiYgdHlwZW9mIG1vZHVsZSAhPT0gJ3VuZGVmaW5lZCdcbiAgICAgICAmJiB0eXBlb2YgcmVxdWlyZSA9PT0gJ2Z1bmN0aW9uJyA/IGZhY3RvcnkocmVxdWlyZSgnLi4vbW9tZW50JykpIDpcbiAgIHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgZGVmaW5lLmFtZCA/IGRlZmluZShbJy4uL21vbWVudCddLCBmYWN0b3J5KSA6XG4gICBmYWN0b3J5KGdsb2JhbC5tb21lbnQpXG59KHRoaXMsIChmdW5jdGlvbiAobW9tZW50KSB7ICd1c2Ugc3RyaWN0JztcblxuICAgIC8vISBtb21lbnQuanMgbG9jYWxlIGNvbmZpZ3VyYXRpb25cblxuICAgIHZhciBzeW1ib2xNYXAgPSB7XG4gICAgICAgICAgICAxOiAn4KWnJyxcbiAgICAgICAgICAgIDI6ICfgpagnLFxuICAgICAgICAgICAgMzogJ+ClqScsXG4gICAgICAgICAgICA0OiAn4KWqJyxcbiAgICAgICAgICAgIDU6ICfgpasnLFxuICAgICAgICAgICAgNjogJ+ClrCcsXG4gICAgICAgICAgICA3OiAn4KWtJyxcbiAgICAgICAgICAgIDg6ICfgpa4nLFxuICAgICAgICAgICAgOTogJ+ClrycsXG4gICAgICAgICAgICAwOiAn4KWmJyxcbiAgICAgICAgfSxcbiAgICAgICAgbnVtYmVyTWFwID0ge1xuICAgICAgICAgICAgJ+Clpyc6ICcxJyxcbiAgICAgICAgICAgICfgpagnOiAnMicsXG4gICAgICAgICAgICAn4KWpJzogJzMnLFxuICAgICAgICAgICAgJ+Clqic6ICc0JyxcbiAgICAgICAgICAgICfgpasnOiAnNScsXG4gICAgICAgICAgICAn4KWsJzogJzYnLFxuICAgICAgICAgICAgJ+ClrSc6ICc3JyxcbiAgICAgICAgICAgICfgpa4nOiAnOCcsXG4gICAgICAgICAgICAn4KWvJzogJzknLFxuICAgICAgICAgICAgJ+Clpic6ICcwJyxcbiAgICAgICAgfTtcblxuICAgIHZhciBuZSA9IG1vbWVudC5kZWZpbmVMb2NhbGUoJ25lJywge1xuICAgICAgICBtb250aHM6ICfgpJzgpKjgpLXgpLDgpYBf4KSr4KWH4KSs4KWN4KSw4KWB4KS14KSw4KWAX+CkruCkvuCksOCljeCkml/gpIXgpKrgpY3gpLDgpL/gpLJf4KSu4KSIX+CknOClgeCkqF/gpJzgpYHgpLLgpL7gpIhf4KSF4KSX4KS34KWN4KSfX+CkuOClh+CkquCljeCkn+Clh+CkruCljeCkrOCksF/gpIXgpJXgpY3gpJ/gpYvgpKzgpLBf4KSo4KWL4KSt4KWH4KSu4KWN4KSs4KSwX+CkoeCkv+CkuOClh+CkruCljeCkrOCksCcuc3BsaXQoXG4gICAgICAgICAgICAnXydcbiAgICAgICAgKSxcbiAgICAgICAgbW9udGhzU2hvcnQ6XG4gICAgICAgICAgICAn4KSc4KSoLl/gpKvgpYfgpKzgpY3gpLDgpYEuX+CkruCkvuCksOCljeCkml/gpIXgpKrgpY3gpLDgpL8uX+CkruCkiF/gpJzgpYHgpKhf4KSc4KWB4KSy4KS+4KSILl/gpIXgpJcuX+CkuOClh+CkquCljeCkny5f4KSF4KSV4KWN4KSf4KWLLl/gpKjgpYvgpK3gpYcuX+CkoeCkv+CkuOClhy4nLnNwbGl0KFxuICAgICAgICAgICAgICAgICdfJ1xuICAgICAgICAgICAgKSxcbiAgICAgICAgbW9udGhzUGFyc2VFeGFjdDogdHJ1ZSxcbiAgICAgICAgd2Vla2RheXM6ICfgpIbgpIfgpKTgpKzgpL7gpLBf4KS44KWL4KSu4KSs4KS+4KSwX+CkruCkmeCljeCkl+CksuCkrOCkvuCksF/gpKzgpYHgpKfgpKzgpL7gpLBf4KSs4KS/4KS54KS/4KSs4KS+4KSwX+CktuClgeCkleCljeCksOCkrOCkvuCksF/gpLbgpKjgpL/gpKzgpL7gpLAnLnNwbGl0KFxuICAgICAgICAgICAgJ18nXG4gICAgICAgICksXG4gICAgICAgIHdlZWtkYXlzU2hvcnQ6ICfgpIbgpIfgpKQuX+CkuOCli+Ckri5f4KSu4KSZ4KWN4KSX4KSyLl/gpKzgpYHgpKcuX+CkrOCkv+CkueCkvy5f4KS24KWB4KSV4KWN4KSwLl/gpLbgpKjgpL8uJy5zcGxpdCgnXycpLFxuICAgICAgICB3ZWVrZGF5c01pbjogJ+Ckhi5f4KS44KWLLl/gpK7gpIIuX+CkrOClgS5f4KSs4KS/Ll/gpLbgpYEuX+Ckti4nLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzUGFyc2VFeGFjdDogdHJ1ZSxcbiAgICAgICAgbG9uZ0RhdGVGb3JtYXQ6IHtcbiAgICAgICAgICAgIExUOiAnQeCkleCliyBoOm1tIOCkrOCknOClhycsXG4gICAgICAgICAgICBMVFM6ICdB4KSV4KWLIGg6bW06c3Mg4KSs4KSc4KWHJyxcbiAgICAgICAgICAgIEw6ICdERC9NTS9ZWVlZJyxcbiAgICAgICAgICAgIExMOiAnRCBNTU1NIFlZWVknLFxuICAgICAgICAgICAgTExMOiAnRCBNTU1NIFlZWVksIEHgpJXgpYsgaDptbSDgpKzgpJzgpYcnLFxuICAgICAgICAgICAgTExMTDogJ2RkZGQsIEQgTU1NTSBZWVlZLCBB4KSV4KWLIGg6bW0g4KSs4KSc4KWHJyxcbiAgICAgICAgfSxcbiAgICAgICAgcHJlcGFyc2U6IGZ1bmN0aW9uIChzdHJpbmcpIHtcbiAgICAgICAgICAgIHJldHVybiBzdHJpbmcucmVwbGFjZSgvW+Clp+ClqOClqeClquClq+ClrOClreClruClr+Clpl0vZywgZnVuY3Rpb24gKG1hdGNoKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG51bWJlck1hcFttYXRjaF07XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSxcbiAgICAgICAgcG9zdGZvcm1hdDogZnVuY3Rpb24gKHN0cmluZykge1xuICAgICAgICAgICAgcmV0dXJuIHN0cmluZy5yZXBsYWNlKC9cXGQvZywgZnVuY3Rpb24gKG1hdGNoKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHN5bWJvbE1hcFttYXRjaF07XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSxcbiAgICAgICAgbWVyaWRpZW1QYXJzZTogL+CksOCkvuCkpOCkv3zgpKzgpL/gpLngpL7gpKh84KSm4KS/4KSJ4KSB4KS44KWLfOCkuOCkvuCkgeCknS8sXG4gICAgICAgIG1lcmlkaWVtSG91cjogZnVuY3Rpb24gKGhvdXIsIG1lcmlkaWVtKSB7XG4gICAgICAgICAgICBpZiAoaG91ciA9PT0gMTIpIHtcbiAgICAgICAgICAgICAgICBob3VyID0gMDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChtZXJpZGllbSA9PT0gJ+CksOCkvuCkpOCkvycpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gaG91ciA8IDQgPyBob3VyIDogaG91ciArIDEyO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChtZXJpZGllbSA9PT0gJ+CkrOCkv+CkueCkvuCkqCcpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gaG91cjtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAobWVyaWRpZW0gPT09ICfgpKbgpL/gpIngpIHgpLjgpYsnKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGhvdXIgPj0gMTAgPyBob3VyIDogaG91ciArIDEyO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChtZXJpZGllbSA9PT0gJ+CkuOCkvuCkgeCknScpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gaG91ciArIDEyO1xuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBtZXJpZGllbTogZnVuY3Rpb24gKGhvdXIsIG1pbnV0ZSwgaXNMb3dlcikge1xuICAgICAgICAgICAgaWYgKGhvdXIgPCAzKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuICfgpLDgpL7gpKTgpL8nO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChob3VyIDwgMTIpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gJ+CkrOCkv+CkueCkvuCkqCc7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGhvdXIgPCAxNikge1xuICAgICAgICAgICAgICAgIHJldHVybiAn4KSm4KS/4KSJ4KSB4KS44KWLJztcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoaG91ciA8IDIwKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuICfgpLjgpL7gpIHgpJ0nO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gJ+CksOCkvuCkpOCkvyc7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIGNhbGVuZGFyOiB7XG4gICAgICAgICAgICBzYW1lRGF5OiAnW+CkhuCknF0gTFQnLFxuICAgICAgICAgICAgbmV4dERheTogJ1vgpK3gpYvgpLLgpL9dIExUJyxcbiAgICAgICAgICAgIG5leHRXZWVrOiAnW+CkhuCkieCkgeCkpuCli10gZGRkZFssXSBMVCcsXG4gICAgICAgICAgICBsYXN0RGF5OiAnW+CkueCkv+CknOCli10gTFQnLFxuICAgICAgICAgICAgbGFzdFdlZWs6ICdb4KSX4KSP4KSV4KWLXSBkZGRkWyxdIExUJyxcbiAgICAgICAgICAgIHNhbWVFbHNlOiAnTCcsXG4gICAgICAgIH0sXG4gICAgICAgIHJlbGF0aXZlVGltZToge1xuICAgICAgICAgICAgZnV0dXJlOiAnJXPgpK7gpL4nLFxuICAgICAgICAgICAgcGFzdDogJyVzIOCkheCkl+CkvuCkoeCkvycsXG4gICAgICAgICAgICBzOiAn4KSV4KWH4KS54KWAIOCkleCljeCkt+CkoycsXG4gICAgICAgICAgICBzczogJyVkIOCkuOClh+CkleClh+Cko+CljeCkoScsXG4gICAgICAgICAgICBtOiAn4KSP4KSVIOCkruCkv+CkqOClh+CknycsXG4gICAgICAgICAgICBtbTogJyVkIOCkruCkv+CkqOClh+CknycsXG4gICAgICAgICAgICBoOiAn4KSP4KSVIOCkmOCko+CljeCkn+CkvicsXG4gICAgICAgICAgICBoaDogJyVkIOCkmOCko+CljeCkn+CkvicsXG4gICAgICAgICAgICBkOiAn4KSP4KSVIOCkpuCkv+CkqCcsXG4gICAgICAgICAgICBkZDogJyVkIOCkpuCkv+CkqCcsXG4gICAgICAgICAgICBNOiAn4KSP4KSVIOCkruCkueCkv+CkqOCkvicsXG4gICAgICAgICAgICBNTTogJyVkIOCkruCkueCkv+CkqOCkvicsXG4gICAgICAgICAgICB5OiAn4KSP4KSVIOCkrOCksOCljeCktycsXG4gICAgICAgICAgICB5eTogJyVkIOCkrOCksOCljeCktycsXG4gICAgICAgIH0sXG4gICAgICAgIHdlZWs6IHtcbiAgICAgICAgICAgIGRvdzogMCwgLy8gU3VuZGF5IGlzIHRoZSBmaXJzdCBkYXkgb2YgdGhlIHdlZWsuXG4gICAgICAgICAgICBkb3k6IDYsIC8vIFRoZSB3ZWVrIHRoYXQgY29udGFpbnMgSmFuIDZ0aCBpcyB0aGUgZmlyc3Qgd2VlayBvZiB0aGUgeWVhci5cbiAgICAgICAgfSxcbiAgICB9KTtcblxuICAgIHJldHVybiBuZTtcblxufSkpKTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///8235\n")},8616:(__unused_webpack___webpack_module__,__webpack_exports__,__webpack_require__)=>{"use strict";eval('// ESM COMPAT FLAG\n__webpack_require__.r(__webpack_exports__);\n\n// EXPORTS\n__webpack_require__.d(__webpack_exports__, {\n AccountEntity: () => (/* reexport */ AccountEntity),\n ApiId: () => (/* reexport */ ApiId),\n AuthError: () => (/* reexport */ AuthError),\n AuthErrorCodes: () => (/* reexport */ AuthErrorCodes_namespaceObject),\n AuthErrorMessage: () => (/* reexport */ AuthErrorMessage),\n AuthenticationHeaderParser: () => (/* reexport */ AuthenticationHeaderParser),\n AuthenticationScheme: () => (/* reexport */ AuthenticationScheme),\n AzureCloudInstance: () => (/* reexport */ AzureCloudInstance),\n BrowserAuthError: () => (/* reexport */ BrowserAuthError),\n BrowserAuthErrorCodes: () => (/* reexport */ BrowserAuthErrorCodes_namespaceObject),\n BrowserAuthErrorMessage: () => (/* reexport */ BrowserAuthErrorMessage),\n BrowserCacheLocation: () => (/* reexport */ BrowserCacheLocation),\n BrowserConfigurationAuthError: () => (/* reexport */ BrowserConfigurationAuthError),\n BrowserConfigurationAuthErrorCodes: () => (/* reexport */ BrowserConfigurationAuthErrorCodes_namespaceObject),\n BrowserConfigurationAuthErrorMessage: () => (/* reexport */ BrowserConfigurationAuthErrorMessage),\n BrowserPerformanceClient: () => (/* reexport */ BrowserPerformanceClient),\n BrowserPerformanceMeasurement: () => (/* reexport */ BrowserPerformanceMeasurement.BrowserPerformanceMeasurement),\n BrowserStorage: () => (/* reexport */ BrowserStorage),\n BrowserUtils: () => (/* reexport */ BrowserUtils_namespaceObject),\n CacheLookupPolicy: () => (/* reexport */ CacheLookupPolicy),\n ClientAuthError: () => (/* reexport */ ClientAuthError),\n ClientAuthErrorCodes: () => (/* reexport */ ClientAuthErrorCodes_namespaceObject),\n ClientAuthErrorMessage: () => (/* reexport */ ClientAuthErrorMessage),\n ClientConfigurationError: () => (/* reexport */ ClientConfigurationError),\n ClientConfigurationErrorCodes: () => (/* reexport */ ClientConfigurationErrorCodes_namespaceObject),\n ClientConfigurationErrorMessage: () => (/* reexport */ ClientConfigurationErrorMessage),\n DEFAULT_IFRAME_TIMEOUT_MS: () => (/* reexport */ DEFAULT_IFRAME_TIMEOUT_MS),\n EventHandler: () => (/* reexport */ EventHandler),\n EventMessageUtils: () => (/* reexport */ EventMessageUtils),\n EventType: () => (/* reexport */ EventType),\n InteractionRequiredAuthError: () => (/* reexport */ InteractionRequiredAuthError),\n InteractionRequiredAuthErrorCodes: () => (/* reexport */ InteractionRequiredAuthErrorCodes_namespaceObject),\n InteractionRequiredAuthErrorMessage: () => (/* reexport */ InteractionRequiredAuthErrorMessage),\n InteractionStatus: () => (/* reexport */ InteractionStatus),\n InteractionType: () => (/* reexport */ InteractionType),\n JsonWebTokenTypes: () => (/* reexport */ JsonWebTokenTypes),\n LocalStorage: () => (/* reexport */ LocalStorage),\n LogLevel: () => (/* reexport */ LogLevel),\n Logger: () => (/* reexport */ Logger),\n MemoryStorage: () => (/* reexport */ MemoryStorage),\n NavigationClient: () => (/* reexport */ NavigationClient),\n OIDC_DEFAULT_SCOPES: () => (/* reexport */ OIDC_DEFAULT_SCOPES),\n PerformanceEvents: () => (/* reexport */ PerformanceEvents),\n PromptValue: () => (/* reexport */ PromptValue),\n ProtocolMode: () => (/* reexport */ ProtocolMode),\n PublicClientApplication: () => (/* reexport */ PublicClientApplication),\n PublicClientNext: () => (/* reexport */ PublicClientNext),\n ServerError: () => (/* reexport */ ServerError),\n ServerResponseType: () => (/* reexport */ ServerResponseType),\n SessionStorage: () => (/* reexport */ SessionStorage),\n SignedHttpRequest: () => (/* reexport */ SignedHttpRequest),\n StringUtils: () => (/* reexport */ StringUtils),\n StubPerformanceClient: () => (/* reexport */ StubPerformanceClient),\n UrlString: () => (/* reexport */ UrlString),\n WrapperSKU: () => (/* reexport */ WrapperSKU),\n createNestablePublicClientApplication: () => (/* reexport */ createNestablePublicClientApplication),\n createStandardPublicClientApplication: () => (/* reexport */ createStandardPublicClientApplication),\n stubbedPublicClientApplication: () => (/* reexport */ stubbedPublicClientApplication),\n version: () => (/* reexport */ packageMetadata_version)\n});\n\n// NAMESPACE OBJECT: ./node_modules/@azure/msal-common/dist/error/AuthErrorCodes.mjs\nvar AuthErrorCodes_namespaceObject = {};\n__webpack_require__.r(AuthErrorCodes_namespaceObject);\n__webpack_require__.d(AuthErrorCodes_namespaceObject, {\n postRequestFailed: () => (postRequestFailed),\n unexpectedError: () => (unexpectedError)\n});\n\n// NAMESPACE OBJECT: ./node_modules/@azure/msal-common/dist/error/ClientConfigurationErrorCodes.mjs\nvar ClientConfigurationErrorCodes_namespaceObject = {};\n__webpack_require__.r(ClientConfigurationErrorCodes_namespaceObject);\n__webpack_require__.d(ClientConfigurationErrorCodes_namespaceObject, {\n authorityMismatch: () => (authorityMismatch),\n authorityUriInsecure: () => (authorityUriInsecure),\n cannotAllowNativeBroker: () => (cannotAllowNativeBroker),\n cannotSetOIDCOptions: () => (cannotSetOIDCOptions),\n claimsRequestParsingError: () => (claimsRequestParsingError),\n emptyInputScopesError: () => (emptyInputScopesError),\n invalidAuthenticationHeader: () => (invalidAuthenticationHeader),\n invalidAuthorityMetadata: () => (invalidAuthorityMetadata),\n invalidClaims: () => (invalidClaims),\n invalidCloudDiscoveryMetadata: () => (invalidCloudDiscoveryMetadata),\n invalidCodeChallengeMethod: () => (invalidCodeChallengeMethod),\n invalidPromptValue: () => (invalidPromptValue),\n logoutRequestEmpty: () => (logoutRequestEmpty),\n missingNonceAuthenticationHeader: () => (missingNonceAuthenticationHeader),\n missingSshJwk: () => (missingSshJwk),\n missingSshKid: () => (missingSshKid),\n pkceParamsMissing: () => (pkceParamsMissing),\n redirectUriEmpty: () => (redirectUriEmpty),\n tokenRequestEmpty: () => (tokenRequestEmpty),\n untrustedAuthority: () => (untrustedAuthority),\n urlEmptyError: () => (urlEmptyError),\n urlParseError: () => (urlParseError)\n});\n\n// NAMESPACE OBJECT: ./node_modules/@azure/msal-common/dist/error/ClientAuthErrorCodes.mjs\nvar ClientAuthErrorCodes_namespaceObject = {};\n__webpack_require__.r(ClientAuthErrorCodes_namespaceObject);\n__webpack_require__.d(ClientAuthErrorCodes_namespaceObject, {\n authTimeNotFound: () => (authTimeNotFound),\n authorizationCodeMissingFromServerResponse: () => (authorizationCodeMissingFromServerResponse),\n bindingKeyNotRemoved: () => (bindingKeyNotRemoved),\n cannotAppendScopeSet: () => (cannotAppendScopeSet),\n cannotRemoveEmptyScope: () => (cannotRemoveEmptyScope),\n clientInfoDecodingError: () => (clientInfoDecodingError),\n clientInfoEmptyError: () => (clientInfoEmptyError),\n deviceCodeExpired: () => (deviceCodeExpired),\n deviceCodePollingCancelled: () => (deviceCodePollingCancelled),\n deviceCodeUnknownError: () => (deviceCodeUnknownError),\n emptyInputScopeSet: () => (emptyInputScopeSet),\n endSessionEndpointNotSupported: () => (endSessionEndpointNotSupported),\n endpointResolutionError: () => (endpointResolutionError),\n hashNotDeserialized: () => (hashNotDeserialized),\n invalidAssertion: () => (invalidAssertion),\n invalidCacheEnvironment: () => (invalidCacheEnvironment),\n invalidCacheRecord: () => (invalidCacheRecord),\n invalidClientCredential: () => (invalidClientCredential),\n invalidState: () => (invalidState),\n keyIdMissing: () => (keyIdMissing),\n maxAgeTranspired: () => (maxAgeTranspired),\n methodNotImplemented: () => (methodNotImplemented),\n missingTenantIdError: () => (missingTenantIdError),\n multipleMatchingAccounts: () => (multipleMatchingAccounts),\n multipleMatchingAppMetadata: () => (multipleMatchingAppMetadata),\n multipleMatchingTokens: () => (multipleMatchingTokens),\n nestedAppAuthBridgeDisabled: () => (nestedAppAuthBridgeDisabled),\n networkError: () => (networkError),\n noAccountFound: () => (noAccountFound),\n noAccountInSilentRequest: () => (noAccountInSilentRequest),\n noCryptoObject: () => (noCryptoObject),\n noNetworkConnectivity: () => (noNetworkConnectivity),\n nonceMismatch: () => (nonceMismatch),\n nullOrEmptyToken: () => (nullOrEmptyToken),\n openIdConfigError: () => (openIdConfigError),\n requestCannotBeMade: () => (requestCannotBeMade),\n stateMismatch: () => (stateMismatch),\n stateNotFound: () => (stateNotFound),\n tokenClaimsCnfRequiredForSignedJwt: () => (tokenClaimsCnfRequiredForSignedJwt),\n tokenParsingError: () => (tokenParsingError),\n tokenRefreshRequired: () => (tokenRefreshRequired),\n unexpectedCredentialType: () => (unexpectedCredentialType),\n userCanceled: () => (userCanceled),\n userTimeoutReached: () => (userTimeoutReached)\n});\n\n// NAMESPACE OBJECT: ./node_modules/@azure/msal-browser/dist/error/BrowserAuthErrorCodes.mjs\nvar BrowserAuthErrorCodes_namespaceObject = {};\n__webpack_require__.r(BrowserAuthErrorCodes_namespaceObject);\n__webpack_require__.d(BrowserAuthErrorCodes_namespaceObject, {\n authCodeOrNativeAccountIdRequired: () => (authCodeOrNativeAccountIdRequired),\n authCodeRequired: () => (authCodeRequired),\n authRequestNotSetError: () => (authRequestNotSetError),\n blockIframeReload: () => (blockIframeReload),\n blockNestedPopups: () => (blockNestedPopups),\n cryptoKeyNotFound: () => (cryptoKeyNotFound),\n cryptoNonExistent: () => (cryptoNonExistent),\n databaseNotOpen: () => (databaseNotOpen),\n databaseUnavailable: () => (databaseUnavailable),\n emptyNavigateUri: () => (emptyNavigateUri),\n emptyWindowError: () => (emptyWindowError),\n failedToBuildHeaders: () => (failedToBuildHeaders),\n failedToParseHeaders: () => (failedToParseHeaders),\n failedToParseResponse: () => (failedToParseResponse),\n getRequestFailed: () => (getRequestFailed),\n hashDoesNotContainKnownProperties: () => (hashDoesNotContainKnownProperties),\n hashEmptyError: () => (hashEmptyError),\n iframeClosedPrematurely: () => (iframeClosedPrematurely),\n interactionInProgress: () => (interactionInProgress),\n invalidBase64String: () => (invalidBase64String),\n invalidCacheType: () => (invalidCacheType),\n invalidPopTokenRequest: () => (invalidPopTokenRequest),\n monitorPopupTimeout: () => (monitorPopupTimeout),\n monitorWindowTimeout: () => (monitorWindowTimeout),\n nativeConnectionNotEstablished: () => (nativeConnectionNotEstablished),\n nativeExtensionNotInstalled: () => (nativeExtensionNotInstalled),\n nativeHandshakeTimeout: () => (nativeHandshakeTimeout),\n nativePromptNotSupported: () => (nativePromptNotSupported),\n noAccountError: () => (noAccountError),\n noCachedAuthorityError: () => (noCachedAuthorityError),\n noNetworkConnectivity: () => (BrowserAuthErrorCodes_noNetworkConnectivity),\n noStateInHash: () => (noStateInHash),\n noTokenRequestCacheError: () => (noTokenRequestCacheError),\n nonBrowserEnvironment: () => (nonBrowserEnvironment),\n pkceNotCreated: () => (pkceNotCreated),\n popupWindowError: () => (popupWindowError),\n postRequestFailed: () => (BrowserAuthErrorCodes_postRequestFailed),\n redirectInIframe: () => (redirectInIframe),\n silentLogoutUnsupported: () => (silentLogoutUnsupported),\n silentPromptValueError: () => (silentPromptValueError),\n spaCodeAndNativeAccountIdPresent: () => (spaCodeAndNativeAccountIdPresent),\n stateInteractionTypeMismatch: () => (stateInteractionTypeMismatch),\n unableToAcquireTokenFromNativePlatform: () => (unableToAcquireTokenFromNativePlatform),\n unableToLoadToken: () => (unableToLoadToken),\n unableToParseState: () => (unableToParseState),\n unableToParseTokenRequestCacheError: () => (unableToParseTokenRequestCacheError),\n uninitializedPublicClientApplication: () => (uninitializedPublicClientApplication),\n userCancelled: () => (userCancelled)\n});\n\n// NAMESPACE OBJECT: ./node_modules/@azure/msal-browser/dist/error/BrowserConfigurationAuthErrorCodes.mjs\nvar BrowserConfigurationAuthErrorCodes_namespaceObject = {};\n__webpack_require__.r(BrowserConfigurationAuthErrorCodes_namespaceObject);\n__webpack_require__.d(BrowserConfigurationAuthErrorCodes_namespaceObject, {\n inMemRedirectUnavailable: () => (inMemRedirectUnavailable),\n storageNotSupported: () => (storageNotSupported),\n stubbedPublicClientApplicationCalled: () => (stubbedPublicClientApplicationCalled)\n});\n\n// NAMESPACE OBJECT: ./node_modules/@azure/msal-browser/dist/utils/BrowserUtils.mjs\nvar BrowserUtils_namespaceObject = {};\n__webpack_require__.r(BrowserUtils_namespaceObject);\n__webpack_require__.d(BrowserUtils_namespaceObject, {\n blockAPICallsBeforeInitialize: () => (blockAPICallsBeforeInitialize),\n blockAcquireTokenInPopups: () => (blockAcquireTokenInPopups),\n blockNonBrowserEnvironment: () => (blockNonBrowserEnvironment),\n blockRedirectInIframe: () => (blockRedirectInIframe),\n blockReloadInHiddenIframes: () => (blockReloadInHiddenIframes),\n clearHash: () => (clearHash),\n createGuid: () => (createGuid),\n getCurrentUri: () => (getCurrentUri),\n getHomepage: () => (getHomepage),\n invoke: () => (invoke),\n invokeAsync: () => (invokeAsync),\n isInIframe: () => (isInIframe),\n isInPopup: () => (isInPopup),\n preconnect: () => (preconnect),\n preflightCheck: () => (preflightCheck),\n redirectPreflightCheck: () => (redirectPreflightCheck),\n replaceHash: () => (replaceHash)\n});\n\n// NAMESPACE OBJECT: ./node_modules/@azure/msal-common/dist/error/InteractionRequiredAuthErrorCodes.mjs\nvar InteractionRequiredAuthErrorCodes_namespaceObject = {};\n__webpack_require__.r(InteractionRequiredAuthErrorCodes_namespaceObject);\n__webpack_require__.d(InteractionRequiredAuthErrorCodes_namespaceObject, {\n badToken: () => (badToken),\n consentRequired: () => (consentRequired),\n interactionRequired: () => (interactionRequired),\n loginRequired: () => (loginRequired),\n nativeAccountUnavailable: () => (nativeAccountUnavailable),\n noTokensFound: () => (noTokensFound),\n refreshTokenExpired: () => (refreshTokenExpired)\n});\n\n;// ./node_modules/@azure/msal-common/dist/utils/Constants.mjs\n/*! @azure/msal-common v14.16.0 2024-11-05 */\n\n/*\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License.\r\n */\r\nconst Constants = {\r\n LIBRARY_NAME: "MSAL.JS",\r\n SKU: "msal.js.common",\r\n // Prefix for all library cache entries\r\n CACHE_PREFIX: "msal",\r\n // default authority\r\n DEFAULT_AUTHORITY: "https://login.microsoftonline.com/common/",\r\n DEFAULT_AUTHORITY_HOST: "login.microsoftonline.com",\r\n DEFAULT_COMMON_TENANT: "common",\r\n // ADFS String\r\n ADFS: "adfs",\r\n DSTS: "dstsv2",\r\n // Default AAD Instance Discovery Endpoint\r\n AAD_INSTANCE_DISCOVERY_ENDPT: "https://login.microsoftonline.com/common/discovery/instance?api-version=1.1&authorization_endpoint=",\r\n // CIAM URL\r\n CIAM_AUTH_URL: ".ciamlogin.com",\r\n AAD_TENANT_DOMAIN_SUFFIX: ".onmicrosoft.com",\r\n // Resource delimiter - used for certain cache entries\r\n RESOURCE_DELIM: "|",\r\n // Placeholder for non-existent account ids/objects\r\n NO_ACCOUNT: "NO_ACCOUNT",\r\n // Claims\r\n CLAIMS: "claims",\r\n // Consumer UTID\r\n CONSUMER_UTID: "9188040d-6c67-4c5b-b112-36a304b66dad",\r\n // Default scopes\r\n OPENID_SCOPE: "openid",\r\n PROFILE_SCOPE: "profile",\r\n OFFLINE_ACCESS_SCOPE: "offline_access",\r\n EMAIL_SCOPE: "email",\r\n // Default response type for authorization code flow\r\n CODE_RESPONSE_TYPE: "code",\r\n CODE_GRANT_TYPE: "authorization_code",\r\n RT_GRANT_TYPE: "refresh_token",\r\n FRAGMENT_RESPONSE_MODE: "fragment",\r\n S256_CODE_CHALLENGE_METHOD: "S256",\r\n URL_FORM_CONTENT_TYPE: "application/x-www-form-urlencoded;charset=utf-8",\r\n AUTHORIZATION_PENDING: "authorization_pending",\r\n NOT_DEFINED: "not_defined",\r\n EMPTY_STRING: "",\r\n NOT_APPLICABLE: "N/A",\r\n NOT_AVAILABLE: "Not Available",\r\n FORWARD_SLASH: "/",\r\n IMDS_ENDPOINT: "http://169.254.169.254/metadata/instance/compute/location",\r\n IMDS_VERSION: "2020-06-01",\r\n IMDS_TIMEOUT: 2000,\r\n AZURE_REGION_AUTO_DISCOVER_FLAG: "TryAutoDetect",\r\n REGIONAL_AUTH_PUBLIC_CLOUD_SUFFIX: "login.microsoft.com",\r\n KNOWN_PUBLIC_CLOUDS: [\r\n "login.microsoftonline.com",\r\n "login.windows.net",\r\n "login.microsoft.com",\r\n "sts.windows.net",\r\n ],\r\n TOKEN_RESPONSE_TYPE: "token",\r\n ID_TOKEN_RESPONSE_TYPE: "id_token",\r\n SHR_NONCE_VALIDITY: 240,\r\n INVALID_INSTANCE: "invalid_instance",\r\n};\r\nconst HttpStatus = {\r\n SUCCESS: 200,\r\n SUCCESS_RANGE_START: 200,\r\n SUCCESS_RANGE_END: 299,\r\n REDIRECT: 302,\r\n CLIENT_ERROR: 400,\r\n CLIENT_ERROR_RANGE_START: 400,\r\n BAD_REQUEST: 400,\r\n UNAUTHORIZED: 401,\r\n NOT_FOUND: 404,\r\n REQUEST_TIMEOUT: 408,\r\n TOO_MANY_REQUESTS: 429,\r\n CLIENT_ERROR_RANGE_END: 499,\r\n SERVER_ERROR: 500,\r\n SERVER_ERROR_RANGE_START: 500,\r\n SERVICE_UNAVAILABLE: 503,\r\n GATEWAY_TIMEOUT: 504,\r\n SERVER_ERROR_RANGE_END: 599,\r\n MULTI_SIDED_ERROR: 600,\r\n};\r\nconst OIDC_DEFAULT_SCOPES = [\r\n Constants.OPENID_SCOPE,\r\n Constants.PROFILE_SCOPE,\r\n Constants.OFFLINE_ACCESS_SCOPE,\r\n];\r\nconst OIDC_SCOPES = [...OIDC_DEFAULT_SCOPES, Constants.EMAIL_SCOPE];\r\n/**\r\n * Request header names\r\n */\r\nconst HeaderNames = {\r\n CONTENT_TYPE: "Content-Type",\r\n CONTENT_LENGTH: "Content-Length",\r\n RETRY_AFTER: "Retry-After",\r\n CCS_HEADER: "X-AnchorMailbox",\r\n WWWAuthenticate: "WWW-Authenticate",\r\n AuthenticationInfo: "Authentication-Info",\r\n X_MS_REQUEST_ID: "x-ms-request-id",\r\n X_MS_HTTP_VERSION: "x-ms-httpver",\r\n};\r\n/**\r\n * Persistent cache keys MSAL which stay while user is logged in.\r\n */\r\nconst PersistentCacheKeys = {\r\n ID_TOKEN: "idtoken",\r\n CLIENT_INFO: "client.info",\r\n ADAL_ID_TOKEN: "adal.idtoken",\r\n ERROR: "error",\r\n ERROR_DESC: "error.description",\r\n ACTIVE_ACCOUNT: "active-account",\r\n ACTIVE_ACCOUNT_FILTERS: "active-account-filters", // new cache entry for active_account for a more robust version for browser\r\n};\r\n/**\r\n * String constants related to AAD Authority\r\n */\r\nconst AADAuthorityConstants = {\r\n COMMON: "common",\r\n ORGANIZATIONS: "organizations",\r\n CONSUMERS: "consumers",\r\n};\r\n/**\r\n * Claims request keys\r\n */\r\nconst ClaimsRequestKeys = {\r\n ACCESS_TOKEN: "access_token",\r\n XMS_CC: "xms_cc",\r\n};\r\n/**\r\n * we considered making this "enum" in the request instead of string, however it looks like the allowed list of\r\n * prompt values kept changing over past couple of years. There are some undocumented prompt values for some\r\n * internal partners too, hence the choice of generic "string" type instead of the "enum"\r\n */\r\nconst PromptValue = {\r\n LOGIN: "login",\r\n SELECT_ACCOUNT: "select_account",\r\n CONSENT: "consent",\r\n NONE: "none",\r\n CREATE: "create",\r\n NO_SESSION: "no_session",\r\n};\r\n/**\r\n * allowed values for codeVerifier\r\n */\r\nconst CodeChallengeMethodValues = {\r\n PLAIN: "plain",\r\n S256: "S256",\r\n};\r\n/**\r\n * allowed values for server response type\r\n */\r\nconst ServerResponseType = {\r\n QUERY: "query",\r\n FRAGMENT: "fragment",\r\n};\r\n/**\r\n * allowed values for response_mode\r\n */\r\nconst ResponseMode = {\r\n ...ServerResponseType,\r\n FORM_POST: "form_post",\r\n};\r\n/**\r\n * allowed grant_type\r\n */\r\nconst GrantType = {\r\n IMPLICIT_GRANT: "implicit",\r\n AUTHORIZATION_CODE_GRANT: "authorization_code",\r\n CLIENT_CREDENTIALS_GRANT: "client_credentials",\r\n RESOURCE_OWNER_PASSWORD_GRANT: "password",\r\n REFRESH_TOKEN_GRANT: "refresh_token",\r\n DEVICE_CODE_GRANT: "device_code",\r\n JWT_BEARER: "urn:ietf:params:oauth:grant-type:jwt-bearer",\r\n};\r\n/**\r\n * Account types in Cache\r\n */\r\nconst CacheAccountType = {\r\n MSSTS_ACCOUNT_TYPE: "MSSTS",\r\n ADFS_ACCOUNT_TYPE: "ADFS",\r\n MSAV1_ACCOUNT_TYPE: "MSA",\r\n GENERIC_ACCOUNT_TYPE: "Generic", // NTLM, Kerberos, FBA, Basic etc\r\n};\r\n/**\r\n * Separators used in cache\r\n */\r\nconst Separators = {\r\n CACHE_KEY_SEPARATOR: "-",\r\n CLIENT_INFO_SEPARATOR: ".",\r\n};\r\n/**\r\n * Credential Type stored in the cache\r\n */\r\nconst CredentialType = {\r\n ID_TOKEN: "IdToken",\r\n ACCESS_TOKEN: "AccessToken",\r\n ACCESS_TOKEN_WITH_AUTH_SCHEME: "AccessToken_With_AuthScheme",\r\n REFRESH_TOKEN: "RefreshToken",\r\n};\r\n/**\r\n * Combine all cache types\r\n */\r\nconst CacheType = {\r\n ADFS: 1001,\r\n MSA: 1002,\r\n MSSTS: 1003,\r\n GENERIC: 1004,\r\n ACCESS_TOKEN: 2001,\r\n REFRESH_TOKEN: 2002,\r\n ID_TOKEN: 2003,\r\n APP_METADATA: 3001,\r\n UNDEFINED: 9999,\r\n};\r\n/**\r\n * More Cache related constants\r\n */\r\nconst APP_METADATA = "appmetadata";\r\nconst CLIENT_INFO = "client_info";\r\nconst THE_FAMILY_ID = "1";\r\nconst AUTHORITY_METADATA_CONSTANTS = {\r\n CACHE_KEY: "authority-metadata",\r\n REFRESH_TIME_SECONDS: 3600 * 24, // 24 Hours\r\n};\r\nconst AuthorityMetadataSource = {\r\n CONFIG: "config",\r\n CACHE: "cache",\r\n NETWORK: "network",\r\n HARDCODED_VALUES: "hardcoded_values",\r\n};\r\nconst SERVER_TELEM_CONSTANTS = {\r\n SCHEMA_VERSION: 5,\r\n MAX_CUR_HEADER_BYTES: 80,\r\n MAX_LAST_HEADER_BYTES: 330,\r\n MAX_CACHED_ERRORS: 50,\r\n CACHE_KEY: "server-telemetry",\r\n CATEGORY_SEPARATOR: "|",\r\n VALUE_SEPARATOR: ",",\r\n OVERFLOW_TRUE: "1",\r\n OVERFLOW_FALSE: "0",\r\n UNKNOWN_ERROR: "unknown_error",\r\n};\r\n/**\r\n * Type of the authentication request\r\n */\r\nconst AuthenticationScheme = {\r\n BEARER: "Bearer",\r\n POP: "pop",\r\n SSH: "ssh-cert",\r\n};\r\n/**\r\n * Constants related to throttling\r\n */\r\nconst ThrottlingConstants = {\r\n // Default time to throttle RequestThumbprint in seconds\r\n DEFAULT_THROTTLE_TIME_SECONDS: 60,\r\n // Default maximum time to throttle in seconds, overrides what the server sends back\r\n DEFAULT_MAX_THROTTLE_TIME_SECONDS: 3600,\r\n // Prefix for storing throttling entries\r\n THROTTLING_PREFIX: "throttling",\r\n // Value assigned to the x-ms-lib-capability header to indicate to the server the library supports throttling\r\n X_MS_LIB_CAPABILITY_VALUE: "retry-after, h429",\r\n};\r\nconst Errors = {\r\n INVALID_GRANT_ERROR: "invalid_grant",\r\n CLIENT_MISMATCH_ERROR: "client_mismatch",\r\n};\r\n/**\r\n * Password grant parameters\r\n */\r\nconst PasswordGrantConstants = {\r\n username: "username",\r\n password: "password",\r\n};\r\n/**\r\n * Response codes\r\n */\r\nconst ResponseCodes = {\r\n httpSuccess: 200,\r\n httpBadRequest: 400,\r\n};\r\n/**\r\n * Region Discovery Sources\r\n */\r\nconst RegionDiscoverySources = {\r\n FAILED_AUTO_DETECTION: "1",\r\n INTERNAL_CACHE: "2",\r\n ENVIRONMENT_VARIABLE: "3",\r\n IMDS: "4",\r\n};\r\n/**\r\n * Region Discovery Outcomes\r\n */\r\nconst RegionDiscoveryOutcomes = {\r\n CONFIGURED_MATCHES_DETECTED: "1",\r\n CONFIGURED_NO_AUTO_DETECTION: "2",\r\n CONFIGURED_NOT_DETECTED: "3",\r\n AUTO_DETECTION_REQUESTED_SUCCESSFUL: "4",\r\n AUTO_DETECTION_REQUESTED_FAILED: "5",\r\n};\r\n/**\r\n * Specifies the reason for fetching the access token from the identity provider\r\n */\r\nconst CacheOutcome = {\r\n // When a token is found in the cache or the cache is not supposed to be hit when making the request\r\n NOT_APPLICABLE: "0",\r\n // When the token request goes to the identity provider because force_refresh was set to true. Also occurs if claims were requested\r\n FORCE_REFRESH_OR_CLAIMS: "1",\r\n // When the token request goes to the identity provider because no cached access token exists\r\n NO_CACHED_ACCESS_TOKEN: "2",\r\n // When the token request goes to the identity provider because cached access token expired\r\n CACHED_ACCESS_TOKEN_EXPIRED: "3",\r\n // When the token request goes to the identity provider because refresh_in was used and the existing token needs to be refreshed\r\n PROACTIVELY_REFRESHED: "4",\r\n};\r\nconst JsonWebTokenTypes = {\r\n Jwt: "JWT",\r\n Jwk: "JWK",\r\n Pop: "pop",\r\n};\r\nconst ONE_DAY_IN_MS = 86400000;\r\n// Token renewal offset default in seconds\r\nconst DEFAULT_TOKEN_RENEWAL_OFFSET_SEC = 300;\n\n\n//# sourceMappingURL=Constants.mjs.map\n\n;// ./node_modules/@azure/msal-common/dist/error/AuthErrorCodes.mjs\n/*! @azure/msal-common v14.16.0 2024-11-05 */\n\n/*\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License.\r\n */\r\n/**\r\n * AuthErrorMessage class containing string constants used by error codes and messages.\r\n */\r\nconst unexpectedError = "unexpected_error";\r\nconst postRequestFailed = "post_request_failed";\n\n\n//# sourceMappingURL=AuthErrorCodes.mjs.map\n\n;// ./node_modules/@azure/msal-common/dist/error/AuthError.mjs\n/*! @azure/msal-common v14.16.0 2024-11-05 */\n\n\n\n\n\n\n/*\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License.\r\n */\r\nconst AuthErrorMessages = {\r\n [unexpectedError]: "Unexpected error in authentication.",\r\n [postRequestFailed]: "Post request failed from the network, could be a 4xx/5xx or a network unavailability. Please check the exact error code for details.",\r\n};\r\n/**\r\n * AuthErrorMessage class containing string constants used by error codes and messages.\r\n * @deprecated Use AuthErrorCodes instead\r\n */\r\nconst AuthErrorMessage = {\r\n unexpectedError: {\r\n code: unexpectedError,\r\n desc: AuthErrorMessages[unexpectedError],\r\n },\r\n postRequestFailed: {\r\n code: postRequestFailed,\r\n desc: AuthErrorMessages[postRequestFailed],\r\n },\r\n};\r\n/**\r\n * General error class thrown by the MSAL.js library.\r\n */\r\nclass AuthError extends Error {\r\n constructor(errorCode, errorMessage, suberror) {\r\n const errorString = errorMessage\r\n ? `${errorCode}: ${errorMessage}`\r\n : errorCode;\r\n super(errorString);\r\n Object.setPrototypeOf(this, AuthError.prototype);\r\n this.errorCode = errorCode || Constants.EMPTY_STRING;\r\n this.errorMessage = errorMessage || Constants.EMPTY_STRING;\r\n this.subError = suberror || Constants.EMPTY_STRING;\r\n this.name = "AuthError";\r\n }\r\n setCorrelationId(correlationId) {\r\n this.correlationId = correlationId;\r\n }\r\n}\r\nfunction createAuthError(code, additionalMessage) {\r\n return new AuthError(code, additionalMessage\r\n ? `${AuthErrorMessages[code]} ${additionalMessage}`\r\n : AuthErrorMessages[code]);\r\n}\n\n\n//# sourceMappingURL=AuthError.mjs.map\n\n;// ./node_modules/@azure/msal-common/dist/error/ClientConfigurationErrorCodes.mjs\n/*! @azure/msal-common v14.16.0 2024-11-05 */\n\n/*\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License.\r\n */\r\nconst redirectUriEmpty = "redirect_uri_empty";\r\nconst claimsRequestParsingError = "claims_request_parsing_error";\r\nconst authorityUriInsecure = "authority_uri_insecure";\r\nconst urlParseError = "url_parse_error";\r\nconst urlEmptyError = "empty_url_error";\r\nconst emptyInputScopesError = "empty_input_scopes_error";\r\nconst invalidPromptValue = "invalid_prompt_value";\r\nconst invalidClaims = "invalid_claims";\r\nconst tokenRequestEmpty = "token_request_empty";\r\nconst logoutRequestEmpty = "logout_request_empty";\r\nconst invalidCodeChallengeMethod = "invalid_code_challenge_method";\r\nconst pkceParamsMissing = "pkce_params_missing";\r\nconst invalidCloudDiscoveryMetadata = "invalid_cloud_discovery_metadata";\r\nconst invalidAuthorityMetadata = "invalid_authority_metadata";\r\nconst untrustedAuthority = "untrusted_authority";\r\nconst missingSshJwk = "missing_ssh_jwk";\r\nconst missingSshKid = "missing_ssh_kid";\r\nconst missingNonceAuthenticationHeader = "missing_nonce_authentication_header";\r\nconst invalidAuthenticationHeader = "invalid_authentication_header";\r\nconst cannotSetOIDCOptions = "cannot_set_OIDCOptions";\r\nconst cannotAllowNativeBroker = "cannot_allow_native_broker";\r\nconst authorityMismatch = "authority_mismatch";\n\n\n//# sourceMappingURL=ClientConfigurationErrorCodes.mjs.map\n\n;// ./node_modules/@azure/msal-common/dist/error/ClientConfigurationError.mjs\n/*! @azure/msal-common v14.16.0 2024-11-05 */\n\n\n\n\n\n\n/*\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License.\r\n */\r\nconst ClientConfigurationErrorMessages = {\r\n [redirectUriEmpty]: "A redirect URI is required for all calls, and none has been set.",\r\n [claimsRequestParsingError]: "Could not parse the given claims request object.",\r\n [authorityUriInsecure]: "Authority URIs must use https. Please see here for valid authority configuration options: https://docs.microsoft.com/en-us/azure/active-directory/develop/msal-js-initializing-client-applications#configuration-options",\r\n [urlParseError]: "URL could not be parsed into appropriate segments.",\r\n [urlEmptyError]: "URL was empty or null.",\r\n [emptyInputScopesError]: "Scopes cannot be passed as null, undefined or empty array because they are required to obtain an access token.",\r\n [invalidPromptValue]: "Please see here for valid configuration options: https://azuread.github.io/microsoft-authentication-library-for-js/ref/modules/_azure_msal_common.html#commonauthorizationurlrequest",\r\n [invalidClaims]: "Given claims parameter must be a stringified JSON object.",\r\n [tokenRequestEmpty]: "Token request was empty and not found in cache.",\r\n [logoutRequestEmpty]: "The logout request was null or undefined.",\r\n [invalidCodeChallengeMethod]: \'code_challenge_method passed is invalid. Valid values are "plain" and "S256".\',\r\n [pkceParamsMissing]: "Both params: code_challenge and code_challenge_method are to be passed if to be sent in the request",\r\n [invalidCloudDiscoveryMetadata]: "Invalid cloudDiscoveryMetadata provided. Must be a stringified JSON object containing tenant_discovery_endpoint and metadata fields",\r\n [invalidAuthorityMetadata]: "Invalid authorityMetadata provided. Must by a stringified JSON object containing authorization_endpoint, token_endpoint, issuer fields.",\r\n [untrustedAuthority]: "The provided authority is not a trusted authority. Please include this authority in the knownAuthorities config parameter.",\r\n [missingSshJwk]: "Missing sshJwk in SSH certificate request. A stringified JSON Web Key is required when using the SSH authentication scheme.",\r\n [missingSshKid]: "Missing sshKid in SSH certificate request. A string that uniquely identifies the public SSH key is required when using the SSH authentication scheme.",\r\n [missingNonceAuthenticationHeader]: "Unable to find an authentication header containing server nonce. Either the Authentication-Info or WWW-Authenticate headers must be present in order to obtain a server nonce.",\r\n [invalidAuthenticationHeader]: "Invalid authentication header provided",\r\n [cannotSetOIDCOptions]: "Cannot set OIDCOptions parameter. Please change the protocol mode to OIDC or use a non-Microsoft authority.",\r\n [cannotAllowNativeBroker]: "Cannot set allowNativeBroker parameter to true when not in AAD protocol mode.",\r\n [authorityMismatch]: "Authority mismatch error. Authority provided in login request or PublicClientApplication config does not match the environment of the provided account. Please use a matching account or make an interactive request to login to this authority.",\r\n};\r\n/**\r\n * ClientConfigurationErrorMessage class containing string constants used by error codes and messages.\r\n * @deprecated Use ClientConfigurationErrorCodes instead\r\n */\r\nconst ClientConfigurationErrorMessage = {\r\n redirectUriNotSet: {\r\n code: redirectUriEmpty,\r\n desc: ClientConfigurationErrorMessages[redirectUriEmpty],\r\n },\r\n claimsRequestParsingError: {\r\n code: claimsRequestParsingError,\r\n desc: ClientConfigurationErrorMessages[claimsRequestParsingError],\r\n },\r\n authorityUriInsecure: {\r\n code: authorityUriInsecure,\r\n desc: ClientConfigurationErrorMessages[authorityUriInsecure],\r\n },\r\n urlParseError: {\r\n code: urlParseError,\r\n desc: ClientConfigurationErrorMessages[urlParseError],\r\n },\r\n urlEmptyError: {\r\n code: urlEmptyError,\r\n desc: ClientConfigurationErrorMessages[urlEmptyError],\r\n },\r\n emptyScopesError: {\r\n code: emptyInputScopesError,\r\n desc: ClientConfigurationErrorMessages[emptyInputScopesError],\r\n },\r\n invalidPrompt: {\r\n code: invalidPromptValue,\r\n desc: ClientConfigurationErrorMessages[invalidPromptValue],\r\n },\r\n invalidClaimsRequest: {\r\n code: invalidClaims,\r\n desc: ClientConfigurationErrorMessages[invalidClaims],\r\n },\r\n tokenRequestEmptyError: {\r\n code: tokenRequestEmpty,\r\n desc: ClientConfigurationErrorMessages[tokenRequestEmpty],\r\n },\r\n logoutRequestEmptyError: {\r\n code: logoutRequestEmpty,\r\n desc: ClientConfigurationErrorMessages[logoutRequestEmpty],\r\n },\r\n invalidCodeChallengeMethod: {\r\n code: invalidCodeChallengeMethod,\r\n desc: ClientConfigurationErrorMessages[invalidCodeChallengeMethod],\r\n },\r\n invalidCodeChallengeParams: {\r\n code: pkceParamsMissing,\r\n desc: ClientConfigurationErrorMessages[pkceParamsMissing],\r\n },\r\n invalidCloudDiscoveryMetadata: {\r\n code: invalidCloudDiscoveryMetadata,\r\n desc: ClientConfigurationErrorMessages[invalidCloudDiscoveryMetadata],\r\n },\r\n invalidAuthorityMetadata: {\r\n code: invalidAuthorityMetadata,\r\n desc: ClientConfigurationErrorMessages[invalidAuthorityMetadata],\r\n },\r\n untrustedAuthority: {\r\n code: untrustedAuthority,\r\n desc: ClientConfigurationErrorMessages[untrustedAuthority],\r\n },\r\n missingSshJwk: {\r\n code: missingSshJwk,\r\n desc: ClientConfigurationErrorMessages[missingSshJwk],\r\n },\r\n missingSshKid: {\r\n code: missingSshKid,\r\n desc: ClientConfigurationErrorMessages[missingSshKid],\r\n },\r\n missingNonceAuthenticationHeader: {\r\n code: missingNonceAuthenticationHeader,\r\n desc: ClientConfigurationErrorMessages[missingNonceAuthenticationHeader],\r\n },\r\n invalidAuthenticationHeader: {\r\n code: invalidAuthenticationHeader,\r\n desc: ClientConfigurationErrorMessages[invalidAuthenticationHeader],\r\n },\r\n cannotSetOIDCOptions: {\r\n code: cannotSetOIDCOptions,\r\n desc: ClientConfigurationErrorMessages[cannotSetOIDCOptions],\r\n },\r\n cannotAllowNativeBroker: {\r\n code: cannotAllowNativeBroker,\r\n desc: ClientConfigurationErrorMessages[cannotAllowNativeBroker],\r\n },\r\n authorityMismatch: {\r\n code: authorityMismatch,\r\n desc: ClientConfigurationErrorMessages[authorityMismatch],\r\n },\r\n};\r\n/**\r\n * Error thrown when there is an error in configuration of the MSAL.js library.\r\n */\r\nclass ClientConfigurationError extends AuthError {\r\n constructor(errorCode) {\r\n super(errorCode, ClientConfigurationErrorMessages[errorCode]);\r\n this.name = "ClientConfigurationError";\r\n Object.setPrototypeOf(this, ClientConfigurationError.prototype);\r\n }\r\n}\r\nfunction createClientConfigurationError(errorCode) {\r\n return new ClientConfigurationError(errorCode);\r\n}\n\n\n//# sourceMappingURL=ClientConfigurationError.mjs.map\n\n;// ./node_modules/@azure/msal-common/dist/utils/StringUtils.mjs\n/*! @azure/msal-common v14.16.0 2024-11-05 */\n\n/*\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License.\r\n */\r\n/**\r\n * @hidden\r\n */\r\nclass StringUtils {\r\n /**\r\n * Check if stringified object is empty\r\n * @param strObj\r\n */\r\n static isEmptyObj(strObj) {\r\n if (strObj) {\r\n try {\r\n const obj = JSON.parse(strObj);\r\n return Object.keys(obj).length === 0;\r\n }\r\n catch (e) { }\r\n }\r\n return true;\r\n }\r\n static startsWith(str, search) {\r\n return str.indexOf(search) === 0;\r\n }\r\n static endsWith(str, search) {\r\n return (str.length >= search.length &&\r\n str.lastIndexOf(search) === str.length - search.length);\r\n }\r\n /**\r\n * Parses string into an object.\r\n *\r\n * @param query\r\n */\r\n static queryStringToObject(query) {\r\n const obj = {};\r\n const params = query.split("&");\r\n const decode = (s) => decodeURIComponent(s.replace(/\\+/g, " "));\r\n params.forEach((pair) => {\r\n if (pair.trim()) {\r\n const [key, value] = pair.split(/=(.+)/g, 2); // Split on the first occurence of the \'=\' character\r\n if (key && value) {\r\n obj[decode(key)] = decode(value);\r\n }\r\n }\r\n });\r\n return obj;\r\n }\r\n /**\r\n * Trims entries in an array.\r\n *\r\n * @param arr\r\n */\r\n static trimArrayEntries(arr) {\r\n return arr.map((entry) => entry.trim());\r\n }\r\n /**\r\n * Removes empty strings from array\r\n * @param arr\r\n */\r\n static removeEmptyStringsFromArray(arr) {\r\n return arr.filter((entry) => {\r\n return !!entry;\r\n });\r\n }\r\n /**\r\n * Attempts to parse a string into JSON\r\n * @param str\r\n */\r\n static jsonParseHelper(str) {\r\n try {\r\n return JSON.parse(str);\r\n }\r\n catch (e) {\r\n return null;\r\n }\r\n }\r\n /**\r\n * Tests if a given string matches a given pattern, with support for wildcards and queries.\r\n * @param pattern Wildcard pattern to string match. Supports "*" for wildcards and "?" for queries\r\n * @param input String to match against\r\n */\r\n static matchPattern(pattern, input) {\r\n /**\r\n * Wildcard support: https://stackoverflow.com/a/3117248/4888559\r\n * Queries: replaces "?" in string with escaped "\\?" for regex test\r\n */\r\n // eslint-disable-next-line security/detect-non-literal-regexp\r\n const regex = new RegExp(pattern\r\n .replace(/\\\\/g, "\\\\\\\\")\r\n .replace(/\\*/g, "[^ ]*")\r\n .replace(/\\?/g, "\\\\?"));\r\n return regex.test(input);\r\n }\r\n}\n\n\n//# sourceMappingURL=StringUtils.mjs.map\n\n;// ./node_modules/@azure/msal-common/dist/error/ClientAuthErrorCodes.mjs\n/*! @azure/msal-common v14.16.0 2024-11-05 */\n\n/*\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License.\r\n */\r\nconst clientInfoDecodingError = "client_info_decoding_error";\r\nconst clientInfoEmptyError = "client_info_empty_error";\r\nconst tokenParsingError = "token_parsing_error";\r\nconst nullOrEmptyToken = "null_or_empty_token";\r\nconst endpointResolutionError = "endpoints_resolution_error";\r\nconst networkError = "network_error";\r\nconst openIdConfigError = "openid_config_error";\r\nconst hashNotDeserialized = "hash_not_deserialized";\r\nconst invalidState = "invalid_state";\r\nconst stateMismatch = "state_mismatch";\r\nconst stateNotFound = "state_not_found";\r\nconst nonceMismatch = "nonce_mismatch";\r\nconst authTimeNotFound = "auth_time_not_found";\r\nconst maxAgeTranspired = "max_age_transpired";\r\nconst multipleMatchingTokens = "multiple_matching_tokens";\r\nconst multipleMatchingAccounts = "multiple_matching_accounts";\r\nconst multipleMatchingAppMetadata = "multiple_matching_appMetadata";\r\nconst requestCannotBeMade = "request_cannot_be_made";\r\nconst cannotRemoveEmptyScope = "cannot_remove_empty_scope";\r\nconst cannotAppendScopeSet = "cannot_append_scopeset";\r\nconst emptyInputScopeSet = "empty_input_scopeset";\r\nconst deviceCodePollingCancelled = "device_code_polling_cancelled";\r\nconst deviceCodeExpired = "device_code_expired";\r\nconst deviceCodeUnknownError = "device_code_unknown_error";\r\nconst noAccountInSilentRequest = "no_account_in_silent_request";\r\nconst invalidCacheRecord = "invalid_cache_record";\r\nconst invalidCacheEnvironment = "invalid_cache_environment";\r\nconst noAccountFound = "no_account_found";\r\nconst noCryptoObject = "no_crypto_object";\r\nconst unexpectedCredentialType = "unexpected_credential_type";\r\nconst invalidAssertion = "invalid_assertion";\r\nconst invalidClientCredential = "invalid_client_credential";\r\nconst tokenRefreshRequired = "token_refresh_required";\r\nconst userTimeoutReached = "user_timeout_reached";\r\nconst tokenClaimsCnfRequiredForSignedJwt = "token_claims_cnf_required_for_signedjwt";\r\nconst authorizationCodeMissingFromServerResponse = "authorization_code_missing_from_server_response";\r\nconst bindingKeyNotRemoved = "binding_key_not_removed";\r\nconst endSessionEndpointNotSupported = "end_session_endpoint_not_supported";\r\nconst keyIdMissing = "key_id_missing";\r\nconst noNetworkConnectivity = "no_network_connectivity";\r\nconst userCanceled = "user_canceled";\r\nconst missingTenantIdError = "missing_tenant_id_error";\r\nconst methodNotImplemented = "method_not_implemented";\r\nconst nestedAppAuthBridgeDisabled = "nested_app_auth_bridge_disabled";\n\n\n//# sourceMappingURL=ClientAuthErrorCodes.mjs.map\n\n;// ./node_modules/@azure/msal-common/dist/error/ClientAuthError.mjs\n/*! @azure/msal-common v14.16.0 2024-11-05 */\n\n\n\n\n\n\n/*\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License.\r\n */\r\n/**\r\n * ClientAuthErrorMessage class containing string constants used by error codes and messages.\r\n */\r\nconst ClientAuthErrorMessages = {\r\n [clientInfoDecodingError]: "The client info could not be parsed/decoded correctly",\r\n [clientInfoEmptyError]: "The client info was empty",\r\n [tokenParsingError]: "Token cannot be parsed",\r\n [nullOrEmptyToken]: "The token is null or empty",\r\n [endpointResolutionError]: "Endpoints cannot be resolved",\r\n [networkError]: "Network request failed",\r\n [openIdConfigError]: "Could not retrieve endpoints. Check your authority and verify the .well-known/openid-configuration endpoint returns the required endpoints.",\r\n [hashNotDeserialized]: "The hash parameters could not be deserialized",\r\n [invalidState]: "State was not the expected format",\r\n [stateMismatch]: "State mismatch error",\r\n [stateNotFound]: "State not found",\r\n [nonceMismatch]: "Nonce mismatch error",\r\n [authTimeNotFound]: "Max Age was requested and the ID token is missing the auth_time variable." +\r\n " auth_time is an optional claim and is not enabled by default - it must be enabled." +\r\n " See https://aka.ms/msaljs/optional-claims for more information.",\r\n [maxAgeTranspired]: "Max Age is set to 0, or too much time has elapsed since the last end-user authentication.",\r\n [multipleMatchingTokens]: "The cache contains multiple tokens satisfying the requirements. " +\r\n "Call AcquireToken again providing more requirements such as authority or account.",\r\n [multipleMatchingAccounts]: "The cache contains multiple accounts satisfying the given parameters. Please pass more info to obtain the correct account",\r\n [multipleMatchingAppMetadata]: "The cache contains multiple appMetadata satisfying the given parameters. Please pass more info to obtain the correct appMetadata",\r\n [requestCannotBeMade]: "Token request cannot be made without authorization code or refresh token.",\r\n [cannotRemoveEmptyScope]: "Cannot remove null or empty scope from ScopeSet",\r\n [cannotAppendScopeSet]: "Cannot append ScopeSet",\r\n [emptyInputScopeSet]: "Empty input ScopeSet cannot be processed",\r\n [deviceCodePollingCancelled]: "Caller has cancelled token endpoint polling during device code flow by setting DeviceCodeRequest.cancel = true.",\r\n [deviceCodeExpired]: "Device code is expired.",\r\n [deviceCodeUnknownError]: "Device code stopped polling for unknown reasons.",\r\n [noAccountInSilentRequest]: "Please pass an account object, silent flow is not supported without account information",\r\n [invalidCacheRecord]: "Cache record object was null or undefined.",\r\n [invalidCacheEnvironment]: "Invalid environment when attempting to create cache entry",\r\n [noAccountFound]: "No account found in cache for given key.",\r\n [noCryptoObject]: "No crypto object detected.",\r\n [unexpectedCredentialType]: "Unexpected credential type.",\r\n [invalidAssertion]: "Client assertion must meet requirements described in https://tools.ietf.org/html/rfc7515",\r\n [invalidClientCredential]: "Client credential (secret, certificate, or assertion) must not be empty when creating a confidential client. An application should at most have one credential",\r\n [tokenRefreshRequired]: "Cannot return token from cache because it must be refreshed. This may be due to one of the following reasons: forceRefresh parameter is set to true, claims have been requested, there is no cached access token or it is expired.",\r\n [userTimeoutReached]: "User defined timeout for device code polling reached",\r\n [tokenClaimsCnfRequiredForSignedJwt]: "Cannot generate a POP jwt if the token_claims are not populated",\r\n [authorizationCodeMissingFromServerResponse]: "Server response does not contain an authorization code to proceed",\r\n [bindingKeyNotRemoved]: "Could not remove the credential\'s binding key from storage.",\r\n [endSessionEndpointNotSupported]: "The provided authority does not support logout",\r\n [keyIdMissing]: "A keyId value is missing from the requested bound token\'s cache record and is required to match the token to it\'s stored binding key.",\r\n [noNetworkConnectivity]: "No network connectivity. Check your internet connection.",\r\n [userCanceled]: "User cancelled the flow.",\r\n [missingTenantIdError]: "A tenant id - not common, organizations, or consumers - must be specified when using the client_credentials flow.",\r\n [methodNotImplemented]: "This method has not been implemented",\r\n [nestedAppAuthBridgeDisabled]: "The nested app auth bridge is disabled",\r\n};\r\n/**\r\n * String constants used by error codes and messages.\r\n * @deprecated Use ClientAuthErrorCodes instead\r\n */\r\nconst ClientAuthErrorMessage = {\r\n clientInfoDecodingError: {\r\n code: clientInfoDecodingError,\r\n desc: ClientAuthErrorMessages[clientInfoDecodingError],\r\n },\r\n clientInfoEmptyError: {\r\n code: clientInfoEmptyError,\r\n desc: ClientAuthErrorMessages[clientInfoEmptyError],\r\n },\r\n tokenParsingError: {\r\n code: tokenParsingError,\r\n desc: ClientAuthErrorMessages[tokenParsingError],\r\n },\r\n nullOrEmptyToken: {\r\n code: nullOrEmptyToken,\r\n desc: ClientAuthErrorMessages[nullOrEmptyToken],\r\n },\r\n endpointResolutionError: {\r\n code: endpointResolutionError,\r\n desc: ClientAuthErrorMessages[endpointResolutionError],\r\n },\r\n networkError: {\r\n code: networkError,\r\n desc: ClientAuthErrorMessages[networkError],\r\n },\r\n unableToGetOpenidConfigError: {\r\n code: openIdConfigError,\r\n desc: ClientAuthErrorMessages[openIdConfigError],\r\n },\r\n hashNotDeserialized: {\r\n code: hashNotDeserialized,\r\n desc: ClientAuthErrorMessages[hashNotDeserialized],\r\n },\r\n invalidStateError: {\r\n code: invalidState,\r\n desc: ClientAuthErrorMessages[invalidState],\r\n },\r\n stateMismatchError: {\r\n code: stateMismatch,\r\n desc: ClientAuthErrorMessages[stateMismatch],\r\n },\r\n stateNotFoundError: {\r\n code: stateNotFound,\r\n desc: ClientAuthErrorMessages[stateNotFound],\r\n },\r\n nonceMismatchError: {\r\n code: nonceMismatch,\r\n desc: ClientAuthErrorMessages[nonceMismatch],\r\n },\r\n authTimeNotFoundError: {\r\n code: authTimeNotFound,\r\n desc: ClientAuthErrorMessages[authTimeNotFound],\r\n },\r\n maxAgeTranspired: {\r\n code: maxAgeTranspired,\r\n desc: ClientAuthErrorMessages[maxAgeTranspired],\r\n },\r\n multipleMatchingTokens: {\r\n code: multipleMatchingTokens,\r\n desc: ClientAuthErrorMessages[multipleMatchingTokens],\r\n },\r\n multipleMatchingAccounts: {\r\n code: multipleMatchingAccounts,\r\n desc: ClientAuthErrorMessages[multipleMatchingAccounts],\r\n },\r\n multipleMatchingAppMetadata: {\r\n code: multipleMatchingAppMetadata,\r\n desc: ClientAuthErrorMessages[multipleMatchingAppMetadata],\r\n },\r\n tokenRequestCannotBeMade: {\r\n code: requestCannotBeMade,\r\n desc: ClientAuthErrorMessages[requestCannotBeMade],\r\n },\r\n removeEmptyScopeError: {\r\n code: cannotRemoveEmptyScope,\r\n desc: ClientAuthErrorMessages[cannotRemoveEmptyScope],\r\n },\r\n appendScopeSetError: {\r\n code: cannotAppendScopeSet,\r\n desc: ClientAuthErrorMessages[cannotAppendScopeSet],\r\n },\r\n emptyInputScopeSetError: {\r\n code: emptyInputScopeSet,\r\n desc: ClientAuthErrorMessages[emptyInputScopeSet],\r\n },\r\n DeviceCodePollingCancelled: {\r\n code: deviceCodePollingCancelled,\r\n desc: ClientAuthErrorMessages[deviceCodePollingCancelled],\r\n },\r\n DeviceCodeExpired: {\r\n code: deviceCodeExpired,\r\n desc: ClientAuthErrorMessages[deviceCodeExpired],\r\n },\r\n DeviceCodeUnknownError: {\r\n code: deviceCodeUnknownError,\r\n desc: ClientAuthErrorMessages[deviceCodeUnknownError],\r\n },\r\n NoAccountInSilentRequest: {\r\n code: noAccountInSilentRequest,\r\n desc: ClientAuthErrorMessages[noAccountInSilentRequest],\r\n },\r\n invalidCacheRecord: {\r\n code: invalidCacheRecord,\r\n desc: ClientAuthErrorMessages[invalidCacheRecord],\r\n },\r\n invalidCacheEnvironment: {\r\n code: invalidCacheEnvironment,\r\n desc: ClientAuthErrorMessages[invalidCacheEnvironment],\r\n },\r\n noAccountFound: {\r\n code: noAccountFound,\r\n desc: ClientAuthErrorMessages[noAccountFound],\r\n },\r\n noCryptoObj: {\r\n code: noCryptoObject,\r\n desc: ClientAuthErrorMessages[noCryptoObject],\r\n },\r\n unexpectedCredentialType: {\r\n code: unexpectedCredentialType,\r\n desc: ClientAuthErrorMessages[unexpectedCredentialType],\r\n },\r\n invalidAssertion: {\r\n code: invalidAssertion,\r\n desc: ClientAuthErrorMessages[invalidAssertion],\r\n },\r\n invalidClientCredential: {\r\n code: invalidClientCredential,\r\n desc: ClientAuthErrorMessages[invalidClientCredential],\r\n },\r\n tokenRefreshRequired: {\r\n code: tokenRefreshRequired,\r\n desc: ClientAuthErrorMessages[tokenRefreshRequired],\r\n },\r\n userTimeoutReached: {\r\n code: userTimeoutReached,\r\n desc: ClientAuthErrorMessages[userTimeoutReached],\r\n },\r\n tokenClaimsRequired: {\r\n code: tokenClaimsCnfRequiredForSignedJwt,\r\n desc: ClientAuthErrorMessages[tokenClaimsCnfRequiredForSignedJwt],\r\n },\r\n noAuthorizationCodeFromServer: {\r\n code: authorizationCodeMissingFromServerResponse,\r\n desc: ClientAuthErrorMessages[authorizationCodeMissingFromServerResponse],\r\n },\r\n bindingKeyNotRemovedError: {\r\n code: bindingKeyNotRemoved,\r\n desc: ClientAuthErrorMessages[bindingKeyNotRemoved],\r\n },\r\n logoutNotSupported: {\r\n code: endSessionEndpointNotSupported,\r\n desc: ClientAuthErrorMessages[endSessionEndpointNotSupported],\r\n },\r\n keyIdMissing: {\r\n code: keyIdMissing,\r\n desc: ClientAuthErrorMessages[keyIdMissing],\r\n },\r\n noNetworkConnectivity: {\r\n code: noNetworkConnectivity,\r\n desc: ClientAuthErrorMessages[noNetworkConnectivity],\r\n },\r\n userCanceledError: {\r\n code: userCanceled,\r\n desc: ClientAuthErrorMessages[userCanceled],\r\n },\r\n missingTenantIdError: {\r\n code: missingTenantIdError,\r\n desc: ClientAuthErrorMessages[missingTenantIdError],\r\n },\r\n nestedAppAuthBridgeDisabled: {\r\n code: nestedAppAuthBridgeDisabled,\r\n desc: ClientAuthErrorMessages[nestedAppAuthBridgeDisabled],\r\n },\r\n};\r\n/**\r\n * Error thrown when there is an error in the client code running on the browser.\r\n */\r\nclass ClientAuthError extends AuthError {\r\n constructor(errorCode, additionalMessage) {\r\n super(errorCode, additionalMessage\r\n ? `${ClientAuthErrorMessages[errorCode]}: ${additionalMessage}`\r\n : ClientAuthErrorMessages[errorCode]);\r\n this.name = "ClientAuthError";\r\n Object.setPrototypeOf(this, ClientAuthError.prototype);\r\n }\r\n}\r\nfunction createClientAuthError(errorCode, additionalMessage) {\r\n return new ClientAuthError(errorCode, additionalMessage);\r\n}\n\n\n//# sourceMappingURL=ClientAuthError.mjs.map\n\n;// ./node_modules/@azure/msal-common/dist/utils/UrlUtils.mjs\n/*! @azure/msal-common v14.16.0 2024-11-05 */\n\n\n\n\n/*\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License.\r\n */\r\n/**\r\n * Parses hash string from given string. Returns empty string if no hash symbol is found.\r\n * @param hashString\r\n */\r\nfunction stripLeadingHashOrQuery(responseString) {\r\n if (responseString.startsWith("#/")) {\r\n return responseString.substring(2);\r\n }\r\n else if (responseString.startsWith("#") ||\r\n responseString.startsWith("?")) {\r\n return responseString.substring(1);\r\n }\r\n return responseString;\r\n}\r\n/**\r\n * Returns URL hash as server auth code response object.\r\n */\r\nfunction getDeserializedResponse(responseString) {\r\n // Check if given hash is empty\r\n if (!responseString || responseString.indexOf("=") < 0) {\r\n return null;\r\n }\r\n try {\r\n // Strip the # or ? symbol if present\r\n const normalizedResponse = stripLeadingHashOrQuery(responseString);\r\n // If # symbol was not present, above will return empty string, so give original hash value\r\n const deserializedHash = Object.fromEntries(new URLSearchParams(normalizedResponse));\r\n // Check for known response properties\r\n if (deserializedHash.code ||\r\n deserializedHash.error ||\r\n deserializedHash.error_description ||\r\n deserializedHash.state) {\r\n return deserializedHash;\r\n }\r\n }\r\n catch (e) {\r\n throw createClientAuthError(hashNotDeserialized);\r\n }\r\n return null;\r\n}\n\n\n//# sourceMappingURL=UrlUtils.mjs.map\n\n;// ./node_modules/@azure/msal-common/dist/url/UrlString.mjs\n/*! @azure/msal-common v14.16.0 2024-11-05 */\n\n\n\n\n\n\n\n/*\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License.\r\n */\r\n/**\r\n * Url object class which can perform various transformations on url strings.\r\n */\r\nclass UrlString {\r\n get urlString() {\r\n return this._urlString;\r\n }\r\n constructor(url) {\r\n this._urlString = url;\r\n if (!this._urlString) {\r\n // Throws error if url is empty\r\n throw createClientConfigurationError(urlEmptyError);\r\n }\r\n if (!url.includes("#")) {\r\n this._urlString = UrlString.canonicalizeUri(url);\r\n }\r\n }\r\n /**\r\n * Ensure urls are lower case and end with a / character.\r\n * @param url\r\n */\r\n static canonicalizeUri(url) {\r\n if (url) {\r\n let lowerCaseUrl = url.toLowerCase();\r\n if (StringUtils.endsWith(lowerCaseUrl, "?")) {\r\n lowerCaseUrl = lowerCaseUrl.slice(0, -1);\r\n }\r\n else if (StringUtils.endsWith(lowerCaseUrl, "?/")) {\r\n lowerCaseUrl = lowerCaseUrl.slice(0, -2);\r\n }\r\n if (!StringUtils.endsWith(lowerCaseUrl, "/")) {\r\n lowerCaseUrl += "/";\r\n }\r\n return lowerCaseUrl;\r\n }\r\n return url;\r\n }\r\n /**\r\n * Throws if urlString passed is not a valid authority URI string.\r\n */\r\n validateAsUri() {\r\n // Attempts to parse url for uri components\r\n let components;\r\n try {\r\n components = this.getUrlComponents();\r\n }\r\n catch (e) {\r\n throw createClientConfigurationError(urlParseError);\r\n }\r\n // Throw error if URI or path segments are not parseable.\r\n if (!components.HostNameAndPort || !components.PathSegments) {\r\n throw createClientConfigurationError(urlParseError);\r\n }\r\n // Throw error if uri is insecure.\r\n if (!components.Protocol ||\r\n components.Protocol.toLowerCase() !== "https:") {\r\n throw createClientConfigurationError(authorityUriInsecure);\r\n }\r\n }\r\n /**\r\n * Given a url and a query string return the url with provided query string appended\r\n * @param url\r\n * @param queryString\r\n */\r\n static appendQueryString(url, queryString) {\r\n if (!queryString) {\r\n return url;\r\n }\r\n return url.indexOf("?") < 0\r\n ? `${url}?${queryString}`\r\n : `${url}&${queryString}`;\r\n }\r\n /**\r\n * Returns a url with the hash removed\r\n * @param url\r\n */\r\n static removeHashFromUrl(url) {\r\n return UrlString.canonicalizeUri(url.split("#")[0]);\r\n }\r\n /**\r\n * Given a url like https://a:b/common/d?e=f#g, and a tenantId, returns https://a:b/tenantId/d\r\n * @param href The url\r\n * @param tenantId The tenant id to replace\r\n */\r\n replaceTenantPath(tenantId) {\r\n const urlObject = this.getUrlComponents();\r\n const pathArray = urlObject.PathSegments;\r\n if (tenantId &&\r\n pathArray.length !== 0 &&\r\n (pathArray[0] === AADAuthorityConstants.COMMON ||\r\n pathArray[0] === AADAuthorityConstants.ORGANIZATIONS)) {\r\n pathArray[0] = tenantId;\r\n }\r\n return UrlString.constructAuthorityUriFromObject(urlObject);\r\n }\r\n /**\r\n * Parses out the components from a url string.\r\n * @returns An object with the various components. Please cache this value insted of calling this multiple times on the same url.\r\n */\r\n getUrlComponents() {\r\n // https://gist.github.com/curtisz/11139b2cfcaef4a261e0\r\n const regEx = RegExp("^(([^:/?#]+):)?(//([^/?#]*))?([^?#]*)(\\\\?([^#]*))?(#(.*))?");\r\n // If url string does not match regEx, we throw an error\r\n const match = this.urlString.match(regEx);\r\n if (!match) {\r\n throw createClientConfigurationError(urlParseError);\r\n }\r\n // Url component object\r\n const urlComponents = {\r\n Protocol: match[1],\r\n HostNameAndPort: match[4],\r\n AbsolutePath: match[5],\r\n QueryString: match[7],\r\n };\r\n let pathSegments = urlComponents.AbsolutePath.split("/");\r\n pathSegments = pathSegments.filter((val) => val && val.length > 0); // remove empty elements\r\n urlComponents.PathSegments = pathSegments;\r\n if (urlComponents.QueryString &&\r\n urlComponents.QueryString.endsWith("/")) {\r\n urlComponents.QueryString = urlComponents.QueryString.substring(0, urlComponents.QueryString.length - 1);\r\n }\r\n return urlComponents;\r\n }\r\n static getDomainFromUrl(url) {\r\n const regEx = RegExp("^([^:/?#]+://)?([^/?#]*)");\r\n const match = url.match(regEx);\r\n if (!match) {\r\n throw createClientConfigurationError(urlParseError);\r\n }\r\n return match[2];\r\n }\r\n static getAbsoluteUrl(relativeUrl, baseUrl) {\r\n if (relativeUrl[0] === Constants.FORWARD_SLASH) {\r\n const url = new UrlString(baseUrl);\r\n const baseComponents = url.getUrlComponents();\r\n return (baseComponents.Protocol +\r\n "//" +\r\n baseComponents.HostNameAndPort +\r\n relativeUrl);\r\n }\r\n return relativeUrl;\r\n }\r\n static constructAuthorityUriFromObject(urlObject) {\r\n return new UrlString(urlObject.Protocol +\r\n "//" +\r\n urlObject.HostNameAndPort +\r\n "/" +\r\n urlObject.PathSegments.join("/"));\r\n }\r\n /**\r\n * Check if the hash of the URL string contains known properties\r\n * @deprecated This API will be removed in a future version\r\n */\r\n static hashContainsKnownProperties(response) {\r\n return !!getDeserializedResponse(response);\r\n }\r\n}\n\n\n//# sourceMappingURL=UrlString.mjs.map\n\n;// ./node_modules/@azure/msal-common/dist/utils/FunctionWrappers.mjs\n/*! @azure/msal-common v14.16.0 2024-11-05 */\n\n/*\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License.\r\n */\r\n/**\r\n * Wraps a function with a performance measurement.\r\n * Usage: invoke(functionToCall, performanceClient, "EventName", "correlationId")(...argsToPassToFunction)\r\n * @param callback\r\n * @param eventName\r\n * @param logger\r\n * @param telemetryClient\r\n * @param correlationId\r\n * @returns\r\n * @internal\r\n */\r\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\r\nconst invoke = (callback, eventName, logger, telemetryClient, correlationId) => {\r\n return (...args) => {\r\n logger.trace(`Executing function ${eventName}`);\r\n const inProgressEvent = telemetryClient?.startMeasurement(eventName, correlationId);\r\n if (correlationId) {\r\n // Track number of times this API is called in a single request\r\n const eventCount = eventName + "CallCount";\r\n telemetryClient?.incrementFields({ [eventCount]: 1 }, correlationId);\r\n }\r\n try {\r\n const result = callback(...args);\r\n inProgressEvent?.end({\r\n success: true,\r\n });\r\n logger.trace(`Returning result from ${eventName}`);\r\n return result;\r\n }\r\n catch (e) {\r\n logger.trace(`Error occurred in ${eventName}`);\r\n try {\r\n logger.trace(JSON.stringify(e));\r\n }\r\n catch (e) {\r\n logger.trace("Unable to print error message.");\r\n }\r\n inProgressEvent?.end({\r\n success: false,\r\n }, e);\r\n throw e;\r\n }\r\n };\r\n};\r\n/**\r\n * Wraps an async function with a performance measurement.\r\n * Usage: invokeAsync(functionToCall, performanceClient, "EventName", "correlationId")(...argsToPassToFunction)\r\n * @param callback\r\n * @param eventName\r\n * @param logger\r\n * @param telemetryClient\r\n * @param correlationId\r\n * @returns\r\n * @internal\r\n *\r\n */\r\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\r\nconst invokeAsync = (callback, eventName, logger, telemetryClient, correlationId) => {\r\n return (...args) => {\r\n logger.trace(`Executing function ${eventName}`);\r\n const inProgressEvent = telemetryClient?.startMeasurement(eventName, correlationId);\r\n if (correlationId) {\r\n // Track number of times this API is called in a single request\r\n const eventCount = eventName + "CallCount";\r\n telemetryClient?.incrementFields({ [eventCount]: 1 }, correlationId);\r\n }\r\n telemetryClient?.setPreQueueTime(eventName, correlationId);\r\n return callback(...args)\r\n .then((response) => {\r\n logger.trace(`Returning result from ${eventName}`);\r\n inProgressEvent?.end({\r\n success: true,\r\n });\r\n return response;\r\n })\r\n .catch((e) => {\r\n logger.trace(`Error occurred in ${eventName}`);\r\n try {\r\n logger.trace(JSON.stringify(e));\r\n }\r\n catch (e) {\r\n logger.trace("Unable to print error message.");\r\n }\r\n inProgressEvent?.end({\r\n success: false,\r\n }, e);\r\n throw e;\r\n });\r\n };\r\n};\n\n\n//# sourceMappingURL=FunctionWrappers.mjs.map\n\n;// ./node_modules/@azure/msal-browser/dist/error/BrowserAuthErrorCodes.mjs\n/*! @azure/msal-browser v3.28.1 2025-01-14 */\n\n/*\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License.\r\n */\r\nconst pkceNotCreated = "pkce_not_created";\r\nconst cryptoNonExistent = "crypto_nonexistent";\r\nconst emptyNavigateUri = "empty_navigate_uri";\r\nconst hashEmptyError = "hash_empty_error";\r\nconst noStateInHash = "no_state_in_hash";\r\nconst hashDoesNotContainKnownProperties = "hash_does_not_contain_known_properties";\r\nconst unableToParseState = "unable_to_parse_state";\r\nconst stateInteractionTypeMismatch = "state_interaction_type_mismatch";\r\nconst interactionInProgress = "interaction_in_progress";\r\nconst popupWindowError = "popup_window_error";\r\nconst emptyWindowError = "empty_window_error";\r\nconst userCancelled = "user_cancelled";\r\nconst monitorPopupTimeout = "monitor_popup_timeout";\r\nconst monitorWindowTimeout = "monitor_window_timeout";\r\nconst redirectInIframe = "redirect_in_iframe";\r\nconst blockIframeReload = "block_iframe_reload";\r\nconst blockNestedPopups = "block_nested_popups";\r\nconst iframeClosedPrematurely = "iframe_closed_prematurely";\r\nconst silentLogoutUnsupported = "silent_logout_unsupported";\r\nconst noAccountError = "no_account_error";\r\nconst silentPromptValueError = "silent_prompt_value_error";\r\nconst noTokenRequestCacheError = "no_token_request_cache_error";\r\nconst unableToParseTokenRequestCacheError = "unable_to_parse_token_request_cache_error";\r\nconst noCachedAuthorityError = "no_cached_authority_error";\r\nconst authRequestNotSetError = "auth_request_not_set_error";\r\nconst invalidCacheType = "invalid_cache_type";\r\nconst nonBrowserEnvironment = "non_browser_environment";\r\nconst databaseNotOpen = "database_not_open";\r\nconst BrowserAuthErrorCodes_noNetworkConnectivity = "no_network_connectivity";\r\nconst BrowserAuthErrorCodes_postRequestFailed = "post_request_failed";\r\nconst getRequestFailed = "get_request_failed";\r\nconst failedToParseResponse = "failed_to_parse_response";\r\nconst unableToLoadToken = "unable_to_load_token";\r\nconst cryptoKeyNotFound = "crypto_key_not_found";\r\nconst authCodeRequired = "auth_code_required";\r\nconst authCodeOrNativeAccountIdRequired = "auth_code_or_nativeAccountId_required";\r\nconst spaCodeAndNativeAccountIdPresent = "spa_code_and_nativeAccountId_present";\r\nconst databaseUnavailable = "database_unavailable";\r\nconst unableToAcquireTokenFromNativePlatform = "unable_to_acquire_token_from_native_platform";\r\nconst nativeHandshakeTimeout = "native_handshake_timeout";\r\nconst nativeExtensionNotInstalled = "native_extension_not_installed";\r\nconst nativeConnectionNotEstablished = "native_connection_not_established";\r\nconst uninitializedPublicClientApplication = "uninitialized_public_client_application";\r\nconst nativePromptNotSupported = "native_prompt_not_supported";\r\nconst invalidBase64String = "invalid_base64_string";\r\nconst invalidPopTokenRequest = "invalid_pop_token_request";\r\nconst failedToBuildHeaders = "failed_to_build_headers";\r\nconst failedToParseHeaders = "failed_to_parse_headers";\n\n\n//# sourceMappingURL=BrowserAuthErrorCodes.mjs.map\n\n;// ./node_modules/@azure/msal-browser/dist/error/BrowserAuthError.mjs\n/*! @azure/msal-browser v3.28.1 2025-01-14 */\n\n\n\n\n\n\n/*\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License.\r\n */\r\nconst ErrorLink = "For more visit: aka.ms/msaljs/browser-errors";\r\n/**\r\n * BrowserAuthErrorMessage class containing string constants used by error codes and messages.\r\n */\r\nconst BrowserAuthErrorMessages = {\r\n [pkceNotCreated]: "The PKCE code challenge and verifier could not be generated.",\r\n [cryptoNonExistent]: "The crypto object or function is not available.",\r\n [emptyNavigateUri]: "Navigation URI is empty. Please check stack trace for more info.",\r\n [hashEmptyError]: `Hash value cannot be processed because it is empty. Please verify that your redirectUri is not clearing the hash. ${ErrorLink}`,\r\n [noStateInHash]: "Hash does not contain state. Please verify that the request originated from msal.",\r\n [hashDoesNotContainKnownProperties]: `Hash does not contain known properites. Please verify that your redirectUri is not changing the hash. ${ErrorLink}`,\r\n [unableToParseState]: "Unable to parse state. Please verify that the request originated from msal.",\r\n [stateInteractionTypeMismatch]: "Hash contains state but the interaction type does not match the caller.",\r\n [interactionInProgress]: `Interaction is currently in progress. Please ensure that this interaction has been completed before calling an interactive API. ${ErrorLink}`,\r\n [popupWindowError]: "Error opening popup window. This can happen if you are using IE or if popups are blocked in the browser.",\r\n [emptyWindowError]: "window.open returned null or undefined window object.",\r\n [userCancelled]: "User cancelled the flow.",\r\n [monitorPopupTimeout]: `Token acquisition in popup failed due to timeout. ${ErrorLink}`,\r\n [monitorWindowTimeout]: `Token acquisition in iframe failed due to timeout. ${ErrorLink}`,\r\n [redirectInIframe]: "Redirects are not supported for iframed or brokered applications. Please ensure you are using MSAL.js in a top frame of the window if using the redirect APIs, or use the popup APIs.",\r\n [blockIframeReload]: `Request was blocked inside an iframe because MSAL detected an authentication response. ${ErrorLink}`,\r\n [blockNestedPopups]: "Request was blocked inside a popup because MSAL detected it was running in a popup.",\r\n [iframeClosedPrematurely]: "The iframe being monitored was closed prematurely.",\r\n [silentLogoutUnsupported]: "Silent logout not supported. Please call logoutRedirect or logoutPopup instead.",\r\n [noAccountError]: "No account object provided to acquireTokenSilent and no active account has been set. Please call setActiveAccount or provide an account on the request.",\r\n [silentPromptValueError]: "The value given for the prompt value is not valid for silent requests - must be set to \'none\' or \'no_session\'.",\r\n [noTokenRequestCacheError]: "No token request found in cache.",\r\n [unableToParseTokenRequestCacheError]: "The cached token request could not be parsed.",\r\n [noCachedAuthorityError]: "No cached authority found.",\r\n [authRequestNotSetError]: "Auth Request not set. Please ensure initiateAuthRequest was called from the InteractionHandler",\r\n [invalidCacheType]: "Invalid cache type",\r\n [nonBrowserEnvironment]: "Login and token requests are not supported in non-browser environments.",\r\n [databaseNotOpen]: "Database is not open!",\r\n [BrowserAuthErrorCodes_noNetworkConnectivity]: "No network connectivity. Check your internet connection.",\r\n [BrowserAuthErrorCodes_postRequestFailed]: "Network request failed: If the browser threw a CORS error, check that the redirectUri is registered in the Azure App Portal as type \'SPA\'",\r\n [getRequestFailed]: "Network request failed. Please check the network trace to determine root cause.",\r\n [failedToParseResponse]: "Failed to parse network response. Check network trace.",\r\n [unableToLoadToken]: "Error loading token to cache.",\r\n [cryptoKeyNotFound]: "Cryptographic Key or Keypair not found in browser storage.",\r\n [authCodeRequired]: "An authorization code must be provided (as the `code` property on the request) to this flow.",\r\n [authCodeOrNativeAccountIdRequired]: "An authorization code or nativeAccountId must be provided to this flow.",\r\n [spaCodeAndNativeAccountIdPresent]: "Request cannot contain both spa code and native account id.",\r\n [databaseUnavailable]: "IndexedDB, which is required for persistent cryptographic key storage, is unavailable. This may be caused by browser privacy features which block persistent storage in third-party contexts.",\r\n [unableToAcquireTokenFromNativePlatform]: `Unable to acquire token from native platform. ${ErrorLink}`,\r\n [nativeHandshakeTimeout]: "Timed out while attempting to establish connection to browser extension",\r\n [nativeExtensionNotInstalled]: "Native extension is not installed. If you think this is a mistake call the initialize function.",\r\n [nativeConnectionNotEstablished]: `Connection to native platform has not been established. Please install a compatible browser extension and run initialize(). ${ErrorLink}`,\r\n [uninitializedPublicClientApplication]: `You must call and await the initialize function before attempting to call any other MSAL API. ${ErrorLink}`,\r\n [nativePromptNotSupported]: "The provided prompt is not supported by the native platform. This request should be routed to the web based flow.",\r\n [invalidBase64String]: "Invalid base64 encoded string.",\r\n [invalidPopTokenRequest]: "Invalid PoP token request. The request should not have both a popKid value and signPopToken set to true.",\r\n [failedToBuildHeaders]: "Failed to build request headers object.",\r\n [failedToParseHeaders]: "Failed to parse response headers",\r\n};\r\n/**\r\n * BrowserAuthErrorMessage class containing string constants used by error codes and messages.\r\n * @deprecated Use exported BrowserAuthErrorCodes instead.\r\n * In your app you can do :\r\n * ```\r\n * import { BrowserAuthErrorCodes } from "@azure/msal-browser";\r\n * ```\r\n */\r\nconst BrowserAuthErrorMessage = {\r\n pkceNotGenerated: {\r\n code: pkceNotCreated,\r\n desc: BrowserAuthErrorMessages[pkceNotCreated],\r\n },\r\n cryptoDoesNotExist: {\r\n code: cryptoNonExistent,\r\n desc: BrowserAuthErrorMessages[cryptoNonExistent],\r\n },\r\n emptyNavigateUriError: {\r\n code: emptyNavigateUri,\r\n desc: BrowserAuthErrorMessages[emptyNavigateUri],\r\n },\r\n hashEmptyError: {\r\n code: hashEmptyError,\r\n desc: BrowserAuthErrorMessages[hashEmptyError],\r\n },\r\n hashDoesNotContainStateError: {\r\n code: noStateInHash,\r\n desc: BrowserAuthErrorMessages[noStateInHash],\r\n },\r\n hashDoesNotContainKnownPropertiesError: {\r\n code: hashDoesNotContainKnownProperties,\r\n desc: BrowserAuthErrorMessages[hashDoesNotContainKnownProperties],\r\n },\r\n unableToParseStateError: {\r\n code: unableToParseState,\r\n desc: BrowserAuthErrorMessages[unableToParseState],\r\n },\r\n stateInteractionTypeMismatchError: {\r\n code: stateInteractionTypeMismatch,\r\n desc: BrowserAuthErrorMessages[stateInteractionTypeMismatch],\r\n },\r\n interactionInProgress: {\r\n code: interactionInProgress,\r\n desc: BrowserAuthErrorMessages[interactionInProgress],\r\n },\r\n popupWindowError: {\r\n code: popupWindowError,\r\n desc: BrowserAuthErrorMessages[popupWindowError],\r\n },\r\n emptyWindowError: {\r\n code: emptyWindowError,\r\n desc: BrowserAuthErrorMessages[emptyWindowError],\r\n },\r\n userCancelledError: {\r\n code: userCancelled,\r\n desc: BrowserAuthErrorMessages[userCancelled],\r\n },\r\n monitorPopupTimeoutError: {\r\n code: monitorPopupTimeout,\r\n desc: BrowserAuthErrorMessages[monitorPopupTimeout],\r\n },\r\n monitorIframeTimeoutError: {\r\n code: monitorWindowTimeout,\r\n desc: BrowserAuthErrorMessages[monitorWindowTimeout],\r\n },\r\n redirectInIframeError: {\r\n code: redirectInIframe,\r\n desc: BrowserAuthErrorMessages[redirectInIframe],\r\n },\r\n blockTokenRequestsInHiddenIframeError: {\r\n code: blockIframeReload,\r\n desc: BrowserAuthErrorMessages[blockIframeReload],\r\n },\r\n blockAcquireTokenInPopupsError: {\r\n code: blockNestedPopups,\r\n desc: BrowserAuthErrorMessages[blockNestedPopups],\r\n },\r\n iframeClosedPrematurelyError: {\r\n code: iframeClosedPrematurely,\r\n desc: BrowserAuthErrorMessages[iframeClosedPrematurely],\r\n },\r\n silentLogoutUnsupportedError: {\r\n code: silentLogoutUnsupported,\r\n desc: BrowserAuthErrorMessages[silentLogoutUnsupported],\r\n },\r\n noAccountError: {\r\n code: noAccountError,\r\n desc: BrowserAuthErrorMessages[noAccountError],\r\n },\r\n silentPromptValueError: {\r\n code: silentPromptValueError,\r\n desc: BrowserAuthErrorMessages[silentPromptValueError],\r\n },\r\n noTokenRequestCacheError: {\r\n code: noTokenRequestCacheError,\r\n desc: BrowserAuthErrorMessages[noTokenRequestCacheError],\r\n },\r\n unableToParseTokenRequestCacheError: {\r\n code: unableToParseTokenRequestCacheError,\r\n desc: BrowserAuthErrorMessages[unableToParseTokenRequestCacheError],\r\n },\r\n noCachedAuthorityError: {\r\n code: noCachedAuthorityError,\r\n desc: BrowserAuthErrorMessages[noCachedAuthorityError],\r\n },\r\n authRequestNotSet: {\r\n code: authRequestNotSetError,\r\n desc: BrowserAuthErrorMessages[authRequestNotSetError],\r\n },\r\n invalidCacheType: {\r\n code: invalidCacheType,\r\n desc: BrowserAuthErrorMessages[invalidCacheType],\r\n },\r\n notInBrowserEnvironment: {\r\n code: nonBrowserEnvironment,\r\n desc: BrowserAuthErrorMessages[nonBrowserEnvironment],\r\n },\r\n databaseNotOpen: {\r\n code: databaseNotOpen,\r\n desc: BrowserAuthErrorMessages[databaseNotOpen],\r\n },\r\n noNetworkConnectivity: {\r\n code: BrowserAuthErrorCodes_noNetworkConnectivity,\r\n desc: BrowserAuthErrorMessages[BrowserAuthErrorCodes_noNetworkConnectivity],\r\n },\r\n postRequestFailed: {\r\n code: BrowserAuthErrorCodes_postRequestFailed,\r\n desc: BrowserAuthErrorMessages[BrowserAuthErrorCodes_postRequestFailed],\r\n },\r\n getRequestFailed: {\r\n code: getRequestFailed,\r\n desc: BrowserAuthErrorMessages[getRequestFailed],\r\n },\r\n failedToParseNetworkResponse: {\r\n code: failedToParseResponse,\r\n desc: BrowserAuthErrorMessages[failedToParseResponse],\r\n },\r\n unableToLoadTokenError: {\r\n code: unableToLoadToken,\r\n desc: BrowserAuthErrorMessages[unableToLoadToken],\r\n },\r\n signingKeyNotFoundInStorage: {\r\n code: cryptoKeyNotFound,\r\n desc: BrowserAuthErrorMessages[cryptoKeyNotFound],\r\n },\r\n authCodeRequired: {\r\n code: authCodeRequired,\r\n desc: BrowserAuthErrorMessages[authCodeRequired],\r\n },\r\n authCodeOrNativeAccountRequired: {\r\n code: authCodeOrNativeAccountIdRequired,\r\n desc: BrowserAuthErrorMessages[authCodeOrNativeAccountIdRequired],\r\n },\r\n spaCodeAndNativeAccountPresent: {\r\n code: spaCodeAndNativeAccountIdPresent,\r\n desc: BrowserAuthErrorMessages[spaCodeAndNativeAccountIdPresent],\r\n },\r\n databaseUnavailable: {\r\n code: databaseUnavailable,\r\n desc: BrowserAuthErrorMessages[databaseUnavailable],\r\n },\r\n unableToAcquireTokenFromNativePlatform: {\r\n code: unableToAcquireTokenFromNativePlatform,\r\n desc: BrowserAuthErrorMessages[unableToAcquireTokenFromNativePlatform],\r\n },\r\n nativeHandshakeTimeout: {\r\n code: nativeHandshakeTimeout,\r\n desc: BrowserAuthErrorMessages[nativeHandshakeTimeout],\r\n },\r\n nativeExtensionNotInstalled: {\r\n code: nativeExtensionNotInstalled,\r\n desc: BrowserAuthErrorMessages[nativeExtensionNotInstalled],\r\n },\r\n nativeConnectionNotEstablished: {\r\n code: nativeConnectionNotEstablished,\r\n desc: BrowserAuthErrorMessages[nativeConnectionNotEstablished],\r\n },\r\n uninitializedPublicClientApplication: {\r\n code: uninitializedPublicClientApplication,\r\n desc: BrowserAuthErrorMessages[uninitializedPublicClientApplication],\r\n },\r\n nativePromptNotSupported: {\r\n code: nativePromptNotSupported,\r\n desc: BrowserAuthErrorMessages[nativePromptNotSupported],\r\n },\r\n invalidBase64StringError: {\r\n code: invalidBase64String,\r\n desc: BrowserAuthErrorMessages[invalidBase64String],\r\n },\r\n invalidPopTokenRequest: {\r\n code: invalidPopTokenRequest,\r\n desc: BrowserAuthErrorMessages[invalidPopTokenRequest],\r\n },\r\n};\r\n/**\r\n * Browser library error class thrown by the MSAL.js library for SPAs\r\n */\r\nclass BrowserAuthError extends AuthError {\r\n constructor(errorCode, subError) {\r\n super(errorCode, BrowserAuthErrorMessages[errorCode], subError);\r\n Object.setPrototypeOf(this, BrowserAuthError.prototype);\r\n this.name = "BrowserAuthError";\r\n }\r\n}\r\nfunction createBrowserAuthError(errorCode, subError) {\r\n return new BrowserAuthError(errorCode, subError);\r\n}\n\n\n//# sourceMappingURL=BrowserAuthError.mjs.map\n\n;// ./node_modules/@azure/msal-browser/dist/utils/BrowserConstants.mjs\n/*! @azure/msal-browser v3.28.1 2025-01-14 */\n\n\n\n/*\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License.\r\n */\r\n/**\r\n * Constants\r\n */\r\nconst BrowserConstants = {\r\n /**\r\n * Interaction in progress cache value\r\n */\r\n INTERACTION_IN_PROGRESS_VALUE: "interaction_in_progress",\r\n /**\r\n * Invalid grant error code\r\n */\r\n INVALID_GRANT_ERROR: "invalid_grant",\r\n /**\r\n * Default popup window width\r\n */\r\n POPUP_WIDTH: 483,\r\n /**\r\n * Default popup window height\r\n */\r\n POPUP_HEIGHT: 600,\r\n /**\r\n * Name of the popup window starts with\r\n */\r\n POPUP_NAME_PREFIX: "msal",\r\n /**\r\n * Default popup monitor poll interval in milliseconds\r\n */\r\n DEFAULT_POLL_INTERVAL_MS: 30,\r\n /**\r\n * Msal-browser SKU\r\n */\r\n MSAL_SKU: "msal.js.browser",\r\n};\r\nconst NativeConstants = {\r\n CHANNEL_ID: "53ee284d-920a-4b59-9d30-a60315b26836",\r\n PREFERRED_EXTENSION_ID: "ppnbnpeolgkicgegkbkbjmhlideopiji",\r\n MATS_TELEMETRY: "MATS",\r\n};\r\nconst NativeExtensionMethod = {\r\n HandshakeRequest: "Handshake",\r\n HandshakeResponse: "HandshakeResponse",\r\n GetToken: "GetToken",\r\n Response: "Response",\r\n};\r\nconst BrowserCacheLocation = {\r\n LocalStorage: "localStorage",\r\n SessionStorage: "sessionStorage",\r\n MemoryStorage: "memoryStorage",\r\n};\r\n/**\r\n * HTTP Request types supported by MSAL.\r\n */\r\nconst HTTP_REQUEST_TYPE = {\r\n GET: "GET",\r\n POST: "POST",\r\n};\r\n/**\r\n * Temporary cache keys for MSAL, deleted after any request.\r\n */\r\nconst TemporaryCacheKeys = {\r\n AUTHORITY: "authority",\r\n ACQUIRE_TOKEN_ACCOUNT: "acquireToken.account",\r\n SESSION_STATE: "session.state",\r\n REQUEST_STATE: "request.state",\r\n NONCE_IDTOKEN: "nonce.id_token",\r\n ORIGIN_URI: "request.origin",\r\n RENEW_STATUS: "token.renew.status",\r\n URL_HASH: "urlHash",\r\n REQUEST_PARAMS: "request.params",\r\n SCOPES: "scopes",\r\n INTERACTION_STATUS_KEY: "interaction.status",\r\n CCS_CREDENTIAL: "ccs.credential",\r\n CORRELATION_ID: "request.correlationId",\r\n NATIVE_REQUEST: "request.native",\r\n REDIRECT_CONTEXT: "request.redirect.context",\r\n};\r\nconst StaticCacheKeys = {\r\n ACCOUNT_KEYS: "msal.account.keys",\r\n TOKEN_KEYS: "msal.token.keys",\r\n};\r\n/**\r\n * Cache keys stored in-memory\r\n */\r\nconst InMemoryCacheKeys = {\r\n WRAPPER_SKU: "wrapper.sku",\r\n WRAPPER_VER: "wrapper.version",\r\n};\r\n/**\r\n * API Codes for Telemetry purposes.\r\n * Before adding a new code you must claim it in the MSAL Telemetry tracker as these number spaces are shared across all MSALs\r\n * 0-99 Silent Flow\r\n * 800-899 Auth Code Flow\r\n */\r\nconst ApiId = {\r\n acquireTokenRedirect: 861,\r\n acquireTokenPopup: 862,\r\n ssoSilent: 863,\r\n acquireTokenSilent_authCode: 864,\r\n handleRedirectPromise: 865,\r\n acquireTokenByCode: 866,\r\n acquireTokenSilent_silentFlow: 61,\r\n logout: 961,\r\n logoutPopup: 962,\r\n};\r\n/*\r\n * Interaction type of the API - used for state and telemetry\r\n */\r\nvar InteractionType;\r\n(function (InteractionType) {\r\n InteractionType["Redirect"] = "redirect";\r\n InteractionType["Popup"] = "popup";\r\n InteractionType["Silent"] = "silent";\r\n InteractionType["None"] = "none";\r\n})(InteractionType || (InteractionType = {}));\r\n/**\r\n * Types of interaction currently in progress.\r\n * Used in events in wrapper libraries to invoke functions when certain interaction is in progress or all interactions are complete.\r\n */\r\nconst InteractionStatus = {\r\n /**\r\n * Initial status before interaction occurs\r\n */\r\n Startup: "startup",\r\n /**\r\n * Status set when all login calls occuring\r\n */\r\n Login: "login",\r\n /**\r\n * Status set when logout call occuring\r\n */\r\n Logout: "logout",\r\n /**\r\n * Status set for acquireToken calls\r\n */\r\n AcquireToken: "acquireToken",\r\n /**\r\n * Status set for ssoSilent calls\r\n */\r\n SsoSilent: "ssoSilent",\r\n /**\r\n * Status set when handleRedirect in progress\r\n */\r\n HandleRedirect: "handleRedirect",\r\n /**\r\n * Status set when interaction is complete\r\n */\r\n None: "none",\r\n};\r\nconst DEFAULT_REQUEST = {\r\n scopes: OIDC_DEFAULT_SCOPES,\r\n};\r\n/**\r\n * JWK Key Format string (Type MUST be defined for window crypto APIs)\r\n */\r\nconst KEY_FORMAT_JWK = "jwk";\r\n// Supported wrapper SKUs\r\nconst WrapperSKU = {\r\n React: "@azure/msal-react",\r\n Angular: "@azure/msal-angular",\r\n};\r\n// DatabaseStorage Constants\r\nconst DB_NAME = "msal.db";\r\nconst DB_VERSION = 1;\r\nconst DB_TABLE_NAME = `${DB_NAME}.keys`;\r\nconst CacheLookupPolicy = {\r\n /*\r\n * acquireTokenSilent will attempt to retrieve an access token from the cache. If the access token is expired\r\n * or cannot be found the refresh token will be used to acquire a new one. Finally, if the refresh token\r\n * is expired acquireTokenSilent will attempt to acquire new access and refresh tokens.\r\n */\r\n Default: 0,\r\n /*\r\n * acquireTokenSilent will only look for access tokens in the cache. It will not attempt to renew access or\r\n * refresh tokens.\r\n */\r\n AccessToken: 1,\r\n /*\r\n * acquireTokenSilent will attempt to retrieve an access token from the cache. If the access token is expired or\r\n * cannot be found, the refresh token will be used to acquire a new one. If the refresh token is expired, it\r\n * will not be renewed and acquireTokenSilent will fail.\r\n */\r\n AccessTokenAndRefreshToken: 2,\r\n /*\r\n * acquireTokenSilent will not attempt to retrieve access tokens from the cache and will instead attempt to\r\n * exchange the cached refresh token for a new access token. If the refresh token is expired, it will not be\r\n * renewed and acquireTokenSilent will fail.\r\n */\r\n RefreshToken: 3,\r\n /*\r\n * acquireTokenSilent will not look in the cache for the access token. It will go directly to network with the\r\n * cached refresh token. If the refresh token is expired an attempt will be made to renew it. This is equivalent to\r\n * setting "forceRefresh: true".\r\n */\r\n RefreshTokenAndNetwork: 4,\r\n /*\r\n * acquireTokenSilent will attempt to renew both access and refresh tokens. It will not look in the cache. This will\r\n * always fail if 3rd party cookies are blocked by the browser.\r\n */\r\n Skip: 5,\r\n};\r\nconst iFrameRenewalPolicies = [\r\n CacheLookupPolicy.Default,\r\n CacheLookupPolicy.Skip,\r\n CacheLookupPolicy.RefreshTokenAndNetwork,\r\n];\r\nconst LOG_LEVEL_CACHE_KEY = "msal.browser.log.level";\r\nconst LOG_PII_CACHE_KEY = "msal.browser.log.pii";\r\nconst BROWSER_PERF_ENABLED_KEY = "msal.browser.performance.enabled";\n\n\n//# sourceMappingURL=BrowserConstants.mjs.map\n\n;// ./node_modules/@azure/msal-common/dist/telemetry/performance/PerformanceEvent.mjs\n/*! @azure/msal-common v14.16.0 2024-11-05 */\n\n/*\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License.\r\n */\r\n/**\r\n * Enumeration of operations that are instrumented by have their performance measured by the PerformanceClient.\r\n *\r\n * @export\r\n * @enum {number}\r\n */\r\nconst PerformanceEvents = {\r\n /**\r\n * acquireTokenByCode API (msal-browser and msal-node).\r\n * Used to acquire tokens by trading an authorization code against the token endpoint.\r\n */\r\n AcquireTokenByCode: "acquireTokenByCode",\r\n /**\r\n * acquireTokenByRefreshToken API (msal-browser and msal-node).\r\n * Used to renew an access token using a refresh token against the token endpoint.\r\n */\r\n AcquireTokenByRefreshToken: "acquireTokenByRefreshToken",\r\n /**\r\n * acquireTokenSilent API (msal-browser and msal-node).\r\n * Used to silently acquire a new access token (from the cache or the network).\r\n */\r\n AcquireTokenSilent: "acquireTokenSilent",\r\n /**\r\n * acquireTokenSilentAsync (msal-browser).\r\n * Internal API for acquireTokenSilent.\r\n */\r\n AcquireTokenSilentAsync: "acquireTokenSilentAsync",\r\n /**\r\n * acquireTokenPopup (msal-browser).\r\n * Used to acquire a new access token interactively through pop ups\r\n */\r\n AcquireTokenPopup: "acquireTokenPopup",\r\n /**\r\n * acquireTokenPreRedirect (msal-browser).\r\n * First part of the redirect flow.\r\n * Used to acquire a new access token interactively through redirects.\r\n */\r\n AcquireTokenPreRedirect: "acquireTokenPreRedirect",\r\n /**\r\n * acquireTokenRedirect (msal-browser).\r\n * Second part of the redirect flow.\r\n * Used to acquire a new access token interactively through redirects.\r\n */\r\n AcquireTokenRedirect: "acquireTokenRedirect",\r\n /**\r\n * getPublicKeyThumbprint API in CryptoOpts class (msal-browser).\r\n * Used to generate a public/private keypair and generate a public key thumbprint for pop requests.\r\n */\r\n CryptoOptsGetPublicKeyThumbprint: "cryptoOptsGetPublicKeyThumbprint",\r\n /**\r\n * signJwt API in CryptoOpts class (msal-browser).\r\n * Used to signed a pop token.\r\n */\r\n CryptoOptsSignJwt: "cryptoOptsSignJwt",\r\n /**\r\n * acquireToken API in the SilentCacheClient class (msal-browser).\r\n * Used to read access tokens from the cache.\r\n */\r\n SilentCacheClientAcquireToken: "silentCacheClientAcquireToken",\r\n /**\r\n * acquireToken API in the SilentIframeClient class (msal-browser).\r\n * Used to acquire a new set of tokens from the authorize endpoint in a hidden iframe.\r\n */\r\n SilentIframeClientAcquireToken: "silentIframeClientAcquireToken",\r\n AwaitConcurrentIframe: "awaitConcurrentIframe",\r\n /**\r\n * acquireToken API in SilentRereshClient (msal-browser).\r\n * Used to acquire a new set of tokens from the token endpoint using a refresh token.\r\n */\r\n SilentRefreshClientAcquireToken: "silentRefreshClientAcquireToken",\r\n /**\r\n * ssoSilent API (msal-browser).\r\n * Used to silently acquire an authorization code and set of tokens using a hidden iframe.\r\n */\r\n SsoSilent: "ssoSilent",\r\n /**\r\n * getDiscoveredAuthority API in StandardInteractionClient class (msal-browser).\r\n * Used to load authority metadata for a request.\r\n */\r\n StandardInteractionClientGetDiscoveredAuthority: "standardInteractionClientGetDiscoveredAuthority",\r\n /**\r\n * acquireToken APIs in msal-browser.\r\n * Used to make an /authorize endpoint call with native brokering enabled.\r\n */\r\n FetchAccountIdWithNativeBroker: "fetchAccountIdWithNativeBroker",\r\n /**\r\n * acquireToken API in NativeInteractionClient class (msal-browser).\r\n * Used to acquire a token from Native component when native brokering is enabled.\r\n */\r\n NativeInteractionClientAcquireToken: "nativeInteractionClientAcquireToken",\r\n /**\r\n * Time spent creating default headers for requests to token endpoint\r\n */\r\n BaseClientCreateTokenRequestHeaders: "baseClientCreateTokenRequestHeaders",\r\n /**\r\n * Time spent sending/waiting for the response of a request to the token endpoint\r\n */\r\n NetworkClientSendPostRequestAsync: "networkClientSendPostRequestAsync",\r\n RefreshTokenClientExecutePostToTokenEndpoint: "refreshTokenClientExecutePostToTokenEndpoint",\r\n AuthorizationCodeClientExecutePostToTokenEndpoint: "authorizationCodeClientExecutePostToTokenEndpoint",\r\n /**\r\n * Used to measure the time taken for completing embedded-broker handshake (PW-Broker).\r\n */\r\n BrokerHandhshake: "brokerHandshake",\r\n /**\r\n * acquireTokenByRefreshToken API in BrokerClientApplication (PW-Broker) .\r\n */\r\n AcquireTokenByRefreshTokenInBroker: "acquireTokenByRefreshTokenInBroker",\r\n /**\r\n * Time taken for token acquisition by broker\r\n */\r\n AcquireTokenByBroker: "acquireTokenByBroker",\r\n /**\r\n * Time spent on the network for refresh token acquisition\r\n */\r\n RefreshTokenClientExecuteTokenRequest: "refreshTokenClientExecuteTokenRequest",\r\n /**\r\n * Time taken for acquiring refresh token , records RT size\r\n */\r\n RefreshTokenClientAcquireToken: "refreshTokenClientAcquireToken",\r\n /**\r\n * Time taken for acquiring cached refresh token\r\n */\r\n RefreshTokenClientAcquireTokenWithCachedRefreshToken: "refreshTokenClientAcquireTokenWithCachedRefreshToken",\r\n /**\r\n * acquireTokenByRefreshToken API in RefreshTokenClient (msal-common).\r\n */\r\n RefreshTokenClientAcquireTokenByRefreshToken: "refreshTokenClientAcquireTokenByRefreshToken",\r\n /**\r\n * Helper function to create token request body in RefreshTokenClient (msal-common).\r\n */\r\n RefreshTokenClientCreateTokenRequestBody: "refreshTokenClientCreateTokenRequestBody",\r\n /**\r\n * acquireTokenFromCache (msal-browser).\r\n * Internal API for acquiring token from cache\r\n */\r\n AcquireTokenFromCache: "acquireTokenFromCache",\r\n SilentFlowClientAcquireCachedToken: "silentFlowClientAcquireCachedToken",\r\n SilentFlowClientGenerateResultFromCacheRecord: "silentFlowClientGenerateResultFromCacheRecord",\r\n /**\r\n * acquireTokenBySilentIframe (msal-browser).\r\n * Internal API for acquiring token by silent Iframe\r\n */\r\n AcquireTokenBySilentIframe: "acquireTokenBySilentIframe",\r\n /**\r\n * Internal API for initializing base request in BaseInteractionClient (msal-browser)\r\n */\r\n InitializeBaseRequest: "initializeBaseRequest",\r\n /**\r\n * Internal API for initializing silent request in SilentCacheClient (msal-browser)\r\n */\r\n InitializeSilentRequest: "initializeSilentRequest",\r\n InitializeClientApplication: "initializeClientApplication",\r\n /**\r\n * Helper function in SilentIframeClient class (msal-browser).\r\n */\r\n SilentIframeClientTokenHelper: "silentIframeClientTokenHelper",\r\n /**\r\n * SilentHandler\r\n */\r\n SilentHandlerInitiateAuthRequest: "silentHandlerInitiateAuthRequest",\r\n SilentHandlerMonitorIframeForHash: "silentHandlerMonitorIframeForHash",\r\n SilentHandlerLoadFrame: "silentHandlerLoadFrame",\r\n SilentHandlerLoadFrameSync: "silentHandlerLoadFrameSync",\r\n /**\r\n * Helper functions in StandardInteractionClient class (msal-browser)\r\n */\r\n StandardInteractionClientCreateAuthCodeClient: "standardInteractionClientCreateAuthCodeClient",\r\n StandardInteractionClientGetClientConfiguration: "standardInteractionClientGetClientConfiguration",\r\n StandardInteractionClientInitializeAuthorizationRequest: "standardInteractionClientInitializeAuthorizationRequest",\r\n StandardInteractionClientInitializeAuthorizationCodeRequest: "standardInteractionClientInitializeAuthorizationCodeRequest",\r\n /**\r\n * getAuthCodeUrl API (msal-browser and msal-node).\r\n */\r\n GetAuthCodeUrl: "getAuthCodeUrl",\r\n /**\r\n * Functions from InteractionHandler (msal-browser)\r\n */\r\n HandleCodeResponseFromServer: "handleCodeResponseFromServer",\r\n HandleCodeResponse: "handleCodeResponse",\r\n UpdateTokenEndpointAuthority: "updateTokenEndpointAuthority",\r\n /**\r\n * APIs in Authorization Code Client (msal-common)\r\n */\r\n AuthClientAcquireToken: "authClientAcquireToken",\r\n AuthClientExecuteTokenRequest: "authClientExecuteTokenRequest",\r\n AuthClientCreateTokenRequestBody: "authClientCreateTokenRequestBody",\r\n AuthClientCreateQueryString: "authClientCreateQueryString",\r\n /**\r\n * Generate functions in PopTokenGenerator (msal-common)\r\n */\r\n PopTokenGenerateCnf: "popTokenGenerateCnf",\r\n PopTokenGenerateKid: "popTokenGenerateKid",\r\n /**\r\n * handleServerTokenResponse API in ResponseHandler (msal-common)\r\n */\r\n HandleServerTokenResponse: "handleServerTokenResponse",\r\n DeserializeResponse: "deserializeResponse",\r\n /**\r\n * Authority functions\r\n */\r\n AuthorityFactoryCreateDiscoveredInstance: "authorityFactoryCreateDiscoveredInstance",\r\n AuthorityResolveEndpointsAsync: "authorityResolveEndpointsAsync",\r\n AuthorityResolveEndpointsFromLocalSources: "authorityResolveEndpointsFromLocalSources",\r\n AuthorityGetCloudDiscoveryMetadataFromNetwork: "authorityGetCloudDiscoveryMetadataFromNetwork",\r\n AuthorityUpdateCloudDiscoveryMetadata: "authorityUpdateCloudDiscoveryMetadata",\r\n AuthorityGetEndpointMetadataFromNetwork: "authorityGetEndpointMetadataFromNetwork",\r\n AuthorityUpdateEndpointMetadata: "authorityUpdateEndpointMetadata",\r\n AuthorityUpdateMetadataWithRegionalInformation: "authorityUpdateMetadataWithRegionalInformation",\r\n /**\r\n * Region Discovery functions\r\n */\r\n RegionDiscoveryDetectRegion: "regionDiscoveryDetectRegion",\r\n RegionDiscoveryGetRegionFromIMDS: "regionDiscoveryGetRegionFromIMDS",\r\n RegionDiscoveryGetCurrentVersion: "regionDiscoveryGetCurrentVersion",\r\n AcquireTokenByCodeAsync: "acquireTokenByCodeAsync",\r\n GetEndpointMetadataFromNetwork: "getEndpointMetadataFromNetwork",\r\n GetCloudDiscoveryMetadataFromNetworkMeasurement: "getCloudDiscoveryMetadataFromNetworkMeasurement",\r\n HandleRedirectPromiseMeasurement: "handleRedirectPromise",\r\n HandleNativeRedirectPromiseMeasurement: "handleNativeRedirectPromise",\r\n UpdateCloudDiscoveryMetadataMeasurement: "updateCloudDiscoveryMetadataMeasurement",\r\n UsernamePasswordClientAcquireToken: "usernamePasswordClientAcquireToken",\r\n NativeMessageHandlerHandshake: "nativeMessageHandlerHandshake",\r\n NativeGenerateAuthResult: "nativeGenerateAuthResult",\r\n RemoveHiddenIframe: "removeHiddenIframe",\r\n /**\r\n * Cache operations\r\n */\r\n ClearTokensAndKeysWithClaims: "clearTokensAndKeysWithClaims",\r\n CacheManagerGetRefreshToken: "cacheManagerGetRefreshToken",\r\n /**\r\n * Crypto Operations\r\n */\r\n GeneratePkceCodes: "generatePkceCodes",\r\n GenerateCodeVerifier: "generateCodeVerifier",\r\n GenerateCodeChallengeFromVerifier: "generateCodeChallengeFromVerifier",\r\n Sha256Digest: "sha256Digest",\r\n GetRandomValues: "getRandomValues",\r\n};\r\nconst PerformanceEventAbbreviations = new Map([\r\n [PerformanceEvents.AcquireTokenByCode, "ATByCode"],\r\n [PerformanceEvents.AcquireTokenByRefreshToken, "ATByRT"],\r\n [PerformanceEvents.AcquireTokenSilent, "ATS"],\r\n [PerformanceEvents.AcquireTokenSilentAsync, "ATSAsync"],\r\n [PerformanceEvents.AcquireTokenPopup, "ATPopup"],\r\n [PerformanceEvents.AcquireTokenRedirect, "ATRedirect"],\r\n [\r\n PerformanceEvents.CryptoOptsGetPublicKeyThumbprint,\r\n "CryptoGetPKThumb",\r\n ],\r\n [PerformanceEvents.CryptoOptsSignJwt, "CryptoSignJwt"],\r\n [PerformanceEvents.SilentCacheClientAcquireToken, "SltCacheClientAT"],\r\n [PerformanceEvents.SilentIframeClientAcquireToken, "SltIframeClientAT"],\r\n [PerformanceEvents.SilentRefreshClientAcquireToken, "SltRClientAT"],\r\n [PerformanceEvents.SsoSilent, "SsoSlt"],\r\n [\r\n PerformanceEvents.StandardInteractionClientGetDiscoveredAuthority,\r\n "StdIntClientGetDiscAuth",\r\n ],\r\n [\r\n PerformanceEvents.FetchAccountIdWithNativeBroker,\r\n "FetchAccIdWithNtvBroker",\r\n ],\r\n [\r\n PerformanceEvents.NativeInteractionClientAcquireToken,\r\n "NtvIntClientAT",\r\n ],\r\n [\r\n PerformanceEvents.BaseClientCreateTokenRequestHeaders,\r\n "BaseClientCreateTReqHead",\r\n ],\r\n [\r\n PerformanceEvents.NetworkClientSendPostRequestAsync,\r\n "NetClientSendPost",\r\n ],\r\n [\r\n PerformanceEvents.RefreshTokenClientExecutePostToTokenEndpoint,\r\n "RTClientExecPost",\r\n ],\r\n [\r\n PerformanceEvents.AuthorizationCodeClientExecutePostToTokenEndpoint,\r\n "AuthCodeClientExecPost",\r\n ],\r\n [PerformanceEvents.BrokerHandhshake, "BrokerHandshake"],\r\n [\r\n PerformanceEvents.AcquireTokenByRefreshTokenInBroker,\r\n "ATByRTInBroker",\r\n ],\r\n [PerformanceEvents.AcquireTokenByBroker, "ATByBroker"],\r\n [\r\n PerformanceEvents.RefreshTokenClientExecuteTokenRequest,\r\n "RTClientExecTReq",\r\n ],\r\n [PerformanceEvents.RefreshTokenClientAcquireToken, "RTClientAT"],\r\n [\r\n PerformanceEvents.RefreshTokenClientAcquireTokenWithCachedRefreshToken,\r\n "RTClientATWithCachedRT",\r\n ],\r\n [\r\n PerformanceEvents.RefreshTokenClientAcquireTokenByRefreshToken,\r\n "RTClientATByRT",\r\n ],\r\n [\r\n PerformanceEvents.RefreshTokenClientCreateTokenRequestBody,\r\n "RTClientCreateTReqBody",\r\n ],\r\n [PerformanceEvents.AcquireTokenFromCache, "ATFromCache"],\r\n [\r\n PerformanceEvents.SilentFlowClientAcquireCachedToken,\r\n "SltFlowClientATCached",\r\n ],\r\n [\r\n PerformanceEvents.SilentFlowClientGenerateResultFromCacheRecord,\r\n "SltFlowClientGenResFromCache",\r\n ],\r\n [PerformanceEvents.AcquireTokenBySilentIframe, "ATBySltIframe"],\r\n [PerformanceEvents.InitializeBaseRequest, "InitBaseReq"],\r\n [PerformanceEvents.InitializeSilentRequest, "InitSltReq"],\r\n [\r\n PerformanceEvents.InitializeClientApplication,\r\n "InitClientApplication",\r\n ],\r\n [PerformanceEvents.SilentIframeClientTokenHelper, "SIClientTHelper"],\r\n [\r\n PerformanceEvents.SilentHandlerInitiateAuthRequest,\r\n "SHandlerInitAuthReq",\r\n ],\r\n [\r\n PerformanceEvents.SilentHandlerMonitorIframeForHash,\r\n "SltHandlerMonitorIframeForHash",\r\n ],\r\n [PerformanceEvents.SilentHandlerLoadFrame, "SHandlerLoadFrame"],\r\n [PerformanceEvents.SilentHandlerLoadFrameSync, "SHandlerLoadFrameSync"],\r\n [\r\n PerformanceEvents.StandardInteractionClientCreateAuthCodeClient,\r\n "StdIntClientCreateAuthCodeClient",\r\n ],\r\n [\r\n PerformanceEvents.StandardInteractionClientGetClientConfiguration,\r\n "StdIntClientGetClientConf",\r\n ],\r\n [\r\n PerformanceEvents.StandardInteractionClientInitializeAuthorizationRequest,\r\n "StdIntClientInitAuthReq",\r\n ],\r\n [\r\n PerformanceEvents.StandardInteractionClientInitializeAuthorizationCodeRequest,\r\n "StdIntClientInitAuthCodeReq",\r\n ],\r\n [PerformanceEvents.GetAuthCodeUrl, "GetAuthCodeUrl"],\r\n [\r\n PerformanceEvents.HandleCodeResponseFromServer,\r\n "HandleCodeResFromServer",\r\n ],\r\n [PerformanceEvents.HandleCodeResponse, "HandleCodeResp"],\r\n [PerformanceEvents.UpdateTokenEndpointAuthority, "UpdTEndpointAuth"],\r\n [PerformanceEvents.AuthClientAcquireToken, "AuthClientAT"],\r\n [PerformanceEvents.AuthClientExecuteTokenRequest, "AuthClientExecTReq"],\r\n [\r\n PerformanceEvents.AuthClientCreateTokenRequestBody,\r\n "AuthClientCreateTReqBody",\r\n ],\r\n [\r\n PerformanceEvents.AuthClientCreateQueryString,\r\n "AuthClientCreateQueryStr",\r\n ],\r\n [PerformanceEvents.PopTokenGenerateCnf, "PopTGenCnf"],\r\n [PerformanceEvents.PopTokenGenerateKid, "PopTGenKid"],\r\n [PerformanceEvents.HandleServerTokenResponse, "HandleServerTRes"],\r\n [PerformanceEvents.DeserializeResponse, "DeserializeRes"],\r\n [\r\n PerformanceEvents.AuthorityFactoryCreateDiscoveredInstance,\r\n "AuthFactCreateDiscInst",\r\n ],\r\n [\r\n PerformanceEvents.AuthorityResolveEndpointsAsync,\r\n "AuthResolveEndpointsAsync",\r\n ],\r\n [\r\n PerformanceEvents.AuthorityResolveEndpointsFromLocalSources,\r\n "AuthResolveEndpointsFromLocal",\r\n ],\r\n [\r\n PerformanceEvents.AuthorityGetCloudDiscoveryMetadataFromNetwork,\r\n "AuthGetCDMetaFromNet",\r\n ],\r\n [\r\n PerformanceEvents.AuthorityUpdateCloudDiscoveryMetadata,\r\n "AuthUpdCDMeta",\r\n ],\r\n [\r\n PerformanceEvents.AuthorityGetEndpointMetadataFromNetwork,\r\n "AuthUpdCDMetaFromNet",\r\n ],\r\n [\r\n PerformanceEvents.AuthorityUpdateEndpointMetadata,\r\n "AuthUpdEndpointMeta",\r\n ],\r\n [\r\n PerformanceEvents.AuthorityUpdateMetadataWithRegionalInformation,\r\n "AuthUpdMetaWithRegInfo",\r\n ],\r\n [PerformanceEvents.RegionDiscoveryDetectRegion, "RegDiscDetectReg"],\r\n [\r\n PerformanceEvents.RegionDiscoveryGetRegionFromIMDS,\r\n "RegDiscGetRegFromIMDS",\r\n ],\r\n [\r\n PerformanceEvents.RegionDiscoveryGetCurrentVersion,\r\n "RegDiscGetCurrentVer",\r\n ],\r\n [PerformanceEvents.AcquireTokenByCodeAsync, "ATByCodeAsync"],\r\n [\r\n PerformanceEvents.GetEndpointMetadataFromNetwork,\r\n "GetEndpointMetaFromNet",\r\n ],\r\n [\r\n PerformanceEvents.GetCloudDiscoveryMetadataFromNetworkMeasurement,\r\n "GetCDMetaFromNet",\r\n ],\r\n [\r\n PerformanceEvents.HandleRedirectPromiseMeasurement,\r\n "HandleRedirectPromise",\r\n ],\r\n [\r\n PerformanceEvents.HandleNativeRedirectPromiseMeasurement,\r\n "HandleNtvRedirectPromise",\r\n ],\r\n [\r\n PerformanceEvents.UpdateCloudDiscoveryMetadataMeasurement,\r\n "UpdateCDMeta",\r\n ],\r\n [\r\n PerformanceEvents.UsernamePasswordClientAcquireToken,\r\n "UserPassClientAT",\r\n ],\r\n [\r\n PerformanceEvents.NativeMessageHandlerHandshake,\r\n "NtvMsgHandlerHandshake",\r\n ],\r\n [PerformanceEvents.NativeGenerateAuthResult, "NtvGenAuthRes"],\r\n [PerformanceEvents.RemoveHiddenIframe, "RemoveHiddenIframe"],\r\n [\r\n PerformanceEvents.ClearTokensAndKeysWithClaims,\r\n "ClearTAndKeysWithClaims",\r\n ],\r\n [PerformanceEvents.CacheManagerGetRefreshToken, "CacheManagerGetRT"],\r\n [PerformanceEvents.GeneratePkceCodes, "GenPkceCodes"],\r\n [PerformanceEvents.GenerateCodeVerifier, "GenCodeVerifier"],\r\n [\r\n PerformanceEvents.GenerateCodeChallengeFromVerifier,\r\n "GenCodeChallengeFromVerifier",\r\n ],\r\n [PerformanceEvents.Sha256Digest, "Sha256Digest"],\r\n [PerformanceEvents.GetRandomValues, "GetRandomValues"],\r\n]);\r\n/**\r\n * State of the performance event.\r\n *\r\n * @export\r\n * @enum {number}\r\n */\r\nconst PerformanceEventStatus = {\r\n NotStarted: 0,\r\n InProgress: 1,\r\n Completed: 2,\r\n};\r\nconst IntFields = new Set([\r\n "accessTokenSize",\r\n "durationMs",\r\n "idTokenSize",\r\n "matsSilentStatus",\r\n "matsHttpStatus",\r\n "refreshTokenSize",\r\n "queuedTimeMs",\r\n "startTimeMs",\r\n "status",\r\n "multiMatchedAT",\r\n "multiMatchedID",\r\n "multiMatchedRT",\r\n]);\n\n\n//# sourceMappingURL=PerformanceEvent.mjs.map\n\n;// ./node_modules/@azure/msal-browser/dist/encode/Base64Encode.mjs\n/*! @azure/msal-browser v3.28.1 2025-01-14 */\n\n/*\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License.\r\n */\r\n/**\r\n * Class which exposes APIs to encode plaintext to base64 encoded string. See here for implementation details:\r\n * https://developer.mozilla.org/en-US/docs/Web/API/WindowBase64/Base64_encoding_and_decoding#Solution_2_%E2%80%93_JavaScript\'s_UTF-16_%3E_UTF-8_%3E_base64\r\n */\r\n/**\r\n * Returns URL Safe b64 encoded string from a plaintext string.\r\n * @param input\r\n */\r\nfunction urlEncode(input) {\r\n return encodeURIComponent(base64Encode(input)\r\n .replace(/=/g, "")\r\n .replace(/\\+/g, "-")\r\n .replace(/\\//g, "_"));\r\n}\r\n/**\r\n * Returns URL Safe b64 encoded string from an int8Array.\r\n * @param inputArr\r\n */\r\nfunction urlEncodeArr(inputArr) {\r\n return base64EncArr(inputArr)\r\n .replace(/=/g, "")\r\n .replace(/\\+/g, "-")\r\n .replace(/\\//g, "_");\r\n}\r\n/**\r\n * Returns b64 encoded string from plaintext string.\r\n * @param input\r\n */\r\nfunction base64Encode(input) {\r\n return base64EncArr(new TextEncoder().encode(input));\r\n}\r\n/**\r\n * Base64 encode byte array\r\n * @param aBytes\r\n */\r\nfunction base64EncArr(aBytes) {\r\n const binString = Array.from(aBytes, (x) => String.fromCodePoint(x)).join("");\r\n return btoa(binString);\r\n}\n\n\n//# sourceMappingURL=Base64Encode.mjs.map\n\n;// ./node_modules/@azure/msal-browser/dist/crypto/BrowserCrypto.mjs\n/*! @azure/msal-browser v3.28.1 2025-01-14 */\n\n\n\n\n\n\n\n/*\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License.\r\n */\r\n/**\r\n * This file defines functions used by the browser library to perform cryptography operations such as\r\n * hashing and encoding. It also has helper functions to validate the availability of specific APIs.\r\n */\r\n/**\r\n * See here for more info on RsaHashedKeyGenParams: https://developer.mozilla.org/en-US/docs/Web/API/RsaHashedKeyGenParams\r\n */\r\n// RSA KeyGen Algorithm\r\nconst PKCS1_V15_KEYGEN_ALG = "RSASSA-PKCS1-v1_5";\r\n// SHA-256 hashing algorithm\r\nconst S256_HASH_ALG = "SHA-256";\r\n// MOD length for PoP tokens\r\nconst MODULUS_LENGTH = 2048;\r\n// Public Exponent\r\nconst PUBLIC_EXPONENT = new Uint8Array([0x01, 0x00, 0x01]);\r\n// UUID hex digits\r\nconst UUID_CHARS = "0123456789abcdef";\r\n// Array to store UINT32 random value\r\nconst UINT32_ARR = new Uint32Array(1);\r\nconst SUBTLE_SUBERROR = "crypto_subtle_undefined";\r\nconst keygenAlgorithmOptions = {\r\n name: PKCS1_V15_KEYGEN_ALG,\r\n hash: S256_HASH_ALG,\r\n modulusLength: MODULUS_LENGTH,\r\n publicExponent: PUBLIC_EXPONENT,\r\n};\r\n/**\r\n * Check whether browser crypto is available.\r\n */\r\nfunction validateCryptoAvailable(skipValidateSubtleCrypto) {\r\n if (!window) {\r\n throw createBrowserAuthError(nonBrowserEnvironment);\r\n }\r\n if (!window.crypto) {\r\n throw createBrowserAuthError(cryptoNonExistent);\r\n }\r\n if (!skipValidateSubtleCrypto && !window.crypto.subtle) {\r\n throw createBrowserAuthError(cryptoNonExistent, SUBTLE_SUBERROR);\r\n }\r\n}\r\n/**\r\n * Returns a sha-256 hash of the given dataString as an ArrayBuffer.\r\n * @param dataString {string} data string\r\n * @param performanceClient {?IPerformanceClient}\r\n * @param correlationId {?string} correlation id\r\n */\r\nasync function sha256Digest(dataString, performanceClient, correlationId) {\r\n performanceClient?.addQueueMeasurement(PerformanceEvents.Sha256Digest, correlationId);\r\n const encoder = new TextEncoder();\r\n const data = encoder.encode(dataString);\r\n return window.crypto.subtle.digest(S256_HASH_ALG, data);\r\n}\r\n/**\r\n * Populates buffer with cryptographically random values.\r\n * @param dataBuffer\r\n */\r\nfunction getRandomValues(dataBuffer) {\r\n return window.crypto.getRandomValues(dataBuffer);\r\n}\r\n/**\r\n * Returns random Uint32 value.\r\n * @returns {number}\r\n */\r\nfunction getRandomUint32() {\r\n window.crypto.getRandomValues(UINT32_ARR);\r\n return UINT32_ARR[0];\r\n}\r\n/**\r\n * Creates a UUID v7 from the current timestamp.\r\n * Implementation relies on the system clock to guarantee increasing order of generated identifiers.\r\n * @returns {number}\r\n */\r\nfunction createNewGuid() {\r\n const currentTimestamp = Date.now();\r\n const baseRand = getRandomUint32() * 0x400 + (getRandomUint32() & 0x3ff);\r\n // Result byte array\r\n const bytes = new Uint8Array(16);\r\n // A 12-bit `rand_a` field value\r\n const randA = Math.trunc(baseRand / 2 ** 30);\r\n // The higher 30 bits of 62-bit `rand_b` field value\r\n const randBHi = baseRand & (2 ** 30 - 1);\r\n // The lower 32 bits of 62-bit `rand_b` field value\r\n const randBLo = getRandomUint32();\r\n bytes[0] = currentTimestamp / 2 ** 40;\r\n bytes[1] = currentTimestamp / 2 ** 32;\r\n bytes[2] = currentTimestamp / 2 ** 24;\r\n bytes[3] = currentTimestamp / 2 ** 16;\r\n bytes[4] = currentTimestamp / 2 ** 8;\r\n bytes[5] = currentTimestamp;\r\n bytes[6] = 0x70 | (randA >>> 8);\r\n bytes[7] = randA;\r\n bytes[8] = 0x80 | (randBHi >>> 24);\r\n bytes[9] = randBHi >>> 16;\r\n bytes[10] = randBHi >>> 8;\r\n bytes[11] = randBHi;\r\n bytes[12] = randBLo >>> 24;\r\n bytes[13] = randBLo >>> 16;\r\n bytes[14] = randBLo >>> 8;\r\n bytes[15] = randBLo;\r\n let text = "";\r\n for (let i = 0; i < bytes.length; i++) {\r\n text += UUID_CHARS.charAt(bytes[i] >>> 4);\r\n text += UUID_CHARS.charAt(bytes[i] & 0xf);\r\n if (i === 3 || i === 5 || i === 7 || i === 9) {\r\n text += "-";\r\n }\r\n }\r\n return text;\r\n}\r\n/**\r\n * Generates a keypair based on current keygen algorithm config.\r\n * @param extractable\r\n * @param usages\r\n */\r\nasync function generateKeyPair(extractable, usages) {\r\n return window.crypto.subtle.generateKey(keygenAlgorithmOptions, extractable, usages);\r\n}\r\n/**\r\n * Export key as Json Web Key (JWK)\r\n * @param key\r\n */\r\nasync function exportJwk(key) {\r\n return window.crypto.subtle.exportKey(KEY_FORMAT_JWK, key);\r\n}\r\n/**\r\n * Imports key as Json Web Key (JWK), can set extractable and usages.\r\n * @param key\r\n * @param extractable\r\n * @param usages\r\n */\r\nasync function importJwk(key, extractable, usages) {\r\n return window.crypto.subtle.importKey(KEY_FORMAT_JWK, key, keygenAlgorithmOptions, extractable, usages);\r\n}\r\n/**\r\n * Signs given data with given key\r\n * @param key\r\n * @param data\r\n */\r\nasync function sign(key, data) {\r\n return window.crypto.subtle.sign(keygenAlgorithmOptions, key, data);\r\n}\r\n/**\r\n * Returns the SHA-256 hash of an input string\r\n * @param plainText\r\n */\r\nasync function hashString(plainText) {\r\n const hashBuffer = await sha256Digest(plainText);\r\n const hashBytes = new Uint8Array(hashBuffer);\r\n return urlEncodeArr(hashBytes);\r\n}\n\n\n//# sourceMappingURL=BrowserCrypto.mjs.map\n\n;// ./node_modules/@azure/msal-browser/dist/error/BrowserConfigurationAuthErrorCodes.mjs\n/*! @azure/msal-browser v3.28.1 2025-01-14 */\n\n/*\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License.\r\n */\r\nconst storageNotSupported = "storage_not_supported";\r\nconst stubbedPublicClientApplicationCalled = "stubbed_public_client_application_called";\r\nconst inMemRedirectUnavailable = "in_mem_redirect_unavailable";\n\n\n//# sourceMappingURL=BrowserConfigurationAuthErrorCodes.mjs.map\n\n;// ./node_modules/@azure/msal-browser/dist/error/BrowserConfigurationAuthError.mjs\n/*! @azure/msal-browser v3.28.1 2025-01-14 */\n\n\n\n\n\n\n/*\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License.\r\n */\r\nconst BrowserConfigurationAuthErrorMessages = {\r\n [storageNotSupported]: "Given storage configuration option was not supported.",\r\n [stubbedPublicClientApplicationCalled]: "Stub instance of Public Client Application was called. If using msal-react, please ensure context is not used without a provider. For more visit: aka.ms/msaljs/browser-errors",\r\n [inMemRedirectUnavailable]: "Redirect cannot be supported. In-memory storage was selected and storeAuthStateInCookie=false, which would cause the library to be unable to handle the incoming hash. If you would like to use the redirect API, please use session/localStorage or set storeAuthStateInCookie=true.",\r\n};\r\n/**\r\n * BrowserAuthErrorMessage class containing string constants used by error codes and messages.\r\n * @deprecated Use BrowserAuthErrorCodes instead\r\n */\r\nconst BrowserConfigurationAuthErrorMessage = {\r\n storageNotSupportedError: {\r\n code: storageNotSupported,\r\n desc: BrowserConfigurationAuthErrorMessages[storageNotSupported],\r\n },\r\n stubPcaInstanceCalled: {\r\n code: stubbedPublicClientApplicationCalled,\r\n desc: BrowserConfigurationAuthErrorMessages[stubbedPublicClientApplicationCalled],\r\n },\r\n inMemRedirectUnavailable: {\r\n code: inMemRedirectUnavailable,\r\n desc: BrowserConfigurationAuthErrorMessages[inMemRedirectUnavailable],\r\n },\r\n};\r\n/**\r\n * Browser library error class thrown by the MSAL.js library for SPAs\r\n */\r\nclass BrowserConfigurationAuthError extends AuthError {\r\n constructor(errorCode, errorMessage) {\r\n super(errorCode, errorMessage);\r\n this.name = "BrowserConfigurationAuthError";\r\n Object.setPrototypeOf(this, BrowserConfigurationAuthError.prototype);\r\n }\r\n}\r\nfunction createBrowserConfigurationAuthError(errorCode) {\r\n return new BrowserConfigurationAuthError(errorCode, BrowserConfigurationAuthErrorMessages[errorCode]);\r\n}\n\n\n//# sourceMappingURL=BrowserConfigurationAuthError.mjs.map\n\n;// ./node_modules/@azure/msal-browser/dist/utils/BrowserUtils.mjs\n/*! @azure/msal-browser v3.28.1 2025-01-14 */\n\n\n\n\n\n\n\n\n\n\n/*\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License.\r\n */\r\n/**\r\n * Clears hash from window url.\r\n */\r\nfunction clearHash(contentWindow) {\r\n // Office.js sets history.replaceState to null\r\n contentWindow.location.hash = "";\r\n if (typeof contentWindow.history.replaceState === "function") {\r\n // Full removes "#" from url\r\n contentWindow.history.replaceState(null, "", `${contentWindow.location.origin}${contentWindow.location.pathname}${contentWindow.location.search}`);\r\n }\r\n}\r\n/**\r\n * Replaces current hash with hash from provided url\r\n */\r\nfunction replaceHash(url) {\r\n const urlParts = url.split("#");\r\n urlParts.shift(); // Remove part before the hash\r\n window.location.hash = urlParts.length > 0 ? urlParts.join("#") : "";\r\n}\r\n/**\r\n * Returns boolean of whether the current window is in an iframe or not.\r\n */\r\nfunction isInIframe() {\r\n return window.parent !== window;\r\n}\r\n/**\r\n * Returns boolean of whether or not the current window is a popup opened by msal\r\n */\r\nfunction isInPopup() {\r\n return (typeof window !== "undefined" &&\r\n !!window.opener &&\r\n window.opener !== window &&\r\n typeof window.name === "string" &&\r\n window.name.indexOf(`${BrowserConstants.POPUP_NAME_PREFIX}.`) === 0);\r\n}\r\n// #endregion\r\n/**\r\n * Returns current window URL as redirect uri\r\n */\r\nfunction getCurrentUri() {\r\n return typeof window !== "undefined" && window.location\r\n ? window.location.href.split("?")[0].split("#")[0]\r\n : "";\r\n}\r\n/**\r\n * Gets the homepage url for the current window location.\r\n */\r\nfunction getHomepage() {\r\n const currentUrl = new UrlString(window.location.href);\r\n const urlComponents = currentUrl.getUrlComponents();\r\n return `${urlComponents.Protocol}//${urlComponents.HostNameAndPort}/`;\r\n}\r\n/**\r\n * Throws error if we have completed an auth and are\r\n * attempting another auth request inside an iframe.\r\n */\r\nfunction blockReloadInHiddenIframes() {\r\n const isResponseHash = UrlString.hashContainsKnownProperties(window.location.hash);\r\n // return an error if called from the hidden iframe created by the msal js silent calls\r\n if (isResponseHash && isInIframe()) {\r\n throw createBrowserAuthError(blockIframeReload);\r\n }\r\n}\r\n/**\r\n * Block redirect operations in iframes unless explicitly allowed\r\n * @param interactionType Interaction type for the request\r\n * @param allowRedirectInIframe Config value to allow redirects when app is inside an iframe\r\n */\r\nfunction blockRedirectInIframe(allowRedirectInIframe) {\r\n if (isInIframe() && !allowRedirectInIframe) {\r\n // If we are not in top frame, we shouldn\'t redirect. This is also handled by the service.\r\n throw createBrowserAuthError(redirectInIframe);\r\n }\r\n}\r\n/**\r\n * Block redirectUri loaded in popup from calling AcquireToken APIs\r\n */\r\nfunction blockAcquireTokenInPopups() {\r\n // Popups opened by msal popup APIs are given a name that starts with "msal."\r\n if (isInPopup()) {\r\n throw createBrowserAuthError(blockNestedPopups);\r\n }\r\n}\r\n/**\r\n * Throws error if token requests are made in non-browser environment\r\n * @param isBrowserEnvironment Flag indicating if environment is a browser.\r\n */\r\nfunction blockNonBrowserEnvironment() {\r\n if (typeof window === "undefined") {\r\n throw createBrowserAuthError(nonBrowserEnvironment);\r\n }\r\n}\r\n/**\r\n * Throws error if initialize hasn\'t been called\r\n * @param initialized\r\n */\r\nfunction blockAPICallsBeforeInitialize(initialized) {\r\n if (!initialized) {\r\n throw createBrowserAuthError(uninitializedPublicClientApplication);\r\n }\r\n}\r\n/**\r\n * Helper to validate app environment before making an auth request\r\n * @param initialized\r\n */\r\nfunction preflightCheck(initialized) {\r\n // Block request if not in browser environment\r\n blockNonBrowserEnvironment();\r\n // Block auth requests inside a hidden iframe\r\n blockReloadInHiddenIframes();\r\n // Block redirectUri opened in a popup from calling MSAL APIs\r\n blockAcquireTokenInPopups();\r\n // Block token acquisition before initialize has been called\r\n blockAPICallsBeforeInitialize(initialized);\r\n}\r\n/**\r\n * Helper to validate app enviornment before making redirect request\r\n * @param initialized\r\n * @param config\r\n */\r\nfunction redirectPreflightCheck(initialized, config) {\r\n preflightCheck(initialized);\r\n blockRedirectInIframe(config.system.allowRedirectInIframe);\r\n // Block redirects if memory storage is enabled but storeAuthStateInCookie is not\r\n if (config.cache.cacheLocation === BrowserCacheLocation.MemoryStorage &&\r\n !config.cache.storeAuthStateInCookie) {\r\n throw createBrowserConfigurationAuthError(inMemRedirectUnavailable);\r\n }\r\n}\r\n/**\r\n * Adds a preconnect link element to the header which begins DNS resolution and SSL connection in anticipation of the /token request\r\n * @param loginDomain Authority domain, including https protocol e.g. https://login.microsoftonline.com\r\n * @returns\r\n */\r\nfunction preconnect(authority) {\r\n const link = document.createElement("link");\r\n link.rel = "preconnect";\r\n link.href = new URL(authority).origin;\r\n link.crossOrigin = "anonymous";\r\n document.head.appendChild(link);\r\n // The browser will close connection if not used within a few seconds, remove element from the header after 10s\r\n window.setTimeout(() => {\r\n try {\r\n document.head.removeChild(link);\r\n }\r\n catch { }\r\n }, 10000); // 10s Timeout\r\n}\r\n/**\r\n * Wrapper function that creates a UUID v7 from the current timestamp.\r\n * @returns {string}\r\n */\r\nfunction createGuid() {\r\n return createNewGuid();\r\n}\n\n\n//# sourceMappingURL=BrowserUtils.mjs.map\n\n;// ./node_modules/@azure/msal-common/dist/logger/Logger.mjs\n/*! @azure/msal-common v14.16.0 2024-11-05 */\n\n\n\n/*\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License.\r\n */\r\n/**\r\n * Log message level.\r\n */\r\nvar LogLevel;\r\n(function (LogLevel) {\r\n LogLevel[LogLevel["Error"] = 0] = "Error";\r\n LogLevel[LogLevel["Warning"] = 1] = "Warning";\r\n LogLevel[LogLevel["Info"] = 2] = "Info";\r\n LogLevel[LogLevel["Verbose"] = 3] = "Verbose";\r\n LogLevel[LogLevel["Trace"] = 4] = "Trace";\r\n})(LogLevel || (LogLevel = {}));\r\n/**\r\n * Class which facilitates logging of messages to a specific place.\r\n */\r\nclass Logger {\r\n constructor(loggerOptions, packageName, packageVersion) {\r\n // Current log level, defaults to info.\r\n this.level = LogLevel.Info;\r\n const defaultLoggerCallback = () => {\r\n return;\r\n };\r\n const setLoggerOptions = loggerOptions || Logger.createDefaultLoggerOptions();\r\n this.localCallback =\r\n setLoggerOptions.loggerCallback || defaultLoggerCallback;\r\n this.piiLoggingEnabled = setLoggerOptions.piiLoggingEnabled || false;\r\n this.level =\r\n typeof setLoggerOptions.logLevel === "number"\r\n ? setLoggerOptions.logLevel\r\n : LogLevel.Info;\r\n this.correlationId =\r\n setLoggerOptions.correlationId || Constants.EMPTY_STRING;\r\n this.packageName = packageName || Constants.EMPTY_STRING;\r\n this.packageVersion = packageVersion || Constants.EMPTY_STRING;\r\n }\r\n static createDefaultLoggerOptions() {\r\n return {\r\n loggerCallback: () => {\r\n // allow users to not set loggerCallback\r\n },\r\n piiLoggingEnabled: false,\r\n logLevel: LogLevel.Info,\r\n };\r\n }\r\n /**\r\n * Create new Logger with existing configurations.\r\n */\r\n clone(packageName, packageVersion, correlationId) {\r\n return new Logger({\r\n loggerCallback: this.localCallback,\r\n piiLoggingEnabled: this.piiLoggingEnabled,\r\n logLevel: this.level,\r\n correlationId: correlationId || this.correlationId,\r\n }, packageName, packageVersion);\r\n }\r\n /**\r\n * Log message with required options.\r\n */\r\n logMessage(logMessage, options) {\r\n if (options.logLevel > this.level ||\r\n (!this.piiLoggingEnabled && options.containsPii)) {\r\n return;\r\n }\r\n const timestamp = new Date().toUTCString();\r\n // Add correlationId to logs if set, correlationId provided on log messages take precedence\r\n const logHeader = `[${timestamp}] : [${options.correlationId || this.correlationId || ""}]`;\r\n const log = `${logHeader} : ${this.packageName}@${this.packageVersion} : ${LogLevel[options.logLevel]} - ${logMessage}`;\r\n // debug(`msal:${LogLevel[options.logLevel]}${options.containsPii ? "-Pii": Constants.EMPTY_STRING}${options.context ? `:${options.context}` : Constants.EMPTY_STRING}`)(logMessage);\r\n this.executeCallback(options.logLevel, log, options.containsPii || false);\r\n }\r\n /**\r\n * Execute callback with message.\r\n */\r\n executeCallback(level, message, containsPii) {\r\n if (this.localCallback) {\r\n this.localCallback(level, message, containsPii);\r\n }\r\n }\r\n /**\r\n * Logs error messages.\r\n */\r\n error(message, correlationId) {\r\n this.logMessage(message, {\r\n logLevel: LogLevel.Error,\r\n containsPii: false,\r\n correlationId: correlationId || Constants.EMPTY_STRING,\r\n });\r\n }\r\n /**\r\n * Logs error messages with PII.\r\n */\r\n errorPii(message, correlationId) {\r\n this.logMessage(message, {\r\n logLevel: LogLevel.Error,\r\n containsPii: true,\r\n correlationId: correlationId || Constants.EMPTY_STRING,\r\n });\r\n }\r\n /**\r\n * Logs warning messages.\r\n */\r\n warning(message, correlationId) {\r\n this.logMessage(message, {\r\n logLevel: LogLevel.Warning,\r\n containsPii: false,\r\n correlationId: correlationId || Constants.EMPTY_STRING,\r\n });\r\n }\r\n /**\r\n * Logs warning messages with PII.\r\n */\r\n warningPii(message, correlationId) {\r\n this.logMessage(message, {\r\n logLevel: LogLevel.Warning,\r\n containsPii: true,\r\n correlationId: correlationId || Constants.EMPTY_STRING,\r\n });\r\n }\r\n /**\r\n * Logs info messages.\r\n */\r\n info(message, correlationId) {\r\n this.logMessage(message, {\r\n logLevel: LogLevel.Info,\r\n containsPii: false,\r\n correlationId: correlationId || Constants.EMPTY_STRING,\r\n });\r\n }\r\n /**\r\n * Logs info messages with PII.\r\n */\r\n infoPii(message, correlationId) {\r\n this.logMessage(message, {\r\n logLevel: LogLevel.Info,\r\n containsPii: true,\r\n correlationId: correlationId || Constants.EMPTY_STRING,\r\n });\r\n }\r\n /**\r\n * Logs verbose messages.\r\n */\r\n verbose(message, correlationId) {\r\n this.logMessage(message, {\r\n logLevel: LogLevel.Verbose,\r\n containsPii: false,\r\n correlationId: correlationId || Constants.EMPTY_STRING,\r\n });\r\n }\r\n /**\r\n * Logs verbose messages with PII.\r\n */\r\n verbosePii(message, correlationId) {\r\n this.logMessage(message, {\r\n logLevel: LogLevel.Verbose,\r\n containsPii: true,\r\n correlationId: correlationId || Constants.EMPTY_STRING,\r\n });\r\n }\r\n /**\r\n * Logs trace messages.\r\n */\r\n trace(message, correlationId) {\r\n this.logMessage(message, {\r\n logLevel: LogLevel.Trace,\r\n containsPii: false,\r\n correlationId: correlationId || Constants.EMPTY_STRING,\r\n });\r\n }\r\n /**\r\n * Logs trace messages with PII.\r\n */\r\n tracePii(message, correlationId) {\r\n this.logMessage(message, {\r\n logLevel: LogLevel.Trace,\r\n containsPii: true,\r\n correlationId: correlationId || Constants.EMPTY_STRING,\r\n });\r\n }\r\n /**\r\n * Returns whether PII Logging is enabled or not.\r\n */\r\n isPiiLoggingEnabled() {\r\n return this.piiLoggingEnabled || false;\r\n }\r\n}\n\n\n//# sourceMappingURL=Logger.mjs.map\n\n;// ./node_modules/@azure/msal-common/dist/authority/ProtocolMode.mjs\n/*! @azure/msal-common v14.16.0 2024-11-05 */\n\n/*\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License.\r\n */\r\n/**\r\n * Protocol modes supported by MSAL.\r\n */\r\nconst ProtocolMode = {\r\n AAD: "AAD",\r\n OIDC: "OIDC",\r\n};\n\n\n//# sourceMappingURL=ProtocolMode.mjs.map\n\n;// ./node_modules/@azure/msal-common/dist/authority/AuthorityOptions.mjs\n/*! @azure/msal-common v14.16.0 2024-11-05 */\n\n/*\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License.\r\n */\r\nconst AzureCloudInstance = {\r\n // AzureCloudInstance is not specified.\r\n None: "none",\r\n // Microsoft Azure public cloud\r\n AzurePublic: "https://login.microsoftonline.com",\r\n // Microsoft PPE\r\n AzurePpe: "https://login.windows-ppe.net",\r\n // Microsoft Chinese national/regional cloud\r\n AzureChina: "https://login.chinacloudapi.cn",\r\n // Microsoft German national/regional cloud ("Black Forest")\r\n AzureGermany: "https://login.microsoftonline.de",\r\n // US Government cloud\r\n AzureUsGovernment: "https://login.microsoftonline.us",\r\n};\n\n\n//# sourceMappingURL=AuthorityOptions.mjs.map\n\n;// ./node_modules/@azure/msal-common/dist/crypto/ICrypto.mjs\n/*! @azure/msal-common v14.16.0 2024-11-05 */\n\n\n\n\n/*\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License.\r\n */\r\nconst DEFAULT_CRYPTO_IMPLEMENTATION = {\r\n createNewGuid: () => {\r\n throw createClientAuthError(methodNotImplemented);\r\n },\r\n base64Decode: () => {\r\n throw createClientAuthError(methodNotImplemented);\r\n },\r\n base64Encode: () => {\r\n throw createClientAuthError(methodNotImplemented);\r\n },\r\n base64UrlEncode: () => {\r\n throw createClientAuthError(methodNotImplemented);\r\n },\r\n encodeKid: () => {\r\n throw createClientAuthError(methodNotImplemented);\r\n },\r\n async getPublicKeyThumbprint() {\r\n throw createClientAuthError(methodNotImplemented);\r\n },\r\n async removeTokenBindingKey() {\r\n throw createClientAuthError(methodNotImplemented);\r\n },\r\n async clearKeystore() {\r\n throw createClientAuthError(methodNotImplemented);\r\n },\r\n async signJwt() {\r\n throw createClientAuthError(methodNotImplemented);\r\n },\r\n async hashString() {\r\n throw createClientAuthError(methodNotImplemented);\r\n },\r\n};\n\n\n//# sourceMappingURL=ICrypto.mjs.map\n\n;// ./node_modules/@azure/msal-common/dist/packageMetadata.mjs\n/*! @azure/msal-common v14.16.0 2024-11-05 */\n\n/* eslint-disable header/header */\r\nconst packageMetadata_name = "@azure/msal-common";\r\nconst version = "14.16.0";\n\n\n//# sourceMappingURL=packageMetadata.mjs.map\n\n;// ./node_modules/@azure/msal-common/dist/account/AuthToken.mjs\n/*! @azure/msal-common v14.16.0 2024-11-05 */\n\n\n\n\n/*\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License.\r\n */\r\n/**\r\n * Extract token by decoding the rawToken\r\n *\r\n * @param encodedToken\r\n */\r\nfunction extractTokenClaims(encodedToken, base64Decode) {\r\n const jswPayload = getJWSPayload(encodedToken);\r\n // token will be decoded to get the username\r\n try {\r\n // base64Decode() should throw an error if there is an issue\r\n const base64Decoded = base64Decode(jswPayload);\r\n return JSON.parse(base64Decoded);\r\n }\r\n catch (err) {\r\n throw createClientAuthError(tokenParsingError);\r\n }\r\n}\r\n/**\r\n * decode a JWT\r\n *\r\n * @param authToken\r\n */\r\nfunction getJWSPayload(authToken) {\r\n if (!authToken) {\r\n throw createClientAuthError(nullOrEmptyToken);\r\n }\r\n const tokenPartsRegex = /^([^\\.\\s]*)\\.([^\\.\\s]+)\\.([^\\.\\s]*)$/;\r\n const matches = tokenPartsRegex.exec(authToken);\r\n if (!matches || matches.length < 4) {\r\n throw createClientAuthError(tokenParsingError);\r\n }\r\n /**\r\n * const crackedToken = {\r\n * header: matches[1],\r\n * JWSPayload: matches[2],\r\n * JWSSig: matches[3],\r\n * };\r\n */\r\n return matches[2];\r\n}\r\n/**\r\n * Determine if the token\'s max_age has transpired\r\n */\r\nfunction checkMaxAge(authTime, maxAge) {\r\n /*\r\n * per https://openid.net/specs/openid-connect-core-1_0.html#AuthRequest\r\n * To force an immediate re-authentication: If an app requires that a user re-authenticate prior to access,\r\n * provide a value of 0 for the max_age parameter and the AS will force a fresh login.\r\n */\r\n const fiveMinuteSkew = 300000; // five minutes in milliseconds\r\n if (maxAge === 0 || Date.now() - fiveMinuteSkew > authTime + maxAge) {\r\n throw createClientAuthError(maxAgeTranspired);\r\n }\r\n}\n\n\n//# sourceMappingURL=AuthToken.mjs.map\n\n;// ./node_modules/@azure/msal-common/dist/utils/TimeUtils.mjs\n/*! @azure/msal-common v14.16.0 2024-11-05 */\n\n/*\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License.\r\n */\r\n/**\r\n * Utility functions for managing date and time operations.\r\n */\r\n/**\r\n * return the current time in Unix time (seconds).\r\n */\r\nfunction nowSeconds() {\r\n // Date.getTime() returns in milliseconds.\r\n return Math.round(new Date().getTime() / 1000.0);\r\n}\r\n/**\r\n * check if a token is expired based on given UTC time in seconds.\r\n * @param expiresOn\r\n */\r\nfunction isTokenExpired(expiresOn, offset) {\r\n // check for access token expiry\r\n const expirationSec = Number(expiresOn) || 0;\r\n const offsetCurrentTimeSec = nowSeconds() + offset;\r\n // If current time + offset is greater than token expiration time, then token is expired.\r\n return offsetCurrentTimeSec > expirationSec;\r\n}\r\n/**\r\n * If the current time is earlier than the time that a token was cached at, we must discard the token\r\n * i.e. The system clock was turned back after acquiring the cached token\r\n * @param cachedAt\r\n * @param offset\r\n */\r\nfunction wasClockTurnedBack(cachedAt) {\r\n const cachedAtSec = Number(cachedAt);\r\n return cachedAtSec > nowSeconds();\r\n}\r\n/**\r\n * Waits for t number of milliseconds\r\n * @param t number\r\n * @param value T\r\n */\r\nfunction delay(t, value) {\r\n return new Promise((resolve) => setTimeout(() => resolve(value), t));\r\n}\n\n\n//# sourceMappingURL=TimeUtils.mjs.map\n\n;// ./node_modules/@azure/msal-common/dist/cache/utils/CacheHelpers.mjs\n/*! @azure/msal-common v14.16.0 2024-11-05 */\n\n\n\n\n\n\n\n/*\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License.\r\n */\r\n/**\r\n * Cache Key: -------\r\n * IdToken Example: uid.utid-login.microsoftonline.com-idtoken-app_client_id-contoso.com\r\n * AccessToken Example: uid.utid-login.microsoftonline.com-accesstoken-app_client_id-contoso.com-scope1 scope2--pop\r\n * RefreshToken Example: uid.utid-login.microsoftonline.com-refreshtoken-1-contoso.com\r\n * @param credentialEntity\r\n * @returns\r\n */\r\nfunction generateCredentialKey(credentialEntity) {\r\n const credentialKey = [\r\n generateAccountId(credentialEntity),\r\n generateCredentialId(credentialEntity),\r\n generateTarget(credentialEntity),\r\n generateClaimsHash(credentialEntity),\r\n generateScheme(credentialEntity),\r\n ];\r\n return credentialKey.join(Separators.CACHE_KEY_SEPARATOR).toLowerCase();\r\n}\r\n/**\r\n * Create IdTokenEntity\r\n * @param homeAccountId\r\n * @param authenticationResult\r\n * @param clientId\r\n * @param authority\r\n */\r\nfunction createIdTokenEntity(homeAccountId, environment, idToken, clientId, tenantId) {\r\n const idTokenEntity = {\r\n credentialType: CredentialType.ID_TOKEN,\r\n homeAccountId: homeAccountId,\r\n environment: environment,\r\n clientId: clientId,\r\n secret: idToken,\r\n realm: tenantId,\r\n };\r\n return idTokenEntity;\r\n}\r\n/**\r\n * Create AccessTokenEntity\r\n * @param homeAccountId\r\n * @param environment\r\n * @param accessToken\r\n * @param clientId\r\n * @param tenantId\r\n * @param scopes\r\n * @param expiresOn\r\n * @param extExpiresOn\r\n */\r\nfunction createAccessTokenEntity(homeAccountId, environment, accessToken, clientId, tenantId, scopes, expiresOn, extExpiresOn, base64Decode, refreshOn, tokenType, userAssertionHash, keyId, requestedClaims, requestedClaimsHash) {\r\n const atEntity = {\r\n homeAccountId: homeAccountId,\r\n credentialType: CredentialType.ACCESS_TOKEN,\r\n secret: accessToken,\r\n cachedAt: nowSeconds().toString(),\r\n expiresOn: expiresOn.toString(),\r\n extendedExpiresOn: extExpiresOn.toString(),\r\n environment: environment,\r\n clientId: clientId,\r\n realm: tenantId,\r\n target: scopes,\r\n tokenType: tokenType || AuthenticationScheme.BEARER,\r\n };\r\n if (userAssertionHash) {\r\n atEntity.userAssertionHash = userAssertionHash;\r\n }\r\n if (refreshOn) {\r\n atEntity.refreshOn = refreshOn.toString();\r\n }\r\n if (requestedClaims) {\r\n atEntity.requestedClaims = requestedClaims;\r\n atEntity.requestedClaimsHash = requestedClaimsHash;\r\n }\r\n /*\r\n * Create Access Token With Auth Scheme instead of regular access token\r\n * Cast to lower to handle "bearer" from ADFS\r\n */\r\n if (atEntity.tokenType?.toLowerCase() !==\r\n AuthenticationScheme.BEARER.toLowerCase()) {\r\n atEntity.credentialType = CredentialType.ACCESS_TOKEN_WITH_AUTH_SCHEME;\r\n switch (atEntity.tokenType) {\r\n case AuthenticationScheme.POP:\r\n // Make sure keyId is present and add it to credential\r\n const tokenClaims = extractTokenClaims(accessToken, base64Decode);\r\n if (!tokenClaims?.cnf?.kid) {\r\n throw createClientAuthError(tokenClaimsCnfRequiredForSignedJwt);\r\n }\r\n atEntity.keyId = tokenClaims.cnf.kid;\r\n break;\r\n case AuthenticationScheme.SSH:\r\n atEntity.keyId = keyId;\r\n }\r\n }\r\n return atEntity;\r\n}\r\n/**\r\n * Create RefreshTokenEntity\r\n * @param homeAccountId\r\n * @param authenticationResult\r\n * @param clientId\r\n * @param authority\r\n */\r\nfunction createRefreshTokenEntity(homeAccountId, environment, refreshToken, clientId, familyId, userAssertionHash, expiresOn) {\r\n const rtEntity = {\r\n credentialType: CredentialType.REFRESH_TOKEN,\r\n homeAccountId: homeAccountId,\r\n environment: environment,\r\n clientId: clientId,\r\n secret: refreshToken,\r\n };\r\n if (userAssertionHash) {\r\n rtEntity.userAssertionHash = userAssertionHash;\r\n }\r\n if (familyId) {\r\n rtEntity.familyId = familyId;\r\n }\r\n if (expiresOn) {\r\n rtEntity.expiresOn = expiresOn.toString();\r\n }\r\n return rtEntity;\r\n}\r\nfunction isCredentialEntity(entity) {\r\n return (entity.hasOwnProperty("homeAccountId") &&\r\n entity.hasOwnProperty("environment") &&\r\n entity.hasOwnProperty("credentialType") &&\r\n entity.hasOwnProperty("clientId") &&\r\n entity.hasOwnProperty("secret"));\r\n}\r\n/**\r\n * Validates an entity: checks for all expected params\r\n * @param entity\r\n */\r\nfunction isAccessTokenEntity(entity) {\r\n if (!entity) {\r\n return false;\r\n }\r\n return (isCredentialEntity(entity) &&\r\n entity.hasOwnProperty("realm") &&\r\n entity.hasOwnProperty("target") &&\r\n (entity["credentialType"] === CredentialType.ACCESS_TOKEN ||\r\n entity["credentialType"] ===\r\n CredentialType.ACCESS_TOKEN_WITH_AUTH_SCHEME));\r\n}\r\n/**\r\n * Validates an entity: checks for all expected params\r\n * @param entity\r\n */\r\nfunction isIdTokenEntity(entity) {\r\n if (!entity) {\r\n return false;\r\n }\r\n return (isCredentialEntity(entity) &&\r\n entity.hasOwnProperty("realm") &&\r\n entity["credentialType"] === CredentialType.ID_TOKEN);\r\n}\r\n/**\r\n * Validates an entity: checks for all expected params\r\n * @param entity\r\n */\r\nfunction isRefreshTokenEntity(entity) {\r\n if (!entity) {\r\n return false;\r\n }\r\n return (isCredentialEntity(entity) &&\r\n entity["credentialType"] === CredentialType.REFRESH_TOKEN);\r\n}\r\n/**\r\n * Generate Account Id key component as per the schema: -\r\n */\r\nfunction generateAccountId(credentialEntity) {\r\n const accountId = [\r\n credentialEntity.homeAccountId,\r\n credentialEntity.environment,\r\n ];\r\n return accountId.join(Separators.CACHE_KEY_SEPARATOR).toLowerCase();\r\n}\r\n/**\r\n * Generate Credential Id key component as per the schema: --\r\n */\r\nfunction generateCredentialId(credentialEntity) {\r\n const clientOrFamilyId = credentialEntity.credentialType === CredentialType.REFRESH_TOKEN\r\n ? credentialEntity.familyId || credentialEntity.clientId\r\n : credentialEntity.clientId;\r\n const credentialId = [\r\n credentialEntity.credentialType,\r\n clientOrFamilyId,\r\n credentialEntity.realm || "",\r\n ];\r\n return credentialId.join(Separators.CACHE_KEY_SEPARATOR).toLowerCase();\r\n}\r\n/**\r\n * Generate target key component as per schema: \r\n */\r\nfunction generateTarget(credentialEntity) {\r\n return (credentialEntity.target || "").toLowerCase();\r\n}\r\n/**\r\n * Generate requested claims key component as per schema: \r\n */\r\nfunction generateClaimsHash(credentialEntity) {\r\n return (credentialEntity.requestedClaimsHash || "").toLowerCase();\r\n}\r\n/**\r\n * Generate scheme key componenet as per schema: \r\n */\r\nfunction generateScheme(credentialEntity) {\r\n /*\r\n * PoP Tokens and SSH certs include scheme in cache key\r\n * Cast to lowercase to handle "bearer" from ADFS\r\n */\r\n return credentialEntity.tokenType &&\r\n credentialEntity.tokenType.toLowerCase() !==\r\n AuthenticationScheme.BEARER.toLowerCase()\r\n ? credentialEntity.tokenType.toLowerCase()\r\n : "";\r\n}\r\n/**\r\n * validates if a given cache entry is "Telemetry", parses \r\n * @param key\r\n * @param entity\r\n */\r\nfunction isServerTelemetryEntity(key, entity) {\r\n const validateKey = key.indexOf(SERVER_TELEM_CONSTANTS.CACHE_KEY) === 0;\r\n let validateEntity = true;\r\n if (entity) {\r\n validateEntity =\r\n entity.hasOwnProperty("failedRequests") &&\r\n entity.hasOwnProperty("errors") &&\r\n entity.hasOwnProperty("cacheHits");\r\n }\r\n return validateKey && validateEntity;\r\n}\r\n/**\r\n * validates if a given cache entry is "Throttling", parses \r\n * @param key\r\n * @param entity\r\n */\r\nfunction isThrottlingEntity(key, entity) {\r\n let validateKey = false;\r\n if (key) {\r\n validateKey = key.indexOf(ThrottlingConstants.THROTTLING_PREFIX) === 0;\r\n }\r\n let validateEntity = true;\r\n if (entity) {\r\n validateEntity = entity.hasOwnProperty("throttleTime");\r\n }\r\n return validateKey && validateEntity;\r\n}\r\n/**\r\n * Generate AppMetadata Cache Key as per the schema: appmetadata--\r\n */\r\nfunction generateAppMetadataKey({ environment, clientId, }) {\r\n const appMetaDataKeyArray = [\r\n APP_METADATA,\r\n environment,\r\n clientId,\r\n ];\r\n return appMetaDataKeyArray\r\n .join(Separators.CACHE_KEY_SEPARATOR)\r\n .toLowerCase();\r\n}\r\n/*\r\n * Validates an entity: checks for all expected params\r\n * @param entity\r\n */\r\nfunction isAppMetadataEntity(key, entity) {\r\n if (!entity) {\r\n return false;\r\n }\r\n return (key.indexOf(APP_METADATA) === 0 &&\r\n entity.hasOwnProperty("clientId") &&\r\n entity.hasOwnProperty("environment"));\r\n}\r\n/**\r\n * Validates an entity: checks for all expected params\r\n * @param entity\r\n */\r\nfunction isAuthorityMetadataEntity(key, entity) {\r\n if (!entity) {\r\n return false;\r\n }\r\n return (key.indexOf(AUTHORITY_METADATA_CONSTANTS.CACHE_KEY) === 0 &&\r\n entity.hasOwnProperty("aliases") &&\r\n entity.hasOwnProperty("preferred_cache") &&\r\n entity.hasOwnProperty("preferred_network") &&\r\n entity.hasOwnProperty("canonical_authority") &&\r\n entity.hasOwnProperty("authorization_endpoint") &&\r\n entity.hasOwnProperty("token_endpoint") &&\r\n entity.hasOwnProperty("issuer") &&\r\n entity.hasOwnProperty("aliasesFromNetwork") &&\r\n entity.hasOwnProperty("endpointsFromNetwork") &&\r\n entity.hasOwnProperty("expiresAt") &&\r\n entity.hasOwnProperty("jwks_uri"));\r\n}\r\n/**\r\n * Reset the exiresAt value\r\n */\r\nfunction generateAuthorityMetadataExpiresAt() {\r\n return (nowSeconds() +\r\n AUTHORITY_METADATA_CONSTANTS.REFRESH_TIME_SECONDS);\r\n}\r\nfunction updateAuthorityEndpointMetadata(authorityMetadata, updatedValues, fromNetwork) {\r\n authorityMetadata.authorization_endpoint =\r\n updatedValues.authorization_endpoint;\r\n authorityMetadata.token_endpoint = updatedValues.token_endpoint;\r\n authorityMetadata.end_session_endpoint = updatedValues.end_session_endpoint;\r\n authorityMetadata.issuer = updatedValues.issuer;\r\n authorityMetadata.endpointsFromNetwork = fromNetwork;\r\n authorityMetadata.jwks_uri = updatedValues.jwks_uri;\r\n}\r\nfunction updateCloudDiscoveryMetadata(authorityMetadata, updatedValues, fromNetwork) {\r\n authorityMetadata.aliases = updatedValues.aliases;\r\n authorityMetadata.preferred_cache = updatedValues.preferred_cache;\r\n authorityMetadata.preferred_network = updatedValues.preferred_network;\r\n authorityMetadata.aliasesFromNetwork = fromNetwork;\r\n}\r\n/**\r\n * Returns whether or not the data needs to be refreshed\r\n */\r\nfunction isAuthorityMetadataExpired(metadata) {\r\n return metadata.expiresAt <= nowSeconds();\r\n}\n\n\n//# sourceMappingURL=CacheHelpers.mjs.map\n\n;// ./node_modules/@azure/msal-common/dist/request/ScopeSet.mjs\n/*! @azure/msal-common v14.16.0 2024-11-05 */\n\n\n\n\n\n\n\n\n/*\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License.\r\n */\r\n/**\r\n * The ScopeSet class creates a set of scopes. Scopes are case-insensitive, unique values, so the Set object in JS makes\r\n * the most sense to implement for this class. All scopes are trimmed and converted to lower case strings in intersection and union functions\r\n * to ensure uniqueness of strings.\r\n */\r\nclass ScopeSet {\r\n constructor(inputScopes) {\r\n // Filter empty string and null/undefined array items\r\n const scopeArr = inputScopes\r\n ? StringUtils.trimArrayEntries([...inputScopes])\r\n : [];\r\n const filteredInput = scopeArr\r\n ? StringUtils.removeEmptyStringsFromArray(scopeArr)\r\n : [];\r\n // Validate and filter scopes (validate function throws if validation fails)\r\n this.validateInputScopes(filteredInput);\r\n this.scopes = new Set(); // Iterator in constructor not supported by IE11\r\n filteredInput.forEach((scope) => this.scopes.add(scope));\r\n }\r\n /**\r\n * Factory method to create ScopeSet from space-delimited string\r\n * @param inputScopeString\r\n * @param appClientId\r\n * @param scopesRequired\r\n */\r\n static fromString(inputScopeString) {\r\n const scopeString = inputScopeString || Constants.EMPTY_STRING;\r\n const inputScopes = scopeString.split(" ");\r\n return new ScopeSet(inputScopes);\r\n }\r\n /**\r\n * Creates the set of scopes to search for in cache lookups\r\n * @param inputScopeString\r\n * @returns\r\n */\r\n static createSearchScopes(inputScopeString) {\r\n const scopeSet = new ScopeSet(inputScopeString);\r\n if (!scopeSet.containsOnlyOIDCScopes()) {\r\n scopeSet.removeOIDCScopes();\r\n }\r\n else {\r\n scopeSet.removeScope(Constants.OFFLINE_ACCESS_SCOPE);\r\n }\r\n return scopeSet;\r\n }\r\n /**\r\n * Used to validate the scopes input parameter requested by the developer.\r\n * @param {Array} inputScopes - Developer requested permissions. Not all scopes are guaranteed to be included in the access token returned.\r\n * @param {boolean} scopesRequired - Boolean indicating whether the scopes array is required or not\r\n */\r\n validateInputScopes(inputScopes) {\r\n // Check if scopes are required but not given or is an empty array\r\n if (!inputScopes || inputScopes.length < 1) {\r\n throw createClientConfigurationError(emptyInputScopesError);\r\n }\r\n }\r\n /**\r\n * Check if a given scope is present in this set of scopes.\r\n * @param scope\r\n */\r\n containsScope(scope) {\r\n const lowerCaseScopes = this.printScopesLowerCase().split(" ");\r\n const lowerCaseScopesSet = new ScopeSet(lowerCaseScopes);\r\n // compare lowercase scopes\r\n return scope\r\n ? lowerCaseScopesSet.scopes.has(scope.toLowerCase())\r\n : false;\r\n }\r\n /**\r\n * Check if a set of scopes is present in this set of scopes.\r\n * @param scopeSet\r\n */\r\n containsScopeSet(scopeSet) {\r\n if (!scopeSet || scopeSet.scopes.size <= 0) {\r\n return false;\r\n }\r\n return (this.scopes.size >= scopeSet.scopes.size &&\r\n scopeSet.asArray().every((scope) => this.containsScope(scope)));\r\n }\r\n /**\r\n * Check if set of scopes contains only the defaults\r\n */\r\n containsOnlyOIDCScopes() {\r\n let defaultScopeCount = 0;\r\n OIDC_SCOPES.forEach((defaultScope) => {\r\n if (this.containsScope(defaultScope)) {\r\n defaultScopeCount += 1;\r\n }\r\n });\r\n return this.scopes.size === defaultScopeCount;\r\n }\r\n /**\r\n * Appends single scope if passed\r\n * @param newScope\r\n */\r\n appendScope(newScope) {\r\n if (newScope) {\r\n this.scopes.add(newScope.trim());\r\n }\r\n }\r\n /**\r\n * Appends multiple scopes if passed\r\n * @param newScopes\r\n */\r\n appendScopes(newScopes) {\r\n try {\r\n newScopes.forEach((newScope) => this.appendScope(newScope));\r\n }\r\n catch (e) {\r\n throw createClientAuthError(cannotAppendScopeSet);\r\n }\r\n }\r\n /**\r\n * Removes element from set of scopes.\r\n * @param scope\r\n */\r\n removeScope(scope) {\r\n if (!scope) {\r\n throw createClientAuthError(cannotRemoveEmptyScope);\r\n }\r\n this.scopes.delete(scope.trim());\r\n }\r\n /**\r\n * Removes default scopes from set of scopes\r\n * Primarily used to prevent cache misses if the default scopes are not returned from the server\r\n */\r\n removeOIDCScopes() {\r\n OIDC_SCOPES.forEach((defaultScope) => {\r\n this.scopes.delete(defaultScope);\r\n });\r\n }\r\n /**\r\n * Combines an array of scopes with the current set of scopes.\r\n * @param otherScopes\r\n */\r\n unionScopeSets(otherScopes) {\r\n if (!otherScopes) {\r\n throw createClientAuthError(emptyInputScopeSet);\r\n }\r\n const unionScopes = new Set(); // Iterator in constructor not supported in IE11\r\n otherScopes.scopes.forEach((scope) => unionScopes.add(scope.toLowerCase()));\r\n this.scopes.forEach((scope) => unionScopes.add(scope.toLowerCase()));\r\n return unionScopes;\r\n }\r\n /**\r\n * Check if scopes intersect between this set and another.\r\n * @param otherScopes\r\n */\r\n intersectingScopeSets(otherScopes) {\r\n if (!otherScopes) {\r\n throw createClientAuthError(emptyInputScopeSet);\r\n }\r\n // Do not allow OIDC scopes to be the only intersecting scopes\r\n if (!otherScopes.containsOnlyOIDCScopes()) {\r\n otherScopes.removeOIDCScopes();\r\n }\r\n const unionScopes = this.unionScopeSets(otherScopes);\r\n const sizeOtherScopes = otherScopes.getScopeCount();\r\n const sizeThisScopes = this.getScopeCount();\r\n const sizeUnionScopes = unionScopes.size;\r\n return sizeUnionScopes < sizeThisScopes + sizeOtherScopes;\r\n }\r\n /**\r\n * Returns size of set of scopes.\r\n */\r\n getScopeCount() {\r\n return this.scopes.size;\r\n }\r\n /**\r\n * Returns the scopes as an array of string values\r\n */\r\n asArray() {\r\n const array = [];\r\n this.scopes.forEach((val) => array.push(val));\r\n return array;\r\n }\r\n /**\r\n * Prints scopes into a space-delimited string\r\n */\r\n printScopes() {\r\n if (this.scopes) {\r\n const scopeArr = this.asArray();\r\n return scopeArr.join(" ");\r\n }\r\n return Constants.EMPTY_STRING;\r\n }\r\n /**\r\n * Prints scopes into a space-delimited lower-case string (used for caching)\r\n */\r\n printScopesLowerCase() {\r\n return this.printScopes().toLowerCase();\r\n }\r\n}\n\n\n//# sourceMappingURL=ScopeSet.mjs.map\n\n;// ./node_modules/@azure/msal-common/dist/account/ClientInfo.mjs\n/*! @azure/msal-common v14.16.0 2024-11-05 */\n\n\n\n\n\n/*\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License.\r\n */\r\n/**\r\n * Function to build a client info object from server clientInfo string\r\n * @param rawClientInfo\r\n * @param crypto\r\n */\r\nfunction buildClientInfo(rawClientInfo, base64Decode) {\r\n if (!rawClientInfo) {\r\n throw createClientAuthError(clientInfoEmptyError);\r\n }\r\n try {\r\n const decodedClientInfo = base64Decode(rawClientInfo);\r\n return JSON.parse(decodedClientInfo);\r\n }\r\n catch (e) {\r\n throw createClientAuthError(clientInfoDecodingError);\r\n }\r\n}\r\n/**\r\n * Function to build a client info object from cached homeAccountId string\r\n * @param homeAccountId\r\n */\r\nfunction buildClientInfoFromHomeAccountId(homeAccountId) {\r\n if (!homeAccountId) {\r\n throw createClientAuthError(clientInfoDecodingError);\r\n }\r\n const clientInfoParts = homeAccountId.split(Separators.CLIENT_INFO_SEPARATOR, 2);\r\n return {\r\n uid: clientInfoParts[0],\r\n utid: clientInfoParts.length < 2\r\n ? Constants.EMPTY_STRING\r\n : clientInfoParts[1],\r\n };\r\n}\n\n\n//# sourceMappingURL=ClientInfo.mjs.map\n\n;// ./node_modules/@azure/msal-common/dist/account/AccountInfo.mjs\n/*! @azure/msal-common v14.16.0 2024-11-05 */\n\n/*\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License.\r\n */\r\n/**\r\n * Returns true if tenantId matches the utid portion of homeAccountId\r\n * @param tenantId\r\n * @param homeAccountId\r\n * @returns\r\n */\r\nfunction tenantIdMatchesHomeTenant(tenantId, homeAccountId) {\r\n return (!!tenantId &&\r\n !!homeAccountId &&\r\n tenantId === homeAccountId.split(".")[1]);\r\n}\r\n/**\r\n * Build tenant profile\r\n * @param homeAccountId - Home account identifier for this account object\r\n * @param localAccountId - Local account identifer for this account object\r\n * @param tenantId - Full tenant or organizational id that this account belongs to\r\n * @param idTokenClaims - Claims from the ID token\r\n * @returns\r\n */\r\nfunction buildTenantProfile(homeAccountId, localAccountId, tenantId, idTokenClaims) {\r\n if (idTokenClaims) {\r\n const { oid, sub, tid, name, tfp, acr } = idTokenClaims;\r\n /**\r\n * Since there is no way to determine if the authority is AAD or B2C, we exhaust all the possible claims that can serve as tenant ID with the following precedence:\r\n * tid - TenantID claim that identifies the tenant that issued the token in AAD. Expected in all AAD ID tokens, not present in B2C ID Tokens.\r\n * tfp - Trust Framework Policy claim that identifies the policy that was used to authenticate the user. Functions as tenant for B2C scenarios.\r\n * acr - Authentication Context Class Reference claim used only with older B2C policies. Fallback in case tfp is not present, but likely won\'t be present anyway.\r\n */\r\n const tenantId = tid || tfp || acr || "";\r\n return {\r\n tenantId: tenantId,\r\n localAccountId: oid || sub || "",\r\n name: name,\r\n isHomeTenant: tenantIdMatchesHomeTenant(tenantId, homeAccountId),\r\n };\r\n }\r\n else {\r\n return {\r\n tenantId,\r\n localAccountId,\r\n isHomeTenant: tenantIdMatchesHomeTenant(tenantId, homeAccountId),\r\n };\r\n }\r\n}\r\n/**\r\n * Replaces account info that varies by tenant profile sourced from the ID token claims passed in with the tenant-specific account info\r\n * @param baseAccountInfo\r\n * @param idTokenClaims\r\n * @returns\r\n */\r\nfunction updateAccountTenantProfileData(baseAccountInfo, tenantProfile, idTokenClaims, idTokenSecret) {\r\n let updatedAccountInfo = baseAccountInfo;\r\n // Tenant Profile overrides passed in account info\r\n if (tenantProfile) {\r\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\r\n const { isHomeTenant, ...tenantProfileOverride } = tenantProfile;\r\n updatedAccountInfo = { ...baseAccountInfo, ...tenantProfileOverride };\r\n }\r\n // ID token claims override passed in account info and tenant profile\r\n if (idTokenClaims) {\r\n // Ignore isHomeTenant, loginHint, and sid which are part of tenant profile but not base account info\r\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\r\n const { isHomeTenant, ...claimsSourcedTenantProfile } = buildTenantProfile(baseAccountInfo.homeAccountId, baseAccountInfo.localAccountId, baseAccountInfo.tenantId, idTokenClaims);\r\n updatedAccountInfo = {\r\n ...updatedAccountInfo,\r\n ...claimsSourcedTenantProfile,\r\n idTokenClaims: idTokenClaims,\r\n idToken: idTokenSecret,\r\n };\r\n return updatedAccountInfo;\r\n }\r\n return updatedAccountInfo;\r\n}\n\n\n//# sourceMappingURL=AccountInfo.mjs.map\n\n;// ./node_modules/@azure/msal-common/dist/authority/AuthorityType.mjs\n/*! @azure/msal-common v14.16.0 2024-11-05 */\n\n/*\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License.\r\n */\r\n/**\r\n * Authority types supported by MSAL.\r\n */\r\nconst AuthorityType = {\r\n Default: 0,\r\n Adfs: 1,\r\n Dsts: 2,\r\n Ciam: 3,\r\n};\n\n\n//# sourceMappingURL=AuthorityType.mjs.map\n\n;// ./node_modules/@azure/msal-common/dist/account/TokenClaims.mjs\n/*! @azure/msal-common v14.16.0 2024-11-05 */\n\n/*\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License.\r\n */\r\n/**\r\n * Gets tenantId from available ID token claims to set as credential realm with the following precedence:\r\n * 1. tid - if the token is acquired from an Azure AD tenant tid will be present\r\n * 2. tfp - if the token is acquired from a modern B2C tenant tfp should be present\r\n * 3. acr - if the token is acquired from a legacy B2C tenant acr should be present\r\n * Downcased to match the realm case-insensitive comparison requirements\r\n * @param idTokenClaims\r\n * @returns\r\n */\r\nfunction getTenantIdFromIdTokenClaims(idTokenClaims) {\r\n if (idTokenClaims) {\r\n const tenantId = idTokenClaims.tid || idTokenClaims.tfp || idTokenClaims.acr;\r\n return tenantId || null;\r\n }\r\n return null;\r\n}\n\n\n//# sourceMappingURL=TokenClaims.mjs.map\n\n;// ./node_modules/@azure/msal-common/dist/cache/entities/AccountEntity.mjs\n/*! @azure/msal-common v14.16.0 2024-11-05 */\n\n\n\n\n\n\n\n\n\n\n/*\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License.\r\n */\r\n/**\r\n * Type that defines required and optional parameters for an Account field (based on universal cache schema implemented by all MSALs).\r\n *\r\n * Key : Value Schema\r\n *\r\n * Key: --\r\n *\r\n * Value Schema:\r\n * {\r\n * homeAccountId: home account identifier for the auth scheme,\r\n * environment: entity that issued the token, represented as a full host\r\n * realm: Full tenant or organizational identifier that the account belongs to\r\n * localAccountId: Original tenant-specific accountID, usually used for legacy cases\r\n * username: primary username that represents the user, usually corresponds to preferred_username in the v2 endpt\r\n * authorityType: Accounts authority type as a string\r\n * name: Full name for the account, including given name and family name,\r\n * lastModificationTime: last time this entity was modified in the cache\r\n * lastModificationApp:\r\n * nativeAccountId: Account identifier on the native device\r\n * tenantProfiles: Array of tenant profile objects for each tenant that the account has authenticated with in the browser\r\n * }\r\n * @internal\r\n */\r\nclass AccountEntity {\r\n /**\r\n * Generate Account Id key component as per the schema: -\r\n */\r\n generateAccountId() {\r\n const accountId = [this.homeAccountId, this.environment];\r\n return accountId.join(Separators.CACHE_KEY_SEPARATOR).toLowerCase();\r\n }\r\n /**\r\n * Generate Account Cache Key as per the schema: --\r\n */\r\n generateAccountKey() {\r\n return AccountEntity.generateAccountCacheKey({\r\n homeAccountId: this.homeAccountId,\r\n environment: this.environment,\r\n tenantId: this.realm,\r\n username: this.username,\r\n localAccountId: this.localAccountId,\r\n });\r\n }\r\n /**\r\n * Returns the AccountInfo interface for this account.\r\n */\r\n getAccountInfo() {\r\n return {\r\n homeAccountId: this.homeAccountId,\r\n environment: this.environment,\r\n tenantId: this.realm,\r\n username: this.username,\r\n localAccountId: this.localAccountId,\r\n name: this.name,\r\n nativeAccountId: this.nativeAccountId,\r\n authorityType: this.authorityType,\r\n // Deserialize tenant profiles array into a Map\r\n tenantProfiles: new Map((this.tenantProfiles || []).map((tenantProfile) => {\r\n return [tenantProfile.tenantId, tenantProfile];\r\n })),\r\n };\r\n }\r\n /**\r\n * Returns true if the account entity is in single tenant format (outdated), false otherwise\r\n */\r\n isSingleTenant() {\r\n return !this.tenantProfiles;\r\n }\r\n /**\r\n * Generates account key from interface\r\n * @param accountInterface\r\n */\r\n static generateAccountCacheKey(accountInterface) {\r\n const homeTenantId = accountInterface.homeAccountId.split(".")[1];\r\n const accountKey = [\r\n accountInterface.homeAccountId,\r\n accountInterface.environment || "",\r\n homeTenantId || accountInterface.tenantId || "",\r\n ];\r\n return accountKey.join(Separators.CACHE_KEY_SEPARATOR).toLowerCase();\r\n }\r\n /**\r\n * Build Account cache from IdToken, clientInfo and authority/policy. Associated with AAD.\r\n * @param accountDetails\r\n */\r\n static createAccount(accountDetails, authority, base64Decode) {\r\n const account = new AccountEntity();\r\n if (authority.authorityType === AuthorityType.Adfs) {\r\n account.authorityType = CacheAccountType.ADFS_ACCOUNT_TYPE;\r\n }\r\n else if (authority.protocolMode === ProtocolMode.AAD) {\r\n account.authorityType = CacheAccountType.MSSTS_ACCOUNT_TYPE;\r\n }\r\n else {\r\n account.authorityType = CacheAccountType.GENERIC_ACCOUNT_TYPE;\r\n }\r\n let clientInfo;\r\n if (accountDetails.clientInfo && base64Decode) {\r\n clientInfo = buildClientInfo(accountDetails.clientInfo, base64Decode);\r\n }\r\n account.clientInfo = accountDetails.clientInfo;\r\n account.homeAccountId = accountDetails.homeAccountId;\r\n account.nativeAccountId = accountDetails.nativeAccountId;\r\n const env = accountDetails.environment ||\r\n (authority && authority.getPreferredCache());\r\n if (!env) {\r\n throw createClientAuthError(invalidCacheEnvironment);\r\n }\r\n account.environment = env;\r\n // non AAD scenarios can have empty realm\r\n account.realm =\r\n clientInfo?.utid ||\r\n getTenantIdFromIdTokenClaims(accountDetails.idTokenClaims) ||\r\n "";\r\n // How do you account for MSA CID here?\r\n account.localAccountId =\r\n clientInfo?.uid ||\r\n accountDetails.idTokenClaims?.oid ||\r\n accountDetails.idTokenClaims?.sub ||\r\n "";\r\n /*\r\n * In B2C scenarios the emails claim is used instead of preferred_username and it is an array.\r\n * In most cases it will contain a single email. This field should not be relied upon if a custom\r\n * policy is configured to return more than 1 email.\r\n */\r\n const preferredUsername = accountDetails.idTokenClaims?.preferred_username ||\r\n accountDetails.idTokenClaims?.upn;\r\n const email = accountDetails.idTokenClaims?.emails\r\n ? accountDetails.idTokenClaims.emails[0]\r\n : null;\r\n account.username = preferredUsername || email || "";\r\n account.name = accountDetails.idTokenClaims?.name || "";\r\n account.cloudGraphHostName = accountDetails.cloudGraphHostName;\r\n account.msGraphHost = accountDetails.msGraphHost;\r\n if (accountDetails.tenantProfiles) {\r\n account.tenantProfiles = accountDetails.tenantProfiles;\r\n }\r\n else {\r\n const tenantProfile = buildTenantProfile(accountDetails.homeAccountId, account.localAccountId, account.realm, accountDetails.idTokenClaims);\r\n account.tenantProfiles = [tenantProfile];\r\n }\r\n return account;\r\n }\r\n /**\r\n * Creates an AccountEntity object from AccountInfo\r\n * @param accountInfo\r\n * @param cloudGraphHostName\r\n * @param msGraphHost\r\n * @returns\r\n */\r\n static createFromAccountInfo(accountInfo, cloudGraphHostName, msGraphHost) {\r\n const account = new AccountEntity();\r\n account.authorityType =\r\n accountInfo.authorityType || CacheAccountType.GENERIC_ACCOUNT_TYPE;\r\n account.homeAccountId = accountInfo.homeAccountId;\r\n account.localAccountId = accountInfo.localAccountId;\r\n account.nativeAccountId = accountInfo.nativeAccountId;\r\n account.realm = accountInfo.tenantId;\r\n account.environment = accountInfo.environment;\r\n account.username = accountInfo.username;\r\n account.name = accountInfo.name;\r\n account.cloudGraphHostName = cloudGraphHostName;\r\n account.msGraphHost = msGraphHost;\r\n // Serialize tenant profiles map into an array\r\n account.tenantProfiles = Array.from(accountInfo.tenantProfiles?.values() || []);\r\n return account;\r\n }\r\n /**\r\n * Generate HomeAccountId from server response\r\n * @param serverClientInfo\r\n * @param authType\r\n */\r\n static generateHomeAccountId(serverClientInfo, authType, logger, cryptoObj, idTokenClaims) {\r\n // since ADFS/DSTS do not have tid and does not set client_info\r\n if (!(authType === AuthorityType.Adfs ||\r\n authType === AuthorityType.Dsts)) {\r\n // for cases where there is clientInfo\r\n if (serverClientInfo) {\r\n try {\r\n const clientInfo = buildClientInfo(serverClientInfo, cryptoObj.base64Decode);\r\n if (clientInfo.uid && clientInfo.utid) {\r\n return `${clientInfo.uid}.${clientInfo.utid}`;\r\n }\r\n }\r\n catch (e) { }\r\n }\r\n logger.warning("No client info in response");\r\n }\r\n // default to "sub" claim\r\n return idTokenClaims?.sub || "";\r\n }\r\n /**\r\n * Validates an entity: checks for all expected params\r\n * @param entity\r\n */\r\n static isAccountEntity(entity) {\r\n if (!entity) {\r\n return false;\r\n }\r\n return (entity.hasOwnProperty("homeAccountId") &&\r\n entity.hasOwnProperty("environment") &&\r\n entity.hasOwnProperty("realm") &&\r\n entity.hasOwnProperty("localAccountId") &&\r\n entity.hasOwnProperty("username") &&\r\n entity.hasOwnProperty("authorityType"));\r\n }\r\n /**\r\n * Helper function to determine whether 2 accountInfo objects represent the same account\r\n * @param accountA\r\n * @param accountB\r\n * @param compareClaims - If set to true idTokenClaims will also be compared to determine account equality\r\n */\r\n static accountInfoIsEqual(accountA, accountB, compareClaims) {\r\n if (!accountA || !accountB) {\r\n return false;\r\n }\r\n let claimsMatch = true; // default to true so as to not fail comparison below if compareClaims: false\r\n if (compareClaims) {\r\n const accountAClaims = (accountA.idTokenClaims ||\r\n {});\r\n const accountBClaims = (accountB.idTokenClaims ||\r\n {});\r\n // issued at timestamp and nonce are expected to change each time a new id token is acquired\r\n claimsMatch =\r\n accountAClaims.iat === accountBClaims.iat &&\r\n accountAClaims.nonce === accountBClaims.nonce;\r\n }\r\n return (accountA.homeAccountId === accountB.homeAccountId &&\r\n accountA.localAccountId === accountB.localAccountId &&\r\n accountA.username === accountB.username &&\r\n accountA.tenantId === accountB.tenantId &&\r\n accountA.environment === accountB.environment &&\r\n accountA.nativeAccountId === accountB.nativeAccountId &&\r\n claimsMatch);\r\n }\r\n}\n\n\n//# sourceMappingURL=AccountEntity.mjs.map\n\n;// ./node_modules/@azure/msal-common/dist/authority/AuthorityMetadata.mjs\n/*! @azure/msal-common v14.16.0 2024-11-05 */\n\n\n\n\n/*\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License.\r\n */\r\nconst rawMetdataJSON = {\r\n endpointMetadata: {\r\n "login.microsoftonline.com": {\r\n token_endpoint: "https://login.microsoftonline.com/{tenantid}/oauth2/v2.0/token",\r\n jwks_uri: "https://login.microsoftonline.com/{tenantid}/discovery/v2.0/keys",\r\n issuer: "https://login.microsoftonline.com/{tenantid}/v2.0",\r\n authorization_endpoint: "https://login.microsoftonline.com/{tenantid}/oauth2/v2.0/authorize",\r\n end_session_endpoint: "https://login.microsoftonline.com/{tenantid}/oauth2/v2.0/logout",\r\n },\r\n "login.chinacloudapi.cn": {\r\n token_endpoint: "https://login.chinacloudapi.cn/{tenantid}/oauth2/v2.0/token",\r\n jwks_uri: "https://login.chinacloudapi.cn/{tenantid}/discovery/v2.0/keys",\r\n issuer: "https://login.partner.microsoftonline.cn/{tenantid}/v2.0",\r\n authorization_endpoint: "https://login.chinacloudapi.cn/{tenantid}/oauth2/v2.0/authorize",\r\n end_session_endpoint: "https://login.chinacloudapi.cn/{tenantid}/oauth2/v2.0/logout",\r\n },\r\n "login.microsoftonline.us": {\r\n token_endpoint: "https://login.microsoftonline.us/{tenantid}/oauth2/v2.0/token",\r\n jwks_uri: "https://login.microsoftonline.us/{tenantid}/discovery/v2.0/keys",\r\n issuer: "https://login.microsoftonline.us/{tenantid}/v2.0",\r\n authorization_endpoint: "https://login.microsoftonline.us/{tenantid}/oauth2/v2.0/authorize",\r\n end_session_endpoint: "https://login.microsoftonline.us/{tenantid}/oauth2/v2.0/logout",\r\n },\r\n },\r\n instanceDiscoveryMetadata: {\r\n tenant_discovery_endpoint: "https://{canonicalAuthority}/v2.0/.well-known/openid-configuration",\r\n metadata: [\r\n {\r\n preferred_network: "login.microsoftonline.com",\r\n preferred_cache: "login.windows.net",\r\n aliases: [\r\n "login.microsoftonline.com",\r\n "login.windows.net",\r\n "login.microsoft.com",\r\n "sts.windows.net",\r\n ],\r\n },\r\n {\r\n preferred_network: "login.partner.microsoftonline.cn",\r\n preferred_cache: "login.partner.microsoftonline.cn",\r\n aliases: [\r\n "login.partner.microsoftonline.cn",\r\n "login.chinacloudapi.cn",\r\n ],\r\n },\r\n {\r\n preferred_network: "login.microsoftonline.de",\r\n preferred_cache: "login.microsoftonline.de",\r\n aliases: ["login.microsoftonline.de"],\r\n },\r\n {\r\n preferred_network: "login.microsoftonline.us",\r\n preferred_cache: "login.microsoftonline.us",\r\n aliases: [\r\n "login.microsoftonline.us",\r\n "login.usgovcloudapi.net",\r\n ],\r\n },\r\n {\r\n preferred_network: "login-us.microsoftonline.com",\r\n preferred_cache: "login-us.microsoftonline.com",\r\n aliases: ["login-us.microsoftonline.com"],\r\n },\r\n ],\r\n },\r\n};\r\nconst EndpointMetadata = rawMetdataJSON.endpointMetadata;\r\nconst InstanceDiscoveryMetadata = rawMetdataJSON.instanceDiscoveryMetadata;\r\nconst InstanceDiscoveryMetadataAliases = new Set();\r\nInstanceDiscoveryMetadata.metadata.forEach((metadataEntry) => {\r\n metadataEntry.aliases.forEach((alias) => {\r\n InstanceDiscoveryMetadataAliases.add(alias);\r\n });\r\n});\r\n/**\r\n * Attempts to get an aliases array from the static authority metadata sources based on the canonical authority host\r\n * @param staticAuthorityOptions\r\n * @param logger\r\n * @returns\r\n */\r\nfunction getAliasesFromStaticSources(staticAuthorityOptions, logger) {\r\n let staticAliases;\r\n const canonicalAuthority = staticAuthorityOptions.canonicalAuthority;\r\n if (canonicalAuthority) {\r\n const authorityHost = new UrlString(canonicalAuthority).getUrlComponents().HostNameAndPort;\r\n staticAliases =\r\n getAliasesFromMetadata(authorityHost, staticAuthorityOptions.cloudDiscoveryMetadata?.metadata, AuthorityMetadataSource.CONFIG, logger) ||\r\n getAliasesFromMetadata(authorityHost, InstanceDiscoveryMetadata.metadata, AuthorityMetadataSource.HARDCODED_VALUES, logger) ||\r\n staticAuthorityOptions.knownAuthorities;\r\n }\r\n return staticAliases || [];\r\n}\r\n/**\r\n * Returns aliases for from the raw cloud discovery metadata passed in\r\n * @param authorityHost\r\n * @param rawCloudDiscoveryMetadata\r\n * @returns\r\n */\r\nfunction getAliasesFromMetadata(authorityHost, cloudDiscoveryMetadata, source, logger) {\r\n logger?.trace(`getAliasesFromMetadata called with source: ${source}`);\r\n if (authorityHost && cloudDiscoveryMetadata) {\r\n const metadata = getCloudDiscoveryMetadataFromNetworkResponse(cloudDiscoveryMetadata, authorityHost);\r\n if (metadata) {\r\n logger?.trace(`getAliasesFromMetadata: found cloud discovery metadata in ${source}, returning aliases`);\r\n return metadata.aliases;\r\n }\r\n else {\r\n logger?.trace(`getAliasesFromMetadata: did not find cloud discovery metadata in ${source}`);\r\n }\r\n }\r\n return null;\r\n}\r\n/**\r\n * Get cloud discovery metadata for common authorities\r\n */\r\nfunction getCloudDiscoveryMetadataFromHardcodedValues(authorityHost) {\r\n const metadata = getCloudDiscoveryMetadataFromNetworkResponse(InstanceDiscoveryMetadata.metadata, authorityHost);\r\n return metadata;\r\n}\r\n/**\r\n * Searches instance discovery network response for the entry that contains the host in the aliases list\r\n * @param response\r\n * @param authority\r\n */\r\nfunction getCloudDiscoveryMetadataFromNetworkResponse(response, authorityHost) {\r\n for (let i = 0; i < response.length; i++) {\r\n const metadata = response[i];\r\n if (metadata.aliases.includes(authorityHost)) {\r\n return metadata;\r\n }\r\n }\r\n return null;\r\n}\n\n\n//# sourceMappingURL=AuthorityMetadata.mjs.map\n\n;// ./node_modules/@azure/msal-common/dist/error/CacheErrorCodes.mjs\n/*! @azure/msal-common v14.16.0 2024-11-05 */\n\n/*\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License.\r\n */\r\nconst cacheQuotaExceededErrorCode = "cache_quota_exceeded";\r\nconst cacheUnknownErrorCode = "cache_error_unknown";\n\n\n//# sourceMappingURL=CacheErrorCodes.mjs.map\n\n;// ./node_modules/@azure/msal-common/dist/error/CacheError.mjs\n/*! @azure/msal-common v14.16.0 2024-11-05 */\n\n\n\n\n\n/*\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License.\r\n */\r\nconst CacheErrorMessages = {\r\n [cacheQuotaExceededErrorCode]: "Exceeded cache storage capacity.",\r\n [cacheUnknownErrorCode]: "Unexpected error occurred when using cache storage.",\r\n};\r\n/**\r\n * Error thrown when there is an error with the cache\r\n */\r\nclass CacheError extends Error {\r\n constructor(errorCode, errorMessage) {\r\n const message = errorMessage ||\r\n (CacheErrorMessages[errorCode]\r\n ? CacheErrorMessages[errorCode]\r\n : CacheErrorMessages[cacheUnknownErrorCode]);\r\n super(`${errorCode}: ${message}`);\r\n Object.setPrototypeOf(this, CacheError.prototype);\r\n this.name = "CacheError";\r\n this.errorCode = errorCode;\r\n this.errorMessage = message;\r\n }\r\n}\n\n\n//# sourceMappingURL=CacheError.mjs.map\n\n;// ./node_modules/@azure/msal-common/dist/cache/CacheManager.mjs\n/*! @azure/msal-common v14.16.0 2024-11-05 */\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n/*\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License.\r\n */\r\n/**\r\n * Interface class which implement cache storage functions used by MSAL to perform validity checks, and store tokens.\r\n * @internal\r\n */\r\nclass CacheManager {\r\n constructor(clientId, cryptoImpl, logger, staticAuthorityOptions) {\r\n this.clientId = clientId;\r\n this.cryptoImpl = cryptoImpl;\r\n this.commonLogger = logger.clone(packageMetadata_name, version);\r\n this.staticAuthorityOptions = staticAuthorityOptions;\r\n }\r\n /**\r\n * Returns all the accounts in the cache that match the optional filter. If no filter is provided, all accounts are returned.\r\n * @param accountFilter - (Optional) filter to narrow down the accounts returned\r\n * @returns Array of AccountInfo objects in cache\r\n */\r\n getAllAccounts(accountFilter) {\r\n return this.buildTenantProfiles(this.getAccountsFilteredBy(accountFilter || {}), accountFilter);\r\n }\r\n /**\r\n * Gets first tenanted AccountInfo object found based on provided filters\r\n */\r\n getAccountInfoFilteredBy(accountFilter) {\r\n const allAccounts = this.getAllAccounts(accountFilter);\r\n if (allAccounts.length > 1) {\r\n // If one or more accounts are found, prioritize accounts that have an ID token\r\n const sortedAccounts = allAccounts.sort((account) => {\r\n return account.idTokenClaims ? -1 : 1;\r\n });\r\n return sortedAccounts[0];\r\n }\r\n else if (allAccounts.length === 1) {\r\n // If only one account is found, return it regardless of whether a matching ID token was found\r\n return allAccounts[0];\r\n }\r\n else {\r\n return null;\r\n }\r\n }\r\n /**\r\n * Returns a single matching\r\n * @param accountFilter\r\n * @returns\r\n */\r\n getBaseAccountInfo(accountFilter) {\r\n const accountEntities = this.getAccountsFilteredBy(accountFilter);\r\n if (accountEntities.length > 0) {\r\n return accountEntities[0].getAccountInfo();\r\n }\r\n else {\r\n return null;\r\n }\r\n }\r\n /**\r\n * Matches filtered account entities with cached ID tokens that match the tenant profile-specific account filters\r\n * and builds the account info objects from the matching ID token\'s claims\r\n * @param cachedAccounts\r\n * @param accountFilter\r\n * @returns Array of AccountInfo objects that match account and tenant profile filters\r\n */\r\n buildTenantProfiles(cachedAccounts, accountFilter) {\r\n return cachedAccounts.flatMap((accountEntity) => {\r\n return this.getTenantProfilesFromAccountEntity(accountEntity, accountFilter?.tenantId, accountFilter);\r\n });\r\n }\r\n getTenantedAccountInfoByFilter(accountInfo, tokenKeys, tenantProfile, tenantProfileFilter) {\r\n let tenantedAccountInfo = null;\r\n let idTokenClaims;\r\n if (tenantProfileFilter) {\r\n if (!this.tenantProfileMatchesFilter(tenantProfile, tenantProfileFilter)) {\r\n return null;\r\n }\r\n }\r\n const idToken = this.getIdToken(accountInfo, tokenKeys, tenantProfile.tenantId);\r\n if (idToken) {\r\n idTokenClaims = extractTokenClaims(idToken.secret, this.cryptoImpl.base64Decode);\r\n if (!this.idTokenClaimsMatchTenantProfileFilter(idTokenClaims, tenantProfileFilter)) {\r\n // ID token sourced claims don\'t match so this tenant profile is not a match\r\n return null;\r\n }\r\n }\r\n // Expand tenant profile into account info based on matching tenant profile and if available matching ID token claims\r\n tenantedAccountInfo = updateAccountTenantProfileData(accountInfo, tenantProfile, idTokenClaims, idToken?.secret);\r\n return tenantedAccountInfo;\r\n }\r\n getTenantProfilesFromAccountEntity(accountEntity, targetTenantId, tenantProfileFilter) {\r\n const accountInfo = accountEntity.getAccountInfo();\r\n let searchTenantProfiles = accountInfo.tenantProfiles || new Map();\r\n const tokenKeys = this.getTokenKeys();\r\n // If a tenant ID was provided, only return the tenant profile for that tenant ID if it exists\r\n if (targetTenantId) {\r\n const tenantProfile = searchTenantProfiles.get(targetTenantId);\r\n if (tenantProfile) {\r\n // Reduce search field to just this tenant profile\r\n searchTenantProfiles = new Map([\r\n [targetTenantId, tenantProfile],\r\n ]);\r\n }\r\n else {\r\n // No tenant profile for search tenant ID, return empty array\r\n return [];\r\n }\r\n }\r\n const matchingTenantProfiles = [];\r\n searchTenantProfiles.forEach((tenantProfile) => {\r\n const tenantedAccountInfo = this.getTenantedAccountInfoByFilter(accountInfo, tokenKeys, tenantProfile, tenantProfileFilter);\r\n if (tenantedAccountInfo) {\r\n matchingTenantProfiles.push(tenantedAccountInfo);\r\n }\r\n });\r\n return matchingTenantProfiles;\r\n }\r\n tenantProfileMatchesFilter(tenantProfile, tenantProfileFilter) {\r\n if (!!tenantProfileFilter.localAccountId &&\r\n !this.matchLocalAccountIdFromTenantProfile(tenantProfile, tenantProfileFilter.localAccountId)) {\r\n return false;\r\n }\r\n if (!!tenantProfileFilter.name &&\r\n !(tenantProfile.name === tenantProfileFilter.name)) {\r\n return false;\r\n }\r\n if (tenantProfileFilter.isHomeTenant !== undefined &&\r\n !(tenantProfile.isHomeTenant === tenantProfileFilter.isHomeTenant)) {\r\n return false;\r\n }\r\n return true;\r\n }\r\n idTokenClaimsMatchTenantProfileFilter(idTokenClaims, tenantProfileFilter) {\r\n // Tenant Profile filtering\r\n if (tenantProfileFilter) {\r\n if (!!tenantProfileFilter.localAccountId &&\r\n !this.matchLocalAccountIdFromTokenClaims(idTokenClaims, tenantProfileFilter.localAccountId)) {\r\n return false;\r\n }\r\n if (!!tenantProfileFilter.loginHint &&\r\n !this.matchLoginHintFromTokenClaims(idTokenClaims, tenantProfileFilter.loginHint)) {\r\n return false;\r\n }\r\n if (!!tenantProfileFilter.username &&\r\n !this.matchUsername(idTokenClaims.preferred_username, tenantProfileFilter.username)) {\r\n return false;\r\n }\r\n if (!!tenantProfileFilter.name &&\r\n !this.matchName(idTokenClaims, tenantProfileFilter.name)) {\r\n return false;\r\n }\r\n if (!!tenantProfileFilter.sid &&\r\n !this.matchSid(idTokenClaims, tenantProfileFilter.sid)) {\r\n return false;\r\n }\r\n }\r\n return true;\r\n }\r\n /**\r\n * saves a cache record\r\n * @param cacheRecord {CacheRecord}\r\n * @param storeInCache {?StoreInCache}\r\n * @param correlationId {?string} correlation id\r\n */\r\n async saveCacheRecord(cacheRecord, storeInCache, correlationId) {\r\n if (!cacheRecord) {\r\n throw createClientAuthError(invalidCacheRecord);\r\n }\r\n try {\r\n if (!!cacheRecord.account) {\r\n this.setAccount(cacheRecord.account);\r\n }\r\n if (!!cacheRecord.idToken && storeInCache?.idToken !== false) {\r\n this.setIdTokenCredential(cacheRecord.idToken);\r\n }\r\n if (!!cacheRecord.accessToken &&\r\n storeInCache?.accessToken !== false) {\r\n await this.saveAccessToken(cacheRecord.accessToken);\r\n }\r\n if (!!cacheRecord.refreshToken &&\r\n storeInCache?.refreshToken !== false) {\r\n this.setRefreshTokenCredential(cacheRecord.refreshToken);\r\n }\r\n if (!!cacheRecord.appMetadata) {\r\n this.setAppMetadata(cacheRecord.appMetadata);\r\n }\r\n }\r\n catch (e) {\r\n this.commonLogger?.error(`CacheManager.saveCacheRecord: failed`);\r\n if (e instanceof Error) {\r\n this.commonLogger?.errorPii(`CacheManager.saveCacheRecord: ${e.message}`, correlationId);\r\n if (e.name === "QuotaExceededError" ||\r\n e.name === "NS_ERROR_DOM_QUOTA_REACHED" ||\r\n e.message.includes("exceeded the quota")) {\r\n this.commonLogger?.error(`CacheManager.saveCacheRecord: exceeded storage quota`, correlationId);\r\n throw new CacheError(cacheQuotaExceededErrorCode);\r\n }\r\n else {\r\n throw new CacheError(e.name, e.message);\r\n }\r\n }\r\n else {\r\n this.commonLogger?.errorPii(`CacheManager.saveCacheRecord: ${e}`, correlationId);\r\n throw new CacheError(cacheUnknownErrorCode);\r\n }\r\n }\r\n }\r\n /**\r\n * saves access token credential\r\n * @param credential\r\n */\r\n async saveAccessToken(credential) {\r\n const accessTokenFilter = {\r\n clientId: credential.clientId,\r\n credentialType: credential.credentialType,\r\n environment: credential.environment,\r\n homeAccountId: credential.homeAccountId,\r\n realm: credential.realm,\r\n tokenType: credential.tokenType,\r\n requestedClaimsHash: credential.requestedClaimsHash,\r\n };\r\n const tokenKeys = this.getTokenKeys();\r\n const currentScopes = ScopeSet.fromString(credential.target);\r\n const removedAccessTokens = [];\r\n tokenKeys.accessToken.forEach((key) => {\r\n if (!this.accessTokenKeyMatchesFilter(key, accessTokenFilter, false)) {\r\n return;\r\n }\r\n const tokenEntity = this.getAccessTokenCredential(key);\r\n if (tokenEntity &&\r\n this.credentialMatchesFilter(tokenEntity, accessTokenFilter)) {\r\n const tokenScopeSet = ScopeSet.fromString(tokenEntity.target);\r\n if (tokenScopeSet.intersectingScopeSets(currentScopes)) {\r\n removedAccessTokens.push(this.removeAccessToken(key));\r\n }\r\n }\r\n });\r\n await Promise.all(removedAccessTokens);\r\n this.setAccessTokenCredential(credential);\r\n }\r\n /**\r\n * Retrieve account entities matching all provided tenant-agnostic filters; if no filter is set, get all account entities in the cache\r\n * Not checking for casing as keys are all generated in lower case, remember to convert to lower case if object properties are compared\r\n * @param accountFilter - An object containing Account properties to filter by\r\n */\r\n getAccountsFilteredBy(accountFilter) {\r\n const allAccountKeys = this.getAccountKeys();\r\n const matchingAccounts = [];\r\n allAccountKeys.forEach((cacheKey) => {\r\n if (!this.isAccountKey(cacheKey, accountFilter.homeAccountId)) {\r\n // Don\'t parse value if the key doesn\'t match the account filters\r\n return;\r\n }\r\n const entity = this.getAccount(cacheKey, this.commonLogger);\r\n // Match base account fields\r\n if (!entity) {\r\n return;\r\n }\r\n if (!!accountFilter.homeAccountId &&\r\n !this.matchHomeAccountId(entity, accountFilter.homeAccountId)) {\r\n return;\r\n }\r\n if (!!accountFilter.username &&\r\n !this.matchUsername(entity.username, accountFilter.username)) {\r\n return;\r\n }\r\n if (!!accountFilter.environment &&\r\n !this.matchEnvironment(entity, accountFilter.environment)) {\r\n return;\r\n }\r\n if (!!accountFilter.realm &&\r\n !this.matchRealm(entity, accountFilter.realm)) {\r\n return;\r\n }\r\n if (!!accountFilter.nativeAccountId &&\r\n !this.matchNativeAccountId(entity, accountFilter.nativeAccountId)) {\r\n return;\r\n }\r\n if (!!accountFilter.authorityType &&\r\n !this.matchAuthorityType(entity, accountFilter.authorityType)) {\r\n return;\r\n }\r\n // If at least one tenant profile matches the tenant profile filter, add the account to the list of matching accounts\r\n const tenantProfileFilter = {\r\n localAccountId: accountFilter?.localAccountId,\r\n name: accountFilter?.name,\r\n };\r\n const matchingTenantProfiles = entity.tenantProfiles?.filter((tenantProfile) => {\r\n return this.tenantProfileMatchesFilter(tenantProfile, tenantProfileFilter);\r\n });\r\n if (matchingTenantProfiles && matchingTenantProfiles.length === 0) {\r\n // No tenant profile for this account matches filter, don\'t add to list of matching accounts\r\n return;\r\n }\r\n matchingAccounts.push(entity);\r\n });\r\n return matchingAccounts;\r\n }\r\n /**\r\n * Returns true if the given key matches our account key schema. Also matches homeAccountId and/or tenantId if provided\r\n * @param key\r\n * @param homeAccountId\r\n * @param tenantId\r\n * @returns\r\n */\r\n isAccountKey(key, homeAccountId, tenantId) {\r\n if (key.split(Separators.CACHE_KEY_SEPARATOR).length < 3) {\r\n // Account cache keys contain 3 items separated by \'-\' (each item may also contain \'-\')\r\n return false;\r\n }\r\n if (homeAccountId &&\r\n !key.toLowerCase().includes(homeAccountId.toLowerCase())) {\r\n return false;\r\n }\r\n if (tenantId && !key.toLowerCase().includes(tenantId.toLowerCase())) {\r\n return false;\r\n }\r\n // Do not check environment as aliasing can cause false negatives\r\n return true;\r\n }\r\n /**\r\n * Returns true if the given key matches our credential key schema.\r\n * @param key\r\n */\r\n isCredentialKey(key) {\r\n if (key.split(Separators.CACHE_KEY_SEPARATOR).length < 6) {\r\n // Credential cache keys contain 6 items separated by \'-\' (each item may also contain \'-\')\r\n return false;\r\n }\r\n const lowerCaseKey = key.toLowerCase();\r\n // Credential keys must indicate what credential type they represent\r\n if (lowerCaseKey.indexOf(CredentialType.ID_TOKEN.toLowerCase()) ===\r\n -1 &&\r\n lowerCaseKey.indexOf(CredentialType.ACCESS_TOKEN.toLowerCase()) ===\r\n -1 &&\r\n lowerCaseKey.indexOf(CredentialType.ACCESS_TOKEN_WITH_AUTH_SCHEME.toLowerCase()) === -1 &&\r\n lowerCaseKey.indexOf(CredentialType.REFRESH_TOKEN.toLowerCase()) ===\r\n -1) {\r\n return false;\r\n }\r\n if (lowerCaseKey.indexOf(CredentialType.REFRESH_TOKEN.toLowerCase()) >\r\n -1) {\r\n // Refresh tokens must contain the client id or family id\r\n const clientIdValidation = `${CredentialType.REFRESH_TOKEN}${Separators.CACHE_KEY_SEPARATOR}${this.clientId}${Separators.CACHE_KEY_SEPARATOR}`;\r\n const familyIdValidation = `${CredentialType.REFRESH_TOKEN}${Separators.CACHE_KEY_SEPARATOR}${THE_FAMILY_ID}${Separators.CACHE_KEY_SEPARATOR}`;\r\n if (lowerCaseKey.indexOf(clientIdValidation.toLowerCase()) === -1 &&\r\n lowerCaseKey.indexOf(familyIdValidation.toLowerCase()) === -1) {\r\n return false;\r\n }\r\n }\r\n else if (lowerCaseKey.indexOf(this.clientId.toLowerCase()) === -1) {\r\n // Tokens must contain the clientId\r\n return false;\r\n }\r\n return true;\r\n }\r\n /**\r\n * Returns whether or not the given credential entity matches the filter\r\n * @param entity\r\n * @param filter\r\n * @returns\r\n */\r\n credentialMatchesFilter(entity, filter) {\r\n if (!!filter.clientId && !this.matchClientId(entity, filter.clientId)) {\r\n return false;\r\n }\r\n if (!!filter.userAssertionHash &&\r\n !this.matchUserAssertionHash(entity, filter.userAssertionHash)) {\r\n return false;\r\n }\r\n /*\r\n * homeAccountId can be undefined, and we want to filter out cached items that have a homeAccountId of ""\r\n * because we don\'t want a client_credential request to return a cached token that has a homeAccountId\r\n */\r\n if (typeof filter.homeAccountId === "string" &&\r\n !this.matchHomeAccountId(entity, filter.homeAccountId)) {\r\n return false;\r\n }\r\n if (!!filter.environment &&\r\n !this.matchEnvironment(entity, filter.environment)) {\r\n return false;\r\n }\r\n if (!!filter.realm && !this.matchRealm(entity, filter.realm)) {\r\n return false;\r\n }\r\n if (!!filter.credentialType &&\r\n !this.matchCredentialType(entity, filter.credentialType)) {\r\n return false;\r\n }\r\n if (!!filter.familyId && !this.matchFamilyId(entity, filter.familyId)) {\r\n return false;\r\n }\r\n /*\r\n * idTokens do not have "target", target specific refreshTokens do exist for some types of authentication\r\n * Resource specific refresh tokens case will be added when the support is deemed necessary\r\n */\r\n if (!!filter.target && !this.matchTarget(entity, filter.target)) {\r\n return false;\r\n }\r\n // If request OR cached entity has requested Claims Hash, check if they match\r\n if (filter.requestedClaimsHash || entity.requestedClaimsHash) {\r\n // Don\'t match if either is undefined or they are different\r\n if (entity.requestedClaimsHash !== filter.requestedClaimsHash) {\r\n return false;\r\n }\r\n }\r\n // Access Token with Auth Scheme specific matching\r\n if (entity.credentialType ===\r\n CredentialType.ACCESS_TOKEN_WITH_AUTH_SCHEME) {\r\n if (!!filter.tokenType &&\r\n !this.matchTokenType(entity, filter.tokenType)) {\r\n return false;\r\n }\r\n // KeyId (sshKid) in request must match cached SSH certificate keyId because SSH cert is bound to a specific key\r\n if (filter.tokenType === AuthenticationScheme.SSH) {\r\n if (filter.keyId && !this.matchKeyId(entity, filter.keyId)) {\r\n return false;\r\n }\r\n }\r\n }\r\n return true;\r\n }\r\n /**\r\n * retrieve appMetadata matching all provided filters; if no filter is set, get all appMetadata\r\n * @param filter\r\n */\r\n getAppMetadataFilteredBy(filter) {\r\n const allCacheKeys = this.getKeys();\r\n const matchingAppMetadata = {};\r\n allCacheKeys.forEach((cacheKey) => {\r\n // don\'t parse any non-appMetadata type cache entities\r\n if (!this.isAppMetadata(cacheKey)) {\r\n return;\r\n }\r\n // Attempt retrieval\r\n const entity = this.getAppMetadata(cacheKey);\r\n if (!entity) {\r\n return;\r\n }\r\n if (!!filter.environment &&\r\n !this.matchEnvironment(entity, filter.environment)) {\r\n return;\r\n }\r\n if (!!filter.clientId &&\r\n !this.matchClientId(entity, filter.clientId)) {\r\n return;\r\n }\r\n matchingAppMetadata[cacheKey] = entity;\r\n });\r\n return matchingAppMetadata;\r\n }\r\n /**\r\n * retrieve authorityMetadata that contains a matching alias\r\n * @param filter\r\n */\r\n getAuthorityMetadataByAlias(host) {\r\n const allCacheKeys = this.getAuthorityMetadataKeys();\r\n let matchedEntity = null;\r\n allCacheKeys.forEach((cacheKey) => {\r\n // don\'t parse any non-authorityMetadata type cache entities\r\n if (!this.isAuthorityMetadata(cacheKey) ||\r\n cacheKey.indexOf(this.clientId) === -1) {\r\n return;\r\n }\r\n // Attempt retrieval\r\n const entity = this.getAuthorityMetadata(cacheKey);\r\n if (!entity) {\r\n return;\r\n }\r\n if (entity.aliases.indexOf(host) === -1) {\r\n return;\r\n }\r\n matchedEntity = entity;\r\n });\r\n return matchedEntity;\r\n }\r\n /**\r\n * Removes all accounts and related tokens from cache.\r\n */\r\n async removeAllAccounts() {\r\n const allAccountKeys = this.getAccountKeys();\r\n const removedAccounts = [];\r\n allAccountKeys.forEach((cacheKey) => {\r\n removedAccounts.push(this.removeAccount(cacheKey));\r\n });\r\n await Promise.all(removedAccounts);\r\n }\r\n /**\r\n * Removes the account and related tokens for a given account key\r\n * @param account\r\n */\r\n async removeAccount(accountKey) {\r\n const account = this.getAccount(accountKey, this.commonLogger);\r\n if (!account) {\r\n return;\r\n }\r\n await this.removeAccountContext(account);\r\n this.removeItem(accountKey);\r\n }\r\n /**\r\n * Removes credentials associated with the provided account\r\n * @param account\r\n */\r\n async removeAccountContext(account) {\r\n const allTokenKeys = this.getTokenKeys();\r\n const accountId = account.generateAccountId();\r\n const removedCredentials = [];\r\n allTokenKeys.idToken.forEach((key) => {\r\n if (key.indexOf(accountId) === 0) {\r\n this.removeIdToken(key);\r\n }\r\n });\r\n allTokenKeys.accessToken.forEach((key) => {\r\n if (key.indexOf(accountId) === 0) {\r\n removedCredentials.push(this.removeAccessToken(key));\r\n }\r\n });\r\n allTokenKeys.refreshToken.forEach((key) => {\r\n if (key.indexOf(accountId) === 0) {\r\n this.removeRefreshToken(key);\r\n }\r\n });\r\n await Promise.all(removedCredentials);\r\n }\r\n /**\r\n * Migrates a single-tenant account and all it\'s associated alternate cross-tenant account objects in the\r\n * cache into a condensed multi-tenant account object with tenant profiles.\r\n * @param accountKey\r\n * @param accountEntity\r\n * @param logger\r\n * @returns\r\n */\r\n updateOutdatedCachedAccount(accountKey, accountEntity, logger) {\r\n // Only update if account entity is defined and has no tenantProfiles object (is outdated)\r\n if (accountEntity && accountEntity.isSingleTenant()) {\r\n this.commonLogger?.verbose("updateOutdatedCachedAccount: Found a single-tenant (outdated) account entity in the cache, migrating to multi-tenant account entity");\r\n // Get keys of all accounts belonging to user\r\n const matchingAccountKeys = this.getAccountKeys().filter((key) => {\r\n return key.startsWith(accountEntity.homeAccountId);\r\n });\r\n // Get all account entities belonging to user\r\n const accountsToMerge = [];\r\n matchingAccountKeys.forEach((key) => {\r\n const account = this.getCachedAccountEntity(key);\r\n if (account) {\r\n accountsToMerge.push(account);\r\n }\r\n });\r\n // Set base account to home account if available, any account if not\r\n const baseAccount = accountsToMerge.find((account) => {\r\n return tenantIdMatchesHomeTenant(account.realm, account.homeAccountId);\r\n }) || accountsToMerge[0];\r\n // Populate tenant profiles built from each account entity belonging to the user\r\n baseAccount.tenantProfiles = accountsToMerge.map((account) => {\r\n return {\r\n tenantId: account.realm,\r\n localAccountId: account.localAccountId,\r\n name: account.name,\r\n isHomeTenant: tenantIdMatchesHomeTenant(account.realm, account.homeAccountId),\r\n };\r\n });\r\n const updatedAccount = CacheManager.toObject(new AccountEntity(), {\r\n ...baseAccount,\r\n });\r\n const newAccountKey = updatedAccount.generateAccountKey();\r\n // Clear cache of legacy account objects that have been collpsed into tenant profiles\r\n matchingAccountKeys.forEach((key) => {\r\n if (key !== newAccountKey) {\r\n this.removeOutdatedAccount(accountKey);\r\n }\r\n });\r\n // Cache updated account object\r\n this.setAccount(updatedAccount);\r\n logger?.verbose("Updated an outdated account entity in the cache");\r\n return updatedAccount;\r\n }\r\n // No update is necessary\r\n return accountEntity;\r\n }\r\n /**\r\n * returns a boolean if the given credential is removed\r\n * @param credential\r\n */\r\n async removeAccessToken(key) {\r\n const credential = this.getAccessTokenCredential(key);\r\n if (!credential) {\r\n return;\r\n }\r\n // Remove Token Binding Key from key store for PoP Tokens Credentials\r\n if (credential.credentialType.toLowerCase() ===\r\n CredentialType.ACCESS_TOKEN_WITH_AUTH_SCHEME.toLowerCase()) {\r\n if (credential.tokenType === AuthenticationScheme.POP) {\r\n const accessTokenWithAuthSchemeEntity = credential;\r\n const kid = accessTokenWithAuthSchemeEntity.keyId;\r\n if (kid) {\r\n try {\r\n await this.cryptoImpl.removeTokenBindingKey(kid);\r\n }\r\n catch (error) {\r\n throw createClientAuthError(bindingKeyNotRemoved);\r\n }\r\n }\r\n }\r\n }\r\n return this.removeItem(key);\r\n }\r\n /**\r\n * Removes all app metadata objects from cache.\r\n */\r\n removeAppMetadata() {\r\n const allCacheKeys = this.getKeys();\r\n allCacheKeys.forEach((cacheKey) => {\r\n if (this.isAppMetadata(cacheKey)) {\r\n this.removeItem(cacheKey);\r\n }\r\n });\r\n return true;\r\n }\r\n /**\r\n * Retrieve AccountEntity from cache\r\n * @param account\r\n */\r\n readAccountFromCache(account) {\r\n const accountKey = AccountEntity.generateAccountCacheKey(account);\r\n return this.getAccount(accountKey, this.commonLogger);\r\n }\r\n /**\r\n * Retrieve IdTokenEntity from cache\r\n * @param account {AccountInfo}\r\n * @param tokenKeys {?TokenKeys}\r\n * @param targetRealm {?string}\r\n * @param performanceClient {?IPerformanceClient}\r\n * @param correlationId {?string}\r\n */\r\n getIdToken(account, tokenKeys, targetRealm, performanceClient, correlationId) {\r\n this.commonLogger.trace("CacheManager - getIdToken called");\r\n const idTokenFilter = {\r\n homeAccountId: account.homeAccountId,\r\n environment: account.environment,\r\n credentialType: CredentialType.ID_TOKEN,\r\n clientId: this.clientId,\r\n realm: targetRealm,\r\n };\r\n const idTokenMap = this.getIdTokensByFilter(idTokenFilter, tokenKeys);\r\n const numIdTokens = idTokenMap.size;\r\n if (numIdTokens < 1) {\r\n this.commonLogger.info("CacheManager:getIdToken - No token found");\r\n return null;\r\n }\r\n else if (numIdTokens > 1) {\r\n let tokensToBeRemoved = idTokenMap;\r\n // Multiple tenant profiles and no tenant specified, pick home account\r\n if (!targetRealm) {\r\n const homeIdTokenMap = new Map();\r\n idTokenMap.forEach((idToken, key) => {\r\n if (idToken.realm === account.tenantId) {\r\n homeIdTokenMap.set(key, idToken);\r\n }\r\n });\r\n const numHomeIdTokens = homeIdTokenMap.size;\r\n if (numHomeIdTokens < 1) {\r\n this.commonLogger.info("CacheManager:getIdToken - Multiple ID tokens found for account but none match account entity tenant id, returning first result");\r\n return idTokenMap.values().next().value;\r\n }\r\n else if (numHomeIdTokens === 1) {\r\n this.commonLogger.info("CacheManager:getIdToken - Multiple ID tokens found for account, defaulting to home tenant profile");\r\n return homeIdTokenMap.values().next().value;\r\n }\r\n else {\r\n // Multiple ID tokens for home tenant profile, remove all and return null\r\n tokensToBeRemoved = homeIdTokenMap;\r\n }\r\n }\r\n // Multiple tokens for a single tenant profile, remove all and return null\r\n this.commonLogger.info("CacheManager:getIdToken - Multiple matching ID tokens found, clearing them");\r\n tokensToBeRemoved.forEach((idToken, key) => {\r\n this.removeIdToken(key);\r\n });\r\n if (performanceClient && correlationId) {\r\n performanceClient.addFields({ multiMatchedID: idTokenMap.size }, correlationId);\r\n }\r\n return null;\r\n }\r\n this.commonLogger.info("CacheManager:getIdToken - Returning ID token");\r\n return idTokenMap.values().next().value;\r\n }\r\n /**\r\n * Gets all idTokens matching the given filter\r\n * @param filter\r\n * @returns\r\n */\r\n getIdTokensByFilter(filter, tokenKeys) {\r\n const idTokenKeys = (tokenKeys && tokenKeys.idToken) || this.getTokenKeys().idToken;\r\n const idTokens = new Map();\r\n idTokenKeys.forEach((key) => {\r\n if (!this.idTokenKeyMatchesFilter(key, {\r\n clientId: this.clientId,\r\n ...filter,\r\n })) {\r\n return;\r\n }\r\n const idToken = this.getIdTokenCredential(key);\r\n if (idToken && this.credentialMatchesFilter(idToken, filter)) {\r\n idTokens.set(key, idToken);\r\n }\r\n });\r\n return idTokens;\r\n }\r\n /**\r\n * Validate the cache key against filter before retrieving and parsing cache value\r\n * @param key\r\n * @param filter\r\n * @returns\r\n */\r\n idTokenKeyMatchesFilter(inputKey, filter) {\r\n const key = inputKey.toLowerCase();\r\n if (filter.clientId &&\r\n key.indexOf(filter.clientId.toLowerCase()) === -1) {\r\n return false;\r\n }\r\n if (filter.homeAccountId &&\r\n key.indexOf(filter.homeAccountId.toLowerCase()) === -1) {\r\n return false;\r\n }\r\n return true;\r\n }\r\n /**\r\n * Removes idToken from the cache\r\n * @param key\r\n */\r\n removeIdToken(key) {\r\n this.removeItem(key);\r\n }\r\n /**\r\n * Removes refresh token from the cache\r\n * @param key\r\n */\r\n removeRefreshToken(key) {\r\n this.removeItem(key);\r\n }\r\n /**\r\n * Retrieve AccessTokenEntity from cache\r\n * @param account {AccountInfo}\r\n * @param request {BaseAuthRequest}\r\n * @param tokenKeys {?TokenKeys}\r\n * @param performanceClient {?IPerformanceClient}\r\n * @param correlationId {?string}\r\n */\r\n getAccessToken(account, request, tokenKeys, targetRealm, performanceClient, correlationId) {\r\n this.commonLogger.trace("CacheManager - getAccessToken called");\r\n const scopes = ScopeSet.createSearchScopes(request.scopes);\r\n const authScheme = request.authenticationScheme || AuthenticationScheme.BEARER;\r\n /*\r\n * Distinguish between Bearer and PoP/SSH token cache types\r\n * Cast to lowercase to handle "bearer" from ADFS\r\n */\r\n const credentialType = authScheme &&\r\n authScheme.toLowerCase() !==\r\n AuthenticationScheme.BEARER.toLowerCase()\r\n ? CredentialType.ACCESS_TOKEN_WITH_AUTH_SCHEME\r\n : CredentialType.ACCESS_TOKEN;\r\n const accessTokenFilter = {\r\n homeAccountId: account.homeAccountId,\r\n environment: account.environment,\r\n credentialType: credentialType,\r\n clientId: this.clientId,\r\n realm: targetRealm || account.tenantId,\r\n target: scopes,\r\n tokenType: authScheme,\r\n keyId: request.sshKid,\r\n requestedClaimsHash: request.requestedClaimsHash,\r\n };\r\n const accessTokenKeys = (tokenKeys && tokenKeys.accessToken) ||\r\n this.getTokenKeys().accessToken;\r\n const accessTokens = [];\r\n accessTokenKeys.forEach((key) => {\r\n // Validate key\r\n if (this.accessTokenKeyMatchesFilter(key, accessTokenFilter, true)) {\r\n const accessToken = this.getAccessTokenCredential(key);\r\n // Validate value\r\n if (accessToken &&\r\n this.credentialMatchesFilter(accessToken, accessTokenFilter)) {\r\n accessTokens.push(accessToken);\r\n }\r\n }\r\n });\r\n const numAccessTokens = accessTokens.length;\r\n if (numAccessTokens < 1) {\r\n this.commonLogger.info("CacheManager:getAccessToken - No token found");\r\n return null;\r\n }\r\n else if (numAccessTokens > 1) {\r\n this.commonLogger.info("CacheManager:getAccessToken - Multiple access tokens found, clearing them");\r\n accessTokens.forEach((accessToken) => {\r\n void this.removeAccessToken(generateCredentialKey(accessToken));\r\n });\r\n if (performanceClient && correlationId) {\r\n performanceClient.addFields({ multiMatchedAT: accessTokens.length }, correlationId);\r\n }\r\n return null;\r\n }\r\n this.commonLogger.info("CacheManager:getAccessToken - Returning access token");\r\n return accessTokens[0];\r\n }\r\n /**\r\n * Validate the cache key against filter before retrieving and parsing cache value\r\n * @param key\r\n * @param filter\r\n * @param keyMustContainAllScopes\r\n * @returns\r\n */\r\n accessTokenKeyMatchesFilter(inputKey, filter, keyMustContainAllScopes) {\r\n const key = inputKey.toLowerCase();\r\n if (filter.clientId &&\r\n key.indexOf(filter.clientId.toLowerCase()) === -1) {\r\n return false;\r\n }\r\n if (filter.homeAccountId &&\r\n key.indexOf(filter.homeAccountId.toLowerCase()) === -1) {\r\n return false;\r\n }\r\n if (filter.realm && key.indexOf(filter.realm.toLowerCase()) === -1) {\r\n return false;\r\n }\r\n if (filter.requestedClaimsHash &&\r\n key.indexOf(filter.requestedClaimsHash.toLowerCase()) === -1) {\r\n return false;\r\n }\r\n if (filter.target) {\r\n const scopes = filter.target.asArray();\r\n for (let i = 0; i < scopes.length; i++) {\r\n if (keyMustContainAllScopes &&\r\n !key.includes(scopes[i].toLowerCase())) {\r\n // When performing a cache lookup a missing scope would be a cache miss\r\n return false;\r\n }\r\n else if (!keyMustContainAllScopes &&\r\n key.includes(scopes[i].toLowerCase())) {\r\n // When performing a cache write, any token with a subset of requested scopes should be replaced\r\n return true;\r\n }\r\n }\r\n }\r\n return true;\r\n }\r\n /**\r\n * Gets all access tokens matching the filter\r\n * @param filter\r\n * @returns\r\n */\r\n getAccessTokensByFilter(filter) {\r\n const tokenKeys = this.getTokenKeys();\r\n const accessTokens = [];\r\n tokenKeys.accessToken.forEach((key) => {\r\n if (!this.accessTokenKeyMatchesFilter(key, filter, true)) {\r\n return;\r\n }\r\n const accessToken = this.getAccessTokenCredential(key);\r\n if (accessToken &&\r\n this.credentialMatchesFilter(accessToken, filter)) {\r\n accessTokens.push(accessToken);\r\n }\r\n });\r\n return accessTokens;\r\n }\r\n /**\r\n * Helper to retrieve the appropriate refresh token from cache\r\n * @param account {AccountInfo}\r\n * @param familyRT {boolean}\r\n * @param tokenKeys {?TokenKeys}\r\n * @param performanceClient {?IPerformanceClient}\r\n * @param correlationId {?string}\r\n */\r\n getRefreshToken(account, familyRT, tokenKeys, performanceClient, correlationId) {\r\n this.commonLogger.trace("CacheManager - getRefreshToken called");\r\n const id = familyRT ? THE_FAMILY_ID : undefined;\r\n const refreshTokenFilter = {\r\n homeAccountId: account.homeAccountId,\r\n environment: account.environment,\r\n credentialType: CredentialType.REFRESH_TOKEN,\r\n clientId: this.clientId,\r\n familyId: id,\r\n };\r\n const refreshTokenKeys = (tokenKeys && tokenKeys.refreshToken) ||\r\n this.getTokenKeys().refreshToken;\r\n const refreshTokens = [];\r\n refreshTokenKeys.forEach((key) => {\r\n // Validate key\r\n if (this.refreshTokenKeyMatchesFilter(key, refreshTokenFilter)) {\r\n const refreshToken = this.getRefreshTokenCredential(key);\r\n // Validate value\r\n if (refreshToken &&\r\n this.credentialMatchesFilter(refreshToken, refreshTokenFilter)) {\r\n refreshTokens.push(refreshToken);\r\n }\r\n }\r\n });\r\n const numRefreshTokens = refreshTokens.length;\r\n if (numRefreshTokens < 1) {\r\n this.commonLogger.info("CacheManager:getRefreshToken - No refresh token found.");\r\n return null;\r\n }\r\n // address the else case after remove functions address environment aliases\r\n if (numRefreshTokens > 1 && performanceClient && correlationId) {\r\n performanceClient.addFields({ multiMatchedRT: numRefreshTokens }, correlationId);\r\n }\r\n this.commonLogger.info("CacheManager:getRefreshToken - returning refresh token");\r\n return refreshTokens[0];\r\n }\r\n /**\r\n * Validate the cache key against filter before retrieving and parsing cache value\r\n * @param key\r\n * @param filter\r\n */\r\n refreshTokenKeyMatchesFilter(inputKey, filter) {\r\n const key = inputKey.toLowerCase();\r\n if (filter.familyId &&\r\n key.indexOf(filter.familyId.toLowerCase()) === -1) {\r\n return false;\r\n }\r\n // If familyId is used, clientId is not in the key\r\n if (!filter.familyId &&\r\n filter.clientId &&\r\n key.indexOf(filter.clientId.toLowerCase()) === -1) {\r\n return false;\r\n }\r\n if (filter.homeAccountId &&\r\n key.indexOf(filter.homeAccountId.toLowerCase()) === -1) {\r\n return false;\r\n }\r\n return true;\r\n }\r\n /**\r\n * Retrieve AppMetadataEntity from cache\r\n */\r\n readAppMetadataFromCache(environment) {\r\n const appMetadataFilter = {\r\n environment,\r\n clientId: this.clientId,\r\n };\r\n const appMetadata = this.getAppMetadataFilteredBy(appMetadataFilter);\r\n const appMetadataEntries = Object.keys(appMetadata).map((key) => appMetadata[key]);\r\n const numAppMetadata = appMetadataEntries.length;\r\n if (numAppMetadata < 1) {\r\n return null;\r\n }\r\n else if (numAppMetadata > 1) {\r\n throw createClientAuthError(multipleMatchingAppMetadata);\r\n }\r\n return appMetadataEntries[0];\r\n }\r\n /**\r\n * Return the family_id value associated with FOCI\r\n * @param environment\r\n * @param clientId\r\n */\r\n isAppMetadataFOCI(environment) {\r\n const appMetadata = this.readAppMetadataFromCache(environment);\r\n return !!(appMetadata && appMetadata.familyId === THE_FAMILY_ID);\r\n }\r\n /**\r\n * helper to match account ids\r\n * @param value\r\n * @param homeAccountId\r\n */\r\n matchHomeAccountId(entity, homeAccountId) {\r\n return !!(typeof entity.homeAccountId === "string" &&\r\n homeAccountId === entity.homeAccountId);\r\n }\r\n /**\r\n * helper to match account ids\r\n * @param entity\r\n * @param localAccountId\r\n * @returns\r\n */\r\n matchLocalAccountIdFromTokenClaims(tokenClaims, localAccountId) {\r\n const idTokenLocalAccountId = tokenClaims.oid || tokenClaims.sub;\r\n return localAccountId === idTokenLocalAccountId;\r\n }\r\n matchLocalAccountIdFromTenantProfile(tenantProfile, localAccountId) {\r\n return tenantProfile.localAccountId === localAccountId;\r\n }\r\n /**\r\n * helper to match names\r\n * @param entity\r\n * @param name\r\n * @returns true if the downcased name properties are present and match in the filter and the entity\r\n */\r\n matchName(claims, name) {\r\n return !!(name.toLowerCase() === claims.name?.toLowerCase());\r\n }\r\n /**\r\n * helper to match usernames\r\n * @param entity\r\n * @param username\r\n * @returns\r\n */\r\n matchUsername(cachedUsername, filterUsername) {\r\n return !!(cachedUsername &&\r\n typeof cachedUsername === "string" &&\r\n filterUsername?.toLowerCase() === cachedUsername.toLowerCase());\r\n }\r\n /**\r\n * helper to match assertion\r\n * @param value\r\n * @param oboAssertion\r\n */\r\n matchUserAssertionHash(entity, userAssertionHash) {\r\n return !!(entity.userAssertionHash &&\r\n userAssertionHash === entity.userAssertionHash);\r\n }\r\n /**\r\n * helper to match environment\r\n * @param value\r\n * @param environment\r\n */\r\n matchEnvironment(entity, environment) {\r\n // Check static authority options first for cases where authority metadata has not been resolved and cached yet\r\n if (this.staticAuthorityOptions) {\r\n const staticAliases = getAliasesFromStaticSources(this.staticAuthorityOptions, this.commonLogger);\r\n if (staticAliases.includes(environment) &&\r\n staticAliases.includes(entity.environment)) {\r\n return true;\r\n }\r\n }\r\n // Query metadata cache if no static authority configuration has aliases that match enviroment\r\n const cloudMetadata = this.getAuthorityMetadataByAlias(environment);\r\n if (cloudMetadata &&\r\n cloudMetadata.aliases.indexOf(entity.environment) > -1) {\r\n return true;\r\n }\r\n return false;\r\n }\r\n /**\r\n * helper to match credential type\r\n * @param entity\r\n * @param credentialType\r\n */\r\n matchCredentialType(entity, credentialType) {\r\n return (entity.credentialType &&\r\n credentialType.toLowerCase() === entity.credentialType.toLowerCase());\r\n }\r\n /**\r\n * helper to match client ids\r\n * @param entity\r\n * @param clientId\r\n */\r\n matchClientId(entity, clientId) {\r\n return !!(entity.clientId && clientId === entity.clientId);\r\n }\r\n /**\r\n * helper to match family ids\r\n * @param entity\r\n * @param familyId\r\n */\r\n matchFamilyId(entity, familyId) {\r\n return !!(entity.familyId && familyId === entity.familyId);\r\n }\r\n /**\r\n * helper to match realm\r\n * @param entity\r\n * @param realm\r\n */\r\n matchRealm(entity, realm) {\r\n return !!(entity.realm?.toLowerCase() === realm.toLowerCase());\r\n }\r\n /**\r\n * helper to match nativeAccountId\r\n * @param entity\r\n * @param nativeAccountId\r\n * @returns boolean indicating the match result\r\n */\r\n matchNativeAccountId(entity, nativeAccountId) {\r\n return !!(entity.nativeAccountId && nativeAccountId === entity.nativeAccountId);\r\n }\r\n /**\r\n * helper to match loginHint which can be either:\r\n * 1. login_hint ID token claim\r\n * 2. username in cached account object\r\n * 3. upn in ID token claims\r\n * @param entity\r\n * @param loginHint\r\n * @returns\r\n */\r\n matchLoginHintFromTokenClaims(tokenClaims, loginHint) {\r\n if (tokenClaims.login_hint === loginHint) {\r\n return true;\r\n }\r\n if (tokenClaims.preferred_username === loginHint) {\r\n return true;\r\n }\r\n if (tokenClaims.upn === loginHint) {\r\n return true;\r\n }\r\n return false;\r\n }\r\n /**\r\n * Helper to match sid\r\n * @param entity\r\n * @param sid\r\n * @returns true if the sid claim is present and matches the filter\r\n */\r\n matchSid(idTokenClaims, sid) {\r\n return idTokenClaims.sid === sid;\r\n }\r\n matchAuthorityType(entity, authorityType) {\r\n return !!(entity.authorityType &&\r\n authorityType.toLowerCase() === entity.authorityType.toLowerCase());\r\n }\r\n /**\r\n * Returns true if the target scopes are a subset of the current entity\'s scopes, false otherwise.\r\n * @param entity\r\n * @param target\r\n */\r\n matchTarget(entity, target) {\r\n const isNotAccessTokenCredential = entity.credentialType !== CredentialType.ACCESS_TOKEN &&\r\n entity.credentialType !==\r\n CredentialType.ACCESS_TOKEN_WITH_AUTH_SCHEME;\r\n if (isNotAccessTokenCredential || !entity.target) {\r\n return false;\r\n }\r\n const entityScopeSet = ScopeSet.fromString(entity.target);\r\n return entityScopeSet.containsScopeSet(target);\r\n }\r\n /**\r\n * Returns true if the credential\'s tokenType or Authentication Scheme matches the one in the request, false otherwise\r\n * @param entity\r\n * @param tokenType\r\n */\r\n matchTokenType(entity, tokenType) {\r\n return !!(entity.tokenType && entity.tokenType === tokenType);\r\n }\r\n /**\r\n * Returns true if the credential\'s keyId matches the one in the request, false otherwise\r\n * @param entity\r\n * @param keyId\r\n */\r\n matchKeyId(entity, keyId) {\r\n return !!(entity.keyId && entity.keyId === keyId);\r\n }\r\n /**\r\n * returns if a given cache entity is of the type appmetadata\r\n * @param key\r\n */\r\n isAppMetadata(key) {\r\n return key.indexOf(APP_METADATA) !== -1;\r\n }\r\n /**\r\n * returns if a given cache entity is of the type authoritymetadata\r\n * @param key\r\n */\r\n isAuthorityMetadata(key) {\r\n return key.indexOf(AUTHORITY_METADATA_CONSTANTS.CACHE_KEY) !== -1;\r\n }\r\n /**\r\n * returns cache key used for cloud instance metadata\r\n */\r\n generateAuthorityMetadataCacheKey(authority) {\r\n return `${AUTHORITY_METADATA_CONSTANTS.CACHE_KEY}-${this.clientId}-${authority}`;\r\n }\r\n /**\r\n * Helper to convert serialized data to object\r\n * @param obj\r\n * @param json\r\n */\r\n static toObject(obj, json) {\r\n for (const propertyName in json) {\r\n obj[propertyName] = json[propertyName];\r\n }\r\n return obj;\r\n }\r\n}\r\n/** @internal */\r\nclass DefaultStorageClass extends CacheManager {\r\n setAccount() {\r\n throw createClientAuthError(methodNotImplemented);\r\n }\r\n getAccount() {\r\n throw createClientAuthError(methodNotImplemented);\r\n }\r\n getCachedAccountEntity() {\r\n throw createClientAuthError(methodNotImplemented);\r\n }\r\n setIdTokenCredential() {\r\n throw createClientAuthError(methodNotImplemented);\r\n }\r\n getIdTokenCredential() {\r\n throw createClientAuthError(methodNotImplemented);\r\n }\r\n setAccessTokenCredential() {\r\n throw createClientAuthError(methodNotImplemented);\r\n }\r\n getAccessTokenCredential() {\r\n throw createClientAuthError(methodNotImplemented);\r\n }\r\n setRefreshTokenCredential() {\r\n throw createClientAuthError(methodNotImplemented);\r\n }\r\n getRefreshTokenCredential() {\r\n throw createClientAuthError(methodNotImplemented);\r\n }\r\n setAppMetadata() {\r\n throw createClientAuthError(methodNotImplemented);\r\n }\r\n getAppMetadata() {\r\n throw createClientAuthError(methodNotImplemented);\r\n }\r\n setServerTelemetry() {\r\n throw createClientAuthError(methodNotImplemented);\r\n }\r\n getServerTelemetry() {\r\n throw createClientAuthError(methodNotImplemented);\r\n }\r\n setAuthorityMetadata() {\r\n throw createClientAuthError(methodNotImplemented);\r\n }\r\n getAuthorityMetadata() {\r\n throw createClientAuthError(methodNotImplemented);\r\n }\r\n getAuthorityMetadataKeys() {\r\n throw createClientAuthError(methodNotImplemented);\r\n }\r\n setThrottlingCache() {\r\n throw createClientAuthError(methodNotImplemented);\r\n }\r\n getThrottlingCache() {\r\n throw createClientAuthError(methodNotImplemented);\r\n }\r\n removeItem() {\r\n throw createClientAuthError(methodNotImplemented);\r\n }\r\n getKeys() {\r\n throw createClientAuthError(methodNotImplemented);\r\n }\r\n getAccountKeys() {\r\n throw createClientAuthError(methodNotImplemented);\r\n }\r\n getTokenKeys() {\r\n throw createClientAuthError(methodNotImplemented);\r\n }\r\n updateCredentialCacheKey() {\r\n throw createClientAuthError(methodNotImplemented);\r\n }\r\n removeOutdatedAccount() {\r\n throw createClientAuthError(methodNotImplemented);\r\n }\r\n}\n\n\n//# sourceMappingURL=CacheManager.mjs.map\n\n;// ./node_modules/@azure/msal-common/dist/config/ClientConfiguration.mjs\n/*! @azure/msal-common v14.16.0 2024-11-05 */\n\n\n\n\n\n\n\n\n\n\n\n/*\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License.\r\n */\r\nconst DEFAULT_SYSTEM_OPTIONS = {\r\n tokenRenewalOffsetSeconds: DEFAULT_TOKEN_RENEWAL_OFFSET_SEC,\r\n preventCorsPreflight: false,\r\n};\r\nconst DEFAULT_LOGGER_IMPLEMENTATION = {\r\n loggerCallback: () => {\r\n // allow users to not set loggerCallback\r\n },\r\n piiLoggingEnabled: false,\r\n logLevel: LogLevel.Info,\r\n correlationId: Constants.EMPTY_STRING,\r\n};\r\nconst DEFAULT_CACHE_OPTIONS = {\r\n claimsBasedCachingEnabled: false,\r\n};\r\nconst DEFAULT_NETWORK_IMPLEMENTATION = {\r\n async sendGetRequestAsync() {\r\n throw createClientAuthError(methodNotImplemented);\r\n },\r\n async sendPostRequestAsync() {\r\n throw createClientAuthError(methodNotImplemented);\r\n },\r\n};\r\nconst DEFAULT_LIBRARY_INFO = {\r\n sku: Constants.SKU,\r\n version: version,\r\n cpu: Constants.EMPTY_STRING,\r\n os: Constants.EMPTY_STRING,\r\n};\r\nconst DEFAULT_CLIENT_CREDENTIALS = {\r\n clientSecret: Constants.EMPTY_STRING,\r\n clientAssertion: undefined,\r\n};\r\nconst DEFAULT_AZURE_CLOUD_OPTIONS = {\r\n azureCloudInstance: AzureCloudInstance.None,\r\n tenant: `${Constants.DEFAULT_COMMON_TENANT}`,\r\n};\r\nconst DEFAULT_TELEMETRY_OPTIONS = {\r\n application: {\r\n appName: "",\r\n appVersion: "",\r\n },\r\n};\r\n/**\r\n * Function that sets the default options when not explicitly configured from app developer\r\n *\r\n * @param Configuration\r\n *\r\n * @returns Configuration\r\n */\r\nfunction buildClientConfiguration({ authOptions: userAuthOptions, systemOptions: userSystemOptions, loggerOptions: userLoggerOption, cacheOptions: userCacheOptions, storageInterface: storageImplementation, networkInterface: networkImplementation, cryptoInterface: cryptoImplementation, clientCredentials: clientCredentials, libraryInfo: libraryInfo, telemetry: telemetry, serverTelemetryManager: serverTelemetryManager, persistencePlugin: persistencePlugin, serializableCache: serializableCache, }) {\r\n const loggerOptions = {\r\n ...DEFAULT_LOGGER_IMPLEMENTATION,\r\n ...userLoggerOption,\r\n };\r\n return {\r\n authOptions: buildAuthOptions(userAuthOptions),\r\n systemOptions: { ...DEFAULT_SYSTEM_OPTIONS, ...userSystemOptions },\r\n loggerOptions: loggerOptions,\r\n cacheOptions: { ...DEFAULT_CACHE_OPTIONS, ...userCacheOptions },\r\n storageInterface: storageImplementation ||\r\n new DefaultStorageClass(userAuthOptions.clientId, DEFAULT_CRYPTO_IMPLEMENTATION, new Logger(loggerOptions)),\r\n networkInterface: networkImplementation || DEFAULT_NETWORK_IMPLEMENTATION,\r\n cryptoInterface: cryptoImplementation || DEFAULT_CRYPTO_IMPLEMENTATION,\r\n clientCredentials: clientCredentials || DEFAULT_CLIENT_CREDENTIALS,\r\n libraryInfo: { ...DEFAULT_LIBRARY_INFO, ...libraryInfo },\r\n telemetry: { ...DEFAULT_TELEMETRY_OPTIONS, ...telemetry },\r\n serverTelemetryManager: serverTelemetryManager || null,\r\n persistencePlugin: persistencePlugin || null,\r\n serializableCache: serializableCache || null,\r\n };\r\n}\r\n/**\r\n * Construct authoptions from the client and platform passed values\r\n * @param authOptions\r\n */\r\nfunction buildAuthOptions(authOptions) {\r\n return {\r\n clientCapabilities: [],\r\n azureCloudOptions: DEFAULT_AZURE_CLOUD_OPTIONS,\r\n skipAuthorityMetadataCache: false,\r\n instanceAware: false,\r\n ...authOptions,\r\n };\r\n}\r\n/**\r\n * Returns true if config has protocolMode set to ProtocolMode.OIDC, false otherwise\r\n * @param ClientConfiguration\r\n */\r\nfunction isOidcProtocolMode(config) {\r\n return (config.authOptions.authority.options.protocolMode === ProtocolMode.OIDC);\r\n}\n\n\n//# sourceMappingURL=ClientConfiguration.mjs.map\n\n;// ./node_modules/@azure/msal-common/dist/network/INetworkModule.mjs\n/*! @azure/msal-common v14.16.0 2024-11-05 */\n\n\n\n\n/*\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License.\r\n */\r\nconst StubbedNetworkModule = {\r\n sendGetRequestAsync: () => {\r\n return Promise.reject(createClientAuthError(methodNotImplemented));\r\n },\r\n sendPostRequestAsync: () => {\r\n return Promise.reject(createClientAuthError(methodNotImplemented));\r\n },\r\n};\n\n\n//# sourceMappingURL=INetworkModule.mjs.map\n\n;// ./node_modules/@azure/msal-common/dist/telemetry/performance/StubPerformanceClient.mjs\n/*! @azure/msal-common v14.16.0 2024-11-05 */\n\n\n\n/*\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License.\r\n */\r\nclass StubPerformanceMeasurement {\r\n startMeasurement() {\r\n return;\r\n }\r\n endMeasurement() {\r\n return;\r\n }\r\n flushMeasurement() {\r\n return null;\r\n }\r\n}\r\nclass StubPerformanceClient {\r\n generateId() {\r\n return "callback-id";\r\n }\r\n startMeasurement(measureName, correlationId) {\r\n return {\r\n end: () => null,\r\n discard: () => { },\r\n add: () => { },\r\n increment: () => { },\r\n event: {\r\n eventId: this.generateId(),\r\n status: PerformanceEventStatus.InProgress,\r\n authority: "",\r\n libraryName: "",\r\n libraryVersion: "",\r\n clientId: "",\r\n name: measureName,\r\n startTimeMs: Date.now(),\r\n correlationId: correlationId || "",\r\n },\r\n measurement: new StubPerformanceMeasurement(),\r\n };\r\n }\r\n startPerformanceMeasurement() {\r\n return new StubPerformanceMeasurement();\r\n }\r\n calculateQueuedTime() {\r\n return 0;\r\n }\r\n addQueueMeasurement() {\r\n return;\r\n }\r\n setPreQueueTime() {\r\n return;\r\n }\r\n endMeasurement() {\r\n return null;\r\n }\r\n discardMeasurements() {\r\n return;\r\n }\r\n removePerformanceCallback() {\r\n return true;\r\n }\r\n addPerformanceCallback() {\r\n return "";\r\n }\r\n emitEvents() {\r\n return;\r\n }\r\n addFields() {\r\n return;\r\n }\r\n incrementFields() {\r\n return;\r\n }\r\n cacheEventByCorrelationId() {\r\n return;\r\n }\r\n}\n\n\n//# sourceMappingURL=StubPerformanceClient.mjs.map\n\n;// ./node_modules/@azure/msal-browser/dist/navigation/NavigationClient.mjs\n/*! @azure/msal-browser v3.28.1 2025-01-14 */\n\n/*\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License.\r\n */\r\nclass NavigationClient {\r\n /**\r\n * Navigates to other pages within the same web application\r\n * @param url\r\n * @param options\r\n */\r\n navigateInternal(url, options) {\r\n return NavigationClient.defaultNavigateWindow(url, options);\r\n }\r\n /**\r\n * Navigates to other pages outside the web application i.e. the Identity Provider\r\n * @param url\r\n * @param options\r\n */\r\n navigateExternal(url, options) {\r\n return NavigationClient.defaultNavigateWindow(url, options);\r\n }\r\n /**\r\n * Default navigation implementation invoked by the internal and external functions\r\n * @param url\r\n * @param options\r\n */\r\n static defaultNavigateWindow(url, options) {\r\n if (options.noHistory) {\r\n window.location.replace(url);\r\n }\r\n else {\r\n window.location.assign(url);\r\n }\r\n return new Promise((resolve) => {\r\n setTimeout(() => {\r\n resolve(true);\r\n }, options.timeout);\r\n });\r\n }\r\n}\n\n\n//# sourceMappingURL=NavigationClient.mjs.map\n\n;// ./node_modules/@azure/msal-common/dist/error/NetworkError.mjs\n/*! @azure/msal-common v14.16.0 2024-11-05 */\n\n\n\n/*\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License.\r\n */\r\n/**\r\n * Represents network related errors\r\n */\r\nclass NetworkError extends AuthError {\r\n constructor(error, httpStatus, responseHeaders) {\r\n super(error.errorCode, error.errorMessage, error.subError);\r\n Object.setPrototypeOf(this, NetworkError.prototype);\r\n this.name = "NetworkError";\r\n this.error = error;\r\n this.httpStatus = httpStatus;\r\n this.responseHeaders = responseHeaders;\r\n }\r\n}\r\n/**\r\n * Creates NetworkError object for a failed network request\r\n * @param error - Error to be thrown back to the caller\r\n * @param httpStatus - Status code of the network request\r\n * @param responseHeaders - Response headers of the network request, when available\r\n * @returns NetworkError object\r\n */\r\nfunction createNetworkError(error, httpStatus, responseHeaders) {\r\n return new NetworkError(error, httpStatus, responseHeaders);\r\n}\n\n\n//# sourceMappingURL=NetworkError.mjs.map\n\n;// ./node_modules/@azure/msal-browser/dist/network/FetchClient.mjs\n/*! @azure/msal-browser v3.28.1 2025-01-14 */\n\n\n\n\n\n\n/*\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License.\r\n */\r\n/**\r\n * This class implements the Fetch API for GET and POST requests. See more here: https://developer.mozilla.org/en-US/docs/Web/API/Fetch_API\r\n */\r\nclass FetchClient {\r\n /**\r\n * Fetch Client for REST endpoints - Get request\r\n * @param url\r\n * @param headers\r\n * @param body\r\n */\r\n async sendGetRequestAsync(url, options) {\r\n let response;\r\n let responseHeaders = {};\r\n let responseStatus = 0;\r\n const reqHeaders = getFetchHeaders(options);\r\n try {\r\n response = await fetch(url, {\r\n method: HTTP_REQUEST_TYPE.GET,\r\n headers: reqHeaders,\r\n });\r\n }\r\n catch (e) {\r\n throw createBrowserAuthError(window.navigator.onLine\r\n ? getRequestFailed\r\n : BrowserAuthErrorCodes_noNetworkConnectivity);\r\n }\r\n responseHeaders = getHeaderDict(response.headers);\r\n try {\r\n responseStatus = response.status;\r\n return {\r\n headers: responseHeaders,\r\n body: (await response.json()),\r\n status: responseStatus,\r\n };\r\n }\r\n catch (e) {\r\n throw createNetworkError(createBrowserAuthError(failedToParseResponse), responseStatus, responseHeaders);\r\n }\r\n }\r\n /**\r\n * Fetch Client for REST endpoints - Post request\r\n * @param url\r\n * @param headers\r\n * @param body\r\n */\r\n async sendPostRequestAsync(url, options) {\r\n const reqBody = (options && options.body) || "";\r\n const reqHeaders = getFetchHeaders(options);\r\n let response;\r\n let responseStatus = 0;\r\n let responseHeaders = {};\r\n try {\r\n response = await fetch(url, {\r\n method: HTTP_REQUEST_TYPE.POST,\r\n headers: reqHeaders,\r\n body: reqBody,\r\n });\r\n }\r\n catch (e) {\r\n throw createBrowserAuthError(window.navigator.onLine\r\n ? BrowserAuthErrorCodes_postRequestFailed\r\n : BrowserAuthErrorCodes_noNetworkConnectivity);\r\n }\r\n responseHeaders = getHeaderDict(response.headers);\r\n try {\r\n responseStatus = response.status;\r\n return {\r\n headers: responseHeaders,\r\n body: (await response.json()),\r\n status: responseStatus,\r\n };\r\n }\r\n catch (e) {\r\n throw createNetworkError(createBrowserAuthError(failedToParseResponse), responseStatus, responseHeaders);\r\n }\r\n }\r\n}\r\n/**\r\n * Get Fetch API Headers object from string map\r\n * @param inputHeaders\r\n */\r\nfunction getFetchHeaders(options) {\r\n try {\r\n const headers = new Headers();\r\n if (!(options && options.headers)) {\r\n return headers;\r\n }\r\n const optionsHeaders = options.headers;\r\n Object.entries(optionsHeaders).forEach(([key, value]) => {\r\n headers.append(key, value);\r\n });\r\n return headers;\r\n }\r\n catch (e) {\r\n throw createBrowserAuthError(failedToBuildHeaders);\r\n }\r\n}\r\n/**\r\n * Returns object representing response headers\r\n * @param headers\r\n * @returns\r\n */\r\nfunction getHeaderDict(headers) {\r\n try {\r\n const headerDict = {};\r\n headers.forEach((value, key) => {\r\n headerDict[key] = value;\r\n });\r\n return headerDict;\r\n }\r\n catch (e) {\r\n throw createBrowserAuthError(failedToParseHeaders);\r\n }\r\n}\n\n\n//# sourceMappingURL=FetchClient.mjs.map\n\n;// ./node_modules/@azure/msal-browser/dist/config/Configuration.mjs\n/*! @azure/msal-browser v3.28.1 2025-01-14 */\n\n\n\n\n\n\n\n/*\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License.\r\n */\r\n// Default timeout for popup windows and iframes in milliseconds\r\nconst DEFAULT_POPUP_TIMEOUT_MS = 60000;\r\nconst DEFAULT_IFRAME_TIMEOUT_MS = 10000;\r\nconst DEFAULT_REDIRECT_TIMEOUT_MS = 30000;\r\nconst DEFAULT_NATIVE_BROKER_HANDSHAKE_TIMEOUT_MS = 2000;\r\n/**\r\n * MSAL function that sets the default options when not explicitly configured from app developer\r\n *\r\n * @param auth\r\n * @param cache\r\n * @param system\r\n *\r\n * @returns Configuration object\r\n */\r\nfunction buildConfiguration({ auth: userInputAuth, cache: userInputCache, system: userInputSystem, telemetry: userInputTelemetry, }, isBrowserEnvironment) {\r\n // Default auth options for browser\r\n const DEFAULT_AUTH_OPTIONS = {\r\n clientId: Constants.EMPTY_STRING,\r\n authority: `${Constants.DEFAULT_AUTHORITY}`,\r\n knownAuthorities: [],\r\n cloudDiscoveryMetadata: Constants.EMPTY_STRING,\r\n authorityMetadata: Constants.EMPTY_STRING,\r\n redirectUri: typeof window !== "undefined" ? getCurrentUri() : "",\r\n postLogoutRedirectUri: Constants.EMPTY_STRING,\r\n navigateToLoginRequestUrl: true,\r\n clientCapabilities: [],\r\n protocolMode: ProtocolMode.AAD,\r\n OIDCOptions: {\r\n serverResponseType: ServerResponseType.FRAGMENT,\r\n defaultScopes: [\r\n Constants.OPENID_SCOPE,\r\n Constants.PROFILE_SCOPE,\r\n Constants.OFFLINE_ACCESS_SCOPE,\r\n ],\r\n },\r\n azureCloudOptions: {\r\n azureCloudInstance: AzureCloudInstance.None,\r\n tenant: Constants.EMPTY_STRING,\r\n },\r\n skipAuthorityMetadataCache: false,\r\n supportsNestedAppAuth: false,\r\n instanceAware: false,\r\n };\r\n // Default cache options for browser\r\n const DEFAULT_CACHE_OPTIONS = {\r\n cacheLocation: BrowserCacheLocation.SessionStorage,\r\n temporaryCacheLocation: BrowserCacheLocation.SessionStorage,\r\n storeAuthStateInCookie: false,\r\n secureCookies: false,\r\n // Default cache migration to true if cache location is localStorage since entries are preserved across tabs/windows. Migration has little to no benefit in sessionStorage and memoryStorage\r\n cacheMigrationEnabled: userInputCache &&\r\n userInputCache.cacheLocation === BrowserCacheLocation.LocalStorage\r\n ? true\r\n : false,\r\n claimsBasedCachingEnabled: false,\r\n };\r\n // Default logger options for browser\r\n const DEFAULT_LOGGER_OPTIONS = {\r\n // eslint-disable-next-line @typescript-eslint/no-empty-function\r\n loggerCallback: () => {\r\n // allow users to not set logger call back\r\n },\r\n logLevel: LogLevel.Info,\r\n piiLoggingEnabled: false,\r\n };\r\n // Default system options for browser\r\n const DEFAULT_BROWSER_SYSTEM_OPTIONS = {\r\n ...DEFAULT_SYSTEM_OPTIONS,\r\n loggerOptions: DEFAULT_LOGGER_OPTIONS,\r\n networkClient: isBrowserEnvironment\r\n ? new FetchClient()\r\n : StubbedNetworkModule,\r\n navigationClient: new NavigationClient(),\r\n loadFrameTimeout: 0,\r\n // If loadFrameTimeout is provided, use that as default.\r\n windowHashTimeout: userInputSystem?.loadFrameTimeout || DEFAULT_POPUP_TIMEOUT_MS,\r\n iframeHashTimeout: userInputSystem?.loadFrameTimeout || DEFAULT_IFRAME_TIMEOUT_MS,\r\n navigateFrameWait: 0,\r\n redirectNavigationTimeout: DEFAULT_REDIRECT_TIMEOUT_MS,\r\n asyncPopups: false,\r\n allowRedirectInIframe: false,\r\n allowNativeBroker: false,\r\n nativeBrokerHandshakeTimeout: userInputSystem?.nativeBrokerHandshakeTimeout ||\r\n DEFAULT_NATIVE_BROKER_HANDSHAKE_TIMEOUT_MS,\r\n pollIntervalMilliseconds: BrowserConstants.DEFAULT_POLL_INTERVAL_MS,\r\n };\r\n const providedSystemOptions = {\r\n ...DEFAULT_BROWSER_SYSTEM_OPTIONS,\r\n ...userInputSystem,\r\n loggerOptions: userInputSystem?.loggerOptions || DEFAULT_LOGGER_OPTIONS,\r\n };\r\n const DEFAULT_TELEMETRY_OPTIONS = {\r\n application: {\r\n appName: Constants.EMPTY_STRING,\r\n appVersion: Constants.EMPTY_STRING,\r\n },\r\n client: new StubPerformanceClient(),\r\n };\r\n // Throw an error if user has set OIDCOptions without being in OIDC protocol mode\r\n if (userInputAuth?.protocolMode !== ProtocolMode.OIDC &&\r\n userInputAuth?.OIDCOptions) {\r\n const logger = new Logger(providedSystemOptions.loggerOptions);\r\n logger.warning(JSON.stringify(createClientConfigurationError(cannotSetOIDCOptions)));\r\n }\r\n // Throw an error if user has set allowNativeBroker to true without being in AAD protocol mode\r\n if (userInputAuth?.protocolMode &&\r\n userInputAuth.protocolMode !== ProtocolMode.AAD &&\r\n providedSystemOptions?.allowNativeBroker) {\r\n throw createClientConfigurationError(cannotAllowNativeBroker);\r\n }\r\n const overlayedConfig = {\r\n auth: {\r\n ...DEFAULT_AUTH_OPTIONS,\r\n ...userInputAuth,\r\n OIDCOptions: {\r\n ...DEFAULT_AUTH_OPTIONS.OIDCOptions,\r\n ...userInputAuth?.OIDCOptions,\r\n },\r\n },\r\n cache: { ...DEFAULT_CACHE_OPTIONS, ...userInputCache },\r\n system: providedSystemOptions,\r\n telemetry: { ...DEFAULT_TELEMETRY_OPTIONS, ...userInputTelemetry },\r\n };\r\n return overlayedConfig;\r\n}\n\n\n//# sourceMappingURL=Configuration.mjs.map\n\n;// ./node_modules/@azure/msal-browser/dist/packageMetadata.mjs\n/*! @azure/msal-browser v3.28.1 2025-01-14 */\n\n/* eslint-disable header/header */\r\nconst dist_packageMetadata_name = "@azure/msal-browser";\r\nconst packageMetadata_version = "3.28.1";\n\n\n//# sourceMappingURL=packageMetadata.mjs.map\n\n;// ./node_modules/@azure/msal-browser/dist/operatingcontext/BaseOperatingContext.mjs\n/*! @azure/msal-browser v3.28.1 2025-01-14 */\n\n\n\n\n\n\n/*\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License.\r\n */\r\n/**\r\n * Base class for operating context\r\n * Operating contexts are contexts in which MSAL.js is being run\r\n * More than one operating context may be available at a time\r\n * It\'s important from a logging and telemetry point of view for us to be able to identify the operating context.\r\n * For example: Some operating contexts will pre-cache tokens impacting performance telemetry\r\n */\r\nclass BaseOperatingContext {\r\n static loggerCallback(level, message) {\r\n switch (level) {\r\n case LogLevel.Error:\r\n // eslint-disable-next-line no-console\r\n console.error(message);\r\n return;\r\n case LogLevel.Info:\r\n // eslint-disable-next-line no-console\r\n console.info(message);\r\n return;\r\n case LogLevel.Verbose:\r\n // eslint-disable-next-line no-console\r\n console.debug(message);\r\n return;\r\n case LogLevel.Warning:\r\n // eslint-disable-next-line no-console\r\n console.warn(message);\r\n return;\r\n default:\r\n // eslint-disable-next-line no-console\r\n console.log(message);\r\n return;\r\n }\r\n }\r\n constructor(config) {\r\n /*\r\n * If loaded in an environment where window is not available,\r\n * set internal flag to false so that further requests fail.\r\n * This is to support server-side rendering environments.\r\n */\r\n this.browserEnvironment = typeof window !== "undefined";\r\n this.config = buildConfiguration(config, this.browserEnvironment);\r\n let sessionStorage;\r\n try {\r\n sessionStorage = window[BrowserCacheLocation.SessionStorage];\r\n // Mute errors if it\'s a non-browser environment or cookies are blocked.\r\n }\r\n catch (e) { }\r\n const logLevelKey = sessionStorage?.getItem(LOG_LEVEL_CACHE_KEY);\r\n const piiLoggingKey = sessionStorage\r\n ?.getItem(LOG_PII_CACHE_KEY)\r\n ?.toLowerCase();\r\n const piiLoggingEnabled = piiLoggingKey === "true"\r\n ? true\r\n : piiLoggingKey === "false"\r\n ? false\r\n : undefined;\r\n const loggerOptions = { ...this.config.system.loggerOptions };\r\n const logLevel = logLevelKey && Object.keys(LogLevel).includes(logLevelKey)\r\n ? LogLevel[logLevelKey]\r\n : undefined;\r\n if (logLevel) {\r\n loggerOptions.loggerCallback = BaseOperatingContext.loggerCallback;\r\n loggerOptions.logLevel = logLevel;\r\n }\r\n if (piiLoggingEnabled !== undefined) {\r\n loggerOptions.piiLoggingEnabled = piiLoggingEnabled;\r\n }\r\n this.logger = new Logger(loggerOptions, dist_packageMetadata_name, packageMetadata_version);\r\n this.available = false;\r\n }\r\n /**\r\n * Return the MSAL config\r\n * @returns BrowserConfiguration\r\n */\r\n getConfig() {\r\n return this.config;\r\n }\r\n /**\r\n * Returns the MSAL Logger\r\n * @returns Logger\r\n */\r\n getLogger() {\r\n return this.logger;\r\n }\r\n isAvailable() {\r\n return this.available;\r\n }\r\n isBrowserEnvironment() {\r\n return this.browserEnvironment;\r\n }\r\n}\n\n\n//# sourceMappingURL=BaseOperatingContext.mjs.map\n\n;// ./node_modules/@azure/msal-browser/dist/naa/BridgeStatusCode.mjs\n/*! @azure/msal-browser v3.28.1 2025-01-14 */\n\n/*\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License.\r\n */\r\nconst BridgeStatusCode = {\r\n UserInteractionRequired: "USER_INTERACTION_REQUIRED",\r\n UserCancel: "USER_CANCEL",\r\n NoNetwork: "NO_NETWORK",\r\n TransientError: "TRANSIENT_ERROR",\r\n PersistentError: "PERSISTENT_ERROR",\r\n Disabled: "DISABLED",\r\n AccountUnavailable: "ACCOUNT_UNAVAILABLE",\r\n NestedAppAuthUnavailable: "NESTED_APP_AUTH_UNAVAILABLE", // NAA is unavailable in the current context, can retry with standard browser based auth\r\n};\n\n\n//# sourceMappingURL=BridgeStatusCode.mjs.map\n\n;// ./node_modules/@azure/msal-browser/dist/naa/BridgeProxy.mjs\n/*! @azure/msal-browser v3.28.1 2025-01-14 */\n\n\n\n\n\n\n/*\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License.\r\n */\r\n/**\r\n * BridgeProxy\r\n * Provides a proxy for accessing a bridge to a host app and/or\r\n * platform broker\r\n */\r\nclass BridgeProxy {\r\n /**\r\n * initializeNestedAppAuthBridge - Initializes the bridge to the host app\r\n * @returns a promise that resolves to an InitializeBridgeResponse or rejects with an Error\r\n * @remarks This method will be called by the create factory method\r\n * @remarks If the bridge is not available, this method will throw an error\r\n */\r\n static async initializeNestedAppAuthBridge() {\r\n if (window === undefined) {\r\n throw new Error("window is undefined");\r\n }\r\n if (window.nestedAppAuthBridge === undefined) {\r\n throw new Error("window.nestedAppAuthBridge is undefined");\r\n }\r\n try {\r\n window.nestedAppAuthBridge.addEventListener("message", (response) => {\r\n const responsePayload = typeof response === "string" ? response : response.data;\r\n const responseEnvelope = JSON.parse(responsePayload);\r\n const request = BridgeProxy.bridgeRequests.find((element) => element.requestId === responseEnvelope.requestId);\r\n if (request !== undefined) {\r\n BridgeProxy.bridgeRequests.splice(BridgeProxy.bridgeRequests.indexOf(request), 1);\r\n if (responseEnvelope.success) {\r\n request.resolve(responseEnvelope);\r\n }\r\n else {\r\n request.reject(responseEnvelope.error);\r\n }\r\n }\r\n });\r\n const bridgeResponse = await new Promise((resolve, reject) => {\r\n const message = BridgeProxy.buildRequest("GetInitContext");\r\n const request = {\r\n requestId: message.requestId,\r\n method: message.method,\r\n resolve: resolve,\r\n reject: reject,\r\n };\r\n BridgeProxy.bridgeRequests.push(request);\r\n window.nestedAppAuthBridge.postMessage(JSON.stringify(message));\r\n });\r\n return BridgeProxy.validateBridgeResultOrThrow(bridgeResponse.initContext);\r\n }\r\n catch (error) {\r\n window.console.log(error);\r\n throw error;\r\n }\r\n }\r\n /**\r\n * getTokenInteractive - Attempts to get a token interactively from the bridge\r\n * @param request A token request\r\n * @returns a promise that resolves to an auth result or rejects with a BridgeError\r\n */\r\n getTokenInteractive(request) {\r\n return this.getToken("GetTokenPopup", request);\r\n }\r\n /**\r\n * getTokenSilent Attempts to get a token silently from the bridge\r\n * @param request A token request\r\n * @returns a promise that resolves to an auth result or rejects with a BridgeError\r\n */\r\n getTokenSilent(request) {\r\n return this.getToken("GetToken", request);\r\n }\r\n async getToken(requestType, request) {\r\n const result = await this.sendRequest(requestType, {\r\n tokenParams: request,\r\n });\r\n return {\r\n token: BridgeProxy.validateBridgeResultOrThrow(result.token),\r\n account: BridgeProxy.validateBridgeResultOrThrow(result.account),\r\n };\r\n }\r\n getHostCapabilities() {\r\n return this.capabilities ?? null;\r\n }\r\n getAccountContext() {\r\n return this.accountContext ? this.accountContext : null;\r\n }\r\n static buildRequest(method, requestParams) {\r\n return {\r\n messageType: "NestedAppAuthRequest",\r\n method: method,\r\n requestId: createNewGuid(),\r\n sendTime: Date.now(),\r\n clientLibrary: BrowserConstants.MSAL_SKU,\r\n clientLibraryVersion: packageMetadata_version,\r\n ...requestParams,\r\n };\r\n }\r\n /**\r\n * A method used to send a request to the bridge\r\n * @param request A token request\r\n * @returns a promise that resolves to a response of provided type or rejects with a BridgeError\r\n */\r\n sendRequest(method, requestParams) {\r\n const message = BridgeProxy.buildRequest(method, requestParams);\r\n const promise = new Promise((resolve, reject) => {\r\n const request = {\r\n requestId: message.requestId,\r\n method: message.method,\r\n resolve: resolve,\r\n reject: reject,\r\n };\r\n BridgeProxy.bridgeRequests.push(request);\r\n window.nestedAppAuthBridge.postMessage(JSON.stringify(message));\r\n });\r\n return promise;\r\n }\r\n static validateBridgeResultOrThrow(input) {\r\n if (input === undefined) {\r\n const bridgeError = {\r\n status: BridgeStatusCode.NestedAppAuthUnavailable,\r\n };\r\n throw bridgeError;\r\n }\r\n return input;\r\n }\r\n /**\r\n * Private constructor for BridgeProxy\r\n * @param sdkName The name of the SDK being used to make requests on behalf of the app\r\n * @param sdkVersion The version of the SDK being used to make requests on behalf of the app\r\n * @param capabilities The capabilities of the bridge / SDK / platform broker\r\n */\r\n constructor(sdkName, sdkVersion, accountContext, capabilities) {\r\n this.sdkName = sdkName;\r\n this.sdkVersion = sdkVersion;\r\n this.accountContext = accountContext;\r\n this.capabilities = capabilities;\r\n }\r\n /**\r\n * Factory method for creating an implementation of IBridgeProxy\r\n * @returns A promise that resolves to a BridgeProxy implementation\r\n */\r\n static async create() {\r\n const response = await BridgeProxy.initializeNestedAppAuthBridge();\r\n return new BridgeProxy(response.sdkName, response.sdkVersion, response.accountContext, response.capabilities);\r\n }\r\n}\r\nBridgeProxy.bridgeRequests = [];\n\n\n//# sourceMappingURL=BridgeProxy.mjs.map\n\n;// ./node_modules/@azure/msal-browser/dist/operatingcontext/NestedAppOperatingContext.mjs\n/*! @azure/msal-browser v3.28.1 2025-01-14 */\n\n\n\n\n/*\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License.\r\n */\r\nclass NestedAppOperatingContext extends BaseOperatingContext {\r\n constructor() {\r\n super(...arguments);\r\n this.bridgeProxy = undefined;\r\n this.accountContext = null;\r\n }\r\n /**\r\n * Return the module name. Intended for use with import() to enable dynamic import\r\n * of the implementation associated with this operating context\r\n * @returns\r\n */\r\n getModuleName() {\r\n return NestedAppOperatingContext.MODULE_NAME;\r\n }\r\n /**\r\n * Returns the unique identifier for this operating context\r\n * @returns string\r\n */\r\n getId() {\r\n return NestedAppOperatingContext.ID;\r\n }\r\n /**\r\n * Returns the current BridgeProxy\r\n * @returns IBridgeProxy | undefined\r\n */\r\n getBridgeProxy() {\r\n return this.bridgeProxy;\r\n }\r\n /**\r\n * Checks whether the operating context is available.\r\n * Confirms that the code is running a browser rather. This is required.\r\n * @returns Promise indicating whether this operating context is currently available.\r\n */\r\n async initialize() {\r\n try {\r\n if (typeof window !== "undefined") {\r\n if (typeof window.__initializeNestedAppAuth === "function") {\r\n await window.__initializeNestedAppAuth();\r\n }\r\n const bridgeProxy = await BridgeProxy.create();\r\n /*\r\n * Because we want single sign on we expect the host app to provide the account context\r\n * with a min set of params that can be used to identify the account\r\n * this.account = nestedApp.getAccountByFilter(bridgeProxy.getAccountContext());\r\n */\r\n this.accountContext = bridgeProxy.getAccountContext();\r\n this.bridgeProxy = bridgeProxy;\r\n this.available = bridgeProxy !== undefined;\r\n }\r\n }\r\n catch (ex) {\r\n this.logger.infoPii(`Could not initialize Nested App Auth bridge (${ex})`);\r\n }\r\n this.logger.info(`Nested App Auth Bridge available: ${this.available}`);\r\n return this.available;\r\n }\r\n}\r\n/*\r\n * TODO: Once we have determine the bundling code return here to specify the name of the bundle\r\n * containing the implementation for this operating context\r\n */\r\nNestedAppOperatingContext.MODULE_NAME = "";\r\n/**\r\n * Unique identifier for the operating context\r\n */\r\nNestedAppOperatingContext.ID = "NestedAppOperatingContext";\n\n\n//# sourceMappingURL=NestedAppOperatingContext.mjs.map\n\n;// ./node_modules/@azure/msal-browser/dist/operatingcontext/StandardOperatingContext.mjs\n/*! @azure/msal-browser v3.28.1 2025-01-14 */\n\n\n\n/*\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License.\r\n */\r\nclass StandardOperatingContext extends BaseOperatingContext {\r\n /**\r\n * Return the module name. Intended for use with import() to enable dynamic import\r\n * of the implementation associated with this operating context\r\n * @returns\r\n */\r\n getModuleName() {\r\n return StandardOperatingContext.MODULE_NAME;\r\n }\r\n /**\r\n * Returns the unique identifier for this operating context\r\n * @returns string\r\n */\r\n getId() {\r\n return StandardOperatingContext.ID;\r\n }\r\n /**\r\n * Checks whether the operating context is available.\r\n * Confirms that the code is running a browser rather. This is required.\r\n * @returns Promise indicating whether this operating context is currently available.\r\n */\r\n async initialize() {\r\n this.available = typeof window !== "undefined";\r\n return this.available;\r\n /*\r\n * NOTE: The standard context is available as long as there is a window. If/when we split out WAM from Browser\r\n * We can move the current contents of the initialize method to here and verify that the WAM extension is available\r\n */\r\n }\r\n}\r\n/*\r\n * TODO: Once we have determine the bundling code return here to specify the name of the bundle\r\n * containing the implementation for this operating context\r\n */\r\nStandardOperatingContext.MODULE_NAME = "";\r\n/**\r\n * Unique identifier for the operating context\r\n */\r\nStandardOperatingContext.ID = "StandardOperatingContext";\n\n\n//# sourceMappingURL=StandardOperatingContext.mjs.map\n\n;// ./node_modules/@azure/msal-common/dist/error/JoseHeaderErrorCodes.mjs\n/*! @azure/msal-common v14.16.0 2024-11-05 */\n\n/*\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License.\r\n */\r\nconst missingKidError = "missing_kid_error";\r\nconst missingAlgError = "missing_alg_error";\n\n\n//# sourceMappingURL=JoseHeaderErrorCodes.mjs.map\n\n;// ./node_modules/@azure/msal-common/dist/error/JoseHeaderError.mjs\n/*! @azure/msal-common v14.16.0 2024-11-05 */\n\n\n\n\n/*\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License.\r\n */\r\nconst JoseHeaderErrorMessages = {\r\n [missingKidError]: "The JOSE Header for the requested JWT, JWS or JWK object requires a keyId to be configured as the \'kid\' header claim. No \'kid\' value was provided.",\r\n [missingAlgError]: "The JOSE Header for the requested JWT, JWS or JWK object requires an algorithm to be specified as the \'alg\' header claim. No \'alg\' value was provided.",\r\n};\r\n/**\r\n * Error thrown when there is an error in the client code running on the browser.\r\n */\r\nclass JoseHeaderError extends AuthError {\r\n constructor(errorCode, errorMessage) {\r\n super(errorCode, errorMessage);\r\n this.name = "JoseHeaderError";\r\n Object.setPrototypeOf(this, JoseHeaderError.prototype);\r\n }\r\n}\r\n/** Returns JoseHeaderError object */\r\nfunction createJoseHeaderError(code) {\r\n return new JoseHeaderError(code, JoseHeaderErrorMessages[code]);\r\n}\n\n\n//# sourceMappingURL=JoseHeaderError.mjs.map\n\n;// ./node_modules/@azure/msal-common/dist/crypto/JoseHeader.mjs\n/*! @azure/msal-common v14.16.0 2024-11-05 */\n\n\n\n\n\n/*\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License.\r\n */\r\n/** @internal */\r\nclass JoseHeader {\r\n constructor(options) {\r\n this.typ = options.typ;\r\n this.alg = options.alg;\r\n this.kid = options.kid;\r\n }\r\n /**\r\n * Builds SignedHttpRequest formatted JOSE Header from the\r\n * JOSE Header options provided or previously set on the object and returns\r\n * the stringified header object.\r\n * Throws if keyId or algorithm aren\'t provided since they are required for Access Token Binding.\r\n * @param shrHeaderOptions\r\n * @returns\r\n */\r\n static getShrHeaderString(shrHeaderOptions) {\r\n // KeyID is required on the SHR header\r\n if (!shrHeaderOptions.kid) {\r\n throw createJoseHeaderError(missingKidError);\r\n }\r\n // Alg is required on the SHR header\r\n if (!shrHeaderOptions.alg) {\r\n throw createJoseHeaderError(missingAlgError);\r\n }\r\n const shrHeader = new JoseHeader({\r\n // Access Token PoP headers must have type pop, but the type header can be overriden for special cases\r\n typ: shrHeaderOptions.typ || JsonWebTokenTypes.Pop,\r\n kid: shrHeaderOptions.kid,\r\n alg: shrHeaderOptions.alg,\r\n });\r\n return JSON.stringify(shrHeader);\r\n }\r\n}\n\n\n//# sourceMappingURL=JoseHeader.mjs.map\n\n;// ./node_modules/@azure/msal-browser/dist/encode/Base64Decode.mjs\n/*! @azure/msal-browser v3.28.1 2025-01-14 */\n\n\n\n\n/*\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License.\r\n */\r\n/**\r\n * Class which exposes APIs to decode base64 strings to plaintext. See here for implementation details:\r\n * https://developer.mozilla.org/en-US/docs/Glossary/Base64#the_unicode_problem\r\n */\r\n/**\r\n * Returns a URL-safe plaintext decoded string from b64 encoded input.\r\n * @param input\r\n */\r\nfunction base64Decode(input) {\r\n return new TextDecoder().decode(base64DecToArr(input));\r\n}\r\n/**\r\n * Decodes base64 into Uint8Array\r\n * @param base64String\r\n */\r\nfunction base64DecToArr(base64String) {\r\n let encodedString = base64String.replace(/-/g, "+").replace(/_/g, "/");\r\n switch (encodedString.length % 4) {\r\n case 0:\r\n break;\r\n case 2:\r\n encodedString += "==";\r\n break;\r\n case 3:\r\n encodedString += "=";\r\n break;\r\n default:\r\n throw createBrowserAuthError(invalidBase64String);\r\n }\r\n const binString = atob(encodedString);\r\n return Uint8Array.from(binString, (m) => m.codePointAt(0) || 0);\r\n}\n\n\n//# sourceMappingURL=Base64Decode.mjs.map\n\n;// ./node_modules/@azure/msal-browser/dist/cache/DatabaseStorage.mjs\n/*! @azure/msal-browser v3.28.1 2025-01-14 */\n\n\n\n\n\n/*\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License.\r\n */\r\n/**\r\n * Storage wrapper for IndexedDB storage in browsers: https://developer.mozilla.org/en-US/docs/Web/API/IndexedDB_API\r\n */\r\nclass DatabaseStorage {\r\n constructor() {\r\n this.dbName = DB_NAME;\r\n this.version = DB_VERSION;\r\n this.tableName = DB_TABLE_NAME;\r\n this.dbOpen = false;\r\n }\r\n /**\r\n * Opens IndexedDB instance.\r\n */\r\n async open() {\r\n return new Promise((resolve, reject) => {\r\n const openDB = window.indexedDB.open(this.dbName, this.version);\r\n openDB.addEventListener("upgradeneeded", (e) => {\r\n const event = e;\r\n event.target.result.createObjectStore(this.tableName);\r\n });\r\n openDB.addEventListener("success", (e) => {\r\n const event = e;\r\n this.db = event.target.result;\r\n this.dbOpen = true;\r\n resolve();\r\n });\r\n openDB.addEventListener("error", () => reject(createBrowserAuthError(databaseUnavailable)));\r\n });\r\n }\r\n /**\r\n * Closes the connection to IndexedDB database when all pending transactions\r\n * complete.\r\n */\r\n closeConnection() {\r\n const db = this.db;\r\n if (db && this.dbOpen) {\r\n db.close();\r\n this.dbOpen = false;\r\n }\r\n }\r\n /**\r\n * Opens database if it\'s not already open\r\n */\r\n async validateDbIsOpen() {\r\n if (!this.dbOpen) {\r\n return this.open();\r\n }\r\n }\r\n /**\r\n * Retrieves item from IndexedDB instance.\r\n * @param key\r\n */\r\n async getItem(key) {\r\n await this.validateDbIsOpen();\r\n return new Promise((resolve, reject) => {\r\n // TODO: Add timeouts?\r\n if (!this.db) {\r\n return reject(createBrowserAuthError(databaseNotOpen));\r\n }\r\n const transaction = this.db.transaction([this.tableName], "readonly");\r\n const objectStore = transaction.objectStore(this.tableName);\r\n const dbGet = objectStore.get(key);\r\n dbGet.addEventListener("success", (e) => {\r\n const event = e;\r\n this.closeConnection();\r\n resolve(event.target.result);\r\n });\r\n dbGet.addEventListener("error", (e) => {\r\n this.closeConnection();\r\n reject(e);\r\n });\r\n });\r\n }\r\n /**\r\n * Adds item to IndexedDB under given key\r\n * @param key\r\n * @param payload\r\n */\r\n async setItem(key, payload) {\r\n await this.validateDbIsOpen();\r\n return new Promise((resolve, reject) => {\r\n // TODO: Add timeouts?\r\n if (!this.db) {\r\n return reject(createBrowserAuthError(databaseNotOpen));\r\n }\r\n const transaction = this.db.transaction([this.tableName], "readwrite");\r\n const objectStore = transaction.objectStore(this.tableName);\r\n const dbPut = objectStore.put(payload, key);\r\n dbPut.addEventListener("success", () => {\r\n this.closeConnection();\r\n resolve();\r\n });\r\n dbPut.addEventListener("error", (e) => {\r\n this.closeConnection();\r\n reject(e);\r\n });\r\n });\r\n }\r\n /**\r\n * Removes item from IndexedDB under given key\r\n * @param key\r\n */\r\n async removeItem(key) {\r\n await this.validateDbIsOpen();\r\n return new Promise((resolve, reject) => {\r\n if (!this.db) {\r\n return reject(createBrowserAuthError(databaseNotOpen));\r\n }\r\n const transaction = this.db.transaction([this.tableName], "readwrite");\r\n const objectStore = transaction.objectStore(this.tableName);\r\n const dbDelete = objectStore.delete(key);\r\n dbDelete.addEventListener("success", () => {\r\n this.closeConnection();\r\n resolve();\r\n });\r\n dbDelete.addEventListener("error", (e) => {\r\n this.closeConnection();\r\n reject(e);\r\n });\r\n });\r\n }\r\n /**\r\n * Get all the keys from the storage object as an iterable array of strings.\r\n */\r\n async getKeys() {\r\n await this.validateDbIsOpen();\r\n return new Promise((resolve, reject) => {\r\n if (!this.db) {\r\n return reject(createBrowserAuthError(databaseNotOpen));\r\n }\r\n const transaction = this.db.transaction([this.tableName], "readonly");\r\n const objectStore = transaction.objectStore(this.tableName);\r\n const dbGetKeys = objectStore.getAllKeys();\r\n dbGetKeys.addEventListener("success", (e) => {\r\n const event = e;\r\n this.closeConnection();\r\n resolve(event.target.result);\r\n });\r\n dbGetKeys.addEventListener("error", (e) => {\r\n this.closeConnection();\r\n reject(e);\r\n });\r\n });\r\n }\r\n /**\r\n *\r\n * Checks whether there is an object under the search key in the object store\r\n */\r\n async containsKey(key) {\r\n await this.validateDbIsOpen();\r\n return new Promise((resolve, reject) => {\r\n if (!this.db) {\r\n return reject(createBrowserAuthError(databaseNotOpen));\r\n }\r\n const transaction = this.db.transaction([this.tableName], "readonly");\r\n const objectStore = transaction.objectStore(this.tableName);\r\n const dbContainsKey = objectStore.count(key);\r\n dbContainsKey.addEventListener("success", (e) => {\r\n const event = e;\r\n this.closeConnection();\r\n resolve(event.target.result === 1);\r\n });\r\n dbContainsKey.addEventListener("error", (e) => {\r\n this.closeConnection();\r\n reject(e);\r\n });\r\n });\r\n }\r\n /**\r\n * Deletes the MSAL database. The database is deleted rather than cleared to make it possible\r\n * for client applications to downgrade to a previous MSAL version without worrying about forward compatibility issues\r\n * with IndexedDB database versions.\r\n */\r\n async deleteDatabase() {\r\n // Check if database being deleted exists\r\n if (this.db && this.dbOpen) {\r\n this.closeConnection();\r\n }\r\n return new Promise((resolve, reject) => {\r\n const deleteDbRequest = window.indexedDB.deleteDatabase(DB_NAME);\r\n const id = setTimeout(() => reject(false), 200); // Reject if events aren\'t raised within 200ms\r\n deleteDbRequest.addEventListener("success", () => {\r\n clearTimeout(id);\r\n return resolve(true);\r\n });\r\n deleteDbRequest.addEventListener("blocked", () => {\r\n clearTimeout(id);\r\n return resolve(true);\r\n });\r\n deleteDbRequest.addEventListener("error", () => {\r\n clearTimeout(id);\r\n return reject(false);\r\n });\r\n });\r\n }\r\n}\n\n\n//# sourceMappingURL=DatabaseStorage.mjs.map\n\n;// ./node_modules/@azure/msal-browser/dist/cache/MemoryStorage.mjs\n/*! @azure/msal-browser v3.28.1 2025-01-14 */\n\n/*\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License.\r\n */\r\nclass MemoryStorage {\r\n constructor() {\r\n this.cache = new Map();\r\n }\r\n getItem(key) {\r\n return this.cache.get(key) || null;\r\n }\r\n setItem(key, value) {\r\n this.cache.set(key, value);\r\n }\r\n removeItem(key) {\r\n this.cache.delete(key);\r\n }\r\n getKeys() {\r\n const cacheKeys = [];\r\n this.cache.forEach((value, key) => {\r\n cacheKeys.push(key);\r\n });\r\n return cacheKeys;\r\n }\r\n containsKey(key) {\r\n return this.cache.has(key);\r\n }\r\n clear() {\r\n this.cache.clear();\r\n }\r\n}\n\n\n//# sourceMappingURL=MemoryStorage.mjs.map\n\n;// ./node_modules/@azure/msal-browser/dist/cache/AsyncMemoryStorage.mjs\n/*! @azure/msal-browser v3.28.1 2025-01-14 */\n\n\n\n\n\n\n/*\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License.\r\n */\r\n/**\r\n * This class allows MSAL to store artifacts asynchronously using the DatabaseStorage IndexedDB wrapper,\r\n * backed up with the more volatile MemoryStorage object for cases in which IndexedDB may be unavailable.\r\n */\r\nclass AsyncMemoryStorage {\r\n constructor(logger) {\r\n this.inMemoryCache = new MemoryStorage();\r\n this.indexedDBCache = new DatabaseStorage();\r\n this.logger = logger;\r\n }\r\n handleDatabaseAccessError(error) {\r\n if (error instanceof BrowserAuthError &&\r\n error.errorCode === databaseUnavailable) {\r\n this.logger.error("Could not access persistent storage. This may be caused by browser privacy features which block persistent storage in third-party contexts.");\r\n }\r\n else {\r\n throw error;\r\n }\r\n }\r\n /**\r\n * Get the item matching the given key. Tries in-memory cache first, then in the asynchronous\r\n * storage object if item isn\'t found in-memory.\r\n * @param key\r\n */\r\n async getItem(key) {\r\n const item = this.inMemoryCache.getItem(key);\r\n if (!item) {\r\n try {\r\n this.logger.verbose("Queried item not found in in-memory cache, now querying persistent storage.");\r\n return await this.indexedDBCache.getItem(key);\r\n }\r\n catch (e) {\r\n this.handleDatabaseAccessError(e);\r\n }\r\n }\r\n return item;\r\n }\r\n /**\r\n * Sets the item in the in-memory cache and then tries to set it in the asynchronous\r\n * storage object with the given key.\r\n * @param key\r\n * @param value\r\n */\r\n async setItem(key, value) {\r\n this.inMemoryCache.setItem(key, value);\r\n try {\r\n await this.indexedDBCache.setItem(key, value);\r\n }\r\n catch (e) {\r\n this.handleDatabaseAccessError(e);\r\n }\r\n }\r\n /**\r\n * Removes the item matching the key from the in-memory cache, then tries to remove it from the asynchronous storage object.\r\n * @param key\r\n */\r\n async removeItem(key) {\r\n this.inMemoryCache.removeItem(key);\r\n try {\r\n await this.indexedDBCache.removeItem(key);\r\n }\r\n catch (e) {\r\n this.handleDatabaseAccessError(e);\r\n }\r\n }\r\n /**\r\n * Get all the keys from the in-memory cache as an iterable array of strings. If no keys are found, query the keys in the\r\n * asynchronous storage object.\r\n */\r\n async getKeys() {\r\n const cacheKeys = this.inMemoryCache.getKeys();\r\n if (cacheKeys.length === 0) {\r\n try {\r\n this.logger.verbose("In-memory cache is empty, now querying persistent storage.");\r\n return await this.indexedDBCache.getKeys();\r\n }\r\n catch (e) {\r\n this.handleDatabaseAccessError(e);\r\n }\r\n }\r\n return cacheKeys;\r\n }\r\n /**\r\n * Returns true or false if the given key is present in the cache.\r\n * @param key\r\n */\r\n async containsKey(key) {\r\n const containsKey = this.inMemoryCache.containsKey(key);\r\n if (!containsKey) {\r\n try {\r\n this.logger.verbose("Key not found in in-memory cache, now querying persistent storage.");\r\n return await this.indexedDBCache.containsKey(key);\r\n }\r\n catch (e) {\r\n this.handleDatabaseAccessError(e);\r\n }\r\n }\r\n return containsKey;\r\n }\r\n /**\r\n * Clears in-memory Map\r\n */\r\n clearInMemory() {\r\n // InMemory cache is a Map instance, clear is straightforward\r\n this.logger.verbose(`Deleting in-memory keystore`);\r\n this.inMemoryCache.clear();\r\n this.logger.verbose(`In-memory keystore deleted`);\r\n }\r\n /**\r\n * Tries to delete the IndexedDB database\r\n * @returns\r\n */\r\n async clearPersistent() {\r\n try {\r\n this.logger.verbose("Deleting persistent keystore");\r\n const dbDeleted = await this.indexedDBCache.deleteDatabase();\r\n if (dbDeleted) {\r\n this.logger.verbose("Persistent keystore deleted");\r\n }\r\n return dbDeleted;\r\n }\r\n catch (e) {\r\n this.handleDatabaseAccessError(e);\r\n return false;\r\n }\r\n }\r\n}\n\n\n//# sourceMappingURL=AsyncMemoryStorage.mjs.map\n\n;// ./node_modules/@azure/msal-browser/dist/crypto/CryptoOps.mjs\n/*! @azure/msal-browser v3.28.1 2025-01-14 */\n\n\n\n\n\n\n\n\n\n/*\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License.\r\n */\r\n/**\r\n * This class implements MSAL\'s crypto interface, which allows it to perform base64 encoding and decoding, generating cryptographically random GUIDs and\r\n * implementing Proof Key for Code Exchange specs for the OAuth Authorization Code Flow using PKCE (rfc here: https://tools.ietf.org/html/rfc7636).\r\n */\r\nclass CryptoOps {\r\n constructor(logger, performanceClient, skipValidateSubtleCrypto) {\r\n this.logger = logger;\r\n // Browser crypto needs to be validated first before any other classes can be set.\r\n validateCryptoAvailable(skipValidateSubtleCrypto ?? false);\r\n this.cache = new AsyncMemoryStorage(this.logger);\r\n this.performanceClient = performanceClient;\r\n }\r\n /**\r\n * Creates a new random GUID - used to populate state and nonce.\r\n * @returns string (GUID)\r\n */\r\n createNewGuid() {\r\n return createNewGuid();\r\n }\r\n /**\r\n * Encodes input string to base64.\r\n * @param input\r\n */\r\n base64Encode(input) {\r\n return base64Encode(input);\r\n }\r\n /**\r\n * Decodes input string from base64.\r\n * @param input\r\n */\r\n base64Decode(input) {\r\n return base64Decode(input);\r\n }\r\n /**\r\n * Encodes input string to base64 URL safe string.\r\n * @param input\r\n */\r\n base64UrlEncode(input) {\r\n return urlEncode(input);\r\n }\r\n /**\r\n * Stringifies and base64Url encodes input public key\r\n * @param inputKid\r\n * @returns Base64Url encoded public key\r\n */\r\n encodeKid(inputKid) {\r\n return this.base64UrlEncode(JSON.stringify({ kid: inputKid }));\r\n }\r\n /**\r\n * Generates a keypair, stores it and returns a thumbprint\r\n * @param request\r\n */\r\n async getPublicKeyThumbprint(request) {\r\n const publicKeyThumbMeasurement = this.performanceClient?.startMeasurement(PerformanceEvents.CryptoOptsGetPublicKeyThumbprint, request.correlationId);\r\n // Generate Keypair\r\n const keyPair = await generateKeyPair(CryptoOps.EXTRACTABLE, CryptoOps.POP_KEY_USAGES);\r\n // Generate Thumbprint for Public Key\r\n const publicKeyJwk = await exportJwk(keyPair.publicKey);\r\n const pubKeyThumprintObj = {\r\n e: publicKeyJwk.e,\r\n kty: publicKeyJwk.kty,\r\n n: publicKeyJwk.n,\r\n };\r\n const publicJwkString = getSortedObjectString(pubKeyThumprintObj);\r\n const publicJwkHash = await this.hashString(publicJwkString);\r\n // Generate Thumbprint for Private Key\r\n const privateKeyJwk = await exportJwk(keyPair.privateKey);\r\n // Re-import private key to make it unextractable\r\n const unextractablePrivateKey = await importJwk(privateKeyJwk, false, ["sign"]);\r\n // Store Keypair data in keystore\r\n await this.cache.setItem(publicJwkHash, {\r\n privateKey: unextractablePrivateKey,\r\n publicKey: keyPair.publicKey,\r\n requestMethod: request.resourceRequestMethod,\r\n requestUri: request.resourceRequestUri,\r\n });\r\n if (publicKeyThumbMeasurement) {\r\n publicKeyThumbMeasurement.end({\r\n success: true,\r\n });\r\n }\r\n return publicJwkHash;\r\n }\r\n /**\r\n * Removes cryptographic keypair from key store matching the keyId passed in\r\n * @param kid\r\n */\r\n async removeTokenBindingKey(kid) {\r\n await this.cache.removeItem(kid);\r\n const keyFound = await this.cache.containsKey(kid);\r\n return !keyFound;\r\n }\r\n /**\r\n * Removes all cryptographic keys from IndexedDB storage\r\n */\r\n async clearKeystore() {\r\n // Delete in-memory keystores\r\n this.cache.clearInMemory();\r\n /**\r\n * There is only one database, so calling clearPersistent on asymmetric keystore takes care of\r\n * every persistent keystore\r\n */\r\n try {\r\n await this.cache.clearPersistent();\r\n return true;\r\n }\r\n catch (e) {\r\n if (e instanceof Error) {\r\n this.logger.error(`Clearing keystore failed with error: ${e.message}`);\r\n }\r\n else {\r\n this.logger.error("Clearing keystore failed with unknown error");\r\n }\r\n return false;\r\n }\r\n }\r\n /**\r\n * Signs the given object as a jwt payload with private key retrieved by given kid.\r\n * @param payload\r\n * @param kid\r\n */\r\n async signJwt(payload, kid, shrOptions, correlationId) {\r\n const signJwtMeasurement = this.performanceClient?.startMeasurement(PerformanceEvents.CryptoOptsSignJwt, correlationId);\r\n const cachedKeyPair = await this.cache.getItem(kid);\r\n if (!cachedKeyPair) {\r\n throw createBrowserAuthError(cryptoKeyNotFound);\r\n }\r\n // Get public key as JWK\r\n const publicKeyJwk = await exportJwk(cachedKeyPair.publicKey);\r\n const publicKeyJwkString = getSortedObjectString(publicKeyJwk);\r\n // Base64URL encode public key thumbprint with keyId only: BASE64URL({ kid: "FULL_PUBLIC_KEY_HASH" })\r\n const encodedKeyIdThumbprint = urlEncode(JSON.stringify({ kid: kid }));\r\n // Generate header\r\n const shrHeader = JoseHeader.getShrHeaderString({\r\n ...shrOptions?.header,\r\n alg: publicKeyJwk.alg,\r\n kid: encodedKeyIdThumbprint,\r\n });\r\n const encodedShrHeader = urlEncode(shrHeader);\r\n // Generate payload\r\n payload.cnf = {\r\n jwk: JSON.parse(publicKeyJwkString),\r\n };\r\n const encodedPayload = urlEncode(JSON.stringify(payload));\r\n // Form token string\r\n const tokenString = `${encodedShrHeader}.${encodedPayload}`;\r\n // Sign token\r\n const encoder = new TextEncoder();\r\n const tokenBuffer = encoder.encode(tokenString);\r\n const signatureBuffer = await sign(cachedKeyPair.privateKey, tokenBuffer);\r\n const encodedSignature = urlEncodeArr(new Uint8Array(signatureBuffer));\r\n const signedJwt = `${tokenString}.${encodedSignature}`;\r\n if (signJwtMeasurement) {\r\n signJwtMeasurement.end({\r\n success: true,\r\n });\r\n }\r\n return signedJwt;\r\n }\r\n /**\r\n * Returns the SHA-256 hash of an input string\r\n * @param plainText\r\n */\r\n async hashString(plainText) {\r\n return hashString(plainText);\r\n }\r\n}\r\nCryptoOps.POP_KEY_USAGES = ["sign", "verify"];\r\nCryptoOps.EXTRACTABLE = true;\r\nfunction getSortedObjectString(obj) {\r\n return JSON.stringify(obj, Object.keys(obj).sort());\r\n}\n\n\n//# sourceMappingURL=CryptoOps.mjs.map\n\n;// ./node_modules/@azure/msal-common/dist/authority/OpenIdConfigResponse.mjs\n/*! @azure/msal-common v14.16.0 2024-11-05 */\n\n/*\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License.\r\n */\r\nfunction isOpenIdConfigResponse(response) {\r\n return (response.hasOwnProperty("authorization_endpoint") &&\r\n response.hasOwnProperty("token_endpoint") &&\r\n response.hasOwnProperty("issuer") &&\r\n response.hasOwnProperty("jwks_uri"));\r\n}\n\n\n//# sourceMappingURL=OpenIdConfigResponse.mjs.map\n\n;// ./node_modules/@azure/msal-common/dist/authority/CloudInstanceDiscoveryResponse.mjs\n/*! @azure/msal-common v14.16.0 2024-11-05 */\n\n/*\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License.\r\n */\r\nfunction isCloudInstanceDiscoveryResponse(response) {\r\n return (response.hasOwnProperty("tenant_discovery_endpoint") &&\r\n response.hasOwnProperty("metadata"));\r\n}\n\n\n//# sourceMappingURL=CloudInstanceDiscoveryResponse.mjs.map\n\n;// ./node_modules/@azure/msal-common/dist/authority/CloudInstanceDiscoveryErrorResponse.mjs\n/*! @azure/msal-common v14.16.0 2024-11-05 */\n\n/*\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License.\r\n */\r\nfunction isCloudInstanceDiscoveryErrorResponse(response) {\r\n return (response.hasOwnProperty("error") &&\r\n response.hasOwnProperty("error_description"));\r\n}\n\n\n//# sourceMappingURL=CloudInstanceDiscoveryErrorResponse.mjs.map\n\n;// ./node_modules/@azure/msal-common/dist/authority/RegionDiscovery.mjs\n/*! @azure/msal-common v14.16.0 2024-11-05 */\n\n\n\n\n\n/*\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License.\r\n */\r\nclass RegionDiscovery {\r\n constructor(networkInterface, logger, performanceClient, correlationId) {\r\n this.networkInterface = networkInterface;\r\n this.logger = logger;\r\n this.performanceClient = performanceClient;\r\n this.correlationId = correlationId;\r\n }\r\n /**\r\n * Detect the region from the application\'s environment.\r\n *\r\n * @returns Promise\r\n */\r\n async detectRegion(environmentRegion, regionDiscoveryMetadata) {\r\n this.performanceClient?.addQueueMeasurement(PerformanceEvents.RegionDiscoveryDetectRegion, this.correlationId);\r\n // Initialize auto detected region with the region from the envrionment\r\n let autodetectedRegionName = environmentRegion;\r\n // Check if a region was detected from the environment, if not, attempt to get the region from IMDS\r\n if (!autodetectedRegionName) {\r\n const options = RegionDiscovery.IMDS_OPTIONS;\r\n try {\r\n const localIMDSVersionResponse = await invokeAsync(this.getRegionFromIMDS.bind(this), PerformanceEvents.RegionDiscoveryGetRegionFromIMDS, this.logger, this.performanceClient, this.correlationId)(Constants.IMDS_VERSION, options);\r\n if (localIMDSVersionResponse.status ===\r\n ResponseCodes.httpSuccess) {\r\n autodetectedRegionName = localIMDSVersionResponse.body;\r\n regionDiscoveryMetadata.region_source =\r\n RegionDiscoverySources.IMDS;\r\n }\r\n // If the response using the local IMDS version failed, try to fetch the current version of IMDS and retry.\r\n if (localIMDSVersionResponse.status ===\r\n ResponseCodes.httpBadRequest) {\r\n const currentIMDSVersion = await invokeAsync(this.getCurrentVersion.bind(this), PerformanceEvents.RegionDiscoveryGetCurrentVersion, this.logger, this.performanceClient, this.correlationId)(options);\r\n if (!currentIMDSVersion) {\r\n regionDiscoveryMetadata.region_source =\r\n RegionDiscoverySources.FAILED_AUTO_DETECTION;\r\n return null;\r\n }\r\n const currentIMDSVersionResponse = await invokeAsync(this.getRegionFromIMDS.bind(this), PerformanceEvents.RegionDiscoveryGetRegionFromIMDS, this.logger, this.performanceClient, this.correlationId)(currentIMDSVersion, options);\r\n if (currentIMDSVersionResponse.status ===\r\n ResponseCodes.httpSuccess) {\r\n autodetectedRegionName =\r\n currentIMDSVersionResponse.body;\r\n regionDiscoveryMetadata.region_source =\r\n RegionDiscoverySources.IMDS;\r\n }\r\n }\r\n }\r\n catch (e) {\r\n regionDiscoveryMetadata.region_source =\r\n RegionDiscoverySources.FAILED_AUTO_DETECTION;\r\n return null;\r\n }\r\n }\r\n else {\r\n regionDiscoveryMetadata.region_source =\r\n RegionDiscoverySources.ENVIRONMENT_VARIABLE;\r\n }\r\n // If no region was auto detected from the environment or from the IMDS endpoint, mark the attempt as a FAILED_AUTO_DETECTION\r\n if (!autodetectedRegionName) {\r\n regionDiscoveryMetadata.region_source =\r\n RegionDiscoverySources.FAILED_AUTO_DETECTION;\r\n }\r\n return autodetectedRegionName || null;\r\n }\r\n /**\r\n * Make the call to the IMDS endpoint\r\n *\r\n * @param imdsEndpointUrl\r\n * @returns Promise>\r\n */\r\n async getRegionFromIMDS(version, options) {\r\n this.performanceClient?.addQueueMeasurement(PerformanceEvents.RegionDiscoveryGetRegionFromIMDS, this.correlationId);\r\n return this.networkInterface.sendGetRequestAsync(`${Constants.IMDS_ENDPOINT}?api-version=${version}&format=text`, options, Constants.IMDS_TIMEOUT);\r\n }\r\n /**\r\n * Get the most recent version of the IMDS endpoint available\r\n *\r\n * @returns Promise\r\n */\r\n async getCurrentVersion(options) {\r\n this.performanceClient?.addQueueMeasurement(PerformanceEvents.RegionDiscoveryGetCurrentVersion, this.correlationId);\r\n try {\r\n const response = await this.networkInterface.sendGetRequestAsync(`${Constants.IMDS_ENDPOINT}?format=json`, options);\r\n // When IMDS endpoint is called without the api version query param, bad request response comes back with latest version.\r\n if (response.status === ResponseCodes.httpBadRequest &&\r\n response.body &&\r\n response.body["newest-versions"] &&\r\n response.body["newest-versions"].length > 0) {\r\n return response.body["newest-versions"][0];\r\n }\r\n return null;\r\n }\r\n catch (e) {\r\n return null;\r\n }\r\n }\r\n}\r\n// Options for the IMDS endpoint request\r\nRegionDiscovery.IMDS_OPTIONS = {\r\n headers: {\r\n Metadata: "true",\r\n },\r\n};\n\n\n//# sourceMappingURL=RegionDiscovery.mjs.map\n\n;// ./node_modules/@azure/msal-common/dist/authority/Authority.mjs\n/*! @azure/msal-common v14.16.0 2024-11-05 */\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n/*\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License.\r\n */\r\n/**\r\n * The authority class validates the authority URIs used by the user, and retrieves the OpenID Configuration Data from the\r\n * endpoint. It will store the pertinent config data in this object for use during token calls.\r\n * @internal\r\n */\r\nclass Authority {\r\n constructor(authority, networkInterface, cacheManager, authorityOptions, logger, correlationId, performanceClient, managedIdentity) {\r\n this.canonicalAuthority = authority;\r\n this._canonicalAuthority.validateAsUri();\r\n this.networkInterface = networkInterface;\r\n this.cacheManager = cacheManager;\r\n this.authorityOptions = authorityOptions;\r\n this.regionDiscoveryMetadata = {\r\n region_used: undefined,\r\n region_source: undefined,\r\n region_outcome: undefined,\r\n };\r\n this.logger = logger;\r\n this.performanceClient = performanceClient;\r\n this.correlationId = correlationId;\r\n this.managedIdentity = managedIdentity || false;\r\n this.regionDiscovery = new RegionDiscovery(networkInterface, this.logger, this.performanceClient, this.correlationId);\r\n }\r\n /**\r\n * Get {@link AuthorityType}\r\n * @param authorityUri {@link IUri}\r\n * @private\r\n */\r\n getAuthorityType(authorityUri) {\r\n // CIAM auth url pattern is being standardized as: .ciamlogin.com\r\n if (authorityUri.HostNameAndPort.endsWith(Constants.CIAM_AUTH_URL)) {\r\n return AuthorityType.Ciam;\r\n }\r\n const pathSegments = authorityUri.PathSegments;\r\n if (pathSegments.length) {\r\n switch (pathSegments[0].toLowerCase()) {\r\n case Constants.ADFS:\r\n return AuthorityType.Adfs;\r\n case Constants.DSTS:\r\n return AuthorityType.Dsts;\r\n }\r\n }\r\n return AuthorityType.Default;\r\n }\r\n // See above for AuthorityType\r\n get authorityType() {\r\n return this.getAuthorityType(this.canonicalAuthorityUrlComponents);\r\n }\r\n /**\r\n * ProtocolMode enum representing the way endpoints are constructed.\r\n */\r\n get protocolMode() {\r\n return this.authorityOptions.protocolMode;\r\n }\r\n /**\r\n * Returns authorityOptions which can be used to reinstantiate a new authority instance\r\n */\r\n get options() {\r\n return this.authorityOptions;\r\n }\r\n /**\r\n * A URL that is the authority set by the developer\r\n */\r\n get canonicalAuthority() {\r\n return this._canonicalAuthority.urlString;\r\n }\r\n /**\r\n * Sets canonical authority.\r\n */\r\n set canonicalAuthority(url) {\r\n this._canonicalAuthority = new UrlString(url);\r\n this._canonicalAuthority.validateAsUri();\r\n this._canonicalAuthorityUrlComponents = null;\r\n }\r\n /**\r\n * Get authority components.\r\n */\r\n get canonicalAuthorityUrlComponents() {\r\n if (!this._canonicalAuthorityUrlComponents) {\r\n this._canonicalAuthorityUrlComponents =\r\n this._canonicalAuthority.getUrlComponents();\r\n }\r\n return this._canonicalAuthorityUrlComponents;\r\n }\r\n /**\r\n * Get hostname and port i.e. login.microsoftonline.com\r\n */\r\n get hostnameAndPort() {\r\n return this.canonicalAuthorityUrlComponents.HostNameAndPort.toLowerCase();\r\n }\r\n /**\r\n * Get tenant for authority.\r\n */\r\n get tenant() {\r\n return this.canonicalAuthorityUrlComponents.PathSegments[0];\r\n }\r\n /**\r\n * OAuth /authorize endpoint for requests\r\n */\r\n get authorizationEndpoint() {\r\n if (this.discoveryComplete()) {\r\n return this.replacePath(this.metadata.authorization_endpoint);\r\n }\r\n else {\r\n throw createClientAuthError(endpointResolutionError);\r\n }\r\n }\r\n /**\r\n * OAuth /token endpoint for requests\r\n */\r\n get tokenEndpoint() {\r\n if (this.discoveryComplete()) {\r\n return this.replacePath(this.metadata.token_endpoint);\r\n }\r\n else {\r\n throw createClientAuthError(endpointResolutionError);\r\n }\r\n }\r\n get deviceCodeEndpoint() {\r\n if (this.discoveryComplete()) {\r\n return this.replacePath(this.metadata.token_endpoint.replace("/token", "/devicecode"));\r\n }\r\n else {\r\n throw createClientAuthError(endpointResolutionError);\r\n }\r\n }\r\n /**\r\n * OAuth logout endpoint for requests\r\n */\r\n get endSessionEndpoint() {\r\n if (this.discoveryComplete()) {\r\n // ROPC policies may not have end_session_endpoint set\r\n if (!this.metadata.end_session_endpoint) {\r\n throw createClientAuthError(endSessionEndpointNotSupported);\r\n }\r\n return this.replacePath(this.metadata.end_session_endpoint);\r\n }\r\n else {\r\n throw createClientAuthError(endpointResolutionError);\r\n }\r\n }\r\n /**\r\n * OAuth issuer for requests\r\n */\r\n get selfSignedJwtAudience() {\r\n if (this.discoveryComplete()) {\r\n return this.replacePath(this.metadata.issuer);\r\n }\r\n else {\r\n throw createClientAuthError(endpointResolutionError);\r\n }\r\n }\r\n /**\r\n * Jwks_uri for token signing keys\r\n */\r\n get jwksUri() {\r\n if (this.discoveryComplete()) {\r\n return this.replacePath(this.metadata.jwks_uri);\r\n }\r\n else {\r\n throw createClientAuthError(endpointResolutionError);\r\n }\r\n }\r\n /**\r\n * Returns a flag indicating that tenant name can be replaced in authority {@link IUri}\r\n * @param authorityUri {@link IUri}\r\n * @private\r\n */\r\n canReplaceTenant(authorityUri) {\r\n return (authorityUri.PathSegments.length === 1 &&\r\n !Authority.reservedTenantDomains.has(authorityUri.PathSegments[0]) &&\r\n this.getAuthorityType(authorityUri) === AuthorityType.Default &&\r\n this.protocolMode === ProtocolMode.AAD);\r\n }\r\n /**\r\n * Replaces tenant in url path with current tenant. Defaults to common.\r\n * @param urlString\r\n */\r\n replaceTenant(urlString) {\r\n return urlString.replace(/{tenant}|{tenantid}/g, this.tenant);\r\n }\r\n /**\r\n * Replaces path such as tenant or policy with the current tenant or policy.\r\n * @param urlString\r\n */\r\n replacePath(urlString) {\r\n let endpoint = urlString;\r\n const cachedAuthorityUrl = new UrlString(this.metadata.canonical_authority);\r\n const cachedAuthorityUrlComponents = cachedAuthorityUrl.getUrlComponents();\r\n const cachedAuthorityParts = cachedAuthorityUrlComponents.PathSegments;\r\n const currentAuthorityParts = this.canonicalAuthorityUrlComponents.PathSegments;\r\n currentAuthorityParts.forEach((currentPart, index) => {\r\n let cachedPart = cachedAuthorityParts[index];\r\n if (index === 0 &&\r\n this.canReplaceTenant(cachedAuthorityUrlComponents)) {\r\n const tenantId = new UrlString(this.metadata.authorization_endpoint).getUrlComponents().PathSegments[0];\r\n /**\r\n * Check if AAD canonical authority contains tenant domain name, for example "testdomain.onmicrosoft.com",\r\n * by comparing its first path segment to the corresponding authorization endpoint path segment, which is\r\n * always resolved with tenant id by OIDC.\r\n */\r\n if (cachedPart !== tenantId) {\r\n this.logger.verbose(`Replacing tenant domain name ${cachedPart} with id ${tenantId}`);\r\n cachedPart = tenantId;\r\n }\r\n }\r\n if (currentPart !== cachedPart) {\r\n endpoint = endpoint.replace(`/${cachedPart}/`, `/${currentPart}/`);\r\n }\r\n });\r\n return this.replaceTenant(endpoint);\r\n }\r\n /**\r\n * The default open id configuration endpoint for any canonical authority.\r\n */\r\n get defaultOpenIdConfigurationEndpoint() {\r\n const canonicalAuthorityHost = this.hostnameAndPort;\r\n if (this.canonicalAuthority.endsWith("v2.0/") ||\r\n this.authorityType === AuthorityType.Adfs ||\r\n (this.protocolMode !== ProtocolMode.AAD &&\r\n !this.isAliasOfKnownMicrosoftAuthority(canonicalAuthorityHost))) {\r\n return `${this.canonicalAuthority}.well-known/openid-configuration`;\r\n }\r\n return `${this.canonicalAuthority}v2.0/.well-known/openid-configuration`;\r\n }\r\n /**\r\n * Boolean that returns whether or not tenant discovery has been completed.\r\n */\r\n discoveryComplete() {\r\n return !!this.metadata;\r\n }\r\n /**\r\n * Perform endpoint discovery to discover aliases, preferred_cache, preferred_network\r\n * and the /authorize, /token and logout endpoints.\r\n */\r\n async resolveEndpointsAsync() {\r\n this.performanceClient?.addQueueMeasurement(PerformanceEvents.AuthorityResolveEndpointsAsync, this.correlationId);\r\n const metadataEntity = this.getCurrentMetadataEntity();\r\n const cloudDiscoverySource = await invokeAsync(this.updateCloudDiscoveryMetadata.bind(this), PerformanceEvents.AuthorityUpdateCloudDiscoveryMetadata, this.logger, this.performanceClient, this.correlationId)(metadataEntity);\r\n this.canonicalAuthority = this.canonicalAuthority.replace(this.hostnameAndPort, metadataEntity.preferred_network);\r\n const endpointSource = await invokeAsync(this.updateEndpointMetadata.bind(this), PerformanceEvents.AuthorityUpdateEndpointMetadata, this.logger, this.performanceClient, this.correlationId)(metadataEntity);\r\n this.updateCachedMetadata(metadataEntity, cloudDiscoverySource, {\r\n source: endpointSource,\r\n });\r\n this.performanceClient?.addFields({\r\n cloudDiscoverySource: cloudDiscoverySource,\r\n authorityEndpointSource: endpointSource,\r\n }, this.correlationId);\r\n }\r\n /**\r\n * Returns metadata entity from cache if it exists, otherwiser returns a new metadata entity built\r\n * from the configured canonical authority\r\n * @returns\r\n */\r\n getCurrentMetadataEntity() {\r\n let metadataEntity = this.cacheManager.getAuthorityMetadataByAlias(this.hostnameAndPort);\r\n if (!metadataEntity) {\r\n metadataEntity = {\r\n aliases: [],\r\n preferred_cache: this.hostnameAndPort,\r\n preferred_network: this.hostnameAndPort,\r\n canonical_authority: this.canonicalAuthority,\r\n authorization_endpoint: "",\r\n token_endpoint: "",\r\n end_session_endpoint: "",\r\n issuer: "",\r\n aliasesFromNetwork: false,\r\n endpointsFromNetwork: false,\r\n expiresAt: generateAuthorityMetadataExpiresAt(),\r\n jwks_uri: "",\r\n };\r\n }\r\n return metadataEntity;\r\n }\r\n /**\r\n * Updates cached metadata based on metadata source and sets the instance\'s metadata\r\n * property to the same value\r\n * @param metadataEntity\r\n * @param cloudDiscoverySource\r\n * @param endpointMetadataResult\r\n */\r\n updateCachedMetadata(metadataEntity, cloudDiscoverySource, endpointMetadataResult) {\r\n if (cloudDiscoverySource !== AuthorityMetadataSource.CACHE &&\r\n endpointMetadataResult?.source !== AuthorityMetadataSource.CACHE) {\r\n // Reset the expiration time unless both values came from a successful cache lookup\r\n metadataEntity.expiresAt =\r\n generateAuthorityMetadataExpiresAt();\r\n metadataEntity.canonical_authority = this.canonicalAuthority;\r\n }\r\n const cacheKey = this.cacheManager.generateAuthorityMetadataCacheKey(metadataEntity.preferred_cache);\r\n this.cacheManager.setAuthorityMetadata(cacheKey, metadataEntity);\r\n this.metadata = metadataEntity;\r\n }\r\n /**\r\n * Update AuthorityMetadataEntity with new endpoints and return where the information came from\r\n * @param metadataEntity\r\n */\r\n async updateEndpointMetadata(metadataEntity) {\r\n this.performanceClient?.addQueueMeasurement(PerformanceEvents.AuthorityUpdateEndpointMetadata, this.correlationId);\r\n const localMetadata = this.updateEndpointMetadataFromLocalSources(metadataEntity);\r\n // Further update may be required for hardcoded metadata if regional metadata is preferred\r\n if (localMetadata) {\r\n if (localMetadata.source ===\r\n AuthorityMetadataSource.HARDCODED_VALUES) {\r\n // If the user prefers to use an azure region replace the global endpoints with regional information.\r\n if (this.authorityOptions.azureRegionConfiguration?.azureRegion) {\r\n if (localMetadata.metadata) {\r\n const hardcodedMetadata = await invokeAsync(this.updateMetadataWithRegionalInformation.bind(this), PerformanceEvents.AuthorityUpdateMetadataWithRegionalInformation, this.logger, this.performanceClient, this.correlationId)(localMetadata.metadata);\r\n updateAuthorityEndpointMetadata(metadataEntity, hardcodedMetadata, false);\r\n metadataEntity.canonical_authority =\r\n this.canonicalAuthority;\r\n }\r\n }\r\n }\r\n return localMetadata.source;\r\n }\r\n // Get metadata from network if local sources aren\'t available\r\n let metadata = await invokeAsync(this.getEndpointMetadataFromNetwork.bind(this), PerformanceEvents.AuthorityGetEndpointMetadataFromNetwork, this.logger, this.performanceClient, this.correlationId)();\r\n if (metadata) {\r\n // If the user prefers to use an azure region replace the global endpoints with regional information.\r\n if (this.authorityOptions.azureRegionConfiguration?.azureRegion) {\r\n metadata = await invokeAsync(this.updateMetadataWithRegionalInformation.bind(this), PerformanceEvents.AuthorityUpdateMetadataWithRegionalInformation, this.logger, this.performanceClient, this.correlationId)(metadata);\r\n }\r\n updateAuthorityEndpointMetadata(metadataEntity, metadata, true);\r\n return AuthorityMetadataSource.NETWORK;\r\n }\r\n else {\r\n // Metadata could not be obtained from the config, cache, network or hardcoded values\r\n throw createClientAuthError(openIdConfigError, this.defaultOpenIdConfigurationEndpoint);\r\n }\r\n }\r\n /**\r\n * Updates endpoint metadata from local sources and returns where the information was retrieved from and the metadata config\r\n * response if the source is hardcoded metadata\r\n * @param metadataEntity\r\n * @returns\r\n */\r\n updateEndpointMetadataFromLocalSources(metadataEntity) {\r\n this.logger.verbose("Attempting to get endpoint metadata from authority configuration");\r\n const configMetadata = this.getEndpointMetadataFromConfig();\r\n if (configMetadata) {\r\n this.logger.verbose("Found endpoint metadata in authority configuration");\r\n updateAuthorityEndpointMetadata(metadataEntity, configMetadata, false);\r\n return {\r\n source: AuthorityMetadataSource.CONFIG,\r\n };\r\n }\r\n this.logger.verbose("Did not find endpoint metadata in the config... Attempting to get endpoint metadata from the hardcoded values.");\r\n // skipAuthorityMetadataCache is used to bypass hardcoded authority metadata and force a network metadata cache lookup and network metadata request if no cached response is available.\r\n if (this.authorityOptions.skipAuthorityMetadataCache) {\r\n this.logger.verbose("Skipping hardcoded metadata cache since skipAuthorityMetadataCache is set to true. Attempting to get endpoint metadata from the network metadata cache.");\r\n }\r\n else {\r\n const hardcodedMetadata = this.getEndpointMetadataFromHardcodedValues();\r\n if (hardcodedMetadata) {\r\n updateAuthorityEndpointMetadata(metadataEntity, hardcodedMetadata, false);\r\n return {\r\n source: AuthorityMetadataSource.HARDCODED_VALUES,\r\n metadata: hardcodedMetadata,\r\n };\r\n }\r\n else {\r\n this.logger.verbose("Did not find endpoint metadata in hardcoded values... Attempting to get endpoint metadata from the network metadata cache.");\r\n }\r\n }\r\n // Check cached metadata entity expiration status\r\n const metadataEntityExpired = isAuthorityMetadataExpired(metadataEntity);\r\n if (this.isAuthoritySameType(metadataEntity) &&\r\n metadataEntity.endpointsFromNetwork &&\r\n !metadataEntityExpired) {\r\n // No need to update\r\n this.logger.verbose("Found endpoint metadata in the cache.");\r\n return { source: AuthorityMetadataSource.CACHE };\r\n }\r\n else if (metadataEntityExpired) {\r\n this.logger.verbose("The metadata entity is expired.");\r\n }\r\n return null;\r\n }\r\n /**\r\n * Compares the number of url components after the domain to determine if the cached\r\n * authority metadata can be used for the requested authority. Protects against same domain different\r\n * authority such as login.microsoftonline.com/tenant and login.microsoftonline.com/tfp/tenant/policy\r\n * @param metadataEntity\r\n */\r\n isAuthoritySameType(metadataEntity) {\r\n const cachedAuthorityUrl = new UrlString(metadataEntity.canonical_authority);\r\n const cachedParts = cachedAuthorityUrl.getUrlComponents().PathSegments;\r\n return (cachedParts.length ===\r\n this.canonicalAuthorityUrlComponents.PathSegments.length);\r\n }\r\n /**\r\n * Parse authorityMetadata config option\r\n */\r\n getEndpointMetadataFromConfig() {\r\n if (this.authorityOptions.authorityMetadata) {\r\n try {\r\n return JSON.parse(this.authorityOptions.authorityMetadata);\r\n }\r\n catch (e) {\r\n throw createClientConfigurationError(invalidAuthorityMetadata);\r\n }\r\n }\r\n return null;\r\n }\r\n /**\r\n * Gets OAuth endpoints from the given OpenID configuration endpoint.\r\n *\r\n * @param hasHardcodedMetadata boolean\r\n */\r\n async getEndpointMetadataFromNetwork() {\r\n this.performanceClient?.addQueueMeasurement(PerformanceEvents.AuthorityGetEndpointMetadataFromNetwork, this.correlationId);\r\n const options = {};\r\n /*\r\n * TODO: Add a timeout if the authority exists in our library\'s\r\n * hardcoded list of metadata\r\n */\r\n const openIdConfigurationEndpoint = this.defaultOpenIdConfigurationEndpoint;\r\n this.logger.verbose(`Authority.getEndpointMetadataFromNetwork: attempting to retrieve OAuth endpoints from ${openIdConfigurationEndpoint}`);\r\n try {\r\n const response = await this.networkInterface.sendGetRequestAsync(openIdConfigurationEndpoint, options);\r\n const isValidResponse = isOpenIdConfigResponse(response.body);\r\n if (isValidResponse) {\r\n return response.body;\r\n }\r\n else {\r\n this.logger.verbose(`Authority.getEndpointMetadataFromNetwork: could not parse response as OpenID configuration`);\r\n return null;\r\n }\r\n }\r\n catch (e) {\r\n this.logger.verbose(`Authority.getEndpointMetadataFromNetwork: ${e}`);\r\n return null;\r\n }\r\n }\r\n /**\r\n * Get OAuth endpoints for common authorities.\r\n */\r\n getEndpointMetadataFromHardcodedValues() {\r\n if (this.hostnameAndPort in EndpointMetadata) {\r\n return EndpointMetadata[this.hostnameAndPort];\r\n }\r\n return null;\r\n }\r\n /**\r\n * Update the retrieved metadata with regional information.\r\n * User selected Azure region will be used if configured.\r\n */\r\n async updateMetadataWithRegionalInformation(metadata) {\r\n this.performanceClient?.addQueueMeasurement(PerformanceEvents.AuthorityUpdateMetadataWithRegionalInformation, this.correlationId);\r\n const userConfiguredAzureRegion = this.authorityOptions.azureRegionConfiguration?.azureRegion;\r\n if (userConfiguredAzureRegion) {\r\n if (userConfiguredAzureRegion !==\r\n Constants.AZURE_REGION_AUTO_DISCOVER_FLAG) {\r\n this.regionDiscoveryMetadata.region_outcome =\r\n RegionDiscoveryOutcomes.CONFIGURED_NO_AUTO_DETECTION;\r\n this.regionDiscoveryMetadata.region_used =\r\n userConfiguredAzureRegion;\r\n return Authority.replaceWithRegionalInformation(metadata, userConfiguredAzureRegion);\r\n }\r\n const autodetectedRegionName = await invokeAsync(this.regionDiscovery.detectRegion.bind(this.regionDiscovery), PerformanceEvents.RegionDiscoveryDetectRegion, this.logger, this.performanceClient, this.correlationId)(this.authorityOptions.azureRegionConfiguration\r\n ?.environmentRegion, this.regionDiscoveryMetadata);\r\n if (autodetectedRegionName) {\r\n this.regionDiscoveryMetadata.region_outcome =\r\n RegionDiscoveryOutcomes.AUTO_DETECTION_REQUESTED_SUCCESSFUL;\r\n this.regionDiscoveryMetadata.region_used =\r\n autodetectedRegionName;\r\n return Authority.replaceWithRegionalInformation(metadata, autodetectedRegionName);\r\n }\r\n this.regionDiscoveryMetadata.region_outcome =\r\n RegionDiscoveryOutcomes.AUTO_DETECTION_REQUESTED_FAILED;\r\n }\r\n return metadata;\r\n }\r\n /**\r\n * Updates the AuthorityMetadataEntity with new aliases, preferred_network and preferred_cache\r\n * and returns where the information was retrieved from\r\n * @param metadataEntity\r\n * @returns AuthorityMetadataSource\r\n */\r\n async updateCloudDiscoveryMetadata(metadataEntity) {\r\n this.performanceClient?.addQueueMeasurement(PerformanceEvents.AuthorityUpdateCloudDiscoveryMetadata, this.correlationId);\r\n const localMetadataSource = this.updateCloudDiscoveryMetadataFromLocalSources(metadataEntity);\r\n if (localMetadataSource) {\r\n return localMetadataSource;\r\n }\r\n // Fallback to network as metadata source\r\n const metadata = await invokeAsync(this.getCloudDiscoveryMetadataFromNetwork.bind(this), PerformanceEvents.AuthorityGetCloudDiscoveryMetadataFromNetwork, this.logger, this.performanceClient, this.correlationId)();\r\n if (metadata) {\r\n updateCloudDiscoveryMetadata(metadataEntity, metadata, true);\r\n return AuthorityMetadataSource.NETWORK;\r\n }\r\n // Metadata could not be obtained from the config, cache, network or hardcoded values\r\n throw createClientConfigurationError(untrustedAuthority);\r\n }\r\n updateCloudDiscoveryMetadataFromLocalSources(metadataEntity) {\r\n this.logger.verbose("Attempting to get cloud discovery metadata from authority configuration");\r\n this.logger.verbosePii(`Known Authorities: ${this.authorityOptions.knownAuthorities ||\r\n Constants.NOT_APPLICABLE}`);\r\n this.logger.verbosePii(`Authority Metadata: ${this.authorityOptions.authorityMetadata ||\r\n Constants.NOT_APPLICABLE}`);\r\n this.logger.verbosePii(`Canonical Authority: ${metadataEntity.canonical_authority || Constants.NOT_APPLICABLE}`);\r\n const metadata = this.getCloudDiscoveryMetadataFromConfig();\r\n if (metadata) {\r\n this.logger.verbose("Found cloud discovery metadata in authority configuration");\r\n updateCloudDiscoveryMetadata(metadataEntity, metadata, false);\r\n return AuthorityMetadataSource.CONFIG;\r\n }\r\n // If the cached metadata came from config but that config was not passed to this instance, we must go to hardcoded values\r\n this.logger.verbose("Did not find cloud discovery metadata in the config... Attempting to get cloud discovery metadata from the hardcoded values.");\r\n if (this.options.skipAuthorityMetadataCache) {\r\n this.logger.verbose("Skipping hardcoded cloud discovery metadata cache since skipAuthorityMetadataCache is set to true. Attempting to get cloud discovery metadata from the network metadata cache.");\r\n }\r\n else {\r\n const hardcodedMetadata = getCloudDiscoveryMetadataFromHardcodedValues(this.hostnameAndPort);\r\n if (hardcodedMetadata) {\r\n this.logger.verbose("Found cloud discovery metadata from hardcoded values.");\r\n updateCloudDiscoveryMetadata(metadataEntity, hardcodedMetadata, false);\r\n return AuthorityMetadataSource.HARDCODED_VALUES;\r\n }\r\n this.logger.verbose("Did not find cloud discovery metadata in hardcoded values... Attempting to get cloud discovery metadata from the network metadata cache.");\r\n }\r\n const metadataEntityExpired = isAuthorityMetadataExpired(metadataEntity);\r\n if (this.isAuthoritySameType(metadataEntity) &&\r\n metadataEntity.aliasesFromNetwork &&\r\n !metadataEntityExpired) {\r\n this.logger.verbose("Found cloud discovery metadata in the cache.");\r\n // No need to update\r\n return AuthorityMetadataSource.CACHE;\r\n }\r\n else if (metadataEntityExpired) {\r\n this.logger.verbose("The metadata entity is expired.");\r\n }\r\n return null;\r\n }\r\n /**\r\n * Parse cloudDiscoveryMetadata config or check knownAuthorities\r\n */\r\n getCloudDiscoveryMetadataFromConfig() {\r\n // CIAM does not support cloud discovery metadata\r\n if (this.authorityType === AuthorityType.Ciam) {\r\n this.logger.verbose("CIAM authorities do not support cloud discovery metadata, generate the aliases from authority host.");\r\n return Authority.createCloudDiscoveryMetadataFromHost(this.hostnameAndPort);\r\n }\r\n // Check if network response was provided in config\r\n if (this.authorityOptions.cloudDiscoveryMetadata) {\r\n this.logger.verbose("The cloud discovery metadata has been provided as a network response, in the config.");\r\n try {\r\n this.logger.verbose("Attempting to parse the cloud discovery metadata.");\r\n const parsedResponse = JSON.parse(this.authorityOptions.cloudDiscoveryMetadata);\r\n const metadata = getCloudDiscoveryMetadataFromNetworkResponse(parsedResponse.metadata, this.hostnameAndPort);\r\n this.logger.verbose("Parsed the cloud discovery metadata.");\r\n if (metadata) {\r\n this.logger.verbose("There is returnable metadata attached to the parsed cloud discovery metadata.");\r\n return metadata;\r\n }\r\n else {\r\n this.logger.verbose("There is no metadata attached to the parsed cloud discovery metadata.");\r\n }\r\n }\r\n catch (e) {\r\n this.logger.verbose("Unable to parse the cloud discovery metadata. Throwing Invalid Cloud Discovery Metadata Error.");\r\n throw createClientConfigurationError(invalidCloudDiscoveryMetadata);\r\n }\r\n }\r\n // If cloudDiscoveryMetadata is empty or does not contain the host, check knownAuthorities\r\n if (this.isInKnownAuthorities()) {\r\n this.logger.verbose("The host is included in knownAuthorities. Creating new cloud discovery metadata from the host.");\r\n return Authority.createCloudDiscoveryMetadataFromHost(this.hostnameAndPort);\r\n }\r\n return null;\r\n }\r\n /**\r\n * Called to get metadata from network if CloudDiscoveryMetadata was not populated by config\r\n *\r\n * @param hasHardcodedMetadata boolean\r\n */\r\n async getCloudDiscoveryMetadataFromNetwork() {\r\n this.performanceClient?.addQueueMeasurement(PerformanceEvents.AuthorityGetCloudDiscoveryMetadataFromNetwork, this.correlationId);\r\n const instanceDiscoveryEndpoint = `${Constants.AAD_INSTANCE_DISCOVERY_ENDPT}${this.canonicalAuthority}oauth2/v2.0/authorize`;\r\n const options = {};\r\n /*\r\n * TODO: Add a timeout if the authority exists in our library\'s\r\n * hardcoded list of metadata\r\n */\r\n let match = null;\r\n try {\r\n const response = await this.networkInterface.sendGetRequestAsync(instanceDiscoveryEndpoint, options);\r\n let typedResponseBody;\r\n let metadata;\r\n if (isCloudInstanceDiscoveryResponse(response.body)) {\r\n typedResponseBody =\r\n response.body;\r\n metadata = typedResponseBody.metadata;\r\n this.logger.verbosePii(`tenant_discovery_endpoint is: ${typedResponseBody.tenant_discovery_endpoint}`);\r\n }\r\n else if (isCloudInstanceDiscoveryErrorResponse(response.body)) {\r\n this.logger.warning(`A CloudInstanceDiscoveryErrorResponse was returned. The cloud instance discovery network request\'s status code is: ${response.status}`);\r\n typedResponseBody =\r\n response.body;\r\n if (typedResponseBody.error === Constants.INVALID_INSTANCE) {\r\n this.logger.error("The CloudInstanceDiscoveryErrorResponse error is invalid_instance.");\r\n return null;\r\n }\r\n this.logger.warning(`The CloudInstanceDiscoveryErrorResponse error is ${typedResponseBody.error}`);\r\n this.logger.warning(`The CloudInstanceDiscoveryErrorResponse error description is ${typedResponseBody.error_description}`);\r\n this.logger.warning("Setting the value of the CloudInstanceDiscoveryMetadata (returned from the network) to []");\r\n metadata = [];\r\n }\r\n else {\r\n this.logger.error("AAD did not return a CloudInstanceDiscoveryResponse or CloudInstanceDiscoveryErrorResponse");\r\n return null;\r\n }\r\n this.logger.verbose("Attempting to find a match between the developer\'s authority and the CloudInstanceDiscoveryMetadata returned from the network request.");\r\n match = getCloudDiscoveryMetadataFromNetworkResponse(metadata, this.hostnameAndPort);\r\n }\r\n catch (error) {\r\n if (error instanceof AuthError) {\r\n this.logger.error(`There was a network error while attempting to get the cloud discovery instance metadata.\\nError: ${error.errorCode}\\nError Description: ${error.errorMessage}`);\r\n }\r\n else {\r\n const typedError = error;\r\n this.logger.error(`A non-MSALJS error was thrown while attempting to get the cloud instance discovery metadata.\\nError: ${typedError.name}\\nError Description: ${typedError.message}`);\r\n }\r\n return null;\r\n }\r\n // Custom Domain scenario, host is trusted because Instance Discovery call succeeded\r\n if (!match) {\r\n this.logger.warning("The developer\'s authority was not found within the CloudInstanceDiscoveryMetadata returned from the network request.");\r\n this.logger.verbose("Creating custom Authority for custom domain scenario.");\r\n match = Authority.createCloudDiscoveryMetadataFromHost(this.hostnameAndPort);\r\n }\r\n return match;\r\n }\r\n /**\r\n * Helper function to determine if this host is included in the knownAuthorities config option\r\n */\r\n isInKnownAuthorities() {\r\n const matches = this.authorityOptions.knownAuthorities.filter((authority) => {\r\n return (authority &&\r\n UrlString.getDomainFromUrl(authority).toLowerCase() ===\r\n this.hostnameAndPort);\r\n });\r\n return matches.length > 0;\r\n }\r\n /**\r\n * helper function to populate the authority based on azureCloudOptions\r\n * @param authorityString\r\n * @param azureCloudOptions\r\n */\r\n static generateAuthority(authorityString, azureCloudOptions) {\r\n let authorityAzureCloudInstance;\r\n if (azureCloudOptions &&\r\n azureCloudOptions.azureCloudInstance !== AzureCloudInstance.None) {\r\n const tenant = azureCloudOptions.tenant\r\n ? azureCloudOptions.tenant\r\n : Constants.DEFAULT_COMMON_TENANT;\r\n authorityAzureCloudInstance = `${azureCloudOptions.azureCloudInstance}/${tenant}/`;\r\n }\r\n return authorityAzureCloudInstance\r\n ? authorityAzureCloudInstance\r\n : authorityString;\r\n }\r\n /**\r\n * Creates cloud discovery metadata object from a given host\r\n * @param host\r\n */\r\n static createCloudDiscoveryMetadataFromHost(host) {\r\n return {\r\n preferred_network: host,\r\n preferred_cache: host,\r\n aliases: [host],\r\n };\r\n }\r\n /**\r\n * helper function to generate environment from authority object\r\n */\r\n getPreferredCache() {\r\n if (this.managedIdentity) {\r\n return Constants.DEFAULT_AUTHORITY_HOST;\r\n }\r\n else if (this.discoveryComplete()) {\r\n return this.metadata.preferred_cache;\r\n }\r\n else {\r\n throw createClientAuthError(endpointResolutionError);\r\n }\r\n }\r\n /**\r\n * Returns whether or not the provided host is an alias of this authority instance\r\n * @param host\r\n */\r\n isAlias(host) {\r\n return this.metadata.aliases.indexOf(host) > -1;\r\n }\r\n /**\r\n * Returns whether or not the provided host is an alias of a known Microsoft authority for purposes of endpoint discovery\r\n * @param host\r\n */\r\n isAliasOfKnownMicrosoftAuthority(host) {\r\n return InstanceDiscoveryMetadataAliases.has(host);\r\n }\r\n /**\r\n * Checks whether the provided host is that of a public cloud authority\r\n *\r\n * @param authority string\r\n * @returns bool\r\n */\r\n static isPublicCloudAuthority(host) {\r\n return Constants.KNOWN_PUBLIC_CLOUDS.indexOf(host) >= 0;\r\n }\r\n /**\r\n * Rebuild the authority string with the region\r\n *\r\n * @param host string\r\n * @param region string\r\n */\r\n static buildRegionalAuthorityString(host, region, queryString) {\r\n // Create and validate a Url string object with the initial authority string\r\n const authorityUrlInstance = new UrlString(host);\r\n authorityUrlInstance.validateAsUri();\r\n const authorityUrlParts = authorityUrlInstance.getUrlComponents();\r\n let hostNameAndPort = `${region}.${authorityUrlParts.HostNameAndPort}`;\r\n if (this.isPublicCloudAuthority(authorityUrlParts.HostNameAndPort)) {\r\n hostNameAndPort = `${region}.${Constants.REGIONAL_AUTH_PUBLIC_CLOUD_SUFFIX}`;\r\n }\r\n // Include the query string portion of the url\r\n const url = UrlString.constructAuthorityUriFromObject({\r\n ...authorityUrlInstance.getUrlComponents(),\r\n HostNameAndPort: hostNameAndPort,\r\n }).urlString;\r\n // Add the query string if a query string was provided\r\n if (queryString)\r\n return `${url}?${queryString}`;\r\n return url;\r\n }\r\n /**\r\n * Replace the endpoints in the metadata object with their regional equivalents.\r\n *\r\n * @param metadata OpenIdConfigResponse\r\n * @param azureRegion string\r\n */\r\n static replaceWithRegionalInformation(metadata, azureRegion) {\r\n const regionalMetadata = { ...metadata };\r\n regionalMetadata.authorization_endpoint =\r\n Authority.buildRegionalAuthorityString(regionalMetadata.authorization_endpoint, azureRegion);\r\n regionalMetadata.token_endpoint =\r\n Authority.buildRegionalAuthorityString(regionalMetadata.token_endpoint, azureRegion);\r\n if (regionalMetadata.end_session_endpoint) {\r\n regionalMetadata.end_session_endpoint =\r\n Authority.buildRegionalAuthorityString(regionalMetadata.end_session_endpoint, azureRegion);\r\n }\r\n return regionalMetadata;\r\n }\r\n /**\r\n * Transform CIAM_AUTHORIY as per the below rules:\r\n * If no path segments found and it is a CIAM authority (hostname ends with .ciamlogin.com), then transform it\r\n *\r\n * NOTE: The transformation path should go away once STS supports CIAM with the format: `tenantIdorDomain.ciamlogin.com`\r\n * `ciamlogin.com` can also change in the future and we should accommodate the same\r\n *\r\n * @param authority\r\n */\r\n static transformCIAMAuthority(authority) {\r\n let ciamAuthority = authority;\r\n const authorityUrl = new UrlString(authority);\r\n const authorityUrlComponents = authorityUrl.getUrlComponents();\r\n // check if transformation is needed\r\n if (authorityUrlComponents.PathSegments.length === 0 &&\r\n authorityUrlComponents.HostNameAndPort.endsWith(Constants.CIAM_AUTH_URL)) {\r\n const tenantIdOrDomain = authorityUrlComponents.HostNameAndPort.split(".")[0];\r\n ciamAuthority = `${ciamAuthority}${tenantIdOrDomain}${Constants.AAD_TENANT_DOMAIN_SUFFIX}`;\r\n }\r\n return ciamAuthority;\r\n }\r\n}\r\n// Reserved tenant domain names that will not be replaced with tenant id\r\nAuthority.reservedTenantDomains = new Set([\r\n "{tenant}",\r\n "{tenantid}",\r\n AADAuthorityConstants.COMMON,\r\n AADAuthorityConstants.CONSUMERS,\r\n AADAuthorityConstants.ORGANIZATIONS,\r\n]);\r\n/**\r\n * Extract tenantId from authority\r\n */\r\nfunction getTenantFromAuthorityString(authority) {\r\n const authorityUrl = new UrlString(authority);\r\n const authorityUrlComponents = authorityUrl.getUrlComponents();\r\n /**\r\n * For credential matching purposes, tenantId is the last path segment of the authority URL:\r\n * AAD Authority - domain/tenantId -> Credentials are cached with realm = tenantId\r\n * B2C Authority - domain/{tenantId}?/.../policy -> Credentials are cached with realm = policy\r\n * tenantId is downcased because B2C policies can have mixed case but tfp claim is downcased\r\n *\r\n * Note that we may not have any path segments in certain OIDC scenarios.\r\n */\r\n const tenantId = authorityUrlComponents.PathSegments.slice(-1)[0]?.toLowerCase();\r\n switch (tenantId) {\r\n case AADAuthorityConstants.COMMON:\r\n case AADAuthorityConstants.ORGANIZATIONS:\r\n case AADAuthorityConstants.CONSUMERS:\r\n return undefined;\r\n default:\r\n return tenantId;\r\n }\r\n}\r\nfunction formatAuthorityUri(authorityUri) {\r\n return authorityUri.endsWith(Constants.FORWARD_SLASH)\r\n ? authorityUri\r\n : `${authorityUri}${Constants.FORWARD_SLASH}`;\r\n}\r\nfunction buildStaticAuthorityOptions(authOptions) {\r\n const rawCloudDiscoveryMetadata = authOptions.cloudDiscoveryMetadata;\r\n let cloudDiscoveryMetadata = undefined;\r\n if (rawCloudDiscoveryMetadata) {\r\n try {\r\n cloudDiscoveryMetadata = JSON.parse(rawCloudDiscoveryMetadata);\r\n }\r\n catch (e) {\r\n throw createClientConfigurationError(invalidCloudDiscoveryMetadata);\r\n }\r\n }\r\n return {\r\n canonicalAuthority: authOptions.authority\r\n ? formatAuthorityUri(authOptions.authority)\r\n : undefined,\r\n knownAuthorities: authOptions.knownAuthorities,\r\n cloudDiscoveryMetadata: cloudDiscoveryMetadata,\r\n };\r\n}\n\n\n//# sourceMappingURL=Authority.mjs.map\n\n;// ./node_modules/@azure/msal-common/dist/error/InteractionRequiredAuthErrorCodes.mjs\n/*! @azure/msal-common v14.16.0 2024-11-05 */\n\n/*\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License.\r\n */\r\n// Codes defined by MSAL\r\nconst noTokensFound = "no_tokens_found";\r\nconst nativeAccountUnavailable = "native_account_unavailable";\r\nconst refreshTokenExpired = "refresh_token_expired";\r\n// Codes potentially returned by server\r\nconst interactionRequired = "interaction_required";\r\nconst consentRequired = "consent_required";\r\nconst loginRequired = "login_required";\r\nconst badToken = "bad_token";\n\n\n//# sourceMappingURL=InteractionRequiredAuthErrorCodes.mjs.map\n\n;// ./node_modules/@azure/msal-common/dist/error/InteractionRequiredAuthError.mjs\n/*! @azure/msal-common v14.16.0 2024-11-05 */\n\n\n\n\n\n\n\n/*\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License.\r\n */\r\n/**\r\n * InteractionRequiredServerErrorMessage contains string constants used by error codes and messages returned by the server indicating interaction is required\r\n */\r\nconst InteractionRequiredServerErrorMessage = [\r\n interactionRequired,\r\n consentRequired,\r\n loginRequired,\r\n badToken,\r\n];\r\nconst InteractionRequiredAuthSubErrorMessage = [\r\n "message_only",\r\n "additional_action",\r\n "basic_action",\r\n "user_password_expired",\r\n "consent_required",\r\n "bad_token",\r\n];\r\nconst InteractionRequiredAuthErrorMessages = {\r\n [noTokensFound]: "No refresh token found in the cache. Please sign-in.",\r\n [nativeAccountUnavailable]: "The requested account is not available in the native broker. It may have been deleted or logged out. Please sign-in again using an interactive API.",\r\n [refreshTokenExpired]: "Refresh token has expired.",\r\n [badToken]: "Identity provider returned bad_token due to an expired or invalid refresh token. Please invoke an interactive API to resolve.",\r\n};\r\n/**\r\n * Interaction required errors defined by the SDK\r\n * @deprecated Use InteractionRequiredAuthErrorCodes instead\r\n */\r\nconst InteractionRequiredAuthErrorMessage = {\r\n noTokensFoundError: {\r\n code: noTokensFound,\r\n desc: InteractionRequiredAuthErrorMessages[noTokensFound],\r\n },\r\n native_account_unavailable: {\r\n code: nativeAccountUnavailable,\r\n desc: InteractionRequiredAuthErrorMessages[nativeAccountUnavailable],\r\n },\r\n bad_token: {\r\n code: badToken,\r\n desc: InteractionRequiredAuthErrorMessages[badToken],\r\n },\r\n};\r\n/**\r\n * Error thrown when user interaction is required.\r\n */\r\nclass InteractionRequiredAuthError extends AuthError {\r\n constructor(errorCode, errorMessage, subError, timestamp, traceId, correlationId, claims, errorNo) {\r\n super(errorCode, errorMessage, subError);\r\n Object.setPrototypeOf(this, InteractionRequiredAuthError.prototype);\r\n this.timestamp = timestamp || Constants.EMPTY_STRING;\r\n this.traceId = traceId || Constants.EMPTY_STRING;\r\n this.correlationId = correlationId || Constants.EMPTY_STRING;\r\n this.claims = claims || Constants.EMPTY_STRING;\r\n this.name = "InteractionRequiredAuthError";\r\n this.errorNo = errorNo;\r\n }\r\n}\r\n/**\r\n * Helper function used to determine if an error thrown by the server requires interaction to resolve\r\n * @param errorCode\r\n * @param errorString\r\n * @param subError\r\n */\r\nfunction isInteractionRequiredError(errorCode, errorString, subError) {\r\n const isInteractionRequiredErrorCode = !!errorCode &&\r\n InteractionRequiredServerErrorMessage.indexOf(errorCode) > -1;\r\n const isInteractionRequiredSubError = !!subError &&\r\n InteractionRequiredAuthSubErrorMessage.indexOf(subError) > -1;\r\n const isInteractionRequiredErrorDesc = !!errorString &&\r\n InteractionRequiredServerErrorMessage.some((irErrorCode) => {\r\n return errorString.indexOf(irErrorCode) > -1;\r\n });\r\n return (isInteractionRequiredErrorCode ||\r\n isInteractionRequiredErrorDesc ||\r\n isInteractionRequiredSubError);\r\n}\r\n/**\r\n * Creates an InteractionRequiredAuthError\r\n */\r\nfunction createInteractionRequiredAuthError(errorCode) {\r\n return new InteractionRequiredAuthError(errorCode, InteractionRequiredAuthErrorMessages[errorCode]);\r\n}\n\n\n//# sourceMappingURL=InteractionRequiredAuthError.mjs.map\n\n;// ./node_modules/@azure/msal-common/dist/utils/ProtocolUtils.mjs\n/*! @azure/msal-common v14.16.0 2024-11-05 */\n\n\n\n\n\n/*\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License.\r\n */\r\n/**\r\n * Class which provides helpers for OAuth 2.0 protocol specific values\r\n */\r\nclass ProtocolUtils {\r\n /**\r\n * Appends user state with random guid, or returns random guid.\r\n * @param userState\r\n * @param randomGuid\r\n */\r\n static setRequestState(cryptoObj, userState, meta) {\r\n const libraryState = ProtocolUtils.generateLibraryState(cryptoObj, meta);\r\n return userState\r\n ? `${libraryState}${Constants.RESOURCE_DELIM}${userState}`\r\n : libraryState;\r\n }\r\n /**\r\n * Generates the state value used by the common library.\r\n * @param randomGuid\r\n * @param cryptoObj\r\n */\r\n static generateLibraryState(cryptoObj, meta) {\r\n if (!cryptoObj) {\r\n throw createClientAuthError(noCryptoObject);\r\n }\r\n // Create a state object containing a unique id and the timestamp of the request creation\r\n const stateObj = {\r\n id: cryptoObj.createNewGuid(),\r\n };\r\n if (meta) {\r\n stateObj.meta = meta;\r\n }\r\n const stateString = JSON.stringify(stateObj);\r\n return cryptoObj.base64Encode(stateString);\r\n }\r\n /**\r\n * Parses the state into the RequestStateObject, which contains the LibraryState info and the state passed by the user.\r\n * @param state\r\n * @param cryptoObj\r\n */\r\n static parseRequestState(cryptoObj, state) {\r\n if (!cryptoObj) {\r\n throw createClientAuthError(noCryptoObject);\r\n }\r\n if (!state) {\r\n throw createClientAuthError(invalidState);\r\n }\r\n try {\r\n // Split the state between library state and user passed state and decode them separately\r\n const splitState = state.split(Constants.RESOURCE_DELIM);\r\n const libraryState = splitState[0];\r\n const userState = splitState.length > 1\r\n ? splitState.slice(1).join(Constants.RESOURCE_DELIM)\r\n : Constants.EMPTY_STRING;\r\n const libraryStateString = cryptoObj.base64Decode(libraryState);\r\n const libraryStateObj = JSON.parse(libraryStateString);\r\n return {\r\n userRequestState: userState || Constants.EMPTY_STRING,\r\n libraryState: libraryStateObj,\r\n };\r\n }\r\n catch (e) {\r\n throw createClientAuthError(invalidState);\r\n }\r\n }\r\n}\n\n\n//# sourceMappingURL=ProtocolUtils.mjs.map\n\n;// ./node_modules/@azure/msal-common/dist/account/CcsCredential.mjs\n/*! @azure/msal-common v14.16.0 2024-11-05 */\n\n/*\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License.\r\n */\r\nconst CcsCredentialType = {\r\n HOME_ACCOUNT_ID: "home_account_id",\r\n UPN: "UPN",\r\n};\n\n\n//# sourceMappingURL=CcsCredential.mjs.map\n\n;// ./node_modules/@azure/msal-browser/dist/cache/LocalStorage.mjs\n/*! @azure/msal-browser v3.28.1 2025-01-14 */\n\n\n\n\n/*\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License.\r\n */\r\nclass LocalStorage {\r\n constructor() {\r\n if (!window.localStorage) {\r\n throw createBrowserConfigurationAuthError(storageNotSupported);\r\n }\r\n }\r\n getItem(key) {\r\n return window.localStorage.getItem(key);\r\n }\r\n setItem(key, value) {\r\n window.localStorage.setItem(key, value);\r\n }\r\n removeItem(key) {\r\n window.localStorage.removeItem(key);\r\n }\r\n getKeys() {\r\n return Object.keys(window.localStorage);\r\n }\r\n containsKey(key) {\r\n return window.localStorage.hasOwnProperty(key);\r\n }\r\n}\n\n\n//# sourceMappingURL=LocalStorage.mjs.map\n\n;// ./node_modules/@azure/msal-browser/dist/cache/SessionStorage.mjs\n/*! @azure/msal-browser v3.28.1 2025-01-14 */\n\n\n\n\n/*\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License.\r\n */\r\nclass SessionStorage {\r\n constructor() {\r\n if (!window.sessionStorage) {\r\n throw createBrowserConfigurationAuthError(storageNotSupported);\r\n }\r\n }\r\n getItem(key) {\r\n return window.sessionStorage.getItem(key);\r\n }\r\n setItem(key, value) {\r\n window.sessionStorage.setItem(key, value);\r\n }\r\n removeItem(key) {\r\n window.sessionStorage.removeItem(key);\r\n }\r\n getKeys() {\r\n return Object.keys(window.sessionStorage);\r\n }\r\n containsKey(key) {\r\n return window.sessionStorage.hasOwnProperty(key);\r\n }\r\n}\n\n\n//# sourceMappingURL=SessionStorage.mjs.map\n\n;// ./node_modules/@azure/msal-browser/dist/utils/BrowserProtocolUtils.mjs\n/*! @azure/msal-browser v3.28.1 2025-01-14 */\n\n\n\n/*\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License.\r\n */\r\n/**\r\n * Extracts the BrowserStateObject from the state string.\r\n * @param browserCrypto\r\n * @param state\r\n */\r\nfunction extractBrowserRequestState(browserCrypto, state) {\r\n if (!state) {\r\n return null;\r\n }\r\n try {\r\n const requestStateObj = ProtocolUtils.parseRequestState(browserCrypto, state);\r\n return requestStateObj.libraryState.meta;\r\n }\r\n catch (e) {\r\n throw createClientAuthError(invalidState);\r\n }\r\n}\n\n\n//# sourceMappingURL=BrowserProtocolUtils.mjs.map\n\n;// ./node_modules/@azure/msal-browser/dist/cache/CookieStorage.mjs\n/*! @azure/msal-browser v3.28.1 2025-01-14 */\n\n/*\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License.\r\n */\r\n// Cookie life calculation (hours * minutes * seconds * ms)\r\nconst COOKIE_LIFE_MULTIPLIER = 24 * 60 * 60 * 1000;\r\nclass CookieStorage {\r\n getItem(key) {\r\n const name = `${encodeURIComponent(key)}`;\r\n const cookieList = document.cookie.split(";");\r\n for (let i = 0; i < cookieList.length; i++) {\r\n const cookie = cookieList[i];\r\n const [key, ...rest] = decodeURIComponent(cookie).trim().split("=");\r\n const value = rest.join("=");\r\n if (key === name) {\r\n return value;\r\n }\r\n }\r\n return "";\r\n }\r\n setItem(key, value, cookieLifeDays, secure = true) {\r\n let cookieStr = `${encodeURIComponent(key)}=${encodeURIComponent(value)};path=/;SameSite=Lax;`;\r\n if (cookieLifeDays) {\r\n const expireTime = getCookieExpirationTime(cookieLifeDays);\r\n cookieStr += `expires=${expireTime};`;\r\n }\r\n if (secure) {\r\n cookieStr += "Secure;";\r\n }\r\n document.cookie = cookieStr;\r\n }\r\n removeItem(key) {\r\n // Setting expiration to -1 removes it\r\n this.setItem(key, "", -1);\r\n }\r\n getKeys() {\r\n const cookieList = document.cookie.split(";");\r\n const keys = [];\r\n cookieList.forEach((cookie) => {\r\n const cookieParts = decodeURIComponent(cookie).trim().split("=");\r\n keys.push(cookieParts[0]);\r\n });\r\n return keys;\r\n }\r\n containsKey(key) {\r\n return this.getKeys().includes(key);\r\n }\r\n}\r\n/**\r\n * Get cookie expiration time\r\n * @param cookieLifeDays\r\n */\r\nfunction getCookieExpirationTime(cookieLifeDays) {\r\n const today = new Date();\r\n const expr = new Date(today.getTime() + cookieLifeDays * COOKIE_LIFE_MULTIPLIER);\r\n return expr.toUTCString();\r\n}\n\n\n//# sourceMappingURL=CookieStorage.mjs.map\n\n;// ./node_modules/@azure/msal-browser/dist/cache/BrowserCacheManager.mjs\n/*! @azure/msal-browser v3.28.1 2025-01-14 */\n\n\n\n\n\n\n\n\n\n\n\n\n\n/*\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License.\r\n */\r\n/**\r\n * This class implements the cache storage interface for MSAL through browser local or session storage.\r\n * Cookies are only used if storeAuthStateInCookie is true, and are only used for\r\n * parameters such as state and nonce, generally.\r\n */\r\nclass BrowserCacheManager extends CacheManager {\r\n constructor(clientId, cacheConfig, cryptoImpl, logger, staticAuthorityOptions, performanceClient) {\r\n super(clientId, cryptoImpl, logger, staticAuthorityOptions);\r\n this.cacheConfig = cacheConfig;\r\n this.logger = logger;\r\n this.internalStorage = new MemoryStorage();\r\n this.browserStorage = this.setupBrowserStorage(this.cacheConfig.cacheLocation);\r\n this.temporaryCacheStorage = this.setupBrowserStorage(this.cacheConfig.temporaryCacheLocation);\r\n this.cookieStorage = new CookieStorage();\r\n // Migrate cache entries from older versions of MSAL.\r\n if (cacheConfig.cacheMigrationEnabled) {\r\n this.migrateCacheEntries();\r\n this.createKeyMaps();\r\n }\r\n this.performanceClient = performanceClient;\r\n }\r\n /**\r\n * Returns a window storage class implementing the IWindowStorage interface that corresponds to the configured cacheLocation.\r\n * @param cacheLocation\r\n */\r\n setupBrowserStorage(cacheLocation) {\r\n try {\r\n switch (cacheLocation) {\r\n case BrowserCacheLocation.LocalStorage:\r\n return new LocalStorage();\r\n case BrowserCacheLocation.SessionStorage:\r\n return new SessionStorage();\r\n case BrowserCacheLocation.MemoryStorage:\r\n default:\r\n break;\r\n }\r\n }\r\n catch (e) {\r\n this.logger.error(e);\r\n }\r\n this.cacheConfig.cacheLocation = BrowserCacheLocation.MemoryStorage;\r\n return new MemoryStorage();\r\n }\r\n /**\r\n * Migrate all old cache entries to new schema. No rollback supported.\r\n * @param storeAuthStateInCookie\r\n */\r\n migrateCacheEntries() {\r\n const idTokenKey = `${Constants.CACHE_PREFIX}.${PersistentCacheKeys.ID_TOKEN}`;\r\n const clientInfoKey = `${Constants.CACHE_PREFIX}.${PersistentCacheKeys.CLIENT_INFO}`;\r\n const errorKey = `${Constants.CACHE_PREFIX}.${PersistentCacheKeys.ERROR}`;\r\n const errorDescKey = `${Constants.CACHE_PREFIX}.${PersistentCacheKeys.ERROR_DESC}`;\r\n const idTokenValue = this.browserStorage.getItem(idTokenKey);\r\n const clientInfoValue = this.browserStorage.getItem(clientInfoKey);\r\n const errorValue = this.browserStorage.getItem(errorKey);\r\n const errorDescValue = this.browserStorage.getItem(errorDescKey);\r\n const values = [\r\n idTokenValue,\r\n clientInfoValue,\r\n errorValue,\r\n errorDescValue,\r\n ];\r\n const keysToMigrate = [\r\n PersistentCacheKeys.ID_TOKEN,\r\n PersistentCacheKeys.CLIENT_INFO,\r\n PersistentCacheKeys.ERROR,\r\n PersistentCacheKeys.ERROR_DESC,\r\n ];\r\n keysToMigrate.forEach((cacheKey, index) => {\r\n const value = values[index];\r\n if (value) {\r\n this.setTemporaryCache(cacheKey, value, true);\r\n }\r\n });\r\n }\r\n /**\r\n * Searches all cache entries for MSAL accounts and creates the account key map\r\n * This is used to migrate users from older versions of MSAL which did not create the map.\r\n * @returns\r\n */\r\n createKeyMaps() {\r\n this.logger.trace("BrowserCacheManager - createKeyMaps called.");\r\n const accountKeys = this.getItem(StaticCacheKeys.ACCOUNT_KEYS);\r\n const tokenKeys = this.getItem(`${StaticCacheKeys.TOKEN_KEYS}.${this.clientId}`);\r\n if (accountKeys && tokenKeys) {\r\n this.logger.verbose("BrowserCacheManager:createKeyMaps - account and token key maps already exist, skipping migration.");\r\n // Key maps already exist, no need to iterate through cache\r\n return;\r\n }\r\n const allKeys = this.browserStorage.getKeys();\r\n allKeys.forEach((key) => {\r\n if (this.isCredentialKey(key)) {\r\n // Get item, parse, validate and write key to map\r\n const value = this.getItem(key);\r\n if (value) {\r\n const credObj = this.validateAndParseJson(value);\r\n if (credObj && credObj.hasOwnProperty("credentialType")) {\r\n switch (credObj["credentialType"]) {\r\n case CredentialType.ID_TOKEN:\r\n if (isIdTokenEntity(credObj)) {\r\n this.logger.trace("BrowserCacheManager:createKeyMaps - idToken found, saving key to token key map");\r\n this.logger.tracePii(`BrowserCacheManager:createKeyMaps - idToken with key: ${key} found, saving key to token key map`);\r\n const idTokenEntity = credObj;\r\n const newKey = this.updateCredentialCacheKey(key, idTokenEntity);\r\n this.addTokenKey(newKey, CredentialType.ID_TOKEN);\r\n return;\r\n }\r\n else {\r\n this.logger.trace("BrowserCacheManager:createKeyMaps - key found matching idToken schema with value containing idToken credentialType field but value failed IdTokenEntity validation, skipping.");\r\n this.logger.tracePii(`BrowserCacheManager:createKeyMaps - failed idToken validation on key: ${key}`);\r\n }\r\n break;\r\n case CredentialType.ACCESS_TOKEN:\r\n case CredentialType.ACCESS_TOKEN_WITH_AUTH_SCHEME:\r\n if (isAccessTokenEntity(credObj)) {\r\n this.logger.trace("BrowserCacheManager:createKeyMaps - accessToken found, saving key to token key map");\r\n this.logger.tracePii(`BrowserCacheManager:createKeyMaps - accessToken with key: ${key} found, saving key to token key map`);\r\n const accessTokenEntity = credObj;\r\n const newKey = this.updateCredentialCacheKey(key, accessTokenEntity);\r\n this.addTokenKey(newKey, CredentialType.ACCESS_TOKEN);\r\n return;\r\n }\r\n else {\r\n this.logger.trace("BrowserCacheManager:createKeyMaps - key found matching accessToken schema with value containing accessToken credentialType field but value failed AccessTokenEntity validation, skipping.");\r\n this.logger.tracePii(`BrowserCacheManager:createKeyMaps - failed accessToken validation on key: ${key}`);\r\n }\r\n break;\r\n case CredentialType.REFRESH_TOKEN:\r\n if (isRefreshTokenEntity(credObj)) {\r\n this.logger.trace("BrowserCacheManager:createKeyMaps - refreshToken found, saving key to token key map");\r\n this.logger.tracePii(`BrowserCacheManager:createKeyMaps - refreshToken with key: ${key} found, saving key to token key map`);\r\n const refreshTokenEntity = credObj;\r\n const newKey = this.updateCredentialCacheKey(key, refreshTokenEntity);\r\n this.addTokenKey(newKey, CredentialType.REFRESH_TOKEN);\r\n return;\r\n }\r\n else {\r\n this.logger.trace("BrowserCacheManager:createKeyMaps - key found matching refreshToken schema with value containing refreshToken credentialType field but value failed RefreshTokenEntity validation, skipping.");\r\n this.logger.tracePii(`BrowserCacheManager:createKeyMaps - failed refreshToken validation on key: ${key}`);\r\n }\r\n break;\r\n // If credentialType isn\'t one of our predefined ones, it may not be an MSAL cache value. Ignore.\r\n }\r\n }\r\n }\r\n }\r\n if (this.isAccountKey(key)) {\r\n const value = this.getItem(key);\r\n if (value) {\r\n const accountObj = this.validateAndParseJson(value);\r\n if (accountObj &&\r\n AccountEntity.isAccountEntity(accountObj)) {\r\n this.logger.trace("BrowserCacheManager:createKeyMaps - account found, saving key to account key map");\r\n this.logger.tracePii(`BrowserCacheManager:createKeyMaps - account with key: ${key} found, saving key to account key map`);\r\n this.addAccountKeyToMap(key);\r\n }\r\n }\r\n }\r\n });\r\n }\r\n /**\r\n * Parses passed value as JSON object, JSON.parse() will throw an error.\r\n * @param input\r\n */\r\n validateAndParseJson(jsonValue) {\r\n try {\r\n const parsedJson = JSON.parse(jsonValue);\r\n /**\r\n * There are edge cases in which JSON.parse will successfully parse a non-valid JSON object\r\n * (e.g. JSON.parse will parse an escaped string into an unescaped string), so adding a type check\r\n * of the parsed value is necessary in order to be certain that the string represents a valid JSON object.\r\n *\r\n */\r\n return parsedJson && typeof parsedJson === "object"\r\n ? parsedJson\r\n : null;\r\n }\r\n catch (error) {\r\n return null;\r\n }\r\n }\r\n /**\r\n * fetches the entry from the browser storage based off the key\r\n * @param key\r\n */\r\n getItem(key) {\r\n return this.browserStorage.getItem(key);\r\n }\r\n /**\r\n * sets the entry in the browser storage\r\n * @param key\r\n * @param value\r\n */\r\n setItem(key, value) {\r\n this.browserStorage.setItem(key, value);\r\n }\r\n /**\r\n * fetch the account entity from the platform cache\r\n * @param accountKey\r\n */\r\n getAccount(accountKey, logger) {\r\n this.logger.trace("BrowserCacheManager.getAccount called");\r\n const accountEntity = this.getCachedAccountEntity(accountKey);\r\n return this.updateOutdatedCachedAccount(accountKey, accountEntity, logger);\r\n }\r\n /**\r\n * Reads account from cache, deserializes it into an account entity and returns it.\r\n * If account is not found from the key, returns null and removes key from map.\r\n * @param accountKey\r\n * @returns\r\n */\r\n getCachedAccountEntity(accountKey) {\r\n const serializedAccount = this.getItem(accountKey);\r\n if (!serializedAccount) {\r\n this.removeAccountKeyFromMap(accountKey);\r\n return null;\r\n }\r\n const parsedAccount = this.validateAndParseJson(serializedAccount);\r\n if (!parsedAccount || !AccountEntity.isAccountEntity(parsedAccount)) {\r\n this.removeAccountKeyFromMap(accountKey);\r\n return null;\r\n }\r\n return CacheManager.toObject(new AccountEntity(), parsedAccount);\r\n }\r\n /**\r\n * set account entity in the platform cache\r\n * @param account\r\n */\r\n setAccount(account) {\r\n this.logger.trace("BrowserCacheManager.setAccount called");\r\n const key = account.generateAccountKey();\r\n this.setItem(key, JSON.stringify(account));\r\n this.addAccountKeyToMap(key);\r\n }\r\n /**\r\n * Returns the array of account keys currently cached\r\n * @returns\r\n */\r\n getAccountKeys() {\r\n this.logger.trace("BrowserCacheManager.getAccountKeys called");\r\n const accountKeys = this.getItem(StaticCacheKeys.ACCOUNT_KEYS);\r\n if (accountKeys) {\r\n return JSON.parse(accountKeys);\r\n }\r\n this.logger.verbose("BrowserCacheManager.getAccountKeys - No account keys found");\r\n return [];\r\n }\r\n /**\r\n * Add a new account to the key map\r\n * @param key\r\n */\r\n addAccountKeyToMap(key) {\r\n this.logger.trace("BrowserCacheManager.addAccountKeyToMap called");\r\n this.logger.tracePii(`BrowserCacheManager.addAccountKeyToMap called with key: ${key}`);\r\n const accountKeys = this.getAccountKeys();\r\n if (accountKeys.indexOf(key) === -1) {\r\n // Only add key if it does not already exist in the map\r\n accountKeys.push(key);\r\n this.setItem(StaticCacheKeys.ACCOUNT_KEYS, JSON.stringify(accountKeys));\r\n this.logger.verbose("BrowserCacheManager.addAccountKeyToMap account key added");\r\n }\r\n else {\r\n this.logger.verbose("BrowserCacheManager.addAccountKeyToMap account key already exists in map");\r\n }\r\n }\r\n /**\r\n * Remove an account from the key map\r\n * @param key\r\n */\r\n removeAccountKeyFromMap(key) {\r\n this.logger.trace("BrowserCacheManager.removeAccountKeyFromMap called");\r\n this.logger.tracePii(`BrowserCacheManager.removeAccountKeyFromMap called with key: ${key}`);\r\n const accountKeys = this.getAccountKeys();\r\n const removalIndex = accountKeys.indexOf(key);\r\n if (removalIndex > -1) {\r\n accountKeys.splice(removalIndex, 1);\r\n this.setItem(StaticCacheKeys.ACCOUNT_KEYS, JSON.stringify(accountKeys));\r\n this.logger.trace("BrowserCacheManager.removeAccountKeyFromMap account key removed");\r\n }\r\n else {\r\n this.logger.trace("BrowserCacheManager.removeAccountKeyFromMap key not found in existing map");\r\n }\r\n }\r\n /**\r\n * Extends inherited removeAccount function to include removal of the account key from the map\r\n * @param key\r\n */\r\n async removeAccount(key) {\r\n void super.removeAccount(key);\r\n this.removeAccountKeyFromMap(key);\r\n }\r\n /**\r\n * Remove account entity from the platform cache if it\'s outdated\r\n * @param accountKey\r\n */\r\n removeOutdatedAccount(accountKey) {\r\n this.removeItem(accountKey);\r\n this.removeAccountKeyFromMap(accountKey);\r\n }\r\n /**\r\n * Removes given idToken from the cache and from the key map\r\n * @param key\r\n */\r\n removeIdToken(key) {\r\n super.removeIdToken(key);\r\n this.removeTokenKey(key, CredentialType.ID_TOKEN);\r\n }\r\n /**\r\n * Removes given accessToken from the cache and from the key map\r\n * @param key\r\n */\r\n async removeAccessToken(key) {\r\n void super.removeAccessToken(key);\r\n this.removeTokenKey(key, CredentialType.ACCESS_TOKEN);\r\n }\r\n /**\r\n * Removes given refreshToken from the cache and from the key map\r\n * @param key\r\n */\r\n removeRefreshToken(key) {\r\n super.removeRefreshToken(key);\r\n this.removeTokenKey(key, CredentialType.REFRESH_TOKEN);\r\n }\r\n /**\r\n * Gets the keys for the cached tokens associated with this clientId\r\n * @returns\r\n */\r\n getTokenKeys() {\r\n this.logger.trace("BrowserCacheManager.getTokenKeys called");\r\n const item = this.getItem(`${StaticCacheKeys.TOKEN_KEYS}.${this.clientId}`);\r\n if (item) {\r\n const tokenKeys = this.validateAndParseJson(item);\r\n if (tokenKeys &&\r\n tokenKeys.hasOwnProperty("idToken") &&\r\n tokenKeys.hasOwnProperty("accessToken") &&\r\n tokenKeys.hasOwnProperty("refreshToken")) {\r\n return tokenKeys;\r\n }\r\n else {\r\n this.logger.error("BrowserCacheManager.getTokenKeys - Token keys found but in an unknown format. Returning empty key map.");\r\n }\r\n }\r\n else {\r\n this.logger.verbose("BrowserCacheManager.getTokenKeys - No token keys found");\r\n }\r\n return {\r\n idToken: [],\r\n accessToken: [],\r\n refreshToken: [],\r\n };\r\n }\r\n /**\r\n * Adds the given key to the token key map\r\n * @param key\r\n * @param type\r\n */\r\n addTokenKey(key, type) {\r\n this.logger.trace("BrowserCacheManager addTokenKey called");\r\n const tokenKeys = this.getTokenKeys();\r\n switch (type) {\r\n case CredentialType.ID_TOKEN:\r\n if (tokenKeys.idToken.indexOf(key) === -1) {\r\n this.logger.info("BrowserCacheManager: addTokenKey - idToken added to map");\r\n tokenKeys.idToken.push(key);\r\n }\r\n break;\r\n case CredentialType.ACCESS_TOKEN:\r\n if (tokenKeys.accessToken.indexOf(key) === -1) {\r\n this.logger.info("BrowserCacheManager: addTokenKey - accessToken added to map");\r\n tokenKeys.accessToken.push(key);\r\n }\r\n break;\r\n case CredentialType.REFRESH_TOKEN:\r\n if (tokenKeys.refreshToken.indexOf(key) === -1) {\r\n this.logger.info("BrowserCacheManager: addTokenKey - refreshToken added to map");\r\n tokenKeys.refreshToken.push(key);\r\n }\r\n break;\r\n default:\r\n this.logger.error(`BrowserCacheManager:addTokenKey - CredentialType provided invalid. CredentialType: ${type}`);\r\n throw createClientAuthError(unexpectedCredentialType);\r\n }\r\n this.setItem(`${StaticCacheKeys.TOKEN_KEYS}.${this.clientId}`, JSON.stringify(tokenKeys));\r\n }\r\n /**\r\n * Removes the given key from the token key map\r\n * @param key\r\n * @param type\r\n */\r\n removeTokenKey(key, type) {\r\n this.logger.trace("BrowserCacheManager removeTokenKey called");\r\n const tokenKeys = this.getTokenKeys();\r\n switch (type) {\r\n case CredentialType.ID_TOKEN:\r\n this.logger.infoPii(`BrowserCacheManager: removeTokenKey - attempting to remove idToken with key: ${key} from map`);\r\n const idRemoval = tokenKeys.idToken.indexOf(key);\r\n if (idRemoval > -1) {\r\n this.logger.info("BrowserCacheManager: removeTokenKey - idToken removed from map");\r\n tokenKeys.idToken.splice(idRemoval, 1);\r\n }\r\n else {\r\n this.logger.info("BrowserCacheManager: removeTokenKey - idToken does not exist in map. Either it was previously removed or it was never added.");\r\n }\r\n break;\r\n case CredentialType.ACCESS_TOKEN:\r\n this.logger.infoPii(`BrowserCacheManager: removeTokenKey - attempting to remove accessToken with key: ${key} from map`);\r\n const accessRemoval = tokenKeys.accessToken.indexOf(key);\r\n if (accessRemoval > -1) {\r\n this.logger.info("BrowserCacheManager: removeTokenKey - accessToken removed from map");\r\n tokenKeys.accessToken.splice(accessRemoval, 1);\r\n }\r\n else {\r\n this.logger.info("BrowserCacheManager: removeTokenKey - accessToken does not exist in map. Either it was previously removed or it was never added.");\r\n }\r\n break;\r\n case CredentialType.REFRESH_TOKEN:\r\n this.logger.infoPii(`BrowserCacheManager: removeTokenKey - attempting to remove refreshToken with key: ${key} from map`);\r\n const refreshRemoval = tokenKeys.refreshToken.indexOf(key);\r\n if (refreshRemoval > -1) {\r\n this.logger.info("BrowserCacheManager: removeTokenKey - refreshToken removed from map");\r\n tokenKeys.refreshToken.splice(refreshRemoval, 1);\r\n }\r\n else {\r\n this.logger.info("BrowserCacheManager: removeTokenKey - refreshToken does not exist in map. Either it was previously removed or it was never added.");\r\n }\r\n break;\r\n default:\r\n this.logger.error(`BrowserCacheManager:removeTokenKey - CredentialType provided invalid. CredentialType: ${type}`);\r\n throw createClientAuthError(unexpectedCredentialType);\r\n }\r\n this.setItem(`${StaticCacheKeys.TOKEN_KEYS}.${this.clientId}`, JSON.stringify(tokenKeys));\r\n }\r\n /**\r\n * generates idToken entity from a string\r\n * @param idTokenKey\r\n */\r\n getIdTokenCredential(idTokenKey) {\r\n const value = this.getItem(idTokenKey);\r\n if (!value) {\r\n this.logger.trace("BrowserCacheManager.getIdTokenCredential: called, no cache hit");\r\n this.removeTokenKey(idTokenKey, CredentialType.ID_TOKEN);\r\n return null;\r\n }\r\n const parsedIdToken = this.validateAndParseJson(value);\r\n if (!parsedIdToken || !isIdTokenEntity(parsedIdToken)) {\r\n this.logger.trace("BrowserCacheManager.getIdTokenCredential: called, no cache hit");\r\n this.removeTokenKey(idTokenKey, CredentialType.ID_TOKEN);\r\n return null;\r\n }\r\n this.logger.trace("BrowserCacheManager.getIdTokenCredential: cache hit");\r\n return parsedIdToken;\r\n }\r\n /**\r\n * set IdToken credential to the platform cache\r\n * @param idToken\r\n */\r\n setIdTokenCredential(idToken) {\r\n this.logger.trace("BrowserCacheManager.setIdTokenCredential called");\r\n const idTokenKey = generateCredentialKey(idToken);\r\n this.setItem(idTokenKey, JSON.stringify(idToken));\r\n this.addTokenKey(idTokenKey, CredentialType.ID_TOKEN);\r\n }\r\n /**\r\n * generates accessToken entity from a string\r\n * @param key\r\n */\r\n getAccessTokenCredential(accessTokenKey) {\r\n const value = this.getItem(accessTokenKey);\r\n if (!value) {\r\n this.logger.trace("BrowserCacheManager.getAccessTokenCredential: called, no cache hit");\r\n this.removeTokenKey(accessTokenKey, CredentialType.ACCESS_TOKEN);\r\n return null;\r\n }\r\n const parsedAccessToken = this.validateAndParseJson(value);\r\n if (!parsedAccessToken ||\r\n !isAccessTokenEntity(parsedAccessToken)) {\r\n this.logger.trace("BrowserCacheManager.getAccessTokenCredential: called, no cache hit");\r\n this.removeTokenKey(accessTokenKey, CredentialType.ACCESS_TOKEN);\r\n return null;\r\n }\r\n this.logger.trace("BrowserCacheManager.getAccessTokenCredential: cache hit");\r\n return parsedAccessToken;\r\n }\r\n /**\r\n * set accessToken credential to the platform cache\r\n * @param accessToken\r\n */\r\n setAccessTokenCredential(accessToken) {\r\n this.logger.trace("BrowserCacheManager.setAccessTokenCredential called");\r\n const accessTokenKey = generateCredentialKey(accessToken);\r\n this.setItem(accessTokenKey, JSON.stringify(accessToken));\r\n this.addTokenKey(accessTokenKey, CredentialType.ACCESS_TOKEN);\r\n }\r\n /**\r\n * generates refreshToken entity from a string\r\n * @param refreshTokenKey\r\n */\r\n getRefreshTokenCredential(refreshTokenKey) {\r\n const value = this.getItem(refreshTokenKey);\r\n if (!value) {\r\n this.logger.trace("BrowserCacheManager.getRefreshTokenCredential: called, no cache hit");\r\n this.removeTokenKey(refreshTokenKey, CredentialType.REFRESH_TOKEN);\r\n return null;\r\n }\r\n const parsedRefreshToken = this.validateAndParseJson(value);\r\n if (!parsedRefreshToken ||\r\n !isRefreshTokenEntity(parsedRefreshToken)) {\r\n this.logger.trace("BrowserCacheManager.getRefreshTokenCredential: called, no cache hit");\r\n this.removeTokenKey(refreshTokenKey, CredentialType.REFRESH_TOKEN);\r\n return null;\r\n }\r\n this.logger.trace("BrowserCacheManager.getRefreshTokenCredential: cache hit");\r\n return parsedRefreshToken;\r\n }\r\n /**\r\n * set refreshToken credential to the platform cache\r\n * @param refreshToken\r\n */\r\n setRefreshTokenCredential(refreshToken) {\r\n this.logger.trace("BrowserCacheManager.setRefreshTokenCredential called");\r\n const refreshTokenKey = generateCredentialKey(refreshToken);\r\n this.setItem(refreshTokenKey, JSON.stringify(refreshToken));\r\n this.addTokenKey(refreshTokenKey, CredentialType.REFRESH_TOKEN);\r\n }\r\n /**\r\n * fetch appMetadata entity from the platform cache\r\n * @param appMetadataKey\r\n */\r\n getAppMetadata(appMetadataKey) {\r\n const value = this.getItem(appMetadataKey);\r\n if (!value) {\r\n this.logger.trace("BrowserCacheManager.getAppMetadata: called, no cache hit");\r\n return null;\r\n }\r\n const parsedMetadata = this.validateAndParseJson(value);\r\n if (!parsedMetadata ||\r\n !isAppMetadataEntity(appMetadataKey, parsedMetadata)) {\r\n this.logger.trace("BrowserCacheManager.getAppMetadata: called, no cache hit");\r\n return null;\r\n }\r\n this.logger.trace("BrowserCacheManager.getAppMetadata: cache hit");\r\n return parsedMetadata;\r\n }\r\n /**\r\n * set appMetadata entity to the platform cache\r\n * @param appMetadata\r\n */\r\n setAppMetadata(appMetadata) {\r\n this.logger.trace("BrowserCacheManager.setAppMetadata called");\r\n const appMetadataKey = generateAppMetadataKey(appMetadata);\r\n this.setItem(appMetadataKey, JSON.stringify(appMetadata));\r\n }\r\n /**\r\n * fetch server telemetry entity from the platform cache\r\n * @param serverTelemetryKey\r\n */\r\n getServerTelemetry(serverTelemetryKey) {\r\n const value = this.getItem(serverTelemetryKey);\r\n if (!value) {\r\n this.logger.trace("BrowserCacheManager.getServerTelemetry: called, no cache hit");\r\n return null;\r\n }\r\n const parsedEntity = this.validateAndParseJson(value);\r\n if (!parsedEntity ||\r\n !isServerTelemetryEntity(serverTelemetryKey, parsedEntity)) {\r\n this.logger.trace("BrowserCacheManager.getServerTelemetry: called, no cache hit");\r\n return null;\r\n }\r\n this.logger.trace("BrowserCacheManager.getServerTelemetry: cache hit");\r\n return parsedEntity;\r\n }\r\n /**\r\n * set server telemetry entity to the platform cache\r\n * @param serverTelemetryKey\r\n * @param serverTelemetry\r\n */\r\n setServerTelemetry(serverTelemetryKey, serverTelemetry) {\r\n this.logger.trace("BrowserCacheManager.setServerTelemetry called");\r\n this.setItem(serverTelemetryKey, JSON.stringify(serverTelemetry));\r\n }\r\n /**\r\n *\r\n */\r\n getAuthorityMetadata(key) {\r\n const value = this.internalStorage.getItem(key);\r\n if (!value) {\r\n this.logger.trace("BrowserCacheManager.getAuthorityMetadata: called, no cache hit");\r\n return null;\r\n }\r\n const parsedMetadata = this.validateAndParseJson(value);\r\n if (parsedMetadata &&\r\n isAuthorityMetadataEntity(key, parsedMetadata)) {\r\n this.logger.trace("BrowserCacheManager.getAuthorityMetadata: cache hit");\r\n return parsedMetadata;\r\n }\r\n return null;\r\n }\r\n /**\r\n *\r\n */\r\n getAuthorityMetadataKeys() {\r\n const allKeys = this.internalStorage.getKeys();\r\n return allKeys.filter((key) => {\r\n return this.isAuthorityMetadata(key);\r\n });\r\n }\r\n /**\r\n * Sets wrapper metadata in memory\r\n * @param wrapperSKU\r\n * @param wrapperVersion\r\n */\r\n setWrapperMetadata(wrapperSKU, wrapperVersion) {\r\n this.internalStorage.setItem(InMemoryCacheKeys.WRAPPER_SKU, wrapperSKU);\r\n this.internalStorage.setItem(InMemoryCacheKeys.WRAPPER_VER, wrapperVersion);\r\n }\r\n /**\r\n * Returns wrapper metadata from in-memory storage\r\n */\r\n getWrapperMetadata() {\r\n const sku = this.internalStorage.getItem(InMemoryCacheKeys.WRAPPER_SKU) ||\r\n Constants.EMPTY_STRING;\r\n const version = this.internalStorage.getItem(InMemoryCacheKeys.WRAPPER_VER) ||\r\n Constants.EMPTY_STRING;\r\n return [sku, version];\r\n }\r\n /**\r\n *\r\n * @param entity\r\n */\r\n setAuthorityMetadata(key, entity) {\r\n this.logger.trace("BrowserCacheManager.setAuthorityMetadata called");\r\n this.internalStorage.setItem(key, JSON.stringify(entity));\r\n }\r\n /**\r\n * Gets the active account\r\n */\r\n getActiveAccount() {\r\n const activeAccountKeyFilters = this.generateCacheKey(PersistentCacheKeys.ACTIVE_ACCOUNT_FILTERS);\r\n const activeAccountValueFilters = this.getItem(activeAccountKeyFilters);\r\n if (!activeAccountValueFilters) {\r\n // if new active account cache type isn\'t found, it\'s an old version, so look for that instead\r\n this.logger.trace("BrowserCacheManager.getActiveAccount: No active account filters cache schema found, looking for legacy schema");\r\n const activeAccountKeyLocal = this.generateCacheKey(PersistentCacheKeys.ACTIVE_ACCOUNT);\r\n const activeAccountValueLocal = this.getItem(activeAccountKeyLocal);\r\n if (!activeAccountValueLocal) {\r\n this.logger.trace("BrowserCacheManager.getActiveAccount: No active account found");\r\n return null;\r\n }\r\n const activeAccount = this.getAccountInfoFilteredBy({\r\n localAccountId: activeAccountValueLocal,\r\n });\r\n if (activeAccount) {\r\n this.logger.trace("BrowserCacheManager.getActiveAccount: Legacy active account cache schema found");\r\n this.logger.trace("BrowserCacheManager.getActiveAccount: Adding active account filters cache schema");\r\n this.setActiveAccount(activeAccount);\r\n return activeAccount;\r\n }\r\n return null;\r\n }\r\n const activeAccountValueObj = this.validateAndParseJson(activeAccountValueFilters);\r\n if (activeAccountValueObj) {\r\n this.logger.trace("BrowserCacheManager.getActiveAccount: Active account filters schema found");\r\n return this.getAccountInfoFilteredBy({\r\n homeAccountId: activeAccountValueObj.homeAccountId,\r\n localAccountId: activeAccountValueObj.localAccountId,\r\n tenantId: activeAccountValueObj.tenantId,\r\n });\r\n }\r\n this.logger.trace("BrowserCacheManager.getActiveAccount: No active account found");\r\n return null;\r\n }\r\n /**\r\n * Sets the active account\'s localAccountId in cache\r\n * @param account\r\n */\r\n setActiveAccount(account) {\r\n const activeAccountKey = this.generateCacheKey(PersistentCacheKeys.ACTIVE_ACCOUNT_FILTERS);\r\n const activeAccountKeyLocal = this.generateCacheKey(PersistentCacheKeys.ACTIVE_ACCOUNT);\r\n if (account) {\r\n this.logger.verbose("setActiveAccount: Active account set");\r\n const activeAccountValue = {\r\n homeAccountId: account.homeAccountId,\r\n localAccountId: account.localAccountId,\r\n tenantId: account.tenantId,\r\n };\r\n this.browserStorage.setItem(activeAccountKey, JSON.stringify(activeAccountValue));\r\n this.browserStorage.setItem(activeAccountKeyLocal, account.localAccountId);\r\n }\r\n else {\r\n this.logger.verbose("setActiveAccount: No account passed, active account not set");\r\n this.browserStorage.removeItem(activeAccountKey);\r\n this.browserStorage.removeItem(activeAccountKeyLocal);\r\n }\r\n }\r\n /**\r\n * fetch throttling entity from the platform cache\r\n * @param throttlingCacheKey\r\n */\r\n getThrottlingCache(throttlingCacheKey) {\r\n const value = this.getItem(throttlingCacheKey);\r\n if (!value) {\r\n this.logger.trace("BrowserCacheManager.getThrottlingCache: called, no cache hit");\r\n return null;\r\n }\r\n const parsedThrottlingCache = this.validateAndParseJson(value);\r\n if (!parsedThrottlingCache ||\r\n !isThrottlingEntity(throttlingCacheKey, parsedThrottlingCache)) {\r\n this.logger.trace("BrowserCacheManager.getThrottlingCache: called, no cache hit");\r\n return null;\r\n }\r\n this.logger.trace("BrowserCacheManager.getThrottlingCache: cache hit");\r\n return parsedThrottlingCache;\r\n }\r\n /**\r\n * set throttling entity to the platform cache\r\n * @param throttlingCacheKey\r\n * @param throttlingCache\r\n */\r\n setThrottlingCache(throttlingCacheKey, throttlingCache) {\r\n this.logger.trace("BrowserCacheManager.setThrottlingCache called");\r\n this.setItem(throttlingCacheKey, JSON.stringify(throttlingCache));\r\n }\r\n /**\r\n * Gets cache item with given key.\r\n * Will retrieve from cookies if storeAuthStateInCookie is set to true.\r\n * @param key\r\n */\r\n getTemporaryCache(cacheKey, generateKey) {\r\n const key = generateKey ? this.generateCacheKey(cacheKey) : cacheKey;\r\n if (this.cacheConfig.storeAuthStateInCookie) {\r\n const itemCookie = this.cookieStorage.getItem(key);\r\n if (itemCookie) {\r\n this.logger.trace("BrowserCacheManager.getTemporaryCache: storeAuthStateInCookies set to true, retrieving from cookies");\r\n return itemCookie;\r\n }\r\n }\r\n const value = this.temporaryCacheStorage.getItem(key);\r\n if (!value) {\r\n // If temp cache item not found in session/memory, check local storage for items set by old versions\r\n if (this.cacheConfig.cacheLocation ===\r\n BrowserCacheLocation.LocalStorage) {\r\n const item = this.browserStorage.getItem(key);\r\n if (item) {\r\n this.logger.trace("BrowserCacheManager.getTemporaryCache: Temporary cache item found in local storage");\r\n return item;\r\n }\r\n }\r\n this.logger.trace("BrowserCacheManager.getTemporaryCache: No cache item found in local storage");\r\n return null;\r\n }\r\n this.logger.trace("BrowserCacheManager.getTemporaryCache: Temporary cache item returned");\r\n return value;\r\n }\r\n /**\r\n * Sets the cache item with the key and value given.\r\n * Stores in cookie if storeAuthStateInCookie is set to true.\r\n * This can cause cookie overflow if used incorrectly.\r\n * @param key\r\n * @param value\r\n */\r\n setTemporaryCache(cacheKey, value, generateKey) {\r\n const key = generateKey ? this.generateCacheKey(cacheKey) : cacheKey;\r\n this.temporaryCacheStorage.setItem(key, value);\r\n if (this.cacheConfig.storeAuthStateInCookie) {\r\n this.logger.trace("BrowserCacheManager.setTemporaryCache: storeAuthStateInCookie set to true, setting item cookie");\r\n this.cookieStorage.setItem(key, value, undefined, this.cacheConfig.secureCookies);\r\n }\r\n }\r\n /**\r\n * Removes the cache item with the given key.\r\n * @param key\r\n */\r\n removeItem(key) {\r\n this.browserStorage.removeItem(key);\r\n }\r\n /**\r\n * Removes the temporary cache item with the given key.\r\n * Will also clear the cookie item if storeAuthStateInCookie is set to true.\r\n * @param key\r\n */\r\n removeTemporaryItem(key) {\r\n this.temporaryCacheStorage.removeItem(key);\r\n if (this.cacheConfig.storeAuthStateInCookie) {\r\n this.logger.trace("BrowserCacheManager.removeItem: storeAuthStateInCookie is true, clearing item cookie");\r\n this.cookieStorage.removeItem(key);\r\n }\r\n }\r\n /**\r\n * Gets all keys in window.\r\n */\r\n getKeys() {\r\n return this.browserStorage.getKeys();\r\n }\r\n /**\r\n * Clears all cache entries created by MSAL.\r\n */\r\n async clear() {\r\n // Removes all accounts and their credentials\r\n await this.removeAllAccounts();\r\n this.removeAppMetadata();\r\n // Remove temp storage first to make sure any cookies are cleared\r\n this.temporaryCacheStorage.getKeys().forEach((cacheKey) => {\r\n if (cacheKey.indexOf(Constants.CACHE_PREFIX) !== -1 ||\r\n cacheKey.indexOf(this.clientId) !== -1) {\r\n this.removeTemporaryItem(cacheKey);\r\n }\r\n });\r\n // Removes all remaining MSAL cache items\r\n this.browserStorage.getKeys().forEach((cacheKey) => {\r\n if (cacheKey.indexOf(Constants.CACHE_PREFIX) !== -1 ||\r\n cacheKey.indexOf(this.clientId) !== -1) {\r\n this.browserStorage.removeItem(cacheKey);\r\n }\r\n });\r\n this.internalStorage.clear();\r\n }\r\n /**\r\n * Clears all access tokes that have claims prior to saving the current one\r\n * @param performanceClient {IPerformanceClient}\r\n * @param correlationId {string} correlation id\r\n * @returns\r\n */\r\n async clearTokensAndKeysWithClaims(performanceClient, correlationId) {\r\n performanceClient.addQueueMeasurement(PerformanceEvents.ClearTokensAndKeysWithClaims, correlationId);\r\n const tokenKeys = this.getTokenKeys();\r\n const removedAccessTokens = [];\r\n tokenKeys.accessToken.forEach((key) => {\r\n // if the access token has claims in its key, remove the token key and the token\r\n const credential = this.getAccessTokenCredential(key);\r\n if (credential?.requestedClaimsHash &&\r\n key.includes(credential.requestedClaimsHash.toLowerCase())) {\r\n removedAccessTokens.push(this.removeAccessToken(key));\r\n }\r\n });\r\n await Promise.all(removedAccessTokens);\r\n // warn if any access tokens are removed\r\n if (removedAccessTokens.length > 0) {\r\n this.logger.warning(`${removedAccessTokens.length} access tokens with claims in the cache keys have been removed from the cache.`);\r\n }\r\n }\r\n /**\r\n * Prepend msal. to each key; Skip for any JSON object as Key (defined schemas do not need the key appended: AccessToken Keys or the upcoming schema)\r\n * @param key\r\n * @param addInstanceId\r\n */\r\n generateCacheKey(key) {\r\n const generatedKey = this.validateAndParseJson(key);\r\n if (!generatedKey) {\r\n if (StringUtils.startsWith(key, Constants.CACHE_PREFIX) ||\r\n StringUtils.startsWith(key, PersistentCacheKeys.ADAL_ID_TOKEN)) {\r\n return key;\r\n }\r\n return `${Constants.CACHE_PREFIX}.${this.clientId}.${key}`;\r\n }\r\n return JSON.stringify(key);\r\n }\r\n /**\r\n * Create authorityKey to cache authority\r\n * @param state\r\n */\r\n generateAuthorityKey(stateString) {\r\n const { libraryState: { id: stateId }, } = ProtocolUtils.parseRequestState(this.cryptoImpl, stateString);\r\n return this.generateCacheKey(`${TemporaryCacheKeys.AUTHORITY}.${stateId}`);\r\n }\r\n /**\r\n * Create Nonce key to cache nonce\r\n * @param state\r\n */\r\n generateNonceKey(stateString) {\r\n const { libraryState: { id: stateId }, } = ProtocolUtils.parseRequestState(this.cryptoImpl, stateString);\r\n return this.generateCacheKey(`${TemporaryCacheKeys.NONCE_IDTOKEN}.${stateId}`);\r\n }\r\n /**\r\n * Creates full cache key for the request state\r\n * @param stateString State string for the request\r\n */\r\n generateStateKey(stateString) {\r\n // Use the library state id to key temp storage for uniqueness for multiple concurrent requests\r\n const { libraryState: { id: stateId }, } = ProtocolUtils.parseRequestState(this.cryptoImpl, stateString);\r\n return this.generateCacheKey(`${TemporaryCacheKeys.REQUEST_STATE}.${stateId}`);\r\n }\r\n /**\r\n * Gets the cached authority based on the cached state. Returns empty if no cached state found.\r\n */\r\n getCachedAuthority(cachedState) {\r\n const stateCacheKey = this.generateStateKey(cachedState);\r\n const state = this.getTemporaryCache(stateCacheKey);\r\n if (!state) {\r\n return null;\r\n }\r\n const authorityCacheKey = this.generateAuthorityKey(state);\r\n return this.getTemporaryCache(authorityCacheKey);\r\n }\r\n /**\r\n * Updates account, authority, and state in cache\r\n * @param serverAuthenticationRequest\r\n * @param account\r\n */\r\n updateCacheEntries(state, nonce, authorityInstance, loginHint, account) {\r\n this.logger.trace("BrowserCacheManager.updateCacheEntries called");\r\n // Cache the request state\r\n const stateCacheKey = this.generateStateKey(state);\r\n this.setTemporaryCache(stateCacheKey, state, false);\r\n // Cache the nonce\r\n const nonceCacheKey = this.generateNonceKey(state);\r\n this.setTemporaryCache(nonceCacheKey, nonce, false);\r\n // Cache authorityKey\r\n const authorityCacheKey = this.generateAuthorityKey(state);\r\n this.setTemporaryCache(authorityCacheKey, authorityInstance, false);\r\n if (account) {\r\n const ccsCredential = {\r\n credential: account.homeAccountId,\r\n type: CcsCredentialType.HOME_ACCOUNT_ID,\r\n };\r\n this.setTemporaryCache(TemporaryCacheKeys.CCS_CREDENTIAL, JSON.stringify(ccsCredential), true);\r\n }\r\n else if (loginHint) {\r\n const ccsCredential = {\r\n credential: loginHint,\r\n type: CcsCredentialType.UPN,\r\n };\r\n this.setTemporaryCache(TemporaryCacheKeys.CCS_CREDENTIAL, JSON.stringify(ccsCredential), true);\r\n }\r\n }\r\n /**\r\n * Reset all temporary cache items\r\n * @param state\r\n */\r\n resetRequestCache(state) {\r\n this.logger.trace("BrowserCacheManager.resetRequestCache called");\r\n // check state and remove associated cache items\r\n if (state) {\r\n this.temporaryCacheStorage.getKeys().forEach((key) => {\r\n if (key.indexOf(state) !== -1) {\r\n this.removeTemporaryItem(key);\r\n }\r\n });\r\n // delete generic interactive request parameters\r\n this.removeTemporaryItem(this.generateStateKey(state));\r\n this.removeTemporaryItem(this.generateNonceKey(state));\r\n this.removeTemporaryItem(this.generateAuthorityKey(state));\r\n }\r\n this.removeTemporaryItem(this.generateCacheKey(TemporaryCacheKeys.REQUEST_PARAMS));\r\n this.removeTemporaryItem(this.generateCacheKey(TemporaryCacheKeys.ORIGIN_URI));\r\n this.removeTemporaryItem(this.generateCacheKey(TemporaryCacheKeys.URL_HASH));\r\n this.removeTemporaryItem(this.generateCacheKey(TemporaryCacheKeys.CORRELATION_ID));\r\n this.removeTemporaryItem(this.generateCacheKey(TemporaryCacheKeys.CCS_CREDENTIAL));\r\n this.removeTemporaryItem(this.generateCacheKey(TemporaryCacheKeys.NATIVE_REQUEST));\r\n this.setInteractionInProgress(false);\r\n }\r\n /**\r\n * Removes temporary cache for the provided state\r\n * @param stateString\r\n */\r\n cleanRequestByState(stateString) {\r\n this.logger.trace("BrowserCacheManager.cleanRequestByState called");\r\n // Interaction is completed - remove interaction status.\r\n if (stateString) {\r\n const stateKey = this.generateStateKey(stateString);\r\n const cachedState = this.temporaryCacheStorage.getItem(stateKey);\r\n this.logger.infoPii(`BrowserCacheManager.cleanRequestByState: Removing temporary cache items for state: ${cachedState}`);\r\n this.resetRequestCache(cachedState || Constants.EMPTY_STRING);\r\n }\r\n }\r\n /**\r\n * Looks in temporary cache for any state values with the provided interactionType and removes all temporary cache items for that state\r\n * Used in scenarios where temp cache needs to be cleaned but state is not known, such as clicking browser back button.\r\n * @param interactionType\r\n */\r\n cleanRequestByInteractionType(interactionType) {\r\n this.logger.trace("BrowserCacheManager.cleanRequestByInteractionType called");\r\n // Loop through all keys to find state key\r\n this.temporaryCacheStorage.getKeys().forEach((key) => {\r\n // If this key is not the state key, move on\r\n if (key.indexOf(TemporaryCacheKeys.REQUEST_STATE) === -1) {\r\n return;\r\n }\r\n // Retrieve state value, return if not a valid value\r\n const stateValue = this.temporaryCacheStorage.getItem(key);\r\n if (!stateValue) {\r\n return;\r\n }\r\n // Extract state and ensure it matches given InteractionType, then clean request cache\r\n const parsedState = extractBrowserRequestState(this.cryptoImpl, stateValue);\r\n if (parsedState &&\r\n parsedState.interactionType === interactionType) {\r\n this.logger.infoPii(`BrowserCacheManager.cleanRequestByInteractionType: Removing temporary cache items for state: ${stateValue}`);\r\n this.resetRequestCache(stateValue);\r\n }\r\n });\r\n this.setInteractionInProgress(false);\r\n }\r\n cacheCodeRequest(authCodeRequest) {\r\n this.logger.trace("BrowserCacheManager.cacheCodeRequest called");\r\n const encodedValue = base64Encode(JSON.stringify(authCodeRequest));\r\n this.setTemporaryCache(TemporaryCacheKeys.REQUEST_PARAMS, encodedValue, true);\r\n }\r\n /**\r\n * Gets the token exchange parameters from the cache. Throws an error if nothing is found.\r\n */\r\n getCachedRequest(state) {\r\n this.logger.trace("BrowserCacheManager.getCachedRequest called");\r\n // Get token request from cache and parse as TokenExchangeParameters.\r\n const encodedTokenRequest = this.getTemporaryCache(TemporaryCacheKeys.REQUEST_PARAMS, true);\r\n if (!encodedTokenRequest) {\r\n throw createBrowserAuthError(noTokenRequestCacheError);\r\n }\r\n let parsedRequest;\r\n try {\r\n parsedRequest = JSON.parse(base64Decode(encodedTokenRequest));\r\n }\r\n catch (e) {\r\n this.logger.errorPii(`Attempted to parse: ${encodedTokenRequest}`);\r\n this.logger.error(`Parsing cached token request threw with error: ${e}`);\r\n throw createBrowserAuthError(unableToParseTokenRequestCacheError);\r\n }\r\n this.removeTemporaryItem(this.generateCacheKey(TemporaryCacheKeys.REQUEST_PARAMS));\r\n // Get cached authority and use if no authority is cached with request.\r\n if (!parsedRequest.authority) {\r\n const authorityCacheKey = this.generateAuthorityKey(state);\r\n const cachedAuthority = this.getTemporaryCache(authorityCacheKey);\r\n if (!cachedAuthority) {\r\n throw createBrowserAuthError(noCachedAuthorityError);\r\n }\r\n parsedRequest.authority = cachedAuthority;\r\n }\r\n return parsedRequest;\r\n }\r\n /**\r\n * Gets cached native request for redirect flows\r\n */\r\n getCachedNativeRequest() {\r\n this.logger.trace("BrowserCacheManager.getCachedNativeRequest called");\r\n const cachedRequest = this.getTemporaryCache(TemporaryCacheKeys.NATIVE_REQUEST, true);\r\n if (!cachedRequest) {\r\n this.logger.trace("BrowserCacheManager.getCachedNativeRequest: No cached native request found");\r\n return null;\r\n }\r\n const parsedRequest = this.validateAndParseJson(cachedRequest);\r\n if (!parsedRequest) {\r\n this.logger.error("BrowserCacheManager.getCachedNativeRequest: Unable to parse native request");\r\n return null;\r\n }\r\n return parsedRequest;\r\n }\r\n isInteractionInProgress(matchClientId) {\r\n const clientId = this.getInteractionInProgress();\r\n if (matchClientId) {\r\n return clientId === this.clientId;\r\n }\r\n else {\r\n return !!clientId;\r\n }\r\n }\r\n getInteractionInProgress() {\r\n const key = `${Constants.CACHE_PREFIX}.${TemporaryCacheKeys.INTERACTION_STATUS_KEY}`;\r\n return this.getTemporaryCache(key, false);\r\n }\r\n setInteractionInProgress(inProgress) {\r\n // Ensure we don\'t overwrite interaction in progress for a different clientId\r\n const key = `${Constants.CACHE_PREFIX}.${TemporaryCacheKeys.INTERACTION_STATUS_KEY}`;\r\n if (inProgress) {\r\n if (this.getInteractionInProgress()) {\r\n throw createBrowserAuthError(interactionInProgress);\r\n }\r\n else {\r\n // No interaction is in progress\r\n this.setTemporaryCache(key, this.clientId, false);\r\n }\r\n }\r\n else if (!inProgress &&\r\n this.getInteractionInProgress() === this.clientId) {\r\n this.removeTemporaryItem(key);\r\n }\r\n }\r\n /**\r\n * Returns username retrieved from ADAL or MSAL v1 idToken\r\n * @deprecated\r\n */\r\n getLegacyLoginHint() {\r\n // Only check for adal/msal token if no SSO params are being used\r\n const adalIdTokenString = this.getTemporaryCache(PersistentCacheKeys.ADAL_ID_TOKEN);\r\n if (adalIdTokenString) {\r\n this.browserStorage.removeItem(PersistentCacheKeys.ADAL_ID_TOKEN);\r\n this.logger.verbose("Cached ADAL id token retrieved.");\r\n }\r\n // Check for cached MSAL v1 id token\r\n const msalIdTokenString = this.getTemporaryCache(PersistentCacheKeys.ID_TOKEN, true);\r\n if (msalIdTokenString) {\r\n this.browserStorage.removeItem(this.generateCacheKey(PersistentCacheKeys.ID_TOKEN));\r\n this.logger.verbose("Cached MSAL.js v1 id token retrieved");\r\n }\r\n const cachedIdTokenString = msalIdTokenString || adalIdTokenString;\r\n if (cachedIdTokenString) {\r\n const idTokenClaims = extractTokenClaims(cachedIdTokenString, base64Decode);\r\n if (idTokenClaims.preferred_username) {\r\n this.logger.verbose("No SSO params used and ADAL/MSAL v1 token retrieved, setting ADAL/MSAL v1 preferred_username as loginHint");\r\n return idTokenClaims.preferred_username;\r\n }\r\n else if (idTokenClaims.upn) {\r\n this.logger.verbose("No SSO params used and ADAL/MSAL v1 token retrieved, setting ADAL/MSAL v1 upn as loginHint");\r\n return idTokenClaims.upn;\r\n }\r\n else {\r\n this.logger.verbose("No SSO params used and ADAL/MSAL v1 token retrieved, however, no account hint claim found. Enable preferred_username or upn id token claim to get SSO.");\r\n }\r\n }\r\n return null;\r\n }\r\n /**\r\n * Updates a credential\'s cache key if the current cache key is outdated\r\n */\r\n updateCredentialCacheKey(currentCacheKey, credential) {\r\n const updatedCacheKey = generateCredentialKey(credential);\r\n if (currentCacheKey !== updatedCacheKey) {\r\n const cacheItem = this.getItem(currentCacheKey);\r\n if (cacheItem) {\r\n this.browserStorage.removeItem(currentCacheKey);\r\n this.setItem(updatedCacheKey, cacheItem);\r\n this.logger.verbose(`Updated an outdated ${credential.credentialType} cache key`);\r\n return updatedCacheKey;\r\n }\r\n else {\r\n this.logger.error(`Attempted to update an outdated ${credential.credentialType} cache key but no item matching the outdated key was found in storage`);\r\n }\r\n }\r\n return currentCacheKey;\r\n }\r\n /**\r\n * Builds credential entities from AuthenticationResult object and saves the resulting credentials to the cache\r\n * @param result\r\n * @param request\r\n */\r\n async hydrateCache(result, request) {\r\n const idTokenEntity = createIdTokenEntity(result.account?.homeAccountId, result.account?.environment, result.idToken, this.clientId, result.tenantId);\r\n let claimsHash;\r\n if (request.claims) {\r\n claimsHash = await this.cryptoImpl.hashString(request.claims);\r\n }\r\n /**\r\n * meta data for cache stores time in seconds from epoch\r\n * AuthenticationResult returns expiresOn and extExpiresOn in milliseconds (as a Date object which is in ms)\r\n * We need to map these for the cache when building tokens from AuthenticationResult\r\n *\r\n * The next MSAL VFuture should map these both to same value if possible\r\n */\r\n const accessTokenEntity = createAccessTokenEntity(result.account?.homeAccountId, result.account.environment, result.accessToken, this.clientId, result.tenantId, result.scopes.join(" "), result.expiresOn ? result.expiresOn.getTime() / 1000 : 0, result.extExpiresOn ? result.extExpiresOn.getTime() / 1000 : 0, base64Decode, undefined, // refreshOn\r\n result.tokenType, undefined, // userAssertionHash\r\n request.sshKid, request.claims, claimsHash);\r\n const cacheRecord = {\r\n idToken: idTokenEntity,\r\n accessToken: accessTokenEntity,\r\n };\r\n return this.saveCacheRecord(cacheRecord);\r\n }\r\n /**\r\n * saves a cache record\r\n * @param cacheRecord {CacheRecord}\r\n * @param storeInCache {?StoreInCache}\r\n * @param correlationId {?string} correlation id\r\n */\r\n async saveCacheRecord(cacheRecord, storeInCache, correlationId) {\r\n try {\r\n await super.saveCacheRecord(cacheRecord, storeInCache, correlationId);\r\n }\r\n catch (e) {\r\n if (e instanceof CacheError &&\r\n this.performanceClient &&\r\n correlationId) {\r\n try {\r\n const tokenKeys = this.getTokenKeys();\r\n this.performanceClient.addFields({\r\n cacheRtCount: tokenKeys.refreshToken.length,\r\n cacheIdCount: tokenKeys.idToken.length,\r\n cacheAtCount: tokenKeys.accessToken.length,\r\n }, correlationId);\r\n }\r\n catch (e) { }\r\n }\r\n throw e;\r\n }\r\n }\r\n}\r\nconst DEFAULT_BROWSER_CACHE_MANAGER = (clientId, logger) => {\r\n const cacheOptions = {\r\n cacheLocation: BrowserCacheLocation.MemoryStorage,\r\n temporaryCacheLocation: BrowserCacheLocation.MemoryStorage,\r\n storeAuthStateInCookie: false,\r\n secureCookies: false,\r\n cacheMigrationEnabled: false,\r\n claimsBasedCachingEnabled: false,\r\n };\r\n return new BrowserCacheManager(clientId, cacheOptions, DEFAULT_CRYPTO_IMPLEMENTATION, logger);\r\n};\n\n\n//# sourceMappingURL=BrowserCacheManager.mjs.map\n\n;// ./node_modules/@azure/msal-browser/dist/cache/AccountManager.mjs\n/*! @azure/msal-browser v3.28.1 2025-01-14 */\n\n/*\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License.\r\n */\r\n/**\r\n * Returns all the accounts in the cache that match the optional filter. If no filter is provided, all accounts are returned.\r\n * @param accountFilter - (Optional) filter to narrow down the accounts returned\r\n * @returns Array of AccountInfo objects in cache\r\n */\r\nfunction getAllAccounts(logger, browserStorage, isInBrowser, accountFilter) {\r\n logger.verbose("getAllAccounts called");\r\n return isInBrowser ? browserStorage.getAllAccounts(accountFilter) : [];\r\n}\r\n/**\r\n * Returns the first account found in the cache that matches the account filter passed in.\r\n * @param accountFilter\r\n * @returns The first account found in the cache matching the provided filter or null if no account could be found.\r\n */\r\nfunction getAccount(accountFilter, logger, browserStorage) {\r\n logger.trace("getAccount called");\r\n if (Object.keys(accountFilter).length === 0) {\r\n logger.warning("getAccount: No accountFilter provided");\r\n return null;\r\n }\r\n const account = browserStorage.getAccountInfoFilteredBy(accountFilter);\r\n if (account) {\r\n logger.verbose("getAccount: Account matching provided filter found, returning");\r\n return account;\r\n }\r\n else {\r\n logger.verbose("getAccount: No matching account found, returning null");\r\n return null;\r\n }\r\n}\r\n/**\r\n * Returns the signed in account matching username.\r\n * (the account object is created at the time of successful login)\r\n * or null when no matching account is found.\r\n * This API is provided for convenience but getAccountById should be used for best reliability\r\n * @param username\r\n * @returns The account object stored in MSAL\r\n */\r\nfunction getAccountByUsername(username, logger, browserStorage) {\r\n logger.trace("getAccountByUsername called");\r\n if (!username) {\r\n logger.warning("getAccountByUsername: No username provided");\r\n return null;\r\n }\r\n const account = browserStorage.getAccountInfoFilteredBy({\r\n username,\r\n });\r\n if (account) {\r\n logger.verbose("getAccountByUsername: Account matching username found, returning");\r\n logger.verbosePii(`getAccountByUsername: Returning signed-in accounts matching username: ${username}`);\r\n return account;\r\n }\r\n else {\r\n logger.verbose("getAccountByUsername: No matching account found, returning null");\r\n return null;\r\n }\r\n}\r\n/**\r\n * Returns the signed in account matching homeAccountId.\r\n * (the account object is created at the time of successful login)\r\n * or null when no matching account is found\r\n * @param homeAccountId\r\n * @returns The account object stored in MSAL\r\n */\r\nfunction getAccountByHomeId(homeAccountId, logger, browserStorage) {\r\n logger.trace("getAccountByHomeId called");\r\n if (!homeAccountId) {\r\n logger.warning("getAccountByHomeId: No homeAccountId provided");\r\n return null;\r\n }\r\n const account = browserStorage.getAccountInfoFilteredBy({\r\n homeAccountId,\r\n });\r\n if (account) {\r\n logger.verbose("getAccountByHomeId: Account matching homeAccountId found, returning");\r\n logger.verbosePii(`getAccountByHomeId: Returning signed-in accounts matching homeAccountId: ${homeAccountId}`);\r\n return account;\r\n }\r\n else {\r\n logger.verbose("getAccountByHomeId: No matching account found, returning null");\r\n return null;\r\n }\r\n}\r\n/**\r\n * Returns the signed in account matching localAccountId.\r\n * (the account object is created at the time of successful login)\r\n * or null when no matching account is found\r\n * @param localAccountId\r\n * @returns The account object stored in MSAL\r\n */\r\nfunction getAccountByLocalId(localAccountId, logger, browserStorage) {\r\n logger.trace("getAccountByLocalId called");\r\n if (!localAccountId) {\r\n logger.warning("getAccountByLocalId: No localAccountId provided");\r\n return null;\r\n }\r\n const account = browserStorage.getAccountInfoFilteredBy({\r\n localAccountId,\r\n });\r\n if (account) {\r\n logger.verbose("getAccountByLocalId: Account matching localAccountId found, returning");\r\n logger.verbosePii(`getAccountByLocalId: Returning signed-in accounts matching localAccountId: ${localAccountId}`);\r\n return account;\r\n }\r\n else {\r\n logger.verbose("getAccountByLocalId: No matching account found, returning null");\r\n return null;\r\n }\r\n}\r\n/**\r\n * Sets the account to use as the active account. If no account is passed to the acquireToken APIs, then MSAL will use this active account.\r\n * @param account\r\n */\r\nfunction setActiveAccount(account, browserStorage) {\r\n browserStorage.setActiveAccount(account);\r\n}\r\n/**\r\n * Gets the currently active account\r\n */\r\nfunction getActiveAccount(browserStorage) {\r\n return browserStorage.getActiveAccount();\r\n}\n\n\n//# sourceMappingURL=AccountManager.mjs.map\n\n;// ./node_modules/@azure/msal-browser/dist/event/EventType.mjs\n/*! @azure/msal-browser v3.28.1 2025-01-14 */\n\n/*\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License.\r\n */\r\nconst EventType = {\r\n INITIALIZE_START: "msal:initializeStart",\r\n INITIALIZE_END: "msal:initializeEnd",\r\n ACCOUNT_ADDED: "msal:accountAdded",\r\n ACCOUNT_REMOVED: "msal:accountRemoved",\r\n ACTIVE_ACCOUNT_CHANGED: "msal:activeAccountChanged",\r\n LOGIN_START: "msal:loginStart",\r\n LOGIN_SUCCESS: "msal:loginSuccess",\r\n LOGIN_FAILURE: "msal:loginFailure",\r\n ACQUIRE_TOKEN_START: "msal:acquireTokenStart",\r\n ACQUIRE_TOKEN_SUCCESS: "msal:acquireTokenSuccess",\r\n ACQUIRE_TOKEN_FAILURE: "msal:acquireTokenFailure",\r\n ACQUIRE_TOKEN_NETWORK_START: "msal:acquireTokenFromNetworkStart",\r\n SSO_SILENT_START: "msal:ssoSilentStart",\r\n SSO_SILENT_SUCCESS: "msal:ssoSilentSuccess",\r\n SSO_SILENT_FAILURE: "msal:ssoSilentFailure",\r\n ACQUIRE_TOKEN_BY_CODE_START: "msal:acquireTokenByCodeStart",\r\n ACQUIRE_TOKEN_BY_CODE_SUCCESS: "msal:acquireTokenByCodeSuccess",\r\n ACQUIRE_TOKEN_BY_CODE_FAILURE: "msal:acquireTokenByCodeFailure",\r\n HANDLE_REDIRECT_START: "msal:handleRedirectStart",\r\n HANDLE_REDIRECT_END: "msal:handleRedirectEnd",\r\n POPUP_OPENED: "msal:popupOpened",\r\n LOGOUT_START: "msal:logoutStart",\r\n LOGOUT_SUCCESS: "msal:logoutSuccess",\r\n LOGOUT_FAILURE: "msal:logoutFailure",\r\n LOGOUT_END: "msal:logoutEnd",\r\n RESTORE_FROM_BFCACHE: "msal:restoreFromBFCache",\r\n};\n\n\n//# sourceMappingURL=EventType.mjs.map\n\n;// ./node_modules/@azure/msal-browser/dist/event/EventHandler.mjs\n/*! @azure/msal-browser v3.28.1 2025-01-14 */\n\n\n\n\n/*\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License.\r\n */\r\nclass EventHandler {\r\n constructor(logger) {\r\n this.eventCallbacks = new Map();\r\n this.logger = logger || new Logger({});\r\n }\r\n /**\r\n * Adds event callbacks to array\r\n * @param callback - callback to be invoked when an event is raised\r\n * @param eventTypes - list of events that this callback will be invoked for, if not provided callback will be invoked for all events\r\n * @param callbackId - Identifier for the callback, used to locate and remove the callback when no longer required\r\n */\r\n addEventCallback(callback, eventTypes, callbackId) {\r\n if (typeof window !== "undefined") {\r\n const id = callbackId || createGuid();\r\n if (this.eventCallbacks.has(id)) {\r\n this.logger.error(`Event callback with id: ${id} is already registered. Please provide a unique id or remove the existing callback and try again.`);\r\n return null;\r\n }\r\n this.eventCallbacks.set(id, [callback, eventTypes || []]);\r\n this.logger.verbose(`Event callback registered with id: ${id}`);\r\n return id;\r\n }\r\n return null;\r\n }\r\n /**\r\n * Removes callback with provided id from callback array\r\n * @param callbackId\r\n */\r\n removeEventCallback(callbackId) {\r\n this.eventCallbacks.delete(callbackId);\r\n this.logger.verbose(`Event callback ${callbackId} removed.`);\r\n }\r\n /**\r\n * Emits events by calling callback with event message\r\n * @param eventType\r\n * @param interactionType\r\n * @param payload\r\n * @param error\r\n */\r\n emitEvent(eventType, interactionType, payload, error) {\r\n if (typeof window !== "undefined") {\r\n const message = {\r\n eventType: eventType,\r\n interactionType: interactionType || null,\r\n payload: payload || null,\r\n error: error || null,\r\n timestamp: Date.now(),\r\n };\r\n this.eventCallbacks.forEach(([callback, eventTypes], callbackId) => {\r\n if (eventTypes.length === 0 ||\r\n eventTypes.includes(eventType)) {\r\n this.logger.verbose(`Emitting event to callback ${callbackId}: ${eventType}`);\r\n callback.apply(null, [message]);\r\n }\r\n });\r\n }\r\n }\r\n}\n\n\n//# sourceMappingURL=EventHandler.mjs.map\n\n;// ./node_modules/@azure/msal-common/dist/error/ServerError.mjs\n/*! @azure/msal-common v14.16.0 2024-11-05 */\n\n\n\n/*\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License.\r\n */\r\n/**\r\n * Error thrown when there is an error with the server code, for example, unavailability.\r\n */\r\nclass ServerError extends AuthError {\r\n constructor(errorCode, errorMessage, subError, errorNo, status) {\r\n super(errorCode, errorMessage, subError);\r\n this.name = "ServerError";\r\n this.errorNo = errorNo;\r\n this.status = status;\r\n Object.setPrototypeOf(this, ServerError.prototype);\r\n }\r\n}\n\n\n//# sourceMappingURL=ServerError.mjs.map\n\n;// ./node_modules/@azure/msal-common/dist/network/ThrottlingUtils.mjs\n/*! @azure/msal-common v14.16.0 2024-11-05 */\n\n\n\n\n/*\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License.\r\n */\r\n/** @internal */\r\nclass ThrottlingUtils {\r\n /**\r\n * Prepares a RequestThumbprint to be stored as a key.\r\n * @param thumbprint\r\n */\r\n static generateThrottlingStorageKey(thumbprint) {\r\n return `${ThrottlingConstants.THROTTLING_PREFIX}.${JSON.stringify(thumbprint)}`;\r\n }\r\n /**\r\n * Performs necessary throttling checks before a network request.\r\n * @param cacheManager\r\n * @param thumbprint\r\n */\r\n static preProcess(cacheManager, thumbprint) {\r\n const key = ThrottlingUtils.generateThrottlingStorageKey(thumbprint);\r\n const value = cacheManager.getThrottlingCache(key);\r\n if (value) {\r\n if (value.throttleTime < Date.now()) {\r\n cacheManager.removeItem(key);\r\n return;\r\n }\r\n throw new ServerError(value.errorCodes?.join(" ") || Constants.EMPTY_STRING, value.errorMessage, value.subError);\r\n }\r\n }\r\n /**\r\n * Performs necessary throttling checks after a network request.\r\n * @param cacheManager\r\n * @param thumbprint\r\n * @param response\r\n */\r\n static postProcess(cacheManager, thumbprint, response) {\r\n if (ThrottlingUtils.checkResponseStatus(response) ||\r\n ThrottlingUtils.checkResponseForRetryAfter(response)) {\r\n const thumbprintValue = {\r\n throttleTime: ThrottlingUtils.calculateThrottleTime(parseInt(response.headers[HeaderNames.RETRY_AFTER])),\r\n error: response.body.error,\r\n errorCodes: response.body.error_codes,\r\n errorMessage: response.body.error_description,\r\n subError: response.body.suberror,\r\n };\r\n cacheManager.setThrottlingCache(ThrottlingUtils.generateThrottlingStorageKey(thumbprint), thumbprintValue);\r\n }\r\n }\r\n /**\r\n * Checks a NetworkResponse object\'s status codes against 429 or 5xx\r\n * @param response\r\n */\r\n static checkResponseStatus(response) {\r\n return (response.status === 429 ||\r\n (response.status >= 500 && response.status < 600));\r\n }\r\n /**\r\n * Checks a NetworkResponse object\'s RetryAfter header\r\n * @param response\r\n */\r\n static checkResponseForRetryAfter(response) {\r\n if (response.headers) {\r\n return (response.headers.hasOwnProperty(HeaderNames.RETRY_AFTER) &&\r\n (response.status < 200 || response.status >= 300));\r\n }\r\n return false;\r\n }\r\n /**\r\n * Calculates the Unix-time value for a throttle to expire given throttleTime in seconds.\r\n * @param throttleTime\r\n */\r\n static calculateThrottleTime(throttleTime) {\r\n const time = throttleTime <= 0 ? 0 : throttleTime;\r\n const currentSeconds = Date.now() / 1000;\r\n return Math.floor(Math.min(currentSeconds +\r\n (time || ThrottlingConstants.DEFAULT_THROTTLE_TIME_SECONDS), currentSeconds +\r\n ThrottlingConstants.DEFAULT_MAX_THROTTLE_TIME_SECONDS) * 1000);\r\n }\r\n static removeThrottle(cacheManager, clientId, request, homeAccountIdentifier) {\r\n const thumbprint = {\r\n clientId: clientId,\r\n authority: request.authority,\r\n scopes: request.scopes,\r\n homeAccountIdentifier: homeAccountIdentifier,\r\n claims: request.claims,\r\n authenticationScheme: request.authenticationScheme,\r\n resourceRequestMethod: request.resourceRequestMethod,\r\n resourceRequestUri: request.resourceRequestUri,\r\n shrClaims: request.shrClaims,\r\n sshKid: request.sshKid,\r\n };\r\n const key = this.generateThrottlingStorageKey(thumbprint);\r\n cacheManager.removeItem(key);\r\n }\r\n}\n\n\n//# sourceMappingURL=ThrottlingUtils.mjs.map\n\n;// ./node_modules/@azure/msal-common/dist/constants/AADServerParamKeys.mjs\n/*! @azure/msal-common v14.16.0 2024-11-05 */\n\n/*\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License.\r\n */\r\nconst CLIENT_ID = "client_id";\r\nconst REDIRECT_URI = "redirect_uri";\r\nconst RESPONSE_TYPE = "response_type";\r\nconst RESPONSE_MODE = "response_mode";\r\nconst GRANT_TYPE = "grant_type";\r\nconst CLAIMS = "claims";\r\nconst SCOPE = "scope";\r\nconst ERROR = "error";\r\nconst ERROR_DESCRIPTION = "error_description";\r\nconst ACCESS_TOKEN = "access_token";\r\nconst ID_TOKEN = "id_token";\r\nconst REFRESH_TOKEN = "refresh_token";\r\nconst EXPIRES_IN = "expires_in";\r\nconst REFRESH_TOKEN_EXPIRES_IN = "refresh_token_expires_in";\r\nconst STATE = "state";\r\nconst NONCE = "nonce";\r\nconst PROMPT = "prompt";\r\nconst SESSION_STATE = "session_state";\r\nconst AADServerParamKeys_CLIENT_INFO = "client_info";\r\nconst CODE = "code";\r\nconst CODE_CHALLENGE = "code_challenge";\r\nconst CODE_CHALLENGE_METHOD = "code_challenge_method";\r\nconst CODE_VERIFIER = "code_verifier";\r\nconst CLIENT_REQUEST_ID = "client-request-id";\r\nconst X_CLIENT_SKU = "x-client-SKU";\r\nconst X_CLIENT_VER = "x-client-VER";\r\nconst X_CLIENT_OS = "x-client-OS";\r\nconst X_CLIENT_CPU = "x-client-CPU";\r\nconst X_CLIENT_CURR_TELEM = "x-client-current-telemetry";\r\nconst X_CLIENT_LAST_TELEM = "x-client-last-telemetry";\r\nconst X_MS_LIB_CAPABILITY = "x-ms-lib-capability";\r\nconst X_APP_NAME = "x-app-name";\r\nconst X_APP_VER = "x-app-ver";\r\nconst POST_LOGOUT_URI = "post_logout_redirect_uri";\r\nconst ID_TOKEN_HINT = "id_token_hint";\r\nconst DEVICE_CODE = "device_code";\r\nconst CLIENT_SECRET = "client_secret";\r\nconst CLIENT_ASSERTION = "client_assertion";\r\nconst CLIENT_ASSERTION_TYPE = "client_assertion_type";\r\nconst TOKEN_TYPE = "token_type";\r\nconst REQ_CNF = "req_cnf";\r\nconst OBO_ASSERTION = "assertion";\r\nconst REQUESTED_TOKEN_USE = "requested_token_use";\r\nconst ON_BEHALF_OF = "on_behalf_of";\r\nconst FOCI = "foci";\r\nconst CCS_HEADER = "X-AnchorMailbox";\r\nconst RETURN_SPA_CODE = "return_spa_code";\r\nconst NATIVE_BROKER = "nativebroker";\r\nconst LOGOUT_HINT = "logout_hint";\r\nconst SID = "sid";\r\nconst LOGIN_HINT = "login_hint";\r\nconst DOMAIN_HINT = "domain_hint";\r\nconst X_CLIENT_EXTRA_SKU = "x-client-xtra-sku";\r\nconst BROKER_CLIENT_ID = "brk_client_id";\r\nconst BROKER_REDIRECT_URI = "brk_redirect_uri";\n\n\n//# sourceMappingURL=AADServerParamKeys.mjs.map\n\n;// ./node_modules/@azure/msal-common/dist/request/RequestValidator.mjs\n/*! @azure/msal-common v14.16.0 2024-11-05 */\n\n\n\n\n\n/*\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License.\r\n */\r\n/**\r\n * Validates server consumable params from the "request" objects\r\n */\r\nclass RequestValidator {\r\n /**\r\n * Utility to check if the `redirectUri` in the request is a non-null value\r\n * @param redirectUri\r\n */\r\n static validateRedirectUri(redirectUri) {\r\n if (!redirectUri) {\r\n throw createClientConfigurationError(redirectUriEmpty);\r\n }\r\n }\r\n /**\r\n * Utility to validate prompt sent by the user in the request\r\n * @param prompt\r\n */\r\n static validatePrompt(prompt) {\r\n const promptValues = [];\r\n for (const value in PromptValue) {\r\n promptValues.push(PromptValue[value]);\r\n }\r\n if (promptValues.indexOf(prompt) < 0) {\r\n throw createClientConfigurationError(invalidPromptValue);\r\n }\r\n }\r\n static validateClaims(claims) {\r\n try {\r\n JSON.parse(claims);\r\n }\r\n catch (e) {\r\n throw createClientConfigurationError(invalidClaims);\r\n }\r\n }\r\n /**\r\n * Utility to validate code_challenge and code_challenge_method\r\n * @param codeChallenge\r\n * @param codeChallengeMethod\r\n */\r\n static validateCodeChallengeParams(codeChallenge, codeChallengeMethod) {\r\n if (!codeChallenge || !codeChallengeMethod) {\r\n throw createClientConfigurationError(pkceParamsMissing);\r\n }\r\n else {\r\n this.validateCodeChallengeMethod(codeChallengeMethod);\r\n }\r\n }\r\n /**\r\n * Utility to validate code_challenge_method\r\n * @param codeChallengeMethod\r\n */\r\n static validateCodeChallengeMethod(codeChallengeMethod) {\r\n if ([\r\n CodeChallengeMethodValues.PLAIN,\r\n CodeChallengeMethodValues.S256,\r\n ].indexOf(codeChallengeMethod) < 0) {\r\n throw createClientConfigurationError(invalidCodeChallengeMethod);\r\n }\r\n }\r\n}\n\n\n//# sourceMappingURL=RequestValidator.mjs.map\n\n;// ./node_modules/@azure/msal-common/dist/request/RequestParameterBuilder.mjs\n/*! @azure/msal-common v14.16.0 2024-11-05 */\n\n\n\n\n\n\n\n\n/*\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License.\r\n */\r\nfunction instrumentBrokerParams(parameters, correlationId, performanceClient) {\r\n if (!correlationId) {\r\n return;\r\n }\r\n const clientId = parameters.get(CLIENT_ID);\r\n if (clientId && parameters.has(BROKER_CLIENT_ID)) {\r\n performanceClient?.addFields({\r\n embeddedClientId: clientId,\r\n embeddedRedirectUri: parameters.get(REDIRECT_URI),\r\n }, correlationId);\r\n }\r\n}\r\n/** @internal */\r\nclass RequestParameterBuilder {\r\n constructor(correlationId, performanceClient) {\r\n this.parameters = new Map();\r\n this.performanceClient = performanceClient;\r\n this.correlationId = correlationId;\r\n }\r\n /**\r\n * add response_type = code\r\n */\r\n addResponseTypeCode() {\r\n this.parameters.set(RESPONSE_TYPE, encodeURIComponent(Constants.CODE_RESPONSE_TYPE));\r\n }\r\n /**\r\n * add response_type = token id_token\r\n */\r\n addResponseTypeForTokenAndIdToken() {\r\n this.parameters.set(RESPONSE_TYPE, encodeURIComponent(`${Constants.TOKEN_RESPONSE_TYPE} ${Constants.ID_TOKEN_RESPONSE_TYPE}`));\r\n }\r\n /**\r\n * add response_mode. defaults to query.\r\n * @param responseMode\r\n */\r\n addResponseMode(responseMode) {\r\n this.parameters.set(RESPONSE_MODE, encodeURIComponent(responseMode ? responseMode : ResponseMode.QUERY));\r\n }\r\n /**\r\n * Add flag to indicate STS should attempt to use WAM if available\r\n */\r\n addNativeBroker() {\r\n this.parameters.set(NATIVE_BROKER, encodeURIComponent("1"));\r\n }\r\n /**\r\n * add scopes. set addOidcScopes to false to prevent default scopes in non-user scenarios\r\n * @param scopeSet\r\n * @param addOidcScopes\r\n */\r\n addScopes(scopes, addOidcScopes = true, defaultScopes = OIDC_DEFAULT_SCOPES) {\r\n // Always add openid to the scopes when adding OIDC scopes\r\n if (addOidcScopes &&\r\n !defaultScopes.includes("openid") &&\r\n !scopes.includes("openid")) {\r\n defaultScopes.push("openid");\r\n }\r\n const requestScopes = addOidcScopes\r\n ? [...(scopes || []), ...defaultScopes]\r\n : scopes || [];\r\n const scopeSet = new ScopeSet(requestScopes);\r\n this.parameters.set(SCOPE, encodeURIComponent(scopeSet.printScopes()));\r\n }\r\n /**\r\n * add clientId\r\n * @param clientId\r\n */\r\n addClientId(clientId) {\r\n this.parameters.set(CLIENT_ID, encodeURIComponent(clientId));\r\n }\r\n /**\r\n * add redirect_uri\r\n * @param redirectUri\r\n */\r\n addRedirectUri(redirectUri) {\r\n RequestValidator.validateRedirectUri(redirectUri);\r\n this.parameters.set(REDIRECT_URI, encodeURIComponent(redirectUri));\r\n }\r\n /**\r\n * add post logout redirectUri\r\n * @param redirectUri\r\n */\r\n addPostLogoutRedirectUri(redirectUri) {\r\n RequestValidator.validateRedirectUri(redirectUri);\r\n this.parameters.set(POST_LOGOUT_URI, encodeURIComponent(redirectUri));\r\n }\r\n /**\r\n * add id_token_hint to logout request\r\n * @param idTokenHint\r\n */\r\n addIdTokenHint(idTokenHint) {\r\n this.parameters.set(ID_TOKEN_HINT, encodeURIComponent(idTokenHint));\r\n }\r\n /**\r\n * add domain_hint\r\n * @param domainHint\r\n */\r\n addDomainHint(domainHint) {\r\n this.parameters.set(DOMAIN_HINT, encodeURIComponent(domainHint));\r\n }\r\n /**\r\n * add login_hint\r\n * @param loginHint\r\n */\r\n addLoginHint(loginHint) {\r\n this.parameters.set(LOGIN_HINT, encodeURIComponent(loginHint));\r\n }\r\n /**\r\n * Adds the CCS (Cache Credential Service) query parameter for login_hint\r\n * @param loginHint\r\n */\r\n addCcsUpn(loginHint) {\r\n this.parameters.set(HeaderNames.CCS_HEADER, encodeURIComponent(`UPN:${loginHint}`));\r\n }\r\n /**\r\n * Adds the CCS (Cache Credential Service) query parameter for account object\r\n * @param loginHint\r\n */\r\n addCcsOid(clientInfo) {\r\n this.parameters.set(HeaderNames.CCS_HEADER, encodeURIComponent(`Oid:${clientInfo.uid}@${clientInfo.utid}`));\r\n }\r\n /**\r\n * add sid\r\n * @param sid\r\n */\r\n addSid(sid) {\r\n this.parameters.set(SID, encodeURIComponent(sid));\r\n }\r\n /**\r\n * add claims\r\n * @param claims\r\n */\r\n addClaims(claims, clientCapabilities) {\r\n const mergedClaims = this.addClientCapabilitiesToClaims(claims, clientCapabilities);\r\n RequestValidator.validateClaims(mergedClaims);\r\n this.parameters.set(CLAIMS, encodeURIComponent(mergedClaims));\r\n }\r\n /**\r\n * add correlationId\r\n * @param correlationId\r\n */\r\n addCorrelationId(correlationId) {\r\n this.parameters.set(CLIENT_REQUEST_ID, encodeURIComponent(correlationId));\r\n }\r\n /**\r\n * add library info query params\r\n * @param libraryInfo\r\n */\r\n addLibraryInfo(libraryInfo) {\r\n // Telemetry Info\r\n this.parameters.set(X_CLIENT_SKU, libraryInfo.sku);\r\n this.parameters.set(X_CLIENT_VER, libraryInfo.version);\r\n if (libraryInfo.os) {\r\n this.parameters.set(X_CLIENT_OS, libraryInfo.os);\r\n }\r\n if (libraryInfo.cpu) {\r\n this.parameters.set(X_CLIENT_CPU, libraryInfo.cpu);\r\n }\r\n }\r\n /**\r\n * Add client telemetry parameters\r\n * @param appTelemetry\r\n */\r\n addApplicationTelemetry(appTelemetry) {\r\n if (appTelemetry?.appName) {\r\n this.parameters.set(X_APP_NAME, appTelemetry.appName);\r\n }\r\n if (appTelemetry?.appVersion) {\r\n this.parameters.set(X_APP_VER, appTelemetry.appVersion);\r\n }\r\n }\r\n /**\r\n * add prompt\r\n * @param prompt\r\n */\r\n addPrompt(prompt) {\r\n RequestValidator.validatePrompt(prompt);\r\n this.parameters.set(`${PROMPT}`, encodeURIComponent(prompt));\r\n }\r\n /**\r\n * add state\r\n * @param state\r\n */\r\n addState(state) {\r\n if (state) {\r\n this.parameters.set(STATE, encodeURIComponent(state));\r\n }\r\n }\r\n /**\r\n * add nonce\r\n * @param nonce\r\n */\r\n addNonce(nonce) {\r\n this.parameters.set(NONCE, encodeURIComponent(nonce));\r\n }\r\n /**\r\n * add code_challenge and code_challenge_method\r\n * - throw if either of them are not passed\r\n * @param codeChallenge\r\n * @param codeChallengeMethod\r\n */\r\n addCodeChallengeParams(codeChallenge, codeChallengeMethod) {\r\n RequestValidator.validateCodeChallengeParams(codeChallenge, codeChallengeMethod);\r\n if (codeChallenge && codeChallengeMethod) {\r\n this.parameters.set(CODE_CHALLENGE, encodeURIComponent(codeChallenge));\r\n this.parameters.set(CODE_CHALLENGE_METHOD, encodeURIComponent(codeChallengeMethod));\r\n }\r\n else {\r\n throw createClientConfigurationError(pkceParamsMissing);\r\n }\r\n }\r\n /**\r\n * add the `authorization_code` passed by the user to exchange for a token\r\n * @param code\r\n */\r\n addAuthorizationCode(code) {\r\n this.parameters.set(CODE, encodeURIComponent(code));\r\n }\r\n /**\r\n * add the `authorization_code` passed by the user to exchange for a token\r\n * @param code\r\n */\r\n addDeviceCode(code) {\r\n this.parameters.set(DEVICE_CODE, encodeURIComponent(code));\r\n }\r\n /**\r\n * add the `refreshToken` passed by the user\r\n * @param refreshToken\r\n */\r\n addRefreshToken(refreshToken) {\r\n this.parameters.set(REFRESH_TOKEN, encodeURIComponent(refreshToken));\r\n }\r\n /**\r\n * add the `code_verifier` passed by the user to exchange for a token\r\n * @param codeVerifier\r\n */\r\n addCodeVerifier(codeVerifier) {\r\n this.parameters.set(CODE_VERIFIER, encodeURIComponent(codeVerifier));\r\n }\r\n /**\r\n * add client_secret\r\n * @param clientSecret\r\n */\r\n addClientSecret(clientSecret) {\r\n this.parameters.set(CLIENT_SECRET, encodeURIComponent(clientSecret));\r\n }\r\n /**\r\n * add clientAssertion for confidential client flows\r\n * @param clientAssertion\r\n */\r\n addClientAssertion(clientAssertion) {\r\n if (clientAssertion) {\r\n this.parameters.set(CLIENT_ASSERTION, encodeURIComponent(clientAssertion));\r\n }\r\n }\r\n /**\r\n * add clientAssertionType for confidential client flows\r\n * @param clientAssertionType\r\n */\r\n addClientAssertionType(clientAssertionType) {\r\n if (clientAssertionType) {\r\n this.parameters.set(CLIENT_ASSERTION_TYPE, encodeURIComponent(clientAssertionType));\r\n }\r\n }\r\n /**\r\n * add OBO assertion for confidential client flows\r\n * @param clientAssertion\r\n */\r\n addOboAssertion(oboAssertion) {\r\n this.parameters.set(OBO_ASSERTION, encodeURIComponent(oboAssertion));\r\n }\r\n /**\r\n * add grant type\r\n * @param grantType\r\n */\r\n addRequestTokenUse(tokenUse) {\r\n this.parameters.set(REQUESTED_TOKEN_USE, encodeURIComponent(tokenUse));\r\n }\r\n /**\r\n * add grant type\r\n * @param grantType\r\n */\r\n addGrantType(grantType) {\r\n this.parameters.set(GRANT_TYPE, encodeURIComponent(grantType));\r\n }\r\n /**\r\n * add client info\r\n *\r\n */\r\n addClientInfo() {\r\n this.parameters.set(CLIENT_INFO, "1");\r\n }\r\n /**\r\n * add extraQueryParams\r\n * @param eQParams\r\n */\r\n addExtraQueryParameters(eQParams) {\r\n Object.entries(eQParams).forEach(([key, value]) => {\r\n if (!this.parameters.has(key) && value) {\r\n this.parameters.set(key, value);\r\n }\r\n });\r\n }\r\n addClientCapabilitiesToClaims(claims, clientCapabilities) {\r\n let mergedClaims;\r\n // Parse provided claims into JSON object or initialize empty object\r\n if (!claims) {\r\n mergedClaims = {};\r\n }\r\n else {\r\n try {\r\n mergedClaims = JSON.parse(claims);\r\n }\r\n catch (e) {\r\n throw createClientConfigurationError(invalidClaims);\r\n }\r\n }\r\n if (clientCapabilities && clientCapabilities.length > 0) {\r\n if (!mergedClaims.hasOwnProperty(ClaimsRequestKeys.ACCESS_TOKEN)) {\r\n // Add access_token key to claims object\r\n mergedClaims[ClaimsRequestKeys.ACCESS_TOKEN] = {};\r\n }\r\n // Add xms_cc claim with provided clientCapabilities to access_token key\r\n mergedClaims[ClaimsRequestKeys.ACCESS_TOKEN][ClaimsRequestKeys.XMS_CC] = {\r\n values: clientCapabilities,\r\n };\r\n }\r\n return JSON.stringify(mergedClaims);\r\n }\r\n /**\r\n * adds `username` for Password Grant flow\r\n * @param username\r\n */\r\n addUsername(username) {\r\n this.parameters.set(PasswordGrantConstants.username, encodeURIComponent(username));\r\n }\r\n /**\r\n * adds `password` for Password Grant flow\r\n * @param password\r\n */\r\n addPassword(password) {\r\n this.parameters.set(PasswordGrantConstants.password, encodeURIComponent(password));\r\n }\r\n /**\r\n * add pop_jwk to query params\r\n * @param cnfString\r\n */\r\n addPopToken(cnfString) {\r\n if (cnfString) {\r\n this.parameters.set(TOKEN_TYPE, AuthenticationScheme.POP);\r\n this.parameters.set(REQ_CNF, encodeURIComponent(cnfString));\r\n }\r\n }\r\n /**\r\n * add SSH JWK and key ID to query params\r\n */\r\n addSshJwk(sshJwkString) {\r\n if (sshJwkString) {\r\n this.parameters.set(TOKEN_TYPE, AuthenticationScheme.SSH);\r\n this.parameters.set(REQ_CNF, encodeURIComponent(sshJwkString));\r\n }\r\n }\r\n /**\r\n * add server telemetry fields\r\n * @param serverTelemetryManager\r\n */\r\n addServerTelemetry(serverTelemetryManager) {\r\n this.parameters.set(X_CLIENT_CURR_TELEM, serverTelemetryManager.generateCurrentRequestHeaderValue());\r\n this.parameters.set(X_CLIENT_LAST_TELEM, serverTelemetryManager.generateLastRequestHeaderValue());\r\n }\r\n /**\r\n * Adds parameter that indicates to the server that throttling is supported\r\n */\r\n addThrottling() {\r\n this.parameters.set(X_MS_LIB_CAPABILITY, ThrottlingConstants.X_MS_LIB_CAPABILITY_VALUE);\r\n }\r\n /**\r\n * Adds logout_hint parameter for "silent" logout which prevent server account picker\r\n */\r\n addLogoutHint(logoutHint) {\r\n this.parameters.set(LOGOUT_HINT, encodeURIComponent(logoutHint));\r\n }\r\n addBrokerParameters(params) {\r\n const brokerParams = {};\r\n brokerParams[BROKER_CLIENT_ID] =\r\n params.brokerClientId;\r\n brokerParams[BROKER_REDIRECT_URI] =\r\n params.brokerRedirectUri;\r\n this.addExtraQueryParameters(brokerParams);\r\n }\r\n /**\r\n * Utility to create a URL from the params map\r\n */\r\n createQueryString() {\r\n const queryParameterArray = new Array();\r\n this.parameters.forEach((value, key) => {\r\n queryParameterArray.push(`${key}=${value}`);\r\n });\r\n instrumentBrokerParams(this.parameters, this.correlationId, this.performanceClient);\r\n return queryParameterArray.join("&");\r\n }\r\n}\n\n\n//# sourceMappingURL=RequestParameterBuilder.mjs.map\n\n;// ./node_modules/@azure/msal-common/dist/authority/AuthorityFactory.mjs\n/*! @azure/msal-common v14.16.0 2024-11-05 */\n\n\n\n\n\n\n\n/*\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License.\r\n */\r\n/**\r\n * Create an authority object of the correct type based on the url\r\n * Performs basic authority validation - checks to see if the authority is of a valid type (i.e. aad, b2c, adfs)\r\n *\r\n * Also performs endpoint discovery.\r\n *\r\n * @param authorityUri\r\n * @param networkClient\r\n * @param protocolMode\r\n * @internal\r\n */\r\nasync function createDiscoveredInstance(authorityUri, networkClient, cacheManager, authorityOptions, logger, correlationId, performanceClient) {\r\n performanceClient?.addQueueMeasurement(PerformanceEvents.AuthorityFactoryCreateDiscoveredInstance, correlationId);\r\n const authorityUriFinal = Authority.transformCIAMAuthority(formatAuthorityUri(authorityUri));\r\n // Initialize authority and perform discovery endpoint check.\r\n const acquireTokenAuthority = new Authority(authorityUriFinal, networkClient, cacheManager, authorityOptions, logger, correlationId, performanceClient);\r\n try {\r\n await invokeAsync(acquireTokenAuthority.resolveEndpointsAsync.bind(acquireTokenAuthority), PerformanceEvents.AuthorityResolveEndpointsAsync, logger, performanceClient, correlationId)();\r\n return acquireTokenAuthority;\r\n }\r\n catch (e) {\r\n throw createClientAuthError(endpointResolutionError);\r\n }\r\n}\n\n\n//# sourceMappingURL=AuthorityFactory.mjs.map\n\n;// ./node_modules/@azure/msal-common/dist/client/BaseClient.mjs\n/*! @azure/msal-common v14.16.0 2024-11-05 */\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n/*\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License.\r\n */\r\n/**\r\n * Base application class which will construct requests to send to and handle responses from the Microsoft STS using the authorization code flow.\r\n * @internal\r\n */\r\nclass BaseClient {\r\n constructor(configuration, performanceClient) {\r\n // Set the configuration\r\n this.config = buildClientConfiguration(configuration);\r\n // Initialize the logger\r\n this.logger = new Logger(this.config.loggerOptions, packageMetadata_name, version);\r\n // Initialize crypto\r\n this.cryptoUtils = this.config.cryptoInterface;\r\n // Initialize storage interface\r\n this.cacheManager = this.config.storageInterface;\r\n // Set the network interface\r\n this.networkClient = this.config.networkInterface;\r\n // Set TelemetryManager\r\n this.serverTelemetryManager = this.config.serverTelemetryManager;\r\n // set Authority\r\n this.authority = this.config.authOptions.authority;\r\n // set performance telemetry client\r\n this.performanceClient = performanceClient;\r\n }\r\n /**\r\n * Creates default headers for requests to token endpoint\r\n */\r\n createTokenRequestHeaders(ccsCred) {\r\n const headers = {};\r\n headers[HeaderNames.CONTENT_TYPE] = Constants.URL_FORM_CONTENT_TYPE;\r\n if (!this.config.systemOptions.preventCorsPreflight && ccsCred) {\r\n switch (ccsCred.type) {\r\n case CcsCredentialType.HOME_ACCOUNT_ID:\r\n try {\r\n const clientInfo = buildClientInfoFromHomeAccountId(ccsCred.credential);\r\n headers[HeaderNames.CCS_HEADER] = `Oid:${clientInfo.uid}@${clientInfo.utid}`;\r\n }\r\n catch (e) {\r\n this.logger.verbose("Could not parse home account ID for CCS Header: " +\r\n e);\r\n }\r\n break;\r\n case CcsCredentialType.UPN:\r\n headers[HeaderNames.CCS_HEADER] = `UPN: ${ccsCred.credential}`;\r\n break;\r\n }\r\n }\r\n return headers;\r\n }\r\n /**\r\n * Http post to token endpoint\r\n * @param tokenEndpoint\r\n * @param queryString\r\n * @param headers\r\n * @param thumbprint\r\n */\r\n async executePostToTokenEndpoint(tokenEndpoint, queryString, headers, thumbprint, correlationId, queuedEvent) {\r\n if (queuedEvent) {\r\n this.performanceClient?.addQueueMeasurement(queuedEvent, correlationId);\r\n }\r\n const response = await this.sendPostRequest(thumbprint, tokenEndpoint, { body: queryString, headers: headers }, correlationId);\r\n if (this.config.serverTelemetryManager &&\r\n response.status < 500 &&\r\n response.status !== 429) {\r\n // Telemetry data successfully logged by server, clear Telemetry cache\r\n this.config.serverTelemetryManager.clearTelemetryCache();\r\n }\r\n return response;\r\n }\r\n /**\r\n * Wraps sendPostRequestAsync with necessary preflight and postflight logic\r\n * @param thumbprint - Request thumbprint for throttling\r\n * @param tokenEndpoint - Endpoint to make the POST to\r\n * @param options - Body and Headers to include on the POST request\r\n * @param correlationId - CorrelationId for telemetry\r\n */\r\n async sendPostRequest(thumbprint, tokenEndpoint, options, correlationId) {\r\n ThrottlingUtils.preProcess(this.cacheManager, thumbprint);\r\n let response;\r\n try {\r\n response = await invokeAsync((this.networkClient.sendPostRequestAsync.bind(this.networkClient)), PerformanceEvents.NetworkClientSendPostRequestAsync, this.logger, this.performanceClient, correlationId)(tokenEndpoint, options);\r\n const responseHeaders = response.headers || {};\r\n this.performanceClient?.addFields({\r\n refreshTokenSize: response.body.refresh_token?.length || 0,\r\n httpVerToken: responseHeaders[HeaderNames.X_MS_HTTP_VERSION] || "",\r\n requestId: responseHeaders[HeaderNames.X_MS_REQUEST_ID] || "",\r\n }, correlationId);\r\n }\r\n catch (e) {\r\n if (e instanceof NetworkError) {\r\n const responseHeaders = e.responseHeaders;\r\n if (responseHeaders) {\r\n this.performanceClient?.addFields({\r\n httpVerToken: responseHeaders[HeaderNames.X_MS_HTTP_VERSION] || "",\r\n requestId: responseHeaders[HeaderNames.X_MS_REQUEST_ID] ||\r\n "",\r\n contentTypeHeader: responseHeaders[HeaderNames.CONTENT_TYPE] ||\r\n undefined,\r\n contentLengthHeader: responseHeaders[HeaderNames.CONTENT_LENGTH] ||\r\n undefined,\r\n httpStatus: e.httpStatus,\r\n }, correlationId);\r\n }\r\n throw e.error;\r\n }\r\n if (e instanceof AuthError) {\r\n throw e;\r\n }\r\n else {\r\n throw createClientAuthError(networkError);\r\n }\r\n }\r\n ThrottlingUtils.postProcess(this.cacheManager, thumbprint, response);\r\n return response;\r\n }\r\n /**\r\n * Updates the authority object of the client. Endpoint discovery must be completed.\r\n * @param updatedAuthority\r\n */\r\n async updateAuthority(cloudInstanceHostname, correlationId) {\r\n this.performanceClient?.addQueueMeasurement(PerformanceEvents.UpdateTokenEndpointAuthority, correlationId);\r\n const cloudInstanceAuthorityUri = `https://${cloudInstanceHostname}/${this.authority.tenant}/`;\r\n const cloudInstanceAuthority = await createDiscoveredInstance(cloudInstanceAuthorityUri, this.networkClient, this.cacheManager, this.authority.options, this.logger, correlationId, this.performanceClient);\r\n this.authority = cloudInstanceAuthority;\r\n }\r\n /**\r\n * Creates query string for the /token request\r\n * @param request\r\n */\r\n createTokenQueryParameters(request) {\r\n const parameterBuilder = new RequestParameterBuilder(request.correlationId, this.performanceClient);\r\n if (request.embeddedClientId) {\r\n parameterBuilder.addBrokerParameters({\r\n brokerClientId: this.config.authOptions.clientId,\r\n brokerRedirectUri: this.config.authOptions.redirectUri,\r\n });\r\n }\r\n if (request.tokenQueryParameters) {\r\n parameterBuilder.addExtraQueryParameters(request.tokenQueryParameters);\r\n }\r\n parameterBuilder.addCorrelationId(request.correlationId);\r\n return parameterBuilder.createQueryString();\r\n }\r\n}\n\n\n//# sourceMappingURL=BaseClient.mjs.map\n\n;// ./node_modules/@azure/msal-common/dist/crypto/PopTokenGenerator.mjs\n/*! @azure/msal-common v14.16.0 2024-11-05 */\n\n\n\n\n\n\n/*\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License.\r\n */\r\nconst KeyLocation = {\r\n SW: "sw",\r\n UHW: "uhw",\r\n};\r\n/** @internal */\r\nclass PopTokenGenerator {\r\n constructor(cryptoUtils, performanceClient) {\r\n this.cryptoUtils = cryptoUtils;\r\n this.performanceClient = performanceClient;\r\n }\r\n /**\r\n * Generates the req_cnf validated at the RP in the POP protocol for SHR parameters\r\n * and returns an object containing the keyid, the full req_cnf string and the req_cnf string hash\r\n * @param request\r\n * @returns\r\n */\r\n async generateCnf(request, logger) {\r\n this.performanceClient?.addQueueMeasurement(PerformanceEvents.PopTokenGenerateCnf, request.correlationId);\r\n const reqCnf = await invokeAsync(this.generateKid.bind(this), PerformanceEvents.PopTokenGenerateCnf, logger, this.performanceClient, request.correlationId)(request);\r\n const reqCnfString = this.cryptoUtils.base64UrlEncode(JSON.stringify(reqCnf));\r\n return {\r\n kid: reqCnf.kid,\r\n reqCnfString,\r\n };\r\n }\r\n /**\r\n * Generates key_id for a SHR token request\r\n * @param request\r\n * @returns\r\n */\r\n async generateKid(request) {\r\n this.performanceClient?.addQueueMeasurement(PerformanceEvents.PopTokenGenerateKid, request.correlationId);\r\n const kidThumbprint = await this.cryptoUtils.getPublicKeyThumbprint(request);\r\n return {\r\n kid: kidThumbprint,\r\n xms_ksl: KeyLocation.SW,\r\n };\r\n }\r\n /**\r\n * Signs the POP access_token with the local generated key-pair\r\n * @param accessToken\r\n * @param request\r\n * @returns\r\n */\r\n async signPopToken(accessToken, keyId, request) {\r\n return this.signPayload(accessToken, keyId, request);\r\n }\r\n /**\r\n * Utility function to generate the signed JWT for an access_token\r\n * @param payload\r\n * @param kid\r\n * @param request\r\n * @param claims\r\n * @returns\r\n */\r\n async signPayload(payload, keyId, request, claims) {\r\n // Deconstruct request to extract SHR parameters\r\n const { resourceRequestMethod, resourceRequestUri, shrClaims, shrNonce, shrOptions, } = request;\r\n const resourceUrlString = resourceRequestUri\r\n ? new UrlString(resourceRequestUri)\r\n : undefined;\r\n const resourceUrlComponents = resourceUrlString?.getUrlComponents();\r\n return this.cryptoUtils.signJwt({\r\n at: payload,\r\n ts: nowSeconds(),\r\n m: resourceRequestMethod?.toUpperCase(),\r\n u: resourceUrlComponents?.HostNameAndPort,\r\n nonce: shrNonce || this.cryptoUtils.createNewGuid(),\r\n p: resourceUrlComponents?.AbsolutePath,\r\n q: resourceUrlComponents?.QueryString\r\n ? [[], resourceUrlComponents.QueryString]\r\n : undefined,\r\n client_claims: shrClaims || undefined,\r\n ...claims,\r\n }, keyId, shrOptions, request.correlationId);\r\n }\r\n}\n\n\n//# sourceMappingURL=PopTokenGenerator.mjs.map\n\n;// ./node_modules/@azure/msal-common/dist/cache/persistence/TokenCacheContext.mjs\n/*! @azure/msal-common v14.16.0 2024-11-05 */\n\n/*\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License.\r\n */\r\n/**\r\n * This class instance helps track the memory changes facilitating\r\n * decisions to read from and write to the persistent cache\r\n */ class TokenCacheContext {\r\n constructor(tokenCache, hasChanged) {\r\n this.cache = tokenCache;\r\n this.hasChanged = hasChanged;\r\n }\r\n /**\r\n * boolean which indicates the changes in cache\r\n */\r\n get cacheHasChanged() {\r\n return this.hasChanged;\r\n }\r\n /**\r\n * function to retrieve the token cache\r\n */\r\n get tokenCache() {\r\n return this.cache;\r\n }\r\n}\n\n\n//# sourceMappingURL=TokenCacheContext.mjs.map\n\n;// ./node_modules/@azure/msal-common/dist/response/ResponseHandler.mjs\n/*! @azure/msal-common v14.16.0 2024-11-05 */\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n/*\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License.\r\n */\r\nfunction parseServerErrorNo(serverResponse) {\r\n const errorCodePrefix = "code=";\r\n const errorCodePrefixIndex = serverResponse.error_uri?.lastIndexOf(errorCodePrefix);\r\n return errorCodePrefixIndex && errorCodePrefixIndex >= 0\r\n ? serverResponse.error_uri?.substring(errorCodePrefixIndex + errorCodePrefix.length)\r\n : undefined;\r\n}\r\n/**\r\n * Class that handles response parsing.\r\n * @internal\r\n */\r\nclass ResponseHandler {\r\n constructor(clientId, cacheStorage, cryptoObj, logger, serializableCache, persistencePlugin, performanceClient) {\r\n this.clientId = clientId;\r\n this.cacheStorage = cacheStorage;\r\n this.cryptoObj = cryptoObj;\r\n this.logger = logger;\r\n this.serializableCache = serializableCache;\r\n this.persistencePlugin = persistencePlugin;\r\n this.performanceClient = performanceClient;\r\n }\r\n /**\r\n * Function which validates server authorization code response.\r\n * @param serverResponseHash\r\n * @param requestState\r\n * @param cryptoObj\r\n */\r\n validateServerAuthorizationCodeResponse(serverResponse, requestState) {\r\n if (!serverResponse.state || !requestState) {\r\n throw serverResponse.state\r\n ? createClientAuthError(stateNotFound, "Cached State")\r\n : createClientAuthError(stateNotFound, "Server State");\r\n }\r\n let decodedServerResponseState;\r\n let decodedRequestState;\r\n try {\r\n decodedServerResponseState = decodeURIComponent(serverResponse.state);\r\n }\r\n catch (e) {\r\n throw createClientAuthError(invalidState, serverResponse.state);\r\n }\r\n try {\r\n decodedRequestState = decodeURIComponent(requestState);\r\n }\r\n catch (e) {\r\n throw createClientAuthError(invalidState, serverResponse.state);\r\n }\r\n if (decodedServerResponseState !== decodedRequestState) {\r\n throw createClientAuthError(stateMismatch);\r\n }\r\n // Check for error\r\n if (serverResponse.error ||\r\n serverResponse.error_description ||\r\n serverResponse.suberror) {\r\n const serverErrorNo = parseServerErrorNo(serverResponse);\r\n if (isInteractionRequiredError(serverResponse.error, serverResponse.error_description, serverResponse.suberror)) {\r\n throw new InteractionRequiredAuthError(serverResponse.error || "", serverResponse.error_description, serverResponse.suberror, serverResponse.timestamp || "", serverResponse.trace_id || "", serverResponse.correlation_id || "", serverResponse.claims || "", serverErrorNo);\r\n }\r\n throw new ServerError(serverResponse.error || "", serverResponse.error_description, serverResponse.suberror, serverErrorNo);\r\n }\r\n }\r\n /**\r\n * Function which validates server authorization token response.\r\n * @param serverResponse\r\n * @param refreshAccessToken\r\n */\r\n validateTokenResponse(serverResponse, refreshAccessToken) {\r\n // Check for error\r\n if (serverResponse.error ||\r\n serverResponse.error_description ||\r\n serverResponse.suberror) {\r\n const errString = `Error(s): ${serverResponse.error_codes || Constants.NOT_AVAILABLE} - Timestamp: ${serverResponse.timestamp || Constants.NOT_AVAILABLE} - Description: ${serverResponse.error_description || Constants.NOT_AVAILABLE} - Correlation ID: ${serverResponse.correlation_id || Constants.NOT_AVAILABLE} - Trace ID: ${serverResponse.trace_id || Constants.NOT_AVAILABLE}`;\r\n const serverErrorNo = serverResponse.error_codes?.length\r\n ? serverResponse.error_codes[0]\r\n : undefined;\r\n const serverError = new ServerError(serverResponse.error, errString, serverResponse.suberror, serverErrorNo, serverResponse.status);\r\n // check if 500 error\r\n if (refreshAccessToken &&\r\n serverResponse.status &&\r\n serverResponse.status >= HttpStatus.SERVER_ERROR_RANGE_START &&\r\n serverResponse.status <= HttpStatus.SERVER_ERROR_RANGE_END) {\r\n this.logger.warning(`executeTokenRequest:validateTokenResponse - AAD is currently unavailable and the access token is unable to be refreshed.\\n${serverError}`);\r\n // don\'t throw an exception, but alert the user via a log that the token was unable to be refreshed\r\n return;\r\n // check if 400 error\r\n }\r\n else if (refreshAccessToken &&\r\n serverResponse.status &&\r\n serverResponse.status >= HttpStatus.CLIENT_ERROR_RANGE_START &&\r\n serverResponse.status <= HttpStatus.CLIENT_ERROR_RANGE_END) {\r\n this.logger.warning(`executeTokenRequest:validateTokenResponse - AAD is currently available but is unable to refresh the access token.\\n${serverError}`);\r\n // don\'t throw an exception, but alert the user via a log that the token was unable to be refreshed\r\n return;\r\n }\r\n if (isInteractionRequiredError(serverResponse.error, serverResponse.error_description, serverResponse.suberror)) {\r\n throw new InteractionRequiredAuthError(serverResponse.error, serverResponse.error_description, serverResponse.suberror, serverResponse.timestamp || Constants.EMPTY_STRING, serverResponse.trace_id || Constants.EMPTY_STRING, serverResponse.correlation_id || Constants.EMPTY_STRING, serverResponse.claims || Constants.EMPTY_STRING, serverErrorNo);\r\n }\r\n throw serverError;\r\n }\r\n }\r\n /**\r\n * Returns a constructed token response based on given string. Also manages the cache updates and cleanups.\r\n * @param serverTokenResponse\r\n * @param authority\r\n */\r\n async handleServerTokenResponse(serverTokenResponse, authority, reqTimestamp, request, authCodePayload, userAssertionHash, handlingRefreshTokenResponse, forceCacheRefreshTokenResponse, serverRequestId) {\r\n this.performanceClient?.addQueueMeasurement(PerformanceEvents.HandleServerTokenResponse, serverTokenResponse.correlation_id);\r\n // create an idToken object (not entity)\r\n let idTokenClaims;\r\n if (serverTokenResponse.id_token) {\r\n idTokenClaims = extractTokenClaims(serverTokenResponse.id_token || Constants.EMPTY_STRING, this.cryptoObj.base64Decode);\r\n // token nonce check (TODO: Add a warning if no nonce is given?)\r\n if (authCodePayload && authCodePayload.nonce) {\r\n if (idTokenClaims.nonce !== authCodePayload.nonce) {\r\n throw createClientAuthError(nonceMismatch);\r\n }\r\n }\r\n // token max_age check\r\n if (request.maxAge || request.maxAge === 0) {\r\n const authTime = idTokenClaims.auth_time;\r\n if (!authTime) {\r\n throw createClientAuthError(authTimeNotFound);\r\n }\r\n checkMaxAge(authTime, request.maxAge);\r\n }\r\n }\r\n // generate homeAccountId\r\n this.homeAccountIdentifier = AccountEntity.generateHomeAccountId(serverTokenResponse.client_info || Constants.EMPTY_STRING, authority.authorityType, this.logger, this.cryptoObj, idTokenClaims);\r\n // save the response tokens\r\n let requestStateObj;\r\n if (!!authCodePayload && !!authCodePayload.state) {\r\n requestStateObj = ProtocolUtils.parseRequestState(this.cryptoObj, authCodePayload.state);\r\n }\r\n // Add keyId from request to serverTokenResponse if defined\r\n serverTokenResponse.key_id =\r\n serverTokenResponse.key_id || request.sshKid || undefined;\r\n const cacheRecord = this.generateCacheRecord(serverTokenResponse, authority, reqTimestamp, request, idTokenClaims, userAssertionHash, authCodePayload);\r\n let cacheContext;\r\n try {\r\n if (this.persistencePlugin && this.serializableCache) {\r\n this.logger.verbose("Persistence enabled, calling beforeCacheAccess");\r\n cacheContext = new TokenCacheContext(this.serializableCache, true);\r\n await this.persistencePlugin.beforeCacheAccess(cacheContext);\r\n }\r\n /*\r\n * When saving a refreshed tokens to the cache, it is expected that the account that was used is present in the cache.\r\n * If not present, we should return null, as it\'s the case that another application called removeAccount in between\r\n * the calls to getAllAccounts and acquireTokenSilent. We should not overwrite that removal, unless explicitly flagged by\r\n * the developer, as in the case of refresh token flow used in ADAL Node to MSAL Node migration.\r\n */\r\n if (handlingRefreshTokenResponse &&\r\n !forceCacheRefreshTokenResponse &&\r\n cacheRecord.account) {\r\n const key = cacheRecord.account.generateAccountKey();\r\n const account = this.cacheStorage.getAccount(key, this.logger);\r\n if (!account) {\r\n this.logger.warning("Account used to refresh tokens not in persistence, refreshed tokens will not be stored in the cache");\r\n return await ResponseHandler.generateAuthenticationResult(this.cryptoObj, authority, cacheRecord, false, request, idTokenClaims, requestStateObj, undefined, serverRequestId);\r\n }\r\n }\r\n await this.cacheStorage.saveCacheRecord(cacheRecord, request.storeInCache, request.correlationId);\r\n }\r\n finally {\r\n if (this.persistencePlugin &&\r\n this.serializableCache &&\r\n cacheContext) {\r\n this.logger.verbose("Persistence enabled, calling afterCacheAccess");\r\n await this.persistencePlugin.afterCacheAccess(cacheContext);\r\n }\r\n }\r\n return ResponseHandler.generateAuthenticationResult(this.cryptoObj, authority, cacheRecord, false, request, idTokenClaims, requestStateObj, serverTokenResponse, serverRequestId);\r\n }\r\n /**\r\n * Generates CacheRecord\r\n * @param serverTokenResponse\r\n * @param idTokenObj\r\n * @param authority\r\n */\r\n generateCacheRecord(serverTokenResponse, authority, reqTimestamp, request, idTokenClaims, userAssertionHash, authCodePayload) {\r\n const env = authority.getPreferredCache();\r\n if (!env) {\r\n throw createClientAuthError(invalidCacheEnvironment);\r\n }\r\n const claimsTenantId = getTenantIdFromIdTokenClaims(idTokenClaims);\r\n // IdToken: non AAD scenarios can have empty realm\r\n let cachedIdToken;\r\n let cachedAccount;\r\n if (serverTokenResponse.id_token && !!idTokenClaims) {\r\n cachedIdToken = createIdTokenEntity(this.homeAccountIdentifier, env, serverTokenResponse.id_token, this.clientId, claimsTenantId || "");\r\n cachedAccount = buildAccountToCache(this.cacheStorage, authority, this.homeAccountIdentifier, this.cryptoObj.base64Decode, idTokenClaims, serverTokenResponse.client_info, env, claimsTenantId, authCodePayload, undefined, // nativeAccountId\r\n this.logger);\r\n }\r\n // AccessToken\r\n let cachedAccessToken = null;\r\n if (serverTokenResponse.access_token) {\r\n // If scopes not returned in server response, use request scopes\r\n const responseScopes = serverTokenResponse.scope\r\n ? ScopeSet.fromString(serverTokenResponse.scope)\r\n : new ScopeSet(request.scopes || []);\r\n /*\r\n * Use timestamp calculated before request\r\n * Server may return timestamps as strings, parse to numbers if so.\r\n */\r\n const expiresIn = (typeof serverTokenResponse.expires_in === "string"\r\n ? parseInt(serverTokenResponse.expires_in, 10)\r\n : serverTokenResponse.expires_in) || 0;\r\n const extExpiresIn = (typeof serverTokenResponse.ext_expires_in === "string"\r\n ? parseInt(serverTokenResponse.ext_expires_in, 10)\r\n : serverTokenResponse.ext_expires_in) || 0;\r\n const refreshIn = (typeof serverTokenResponse.refresh_in === "string"\r\n ? parseInt(serverTokenResponse.refresh_in, 10)\r\n : serverTokenResponse.refresh_in) || undefined;\r\n const tokenExpirationSeconds = reqTimestamp + expiresIn;\r\n const extendedTokenExpirationSeconds = tokenExpirationSeconds + extExpiresIn;\r\n const refreshOnSeconds = refreshIn && refreshIn > 0\r\n ? reqTimestamp + refreshIn\r\n : undefined;\r\n // non AAD scenarios can have empty realm\r\n cachedAccessToken = createAccessTokenEntity(this.homeAccountIdentifier, env, serverTokenResponse.access_token, this.clientId, claimsTenantId || authority.tenant || "", responseScopes.printScopes(), tokenExpirationSeconds, extendedTokenExpirationSeconds, this.cryptoObj.base64Decode, refreshOnSeconds, serverTokenResponse.token_type, userAssertionHash, serverTokenResponse.key_id, request.claims, request.requestedClaimsHash);\r\n }\r\n // refreshToken\r\n let cachedRefreshToken = null;\r\n if (serverTokenResponse.refresh_token) {\r\n let rtExpiresOn;\r\n if (serverTokenResponse.refresh_token_expires_in) {\r\n const rtExpiresIn = typeof serverTokenResponse.refresh_token_expires_in ===\r\n "string"\r\n ? parseInt(serverTokenResponse.refresh_token_expires_in, 10)\r\n : serverTokenResponse.refresh_token_expires_in;\r\n rtExpiresOn = reqTimestamp + rtExpiresIn;\r\n }\r\n cachedRefreshToken = createRefreshTokenEntity(this.homeAccountIdentifier, env, serverTokenResponse.refresh_token, this.clientId, serverTokenResponse.foci, userAssertionHash, rtExpiresOn);\r\n }\r\n // appMetadata\r\n let cachedAppMetadata = null;\r\n if (serverTokenResponse.foci) {\r\n cachedAppMetadata = {\r\n clientId: this.clientId,\r\n environment: env,\r\n familyId: serverTokenResponse.foci,\r\n };\r\n }\r\n return {\r\n account: cachedAccount,\r\n idToken: cachedIdToken,\r\n accessToken: cachedAccessToken,\r\n refreshToken: cachedRefreshToken,\r\n appMetadata: cachedAppMetadata,\r\n };\r\n }\r\n /**\r\n * Creates an @AuthenticationResult from @CacheRecord , @IdToken , and a boolean that states whether or not the result is from cache.\r\n *\r\n * Optionally takes a state string that is set as-is in the response.\r\n *\r\n * @param cacheRecord\r\n * @param idTokenObj\r\n * @param fromTokenCache\r\n * @param stateString\r\n */\r\n static async generateAuthenticationResult(cryptoObj, authority, cacheRecord, fromTokenCache, request, idTokenClaims, requestState, serverTokenResponse, requestId) {\r\n let accessToken = Constants.EMPTY_STRING;\r\n let responseScopes = [];\r\n let expiresOn = null;\r\n let extExpiresOn;\r\n let refreshOn;\r\n let familyId = Constants.EMPTY_STRING;\r\n if (cacheRecord.accessToken) {\r\n /*\r\n * if the request object has `popKid` property, `signPopToken` will be set to false and\r\n * the token will be returned unsigned\r\n */\r\n if (cacheRecord.accessToken.tokenType ===\r\n AuthenticationScheme.POP &&\r\n !request.popKid) {\r\n const popTokenGenerator = new PopTokenGenerator(cryptoObj);\r\n const { secret, keyId } = cacheRecord.accessToken;\r\n if (!keyId) {\r\n throw createClientAuthError(keyIdMissing);\r\n }\r\n accessToken = await popTokenGenerator.signPopToken(secret, keyId, request);\r\n }\r\n else {\r\n accessToken = cacheRecord.accessToken.secret;\r\n }\r\n responseScopes = ScopeSet.fromString(cacheRecord.accessToken.target).asArray();\r\n expiresOn = new Date(Number(cacheRecord.accessToken.expiresOn) * 1000);\r\n extExpiresOn = new Date(Number(cacheRecord.accessToken.extendedExpiresOn) * 1000);\r\n if (cacheRecord.accessToken.refreshOn) {\r\n refreshOn = new Date(Number(cacheRecord.accessToken.refreshOn) * 1000);\r\n }\r\n }\r\n if (cacheRecord.appMetadata) {\r\n familyId =\r\n cacheRecord.appMetadata.familyId === THE_FAMILY_ID\r\n ? THE_FAMILY_ID\r\n : "";\r\n }\r\n const uid = idTokenClaims?.oid || idTokenClaims?.sub || "";\r\n const tid = idTokenClaims?.tid || "";\r\n // for hybrid + native bridge enablement, send back the native account Id\r\n if (serverTokenResponse?.spa_accountid && !!cacheRecord.account) {\r\n cacheRecord.account.nativeAccountId =\r\n serverTokenResponse?.spa_accountid;\r\n }\r\n const accountInfo = cacheRecord.account\r\n ? updateAccountTenantProfileData(cacheRecord.account.getAccountInfo(), undefined, // tenantProfile optional\r\n idTokenClaims, cacheRecord.idToken?.secret)\r\n : null;\r\n return {\r\n authority: authority.canonicalAuthority,\r\n uniqueId: uid,\r\n tenantId: tid,\r\n scopes: responseScopes,\r\n account: accountInfo,\r\n idToken: cacheRecord?.idToken?.secret || "",\r\n idTokenClaims: idTokenClaims || {},\r\n accessToken: accessToken,\r\n fromCache: fromTokenCache,\r\n expiresOn: expiresOn,\r\n extExpiresOn: extExpiresOn,\r\n refreshOn: refreshOn,\r\n correlationId: request.correlationId,\r\n requestId: requestId || Constants.EMPTY_STRING,\r\n familyId: familyId,\r\n tokenType: cacheRecord.accessToken?.tokenType || Constants.EMPTY_STRING,\r\n state: requestState\r\n ? requestState.userRequestState\r\n : Constants.EMPTY_STRING,\r\n cloudGraphHostName: cacheRecord.account?.cloudGraphHostName ||\r\n Constants.EMPTY_STRING,\r\n msGraphHost: cacheRecord.account?.msGraphHost || Constants.EMPTY_STRING,\r\n code: serverTokenResponse?.spa_code,\r\n fromNativeBroker: false,\r\n };\r\n }\r\n}\r\nfunction buildAccountToCache(cacheStorage, authority, homeAccountId, base64Decode, idTokenClaims, clientInfo, environment, claimsTenantId, authCodePayload, nativeAccountId, logger) {\r\n logger?.verbose("setCachedAccount called");\r\n // Check if base account is already cached\r\n const accountKeys = cacheStorage.getAccountKeys();\r\n const baseAccountKey = accountKeys.find((accountKey) => {\r\n return accountKey.startsWith(homeAccountId);\r\n });\r\n let cachedAccount = null;\r\n if (baseAccountKey) {\r\n cachedAccount = cacheStorage.getAccount(baseAccountKey, logger);\r\n }\r\n const baseAccount = cachedAccount ||\r\n AccountEntity.createAccount({\r\n homeAccountId,\r\n idTokenClaims,\r\n clientInfo,\r\n environment,\r\n cloudGraphHostName: authCodePayload?.cloud_graph_host_name,\r\n msGraphHost: authCodePayload?.msgraph_host,\r\n nativeAccountId: nativeAccountId,\r\n }, authority, base64Decode);\r\n const tenantProfiles = baseAccount.tenantProfiles || [];\r\n const tenantId = claimsTenantId || baseAccount.realm;\r\n if (tenantId &&\r\n !tenantProfiles.find((tenantProfile) => {\r\n return tenantProfile.tenantId === tenantId;\r\n })) {\r\n const newTenantProfile = buildTenantProfile(homeAccountId, baseAccount.localAccountId, tenantId, idTokenClaims);\r\n tenantProfiles.push(newTenantProfile);\r\n }\r\n baseAccount.tenantProfiles = tenantProfiles;\r\n return baseAccount;\r\n}\n\n\n//# sourceMappingURL=ResponseHandler.mjs.map\n\n;// ./node_modules/@azure/msal-common/dist/utils/ClientAssertionUtils.mjs\n/*! @azure/msal-common v14.16.0 2024-11-05 */\n\n/*\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License.\r\n */\r\nasync function getClientAssertion(clientAssertion, clientId, tokenEndpoint) {\r\n if (typeof clientAssertion === "string") {\r\n return clientAssertion;\r\n }\r\n else {\r\n const config = {\r\n clientId: clientId,\r\n tokenEndpoint: tokenEndpoint,\r\n };\r\n return clientAssertion(config);\r\n }\r\n}\n\n\n//# sourceMappingURL=ClientAssertionUtils.mjs.map\n\n;// ./node_modules/@azure/msal-common/dist/client/AuthorizationCodeClient.mjs\n/*! @azure/msal-common v14.16.0 2024-11-05 */\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n/*\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License.\r\n */\r\n/**\r\n * Oauth2.0 Authorization Code client\r\n * @internal\r\n */\r\nclass AuthorizationCodeClient extends BaseClient {\r\n constructor(configuration, performanceClient) {\r\n super(configuration, performanceClient);\r\n // Flag to indicate if client is for hybrid spa auth code redemption\r\n this.includeRedirectUri = true;\r\n this.oidcDefaultScopes =\r\n this.config.authOptions.authority.options.OIDCOptions?.defaultScopes;\r\n }\r\n /**\r\n * Creates the URL of the authorization request letting the user input credentials and consent to the\r\n * application. The URL target the /authorize endpoint of the authority configured in the\r\n * application object.\r\n *\r\n * Once the user inputs their credentials and consents, the authority will send a response to the redirect URI\r\n * sent in the request and should contain an authorization code, which can then be used to acquire tokens via\r\n * acquireToken(AuthorizationCodeRequest)\r\n * @param request\r\n */\r\n async getAuthCodeUrl(request) {\r\n this.performanceClient?.addQueueMeasurement(PerformanceEvents.GetAuthCodeUrl, request.correlationId);\r\n const queryString = await invokeAsync(this.createAuthCodeUrlQueryString.bind(this), PerformanceEvents.AuthClientCreateQueryString, this.logger, this.performanceClient, request.correlationId)(request);\r\n return UrlString.appendQueryString(this.authority.authorizationEndpoint, queryString);\r\n }\r\n /**\r\n * API to acquire a token in exchange of \'authorization_code` acquired by the user in the first leg of the\r\n * authorization_code_grant\r\n * @param request\r\n */\r\n async acquireToken(request, authCodePayload) {\r\n this.performanceClient?.addQueueMeasurement(PerformanceEvents.AuthClientAcquireToken, request.correlationId);\r\n if (!request.code) {\r\n throw createClientAuthError(requestCannotBeMade);\r\n }\r\n const reqTimestamp = nowSeconds();\r\n const response = await invokeAsync(this.executeTokenRequest.bind(this), PerformanceEvents.AuthClientExecuteTokenRequest, this.logger, this.performanceClient, request.correlationId)(this.authority, request);\r\n // Retrieve requestId from response headers\r\n const requestId = response.headers?.[HeaderNames.X_MS_REQUEST_ID];\r\n const responseHandler = new ResponseHandler(this.config.authOptions.clientId, this.cacheManager, this.cryptoUtils, this.logger, this.config.serializableCache, this.config.persistencePlugin, this.performanceClient);\r\n // Validate response. This function throws a server error if an error is returned by the server.\r\n responseHandler.validateTokenResponse(response.body);\r\n return invokeAsync(responseHandler.handleServerTokenResponse.bind(responseHandler), PerformanceEvents.HandleServerTokenResponse, this.logger, this.performanceClient, request.correlationId)(response.body, this.authority, reqTimestamp, request, authCodePayload, undefined, undefined, undefined, requestId);\r\n }\r\n /**\r\n * Handles the hash fragment response from public client code request. Returns a code response used by\r\n * the client to exchange for a token in acquireToken.\r\n * @param hashFragment\r\n */\r\n handleFragmentResponse(serverParams, cachedState) {\r\n // Handle responses.\r\n const responseHandler = new ResponseHandler(this.config.authOptions.clientId, this.cacheManager, this.cryptoUtils, this.logger, null, null);\r\n // Get code response\r\n responseHandler.validateServerAuthorizationCodeResponse(serverParams, cachedState);\r\n // throw when there is no auth code in the response\r\n if (!serverParams.code) {\r\n throw createClientAuthError(authorizationCodeMissingFromServerResponse);\r\n }\r\n return serverParams;\r\n }\r\n /**\r\n * Used to log out the current user, and redirect the user to the postLogoutRedirectUri.\r\n * Default behaviour is to redirect the user to `window.location.href`.\r\n * @param authorityUri\r\n */\r\n getLogoutUri(logoutRequest) {\r\n // Throw error if logoutRequest is null/undefined\r\n if (!logoutRequest) {\r\n throw createClientConfigurationError(logoutRequestEmpty);\r\n }\r\n const queryString = this.createLogoutUrlQueryString(logoutRequest);\r\n // Construct logout URI\r\n return UrlString.appendQueryString(this.authority.endSessionEndpoint, queryString);\r\n }\r\n /**\r\n * Executes POST request to token endpoint\r\n * @param authority\r\n * @param request\r\n */\r\n async executeTokenRequest(authority, request) {\r\n this.performanceClient?.addQueueMeasurement(PerformanceEvents.AuthClientExecuteTokenRequest, request.correlationId);\r\n const queryParametersString = this.createTokenQueryParameters(request);\r\n const endpoint = UrlString.appendQueryString(authority.tokenEndpoint, queryParametersString);\r\n const requestBody = await invokeAsync(this.createTokenRequestBody.bind(this), PerformanceEvents.AuthClientCreateTokenRequestBody, this.logger, this.performanceClient, request.correlationId)(request);\r\n let ccsCredential = undefined;\r\n if (request.clientInfo) {\r\n try {\r\n const clientInfo = buildClientInfo(request.clientInfo, this.cryptoUtils.base64Decode);\r\n ccsCredential = {\r\n credential: `${clientInfo.uid}${Separators.CLIENT_INFO_SEPARATOR}${clientInfo.utid}`,\r\n type: CcsCredentialType.HOME_ACCOUNT_ID,\r\n };\r\n }\r\n catch (e) {\r\n this.logger.verbose("Could not parse client info for CCS Header: " + e);\r\n }\r\n }\r\n const headers = this.createTokenRequestHeaders(ccsCredential || request.ccsCredential);\r\n const thumbprint = {\r\n clientId: request.tokenBodyParameters?.clientId ||\r\n this.config.authOptions.clientId,\r\n authority: authority.canonicalAuthority,\r\n scopes: request.scopes,\r\n claims: request.claims,\r\n authenticationScheme: request.authenticationScheme,\r\n resourceRequestMethod: request.resourceRequestMethod,\r\n resourceRequestUri: request.resourceRequestUri,\r\n shrClaims: request.shrClaims,\r\n sshKid: request.sshKid,\r\n };\r\n return invokeAsync(this.executePostToTokenEndpoint.bind(this), PerformanceEvents.AuthorizationCodeClientExecutePostToTokenEndpoint, this.logger, this.performanceClient, request.correlationId)(endpoint, requestBody, headers, thumbprint, request.correlationId, PerformanceEvents.AuthorizationCodeClientExecutePostToTokenEndpoint);\r\n }\r\n /**\r\n * Generates a map for all the params to be sent to the service\r\n * @param request\r\n */\r\n async createTokenRequestBody(request) {\r\n this.performanceClient?.addQueueMeasurement(PerformanceEvents.AuthClientCreateTokenRequestBody, request.correlationId);\r\n const parameterBuilder = new RequestParameterBuilder(request.correlationId, this.performanceClient);\r\n parameterBuilder.addClientId(request.embeddedClientId ||\r\n request.tokenBodyParameters?.[CLIENT_ID] ||\r\n this.config.authOptions.clientId);\r\n /*\r\n * For hybrid spa flow, there will be a code but no verifier\r\n * In this scenario, don\'t include redirect uri as auth code will not be bound to redirect URI\r\n */\r\n if (!this.includeRedirectUri) {\r\n // Just validate\r\n RequestValidator.validateRedirectUri(request.redirectUri);\r\n }\r\n else {\r\n // Validate and include redirect uri\r\n parameterBuilder.addRedirectUri(request.redirectUri);\r\n }\r\n // Add scope array, parameter builder will add default scopes and dedupe\r\n parameterBuilder.addScopes(request.scopes, true, this.oidcDefaultScopes);\r\n // add code: user set, not validated\r\n parameterBuilder.addAuthorizationCode(request.code);\r\n // Add library metadata\r\n parameterBuilder.addLibraryInfo(this.config.libraryInfo);\r\n parameterBuilder.addApplicationTelemetry(this.config.telemetry.application);\r\n parameterBuilder.addThrottling();\r\n if (this.serverTelemetryManager && !isOidcProtocolMode(this.config)) {\r\n parameterBuilder.addServerTelemetry(this.serverTelemetryManager);\r\n }\r\n // add code_verifier if passed\r\n if (request.codeVerifier) {\r\n parameterBuilder.addCodeVerifier(request.codeVerifier);\r\n }\r\n if (this.config.clientCredentials.clientSecret) {\r\n parameterBuilder.addClientSecret(this.config.clientCredentials.clientSecret);\r\n }\r\n if (this.config.clientCredentials.clientAssertion) {\r\n const clientAssertion = this.config.clientCredentials.clientAssertion;\r\n parameterBuilder.addClientAssertion(await getClientAssertion(clientAssertion.assertion, this.config.authOptions.clientId, request.resourceRequestUri));\r\n parameterBuilder.addClientAssertionType(clientAssertion.assertionType);\r\n }\r\n parameterBuilder.addGrantType(GrantType.AUTHORIZATION_CODE_GRANT);\r\n parameterBuilder.addClientInfo();\r\n if (request.authenticationScheme === AuthenticationScheme.POP) {\r\n const popTokenGenerator = new PopTokenGenerator(this.cryptoUtils, this.performanceClient);\r\n let reqCnfData;\r\n if (!request.popKid) {\r\n const generatedReqCnfData = await invokeAsync(popTokenGenerator.generateCnf.bind(popTokenGenerator), PerformanceEvents.PopTokenGenerateCnf, this.logger, this.performanceClient, request.correlationId)(request, this.logger);\r\n reqCnfData = generatedReqCnfData.reqCnfString;\r\n }\r\n else {\r\n reqCnfData = this.cryptoUtils.encodeKid(request.popKid);\r\n }\r\n // SPA PoP requires full Base64Url encoded req_cnf string (unhashed)\r\n parameterBuilder.addPopToken(reqCnfData);\r\n }\r\n else if (request.authenticationScheme === AuthenticationScheme.SSH) {\r\n if (request.sshJwk) {\r\n parameterBuilder.addSshJwk(request.sshJwk);\r\n }\r\n else {\r\n throw createClientConfigurationError(missingSshJwk);\r\n }\r\n }\r\n if (!StringUtils.isEmptyObj(request.claims) ||\r\n (this.config.authOptions.clientCapabilities &&\r\n this.config.authOptions.clientCapabilities.length > 0)) {\r\n parameterBuilder.addClaims(request.claims, this.config.authOptions.clientCapabilities);\r\n }\r\n let ccsCred = undefined;\r\n if (request.clientInfo) {\r\n try {\r\n const clientInfo = buildClientInfo(request.clientInfo, this.cryptoUtils.base64Decode);\r\n ccsCred = {\r\n credential: `${clientInfo.uid}${Separators.CLIENT_INFO_SEPARATOR}${clientInfo.utid}`,\r\n type: CcsCredentialType.HOME_ACCOUNT_ID,\r\n };\r\n }\r\n catch (e) {\r\n this.logger.verbose("Could not parse client info for CCS Header: " + e);\r\n }\r\n }\r\n else {\r\n ccsCred = request.ccsCredential;\r\n }\r\n // Adds these as parameters in the request instead of headers to prevent CORS preflight request\r\n if (this.config.systemOptions.preventCorsPreflight && ccsCred) {\r\n switch (ccsCred.type) {\r\n case CcsCredentialType.HOME_ACCOUNT_ID:\r\n try {\r\n const clientInfo = buildClientInfoFromHomeAccountId(ccsCred.credential);\r\n parameterBuilder.addCcsOid(clientInfo);\r\n }\r\n catch (e) {\r\n this.logger.verbose("Could not parse home account ID for CCS Header: " +\r\n e);\r\n }\r\n break;\r\n case CcsCredentialType.UPN:\r\n parameterBuilder.addCcsUpn(ccsCred.credential);\r\n break;\r\n }\r\n }\r\n if (request.embeddedClientId) {\r\n parameterBuilder.addBrokerParameters({\r\n brokerClientId: this.config.authOptions.clientId,\r\n brokerRedirectUri: this.config.authOptions.redirectUri,\r\n });\r\n }\r\n if (request.tokenBodyParameters) {\r\n parameterBuilder.addExtraQueryParameters(request.tokenBodyParameters);\r\n }\r\n // Add hybrid spa parameters if not already provided\r\n if (request.enableSpaAuthorizationCode &&\r\n (!request.tokenBodyParameters ||\r\n !request.tokenBodyParameters[RETURN_SPA_CODE])) {\r\n parameterBuilder.addExtraQueryParameters({\r\n [RETURN_SPA_CODE]: "1",\r\n });\r\n }\r\n return parameterBuilder.createQueryString();\r\n }\r\n /**\r\n * This API validates the `AuthorizationCodeUrlRequest` and creates a URL\r\n * @param request\r\n */\r\n async createAuthCodeUrlQueryString(request) {\r\n // generate the correlationId if not set by the user and add\r\n const correlationId = request.correlationId ||\r\n this.config.cryptoInterface.createNewGuid();\r\n this.performanceClient?.addQueueMeasurement(PerformanceEvents.AuthClientCreateQueryString, correlationId);\r\n const parameterBuilder = new RequestParameterBuilder(correlationId, this.performanceClient);\r\n parameterBuilder.addClientId(request.embeddedClientId ||\r\n request.extraQueryParameters?.[CLIENT_ID] ||\r\n this.config.authOptions.clientId);\r\n const requestScopes = [\r\n ...(request.scopes || []),\r\n ...(request.extraScopesToConsent || []),\r\n ];\r\n parameterBuilder.addScopes(requestScopes, true, this.oidcDefaultScopes);\r\n // validate the redirectUri (to be a non null value)\r\n parameterBuilder.addRedirectUri(request.redirectUri);\r\n parameterBuilder.addCorrelationId(correlationId);\r\n // add response_mode. If not passed in it defaults to query.\r\n parameterBuilder.addResponseMode(request.responseMode);\r\n // add response_type = code\r\n parameterBuilder.addResponseTypeCode();\r\n // add library info parameters\r\n parameterBuilder.addLibraryInfo(this.config.libraryInfo);\r\n if (!isOidcProtocolMode(this.config)) {\r\n parameterBuilder.addApplicationTelemetry(this.config.telemetry.application);\r\n }\r\n // add client_info=1\r\n parameterBuilder.addClientInfo();\r\n if (request.codeChallenge && request.codeChallengeMethod) {\r\n parameterBuilder.addCodeChallengeParams(request.codeChallenge, request.codeChallengeMethod);\r\n }\r\n if (request.prompt) {\r\n parameterBuilder.addPrompt(request.prompt);\r\n }\r\n if (request.domainHint) {\r\n parameterBuilder.addDomainHint(request.domainHint);\r\n }\r\n // Add sid or loginHint with preference for login_hint claim (in request) -> sid -> loginHint (upn/email) -> username of AccountInfo object\r\n if (request.prompt !== PromptValue.SELECT_ACCOUNT) {\r\n // AAD will throw if prompt=select_account is passed with an account hint\r\n if (request.sid && request.prompt === PromptValue.NONE) {\r\n // SessionID is only used in silent calls\r\n this.logger.verbose("createAuthCodeUrlQueryString: Prompt is none, adding sid from request");\r\n parameterBuilder.addSid(request.sid);\r\n }\r\n else if (request.account) {\r\n const accountSid = this.extractAccountSid(request.account);\r\n let accountLoginHintClaim = this.extractLoginHint(request.account);\r\n if (accountLoginHintClaim && request.domainHint) {\r\n this.logger.warning(`AuthorizationCodeClient.createAuthCodeUrlQueryString: "domainHint" param is set, skipping opaque "login_hint" claim. Please consider not passing domainHint`);\r\n accountLoginHintClaim = null;\r\n }\r\n // If login_hint claim is present, use it over sid/username\r\n if (accountLoginHintClaim) {\r\n this.logger.verbose("createAuthCodeUrlQueryString: login_hint claim present on account");\r\n parameterBuilder.addLoginHint(accountLoginHintClaim);\r\n try {\r\n const clientInfo = buildClientInfoFromHomeAccountId(request.account.homeAccountId);\r\n parameterBuilder.addCcsOid(clientInfo);\r\n }\r\n catch (e) {\r\n this.logger.verbose("createAuthCodeUrlQueryString: Could not parse home account ID for CCS Header");\r\n }\r\n }\r\n else if (accountSid && request.prompt === PromptValue.NONE) {\r\n /*\r\n * If account and loginHint are provided, we will check account first for sid before adding loginHint\r\n * SessionId is only used in silent calls\r\n */\r\n this.logger.verbose("createAuthCodeUrlQueryString: Prompt is none, adding sid from account");\r\n parameterBuilder.addSid(accountSid);\r\n try {\r\n const clientInfo = buildClientInfoFromHomeAccountId(request.account.homeAccountId);\r\n parameterBuilder.addCcsOid(clientInfo);\r\n }\r\n catch (e) {\r\n this.logger.verbose("createAuthCodeUrlQueryString: Could not parse home account ID for CCS Header");\r\n }\r\n }\r\n else if (request.loginHint) {\r\n this.logger.verbose("createAuthCodeUrlQueryString: Adding login_hint from request");\r\n parameterBuilder.addLoginHint(request.loginHint);\r\n parameterBuilder.addCcsUpn(request.loginHint);\r\n }\r\n else if (request.account.username) {\r\n // Fallback to account username if provided\r\n this.logger.verbose("createAuthCodeUrlQueryString: Adding login_hint from account");\r\n parameterBuilder.addLoginHint(request.account.username);\r\n try {\r\n const clientInfo = buildClientInfoFromHomeAccountId(request.account.homeAccountId);\r\n parameterBuilder.addCcsOid(clientInfo);\r\n }\r\n catch (e) {\r\n this.logger.verbose("createAuthCodeUrlQueryString: Could not parse home account ID for CCS Header");\r\n }\r\n }\r\n }\r\n else if (request.loginHint) {\r\n this.logger.verbose("createAuthCodeUrlQueryString: No account, adding login_hint from request");\r\n parameterBuilder.addLoginHint(request.loginHint);\r\n parameterBuilder.addCcsUpn(request.loginHint);\r\n }\r\n }\r\n else {\r\n this.logger.verbose("createAuthCodeUrlQueryString: Prompt is select_account, ignoring account hints");\r\n }\r\n if (request.nonce) {\r\n parameterBuilder.addNonce(request.nonce);\r\n }\r\n if (request.state) {\r\n parameterBuilder.addState(request.state);\r\n }\r\n if (request.claims ||\r\n (this.config.authOptions.clientCapabilities &&\r\n this.config.authOptions.clientCapabilities.length > 0)) {\r\n parameterBuilder.addClaims(request.claims, this.config.authOptions.clientCapabilities);\r\n }\r\n if (request.embeddedClientId) {\r\n parameterBuilder.addBrokerParameters({\r\n brokerClientId: this.config.authOptions.clientId,\r\n brokerRedirectUri: this.config.authOptions.redirectUri,\r\n });\r\n }\r\n this.addExtraQueryParams(request, parameterBuilder);\r\n if (request.nativeBroker) {\r\n // signal ests that this is a WAM call\r\n parameterBuilder.addNativeBroker();\r\n // pass the req_cnf for POP\r\n if (request.authenticationScheme === AuthenticationScheme.POP) {\r\n const popTokenGenerator = new PopTokenGenerator(this.cryptoUtils);\r\n // req_cnf is always sent as a string for SPAs\r\n let reqCnfData;\r\n if (!request.popKid) {\r\n const generatedReqCnfData = await invokeAsync(popTokenGenerator.generateCnf.bind(popTokenGenerator), PerformanceEvents.PopTokenGenerateCnf, this.logger, this.performanceClient, request.correlationId)(request, this.logger);\r\n reqCnfData = generatedReqCnfData.reqCnfString;\r\n }\r\n else {\r\n reqCnfData = this.cryptoUtils.encodeKid(request.popKid);\r\n }\r\n parameterBuilder.addPopToken(reqCnfData);\r\n }\r\n }\r\n return parameterBuilder.createQueryString();\r\n }\r\n /**\r\n * This API validates the `EndSessionRequest` and creates a URL\r\n * @param request\r\n */\r\n createLogoutUrlQueryString(request) {\r\n const parameterBuilder = new RequestParameterBuilder(request.correlationId, this.performanceClient);\r\n if (request.postLogoutRedirectUri) {\r\n parameterBuilder.addPostLogoutRedirectUri(request.postLogoutRedirectUri);\r\n }\r\n if (request.correlationId) {\r\n parameterBuilder.addCorrelationId(request.correlationId);\r\n }\r\n if (request.idTokenHint) {\r\n parameterBuilder.addIdTokenHint(request.idTokenHint);\r\n }\r\n if (request.state) {\r\n parameterBuilder.addState(request.state);\r\n }\r\n if (request.logoutHint) {\r\n parameterBuilder.addLogoutHint(request.logoutHint);\r\n }\r\n this.addExtraQueryParams(request, parameterBuilder);\r\n return parameterBuilder.createQueryString();\r\n }\r\n addExtraQueryParams(request, parameterBuilder) {\r\n const hasRequestInstanceAware = request.extraQueryParameters &&\r\n request.extraQueryParameters.hasOwnProperty("instance_aware");\r\n // Set instance_aware flag if config auth param is set\r\n if (!hasRequestInstanceAware && this.config.authOptions.instanceAware) {\r\n request.extraQueryParameters = request.extraQueryParameters || {};\r\n request.extraQueryParameters["instance_aware"] = "true";\r\n }\r\n if (request.extraQueryParameters) {\r\n parameterBuilder.addExtraQueryParameters(request.extraQueryParameters);\r\n }\r\n }\r\n /**\r\n * Helper to get sid from account. Returns null if idTokenClaims are not present or sid is not present.\r\n * @param account\r\n */\r\n extractAccountSid(account) {\r\n return account.idTokenClaims?.sid || null;\r\n }\r\n extractLoginHint(account) {\r\n return account.idTokenClaims?.login_hint || null;\r\n }\r\n}\n\n\n//# sourceMappingURL=AuthorizationCodeClient.mjs.map\n\n;// ./node_modules/@azure/msal-common/dist/telemetry/server/ServerTelemetryManager.mjs\n/*! @azure/msal-common v14.16.0 2024-11-05 */\n\n\n\n\n/*\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License.\r\n */\r\nconst skuGroupSeparator = ",";\r\nconst skuValueSeparator = "|";\r\nfunction makeExtraSkuString(params) {\r\n const { skus, libraryName, libraryVersion, extensionName, extensionVersion, } = params;\r\n const skuMap = new Map([\r\n [0, [libraryName, libraryVersion]],\r\n [2, [extensionName, extensionVersion]],\r\n ]);\r\n let skuArr = [];\r\n if (skus?.length) {\r\n skuArr = skus.split(skuGroupSeparator);\r\n // Ignore invalid input sku param\r\n if (skuArr.length < 4) {\r\n return skus;\r\n }\r\n }\r\n else {\r\n skuArr = Array.from({ length: 4 }, () => skuValueSeparator);\r\n }\r\n skuMap.forEach((value, key) => {\r\n if (value.length === 2 && value[0]?.length && value[1]?.length) {\r\n setSku({\r\n skuArr,\r\n index: key,\r\n skuName: value[0],\r\n skuVersion: value[1],\r\n });\r\n }\r\n });\r\n return skuArr.join(skuGroupSeparator);\r\n}\r\nfunction setSku(params) {\r\n const { skuArr, index, skuName, skuVersion } = params;\r\n if (index >= skuArr.length) {\r\n return;\r\n }\r\n skuArr[index] = [skuName, skuVersion].join(skuValueSeparator);\r\n}\r\n/** @internal */\r\nclass ServerTelemetryManager {\r\n constructor(telemetryRequest, cacheManager) {\r\n this.cacheOutcome = CacheOutcome.NOT_APPLICABLE;\r\n this.cacheManager = cacheManager;\r\n this.apiId = telemetryRequest.apiId;\r\n this.correlationId = telemetryRequest.correlationId;\r\n this.wrapperSKU = telemetryRequest.wrapperSKU || Constants.EMPTY_STRING;\r\n this.wrapperVer = telemetryRequest.wrapperVer || Constants.EMPTY_STRING;\r\n this.telemetryCacheKey =\r\n SERVER_TELEM_CONSTANTS.CACHE_KEY +\r\n Separators.CACHE_KEY_SEPARATOR +\r\n telemetryRequest.clientId;\r\n }\r\n /**\r\n * API to add MSER Telemetry to request\r\n */\r\n generateCurrentRequestHeaderValue() {\r\n const request = `${this.apiId}${SERVER_TELEM_CONSTANTS.VALUE_SEPARATOR}${this.cacheOutcome}`;\r\n const platformFieldsArr = [this.wrapperSKU, this.wrapperVer];\r\n const nativeBrokerErrorCode = this.getNativeBrokerErrorCode();\r\n if (nativeBrokerErrorCode?.length) {\r\n platformFieldsArr.push(`broker_error=${nativeBrokerErrorCode}`);\r\n }\r\n const platformFields = platformFieldsArr.join(SERVER_TELEM_CONSTANTS.VALUE_SEPARATOR);\r\n const regionDiscoveryFields = this.getRegionDiscoveryFields();\r\n const requestWithRegionDiscoveryFields = [\r\n request,\r\n regionDiscoveryFields,\r\n ].join(SERVER_TELEM_CONSTANTS.VALUE_SEPARATOR);\r\n return [\r\n SERVER_TELEM_CONSTANTS.SCHEMA_VERSION,\r\n requestWithRegionDiscoveryFields,\r\n platformFields,\r\n ].join(SERVER_TELEM_CONSTANTS.CATEGORY_SEPARATOR);\r\n }\r\n /**\r\n * API to add MSER Telemetry for the last failed request\r\n */\r\n generateLastRequestHeaderValue() {\r\n const lastRequests = this.getLastRequests();\r\n const maxErrors = ServerTelemetryManager.maxErrorsToSend(lastRequests);\r\n const failedRequests = lastRequests.failedRequests\r\n .slice(0, 2 * maxErrors)\r\n .join(SERVER_TELEM_CONSTANTS.VALUE_SEPARATOR);\r\n const errors = lastRequests.errors\r\n .slice(0, maxErrors)\r\n .join(SERVER_TELEM_CONSTANTS.VALUE_SEPARATOR);\r\n const errorCount = lastRequests.errors.length;\r\n // Indicate whether this header contains all data or partial data\r\n const overflow = maxErrors < errorCount\r\n ? SERVER_TELEM_CONSTANTS.OVERFLOW_TRUE\r\n : SERVER_TELEM_CONSTANTS.OVERFLOW_FALSE;\r\n const platformFields = [errorCount, overflow].join(SERVER_TELEM_CONSTANTS.VALUE_SEPARATOR);\r\n return [\r\n SERVER_TELEM_CONSTANTS.SCHEMA_VERSION,\r\n lastRequests.cacheHits,\r\n failedRequests,\r\n errors,\r\n platformFields,\r\n ].join(SERVER_TELEM_CONSTANTS.CATEGORY_SEPARATOR);\r\n }\r\n /**\r\n * API to cache token failures for MSER data capture\r\n * @param error\r\n */\r\n cacheFailedRequest(error) {\r\n const lastRequests = this.getLastRequests();\r\n if (lastRequests.errors.length >=\r\n SERVER_TELEM_CONSTANTS.MAX_CACHED_ERRORS) {\r\n // Remove a cached error to make room, first in first out\r\n lastRequests.failedRequests.shift(); // apiId\r\n lastRequests.failedRequests.shift(); // correlationId\r\n lastRequests.errors.shift();\r\n }\r\n lastRequests.failedRequests.push(this.apiId, this.correlationId);\r\n if (error instanceof Error && !!error && error.toString()) {\r\n if (error instanceof AuthError) {\r\n if (error.subError) {\r\n lastRequests.errors.push(error.subError);\r\n }\r\n else if (error.errorCode) {\r\n lastRequests.errors.push(error.errorCode);\r\n }\r\n else {\r\n lastRequests.errors.push(error.toString());\r\n }\r\n }\r\n else {\r\n lastRequests.errors.push(error.toString());\r\n }\r\n }\r\n else {\r\n lastRequests.errors.push(SERVER_TELEM_CONSTANTS.UNKNOWN_ERROR);\r\n }\r\n this.cacheManager.setServerTelemetry(this.telemetryCacheKey, lastRequests);\r\n return;\r\n }\r\n /**\r\n * Update server telemetry cache entry by incrementing cache hit counter\r\n */\r\n incrementCacheHits() {\r\n const lastRequests = this.getLastRequests();\r\n lastRequests.cacheHits += 1;\r\n this.cacheManager.setServerTelemetry(this.telemetryCacheKey, lastRequests);\r\n return lastRequests.cacheHits;\r\n }\r\n /**\r\n * Get the server telemetry entity from cache or initialize a new one\r\n */\r\n getLastRequests() {\r\n const initialValue = {\r\n failedRequests: [],\r\n errors: [],\r\n cacheHits: 0,\r\n };\r\n const lastRequests = this.cacheManager.getServerTelemetry(this.telemetryCacheKey);\r\n return lastRequests || initialValue;\r\n }\r\n /**\r\n * Remove server telemetry cache entry\r\n */\r\n clearTelemetryCache() {\r\n const lastRequests = this.getLastRequests();\r\n const numErrorsFlushed = ServerTelemetryManager.maxErrorsToSend(lastRequests);\r\n const errorCount = lastRequests.errors.length;\r\n if (numErrorsFlushed === errorCount) {\r\n // All errors were sent on last request, clear Telemetry cache\r\n this.cacheManager.removeItem(this.telemetryCacheKey);\r\n }\r\n else {\r\n // Partial data was flushed to server, construct a new telemetry cache item with errors that were not flushed\r\n const serverTelemEntity = {\r\n failedRequests: lastRequests.failedRequests.slice(numErrorsFlushed * 2),\r\n errors: lastRequests.errors.slice(numErrorsFlushed),\r\n cacheHits: 0,\r\n };\r\n this.cacheManager.setServerTelemetry(this.telemetryCacheKey, serverTelemEntity);\r\n }\r\n }\r\n /**\r\n * Returns the maximum number of errors that can be flushed to the server in the next network request\r\n * @param serverTelemetryEntity\r\n */\r\n static maxErrorsToSend(serverTelemetryEntity) {\r\n let i;\r\n let maxErrors = 0;\r\n let dataSize = 0;\r\n const errorCount = serverTelemetryEntity.errors.length;\r\n for (i = 0; i < errorCount; i++) {\r\n // failedRequests parameter contains pairs of apiId and correlationId, multiply index by 2 to preserve pairs\r\n const apiId = serverTelemetryEntity.failedRequests[2 * i] ||\r\n Constants.EMPTY_STRING;\r\n const correlationId = serverTelemetryEntity.failedRequests[2 * i + 1] ||\r\n Constants.EMPTY_STRING;\r\n const errorCode = serverTelemetryEntity.errors[i] || Constants.EMPTY_STRING;\r\n // Count number of characters that would be added to header, each character is 1 byte. Add 3 at the end to account for separators\r\n dataSize +=\r\n apiId.toString().length +\r\n correlationId.toString().length +\r\n errorCode.length +\r\n 3;\r\n if (dataSize < SERVER_TELEM_CONSTANTS.MAX_LAST_HEADER_BYTES) {\r\n // Adding this entry to the header would still keep header size below the limit\r\n maxErrors += 1;\r\n }\r\n else {\r\n break;\r\n }\r\n }\r\n return maxErrors;\r\n }\r\n /**\r\n * Get the region discovery fields\r\n *\r\n * @returns string\r\n */\r\n getRegionDiscoveryFields() {\r\n const regionDiscoveryFields = [];\r\n regionDiscoveryFields.push(this.regionUsed || Constants.EMPTY_STRING);\r\n regionDiscoveryFields.push(this.regionSource || Constants.EMPTY_STRING);\r\n regionDiscoveryFields.push(this.regionOutcome || Constants.EMPTY_STRING);\r\n return regionDiscoveryFields.join(",");\r\n }\r\n /**\r\n * Update the region discovery metadata\r\n *\r\n * @param regionDiscoveryMetadata\r\n * @returns void\r\n */\r\n updateRegionDiscoveryMetadata(regionDiscoveryMetadata) {\r\n this.regionUsed = regionDiscoveryMetadata.region_used;\r\n this.regionSource = regionDiscoveryMetadata.region_source;\r\n this.regionOutcome = regionDiscoveryMetadata.region_outcome;\r\n }\r\n /**\r\n * Set cache outcome\r\n */\r\n setCacheOutcome(cacheOutcome) {\r\n this.cacheOutcome = cacheOutcome;\r\n }\r\n setNativeBrokerErrorCode(errorCode) {\r\n const lastRequests = this.getLastRequests();\r\n lastRequests.nativeBrokerErrorCode = errorCode;\r\n this.cacheManager.setServerTelemetry(this.telemetryCacheKey, lastRequests);\r\n }\r\n getNativeBrokerErrorCode() {\r\n return this.getLastRequests().nativeBrokerErrorCode;\r\n }\r\n clearNativeBrokerErrorCode() {\r\n const lastRequests = this.getLastRequests();\r\n delete lastRequests.nativeBrokerErrorCode;\r\n this.cacheManager.setServerTelemetry(this.telemetryCacheKey, lastRequests);\r\n }\r\n static makeExtraSkuString(params) {\r\n return makeExtraSkuString(params);\r\n }\r\n}\n\n\n//# sourceMappingURL=ServerTelemetryManager.mjs.map\n\n;// ./node_modules/@azure/msal-browser/dist/interaction_client/BaseInteractionClient.mjs\n/*! @azure/msal-browser v3.28.1 2025-01-14 */\n\n\n\n\n\n\n\n/*\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License.\r\n */\r\nclass BaseInteractionClient {\r\n constructor(config, storageImpl, browserCrypto, logger, eventHandler, navigationClient, performanceClient, nativeMessageHandler, correlationId) {\r\n this.config = config;\r\n this.browserStorage = storageImpl;\r\n this.browserCrypto = browserCrypto;\r\n this.networkClient = this.config.system.networkClient;\r\n this.eventHandler = eventHandler;\r\n this.navigationClient = navigationClient;\r\n this.nativeMessageHandler = nativeMessageHandler;\r\n this.correlationId = correlationId || createNewGuid();\r\n this.logger = logger.clone(BrowserConstants.MSAL_SKU, packageMetadata_version, this.correlationId);\r\n this.performanceClient = performanceClient;\r\n }\r\n async clearCacheOnLogout(account) {\r\n if (account) {\r\n if (AccountEntity.accountInfoIsEqual(account, this.browserStorage.getActiveAccount(), false)) {\r\n this.logger.verbose("Setting active account to null");\r\n this.browserStorage.setActiveAccount(null);\r\n }\r\n // Clear given account.\r\n try {\r\n await this.browserStorage.removeAccount(AccountEntity.generateAccountCacheKey(account));\r\n this.logger.verbose("Cleared cache items belonging to the account provided in the logout request.");\r\n }\r\n catch (error) {\r\n this.logger.error("Account provided in logout request was not found. Local cache unchanged.");\r\n }\r\n }\r\n else {\r\n try {\r\n this.logger.verbose("No account provided in logout request, clearing all cache items.", this.correlationId);\r\n // Clear all accounts and tokens\r\n await this.browserStorage.clear();\r\n // Clear any stray keys from IndexedDB\r\n await this.browserCrypto.clearKeystore();\r\n }\r\n catch (e) {\r\n this.logger.error("Attempted to clear all MSAL cache items and failed. Local cache unchanged.");\r\n }\r\n }\r\n }\r\n /**\r\n *\r\n * Use to get the redirect uri configured in MSAL or null.\r\n * @param requestRedirectUri\r\n * @returns Redirect URL\r\n *\r\n */\r\n getRedirectUri(requestRedirectUri) {\r\n this.logger.verbose("getRedirectUri called");\r\n const redirectUri = requestRedirectUri || this.config.auth.redirectUri;\r\n return UrlString.getAbsoluteUrl(redirectUri, getCurrentUri());\r\n }\r\n /**\r\n *\r\n * @param apiId\r\n * @param correlationId\r\n * @param forceRefresh\r\n */\r\n initializeServerTelemetryManager(apiId, forceRefresh) {\r\n this.logger.verbose("initializeServerTelemetryManager called");\r\n const telemetryPayload = {\r\n clientId: this.config.auth.clientId,\r\n correlationId: this.correlationId,\r\n apiId: apiId,\r\n forceRefresh: forceRefresh || false,\r\n wrapperSKU: this.browserStorage.getWrapperMetadata()[0],\r\n wrapperVer: this.browserStorage.getWrapperMetadata()[1],\r\n };\r\n return new ServerTelemetryManager(telemetryPayload, this.browserStorage);\r\n }\r\n /**\r\n * Used to get a discovered version of the default authority.\r\n * @param params {\r\n * requestAuthority?: string;\r\n * requestAzureCloudOptions?: AzureCloudOptions;\r\n * requestExtraQueryParameters?: StringDict;\r\n * account?: AccountInfo;\r\n * }\r\n */\r\n async getDiscoveredAuthority(params) {\r\n const { account } = params;\r\n const instanceAwareEQ = params.requestExtraQueryParameters &&\r\n params.requestExtraQueryParameters.hasOwnProperty("instance_aware")\r\n ? params.requestExtraQueryParameters["instance_aware"]\r\n : undefined;\r\n this.performanceClient.addQueueMeasurement(PerformanceEvents.StandardInteractionClientGetDiscoveredAuthority, this.correlationId);\r\n const authorityOptions = {\r\n protocolMode: this.config.auth.protocolMode,\r\n OIDCOptions: this.config.auth.OIDCOptions,\r\n knownAuthorities: this.config.auth.knownAuthorities,\r\n cloudDiscoveryMetadata: this.config.auth.cloudDiscoveryMetadata,\r\n authorityMetadata: this.config.auth.authorityMetadata,\r\n skipAuthorityMetadataCache: this.config.auth.skipAuthorityMetadataCache,\r\n };\r\n // build authority string based on auth params, precedence - azureCloudInstance + tenant >> authority\r\n const resolvedAuthority = params.requestAuthority || this.config.auth.authority;\r\n const resolvedInstanceAware = instanceAwareEQ?.length\r\n ? instanceAwareEQ === "true"\r\n : this.config.auth.instanceAware;\r\n const userAuthority = account && resolvedInstanceAware\r\n ? this.config.auth.authority.replace(UrlString.getDomainFromUrl(resolvedAuthority), account.environment)\r\n : resolvedAuthority;\r\n // fall back to the authority from config\r\n const builtAuthority = Authority.generateAuthority(userAuthority, params.requestAzureCloudOptions ||\r\n this.config.auth.azureCloudOptions);\r\n const discoveredAuthority = await invokeAsync(createDiscoveredInstance, PerformanceEvents.AuthorityFactoryCreateDiscoveredInstance, this.logger, this.performanceClient, this.correlationId)(builtAuthority, this.config.system.networkClient, this.browserStorage, authorityOptions, this.logger, this.correlationId, this.performanceClient);\r\n if (account && !discoveredAuthority.isAlias(account.environment)) {\r\n throw createClientConfigurationError(authorityMismatch);\r\n }\r\n return discoveredAuthority;\r\n }\r\n}\n\n\n//# sourceMappingURL=BaseInteractionClient.mjs.map\n\n;// ./node_modules/@azure/msal-browser/dist/crypto/PkceGenerator.mjs\n/*! @azure/msal-browser v3.28.1 2025-01-14 */\n\n\n\n\n\n\n\n/*\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License.\r\n */\r\n// Constant byte array length\r\nconst RANDOM_BYTE_ARR_LENGTH = 32;\r\n/**\r\n * This file defines APIs to generate PKCE codes and code verifiers.\r\n */\r\n/**\r\n * Generates PKCE Codes. See the RFC for more information: https://tools.ietf.org/html/rfc7636\r\n */\r\nasync function generatePkceCodes(performanceClient, logger, correlationId) {\r\n performanceClient.addQueueMeasurement(PerformanceEvents.GeneratePkceCodes, correlationId);\r\n const codeVerifier = invoke(generateCodeVerifier, PerformanceEvents.GenerateCodeVerifier, logger, performanceClient, correlationId)(performanceClient, logger, correlationId);\r\n const codeChallenge = await invokeAsync(generateCodeChallengeFromVerifier, PerformanceEvents.GenerateCodeChallengeFromVerifier, logger, performanceClient, correlationId)(codeVerifier, performanceClient, logger, correlationId);\r\n return {\r\n verifier: codeVerifier,\r\n challenge: codeChallenge,\r\n };\r\n}\r\n/**\r\n * Generates a random 32 byte buffer and returns the base64\r\n * encoded string to be used as a PKCE Code Verifier\r\n */\r\nfunction generateCodeVerifier(performanceClient, logger, correlationId) {\r\n try {\r\n // Generate random values as utf-8\r\n const buffer = new Uint8Array(RANDOM_BYTE_ARR_LENGTH);\r\n invoke(getRandomValues, PerformanceEvents.GetRandomValues, logger, performanceClient, correlationId)(buffer);\r\n // encode verifier as base64\r\n const pkceCodeVerifierB64 = urlEncodeArr(buffer);\r\n return pkceCodeVerifierB64;\r\n }\r\n catch (e) {\r\n throw createBrowserAuthError(pkceNotCreated);\r\n }\r\n}\r\n/**\r\n * Creates a base64 encoded PKCE Code Challenge string from the\r\n * hash created from the PKCE Code Verifier supplied\r\n */\r\nasync function generateCodeChallengeFromVerifier(pkceCodeVerifier, performanceClient, logger, correlationId) {\r\n performanceClient.addQueueMeasurement(PerformanceEvents.GenerateCodeChallengeFromVerifier, correlationId);\r\n try {\r\n // hashed verifier\r\n const pkceHashedCodeVerifier = await invokeAsync(sha256Digest, PerformanceEvents.Sha256Digest, logger, performanceClient, correlationId)(pkceCodeVerifier, performanceClient, correlationId);\r\n // encode hash as base64\r\n return urlEncodeArr(new Uint8Array(pkceHashedCodeVerifier));\r\n }\r\n catch (e) {\r\n throw createBrowserAuthError(pkceNotCreated);\r\n }\r\n}\n\n\n//# sourceMappingURL=PkceGenerator.mjs.map\n\n;// ./node_modules/@azure/msal-browser/dist/request/RequestHelpers.mjs\n/*! @azure/msal-browser v3.28.1 2025-01-14 */\n\n\n\n\n/*\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License.\r\n */\r\n/**\r\n * Initializer function for all request APIs\r\n * @param request\r\n */\r\nasync function initializeBaseRequest(request, config, performanceClient, logger) {\r\n performanceClient.addQueueMeasurement(PerformanceEvents.InitializeBaseRequest, request.correlationId);\r\n const authority = request.authority || config.auth.authority;\r\n const scopes = [...((request && request.scopes) || [])];\r\n const validatedRequest = {\r\n ...request,\r\n correlationId: request.correlationId,\r\n authority,\r\n scopes,\r\n };\r\n // Set authenticationScheme to BEARER if not explicitly set in the request\r\n if (!validatedRequest.authenticationScheme) {\r\n validatedRequest.authenticationScheme = AuthenticationScheme.BEARER;\r\n logger.verbose(\'Authentication Scheme wasn\\\'t explicitly set in request, defaulting to "Bearer" request\');\r\n }\r\n else {\r\n if (validatedRequest.authenticationScheme === AuthenticationScheme.SSH) {\r\n if (!request.sshJwk) {\r\n throw createClientConfigurationError(missingSshJwk);\r\n }\r\n if (!request.sshKid) {\r\n throw createClientConfigurationError(missingSshKid);\r\n }\r\n }\r\n logger.verbose(`Authentication Scheme set to "${validatedRequest.authenticationScheme}" as configured in Auth request`);\r\n }\r\n // Set requested claims hash if claims-based caching is enabled and claims were requested\r\n if (config.cache.claimsBasedCachingEnabled &&\r\n request.claims &&\r\n // Checks for empty stringified object "{}" which doesn\'t qualify as requested claims\r\n !StringUtils.isEmptyObj(request.claims)) {\r\n validatedRequest.requestedClaimsHash = await hashString(request.claims);\r\n }\r\n return validatedRequest;\r\n}\r\nasync function initializeSilentRequest(request, account, config, performanceClient, logger) {\r\n performanceClient.addQueueMeasurement(PerformanceEvents.InitializeSilentRequest, request.correlationId);\r\n const baseRequest = await invokeAsync(initializeBaseRequest, PerformanceEvents.InitializeBaseRequest, logger, performanceClient, request.correlationId)(request, config, performanceClient, logger);\r\n return {\r\n ...request,\r\n ...baseRequest,\r\n account: account,\r\n forceRefresh: request.forceRefresh || false,\r\n };\r\n}\n\n\n//# sourceMappingURL=RequestHelpers.mjs.map\n\n;// ./node_modules/@azure/msal-browser/dist/interaction_client/StandardInteractionClient.mjs\n/*! @azure/msal-browser v3.28.1 2025-01-14 */\n\n\n\n\n\n\n\n\n\n\n/*\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License.\r\n */\r\n/**\r\n * Defines the class structure and helper functions used by the "standard", non-brokered auth flows (popup, redirect, silent (RT), silent (iframe))\r\n */\r\nclass StandardInteractionClient extends BaseInteractionClient {\r\n /**\r\n * Generates an auth code request tied to the url request.\r\n * @param request\r\n */\r\n async initializeAuthorizationCodeRequest(request) {\r\n this.performanceClient.addQueueMeasurement(PerformanceEvents.StandardInteractionClientInitializeAuthorizationCodeRequest, this.correlationId);\r\n const generatedPkceParams = await invokeAsync(generatePkceCodes, PerformanceEvents.GeneratePkceCodes, this.logger, this.performanceClient, this.correlationId)(this.performanceClient, this.logger, this.correlationId);\r\n const authCodeRequest = {\r\n ...request,\r\n redirectUri: request.redirectUri,\r\n code: Constants.EMPTY_STRING,\r\n codeVerifier: generatedPkceParams.verifier,\r\n };\r\n request.codeChallenge = generatedPkceParams.challenge;\r\n request.codeChallengeMethod = Constants.S256_CODE_CHALLENGE_METHOD;\r\n return authCodeRequest;\r\n }\r\n /**\r\n * Initializer for the logout request.\r\n * @param logoutRequest\r\n */\r\n initializeLogoutRequest(logoutRequest) {\r\n this.logger.verbose("initializeLogoutRequest called", logoutRequest?.correlationId);\r\n const validLogoutRequest = {\r\n correlationId: this.correlationId || createNewGuid(),\r\n ...logoutRequest,\r\n };\r\n /**\r\n * Set logout_hint to be login_hint from ID Token Claims if present\r\n * and logoutHint attribute wasn\'t manually set in logout request\r\n */\r\n if (logoutRequest) {\r\n // If logoutHint isn\'t set and an account was passed in, try to extract logoutHint from ID Token Claims\r\n if (!logoutRequest.logoutHint) {\r\n if (logoutRequest.account) {\r\n const logoutHint = this.getLogoutHintFromIdTokenClaims(logoutRequest.account);\r\n if (logoutHint) {\r\n this.logger.verbose("Setting logoutHint to login_hint ID Token Claim value for the account provided");\r\n validLogoutRequest.logoutHint = logoutHint;\r\n }\r\n }\r\n else {\r\n this.logger.verbose("logoutHint was not set and account was not passed into logout request, logoutHint will not be set");\r\n }\r\n }\r\n else {\r\n this.logger.verbose("logoutHint has already been set in logoutRequest");\r\n }\r\n }\r\n else {\r\n this.logger.verbose("logoutHint will not be set since no logout request was configured");\r\n }\r\n /*\r\n * Only set redirect uri if logout request isn\'t provided or the set uri isn\'t null.\r\n * Otherwise, use passed uri, config, or current page.\r\n */\r\n if (!logoutRequest || logoutRequest.postLogoutRedirectUri !== null) {\r\n if (logoutRequest && logoutRequest.postLogoutRedirectUri) {\r\n this.logger.verbose("Setting postLogoutRedirectUri to uri set on logout request", validLogoutRequest.correlationId);\r\n validLogoutRequest.postLogoutRedirectUri =\r\n UrlString.getAbsoluteUrl(logoutRequest.postLogoutRedirectUri, getCurrentUri());\r\n }\r\n else if (this.config.auth.postLogoutRedirectUri === null) {\r\n this.logger.verbose("postLogoutRedirectUri configured as null and no uri set on request, not passing post logout redirect", validLogoutRequest.correlationId);\r\n }\r\n else if (this.config.auth.postLogoutRedirectUri) {\r\n this.logger.verbose("Setting postLogoutRedirectUri to configured uri", validLogoutRequest.correlationId);\r\n validLogoutRequest.postLogoutRedirectUri =\r\n UrlString.getAbsoluteUrl(this.config.auth.postLogoutRedirectUri, getCurrentUri());\r\n }\r\n else {\r\n this.logger.verbose("Setting postLogoutRedirectUri to current page", validLogoutRequest.correlationId);\r\n validLogoutRequest.postLogoutRedirectUri =\r\n UrlString.getAbsoluteUrl(getCurrentUri(), getCurrentUri());\r\n }\r\n }\r\n else {\r\n this.logger.verbose("postLogoutRedirectUri passed as null, not setting post logout redirect uri", validLogoutRequest.correlationId);\r\n }\r\n return validLogoutRequest;\r\n }\r\n /**\r\n * Parses login_hint ID Token Claim out of AccountInfo object to be used as\r\n * logout_hint in end session request.\r\n * @param account\r\n */\r\n getLogoutHintFromIdTokenClaims(account) {\r\n const idTokenClaims = account.idTokenClaims;\r\n if (idTokenClaims) {\r\n if (idTokenClaims.login_hint) {\r\n return idTokenClaims.login_hint;\r\n }\r\n else {\r\n this.logger.verbose("The ID Token Claims tied to the provided account do not contain a login_hint claim, logoutHint will not be added to logout request");\r\n }\r\n }\r\n else {\r\n this.logger.verbose("The provided account does not contain ID Token Claims, logoutHint will not be added to logout request");\r\n }\r\n return null;\r\n }\r\n /**\r\n * Creates an Authorization Code Client with the given authority, or the default authority.\r\n * @param params {\r\n * serverTelemetryManager: ServerTelemetryManager;\r\n * authorityUrl?: string;\r\n * requestAzureCloudOptions?: AzureCloudOptions;\r\n * requestExtraQueryParameters?: StringDict;\r\n * account?: AccountInfo;\r\n * }\r\n */\r\n async createAuthCodeClient(params) {\r\n this.performanceClient.addQueueMeasurement(PerformanceEvents.StandardInteractionClientCreateAuthCodeClient, this.correlationId);\r\n // Create auth module.\r\n const clientConfig = await invokeAsync(this.getClientConfiguration.bind(this), PerformanceEvents.StandardInteractionClientGetClientConfiguration, this.logger, this.performanceClient, this.correlationId)(params);\r\n return new AuthorizationCodeClient(clientConfig, this.performanceClient);\r\n }\r\n /**\r\n * Creates a Client Configuration object with the given request authority, or the default authority.\r\n * @param params {\r\n * serverTelemetryManager: ServerTelemetryManager;\r\n * requestAuthority?: string;\r\n * requestAzureCloudOptions?: AzureCloudOptions;\r\n * requestExtraQueryParameters?: boolean;\r\n * account?: AccountInfo;\r\n * }\r\n */\r\n async getClientConfiguration(params) {\r\n const { serverTelemetryManager, requestAuthority, requestAzureCloudOptions, requestExtraQueryParameters, account, } = params;\r\n this.performanceClient.addQueueMeasurement(PerformanceEvents.StandardInteractionClientGetClientConfiguration, this.correlationId);\r\n const discoveredAuthority = await invokeAsync(this.getDiscoveredAuthority.bind(this), PerformanceEvents.StandardInteractionClientGetDiscoveredAuthority, this.logger, this.performanceClient, this.correlationId)({\r\n requestAuthority,\r\n requestAzureCloudOptions,\r\n requestExtraQueryParameters,\r\n account,\r\n });\r\n const logger = this.config.system.loggerOptions;\r\n return {\r\n authOptions: {\r\n clientId: this.config.auth.clientId,\r\n authority: discoveredAuthority,\r\n clientCapabilities: this.config.auth.clientCapabilities,\r\n redirectUri: this.config.auth.redirectUri,\r\n },\r\n systemOptions: {\r\n tokenRenewalOffsetSeconds: this.config.system.tokenRenewalOffsetSeconds,\r\n preventCorsPreflight: true,\r\n },\r\n loggerOptions: {\r\n loggerCallback: logger.loggerCallback,\r\n piiLoggingEnabled: logger.piiLoggingEnabled,\r\n logLevel: logger.logLevel,\r\n correlationId: this.correlationId,\r\n },\r\n cacheOptions: {\r\n claimsBasedCachingEnabled: this.config.cache.claimsBasedCachingEnabled,\r\n },\r\n cryptoInterface: this.browserCrypto,\r\n networkInterface: this.networkClient,\r\n storageInterface: this.browserStorage,\r\n serverTelemetryManager: serverTelemetryManager,\r\n libraryInfo: {\r\n sku: BrowserConstants.MSAL_SKU,\r\n version: packageMetadata_version,\r\n cpu: Constants.EMPTY_STRING,\r\n os: Constants.EMPTY_STRING,\r\n },\r\n telemetry: this.config.telemetry,\r\n };\r\n }\r\n /**\r\n * Helper to initialize required request parameters for interactive APIs and ssoSilent()\r\n * @param request\r\n * @param interactionType\r\n */\r\n async initializeAuthorizationRequest(request, interactionType) {\r\n this.performanceClient.addQueueMeasurement(PerformanceEvents.StandardInteractionClientInitializeAuthorizationRequest, this.correlationId);\r\n const redirectUri = this.getRedirectUri(request.redirectUri);\r\n const browserState = {\r\n interactionType: interactionType,\r\n };\r\n const state = ProtocolUtils.setRequestState(this.browserCrypto, (request && request.state) || Constants.EMPTY_STRING, browserState);\r\n const baseRequest = await invokeAsync(initializeBaseRequest, PerformanceEvents.InitializeBaseRequest, this.logger, this.performanceClient, this.correlationId)({ ...request, correlationId: this.correlationId }, this.config, this.performanceClient, this.logger);\r\n const validatedRequest = {\r\n ...baseRequest,\r\n redirectUri: redirectUri,\r\n state: state,\r\n nonce: request.nonce || createNewGuid(),\r\n responseMode: this.config.auth.OIDCOptions\r\n .serverResponseType,\r\n };\r\n // Skip active account lookup if either login hint or session id is set\r\n if (request.loginHint || request.sid) {\r\n return validatedRequest;\r\n }\r\n const account = request.account || this.browserStorage.getActiveAccount();\r\n if (account) {\r\n this.logger.verbose("Setting validated request account", this.correlationId);\r\n this.logger.verbosePii(`Setting validated request account: ${account.homeAccountId}`, this.correlationId);\r\n validatedRequest.account = account;\r\n }\r\n // Check for ADAL/MSAL v1 SSO\r\n if (!validatedRequest.loginHint && !account) {\r\n const legacyLoginHint = this.browserStorage.getLegacyLoginHint();\r\n if (legacyLoginHint) {\r\n validatedRequest.loginHint = legacyLoginHint;\r\n }\r\n }\r\n return validatedRequest;\r\n }\r\n}\n\n\n//# sourceMappingURL=StandardInteractionClient.mjs.map\n\n;// ./node_modules/@azure/msal-browser/dist/error/NativeAuthErrorCodes.mjs\n/*! @azure/msal-browser v3.28.1 2025-01-14 */\n\n/*\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License.\r\n */\r\nconst contentError = "ContentError";\r\nconst userSwitch = "user_switch";\n\n\n//# sourceMappingURL=NativeAuthErrorCodes.mjs.map\n\n;// ./node_modules/@azure/msal-browser/dist/broker/nativeBroker/NativeStatusCodes.mjs\n/*! @azure/msal-browser v3.28.1 2025-01-14 */\n\n/*\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License.\r\n */\r\n// Status Codes that can be thrown by WAM\r\nconst USER_INTERACTION_REQUIRED = "USER_INTERACTION_REQUIRED";\r\nconst USER_CANCEL = "USER_CANCEL";\r\nconst NO_NETWORK = "NO_NETWORK";\r\nconst PERSISTENT_ERROR = "PERSISTENT_ERROR";\r\nconst DISABLED = "DISABLED";\r\nconst ACCOUNT_UNAVAILABLE = "ACCOUNT_UNAVAILABLE";\n\n\n//# sourceMappingURL=NativeStatusCodes.mjs.map\n\n;// ./node_modules/@azure/msal-browser/dist/error/NativeAuthError.mjs\n/*! @azure/msal-browser v3.28.1 2025-01-14 */\n\n\n\n\n\n\n\n/*\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License.\r\n */\r\nconst INVALID_METHOD_ERROR = -2147186943;\r\nconst NativeAuthErrorMessages = {\r\n [userSwitch]: "User attempted to switch accounts in the native broker, which is not allowed. All new accounts must sign-in through the standard web flow first, please try again.",\r\n};\r\nclass NativeAuthError extends AuthError {\r\n constructor(errorCode, description, ext) {\r\n super(errorCode, description);\r\n Object.setPrototypeOf(this, NativeAuthError.prototype);\r\n this.name = "NativeAuthError";\r\n this.ext = ext;\r\n }\r\n}\r\n/**\r\n * These errors should result in a fallback to the \'standard\' browser based auth flow.\r\n */\r\nfunction isFatalNativeAuthError(error) {\r\n if (error.ext &&\r\n error.ext.status &&\r\n (error.ext.status === PERSISTENT_ERROR ||\r\n error.ext.status === DISABLED)) {\r\n return true;\r\n }\r\n if (error.ext &&\r\n error.ext.error &&\r\n error.ext.error === INVALID_METHOD_ERROR) {\r\n return true;\r\n }\r\n switch (error.errorCode) {\r\n case contentError:\r\n return true;\r\n default:\r\n return false;\r\n }\r\n}\r\n/**\r\n * Create the appropriate error object based on the WAM status code.\r\n * @param code\r\n * @param description\r\n * @param ext\r\n * @returns\r\n */\r\nfunction createNativeAuthError(code, description, ext) {\r\n if (ext && ext.status) {\r\n switch (ext.status) {\r\n case ACCOUNT_UNAVAILABLE:\r\n return createInteractionRequiredAuthError(nativeAccountUnavailable);\r\n case USER_INTERACTION_REQUIRED:\r\n return new InteractionRequiredAuthError(code, description);\r\n case USER_CANCEL:\r\n return createBrowserAuthError(userCancelled);\r\n case NO_NETWORK:\r\n return createBrowserAuthError(BrowserAuthErrorCodes_noNetworkConnectivity);\r\n }\r\n }\r\n return new NativeAuthError(code, NativeAuthErrorMessages[code] || description, ext);\r\n}\n\n\n//# sourceMappingURL=NativeAuthError.mjs.map\n\n;// ./node_modules/@azure/msal-common/dist/client/RefreshTokenClient.mjs\n/*! @azure/msal-common v14.16.0 2024-11-05 */\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n/*\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License.\r\n */\r\nconst DEFAULT_REFRESH_TOKEN_EXPIRATION_OFFSET_SECONDS = 300; // 5 Minutes\r\n/**\r\n * OAuth2.0 refresh token client\r\n * @internal\r\n */\r\nclass RefreshTokenClient extends BaseClient {\r\n constructor(configuration, performanceClient) {\r\n super(configuration, performanceClient);\r\n }\r\n async acquireToken(request) {\r\n this.performanceClient?.addQueueMeasurement(PerformanceEvents.RefreshTokenClientAcquireToken, request.correlationId);\r\n const reqTimestamp = nowSeconds();\r\n const response = await invokeAsync(this.executeTokenRequest.bind(this), PerformanceEvents.RefreshTokenClientExecuteTokenRequest, this.logger, this.performanceClient, request.correlationId)(request, this.authority);\r\n // Retrieve requestId from response headers\r\n const requestId = response.headers?.[HeaderNames.X_MS_REQUEST_ID];\r\n const responseHandler = new ResponseHandler(this.config.authOptions.clientId, this.cacheManager, this.cryptoUtils, this.logger, this.config.serializableCache, this.config.persistencePlugin);\r\n responseHandler.validateTokenResponse(response.body);\r\n return invokeAsync(responseHandler.handleServerTokenResponse.bind(responseHandler), PerformanceEvents.HandleServerTokenResponse, this.logger, this.performanceClient, request.correlationId)(response.body, this.authority, reqTimestamp, request, undefined, undefined, true, request.forceCache, requestId);\r\n }\r\n /**\r\n * Gets cached refresh token and attaches to request, then calls acquireToken API\r\n * @param request\r\n */\r\n async acquireTokenByRefreshToken(request) {\r\n // Cannot renew token if no request object is given.\r\n if (!request) {\r\n throw createClientConfigurationError(tokenRequestEmpty);\r\n }\r\n this.performanceClient?.addQueueMeasurement(PerformanceEvents.RefreshTokenClientAcquireTokenByRefreshToken, request.correlationId);\r\n // We currently do not support silent flow for account === null use cases; This will be revisited for confidential flow usecases\r\n if (!request.account) {\r\n throw createClientAuthError(noAccountInSilentRequest);\r\n }\r\n // try checking if FOCI is enabled for the given application\r\n const isFOCI = this.cacheManager.isAppMetadataFOCI(request.account.environment);\r\n // if the app is part of the family, retrive a Family refresh token if present and make a refreshTokenRequest\r\n if (isFOCI) {\r\n try {\r\n return await invokeAsync(this.acquireTokenWithCachedRefreshToken.bind(this), PerformanceEvents.RefreshTokenClientAcquireTokenWithCachedRefreshToken, this.logger, this.performanceClient, request.correlationId)(request, true);\r\n }\r\n catch (e) {\r\n const noFamilyRTInCache = e instanceof InteractionRequiredAuthError &&\r\n e.errorCode ===\r\n noTokensFound;\r\n const clientMismatchErrorWithFamilyRT = e instanceof ServerError &&\r\n e.errorCode === Errors.INVALID_GRANT_ERROR &&\r\n e.subError === Errors.CLIENT_MISMATCH_ERROR;\r\n // if family Refresh Token (FRT) cache acquisition fails or if client_mismatch error is seen with FRT, reattempt with application Refresh Token (ART)\r\n if (noFamilyRTInCache || clientMismatchErrorWithFamilyRT) {\r\n return invokeAsync(this.acquireTokenWithCachedRefreshToken.bind(this), PerformanceEvents.RefreshTokenClientAcquireTokenWithCachedRefreshToken, this.logger, this.performanceClient, request.correlationId)(request, false);\r\n // throw in all other cases\r\n }\r\n else {\r\n throw e;\r\n }\r\n }\r\n }\r\n // fall back to application refresh token acquisition\r\n return invokeAsync(this.acquireTokenWithCachedRefreshToken.bind(this), PerformanceEvents.RefreshTokenClientAcquireTokenWithCachedRefreshToken, this.logger, this.performanceClient, request.correlationId)(request, false);\r\n }\r\n /**\r\n * makes a network call to acquire tokens by exchanging RefreshToken available in userCache; throws if refresh token is not cached\r\n * @param request\r\n */\r\n async acquireTokenWithCachedRefreshToken(request, foci) {\r\n this.performanceClient?.addQueueMeasurement(PerformanceEvents.RefreshTokenClientAcquireTokenWithCachedRefreshToken, request.correlationId);\r\n // fetches family RT or application RT based on FOCI value\r\n const refreshToken = invoke(this.cacheManager.getRefreshToken.bind(this.cacheManager), PerformanceEvents.CacheManagerGetRefreshToken, this.logger, this.performanceClient, request.correlationId)(request.account, foci, undefined, this.performanceClient, request.correlationId);\r\n if (!refreshToken) {\r\n throw createInteractionRequiredAuthError(noTokensFound);\r\n }\r\n if (refreshToken.expiresOn &&\r\n isTokenExpired(refreshToken.expiresOn, request.refreshTokenExpirationOffsetSeconds ||\r\n DEFAULT_REFRESH_TOKEN_EXPIRATION_OFFSET_SECONDS)) {\r\n throw createInteractionRequiredAuthError(refreshTokenExpired);\r\n }\r\n // attach cached RT size to the current measurement\r\n const refreshTokenRequest = {\r\n ...request,\r\n refreshToken: refreshToken.secret,\r\n authenticationScheme: request.authenticationScheme || AuthenticationScheme.BEARER,\r\n ccsCredential: {\r\n credential: request.account.homeAccountId,\r\n type: CcsCredentialType.HOME_ACCOUNT_ID,\r\n },\r\n };\r\n try {\r\n return await invokeAsync(this.acquireToken.bind(this), PerformanceEvents.RefreshTokenClientAcquireToken, this.logger, this.performanceClient, request.correlationId)(refreshTokenRequest);\r\n }\r\n catch (e) {\r\n if (e instanceof InteractionRequiredAuthError &&\r\n e.subError === badToken) {\r\n // Remove bad refresh token from cache\r\n this.logger.verbose("acquireTokenWithRefreshToken: bad refresh token, removing from cache");\r\n const badRefreshTokenKey = generateCredentialKey(refreshToken);\r\n this.cacheManager.removeRefreshToken(badRefreshTokenKey);\r\n }\r\n throw e;\r\n }\r\n }\r\n /**\r\n * Constructs the network message and makes a NW call to the underlying secure token service\r\n * @param request\r\n * @param authority\r\n */\r\n async executeTokenRequest(request, authority) {\r\n this.performanceClient?.addQueueMeasurement(PerformanceEvents.RefreshTokenClientExecuteTokenRequest, request.correlationId);\r\n const queryParametersString = this.createTokenQueryParameters(request);\r\n const endpoint = UrlString.appendQueryString(authority.tokenEndpoint, queryParametersString);\r\n const requestBody = await invokeAsync(this.createTokenRequestBody.bind(this), PerformanceEvents.RefreshTokenClientCreateTokenRequestBody, this.logger, this.performanceClient, request.correlationId)(request);\r\n const headers = this.createTokenRequestHeaders(request.ccsCredential);\r\n const thumbprint = {\r\n clientId: request.tokenBodyParameters?.clientId ||\r\n this.config.authOptions.clientId,\r\n authority: authority.canonicalAuthority,\r\n scopes: request.scopes,\r\n claims: request.claims,\r\n authenticationScheme: request.authenticationScheme,\r\n resourceRequestMethod: request.resourceRequestMethod,\r\n resourceRequestUri: request.resourceRequestUri,\r\n shrClaims: request.shrClaims,\r\n sshKid: request.sshKid,\r\n };\r\n return invokeAsync(this.executePostToTokenEndpoint.bind(this), PerformanceEvents.RefreshTokenClientExecutePostToTokenEndpoint, this.logger, this.performanceClient, request.correlationId)(endpoint, requestBody, headers, thumbprint, request.correlationId, PerformanceEvents.RefreshTokenClientExecutePostToTokenEndpoint);\r\n }\r\n /**\r\n * Helper function to create the token request body\r\n * @param request\r\n */\r\n async createTokenRequestBody(request) {\r\n this.performanceClient?.addQueueMeasurement(PerformanceEvents.RefreshTokenClientCreateTokenRequestBody, request.correlationId);\r\n const correlationId = request.correlationId;\r\n const parameterBuilder = new RequestParameterBuilder(correlationId, this.performanceClient);\r\n parameterBuilder.addClientId(request.embeddedClientId ||\r\n request.tokenBodyParameters?.[CLIENT_ID] ||\r\n this.config.authOptions.clientId);\r\n if (request.redirectUri) {\r\n parameterBuilder.addRedirectUri(request.redirectUri);\r\n }\r\n parameterBuilder.addScopes(request.scopes, true, this.config.authOptions.authority.options.OIDCOptions?.defaultScopes);\r\n parameterBuilder.addGrantType(GrantType.REFRESH_TOKEN_GRANT);\r\n parameterBuilder.addClientInfo();\r\n parameterBuilder.addLibraryInfo(this.config.libraryInfo);\r\n parameterBuilder.addApplicationTelemetry(this.config.telemetry.application);\r\n parameterBuilder.addThrottling();\r\n if (this.serverTelemetryManager && !isOidcProtocolMode(this.config)) {\r\n parameterBuilder.addServerTelemetry(this.serverTelemetryManager);\r\n }\r\n parameterBuilder.addRefreshToken(request.refreshToken);\r\n if (this.config.clientCredentials.clientSecret) {\r\n parameterBuilder.addClientSecret(this.config.clientCredentials.clientSecret);\r\n }\r\n if (this.config.clientCredentials.clientAssertion) {\r\n const clientAssertion = this.config.clientCredentials.clientAssertion;\r\n parameterBuilder.addClientAssertion(await getClientAssertion(clientAssertion.assertion, this.config.authOptions.clientId, request.resourceRequestUri));\r\n parameterBuilder.addClientAssertionType(clientAssertion.assertionType);\r\n }\r\n if (request.authenticationScheme === AuthenticationScheme.POP) {\r\n const popTokenGenerator = new PopTokenGenerator(this.cryptoUtils, this.performanceClient);\r\n let reqCnfData;\r\n if (!request.popKid) {\r\n const generatedReqCnfData = await invokeAsync(popTokenGenerator.generateCnf.bind(popTokenGenerator), PerformanceEvents.PopTokenGenerateCnf, this.logger, this.performanceClient, request.correlationId)(request, this.logger);\r\n reqCnfData = generatedReqCnfData.reqCnfString;\r\n }\r\n else {\r\n reqCnfData = this.cryptoUtils.encodeKid(request.popKid);\r\n }\r\n // SPA PoP requires full Base64Url encoded req_cnf string (unhashed)\r\n parameterBuilder.addPopToken(reqCnfData);\r\n }\r\n else if (request.authenticationScheme === AuthenticationScheme.SSH) {\r\n if (request.sshJwk) {\r\n parameterBuilder.addSshJwk(request.sshJwk);\r\n }\r\n else {\r\n throw createClientConfigurationError(missingSshJwk);\r\n }\r\n }\r\n if (!StringUtils.isEmptyObj(request.claims) ||\r\n (this.config.authOptions.clientCapabilities &&\r\n this.config.authOptions.clientCapabilities.length > 0)) {\r\n parameterBuilder.addClaims(request.claims, this.config.authOptions.clientCapabilities);\r\n }\r\n if (this.config.systemOptions.preventCorsPreflight &&\r\n request.ccsCredential) {\r\n switch (request.ccsCredential.type) {\r\n case CcsCredentialType.HOME_ACCOUNT_ID:\r\n try {\r\n const clientInfo = buildClientInfoFromHomeAccountId(request.ccsCredential.credential);\r\n parameterBuilder.addCcsOid(clientInfo);\r\n }\r\n catch (e) {\r\n this.logger.verbose("Could not parse home account ID for CCS Header: " +\r\n e);\r\n }\r\n break;\r\n case CcsCredentialType.UPN:\r\n parameterBuilder.addCcsUpn(request.ccsCredential.credential);\r\n break;\r\n }\r\n }\r\n if (request.embeddedClientId) {\r\n parameterBuilder.addBrokerParameters({\r\n brokerClientId: this.config.authOptions.clientId,\r\n brokerRedirectUri: this.config.authOptions.redirectUri,\r\n });\r\n }\r\n if (request.tokenBodyParameters) {\r\n parameterBuilder.addExtraQueryParameters(request.tokenBodyParameters);\r\n }\r\n return parameterBuilder.createQueryString();\r\n }\r\n}\n\n\n//# sourceMappingURL=RefreshTokenClient.mjs.map\n\n;// ./node_modules/@azure/msal-common/dist/client/SilentFlowClient.mjs\n/*! @azure/msal-common v14.16.0 2024-11-05 */\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n/*\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License.\r\n */\r\n/** @internal */\r\nclass SilentFlowClient extends BaseClient {\r\n constructor(configuration, performanceClient) {\r\n super(configuration, performanceClient);\r\n }\r\n /**\r\n * Retrieves a token from cache if it is still valid, or uses the cached refresh token to renew\r\n * the given token and returns the renewed token\r\n * @param request\r\n */\r\n async acquireToken(request) {\r\n try {\r\n const [authResponse, cacheOutcome] = await this.acquireCachedToken({\r\n ...request,\r\n scopes: request.scopes?.length\r\n ? request.scopes\r\n : [...OIDC_DEFAULT_SCOPES],\r\n });\r\n // if the token is not expired but must be refreshed; get a new one in the background\r\n if (cacheOutcome === CacheOutcome.PROACTIVELY_REFRESHED) {\r\n this.logger.info("SilentFlowClient:acquireCachedToken - Cached access token\'s refreshOn property has been exceeded\'. It\'s not expired, but must be refreshed.");\r\n // refresh the access token in the background\r\n const refreshTokenClient = new RefreshTokenClient(this.config, this.performanceClient);\r\n refreshTokenClient\r\n .acquireTokenByRefreshToken(request)\r\n .catch(() => {\r\n // do nothing, this is running in the background and no action is to be taken upon success or failure\r\n });\r\n }\r\n // return the cached token\r\n return authResponse;\r\n }\r\n catch (e) {\r\n if (e instanceof ClientAuthError &&\r\n e.errorCode === tokenRefreshRequired) {\r\n const refreshTokenClient = new RefreshTokenClient(this.config, this.performanceClient);\r\n return refreshTokenClient.acquireTokenByRefreshToken(request);\r\n }\r\n else {\r\n throw e;\r\n }\r\n }\r\n }\r\n /**\r\n * Retrieves token from cache or throws an error if it must be refreshed.\r\n * @param request\r\n */\r\n async acquireCachedToken(request) {\r\n this.performanceClient?.addQueueMeasurement(PerformanceEvents.SilentFlowClientAcquireCachedToken, request.correlationId);\r\n let lastCacheOutcome = CacheOutcome.NOT_APPLICABLE;\r\n if (request.forceRefresh ||\r\n (!this.config.cacheOptions.claimsBasedCachingEnabled &&\r\n !StringUtils.isEmptyObj(request.claims))) {\r\n // Must refresh due to present force_refresh flag.\r\n this.setCacheOutcome(CacheOutcome.FORCE_REFRESH_OR_CLAIMS, request.correlationId);\r\n throw createClientAuthError(tokenRefreshRequired);\r\n }\r\n // We currently do not support silent flow for account === null use cases; This will be revisited for confidential flow usecases\r\n if (!request.account) {\r\n throw createClientAuthError(noAccountInSilentRequest);\r\n }\r\n const requestTenantId = request.account.tenantId ||\r\n getTenantFromAuthorityString(request.authority);\r\n const tokenKeys = this.cacheManager.getTokenKeys();\r\n const cachedAccessToken = this.cacheManager.getAccessToken(request.account, request, tokenKeys, requestTenantId, this.performanceClient, request.correlationId);\r\n if (!cachedAccessToken) {\r\n // must refresh due to non-existent access_token\r\n this.setCacheOutcome(CacheOutcome.NO_CACHED_ACCESS_TOKEN, request.correlationId);\r\n throw createClientAuthError(tokenRefreshRequired);\r\n }\r\n else if (wasClockTurnedBack(cachedAccessToken.cachedAt) ||\r\n isTokenExpired(cachedAccessToken.expiresOn, this.config.systemOptions.tokenRenewalOffsetSeconds)) {\r\n // must refresh due to the expires_in value\r\n this.setCacheOutcome(CacheOutcome.CACHED_ACCESS_TOKEN_EXPIRED, request.correlationId);\r\n throw createClientAuthError(tokenRefreshRequired);\r\n }\r\n else if (cachedAccessToken.refreshOn &&\r\n isTokenExpired(cachedAccessToken.refreshOn, 0)) {\r\n // must refresh (in the background) due to the refresh_in value\r\n lastCacheOutcome = CacheOutcome.PROACTIVELY_REFRESHED;\r\n // don\'t throw ClientAuthError.createRefreshRequiredError(), return cached token instead\r\n }\r\n const environment = request.authority || this.authority.getPreferredCache();\r\n const cacheRecord = {\r\n account: this.cacheManager.readAccountFromCache(request.account),\r\n accessToken: cachedAccessToken,\r\n idToken: this.cacheManager.getIdToken(request.account, tokenKeys, requestTenantId, this.performanceClient, request.correlationId),\r\n refreshToken: null,\r\n appMetadata: this.cacheManager.readAppMetadataFromCache(environment),\r\n };\r\n this.setCacheOutcome(lastCacheOutcome, request.correlationId);\r\n if (this.config.serverTelemetryManager) {\r\n this.config.serverTelemetryManager.incrementCacheHits();\r\n }\r\n return [\r\n await invokeAsync(this.generateResultFromCacheRecord.bind(this), PerformanceEvents.SilentFlowClientGenerateResultFromCacheRecord, this.logger, this.performanceClient, request.correlationId)(cacheRecord, request),\r\n lastCacheOutcome,\r\n ];\r\n }\r\n setCacheOutcome(cacheOutcome, correlationId) {\r\n this.serverTelemetryManager?.setCacheOutcome(cacheOutcome);\r\n this.performanceClient?.addFields({\r\n cacheOutcome: cacheOutcome,\r\n }, correlationId);\r\n if (cacheOutcome !== CacheOutcome.NOT_APPLICABLE) {\r\n this.logger.info(`Token refresh is required due to cache outcome: ${cacheOutcome}`);\r\n }\r\n }\r\n /**\r\n * Helper function to build response object from the CacheRecord\r\n * @param cacheRecord\r\n */\r\n async generateResultFromCacheRecord(cacheRecord, request) {\r\n this.performanceClient?.addQueueMeasurement(PerformanceEvents.SilentFlowClientGenerateResultFromCacheRecord, request.correlationId);\r\n let idTokenClaims;\r\n if (cacheRecord.idToken) {\r\n idTokenClaims = extractTokenClaims(cacheRecord.idToken.secret, this.config.cryptoInterface.base64Decode);\r\n }\r\n // token max_age check\r\n if (request.maxAge || request.maxAge === 0) {\r\n const authTime = idTokenClaims?.auth_time;\r\n if (!authTime) {\r\n throw createClientAuthError(authTimeNotFound);\r\n }\r\n checkMaxAge(authTime, request.maxAge);\r\n }\r\n return ResponseHandler.generateAuthenticationResult(this.cryptoUtils, this.authority, cacheRecord, true, request, idTokenClaims);\r\n }\r\n}\n\n\n//# sourceMappingURL=SilentFlowClient.mjs.map\n\n;// ./node_modules/@azure/msal-browser/dist/interaction_client/SilentCacheClient.mjs\n/*! @azure/msal-browser v3.28.1 2025-01-14 */\n\n\n\n\n\n\n\n/*\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License.\r\n */\r\nclass SilentCacheClient extends StandardInteractionClient {\r\n /**\r\n * Returns unexpired tokens from the cache, if available\r\n * @param silentRequest\r\n */\r\n async acquireToken(silentRequest) {\r\n this.performanceClient.addQueueMeasurement(PerformanceEvents.SilentCacheClientAcquireToken, silentRequest.correlationId);\r\n // Telemetry manager only used to increment cacheHits here\r\n const serverTelemetryManager = this.initializeServerTelemetryManager(ApiId.acquireTokenSilent_silentFlow);\r\n const clientConfig = await invokeAsync(this.getClientConfiguration.bind(this), PerformanceEvents.StandardInteractionClientGetClientConfiguration, this.logger, this.performanceClient, this.correlationId)({\r\n serverTelemetryManager,\r\n requestAuthority: silentRequest.authority,\r\n requestAzureCloudOptions: silentRequest.azureCloudOptions,\r\n account: silentRequest.account,\r\n });\r\n const silentAuthClient = new SilentFlowClient(clientConfig, this.performanceClient);\r\n this.logger.verbose("Silent auth client created");\r\n try {\r\n const response = await invokeAsync(silentAuthClient.acquireCachedToken.bind(silentAuthClient), PerformanceEvents.SilentFlowClientAcquireCachedToken, this.logger, this.performanceClient, silentRequest.correlationId)(silentRequest);\r\n const authResponse = response[0];\r\n this.performanceClient.addFields({\r\n fromCache: true,\r\n }, silentRequest.correlationId);\r\n return authResponse;\r\n }\r\n catch (error) {\r\n if (error instanceof BrowserAuthError &&\r\n error.errorCode === cryptoKeyNotFound) {\r\n this.logger.verbose("Signing keypair for bound access token not found. Refreshing bound access token and generating a new crypto keypair.");\r\n }\r\n throw error;\r\n }\r\n }\r\n /**\r\n * API to silenty clear the browser cache.\r\n * @param logoutRequest\r\n */\r\n logout(logoutRequest) {\r\n this.logger.verbose("logoutRedirect called");\r\n const validLogoutRequest = this.initializeLogoutRequest(logoutRequest);\r\n return this.clearCacheOnLogout(validLogoutRequest?.account);\r\n }\r\n}\n\n\n//# sourceMappingURL=SilentCacheClient.mjs.map\n\n;// ./node_modules/@azure/msal-browser/dist/interaction_client/NativeInteractionClient.mjs\n/*! @azure/msal-browser v3.28.1 2025-01-14 */\n\n\n\n\n\n\n\n\n\n\n\n\n/*\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License.\r\n */\r\nclass NativeInteractionClient extends BaseInteractionClient {\r\n constructor(config, browserStorage, browserCrypto, logger, eventHandler, navigationClient, apiId, performanceClient, provider, accountId, nativeStorageImpl, correlationId) {\r\n super(config, browserStorage, browserCrypto, logger, eventHandler, navigationClient, performanceClient, provider, correlationId);\r\n this.apiId = apiId;\r\n this.accountId = accountId;\r\n this.nativeMessageHandler = provider;\r\n this.nativeStorageManager = nativeStorageImpl;\r\n this.silentCacheClient = new SilentCacheClient(config, this.nativeStorageManager, browserCrypto, logger, eventHandler, navigationClient, performanceClient, provider, correlationId);\r\n this.serverTelemetryManager = this.initializeServerTelemetryManager(this.apiId);\r\n const extensionName = this.nativeMessageHandler.getExtensionId() ===\r\n NativeConstants.PREFERRED_EXTENSION_ID\r\n ? "chrome"\r\n : this.nativeMessageHandler.getExtensionId()?.length\r\n ? "unknown"\r\n : undefined;\r\n this.skus = ServerTelemetryManager.makeExtraSkuString({\r\n libraryName: BrowserConstants.MSAL_SKU,\r\n libraryVersion: packageMetadata_version,\r\n extensionName: extensionName,\r\n extensionVersion: this.nativeMessageHandler.getExtensionVersion(),\r\n });\r\n }\r\n /**\r\n * Adds SKUs to request extra query parameters\r\n * @param request {NativeTokenRequest}\r\n * @private\r\n */\r\n addRequestSKUs(request) {\r\n request.extraParameters = {\r\n ...request.extraParameters,\r\n [X_CLIENT_EXTRA_SKU]: this.skus,\r\n };\r\n }\r\n /**\r\n * Acquire token from native platform via browser extension\r\n * @param request\r\n */\r\n async acquireToken(request) {\r\n this.performanceClient.addQueueMeasurement(PerformanceEvents.NativeInteractionClientAcquireToken, request.correlationId);\r\n this.logger.trace("NativeInteractionClient - acquireToken called.");\r\n // start the perf measurement\r\n const nativeATMeasurement = this.performanceClient.startMeasurement(PerformanceEvents.NativeInteractionClientAcquireToken, request.correlationId);\r\n const reqTimestamp = nowSeconds();\r\n try {\r\n // initialize native request\r\n const nativeRequest = await this.initializeNativeRequest(request);\r\n // check if the tokens can be retrieved from internal cache\r\n try {\r\n const result = await this.acquireTokensFromCache(this.accountId, nativeRequest);\r\n nativeATMeasurement.end({\r\n success: true,\r\n isNativeBroker: false,\r\n fromCache: true,\r\n });\r\n return result;\r\n }\r\n catch (e) {\r\n // continue with a native call for any and all errors\r\n this.logger.info("MSAL internal Cache does not contain tokens, proceed to make a native call");\r\n }\r\n const { ...nativeTokenRequest } = nativeRequest;\r\n // fall back to native calls\r\n const messageBody = {\r\n method: NativeExtensionMethod.GetToken,\r\n request: nativeTokenRequest,\r\n };\r\n const response = await this.nativeMessageHandler.sendMessage(messageBody);\r\n const validatedResponse = this.validateNativeResponse(response);\r\n return await this.handleNativeResponse(validatedResponse, nativeRequest, reqTimestamp)\r\n .then((result) => {\r\n nativeATMeasurement.end({\r\n success: true,\r\n isNativeBroker: true,\r\n requestId: result.requestId,\r\n });\r\n this.serverTelemetryManager.clearNativeBrokerErrorCode();\r\n return result;\r\n })\r\n .catch((error) => {\r\n nativeATMeasurement.end({\r\n success: false,\r\n errorCode: error.errorCode,\r\n subErrorCode: error.subError,\r\n isNativeBroker: true,\r\n });\r\n throw error;\r\n });\r\n }\r\n catch (e) {\r\n if (e instanceof NativeAuthError) {\r\n this.serverTelemetryManager.setNativeBrokerErrorCode(e.errorCode);\r\n }\r\n throw e;\r\n }\r\n }\r\n /**\r\n * Creates silent flow request\r\n * @param request\r\n * @param cachedAccount\r\n * @returns CommonSilentFlowRequest\r\n */\r\n createSilentCacheRequest(request, cachedAccount) {\r\n return {\r\n authority: request.authority,\r\n correlationId: this.correlationId,\r\n scopes: ScopeSet.fromString(request.scope).asArray(),\r\n account: cachedAccount,\r\n forceRefresh: false,\r\n };\r\n }\r\n /**\r\n * Fetches the tokens from the cache if un-expired\r\n * @param nativeAccountId\r\n * @param request\r\n * @returns authenticationResult\r\n */\r\n async acquireTokensFromCache(nativeAccountId, request) {\r\n if (!nativeAccountId) {\r\n this.logger.warning("NativeInteractionClient:acquireTokensFromCache - No nativeAccountId provided");\r\n throw createClientAuthError(noAccountFound);\r\n }\r\n // fetch the account from browser cache\r\n const account = this.browserStorage.getBaseAccountInfo({\r\n nativeAccountId,\r\n });\r\n if (!account) {\r\n throw createClientAuthError(noAccountFound);\r\n }\r\n // leverage silent flow for cached tokens retrieval\r\n try {\r\n const silentRequest = this.createSilentCacheRequest(request, account);\r\n const result = await this.silentCacheClient.acquireToken(silentRequest);\r\n const fullAccount = {\r\n ...account,\r\n idTokenClaims: result?.idTokenClaims,\r\n idToken: result?.idToken,\r\n };\r\n return {\r\n ...result,\r\n account: fullAccount,\r\n };\r\n }\r\n catch (e) {\r\n throw e;\r\n }\r\n }\r\n /**\r\n * Acquires a token from native platform then redirects to the redirectUri instead of returning the response\r\n * @param {RedirectRequest} request\r\n * @param {InProgressPerformanceEvent} rootMeasurement\r\n */\r\n async acquireTokenRedirect(request, rootMeasurement) {\r\n this.logger.trace("NativeInteractionClient - acquireTokenRedirect called.");\r\n const { ...remainingParameters } = request;\r\n delete remainingParameters.onRedirectNavigate;\r\n const nativeRequest = await this.initializeNativeRequest(remainingParameters);\r\n const messageBody = {\r\n method: NativeExtensionMethod.GetToken,\r\n request: nativeRequest,\r\n };\r\n try {\r\n const response = await this.nativeMessageHandler.sendMessage(messageBody);\r\n this.validateNativeResponse(response);\r\n }\r\n catch (e) {\r\n // Only throw fatal errors here to allow application to fallback to regular redirect. Otherwise proceed and the error will be thrown in handleRedirectPromise\r\n if (e instanceof NativeAuthError) {\r\n this.serverTelemetryManager.setNativeBrokerErrorCode(e.errorCode);\r\n if (isFatalNativeAuthError(e)) {\r\n throw e;\r\n }\r\n }\r\n }\r\n this.browserStorage.setTemporaryCache(TemporaryCacheKeys.NATIVE_REQUEST, JSON.stringify(nativeRequest), true);\r\n const navigationOptions = {\r\n apiId: ApiId.acquireTokenRedirect,\r\n timeout: this.config.system.redirectNavigationTimeout,\r\n noHistory: false,\r\n };\r\n const redirectUri = this.config.auth.navigateToLoginRequestUrl\r\n ? window.location.href\r\n : this.getRedirectUri(request.redirectUri);\r\n rootMeasurement.end({ success: true });\r\n await this.navigationClient.navigateExternal(redirectUri, navigationOptions); // Need to treat this as external to ensure handleRedirectPromise is run again\r\n }\r\n /**\r\n * If the previous page called native platform for a token using redirect APIs, send the same request again and return the response\r\n * @param performanceClient {IPerformanceClient?}\r\n * @param correlationId {string?} correlation identifier\r\n */\r\n async handleRedirectPromise(performanceClient, correlationId) {\r\n this.logger.trace("NativeInteractionClient - handleRedirectPromise called.");\r\n if (!this.browserStorage.isInteractionInProgress(true)) {\r\n this.logger.info("handleRedirectPromise called but there is no interaction in progress, returning null.");\r\n return null;\r\n }\r\n // remove prompt from the request to prevent WAM from prompting twice\r\n const cachedRequest = this.browserStorage.getCachedNativeRequest();\r\n if (!cachedRequest) {\r\n this.logger.verbose("NativeInteractionClient - handleRedirectPromise called but there is no cached request, returning null.");\r\n if (performanceClient && correlationId) {\r\n performanceClient?.addFields({ errorCode: "no_cached_request" }, correlationId);\r\n }\r\n return null;\r\n }\r\n const { prompt, ...request } = cachedRequest;\r\n if (prompt) {\r\n this.logger.verbose("NativeInteractionClient - handleRedirectPromise called and prompt was included in the original request, removing prompt from cached request to prevent second interaction with native broker window.");\r\n }\r\n this.browserStorage.removeItem(this.browserStorage.generateCacheKey(TemporaryCacheKeys.NATIVE_REQUEST));\r\n const messageBody = {\r\n method: NativeExtensionMethod.GetToken,\r\n request: request,\r\n };\r\n const reqTimestamp = nowSeconds();\r\n try {\r\n this.logger.verbose("NativeInteractionClient - handleRedirectPromise sending message to native broker.");\r\n const response = await this.nativeMessageHandler.sendMessage(messageBody);\r\n this.validateNativeResponse(response);\r\n const result = this.handleNativeResponse(response, request, reqTimestamp);\r\n this.browserStorage.setInteractionInProgress(false);\r\n const res = await result;\r\n this.serverTelemetryManager.clearNativeBrokerErrorCode();\r\n return res;\r\n }\r\n catch (e) {\r\n this.browserStorage.setInteractionInProgress(false);\r\n throw e;\r\n }\r\n }\r\n /**\r\n * Logout from native platform via browser extension\r\n * @param request\r\n */\r\n logout() {\r\n this.logger.trace("NativeInteractionClient - logout called.");\r\n return Promise.reject("Logout not implemented yet");\r\n }\r\n /**\r\n * Transform response from native platform into AuthenticationResult object which will be returned to the end user\r\n * @param response\r\n * @param request\r\n * @param reqTimestamp\r\n */\r\n async handleNativeResponse(response, request, reqTimestamp) {\r\n this.logger.trace("NativeInteractionClient - handleNativeResponse called.");\r\n // generate identifiers\r\n const idTokenClaims = extractTokenClaims(response.id_token, base64Decode);\r\n const homeAccountIdentifier = this.createHomeAccountIdentifier(response, idTokenClaims);\r\n const cachedhomeAccountId = this.browserStorage.getAccountInfoFilteredBy({\r\n nativeAccountId: request.accountId,\r\n })?.homeAccountId;\r\n if (homeAccountIdentifier !== cachedhomeAccountId &&\r\n response.account.id !== request.accountId) {\r\n // User switch in native broker prompt is not supported. All users must first sign in through web flow to ensure server state is in sync\r\n throw createNativeAuthError(userSwitch);\r\n }\r\n // Get the preferred_cache domain for the given authority\r\n const authority = await this.getDiscoveredAuthority({\r\n requestAuthority: request.authority,\r\n });\r\n const baseAccount = buildAccountToCache(this.browserStorage, authority, homeAccountIdentifier, base64Decode, idTokenClaims, response.client_info, undefined, // environment\r\n idTokenClaims.tid, undefined, // auth code payload\r\n response.account.id, this.logger);\r\n // generate authenticationResult\r\n const result = await this.generateAuthenticationResult(response, request, idTokenClaims, baseAccount, authority.canonicalAuthority, reqTimestamp);\r\n // cache accounts and tokens in the appropriate storage\r\n this.cacheAccount(baseAccount);\r\n this.cacheNativeTokens(response, request, homeAccountIdentifier, idTokenClaims, response.access_token, result.tenantId, reqTimestamp);\r\n return result;\r\n }\r\n /**\r\n * creates an homeAccountIdentifier for the account\r\n * @param response\r\n * @param idTokenObj\r\n * @returns\r\n */\r\n createHomeAccountIdentifier(response, idTokenClaims) {\r\n // Save account in browser storage\r\n const homeAccountIdentifier = AccountEntity.generateHomeAccountId(response.client_info || Constants.EMPTY_STRING, AuthorityType.Default, this.logger, this.browserCrypto, idTokenClaims);\r\n return homeAccountIdentifier;\r\n }\r\n /**\r\n * Helper to generate scopes\r\n * @param response\r\n * @param request\r\n * @returns\r\n */\r\n generateScopes(response, request) {\r\n return response.scope\r\n ? ScopeSet.fromString(response.scope)\r\n : ScopeSet.fromString(request.scope);\r\n }\r\n /**\r\n * If PoP token is requesred, records the PoP token if returned from the WAM, else generates one in the browser\r\n * @param request\r\n * @param response\r\n */\r\n async generatePopAccessToken(response, request) {\r\n if (request.tokenType === AuthenticationScheme.POP &&\r\n request.signPopToken) {\r\n /**\r\n * This code prioritizes SHR returned from the native layer. In case of error/SHR not calculated from WAM and the AT\r\n * is still received, SHR is calculated locally\r\n */\r\n // Check if native layer returned an SHR token\r\n if (response.shr) {\r\n this.logger.trace("handleNativeServerResponse: SHR is enabled in native layer");\r\n return response.shr;\r\n }\r\n // Generate SHR in msal js if WAM does not compute it when POP is enabled\r\n const popTokenGenerator = new PopTokenGenerator(this.browserCrypto);\r\n const shrParameters = {\r\n resourceRequestMethod: request.resourceRequestMethod,\r\n resourceRequestUri: request.resourceRequestUri,\r\n shrClaims: request.shrClaims,\r\n shrNonce: request.shrNonce,\r\n };\r\n /**\r\n * KeyID must be present in the native request from when the PoP key was generated in order for\r\n * PopTokenGenerator to query the full key for signing\r\n */\r\n if (!request.keyId) {\r\n throw createClientAuthError(keyIdMissing);\r\n }\r\n return popTokenGenerator.signPopToken(response.access_token, request.keyId, shrParameters);\r\n }\r\n else {\r\n return response.access_token;\r\n }\r\n }\r\n /**\r\n * Generates authentication result\r\n * @param response\r\n * @param request\r\n * @param idTokenObj\r\n * @param accountEntity\r\n * @param authority\r\n * @param reqTimestamp\r\n * @returns\r\n */\r\n async generateAuthenticationResult(response, request, idTokenClaims, accountEntity, authority, reqTimestamp) {\r\n // Add Native Broker fields to Telemetry\r\n const mats = this.addTelemetryFromNativeResponse(response);\r\n // If scopes not returned in server response, use request scopes\r\n const responseScopes = response.scope\r\n ? ScopeSet.fromString(response.scope)\r\n : ScopeSet.fromString(request.scope);\r\n const accountProperties = response.account.properties || {};\r\n const uid = accountProperties["UID"] ||\r\n idTokenClaims.oid ||\r\n idTokenClaims.sub ||\r\n Constants.EMPTY_STRING;\r\n const tid = accountProperties["TenantId"] ||\r\n idTokenClaims.tid ||\r\n Constants.EMPTY_STRING;\r\n const accountInfo = updateAccountTenantProfileData(accountEntity.getAccountInfo(), undefined, // tenantProfile optional\r\n idTokenClaims, response.id_token);\r\n /**\r\n * In pairwise broker flows, this check prevents the broker\'s native account id\r\n * from being returned over the embedded app\'s account id.\r\n */\r\n if (accountInfo.nativeAccountId !== response.account.id) {\r\n accountInfo.nativeAccountId = response.account.id;\r\n }\r\n // generate PoP token as needed\r\n const responseAccessToken = await this.generatePopAccessToken(response, request);\r\n const tokenType = request.tokenType === AuthenticationScheme.POP\r\n ? AuthenticationScheme.POP\r\n : AuthenticationScheme.BEARER;\r\n const result = {\r\n authority: authority,\r\n uniqueId: uid,\r\n tenantId: tid,\r\n scopes: responseScopes.asArray(),\r\n account: accountInfo,\r\n idToken: response.id_token,\r\n idTokenClaims: idTokenClaims,\r\n accessToken: responseAccessToken,\r\n fromCache: mats ? this.isResponseFromCache(mats) : false,\r\n expiresOn: new Date(Number(reqTimestamp + response.expires_in) * 1000),\r\n tokenType: tokenType,\r\n correlationId: this.correlationId,\r\n state: response.state,\r\n fromNativeBroker: true,\r\n };\r\n return result;\r\n }\r\n /**\r\n * cache the account entity in browser storage\r\n * @param accountEntity\r\n */\r\n cacheAccount(accountEntity) {\r\n // Store the account info and hence `nativeAccountId` in browser cache\r\n this.browserStorage.setAccount(accountEntity);\r\n // Remove any existing cached tokens for this account in browser storage\r\n this.browserStorage.removeAccountContext(accountEntity).catch((e) => {\r\n this.logger.error(`Error occurred while removing account context from browser storage. ${e}`);\r\n });\r\n }\r\n /**\r\n * Stores the access_token and id_token in inmemory storage\r\n * @param response\r\n * @param request\r\n * @param homeAccountIdentifier\r\n * @param idTokenObj\r\n * @param responseAccessToken\r\n * @param tenantId\r\n * @param reqTimestamp\r\n */\r\n cacheNativeTokens(response, request, homeAccountIdentifier, idTokenClaims, responseAccessToken, tenantId, reqTimestamp) {\r\n const cachedIdToken = createIdTokenEntity(homeAccountIdentifier, request.authority, response.id_token || "", request.clientId, idTokenClaims.tid || "");\r\n // cache accessToken in inmemory storage\r\n const expiresIn = request.tokenType === AuthenticationScheme.POP\r\n ? Constants.SHR_NONCE_VALIDITY\r\n : (typeof response.expires_in === "string"\r\n ? parseInt(response.expires_in, 10)\r\n : response.expires_in) || 0;\r\n const tokenExpirationSeconds = reqTimestamp + expiresIn;\r\n const responseScopes = this.generateScopes(response, request);\r\n const cachedAccessToken = createAccessTokenEntity(homeAccountIdentifier, request.authority, responseAccessToken, request.clientId, idTokenClaims.tid || tenantId, responseScopes.printScopes(), tokenExpirationSeconds, 0, base64Decode, undefined, request.tokenType, undefined, request.keyId);\r\n const nativeCacheRecord = {\r\n idToken: cachedIdToken,\r\n accessToken: cachedAccessToken,\r\n };\r\n void this.nativeStorageManager.saveCacheRecord(nativeCacheRecord, request.storeInCache);\r\n }\r\n addTelemetryFromNativeResponse(response) {\r\n const mats = this.getMATSFromResponse(response);\r\n if (!mats) {\r\n return null;\r\n }\r\n this.performanceClient.addFields({\r\n extensionId: this.nativeMessageHandler.getExtensionId(),\r\n extensionVersion: this.nativeMessageHandler.getExtensionVersion(),\r\n matsBrokerVersion: mats.broker_version,\r\n matsAccountJoinOnStart: mats.account_join_on_start,\r\n matsAccountJoinOnEnd: mats.account_join_on_end,\r\n matsDeviceJoin: mats.device_join,\r\n matsPromptBehavior: mats.prompt_behavior,\r\n matsApiErrorCode: mats.api_error_code,\r\n matsUiVisible: mats.ui_visible,\r\n matsSilentCode: mats.silent_code,\r\n matsSilentBiSubCode: mats.silent_bi_sub_code,\r\n matsSilentMessage: mats.silent_message,\r\n matsSilentStatus: mats.silent_status,\r\n matsHttpStatus: mats.http_status,\r\n matsHttpEventCount: mats.http_event_count,\r\n }, this.correlationId);\r\n return mats;\r\n }\r\n /**\r\n * Validates native platform response before processing\r\n * @param response\r\n */\r\n validateNativeResponse(response) {\r\n if (response.hasOwnProperty("access_token") &&\r\n response.hasOwnProperty("id_token") &&\r\n response.hasOwnProperty("client_info") &&\r\n response.hasOwnProperty("account") &&\r\n response.hasOwnProperty("scope") &&\r\n response.hasOwnProperty("expires_in")) {\r\n return response;\r\n }\r\n else {\r\n throw createAuthError(unexpectedError, "Response missing expected properties.");\r\n }\r\n }\r\n /**\r\n * Gets MATS telemetry from native response\r\n * @param response\r\n * @returns\r\n */\r\n getMATSFromResponse(response) {\r\n if (response.properties.MATS) {\r\n try {\r\n return JSON.parse(response.properties.MATS);\r\n }\r\n catch (e) {\r\n this.logger.error("NativeInteractionClient - Error parsing MATS telemetry, returning null instead");\r\n }\r\n }\r\n return null;\r\n }\r\n /**\r\n * Returns whether or not response came from native cache\r\n * @param response\r\n * @returns\r\n */\r\n isResponseFromCache(mats) {\r\n if (typeof mats.is_cached === "undefined") {\r\n this.logger.verbose("NativeInteractionClient - MATS telemetry does not contain field indicating if response was served from cache. Returning false.");\r\n return false;\r\n }\r\n return !!mats.is_cached;\r\n }\r\n /**\r\n * Translates developer provided request object into NativeRequest object\r\n * @param request\r\n */\r\n async initializeNativeRequest(request) {\r\n this.logger.trace("NativeInteractionClient - initializeNativeRequest called");\r\n const requestAuthority = request.authority || this.config.auth.authority;\r\n if (request.account) {\r\n // validate authority\r\n await this.getDiscoveredAuthority({\r\n requestAuthority,\r\n requestAzureCloudOptions: request.azureCloudOptions,\r\n account: request.account,\r\n });\r\n }\r\n const canonicalAuthority = new UrlString(requestAuthority);\r\n canonicalAuthority.validateAsUri();\r\n // scopes are expected to be received by the native broker as "scope" and will be added to the request below. Other properties that should be dropped from the request to the native broker can be included in the object destructuring here.\r\n const { scopes, ...remainingProperties } = request;\r\n const scopeSet = new ScopeSet(scopes || []);\r\n scopeSet.appendScopes(OIDC_DEFAULT_SCOPES);\r\n const getPrompt = () => {\r\n // If request is silent, prompt is always none\r\n switch (this.apiId) {\r\n case ApiId.ssoSilent:\r\n case ApiId.acquireTokenSilent_silentFlow:\r\n this.logger.trace("initializeNativeRequest: silent request sets prompt to none");\r\n return PromptValue.NONE;\r\n }\r\n // Prompt not provided, request may proceed and native broker decides if it needs to prompt\r\n if (!request.prompt) {\r\n this.logger.trace("initializeNativeRequest: prompt was not provided");\r\n return undefined;\r\n }\r\n // If request is interactive, check if prompt provided is allowed to go directly to native broker\r\n switch (request.prompt) {\r\n case PromptValue.NONE:\r\n case PromptValue.CONSENT:\r\n case PromptValue.LOGIN:\r\n this.logger.trace("initializeNativeRequest: prompt is compatible with native flow");\r\n return request.prompt;\r\n default:\r\n this.logger.trace(`initializeNativeRequest: prompt = ${request.prompt} is not compatible with native flow`);\r\n throw createBrowserAuthError(nativePromptNotSupported);\r\n }\r\n };\r\n const validatedRequest = {\r\n ...remainingProperties,\r\n accountId: this.accountId,\r\n clientId: this.config.auth.clientId,\r\n authority: canonicalAuthority.urlString,\r\n scope: scopeSet.printScopes(),\r\n redirectUri: this.getRedirectUri(request.redirectUri),\r\n prompt: getPrompt(),\r\n correlationId: this.correlationId,\r\n tokenType: request.authenticationScheme,\r\n windowTitleSubstring: document.title,\r\n extraParameters: {\r\n ...request.extraQueryParameters,\r\n ...request.tokenQueryParameters,\r\n },\r\n extendedExpiryToken: false,\r\n keyId: request.popKid,\r\n };\r\n // Check for PoP token requests: signPopToken should only be set to true if popKid is not set\r\n if (validatedRequest.signPopToken && !!request.popKid) {\r\n throw createBrowserAuthError(invalidPopTokenRequest);\r\n }\r\n this.handleExtraBrokerParams(validatedRequest);\r\n validatedRequest.extraParameters =\r\n validatedRequest.extraParameters || {};\r\n validatedRequest.extraParameters.telemetry =\r\n NativeConstants.MATS_TELEMETRY;\r\n if (request.authenticationScheme === AuthenticationScheme.POP) {\r\n // add POP request type\r\n const shrParameters = {\r\n resourceRequestUri: request.resourceRequestUri,\r\n resourceRequestMethod: request.resourceRequestMethod,\r\n shrClaims: request.shrClaims,\r\n shrNonce: request.shrNonce,\r\n };\r\n const popTokenGenerator = new PopTokenGenerator(this.browserCrypto);\r\n // generate reqCnf if not provided in the request\r\n let reqCnfData;\r\n if (!validatedRequest.keyId) {\r\n const generatedReqCnfData = await invokeAsync(popTokenGenerator.generateCnf.bind(popTokenGenerator), PerformanceEvents.PopTokenGenerateCnf, this.logger, this.performanceClient, request.correlationId)(shrParameters, this.logger);\r\n reqCnfData = generatedReqCnfData.reqCnfString;\r\n validatedRequest.keyId = generatedReqCnfData.kid;\r\n validatedRequest.signPopToken = true;\r\n }\r\n else {\r\n reqCnfData = this.browserCrypto.base64UrlEncode(JSON.stringify({ kid: validatedRequest.keyId }));\r\n validatedRequest.signPopToken = false;\r\n }\r\n // SPAs require whole string to be passed to broker\r\n validatedRequest.reqCnf = reqCnfData;\r\n }\r\n this.addRequestSKUs(validatedRequest);\r\n return validatedRequest;\r\n }\r\n /**\r\n * Handles extra broker request parameters\r\n * @param request {NativeTokenRequest}\r\n * @private\r\n */\r\n handleExtraBrokerParams(request) {\r\n const hasExtraBrokerParams = request.extraParameters &&\r\n request.extraParameters.hasOwnProperty(BROKER_CLIENT_ID) &&\r\n request.extraParameters.hasOwnProperty(BROKER_REDIRECT_URI) &&\r\n request.extraParameters.hasOwnProperty(CLIENT_ID);\r\n if (!request.embeddedClientId && !hasExtraBrokerParams) {\r\n return;\r\n }\r\n let child_client_id = "";\r\n const child_redirect_uri = request.redirectUri;\r\n if (request.embeddedClientId) {\r\n request.redirectUri = this.config.auth.redirectUri;\r\n child_client_id = request.embeddedClientId;\r\n }\r\n else if (request.extraParameters) {\r\n request.redirectUri =\r\n request.extraParameters[BROKER_REDIRECT_URI];\r\n child_client_id =\r\n request.extraParameters[CLIENT_ID];\r\n }\r\n request.extraParameters = {\r\n child_client_id,\r\n child_redirect_uri,\r\n };\r\n this.performanceClient?.addFields({\r\n embeddedClientId: child_client_id,\r\n embeddedRedirectUri: child_redirect_uri,\r\n }, request.correlationId);\r\n }\r\n}\n\n\n//# sourceMappingURL=NativeInteractionClient.mjs.map\n\n;// ./node_modules/@azure/msal-browser/dist/broker/nativeBroker/NativeMessageHandler.mjs\n/*! @azure/msal-browser v3.28.1 2025-01-14 */\n\n\n\n\n\n\n\n\n/*\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License.\r\n */\r\nclass NativeMessageHandler {\r\n constructor(logger, handshakeTimeoutMs, performanceClient, extensionId) {\r\n this.logger = logger;\r\n this.handshakeTimeoutMs = handshakeTimeoutMs;\r\n this.extensionId = extensionId;\r\n this.resolvers = new Map(); // Used for non-handshake messages\r\n this.handshakeResolvers = new Map(); // Used for handshake messages\r\n this.messageChannel = new MessageChannel();\r\n this.windowListener = this.onWindowMessage.bind(this); // Window event callback doesn\'t have access to \'this\' unless it\'s bound\r\n this.performanceClient = performanceClient;\r\n this.handshakeEvent = performanceClient.startMeasurement(PerformanceEvents.NativeMessageHandlerHandshake);\r\n }\r\n /**\r\n * Sends a given message to the extension and resolves with the extension response\r\n * @param body\r\n */\r\n async sendMessage(body) {\r\n this.logger.trace("NativeMessageHandler - sendMessage called.");\r\n const req = {\r\n channel: NativeConstants.CHANNEL_ID,\r\n extensionId: this.extensionId,\r\n responseId: createNewGuid(),\r\n body: body,\r\n };\r\n this.logger.trace("NativeMessageHandler - Sending request to browser extension");\r\n this.logger.tracePii(`NativeMessageHandler - Sending request to browser extension: ${JSON.stringify(req)}`);\r\n this.messageChannel.port1.postMessage(req);\r\n return new Promise((resolve, reject) => {\r\n this.resolvers.set(req.responseId, { resolve, reject });\r\n });\r\n }\r\n /**\r\n * Returns an instance of the MessageHandler that has successfully established a connection with an extension\r\n * @param {Logger} logger\r\n * @param {number} handshakeTimeoutMs\r\n * @param {IPerformanceClient} performanceClient\r\n * @param {ICrypto} crypto\r\n */\r\n static async createProvider(logger, handshakeTimeoutMs, performanceClient) {\r\n logger.trace("NativeMessageHandler - createProvider called.");\r\n try {\r\n const preferredProvider = new NativeMessageHandler(logger, handshakeTimeoutMs, performanceClient, NativeConstants.PREFERRED_EXTENSION_ID);\r\n await preferredProvider.sendHandshakeRequest();\r\n return preferredProvider;\r\n }\r\n catch (e) {\r\n // If preferred extension fails for whatever reason, fallback to using any installed extension\r\n const backupProvider = new NativeMessageHandler(logger, handshakeTimeoutMs, performanceClient);\r\n await backupProvider.sendHandshakeRequest();\r\n return backupProvider;\r\n }\r\n }\r\n /**\r\n * Send handshake request helper.\r\n */\r\n async sendHandshakeRequest() {\r\n this.logger.trace("NativeMessageHandler - sendHandshakeRequest called.");\r\n // Register this event listener before sending handshake\r\n window.addEventListener("message", this.windowListener, false); // false is important, because content script message processing should work first\r\n const req = {\r\n channel: NativeConstants.CHANNEL_ID,\r\n extensionId: this.extensionId,\r\n responseId: createNewGuid(),\r\n body: {\r\n method: NativeExtensionMethod.HandshakeRequest,\r\n },\r\n };\r\n this.handshakeEvent.add({\r\n extensionId: this.extensionId,\r\n extensionHandshakeTimeoutMs: this.handshakeTimeoutMs,\r\n });\r\n this.messageChannel.port1.onmessage = (event) => {\r\n this.onChannelMessage(event);\r\n };\r\n window.postMessage(req, window.origin, [this.messageChannel.port2]);\r\n return new Promise((resolve, reject) => {\r\n this.handshakeResolvers.set(req.responseId, { resolve, reject });\r\n this.timeoutId = window.setTimeout(() => {\r\n /*\r\n * Throw an error if neither HandshakeResponse nor original Handshake request are received in a reasonable timeframe.\r\n * This typically suggests an event handler stopped propagation of the Handshake request but did not respond to it on the MessageChannel port\r\n */\r\n window.removeEventListener("message", this.windowListener, false);\r\n this.messageChannel.port1.close();\r\n this.messageChannel.port2.close();\r\n this.handshakeEvent.end({\r\n extensionHandshakeTimedOut: true,\r\n success: false,\r\n });\r\n reject(createBrowserAuthError(nativeHandshakeTimeout));\r\n this.handshakeResolvers.delete(req.responseId);\r\n }, this.handshakeTimeoutMs); // Use a reasonable timeout in milliseconds here\r\n });\r\n }\r\n /**\r\n * Invoked when a message is posted to the window. If a handshake request is received it means the extension is not installed.\r\n * @param event\r\n */\r\n onWindowMessage(event) {\r\n this.logger.trace("NativeMessageHandler - onWindowMessage called");\r\n // We only accept messages from ourselves\r\n if (event.source !== window) {\r\n return;\r\n }\r\n const request = event.data;\r\n if (!request.channel ||\r\n request.channel !== NativeConstants.CHANNEL_ID) {\r\n return;\r\n }\r\n if (request.extensionId && request.extensionId !== this.extensionId) {\r\n return;\r\n }\r\n if (request.body.method === NativeExtensionMethod.HandshakeRequest) {\r\n const handshakeResolver = this.handshakeResolvers.get(request.responseId);\r\n /*\r\n * Filter out responses with no matched resolvers sooner to keep channel ports open while waiting for\r\n * the proper response.\r\n */\r\n if (!handshakeResolver) {\r\n this.logger.trace(`NativeMessageHandler.onWindowMessage - resolver can\'t be found for request ${request.responseId}`);\r\n return;\r\n }\r\n // If we receive this message back it means no extension intercepted the request, meaning no extension supporting handshake protocol is installed\r\n this.logger.verbose(request.extensionId\r\n ? `Extension with id: ${request.extensionId} not installed`\r\n : "No extension installed");\r\n clearTimeout(this.timeoutId);\r\n this.messageChannel.port1.close();\r\n this.messageChannel.port2.close();\r\n window.removeEventListener("message", this.windowListener, false);\r\n this.handshakeEvent.end({\r\n success: false,\r\n extensionInstalled: false,\r\n });\r\n handshakeResolver.reject(createBrowserAuthError(nativeExtensionNotInstalled));\r\n }\r\n }\r\n /**\r\n * Invoked when a message is received from the extension on the MessageChannel port\r\n * @param event\r\n */\r\n onChannelMessage(event) {\r\n this.logger.trace("NativeMessageHandler - onChannelMessage called.");\r\n const request = event.data;\r\n const resolver = this.resolvers.get(request.responseId);\r\n const handshakeResolver = this.handshakeResolvers.get(request.responseId);\r\n try {\r\n const method = request.body.method;\r\n if (method === NativeExtensionMethod.Response) {\r\n if (!resolver) {\r\n return;\r\n }\r\n const response = request.body.response;\r\n this.logger.trace("NativeMessageHandler - Received response from browser extension");\r\n this.logger.tracePii(`NativeMessageHandler - Received response from browser extension: ${JSON.stringify(response)}`);\r\n if (response.status !== "Success") {\r\n resolver.reject(createNativeAuthError(response.code, response.description, response.ext));\r\n }\r\n else if (response.result) {\r\n if (response.result["code"] &&\r\n response.result["description"]) {\r\n resolver.reject(createNativeAuthError(response.result["code"], response.result["description"], response.result["ext"]));\r\n }\r\n else {\r\n resolver.resolve(response.result);\r\n }\r\n }\r\n else {\r\n throw createAuthError(unexpectedError, "Event does not contain result.");\r\n }\r\n this.resolvers.delete(request.responseId);\r\n }\r\n else if (method === NativeExtensionMethod.HandshakeResponse) {\r\n if (!handshakeResolver) {\r\n this.logger.trace(`NativeMessageHandler.onChannelMessage - resolver can\'t be found for request ${request.responseId}`);\r\n return;\r\n }\r\n clearTimeout(this.timeoutId); // Clear setTimeout\r\n window.removeEventListener("message", this.windowListener, false); // Remove \'No extension\' listener\r\n this.extensionId = request.extensionId;\r\n this.extensionVersion = request.body.version;\r\n this.logger.verbose(`NativeMessageHandler - Received HandshakeResponse from extension: ${this.extensionId}`);\r\n this.handshakeEvent.end({\r\n extensionInstalled: true,\r\n success: true,\r\n });\r\n handshakeResolver.resolve();\r\n this.handshakeResolvers.delete(request.responseId);\r\n }\r\n // Do nothing if method is not Response or HandshakeResponse\r\n }\r\n catch (err) {\r\n this.logger.error("Error parsing response from WAM Extension");\r\n this.logger.errorPii(`Error parsing response from WAM Extension: ${err}`);\r\n this.logger.errorPii(`Unable to parse ${event}`);\r\n if (resolver) {\r\n resolver.reject(err);\r\n }\r\n else if (handshakeResolver) {\r\n handshakeResolver.reject(err);\r\n }\r\n }\r\n }\r\n /**\r\n * Returns the Id for the browser extension this handler is communicating with\r\n * @returns\r\n */\r\n getExtensionId() {\r\n return this.extensionId;\r\n }\r\n /**\r\n * Returns the version for the browser extension this handler is communicating with\r\n * @returns\r\n */\r\n getExtensionVersion() {\r\n return this.extensionVersion;\r\n }\r\n /**\r\n * Returns boolean indicating whether or not the request should attempt to use native broker\r\n * @param logger\r\n * @param config\r\n * @param nativeExtensionProvider\r\n * @param authenticationScheme\r\n */\r\n static isNativeAvailable(config, logger, nativeExtensionProvider, authenticationScheme) {\r\n logger.trace("isNativeAvailable called");\r\n if (!config.system.allowNativeBroker) {\r\n logger.trace("isNativeAvailable: allowNativeBroker is not enabled, returning false");\r\n // Developer disabled WAM\r\n return false;\r\n }\r\n if (!nativeExtensionProvider) {\r\n logger.trace("isNativeAvailable: WAM extension provider is not initialized, returning false");\r\n // Extension is not available\r\n return false;\r\n }\r\n if (authenticationScheme) {\r\n switch (authenticationScheme) {\r\n case AuthenticationScheme.BEARER:\r\n case AuthenticationScheme.POP:\r\n logger.trace("isNativeAvailable: authenticationScheme is supported, returning true");\r\n return true;\r\n default:\r\n logger.trace("isNativeAvailable: authenticationScheme is not supported, returning false");\r\n return false;\r\n }\r\n }\r\n return true;\r\n }\r\n}\n\n\n//# sourceMappingURL=NativeMessageHandler.mjs.map\n\n;// ./node_modules/@azure/msal-browser/dist/interaction_handler/InteractionHandler.mjs\n/*! @azure/msal-browser v3.28.1 2025-01-14 */\n\n\n\n\n\n/*\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License.\r\n */\r\n/**\r\n * Abstract class which defines operations for a browser interaction handling class.\r\n */\r\nclass InteractionHandler {\r\n constructor(authCodeModule, storageImpl, authCodeRequest, logger, performanceClient) {\r\n this.authModule = authCodeModule;\r\n this.browserStorage = storageImpl;\r\n this.authCodeRequest = authCodeRequest;\r\n this.logger = logger;\r\n this.performanceClient = performanceClient;\r\n }\r\n /**\r\n * Function to handle response parameters from hash.\r\n * @param locationHash\r\n */\r\n async handleCodeResponse(response, request) {\r\n this.performanceClient.addQueueMeasurement(PerformanceEvents.HandleCodeResponse, request.correlationId);\r\n let authCodeResponse;\r\n try {\r\n authCodeResponse = this.authModule.handleFragmentResponse(response, request.state);\r\n }\r\n catch (e) {\r\n if (e instanceof ServerError &&\r\n e.subError === userCancelled) {\r\n // Translate server error caused by user closing native prompt to corresponding first class MSAL error\r\n throw createBrowserAuthError(userCancelled);\r\n }\r\n else {\r\n throw e;\r\n }\r\n }\r\n return invokeAsync(this.handleCodeResponseFromServer.bind(this), PerformanceEvents.HandleCodeResponseFromServer, this.logger, this.performanceClient, request.correlationId)(authCodeResponse, request);\r\n }\r\n /**\r\n * Process auth code response from AAD\r\n * @param authCodeResponse\r\n * @param state\r\n * @param authority\r\n * @param networkModule\r\n * @returns\r\n */\r\n async handleCodeResponseFromServer(authCodeResponse, request, validateNonce = true) {\r\n this.performanceClient.addQueueMeasurement(PerformanceEvents.HandleCodeResponseFromServer, request.correlationId);\r\n this.logger.trace("InteractionHandler.handleCodeResponseFromServer called");\r\n // Assign code to request\r\n this.authCodeRequest.code = authCodeResponse.code;\r\n // Check for new cloud instance\r\n if (authCodeResponse.cloud_instance_host_name) {\r\n await invokeAsync(this.authModule.updateAuthority.bind(this.authModule), PerformanceEvents.UpdateTokenEndpointAuthority, this.logger, this.performanceClient, request.correlationId)(authCodeResponse.cloud_instance_host_name, request.correlationId);\r\n }\r\n // Nonce validation not needed when redirect not involved (e.g. hybrid spa, renewing token via rt)\r\n if (validateNonce) {\r\n // TODO: Assigning "response nonce" to "request nonce" is confusing. Refactor the function doing validation to accept request nonce directly\r\n authCodeResponse.nonce = request.nonce || undefined;\r\n }\r\n authCodeResponse.state = request.state;\r\n // Add CCS parameters if available\r\n if (authCodeResponse.client_info) {\r\n this.authCodeRequest.clientInfo = authCodeResponse.client_info;\r\n }\r\n else {\r\n const ccsCred = this.createCcsCredentials(request);\r\n if (ccsCred) {\r\n this.authCodeRequest.ccsCredential = ccsCred;\r\n }\r\n }\r\n // Acquire token with retrieved code.\r\n const tokenResponse = (await invokeAsync(this.authModule.acquireToken.bind(this.authModule), PerformanceEvents.AuthClientAcquireToken, this.logger, this.performanceClient, request.correlationId)(this.authCodeRequest, authCodeResponse));\r\n return tokenResponse;\r\n }\r\n /**\r\n * Build ccs creds if available\r\n */\r\n createCcsCredentials(request) {\r\n if (request.account) {\r\n return {\r\n credential: request.account.homeAccountId,\r\n type: CcsCredentialType.HOME_ACCOUNT_ID,\r\n };\r\n }\r\n else if (request.loginHint) {\r\n return {\r\n credential: request.loginHint,\r\n type: CcsCredentialType.UPN,\r\n };\r\n }\r\n return null;\r\n }\r\n}\n\n\n//# sourceMappingURL=InteractionHandler.mjs.map\n\n;// ./node_modules/@azure/msal-browser/dist/response/ResponseHandler.mjs\n/*! @azure/msal-browser v3.28.1 2025-01-14 */\n\n\n\n\n\n\n/*\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License.\r\n */\r\nfunction deserializeResponse(responseString, responseLocation, logger) {\r\n // Deserialize hash fragment response parameters.\r\n const serverParams = getDeserializedResponse(responseString);\r\n if (!serverParams) {\r\n if (!stripLeadingHashOrQuery(responseString)) {\r\n // Hash or Query string is empty\r\n logger.error(`The request has returned to the redirectUri but a ${responseLocation} is not present. It\'s likely that the ${responseLocation} has been removed or the page has been redirected by code running on the redirectUri page.`);\r\n throw createBrowserAuthError(hashEmptyError);\r\n }\r\n else {\r\n logger.error(`A ${responseLocation} is present in the iframe but it does not contain known properties. It\'s likely that the ${responseLocation} has been replaced by code running on the redirectUri page.`);\r\n logger.errorPii(`The ${responseLocation} detected is: ${responseString}`);\r\n throw createBrowserAuthError(hashDoesNotContainKnownProperties);\r\n }\r\n }\r\n return serverParams;\r\n}\r\n/**\r\n * Returns the interaction type that the response object belongs to\r\n */\r\nfunction validateInteractionType(response, browserCrypto, interactionType) {\r\n if (!response.state) {\r\n throw createBrowserAuthError(noStateInHash);\r\n }\r\n const platformStateObj = extractBrowserRequestState(browserCrypto, response.state);\r\n if (!platformStateObj) {\r\n throw createBrowserAuthError(unableToParseState);\r\n }\r\n if (platformStateObj.interactionType !== interactionType) {\r\n throw createBrowserAuthError(stateInteractionTypeMismatch);\r\n }\r\n}\n\n\n//# sourceMappingURL=ResponseHandler.mjs.map\n\n;// ./node_modules/@azure/msal-browser/dist/interaction_client/PopupClient.mjs\n/*! @azure/msal-browser v3.28.1 2025-01-14 */\n\n\n\n\n\n\n\n\n\n\n\n\n\n/*\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License.\r\n */\r\nclass PopupClient extends StandardInteractionClient {\r\n constructor(config, storageImpl, browserCrypto, logger, eventHandler, navigationClient, performanceClient, nativeStorageImpl, nativeMessageHandler, correlationId) {\r\n super(config, storageImpl, browserCrypto, logger, eventHandler, navigationClient, performanceClient, nativeMessageHandler, correlationId);\r\n // Properly sets this reference for the unload event.\r\n this.unloadWindow = this.unloadWindow.bind(this);\r\n this.nativeStorage = nativeStorageImpl;\r\n }\r\n /**\r\n * Acquires tokens by opening a popup window to the /authorize endpoint of the authority\r\n * @param request\r\n */\r\n acquireToken(request) {\r\n try {\r\n const popupName = this.generatePopupName(request.scopes || OIDC_DEFAULT_SCOPES, request.authority || this.config.auth.authority);\r\n const popupParams = {\r\n popupName,\r\n popupWindowAttributes: request.popupWindowAttributes || {},\r\n popupWindowParent: request.popupWindowParent ?? window,\r\n };\r\n // asyncPopups flag is true. Acquires token without first opening popup. Popup will be opened later asynchronously.\r\n if (this.config.system.asyncPopups) {\r\n this.logger.verbose("asyncPopups set to true, acquiring token");\r\n // Passes on popup position and dimensions if in request\r\n return this.acquireTokenPopupAsync(request, popupParams);\r\n }\r\n else {\r\n // asyncPopups flag is set to false. Opens popup before acquiring token.\r\n this.logger.verbose("asyncPopup set to false, opening popup before acquiring token");\r\n popupParams.popup = this.openSizedPopup("about:blank", popupParams);\r\n return this.acquireTokenPopupAsync(request, popupParams);\r\n }\r\n }\r\n catch (e) {\r\n return Promise.reject(e);\r\n }\r\n }\r\n /**\r\n * Clears local cache for the current user then opens a popup window prompting the user to sign-out of the server\r\n * @param logoutRequest\r\n */\r\n logout(logoutRequest) {\r\n try {\r\n this.logger.verbose("logoutPopup called");\r\n const validLogoutRequest = this.initializeLogoutRequest(logoutRequest);\r\n const popupParams = {\r\n popupName: this.generateLogoutPopupName(validLogoutRequest),\r\n popupWindowAttributes: logoutRequest?.popupWindowAttributes || {},\r\n popupWindowParent: logoutRequest?.popupWindowParent ?? window,\r\n };\r\n const authority = logoutRequest && logoutRequest.authority;\r\n const mainWindowRedirectUri = logoutRequest && logoutRequest.mainWindowRedirectUri;\r\n // asyncPopups flag is true. Acquires token without first opening popup. Popup will be opened later asynchronously.\r\n if (this.config.system.asyncPopups) {\r\n this.logger.verbose("asyncPopups set to true");\r\n // Passes on popup position and dimensions if in request\r\n return this.logoutPopupAsync(validLogoutRequest, popupParams, authority, mainWindowRedirectUri);\r\n }\r\n else {\r\n // asyncPopups flag is set to false. Opens popup before logging out.\r\n this.logger.verbose("asyncPopup set to false, opening popup");\r\n popupParams.popup = this.openSizedPopup("about:blank", popupParams);\r\n return this.logoutPopupAsync(validLogoutRequest, popupParams, authority, mainWindowRedirectUri);\r\n }\r\n }\r\n catch (e) {\r\n // Since this function is synchronous we need to reject\r\n return Promise.reject(e);\r\n }\r\n }\r\n /**\r\n * Helper which obtains an access_token for your API via opening a popup window in the user\'s browser\r\n * @param validRequest\r\n * @param popupName\r\n * @param popup\r\n * @param popupWindowAttributes\r\n *\r\n * @returns A promise that is fulfilled when this function has completed, or rejected if an error was raised.\r\n */\r\n async acquireTokenPopupAsync(request, popupParams) {\r\n this.logger.verbose("acquireTokenPopupAsync called");\r\n const serverTelemetryManager = this.initializeServerTelemetryManager(ApiId.acquireTokenPopup);\r\n const validRequest = await invokeAsync(this.initializeAuthorizationRequest.bind(this), PerformanceEvents.StandardInteractionClientInitializeAuthorizationRequest, this.logger, this.performanceClient, this.correlationId)(request, InteractionType.Popup);\r\n preconnect(validRequest.authority);\r\n try {\r\n // Create auth code request and generate PKCE params\r\n const authCodeRequest = await invokeAsync(this.initializeAuthorizationCodeRequest.bind(this), PerformanceEvents.StandardInteractionClientInitializeAuthorizationCodeRequest, this.logger, this.performanceClient, this.correlationId)(validRequest);\r\n // Initialize the client\r\n const authClient = await invokeAsync(this.createAuthCodeClient.bind(this), PerformanceEvents.StandardInteractionClientCreateAuthCodeClient, this.logger, this.performanceClient, this.correlationId)({\r\n serverTelemetryManager,\r\n requestAuthority: validRequest.authority,\r\n requestAzureCloudOptions: validRequest.azureCloudOptions,\r\n requestExtraQueryParameters: validRequest.extraQueryParameters,\r\n account: validRequest.account,\r\n });\r\n const isNativeBroker = NativeMessageHandler.isNativeAvailable(this.config, this.logger, this.nativeMessageHandler, request.authenticationScheme);\r\n // Start measurement for server calls with native brokering enabled\r\n let fetchNativeAccountIdMeasurement;\r\n if (isNativeBroker) {\r\n fetchNativeAccountIdMeasurement =\r\n this.performanceClient.startMeasurement(PerformanceEvents.FetchAccountIdWithNativeBroker, request.correlationId);\r\n }\r\n // Create acquire token url.\r\n const navigateUrl = await authClient.getAuthCodeUrl({\r\n ...validRequest,\r\n nativeBroker: isNativeBroker,\r\n });\r\n // Create popup interaction handler.\r\n const interactionHandler = new InteractionHandler(authClient, this.browserStorage, authCodeRequest, this.logger, this.performanceClient);\r\n // Show the UI once the url has been created. Get the window handle for the popup.\r\n const popupWindow = this.initiateAuthRequest(navigateUrl, popupParams);\r\n this.eventHandler.emitEvent(EventType.POPUP_OPENED, InteractionType.Popup, { popupWindow }, null);\r\n // Monitor the window for the hash. Return the string value and close the popup when the hash is received. Default timeout is 60 seconds.\r\n const responseString = await this.monitorPopupForHash(popupWindow, popupParams.popupWindowParent);\r\n const serverParams = invoke(deserializeResponse, PerformanceEvents.DeserializeResponse, this.logger, this.performanceClient, this.correlationId)(responseString, this.config.auth.OIDCOptions.serverResponseType, this.logger);\r\n // Remove throttle if it exists\r\n ThrottlingUtils.removeThrottle(this.browserStorage, this.config.auth.clientId, authCodeRequest);\r\n if (serverParams.accountId) {\r\n this.logger.verbose("Account id found in hash, calling WAM for token");\r\n // end measurement for server call with native brokering enabled\r\n if (fetchNativeAccountIdMeasurement) {\r\n fetchNativeAccountIdMeasurement.end({\r\n success: true,\r\n isNativeBroker: true,\r\n });\r\n }\r\n if (!this.nativeMessageHandler) {\r\n throw createBrowserAuthError(nativeConnectionNotEstablished);\r\n }\r\n const nativeInteractionClient = new NativeInteractionClient(this.config, this.browserStorage, this.browserCrypto, this.logger, this.eventHandler, this.navigationClient, ApiId.acquireTokenPopup, this.performanceClient, this.nativeMessageHandler, serverParams.accountId, this.nativeStorage, validRequest.correlationId);\r\n const { userRequestState } = ProtocolUtils.parseRequestState(this.browserCrypto, validRequest.state);\r\n return await nativeInteractionClient.acquireToken({\r\n ...validRequest,\r\n state: userRequestState,\r\n prompt: undefined, // Server should handle the prompt, ideally native broker can do this part silently\r\n });\r\n }\r\n // Handle response from hash string.\r\n const result = await interactionHandler.handleCodeResponse(serverParams, validRequest);\r\n return result;\r\n }\r\n catch (e) {\r\n // Close the synchronous popup if an error is thrown before the window unload event is registered\r\n popupParams.popup?.close();\r\n if (e instanceof AuthError) {\r\n e.setCorrelationId(this.correlationId);\r\n serverTelemetryManager.cacheFailedRequest(e);\r\n }\r\n throw e;\r\n }\r\n }\r\n /**\r\n *\r\n * @param validRequest\r\n * @param popupName\r\n * @param requestAuthority\r\n * @param popup\r\n * @param mainWindowRedirectUri\r\n * @param popupWindowAttributes\r\n */\r\n async logoutPopupAsync(validRequest, popupParams, requestAuthority, mainWindowRedirectUri) {\r\n this.logger.verbose("logoutPopupAsync called");\r\n this.eventHandler.emitEvent(EventType.LOGOUT_START, InteractionType.Popup, validRequest);\r\n const serverTelemetryManager = this.initializeServerTelemetryManager(ApiId.logoutPopup);\r\n try {\r\n // Clear cache on logout\r\n await this.clearCacheOnLogout(validRequest.account);\r\n // Initialize the client\r\n const authClient = await invokeAsync(this.createAuthCodeClient.bind(this), PerformanceEvents.StandardInteractionClientCreateAuthCodeClient, this.logger, this.performanceClient, this.correlationId)({\r\n serverTelemetryManager,\r\n requestAuthority: requestAuthority,\r\n account: validRequest.account || undefined,\r\n });\r\n try {\r\n authClient.authority.endSessionEndpoint;\r\n }\r\n catch {\r\n if (validRequest.account?.homeAccountId &&\r\n validRequest.postLogoutRedirectUri &&\r\n authClient.authority.protocolMode === ProtocolMode.OIDC) {\r\n void this.browserStorage.removeAccount(validRequest.account?.homeAccountId);\r\n this.eventHandler.emitEvent(EventType.LOGOUT_SUCCESS, InteractionType.Popup, validRequest);\r\n if (mainWindowRedirectUri) {\r\n const navigationOptions = {\r\n apiId: ApiId.logoutPopup,\r\n timeout: this.config.system.redirectNavigationTimeout,\r\n noHistory: false,\r\n };\r\n const absoluteUrl = UrlString.getAbsoluteUrl(mainWindowRedirectUri, getCurrentUri());\r\n await this.navigationClient.navigateInternal(absoluteUrl, navigationOptions);\r\n }\r\n popupParams.popup?.close();\r\n return;\r\n }\r\n }\r\n // Create logout string and navigate user window to logout.\r\n const logoutUri = authClient.getLogoutUri(validRequest);\r\n this.eventHandler.emitEvent(EventType.LOGOUT_SUCCESS, InteractionType.Popup, validRequest);\r\n // Open the popup window to requestUrl.\r\n const popupWindow = this.openPopup(logoutUri, popupParams);\r\n this.eventHandler.emitEvent(EventType.POPUP_OPENED, InteractionType.Popup, { popupWindow }, null);\r\n await this.monitorPopupForHash(popupWindow, popupParams.popupWindowParent).catch(() => {\r\n // Swallow any errors related to monitoring the window. Server logout is best effort\r\n });\r\n if (mainWindowRedirectUri) {\r\n const navigationOptions = {\r\n apiId: ApiId.logoutPopup,\r\n timeout: this.config.system.redirectNavigationTimeout,\r\n noHistory: false,\r\n };\r\n const absoluteUrl = UrlString.getAbsoluteUrl(mainWindowRedirectUri, getCurrentUri());\r\n this.logger.verbose("Redirecting main window to url specified in the request");\r\n this.logger.verbosePii(`Redirecting main window to: ${absoluteUrl}`);\r\n await this.navigationClient.navigateInternal(absoluteUrl, navigationOptions);\r\n }\r\n else {\r\n this.logger.verbose("No main window navigation requested");\r\n }\r\n }\r\n catch (e) {\r\n // Close the synchronous popup if an error is thrown before the window unload event is registered\r\n popupParams.popup?.close();\r\n if (e instanceof AuthError) {\r\n e.setCorrelationId(this.correlationId);\r\n serverTelemetryManager.cacheFailedRequest(e);\r\n }\r\n this.browserStorage.setInteractionInProgress(false);\r\n this.eventHandler.emitEvent(EventType.LOGOUT_FAILURE, InteractionType.Popup, null, e);\r\n this.eventHandler.emitEvent(EventType.LOGOUT_END, InteractionType.Popup);\r\n throw e;\r\n }\r\n this.eventHandler.emitEvent(EventType.LOGOUT_END, InteractionType.Popup);\r\n }\r\n /**\r\n * Opens a popup window with given request Url.\r\n * @param requestUrl\r\n */\r\n initiateAuthRequest(requestUrl, params) {\r\n // Check that request url is not empty.\r\n if (requestUrl) {\r\n this.logger.infoPii(`Navigate to: ${requestUrl}`);\r\n // Open the popup window to requestUrl.\r\n return this.openPopup(requestUrl, params);\r\n }\r\n else {\r\n // Throw error if request URL is empty.\r\n this.logger.error("Navigate url is empty");\r\n throw createBrowserAuthError(emptyNavigateUri);\r\n }\r\n }\r\n /**\r\n * Monitors a window until it loads a url with the same origin.\r\n * @param popupWindow - window that is being monitored\r\n * @param timeout - timeout for processing hash once popup is redirected back to application\r\n */\r\n monitorPopupForHash(popupWindow, popupWindowParent) {\r\n return new Promise((resolve, reject) => {\r\n this.logger.verbose("PopupHandler.monitorPopupForHash - polling started");\r\n const intervalId = setInterval(() => {\r\n // Window is closed\r\n if (popupWindow.closed) {\r\n this.logger.error("PopupHandler.monitorPopupForHash - window closed");\r\n clearInterval(intervalId);\r\n reject(createBrowserAuthError(userCancelled));\r\n return;\r\n }\r\n let href = "";\r\n try {\r\n /*\r\n * Will throw if cross origin,\r\n * which should be caught and ignored\r\n * since we need the interval to keep running while on STS UI.\r\n */\r\n href = popupWindow.location.href;\r\n }\r\n catch (e) { }\r\n // Don\'t process blank pages or cross domain\r\n if (!href || href === "about:blank") {\r\n return;\r\n }\r\n clearInterval(intervalId);\r\n let responseString = "";\r\n const responseType = this.config.auth.OIDCOptions.serverResponseType;\r\n if (popupWindow) {\r\n if (responseType === ServerResponseType.QUERY) {\r\n responseString = popupWindow.location.search;\r\n }\r\n else {\r\n responseString = popupWindow.location.hash;\r\n }\r\n }\r\n this.logger.verbose("PopupHandler.monitorPopupForHash - popup window is on same origin as caller");\r\n resolve(responseString);\r\n }, this.config.system.pollIntervalMilliseconds);\r\n }).finally(() => {\r\n this.cleanPopup(popupWindow, popupWindowParent);\r\n });\r\n }\r\n /**\r\n * @hidden\r\n *\r\n * Configures popup window for login.\r\n *\r\n * @param urlNavigate\r\n * @param title\r\n * @param popUpWidth\r\n * @param popUpHeight\r\n * @param popupWindowAttributes\r\n * @ignore\r\n * @hidden\r\n */\r\n openPopup(urlNavigate, popupParams) {\r\n try {\r\n let popupWindow;\r\n // Popup window passed in, setting url to navigate to\r\n if (popupParams.popup) {\r\n popupWindow = popupParams.popup;\r\n this.logger.verbosePii(`Navigating popup window to: ${urlNavigate}`);\r\n popupWindow.location.assign(urlNavigate);\r\n }\r\n else if (typeof popupParams.popup === "undefined") {\r\n // Popup will be undefined if it was not passed in\r\n this.logger.verbosePii(`Opening popup window to: ${urlNavigate}`);\r\n popupWindow = this.openSizedPopup(urlNavigate, popupParams);\r\n }\r\n // Popup will be null if popups are blocked\r\n if (!popupWindow) {\r\n throw createBrowserAuthError(emptyWindowError);\r\n }\r\n if (popupWindow.focus) {\r\n popupWindow.focus();\r\n }\r\n this.currentWindow = popupWindow;\r\n popupParams.popupWindowParent.addEventListener("beforeunload", this.unloadWindow);\r\n return popupWindow;\r\n }\r\n catch (e) {\r\n this.logger.error("error opening popup " + e.message);\r\n this.browserStorage.setInteractionInProgress(false);\r\n throw createBrowserAuthError(popupWindowError);\r\n }\r\n }\r\n /**\r\n * Helper function to set popup window dimensions and position\r\n * @param urlNavigate\r\n * @param popupName\r\n * @param popupWindowAttributes\r\n * @returns\r\n */\r\n openSizedPopup(urlNavigate, { popupName, popupWindowAttributes, popupWindowParent }) {\r\n /**\r\n * adding winLeft and winTop to account for dual monitor\r\n * using screenLeft and screenTop for IE8 and earlier\r\n */\r\n const winLeft = popupWindowParent.screenLeft\r\n ? popupWindowParent.screenLeft\r\n : popupWindowParent.screenX;\r\n const winTop = popupWindowParent.screenTop\r\n ? popupWindowParent.screenTop\r\n : popupWindowParent.screenY;\r\n /**\r\n * window.innerWidth displays browser window"s height and width excluding toolbars\r\n * using document.documentElement.clientWidth for IE8 and earlier\r\n */\r\n const winWidth = popupWindowParent.innerWidth ||\r\n document.documentElement.clientWidth ||\r\n document.body.clientWidth;\r\n const winHeight = popupWindowParent.innerHeight ||\r\n document.documentElement.clientHeight ||\r\n document.body.clientHeight;\r\n let width = popupWindowAttributes.popupSize?.width;\r\n let height = popupWindowAttributes.popupSize?.height;\r\n let top = popupWindowAttributes.popupPosition?.top;\r\n let left = popupWindowAttributes.popupPosition?.left;\r\n if (!width || width < 0 || width > winWidth) {\r\n this.logger.verbose("Default popup window width used. Window width not configured or invalid.");\r\n width = BrowserConstants.POPUP_WIDTH;\r\n }\r\n if (!height || height < 0 || height > winHeight) {\r\n this.logger.verbose("Default popup window height used. Window height not configured or invalid.");\r\n height = BrowserConstants.POPUP_HEIGHT;\r\n }\r\n if (!top || top < 0 || top > winHeight) {\r\n this.logger.verbose("Default popup window top position used. Window top not configured or invalid.");\r\n top = Math.max(0, winHeight / 2 - BrowserConstants.POPUP_HEIGHT / 2 + winTop);\r\n }\r\n if (!left || left < 0 || left > winWidth) {\r\n this.logger.verbose("Default popup window left position used. Window left not configured or invalid.");\r\n left = Math.max(0, winWidth / 2 - BrowserConstants.POPUP_WIDTH / 2 + winLeft);\r\n }\r\n return popupWindowParent.open(urlNavigate, popupName, `width=${width}, height=${height}, top=${top}, left=${left}, scrollbars=yes`);\r\n }\r\n /**\r\n * Event callback to unload main window.\r\n */\r\n unloadWindow(e) {\r\n this.browserStorage.cleanRequestByInteractionType(InteractionType.Popup);\r\n if (this.currentWindow) {\r\n this.currentWindow.close();\r\n }\r\n // Guarantees browser unload will happen, so no other errors will be thrown.\r\n e.preventDefault();\r\n }\r\n /**\r\n * Closes popup, removes any state vars created during popup calls.\r\n * @param popupWindow\r\n */\r\n cleanPopup(popupWindow, popupWindowParent) {\r\n // Close window.\r\n popupWindow.close();\r\n // Remove window unload function\r\n popupWindowParent.removeEventListener("beforeunload", this.unloadWindow);\r\n // Interaction is completed - remove interaction status.\r\n this.browserStorage.setInteractionInProgress(false);\r\n }\r\n /**\r\n * Generates the name for the popup based on the client id and request\r\n * @param clientId\r\n * @param request\r\n */\r\n generatePopupName(scopes, authority) {\r\n return `${BrowserConstants.POPUP_NAME_PREFIX}.${this.config.auth.clientId}.${scopes.join("-")}.${authority}.${this.correlationId}`;\r\n }\r\n /**\r\n * Generates the name for the popup based on the client id and request for logouts\r\n * @param clientId\r\n * @param request\r\n */\r\n generateLogoutPopupName(request) {\r\n const homeAccountId = request.account && request.account.homeAccountId;\r\n return `${BrowserConstants.POPUP_NAME_PREFIX}.${this.config.auth.clientId}.${homeAccountId}.${this.correlationId}`;\r\n }\r\n}\n\n\n//# sourceMappingURL=PopupClient.mjs.map\n\n;// ./node_modules/@azure/msal-browser/dist/interaction_handler/RedirectHandler.mjs\n/*! @azure/msal-browser v3.28.1 2025-01-14 */\n\n\n\n\n\n\n/*\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License.\r\n */\r\nclass RedirectHandler {\r\n constructor(authCodeModule, storageImpl, authCodeRequest, logger, performanceClient) {\r\n this.authModule = authCodeModule;\r\n this.browserStorage = storageImpl;\r\n this.authCodeRequest = authCodeRequest;\r\n this.logger = logger;\r\n this.performanceClient = performanceClient;\r\n }\r\n /**\r\n * Redirects window to given URL.\r\n * @param urlNavigate\r\n */\r\n async initiateAuthRequest(requestUrl, params) {\r\n this.logger.verbose("RedirectHandler.initiateAuthRequest called");\r\n // Navigate if valid URL\r\n if (requestUrl) {\r\n // Cache start page, returns to this page after redirectUri if navigateToLoginRequestUrl is true\r\n if (params.redirectStartPage) {\r\n this.logger.verbose("RedirectHandler.initiateAuthRequest: redirectStartPage set, caching start page");\r\n this.browserStorage.setTemporaryCache(TemporaryCacheKeys.ORIGIN_URI, params.redirectStartPage, true);\r\n }\r\n // Set interaction status in the library.\r\n this.browserStorage.setTemporaryCache(TemporaryCacheKeys.CORRELATION_ID, this.authCodeRequest.correlationId, true);\r\n this.browserStorage.cacheCodeRequest(this.authCodeRequest);\r\n this.logger.infoPii(`RedirectHandler.initiateAuthRequest: Navigate to: ${requestUrl}`);\r\n const navigationOptions = {\r\n apiId: ApiId.acquireTokenRedirect,\r\n timeout: params.redirectTimeout,\r\n noHistory: false,\r\n };\r\n // If onRedirectNavigate is implemented, invoke it and provide requestUrl\r\n if (typeof params.onRedirectNavigate === "function") {\r\n this.logger.verbose("RedirectHandler.initiateAuthRequest: Invoking onRedirectNavigate callback");\r\n const navigate = params.onRedirectNavigate(requestUrl);\r\n // Returning false from onRedirectNavigate will stop navigation\r\n if (navigate !== false) {\r\n this.logger.verbose("RedirectHandler.initiateAuthRequest: onRedirectNavigate did not return false, navigating");\r\n await params.navigationClient.navigateExternal(requestUrl, navigationOptions);\r\n return;\r\n }\r\n else {\r\n this.logger.verbose("RedirectHandler.initiateAuthRequest: onRedirectNavigate returned false, stopping navigation");\r\n return;\r\n }\r\n }\r\n else {\r\n // Navigate window to request URL\r\n this.logger.verbose("RedirectHandler.initiateAuthRequest: Navigating window to navigate url");\r\n await params.navigationClient.navigateExternal(requestUrl, navigationOptions);\r\n return;\r\n }\r\n }\r\n else {\r\n // Throw error if request URL is empty.\r\n this.logger.info("RedirectHandler.initiateAuthRequest: Navigate url is empty");\r\n throw createBrowserAuthError(emptyNavigateUri);\r\n }\r\n }\r\n /**\r\n * Handle authorization code response in the window.\r\n * @param hash\r\n */\r\n async handleCodeResponse(response, state) {\r\n this.logger.verbose("RedirectHandler.handleCodeResponse called");\r\n // Interaction is completed - remove interaction status.\r\n this.browserStorage.setInteractionInProgress(false);\r\n // Handle code response.\r\n const stateKey = this.browserStorage.generateStateKey(state);\r\n const requestState = this.browserStorage.getTemporaryCache(stateKey);\r\n if (!requestState) {\r\n throw createClientAuthError(stateNotFound, "Cached State");\r\n }\r\n let authCodeResponse;\r\n try {\r\n authCodeResponse = this.authModule.handleFragmentResponse(response, requestState);\r\n }\r\n catch (e) {\r\n if (e instanceof ServerError &&\r\n e.subError === userCancelled) {\r\n // Translate server error caused by user closing native prompt to corresponding first class MSAL error\r\n throw createBrowserAuthError(userCancelled);\r\n }\r\n else {\r\n throw e;\r\n }\r\n }\r\n // Get cached items\r\n const nonceKey = this.browserStorage.generateNonceKey(requestState);\r\n const cachedNonce = this.browserStorage.getTemporaryCache(nonceKey);\r\n // Assign code to request\r\n this.authCodeRequest.code = authCodeResponse.code;\r\n // Check for new cloud instance\r\n if (authCodeResponse.cloud_instance_host_name) {\r\n await invokeAsync(this.authModule.updateAuthority.bind(this.authModule), PerformanceEvents.UpdateTokenEndpointAuthority, this.logger, this.performanceClient, this.authCodeRequest.correlationId)(authCodeResponse.cloud_instance_host_name, this.authCodeRequest.correlationId);\r\n }\r\n authCodeResponse.nonce = cachedNonce || undefined;\r\n authCodeResponse.state = requestState;\r\n // Add CCS parameters if available\r\n if (authCodeResponse.client_info) {\r\n this.authCodeRequest.clientInfo = authCodeResponse.client_info;\r\n }\r\n else {\r\n const cachedCcsCred = this.checkCcsCredentials();\r\n if (cachedCcsCred) {\r\n this.authCodeRequest.ccsCredential = cachedCcsCred;\r\n }\r\n }\r\n // Acquire token with retrieved code.\r\n const tokenResponse = (await this.authModule.acquireToken(this.authCodeRequest, authCodeResponse));\r\n this.browserStorage.cleanRequestByState(state);\r\n return tokenResponse;\r\n }\r\n /**\r\n * Looks up ccs creds in the cache\r\n */\r\n checkCcsCredentials() {\r\n // Look up ccs credential in temp cache\r\n const cachedCcsCred = this.browserStorage.getTemporaryCache(TemporaryCacheKeys.CCS_CREDENTIAL, true);\r\n if (cachedCcsCred) {\r\n try {\r\n return JSON.parse(cachedCcsCred);\r\n }\r\n catch (e) {\r\n this.authModule.logger.error("Cache credential could not be parsed");\r\n this.authModule.logger.errorPii(`Cache credential could not be parsed: ${cachedCcsCred}`);\r\n }\r\n }\r\n return null;\r\n }\r\n}\n\n\n//# sourceMappingURL=RedirectHandler.mjs.map\n\n;// ./node_modules/@azure/msal-browser/dist/interaction_client/RedirectClient.mjs\n/*! @azure/msal-browser v3.28.1 2025-01-14 */\n\n\n\n\n\n\n\n\n\n\n\n\n\n/*\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License.\r\n */\r\nfunction getNavigationType() {\r\n if (typeof window === "undefined" ||\r\n typeof window.performance === "undefined" ||\r\n typeof window.performance.getEntriesByType !== "function") {\r\n return undefined;\r\n }\r\n const navigationEntries = window.performance.getEntriesByType("navigation");\r\n const navigation = navigationEntries.length\r\n ? navigationEntries[0]\r\n : undefined;\r\n return navigation?.type;\r\n}\r\nclass RedirectClient extends StandardInteractionClient {\r\n constructor(config, storageImpl, browserCrypto, logger, eventHandler, navigationClient, performanceClient, nativeStorageImpl, nativeMessageHandler, correlationId) {\r\n super(config, storageImpl, browserCrypto, logger, eventHandler, navigationClient, performanceClient, nativeMessageHandler, correlationId);\r\n this.nativeStorage = nativeStorageImpl;\r\n }\r\n /**\r\n * Redirects the page to the /authorize endpoint of the IDP\r\n * @param request\r\n */\r\n async acquireToken(request) {\r\n const validRequest = await invokeAsync(this.initializeAuthorizationRequest.bind(this), PerformanceEvents.StandardInteractionClientInitializeAuthorizationRequest, this.logger, this.performanceClient, this.correlationId)(request, InteractionType.Redirect);\r\n this.browserStorage.updateCacheEntries(validRequest.state, validRequest.nonce, validRequest.authority, validRequest.loginHint || "", validRequest.account || null);\r\n const serverTelemetryManager = this.initializeServerTelemetryManager(ApiId.acquireTokenRedirect);\r\n const handleBackButton = (event) => {\r\n // Clear temporary cache if the back button is clicked during the redirect flow.\r\n if (event.persisted) {\r\n this.logger.verbose("Page was restored from back/forward cache. Clearing temporary cache.");\r\n this.browserStorage.cleanRequestByState(validRequest.state);\r\n this.eventHandler.emitEvent(EventType.RESTORE_FROM_BFCACHE, InteractionType.Redirect);\r\n }\r\n };\r\n try {\r\n // Create auth code request and generate PKCE params\r\n const authCodeRequest = await invokeAsync(this.initializeAuthorizationCodeRequest.bind(this), PerformanceEvents.StandardInteractionClientInitializeAuthorizationCodeRequest, this.logger, this.performanceClient, this.correlationId)(validRequest);\r\n // Initialize the client\r\n const authClient = await invokeAsync(this.createAuthCodeClient.bind(this), PerformanceEvents.StandardInteractionClientCreateAuthCodeClient, this.logger, this.performanceClient, this.correlationId)({\r\n serverTelemetryManager,\r\n requestAuthority: validRequest.authority,\r\n requestAzureCloudOptions: validRequest.azureCloudOptions,\r\n requestExtraQueryParameters: validRequest.extraQueryParameters,\r\n account: validRequest.account,\r\n });\r\n // Create redirect interaction handler.\r\n const interactionHandler = new RedirectHandler(authClient, this.browserStorage, authCodeRequest, this.logger, this.performanceClient);\r\n // Create acquire token url.\r\n const navigateUrl = await authClient.getAuthCodeUrl({\r\n ...validRequest,\r\n nativeBroker: NativeMessageHandler.isNativeAvailable(this.config, this.logger, this.nativeMessageHandler, request.authenticationScheme),\r\n });\r\n const redirectStartPage = this.getRedirectStartPage(request.redirectStartPage);\r\n this.logger.verbosePii(`Redirect start page: ${redirectStartPage}`);\r\n // Clear temporary cache if the back button is clicked during the redirect flow.\r\n window.addEventListener("pageshow", handleBackButton);\r\n // Show the UI once the url has been created. Response will come back in the hash, which will be handled in the handleRedirectCallback function.\r\n return await interactionHandler.initiateAuthRequest(navigateUrl, {\r\n navigationClient: this.navigationClient,\r\n redirectTimeout: this.config.system.redirectNavigationTimeout,\r\n redirectStartPage: redirectStartPage,\r\n onRedirectNavigate: request.onRedirectNavigate ||\r\n this.config.auth.onRedirectNavigate,\r\n });\r\n }\r\n catch (e) {\r\n if (e instanceof AuthError) {\r\n e.setCorrelationId(this.correlationId);\r\n serverTelemetryManager.cacheFailedRequest(e);\r\n }\r\n window.removeEventListener("pageshow", handleBackButton);\r\n this.browserStorage.cleanRequestByState(validRequest.state);\r\n throw e;\r\n }\r\n }\r\n /**\r\n * Checks if navigateToLoginRequestUrl is set, and:\r\n * - if true, performs logic to cache and navigate\r\n * - if false, handles hash string and parses response\r\n * @param hash {string} url hash\r\n * @param parentMeasurement {InProgressPerformanceEvent} parent measurement\r\n */\r\n async handleRedirectPromise(hash = "", parentMeasurement) {\r\n const serverTelemetryManager = this.initializeServerTelemetryManager(ApiId.handleRedirectPromise);\r\n try {\r\n if (!this.browserStorage.isInteractionInProgress(true)) {\r\n this.logger.info("handleRedirectPromise called but there is no interaction in progress, returning null.");\r\n return null;\r\n }\r\n const [serverParams, responseString] = this.getRedirectResponse(hash || "");\r\n if (!serverParams) {\r\n // Not a recognized server response hash or hash not associated with a redirect request\r\n this.logger.info("handleRedirectPromise did not detect a response as a result of a redirect. Cleaning temporary cache.");\r\n this.browserStorage.cleanRequestByInteractionType(InteractionType.Redirect);\r\n // Do not instrument "no_server_response" if user clicked back button\r\n if (getNavigationType() !== "back_forward") {\r\n parentMeasurement.event.errorCode = "no_server_response";\r\n }\r\n else {\r\n this.logger.verbose("Back navigation event detected. Muting no_server_response error");\r\n }\r\n return null;\r\n }\r\n // If navigateToLoginRequestUrl is true, get the url where the redirect request was initiated\r\n const loginRequestUrl = this.browserStorage.getTemporaryCache(TemporaryCacheKeys.ORIGIN_URI, true) || Constants.EMPTY_STRING;\r\n const loginRequestUrlNormalized = UrlString.removeHashFromUrl(loginRequestUrl);\r\n const currentUrlNormalized = UrlString.removeHashFromUrl(window.location.href);\r\n if (loginRequestUrlNormalized === currentUrlNormalized &&\r\n this.config.auth.navigateToLoginRequestUrl) {\r\n // We are on the page we need to navigate to - handle hash\r\n this.logger.verbose("Current page is loginRequestUrl, handling response");\r\n if (loginRequestUrl.indexOf("#") > -1) {\r\n // Replace current hash with non-msal hash, if present\r\n replaceHash(loginRequestUrl);\r\n }\r\n const handleHashResult = await this.handleResponse(serverParams, serverTelemetryManager);\r\n return handleHashResult;\r\n }\r\n else if (!this.config.auth.navigateToLoginRequestUrl) {\r\n this.logger.verbose("NavigateToLoginRequestUrl set to false, handling response");\r\n return await this.handleResponse(serverParams, serverTelemetryManager);\r\n }\r\n else if (!isInIframe() ||\r\n this.config.system.allowRedirectInIframe) {\r\n /*\r\n * Returned from authority using redirect - need to perform navigation before processing response\r\n * Cache the hash to be retrieved after the next redirect\r\n */\r\n this.browserStorage.setTemporaryCache(TemporaryCacheKeys.URL_HASH, responseString, true);\r\n const navigationOptions = {\r\n apiId: ApiId.handleRedirectPromise,\r\n timeout: this.config.system.redirectNavigationTimeout,\r\n noHistory: true,\r\n };\r\n /**\r\n * Default behavior is to redirect to the start page and not process the hash now.\r\n * The start page is expected to also call handleRedirectPromise which will process the hash in one of the checks above.\r\n */\r\n let processHashOnRedirect = true;\r\n if (!loginRequestUrl || loginRequestUrl === "null") {\r\n // Redirect to home page if login request url is null (real null or the string null)\r\n const homepage = getHomepage();\r\n // Cache the homepage under ORIGIN_URI to ensure cached hash is processed on homepage\r\n this.browserStorage.setTemporaryCache(TemporaryCacheKeys.ORIGIN_URI, homepage, true);\r\n this.logger.warning("Unable to get valid login request url from cache, redirecting to home page");\r\n processHashOnRedirect =\r\n await this.navigationClient.navigateInternal(homepage, navigationOptions);\r\n }\r\n else {\r\n // Navigate to page that initiated the redirect request\r\n this.logger.verbose(`Navigating to loginRequestUrl: ${loginRequestUrl}`);\r\n processHashOnRedirect =\r\n await this.navigationClient.navigateInternal(loginRequestUrl, navigationOptions);\r\n }\r\n // If navigateInternal implementation returns false, handle the hash now\r\n if (!processHashOnRedirect) {\r\n return await this.handleResponse(serverParams, serverTelemetryManager);\r\n }\r\n }\r\n return null;\r\n }\r\n catch (e) {\r\n if (e instanceof AuthError) {\r\n e.setCorrelationId(this.correlationId);\r\n serverTelemetryManager.cacheFailedRequest(e);\r\n }\r\n this.browserStorage.cleanRequestByInteractionType(InteractionType.Redirect);\r\n throw e;\r\n }\r\n }\r\n /**\r\n * Gets the response hash for a redirect request\r\n * Returns null if interactionType in the state value is not "redirect" or the hash does not contain known properties\r\n * @param hash\r\n */\r\n getRedirectResponse(userProvidedResponse) {\r\n this.logger.verbose("getRedirectResponseHash called");\r\n // Get current location hash from window or cache.\r\n let responseString = userProvidedResponse;\r\n if (!responseString) {\r\n if (this.config.auth.OIDCOptions.serverResponseType ===\r\n ServerResponseType.QUERY) {\r\n responseString = window.location.search;\r\n }\r\n else {\r\n responseString = window.location.hash;\r\n }\r\n }\r\n let response = getDeserializedResponse(responseString);\r\n if (response) {\r\n try {\r\n validateInteractionType(response, this.browserCrypto, InteractionType.Redirect);\r\n }\r\n catch (e) {\r\n if (e instanceof AuthError) {\r\n this.logger.error(`Interaction type validation failed due to ${e.errorCode}: ${e.errorMessage}`);\r\n }\r\n return [null, ""];\r\n }\r\n clearHash(window);\r\n this.logger.verbose("Hash contains known properties, returning response hash");\r\n return [response, responseString];\r\n }\r\n const cachedHash = this.browserStorage.getTemporaryCache(TemporaryCacheKeys.URL_HASH, true);\r\n this.browserStorage.removeItem(this.browserStorage.generateCacheKey(TemporaryCacheKeys.URL_HASH));\r\n if (cachedHash) {\r\n response = getDeserializedResponse(cachedHash);\r\n if (response) {\r\n this.logger.verbose("Hash does not contain known properties, returning cached hash");\r\n return [response, cachedHash];\r\n }\r\n }\r\n return [null, ""];\r\n }\r\n /**\r\n * Checks if hash exists and handles in window.\r\n * @param hash\r\n * @param state\r\n */\r\n async handleResponse(serverParams, serverTelemetryManager) {\r\n const state = serverParams.state;\r\n if (!state) {\r\n throw createBrowserAuthError(noStateInHash);\r\n }\r\n const cachedRequest = this.browserStorage.getCachedRequest(state);\r\n this.logger.verbose("handleResponse called, retrieved cached request");\r\n if (serverParams.accountId) {\r\n this.logger.verbose("Account id found in hash, calling WAM for token");\r\n if (!this.nativeMessageHandler) {\r\n throw createBrowserAuthError(nativeConnectionNotEstablished);\r\n }\r\n const nativeInteractionClient = new NativeInteractionClient(this.config, this.browserStorage, this.browserCrypto, this.logger, this.eventHandler, this.navigationClient, ApiId.acquireTokenPopup, this.performanceClient, this.nativeMessageHandler, serverParams.accountId, this.nativeStorage, cachedRequest.correlationId);\r\n const { userRequestState } = ProtocolUtils.parseRequestState(this.browserCrypto, state);\r\n return nativeInteractionClient\r\n .acquireToken({\r\n ...cachedRequest,\r\n state: userRequestState,\r\n prompt: undefined, // Server should handle the prompt, ideally native broker can do this part silently\r\n })\r\n .finally(() => {\r\n this.browserStorage.cleanRequestByState(state);\r\n });\r\n }\r\n // Hash contains known properties - handle and return in callback\r\n const currentAuthority = this.browserStorage.getCachedAuthority(state);\r\n if (!currentAuthority) {\r\n throw createBrowserAuthError(noCachedAuthorityError);\r\n }\r\n const authClient = await invokeAsync(this.createAuthCodeClient.bind(this), PerformanceEvents.StandardInteractionClientCreateAuthCodeClient, this.logger, this.performanceClient, this.correlationId)({ serverTelemetryManager, requestAuthority: currentAuthority });\r\n ThrottlingUtils.removeThrottle(this.browserStorage, this.config.auth.clientId, cachedRequest);\r\n const interactionHandler = new RedirectHandler(authClient, this.browserStorage, cachedRequest, this.logger, this.performanceClient);\r\n return interactionHandler.handleCodeResponse(serverParams, state);\r\n }\r\n /**\r\n * Use to log out the current user, and redirect the user to the postLogoutRedirectUri.\r\n * Default behaviour is to redirect the user to `window.location.href`.\r\n * @param logoutRequest\r\n */\r\n async logout(logoutRequest) {\r\n this.logger.verbose("logoutRedirect called");\r\n const validLogoutRequest = this.initializeLogoutRequest(logoutRequest);\r\n const serverTelemetryManager = this.initializeServerTelemetryManager(ApiId.logout);\r\n try {\r\n this.eventHandler.emitEvent(EventType.LOGOUT_START, InteractionType.Redirect, logoutRequest);\r\n // Clear cache on logout\r\n await this.clearCacheOnLogout(validLogoutRequest.account);\r\n const navigationOptions = {\r\n apiId: ApiId.logout,\r\n timeout: this.config.system.redirectNavigationTimeout,\r\n noHistory: false,\r\n };\r\n const authClient = await invokeAsync(this.createAuthCodeClient.bind(this), PerformanceEvents.StandardInteractionClientCreateAuthCodeClient, this.logger, this.performanceClient, this.correlationId)({\r\n serverTelemetryManager,\r\n requestAuthority: logoutRequest && logoutRequest.authority,\r\n requestExtraQueryParameters: logoutRequest?.extraQueryParameters,\r\n account: (logoutRequest && logoutRequest.account) || undefined,\r\n });\r\n if (authClient.authority.protocolMode === ProtocolMode.OIDC) {\r\n try {\r\n authClient.authority.endSessionEndpoint;\r\n }\r\n catch {\r\n if (validLogoutRequest.account?.homeAccountId) {\r\n void this.browserStorage.removeAccount(validLogoutRequest.account?.homeAccountId);\r\n this.eventHandler.emitEvent(EventType.LOGOUT_SUCCESS, InteractionType.Redirect, validLogoutRequest);\r\n return;\r\n }\r\n }\r\n }\r\n // Create logout string and navigate user window to logout.\r\n const logoutUri = authClient.getLogoutUri(validLogoutRequest);\r\n this.eventHandler.emitEvent(EventType.LOGOUT_SUCCESS, InteractionType.Redirect, validLogoutRequest);\r\n // Check if onRedirectNavigate is implemented, and invoke it if so\r\n if (logoutRequest &&\r\n typeof logoutRequest.onRedirectNavigate === "function") {\r\n const navigate = logoutRequest.onRedirectNavigate(logoutUri);\r\n if (navigate !== false) {\r\n this.logger.verbose("Logout onRedirectNavigate did not return false, navigating");\r\n // Ensure interaction is in progress\r\n if (!this.browserStorage.getInteractionInProgress()) {\r\n this.browserStorage.setInteractionInProgress(true);\r\n }\r\n await this.navigationClient.navigateExternal(logoutUri, navigationOptions);\r\n return;\r\n }\r\n else {\r\n // Ensure interaction is not in progress\r\n this.browserStorage.setInteractionInProgress(false);\r\n this.logger.verbose("Logout onRedirectNavigate returned false, stopping navigation");\r\n }\r\n }\r\n else {\r\n // Ensure interaction is in progress\r\n if (!this.browserStorage.getInteractionInProgress()) {\r\n this.browserStorage.setInteractionInProgress(true);\r\n }\r\n await this.navigationClient.navigateExternal(logoutUri, navigationOptions);\r\n return;\r\n }\r\n }\r\n catch (e) {\r\n if (e instanceof AuthError) {\r\n e.setCorrelationId(this.correlationId);\r\n serverTelemetryManager.cacheFailedRequest(e);\r\n }\r\n this.eventHandler.emitEvent(EventType.LOGOUT_FAILURE, InteractionType.Redirect, null, e);\r\n this.eventHandler.emitEvent(EventType.LOGOUT_END, InteractionType.Redirect);\r\n throw e;\r\n }\r\n this.eventHandler.emitEvent(EventType.LOGOUT_END, InteractionType.Redirect);\r\n }\r\n /**\r\n * Use to get the redirectStartPage either from request or use current window\r\n * @param requestStartPage\r\n */\r\n getRedirectStartPage(requestStartPage) {\r\n const redirectStartPage = requestStartPage || window.location.href;\r\n return UrlString.getAbsoluteUrl(redirectStartPage, getCurrentUri());\r\n }\r\n}\n\n\n//# sourceMappingURL=RedirectClient.mjs.map\n\n;// ./node_modules/@azure/msal-browser/dist/interaction_handler/SilentHandler.mjs\n/*! @azure/msal-browser v3.28.1 2025-01-14 */\n\n\n\n\n\n\n/*\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License.\r\n */\r\n/**\r\n * Creates a hidden iframe to given URL using user-requested scopes as an id.\r\n * @param urlNavigate\r\n * @param userRequestScopes\r\n */\r\nasync function initiateAuthRequest(requestUrl, performanceClient, logger, correlationId, navigateFrameWait) {\r\n performanceClient.addQueueMeasurement(PerformanceEvents.SilentHandlerInitiateAuthRequest, correlationId);\r\n if (!requestUrl) {\r\n // Throw error if request URL is empty.\r\n logger.info("Navigate url is empty");\r\n throw createBrowserAuthError(emptyNavigateUri);\r\n }\r\n if (navigateFrameWait) {\r\n return invokeAsync(loadFrame, PerformanceEvents.SilentHandlerLoadFrame, logger, performanceClient, correlationId)(requestUrl, navigateFrameWait, performanceClient, correlationId);\r\n }\r\n return invoke(loadFrameSync, PerformanceEvents.SilentHandlerLoadFrameSync, logger, performanceClient, correlationId)(requestUrl);\r\n}\r\n/**\r\n * Monitors an iframe content window until it loads a url with a known hash, or hits a specified timeout.\r\n * @param iframe\r\n * @param timeout\r\n */\r\nasync function monitorIframeForHash(iframe, timeout, pollIntervalMilliseconds, performanceClient, logger, correlationId, responseType) {\r\n performanceClient.addQueueMeasurement(PerformanceEvents.SilentHandlerMonitorIframeForHash, correlationId);\r\n return new Promise((resolve, reject) => {\r\n if (timeout < DEFAULT_IFRAME_TIMEOUT_MS) {\r\n logger.warning(`system.loadFrameTimeout or system.iframeHashTimeout set to lower (${timeout}ms) than the default (${DEFAULT_IFRAME_TIMEOUT_MS}ms). This may result in timeouts.`);\r\n }\r\n /*\r\n * Polling for iframes can be purely timing based,\r\n * since we don\'t need to account for interaction.\r\n */\r\n const timeoutId = window.setTimeout(() => {\r\n window.clearInterval(intervalId);\r\n reject(createBrowserAuthError(monitorWindowTimeout));\r\n }, timeout);\r\n const intervalId = window.setInterval(() => {\r\n let href = "";\r\n const contentWindow = iframe.contentWindow;\r\n try {\r\n /*\r\n * Will throw if cross origin,\r\n * which should be caught and ignored\r\n * since we need the interval to keep running while on STS UI.\r\n */\r\n href = contentWindow ? contentWindow.location.href : "";\r\n }\r\n catch (e) { }\r\n if (!href || href === "about:blank") {\r\n return;\r\n }\r\n let responseString = "";\r\n if (contentWindow) {\r\n if (responseType === ServerResponseType.QUERY) {\r\n responseString = contentWindow.location.search;\r\n }\r\n else {\r\n responseString = contentWindow.location.hash;\r\n }\r\n }\r\n window.clearTimeout(timeoutId);\r\n window.clearInterval(intervalId);\r\n resolve(responseString);\r\n }, pollIntervalMilliseconds);\r\n }).finally(() => {\r\n invoke(removeHiddenIframe, PerformanceEvents.RemoveHiddenIframe, logger, performanceClient, correlationId)(iframe);\r\n });\r\n}\r\n/**\r\n * @hidden\r\n * Loads iframe with authorization endpoint URL\r\n * @ignore\r\n * @deprecated\r\n */\r\nfunction loadFrame(urlNavigate, navigateFrameWait, performanceClient, correlationId) {\r\n performanceClient.addQueueMeasurement(PerformanceEvents.SilentHandlerLoadFrame, correlationId);\r\n /*\r\n * This trick overcomes iframe navigation in IE\r\n * IE does not load the page consistently in iframe\r\n */\r\n return new Promise((resolve, reject) => {\r\n const frameHandle = createHiddenIframe();\r\n window.setTimeout(() => {\r\n if (!frameHandle) {\r\n reject("Unable to load iframe");\r\n return;\r\n }\r\n frameHandle.src = urlNavigate;\r\n resolve(frameHandle);\r\n }, navigateFrameWait);\r\n });\r\n}\r\n/**\r\n * @hidden\r\n * Loads the iframe synchronously when the navigateTimeFrame is set to `0`\r\n * @param urlNavigate\r\n * @param frameName\r\n * @param logger\r\n */\r\nfunction loadFrameSync(urlNavigate) {\r\n const frameHandle = createHiddenIframe();\r\n frameHandle.src = urlNavigate;\r\n return frameHandle;\r\n}\r\n/**\r\n * @hidden\r\n * Creates a new hidden iframe or gets an existing one for silent token renewal.\r\n * @ignore\r\n */\r\nfunction createHiddenIframe() {\r\n const authFrame = document.createElement("iframe");\r\n authFrame.className = "msalSilentIframe";\r\n authFrame.style.visibility = "hidden";\r\n authFrame.style.position = "absolute";\r\n authFrame.style.width = authFrame.style.height = "0";\r\n authFrame.style.border = "0";\r\n authFrame.setAttribute("sandbox", "allow-scripts allow-same-origin allow-forms");\r\n document.body.appendChild(authFrame);\r\n return authFrame;\r\n}\r\n/**\r\n * @hidden\r\n * Removes a hidden iframe from the page.\r\n * @ignore\r\n */\r\nfunction removeHiddenIframe(iframe) {\r\n if (document.body === iframe.parentNode) {\r\n document.body.removeChild(iframe);\r\n }\r\n}\n\n\n//# sourceMappingURL=SilentHandler.mjs.map\n\n;// ./node_modules/@azure/msal-browser/dist/interaction_client/SilentIframeClient.mjs\n/*! @azure/msal-browser v3.28.1 2025-01-14 */\n\n\n\n\n\n\n\n\n\n\n\n\n\n/*\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License.\r\n */\r\nclass SilentIframeClient extends StandardInteractionClient {\r\n constructor(config, storageImpl, browserCrypto, logger, eventHandler, navigationClient, apiId, performanceClient, nativeStorageImpl, nativeMessageHandler, correlationId) {\r\n super(config, storageImpl, browserCrypto, logger, eventHandler, navigationClient, performanceClient, nativeMessageHandler, correlationId);\r\n this.apiId = apiId;\r\n this.nativeStorage = nativeStorageImpl;\r\n }\r\n /**\r\n * Acquires a token silently by opening a hidden iframe to the /authorize endpoint with prompt=none or prompt=no_session\r\n * @param request\r\n */\r\n async acquireToken(request) {\r\n this.performanceClient.addQueueMeasurement(PerformanceEvents.SilentIframeClientAcquireToken, request.correlationId);\r\n // Check that we have some SSO data\r\n if (!request.loginHint &&\r\n !request.sid &&\r\n (!request.account || !request.account.username)) {\r\n this.logger.warning("No user hint provided. The authorization server may need more information to complete this request.");\r\n }\r\n // Check the prompt value\r\n const inputRequest = { ...request };\r\n if (inputRequest.prompt) {\r\n if (inputRequest.prompt !== PromptValue.NONE &&\r\n inputRequest.prompt !== PromptValue.NO_SESSION) {\r\n this.logger.warning(`SilentIframeClient. Replacing invalid prompt ${inputRequest.prompt} with ${PromptValue.NONE}`);\r\n inputRequest.prompt = PromptValue.NONE;\r\n }\r\n }\r\n else {\r\n inputRequest.prompt = PromptValue.NONE;\r\n }\r\n // Create silent request\r\n const silentRequest = await invokeAsync(this.initializeAuthorizationRequest.bind(this), PerformanceEvents.StandardInteractionClientInitializeAuthorizationRequest, this.logger, this.performanceClient, request.correlationId)(inputRequest, InteractionType.Silent);\r\n preconnect(silentRequest.authority);\r\n const serverTelemetryManager = this.initializeServerTelemetryManager(this.apiId);\r\n let authClient;\r\n try {\r\n // Initialize the client\r\n authClient = await invokeAsync(this.createAuthCodeClient.bind(this), PerformanceEvents.StandardInteractionClientCreateAuthCodeClient, this.logger, this.performanceClient, request.correlationId)({\r\n serverTelemetryManager,\r\n requestAuthority: silentRequest.authority,\r\n requestAzureCloudOptions: silentRequest.azureCloudOptions,\r\n requestExtraQueryParameters: silentRequest.extraQueryParameters,\r\n account: silentRequest.account,\r\n });\r\n return await invokeAsync(this.silentTokenHelper.bind(this), PerformanceEvents.SilentIframeClientTokenHelper, this.logger, this.performanceClient, request.correlationId)(authClient, silentRequest);\r\n }\r\n catch (e) {\r\n if (e instanceof AuthError) {\r\n e.setCorrelationId(this.correlationId);\r\n serverTelemetryManager.cacheFailedRequest(e);\r\n }\r\n if (!authClient ||\r\n !(e instanceof AuthError) ||\r\n e.errorCode !== BrowserConstants.INVALID_GRANT_ERROR) {\r\n throw e;\r\n }\r\n this.performanceClient.addFields({\r\n retryError: e.errorCode,\r\n }, this.correlationId);\r\n const retrySilentRequest = await invokeAsync(this.initializeAuthorizationRequest.bind(this), PerformanceEvents.StandardInteractionClientInitializeAuthorizationRequest, this.logger, this.performanceClient, request.correlationId)(inputRequest, InteractionType.Silent);\r\n return await invokeAsync(this.silentTokenHelper.bind(this), PerformanceEvents.SilentIframeClientTokenHelper, this.logger, this.performanceClient, this.correlationId)(authClient, retrySilentRequest);\r\n }\r\n }\r\n /**\r\n * Currently Unsupported\r\n */\r\n logout() {\r\n // Synchronous so we must reject\r\n return Promise.reject(createBrowserAuthError(silentLogoutUnsupported));\r\n }\r\n /**\r\n * Helper which acquires an authorization code silently using a hidden iframe from given url\r\n * using the scopes requested as part of the id, and exchanges the code for a set of OAuth tokens.\r\n * @param navigateUrl\r\n * @param userRequestScopes\r\n */\r\n async silentTokenHelper(authClient, silentRequest) {\r\n const correlationId = silentRequest.correlationId;\r\n this.performanceClient.addQueueMeasurement(PerformanceEvents.SilentIframeClientTokenHelper, correlationId);\r\n // Create auth code request and generate PKCE params\r\n const authCodeRequest = await invokeAsync(this.initializeAuthorizationCodeRequest.bind(this), PerformanceEvents.StandardInteractionClientInitializeAuthorizationCodeRequest, this.logger, this.performanceClient, correlationId)(silentRequest);\r\n // Create authorize request url\r\n const navigateUrl = await invokeAsync(authClient.getAuthCodeUrl.bind(authClient), PerformanceEvents.GetAuthCodeUrl, this.logger, this.performanceClient, correlationId)({\r\n ...silentRequest,\r\n nativeBroker: NativeMessageHandler.isNativeAvailable(this.config, this.logger, this.nativeMessageHandler, silentRequest.authenticationScheme),\r\n });\r\n // Create silent handler\r\n const interactionHandler = new InteractionHandler(authClient, this.browserStorage, authCodeRequest, this.logger, this.performanceClient);\r\n // Get the frame handle for the silent request\r\n const msalFrame = await invokeAsync(initiateAuthRequest, PerformanceEvents.SilentHandlerInitiateAuthRequest, this.logger, this.performanceClient, correlationId)(navigateUrl, this.performanceClient, this.logger, correlationId, this.config.system.navigateFrameWait);\r\n const responseType = this.config.auth.OIDCOptions.serverResponseType;\r\n // Monitor the window for the hash. Return the string value and close the popup when the hash is received. Default timeout is 60 seconds.\r\n const responseString = await invokeAsync(monitorIframeForHash, PerformanceEvents.SilentHandlerMonitorIframeForHash, this.logger, this.performanceClient, correlationId)(msalFrame, this.config.system.iframeHashTimeout, this.config.system.pollIntervalMilliseconds, this.performanceClient, this.logger, correlationId, responseType);\r\n const serverParams = invoke(deserializeResponse, PerformanceEvents.DeserializeResponse, this.logger, this.performanceClient, this.correlationId)(responseString, responseType, this.logger);\r\n if (serverParams.accountId) {\r\n this.logger.verbose("Account id found in hash, calling WAM for token");\r\n if (!this.nativeMessageHandler) {\r\n throw createBrowserAuthError(nativeConnectionNotEstablished);\r\n }\r\n const nativeInteractionClient = new NativeInteractionClient(this.config, this.browserStorage, this.browserCrypto, this.logger, this.eventHandler, this.navigationClient, this.apiId, this.performanceClient, this.nativeMessageHandler, serverParams.accountId, this.browserStorage, correlationId);\r\n const { userRequestState } = ProtocolUtils.parseRequestState(this.browserCrypto, silentRequest.state);\r\n return invokeAsync(nativeInteractionClient.acquireToken.bind(nativeInteractionClient), PerformanceEvents.NativeInteractionClientAcquireToken, this.logger, this.performanceClient, correlationId)({\r\n ...silentRequest,\r\n state: userRequestState,\r\n prompt: silentRequest.prompt || PromptValue.NONE,\r\n });\r\n }\r\n // Handle response from hash string\r\n return invokeAsync(interactionHandler.handleCodeResponse.bind(interactionHandler), PerformanceEvents.HandleCodeResponse, this.logger, this.performanceClient, correlationId)(serverParams, silentRequest);\r\n }\r\n}\n\n\n//# sourceMappingURL=SilentIframeClient.mjs.map\n\n;// ./node_modules/@azure/msal-browser/dist/interaction_client/SilentRefreshClient.mjs\n/*! @azure/msal-browser v3.28.1 2025-01-14 */\n\n\n\n\n\n\n\n\n/*\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License.\r\n */\r\nclass SilentRefreshClient extends StandardInteractionClient {\r\n /**\r\n * Exchanges the refresh token for new tokens\r\n * @param request\r\n */\r\n async acquireToken(request) {\r\n this.performanceClient.addQueueMeasurement(PerformanceEvents.SilentRefreshClientAcquireToken, request.correlationId);\r\n const baseRequest = await invokeAsync(initializeBaseRequest, PerformanceEvents.InitializeBaseRequest, this.logger, this.performanceClient, request.correlationId)(request, this.config, this.performanceClient, this.logger);\r\n const silentRequest = {\r\n ...request,\r\n ...baseRequest,\r\n };\r\n if (request.redirectUri) {\r\n // Make sure any passed redirectUri is converted to an absolute URL - redirectUri is not a required parameter for refresh token redemption so only include if explicitly provided\r\n silentRequest.redirectUri = this.getRedirectUri(request.redirectUri);\r\n }\r\n const serverTelemetryManager = this.initializeServerTelemetryManager(ApiId.acquireTokenSilent_silentFlow);\r\n const refreshTokenClient = await this.createRefreshTokenClient({\r\n serverTelemetryManager,\r\n authorityUrl: silentRequest.authority,\r\n azureCloudOptions: silentRequest.azureCloudOptions,\r\n account: silentRequest.account,\r\n });\r\n // Send request to renew token. Auth module will throw errors if token cannot be renewed.\r\n return invokeAsync(refreshTokenClient.acquireTokenByRefreshToken.bind(refreshTokenClient), PerformanceEvents.RefreshTokenClientAcquireTokenByRefreshToken, this.logger, this.performanceClient, request.correlationId)(silentRequest).catch((e) => {\r\n e.setCorrelationId(this.correlationId);\r\n serverTelemetryManager.cacheFailedRequest(e);\r\n throw e;\r\n });\r\n }\r\n /**\r\n * Currently Unsupported\r\n */\r\n logout() {\r\n // Synchronous so we must reject\r\n return Promise.reject(createBrowserAuthError(silentLogoutUnsupported));\r\n }\r\n /**\r\n * Creates a Refresh Client with the given authority, or the default authority.\r\n * @param params {\r\n * serverTelemetryManager: ServerTelemetryManager;\r\n * authorityUrl?: string;\r\n * azureCloudOptions?: AzureCloudOptions;\r\n * extraQueryParams?: StringDict;\r\n * account?: AccountInfo;\r\n * }\r\n */\r\n async createRefreshTokenClient(params) {\r\n // Create auth module.\r\n const clientConfig = await invokeAsync(this.getClientConfiguration.bind(this), PerformanceEvents.StandardInteractionClientGetClientConfiguration, this.logger, this.performanceClient, this.correlationId)({\r\n serverTelemetryManager: params.serverTelemetryManager,\r\n requestAuthority: params.authorityUrl,\r\n requestAzureCloudOptions: params.azureCloudOptions,\r\n requestExtraQueryParameters: params.extraQueryParameters,\r\n account: params.account,\r\n });\r\n return new RefreshTokenClient(clientConfig, this.performanceClient);\r\n }\r\n}\n\n\n//# sourceMappingURL=SilentRefreshClient.mjs.map\n\n;// ./node_modules/@azure/msal-browser/dist/cache/TokenCache.mjs\n/*! @azure/msal-browser v3.28.1 2025-01-14 */\n\n\n\n\n\n\n\n/*\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License.\r\n */\r\n/**\r\n * Token cache manager\r\n */\r\nclass TokenCache {\r\n constructor(configuration, storage, logger, cryptoObj) {\r\n this.isBrowserEnvironment = typeof window !== "undefined";\r\n this.config = configuration;\r\n this.storage = storage;\r\n this.logger = logger;\r\n this.cryptoObj = cryptoObj;\r\n }\r\n // Move getAllAccounts here and cache utility APIs\r\n /**\r\n * API to load tokens to msal-browser cache.\r\n * @param request\r\n * @param response\r\n * @param options\r\n * @returns `AuthenticationResult` for the response that was loaded.\r\n */\r\n loadExternalTokens(request, response, options) {\r\n if (!this.isBrowserEnvironment) {\r\n throw createBrowserAuthError(nonBrowserEnvironment);\r\n }\r\n const idTokenClaims = response.id_token\r\n ? extractTokenClaims(response.id_token, base64Decode)\r\n : undefined;\r\n const authorityOptions = {\r\n protocolMode: this.config.auth.protocolMode,\r\n knownAuthorities: this.config.auth.knownAuthorities,\r\n cloudDiscoveryMetadata: this.config.auth.cloudDiscoveryMetadata,\r\n authorityMetadata: this.config.auth.authorityMetadata,\r\n skipAuthorityMetadataCache: this.config.auth.skipAuthorityMetadataCache,\r\n };\r\n const authority = request.authority\r\n ? new Authority(Authority.generateAuthority(request.authority, request.azureCloudOptions), this.config.system.networkClient, this.storage, authorityOptions, this.logger, request.correlationId || createNewGuid())\r\n : undefined;\r\n const cacheRecordAccount = this.loadAccount(request, options.clientInfo || response.client_info || "", idTokenClaims, authority);\r\n const idToken = this.loadIdToken(response, cacheRecordAccount.homeAccountId, cacheRecordAccount.environment, cacheRecordAccount.realm);\r\n const accessToken = this.loadAccessToken(request, response, cacheRecordAccount.homeAccountId, cacheRecordAccount.environment, cacheRecordAccount.realm, options);\r\n const refreshToken = this.loadRefreshToken(response, cacheRecordAccount.homeAccountId, cacheRecordAccount.environment);\r\n return this.generateAuthenticationResult(request, {\r\n account: cacheRecordAccount,\r\n idToken,\r\n accessToken,\r\n refreshToken,\r\n }, idTokenClaims, authority);\r\n }\r\n /**\r\n * Helper function to load account to msal-browser cache\r\n * @param idToken\r\n * @param environment\r\n * @param clientInfo\r\n * @param authorityType\r\n * @param requestHomeAccountId\r\n * @returns `AccountEntity`\r\n */\r\n loadAccount(request, clientInfo, idTokenClaims, authority) {\r\n this.logger.verbose("TokenCache - loading account");\r\n if (request.account) {\r\n const accountEntity = AccountEntity.createFromAccountInfo(request.account);\r\n this.storage.setAccount(accountEntity);\r\n return accountEntity;\r\n }\r\n else if (!authority || (!clientInfo && !idTokenClaims)) {\r\n this.logger.error("TokenCache - if an account is not provided on the request, authority and either clientInfo or idToken must be provided instead.");\r\n throw createBrowserAuthError(unableToLoadToken);\r\n }\r\n const homeAccountId = AccountEntity.generateHomeAccountId(clientInfo, authority.authorityType, this.logger, this.cryptoObj, idTokenClaims);\r\n const claimsTenantId = idTokenClaims?.tid;\r\n const cachedAccount = buildAccountToCache(this.storage, authority, homeAccountId, base64Decode, idTokenClaims, clientInfo, authority.hostnameAndPort, claimsTenantId, undefined, // authCodePayload\r\n undefined, // nativeAccountId\r\n this.logger);\r\n this.storage.setAccount(cachedAccount);\r\n return cachedAccount;\r\n }\r\n /**\r\n * Helper function to load id tokens to msal-browser cache\r\n * @param idToken\r\n * @param homeAccountId\r\n * @param environment\r\n * @param tenantId\r\n * @returns `IdTokenEntity`\r\n */\r\n loadIdToken(response, homeAccountId, environment, tenantId) {\r\n if (!response.id_token) {\r\n this.logger.verbose("TokenCache - no id token found in response");\r\n return null;\r\n }\r\n this.logger.verbose("TokenCache - loading id token");\r\n const idTokenEntity = createIdTokenEntity(homeAccountId, environment, response.id_token, this.config.auth.clientId, tenantId);\r\n this.storage.setIdTokenCredential(idTokenEntity);\r\n return idTokenEntity;\r\n }\r\n /**\r\n * Helper function to load access tokens to msal-browser cache\r\n * @param request\r\n * @param response\r\n * @param homeAccountId\r\n * @param environment\r\n * @param tenantId\r\n * @returns `AccessTokenEntity`\r\n */\r\n loadAccessToken(request, response, homeAccountId, environment, tenantId, options) {\r\n if (!response.access_token) {\r\n this.logger.verbose("TokenCache - no access token found in response");\r\n return null;\r\n }\r\n else if (!response.expires_in) {\r\n this.logger.error("TokenCache - no expiration set on the access token. Cannot add it to the cache.");\r\n return null;\r\n }\r\n else if (!response.scope &&\r\n (!request.scopes || !request.scopes.length)) {\r\n this.logger.error("TokenCache - scopes not specified in the request or response. Cannot add token to the cache.");\r\n return null;\r\n }\r\n this.logger.verbose("TokenCache - loading access token");\r\n const scopes = response.scope\r\n ? ScopeSet.fromString(response.scope)\r\n : new ScopeSet(request.scopes);\r\n const expiresOn = options.expiresOn ||\r\n response.expires_in + new Date().getTime() / 1000;\r\n const extendedExpiresOn = options.extendedExpiresOn ||\r\n (response.ext_expires_in || response.expires_in) +\r\n new Date().getTime() / 1000;\r\n const accessTokenEntity = createAccessTokenEntity(homeAccountId, environment, response.access_token, this.config.auth.clientId, tenantId, scopes.printScopes(), expiresOn, extendedExpiresOn, base64Decode);\r\n this.storage.setAccessTokenCredential(accessTokenEntity);\r\n return accessTokenEntity;\r\n }\r\n /**\r\n * Helper function to load refresh tokens to msal-browser cache\r\n * @param request\r\n * @param response\r\n * @param homeAccountId\r\n * @param environment\r\n * @returns `RefreshTokenEntity`\r\n */\r\n loadRefreshToken(response, homeAccountId, environment) {\r\n if (!response.refresh_token) {\r\n this.logger.verbose("TokenCache - no refresh token found in response");\r\n return null;\r\n }\r\n this.logger.verbose("TokenCache - loading refresh token");\r\n const refreshTokenEntity = createRefreshTokenEntity(homeAccountId, environment, response.refresh_token, this.config.auth.clientId, response.foci, undefined, // userAssertionHash\r\n response.refresh_token_expires_in);\r\n this.storage.setRefreshTokenCredential(refreshTokenEntity);\r\n return refreshTokenEntity;\r\n }\r\n /**\r\n * Helper function to generate an `AuthenticationResult` for the result.\r\n * @param request\r\n * @param idTokenObj\r\n * @param cacheRecord\r\n * @param authority\r\n * @returns `AuthenticationResult`\r\n */\r\n generateAuthenticationResult(request, cacheRecord, idTokenClaims, authority) {\r\n let accessToken = "";\r\n let responseScopes = [];\r\n let expiresOn = null;\r\n let extExpiresOn;\r\n if (cacheRecord?.accessToken) {\r\n accessToken = cacheRecord.accessToken.secret;\r\n responseScopes = ScopeSet.fromString(cacheRecord.accessToken.target).asArray();\r\n expiresOn = new Date(Number(cacheRecord.accessToken.expiresOn) * 1000);\r\n extExpiresOn = new Date(Number(cacheRecord.accessToken.extendedExpiresOn) * 1000);\r\n }\r\n const accountEntity = cacheRecord.account;\r\n return {\r\n authority: authority ? authority.canonicalAuthority : "",\r\n uniqueId: cacheRecord.account.localAccountId,\r\n tenantId: cacheRecord.account.realm,\r\n scopes: responseScopes,\r\n account: accountEntity.getAccountInfo(),\r\n idToken: cacheRecord.idToken?.secret || "",\r\n idTokenClaims: idTokenClaims || {},\r\n accessToken: accessToken,\r\n fromCache: true,\r\n expiresOn: expiresOn,\r\n correlationId: request.correlationId || "",\r\n requestId: "",\r\n extExpiresOn: extExpiresOn,\r\n familyId: cacheRecord.refreshToken?.familyId || "",\r\n tokenType: cacheRecord?.accessToken?.tokenType || "",\r\n state: request.state || "",\r\n cloudGraphHostName: accountEntity.cloudGraphHostName || "",\r\n msGraphHost: accountEntity.msGraphHost || "",\r\n fromNativeBroker: false,\r\n };\r\n }\r\n}\n\n\n//# sourceMappingURL=TokenCache.mjs.map\n\n;// ./node_modules/@azure/msal-browser/dist/interaction_client/HybridSpaAuthorizationCodeClient.mjs\n/*! @azure/msal-browser v3.28.1 2025-01-14 */\n\n\n\n/*\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License.\r\n */\r\nclass HybridSpaAuthorizationCodeClient extends AuthorizationCodeClient {\r\n constructor(config) {\r\n super(config);\r\n this.includeRedirectUri = false;\r\n }\r\n}\n\n\n//# sourceMappingURL=HybridSpaAuthorizationCodeClient.mjs.map\n\n;// ./node_modules/@azure/msal-browser/dist/interaction_client/SilentAuthCodeClient.mjs\n/*! @azure/msal-browser v3.28.1 2025-01-14 */\n\n\n\n\n\n\n\n\n\n/*\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License.\r\n */\r\nclass SilentAuthCodeClient extends StandardInteractionClient {\r\n constructor(config, storageImpl, browserCrypto, logger, eventHandler, navigationClient, apiId, performanceClient, nativeMessageHandler, correlationId) {\r\n super(config, storageImpl, browserCrypto, logger, eventHandler, navigationClient, performanceClient, nativeMessageHandler, correlationId);\r\n this.apiId = apiId;\r\n }\r\n /**\r\n * Acquires a token silently by redeeming an authorization code against the /token endpoint\r\n * @param request\r\n */\r\n async acquireToken(request) {\r\n // Auth code payload is required\r\n if (!request.code) {\r\n throw createBrowserAuthError(authCodeRequired);\r\n }\r\n // Create silent request\r\n const silentRequest = await invokeAsync(this.initializeAuthorizationRequest.bind(this), PerformanceEvents.StandardInteractionClientInitializeAuthorizationRequest, this.logger, this.performanceClient, request.correlationId)(request, InteractionType.Silent);\r\n const serverTelemetryManager = this.initializeServerTelemetryManager(this.apiId);\r\n try {\r\n // Create auth code request (PKCE not needed)\r\n const authCodeRequest = {\r\n ...silentRequest,\r\n code: request.code,\r\n };\r\n // Initialize the client\r\n const clientConfig = await invokeAsync(this.getClientConfiguration.bind(this), PerformanceEvents.StandardInteractionClientGetClientConfiguration, this.logger, this.performanceClient, request.correlationId)({\r\n serverTelemetryManager,\r\n requestAuthority: silentRequest.authority,\r\n requestAzureCloudOptions: silentRequest.azureCloudOptions,\r\n requestExtraQueryParameters: silentRequest.extraQueryParameters,\r\n account: silentRequest.account,\r\n });\r\n const authClient = new HybridSpaAuthorizationCodeClient(clientConfig);\r\n this.logger.verbose("Auth code client created");\r\n // Create silent handler\r\n const interactionHandler = new InteractionHandler(authClient, this.browserStorage, authCodeRequest, this.logger, this.performanceClient);\r\n // Handle auth code parameters from request\r\n return await invokeAsync(interactionHandler.handleCodeResponseFromServer.bind(interactionHandler), PerformanceEvents.HandleCodeResponseFromServer, this.logger, this.performanceClient, request.correlationId)({\r\n code: request.code,\r\n msgraph_host: request.msGraphHost,\r\n cloud_graph_host_name: request.cloudGraphHostName,\r\n cloud_instance_host_name: request.cloudInstanceHostName,\r\n }, silentRequest, false);\r\n }\r\n catch (e) {\r\n if (e instanceof AuthError) {\r\n e.setCorrelationId(this.correlationId);\r\n serverTelemetryManager.cacheFailedRequest(e);\r\n }\r\n throw e;\r\n }\r\n }\r\n /**\r\n * Currently Unsupported\r\n */\r\n logout() {\r\n // Synchronous so we must reject\r\n return Promise.reject(createBrowserAuthError(silentLogoutUnsupported));\r\n }\r\n}\n\n\n//# sourceMappingURL=SilentAuthCodeClient.mjs.map\n\n;// ./node_modules/@azure/msal-browser/dist/controllers/StandardController.mjs\n/*! @azure/msal-browser v3.28.1 2025-01-14 */\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n/*\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License.\r\n */\r\nfunction getAccountType(account) {\r\n const idTokenClaims = account?.idTokenClaims;\r\n if (idTokenClaims?.tfp || idTokenClaims?.acr) {\r\n return "B2C";\r\n }\r\n if (!idTokenClaims?.tid) {\r\n return undefined;\r\n }\r\n else if (idTokenClaims?.tid === "9188040d-6c67-4c5b-b112-36a304b66dad") {\r\n return "MSA";\r\n }\r\n return "AAD";\r\n}\r\nfunction StandardController_preflightCheck(initialized, performanceEvent) {\r\n try {\r\n preflightCheck(initialized);\r\n }\r\n catch (e) {\r\n performanceEvent.end({ success: false }, e);\r\n throw e;\r\n }\r\n}\r\nclass StandardController {\r\n /**\r\n * @constructor\r\n * Constructor for the PublicClientApplication used to instantiate the PublicClientApplication object\r\n *\r\n * Important attributes in the Configuration object for auth are:\r\n * - clientID: the application ID of your application. You can obtain one by registering your application with our Application registration portal : https://portal.azure.com/#blade/Microsoft_AAD_IAM/ActiveDirectoryMenuBlade/RegisteredAppsPreview\r\n * - authority: the authority URL for your application.\r\n * - redirect_uri: the uri of your application registered in the portal.\r\n *\r\n * In Azure AD, authority is a URL indicating the Azure active directory that MSAL uses to obtain tokens.\r\n * It is of the form https://login.microsoftonline.com/{Enter_the_Tenant_Info_Here}\r\n * If your application supports Accounts in one organizational directory, replace "Enter_the_Tenant_Info_Here" value with the Tenant Id or Tenant name (for example, contoso.microsoft.com).\r\n * If your application supports Accounts in any organizational directory, replace "Enter_the_Tenant_Info_Here" value with organizations.\r\n * If your application supports Accounts in any organizational directory and personal Microsoft accounts, replace "Enter_the_Tenant_Info_Here" value with common.\r\n * To restrict support to Personal Microsoft accounts only, replace "Enter_the_Tenant_Info_Here" value with consumers.\r\n *\r\n * In Azure B2C, authority is of the form https://{instance}/tfp/{tenant}/{policyName}/\r\n * Full B2C functionality will be available in this library in future versions.\r\n *\r\n * @param configuration Object for the MSAL PublicClientApplication instance\r\n */\r\n constructor(operatingContext) {\r\n this.operatingContext = operatingContext;\r\n this.isBrowserEnvironment =\r\n this.operatingContext.isBrowserEnvironment();\r\n // Set the configuration.\r\n this.config = operatingContext.getConfig();\r\n this.initialized = false;\r\n // Initialize logger\r\n this.logger = this.operatingContext.getLogger();\r\n // Initialize the network module class.\r\n this.networkClient = this.config.system.networkClient;\r\n // Initialize the navigation client class.\r\n this.navigationClient = this.config.system.navigationClient;\r\n // Initialize redirectResponse Map\r\n this.redirectResponse = new Map();\r\n // Initial hybrid spa map\r\n this.hybridAuthCodeResponses = new Map();\r\n // Initialize performance client\r\n this.performanceClient = this.config.telemetry.client;\r\n // Initialize the crypto class.\r\n this.browserCrypto = this.isBrowserEnvironment\r\n ? new CryptoOps(this.logger, this.performanceClient)\r\n : DEFAULT_CRYPTO_IMPLEMENTATION;\r\n this.eventHandler = new EventHandler(this.logger);\r\n // Initialize the browser storage class.\r\n this.browserStorage = this.isBrowserEnvironment\r\n ? new BrowserCacheManager(this.config.auth.clientId, this.config.cache, this.browserCrypto, this.logger, buildStaticAuthorityOptions(this.config.auth), this.performanceClient)\r\n : DEFAULT_BROWSER_CACHE_MANAGER(this.config.auth.clientId, this.logger);\r\n // initialize in memory storage for native flows\r\n const nativeCacheOptions = {\r\n cacheLocation: BrowserCacheLocation.MemoryStorage,\r\n temporaryCacheLocation: BrowserCacheLocation.MemoryStorage,\r\n storeAuthStateInCookie: false,\r\n secureCookies: false,\r\n cacheMigrationEnabled: false,\r\n claimsBasedCachingEnabled: false,\r\n };\r\n this.nativeInternalStorage = new BrowserCacheManager(this.config.auth.clientId, nativeCacheOptions, this.browserCrypto, this.logger, undefined, this.performanceClient);\r\n // Initialize the token cache\r\n this.tokenCache = new TokenCache(this.config, this.browserStorage, this.logger, this.browserCrypto);\r\n this.activeSilentTokenRequests = new Map();\r\n // Register listener functions\r\n this.trackPageVisibility = this.trackPageVisibility.bind(this);\r\n // Register listener functions\r\n this.trackPageVisibilityWithMeasurement =\r\n this.trackPageVisibilityWithMeasurement.bind(this);\r\n // account storage events\r\n this.listeningToStorageEvents = false;\r\n this.handleAccountCacheChange =\r\n this.handleAccountCacheChange.bind(this);\r\n }\r\n static async createController(operatingContext, request) {\r\n const controller = new StandardController(operatingContext);\r\n await controller.initialize(request);\r\n return controller;\r\n }\r\n trackPageVisibility(correlationId) {\r\n if (!correlationId) {\r\n return;\r\n }\r\n this.logger.info("Perf: Visibility change detected");\r\n this.performanceClient.incrementFields({ visibilityChangeCount: 1 }, correlationId);\r\n }\r\n /**\r\n * Initializer function to perform async startup tasks such as connecting to WAM extension\r\n * @param request {?InitializeApplicationRequest} correlation id\r\n */\r\n async initialize(request) {\r\n this.logger.trace("initialize called");\r\n if (this.initialized) {\r\n this.logger.info("initialize has already been called, exiting early.");\r\n return;\r\n }\r\n if (!this.isBrowserEnvironment) {\r\n this.logger.info("in non-browser environment, exiting early.");\r\n this.initialized = true;\r\n this.eventHandler.emitEvent(EventType.INITIALIZE_END);\r\n return;\r\n }\r\n const initCorrelationId = request?.correlationId || this.getRequestCorrelationId();\r\n const allowNativeBroker = this.config.system.allowNativeBroker;\r\n const initMeasurement = this.performanceClient.startMeasurement(PerformanceEvents.InitializeClientApplication, initCorrelationId);\r\n this.eventHandler.emitEvent(EventType.INITIALIZE_START);\r\n if (allowNativeBroker) {\r\n try {\r\n this.nativeExtensionProvider =\r\n await NativeMessageHandler.createProvider(this.logger, this.config.system.nativeBrokerHandshakeTimeout, this.performanceClient);\r\n }\r\n catch (e) {\r\n this.logger.verbose(e);\r\n }\r\n }\r\n if (!this.config.cache.claimsBasedCachingEnabled) {\r\n this.logger.verbose("Claims-based caching is disabled. Clearing the previous cache with claims");\r\n await invokeAsync(this.browserStorage.clearTokensAndKeysWithClaims.bind(this.browserStorage), PerformanceEvents.ClearTokensAndKeysWithClaims, this.logger, this.performanceClient, initCorrelationId)(this.performanceClient, initCorrelationId);\r\n }\r\n this.initialized = true;\r\n this.eventHandler.emitEvent(EventType.INITIALIZE_END);\r\n initMeasurement.end({ allowNativeBroker, success: true });\r\n }\r\n // #region Redirect Flow\r\n /**\r\n * Event handler function which allows users to fire events after the PublicClientApplication object\r\n * has loaded during redirect flows. This should be invoked on all page loads involved in redirect\r\n * auth flows.\r\n * @param hash Hash to process. Defaults to the current value of window.location.hash. Only needs to be provided explicitly if the response to be handled is not contained in the current value.\r\n * @returns Token response or null. If the return value is null, then no auth redirect was detected.\r\n */\r\n async handleRedirectPromise(hash) {\r\n this.logger.verbose("handleRedirectPromise called");\r\n // Block token acquisition before initialize has been called\r\n blockAPICallsBeforeInitialize(this.initialized);\r\n if (this.isBrowserEnvironment) {\r\n /**\r\n * Store the promise on the PublicClientApplication instance if this is the first invocation of handleRedirectPromise,\r\n * otherwise return the promise from the first invocation. Prevents race conditions when handleRedirectPromise is called\r\n * several times concurrently.\r\n */\r\n const redirectResponseKey = hash || "";\r\n let response = this.redirectResponse.get(redirectResponseKey);\r\n if (typeof response === "undefined") {\r\n response = this.handleRedirectPromiseInternal(hash);\r\n this.redirectResponse.set(redirectResponseKey, response);\r\n this.logger.verbose("handleRedirectPromise has been called for the first time, storing the promise");\r\n }\r\n else {\r\n this.logger.verbose("handleRedirectPromise has been called previously, returning the result from the first call");\r\n }\r\n return response;\r\n }\r\n this.logger.verbose("handleRedirectPromise returns null, not browser environment");\r\n return null;\r\n }\r\n /**\r\n * The internal details of handleRedirectPromise. This is separated out to a helper to allow handleRedirectPromise to memoize requests\r\n * @param hash\r\n * @returns\r\n */\r\n async handleRedirectPromiseInternal(hash) {\r\n const loggedInAccounts = this.getAllAccounts();\r\n const request = this.browserStorage.getCachedNativeRequest();\r\n const useNative = request &&\r\n NativeMessageHandler.isNativeAvailable(this.config, this.logger, this.nativeExtensionProvider) &&\r\n this.nativeExtensionProvider &&\r\n !hash;\r\n const correlationId = useNative\r\n ? request?.correlationId\r\n : this.browserStorage.getTemporaryCache(TemporaryCacheKeys.CORRELATION_ID, true) || "";\r\n const rootMeasurement = this.performanceClient.startMeasurement(PerformanceEvents.AcquireTokenRedirect, correlationId);\r\n this.eventHandler.emitEvent(EventType.HANDLE_REDIRECT_START, InteractionType.Redirect);\r\n let redirectResponse;\r\n if (useNative && this.nativeExtensionProvider) {\r\n this.logger.trace("handleRedirectPromise - acquiring token from native platform");\r\n const nativeClient = new NativeInteractionClient(this.config, this.browserStorage, this.browserCrypto, this.logger, this.eventHandler, this.navigationClient, ApiId.handleRedirectPromise, this.performanceClient, this.nativeExtensionProvider, request.accountId, this.nativeInternalStorage, request.correlationId);\r\n redirectResponse = invokeAsync(nativeClient.handleRedirectPromise.bind(nativeClient), PerformanceEvents.HandleNativeRedirectPromiseMeasurement, this.logger, this.performanceClient, rootMeasurement.event.correlationId)(this.performanceClient, rootMeasurement.event.correlationId);\r\n }\r\n else {\r\n this.logger.trace("handleRedirectPromise - acquiring token from web flow");\r\n const redirectClient = this.createRedirectClient(correlationId);\r\n redirectResponse = invokeAsync(redirectClient.handleRedirectPromise.bind(redirectClient), PerformanceEvents.HandleRedirectPromiseMeasurement, this.logger, this.performanceClient, rootMeasurement.event.correlationId)(hash, rootMeasurement);\r\n }\r\n return redirectResponse\r\n .then((result) => {\r\n if (result) {\r\n // Emit login event if number of accounts change\r\n const isLoggingIn = loggedInAccounts.length < this.getAllAccounts().length;\r\n if (isLoggingIn) {\r\n this.eventHandler.emitEvent(EventType.LOGIN_SUCCESS, InteractionType.Redirect, result);\r\n this.logger.verbose("handleRedirectResponse returned result, login success");\r\n }\r\n else {\r\n this.eventHandler.emitEvent(EventType.ACQUIRE_TOKEN_SUCCESS, InteractionType.Redirect, result);\r\n this.logger.verbose("handleRedirectResponse returned result, acquire token success");\r\n }\r\n rootMeasurement.end({\r\n success: true,\r\n accountType: getAccountType(result.account),\r\n });\r\n }\r\n else {\r\n /*\r\n * Instrument an event only if an error code is set. Otherwise, discard it when the redirect response\r\n * is empty and the error code is missing.\r\n */\r\n if (rootMeasurement.event.errorCode) {\r\n rootMeasurement.end({ success: false });\r\n }\r\n else {\r\n rootMeasurement.discard();\r\n }\r\n }\r\n this.eventHandler.emitEvent(EventType.HANDLE_REDIRECT_END, InteractionType.Redirect);\r\n return result;\r\n })\r\n .catch((e) => {\r\n const eventError = e;\r\n // Emit login event if there is an account\r\n if (loggedInAccounts.length > 0) {\r\n this.eventHandler.emitEvent(EventType.ACQUIRE_TOKEN_FAILURE, InteractionType.Redirect, null, eventError);\r\n }\r\n else {\r\n this.eventHandler.emitEvent(EventType.LOGIN_FAILURE, InteractionType.Redirect, null, eventError);\r\n }\r\n this.eventHandler.emitEvent(EventType.HANDLE_REDIRECT_END, InteractionType.Redirect);\r\n rootMeasurement.end({\r\n success: false,\r\n }, eventError);\r\n throw e;\r\n });\r\n }\r\n /**\r\n * Use when you want to obtain an access_token for your API by redirecting the user\'s browser window to the authorization endpoint. This function redirects\r\n * the page, so any code that follows this function will not execute.\r\n *\r\n * IMPORTANT: It is NOT recommended to have code that is dependent on the resolution of the Promise. This function will navigate away from the current\r\n * browser window. It currently returns a Promise in order to reflect the asynchronous nature of the code running in this function.\r\n *\r\n * @param request\r\n */\r\n async acquireTokenRedirect(request) {\r\n // Preflight request\r\n const correlationId = this.getRequestCorrelationId(request);\r\n this.logger.verbose("acquireTokenRedirect called", correlationId);\r\n const atrMeasurement = this.performanceClient.startMeasurement(PerformanceEvents.AcquireTokenPreRedirect, correlationId);\r\n atrMeasurement.add({\r\n accountType: getAccountType(request.account),\r\n scenarioId: request.scenarioId,\r\n });\r\n // Override on request only if set, as onRedirectNavigate field is deprecated\r\n const onRedirectNavigateCb = request.onRedirectNavigate;\r\n if (onRedirectNavigateCb) {\r\n request.onRedirectNavigate = (url) => {\r\n const navigate = typeof onRedirectNavigateCb === "function"\r\n ? onRedirectNavigateCb(url)\r\n : undefined;\r\n if (navigate !== false) {\r\n atrMeasurement.end({ success: true });\r\n }\r\n else {\r\n atrMeasurement.discard();\r\n }\r\n return navigate;\r\n };\r\n }\r\n else {\r\n const configOnRedirectNavigateCb = this.config.auth.onRedirectNavigate;\r\n this.config.auth.onRedirectNavigate = (url) => {\r\n const navigate = typeof configOnRedirectNavigateCb === "function"\r\n ? configOnRedirectNavigateCb(url)\r\n : undefined;\r\n if (navigate !== false) {\r\n atrMeasurement.end({ success: true });\r\n }\r\n else {\r\n atrMeasurement.discard();\r\n }\r\n return navigate;\r\n };\r\n }\r\n // If logged in, emit acquire token events\r\n const isLoggedIn = this.getAllAccounts().length > 0;\r\n try {\r\n redirectPreflightCheck(this.initialized, this.config);\r\n this.browserStorage.setInteractionInProgress(true);\r\n if (isLoggedIn) {\r\n this.eventHandler.emitEvent(EventType.ACQUIRE_TOKEN_START, InteractionType.Redirect, request);\r\n }\r\n else {\r\n this.eventHandler.emitEvent(EventType.LOGIN_START, InteractionType.Redirect, request);\r\n }\r\n let result;\r\n if (this.nativeExtensionProvider && this.canUseNative(request)) {\r\n const nativeClient = new NativeInteractionClient(this.config, this.browserStorage, this.browserCrypto, this.logger, this.eventHandler, this.navigationClient, ApiId.acquireTokenRedirect, this.performanceClient, this.nativeExtensionProvider, this.getNativeAccountId(request), this.nativeInternalStorage, correlationId);\r\n result = nativeClient\r\n .acquireTokenRedirect(request, atrMeasurement)\r\n .catch((e) => {\r\n if (e instanceof NativeAuthError &&\r\n isFatalNativeAuthError(e)) {\r\n this.nativeExtensionProvider = undefined; // If extension gets uninstalled during session prevent future requests from continuing to attempt\r\n const redirectClient = this.createRedirectClient(correlationId);\r\n return redirectClient.acquireToken(request);\r\n }\r\n else if (e instanceof InteractionRequiredAuthError) {\r\n this.logger.verbose("acquireTokenRedirect - Resolving interaction required error thrown by native broker by falling back to web flow");\r\n const redirectClient = this.createRedirectClient(correlationId);\r\n return redirectClient.acquireToken(request);\r\n }\r\n this.browserStorage.setInteractionInProgress(false);\r\n throw e;\r\n });\r\n }\r\n else {\r\n const redirectClient = this.createRedirectClient(correlationId);\r\n result = redirectClient.acquireToken(request);\r\n }\r\n return await result;\r\n }\r\n catch (e) {\r\n atrMeasurement.end({ success: false }, e);\r\n if (isLoggedIn) {\r\n this.eventHandler.emitEvent(EventType.ACQUIRE_TOKEN_FAILURE, InteractionType.Redirect, null, e);\r\n }\r\n else {\r\n this.eventHandler.emitEvent(EventType.LOGIN_FAILURE, InteractionType.Redirect, null, e);\r\n }\r\n throw e;\r\n }\r\n }\r\n // #endregion\r\n // #region Popup Flow\r\n /**\r\n * Use when you want to obtain an access_token for your API via opening a popup window in the user\'s browser\r\n *\r\n * @param request\r\n *\r\n * @returns A promise that is fulfilled when this function has completed, or rejected if an error was raised.\r\n */\r\n acquireTokenPopup(request) {\r\n const correlationId = this.getRequestCorrelationId(request);\r\n const atPopupMeasurement = this.performanceClient.startMeasurement(PerformanceEvents.AcquireTokenPopup, correlationId);\r\n atPopupMeasurement.add({\r\n scenarioId: request.scenarioId,\r\n accountType: getAccountType(request.account),\r\n });\r\n try {\r\n this.logger.verbose("acquireTokenPopup called", correlationId);\r\n StandardController_preflightCheck(this.initialized, atPopupMeasurement);\r\n this.browserStorage.setInteractionInProgress(true);\r\n }\r\n catch (e) {\r\n // Since this function is syncronous we need to reject\r\n return Promise.reject(e);\r\n }\r\n // If logged in, emit acquire token events\r\n const loggedInAccounts = this.getAllAccounts();\r\n if (loggedInAccounts.length > 0) {\r\n this.eventHandler.emitEvent(EventType.ACQUIRE_TOKEN_START, InteractionType.Popup, request);\r\n }\r\n else {\r\n this.eventHandler.emitEvent(EventType.LOGIN_START, InteractionType.Popup, request);\r\n }\r\n let result;\r\n if (this.canUseNative(request)) {\r\n result = this.acquireTokenNative({\r\n ...request,\r\n correlationId,\r\n }, ApiId.acquireTokenPopup)\r\n .then((response) => {\r\n this.browserStorage.setInteractionInProgress(false);\r\n atPopupMeasurement.end({\r\n success: true,\r\n isNativeBroker: true,\r\n accountType: getAccountType(response.account),\r\n });\r\n return response;\r\n })\r\n .catch((e) => {\r\n if (e instanceof NativeAuthError &&\r\n isFatalNativeAuthError(e)) {\r\n this.nativeExtensionProvider = undefined; // If extension gets uninstalled during session prevent future requests from continuing to attempt\r\n const popupClient = this.createPopupClient(correlationId);\r\n return popupClient.acquireToken(request);\r\n }\r\n else if (e instanceof InteractionRequiredAuthError) {\r\n this.logger.verbose("acquireTokenPopup - Resolving interaction required error thrown by native broker by falling back to web flow");\r\n const popupClient = this.createPopupClient(correlationId);\r\n return popupClient.acquireToken(request);\r\n }\r\n this.browserStorage.setInteractionInProgress(false);\r\n throw e;\r\n });\r\n }\r\n else {\r\n const popupClient = this.createPopupClient(correlationId);\r\n result = popupClient.acquireToken(request);\r\n }\r\n return result\r\n .then((result) => {\r\n /*\r\n * If logged in, emit acquire token events\r\n */\r\n const isLoggingIn = loggedInAccounts.length < this.getAllAccounts().length;\r\n if (isLoggingIn) {\r\n this.eventHandler.emitEvent(EventType.LOGIN_SUCCESS, InteractionType.Popup, result);\r\n }\r\n else {\r\n this.eventHandler.emitEvent(EventType.ACQUIRE_TOKEN_SUCCESS, InteractionType.Popup, result);\r\n }\r\n atPopupMeasurement.end({\r\n success: true,\r\n accessTokenSize: result.accessToken.length,\r\n idTokenSize: result.idToken.length,\r\n accountType: getAccountType(result.account),\r\n });\r\n return result;\r\n })\r\n .catch((e) => {\r\n if (loggedInAccounts.length > 0) {\r\n this.eventHandler.emitEvent(EventType.ACQUIRE_TOKEN_FAILURE, InteractionType.Popup, null, e);\r\n }\r\n else {\r\n this.eventHandler.emitEvent(EventType.LOGIN_FAILURE, InteractionType.Popup, null, e);\r\n }\r\n atPopupMeasurement.end({\r\n success: false,\r\n }, e);\r\n // Since this function is syncronous we need to reject\r\n return Promise.reject(e);\r\n });\r\n }\r\n trackPageVisibilityWithMeasurement() {\r\n const measurement = this.ssoSilentMeasurement ||\r\n this.acquireTokenByCodeAsyncMeasurement;\r\n if (!measurement) {\r\n return;\r\n }\r\n this.logger.info("Perf: Visibility change detected in ", measurement.event.name);\r\n measurement.increment({\r\n visibilityChangeCount: 1,\r\n });\r\n }\r\n // #endregion\r\n // #region Silent Flow\r\n /**\r\n * This function uses a hidden iframe to fetch an authorization code from the eSTS. There are cases where this may not work:\r\n * - Any browser using a form of Intelligent Tracking Prevention\r\n * - If there is not an established session with the service\r\n *\r\n * In these cases, the request must be done inside a popup or full frame redirect.\r\n *\r\n * For the cases where interaction is required, you cannot send a request with prompt=none.\r\n *\r\n * If your refresh token has expired, you can use this function to fetch a new set of tokens silently as long as\r\n * you session on the server still exists.\r\n * @param request {@link SsoSilentRequest}\r\n *\r\n * @returns A promise that is fulfilled when this function has completed, or rejected if an error was raised.\r\n */\r\n async ssoSilent(request) {\r\n const correlationId = this.getRequestCorrelationId(request);\r\n const validRequest = {\r\n ...request,\r\n // will be PromptValue.NONE or PromptValue.NO_SESSION\r\n prompt: request.prompt,\r\n correlationId: correlationId,\r\n };\r\n this.ssoSilentMeasurement = this.performanceClient.startMeasurement(PerformanceEvents.SsoSilent, correlationId);\r\n this.ssoSilentMeasurement?.add({\r\n scenarioId: request.scenarioId,\r\n accountType: getAccountType(request.account),\r\n });\r\n StandardController_preflightCheck(this.initialized, this.ssoSilentMeasurement);\r\n this.ssoSilentMeasurement?.increment({\r\n visibilityChangeCount: 0,\r\n });\r\n document.addEventListener("visibilitychange", this.trackPageVisibilityWithMeasurement);\r\n this.logger.verbose("ssoSilent called", correlationId);\r\n this.eventHandler.emitEvent(EventType.SSO_SILENT_START, InteractionType.Silent, validRequest);\r\n let result;\r\n if (this.canUseNative(validRequest)) {\r\n result = this.acquireTokenNative(validRequest, ApiId.ssoSilent).catch((e) => {\r\n // If native token acquisition fails for availability reasons fallback to standard flow\r\n if (e instanceof NativeAuthError && isFatalNativeAuthError(e)) {\r\n this.nativeExtensionProvider = undefined; // If extension gets uninstalled during session prevent future requests from continuing to attempt\r\n const silentIframeClient = this.createSilentIframeClient(validRequest.correlationId);\r\n return silentIframeClient.acquireToken(validRequest);\r\n }\r\n throw e;\r\n });\r\n }\r\n else {\r\n const silentIframeClient = this.createSilentIframeClient(validRequest.correlationId);\r\n result = silentIframeClient.acquireToken(validRequest);\r\n }\r\n return result\r\n .then((response) => {\r\n this.eventHandler.emitEvent(EventType.SSO_SILENT_SUCCESS, InteractionType.Silent, response);\r\n this.ssoSilentMeasurement?.end({\r\n success: true,\r\n isNativeBroker: response.fromNativeBroker,\r\n accessTokenSize: response.accessToken.length,\r\n idTokenSize: response.idToken.length,\r\n accountType: getAccountType(response.account),\r\n });\r\n return response;\r\n })\r\n .catch((e) => {\r\n this.eventHandler.emitEvent(EventType.SSO_SILENT_FAILURE, InteractionType.Silent, null, e);\r\n this.ssoSilentMeasurement?.end({\r\n success: false,\r\n }, e);\r\n throw e;\r\n })\r\n .finally(() => {\r\n document.removeEventListener("visibilitychange", this.trackPageVisibilityWithMeasurement);\r\n });\r\n }\r\n /**\r\n * This function redeems an authorization code (passed as code) from the eSTS token endpoint.\r\n * This authorization code should be acquired server-side using a confidential client to acquire a spa_code.\r\n * This API is not indended for normal authorization code acquisition and redemption.\r\n *\r\n * Redemption of this authorization code will not require PKCE, as it was acquired by a confidential client.\r\n *\r\n * @param request {@link AuthorizationCodeRequest}\r\n * @returns A promise that is fulfilled when this function has completed, or rejected if an error was raised.\r\n */\r\n async acquireTokenByCode(request) {\r\n const correlationId = this.getRequestCorrelationId(request);\r\n this.logger.trace("acquireTokenByCode called", correlationId);\r\n const atbcMeasurement = this.performanceClient.startMeasurement(PerformanceEvents.AcquireTokenByCode, correlationId);\r\n StandardController_preflightCheck(this.initialized, atbcMeasurement);\r\n this.eventHandler.emitEvent(EventType.ACQUIRE_TOKEN_BY_CODE_START, InteractionType.Silent, request);\r\n atbcMeasurement.add({ scenarioId: request.scenarioId });\r\n try {\r\n if (request.code && request.nativeAccountId) {\r\n // Throw error in case server returns both spa_code and spa_accountid in exchange for auth code.\r\n throw createBrowserAuthError(spaCodeAndNativeAccountIdPresent);\r\n }\r\n else if (request.code) {\r\n const hybridAuthCode = request.code;\r\n let response = this.hybridAuthCodeResponses.get(hybridAuthCode);\r\n if (!response) {\r\n this.logger.verbose("Initiating new acquireTokenByCode request", correlationId);\r\n response = this.acquireTokenByCodeAsync({\r\n ...request,\r\n correlationId,\r\n })\r\n .then((result) => {\r\n this.eventHandler.emitEvent(EventType.ACQUIRE_TOKEN_BY_CODE_SUCCESS, InteractionType.Silent, result);\r\n this.hybridAuthCodeResponses.delete(hybridAuthCode);\r\n atbcMeasurement.end({\r\n success: true,\r\n isNativeBroker: result.fromNativeBroker,\r\n accessTokenSize: result.accessToken.length,\r\n idTokenSize: result.idToken.length,\r\n accountType: getAccountType(result.account),\r\n });\r\n return result;\r\n })\r\n .catch((error) => {\r\n this.hybridAuthCodeResponses.delete(hybridAuthCode);\r\n this.eventHandler.emitEvent(EventType.ACQUIRE_TOKEN_BY_CODE_FAILURE, InteractionType.Silent, null, error);\r\n atbcMeasurement.end({\r\n success: false,\r\n }, error);\r\n throw error;\r\n });\r\n this.hybridAuthCodeResponses.set(hybridAuthCode, response);\r\n }\r\n else {\r\n this.logger.verbose("Existing acquireTokenByCode request found", correlationId);\r\n atbcMeasurement.discard();\r\n }\r\n return await response;\r\n }\r\n else if (request.nativeAccountId) {\r\n if (this.canUseNative(request, request.nativeAccountId)) {\r\n const result = await this.acquireTokenNative({\r\n ...request,\r\n correlationId,\r\n }, ApiId.acquireTokenByCode, request.nativeAccountId).catch((e) => {\r\n // If native token acquisition fails for availability reasons fallback to standard flow\r\n if (e instanceof NativeAuthError &&\r\n isFatalNativeAuthError(e)) {\r\n this.nativeExtensionProvider = undefined; // If extension gets uninstalled during session prevent future requests from continuing to attempt\r\n }\r\n throw e;\r\n });\r\n atbcMeasurement.end({\r\n accountType: getAccountType(result.account),\r\n success: true,\r\n });\r\n return result;\r\n }\r\n else {\r\n throw createBrowserAuthError(unableToAcquireTokenFromNativePlatform);\r\n }\r\n }\r\n else {\r\n throw createBrowserAuthError(authCodeOrNativeAccountIdRequired);\r\n }\r\n }\r\n catch (e) {\r\n this.eventHandler.emitEvent(EventType.ACQUIRE_TOKEN_BY_CODE_FAILURE, InteractionType.Silent, null, e);\r\n atbcMeasurement.end({\r\n success: false,\r\n }, e);\r\n throw e;\r\n }\r\n }\r\n /**\r\n * Creates a SilentAuthCodeClient to redeem an authorization code.\r\n * @param request\r\n * @returns Result of the operation to redeem the authorization code\r\n */\r\n async acquireTokenByCodeAsync(request) {\r\n this.logger.trace("acquireTokenByCodeAsync called", request.correlationId);\r\n this.acquireTokenByCodeAsyncMeasurement =\r\n this.performanceClient.startMeasurement(PerformanceEvents.AcquireTokenByCodeAsync, request.correlationId);\r\n this.acquireTokenByCodeAsyncMeasurement?.increment({\r\n visibilityChangeCount: 0,\r\n });\r\n document.addEventListener("visibilitychange", this.trackPageVisibilityWithMeasurement);\r\n const silentAuthCodeClient = this.createSilentAuthCodeClient(request.correlationId);\r\n const silentTokenResult = await silentAuthCodeClient\r\n .acquireToken(request)\r\n .then((response) => {\r\n this.acquireTokenByCodeAsyncMeasurement?.end({\r\n success: true,\r\n fromCache: response.fromCache,\r\n isNativeBroker: response.fromNativeBroker,\r\n });\r\n return response;\r\n })\r\n .catch((tokenRenewalError) => {\r\n this.acquireTokenByCodeAsyncMeasurement?.end({\r\n success: false,\r\n }, tokenRenewalError);\r\n throw tokenRenewalError;\r\n })\r\n .finally(() => {\r\n document.removeEventListener("visibilitychange", this.trackPageVisibilityWithMeasurement);\r\n });\r\n return silentTokenResult;\r\n }\r\n /**\r\n * Attempt to acquire an access token from the cache\r\n * @param silentCacheClient SilentCacheClient\r\n * @param commonRequest CommonSilentFlowRequest\r\n * @param silentRequest SilentRequest\r\n * @returns A promise that, when resolved, returns the access token\r\n */\r\n async acquireTokenFromCache(commonRequest, cacheLookupPolicy) {\r\n this.performanceClient.addQueueMeasurement(PerformanceEvents.AcquireTokenFromCache, commonRequest.correlationId);\r\n switch (cacheLookupPolicy) {\r\n case CacheLookupPolicy.Default:\r\n case CacheLookupPolicy.AccessToken:\r\n case CacheLookupPolicy.AccessTokenAndRefreshToken:\r\n const silentCacheClient = this.createSilentCacheClient(commonRequest.correlationId);\r\n return invokeAsync(silentCacheClient.acquireToken.bind(silentCacheClient), PerformanceEvents.SilentCacheClientAcquireToken, this.logger, this.performanceClient, commonRequest.correlationId)(commonRequest);\r\n default:\r\n throw createClientAuthError(tokenRefreshRequired);\r\n }\r\n }\r\n /**\r\n * Attempt to acquire an access token via a refresh token\r\n * @param commonRequest CommonSilentFlowRequest\r\n * @param cacheLookupPolicy CacheLookupPolicy\r\n * @returns A promise that, when resolved, returns the access token\r\n */\r\n async acquireTokenByRefreshToken(commonRequest, cacheLookupPolicy) {\r\n this.performanceClient.addQueueMeasurement(PerformanceEvents.AcquireTokenByRefreshToken, commonRequest.correlationId);\r\n switch (cacheLookupPolicy) {\r\n case CacheLookupPolicy.Default:\r\n case CacheLookupPolicy.AccessTokenAndRefreshToken:\r\n case CacheLookupPolicy.RefreshToken:\r\n case CacheLookupPolicy.RefreshTokenAndNetwork:\r\n const silentRefreshClient = this.createSilentRefreshClient(commonRequest.correlationId);\r\n return invokeAsync(silentRefreshClient.acquireToken.bind(silentRefreshClient), PerformanceEvents.SilentRefreshClientAcquireToken, this.logger, this.performanceClient, commonRequest.correlationId)(commonRequest);\r\n default:\r\n throw createClientAuthError(tokenRefreshRequired);\r\n }\r\n }\r\n /**\r\n * Attempt to acquire an access token via an iframe\r\n * @param request CommonSilentFlowRequest\r\n * @returns A promise that, when resolved, returns the access token\r\n */\r\n async acquireTokenBySilentIframe(request) {\r\n this.performanceClient.addQueueMeasurement(PerformanceEvents.AcquireTokenBySilentIframe, request.correlationId);\r\n const silentIframeClient = this.createSilentIframeClient(request.correlationId);\r\n return invokeAsync(silentIframeClient.acquireToken.bind(silentIframeClient), PerformanceEvents.SilentIframeClientAcquireToken, this.logger, this.performanceClient, request.correlationId)(request);\r\n }\r\n // #endregion\r\n // #region Logout\r\n /**\r\n * Deprecated logout function. Use logoutRedirect or logoutPopup instead\r\n * @param logoutRequest\r\n * @deprecated\r\n */\r\n async logout(logoutRequest) {\r\n const correlationId = this.getRequestCorrelationId(logoutRequest);\r\n this.logger.warning("logout API is deprecated and will be removed in msal-browser v3.0.0. Use logoutRedirect instead.", correlationId);\r\n return this.logoutRedirect({\r\n correlationId,\r\n ...logoutRequest,\r\n });\r\n }\r\n /**\r\n * Use to log out the current user, and redirect the user to the postLogoutRedirectUri.\r\n * Default behaviour is to redirect the user to `window.location.href`.\r\n * @param logoutRequest\r\n */\r\n async logoutRedirect(logoutRequest) {\r\n const correlationId = this.getRequestCorrelationId(logoutRequest);\r\n redirectPreflightCheck(this.initialized, this.config);\r\n this.browserStorage.setInteractionInProgress(true);\r\n const redirectClient = this.createRedirectClient(correlationId);\r\n return redirectClient.logout(logoutRequest);\r\n }\r\n /**\r\n * Clears local cache for the current user then opens a popup window prompting the user to sign-out of the server\r\n * @param logoutRequest\r\n */\r\n logoutPopup(logoutRequest) {\r\n try {\r\n const correlationId = this.getRequestCorrelationId(logoutRequest);\r\n preflightCheck(this.initialized);\r\n this.browserStorage.setInteractionInProgress(true);\r\n const popupClient = this.createPopupClient(correlationId);\r\n return popupClient.logout(logoutRequest);\r\n }\r\n catch (e) {\r\n // Since this function is syncronous we need to reject\r\n return Promise.reject(e);\r\n }\r\n }\r\n /**\r\n * Creates a cache interaction client to clear broswer cache.\r\n * @param logoutRequest\r\n */\r\n async clearCache(logoutRequest) {\r\n if (!this.isBrowserEnvironment) {\r\n this.logger.info("in non-browser environment, returning early.");\r\n return;\r\n }\r\n const correlationId = this.getRequestCorrelationId(logoutRequest);\r\n const cacheClient = this.createSilentCacheClient(correlationId);\r\n return cacheClient.logout(logoutRequest);\r\n }\r\n // #endregion\r\n // #region Account APIs\r\n /**\r\n * Returns all the accounts in the cache that match the optional filter. If no filter is provided, all accounts are returned.\r\n * @param accountFilter - (Optional) filter to narrow down the accounts returned\r\n * @returns Array of AccountInfo objects in cache\r\n */\r\n getAllAccounts(accountFilter) {\r\n return getAllAccounts(this.logger, this.browserStorage, this.isBrowserEnvironment, accountFilter);\r\n }\r\n /**\r\n * Returns the first account found in the cache that matches the account filter passed in.\r\n * @param accountFilter\r\n * @returns The first account found in the cache matching the provided filter or null if no account could be found.\r\n */\r\n getAccount(accountFilter) {\r\n return getAccount(accountFilter, this.logger, this.browserStorage);\r\n }\r\n /**\r\n * Returns the signed in account matching username.\r\n * (the account object is created at the time of successful login)\r\n * or null when no matching account is found.\r\n * This API is provided for convenience but getAccountById should be used for best reliability\r\n * @param username\r\n * @returns The account object stored in MSAL\r\n */\r\n getAccountByUsername(username) {\r\n return getAccountByUsername(username, this.logger, this.browserStorage);\r\n }\r\n /**\r\n * Returns the signed in account matching homeAccountId.\r\n * (the account object is created at the time of successful login)\r\n * or null when no matching account is found\r\n * @param homeAccountId\r\n * @returns The account object stored in MSAL\r\n */\r\n getAccountByHomeId(homeAccountId) {\r\n return getAccountByHomeId(homeAccountId, this.logger, this.browserStorage);\r\n }\r\n /**\r\n * Returns the signed in account matching localAccountId.\r\n * (the account object is created at the time of successful login)\r\n * or null when no matching account is found\r\n * @param localAccountId\r\n * @returns The account object stored in MSAL\r\n */\r\n getAccountByLocalId(localAccountId) {\r\n return getAccountByLocalId(localAccountId, this.logger, this.browserStorage);\r\n }\r\n /**\r\n * Sets the account to use as the active account. If no account is passed to the acquireToken APIs, then MSAL will use this active account.\r\n * @param account\r\n */\r\n setActiveAccount(account) {\r\n setActiveAccount(account, this.browserStorage);\r\n }\r\n /**\r\n * Gets the currently active account\r\n */\r\n getActiveAccount() {\r\n return getActiveAccount(this.browserStorage);\r\n }\r\n // #endregion\r\n /**\r\n * Hydrates the cache with the tokens from an AuthenticationResult\r\n * @param result\r\n * @param request\r\n * @returns\r\n */\r\n async hydrateCache(result, request) {\r\n this.logger.verbose("hydrateCache called");\r\n // Account gets saved to browser storage regardless of native or not\r\n const accountEntity = AccountEntity.createFromAccountInfo(result.account, result.cloudGraphHostName, result.msGraphHost);\r\n this.browserStorage.setAccount(accountEntity);\r\n if (result.fromNativeBroker) {\r\n this.logger.verbose("Response was from native broker, storing in-memory");\r\n // Tokens from native broker are stored in-memory\r\n return this.nativeInternalStorage.hydrateCache(result, request);\r\n }\r\n else {\r\n return this.browserStorage.hydrateCache(result, request);\r\n }\r\n }\r\n // #region Helpers\r\n /**\r\n * Acquire a token from native device (e.g. WAM)\r\n * @param request\r\n */\r\n async acquireTokenNative(request, apiId, accountId) {\r\n this.logger.trace("acquireTokenNative called");\r\n if (!this.nativeExtensionProvider) {\r\n throw createBrowserAuthError(nativeConnectionNotEstablished);\r\n }\r\n const nativeClient = new NativeInteractionClient(this.config, this.browserStorage, this.browserCrypto, this.logger, this.eventHandler, this.navigationClient, apiId, this.performanceClient, this.nativeExtensionProvider, accountId || this.getNativeAccountId(request), this.nativeInternalStorage, request.correlationId);\r\n return nativeClient.acquireToken(request);\r\n }\r\n /**\r\n * Returns boolean indicating if this request can use the native broker\r\n * @param request\r\n */\r\n canUseNative(request, accountId) {\r\n this.logger.trace("canUseNative called");\r\n if (!NativeMessageHandler.isNativeAvailable(this.config, this.logger, this.nativeExtensionProvider, request.authenticationScheme)) {\r\n this.logger.trace("canUseNative: isNativeAvailable returned false, returning false");\r\n return false;\r\n }\r\n if (request.prompt) {\r\n switch (request.prompt) {\r\n case PromptValue.NONE:\r\n case PromptValue.CONSENT:\r\n case PromptValue.LOGIN:\r\n this.logger.trace("canUseNative: prompt is compatible with native flow");\r\n break;\r\n default:\r\n this.logger.trace(`canUseNative: prompt = ${request.prompt} is not compatible with native flow, returning false`);\r\n return false;\r\n }\r\n }\r\n if (!accountId && !this.getNativeAccountId(request)) {\r\n this.logger.trace("canUseNative: nativeAccountId is not available, returning false");\r\n return false;\r\n }\r\n return true;\r\n }\r\n /**\r\n * Get the native accountId from the account\r\n * @param request\r\n * @returns\r\n */\r\n getNativeAccountId(request) {\r\n const account = request.account ||\r\n this.getAccount({\r\n loginHint: request.loginHint,\r\n sid: request.sid,\r\n }) ||\r\n this.getActiveAccount();\r\n return (account && account.nativeAccountId) || "";\r\n }\r\n /**\r\n * Returns new instance of the Popup Interaction Client\r\n * @param correlationId\r\n */\r\n createPopupClient(correlationId) {\r\n return new PopupClient(this.config, this.browserStorage, this.browserCrypto, this.logger, this.eventHandler, this.navigationClient, this.performanceClient, this.nativeInternalStorage, this.nativeExtensionProvider, correlationId);\r\n }\r\n /**\r\n * Returns new instance of the Redirect Interaction Client\r\n * @param correlationId\r\n */\r\n createRedirectClient(correlationId) {\r\n return new RedirectClient(this.config, this.browserStorage, this.browserCrypto, this.logger, this.eventHandler, this.navigationClient, this.performanceClient, this.nativeInternalStorage, this.nativeExtensionProvider, correlationId);\r\n }\r\n /**\r\n * Returns new instance of the Silent Iframe Interaction Client\r\n * @param correlationId\r\n */\r\n createSilentIframeClient(correlationId) {\r\n return new SilentIframeClient(this.config, this.browserStorage, this.browserCrypto, this.logger, this.eventHandler, this.navigationClient, ApiId.ssoSilent, this.performanceClient, this.nativeInternalStorage, this.nativeExtensionProvider, correlationId);\r\n }\r\n /**\r\n * Returns new instance of the Silent Cache Interaction Client\r\n */\r\n createSilentCacheClient(correlationId) {\r\n return new SilentCacheClient(this.config, this.browserStorage, this.browserCrypto, this.logger, this.eventHandler, this.navigationClient, this.performanceClient, this.nativeExtensionProvider, correlationId);\r\n }\r\n /**\r\n * Returns new instance of the Silent Refresh Interaction Client\r\n */\r\n createSilentRefreshClient(correlationId) {\r\n return new SilentRefreshClient(this.config, this.browserStorage, this.browserCrypto, this.logger, this.eventHandler, this.navigationClient, this.performanceClient, this.nativeExtensionProvider, correlationId);\r\n }\r\n /**\r\n * Returns new instance of the Silent AuthCode Interaction Client\r\n */\r\n createSilentAuthCodeClient(correlationId) {\r\n return new SilentAuthCodeClient(this.config, this.browserStorage, this.browserCrypto, this.logger, this.eventHandler, this.navigationClient, ApiId.acquireTokenByCode, this.performanceClient, this.nativeExtensionProvider, correlationId);\r\n }\r\n /**\r\n * Adds event callbacks to array\r\n * @param callback\r\n */\r\n addEventCallback(callback, eventTypes) {\r\n return this.eventHandler.addEventCallback(callback, eventTypes);\r\n }\r\n /**\r\n * Removes callback with provided id from callback array\r\n * @param callbackId\r\n */\r\n removeEventCallback(callbackId) {\r\n this.eventHandler.removeEventCallback(callbackId);\r\n }\r\n /**\r\n * Registers a callback to receive performance events.\r\n *\r\n * @param {PerformanceCallbackFunction} callback\r\n * @returns {string}\r\n */\r\n addPerformanceCallback(callback) {\r\n blockNonBrowserEnvironment();\r\n return this.performanceClient.addPerformanceCallback(callback);\r\n }\r\n /**\r\n * Removes a callback registered with addPerformanceCallback.\r\n *\r\n * @param {string} callbackId\r\n * @returns {boolean}\r\n */\r\n removePerformanceCallback(callbackId) {\r\n return this.performanceClient.removePerformanceCallback(callbackId);\r\n }\r\n /**\r\n * Adds event listener that emits an event when a user account is added or removed from localstorage in a different browser tab or window\r\n */\r\n enableAccountStorageEvents() {\r\n if (typeof window === "undefined") {\r\n return;\r\n }\r\n if (!this.listeningToStorageEvents) {\r\n this.logger.verbose("Adding account storage listener.");\r\n this.listeningToStorageEvents = true;\r\n window.addEventListener("storage", this.handleAccountCacheChange);\r\n }\r\n else {\r\n this.logger.verbose("Account storage listener already registered.");\r\n }\r\n }\r\n /**\r\n * Removes event listener that emits an event when a user account is added or removed from localstorage in a different browser tab or window\r\n */\r\n disableAccountStorageEvents() {\r\n if (typeof window === "undefined") {\r\n return;\r\n }\r\n if (this.listeningToStorageEvents) {\r\n this.logger.verbose("Removing account storage listener.");\r\n window.removeEventListener("storage", this.handleAccountCacheChange);\r\n this.listeningToStorageEvents = false;\r\n }\r\n else {\r\n this.logger.verbose("No account storage listener registered.");\r\n }\r\n }\r\n /**\r\n * Emit account added/removed events when cached accounts are changed in a different tab or frame\r\n */\r\n handleAccountCacheChange(e) {\r\n try {\r\n // Handle active account filter change\r\n if (e.key?.includes(PersistentCacheKeys.ACTIVE_ACCOUNT_FILTERS)) {\r\n // This event has no payload, it only signals cross-tab app instances that the results of calling getActiveAccount() will have changed\r\n this.eventHandler.emitEvent(EventType.ACTIVE_ACCOUNT_CHANGED);\r\n }\r\n // Handle account object change\r\n const cacheValue = e.newValue || e.oldValue;\r\n if (!cacheValue) {\r\n return;\r\n }\r\n const parsedValue = JSON.parse(cacheValue);\r\n if (typeof parsedValue !== "object" ||\r\n !AccountEntity.isAccountEntity(parsedValue)) {\r\n return;\r\n }\r\n const accountEntity = CacheManager.toObject(new AccountEntity(), parsedValue);\r\n const accountInfo = accountEntity.getAccountInfo();\r\n if (!e.oldValue && e.newValue) {\r\n this.logger.info("Account was added to cache in a different window");\r\n this.eventHandler.emitEvent(EventType.ACCOUNT_ADDED, undefined, accountInfo);\r\n }\r\n else if (!e.newValue && e.oldValue) {\r\n this.logger.info("Account was removed from cache in a different window");\r\n this.eventHandler.emitEvent(EventType.ACCOUNT_REMOVED, undefined, accountInfo);\r\n }\r\n }\r\n catch (e) {\r\n return;\r\n }\r\n }\r\n /**\r\n * Gets the token cache for the application.\r\n */\r\n getTokenCache() {\r\n return this.tokenCache;\r\n }\r\n /**\r\n * Returns the logger instance\r\n */\r\n getLogger() {\r\n return this.logger;\r\n }\r\n /**\r\n * Replaces the default logger set in configurations with new Logger with new configurations\r\n * @param logger Logger instance\r\n */\r\n setLogger(logger) {\r\n this.logger = logger;\r\n }\r\n /**\r\n * Called by wrapper libraries (Angular & React) to set SKU and Version passed down to telemetry, logger, etc.\r\n * @param sku\r\n * @param version\r\n */\r\n initializeWrapperLibrary(sku, version) {\r\n // Validate the SKU passed in is one we expect\r\n this.browserStorage.setWrapperMetadata(sku, version);\r\n }\r\n /**\r\n * Sets navigation client\r\n * @param navigationClient\r\n */\r\n setNavigationClient(navigationClient) {\r\n this.navigationClient = navigationClient;\r\n }\r\n /**\r\n * Returns the configuration object\r\n */\r\n getConfiguration() {\r\n return this.config;\r\n }\r\n /**\r\n * Returns the performance client\r\n */\r\n getPerformanceClient() {\r\n return this.performanceClient;\r\n }\r\n /**\r\n * Returns the browser env indicator\r\n */\r\n isBrowserEnv() {\r\n return this.isBrowserEnvironment;\r\n }\r\n /**\r\n * Generates a correlation id for a request if none is provided.\r\n *\r\n * @protected\r\n * @param {?Partial} [request]\r\n * @returns {string}\r\n */\r\n getRequestCorrelationId(request) {\r\n if (request?.correlationId) {\r\n return request.correlationId;\r\n }\r\n if (this.isBrowserEnvironment) {\r\n return createNewGuid();\r\n }\r\n /*\r\n * Included for fallback for non-browser environments,\r\n * and to ensure this method always returns a string.\r\n */\r\n return Constants.EMPTY_STRING;\r\n }\r\n // #endregion\r\n /**\r\n * Use when initiating the login process by redirecting the user\'s browser to the authorization endpoint. This function redirects the page, so\r\n * any code that follows this function will not execute.\r\n *\r\n * IMPORTANT: It is NOT recommended to have code that is dependent on the resolution of the Promise. This function will navigate away from the current\r\n * browser window. It currently returns a Promise in order to reflect the asynchronous nature of the code running in this function.\r\n *\r\n * @param request\r\n */\r\n async loginRedirect(request) {\r\n const correlationId = this.getRequestCorrelationId(request);\r\n this.logger.verbose("loginRedirect called", correlationId);\r\n return this.acquireTokenRedirect({\r\n correlationId,\r\n ...(request || DEFAULT_REQUEST),\r\n });\r\n }\r\n /**\r\n * Use when initiating the login process via opening a popup window in the user\'s browser\r\n *\r\n * @param request\r\n *\r\n * @returns A promise that is fulfilled when this function has completed, or rejected if an error was raised.\r\n */\r\n loginPopup(request) {\r\n const correlationId = this.getRequestCorrelationId(request);\r\n this.logger.verbose("loginPopup called", correlationId);\r\n return this.acquireTokenPopup({\r\n correlationId,\r\n ...(request || DEFAULT_REQUEST),\r\n });\r\n }\r\n /**\r\n * Silently acquire an access token for a given set of scopes. Returns currently processing promise if parallel requests are made.\r\n *\r\n * @param {@link (SilentRequest:type)}\r\n * @returns {Promise.} - a promise that is fulfilled when this function has completed, or rejected if an error was raised. Returns the {@link AuthResponse} object\r\n */\r\n async acquireTokenSilent(request) {\r\n const correlationId = this.getRequestCorrelationId(request);\r\n const atsMeasurement = this.performanceClient.startMeasurement(PerformanceEvents.AcquireTokenSilent, correlationId);\r\n atsMeasurement.add({\r\n cacheLookupPolicy: request.cacheLookupPolicy,\r\n scenarioId: request.scenarioId,\r\n });\r\n StandardController_preflightCheck(this.initialized, atsMeasurement);\r\n this.logger.verbose("acquireTokenSilent called", correlationId);\r\n const account = request.account || this.getActiveAccount();\r\n if (!account) {\r\n throw createBrowserAuthError(noAccountError);\r\n }\r\n atsMeasurement.add({ accountType: getAccountType(account) });\r\n const thumbprint = {\r\n clientId: this.config.auth.clientId,\r\n authority: request.authority || Constants.EMPTY_STRING,\r\n scopes: request.scopes,\r\n homeAccountIdentifier: account.homeAccountId,\r\n claims: request.claims,\r\n authenticationScheme: request.authenticationScheme,\r\n resourceRequestMethod: request.resourceRequestMethod,\r\n resourceRequestUri: request.resourceRequestUri,\r\n shrClaims: request.shrClaims,\r\n sshKid: request.sshKid,\r\n shrOptions: request.shrOptions,\r\n };\r\n const silentRequestKey = JSON.stringify(thumbprint);\r\n const cachedResponse = this.activeSilentTokenRequests.get(silentRequestKey);\r\n if (typeof cachedResponse === "undefined") {\r\n this.logger.verbose("acquireTokenSilent called for the first time, storing active request", correlationId);\r\n const response = invokeAsync(this.acquireTokenSilentAsync.bind(this), PerformanceEvents.AcquireTokenSilentAsync, this.logger, this.performanceClient, correlationId)({\r\n ...request,\r\n correlationId,\r\n }, account)\r\n .then((result) => {\r\n this.activeSilentTokenRequests.delete(silentRequestKey);\r\n atsMeasurement.end({\r\n success: true,\r\n fromCache: result.fromCache,\r\n isNativeBroker: result.fromNativeBroker,\r\n cacheLookupPolicy: request.cacheLookupPolicy,\r\n accessTokenSize: result.accessToken.length,\r\n idTokenSize: result.idToken.length,\r\n });\r\n return result;\r\n })\r\n .catch((error) => {\r\n this.activeSilentTokenRequests.delete(silentRequestKey);\r\n atsMeasurement.end({\r\n success: false,\r\n }, error);\r\n throw error;\r\n });\r\n this.activeSilentTokenRequests.set(silentRequestKey, response);\r\n return {\r\n ...(await response),\r\n state: request.state,\r\n };\r\n }\r\n else {\r\n this.logger.verbose("acquireTokenSilent has been called previously, returning the result from the first call", correlationId);\r\n // Discard measurements for memoized calls, as they are usually only a couple of ms and will artificially deflate metrics\r\n atsMeasurement.discard();\r\n return {\r\n ...(await cachedResponse),\r\n state: request.state,\r\n };\r\n }\r\n }\r\n /**\r\n * Silently acquire an access token for a given set of scopes. Will use cached token if available, otherwise will attempt to acquire a new token from the network via refresh token.\r\n * @param {@link (SilentRequest:type)}\r\n * @param {@link (AccountInfo:type)}\r\n * @returns {Promise.} - a promise that is fulfilled when this function has completed, or rejected if an error was raised. Returns the {@link AuthResponse}\r\n */\r\n async acquireTokenSilentAsync(request, account) {\r\n const trackPageVisibility = () => this.trackPageVisibility(request.correlationId);\r\n this.performanceClient.addQueueMeasurement(PerformanceEvents.AcquireTokenSilentAsync, request.correlationId);\r\n this.eventHandler.emitEvent(EventType.ACQUIRE_TOKEN_START, InteractionType.Silent, request);\r\n if (request.correlationId) {\r\n this.performanceClient.incrementFields({ visibilityChangeCount: 0 }, request.correlationId);\r\n }\r\n document.addEventListener("visibilitychange", trackPageVisibility);\r\n const silentRequest = await invokeAsync(initializeSilentRequest, PerformanceEvents.InitializeSilentRequest, this.logger, this.performanceClient, request.correlationId)(request, account, this.config, this.performanceClient, this.logger);\r\n const cacheLookupPolicy = request.cacheLookupPolicy || CacheLookupPolicy.Default;\r\n const result = this.acquireTokenSilentNoIframe(silentRequest, cacheLookupPolicy).catch(async (refreshTokenError) => {\r\n const shouldTryToResolveSilently = checkIfRefreshTokenErrorCanBeResolvedSilently(refreshTokenError, cacheLookupPolicy);\r\n if (shouldTryToResolveSilently) {\r\n if (!this.activeIframeRequest) {\r\n let _resolve;\r\n // Always set the active request tracker immediately after checking it to prevent races\r\n this.activeIframeRequest = [\r\n new Promise((resolve) => {\r\n _resolve = resolve;\r\n }),\r\n silentRequest.correlationId,\r\n ];\r\n this.logger.verbose("Refresh token expired/invalid or CacheLookupPolicy is set to Skip, attempting acquire token by iframe.", silentRequest.correlationId);\r\n return invokeAsync(this.acquireTokenBySilentIframe.bind(this), PerformanceEvents.AcquireTokenBySilentIframe, this.logger, this.performanceClient, silentRequest.correlationId)(silentRequest)\r\n .then((iframeResult) => {\r\n _resolve(true);\r\n return iframeResult;\r\n })\r\n .catch((e) => {\r\n _resolve(false);\r\n throw e;\r\n })\r\n .finally(() => {\r\n this.activeIframeRequest = undefined;\r\n });\r\n }\r\n else if (cacheLookupPolicy !== CacheLookupPolicy.Skip) {\r\n const [activePromise, activeCorrelationId] = this.activeIframeRequest;\r\n this.logger.verbose(`Iframe request is already in progress, awaiting resolution for request with correlationId: ${activeCorrelationId}`, silentRequest.correlationId);\r\n const awaitConcurrentIframeMeasure = this.performanceClient.startMeasurement(PerformanceEvents.AwaitConcurrentIframe, silentRequest.correlationId);\r\n awaitConcurrentIframeMeasure.add({\r\n awaitIframeCorrelationId: activeCorrelationId,\r\n });\r\n const activePromiseResult = await activePromise;\r\n awaitConcurrentIframeMeasure.end({\r\n success: activePromiseResult,\r\n });\r\n if (activePromiseResult) {\r\n this.logger.verbose(`Parallel iframe request with correlationId: ${activeCorrelationId} succeeded. Retrying cache and/or RT redemption`, silentRequest.correlationId);\r\n // Retry cache lookup and/or RT exchange after iframe completes\r\n return this.acquireTokenSilentNoIframe(silentRequest, cacheLookupPolicy);\r\n }\r\n else {\r\n this.logger.info(`Iframe request with correlationId: ${activeCorrelationId} failed. Interaction is required.`);\r\n // If previous iframe request failed, it\'s unlikely to succeed this time. Throw original error.\r\n throw refreshTokenError;\r\n }\r\n }\r\n else {\r\n // Cache policy set to skip and another iframe request is already in progress\r\n this.logger.warning("Another iframe request is currently in progress and CacheLookupPolicy is set to Skip. This may result in degraded performance and/or reliability for both calls. Please consider changing the CacheLookupPolicy to take advantage of request queuing and token cache.", silentRequest.correlationId);\r\n return invokeAsync(this.acquireTokenBySilentIframe.bind(this), PerformanceEvents.AcquireTokenBySilentIframe, this.logger, this.performanceClient, silentRequest.correlationId)(silentRequest);\r\n }\r\n }\r\n else {\r\n // Error cannot be silently resolved or iframe renewal is not allowed, interaction required\r\n throw refreshTokenError;\r\n }\r\n });\r\n return result\r\n .then((response) => {\r\n this.eventHandler.emitEvent(EventType.ACQUIRE_TOKEN_SUCCESS, InteractionType.Silent, response);\r\n if (request.correlationId) {\r\n this.performanceClient.addFields({\r\n fromCache: response.fromCache,\r\n isNativeBroker: response.fromNativeBroker,\r\n }, request.correlationId);\r\n }\r\n return response;\r\n })\r\n .catch((tokenRenewalError) => {\r\n this.eventHandler.emitEvent(EventType.ACQUIRE_TOKEN_FAILURE, InteractionType.Silent, null, tokenRenewalError);\r\n throw tokenRenewalError;\r\n })\r\n .finally(() => {\r\n document.removeEventListener("visibilitychange", trackPageVisibility);\r\n });\r\n }\r\n /**\r\n * AcquireTokenSilent without the iframe fallback. This is used to enable the correct fallbacks in cases where there\'s a potential for multiple silent requests to be made in parallel and prevent those requests from making concurrent iframe requests.\r\n * @param silentRequest\r\n * @param cacheLookupPolicy\r\n * @returns\r\n */\r\n async acquireTokenSilentNoIframe(silentRequest, cacheLookupPolicy) {\r\n if (NativeMessageHandler.isNativeAvailable(this.config, this.logger, this.nativeExtensionProvider, silentRequest.authenticationScheme) &&\r\n silentRequest.account.nativeAccountId) {\r\n this.logger.verbose("acquireTokenSilent - attempting to acquire token from native platform");\r\n return this.acquireTokenNative(silentRequest, ApiId.acquireTokenSilent_silentFlow).catch(async (e) => {\r\n // If native token acquisition fails for availability reasons fallback to web flow\r\n if (e instanceof NativeAuthError && isFatalNativeAuthError(e)) {\r\n this.logger.verbose("acquireTokenSilent - native platform unavailable, falling back to web flow");\r\n this.nativeExtensionProvider = undefined; // Prevent future requests from continuing to attempt\r\n // Cache will not contain tokens, given that previous WAM requests succeeded. Skip cache and RT renewal and go straight to iframe renewal\r\n throw createClientAuthError(tokenRefreshRequired);\r\n }\r\n throw e;\r\n });\r\n }\r\n else {\r\n this.logger.verbose("acquireTokenSilent - attempting to acquire token from web flow");\r\n return invokeAsync(this.acquireTokenFromCache.bind(this), PerformanceEvents.AcquireTokenFromCache, this.logger, this.performanceClient, silentRequest.correlationId)(silentRequest, cacheLookupPolicy).catch((cacheError) => {\r\n if (cacheLookupPolicy === CacheLookupPolicy.AccessToken) {\r\n throw cacheError;\r\n }\r\n this.eventHandler.emitEvent(EventType.ACQUIRE_TOKEN_NETWORK_START, InteractionType.Silent, silentRequest);\r\n return invokeAsync(this.acquireTokenByRefreshToken.bind(this), PerformanceEvents.AcquireTokenByRefreshToken, this.logger, this.performanceClient, silentRequest.correlationId)(silentRequest, cacheLookupPolicy);\r\n });\r\n }\r\n }\r\n}\r\n/**\r\n * Determines whether an error thrown by the refresh token endpoint can be resolved without interaction\r\n * @param refreshTokenError\r\n * @param silentRequest\r\n * @param cacheLookupPolicy\r\n * @returns\r\n */\r\nfunction checkIfRefreshTokenErrorCanBeResolvedSilently(refreshTokenError, cacheLookupPolicy) {\r\n const noInteractionRequired = !(refreshTokenError instanceof InteractionRequiredAuthError &&\r\n // For refresh token errors, bad_token does not always require interaction (silently resolvable)\r\n refreshTokenError.subError !==\r\n badToken);\r\n // Errors that result when the refresh token needs to be replaced\r\n const refreshTokenRefreshRequired = refreshTokenError.errorCode === BrowserConstants.INVALID_GRANT_ERROR ||\r\n refreshTokenError.errorCode ===\r\n tokenRefreshRequired;\r\n // Errors that may be resolved before falling back to interaction (through iframe renewal)\r\n const isSilentlyResolvable = (noInteractionRequired && refreshTokenRefreshRequired) ||\r\n refreshTokenError.errorCode ===\r\n noTokensFound ||\r\n refreshTokenError.errorCode ===\r\n refreshTokenExpired;\r\n // Only these policies allow for an iframe renewal attempt\r\n const tryIframeRenewal = iFrameRenewalPolicies.includes(cacheLookupPolicy);\r\n return isSilentlyResolvable && tryIframeRenewal;\r\n}\n\n\n//# sourceMappingURL=StandardController.mjs.map\n\n;// ./node_modules/@azure/msal-browser/dist/naa/BridgeError.mjs\n/*! @azure/msal-browser v3.28.1 2025-01-14 */\n\n/*\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License.\r\n */\r\nfunction isBridgeError(error) {\r\n return error.status !== undefined;\r\n}\n\n\n//# sourceMappingURL=BridgeError.mjs.map\n\n;// ./node_modules/@azure/msal-browser/dist/naa/mapping/NestedAppAuthAdapter.mjs\n/*! @azure/msal-browser v3.28.1 2025-01-14 */\n\n\n\n\n\n/*\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License.\r\n */\r\nclass NestedAppAuthAdapter {\r\n constructor(clientId, clientCapabilities, crypto, logger) {\r\n this.clientId = clientId;\r\n this.clientCapabilities = clientCapabilities;\r\n this.crypto = crypto;\r\n this.logger = logger;\r\n }\r\n toNaaTokenRequest(request) {\r\n let extraParams;\r\n if (request.extraQueryParameters === undefined) {\r\n extraParams = new Map();\r\n }\r\n else {\r\n extraParams = new Map(Object.entries(request.extraQueryParameters));\r\n }\r\n const correlationId = request.correlationId || this.crypto.createNewGuid();\r\n const requestBuilder = new RequestParameterBuilder(correlationId);\r\n const claims = requestBuilder.addClientCapabilitiesToClaims(request.claims, this.clientCapabilities);\r\n const scopes = request.scopes || OIDC_DEFAULT_SCOPES;\r\n const tokenRequest = {\r\n platformBrokerId: request.account?.homeAccountId,\r\n clientId: this.clientId,\r\n authority: request.authority,\r\n scope: scopes.join(" "),\r\n correlationId,\r\n claims: !StringUtils.isEmptyObj(claims) ? claims : undefined,\r\n state: request.state,\r\n authenticationScheme: request.authenticationScheme || AuthenticationScheme.BEARER,\r\n extraParameters: extraParams,\r\n };\r\n return tokenRequest;\r\n }\r\n fromNaaTokenResponse(request, response, reqTimestamp) {\r\n if (!response.token.id_token || !response.token.access_token) {\r\n throw createClientAuthError(nullOrEmptyToken);\r\n }\r\n const expiresOn = new Date((reqTimestamp + (response.token.expires_in || 0)) * 1000);\r\n const idTokenClaims = extractTokenClaims(response.token.id_token, this.crypto.base64Decode);\r\n const account = this.fromNaaAccountInfo(response.account, response.token.id_token, idTokenClaims);\r\n const scopes = response.token.scope || request.scope;\r\n const authenticationResult = {\r\n authority: response.token.authority || account.environment,\r\n uniqueId: account.localAccountId,\r\n tenantId: account.tenantId,\r\n scopes: scopes.split(" "),\r\n account,\r\n idToken: response.token.id_token,\r\n idTokenClaims,\r\n accessToken: response.token.access_token,\r\n fromCache: false,\r\n expiresOn: expiresOn,\r\n tokenType: request.authenticationScheme || AuthenticationScheme.BEARER,\r\n correlationId: request.correlationId,\r\n extExpiresOn: expiresOn,\r\n state: request.state,\r\n };\r\n return authenticationResult;\r\n }\r\n /*\r\n * export type AccountInfo = {\r\n * homeAccountId: string;\r\n * environment: string;\r\n * tenantId: string;\r\n * username: string;\r\n * localAccountId: string;\r\n * name?: string;\r\n * idToken?: string;\r\n * idTokenClaims?: TokenClaims & {\r\n * [key: string]:\r\n * | string\r\n * | number\r\n * | string[]\r\n * | object\r\n * | undefined\r\n * | unknown;\r\n * };\r\n * nativeAccountId?: string;\r\n * authorityType?: string;\r\n * };\r\n */\r\n fromNaaAccountInfo(fromAccount, idToken, idTokenClaims) {\r\n const effectiveIdTokenClaims = idTokenClaims || fromAccount.idTokenClaims;\r\n const localAccountId = fromAccount.localAccountId ||\r\n effectiveIdTokenClaims?.oid ||\r\n effectiveIdTokenClaims?.sub ||\r\n "";\r\n const tenantId = fromAccount.tenantId || effectiveIdTokenClaims?.tid || "";\r\n const homeAccountId = fromAccount.homeAccountId || `${localAccountId}.${tenantId}`;\r\n const username = fromAccount.username ||\r\n effectiveIdTokenClaims?.preferred_username ||\r\n "";\r\n const name = fromAccount.name || effectiveIdTokenClaims?.name;\r\n const tenantProfiles = new Map();\r\n const tenantProfile = buildTenantProfile(homeAccountId, localAccountId, tenantId, effectiveIdTokenClaims);\r\n tenantProfiles.set(tenantId, tenantProfile);\r\n const account = {\r\n homeAccountId,\r\n environment: fromAccount.environment,\r\n tenantId,\r\n username,\r\n localAccountId,\r\n name,\r\n idToken: idToken,\r\n idTokenClaims: effectiveIdTokenClaims,\r\n tenantProfiles,\r\n };\r\n return account;\r\n }\r\n /**\r\n *\r\n * @param error BridgeError\r\n * @returns AuthError, ClientAuthError, ClientConfigurationError, ServerError, InteractionRequiredError\r\n */\r\n fromBridgeError(error) {\r\n if (isBridgeError(error)) {\r\n switch (error.status) {\r\n case BridgeStatusCode.UserCancel:\r\n return new ClientAuthError(userCanceled);\r\n case BridgeStatusCode.NoNetwork:\r\n return new ClientAuthError(noNetworkConnectivity);\r\n case BridgeStatusCode.AccountUnavailable:\r\n return new ClientAuthError(noAccountFound);\r\n case BridgeStatusCode.Disabled:\r\n return new ClientAuthError(nestedAppAuthBridgeDisabled);\r\n case BridgeStatusCode.NestedAppAuthUnavailable:\r\n return new ClientAuthError(error.code ||\r\n nestedAppAuthBridgeDisabled, error.description);\r\n case BridgeStatusCode.TransientError:\r\n case BridgeStatusCode.PersistentError:\r\n return new ServerError(error.code, error.description);\r\n case BridgeStatusCode.UserInteractionRequired:\r\n return new InteractionRequiredAuthError(error.code, error.description);\r\n default:\r\n return new AuthError(error.code, error.description);\r\n }\r\n }\r\n else {\r\n return new AuthError("unknown_error", "An unknown error occurred");\r\n }\r\n }\r\n /**\r\n * Returns an AuthenticationResult from the given cache items\r\n *\r\n * @param account\r\n * @param idToken\r\n * @param accessToken\r\n * @param reqTimestamp\r\n * @returns\r\n */\r\n toAuthenticationResultFromCache(account, idToken, accessToken, request, correlationId) {\r\n if (!idToken || !accessToken) {\r\n throw createClientAuthError(nullOrEmptyToken);\r\n }\r\n const idTokenClaims = extractTokenClaims(idToken.secret, this.crypto.base64Decode);\r\n const scopes = accessToken.target || request.scopes.join(" ");\r\n const authenticationResult = {\r\n authority: accessToken.environment || account.environment,\r\n uniqueId: account.localAccountId,\r\n tenantId: account.tenantId,\r\n scopes: scopes.split(" "),\r\n account,\r\n idToken: idToken.secret,\r\n idTokenClaims: idTokenClaims || {},\r\n accessToken: accessToken.secret,\r\n fromCache: true,\r\n expiresOn: new Date(Number(accessToken.expiresOn) * 1000),\r\n tokenType: request.authenticationScheme || AuthenticationScheme.BEARER,\r\n correlationId,\r\n extExpiresOn: new Date(Number(accessToken.extendedExpiresOn) * 1000),\r\n state: request.state,\r\n };\r\n return authenticationResult;\r\n }\r\n}\n\n\n//# sourceMappingURL=NestedAppAuthAdapter.mjs.map\n\n;// ./node_modules/@azure/msal-browser/dist/error/NestedAppAuthError.mjs\n/*! @azure/msal-browser v3.28.1 2025-01-14 */\n\n\n\n/*\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License.\r\n */\r\n/**\r\n * NestedAppAuthErrorMessage class containing string constants used by error codes and messages.\r\n */\r\nconst NestedAppAuthErrorMessage = {\r\n unsupportedMethod: {\r\n code: "unsupported_method",\r\n desc: "This method is not supported in nested app environment.",\r\n },\r\n};\r\nclass NestedAppAuthError extends AuthError {\r\n constructor(errorCode, errorMessage) {\r\n super(errorCode, errorMessage);\r\n Object.setPrototypeOf(this, NestedAppAuthError.prototype);\r\n this.name = "NestedAppAuthError";\r\n }\r\n static createUnsupportedError() {\r\n return new NestedAppAuthError(NestedAppAuthErrorMessage.unsupportedMethod.code, NestedAppAuthErrorMessage.unsupportedMethod.desc);\r\n }\r\n}\n\n\n//# sourceMappingURL=NestedAppAuthError.mjs.map\n\n;// ./node_modules/@azure/msal-browser/dist/controllers/NestedAppAuthController.mjs\n/*! @azure/msal-browser v3.28.1 2025-01-14 */\n\n\n\n\n\n\n\n\n\n\n\n/*\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License.\r\n */\r\nclass NestedAppAuthController {\r\n constructor(operatingContext) {\r\n this.operatingContext = operatingContext;\r\n const proxy = this.operatingContext.getBridgeProxy();\r\n if (proxy !== undefined) {\r\n this.bridgeProxy = proxy;\r\n }\r\n else {\r\n throw new Error("unexpected: bridgeProxy is undefined");\r\n }\r\n // Set the configuration.\r\n this.config = operatingContext.getConfig();\r\n // Initialize logger\r\n this.logger = this.operatingContext.getLogger();\r\n // Initialize performance client\r\n this.performanceClient = this.config.telemetry.client;\r\n // Initialize the crypto class.\r\n this.browserCrypto = operatingContext.isBrowserEnvironment()\r\n ? new CryptoOps(this.logger, this.performanceClient, true)\r\n : DEFAULT_CRYPTO_IMPLEMENTATION;\r\n // Initialize the browser storage class.\r\n this.browserStorage = this.operatingContext.isBrowserEnvironment()\r\n ? new BrowserCacheManager(this.config.auth.clientId, this.config.cache, this.browserCrypto, this.logger, buildStaticAuthorityOptions(this.config.auth))\r\n : DEFAULT_BROWSER_CACHE_MANAGER(this.config.auth.clientId, this.logger);\r\n this.eventHandler = new EventHandler(this.logger);\r\n this.nestedAppAuthAdapter = new NestedAppAuthAdapter(this.config.auth.clientId, this.config.auth.clientCapabilities, this.browserCrypto, this.logger);\r\n // Set the active account if available\r\n const accountContext = this.bridgeProxy.getAccountContext();\r\n if (accountContext) {\r\n const cachedAccount = getAccount(accountContext, this.logger, this.browserStorage);\r\n setActiveAccount(cachedAccount, this.browserStorage);\r\n }\r\n }\r\n /**\r\n * Factory function to create a new instance of NestedAppAuthController\r\n * @param operatingContext\r\n * @returns Promise\r\n */\r\n static async createController(operatingContext) {\r\n const controller = new NestedAppAuthController(operatingContext);\r\n return Promise.resolve(controller);\r\n }\r\n /**\r\n * Specific implementation of initialize function for NestedAppAuthController\r\n * @returns\r\n */\r\n initialize() {\r\n // do nothing not required by this controller\r\n return Promise.resolve();\r\n }\r\n /**\r\n * Validate the incoming request and add correlationId if not present\r\n * @param request\r\n * @returns\r\n */\r\n ensureValidRequest(request) {\r\n if (request?.correlationId) {\r\n return request;\r\n }\r\n return {\r\n ...request,\r\n correlationId: this.browserCrypto.createNewGuid(),\r\n };\r\n }\r\n /**\r\n * Internal implementation of acquireTokenInteractive flow\r\n * @param request\r\n * @returns\r\n */\r\n async acquireTokenInteractive(request) {\r\n const validRequest = this.ensureValidRequest(request);\r\n this.eventHandler.emitEvent(EventType.ACQUIRE_TOKEN_START, InteractionType.Popup, validRequest);\r\n const atPopupMeasurement = this.performanceClient.startMeasurement(PerformanceEvents.AcquireTokenPopup, validRequest.correlationId);\r\n atPopupMeasurement?.add({ nestedAppAuthRequest: true });\r\n try {\r\n const naaRequest = this.nestedAppAuthAdapter.toNaaTokenRequest(validRequest);\r\n const reqTimestamp = nowSeconds();\r\n const response = await this.bridgeProxy.getTokenInteractive(naaRequest);\r\n const result = {\r\n ...this.nestedAppAuthAdapter.fromNaaTokenResponse(naaRequest, response, reqTimestamp),\r\n };\r\n // cache the tokens in the response\r\n await this.hydrateCache(result, request);\r\n this.browserStorage.setActiveAccount(result.account);\r\n this.eventHandler.emitEvent(EventType.ACQUIRE_TOKEN_SUCCESS, InteractionType.Popup, result);\r\n atPopupMeasurement.add({\r\n accessTokenSize: result.accessToken.length,\r\n idTokenSize: result.idToken.length,\r\n });\r\n atPopupMeasurement.end({\r\n success: true,\r\n requestId: result.requestId,\r\n });\r\n return result;\r\n }\r\n catch (e) {\r\n const error = this.nestedAppAuthAdapter.fromBridgeError(e);\r\n this.eventHandler.emitEvent(EventType.ACQUIRE_TOKEN_FAILURE, InteractionType.Popup, null, e);\r\n atPopupMeasurement.end({\r\n success: false,\r\n }, e);\r\n throw error;\r\n }\r\n }\r\n /**\r\n * Internal implementation of acquireTokenSilent flow\r\n * @param request\r\n * @returns\r\n */\r\n async acquireTokenSilentInternal(request) {\r\n const validRequest = this.ensureValidRequest(request);\r\n this.eventHandler.emitEvent(EventType.ACQUIRE_TOKEN_START, InteractionType.Silent, validRequest);\r\n // Look for tokens in the cache first\r\n const result = await this.acquireTokenFromCache(validRequest);\r\n if (result) {\r\n this.eventHandler.emitEvent(EventType.ACQUIRE_TOKEN_SUCCESS, InteractionType.Silent, result);\r\n return result;\r\n }\r\n // proceed with acquiring tokens via the host\r\n const ssoSilentMeasurement = this.performanceClient.startMeasurement(PerformanceEvents.SsoSilent, validRequest.correlationId);\r\n ssoSilentMeasurement?.increment({\r\n visibilityChangeCount: 0,\r\n });\r\n ssoSilentMeasurement?.add({\r\n nestedAppAuthRequest: true,\r\n });\r\n try {\r\n const naaRequest = this.nestedAppAuthAdapter.toNaaTokenRequest(validRequest);\r\n const reqTimestamp = nowSeconds();\r\n const response = await this.bridgeProxy.getTokenSilent(naaRequest);\r\n const result = this.nestedAppAuthAdapter.fromNaaTokenResponse(naaRequest, response, reqTimestamp);\r\n // cache the tokens in the response\r\n await this.hydrateCache(result, request);\r\n this.browserStorage.setActiveAccount(result.account);\r\n this.eventHandler.emitEvent(EventType.ACQUIRE_TOKEN_SUCCESS, InteractionType.Silent, result);\r\n ssoSilentMeasurement?.add({\r\n accessTokenSize: result.accessToken.length,\r\n idTokenSize: result.idToken.length,\r\n });\r\n ssoSilentMeasurement?.end({\r\n success: true,\r\n requestId: result.requestId,\r\n });\r\n return result;\r\n }\r\n catch (e) {\r\n const error = this.nestedAppAuthAdapter.fromBridgeError(e);\r\n this.eventHandler.emitEvent(EventType.ACQUIRE_TOKEN_FAILURE, InteractionType.Silent, null, e);\r\n ssoSilentMeasurement?.end({\r\n success: false,\r\n }, e);\r\n throw error;\r\n }\r\n }\r\n /**\r\n * acquires tokens from cache\r\n * @param request\r\n * @returns\r\n */\r\n async acquireTokenFromCache(request) {\r\n const atsMeasurement = this.performanceClient.startMeasurement(PerformanceEvents.AcquireTokenSilent, request.correlationId);\r\n atsMeasurement?.add({\r\n nestedAppAuthRequest: true,\r\n });\r\n // if the request has claims, we cannot look up in the cache\r\n if (request.claims) {\r\n this.logger.verbose("Claims are present in the request, skipping cache lookup");\r\n return null;\r\n }\r\n // respect cache lookup policy\r\n let result = null;\r\n switch (request.cacheLookupPolicy) {\r\n case CacheLookupPolicy.Default:\r\n case CacheLookupPolicy.AccessToken:\r\n case CacheLookupPolicy.AccessTokenAndRefreshToken:\r\n result = await this.acquireTokenFromCacheInternal(request);\r\n break;\r\n default:\r\n return null;\r\n }\r\n if (result) {\r\n this.eventHandler.emitEvent(EventType.ACQUIRE_TOKEN_SUCCESS, InteractionType.Silent, result);\r\n atsMeasurement?.add({\r\n accessTokenSize: result?.accessToken.length,\r\n idTokenSize: result?.idToken.length,\r\n });\r\n atsMeasurement?.end({\r\n success: true,\r\n });\r\n return result;\r\n }\r\n this.logger.error("Cached tokens are not found for the account, proceeding with silent token request.");\r\n this.eventHandler.emitEvent(EventType.ACQUIRE_TOKEN_FAILURE, InteractionType.Silent, null);\r\n atsMeasurement?.end({\r\n success: false,\r\n });\r\n return null;\r\n }\r\n /**\r\n *\r\n * @param request\r\n * @returns\r\n */\r\n async acquireTokenFromCacheInternal(request) {\r\n const accountContext = this.bridgeProxy.getAccountContext();\r\n let currentAccount = null;\r\n if (accountContext) {\r\n const hubAccount = getAccount(accountContext, this.logger, this.browserStorage);\r\n // always prioritize for hub account context, the reqirement of `request.account` will be removed soon\r\n currentAccount = hubAccount || request.account;\r\n }\r\n // fall back to brokering if no cached account is found\r\n if (!currentAccount) {\r\n this.logger.verbose("No active account found, falling back to the host");\r\n return Promise.resolve(null);\r\n }\r\n this.logger.verbose("active account found, attempting to acquire token silently");\r\n const authRequest = {\r\n ...request,\r\n correlationId: request.correlationId || this.browserCrypto.createNewGuid(),\r\n authority: request.authority || currentAccount.environment,\r\n scopes: request.scopes?.length\r\n ? request.scopes\r\n : [...OIDC_DEFAULT_SCOPES],\r\n };\r\n // fetch access token and check for expiry\r\n const tokenKeys = this.browserStorage.getTokenKeys();\r\n const cachedAccessToken = this.browserStorage.getAccessToken(currentAccount, authRequest, tokenKeys, currentAccount.tenantId, this.performanceClient, authRequest.correlationId);\r\n // If there is no access token, log it and return null\r\n if (!cachedAccessToken) {\r\n this.logger.verbose("No cached access token found");\r\n return Promise.resolve(null);\r\n }\r\n else if (wasClockTurnedBack(cachedAccessToken.cachedAt) ||\r\n isTokenExpired(cachedAccessToken.expiresOn, this.config.system.tokenRenewalOffsetSeconds)) {\r\n this.logger.verbose("Cached access token has expired");\r\n return Promise.resolve(null);\r\n }\r\n const cachedIdToken = this.browserStorage.getIdToken(currentAccount, tokenKeys, currentAccount.tenantId, this.performanceClient, authRequest.correlationId);\r\n if (!cachedIdToken) {\r\n this.logger.verbose("No cached id token found");\r\n return Promise.resolve(null);\r\n }\r\n return this.nestedAppAuthAdapter.toAuthenticationResultFromCache(currentAccount, cachedIdToken, cachedAccessToken, authRequest, authRequest.correlationId);\r\n }\r\n /**\r\n * acquireTokenPopup flow implementation\r\n * @param request\r\n * @returns\r\n */\r\n async acquireTokenPopup(request) {\r\n return this.acquireTokenInteractive(request);\r\n }\r\n /**\r\n * acquireTokenRedirect flow is not supported in nested app auth\r\n * @param request\r\n */\r\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\r\n acquireTokenRedirect(request) {\r\n throw NestedAppAuthError.createUnsupportedError();\r\n }\r\n /**\r\n * acquireTokenSilent flow implementation\r\n * @param silentRequest\r\n * @returns\r\n */\r\n async acquireTokenSilent(silentRequest) {\r\n return this.acquireTokenSilentInternal(silentRequest);\r\n }\r\n /**\r\n * Hybrid flow is not currently supported in nested app auth\r\n * @param request\r\n */\r\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\r\n acquireTokenByCode(request // eslint-disable-line @typescript-eslint/no-unused-vars\r\n ) {\r\n throw NestedAppAuthError.createUnsupportedError();\r\n }\r\n /**\r\n * acquireTokenNative flow is not currently supported in nested app auth\r\n * @param request\r\n * @param apiId\r\n * @param accountId\r\n */\r\n acquireTokenNative(request, apiId, // eslint-disable-line @typescript-eslint/no-unused-vars\r\n accountId // eslint-disable-line @typescript-eslint/no-unused-vars\r\n ) {\r\n throw NestedAppAuthError.createUnsupportedError();\r\n }\r\n /**\r\n * acquireTokenByRefreshToken flow is not currently supported in nested app auth\r\n * @param commonRequest\r\n * @param silentRequest\r\n */\r\n acquireTokenByRefreshToken(commonRequest, // eslint-disable-line @typescript-eslint/no-unused-vars\r\n silentRequest // eslint-disable-line @typescript-eslint/no-unused-vars\r\n ) {\r\n throw NestedAppAuthError.createUnsupportedError();\r\n }\r\n /**\r\n * Adds event callbacks to array\r\n * @param callback\r\n * @param eventTypes\r\n */\r\n addEventCallback(callback, eventTypes) {\r\n return this.eventHandler.addEventCallback(callback, eventTypes);\r\n }\r\n /**\r\n * Removes callback with provided id from callback array\r\n * @param callbackId\r\n */\r\n removeEventCallback(callbackId) {\r\n this.eventHandler.removeEventCallback(callbackId);\r\n }\r\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\r\n addPerformanceCallback(callback) {\r\n throw NestedAppAuthError.createUnsupportedError();\r\n }\r\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\r\n removePerformanceCallback(callbackId) {\r\n throw NestedAppAuthError.createUnsupportedError();\r\n }\r\n enableAccountStorageEvents() {\r\n throw NestedAppAuthError.createUnsupportedError();\r\n }\r\n disableAccountStorageEvents() {\r\n throw NestedAppAuthError.createUnsupportedError();\r\n }\r\n // #region Account APIs\r\n /**\r\n * Returns all the accounts in the cache that match the optional filter. If no filter is provided, all accounts are returned.\r\n * @param accountFilter - (Optional) filter to narrow down the accounts returned\r\n * @returns Array of AccountInfo objects in cache\r\n */\r\n getAllAccounts(accountFilter) {\r\n return getAllAccounts(this.logger, this.browserStorage, this.isBrowserEnv(), accountFilter);\r\n }\r\n /**\r\n * Returns the first account found in the cache that matches the account filter passed in.\r\n * @param accountFilter\r\n * @returns The first account found in the cache matching the provided filter or null if no account could be found.\r\n */\r\n getAccount(accountFilter) {\r\n return getAccount(accountFilter, this.logger, this.browserStorage);\r\n }\r\n /**\r\n * Returns the signed in account matching username.\r\n * (the account object is created at the time of successful login)\r\n * or null when no matching account is found.\r\n * This API is provided for convenience but getAccountById should be used for best reliability\r\n * @param username\r\n * @returns The account object stored in MSAL\r\n */\r\n getAccountByUsername(username) {\r\n return getAccountByUsername(username, this.logger, this.browserStorage);\r\n }\r\n /**\r\n * Returns the signed in account matching homeAccountId.\r\n * (the account object is created at the time of successful login)\r\n * or null when no matching account is found\r\n * @param homeAccountId\r\n * @returns The account object stored in MSAL\r\n */\r\n getAccountByHomeId(homeAccountId) {\r\n return getAccountByHomeId(homeAccountId, this.logger, this.browserStorage);\r\n }\r\n /**\r\n * Returns the signed in account matching localAccountId.\r\n * (the account object is created at the time of successful login)\r\n * or null when no matching account is found\r\n * @param localAccountId\r\n * @returns The account object stored in MSAL\r\n */\r\n getAccountByLocalId(localAccountId) {\r\n return getAccountByLocalId(localAccountId, this.logger, this.browserStorage);\r\n }\r\n /**\r\n * Sets the account to use as the active account. If no account is passed to the acquireToken APIs, then MSAL will use this active account.\r\n * @param account\r\n */\r\n setActiveAccount(account) {\r\n /*\r\n * StandardController uses this to allow the developer to set the active account\r\n * in the nested app auth scenario the active account is controlled by the app hosting the nested app\r\n */\r\n return setActiveAccount(account, this.browserStorage);\r\n }\r\n /**\r\n * Gets the currently active account\r\n */\r\n getActiveAccount() {\r\n return getActiveAccount(this.browserStorage);\r\n }\r\n // #endregion\r\n handleRedirectPromise(hash // eslint-disable-line @typescript-eslint/no-unused-vars\r\n ) {\r\n return Promise.resolve(null);\r\n }\r\n loginPopup(request // eslint-disable-line @typescript-eslint/no-unused-vars\r\n ) {\r\n return this.acquireTokenInteractive(request || DEFAULT_REQUEST);\r\n }\r\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\r\n loginRedirect(request) {\r\n throw NestedAppAuthError.createUnsupportedError();\r\n }\r\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\r\n logout(logoutRequest) {\r\n throw NestedAppAuthError.createUnsupportedError();\r\n }\r\n logoutRedirect(logoutRequest // eslint-disable-line @typescript-eslint/no-unused-vars\r\n ) {\r\n throw NestedAppAuthError.createUnsupportedError();\r\n }\r\n logoutPopup(logoutRequest // eslint-disable-line @typescript-eslint/no-unused-vars\r\n ) {\r\n throw NestedAppAuthError.createUnsupportedError();\r\n }\r\n ssoSilent(\r\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\r\n request) {\r\n return this.acquireTokenSilentInternal(request);\r\n }\r\n getTokenCache() {\r\n throw NestedAppAuthError.createUnsupportedError();\r\n }\r\n /**\r\n * Returns the logger instance\r\n */\r\n getLogger() {\r\n return this.logger;\r\n }\r\n /**\r\n * Replaces the default logger set in configurations with new Logger with new configurations\r\n * @param logger Logger instance\r\n */\r\n setLogger(logger) {\r\n this.logger = logger;\r\n }\r\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\r\n initializeWrapperLibrary(sku, version) {\r\n /*\r\n * Standard controller uses this to set the sku and version of the wrapper library in the storage\r\n * we do nothing here\r\n */\r\n return;\r\n }\r\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\r\n setNavigationClient(navigationClient) {\r\n this.logger.warning("setNavigationClient is not supported in nested app auth");\r\n }\r\n getConfiguration() {\r\n return this.config;\r\n }\r\n isBrowserEnv() {\r\n return this.operatingContext.isBrowserEnvironment();\r\n }\r\n getBrowserCrypto() {\r\n return this.browserCrypto;\r\n }\r\n getPerformanceClient() {\r\n throw NestedAppAuthError.createUnsupportedError();\r\n }\r\n getRedirectResponse() {\r\n throw NestedAppAuthError.createUnsupportedError();\r\n }\r\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\r\n async clearCache(logoutRequest) {\r\n throw NestedAppAuthError.createUnsupportedError();\r\n }\r\n async hydrateCache(result, request) {\r\n this.logger.verbose("hydrateCache called");\r\n const accountEntity = AccountEntity.createFromAccountInfo(result.account, result.cloudGraphHostName, result.msGraphHost);\r\n this.browserStorage.setAccount(accountEntity);\r\n return this.browserStorage.hydrateCache(result, request);\r\n }\r\n}\n\n\n//# sourceMappingURL=NestedAppAuthController.mjs.map\n\n;// ./node_modules/@azure/msal-browser/dist/controllers/ControllerFactory.mjs\n/*! @azure/msal-browser v3.28.1 2025-01-14 */\n\n\n\n\n\n\n/*\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License.\r\n */\r\nasync function createV3Controller(config, request) {\r\n const standard = new StandardOperatingContext(config);\r\n await standard.initialize();\r\n return StandardController.createController(standard, request);\r\n}\r\nasync function createController(config) {\r\n const standard = new StandardOperatingContext(config);\r\n const nestedApp = new NestedAppOperatingContext(config);\r\n const operatingContexts = [standard.initialize(), nestedApp.initialize()];\r\n await Promise.all(operatingContexts);\r\n if (nestedApp.isAvailable() && config.auth.supportsNestedAppAuth) {\r\n return NestedAppAuthController.createController(nestedApp);\r\n }\r\n else if (standard.isAvailable()) {\r\n return StandardController.createController(standard);\r\n }\r\n else {\r\n // Since neither of the actual operating contexts are available keep the UnknownOperatingContextController\r\n return null;\r\n }\r\n}\n\n\n//# sourceMappingURL=ControllerFactory.mjs.map\n\n;// ./node_modules/@azure/msal-browser/dist/app/PublicClientApplication.mjs\n/*! @azure/msal-browser v3.28.1 2025-01-14 */\n\n\n\n\n\n\n\n/*\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License.\r\n */\r\n/**\r\n * The PublicClientApplication class is the object exposed by the library to perform authentication and authorization functions in Single Page Applications\r\n * to obtain JWT tokens as described in the OAuth 2.0 Authorization Code Flow with PKCE specification.\r\n */\r\nclass PublicClientApplication {\r\n /**\r\n * Creates StandardController and passes it to the PublicClientApplication\r\n *\r\n * @param configuration {Configuration}\r\n */\r\n static async createPublicClientApplication(configuration) {\r\n const controller = await createV3Controller(configuration);\r\n const pca = new PublicClientApplication(configuration, controller);\r\n return pca;\r\n }\r\n /**\r\n * @constructor\r\n * Constructor for the PublicClientApplication used to instantiate the PublicClientApplication object\r\n *\r\n * Important attributes in the Configuration object for auth are:\r\n * - clientID: the application ID of your application. You can obtain one by registering your application with our Application registration portal : https://portal.azure.com/#blade/Microsoft_AAD_IAM/ActiveDirectoryMenuBlade/RegisteredAppsPreview\r\n * - authority: the authority URL for your application.\r\n * - redirect_uri: the uri of your application registered in the portal.\r\n *\r\n * In Azure AD, authority is a URL indicating the Azure active directory that MSAL uses to obtain tokens.\r\n * It is of the form https://login.microsoftonline.com/{Enter_the_Tenant_Info_Here}\r\n * If your application supports Accounts in one organizational directory, replace "Enter_the_Tenant_Info_Here" value with the Tenant Id or Tenant name (for example, contoso.microsoft.com).\r\n * If your application supports Accounts in any organizational directory, replace "Enter_the_Tenant_Info_Here" value with organizations.\r\n * If your application supports Accounts in any organizational directory and personal Microsoft accounts, replace "Enter_the_Tenant_Info_Here" value with common.\r\n * To restrict support to Personal Microsoft accounts only, replace "Enter_the_Tenant_Info_Here" value with consumers.\r\n *\r\n * In Azure B2C, authority is of the form https://{instance}/tfp/{tenant}/{policyName}/\r\n * Full B2C functionality will be available in this library in future versions.\r\n *\r\n * @param configuration Object for the MSAL PublicClientApplication instance\r\n * @param IController Optional parameter to explictly set the controller. (Will be removed when we remove public constructor)\r\n */\r\n constructor(configuration, controller) {\r\n this.controller =\r\n controller ||\r\n new StandardController(new StandardOperatingContext(configuration));\r\n }\r\n /**\r\n * Initializer function to perform async startup tasks such as connecting to WAM extension\r\n * @param request {?InitializeApplicationRequest}\r\n */\r\n async initialize(request) {\r\n return this.controller.initialize(request);\r\n }\r\n /**\r\n * Use when you want to obtain an access_token for your API via opening a popup window in the user\'s browser\r\n *\r\n * @param request\r\n *\r\n * @returns A promise that is fulfilled when this function has completed, or rejected if an error was raised.\r\n */\r\n async acquireTokenPopup(request) {\r\n return this.controller.acquireTokenPopup(request);\r\n }\r\n /**\r\n * Use when you want to obtain an access_token for your API by redirecting the user\'s browser window to the authorization endpoint. This function redirects\r\n * the page, so any code that follows this function will not execute.\r\n *\r\n * IMPORTANT: It is NOT recommended to have code that is dependent on the resolution of the Promise. This function will navigate away from the current\r\n * browser window. It currently returns a Promise in order to reflect the asynchronous nature of the code running in this function.\r\n *\r\n * @param request\r\n */\r\n acquireTokenRedirect(request) {\r\n return this.controller.acquireTokenRedirect(request);\r\n }\r\n /**\r\n * Silently acquire an access token for a given set of scopes. Returns currently processing promise if parallel requests are made.\r\n *\r\n * @param {@link (SilentRequest:type)}\r\n * @returns {Promise.} - a promise that is fulfilled when this function has completed, or rejected if an error was raised. Returns the {@link AuthenticationResult} object\r\n */\r\n acquireTokenSilent(silentRequest) {\r\n return this.controller.acquireTokenSilent(silentRequest);\r\n }\r\n /**\r\n * This function redeems an authorization code (passed as code) from the eSTS token endpoint.\r\n * This authorization code should be acquired server-side using a confidential client to acquire a spa_code.\r\n * This API is not indended for normal authorization code acquisition and redemption.\r\n *\r\n * Redemption of this authorization code will not require PKCE, as it was acquired by a confidential client.\r\n *\r\n * @param request {@link AuthorizationCodeRequest}\r\n * @returns A promise that is fulfilled when this function has completed, or rejected if an error was raised.\r\n */\r\n acquireTokenByCode(request) {\r\n return this.controller.acquireTokenByCode(request);\r\n }\r\n /**\r\n * Adds event callbacks to array\r\n * @param callback\r\n * @param eventTypes\r\n */\r\n addEventCallback(callback, eventTypes) {\r\n return this.controller.addEventCallback(callback, eventTypes);\r\n }\r\n /**\r\n * Removes callback with provided id from callback array\r\n * @param callbackId\r\n */\r\n removeEventCallback(callbackId) {\r\n return this.controller.removeEventCallback(callbackId);\r\n }\r\n /**\r\n * Registers a callback to receive performance events.\r\n *\r\n * @param {PerformanceCallbackFunction} callback\r\n * @returns {string}\r\n */\r\n addPerformanceCallback(callback) {\r\n return this.controller.addPerformanceCallback(callback);\r\n }\r\n /**\r\n * Removes a callback registered with addPerformanceCallback.\r\n *\r\n * @param {string} callbackId\r\n * @returns {boolean}\r\n */\r\n removePerformanceCallback(callbackId) {\r\n return this.controller.removePerformanceCallback(callbackId);\r\n }\r\n /**\r\n * Adds event listener that emits an event when a user account is added or removed from localstorage in a different browser tab or window\r\n */\r\n enableAccountStorageEvents() {\r\n this.controller.enableAccountStorageEvents();\r\n }\r\n /**\r\n * Removes event listener that emits an event when a user account is added or removed from localstorage in a different browser tab or window\r\n */\r\n disableAccountStorageEvents() {\r\n this.controller.disableAccountStorageEvents();\r\n }\r\n /**\r\n * Returns the first account found in the cache that matches the account filter passed in.\r\n * @param accountFilter\r\n * @returns The first account found in the cache matching the provided filter or null if no account could be found.\r\n */\r\n getAccount(accountFilter) {\r\n return this.controller.getAccount(accountFilter);\r\n }\r\n /**\r\n * Returns the signed in account matching homeAccountId.\r\n * (the account object is created at the time of successful login)\r\n * or null when no matching account is found\r\n * @param homeAccountId\r\n * @returns The account object stored in MSAL\r\n * @deprecated - Use getAccount instead\r\n */\r\n getAccountByHomeId(homeAccountId) {\r\n return this.controller.getAccountByHomeId(homeAccountId);\r\n }\r\n /**\r\n * Returns the signed in account matching localAccountId.\r\n * (the account object is created at the time of successful login)\r\n * or null when no matching account is found\r\n * @param localAccountId\r\n * @returns The account object stored in MSAL\r\n * @deprecated - Use getAccount instead\r\n */\r\n getAccountByLocalId(localId) {\r\n return this.controller.getAccountByLocalId(localId);\r\n }\r\n /**\r\n * Returns the signed in account matching username.\r\n * (the account object is created at the time of successful login)\r\n * or null when no matching account is found.\r\n * This API is provided for convenience but getAccountById should be used for best reliability\r\n * @param userName\r\n * @returns The account object stored in MSAL\r\n * @deprecated - Use getAccount instead\r\n */\r\n getAccountByUsername(userName) {\r\n return this.controller.getAccountByUsername(userName);\r\n }\r\n /**\r\n * Returns all the accounts in the cache that match the optional filter. If no filter is provided, all accounts are returned.\r\n * @param accountFilter - (Optional) filter to narrow down the accounts returned\r\n * @returns Array of AccountInfo objects in cache\r\n */\r\n getAllAccounts(accountFilter) {\r\n return this.controller.getAllAccounts(accountFilter);\r\n }\r\n /**\r\n * Event handler function which allows users to fire events after the PublicClientApplication object\r\n * has loaded during redirect flows. This should be invoked on all page loads involved in redirect\r\n * auth flows.\r\n * @param hash Hash to process. Defaults to the current value of window.location.hash. Only needs to be provided explicitly if the response to be handled is not contained in the current value.\r\n * @returns Token response or null. If the return value is null, then no auth redirect was detected.\r\n */\r\n handleRedirectPromise(hash) {\r\n return this.controller.handleRedirectPromise(hash);\r\n }\r\n /**\r\n * Use when initiating the login process via opening a popup window in the user\'s browser\r\n *\r\n * @param request\r\n *\r\n * @returns A promise that is fulfilled when this function has completed, or rejected if an error was raised.\r\n */\r\n loginPopup(request) {\r\n return this.controller.loginPopup(request);\r\n }\r\n /**\r\n * Use when initiating the login process by redirecting the user\'s browser to the authorization endpoint. This function redirects the page, so\r\n * any code that follows this function will not execute.\r\n *\r\n * IMPORTANT: It is NOT recommended to have code that is dependent on the resolution of the Promise. This function will navigate away from the current\r\n * browser window. It currently returns a Promise in order to reflect the asynchronous nature of the code running in this function.\r\n *\r\n * @param request\r\n */\r\n loginRedirect(request) {\r\n return this.controller.loginRedirect(request);\r\n }\r\n /**\r\n * Deprecated logout function. Use logoutRedirect or logoutPopup instead\r\n * @param logoutRequest\r\n * @deprecated\r\n */\r\n logout(logoutRequest) {\r\n return this.controller.logout(logoutRequest);\r\n }\r\n /**\r\n * Use to log out the current user, and redirect the user to the postLogoutRedirectUri.\r\n * Default behaviour is to redirect the user to `window.location.href`.\r\n * @param logoutRequest\r\n */\r\n logoutRedirect(logoutRequest) {\r\n return this.controller.logoutRedirect(logoutRequest);\r\n }\r\n /**\r\n * Clears local cache for the current user then opens a popup window prompting the user to sign-out of the server\r\n * @param logoutRequest\r\n */\r\n logoutPopup(logoutRequest) {\r\n return this.controller.logoutPopup(logoutRequest);\r\n }\r\n /**\r\n * This function uses a hidden iframe to fetch an authorization code from the eSTS. There are cases where this may not work:\r\n * - Any browser using a form of Intelligent Tracking Prevention\r\n * - If there is not an established session with the service\r\n *\r\n * In these cases, the request must be done inside a popup or full frame redirect.\r\n *\r\n * For the cases where interaction is required, you cannot send a request with prompt=none.\r\n *\r\n * If your refresh token has expired, you can use this function to fetch a new set of tokens silently as long as\r\n * you session on the server still exists.\r\n * @param request {@link SsoSilentRequest}\r\n *\r\n * @returns A promise that is fulfilled when this function has completed, or rejected if an error was raised.\r\n */\r\n ssoSilent(request) {\r\n return this.controller.ssoSilent(request);\r\n }\r\n /**\r\n * Gets the token cache for the application.\r\n */\r\n getTokenCache() {\r\n return this.controller.getTokenCache();\r\n }\r\n /**\r\n * Returns the logger instance\r\n */\r\n getLogger() {\r\n return this.controller.getLogger();\r\n }\r\n /**\r\n * Replaces the default logger set in configurations with new Logger with new configurations\r\n * @param logger Logger instance\r\n */\r\n setLogger(logger) {\r\n this.controller.setLogger(logger);\r\n }\r\n /**\r\n * Sets the account to use as the active account. If no account is passed to the acquireToken APIs, then MSAL will use this active account.\r\n * @param account\r\n */\r\n setActiveAccount(account) {\r\n this.controller.setActiveAccount(account);\r\n }\r\n /**\r\n * Gets the currently active account\r\n */\r\n getActiveAccount() {\r\n return this.controller.getActiveAccount();\r\n }\r\n /**\r\n * Called by wrapper libraries (Angular & React) to set SKU and Version passed down to telemetry, logger, etc.\r\n * @param sku\r\n * @param version\r\n */\r\n initializeWrapperLibrary(sku, version) {\r\n return this.controller.initializeWrapperLibrary(sku, version);\r\n }\r\n /**\r\n * Sets navigation client\r\n * @param navigationClient\r\n */\r\n setNavigationClient(navigationClient) {\r\n this.controller.setNavigationClient(navigationClient);\r\n }\r\n /**\r\n * Returns the configuration object\r\n * @internal\r\n */\r\n getConfiguration() {\r\n return this.controller.getConfiguration();\r\n }\r\n /**\r\n * Hydrates cache with the tokens and account in the AuthenticationResult object\r\n * @param result\r\n * @param request - The request object that was used to obtain the AuthenticationResult\r\n * @returns\r\n */\r\n async hydrateCache(result, request) {\r\n return this.controller.hydrateCache(result, request);\r\n }\r\n /**\r\n * Clears tokens and account from the browser cache.\r\n * @param logoutRequest\r\n */\r\n clearCache(logoutRequest) {\r\n return this.controller.clearCache(logoutRequest);\r\n }\r\n}\r\n/**\r\n * creates NestedAppAuthController and passes it to the PublicClientApplication,\r\n * falls back to StandardController if NestedAppAuthController is not available\r\n *\r\n * @param configuration\r\n * @returns IPublicClientApplication\r\n *\r\n */\r\nasync function createNestablePublicClientApplication(configuration) {\r\n const nestedAppAuth = new NestedAppOperatingContext(configuration);\r\n await nestedAppAuth.initialize();\r\n if (nestedAppAuth.isAvailable()) {\r\n const controller = new NestedAppAuthController(nestedAppAuth);\r\n return new PublicClientApplication(configuration, controller);\r\n }\r\n return createStandardPublicClientApplication(configuration);\r\n}\r\n/**\r\n * creates PublicClientApplication using StandardController\r\n *\r\n * @param configuration\r\n * @returns IPublicClientApplication\r\n *\r\n */\r\nasync function createStandardPublicClientApplication(configuration) {\r\n const pca = new PublicClientApplication(configuration);\r\n await pca.initialize();\r\n return pca;\r\n}\n\n\n//# sourceMappingURL=PublicClientApplication.mjs.map\n\n;// ./node_modules/@azure/msal-browser/dist/controllers/UnknownOperatingContextController.mjs\n/*! @azure/msal-browser v3.28.1 2025-01-14 */\n\n\n\n\n\n\n/*\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License.\r\n */\r\n/**\r\n * UnknownOperatingContextController class\r\n *\r\n * - Until initialize method is called, this controller is the default\r\n * - AFter initialize method is called, this controller will be swapped out for the appropriate controller\r\n * if the operating context can be determined; otherwise this controller will continued be used\r\n *\r\n * - Why do we have this? We don\'t want to dynamically import (download) all of the code in StandardController if we don\'t need to.\r\n *\r\n * - Only includes implementation for getAccounts and handleRedirectPromise\r\n * - All other methods are will throw initialization error (because either initialize method or the factory method were not used)\r\n * - This controller is necessary for React Native wrapper, server side rendering and any other scenario where we don\'t have a DOM\r\n *\r\n */\r\nclass UnknownOperatingContextController {\r\n constructor(operatingContext) {\r\n // Flag representing whether or not the initialize API has been called and completed\r\n this.initialized = false;\r\n this.operatingContext = operatingContext;\r\n this.isBrowserEnvironment =\r\n this.operatingContext.isBrowserEnvironment();\r\n this.config = operatingContext.getConfig();\r\n this.logger = operatingContext.getLogger();\r\n // Initialize performance client\r\n this.performanceClient = this.config.telemetry.client;\r\n // Initialize the crypto class.\r\n this.browserCrypto = this.isBrowserEnvironment\r\n ? new CryptoOps(this.logger, this.performanceClient)\r\n : DEFAULT_CRYPTO_IMPLEMENTATION;\r\n // Initialize the browser storage class.\r\n this.browserStorage = this.isBrowserEnvironment\r\n ? new BrowserCacheManager(this.config.auth.clientId, this.config.cache, this.browserCrypto, this.logger, undefined, this.performanceClient)\r\n : DEFAULT_BROWSER_CACHE_MANAGER(this.config.auth.clientId, this.logger);\r\n }\r\n getBrowserStorage() {\r\n return this.browserStorage;\r\n }\r\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\r\n getAccount(accountFilter) {\r\n return null;\r\n }\r\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\r\n getAccountByHomeId(homeAccountId) {\r\n return null;\r\n }\r\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\r\n getAccountByLocalId(localAccountId) {\r\n return null;\r\n }\r\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\r\n getAccountByUsername(username) {\r\n return null;\r\n }\r\n getAllAccounts() {\r\n return [];\r\n }\r\n initialize() {\r\n this.initialized = true;\r\n return Promise.resolve();\r\n }\r\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\r\n acquireTokenPopup(request) {\r\n blockAPICallsBeforeInitialize(this.initialized);\r\n blockNonBrowserEnvironment();\r\n return {};\r\n }\r\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\r\n acquireTokenRedirect(request) {\r\n blockAPICallsBeforeInitialize(this.initialized);\r\n blockNonBrowserEnvironment();\r\n return Promise.resolve();\r\n }\r\n acquireTokenSilent(\r\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\r\n silentRequest) {\r\n blockAPICallsBeforeInitialize(this.initialized);\r\n blockNonBrowserEnvironment();\r\n return {};\r\n }\r\n acquireTokenByCode(\r\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\r\n request) {\r\n blockAPICallsBeforeInitialize(this.initialized);\r\n blockNonBrowserEnvironment();\r\n return {};\r\n }\r\n acquireTokenNative(\r\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\r\n request, \r\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\r\n apiId, \r\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\r\n accountId) {\r\n blockAPICallsBeforeInitialize(this.initialized);\r\n blockNonBrowserEnvironment();\r\n return {};\r\n }\r\n acquireTokenByRefreshToken(\r\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\r\n commonRequest, \r\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\r\n silentRequest) {\r\n blockAPICallsBeforeInitialize(this.initialized);\r\n blockNonBrowserEnvironment();\r\n return {};\r\n }\r\n addEventCallback(\r\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\r\n callback, \r\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\r\n eventTypes) {\r\n return null;\r\n }\r\n removeEventCallback(\r\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\r\n callbackId) { }\r\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\r\n addPerformanceCallback(callback) {\r\n blockAPICallsBeforeInitialize(this.initialized);\r\n blockNonBrowserEnvironment();\r\n return "";\r\n }\r\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\r\n removePerformanceCallback(callbackId) {\r\n blockAPICallsBeforeInitialize(this.initialized);\r\n blockNonBrowserEnvironment();\r\n return true;\r\n }\r\n enableAccountStorageEvents() {\r\n blockAPICallsBeforeInitialize(this.initialized);\r\n blockNonBrowserEnvironment();\r\n }\r\n disableAccountStorageEvents() {\r\n blockAPICallsBeforeInitialize(this.initialized);\r\n blockNonBrowserEnvironment();\r\n }\r\n handleRedirectPromise(\r\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\r\n hash) {\r\n blockAPICallsBeforeInitialize(this.initialized);\r\n return Promise.resolve(null);\r\n }\r\n loginPopup(\r\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\r\n request) {\r\n blockAPICallsBeforeInitialize(this.initialized);\r\n blockNonBrowserEnvironment();\r\n return {};\r\n }\r\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\r\n loginRedirect(request) {\r\n blockAPICallsBeforeInitialize(this.initialized);\r\n blockNonBrowserEnvironment();\r\n return {};\r\n }\r\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\r\n logout(logoutRequest) {\r\n blockAPICallsBeforeInitialize(this.initialized);\r\n blockNonBrowserEnvironment();\r\n return {};\r\n }\r\n logoutRedirect(\r\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\r\n logoutRequest) {\r\n blockAPICallsBeforeInitialize(this.initialized);\r\n blockNonBrowserEnvironment();\r\n return {};\r\n }\r\n logoutPopup(\r\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\r\n logoutRequest) {\r\n blockAPICallsBeforeInitialize(this.initialized);\r\n blockNonBrowserEnvironment();\r\n return {};\r\n }\r\n ssoSilent(\r\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\r\n request) {\r\n blockAPICallsBeforeInitialize(this.initialized);\r\n blockNonBrowserEnvironment();\r\n return {};\r\n }\r\n getTokenCache() {\r\n blockAPICallsBeforeInitialize(this.initialized);\r\n blockNonBrowserEnvironment();\r\n return {};\r\n }\r\n getLogger() {\r\n return this.logger;\r\n }\r\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\r\n setLogger(logger) {\r\n blockAPICallsBeforeInitialize(this.initialized);\r\n blockNonBrowserEnvironment();\r\n }\r\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\r\n setActiveAccount(account) {\r\n blockAPICallsBeforeInitialize(this.initialized);\r\n blockNonBrowserEnvironment();\r\n }\r\n getActiveAccount() {\r\n blockAPICallsBeforeInitialize(this.initialized);\r\n blockNonBrowserEnvironment();\r\n return null;\r\n }\r\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\r\n initializeWrapperLibrary(sku, version) {\r\n this.browserStorage.setWrapperMetadata(sku, version);\r\n }\r\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\r\n setNavigationClient(navigationClient) {\r\n blockAPICallsBeforeInitialize(this.initialized);\r\n blockNonBrowserEnvironment();\r\n }\r\n getConfiguration() {\r\n return this.config;\r\n }\r\n isBrowserEnv() {\r\n blockAPICallsBeforeInitialize(this.initialized);\r\n blockNonBrowserEnvironment();\r\n return true;\r\n }\r\n getBrowserCrypto() {\r\n blockAPICallsBeforeInitialize(this.initialized);\r\n blockNonBrowserEnvironment();\r\n return {};\r\n }\r\n getPerformanceClient() {\r\n blockAPICallsBeforeInitialize(this.initialized);\r\n blockNonBrowserEnvironment();\r\n return {};\r\n }\r\n getRedirectResponse() {\r\n blockAPICallsBeforeInitialize(this.initialized);\r\n blockNonBrowserEnvironment();\r\n return {};\r\n }\r\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\r\n async clearCache(logoutRequest) {\r\n blockAPICallsBeforeInitialize(this.initialized);\r\n blockNonBrowserEnvironment();\r\n }\r\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\r\n async hydrateCache(\r\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\r\n result, \r\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\r\n request) {\r\n blockAPICallsBeforeInitialize(this.initialized);\r\n blockNonBrowserEnvironment();\r\n }\r\n}\n\n\n//# sourceMappingURL=UnknownOperatingContextController.mjs.map\n\n;// ./node_modules/@azure/msal-browser/dist/operatingcontext/UnknownOperatingContext.mjs\n/*! @azure/msal-browser v3.28.1 2025-01-14 */\n\n\n\n/*\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License.\r\n */\r\nclass UnknownOperatingContext extends BaseOperatingContext {\r\n /**\r\n * Returns the unique identifier for this operating context\r\n * @returns string\r\n */\r\n getId() {\r\n return UnknownOperatingContext.ID;\r\n }\r\n /**\r\n * Return the module name. Intended for use with import() to enable dynamic import\r\n * of the implementation associated with this operating context\r\n * @returns\r\n */\r\n getModuleName() {\r\n return UnknownOperatingContext.MODULE_NAME;\r\n }\r\n /**\r\n * Checks whether the operating context is available.\r\n * Confirms that the code is running a browser rather. This is required.\r\n * @returns Promise indicating whether this operating context is currently available.\r\n */\r\n async initialize() {\r\n /**\r\n * This operating context is in use when we have not checked for what the operating context is.\r\n * The context is unknown until we check it.\r\n */\r\n return true;\r\n }\r\n}\r\n/*\r\n * TODO: Once we have determine the bundling code return here to specify the name of the bundle\r\n * containing the implementation for this operating context\r\n */\r\nUnknownOperatingContext.MODULE_NAME = "";\r\n/**\r\n * Unique identifier for the operating context\r\n */\r\nUnknownOperatingContext.ID = "UnknownOperatingContext";\n\n\n//# sourceMappingURL=UnknownOperatingContext.mjs.map\n\n;// ./node_modules/@azure/msal-browser/dist/app/PublicClientNext.mjs\n/*! @azure/msal-browser v3.28.1 2025-01-14 */\n\n\n\n\n\n/*\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License.\r\n */\r\n/**\r\n * PublicClientNext is an early look at the planned implementation of PublicClientApplication in the next major version of MSAL.js.\r\n * It contains support for multiple API implementations based on the runtime environment that it is running in.\r\n *\r\n * The goals of these changes are to provide a clean separation of behavior between different operating contexts (Nested App Auth, Platform Brokers, Plain old Browser, etc.)\r\n * while still providing a consistent API surface for developers.\r\n *\r\n * Please use PublicClientApplication for any prod/real-world scenarios.\r\n * Note: PublicClientNext is experimental and subject to breaking changes without following semver\r\n *\r\n */\r\nclass PublicClientNext {\r\n static async createPublicClientApplication(configuration) {\r\n const controller = await createController(configuration);\r\n let pca;\r\n if (controller !== null) {\r\n pca = new PublicClientNext(configuration, controller);\r\n }\r\n else {\r\n pca = new PublicClientNext(configuration);\r\n }\r\n return pca;\r\n }\r\n /**\r\n * @constructor\r\n * Constructor for the PublicClientNext used to instantiate the PublicClientNext object\r\n *\r\n * Important attributes in the Configuration object for auth are:\r\n * - clientID: the application ID of your application. You can obtain one by registering your application with our Application registration portal : https://portal.azure.com/#blade/Microsoft_AAD_IAM/ActiveDirectoryMenuBlade/RegisteredAppsPreview\r\n * - authority: the authority URL for your application.\r\n * - redirect_uri: the uri of your application registered in the portal.\r\n *\r\n * In Azure AD, authority is a URL indicating the Azure active directory that MSAL uses to obtain tokens.\r\n * It is of the form https://login.microsoftonline.com/{Enter_the_Tenant_Info_Here}\r\n * If your application supports Accounts in one organizational directory, replace "Enter_the_Tenant_Info_Here" value with the Tenant Id or Tenant name (for example, contoso.microsoft.com).\r\n * If your application supports Accounts in any organizational directory, replace "Enter_the_Tenant_Info_Here" value with organizations.\r\n * If your application supports Accounts in any organizational directory and personal Microsoft accounts, replace "Enter_the_Tenant_Info_Here" value with common.\r\n * To restrict support to Personal Microsoft accounts only, replace "Enter_the_Tenant_Info_Here" value with consumers.\r\n *\r\n * In Azure B2C, authority is of the form https://{instance}/tfp/{tenant}/{policyName}/\r\n * Full B2C functionality will be available in this library in future versions.\r\n *\r\n * @param configuration Object for the MSAL PublicClientApplication instance\r\n * @param IController Optional parameter to explictly set the controller. (Will be removed when we remove public constructor)\r\n */\r\n constructor(configuration, controller) {\r\n this.configuration = configuration;\r\n if (controller) {\r\n this.controller = controller;\r\n }\r\n else {\r\n const operatingContext = new UnknownOperatingContext(configuration);\r\n this.controller = new UnknownOperatingContextController(operatingContext);\r\n }\r\n }\r\n /**\r\n * Initializer function to perform async startup tasks such as connecting to WAM extension\r\n */\r\n async initialize() {\r\n if (this.controller instanceof UnknownOperatingContextController) {\r\n const result = await createController(this.configuration);\r\n if (result !== null) {\r\n this.controller = result;\r\n }\r\n return this.controller.initialize();\r\n }\r\n return Promise.resolve();\r\n }\r\n /**\r\n * Use when you want to obtain an access_token for your API via opening a popup window in the user\'s browser\r\n *\r\n * @param request\r\n *\r\n * @returns A promise that is fulfilled when this function has completed, or rejected if an error was raised.\r\n */\r\n async acquireTokenPopup(request) {\r\n return this.controller.acquireTokenPopup(request);\r\n }\r\n /**\r\n * Use when you want to obtain an access_token for your API by redirecting the user\'s browser window to the authorization endpoint. This function redirects\r\n * the page, so any code that follows this function will not execute.\r\n *\r\n * IMPORTANT: It is NOT recommended to have code that is dependent on the resolution of the Promise. This function will navigate away from the current\r\n * browser window. It currently returns a Promise in order to reflect the asynchronous nature of the code running in this function.\r\n *\r\n * @param request\r\n */\r\n acquireTokenRedirect(request) {\r\n return this.controller.acquireTokenRedirect(request);\r\n }\r\n /**\r\n * Silently acquire an access token for a given set of scopes. Returns currently processing promise if parallel requests are made.\r\n *\r\n * @param {@link (SilentRequest:type)}\r\n * @returns {Promise.} - a promise that is fulfilled when this function has completed, or rejected if an error was raised. Returns the {@link AuthenticationResult} object\r\n */\r\n acquireTokenSilent(silentRequest) {\r\n return this.controller.acquireTokenSilent(silentRequest);\r\n }\r\n /**\r\n * This function redeems an authorization code (passed as code) from the eSTS token endpoint.\r\n * This authorization code should be acquired server-side using a confidential client to acquire a spa_code.\r\n * This API is not indended for normal authorization code acquisition and redemption.\r\n *\r\n * Redemption of this authorization code will not require PKCE, as it was acquired by a confidential client.\r\n *\r\n * @param request {@link AuthorizationCodeRequest}\r\n * @returns A promise that is fulfilled when this function has completed, or rejected if an error was raised.\r\n */\r\n acquireTokenByCode(request) {\r\n return this.controller.acquireTokenByCode(request);\r\n }\r\n /**\r\n * Adds event callbacks to array\r\n * @param callback\r\n */\r\n addEventCallback(callback, eventTypes) {\r\n return this.controller.addEventCallback(callback, eventTypes);\r\n }\r\n /**\r\n * Removes callback with provided id from callback array\r\n * @param callbackId\r\n */\r\n removeEventCallback(callbackId) {\r\n return this.controller.removeEventCallback(callbackId);\r\n }\r\n /**\r\n * Registers a callback to receive performance events.\r\n *\r\n * @param {PerformanceCallbackFunction} callback\r\n * @returns {string}\r\n */\r\n addPerformanceCallback(callback) {\r\n return this.controller.addPerformanceCallback(callback);\r\n }\r\n /**\r\n * Removes a callback registered with addPerformanceCallback.\r\n *\r\n * @param {string} callbackId\r\n * @returns {boolean}\r\n */\r\n removePerformanceCallback(callbackId) {\r\n return this.controller.removePerformanceCallback(callbackId);\r\n }\r\n /**\r\n * Adds event listener that emits an event when a user account is added or removed from localstorage in a different browser tab or window\r\n */\r\n enableAccountStorageEvents() {\r\n this.controller.enableAccountStorageEvents();\r\n }\r\n /**\r\n * Removes event listener that emits an event when a user account is added or removed from localstorage in a different browser tab or window\r\n */\r\n disableAccountStorageEvents() {\r\n this.controller.disableAccountStorageEvents();\r\n }\r\n /**\r\n * Returns the first account found in the cache that matches the account filter passed in.\r\n * @param accountFilter\r\n * @returns The first account found in the cache matching the provided filter or null if no account could be found.\r\n */\r\n getAccount(accountFilter) {\r\n return this.controller.getAccount(accountFilter);\r\n }\r\n /**\r\n * Returns the signed in account matching homeAccountId.\r\n * (the account object is created at the time of successful login)\r\n * or null when no matching account is found\r\n * @param homeAccountId\r\n * @returns The account object stored in MSAL\r\n * @deprecated - Use getAccount instead\r\n */\r\n getAccountByHomeId(homeAccountId) {\r\n return this.controller.getAccountByHomeId(homeAccountId);\r\n }\r\n /**\r\n * Returns the signed in account matching localAccountId.\r\n * (the account object is created at the time of successful login)\r\n * or null when no matching account is found\r\n * @param localAccountId\r\n * @returns The account object stored in MSAL\r\n * @deprecated - Use getAccount instead\r\n */\r\n getAccountByLocalId(localId) {\r\n return this.controller.getAccountByLocalId(localId);\r\n }\r\n /**\r\n * Returns the signed in account matching username.\r\n * (the account object is created at the time of successful login)\r\n * or null when no matching account is found.\r\n * This API is provided for convenience but getAccountById should be used for best reliability\r\n * @param userName\r\n * @returns The account object stored in MSAL\r\n * @deprecated - Use getAccount instead\r\n */\r\n getAccountByUsername(userName) {\r\n return this.controller.getAccountByUsername(userName);\r\n }\r\n /**\r\n * Returns all the accounts in the cache that match the optional filter. If no filter is provided, all accounts are returned.\r\n * @param accountFilter - (Optional) filter to narrow down the accounts returned\r\n * @returns Array of AccountInfo objects in cache\r\n */\r\n getAllAccounts(accountFilter) {\r\n return this.controller.getAllAccounts(accountFilter);\r\n }\r\n /**\r\n * Event handler function which allows users to fire events after the PublicClientApplication object\r\n * has loaded during redirect flows. This should be invoked on all page loads involved in redirect\r\n * auth flows.\r\n * @param hash Hash to process. Defaults to the current value of window.location.hash. Only needs to be provided explicitly if the response to be handled is not contained in the current value.\r\n * @returns Token response or null. If the return value is null, then no auth redirect was detected.\r\n */\r\n handleRedirectPromise(hash) {\r\n return this.controller.handleRedirectPromise(hash);\r\n }\r\n /**\r\n * Use when initiating the login process via opening a popup window in the user\'s browser\r\n *\r\n * @param request\r\n *\r\n * @returns A promise that is fulfilled when this function has completed, or rejected if an error was raised.\r\n */\r\n loginPopup(request) {\r\n return this.controller.loginPopup(request);\r\n }\r\n /**\r\n * Use when initiating the login process by redirecting the user\'s browser to the authorization endpoint. This function redirects the page, so\r\n * any code that follows this function will not execute.\r\n *\r\n * IMPORTANT: It is NOT recommended to have code that is dependent on the resolution of the Promise. This function will navigate away from the current\r\n * browser window. It currently returns a Promise in order to reflect the asynchronous nature of the code running in this function.\r\n *\r\n * @param request\r\n */\r\n loginRedirect(request) {\r\n return this.controller.loginRedirect(request);\r\n }\r\n /**\r\n * Deprecated logout function. Use logoutRedirect or logoutPopup instead\r\n * @param logoutRequest\r\n * @deprecated\r\n */\r\n logout(logoutRequest) {\r\n return this.controller.logout(logoutRequest);\r\n }\r\n /**\r\n * Use to log out the current user, and redirect the user to the postLogoutRedirectUri.\r\n * Default behaviour is to redirect the user to `window.location.href`.\r\n * @param logoutRequest\r\n */\r\n logoutRedirect(logoutRequest) {\r\n return this.controller.logoutRedirect(logoutRequest);\r\n }\r\n /**\r\n * Clears local cache for the current user then opens a popup window prompting the user to sign-out of the server\r\n * @param logoutRequest\r\n */\r\n logoutPopup(logoutRequest) {\r\n return this.controller.logoutPopup(logoutRequest);\r\n }\r\n /**\r\n * This function uses a hidden iframe to fetch an authorization code from the eSTS. There are cases where this may not work:\r\n * - Any browser using a form of Intelligent Tracking Prevention\r\n * - If there is not an established session with the service\r\n *\r\n * In these cases, the request must be done inside a popup or full frame redirect.\r\n *\r\n * For the cases where interaction is required, you cannot send a request with prompt=none.\r\n *\r\n * If your refresh token has expired, you can use this function to fetch a new set of tokens silently as long as\r\n * you session on the server still exists.\r\n * @param request {@link SsoSilentRequest}\r\n *\r\n * @returns A promise that is fulfilled when this function has completed, or rejected if an error was raised.\r\n */\r\n ssoSilent(request) {\r\n return this.controller.ssoSilent(request);\r\n }\r\n /**\r\n * Gets the token cache for the application.\r\n */\r\n getTokenCache() {\r\n return this.controller.getTokenCache();\r\n }\r\n /**\r\n * Returns the logger instance\r\n */\r\n getLogger() {\r\n return this.controller.getLogger();\r\n }\r\n /**\r\n * Replaces the default logger set in configurations with new Logger with new configurations\r\n * @param logger Logger instance\r\n */\r\n setLogger(logger) {\r\n this.controller.setLogger(logger);\r\n }\r\n /**\r\n * Sets the account to use as the active account. If no account is passed to the acquireToken APIs, then MSAL will use this active account.\r\n * @param account\r\n */\r\n setActiveAccount(account) {\r\n this.controller.setActiveAccount(account);\r\n }\r\n /**\r\n * Gets the currently active account\r\n */\r\n getActiveAccount() {\r\n return this.controller.getActiveAccount();\r\n }\r\n /**\r\n * Called by wrapper libraries (Angular & React) to set SKU and Version passed down to telemetry, logger, etc.\r\n * @param sku\r\n * @param version\r\n */\r\n initializeWrapperLibrary(sku, version) {\r\n return this.controller.initializeWrapperLibrary(sku, version);\r\n }\r\n /**\r\n * Sets navigation client\r\n * @param navigationClient\r\n */\r\n setNavigationClient(navigationClient) {\r\n this.controller.setNavigationClient(navigationClient);\r\n }\r\n /**\r\n * Returns the configuration object\r\n * @internal\r\n */\r\n getConfiguration() {\r\n return this.controller.getConfiguration();\r\n }\r\n /**\r\n * Hydrates cache with the tokens and account in the AuthenticationResult object\r\n * @param result\r\n * @param request - The request object that was used to obtain the AuthenticationResult\r\n * @returns\r\n */\r\n async hydrateCache(result, request) {\r\n return this.controller.hydrateCache(result, request);\r\n }\r\n /**\r\n * Clears tokens and account from the browser cache.\r\n * @param logoutRequest\r\n */\r\n clearCache(logoutRequest) {\r\n return this.controller.clearCache(logoutRequest);\r\n }\r\n}\n\n\n//# sourceMappingURL=PublicClientNext.mjs.map\n\n;// ./node_modules/@azure/msal-browser/dist/app/IPublicClientApplication.mjs\n/*! @azure/msal-browser v3.28.1 2025-01-14 */\n\n\n\n\n/*\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License.\r\n */\r\nconst stubbedPublicClientApplication = {\r\n initialize: () => {\r\n return Promise.reject(createBrowserConfigurationAuthError(stubbedPublicClientApplicationCalled));\r\n },\r\n acquireTokenPopup: () => {\r\n return Promise.reject(createBrowserConfigurationAuthError(stubbedPublicClientApplicationCalled));\r\n },\r\n acquireTokenRedirect: () => {\r\n return Promise.reject(createBrowserConfigurationAuthError(stubbedPublicClientApplicationCalled));\r\n },\r\n acquireTokenSilent: () => {\r\n return Promise.reject(createBrowserConfigurationAuthError(stubbedPublicClientApplicationCalled));\r\n },\r\n acquireTokenByCode: () => {\r\n return Promise.reject(createBrowserConfigurationAuthError(stubbedPublicClientApplicationCalled));\r\n },\r\n getAllAccounts: () => {\r\n return [];\r\n },\r\n getAccount: () => {\r\n return null;\r\n },\r\n getAccountByHomeId: () => {\r\n return null;\r\n },\r\n getAccountByUsername: () => {\r\n return null;\r\n },\r\n getAccountByLocalId: () => {\r\n return null;\r\n },\r\n handleRedirectPromise: () => {\r\n return Promise.reject(createBrowserConfigurationAuthError(stubbedPublicClientApplicationCalled));\r\n },\r\n loginPopup: () => {\r\n return Promise.reject(createBrowserConfigurationAuthError(stubbedPublicClientApplicationCalled));\r\n },\r\n loginRedirect: () => {\r\n return Promise.reject(createBrowserConfigurationAuthError(stubbedPublicClientApplicationCalled));\r\n },\r\n logout: () => {\r\n return Promise.reject(createBrowserConfigurationAuthError(stubbedPublicClientApplicationCalled));\r\n },\r\n logoutRedirect: () => {\r\n return Promise.reject(createBrowserConfigurationAuthError(stubbedPublicClientApplicationCalled));\r\n },\r\n logoutPopup: () => {\r\n return Promise.reject(createBrowserConfigurationAuthError(stubbedPublicClientApplicationCalled));\r\n },\r\n ssoSilent: () => {\r\n return Promise.reject(createBrowserConfigurationAuthError(stubbedPublicClientApplicationCalled));\r\n },\r\n addEventCallback: () => {\r\n return null;\r\n },\r\n removeEventCallback: () => {\r\n return;\r\n },\r\n addPerformanceCallback: () => {\r\n return "";\r\n },\r\n removePerformanceCallback: () => {\r\n return false;\r\n },\r\n enableAccountStorageEvents: () => {\r\n return;\r\n },\r\n disableAccountStorageEvents: () => {\r\n return;\r\n },\r\n getTokenCache: () => {\r\n throw createBrowserConfigurationAuthError(stubbedPublicClientApplicationCalled);\r\n },\r\n getLogger: () => {\r\n throw createBrowserConfigurationAuthError(stubbedPublicClientApplicationCalled);\r\n },\r\n setLogger: () => {\r\n return;\r\n },\r\n setActiveAccount: () => {\r\n return;\r\n },\r\n getActiveAccount: () => {\r\n return null;\r\n },\r\n initializeWrapperLibrary: () => {\r\n return;\r\n },\r\n setNavigationClient: () => {\r\n return;\r\n },\r\n getConfiguration: () => {\r\n throw createBrowserConfigurationAuthError(stubbedPublicClientApplicationCalled);\r\n },\r\n hydrateCache: () => {\r\n return Promise.reject(createBrowserConfigurationAuthError(stubbedPublicClientApplicationCalled));\r\n },\r\n clearCache: () => {\r\n return Promise.reject(createBrowserConfigurationAuthError(stubbedPublicClientApplicationCalled));\r\n },\r\n};\n\n\n//# sourceMappingURL=IPublicClientApplication.mjs.map\n\n;// ./node_modules/@azure/msal-browser/dist/cache/BrowserStorage.mjs\n/*! @azure/msal-browser v3.28.1 2025-01-14 */\n\n\n\n\n\n\n\n/*\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License.\r\n */\r\n/**\r\n * @deprecated This class will be removed in a future major version\r\n */\r\nclass BrowserStorage {\r\n constructor(cacheLocation) {\r\n if (cacheLocation === BrowserCacheLocation.LocalStorage) {\r\n this.windowStorage = new LocalStorage();\r\n }\r\n else if (cacheLocation === BrowserCacheLocation.SessionStorage) {\r\n this.windowStorage = new SessionStorage();\r\n }\r\n else {\r\n throw createBrowserConfigurationAuthError(storageNotSupported);\r\n }\r\n }\r\n getItem(key) {\r\n return this.windowStorage.getItem(key);\r\n }\r\n setItem(key, value) {\r\n this.windowStorage.setItem(key, value);\r\n }\r\n removeItem(key) {\r\n this.windowStorage.removeItem(key);\r\n }\r\n getKeys() {\r\n return Object.keys(this.windowStorage);\r\n }\r\n containsKey(key) {\r\n return this.windowStorage.hasOwnProperty(key);\r\n }\r\n}\n\n\n//# sourceMappingURL=BrowserStorage.mjs.map\n\n;// ./node_modules/@azure/msal-browser/dist/event/EventMessage.mjs\n/*! @azure/msal-browser v3.28.1 2025-01-14 */\n\n\n\n\n/*\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License.\r\n */\r\nclass EventMessageUtils {\r\n /**\r\n * Gets interaction status from event message\r\n * @param message\r\n * @param currentStatus\r\n */\r\n static getInteractionStatusFromEvent(message, currentStatus) {\r\n switch (message.eventType) {\r\n case EventType.LOGIN_START:\r\n return InteractionStatus.Login;\r\n case EventType.SSO_SILENT_START:\r\n return InteractionStatus.SsoSilent;\r\n case EventType.ACQUIRE_TOKEN_START:\r\n if (message.interactionType === InteractionType.Redirect ||\r\n message.interactionType === InteractionType.Popup) {\r\n return InteractionStatus.AcquireToken;\r\n }\r\n break;\r\n case EventType.HANDLE_REDIRECT_START:\r\n return InteractionStatus.HandleRedirect;\r\n case EventType.LOGOUT_START:\r\n return InteractionStatus.Logout;\r\n case EventType.SSO_SILENT_SUCCESS:\r\n case EventType.SSO_SILENT_FAILURE:\r\n if (currentStatus &&\r\n currentStatus !== InteractionStatus.SsoSilent) {\r\n // Prevent this event from clearing any status other than ssoSilent\r\n break;\r\n }\r\n return InteractionStatus.None;\r\n case EventType.LOGOUT_END:\r\n if (currentStatus &&\r\n currentStatus !== InteractionStatus.Logout) {\r\n // Prevent this event from clearing any status other than logout\r\n break;\r\n }\r\n return InteractionStatus.None;\r\n case EventType.HANDLE_REDIRECT_END:\r\n if (currentStatus &&\r\n currentStatus !== InteractionStatus.HandleRedirect) {\r\n // Prevent this event from clearing any status other than handleRedirect\r\n break;\r\n }\r\n return InteractionStatus.None;\r\n case EventType.LOGIN_SUCCESS:\r\n case EventType.LOGIN_FAILURE:\r\n case EventType.ACQUIRE_TOKEN_SUCCESS:\r\n case EventType.ACQUIRE_TOKEN_FAILURE:\r\n case EventType.RESTORE_FROM_BFCACHE:\r\n if (message.interactionType === InteractionType.Redirect ||\r\n message.interactionType === InteractionType.Popup) {\r\n if (currentStatus &&\r\n currentStatus !== InteractionStatus.Login &&\r\n currentStatus !== InteractionStatus.AcquireToken) {\r\n // Prevent this event from clearing any status other than login or acquireToken\r\n break;\r\n }\r\n return InteractionStatus.None;\r\n }\r\n break;\r\n }\r\n return null;\r\n }\r\n}\n\n\n//# sourceMappingURL=EventMessage.mjs.map\n\n;// ./node_modules/@azure/msal-browser/dist/crypto/SignedHttpRequest.mjs\n/*! @azure/msal-browser v3.28.1 2025-01-14 */\n\n\n\n\n\n/*\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License.\r\n */\r\nclass SignedHttpRequest {\r\n constructor(shrParameters, shrOptions) {\r\n const loggerOptions = (shrOptions && shrOptions.loggerOptions) || {};\r\n this.logger = new Logger(loggerOptions, dist_packageMetadata_name, packageMetadata_version);\r\n this.cryptoOps = new CryptoOps(this.logger);\r\n this.popTokenGenerator = new PopTokenGenerator(this.cryptoOps);\r\n this.shrParameters = shrParameters;\r\n }\r\n /**\r\n * Generates and caches a keypair for the given request options.\r\n * @returns Public key digest, which should be sent to the token issuer.\r\n */\r\n async generatePublicKeyThumbprint() {\r\n const { kid } = await this.popTokenGenerator.generateKid(this.shrParameters);\r\n return kid;\r\n }\r\n /**\r\n * Generates a signed http request for the given payload with the given key.\r\n * @param payload Payload to sign (e.g. access token)\r\n * @param publicKeyThumbprint Public key digest (from generatePublicKeyThumbprint API)\r\n * @param claims Additional claims to include/override in the signed JWT\r\n * @returns Pop token signed with the corresponding private key\r\n */\r\n async signRequest(payload, publicKeyThumbprint, claims) {\r\n return this.popTokenGenerator.signPayload(payload, publicKeyThumbprint, this.shrParameters, claims);\r\n }\r\n /**\r\n * Removes cached keys from browser for given public key thumbprint\r\n * @param publicKeyThumbprint Public key digest (from generatePublicKeyThumbprint API)\r\n * @returns If keys are properly deleted\r\n */\r\n async removeKeys(publicKeyThumbprint) {\r\n return this.cryptoOps.removeTokenBindingKey(publicKeyThumbprint);\r\n }\r\n}\n\n\n//# sourceMappingURL=SignedHttpRequest.mjs.map\n\n;// ./node_modules/@azure/msal-common/dist/telemetry/performance/PerformanceClient.mjs\n/*! @azure/msal-common v14.16.0 2024-11-05 */\n\n\n\n\n\n\n\n\n/*\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License.\r\n */\r\n/**\r\n * Starts context by adding payload to the stack\r\n * @param event {PerformanceEvent}\r\n * @param abbreviations {Map} event name abbreviations\r\n * @param stack {?PerformanceEventStackedContext[]} stack\r\n */\r\nfunction startContext(event, abbreviations, stack) {\r\n if (!stack) {\r\n return;\r\n }\r\n stack.push({\r\n name: abbreviations.get(event.name) || event.name,\r\n });\r\n}\r\n/**\r\n * Ends context by removing payload from the stack and returning parent or self, if stack is empty, payload\r\n *\r\n * @param event {PerformanceEvent}\r\n * @param abbreviations {Map} event name abbreviations\r\n * @param stack {?PerformanceEventStackedContext[]} stack\r\n * @param error {?unknown} error\r\n */\r\nfunction endContext(event, abbreviations, stack, error) {\r\n if (!stack?.length) {\r\n return;\r\n }\r\n const peek = (stack) => {\r\n return stack.length ? stack[stack.length - 1] : undefined;\r\n };\r\n const abbrEventName = abbreviations.get(event.name) || event.name;\r\n const top = peek(stack);\r\n if (top?.name !== abbrEventName) {\r\n return;\r\n }\r\n const current = stack?.pop();\r\n if (!current) {\r\n return;\r\n }\r\n const errorCode = error instanceof AuthError\r\n ? error.errorCode\r\n : error instanceof Error\r\n ? error.name\r\n : undefined;\r\n const subErr = error instanceof AuthError ? error.subError : undefined;\r\n if (errorCode && current.childErr !== errorCode) {\r\n current.err = errorCode;\r\n if (subErr) {\r\n current.subErr = subErr;\r\n }\r\n }\r\n delete current.name;\r\n delete current.childErr;\r\n const context = {\r\n ...current,\r\n dur: event.durationMs,\r\n };\r\n if (!event.success) {\r\n context.fail = 1;\r\n }\r\n const parent = peek(stack);\r\n if (!parent) {\r\n return { [abbrEventName]: context };\r\n }\r\n if (errorCode) {\r\n parent.childErr = errorCode;\r\n }\r\n let childName;\r\n if (!parent[abbrEventName]) {\r\n childName = abbrEventName;\r\n }\r\n else {\r\n const siblings = Object.keys(parent).filter((key) => key.startsWith(abbrEventName)).length;\r\n childName = `${abbrEventName}_${siblings + 1}`;\r\n }\r\n parent[childName] = context;\r\n return parent;\r\n}\r\n/**\r\n * Adds error name and stack trace to the telemetry event\r\n * @param error {Error}\r\n * @param logger {Logger}\r\n * @param event {PerformanceEvent}\r\n * @param stackMaxSize {number} max error stack size to capture\r\n */\r\nfunction addError(error, logger, event, stackMaxSize = 5) {\r\n if (!(error instanceof Error)) {\r\n logger.trace("PerformanceClient.addErrorStack: Input error is not instance of Error", event.correlationId);\r\n return;\r\n }\r\n else if (error instanceof AuthError) {\r\n event.errorCode = error.errorCode;\r\n event.subErrorCode = error.subError;\r\n if (error instanceof ServerError ||\r\n error instanceof InteractionRequiredAuthError) {\r\n event.serverErrorNo = error.errorNo;\r\n }\r\n return;\r\n }\r\n else if (error instanceof CacheError) {\r\n event.errorCode = error.errorCode;\r\n return;\r\n }\r\n else if (event.errorStack?.length) {\r\n logger.trace("PerformanceClient.addErrorStack: Stack already exist", event.correlationId);\r\n return;\r\n }\r\n else if (!error.stack?.length) {\r\n logger.trace("PerformanceClient.addErrorStack: Input stack is empty", event.correlationId);\r\n return;\r\n }\r\n if (error.stack) {\r\n event.errorStack = compactStack(error.stack, stackMaxSize);\r\n }\r\n event.errorName = error.name;\r\n}\r\n/**\r\n * Compacts error stack into array by fetching N first entries\r\n * @param stack {string} error stack\r\n * @param stackMaxSize {number} max error stack size to capture\r\n * @returns {string[]}\r\n */\r\nfunction compactStack(stack, stackMaxSize) {\r\n if (stackMaxSize < 0) {\r\n return [];\r\n }\r\n const stackArr = stack.split("\\n") || [];\r\n const res = [];\r\n // Check for a handful of known, common runtime errors and log them (with redaction where applicable).\r\n const firstLine = stackArr[0];\r\n if (firstLine.startsWith("TypeError: Cannot read property") ||\r\n firstLine.startsWith("TypeError: Cannot read properties of") ||\r\n firstLine.startsWith("TypeError: Cannot set property") ||\r\n firstLine.startsWith("TypeError: Cannot set properties of") ||\r\n firstLine.endsWith("is not a function")) {\r\n // These types of errors are not at risk of leaking PII. They will indicate unavailable APIs\r\n res.push(compactStackLine(firstLine));\r\n }\r\n else if (firstLine.startsWith("SyntaxError") ||\r\n firstLine.startsWith("TypeError")) {\r\n // Prevent unintentional leaking of arbitrary info by redacting contents between both single and double quotes\r\n res.push(compactStackLine(\r\n // Example: SyntaxError: Unexpected token \'e\', "test" is not valid JSON -> SyntaxError: Unexpected token , is not valid JSON\r\n firstLine.replace(/[\'].*[\']|["].*["]/g, "")));\r\n }\r\n // Get top N stack lines\r\n for (let ix = 1; ix < stackArr.length; ix++) {\r\n if (res.length >= stackMaxSize) {\r\n break;\r\n }\r\n const line = stackArr[ix];\r\n res.push(compactStackLine(line));\r\n }\r\n return res;\r\n}\r\n/**\r\n * Compacts error stack line by shortening file path\r\n * Example: https://localhost/msal-common/src/authority/Authority.js:100:1 -> Authority.js:100:1\r\n * @param line {string} stack line\r\n * @returns {string}\r\n */\r\nfunction compactStackLine(line) {\r\n const filePathIx = line.lastIndexOf(" ") + 1;\r\n if (filePathIx < 1) {\r\n return line;\r\n }\r\n const filePath = line.substring(filePathIx);\r\n let fileNameIx = filePath.lastIndexOf("/");\r\n fileNameIx = fileNameIx < 0 ? filePath.lastIndexOf("\\\\") : fileNameIx;\r\n if (fileNameIx >= 0) {\r\n return (line.substring(0, filePathIx) +\r\n "(" +\r\n filePath.substring(fileNameIx + 1) +\r\n (filePath.charAt(filePath.length - 1) === ")" ? "" : ")")).trimStart();\r\n }\r\n return line.trimStart();\r\n}\r\nclass PerformanceClient {\r\n /**\r\n * Creates an instance of PerformanceClient,\r\n * an abstract class containing core performance telemetry logic.\r\n *\r\n * @constructor\r\n * @param {string} clientId Client ID of the application\r\n * @param {string} authority Authority used by the application\r\n * @param {Logger} logger Logger used by the application\r\n * @param {string} libraryName Name of the library\r\n * @param {string} libraryVersion Version of the library\r\n * @param {ApplicationTelemetry} applicationTelemetry application name and version\r\n * @param {Set} intFields integer fields to be truncated\r\n * @param {Map} abbreviations event name abbreviations\r\n */\r\n constructor(clientId, authority, logger, libraryName, libraryVersion, applicationTelemetry, intFields, abbreviations) {\r\n this.authority = authority;\r\n this.libraryName = libraryName;\r\n this.libraryVersion = libraryVersion;\r\n this.applicationTelemetry = applicationTelemetry;\r\n this.clientId = clientId;\r\n this.logger = logger;\r\n this.callbacks = new Map();\r\n this.eventsByCorrelationId = new Map();\r\n this.eventStack = new Map();\r\n this.queueMeasurements = new Map();\r\n this.preQueueTimeByCorrelationId = new Map();\r\n this.intFields = intFields || new Set();\r\n for (const item of IntFields) {\r\n this.intFields.add(item);\r\n }\r\n this.abbreviations = abbreviations || new Map();\r\n for (const [key, value] of PerformanceEventAbbreviations) {\r\n this.abbreviations.set(key, value);\r\n }\r\n }\r\n /**\r\n * Starts and returns an platform-specific implementation of IPerformanceMeasurement.\r\n * Note: this function can be changed to abstract at the next major version bump.\r\n *\r\n * @param {string} measureName\r\n * @param {string} correlationId\r\n * @returns {IPerformanceMeasurement}\r\n * @deprecated This method will be removed in the next major version\r\n */\r\n startPerformanceMeasurement(measureName, // eslint-disable-line @typescript-eslint/no-unused-vars\r\n correlationId // eslint-disable-line @typescript-eslint/no-unused-vars\r\n ) {\r\n return {};\r\n }\r\n /**\r\n * Gets map of pre-queue times by correlation Id\r\n *\r\n * @param {PerformanceEvents} eventName\r\n * @param {string} correlationId\r\n * @returns {number}\r\n */\r\n getPreQueueTime(eventName, correlationId) {\r\n const preQueueEvent = this.preQueueTimeByCorrelationId.get(correlationId);\r\n if (!preQueueEvent) {\r\n this.logger.trace(`PerformanceClient.getPreQueueTime: no pre-queue times found for correlationId: ${correlationId}, unable to add queue measurement`);\r\n return;\r\n }\r\n else if (preQueueEvent.name !== eventName) {\r\n this.logger.trace(`PerformanceClient.getPreQueueTime: no pre-queue time found for ${eventName}, unable to add queue measurement`);\r\n return;\r\n }\r\n return preQueueEvent.time;\r\n }\r\n /**\r\n * Calculates the difference between current time and time when function was queued.\r\n * Note: It is possible to have 0 as the queue time if the current time and the queued time was the same.\r\n *\r\n * @param {number} preQueueTime\r\n * @param {number} currentTime\r\n * @returns {number}\r\n */\r\n calculateQueuedTime(preQueueTime, currentTime) {\r\n if (preQueueTime < 1) {\r\n this.logger.trace(`PerformanceClient: preQueueTime should be a positive integer and not ${preQueueTime}`);\r\n return 0;\r\n }\r\n if (currentTime < 1) {\r\n this.logger.trace(`PerformanceClient: currentTime should be a positive integer and not ${currentTime}`);\r\n return 0;\r\n }\r\n if (currentTime < preQueueTime) {\r\n this.logger.trace("PerformanceClient: currentTime is less than preQueueTime, check how time is being retrieved");\r\n return 0;\r\n }\r\n return currentTime - preQueueTime;\r\n }\r\n /**\r\n * Adds queue measurement time to QueueMeasurements array for given correlation ID.\r\n *\r\n * @param {PerformanceEvents} eventName\r\n * @param {?string} correlationId\r\n * @param {?number} queueTime\r\n * @param {?boolean} manuallyCompleted - indicator for manually completed queue measurements\r\n * @returns\r\n */\r\n addQueueMeasurement(eventName, correlationId, queueTime, manuallyCompleted) {\r\n if (!correlationId) {\r\n this.logger.trace(`PerformanceClient.addQueueMeasurement: correlationId not provided for ${eventName}, cannot add queue measurement`);\r\n return;\r\n }\r\n if (queueTime === 0) {\r\n // Possible for there to be no queue time after calculation\r\n this.logger.trace(`PerformanceClient.addQueueMeasurement: queue time provided for ${eventName} is ${queueTime}`);\r\n }\r\n else if (!queueTime) {\r\n this.logger.trace(`PerformanceClient.addQueueMeasurement: no queue time provided for ${eventName}`);\r\n return;\r\n }\r\n const queueMeasurement = {\r\n eventName,\r\n // Always default queue time to 0 for manually completed (improperly instrumented)\r\n queueTime: manuallyCompleted ? 0 : queueTime,\r\n manuallyCompleted,\r\n };\r\n // Adds to existing correlation Id if present in queueMeasurements\r\n const existingMeasurements = this.queueMeasurements.get(correlationId);\r\n if (existingMeasurements) {\r\n existingMeasurements.push(queueMeasurement);\r\n this.queueMeasurements.set(correlationId, existingMeasurements);\r\n }\r\n else {\r\n // Sets new correlation Id if not present in queueMeasurements\r\n this.logger.trace(`PerformanceClient.addQueueMeasurement: adding correlationId ${correlationId} to queue measurements`);\r\n const measurementArray = [queueMeasurement];\r\n this.queueMeasurements.set(correlationId, measurementArray);\r\n }\r\n // Delete processed pre-queue event.\r\n this.preQueueTimeByCorrelationId.delete(correlationId);\r\n }\r\n /**\r\n * Starts measuring performance for a given operation. Returns a function that should be used to end the measurement.\r\n *\r\n * @param {PerformanceEvents} measureName\r\n * @param {?string} [correlationId]\r\n * @returns {InProgressPerformanceEvent}\r\n */\r\n startMeasurement(measureName, correlationId) {\r\n // Generate a placeholder correlation if the request does not provide one\r\n const eventCorrelationId = correlationId || this.generateId();\r\n if (!correlationId) {\r\n this.logger.info(`PerformanceClient: No correlation id provided for ${measureName}, generating`, eventCorrelationId);\r\n }\r\n this.logger.trace(`PerformanceClient: Performance measurement started for ${measureName}`, eventCorrelationId);\r\n const inProgressEvent = {\r\n eventId: this.generateId(),\r\n status: PerformanceEventStatus.InProgress,\r\n authority: this.authority,\r\n libraryName: this.libraryName,\r\n libraryVersion: this.libraryVersion,\r\n clientId: this.clientId,\r\n name: measureName,\r\n startTimeMs: Date.now(),\r\n correlationId: eventCorrelationId,\r\n appName: this.applicationTelemetry?.appName,\r\n appVersion: this.applicationTelemetry?.appVersion,\r\n };\r\n // Store in progress events so they can be discarded if not ended properly\r\n this.cacheEventByCorrelationId(inProgressEvent);\r\n startContext(inProgressEvent, this.abbreviations, this.eventStack.get(eventCorrelationId));\r\n // Return the event and functions the caller can use to properly end/flush the measurement\r\n return {\r\n end: (event, error) => {\r\n return this.endMeasurement({\r\n // Initial set of event properties\r\n ...inProgressEvent,\r\n // Properties set when event ends\r\n ...event,\r\n }, error);\r\n },\r\n discard: () => {\r\n return this.discardMeasurements(inProgressEvent.correlationId);\r\n },\r\n add: (fields) => {\r\n return this.addFields(fields, inProgressEvent.correlationId);\r\n },\r\n increment: (fields) => {\r\n return this.incrementFields(fields, inProgressEvent.correlationId);\r\n },\r\n event: inProgressEvent,\r\n measurement: new StubPerformanceMeasurement(),\r\n };\r\n }\r\n /**\r\n * Stops measuring the performance for an operation. Should only be called directly by PerformanceClient classes,\r\n * as consumers should instead use the function returned by startMeasurement.\r\n * Adds a new field named as "[event name]DurationMs" for sub-measurements, completes and emits an event\r\n * otherwise.\r\n *\r\n * @param {PerformanceEvent} event\r\n * @param {unknown} error\r\n * @returns {(PerformanceEvent | null)}\r\n */\r\n endMeasurement(event, error) {\r\n const rootEvent = this.eventsByCorrelationId.get(event.correlationId);\r\n if (!rootEvent) {\r\n this.logger.trace(`PerformanceClient: Measurement not found for ${event.eventId}`, event.correlationId);\r\n return null;\r\n }\r\n const isRoot = event.eventId === rootEvent.eventId;\r\n let queueInfo = {\r\n totalQueueTime: 0,\r\n totalQueueCount: 0,\r\n manuallyCompletedCount: 0,\r\n };\r\n event.durationMs = Math.round(event.durationMs || this.getDurationMs(event.startTimeMs));\r\n const context = JSON.stringify(endContext(event, this.abbreviations, this.eventStack.get(rootEvent.correlationId), error));\r\n if (isRoot) {\r\n queueInfo = this.getQueueInfo(event.correlationId);\r\n this.discardMeasurements(rootEvent.correlationId);\r\n }\r\n else {\r\n rootEvent.incompleteSubMeasurements?.delete(event.eventId);\r\n }\r\n this.logger.trace(`PerformanceClient: Performance measurement ended for ${event.name}: ${event.durationMs} ms`, event.correlationId);\r\n if (error) {\r\n addError(error, this.logger, rootEvent);\r\n }\r\n // Add sub-measurement attribute to root event.\r\n if (!isRoot) {\r\n rootEvent[event.name + "DurationMs"] = Math.floor(event.durationMs);\r\n return { ...rootEvent };\r\n }\r\n if (isRoot &&\r\n !error &&\r\n (rootEvent.errorCode || rootEvent.subErrorCode)) {\r\n this.logger.trace(`PerformanceClient: Remove error and sub-error codes for root event ${event.name} as intermediate error was successfully handled`, event.correlationId);\r\n rootEvent.errorCode = undefined;\r\n rootEvent.subErrorCode = undefined;\r\n }\r\n let finalEvent = { ...rootEvent, ...event };\r\n let incompleteSubsCount = 0;\r\n // Incomplete sub-measurements are discarded. They are likely an instrumentation bug that should be fixed.\r\n finalEvent.incompleteSubMeasurements?.forEach((subMeasurement) => {\r\n this.logger.trace(`PerformanceClient: Incomplete submeasurement ${subMeasurement.name} found for ${event.name}`, finalEvent.correlationId);\r\n incompleteSubsCount++;\r\n });\r\n finalEvent.incompleteSubMeasurements = undefined;\r\n finalEvent = {\r\n ...finalEvent,\r\n queuedTimeMs: queueInfo.totalQueueTime,\r\n queuedCount: queueInfo.totalQueueCount,\r\n queuedManuallyCompletedCount: queueInfo.manuallyCompletedCount,\r\n status: PerformanceEventStatus.Completed,\r\n incompleteSubsCount,\r\n context,\r\n };\r\n this.truncateIntegralFields(finalEvent);\r\n this.emitEvents([finalEvent], event.correlationId);\r\n return finalEvent;\r\n }\r\n /**\r\n * Saves extra information to be emitted when the measurements are flushed\r\n * @param fields\r\n * @param correlationId\r\n */\r\n addFields(fields, correlationId) {\r\n this.logger.trace("PerformanceClient: Updating static fields");\r\n const event = this.eventsByCorrelationId.get(correlationId);\r\n if (event) {\r\n this.eventsByCorrelationId.set(correlationId, {\r\n ...event,\r\n ...fields,\r\n });\r\n }\r\n else {\r\n this.logger.trace("PerformanceClient: Event not found for", correlationId);\r\n }\r\n }\r\n /**\r\n * Increment counters to be emitted when the measurements are flushed\r\n * @param fields {string[]}\r\n * @param correlationId {string} correlation identifier\r\n */\r\n incrementFields(fields, correlationId) {\r\n this.logger.trace("PerformanceClient: Updating counters");\r\n const event = this.eventsByCorrelationId.get(correlationId);\r\n if (event) {\r\n for (const counter in fields) {\r\n if (!event.hasOwnProperty(counter)) {\r\n event[counter] = 0;\r\n }\r\n else if (isNaN(Number(event[counter]))) {\r\n return;\r\n }\r\n event[counter] += fields[counter];\r\n }\r\n }\r\n else {\r\n this.logger.trace("PerformanceClient: Event not found for", correlationId);\r\n }\r\n }\r\n /**\r\n * Upserts event into event cache.\r\n * First key is the correlation id, second key is the event id.\r\n * Allows for events to be grouped by correlation id,\r\n * and to easily allow for properties on them to be updated.\r\n *\r\n * @private\r\n * @param {PerformanceEvent} event\r\n */\r\n cacheEventByCorrelationId(event) {\r\n const rootEvent = this.eventsByCorrelationId.get(event.correlationId);\r\n if (rootEvent) {\r\n this.logger.trace(`PerformanceClient: Performance measurement for ${event.name} added/updated`, event.correlationId);\r\n rootEvent.incompleteSubMeasurements =\r\n rootEvent.incompleteSubMeasurements || new Map();\r\n rootEvent.incompleteSubMeasurements.set(event.eventId, {\r\n name: event.name,\r\n startTimeMs: event.startTimeMs,\r\n });\r\n }\r\n else {\r\n this.logger.trace(`PerformanceClient: Performance measurement for ${event.name} started`, event.correlationId);\r\n this.eventsByCorrelationId.set(event.correlationId, { ...event });\r\n this.eventStack.set(event.correlationId, []);\r\n }\r\n }\r\n getQueueInfo(correlationId) {\r\n const queueMeasurementForCorrelationId = this.queueMeasurements.get(correlationId);\r\n if (!queueMeasurementForCorrelationId) {\r\n this.logger.trace(`PerformanceClient: no queue measurements found for for correlationId: ${correlationId}`);\r\n }\r\n let totalQueueTime = 0;\r\n let totalQueueCount = 0;\r\n let manuallyCompletedCount = 0;\r\n queueMeasurementForCorrelationId?.forEach((measurement) => {\r\n totalQueueTime += measurement.queueTime;\r\n totalQueueCount++;\r\n manuallyCompletedCount += measurement.manuallyCompleted ? 1 : 0;\r\n });\r\n return {\r\n totalQueueTime,\r\n totalQueueCount,\r\n manuallyCompletedCount,\r\n };\r\n }\r\n /**\r\n * Removes measurements and aux data for a given correlation id.\r\n *\r\n * @param {string} correlationId\r\n */\r\n discardMeasurements(correlationId) {\r\n this.logger.trace("PerformanceClient: Performance measurements discarded", correlationId);\r\n this.eventsByCorrelationId.delete(correlationId);\r\n this.logger.trace("PerformanceClient: QueueMeasurements discarded", correlationId);\r\n this.queueMeasurements.delete(correlationId);\r\n this.logger.trace("PerformanceClient: Pre-queue times discarded", correlationId);\r\n this.preQueueTimeByCorrelationId.delete(correlationId);\r\n this.logger.trace("PerformanceClient: Event stack discarded", correlationId);\r\n this.eventStack.delete(correlationId);\r\n }\r\n /**\r\n * Registers a callback function to receive performance events.\r\n *\r\n * @param {PerformanceCallbackFunction} callback\r\n * @returns {string}\r\n */\r\n addPerformanceCallback(callback) {\r\n for (const [id, cb] of this.callbacks) {\r\n if (cb.toString() === callback.toString()) {\r\n this.logger.warning(`PerformanceClient: Performance callback is already registered with id: ${id}`);\r\n return id;\r\n }\r\n }\r\n const callbackId = this.generateId();\r\n this.callbacks.set(callbackId, callback);\r\n this.logger.verbose(`PerformanceClient: Performance callback registered with id: ${callbackId}`);\r\n return callbackId;\r\n }\r\n /**\r\n * Removes a callback registered with addPerformanceCallback.\r\n *\r\n * @param {string} callbackId\r\n * @returns {boolean}\r\n */\r\n removePerformanceCallback(callbackId) {\r\n const result = this.callbacks.delete(callbackId);\r\n if (result) {\r\n this.logger.verbose(`PerformanceClient: Performance callback ${callbackId} removed.`);\r\n }\r\n else {\r\n this.logger.verbose(`PerformanceClient: Performance callback ${callbackId} not removed.`);\r\n }\r\n return result;\r\n }\r\n /**\r\n * Emits events to all registered callbacks.\r\n *\r\n * @param {PerformanceEvent[]} events\r\n * @param {?string} [correlationId]\r\n */\r\n emitEvents(events, correlationId) {\r\n this.logger.verbose("PerformanceClient: Emitting performance events", correlationId);\r\n this.callbacks.forEach((callback, callbackId) => {\r\n this.logger.trace(`PerformanceClient: Emitting event to callback ${callbackId}`, correlationId);\r\n callback.apply(null, [events]);\r\n });\r\n }\r\n /**\r\n * Enforce truncation of integral fields in performance event.\r\n * @param {PerformanceEvent} event performance event to update.\r\n */\r\n truncateIntegralFields(event) {\r\n this.intFields.forEach((key) => {\r\n if (key in event && typeof event[key] === "number") {\r\n event[key] = Math.floor(event[key]);\r\n }\r\n });\r\n }\r\n /**\r\n * Returns event duration in milliseconds\r\n * @param startTimeMs {number}\r\n * @returns {number}\r\n */\r\n getDurationMs(startTimeMs) {\r\n const durationMs = Date.now() - startTimeMs;\r\n // Handle clock skew\r\n return durationMs < 0 ? durationMs : 0;\r\n }\r\n}\n\n\n//# sourceMappingURL=PerformanceClient.mjs.map\n\n;// ./node_modules/@azure/msal-browser/dist/telemetry/BrowserPerformanceClient.mjs\n/*! @azure/msal-browser v3.28.1 2025-01-14 */\n\n\n\n\n\n\n/*\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License.\r\n */\r\n/**\r\n * Returns browser performance measurement module if session flag is enabled. Returns undefined otherwise.\r\n */\r\nfunction getPerfMeasurementModule() {\r\n let sessionStorage;\r\n try {\r\n sessionStorage = window[BrowserCacheLocation.SessionStorage];\r\n const perfEnabled = sessionStorage?.getItem(BROWSER_PERF_ENABLED_KEY);\r\n if (Number(perfEnabled) === 1) {\r\n return Promise.resolve(/* import() */).then(__webpack_require__.bind(__webpack_require__, 89162));\r\n }\r\n // Mute errors if it\'s a non-browser environment or cookies are blocked.\r\n }\r\n catch (e) { }\r\n return undefined;\r\n}\r\n/**\r\n * Returns boolean, indicating whether browser supports window.performance.now() function.\r\n */\r\nfunction supportsBrowserPerformanceNow() {\r\n return (typeof window !== "undefined" &&\r\n typeof window.performance !== "undefined" &&\r\n typeof window.performance.now === "function");\r\n}\r\n/**\r\n * Returns event duration in milliseconds using window performance API if available. Returns undefined otherwise.\r\n * @param startTime {DOMHighResTimeStamp | undefined}\r\n * @returns {number | undefined}\r\n */\r\nfunction getPerfDurationMs(startTime) {\r\n if (!startTime || !supportsBrowserPerformanceNow()) {\r\n return undefined;\r\n }\r\n return Math.round(window.performance.now() - startTime);\r\n}\r\nclass BrowserPerformanceClient extends PerformanceClient {\r\n constructor(configuration, intFields, abbreviations) {\r\n super(configuration.auth.clientId, configuration.auth.authority || `${Constants.DEFAULT_AUTHORITY}`, new Logger(configuration.system?.loggerOptions || {}, dist_packageMetadata_name, packageMetadata_version), dist_packageMetadata_name, packageMetadata_version, configuration.telemetry?.application || {\r\n appName: "",\r\n appVersion: "",\r\n }, intFields, abbreviations);\r\n }\r\n generateId() {\r\n return createNewGuid();\r\n }\r\n getPageVisibility() {\r\n return document.visibilityState?.toString() || null;\r\n }\r\n deleteIncompleteSubMeasurements(inProgressEvent) {\r\n void getPerfMeasurementModule()?.then((module) => {\r\n const rootEvent = this.eventsByCorrelationId.get(inProgressEvent.event.correlationId);\r\n const isRootEvent = rootEvent &&\r\n rootEvent.eventId === inProgressEvent.event.eventId;\r\n const incompleteMeasurements = [];\r\n if (isRootEvent && rootEvent?.incompleteSubMeasurements) {\r\n rootEvent.incompleteSubMeasurements.forEach((subMeasurement) => {\r\n incompleteMeasurements.push({ ...subMeasurement });\r\n });\r\n }\r\n // Clean up remaining marks for incomplete sub-measurements\r\n module.BrowserPerformanceMeasurement.flushMeasurements(inProgressEvent.event.correlationId, incompleteMeasurements);\r\n });\r\n }\r\n /**\r\n * Starts measuring performance for a given operation. Returns a function that should be used to end the measurement.\r\n * Also captures browser page visibilityState.\r\n *\r\n * @param {PerformanceEvents} measureName\r\n * @param {?string} [correlationId]\r\n * @returns {((event?: Partial) => PerformanceEvent| null)}\r\n */\r\n startMeasurement(measureName, correlationId) {\r\n // Capture page visibilityState and then invoke start/end measurement\r\n const startPageVisibility = this.getPageVisibility();\r\n const inProgressEvent = super.startMeasurement(measureName, correlationId);\r\n const startTime = supportsBrowserPerformanceNow()\r\n ? window.performance.now()\r\n : undefined;\r\n const browserMeasurement = getPerfMeasurementModule()?.then((module) => {\r\n return new module.BrowserPerformanceMeasurement(measureName, inProgressEvent.event.correlationId);\r\n });\r\n void browserMeasurement?.then((measurement) => measurement.startMeasurement());\r\n return {\r\n ...inProgressEvent,\r\n end: (event, error) => {\r\n const res = inProgressEvent.end({\r\n ...event,\r\n startPageVisibility,\r\n endPageVisibility: this.getPageVisibility(),\r\n durationMs: getPerfDurationMs(startTime),\r\n }, error);\r\n void browserMeasurement?.then((measurement) => measurement.endMeasurement());\r\n this.deleteIncompleteSubMeasurements(inProgressEvent);\r\n return res;\r\n },\r\n discard: () => {\r\n inProgressEvent.discard();\r\n void browserMeasurement?.then((measurement) => measurement.flushMeasurement());\r\n this.deleteIncompleteSubMeasurements(inProgressEvent);\r\n },\r\n };\r\n }\r\n /**\r\n * Adds pre-queue time to preQueueTimeByCorrelationId map.\r\n * @param {PerformanceEvents} eventName\r\n * @param {?string} correlationId\r\n * @returns\r\n */\r\n setPreQueueTime(eventName, correlationId) {\r\n if (!supportsBrowserPerformanceNow()) {\r\n this.logger.trace(`BrowserPerformanceClient: window performance API not available, unable to set telemetry queue time for ${eventName}`);\r\n return;\r\n }\r\n if (!correlationId) {\r\n this.logger.trace(`BrowserPerformanceClient: correlationId for ${eventName} not provided, unable to set telemetry queue time`);\r\n return;\r\n }\r\n const preQueueEvent = this.preQueueTimeByCorrelationId.get(correlationId);\r\n /**\r\n * Manually complete queue measurement if there is an incomplete pre-queue event.\r\n * Incomplete pre-queue events are instrumentation bugs that should be fixed.\r\n */\r\n if (preQueueEvent) {\r\n this.logger.trace(`BrowserPerformanceClient: Incomplete pre-queue ${preQueueEvent.name} found`, correlationId);\r\n this.addQueueMeasurement(preQueueEvent.name, correlationId, undefined, true);\r\n }\r\n this.preQueueTimeByCorrelationId.set(correlationId, {\r\n name: eventName,\r\n time: window.performance.now(),\r\n });\r\n }\r\n /**\r\n * Calculates and adds queue time measurement for given performance event.\r\n *\r\n * @param {PerformanceEvents} eventName\r\n * @param {?string} correlationId\r\n * @param {?number} queueTime\r\n * @param {?boolean} manuallyCompleted - indicator for manually completed queue measurements\r\n * @returns\r\n */\r\n addQueueMeasurement(eventName, correlationId, queueTime, manuallyCompleted) {\r\n if (!supportsBrowserPerformanceNow()) {\r\n this.logger.trace(`BrowserPerformanceClient: window performance API not available, unable to add queue measurement for ${eventName}`);\r\n return;\r\n }\r\n if (!correlationId) {\r\n this.logger.trace(`BrowserPerformanceClient: correlationId for ${eventName} not provided, unable to add queue measurement`);\r\n return;\r\n }\r\n const preQueueTime = super.getPreQueueTime(eventName, correlationId);\r\n if (!preQueueTime) {\r\n return;\r\n }\r\n const currentTime = window.performance.now();\r\n const resQueueTime = queueTime || super.calculateQueuedTime(preQueueTime, currentTime);\r\n return super.addQueueMeasurement(eventName, correlationId, resQueueTime, manuallyCompleted);\r\n }\r\n}\n\n\n//# sourceMappingURL=BrowserPerformanceClient.mjs.map\n\n// EXTERNAL MODULE: ./node_modules/@azure/msal-browser/dist/telemetry/BrowserPerformanceMeasurement.mjs\nvar BrowserPerformanceMeasurement = __webpack_require__(89162);\n;// ./node_modules/@azure/msal-common/dist/request/AuthenticationHeaderParser.mjs\n/*! @azure/msal-common v14.16.0 2024-11-05 */\n\n\n\n\n\n/*\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License.\r\n */\r\n/**\r\n * This is a helper class that parses supported HTTP response authentication headers to extract and return\r\n * header challenge values that can be used outside the basic authorization flows.\r\n */\r\nclass AuthenticationHeaderParser {\r\n constructor(headers) {\r\n this.headers = headers;\r\n }\r\n /**\r\n * This method parses the SHR nonce value out of either the Authentication-Info or WWW-Authenticate authentication headers.\r\n * @returns\r\n */\r\n getShrNonce() {\r\n // Attempt to parse nonce from Authentiacation-Info\r\n const authenticationInfo = this.headers[HeaderNames.AuthenticationInfo];\r\n if (authenticationInfo) {\r\n const authenticationInfoChallenges = this.parseChallenges(authenticationInfo);\r\n if (authenticationInfoChallenges.nextnonce) {\r\n return authenticationInfoChallenges.nextnonce;\r\n }\r\n throw createClientConfigurationError(invalidAuthenticationHeader);\r\n }\r\n // Attempt to parse nonce from WWW-Authenticate\r\n const wwwAuthenticate = this.headers[HeaderNames.WWWAuthenticate];\r\n if (wwwAuthenticate) {\r\n const wwwAuthenticateChallenges = this.parseChallenges(wwwAuthenticate);\r\n if (wwwAuthenticateChallenges.nonce) {\r\n return wwwAuthenticateChallenges.nonce;\r\n }\r\n throw createClientConfigurationError(invalidAuthenticationHeader);\r\n }\r\n // If neither header is present, throw missing headers error\r\n throw createClientConfigurationError(missingNonceAuthenticationHeader);\r\n }\r\n /**\r\n * Parses an HTTP header\'s challenge set into a key/value map.\r\n * @param header\r\n * @returns\r\n */\r\n parseChallenges(header) {\r\n const schemeSeparator = header.indexOf(" ");\r\n const challenges = header.substr(schemeSeparator + 1).split(",");\r\n const challengeMap = {};\r\n challenges.forEach((challenge) => {\r\n const [key, value] = challenge.split("=");\r\n // Remove escaped quotation marks (\', ") from challenge string to keep only the challenge value\r\n challengeMap[key] = unescape(value.replace(/[\'"]+/g, Constants.EMPTY_STRING));\r\n });\r\n return challengeMap;\r\n }\r\n}\n\n\n//# sourceMappingURL=AuthenticationHeaderParser.mjs.map\n\n;// ./node_modules/@azure/msal-browser/dist/index.mjs\n/*! @azure/msal-browser v3.28.1 2025-01-14 */\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n//# sourceMappingURL=index.mjs.map\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiODYxNi5qcyIsIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FDdlVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQ2JBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQ3ZEQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FDOUJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUNoSkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQ25HQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUNwREE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQ2xRQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FDbkRBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUMzS0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUNsR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUN4REE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FDbFJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FDMU5BO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUN6ZUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUMvQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUNwS0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUNYQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUNqREE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FDNUtBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FDbE1BO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUNmQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUN0QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FDM0NBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQ1BBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FDakVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FDL0NBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQzlVQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUNoTkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQzdDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FDakZBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FDakJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUN4QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FDN1BBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUNoSkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FDVkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUNoQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQy91Q0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUM5R0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FDbkJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQ2xGQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQzVDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FDakNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQy9IQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUMzSUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FDUEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FDdkdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUNsQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FDN0pBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FDN0VBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQ2pEQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUNWQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQzdCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FDN0NBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQzNDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUNoTkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUNuQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUM1SUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUM1TEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUNkQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FDWkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQ1pBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUNsSEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FDMzFCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQ2pCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQy9GQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQzdFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FDWkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQ2pDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FDakNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUMzQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FDN0RBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FDOXJDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUNsSUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQ3BDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FDckVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQ3RCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FDdEdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUMvREE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQ3hFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQ2hhQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQ3RDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQ3ZLQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FDMUZBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FDN0JBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQzFZQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQ3BCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQ2hkQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FDM1FBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQy9IQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUNoRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQzVEQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUN4T0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FDVkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQ2ZBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQ3RFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQ3JQQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FDdEpBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUN6REE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUMxb0JBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQ3pRQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQ3JHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FDN0NBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FDcGNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FDL0lBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FDdldBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FDL0lBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FDbklBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FDMUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQzdNQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUNoQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQzNFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQzE0Q0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUNYQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FDMUxBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FDN0JBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUMvZUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FDbENBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUN2WEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FDelFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUNoREE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUMxV0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FDaEhBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUM3Q0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQzNFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQy9DQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQ3ptQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7O0FDM0tBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUMvREE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL2l0Zy1uZXh0Z2VuLWZyb250ZW5kLy4vbm9kZV9tb2R1bGVzL0BhenVyZS9tc2FsLWNvbW1vbi9kaXN0L3V0aWxzL0NvbnN0YW50cy5tanM/MTA0MSIsIndlYnBhY2s6Ly9pdGctbmV4dGdlbi1mcm9udGVuZC8uL25vZGVfbW9kdWxlcy9AYXp1cmUvbXNhbC1jb21tb24vZGlzdC9lcnJvci9BdXRoRXJyb3JDb2Rlcy5tanM/ZjM2ZiIsIndlYnBhY2s6Ly9pdGctbmV4dGdlbi1mcm9udGVuZC8uL25vZGVfbW9kdWxlcy9AYXp1cmUvbXNhbC1jb21tb24vZGlzdC9lcnJvci9BdXRoRXJyb3IubWpzPzY1YTUiLCJ3ZWJwYWNrOi8vaXRnLW5leHRnZW4tZnJvbnRlbmQvLi9ub2RlX21vZHVsZXMvQGF6dXJlL21zYWwtY29tbW9uL2Rpc3QvZXJyb3IvQ2xpZW50Q29uZmlndXJhdGlvbkVycm9yQ29kZXMubWpzP2IzZWIiLCJ3ZWJwYWNrOi8vaXRnLW5leHRnZW4tZnJvbnRlbmQvLi9ub2RlX21vZHVsZXMvQGF6dXJlL21zYWwtY29tbW9uL2Rpc3QvZXJyb3IvQ2xpZW50Q29uZmlndXJhdGlvbkVycm9yLm1qcz9jNDNkIiwid2VicGFjazovL2l0Zy1uZXh0Z2VuLWZyb250ZW5kLy4vbm9kZV9tb2R1bGVzL0BhenVyZS9tc2FsLWNvbW1vbi9kaXN0L3V0aWxzL1N0cmluZ1V0aWxzLm1qcz84MjNhIiwid2VicGFjazovL2l0Zy1uZXh0Z2VuLWZyb250ZW5kLy4vbm9kZV9tb2R1bGVzL0BhenVyZS9tc2FsLWNvbW1vbi9kaXN0L2Vycm9yL0NsaWVudEF1dGhFcnJvckNvZGVzLm1qcz8xMTZhIiwid2VicGFjazovL2l0Zy1uZXh0Z2VuLWZyb250ZW5kLy4vbm9kZV9tb2R1bGVzL0BhenVyZS9tc2FsLWNvbW1vbi9kaXN0L2Vycm9yL0NsaWVudEF1dGhFcnJvci5tanM/NWFhMCIsIndlYnBhY2s6Ly9pdGctbmV4dGdlbi1mcm9udGVuZC8uL25vZGVfbW9kdWxlcy9AYXp1cmUvbXNhbC1jb21tb24vZGlzdC91dGlscy9VcmxVdGlscy5tanM/ZGRiOSIsIndlYnBhY2s6Ly9pdGctbmV4dGdlbi1mcm9udGVuZC8uL25vZGVfbW9kdWxlcy9AYXp1cmUvbXNhbC1jb21tb24vZGlzdC91cmwvVXJsU3RyaW5nLm1qcz84NDZkIiwid2VicGFjazovL2l0Zy1uZXh0Z2VuLWZyb250ZW5kLy4vbm9kZV9tb2R1bGVzL0BhenVyZS9tc2FsLWNvbW1vbi9kaXN0L3V0aWxzL0Z1bmN0aW9uV3JhcHBlcnMubWpzPzUwNmIiLCJ3ZWJwYWNrOi8vaXRnLW5leHRnZW4tZnJvbnRlbmQvLi9ub2RlX21vZHVsZXMvQGF6dXJlL21zYWwtYnJvd3Nlci9kaXN0L2Vycm9yL0Jyb3dzZXJBdXRoRXJyb3JDb2Rlcy5tanM/Njk1NiIsIndlYnBhY2s6Ly9pdGctbmV4dGdlbi1mcm9udGVuZC8uL25vZGVfbW9kdWxlcy9AYXp1cmUvbXNhbC1icm93c2VyL2Rpc3QvZXJyb3IvQnJvd3NlckF1dGhFcnJvci5tanM/NjFjOSIsIndlYnBhY2s6Ly9pdGctbmV4dGdlbi1mcm9udGVuZC8uL25vZGVfbW9kdWxlcy9AYXp1cmUvbXNhbC1icm93c2VyL2Rpc3QvdXRpbHMvQnJvd3NlckNvbnN0YW50cy5tanM/MzUzOCIsIndlYnBhY2s6Ly9pdGctbmV4dGdlbi1mcm9udGVuZC8uL25vZGVfbW9kdWxlcy9AYXp1cmUvbXNhbC1jb21tb24vZGlzdC90ZWxlbWV0cnkvcGVyZm9ybWFuY2UvUGVyZm9ybWFuY2VFdmVudC5tanM/NDQ3YyIsIndlYnBhY2s6Ly9pdGctbmV4dGdlbi1mcm9udGVuZC8uL25vZGVfbW9kdWxlcy9AYXp1cmUvbXNhbC1icm93c2VyL2Rpc3QvZW5jb2RlL0Jhc2U2NEVuY29kZS5tanM/ZDE1NyIsIndlYnBhY2s6Ly9pdGctbmV4dGdlbi1mcm9udGVuZC8uL25vZGVfbW9kdWxlcy9AYXp1cmUvbXNhbC1icm93c2VyL2Rpc3QvY3J5cHRvL0Jyb3dzZXJDcnlwdG8ubWpzP2Q4ZmYiLCJ3ZWJwYWNrOi8vaXRnLW5leHRnZW4tZnJvbnRlbmQvLi9ub2RlX21vZHVsZXMvQGF6dXJlL21zYWwtYnJvd3Nlci9kaXN0L2Vycm9yL0Jyb3dzZXJDb25maWd1cmF0aW9uQXV0aEVycm9yQ29kZXMubWpzP2MyODEiLCJ3ZWJwYWNrOi8vaXRnLW5leHRnZW4tZnJvbnRlbmQvLi9ub2RlX21vZHVsZXMvQGF6dXJlL21zYWwtYnJvd3Nlci9kaXN0L2Vycm9yL0Jyb3dzZXJDb25maWd1cmF0aW9uQXV0aEVycm9yLm1qcz9hMzI0Iiwid2VicGFjazovL2l0Zy1uZXh0Z2VuLWZyb250ZW5kLy4vbm9kZV9tb2R1bGVzL0BhenVyZS9tc2FsLWJyb3dzZXIvZGlzdC91dGlscy9Ccm93c2VyVXRpbHMubWpzP2Y2ZWMiLCJ3ZWJwYWNrOi8vaXRnLW5leHRnZW4tZnJvbnRlbmQvLi9ub2RlX21vZHVsZXMvQGF6dXJlL21zYWwtY29tbW9uL2Rpc3QvbG9nZ2VyL0xvZ2dlci5tanM/NmQxNCIsIndlYnBhY2s6Ly9pdGctbmV4dGdlbi1mcm9udGVuZC8uL25vZGVfbW9kdWxlcy9AYXp1cmUvbXNhbC1jb21tb24vZGlzdC9hdXRob3JpdHkvUHJvdG9jb2xNb2RlLm1qcz81ZjAxIiwid2VicGFjazovL2l0Zy1uZXh0Z2VuLWZyb250ZW5kLy4vbm9kZV9tb2R1bGVzL0BhenVyZS9tc2FsLWNvbW1vbi9kaXN0L2F1dGhvcml0eS9BdXRob3JpdHlPcHRpb25zLm1qcz8zYmNmIiwid2VicGFjazovL2l0Zy1uZXh0Z2VuLWZyb250ZW5kLy4vbm9kZV9tb2R1bGVzL0BhenVyZS9tc2FsLWNvbW1vbi9kaXN0L2NyeXB0by9JQ3J5cHRvLm1qcz83OGFjIiwid2VicGFjazovL2l0Zy1uZXh0Z2VuLWZyb250ZW5kLy4vbm9kZV9tb2R1bGVzL0BhenVyZS9tc2FsLWNvbW1vbi9kaXN0L3BhY2thZ2VNZXRhZGF0YS5tanM/NGE0MyIsIndlYnBhY2s6Ly9pdGctbmV4dGdlbi1mcm9udGVuZC8uL25vZGVfbW9kdWxlcy9AYXp1cmUvbXNhbC1jb21tb24vZGlzdC9hY2NvdW50L0F1dGhUb2tlbi5tanM/NGRmZiIsIndlYnBhY2s6Ly9pdGctbmV4dGdlbi1mcm9udGVuZC8uL25vZGVfbW9kdWxlcy9AYXp1cmUvbXNhbC1jb21tb24vZGlzdC91dGlscy9UaW1lVXRpbHMubWpzPzBmNGYiLCJ3ZWJwYWNrOi8vaXRnLW5leHRnZW4tZnJvbnRlbmQvLi9ub2RlX21vZHVsZXMvQGF6dXJlL21zYWwtY29tbW9uL2Rpc3QvY2FjaGUvdXRpbHMvQ2FjaGVIZWxwZXJzLm1qcz9iYzY0Iiwid2VicGFjazovL2l0Zy1uZXh0Z2VuLWZyb250ZW5kLy4vbm9kZV9tb2R1bGVzL0BhenVyZS9tc2FsLWNvbW1vbi9kaXN0L3JlcXVlc3QvU2NvcGVTZXQubWpzP2RjNmIiLCJ3ZWJwYWNrOi8vaXRnLW5leHRnZW4tZnJvbnRlbmQvLi9ub2RlX21vZHVsZXMvQGF6dXJlL21zYWwtY29tbW9uL2Rpc3QvYWNjb3VudC9DbGllbnRJbmZvLm1qcz85NzViIiwid2VicGFjazovL2l0Zy1uZXh0Z2VuLWZyb250ZW5kLy4vbm9kZV9tb2R1bGVzL0BhenVyZS9tc2FsLWNvbW1vbi9kaXN0L2FjY291bnQvQWNjb3VudEluZm8ubWpzP2VkN2QiLCJ3ZWJwYWNrOi8vaXRnLW5leHRnZW4tZnJvbnRlbmQvLi9ub2RlX21vZHVsZXMvQGF6dXJlL21zYWwtY29tbW9uL2Rpc3QvYXV0aG9yaXR5L0F1dGhvcml0eVR5cGUubWpzP2M2ZTMiLCJ3ZWJwYWNrOi8vaXRnLW5leHRnZW4tZnJvbnRlbmQvLi9ub2RlX21vZHVsZXMvQGF6dXJlL21zYWwtY29tbW9uL2Rpc3QvYWNjb3VudC9Ub2tlbkNsYWltcy5tanM/N2FiOCIsIndlYnBhY2s6Ly9pdGctbmV4dGdlbi1mcm9udGVuZC8uL25vZGVfbW9kdWxlcy9AYXp1cmUvbXNhbC1jb21tb24vZGlzdC9jYWNoZS9lbnRpdGllcy9BY2NvdW50RW50aXR5Lm1qcz8zYWVlIiwid2VicGFjazovL2l0Zy1uZXh0Z2VuLWZyb250ZW5kLy4vbm9kZV9tb2R1bGVzL0BhenVyZS9tc2FsLWNvbW1vbi9kaXN0L2F1dGhvcml0eS9BdXRob3JpdHlNZXRhZGF0YS5tanM/Yjk3NyIsIndlYnBhY2s6Ly9pdGctbmV4dGdlbi1mcm9udGVuZC8uL25vZGVfbW9kdWxlcy9AYXp1cmUvbXNhbC1jb21tb24vZGlzdC9lcnJvci9DYWNoZUVycm9yQ29kZXMubWpzPzc5NTMiLCJ3ZWJwYWNrOi8vaXRnLW5leHRnZW4tZnJvbnRlbmQvLi9ub2RlX21vZHVsZXMvQGF6dXJlL21zYWwtY29tbW9uL2Rpc3QvZXJyb3IvQ2FjaGVFcnJvci5tanM/YWVmZiIsIndlYnBhY2s6Ly9pdGctbmV4dGdlbi1mcm9udGVuZC8uL25vZGVfbW9kdWxlcy9AYXp1cmUvbXNhbC1jb21tb24vZGlzdC9jYWNoZS9DYWNoZU1hbmFnZXIubWpzPzc3NTUiLCJ3ZWJwYWNrOi8vaXRnLW5leHRnZW4tZnJvbnRlbmQvLi9ub2RlX21vZHVsZXMvQGF6dXJlL21zYWwtY29tbW9uL2Rpc3QvY29uZmlnL0NsaWVudENvbmZpZ3VyYXRpb24ubWpzP2E0MjAiLCJ3ZWJwYWNrOi8vaXRnLW5leHRnZW4tZnJvbnRlbmQvLi9ub2RlX21vZHVsZXMvQGF6dXJlL21zYWwtY29tbW9uL2Rpc3QvbmV0d29yay9JTmV0d29ya01vZHVsZS5tanM/YTg5NSIsIndlYnBhY2s6Ly9pdGctbmV4dGdlbi1mcm9udGVuZC8uL25vZGVfbW9kdWxlcy9AYXp1cmUvbXNhbC1jb21tb24vZGlzdC90ZWxlbWV0cnkvcGVyZm9ybWFuY2UvU3R1YlBlcmZvcm1hbmNlQ2xpZW50Lm1qcz8wZWVlIiwid2VicGFjazovL2l0Zy1uZXh0Z2VuLWZyb250ZW5kLy4vbm9kZV9tb2R1bGVzL0BhenVyZS9tc2FsLWJyb3dzZXIvZGlzdC9uYXZpZ2F0aW9uL05hdmlnYXRpb25DbGllbnQubWpzP2E3NWEiLCJ3ZWJwYWNrOi8vaXRnLW5leHRnZW4tZnJvbnRlbmQvLi9ub2RlX21vZHVsZXMvQGF6dXJlL21zYWwtY29tbW9uL2Rpc3QvZXJyb3IvTmV0d29ya0Vycm9yLm1qcz9mZWY2Iiwid2VicGFjazovL2l0Zy1uZXh0Z2VuLWZyb250ZW5kLy4vbm9kZV9tb2R1bGVzL0BhenVyZS9tc2FsLWJyb3dzZXIvZGlzdC9uZXR3b3JrL0ZldGNoQ2xpZW50Lm1qcz8zYTAyIiwid2VicGFjazovL2l0Zy1uZXh0Z2VuLWZyb250ZW5kLy4vbm9kZV9tb2R1bGVzL0BhenVyZS9tc2FsLWJyb3dzZXIvZGlzdC9jb25maWcvQ29uZmlndXJhdGlvbi5tanM/Y2VlZiIsIndlYnBhY2s6Ly9pdGctbmV4dGdlbi1mcm9udGVuZC8uL25vZGVfbW9kdWxlcy9AYXp1cmUvbXNhbC1icm93c2VyL2Rpc3QvcGFja2FnZU1ldGFkYXRhLm1qcz80M2NhIiwid2VicGFjazovL2l0Zy1uZXh0Z2VuLWZyb250ZW5kLy4vbm9kZV9tb2R1bGVzL0BhenVyZS9tc2FsLWJyb3dzZXIvZGlzdC9vcGVyYXRpbmdjb250ZXh0L0Jhc2VPcGVyYXRpbmdDb250ZXh0Lm1qcz81MDE4Iiwid2VicGFjazovL2l0Zy1uZXh0Z2VuLWZyb250ZW5kLy4vbm9kZV9tb2R1bGVzL0BhenVyZS9tc2FsLWJyb3dzZXIvZGlzdC9uYWEvQnJpZGdlU3RhdHVzQ29kZS5tanM/NDhkMSIsIndlYnBhY2s6Ly9pdGctbmV4dGdlbi1mcm9udGVuZC8uL25vZGVfbW9kdWxlcy9AYXp1cmUvbXNhbC1icm93c2VyL2Rpc3QvbmFhL0JyaWRnZVByb3h5Lm1qcz9hN2M2Iiwid2VicGFjazovL2l0Zy1uZXh0Z2VuLWZyb250ZW5kLy4vbm9kZV9tb2R1bGVzL0BhenVyZS9tc2FsLWJyb3dzZXIvZGlzdC9vcGVyYXRpbmdjb250ZXh0L05lc3RlZEFwcE9wZXJhdGluZ0NvbnRleHQubWpzPzgxNmMiLCJ3ZWJwYWNrOi8vaXRnLW5leHRnZW4tZnJvbnRlbmQvLi9ub2RlX21vZHVsZXMvQGF6dXJlL21zYWwtYnJvd3Nlci9kaXN0L29wZXJhdGluZ2NvbnRleHQvU3RhbmRhcmRPcGVyYXRpbmdDb250ZXh0Lm1qcz8zOWQ2Iiwid2VicGFjazovL2l0Zy1uZXh0Z2VuLWZyb250ZW5kLy4vbm9kZV9tb2R1bGVzL0BhenVyZS9tc2FsLWNvbW1vbi9kaXN0L2Vycm9yL0pvc2VIZWFkZXJFcnJvckNvZGVzLm1qcz82OWUwIiwid2VicGFjazovL2l0Zy1uZXh0Z2VuLWZyb250ZW5kLy4vbm9kZV9tb2R1bGVzL0BhenVyZS9tc2FsLWNvbW1vbi9kaXN0L2Vycm9yL0pvc2VIZWFkZXJFcnJvci5tanM/MWFiZSIsIndlYnBhY2s6Ly9pdGctbmV4dGdlbi1mcm9udGVuZC8uL25vZGVfbW9kdWxlcy9AYXp1cmUvbXNhbC1jb21tb24vZGlzdC9jcnlwdG8vSm9zZUhlYWRlci5tanM/MDYwNiIsIndlYnBhY2s6Ly9pdGctbmV4dGdlbi1mcm9udGVuZC8uL25vZGVfbW9kdWxlcy9AYXp1cmUvbXNhbC1icm93c2VyL2Rpc3QvZW5jb2RlL0Jhc2U2NERlY29kZS5tanM/MWNlNCIsIndlYnBhY2s6Ly9pdGctbmV4dGdlbi1mcm9udGVuZC8uL25vZGVfbW9kdWxlcy9AYXp1cmUvbXNhbC1icm93c2VyL2Rpc3QvY2FjaGUvRGF0YWJhc2VTdG9yYWdlLm1qcz8wYTY5Iiwid2VicGFjazovL2l0Zy1uZXh0Z2VuLWZyb250ZW5kLy4vbm9kZV9tb2R1bGVzL0BhenVyZS9tc2FsLWJyb3dzZXIvZGlzdC9jYWNoZS9NZW1vcnlTdG9yYWdlLm1qcz8yMjM3Iiwid2VicGFjazovL2l0Zy1uZXh0Z2VuLWZyb250ZW5kLy4vbm9kZV9tb2R1bGVzL0BhenVyZS9tc2FsLWJyb3dzZXIvZGlzdC9jYWNoZS9Bc3luY01lbW9yeVN0b3JhZ2UubWpzPzk4MWIiLCJ3ZWJwYWNrOi8vaXRnLW5leHRnZW4tZnJvbnRlbmQvLi9ub2RlX21vZHVsZXMvQGF6dXJlL21zYWwtYnJvd3Nlci9kaXN0L2NyeXB0by9DcnlwdG9PcHMubWpzPzY3YzciLCJ3ZWJwYWNrOi8vaXRnLW5leHRnZW4tZnJvbnRlbmQvLi9ub2RlX21vZHVsZXMvQGF6dXJlL21zYWwtY29tbW9uL2Rpc3QvYXV0aG9yaXR5L09wZW5JZENvbmZpZ1Jlc3BvbnNlLm1qcz9jZTg4Iiwid2VicGFjazovL2l0Zy1uZXh0Z2VuLWZyb250ZW5kLy4vbm9kZV9tb2R1bGVzL0BhenVyZS9tc2FsLWNvbW1vbi9kaXN0L2F1dGhvcml0eS9DbG91ZEluc3RhbmNlRGlzY292ZXJ5UmVzcG9uc2UubWpzPzNjN2EiLCJ3ZWJwYWNrOi8vaXRnLW5leHRnZW4tZnJvbnRlbmQvLi9ub2RlX21vZHVsZXMvQGF6dXJlL21zYWwtY29tbW9uL2Rpc3QvYXV0aG9yaXR5L0Nsb3VkSW5zdGFuY2VEaXNjb3ZlcnlFcnJvclJlc3BvbnNlLm1qcz9iYmUzIiwid2VicGFjazovL2l0Zy1uZXh0Z2VuLWZyb250ZW5kLy4vbm9kZV9tb2R1bGVzL0BhenVyZS9tc2FsLWNvbW1vbi9kaXN0L2F1dGhvcml0eS9SZWdpb25EaXNjb3ZlcnkubWpzP2M4YTIiLCJ3ZWJwYWNrOi8vaXRnLW5leHRnZW4tZnJvbnRlbmQvLi9ub2RlX21vZHVsZXMvQGF6dXJlL21zYWwtY29tbW9uL2Rpc3QvYXV0aG9yaXR5L0F1dGhvcml0eS5tanM/NTI1MiIsIndlYnBhY2s6Ly9pdGctbmV4dGdlbi1mcm9udGVuZC8uL25vZGVfbW9kdWxlcy9AYXp1cmUvbXNhbC1jb21tb24vZGlzdC9lcnJvci9JbnRlcmFjdGlvblJlcXVpcmVkQXV0aEVycm9yQ29kZXMubWpzPzA4ODYiLCJ3ZWJwYWNrOi8vaXRnLW5leHRnZW4tZnJvbnRlbmQvLi9ub2RlX21vZHVsZXMvQGF6dXJlL21zYWwtY29tbW9uL2Rpc3QvZXJyb3IvSW50ZXJhY3Rpb25SZXF1aXJlZEF1dGhFcnJvci5tanM/MzhlNCIsIndlYnBhY2s6Ly9pdGctbmV4dGdlbi1mcm9udGVuZC8uL25vZGVfbW9kdWxlcy9AYXp1cmUvbXNhbC1jb21tb24vZGlzdC91dGlscy9Qcm90b2NvbFV0aWxzLm1qcz81NDNhIiwid2VicGFjazovL2l0Zy1uZXh0Z2VuLWZyb250ZW5kLy4vbm9kZV9tb2R1bGVzL0BhenVyZS9tc2FsLWNvbW1vbi9kaXN0L2FjY291bnQvQ2NzQ3JlZGVudGlhbC5tanM/MzY5OSIsIndlYnBhY2s6Ly9pdGctbmV4dGdlbi1mcm9udGVuZC8uL25vZGVfbW9kdWxlcy9AYXp1cmUvbXNhbC1icm93c2VyL2Rpc3QvY2FjaGUvTG9jYWxTdG9yYWdlLm1qcz9hZDcyIiwid2VicGFjazovL2l0Zy1uZXh0Z2VuLWZyb250ZW5kLy4vbm9kZV9tb2R1bGVzL0BhenVyZS9tc2FsLWJyb3dzZXIvZGlzdC9jYWNoZS9TZXNzaW9uU3RvcmFnZS5tanM/NzZmZiIsIndlYnBhY2s6Ly9pdGctbmV4dGdlbi1mcm9udGVuZC8uL25vZGVfbW9kdWxlcy9AYXp1cmUvbXNhbC1icm93c2VyL2Rpc3QvdXRpbHMvQnJvd3NlclByb3RvY29sVXRpbHMubWpzP2QxOGYiLCJ3ZWJwYWNrOi8vaXRnLW5leHRnZW4tZnJvbnRlbmQvLi9ub2RlX21vZHVsZXMvQGF6dXJlL21zYWwtYnJvd3Nlci9kaXN0L2NhY2hlL0Nvb2tpZVN0b3JhZ2UubWpzPzFmNzYiLCJ3ZWJwYWNrOi8vaXRnLW5leHRnZW4tZnJvbnRlbmQvLi9ub2RlX21vZHVsZXMvQGF6dXJlL21zYWwtYnJvd3Nlci9kaXN0L2NhY2hlL0Jyb3dzZXJDYWNoZU1hbmFnZXIubWpzPzc0NjAiLCJ3ZWJwYWNrOi8vaXRnLW5leHRnZW4tZnJvbnRlbmQvLi9ub2RlX21vZHVsZXMvQGF6dXJlL21zYWwtYnJvd3Nlci9kaXN0L2NhY2hlL0FjY291bnRNYW5hZ2VyLm1qcz8zMjBkIiwid2VicGFjazovL2l0Zy1uZXh0Z2VuLWZyb250ZW5kLy4vbm9kZV9tb2R1bGVzL0BhenVyZS9tc2FsLWJyb3dzZXIvZGlzdC9ldmVudC9FdmVudFR5cGUubWpzPzY3MDMiLCJ3ZWJwYWNrOi8vaXRnLW5leHRnZW4tZnJvbnRlbmQvLi9ub2RlX21vZHVsZXMvQGF6dXJlL21zYWwtYnJvd3Nlci9kaXN0L2V2ZW50L0V2ZW50SGFuZGxlci5tanM/NmQ2YiIsIndlYnBhY2s6Ly9pdGctbmV4dGdlbi1mcm9udGVuZC8uL25vZGVfbW9kdWxlcy9AYXp1cmUvbXNhbC1jb21tb24vZGlzdC9lcnJvci9TZXJ2ZXJFcnJvci5tanM/MWJmNyIsIndlYnBhY2s6Ly9pdGctbmV4dGdlbi1mcm9udGVuZC8uL25vZGVfbW9kdWxlcy9AYXp1cmUvbXNhbC1jb21tb24vZGlzdC9uZXR3b3JrL1Rocm90dGxpbmdVdGlscy5tanM/MWNkZCIsIndlYnBhY2s6Ly9pdGctbmV4dGdlbi1mcm9udGVuZC8uL25vZGVfbW9kdWxlcy9AYXp1cmUvbXNhbC1jb21tb24vZGlzdC9jb25zdGFudHMvQUFEU2VydmVyUGFyYW1LZXlzLm1qcz9kOTlmIiwid2VicGFjazovL2l0Zy1uZXh0Z2VuLWZyb250ZW5kLy4vbm9kZV9tb2R1bGVzL0BhenVyZS9tc2FsLWNvbW1vbi9kaXN0L3JlcXVlc3QvUmVxdWVzdFZhbGlkYXRvci5tanM/MzliOSIsIndlYnBhY2s6Ly9pdGctbmV4dGdlbi1mcm9udGVuZC8uL25vZGVfbW9kdWxlcy9AYXp1cmUvbXNhbC1jb21tb24vZGlzdC9yZXF1ZXN0L1JlcXVlc3RQYXJhbWV0ZXJCdWlsZGVyLm1qcz8yYWExIiwid2VicGFjazovL2l0Zy1uZXh0Z2VuLWZyb250ZW5kLy4vbm9kZV9tb2R1bGVzL0BhenVyZS9tc2FsLWNvbW1vbi9kaXN0L2F1dGhvcml0eS9BdXRob3JpdHlGYWN0b3J5Lm1qcz84YjhkIiwid2VicGFjazovL2l0Zy1uZXh0Z2VuLWZyb250ZW5kLy4vbm9kZV9tb2R1bGVzL0BhenVyZS9tc2FsLWNvbW1vbi9kaXN0L2NsaWVudC9CYXNlQ2xpZW50Lm1qcz8yMTFkIiwid2VicGFjazovL2l0Zy1uZXh0Z2VuLWZyb250ZW5kLy4vbm9kZV9tb2R1bGVzL0BhenVyZS9tc2FsLWNvbW1vbi9kaXN0L2NyeXB0by9Qb3BUb2tlbkdlbmVyYXRvci5tanM/MzljMCIsIndlYnBhY2s6Ly9pdGctbmV4dGdlbi1mcm9udGVuZC8uL25vZGVfbW9kdWxlcy9AYXp1cmUvbXNhbC1jb21tb24vZGlzdC9jYWNoZS9wZXJzaXN0ZW5jZS9Ub2tlbkNhY2hlQ29udGV4dC5tanM/NjRiOCIsIndlYnBhY2s6Ly9pdGctbmV4dGdlbi1mcm9udGVuZC8uL25vZGVfbW9kdWxlcy9AYXp1cmUvbXNhbC1jb21tb24vZGlzdC9yZXNwb25zZS9SZXNwb25zZUhhbmRsZXIubWpzPzZjYmMiLCJ3ZWJwYWNrOi8vaXRnLW5leHRnZW4tZnJvbnRlbmQvLi9ub2RlX21vZHVsZXMvQGF6dXJlL21zYWwtY29tbW9uL2Rpc3QvdXRpbHMvQ2xpZW50QXNzZXJ0aW9uVXRpbHMubWpzP2ZiMzUiLCJ3ZWJwYWNrOi8vaXRnLW5leHRnZW4tZnJvbnRlbmQvLi9ub2RlX21vZHVsZXMvQGF6dXJlL21zYWwtY29tbW9uL2Rpc3QvY2xpZW50L0F1dGhvcml6YXRpb25Db2RlQ2xpZW50Lm1qcz84YzYxIiwid2VicGFjazovL2l0Zy1uZXh0Z2VuLWZyb250ZW5kLy4vbm9kZV9tb2R1bGVzL0BhenVyZS9tc2FsLWNvbW1vbi9kaXN0L3RlbGVtZXRyeS9zZXJ2ZXIvU2VydmVyVGVsZW1ldHJ5TWFuYWdlci5tanM/NWNhNSIsIndlYnBhY2s6Ly9pdGctbmV4dGdlbi1mcm9udGVuZC8uL25vZGVfbW9kdWxlcy9AYXp1cmUvbXNhbC1icm93c2VyL2Rpc3QvaW50ZXJhY3Rpb25fY2xpZW50L0Jhc2VJbnRlcmFjdGlvbkNsaWVudC5tanM/OWEzOCIsIndlYnBhY2s6Ly9pdGctbmV4dGdlbi1mcm9udGVuZC8uL25vZGVfbW9kdWxlcy9AYXp1cmUvbXNhbC1icm93c2VyL2Rpc3QvY3J5cHRvL1BrY2VHZW5lcmF0b3IubWpzP2YwNjkiLCJ3ZWJwYWNrOi8vaXRnLW5leHRnZW4tZnJvbnRlbmQvLi9ub2RlX21vZHVsZXMvQGF6dXJlL21zYWwtYnJvd3Nlci9kaXN0L3JlcXVlc3QvUmVxdWVzdEhlbHBlcnMubWpzP2YxZDgiLCJ3ZWJwYWNrOi8vaXRnLW5leHRnZW4tZnJvbnRlbmQvLi9ub2RlX21vZHVsZXMvQGF6dXJlL21zYWwtYnJvd3Nlci9kaXN0L2ludGVyYWN0aW9uX2NsaWVudC9TdGFuZGFyZEludGVyYWN0aW9uQ2xpZW50Lm1qcz80NGQ5Iiwid2VicGFjazovL2l0Zy1uZXh0Z2VuLWZyb250ZW5kLy4vbm9kZV9tb2R1bGVzL0BhenVyZS9tc2FsLWJyb3dzZXIvZGlzdC9lcnJvci9OYXRpdmVBdXRoRXJyb3JDb2Rlcy5tanM/N2Q3NiIsIndlYnBhY2s6Ly9pdGctbmV4dGdlbi1mcm9udGVuZC8uL25vZGVfbW9kdWxlcy9AYXp1cmUvbXNhbC1icm93c2VyL2Rpc3QvYnJva2VyL25hdGl2ZUJyb2tlci9OYXRpdmVTdGF0dXNDb2Rlcy5tanM/MGMwOCIsIndlYnBhY2s6Ly9pdGctbmV4dGdlbi1mcm9udGVuZC8uL25vZGVfbW9kdWxlcy9AYXp1cmUvbXNhbC1icm93c2VyL2Rpc3QvZXJyb3IvTmF0aXZlQXV0aEVycm9yLm1qcz83MGIzIiwid2VicGFjazovL2l0Zy1uZXh0Z2VuLWZyb250ZW5kLy4vbm9kZV9tb2R1bGVzL0BhenVyZS9tc2FsLWNvbW1vbi9kaXN0L2NsaWVudC9SZWZyZXNoVG9rZW5DbGllbnQubWpzP2NkNDEiLCJ3ZWJwYWNrOi8vaXRnLW5leHRnZW4tZnJvbnRlbmQvLi9ub2RlX21vZHVsZXMvQGF6dXJlL21zYWwtY29tbW9uL2Rpc3QvY2xpZW50L1NpbGVudEZsb3dDbGllbnQubWpzPzI5NTQiLCJ3ZWJwYWNrOi8vaXRnLW5leHRnZW4tZnJvbnRlbmQvLi9ub2RlX21vZHVsZXMvQGF6dXJlL21zYWwtYnJvd3Nlci9kaXN0L2ludGVyYWN0aW9uX2NsaWVudC9TaWxlbnRDYWNoZUNsaWVudC5tanM/ZjY4NiIsIndlYnBhY2s6Ly9pdGctbmV4dGdlbi1mcm9udGVuZC8uL25vZGVfbW9kdWxlcy9AYXp1cmUvbXNhbC1icm93c2VyL2Rpc3QvaW50ZXJhY3Rpb25fY2xpZW50L05hdGl2ZUludGVyYWN0aW9uQ2xpZW50Lm1qcz9lNmYwIiwid2VicGFjazovL2l0Zy1uZXh0Z2VuLWZyb250ZW5kLy4vbm9kZV9tb2R1bGVzL0BhenVyZS9tc2FsLWJyb3dzZXIvZGlzdC9icm9rZXIvbmF0aXZlQnJva2VyL05hdGl2ZU1lc3NhZ2VIYW5kbGVyLm1qcz85YTVhIiwid2VicGFjazovL2l0Zy1uZXh0Z2VuLWZyb250ZW5kLy4vbm9kZV9tb2R1bGVzL0BhenVyZS9tc2FsLWJyb3dzZXIvZGlzdC9pbnRlcmFjdGlvbl9oYW5kbGVyL0ludGVyYWN0aW9uSGFuZGxlci5tanM/Y2ExMSIsIndlYnBhY2s6Ly9pdGctbmV4dGdlbi1mcm9udGVuZC8uL25vZGVfbW9kdWxlcy9AYXp1cmUvbXNhbC1icm93c2VyL2Rpc3QvcmVzcG9uc2UvUmVzcG9uc2VIYW5kbGVyLm1qcz84MTYzIiwid2VicGFjazovL2l0Zy1uZXh0Z2VuLWZyb250ZW5kLy4vbm9kZV9tb2R1bGVzL0BhenVyZS9tc2FsLWJyb3dzZXIvZGlzdC9pbnRlcmFjdGlvbl9jbGllbnQvUG9wdXBDbGllbnQubWpzPzAyNWEiLCJ3ZWJwYWNrOi8vaXRnLW5leHRnZW4tZnJvbnRlbmQvLi9ub2RlX21vZHVsZXMvQGF6dXJlL21zYWwtYnJvd3Nlci9kaXN0L2ludGVyYWN0aW9uX2hhbmRsZXIvUmVkaXJlY3RIYW5kbGVyLm1qcz9hOWNhIiwid2VicGFjazovL2l0Zy1uZXh0Z2VuLWZyb250ZW5kLy4vbm9kZV9tb2R1bGVzL0BhenVyZS9tc2FsLWJyb3dzZXIvZGlzdC9pbnRlcmFjdGlvbl9jbGllbnQvUmVkaXJlY3RDbGllbnQubWpzPzI5ZTAiLCJ3ZWJwYWNrOi8vaXRnLW5leHRnZW4tZnJvbnRlbmQvLi9ub2RlX21vZHVsZXMvQGF6dXJlL21zYWwtYnJvd3Nlci9kaXN0L2ludGVyYWN0aW9uX2hhbmRsZXIvU2lsZW50SGFuZGxlci5tanM/NWM4OCIsIndlYnBhY2s6Ly9pdGctbmV4dGdlbi1mcm9udGVuZC8uL25vZGVfbW9kdWxlcy9AYXp1cmUvbXNhbC1icm93c2VyL2Rpc3QvaW50ZXJhY3Rpb25fY2xpZW50L1NpbGVudElmcmFtZUNsaWVudC5tanM/MzRjZiIsIndlYnBhY2s6Ly9pdGctbmV4dGdlbi1mcm9udGVuZC8uL25vZGVfbW9kdWxlcy9AYXp1cmUvbXNhbC1icm93c2VyL2Rpc3QvaW50ZXJhY3Rpb25fY2xpZW50L1NpbGVudFJlZnJlc2hDbGllbnQubWpzPzg1MzIiLCJ3ZWJwYWNrOi8vaXRnLW5leHRnZW4tZnJvbnRlbmQvLi9ub2RlX21vZHVsZXMvQGF6dXJlL21zYWwtYnJvd3Nlci9kaXN0L2NhY2hlL1Rva2VuQ2FjaGUubWpzPzM2Y2UiLCJ3ZWJwYWNrOi8vaXRnLW5leHRnZW4tZnJvbnRlbmQvLi9ub2RlX21vZHVsZXMvQGF6dXJlL21zYWwtYnJvd3Nlci9kaXN0L2ludGVyYWN0aW9uX2NsaWVudC9IeWJyaWRTcGFBdXRob3JpemF0aW9uQ29kZUNsaWVudC5tanM/NzMzYSIsIndlYnBhY2s6Ly9pdGctbmV4dGdlbi1mcm9udGVuZC8uL25vZGVfbW9kdWxlcy9AYXp1cmUvbXNhbC1icm93c2VyL2Rpc3QvaW50ZXJhY3Rpb25fY2xpZW50L1NpbGVudEF1dGhDb2RlQ2xpZW50Lm1qcz8wYWI0Iiwid2VicGFjazovL2l0Zy1uZXh0Z2VuLWZyb250ZW5kLy4vbm9kZV9tb2R1bGVzL0BhenVyZS9tc2FsLWJyb3dzZXIvZGlzdC9jb250cm9sbGVycy9TdGFuZGFyZENvbnRyb2xsZXIubWpzP2Y5MDgiLCJ3ZWJwYWNrOi8vaXRnLW5leHRnZW4tZnJvbnRlbmQvLi9ub2RlX21vZHVsZXMvQGF6dXJlL21zYWwtYnJvd3Nlci9kaXN0L25hYS9CcmlkZ2VFcnJvci5tanM/YmZjNiIsIndlYnBhY2s6Ly9pdGctbmV4dGdlbi1mcm9udGVuZC8uL25vZGVfbW9kdWxlcy9AYXp1cmUvbXNhbC1icm93c2VyL2Rpc3QvbmFhL21hcHBpbmcvTmVzdGVkQXBwQXV0aEFkYXB0ZXIubWpzP2U4ZjkiLCJ3ZWJwYWNrOi8vaXRnLW5leHRnZW4tZnJvbnRlbmQvLi9ub2RlX21vZHVsZXMvQGF6dXJlL21zYWwtYnJvd3Nlci9kaXN0L2Vycm9yL05lc3RlZEFwcEF1dGhFcnJvci5tanM/MzA3MSIsIndlYnBhY2s6Ly9pdGctbmV4dGdlbi1mcm9udGVuZC8uL25vZGVfbW9kdWxlcy9AYXp1cmUvbXNhbC1icm93c2VyL2Rpc3QvY29udHJvbGxlcnMvTmVzdGVkQXBwQXV0aENvbnRyb2xsZXIubWpzPzMzMTYiLCJ3ZWJwYWNrOi8vaXRnLW5leHRnZW4tZnJvbnRlbmQvLi9ub2RlX21vZHVsZXMvQGF6dXJlL21zYWwtYnJvd3Nlci9kaXN0L2NvbnRyb2xsZXJzL0NvbnRyb2xsZXJGYWN0b3J5Lm1qcz81YmIzIiwid2VicGFjazovL2l0Zy1uZXh0Z2VuLWZyb250ZW5kLy4vbm9kZV9tb2R1bGVzL0BhenVyZS9tc2FsLWJyb3dzZXIvZGlzdC9hcHAvUHVibGljQ2xpZW50QXBwbGljYXRpb24ubWpzPzU2NjAiLCJ3ZWJwYWNrOi8vaXRnLW5leHRnZW4tZnJvbnRlbmQvLi9ub2RlX21vZHVsZXMvQGF6dXJlL21zYWwtYnJvd3Nlci9kaXN0L2NvbnRyb2xsZXJzL1Vua25vd25PcGVyYXRpbmdDb250ZXh0Q29udHJvbGxlci5tanM/NDlkZCIsIndlYnBhY2s6Ly9pdGctbmV4dGdlbi1mcm9udGVuZC8uL25vZGVfbW9kdWxlcy9AYXp1cmUvbXNhbC1icm93c2VyL2Rpc3Qvb3BlcmF0aW5nY29udGV4dC9Vbmtub3duT3BlcmF0aW5nQ29udGV4dC5tanM/YjRhMiIsIndlYnBhY2s6Ly9pdGctbmV4dGdlbi1mcm9udGVuZC8uL25vZGVfbW9kdWxlcy9AYXp1cmUvbXNhbC1icm93c2VyL2Rpc3QvYXBwL1B1YmxpY0NsaWVudE5leHQubWpzPzlkZjEiLCJ3ZWJwYWNrOi8vaXRnLW5leHRnZW4tZnJvbnRlbmQvLi9ub2RlX21vZHVsZXMvQGF6dXJlL21zYWwtYnJvd3Nlci9kaXN0L2FwcC9JUHVibGljQ2xpZW50QXBwbGljYXRpb24ubWpzPzI2OTMiLCJ3ZWJwYWNrOi8vaXRnLW5leHRnZW4tZnJvbnRlbmQvLi9ub2RlX21vZHVsZXMvQGF6dXJlL21zYWwtYnJvd3Nlci9kaXN0L2NhY2hlL0Jyb3dzZXJTdG9yYWdlLm1qcz85M2ZjIiwid2VicGFjazovL2l0Zy1uZXh0Z2VuLWZyb250ZW5kLy4vbm9kZV9tb2R1bGVzL0BhenVyZS9tc2FsLWJyb3dzZXIvZGlzdC9ldmVudC9FdmVudE1lc3NhZ2UubWpzPzk1ZTQiLCJ3ZWJwYWNrOi8vaXRnLW5leHRnZW4tZnJvbnRlbmQvLi9ub2RlX21vZHVsZXMvQGF6dXJlL21zYWwtYnJvd3Nlci9kaXN0L2NyeXB0by9TaWduZWRIdHRwUmVxdWVzdC5tanM/NWJhNCIsIndlYnBhY2s6Ly9pdGctbmV4dGdlbi1mcm9udGVuZC8uL25vZGVfbW9kdWxlcy9AYXp1cmUvbXNhbC1jb21tb24vZGlzdC90ZWxlbWV0cnkvcGVyZm9ybWFuY2UvUGVyZm9ybWFuY2VDbGllbnQubWpzP2NiZjYiLCJ3ZWJwYWNrOi8vaXRnLW5leHRnZW4tZnJvbnRlbmQvLi9ub2RlX21vZHVsZXMvQGF6dXJlL21zYWwtYnJvd3Nlci9kaXN0L3RlbGVtZXRyeS9Ccm93c2VyUGVyZm9ybWFuY2VDbGllbnQubWpzP2Q0NTUiLCJ3ZWJwYWNrOi8vaXRnLW5leHRnZW4tZnJvbnRlbmQvLi9ub2RlX21vZHVsZXMvQGF6dXJlL21zYWwtY29tbW9uL2Rpc3QvcmVxdWVzdC9BdXRoZW50aWNhdGlvbkhlYWRlclBhcnNlci5tanM/ODNjOSIsIndlYnBhY2s6Ly9pdGctbmV4dGdlbi1mcm9udGVuZC8uL25vZGVfbW9kdWxlcy9AYXp1cmUvbXNhbC1icm93c2VyL2Rpc3QvaW5kZXgubWpzPzdjNGEiXSwic291cmNlc0NvbnRlbnQiOlsiLyohIEBhenVyZS9tc2FsLWNvbW1vbiB2MTQuMTYuMCAyMDI0LTExLTA1ICovXG4ndXNlIHN0cmljdCc7XG4vKlxyXG4gKiBDb3B5cmlnaHQgKGMpIE1pY3Jvc29mdCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cclxuICogTGljZW5zZWQgdW5kZXIgdGhlIE1JVCBMaWNlbnNlLlxyXG4gKi9cclxuY29uc3QgQ29uc3RhbnRzID0ge1xyXG4gICAgTElCUkFSWV9OQU1FOiBcIk1TQUwuSlNcIixcclxuICAgIFNLVTogXCJtc2FsLmpzLmNvbW1vblwiLFxyXG4gICAgLy8gUHJlZml4IGZvciBhbGwgbGlicmFyeSBjYWNoZSBlbnRyaWVzXHJcbiAgICBDQUNIRV9QUkVGSVg6IFwibXNhbFwiLFxyXG4gICAgLy8gZGVmYXVsdCBhdXRob3JpdHlcclxuICAgIERFRkFVTFRfQVVUSE9SSVRZOiBcImh0dHBzOi8vbG9naW4ubWljcm9zb2Z0b25saW5lLmNvbS9jb21tb24vXCIsXHJcbiAgICBERUZBVUxUX0FVVEhPUklUWV9IT1NUOiBcImxvZ2luLm1pY3Jvc29mdG9ubGluZS5jb21cIixcclxuICAgIERFRkFVTFRfQ09NTU9OX1RFTkFOVDogXCJjb21tb25cIixcclxuICAgIC8vIEFERlMgU3RyaW5nXHJcbiAgICBBREZTOiBcImFkZnNcIixcclxuICAgIERTVFM6IFwiZHN0c3YyXCIsXHJcbiAgICAvLyBEZWZhdWx0IEFBRCBJbnN0YW5jZSBEaXNjb3ZlcnkgRW5kcG9pbnRcclxuICAgIEFBRF9JTlNUQU5DRV9ESVNDT1ZFUllfRU5EUFQ6IFwiaHR0cHM6Ly9sb2dpbi5taWNyb3NvZnRvbmxpbmUuY29tL2NvbW1vbi9kaXNjb3ZlcnkvaW5zdGFuY2U/YXBpLXZlcnNpb249MS4xJmF1dGhvcml6YXRpb25fZW5kcG9pbnQ9XCIsXHJcbiAgICAvLyBDSUFNIFVSTFxyXG4gICAgQ0lBTV9BVVRIX1VSTDogXCIuY2lhbWxvZ2luLmNvbVwiLFxyXG4gICAgQUFEX1RFTkFOVF9ET01BSU5fU1VGRklYOiBcIi5vbm1pY3Jvc29mdC5jb21cIixcclxuICAgIC8vIFJlc291cmNlIGRlbGltaXRlciAtIHVzZWQgZm9yIGNlcnRhaW4gY2FjaGUgZW50cmllc1xyXG4gICAgUkVTT1VSQ0VfREVMSU06IFwifFwiLFxyXG4gICAgLy8gUGxhY2Vob2xkZXIgZm9yIG5vbi1leGlzdGVudCBhY2NvdW50IGlkcy9vYmplY3RzXHJcbiAgICBOT19BQ0NPVU5UOiBcIk5PX0FDQ09VTlRcIixcclxuICAgIC8vIENsYWltc1xyXG4gICAgQ0xBSU1TOiBcImNsYWltc1wiLFxyXG4gICAgLy8gQ29uc3VtZXIgVVRJRFxyXG4gICAgQ09OU1VNRVJfVVRJRDogXCI5MTg4MDQwZC02YzY3LTRjNWItYjExMi0zNmEzMDRiNjZkYWRcIixcclxuICAgIC8vIERlZmF1bHQgc2NvcGVzXHJcbiAgICBPUEVOSURfU0NPUEU6IFwib3BlbmlkXCIsXHJcbiAgICBQUk9GSUxFX1NDT1BFOiBcInByb2ZpbGVcIixcclxuICAgIE9GRkxJTkVfQUNDRVNTX1NDT1BFOiBcIm9mZmxpbmVfYWNjZXNzXCIsXHJcbiAgICBFTUFJTF9TQ09QRTogXCJlbWFpbFwiLFxyXG4gICAgLy8gRGVmYXVsdCByZXNwb25zZSB0eXBlIGZvciBhdXRob3JpemF0aW9uIGNvZGUgZmxvd1xyXG4gICAgQ09ERV9SRVNQT05TRV9UWVBFOiBcImNvZGVcIixcclxuICAgIENPREVfR1JBTlRfVFlQRTogXCJhdXRob3JpemF0aW9uX2NvZGVcIixcclxuICAgIFJUX0dSQU5UX1RZUEU6IFwicmVmcmVzaF90b2tlblwiLFxyXG4gICAgRlJBR01FTlRfUkVTUE9OU0VfTU9ERTogXCJmcmFnbWVudFwiLFxyXG4gICAgUzI1Nl9DT0RFX0NIQUxMRU5HRV9NRVRIT0Q6IFwiUzI1NlwiLFxyXG4gICAgVVJMX0ZPUk1fQ09OVEVOVF9UWVBFOiBcImFwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZDtjaGFyc2V0PXV0Zi04XCIsXHJcbiAgICBBVVRIT1JJWkFUSU9OX1BFTkRJTkc6IFwiYXV0aG9yaXphdGlvbl9wZW5kaW5nXCIsXHJcbiAgICBOT1RfREVGSU5FRDogXCJub3RfZGVmaW5lZFwiLFxyXG4gICAgRU1QVFlfU1RSSU5HOiBcIlwiLFxyXG4gICAgTk9UX0FQUExJQ0FCTEU6IFwiTi9BXCIsXHJcbiAgICBOT1RfQVZBSUxBQkxFOiBcIk5vdCBBdmFpbGFibGVcIixcclxuICAgIEZPUldBUkRfU0xBU0g6IFwiL1wiLFxyXG4gICAgSU1EU19FTkRQT0lOVDogXCJodHRwOi8vMTY5LjI1NC4xNjkuMjU0L21ldGFkYXRhL2luc3RhbmNlL2NvbXB1dGUvbG9jYXRpb25cIixcclxuICAgIElNRFNfVkVSU0lPTjogXCIyMDIwLTA2LTAxXCIsXHJcbiAgICBJTURTX1RJTUVPVVQ6IDIwMDAsXHJcbiAgICBBWlVSRV9SRUdJT05fQVVUT19ESVNDT1ZFUl9GTEFHOiBcIlRyeUF1dG9EZXRlY3RcIixcclxuICAgIFJFR0lPTkFMX0FVVEhfUFVCTElDX0NMT1VEX1NVRkZJWDogXCJsb2dpbi5taWNyb3NvZnQuY29tXCIsXHJcbiAgICBLTk9XTl9QVUJMSUNfQ0xPVURTOiBbXHJcbiAgICAgICAgXCJsb2dpbi5taWNyb3NvZnRvbmxpbmUuY29tXCIsXHJcbiAgICAgICAgXCJsb2dpbi53aW5kb3dzLm5ldFwiLFxyXG4gICAgICAgIFwibG9naW4ubWljcm9zb2Z0LmNvbVwiLFxyXG4gICAgICAgIFwic3RzLndpbmRvd3MubmV0XCIsXHJcbiAgICBdLFxyXG4gICAgVE9LRU5fUkVTUE9OU0VfVFlQRTogXCJ0b2tlblwiLFxyXG4gICAgSURfVE9LRU5fUkVTUE9OU0VfVFlQRTogXCJpZF90b2tlblwiLFxyXG4gICAgU0hSX05PTkNFX1ZBTElESVRZOiAyNDAsXHJcbiAgICBJTlZBTElEX0lOU1RBTkNFOiBcImludmFsaWRfaW5zdGFuY2VcIixcclxufTtcclxuY29uc3QgSHR0cFN0YXR1cyA9IHtcclxuICAgIFNVQ0NFU1M6IDIwMCxcclxuICAgIFNVQ0NFU1NfUkFOR0VfU1RBUlQ6IDIwMCxcclxuICAgIFNVQ0NFU1NfUkFOR0VfRU5EOiAyOTksXHJcbiAgICBSRURJUkVDVDogMzAyLFxyXG4gICAgQ0xJRU5UX0VSUk9SOiA0MDAsXHJcbiAgICBDTElFTlRfRVJST1JfUkFOR0VfU1RBUlQ6IDQwMCxcclxuICAgIEJBRF9SRVFVRVNUOiA0MDAsXHJcbiAgICBVTkFVVEhPUklaRUQ6IDQwMSxcclxuICAgIE5PVF9GT1VORDogNDA0LFxyXG4gICAgUkVRVUVTVF9USU1FT1VUOiA0MDgsXHJcbiAgICBUT09fTUFOWV9SRVFVRVNUUzogNDI5LFxyXG4gICAgQ0xJRU5UX0VSUk9SX1JBTkdFX0VORDogNDk5LFxyXG4gICAgU0VSVkVSX0VSUk9SOiA1MDAsXHJcbiAgICBTRVJWRVJfRVJST1JfUkFOR0VfU1RBUlQ6IDUwMCxcclxuICAgIFNFUlZJQ0VfVU5BVkFJTEFCTEU6IDUwMyxcclxuICAgIEdBVEVXQVlfVElNRU9VVDogNTA0LFxyXG4gICAgU0VSVkVSX0VSUk9SX1JBTkdFX0VORDogNTk5LFxyXG4gICAgTVVMVElfU0lERURfRVJST1I6IDYwMCxcclxufTtcclxuY29uc3QgT0lEQ19ERUZBVUxUX1NDT1BFUyA9IFtcclxuICAgIENvbnN0YW50cy5PUEVOSURfU0NPUEUsXHJcbiAgICBDb25zdGFudHMuUFJPRklMRV9TQ09QRSxcclxuICAgIENvbnN0YW50cy5PRkZMSU5FX0FDQ0VTU19TQ09QRSxcclxuXTtcclxuY29uc3QgT0lEQ19TQ09QRVMgPSBbLi4uT0lEQ19ERUZBVUxUX1NDT1BFUywgQ29uc3RhbnRzLkVNQUlMX1NDT1BFXTtcclxuLyoqXHJcbiAqIFJlcXVlc3QgaGVhZGVyIG5hbWVzXHJcbiAqL1xyXG5jb25zdCBIZWFkZXJOYW1lcyA9IHtcclxuICAgIENPTlRFTlRfVFlQRTogXCJDb250ZW50LVR5cGVcIixcclxuICAgIENPTlRFTlRfTEVOR1RIOiBcIkNvbnRlbnQtTGVuZ3RoXCIsXHJcbiAgICBSRVRSWV9BRlRFUjogXCJSZXRyeS1BZnRlclwiLFxyXG4gICAgQ0NTX0hFQURFUjogXCJYLUFuY2hvck1haWxib3hcIixcclxuICAgIFdXV0F1dGhlbnRpY2F0ZTogXCJXV1ctQXV0aGVudGljYXRlXCIsXHJcbiAgICBBdXRoZW50aWNhdGlvbkluZm86IFwiQXV0aGVudGljYXRpb24tSW5mb1wiLFxyXG4gICAgWF9NU19SRVFVRVNUX0lEOiBcIngtbXMtcmVxdWVzdC1pZFwiLFxyXG4gICAgWF9NU19IVFRQX1ZFUlNJT046IFwieC1tcy1odHRwdmVyXCIsXHJcbn07XHJcbi8qKlxyXG4gKiBQZXJzaXN0ZW50IGNhY2hlIGtleXMgTVNBTCB3aGljaCBzdGF5IHdoaWxlIHVzZXIgaXMgbG9nZ2VkIGluLlxyXG4gKi9cclxuY29uc3QgUGVyc2lzdGVudENhY2hlS2V5cyA9IHtcclxuICAgIElEX1RPS0VOOiBcImlkdG9rZW5cIixcclxuICAgIENMSUVOVF9JTkZPOiBcImNsaWVudC5pbmZvXCIsXHJcbiAgICBBREFMX0lEX1RPS0VOOiBcImFkYWwuaWR0b2tlblwiLFxyXG4gICAgRVJST1I6IFwiZXJyb3JcIixcclxuICAgIEVSUk9SX0RFU0M6IFwiZXJyb3IuZGVzY3JpcHRpb25cIixcclxuICAgIEFDVElWRV9BQ0NPVU5UOiBcImFjdGl2ZS1hY2NvdW50XCIsXHJcbiAgICBBQ1RJVkVfQUNDT1VOVF9GSUxURVJTOiBcImFjdGl2ZS1hY2NvdW50LWZpbHRlcnNcIiwgLy8gbmV3IGNhY2hlIGVudHJ5IGZvciBhY3RpdmVfYWNjb3VudCBmb3IgYSBtb3JlIHJvYnVzdCB2ZXJzaW9uIGZvciBicm93c2VyXHJcbn07XHJcbi8qKlxyXG4gKiBTdHJpbmcgY29uc3RhbnRzIHJlbGF0ZWQgdG8gQUFEIEF1dGhvcml0eVxyXG4gKi9cclxuY29uc3QgQUFEQXV0aG9yaXR5Q29uc3RhbnRzID0ge1xyXG4gICAgQ09NTU9OOiBcImNvbW1vblwiLFxyXG4gICAgT1JHQU5JWkFUSU9OUzogXCJvcmdhbml6YXRpb25zXCIsXHJcbiAgICBDT05TVU1FUlM6IFwiY29uc3VtZXJzXCIsXHJcbn07XHJcbi8qKlxyXG4gKiBDbGFpbXMgcmVxdWVzdCBrZXlzXHJcbiAqL1xyXG5jb25zdCBDbGFpbXNSZXF1ZXN0S2V5cyA9IHtcclxuICAgIEFDQ0VTU19UT0tFTjogXCJhY2Nlc3NfdG9rZW5cIixcclxuICAgIFhNU19DQzogXCJ4bXNfY2NcIixcclxufTtcclxuLyoqXHJcbiAqIHdlIGNvbnNpZGVyZWQgbWFraW5nIHRoaXMgXCJlbnVtXCIgaW4gdGhlIHJlcXVlc3QgaW5zdGVhZCBvZiBzdHJpbmcsIGhvd2V2ZXIgaXQgbG9va3MgbGlrZSB0aGUgYWxsb3dlZCBsaXN0IG9mXHJcbiAqIHByb21wdCB2YWx1ZXMga2VwdCBjaGFuZ2luZyBvdmVyIHBhc3QgY291cGxlIG9mIHllYXJzLiBUaGVyZSBhcmUgc29tZSB1bmRvY3VtZW50ZWQgcHJvbXB0IHZhbHVlcyBmb3Igc29tZVxyXG4gKiBpbnRlcm5hbCBwYXJ0bmVycyB0b28sIGhlbmNlIHRoZSBjaG9pY2Ugb2YgZ2VuZXJpYyBcInN0cmluZ1wiIHR5cGUgaW5zdGVhZCBvZiB0aGUgXCJlbnVtXCJcclxuICovXHJcbmNvbnN0IFByb21wdFZhbHVlID0ge1xyXG4gICAgTE9HSU46IFwibG9naW5cIixcclxuICAgIFNFTEVDVF9BQ0NPVU5UOiBcInNlbGVjdF9hY2NvdW50XCIsXHJcbiAgICBDT05TRU5UOiBcImNvbnNlbnRcIixcclxuICAgIE5PTkU6IFwibm9uZVwiLFxyXG4gICAgQ1JFQVRFOiBcImNyZWF0ZVwiLFxyXG4gICAgTk9fU0VTU0lPTjogXCJub19zZXNzaW9uXCIsXHJcbn07XHJcbi8qKlxyXG4gKiBhbGxvd2VkIHZhbHVlcyBmb3IgY29kZVZlcmlmaWVyXHJcbiAqL1xyXG5jb25zdCBDb2RlQ2hhbGxlbmdlTWV0aG9kVmFsdWVzID0ge1xyXG4gICAgUExBSU46IFwicGxhaW5cIixcclxuICAgIFMyNTY6IFwiUzI1NlwiLFxyXG59O1xyXG4vKipcclxuICogYWxsb3dlZCB2YWx1ZXMgZm9yIHNlcnZlciByZXNwb25zZSB0eXBlXHJcbiAqL1xyXG5jb25zdCBTZXJ2ZXJSZXNwb25zZVR5cGUgPSB7XHJcbiAgICBRVUVSWTogXCJxdWVyeVwiLFxyXG4gICAgRlJBR01FTlQ6IFwiZnJhZ21lbnRcIixcclxufTtcclxuLyoqXHJcbiAqIGFsbG93ZWQgdmFsdWVzIGZvciByZXNwb25zZV9tb2RlXHJcbiAqL1xyXG5jb25zdCBSZXNwb25zZU1vZGUgPSB7XHJcbiAgICAuLi5TZXJ2ZXJSZXNwb25zZVR5cGUsXHJcbiAgICBGT1JNX1BPU1Q6IFwiZm9ybV9wb3N0XCIsXHJcbn07XHJcbi8qKlxyXG4gKiBhbGxvd2VkIGdyYW50X3R5cGVcclxuICovXHJcbmNvbnN0IEdyYW50VHlwZSA9IHtcclxuICAgIElNUExJQ0lUX0dSQU5UOiBcImltcGxpY2l0XCIsXHJcbiAgICBBVVRIT1JJWkFUSU9OX0NPREVfR1JBTlQ6IFwiYXV0aG9yaXphdGlvbl9jb2RlXCIsXHJcbiAgICBDTElFTlRfQ1JFREVOVElBTFNfR1JBTlQ6IFwiY2xpZW50X2NyZWRlbnRpYWxzXCIsXHJcbiAgICBSRVNPVVJDRV9PV05FUl9QQVNTV09SRF9HUkFOVDogXCJwYXNzd29yZFwiLFxyXG4gICAgUkVGUkVTSF9UT0tFTl9HUkFOVDogXCJyZWZyZXNoX3Rva2VuXCIsXHJcbiAgICBERVZJQ0VfQ09ERV9HUkFOVDogXCJkZXZpY2VfY29kZVwiLFxyXG4gICAgSldUX0JFQVJFUjogXCJ1cm46aWV0ZjpwYXJhbXM6b2F1dGg6Z3JhbnQtdHlwZTpqd3QtYmVhcmVyXCIsXHJcbn07XHJcbi8qKlxyXG4gKiBBY2NvdW50IHR5cGVzIGluIENhY2hlXHJcbiAqL1xyXG5jb25zdCBDYWNoZUFjY291bnRUeXBlID0ge1xyXG4gICAgTVNTVFNfQUNDT1VOVF9UWVBFOiBcIk1TU1RTXCIsXHJcbiAgICBBREZTX0FDQ09VTlRfVFlQRTogXCJBREZTXCIsXHJcbiAgICBNU0FWMV9BQ0NPVU5UX1RZUEU6IFwiTVNBXCIsXHJcbiAgICBHRU5FUklDX0FDQ09VTlRfVFlQRTogXCJHZW5lcmljXCIsIC8vIE5UTE0sIEtlcmJlcm9zLCBGQkEsIEJhc2ljIGV0Y1xyXG59O1xyXG4vKipcclxuICogU2VwYXJhdG9ycyB1c2VkIGluIGNhY2hlXHJcbiAqL1xyXG5jb25zdCBTZXBhcmF0b3JzID0ge1xyXG4gICAgQ0FDSEVfS0VZX1NFUEFSQVRPUjogXCItXCIsXHJcbiAgICBDTElFTlRfSU5GT19TRVBBUkFUT1I6IFwiLlwiLFxyXG59O1xyXG4vKipcclxuICogQ3JlZGVudGlhbCBUeXBlIHN0b3JlZCBpbiB0aGUgY2FjaGVcclxuICovXHJcbmNvbnN0IENyZWRlbnRpYWxUeXBlID0ge1xyXG4gICAgSURfVE9LRU46IFwiSWRUb2tlblwiLFxyXG4gICAgQUNDRVNTX1RPS0VOOiBcIkFjY2Vzc1Rva2VuXCIsXHJcbiAgICBBQ0NFU1NfVE9LRU5fV0lUSF9BVVRIX1NDSEVNRTogXCJBY2Nlc3NUb2tlbl9XaXRoX0F1dGhTY2hlbWVcIixcclxuICAgIFJFRlJFU0hfVE9LRU46IFwiUmVmcmVzaFRva2VuXCIsXHJcbn07XHJcbi8qKlxyXG4gKiBDb21iaW5lIGFsbCBjYWNoZSB0eXBlc1xyXG4gKi9cclxuY29uc3QgQ2FjaGVUeXBlID0ge1xyXG4gICAgQURGUzogMTAwMSxcclxuICAgIE1TQTogMTAwMixcclxuICAgIE1TU1RTOiAxMDAzLFxyXG4gICAgR0VORVJJQzogMTAwNCxcclxuICAgIEFDQ0VTU19UT0tFTjogMjAwMSxcclxuICAgIFJFRlJFU0hfVE9LRU46IDIwMDIsXHJcbiAgICBJRF9UT0tFTjogMjAwMyxcclxuICAgIEFQUF9NRVRBREFUQTogMzAwMSxcclxuICAgIFVOREVGSU5FRDogOTk5OSxcclxufTtcclxuLyoqXHJcbiAqIE1vcmUgQ2FjaGUgcmVsYXRlZCBjb25zdGFudHNcclxuICovXHJcbmNvbnN0IEFQUF9NRVRBREFUQSA9IFwiYXBwbWV0YWRhdGFcIjtcclxuY29uc3QgQ0xJRU5UX0lORk8gPSBcImNsaWVudF9pbmZvXCI7XHJcbmNvbnN0IFRIRV9GQU1JTFlfSUQgPSBcIjFcIjtcclxuY29uc3QgQVVUSE9SSVRZX01FVEFEQVRBX0NPTlNUQU5UUyA9IHtcclxuICAgIENBQ0hFX0tFWTogXCJhdXRob3JpdHktbWV0YWRhdGFcIixcclxuICAgIFJFRlJFU0hfVElNRV9TRUNPTkRTOiAzNjAwICogMjQsIC8vIDI0IEhvdXJzXHJcbn07XHJcbmNvbnN0IEF1dGhvcml0eU1ldGFkYXRhU291cmNlID0ge1xyXG4gICAgQ09ORklHOiBcImNvbmZpZ1wiLFxyXG4gICAgQ0FDSEU6IFwiY2FjaGVcIixcclxuICAgIE5FVFdPUks6IFwibmV0d29ya1wiLFxyXG4gICAgSEFSRENPREVEX1ZBTFVFUzogXCJoYXJkY29kZWRfdmFsdWVzXCIsXHJcbn07XHJcbmNvbnN0IFNFUlZFUl9URUxFTV9DT05TVEFOVFMgPSB7XHJcbiAgICBTQ0hFTUFfVkVSU0lPTjogNSxcclxuICAgIE1BWF9DVVJfSEVBREVSX0JZVEVTOiA4MCxcclxuICAgIE1BWF9MQVNUX0hFQURFUl9CWVRFUzogMzMwLFxyXG4gICAgTUFYX0NBQ0hFRF9FUlJPUlM6IDUwLFxyXG4gICAgQ0FDSEVfS0VZOiBcInNlcnZlci10ZWxlbWV0cnlcIixcclxuICAgIENBVEVHT1JZX1NFUEFSQVRPUjogXCJ8XCIsXHJcbiAgICBWQUxVRV9TRVBBUkFUT1I6IFwiLFwiLFxyXG4gICAgT1ZFUkZMT1dfVFJVRTogXCIxXCIsXHJcbiAgICBPVkVSRkxPV19GQUxTRTogXCIwXCIsXHJcbiAgICBVTktOT1dOX0VSUk9SOiBcInVua25vd25fZXJyb3JcIixcclxufTtcclxuLyoqXHJcbiAqIFR5cGUgb2YgdGhlIGF1dGhlbnRpY2F0aW9uIHJlcXVlc3RcclxuICovXHJcbmNvbnN0IEF1dGhlbnRpY2F0aW9uU2NoZW1lID0ge1xyXG4gICAgQkVBUkVSOiBcIkJlYXJlclwiLFxyXG4gICAgUE9QOiBcInBvcFwiLFxyXG4gICAgU1NIOiBcInNzaC1jZXJ0XCIsXHJcbn07XHJcbi8qKlxyXG4gKiBDb25zdGFudHMgcmVsYXRlZCB0byB0aHJvdHRsaW5nXHJcbiAqL1xyXG5jb25zdCBUaHJvdHRsaW5nQ29uc3RhbnRzID0ge1xyXG4gICAgLy8gRGVmYXVsdCB0aW1lIHRvIHRocm90dGxlIFJlcXVlc3RUaHVtYnByaW50IGluIHNlY29uZHNcclxuICAgIERFRkFVTFRfVEhST1RUTEVfVElNRV9TRUNPTkRTOiA2MCxcclxuICAgIC8vIERlZmF1bHQgbWF4aW11bSB0aW1lIHRvIHRocm90dGxlIGluIHNlY29uZHMsIG92ZXJyaWRlcyB3aGF0IHRoZSBzZXJ2ZXIgc2VuZHMgYmFja1xyXG4gICAgREVGQVVMVF9NQVhfVEhST1RUTEVfVElNRV9TRUNPTkRTOiAzNjAwLFxyXG4gICAgLy8gUHJlZml4IGZvciBzdG9yaW5nIHRocm90dGxpbmcgZW50cmllc1xyXG4gICAgVEhST1RUTElOR19QUkVGSVg6IFwidGhyb3R0bGluZ1wiLFxyXG4gICAgLy8gVmFsdWUgYXNzaWduZWQgdG8gdGhlIHgtbXMtbGliLWNhcGFiaWxpdHkgaGVhZGVyIHRvIGluZGljYXRlIHRvIHRoZSBzZXJ2ZXIgdGhlIGxpYnJhcnkgc3VwcG9ydHMgdGhyb3R0bGluZ1xyXG4gICAgWF9NU19MSUJfQ0FQQUJJTElUWV9WQUxVRTogXCJyZXRyeS1hZnRlciwgaDQyOVwiLFxyXG59O1xyXG5jb25zdCBFcnJvcnMgPSB7XHJcbiAgICBJTlZBTElEX0dSQU5UX0VSUk9SOiBcImludmFsaWRfZ3JhbnRcIixcclxuICAgIENMSUVOVF9NSVNNQVRDSF9FUlJPUjogXCJjbGllbnRfbWlzbWF0Y2hcIixcclxufTtcclxuLyoqXHJcbiAqIFBhc3N3b3JkIGdyYW50IHBhcmFtZXRlcnNcclxuICovXHJcbmNvbnN0IFBhc3N3b3JkR3JhbnRDb25zdGFudHMgPSB7XHJcbiAgICB1c2VybmFtZTogXCJ1c2VybmFtZVwiLFxyXG4gICAgcGFzc3dvcmQ6IFwicGFzc3dvcmRcIixcclxufTtcclxuLyoqXHJcbiAqIFJlc3BvbnNlIGNvZGVzXHJcbiAqL1xyXG5jb25zdCBSZXNwb25zZUNvZGVzID0ge1xyXG4gICAgaHR0cFN1Y2Nlc3M6IDIwMCxcclxuICAgIGh0dHBCYWRSZXF1ZXN0OiA0MDAsXHJcbn07XHJcbi8qKlxyXG4gKiBSZWdpb24gRGlzY292ZXJ5IFNvdXJjZXNcclxuICovXHJcbmNvbnN0IFJlZ2lvbkRpc2NvdmVyeVNvdXJjZXMgPSB7XHJcbiAgICBGQUlMRURfQVVUT19ERVRFQ1RJT046IFwiMVwiLFxyXG4gICAgSU5URVJOQUxfQ0FDSEU6IFwiMlwiLFxyXG4gICAgRU5WSVJPTk1FTlRfVkFSSUFCTEU6IFwiM1wiLFxyXG4gICAgSU1EUzogXCI0XCIsXHJcbn07XHJcbi8qKlxyXG4gKiBSZWdpb24gRGlzY292ZXJ5IE91dGNvbWVzXHJcbiAqL1xyXG5jb25zdCBSZWdpb25EaXNjb3ZlcnlPdXRjb21lcyA9IHtcclxuICAgIENPTkZJR1VSRURfTUFUQ0hFU19ERVRFQ1RFRDogXCIxXCIsXHJcbiAgICBDT05GSUdVUkVEX05PX0FVVE9fREVURUNUSU9OOiBcIjJcIixcclxuICAgIENPTkZJR1VSRURfTk9UX0RFVEVDVEVEOiBcIjNcIixcclxuICAgIEFVVE9fREVURUNUSU9OX1JFUVVFU1RFRF9TVUNDRVNTRlVMOiBcIjRcIixcclxuICAgIEFVVE9fREVURUNUSU9OX1JFUVVFU1RFRF9GQUlMRUQ6IFwiNVwiLFxyXG59O1xyXG4vKipcclxuICogU3BlY2lmaWVzIHRoZSByZWFzb24gZm9yIGZldGNoaW5nIHRoZSBhY2Nlc3MgdG9rZW4gZnJvbSB0aGUgaWRlbnRpdHkgcHJvdmlkZXJcclxuICovXHJcbmNvbnN0IENhY2hlT3V0Y29tZSA9IHtcclxuICAgIC8vIFdoZW4gYSB0b2tlbiBpcyBmb3VuZCBpbiB0aGUgY2FjaGUgb3IgdGhlIGNhY2hlIGlzIG5vdCBzdXBwb3NlZCB0byBiZSBoaXQgd2hlbiBtYWtpbmcgdGhlIHJlcXVlc3RcclxuICAgIE5PVF9BUFBMSUNBQkxFOiBcIjBcIixcclxuICAgIC8vIFdoZW4gdGhlIHRva2VuIHJlcXVlc3QgZ29lcyB0byB0aGUgaWRlbnRpdHkgcHJvdmlkZXIgYmVjYXVzZSBmb3JjZV9yZWZyZXNoIHdhcyBzZXQgdG8gdHJ1ZS4gQWxzbyBvY2N1cnMgaWYgY2xhaW1zIHdlcmUgcmVxdWVzdGVkXHJcbiAgICBGT1JDRV9SRUZSRVNIX09SX0NMQUlNUzogXCIxXCIsXHJcbiAgICAvLyBXaGVuIHRoZSB0b2tlbiByZXF1ZXN0IGdvZXMgdG8gdGhlIGlkZW50aXR5IHByb3ZpZGVyIGJlY2F1c2Ugbm8gY2FjaGVkIGFjY2VzcyB0b2tlbiBleGlzdHNcclxuICAgIE5PX0NBQ0hFRF9BQ0NFU1NfVE9LRU46IFwiMlwiLFxyXG4gICAgLy8gV2hlbiB0aGUgdG9rZW4gcmVxdWVzdCBnb2VzIHRvIHRoZSBpZGVudGl0eSBwcm92aWRlciBiZWNhdXNlIGNhY2hlZCBhY2Nlc3MgdG9rZW4gZXhwaXJlZFxyXG4gICAgQ0FDSEVEX0FDQ0VTU19UT0tFTl9FWFBJUkVEOiBcIjNcIixcclxuICAgIC8vIFdoZW4gdGhlIHRva2VuIHJlcXVlc3QgZ29lcyB0byB0aGUgaWRlbnRpdHkgcHJvdmlkZXIgYmVjYXVzZSByZWZyZXNoX2luIHdhcyB1c2VkIGFuZCB0aGUgZXhpc3RpbmcgdG9rZW4gbmVlZHMgdG8gYmUgcmVmcmVzaGVkXHJcbiAgICBQUk9BQ1RJVkVMWV9SRUZSRVNIRUQ6IFwiNFwiLFxyXG59O1xyXG5jb25zdCBKc29uV2ViVG9rZW5UeXBlcyA9IHtcclxuICAgIEp3dDogXCJKV1RcIixcclxuICAgIEp3azogXCJKV0tcIixcclxuICAgIFBvcDogXCJwb3BcIixcclxufTtcclxuY29uc3QgT05FX0RBWV9JTl9NUyA9IDg2NDAwMDAwO1xyXG4vLyBUb2tlbiByZW5ld2FsIG9mZnNldCBkZWZhdWx0IGluIHNlY29uZHNcclxuY29uc3QgREVGQVVMVF9UT0tFTl9SRU5FV0FMX09GRlNFVF9TRUMgPSAzMDA7XG5cbmV4cG9ydCB7IEFBREF1dGhvcml0eUNvbnN0YW50cywgQVBQX01FVEFEQVRBLCBBVVRIT1JJVFlfTUVUQURBVEFfQ09OU1RBTlRTLCBBdXRoZW50aWNhdGlvblNjaGVtZSwgQXV0aG9yaXR5TWV0YWRhdGFTb3VyY2UsIENMSUVOVF9JTkZPLCBDYWNoZUFjY291bnRUeXBlLCBDYWNoZU91dGNvbWUsIENhY2hlVHlwZSwgQ2xhaW1zUmVxdWVzdEtleXMsIENvZGVDaGFsbGVuZ2VNZXRob2RWYWx1ZXMsIENvbnN0YW50cywgQ3JlZGVudGlhbFR5cGUsIERFRkFVTFRfVE9LRU5fUkVORVdBTF9PRkZTRVRfU0VDLCBFcnJvcnMsIEdyYW50VHlwZSwgSGVhZGVyTmFtZXMsIEh0dHBTdGF0dXMsIEpzb25XZWJUb2tlblR5cGVzLCBPSURDX0RFRkFVTFRfU0NPUEVTLCBPSURDX1NDT1BFUywgT05FX0RBWV9JTl9NUywgUGFzc3dvcmRHcmFudENvbnN0YW50cywgUGVyc2lzdGVudENhY2hlS2V5cywgUHJvbXB0VmFsdWUsIFJlZ2lvbkRpc2NvdmVyeU91dGNvbWVzLCBSZWdpb25EaXNjb3ZlcnlTb3VyY2VzLCBSZXNwb25zZUNvZGVzLCBSZXNwb25zZU1vZGUsIFNFUlZFUl9URUxFTV9DT05TVEFOVFMsIFNlcGFyYXRvcnMsIFNlcnZlclJlc3BvbnNlVHlwZSwgVEhFX0ZBTUlMWV9JRCwgVGhyb3R0bGluZ0NvbnN0YW50cyB9O1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9Q29uc3RhbnRzLm1qcy5tYXBcbiIsIi8qISBAYXp1cmUvbXNhbC1jb21tb24gdjE0LjE2LjAgMjAyNC0xMS0wNSAqL1xuJ3VzZSBzdHJpY3QnO1xuLypcclxuICogQ29weXJpZ2h0IChjKSBNaWNyb3NvZnQgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuXHJcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgTGljZW5zZS5cclxuICovXHJcbi8qKlxyXG4gKiBBdXRoRXJyb3JNZXNzYWdlIGNsYXNzIGNvbnRhaW5pbmcgc3RyaW5nIGNvbnN0YW50cyB1c2VkIGJ5IGVycm9yIGNvZGVzIGFuZCBtZXNzYWdlcy5cclxuICovXHJcbmNvbnN0IHVuZXhwZWN0ZWRFcnJvciA9IFwidW5leHBlY3RlZF9lcnJvclwiO1xyXG5jb25zdCBwb3N0UmVxdWVzdEZhaWxlZCA9IFwicG9zdF9yZXF1ZXN0X2ZhaWxlZFwiO1xuXG5leHBvcnQgeyBwb3N0UmVxdWVzdEZhaWxlZCwgdW5leHBlY3RlZEVycm9yIH07XG4vLyMgc291cmNlTWFwcGluZ1VSTD1BdXRoRXJyb3JDb2Rlcy5tanMubWFwXG4iLCIvKiEgQGF6dXJlL21zYWwtY29tbW9uIHYxNC4xNi4wIDIwMjQtMTEtMDUgKi9cbid1c2Ugc3RyaWN0JztcbmltcG9ydCB7IENvbnN0YW50cyB9IGZyb20gJy4uL3V0aWxzL0NvbnN0YW50cy5tanMnO1xuaW1wb3J0IHsgdW5leHBlY3RlZEVycm9yLCBwb3N0UmVxdWVzdEZhaWxlZCB9IGZyb20gJy4vQXV0aEVycm9yQ29kZXMubWpzJztcbmltcG9ydCAqIGFzIEF1dGhFcnJvckNvZGVzIGZyb20gJy4vQXV0aEVycm9yQ29kZXMubWpzJztcbmV4cG9ydCB7IEF1dGhFcnJvckNvZGVzIH07XG5cbi8qXHJcbiAqIENvcHlyaWdodCAoYykgTWljcm9zb2Z0IENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLlxyXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgTUlUIExpY2Vuc2UuXHJcbiAqL1xyXG5jb25zdCBBdXRoRXJyb3JNZXNzYWdlcyA9IHtcclxuICAgIFt1bmV4cGVjdGVkRXJyb3JdOiBcIlVuZXhwZWN0ZWQgZXJyb3IgaW4gYXV0aGVudGljYXRpb24uXCIsXHJcbiAgICBbcG9zdFJlcXVlc3RGYWlsZWRdOiBcIlBvc3QgcmVxdWVzdCBmYWlsZWQgZnJvbSB0aGUgbmV0d29yaywgY291bGQgYmUgYSA0eHgvNXh4IG9yIGEgbmV0d29yayB1bmF2YWlsYWJpbGl0eS4gUGxlYXNlIGNoZWNrIHRoZSBleGFjdCBlcnJvciBjb2RlIGZvciBkZXRhaWxzLlwiLFxyXG59O1xyXG4vKipcclxuICogQXV0aEVycm9yTWVzc2FnZSBjbGFzcyBjb250YWluaW5nIHN0cmluZyBjb25zdGFudHMgdXNlZCBieSBlcnJvciBjb2RlcyBhbmQgbWVzc2FnZXMuXHJcbiAqIEBkZXByZWNhdGVkIFVzZSBBdXRoRXJyb3JDb2RlcyBpbnN0ZWFkXHJcbiAqL1xyXG5jb25zdCBBdXRoRXJyb3JNZXNzYWdlID0ge1xyXG4gICAgdW5leHBlY3RlZEVycm9yOiB7XHJcbiAgICAgICAgY29kZTogdW5leHBlY3RlZEVycm9yLFxyXG4gICAgICAgIGRlc2M6IEF1dGhFcnJvck1lc3NhZ2VzW3VuZXhwZWN0ZWRFcnJvcl0sXHJcbiAgICB9LFxyXG4gICAgcG9zdFJlcXVlc3RGYWlsZWQ6IHtcclxuICAgICAgICBjb2RlOiBwb3N0UmVxdWVzdEZhaWxlZCxcclxuICAgICAgICBkZXNjOiBBdXRoRXJyb3JNZXNzYWdlc1twb3N0UmVxdWVzdEZhaWxlZF0sXHJcbiAgICB9LFxyXG59O1xyXG4vKipcclxuICogR2VuZXJhbCBlcnJvciBjbGFzcyB0aHJvd24gYnkgdGhlIE1TQUwuanMgbGlicmFyeS5cclxuICovXHJcbmNsYXNzIEF1dGhFcnJvciBleHRlbmRzIEVycm9yIHtcclxuICAgIGNvbnN0cnVjdG9yKGVycm9yQ29kZSwgZXJyb3JNZXNzYWdlLCBzdWJlcnJvcikge1xyXG4gICAgICAgIGNvbnN0IGVycm9yU3RyaW5nID0gZXJyb3JNZXNzYWdlXHJcbiAgICAgICAgICAgID8gYCR7ZXJyb3JDb2RlfTogJHtlcnJvck1lc3NhZ2V9YFxyXG4gICAgICAgICAgICA6IGVycm9yQ29kZTtcclxuICAgICAgICBzdXBlcihlcnJvclN0cmluZyk7XHJcbiAgICAgICAgT2JqZWN0LnNldFByb3RvdHlwZU9mKHRoaXMsIEF1dGhFcnJvci5wcm90b3R5cGUpO1xyXG4gICAgICAgIHRoaXMuZXJyb3JDb2RlID0gZXJyb3JDb2RlIHx8IENvbnN0YW50cy5FTVBUWV9TVFJJTkc7XHJcbiAgICAgICAgdGhpcy5lcnJvck1lc3NhZ2UgPSBlcnJvck1lc3NhZ2UgfHwgQ29uc3RhbnRzLkVNUFRZX1NUUklORztcclxuICAgICAgICB0aGlzLnN1YkVycm9yID0gc3ViZXJyb3IgfHwgQ29uc3RhbnRzLkVNUFRZX1NUUklORztcclxuICAgICAgICB0aGlzLm5hbWUgPSBcIkF1dGhFcnJvclwiO1xyXG4gICAgfVxyXG4gICAgc2V0Q29ycmVsYXRpb25JZChjb3JyZWxhdGlvbklkKSB7XHJcbiAgICAgICAgdGhpcy5jb3JyZWxhdGlvbklkID0gY29ycmVsYXRpb25JZDtcclxuICAgIH1cclxufVxyXG5mdW5jdGlvbiBjcmVhdGVBdXRoRXJyb3IoY29kZSwgYWRkaXRpb25hbE1lc3NhZ2UpIHtcclxuICAgIHJldHVybiBuZXcgQXV0aEVycm9yKGNvZGUsIGFkZGl0aW9uYWxNZXNzYWdlXHJcbiAgICAgICAgPyBgJHtBdXRoRXJyb3JNZXNzYWdlc1tjb2RlXX0gJHthZGRpdGlvbmFsTWVzc2FnZX1gXHJcbiAgICAgICAgOiBBdXRoRXJyb3JNZXNzYWdlc1tjb2RlXSk7XHJcbn1cblxuZXhwb3J0IHsgQXV0aEVycm9yLCBBdXRoRXJyb3JNZXNzYWdlLCBBdXRoRXJyb3JNZXNzYWdlcywgY3JlYXRlQXV0aEVycm9yIH07XG4vLyMgc291cmNlTWFwcGluZ1VSTD1BdXRoRXJyb3IubWpzLm1hcFxuIiwiLyohIEBhenVyZS9tc2FsLWNvbW1vbiB2MTQuMTYuMCAyMDI0LTExLTA1ICovXG4ndXNlIHN0cmljdCc7XG4vKlxyXG4gKiBDb3B5cmlnaHQgKGMpIE1pY3Jvc29mdCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cclxuICogTGljZW5zZWQgdW5kZXIgdGhlIE1JVCBMaWNlbnNlLlxyXG4gKi9cclxuY29uc3QgcmVkaXJlY3RVcmlFbXB0eSA9IFwicmVkaXJlY3RfdXJpX2VtcHR5XCI7XHJcbmNvbnN0IGNsYWltc1JlcXVlc3RQYXJzaW5nRXJyb3IgPSBcImNsYWltc19yZXF1ZXN0X3BhcnNpbmdfZXJyb3JcIjtcclxuY29uc3QgYXV0aG9yaXR5VXJpSW5zZWN1cmUgPSBcImF1dGhvcml0eV91cmlfaW5zZWN1cmVcIjtcclxuY29uc3QgdXJsUGFyc2VFcnJvciA9IFwidXJsX3BhcnNlX2Vycm9yXCI7XHJcbmNvbnN0IHVybEVtcHR5RXJyb3IgPSBcImVtcHR5X3VybF9lcnJvclwiO1xyXG5jb25zdCBlbXB0eUlucHV0U2NvcGVzRXJyb3IgPSBcImVtcHR5X2lucHV0X3Njb3Blc19lcnJvclwiO1xyXG5jb25zdCBpbnZhbGlkUHJvbXB0VmFsdWUgPSBcImludmFsaWRfcHJvbXB0X3ZhbHVlXCI7XHJcbmNvbnN0IGludmFsaWRDbGFpbXMgPSBcImludmFsaWRfY2xhaW1zXCI7XHJcbmNvbnN0IHRva2VuUmVxdWVzdEVtcHR5ID0gXCJ0b2tlbl9yZXF1ZXN0X2VtcHR5XCI7XHJcbmNvbnN0IGxvZ291dFJlcXVlc3RFbXB0eSA9IFwibG9nb3V0X3JlcXVlc3RfZW1wdHlcIjtcclxuY29uc3QgaW52YWxpZENvZGVDaGFsbGVuZ2VNZXRob2QgPSBcImludmFsaWRfY29kZV9jaGFsbGVuZ2VfbWV0aG9kXCI7XHJcbmNvbnN0IHBrY2VQYXJhbXNNaXNzaW5nID0gXCJwa2NlX3BhcmFtc19taXNzaW5nXCI7XHJcbmNvbnN0IGludmFsaWRDbG91ZERpc2NvdmVyeU1ldGFkYXRhID0gXCJpbnZhbGlkX2Nsb3VkX2Rpc2NvdmVyeV9tZXRhZGF0YVwiO1xyXG5jb25zdCBpbnZhbGlkQXV0aG9yaXR5TWV0YWRhdGEgPSBcImludmFsaWRfYXV0aG9yaXR5X21ldGFkYXRhXCI7XHJcbmNvbnN0IHVudHJ1c3RlZEF1dGhvcml0eSA9IFwidW50cnVzdGVkX2F1dGhvcml0eVwiO1xyXG5jb25zdCBtaXNzaW5nU3NoSndrID0gXCJtaXNzaW5nX3NzaF9qd2tcIjtcclxuY29uc3QgbWlzc2luZ1NzaEtpZCA9IFwibWlzc2luZ19zc2hfa2lkXCI7XHJcbmNvbnN0IG1pc3NpbmdOb25jZUF1dGhlbnRpY2F0aW9uSGVhZGVyID0gXCJtaXNzaW5nX25vbmNlX2F1dGhlbnRpY2F0aW9uX2hlYWRlclwiO1xyXG5jb25zdCBpbnZhbGlkQXV0aGVudGljYXRpb25IZWFkZXIgPSBcImludmFsaWRfYXV0aGVudGljYXRpb25faGVhZGVyXCI7XHJcbmNvbnN0IGNhbm5vdFNldE9JRENPcHRpb25zID0gXCJjYW5ub3Rfc2V0X09JRENPcHRpb25zXCI7XHJcbmNvbnN0IGNhbm5vdEFsbG93TmF0aXZlQnJva2VyID0gXCJjYW5ub3RfYWxsb3dfbmF0aXZlX2Jyb2tlclwiO1xyXG5jb25zdCBhdXRob3JpdHlNaXNtYXRjaCA9IFwiYXV0aG9yaXR5X21pc21hdGNoXCI7XG5cbmV4cG9ydCB7IGF1dGhvcml0eU1pc21hdGNoLCBhdXRob3JpdHlVcmlJbnNlY3VyZSwgY2Fubm90QWxsb3dOYXRpdmVCcm9rZXIsIGNhbm5vdFNldE9JRENPcHRpb25zLCBjbGFpbXNSZXF1ZXN0UGFyc2luZ0Vycm9yLCBlbXB0eUlucHV0U2NvcGVzRXJyb3IsIGludmFsaWRBdXRoZW50aWNhdGlvbkhlYWRlciwgaW52YWxpZEF1dGhvcml0eU1ldGFkYXRhLCBpbnZhbGlkQ2xhaW1zLCBpbnZhbGlkQ2xvdWREaXNjb3ZlcnlNZXRhZGF0YSwgaW52YWxpZENvZGVDaGFsbGVuZ2VNZXRob2QsIGludmFsaWRQcm9tcHRWYWx1ZSwgbG9nb3V0UmVxdWVzdEVtcHR5LCBtaXNzaW5nTm9uY2VBdXRoZW50aWNhdGlvbkhlYWRlciwgbWlzc2luZ1NzaEp3aywgbWlzc2luZ1NzaEtpZCwgcGtjZVBhcmFtc01pc3NpbmcsIHJlZGlyZWN0VXJpRW1wdHksIHRva2VuUmVxdWVzdEVtcHR5LCB1bnRydXN0ZWRBdXRob3JpdHksIHVybEVtcHR5RXJyb3IsIHVybFBhcnNlRXJyb3IgfTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPUNsaWVudENvbmZpZ3VyYXRpb25FcnJvckNvZGVzLm1qcy5tYXBcbiIsIi8qISBAYXp1cmUvbXNhbC1jb21tb24gdjE0LjE2LjAgMjAyNC0xMS0wNSAqL1xuJ3VzZSBzdHJpY3QnO1xuaW1wb3J0IHsgQXV0aEVycm9yIH0gZnJvbSAnLi9BdXRoRXJyb3IubWpzJztcbmltcG9ydCB7IHJlZGlyZWN0VXJpRW1wdHksIGNsYWltc1JlcXVlc3RQYXJzaW5nRXJyb3IsIGF1dGhvcml0eVVyaUluc2VjdXJlLCB1cmxQYXJzZUVycm9yLCB1cmxFbXB0eUVycm9yLCBlbXB0eUlucHV0U2NvcGVzRXJyb3IsIGludmFsaWRQcm9tcHRWYWx1ZSwgaW52YWxpZENsYWltcywgdG9rZW5SZXF1ZXN0RW1wdHksIGxvZ291dFJlcXVlc3RFbXB0eSwgaW52YWxpZENvZGVDaGFsbGVuZ2VNZXRob2QsIHBrY2VQYXJhbXNNaXNzaW5nLCBpbnZhbGlkQ2xvdWREaXNjb3ZlcnlNZXRhZGF0YSwgaW52YWxpZEF1dGhvcml0eU1ldGFkYXRhLCB1bnRydXN0ZWRBdXRob3JpdHksIG1pc3NpbmdTc2hKd2ssIG1pc3NpbmdTc2hLaWQsIG1pc3NpbmdOb25jZUF1dGhlbnRpY2F0aW9uSGVhZGVyLCBpbnZhbGlkQXV0aGVudGljYXRpb25IZWFkZXIsIGNhbm5vdFNldE9JRENPcHRpb25zLCBjYW5ub3RBbGxvd05hdGl2ZUJyb2tlciwgYXV0aG9yaXR5TWlzbWF0Y2ggfSBmcm9tICcuL0NsaWVudENvbmZpZ3VyYXRpb25FcnJvckNvZGVzLm1qcyc7XG5pbXBvcnQgKiBhcyBDbGllbnRDb25maWd1cmF0aW9uRXJyb3JDb2RlcyBmcm9tICcuL0NsaWVudENvbmZpZ3VyYXRpb25FcnJvckNvZGVzLm1qcyc7XG5leHBvcnQgeyBDbGllbnRDb25maWd1cmF0aW9uRXJyb3JDb2RlcyB9O1xuXG4vKlxyXG4gKiBDb3B5cmlnaHQgKGMpIE1pY3Jvc29mdCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cclxuICogTGljZW5zZWQgdW5kZXIgdGhlIE1JVCBMaWNlbnNlLlxyXG4gKi9cclxuY29uc3QgQ2xpZW50Q29uZmlndXJhdGlvbkVycm9yTWVzc2FnZXMgPSB7XHJcbiAgICBbcmVkaXJlY3RVcmlFbXB0eV06IFwiQSByZWRpcmVjdCBVUkkgaXMgcmVxdWlyZWQgZm9yIGFsbCBjYWxscywgYW5kIG5vbmUgaGFzIGJlZW4gc2V0LlwiLFxyXG4gICAgW2NsYWltc1JlcXVlc3RQYXJzaW5nRXJyb3JdOiBcIkNvdWxkIG5vdCBwYXJzZSB0aGUgZ2l2ZW4gY2xhaW1zIHJlcXVlc3Qgb2JqZWN0LlwiLFxyXG4gICAgW2F1dGhvcml0eVVyaUluc2VjdXJlXTogXCJBdXRob3JpdHkgVVJJcyBtdXN0IHVzZSBodHRwcy4gIFBsZWFzZSBzZWUgaGVyZSBmb3IgdmFsaWQgYXV0aG9yaXR5IGNvbmZpZ3VyYXRpb24gb3B0aW9uczogaHR0cHM6Ly9kb2NzLm1pY3Jvc29mdC5jb20vZW4tdXMvYXp1cmUvYWN0aXZlLWRpcmVjdG9yeS9kZXZlbG9wL21zYWwtanMtaW5pdGlhbGl6aW5nLWNsaWVudC1hcHBsaWNhdGlvbnMjY29uZmlndXJhdGlvbi1vcHRpb25zXCIsXHJcbiAgICBbdXJsUGFyc2VFcnJvcl06IFwiVVJMIGNvdWxkIG5vdCBiZSBwYXJzZWQgaW50byBhcHByb3ByaWF0ZSBzZWdtZW50cy5cIixcclxuICAgIFt1cmxFbXB0eUVycm9yXTogXCJVUkwgd2FzIGVtcHR5IG9yIG51bGwuXCIsXHJcbiAgICBbZW1wdHlJbnB1dFNjb3Blc0Vycm9yXTogXCJTY29wZXMgY2Fubm90IGJlIHBhc3NlZCBhcyBudWxsLCB1bmRlZmluZWQgb3IgZW1wdHkgYXJyYXkgYmVjYXVzZSB0aGV5IGFyZSByZXF1aXJlZCB0byBvYnRhaW4gYW4gYWNjZXNzIHRva2VuLlwiLFxyXG4gICAgW2ludmFsaWRQcm9tcHRWYWx1ZV06IFwiUGxlYXNlIHNlZSBoZXJlIGZvciB2YWxpZCBjb25maWd1cmF0aW9uIG9wdGlvbnM6IGh0dHBzOi8vYXp1cmVhZC5naXRodWIuaW8vbWljcm9zb2Z0LWF1dGhlbnRpY2F0aW9uLWxpYnJhcnktZm9yLWpzL3JlZi9tb2R1bGVzL19henVyZV9tc2FsX2NvbW1vbi5odG1sI2NvbW1vbmF1dGhvcml6YXRpb251cmxyZXF1ZXN0XCIsXHJcbiAgICBbaW52YWxpZENsYWltc106IFwiR2l2ZW4gY2xhaW1zIHBhcmFtZXRlciBtdXN0IGJlIGEgc3RyaW5naWZpZWQgSlNPTiBvYmplY3QuXCIsXHJcbiAgICBbdG9rZW5SZXF1ZXN0RW1wdHldOiBcIlRva2VuIHJlcXVlc3Qgd2FzIGVtcHR5IGFuZCBub3QgZm91bmQgaW4gY2FjaGUuXCIsXHJcbiAgICBbbG9nb3V0UmVxdWVzdEVtcHR5XTogXCJUaGUgbG9nb3V0IHJlcXVlc3Qgd2FzIG51bGwgb3IgdW5kZWZpbmVkLlwiLFxyXG4gICAgW2ludmFsaWRDb2RlQ2hhbGxlbmdlTWV0aG9kXTogJ2NvZGVfY2hhbGxlbmdlX21ldGhvZCBwYXNzZWQgaXMgaW52YWxpZC4gVmFsaWQgdmFsdWVzIGFyZSBcInBsYWluXCIgYW5kIFwiUzI1NlwiLicsXHJcbiAgICBbcGtjZVBhcmFtc01pc3NpbmddOiBcIkJvdGggcGFyYW1zOiBjb2RlX2NoYWxsZW5nZSBhbmQgY29kZV9jaGFsbGVuZ2VfbWV0aG9kIGFyZSB0byBiZSBwYXNzZWQgaWYgdG8gYmUgc2VudCBpbiB0aGUgcmVxdWVzdFwiLFxyXG4gICAgW2ludmFsaWRDbG91ZERpc2NvdmVyeU1ldGFkYXRhXTogXCJJbnZhbGlkIGNsb3VkRGlzY292ZXJ5TWV0YWRhdGEgcHJvdmlkZWQuIE11c3QgYmUgYSBzdHJpbmdpZmllZCBKU09OIG9iamVjdCBjb250YWluaW5nIHRlbmFudF9kaXNjb3ZlcnlfZW5kcG9pbnQgYW5kIG1ldGFkYXRhIGZpZWxkc1wiLFxyXG4gICAgW2ludmFsaWRBdXRob3JpdHlNZXRhZGF0YV06IFwiSW52YWxpZCBhdXRob3JpdHlNZXRhZGF0YSBwcm92aWRlZC4gTXVzdCBieSBhIHN0cmluZ2lmaWVkIEpTT04gb2JqZWN0IGNvbnRhaW5pbmcgYXV0aG9yaXphdGlvbl9lbmRwb2ludCwgdG9rZW5fZW5kcG9pbnQsIGlzc3VlciBmaWVsZHMuXCIsXHJcbiAgICBbdW50cnVzdGVkQXV0aG9yaXR5XTogXCJUaGUgcHJvdmlkZWQgYXV0aG9yaXR5IGlzIG5vdCBhIHRydXN0ZWQgYXV0aG9yaXR5LiBQbGVhc2UgaW5jbHVkZSB0aGlzIGF1dGhvcml0eSBpbiB0aGUga25vd25BdXRob3JpdGllcyBjb25maWcgcGFyYW1ldGVyLlwiLFxyXG4gICAgW21pc3NpbmdTc2hKd2tdOiBcIk1pc3Npbmcgc3NoSndrIGluIFNTSCBjZXJ0aWZpY2F0ZSByZXF1ZXN0LiBBIHN0cmluZ2lmaWVkIEpTT04gV2ViIEtleSBpcyByZXF1aXJlZCB3aGVuIHVzaW5nIHRoZSBTU0ggYXV0aGVudGljYXRpb24gc2NoZW1lLlwiLFxyXG4gICAgW21pc3NpbmdTc2hLaWRdOiBcIk1pc3Npbmcgc3NoS2lkIGluIFNTSCBjZXJ0aWZpY2F0ZSByZXF1ZXN0LiBBIHN0cmluZyB0aGF0IHVuaXF1ZWx5IGlkZW50aWZpZXMgdGhlIHB1YmxpYyBTU0gga2V5IGlzIHJlcXVpcmVkIHdoZW4gdXNpbmcgdGhlIFNTSCBhdXRoZW50aWNhdGlvbiBzY2hlbWUuXCIsXHJcbiAgICBbbWlzc2luZ05vbmNlQXV0aGVudGljYXRpb25IZWFkZXJdOiBcIlVuYWJsZSB0byBmaW5kIGFuIGF1dGhlbnRpY2F0aW9uIGhlYWRlciBjb250YWluaW5nIHNlcnZlciBub25jZS4gRWl0aGVyIHRoZSBBdXRoZW50aWNhdGlvbi1JbmZvIG9yIFdXVy1BdXRoZW50aWNhdGUgaGVhZGVycyBtdXN0IGJlIHByZXNlbnQgaW4gb3JkZXIgdG8gb2J0YWluIGEgc2VydmVyIG5vbmNlLlwiLFxyXG4gICAgW2ludmFsaWRBdXRoZW50aWNhdGlvbkhlYWRlcl06IFwiSW52YWxpZCBhdXRoZW50aWNhdGlvbiBoZWFkZXIgcHJvdmlkZWRcIixcclxuICAgIFtjYW5ub3RTZXRPSURDT3B0aW9uc106IFwiQ2Fubm90IHNldCBPSURDT3B0aW9ucyBwYXJhbWV0ZXIuIFBsZWFzZSBjaGFuZ2UgdGhlIHByb3RvY29sIG1vZGUgdG8gT0lEQyBvciB1c2UgYSBub24tTWljcm9zb2Z0IGF1dGhvcml0eS5cIixcclxuICAgIFtjYW5ub3RBbGxvd05hdGl2ZUJyb2tlcl06IFwiQ2Fubm90IHNldCBhbGxvd05hdGl2ZUJyb2tlciBwYXJhbWV0ZXIgdG8gdHJ1ZSB3aGVuIG5vdCBpbiBBQUQgcHJvdG9jb2wgbW9kZS5cIixcclxuICAgIFthdXRob3JpdHlNaXNtYXRjaF06IFwiQXV0aG9yaXR5IG1pc21hdGNoIGVycm9yLiBBdXRob3JpdHkgcHJvdmlkZWQgaW4gbG9naW4gcmVxdWVzdCBvciBQdWJsaWNDbGllbnRBcHBsaWNhdGlvbiBjb25maWcgZG9lcyBub3QgbWF0Y2ggdGhlIGVudmlyb25tZW50IG9mIHRoZSBwcm92aWRlZCBhY2NvdW50LiBQbGVhc2UgdXNlIGEgbWF0Y2hpbmcgYWNjb3VudCBvciBtYWtlIGFuIGludGVyYWN0aXZlIHJlcXVlc3QgdG8gbG9naW4gdG8gdGhpcyBhdXRob3JpdHkuXCIsXHJcbn07XHJcbi8qKlxyXG4gKiBDbGllbnRDb25maWd1cmF0aW9uRXJyb3JNZXNzYWdlIGNsYXNzIGNvbnRhaW5pbmcgc3RyaW5nIGNvbnN0YW50cyB1c2VkIGJ5IGVycm9yIGNvZGVzIGFuZCBtZXNzYWdlcy5cclxuICogQGRlcHJlY2F0ZWQgVXNlIENsaWVudENvbmZpZ3VyYXRpb25FcnJvckNvZGVzIGluc3RlYWRcclxuICovXHJcbmNvbnN0IENsaWVudENvbmZpZ3VyYXRpb25FcnJvck1lc3NhZ2UgPSB7XHJcbiAgICByZWRpcmVjdFVyaU5vdFNldDoge1xyXG4gICAgICAgIGNvZGU6IHJlZGlyZWN0VXJpRW1wdHksXHJcbiAgICAgICAgZGVzYzogQ2xpZW50Q29uZmlndXJhdGlvbkVycm9yTWVzc2FnZXNbcmVkaXJlY3RVcmlFbXB0eV0sXHJcbiAgICB9LFxyXG4gICAgY2xhaW1zUmVxdWVzdFBhcnNpbmdFcnJvcjoge1xyXG4gICAgICAgIGNvZGU6IGNsYWltc1JlcXVlc3RQYXJzaW5nRXJyb3IsXHJcbiAgICAgICAgZGVzYzogQ2xpZW50Q29uZmlndXJhdGlvbkVycm9yTWVzc2FnZXNbY2xhaW1zUmVxdWVzdFBhcnNpbmdFcnJvcl0sXHJcbiAgICB9LFxyXG4gICAgYXV0aG9yaXR5VXJpSW5zZWN1cmU6IHtcclxuICAgICAgICBjb2RlOiBhdXRob3JpdHlVcmlJbnNlY3VyZSxcclxuICAgICAgICBkZXNjOiBDbGllbnRDb25maWd1cmF0aW9uRXJyb3JNZXNzYWdlc1thdXRob3JpdHlVcmlJbnNlY3VyZV0sXHJcbiAgICB9LFxyXG4gICAgdXJsUGFyc2VFcnJvcjoge1xyXG4gICAgICAgIGNvZGU6IHVybFBhcnNlRXJyb3IsXHJcbiAgICAgICAgZGVzYzogQ2xpZW50Q29uZmlndXJhdGlvbkVycm9yTWVzc2FnZXNbdXJsUGFyc2VFcnJvcl0sXHJcbiAgICB9LFxyXG4gICAgdXJsRW1wdHlFcnJvcjoge1xyXG4gICAgICAgIGNvZGU6IHVybEVtcHR5RXJyb3IsXHJcbiAgICAgICAgZGVzYzogQ2xpZW50Q29uZmlndXJhdGlvbkVycm9yTWVzc2FnZXNbdXJsRW1wdHlFcnJvcl0sXHJcbiAgICB9LFxyXG4gICAgZW1wdHlTY29wZXNFcnJvcjoge1xyXG4gICAgICAgIGNvZGU6IGVtcHR5SW5wdXRTY29wZXNFcnJvcixcclxuICAgICAgICBkZXNjOiBDbGllbnRDb25maWd1cmF0aW9uRXJyb3JNZXNzYWdlc1tlbXB0eUlucHV0U2NvcGVzRXJyb3JdLFxyXG4gICAgfSxcclxuICAgIGludmFsaWRQcm9tcHQ6IHtcclxuICAgICAgICBjb2RlOiBpbnZhbGlkUHJvbXB0VmFsdWUsXHJcbiAgICAgICAgZGVzYzogQ2xpZW50Q29uZmlndXJhdGlvbkVycm9yTWVzc2FnZXNbaW52YWxpZFByb21wdFZhbHVlXSxcclxuICAgIH0sXHJcbiAgICBpbnZhbGlkQ2xhaW1zUmVxdWVzdDoge1xyXG4gICAgICAgIGNvZGU6IGludmFsaWRDbGFpbXMsXHJcbiAgICAgICAgZGVzYzogQ2xpZW50Q29uZmlndXJhdGlvbkVycm9yTWVzc2FnZXNbaW52YWxpZENsYWltc10sXHJcbiAgICB9LFxyXG4gICAgdG9rZW5SZXF1ZXN0RW1wdHlFcnJvcjoge1xyXG4gICAgICAgIGNvZGU6IHRva2VuUmVxdWVzdEVtcHR5LFxyXG4gICAgICAgIGRlc2M6IENsaWVudENvbmZpZ3VyYXRpb25FcnJvck1lc3NhZ2VzW3Rva2VuUmVxdWVzdEVtcHR5XSxcclxuICAgIH0sXHJcbiAgICBsb2dvdXRSZXF1ZXN0RW1wdHlFcnJvcjoge1xyXG4gICAgICAgIGNvZGU6IGxvZ291dFJlcXVlc3RFbXB0eSxcclxuICAgICAgICBkZXNjOiBDbGllbnRDb25maWd1cmF0aW9uRXJyb3JNZXNzYWdlc1tsb2dvdXRSZXF1ZXN0RW1wdHldLFxyXG4gICAgfSxcclxuICAgIGludmFsaWRDb2RlQ2hhbGxlbmdlTWV0aG9kOiB7XHJcbiAgICAgICAgY29kZTogaW52YWxpZENvZGVDaGFsbGVuZ2VNZXRob2QsXHJcbiAgICAgICAgZGVzYzogQ2xpZW50Q29uZmlndXJhdGlvbkVycm9yTWVzc2FnZXNbaW52YWxpZENvZGVDaGFsbGVuZ2VNZXRob2RdLFxyXG4gICAgfSxcclxuICAgIGludmFsaWRDb2RlQ2hhbGxlbmdlUGFyYW1zOiB7XHJcbiAgICAgICAgY29kZTogcGtjZVBhcmFtc01pc3NpbmcsXHJcbiAgICAgICAgZGVzYzogQ2xpZW50Q29uZmlndXJhdGlvbkVycm9yTWVzc2FnZXNbcGtjZVBhcmFtc01pc3NpbmddLFxyXG4gICAgfSxcclxuICAgIGludmFsaWRDbG91ZERpc2NvdmVyeU1ldGFkYXRhOiB7XHJcbiAgICAgICAgY29kZTogaW52YWxpZENsb3VkRGlzY292ZXJ5TWV0YWRhdGEsXHJcbiAgICAgICAgZGVzYzogQ2xpZW50Q29uZmlndXJhdGlvbkVycm9yTWVzc2FnZXNbaW52YWxpZENsb3VkRGlzY292ZXJ5TWV0YWRhdGFdLFxyXG4gICAgfSxcclxuICAgIGludmFsaWRBdXRob3JpdHlNZXRhZGF0YToge1xyXG4gICAgICAgIGNvZGU6IGludmFsaWRBdXRob3JpdHlNZXRhZGF0YSxcclxuICAgICAgICBkZXNjOiBDbGllbnRDb25maWd1cmF0aW9uRXJyb3JNZXNzYWdlc1tpbnZhbGlkQXV0aG9yaXR5TWV0YWRhdGFdLFxyXG4gICAgfSxcclxuICAgIHVudHJ1c3RlZEF1dGhvcml0eToge1xyXG4gICAgICAgIGNvZGU6IHVudHJ1c3RlZEF1dGhvcml0eSxcclxuICAgICAgICBkZXNjOiBDbGllbnRDb25maWd1cmF0aW9uRXJyb3JNZXNzYWdlc1t1bnRydXN0ZWRBdXRob3JpdHldLFxyXG4gICAgfSxcclxuICAgIG1pc3NpbmdTc2hKd2s6IHtcclxuICAgICAgICBjb2RlOiBtaXNzaW5nU3NoSndrLFxyXG4gICAgICAgIGRlc2M6IENsaWVudENvbmZpZ3VyYXRpb25FcnJvck1lc3NhZ2VzW21pc3NpbmdTc2hKd2tdLFxyXG4gICAgfSxcclxuICAgIG1pc3NpbmdTc2hLaWQ6IHtcclxuICAgICAgICBjb2RlOiBtaXNzaW5nU3NoS2lkLFxyXG4gICAgICAgIGRlc2M6IENsaWVudENvbmZpZ3VyYXRpb25FcnJvck1lc3NhZ2VzW21pc3NpbmdTc2hLaWRdLFxyXG4gICAgfSxcclxuICAgIG1pc3NpbmdOb25jZUF1dGhlbnRpY2F0aW9uSGVhZGVyOiB7XHJcbiAgICAgICAgY29kZTogbWlzc2luZ05vbmNlQXV0aGVudGljYXRpb25IZWFkZXIsXHJcbiAgICAgICAgZGVzYzogQ2xpZW50Q29uZmlndXJhdGlvbkVycm9yTWVzc2FnZXNbbWlzc2luZ05vbmNlQXV0aGVudGljYXRpb25IZWFkZXJdLFxyXG4gICAgfSxcclxuICAgIGludmFsaWRBdXRoZW50aWNhdGlvbkhlYWRlcjoge1xyXG4gICAgICAgIGNvZGU6IGludmFsaWRBdXRoZW50aWNhdGlvbkhlYWRlcixcclxuICAgICAgICBkZXNjOiBDbGllbnRDb25maWd1cmF0aW9uRXJyb3JNZXNzYWdlc1tpbnZhbGlkQXV0aGVudGljYXRpb25IZWFkZXJdLFxyXG4gICAgfSxcclxuICAgIGNhbm5vdFNldE9JRENPcHRpb25zOiB7XHJcbiAgICAgICAgY29kZTogY2Fubm90U2V0T0lEQ09wdGlvbnMsXHJcbiAgICAgICAgZGVzYzogQ2xpZW50Q29uZmlndXJhdGlvbkVycm9yTWVzc2FnZXNbY2Fubm90U2V0T0lEQ09wdGlvbnNdLFxyXG4gICAgfSxcclxuICAgIGNhbm5vdEFsbG93TmF0aXZlQnJva2VyOiB7XHJcbiAgICAgICAgY29kZTogY2Fubm90QWxsb3dOYXRpdmVCcm9rZXIsXHJcbiAgICAgICAgZGVzYzogQ2xpZW50Q29uZmlndXJhdGlvbkVycm9yTWVzc2FnZXNbY2Fubm90QWxsb3dOYXRpdmVCcm9rZXJdLFxyXG4gICAgfSxcclxuICAgIGF1dGhvcml0eU1pc21hdGNoOiB7XHJcbiAgICAgICAgY29kZTogYXV0aG9yaXR5TWlzbWF0Y2gsXHJcbiAgICAgICAgZGVzYzogQ2xpZW50Q29uZmlndXJhdGlvbkVycm9yTWVzc2FnZXNbYXV0aG9yaXR5TWlzbWF0Y2hdLFxyXG4gICAgfSxcclxufTtcclxuLyoqXHJcbiAqIEVycm9yIHRocm93biB3aGVuIHRoZXJlIGlzIGFuIGVycm9yIGluIGNvbmZpZ3VyYXRpb24gb2YgdGhlIE1TQUwuanMgbGlicmFyeS5cclxuICovXHJcbmNsYXNzIENsaWVudENvbmZpZ3VyYXRpb25FcnJvciBleHRlbmRzIEF1dGhFcnJvciB7XHJcbiAgICBjb25zdHJ1Y3RvcihlcnJvckNvZGUpIHtcclxuICAgICAgICBzdXBlcihlcnJvckNvZGUsIENsaWVudENvbmZpZ3VyYXRpb25FcnJvck1lc3NhZ2VzW2Vycm9yQ29kZV0pO1xyXG4gICAgICAgIHRoaXMubmFtZSA9IFwiQ2xpZW50Q29uZmlndXJhdGlvbkVycm9yXCI7XHJcbiAgICAgICAgT2JqZWN0LnNldFByb3RvdHlwZU9mKHRoaXMsIENsaWVudENvbmZpZ3VyYXRpb25FcnJvci5wcm90b3R5cGUpO1xyXG4gICAgfVxyXG59XHJcbmZ1bmN0aW9uIGNyZWF0ZUNsaWVudENvbmZpZ3VyYXRpb25FcnJvcihlcnJvckNvZGUpIHtcclxuICAgIHJldHVybiBuZXcgQ2xpZW50Q29uZmlndXJhdGlvbkVycm9yKGVycm9yQ29kZSk7XHJcbn1cblxuZXhwb3J0IHsgQ2xpZW50Q29uZmlndXJhdGlvbkVycm9yLCBDbGllbnRDb25maWd1cmF0aW9uRXJyb3JNZXNzYWdlLCBDbGllbnRDb25maWd1cmF0aW9uRXJyb3JNZXNzYWdlcywgY3JlYXRlQ2xpZW50Q29uZmlndXJhdGlvbkVycm9yIH07XG4vLyMgc291cmNlTWFwcGluZ1VSTD1DbGllbnRDb25maWd1cmF0aW9uRXJyb3IubWpzLm1hcFxuIiwiLyohIEBhenVyZS9tc2FsLWNvbW1vbiB2MTQuMTYuMCAyMDI0LTExLTA1ICovXG4ndXNlIHN0cmljdCc7XG4vKlxyXG4gKiBDb3B5cmlnaHQgKGMpIE1pY3Jvc29mdCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cclxuICogTGljZW5zZWQgdW5kZXIgdGhlIE1JVCBMaWNlbnNlLlxyXG4gKi9cclxuLyoqXHJcbiAqIEBoaWRkZW5cclxuICovXHJcbmNsYXNzIFN0cmluZ1V0aWxzIHtcclxuICAgIC8qKlxyXG4gICAgICogQ2hlY2sgaWYgc3RyaW5naWZpZWQgb2JqZWN0IGlzIGVtcHR5XHJcbiAgICAgKiBAcGFyYW0gc3RyT2JqXHJcbiAgICAgKi9cclxuICAgIHN0YXRpYyBpc0VtcHR5T2JqKHN0ck9iaikge1xyXG4gICAgICAgIGlmIChzdHJPYmopIHtcclxuICAgICAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IG9iaiA9IEpTT04ucGFyc2Uoc3RyT2JqKTtcclxuICAgICAgICAgICAgICAgIHJldHVybiBPYmplY3Qua2V5cyhvYmopLmxlbmd0aCA9PT0gMDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBjYXRjaCAoZSkgeyB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgfVxyXG4gICAgc3RhdGljIHN0YXJ0c1dpdGgoc3RyLCBzZWFyY2gpIHtcclxuICAgICAgICByZXR1cm4gc3RyLmluZGV4T2Yoc2VhcmNoKSA9PT0gMDtcclxuICAgIH1cclxuICAgIHN0YXRpYyBlbmRzV2l0aChzdHIsIHNlYXJjaCkge1xyXG4gICAgICAgIHJldHVybiAoc3RyLmxlbmd0aCA+PSBzZWFyY2gubGVuZ3RoICYmXHJcbiAgICAgICAgICAgIHN0ci5sYXN0SW5kZXhPZihzZWFyY2gpID09PSBzdHIubGVuZ3RoIC0gc2VhcmNoLmxlbmd0aCk7XHJcbiAgICB9XHJcbiAgICAvKipcclxuICAgICAqIFBhcnNlcyBzdHJpbmcgaW50byBhbiBvYmplY3QuXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHF1ZXJ5XHJcbiAgICAgKi9cclxuICAgIHN0YXRpYyBxdWVyeVN0cmluZ1RvT2JqZWN0KHF1ZXJ5KSB7XHJcbiAgICAgICAgY29uc3Qgb2JqID0ge307XHJcbiAgICAgICAgY29uc3QgcGFyYW1zID0gcXVlcnkuc3BsaXQoXCImXCIpO1xyXG4gICAgICAgIGNvbnN0IGRlY29kZSA9IChzKSA9PiBkZWNvZGVVUklDb21wb25lbnQocy5yZXBsYWNlKC9cXCsvZywgXCIgXCIpKTtcclxuICAgICAgICBwYXJhbXMuZm9yRWFjaCgocGFpcikgPT4ge1xyXG4gICAgICAgICAgICBpZiAocGFpci50cmltKCkpIHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IFtrZXksIHZhbHVlXSA9IHBhaXIuc3BsaXQoLz0oLispL2csIDIpOyAvLyBTcGxpdCBvbiB0aGUgZmlyc3Qgb2NjdXJlbmNlIG9mIHRoZSAnPScgY2hhcmFjdGVyXHJcbiAgICAgICAgICAgICAgICBpZiAoa2V5ICYmIHZhbHVlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgb2JqW2RlY29kZShrZXkpXSA9IGRlY29kZSh2YWx1ZSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgICAgICByZXR1cm4gb2JqO1xyXG4gICAgfVxyXG4gICAgLyoqXHJcbiAgICAgKiBUcmltcyBlbnRyaWVzIGluIGFuIGFycmF5LlxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSBhcnJcclxuICAgICAqL1xyXG4gICAgc3RhdGljIHRyaW1BcnJheUVudHJpZXMoYXJyKSB7XHJcbiAgICAgICAgcmV0dXJuIGFyci5tYXAoKGVudHJ5KSA9PiBlbnRyeS50cmltKCkpO1xyXG4gICAgfVxyXG4gICAgLyoqXHJcbiAgICAgKiBSZW1vdmVzIGVtcHR5IHN0cmluZ3MgZnJvbSBhcnJheVxyXG4gICAgICogQHBhcmFtIGFyclxyXG4gICAgICovXHJcbiAgICBzdGF0aWMgcmVtb3ZlRW1wdHlTdHJpbmdzRnJvbUFycmF5KGFycikge1xyXG4gICAgICAgIHJldHVybiBhcnIuZmlsdGVyKChlbnRyeSkgPT4ge1xyXG4gICAgICAgICAgICByZXR1cm4gISFlbnRyeTtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuICAgIC8qKlxyXG4gICAgICogQXR0ZW1wdHMgdG8gcGFyc2UgYSBzdHJpbmcgaW50byBKU09OXHJcbiAgICAgKiBAcGFyYW0gc3RyXHJcbiAgICAgKi9cclxuICAgIHN0YXRpYyBqc29uUGFyc2VIZWxwZXIoc3RyKSB7XHJcbiAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgcmV0dXJuIEpTT04ucGFyc2Uoc3RyKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgY2F0Y2ggKGUpIHtcclxuICAgICAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgLyoqXHJcbiAgICAgKiBUZXN0cyBpZiBhIGdpdmVuIHN0cmluZyBtYXRjaGVzIGEgZ2l2ZW4gcGF0dGVybiwgd2l0aCBzdXBwb3J0IGZvciB3aWxkY2FyZHMgYW5kIHF1ZXJpZXMuXHJcbiAgICAgKiBAcGFyYW0gcGF0dGVybiBXaWxkY2FyZCBwYXR0ZXJuIHRvIHN0cmluZyBtYXRjaC4gU3VwcG9ydHMgXCIqXCIgZm9yIHdpbGRjYXJkcyBhbmQgXCI/XCIgZm9yIHF1ZXJpZXNcclxuICAgICAqIEBwYXJhbSBpbnB1dCBTdHJpbmcgdG8gbWF0Y2ggYWdhaW5zdFxyXG4gICAgICovXHJcbiAgICBzdGF0aWMgbWF0Y2hQYXR0ZXJuKHBhdHRlcm4sIGlucHV0KSB7XHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogV2lsZGNhcmQgc3VwcG9ydDogaHR0cHM6Ly9zdGFja292ZXJmbG93LmNvbS9hLzMxMTcyNDgvNDg4ODU1OVxyXG4gICAgICAgICAqIFF1ZXJpZXM6IHJlcGxhY2VzIFwiP1wiIGluIHN0cmluZyB3aXRoIGVzY2FwZWQgXCJcXD9cIiBmb3IgcmVnZXggdGVzdFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBzZWN1cml0eS9kZXRlY3Qtbm9uLWxpdGVyYWwtcmVnZXhwXHJcbiAgICAgICAgY29uc3QgcmVnZXggPSBuZXcgUmVnRXhwKHBhdHRlcm5cclxuICAgICAgICAgICAgLnJlcGxhY2UoL1xcXFwvZywgXCJcXFxcXFxcXFwiKVxyXG4gICAgICAgICAgICAucmVwbGFjZSgvXFwqL2csIFwiW14gXSpcIilcclxuICAgICAgICAgICAgLnJlcGxhY2UoL1xcPy9nLCBcIlxcXFw/XCIpKTtcclxuICAgICAgICByZXR1cm4gcmVnZXgudGVzdChpbnB1dCk7XHJcbiAgICB9XHJcbn1cblxuZXhwb3J0IHsgU3RyaW5nVXRpbHMgfTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPVN0cmluZ1V0aWxzLm1qcy5tYXBcbiIsIi8qISBAYXp1cmUvbXNhbC1jb21tb24gdjE0LjE2LjAgMjAyNC0xMS0wNSAqL1xuJ3VzZSBzdHJpY3QnO1xuLypcclxuICogQ29weXJpZ2h0IChjKSBNaWNyb3NvZnQgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuXHJcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgTGljZW5zZS5cclxuICovXHJcbmNvbnN0IGNsaWVudEluZm9EZWNvZGluZ0Vycm9yID0gXCJjbGllbnRfaW5mb19kZWNvZGluZ19lcnJvclwiO1xyXG5jb25zdCBjbGllbnRJbmZvRW1wdHlFcnJvciA9IFwiY2xpZW50X2luZm9fZW1wdHlfZXJyb3JcIjtcclxuY29uc3QgdG9rZW5QYXJzaW5nRXJyb3IgPSBcInRva2VuX3BhcnNpbmdfZXJyb3JcIjtcclxuY29uc3QgbnVsbE9yRW1wdHlUb2tlbiA9IFwibnVsbF9vcl9lbXB0eV90b2tlblwiO1xyXG5jb25zdCBlbmRwb2ludFJlc29sdXRpb25FcnJvciA9IFwiZW5kcG9pbnRzX3Jlc29sdXRpb25fZXJyb3JcIjtcclxuY29uc3QgbmV0d29ya0Vycm9yID0gXCJuZXR3b3JrX2Vycm9yXCI7XHJcbmNvbnN0IG9wZW5JZENvbmZpZ0Vycm9yID0gXCJvcGVuaWRfY29uZmlnX2Vycm9yXCI7XHJcbmNvbnN0IGhhc2hOb3REZXNlcmlhbGl6ZWQgPSBcImhhc2hfbm90X2Rlc2VyaWFsaXplZFwiO1xyXG5jb25zdCBpbnZhbGlkU3RhdGUgPSBcImludmFsaWRfc3RhdGVcIjtcclxuY29uc3Qgc3RhdGVNaXNtYXRjaCA9IFwic3RhdGVfbWlzbWF0Y2hcIjtcclxuY29uc3Qgc3RhdGVOb3RGb3VuZCA9IFwic3RhdGVfbm90X2ZvdW5kXCI7XHJcbmNvbnN0IG5vbmNlTWlzbWF0Y2ggPSBcIm5vbmNlX21pc21hdGNoXCI7XHJcbmNvbnN0IGF1dGhUaW1lTm90Rm91bmQgPSBcImF1dGhfdGltZV9ub3RfZm91bmRcIjtcclxuY29uc3QgbWF4QWdlVHJhbnNwaXJlZCA9IFwibWF4X2FnZV90cmFuc3BpcmVkXCI7XHJcbmNvbnN0IG11bHRpcGxlTWF0Y2hpbmdUb2tlbnMgPSBcIm11bHRpcGxlX21hdGNoaW5nX3Rva2Vuc1wiO1xyXG5jb25zdCBtdWx0aXBsZU1hdGNoaW5nQWNjb3VudHMgPSBcIm11bHRpcGxlX21hdGNoaW5nX2FjY291bnRzXCI7XHJcbmNvbnN0IG11bHRpcGxlTWF0Y2hpbmdBcHBNZXRhZGF0YSA9IFwibXVsdGlwbGVfbWF0Y2hpbmdfYXBwTWV0YWRhdGFcIjtcclxuY29uc3QgcmVxdWVzdENhbm5vdEJlTWFkZSA9IFwicmVxdWVzdF9jYW5ub3RfYmVfbWFkZVwiO1xyXG5jb25zdCBjYW5ub3RSZW1vdmVFbXB0eVNjb3BlID0gXCJjYW5ub3RfcmVtb3ZlX2VtcHR5X3Njb3BlXCI7XHJcbmNvbnN0IGNhbm5vdEFwcGVuZFNjb3BlU2V0ID0gXCJjYW5ub3RfYXBwZW5kX3Njb3Blc2V0XCI7XHJcbmNvbnN0IGVtcHR5SW5wdXRTY29wZVNldCA9IFwiZW1wdHlfaW5wdXRfc2NvcGVzZXRcIjtcclxuY29uc3QgZGV2aWNlQ29kZVBvbGxpbmdDYW5jZWxsZWQgPSBcImRldmljZV9jb2RlX3BvbGxpbmdfY2FuY2VsbGVkXCI7XHJcbmNvbnN0IGRldmljZUNvZGVFeHBpcmVkID0gXCJkZXZpY2VfY29kZV9leHBpcmVkXCI7XHJcbmNvbnN0IGRldmljZUNvZGVVbmtub3duRXJyb3IgPSBcImRldmljZV9jb2RlX3Vua25vd25fZXJyb3JcIjtcclxuY29uc3Qgbm9BY2NvdW50SW5TaWxlbnRSZXF1ZXN0ID0gXCJub19hY2NvdW50X2luX3NpbGVudF9yZXF1ZXN0XCI7XHJcbmNvbnN0IGludmFsaWRDYWNoZVJlY29yZCA9IFwiaW52YWxpZF9jYWNoZV9yZWNvcmRcIjtcclxuY29uc3QgaW52YWxpZENhY2hlRW52aXJvbm1lbnQgPSBcImludmFsaWRfY2FjaGVfZW52aXJvbm1lbnRcIjtcclxuY29uc3Qgbm9BY2NvdW50Rm91bmQgPSBcIm5vX2FjY291bnRfZm91bmRcIjtcclxuY29uc3Qgbm9DcnlwdG9PYmplY3QgPSBcIm5vX2NyeXB0b19vYmplY3RcIjtcclxuY29uc3QgdW5leHBlY3RlZENyZWRlbnRpYWxUeXBlID0gXCJ1bmV4cGVjdGVkX2NyZWRlbnRpYWxfdHlwZVwiO1xyXG5jb25zdCBpbnZhbGlkQXNzZXJ0aW9uID0gXCJpbnZhbGlkX2Fzc2VydGlvblwiO1xyXG5jb25zdCBpbnZhbGlkQ2xpZW50Q3JlZGVudGlhbCA9IFwiaW52YWxpZF9jbGllbnRfY3JlZGVudGlhbFwiO1xyXG5jb25zdCB0b2tlblJlZnJlc2hSZXF1aXJlZCA9IFwidG9rZW5fcmVmcmVzaF9yZXF1aXJlZFwiO1xyXG5jb25zdCB1c2VyVGltZW91dFJlYWNoZWQgPSBcInVzZXJfdGltZW91dF9yZWFjaGVkXCI7XHJcbmNvbnN0IHRva2VuQ2xhaW1zQ25mUmVxdWlyZWRGb3JTaWduZWRKd3QgPSBcInRva2VuX2NsYWltc19jbmZfcmVxdWlyZWRfZm9yX3NpZ25lZGp3dFwiO1xyXG5jb25zdCBhdXRob3JpemF0aW9uQ29kZU1pc3NpbmdGcm9tU2VydmVyUmVzcG9uc2UgPSBcImF1dGhvcml6YXRpb25fY29kZV9taXNzaW5nX2Zyb21fc2VydmVyX3Jlc3BvbnNlXCI7XHJcbmNvbnN0IGJpbmRpbmdLZXlOb3RSZW1vdmVkID0gXCJiaW5kaW5nX2tleV9ub3RfcmVtb3ZlZFwiO1xyXG5jb25zdCBlbmRTZXNzaW9uRW5kcG9pbnROb3RTdXBwb3J0ZWQgPSBcImVuZF9zZXNzaW9uX2VuZHBvaW50X25vdF9zdXBwb3J0ZWRcIjtcclxuY29uc3Qga2V5SWRNaXNzaW5nID0gXCJrZXlfaWRfbWlzc2luZ1wiO1xyXG5jb25zdCBub05ldHdvcmtDb25uZWN0aXZpdHkgPSBcIm5vX25ldHdvcmtfY29ubmVjdGl2aXR5XCI7XHJcbmNvbnN0IHVzZXJDYW5jZWxlZCA9IFwidXNlcl9jYW5jZWxlZFwiO1xyXG5jb25zdCBtaXNzaW5nVGVuYW50SWRFcnJvciA9IFwibWlzc2luZ190ZW5hbnRfaWRfZXJyb3JcIjtcclxuY29uc3QgbWV0aG9kTm90SW1wbGVtZW50ZWQgPSBcIm1ldGhvZF9ub3RfaW1wbGVtZW50ZWRcIjtcclxuY29uc3QgbmVzdGVkQXBwQXV0aEJyaWRnZURpc2FibGVkID0gXCJuZXN0ZWRfYXBwX2F1dGhfYnJpZGdlX2Rpc2FibGVkXCI7XG5cbmV4cG9ydCB7IGF1dGhUaW1lTm90Rm91bmQsIGF1dGhvcml6YXRpb25Db2RlTWlzc2luZ0Zyb21TZXJ2ZXJSZXNwb25zZSwgYmluZGluZ0tleU5vdFJlbW92ZWQsIGNhbm5vdEFwcGVuZFNjb3BlU2V0LCBjYW5ub3RSZW1vdmVFbXB0eVNjb3BlLCBjbGllbnRJbmZvRGVjb2RpbmdFcnJvciwgY2xpZW50SW5mb0VtcHR5RXJyb3IsIGRldmljZUNvZGVFeHBpcmVkLCBkZXZpY2VDb2RlUG9sbGluZ0NhbmNlbGxlZCwgZGV2aWNlQ29kZVVua25vd25FcnJvciwgZW1wdHlJbnB1dFNjb3BlU2V0LCBlbmRTZXNzaW9uRW5kcG9pbnROb3RTdXBwb3J0ZWQsIGVuZHBvaW50UmVzb2x1dGlvbkVycm9yLCBoYXNoTm90RGVzZXJpYWxpemVkLCBpbnZhbGlkQXNzZXJ0aW9uLCBpbnZhbGlkQ2FjaGVFbnZpcm9ubWVudCwgaW52YWxpZENhY2hlUmVjb3JkLCBpbnZhbGlkQ2xpZW50Q3JlZGVudGlhbCwgaW52YWxpZFN0YXRlLCBrZXlJZE1pc3NpbmcsIG1heEFnZVRyYW5zcGlyZWQsIG1ldGhvZE5vdEltcGxlbWVudGVkLCBtaXNzaW5nVGVuYW50SWRFcnJvciwgbXVsdGlwbGVNYXRjaGluZ0FjY291bnRzLCBtdWx0aXBsZU1hdGNoaW5nQXBwTWV0YWRhdGEsIG11bHRpcGxlTWF0Y2hpbmdUb2tlbnMsIG5lc3RlZEFwcEF1dGhCcmlkZ2VEaXNhYmxlZCwgbmV0d29ya0Vycm9yLCBub0FjY291bnRGb3VuZCwgbm9BY2NvdW50SW5TaWxlbnRSZXF1ZXN0LCBub0NyeXB0b09iamVjdCwgbm9OZXR3b3JrQ29ubmVjdGl2aXR5LCBub25jZU1pc21hdGNoLCBudWxsT3JFbXB0eVRva2VuLCBvcGVuSWRDb25maWdFcnJvciwgcmVxdWVzdENhbm5vdEJlTWFkZSwgc3RhdGVNaXNtYXRjaCwgc3RhdGVOb3RGb3VuZCwgdG9rZW5DbGFpbXNDbmZSZXF1aXJlZEZvclNpZ25lZEp3dCwgdG9rZW5QYXJzaW5nRXJyb3IsIHRva2VuUmVmcmVzaFJlcXVpcmVkLCB1bmV4cGVjdGVkQ3JlZGVudGlhbFR5cGUsIHVzZXJDYW5jZWxlZCwgdXNlclRpbWVvdXRSZWFjaGVkIH07XG4vLyMgc291cmNlTWFwcGluZ1VSTD1DbGllbnRBdXRoRXJyb3JDb2Rlcy5tanMubWFwXG4iLCIvKiEgQGF6dXJlL21zYWwtY29tbW9uIHYxNC4xNi4wIDIwMjQtMTEtMDUgKi9cbid1c2Ugc3RyaWN0JztcbmltcG9ydCB7IEF1dGhFcnJvciB9IGZyb20gJy4vQXV0aEVycm9yLm1qcyc7XG5pbXBvcnQgeyBjbGllbnRJbmZvRGVjb2RpbmdFcnJvciwgY2xpZW50SW5mb0VtcHR5RXJyb3IsIHRva2VuUGFyc2luZ0Vycm9yLCBudWxsT3JFbXB0eVRva2VuLCBlbmRwb2ludFJlc29sdXRpb25FcnJvciwgbmV0d29ya0Vycm9yLCBvcGVuSWRDb25maWdFcnJvciwgaGFzaE5vdERlc2VyaWFsaXplZCwgaW52YWxpZFN0YXRlLCBzdGF0ZU1pc21hdGNoLCBzdGF0ZU5vdEZvdW5kLCBub25jZU1pc21hdGNoLCBhdXRoVGltZU5vdEZvdW5kLCBtYXhBZ2VUcmFuc3BpcmVkLCBtdWx0aXBsZU1hdGNoaW5nVG9rZW5zLCBtdWx0aXBsZU1hdGNoaW5nQWNjb3VudHMsIG11bHRpcGxlTWF0Y2hpbmdBcHBNZXRhZGF0YSwgcmVxdWVzdENhbm5vdEJlTWFkZSwgY2Fubm90UmVtb3ZlRW1wdHlTY29wZSwgY2Fubm90QXBwZW5kU2NvcGVTZXQsIGVtcHR5SW5wdXRTY29wZVNldCwgZGV2aWNlQ29kZVBvbGxpbmdDYW5jZWxsZWQsIGRldmljZUNvZGVFeHBpcmVkLCBkZXZpY2VDb2RlVW5rbm93bkVycm9yLCBub0FjY291bnRJblNpbGVudFJlcXVlc3QsIGludmFsaWRDYWNoZVJlY29yZCwgaW52YWxpZENhY2hlRW52aXJvbm1lbnQsIG5vQWNjb3VudEZvdW5kLCBub0NyeXB0b09iamVjdCwgdW5leHBlY3RlZENyZWRlbnRpYWxUeXBlLCBpbnZhbGlkQXNzZXJ0aW9uLCBpbnZhbGlkQ2xpZW50Q3JlZGVudGlhbCwgdG9rZW5SZWZyZXNoUmVxdWlyZWQsIHVzZXJUaW1lb3V0UmVhY2hlZCwgdG9rZW5DbGFpbXNDbmZSZXF1aXJlZEZvclNpZ25lZEp3dCwgYXV0aG9yaXphdGlvbkNvZGVNaXNzaW5nRnJvbVNlcnZlclJlc3BvbnNlLCBiaW5kaW5nS2V5Tm90UmVtb3ZlZCwgZW5kU2Vzc2lvbkVuZHBvaW50Tm90U3VwcG9ydGVkLCBrZXlJZE1pc3NpbmcsIG5vTmV0d29ya0Nvbm5lY3Rpdml0eSwgdXNlckNhbmNlbGVkLCBtaXNzaW5nVGVuYW50SWRFcnJvciwgbmVzdGVkQXBwQXV0aEJyaWRnZURpc2FibGVkLCBtZXRob2ROb3RJbXBsZW1lbnRlZCB9IGZyb20gJy4vQ2xpZW50QXV0aEVycm9yQ29kZXMubWpzJztcbmltcG9ydCAqIGFzIENsaWVudEF1dGhFcnJvckNvZGVzIGZyb20gJy4vQ2xpZW50QXV0aEVycm9yQ29kZXMubWpzJztcbmV4cG9ydCB7IENsaWVudEF1dGhFcnJvckNvZGVzIH07XG5cbi8qXHJcbiAqIENvcHlyaWdodCAoYykgTWljcm9zb2Z0IENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLlxyXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgTUlUIExpY2Vuc2UuXHJcbiAqL1xyXG4vKipcclxuICogQ2xpZW50QXV0aEVycm9yTWVzc2FnZSBjbGFzcyBjb250YWluaW5nIHN0cmluZyBjb25zdGFudHMgdXNlZCBieSBlcnJvciBjb2RlcyBhbmQgbWVzc2FnZXMuXHJcbiAqL1xyXG5jb25zdCBDbGllbnRBdXRoRXJyb3JNZXNzYWdlcyA9IHtcclxuICAgIFtjbGllbnRJbmZvRGVjb2RpbmdFcnJvcl06IFwiVGhlIGNsaWVudCBpbmZvIGNvdWxkIG5vdCBiZSBwYXJzZWQvZGVjb2RlZCBjb3JyZWN0bHlcIixcclxuICAgIFtjbGllbnRJbmZvRW1wdHlFcnJvcl06IFwiVGhlIGNsaWVudCBpbmZvIHdhcyBlbXB0eVwiLFxyXG4gICAgW3Rva2VuUGFyc2luZ0Vycm9yXTogXCJUb2tlbiBjYW5ub3QgYmUgcGFyc2VkXCIsXHJcbiAgICBbbnVsbE9yRW1wdHlUb2tlbl06IFwiVGhlIHRva2VuIGlzIG51bGwgb3IgZW1wdHlcIixcclxuICAgIFtlbmRwb2ludFJlc29sdXRpb25FcnJvcl06IFwiRW5kcG9pbnRzIGNhbm5vdCBiZSByZXNvbHZlZFwiLFxyXG4gICAgW25ldHdvcmtFcnJvcl06IFwiTmV0d29yayByZXF1ZXN0IGZhaWxlZFwiLFxyXG4gICAgW29wZW5JZENvbmZpZ0Vycm9yXTogXCJDb3VsZCBub3QgcmV0cmlldmUgZW5kcG9pbnRzLiBDaGVjayB5b3VyIGF1dGhvcml0eSBhbmQgdmVyaWZ5IHRoZSAud2VsbC1rbm93bi9vcGVuaWQtY29uZmlndXJhdGlvbiBlbmRwb2ludCByZXR1cm5zIHRoZSByZXF1aXJlZCBlbmRwb2ludHMuXCIsXHJcbiAgICBbaGFzaE5vdERlc2VyaWFsaXplZF06IFwiVGhlIGhhc2ggcGFyYW1ldGVycyBjb3VsZCBub3QgYmUgZGVzZXJpYWxpemVkXCIsXHJcbiAgICBbaW52YWxpZFN0YXRlXTogXCJTdGF0ZSB3YXMgbm90IHRoZSBleHBlY3RlZCBmb3JtYXRcIixcclxuICAgIFtzdGF0ZU1pc21hdGNoXTogXCJTdGF0ZSBtaXNtYXRjaCBlcnJvclwiLFxyXG4gICAgW3N0YXRlTm90Rm91bmRdOiBcIlN0YXRlIG5vdCBmb3VuZFwiLFxyXG4gICAgW25vbmNlTWlzbWF0Y2hdOiBcIk5vbmNlIG1pc21hdGNoIGVycm9yXCIsXHJcbiAgICBbYXV0aFRpbWVOb3RGb3VuZF06IFwiTWF4IEFnZSB3YXMgcmVxdWVzdGVkIGFuZCB0aGUgSUQgdG9rZW4gaXMgbWlzc2luZyB0aGUgYXV0aF90aW1lIHZhcmlhYmxlLlwiICtcclxuICAgICAgICBcIiBhdXRoX3RpbWUgaXMgYW4gb3B0aW9uYWwgY2xhaW0gYW5kIGlzIG5vdCBlbmFibGVkIGJ5IGRlZmF1bHQgLSBpdCBtdXN0IGJlIGVuYWJsZWQuXCIgK1xyXG4gICAgICAgIFwiIFNlZSBodHRwczovL2FrYS5tcy9tc2FsanMvb3B0aW9uYWwtY2xhaW1zIGZvciBtb3JlIGluZm9ybWF0aW9uLlwiLFxyXG4gICAgW21heEFnZVRyYW5zcGlyZWRdOiBcIk1heCBBZ2UgaXMgc2V0IHRvIDAsIG9yIHRvbyBtdWNoIHRpbWUgaGFzIGVsYXBzZWQgc2luY2UgdGhlIGxhc3QgZW5kLXVzZXIgYXV0aGVudGljYXRpb24uXCIsXHJcbiAgICBbbXVsdGlwbGVNYXRjaGluZ1Rva2Vuc106IFwiVGhlIGNhY2hlIGNvbnRhaW5zIG11bHRpcGxlIHRva2VucyBzYXRpc2Z5aW5nIHRoZSByZXF1aXJlbWVudHMuIFwiICtcclxuICAgICAgICBcIkNhbGwgQWNxdWlyZVRva2VuIGFnYWluIHByb3ZpZGluZyBtb3JlIHJlcXVpcmVtZW50cyBzdWNoIGFzIGF1dGhvcml0eSBvciBhY2NvdW50LlwiLFxyXG4gICAgW211bHRpcGxlTWF0Y2hpbmdBY2NvdW50c106IFwiVGhlIGNhY2hlIGNvbnRhaW5zIG11bHRpcGxlIGFjY291bnRzIHNhdGlzZnlpbmcgdGhlIGdpdmVuIHBhcmFtZXRlcnMuIFBsZWFzZSBwYXNzIG1vcmUgaW5mbyB0byBvYnRhaW4gdGhlIGNvcnJlY3QgYWNjb3VudFwiLFxyXG4gICAgW211bHRpcGxlTWF0Y2hpbmdBcHBNZXRhZGF0YV06IFwiVGhlIGNhY2hlIGNvbnRhaW5zIG11bHRpcGxlIGFwcE1ldGFkYXRhIHNhdGlzZnlpbmcgdGhlIGdpdmVuIHBhcmFtZXRlcnMuIFBsZWFzZSBwYXNzIG1vcmUgaW5mbyB0byBvYnRhaW4gdGhlIGNvcnJlY3QgYXBwTWV0YWRhdGFcIixcclxuICAgIFtyZXF1ZXN0Q2Fubm90QmVNYWRlXTogXCJUb2tlbiByZXF1ZXN0IGNhbm5vdCBiZSBtYWRlIHdpdGhvdXQgYXV0aG9yaXphdGlvbiBjb2RlIG9yIHJlZnJlc2ggdG9rZW4uXCIsXHJcbiAgICBbY2Fubm90UmVtb3ZlRW1wdHlTY29wZV06IFwiQ2Fubm90IHJlbW92ZSBudWxsIG9yIGVtcHR5IHNjb3BlIGZyb20gU2NvcGVTZXRcIixcclxuICAgIFtjYW5ub3RBcHBlbmRTY29wZVNldF06IFwiQ2Fubm90IGFwcGVuZCBTY29wZVNldFwiLFxyXG4gICAgW2VtcHR5SW5wdXRTY29wZVNldF06IFwiRW1wdHkgaW5wdXQgU2NvcGVTZXQgY2Fubm90IGJlIHByb2Nlc3NlZFwiLFxyXG4gICAgW2RldmljZUNvZGVQb2xsaW5nQ2FuY2VsbGVkXTogXCJDYWxsZXIgaGFzIGNhbmNlbGxlZCB0b2tlbiBlbmRwb2ludCBwb2xsaW5nIGR1cmluZyBkZXZpY2UgY29kZSBmbG93IGJ5IHNldHRpbmcgRGV2aWNlQ29kZVJlcXVlc3QuY2FuY2VsID0gdHJ1ZS5cIixcclxuICAgIFtkZXZpY2VDb2RlRXhwaXJlZF06IFwiRGV2aWNlIGNvZGUgaXMgZXhwaXJlZC5cIixcclxuICAgIFtkZXZpY2VDb2RlVW5rbm93bkVycm9yXTogXCJEZXZpY2UgY29kZSBzdG9wcGVkIHBvbGxpbmcgZm9yIHVua25vd24gcmVhc29ucy5cIixcclxuICAgIFtub0FjY291bnRJblNpbGVudFJlcXVlc3RdOiBcIlBsZWFzZSBwYXNzIGFuIGFjY291bnQgb2JqZWN0LCBzaWxlbnQgZmxvdyBpcyBub3Qgc3VwcG9ydGVkIHdpdGhvdXQgYWNjb3VudCBpbmZvcm1hdGlvblwiLFxyXG4gICAgW2ludmFsaWRDYWNoZVJlY29yZF06IFwiQ2FjaGUgcmVjb3JkIG9iamVjdCB3YXMgbnVsbCBvciB1bmRlZmluZWQuXCIsXHJcbiAgICBbaW52YWxpZENhY2hlRW52aXJvbm1lbnRdOiBcIkludmFsaWQgZW52aXJvbm1lbnQgd2hlbiBhdHRlbXB0aW5nIHRvIGNyZWF0ZSBjYWNoZSBlbnRyeVwiLFxyXG4gICAgW25vQWNjb3VudEZvdW5kXTogXCJObyBhY2NvdW50IGZvdW5kIGluIGNhY2hlIGZvciBnaXZlbiBrZXkuXCIsXHJcbiAgICBbbm9DcnlwdG9PYmplY3RdOiBcIk5vIGNyeXB0byBvYmplY3QgZGV0ZWN0ZWQuXCIsXHJcbiAgICBbdW5leHBlY3RlZENyZWRlbnRpYWxUeXBlXTogXCJVbmV4cGVjdGVkIGNyZWRlbnRpYWwgdHlwZS5cIixcclxuICAgIFtpbnZhbGlkQXNzZXJ0aW9uXTogXCJDbGllbnQgYXNzZXJ0aW9uIG11c3QgbWVldCByZXF1aXJlbWVudHMgZGVzY3JpYmVkIGluIGh0dHBzOi8vdG9vbHMuaWV0Zi5vcmcvaHRtbC9yZmM3NTE1XCIsXHJcbiAgICBbaW52YWxpZENsaWVudENyZWRlbnRpYWxdOiBcIkNsaWVudCBjcmVkZW50aWFsIChzZWNyZXQsIGNlcnRpZmljYXRlLCBvciBhc3NlcnRpb24pIG11c3Qgbm90IGJlIGVtcHR5IHdoZW4gY3JlYXRpbmcgYSBjb25maWRlbnRpYWwgY2xpZW50LiBBbiBhcHBsaWNhdGlvbiBzaG91bGQgYXQgbW9zdCBoYXZlIG9uZSBjcmVkZW50aWFsXCIsXHJcbiAgICBbdG9rZW5SZWZyZXNoUmVxdWlyZWRdOiBcIkNhbm5vdCByZXR1cm4gdG9rZW4gZnJvbSBjYWNoZSBiZWNhdXNlIGl0IG11c3QgYmUgcmVmcmVzaGVkLiBUaGlzIG1heSBiZSBkdWUgdG8gb25lIG9mIHRoZSBmb2xsb3dpbmcgcmVhc29uczogZm9yY2VSZWZyZXNoIHBhcmFtZXRlciBpcyBzZXQgdG8gdHJ1ZSwgY2xhaW1zIGhhdmUgYmVlbiByZXF1ZXN0ZWQsIHRoZXJlIGlzIG5vIGNhY2hlZCBhY2Nlc3MgdG9rZW4gb3IgaXQgaXMgZXhwaXJlZC5cIixcclxuICAgIFt1c2VyVGltZW91dFJlYWNoZWRdOiBcIlVzZXIgZGVmaW5lZCB0aW1lb3V0IGZvciBkZXZpY2UgY29kZSBwb2xsaW5nIHJlYWNoZWRcIixcclxuICAgIFt0b2tlbkNsYWltc0NuZlJlcXVpcmVkRm9yU2lnbmVkSnd0XTogXCJDYW5ub3QgZ2VuZXJhdGUgYSBQT1Agand0IGlmIHRoZSB0b2tlbl9jbGFpbXMgYXJlIG5vdCBwb3B1bGF0ZWRcIixcclxuICAgIFthdXRob3JpemF0aW9uQ29kZU1pc3NpbmdGcm9tU2VydmVyUmVzcG9uc2VdOiBcIlNlcnZlciByZXNwb25zZSBkb2VzIG5vdCBjb250YWluIGFuIGF1dGhvcml6YXRpb24gY29kZSB0byBwcm9jZWVkXCIsXHJcbiAgICBbYmluZGluZ0tleU5vdFJlbW92ZWRdOiBcIkNvdWxkIG5vdCByZW1vdmUgdGhlIGNyZWRlbnRpYWwncyBiaW5kaW5nIGtleSBmcm9tIHN0b3JhZ2UuXCIsXHJcbiAgICBbZW5kU2Vzc2lvbkVuZHBvaW50Tm90U3VwcG9ydGVkXTogXCJUaGUgcHJvdmlkZWQgYXV0aG9yaXR5IGRvZXMgbm90IHN1cHBvcnQgbG9nb3V0XCIsXHJcbiAgICBba2V5SWRNaXNzaW5nXTogXCJBIGtleUlkIHZhbHVlIGlzIG1pc3NpbmcgZnJvbSB0aGUgcmVxdWVzdGVkIGJvdW5kIHRva2VuJ3MgY2FjaGUgcmVjb3JkIGFuZCBpcyByZXF1aXJlZCB0byBtYXRjaCB0aGUgdG9rZW4gdG8gaXQncyBzdG9yZWQgYmluZGluZyBrZXkuXCIsXHJcbiAgICBbbm9OZXR3b3JrQ29ubmVjdGl2aXR5XTogXCJObyBuZXR3b3JrIGNvbm5lY3Rpdml0eS4gQ2hlY2sgeW91ciBpbnRlcm5ldCBjb25uZWN0aW9uLlwiLFxyXG4gICAgW3VzZXJDYW5jZWxlZF06IFwiVXNlciBjYW5jZWxsZWQgdGhlIGZsb3cuXCIsXHJcbiAgICBbbWlzc2luZ1RlbmFudElkRXJyb3JdOiBcIkEgdGVuYW50IGlkIC0gbm90IGNvbW1vbiwgb3JnYW5pemF0aW9ucywgb3IgY29uc3VtZXJzIC0gbXVzdCBiZSBzcGVjaWZpZWQgd2hlbiB1c2luZyB0aGUgY2xpZW50X2NyZWRlbnRpYWxzIGZsb3cuXCIsXHJcbiAgICBbbWV0aG9kTm90SW1wbGVtZW50ZWRdOiBcIlRoaXMgbWV0aG9kIGhhcyBub3QgYmVlbiBpbXBsZW1lbnRlZFwiLFxyXG4gICAgW25lc3RlZEFwcEF1dGhCcmlkZ2VEaXNhYmxlZF06IFwiVGhlIG5lc3RlZCBhcHAgYXV0aCBicmlkZ2UgaXMgZGlzYWJsZWRcIixcclxufTtcclxuLyoqXHJcbiAqIFN0cmluZyBjb25zdGFudHMgdXNlZCBieSBlcnJvciBjb2RlcyBhbmQgbWVzc2FnZXMuXHJcbiAqIEBkZXByZWNhdGVkIFVzZSBDbGllbnRBdXRoRXJyb3JDb2RlcyBpbnN0ZWFkXHJcbiAqL1xyXG5jb25zdCBDbGllbnRBdXRoRXJyb3JNZXNzYWdlID0ge1xyXG4gICAgY2xpZW50SW5mb0RlY29kaW5nRXJyb3I6IHtcclxuICAgICAgICBjb2RlOiBjbGllbnRJbmZvRGVjb2RpbmdFcnJvcixcclxuICAgICAgICBkZXNjOiBDbGllbnRBdXRoRXJyb3JNZXNzYWdlc1tjbGllbnRJbmZvRGVjb2RpbmdFcnJvcl0sXHJcbiAgICB9LFxyXG4gICAgY2xpZW50SW5mb0VtcHR5RXJyb3I6IHtcclxuICAgICAgICBjb2RlOiBjbGllbnRJbmZvRW1wdHlFcnJvcixcclxuICAgICAgICBkZXNjOiBDbGllbnRBdXRoRXJyb3JNZXNzYWdlc1tjbGllbnRJbmZvRW1wdHlFcnJvcl0sXHJcbiAgICB9LFxyXG4gICAgdG9rZW5QYXJzaW5nRXJyb3I6IHtcclxuICAgICAgICBjb2RlOiB0b2tlblBhcnNpbmdFcnJvcixcclxuICAgICAgICBkZXNjOiBDbGllbnRBdXRoRXJyb3JNZXNzYWdlc1t0b2tlblBhcnNpbmdFcnJvcl0sXHJcbiAgICB9LFxyXG4gICAgbnVsbE9yRW1wdHlUb2tlbjoge1xyXG4gICAgICAgIGNvZGU6IG51bGxPckVtcHR5VG9rZW4sXHJcbiAgICAgICAgZGVzYzogQ2xpZW50QXV0aEVycm9yTWVzc2FnZXNbbnVsbE9yRW1wdHlUb2tlbl0sXHJcbiAgICB9LFxyXG4gICAgZW5kcG9pbnRSZXNvbHV0aW9uRXJyb3I6IHtcclxuICAgICAgICBjb2RlOiBlbmRwb2ludFJlc29sdXRpb25FcnJvcixcclxuICAgICAgICBkZXNjOiBDbGllbnRBdXRoRXJyb3JNZXNzYWdlc1tlbmRwb2ludFJlc29sdXRpb25FcnJvcl0sXHJcbiAgICB9LFxyXG4gICAgbmV0d29ya0Vycm9yOiB7XHJcbiAgICAgICAgY29kZTogbmV0d29ya0Vycm9yLFxyXG4gICAgICAgIGRlc2M6IENsaWVudEF1dGhFcnJvck1lc3NhZ2VzW25ldHdvcmtFcnJvcl0sXHJcbiAgICB9LFxyXG4gICAgdW5hYmxlVG9HZXRPcGVuaWRDb25maWdFcnJvcjoge1xyXG4gICAgICAgIGNvZGU6IG9wZW5JZENvbmZpZ0Vycm9yLFxyXG4gICAgICAgIGRlc2M6IENsaWVudEF1dGhFcnJvck1lc3NhZ2VzW29wZW5JZENvbmZpZ0Vycm9yXSxcclxuICAgIH0sXHJcbiAgICBoYXNoTm90RGVzZXJpYWxpemVkOiB7XHJcbiAgICAgICAgY29kZTogaGFzaE5vdERlc2VyaWFsaXplZCxcclxuICAgICAgICBkZXNjOiBDbGllbnRBdXRoRXJyb3JNZXNzYWdlc1toYXNoTm90RGVzZXJpYWxpemVkXSxcclxuICAgIH0sXHJcbiAgICBpbnZhbGlkU3RhdGVFcnJvcjoge1xyXG4gICAgICAgIGNvZGU6IGludmFsaWRTdGF0ZSxcclxuICAgICAgICBkZXNjOiBDbGllbnRBdXRoRXJyb3JNZXNzYWdlc1tpbnZhbGlkU3RhdGVdLFxyXG4gICAgfSxcclxuICAgIHN0YXRlTWlzbWF0Y2hFcnJvcjoge1xyXG4gICAgICAgIGNvZGU6IHN0YXRlTWlzbWF0Y2gsXHJcbiAgICAgICAgZGVzYzogQ2xpZW50QXV0aEVycm9yTWVzc2FnZXNbc3RhdGVNaXNtYXRjaF0sXHJcbiAgICB9LFxyXG4gICAgc3RhdGVOb3RGb3VuZEVycm9yOiB7XHJcbiAgICAgICAgY29kZTogc3RhdGVOb3RGb3VuZCxcclxuICAgICAgICBkZXNjOiBDbGllbnRBdXRoRXJyb3JNZXNzYWdlc1tzdGF0ZU5vdEZvdW5kXSxcclxuICAgIH0sXHJcbiAgICBub25jZU1pc21hdGNoRXJyb3I6IHtcclxuICAgICAgICBjb2RlOiBub25jZU1pc21hdGNoLFxyXG4gICAgICAgIGRlc2M6IENsaWVudEF1dGhFcnJvck1lc3NhZ2VzW25vbmNlTWlzbWF0Y2hdLFxyXG4gICAgfSxcclxuICAgIGF1dGhUaW1lTm90Rm91bmRFcnJvcjoge1xyXG4gICAgICAgIGNvZGU6IGF1dGhUaW1lTm90Rm91bmQsXHJcbiAgICAgICAgZGVzYzogQ2xpZW50QXV0aEVycm9yTWVzc2FnZXNbYXV0aFRpbWVOb3RGb3VuZF0sXHJcbiAgICB9LFxyXG4gICAgbWF4QWdlVHJhbnNwaXJlZDoge1xyXG4gICAgICAgIGNvZGU6IG1heEFnZVRyYW5zcGlyZWQsXHJcbiAgICAgICAgZGVzYzogQ2xpZW50QXV0aEVycm9yTWVzc2FnZXNbbWF4QWdlVHJhbnNwaXJlZF0sXHJcbiAgICB9LFxyXG4gICAgbXVsdGlwbGVNYXRjaGluZ1Rva2Vuczoge1xyXG4gICAgICAgIGNvZGU6IG11bHRpcGxlTWF0Y2hpbmdUb2tlbnMsXHJcbiAgICAgICAgZGVzYzogQ2xpZW50QXV0aEVycm9yTWVzc2FnZXNbbXVsdGlwbGVNYXRjaGluZ1Rva2Vuc10sXHJcbiAgICB9LFxyXG4gICAgbXVsdGlwbGVNYXRjaGluZ0FjY291bnRzOiB7XHJcbiAgICAgICAgY29kZTogbXVsdGlwbGVNYXRjaGluZ0FjY291bnRzLFxyXG4gICAgICAgIGRlc2M6IENsaWVudEF1dGhFcnJvck1lc3NhZ2VzW211bHRpcGxlTWF0Y2hpbmdBY2NvdW50c10sXHJcbiAgICB9LFxyXG4gICAgbXVsdGlwbGVNYXRjaGluZ0FwcE1ldGFkYXRhOiB7XHJcbiAgICAgICAgY29kZTogbXVsdGlwbGVNYXRjaGluZ0FwcE1ldGFkYXRhLFxyXG4gICAgICAgIGRlc2M6IENsaWVudEF1dGhFcnJvck1lc3NhZ2VzW211bHRpcGxlTWF0Y2hpbmdBcHBNZXRhZGF0YV0sXHJcbiAgICB9LFxyXG4gICAgdG9rZW5SZXF1ZXN0Q2Fubm90QmVNYWRlOiB7XHJcbiAgICAgICAgY29kZTogcmVxdWVzdENhbm5vdEJlTWFkZSxcclxuICAgICAgICBkZXNjOiBDbGllbnRBdXRoRXJyb3JNZXNzYWdlc1tyZXF1ZXN0Q2Fubm90QmVNYWRlXSxcclxuICAgIH0sXHJcbiAgICByZW1vdmVFbXB0eVNjb3BlRXJyb3I6IHtcclxuICAgICAgICBjb2RlOiBjYW5ub3RSZW1vdmVFbXB0eVNjb3BlLFxyXG4gICAgICAgIGRlc2M6IENsaWVudEF1dGhFcnJvck1lc3NhZ2VzW2Nhbm5vdFJlbW92ZUVtcHR5U2NvcGVdLFxyXG4gICAgfSxcclxuICAgIGFwcGVuZFNjb3BlU2V0RXJyb3I6IHtcclxuICAgICAgICBjb2RlOiBjYW5ub3RBcHBlbmRTY29wZVNldCxcclxuICAgICAgICBkZXNjOiBDbGllbnRBdXRoRXJyb3JNZXNzYWdlc1tjYW5ub3RBcHBlbmRTY29wZVNldF0sXHJcbiAgICB9LFxyXG4gICAgZW1wdHlJbnB1dFNjb3BlU2V0RXJyb3I6IHtcclxuICAgICAgICBjb2RlOiBlbXB0eUlucHV0U2NvcGVTZXQsXHJcbiAgICAgICAgZGVzYzogQ2xpZW50QXV0aEVycm9yTWVzc2FnZXNbZW1wdHlJbnB1dFNjb3BlU2V0XSxcclxuICAgIH0sXHJcbiAgICBEZXZpY2VDb2RlUG9sbGluZ0NhbmNlbGxlZDoge1xyXG4gICAgICAgIGNvZGU6IGRldmljZUNvZGVQb2xsaW5nQ2FuY2VsbGVkLFxyXG4gICAgICAgIGRlc2M6IENsaWVudEF1dGhFcnJvck1lc3NhZ2VzW2RldmljZUNvZGVQb2xsaW5nQ2FuY2VsbGVkXSxcclxuICAgIH0sXHJcbiAgICBEZXZpY2VDb2RlRXhwaXJlZDoge1xyXG4gICAgICAgIGNvZGU6IGRldmljZUNvZGVFeHBpcmVkLFxyXG4gICAgICAgIGRlc2M6IENsaWVudEF1dGhFcnJvck1lc3NhZ2VzW2RldmljZUNvZGVFeHBpcmVkXSxcclxuICAgIH0sXHJcbiAgICBEZXZpY2VDb2RlVW5rbm93bkVycm9yOiB7XHJcbiAgICAgICAgY29kZTogZGV2aWNlQ29kZVVua25vd25FcnJvcixcclxuICAgICAgICBkZXNjOiBDbGllbnRBdXRoRXJyb3JNZXNzYWdlc1tkZXZpY2VDb2RlVW5rbm93bkVycm9yXSxcclxuICAgIH0sXHJcbiAgICBOb0FjY291bnRJblNpbGVudFJlcXVlc3Q6IHtcclxuICAgICAgICBjb2RlOiBub0FjY291bnRJblNpbGVudFJlcXVlc3QsXHJcbiAgICAgICAgZGVzYzogQ2xpZW50QXV0aEVycm9yTWVzc2FnZXNbbm9BY2NvdW50SW5TaWxlbnRSZXF1ZXN0XSxcclxuICAgIH0sXHJcbiAgICBpbnZhbGlkQ2FjaGVSZWNvcmQ6IHtcclxuICAgICAgICBjb2RlOiBpbnZhbGlkQ2FjaGVSZWNvcmQsXHJcbiAgICAgICAgZGVzYzogQ2xpZW50QXV0aEVycm9yTWVzc2FnZXNbaW52YWxpZENhY2hlUmVjb3JkXSxcclxuICAgIH0sXHJcbiAgICBpbnZhbGlkQ2FjaGVFbnZpcm9ubWVudDoge1xyXG4gICAgICAgIGNvZGU6IGludmFsaWRDYWNoZUVudmlyb25tZW50LFxyXG4gICAgICAgIGRlc2M6IENsaWVudEF1dGhFcnJvck1lc3NhZ2VzW2ludmFsaWRDYWNoZUVudmlyb25tZW50XSxcclxuICAgIH0sXHJcbiAgICBub0FjY291bnRGb3VuZDoge1xyXG4gICAgICAgIGNvZGU6IG5vQWNjb3VudEZvdW5kLFxyXG4gICAgICAgIGRlc2M6IENsaWVudEF1dGhFcnJvck1lc3NhZ2VzW25vQWNjb3VudEZvdW5kXSxcclxuICAgIH0sXHJcbiAgICBub0NyeXB0b09iajoge1xyXG4gICAgICAgIGNvZGU6IG5vQ3J5cHRvT2JqZWN0LFxyXG4gICAgICAgIGRlc2M6IENsaWVudEF1dGhFcnJvck1lc3NhZ2VzW25vQ3J5cHRvT2JqZWN0XSxcclxuICAgIH0sXHJcbiAgICB1bmV4cGVjdGVkQ3JlZGVudGlhbFR5cGU6IHtcclxuICAgICAgICBjb2RlOiB1bmV4cGVjdGVkQ3JlZGVudGlhbFR5cGUsXHJcbiAgICAgICAgZGVzYzogQ2xpZW50QXV0aEVycm9yTWVzc2FnZXNbdW5leHBlY3RlZENyZWRlbnRpYWxUeXBlXSxcclxuICAgIH0sXHJcbiAgICBpbnZhbGlkQXNzZXJ0aW9uOiB7XHJcbiAgICAgICAgY29kZTogaW52YWxpZEFzc2VydGlvbixcclxuICAgICAgICBkZXNjOiBDbGllbnRBdXRoRXJyb3JNZXNzYWdlc1tpbnZhbGlkQXNzZXJ0aW9uXSxcclxuICAgIH0sXHJcbiAgICBpbnZhbGlkQ2xpZW50Q3JlZGVudGlhbDoge1xyXG4gICAgICAgIGNvZGU6IGludmFsaWRDbGllbnRDcmVkZW50aWFsLFxyXG4gICAgICAgIGRlc2M6IENsaWVudEF1dGhFcnJvck1lc3NhZ2VzW2ludmFsaWRDbGllbnRDcmVkZW50aWFsXSxcclxuICAgIH0sXHJcbiAgICB0b2tlblJlZnJlc2hSZXF1aXJlZDoge1xyXG4gICAgICAgIGNvZGU6IHRva2VuUmVmcmVzaFJlcXVpcmVkLFxyXG4gICAgICAgIGRlc2M6IENsaWVudEF1dGhFcnJvck1lc3NhZ2VzW3Rva2VuUmVmcmVzaFJlcXVpcmVkXSxcclxuICAgIH0sXHJcbiAgICB1c2VyVGltZW91dFJlYWNoZWQ6IHtcclxuICAgICAgICBjb2RlOiB1c2VyVGltZW91dFJlYWNoZWQsXHJcbiAgICAgICAgZGVzYzogQ2xpZW50QXV0aEVycm9yTWVzc2FnZXNbdXNlclRpbWVvdXRSZWFjaGVkXSxcclxuICAgIH0sXHJcbiAgICB0b2tlbkNsYWltc1JlcXVpcmVkOiB7XHJcbiAgICAgICAgY29kZTogdG9rZW5DbGFpbXNDbmZSZXF1aXJlZEZvclNpZ25lZEp3dCxcclxuICAgICAgICBkZXNjOiBDbGllbnRBdXRoRXJyb3JNZXNzYWdlc1t0b2tlbkNsYWltc0NuZlJlcXVpcmVkRm9yU2lnbmVkSnd0XSxcclxuICAgIH0sXHJcbiAgICBub0F1dGhvcml6YXRpb25Db2RlRnJvbVNlcnZlcjoge1xyXG4gICAgICAgIGNvZGU6IGF1dGhvcml6YXRpb25Db2RlTWlzc2luZ0Zyb21TZXJ2ZXJSZXNwb25zZSxcclxuICAgICAgICBkZXNjOiBDbGllbnRBdXRoRXJyb3JNZXNzYWdlc1thdXRob3JpemF0aW9uQ29kZU1pc3NpbmdGcm9tU2VydmVyUmVzcG9uc2VdLFxyXG4gICAgfSxcclxuICAgIGJpbmRpbmdLZXlOb3RSZW1vdmVkRXJyb3I6IHtcclxuICAgICAgICBjb2RlOiBiaW5kaW5nS2V5Tm90UmVtb3ZlZCxcclxuICAgICAgICBkZXNjOiBDbGllbnRBdXRoRXJyb3JNZXNzYWdlc1tiaW5kaW5nS2V5Tm90UmVtb3ZlZF0sXHJcbiAgICB9LFxyXG4gICAgbG9nb3V0Tm90U3VwcG9ydGVkOiB7XHJcbiAgICAgICAgY29kZTogZW5kU2Vzc2lvbkVuZHBvaW50Tm90U3VwcG9ydGVkLFxyXG4gICAgICAgIGRlc2M6IENsaWVudEF1dGhFcnJvck1lc3NhZ2VzW2VuZFNlc3Npb25FbmRwb2ludE5vdFN1cHBvcnRlZF0sXHJcbiAgICB9LFxyXG4gICAga2V5SWRNaXNzaW5nOiB7XHJcbiAgICAgICAgY29kZToga2V5SWRNaXNzaW5nLFxyXG4gICAgICAgIGRlc2M6IENsaWVudEF1dGhFcnJvck1lc3NhZ2VzW2tleUlkTWlzc2luZ10sXHJcbiAgICB9LFxyXG4gICAgbm9OZXR3b3JrQ29ubmVjdGl2aXR5OiB7XHJcbiAgICAgICAgY29kZTogbm9OZXR3b3JrQ29ubmVjdGl2aXR5LFxyXG4gICAgICAgIGRlc2M6IENsaWVudEF1dGhFcnJvck1lc3NhZ2VzW25vTmV0d29ya0Nvbm5lY3Rpdml0eV0sXHJcbiAgICB9LFxyXG4gICAgdXNlckNhbmNlbGVkRXJyb3I6IHtcclxuICAgICAgICBjb2RlOiB1c2VyQ2FuY2VsZWQsXHJcbiAgICAgICAgZGVzYzogQ2xpZW50QXV0aEVycm9yTWVzc2FnZXNbdXNlckNhbmNlbGVkXSxcclxuICAgIH0sXHJcbiAgICBtaXNzaW5nVGVuYW50SWRFcnJvcjoge1xyXG4gICAgICAgIGNvZGU6IG1pc3NpbmdUZW5hbnRJZEVycm9yLFxyXG4gICAgICAgIGRlc2M6IENsaWVudEF1dGhFcnJvck1lc3NhZ2VzW21pc3NpbmdUZW5hbnRJZEVycm9yXSxcclxuICAgIH0sXHJcbiAgICBuZXN0ZWRBcHBBdXRoQnJpZGdlRGlzYWJsZWQ6IHtcclxuICAgICAgICBjb2RlOiBuZXN0ZWRBcHBBdXRoQnJpZGdlRGlzYWJsZWQsXHJcbiAgICAgICAgZGVzYzogQ2xpZW50QXV0aEVycm9yTWVzc2FnZXNbbmVzdGVkQXBwQXV0aEJyaWRnZURpc2FibGVkXSxcclxuICAgIH0sXHJcbn07XHJcbi8qKlxyXG4gKiBFcnJvciB0aHJvd24gd2hlbiB0aGVyZSBpcyBhbiBlcnJvciBpbiB0aGUgY2xpZW50IGNvZGUgcnVubmluZyBvbiB0aGUgYnJvd3Nlci5cclxuICovXHJcbmNsYXNzIENsaWVudEF1dGhFcnJvciBleHRlbmRzIEF1dGhFcnJvciB7XHJcbiAgICBjb25zdHJ1Y3RvcihlcnJvckNvZGUsIGFkZGl0aW9uYWxNZXNzYWdlKSB7XHJcbiAgICAgICAgc3VwZXIoZXJyb3JDb2RlLCBhZGRpdGlvbmFsTWVzc2FnZVxyXG4gICAgICAgICAgICA/IGAke0NsaWVudEF1dGhFcnJvck1lc3NhZ2VzW2Vycm9yQ29kZV19OiAke2FkZGl0aW9uYWxNZXNzYWdlfWBcclxuICAgICAgICAgICAgOiBDbGllbnRBdXRoRXJyb3JNZXNzYWdlc1tlcnJvckNvZGVdKTtcclxuICAgICAgICB0aGlzLm5hbWUgPSBcIkNsaWVudEF1dGhFcnJvclwiO1xyXG4gICAgICAgIE9iamVjdC5zZXRQcm90b3R5cGVPZih0aGlzLCBDbGllbnRBdXRoRXJyb3IucHJvdG90eXBlKTtcclxuICAgIH1cclxufVxyXG5mdW5jdGlvbiBjcmVhdGVDbGllbnRBdXRoRXJyb3IoZXJyb3JDb2RlLCBhZGRpdGlvbmFsTWVzc2FnZSkge1xyXG4gICAgcmV0dXJuIG5ldyBDbGllbnRBdXRoRXJyb3IoZXJyb3JDb2RlLCBhZGRpdGlvbmFsTWVzc2FnZSk7XHJcbn1cblxuZXhwb3J0IHsgQ2xpZW50QXV0aEVycm9yLCBDbGllbnRBdXRoRXJyb3JNZXNzYWdlLCBDbGllbnRBdXRoRXJyb3JNZXNzYWdlcywgY3JlYXRlQ2xpZW50QXV0aEVycm9yIH07XG4vLyMgc291cmNlTWFwcGluZ1VSTD1DbGllbnRBdXRoRXJyb3IubWpzLm1hcFxuIiwiLyohIEBhenVyZS9tc2FsLWNvbW1vbiB2MTQuMTYuMCAyMDI0LTExLTA1ICovXG4ndXNlIHN0cmljdCc7XG5pbXBvcnQgeyBjcmVhdGVDbGllbnRBdXRoRXJyb3IgfSBmcm9tICcuLi9lcnJvci9DbGllbnRBdXRoRXJyb3IubWpzJztcbmltcG9ydCB7IGhhc2hOb3REZXNlcmlhbGl6ZWQgfSBmcm9tICcuLi9lcnJvci9DbGllbnRBdXRoRXJyb3JDb2Rlcy5tanMnO1xuXG4vKlxyXG4gKiBDb3B5cmlnaHQgKGMpIE1pY3Jvc29mdCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cclxuICogTGljZW5zZWQgdW5kZXIgdGhlIE1JVCBMaWNlbnNlLlxyXG4gKi9cclxuLyoqXHJcbiAqIFBhcnNlcyBoYXNoIHN0cmluZyBmcm9tIGdpdmVuIHN0cmluZy4gUmV0dXJucyBlbXB0eSBzdHJpbmcgaWYgbm8gaGFzaCBzeW1ib2wgaXMgZm91bmQuXHJcbiAqIEBwYXJhbSBoYXNoU3RyaW5nXHJcbiAqL1xyXG5mdW5jdGlvbiBzdHJpcExlYWRpbmdIYXNoT3JRdWVyeShyZXNwb25zZVN0cmluZykge1xyXG4gICAgaWYgKHJlc3BvbnNlU3RyaW5nLnN0YXJ0c1dpdGgoXCIjL1wiKSkge1xyXG4gICAgICAgIHJldHVybiByZXNwb25zZVN0cmluZy5zdWJzdHJpbmcoMik7XHJcbiAgICB9XHJcbiAgICBlbHNlIGlmIChyZXNwb25zZVN0cmluZy5zdGFydHNXaXRoKFwiI1wiKSB8fFxyXG4gICAgICAgIHJlc3BvbnNlU3RyaW5nLnN0YXJ0c1dpdGgoXCI/XCIpKSB7XHJcbiAgICAgICAgcmV0dXJuIHJlc3BvbnNlU3RyaW5nLnN1YnN0cmluZygxKTtcclxuICAgIH1cclxuICAgIHJldHVybiByZXNwb25zZVN0cmluZztcclxufVxyXG4vKipcclxuICogUmV0dXJucyBVUkwgaGFzaCBhcyBzZXJ2ZXIgYXV0aCBjb2RlIHJlc3BvbnNlIG9iamVjdC5cclxuICovXHJcbmZ1bmN0aW9uIGdldERlc2VyaWFsaXplZFJlc3BvbnNlKHJlc3BvbnNlU3RyaW5nKSB7XHJcbiAgICAvLyBDaGVjayBpZiBnaXZlbiBoYXNoIGlzIGVtcHR5XHJcbiAgICBpZiAoIXJlc3BvbnNlU3RyaW5nIHx8IHJlc3BvbnNlU3RyaW5nLmluZGV4T2YoXCI9XCIpIDwgMCkge1xyXG4gICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgfVxyXG4gICAgdHJ5IHtcclxuICAgICAgICAvLyBTdHJpcCB0aGUgIyBvciA/IHN5bWJvbCBpZiBwcmVzZW50XHJcbiAgICAgICAgY29uc3Qgbm9ybWFsaXplZFJlc3BvbnNlID0gc3RyaXBMZWFkaW5nSGFzaE9yUXVlcnkocmVzcG9uc2VTdHJpbmcpO1xyXG4gICAgICAgIC8vIElmICMgc3ltYm9sIHdhcyBub3QgcHJlc2VudCwgYWJvdmUgd2lsbCByZXR1cm4gZW1wdHkgc3RyaW5nLCBzbyBnaXZlIG9yaWdpbmFsIGhhc2ggdmFsdWVcclxuICAgICAgICBjb25zdCBkZXNlcmlhbGl6ZWRIYXNoID0gT2JqZWN0LmZyb21FbnRyaWVzKG5ldyBVUkxTZWFyY2hQYXJhbXMobm9ybWFsaXplZFJlc3BvbnNlKSk7XHJcbiAgICAgICAgLy8gQ2hlY2sgZm9yIGtub3duIHJlc3BvbnNlIHByb3BlcnRpZXNcclxuICAgICAgICBpZiAoZGVzZXJpYWxpemVkSGFzaC5jb2RlIHx8XHJcbiAgICAgICAgICAgIGRlc2VyaWFsaXplZEhhc2guZXJyb3IgfHxcclxuICAgICAgICAgICAgZGVzZXJpYWxpemVkSGFzaC5lcnJvcl9kZXNjcmlwdGlvbiB8fFxyXG4gICAgICAgICAgICBkZXNlcmlhbGl6ZWRIYXNoLnN0YXRlKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBkZXNlcmlhbGl6ZWRIYXNoO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIGNhdGNoIChlKSB7XHJcbiAgICAgICAgdGhyb3cgY3JlYXRlQ2xpZW50QXV0aEVycm9yKGhhc2hOb3REZXNlcmlhbGl6ZWQpO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIG51bGw7XHJcbn1cblxuZXhwb3J0IHsgZ2V0RGVzZXJpYWxpemVkUmVzcG9uc2UsIHN0cmlwTGVhZGluZ0hhc2hPclF1ZXJ5IH07XG4vLyMgc291cmNlTWFwcGluZ1VSTD1VcmxVdGlscy5tanMubWFwXG4iLCIvKiEgQGF6dXJlL21zYWwtY29tbW9uIHYxNC4xNi4wIDIwMjQtMTEtMDUgKi9cbid1c2Ugc3RyaWN0JztcbmltcG9ydCB7IGNyZWF0ZUNsaWVudENvbmZpZ3VyYXRpb25FcnJvciB9IGZyb20gJy4uL2Vycm9yL0NsaWVudENvbmZpZ3VyYXRpb25FcnJvci5tanMnO1xuaW1wb3J0IHsgU3RyaW5nVXRpbHMgfSBmcm9tICcuLi91dGlscy9TdHJpbmdVdGlscy5tanMnO1xuaW1wb3J0IHsgQUFEQXV0aG9yaXR5Q29uc3RhbnRzLCBDb25zdGFudHMgfSBmcm9tICcuLi91dGlscy9Db25zdGFudHMubWpzJztcbmltcG9ydCB7IGdldERlc2VyaWFsaXplZFJlc3BvbnNlIH0gZnJvbSAnLi4vdXRpbHMvVXJsVXRpbHMubWpzJztcbmltcG9ydCB7IHVybEVtcHR5RXJyb3IsIHVybFBhcnNlRXJyb3IsIGF1dGhvcml0eVVyaUluc2VjdXJlIH0gZnJvbSAnLi4vZXJyb3IvQ2xpZW50Q29uZmlndXJhdGlvbkVycm9yQ29kZXMubWpzJztcblxuLypcclxuICogQ29weXJpZ2h0IChjKSBNaWNyb3NvZnQgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuXHJcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgTGljZW5zZS5cclxuICovXHJcbi8qKlxyXG4gKiBVcmwgb2JqZWN0IGNsYXNzIHdoaWNoIGNhbiBwZXJmb3JtIHZhcmlvdXMgdHJhbnNmb3JtYXRpb25zIG9uIHVybCBzdHJpbmdzLlxyXG4gKi9cclxuY2xhc3MgVXJsU3RyaW5nIHtcclxuICAgIGdldCB1cmxTdHJpbmcoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX3VybFN0cmluZztcclxuICAgIH1cclxuICAgIGNvbnN0cnVjdG9yKHVybCkge1xyXG4gICAgICAgIHRoaXMuX3VybFN0cmluZyA9IHVybDtcclxuICAgICAgICBpZiAoIXRoaXMuX3VybFN0cmluZykge1xyXG4gICAgICAgICAgICAvLyBUaHJvd3MgZXJyb3IgaWYgdXJsIGlzIGVtcHR5XHJcbiAgICAgICAgICAgIHRocm93IGNyZWF0ZUNsaWVudENvbmZpZ3VyYXRpb25FcnJvcih1cmxFbXB0eUVycm9yKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKCF1cmwuaW5jbHVkZXMoXCIjXCIpKSB7XHJcbiAgICAgICAgICAgIHRoaXMuX3VybFN0cmluZyA9IFVybFN0cmluZy5jYW5vbmljYWxpemVVcmkodXJsKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICAvKipcclxuICAgICAqIEVuc3VyZSB1cmxzIGFyZSBsb3dlciBjYXNlIGFuZCBlbmQgd2l0aCBhIC8gY2hhcmFjdGVyLlxyXG4gICAgICogQHBhcmFtIHVybFxyXG4gICAgICovXHJcbiAgICBzdGF0aWMgY2Fub25pY2FsaXplVXJpKHVybCkge1xyXG4gICAgICAgIGlmICh1cmwpIHtcclxuICAgICAgICAgICAgbGV0IGxvd2VyQ2FzZVVybCA9IHVybC50b0xvd2VyQ2FzZSgpO1xyXG4gICAgICAgICAgICBpZiAoU3RyaW5nVXRpbHMuZW5kc1dpdGgobG93ZXJDYXNlVXJsLCBcIj9cIikpIHtcclxuICAgICAgICAgICAgICAgIGxvd2VyQ2FzZVVybCA9IGxvd2VyQ2FzZVVybC5zbGljZSgwLCAtMSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSBpZiAoU3RyaW5nVXRpbHMuZW5kc1dpdGgobG93ZXJDYXNlVXJsLCBcIj8vXCIpKSB7XHJcbiAgICAgICAgICAgICAgICBsb3dlckNhc2VVcmwgPSBsb3dlckNhc2VVcmwuc2xpY2UoMCwgLTIpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmICghU3RyaW5nVXRpbHMuZW5kc1dpdGgobG93ZXJDYXNlVXJsLCBcIi9cIikpIHtcclxuICAgICAgICAgICAgICAgIGxvd2VyQ2FzZVVybCArPSBcIi9cIjtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICByZXR1cm4gbG93ZXJDYXNlVXJsO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gdXJsO1xyXG4gICAgfVxyXG4gICAgLyoqXHJcbiAgICAgKiBUaHJvd3MgaWYgdXJsU3RyaW5nIHBhc3NlZCBpcyBub3QgYSB2YWxpZCBhdXRob3JpdHkgVVJJIHN0cmluZy5cclxuICAgICAqL1xyXG4gICAgdmFsaWRhdGVBc1VyaSgpIHtcclxuICAgICAgICAvLyBBdHRlbXB0cyB0byBwYXJzZSB1cmwgZm9yIHVyaSBjb21wb25lbnRzXHJcbiAgICAgICAgbGV0IGNvbXBvbmVudHM7XHJcbiAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgY29tcG9uZW50cyA9IHRoaXMuZ2V0VXJsQ29tcG9uZW50cygpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjYXRjaCAoZSkge1xyXG4gICAgICAgICAgICB0aHJvdyBjcmVhdGVDbGllbnRDb25maWd1cmF0aW9uRXJyb3IodXJsUGFyc2VFcnJvcik7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIC8vIFRocm93IGVycm9yIGlmIFVSSSBvciBwYXRoIHNlZ21lbnRzIGFyZSBub3QgcGFyc2VhYmxlLlxyXG4gICAgICAgIGlmICghY29tcG9uZW50cy5Ib3N0TmFtZUFuZFBvcnQgfHwgIWNvbXBvbmVudHMuUGF0aFNlZ21lbnRzKSB7XHJcbiAgICAgICAgICAgIHRocm93IGNyZWF0ZUNsaWVudENvbmZpZ3VyYXRpb25FcnJvcih1cmxQYXJzZUVycm9yKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgLy8gVGhyb3cgZXJyb3IgaWYgdXJpIGlzIGluc2VjdXJlLlxyXG4gICAgICAgIGlmICghY29tcG9uZW50cy5Qcm90b2NvbCB8fFxyXG4gICAgICAgICAgICBjb21wb25lbnRzLlByb3RvY29sLnRvTG93ZXJDYXNlKCkgIT09IFwiaHR0cHM6XCIpIHtcclxuICAgICAgICAgICAgdGhyb3cgY3JlYXRlQ2xpZW50Q29uZmlndXJhdGlvbkVycm9yKGF1dGhvcml0eVVyaUluc2VjdXJlKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICAvKipcclxuICAgICAqIEdpdmVuIGEgdXJsIGFuZCBhIHF1ZXJ5IHN0cmluZyByZXR1cm4gdGhlIHVybCB3aXRoIHByb3ZpZGVkIHF1ZXJ5IHN0cmluZyBhcHBlbmRlZFxyXG4gICAgICogQHBhcmFtIHVybFxyXG4gICAgICogQHBhcmFtIHF1ZXJ5U3RyaW5nXHJcbiAgICAgKi9cclxuICAgIHN0YXRpYyBhcHBlbmRRdWVyeVN0cmluZyh1cmwsIHF1ZXJ5U3RyaW5nKSB7XHJcbiAgICAgICAgaWYgKCFxdWVyeVN0cmluZykge1xyXG4gICAgICAgICAgICByZXR1cm4gdXJsO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gdXJsLmluZGV4T2YoXCI/XCIpIDwgMFxyXG4gICAgICAgICAgICA/IGAke3VybH0/JHtxdWVyeVN0cmluZ31gXHJcbiAgICAgICAgICAgIDogYCR7dXJsfSYke3F1ZXJ5U3RyaW5nfWA7XHJcbiAgICB9XHJcbiAgICAvKipcclxuICAgICAqIFJldHVybnMgYSB1cmwgd2l0aCB0aGUgaGFzaCByZW1vdmVkXHJcbiAgICAgKiBAcGFyYW0gdXJsXHJcbiAgICAgKi9cclxuICAgIHN0YXRpYyByZW1vdmVIYXNoRnJvbVVybCh1cmwpIHtcclxuICAgICAgICByZXR1cm4gVXJsU3RyaW5nLmNhbm9uaWNhbGl6ZVVyaSh1cmwuc3BsaXQoXCIjXCIpWzBdKTtcclxuICAgIH1cclxuICAgIC8qKlxyXG4gICAgICogR2l2ZW4gYSB1cmwgbGlrZSBodHRwczovL2E6Yi9jb21tb24vZD9lPWYjZywgYW5kIGEgdGVuYW50SWQsIHJldHVybnMgaHR0cHM6Ly9hOmIvdGVuYW50SWQvZFxyXG4gICAgICogQHBhcmFtIGhyZWYgVGhlIHVybFxyXG4gICAgICogQHBhcmFtIHRlbmFudElkIFRoZSB0ZW5hbnQgaWQgdG8gcmVwbGFjZVxyXG4gICAgICovXHJcbiAgICByZXBsYWNlVGVuYW50UGF0aCh0ZW5hbnRJZCkge1xyXG4gICAgICAgIGNvbnN0IHVybE9iamVjdCA9IHRoaXMuZ2V0VXJsQ29tcG9uZW50cygpO1xyXG4gICAgICAgIGNvbnN0IHBhdGhBcnJheSA9IHVybE9iamVjdC5QYXRoU2VnbWVudHM7XHJcbiAgICAgICAgaWYgKHRlbmFudElkICYmXHJcbiAgICAgICAgICAgIHBhdGhBcnJheS5sZW5ndGggIT09IDAgJiZcclxuICAgICAgICAgICAgKHBhdGhBcnJheVswXSA9PT0gQUFEQXV0aG9yaXR5Q29uc3RhbnRzLkNPTU1PTiB8fFxyXG4gICAgICAgICAgICAgICAgcGF0aEFycmF5WzBdID09PSBBQURBdXRob3JpdHlDb25zdGFudHMuT1JHQU5JWkFUSU9OUykpIHtcclxuICAgICAgICAgICAgcGF0aEFycmF5WzBdID0gdGVuYW50SWQ7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBVcmxTdHJpbmcuY29uc3RydWN0QXV0aG9yaXR5VXJpRnJvbU9iamVjdCh1cmxPYmplY3QpO1xyXG4gICAgfVxyXG4gICAgLyoqXHJcbiAgICAgKiBQYXJzZXMgb3V0IHRoZSBjb21wb25lbnRzIGZyb20gYSB1cmwgc3RyaW5nLlxyXG4gICAgICogQHJldHVybnMgQW4gb2JqZWN0IHdpdGggdGhlIHZhcmlvdXMgY29tcG9uZW50cy4gUGxlYXNlIGNhY2hlIHRoaXMgdmFsdWUgaW5zdGVkIG9mIGNhbGxpbmcgdGhpcyBtdWx0aXBsZSB0aW1lcyBvbiB0aGUgc2FtZSB1cmwuXHJcbiAgICAgKi9cclxuICAgIGdldFVybENvbXBvbmVudHMoKSB7XHJcbiAgICAgICAgLy8gaHR0cHM6Ly9naXN0LmdpdGh1Yi5jb20vY3VydGlzei8xMTEzOWIyY2ZjYWVmNGEyNjFlMFxyXG4gICAgICAgIGNvbnN0IHJlZ0V4ID0gUmVnRXhwKFwiXigoW146Lz8jXSspOik/KC8vKFteLz8jXSopKT8oW14/I10qKShcXFxcPyhbXiNdKikpPygjKC4qKSk/XCIpO1xyXG4gICAgICAgIC8vIElmIHVybCBzdHJpbmcgZG9lcyBub3QgbWF0Y2ggcmVnRXgsIHdlIHRocm93IGFuIGVycm9yXHJcbiAgICAgICAgY29uc3QgbWF0Y2ggPSB0aGlzLnVybFN0cmluZy5tYXRjaChyZWdFeCk7XHJcbiAgICAgICAgaWYgKCFtYXRjaCkge1xyXG4gICAgICAgICAgICB0aHJvdyBjcmVhdGVDbGllbnRDb25maWd1cmF0aW9uRXJyb3IodXJsUGFyc2VFcnJvcik7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIC8vIFVybCBjb21wb25lbnQgb2JqZWN0XHJcbiAgICAgICAgY29uc3QgdXJsQ29tcG9uZW50cyA9IHtcclxuICAgICAgICAgICAgUHJvdG9jb2w6IG1hdGNoWzFdLFxyXG4gICAgICAgICAgICBIb3N0TmFtZUFuZFBvcnQ6IG1hdGNoWzRdLFxyXG4gICAgICAgICAgICBBYnNvbHV0ZVBhdGg6IG1hdGNoWzVdLFxyXG4gICAgICAgICAgICBRdWVyeVN0cmluZzogbWF0Y2hbN10sXHJcbiAgICAgICAgfTtcclxuICAgICAgICBsZXQgcGF0aFNlZ21lbnRzID0gdXJsQ29tcG9uZW50cy5BYnNvbHV0ZVBhdGguc3BsaXQoXCIvXCIpO1xyXG4gICAgICAgIHBhdGhTZWdtZW50cyA9IHBhdGhTZWdtZW50cy5maWx0ZXIoKHZhbCkgPT4gdmFsICYmIHZhbC5sZW5ndGggPiAwKTsgLy8gcmVtb3ZlIGVtcHR5IGVsZW1lbnRzXHJcbiAgICAgICAgdXJsQ29tcG9uZW50cy5QYXRoU2VnbWVudHMgPSBwYXRoU2VnbWVudHM7XHJcbiAgICAgICAgaWYgKHVybENvbXBvbmVudHMuUXVlcnlTdHJpbmcgJiZcclxuICAgICAgICAgICAgdXJsQ29tcG9uZW50cy5RdWVyeVN0cmluZy5lbmRzV2l0aChcIi9cIikpIHtcclxuICAgICAgICAgICAgdXJsQ29tcG9uZW50cy5RdWVyeVN0cmluZyA9IHVybENvbXBvbmVudHMuUXVlcnlTdHJpbmcuc3Vic3RyaW5nKDAsIHVybENvbXBvbmVudHMuUXVlcnlTdHJpbmcubGVuZ3RoIC0gMSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiB1cmxDb21wb25lbnRzO1xyXG4gICAgfVxyXG4gICAgc3RhdGljIGdldERvbWFpbkZyb21VcmwodXJsKSB7XHJcbiAgICAgICAgY29uc3QgcmVnRXggPSBSZWdFeHAoXCJeKFteOi8/I10rOi8vKT8oW14vPyNdKilcIik7XHJcbiAgICAgICAgY29uc3QgbWF0Y2ggPSB1cmwubWF0Y2gocmVnRXgpO1xyXG4gICAgICAgIGlmICghbWF0Y2gpIHtcclxuICAgICAgICAgICAgdGhyb3cgY3JlYXRlQ2xpZW50Q29uZmlndXJhdGlvbkVycm9yKHVybFBhcnNlRXJyb3IpO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gbWF0Y2hbMl07XHJcbiAgICB9XHJcbiAgICBzdGF0aWMgZ2V0QWJzb2x1dGVVcmwocmVsYXRpdmVVcmwsIGJhc2VVcmwpIHtcclxuICAgICAgICBpZiAocmVsYXRpdmVVcmxbMF0gPT09IENvbnN0YW50cy5GT1JXQVJEX1NMQVNIKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHVybCA9IG5ldyBVcmxTdHJpbmcoYmFzZVVybCk7XHJcbiAgICAgICAgICAgIGNvbnN0IGJhc2VDb21wb25lbnRzID0gdXJsLmdldFVybENvbXBvbmVudHMoKTtcclxuICAgICAgICAgICAgcmV0dXJuIChiYXNlQ29tcG9uZW50cy5Qcm90b2NvbCArXHJcbiAgICAgICAgICAgICAgICBcIi8vXCIgK1xyXG4gICAgICAgICAgICAgICAgYmFzZUNvbXBvbmVudHMuSG9zdE5hbWVBbmRQb3J0ICtcclxuICAgICAgICAgICAgICAgIHJlbGF0aXZlVXJsKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHJlbGF0aXZlVXJsO1xyXG4gICAgfVxyXG4gICAgc3RhdGljIGNvbnN0cnVjdEF1dGhvcml0eVVyaUZyb21PYmplY3QodXJsT2JqZWN0KSB7XHJcbiAgICAgICAgcmV0dXJuIG5ldyBVcmxTdHJpbmcodXJsT2JqZWN0LlByb3RvY29sICtcclxuICAgICAgICAgICAgXCIvL1wiICtcclxuICAgICAgICAgICAgdXJsT2JqZWN0Lkhvc3ROYW1lQW5kUG9ydCArXHJcbiAgICAgICAgICAgIFwiL1wiICtcclxuICAgICAgICAgICAgdXJsT2JqZWN0LlBhdGhTZWdtZW50cy5qb2luKFwiL1wiKSk7XHJcbiAgICB9XHJcbiAgICAvKipcclxuICAgICAqIENoZWNrIGlmIHRoZSBoYXNoIG9mIHRoZSBVUkwgc3RyaW5nIGNvbnRhaW5zIGtub3duIHByb3BlcnRpZXNcclxuICAgICAqIEBkZXByZWNhdGVkIFRoaXMgQVBJIHdpbGwgYmUgcmVtb3ZlZCBpbiBhIGZ1dHVyZSB2ZXJzaW9uXHJcbiAgICAgKi9cclxuICAgIHN0YXRpYyBoYXNoQ29udGFpbnNLbm93blByb3BlcnRpZXMocmVzcG9uc2UpIHtcclxuICAgICAgICByZXR1cm4gISFnZXREZXNlcmlhbGl6ZWRSZXNwb25zZShyZXNwb25zZSk7XHJcbiAgICB9XHJcbn1cblxuZXhwb3J0IHsgVXJsU3RyaW5nIH07XG4vLyMgc291cmNlTWFwcGluZ1VSTD1VcmxTdHJpbmcubWpzLm1hcFxuIiwiLyohIEBhenVyZS9tc2FsLWNvbW1vbiB2MTQuMTYuMCAyMDI0LTExLTA1ICovXG4ndXNlIHN0cmljdCc7XG4vKlxyXG4gKiBDb3B5cmlnaHQgKGMpIE1pY3Jvc29mdCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cclxuICogTGljZW5zZWQgdW5kZXIgdGhlIE1JVCBMaWNlbnNlLlxyXG4gKi9cclxuLyoqXHJcbiAqIFdyYXBzIGEgZnVuY3Rpb24gd2l0aCBhIHBlcmZvcm1hbmNlIG1lYXN1cmVtZW50LlxyXG4gKiBVc2FnZTogaW52b2tlKGZ1bmN0aW9uVG9DYWxsLCBwZXJmb3JtYW5jZUNsaWVudCwgXCJFdmVudE5hbWVcIiwgXCJjb3JyZWxhdGlvbklkXCIpKC4uLmFyZ3NUb1Bhc3NUb0Z1bmN0aW9uKVxyXG4gKiBAcGFyYW0gY2FsbGJhY2tcclxuICogQHBhcmFtIGV2ZW50TmFtZVxyXG4gKiBAcGFyYW0gbG9nZ2VyXHJcbiAqIEBwYXJhbSB0ZWxlbWV0cnlDbGllbnRcclxuICogQHBhcmFtIGNvcnJlbGF0aW9uSWRcclxuICogQHJldHVybnNcclxuICogQGludGVybmFsXHJcbiAqL1xyXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueVxyXG5jb25zdCBpbnZva2UgPSAoY2FsbGJhY2ssIGV2ZW50TmFtZSwgbG9nZ2VyLCB0ZWxlbWV0cnlDbGllbnQsIGNvcnJlbGF0aW9uSWQpID0+IHtcclxuICAgIHJldHVybiAoLi4uYXJncykgPT4ge1xyXG4gICAgICAgIGxvZ2dlci50cmFjZShgRXhlY3V0aW5nIGZ1bmN0aW9uICR7ZXZlbnROYW1lfWApO1xyXG4gICAgICAgIGNvbnN0IGluUHJvZ3Jlc3NFdmVudCA9IHRlbGVtZXRyeUNsaWVudD8uc3RhcnRNZWFzdXJlbWVudChldmVudE5hbWUsIGNvcnJlbGF0aW9uSWQpO1xyXG4gICAgICAgIGlmIChjb3JyZWxhdGlvbklkKSB7XHJcbiAgICAgICAgICAgIC8vIFRyYWNrIG51bWJlciBvZiB0aW1lcyB0aGlzIEFQSSBpcyBjYWxsZWQgaW4gYSBzaW5nbGUgcmVxdWVzdFxyXG4gICAgICAgICAgICBjb25zdCBldmVudENvdW50ID0gZXZlbnROYW1lICsgXCJDYWxsQ291bnRcIjtcclxuICAgICAgICAgICAgdGVsZW1ldHJ5Q2xpZW50Py5pbmNyZW1lbnRGaWVsZHMoeyBbZXZlbnRDb3VudF06IDEgfSwgY29ycmVsYXRpb25JZCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IGNhbGxiYWNrKC4uLmFyZ3MpO1xyXG4gICAgICAgICAgICBpblByb2dyZXNzRXZlbnQ/LmVuZCh7XHJcbiAgICAgICAgICAgICAgICBzdWNjZXNzOiB0cnVlLFxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgbG9nZ2VyLnRyYWNlKGBSZXR1cm5pbmcgcmVzdWx0IGZyb20gJHtldmVudE5hbWV9YCk7XHJcbiAgICAgICAgICAgIHJldHVybiByZXN1bHQ7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNhdGNoIChlKSB7XHJcbiAgICAgICAgICAgIGxvZ2dlci50cmFjZShgRXJyb3Igb2NjdXJyZWQgaW4gJHtldmVudE5hbWV9YCk7XHJcbiAgICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgICAgICBsb2dnZXIudHJhY2UoSlNPTi5zdHJpbmdpZnkoZSkpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGNhdGNoIChlKSB7XHJcbiAgICAgICAgICAgICAgICBsb2dnZXIudHJhY2UoXCJVbmFibGUgdG8gcHJpbnQgZXJyb3IgbWVzc2FnZS5cIik7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaW5Qcm9ncmVzc0V2ZW50Py5lbmQoe1xyXG4gICAgICAgICAgICAgICAgc3VjY2VzczogZmFsc2UsXHJcbiAgICAgICAgICAgIH0sIGUpO1xyXG4gICAgICAgICAgICB0aHJvdyBlO1xyXG4gICAgICAgIH1cclxuICAgIH07XHJcbn07XHJcbi8qKlxyXG4gKiBXcmFwcyBhbiBhc3luYyBmdW5jdGlvbiB3aXRoIGEgcGVyZm9ybWFuY2UgbWVhc3VyZW1lbnQuXHJcbiAqIFVzYWdlOiBpbnZva2VBc3luYyhmdW5jdGlvblRvQ2FsbCwgcGVyZm9ybWFuY2VDbGllbnQsIFwiRXZlbnROYW1lXCIsIFwiY29ycmVsYXRpb25JZFwiKSguLi5hcmdzVG9QYXNzVG9GdW5jdGlvbilcclxuICogQHBhcmFtIGNhbGxiYWNrXHJcbiAqIEBwYXJhbSBldmVudE5hbWVcclxuICogQHBhcmFtIGxvZ2dlclxyXG4gKiBAcGFyYW0gdGVsZW1ldHJ5Q2xpZW50XHJcbiAqIEBwYXJhbSBjb3JyZWxhdGlvbklkXHJcbiAqIEByZXR1cm5zXHJcbiAqIEBpbnRlcm5hbFxyXG4gKlxyXG4gKi9cclxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcclxuY29uc3QgaW52b2tlQXN5bmMgPSAoY2FsbGJhY2ssIGV2ZW50TmFtZSwgbG9nZ2VyLCB0ZWxlbWV0cnlDbGllbnQsIGNvcnJlbGF0aW9uSWQpID0+IHtcclxuICAgIHJldHVybiAoLi4uYXJncykgPT4ge1xyXG4gICAgICAgIGxvZ2dlci50cmFjZShgRXhlY3V0aW5nIGZ1bmN0aW9uICR7ZXZlbnROYW1lfWApO1xyXG4gICAgICAgIGNvbnN0IGluUHJvZ3Jlc3NFdmVudCA9IHRlbGVtZXRyeUNsaWVudD8uc3RhcnRNZWFzdXJlbWVudChldmVudE5hbWUsIGNvcnJlbGF0aW9uSWQpO1xyXG4gICAgICAgIGlmIChjb3JyZWxhdGlvbklkKSB7XHJcbiAgICAgICAgICAgIC8vIFRyYWNrIG51bWJlciBvZiB0aW1lcyB0aGlzIEFQSSBpcyBjYWxsZWQgaW4gYSBzaW5nbGUgcmVxdWVzdFxyXG4gICAgICAgICAgICBjb25zdCBldmVudENvdW50ID0gZXZlbnROYW1lICsgXCJDYWxsQ291bnRcIjtcclxuICAgICAgICAgICAgdGVsZW1ldHJ5Q2xpZW50Py5pbmNyZW1lbnRGaWVsZHMoeyBbZXZlbnRDb3VudF06IDEgfSwgY29ycmVsYXRpb25JZCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRlbGVtZXRyeUNsaWVudD8uc2V0UHJlUXVldWVUaW1lKGV2ZW50TmFtZSwgY29ycmVsYXRpb25JZCk7XHJcbiAgICAgICAgcmV0dXJuIGNhbGxiYWNrKC4uLmFyZ3MpXHJcbiAgICAgICAgICAgIC50aGVuKChyZXNwb25zZSkgPT4ge1xyXG4gICAgICAgICAgICBsb2dnZXIudHJhY2UoYFJldHVybmluZyByZXN1bHQgZnJvbSAke2V2ZW50TmFtZX1gKTtcclxuICAgICAgICAgICAgaW5Qcm9ncmVzc0V2ZW50Py5lbmQoe1xyXG4gICAgICAgICAgICAgICAgc3VjY2VzczogdHJ1ZSxcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIHJldHVybiByZXNwb25zZTtcclxuICAgICAgICB9KVxyXG4gICAgICAgICAgICAuY2F0Y2goKGUpID0+IHtcclxuICAgICAgICAgICAgbG9nZ2VyLnRyYWNlKGBFcnJvciBvY2N1cnJlZCBpbiAke2V2ZW50TmFtZX1gKTtcclxuICAgICAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgICAgIGxvZ2dlci50cmFjZShKU09OLnN0cmluZ2lmeShlKSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgY2F0Y2ggKGUpIHtcclxuICAgICAgICAgICAgICAgIGxvZ2dlci50cmFjZShcIlVuYWJsZSB0byBwcmludCBlcnJvciBtZXNzYWdlLlwiKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpblByb2dyZXNzRXZlbnQ/LmVuZCh7XHJcbiAgICAgICAgICAgICAgICBzdWNjZXNzOiBmYWxzZSxcclxuICAgICAgICAgICAgfSwgZSk7XHJcbiAgICAgICAgICAgIHRocm93IGU7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9O1xyXG59O1xuXG5leHBvcnQgeyBpbnZva2UsIGludm9rZUFzeW5jIH07XG4vLyMgc291cmNlTWFwcGluZ1VSTD1GdW5jdGlvbldyYXBwZXJzLm1qcy5tYXBcbiIsIi8qISBAYXp1cmUvbXNhbC1icm93c2VyIHYzLjI4LjEgMjAyNS0wMS0xNCAqL1xuJ3VzZSBzdHJpY3QnO1xuLypcclxuICogQ29weXJpZ2h0IChjKSBNaWNyb3NvZnQgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuXHJcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgTGljZW5zZS5cclxuICovXHJcbmNvbnN0IHBrY2VOb3RDcmVhdGVkID0gXCJwa2NlX25vdF9jcmVhdGVkXCI7XHJcbmNvbnN0IGNyeXB0b05vbkV4aXN0ZW50ID0gXCJjcnlwdG9fbm9uZXhpc3RlbnRcIjtcclxuY29uc3QgZW1wdHlOYXZpZ2F0ZVVyaSA9IFwiZW1wdHlfbmF2aWdhdGVfdXJpXCI7XHJcbmNvbnN0IGhhc2hFbXB0eUVycm9yID0gXCJoYXNoX2VtcHR5X2Vycm9yXCI7XHJcbmNvbnN0IG5vU3RhdGVJbkhhc2ggPSBcIm5vX3N0YXRlX2luX2hhc2hcIjtcclxuY29uc3QgaGFzaERvZXNOb3RDb250YWluS25vd25Qcm9wZXJ0aWVzID0gXCJoYXNoX2RvZXNfbm90X2NvbnRhaW5fa25vd25fcHJvcGVydGllc1wiO1xyXG5jb25zdCB1bmFibGVUb1BhcnNlU3RhdGUgPSBcInVuYWJsZV90b19wYXJzZV9zdGF0ZVwiO1xyXG5jb25zdCBzdGF0ZUludGVyYWN0aW9uVHlwZU1pc21hdGNoID0gXCJzdGF0ZV9pbnRlcmFjdGlvbl90eXBlX21pc21hdGNoXCI7XHJcbmNvbnN0IGludGVyYWN0aW9uSW5Qcm9ncmVzcyA9IFwiaW50ZXJhY3Rpb25faW5fcHJvZ3Jlc3NcIjtcclxuY29uc3QgcG9wdXBXaW5kb3dFcnJvciA9IFwicG9wdXBfd2luZG93X2Vycm9yXCI7XHJcbmNvbnN0IGVtcHR5V2luZG93RXJyb3IgPSBcImVtcHR5X3dpbmRvd19lcnJvclwiO1xyXG5jb25zdCB1c2VyQ2FuY2VsbGVkID0gXCJ1c2VyX2NhbmNlbGxlZFwiO1xyXG5jb25zdCBtb25pdG9yUG9wdXBUaW1lb3V0ID0gXCJtb25pdG9yX3BvcHVwX3RpbWVvdXRcIjtcclxuY29uc3QgbW9uaXRvcldpbmRvd1RpbWVvdXQgPSBcIm1vbml0b3Jfd2luZG93X3RpbWVvdXRcIjtcclxuY29uc3QgcmVkaXJlY3RJbklmcmFtZSA9IFwicmVkaXJlY3RfaW5faWZyYW1lXCI7XHJcbmNvbnN0IGJsb2NrSWZyYW1lUmVsb2FkID0gXCJibG9ja19pZnJhbWVfcmVsb2FkXCI7XHJcbmNvbnN0IGJsb2NrTmVzdGVkUG9wdXBzID0gXCJibG9ja19uZXN0ZWRfcG9wdXBzXCI7XHJcbmNvbnN0IGlmcmFtZUNsb3NlZFByZW1hdHVyZWx5ID0gXCJpZnJhbWVfY2xvc2VkX3ByZW1hdHVyZWx5XCI7XHJcbmNvbnN0IHNpbGVudExvZ291dFVuc3VwcG9ydGVkID0gXCJzaWxlbnRfbG9nb3V0X3Vuc3VwcG9ydGVkXCI7XHJcbmNvbnN0IG5vQWNjb3VudEVycm9yID0gXCJub19hY2NvdW50X2Vycm9yXCI7XHJcbmNvbnN0IHNpbGVudFByb21wdFZhbHVlRXJyb3IgPSBcInNpbGVudF9wcm9tcHRfdmFsdWVfZXJyb3JcIjtcclxuY29uc3Qgbm9Ub2tlblJlcXVlc3RDYWNoZUVycm9yID0gXCJub190b2tlbl9yZXF1ZXN0X2NhY2hlX2Vycm9yXCI7XHJcbmNvbnN0IHVuYWJsZVRvUGFyc2VUb2tlblJlcXVlc3RDYWNoZUVycm9yID0gXCJ1bmFibGVfdG9fcGFyc2VfdG9rZW5fcmVxdWVzdF9jYWNoZV9lcnJvclwiO1xyXG5jb25zdCBub0NhY2hlZEF1dGhvcml0eUVycm9yID0gXCJub19jYWNoZWRfYXV0aG9yaXR5X2Vycm9yXCI7XHJcbmNvbnN0IGF1dGhSZXF1ZXN0Tm90U2V0RXJyb3IgPSBcImF1dGhfcmVxdWVzdF9ub3Rfc2V0X2Vycm9yXCI7XHJcbmNvbnN0IGludmFsaWRDYWNoZVR5cGUgPSBcImludmFsaWRfY2FjaGVfdHlwZVwiO1xyXG5jb25zdCBub25Ccm93c2VyRW52aXJvbm1lbnQgPSBcIm5vbl9icm93c2VyX2Vudmlyb25tZW50XCI7XHJcbmNvbnN0IGRhdGFiYXNlTm90T3BlbiA9IFwiZGF0YWJhc2Vfbm90X29wZW5cIjtcclxuY29uc3Qgbm9OZXR3b3JrQ29ubmVjdGl2aXR5ID0gXCJub19uZXR3b3JrX2Nvbm5lY3Rpdml0eVwiO1xyXG5jb25zdCBwb3N0UmVxdWVzdEZhaWxlZCA9IFwicG9zdF9yZXF1ZXN0X2ZhaWxlZFwiO1xyXG5jb25zdCBnZXRSZXF1ZXN0RmFpbGVkID0gXCJnZXRfcmVxdWVzdF9mYWlsZWRcIjtcclxuY29uc3QgZmFpbGVkVG9QYXJzZVJlc3BvbnNlID0gXCJmYWlsZWRfdG9fcGFyc2VfcmVzcG9uc2VcIjtcclxuY29uc3QgdW5hYmxlVG9Mb2FkVG9rZW4gPSBcInVuYWJsZV90b19sb2FkX3Rva2VuXCI7XHJcbmNvbnN0IGNyeXB0b0tleU5vdEZvdW5kID0gXCJjcnlwdG9fa2V5X25vdF9mb3VuZFwiO1xyXG5jb25zdCBhdXRoQ29kZVJlcXVpcmVkID0gXCJhdXRoX2NvZGVfcmVxdWlyZWRcIjtcclxuY29uc3QgYXV0aENvZGVPck5hdGl2ZUFjY291bnRJZFJlcXVpcmVkID0gXCJhdXRoX2NvZGVfb3JfbmF0aXZlQWNjb3VudElkX3JlcXVpcmVkXCI7XHJcbmNvbnN0IHNwYUNvZGVBbmROYXRpdmVBY2NvdW50SWRQcmVzZW50ID0gXCJzcGFfY29kZV9hbmRfbmF0aXZlQWNjb3VudElkX3ByZXNlbnRcIjtcclxuY29uc3QgZGF0YWJhc2VVbmF2YWlsYWJsZSA9IFwiZGF0YWJhc2VfdW5hdmFpbGFibGVcIjtcclxuY29uc3QgdW5hYmxlVG9BY3F1aXJlVG9rZW5Gcm9tTmF0aXZlUGxhdGZvcm0gPSBcInVuYWJsZV90b19hY3F1aXJlX3Rva2VuX2Zyb21fbmF0aXZlX3BsYXRmb3JtXCI7XHJcbmNvbnN0IG5hdGl2ZUhhbmRzaGFrZVRpbWVvdXQgPSBcIm5hdGl2ZV9oYW5kc2hha2VfdGltZW91dFwiO1xyXG5jb25zdCBuYXRpdmVFeHRlbnNpb25Ob3RJbnN0YWxsZWQgPSBcIm5hdGl2ZV9leHRlbnNpb25fbm90X2luc3RhbGxlZFwiO1xyXG5jb25zdCBuYXRpdmVDb25uZWN0aW9uTm90RXN0YWJsaXNoZWQgPSBcIm5hdGl2ZV9jb25uZWN0aW9uX25vdF9lc3RhYmxpc2hlZFwiO1xyXG5jb25zdCB1bmluaXRpYWxpemVkUHVibGljQ2xpZW50QXBwbGljYXRpb24gPSBcInVuaW5pdGlhbGl6ZWRfcHVibGljX2NsaWVudF9hcHBsaWNhdGlvblwiO1xyXG5jb25zdCBuYXRpdmVQcm9tcHROb3RTdXBwb3J0ZWQgPSBcIm5hdGl2ZV9wcm9tcHRfbm90X3N1cHBvcnRlZFwiO1xyXG5jb25zdCBpbnZhbGlkQmFzZTY0U3RyaW5nID0gXCJpbnZhbGlkX2Jhc2U2NF9zdHJpbmdcIjtcclxuY29uc3QgaW52YWxpZFBvcFRva2VuUmVxdWVzdCA9IFwiaW52YWxpZF9wb3BfdG9rZW5fcmVxdWVzdFwiO1xyXG5jb25zdCBmYWlsZWRUb0J1aWxkSGVhZGVycyA9IFwiZmFpbGVkX3RvX2J1aWxkX2hlYWRlcnNcIjtcclxuY29uc3QgZmFpbGVkVG9QYXJzZUhlYWRlcnMgPSBcImZhaWxlZF90b19wYXJzZV9oZWFkZXJzXCI7XG5cbmV4cG9ydCB7IGF1dGhDb2RlT3JOYXRpdmVBY2NvdW50SWRSZXF1aXJlZCwgYXV0aENvZGVSZXF1aXJlZCwgYXV0aFJlcXVlc3ROb3RTZXRFcnJvciwgYmxvY2tJZnJhbWVSZWxvYWQsIGJsb2NrTmVzdGVkUG9wdXBzLCBjcnlwdG9LZXlOb3RGb3VuZCwgY3J5cHRvTm9uRXhpc3RlbnQsIGRhdGFiYXNlTm90T3BlbiwgZGF0YWJhc2VVbmF2YWlsYWJsZSwgZW1wdHlOYXZpZ2F0ZVVyaSwgZW1wdHlXaW5kb3dFcnJvciwgZmFpbGVkVG9CdWlsZEhlYWRlcnMsIGZhaWxlZFRvUGFyc2VIZWFkZXJzLCBmYWlsZWRUb1BhcnNlUmVzcG9uc2UsIGdldFJlcXVlc3RGYWlsZWQsIGhhc2hEb2VzTm90Q29udGFpbktub3duUHJvcGVydGllcywgaGFzaEVtcHR5RXJyb3IsIGlmcmFtZUNsb3NlZFByZW1hdHVyZWx5LCBpbnRlcmFjdGlvbkluUHJvZ3Jlc3MsIGludmFsaWRCYXNlNjRTdHJpbmcsIGludmFsaWRDYWNoZVR5cGUsIGludmFsaWRQb3BUb2tlblJlcXVlc3QsIG1vbml0b3JQb3B1cFRpbWVvdXQsIG1vbml0b3JXaW5kb3dUaW1lb3V0LCBuYXRpdmVDb25uZWN0aW9uTm90RXN0YWJsaXNoZWQsIG5hdGl2ZUV4dGVuc2lvbk5vdEluc3RhbGxlZCwgbmF0aXZlSGFuZHNoYWtlVGltZW91dCwgbmF0aXZlUHJvbXB0Tm90U3VwcG9ydGVkLCBub0FjY291bnRFcnJvciwgbm9DYWNoZWRBdXRob3JpdHlFcnJvciwgbm9OZXR3b3JrQ29ubmVjdGl2aXR5LCBub1N0YXRlSW5IYXNoLCBub1Rva2VuUmVxdWVzdENhY2hlRXJyb3IsIG5vbkJyb3dzZXJFbnZpcm9ubWVudCwgcGtjZU5vdENyZWF0ZWQsIHBvcHVwV2luZG93RXJyb3IsIHBvc3RSZXF1ZXN0RmFpbGVkLCByZWRpcmVjdEluSWZyYW1lLCBzaWxlbnRMb2dvdXRVbnN1cHBvcnRlZCwgc2lsZW50UHJvbXB0VmFsdWVFcnJvciwgc3BhQ29kZUFuZE5hdGl2ZUFjY291bnRJZFByZXNlbnQsIHN0YXRlSW50ZXJhY3Rpb25UeXBlTWlzbWF0Y2gsIHVuYWJsZVRvQWNxdWlyZVRva2VuRnJvbU5hdGl2ZVBsYXRmb3JtLCB1bmFibGVUb0xvYWRUb2tlbiwgdW5hYmxlVG9QYXJzZVN0YXRlLCB1bmFibGVUb1BhcnNlVG9rZW5SZXF1ZXN0Q2FjaGVFcnJvciwgdW5pbml0aWFsaXplZFB1YmxpY0NsaWVudEFwcGxpY2F0aW9uLCB1c2VyQ2FuY2VsbGVkIH07XG4vLyMgc291cmNlTWFwcGluZ1VSTD1Ccm93c2VyQXV0aEVycm9yQ29kZXMubWpzLm1hcFxuIiwiLyohIEBhenVyZS9tc2FsLWJyb3dzZXIgdjMuMjguMSAyMDI1LTAxLTE0ICovXG4ndXNlIHN0cmljdCc7XG5pbXBvcnQgeyBBdXRoRXJyb3IgfSBmcm9tICdAYXp1cmUvbXNhbC1jb21tb24vYnJvd3Nlcic7XG5pbXBvcnQgeyBwa2NlTm90Q3JlYXRlZCwgY3J5cHRvTm9uRXhpc3RlbnQsIGVtcHR5TmF2aWdhdGVVcmksIGhhc2hFbXB0eUVycm9yLCBub1N0YXRlSW5IYXNoLCBoYXNoRG9lc05vdENvbnRhaW5Lbm93blByb3BlcnRpZXMsIHVuYWJsZVRvUGFyc2VTdGF0ZSwgc3RhdGVJbnRlcmFjdGlvblR5cGVNaXNtYXRjaCwgaW50ZXJhY3Rpb25JblByb2dyZXNzLCBwb3B1cFdpbmRvd0Vycm9yLCBlbXB0eVdpbmRvd0Vycm9yLCB1c2VyQ2FuY2VsbGVkLCBtb25pdG9yUG9wdXBUaW1lb3V0LCBtb25pdG9yV2luZG93VGltZW91dCwgcmVkaXJlY3RJbklmcmFtZSwgYmxvY2tJZnJhbWVSZWxvYWQsIGJsb2NrTmVzdGVkUG9wdXBzLCBpZnJhbWVDbG9zZWRQcmVtYXR1cmVseSwgc2lsZW50TG9nb3V0VW5zdXBwb3J0ZWQsIG5vQWNjb3VudEVycm9yLCBzaWxlbnRQcm9tcHRWYWx1ZUVycm9yLCBub1Rva2VuUmVxdWVzdENhY2hlRXJyb3IsIHVuYWJsZVRvUGFyc2VUb2tlblJlcXVlc3RDYWNoZUVycm9yLCBub0NhY2hlZEF1dGhvcml0eUVycm9yLCBhdXRoUmVxdWVzdE5vdFNldEVycm9yLCBpbnZhbGlkQ2FjaGVUeXBlLCBub25Ccm93c2VyRW52aXJvbm1lbnQsIGRhdGFiYXNlTm90T3Blbiwgbm9OZXR3b3JrQ29ubmVjdGl2aXR5LCBwb3N0UmVxdWVzdEZhaWxlZCwgZ2V0UmVxdWVzdEZhaWxlZCwgZmFpbGVkVG9QYXJzZVJlc3BvbnNlLCB1bmFibGVUb0xvYWRUb2tlbiwgY3J5cHRvS2V5Tm90Rm91bmQsIGF1dGhDb2RlUmVxdWlyZWQsIGF1dGhDb2RlT3JOYXRpdmVBY2NvdW50SWRSZXF1aXJlZCwgc3BhQ29kZUFuZE5hdGl2ZUFjY291bnRJZFByZXNlbnQsIGRhdGFiYXNlVW5hdmFpbGFibGUsIHVuYWJsZVRvQWNxdWlyZVRva2VuRnJvbU5hdGl2ZVBsYXRmb3JtLCBuYXRpdmVIYW5kc2hha2VUaW1lb3V0LCBuYXRpdmVFeHRlbnNpb25Ob3RJbnN0YWxsZWQsIG5hdGl2ZUNvbm5lY3Rpb25Ob3RFc3RhYmxpc2hlZCwgdW5pbml0aWFsaXplZFB1YmxpY0NsaWVudEFwcGxpY2F0aW9uLCBuYXRpdmVQcm9tcHROb3RTdXBwb3J0ZWQsIGludmFsaWRCYXNlNjRTdHJpbmcsIGludmFsaWRQb3BUb2tlblJlcXVlc3QsIGZhaWxlZFRvQnVpbGRIZWFkZXJzLCBmYWlsZWRUb1BhcnNlSGVhZGVycyB9IGZyb20gJy4vQnJvd3NlckF1dGhFcnJvckNvZGVzLm1qcyc7XG5pbXBvcnQgKiBhcyBCcm93c2VyQXV0aEVycm9yQ29kZXMgZnJvbSAnLi9Ccm93c2VyQXV0aEVycm9yQ29kZXMubWpzJztcbmV4cG9ydCB7IEJyb3dzZXJBdXRoRXJyb3JDb2RlcyB9O1xuXG4vKlxyXG4gKiBDb3B5cmlnaHQgKGMpIE1pY3Jvc29mdCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cclxuICogTGljZW5zZWQgdW5kZXIgdGhlIE1JVCBMaWNlbnNlLlxyXG4gKi9cclxuY29uc3QgRXJyb3JMaW5rID0gXCJGb3IgbW9yZSB2aXNpdDogYWthLm1zL21zYWxqcy9icm93c2VyLWVycm9yc1wiO1xyXG4vKipcclxuICogQnJvd3NlckF1dGhFcnJvck1lc3NhZ2UgY2xhc3MgY29udGFpbmluZyBzdHJpbmcgY29uc3RhbnRzIHVzZWQgYnkgZXJyb3IgY29kZXMgYW5kIG1lc3NhZ2VzLlxyXG4gKi9cclxuY29uc3QgQnJvd3NlckF1dGhFcnJvck1lc3NhZ2VzID0ge1xyXG4gICAgW3BrY2VOb3RDcmVhdGVkXTogXCJUaGUgUEtDRSBjb2RlIGNoYWxsZW5nZSBhbmQgdmVyaWZpZXIgY291bGQgbm90IGJlIGdlbmVyYXRlZC5cIixcclxuICAgIFtjcnlwdG9Ob25FeGlzdGVudF06IFwiVGhlIGNyeXB0byBvYmplY3Qgb3IgZnVuY3Rpb24gaXMgbm90IGF2YWlsYWJsZS5cIixcclxuICAgIFtlbXB0eU5hdmlnYXRlVXJpXTogXCJOYXZpZ2F0aW9uIFVSSSBpcyBlbXB0eS4gUGxlYXNlIGNoZWNrIHN0YWNrIHRyYWNlIGZvciBtb3JlIGluZm8uXCIsXHJcbiAgICBbaGFzaEVtcHR5RXJyb3JdOiBgSGFzaCB2YWx1ZSBjYW5ub3QgYmUgcHJvY2Vzc2VkIGJlY2F1c2UgaXQgaXMgZW1wdHkuIFBsZWFzZSB2ZXJpZnkgdGhhdCB5b3VyIHJlZGlyZWN0VXJpIGlzIG5vdCBjbGVhcmluZyB0aGUgaGFzaC4gJHtFcnJvckxpbmt9YCxcclxuICAgIFtub1N0YXRlSW5IYXNoXTogXCJIYXNoIGRvZXMgbm90IGNvbnRhaW4gc3RhdGUuIFBsZWFzZSB2ZXJpZnkgdGhhdCB0aGUgcmVxdWVzdCBvcmlnaW5hdGVkIGZyb20gbXNhbC5cIixcclxuICAgIFtoYXNoRG9lc05vdENvbnRhaW5Lbm93blByb3BlcnRpZXNdOiBgSGFzaCBkb2VzIG5vdCBjb250YWluIGtub3duIHByb3Blcml0ZXMuIFBsZWFzZSB2ZXJpZnkgdGhhdCB5b3VyIHJlZGlyZWN0VXJpIGlzIG5vdCBjaGFuZ2luZyB0aGUgaGFzaC4gICR7RXJyb3JMaW5rfWAsXHJcbiAgICBbdW5hYmxlVG9QYXJzZVN0YXRlXTogXCJVbmFibGUgdG8gcGFyc2Ugc3RhdGUuIFBsZWFzZSB2ZXJpZnkgdGhhdCB0aGUgcmVxdWVzdCBvcmlnaW5hdGVkIGZyb20gbXNhbC5cIixcclxuICAgIFtzdGF0ZUludGVyYWN0aW9uVHlwZU1pc21hdGNoXTogXCJIYXNoIGNvbnRhaW5zIHN0YXRlIGJ1dCB0aGUgaW50ZXJhY3Rpb24gdHlwZSBkb2VzIG5vdCBtYXRjaCB0aGUgY2FsbGVyLlwiLFxyXG4gICAgW2ludGVyYWN0aW9uSW5Qcm9ncmVzc106IGBJbnRlcmFjdGlvbiBpcyBjdXJyZW50bHkgaW4gcHJvZ3Jlc3MuIFBsZWFzZSBlbnN1cmUgdGhhdCB0aGlzIGludGVyYWN0aW9uIGhhcyBiZWVuIGNvbXBsZXRlZCBiZWZvcmUgY2FsbGluZyBhbiBpbnRlcmFjdGl2ZSBBUEkuICAgJHtFcnJvckxpbmt9YCxcclxuICAgIFtwb3B1cFdpbmRvd0Vycm9yXTogXCJFcnJvciBvcGVuaW5nIHBvcHVwIHdpbmRvdy4gVGhpcyBjYW4gaGFwcGVuIGlmIHlvdSBhcmUgdXNpbmcgSUUgb3IgaWYgcG9wdXBzIGFyZSBibG9ja2VkIGluIHRoZSBicm93c2VyLlwiLFxyXG4gICAgW2VtcHR5V2luZG93RXJyb3JdOiBcIndpbmRvdy5vcGVuIHJldHVybmVkIG51bGwgb3IgdW5kZWZpbmVkIHdpbmRvdyBvYmplY3QuXCIsXHJcbiAgICBbdXNlckNhbmNlbGxlZF06IFwiVXNlciBjYW5jZWxsZWQgdGhlIGZsb3cuXCIsXHJcbiAgICBbbW9uaXRvclBvcHVwVGltZW91dF06IGBUb2tlbiBhY3F1aXNpdGlvbiBpbiBwb3B1cCBmYWlsZWQgZHVlIHRvIHRpbWVvdXQuICAke0Vycm9yTGlua31gLFxyXG4gICAgW21vbml0b3JXaW5kb3dUaW1lb3V0XTogYFRva2VuIGFjcXVpc2l0aW9uIGluIGlmcmFtZSBmYWlsZWQgZHVlIHRvIHRpbWVvdXQuICAke0Vycm9yTGlua31gLFxyXG4gICAgW3JlZGlyZWN0SW5JZnJhbWVdOiBcIlJlZGlyZWN0cyBhcmUgbm90IHN1cHBvcnRlZCBmb3IgaWZyYW1lZCBvciBicm9rZXJlZCBhcHBsaWNhdGlvbnMuIFBsZWFzZSBlbnN1cmUgeW91IGFyZSB1c2luZyBNU0FMLmpzIGluIGEgdG9wIGZyYW1lIG9mIHRoZSB3aW5kb3cgaWYgdXNpbmcgdGhlIHJlZGlyZWN0IEFQSXMsIG9yIHVzZSB0aGUgcG9wdXAgQVBJcy5cIixcclxuICAgIFtibG9ja0lmcmFtZVJlbG9hZF06IGBSZXF1ZXN0IHdhcyBibG9ja2VkIGluc2lkZSBhbiBpZnJhbWUgYmVjYXVzZSBNU0FMIGRldGVjdGVkIGFuIGF1dGhlbnRpY2F0aW9uIHJlc3BvbnNlLiAgJHtFcnJvckxpbmt9YCxcclxuICAgIFtibG9ja05lc3RlZFBvcHVwc106IFwiUmVxdWVzdCB3YXMgYmxvY2tlZCBpbnNpZGUgYSBwb3B1cCBiZWNhdXNlIE1TQUwgZGV0ZWN0ZWQgaXQgd2FzIHJ1bm5pbmcgaW4gYSBwb3B1cC5cIixcclxuICAgIFtpZnJhbWVDbG9zZWRQcmVtYXR1cmVseV06IFwiVGhlIGlmcmFtZSBiZWluZyBtb25pdG9yZWQgd2FzIGNsb3NlZCBwcmVtYXR1cmVseS5cIixcclxuICAgIFtzaWxlbnRMb2dvdXRVbnN1cHBvcnRlZF06IFwiU2lsZW50IGxvZ291dCBub3Qgc3VwcG9ydGVkLiBQbGVhc2UgY2FsbCBsb2dvdXRSZWRpcmVjdCBvciBsb2dvdXRQb3B1cCBpbnN0ZWFkLlwiLFxyXG4gICAgW25vQWNjb3VudEVycm9yXTogXCJObyBhY2NvdW50IG9iamVjdCBwcm92aWRlZCB0byBhY3F1aXJlVG9rZW5TaWxlbnQgYW5kIG5vIGFjdGl2ZSBhY2NvdW50IGhhcyBiZWVuIHNldC4gUGxlYXNlIGNhbGwgc2V0QWN0aXZlQWNjb3VudCBvciBwcm92aWRlIGFuIGFjY291bnQgb24gdGhlIHJlcXVlc3QuXCIsXHJcbiAgICBbc2lsZW50UHJvbXB0VmFsdWVFcnJvcl06IFwiVGhlIHZhbHVlIGdpdmVuIGZvciB0aGUgcHJvbXB0IHZhbHVlIGlzIG5vdCB2YWxpZCBmb3Igc2lsZW50IHJlcXVlc3RzIC0gbXVzdCBiZSBzZXQgdG8gJ25vbmUnIG9yICdub19zZXNzaW9uJy5cIixcclxuICAgIFtub1Rva2VuUmVxdWVzdENhY2hlRXJyb3JdOiBcIk5vIHRva2VuIHJlcXVlc3QgZm91bmQgaW4gY2FjaGUuXCIsXHJcbiAgICBbdW5hYmxlVG9QYXJzZVRva2VuUmVxdWVzdENhY2hlRXJyb3JdOiBcIlRoZSBjYWNoZWQgdG9rZW4gcmVxdWVzdCBjb3VsZCBub3QgYmUgcGFyc2VkLlwiLFxyXG4gICAgW25vQ2FjaGVkQXV0aG9yaXR5RXJyb3JdOiBcIk5vIGNhY2hlZCBhdXRob3JpdHkgZm91bmQuXCIsXHJcbiAgICBbYXV0aFJlcXVlc3ROb3RTZXRFcnJvcl06IFwiQXV0aCBSZXF1ZXN0IG5vdCBzZXQuIFBsZWFzZSBlbnN1cmUgaW5pdGlhdGVBdXRoUmVxdWVzdCB3YXMgY2FsbGVkIGZyb20gdGhlIEludGVyYWN0aW9uSGFuZGxlclwiLFxyXG4gICAgW2ludmFsaWRDYWNoZVR5cGVdOiBcIkludmFsaWQgY2FjaGUgdHlwZVwiLFxyXG4gICAgW25vbkJyb3dzZXJFbnZpcm9ubWVudF06IFwiTG9naW4gYW5kIHRva2VuIHJlcXVlc3RzIGFyZSBub3Qgc3VwcG9ydGVkIGluIG5vbi1icm93c2VyIGVudmlyb25tZW50cy5cIixcclxuICAgIFtkYXRhYmFzZU5vdE9wZW5dOiBcIkRhdGFiYXNlIGlzIG5vdCBvcGVuIVwiLFxyXG4gICAgW25vTmV0d29ya0Nvbm5lY3Rpdml0eV06IFwiTm8gbmV0d29yayBjb25uZWN0aXZpdHkuIENoZWNrIHlvdXIgaW50ZXJuZXQgY29ubmVjdGlvbi5cIixcclxuICAgIFtwb3N0UmVxdWVzdEZhaWxlZF06IFwiTmV0d29yayByZXF1ZXN0IGZhaWxlZDogSWYgdGhlIGJyb3dzZXIgdGhyZXcgYSBDT1JTIGVycm9yLCBjaGVjayB0aGF0IHRoZSByZWRpcmVjdFVyaSBpcyByZWdpc3RlcmVkIGluIHRoZSBBenVyZSBBcHAgUG9ydGFsIGFzIHR5cGUgJ1NQQSdcIixcclxuICAgIFtnZXRSZXF1ZXN0RmFpbGVkXTogXCJOZXR3b3JrIHJlcXVlc3QgZmFpbGVkLiBQbGVhc2UgY2hlY2sgdGhlIG5ldHdvcmsgdHJhY2UgdG8gZGV0ZXJtaW5lIHJvb3QgY2F1c2UuXCIsXHJcbiAgICBbZmFpbGVkVG9QYXJzZVJlc3BvbnNlXTogXCJGYWlsZWQgdG8gcGFyc2UgbmV0d29yayByZXNwb25zZS4gQ2hlY2sgbmV0d29yayB0cmFjZS5cIixcclxuICAgIFt1bmFibGVUb0xvYWRUb2tlbl06IFwiRXJyb3IgbG9hZGluZyB0b2tlbiB0byBjYWNoZS5cIixcclxuICAgIFtjcnlwdG9LZXlOb3RGb3VuZF06IFwiQ3J5cHRvZ3JhcGhpYyBLZXkgb3IgS2V5cGFpciBub3QgZm91bmQgaW4gYnJvd3NlciBzdG9yYWdlLlwiLFxyXG4gICAgW2F1dGhDb2RlUmVxdWlyZWRdOiBcIkFuIGF1dGhvcml6YXRpb24gY29kZSBtdXN0IGJlIHByb3ZpZGVkIChhcyB0aGUgYGNvZGVgIHByb3BlcnR5IG9uIHRoZSByZXF1ZXN0KSB0byB0aGlzIGZsb3cuXCIsXHJcbiAgICBbYXV0aENvZGVPck5hdGl2ZUFjY291bnRJZFJlcXVpcmVkXTogXCJBbiBhdXRob3JpemF0aW9uIGNvZGUgb3IgbmF0aXZlQWNjb3VudElkIG11c3QgYmUgcHJvdmlkZWQgdG8gdGhpcyBmbG93LlwiLFxyXG4gICAgW3NwYUNvZGVBbmROYXRpdmVBY2NvdW50SWRQcmVzZW50XTogXCJSZXF1ZXN0IGNhbm5vdCBjb250YWluIGJvdGggc3BhIGNvZGUgYW5kIG5hdGl2ZSBhY2NvdW50IGlkLlwiLFxyXG4gICAgW2RhdGFiYXNlVW5hdmFpbGFibGVdOiBcIkluZGV4ZWREQiwgd2hpY2ggaXMgcmVxdWlyZWQgZm9yIHBlcnNpc3RlbnQgY3J5cHRvZ3JhcGhpYyBrZXkgc3RvcmFnZSwgaXMgdW5hdmFpbGFibGUuIFRoaXMgbWF5IGJlIGNhdXNlZCBieSBicm93c2VyIHByaXZhY3kgZmVhdHVyZXMgd2hpY2ggYmxvY2sgcGVyc2lzdGVudCBzdG9yYWdlIGluIHRoaXJkLXBhcnR5IGNvbnRleHRzLlwiLFxyXG4gICAgW3VuYWJsZVRvQWNxdWlyZVRva2VuRnJvbU5hdGl2ZVBsYXRmb3JtXTogYFVuYWJsZSB0byBhY3F1aXJlIHRva2VuIGZyb20gbmF0aXZlIHBsYXRmb3JtLiAgJHtFcnJvckxpbmt9YCxcclxuICAgIFtuYXRpdmVIYW5kc2hha2VUaW1lb3V0XTogXCJUaW1lZCBvdXQgd2hpbGUgYXR0ZW1wdGluZyB0byBlc3RhYmxpc2ggY29ubmVjdGlvbiB0byBicm93c2VyIGV4dGVuc2lvblwiLFxyXG4gICAgW25hdGl2ZUV4dGVuc2lvbk5vdEluc3RhbGxlZF06IFwiTmF0aXZlIGV4dGVuc2lvbiBpcyBub3QgaW5zdGFsbGVkLiBJZiB5b3UgdGhpbmsgdGhpcyBpcyBhIG1pc3Rha2UgY2FsbCB0aGUgaW5pdGlhbGl6ZSBmdW5jdGlvbi5cIixcclxuICAgIFtuYXRpdmVDb25uZWN0aW9uTm90RXN0YWJsaXNoZWRdOiBgQ29ubmVjdGlvbiB0byBuYXRpdmUgcGxhdGZvcm0gaGFzIG5vdCBiZWVuIGVzdGFibGlzaGVkLiBQbGVhc2UgaW5zdGFsbCBhIGNvbXBhdGlibGUgYnJvd3NlciBleHRlbnNpb24gYW5kIHJ1biBpbml0aWFsaXplKCkuICAke0Vycm9yTGlua31gLFxyXG4gICAgW3VuaW5pdGlhbGl6ZWRQdWJsaWNDbGllbnRBcHBsaWNhdGlvbl06IGBZb3UgbXVzdCBjYWxsIGFuZCBhd2FpdCB0aGUgaW5pdGlhbGl6ZSBmdW5jdGlvbiBiZWZvcmUgYXR0ZW1wdGluZyB0byBjYWxsIGFueSBvdGhlciBNU0FMIEFQSS4gICR7RXJyb3JMaW5rfWAsXHJcbiAgICBbbmF0aXZlUHJvbXB0Tm90U3VwcG9ydGVkXTogXCJUaGUgcHJvdmlkZWQgcHJvbXB0IGlzIG5vdCBzdXBwb3J0ZWQgYnkgdGhlIG5hdGl2ZSBwbGF0Zm9ybS4gVGhpcyByZXF1ZXN0IHNob3VsZCBiZSByb3V0ZWQgdG8gdGhlIHdlYiBiYXNlZCBmbG93LlwiLFxyXG4gICAgW2ludmFsaWRCYXNlNjRTdHJpbmddOiBcIkludmFsaWQgYmFzZTY0IGVuY29kZWQgc3RyaW5nLlwiLFxyXG4gICAgW2ludmFsaWRQb3BUb2tlblJlcXVlc3RdOiBcIkludmFsaWQgUG9QIHRva2VuIHJlcXVlc3QuIFRoZSByZXF1ZXN0IHNob3VsZCBub3QgaGF2ZSBib3RoIGEgcG9wS2lkIHZhbHVlIGFuZCBzaWduUG9wVG9rZW4gc2V0IHRvIHRydWUuXCIsXHJcbiAgICBbZmFpbGVkVG9CdWlsZEhlYWRlcnNdOiBcIkZhaWxlZCB0byBidWlsZCByZXF1ZXN0IGhlYWRlcnMgb2JqZWN0LlwiLFxyXG4gICAgW2ZhaWxlZFRvUGFyc2VIZWFkZXJzXTogXCJGYWlsZWQgdG8gcGFyc2UgcmVzcG9uc2UgaGVhZGVyc1wiLFxyXG59O1xyXG4vKipcclxuICogQnJvd3NlckF1dGhFcnJvck1lc3NhZ2UgY2xhc3MgY29udGFpbmluZyBzdHJpbmcgY29uc3RhbnRzIHVzZWQgYnkgZXJyb3IgY29kZXMgYW5kIG1lc3NhZ2VzLlxyXG4gKiBAZGVwcmVjYXRlZCBVc2UgZXhwb3J0ZWQgQnJvd3NlckF1dGhFcnJvckNvZGVzIGluc3RlYWQuXHJcbiAqIEluIHlvdXIgYXBwIHlvdSBjYW4gZG8gOlxyXG4gKiBgYGBcclxuICogaW1wb3J0IHsgQnJvd3NlckF1dGhFcnJvckNvZGVzIH0gZnJvbSBcIkBhenVyZS9tc2FsLWJyb3dzZXJcIjtcclxuICogYGBgXHJcbiAqL1xyXG5jb25zdCBCcm93c2VyQXV0aEVycm9yTWVzc2FnZSA9IHtcclxuICAgIHBrY2VOb3RHZW5lcmF0ZWQ6IHtcclxuICAgICAgICBjb2RlOiBwa2NlTm90Q3JlYXRlZCxcclxuICAgICAgICBkZXNjOiBCcm93c2VyQXV0aEVycm9yTWVzc2FnZXNbcGtjZU5vdENyZWF0ZWRdLFxyXG4gICAgfSxcclxuICAgIGNyeXB0b0RvZXNOb3RFeGlzdDoge1xyXG4gICAgICAgIGNvZGU6IGNyeXB0b05vbkV4aXN0ZW50LFxyXG4gICAgICAgIGRlc2M6IEJyb3dzZXJBdXRoRXJyb3JNZXNzYWdlc1tjcnlwdG9Ob25FeGlzdGVudF0sXHJcbiAgICB9LFxyXG4gICAgZW1wdHlOYXZpZ2F0ZVVyaUVycm9yOiB7XHJcbiAgICAgICAgY29kZTogZW1wdHlOYXZpZ2F0ZVVyaSxcclxuICAgICAgICBkZXNjOiBCcm93c2VyQXV0aEVycm9yTWVzc2FnZXNbZW1wdHlOYXZpZ2F0ZVVyaV0sXHJcbiAgICB9LFxyXG4gICAgaGFzaEVtcHR5RXJyb3I6IHtcclxuICAgICAgICBjb2RlOiBoYXNoRW1wdHlFcnJvcixcclxuICAgICAgICBkZXNjOiBCcm93c2VyQXV0aEVycm9yTWVzc2FnZXNbaGFzaEVtcHR5RXJyb3JdLFxyXG4gICAgfSxcclxuICAgIGhhc2hEb2VzTm90Q29udGFpblN0YXRlRXJyb3I6IHtcclxuICAgICAgICBjb2RlOiBub1N0YXRlSW5IYXNoLFxyXG4gICAgICAgIGRlc2M6IEJyb3dzZXJBdXRoRXJyb3JNZXNzYWdlc1tub1N0YXRlSW5IYXNoXSxcclxuICAgIH0sXHJcbiAgICBoYXNoRG9lc05vdENvbnRhaW5Lbm93blByb3BlcnRpZXNFcnJvcjoge1xyXG4gICAgICAgIGNvZGU6IGhhc2hEb2VzTm90Q29udGFpbktub3duUHJvcGVydGllcyxcclxuICAgICAgICBkZXNjOiBCcm93c2VyQXV0aEVycm9yTWVzc2FnZXNbaGFzaERvZXNOb3RDb250YWluS25vd25Qcm9wZXJ0aWVzXSxcclxuICAgIH0sXHJcbiAgICB1bmFibGVUb1BhcnNlU3RhdGVFcnJvcjoge1xyXG4gICAgICAgIGNvZGU6IHVuYWJsZVRvUGFyc2VTdGF0ZSxcclxuICAgICAgICBkZXNjOiBCcm93c2VyQXV0aEVycm9yTWVzc2FnZXNbdW5hYmxlVG9QYXJzZVN0YXRlXSxcclxuICAgIH0sXHJcbiAgICBzdGF0ZUludGVyYWN0aW9uVHlwZU1pc21hdGNoRXJyb3I6IHtcclxuICAgICAgICBjb2RlOiBzdGF0ZUludGVyYWN0aW9uVHlwZU1pc21hdGNoLFxyXG4gICAgICAgIGRlc2M6IEJyb3dzZXJBdXRoRXJyb3JNZXNzYWdlc1tzdGF0ZUludGVyYWN0aW9uVHlwZU1pc21hdGNoXSxcclxuICAgIH0sXHJcbiAgICBpbnRlcmFjdGlvbkluUHJvZ3Jlc3M6IHtcclxuICAgICAgICBjb2RlOiBpbnRlcmFjdGlvbkluUHJvZ3Jlc3MsXHJcbiAgICAgICAgZGVzYzogQnJvd3NlckF1dGhFcnJvck1lc3NhZ2VzW2ludGVyYWN0aW9uSW5Qcm9ncmVzc10sXHJcbiAgICB9LFxyXG4gICAgcG9wdXBXaW5kb3dFcnJvcjoge1xyXG4gICAgICAgIGNvZGU6IHBvcHVwV2luZG93RXJyb3IsXHJcbiAgICAgICAgZGVzYzogQnJvd3NlckF1dGhFcnJvck1lc3NhZ2VzW3BvcHVwV2luZG93RXJyb3JdLFxyXG4gICAgfSxcclxuICAgIGVtcHR5V2luZG93RXJyb3I6IHtcclxuICAgICAgICBjb2RlOiBlbXB0eVdpbmRvd0Vycm9yLFxyXG4gICAgICAgIGRlc2M6IEJyb3dzZXJBdXRoRXJyb3JNZXNzYWdlc1tlbXB0eVdpbmRvd0Vycm9yXSxcclxuICAgIH0sXHJcbiAgICB1c2VyQ2FuY2VsbGVkRXJyb3I6IHtcclxuICAgICAgICBjb2RlOiB1c2VyQ2FuY2VsbGVkLFxyXG4gICAgICAgIGRlc2M6IEJyb3dzZXJBdXRoRXJyb3JNZXNzYWdlc1t1c2VyQ2FuY2VsbGVkXSxcclxuICAgIH0sXHJcbiAgICBtb25pdG9yUG9wdXBUaW1lb3V0RXJyb3I6IHtcclxuICAgICAgICBjb2RlOiBtb25pdG9yUG9wdXBUaW1lb3V0LFxyXG4gICAgICAgIGRlc2M6IEJyb3dzZXJBdXRoRXJyb3JNZXNzYWdlc1ttb25pdG9yUG9wdXBUaW1lb3V0XSxcclxuICAgIH0sXHJcbiAgICBtb25pdG9ySWZyYW1lVGltZW91dEVycm9yOiB7XHJcbiAgICAgICAgY29kZTogbW9uaXRvcldpbmRvd1RpbWVvdXQsXHJcbiAgICAgICAgZGVzYzogQnJvd3NlckF1dGhFcnJvck1lc3NhZ2VzW21vbml0b3JXaW5kb3dUaW1lb3V0XSxcclxuICAgIH0sXHJcbiAgICByZWRpcmVjdEluSWZyYW1lRXJyb3I6IHtcclxuICAgICAgICBjb2RlOiByZWRpcmVjdEluSWZyYW1lLFxyXG4gICAgICAgIGRlc2M6IEJyb3dzZXJBdXRoRXJyb3JNZXNzYWdlc1tyZWRpcmVjdEluSWZyYW1lXSxcclxuICAgIH0sXHJcbiAgICBibG9ja1Rva2VuUmVxdWVzdHNJbkhpZGRlbklmcmFtZUVycm9yOiB7XHJcbiAgICAgICAgY29kZTogYmxvY2tJZnJhbWVSZWxvYWQsXHJcbiAgICAgICAgZGVzYzogQnJvd3NlckF1dGhFcnJvck1lc3NhZ2VzW2Jsb2NrSWZyYW1lUmVsb2FkXSxcclxuICAgIH0sXHJcbiAgICBibG9ja0FjcXVpcmVUb2tlbkluUG9wdXBzRXJyb3I6IHtcclxuICAgICAgICBjb2RlOiBibG9ja05lc3RlZFBvcHVwcyxcclxuICAgICAgICBkZXNjOiBCcm93c2VyQXV0aEVycm9yTWVzc2FnZXNbYmxvY2tOZXN0ZWRQb3B1cHNdLFxyXG4gICAgfSxcclxuICAgIGlmcmFtZUNsb3NlZFByZW1hdHVyZWx5RXJyb3I6IHtcclxuICAgICAgICBjb2RlOiBpZnJhbWVDbG9zZWRQcmVtYXR1cmVseSxcclxuICAgICAgICBkZXNjOiBCcm93c2VyQXV0aEVycm9yTWVzc2FnZXNbaWZyYW1lQ2xvc2VkUHJlbWF0dXJlbHldLFxyXG4gICAgfSxcclxuICAgIHNpbGVudExvZ291dFVuc3VwcG9ydGVkRXJyb3I6IHtcclxuICAgICAgICBjb2RlOiBzaWxlbnRMb2dvdXRVbnN1cHBvcnRlZCxcclxuICAgICAgICBkZXNjOiBCcm93c2VyQXV0aEVycm9yTWVzc2FnZXNbc2lsZW50TG9nb3V0VW5zdXBwb3J0ZWRdLFxyXG4gICAgfSxcclxuICAgIG5vQWNjb3VudEVycm9yOiB7XHJcbiAgICAgICAgY29kZTogbm9BY2NvdW50RXJyb3IsXHJcbiAgICAgICAgZGVzYzogQnJvd3NlckF1dGhFcnJvck1lc3NhZ2VzW25vQWNjb3VudEVycm9yXSxcclxuICAgIH0sXHJcbiAgICBzaWxlbnRQcm9tcHRWYWx1ZUVycm9yOiB7XHJcbiAgICAgICAgY29kZTogc2lsZW50UHJvbXB0VmFsdWVFcnJvcixcclxuICAgICAgICBkZXNjOiBCcm93c2VyQXV0aEVycm9yTWVzc2FnZXNbc2lsZW50UHJvbXB0VmFsdWVFcnJvcl0sXHJcbiAgICB9LFxyXG4gICAgbm9Ub2tlblJlcXVlc3RDYWNoZUVycm9yOiB7XHJcbiAgICAgICAgY29kZTogbm9Ub2tlblJlcXVlc3RDYWNoZUVycm9yLFxyXG4gICAgICAgIGRlc2M6IEJyb3dzZXJBdXRoRXJyb3JNZXNzYWdlc1tub1Rva2VuUmVxdWVzdENhY2hlRXJyb3JdLFxyXG4gICAgfSxcclxuICAgIHVuYWJsZVRvUGFyc2VUb2tlblJlcXVlc3RDYWNoZUVycm9yOiB7XHJcbiAgICAgICAgY29kZTogdW5hYmxlVG9QYXJzZVRva2VuUmVxdWVzdENhY2hlRXJyb3IsXHJcbiAgICAgICAgZGVzYzogQnJvd3NlckF1dGhFcnJvck1lc3NhZ2VzW3VuYWJsZVRvUGFyc2VUb2tlblJlcXVlc3RDYWNoZUVycm9yXSxcclxuICAgIH0sXHJcbiAgICBub0NhY2hlZEF1dGhvcml0eUVycm9yOiB7XHJcbiAgICAgICAgY29kZTogbm9DYWNoZWRBdXRob3JpdHlFcnJvcixcclxuICAgICAgICBkZXNjOiBCcm93c2VyQXV0aEVycm9yTWVzc2FnZXNbbm9DYWNoZWRBdXRob3JpdHlFcnJvcl0sXHJcbiAgICB9LFxyXG4gICAgYXV0aFJlcXVlc3ROb3RTZXQ6IHtcclxuICAgICAgICBjb2RlOiBhdXRoUmVxdWVzdE5vdFNldEVycm9yLFxyXG4gICAgICAgIGRlc2M6IEJyb3dzZXJBdXRoRXJyb3JNZXNzYWdlc1thdXRoUmVxdWVzdE5vdFNldEVycm9yXSxcclxuICAgIH0sXHJcbiAgICBpbnZhbGlkQ2FjaGVUeXBlOiB7XHJcbiAgICAgICAgY29kZTogaW52YWxpZENhY2hlVHlwZSxcclxuICAgICAgICBkZXNjOiBCcm93c2VyQXV0aEVycm9yTWVzc2FnZXNbaW52YWxpZENhY2hlVHlwZV0sXHJcbiAgICB9LFxyXG4gICAgbm90SW5Ccm93c2VyRW52aXJvbm1lbnQ6IHtcclxuICAgICAgICBjb2RlOiBub25Ccm93c2VyRW52aXJvbm1lbnQsXHJcbiAgICAgICAgZGVzYzogQnJvd3NlckF1dGhFcnJvck1lc3NhZ2VzW25vbkJyb3dzZXJFbnZpcm9ubWVudF0sXHJcbiAgICB9LFxyXG4gICAgZGF0YWJhc2VOb3RPcGVuOiB7XHJcbiAgICAgICAgY29kZTogZGF0YWJhc2VOb3RPcGVuLFxyXG4gICAgICAgIGRlc2M6IEJyb3dzZXJBdXRoRXJyb3JNZXNzYWdlc1tkYXRhYmFzZU5vdE9wZW5dLFxyXG4gICAgfSxcclxuICAgIG5vTmV0d29ya0Nvbm5lY3Rpdml0eToge1xyXG4gICAgICAgIGNvZGU6IG5vTmV0d29ya0Nvbm5lY3Rpdml0eSxcclxuICAgICAgICBkZXNjOiBCcm93c2VyQXV0aEVycm9yTWVzc2FnZXNbbm9OZXR3b3JrQ29ubmVjdGl2aXR5XSxcclxuICAgIH0sXHJcbiAgICBwb3N0UmVxdWVzdEZhaWxlZDoge1xyXG4gICAgICAgIGNvZGU6IHBvc3RSZXF1ZXN0RmFpbGVkLFxyXG4gICAgICAgIGRlc2M6IEJyb3dzZXJBdXRoRXJyb3JNZXNzYWdlc1twb3N0UmVxdWVzdEZhaWxlZF0sXHJcbiAgICB9LFxyXG4gICAgZ2V0UmVxdWVzdEZhaWxlZDoge1xyXG4gICAgICAgIGNvZGU6IGdldFJlcXVlc3RGYWlsZWQsXHJcbiAgICAgICAgZGVzYzogQnJvd3NlckF1dGhFcnJvck1lc3NhZ2VzW2dldFJlcXVlc3RGYWlsZWRdLFxyXG4gICAgfSxcclxuICAgIGZhaWxlZFRvUGFyc2VOZXR3b3JrUmVzcG9uc2U6IHtcclxuICAgICAgICBjb2RlOiBmYWlsZWRUb1BhcnNlUmVzcG9uc2UsXHJcbiAgICAgICAgZGVzYzogQnJvd3NlckF1dGhFcnJvck1lc3NhZ2VzW2ZhaWxlZFRvUGFyc2VSZXNwb25zZV0sXHJcbiAgICB9LFxyXG4gICAgdW5hYmxlVG9Mb2FkVG9rZW5FcnJvcjoge1xyXG4gICAgICAgIGNvZGU6IHVuYWJsZVRvTG9hZFRva2VuLFxyXG4gICAgICAgIGRlc2M6IEJyb3dzZXJBdXRoRXJyb3JNZXNzYWdlc1t1bmFibGVUb0xvYWRUb2tlbl0sXHJcbiAgICB9LFxyXG4gICAgc2lnbmluZ0tleU5vdEZvdW5kSW5TdG9yYWdlOiB7XHJcbiAgICAgICAgY29kZTogY3J5cHRvS2V5Tm90Rm91bmQsXHJcbiAgICAgICAgZGVzYzogQnJvd3NlckF1dGhFcnJvck1lc3NhZ2VzW2NyeXB0b0tleU5vdEZvdW5kXSxcclxuICAgIH0sXHJcbiAgICBhdXRoQ29kZVJlcXVpcmVkOiB7XHJcbiAgICAgICAgY29kZTogYXV0aENvZGVSZXF1aXJlZCxcclxuICAgICAgICBkZXNjOiBCcm93c2VyQXV0aEVycm9yTWVzc2FnZXNbYXV0aENvZGVSZXF1aXJlZF0sXHJcbiAgICB9LFxyXG4gICAgYXV0aENvZGVPck5hdGl2ZUFjY291bnRSZXF1aXJlZDoge1xyXG4gICAgICAgIGNvZGU6IGF1dGhDb2RlT3JOYXRpdmVBY2NvdW50SWRSZXF1aXJlZCxcclxuICAgICAgICBkZXNjOiBCcm93c2VyQXV0aEVycm9yTWVzc2FnZXNbYXV0aENvZGVPck5hdGl2ZUFjY291bnRJZFJlcXVpcmVkXSxcclxuICAgIH0sXHJcbiAgICBzcGFDb2RlQW5kTmF0aXZlQWNjb3VudFByZXNlbnQ6IHtcclxuICAgICAgICBjb2RlOiBzcGFDb2RlQW5kTmF0aXZlQWNjb3VudElkUHJlc2VudCxcclxuICAgICAgICBkZXNjOiBCcm93c2VyQXV0aEVycm9yTWVzc2FnZXNbc3BhQ29kZUFuZE5hdGl2ZUFjY291bnRJZFByZXNlbnRdLFxyXG4gICAgfSxcclxuICAgIGRhdGFiYXNlVW5hdmFpbGFibGU6IHtcclxuICAgICAgICBjb2RlOiBkYXRhYmFzZVVuYXZhaWxhYmxlLFxyXG4gICAgICAgIGRlc2M6IEJyb3dzZXJBdXRoRXJyb3JNZXNzYWdlc1tkYXRhYmFzZVVuYXZhaWxhYmxlXSxcclxuICAgIH0sXHJcbiAgICB1bmFibGVUb0FjcXVpcmVUb2tlbkZyb21OYXRpdmVQbGF0Zm9ybToge1xyXG4gICAgICAgIGNvZGU6IHVuYWJsZVRvQWNxdWlyZVRva2VuRnJvbU5hdGl2ZVBsYXRmb3JtLFxyXG4gICAgICAgIGRlc2M6IEJyb3dzZXJBdXRoRXJyb3JNZXNzYWdlc1t1bmFibGVUb0FjcXVpcmVUb2tlbkZyb21OYXRpdmVQbGF0Zm9ybV0sXHJcbiAgICB9LFxyXG4gICAgbmF0aXZlSGFuZHNoYWtlVGltZW91dDoge1xyXG4gICAgICAgIGNvZGU6IG5hdGl2ZUhhbmRzaGFrZVRpbWVvdXQsXHJcbiAgICAgICAgZGVzYzogQnJvd3NlckF1dGhFcnJvck1lc3NhZ2VzW25hdGl2ZUhhbmRzaGFrZVRpbWVvdXRdLFxyXG4gICAgfSxcclxuICAgIG5hdGl2ZUV4dGVuc2lvbk5vdEluc3RhbGxlZDoge1xyXG4gICAgICAgIGNvZGU6IG5hdGl2ZUV4dGVuc2lvbk5vdEluc3RhbGxlZCxcclxuICAgICAgICBkZXNjOiBCcm93c2VyQXV0aEVycm9yTWVzc2FnZXNbbmF0aXZlRXh0ZW5zaW9uTm90SW5zdGFsbGVkXSxcclxuICAgIH0sXHJcbiAgICBuYXRpdmVDb25uZWN0aW9uTm90RXN0YWJsaXNoZWQ6IHtcclxuICAgICAgICBjb2RlOiBuYXRpdmVDb25uZWN0aW9uTm90RXN0YWJsaXNoZWQsXHJcbiAgICAgICAgZGVzYzogQnJvd3NlckF1dGhFcnJvck1lc3NhZ2VzW25hdGl2ZUNvbm5lY3Rpb25Ob3RFc3RhYmxpc2hlZF0sXHJcbiAgICB9LFxyXG4gICAgdW5pbml0aWFsaXplZFB1YmxpY0NsaWVudEFwcGxpY2F0aW9uOiB7XHJcbiAgICAgICAgY29kZTogdW5pbml0aWFsaXplZFB1YmxpY0NsaWVudEFwcGxpY2F0aW9uLFxyXG4gICAgICAgIGRlc2M6IEJyb3dzZXJBdXRoRXJyb3JNZXNzYWdlc1t1bmluaXRpYWxpemVkUHVibGljQ2xpZW50QXBwbGljYXRpb25dLFxyXG4gICAgfSxcclxuICAgIG5hdGl2ZVByb21wdE5vdFN1cHBvcnRlZDoge1xyXG4gICAgICAgIGNvZGU6IG5hdGl2ZVByb21wdE5vdFN1cHBvcnRlZCxcclxuICAgICAgICBkZXNjOiBCcm93c2VyQXV0aEVycm9yTWVzc2FnZXNbbmF0aXZlUHJvbXB0Tm90U3VwcG9ydGVkXSxcclxuICAgIH0sXHJcbiAgICBpbnZhbGlkQmFzZTY0U3RyaW5nRXJyb3I6IHtcclxuICAgICAgICBjb2RlOiBpbnZhbGlkQmFzZTY0U3RyaW5nLFxyXG4gICAgICAgIGRlc2M6IEJyb3dzZXJBdXRoRXJyb3JNZXNzYWdlc1tpbnZhbGlkQmFzZTY0U3RyaW5nXSxcclxuICAgIH0sXHJcbiAgICBpbnZhbGlkUG9wVG9rZW5SZXF1ZXN0OiB7XHJcbiAgICAgICAgY29kZTogaW52YWxpZFBvcFRva2VuUmVxdWVzdCxcclxuICAgICAgICBkZXNjOiBCcm93c2VyQXV0aEVycm9yTWVzc2FnZXNbaW52YWxpZFBvcFRva2VuUmVxdWVzdF0sXHJcbiAgICB9LFxyXG59O1xyXG4vKipcclxuICogQnJvd3NlciBsaWJyYXJ5IGVycm9yIGNsYXNzIHRocm93biBieSB0aGUgTVNBTC5qcyBsaWJyYXJ5IGZvciBTUEFzXHJcbiAqL1xyXG5jbGFzcyBCcm93c2VyQXV0aEVycm9yIGV4dGVuZHMgQXV0aEVycm9yIHtcclxuICAgIGNvbnN0cnVjdG9yKGVycm9yQ29kZSwgc3ViRXJyb3IpIHtcclxuICAgICAgICBzdXBlcihlcnJvckNvZGUsIEJyb3dzZXJBdXRoRXJyb3JNZXNzYWdlc1tlcnJvckNvZGVdLCBzdWJFcnJvcik7XHJcbiAgICAgICAgT2JqZWN0LnNldFByb3RvdHlwZU9mKHRoaXMsIEJyb3dzZXJBdXRoRXJyb3IucHJvdG90eXBlKTtcclxuICAgICAgICB0aGlzLm5hbWUgPSBcIkJyb3dzZXJBdXRoRXJyb3JcIjtcclxuICAgIH1cclxufVxyXG5mdW5jdGlvbiBjcmVhdGVCcm93c2VyQXV0aEVycm9yKGVycm9yQ29kZSwgc3ViRXJyb3IpIHtcclxuICAgIHJldHVybiBuZXcgQnJvd3NlckF1dGhFcnJvcihlcnJvckNvZGUsIHN1YkVycm9yKTtcclxufVxuXG5leHBvcnQgeyBCcm93c2VyQXV0aEVycm9yLCBCcm93c2VyQXV0aEVycm9yTWVzc2FnZSwgQnJvd3NlckF1dGhFcnJvck1lc3NhZ2VzLCBjcmVhdGVCcm93c2VyQXV0aEVycm9yIH07XG4vLyMgc291cmNlTWFwcGluZ1VSTD1Ccm93c2VyQXV0aEVycm9yLm1qcy5tYXBcbiIsIi8qISBAYXp1cmUvbXNhbC1icm93c2VyIHYzLjI4LjEgMjAyNS0wMS0xNCAqL1xuJ3VzZSBzdHJpY3QnO1xuaW1wb3J0IHsgT0lEQ19ERUZBVUxUX1NDT1BFUyB9IGZyb20gJ0BhenVyZS9tc2FsLWNvbW1vbi9icm93c2VyJztcblxuLypcclxuICogQ29weXJpZ2h0IChjKSBNaWNyb3NvZnQgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuXHJcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgTGljZW5zZS5cclxuICovXHJcbi8qKlxyXG4gKiBDb25zdGFudHNcclxuICovXHJcbmNvbnN0IEJyb3dzZXJDb25zdGFudHMgPSB7XHJcbiAgICAvKipcclxuICAgICAqIEludGVyYWN0aW9uIGluIHByb2dyZXNzIGNhY2hlIHZhbHVlXHJcbiAgICAgKi9cclxuICAgIElOVEVSQUNUSU9OX0lOX1BST0dSRVNTX1ZBTFVFOiBcImludGVyYWN0aW9uX2luX3Byb2dyZXNzXCIsXHJcbiAgICAvKipcclxuICAgICAqIEludmFsaWQgZ3JhbnQgZXJyb3IgY29kZVxyXG4gICAgICovXHJcbiAgICBJTlZBTElEX0dSQU5UX0VSUk9SOiBcImludmFsaWRfZ3JhbnRcIixcclxuICAgIC8qKlxyXG4gICAgICogRGVmYXVsdCBwb3B1cCB3aW5kb3cgd2lkdGhcclxuICAgICAqL1xyXG4gICAgUE9QVVBfV0lEVEg6IDQ4MyxcclxuICAgIC8qKlxyXG4gICAgICogRGVmYXVsdCBwb3B1cCB3aW5kb3cgaGVpZ2h0XHJcbiAgICAgKi9cclxuICAgIFBPUFVQX0hFSUdIVDogNjAwLFxyXG4gICAgLyoqXHJcbiAgICAgKiBOYW1lIG9mIHRoZSBwb3B1cCB3aW5kb3cgc3RhcnRzIHdpdGhcclxuICAgICAqL1xyXG4gICAgUE9QVVBfTkFNRV9QUkVGSVg6IFwibXNhbFwiLFxyXG4gICAgLyoqXHJcbiAgICAgKiBEZWZhdWx0IHBvcHVwIG1vbml0b3IgcG9sbCBpbnRlcnZhbCBpbiBtaWxsaXNlY29uZHNcclxuICAgICAqL1xyXG4gICAgREVGQVVMVF9QT0xMX0lOVEVSVkFMX01TOiAzMCxcclxuICAgIC8qKlxyXG4gICAgICogTXNhbC1icm93c2VyIFNLVVxyXG4gICAgICovXHJcbiAgICBNU0FMX1NLVTogXCJtc2FsLmpzLmJyb3dzZXJcIixcclxufTtcclxuY29uc3QgTmF0aXZlQ29uc3RhbnRzID0ge1xyXG4gICAgQ0hBTk5FTF9JRDogXCI1M2VlMjg0ZC05MjBhLTRiNTktOWQzMC1hNjAzMTViMjY4MzZcIixcclxuICAgIFBSRUZFUlJFRF9FWFRFTlNJT05fSUQ6IFwicHBuYm5wZW9sZ2tpY2dlZ2tia2JqbWhsaWRlb3BpamlcIixcclxuICAgIE1BVFNfVEVMRU1FVFJZOiBcIk1BVFNcIixcclxufTtcclxuY29uc3QgTmF0aXZlRXh0ZW5zaW9uTWV0aG9kID0ge1xyXG4gICAgSGFuZHNoYWtlUmVxdWVzdDogXCJIYW5kc2hha2VcIixcclxuICAgIEhhbmRzaGFrZVJlc3BvbnNlOiBcIkhhbmRzaGFrZVJlc3BvbnNlXCIsXHJcbiAgICBHZXRUb2tlbjogXCJHZXRUb2tlblwiLFxyXG4gICAgUmVzcG9uc2U6IFwiUmVzcG9uc2VcIixcclxufTtcclxuY29uc3QgQnJvd3NlckNhY2hlTG9jYXRpb24gPSB7XHJcbiAgICBMb2NhbFN0b3JhZ2U6IFwibG9jYWxTdG9yYWdlXCIsXHJcbiAgICBTZXNzaW9uU3RvcmFnZTogXCJzZXNzaW9uU3RvcmFnZVwiLFxyXG4gICAgTWVtb3J5U3RvcmFnZTogXCJtZW1vcnlTdG9yYWdlXCIsXHJcbn07XHJcbi8qKlxyXG4gKiBIVFRQIFJlcXVlc3QgdHlwZXMgc3VwcG9ydGVkIGJ5IE1TQUwuXHJcbiAqL1xyXG5jb25zdCBIVFRQX1JFUVVFU1RfVFlQRSA9IHtcclxuICAgIEdFVDogXCJHRVRcIixcclxuICAgIFBPU1Q6IFwiUE9TVFwiLFxyXG59O1xyXG4vKipcclxuICogVGVtcG9yYXJ5IGNhY2hlIGtleXMgZm9yIE1TQUwsIGRlbGV0ZWQgYWZ0ZXIgYW55IHJlcXVlc3QuXHJcbiAqL1xyXG5jb25zdCBUZW1wb3JhcnlDYWNoZUtleXMgPSB7XHJcbiAgICBBVVRIT1JJVFk6IFwiYXV0aG9yaXR5XCIsXHJcbiAgICBBQ1FVSVJFX1RPS0VOX0FDQ09VTlQ6IFwiYWNxdWlyZVRva2VuLmFjY291bnRcIixcclxuICAgIFNFU1NJT05fU1RBVEU6IFwic2Vzc2lvbi5zdGF0ZVwiLFxyXG4gICAgUkVRVUVTVF9TVEFURTogXCJyZXF1ZXN0LnN0YXRlXCIsXHJcbiAgICBOT05DRV9JRFRPS0VOOiBcIm5vbmNlLmlkX3Rva2VuXCIsXHJcbiAgICBPUklHSU5fVVJJOiBcInJlcXVlc3Qub3JpZ2luXCIsXHJcbiAgICBSRU5FV19TVEFUVVM6IFwidG9rZW4ucmVuZXcuc3RhdHVzXCIsXHJcbiAgICBVUkxfSEFTSDogXCJ1cmxIYXNoXCIsXHJcbiAgICBSRVFVRVNUX1BBUkFNUzogXCJyZXF1ZXN0LnBhcmFtc1wiLFxyXG4gICAgU0NPUEVTOiBcInNjb3Blc1wiLFxyXG4gICAgSU5URVJBQ1RJT05fU1RBVFVTX0tFWTogXCJpbnRlcmFjdGlvbi5zdGF0dXNcIixcclxuICAgIENDU19DUkVERU5USUFMOiBcImNjcy5jcmVkZW50aWFsXCIsXHJcbiAgICBDT1JSRUxBVElPTl9JRDogXCJyZXF1ZXN0LmNvcnJlbGF0aW9uSWRcIixcclxuICAgIE5BVElWRV9SRVFVRVNUOiBcInJlcXVlc3QubmF0aXZlXCIsXHJcbiAgICBSRURJUkVDVF9DT05URVhUOiBcInJlcXVlc3QucmVkaXJlY3QuY29udGV4dFwiLFxyXG59O1xyXG5jb25zdCBTdGF0aWNDYWNoZUtleXMgPSB7XHJcbiAgICBBQ0NPVU5UX0tFWVM6IFwibXNhbC5hY2NvdW50LmtleXNcIixcclxuICAgIFRPS0VOX0tFWVM6IFwibXNhbC50b2tlbi5rZXlzXCIsXHJcbn07XHJcbi8qKlxyXG4gKiBDYWNoZSBrZXlzIHN0b3JlZCBpbi1tZW1vcnlcclxuICovXHJcbmNvbnN0IEluTWVtb3J5Q2FjaGVLZXlzID0ge1xyXG4gICAgV1JBUFBFUl9TS1U6IFwid3JhcHBlci5za3VcIixcclxuICAgIFdSQVBQRVJfVkVSOiBcIndyYXBwZXIudmVyc2lvblwiLFxyXG59O1xyXG4vKipcclxuICogQVBJIENvZGVzIGZvciBUZWxlbWV0cnkgcHVycG9zZXMuXHJcbiAqIEJlZm9yZSBhZGRpbmcgYSBuZXcgY29kZSB5b3UgbXVzdCBjbGFpbSBpdCBpbiB0aGUgTVNBTCBUZWxlbWV0cnkgdHJhY2tlciBhcyB0aGVzZSBudW1iZXIgc3BhY2VzIGFyZSBzaGFyZWQgYWNyb3NzIGFsbCBNU0FMc1xyXG4gKiAwLTk5IFNpbGVudCBGbG93XHJcbiAqIDgwMC04OTkgQXV0aCBDb2RlIEZsb3dcclxuICovXHJcbmNvbnN0IEFwaUlkID0ge1xyXG4gICAgYWNxdWlyZVRva2VuUmVkaXJlY3Q6IDg2MSxcclxuICAgIGFjcXVpcmVUb2tlblBvcHVwOiA4NjIsXHJcbiAgICBzc29TaWxlbnQ6IDg2MyxcclxuICAgIGFjcXVpcmVUb2tlblNpbGVudF9hdXRoQ29kZTogODY0LFxyXG4gICAgaGFuZGxlUmVkaXJlY3RQcm9taXNlOiA4NjUsXHJcbiAgICBhY3F1aXJlVG9rZW5CeUNvZGU6IDg2NixcclxuICAgIGFjcXVpcmVUb2tlblNpbGVudF9zaWxlbnRGbG93OiA2MSxcclxuICAgIGxvZ291dDogOTYxLFxyXG4gICAgbG9nb3V0UG9wdXA6IDk2MixcclxufTtcclxuLypcclxuICogSW50ZXJhY3Rpb24gdHlwZSBvZiB0aGUgQVBJIC0gdXNlZCBmb3Igc3RhdGUgYW5kIHRlbGVtZXRyeVxyXG4gKi9cclxudmFyIEludGVyYWN0aW9uVHlwZTtcclxuKGZ1bmN0aW9uIChJbnRlcmFjdGlvblR5cGUpIHtcclxuICAgIEludGVyYWN0aW9uVHlwZVtcIlJlZGlyZWN0XCJdID0gXCJyZWRpcmVjdFwiO1xyXG4gICAgSW50ZXJhY3Rpb25UeXBlW1wiUG9wdXBcIl0gPSBcInBvcHVwXCI7XHJcbiAgICBJbnRlcmFjdGlvblR5cGVbXCJTaWxlbnRcIl0gPSBcInNpbGVudFwiO1xyXG4gICAgSW50ZXJhY3Rpb25UeXBlW1wiTm9uZVwiXSA9IFwibm9uZVwiO1xyXG59KShJbnRlcmFjdGlvblR5cGUgfHwgKEludGVyYWN0aW9uVHlwZSA9IHt9KSk7XHJcbi8qKlxyXG4gKiBUeXBlcyBvZiBpbnRlcmFjdGlvbiBjdXJyZW50bHkgaW4gcHJvZ3Jlc3MuXHJcbiAqIFVzZWQgaW4gZXZlbnRzIGluIHdyYXBwZXIgbGlicmFyaWVzIHRvIGludm9rZSBmdW5jdGlvbnMgd2hlbiBjZXJ0YWluIGludGVyYWN0aW9uIGlzIGluIHByb2dyZXNzIG9yIGFsbCBpbnRlcmFjdGlvbnMgYXJlIGNvbXBsZXRlLlxyXG4gKi9cclxuY29uc3QgSW50ZXJhY3Rpb25TdGF0dXMgPSB7XHJcbiAgICAvKipcclxuICAgICAqIEluaXRpYWwgc3RhdHVzIGJlZm9yZSBpbnRlcmFjdGlvbiBvY2N1cnNcclxuICAgICAqL1xyXG4gICAgU3RhcnR1cDogXCJzdGFydHVwXCIsXHJcbiAgICAvKipcclxuICAgICAqIFN0YXR1cyBzZXQgd2hlbiBhbGwgbG9naW4gY2FsbHMgb2NjdXJpbmdcclxuICAgICAqL1xyXG4gICAgTG9naW46IFwibG9naW5cIixcclxuICAgIC8qKlxyXG4gICAgICogU3RhdHVzIHNldCB3aGVuIGxvZ291dCBjYWxsIG9jY3VyaW5nXHJcbiAgICAgKi9cclxuICAgIExvZ291dDogXCJsb2dvdXRcIixcclxuICAgIC8qKlxyXG4gICAgICogU3RhdHVzIHNldCBmb3IgYWNxdWlyZVRva2VuIGNhbGxzXHJcbiAgICAgKi9cclxuICAgIEFjcXVpcmVUb2tlbjogXCJhY3F1aXJlVG9rZW5cIixcclxuICAgIC8qKlxyXG4gICAgICogU3RhdHVzIHNldCBmb3Igc3NvU2lsZW50IGNhbGxzXHJcbiAgICAgKi9cclxuICAgIFNzb1NpbGVudDogXCJzc29TaWxlbnRcIixcclxuICAgIC8qKlxyXG4gICAgICogU3RhdHVzIHNldCB3aGVuIGhhbmRsZVJlZGlyZWN0IGluIHByb2dyZXNzXHJcbiAgICAgKi9cclxuICAgIEhhbmRsZVJlZGlyZWN0OiBcImhhbmRsZVJlZGlyZWN0XCIsXHJcbiAgICAvKipcclxuICAgICAqIFN0YXR1cyBzZXQgd2hlbiBpbnRlcmFjdGlvbiBpcyBjb21wbGV0ZVxyXG4gICAgICovXHJcbiAgICBOb25lOiBcIm5vbmVcIixcclxufTtcclxuY29uc3QgREVGQVVMVF9SRVFVRVNUID0ge1xyXG4gICAgc2NvcGVzOiBPSURDX0RFRkFVTFRfU0NPUEVTLFxyXG59O1xyXG4vKipcclxuICogSldLIEtleSBGb3JtYXQgc3RyaW5nIChUeXBlIE1VU1QgYmUgZGVmaW5lZCBmb3Igd2luZG93IGNyeXB0byBBUElzKVxyXG4gKi9cclxuY29uc3QgS0VZX0ZPUk1BVF9KV0sgPSBcImp3a1wiO1xyXG4vLyBTdXBwb3J0ZWQgd3JhcHBlciBTS1VzXHJcbmNvbnN0IFdyYXBwZXJTS1UgPSB7XHJcbiAgICBSZWFjdDogXCJAYXp1cmUvbXNhbC1yZWFjdFwiLFxyXG4gICAgQW5ndWxhcjogXCJAYXp1cmUvbXNhbC1hbmd1bGFyXCIsXHJcbn07XHJcbi8vIERhdGFiYXNlU3RvcmFnZSBDb25zdGFudHNcclxuY29uc3QgREJfTkFNRSA9IFwibXNhbC5kYlwiO1xyXG5jb25zdCBEQl9WRVJTSU9OID0gMTtcclxuY29uc3QgREJfVEFCTEVfTkFNRSA9IGAke0RCX05BTUV9LmtleXNgO1xyXG5jb25zdCBDYWNoZUxvb2t1cFBvbGljeSA9IHtcclxuICAgIC8qXHJcbiAgICAgKiBhY3F1aXJlVG9rZW5TaWxlbnQgd2lsbCBhdHRlbXB0IHRvIHJldHJpZXZlIGFuIGFjY2VzcyB0b2tlbiBmcm9tIHRoZSBjYWNoZS4gSWYgdGhlIGFjY2VzcyB0b2tlbiBpcyBleHBpcmVkXHJcbiAgICAgKiBvciBjYW5ub3QgYmUgZm91bmQgdGhlIHJlZnJlc2ggdG9rZW4gd2lsbCBiZSB1c2VkIHRvIGFjcXVpcmUgYSBuZXcgb25lLiBGaW5hbGx5LCBpZiB0aGUgcmVmcmVzaCB0b2tlblxyXG4gICAgICogaXMgZXhwaXJlZCBhY3F1aXJlVG9rZW5TaWxlbnQgd2lsbCBhdHRlbXB0IHRvIGFjcXVpcmUgbmV3IGFjY2VzcyBhbmQgcmVmcmVzaCB0b2tlbnMuXHJcbiAgICAgKi9cclxuICAgIERlZmF1bHQ6IDAsXHJcbiAgICAvKlxyXG4gICAgICogYWNxdWlyZVRva2VuU2lsZW50IHdpbGwgb25seSBsb29rIGZvciBhY2Nlc3MgdG9rZW5zIGluIHRoZSBjYWNoZS4gSXQgd2lsbCBub3QgYXR0ZW1wdCB0byByZW5ldyBhY2Nlc3Mgb3JcclxuICAgICAqIHJlZnJlc2ggdG9rZW5zLlxyXG4gICAgICovXHJcbiAgICBBY2Nlc3NUb2tlbjogMSxcclxuICAgIC8qXHJcbiAgICAgKiBhY3F1aXJlVG9rZW5TaWxlbnQgd2lsbCBhdHRlbXB0IHRvIHJldHJpZXZlIGFuIGFjY2VzcyB0b2tlbiBmcm9tIHRoZSBjYWNoZS4gSWYgdGhlIGFjY2VzcyB0b2tlbiBpcyBleHBpcmVkIG9yXHJcbiAgICAgKiBjYW5ub3QgYmUgZm91bmQsIHRoZSByZWZyZXNoIHRva2VuIHdpbGwgYmUgdXNlZCB0byBhY3F1aXJlIGEgbmV3IG9uZS4gSWYgdGhlIHJlZnJlc2ggdG9rZW4gaXMgZXhwaXJlZCwgaXRcclxuICAgICAqIHdpbGwgbm90IGJlIHJlbmV3ZWQgYW5kIGFjcXVpcmVUb2tlblNpbGVudCB3aWxsIGZhaWwuXHJcbiAgICAgKi9cclxuICAgIEFjY2Vzc1Rva2VuQW5kUmVmcmVzaFRva2VuOiAyLFxyXG4gICAgLypcclxuICAgICAqIGFjcXVpcmVUb2tlblNpbGVudCB3aWxsIG5vdCBhdHRlbXB0IHRvIHJldHJpZXZlIGFjY2VzcyB0b2tlbnMgZnJvbSB0aGUgY2FjaGUgYW5kIHdpbGwgaW5zdGVhZCBhdHRlbXB0IHRvXHJcbiAgICAgKiBleGNoYW5nZSB0aGUgY2FjaGVkIHJlZnJlc2ggdG9rZW4gZm9yIGEgbmV3IGFjY2VzcyB0b2tlbi4gSWYgdGhlIHJlZnJlc2ggdG9rZW4gaXMgZXhwaXJlZCwgaXQgd2lsbCBub3QgYmVcclxuICAgICAqIHJlbmV3ZWQgYW5kIGFjcXVpcmVUb2tlblNpbGVudCB3aWxsIGZhaWwuXHJcbiAgICAgKi9cclxuICAgIFJlZnJlc2hUb2tlbjogMyxcclxuICAgIC8qXHJcbiAgICAgKiBhY3F1aXJlVG9rZW5TaWxlbnQgd2lsbCBub3QgbG9vayBpbiB0aGUgY2FjaGUgZm9yIHRoZSBhY2Nlc3MgdG9rZW4uIEl0IHdpbGwgZ28gZGlyZWN0bHkgdG8gbmV0d29yayB3aXRoIHRoZVxyXG4gICAgICogY2FjaGVkIHJlZnJlc2ggdG9rZW4uIElmIHRoZSByZWZyZXNoIHRva2VuIGlzIGV4cGlyZWQgYW4gYXR0ZW1wdCB3aWxsIGJlIG1hZGUgdG8gcmVuZXcgaXQuIFRoaXMgaXMgZXF1aXZhbGVudCB0b1xyXG4gICAgICogc2V0dGluZyBcImZvcmNlUmVmcmVzaDogdHJ1ZVwiLlxyXG4gICAgICovXHJcbiAgICBSZWZyZXNoVG9rZW5BbmROZXR3b3JrOiA0LFxyXG4gICAgLypcclxuICAgICAqIGFjcXVpcmVUb2tlblNpbGVudCB3aWxsIGF0dGVtcHQgdG8gcmVuZXcgYm90aCBhY2Nlc3MgYW5kIHJlZnJlc2ggdG9rZW5zLiBJdCB3aWxsIG5vdCBsb29rIGluIHRoZSBjYWNoZS4gVGhpcyB3aWxsXHJcbiAgICAgKiBhbHdheXMgZmFpbCBpZiAzcmQgcGFydHkgY29va2llcyBhcmUgYmxvY2tlZCBieSB0aGUgYnJvd3Nlci5cclxuICAgICAqL1xyXG4gICAgU2tpcDogNSxcclxufTtcclxuY29uc3QgaUZyYW1lUmVuZXdhbFBvbGljaWVzID0gW1xyXG4gICAgQ2FjaGVMb29rdXBQb2xpY3kuRGVmYXVsdCxcclxuICAgIENhY2hlTG9va3VwUG9saWN5LlNraXAsXHJcbiAgICBDYWNoZUxvb2t1cFBvbGljeS5SZWZyZXNoVG9rZW5BbmROZXR3b3JrLFxyXG5dO1xyXG5jb25zdCBMT0dfTEVWRUxfQ0FDSEVfS0VZID0gXCJtc2FsLmJyb3dzZXIubG9nLmxldmVsXCI7XHJcbmNvbnN0IExPR19QSUlfQ0FDSEVfS0VZID0gXCJtc2FsLmJyb3dzZXIubG9nLnBpaVwiO1xyXG5jb25zdCBCUk9XU0VSX1BFUkZfRU5BQkxFRF9LRVkgPSBcIm1zYWwuYnJvd3Nlci5wZXJmb3JtYW5jZS5lbmFibGVkXCI7XG5cbmV4cG9ydCB7IEFwaUlkLCBCUk9XU0VSX1BFUkZfRU5BQkxFRF9LRVksIEJyb3dzZXJDYWNoZUxvY2F0aW9uLCBCcm93c2VyQ29uc3RhbnRzLCBDYWNoZUxvb2t1cFBvbGljeSwgREJfTkFNRSwgREJfVEFCTEVfTkFNRSwgREJfVkVSU0lPTiwgREVGQVVMVF9SRVFVRVNULCBIVFRQX1JFUVVFU1RfVFlQRSwgSW5NZW1vcnlDYWNoZUtleXMsIEludGVyYWN0aW9uU3RhdHVzLCBJbnRlcmFjdGlvblR5cGUsIEtFWV9GT1JNQVRfSldLLCBMT0dfTEVWRUxfQ0FDSEVfS0VZLCBMT0dfUElJX0NBQ0hFX0tFWSwgTmF0aXZlQ29uc3RhbnRzLCBOYXRpdmVFeHRlbnNpb25NZXRob2QsIFN0YXRpY0NhY2hlS2V5cywgVGVtcG9yYXJ5Q2FjaGVLZXlzLCBXcmFwcGVyU0tVLCBpRnJhbWVSZW5ld2FsUG9saWNpZXMgfTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPUJyb3dzZXJDb25zdGFudHMubWpzLm1hcFxuIiwiLyohIEBhenVyZS9tc2FsLWNvbW1vbiB2MTQuMTYuMCAyMDI0LTExLTA1ICovXG4ndXNlIHN0cmljdCc7XG4vKlxyXG4gKiBDb3B5cmlnaHQgKGMpIE1pY3Jvc29mdCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cclxuICogTGljZW5zZWQgdW5kZXIgdGhlIE1JVCBMaWNlbnNlLlxyXG4gKi9cclxuLyoqXHJcbiAqIEVudW1lcmF0aW9uIG9mIG9wZXJhdGlvbnMgdGhhdCBhcmUgaW5zdHJ1bWVudGVkIGJ5IGhhdmUgdGhlaXIgcGVyZm9ybWFuY2UgbWVhc3VyZWQgYnkgdGhlIFBlcmZvcm1hbmNlQ2xpZW50LlxyXG4gKlxyXG4gKiBAZXhwb3J0XHJcbiAqIEBlbnVtIHtudW1iZXJ9XHJcbiAqL1xyXG5jb25zdCBQZXJmb3JtYW5jZUV2ZW50cyA9IHtcclxuICAgIC8qKlxyXG4gICAgICogYWNxdWlyZVRva2VuQnlDb2RlIEFQSSAobXNhbC1icm93c2VyIGFuZCBtc2FsLW5vZGUpLlxyXG4gICAgICogVXNlZCB0byBhY3F1aXJlIHRva2VucyBieSB0cmFkaW5nIGFuIGF1dGhvcml6YXRpb24gY29kZSBhZ2FpbnN0IHRoZSB0b2tlbiBlbmRwb2ludC5cclxuICAgICAqL1xyXG4gICAgQWNxdWlyZVRva2VuQnlDb2RlOiBcImFjcXVpcmVUb2tlbkJ5Q29kZVwiLFxyXG4gICAgLyoqXHJcbiAgICAgKiBhY3F1aXJlVG9rZW5CeVJlZnJlc2hUb2tlbiBBUEkgKG1zYWwtYnJvd3NlciBhbmQgbXNhbC1ub2RlKS5cclxuICAgICAqIFVzZWQgdG8gcmVuZXcgYW4gYWNjZXNzIHRva2VuIHVzaW5nIGEgcmVmcmVzaCB0b2tlbiBhZ2FpbnN0IHRoZSB0b2tlbiBlbmRwb2ludC5cclxuICAgICAqL1xyXG4gICAgQWNxdWlyZVRva2VuQnlSZWZyZXNoVG9rZW46IFwiYWNxdWlyZVRva2VuQnlSZWZyZXNoVG9rZW5cIixcclxuICAgIC8qKlxyXG4gICAgICogYWNxdWlyZVRva2VuU2lsZW50IEFQSSAobXNhbC1icm93c2VyIGFuZCBtc2FsLW5vZGUpLlxyXG4gICAgICogVXNlZCB0byBzaWxlbnRseSBhY3F1aXJlIGEgbmV3IGFjY2VzcyB0b2tlbiAoZnJvbSB0aGUgY2FjaGUgb3IgdGhlIG5ldHdvcmspLlxyXG4gICAgICovXHJcbiAgICBBY3F1aXJlVG9rZW5TaWxlbnQ6IFwiYWNxdWlyZVRva2VuU2lsZW50XCIsXHJcbiAgICAvKipcclxuICAgICAqIGFjcXVpcmVUb2tlblNpbGVudEFzeW5jIChtc2FsLWJyb3dzZXIpLlxyXG4gICAgICogSW50ZXJuYWwgQVBJIGZvciBhY3F1aXJlVG9rZW5TaWxlbnQuXHJcbiAgICAgKi9cclxuICAgIEFjcXVpcmVUb2tlblNpbGVudEFzeW5jOiBcImFjcXVpcmVUb2tlblNpbGVudEFzeW5jXCIsXHJcbiAgICAvKipcclxuICAgICAqIGFjcXVpcmVUb2tlblBvcHVwIChtc2FsLWJyb3dzZXIpLlxyXG4gICAgICogVXNlZCB0byBhY3F1aXJlIGEgbmV3IGFjY2VzcyB0b2tlbiBpbnRlcmFjdGl2ZWx5IHRocm91Z2ggcG9wIHVwc1xyXG4gICAgICovXHJcbiAgICBBY3F1aXJlVG9rZW5Qb3B1cDogXCJhY3F1aXJlVG9rZW5Qb3B1cFwiLFxyXG4gICAgLyoqXHJcbiAgICAgKiBhY3F1aXJlVG9rZW5QcmVSZWRpcmVjdCAobXNhbC1icm93c2VyKS5cclxuICAgICAqIEZpcnN0IHBhcnQgb2YgdGhlIHJlZGlyZWN0IGZsb3cuXHJcbiAgICAgKiBVc2VkIHRvIGFjcXVpcmUgYSBuZXcgYWNjZXNzIHRva2VuIGludGVyYWN0aXZlbHkgdGhyb3VnaCByZWRpcmVjdHMuXHJcbiAgICAgKi9cclxuICAgIEFjcXVpcmVUb2tlblByZVJlZGlyZWN0OiBcImFjcXVpcmVUb2tlblByZVJlZGlyZWN0XCIsXHJcbiAgICAvKipcclxuICAgICAqIGFjcXVpcmVUb2tlblJlZGlyZWN0IChtc2FsLWJyb3dzZXIpLlxyXG4gICAgICogU2Vjb25kIHBhcnQgb2YgdGhlIHJlZGlyZWN0IGZsb3cuXHJcbiAgICAgKiBVc2VkIHRvIGFjcXVpcmUgYSBuZXcgYWNjZXNzIHRva2VuIGludGVyYWN0aXZlbHkgdGhyb3VnaCByZWRpcmVjdHMuXHJcbiAgICAgKi9cclxuICAgIEFjcXVpcmVUb2tlblJlZGlyZWN0OiBcImFjcXVpcmVUb2tlblJlZGlyZWN0XCIsXHJcbiAgICAvKipcclxuICAgICAqIGdldFB1YmxpY0tleVRodW1icHJpbnQgQVBJIGluIENyeXB0b09wdHMgY2xhc3MgKG1zYWwtYnJvd3NlcikuXHJcbiAgICAgKiBVc2VkIHRvIGdlbmVyYXRlIGEgcHVibGljL3ByaXZhdGUga2V5cGFpciBhbmQgZ2VuZXJhdGUgYSBwdWJsaWMga2V5IHRodW1icHJpbnQgZm9yIHBvcCByZXF1ZXN0cy5cclxuICAgICAqL1xyXG4gICAgQ3J5cHRvT3B0c0dldFB1YmxpY0tleVRodW1icHJpbnQ6IFwiY3J5cHRvT3B0c0dldFB1YmxpY0tleVRodW1icHJpbnRcIixcclxuICAgIC8qKlxyXG4gICAgICogc2lnbkp3dCBBUEkgaW4gQ3J5cHRvT3B0cyBjbGFzcyAobXNhbC1icm93c2VyKS5cclxuICAgICAqIFVzZWQgdG8gc2lnbmVkIGEgcG9wIHRva2VuLlxyXG4gICAgICovXHJcbiAgICBDcnlwdG9PcHRzU2lnbkp3dDogXCJjcnlwdG9PcHRzU2lnbkp3dFwiLFxyXG4gICAgLyoqXHJcbiAgICAgKiBhY3F1aXJlVG9rZW4gQVBJIGluIHRoZSBTaWxlbnRDYWNoZUNsaWVudCBjbGFzcyAobXNhbC1icm93c2VyKS5cclxuICAgICAqIFVzZWQgdG8gcmVhZCBhY2Nlc3MgdG9rZW5zIGZyb20gdGhlIGNhY2hlLlxyXG4gICAgICovXHJcbiAgICBTaWxlbnRDYWNoZUNsaWVudEFjcXVpcmVUb2tlbjogXCJzaWxlbnRDYWNoZUNsaWVudEFjcXVpcmVUb2tlblwiLFxyXG4gICAgLyoqXHJcbiAgICAgKiBhY3F1aXJlVG9rZW4gQVBJIGluIHRoZSBTaWxlbnRJZnJhbWVDbGllbnQgY2xhc3MgKG1zYWwtYnJvd3NlcikuXHJcbiAgICAgKiBVc2VkIHRvIGFjcXVpcmUgYSBuZXcgc2V0IG9mIHRva2VucyBmcm9tIHRoZSBhdXRob3JpemUgZW5kcG9pbnQgaW4gYSBoaWRkZW4gaWZyYW1lLlxyXG4gICAgICovXHJcbiAgICBTaWxlbnRJZnJhbWVDbGllbnRBY3F1aXJlVG9rZW46IFwic2lsZW50SWZyYW1lQ2xpZW50QWNxdWlyZVRva2VuXCIsXHJcbiAgICBBd2FpdENvbmN1cnJlbnRJZnJhbWU6IFwiYXdhaXRDb25jdXJyZW50SWZyYW1lXCIsXHJcbiAgICAvKipcclxuICAgICAqIGFjcXVpcmVUb2tlbiBBUEkgaW4gU2lsZW50UmVyZXNoQ2xpZW50IChtc2FsLWJyb3dzZXIpLlxyXG4gICAgICogVXNlZCB0byBhY3F1aXJlIGEgbmV3IHNldCBvZiB0b2tlbnMgZnJvbSB0aGUgdG9rZW4gZW5kcG9pbnQgdXNpbmcgYSByZWZyZXNoIHRva2VuLlxyXG4gICAgICovXHJcbiAgICBTaWxlbnRSZWZyZXNoQ2xpZW50QWNxdWlyZVRva2VuOiBcInNpbGVudFJlZnJlc2hDbGllbnRBY3F1aXJlVG9rZW5cIixcclxuICAgIC8qKlxyXG4gICAgICogc3NvU2lsZW50IEFQSSAobXNhbC1icm93c2VyKS5cclxuICAgICAqIFVzZWQgdG8gc2lsZW50bHkgYWNxdWlyZSBhbiBhdXRob3JpemF0aW9uIGNvZGUgYW5kIHNldCBvZiB0b2tlbnMgdXNpbmcgYSBoaWRkZW4gaWZyYW1lLlxyXG4gICAgICovXHJcbiAgICBTc29TaWxlbnQ6IFwic3NvU2lsZW50XCIsXHJcbiAgICAvKipcclxuICAgICAqIGdldERpc2NvdmVyZWRBdXRob3JpdHkgQVBJIGluIFN0YW5kYXJkSW50ZXJhY3Rpb25DbGllbnQgY2xhc3MgKG1zYWwtYnJvd3NlcikuXHJcbiAgICAgKiBVc2VkIHRvIGxvYWQgYXV0aG9yaXR5IG1ldGFkYXRhIGZvciBhIHJlcXVlc3QuXHJcbiAgICAgKi9cclxuICAgIFN0YW5kYXJkSW50ZXJhY3Rpb25DbGllbnRHZXREaXNjb3ZlcmVkQXV0aG9yaXR5OiBcInN0YW5kYXJkSW50ZXJhY3Rpb25DbGllbnRHZXREaXNjb3ZlcmVkQXV0aG9yaXR5XCIsXHJcbiAgICAvKipcclxuICAgICAqIGFjcXVpcmVUb2tlbiBBUElzIGluIG1zYWwtYnJvd3Nlci5cclxuICAgICAqIFVzZWQgdG8gbWFrZSBhbiAvYXV0aG9yaXplIGVuZHBvaW50IGNhbGwgd2l0aCBuYXRpdmUgYnJva2VyaW5nIGVuYWJsZWQuXHJcbiAgICAgKi9cclxuICAgIEZldGNoQWNjb3VudElkV2l0aE5hdGl2ZUJyb2tlcjogXCJmZXRjaEFjY291bnRJZFdpdGhOYXRpdmVCcm9rZXJcIixcclxuICAgIC8qKlxyXG4gICAgICogYWNxdWlyZVRva2VuIEFQSSBpbiBOYXRpdmVJbnRlcmFjdGlvbkNsaWVudCBjbGFzcyAobXNhbC1icm93c2VyKS5cclxuICAgICAqIFVzZWQgdG8gYWNxdWlyZSBhIHRva2VuIGZyb20gTmF0aXZlIGNvbXBvbmVudCB3aGVuIG5hdGl2ZSBicm9rZXJpbmcgaXMgZW5hYmxlZC5cclxuICAgICAqL1xyXG4gICAgTmF0aXZlSW50ZXJhY3Rpb25DbGllbnRBY3F1aXJlVG9rZW46IFwibmF0aXZlSW50ZXJhY3Rpb25DbGllbnRBY3F1aXJlVG9rZW5cIixcclxuICAgIC8qKlxyXG4gICAgICogVGltZSBzcGVudCBjcmVhdGluZyBkZWZhdWx0IGhlYWRlcnMgZm9yIHJlcXVlc3RzIHRvIHRva2VuIGVuZHBvaW50XHJcbiAgICAgKi9cclxuICAgIEJhc2VDbGllbnRDcmVhdGVUb2tlblJlcXVlc3RIZWFkZXJzOiBcImJhc2VDbGllbnRDcmVhdGVUb2tlblJlcXVlc3RIZWFkZXJzXCIsXHJcbiAgICAvKipcclxuICAgICAqIFRpbWUgc3BlbnQgc2VuZGluZy93YWl0aW5nIGZvciB0aGUgcmVzcG9uc2Ugb2YgYSByZXF1ZXN0IHRvIHRoZSB0b2tlbiBlbmRwb2ludFxyXG4gICAgICovXHJcbiAgICBOZXR3b3JrQ2xpZW50U2VuZFBvc3RSZXF1ZXN0QXN5bmM6IFwibmV0d29ya0NsaWVudFNlbmRQb3N0UmVxdWVzdEFzeW5jXCIsXHJcbiAgICBSZWZyZXNoVG9rZW5DbGllbnRFeGVjdXRlUG9zdFRvVG9rZW5FbmRwb2ludDogXCJyZWZyZXNoVG9rZW5DbGllbnRFeGVjdXRlUG9zdFRvVG9rZW5FbmRwb2ludFwiLFxyXG4gICAgQXV0aG9yaXphdGlvbkNvZGVDbGllbnRFeGVjdXRlUG9zdFRvVG9rZW5FbmRwb2ludDogXCJhdXRob3JpemF0aW9uQ29kZUNsaWVudEV4ZWN1dGVQb3N0VG9Ub2tlbkVuZHBvaW50XCIsXHJcbiAgICAvKipcclxuICAgICAqIFVzZWQgdG8gbWVhc3VyZSB0aGUgdGltZSB0YWtlbiBmb3IgY29tcGxldGluZyBlbWJlZGRlZC1icm9rZXIgaGFuZHNoYWtlIChQVy1Ccm9rZXIpLlxyXG4gICAgICovXHJcbiAgICBCcm9rZXJIYW5kaHNoYWtlOiBcImJyb2tlckhhbmRzaGFrZVwiLFxyXG4gICAgLyoqXHJcbiAgICAgKiBhY3F1aXJlVG9rZW5CeVJlZnJlc2hUb2tlbiBBUEkgaW4gQnJva2VyQ2xpZW50QXBwbGljYXRpb24gKFBXLUJyb2tlcikgLlxyXG4gICAgICovXHJcbiAgICBBY3F1aXJlVG9rZW5CeVJlZnJlc2hUb2tlbkluQnJva2VyOiBcImFjcXVpcmVUb2tlbkJ5UmVmcmVzaFRva2VuSW5Ccm9rZXJcIixcclxuICAgIC8qKlxyXG4gICAgICogVGltZSB0YWtlbiBmb3IgdG9rZW4gYWNxdWlzaXRpb24gYnkgYnJva2VyXHJcbiAgICAgKi9cclxuICAgIEFjcXVpcmVUb2tlbkJ5QnJva2VyOiBcImFjcXVpcmVUb2tlbkJ5QnJva2VyXCIsXHJcbiAgICAvKipcclxuICAgICAqIFRpbWUgc3BlbnQgb24gdGhlIG5ldHdvcmsgZm9yIHJlZnJlc2ggdG9rZW4gYWNxdWlzaXRpb25cclxuICAgICAqL1xyXG4gICAgUmVmcmVzaFRva2VuQ2xpZW50RXhlY3V0ZVRva2VuUmVxdWVzdDogXCJyZWZyZXNoVG9rZW5DbGllbnRFeGVjdXRlVG9rZW5SZXF1ZXN0XCIsXHJcbiAgICAvKipcclxuICAgICAqIFRpbWUgdGFrZW4gZm9yIGFjcXVpcmluZyByZWZyZXNoIHRva2VuICwgcmVjb3JkcyBSVCBzaXplXHJcbiAgICAgKi9cclxuICAgIFJlZnJlc2hUb2tlbkNsaWVudEFjcXVpcmVUb2tlbjogXCJyZWZyZXNoVG9rZW5DbGllbnRBY3F1aXJlVG9rZW5cIixcclxuICAgIC8qKlxyXG4gICAgICogVGltZSB0YWtlbiBmb3IgYWNxdWlyaW5nIGNhY2hlZCByZWZyZXNoIHRva2VuXHJcbiAgICAgKi9cclxuICAgIFJlZnJlc2hUb2tlbkNsaWVudEFjcXVpcmVUb2tlbldpdGhDYWNoZWRSZWZyZXNoVG9rZW46IFwicmVmcmVzaFRva2VuQ2xpZW50QWNxdWlyZVRva2VuV2l0aENhY2hlZFJlZnJlc2hUb2tlblwiLFxyXG4gICAgLyoqXHJcbiAgICAgKiBhY3F1aXJlVG9rZW5CeVJlZnJlc2hUb2tlbiBBUEkgaW4gUmVmcmVzaFRva2VuQ2xpZW50IChtc2FsLWNvbW1vbikuXHJcbiAgICAgKi9cclxuICAgIFJlZnJlc2hUb2tlbkNsaWVudEFjcXVpcmVUb2tlbkJ5UmVmcmVzaFRva2VuOiBcInJlZnJlc2hUb2tlbkNsaWVudEFjcXVpcmVUb2tlbkJ5UmVmcmVzaFRva2VuXCIsXHJcbiAgICAvKipcclxuICAgICAqIEhlbHBlciBmdW5jdGlvbiB0byBjcmVhdGUgdG9rZW4gcmVxdWVzdCBib2R5IGluIFJlZnJlc2hUb2tlbkNsaWVudCAobXNhbC1jb21tb24pLlxyXG4gICAgICovXHJcbiAgICBSZWZyZXNoVG9rZW5DbGllbnRDcmVhdGVUb2tlblJlcXVlc3RCb2R5OiBcInJlZnJlc2hUb2tlbkNsaWVudENyZWF0ZVRva2VuUmVxdWVzdEJvZHlcIixcclxuICAgIC8qKlxyXG4gICAgICogYWNxdWlyZVRva2VuRnJvbUNhY2hlIChtc2FsLWJyb3dzZXIpLlxyXG4gICAgICogSW50ZXJuYWwgQVBJIGZvciBhY3F1aXJpbmcgdG9rZW4gZnJvbSBjYWNoZVxyXG4gICAgICovXHJcbiAgICBBY3F1aXJlVG9rZW5Gcm9tQ2FjaGU6IFwiYWNxdWlyZVRva2VuRnJvbUNhY2hlXCIsXHJcbiAgICBTaWxlbnRGbG93Q2xpZW50QWNxdWlyZUNhY2hlZFRva2VuOiBcInNpbGVudEZsb3dDbGllbnRBY3F1aXJlQ2FjaGVkVG9rZW5cIixcclxuICAgIFNpbGVudEZsb3dDbGllbnRHZW5lcmF0ZVJlc3VsdEZyb21DYWNoZVJlY29yZDogXCJzaWxlbnRGbG93Q2xpZW50R2VuZXJhdGVSZXN1bHRGcm9tQ2FjaGVSZWNvcmRcIixcclxuICAgIC8qKlxyXG4gICAgICogYWNxdWlyZVRva2VuQnlTaWxlbnRJZnJhbWUgKG1zYWwtYnJvd3NlcikuXHJcbiAgICAgKiBJbnRlcm5hbCBBUEkgZm9yIGFjcXVpcmluZyB0b2tlbiBieSBzaWxlbnQgSWZyYW1lXHJcbiAgICAgKi9cclxuICAgIEFjcXVpcmVUb2tlbkJ5U2lsZW50SWZyYW1lOiBcImFjcXVpcmVUb2tlbkJ5U2lsZW50SWZyYW1lXCIsXHJcbiAgICAvKipcclxuICAgICAqIEludGVybmFsIEFQSSBmb3IgaW5pdGlhbGl6aW5nIGJhc2UgcmVxdWVzdCBpbiBCYXNlSW50ZXJhY3Rpb25DbGllbnQgKG1zYWwtYnJvd3NlcilcclxuICAgICAqL1xyXG4gICAgSW5pdGlhbGl6ZUJhc2VSZXF1ZXN0OiBcImluaXRpYWxpemVCYXNlUmVxdWVzdFwiLFxyXG4gICAgLyoqXHJcbiAgICAgKiBJbnRlcm5hbCBBUEkgZm9yIGluaXRpYWxpemluZyBzaWxlbnQgcmVxdWVzdCBpbiBTaWxlbnRDYWNoZUNsaWVudCAobXNhbC1icm93c2VyKVxyXG4gICAgICovXHJcbiAgICBJbml0aWFsaXplU2lsZW50UmVxdWVzdDogXCJpbml0aWFsaXplU2lsZW50UmVxdWVzdFwiLFxyXG4gICAgSW5pdGlhbGl6ZUNsaWVudEFwcGxpY2F0aW9uOiBcImluaXRpYWxpemVDbGllbnRBcHBsaWNhdGlvblwiLFxyXG4gICAgLyoqXHJcbiAgICAgKiBIZWxwZXIgZnVuY3Rpb24gaW4gU2lsZW50SWZyYW1lQ2xpZW50IGNsYXNzIChtc2FsLWJyb3dzZXIpLlxyXG4gICAgICovXHJcbiAgICBTaWxlbnRJZnJhbWVDbGllbnRUb2tlbkhlbHBlcjogXCJzaWxlbnRJZnJhbWVDbGllbnRUb2tlbkhlbHBlclwiLFxyXG4gICAgLyoqXHJcbiAgICAgKiBTaWxlbnRIYW5kbGVyXHJcbiAgICAgKi9cclxuICAgIFNpbGVudEhhbmRsZXJJbml0aWF0ZUF1dGhSZXF1ZXN0OiBcInNpbGVudEhhbmRsZXJJbml0aWF0ZUF1dGhSZXF1ZXN0XCIsXHJcbiAgICBTaWxlbnRIYW5kbGVyTW9uaXRvcklmcmFtZUZvckhhc2g6IFwic2lsZW50SGFuZGxlck1vbml0b3JJZnJhbWVGb3JIYXNoXCIsXHJcbiAgICBTaWxlbnRIYW5kbGVyTG9hZEZyYW1lOiBcInNpbGVudEhhbmRsZXJMb2FkRnJhbWVcIixcclxuICAgIFNpbGVudEhhbmRsZXJMb2FkRnJhbWVTeW5jOiBcInNpbGVudEhhbmRsZXJMb2FkRnJhbWVTeW5jXCIsXHJcbiAgICAvKipcclxuICAgICAqIEhlbHBlciBmdW5jdGlvbnMgaW4gU3RhbmRhcmRJbnRlcmFjdGlvbkNsaWVudCBjbGFzcyAobXNhbC1icm93c2VyKVxyXG4gICAgICovXHJcbiAgICBTdGFuZGFyZEludGVyYWN0aW9uQ2xpZW50Q3JlYXRlQXV0aENvZGVDbGllbnQ6IFwic3RhbmRhcmRJbnRlcmFjdGlvbkNsaWVudENyZWF0ZUF1dGhDb2RlQ2xpZW50XCIsXHJcbiAgICBTdGFuZGFyZEludGVyYWN0aW9uQ2xpZW50R2V0Q2xpZW50Q29uZmlndXJhdGlvbjogXCJzdGFuZGFyZEludGVyYWN0aW9uQ2xpZW50R2V0Q2xpZW50Q29uZmlndXJhdGlvblwiLFxyXG4gICAgU3RhbmRhcmRJbnRlcmFjdGlvbkNsaWVudEluaXRpYWxpemVBdXRob3JpemF0aW9uUmVxdWVzdDogXCJzdGFuZGFyZEludGVyYWN0aW9uQ2xpZW50SW5pdGlhbGl6ZUF1dGhvcml6YXRpb25SZXF1ZXN0XCIsXHJcbiAgICBTdGFuZGFyZEludGVyYWN0aW9uQ2xpZW50SW5pdGlhbGl6ZUF1dGhvcml6YXRpb25Db2RlUmVxdWVzdDogXCJzdGFuZGFyZEludGVyYWN0aW9uQ2xpZW50SW5pdGlhbGl6ZUF1dGhvcml6YXRpb25Db2RlUmVxdWVzdFwiLFxyXG4gICAgLyoqXHJcbiAgICAgKiBnZXRBdXRoQ29kZVVybCBBUEkgKG1zYWwtYnJvd3NlciBhbmQgbXNhbC1ub2RlKS5cclxuICAgICAqL1xyXG4gICAgR2V0QXV0aENvZGVVcmw6IFwiZ2V0QXV0aENvZGVVcmxcIixcclxuICAgIC8qKlxyXG4gICAgICogRnVuY3Rpb25zIGZyb20gSW50ZXJhY3Rpb25IYW5kbGVyIChtc2FsLWJyb3dzZXIpXHJcbiAgICAgKi9cclxuICAgIEhhbmRsZUNvZGVSZXNwb25zZUZyb21TZXJ2ZXI6IFwiaGFuZGxlQ29kZVJlc3BvbnNlRnJvbVNlcnZlclwiLFxyXG4gICAgSGFuZGxlQ29kZVJlc3BvbnNlOiBcImhhbmRsZUNvZGVSZXNwb25zZVwiLFxyXG4gICAgVXBkYXRlVG9rZW5FbmRwb2ludEF1dGhvcml0eTogXCJ1cGRhdGVUb2tlbkVuZHBvaW50QXV0aG9yaXR5XCIsXHJcbiAgICAvKipcclxuICAgICAqIEFQSXMgaW4gQXV0aG9yaXphdGlvbiBDb2RlIENsaWVudCAobXNhbC1jb21tb24pXHJcbiAgICAgKi9cclxuICAgIEF1dGhDbGllbnRBY3F1aXJlVG9rZW46IFwiYXV0aENsaWVudEFjcXVpcmVUb2tlblwiLFxyXG4gICAgQXV0aENsaWVudEV4ZWN1dGVUb2tlblJlcXVlc3Q6IFwiYXV0aENsaWVudEV4ZWN1dGVUb2tlblJlcXVlc3RcIixcclxuICAgIEF1dGhDbGllbnRDcmVhdGVUb2tlblJlcXVlc3RCb2R5OiBcImF1dGhDbGllbnRDcmVhdGVUb2tlblJlcXVlc3RCb2R5XCIsXHJcbiAgICBBdXRoQ2xpZW50Q3JlYXRlUXVlcnlTdHJpbmc6IFwiYXV0aENsaWVudENyZWF0ZVF1ZXJ5U3RyaW5nXCIsXHJcbiAgICAvKipcclxuICAgICAqIEdlbmVyYXRlIGZ1bmN0aW9ucyBpbiBQb3BUb2tlbkdlbmVyYXRvciAobXNhbC1jb21tb24pXHJcbiAgICAgKi9cclxuICAgIFBvcFRva2VuR2VuZXJhdGVDbmY6IFwicG9wVG9rZW5HZW5lcmF0ZUNuZlwiLFxyXG4gICAgUG9wVG9rZW5HZW5lcmF0ZUtpZDogXCJwb3BUb2tlbkdlbmVyYXRlS2lkXCIsXHJcbiAgICAvKipcclxuICAgICAqIGhhbmRsZVNlcnZlclRva2VuUmVzcG9uc2UgQVBJIGluIFJlc3BvbnNlSGFuZGxlciAobXNhbC1jb21tb24pXHJcbiAgICAgKi9cclxuICAgIEhhbmRsZVNlcnZlclRva2VuUmVzcG9uc2U6IFwiaGFuZGxlU2VydmVyVG9rZW5SZXNwb25zZVwiLFxyXG4gICAgRGVzZXJpYWxpemVSZXNwb25zZTogXCJkZXNlcmlhbGl6ZVJlc3BvbnNlXCIsXHJcbiAgICAvKipcclxuICAgICAqIEF1dGhvcml0eSBmdW5jdGlvbnNcclxuICAgICAqL1xyXG4gICAgQXV0aG9yaXR5RmFjdG9yeUNyZWF0ZURpc2NvdmVyZWRJbnN0YW5jZTogXCJhdXRob3JpdHlGYWN0b3J5Q3JlYXRlRGlzY292ZXJlZEluc3RhbmNlXCIsXHJcbiAgICBBdXRob3JpdHlSZXNvbHZlRW5kcG9pbnRzQXN5bmM6IFwiYXV0aG9yaXR5UmVzb2x2ZUVuZHBvaW50c0FzeW5jXCIsXHJcbiAgICBBdXRob3JpdHlSZXNvbHZlRW5kcG9pbnRzRnJvbUxvY2FsU291cmNlczogXCJhdXRob3JpdHlSZXNvbHZlRW5kcG9pbnRzRnJvbUxvY2FsU291cmNlc1wiLFxyXG4gICAgQXV0aG9yaXR5R2V0Q2xvdWREaXNjb3ZlcnlNZXRhZGF0YUZyb21OZXR3b3JrOiBcImF1dGhvcml0eUdldENsb3VkRGlzY292ZXJ5TWV0YWRhdGFGcm9tTmV0d29ya1wiLFxyXG4gICAgQXV0aG9yaXR5VXBkYXRlQ2xvdWREaXNjb3ZlcnlNZXRhZGF0YTogXCJhdXRob3JpdHlVcGRhdGVDbG91ZERpc2NvdmVyeU1ldGFkYXRhXCIsXHJcbiAgICBBdXRob3JpdHlHZXRFbmRwb2ludE1ldGFkYXRhRnJvbU5ldHdvcms6IFwiYXV0aG9yaXR5R2V0RW5kcG9pbnRNZXRhZGF0YUZyb21OZXR3b3JrXCIsXHJcbiAgICBBdXRob3JpdHlVcGRhdGVFbmRwb2ludE1ldGFkYXRhOiBcImF1dGhvcml0eVVwZGF0ZUVuZHBvaW50TWV0YWRhdGFcIixcclxuICAgIEF1dGhvcml0eVVwZGF0ZU1ldGFkYXRhV2l0aFJlZ2lvbmFsSW5mb3JtYXRpb246IFwiYXV0aG9yaXR5VXBkYXRlTWV0YWRhdGFXaXRoUmVnaW9uYWxJbmZvcm1hdGlvblwiLFxyXG4gICAgLyoqXHJcbiAgICAgKiBSZWdpb24gRGlzY292ZXJ5IGZ1bmN0aW9uc1xyXG4gICAgICovXHJcbiAgICBSZWdpb25EaXNjb3ZlcnlEZXRlY3RSZWdpb246IFwicmVnaW9uRGlzY292ZXJ5RGV0ZWN0UmVnaW9uXCIsXHJcbiAgICBSZWdpb25EaXNjb3ZlcnlHZXRSZWdpb25Gcm9tSU1EUzogXCJyZWdpb25EaXNjb3ZlcnlHZXRSZWdpb25Gcm9tSU1EU1wiLFxyXG4gICAgUmVnaW9uRGlzY292ZXJ5R2V0Q3VycmVudFZlcnNpb246IFwicmVnaW9uRGlzY292ZXJ5R2V0Q3VycmVudFZlcnNpb25cIixcclxuICAgIEFjcXVpcmVUb2tlbkJ5Q29kZUFzeW5jOiBcImFjcXVpcmVUb2tlbkJ5Q29kZUFzeW5jXCIsXHJcbiAgICBHZXRFbmRwb2ludE1ldGFkYXRhRnJvbU5ldHdvcms6IFwiZ2V0RW5kcG9pbnRNZXRhZGF0YUZyb21OZXR3b3JrXCIsXHJcbiAgICBHZXRDbG91ZERpc2NvdmVyeU1ldGFkYXRhRnJvbU5ldHdvcmtNZWFzdXJlbWVudDogXCJnZXRDbG91ZERpc2NvdmVyeU1ldGFkYXRhRnJvbU5ldHdvcmtNZWFzdXJlbWVudFwiLFxyXG4gICAgSGFuZGxlUmVkaXJlY3RQcm9taXNlTWVhc3VyZW1lbnQ6IFwiaGFuZGxlUmVkaXJlY3RQcm9taXNlXCIsXHJcbiAgICBIYW5kbGVOYXRpdmVSZWRpcmVjdFByb21pc2VNZWFzdXJlbWVudDogXCJoYW5kbGVOYXRpdmVSZWRpcmVjdFByb21pc2VcIixcclxuICAgIFVwZGF0ZUNsb3VkRGlzY292ZXJ5TWV0YWRhdGFNZWFzdXJlbWVudDogXCJ1cGRhdGVDbG91ZERpc2NvdmVyeU1ldGFkYXRhTWVhc3VyZW1lbnRcIixcclxuICAgIFVzZXJuYW1lUGFzc3dvcmRDbGllbnRBY3F1aXJlVG9rZW46IFwidXNlcm5hbWVQYXNzd29yZENsaWVudEFjcXVpcmVUb2tlblwiLFxyXG4gICAgTmF0aXZlTWVzc2FnZUhhbmRsZXJIYW5kc2hha2U6IFwibmF0aXZlTWVzc2FnZUhhbmRsZXJIYW5kc2hha2VcIixcclxuICAgIE5hdGl2ZUdlbmVyYXRlQXV0aFJlc3VsdDogXCJuYXRpdmVHZW5lcmF0ZUF1dGhSZXN1bHRcIixcclxuICAgIFJlbW92ZUhpZGRlbklmcmFtZTogXCJyZW1vdmVIaWRkZW5JZnJhbWVcIixcclxuICAgIC8qKlxyXG4gICAgICogQ2FjaGUgb3BlcmF0aW9uc1xyXG4gICAgICovXHJcbiAgICBDbGVhclRva2Vuc0FuZEtleXNXaXRoQ2xhaW1zOiBcImNsZWFyVG9rZW5zQW5kS2V5c1dpdGhDbGFpbXNcIixcclxuICAgIENhY2hlTWFuYWdlckdldFJlZnJlc2hUb2tlbjogXCJjYWNoZU1hbmFnZXJHZXRSZWZyZXNoVG9rZW5cIixcclxuICAgIC8qKlxyXG4gICAgICogQ3J5cHRvIE9wZXJhdGlvbnNcclxuICAgICAqL1xyXG4gICAgR2VuZXJhdGVQa2NlQ29kZXM6IFwiZ2VuZXJhdGVQa2NlQ29kZXNcIixcclxuICAgIEdlbmVyYXRlQ29kZVZlcmlmaWVyOiBcImdlbmVyYXRlQ29kZVZlcmlmaWVyXCIsXHJcbiAgICBHZW5lcmF0ZUNvZGVDaGFsbGVuZ2VGcm9tVmVyaWZpZXI6IFwiZ2VuZXJhdGVDb2RlQ2hhbGxlbmdlRnJvbVZlcmlmaWVyXCIsXHJcbiAgICBTaGEyNTZEaWdlc3Q6IFwic2hhMjU2RGlnZXN0XCIsXHJcbiAgICBHZXRSYW5kb21WYWx1ZXM6IFwiZ2V0UmFuZG9tVmFsdWVzXCIsXHJcbn07XHJcbmNvbnN0IFBlcmZvcm1hbmNlRXZlbnRBYmJyZXZpYXRpb25zID0gbmV3IE1hcChbXHJcbiAgICBbUGVyZm9ybWFuY2VFdmVudHMuQWNxdWlyZVRva2VuQnlDb2RlLCBcIkFUQnlDb2RlXCJdLFxyXG4gICAgW1BlcmZvcm1hbmNlRXZlbnRzLkFjcXVpcmVUb2tlbkJ5UmVmcmVzaFRva2VuLCBcIkFUQnlSVFwiXSxcclxuICAgIFtQZXJmb3JtYW5jZUV2ZW50cy5BY3F1aXJlVG9rZW5TaWxlbnQsIFwiQVRTXCJdLFxyXG4gICAgW1BlcmZvcm1hbmNlRXZlbnRzLkFjcXVpcmVUb2tlblNpbGVudEFzeW5jLCBcIkFUU0FzeW5jXCJdLFxyXG4gICAgW1BlcmZvcm1hbmNlRXZlbnRzLkFjcXVpcmVUb2tlblBvcHVwLCBcIkFUUG9wdXBcIl0sXHJcbiAgICBbUGVyZm9ybWFuY2VFdmVudHMuQWNxdWlyZVRva2VuUmVkaXJlY3QsIFwiQVRSZWRpcmVjdFwiXSxcclxuICAgIFtcclxuICAgICAgICBQZXJmb3JtYW5jZUV2ZW50cy5DcnlwdG9PcHRzR2V0UHVibGljS2V5VGh1bWJwcmludCxcclxuICAgICAgICBcIkNyeXB0b0dldFBLVGh1bWJcIixcclxuICAgIF0sXHJcbiAgICBbUGVyZm9ybWFuY2VFdmVudHMuQ3J5cHRvT3B0c1NpZ25Kd3QsIFwiQ3J5cHRvU2lnbkp3dFwiXSxcclxuICAgIFtQZXJmb3JtYW5jZUV2ZW50cy5TaWxlbnRDYWNoZUNsaWVudEFjcXVpcmVUb2tlbiwgXCJTbHRDYWNoZUNsaWVudEFUXCJdLFxyXG4gICAgW1BlcmZvcm1hbmNlRXZlbnRzLlNpbGVudElmcmFtZUNsaWVudEFjcXVpcmVUb2tlbiwgXCJTbHRJZnJhbWVDbGllbnRBVFwiXSxcclxuICAgIFtQZXJmb3JtYW5jZUV2ZW50cy5TaWxlbnRSZWZyZXNoQ2xpZW50QWNxdWlyZVRva2VuLCBcIlNsdFJDbGllbnRBVFwiXSxcclxuICAgIFtQZXJmb3JtYW5jZUV2ZW50cy5Tc29TaWxlbnQsIFwiU3NvU2x0XCJdLFxyXG4gICAgW1xyXG4gICAgICAgIFBlcmZvcm1hbmNlRXZlbnRzLlN0YW5kYXJkSW50ZXJhY3Rpb25DbGllbnRHZXREaXNjb3ZlcmVkQXV0aG9yaXR5LFxyXG4gICAgICAgIFwiU3RkSW50Q2xpZW50R2V0RGlzY0F1dGhcIixcclxuICAgIF0sXHJcbiAgICBbXHJcbiAgICAgICAgUGVyZm9ybWFuY2VFdmVudHMuRmV0Y2hBY2NvdW50SWRXaXRoTmF0aXZlQnJva2VyLFxyXG4gICAgICAgIFwiRmV0Y2hBY2NJZFdpdGhOdHZCcm9rZXJcIixcclxuICAgIF0sXHJcbiAgICBbXHJcbiAgICAgICAgUGVyZm9ybWFuY2VFdmVudHMuTmF0aXZlSW50ZXJhY3Rpb25DbGllbnRBY3F1aXJlVG9rZW4sXHJcbiAgICAgICAgXCJOdHZJbnRDbGllbnRBVFwiLFxyXG4gICAgXSxcclxuICAgIFtcclxuICAgICAgICBQZXJmb3JtYW5jZUV2ZW50cy5CYXNlQ2xpZW50Q3JlYXRlVG9rZW5SZXF1ZXN0SGVhZGVycyxcclxuICAgICAgICBcIkJhc2VDbGllbnRDcmVhdGVUUmVxSGVhZFwiLFxyXG4gICAgXSxcclxuICAgIFtcclxuICAgICAgICBQZXJmb3JtYW5jZUV2ZW50cy5OZXR3b3JrQ2xpZW50U2VuZFBvc3RSZXF1ZXN0QXN5bmMsXHJcbiAgICAgICAgXCJOZXRDbGllbnRTZW5kUG9zdFwiLFxyXG4gICAgXSxcclxuICAgIFtcclxuICAgICAgICBQZXJmb3JtYW5jZUV2ZW50cy5SZWZyZXNoVG9rZW5DbGllbnRFeGVjdXRlUG9zdFRvVG9rZW5FbmRwb2ludCxcclxuICAgICAgICBcIlJUQ2xpZW50RXhlY1Bvc3RcIixcclxuICAgIF0sXHJcbiAgICBbXHJcbiAgICAgICAgUGVyZm9ybWFuY2VFdmVudHMuQXV0aG9yaXphdGlvbkNvZGVDbGllbnRFeGVjdXRlUG9zdFRvVG9rZW5FbmRwb2ludCxcclxuICAgICAgICBcIkF1dGhDb2RlQ2xpZW50RXhlY1Bvc3RcIixcclxuICAgIF0sXHJcbiAgICBbUGVyZm9ybWFuY2VFdmVudHMuQnJva2VySGFuZGhzaGFrZSwgXCJCcm9rZXJIYW5kc2hha2VcIl0sXHJcbiAgICBbXHJcbiAgICAgICAgUGVyZm9ybWFuY2VFdmVudHMuQWNxdWlyZVRva2VuQnlSZWZyZXNoVG9rZW5JbkJyb2tlcixcclxuICAgICAgICBcIkFUQnlSVEluQnJva2VyXCIsXHJcbiAgICBdLFxyXG4gICAgW1BlcmZvcm1hbmNlRXZlbnRzLkFjcXVpcmVUb2tlbkJ5QnJva2VyLCBcIkFUQnlCcm9rZXJcIl0sXHJcbiAgICBbXHJcbiAgICAgICAgUGVyZm9ybWFuY2VFdmVudHMuUmVmcmVzaFRva2VuQ2xpZW50RXhlY3V0ZVRva2VuUmVxdWVzdCxcclxuICAgICAgICBcIlJUQ2xpZW50RXhlY1RSZXFcIixcclxuICAgIF0sXHJcbiAgICBbUGVyZm9ybWFuY2VFdmVudHMuUmVmcmVzaFRva2VuQ2xpZW50QWNxdWlyZVRva2VuLCBcIlJUQ2xpZW50QVRcIl0sXHJcbiAgICBbXHJcbiAgICAgICAgUGVyZm9ybWFuY2VFdmVudHMuUmVmcmVzaFRva2VuQ2xpZW50QWNxdWlyZVRva2VuV2l0aENhY2hlZFJlZnJlc2hUb2tlbixcclxuICAgICAgICBcIlJUQ2xpZW50QVRXaXRoQ2FjaGVkUlRcIixcclxuICAgIF0sXHJcbiAgICBbXHJcbiAgICAgICAgUGVyZm9ybWFuY2VFdmVudHMuUmVmcmVzaFRva2VuQ2xpZW50QWNxdWlyZVRva2VuQnlSZWZyZXNoVG9rZW4sXHJcbiAgICAgICAgXCJSVENsaWVudEFUQnlSVFwiLFxyXG4gICAgXSxcclxuICAgIFtcclxuICAgICAgICBQZXJmb3JtYW5jZUV2ZW50cy5SZWZyZXNoVG9rZW5DbGllbnRDcmVhdGVUb2tlblJlcXVlc3RCb2R5LFxyXG4gICAgICAgIFwiUlRDbGllbnRDcmVhdGVUUmVxQm9keVwiLFxyXG4gICAgXSxcclxuICAgIFtQZXJmb3JtYW5jZUV2ZW50cy5BY3F1aXJlVG9rZW5Gcm9tQ2FjaGUsIFwiQVRGcm9tQ2FjaGVcIl0sXHJcbiAgICBbXHJcbiAgICAgICAgUGVyZm9ybWFuY2VFdmVudHMuU2lsZW50Rmxvd0NsaWVudEFjcXVpcmVDYWNoZWRUb2tlbixcclxuICAgICAgICBcIlNsdEZsb3dDbGllbnRBVENhY2hlZFwiLFxyXG4gICAgXSxcclxuICAgIFtcclxuICAgICAgICBQZXJmb3JtYW5jZUV2ZW50cy5TaWxlbnRGbG93Q2xpZW50R2VuZXJhdGVSZXN1bHRGcm9tQ2FjaGVSZWNvcmQsXHJcbiAgICAgICAgXCJTbHRGbG93Q2xpZW50R2VuUmVzRnJvbUNhY2hlXCIsXHJcbiAgICBdLFxyXG4gICAgW1BlcmZvcm1hbmNlRXZlbnRzLkFjcXVpcmVUb2tlbkJ5U2lsZW50SWZyYW1lLCBcIkFUQnlTbHRJZnJhbWVcIl0sXHJcbiAgICBbUGVyZm9ybWFuY2VFdmVudHMuSW5pdGlhbGl6ZUJhc2VSZXF1ZXN0LCBcIkluaXRCYXNlUmVxXCJdLFxyXG4gICAgW1BlcmZvcm1hbmNlRXZlbnRzLkluaXRpYWxpemVTaWxlbnRSZXF1ZXN0LCBcIkluaXRTbHRSZXFcIl0sXHJcbiAgICBbXHJcbiAgICAgICAgUGVyZm9ybWFuY2VFdmVudHMuSW5pdGlhbGl6ZUNsaWVudEFwcGxpY2F0aW9uLFxyXG4gICAgICAgIFwiSW5pdENsaWVudEFwcGxpY2F0aW9uXCIsXHJcbiAgICBdLFxyXG4gICAgW1BlcmZvcm1hbmNlRXZlbnRzLlNpbGVudElmcmFtZUNsaWVudFRva2VuSGVscGVyLCBcIlNJQ2xpZW50VEhlbHBlclwiXSxcclxuICAgIFtcclxuICAgICAgICBQZXJmb3JtYW5jZUV2ZW50cy5TaWxlbnRIYW5kbGVySW5pdGlhdGVBdXRoUmVxdWVzdCxcclxuICAgICAgICBcIlNIYW5kbGVySW5pdEF1dGhSZXFcIixcclxuICAgIF0sXHJcbiAgICBbXHJcbiAgICAgICAgUGVyZm9ybWFuY2VFdmVudHMuU2lsZW50SGFuZGxlck1vbml0b3JJZnJhbWVGb3JIYXNoLFxyXG4gICAgICAgIFwiU2x0SGFuZGxlck1vbml0b3JJZnJhbWVGb3JIYXNoXCIsXHJcbiAgICBdLFxyXG4gICAgW1BlcmZvcm1hbmNlRXZlbnRzLlNpbGVudEhhbmRsZXJMb2FkRnJhbWUsIFwiU0hhbmRsZXJMb2FkRnJhbWVcIl0sXHJcbiAgICBbUGVyZm9ybWFuY2VFdmVudHMuU2lsZW50SGFuZGxlckxvYWRGcmFtZVN5bmMsIFwiU0hhbmRsZXJMb2FkRnJhbWVTeW5jXCJdLFxyXG4gICAgW1xyXG4gICAgICAgIFBlcmZvcm1hbmNlRXZlbnRzLlN0YW5kYXJkSW50ZXJhY3Rpb25DbGllbnRDcmVhdGVBdXRoQ29kZUNsaWVudCxcclxuICAgICAgICBcIlN0ZEludENsaWVudENyZWF0ZUF1dGhDb2RlQ2xpZW50XCIsXHJcbiAgICBdLFxyXG4gICAgW1xyXG4gICAgICAgIFBlcmZvcm1hbmNlRXZlbnRzLlN0YW5kYXJkSW50ZXJhY3Rpb25DbGllbnRHZXRDbGllbnRDb25maWd1cmF0aW9uLFxyXG4gICAgICAgIFwiU3RkSW50Q2xpZW50R2V0Q2xpZW50Q29uZlwiLFxyXG4gICAgXSxcclxuICAgIFtcclxuICAgICAgICBQZXJmb3JtYW5jZUV2ZW50cy5TdGFuZGFyZEludGVyYWN0aW9uQ2xpZW50SW5pdGlhbGl6ZUF1dGhvcml6YXRpb25SZXF1ZXN0LFxyXG4gICAgICAgIFwiU3RkSW50Q2xpZW50SW5pdEF1dGhSZXFcIixcclxuICAgIF0sXHJcbiAgICBbXHJcbiAgICAgICAgUGVyZm9ybWFuY2VFdmVudHMuU3RhbmRhcmRJbnRlcmFjdGlvbkNsaWVudEluaXRpYWxpemVBdXRob3JpemF0aW9uQ29kZVJlcXVlc3QsXHJcbiAgICAgICAgXCJTdGRJbnRDbGllbnRJbml0QXV0aENvZGVSZXFcIixcclxuICAgIF0sXHJcbiAgICBbUGVyZm9ybWFuY2VFdmVudHMuR2V0QXV0aENvZGVVcmwsIFwiR2V0QXV0aENvZGVVcmxcIl0sXHJcbiAgICBbXHJcbiAgICAgICAgUGVyZm9ybWFuY2VFdmVudHMuSGFuZGxlQ29kZVJlc3BvbnNlRnJvbVNlcnZlcixcclxuICAgICAgICBcIkhhbmRsZUNvZGVSZXNGcm9tU2VydmVyXCIsXHJcbiAgICBdLFxyXG4gICAgW1BlcmZvcm1hbmNlRXZlbnRzLkhhbmRsZUNvZGVSZXNwb25zZSwgXCJIYW5kbGVDb2RlUmVzcFwiXSxcclxuICAgIFtQZXJmb3JtYW5jZUV2ZW50cy5VcGRhdGVUb2tlbkVuZHBvaW50QXV0aG9yaXR5LCBcIlVwZFRFbmRwb2ludEF1dGhcIl0sXHJcbiAgICBbUGVyZm9ybWFuY2VFdmVudHMuQXV0aENsaWVudEFjcXVpcmVUb2tlbiwgXCJBdXRoQ2xpZW50QVRcIl0sXHJcbiAgICBbUGVyZm9ybWFuY2VFdmVudHMuQXV0aENsaWVudEV4ZWN1dGVUb2tlblJlcXVlc3QsIFwiQXV0aENsaWVudEV4ZWNUUmVxXCJdLFxyXG4gICAgW1xyXG4gICAgICAgIFBlcmZvcm1hbmNlRXZlbnRzLkF1dGhDbGllbnRDcmVhdGVUb2tlblJlcXVlc3RCb2R5LFxyXG4gICAgICAgIFwiQXV0aENsaWVudENyZWF0ZVRSZXFCb2R5XCIsXHJcbiAgICBdLFxyXG4gICAgW1xyXG4gICAgICAgIFBlcmZvcm1hbmNlRXZlbnRzLkF1dGhDbGllbnRDcmVhdGVRdWVyeVN0cmluZyxcclxuICAgICAgICBcIkF1dGhDbGllbnRDcmVhdGVRdWVyeVN0clwiLFxyXG4gICAgXSxcclxuICAgIFtQZXJmb3JtYW5jZUV2ZW50cy5Qb3BUb2tlbkdlbmVyYXRlQ25mLCBcIlBvcFRHZW5DbmZcIl0sXHJcbiAgICBbUGVyZm9ybWFuY2VFdmVudHMuUG9wVG9rZW5HZW5lcmF0ZUtpZCwgXCJQb3BUR2VuS2lkXCJdLFxyXG4gICAgW1BlcmZvcm1hbmNlRXZlbnRzLkhhbmRsZVNlcnZlclRva2VuUmVzcG9uc2UsIFwiSGFuZGxlU2VydmVyVFJlc1wiXSxcclxuICAgIFtQZXJmb3JtYW5jZUV2ZW50cy5EZXNlcmlhbGl6ZVJlc3BvbnNlLCBcIkRlc2VyaWFsaXplUmVzXCJdLFxyXG4gICAgW1xyXG4gICAgICAgIFBlcmZvcm1hbmNlRXZlbnRzLkF1dGhvcml0eUZhY3RvcnlDcmVhdGVEaXNjb3ZlcmVkSW5zdGFuY2UsXHJcbiAgICAgICAgXCJBdXRoRmFjdENyZWF0ZURpc2NJbnN0XCIsXHJcbiAgICBdLFxyXG4gICAgW1xyXG4gICAgICAgIFBlcmZvcm1hbmNlRXZlbnRzLkF1dGhvcml0eVJlc29sdmVFbmRwb2ludHNBc3luYyxcclxuICAgICAgICBcIkF1dGhSZXNvbHZlRW5kcG9pbnRzQXN5bmNcIixcclxuICAgIF0sXHJcbiAgICBbXHJcbiAgICAgICAgUGVyZm9ybWFuY2VFdmVudHMuQXV0aG9yaXR5UmVzb2x2ZUVuZHBvaW50c0Zyb21Mb2NhbFNvdXJjZXMsXHJcbiAgICAgICAgXCJBdXRoUmVzb2x2ZUVuZHBvaW50c0Zyb21Mb2NhbFwiLFxyXG4gICAgXSxcclxuICAgIFtcclxuICAgICAgICBQZXJmb3JtYW5jZUV2ZW50cy5BdXRob3JpdHlHZXRDbG91ZERpc2NvdmVyeU1ldGFkYXRhRnJvbU5ldHdvcmssXHJcbiAgICAgICAgXCJBdXRoR2V0Q0RNZXRhRnJvbU5ldFwiLFxyXG4gICAgXSxcclxuICAgIFtcclxuICAgICAgICBQZXJmb3JtYW5jZUV2ZW50cy5BdXRob3JpdHlVcGRhdGVDbG91ZERpc2NvdmVyeU1ldGFkYXRhLFxyXG4gICAgICAgIFwiQXV0aFVwZENETWV0YVwiLFxyXG4gICAgXSxcclxuICAgIFtcclxuICAgICAgICBQZXJmb3JtYW5jZUV2ZW50cy5BdXRob3JpdHlHZXRFbmRwb2ludE1ldGFkYXRhRnJvbU5ldHdvcmssXHJcbiAgICAgICAgXCJBdXRoVXBkQ0RNZXRhRnJvbU5ldFwiLFxyXG4gICAgXSxcclxuICAgIFtcclxuICAgICAgICBQZXJmb3JtYW5jZUV2ZW50cy5BdXRob3JpdHlVcGRhdGVFbmRwb2ludE1ldGFkYXRhLFxyXG4gICAgICAgIFwiQXV0aFVwZEVuZHBvaW50TWV0YVwiLFxyXG4gICAgXSxcclxuICAgIFtcclxuICAgICAgICBQZXJmb3JtYW5jZUV2ZW50cy5BdXRob3JpdHlVcGRhdGVNZXRhZGF0YVdpdGhSZWdpb25hbEluZm9ybWF0aW9uLFxyXG4gICAgICAgIFwiQXV0aFVwZE1ldGFXaXRoUmVnSW5mb1wiLFxyXG4gICAgXSxcclxuICAgIFtQZXJmb3JtYW5jZUV2ZW50cy5SZWdpb25EaXNjb3ZlcnlEZXRlY3RSZWdpb24sIFwiUmVnRGlzY0RldGVjdFJlZ1wiXSxcclxuICAgIFtcclxuICAgICAgICBQZXJmb3JtYW5jZUV2ZW50cy5SZWdpb25EaXNjb3ZlcnlHZXRSZWdpb25Gcm9tSU1EUyxcclxuICAgICAgICBcIlJlZ0Rpc2NHZXRSZWdGcm9tSU1EU1wiLFxyXG4gICAgXSxcclxuICAgIFtcclxuICAgICAgICBQZXJmb3JtYW5jZUV2ZW50cy5SZWdpb25EaXNjb3ZlcnlHZXRDdXJyZW50VmVyc2lvbixcclxuICAgICAgICBcIlJlZ0Rpc2NHZXRDdXJyZW50VmVyXCIsXHJcbiAgICBdLFxyXG4gICAgW1BlcmZvcm1hbmNlRXZlbnRzLkFjcXVpcmVUb2tlbkJ5Q29kZUFzeW5jLCBcIkFUQnlDb2RlQXN5bmNcIl0sXHJcbiAgICBbXHJcbiAgICAgICAgUGVyZm9ybWFuY2VFdmVudHMuR2V0RW5kcG9pbnRNZXRhZGF0YUZyb21OZXR3b3JrLFxyXG4gICAgICAgIFwiR2V0RW5kcG9pbnRNZXRhRnJvbU5ldFwiLFxyXG4gICAgXSxcclxuICAgIFtcclxuICAgICAgICBQZXJmb3JtYW5jZUV2ZW50cy5HZXRDbG91ZERpc2NvdmVyeU1ldGFkYXRhRnJvbU5ldHdvcmtNZWFzdXJlbWVudCxcclxuICAgICAgICBcIkdldENETWV0YUZyb21OZXRcIixcclxuICAgIF0sXHJcbiAgICBbXHJcbiAgICAgICAgUGVyZm9ybWFuY2VFdmVudHMuSGFuZGxlUmVkaXJlY3RQcm9taXNlTWVhc3VyZW1lbnQsXHJcbiAgICAgICAgXCJIYW5kbGVSZWRpcmVjdFByb21pc2VcIixcclxuICAgIF0sXHJcbiAgICBbXHJcbiAgICAgICAgUGVyZm9ybWFuY2VFdmVudHMuSGFuZGxlTmF0aXZlUmVkaXJlY3RQcm9taXNlTWVhc3VyZW1lbnQsXHJcbiAgICAgICAgXCJIYW5kbGVOdHZSZWRpcmVjdFByb21pc2VcIixcclxuICAgIF0sXHJcbiAgICBbXHJcbiAgICAgICAgUGVyZm9ybWFuY2VFdmVudHMuVXBkYXRlQ2xvdWREaXNjb3ZlcnlNZXRhZGF0YU1lYXN1cmVtZW50LFxyXG4gICAgICAgIFwiVXBkYXRlQ0RNZXRhXCIsXHJcbiAgICBdLFxyXG4gICAgW1xyXG4gICAgICAgIFBlcmZvcm1hbmNlRXZlbnRzLlVzZXJuYW1lUGFzc3dvcmRDbGllbnRBY3F1aXJlVG9rZW4sXHJcbiAgICAgICAgXCJVc2VyUGFzc0NsaWVudEFUXCIsXHJcbiAgICBdLFxyXG4gICAgW1xyXG4gICAgICAgIFBlcmZvcm1hbmNlRXZlbnRzLk5hdGl2ZU1lc3NhZ2VIYW5kbGVySGFuZHNoYWtlLFxyXG4gICAgICAgIFwiTnR2TXNnSGFuZGxlckhhbmRzaGFrZVwiLFxyXG4gICAgXSxcclxuICAgIFtQZXJmb3JtYW5jZUV2ZW50cy5OYXRpdmVHZW5lcmF0ZUF1dGhSZXN1bHQsIFwiTnR2R2VuQXV0aFJlc1wiXSxcclxuICAgIFtQZXJmb3JtYW5jZUV2ZW50cy5SZW1vdmVIaWRkZW5JZnJhbWUsIFwiUmVtb3ZlSGlkZGVuSWZyYW1lXCJdLFxyXG4gICAgW1xyXG4gICAgICAgIFBlcmZvcm1hbmNlRXZlbnRzLkNsZWFyVG9rZW5zQW5kS2V5c1dpdGhDbGFpbXMsXHJcbiAgICAgICAgXCJDbGVhclRBbmRLZXlzV2l0aENsYWltc1wiLFxyXG4gICAgXSxcclxuICAgIFtQZXJmb3JtYW5jZUV2ZW50cy5DYWNoZU1hbmFnZXJHZXRSZWZyZXNoVG9rZW4sIFwiQ2FjaGVNYW5hZ2VyR2V0UlRcIl0sXHJcbiAgICBbUGVyZm9ybWFuY2VFdmVudHMuR2VuZXJhdGVQa2NlQ29kZXMsIFwiR2VuUGtjZUNvZGVzXCJdLFxyXG4gICAgW1BlcmZvcm1hbmNlRXZlbnRzLkdlbmVyYXRlQ29kZVZlcmlmaWVyLCBcIkdlbkNvZGVWZXJpZmllclwiXSxcclxuICAgIFtcclxuICAgICAgICBQZXJmb3JtYW5jZUV2ZW50cy5HZW5lcmF0ZUNvZGVDaGFsbGVuZ2VGcm9tVmVyaWZpZXIsXHJcbiAgICAgICAgXCJHZW5Db2RlQ2hhbGxlbmdlRnJvbVZlcmlmaWVyXCIsXHJcbiAgICBdLFxyXG4gICAgW1BlcmZvcm1hbmNlRXZlbnRzLlNoYTI1NkRpZ2VzdCwgXCJTaGEyNTZEaWdlc3RcIl0sXHJcbiAgICBbUGVyZm9ybWFuY2VFdmVudHMuR2V0UmFuZG9tVmFsdWVzLCBcIkdldFJhbmRvbVZhbHVlc1wiXSxcclxuXSk7XHJcbi8qKlxyXG4gKiBTdGF0ZSBvZiB0aGUgcGVyZm9ybWFuY2UgZXZlbnQuXHJcbiAqXHJcbiAqIEBleHBvcnRcclxuICogQGVudW0ge251bWJlcn1cclxuICovXHJcbmNvbnN0IFBlcmZvcm1hbmNlRXZlbnRTdGF0dXMgPSB7XHJcbiAgICBOb3RTdGFydGVkOiAwLFxyXG4gICAgSW5Qcm9ncmVzczogMSxcclxuICAgIENvbXBsZXRlZDogMixcclxufTtcclxuY29uc3QgSW50RmllbGRzID0gbmV3IFNldChbXHJcbiAgICBcImFjY2Vzc1Rva2VuU2l6ZVwiLFxyXG4gICAgXCJkdXJhdGlvbk1zXCIsXHJcbiAgICBcImlkVG9rZW5TaXplXCIsXHJcbiAgICBcIm1hdHNTaWxlbnRTdGF0dXNcIixcclxuICAgIFwibWF0c0h0dHBTdGF0dXNcIixcclxuICAgIFwicmVmcmVzaFRva2VuU2l6ZVwiLFxyXG4gICAgXCJxdWV1ZWRUaW1lTXNcIixcclxuICAgIFwic3RhcnRUaW1lTXNcIixcclxuICAgIFwic3RhdHVzXCIsXHJcbiAgICBcIm11bHRpTWF0Y2hlZEFUXCIsXHJcbiAgICBcIm11bHRpTWF0Y2hlZElEXCIsXHJcbiAgICBcIm11bHRpTWF0Y2hlZFJUXCIsXHJcbl0pO1xuXG5leHBvcnQgeyBJbnRGaWVsZHMsIFBlcmZvcm1hbmNlRXZlbnRBYmJyZXZpYXRpb25zLCBQZXJmb3JtYW5jZUV2ZW50U3RhdHVzLCBQZXJmb3JtYW5jZUV2ZW50cyB9O1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9UGVyZm9ybWFuY2VFdmVudC5tanMubWFwXG4iLCIvKiEgQGF6dXJlL21zYWwtYnJvd3NlciB2My4yOC4xIDIwMjUtMDEtMTQgKi9cbid1c2Ugc3RyaWN0Jztcbi8qXHJcbiAqIENvcHlyaWdodCAoYykgTWljcm9zb2Z0IENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLlxyXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgTUlUIExpY2Vuc2UuXHJcbiAqL1xyXG4vKipcclxuICogQ2xhc3Mgd2hpY2ggZXhwb3NlcyBBUElzIHRvIGVuY29kZSBwbGFpbnRleHQgdG8gYmFzZTY0IGVuY29kZWQgc3RyaW5nLiBTZWUgaGVyZSBmb3IgaW1wbGVtZW50YXRpb24gZGV0YWlsczpcclxuICogaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQVBJL1dpbmRvd0Jhc2U2NC9CYXNlNjRfZW5jb2RpbmdfYW5kX2RlY29kaW5nI1NvbHV0aW9uXzJfJUUyJTgwJTkzX0phdmFTY3JpcHQnc19VVEYtMTZfJTNFX1VURi04XyUzRV9iYXNlNjRcclxuICovXHJcbi8qKlxyXG4gKiBSZXR1cm5zIFVSTCBTYWZlIGI2NCBlbmNvZGVkIHN0cmluZyBmcm9tIGEgcGxhaW50ZXh0IHN0cmluZy5cclxuICogQHBhcmFtIGlucHV0XHJcbiAqL1xyXG5mdW5jdGlvbiB1cmxFbmNvZGUoaW5wdXQpIHtcclxuICAgIHJldHVybiBlbmNvZGVVUklDb21wb25lbnQoYmFzZTY0RW5jb2RlKGlucHV0KVxyXG4gICAgICAgIC5yZXBsYWNlKC89L2csIFwiXCIpXHJcbiAgICAgICAgLnJlcGxhY2UoL1xcKy9nLCBcIi1cIilcclxuICAgICAgICAucmVwbGFjZSgvXFwvL2csIFwiX1wiKSk7XHJcbn1cclxuLyoqXHJcbiAqIFJldHVybnMgVVJMIFNhZmUgYjY0IGVuY29kZWQgc3RyaW5nIGZyb20gYW4gaW50OEFycmF5LlxyXG4gKiBAcGFyYW0gaW5wdXRBcnJcclxuICovXHJcbmZ1bmN0aW9uIHVybEVuY29kZUFycihpbnB1dEFycikge1xyXG4gICAgcmV0dXJuIGJhc2U2NEVuY0FycihpbnB1dEFycilcclxuICAgICAgICAucmVwbGFjZSgvPS9nLCBcIlwiKVxyXG4gICAgICAgIC5yZXBsYWNlKC9cXCsvZywgXCItXCIpXHJcbiAgICAgICAgLnJlcGxhY2UoL1xcLy9nLCBcIl9cIik7XHJcbn1cclxuLyoqXHJcbiAqIFJldHVybnMgYjY0IGVuY29kZWQgc3RyaW5nIGZyb20gcGxhaW50ZXh0IHN0cmluZy5cclxuICogQHBhcmFtIGlucHV0XHJcbiAqL1xyXG5mdW5jdGlvbiBiYXNlNjRFbmNvZGUoaW5wdXQpIHtcclxuICAgIHJldHVybiBiYXNlNjRFbmNBcnIobmV3IFRleHRFbmNvZGVyKCkuZW5jb2RlKGlucHV0KSk7XHJcbn1cclxuLyoqXHJcbiAqIEJhc2U2NCBlbmNvZGUgYnl0ZSBhcnJheVxyXG4gKiBAcGFyYW0gYUJ5dGVzXHJcbiAqL1xyXG5mdW5jdGlvbiBiYXNlNjRFbmNBcnIoYUJ5dGVzKSB7XHJcbiAgICBjb25zdCBiaW5TdHJpbmcgPSBBcnJheS5mcm9tKGFCeXRlcywgKHgpID0+IFN0cmluZy5mcm9tQ29kZVBvaW50KHgpKS5qb2luKFwiXCIpO1xyXG4gICAgcmV0dXJuIGJ0b2EoYmluU3RyaW5nKTtcclxufVxuXG5leHBvcnQgeyBiYXNlNjRFbmNvZGUsIHVybEVuY29kZSwgdXJsRW5jb2RlQXJyIH07XG4vLyMgc291cmNlTWFwcGluZ1VSTD1CYXNlNjRFbmNvZGUubWpzLm1hcFxuIiwiLyohIEBhenVyZS9tc2FsLWJyb3dzZXIgdjMuMjguMSAyMDI1LTAxLTE0ICovXG4ndXNlIHN0cmljdCc7XG5pbXBvcnQgeyBjcmVhdGVCcm93c2VyQXV0aEVycm9yIH0gZnJvbSAnLi4vZXJyb3IvQnJvd3NlckF1dGhFcnJvci5tanMnO1xuaW1wb3J0IHsgUGVyZm9ybWFuY2VFdmVudHMgfSBmcm9tICdAYXp1cmUvbXNhbC1jb21tb24vYnJvd3Nlcic7XG5pbXBvcnQgeyBLRVlfRk9STUFUX0pXSyB9IGZyb20gJy4uL3V0aWxzL0Jyb3dzZXJDb25zdGFudHMubWpzJztcbmltcG9ydCB7IHVybEVuY29kZUFyciB9IGZyb20gJy4uL2VuY29kZS9CYXNlNjRFbmNvZGUubWpzJztcbmltcG9ydCB7IG5vbkJyb3dzZXJFbnZpcm9ubWVudCwgY3J5cHRvTm9uRXhpc3RlbnQgfSBmcm9tICcuLi9lcnJvci9Ccm93c2VyQXV0aEVycm9yQ29kZXMubWpzJztcblxuLypcclxuICogQ29weXJpZ2h0IChjKSBNaWNyb3NvZnQgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuXHJcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgTGljZW5zZS5cclxuICovXHJcbi8qKlxyXG4gKiBUaGlzIGZpbGUgZGVmaW5lcyBmdW5jdGlvbnMgdXNlZCBieSB0aGUgYnJvd3NlciBsaWJyYXJ5IHRvIHBlcmZvcm0gY3J5cHRvZ3JhcGh5IG9wZXJhdGlvbnMgc3VjaCBhc1xyXG4gKiBoYXNoaW5nIGFuZCBlbmNvZGluZy4gSXQgYWxzbyBoYXMgaGVscGVyIGZ1bmN0aW9ucyB0byB2YWxpZGF0ZSB0aGUgYXZhaWxhYmlsaXR5IG9mIHNwZWNpZmljIEFQSXMuXHJcbiAqL1xyXG4vKipcclxuICogU2VlIGhlcmUgZm9yIG1vcmUgaW5mbyBvbiBSc2FIYXNoZWRLZXlHZW5QYXJhbXM6IGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0FQSS9Sc2FIYXNoZWRLZXlHZW5QYXJhbXNcclxuICovXHJcbi8vIFJTQSBLZXlHZW4gQWxnb3JpdGhtXHJcbmNvbnN0IFBLQ1MxX1YxNV9LRVlHRU5fQUxHID0gXCJSU0FTU0EtUEtDUzEtdjFfNVwiO1xyXG4vLyBTSEEtMjU2IGhhc2hpbmcgYWxnb3JpdGhtXHJcbmNvbnN0IFMyNTZfSEFTSF9BTEcgPSBcIlNIQS0yNTZcIjtcclxuLy8gTU9EIGxlbmd0aCBmb3IgUG9QIHRva2Vuc1xyXG5jb25zdCBNT0RVTFVTX0xFTkdUSCA9IDIwNDg7XHJcbi8vIFB1YmxpYyBFeHBvbmVudFxyXG5jb25zdCBQVUJMSUNfRVhQT05FTlQgPSBuZXcgVWludDhBcnJheShbMHgwMSwgMHgwMCwgMHgwMV0pO1xyXG4vLyBVVUlEIGhleCBkaWdpdHNcclxuY29uc3QgVVVJRF9DSEFSUyA9IFwiMDEyMzQ1Njc4OWFiY2RlZlwiO1xyXG4vLyBBcnJheSB0byBzdG9yZSBVSU5UMzIgcmFuZG9tIHZhbHVlXHJcbmNvbnN0IFVJTlQzMl9BUlIgPSBuZXcgVWludDMyQXJyYXkoMSk7XHJcbmNvbnN0IFNVQlRMRV9TVUJFUlJPUiA9IFwiY3J5cHRvX3N1YnRsZV91bmRlZmluZWRcIjtcclxuY29uc3Qga2V5Z2VuQWxnb3JpdGhtT3B0aW9ucyA9IHtcclxuICAgIG5hbWU6IFBLQ1MxX1YxNV9LRVlHRU5fQUxHLFxyXG4gICAgaGFzaDogUzI1Nl9IQVNIX0FMRyxcclxuICAgIG1vZHVsdXNMZW5ndGg6IE1PRFVMVVNfTEVOR1RILFxyXG4gICAgcHVibGljRXhwb25lbnQ6IFBVQkxJQ19FWFBPTkVOVCxcclxufTtcclxuLyoqXHJcbiAqIENoZWNrIHdoZXRoZXIgYnJvd3NlciBjcnlwdG8gaXMgYXZhaWxhYmxlLlxyXG4gKi9cclxuZnVuY3Rpb24gdmFsaWRhdGVDcnlwdG9BdmFpbGFibGUoc2tpcFZhbGlkYXRlU3VidGxlQ3J5cHRvKSB7XHJcbiAgICBpZiAoIXdpbmRvdykge1xyXG4gICAgICAgIHRocm93IGNyZWF0ZUJyb3dzZXJBdXRoRXJyb3Iobm9uQnJvd3NlckVudmlyb25tZW50KTtcclxuICAgIH1cclxuICAgIGlmICghd2luZG93LmNyeXB0bykge1xyXG4gICAgICAgIHRocm93IGNyZWF0ZUJyb3dzZXJBdXRoRXJyb3IoY3J5cHRvTm9uRXhpc3RlbnQpO1xyXG4gICAgfVxyXG4gICAgaWYgKCFza2lwVmFsaWRhdGVTdWJ0bGVDcnlwdG8gJiYgIXdpbmRvdy5jcnlwdG8uc3VidGxlKSB7XHJcbiAgICAgICAgdGhyb3cgY3JlYXRlQnJvd3NlckF1dGhFcnJvcihjcnlwdG9Ob25FeGlzdGVudCwgU1VCVExFX1NVQkVSUk9SKTtcclxuICAgIH1cclxufVxyXG4vKipcclxuICogUmV0dXJucyBhIHNoYS0yNTYgaGFzaCBvZiB0aGUgZ2l2ZW4gZGF0YVN0cmluZyBhcyBhbiBBcnJheUJ1ZmZlci5cclxuICogQHBhcmFtIGRhdGFTdHJpbmcge3N0cmluZ30gZGF0YSBzdHJpbmdcclxuICogQHBhcmFtIHBlcmZvcm1hbmNlQ2xpZW50IHs/SVBlcmZvcm1hbmNlQ2xpZW50fVxyXG4gKiBAcGFyYW0gY29ycmVsYXRpb25JZCB7P3N0cmluZ30gY29ycmVsYXRpb24gaWRcclxuICovXHJcbmFzeW5jIGZ1bmN0aW9uIHNoYTI1NkRpZ2VzdChkYXRhU3RyaW5nLCBwZXJmb3JtYW5jZUNsaWVudCwgY29ycmVsYXRpb25JZCkge1xyXG4gICAgcGVyZm9ybWFuY2VDbGllbnQ/LmFkZFF1ZXVlTWVhc3VyZW1lbnQoUGVyZm9ybWFuY2VFdmVudHMuU2hhMjU2RGlnZXN0LCBjb3JyZWxhdGlvbklkKTtcclxuICAgIGNvbnN0IGVuY29kZXIgPSBuZXcgVGV4dEVuY29kZXIoKTtcclxuICAgIGNvbnN0IGRhdGEgPSBlbmNvZGVyLmVuY29kZShkYXRhU3RyaW5nKTtcclxuICAgIHJldHVybiB3aW5kb3cuY3J5cHRvLnN1YnRsZS5kaWdlc3QoUzI1Nl9IQVNIX0FMRywgZGF0YSk7XHJcbn1cclxuLyoqXHJcbiAqIFBvcHVsYXRlcyBidWZmZXIgd2l0aCBjcnlwdG9ncmFwaGljYWxseSByYW5kb20gdmFsdWVzLlxyXG4gKiBAcGFyYW0gZGF0YUJ1ZmZlclxyXG4gKi9cclxuZnVuY3Rpb24gZ2V0UmFuZG9tVmFsdWVzKGRhdGFCdWZmZXIpIHtcclxuICAgIHJldHVybiB3aW5kb3cuY3J5cHRvLmdldFJhbmRvbVZhbHVlcyhkYXRhQnVmZmVyKTtcclxufVxyXG4vKipcclxuICogUmV0dXJucyByYW5kb20gVWludDMyIHZhbHVlLlxyXG4gKiBAcmV0dXJucyB7bnVtYmVyfVxyXG4gKi9cclxuZnVuY3Rpb24gZ2V0UmFuZG9tVWludDMyKCkge1xyXG4gICAgd2luZG93LmNyeXB0by5nZXRSYW5kb21WYWx1ZXMoVUlOVDMyX0FSUik7XHJcbiAgICByZXR1cm4gVUlOVDMyX0FSUlswXTtcclxufVxyXG4vKipcclxuICogQ3JlYXRlcyBhIFVVSUQgdjcgZnJvbSB0aGUgY3VycmVudCB0aW1lc3RhbXAuXHJcbiAqIEltcGxlbWVudGF0aW9uIHJlbGllcyBvbiB0aGUgc3lzdGVtIGNsb2NrIHRvIGd1YXJhbnRlZSBpbmNyZWFzaW5nIG9yZGVyIG9mIGdlbmVyYXRlZCBpZGVudGlmaWVycy5cclxuICogQHJldHVybnMge251bWJlcn1cclxuICovXHJcbmZ1bmN0aW9uIGNyZWF0ZU5ld0d1aWQoKSB7XHJcbiAgICBjb25zdCBjdXJyZW50VGltZXN0YW1wID0gRGF0ZS5ub3coKTtcclxuICAgIGNvbnN0IGJhc2VSYW5kID0gZ2V0UmFuZG9tVWludDMyKCkgKiAweDQwMCArIChnZXRSYW5kb21VaW50MzIoKSAmIDB4M2ZmKTtcclxuICAgIC8vIFJlc3VsdCBieXRlIGFycmF5XHJcbiAgICBjb25zdCBieXRlcyA9IG5ldyBVaW50OEFycmF5KDE2KTtcclxuICAgIC8vIEEgMTItYml0IGByYW5kX2FgIGZpZWxkIHZhbHVlXHJcbiAgICBjb25zdCByYW5kQSA9IE1hdGgudHJ1bmMoYmFzZVJhbmQgLyAyICoqIDMwKTtcclxuICAgIC8vIFRoZSBoaWdoZXIgMzAgYml0cyBvZiA2Mi1iaXQgYHJhbmRfYmAgZmllbGQgdmFsdWVcclxuICAgIGNvbnN0IHJhbmRCSGkgPSBiYXNlUmFuZCAmICgyICoqIDMwIC0gMSk7XHJcbiAgICAvLyBUaGUgbG93ZXIgMzIgYml0cyBvZiA2Mi1iaXQgYHJhbmRfYmAgZmllbGQgdmFsdWVcclxuICAgIGNvbnN0IHJhbmRCTG8gPSBnZXRSYW5kb21VaW50MzIoKTtcclxuICAgIGJ5dGVzWzBdID0gY3VycmVudFRpbWVzdGFtcCAvIDIgKiogNDA7XHJcbiAgICBieXRlc1sxXSA9IGN1cnJlbnRUaW1lc3RhbXAgLyAyICoqIDMyO1xyXG4gICAgYnl0ZXNbMl0gPSBjdXJyZW50VGltZXN0YW1wIC8gMiAqKiAyNDtcclxuICAgIGJ5dGVzWzNdID0gY3VycmVudFRpbWVzdGFtcCAvIDIgKiogMTY7XHJcbiAgICBieXRlc1s0XSA9IGN1cnJlbnRUaW1lc3RhbXAgLyAyICoqIDg7XHJcbiAgICBieXRlc1s1XSA9IGN1cnJlbnRUaW1lc3RhbXA7XHJcbiAgICBieXRlc1s2XSA9IDB4NzAgfCAocmFuZEEgPj4+IDgpO1xyXG4gICAgYnl0ZXNbN10gPSByYW5kQTtcclxuICAgIGJ5dGVzWzhdID0gMHg4MCB8IChyYW5kQkhpID4+PiAyNCk7XHJcbiAgICBieXRlc1s5XSA9IHJhbmRCSGkgPj4+IDE2O1xyXG4gICAgYnl0ZXNbMTBdID0gcmFuZEJIaSA+Pj4gODtcclxuICAgIGJ5dGVzWzExXSA9IHJhbmRCSGk7XHJcbiAgICBieXRlc1sxMl0gPSByYW5kQkxvID4+PiAyNDtcclxuICAgIGJ5dGVzWzEzXSA9IHJhbmRCTG8gPj4+IDE2O1xyXG4gICAgYnl0ZXNbMTRdID0gcmFuZEJMbyA+Pj4gODtcclxuICAgIGJ5dGVzWzE1XSA9IHJhbmRCTG87XHJcbiAgICBsZXQgdGV4dCA9IFwiXCI7XHJcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGJ5dGVzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgdGV4dCArPSBVVUlEX0NIQVJTLmNoYXJBdChieXRlc1tpXSA+Pj4gNCk7XHJcbiAgICAgICAgdGV4dCArPSBVVUlEX0NIQVJTLmNoYXJBdChieXRlc1tpXSAmIDB4Zik7XHJcbiAgICAgICAgaWYgKGkgPT09IDMgfHwgaSA9PT0gNSB8fCBpID09PSA3IHx8IGkgPT09IDkpIHtcclxuICAgICAgICAgICAgdGV4dCArPSBcIi1cIjtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gdGV4dDtcclxufVxyXG4vKipcclxuICogR2VuZXJhdGVzIGEga2V5cGFpciBiYXNlZCBvbiBjdXJyZW50IGtleWdlbiBhbGdvcml0aG0gY29uZmlnLlxyXG4gKiBAcGFyYW0gZXh0cmFjdGFibGVcclxuICogQHBhcmFtIHVzYWdlc1xyXG4gKi9cclxuYXN5bmMgZnVuY3Rpb24gZ2VuZXJhdGVLZXlQYWlyKGV4dHJhY3RhYmxlLCB1c2FnZXMpIHtcclxuICAgIHJldHVybiB3aW5kb3cuY3J5cHRvLnN1YnRsZS5nZW5lcmF0ZUtleShrZXlnZW5BbGdvcml0aG1PcHRpb25zLCBleHRyYWN0YWJsZSwgdXNhZ2VzKTtcclxufVxyXG4vKipcclxuICogRXhwb3J0IGtleSBhcyBKc29uIFdlYiBLZXkgKEpXSylcclxuICogQHBhcmFtIGtleVxyXG4gKi9cclxuYXN5bmMgZnVuY3Rpb24gZXhwb3J0SndrKGtleSkge1xyXG4gICAgcmV0dXJuIHdpbmRvdy5jcnlwdG8uc3VidGxlLmV4cG9ydEtleShLRVlfRk9STUFUX0pXSywga2V5KTtcclxufVxyXG4vKipcclxuICogSW1wb3J0cyBrZXkgYXMgSnNvbiBXZWIgS2V5IChKV0spLCBjYW4gc2V0IGV4dHJhY3RhYmxlIGFuZCB1c2FnZXMuXHJcbiAqIEBwYXJhbSBrZXlcclxuICogQHBhcmFtIGV4dHJhY3RhYmxlXHJcbiAqIEBwYXJhbSB1c2FnZXNcclxuICovXHJcbmFzeW5jIGZ1bmN0aW9uIGltcG9ydEp3ayhrZXksIGV4dHJhY3RhYmxlLCB1c2FnZXMpIHtcclxuICAgIHJldHVybiB3aW5kb3cuY3J5cHRvLnN1YnRsZS5pbXBvcnRLZXkoS0VZX0ZPUk1BVF9KV0ssIGtleSwga2V5Z2VuQWxnb3JpdGhtT3B0aW9ucywgZXh0cmFjdGFibGUsIHVzYWdlcyk7XHJcbn1cclxuLyoqXHJcbiAqIFNpZ25zIGdpdmVuIGRhdGEgd2l0aCBnaXZlbiBrZXlcclxuICogQHBhcmFtIGtleVxyXG4gKiBAcGFyYW0gZGF0YVxyXG4gKi9cclxuYXN5bmMgZnVuY3Rpb24gc2lnbihrZXksIGRhdGEpIHtcclxuICAgIHJldHVybiB3aW5kb3cuY3J5cHRvLnN1YnRsZS5zaWduKGtleWdlbkFsZ29yaXRobU9wdGlvbnMsIGtleSwgZGF0YSk7XHJcbn1cclxuLyoqXHJcbiAqIFJldHVybnMgdGhlIFNIQS0yNTYgaGFzaCBvZiBhbiBpbnB1dCBzdHJpbmdcclxuICogQHBhcmFtIHBsYWluVGV4dFxyXG4gKi9cclxuYXN5bmMgZnVuY3Rpb24gaGFzaFN0cmluZyhwbGFpblRleHQpIHtcclxuICAgIGNvbnN0IGhhc2hCdWZmZXIgPSBhd2FpdCBzaGEyNTZEaWdlc3QocGxhaW5UZXh0KTtcclxuICAgIGNvbnN0IGhhc2hCeXRlcyA9IG5ldyBVaW50OEFycmF5KGhhc2hCdWZmZXIpO1xyXG4gICAgcmV0dXJuIHVybEVuY29kZUFycihoYXNoQnl0ZXMpO1xyXG59XG5cbmV4cG9ydCB7IGNyZWF0ZU5ld0d1aWQsIGV4cG9ydEp3aywgZ2VuZXJhdGVLZXlQYWlyLCBnZXRSYW5kb21WYWx1ZXMsIGhhc2hTdHJpbmcsIGltcG9ydEp3aywgc2hhMjU2RGlnZXN0LCBzaWduLCB2YWxpZGF0ZUNyeXB0b0F2YWlsYWJsZSB9O1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9QnJvd3NlckNyeXB0by5tanMubWFwXG4iLCIvKiEgQGF6dXJlL21zYWwtYnJvd3NlciB2My4yOC4xIDIwMjUtMDEtMTQgKi9cbid1c2Ugc3RyaWN0Jztcbi8qXHJcbiAqIENvcHlyaWdodCAoYykgTWljcm9zb2Z0IENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLlxyXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgTUlUIExpY2Vuc2UuXHJcbiAqL1xyXG5jb25zdCBzdG9yYWdlTm90U3VwcG9ydGVkID0gXCJzdG9yYWdlX25vdF9zdXBwb3J0ZWRcIjtcclxuY29uc3Qgc3R1YmJlZFB1YmxpY0NsaWVudEFwcGxpY2F0aW9uQ2FsbGVkID0gXCJzdHViYmVkX3B1YmxpY19jbGllbnRfYXBwbGljYXRpb25fY2FsbGVkXCI7XHJcbmNvbnN0IGluTWVtUmVkaXJlY3RVbmF2YWlsYWJsZSA9IFwiaW5fbWVtX3JlZGlyZWN0X3VuYXZhaWxhYmxlXCI7XG5cbmV4cG9ydCB7IGluTWVtUmVkaXJlY3RVbmF2YWlsYWJsZSwgc3RvcmFnZU5vdFN1cHBvcnRlZCwgc3R1YmJlZFB1YmxpY0NsaWVudEFwcGxpY2F0aW9uQ2FsbGVkIH07XG4vLyMgc291cmNlTWFwcGluZ1VSTD1Ccm93c2VyQ29uZmlndXJhdGlvbkF1dGhFcnJvckNvZGVzLm1qcy5tYXBcbiIsIi8qISBAYXp1cmUvbXNhbC1icm93c2VyIHYzLjI4LjEgMjAyNS0wMS0xNCAqL1xuJ3VzZSBzdHJpY3QnO1xuaW1wb3J0IHsgQXV0aEVycm9yIH0gZnJvbSAnQGF6dXJlL21zYWwtY29tbW9uL2Jyb3dzZXInO1xuaW1wb3J0IHsgc3RvcmFnZU5vdFN1cHBvcnRlZCwgc3R1YmJlZFB1YmxpY0NsaWVudEFwcGxpY2F0aW9uQ2FsbGVkLCBpbk1lbVJlZGlyZWN0VW5hdmFpbGFibGUgfSBmcm9tICcuL0Jyb3dzZXJDb25maWd1cmF0aW9uQXV0aEVycm9yQ29kZXMubWpzJztcbmltcG9ydCAqIGFzIEJyb3dzZXJDb25maWd1cmF0aW9uQXV0aEVycm9yQ29kZXMgZnJvbSAnLi9Ccm93c2VyQ29uZmlndXJhdGlvbkF1dGhFcnJvckNvZGVzLm1qcyc7XG5leHBvcnQgeyBCcm93c2VyQ29uZmlndXJhdGlvbkF1dGhFcnJvckNvZGVzIH07XG5cbi8qXHJcbiAqIENvcHlyaWdodCAoYykgTWljcm9zb2Z0IENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLlxyXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgTUlUIExpY2Vuc2UuXHJcbiAqL1xyXG5jb25zdCBCcm93c2VyQ29uZmlndXJhdGlvbkF1dGhFcnJvck1lc3NhZ2VzID0ge1xyXG4gICAgW3N0b3JhZ2VOb3RTdXBwb3J0ZWRdOiBcIkdpdmVuIHN0b3JhZ2UgY29uZmlndXJhdGlvbiBvcHRpb24gd2FzIG5vdCBzdXBwb3J0ZWQuXCIsXHJcbiAgICBbc3R1YmJlZFB1YmxpY0NsaWVudEFwcGxpY2F0aW9uQ2FsbGVkXTogXCJTdHViIGluc3RhbmNlIG9mIFB1YmxpYyBDbGllbnQgQXBwbGljYXRpb24gd2FzIGNhbGxlZC4gSWYgdXNpbmcgbXNhbC1yZWFjdCwgcGxlYXNlIGVuc3VyZSBjb250ZXh0IGlzIG5vdCB1c2VkIHdpdGhvdXQgYSBwcm92aWRlci4gRm9yIG1vcmUgdmlzaXQ6IGFrYS5tcy9tc2FsanMvYnJvd3Nlci1lcnJvcnNcIixcclxuICAgIFtpbk1lbVJlZGlyZWN0VW5hdmFpbGFibGVdOiBcIlJlZGlyZWN0IGNhbm5vdCBiZSBzdXBwb3J0ZWQuIEluLW1lbW9yeSBzdG9yYWdlIHdhcyBzZWxlY3RlZCBhbmQgc3RvcmVBdXRoU3RhdGVJbkNvb2tpZT1mYWxzZSwgd2hpY2ggd291bGQgY2F1c2UgdGhlIGxpYnJhcnkgdG8gYmUgdW5hYmxlIHRvIGhhbmRsZSB0aGUgaW5jb21pbmcgaGFzaC4gSWYgeW91IHdvdWxkIGxpa2UgdG8gdXNlIHRoZSByZWRpcmVjdCBBUEksIHBsZWFzZSB1c2Ugc2Vzc2lvbi9sb2NhbFN0b3JhZ2Ugb3Igc2V0IHN0b3JlQXV0aFN0YXRlSW5Db29raWU9dHJ1ZS5cIixcclxufTtcclxuLyoqXHJcbiAqIEJyb3dzZXJBdXRoRXJyb3JNZXNzYWdlIGNsYXNzIGNvbnRhaW5pbmcgc3RyaW5nIGNvbnN0YW50cyB1c2VkIGJ5IGVycm9yIGNvZGVzIGFuZCBtZXNzYWdlcy5cclxuICogQGRlcHJlY2F0ZWQgVXNlIEJyb3dzZXJBdXRoRXJyb3JDb2RlcyBpbnN0ZWFkXHJcbiAqL1xyXG5jb25zdCBCcm93c2VyQ29uZmlndXJhdGlvbkF1dGhFcnJvck1lc3NhZ2UgPSB7XHJcbiAgICBzdG9yYWdlTm90U3VwcG9ydGVkRXJyb3I6IHtcclxuICAgICAgICBjb2RlOiBzdG9yYWdlTm90U3VwcG9ydGVkLFxyXG4gICAgICAgIGRlc2M6IEJyb3dzZXJDb25maWd1cmF0aW9uQXV0aEVycm9yTWVzc2FnZXNbc3RvcmFnZU5vdFN1cHBvcnRlZF0sXHJcbiAgICB9LFxyXG4gICAgc3R1YlBjYUluc3RhbmNlQ2FsbGVkOiB7XHJcbiAgICAgICAgY29kZTogc3R1YmJlZFB1YmxpY0NsaWVudEFwcGxpY2F0aW9uQ2FsbGVkLFxyXG4gICAgICAgIGRlc2M6IEJyb3dzZXJDb25maWd1cmF0aW9uQXV0aEVycm9yTWVzc2FnZXNbc3R1YmJlZFB1YmxpY0NsaWVudEFwcGxpY2F0aW9uQ2FsbGVkXSxcclxuICAgIH0sXHJcbiAgICBpbk1lbVJlZGlyZWN0VW5hdmFpbGFibGU6IHtcclxuICAgICAgICBjb2RlOiBpbk1lbVJlZGlyZWN0VW5hdmFpbGFibGUsXHJcbiAgICAgICAgZGVzYzogQnJvd3NlckNvbmZpZ3VyYXRpb25BdXRoRXJyb3JNZXNzYWdlc1tpbk1lbVJlZGlyZWN0VW5hdmFpbGFibGVdLFxyXG4gICAgfSxcclxufTtcclxuLyoqXHJcbiAqIEJyb3dzZXIgbGlicmFyeSBlcnJvciBjbGFzcyB0aHJvd24gYnkgdGhlIE1TQUwuanMgbGlicmFyeSBmb3IgU1BBc1xyXG4gKi9cclxuY2xhc3MgQnJvd3NlckNvbmZpZ3VyYXRpb25BdXRoRXJyb3IgZXh0ZW5kcyBBdXRoRXJyb3Ige1xyXG4gICAgY29uc3RydWN0b3IoZXJyb3JDb2RlLCBlcnJvck1lc3NhZ2UpIHtcclxuICAgICAgICBzdXBlcihlcnJvckNvZGUsIGVycm9yTWVzc2FnZSk7XHJcbiAgICAgICAgdGhpcy5uYW1lID0gXCJCcm93c2VyQ29uZmlndXJhdGlvbkF1dGhFcnJvclwiO1xyXG4gICAgICAgIE9iamVjdC5zZXRQcm90b3R5cGVPZih0aGlzLCBCcm93c2VyQ29uZmlndXJhdGlvbkF1dGhFcnJvci5wcm90b3R5cGUpO1xyXG4gICAgfVxyXG59XHJcbmZ1bmN0aW9uIGNyZWF0ZUJyb3dzZXJDb25maWd1cmF0aW9uQXV0aEVycm9yKGVycm9yQ29kZSkge1xyXG4gICAgcmV0dXJuIG5ldyBCcm93c2VyQ29uZmlndXJhdGlvbkF1dGhFcnJvcihlcnJvckNvZGUsIEJyb3dzZXJDb25maWd1cmF0aW9uQXV0aEVycm9yTWVzc2FnZXNbZXJyb3JDb2RlXSk7XHJcbn1cblxuZXhwb3J0IHsgQnJvd3NlckNvbmZpZ3VyYXRpb25BdXRoRXJyb3IsIEJyb3dzZXJDb25maWd1cmF0aW9uQXV0aEVycm9yTWVzc2FnZSwgQnJvd3NlckNvbmZpZ3VyYXRpb25BdXRoRXJyb3JNZXNzYWdlcywgY3JlYXRlQnJvd3NlckNvbmZpZ3VyYXRpb25BdXRoRXJyb3IgfTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPUJyb3dzZXJDb25maWd1cmF0aW9uQXV0aEVycm9yLm1qcy5tYXBcbiIsIi8qISBAYXp1cmUvbXNhbC1icm93c2VyIHYzLjI4LjEgMjAyNS0wMS0xNCAqL1xuJ3VzZSBzdHJpY3QnO1xuaW1wb3J0IHsgVXJsU3RyaW5nIH0gZnJvbSAnQGF6dXJlL21zYWwtY29tbW9uL2Jyb3dzZXInO1xuZXhwb3J0IHsgaW52b2tlLCBpbnZva2VBc3luYyB9IGZyb20gJ0BhenVyZS9tc2FsLWNvbW1vbi9icm93c2VyJztcbmltcG9ydCB7IGNyZWF0ZUJyb3dzZXJBdXRoRXJyb3IgfSBmcm9tICcuLi9lcnJvci9Ccm93c2VyQXV0aEVycm9yLm1qcyc7XG5pbXBvcnQgeyBCcm93c2VyQ29uc3RhbnRzLCBCcm93c2VyQ2FjaGVMb2NhdGlvbiB9IGZyb20gJy4vQnJvd3NlckNvbnN0YW50cy5tanMnO1xuaW1wb3J0IHsgY3JlYXRlTmV3R3VpZCB9IGZyb20gJy4uL2NyeXB0by9Ccm93c2VyQ3J5cHRvLm1qcyc7XG5pbXBvcnQgeyBjcmVhdGVCcm93c2VyQ29uZmlndXJhdGlvbkF1dGhFcnJvciB9IGZyb20gJy4uL2Vycm9yL0Jyb3dzZXJDb25maWd1cmF0aW9uQXV0aEVycm9yLm1qcyc7XG5pbXBvcnQgeyBibG9ja0lmcmFtZVJlbG9hZCwgcmVkaXJlY3RJbklmcmFtZSwgYmxvY2tOZXN0ZWRQb3B1cHMsIG5vbkJyb3dzZXJFbnZpcm9ubWVudCwgdW5pbml0aWFsaXplZFB1YmxpY0NsaWVudEFwcGxpY2F0aW9uIH0gZnJvbSAnLi4vZXJyb3IvQnJvd3NlckF1dGhFcnJvckNvZGVzLm1qcyc7XG5pbXBvcnQgeyBpbk1lbVJlZGlyZWN0VW5hdmFpbGFibGUgfSBmcm9tICcuLi9lcnJvci9Ccm93c2VyQ29uZmlndXJhdGlvbkF1dGhFcnJvckNvZGVzLm1qcyc7XG5cbi8qXHJcbiAqIENvcHlyaWdodCAoYykgTWljcm9zb2Z0IENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLlxyXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgTUlUIExpY2Vuc2UuXHJcbiAqL1xyXG4vKipcclxuICogQ2xlYXJzIGhhc2ggZnJvbSB3aW5kb3cgdXJsLlxyXG4gKi9cclxuZnVuY3Rpb24gY2xlYXJIYXNoKGNvbnRlbnRXaW5kb3cpIHtcclxuICAgIC8vIE9mZmljZS5qcyBzZXRzIGhpc3RvcnkucmVwbGFjZVN0YXRlIHRvIG51bGxcclxuICAgIGNvbnRlbnRXaW5kb3cubG9jYXRpb24uaGFzaCA9IFwiXCI7XHJcbiAgICBpZiAodHlwZW9mIGNvbnRlbnRXaW5kb3cuaGlzdG9yeS5yZXBsYWNlU3RhdGUgPT09IFwiZnVuY3Rpb25cIikge1xyXG4gICAgICAgIC8vIEZ1bGwgcmVtb3ZlcyBcIiNcIiBmcm9tIHVybFxyXG4gICAgICAgIGNvbnRlbnRXaW5kb3cuaGlzdG9yeS5yZXBsYWNlU3RhdGUobnVsbCwgXCJcIiwgYCR7Y29udGVudFdpbmRvdy5sb2NhdGlvbi5vcmlnaW59JHtjb250ZW50V2luZG93LmxvY2F0aW9uLnBhdGhuYW1lfSR7Y29udGVudFdpbmRvdy5sb2NhdGlvbi5zZWFyY2h9YCk7XHJcbiAgICB9XHJcbn1cclxuLyoqXHJcbiAqIFJlcGxhY2VzIGN1cnJlbnQgaGFzaCB3aXRoIGhhc2ggZnJvbSBwcm92aWRlZCB1cmxcclxuICovXHJcbmZ1bmN0aW9uIHJlcGxhY2VIYXNoKHVybCkge1xyXG4gICAgY29uc3QgdXJsUGFydHMgPSB1cmwuc3BsaXQoXCIjXCIpO1xyXG4gICAgdXJsUGFydHMuc2hpZnQoKTsgLy8gUmVtb3ZlIHBhcnQgYmVmb3JlIHRoZSBoYXNoXHJcbiAgICB3aW5kb3cubG9jYXRpb24uaGFzaCA9IHVybFBhcnRzLmxlbmd0aCA+IDAgPyB1cmxQYXJ0cy5qb2luKFwiI1wiKSA6IFwiXCI7XHJcbn1cclxuLyoqXHJcbiAqIFJldHVybnMgYm9vbGVhbiBvZiB3aGV0aGVyIHRoZSBjdXJyZW50IHdpbmRvdyBpcyBpbiBhbiBpZnJhbWUgb3Igbm90LlxyXG4gKi9cclxuZnVuY3Rpb24gaXNJbklmcmFtZSgpIHtcclxuICAgIHJldHVybiB3aW5kb3cucGFyZW50ICE9PSB3aW5kb3c7XHJcbn1cclxuLyoqXHJcbiAqIFJldHVybnMgYm9vbGVhbiBvZiB3aGV0aGVyIG9yIG5vdCB0aGUgY3VycmVudCB3aW5kb3cgaXMgYSBwb3B1cCBvcGVuZWQgYnkgbXNhbFxyXG4gKi9cclxuZnVuY3Rpb24gaXNJblBvcHVwKCkge1xyXG4gICAgcmV0dXJuICh0eXBlb2Ygd2luZG93ICE9PSBcInVuZGVmaW5lZFwiICYmXHJcbiAgICAgICAgISF3aW5kb3cub3BlbmVyICYmXHJcbiAgICAgICAgd2luZG93Lm9wZW5lciAhPT0gd2luZG93ICYmXHJcbiAgICAgICAgdHlwZW9mIHdpbmRvdy5uYW1lID09PSBcInN0cmluZ1wiICYmXHJcbiAgICAgICAgd2luZG93Lm5hbWUuaW5kZXhPZihgJHtCcm93c2VyQ29uc3RhbnRzLlBPUFVQX05BTUVfUFJFRklYfS5gKSA9PT0gMCk7XHJcbn1cclxuLy8gI2VuZHJlZ2lvblxyXG4vKipcclxuICogUmV0dXJucyBjdXJyZW50IHdpbmRvdyBVUkwgYXMgcmVkaXJlY3QgdXJpXHJcbiAqL1xyXG5mdW5jdGlvbiBnZXRDdXJyZW50VXJpKCkge1xyXG4gICAgcmV0dXJuIHR5cGVvZiB3aW5kb3cgIT09IFwidW5kZWZpbmVkXCIgJiYgd2luZG93LmxvY2F0aW9uXHJcbiAgICAgICAgPyB3aW5kb3cubG9jYXRpb24uaHJlZi5zcGxpdChcIj9cIilbMF0uc3BsaXQoXCIjXCIpWzBdXHJcbiAgICAgICAgOiBcIlwiO1xyXG59XHJcbi8qKlxyXG4gKiBHZXRzIHRoZSBob21lcGFnZSB1cmwgZm9yIHRoZSBjdXJyZW50IHdpbmRvdyBsb2NhdGlvbi5cclxuICovXHJcbmZ1bmN0aW9uIGdldEhvbWVwYWdlKCkge1xyXG4gICAgY29uc3QgY3VycmVudFVybCA9IG5ldyBVcmxTdHJpbmcod2luZG93LmxvY2F0aW9uLmhyZWYpO1xyXG4gICAgY29uc3QgdXJsQ29tcG9uZW50cyA9IGN1cnJlbnRVcmwuZ2V0VXJsQ29tcG9uZW50cygpO1xyXG4gICAgcmV0dXJuIGAke3VybENvbXBvbmVudHMuUHJvdG9jb2x9Ly8ke3VybENvbXBvbmVudHMuSG9zdE5hbWVBbmRQb3J0fS9gO1xyXG59XHJcbi8qKlxyXG4gKiBUaHJvd3MgZXJyb3IgaWYgd2UgaGF2ZSBjb21wbGV0ZWQgYW4gYXV0aCBhbmQgYXJlXHJcbiAqIGF0dGVtcHRpbmcgYW5vdGhlciBhdXRoIHJlcXVlc3QgaW5zaWRlIGFuIGlmcmFtZS5cclxuICovXHJcbmZ1bmN0aW9uIGJsb2NrUmVsb2FkSW5IaWRkZW5JZnJhbWVzKCkge1xyXG4gICAgY29uc3QgaXNSZXNwb25zZUhhc2ggPSBVcmxTdHJpbmcuaGFzaENvbnRhaW5zS25vd25Qcm9wZXJ0aWVzKHdpbmRvdy5sb2NhdGlvbi5oYXNoKTtcclxuICAgIC8vIHJldHVybiBhbiBlcnJvciBpZiBjYWxsZWQgZnJvbSB0aGUgaGlkZGVuIGlmcmFtZSBjcmVhdGVkIGJ5IHRoZSBtc2FsIGpzIHNpbGVudCBjYWxsc1xyXG4gICAgaWYgKGlzUmVzcG9uc2VIYXNoICYmIGlzSW5JZnJhbWUoKSkge1xyXG4gICAgICAgIHRocm93IGNyZWF0ZUJyb3dzZXJBdXRoRXJyb3IoYmxvY2tJZnJhbWVSZWxvYWQpO1xyXG4gICAgfVxyXG59XHJcbi8qKlxyXG4gKiBCbG9jayByZWRpcmVjdCBvcGVyYXRpb25zIGluIGlmcmFtZXMgdW5sZXNzIGV4cGxpY2l0bHkgYWxsb3dlZFxyXG4gKiBAcGFyYW0gaW50ZXJhY3Rpb25UeXBlIEludGVyYWN0aW9uIHR5cGUgZm9yIHRoZSByZXF1ZXN0XHJcbiAqIEBwYXJhbSBhbGxvd1JlZGlyZWN0SW5JZnJhbWUgQ29uZmlnIHZhbHVlIHRvIGFsbG93IHJlZGlyZWN0cyB3aGVuIGFwcCBpcyBpbnNpZGUgYW4gaWZyYW1lXHJcbiAqL1xyXG5mdW5jdGlvbiBibG9ja1JlZGlyZWN0SW5JZnJhbWUoYWxsb3dSZWRpcmVjdEluSWZyYW1lKSB7XHJcbiAgICBpZiAoaXNJbklmcmFtZSgpICYmICFhbGxvd1JlZGlyZWN0SW5JZnJhbWUpIHtcclxuICAgICAgICAvLyBJZiB3ZSBhcmUgbm90IGluIHRvcCBmcmFtZSwgd2Ugc2hvdWxkbid0IHJlZGlyZWN0LiBUaGlzIGlzIGFsc28gaGFuZGxlZCBieSB0aGUgc2VydmljZS5cclxuICAgICAgICB0aHJvdyBjcmVhdGVCcm93c2VyQXV0aEVycm9yKHJlZGlyZWN0SW5JZnJhbWUpO1xyXG4gICAgfVxyXG59XHJcbi8qKlxyXG4gKiBCbG9jayByZWRpcmVjdFVyaSBsb2FkZWQgaW4gcG9wdXAgZnJvbSBjYWxsaW5nIEFjcXVpcmVUb2tlbiBBUElzXHJcbiAqL1xyXG5mdW5jdGlvbiBibG9ja0FjcXVpcmVUb2tlbkluUG9wdXBzKCkge1xyXG4gICAgLy8gUG9wdXBzIG9wZW5lZCBieSBtc2FsIHBvcHVwIEFQSXMgYXJlIGdpdmVuIGEgbmFtZSB0aGF0IHN0YXJ0cyB3aXRoIFwibXNhbC5cIlxyXG4gICAgaWYgKGlzSW5Qb3B1cCgpKSB7XHJcbiAgICAgICAgdGhyb3cgY3JlYXRlQnJvd3NlckF1dGhFcnJvcihibG9ja05lc3RlZFBvcHVwcyk7XHJcbiAgICB9XHJcbn1cclxuLyoqXHJcbiAqIFRocm93cyBlcnJvciBpZiB0b2tlbiByZXF1ZXN0cyBhcmUgbWFkZSBpbiBub24tYnJvd3NlciBlbnZpcm9ubWVudFxyXG4gKiBAcGFyYW0gaXNCcm93c2VyRW52aXJvbm1lbnQgRmxhZyBpbmRpY2F0aW5nIGlmIGVudmlyb25tZW50IGlzIGEgYnJvd3Nlci5cclxuICovXHJcbmZ1bmN0aW9uIGJsb2NrTm9uQnJvd3NlckVudmlyb25tZW50KCkge1xyXG4gICAgaWYgKHR5cGVvZiB3aW5kb3cgPT09IFwidW5kZWZpbmVkXCIpIHtcclxuICAgICAgICB0aHJvdyBjcmVhdGVCcm93c2VyQXV0aEVycm9yKG5vbkJyb3dzZXJFbnZpcm9ubWVudCk7XHJcbiAgICB9XHJcbn1cclxuLyoqXHJcbiAqIFRocm93cyBlcnJvciBpZiBpbml0aWFsaXplIGhhc24ndCBiZWVuIGNhbGxlZFxyXG4gKiBAcGFyYW0gaW5pdGlhbGl6ZWRcclxuICovXHJcbmZ1bmN0aW9uIGJsb2NrQVBJQ2FsbHNCZWZvcmVJbml0aWFsaXplKGluaXRpYWxpemVkKSB7XHJcbiAgICBpZiAoIWluaXRpYWxpemVkKSB7XHJcbiAgICAgICAgdGhyb3cgY3JlYXRlQnJvd3NlckF1dGhFcnJvcih1bmluaXRpYWxpemVkUHVibGljQ2xpZW50QXBwbGljYXRpb24pO1xyXG4gICAgfVxyXG59XHJcbi8qKlxyXG4gKiBIZWxwZXIgdG8gdmFsaWRhdGUgYXBwIGVudmlyb25tZW50IGJlZm9yZSBtYWtpbmcgYW4gYXV0aCByZXF1ZXN0XHJcbiAqIEBwYXJhbSBpbml0aWFsaXplZFxyXG4gKi9cclxuZnVuY3Rpb24gcHJlZmxpZ2h0Q2hlY2soaW5pdGlhbGl6ZWQpIHtcclxuICAgIC8vIEJsb2NrIHJlcXVlc3QgaWYgbm90IGluIGJyb3dzZXIgZW52aXJvbm1lbnRcclxuICAgIGJsb2NrTm9uQnJvd3NlckVudmlyb25tZW50KCk7XHJcbiAgICAvLyBCbG9jayBhdXRoIHJlcXVlc3RzIGluc2lkZSBhIGhpZGRlbiBpZnJhbWVcclxuICAgIGJsb2NrUmVsb2FkSW5IaWRkZW5JZnJhbWVzKCk7XHJcbiAgICAvLyBCbG9jayByZWRpcmVjdFVyaSBvcGVuZWQgaW4gYSBwb3B1cCBmcm9tIGNhbGxpbmcgTVNBTCBBUElzXHJcbiAgICBibG9ja0FjcXVpcmVUb2tlbkluUG9wdXBzKCk7XHJcbiAgICAvLyBCbG9jayB0b2tlbiBhY3F1aXNpdGlvbiBiZWZvcmUgaW5pdGlhbGl6ZSBoYXMgYmVlbiBjYWxsZWRcclxuICAgIGJsb2NrQVBJQ2FsbHNCZWZvcmVJbml0aWFsaXplKGluaXRpYWxpemVkKTtcclxufVxyXG4vKipcclxuICogSGVscGVyIHRvIHZhbGlkYXRlIGFwcCBlbnZpb3JubWVudCBiZWZvcmUgbWFraW5nIHJlZGlyZWN0IHJlcXVlc3RcclxuICogQHBhcmFtIGluaXRpYWxpemVkXHJcbiAqIEBwYXJhbSBjb25maWdcclxuICovXHJcbmZ1bmN0aW9uIHJlZGlyZWN0UHJlZmxpZ2h0Q2hlY2soaW5pdGlhbGl6ZWQsIGNvbmZpZykge1xyXG4gICAgcHJlZmxpZ2h0Q2hlY2soaW5pdGlhbGl6ZWQpO1xyXG4gICAgYmxvY2tSZWRpcmVjdEluSWZyYW1lKGNvbmZpZy5zeXN0ZW0uYWxsb3dSZWRpcmVjdEluSWZyYW1lKTtcclxuICAgIC8vIEJsb2NrIHJlZGlyZWN0cyBpZiBtZW1vcnkgc3RvcmFnZSBpcyBlbmFibGVkIGJ1dCBzdG9yZUF1dGhTdGF0ZUluQ29va2llIGlzIG5vdFxyXG4gICAgaWYgKGNvbmZpZy5jYWNoZS5jYWNoZUxvY2F0aW9uID09PSBCcm93c2VyQ2FjaGVMb2NhdGlvbi5NZW1vcnlTdG9yYWdlICYmXHJcbiAgICAgICAgIWNvbmZpZy5jYWNoZS5zdG9yZUF1dGhTdGF0ZUluQ29va2llKSB7XHJcbiAgICAgICAgdGhyb3cgY3JlYXRlQnJvd3NlckNvbmZpZ3VyYXRpb25BdXRoRXJyb3IoaW5NZW1SZWRpcmVjdFVuYXZhaWxhYmxlKTtcclxuICAgIH1cclxufVxyXG4vKipcclxuICogQWRkcyBhIHByZWNvbm5lY3QgbGluayBlbGVtZW50IHRvIHRoZSBoZWFkZXIgd2hpY2ggYmVnaW5zIEROUyByZXNvbHV0aW9uIGFuZCBTU0wgY29ubmVjdGlvbiBpbiBhbnRpY2lwYXRpb24gb2YgdGhlIC90b2tlbiByZXF1ZXN0XHJcbiAqIEBwYXJhbSBsb2dpbkRvbWFpbiBBdXRob3JpdHkgZG9tYWluLCBpbmNsdWRpbmcgaHR0cHMgcHJvdG9jb2wgZS5nLiBodHRwczovL2xvZ2luLm1pY3Jvc29mdG9ubGluZS5jb21cclxuICogQHJldHVybnNcclxuICovXHJcbmZ1bmN0aW9uIHByZWNvbm5lY3QoYXV0aG9yaXR5KSB7XHJcbiAgICBjb25zdCBsaW5rID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImxpbmtcIik7XHJcbiAgICBsaW5rLnJlbCA9IFwicHJlY29ubmVjdFwiO1xyXG4gICAgbGluay5ocmVmID0gbmV3IFVSTChhdXRob3JpdHkpLm9yaWdpbjtcclxuICAgIGxpbmsuY3Jvc3NPcmlnaW4gPSBcImFub255bW91c1wiO1xyXG4gICAgZG9jdW1lbnQuaGVhZC5hcHBlbmRDaGlsZChsaW5rKTtcclxuICAgIC8vIFRoZSBicm93c2VyIHdpbGwgY2xvc2UgY29ubmVjdGlvbiBpZiBub3QgdXNlZCB3aXRoaW4gYSBmZXcgc2Vjb25kcywgcmVtb3ZlIGVsZW1lbnQgZnJvbSB0aGUgaGVhZGVyIGFmdGVyIDEwc1xyXG4gICAgd2luZG93LnNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgIGRvY3VtZW50LmhlYWQucmVtb3ZlQ2hpbGQobGluayk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNhdGNoIHsgfVxyXG4gICAgfSwgMTAwMDApOyAvLyAxMHMgVGltZW91dFxyXG59XHJcbi8qKlxyXG4gKiBXcmFwcGVyIGZ1bmN0aW9uIHRoYXQgY3JlYXRlcyBhIFVVSUQgdjcgZnJvbSB0aGUgY3VycmVudCB0aW1lc3RhbXAuXHJcbiAqIEByZXR1cm5zIHtzdHJpbmd9XHJcbiAqL1xyXG5mdW5jdGlvbiBjcmVhdGVHdWlkKCkge1xyXG4gICAgcmV0dXJuIGNyZWF0ZU5ld0d1aWQoKTtcclxufVxuXG5leHBvcnQgeyBibG9ja0FQSUNhbGxzQmVmb3JlSW5pdGlhbGl6ZSwgYmxvY2tBY3F1aXJlVG9rZW5JblBvcHVwcywgYmxvY2tOb25Ccm93c2VyRW52aXJvbm1lbnQsIGJsb2NrUmVkaXJlY3RJbklmcmFtZSwgYmxvY2tSZWxvYWRJbkhpZGRlbklmcmFtZXMsIGNsZWFySGFzaCwgY3JlYXRlR3VpZCwgZ2V0Q3VycmVudFVyaSwgZ2V0SG9tZXBhZ2UsIGlzSW5JZnJhbWUsIGlzSW5Qb3B1cCwgcHJlY29ubmVjdCwgcHJlZmxpZ2h0Q2hlY2ssIHJlZGlyZWN0UHJlZmxpZ2h0Q2hlY2ssIHJlcGxhY2VIYXNoIH07XG4vLyMgc291cmNlTWFwcGluZ1VSTD1Ccm93c2VyVXRpbHMubWpzLm1hcFxuIiwiLyohIEBhenVyZS9tc2FsLWNvbW1vbiB2MTQuMTYuMCAyMDI0LTExLTA1ICovXG4ndXNlIHN0cmljdCc7XG5pbXBvcnQgeyBDb25zdGFudHMgfSBmcm9tICcuLi91dGlscy9Db25zdGFudHMubWpzJztcblxuLypcclxuICogQ29weXJpZ2h0IChjKSBNaWNyb3NvZnQgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuXHJcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgTGljZW5zZS5cclxuICovXHJcbi8qKlxyXG4gKiBMb2cgbWVzc2FnZSBsZXZlbC5cclxuICovXHJcbnZhciBMb2dMZXZlbDtcclxuKGZ1bmN0aW9uIChMb2dMZXZlbCkge1xyXG4gICAgTG9nTGV2ZWxbTG9nTGV2ZWxbXCJFcnJvclwiXSA9IDBdID0gXCJFcnJvclwiO1xyXG4gICAgTG9nTGV2ZWxbTG9nTGV2ZWxbXCJXYXJuaW5nXCJdID0gMV0gPSBcIldhcm5pbmdcIjtcclxuICAgIExvZ0xldmVsW0xvZ0xldmVsW1wiSW5mb1wiXSA9IDJdID0gXCJJbmZvXCI7XHJcbiAgICBMb2dMZXZlbFtMb2dMZXZlbFtcIlZlcmJvc2VcIl0gPSAzXSA9IFwiVmVyYm9zZVwiO1xyXG4gICAgTG9nTGV2ZWxbTG9nTGV2ZWxbXCJUcmFjZVwiXSA9IDRdID0gXCJUcmFjZVwiO1xyXG59KShMb2dMZXZlbCB8fCAoTG9nTGV2ZWwgPSB7fSkpO1xyXG4vKipcclxuICogQ2xhc3Mgd2hpY2ggZmFjaWxpdGF0ZXMgbG9nZ2luZyBvZiBtZXNzYWdlcyB0byBhIHNwZWNpZmljIHBsYWNlLlxyXG4gKi9cclxuY2xhc3MgTG9nZ2VyIHtcclxuICAgIGNvbnN0cnVjdG9yKGxvZ2dlck9wdGlvbnMsIHBhY2thZ2VOYW1lLCBwYWNrYWdlVmVyc2lvbikge1xyXG4gICAgICAgIC8vIEN1cnJlbnQgbG9nIGxldmVsLCBkZWZhdWx0cyB0byBpbmZvLlxyXG4gICAgICAgIHRoaXMubGV2ZWwgPSBMb2dMZXZlbC5JbmZvO1xyXG4gICAgICAgIGNvbnN0IGRlZmF1bHRMb2dnZXJDYWxsYmFjayA9ICgpID0+IHtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH07XHJcbiAgICAgICAgY29uc3Qgc2V0TG9nZ2VyT3B0aW9ucyA9IGxvZ2dlck9wdGlvbnMgfHwgTG9nZ2VyLmNyZWF0ZURlZmF1bHRMb2dnZXJPcHRpb25zKCk7XHJcbiAgICAgICAgdGhpcy5sb2NhbENhbGxiYWNrID1cclxuICAgICAgICAgICAgc2V0TG9nZ2VyT3B0aW9ucy5sb2dnZXJDYWxsYmFjayB8fCBkZWZhdWx0TG9nZ2VyQ2FsbGJhY2s7XHJcbiAgICAgICAgdGhpcy5waWlMb2dnaW5nRW5hYmxlZCA9IHNldExvZ2dlck9wdGlvbnMucGlpTG9nZ2luZ0VuYWJsZWQgfHwgZmFsc2U7XHJcbiAgICAgICAgdGhpcy5sZXZlbCA9XHJcbiAgICAgICAgICAgIHR5cGVvZiBzZXRMb2dnZXJPcHRpb25zLmxvZ0xldmVsID09PSBcIm51bWJlclwiXHJcbiAgICAgICAgICAgICAgICA/IHNldExvZ2dlck9wdGlvbnMubG9nTGV2ZWxcclxuICAgICAgICAgICAgICAgIDogTG9nTGV2ZWwuSW5mbztcclxuICAgICAgICB0aGlzLmNvcnJlbGF0aW9uSWQgPVxyXG4gICAgICAgICAgICBzZXRMb2dnZXJPcHRpb25zLmNvcnJlbGF0aW9uSWQgfHwgQ29uc3RhbnRzLkVNUFRZX1NUUklORztcclxuICAgICAgICB0aGlzLnBhY2thZ2VOYW1lID0gcGFja2FnZU5hbWUgfHwgQ29uc3RhbnRzLkVNUFRZX1NUUklORztcclxuICAgICAgICB0aGlzLnBhY2thZ2VWZXJzaW9uID0gcGFja2FnZVZlcnNpb24gfHwgQ29uc3RhbnRzLkVNUFRZX1NUUklORztcclxuICAgIH1cclxuICAgIHN0YXRpYyBjcmVhdGVEZWZhdWx0TG9nZ2VyT3B0aW9ucygpIHtcclxuICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICBsb2dnZXJDYWxsYmFjazogKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgLy8gYWxsb3cgdXNlcnMgdG8gbm90IHNldCBsb2dnZXJDYWxsYmFja1xyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICBwaWlMb2dnaW5nRW5hYmxlZDogZmFsc2UsXHJcbiAgICAgICAgICAgIGxvZ0xldmVsOiBMb2dMZXZlbC5JbmZvLFxyXG4gICAgICAgIH07XHJcbiAgICB9XHJcbiAgICAvKipcclxuICAgICAqIENyZWF0ZSBuZXcgTG9nZ2VyIHdpdGggZXhpc3RpbmcgY29uZmlndXJhdGlvbnMuXHJcbiAgICAgKi9cclxuICAgIGNsb25lKHBhY2thZ2VOYW1lLCBwYWNrYWdlVmVyc2lvbiwgY29ycmVsYXRpb25JZCkge1xyXG4gICAgICAgIHJldHVybiBuZXcgTG9nZ2VyKHtcclxuICAgICAgICAgICAgbG9nZ2VyQ2FsbGJhY2s6IHRoaXMubG9jYWxDYWxsYmFjayxcclxuICAgICAgICAgICAgcGlpTG9nZ2luZ0VuYWJsZWQ6IHRoaXMucGlpTG9nZ2luZ0VuYWJsZWQsXHJcbiAgICAgICAgICAgIGxvZ0xldmVsOiB0aGlzLmxldmVsLFxyXG4gICAgICAgICAgICBjb3JyZWxhdGlvbklkOiBjb3JyZWxhdGlvbklkIHx8IHRoaXMuY29ycmVsYXRpb25JZCxcclxuICAgICAgICB9LCBwYWNrYWdlTmFtZSwgcGFja2FnZVZlcnNpb24pO1xyXG4gICAgfVxyXG4gICAgLyoqXHJcbiAgICAgKiBMb2cgbWVzc2FnZSB3aXRoIHJlcXVpcmVkIG9wdGlvbnMuXHJcbiAgICAgKi9cclxuICAgIGxvZ01lc3NhZ2UobG9nTWVzc2FnZSwgb3B0aW9ucykge1xyXG4gICAgICAgIGlmIChvcHRpb25zLmxvZ0xldmVsID4gdGhpcy5sZXZlbCB8fFxyXG4gICAgICAgICAgICAoIXRoaXMucGlpTG9nZ2luZ0VuYWJsZWQgJiYgb3B0aW9ucy5jb250YWluc1BpaSkpIHtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjb25zdCB0aW1lc3RhbXAgPSBuZXcgRGF0ZSgpLnRvVVRDU3RyaW5nKCk7XHJcbiAgICAgICAgLy8gQWRkIGNvcnJlbGF0aW9uSWQgdG8gbG9ncyBpZiBzZXQsIGNvcnJlbGF0aW9uSWQgcHJvdmlkZWQgb24gbG9nIG1lc3NhZ2VzIHRha2UgcHJlY2VkZW5jZVxyXG4gICAgICAgIGNvbnN0IGxvZ0hlYWRlciA9IGBbJHt0aW1lc3RhbXB9XSA6IFske29wdGlvbnMuY29ycmVsYXRpb25JZCB8fCB0aGlzLmNvcnJlbGF0aW9uSWQgfHwgXCJcIn1dYDtcclxuICAgICAgICBjb25zdCBsb2cgPSBgJHtsb2dIZWFkZXJ9IDogJHt0aGlzLnBhY2thZ2VOYW1lfUAke3RoaXMucGFja2FnZVZlcnNpb259IDogJHtMb2dMZXZlbFtvcHRpb25zLmxvZ0xldmVsXX0gLSAke2xvZ01lc3NhZ2V9YDtcclxuICAgICAgICAvLyBkZWJ1ZyhgbXNhbDoke0xvZ0xldmVsW29wdGlvbnMubG9nTGV2ZWxdfSR7b3B0aW9ucy5jb250YWluc1BpaSA/IFwiLVBpaVwiOiBDb25zdGFudHMuRU1QVFlfU1RSSU5HfSR7b3B0aW9ucy5jb250ZXh0ID8gYDoke29wdGlvbnMuY29udGV4dH1gIDogQ29uc3RhbnRzLkVNUFRZX1NUUklOR31gKShsb2dNZXNzYWdlKTtcclxuICAgICAgICB0aGlzLmV4ZWN1dGVDYWxsYmFjayhvcHRpb25zLmxvZ0xldmVsLCBsb2csIG9wdGlvbnMuY29udGFpbnNQaWkgfHwgZmFsc2UpO1xyXG4gICAgfVxyXG4gICAgLyoqXHJcbiAgICAgKiBFeGVjdXRlIGNhbGxiYWNrIHdpdGggbWVzc2FnZS5cclxuICAgICAqL1xyXG4gICAgZXhlY3V0ZUNhbGxiYWNrKGxldmVsLCBtZXNzYWdlLCBjb250YWluc1BpaSkge1xyXG4gICAgICAgIGlmICh0aGlzLmxvY2FsQ2FsbGJhY2spIHtcclxuICAgICAgICAgICAgdGhpcy5sb2NhbENhbGxiYWNrKGxldmVsLCBtZXNzYWdlLCBjb250YWluc1BpaSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgLyoqXHJcbiAgICAgKiBMb2dzIGVycm9yIG1lc3NhZ2VzLlxyXG4gICAgICovXHJcbiAgICBlcnJvcihtZXNzYWdlLCBjb3JyZWxhdGlvbklkKSB7XHJcbiAgICAgICAgdGhpcy5sb2dNZXNzYWdlKG1lc3NhZ2UsIHtcclxuICAgICAgICAgICAgbG9nTGV2ZWw6IExvZ0xldmVsLkVycm9yLFxyXG4gICAgICAgICAgICBjb250YWluc1BpaTogZmFsc2UsXHJcbiAgICAgICAgICAgIGNvcnJlbGF0aW9uSWQ6IGNvcnJlbGF0aW9uSWQgfHwgQ29uc3RhbnRzLkVNUFRZX1NUUklORyxcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuICAgIC8qKlxyXG4gICAgICogTG9ncyBlcnJvciBtZXNzYWdlcyB3aXRoIFBJSS5cclxuICAgICAqL1xyXG4gICAgZXJyb3JQaWkobWVzc2FnZSwgY29ycmVsYXRpb25JZCkge1xyXG4gICAgICAgIHRoaXMubG9nTWVzc2FnZShtZXNzYWdlLCB7XHJcbiAgICAgICAgICAgIGxvZ0xldmVsOiBMb2dMZXZlbC5FcnJvcixcclxuICAgICAgICAgICAgY29udGFpbnNQaWk6IHRydWUsXHJcbiAgICAgICAgICAgIGNvcnJlbGF0aW9uSWQ6IGNvcnJlbGF0aW9uSWQgfHwgQ29uc3RhbnRzLkVNUFRZX1NUUklORyxcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuICAgIC8qKlxyXG4gICAgICogTG9ncyB3YXJuaW5nIG1lc3NhZ2VzLlxyXG4gICAgICovXHJcbiAgICB3YXJuaW5nKG1lc3NhZ2UsIGNvcnJlbGF0aW9uSWQpIHtcclxuICAgICAgICB0aGlzLmxvZ01lc3NhZ2UobWVzc2FnZSwge1xyXG4gICAgICAgICAgICBsb2dMZXZlbDogTG9nTGV2ZWwuV2FybmluZyxcclxuICAgICAgICAgICAgY29udGFpbnNQaWk6IGZhbHNlLFxyXG4gICAgICAgICAgICBjb3JyZWxhdGlvbklkOiBjb3JyZWxhdGlvbklkIHx8IENvbnN0YW50cy5FTVBUWV9TVFJJTkcsXHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcbiAgICAvKipcclxuICAgICAqIExvZ3Mgd2FybmluZyBtZXNzYWdlcyB3aXRoIFBJSS5cclxuICAgICAqL1xyXG4gICAgd2FybmluZ1BpaShtZXNzYWdlLCBjb3JyZWxhdGlvbklkKSB7XHJcbiAgICAgICAgdGhpcy5sb2dNZXNzYWdlKG1lc3NhZ2UsIHtcclxuICAgICAgICAgICAgbG9nTGV2ZWw6IExvZ0xldmVsLldhcm5pbmcsXHJcbiAgICAgICAgICAgIGNvbnRhaW5zUGlpOiB0cnVlLFxyXG4gICAgICAgICAgICBjb3JyZWxhdGlvbklkOiBjb3JyZWxhdGlvbklkIHx8IENvbnN0YW50cy5FTVBUWV9TVFJJTkcsXHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcbiAgICAvKipcclxuICAgICAqIExvZ3MgaW5mbyBtZXNzYWdlcy5cclxuICAgICAqL1xyXG4gICAgaW5mbyhtZXNzYWdlLCBjb3JyZWxhdGlvbklkKSB7XHJcbiAgICAgICAgdGhpcy5sb2dNZXNzYWdlKG1lc3NhZ2UsIHtcclxuICAgICAgICAgICAgbG9nTGV2ZWw6IExvZ0xldmVsLkluZm8sXHJcbiAgICAgICAgICAgIGNvbnRhaW5zUGlpOiBmYWxzZSxcclxuICAgICAgICAgICAgY29ycmVsYXRpb25JZDogY29ycmVsYXRpb25JZCB8fCBDb25zdGFudHMuRU1QVFlfU1RSSU5HLFxyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG4gICAgLyoqXHJcbiAgICAgKiBMb2dzIGluZm8gbWVzc2FnZXMgd2l0aCBQSUkuXHJcbiAgICAgKi9cclxuICAgIGluZm9QaWkobWVzc2FnZSwgY29ycmVsYXRpb25JZCkge1xyXG4gICAgICAgIHRoaXMubG9nTWVzc2FnZShtZXNzYWdlLCB7XHJcbiAgICAgICAgICAgIGxvZ0xldmVsOiBMb2dMZXZlbC5JbmZvLFxyXG4gICAgICAgICAgICBjb250YWluc1BpaTogdHJ1ZSxcclxuICAgICAgICAgICAgY29ycmVsYXRpb25JZDogY29ycmVsYXRpb25JZCB8fCBDb25zdGFudHMuRU1QVFlfU1RSSU5HLFxyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG4gICAgLyoqXHJcbiAgICAgKiBMb2dzIHZlcmJvc2UgbWVzc2FnZXMuXHJcbiAgICAgKi9cclxuICAgIHZlcmJvc2UobWVzc2FnZSwgY29ycmVsYXRpb25JZCkge1xyXG4gICAgICAgIHRoaXMubG9nTWVzc2FnZShtZXNzYWdlLCB7XHJcbiAgICAgICAgICAgIGxvZ0xldmVsOiBMb2dMZXZlbC5WZXJib3NlLFxyXG4gICAgICAgICAgICBjb250YWluc1BpaTogZmFsc2UsXHJcbiAgICAgICAgICAgIGNvcnJlbGF0aW9uSWQ6IGNvcnJlbGF0aW9uSWQgfHwgQ29uc3RhbnRzLkVNUFRZX1NUUklORyxcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuICAgIC8qKlxyXG4gICAgICogTG9ncyB2ZXJib3NlIG1lc3NhZ2VzIHdpdGggUElJLlxyXG4gICAgICovXHJcbiAgICB2ZXJib3NlUGlpKG1lc3NhZ2UsIGNvcnJlbGF0aW9uSWQpIHtcclxuICAgICAgICB0aGlzLmxvZ01lc3NhZ2UobWVzc2FnZSwge1xyXG4gICAgICAgICAgICBsb2dMZXZlbDogTG9nTGV2ZWwuVmVyYm9zZSxcclxuICAgICAgICAgICAgY29udGFpbnNQaWk6IHRydWUsXHJcbiAgICAgICAgICAgIGNvcnJlbGF0aW9uSWQ6IGNvcnJlbGF0aW9uSWQgfHwgQ29uc3RhbnRzLkVNUFRZX1NUUklORyxcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuICAgIC8qKlxyXG4gICAgICogTG9ncyB0cmFjZSBtZXNzYWdlcy5cclxuICAgICAqL1xyXG4gICAgdHJhY2UobWVzc2FnZSwgY29ycmVsYXRpb25JZCkge1xyXG4gICAgICAgIHRoaXMubG9nTWVzc2FnZShtZXNzYWdlLCB7XHJcbiAgICAgICAgICAgIGxvZ0xldmVsOiBMb2dMZXZlbC5UcmFjZSxcclxuICAgICAgICAgICAgY29udGFpbnNQaWk6IGZhbHNlLFxyXG4gICAgICAgICAgICBjb3JyZWxhdGlvbklkOiBjb3JyZWxhdGlvbklkIHx8IENvbnN0YW50cy5FTVBUWV9TVFJJTkcsXHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcbiAgICAvKipcclxuICAgICAqIExvZ3MgdHJhY2UgbWVzc2FnZXMgd2l0aCBQSUkuXHJcbiAgICAgKi9cclxuICAgIHRyYWNlUGlpKG1lc3NhZ2UsIGNvcnJlbGF0aW9uSWQpIHtcclxuICAgICAgICB0aGlzLmxvZ01lc3NhZ2UobWVzc2FnZSwge1xyXG4gICAgICAgICAgICBsb2dMZXZlbDogTG9nTGV2ZWwuVHJhY2UsXHJcbiAgICAgICAgICAgIGNvbnRhaW5zUGlpOiB0cnVlLFxyXG4gICAgICAgICAgICBjb3JyZWxhdGlvbklkOiBjb3JyZWxhdGlvbklkIHx8IENvbnN0YW50cy5FTVBUWV9TVFJJTkcsXHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcbiAgICAvKipcclxuICAgICAqIFJldHVybnMgd2hldGhlciBQSUkgTG9nZ2luZyBpcyBlbmFibGVkIG9yIG5vdC5cclxuICAgICAqL1xyXG4gICAgaXNQaWlMb2dnaW5nRW5hYmxlZCgpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5waWlMb2dnaW5nRW5hYmxlZCB8fCBmYWxzZTtcclxuICAgIH1cclxufVxuXG5leHBvcnQgeyBMb2dMZXZlbCwgTG9nZ2VyIH07XG4vLyMgc291cmNlTWFwcGluZ1VSTD1Mb2dnZXIubWpzLm1hcFxuIiwiLyohIEBhenVyZS9tc2FsLWNvbW1vbiB2MTQuMTYuMCAyMDI0LTExLTA1ICovXG4ndXNlIHN0cmljdCc7XG4vKlxyXG4gKiBDb3B5cmlnaHQgKGMpIE1pY3Jvc29mdCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cclxuICogTGljZW5zZWQgdW5kZXIgdGhlIE1JVCBMaWNlbnNlLlxyXG4gKi9cclxuLyoqXHJcbiAqIFByb3RvY29sIG1vZGVzIHN1cHBvcnRlZCBieSBNU0FMLlxyXG4gKi9cclxuY29uc3QgUHJvdG9jb2xNb2RlID0ge1xyXG4gICAgQUFEOiBcIkFBRFwiLFxyXG4gICAgT0lEQzogXCJPSURDXCIsXHJcbn07XG5cbmV4cG9ydCB7IFByb3RvY29sTW9kZSB9O1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9UHJvdG9jb2xNb2RlLm1qcy5tYXBcbiIsIi8qISBAYXp1cmUvbXNhbC1jb21tb24gdjE0LjE2LjAgMjAyNC0xMS0wNSAqL1xuJ3VzZSBzdHJpY3QnO1xuLypcclxuICogQ29weXJpZ2h0IChjKSBNaWNyb3NvZnQgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuXHJcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgTGljZW5zZS5cclxuICovXHJcbmNvbnN0IEF6dXJlQ2xvdWRJbnN0YW5jZSA9IHtcclxuICAgIC8vIEF6dXJlQ2xvdWRJbnN0YW5jZSBpcyBub3Qgc3BlY2lmaWVkLlxyXG4gICAgTm9uZTogXCJub25lXCIsXHJcbiAgICAvLyBNaWNyb3NvZnQgQXp1cmUgcHVibGljIGNsb3VkXHJcbiAgICBBenVyZVB1YmxpYzogXCJodHRwczovL2xvZ2luLm1pY3Jvc29mdG9ubGluZS5jb21cIixcclxuICAgIC8vIE1pY3Jvc29mdCBQUEVcclxuICAgIEF6dXJlUHBlOiBcImh0dHBzOi8vbG9naW4ud2luZG93cy1wcGUubmV0XCIsXHJcbiAgICAvLyBNaWNyb3NvZnQgQ2hpbmVzZSBuYXRpb25hbC9yZWdpb25hbCBjbG91ZFxyXG4gICAgQXp1cmVDaGluYTogXCJodHRwczovL2xvZ2luLmNoaW5hY2xvdWRhcGkuY25cIixcclxuICAgIC8vIE1pY3Jvc29mdCBHZXJtYW4gbmF0aW9uYWwvcmVnaW9uYWwgY2xvdWQgKFwiQmxhY2sgRm9yZXN0XCIpXHJcbiAgICBBenVyZUdlcm1hbnk6IFwiaHR0cHM6Ly9sb2dpbi5taWNyb3NvZnRvbmxpbmUuZGVcIixcclxuICAgIC8vIFVTIEdvdmVybm1lbnQgY2xvdWRcclxuICAgIEF6dXJlVXNHb3Zlcm5tZW50OiBcImh0dHBzOi8vbG9naW4ubWljcm9zb2Z0b25saW5lLnVzXCIsXHJcbn07XG5cbmV4cG9ydCB7IEF6dXJlQ2xvdWRJbnN0YW5jZSB9O1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9QXV0aG9yaXR5T3B0aW9ucy5tanMubWFwXG4iLCIvKiEgQGF6dXJlL21zYWwtY29tbW9uIHYxNC4xNi4wIDIwMjQtMTEtMDUgKi9cbid1c2Ugc3RyaWN0JztcbmltcG9ydCB7IGNyZWF0ZUNsaWVudEF1dGhFcnJvciB9IGZyb20gJy4uL2Vycm9yL0NsaWVudEF1dGhFcnJvci5tanMnO1xuaW1wb3J0IHsgbWV0aG9kTm90SW1wbGVtZW50ZWQgfSBmcm9tICcuLi9lcnJvci9DbGllbnRBdXRoRXJyb3JDb2Rlcy5tanMnO1xuXG4vKlxyXG4gKiBDb3B5cmlnaHQgKGMpIE1pY3Jvc29mdCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cclxuICogTGljZW5zZWQgdW5kZXIgdGhlIE1JVCBMaWNlbnNlLlxyXG4gKi9cclxuY29uc3QgREVGQVVMVF9DUllQVE9fSU1QTEVNRU5UQVRJT04gPSB7XHJcbiAgICBjcmVhdGVOZXdHdWlkOiAoKSA9PiB7XHJcbiAgICAgICAgdGhyb3cgY3JlYXRlQ2xpZW50QXV0aEVycm9yKG1ldGhvZE5vdEltcGxlbWVudGVkKTtcclxuICAgIH0sXHJcbiAgICBiYXNlNjREZWNvZGU6ICgpID0+IHtcclxuICAgICAgICB0aHJvdyBjcmVhdGVDbGllbnRBdXRoRXJyb3IobWV0aG9kTm90SW1wbGVtZW50ZWQpO1xyXG4gICAgfSxcclxuICAgIGJhc2U2NEVuY29kZTogKCkgPT4ge1xyXG4gICAgICAgIHRocm93IGNyZWF0ZUNsaWVudEF1dGhFcnJvcihtZXRob2ROb3RJbXBsZW1lbnRlZCk7XHJcbiAgICB9LFxyXG4gICAgYmFzZTY0VXJsRW5jb2RlOiAoKSA9PiB7XHJcbiAgICAgICAgdGhyb3cgY3JlYXRlQ2xpZW50QXV0aEVycm9yKG1ldGhvZE5vdEltcGxlbWVudGVkKTtcclxuICAgIH0sXHJcbiAgICBlbmNvZGVLaWQ6ICgpID0+IHtcclxuICAgICAgICB0aHJvdyBjcmVhdGVDbGllbnRBdXRoRXJyb3IobWV0aG9kTm90SW1wbGVtZW50ZWQpO1xyXG4gICAgfSxcclxuICAgIGFzeW5jIGdldFB1YmxpY0tleVRodW1icHJpbnQoKSB7XHJcbiAgICAgICAgdGhyb3cgY3JlYXRlQ2xpZW50QXV0aEVycm9yKG1ldGhvZE5vdEltcGxlbWVudGVkKTtcclxuICAgIH0sXHJcbiAgICBhc3luYyByZW1vdmVUb2tlbkJpbmRpbmdLZXkoKSB7XHJcbiAgICAgICAgdGhyb3cgY3JlYXRlQ2xpZW50QXV0aEVycm9yKG1ldGhvZE5vdEltcGxlbWVudGVkKTtcclxuICAgIH0sXHJcbiAgICBhc3luYyBjbGVhcktleXN0b3JlKCkge1xyXG4gICAgICAgIHRocm93IGNyZWF0ZUNsaWVudEF1dGhFcnJvcihtZXRob2ROb3RJbXBsZW1lbnRlZCk7XHJcbiAgICB9LFxyXG4gICAgYXN5bmMgc2lnbkp3dCgpIHtcclxuICAgICAgICB0aHJvdyBjcmVhdGVDbGllbnRBdXRoRXJyb3IobWV0aG9kTm90SW1wbGVtZW50ZWQpO1xyXG4gICAgfSxcclxuICAgIGFzeW5jIGhhc2hTdHJpbmcoKSB7XHJcbiAgICAgICAgdGhyb3cgY3JlYXRlQ2xpZW50QXV0aEVycm9yKG1ldGhvZE5vdEltcGxlbWVudGVkKTtcclxuICAgIH0sXHJcbn07XG5cbmV4cG9ydCB7IERFRkFVTFRfQ1JZUFRPX0lNUExFTUVOVEFUSU9OIH07XG4vLyMgc291cmNlTWFwcGluZ1VSTD1JQ3J5cHRvLm1qcy5tYXBcbiIsIi8qISBAYXp1cmUvbXNhbC1jb21tb24gdjE0LjE2LjAgMjAyNC0xMS0wNSAqL1xuJ3VzZSBzdHJpY3QnO1xuLyogZXNsaW50LWRpc2FibGUgaGVhZGVyL2hlYWRlciAqL1xyXG5jb25zdCBuYW1lID0gXCJAYXp1cmUvbXNhbC1jb21tb25cIjtcclxuY29uc3QgdmVyc2lvbiA9IFwiMTQuMTYuMFwiO1xuXG5leHBvcnQgeyBuYW1lLCB2ZXJzaW9uIH07XG4vLyMgc291cmNlTWFwcGluZ1VSTD1wYWNrYWdlTWV0YWRhdGEubWpzLm1hcFxuIiwiLyohIEBhenVyZS9tc2FsLWNvbW1vbiB2MTQuMTYuMCAyMDI0LTExLTA1ICovXG4ndXNlIHN0cmljdCc7XG5pbXBvcnQgeyBjcmVhdGVDbGllbnRBdXRoRXJyb3IgfSBmcm9tICcuLi9lcnJvci9DbGllbnRBdXRoRXJyb3IubWpzJztcbmltcG9ydCB7IHRva2VuUGFyc2luZ0Vycm9yLCBudWxsT3JFbXB0eVRva2VuLCBtYXhBZ2VUcmFuc3BpcmVkIH0gZnJvbSAnLi4vZXJyb3IvQ2xpZW50QXV0aEVycm9yQ29kZXMubWpzJztcblxuLypcclxuICogQ29weXJpZ2h0IChjKSBNaWNyb3NvZnQgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuXHJcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgTGljZW5zZS5cclxuICovXHJcbi8qKlxyXG4gKiBFeHRyYWN0IHRva2VuIGJ5IGRlY29kaW5nIHRoZSByYXdUb2tlblxyXG4gKlxyXG4gKiBAcGFyYW0gZW5jb2RlZFRva2VuXHJcbiAqL1xyXG5mdW5jdGlvbiBleHRyYWN0VG9rZW5DbGFpbXMoZW5jb2RlZFRva2VuLCBiYXNlNjREZWNvZGUpIHtcclxuICAgIGNvbnN0IGpzd1BheWxvYWQgPSBnZXRKV1NQYXlsb2FkKGVuY29kZWRUb2tlbik7XHJcbiAgICAvLyB0b2tlbiB3aWxsIGJlIGRlY29kZWQgdG8gZ2V0IHRoZSB1c2VybmFtZVxyXG4gICAgdHJ5IHtcclxuICAgICAgICAvLyBiYXNlNjREZWNvZGUoKSBzaG91bGQgdGhyb3cgYW4gZXJyb3IgaWYgdGhlcmUgaXMgYW4gaXNzdWVcclxuICAgICAgICBjb25zdCBiYXNlNjREZWNvZGVkID0gYmFzZTY0RGVjb2RlKGpzd1BheWxvYWQpO1xyXG4gICAgICAgIHJldHVybiBKU09OLnBhcnNlKGJhc2U2NERlY29kZWQpO1xyXG4gICAgfVxyXG4gICAgY2F0Y2ggKGVycikge1xyXG4gICAgICAgIHRocm93IGNyZWF0ZUNsaWVudEF1dGhFcnJvcih0b2tlblBhcnNpbmdFcnJvcik7XHJcbiAgICB9XHJcbn1cclxuLyoqXHJcbiAqIGRlY29kZSBhIEpXVFxyXG4gKlxyXG4gKiBAcGFyYW0gYXV0aFRva2VuXHJcbiAqL1xyXG5mdW5jdGlvbiBnZXRKV1NQYXlsb2FkKGF1dGhUb2tlbikge1xyXG4gICAgaWYgKCFhdXRoVG9rZW4pIHtcclxuICAgICAgICB0aHJvdyBjcmVhdGVDbGllbnRBdXRoRXJyb3IobnVsbE9yRW1wdHlUb2tlbik7XHJcbiAgICB9XHJcbiAgICBjb25zdCB0b2tlblBhcnRzUmVnZXggPSAvXihbXlxcLlxcc10qKVxcLihbXlxcLlxcc10rKVxcLihbXlxcLlxcc10qKSQvO1xyXG4gICAgY29uc3QgbWF0Y2hlcyA9IHRva2VuUGFydHNSZWdleC5leGVjKGF1dGhUb2tlbik7XHJcbiAgICBpZiAoIW1hdGNoZXMgfHwgbWF0Y2hlcy5sZW5ndGggPCA0KSB7XHJcbiAgICAgICAgdGhyb3cgY3JlYXRlQ2xpZW50QXV0aEVycm9yKHRva2VuUGFyc2luZ0Vycm9yKTtcclxuICAgIH1cclxuICAgIC8qKlxyXG4gICAgICogY29uc3QgY3JhY2tlZFRva2VuID0ge1xyXG4gICAgICogIGhlYWRlcjogbWF0Y2hlc1sxXSxcclxuICAgICAqICBKV1NQYXlsb2FkOiBtYXRjaGVzWzJdLFxyXG4gICAgICogIEpXU1NpZzogbWF0Y2hlc1szXSxcclxuICAgICAqIH07XHJcbiAgICAgKi9cclxuICAgIHJldHVybiBtYXRjaGVzWzJdO1xyXG59XHJcbi8qKlxyXG4gKiBEZXRlcm1pbmUgaWYgdGhlIHRva2VuJ3MgbWF4X2FnZSBoYXMgdHJhbnNwaXJlZFxyXG4gKi9cclxuZnVuY3Rpb24gY2hlY2tNYXhBZ2UoYXV0aFRpbWUsIG1heEFnZSkge1xyXG4gICAgLypcclxuICAgICAqIHBlciBodHRwczovL29wZW5pZC5uZXQvc3BlY3Mvb3BlbmlkLWNvbm5lY3QtY29yZS0xXzAuaHRtbCNBdXRoUmVxdWVzdFxyXG4gICAgICogVG8gZm9yY2UgYW4gaW1tZWRpYXRlIHJlLWF1dGhlbnRpY2F0aW9uOiBJZiBhbiBhcHAgcmVxdWlyZXMgdGhhdCBhIHVzZXIgcmUtYXV0aGVudGljYXRlIHByaW9yIHRvIGFjY2VzcyxcclxuICAgICAqIHByb3ZpZGUgYSB2YWx1ZSBvZiAwIGZvciB0aGUgbWF4X2FnZSBwYXJhbWV0ZXIgYW5kIHRoZSBBUyB3aWxsIGZvcmNlIGEgZnJlc2ggbG9naW4uXHJcbiAgICAgKi9cclxuICAgIGNvbnN0IGZpdmVNaW51dGVTa2V3ID0gMzAwMDAwOyAvLyBmaXZlIG1pbnV0ZXMgaW4gbWlsbGlzZWNvbmRzXHJcbiAgICBpZiAobWF4QWdlID09PSAwIHx8IERhdGUubm93KCkgLSBmaXZlTWludXRlU2tldyA+IGF1dGhUaW1lICsgbWF4QWdlKSB7XHJcbiAgICAgICAgdGhyb3cgY3JlYXRlQ2xpZW50QXV0aEVycm9yKG1heEFnZVRyYW5zcGlyZWQpO1xyXG4gICAgfVxyXG59XG5cbmV4cG9ydCB7IGNoZWNrTWF4QWdlLCBleHRyYWN0VG9rZW5DbGFpbXMsIGdldEpXU1BheWxvYWQgfTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPUF1dGhUb2tlbi5tanMubWFwXG4iLCIvKiEgQGF6dXJlL21zYWwtY29tbW9uIHYxNC4xNi4wIDIwMjQtMTEtMDUgKi9cbid1c2Ugc3RyaWN0Jztcbi8qXHJcbiAqIENvcHlyaWdodCAoYykgTWljcm9zb2Z0IENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLlxyXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgTUlUIExpY2Vuc2UuXHJcbiAqL1xyXG4vKipcclxuICogVXRpbGl0eSBmdW5jdGlvbnMgZm9yIG1hbmFnaW5nIGRhdGUgYW5kIHRpbWUgb3BlcmF0aW9ucy5cclxuICovXHJcbi8qKlxyXG4gKiByZXR1cm4gdGhlIGN1cnJlbnQgdGltZSBpbiBVbml4IHRpbWUgKHNlY29uZHMpLlxyXG4gKi9cclxuZnVuY3Rpb24gbm93U2Vjb25kcygpIHtcclxuICAgIC8vIERhdGUuZ2V0VGltZSgpIHJldHVybnMgaW4gbWlsbGlzZWNvbmRzLlxyXG4gICAgcmV0dXJuIE1hdGgucm91bmQobmV3IERhdGUoKS5nZXRUaW1lKCkgLyAxMDAwLjApO1xyXG59XHJcbi8qKlxyXG4gKiBjaGVjayBpZiBhIHRva2VuIGlzIGV4cGlyZWQgYmFzZWQgb24gZ2l2ZW4gVVRDIHRpbWUgaW4gc2Vjb25kcy5cclxuICogQHBhcmFtIGV4cGlyZXNPblxyXG4gKi9cclxuZnVuY3Rpb24gaXNUb2tlbkV4cGlyZWQoZXhwaXJlc09uLCBvZmZzZXQpIHtcclxuICAgIC8vIGNoZWNrIGZvciBhY2Nlc3MgdG9rZW4gZXhwaXJ5XHJcbiAgICBjb25zdCBleHBpcmF0aW9uU2VjID0gTnVtYmVyKGV4cGlyZXNPbikgfHwgMDtcclxuICAgIGNvbnN0IG9mZnNldEN1cnJlbnRUaW1lU2VjID0gbm93U2Vjb25kcygpICsgb2Zmc2V0O1xyXG4gICAgLy8gSWYgY3VycmVudCB0aW1lICsgb2Zmc2V0IGlzIGdyZWF0ZXIgdGhhbiB0b2tlbiBleHBpcmF0aW9uIHRpbWUsIHRoZW4gdG9rZW4gaXMgZXhwaXJlZC5cclxuICAgIHJldHVybiBvZmZzZXRDdXJyZW50VGltZVNlYyA+IGV4cGlyYXRpb25TZWM7XHJcbn1cclxuLyoqXHJcbiAqIElmIHRoZSBjdXJyZW50IHRpbWUgaXMgZWFybGllciB0aGFuIHRoZSB0aW1lIHRoYXQgYSB0b2tlbiB3YXMgY2FjaGVkIGF0LCB3ZSBtdXN0IGRpc2NhcmQgdGhlIHRva2VuXHJcbiAqIGkuZS4gVGhlIHN5c3RlbSBjbG9jayB3YXMgdHVybmVkIGJhY2sgYWZ0ZXIgYWNxdWlyaW5nIHRoZSBjYWNoZWQgdG9rZW5cclxuICogQHBhcmFtIGNhY2hlZEF0XHJcbiAqIEBwYXJhbSBvZmZzZXRcclxuICovXHJcbmZ1bmN0aW9uIHdhc0Nsb2NrVHVybmVkQmFjayhjYWNoZWRBdCkge1xyXG4gICAgY29uc3QgY2FjaGVkQXRTZWMgPSBOdW1iZXIoY2FjaGVkQXQpO1xyXG4gICAgcmV0dXJuIGNhY2hlZEF0U2VjID4gbm93U2Vjb25kcygpO1xyXG59XHJcbi8qKlxyXG4gKiBXYWl0cyBmb3IgdCBudW1iZXIgb2YgbWlsbGlzZWNvbmRzXHJcbiAqIEBwYXJhbSB0IG51bWJlclxyXG4gKiBAcGFyYW0gdmFsdWUgVFxyXG4gKi9cclxuZnVuY3Rpb24gZGVsYXkodCwgdmFsdWUpIHtcclxuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSkgPT4gc2V0VGltZW91dCgoKSA9PiByZXNvbHZlKHZhbHVlKSwgdCkpO1xyXG59XG5cbmV4cG9ydCB7IGRlbGF5LCBpc1Rva2VuRXhwaXJlZCwgbm93U2Vjb25kcywgd2FzQ2xvY2tUdXJuZWRCYWNrIH07XG4vLyMgc291cmNlTWFwcGluZ1VSTD1UaW1lVXRpbHMubWpzLm1hcFxuIiwiLyohIEBhenVyZS9tc2FsLWNvbW1vbiB2MTQuMTYuMCAyMDI0LTExLTA1ICovXG4ndXNlIHN0cmljdCc7XG5pbXBvcnQgeyBleHRyYWN0VG9rZW5DbGFpbXMgfSBmcm9tICcuLi8uLi9hY2NvdW50L0F1dGhUb2tlbi5tanMnO1xuaW1wb3J0IHsgY3JlYXRlQ2xpZW50QXV0aEVycm9yIH0gZnJvbSAnLi4vLi4vZXJyb3IvQ2xpZW50QXV0aEVycm9yLm1qcyc7XG5pbXBvcnQgeyBTZXBhcmF0b3JzLCBDcmVkZW50aWFsVHlwZSwgQXV0aGVudGljYXRpb25TY2hlbWUsIFNFUlZFUl9URUxFTV9DT05TVEFOVFMsIFRocm90dGxpbmdDb25zdGFudHMsIEFQUF9NRVRBREFUQSwgQVVUSE9SSVRZX01FVEFEQVRBX0NPTlNUQU5UUyB9IGZyb20gJy4uLy4uL3V0aWxzL0NvbnN0YW50cy5tanMnO1xuaW1wb3J0IHsgbm93U2Vjb25kcyB9IGZyb20gJy4uLy4uL3V0aWxzL1RpbWVVdGlscy5tanMnO1xuaW1wb3J0IHsgdG9rZW5DbGFpbXNDbmZSZXF1aXJlZEZvclNpZ25lZEp3dCB9IGZyb20gJy4uLy4uL2Vycm9yL0NsaWVudEF1dGhFcnJvckNvZGVzLm1qcyc7XG5cbi8qXHJcbiAqIENvcHlyaWdodCAoYykgTWljcm9zb2Z0IENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLlxyXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgTUlUIExpY2Vuc2UuXHJcbiAqL1xyXG4vKipcclxuICogQ2FjaGUgS2V5OiA8aG9tZV9hY2NvdW50X2lkPi08ZW52aXJvbm1lbnQ+LTxjcmVkZW50aWFsX3R5cGU+LTxjbGllbnRfaWQgb3IgZmFtaWx5SWQ+LTxyZWFsbT4tPHNjb3Blcz4tPGNsYWltcyBoYXNoPi08c2NoZW1lPlxyXG4gKiBJZFRva2VuIEV4YW1wbGU6IHVpZC51dGlkLWxvZ2luLm1pY3Jvc29mdG9ubGluZS5jb20taWR0b2tlbi1hcHBfY2xpZW50X2lkLWNvbnRvc28uY29tXHJcbiAqIEFjY2Vzc1Rva2VuIEV4YW1wbGU6IHVpZC51dGlkLWxvZ2luLm1pY3Jvc29mdG9ubGluZS5jb20tYWNjZXNzdG9rZW4tYXBwX2NsaWVudF9pZC1jb250b3NvLmNvbS1zY29wZTEgc2NvcGUyLS1wb3BcclxuICogUmVmcmVzaFRva2VuIEV4YW1wbGU6IHVpZC51dGlkLWxvZ2luLm1pY3Jvc29mdG9ubGluZS5jb20tcmVmcmVzaHRva2VuLTEtY29udG9zby5jb21cclxuICogQHBhcmFtIGNyZWRlbnRpYWxFbnRpdHlcclxuICogQHJldHVybnNcclxuICovXHJcbmZ1bmN0aW9uIGdlbmVyYXRlQ3JlZGVudGlhbEtleShjcmVkZW50aWFsRW50aXR5KSB7XHJcbiAgICBjb25zdCBjcmVkZW50aWFsS2V5ID0gW1xyXG4gICAgICAgIGdlbmVyYXRlQWNjb3VudElkKGNyZWRlbnRpYWxFbnRpdHkpLFxyXG4gICAgICAgIGdlbmVyYXRlQ3JlZGVudGlhbElkKGNyZWRlbnRpYWxFbnRpdHkpLFxyXG4gICAgICAgIGdlbmVyYXRlVGFyZ2V0KGNyZWRlbnRpYWxFbnRpdHkpLFxyXG4gICAgICAgIGdlbmVyYXRlQ2xhaW1zSGFzaChjcmVkZW50aWFsRW50aXR5KSxcclxuICAgICAgICBnZW5lcmF0ZVNjaGVtZShjcmVkZW50aWFsRW50aXR5KSxcclxuICAgIF07XHJcbiAgICByZXR1cm4gY3JlZGVudGlhbEtleS5qb2luKFNlcGFyYXRvcnMuQ0FDSEVfS0VZX1NFUEFSQVRPUikudG9Mb3dlckNhc2UoKTtcclxufVxyXG4vKipcclxuICogQ3JlYXRlIElkVG9rZW5FbnRpdHlcclxuICogQHBhcmFtIGhvbWVBY2NvdW50SWRcclxuICogQHBhcmFtIGF1dGhlbnRpY2F0aW9uUmVzdWx0XHJcbiAqIEBwYXJhbSBjbGllbnRJZFxyXG4gKiBAcGFyYW0gYXV0aG9yaXR5XHJcbiAqL1xyXG5mdW5jdGlvbiBjcmVhdGVJZFRva2VuRW50aXR5KGhvbWVBY2NvdW50SWQsIGVudmlyb25tZW50LCBpZFRva2VuLCBjbGllbnRJZCwgdGVuYW50SWQpIHtcclxuICAgIGNvbnN0IGlkVG9rZW5FbnRpdHkgPSB7XHJcbiAgICAgICAgY3JlZGVudGlhbFR5cGU6IENyZWRlbnRpYWxUeXBlLklEX1RPS0VOLFxyXG4gICAgICAgIGhvbWVBY2NvdW50SWQ6IGhvbWVBY2NvdW50SWQsXHJcbiAgICAgICAgZW52aXJvbm1lbnQ6IGVudmlyb25tZW50LFxyXG4gICAgICAgIGNsaWVudElkOiBjbGllbnRJZCxcclxuICAgICAgICBzZWNyZXQ6IGlkVG9rZW4sXHJcbiAgICAgICAgcmVhbG06IHRlbmFudElkLFxyXG4gICAgfTtcclxuICAgIHJldHVybiBpZFRva2VuRW50aXR5O1xyXG59XHJcbi8qKlxyXG4gKiBDcmVhdGUgQWNjZXNzVG9rZW5FbnRpdHlcclxuICogQHBhcmFtIGhvbWVBY2NvdW50SWRcclxuICogQHBhcmFtIGVudmlyb25tZW50XHJcbiAqIEBwYXJhbSBhY2Nlc3NUb2tlblxyXG4gKiBAcGFyYW0gY2xpZW50SWRcclxuICogQHBhcmFtIHRlbmFudElkXHJcbiAqIEBwYXJhbSBzY29wZXNcclxuICogQHBhcmFtIGV4cGlyZXNPblxyXG4gKiBAcGFyYW0gZXh0RXhwaXJlc09uXHJcbiAqL1xyXG5mdW5jdGlvbiBjcmVhdGVBY2Nlc3NUb2tlbkVudGl0eShob21lQWNjb3VudElkLCBlbnZpcm9ubWVudCwgYWNjZXNzVG9rZW4sIGNsaWVudElkLCB0ZW5hbnRJZCwgc2NvcGVzLCBleHBpcmVzT24sIGV4dEV4cGlyZXNPbiwgYmFzZTY0RGVjb2RlLCByZWZyZXNoT24sIHRva2VuVHlwZSwgdXNlckFzc2VydGlvbkhhc2gsIGtleUlkLCByZXF1ZXN0ZWRDbGFpbXMsIHJlcXVlc3RlZENsYWltc0hhc2gpIHtcclxuICAgIGNvbnN0IGF0RW50aXR5ID0ge1xyXG4gICAgICAgIGhvbWVBY2NvdW50SWQ6IGhvbWVBY2NvdW50SWQsXHJcbiAgICAgICAgY3JlZGVudGlhbFR5cGU6IENyZWRlbnRpYWxUeXBlLkFDQ0VTU19UT0tFTixcclxuICAgICAgICBzZWNyZXQ6IGFjY2Vzc1Rva2VuLFxyXG4gICAgICAgIGNhY2hlZEF0OiBub3dTZWNvbmRzKCkudG9TdHJpbmcoKSxcclxuICAgICAgICBleHBpcmVzT246IGV4cGlyZXNPbi50b1N0cmluZygpLFxyXG4gICAgICAgIGV4dGVuZGVkRXhwaXJlc09uOiBleHRFeHBpcmVzT24udG9TdHJpbmcoKSxcclxuICAgICAgICBlbnZpcm9ubWVudDogZW52aXJvbm1lbnQsXHJcbiAgICAgICAgY2xpZW50SWQ6IGNsaWVudElkLFxyXG4gICAgICAgIHJlYWxtOiB0ZW5hbnRJZCxcclxuICAgICAgICB0YXJnZXQ6IHNjb3BlcyxcclxuICAgICAgICB0b2tlblR5cGU6IHRva2VuVHlwZSB8fCBBdXRoZW50aWNhdGlvblNjaGVtZS5CRUFSRVIsXHJcbiAgICB9O1xyXG4gICAgaWYgKHVzZXJBc3NlcnRpb25IYXNoKSB7XHJcbiAgICAgICAgYXRFbnRpdHkudXNlckFzc2VydGlvbkhhc2ggPSB1c2VyQXNzZXJ0aW9uSGFzaDtcclxuICAgIH1cclxuICAgIGlmIChyZWZyZXNoT24pIHtcclxuICAgICAgICBhdEVudGl0eS5yZWZyZXNoT24gPSByZWZyZXNoT24udG9TdHJpbmcoKTtcclxuICAgIH1cclxuICAgIGlmIChyZXF1ZXN0ZWRDbGFpbXMpIHtcclxuICAgICAgICBhdEVudGl0eS5yZXF1ZXN0ZWRDbGFpbXMgPSByZXF1ZXN0ZWRDbGFpbXM7XHJcbiAgICAgICAgYXRFbnRpdHkucmVxdWVzdGVkQ2xhaW1zSGFzaCA9IHJlcXVlc3RlZENsYWltc0hhc2g7XHJcbiAgICB9XHJcbiAgICAvKlxyXG4gICAgICogQ3JlYXRlIEFjY2VzcyBUb2tlbiBXaXRoIEF1dGggU2NoZW1lIGluc3RlYWQgb2YgcmVndWxhciBhY2Nlc3MgdG9rZW5cclxuICAgICAqIENhc3QgdG8gbG93ZXIgdG8gaGFuZGxlIFwiYmVhcmVyXCIgZnJvbSBBREZTXHJcbiAgICAgKi9cclxuICAgIGlmIChhdEVudGl0eS50b2tlblR5cGU/LnRvTG93ZXJDYXNlKCkgIT09XHJcbiAgICAgICAgQXV0aGVudGljYXRpb25TY2hlbWUuQkVBUkVSLnRvTG93ZXJDYXNlKCkpIHtcclxuICAgICAgICBhdEVudGl0eS5jcmVkZW50aWFsVHlwZSA9IENyZWRlbnRpYWxUeXBlLkFDQ0VTU19UT0tFTl9XSVRIX0FVVEhfU0NIRU1FO1xyXG4gICAgICAgIHN3aXRjaCAoYXRFbnRpdHkudG9rZW5UeXBlKSB7XHJcbiAgICAgICAgICAgIGNhc2UgQXV0aGVudGljYXRpb25TY2hlbWUuUE9QOlxyXG4gICAgICAgICAgICAgICAgLy8gTWFrZSBzdXJlIGtleUlkIGlzIHByZXNlbnQgYW5kIGFkZCBpdCB0byBjcmVkZW50aWFsXHJcbiAgICAgICAgICAgICAgICBjb25zdCB0b2tlbkNsYWltcyA9IGV4dHJhY3RUb2tlbkNsYWltcyhhY2Nlc3NUb2tlbiwgYmFzZTY0RGVjb2RlKTtcclxuICAgICAgICAgICAgICAgIGlmICghdG9rZW5DbGFpbXM/LmNuZj8ua2lkKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgY3JlYXRlQ2xpZW50QXV0aEVycm9yKHRva2VuQ2xhaW1zQ25mUmVxdWlyZWRGb3JTaWduZWRKd3QpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgYXRFbnRpdHkua2V5SWQgPSB0b2tlbkNsYWltcy5jbmYua2lkO1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgQXV0aGVudGljYXRpb25TY2hlbWUuU1NIOlxyXG4gICAgICAgICAgICAgICAgYXRFbnRpdHkua2V5SWQgPSBrZXlJZDtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gYXRFbnRpdHk7XHJcbn1cclxuLyoqXHJcbiAqIENyZWF0ZSBSZWZyZXNoVG9rZW5FbnRpdHlcclxuICogQHBhcmFtIGhvbWVBY2NvdW50SWRcclxuICogQHBhcmFtIGF1dGhlbnRpY2F0aW9uUmVzdWx0XHJcbiAqIEBwYXJhbSBjbGllbnRJZFxyXG4gKiBAcGFyYW0gYXV0aG9yaXR5XHJcbiAqL1xyXG5mdW5jdGlvbiBjcmVhdGVSZWZyZXNoVG9rZW5FbnRpdHkoaG9tZUFjY291bnRJZCwgZW52aXJvbm1lbnQsIHJlZnJlc2hUb2tlbiwgY2xpZW50SWQsIGZhbWlseUlkLCB1c2VyQXNzZXJ0aW9uSGFzaCwgZXhwaXJlc09uKSB7XHJcbiAgICBjb25zdCBydEVudGl0eSA9IHtcclxuICAgICAgICBjcmVkZW50aWFsVHlwZTogQ3JlZGVudGlhbFR5cGUuUkVGUkVTSF9UT0tFTixcclxuICAgICAgICBob21lQWNjb3VudElkOiBob21lQWNjb3VudElkLFxyXG4gICAgICAgIGVudmlyb25tZW50OiBlbnZpcm9ubWVudCxcclxuICAgICAgICBjbGllbnRJZDogY2xpZW50SWQsXHJcbiAgICAgICAgc2VjcmV0OiByZWZyZXNoVG9rZW4sXHJcbiAgICB9O1xyXG4gICAgaWYgKHVzZXJBc3NlcnRpb25IYXNoKSB7XHJcbiAgICAgICAgcnRFbnRpdHkudXNlckFzc2VydGlvbkhhc2ggPSB1c2VyQXNzZXJ0aW9uSGFzaDtcclxuICAgIH1cclxuICAgIGlmIChmYW1pbHlJZCkge1xyXG4gICAgICAgIHJ0RW50aXR5LmZhbWlseUlkID0gZmFtaWx5SWQ7XHJcbiAgICB9XHJcbiAgICBpZiAoZXhwaXJlc09uKSB7XHJcbiAgICAgICAgcnRFbnRpdHkuZXhwaXJlc09uID0gZXhwaXJlc09uLnRvU3RyaW5nKCk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gcnRFbnRpdHk7XHJcbn1cclxuZnVuY3Rpb24gaXNDcmVkZW50aWFsRW50aXR5KGVudGl0eSkge1xyXG4gICAgcmV0dXJuIChlbnRpdHkuaGFzT3duUHJvcGVydHkoXCJob21lQWNjb3VudElkXCIpICYmXHJcbiAgICAgICAgZW50aXR5Lmhhc093blByb3BlcnR5KFwiZW52aXJvbm1lbnRcIikgJiZcclxuICAgICAgICBlbnRpdHkuaGFzT3duUHJvcGVydHkoXCJjcmVkZW50aWFsVHlwZVwiKSAmJlxyXG4gICAgICAgIGVudGl0eS5oYXNPd25Qcm9wZXJ0eShcImNsaWVudElkXCIpICYmXHJcbiAgICAgICAgZW50aXR5Lmhhc093blByb3BlcnR5KFwic2VjcmV0XCIpKTtcclxufVxyXG4vKipcclxuICogVmFsaWRhdGVzIGFuIGVudGl0eTogY2hlY2tzIGZvciBhbGwgZXhwZWN0ZWQgcGFyYW1zXHJcbiAqIEBwYXJhbSBlbnRpdHlcclxuICovXHJcbmZ1bmN0aW9uIGlzQWNjZXNzVG9rZW5FbnRpdHkoZW50aXR5KSB7XHJcbiAgICBpZiAoIWVudGl0eSkge1xyXG4gICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuICAgIHJldHVybiAoaXNDcmVkZW50aWFsRW50aXR5KGVudGl0eSkgJiZcclxuICAgICAgICBlbnRpdHkuaGFzT3duUHJvcGVydHkoXCJyZWFsbVwiKSAmJlxyXG4gICAgICAgIGVudGl0eS5oYXNPd25Qcm9wZXJ0eShcInRhcmdldFwiKSAmJlxyXG4gICAgICAgIChlbnRpdHlbXCJjcmVkZW50aWFsVHlwZVwiXSA9PT0gQ3JlZGVudGlhbFR5cGUuQUNDRVNTX1RPS0VOIHx8XHJcbiAgICAgICAgICAgIGVudGl0eVtcImNyZWRlbnRpYWxUeXBlXCJdID09PVxyXG4gICAgICAgICAgICAgICAgQ3JlZGVudGlhbFR5cGUuQUNDRVNTX1RPS0VOX1dJVEhfQVVUSF9TQ0hFTUUpKTtcclxufVxyXG4vKipcclxuICogVmFsaWRhdGVzIGFuIGVudGl0eTogY2hlY2tzIGZvciBhbGwgZXhwZWN0ZWQgcGFyYW1zXHJcbiAqIEBwYXJhbSBlbnRpdHlcclxuICovXHJcbmZ1bmN0aW9uIGlzSWRUb2tlbkVudGl0eShlbnRpdHkpIHtcclxuICAgIGlmICghZW50aXR5KSB7XHJcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIChpc0NyZWRlbnRpYWxFbnRpdHkoZW50aXR5KSAmJlxyXG4gICAgICAgIGVudGl0eS5oYXNPd25Qcm9wZXJ0eShcInJlYWxtXCIpICYmXHJcbiAgICAgICAgZW50aXR5W1wiY3JlZGVudGlhbFR5cGVcIl0gPT09IENyZWRlbnRpYWxUeXBlLklEX1RPS0VOKTtcclxufVxyXG4vKipcclxuICogVmFsaWRhdGVzIGFuIGVudGl0eTogY2hlY2tzIGZvciBhbGwgZXhwZWN0ZWQgcGFyYW1zXHJcbiAqIEBwYXJhbSBlbnRpdHlcclxuICovXHJcbmZ1bmN0aW9uIGlzUmVmcmVzaFRva2VuRW50aXR5KGVudGl0eSkge1xyXG4gICAgaWYgKCFlbnRpdHkpIHtcclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gKGlzQ3JlZGVudGlhbEVudGl0eShlbnRpdHkpICYmXHJcbiAgICAgICAgZW50aXR5W1wiY3JlZGVudGlhbFR5cGVcIl0gPT09IENyZWRlbnRpYWxUeXBlLlJFRlJFU0hfVE9LRU4pO1xyXG59XHJcbi8qKlxyXG4gKiBHZW5lcmF0ZSBBY2NvdW50IElkIGtleSBjb21wb25lbnQgYXMgcGVyIHRoZSBzY2hlbWE6IDxob21lX2FjY291bnRfaWQ+LTxlbnZpcm9ubWVudD5cclxuICovXHJcbmZ1bmN0aW9uIGdlbmVyYXRlQWNjb3VudElkKGNyZWRlbnRpYWxFbnRpdHkpIHtcclxuICAgIGNvbnN0IGFjY291bnRJZCA9IFtcclxuICAgICAgICBjcmVkZW50aWFsRW50aXR5LmhvbWVBY2NvdW50SWQsXHJcbiAgICAgICAgY3JlZGVudGlhbEVudGl0eS5lbnZpcm9ubWVudCxcclxuICAgIF07XHJcbiAgICByZXR1cm4gYWNjb3VudElkLmpvaW4oU2VwYXJhdG9ycy5DQUNIRV9LRVlfU0VQQVJBVE9SKS50b0xvd2VyQ2FzZSgpO1xyXG59XHJcbi8qKlxyXG4gKiBHZW5lcmF0ZSBDcmVkZW50aWFsIElkIGtleSBjb21wb25lbnQgYXMgcGVyIHRoZSBzY2hlbWE6IDxjcmVkZW50aWFsX3R5cGU+LTxjbGllbnRfaWQ+LTxyZWFsbT5cclxuICovXHJcbmZ1bmN0aW9uIGdlbmVyYXRlQ3JlZGVudGlhbElkKGNyZWRlbnRpYWxFbnRpdHkpIHtcclxuICAgIGNvbnN0IGNsaWVudE9yRmFtaWx5SWQgPSBjcmVkZW50aWFsRW50aXR5LmNyZWRlbnRpYWxUeXBlID09PSBDcmVkZW50aWFsVHlwZS5SRUZSRVNIX1RPS0VOXHJcbiAgICAgICAgPyBjcmVkZW50aWFsRW50aXR5LmZhbWlseUlkIHx8IGNyZWRlbnRpYWxFbnRpdHkuY2xpZW50SWRcclxuICAgICAgICA6IGNyZWRlbnRpYWxFbnRpdHkuY2xpZW50SWQ7XHJcbiAgICBjb25zdCBjcmVkZW50aWFsSWQgPSBbXHJcbiAgICAgICAgY3JlZGVudGlhbEVudGl0eS5jcmVkZW50aWFsVHlwZSxcclxuICAgICAgICBjbGllbnRPckZhbWlseUlkLFxyXG4gICAgICAgIGNyZWRlbnRpYWxFbnRpdHkucmVhbG0gfHwgXCJcIixcclxuICAgIF07XHJcbiAgICByZXR1cm4gY3JlZGVudGlhbElkLmpvaW4oU2VwYXJhdG9ycy5DQUNIRV9LRVlfU0VQQVJBVE9SKS50b0xvd2VyQ2FzZSgpO1xyXG59XHJcbi8qKlxyXG4gKiBHZW5lcmF0ZSB0YXJnZXQga2V5IGNvbXBvbmVudCBhcyBwZXIgc2NoZW1hOiA8dGFyZ2V0PlxyXG4gKi9cclxuZnVuY3Rpb24gZ2VuZXJhdGVUYXJnZXQoY3JlZGVudGlhbEVudGl0eSkge1xyXG4gICAgcmV0dXJuIChjcmVkZW50aWFsRW50aXR5LnRhcmdldCB8fCBcIlwiKS50b0xvd2VyQ2FzZSgpO1xyXG59XHJcbi8qKlxyXG4gKiBHZW5lcmF0ZSByZXF1ZXN0ZWQgY2xhaW1zIGtleSBjb21wb25lbnQgYXMgcGVyIHNjaGVtYTogPHJlcXVlc3RlZENsYWltcz5cclxuICovXHJcbmZ1bmN0aW9uIGdlbmVyYXRlQ2xhaW1zSGFzaChjcmVkZW50aWFsRW50aXR5KSB7XHJcbiAgICByZXR1cm4gKGNyZWRlbnRpYWxFbnRpdHkucmVxdWVzdGVkQ2xhaW1zSGFzaCB8fCBcIlwiKS50b0xvd2VyQ2FzZSgpO1xyXG59XHJcbi8qKlxyXG4gKiBHZW5lcmF0ZSBzY2hlbWUga2V5IGNvbXBvbmVuZXQgYXMgcGVyIHNjaGVtYTogPHNjaGVtZT5cclxuICovXHJcbmZ1bmN0aW9uIGdlbmVyYXRlU2NoZW1lKGNyZWRlbnRpYWxFbnRpdHkpIHtcclxuICAgIC8qXHJcbiAgICAgKiBQb1AgVG9rZW5zIGFuZCBTU0ggY2VydHMgaW5jbHVkZSBzY2hlbWUgaW4gY2FjaGUga2V5XHJcbiAgICAgKiBDYXN0IHRvIGxvd2VyY2FzZSB0byBoYW5kbGUgXCJiZWFyZXJcIiBmcm9tIEFERlNcclxuICAgICAqL1xyXG4gICAgcmV0dXJuIGNyZWRlbnRpYWxFbnRpdHkudG9rZW5UeXBlICYmXHJcbiAgICAgICAgY3JlZGVudGlhbEVudGl0eS50b2tlblR5cGUudG9Mb3dlckNhc2UoKSAhPT1cclxuICAgICAgICAgICAgQXV0aGVudGljYXRpb25TY2hlbWUuQkVBUkVSLnRvTG93ZXJDYXNlKClcclxuICAgICAgICA/IGNyZWRlbnRpYWxFbnRpdHkudG9rZW5UeXBlLnRvTG93ZXJDYXNlKClcclxuICAgICAgICA6IFwiXCI7XHJcbn1cclxuLyoqXHJcbiAqIHZhbGlkYXRlcyBpZiBhIGdpdmVuIGNhY2hlIGVudHJ5IGlzIFwiVGVsZW1ldHJ5XCIsIHBhcnNlcyA8a2V5LHZhbHVlPlxyXG4gKiBAcGFyYW0ga2V5XHJcbiAqIEBwYXJhbSBlbnRpdHlcclxuICovXHJcbmZ1bmN0aW9uIGlzU2VydmVyVGVsZW1ldHJ5RW50aXR5KGtleSwgZW50aXR5KSB7XHJcbiAgICBjb25zdCB2YWxpZGF0ZUtleSA9IGtleS5pbmRleE9mKFNFUlZFUl9URUxFTV9DT05TVEFOVFMuQ0FDSEVfS0VZKSA9PT0gMDtcclxuICAgIGxldCB2YWxpZGF0ZUVudGl0eSA9IHRydWU7XHJcbiAgICBpZiAoZW50aXR5KSB7XHJcbiAgICAgICAgdmFsaWRhdGVFbnRpdHkgPVxyXG4gICAgICAgICAgICBlbnRpdHkuaGFzT3duUHJvcGVydHkoXCJmYWlsZWRSZXF1ZXN0c1wiKSAmJlxyXG4gICAgICAgICAgICAgICAgZW50aXR5Lmhhc093blByb3BlcnR5KFwiZXJyb3JzXCIpICYmXHJcbiAgICAgICAgICAgICAgICBlbnRpdHkuaGFzT3duUHJvcGVydHkoXCJjYWNoZUhpdHNcIik7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gdmFsaWRhdGVLZXkgJiYgdmFsaWRhdGVFbnRpdHk7XHJcbn1cclxuLyoqXHJcbiAqIHZhbGlkYXRlcyBpZiBhIGdpdmVuIGNhY2hlIGVudHJ5IGlzIFwiVGhyb3R0bGluZ1wiLCBwYXJzZXMgPGtleSx2YWx1ZT5cclxuICogQHBhcmFtIGtleVxyXG4gKiBAcGFyYW0gZW50aXR5XHJcbiAqL1xyXG5mdW5jdGlvbiBpc1Rocm90dGxpbmdFbnRpdHkoa2V5LCBlbnRpdHkpIHtcclxuICAgIGxldCB2YWxpZGF0ZUtleSA9IGZhbHNlO1xyXG4gICAgaWYgKGtleSkge1xyXG4gICAgICAgIHZhbGlkYXRlS2V5ID0ga2V5LmluZGV4T2YoVGhyb3R0bGluZ0NvbnN0YW50cy5USFJPVFRMSU5HX1BSRUZJWCkgPT09IDA7XHJcbiAgICB9XHJcbiAgICBsZXQgdmFsaWRhdGVFbnRpdHkgPSB0cnVlO1xyXG4gICAgaWYgKGVudGl0eSkge1xyXG4gICAgICAgIHZhbGlkYXRlRW50aXR5ID0gZW50aXR5Lmhhc093blByb3BlcnR5KFwidGhyb3R0bGVUaW1lXCIpO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHZhbGlkYXRlS2V5ICYmIHZhbGlkYXRlRW50aXR5O1xyXG59XHJcbi8qKlxyXG4gKiBHZW5lcmF0ZSBBcHBNZXRhZGF0YSBDYWNoZSBLZXkgYXMgcGVyIHRoZSBzY2hlbWE6IGFwcG1ldGFkYXRhLTxlbnZpcm9ubWVudD4tPGNsaWVudF9pZD5cclxuICovXHJcbmZ1bmN0aW9uIGdlbmVyYXRlQXBwTWV0YWRhdGFLZXkoeyBlbnZpcm9ubWVudCwgY2xpZW50SWQsIH0pIHtcclxuICAgIGNvbnN0IGFwcE1ldGFEYXRhS2V5QXJyYXkgPSBbXHJcbiAgICAgICAgQVBQX01FVEFEQVRBLFxyXG4gICAgICAgIGVudmlyb25tZW50LFxyXG4gICAgICAgIGNsaWVudElkLFxyXG4gICAgXTtcclxuICAgIHJldHVybiBhcHBNZXRhRGF0YUtleUFycmF5XHJcbiAgICAgICAgLmpvaW4oU2VwYXJhdG9ycy5DQUNIRV9LRVlfU0VQQVJBVE9SKVxyXG4gICAgICAgIC50b0xvd2VyQ2FzZSgpO1xyXG59XHJcbi8qXHJcbiAqIFZhbGlkYXRlcyBhbiBlbnRpdHk6IGNoZWNrcyBmb3IgYWxsIGV4cGVjdGVkIHBhcmFtc1xyXG4gKiBAcGFyYW0gZW50aXR5XHJcbiAqL1xyXG5mdW5jdGlvbiBpc0FwcE1ldGFkYXRhRW50aXR5KGtleSwgZW50aXR5KSB7XHJcbiAgICBpZiAoIWVudGl0eSkge1xyXG4gICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuICAgIHJldHVybiAoa2V5LmluZGV4T2YoQVBQX01FVEFEQVRBKSA9PT0gMCAmJlxyXG4gICAgICAgIGVudGl0eS5oYXNPd25Qcm9wZXJ0eShcImNsaWVudElkXCIpICYmXHJcbiAgICAgICAgZW50aXR5Lmhhc093blByb3BlcnR5KFwiZW52aXJvbm1lbnRcIikpO1xyXG59XHJcbi8qKlxyXG4gKiBWYWxpZGF0ZXMgYW4gZW50aXR5OiBjaGVja3MgZm9yIGFsbCBleHBlY3RlZCBwYXJhbXNcclxuICogQHBhcmFtIGVudGl0eVxyXG4gKi9cclxuZnVuY3Rpb24gaXNBdXRob3JpdHlNZXRhZGF0YUVudGl0eShrZXksIGVudGl0eSkge1xyXG4gICAgaWYgKCFlbnRpdHkpIHtcclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gKGtleS5pbmRleE9mKEFVVEhPUklUWV9NRVRBREFUQV9DT05TVEFOVFMuQ0FDSEVfS0VZKSA9PT0gMCAmJlxyXG4gICAgICAgIGVudGl0eS5oYXNPd25Qcm9wZXJ0eShcImFsaWFzZXNcIikgJiZcclxuICAgICAgICBlbnRpdHkuaGFzT3duUHJvcGVydHkoXCJwcmVmZXJyZWRfY2FjaGVcIikgJiZcclxuICAgICAgICBlbnRpdHkuaGFzT3duUHJvcGVydHkoXCJwcmVmZXJyZWRfbmV0d29ya1wiKSAmJlxyXG4gICAgICAgIGVudGl0eS5oYXNPd25Qcm9wZXJ0eShcImNhbm9uaWNhbF9hdXRob3JpdHlcIikgJiZcclxuICAgICAgICBlbnRpdHkuaGFzT3duUHJvcGVydHkoXCJhdXRob3JpemF0aW9uX2VuZHBvaW50XCIpICYmXHJcbiAgICAgICAgZW50aXR5Lmhhc093blByb3BlcnR5KFwidG9rZW5fZW5kcG9pbnRcIikgJiZcclxuICAgICAgICBlbnRpdHkuaGFzT3duUHJvcGVydHkoXCJpc3N1ZXJcIikgJiZcclxuICAgICAgICBlbnRpdHkuaGFzT3duUHJvcGVydHkoXCJhbGlhc2VzRnJvbU5ldHdvcmtcIikgJiZcclxuICAgICAgICBlbnRpdHkuaGFzT3duUHJvcGVydHkoXCJlbmRwb2ludHNGcm9tTmV0d29ya1wiKSAmJlxyXG4gICAgICAgIGVudGl0eS5oYXNPd25Qcm9wZXJ0eShcImV4cGlyZXNBdFwiKSAmJlxyXG4gICAgICAgIGVudGl0eS5oYXNPd25Qcm9wZXJ0eShcImp3a3NfdXJpXCIpKTtcclxufVxyXG4vKipcclxuICogUmVzZXQgdGhlIGV4aXJlc0F0IHZhbHVlXHJcbiAqL1xyXG5mdW5jdGlvbiBnZW5lcmF0ZUF1dGhvcml0eU1ldGFkYXRhRXhwaXJlc0F0KCkge1xyXG4gICAgcmV0dXJuIChub3dTZWNvbmRzKCkgK1xyXG4gICAgICAgIEFVVEhPUklUWV9NRVRBREFUQV9DT05TVEFOVFMuUkVGUkVTSF9USU1FX1NFQ09ORFMpO1xyXG59XHJcbmZ1bmN0aW9uIHVwZGF0ZUF1dGhvcml0eUVuZHBvaW50TWV0YWRhdGEoYXV0aG9yaXR5TWV0YWRhdGEsIHVwZGF0ZWRWYWx1ZXMsIGZyb21OZXR3b3JrKSB7XHJcbiAgICBhdXRob3JpdHlNZXRhZGF0YS5hdXRob3JpemF0aW9uX2VuZHBvaW50ID1cclxuICAgICAgICB1cGRhdGVkVmFsdWVzLmF1dGhvcml6YXRpb25fZW5kcG9pbnQ7XHJcbiAgICBhdXRob3JpdHlNZXRhZGF0YS50b2tlbl9lbmRwb2ludCA9IHVwZGF0ZWRWYWx1ZXMudG9rZW5fZW5kcG9pbnQ7XHJcbiAgICBhdXRob3JpdHlNZXRhZGF0YS5lbmRfc2Vzc2lvbl9lbmRwb2ludCA9IHVwZGF0ZWRWYWx1ZXMuZW5kX3Nlc3Npb25fZW5kcG9pbnQ7XHJcbiAgICBhdXRob3JpdHlNZXRhZGF0YS5pc3N1ZXIgPSB1cGRhdGVkVmFsdWVzLmlzc3VlcjtcclxuICAgIGF1dGhvcml0eU1ldGFkYXRhLmVuZHBvaW50c0Zyb21OZXR3b3JrID0gZnJvbU5ldHdvcms7XHJcbiAgICBhdXRob3JpdHlNZXRhZGF0YS5qd2tzX3VyaSA9IHVwZGF0ZWRWYWx1ZXMuandrc191cmk7XHJcbn1cclxuZnVuY3Rpb24gdXBkYXRlQ2xvdWREaXNjb3ZlcnlNZXRhZGF0YShhdXRob3JpdHlNZXRhZGF0YSwgdXBkYXRlZFZhbHVlcywgZnJvbU5ldHdvcmspIHtcclxuICAgIGF1dGhvcml0eU1ldGFkYXRhLmFsaWFzZXMgPSB1cGRhdGVkVmFsdWVzLmFsaWFzZXM7XHJcbiAgICBhdXRob3JpdHlNZXRhZGF0YS5wcmVmZXJyZWRfY2FjaGUgPSB1cGRhdGVkVmFsdWVzLnByZWZlcnJlZF9jYWNoZTtcclxuICAgIGF1dGhvcml0eU1ldGFkYXRhLnByZWZlcnJlZF9uZXR3b3JrID0gdXBkYXRlZFZhbHVlcy5wcmVmZXJyZWRfbmV0d29yaztcclxuICAgIGF1dGhvcml0eU1ldGFkYXRhLmFsaWFzZXNGcm9tTmV0d29yayA9IGZyb21OZXR3b3JrO1xyXG59XHJcbi8qKlxyXG4gKiBSZXR1cm5zIHdoZXRoZXIgb3Igbm90IHRoZSBkYXRhIG5lZWRzIHRvIGJlIHJlZnJlc2hlZFxyXG4gKi9cclxuZnVuY3Rpb24gaXNBdXRob3JpdHlNZXRhZGF0YUV4cGlyZWQobWV0YWRhdGEpIHtcclxuICAgIHJldHVybiBtZXRhZGF0YS5leHBpcmVzQXQgPD0gbm93U2Vjb25kcygpO1xyXG59XG5cbmV4cG9ydCB7IGNyZWF0ZUFjY2Vzc1Rva2VuRW50aXR5LCBjcmVhdGVJZFRva2VuRW50aXR5LCBjcmVhdGVSZWZyZXNoVG9rZW5FbnRpdHksIGdlbmVyYXRlQXBwTWV0YWRhdGFLZXksIGdlbmVyYXRlQXV0aG9yaXR5TWV0YWRhdGFFeHBpcmVzQXQsIGdlbmVyYXRlQ3JlZGVudGlhbEtleSwgaXNBY2Nlc3NUb2tlbkVudGl0eSwgaXNBcHBNZXRhZGF0YUVudGl0eSwgaXNBdXRob3JpdHlNZXRhZGF0YUVudGl0eSwgaXNBdXRob3JpdHlNZXRhZGF0YUV4cGlyZWQsIGlzQ3JlZGVudGlhbEVudGl0eSwgaXNJZFRva2VuRW50aXR5LCBpc1JlZnJlc2hUb2tlbkVudGl0eSwgaXNTZXJ2ZXJUZWxlbWV0cnlFbnRpdHksIGlzVGhyb3R0bGluZ0VudGl0eSwgdXBkYXRlQXV0aG9yaXR5RW5kcG9pbnRNZXRhZGF0YSwgdXBkYXRlQ2xvdWREaXNjb3ZlcnlNZXRhZGF0YSB9O1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9Q2FjaGVIZWxwZXJzLm1qcy5tYXBcbiIsIi8qISBAYXp1cmUvbXNhbC1jb21tb24gdjE0LjE2LjAgMjAyNC0xMS0wNSAqL1xuJ3VzZSBzdHJpY3QnO1xuaW1wb3J0IHsgY3JlYXRlQ2xpZW50Q29uZmlndXJhdGlvbkVycm9yIH0gZnJvbSAnLi4vZXJyb3IvQ2xpZW50Q29uZmlndXJhdGlvbkVycm9yLm1qcyc7XG5pbXBvcnQgeyBTdHJpbmdVdGlscyB9IGZyb20gJy4uL3V0aWxzL1N0cmluZ1V0aWxzLm1qcyc7XG5pbXBvcnQgeyBjcmVhdGVDbGllbnRBdXRoRXJyb3IgfSBmcm9tICcuLi9lcnJvci9DbGllbnRBdXRoRXJyb3IubWpzJztcbmltcG9ydCB7IENvbnN0YW50cywgT0lEQ19TQ09QRVMgfSBmcm9tICcuLi91dGlscy9Db25zdGFudHMubWpzJztcbmltcG9ydCB7IGVtcHR5SW5wdXRTY29wZXNFcnJvciB9IGZyb20gJy4uL2Vycm9yL0NsaWVudENvbmZpZ3VyYXRpb25FcnJvckNvZGVzLm1qcyc7XG5pbXBvcnQgeyBjYW5ub3RBcHBlbmRTY29wZVNldCwgY2Fubm90UmVtb3ZlRW1wdHlTY29wZSwgZW1wdHlJbnB1dFNjb3BlU2V0IH0gZnJvbSAnLi4vZXJyb3IvQ2xpZW50QXV0aEVycm9yQ29kZXMubWpzJztcblxuLypcclxuICogQ29weXJpZ2h0IChjKSBNaWNyb3NvZnQgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuXHJcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgTGljZW5zZS5cclxuICovXHJcbi8qKlxyXG4gKiBUaGUgU2NvcGVTZXQgY2xhc3MgY3JlYXRlcyBhIHNldCBvZiBzY29wZXMuIFNjb3BlcyBhcmUgY2FzZS1pbnNlbnNpdGl2ZSwgdW5pcXVlIHZhbHVlcywgc28gdGhlIFNldCBvYmplY3QgaW4gSlMgbWFrZXNcclxuICogdGhlIG1vc3Qgc2Vuc2UgdG8gaW1wbGVtZW50IGZvciB0aGlzIGNsYXNzLiBBbGwgc2NvcGVzIGFyZSB0cmltbWVkIGFuZCBjb252ZXJ0ZWQgdG8gbG93ZXIgY2FzZSBzdHJpbmdzIGluIGludGVyc2VjdGlvbiBhbmQgdW5pb24gZnVuY3Rpb25zXHJcbiAqIHRvIGVuc3VyZSB1bmlxdWVuZXNzIG9mIHN0cmluZ3MuXHJcbiAqL1xyXG5jbGFzcyBTY29wZVNldCB7XHJcbiAgICBjb25zdHJ1Y3RvcihpbnB1dFNjb3Blcykge1xyXG4gICAgICAgIC8vIEZpbHRlciBlbXB0eSBzdHJpbmcgYW5kIG51bGwvdW5kZWZpbmVkIGFycmF5IGl0ZW1zXHJcbiAgICAgICAgY29uc3Qgc2NvcGVBcnIgPSBpbnB1dFNjb3Blc1xyXG4gICAgICAgICAgICA/IFN0cmluZ1V0aWxzLnRyaW1BcnJheUVudHJpZXMoWy4uLmlucHV0U2NvcGVzXSlcclxuICAgICAgICAgICAgOiBbXTtcclxuICAgICAgICBjb25zdCBmaWx0ZXJlZElucHV0ID0gc2NvcGVBcnJcclxuICAgICAgICAgICAgPyBTdHJpbmdVdGlscy5yZW1vdmVFbXB0eVN0cmluZ3NGcm9tQXJyYXkoc2NvcGVBcnIpXHJcbiAgICAgICAgICAgIDogW107XHJcbiAgICAgICAgLy8gVmFsaWRhdGUgYW5kIGZpbHRlciBzY29wZXMgKHZhbGlkYXRlIGZ1bmN0aW9uIHRocm93cyBpZiB2YWxpZGF0aW9uIGZhaWxzKVxyXG4gICAgICAgIHRoaXMudmFsaWRhdGVJbnB1dFNjb3BlcyhmaWx0ZXJlZElucHV0KTtcclxuICAgICAgICB0aGlzLnNjb3BlcyA9IG5ldyBTZXQoKTsgLy8gSXRlcmF0b3IgaW4gY29uc3RydWN0b3Igbm90IHN1cHBvcnRlZCBieSBJRTExXHJcbiAgICAgICAgZmlsdGVyZWRJbnB1dC5mb3JFYWNoKChzY29wZSkgPT4gdGhpcy5zY29wZXMuYWRkKHNjb3BlKSk7XHJcbiAgICB9XHJcbiAgICAvKipcclxuICAgICAqIEZhY3RvcnkgbWV0aG9kIHRvIGNyZWF0ZSBTY29wZVNldCBmcm9tIHNwYWNlLWRlbGltaXRlZCBzdHJpbmdcclxuICAgICAqIEBwYXJhbSBpbnB1dFNjb3BlU3RyaW5nXHJcbiAgICAgKiBAcGFyYW0gYXBwQ2xpZW50SWRcclxuICAgICAqIEBwYXJhbSBzY29wZXNSZXF1aXJlZFxyXG4gICAgICovXHJcbiAgICBzdGF0aWMgZnJvbVN0cmluZyhpbnB1dFNjb3BlU3RyaW5nKSB7XHJcbiAgICAgICAgY29uc3Qgc2NvcGVTdHJpbmcgPSBpbnB1dFNjb3BlU3RyaW5nIHx8IENvbnN0YW50cy5FTVBUWV9TVFJJTkc7XHJcbiAgICAgICAgY29uc3QgaW5wdXRTY29wZXMgPSBzY29wZVN0cmluZy5zcGxpdChcIiBcIik7XHJcbiAgICAgICAgcmV0dXJuIG5ldyBTY29wZVNldChpbnB1dFNjb3Blcyk7XHJcbiAgICB9XHJcbiAgICAvKipcclxuICAgICAqIENyZWF0ZXMgdGhlIHNldCBvZiBzY29wZXMgdG8gc2VhcmNoIGZvciBpbiBjYWNoZSBsb29rdXBzXHJcbiAgICAgKiBAcGFyYW0gaW5wdXRTY29wZVN0cmluZ1xyXG4gICAgICogQHJldHVybnNcclxuICAgICAqL1xyXG4gICAgc3RhdGljIGNyZWF0ZVNlYXJjaFNjb3BlcyhpbnB1dFNjb3BlU3RyaW5nKSB7XHJcbiAgICAgICAgY29uc3Qgc2NvcGVTZXQgPSBuZXcgU2NvcGVTZXQoaW5wdXRTY29wZVN0cmluZyk7XHJcbiAgICAgICAgaWYgKCFzY29wZVNldC5jb250YWluc09ubHlPSURDU2NvcGVzKCkpIHtcclxuICAgICAgICAgICAgc2NvcGVTZXQucmVtb3ZlT0lEQ1Njb3BlcygpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgc2NvcGVTZXQucmVtb3ZlU2NvcGUoQ29uc3RhbnRzLk9GRkxJTkVfQUNDRVNTX1NDT1BFKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHNjb3BlU2V0O1xyXG4gICAgfVxyXG4gICAgLyoqXHJcbiAgICAgKiBVc2VkIHRvIHZhbGlkYXRlIHRoZSBzY29wZXMgaW5wdXQgcGFyYW1ldGVyIHJlcXVlc3RlZCAgYnkgdGhlIGRldmVsb3Blci5cclxuICAgICAqIEBwYXJhbSB7QXJyYXk8c3RyaW5nPn0gaW5wdXRTY29wZXMgLSBEZXZlbG9wZXIgcmVxdWVzdGVkIHBlcm1pc3Npb25zLiBOb3QgYWxsIHNjb3BlcyBhcmUgZ3VhcmFudGVlZCB0byBiZSBpbmNsdWRlZCBpbiB0aGUgYWNjZXNzIHRva2VuIHJldHVybmVkLlxyXG4gICAgICogQHBhcmFtIHtib29sZWFufSBzY29wZXNSZXF1aXJlZCAtIEJvb2xlYW4gaW5kaWNhdGluZyB3aGV0aGVyIHRoZSBzY29wZXMgYXJyYXkgaXMgcmVxdWlyZWQgb3Igbm90XHJcbiAgICAgKi9cclxuICAgIHZhbGlkYXRlSW5wdXRTY29wZXMoaW5wdXRTY29wZXMpIHtcclxuICAgICAgICAvLyBDaGVjayBpZiBzY29wZXMgYXJlIHJlcXVpcmVkIGJ1dCBub3QgZ2l2ZW4gb3IgaXMgYW4gZW1wdHkgYXJyYXlcclxuICAgICAgICBpZiAoIWlucHV0U2NvcGVzIHx8IGlucHV0U2NvcGVzLmxlbmd0aCA8IDEpIHtcclxuICAgICAgICAgICAgdGhyb3cgY3JlYXRlQ2xpZW50Q29uZmlndXJhdGlvbkVycm9yKGVtcHR5SW5wdXRTY29wZXNFcnJvcik7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgLyoqXHJcbiAgICAgKiBDaGVjayBpZiBhIGdpdmVuIHNjb3BlIGlzIHByZXNlbnQgaW4gdGhpcyBzZXQgb2Ygc2NvcGVzLlxyXG4gICAgICogQHBhcmFtIHNjb3BlXHJcbiAgICAgKi9cclxuICAgIGNvbnRhaW5zU2NvcGUoc2NvcGUpIHtcclxuICAgICAgICBjb25zdCBsb3dlckNhc2VTY29wZXMgPSB0aGlzLnByaW50U2NvcGVzTG93ZXJDYXNlKCkuc3BsaXQoXCIgXCIpO1xyXG4gICAgICAgIGNvbnN0IGxvd2VyQ2FzZVNjb3Blc1NldCA9IG5ldyBTY29wZVNldChsb3dlckNhc2VTY29wZXMpO1xyXG4gICAgICAgIC8vIGNvbXBhcmUgbG93ZXJjYXNlIHNjb3Blc1xyXG4gICAgICAgIHJldHVybiBzY29wZVxyXG4gICAgICAgICAgICA/IGxvd2VyQ2FzZVNjb3Blc1NldC5zY29wZXMuaGFzKHNjb3BlLnRvTG93ZXJDYXNlKCkpXHJcbiAgICAgICAgICAgIDogZmFsc2U7XHJcbiAgICB9XHJcbiAgICAvKipcclxuICAgICAqIENoZWNrIGlmIGEgc2V0IG9mIHNjb3BlcyBpcyBwcmVzZW50IGluIHRoaXMgc2V0IG9mIHNjb3Blcy5cclxuICAgICAqIEBwYXJhbSBzY29wZVNldFxyXG4gICAgICovXHJcbiAgICBjb250YWluc1Njb3BlU2V0KHNjb3BlU2V0KSB7XHJcbiAgICAgICAgaWYgKCFzY29wZVNldCB8fCBzY29wZVNldC5zY29wZXMuc2l6ZSA8PSAwKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuICh0aGlzLnNjb3Blcy5zaXplID49IHNjb3BlU2V0LnNjb3Blcy5zaXplICYmXHJcbiAgICAgICAgICAgIHNjb3BlU2V0LmFzQXJyYXkoKS5ldmVyeSgoc2NvcGUpID0+IHRoaXMuY29udGFpbnNTY29wZShzY29wZSkpKTtcclxuICAgIH1cclxuICAgIC8qKlxyXG4gICAgICogQ2hlY2sgaWYgc2V0IG9mIHNjb3BlcyBjb250YWlucyBvbmx5IHRoZSBkZWZhdWx0c1xyXG4gICAgICovXHJcbiAgICBjb250YWluc09ubHlPSURDU2NvcGVzKCkge1xyXG4gICAgICAgIGxldCBkZWZhdWx0U2NvcGVDb3VudCA9IDA7XHJcbiAgICAgICAgT0lEQ19TQ09QRVMuZm9yRWFjaCgoZGVmYXVsdFNjb3BlKSA9PiB7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLmNvbnRhaW5zU2NvcGUoZGVmYXVsdFNjb3BlKSkge1xyXG4gICAgICAgICAgICAgICAgZGVmYXVsdFNjb3BlQ291bnQgKz0gMTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIHJldHVybiB0aGlzLnNjb3Blcy5zaXplID09PSBkZWZhdWx0U2NvcGVDb3VudDtcclxuICAgIH1cclxuICAgIC8qKlxyXG4gICAgICogQXBwZW5kcyBzaW5nbGUgc2NvcGUgaWYgcGFzc2VkXHJcbiAgICAgKiBAcGFyYW0gbmV3U2NvcGVcclxuICAgICAqL1xyXG4gICAgYXBwZW5kU2NvcGUobmV3U2NvcGUpIHtcclxuICAgICAgICBpZiAobmV3U2NvcGUpIHtcclxuICAgICAgICAgICAgdGhpcy5zY29wZXMuYWRkKG5ld1Njb3BlLnRyaW0oKSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgLyoqXHJcbiAgICAgKiBBcHBlbmRzIG11bHRpcGxlIHNjb3BlcyBpZiBwYXNzZWRcclxuICAgICAqIEBwYXJhbSBuZXdTY29wZXNcclxuICAgICAqL1xyXG4gICAgYXBwZW5kU2NvcGVzKG5ld1Njb3Blcykge1xyXG4gICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgIG5ld1Njb3Blcy5mb3JFYWNoKChuZXdTY29wZSkgPT4gdGhpcy5hcHBlbmRTY29wZShuZXdTY29wZSkpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjYXRjaCAoZSkge1xyXG4gICAgICAgICAgICB0aHJvdyBjcmVhdGVDbGllbnRBdXRoRXJyb3IoY2Fubm90QXBwZW5kU2NvcGVTZXQpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIC8qKlxyXG4gICAgICogUmVtb3ZlcyBlbGVtZW50IGZyb20gc2V0IG9mIHNjb3Blcy5cclxuICAgICAqIEBwYXJhbSBzY29wZVxyXG4gICAgICovXHJcbiAgICByZW1vdmVTY29wZShzY29wZSkge1xyXG4gICAgICAgIGlmICghc2NvcGUpIHtcclxuICAgICAgICAgICAgdGhyb3cgY3JlYXRlQ2xpZW50QXV0aEVycm9yKGNhbm5vdFJlbW92ZUVtcHR5U2NvcGUpO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLnNjb3Blcy5kZWxldGUoc2NvcGUudHJpbSgpKTtcclxuICAgIH1cclxuICAgIC8qKlxyXG4gICAgICogUmVtb3ZlcyBkZWZhdWx0IHNjb3BlcyBmcm9tIHNldCBvZiBzY29wZXNcclxuICAgICAqIFByaW1hcmlseSB1c2VkIHRvIHByZXZlbnQgY2FjaGUgbWlzc2VzIGlmIHRoZSBkZWZhdWx0IHNjb3BlcyBhcmUgbm90IHJldHVybmVkIGZyb20gdGhlIHNlcnZlclxyXG4gICAgICovXHJcbiAgICByZW1vdmVPSURDU2NvcGVzKCkge1xyXG4gICAgICAgIE9JRENfU0NPUEVTLmZvckVhY2goKGRlZmF1bHRTY29wZSkgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLnNjb3Blcy5kZWxldGUoZGVmYXVsdFNjb3BlKTtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuICAgIC8qKlxyXG4gICAgICogQ29tYmluZXMgYW4gYXJyYXkgb2Ygc2NvcGVzIHdpdGggdGhlIGN1cnJlbnQgc2V0IG9mIHNjb3Blcy5cclxuICAgICAqIEBwYXJhbSBvdGhlclNjb3Blc1xyXG4gICAgICovXHJcbiAgICB1bmlvblNjb3BlU2V0cyhvdGhlclNjb3Blcykge1xyXG4gICAgICAgIGlmICghb3RoZXJTY29wZXMpIHtcclxuICAgICAgICAgICAgdGhyb3cgY3JlYXRlQ2xpZW50QXV0aEVycm9yKGVtcHR5SW5wdXRTY29wZVNldCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNvbnN0IHVuaW9uU2NvcGVzID0gbmV3IFNldCgpOyAvLyBJdGVyYXRvciBpbiBjb25zdHJ1Y3RvciBub3Qgc3VwcG9ydGVkIGluIElFMTFcclxuICAgICAgICBvdGhlclNjb3Blcy5zY29wZXMuZm9yRWFjaCgoc2NvcGUpID0+IHVuaW9uU2NvcGVzLmFkZChzY29wZS50b0xvd2VyQ2FzZSgpKSk7XHJcbiAgICAgICAgdGhpcy5zY29wZXMuZm9yRWFjaCgoc2NvcGUpID0+IHVuaW9uU2NvcGVzLmFkZChzY29wZS50b0xvd2VyQ2FzZSgpKSk7XHJcbiAgICAgICAgcmV0dXJuIHVuaW9uU2NvcGVzO1xyXG4gICAgfVxyXG4gICAgLyoqXHJcbiAgICAgKiBDaGVjayBpZiBzY29wZXMgaW50ZXJzZWN0IGJldHdlZW4gdGhpcyBzZXQgYW5kIGFub3RoZXIuXHJcbiAgICAgKiBAcGFyYW0gb3RoZXJTY29wZXNcclxuICAgICAqL1xyXG4gICAgaW50ZXJzZWN0aW5nU2NvcGVTZXRzKG90aGVyU2NvcGVzKSB7XHJcbiAgICAgICAgaWYgKCFvdGhlclNjb3Blcykge1xyXG4gICAgICAgICAgICB0aHJvdyBjcmVhdGVDbGllbnRBdXRoRXJyb3IoZW1wdHlJbnB1dFNjb3BlU2V0KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgLy8gRG8gbm90IGFsbG93IE9JREMgc2NvcGVzIHRvIGJlIHRoZSBvbmx5IGludGVyc2VjdGluZyBzY29wZXNcclxuICAgICAgICBpZiAoIW90aGVyU2NvcGVzLmNvbnRhaW5zT25seU9JRENTY29wZXMoKSkge1xyXG4gICAgICAgICAgICBvdGhlclNjb3Blcy5yZW1vdmVPSURDU2NvcGVzKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNvbnN0IHVuaW9uU2NvcGVzID0gdGhpcy51bmlvblNjb3BlU2V0cyhvdGhlclNjb3Blcyk7XHJcbiAgICAgICAgY29uc3Qgc2l6ZU90aGVyU2NvcGVzID0gb3RoZXJTY29wZXMuZ2V0U2NvcGVDb3VudCgpO1xyXG4gICAgICAgIGNvbnN0IHNpemVUaGlzU2NvcGVzID0gdGhpcy5nZXRTY29wZUNvdW50KCk7XHJcbiAgICAgICAgY29uc3Qgc2l6ZVVuaW9uU2NvcGVzID0gdW5pb25TY29wZXMuc2l6ZTtcclxuICAgICAgICByZXR1cm4gc2l6ZVVuaW9uU2NvcGVzIDwgc2l6ZVRoaXNTY29wZXMgKyBzaXplT3RoZXJTY29wZXM7XHJcbiAgICB9XHJcbiAgICAvKipcclxuICAgICAqIFJldHVybnMgc2l6ZSBvZiBzZXQgb2Ygc2NvcGVzLlxyXG4gICAgICovXHJcbiAgICBnZXRTY29wZUNvdW50KCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLnNjb3Blcy5zaXplO1xyXG4gICAgfVxyXG4gICAgLyoqXHJcbiAgICAgKiBSZXR1cm5zIHRoZSBzY29wZXMgYXMgYW4gYXJyYXkgb2Ygc3RyaW5nIHZhbHVlc1xyXG4gICAgICovXHJcbiAgICBhc0FycmF5KCkge1xyXG4gICAgICAgIGNvbnN0IGFycmF5ID0gW107XHJcbiAgICAgICAgdGhpcy5zY29wZXMuZm9yRWFjaCgodmFsKSA9PiBhcnJheS5wdXNoKHZhbCkpO1xyXG4gICAgICAgIHJldHVybiBhcnJheTtcclxuICAgIH1cclxuICAgIC8qKlxyXG4gICAgICogUHJpbnRzIHNjb3BlcyBpbnRvIGEgc3BhY2UtZGVsaW1pdGVkIHN0cmluZ1xyXG4gICAgICovXHJcbiAgICBwcmludFNjb3BlcygpIHtcclxuICAgICAgICBpZiAodGhpcy5zY29wZXMpIHtcclxuICAgICAgICAgICAgY29uc3Qgc2NvcGVBcnIgPSB0aGlzLmFzQXJyYXkoKTtcclxuICAgICAgICAgICAgcmV0dXJuIHNjb3BlQXJyLmpvaW4oXCIgXCIpO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gQ29uc3RhbnRzLkVNUFRZX1NUUklORztcclxuICAgIH1cclxuICAgIC8qKlxyXG4gICAgICogUHJpbnRzIHNjb3BlcyBpbnRvIGEgc3BhY2UtZGVsaW1pdGVkIGxvd2VyLWNhc2Ugc3RyaW5nICh1c2VkIGZvciBjYWNoaW5nKVxyXG4gICAgICovXHJcbiAgICBwcmludFNjb3Blc0xvd2VyQ2FzZSgpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5wcmludFNjb3BlcygpLnRvTG93ZXJDYXNlKCk7XHJcbiAgICB9XHJcbn1cblxuZXhwb3J0IHsgU2NvcGVTZXQgfTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPVNjb3BlU2V0Lm1qcy5tYXBcbiIsIi8qISBAYXp1cmUvbXNhbC1jb21tb24gdjE0LjE2LjAgMjAyNC0xMS0wNSAqL1xuJ3VzZSBzdHJpY3QnO1xuaW1wb3J0IHsgY3JlYXRlQ2xpZW50QXV0aEVycm9yIH0gZnJvbSAnLi4vZXJyb3IvQ2xpZW50QXV0aEVycm9yLm1qcyc7XG5pbXBvcnQgeyBTZXBhcmF0b3JzLCBDb25zdGFudHMgfSBmcm9tICcuLi91dGlscy9Db25zdGFudHMubWpzJztcbmltcG9ydCB7IGNsaWVudEluZm9FbXB0eUVycm9yLCBjbGllbnRJbmZvRGVjb2RpbmdFcnJvciB9IGZyb20gJy4uL2Vycm9yL0NsaWVudEF1dGhFcnJvckNvZGVzLm1qcyc7XG5cbi8qXHJcbiAqIENvcHlyaWdodCAoYykgTWljcm9zb2Z0IENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLlxyXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgTUlUIExpY2Vuc2UuXHJcbiAqL1xyXG4vKipcclxuICogRnVuY3Rpb24gdG8gYnVpbGQgYSBjbGllbnQgaW5mbyBvYmplY3QgZnJvbSBzZXJ2ZXIgY2xpZW50SW5mbyBzdHJpbmdcclxuICogQHBhcmFtIHJhd0NsaWVudEluZm9cclxuICogQHBhcmFtIGNyeXB0b1xyXG4gKi9cclxuZnVuY3Rpb24gYnVpbGRDbGllbnRJbmZvKHJhd0NsaWVudEluZm8sIGJhc2U2NERlY29kZSkge1xyXG4gICAgaWYgKCFyYXdDbGllbnRJbmZvKSB7XHJcbiAgICAgICAgdGhyb3cgY3JlYXRlQ2xpZW50QXV0aEVycm9yKGNsaWVudEluZm9FbXB0eUVycm9yKTtcclxuICAgIH1cclxuICAgIHRyeSB7XHJcbiAgICAgICAgY29uc3QgZGVjb2RlZENsaWVudEluZm8gPSBiYXNlNjREZWNvZGUocmF3Q2xpZW50SW5mbyk7XHJcbiAgICAgICAgcmV0dXJuIEpTT04ucGFyc2UoZGVjb2RlZENsaWVudEluZm8pO1xyXG4gICAgfVxyXG4gICAgY2F0Y2ggKGUpIHtcclxuICAgICAgICB0aHJvdyBjcmVhdGVDbGllbnRBdXRoRXJyb3IoY2xpZW50SW5mb0RlY29kaW5nRXJyb3IpO1xyXG4gICAgfVxyXG59XHJcbi8qKlxyXG4gKiBGdW5jdGlvbiB0byBidWlsZCBhIGNsaWVudCBpbmZvIG9iamVjdCBmcm9tIGNhY2hlZCBob21lQWNjb3VudElkIHN0cmluZ1xyXG4gKiBAcGFyYW0gaG9tZUFjY291bnRJZFxyXG4gKi9cclxuZnVuY3Rpb24gYnVpbGRDbGllbnRJbmZvRnJvbUhvbWVBY2NvdW50SWQoaG9tZUFjY291bnRJZCkge1xyXG4gICAgaWYgKCFob21lQWNjb3VudElkKSB7XHJcbiAgICAgICAgdGhyb3cgY3JlYXRlQ2xpZW50QXV0aEVycm9yKGNsaWVudEluZm9EZWNvZGluZ0Vycm9yKTtcclxuICAgIH1cclxuICAgIGNvbnN0IGNsaWVudEluZm9QYXJ0cyA9IGhvbWVBY2NvdW50SWQuc3BsaXQoU2VwYXJhdG9ycy5DTElFTlRfSU5GT19TRVBBUkFUT1IsIDIpO1xyXG4gICAgcmV0dXJuIHtcclxuICAgICAgICB1aWQ6IGNsaWVudEluZm9QYXJ0c1swXSxcclxuICAgICAgICB1dGlkOiBjbGllbnRJbmZvUGFydHMubGVuZ3RoIDwgMlxyXG4gICAgICAgICAgICA/IENvbnN0YW50cy5FTVBUWV9TVFJJTkdcclxuICAgICAgICAgICAgOiBjbGllbnRJbmZvUGFydHNbMV0sXHJcbiAgICB9O1xyXG59XG5cbmV4cG9ydCB7IGJ1aWxkQ2xpZW50SW5mbywgYnVpbGRDbGllbnRJbmZvRnJvbUhvbWVBY2NvdW50SWQgfTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPUNsaWVudEluZm8ubWpzLm1hcFxuIiwiLyohIEBhenVyZS9tc2FsLWNvbW1vbiB2MTQuMTYuMCAyMDI0LTExLTA1ICovXG4ndXNlIHN0cmljdCc7XG4vKlxyXG4gKiBDb3B5cmlnaHQgKGMpIE1pY3Jvc29mdCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cclxuICogTGljZW5zZWQgdW5kZXIgdGhlIE1JVCBMaWNlbnNlLlxyXG4gKi9cclxuLyoqXHJcbiAqIFJldHVybnMgdHJ1ZSBpZiB0ZW5hbnRJZCBtYXRjaGVzIHRoZSB1dGlkIHBvcnRpb24gb2YgaG9tZUFjY291bnRJZFxyXG4gKiBAcGFyYW0gdGVuYW50SWRcclxuICogQHBhcmFtIGhvbWVBY2NvdW50SWRcclxuICogQHJldHVybnNcclxuICovXHJcbmZ1bmN0aW9uIHRlbmFudElkTWF0Y2hlc0hvbWVUZW5hbnQodGVuYW50SWQsIGhvbWVBY2NvdW50SWQpIHtcclxuICAgIHJldHVybiAoISF0ZW5hbnRJZCAmJlxyXG4gICAgICAgICEhaG9tZUFjY291bnRJZCAmJlxyXG4gICAgICAgIHRlbmFudElkID09PSBob21lQWNjb3VudElkLnNwbGl0KFwiLlwiKVsxXSk7XHJcbn1cclxuLyoqXHJcbiAqIEJ1aWxkIHRlbmFudCBwcm9maWxlXHJcbiAqIEBwYXJhbSBob21lQWNjb3VudElkIC0gSG9tZSBhY2NvdW50IGlkZW50aWZpZXIgZm9yIHRoaXMgYWNjb3VudCBvYmplY3RcclxuICogQHBhcmFtIGxvY2FsQWNjb3VudElkIC0gTG9jYWwgYWNjb3VudCBpZGVudGlmZXIgZm9yIHRoaXMgYWNjb3VudCBvYmplY3RcclxuICogQHBhcmFtIHRlbmFudElkIC0gRnVsbCB0ZW5hbnQgb3Igb3JnYW5pemF0aW9uYWwgaWQgdGhhdCB0aGlzIGFjY291bnQgYmVsb25ncyB0b1xyXG4gKiBAcGFyYW0gaWRUb2tlbkNsYWltcyAtIENsYWltcyBmcm9tIHRoZSBJRCB0b2tlblxyXG4gKiBAcmV0dXJuc1xyXG4gKi9cclxuZnVuY3Rpb24gYnVpbGRUZW5hbnRQcm9maWxlKGhvbWVBY2NvdW50SWQsIGxvY2FsQWNjb3VudElkLCB0ZW5hbnRJZCwgaWRUb2tlbkNsYWltcykge1xyXG4gICAgaWYgKGlkVG9rZW5DbGFpbXMpIHtcclxuICAgICAgICBjb25zdCB7IG9pZCwgc3ViLCB0aWQsIG5hbWUsIHRmcCwgYWNyIH0gPSBpZFRva2VuQ2xhaW1zO1xyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIFNpbmNlIHRoZXJlIGlzIG5vIHdheSB0byBkZXRlcm1pbmUgaWYgdGhlIGF1dGhvcml0eSBpcyBBQUQgb3IgQjJDLCB3ZSBleGhhdXN0IGFsbCB0aGUgcG9zc2libGUgY2xhaW1zIHRoYXQgY2FuIHNlcnZlIGFzIHRlbmFudCBJRCB3aXRoIHRoZSBmb2xsb3dpbmcgcHJlY2VkZW5jZTpcclxuICAgICAgICAgKiB0aWQgLSBUZW5hbnRJRCBjbGFpbSB0aGF0IGlkZW50aWZpZXMgdGhlIHRlbmFudCB0aGF0IGlzc3VlZCB0aGUgdG9rZW4gaW4gQUFELiBFeHBlY3RlZCBpbiBhbGwgQUFEIElEIHRva2Vucywgbm90IHByZXNlbnQgaW4gQjJDIElEIFRva2Vucy5cclxuICAgICAgICAgKiB0ZnAgLSBUcnVzdCBGcmFtZXdvcmsgUG9saWN5IGNsYWltIHRoYXQgaWRlbnRpZmllcyB0aGUgcG9saWN5IHRoYXQgd2FzIHVzZWQgdG8gYXV0aGVudGljYXRlIHRoZSB1c2VyLiBGdW5jdGlvbnMgYXMgdGVuYW50IGZvciBCMkMgc2NlbmFyaW9zLlxyXG4gICAgICAgICAqIGFjciAtIEF1dGhlbnRpY2F0aW9uIENvbnRleHQgQ2xhc3MgUmVmZXJlbmNlIGNsYWltIHVzZWQgb25seSB3aXRoIG9sZGVyIEIyQyBwb2xpY2llcy4gRmFsbGJhY2sgaW4gY2FzZSB0ZnAgaXMgbm90IHByZXNlbnQsIGJ1dCBsaWtlbHkgd29uJ3QgYmUgcHJlc2VudCBhbnl3YXkuXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgY29uc3QgdGVuYW50SWQgPSB0aWQgfHwgdGZwIHx8IGFjciB8fCBcIlwiO1xyXG4gICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgIHRlbmFudElkOiB0ZW5hbnRJZCxcclxuICAgICAgICAgICAgbG9jYWxBY2NvdW50SWQ6IG9pZCB8fCBzdWIgfHwgXCJcIixcclxuICAgICAgICAgICAgbmFtZTogbmFtZSxcclxuICAgICAgICAgICAgaXNIb21lVGVuYW50OiB0ZW5hbnRJZE1hdGNoZXNIb21lVGVuYW50KHRlbmFudElkLCBob21lQWNjb3VudElkKSxcclxuICAgICAgICB9O1xyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcbiAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgdGVuYW50SWQsXHJcbiAgICAgICAgICAgIGxvY2FsQWNjb3VudElkLFxyXG4gICAgICAgICAgICBpc0hvbWVUZW5hbnQ6IHRlbmFudElkTWF0Y2hlc0hvbWVUZW5hbnQodGVuYW50SWQsIGhvbWVBY2NvdW50SWQpLFxyXG4gICAgICAgIH07XHJcbiAgICB9XHJcbn1cclxuLyoqXHJcbiAqIFJlcGxhY2VzIGFjY291bnQgaW5mbyB0aGF0IHZhcmllcyBieSB0ZW5hbnQgcHJvZmlsZSBzb3VyY2VkIGZyb20gdGhlIElEIHRva2VuIGNsYWltcyBwYXNzZWQgaW4gd2l0aCB0aGUgdGVuYW50LXNwZWNpZmljIGFjY291bnQgaW5mb1xyXG4gKiBAcGFyYW0gYmFzZUFjY291bnRJbmZvXHJcbiAqIEBwYXJhbSBpZFRva2VuQ2xhaW1zXHJcbiAqIEByZXR1cm5zXHJcbiAqL1xyXG5mdW5jdGlvbiB1cGRhdGVBY2NvdW50VGVuYW50UHJvZmlsZURhdGEoYmFzZUFjY291bnRJbmZvLCB0ZW5hbnRQcm9maWxlLCBpZFRva2VuQ2xhaW1zLCBpZFRva2VuU2VjcmV0KSB7XHJcbiAgICBsZXQgdXBkYXRlZEFjY291bnRJbmZvID0gYmFzZUFjY291bnRJbmZvO1xyXG4gICAgLy8gVGVuYW50IFByb2ZpbGUgb3ZlcnJpZGVzIHBhc3NlZCBpbiBhY2NvdW50IGluZm9cclxuICAgIGlmICh0ZW5hbnRQcm9maWxlKSB7XHJcbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnVzZWQtdmFyc1xyXG4gICAgICAgIGNvbnN0IHsgaXNIb21lVGVuYW50LCAuLi50ZW5hbnRQcm9maWxlT3ZlcnJpZGUgfSA9IHRlbmFudFByb2ZpbGU7XHJcbiAgICAgICAgdXBkYXRlZEFjY291bnRJbmZvID0geyAuLi5iYXNlQWNjb3VudEluZm8sIC4uLnRlbmFudFByb2ZpbGVPdmVycmlkZSB9O1xyXG4gICAgfVxyXG4gICAgLy8gSUQgdG9rZW4gY2xhaW1zIG92ZXJyaWRlIHBhc3NlZCBpbiBhY2NvdW50IGluZm8gYW5kIHRlbmFudCBwcm9maWxlXHJcbiAgICBpZiAoaWRUb2tlbkNsYWltcykge1xyXG4gICAgICAgIC8vIElnbm9yZSBpc0hvbWVUZW5hbnQsIGxvZ2luSGludCwgYW5kIHNpZCB3aGljaCBhcmUgcGFydCBvZiB0ZW5hbnQgcHJvZmlsZSBidXQgbm90IGJhc2UgYWNjb3VudCBpbmZvXHJcbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnVzZWQtdmFyc1xyXG4gICAgICAgIGNvbnN0IHsgaXNIb21lVGVuYW50LCAuLi5jbGFpbXNTb3VyY2VkVGVuYW50UHJvZmlsZSB9ID0gYnVpbGRUZW5hbnRQcm9maWxlKGJhc2VBY2NvdW50SW5mby5ob21lQWNjb3VudElkLCBiYXNlQWNjb3VudEluZm8ubG9jYWxBY2NvdW50SWQsIGJhc2VBY2NvdW50SW5mby50ZW5hbnRJZCwgaWRUb2tlbkNsYWltcyk7XHJcbiAgICAgICAgdXBkYXRlZEFjY291bnRJbmZvID0ge1xyXG4gICAgICAgICAgICAuLi51cGRhdGVkQWNjb3VudEluZm8sXHJcbiAgICAgICAgICAgIC4uLmNsYWltc1NvdXJjZWRUZW5hbnRQcm9maWxlLFxyXG4gICAgICAgICAgICBpZFRva2VuQ2xhaW1zOiBpZFRva2VuQ2xhaW1zLFxyXG4gICAgICAgICAgICBpZFRva2VuOiBpZFRva2VuU2VjcmV0LFxyXG4gICAgICAgIH07XHJcbiAgICAgICAgcmV0dXJuIHVwZGF0ZWRBY2NvdW50SW5mbztcclxuICAgIH1cclxuICAgIHJldHVybiB1cGRhdGVkQWNjb3VudEluZm87XHJcbn1cblxuZXhwb3J0IHsgYnVpbGRUZW5hbnRQcm9maWxlLCB0ZW5hbnRJZE1hdGNoZXNIb21lVGVuYW50LCB1cGRhdGVBY2NvdW50VGVuYW50UHJvZmlsZURhdGEgfTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPUFjY291bnRJbmZvLm1qcy5tYXBcbiIsIi8qISBAYXp1cmUvbXNhbC1jb21tb24gdjE0LjE2LjAgMjAyNC0xMS0wNSAqL1xuJ3VzZSBzdHJpY3QnO1xuLypcclxuICogQ29weXJpZ2h0IChjKSBNaWNyb3NvZnQgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuXHJcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgTGljZW5zZS5cclxuICovXHJcbi8qKlxyXG4gKiBBdXRob3JpdHkgdHlwZXMgc3VwcG9ydGVkIGJ5IE1TQUwuXHJcbiAqL1xyXG5jb25zdCBBdXRob3JpdHlUeXBlID0ge1xyXG4gICAgRGVmYXVsdDogMCxcclxuICAgIEFkZnM6IDEsXHJcbiAgICBEc3RzOiAyLFxyXG4gICAgQ2lhbTogMyxcclxufTtcblxuZXhwb3J0IHsgQXV0aG9yaXR5VHlwZSB9O1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9QXV0aG9yaXR5VHlwZS5tanMubWFwXG4iLCIvKiEgQGF6dXJlL21zYWwtY29tbW9uIHYxNC4xNi4wIDIwMjQtMTEtMDUgKi9cbid1c2Ugc3RyaWN0Jztcbi8qXHJcbiAqIENvcHlyaWdodCAoYykgTWljcm9zb2Z0IENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLlxyXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgTUlUIExpY2Vuc2UuXHJcbiAqL1xyXG4vKipcclxuICogR2V0cyB0ZW5hbnRJZCBmcm9tIGF2YWlsYWJsZSBJRCB0b2tlbiBjbGFpbXMgdG8gc2V0IGFzIGNyZWRlbnRpYWwgcmVhbG0gd2l0aCB0aGUgZm9sbG93aW5nIHByZWNlZGVuY2U6XHJcbiAqIDEuIHRpZCAtIGlmIHRoZSB0b2tlbiBpcyBhY3F1aXJlZCBmcm9tIGFuIEF6dXJlIEFEIHRlbmFudCB0aWQgd2lsbCBiZSBwcmVzZW50XHJcbiAqIDIuIHRmcCAtIGlmIHRoZSB0b2tlbiBpcyBhY3F1aXJlZCBmcm9tIGEgbW9kZXJuIEIyQyB0ZW5hbnQgdGZwIHNob3VsZCBiZSBwcmVzZW50XHJcbiAqIDMuIGFjciAtIGlmIHRoZSB0b2tlbiBpcyBhY3F1aXJlZCBmcm9tIGEgbGVnYWN5IEIyQyB0ZW5hbnQgYWNyIHNob3VsZCBiZSBwcmVzZW50XHJcbiAqIERvd25jYXNlZCB0byBtYXRjaCB0aGUgcmVhbG0gY2FzZS1pbnNlbnNpdGl2ZSBjb21wYXJpc29uIHJlcXVpcmVtZW50c1xyXG4gKiBAcGFyYW0gaWRUb2tlbkNsYWltc1xyXG4gKiBAcmV0dXJuc1xyXG4gKi9cclxuZnVuY3Rpb24gZ2V0VGVuYW50SWRGcm9tSWRUb2tlbkNsYWltcyhpZFRva2VuQ2xhaW1zKSB7XHJcbiAgICBpZiAoaWRUb2tlbkNsYWltcykge1xyXG4gICAgICAgIGNvbnN0IHRlbmFudElkID0gaWRUb2tlbkNsYWltcy50aWQgfHwgaWRUb2tlbkNsYWltcy50ZnAgfHwgaWRUb2tlbkNsYWltcy5hY3I7XHJcbiAgICAgICAgcmV0dXJuIHRlbmFudElkIHx8IG51bGw7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gbnVsbDtcclxufVxuXG5leHBvcnQgeyBnZXRUZW5hbnRJZEZyb21JZFRva2VuQ2xhaW1zIH07XG4vLyMgc291cmNlTWFwcGluZ1VSTD1Ub2tlbkNsYWltcy5tanMubWFwXG4iLCIvKiEgQGF6dXJlL21zYWwtY29tbW9uIHYxNC4xNi4wIDIwMjQtMTEtMDUgKi9cbid1c2Ugc3RyaWN0JztcbmltcG9ydCB7IFNlcGFyYXRvcnMsIENhY2hlQWNjb3VudFR5cGUgfSBmcm9tICcuLi8uLi91dGlscy9Db25zdGFudHMubWpzJztcbmltcG9ydCB7IGJ1aWxkQ2xpZW50SW5mbyB9IGZyb20gJy4uLy4uL2FjY291bnQvQ2xpZW50SW5mby5tanMnO1xuaW1wb3J0IHsgYnVpbGRUZW5hbnRQcm9maWxlIH0gZnJvbSAnLi4vLi4vYWNjb3VudC9BY2NvdW50SW5mby5tanMnO1xuaW1wb3J0IHsgY3JlYXRlQ2xpZW50QXV0aEVycm9yIH0gZnJvbSAnLi4vLi4vZXJyb3IvQ2xpZW50QXV0aEVycm9yLm1qcyc7XG5pbXBvcnQgeyBBdXRob3JpdHlUeXBlIH0gZnJvbSAnLi4vLi4vYXV0aG9yaXR5L0F1dGhvcml0eVR5cGUubWpzJztcbmltcG9ydCB7IGdldFRlbmFudElkRnJvbUlkVG9rZW5DbGFpbXMgfSBmcm9tICcuLi8uLi9hY2NvdW50L1Rva2VuQ2xhaW1zLm1qcyc7XG5pbXBvcnQgeyBQcm90b2NvbE1vZGUgfSBmcm9tICcuLi8uLi9hdXRob3JpdHkvUHJvdG9jb2xNb2RlLm1qcyc7XG5pbXBvcnQgeyBpbnZhbGlkQ2FjaGVFbnZpcm9ubWVudCB9IGZyb20gJy4uLy4uL2Vycm9yL0NsaWVudEF1dGhFcnJvckNvZGVzLm1qcyc7XG5cbi8qXHJcbiAqIENvcHlyaWdodCAoYykgTWljcm9zb2Z0IENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLlxyXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgTUlUIExpY2Vuc2UuXHJcbiAqL1xyXG4vKipcclxuICogVHlwZSB0aGF0IGRlZmluZXMgcmVxdWlyZWQgYW5kIG9wdGlvbmFsIHBhcmFtZXRlcnMgZm9yIGFuIEFjY291bnQgZmllbGQgKGJhc2VkIG9uIHVuaXZlcnNhbCBjYWNoZSBzY2hlbWEgaW1wbGVtZW50ZWQgYnkgYWxsIE1TQUxzKS5cclxuICpcclxuICogS2V5IDogVmFsdWUgU2NoZW1hXHJcbiAqXHJcbiAqIEtleTogPGhvbWVfYWNjb3VudF9pZD4tPGVudmlyb25tZW50Pi08cmVhbG0qPlxyXG4gKlxyXG4gKiBWYWx1ZSBTY2hlbWE6XHJcbiAqIHtcclxuICogICAgICBob21lQWNjb3VudElkOiBob21lIGFjY291bnQgaWRlbnRpZmllciBmb3IgdGhlIGF1dGggc2NoZW1lLFxyXG4gKiAgICAgIGVudmlyb25tZW50OiBlbnRpdHkgdGhhdCBpc3N1ZWQgdGhlIHRva2VuLCByZXByZXNlbnRlZCBhcyBhIGZ1bGwgaG9zdFxyXG4gKiAgICAgIHJlYWxtOiBGdWxsIHRlbmFudCBvciBvcmdhbml6YXRpb25hbCBpZGVudGlmaWVyIHRoYXQgdGhlIGFjY291bnQgYmVsb25ncyB0b1xyXG4gKiAgICAgIGxvY2FsQWNjb3VudElkOiBPcmlnaW5hbCB0ZW5hbnQtc3BlY2lmaWMgYWNjb3VudElELCB1c3VhbGx5IHVzZWQgZm9yIGxlZ2FjeSBjYXNlc1xyXG4gKiAgICAgIHVzZXJuYW1lOiBwcmltYXJ5IHVzZXJuYW1lIHRoYXQgcmVwcmVzZW50cyB0aGUgdXNlciwgdXN1YWxseSBjb3JyZXNwb25kcyB0byBwcmVmZXJyZWRfdXNlcm5hbWUgaW4gdGhlIHYyIGVuZHB0XHJcbiAqICAgICAgYXV0aG9yaXR5VHlwZTogQWNjb3VudHMgYXV0aG9yaXR5IHR5cGUgYXMgYSBzdHJpbmdcclxuICogICAgICBuYW1lOiBGdWxsIG5hbWUgZm9yIHRoZSBhY2NvdW50LCBpbmNsdWRpbmcgZ2l2ZW4gbmFtZSBhbmQgZmFtaWx5IG5hbWUsXHJcbiAqICAgICAgbGFzdE1vZGlmaWNhdGlvblRpbWU6IGxhc3QgdGltZSB0aGlzIGVudGl0eSB3YXMgbW9kaWZpZWQgaW4gdGhlIGNhY2hlXHJcbiAqICAgICAgbGFzdE1vZGlmaWNhdGlvbkFwcDpcclxuICogICAgICBuYXRpdmVBY2NvdW50SWQ6IEFjY291bnQgaWRlbnRpZmllciBvbiB0aGUgbmF0aXZlIGRldmljZVxyXG4gKiAgICAgIHRlbmFudFByb2ZpbGVzOiBBcnJheSBvZiB0ZW5hbnQgcHJvZmlsZSBvYmplY3RzIGZvciBlYWNoIHRlbmFudCB0aGF0IHRoZSBhY2NvdW50IGhhcyBhdXRoZW50aWNhdGVkIHdpdGggaW4gdGhlIGJyb3dzZXJcclxuICogfVxyXG4gKiBAaW50ZXJuYWxcclxuICovXHJcbmNsYXNzIEFjY291bnRFbnRpdHkge1xyXG4gICAgLyoqXHJcbiAgICAgKiBHZW5lcmF0ZSBBY2NvdW50IElkIGtleSBjb21wb25lbnQgYXMgcGVyIHRoZSBzY2hlbWE6IDxob21lX2FjY291bnRfaWQ+LTxlbnZpcm9ubWVudD5cclxuICAgICAqL1xyXG4gICAgZ2VuZXJhdGVBY2NvdW50SWQoKSB7XHJcbiAgICAgICAgY29uc3QgYWNjb3VudElkID0gW3RoaXMuaG9tZUFjY291bnRJZCwgdGhpcy5lbnZpcm9ubWVudF07XHJcbiAgICAgICAgcmV0dXJuIGFjY291bnRJZC5qb2luKFNlcGFyYXRvcnMuQ0FDSEVfS0VZX1NFUEFSQVRPUikudG9Mb3dlckNhc2UoKTtcclxuICAgIH1cclxuICAgIC8qKlxyXG4gICAgICogR2VuZXJhdGUgQWNjb3VudCBDYWNoZSBLZXkgYXMgcGVyIHRoZSBzY2hlbWE6IDxob21lX2FjY291bnRfaWQ+LTxlbnZpcm9ubWVudD4tPHJlYWxtKj5cclxuICAgICAqL1xyXG4gICAgZ2VuZXJhdGVBY2NvdW50S2V5KCkge1xyXG4gICAgICAgIHJldHVybiBBY2NvdW50RW50aXR5LmdlbmVyYXRlQWNjb3VudENhY2hlS2V5KHtcclxuICAgICAgICAgICAgaG9tZUFjY291bnRJZDogdGhpcy5ob21lQWNjb3VudElkLFxyXG4gICAgICAgICAgICBlbnZpcm9ubWVudDogdGhpcy5lbnZpcm9ubWVudCxcclxuICAgICAgICAgICAgdGVuYW50SWQ6IHRoaXMucmVhbG0sXHJcbiAgICAgICAgICAgIHVzZXJuYW1lOiB0aGlzLnVzZXJuYW1lLFxyXG4gICAgICAgICAgICBsb2NhbEFjY291bnRJZDogdGhpcy5sb2NhbEFjY291bnRJZCxcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuICAgIC8qKlxyXG4gICAgICogUmV0dXJucyB0aGUgQWNjb3VudEluZm8gaW50ZXJmYWNlIGZvciB0aGlzIGFjY291bnQuXHJcbiAgICAgKi9cclxuICAgIGdldEFjY291bnRJbmZvKCkge1xyXG4gICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgIGhvbWVBY2NvdW50SWQ6IHRoaXMuaG9tZUFjY291bnRJZCxcclxuICAgICAgICAgICAgZW52aXJvbm1lbnQ6IHRoaXMuZW52aXJvbm1lbnQsXHJcbiAgICAgICAgICAgIHRlbmFudElkOiB0aGlzLnJlYWxtLFxyXG4gICAgICAgICAgICB1c2VybmFtZTogdGhpcy51c2VybmFtZSxcclxuICAgICAgICAgICAgbG9jYWxBY2NvdW50SWQ6IHRoaXMubG9jYWxBY2NvdW50SWQsXHJcbiAgICAgICAgICAgIG5hbWU6IHRoaXMubmFtZSxcclxuICAgICAgICAgICAgbmF0aXZlQWNjb3VudElkOiB0aGlzLm5hdGl2ZUFjY291bnRJZCxcclxuICAgICAgICAgICAgYXV0aG9yaXR5VHlwZTogdGhpcy5hdXRob3JpdHlUeXBlLFxyXG4gICAgICAgICAgICAvLyBEZXNlcmlhbGl6ZSB0ZW5hbnQgcHJvZmlsZXMgYXJyYXkgaW50byBhIE1hcFxyXG4gICAgICAgICAgICB0ZW5hbnRQcm9maWxlczogbmV3IE1hcCgodGhpcy50ZW5hbnRQcm9maWxlcyB8fCBbXSkubWFwKCh0ZW5hbnRQcm9maWxlKSA9PiB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gW3RlbmFudFByb2ZpbGUudGVuYW50SWQsIHRlbmFudFByb2ZpbGVdO1xyXG4gICAgICAgICAgICB9KSksXHJcbiAgICAgICAgfTtcclxuICAgIH1cclxuICAgIC8qKlxyXG4gICAgICogUmV0dXJucyB0cnVlIGlmIHRoZSBhY2NvdW50IGVudGl0eSBpcyBpbiBzaW5nbGUgdGVuYW50IGZvcm1hdCAob3V0ZGF0ZWQpLCBmYWxzZSBvdGhlcndpc2VcclxuICAgICAqL1xyXG4gICAgaXNTaW5nbGVUZW5hbnQoKSB7XHJcbiAgICAgICAgcmV0dXJuICF0aGlzLnRlbmFudFByb2ZpbGVzO1xyXG4gICAgfVxyXG4gICAgLyoqXHJcbiAgICAgKiBHZW5lcmF0ZXMgYWNjb3VudCBrZXkgZnJvbSBpbnRlcmZhY2VcclxuICAgICAqIEBwYXJhbSBhY2NvdW50SW50ZXJmYWNlXHJcbiAgICAgKi9cclxuICAgIHN0YXRpYyBnZW5lcmF0ZUFjY291bnRDYWNoZUtleShhY2NvdW50SW50ZXJmYWNlKSB7XHJcbiAgICAgICAgY29uc3QgaG9tZVRlbmFudElkID0gYWNjb3VudEludGVyZmFjZS5ob21lQWNjb3VudElkLnNwbGl0KFwiLlwiKVsxXTtcclxuICAgICAgICBjb25zdCBhY2NvdW50S2V5ID0gW1xyXG4gICAgICAgICAgICBhY2NvdW50SW50ZXJmYWNlLmhvbWVBY2NvdW50SWQsXHJcbiAgICAgICAgICAgIGFjY291bnRJbnRlcmZhY2UuZW52aXJvbm1lbnQgfHwgXCJcIixcclxuICAgICAgICAgICAgaG9tZVRlbmFudElkIHx8IGFjY291bnRJbnRlcmZhY2UudGVuYW50SWQgfHwgXCJcIixcclxuICAgICAgICBdO1xyXG4gICAgICAgIHJldHVybiBhY2NvdW50S2V5LmpvaW4oU2VwYXJhdG9ycy5DQUNIRV9LRVlfU0VQQVJBVE9SKS50b0xvd2VyQ2FzZSgpO1xyXG4gICAgfVxyXG4gICAgLyoqXHJcbiAgICAgKiBCdWlsZCBBY2NvdW50IGNhY2hlIGZyb20gSWRUb2tlbiwgY2xpZW50SW5mbyBhbmQgYXV0aG9yaXR5L3BvbGljeS4gQXNzb2NpYXRlZCB3aXRoIEFBRC5cclxuICAgICAqIEBwYXJhbSBhY2NvdW50RGV0YWlsc1xyXG4gICAgICovXHJcbiAgICBzdGF0aWMgY3JlYXRlQWNjb3VudChhY2NvdW50RGV0YWlscywgYXV0aG9yaXR5LCBiYXNlNjREZWNvZGUpIHtcclxuICAgICAgICBjb25zdCBhY2NvdW50ID0gbmV3IEFjY291bnRFbnRpdHkoKTtcclxuICAgICAgICBpZiAoYXV0aG9yaXR5LmF1dGhvcml0eVR5cGUgPT09IEF1dGhvcml0eVR5cGUuQWRmcykge1xyXG4gICAgICAgICAgICBhY2NvdW50LmF1dGhvcml0eVR5cGUgPSBDYWNoZUFjY291bnRUeXBlLkFERlNfQUNDT1VOVF9UWVBFO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIGlmIChhdXRob3JpdHkucHJvdG9jb2xNb2RlID09PSBQcm90b2NvbE1vZGUuQUFEKSB7XHJcbiAgICAgICAgICAgIGFjY291bnQuYXV0aG9yaXR5VHlwZSA9IENhY2hlQWNjb3VudFR5cGUuTVNTVFNfQUNDT1VOVF9UWVBFO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgYWNjb3VudC5hdXRob3JpdHlUeXBlID0gQ2FjaGVBY2NvdW50VHlwZS5HRU5FUklDX0FDQ09VTlRfVFlQRTtcclxuICAgICAgICB9XHJcbiAgICAgICAgbGV0IGNsaWVudEluZm87XHJcbiAgICAgICAgaWYgKGFjY291bnREZXRhaWxzLmNsaWVudEluZm8gJiYgYmFzZTY0RGVjb2RlKSB7XHJcbiAgICAgICAgICAgIGNsaWVudEluZm8gPSBidWlsZENsaWVudEluZm8oYWNjb3VudERldGFpbHMuY2xpZW50SW5mbywgYmFzZTY0RGVjb2RlKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgYWNjb3VudC5jbGllbnRJbmZvID0gYWNjb3VudERldGFpbHMuY2xpZW50SW5mbztcclxuICAgICAgICBhY2NvdW50LmhvbWVBY2NvdW50SWQgPSBhY2NvdW50RGV0YWlscy5ob21lQWNjb3VudElkO1xyXG4gICAgICAgIGFjY291bnQubmF0aXZlQWNjb3VudElkID0gYWNjb3VudERldGFpbHMubmF0aXZlQWNjb3VudElkO1xyXG4gICAgICAgIGNvbnN0IGVudiA9IGFjY291bnREZXRhaWxzLmVudmlyb25tZW50IHx8XHJcbiAgICAgICAgICAgIChhdXRob3JpdHkgJiYgYXV0aG9yaXR5LmdldFByZWZlcnJlZENhY2hlKCkpO1xyXG4gICAgICAgIGlmICghZW52KSB7XHJcbiAgICAgICAgICAgIHRocm93IGNyZWF0ZUNsaWVudEF1dGhFcnJvcihpbnZhbGlkQ2FjaGVFbnZpcm9ubWVudCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGFjY291bnQuZW52aXJvbm1lbnQgPSBlbnY7XHJcbiAgICAgICAgLy8gbm9uIEFBRCBzY2VuYXJpb3MgY2FuIGhhdmUgZW1wdHkgcmVhbG1cclxuICAgICAgICBhY2NvdW50LnJlYWxtID1cclxuICAgICAgICAgICAgY2xpZW50SW5mbz8udXRpZCB8fFxyXG4gICAgICAgICAgICAgICAgZ2V0VGVuYW50SWRGcm9tSWRUb2tlbkNsYWltcyhhY2NvdW50RGV0YWlscy5pZFRva2VuQ2xhaW1zKSB8fFxyXG4gICAgICAgICAgICAgICAgXCJcIjtcclxuICAgICAgICAvLyBIb3cgZG8geW91IGFjY291bnQgZm9yIE1TQSBDSUQgaGVyZT9cclxuICAgICAgICBhY2NvdW50LmxvY2FsQWNjb3VudElkID1cclxuICAgICAgICAgICAgY2xpZW50SW5mbz8udWlkIHx8XHJcbiAgICAgICAgICAgICAgICBhY2NvdW50RGV0YWlscy5pZFRva2VuQ2xhaW1zPy5vaWQgfHxcclxuICAgICAgICAgICAgICAgIGFjY291bnREZXRhaWxzLmlkVG9rZW5DbGFpbXM/LnN1YiB8fFxyXG4gICAgICAgICAgICAgICAgXCJcIjtcclxuICAgICAgICAvKlxyXG4gICAgICAgICAqIEluIEIyQyBzY2VuYXJpb3MgdGhlIGVtYWlscyBjbGFpbSBpcyB1c2VkIGluc3RlYWQgb2YgcHJlZmVycmVkX3VzZXJuYW1lIGFuZCBpdCBpcyBhbiBhcnJheS5cclxuICAgICAgICAgKiBJbiBtb3N0IGNhc2VzIGl0IHdpbGwgY29udGFpbiBhIHNpbmdsZSBlbWFpbC4gVGhpcyBmaWVsZCBzaG91bGQgbm90IGJlIHJlbGllZCB1cG9uIGlmIGEgY3VzdG9tXHJcbiAgICAgICAgICogcG9saWN5IGlzIGNvbmZpZ3VyZWQgdG8gcmV0dXJuIG1vcmUgdGhhbiAxIGVtYWlsLlxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIGNvbnN0IHByZWZlcnJlZFVzZXJuYW1lID0gYWNjb3VudERldGFpbHMuaWRUb2tlbkNsYWltcz8ucHJlZmVycmVkX3VzZXJuYW1lIHx8XHJcbiAgICAgICAgICAgIGFjY291bnREZXRhaWxzLmlkVG9rZW5DbGFpbXM/LnVwbjtcclxuICAgICAgICBjb25zdCBlbWFpbCA9IGFjY291bnREZXRhaWxzLmlkVG9rZW5DbGFpbXM/LmVtYWlsc1xyXG4gICAgICAgICAgICA/IGFjY291bnREZXRhaWxzLmlkVG9rZW5DbGFpbXMuZW1haWxzWzBdXHJcbiAgICAgICAgICAgIDogbnVsbDtcclxuICAgICAgICBhY2NvdW50LnVzZXJuYW1lID0gcHJlZmVycmVkVXNlcm5hbWUgfHwgZW1haWwgfHwgXCJcIjtcclxuICAgICAgICBhY2NvdW50Lm5hbWUgPSBhY2NvdW50RGV0YWlscy5pZFRva2VuQ2xhaW1zPy5uYW1lIHx8IFwiXCI7XHJcbiAgICAgICAgYWNjb3VudC5jbG91ZEdyYXBoSG9zdE5hbWUgPSBhY2NvdW50RGV0YWlscy5jbG91ZEdyYXBoSG9zdE5hbWU7XHJcbiAgICAgICAgYWNjb3VudC5tc0dyYXBoSG9zdCA9IGFjY291bnREZXRhaWxzLm1zR3JhcGhIb3N0O1xyXG4gICAgICAgIGlmIChhY2NvdW50RGV0YWlscy50ZW5hbnRQcm9maWxlcykge1xyXG4gICAgICAgICAgICBhY2NvdW50LnRlbmFudFByb2ZpbGVzID0gYWNjb3VudERldGFpbHMudGVuYW50UHJvZmlsZXM7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICBjb25zdCB0ZW5hbnRQcm9maWxlID0gYnVpbGRUZW5hbnRQcm9maWxlKGFjY291bnREZXRhaWxzLmhvbWVBY2NvdW50SWQsIGFjY291bnQubG9jYWxBY2NvdW50SWQsIGFjY291bnQucmVhbG0sIGFjY291bnREZXRhaWxzLmlkVG9rZW5DbGFpbXMpO1xyXG4gICAgICAgICAgICBhY2NvdW50LnRlbmFudFByb2ZpbGVzID0gW3RlbmFudFByb2ZpbGVdO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gYWNjb3VudDtcclxuICAgIH1cclxuICAgIC8qKlxyXG4gICAgICogQ3JlYXRlcyBhbiBBY2NvdW50RW50aXR5IG9iamVjdCBmcm9tIEFjY291bnRJbmZvXHJcbiAgICAgKiBAcGFyYW0gYWNjb3VudEluZm9cclxuICAgICAqIEBwYXJhbSBjbG91ZEdyYXBoSG9zdE5hbWVcclxuICAgICAqIEBwYXJhbSBtc0dyYXBoSG9zdFxyXG4gICAgICogQHJldHVybnNcclxuICAgICAqL1xyXG4gICAgc3RhdGljIGNyZWF0ZUZyb21BY2NvdW50SW5mbyhhY2NvdW50SW5mbywgY2xvdWRHcmFwaEhvc3ROYW1lLCBtc0dyYXBoSG9zdCkge1xyXG4gICAgICAgIGNvbnN0IGFjY291bnQgPSBuZXcgQWNjb3VudEVudGl0eSgpO1xyXG4gICAgICAgIGFjY291bnQuYXV0aG9yaXR5VHlwZSA9XHJcbiAgICAgICAgICAgIGFjY291bnRJbmZvLmF1dGhvcml0eVR5cGUgfHwgQ2FjaGVBY2NvdW50VHlwZS5HRU5FUklDX0FDQ09VTlRfVFlQRTtcclxuICAgICAgICBhY2NvdW50LmhvbWVBY2NvdW50SWQgPSBhY2NvdW50SW5mby5ob21lQWNjb3VudElkO1xyXG4gICAgICAgIGFjY291bnQubG9jYWxBY2NvdW50SWQgPSBhY2NvdW50SW5mby5sb2NhbEFjY291bnRJZDtcclxuICAgICAgICBhY2NvdW50Lm5hdGl2ZUFjY291bnRJZCA9IGFjY291bnRJbmZvLm5hdGl2ZUFjY291bnRJZDtcclxuICAgICAgICBhY2NvdW50LnJlYWxtID0gYWNjb3VudEluZm8udGVuYW50SWQ7XHJcbiAgICAgICAgYWNjb3VudC5lbnZpcm9ubWVudCA9IGFjY291bnRJbmZvLmVudmlyb25tZW50O1xyXG4gICAgICAgIGFjY291bnQudXNlcm5hbWUgPSBhY2NvdW50SW5mby51c2VybmFtZTtcclxuICAgICAgICBhY2NvdW50Lm5hbWUgPSBhY2NvdW50SW5mby5uYW1lO1xyXG4gICAgICAgIGFjY291bnQuY2xvdWRHcmFwaEhvc3ROYW1lID0gY2xvdWRHcmFwaEhvc3ROYW1lO1xyXG4gICAgICAgIGFjY291bnQubXNHcmFwaEhvc3QgPSBtc0dyYXBoSG9zdDtcclxuICAgICAgICAvLyBTZXJpYWxpemUgdGVuYW50IHByb2ZpbGVzIG1hcCBpbnRvIGFuIGFycmF5XHJcbiAgICAgICAgYWNjb3VudC50ZW5hbnRQcm9maWxlcyA9IEFycmF5LmZyb20oYWNjb3VudEluZm8udGVuYW50UHJvZmlsZXM/LnZhbHVlcygpIHx8IFtdKTtcclxuICAgICAgICByZXR1cm4gYWNjb3VudDtcclxuICAgIH1cclxuICAgIC8qKlxyXG4gICAgICogR2VuZXJhdGUgSG9tZUFjY291bnRJZCBmcm9tIHNlcnZlciByZXNwb25zZVxyXG4gICAgICogQHBhcmFtIHNlcnZlckNsaWVudEluZm9cclxuICAgICAqIEBwYXJhbSBhdXRoVHlwZVxyXG4gICAgICovXHJcbiAgICBzdGF0aWMgZ2VuZXJhdGVIb21lQWNjb3VudElkKHNlcnZlckNsaWVudEluZm8sIGF1dGhUeXBlLCBsb2dnZXIsIGNyeXB0b09iaiwgaWRUb2tlbkNsYWltcykge1xyXG4gICAgICAgIC8vIHNpbmNlIEFERlMvRFNUUyBkbyBub3QgaGF2ZSB0aWQgYW5kIGRvZXMgbm90IHNldCBjbGllbnRfaW5mb1xyXG4gICAgICAgIGlmICghKGF1dGhUeXBlID09PSBBdXRob3JpdHlUeXBlLkFkZnMgfHxcclxuICAgICAgICAgICAgYXV0aFR5cGUgPT09IEF1dGhvcml0eVR5cGUuRHN0cykpIHtcclxuICAgICAgICAgICAgLy8gZm9yIGNhc2VzIHdoZXJlIHRoZXJlIGlzIGNsaWVudEluZm9cclxuICAgICAgICAgICAgaWYgKHNlcnZlckNsaWVudEluZm8pIHtcclxuICAgICAgICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgY2xpZW50SW5mbyA9IGJ1aWxkQ2xpZW50SW5mbyhzZXJ2ZXJDbGllbnRJbmZvLCBjcnlwdG9PYmouYmFzZTY0RGVjb2RlKTtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoY2xpZW50SW5mby51aWQgJiYgY2xpZW50SW5mby51dGlkKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBgJHtjbGllbnRJbmZvLnVpZH0uJHtjbGllbnRJbmZvLnV0aWR9YDtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBjYXRjaCAoZSkgeyB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgbG9nZ2VyLndhcm5pbmcoXCJObyBjbGllbnQgaW5mbyBpbiByZXNwb25zZVwiKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgLy8gZGVmYXVsdCB0byBcInN1YlwiIGNsYWltXHJcbiAgICAgICAgcmV0dXJuIGlkVG9rZW5DbGFpbXM/LnN1YiB8fCBcIlwiO1xyXG4gICAgfVxyXG4gICAgLyoqXHJcbiAgICAgKiBWYWxpZGF0ZXMgYW4gZW50aXR5OiBjaGVja3MgZm9yIGFsbCBleHBlY3RlZCBwYXJhbXNcclxuICAgICAqIEBwYXJhbSBlbnRpdHlcclxuICAgICAqL1xyXG4gICAgc3RhdGljIGlzQWNjb3VudEVudGl0eShlbnRpdHkpIHtcclxuICAgICAgICBpZiAoIWVudGl0eSkge1xyXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiAoZW50aXR5Lmhhc093blByb3BlcnR5KFwiaG9tZUFjY291bnRJZFwiKSAmJlxyXG4gICAgICAgICAgICBlbnRpdHkuaGFzT3duUHJvcGVydHkoXCJlbnZpcm9ubWVudFwiKSAmJlxyXG4gICAgICAgICAgICBlbnRpdHkuaGFzT3duUHJvcGVydHkoXCJyZWFsbVwiKSAmJlxyXG4gICAgICAgICAgICBlbnRpdHkuaGFzT3duUHJvcGVydHkoXCJsb2NhbEFjY291bnRJZFwiKSAmJlxyXG4gICAgICAgICAgICBlbnRpdHkuaGFzT3duUHJvcGVydHkoXCJ1c2VybmFtZVwiKSAmJlxyXG4gICAgICAgICAgICBlbnRpdHkuaGFzT3duUHJvcGVydHkoXCJhdXRob3JpdHlUeXBlXCIpKTtcclxuICAgIH1cclxuICAgIC8qKlxyXG4gICAgICogSGVscGVyIGZ1bmN0aW9uIHRvIGRldGVybWluZSB3aGV0aGVyIDIgYWNjb3VudEluZm8gb2JqZWN0cyByZXByZXNlbnQgdGhlIHNhbWUgYWNjb3VudFxyXG4gICAgICogQHBhcmFtIGFjY291bnRBXHJcbiAgICAgKiBAcGFyYW0gYWNjb3VudEJcclxuICAgICAqIEBwYXJhbSBjb21wYXJlQ2xhaW1zIC0gSWYgc2V0IHRvIHRydWUgaWRUb2tlbkNsYWltcyB3aWxsIGFsc28gYmUgY29tcGFyZWQgdG8gZGV0ZXJtaW5lIGFjY291bnQgZXF1YWxpdHlcclxuICAgICAqL1xyXG4gICAgc3RhdGljIGFjY291bnRJbmZvSXNFcXVhbChhY2NvdW50QSwgYWNjb3VudEIsIGNvbXBhcmVDbGFpbXMpIHtcclxuICAgICAgICBpZiAoIWFjY291bnRBIHx8ICFhY2NvdW50Qikge1xyXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGxldCBjbGFpbXNNYXRjaCA9IHRydWU7IC8vIGRlZmF1bHQgdG8gdHJ1ZSBzbyBhcyB0byBub3QgZmFpbCBjb21wYXJpc29uIGJlbG93IGlmIGNvbXBhcmVDbGFpbXM6IGZhbHNlXHJcbiAgICAgICAgaWYgKGNvbXBhcmVDbGFpbXMpIHtcclxuICAgICAgICAgICAgY29uc3QgYWNjb3VudEFDbGFpbXMgPSAoYWNjb3VudEEuaWRUb2tlbkNsYWltcyB8fFxyXG4gICAgICAgICAgICAgICAge30pO1xyXG4gICAgICAgICAgICBjb25zdCBhY2NvdW50QkNsYWltcyA9IChhY2NvdW50Qi5pZFRva2VuQ2xhaW1zIHx8XHJcbiAgICAgICAgICAgICAgICB7fSk7XHJcbiAgICAgICAgICAgIC8vIGlzc3VlZCBhdCB0aW1lc3RhbXAgYW5kIG5vbmNlIGFyZSBleHBlY3RlZCB0byBjaGFuZ2UgZWFjaCB0aW1lIGEgbmV3IGlkIHRva2VuIGlzIGFjcXVpcmVkXHJcbiAgICAgICAgICAgIGNsYWltc01hdGNoID1cclxuICAgICAgICAgICAgICAgIGFjY291bnRBQ2xhaW1zLmlhdCA9PT0gYWNjb3VudEJDbGFpbXMuaWF0ICYmXHJcbiAgICAgICAgICAgICAgICAgICAgYWNjb3VudEFDbGFpbXMubm9uY2UgPT09IGFjY291bnRCQ2xhaW1zLm5vbmNlO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gKGFjY291bnRBLmhvbWVBY2NvdW50SWQgPT09IGFjY291bnRCLmhvbWVBY2NvdW50SWQgJiZcclxuICAgICAgICAgICAgYWNjb3VudEEubG9jYWxBY2NvdW50SWQgPT09IGFjY291bnRCLmxvY2FsQWNjb3VudElkICYmXHJcbiAgICAgICAgICAgIGFjY291bnRBLnVzZXJuYW1lID09PSBhY2NvdW50Qi51c2VybmFtZSAmJlxyXG4gICAgICAgICAgICBhY2NvdW50QS50ZW5hbnRJZCA9PT0gYWNjb3VudEIudGVuYW50SWQgJiZcclxuICAgICAgICAgICAgYWNjb3VudEEuZW52aXJvbm1lbnQgPT09IGFjY291bnRCLmVudmlyb25tZW50ICYmXHJcbiAgICAgICAgICAgIGFjY291bnRBLm5hdGl2ZUFjY291bnRJZCA9PT0gYWNjb3VudEIubmF0aXZlQWNjb3VudElkICYmXHJcbiAgICAgICAgICAgIGNsYWltc01hdGNoKTtcclxuICAgIH1cclxufVxuXG5leHBvcnQgeyBBY2NvdW50RW50aXR5IH07XG4vLyMgc291cmNlTWFwcGluZ1VSTD1BY2NvdW50RW50aXR5Lm1qcy5tYXBcbiIsIi8qISBAYXp1cmUvbXNhbC1jb21tb24gdjE0LjE2LjAgMjAyNC0xMS0wNSAqL1xuJ3VzZSBzdHJpY3QnO1xuaW1wb3J0IHsgVXJsU3RyaW5nIH0gZnJvbSAnLi4vdXJsL1VybFN0cmluZy5tanMnO1xuaW1wb3J0IHsgQXV0aG9yaXR5TWV0YWRhdGFTb3VyY2UgfSBmcm9tICcuLi91dGlscy9Db25zdGFudHMubWpzJztcblxuLypcclxuICogQ29weXJpZ2h0IChjKSBNaWNyb3NvZnQgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuXHJcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgTGljZW5zZS5cclxuICovXHJcbmNvbnN0IHJhd01ldGRhdGFKU09OID0ge1xyXG4gICAgZW5kcG9pbnRNZXRhZGF0YToge1xyXG4gICAgICAgIFwibG9naW4ubWljcm9zb2Z0b25saW5lLmNvbVwiOiB7XHJcbiAgICAgICAgICAgIHRva2VuX2VuZHBvaW50OiBcImh0dHBzOi8vbG9naW4ubWljcm9zb2Z0b25saW5lLmNvbS97dGVuYW50aWR9L29hdXRoMi92Mi4wL3Rva2VuXCIsXHJcbiAgICAgICAgICAgIGp3a3NfdXJpOiBcImh0dHBzOi8vbG9naW4ubWljcm9zb2Z0b25saW5lLmNvbS97dGVuYW50aWR9L2Rpc2NvdmVyeS92Mi4wL2tleXNcIixcclxuICAgICAgICAgICAgaXNzdWVyOiBcImh0dHBzOi8vbG9naW4ubWljcm9zb2Z0b25saW5lLmNvbS97dGVuYW50aWR9L3YyLjBcIixcclxuICAgICAgICAgICAgYXV0aG9yaXphdGlvbl9lbmRwb2ludDogXCJodHRwczovL2xvZ2luLm1pY3Jvc29mdG9ubGluZS5jb20ve3RlbmFudGlkfS9vYXV0aDIvdjIuMC9hdXRob3JpemVcIixcclxuICAgICAgICAgICAgZW5kX3Nlc3Npb25fZW5kcG9pbnQ6IFwiaHR0cHM6Ly9sb2dpbi5taWNyb3NvZnRvbmxpbmUuY29tL3t0ZW5hbnRpZH0vb2F1dGgyL3YyLjAvbG9nb3V0XCIsXHJcbiAgICAgICAgfSxcclxuICAgICAgICBcImxvZ2luLmNoaW5hY2xvdWRhcGkuY25cIjoge1xyXG4gICAgICAgICAgICB0b2tlbl9lbmRwb2ludDogXCJodHRwczovL2xvZ2luLmNoaW5hY2xvdWRhcGkuY24ve3RlbmFudGlkfS9vYXV0aDIvdjIuMC90b2tlblwiLFxyXG4gICAgICAgICAgICBqd2tzX3VyaTogXCJodHRwczovL2xvZ2luLmNoaW5hY2xvdWRhcGkuY24ve3RlbmFudGlkfS9kaXNjb3ZlcnkvdjIuMC9rZXlzXCIsXHJcbiAgICAgICAgICAgIGlzc3VlcjogXCJodHRwczovL2xvZ2luLnBhcnRuZXIubWljcm9zb2Z0b25saW5lLmNuL3t0ZW5hbnRpZH0vdjIuMFwiLFxyXG4gICAgICAgICAgICBhdXRob3JpemF0aW9uX2VuZHBvaW50OiBcImh0dHBzOi8vbG9naW4uY2hpbmFjbG91ZGFwaS5jbi97dGVuYW50aWR9L29hdXRoMi92Mi4wL2F1dGhvcml6ZVwiLFxyXG4gICAgICAgICAgICBlbmRfc2Vzc2lvbl9lbmRwb2ludDogXCJodHRwczovL2xvZ2luLmNoaW5hY2xvdWRhcGkuY24ve3RlbmFudGlkfS9vYXV0aDIvdjIuMC9sb2dvdXRcIixcclxuICAgICAgICB9LFxyXG4gICAgICAgIFwibG9naW4ubWljcm9zb2Z0b25saW5lLnVzXCI6IHtcclxuICAgICAgICAgICAgdG9rZW5fZW5kcG9pbnQ6IFwiaHR0cHM6Ly9sb2dpbi5taWNyb3NvZnRvbmxpbmUudXMve3RlbmFudGlkfS9vYXV0aDIvdjIuMC90b2tlblwiLFxyXG4gICAgICAgICAgICBqd2tzX3VyaTogXCJodHRwczovL2xvZ2luLm1pY3Jvc29mdG9ubGluZS51cy97dGVuYW50aWR9L2Rpc2NvdmVyeS92Mi4wL2tleXNcIixcclxuICAgICAgICAgICAgaXNzdWVyOiBcImh0dHBzOi8vbG9naW4ubWljcm9zb2Z0b25saW5lLnVzL3t0ZW5hbnRpZH0vdjIuMFwiLFxyXG4gICAgICAgICAgICBhdXRob3JpemF0aW9uX2VuZHBvaW50OiBcImh0dHBzOi8vbG9naW4ubWljcm9zb2Z0b25saW5lLnVzL3t0ZW5hbnRpZH0vb2F1dGgyL3YyLjAvYXV0aG9yaXplXCIsXHJcbiAgICAgICAgICAgIGVuZF9zZXNzaW9uX2VuZHBvaW50OiBcImh0dHBzOi8vbG9naW4ubWljcm9zb2Z0b25saW5lLnVzL3t0ZW5hbnRpZH0vb2F1dGgyL3YyLjAvbG9nb3V0XCIsXHJcbiAgICAgICAgfSxcclxuICAgIH0sXHJcbiAgICBpbnN0YW5jZURpc2NvdmVyeU1ldGFkYXRhOiB7XHJcbiAgICAgICAgdGVuYW50X2Rpc2NvdmVyeV9lbmRwb2ludDogXCJodHRwczovL3tjYW5vbmljYWxBdXRob3JpdHl9L3YyLjAvLndlbGwta25vd24vb3BlbmlkLWNvbmZpZ3VyYXRpb25cIixcclxuICAgICAgICBtZXRhZGF0YTogW1xyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICBwcmVmZXJyZWRfbmV0d29yazogXCJsb2dpbi5taWNyb3NvZnRvbmxpbmUuY29tXCIsXHJcbiAgICAgICAgICAgICAgICBwcmVmZXJyZWRfY2FjaGU6IFwibG9naW4ud2luZG93cy5uZXRcIixcclxuICAgICAgICAgICAgICAgIGFsaWFzZXM6IFtcclxuICAgICAgICAgICAgICAgICAgICBcImxvZ2luLm1pY3Jvc29mdG9ubGluZS5jb21cIixcclxuICAgICAgICAgICAgICAgICAgICBcImxvZ2luLndpbmRvd3MubmV0XCIsXHJcbiAgICAgICAgICAgICAgICAgICAgXCJsb2dpbi5taWNyb3NvZnQuY29tXCIsXHJcbiAgICAgICAgICAgICAgICAgICAgXCJzdHMud2luZG93cy5uZXRcIixcclxuICAgICAgICAgICAgICAgIF0sXHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIHByZWZlcnJlZF9uZXR3b3JrOiBcImxvZ2luLnBhcnRuZXIubWljcm9zb2Z0b25saW5lLmNuXCIsXHJcbiAgICAgICAgICAgICAgICBwcmVmZXJyZWRfY2FjaGU6IFwibG9naW4ucGFydG5lci5taWNyb3NvZnRvbmxpbmUuY25cIixcclxuICAgICAgICAgICAgICAgIGFsaWFzZXM6IFtcclxuICAgICAgICAgICAgICAgICAgICBcImxvZ2luLnBhcnRuZXIubWljcm9zb2Z0b25saW5lLmNuXCIsXHJcbiAgICAgICAgICAgICAgICAgICAgXCJsb2dpbi5jaGluYWNsb3VkYXBpLmNuXCIsXHJcbiAgICAgICAgICAgICAgICBdLFxyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICBwcmVmZXJyZWRfbmV0d29yazogXCJsb2dpbi5taWNyb3NvZnRvbmxpbmUuZGVcIixcclxuICAgICAgICAgICAgICAgIHByZWZlcnJlZF9jYWNoZTogXCJsb2dpbi5taWNyb3NvZnRvbmxpbmUuZGVcIixcclxuICAgICAgICAgICAgICAgIGFsaWFzZXM6IFtcImxvZ2luLm1pY3Jvc29mdG9ubGluZS5kZVwiXSxcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgcHJlZmVycmVkX25ldHdvcms6IFwibG9naW4ubWljcm9zb2Z0b25saW5lLnVzXCIsXHJcbiAgICAgICAgICAgICAgICBwcmVmZXJyZWRfY2FjaGU6IFwibG9naW4ubWljcm9zb2Z0b25saW5lLnVzXCIsXHJcbiAgICAgICAgICAgICAgICBhbGlhc2VzOiBbXHJcbiAgICAgICAgICAgICAgICAgICAgXCJsb2dpbi5taWNyb3NvZnRvbmxpbmUudXNcIixcclxuICAgICAgICAgICAgICAgICAgICBcImxvZ2luLnVzZ292Y2xvdWRhcGkubmV0XCIsXHJcbiAgICAgICAgICAgICAgICBdLFxyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICBwcmVmZXJyZWRfbmV0d29yazogXCJsb2dpbi11cy5taWNyb3NvZnRvbmxpbmUuY29tXCIsXHJcbiAgICAgICAgICAgICAgICBwcmVmZXJyZWRfY2FjaGU6IFwibG9naW4tdXMubWljcm9zb2Z0b25saW5lLmNvbVwiLFxyXG4gICAgICAgICAgICAgICAgYWxpYXNlczogW1wibG9naW4tdXMubWljcm9zb2Z0b25saW5lLmNvbVwiXSxcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICBdLFxyXG4gICAgfSxcclxufTtcclxuY29uc3QgRW5kcG9pbnRNZXRhZGF0YSA9IHJhd01ldGRhdGFKU09OLmVuZHBvaW50TWV0YWRhdGE7XHJcbmNvbnN0IEluc3RhbmNlRGlzY292ZXJ5TWV0YWRhdGEgPSByYXdNZXRkYXRhSlNPTi5pbnN0YW5jZURpc2NvdmVyeU1ldGFkYXRhO1xyXG5jb25zdCBJbnN0YW5jZURpc2NvdmVyeU1ldGFkYXRhQWxpYXNlcyA9IG5ldyBTZXQoKTtcclxuSW5zdGFuY2VEaXNjb3ZlcnlNZXRhZGF0YS5tZXRhZGF0YS5mb3JFYWNoKChtZXRhZGF0YUVudHJ5KSA9PiB7XHJcbiAgICBtZXRhZGF0YUVudHJ5LmFsaWFzZXMuZm9yRWFjaCgoYWxpYXMpID0+IHtcclxuICAgICAgICBJbnN0YW5jZURpc2NvdmVyeU1ldGFkYXRhQWxpYXNlcy5hZGQoYWxpYXMpO1xyXG4gICAgfSk7XHJcbn0pO1xyXG4vKipcclxuICogQXR0ZW1wdHMgdG8gZ2V0IGFuIGFsaWFzZXMgYXJyYXkgZnJvbSB0aGUgc3RhdGljIGF1dGhvcml0eSBtZXRhZGF0YSBzb3VyY2VzIGJhc2VkIG9uIHRoZSBjYW5vbmljYWwgYXV0aG9yaXR5IGhvc3RcclxuICogQHBhcmFtIHN0YXRpY0F1dGhvcml0eU9wdGlvbnNcclxuICogQHBhcmFtIGxvZ2dlclxyXG4gKiBAcmV0dXJuc1xyXG4gKi9cclxuZnVuY3Rpb24gZ2V0QWxpYXNlc0Zyb21TdGF0aWNTb3VyY2VzKHN0YXRpY0F1dGhvcml0eU9wdGlvbnMsIGxvZ2dlcikge1xyXG4gICAgbGV0IHN0YXRpY0FsaWFzZXM7XHJcbiAgICBjb25zdCBjYW5vbmljYWxBdXRob3JpdHkgPSBzdGF0aWNBdXRob3JpdHlPcHRpb25zLmNhbm9uaWNhbEF1dGhvcml0eTtcclxuICAgIGlmIChjYW5vbmljYWxBdXRob3JpdHkpIHtcclxuICAgICAgICBjb25zdCBhdXRob3JpdHlIb3N0ID0gbmV3IFVybFN0cmluZyhjYW5vbmljYWxBdXRob3JpdHkpLmdldFVybENvbXBvbmVudHMoKS5Ib3N0TmFtZUFuZFBvcnQ7XHJcbiAgICAgICAgc3RhdGljQWxpYXNlcyA9XHJcbiAgICAgICAgICAgIGdldEFsaWFzZXNGcm9tTWV0YWRhdGEoYXV0aG9yaXR5SG9zdCwgc3RhdGljQXV0aG9yaXR5T3B0aW9ucy5jbG91ZERpc2NvdmVyeU1ldGFkYXRhPy5tZXRhZGF0YSwgQXV0aG9yaXR5TWV0YWRhdGFTb3VyY2UuQ09ORklHLCBsb2dnZXIpIHx8XHJcbiAgICAgICAgICAgICAgICBnZXRBbGlhc2VzRnJvbU1ldGFkYXRhKGF1dGhvcml0eUhvc3QsIEluc3RhbmNlRGlzY292ZXJ5TWV0YWRhdGEubWV0YWRhdGEsIEF1dGhvcml0eU1ldGFkYXRhU291cmNlLkhBUkRDT0RFRF9WQUxVRVMsIGxvZ2dlcikgfHxcclxuICAgICAgICAgICAgICAgIHN0YXRpY0F1dGhvcml0eU9wdGlvbnMua25vd25BdXRob3JpdGllcztcclxuICAgIH1cclxuICAgIHJldHVybiBzdGF0aWNBbGlhc2VzIHx8IFtdO1xyXG59XHJcbi8qKlxyXG4gKiBSZXR1cm5zIGFsaWFzZXMgZm9yIGZyb20gdGhlIHJhdyBjbG91ZCBkaXNjb3ZlcnkgbWV0YWRhdGEgcGFzc2VkIGluXHJcbiAqIEBwYXJhbSBhdXRob3JpdHlIb3N0XHJcbiAqIEBwYXJhbSByYXdDbG91ZERpc2NvdmVyeU1ldGFkYXRhXHJcbiAqIEByZXR1cm5zXHJcbiAqL1xyXG5mdW5jdGlvbiBnZXRBbGlhc2VzRnJvbU1ldGFkYXRhKGF1dGhvcml0eUhvc3QsIGNsb3VkRGlzY292ZXJ5TWV0YWRhdGEsIHNvdXJjZSwgbG9nZ2VyKSB7XHJcbiAgICBsb2dnZXI/LnRyYWNlKGBnZXRBbGlhc2VzRnJvbU1ldGFkYXRhIGNhbGxlZCB3aXRoIHNvdXJjZTogJHtzb3VyY2V9YCk7XHJcbiAgICBpZiAoYXV0aG9yaXR5SG9zdCAmJiBjbG91ZERpc2NvdmVyeU1ldGFkYXRhKSB7XHJcbiAgICAgICAgY29uc3QgbWV0YWRhdGEgPSBnZXRDbG91ZERpc2NvdmVyeU1ldGFkYXRhRnJvbU5ldHdvcmtSZXNwb25zZShjbG91ZERpc2NvdmVyeU1ldGFkYXRhLCBhdXRob3JpdHlIb3N0KTtcclxuICAgICAgICBpZiAobWV0YWRhdGEpIHtcclxuICAgICAgICAgICAgbG9nZ2VyPy50cmFjZShgZ2V0QWxpYXNlc0Zyb21NZXRhZGF0YTogZm91bmQgY2xvdWQgZGlzY292ZXJ5IG1ldGFkYXRhIGluICR7c291cmNlfSwgcmV0dXJuaW5nIGFsaWFzZXNgKTtcclxuICAgICAgICAgICAgcmV0dXJuIG1ldGFkYXRhLmFsaWFzZXM7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICBsb2dnZXI/LnRyYWNlKGBnZXRBbGlhc2VzRnJvbU1ldGFkYXRhOiBkaWQgbm90IGZpbmQgY2xvdWQgZGlzY292ZXJ5IG1ldGFkYXRhIGluICR7c291cmNlfWApO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiBudWxsO1xyXG59XHJcbi8qKlxyXG4gKiBHZXQgY2xvdWQgZGlzY292ZXJ5IG1ldGFkYXRhIGZvciBjb21tb24gYXV0aG9yaXRpZXNcclxuICovXHJcbmZ1bmN0aW9uIGdldENsb3VkRGlzY292ZXJ5TWV0YWRhdGFGcm9tSGFyZGNvZGVkVmFsdWVzKGF1dGhvcml0eUhvc3QpIHtcclxuICAgIGNvbnN0IG1ldGFkYXRhID0gZ2V0Q2xvdWREaXNjb3ZlcnlNZXRhZGF0YUZyb21OZXR3b3JrUmVzcG9uc2UoSW5zdGFuY2VEaXNjb3ZlcnlNZXRhZGF0YS5tZXRhZGF0YSwgYXV0aG9yaXR5SG9zdCk7XHJcbiAgICByZXR1cm4gbWV0YWRhdGE7XHJcbn1cclxuLyoqXHJcbiAqIFNlYXJjaGVzIGluc3RhbmNlIGRpc2NvdmVyeSBuZXR3b3JrIHJlc3BvbnNlIGZvciB0aGUgZW50cnkgdGhhdCBjb250YWlucyB0aGUgaG9zdCBpbiB0aGUgYWxpYXNlcyBsaXN0XHJcbiAqIEBwYXJhbSByZXNwb25zZVxyXG4gKiBAcGFyYW0gYXV0aG9yaXR5XHJcbiAqL1xyXG5mdW5jdGlvbiBnZXRDbG91ZERpc2NvdmVyeU1ldGFkYXRhRnJvbU5ldHdvcmtSZXNwb25zZShyZXNwb25zZSwgYXV0aG9yaXR5SG9zdCkge1xyXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCByZXNwb25zZS5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgIGNvbnN0IG1ldGFkYXRhID0gcmVzcG9uc2VbaV07XHJcbiAgICAgICAgaWYgKG1ldGFkYXRhLmFsaWFzZXMuaW5jbHVkZXMoYXV0aG9yaXR5SG9zdCkpIHtcclxuICAgICAgICAgICAgcmV0dXJuIG1ldGFkYXRhO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiBudWxsO1xyXG59XG5cbmV4cG9ydCB7IEVuZHBvaW50TWV0YWRhdGEsIEluc3RhbmNlRGlzY292ZXJ5TWV0YWRhdGEsIEluc3RhbmNlRGlzY292ZXJ5TWV0YWRhdGFBbGlhc2VzLCBnZXRBbGlhc2VzRnJvbU1ldGFkYXRhLCBnZXRBbGlhc2VzRnJvbVN0YXRpY1NvdXJjZXMsIGdldENsb3VkRGlzY292ZXJ5TWV0YWRhdGFGcm9tSGFyZGNvZGVkVmFsdWVzLCBnZXRDbG91ZERpc2NvdmVyeU1ldGFkYXRhRnJvbU5ldHdvcmtSZXNwb25zZSwgcmF3TWV0ZGF0YUpTT04gfTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPUF1dGhvcml0eU1ldGFkYXRhLm1qcy5tYXBcbiIsIi8qISBAYXp1cmUvbXNhbC1jb21tb24gdjE0LjE2LjAgMjAyNC0xMS0wNSAqL1xuJ3VzZSBzdHJpY3QnO1xuLypcclxuICogQ29weXJpZ2h0IChjKSBNaWNyb3NvZnQgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuXHJcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgTGljZW5zZS5cclxuICovXHJcbmNvbnN0IGNhY2hlUXVvdGFFeGNlZWRlZEVycm9yQ29kZSA9IFwiY2FjaGVfcXVvdGFfZXhjZWVkZWRcIjtcclxuY29uc3QgY2FjaGVVbmtub3duRXJyb3JDb2RlID0gXCJjYWNoZV9lcnJvcl91bmtub3duXCI7XG5cbmV4cG9ydCB7IGNhY2hlUXVvdGFFeGNlZWRlZEVycm9yQ29kZSwgY2FjaGVVbmtub3duRXJyb3JDb2RlIH07XG4vLyMgc291cmNlTWFwcGluZ1VSTD1DYWNoZUVycm9yQ29kZXMubWpzLm1hcFxuIiwiLyohIEBhenVyZS9tc2FsLWNvbW1vbiB2MTQuMTYuMCAyMDI0LTExLTA1ICovXG4ndXNlIHN0cmljdCc7XG5pbXBvcnQgeyBjYWNoZVVua25vd25FcnJvckNvZGUsIGNhY2hlUXVvdGFFeGNlZWRlZEVycm9yQ29kZSB9IGZyb20gJy4vQ2FjaGVFcnJvckNvZGVzLm1qcyc7XG5pbXBvcnQgKiBhcyBDYWNoZUVycm9yQ29kZXMgZnJvbSAnLi9DYWNoZUVycm9yQ29kZXMubWpzJztcbmV4cG9ydCB7IENhY2hlRXJyb3JDb2RlcyB9O1xuXG4vKlxyXG4gKiBDb3B5cmlnaHQgKGMpIE1pY3Jvc29mdCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cclxuICogTGljZW5zZWQgdW5kZXIgdGhlIE1JVCBMaWNlbnNlLlxyXG4gKi9cclxuY29uc3QgQ2FjaGVFcnJvck1lc3NhZ2VzID0ge1xyXG4gICAgW2NhY2hlUXVvdGFFeGNlZWRlZEVycm9yQ29kZV06IFwiRXhjZWVkZWQgY2FjaGUgc3RvcmFnZSBjYXBhY2l0eS5cIixcclxuICAgIFtjYWNoZVVua25vd25FcnJvckNvZGVdOiBcIlVuZXhwZWN0ZWQgZXJyb3Igb2NjdXJyZWQgd2hlbiB1c2luZyBjYWNoZSBzdG9yYWdlLlwiLFxyXG59O1xyXG4vKipcclxuICogRXJyb3IgdGhyb3duIHdoZW4gdGhlcmUgaXMgYW4gZXJyb3Igd2l0aCB0aGUgY2FjaGVcclxuICovXHJcbmNsYXNzIENhY2hlRXJyb3IgZXh0ZW5kcyBFcnJvciB7XHJcbiAgICBjb25zdHJ1Y3RvcihlcnJvckNvZGUsIGVycm9yTWVzc2FnZSkge1xyXG4gICAgICAgIGNvbnN0IG1lc3NhZ2UgPSBlcnJvck1lc3NhZ2UgfHxcclxuICAgICAgICAgICAgKENhY2hlRXJyb3JNZXNzYWdlc1tlcnJvckNvZGVdXHJcbiAgICAgICAgICAgICAgICA/IENhY2hlRXJyb3JNZXNzYWdlc1tlcnJvckNvZGVdXHJcbiAgICAgICAgICAgICAgICA6IENhY2hlRXJyb3JNZXNzYWdlc1tjYWNoZVVua25vd25FcnJvckNvZGVdKTtcclxuICAgICAgICBzdXBlcihgJHtlcnJvckNvZGV9OiAke21lc3NhZ2V9YCk7XHJcbiAgICAgICAgT2JqZWN0LnNldFByb3RvdHlwZU9mKHRoaXMsIENhY2hlRXJyb3IucHJvdG90eXBlKTtcclxuICAgICAgICB0aGlzLm5hbWUgPSBcIkNhY2hlRXJyb3JcIjtcclxuICAgICAgICB0aGlzLmVycm9yQ29kZSA9IGVycm9yQ29kZTtcclxuICAgICAgICB0aGlzLmVycm9yTWVzc2FnZSA9IG1lc3NhZ2U7XHJcbiAgICB9XHJcbn1cblxuZXhwb3J0IHsgQ2FjaGVFcnJvciwgQ2FjaGVFcnJvck1lc3NhZ2VzIH07XG4vLyMgc291cmNlTWFwcGluZ1VSTD1DYWNoZUVycm9yLm1qcy5tYXBcbiIsIi8qISBAYXp1cmUvbXNhbC1jb21tb24gdjE0LjE2LjAgMjAyNC0xMS0wNSAqL1xuJ3VzZSBzdHJpY3QnO1xuaW1wb3J0IHsgU2VwYXJhdG9ycywgQ3JlZGVudGlhbFR5cGUsIEF1dGhlbnRpY2F0aW9uU2NoZW1lLCBUSEVfRkFNSUxZX0lELCBBUFBfTUVUQURBVEEsIEFVVEhPUklUWV9NRVRBREFUQV9DT05TVEFOVFMgfSBmcm9tICcuLi91dGlscy9Db25zdGFudHMubWpzJztcbmltcG9ydCB7IGdlbmVyYXRlQ3JlZGVudGlhbEtleSB9IGZyb20gJy4vdXRpbHMvQ2FjaGVIZWxwZXJzLm1qcyc7XG5pbXBvcnQgeyBTY29wZVNldCB9IGZyb20gJy4uL3JlcXVlc3QvU2NvcGVTZXQubWpzJztcbmltcG9ydCB7IEFjY291bnRFbnRpdHkgfSBmcm9tICcuL2VudGl0aWVzL0FjY291bnRFbnRpdHkubWpzJztcbmltcG9ydCB7IGNyZWF0ZUNsaWVudEF1dGhFcnJvciB9IGZyb20gJy4uL2Vycm9yL0NsaWVudEF1dGhFcnJvci5tanMnO1xuaW1wb3J0IHsgdXBkYXRlQWNjb3VudFRlbmFudFByb2ZpbGVEYXRhLCB0ZW5hbnRJZE1hdGNoZXNIb21lVGVuYW50IH0gZnJvbSAnLi4vYWNjb3VudC9BY2NvdW50SW5mby5tanMnO1xuaW1wb3J0IHsgZXh0cmFjdFRva2VuQ2xhaW1zIH0gZnJvbSAnLi4vYWNjb3VudC9BdXRoVG9rZW4ubWpzJztcbmltcG9ydCB7IG5hbWUsIHZlcnNpb24gfSBmcm9tICcuLi9wYWNrYWdlTWV0YWRhdGEubWpzJztcbmltcG9ydCB7IGdldEFsaWFzZXNGcm9tU3RhdGljU291cmNlcyB9IGZyb20gJy4uL2F1dGhvcml0eS9BdXRob3JpdHlNZXRhZGF0YS5tanMnO1xuaW1wb3J0IHsgQ2FjaGVFcnJvciB9IGZyb20gJy4uL2Vycm9yL0NhY2hlRXJyb3IubWpzJztcbmltcG9ydCB7IGludmFsaWRDYWNoZVJlY29yZCwgYmluZGluZ0tleU5vdFJlbW92ZWQsIG11bHRpcGxlTWF0Y2hpbmdBcHBNZXRhZGF0YSwgbWV0aG9kTm90SW1wbGVtZW50ZWQgfSBmcm9tICcuLi9lcnJvci9DbGllbnRBdXRoRXJyb3JDb2Rlcy5tanMnO1xuaW1wb3J0IHsgY2FjaGVRdW90YUV4Y2VlZGVkRXJyb3JDb2RlLCBjYWNoZVVua25vd25FcnJvckNvZGUgfSBmcm9tICcuLi9lcnJvci9DYWNoZUVycm9yQ29kZXMubWpzJztcblxuLypcclxuICogQ29weXJpZ2h0IChjKSBNaWNyb3NvZnQgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuXHJcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgTGljZW5zZS5cclxuICovXHJcbi8qKlxyXG4gKiBJbnRlcmZhY2UgY2xhc3Mgd2hpY2ggaW1wbGVtZW50IGNhY2hlIHN0b3JhZ2UgZnVuY3Rpb25zIHVzZWQgYnkgTVNBTCB0byBwZXJmb3JtIHZhbGlkaXR5IGNoZWNrcywgYW5kIHN0b3JlIHRva2Vucy5cclxuICogQGludGVybmFsXHJcbiAqL1xyXG5jbGFzcyBDYWNoZU1hbmFnZXIge1xyXG4gICAgY29uc3RydWN0b3IoY2xpZW50SWQsIGNyeXB0b0ltcGwsIGxvZ2dlciwgc3RhdGljQXV0aG9yaXR5T3B0aW9ucykge1xyXG4gICAgICAgIHRoaXMuY2xpZW50SWQgPSBjbGllbnRJZDtcclxuICAgICAgICB0aGlzLmNyeXB0b0ltcGwgPSBjcnlwdG9JbXBsO1xyXG4gICAgICAgIHRoaXMuY29tbW9uTG9nZ2VyID0gbG9nZ2VyLmNsb25lKG5hbWUsIHZlcnNpb24pO1xyXG4gICAgICAgIHRoaXMuc3RhdGljQXV0aG9yaXR5T3B0aW9ucyA9IHN0YXRpY0F1dGhvcml0eU9wdGlvbnM7XHJcbiAgICB9XHJcbiAgICAvKipcclxuICAgICAqIFJldHVybnMgYWxsIHRoZSBhY2NvdW50cyBpbiB0aGUgY2FjaGUgdGhhdCBtYXRjaCB0aGUgb3B0aW9uYWwgZmlsdGVyLiBJZiBubyBmaWx0ZXIgaXMgcHJvdmlkZWQsIGFsbCBhY2NvdW50cyBhcmUgcmV0dXJuZWQuXHJcbiAgICAgKiBAcGFyYW0gYWNjb3VudEZpbHRlciAtIChPcHRpb25hbCkgZmlsdGVyIHRvIG5hcnJvdyBkb3duIHRoZSBhY2NvdW50cyByZXR1cm5lZFxyXG4gICAgICogQHJldHVybnMgQXJyYXkgb2YgQWNjb3VudEluZm8gb2JqZWN0cyBpbiBjYWNoZVxyXG4gICAgICovXHJcbiAgICBnZXRBbGxBY2NvdW50cyhhY2NvdW50RmlsdGVyKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuYnVpbGRUZW5hbnRQcm9maWxlcyh0aGlzLmdldEFjY291bnRzRmlsdGVyZWRCeShhY2NvdW50RmlsdGVyIHx8IHt9KSwgYWNjb3VudEZpbHRlcik7XHJcbiAgICB9XHJcbiAgICAvKipcclxuICAgICAqIEdldHMgZmlyc3QgdGVuYW50ZWQgQWNjb3VudEluZm8gb2JqZWN0IGZvdW5kIGJhc2VkIG9uIHByb3ZpZGVkIGZpbHRlcnNcclxuICAgICAqL1xyXG4gICAgZ2V0QWNjb3VudEluZm9GaWx0ZXJlZEJ5KGFjY291bnRGaWx0ZXIpIHtcclxuICAgICAgICBjb25zdCBhbGxBY2NvdW50cyA9IHRoaXMuZ2V0QWxsQWNjb3VudHMoYWNjb3VudEZpbHRlcik7XHJcbiAgICAgICAgaWYgKGFsbEFjY291bnRzLmxlbmd0aCA+IDEpIHtcclxuICAgICAgICAgICAgLy8gSWYgb25lIG9yIG1vcmUgYWNjb3VudHMgYXJlIGZvdW5kLCBwcmlvcml0aXplIGFjY291bnRzIHRoYXQgaGF2ZSBhbiBJRCB0b2tlblxyXG4gICAgICAgICAgICBjb25zdCBzb3J0ZWRBY2NvdW50cyA9IGFsbEFjY291bnRzLnNvcnQoKGFjY291bnQpID0+IHtcclxuICAgICAgICAgICAgICAgIHJldHVybiBhY2NvdW50LmlkVG9rZW5DbGFpbXMgPyAtMSA6IDE7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICByZXR1cm4gc29ydGVkQWNjb3VudHNbMF07XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2UgaWYgKGFsbEFjY291bnRzLmxlbmd0aCA9PT0gMSkge1xyXG4gICAgICAgICAgICAvLyBJZiBvbmx5IG9uZSBhY2NvdW50IGlzIGZvdW5kLCByZXR1cm4gaXQgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIGEgbWF0Y2hpbmcgSUQgdG9rZW4gd2FzIGZvdW5kXHJcbiAgICAgICAgICAgIHJldHVybiBhbGxBY2NvdW50c1swXTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIC8qKlxyXG4gICAgICogUmV0dXJucyBhIHNpbmdsZSBtYXRjaGluZ1xyXG4gICAgICogQHBhcmFtIGFjY291bnRGaWx0ZXJcclxuICAgICAqIEByZXR1cm5zXHJcbiAgICAgKi9cclxuICAgIGdldEJhc2VBY2NvdW50SW5mbyhhY2NvdW50RmlsdGVyKSB7XHJcbiAgICAgICAgY29uc3QgYWNjb3VudEVudGl0aWVzID0gdGhpcy5nZXRBY2NvdW50c0ZpbHRlcmVkQnkoYWNjb3VudEZpbHRlcik7XHJcbiAgICAgICAgaWYgKGFjY291bnRFbnRpdGllcy5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBhY2NvdW50RW50aXRpZXNbMF0uZ2V0QWNjb3VudEluZm8oKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIC8qKlxyXG4gICAgICogTWF0Y2hlcyBmaWx0ZXJlZCBhY2NvdW50IGVudGl0aWVzIHdpdGggY2FjaGVkIElEIHRva2VucyB0aGF0IG1hdGNoIHRoZSB0ZW5hbnQgcHJvZmlsZS1zcGVjaWZpYyBhY2NvdW50IGZpbHRlcnNcclxuICAgICAqIGFuZCBidWlsZHMgdGhlIGFjY291bnQgaW5mbyBvYmplY3RzIGZyb20gdGhlIG1hdGNoaW5nIElEIHRva2VuJ3MgY2xhaW1zXHJcbiAgICAgKiBAcGFyYW0gY2FjaGVkQWNjb3VudHNcclxuICAgICAqIEBwYXJhbSBhY2NvdW50RmlsdGVyXHJcbiAgICAgKiBAcmV0dXJucyBBcnJheSBvZiBBY2NvdW50SW5mbyBvYmplY3RzIHRoYXQgbWF0Y2ggYWNjb3VudCBhbmQgdGVuYW50IHByb2ZpbGUgZmlsdGVyc1xyXG4gICAgICovXHJcbiAgICBidWlsZFRlbmFudFByb2ZpbGVzKGNhY2hlZEFjY291bnRzLCBhY2NvdW50RmlsdGVyKSB7XHJcbiAgICAgICAgcmV0dXJuIGNhY2hlZEFjY291bnRzLmZsYXRNYXAoKGFjY291bnRFbnRpdHkpID0+IHtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZ2V0VGVuYW50UHJvZmlsZXNGcm9tQWNjb3VudEVudGl0eShhY2NvdW50RW50aXR5LCBhY2NvdW50RmlsdGVyPy50ZW5hbnRJZCwgYWNjb3VudEZpbHRlcik7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcbiAgICBnZXRUZW5hbnRlZEFjY291bnRJbmZvQnlGaWx0ZXIoYWNjb3VudEluZm8sIHRva2VuS2V5cywgdGVuYW50UHJvZmlsZSwgdGVuYW50UHJvZmlsZUZpbHRlcikge1xyXG4gICAgICAgIGxldCB0ZW5hbnRlZEFjY291bnRJbmZvID0gbnVsbDtcclxuICAgICAgICBsZXQgaWRUb2tlbkNsYWltcztcclxuICAgICAgICBpZiAodGVuYW50UHJvZmlsZUZpbHRlcikge1xyXG4gICAgICAgICAgICBpZiAoIXRoaXMudGVuYW50UHJvZmlsZU1hdGNoZXNGaWx0ZXIodGVuYW50UHJvZmlsZSwgdGVuYW50UHJvZmlsZUZpbHRlcikpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNvbnN0IGlkVG9rZW4gPSB0aGlzLmdldElkVG9rZW4oYWNjb3VudEluZm8sIHRva2VuS2V5cywgdGVuYW50UHJvZmlsZS50ZW5hbnRJZCk7XHJcbiAgICAgICAgaWYgKGlkVG9rZW4pIHtcclxuICAgICAgICAgICAgaWRUb2tlbkNsYWltcyA9IGV4dHJhY3RUb2tlbkNsYWltcyhpZFRva2VuLnNlY3JldCwgdGhpcy5jcnlwdG9JbXBsLmJhc2U2NERlY29kZSk7XHJcbiAgICAgICAgICAgIGlmICghdGhpcy5pZFRva2VuQ2xhaW1zTWF0Y2hUZW5hbnRQcm9maWxlRmlsdGVyKGlkVG9rZW5DbGFpbXMsIHRlbmFudFByb2ZpbGVGaWx0ZXIpKSB7XHJcbiAgICAgICAgICAgICAgICAvLyBJRCB0b2tlbiBzb3VyY2VkIGNsYWltcyBkb24ndCBtYXRjaCBzbyB0aGlzIHRlbmFudCBwcm9maWxlIGlzIG5vdCBhIG1hdGNoXHJcbiAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICAvLyBFeHBhbmQgdGVuYW50IHByb2ZpbGUgaW50byBhY2NvdW50IGluZm8gYmFzZWQgb24gbWF0Y2hpbmcgdGVuYW50IHByb2ZpbGUgYW5kIGlmIGF2YWlsYWJsZSBtYXRjaGluZyBJRCB0b2tlbiBjbGFpbXNcclxuICAgICAgICB0ZW5hbnRlZEFjY291bnRJbmZvID0gdXBkYXRlQWNjb3VudFRlbmFudFByb2ZpbGVEYXRhKGFjY291bnRJbmZvLCB0ZW5hbnRQcm9maWxlLCBpZFRva2VuQ2xhaW1zLCBpZFRva2VuPy5zZWNyZXQpO1xyXG4gICAgICAgIHJldHVybiB0ZW5hbnRlZEFjY291bnRJbmZvO1xyXG4gICAgfVxyXG4gICAgZ2V0VGVuYW50UHJvZmlsZXNGcm9tQWNjb3VudEVudGl0eShhY2NvdW50RW50aXR5LCB0YXJnZXRUZW5hbnRJZCwgdGVuYW50UHJvZmlsZUZpbHRlcikge1xyXG4gICAgICAgIGNvbnN0IGFjY291bnRJbmZvID0gYWNjb3VudEVudGl0eS5nZXRBY2NvdW50SW5mbygpO1xyXG4gICAgICAgIGxldCBzZWFyY2hUZW5hbnRQcm9maWxlcyA9IGFjY291bnRJbmZvLnRlbmFudFByb2ZpbGVzIHx8IG5ldyBNYXAoKTtcclxuICAgICAgICBjb25zdCB0b2tlbktleXMgPSB0aGlzLmdldFRva2VuS2V5cygpO1xyXG4gICAgICAgIC8vIElmIGEgdGVuYW50IElEIHdhcyBwcm92aWRlZCwgb25seSByZXR1cm4gdGhlIHRlbmFudCBwcm9maWxlIGZvciB0aGF0IHRlbmFudCBJRCBpZiBpdCBleGlzdHNcclxuICAgICAgICBpZiAodGFyZ2V0VGVuYW50SWQpIHtcclxuICAgICAgICAgICAgY29uc3QgdGVuYW50UHJvZmlsZSA9IHNlYXJjaFRlbmFudFByb2ZpbGVzLmdldCh0YXJnZXRUZW5hbnRJZCk7XHJcbiAgICAgICAgICAgIGlmICh0ZW5hbnRQcm9maWxlKSB7XHJcbiAgICAgICAgICAgICAgICAvLyBSZWR1Y2Ugc2VhcmNoIGZpZWxkIHRvIGp1c3QgdGhpcyB0ZW5hbnQgcHJvZmlsZVxyXG4gICAgICAgICAgICAgICAgc2VhcmNoVGVuYW50UHJvZmlsZXMgPSBuZXcgTWFwKFtcclxuICAgICAgICAgICAgICAgICAgICBbdGFyZ2V0VGVuYW50SWQsIHRlbmFudFByb2ZpbGVdLFxyXG4gICAgICAgICAgICAgICAgXSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAvLyBObyB0ZW5hbnQgcHJvZmlsZSBmb3Igc2VhcmNoIHRlbmFudCBJRCwgcmV0dXJuIGVtcHR5IGFycmF5XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gW107XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgY29uc3QgbWF0Y2hpbmdUZW5hbnRQcm9maWxlcyA9IFtdO1xyXG4gICAgICAgIHNlYXJjaFRlbmFudFByb2ZpbGVzLmZvckVhY2goKHRlbmFudFByb2ZpbGUpID0+IHtcclxuICAgICAgICAgICAgY29uc3QgdGVuYW50ZWRBY2NvdW50SW5mbyA9IHRoaXMuZ2V0VGVuYW50ZWRBY2NvdW50SW5mb0J5RmlsdGVyKGFjY291bnRJbmZvLCB0b2tlbktleXMsIHRlbmFudFByb2ZpbGUsIHRlbmFudFByb2ZpbGVGaWx0ZXIpO1xyXG4gICAgICAgICAgICBpZiAodGVuYW50ZWRBY2NvdW50SW5mbykge1xyXG4gICAgICAgICAgICAgICAgbWF0Y2hpbmdUZW5hbnRQcm9maWxlcy5wdXNoKHRlbmFudGVkQWNjb3VudEluZm8pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgcmV0dXJuIG1hdGNoaW5nVGVuYW50UHJvZmlsZXM7XHJcbiAgICB9XHJcbiAgICB0ZW5hbnRQcm9maWxlTWF0Y2hlc0ZpbHRlcih0ZW5hbnRQcm9maWxlLCB0ZW5hbnRQcm9maWxlRmlsdGVyKSB7XHJcbiAgICAgICAgaWYgKCEhdGVuYW50UHJvZmlsZUZpbHRlci5sb2NhbEFjY291bnRJZCAmJlxyXG4gICAgICAgICAgICAhdGhpcy5tYXRjaExvY2FsQWNjb3VudElkRnJvbVRlbmFudFByb2ZpbGUodGVuYW50UHJvZmlsZSwgdGVuYW50UHJvZmlsZUZpbHRlci5sb2NhbEFjY291bnRJZCkpIHtcclxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoISF0ZW5hbnRQcm9maWxlRmlsdGVyLm5hbWUgJiZcclxuICAgICAgICAgICAgISh0ZW5hbnRQcm9maWxlLm5hbWUgPT09IHRlbmFudFByb2ZpbGVGaWx0ZXIubmFtZSkpIHtcclxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAodGVuYW50UHJvZmlsZUZpbHRlci5pc0hvbWVUZW5hbnQgIT09IHVuZGVmaW5lZCAmJlxyXG4gICAgICAgICAgICAhKHRlbmFudFByb2ZpbGUuaXNIb21lVGVuYW50ID09PSB0ZW5hbnRQcm9maWxlRmlsdGVyLmlzSG9tZVRlbmFudCkpIHtcclxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgIH1cclxuICAgIGlkVG9rZW5DbGFpbXNNYXRjaFRlbmFudFByb2ZpbGVGaWx0ZXIoaWRUb2tlbkNsYWltcywgdGVuYW50UHJvZmlsZUZpbHRlcikge1xyXG4gICAgICAgIC8vIFRlbmFudCBQcm9maWxlIGZpbHRlcmluZ1xyXG4gICAgICAgIGlmICh0ZW5hbnRQcm9maWxlRmlsdGVyKSB7XHJcbiAgICAgICAgICAgIGlmICghIXRlbmFudFByb2ZpbGVGaWx0ZXIubG9jYWxBY2NvdW50SWQgJiZcclxuICAgICAgICAgICAgICAgICF0aGlzLm1hdGNoTG9jYWxBY2NvdW50SWRGcm9tVG9rZW5DbGFpbXMoaWRUb2tlbkNsYWltcywgdGVuYW50UHJvZmlsZUZpbHRlci5sb2NhbEFjY291bnRJZCkpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAoISF0ZW5hbnRQcm9maWxlRmlsdGVyLmxvZ2luSGludCAmJlxyXG4gICAgICAgICAgICAgICAgIXRoaXMubWF0Y2hMb2dpbkhpbnRGcm9tVG9rZW5DbGFpbXMoaWRUb2tlbkNsYWltcywgdGVuYW50UHJvZmlsZUZpbHRlci5sb2dpbkhpbnQpKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYgKCEhdGVuYW50UHJvZmlsZUZpbHRlci51c2VybmFtZSAmJlxyXG4gICAgICAgICAgICAgICAgIXRoaXMubWF0Y2hVc2VybmFtZShpZFRva2VuQ2xhaW1zLnByZWZlcnJlZF91c2VybmFtZSwgdGVuYW50UHJvZmlsZUZpbHRlci51c2VybmFtZSkpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAoISF0ZW5hbnRQcm9maWxlRmlsdGVyLm5hbWUgJiZcclxuICAgICAgICAgICAgICAgICF0aGlzLm1hdGNoTmFtZShpZFRva2VuQ2xhaW1zLCB0ZW5hbnRQcm9maWxlRmlsdGVyLm5hbWUpKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYgKCEhdGVuYW50UHJvZmlsZUZpbHRlci5zaWQgJiZcclxuICAgICAgICAgICAgICAgICF0aGlzLm1hdGNoU2lkKGlkVG9rZW5DbGFpbXMsIHRlbmFudFByb2ZpbGVGaWx0ZXIuc2lkKSkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgfVxyXG4gICAgLyoqXHJcbiAgICAgKiBzYXZlcyBhIGNhY2hlIHJlY29yZFxyXG4gICAgICogQHBhcmFtIGNhY2hlUmVjb3JkIHtDYWNoZVJlY29yZH1cclxuICAgICAqIEBwYXJhbSBzdG9yZUluQ2FjaGUgez9TdG9yZUluQ2FjaGV9XHJcbiAgICAgKiBAcGFyYW0gY29ycmVsYXRpb25JZCB7P3N0cmluZ30gY29ycmVsYXRpb24gaWRcclxuICAgICAqL1xyXG4gICAgYXN5bmMgc2F2ZUNhY2hlUmVjb3JkKGNhY2hlUmVjb3JkLCBzdG9yZUluQ2FjaGUsIGNvcnJlbGF0aW9uSWQpIHtcclxuICAgICAgICBpZiAoIWNhY2hlUmVjb3JkKSB7XHJcbiAgICAgICAgICAgIHRocm93IGNyZWF0ZUNsaWVudEF1dGhFcnJvcihpbnZhbGlkQ2FjaGVSZWNvcmQpO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICBpZiAoISFjYWNoZVJlY29yZC5hY2NvdW50KSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNldEFjY291bnQoY2FjaGVSZWNvcmQuYWNjb3VudCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYgKCEhY2FjaGVSZWNvcmQuaWRUb2tlbiAmJiBzdG9yZUluQ2FjaGU/LmlkVG9rZW4gIT09IGZhbHNlKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNldElkVG9rZW5DcmVkZW50aWFsKGNhY2hlUmVjb3JkLmlkVG9rZW4pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmICghIWNhY2hlUmVjb3JkLmFjY2Vzc1Rva2VuICYmXHJcbiAgICAgICAgICAgICAgICBzdG9yZUluQ2FjaGU/LmFjY2Vzc1Rva2VuICE9PSBmYWxzZSkge1xyXG4gICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5zYXZlQWNjZXNzVG9rZW4oY2FjaGVSZWNvcmQuYWNjZXNzVG9rZW4pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmICghIWNhY2hlUmVjb3JkLnJlZnJlc2hUb2tlbiAmJlxyXG4gICAgICAgICAgICAgICAgc3RvcmVJbkNhY2hlPy5yZWZyZXNoVG9rZW4gIT09IGZhbHNlKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNldFJlZnJlc2hUb2tlbkNyZWRlbnRpYWwoY2FjaGVSZWNvcmQucmVmcmVzaFRva2VuKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAoISFjYWNoZVJlY29yZC5hcHBNZXRhZGF0YSkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zZXRBcHBNZXRhZGF0YShjYWNoZVJlY29yZC5hcHBNZXRhZGF0YSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgY2F0Y2ggKGUpIHtcclxuICAgICAgICAgICAgdGhpcy5jb21tb25Mb2dnZXI/LmVycm9yKGBDYWNoZU1hbmFnZXIuc2F2ZUNhY2hlUmVjb3JkOiBmYWlsZWRgKTtcclxuICAgICAgICAgICAgaWYgKGUgaW5zdGFuY2VvZiBFcnJvcikge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jb21tb25Mb2dnZXI/LmVycm9yUGlpKGBDYWNoZU1hbmFnZXIuc2F2ZUNhY2hlUmVjb3JkOiAke2UubWVzc2FnZX1gLCBjb3JyZWxhdGlvbklkKTtcclxuICAgICAgICAgICAgICAgIGlmIChlLm5hbWUgPT09IFwiUXVvdGFFeGNlZWRlZEVycm9yXCIgfHxcclxuICAgICAgICAgICAgICAgICAgICBlLm5hbWUgPT09IFwiTlNfRVJST1JfRE9NX1FVT1RBX1JFQUNIRURcIiB8fFxyXG4gICAgICAgICAgICAgICAgICAgIGUubWVzc2FnZS5pbmNsdWRlcyhcImV4Y2VlZGVkIHRoZSBxdW90YVwiKSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuY29tbW9uTG9nZ2VyPy5lcnJvcihgQ2FjaGVNYW5hZ2VyLnNhdmVDYWNoZVJlY29yZDogZXhjZWVkZWQgc3RvcmFnZSBxdW90YWAsIGNvcnJlbGF0aW9uSWQpO1xyXG4gICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBDYWNoZUVycm9yKGNhY2hlUXVvdGFFeGNlZWRlZEVycm9yQ29kZSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgQ2FjaGVFcnJvcihlLm5hbWUsIGUubWVzc2FnZSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmNvbW1vbkxvZ2dlcj8uZXJyb3JQaWkoYENhY2hlTWFuYWdlci5zYXZlQ2FjaGVSZWNvcmQ6ICR7ZX1gLCBjb3JyZWxhdGlvbklkKTtcclxuICAgICAgICAgICAgICAgIHRocm93IG5ldyBDYWNoZUVycm9yKGNhY2hlVW5rbm93bkVycm9yQ29kZSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICAvKipcclxuICAgICAqIHNhdmVzIGFjY2VzcyB0b2tlbiBjcmVkZW50aWFsXHJcbiAgICAgKiBAcGFyYW0gY3JlZGVudGlhbFxyXG4gICAgICovXHJcbiAgICBhc3luYyBzYXZlQWNjZXNzVG9rZW4oY3JlZGVudGlhbCkge1xyXG4gICAgICAgIGNvbnN0IGFjY2Vzc1Rva2VuRmlsdGVyID0ge1xyXG4gICAgICAgICAgICBjbGllbnRJZDogY3JlZGVudGlhbC5jbGllbnRJZCxcclxuICAgICAgICAgICAgY3JlZGVudGlhbFR5cGU6IGNyZWRlbnRpYWwuY3JlZGVudGlhbFR5cGUsXHJcbiAgICAgICAgICAgIGVudmlyb25tZW50OiBjcmVkZW50aWFsLmVudmlyb25tZW50LFxyXG4gICAgICAgICAgICBob21lQWNjb3VudElkOiBjcmVkZW50aWFsLmhvbWVBY2NvdW50SWQsXHJcbiAgICAgICAgICAgIHJlYWxtOiBjcmVkZW50aWFsLnJlYWxtLFxyXG4gICAgICAgICAgICB0b2tlblR5cGU6IGNyZWRlbnRpYWwudG9rZW5UeXBlLFxyXG4gICAgICAgICAgICByZXF1ZXN0ZWRDbGFpbXNIYXNoOiBjcmVkZW50aWFsLnJlcXVlc3RlZENsYWltc0hhc2gsXHJcbiAgICAgICAgfTtcclxuICAgICAgICBjb25zdCB0b2tlbktleXMgPSB0aGlzLmdldFRva2VuS2V5cygpO1xyXG4gICAgICAgIGNvbnN0IGN1cnJlbnRTY29wZXMgPSBTY29wZVNldC5mcm9tU3RyaW5nKGNyZWRlbnRpYWwudGFyZ2V0KTtcclxuICAgICAgICBjb25zdCByZW1vdmVkQWNjZXNzVG9rZW5zID0gW107XHJcbiAgICAgICAgdG9rZW5LZXlzLmFjY2Vzc1Rva2VuLmZvckVhY2goKGtleSkgPT4ge1xyXG4gICAgICAgICAgICBpZiAoIXRoaXMuYWNjZXNzVG9rZW5LZXlNYXRjaGVzRmlsdGVyKGtleSwgYWNjZXNzVG9rZW5GaWx0ZXIsIGZhbHNlKSkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGNvbnN0IHRva2VuRW50aXR5ID0gdGhpcy5nZXRBY2Nlc3NUb2tlbkNyZWRlbnRpYWwoa2V5KTtcclxuICAgICAgICAgICAgaWYgKHRva2VuRW50aXR5ICYmXHJcbiAgICAgICAgICAgICAgICB0aGlzLmNyZWRlbnRpYWxNYXRjaGVzRmlsdGVyKHRva2VuRW50aXR5LCBhY2Nlc3NUb2tlbkZpbHRlcikpIHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IHRva2VuU2NvcGVTZXQgPSBTY29wZVNldC5mcm9tU3RyaW5nKHRva2VuRW50aXR5LnRhcmdldCk7XHJcbiAgICAgICAgICAgICAgICBpZiAodG9rZW5TY29wZVNldC5pbnRlcnNlY3RpbmdTY29wZVNldHMoY3VycmVudFNjb3BlcykpIHtcclxuICAgICAgICAgICAgICAgICAgICByZW1vdmVkQWNjZXNzVG9rZW5zLnB1c2godGhpcy5yZW1vdmVBY2Nlc3NUb2tlbihrZXkpKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIGF3YWl0IFByb21pc2UuYWxsKHJlbW92ZWRBY2Nlc3NUb2tlbnMpO1xyXG4gICAgICAgIHRoaXMuc2V0QWNjZXNzVG9rZW5DcmVkZW50aWFsKGNyZWRlbnRpYWwpO1xyXG4gICAgfVxyXG4gICAgLyoqXHJcbiAgICAgKiBSZXRyaWV2ZSBhY2NvdW50IGVudGl0aWVzIG1hdGNoaW5nIGFsbCBwcm92aWRlZCB0ZW5hbnQtYWdub3N0aWMgZmlsdGVyczsgaWYgbm8gZmlsdGVyIGlzIHNldCwgZ2V0IGFsbCBhY2NvdW50IGVudGl0aWVzIGluIHRoZSBjYWNoZVxyXG4gICAgICogTm90IGNoZWNraW5nIGZvciBjYXNpbmcgYXMga2V5cyBhcmUgYWxsIGdlbmVyYXRlZCBpbiBsb3dlciBjYXNlLCByZW1lbWJlciB0byBjb252ZXJ0IHRvIGxvd2VyIGNhc2UgaWYgb2JqZWN0IHByb3BlcnRpZXMgYXJlIGNvbXBhcmVkXHJcbiAgICAgKiBAcGFyYW0gYWNjb3VudEZpbHRlciAtIEFuIG9iamVjdCBjb250YWluaW5nIEFjY291bnQgcHJvcGVydGllcyB0byBmaWx0ZXIgYnlcclxuICAgICAqL1xyXG4gICAgZ2V0QWNjb3VudHNGaWx0ZXJlZEJ5KGFjY291bnRGaWx0ZXIpIHtcclxuICAgICAgICBjb25zdCBhbGxBY2NvdW50S2V5cyA9IHRoaXMuZ2V0QWNjb3VudEtleXMoKTtcclxuICAgICAgICBjb25zdCBtYXRjaGluZ0FjY291bnRzID0gW107XHJcbiAgICAgICAgYWxsQWNjb3VudEtleXMuZm9yRWFjaCgoY2FjaGVLZXkpID0+IHtcclxuICAgICAgICAgICAgaWYgKCF0aGlzLmlzQWNjb3VudEtleShjYWNoZUtleSwgYWNjb3VudEZpbHRlci5ob21lQWNjb3VudElkKSkge1xyXG4gICAgICAgICAgICAgICAgLy8gRG9uJ3QgcGFyc2UgdmFsdWUgaWYgdGhlIGtleSBkb2Vzbid0IG1hdGNoIHRoZSBhY2NvdW50IGZpbHRlcnNcclxuICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBjb25zdCBlbnRpdHkgPSB0aGlzLmdldEFjY291bnQoY2FjaGVLZXksIHRoaXMuY29tbW9uTG9nZ2VyKTtcclxuICAgICAgICAgICAgLy8gTWF0Y2ggYmFzZSBhY2NvdW50IGZpZWxkc1xyXG4gICAgICAgICAgICBpZiAoIWVudGl0eSkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmICghIWFjY291bnRGaWx0ZXIuaG9tZUFjY291bnRJZCAmJlxyXG4gICAgICAgICAgICAgICAgIXRoaXMubWF0Y2hIb21lQWNjb3VudElkKGVudGl0eSwgYWNjb3VudEZpbHRlci5ob21lQWNjb3VudElkKSkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmICghIWFjY291bnRGaWx0ZXIudXNlcm5hbWUgJiZcclxuICAgICAgICAgICAgICAgICF0aGlzLm1hdGNoVXNlcm5hbWUoZW50aXR5LnVzZXJuYW1lLCBhY2NvdW50RmlsdGVyLnVzZXJuYW1lKSkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmICghIWFjY291bnRGaWx0ZXIuZW52aXJvbm1lbnQgJiZcclxuICAgICAgICAgICAgICAgICF0aGlzLm1hdGNoRW52aXJvbm1lbnQoZW50aXR5LCBhY2NvdW50RmlsdGVyLmVudmlyb25tZW50KSkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmICghIWFjY291bnRGaWx0ZXIucmVhbG0gJiZcclxuICAgICAgICAgICAgICAgICF0aGlzLm1hdGNoUmVhbG0oZW50aXR5LCBhY2NvdW50RmlsdGVyLnJlYWxtKSkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmICghIWFjY291bnRGaWx0ZXIubmF0aXZlQWNjb3VudElkICYmXHJcbiAgICAgICAgICAgICAgICAhdGhpcy5tYXRjaE5hdGl2ZUFjY291bnRJZChlbnRpdHksIGFjY291bnRGaWx0ZXIubmF0aXZlQWNjb3VudElkKSkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmICghIWFjY291bnRGaWx0ZXIuYXV0aG9yaXR5VHlwZSAmJlxyXG4gICAgICAgICAgICAgICAgIXRoaXMubWF0Y2hBdXRob3JpdHlUeXBlKGVudGl0eSwgYWNjb3VudEZpbHRlci5hdXRob3JpdHlUeXBlKSkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIC8vIElmIGF0IGxlYXN0IG9uZSB0ZW5hbnQgcHJvZmlsZSBtYXRjaGVzIHRoZSB0ZW5hbnQgcHJvZmlsZSBmaWx0ZXIsIGFkZCB0aGUgYWNjb3VudCB0byB0aGUgbGlzdCBvZiBtYXRjaGluZyBhY2NvdW50c1xyXG4gICAgICAgICAgICBjb25zdCB0ZW5hbnRQcm9maWxlRmlsdGVyID0ge1xyXG4gICAgICAgICAgICAgICAgbG9jYWxBY2NvdW50SWQ6IGFjY291bnRGaWx0ZXI/LmxvY2FsQWNjb3VudElkLFxyXG4gICAgICAgICAgICAgICAgbmFtZTogYWNjb3VudEZpbHRlcj8ubmFtZSxcclxuICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgY29uc3QgbWF0Y2hpbmdUZW5hbnRQcm9maWxlcyA9IGVudGl0eS50ZW5hbnRQcm9maWxlcz8uZmlsdGVyKCh0ZW5hbnRQcm9maWxlKSA9PiB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy50ZW5hbnRQcm9maWxlTWF0Y2hlc0ZpbHRlcih0ZW5hbnRQcm9maWxlLCB0ZW5hbnRQcm9maWxlRmlsdGVyKTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIGlmIChtYXRjaGluZ1RlbmFudFByb2ZpbGVzICYmIG1hdGNoaW5nVGVuYW50UHJvZmlsZXMubGVuZ3RoID09PSAwKSB7XHJcbiAgICAgICAgICAgICAgICAvLyBObyB0ZW5hbnQgcHJvZmlsZSBmb3IgdGhpcyBhY2NvdW50IG1hdGNoZXMgZmlsdGVyLCBkb24ndCBhZGQgdG8gbGlzdCBvZiBtYXRjaGluZyBhY2NvdW50c1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIG1hdGNoaW5nQWNjb3VudHMucHVzaChlbnRpdHkpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIHJldHVybiBtYXRjaGluZ0FjY291bnRzO1xyXG4gICAgfVxyXG4gICAgLyoqXHJcbiAgICAgKiBSZXR1cm5zIHRydWUgaWYgdGhlIGdpdmVuIGtleSBtYXRjaGVzIG91ciBhY2NvdW50IGtleSBzY2hlbWEuIEFsc28gbWF0Y2hlcyBob21lQWNjb3VudElkIGFuZC9vciB0ZW5hbnRJZCBpZiBwcm92aWRlZFxyXG4gICAgICogQHBhcmFtIGtleVxyXG4gICAgICogQHBhcmFtIGhvbWVBY2NvdW50SWRcclxuICAgICAqIEBwYXJhbSB0ZW5hbnRJZFxyXG4gICAgICogQHJldHVybnNcclxuICAgICAqL1xyXG4gICAgaXNBY2NvdW50S2V5KGtleSwgaG9tZUFjY291bnRJZCwgdGVuYW50SWQpIHtcclxuICAgICAgICBpZiAoa2V5LnNwbGl0KFNlcGFyYXRvcnMuQ0FDSEVfS0VZX1NFUEFSQVRPUikubGVuZ3RoIDwgMykge1xyXG4gICAgICAgICAgICAvLyBBY2NvdW50IGNhY2hlIGtleXMgY29udGFpbiAzIGl0ZW1zIHNlcGFyYXRlZCBieSAnLScgKGVhY2ggaXRlbSBtYXkgYWxzbyBjb250YWluICctJylcclxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoaG9tZUFjY291bnRJZCAmJlxyXG4gICAgICAgICAgICAha2V5LnRvTG93ZXJDYXNlKCkuaW5jbHVkZXMoaG9tZUFjY291bnRJZC50b0xvd2VyQ2FzZSgpKSkge1xyXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICh0ZW5hbnRJZCAmJiAha2V5LnRvTG93ZXJDYXNlKCkuaW5jbHVkZXModGVuYW50SWQudG9Mb3dlckNhc2UoKSkpIHtcclxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgIH1cclxuICAgICAgICAvLyBEbyBub3QgY2hlY2sgZW52aXJvbm1lbnQgYXMgYWxpYXNpbmcgY2FuIGNhdXNlIGZhbHNlIG5lZ2F0aXZlc1xyXG4gICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgfVxyXG4gICAgLyoqXHJcbiAgICAgKiBSZXR1cm5zIHRydWUgaWYgdGhlIGdpdmVuIGtleSBtYXRjaGVzIG91ciBjcmVkZW50aWFsIGtleSBzY2hlbWEuXHJcbiAgICAgKiBAcGFyYW0ga2V5XHJcbiAgICAgKi9cclxuICAgIGlzQ3JlZGVudGlhbEtleShrZXkpIHtcclxuICAgICAgICBpZiAoa2V5LnNwbGl0KFNlcGFyYXRvcnMuQ0FDSEVfS0VZX1NFUEFSQVRPUikubGVuZ3RoIDwgNikge1xyXG4gICAgICAgICAgICAvLyBDcmVkZW50aWFsIGNhY2hlIGtleXMgY29udGFpbiA2IGl0ZW1zIHNlcGFyYXRlZCBieSAnLScgKGVhY2ggaXRlbSBtYXkgYWxzbyBjb250YWluICctJylcclxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjb25zdCBsb3dlckNhc2VLZXkgPSBrZXkudG9Mb3dlckNhc2UoKTtcclxuICAgICAgICAvLyBDcmVkZW50aWFsIGtleXMgbXVzdCBpbmRpY2F0ZSB3aGF0IGNyZWRlbnRpYWwgdHlwZSB0aGV5IHJlcHJlc2VudFxyXG4gICAgICAgIGlmIChsb3dlckNhc2VLZXkuaW5kZXhPZihDcmVkZW50aWFsVHlwZS5JRF9UT0tFTi50b0xvd2VyQ2FzZSgpKSA9PT1cclxuICAgICAgICAgICAgLTEgJiZcclxuICAgICAgICAgICAgbG93ZXJDYXNlS2V5LmluZGV4T2YoQ3JlZGVudGlhbFR5cGUuQUNDRVNTX1RPS0VOLnRvTG93ZXJDYXNlKCkpID09PVxyXG4gICAgICAgICAgICAgICAgLTEgJiZcclxuICAgICAgICAgICAgbG93ZXJDYXNlS2V5LmluZGV4T2YoQ3JlZGVudGlhbFR5cGUuQUNDRVNTX1RPS0VOX1dJVEhfQVVUSF9TQ0hFTUUudG9Mb3dlckNhc2UoKSkgPT09IC0xICYmXHJcbiAgICAgICAgICAgIGxvd2VyQ2FzZUtleS5pbmRleE9mKENyZWRlbnRpYWxUeXBlLlJFRlJFU0hfVE9LRU4udG9Mb3dlckNhc2UoKSkgPT09XHJcbiAgICAgICAgICAgICAgICAtMSkge1xyXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChsb3dlckNhc2VLZXkuaW5kZXhPZihDcmVkZW50aWFsVHlwZS5SRUZSRVNIX1RPS0VOLnRvTG93ZXJDYXNlKCkpID5cclxuICAgICAgICAgICAgLTEpIHtcclxuICAgICAgICAgICAgLy8gUmVmcmVzaCB0b2tlbnMgbXVzdCBjb250YWluIHRoZSBjbGllbnQgaWQgb3IgZmFtaWx5IGlkXHJcbiAgICAgICAgICAgIGNvbnN0IGNsaWVudElkVmFsaWRhdGlvbiA9IGAke0NyZWRlbnRpYWxUeXBlLlJFRlJFU0hfVE9LRU59JHtTZXBhcmF0b3JzLkNBQ0hFX0tFWV9TRVBBUkFUT1J9JHt0aGlzLmNsaWVudElkfSR7U2VwYXJhdG9ycy5DQUNIRV9LRVlfU0VQQVJBVE9SfWA7XHJcbiAgICAgICAgICAgIGNvbnN0IGZhbWlseUlkVmFsaWRhdGlvbiA9IGAke0NyZWRlbnRpYWxUeXBlLlJFRlJFU0hfVE9LRU59JHtTZXBhcmF0b3JzLkNBQ0hFX0tFWV9TRVBBUkFUT1J9JHtUSEVfRkFNSUxZX0lEfSR7U2VwYXJhdG9ycy5DQUNIRV9LRVlfU0VQQVJBVE9SfWA7XHJcbiAgICAgICAgICAgIGlmIChsb3dlckNhc2VLZXkuaW5kZXhPZihjbGllbnRJZFZhbGlkYXRpb24udG9Mb3dlckNhc2UoKSkgPT09IC0xICYmXHJcbiAgICAgICAgICAgICAgICBsb3dlckNhc2VLZXkuaW5kZXhPZihmYW1pbHlJZFZhbGlkYXRpb24udG9Mb3dlckNhc2UoKSkgPT09IC0xKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSBpZiAobG93ZXJDYXNlS2V5LmluZGV4T2YodGhpcy5jbGllbnRJZC50b0xvd2VyQ2FzZSgpKSA9PT0gLTEpIHtcclxuICAgICAgICAgICAgLy8gVG9rZW5zIG11c3QgY29udGFpbiB0aGUgY2xpZW50SWRcclxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgIH1cclxuICAgIC8qKlxyXG4gICAgICogUmV0dXJucyB3aGV0aGVyIG9yIG5vdCB0aGUgZ2l2ZW4gY3JlZGVudGlhbCBlbnRpdHkgbWF0Y2hlcyB0aGUgZmlsdGVyXHJcbiAgICAgKiBAcGFyYW0gZW50aXR5XHJcbiAgICAgKiBAcGFyYW0gZmlsdGVyXHJcbiAgICAgKiBAcmV0dXJuc1xyXG4gICAgICovXHJcbiAgICBjcmVkZW50aWFsTWF0Y2hlc0ZpbHRlcihlbnRpdHksIGZpbHRlcikge1xyXG4gICAgICAgIGlmICghIWZpbHRlci5jbGllbnRJZCAmJiAhdGhpcy5tYXRjaENsaWVudElkKGVudGl0eSwgZmlsdGVyLmNsaWVudElkKSkge1xyXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICghIWZpbHRlci51c2VyQXNzZXJ0aW9uSGFzaCAmJlxyXG4gICAgICAgICAgICAhdGhpcy5tYXRjaFVzZXJBc3NlcnRpb25IYXNoKGVudGl0eSwgZmlsdGVyLnVzZXJBc3NlcnRpb25IYXNoKSkge1xyXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIC8qXHJcbiAgICAgICAgICogaG9tZUFjY291bnRJZCBjYW4gYmUgdW5kZWZpbmVkLCBhbmQgd2Ugd2FudCB0byBmaWx0ZXIgb3V0IGNhY2hlZCBpdGVtcyB0aGF0IGhhdmUgYSBob21lQWNjb3VudElkIG9mIFwiXCJcclxuICAgICAgICAgKiBiZWNhdXNlIHdlIGRvbid0IHdhbnQgYSBjbGllbnRfY3JlZGVudGlhbCByZXF1ZXN0IHRvIHJldHVybiBhIGNhY2hlZCB0b2tlbiB0aGF0IGhhcyBhIGhvbWVBY2NvdW50SWRcclxuICAgICAgICAgKi9cclxuICAgICAgICBpZiAodHlwZW9mIGZpbHRlci5ob21lQWNjb3VudElkID09PSBcInN0cmluZ1wiICYmXHJcbiAgICAgICAgICAgICF0aGlzLm1hdGNoSG9tZUFjY291bnRJZChlbnRpdHksIGZpbHRlci5ob21lQWNjb3VudElkKSkge1xyXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICghIWZpbHRlci5lbnZpcm9ubWVudCAmJlxyXG4gICAgICAgICAgICAhdGhpcy5tYXRjaEVudmlyb25tZW50KGVudGl0eSwgZmlsdGVyLmVudmlyb25tZW50KSkge1xyXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICghIWZpbHRlci5yZWFsbSAmJiAhdGhpcy5tYXRjaFJlYWxtKGVudGl0eSwgZmlsdGVyLnJlYWxtKSkge1xyXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICghIWZpbHRlci5jcmVkZW50aWFsVHlwZSAmJlxyXG4gICAgICAgICAgICAhdGhpcy5tYXRjaENyZWRlbnRpYWxUeXBlKGVudGl0eSwgZmlsdGVyLmNyZWRlbnRpYWxUeXBlKSkge1xyXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICghIWZpbHRlci5mYW1pbHlJZCAmJiAhdGhpcy5tYXRjaEZhbWlseUlkKGVudGl0eSwgZmlsdGVyLmZhbWlseUlkKSkge1xyXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIC8qXHJcbiAgICAgICAgICogaWRUb2tlbnMgZG8gbm90IGhhdmUgXCJ0YXJnZXRcIiwgdGFyZ2V0IHNwZWNpZmljIHJlZnJlc2hUb2tlbnMgZG8gZXhpc3QgZm9yIHNvbWUgdHlwZXMgb2YgYXV0aGVudGljYXRpb25cclxuICAgICAgICAgKiBSZXNvdXJjZSBzcGVjaWZpYyByZWZyZXNoIHRva2VucyBjYXNlIHdpbGwgYmUgYWRkZWQgd2hlbiB0aGUgc3VwcG9ydCBpcyBkZWVtZWQgbmVjZXNzYXJ5XHJcbiAgICAgICAgICovXHJcbiAgICAgICAgaWYgKCEhZmlsdGVyLnRhcmdldCAmJiAhdGhpcy5tYXRjaFRhcmdldChlbnRpdHksIGZpbHRlci50YXJnZXQpKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgLy8gSWYgcmVxdWVzdCBPUiBjYWNoZWQgZW50aXR5IGhhcyByZXF1ZXN0ZWQgQ2xhaW1zIEhhc2gsIGNoZWNrIGlmIHRoZXkgbWF0Y2hcclxuICAgICAgICBpZiAoZmlsdGVyLnJlcXVlc3RlZENsYWltc0hhc2ggfHwgZW50aXR5LnJlcXVlc3RlZENsYWltc0hhc2gpIHtcclxuICAgICAgICAgICAgLy8gRG9uJ3QgbWF0Y2ggaWYgZWl0aGVyIGlzIHVuZGVmaW5lZCBvciB0aGV5IGFyZSBkaWZmZXJlbnRcclxuICAgICAgICAgICAgaWYgKGVudGl0eS5yZXF1ZXN0ZWRDbGFpbXNIYXNoICE9PSBmaWx0ZXIucmVxdWVzdGVkQ2xhaW1zSGFzaCkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIC8vIEFjY2VzcyBUb2tlbiB3aXRoIEF1dGggU2NoZW1lIHNwZWNpZmljIG1hdGNoaW5nXHJcbiAgICAgICAgaWYgKGVudGl0eS5jcmVkZW50aWFsVHlwZSA9PT1cclxuICAgICAgICAgICAgQ3JlZGVudGlhbFR5cGUuQUNDRVNTX1RPS0VOX1dJVEhfQVVUSF9TQ0hFTUUpIHtcclxuICAgICAgICAgICAgaWYgKCEhZmlsdGVyLnRva2VuVHlwZSAmJlxyXG4gICAgICAgICAgICAgICAgIXRoaXMubWF0Y2hUb2tlblR5cGUoZW50aXR5LCBmaWx0ZXIudG9rZW5UeXBlKSkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIC8vIEtleUlkIChzc2hLaWQpIGluIHJlcXVlc3QgbXVzdCBtYXRjaCBjYWNoZWQgU1NIIGNlcnRpZmljYXRlIGtleUlkIGJlY2F1c2UgU1NIIGNlcnQgaXMgYm91bmQgdG8gYSBzcGVjaWZpYyBrZXlcclxuICAgICAgICAgICAgaWYgKGZpbHRlci50b2tlblR5cGUgPT09IEF1dGhlbnRpY2F0aW9uU2NoZW1lLlNTSCkge1xyXG4gICAgICAgICAgICAgICAgaWYgKGZpbHRlci5rZXlJZCAmJiAhdGhpcy5tYXRjaEtleUlkKGVudGl0eSwgZmlsdGVyLmtleUlkKSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgIH1cclxuICAgIC8qKlxyXG4gICAgICogcmV0cmlldmUgYXBwTWV0YWRhdGEgbWF0Y2hpbmcgYWxsIHByb3ZpZGVkIGZpbHRlcnM7IGlmIG5vIGZpbHRlciBpcyBzZXQsIGdldCBhbGwgYXBwTWV0YWRhdGFcclxuICAgICAqIEBwYXJhbSBmaWx0ZXJcclxuICAgICAqL1xyXG4gICAgZ2V0QXBwTWV0YWRhdGFGaWx0ZXJlZEJ5KGZpbHRlcikge1xyXG4gICAgICAgIGNvbnN0IGFsbENhY2hlS2V5cyA9IHRoaXMuZ2V0S2V5cygpO1xyXG4gICAgICAgIGNvbnN0IG1hdGNoaW5nQXBwTWV0YWRhdGEgPSB7fTtcclxuICAgICAgICBhbGxDYWNoZUtleXMuZm9yRWFjaCgoY2FjaGVLZXkpID0+IHtcclxuICAgICAgICAgICAgLy8gZG9uJ3QgcGFyc2UgYW55IG5vbi1hcHBNZXRhZGF0YSB0eXBlIGNhY2hlIGVudGl0aWVzXHJcbiAgICAgICAgICAgIGlmICghdGhpcy5pc0FwcE1ldGFkYXRhKGNhY2hlS2V5KSkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIC8vIEF0dGVtcHQgcmV0cmlldmFsXHJcbiAgICAgICAgICAgIGNvbnN0IGVudGl0eSA9IHRoaXMuZ2V0QXBwTWV0YWRhdGEoY2FjaGVLZXkpO1xyXG4gICAgICAgICAgICBpZiAoIWVudGl0eSkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmICghIWZpbHRlci5lbnZpcm9ubWVudCAmJlxyXG4gICAgICAgICAgICAgICAgIXRoaXMubWF0Y2hFbnZpcm9ubWVudChlbnRpdHksIGZpbHRlci5lbnZpcm9ubWVudCkpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAoISFmaWx0ZXIuY2xpZW50SWQgJiZcclxuICAgICAgICAgICAgICAgICF0aGlzLm1hdGNoQ2xpZW50SWQoZW50aXR5LCBmaWx0ZXIuY2xpZW50SWQpKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgbWF0Y2hpbmdBcHBNZXRhZGF0YVtjYWNoZUtleV0gPSBlbnRpdHk7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgcmV0dXJuIG1hdGNoaW5nQXBwTWV0YWRhdGE7XHJcbiAgICB9XHJcbiAgICAvKipcclxuICAgICAqIHJldHJpZXZlIGF1dGhvcml0eU1ldGFkYXRhIHRoYXQgY29udGFpbnMgYSBtYXRjaGluZyBhbGlhc1xyXG4gICAgICogQHBhcmFtIGZpbHRlclxyXG4gICAgICovXHJcbiAgICBnZXRBdXRob3JpdHlNZXRhZGF0YUJ5QWxpYXMoaG9zdCkge1xyXG4gICAgICAgIGNvbnN0IGFsbENhY2hlS2V5cyA9IHRoaXMuZ2V0QXV0aG9yaXR5TWV0YWRhdGFLZXlzKCk7XHJcbiAgICAgICAgbGV0IG1hdGNoZWRFbnRpdHkgPSBudWxsO1xyXG4gICAgICAgIGFsbENhY2hlS2V5cy5mb3JFYWNoKChjYWNoZUtleSkgPT4ge1xyXG4gICAgICAgICAgICAvLyBkb24ndCBwYXJzZSBhbnkgbm9uLWF1dGhvcml0eU1ldGFkYXRhIHR5cGUgY2FjaGUgZW50aXRpZXNcclxuICAgICAgICAgICAgaWYgKCF0aGlzLmlzQXV0aG9yaXR5TWV0YWRhdGEoY2FjaGVLZXkpIHx8XHJcbiAgICAgICAgICAgICAgICBjYWNoZUtleS5pbmRleE9mKHRoaXMuY2xpZW50SWQpID09PSAtMSkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIC8vIEF0dGVtcHQgcmV0cmlldmFsXHJcbiAgICAgICAgICAgIGNvbnN0IGVudGl0eSA9IHRoaXMuZ2V0QXV0aG9yaXR5TWV0YWRhdGEoY2FjaGVLZXkpO1xyXG4gICAgICAgICAgICBpZiAoIWVudGl0eSkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmIChlbnRpdHkuYWxpYXNlcy5pbmRleE9mKGhvc3QpID09PSAtMSkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIG1hdGNoZWRFbnRpdHkgPSBlbnRpdHk7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgcmV0dXJuIG1hdGNoZWRFbnRpdHk7XHJcbiAgICB9XHJcbiAgICAvKipcclxuICAgICAqIFJlbW92ZXMgYWxsIGFjY291bnRzIGFuZCByZWxhdGVkIHRva2VucyBmcm9tIGNhY2hlLlxyXG4gICAgICovXHJcbiAgICBhc3luYyByZW1vdmVBbGxBY2NvdW50cygpIHtcclxuICAgICAgICBjb25zdCBhbGxBY2NvdW50S2V5cyA9IHRoaXMuZ2V0QWNjb3VudEtleXMoKTtcclxuICAgICAgICBjb25zdCByZW1vdmVkQWNjb3VudHMgPSBbXTtcclxuICAgICAgICBhbGxBY2NvdW50S2V5cy5mb3JFYWNoKChjYWNoZUtleSkgPT4ge1xyXG4gICAgICAgICAgICByZW1vdmVkQWNjb3VudHMucHVzaCh0aGlzLnJlbW92ZUFjY291bnQoY2FjaGVLZXkpKTtcclxuICAgICAgICB9KTtcclxuICAgICAgICBhd2FpdCBQcm9taXNlLmFsbChyZW1vdmVkQWNjb3VudHMpO1xyXG4gICAgfVxyXG4gICAgLyoqXHJcbiAgICAgKiBSZW1vdmVzIHRoZSBhY2NvdW50IGFuZCByZWxhdGVkIHRva2VucyBmb3IgYSBnaXZlbiBhY2NvdW50IGtleVxyXG4gICAgICogQHBhcmFtIGFjY291bnRcclxuICAgICAqL1xyXG4gICAgYXN5bmMgcmVtb3ZlQWNjb3VudChhY2NvdW50S2V5KSB7XHJcbiAgICAgICAgY29uc3QgYWNjb3VudCA9IHRoaXMuZ2V0QWNjb3VudChhY2NvdW50S2V5LCB0aGlzLmNvbW1vbkxvZ2dlcik7XHJcbiAgICAgICAgaWYgKCFhY2NvdW50KSB7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgYXdhaXQgdGhpcy5yZW1vdmVBY2NvdW50Q29udGV4dChhY2NvdW50KTtcclxuICAgICAgICB0aGlzLnJlbW92ZUl0ZW0oYWNjb3VudEtleSk7XHJcbiAgICB9XHJcbiAgICAvKipcclxuICAgICAqIFJlbW92ZXMgY3JlZGVudGlhbHMgYXNzb2NpYXRlZCB3aXRoIHRoZSBwcm92aWRlZCBhY2NvdW50XHJcbiAgICAgKiBAcGFyYW0gYWNjb3VudFxyXG4gICAgICovXHJcbiAgICBhc3luYyByZW1vdmVBY2NvdW50Q29udGV4dChhY2NvdW50KSB7XHJcbiAgICAgICAgY29uc3QgYWxsVG9rZW5LZXlzID0gdGhpcy5nZXRUb2tlbktleXMoKTtcclxuICAgICAgICBjb25zdCBhY2NvdW50SWQgPSBhY2NvdW50LmdlbmVyYXRlQWNjb3VudElkKCk7XHJcbiAgICAgICAgY29uc3QgcmVtb3ZlZENyZWRlbnRpYWxzID0gW107XHJcbiAgICAgICAgYWxsVG9rZW5LZXlzLmlkVG9rZW4uZm9yRWFjaCgoa2V5KSA9PiB7XHJcbiAgICAgICAgICAgIGlmIChrZXkuaW5kZXhPZihhY2NvdW50SWQpID09PSAwKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnJlbW92ZUlkVG9rZW4oa2V5KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIGFsbFRva2VuS2V5cy5hY2Nlc3NUb2tlbi5mb3JFYWNoKChrZXkpID0+IHtcclxuICAgICAgICAgICAgaWYgKGtleS5pbmRleE9mKGFjY291bnRJZCkgPT09IDApIHtcclxuICAgICAgICAgICAgICAgIHJlbW92ZWRDcmVkZW50aWFscy5wdXNoKHRoaXMucmVtb3ZlQWNjZXNzVG9rZW4oa2V5KSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgICAgICBhbGxUb2tlbktleXMucmVmcmVzaFRva2VuLmZvckVhY2goKGtleSkgPT4ge1xyXG4gICAgICAgICAgICBpZiAoa2V5LmluZGV4T2YoYWNjb3VudElkKSA9PT0gMCkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5yZW1vdmVSZWZyZXNoVG9rZW4oa2V5KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIGF3YWl0IFByb21pc2UuYWxsKHJlbW92ZWRDcmVkZW50aWFscyk7XHJcbiAgICB9XHJcbiAgICAvKipcclxuICAgICAqIE1pZ3JhdGVzIGEgc2luZ2xlLXRlbmFudCBhY2NvdW50IGFuZCBhbGwgaXQncyBhc3NvY2lhdGVkIGFsdGVybmF0ZSBjcm9zcy10ZW5hbnQgYWNjb3VudCBvYmplY3RzIGluIHRoZVxyXG4gICAgICogY2FjaGUgaW50byBhIGNvbmRlbnNlZCBtdWx0aS10ZW5hbnQgYWNjb3VudCBvYmplY3Qgd2l0aCB0ZW5hbnQgcHJvZmlsZXMuXHJcbiAgICAgKiBAcGFyYW0gYWNjb3VudEtleVxyXG4gICAgICogQHBhcmFtIGFjY291bnRFbnRpdHlcclxuICAgICAqIEBwYXJhbSBsb2dnZXJcclxuICAgICAqIEByZXR1cm5zXHJcbiAgICAgKi9cclxuICAgIHVwZGF0ZU91dGRhdGVkQ2FjaGVkQWNjb3VudChhY2NvdW50S2V5LCBhY2NvdW50RW50aXR5LCBsb2dnZXIpIHtcclxuICAgICAgICAvLyBPbmx5IHVwZGF0ZSBpZiBhY2NvdW50IGVudGl0eSBpcyBkZWZpbmVkIGFuZCBoYXMgbm8gdGVuYW50UHJvZmlsZXMgb2JqZWN0IChpcyBvdXRkYXRlZClcclxuICAgICAgICBpZiAoYWNjb3VudEVudGl0eSAmJiBhY2NvdW50RW50aXR5LmlzU2luZ2xlVGVuYW50KCkpIHtcclxuICAgICAgICAgICAgdGhpcy5jb21tb25Mb2dnZXI/LnZlcmJvc2UoXCJ1cGRhdGVPdXRkYXRlZENhY2hlZEFjY291bnQ6IEZvdW5kIGEgc2luZ2xlLXRlbmFudCAob3V0ZGF0ZWQpIGFjY291bnQgZW50aXR5IGluIHRoZSBjYWNoZSwgbWlncmF0aW5nIHRvIG11bHRpLXRlbmFudCBhY2NvdW50IGVudGl0eVwiKTtcclxuICAgICAgICAgICAgLy8gR2V0IGtleXMgb2YgYWxsIGFjY291bnRzIGJlbG9uZ2luZyB0byB1c2VyXHJcbiAgICAgICAgICAgIGNvbnN0IG1hdGNoaW5nQWNjb3VudEtleXMgPSB0aGlzLmdldEFjY291bnRLZXlzKCkuZmlsdGVyKChrZXkpID0+IHtcclxuICAgICAgICAgICAgICAgIHJldHVybiBrZXkuc3RhcnRzV2l0aChhY2NvdW50RW50aXR5LmhvbWVBY2NvdW50SWQpO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgLy8gR2V0IGFsbCBhY2NvdW50IGVudGl0aWVzIGJlbG9uZ2luZyB0byB1c2VyXHJcbiAgICAgICAgICAgIGNvbnN0IGFjY291bnRzVG9NZXJnZSA9IFtdO1xyXG4gICAgICAgICAgICBtYXRjaGluZ0FjY291bnRLZXlzLmZvckVhY2goKGtleSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgYWNjb3VudCA9IHRoaXMuZ2V0Q2FjaGVkQWNjb3VudEVudGl0eShrZXkpO1xyXG4gICAgICAgICAgICAgICAgaWYgKGFjY291bnQpIHtcclxuICAgICAgICAgICAgICAgICAgICBhY2NvdW50c1RvTWVyZ2UucHVzaChhY2NvdW50KTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIC8vIFNldCBiYXNlIGFjY291bnQgdG8gaG9tZSBhY2NvdW50IGlmIGF2YWlsYWJsZSwgYW55IGFjY291bnQgaWYgbm90XHJcbiAgICAgICAgICAgIGNvbnN0IGJhc2VBY2NvdW50ID0gYWNjb3VudHNUb01lcmdlLmZpbmQoKGFjY291bnQpID0+IHtcclxuICAgICAgICAgICAgICAgIHJldHVybiB0ZW5hbnRJZE1hdGNoZXNIb21lVGVuYW50KGFjY291bnQucmVhbG0sIGFjY291bnQuaG9tZUFjY291bnRJZCk7XHJcbiAgICAgICAgICAgIH0pIHx8IGFjY291bnRzVG9NZXJnZVswXTtcclxuICAgICAgICAgICAgLy8gUG9wdWxhdGUgdGVuYW50IHByb2ZpbGVzIGJ1aWx0IGZyb20gZWFjaCBhY2NvdW50IGVudGl0eSBiZWxvbmdpbmcgdG8gdGhlIHVzZXJcclxuICAgICAgICAgICAgYmFzZUFjY291bnQudGVuYW50UHJvZmlsZXMgPSBhY2NvdW50c1RvTWVyZ2UubWFwKChhY2NvdW50KSA9PiB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICAgICAgICAgIHRlbmFudElkOiBhY2NvdW50LnJlYWxtLFxyXG4gICAgICAgICAgICAgICAgICAgIGxvY2FsQWNjb3VudElkOiBhY2NvdW50LmxvY2FsQWNjb3VudElkLFxyXG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IGFjY291bnQubmFtZSxcclxuICAgICAgICAgICAgICAgICAgICBpc0hvbWVUZW5hbnQ6IHRlbmFudElkTWF0Y2hlc0hvbWVUZW5hbnQoYWNjb3VudC5yZWFsbSwgYWNjb3VudC5ob21lQWNjb3VudElkKSxcclxuICAgICAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICBjb25zdCB1cGRhdGVkQWNjb3VudCA9IENhY2hlTWFuYWdlci50b09iamVjdChuZXcgQWNjb3VudEVudGl0eSgpLCB7XHJcbiAgICAgICAgICAgICAgICAuLi5iYXNlQWNjb3VudCxcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIGNvbnN0IG5ld0FjY291bnRLZXkgPSB1cGRhdGVkQWNjb3VudC5nZW5lcmF0ZUFjY291bnRLZXkoKTtcclxuICAgICAgICAgICAgLy8gQ2xlYXIgY2FjaGUgb2YgbGVnYWN5IGFjY291bnQgb2JqZWN0cyB0aGF0IGhhdmUgYmVlbiBjb2xscHNlZCBpbnRvIHRlbmFudCBwcm9maWxlc1xyXG4gICAgICAgICAgICBtYXRjaGluZ0FjY291bnRLZXlzLmZvckVhY2goKGtleSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgaWYgKGtleSAhPT0gbmV3QWNjb3VudEtleSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMucmVtb3ZlT3V0ZGF0ZWRBY2NvdW50KGFjY291bnRLZXkpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgLy8gQ2FjaGUgdXBkYXRlZCBhY2NvdW50IG9iamVjdFxyXG4gICAgICAgICAgICB0aGlzLnNldEFjY291bnQodXBkYXRlZEFjY291bnQpO1xyXG4gICAgICAgICAgICBsb2dnZXI/LnZlcmJvc2UoXCJVcGRhdGVkIGFuIG91dGRhdGVkIGFjY291bnQgZW50aXR5IGluIHRoZSBjYWNoZVwiKTtcclxuICAgICAgICAgICAgcmV0dXJuIHVwZGF0ZWRBY2NvdW50O1xyXG4gICAgICAgIH1cclxuICAgICAgICAvLyBObyB1cGRhdGUgaXMgbmVjZXNzYXJ5XHJcbiAgICAgICAgcmV0dXJuIGFjY291bnRFbnRpdHk7XHJcbiAgICB9XHJcbiAgICAvKipcclxuICAgICAqIHJldHVybnMgYSBib29sZWFuIGlmIHRoZSBnaXZlbiBjcmVkZW50aWFsIGlzIHJlbW92ZWRcclxuICAgICAqIEBwYXJhbSBjcmVkZW50aWFsXHJcbiAgICAgKi9cclxuICAgIGFzeW5jIHJlbW92ZUFjY2Vzc1Rva2VuKGtleSkge1xyXG4gICAgICAgIGNvbnN0IGNyZWRlbnRpYWwgPSB0aGlzLmdldEFjY2Vzc1Rva2VuQ3JlZGVudGlhbChrZXkpO1xyXG4gICAgICAgIGlmICghY3JlZGVudGlhbCkge1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIC8vIFJlbW92ZSBUb2tlbiBCaW5kaW5nIEtleSBmcm9tIGtleSBzdG9yZSBmb3IgUG9QIFRva2VucyBDcmVkZW50aWFsc1xyXG4gICAgICAgIGlmIChjcmVkZW50aWFsLmNyZWRlbnRpYWxUeXBlLnRvTG93ZXJDYXNlKCkgPT09XHJcbiAgICAgICAgICAgIENyZWRlbnRpYWxUeXBlLkFDQ0VTU19UT0tFTl9XSVRIX0FVVEhfU0NIRU1FLnRvTG93ZXJDYXNlKCkpIHtcclxuICAgICAgICAgICAgaWYgKGNyZWRlbnRpYWwudG9rZW5UeXBlID09PSBBdXRoZW50aWNhdGlvblNjaGVtZS5QT1ApIHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGFjY2Vzc1Rva2VuV2l0aEF1dGhTY2hlbWVFbnRpdHkgPSBjcmVkZW50aWFsO1xyXG4gICAgICAgICAgICAgICAgY29uc3Qga2lkID0gYWNjZXNzVG9rZW5XaXRoQXV0aFNjaGVtZUVudGl0eS5rZXlJZDtcclxuICAgICAgICAgICAgICAgIGlmIChraWQpIHtcclxuICAgICAgICAgICAgICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLmNyeXB0b0ltcGwucmVtb3ZlVG9rZW5CaW5kaW5nS2V5KGtpZCk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIGNhdGNoIChlcnJvcikge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBjcmVhdGVDbGllbnRBdXRoRXJyb3IoYmluZGluZ0tleU5vdFJlbW92ZWQpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gdGhpcy5yZW1vdmVJdGVtKGtleSk7XHJcbiAgICB9XHJcbiAgICAvKipcclxuICAgICAqIFJlbW92ZXMgYWxsIGFwcCBtZXRhZGF0YSBvYmplY3RzIGZyb20gY2FjaGUuXHJcbiAgICAgKi9cclxuICAgIHJlbW92ZUFwcE1ldGFkYXRhKCkge1xyXG4gICAgICAgIGNvbnN0IGFsbENhY2hlS2V5cyA9IHRoaXMuZ2V0S2V5cygpO1xyXG4gICAgICAgIGFsbENhY2hlS2V5cy5mb3JFYWNoKChjYWNoZUtleSkgPT4ge1xyXG4gICAgICAgICAgICBpZiAodGhpcy5pc0FwcE1ldGFkYXRhKGNhY2hlS2V5KSkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5yZW1vdmVJdGVtKGNhY2hlS2V5KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgfVxyXG4gICAgLyoqXHJcbiAgICAgKiBSZXRyaWV2ZSBBY2NvdW50RW50aXR5IGZyb20gY2FjaGVcclxuICAgICAqIEBwYXJhbSBhY2NvdW50XHJcbiAgICAgKi9cclxuICAgIHJlYWRBY2NvdW50RnJvbUNhY2hlKGFjY291bnQpIHtcclxuICAgICAgICBjb25zdCBhY2NvdW50S2V5ID0gQWNjb3VudEVudGl0eS5nZW5lcmF0ZUFjY291bnRDYWNoZUtleShhY2NvdW50KTtcclxuICAgICAgICByZXR1cm4gdGhpcy5nZXRBY2NvdW50KGFjY291bnRLZXksIHRoaXMuY29tbW9uTG9nZ2VyKTtcclxuICAgIH1cclxuICAgIC8qKlxyXG4gICAgICogUmV0cmlldmUgSWRUb2tlbkVudGl0eSBmcm9tIGNhY2hlXHJcbiAgICAgKiBAcGFyYW0gYWNjb3VudCB7QWNjb3VudEluZm99XHJcbiAgICAgKiBAcGFyYW0gdG9rZW5LZXlzIHs/VG9rZW5LZXlzfVxyXG4gICAgICogQHBhcmFtIHRhcmdldFJlYWxtIHs/c3RyaW5nfVxyXG4gICAgICogQHBhcmFtIHBlcmZvcm1hbmNlQ2xpZW50IHs/SVBlcmZvcm1hbmNlQ2xpZW50fVxyXG4gICAgICogQHBhcmFtIGNvcnJlbGF0aW9uSWQgez9zdHJpbmd9XHJcbiAgICAgKi9cclxuICAgIGdldElkVG9rZW4oYWNjb3VudCwgdG9rZW5LZXlzLCB0YXJnZXRSZWFsbSwgcGVyZm9ybWFuY2VDbGllbnQsIGNvcnJlbGF0aW9uSWQpIHtcclxuICAgICAgICB0aGlzLmNvbW1vbkxvZ2dlci50cmFjZShcIkNhY2hlTWFuYWdlciAtIGdldElkVG9rZW4gY2FsbGVkXCIpO1xyXG4gICAgICAgIGNvbnN0IGlkVG9rZW5GaWx0ZXIgPSB7XHJcbiAgICAgICAgICAgIGhvbWVBY2NvdW50SWQ6IGFjY291bnQuaG9tZUFjY291bnRJZCxcclxuICAgICAgICAgICAgZW52aXJvbm1lbnQ6IGFjY291bnQuZW52aXJvbm1lbnQsXHJcbiAgICAgICAgICAgIGNyZWRlbnRpYWxUeXBlOiBDcmVkZW50aWFsVHlwZS5JRF9UT0tFTixcclxuICAgICAgICAgICAgY2xpZW50SWQ6IHRoaXMuY2xpZW50SWQsXHJcbiAgICAgICAgICAgIHJlYWxtOiB0YXJnZXRSZWFsbSxcclxuICAgICAgICB9O1xyXG4gICAgICAgIGNvbnN0IGlkVG9rZW5NYXAgPSB0aGlzLmdldElkVG9rZW5zQnlGaWx0ZXIoaWRUb2tlbkZpbHRlciwgdG9rZW5LZXlzKTtcclxuICAgICAgICBjb25zdCBudW1JZFRva2VucyA9IGlkVG9rZW5NYXAuc2l6ZTtcclxuICAgICAgICBpZiAobnVtSWRUb2tlbnMgPCAxKSB7XHJcbiAgICAgICAgICAgIHRoaXMuY29tbW9uTG9nZ2VyLmluZm8oXCJDYWNoZU1hbmFnZXI6Z2V0SWRUb2tlbiAtIE5vIHRva2VuIGZvdW5kXCIpO1xyXG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSBpZiAobnVtSWRUb2tlbnMgPiAxKSB7XHJcbiAgICAgICAgICAgIGxldCB0b2tlbnNUb0JlUmVtb3ZlZCA9IGlkVG9rZW5NYXA7XHJcbiAgICAgICAgICAgIC8vIE11bHRpcGxlIHRlbmFudCBwcm9maWxlcyBhbmQgbm8gdGVuYW50IHNwZWNpZmllZCwgcGljayBob21lIGFjY291bnRcclxuICAgICAgICAgICAgaWYgKCF0YXJnZXRSZWFsbSkge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgaG9tZUlkVG9rZW5NYXAgPSBuZXcgTWFwKCk7XHJcbiAgICAgICAgICAgICAgICBpZFRva2VuTWFwLmZvckVhY2goKGlkVG9rZW4sIGtleSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChpZFRva2VuLnJlYWxtID09PSBhY2NvdW50LnRlbmFudElkKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGhvbWVJZFRva2VuTWFwLnNldChrZXksIGlkVG9rZW4pO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgY29uc3QgbnVtSG9tZUlkVG9rZW5zID0gaG9tZUlkVG9rZW5NYXAuc2l6ZTtcclxuICAgICAgICAgICAgICAgIGlmIChudW1Ib21lSWRUb2tlbnMgPCAxKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5jb21tb25Mb2dnZXIuaW5mbyhcIkNhY2hlTWFuYWdlcjpnZXRJZFRva2VuIC0gTXVsdGlwbGUgSUQgdG9rZW5zIGZvdW5kIGZvciBhY2NvdW50IGJ1dCBub25lIG1hdGNoIGFjY291bnQgZW50aXR5IHRlbmFudCBpZCwgcmV0dXJuaW5nIGZpcnN0IHJlc3VsdFwiKTtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gaWRUb2tlbk1hcC52YWx1ZXMoKS5uZXh0KCkudmFsdWU7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBlbHNlIGlmIChudW1Ib21lSWRUb2tlbnMgPT09IDEpIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmNvbW1vbkxvZ2dlci5pbmZvKFwiQ2FjaGVNYW5hZ2VyOmdldElkVG9rZW4gLSBNdWx0aXBsZSBJRCB0b2tlbnMgZm91bmQgZm9yIGFjY291bnQsIGRlZmF1bHRpbmcgdG8gaG9tZSB0ZW5hbnQgcHJvZmlsZVwiKTtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gaG9tZUlkVG9rZW5NYXAudmFsdWVzKCkubmV4dCgpLnZhbHVlO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgLy8gTXVsdGlwbGUgSUQgdG9rZW5zIGZvciBob21lIHRlbmFudCBwcm9maWxlLCByZW1vdmUgYWxsIGFuZCByZXR1cm4gbnVsbFxyXG4gICAgICAgICAgICAgICAgICAgIHRva2Vuc1RvQmVSZW1vdmVkID0gaG9tZUlkVG9rZW5NYXA7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgLy8gTXVsdGlwbGUgdG9rZW5zIGZvciBhIHNpbmdsZSB0ZW5hbnQgcHJvZmlsZSwgcmVtb3ZlIGFsbCBhbmQgcmV0dXJuIG51bGxcclxuICAgICAgICAgICAgdGhpcy5jb21tb25Mb2dnZXIuaW5mbyhcIkNhY2hlTWFuYWdlcjpnZXRJZFRva2VuIC0gTXVsdGlwbGUgbWF0Y2hpbmcgSUQgdG9rZW5zIGZvdW5kLCBjbGVhcmluZyB0aGVtXCIpO1xyXG4gICAgICAgICAgICB0b2tlbnNUb0JlUmVtb3ZlZC5mb3JFYWNoKChpZFRva2VuLCBrZXkpID0+IHtcclxuICAgICAgICAgICAgICAgIHRoaXMucmVtb3ZlSWRUb2tlbihrZXkpO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgaWYgKHBlcmZvcm1hbmNlQ2xpZW50ICYmIGNvcnJlbGF0aW9uSWQpIHtcclxuICAgICAgICAgICAgICAgIHBlcmZvcm1hbmNlQ2xpZW50LmFkZEZpZWxkcyh7IG11bHRpTWF0Y2hlZElEOiBpZFRva2VuTWFwLnNpemUgfSwgY29ycmVsYXRpb25JZCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuY29tbW9uTG9nZ2VyLmluZm8oXCJDYWNoZU1hbmFnZXI6Z2V0SWRUb2tlbiAtIFJldHVybmluZyBJRCB0b2tlblwiKTtcclxuICAgICAgICByZXR1cm4gaWRUb2tlbk1hcC52YWx1ZXMoKS5uZXh0KCkudmFsdWU7XHJcbiAgICB9XHJcbiAgICAvKipcclxuICAgICAqIEdldHMgYWxsIGlkVG9rZW5zIG1hdGNoaW5nIHRoZSBnaXZlbiBmaWx0ZXJcclxuICAgICAqIEBwYXJhbSBmaWx0ZXJcclxuICAgICAqIEByZXR1cm5zXHJcbiAgICAgKi9cclxuICAgIGdldElkVG9rZW5zQnlGaWx0ZXIoZmlsdGVyLCB0b2tlbktleXMpIHtcclxuICAgICAgICBjb25zdCBpZFRva2VuS2V5cyA9ICh0b2tlbktleXMgJiYgdG9rZW5LZXlzLmlkVG9rZW4pIHx8IHRoaXMuZ2V0VG9rZW5LZXlzKCkuaWRUb2tlbjtcclxuICAgICAgICBjb25zdCBpZFRva2VucyA9IG5ldyBNYXAoKTtcclxuICAgICAgICBpZFRva2VuS2V5cy5mb3JFYWNoKChrZXkpID0+IHtcclxuICAgICAgICAgICAgaWYgKCF0aGlzLmlkVG9rZW5LZXlNYXRjaGVzRmlsdGVyKGtleSwge1xyXG4gICAgICAgICAgICAgICAgY2xpZW50SWQ6IHRoaXMuY2xpZW50SWQsXHJcbiAgICAgICAgICAgICAgICAuLi5maWx0ZXIsXHJcbiAgICAgICAgICAgIH0pKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgY29uc3QgaWRUb2tlbiA9IHRoaXMuZ2V0SWRUb2tlbkNyZWRlbnRpYWwoa2V5KTtcclxuICAgICAgICAgICAgaWYgKGlkVG9rZW4gJiYgdGhpcy5jcmVkZW50aWFsTWF0Y2hlc0ZpbHRlcihpZFRva2VuLCBmaWx0ZXIpKSB7XHJcbiAgICAgICAgICAgICAgICBpZFRva2Vucy5zZXQoa2V5LCBpZFRva2VuKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIHJldHVybiBpZFRva2VucztcclxuICAgIH1cclxuICAgIC8qKlxyXG4gICAgICogVmFsaWRhdGUgdGhlIGNhY2hlIGtleSBhZ2FpbnN0IGZpbHRlciBiZWZvcmUgcmV0cmlldmluZyBhbmQgcGFyc2luZyBjYWNoZSB2YWx1ZVxyXG4gICAgICogQHBhcmFtIGtleVxyXG4gICAgICogQHBhcmFtIGZpbHRlclxyXG4gICAgICogQHJldHVybnNcclxuICAgICAqL1xyXG4gICAgaWRUb2tlbktleU1hdGNoZXNGaWx0ZXIoaW5wdXRLZXksIGZpbHRlcikge1xyXG4gICAgICAgIGNvbnN0IGtleSA9IGlucHV0S2V5LnRvTG93ZXJDYXNlKCk7XHJcbiAgICAgICAgaWYgKGZpbHRlci5jbGllbnRJZCAmJlxyXG4gICAgICAgICAgICBrZXkuaW5kZXhPZihmaWx0ZXIuY2xpZW50SWQudG9Mb3dlckNhc2UoKSkgPT09IC0xKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKGZpbHRlci5ob21lQWNjb3VudElkICYmXHJcbiAgICAgICAgICAgIGtleS5pbmRleE9mKGZpbHRlci5ob21lQWNjb3VudElkLnRvTG93ZXJDYXNlKCkpID09PSAtMSkge1xyXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgfVxyXG4gICAgLyoqXHJcbiAgICAgKiBSZW1vdmVzIGlkVG9rZW4gZnJvbSB0aGUgY2FjaGVcclxuICAgICAqIEBwYXJhbSBrZXlcclxuICAgICAqL1xyXG4gICAgcmVtb3ZlSWRUb2tlbihrZXkpIHtcclxuICAgICAgICB0aGlzLnJlbW92ZUl0ZW0oa2V5KTtcclxuICAgIH1cclxuICAgIC8qKlxyXG4gICAgICogUmVtb3ZlcyByZWZyZXNoIHRva2VuIGZyb20gdGhlIGNhY2hlXHJcbiAgICAgKiBAcGFyYW0ga2V5XHJcbiAgICAgKi9cclxuICAgIHJlbW92ZVJlZnJlc2hUb2tlbihrZXkpIHtcclxuICAgICAgICB0aGlzLnJlbW92ZUl0ZW0oa2V5KTtcclxuICAgIH1cclxuICAgIC8qKlxyXG4gICAgICogUmV0cmlldmUgQWNjZXNzVG9rZW5FbnRpdHkgZnJvbSBjYWNoZVxyXG4gICAgICogQHBhcmFtIGFjY291bnQge0FjY291bnRJbmZvfVxyXG4gICAgICogQHBhcmFtIHJlcXVlc3Qge0Jhc2VBdXRoUmVxdWVzdH1cclxuICAgICAqIEBwYXJhbSB0b2tlbktleXMgez9Ub2tlbktleXN9XHJcbiAgICAgKiBAcGFyYW0gcGVyZm9ybWFuY2VDbGllbnQgez9JUGVyZm9ybWFuY2VDbGllbnR9XHJcbiAgICAgKiBAcGFyYW0gY29ycmVsYXRpb25JZCB7P3N0cmluZ31cclxuICAgICAqL1xyXG4gICAgZ2V0QWNjZXNzVG9rZW4oYWNjb3VudCwgcmVxdWVzdCwgdG9rZW5LZXlzLCB0YXJnZXRSZWFsbSwgcGVyZm9ybWFuY2VDbGllbnQsIGNvcnJlbGF0aW9uSWQpIHtcclxuICAgICAgICB0aGlzLmNvbW1vbkxvZ2dlci50cmFjZShcIkNhY2hlTWFuYWdlciAtIGdldEFjY2Vzc1Rva2VuIGNhbGxlZFwiKTtcclxuICAgICAgICBjb25zdCBzY29wZXMgPSBTY29wZVNldC5jcmVhdGVTZWFyY2hTY29wZXMocmVxdWVzdC5zY29wZXMpO1xyXG4gICAgICAgIGNvbnN0IGF1dGhTY2hlbWUgPSByZXF1ZXN0LmF1dGhlbnRpY2F0aW9uU2NoZW1lIHx8IEF1dGhlbnRpY2F0aW9uU2NoZW1lLkJFQVJFUjtcclxuICAgICAgICAvKlxyXG4gICAgICAgICAqIERpc3Rpbmd1aXNoIGJldHdlZW4gQmVhcmVyIGFuZCBQb1AvU1NIIHRva2VuIGNhY2hlIHR5cGVzXHJcbiAgICAgICAgICogQ2FzdCB0byBsb3dlcmNhc2UgdG8gaGFuZGxlIFwiYmVhcmVyXCIgZnJvbSBBREZTXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgY29uc3QgY3JlZGVudGlhbFR5cGUgPSBhdXRoU2NoZW1lICYmXHJcbiAgICAgICAgICAgIGF1dGhTY2hlbWUudG9Mb3dlckNhc2UoKSAhPT1cclxuICAgICAgICAgICAgICAgIEF1dGhlbnRpY2F0aW9uU2NoZW1lLkJFQVJFUi50b0xvd2VyQ2FzZSgpXHJcbiAgICAgICAgICAgID8gQ3JlZGVudGlhbFR5cGUuQUNDRVNTX1RPS0VOX1dJVEhfQVVUSF9TQ0hFTUVcclxuICAgICAgICAgICAgOiBDcmVkZW50aWFsVHlwZS5BQ0NFU1NfVE9LRU47XHJcbiAgICAgICAgY29uc3QgYWNjZXNzVG9rZW5GaWx0ZXIgPSB7XHJcbiAgICAgICAgICAgIGhvbWVBY2NvdW50SWQ6IGFjY291bnQuaG9tZUFjY291bnRJZCxcclxuICAgICAgICAgICAgZW52aXJvbm1lbnQ6IGFjY291bnQuZW52aXJvbm1lbnQsXHJcbiAgICAgICAgICAgIGNyZWRlbnRpYWxUeXBlOiBjcmVkZW50aWFsVHlwZSxcclxuICAgICAgICAgICAgY2xpZW50SWQ6IHRoaXMuY2xpZW50SWQsXHJcbiAgICAgICAgICAgIHJlYWxtOiB0YXJnZXRSZWFsbSB8fCBhY2NvdW50LnRlbmFudElkLFxyXG4gICAgICAgICAgICB0YXJnZXQ6IHNjb3BlcyxcclxuICAgICAgICAgICAgdG9rZW5UeXBlOiBhdXRoU2NoZW1lLFxyXG4gICAgICAgICAgICBrZXlJZDogcmVxdWVzdC5zc2hLaWQsXHJcbiAgICAgICAgICAgIHJlcXVlc3RlZENsYWltc0hhc2g6IHJlcXVlc3QucmVxdWVzdGVkQ2xhaW1zSGFzaCxcclxuICAgICAgICB9O1xyXG4gICAgICAgIGNvbnN0IGFjY2Vzc1Rva2VuS2V5cyA9ICh0b2tlbktleXMgJiYgdG9rZW5LZXlzLmFjY2Vzc1Rva2VuKSB8fFxyXG4gICAgICAgICAgICB0aGlzLmdldFRva2VuS2V5cygpLmFjY2Vzc1Rva2VuO1xyXG4gICAgICAgIGNvbnN0IGFjY2Vzc1Rva2VucyA9IFtdO1xyXG4gICAgICAgIGFjY2Vzc1Rva2VuS2V5cy5mb3JFYWNoKChrZXkpID0+IHtcclxuICAgICAgICAgICAgLy8gVmFsaWRhdGUga2V5XHJcbiAgICAgICAgICAgIGlmICh0aGlzLmFjY2Vzc1Rva2VuS2V5TWF0Y2hlc0ZpbHRlcihrZXksIGFjY2Vzc1Rva2VuRmlsdGVyLCB0cnVlKSkge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgYWNjZXNzVG9rZW4gPSB0aGlzLmdldEFjY2Vzc1Rva2VuQ3JlZGVudGlhbChrZXkpO1xyXG4gICAgICAgICAgICAgICAgLy8gVmFsaWRhdGUgdmFsdWVcclxuICAgICAgICAgICAgICAgIGlmIChhY2Nlc3NUb2tlbiAmJlxyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuY3JlZGVudGlhbE1hdGNoZXNGaWx0ZXIoYWNjZXNzVG9rZW4sIGFjY2Vzc1Rva2VuRmlsdGVyKSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGFjY2Vzc1Rva2Vucy5wdXNoKGFjY2Vzc1Rva2VuKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIGNvbnN0IG51bUFjY2Vzc1Rva2VucyA9IGFjY2Vzc1Rva2Vucy5sZW5ndGg7XHJcbiAgICAgICAgaWYgKG51bUFjY2Vzc1Rva2VucyA8IDEpIHtcclxuICAgICAgICAgICAgdGhpcy5jb21tb25Mb2dnZXIuaW5mbyhcIkNhY2hlTWFuYWdlcjpnZXRBY2Nlc3NUb2tlbiAtIE5vIHRva2VuIGZvdW5kXCIpO1xyXG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSBpZiAobnVtQWNjZXNzVG9rZW5zID4gMSkge1xyXG4gICAgICAgICAgICB0aGlzLmNvbW1vbkxvZ2dlci5pbmZvKFwiQ2FjaGVNYW5hZ2VyOmdldEFjY2Vzc1Rva2VuIC0gTXVsdGlwbGUgYWNjZXNzIHRva2VucyBmb3VuZCwgY2xlYXJpbmcgdGhlbVwiKTtcclxuICAgICAgICAgICAgYWNjZXNzVG9rZW5zLmZvckVhY2goKGFjY2Vzc1Rva2VuKSA9PiB7XHJcbiAgICAgICAgICAgICAgICB2b2lkIHRoaXMucmVtb3ZlQWNjZXNzVG9rZW4oZ2VuZXJhdGVDcmVkZW50aWFsS2V5KGFjY2Vzc1Rva2VuKSk7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICBpZiAocGVyZm9ybWFuY2VDbGllbnQgJiYgY29ycmVsYXRpb25JZCkge1xyXG4gICAgICAgICAgICAgICAgcGVyZm9ybWFuY2VDbGllbnQuYWRkRmllbGRzKHsgbXVsdGlNYXRjaGVkQVQ6IGFjY2Vzc1Rva2Vucy5sZW5ndGggfSwgY29ycmVsYXRpb25JZCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuY29tbW9uTG9nZ2VyLmluZm8oXCJDYWNoZU1hbmFnZXI6Z2V0QWNjZXNzVG9rZW4gLSBSZXR1cm5pbmcgYWNjZXNzIHRva2VuXCIpO1xyXG4gICAgICAgIHJldHVybiBhY2Nlc3NUb2tlbnNbMF07XHJcbiAgICB9XHJcbiAgICAvKipcclxuICAgICAqIFZhbGlkYXRlIHRoZSBjYWNoZSBrZXkgYWdhaW5zdCBmaWx0ZXIgYmVmb3JlIHJldHJpZXZpbmcgYW5kIHBhcnNpbmcgY2FjaGUgdmFsdWVcclxuICAgICAqIEBwYXJhbSBrZXlcclxuICAgICAqIEBwYXJhbSBmaWx0ZXJcclxuICAgICAqIEBwYXJhbSBrZXlNdXN0Q29udGFpbkFsbFNjb3Blc1xyXG4gICAgICogQHJldHVybnNcclxuICAgICAqL1xyXG4gICAgYWNjZXNzVG9rZW5LZXlNYXRjaGVzRmlsdGVyKGlucHV0S2V5LCBmaWx0ZXIsIGtleU11c3RDb250YWluQWxsU2NvcGVzKSB7XHJcbiAgICAgICAgY29uc3Qga2V5ID0gaW5wdXRLZXkudG9Mb3dlckNhc2UoKTtcclxuICAgICAgICBpZiAoZmlsdGVyLmNsaWVudElkICYmXHJcbiAgICAgICAgICAgIGtleS5pbmRleE9mKGZpbHRlci5jbGllbnRJZC50b0xvd2VyQ2FzZSgpKSA9PT0gLTEpIHtcclxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoZmlsdGVyLmhvbWVBY2NvdW50SWQgJiZcclxuICAgICAgICAgICAga2V5LmluZGV4T2YoZmlsdGVyLmhvbWVBY2NvdW50SWQudG9Mb3dlckNhc2UoKSkgPT09IC0xKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKGZpbHRlci5yZWFsbSAmJiBrZXkuaW5kZXhPZihmaWx0ZXIucmVhbG0udG9Mb3dlckNhc2UoKSkgPT09IC0xKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKGZpbHRlci5yZXF1ZXN0ZWRDbGFpbXNIYXNoICYmXHJcbiAgICAgICAgICAgIGtleS5pbmRleE9mKGZpbHRlci5yZXF1ZXN0ZWRDbGFpbXNIYXNoLnRvTG93ZXJDYXNlKCkpID09PSAtMSkge1xyXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChmaWx0ZXIudGFyZ2V0KSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHNjb3BlcyA9IGZpbHRlci50YXJnZXQuYXNBcnJheSgpO1xyXG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHNjb3Blcy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICAgICAgaWYgKGtleU11c3RDb250YWluQWxsU2NvcGVzICYmXHJcbiAgICAgICAgICAgICAgICAgICAgIWtleS5pbmNsdWRlcyhzY29wZXNbaV0udG9Mb3dlckNhc2UoKSkpIHtcclxuICAgICAgICAgICAgICAgICAgICAvLyBXaGVuIHBlcmZvcm1pbmcgYSBjYWNoZSBsb29rdXAgYSBtaXNzaW5nIHNjb3BlIHdvdWxkIGJlIGEgY2FjaGUgbWlzc1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGVsc2UgaWYgKCFrZXlNdXN0Q29udGFpbkFsbFNjb3BlcyAmJlxyXG4gICAgICAgICAgICAgICAgICAgIGtleS5pbmNsdWRlcyhzY29wZXNbaV0udG9Mb3dlckNhc2UoKSkpIHtcclxuICAgICAgICAgICAgICAgICAgICAvLyBXaGVuIHBlcmZvcm1pbmcgYSBjYWNoZSB3cml0ZSwgYW55IHRva2VuIHdpdGggYSBzdWJzZXQgb2YgcmVxdWVzdGVkIHNjb3BlcyBzaG91bGQgYmUgcmVwbGFjZWRcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgIH1cclxuICAgIC8qKlxyXG4gICAgICogR2V0cyBhbGwgYWNjZXNzIHRva2VucyBtYXRjaGluZyB0aGUgZmlsdGVyXHJcbiAgICAgKiBAcGFyYW0gZmlsdGVyXHJcbiAgICAgKiBAcmV0dXJuc1xyXG4gICAgICovXHJcbiAgICBnZXRBY2Nlc3NUb2tlbnNCeUZpbHRlcihmaWx0ZXIpIHtcclxuICAgICAgICBjb25zdCB0b2tlbktleXMgPSB0aGlzLmdldFRva2VuS2V5cygpO1xyXG4gICAgICAgIGNvbnN0IGFjY2Vzc1Rva2VucyA9IFtdO1xyXG4gICAgICAgIHRva2VuS2V5cy5hY2Nlc3NUb2tlbi5mb3JFYWNoKChrZXkpID0+IHtcclxuICAgICAgICAgICAgaWYgKCF0aGlzLmFjY2Vzc1Rva2VuS2V5TWF0Y2hlc0ZpbHRlcihrZXksIGZpbHRlciwgdHJ1ZSkpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBjb25zdCBhY2Nlc3NUb2tlbiA9IHRoaXMuZ2V0QWNjZXNzVG9rZW5DcmVkZW50aWFsKGtleSk7XHJcbiAgICAgICAgICAgIGlmIChhY2Nlc3NUb2tlbiAmJlxyXG4gICAgICAgICAgICAgICAgdGhpcy5jcmVkZW50aWFsTWF0Y2hlc0ZpbHRlcihhY2Nlc3NUb2tlbiwgZmlsdGVyKSkge1xyXG4gICAgICAgICAgICAgICAgYWNjZXNzVG9rZW5zLnB1c2goYWNjZXNzVG9rZW4pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgcmV0dXJuIGFjY2Vzc1Rva2VucztcclxuICAgIH1cclxuICAgIC8qKlxyXG4gICAgICogSGVscGVyIHRvIHJldHJpZXZlIHRoZSBhcHByb3ByaWF0ZSByZWZyZXNoIHRva2VuIGZyb20gY2FjaGVcclxuICAgICAqIEBwYXJhbSBhY2NvdW50IHtBY2NvdW50SW5mb31cclxuICAgICAqIEBwYXJhbSBmYW1pbHlSVCB7Ym9vbGVhbn1cclxuICAgICAqIEBwYXJhbSB0b2tlbktleXMgez9Ub2tlbktleXN9XHJcbiAgICAgKiBAcGFyYW0gcGVyZm9ybWFuY2VDbGllbnQgez9JUGVyZm9ybWFuY2VDbGllbnR9XHJcbiAgICAgKiBAcGFyYW0gY29ycmVsYXRpb25JZCB7P3N0cmluZ31cclxuICAgICAqL1xyXG4gICAgZ2V0UmVmcmVzaFRva2VuKGFjY291bnQsIGZhbWlseVJULCB0b2tlbktleXMsIHBlcmZvcm1hbmNlQ2xpZW50LCBjb3JyZWxhdGlvbklkKSB7XHJcbiAgICAgICAgdGhpcy5jb21tb25Mb2dnZXIudHJhY2UoXCJDYWNoZU1hbmFnZXIgLSBnZXRSZWZyZXNoVG9rZW4gY2FsbGVkXCIpO1xyXG4gICAgICAgIGNvbnN0IGlkID0gZmFtaWx5UlQgPyBUSEVfRkFNSUxZX0lEIDogdW5kZWZpbmVkO1xyXG4gICAgICAgIGNvbnN0IHJlZnJlc2hUb2tlbkZpbHRlciA9IHtcclxuICAgICAgICAgICAgaG9tZUFjY291bnRJZDogYWNjb3VudC5ob21lQWNjb3VudElkLFxyXG4gICAgICAgICAgICBlbnZpcm9ubWVudDogYWNjb3VudC5lbnZpcm9ubWVudCxcclxuICAgICAgICAgICAgY3JlZGVudGlhbFR5cGU6IENyZWRlbnRpYWxUeXBlLlJFRlJFU0hfVE9LRU4sXHJcbiAgICAgICAgICAgIGNsaWVudElkOiB0aGlzLmNsaWVudElkLFxyXG4gICAgICAgICAgICBmYW1pbHlJZDogaWQsXHJcbiAgICAgICAgfTtcclxuICAgICAgICBjb25zdCByZWZyZXNoVG9rZW5LZXlzID0gKHRva2VuS2V5cyAmJiB0b2tlbktleXMucmVmcmVzaFRva2VuKSB8fFxyXG4gICAgICAgICAgICB0aGlzLmdldFRva2VuS2V5cygpLnJlZnJlc2hUb2tlbjtcclxuICAgICAgICBjb25zdCByZWZyZXNoVG9rZW5zID0gW107XHJcbiAgICAgICAgcmVmcmVzaFRva2VuS2V5cy5mb3JFYWNoKChrZXkpID0+IHtcclxuICAgICAgICAgICAgLy8gVmFsaWRhdGUga2V5XHJcbiAgICAgICAgICAgIGlmICh0aGlzLnJlZnJlc2hUb2tlbktleU1hdGNoZXNGaWx0ZXIoa2V5LCByZWZyZXNoVG9rZW5GaWx0ZXIpKSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCByZWZyZXNoVG9rZW4gPSB0aGlzLmdldFJlZnJlc2hUb2tlbkNyZWRlbnRpYWwoa2V5KTtcclxuICAgICAgICAgICAgICAgIC8vIFZhbGlkYXRlIHZhbHVlXHJcbiAgICAgICAgICAgICAgICBpZiAocmVmcmVzaFRva2VuICYmXHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5jcmVkZW50aWFsTWF0Y2hlc0ZpbHRlcihyZWZyZXNoVG9rZW4sIHJlZnJlc2hUb2tlbkZpbHRlcikpIHtcclxuICAgICAgICAgICAgICAgICAgICByZWZyZXNoVG9rZW5zLnB1c2gocmVmcmVzaFRva2VuKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIGNvbnN0IG51bVJlZnJlc2hUb2tlbnMgPSByZWZyZXNoVG9rZW5zLmxlbmd0aDtcclxuICAgICAgICBpZiAobnVtUmVmcmVzaFRva2VucyA8IDEpIHtcclxuICAgICAgICAgICAgdGhpcy5jb21tb25Mb2dnZXIuaW5mbyhcIkNhY2hlTWFuYWdlcjpnZXRSZWZyZXNoVG9rZW4gLSBObyByZWZyZXNoIHRva2VuIGZvdW5kLlwiKTtcclxuICAgICAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIC8vIGFkZHJlc3MgdGhlIGVsc2UgY2FzZSBhZnRlciByZW1vdmUgZnVuY3Rpb25zIGFkZHJlc3MgZW52aXJvbm1lbnQgYWxpYXNlc1xyXG4gICAgICAgIGlmIChudW1SZWZyZXNoVG9rZW5zID4gMSAmJiBwZXJmb3JtYW5jZUNsaWVudCAmJiBjb3JyZWxhdGlvbklkKSB7XHJcbiAgICAgICAgICAgIHBlcmZvcm1hbmNlQ2xpZW50LmFkZEZpZWxkcyh7IG11bHRpTWF0Y2hlZFJUOiBudW1SZWZyZXNoVG9rZW5zIH0sIGNvcnJlbGF0aW9uSWQpO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLmNvbW1vbkxvZ2dlci5pbmZvKFwiQ2FjaGVNYW5hZ2VyOmdldFJlZnJlc2hUb2tlbiAtIHJldHVybmluZyByZWZyZXNoIHRva2VuXCIpO1xyXG4gICAgICAgIHJldHVybiByZWZyZXNoVG9rZW5zWzBdO1xyXG4gICAgfVxyXG4gICAgLyoqXHJcbiAgICAgKiBWYWxpZGF0ZSB0aGUgY2FjaGUga2V5IGFnYWluc3QgZmlsdGVyIGJlZm9yZSByZXRyaWV2aW5nIGFuZCBwYXJzaW5nIGNhY2hlIHZhbHVlXHJcbiAgICAgKiBAcGFyYW0ga2V5XHJcbiAgICAgKiBAcGFyYW0gZmlsdGVyXHJcbiAgICAgKi9cclxuICAgIHJlZnJlc2hUb2tlbktleU1hdGNoZXNGaWx0ZXIoaW5wdXRLZXksIGZpbHRlcikge1xyXG4gICAgICAgIGNvbnN0IGtleSA9IGlucHV0S2V5LnRvTG93ZXJDYXNlKCk7XHJcbiAgICAgICAgaWYgKGZpbHRlci5mYW1pbHlJZCAmJlxyXG4gICAgICAgICAgICBrZXkuaW5kZXhPZihmaWx0ZXIuZmFtaWx5SWQudG9Mb3dlckNhc2UoKSkgPT09IC0xKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgLy8gSWYgZmFtaWx5SWQgaXMgdXNlZCwgY2xpZW50SWQgaXMgbm90IGluIHRoZSBrZXlcclxuICAgICAgICBpZiAoIWZpbHRlci5mYW1pbHlJZCAmJlxyXG4gICAgICAgICAgICBmaWx0ZXIuY2xpZW50SWQgJiZcclxuICAgICAgICAgICAga2V5LmluZGV4T2YoZmlsdGVyLmNsaWVudElkLnRvTG93ZXJDYXNlKCkpID09PSAtMSkge1xyXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChmaWx0ZXIuaG9tZUFjY291bnRJZCAmJlxyXG4gICAgICAgICAgICBrZXkuaW5kZXhPZihmaWx0ZXIuaG9tZUFjY291bnRJZC50b0xvd2VyQ2FzZSgpKSA9PT0gLTEpIHtcclxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgIH1cclxuICAgIC8qKlxyXG4gICAgICogUmV0cmlldmUgQXBwTWV0YWRhdGFFbnRpdHkgZnJvbSBjYWNoZVxyXG4gICAgICovXHJcbiAgICByZWFkQXBwTWV0YWRhdGFGcm9tQ2FjaGUoZW52aXJvbm1lbnQpIHtcclxuICAgICAgICBjb25zdCBhcHBNZXRhZGF0YUZpbHRlciA9IHtcclxuICAgICAgICAgICAgZW52aXJvbm1lbnQsXHJcbiAgICAgICAgICAgIGNsaWVudElkOiB0aGlzLmNsaWVudElkLFxyXG4gICAgICAgIH07XHJcbiAgICAgICAgY29uc3QgYXBwTWV0YWRhdGEgPSB0aGlzLmdldEFwcE1ldGFkYXRhRmlsdGVyZWRCeShhcHBNZXRhZGF0YUZpbHRlcik7XHJcbiAgICAgICAgY29uc3QgYXBwTWV0YWRhdGFFbnRyaWVzID0gT2JqZWN0LmtleXMoYXBwTWV0YWRhdGEpLm1hcCgoa2V5KSA9PiBhcHBNZXRhZGF0YVtrZXldKTtcclxuICAgICAgICBjb25zdCBudW1BcHBNZXRhZGF0YSA9IGFwcE1ldGFkYXRhRW50cmllcy5sZW5ndGg7XHJcbiAgICAgICAgaWYgKG51bUFwcE1ldGFkYXRhIDwgMSkge1xyXG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSBpZiAobnVtQXBwTWV0YWRhdGEgPiAxKSB7XHJcbiAgICAgICAgICAgIHRocm93IGNyZWF0ZUNsaWVudEF1dGhFcnJvcihtdWx0aXBsZU1hdGNoaW5nQXBwTWV0YWRhdGEpO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gYXBwTWV0YWRhdGFFbnRyaWVzWzBdO1xyXG4gICAgfVxyXG4gICAgLyoqXHJcbiAgICAgKiBSZXR1cm4gdGhlIGZhbWlseV9pZCB2YWx1ZSBhc3NvY2lhdGVkICB3aXRoIEZPQ0lcclxuICAgICAqIEBwYXJhbSBlbnZpcm9ubWVudFxyXG4gICAgICogQHBhcmFtIGNsaWVudElkXHJcbiAgICAgKi9cclxuICAgIGlzQXBwTWV0YWRhdGFGT0NJKGVudmlyb25tZW50KSB7XHJcbiAgICAgICAgY29uc3QgYXBwTWV0YWRhdGEgPSB0aGlzLnJlYWRBcHBNZXRhZGF0YUZyb21DYWNoZShlbnZpcm9ubWVudCk7XHJcbiAgICAgICAgcmV0dXJuICEhKGFwcE1ldGFkYXRhICYmIGFwcE1ldGFkYXRhLmZhbWlseUlkID09PSBUSEVfRkFNSUxZX0lEKTtcclxuICAgIH1cclxuICAgIC8qKlxyXG4gICAgICogaGVscGVyIHRvIG1hdGNoIGFjY291bnQgaWRzXHJcbiAgICAgKiBAcGFyYW0gdmFsdWVcclxuICAgICAqIEBwYXJhbSBob21lQWNjb3VudElkXHJcbiAgICAgKi9cclxuICAgIG1hdGNoSG9tZUFjY291bnRJZChlbnRpdHksIGhvbWVBY2NvdW50SWQpIHtcclxuICAgICAgICByZXR1cm4gISEodHlwZW9mIGVudGl0eS5ob21lQWNjb3VudElkID09PSBcInN0cmluZ1wiICYmXHJcbiAgICAgICAgICAgIGhvbWVBY2NvdW50SWQgPT09IGVudGl0eS5ob21lQWNjb3VudElkKTtcclxuICAgIH1cclxuICAgIC8qKlxyXG4gICAgICogaGVscGVyIHRvIG1hdGNoIGFjY291bnQgaWRzXHJcbiAgICAgKiBAcGFyYW0gZW50aXR5XHJcbiAgICAgKiBAcGFyYW0gbG9jYWxBY2NvdW50SWRcclxuICAgICAqIEByZXR1cm5zXHJcbiAgICAgKi9cclxuICAgIG1hdGNoTG9jYWxBY2NvdW50SWRGcm9tVG9rZW5DbGFpbXModG9rZW5DbGFpbXMsIGxvY2FsQWNjb3VudElkKSB7XHJcbiAgICAgICAgY29uc3QgaWRUb2tlbkxvY2FsQWNjb3VudElkID0gdG9rZW5DbGFpbXMub2lkIHx8IHRva2VuQ2xhaW1zLnN1YjtcclxuICAgICAgICByZXR1cm4gbG9jYWxBY2NvdW50SWQgPT09IGlkVG9rZW5Mb2NhbEFjY291bnRJZDtcclxuICAgIH1cclxuICAgIG1hdGNoTG9jYWxBY2NvdW50SWRGcm9tVGVuYW50UHJvZmlsZSh0ZW5hbnRQcm9maWxlLCBsb2NhbEFjY291bnRJZCkge1xyXG4gICAgICAgIHJldHVybiB0ZW5hbnRQcm9maWxlLmxvY2FsQWNjb3VudElkID09PSBsb2NhbEFjY291bnRJZDtcclxuICAgIH1cclxuICAgIC8qKlxyXG4gICAgICogaGVscGVyIHRvIG1hdGNoIG5hbWVzXHJcbiAgICAgKiBAcGFyYW0gZW50aXR5XHJcbiAgICAgKiBAcGFyYW0gbmFtZVxyXG4gICAgICogQHJldHVybnMgdHJ1ZSBpZiB0aGUgZG93bmNhc2VkIG5hbWUgcHJvcGVydGllcyBhcmUgcHJlc2VudCBhbmQgbWF0Y2ggaW4gdGhlIGZpbHRlciBhbmQgdGhlIGVudGl0eVxyXG4gICAgICovXHJcbiAgICBtYXRjaE5hbWUoY2xhaW1zLCBuYW1lKSB7XHJcbiAgICAgICAgcmV0dXJuICEhKG5hbWUudG9Mb3dlckNhc2UoKSA9PT0gY2xhaW1zLm5hbWU/LnRvTG93ZXJDYXNlKCkpO1xyXG4gICAgfVxyXG4gICAgLyoqXHJcbiAgICAgKiBoZWxwZXIgdG8gbWF0Y2ggdXNlcm5hbWVzXHJcbiAgICAgKiBAcGFyYW0gZW50aXR5XHJcbiAgICAgKiBAcGFyYW0gdXNlcm5hbWVcclxuICAgICAqIEByZXR1cm5zXHJcbiAgICAgKi9cclxuICAgIG1hdGNoVXNlcm5hbWUoY2FjaGVkVXNlcm5hbWUsIGZpbHRlclVzZXJuYW1lKSB7XHJcbiAgICAgICAgcmV0dXJuICEhKGNhY2hlZFVzZXJuYW1lICYmXHJcbiAgICAgICAgICAgIHR5cGVvZiBjYWNoZWRVc2VybmFtZSA9PT0gXCJzdHJpbmdcIiAmJlxyXG4gICAgICAgICAgICBmaWx0ZXJVc2VybmFtZT8udG9Mb3dlckNhc2UoKSA9PT0gY2FjaGVkVXNlcm5hbWUudG9Mb3dlckNhc2UoKSk7XHJcbiAgICB9XHJcbiAgICAvKipcclxuICAgICAqIGhlbHBlciB0byBtYXRjaCBhc3NlcnRpb25cclxuICAgICAqIEBwYXJhbSB2YWx1ZVxyXG4gICAgICogQHBhcmFtIG9ib0Fzc2VydGlvblxyXG4gICAgICovXHJcbiAgICBtYXRjaFVzZXJBc3NlcnRpb25IYXNoKGVudGl0eSwgdXNlckFzc2VydGlvbkhhc2gpIHtcclxuICAgICAgICByZXR1cm4gISEoZW50aXR5LnVzZXJBc3NlcnRpb25IYXNoICYmXHJcbiAgICAgICAgICAgIHVzZXJBc3NlcnRpb25IYXNoID09PSBlbnRpdHkudXNlckFzc2VydGlvbkhhc2gpO1xyXG4gICAgfVxyXG4gICAgLyoqXHJcbiAgICAgKiBoZWxwZXIgdG8gbWF0Y2ggZW52aXJvbm1lbnRcclxuICAgICAqIEBwYXJhbSB2YWx1ZVxyXG4gICAgICogQHBhcmFtIGVudmlyb25tZW50XHJcbiAgICAgKi9cclxuICAgIG1hdGNoRW52aXJvbm1lbnQoZW50aXR5LCBlbnZpcm9ubWVudCkge1xyXG4gICAgICAgIC8vIENoZWNrIHN0YXRpYyBhdXRob3JpdHkgb3B0aW9ucyBmaXJzdCBmb3IgY2FzZXMgd2hlcmUgYXV0aG9yaXR5IG1ldGFkYXRhIGhhcyBub3QgYmVlbiByZXNvbHZlZCBhbmQgY2FjaGVkIHlldFxyXG4gICAgICAgIGlmICh0aGlzLnN0YXRpY0F1dGhvcml0eU9wdGlvbnMpIHtcclxuICAgICAgICAgICAgY29uc3Qgc3RhdGljQWxpYXNlcyA9IGdldEFsaWFzZXNGcm9tU3RhdGljU291cmNlcyh0aGlzLnN0YXRpY0F1dGhvcml0eU9wdGlvbnMsIHRoaXMuY29tbW9uTG9nZ2VyKTtcclxuICAgICAgICAgICAgaWYgKHN0YXRpY0FsaWFzZXMuaW5jbHVkZXMoZW52aXJvbm1lbnQpICYmXHJcbiAgICAgICAgICAgICAgICBzdGF0aWNBbGlhc2VzLmluY2x1ZGVzKGVudGl0eS5lbnZpcm9ubWVudCkpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIC8vIFF1ZXJ5IG1ldGFkYXRhIGNhY2hlIGlmIG5vIHN0YXRpYyBhdXRob3JpdHkgY29uZmlndXJhdGlvbiBoYXMgYWxpYXNlcyB0aGF0IG1hdGNoIGVudmlyb21lbnRcclxuICAgICAgICBjb25zdCBjbG91ZE1ldGFkYXRhID0gdGhpcy5nZXRBdXRob3JpdHlNZXRhZGF0YUJ5QWxpYXMoZW52aXJvbm1lbnQpO1xyXG4gICAgICAgIGlmIChjbG91ZE1ldGFkYXRhICYmXHJcbiAgICAgICAgICAgIGNsb3VkTWV0YWRhdGEuYWxpYXNlcy5pbmRleE9mKGVudGl0eS5lbnZpcm9ubWVudCkgPiAtMSkge1xyXG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG4gICAgLyoqXHJcbiAgICAgKiBoZWxwZXIgdG8gbWF0Y2ggY3JlZGVudGlhbCB0eXBlXHJcbiAgICAgKiBAcGFyYW0gZW50aXR5XHJcbiAgICAgKiBAcGFyYW0gY3JlZGVudGlhbFR5cGVcclxuICAgICAqL1xyXG4gICAgbWF0Y2hDcmVkZW50aWFsVHlwZShlbnRpdHksIGNyZWRlbnRpYWxUeXBlKSB7XHJcbiAgICAgICAgcmV0dXJuIChlbnRpdHkuY3JlZGVudGlhbFR5cGUgJiZcclxuICAgICAgICAgICAgY3JlZGVudGlhbFR5cGUudG9Mb3dlckNhc2UoKSA9PT0gZW50aXR5LmNyZWRlbnRpYWxUeXBlLnRvTG93ZXJDYXNlKCkpO1xyXG4gICAgfVxyXG4gICAgLyoqXHJcbiAgICAgKiBoZWxwZXIgdG8gbWF0Y2ggY2xpZW50IGlkc1xyXG4gICAgICogQHBhcmFtIGVudGl0eVxyXG4gICAgICogQHBhcmFtIGNsaWVudElkXHJcbiAgICAgKi9cclxuICAgIG1hdGNoQ2xpZW50SWQoZW50aXR5LCBjbGllbnRJZCkge1xyXG4gICAgICAgIHJldHVybiAhIShlbnRpdHkuY2xpZW50SWQgJiYgY2xpZW50SWQgPT09IGVudGl0eS5jbGllbnRJZCk7XHJcbiAgICB9XHJcbiAgICAvKipcclxuICAgICAqIGhlbHBlciB0byBtYXRjaCBmYW1pbHkgaWRzXHJcbiAgICAgKiBAcGFyYW0gZW50aXR5XHJcbiAgICAgKiBAcGFyYW0gZmFtaWx5SWRcclxuICAgICAqL1xyXG4gICAgbWF0Y2hGYW1pbHlJZChlbnRpdHksIGZhbWlseUlkKSB7XHJcbiAgICAgICAgcmV0dXJuICEhKGVudGl0eS5mYW1pbHlJZCAmJiBmYW1pbHlJZCA9PT0gZW50aXR5LmZhbWlseUlkKTtcclxuICAgIH1cclxuICAgIC8qKlxyXG4gICAgICogaGVscGVyIHRvIG1hdGNoIHJlYWxtXHJcbiAgICAgKiBAcGFyYW0gZW50aXR5XHJcbiAgICAgKiBAcGFyYW0gcmVhbG1cclxuICAgICAqL1xyXG4gICAgbWF0Y2hSZWFsbShlbnRpdHksIHJlYWxtKSB7XHJcbiAgICAgICAgcmV0dXJuICEhKGVudGl0eS5yZWFsbT8udG9Mb3dlckNhc2UoKSA9PT0gcmVhbG0udG9Mb3dlckNhc2UoKSk7XHJcbiAgICB9XHJcbiAgICAvKipcclxuICAgICAqIGhlbHBlciB0byBtYXRjaCBuYXRpdmVBY2NvdW50SWRcclxuICAgICAqIEBwYXJhbSBlbnRpdHlcclxuICAgICAqIEBwYXJhbSBuYXRpdmVBY2NvdW50SWRcclxuICAgICAqIEByZXR1cm5zIGJvb2xlYW4gaW5kaWNhdGluZyB0aGUgbWF0Y2ggcmVzdWx0XHJcbiAgICAgKi9cclxuICAgIG1hdGNoTmF0aXZlQWNjb3VudElkKGVudGl0eSwgbmF0aXZlQWNjb3VudElkKSB7XHJcbiAgICAgICAgcmV0dXJuICEhKGVudGl0eS5uYXRpdmVBY2NvdW50SWQgJiYgbmF0aXZlQWNjb3VudElkID09PSBlbnRpdHkubmF0aXZlQWNjb3VudElkKTtcclxuICAgIH1cclxuICAgIC8qKlxyXG4gICAgICogaGVscGVyIHRvIG1hdGNoIGxvZ2luSGludCB3aGljaCBjYW4gYmUgZWl0aGVyOlxyXG4gICAgICogMS4gbG9naW5faGludCBJRCB0b2tlbiBjbGFpbVxyXG4gICAgICogMi4gdXNlcm5hbWUgaW4gY2FjaGVkIGFjY291bnQgb2JqZWN0XHJcbiAgICAgKiAzLiB1cG4gaW4gSUQgdG9rZW4gY2xhaW1zXHJcbiAgICAgKiBAcGFyYW0gZW50aXR5XHJcbiAgICAgKiBAcGFyYW0gbG9naW5IaW50XHJcbiAgICAgKiBAcmV0dXJuc1xyXG4gICAgICovXHJcbiAgICBtYXRjaExvZ2luSGludEZyb21Ub2tlbkNsYWltcyh0b2tlbkNsYWltcywgbG9naW5IaW50KSB7XHJcbiAgICAgICAgaWYgKHRva2VuQ2xhaW1zLmxvZ2luX2hpbnQgPT09IGxvZ2luSGludCkge1xyXG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHRva2VuQ2xhaW1zLnByZWZlcnJlZF91c2VybmFtZSA9PT0gbG9naW5IaW50KSB7XHJcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAodG9rZW5DbGFpbXMudXBuID09PSBsb2dpbkhpbnQpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuICAgIC8qKlxyXG4gICAgICogSGVscGVyIHRvIG1hdGNoIHNpZFxyXG4gICAgICogQHBhcmFtIGVudGl0eVxyXG4gICAgICogQHBhcmFtIHNpZFxyXG4gICAgICogQHJldHVybnMgdHJ1ZSBpZiB0aGUgc2lkIGNsYWltIGlzIHByZXNlbnQgYW5kIG1hdGNoZXMgdGhlIGZpbHRlclxyXG4gICAgICovXHJcbiAgICBtYXRjaFNpZChpZFRva2VuQ2xhaW1zLCBzaWQpIHtcclxuICAgICAgICByZXR1cm4gaWRUb2tlbkNsYWltcy5zaWQgPT09IHNpZDtcclxuICAgIH1cclxuICAgIG1hdGNoQXV0aG9yaXR5VHlwZShlbnRpdHksIGF1dGhvcml0eVR5cGUpIHtcclxuICAgICAgICByZXR1cm4gISEoZW50aXR5LmF1dGhvcml0eVR5cGUgJiZcclxuICAgICAgICAgICAgYXV0aG9yaXR5VHlwZS50b0xvd2VyQ2FzZSgpID09PSBlbnRpdHkuYXV0aG9yaXR5VHlwZS50b0xvd2VyQ2FzZSgpKTtcclxuICAgIH1cclxuICAgIC8qKlxyXG4gICAgICogUmV0dXJucyB0cnVlIGlmIHRoZSB0YXJnZXQgc2NvcGVzIGFyZSBhIHN1YnNldCBvZiB0aGUgY3VycmVudCBlbnRpdHkncyBzY29wZXMsIGZhbHNlIG90aGVyd2lzZS5cclxuICAgICAqIEBwYXJhbSBlbnRpdHlcclxuICAgICAqIEBwYXJhbSB0YXJnZXRcclxuICAgICAqL1xyXG4gICAgbWF0Y2hUYXJnZXQoZW50aXR5LCB0YXJnZXQpIHtcclxuICAgICAgICBjb25zdCBpc05vdEFjY2Vzc1Rva2VuQ3JlZGVudGlhbCA9IGVudGl0eS5jcmVkZW50aWFsVHlwZSAhPT0gQ3JlZGVudGlhbFR5cGUuQUNDRVNTX1RPS0VOICYmXHJcbiAgICAgICAgICAgIGVudGl0eS5jcmVkZW50aWFsVHlwZSAhPT1cclxuICAgICAgICAgICAgICAgIENyZWRlbnRpYWxUeXBlLkFDQ0VTU19UT0tFTl9XSVRIX0FVVEhfU0NIRU1FO1xyXG4gICAgICAgIGlmIChpc05vdEFjY2Vzc1Rva2VuQ3JlZGVudGlhbCB8fCAhZW50aXR5LnRhcmdldCkge1xyXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNvbnN0IGVudGl0eVNjb3BlU2V0ID0gU2NvcGVTZXQuZnJvbVN0cmluZyhlbnRpdHkudGFyZ2V0KTtcclxuICAgICAgICByZXR1cm4gZW50aXR5U2NvcGVTZXQuY29udGFpbnNTY29wZVNldCh0YXJnZXQpO1xyXG4gICAgfVxyXG4gICAgLyoqXHJcbiAgICAgKiBSZXR1cm5zIHRydWUgaWYgdGhlIGNyZWRlbnRpYWwncyB0b2tlblR5cGUgb3IgQXV0aGVudGljYXRpb24gU2NoZW1lIG1hdGNoZXMgdGhlIG9uZSBpbiB0aGUgcmVxdWVzdCwgZmFsc2Ugb3RoZXJ3aXNlXHJcbiAgICAgKiBAcGFyYW0gZW50aXR5XHJcbiAgICAgKiBAcGFyYW0gdG9rZW5UeXBlXHJcbiAgICAgKi9cclxuICAgIG1hdGNoVG9rZW5UeXBlKGVudGl0eSwgdG9rZW5UeXBlKSB7XHJcbiAgICAgICAgcmV0dXJuICEhKGVudGl0eS50b2tlblR5cGUgJiYgZW50aXR5LnRva2VuVHlwZSA9PT0gdG9rZW5UeXBlKTtcclxuICAgIH1cclxuICAgIC8qKlxyXG4gICAgICogUmV0dXJucyB0cnVlIGlmIHRoZSBjcmVkZW50aWFsJ3Mga2V5SWQgbWF0Y2hlcyB0aGUgb25lIGluIHRoZSByZXF1ZXN0LCBmYWxzZSBvdGhlcndpc2VcclxuICAgICAqIEBwYXJhbSBlbnRpdHlcclxuICAgICAqIEBwYXJhbSBrZXlJZFxyXG4gICAgICovXHJcbiAgICBtYXRjaEtleUlkKGVudGl0eSwga2V5SWQpIHtcclxuICAgICAgICByZXR1cm4gISEoZW50aXR5LmtleUlkICYmIGVudGl0eS5rZXlJZCA9PT0ga2V5SWQpO1xyXG4gICAgfVxyXG4gICAgLyoqXHJcbiAgICAgKiByZXR1cm5zIGlmIGEgZ2l2ZW4gY2FjaGUgZW50aXR5IGlzIG9mIHRoZSB0eXBlIGFwcG1ldGFkYXRhXHJcbiAgICAgKiBAcGFyYW0ga2V5XHJcbiAgICAgKi9cclxuICAgIGlzQXBwTWV0YWRhdGEoa2V5KSB7XHJcbiAgICAgICAgcmV0dXJuIGtleS5pbmRleE9mKEFQUF9NRVRBREFUQSkgIT09IC0xO1xyXG4gICAgfVxyXG4gICAgLyoqXHJcbiAgICAgKiByZXR1cm5zIGlmIGEgZ2l2ZW4gY2FjaGUgZW50aXR5IGlzIG9mIHRoZSB0eXBlIGF1dGhvcml0eW1ldGFkYXRhXHJcbiAgICAgKiBAcGFyYW0ga2V5XHJcbiAgICAgKi9cclxuICAgIGlzQXV0aG9yaXR5TWV0YWRhdGEoa2V5KSB7XHJcbiAgICAgICAgcmV0dXJuIGtleS5pbmRleE9mKEFVVEhPUklUWV9NRVRBREFUQV9DT05TVEFOVFMuQ0FDSEVfS0VZKSAhPT0gLTE7XHJcbiAgICB9XHJcbiAgICAvKipcclxuICAgICAqIHJldHVybnMgY2FjaGUga2V5IHVzZWQgZm9yIGNsb3VkIGluc3RhbmNlIG1ldGFkYXRhXHJcbiAgICAgKi9cclxuICAgIGdlbmVyYXRlQXV0aG9yaXR5TWV0YWRhdGFDYWNoZUtleShhdXRob3JpdHkpIHtcclxuICAgICAgICByZXR1cm4gYCR7QVVUSE9SSVRZX01FVEFEQVRBX0NPTlNUQU5UUy5DQUNIRV9LRVl9LSR7dGhpcy5jbGllbnRJZH0tJHthdXRob3JpdHl9YDtcclxuICAgIH1cclxuICAgIC8qKlxyXG4gICAgICogSGVscGVyIHRvIGNvbnZlcnQgc2VyaWFsaXplZCBkYXRhIHRvIG9iamVjdFxyXG4gICAgICogQHBhcmFtIG9ialxyXG4gICAgICogQHBhcmFtIGpzb25cclxuICAgICAqL1xyXG4gICAgc3RhdGljIHRvT2JqZWN0KG9iaiwganNvbikge1xyXG4gICAgICAgIGZvciAoY29uc3QgcHJvcGVydHlOYW1lIGluIGpzb24pIHtcclxuICAgICAgICAgICAgb2JqW3Byb3BlcnR5TmFtZV0gPSBqc29uW3Byb3BlcnR5TmFtZV07XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBvYmo7XHJcbiAgICB9XHJcbn1cclxuLyoqIEBpbnRlcm5hbCAqL1xyXG5jbGFzcyBEZWZhdWx0U3RvcmFnZUNsYXNzIGV4dGVuZHMgQ2FjaGVNYW5hZ2VyIHtcclxuICAgIHNldEFjY291bnQoKSB7XHJcbiAgICAgICAgdGhyb3cgY3JlYXRlQ2xpZW50QXV0aEVycm9yKG1ldGhvZE5vdEltcGxlbWVudGVkKTtcclxuICAgIH1cclxuICAgIGdldEFjY291bnQoKSB7XHJcbiAgICAgICAgdGhyb3cgY3JlYXRlQ2xpZW50QXV0aEVycm9yKG1ldGhvZE5vdEltcGxlbWVudGVkKTtcclxuICAgIH1cclxuICAgIGdldENhY2hlZEFjY291bnRFbnRpdHkoKSB7XHJcbiAgICAgICAgdGhyb3cgY3JlYXRlQ2xpZW50QXV0aEVycm9yKG1ldGhvZE5vdEltcGxlbWVudGVkKTtcclxuICAgIH1cclxuICAgIHNldElkVG9rZW5DcmVkZW50aWFsKCkge1xyXG4gICAgICAgIHRocm93IGNyZWF0ZUNsaWVudEF1dGhFcnJvcihtZXRob2ROb3RJbXBsZW1lbnRlZCk7XHJcbiAgICB9XHJcbiAgICBnZXRJZFRva2VuQ3JlZGVudGlhbCgpIHtcclxuICAgICAgICB0aHJvdyBjcmVhdGVDbGllbnRBdXRoRXJyb3IobWV0aG9kTm90SW1wbGVtZW50ZWQpO1xyXG4gICAgfVxyXG4gICAgc2V0QWNjZXNzVG9rZW5DcmVkZW50aWFsKCkge1xyXG4gICAgICAgIHRocm93IGNyZWF0ZUNsaWVudEF1dGhFcnJvcihtZXRob2ROb3RJbXBsZW1lbnRlZCk7XHJcbiAgICB9XHJcbiAgICBnZXRBY2Nlc3NUb2tlbkNyZWRlbnRpYWwoKSB7XHJcbiAgICAgICAgdGhyb3cgY3JlYXRlQ2xpZW50QXV0aEVycm9yKG1ldGhvZE5vdEltcGxlbWVudGVkKTtcclxuICAgIH1cclxuICAgIHNldFJlZnJlc2hUb2tlbkNyZWRlbnRpYWwoKSB7XHJcbiAgICAgICAgdGhyb3cgY3JlYXRlQ2xpZW50QXV0aEVycm9yKG1ldGhvZE5vdEltcGxlbWVudGVkKTtcclxuICAgIH1cclxuICAgIGdldFJlZnJlc2hUb2tlbkNyZWRlbnRpYWwoKSB7XHJcbiAgICAgICAgdGhyb3cgY3JlYXRlQ2xpZW50QXV0aEVycm9yKG1ldGhvZE5vdEltcGxlbWVudGVkKTtcclxuICAgIH1cclxuICAgIHNldEFwcE1ldGFkYXRhKCkge1xyXG4gICAgICAgIHRocm93IGNyZWF0ZUNsaWVudEF1dGhFcnJvcihtZXRob2ROb3RJbXBsZW1lbnRlZCk7XHJcbiAgICB9XHJcbiAgICBnZXRBcHBNZXRhZGF0YSgpIHtcclxuICAgICAgICB0aHJvdyBjcmVhdGVDbGllbnRBdXRoRXJyb3IobWV0aG9kTm90SW1wbGVtZW50ZWQpO1xyXG4gICAgfVxyXG4gICAgc2V0U2VydmVyVGVsZW1ldHJ5KCkge1xyXG4gICAgICAgIHRocm93IGNyZWF0ZUNsaWVudEF1dGhFcnJvcihtZXRob2ROb3RJbXBsZW1lbnRlZCk7XHJcbiAgICB9XHJcbiAgICBnZXRTZXJ2ZXJUZWxlbWV0cnkoKSB7XHJcbiAgICAgICAgdGhyb3cgY3JlYXRlQ2xpZW50QXV0aEVycm9yKG1ldGhvZE5vdEltcGxlbWVudGVkKTtcclxuICAgIH1cclxuICAgIHNldEF1dGhvcml0eU1ldGFkYXRhKCkge1xyXG4gICAgICAgIHRocm93IGNyZWF0ZUNsaWVudEF1dGhFcnJvcihtZXRob2ROb3RJbXBsZW1lbnRlZCk7XHJcbiAgICB9XHJcbiAgICBnZXRBdXRob3JpdHlNZXRhZGF0YSgpIHtcclxuICAgICAgICB0aHJvdyBjcmVhdGVDbGllbnRBdXRoRXJyb3IobWV0aG9kTm90SW1wbGVtZW50ZWQpO1xyXG4gICAgfVxyXG4gICAgZ2V0QXV0aG9yaXR5TWV0YWRhdGFLZXlzKCkge1xyXG4gICAgICAgIHRocm93IGNyZWF0ZUNsaWVudEF1dGhFcnJvcihtZXRob2ROb3RJbXBsZW1lbnRlZCk7XHJcbiAgICB9XHJcbiAgICBzZXRUaHJvdHRsaW5nQ2FjaGUoKSB7XHJcbiAgICAgICAgdGhyb3cgY3JlYXRlQ2xpZW50QXV0aEVycm9yKG1ldGhvZE5vdEltcGxlbWVudGVkKTtcclxuICAgIH1cclxuICAgIGdldFRocm90dGxpbmdDYWNoZSgpIHtcclxuICAgICAgICB0aHJvdyBjcmVhdGVDbGllbnRBdXRoRXJyb3IobWV0aG9kTm90SW1wbGVtZW50ZWQpO1xyXG4gICAgfVxyXG4gICAgcmVtb3ZlSXRlbSgpIHtcclxuICAgICAgICB0aHJvdyBjcmVhdGVDbGllbnRBdXRoRXJyb3IobWV0aG9kTm90SW1wbGVtZW50ZWQpO1xyXG4gICAgfVxyXG4gICAgZ2V0S2V5cygpIHtcclxuICAgICAgICB0aHJvdyBjcmVhdGVDbGllbnRBdXRoRXJyb3IobWV0aG9kTm90SW1wbGVtZW50ZWQpO1xyXG4gICAgfVxyXG4gICAgZ2V0QWNjb3VudEtleXMoKSB7XHJcbiAgICAgICAgdGhyb3cgY3JlYXRlQ2xpZW50QXV0aEVycm9yKG1ldGhvZE5vdEltcGxlbWVudGVkKTtcclxuICAgIH1cclxuICAgIGdldFRva2VuS2V5cygpIHtcclxuICAgICAgICB0aHJvdyBjcmVhdGVDbGllbnRBdXRoRXJyb3IobWV0aG9kTm90SW1wbGVtZW50ZWQpO1xyXG4gICAgfVxyXG4gICAgdXBkYXRlQ3JlZGVudGlhbENhY2hlS2V5KCkge1xyXG4gICAgICAgIHRocm93IGNyZWF0ZUNsaWVudEF1dGhFcnJvcihtZXRob2ROb3RJbXBsZW1lbnRlZCk7XHJcbiAgICB9XHJcbiAgICByZW1vdmVPdXRkYXRlZEFjY291bnQoKSB7XHJcbiAgICAgICAgdGhyb3cgY3JlYXRlQ2xpZW50QXV0aEVycm9yKG1ldGhvZE5vdEltcGxlbWVudGVkKTtcclxuICAgIH1cclxufVxuXG5leHBvcnQgeyBDYWNoZU1hbmFnZXIsIERlZmF1bHRTdG9yYWdlQ2xhc3MgfTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPUNhY2hlTWFuYWdlci5tanMubWFwXG4iLCIvKiEgQGF6dXJlL21zYWwtY29tbW9uIHYxNC4xNi4wIDIwMjQtMTEtMDUgKi9cbid1c2Ugc3RyaWN0JztcbmltcG9ydCB7IERFRkFVTFRfQ1JZUFRPX0lNUExFTUVOVEFUSU9OIH0gZnJvbSAnLi4vY3J5cHRvL0lDcnlwdG8ubWpzJztcbmltcG9ydCB7IExvZ2dlciwgTG9nTGV2ZWwgfSBmcm9tICcuLi9sb2dnZXIvTG9nZ2VyLm1qcyc7XG5pbXBvcnQgeyBERUZBVUxUX1RPS0VOX1JFTkVXQUxfT0ZGU0VUX1NFQywgQ29uc3RhbnRzIH0gZnJvbSAnLi4vdXRpbHMvQ29uc3RhbnRzLm1qcyc7XG5pbXBvcnQgeyB2ZXJzaW9uIH0gZnJvbSAnLi4vcGFja2FnZU1ldGFkYXRhLm1qcyc7XG5pbXBvcnQgeyBBenVyZUNsb3VkSW5zdGFuY2UgfSBmcm9tICcuLi9hdXRob3JpdHkvQXV0aG9yaXR5T3B0aW9ucy5tanMnO1xuaW1wb3J0IHsgRGVmYXVsdFN0b3JhZ2VDbGFzcyB9IGZyb20gJy4uL2NhY2hlL0NhY2hlTWFuYWdlci5tanMnO1xuaW1wb3J0IHsgUHJvdG9jb2xNb2RlIH0gZnJvbSAnLi4vYXV0aG9yaXR5L1Byb3RvY29sTW9kZS5tanMnO1xuaW1wb3J0IHsgY3JlYXRlQ2xpZW50QXV0aEVycm9yIH0gZnJvbSAnLi4vZXJyb3IvQ2xpZW50QXV0aEVycm9yLm1qcyc7XG5pbXBvcnQgeyBtZXRob2ROb3RJbXBsZW1lbnRlZCB9IGZyb20gJy4uL2Vycm9yL0NsaWVudEF1dGhFcnJvckNvZGVzLm1qcyc7XG5cbi8qXHJcbiAqIENvcHlyaWdodCAoYykgTWljcm9zb2Z0IENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLlxyXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgTUlUIExpY2Vuc2UuXHJcbiAqL1xyXG5jb25zdCBERUZBVUxUX1NZU1RFTV9PUFRJT05TID0ge1xyXG4gICAgdG9rZW5SZW5ld2FsT2Zmc2V0U2Vjb25kczogREVGQVVMVF9UT0tFTl9SRU5FV0FMX09GRlNFVF9TRUMsXHJcbiAgICBwcmV2ZW50Q29yc1ByZWZsaWdodDogZmFsc2UsXHJcbn07XHJcbmNvbnN0IERFRkFVTFRfTE9HR0VSX0lNUExFTUVOVEFUSU9OID0ge1xyXG4gICAgbG9nZ2VyQ2FsbGJhY2s6ICgpID0+IHtcclxuICAgICAgICAvLyBhbGxvdyB1c2VycyB0byBub3Qgc2V0IGxvZ2dlckNhbGxiYWNrXHJcbiAgICB9LFxyXG4gICAgcGlpTG9nZ2luZ0VuYWJsZWQ6IGZhbHNlLFxyXG4gICAgbG9nTGV2ZWw6IExvZ0xldmVsLkluZm8sXHJcbiAgICBjb3JyZWxhdGlvbklkOiBDb25zdGFudHMuRU1QVFlfU1RSSU5HLFxyXG59O1xyXG5jb25zdCBERUZBVUxUX0NBQ0hFX09QVElPTlMgPSB7XHJcbiAgICBjbGFpbXNCYXNlZENhY2hpbmdFbmFibGVkOiBmYWxzZSxcclxufTtcclxuY29uc3QgREVGQVVMVF9ORVRXT1JLX0lNUExFTUVOVEFUSU9OID0ge1xyXG4gICAgYXN5bmMgc2VuZEdldFJlcXVlc3RBc3luYygpIHtcclxuICAgICAgICB0aHJvdyBjcmVhdGVDbGllbnRBdXRoRXJyb3IobWV0aG9kTm90SW1wbGVtZW50ZWQpO1xyXG4gICAgfSxcclxuICAgIGFzeW5jIHNlbmRQb3N0UmVxdWVzdEFzeW5jKCkge1xyXG4gICAgICAgIHRocm93IGNyZWF0ZUNsaWVudEF1dGhFcnJvcihtZXRob2ROb3RJbXBsZW1lbnRlZCk7XHJcbiAgICB9LFxyXG59O1xyXG5jb25zdCBERUZBVUxUX0xJQlJBUllfSU5GTyA9IHtcclxuICAgIHNrdTogQ29uc3RhbnRzLlNLVSxcclxuICAgIHZlcnNpb246IHZlcnNpb24sXHJcbiAgICBjcHU6IENvbnN0YW50cy5FTVBUWV9TVFJJTkcsXHJcbiAgICBvczogQ29uc3RhbnRzLkVNUFRZX1NUUklORyxcclxufTtcclxuY29uc3QgREVGQVVMVF9DTElFTlRfQ1JFREVOVElBTFMgPSB7XHJcbiAgICBjbGllbnRTZWNyZXQ6IENvbnN0YW50cy5FTVBUWV9TVFJJTkcsXHJcbiAgICBjbGllbnRBc3NlcnRpb246IHVuZGVmaW5lZCxcclxufTtcclxuY29uc3QgREVGQVVMVF9BWlVSRV9DTE9VRF9PUFRJT05TID0ge1xyXG4gICAgYXp1cmVDbG91ZEluc3RhbmNlOiBBenVyZUNsb3VkSW5zdGFuY2UuTm9uZSxcclxuICAgIHRlbmFudDogYCR7Q29uc3RhbnRzLkRFRkFVTFRfQ09NTU9OX1RFTkFOVH1gLFxyXG59O1xyXG5jb25zdCBERUZBVUxUX1RFTEVNRVRSWV9PUFRJT05TID0ge1xyXG4gICAgYXBwbGljYXRpb246IHtcclxuICAgICAgICBhcHBOYW1lOiBcIlwiLFxyXG4gICAgICAgIGFwcFZlcnNpb246IFwiXCIsXHJcbiAgICB9LFxyXG59O1xyXG4vKipcclxuICogRnVuY3Rpb24gdGhhdCBzZXRzIHRoZSBkZWZhdWx0IG9wdGlvbnMgd2hlbiBub3QgZXhwbGljaXRseSBjb25maWd1cmVkIGZyb20gYXBwIGRldmVsb3BlclxyXG4gKlxyXG4gKiBAcGFyYW0gQ29uZmlndXJhdGlvblxyXG4gKlxyXG4gKiBAcmV0dXJucyBDb25maWd1cmF0aW9uXHJcbiAqL1xyXG5mdW5jdGlvbiBidWlsZENsaWVudENvbmZpZ3VyYXRpb24oeyBhdXRoT3B0aW9uczogdXNlckF1dGhPcHRpb25zLCBzeXN0ZW1PcHRpb25zOiB1c2VyU3lzdGVtT3B0aW9ucywgbG9nZ2VyT3B0aW9uczogdXNlckxvZ2dlck9wdGlvbiwgY2FjaGVPcHRpb25zOiB1c2VyQ2FjaGVPcHRpb25zLCBzdG9yYWdlSW50ZXJmYWNlOiBzdG9yYWdlSW1wbGVtZW50YXRpb24sIG5ldHdvcmtJbnRlcmZhY2U6IG5ldHdvcmtJbXBsZW1lbnRhdGlvbiwgY3J5cHRvSW50ZXJmYWNlOiBjcnlwdG9JbXBsZW1lbnRhdGlvbiwgY2xpZW50Q3JlZGVudGlhbHM6IGNsaWVudENyZWRlbnRpYWxzLCBsaWJyYXJ5SW5mbzogbGlicmFyeUluZm8sIHRlbGVtZXRyeTogdGVsZW1ldHJ5LCBzZXJ2ZXJUZWxlbWV0cnlNYW5hZ2VyOiBzZXJ2ZXJUZWxlbWV0cnlNYW5hZ2VyLCBwZXJzaXN0ZW5jZVBsdWdpbjogcGVyc2lzdGVuY2VQbHVnaW4sIHNlcmlhbGl6YWJsZUNhY2hlOiBzZXJpYWxpemFibGVDYWNoZSwgfSkge1xyXG4gICAgY29uc3QgbG9nZ2VyT3B0aW9ucyA9IHtcclxuICAgICAgICAuLi5ERUZBVUxUX0xPR0dFUl9JTVBMRU1FTlRBVElPTixcclxuICAgICAgICAuLi51c2VyTG9nZ2VyT3B0aW9uLFxyXG4gICAgfTtcclxuICAgIHJldHVybiB7XHJcbiAgICAgICAgYXV0aE9wdGlvbnM6IGJ1aWxkQXV0aE9wdGlvbnModXNlckF1dGhPcHRpb25zKSxcclxuICAgICAgICBzeXN0ZW1PcHRpb25zOiB7IC4uLkRFRkFVTFRfU1lTVEVNX09QVElPTlMsIC4uLnVzZXJTeXN0ZW1PcHRpb25zIH0sXHJcbiAgICAgICAgbG9nZ2VyT3B0aW9uczogbG9nZ2VyT3B0aW9ucyxcclxuICAgICAgICBjYWNoZU9wdGlvbnM6IHsgLi4uREVGQVVMVF9DQUNIRV9PUFRJT05TLCAuLi51c2VyQ2FjaGVPcHRpb25zIH0sXHJcbiAgICAgICAgc3RvcmFnZUludGVyZmFjZTogc3RvcmFnZUltcGxlbWVudGF0aW9uIHx8XHJcbiAgICAgICAgICAgIG5ldyBEZWZhdWx0U3RvcmFnZUNsYXNzKHVzZXJBdXRoT3B0aW9ucy5jbGllbnRJZCwgREVGQVVMVF9DUllQVE9fSU1QTEVNRU5UQVRJT04sIG5ldyBMb2dnZXIobG9nZ2VyT3B0aW9ucykpLFxyXG4gICAgICAgIG5ldHdvcmtJbnRlcmZhY2U6IG5ldHdvcmtJbXBsZW1lbnRhdGlvbiB8fCBERUZBVUxUX05FVFdPUktfSU1QTEVNRU5UQVRJT04sXHJcbiAgICAgICAgY3J5cHRvSW50ZXJmYWNlOiBjcnlwdG9JbXBsZW1lbnRhdGlvbiB8fCBERUZBVUxUX0NSWVBUT19JTVBMRU1FTlRBVElPTixcclxuICAgICAgICBjbGllbnRDcmVkZW50aWFsczogY2xpZW50Q3JlZGVudGlhbHMgfHwgREVGQVVMVF9DTElFTlRfQ1JFREVOVElBTFMsXHJcbiAgICAgICAgbGlicmFyeUluZm86IHsgLi4uREVGQVVMVF9MSUJSQVJZX0lORk8sIC4uLmxpYnJhcnlJbmZvIH0sXHJcbiAgICAgICAgdGVsZW1ldHJ5OiB7IC4uLkRFRkFVTFRfVEVMRU1FVFJZX09QVElPTlMsIC4uLnRlbGVtZXRyeSB9LFxyXG4gICAgICAgIHNlcnZlclRlbGVtZXRyeU1hbmFnZXI6IHNlcnZlclRlbGVtZXRyeU1hbmFnZXIgfHwgbnVsbCxcclxuICAgICAgICBwZXJzaXN0ZW5jZVBsdWdpbjogcGVyc2lzdGVuY2VQbHVnaW4gfHwgbnVsbCxcclxuICAgICAgICBzZXJpYWxpemFibGVDYWNoZTogc2VyaWFsaXphYmxlQ2FjaGUgfHwgbnVsbCxcclxuICAgIH07XHJcbn1cclxuLyoqXHJcbiAqIENvbnN0cnVjdCBhdXRob3B0aW9ucyBmcm9tIHRoZSBjbGllbnQgYW5kIHBsYXRmb3JtIHBhc3NlZCB2YWx1ZXNcclxuICogQHBhcmFtIGF1dGhPcHRpb25zXHJcbiAqL1xyXG5mdW5jdGlvbiBidWlsZEF1dGhPcHRpb25zKGF1dGhPcHRpb25zKSB7XHJcbiAgICByZXR1cm4ge1xyXG4gICAgICAgIGNsaWVudENhcGFiaWxpdGllczogW10sXHJcbiAgICAgICAgYXp1cmVDbG91ZE9wdGlvbnM6IERFRkFVTFRfQVpVUkVfQ0xPVURfT1BUSU9OUyxcclxuICAgICAgICBza2lwQXV0aG9yaXR5TWV0YWRhdGFDYWNoZTogZmFsc2UsXHJcbiAgICAgICAgaW5zdGFuY2VBd2FyZTogZmFsc2UsXHJcbiAgICAgICAgLi4uYXV0aE9wdGlvbnMsXHJcbiAgICB9O1xyXG59XHJcbi8qKlxyXG4gKiBSZXR1cm5zIHRydWUgaWYgY29uZmlnIGhhcyBwcm90b2NvbE1vZGUgc2V0IHRvIFByb3RvY29sTW9kZS5PSURDLCBmYWxzZSBvdGhlcndpc2VcclxuICogQHBhcmFtIENsaWVudENvbmZpZ3VyYXRpb25cclxuICovXHJcbmZ1bmN0aW9uIGlzT2lkY1Byb3RvY29sTW9kZShjb25maWcpIHtcclxuICAgIHJldHVybiAoY29uZmlnLmF1dGhPcHRpb25zLmF1dGhvcml0eS5vcHRpb25zLnByb3RvY29sTW9kZSA9PT0gUHJvdG9jb2xNb2RlLk9JREMpO1xyXG59XG5cbmV4cG9ydCB7IERFRkFVTFRfU1lTVEVNX09QVElPTlMsIGJ1aWxkQ2xpZW50Q29uZmlndXJhdGlvbiwgaXNPaWRjUHJvdG9jb2xNb2RlIH07XG4vLyMgc291cmNlTWFwcGluZ1VSTD1DbGllbnRDb25maWd1cmF0aW9uLm1qcy5tYXBcbiIsIi8qISBAYXp1cmUvbXNhbC1jb21tb24gdjE0LjE2LjAgMjAyNC0xMS0wNSAqL1xuJ3VzZSBzdHJpY3QnO1xuaW1wb3J0IHsgY3JlYXRlQ2xpZW50QXV0aEVycm9yIH0gZnJvbSAnLi4vZXJyb3IvQ2xpZW50QXV0aEVycm9yLm1qcyc7XG5pbXBvcnQgeyBtZXRob2ROb3RJbXBsZW1lbnRlZCB9IGZyb20gJy4uL2Vycm9yL0NsaWVudEF1dGhFcnJvckNvZGVzLm1qcyc7XG5cbi8qXHJcbiAqIENvcHlyaWdodCAoYykgTWljcm9zb2Z0IENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLlxyXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgTUlUIExpY2Vuc2UuXHJcbiAqL1xyXG5jb25zdCBTdHViYmVkTmV0d29ya01vZHVsZSA9IHtcclxuICAgIHNlbmRHZXRSZXF1ZXN0QXN5bmM6ICgpID0+IHtcclxuICAgICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QoY3JlYXRlQ2xpZW50QXV0aEVycm9yKG1ldGhvZE5vdEltcGxlbWVudGVkKSk7XHJcbiAgICB9LFxyXG4gICAgc2VuZFBvc3RSZXF1ZXN0QXN5bmM6ICgpID0+IHtcclxuICAgICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QoY3JlYXRlQ2xpZW50QXV0aEVycm9yKG1ldGhvZE5vdEltcGxlbWVudGVkKSk7XHJcbiAgICB9LFxyXG59O1xuXG5leHBvcnQgeyBTdHViYmVkTmV0d29ya01vZHVsZSB9O1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9SU5ldHdvcmtNb2R1bGUubWpzLm1hcFxuIiwiLyohIEBhenVyZS9tc2FsLWNvbW1vbiB2MTQuMTYuMCAyMDI0LTExLTA1ICovXG4ndXNlIHN0cmljdCc7XG5pbXBvcnQgeyBQZXJmb3JtYW5jZUV2ZW50U3RhdHVzIH0gZnJvbSAnLi9QZXJmb3JtYW5jZUV2ZW50Lm1qcyc7XG5cbi8qXHJcbiAqIENvcHlyaWdodCAoYykgTWljcm9zb2Z0IENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLlxyXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgTUlUIExpY2Vuc2UuXHJcbiAqL1xyXG5jbGFzcyBTdHViUGVyZm9ybWFuY2VNZWFzdXJlbWVudCB7XHJcbiAgICBzdGFydE1lYXN1cmVtZW50KCkge1xyXG4gICAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIGVuZE1lYXN1cmVtZW50KCkge1xyXG4gICAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIGZsdXNoTWVhc3VyZW1lbnQoKSB7XHJcbiAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICB9XHJcbn1cclxuY2xhc3MgU3R1YlBlcmZvcm1hbmNlQ2xpZW50IHtcclxuICAgIGdlbmVyYXRlSWQoKSB7XHJcbiAgICAgICAgcmV0dXJuIFwiY2FsbGJhY2staWRcIjtcclxuICAgIH1cclxuICAgIHN0YXJ0TWVhc3VyZW1lbnQobWVhc3VyZU5hbWUsIGNvcnJlbGF0aW9uSWQpIHtcclxuICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICBlbmQ6ICgpID0+IG51bGwsXHJcbiAgICAgICAgICAgIGRpc2NhcmQ6ICgpID0+IHsgfSxcclxuICAgICAgICAgICAgYWRkOiAoKSA9PiB7IH0sXHJcbiAgICAgICAgICAgIGluY3JlbWVudDogKCkgPT4geyB9LFxyXG4gICAgICAgICAgICBldmVudDoge1xyXG4gICAgICAgICAgICAgICAgZXZlbnRJZDogdGhpcy5nZW5lcmF0ZUlkKCksXHJcbiAgICAgICAgICAgICAgICBzdGF0dXM6IFBlcmZvcm1hbmNlRXZlbnRTdGF0dXMuSW5Qcm9ncmVzcyxcclxuICAgICAgICAgICAgICAgIGF1dGhvcml0eTogXCJcIixcclxuICAgICAgICAgICAgICAgIGxpYnJhcnlOYW1lOiBcIlwiLFxyXG4gICAgICAgICAgICAgICAgbGlicmFyeVZlcnNpb246IFwiXCIsXHJcbiAgICAgICAgICAgICAgICBjbGllbnRJZDogXCJcIixcclxuICAgICAgICAgICAgICAgIG5hbWU6IG1lYXN1cmVOYW1lLFxyXG4gICAgICAgICAgICAgICAgc3RhcnRUaW1lTXM6IERhdGUubm93KCksXHJcbiAgICAgICAgICAgICAgICBjb3JyZWxhdGlvbklkOiBjb3JyZWxhdGlvbklkIHx8IFwiXCIsXHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIG1lYXN1cmVtZW50OiBuZXcgU3R1YlBlcmZvcm1hbmNlTWVhc3VyZW1lbnQoKSxcclxuICAgICAgICB9O1xyXG4gICAgfVxyXG4gICAgc3RhcnRQZXJmb3JtYW5jZU1lYXN1cmVtZW50KCkge1xyXG4gICAgICAgIHJldHVybiBuZXcgU3R1YlBlcmZvcm1hbmNlTWVhc3VyZW1lbnQoKTtcclxuICAgIH1cclxuICAgIGNhbGN1bGF0ZVF1ZXVlZFRpbWUoKSB7XHJcbiAgICAgICAgcmV0dXJuIDA7XHJcbiAgICB9XHJcbiAgICBhZGRRdWV1ZU1lYXN1cmVtZW50KCkge1xyXG4gICAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIHNldFByZVF1ZXVlVGltZSgpIHtcclxuICAgICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICBlbmRNZWFzdXJlbWVudCgpIHtcclxuICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgIH1cclxuICAgIGRpc2NhcmRNZWFzdXJlbWVudHMoKSB7XHJcbiAgICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgcmVtb3ZlUGVyZm9ybWFuY2VDYWxsYmFjaygpIHtcclxuICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgIH1cclxuICAgIGFkZFBlcmZvcm1hbmNlQ2FsbGJhY2soKSB7XHJcbiAgICAgICAgcmV0dXJuIFwiXCI7XHJcbiAgICB9XHJcbiAgICBlbWl0RXZlbnRzKCkge1xyXG4gICAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIGFkZEZpZWxkcygpIHtcclxuICAgICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICBpbmNyZW1lbnRGaWVsZHMoKSB7XHJcbiAgICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgY2FjaGVFdmVudEJ5Q29ycmVsYXRpb25JZCgpIHtcclxuICAgICAgICByZXR1cm47XHJcbiAgICB9XHJcbn1cblxuZXhwb3J0IHsgU3R1YlBlcmZvcm1hbmNlQ2xpZW50LCBTdHViUGVyZm9ybWFuY2VNZWFzdXJlbWVudCB9O1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9U3R1YlBlcmZvcm1hbmNlQ2xpZW50Lm1qcy5tYXBcbiIsIi8qISBAYXp1cmUvbXNhbC1icm93c2VyIHYzLjI4LjEgMjAyNS0wMS0xNCAqL1xuJ3VzZSBzdHJpY3QnO1xuLypcclxuICogQ29weXJpZ2h0IChjKSBNaWNyb3NvZnQgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuXHJcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgTGljZW5zZS5cclxuICovXHJcbmNsYXNzIE5hdmlnYXRpb25DbGllbnQge1xyXG4gICAgLyoqXHJcbiAgICAgKiBOYXZpZ2F0ZXMgdG8gb3RoZXIgcGFnZXMgd2l0aGluIHRoZSBzYW1lIHdlYiBhcHBsaWNhdGlvblxyXG4gICAgICogQHBhcmFtIHVybFxyXG4gICAgICogQHBhcmFtIG9wdGlvbnNcclxuICAgICAqL1xyXG4gICAgbmF2aWdhdGVJbnRlcm5hbCh1cmwsIG9wdGlvbnMpIHtcclxuICAgICAgICByZXR1cm4gTmF2aWdhdGlvbkNsaWVudC5kZWZhdWx0TmF2aWdhdGVXaW5kb3codXJsLCBvcHRpb25zKTtcclxuICAgIH1cclxuICAgIC8qKlxyXG4gICAgICogTmF2aWdhdGVzIHRvIG90aGVyIHBhZ2VzIG91dHNpZGUgdGhlIHdlYiBhcHBsaWNhdGlvbiBpLmUuIHRoZSBJZGVudGl0eSBQcm92aWRlclxyXG4gICAgICogQHBhcmFtIHVybFxyXG4gICAgICogQHBhcmFtIG9wdGlvbnNcclxuICAgICAqL1xyXG4gICAgbmF2aWdhdGVFeHRlcm5hbCh1cmwsIG9wdGlvbnMpIHtcclxuICAgICAgICByZXR1cm4gTmF2aWdhdGlvbkNsaWVudC5kZWZhdWx0TmF2aWdhdGVXaW5kb3codXJsLCBvcHRpb25zKTtcclxuICAgIH1cclxuICAgIC8qKlxyXG4gICAgICogRGVmYXVsdCBuYXZpZ2F0aW9uIGltcGxlbWVudGF0aW9uIGludm9rZWQgYnkgdGhlIGludGVybmFsIGFuZCBleHRlcm5hbCBmdW5jdGlvbnNcclxuICAgICAqIEBwYXJhbSB1cmxcclxuICAgICAqIEBwYXJhbSBvcHRpb25zXHJcbiAgICAgKi9cclxuICAgIHN0YXRpYyBkZWZhdWx0TmF2aWdhdGVXaW5kb3codXJsLCBvcHRpb25zKSB7XHJcbiAgICAgICAgaWYgKG9wdGlvbnMubm9IaXN0b3J5KSB7XHJcbiAgICAgICAgICAgIHdpbmRvdy5sb2NhdGlvbi5yZXBsYWNlKHVybCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICB3aW5kb3cubG9jYXRpb24uYXNzaWduKHVybCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSkgPT4ge1xyXG4gICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgICAgICAgICAgIHJlc29sdmUodHJ1ZSk7XHJcbiAgICAgICAgICAgIH0sIG9wdGlvbnMudGltZW91dCk7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcbn1cblxuZXhwb3J0IHsgTmF2aWdhdGlvbkNsaWVudCB9O1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9TmF2aWdhdGlvbkNsaWVudC5tanMubWFwXG4iLCIvKiEgQGF6dXJlL21zYWwtY29tbW9uIHYxNC4xNi4wIDIwMjQtMTEtMDUgKi9cbid1c2Ugc3RyaWN0JztcbmltcG9ydCB7IEF1dGhFcnJvciB9IGZyb20gJy4vQXV0aEVycm9yLm1qcyc7XG5cbi8qXHJcbiAqIENvcHlyaWdodCAoYykgTWljcm9zb2Z0IENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLlxyXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgTUlUIExpY2Vuc2UuXHJcbiAqL1xyXG4vKipcclxuICogUmVwcmVzZW50cyBuZXR3b3JrIHJlbGF0ZWQgZXJyb3JzXHJcbiAqL1xyXG5jbGFzcyBOZXR3b3JrRXJyb3IgZXh0ZW5kcyBBdXRoRXJyb3Ige1xyXG4gICAgY29uc3RydWN0b3IoZXJyb3IsIGh0dHBTdGF0dXMsIHJlc3BvbnNlSGVhZGVycykge1xyXG4gICAgICAgIHN1cGVyKGVycm9yLmVycm9yQ29kZSwgZXJyb3IuZXJyb3JNZXNzYWdlLCBlcnJvci5zdWJFcnJvcik7XHJcbiAgICAgICAgT2JqZWN0LnNldFByb3RvdHlwZU9mKHRoaXMsIE5ldHdvcmtFcnJvci5wcm90b3R5cGUpO1xyXG4gICAgICAgIHRoaXMubmFtZSA9IFwiTmV0d29ya0Vycm9yXCI7XHJcbiAgICAgICAgdGhpcy5lcnJvciA9IGVycm9yO1xyXG4gICAgICAgIHRoaXMuaHR0cFN0YXR1cyA9IGh0dHBTdGF0dXM7XHJcbiAgICAgICAgdGhpcy5yZXNwb25zZUhlYWRlcnMgPSByZXNwb25zZUhlYWRlcnM7XHJcbiAgICB9XHJcbn1cclxuLyoqXHJcbiAqIENyZWF0ZXMgTmV0d29ya0Vycm9yIG9iamVjdCBmb3IgYSBmYWlsZWQgbmV0d29yayByZXF1ZXN0XHJcbiAqIEBwYXJhbSBlcnJvciAtIEVycm9yIHRvIGJlIHRocm93biBiYWNrIHRvIHRoZSBjYWxsZXJcclxuICogQHBhcmFtIGh0dHBTdGF0dXMgLSBTdGF0dXMgY29kZSBvZiB0aGUgbmV0d29yayByZXF1ZXN0XHJcbiAqIEBwYXJhbSByZXNwb25zZUhlYWRlcnMgLSBSZXNwb25zZSBoZWFkZXJzIG9mIHRoZSBuZXR3b3JrIHJlcXVlc3QsIHdoZW4gYXZhaWxhYmxlXHJcbiAqIEByZXR1cm5zIE5ldHdvcmtFcnJvciBvYmplY3RcclxuICovXHJcbmZ1bmN0aW9uIGNyZWF0ZU5ldHdvcmtFcnJvcihlcnJvciwgaHR0cFN0YXR1cywgcmVzcG9uc2VIZWFkZXJzKSB7XHJcbiAgICByZXR1cm4gbmV3IE5ldHdvcmtFcnJvcihlcnJvciwgaHR0cFN0YXR1cywgcmVzcG9uc2VIZWFkZXJzKTtcclxufVxuXG5leHBvcnQgeyBOZXR3b3JrRXJyb3IsIGNyZWF0ZU5ldHdvcmtFcnJvciB9O1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9TmV0d29ya0Vycm9yLm1qcy5tYXBcbiIsIi8qISBAYXp1cmUvbXNhbC1icm93c2VyIHYzLjI4LjEgMjAyNS0wMS0xNCAqL1xuJ3VzZSBzdHJpY3QnO1xuaW1wb3J0IHsgY3JlYXRlTmV0d29ya0Vycm9yIH0gZnJvbSAnQGF6dXJlL21zYWwtY29tbW9uL2Jyb3dzZXInO1xuaW1wb3J0IHsgY3JlYXRlQnJvd3NlckF1dGhFcnJvciB9IGZyb20gJy4uL2Vycm9yL0Jyb3dzZXJBdXRoRXJyb3IubWpzJztcbmltcG9ydCB7IEhUVFBfUkVRVUVTVF9UWVBFIH0gZnJvbSAnLi4vdXRpbHMvQnJvd3NlckNvbnN0YW50cy5tanMnO1xuaW1wb3J0IHsgZ2V0UmVxdWVzdEZhaWxlZCwgbm9OZXR3b3JrQ29ubmVjdGl2aXR5LCBmYWlsZWRUb1BhcnNlUmVzcG9uc2UsIHBvc3RSZXF1ZXN0RmFpbGVkLCBmYWlsZWRUb0J1aWxkSGVhZGVycywgZmFpbGVkVG9QYXJzZUhlYWRlcnMgfSBmcm9tICcuLi9lcnJvci9Ccm93c2VyQXV0aEVycm9yQ29kZXMubWpzJztcblxuLypcclxuICogQ29weXJpZ2h0IChjKSBNaWNyb3NvZnQgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuXHJcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgTGljZW5zZS5cclxuICovXHJcbi8qKlxyXG4gKiBUaGlzIGNsYXNzIGltcGxlbWVudHMgdGhlIEZldGNoIEFQSSBmb3IgR0VUIGFuZCBQT1NUIHJlcXVlc3RzLiBTZWUgbW9yZSBoZXJlOiBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9BUEkvRmV0Y2hfQVBJXHJcbiAqL1xyXG5jbGFzcyBGZXRjaENsaWVudCB7XHJcbiAgICAvKipcclxuICAgICAqIEZldGNoIENsaWVudCBmb3IgUkVTVCBlbmRwb2ludHMgLSBHZXQgcmVxdWVzdFxyXG4gICAgICogQHBhcmFtIHVybFxyXG4gICAgICogQHBhcmFtIGhlYWRlcnNcclxuICAgICAqIEBwYXJhbSBib2R5XHJcbiAgICAgKi9cclxuICAgIGFzeW5jIHNlbmRHZXRSZXF1ZXN0QXN5bmModXJsLCBvcHRpb25zKSB7XHJcbiAgICAgICAgbGV0IHJlc3BvbnNlO1xyXG4gICAgICAgIGxldCByZXNwb25zZUhlYWRlcnMgPSB7fTtcclxuICAgICAgICBsZXQgcmVzcG9uc2VTdGF0dXMgPSAwO1xyXG4gICAgICAgIGNvbnN0IHJlcUhlYWRlcnMgPSBnZXRGZXRjaEhlYWRlcnMob3B0aW9ucyk7XHJcbiAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgcmVzcG9uc2UgPSBhd2FpdCBmZXRjaCh1cmwsIHtcclxuICAgICAgICAgICAgICAgIG1ldGhvZDogSFRUUF9SRVFVRVNUX1RZUEUuR0VULFxyXG4gICAgICAgICAgICAgICAgaGVhZGVyczogcmVxSGVhZGVycyxcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNhdGNoIChlKSB7XHJcbiAgICAgICAgICAgIHRocm93IGNyZWF0ZUJyb3dzZXJBdXRoRXJyb3Iod2luZG93Lm5hdmlnYXRvci5vbkxpbmVcclxuICAgICAgICAgICAgICAgID8gZ2V0UmVxdWVzdEZhaWxlZFxyXG4gICAgICAgICAgICAgICAgOiBub05ldHdvcmtDb25uZWN0aXZpdHkpO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXNwb25zZUhlYWRlcnMgPSBnZXRIZWFkZXJEaWN0KHJlc3BvbnNlLmhlYWRlcnMpO1xyXG4gICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgIHJlc3BvbnNlU3RhdHVzID0gcmVzcG9uc2Uuc3RhdHVzO1xyXG4gICAgICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICAgICAgaGVhZGVyczogcmVzcG9uc2VIZWFkZXJzLFxyXG4gICAgICAgICAgICAgICAgYm9keTogKGF3YWl0IHJlc3BvbnNlLmpzb24oKSksXHJcbiAgICAgICAgICAgICAgICBzdGF0dXM6IHJlc3BvbnNlU3RhdHVzLFxyXG4gICAgICAgICAgICB9O1xyXG4gICAgICAgIH1cclxuICAgICAgICBjYXRjaCAoZSkge1xyXG4gICAgICAgICAgICB0aHJvdyBjcmVhdGVOZXR3b3JrRXJyb3IoY3JlYXRlQnJvd3NlckF1dGhFcnJvcihmYWlsZWRUb1BhcnNlUmVzcG9uc2UpLCByZXNwb25zZVN0YXR1cywgcmVzcG9uc2VIZWFkZXJzKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICAvKipcclxuICAgICAqIEZldGNoIENsaWVudCBmb3IgUkVTVCBlbmRwb2ludHMgLSBQb3N0IHJlcXVlc3RcclxuICAgICAqIEBwYXJhbSB1cmxcclxuICAgICAqIEBwYXJhbSBoZWFkZXJzXHJcbiAgICAgKiBAcGFyYW0gYm9keVxyXG4gICAgICovXHJcbiAgICBhc3luYyBzZW5kUG9zdFJlcXVlc3RBc3luYyh1cmwsIG9wdGlvbnMpIHtcclxuICAgICAgICBjb25zdCByZXFCb2R5ID0gKG9wdGlvbnMgJiYgb3B0aW9ucy5ib2R5KSB8fCBcIlwiO1xyXG4gICAgICAgIGNvbnN0IHJlcUhlYWRlcnMgPSBnZXRGZXRjaEhlYWRlcnMob3B0aW9ucyk7XHJcbiAgICAgICAgbGV0IHJlc3BvbnNlO1xyXG4gICAgICAgIGxldCByZXNwb25zZVN0YXR1cyA9IDA7XHJcbiAgICAgICAgbGV0IHJlc3BvbnNlSGVhZGVycyA9IHt9O1xyXG4gICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgIHJlc3BvbnNlID0gYXdhaXQgZmV0Y2godXJsLCB7XHJcbiAgICAgICAgICAgICAgICBtZXRob2Q6IEhUVFBfUkVRVUVTVF9UWVBFLlBPU1QsXHJcbiAgICAgICAgICAgICAgICBoZWFkZXJzOiByZXFIZWFkZXJzLFxyXG4gICAgICAgICAgICAgICAgYm9keTogcmVxQm9keSxcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNhdGNoIChlKSB7XHJcbiAgICAgICAgICAgIHRocm93IGNyZWF0ZUJyb3dzZXJBdXRoRXJyb3Iod2luZG93Lm5hdmlnYXRvci5vbkxpbmVcclxuICAgICAgICAgICAgICAgID8gcG9zdFJlcXVlc3RGYWlsZWRcclxuICAgICAgICAgICAgICAgIDogbm9OZXR3b3JrQ29ubmVjdGl2aXR5KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmVzcG9uc2VIZWFkZXJzID0gZ2V0SGVhZGVyRGljdChyZXNwb25zZS5oZWFkZXJzKTtcclxuICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICByZXNwb25zZVN0YXR1cyA9IHJlc3BvbnNlLnN0YXR1cztcclxuICAgICAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgICAgIGhlYWRlcnM6IHJlc3BvbnNlSGVhZGVycyxcclxuICAgICAgICAgICAgICAgIGJvZHk6IChhd2FpdCByZXNwb25zZS5qc29uKCkpLFxyXG4gICAgICAgICAgICAgICAgc3RhdHVzOiByZXNwb25zZVN0YXR1cyxcclxuICAgICAgICAgICAgfTtcclxuICAgICAgICB9XHJcbiAgICAgICAgY2F0Y2ggKGUpIHtcclxuICAgICAgICAgICAgdGhyb3cgY3JlYXRlTmV0d29ya0Vycm9yKGNyZWF0ZUJyb3dzZXJBdXRoRXJyb3IoZmFpbGVkVG9QYXJzZVJlc3BvbnNlKSwgcmVzcG9uc2VTdGF0dXMsIHJlc3BvbnNlSGVhZGVycyk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG59XHJcbi8qKlxyXG4gKiBHZXQgRmV0Y2ggQVBJIEhlYWRlcnMgb2JqZWN0IGZyb20gc3RyaW5nIG1hcFxyXG4gKiBAcGFyYW0gaW5wdXRIZWFkZXJzXHJcbiAqL1xyXG5mdW5jdGlvbiBnZXRGZXRjaEhlYWRlcnMob3B0aW9ucykge1xyXG4gICAgdHJ5IHtcclxuICAgICAgICBjb25zdCBoZWFkZXJzID0gbmV3IEhlYWRlcnMoKTtcclxuICAgICAgICBpZiAoIShvcHRpb25zICYmIG9wdGlvbnMuaGVhZGVycykpIHtcclxuICAgICAgICAgICAgcmV0dXJuIGhlYWRlcnM7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNvbnN0IG9wdGlvbnNIZWFkZXJzID0gb3B0aW9ucy5oZWFkZXJzO1xyXG4gICAgICAgIE9iamVjdC5lbnRyaWVzKG9wdGlvbnNIZWFkZXJzKS5mb3JFYWNoKChba2V5LCB2YWx1ZV0pID0+IHtcclxuICAgICAgICAgICAgaGVhZGVycy5hcHBlbmQoa2V5LCB2YWx1ZSk7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgcmV0dXJuIGhlYWRlcnM7XHJcbiAgICB9XHJcbiAgICBjYXRjaCAoZSkge1xyXG4gICAgICAgIHRocm93IGNyZWF0ZUJyb3dzZXJBdXRoRXJyb3IoZmFpbGVkVG9CdWlsZEhlYWRlcnMpO1xyXG4gICAgfVxyXG59XHJcbi8qKlxyXG4gKiBSZXR1cm5zIG9iamVjdCByZXByZXNlbnRpbmcgcmVzcG9uc2UgaGVhZGVyc1xyXG4gKiBAcGFyYW0gaGVhZGVyc1xyXG4gKiBAcmV0dXJuc1xyXG4gKi9cclxuZnVuY3Rpb24gZ2V0SGVhZGVyRGljdChoZWFkZXJzKSB7XHJcbiAgICB0cnkge1xyXG4gICAgICAgIGNvbnN0IGhlYWRlckRpY3QgPSB7fTtcclxuICAgICAgICBoZWFkZXJzLmZvckVhY2goKHZhbHVlLCBrZXkpID0+IHtcclxuICAgICAgICAgICAgaGVhZGVyRGljdFtrZXldID0gdmFsdWU7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgcmV0dXJuIGhlYWRlckRpY3Q7XHJcbiAgICB9XHJcbiAgICBjYXRjaCAoZSkge1xyXG4gICAgICAgIHRocm93IGNyZWF0ZUJyb3dzZXJBdXRoRXJyb3IoZmFpbGVkVG9QYXJzZUhlYWRlcnMpO1xyXG4gICAgfVxyXG59XG5cbmV4cG9ydCB7IEZldGNoQ2xpZW50IH07XG4vLyMgc291cmNlTWFwcGluZ1VSTD1GZXRjaENsaWVudC5tanMubWFwXG4iLCIvKiEgQGF6dXJlL21zYWwtYnJvd3NlciB2My4yOC4xIDIwMjUtMDEtMTQgKi9cbid1c2Ugc3RyaWN0JztcbmltcG9ydCB7IENvbnN0YW50cywgUHJvdG9jb2xNb2RlLCBTZXJ2ZXJSZXNwb25zZVR5cGUsIEF6dXJlQ2xvdWRJbnN0YW5jZSwgU3R1YlBlcmZvcm1hbmNlQ2xpZW50LCBMb2dnZXIsIGNyZWF0ZUNsaWVudENvbmZpZ3VyYXRpb25FcnJvciwgQ2xpZW50Q29uZmlndXJhdGlvbkVycm9yQ29kZXMsIExvZ0xldmVsLCBERUZBVUxUX1NZU1RFTV9PUFRJT05TLCBTdHViYmVkTmV0d29ya01vZHVsZSB9IGZyb20gJ0BhenVyZS9tc2FsLWNvbW1vbi9icm93c2VyJztcbmltcG9ydCB7IEJyb3dzZXJDYWNoZUxvY2F0aW9uLCBCcm93c2VyQ29uc3RhbnRzIH0gZnJvbSAnLi4vdXRpbHMvQnJvd3NlckNvbnN0YW50cy5tanMnO1xuaW1wb3J0IHsgTmF2aWdhdGlvbkNsaWVudCB9IGZyb20gJy4uL25hdmlnYXRpb24vTmF2aWdhdGlvbkNsaWVudC5tanMnO1xuaW1wb3J0IHsgRmV0Y2hDbGllbnQgfSBmcm9tICcuLi9uZXR3b3JrL0ZldGNoQ2xpZW50Lm1qcyc7XG5pbXBvcnQgeyBnZXRDdXJyZW50VXJpIH0gZnJvbSAnLi4vdXRpbHMvQnJvd3NlclV0aWxzLm1qcyc7XG5cbi8qXHJcbiAqIENvcHlyaWdodCAoYykgTWljcm9zb2Z0IENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLlxyXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgTUlUIExpY2Vuc2UuXHJcbiAqL1xyXG4vLyBEZWZhdWx0IHRpbWVvdXQgZm9yIHBvcHVwIHdpbmRvd3MgYW5kIGlmcmFtZXMgaW4gbWlsbGlzZWNvbmRzXHJcbmNvbnN0IERFRkFVTFRfUE9QVVBfVElNRU9VVF9NUyA9IDYwMDAwO1xyXG5jb25zdCBERUZBVUxUX0lGUkFNRV9USU1FT1VUX01TID0gMTAwMDA7XHJcbmNvbnN0IERFRkFVTFRfUkVESVJFQ1RfVElNRU9VVF9NUyA9IDMwMDAwO1xyXG5jb25zdCBERUZBVUxUX05BVElWRV9CUk9LRVJfSEFORFNIQUtFX1RJTUVPVVRfTVMgPSAyMDAwO1xyXG4vKipcclxuICogTVNBTCBmdW5jdGlvbiB0aGF0IHNldHMgdGhlIGRlZmF1bHQgb3B0aW9ucyB3aGVuIG5vdCBleHBsaWNpdGx5IGNvbmZpZ3VyZWQgZnJvbSBhcHAgZGV2ZWxvcGVyXHJcbiAqXHJcbiAqIEBwYXJhbSBhdXRoXHJcbiAqIEBwYXJhbSBjYWNoZVxyXG4gKiBAcGFyYW0gc3lzdGVtXHJcbiAqXHJcbiAqIEByZXR1cm5zIENvbmZpZ3VyYXRpb24gb2JqZWN0XHJcbiAqL1xyXG5mdW5jdGlvbiBidWlsZENvbmZpZ3VyYXRpb24oeyBhdXRoOiB1c2VySW5wdXRBdXRoLCBjYWNoZTogdXNlcklucHV0Q2FjaGUsIHN5c3RlbTogdXNlcklucHV0U3lzdGVtLCB0ZWxlbWV0cnk6IHVzZXJJbnB1dFRlbGVtZXRyeSwgfSwgaXNCcm93c2VyRW52aXJvbm1lbnQpIHtcclxuICAgIC8vIERlZmF1bHQgYXV0aCBvcHRpb25zIGZvciBicm93c2VyXHJcbiAgICBjb25zdCBERUZBVUxUX0FVVEhfT1BUSU9OUyA9IHtcclxuICAgICAgICBjbGllbnRJZDogQ29uc3RhbnRzLkVNUFRZX1NUUklORyxcclxuICAgICAgICBhdXRob3JpdHk6IGAke0NvbnN0YW50cy5ERUZBVUxUX0FVVEhPUklUWX1gLFxyXG4gICAgICAgIGtub3duQXV0aG9yaXRpZXM6IFtdLFxyXG4gICAgICAgIGNsb3VkRGlzY292ZXJ5TWV0YWRhdGE6IENvbnN0YW50cy5FTVBUWV9TVFJJTkcsXHJcbiAgICAgICAgYXV0aG9yaXR5TWV0YWRhdGE6IENvbnN0YW50cy5FTVBUWV9TVFJJTkcsXHJcbiAgICAgICAgcmVkaXJlY3RVcmk6IHR5cGVvZiB3aW5kb3cgIT09IFwidW5kZWZpbmVkXCIgPyBnZXRDdXJyZW50VXJpKCkgOiBcIlwiLFxyXG4gICAgICAgIHBvc3RMb2dvdXRSZWRpcmVjdFVyaTogQ29uc3RhbnRzLkVNUFRZX1NUUklORyxcclxuICAgICAgICBuYXZpZ2F0ZVRvTG9naW5SZXF1ZXN0VXJsOiB0cnVlLFxyXG4gICAgICAgIGNsaWVudENhcGFiaWxpdGllczogW10sXHJcbiAgICAgICAgcHJvdG9jb2xNb2RlOiBQcm90b2NvbE1vZGUuQUFELFxyXG4gICAgICAgIE9JRENPcHRpb25zOiB7XHJcbiAgICAgICAgICAgIHNlcnZlclJlc3BvbnNlVHlwZTogU2VydmVyUmVzcG9uc2VUeXBlLkZSQUdNRU5ULFxyXG4gICAgICAgICAgICBkZWZhdWx0U2NvcGVzOiBbXHJcbiAgICAgICAgICAgICAgICBDb25zdGFudHMuT1BFTklEX1NDT1BFLFxyXG4gICAgICAgICAgICAgICAgQ29uc3RhbnRzLlBST0ZJTEVfU0NPUEUsXHJcbiAgICAgICAgICAgICAgICBDb25zdGFudHMuT0ZGTElORV9BQ0NFU1NfU0NPUEUsXHJcbiAgICAgICAgICAgIF0sXHJcbiAgICAgICAgfSxcclxuICAgICAgICBhenVyZUNsb3VkT3B0aW9uczoge1xyXG4gICAgICAgICAgICBhenVyZUNsb3VkSW5zdGFuY2U6IEF6dXJlQ2xvdWRJbnN0YW5jZS5Ob25lLFxyXG4gICAgICAgICAgICB0ZW5hbnQ6IENvbnN0YW50cy5FTVBUWV9TVFJJTkcsXHJcbiAgICAgICAgfSxcclxuICAgICAgICBza2lwQXV0aG9yaXR5TWV0YWRhdGFDYWNoZTogZmFsc2UsXHJcbiAgICAgICAgc3VwcG9ydHNOZXN0ZWRBcHBBdXRoOiBmYWxzZSxcclxuICAgICAgICBpbnN0YW5jZUF3YXJlOiBmYWxzZSxcclxuICAgIH07XHJcbiAgICAvLyBEZWZhdWx0IGNhY2hlIG9wdGlvbnMgZm9yIGJyb3dzZXJcclxuICAgIGNvbnN0IERFRkFVTFRfQ0FDSEVfT1BUSU9OUyA9IHtcclxuICAgICAgICBjYWNoZUxvY2F0aW9uOiBCcm93c2VyQ2FjaGVMb2NhdGlvbi5TZXNzaW9uU3RvcmFnZSxcclxuICAgICAgICB0ZW1wb3JhcnlDYWNoZUxvY2F0aW9uOiBCcm93c2VyQ2FjaGVMb2NhdGlvbi5TZXNzaW9uU3RvcmFnZSxcclxuICAgICAgICBzdG9yZUF1dGhTdGF0ZUluQ29va2llOiBmYWxzZSxcclxuICAgICAgICBzZWN1cmVDb29raWVzOiBmYWxzZSxcclxuICAgICAgICAvLyBEZWZhdWx0IGNhY2hlIG1pZ3JhdGlvbiB0byB0cnVlIGlmIGNhY2hlIGxvY2F0aW9uIGlzIGxvY2FsU3RvcmFnZSBzaW5jZSBlbnRyaWVzIGFyZSBwcmVzZXJ2ZWQgYWNyb3NzIHRhYnMvd2luZG93cy4gTWlncmF0aW9uIGhhcyBsaXR0bGUgdG8gbm8gYmVuZWZpdCBpbiBzZXNzaW9uU3RvcmFnZSBhbmQgbWVtb3J5U3RvcmFnZVxyXG4gICAgICAgIGNhY2hlTWlncmF0aW9uRW5hYmxlZDogdXNlcklucHV0Q2FjaGUgJiZcclxuICAgICAgICAgICAgdXNlcklucHV0Q2FjaGUuY2FjaGVMb2NhdGlvbiA9PT0gQnJvd3NlckNhY2hlTG9jYXRpb24uTG9jYWxTdG9yYWdlXHJcbiAgICAgICAgICAgID8gdHJ1ZVxyXG4gICAgICAgICAgICA6IGZhbHNlLFxyXG4gICAgICAgIGNsYWltc0Jhc2VkQ2FjaGluZ0VuYWJsZWQ6IGZhbHNlLFxyXG4gICAgfTtcclxuICAgIC8vIERlZmF1bHQgbG9nZ2VyIG9wdGlvbnMgZm9yIGJyb3dzZXJcclxuICAgIGNvbnN0IERFRkFVTFRfTE9HR0VSX09QVElPTlMgPSB7XHJcbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1lbXB0eS1mdW5jdGlvblxyXG4gICAgICAgIGxvZ2dlckNhbGxiYWNrOiAoKSA9PiB7XHJcbiAgICAgICAgICAgIC8vIGFsbG93IHVzZXJzIHRvIG5vdCBzZXQgbG9nZ2VyIGNhbGwgYmFja1xyXG4gICAgICAgIH0sXHJcbiAgICAgICAgbG9nTGV2ZWw6IExvZ0xldmVsLkluZm8sXHJcbiAgICAgICAgcGlpTG9nZ2luZ0VuYWJsZWQ6IGZhbHNlLFxyXG4gICAgfTtcclxuICAgIC8vIERlZmF1bHQgc3lzdGVtIG9wdGlvbnMgZm9yIGJyb3dzZXJcclxuICAgIGNvbnN0IERFRkFVTFRfQlJPV1NFUl9TWVNURU1fT1BUSU9OUyA9IHtcclxuICAgICAgICAuLi5ERUZBVUxUX1NZU1RFTV9PUFRJT05TLFxyXG4gICAgICAgIGxvZ2dlck9wdGlvbnM6IERFRkFVTFRfTE9HR0VSX09QVElPTlMsXHJcbiAgICAgICAgbmV0d29ya0NsaWVudDogaXNCcm93c2VyRW52aXJvbm1lbnRcclxuICAgICAgICAgICAgPyBuZXcgRmV0Y2hDbGllbnQoKVxyXG4gICAgICAgICAgICA6IFN0dWJiZWROZXR3b3JrTW9kdWxlLFxyXG4gICAgICAgIG5hdmlnYXRpb25DbGllbnQ6IG5ldyBOYXZpZ2F0aW9uQ2xpZW50KCksXHJcbiAgICAgICAgbG9hZEZyYW1lVGltZW91dDogMCxcclxuICAgICAgICAvLyBJZiBsb2FkRnJhbWVUaW1lb3V0IGlzIHByb3ZpZGVkLCB1c2UgdGhhdCBhcyBkZWZhdWx0LlxyXG4gICAgICAgIHdpbmRvd0hhc2hUaW1lb3V0OiB1c2VySW5wdXRTeXN0ZW0/LmxvYWRGcmFtZVRpbWVvdXQgfHwgREVGQVVMVF9QT1BVUF9USU1FT1VUX01TLFxyXG4gICAgICAgIGlmcmFtZUhhc2hUaW1lb3V0OiB1c2VySW5wdXRTeXN0ZW0/LmxvYWRGcmFtZVRpbWVvdXQgfHwgREVGQVVMVF9JRlJBTUVfVElNRU9VVF9NUyxcclxuICAgICAgICBuYXZpZ2F0ZUZyYW1lV2FpdDogMCxcclxuICAgICAgICByZWRpcmVjdE5hdmlnYXRpb25UaW1lb3V0OiBERUZBVUxUX1JFRElSRUNUX1RJTUVPVVRfTVMsXHJcbiAgICAgICAgYXN5bmNQb3B1cHM6IGZhbHNlLFxyXG4gICAgICAgIGFsbG93UmVkaXJlY3RJbklmcmFtZTogZmFsc2UsXHJcbiAgICAgICAgYWxsb3dOYXRpdmVCcm9rZXI6IGZhbHNlLFxyXG4gICAgICAgIG5hdGl2ZUJyb2tlckhhbmRzaGFrZVRpbWVvdXQ6IHVzZXJJbnB1dFN5c3RlbT8ubmF0aXZlQnJva2VySGFuZHNoYWtlVGltZW91dCB8fFxyXG4gICAgICAgICAgICBERUZBVUxUX05BVElWRV9CUk9LRVJfSEFORFNIQUtFX1RJTUVPVVRfTVMsXHJcbiAgICAgICAgcG9sbEludGVydmFsTWlsbGlzZWNvbmRzOiBCcm93c2VyQ29uc3RhbnRzLkRFRkFVTFRfUE9MTF9JTlRFUlZBTF9NUyxcclxuICAgIH07XHJcbiAgICBjb25zdCBwcm92aWRlZFN5c3RlbU9wdGlvbnMgPSB7XHJcbiAgICAgICAgLi4uREVGQVVMVF9CUk9XU0VSX1NZU1RFTV9PUFRJT05TLFxyXG4gICAgICAgIC4uLnVzZXJJbnB1dFN5c3RlbSxcclxuICAgICAgICBsb2dnZXJPcHRpb25zOiB1c2VySW5wdXRTeXN0ZW0/LmxvZ2dlck9wdGlvbnMgfHwgREVGQVVMVF9MT0dHRVJfT1BUSU9OUyxcclxuICAgIH07XHJcbiAgICBjb25zdCBERUZBVUxUX1RFTEVNRVRSWV9PUFRJT05TID0ge1xyXG4gICAgICAgIGFwcGxpY2F0aW9uOiB7XHJcbiAgICAgICAgICAgIGFwcE5hbWU6IENvbnN0YW50cy5FTVBUWV9TVFJJTkcsXHJcbiAgICAgICAgICAgIGFwcFZlcnNpb246IENvbnN0YW50cy5FTVBUWV9TVFJJTkcsXHJcbiAgICAgICAgfSxcclxuICAgICAgICBjbGllbnQ6IG5ldyBTdHViUGVyZm9ybWFuY2VDbGllbnQoKSxcclxuICAgIH07XHJcbiAgICAvLyBUaHJvdyBhbiBlcnJvciBpZiB1c2VyIGhhcyBzZXQgT0lEQ09wdGlvbnMgd2l0aG91dCBiZWluZyBpbiBPSURDIHByb3RvY29sIG1vZGVcclxuICAgIGlmICh1c2VySW5wdXRBdXRoPy5wcm90b2NvbE1vZGUgIT09IFByb3RvY29sTW9kZS5PSURDICYmXHJcbiAgICAgICAgdXNlcklucHV0QXV0aD8uT0lEQ09wdGlvbnMpIHtcclxuICAgICAgICBjb25zdCBsb2dnZXIgPSBuZXcgTG9nZ2VyKHByb3ZpZGVkU3lzdGVtT3B0aW9ucy5sb2dnZXJPcHRpb25zKTtcclxuICAgICAgICBsb2dnZXIud2FybmluZyhKU09OLnN0cmluZ2lmeShjcmVhdGVDbGllbnRDb25maWd1cmF0aW9uRXJyb3IoQ2xpZW50Q29uZmlndXJhdGlvbkVycm9yQ29kZXMuY2Fubm90U2V0T0lEQ09wdGlvbnMpKSk7XHJcbiAgICB9XHJcbiAgICAvLyBUaHJvdyBhbiBlcnJvciBpZiB1c2VyIGhhcyBzZXQgYWxsb3dOYXRpdmVCcm9rZXIgdG8gdHJ1ZSB3aXRob3V0IGJlaW5nIGluIEFBRCBwcm90b2NvbCBtb2RlXHJcbiAgICBpZiAodXNlcklucHV0QXV0aD8ucHJvdG9jb2xNb2RlICYmXHJcbiAgICAgICAgdXNlcklucHV0QXV0aC5wcm90b2NvbE1vZGUgIT09IFByb3RvY29sTW9kZS5BQUQgJiZcclxuICAgICAgICBwcm92aWRlZFN5c3RlbU9wdGlvbnM/LmFsbG93TmF0aXZlQnJva2VyKSB7XHJcbiAgICAgICAgdGhyb3cgY3JlYXRlQ2xpZW50Q29uZmlndXJhdGlvbkVycm9yKENsaWVudENvbmZpZ3VyYXRpb25FcnJvckNvZGVzLmNhbm5vdEFsbG93TmF0aXZlQnJva2VyKTtcclxuICAgIH1cclxuICAgIGNvbnN0IG92ZXJsYXllZENvbmZpZyA9IHtcclxuICAgICAgICBhdXRoOiB7XHJcbiAgICAgICAgICAgIC4uLkRFRkFVTFRfQVVUSF9PUFRJT05TLFxyXG4gICAgICAgICAgICAuLi51c2VySW5wdXRBdXRoLFxyXG4gICAgICAgICAgICBPSURDT3B0aW9uczoge1xyXG4gICAgICAgICAgICAgICAgLi4uREVGQVVMVF9BVVRIX09QVElPTlMuT0lEQ09wdGlvbnMsXHJcbiAgICAgICAgICAgICAgICAuLi51c2VySW5wdXRBdXRoPy5PSURDT3B0aW9ucyxcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICB9LFxyXG4gICAgICAgIGNhY2hlOiB7IC4uLkRFRkFVTFRfQ0FDSEVfT1BUSU9OUywgLi4udXNlcklucHV0Q2FjaGUgfSxcclxuICAgICAgICBzeXN0ZW06IHByb3ZpZGVkU3lzdGVtT3B0aW9ucyxcclxuICAgICAgICB0ZWxlbWV0cnk6IHsgLi4uREVGQVVMVF9URUxFTUVUUllfT1BUSU9OUywgLi4udXNlcklucHV0VGVsZW1ldHJ5IH0sXHJcbiAgICB9O1xyXG4gICAgcmV0dXJuIG92ZXJsYXllZENvbmZpZztcclxufVxuXG5leHBvcnQgeyBERUZBVUxUX0lGUkFNRV9USU1FT1VUX01TLCBERUZBVUxUX05BVElWRV9CUk9LRVJfSEFORFNIQUtFX1RJTUVPVVRfTVMsIERFRkFVTFRfUE9QVVBfVElNRU9VVF9NUywgREVGQVVMVF9SRURJUkVDVF9USU1FT1VUX01TLCBidWlsZENvbmZpZ3VyYXRpb24gfTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPUNvbmZpZ3VyYXRpb24ubWpzLm1hcFxuIiwiLyohIEBhenVyZS9tc2FsLWJyb3dzZXIgdjMuMjguMSAyMDI1LTAxLTE0ICovXG4ndXNlIHN0cmljdCc7XG4vKiBlc2xpbnQtZGlzYWJsZSBoZWFkZXIvaGVhZGVyICovXHJcbmNvbnN0IG5hbWUgPSBcIkBhenVyZS9tc2FsLWJyb3dzZXJcIjtcclxuY29uc3QgdmVyc2lvbiA9IFwiMy4yOC4xXCI7XG5cbmV4cG9ydCB7IG5hbWUsIHZlcnNpb24gfTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXBhY2thZ2VNZXRhZGF0YS5tanMubWFwXG4iLCIvKiEgQGF6dXJlL21zYWwtYnJvd3NlciB2My4yOC4xIDIwMjUtMDEtMTQgKi9cbid1c2Ugc3RyaWN0JztcbmltcG9ydCB7IExvZ0xldmVsLCBMb2dnZXIgfSBmcm9tICdAYXp1cmUvbXNhbC1jb21tb24vYnJvd3Nlcic7XG5pbXBvcnQgeyBidWlsZENvbmZpZ3VyYXRpb24gfSBmcm9tICcuLi9jb25maWcvQ29uZmlndXJhdGlvbi5tanMnO1xuaW1wb3J0IHsgbmFtZSwgdmVyc2lvbiB9IGZyb20gJy4uL3BhY2thZ2VNZXRhZGF0YS5tanMnO1xuaW1wb3J0IHsgQnJvd3NlckNhY2hlTG9jYXRpb24sIExPR19MRVZFTF9DQUNIRV9LRVksIExPR19QSUlfQ0FDSEVfS0VZIH0gZnJvbSAnLi4vdXRpbHMvQnJvd3NlckNvbnN0YW50cy5tanMnO1xuXG4vKlxyXG4gKiBDb3B5cmlnaHQgKGMpIE1pY3Jvc29mdCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cclxuICogTGljZW5zZWQgdW5kZXIgdGhlIE1JVCBMaWNlbnNlLlxyXG4gKi9cclxuLyoqXHJcbiAqIEJhc2UgY2xhc3MgZm9yIG9wZXJhdGluZyBjb250ZXh0XHJcbiAqIE9wZXJhdGluZyBjb250ZXh0cyBhcmUgY29udGV4dHMgaW4gd2hpY2ggTVNBTC5qcyBpcyBiZWluZyBydW5cclxuICogTW9yZSB0aGFuIG9uZSBvcGVyYXRpbmcgY29udGV4dCBtYXkgYmUgYXZhaWxhYmxlIGF0IGEgdGltZVxyXG4gKiBJdCdzIGltcG9ydGFudCBmcm9tIGEgbG9nZ2luZyBhbmQgdGVsZW1ldHJ5IHBvaW50IG9mIHZpZXcgZm9yIHVzIHRvIGJlIGFibGUgdG8gaWRlbnRpZnkgdGhlIG9wZXJhdGluZyBjb250ZXh0LlxyXG4gKiBGb3IgZXhhbXBsZTogU29tZSBvcGVyYXRpbmcgY29udGV4dHMgd2lsbCBwcmUtY2FjaGUgdG9rZW5zIGltcGFjdGluZyBwZXJmb3JtYW5jZSB0ZWxlbWV0cnlcclxuICovXHJcbmNsYXNzIEJhc2VPcGVyYXRpbmdDb250ZXh0IHtcclxuICAgIHN0YXRpYyBsb2dnZXJDYWxsYmFjayhsZXZlbCwgbWVzc2FnZSkge1xyXG4gICAgICAgIHN3aXRjaCAobGV2ZWwpIHtcclxuICAgICAgICAgICAgY2FzZSBMb2dMZXZlbC5FcnJvcjpcclxuICAgICAgICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1jb25zb2xlXHJcbiAgICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKG1lc3NhZ2UpO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICBjYXNlIExvZ0xldmVsLkluZm86XHJcbiAgICAgICAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tY29uc29sZVxyXG4gICAgICAgICAgICAgICAgY29uc29sZS5pbmZvKG1lc3NhZ2UpO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICBjYXNlIExvZ0xldmVsLlZlcmJvc2U6XHJcbiAgICAgICAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tY29uc29sZVxyXG4gICAgICAgICAgICAgICAgY29uc29sZS5kZWJ1ZyhtZXNzYWdlKTtcclxuICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgY2FzZSBMb2dMZXZlbC5XYXJuaW5nOlxyXG4gICAgICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWNvbnNvbGVcclxuICAgICAgICAgICAgICAgIGNvbnNvbGUud2FybihtZXNzYWdlKTtcclxuICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgZGVmYXVsdDpcclxuICAgICAgICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1jb25zb2xlXHJcbiAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhtZXNzYWdlKTtcclxuICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBjb25zdHJ1Y3Rvcihjb25maWcpIHtcclxuICAgICAgICAvKlxyXG4gICAgICAgICAqIElmIGxvYWRlZCBpbiBhbiBlbnZpcm9ubWVudCB3aGVyZSB3aW5kb3cgaXMgbm90IGF2YWlsYWJsZSxcclxuICAgICAgICAgKiBzZXQgaW50ZXJuYWwgZmxhZyB0byBmYWxzZSBzbyB0aGF0IGZ1cnRoZXIgcmVxdWVzdHMgZmFpbC5cclxuICAgICAgICAgKiBUaGlzIGlzIHRvIHN1cHBvcnQgc2VydmVyLXNpZGUgcmVuZGVyaW5nIGVudmlyb25tZW50cy5cclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLmJyb3dzZXJFbnZpcm9ubWVudCA9IHR5cGVvZiB3aW5kb3cgIT09IFwidW5kZWZpbmVkXCI7XHJcbiAgICAgICAgdGhpcy5jb25maWcgPSBidWlsZENvbmZpZ3VyYXRpb24oY29uZmlnLCB0aGlzLmJyb3dzZXJFbnZpcm9ubWVudCk7XHJcbiAgICAgICAgbGV0IHNlc3Npb25TdG9yYWdlO1xyXG4gICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgIHNlc3Npb25TdG9yYWdlID0gd2luZG93W0Jyb3dzZXJDYWNoZUxvY2F0aW9uLlNlc3Npb25TdG9yYWdlXTtcclxuICAgICAgICAgICAgLy8gTXV0ZSBlcnJvcnMgaWYgaXQncyBhIG5vbi1icm93c2VyIGVudmlyb25tZW50IG9yIGNvb2tpZXMgYXJlIGJsb2NrZWQuXHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNhdGNoIChlKSB7IH1cclxuICAgICAgICBjb25zdCBsb2dMZXZlbEtleSA9IHNlc3Npb25TdG9yYWdlPy5nZXRJdGVtKExPR19MRVZFTF9DQUNIRV9LRVkpO1xyXG4gICAgICAgIGNvbnN0IHBpaUxvZ2dpbmdLZXkgPSBzZXNzaW9uU3RvcmFnZVxyXG4gICAgICAgICAgICA/LmdldEl0ZW0oTE9HX1BJSV9DQUNIRV9LRVkpXHJcbiAgICAgICAgICAgID8udG9Mb3dlckNhc2UoKTtcclxuICAgICAgICBjb25zdCBwaWlMb2dnaW5nRW5hYmxlZCA9IHBpaUxvZ2dpbmdLZXkgPT09IFwidHJ1ZVwiXHJcbiAgICAgICAgICAgID8gdHJ1ZVxyXG4gICAgICAgICAgICA6IHBpaUxvZ2dpbmdLZXkgPT09IFwiZmFsc2VcIlxyXG4gICAgICAgICAgICAgICAgPyBmYWxzZVxyXG4gICAgICAgICAgICAgICAgOiB1bmRlZmluZWQ7XHJcbiAgICAgICAgY29uc3QgbG9nZ2VyT3B0aW9ucyA9IHsgLi4udGhpcy5jb25maWcuc3lzdGVtLmxvZ2dlck9wdGlvbnMgfTtcclxuICAgICAgICBjb25zdCBsb2dMZXZlbCA9IGxvZ0xldmVsS2V5ICYmIE9iamVjdC5rZXlzKExvZ0xldmVsKS5pbmNsdWRlcyhsb2dMZXZlbEtleSlcclxuICAgICAgICAgICAgPyBMb2dMZXZlbFtsb2dMZXZlbEtleV1cclxuICAgICAgICAgICAgOiB1bmRlZmluZWQ7XHJcbiAgICAgICAgaWYgKGxvZ0xldmVsKSB7XHJcbiAgICAgICAgICAgIGxvZ2dlck9wdGlvbnMubG9nZ2VyQ2FsbGJhY2sgPSBCYXNlT3BlcmF0aW5nQ29udGV4dC5sb2dnZXJDYWxsYmFjaztcclxuICAgICAgICAgICAgbG9nZ2VyT3B0aW9ucy5sb2dMZXZlbCA9IGxvZ0xldmVsO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAocGlpTG9nZ2luZ0VuYWJsZWQgIT09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgICAgICBsb2dnZXJPcHRpb25zLnBpaUxvZ2dpbmdFbmFibGVkID0gcGlpTG9nZ2luZ0VuYWJsZWQ7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMubG9nZ2VyID0gbmV3IExvZ2dlcihsb2dnZXJPcHRpb25zLCBuYW1lLCB2ZXJzaW9uKTtcclxuICAgICAgICB0aGlzLmF2YWlsYWJsZSA9IGZhbHNlO1xyXG4gICAgfVxyXG4gICAgLyoqXHJcbiAgICAgKiBSZXR1cm4gdGhlIE1TQUwgY29uZmlnXHJcbiAgICAgKiBAcmV0dXJucyBCcm93c2VyQ29uZmlndXJhdGlvblxyXG4gICAgICovXHJcbiAgICBnZXRDb25maWcoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuY29uZmlnO1xyXG4gICAgfVxyXG4gICAgLyoqXHJcbiAgICAgKiBSZXR1cm5zIHRoZSBNU0FMIExvZ2dlclxyXG4gICAgICogQHJldHVybnMgTG9nZ2VyXHJcbiAgICAgKi9cclxuICAgIGdldExvZ2dlcigpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5sb2dnZXI7XHJcbiAgICB9XHJcbiAgICBpc0F2YWlsYWJsZSgpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5hdmFpbGFibGU7XHJcbiAgICB9XHJcbiAgICBpc0Jyb3dzZXJFbnZpcm9ubWVudCgpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5icm93c2VyRW52aXJvbm1lbnQ7XHJcbiAgICB9XHJcbn1cblxuZXhwb3J0IHsgQmFzZU9wZXJhdGluZ0NvbnRleHQgfTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPUJhc2VPcGVyYXRpbmdDb250ZXh0Lm1qcy5tYXBcbiIsIi8qISBAYXp1cmUvbXNhbC1icm93c2VyIHYzLjI4LjEgMjAyNS0wMS0xNCAqL1xuJ3VzZSBzdHJpY3QnO1xuLypcclxuICogQ29weXJpZ2h0IChjKSBNaWNyb3NvZnQgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuXHJcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgTGljZW5zZS5cclxuICovXHJcbmNvbnN0IEJyaWRnZVN0YXR1c0NvZGUgPSB7XHJcbiAgICBVc2VySW50ZXJhY3Rpb25SZXF1aXJlZDogXCJVU0VSX0lOVEVSQUNUSU9OX1JFUVVJUkVEXCIsXHJcbiAgICBVc2VyQ2FuY2VsOiBcIlVTRVJfQ0FOQ0VMXCIsXHJcbiAgICBOb05ldHdvcms6IFwiTk9fTkVUV09SS1wiLFxyXG4gICAgVHJhbnNpZW50RXJyb3I6IFwiVFJBTlNJRU5UX0VSUk9SXCIsXHJcbiAgICBQZXJzaXN0ZW50RXJyb3I6IFwiUEVSU0lTVEVOVF9FUlJPUlwiLFxyXG4gICAgRGlzYWJsZWQ6IFwiRElTQUJMRURcIixcclxuICAgIEFjY291bnRVbmF2YWlsYWJsZTogXCJBQ0NPVU5UX1VOQVZBSUxBQkxFXCIsXHJcbiAgICBOZXN0ZWRBcHBBdXRoVW5hdmFpbGFibGU6IFwiTkVTVEVEX0FQUF9BVVRIX1VOQVZBSUxBQkxFXCIsIC8vIE5BQSBpcyB1bmF2YWlsYWJsZSBpbiB0aGUgY3VycmVudCBjb250ZXh0LCBjYW4gcmV0cnkgd2l0aCBzdGFuZGFyZCBicm93c2VyIGJhc2VkIGF1dGhcclxufTtcblxuZXhwb3J0IHsgQnJpZGdlU3RhdHVzQ29kZSB9O1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9QnJpZGdlU3RhdHVzQ29kZS5tanMubWFwXG4iLCIvKiEgQGF6dXJlL21zYWwtYnJvd3NlciB2My4yOC4xIDIwMjUtMDEtMTQgKi9cbid1c2Ugc3RyaWN0JztcbmltcG9ydCB7IEJyaWRnZVN0YXR1c0NvZGUgfSBmcm9tICcuL0JyaWRnZVN0YXR1c0NvZGUubWpzJztcbmltcG9ydCB7IGNyZWF0ZU5ld0d1aWQgfSBmcm9tICcuLi9jcnlwdG8vQnJvd3NlckNyeXB0by5tanMnO1xuaW1wb3J0IHsgQnJvd3NlckNvbnN0YW50cyB9IGZyb20gJy4uL3V0aWxzL0Jyb3dzZXJDb25zdGFudHMubWpzJztcbmltcG9ydCB7IHZlcnNpb24gfSBmcm9tICcuLi9wYWNrYWdlTWV0YWRhdGEubWpzJztcblxuLypcclxuICogQ29weXJpZ2h0IChjKSBNaWNyb3NvZnQgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuXHJcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgTGljZW5zZS5cclxuICovXHJcbi8qKlxyXG4gKiBCcmlkZ2VQcm94eVxyXG4gKiBQcm92aWRlcyBhIHByb3h5IGZvciBhY2Nlc3NpbmcgYSBicmlkZ2UgdG8gYSBob3N0IGFwcCBhbmQvb3JcclxuICogcGxhdGZvcm0gYnJva2VyXHJcbiAqL1xyXG5jbGFzcyBCcmlkZ2VQcm94eSB7XHJcbiAgICAvKipcclxuICAgICAqIGluaXRpYWxpemVOZXN0ZWRBcHBBdXRoQnJpZGdlIC0gSW5pdGlhbGl6ZXMgdGhlIGJyaWRnZSB0byB0aGUgaG9zdCBhcHBcclxuICAgICAqIEByZXR1cm5zIGEgcHJvbWlzZSB0aGF0IHJlc29sdmVzIHRvIGFuIEluaXRpYWxpemVCcmlkZ2VSZXNwb25zZSBvciByZWplY3RzIHdpdGggYW4gRXJyb3JcclxuICAgICAqIEByZW1hcmtzIFRoaXMgbWV0aG9kIHdpbGwgYmUgY2FsbGVkIGJ5IHRoZSBjcmVhdGUgZmFjdG9yeSBtZXRob2RcclxuICAgICAqIEByZW1hcmtzIElmIHRoZSBicmlkZ2UgaXMgbm90IGF2YWlsYWJsZSwgdGhpcyBtZXRob2Qgd2lsbCB0aHJvdyBhbiBlcnJvclxyXG4gICAgICovXHJcbiAgICBzdGF0aWMgYXN5bmMgaW5pdGlhbGl6ZU5lc3RlZEFwcEF1dGhCcmlkZ2UoKSB7XHJcbiAgICAgICAgaWYgKHdpbmRvdyA9PT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIndpbmRvdyBpcyB1bmRlZmluZWRcIik7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICh3aW5kb3cubmVzdGVkQXBwQXV0aEJyaWRnZSA9PT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIndpbmRvdy5uZXN0ZWRBcHBBdXRoQnJpZGdlIGlzIHVuZGVmaW5lZFwiKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgd2luZG93Lm5lc3RlZEFwcEF1dGhCcmlkZ2UuYWRkRXZlbnRMaXN0ZW5lcihcIm1lc3NhZ2VcIiwgKHJlc3BvbnNlKSA9PiB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCByZXNwb25zZVBheWxvYWQgPSB0eXBlb2YgcmVzcG9uc2UgPT09IFwic3RyaW5nXCIgPyByZXNwb25zZSA6IHJlc3BvbnNlLmRhdGE7XHJcbiAgICAgICAgICAgICAgICBjb25zdCByZXNwb25zZUVudmVsb3BlID0gSlNPTi5wYXJzZShyZXNwb25zZVBheWxvYWQpO1xyXG4gICAgICAgICAgICAgICAgY29uc3QgcmVxdWVzdCA9IEJyaWRnZVByb3h5LmJyaWRnZVJlcXVlc3RzLmZpbmQoKGVsZW1lbnQpID0+IGVsZW1lbnQucmVxdWVzdElkID09PSByZXNwb25zZUVudmVsb3BlLnJlcXVlc3RJZCk7XHJcbiAgICAgICAgICAgICAgICBpZiAocmVxdWVzdCAhPT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgQnJpZGdlUHJveHkuYnJpZGdlUmVxdWVzdHMuc3BsaWNlKEJyaWRnZVByb3h5LmJyaWRnZVJlcXVlc3RzLmluZGV4T2YocmVxdWVzdCksIDEpO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChyZXNwb25zZUVudmVsb3BlLnN1Y2Nlc3MpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmVxdWVzdC5yZXNvbHZlKHJlc3BvbnNlRW52ZWxvcGUpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmVxdWVzdC5yZWplY3QocmVzcG9uc2VFbnZlbG9wZS5lcnJvcik7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgY29uc3QgYnJpZGdlUmVzcG9uc2UgPSBhd2FpdCBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBtZXNzYWdlID0gQnJpZGdlUHJveHkuYnVpbGRSZXF1ZXN0KFwiR2V0SW5pdENvbnRleHRcIik7XHJcbiAgICAgICAgICAgICAgICBjb25zdCByZXF1ZXN0ID0ge1xyXG4gICAgICAgICAgICAgICAgICAgIHJlcXVlc3RJZDogbWVzc2FnZS5yZXF1ZXN0SWQsXHJcbiAgICAgICAgICAgICAgICAgICAgbWV0aG9kOiBtZXNzYWdlLm1ldGhvZCxcclxuICAgICAgICAgICAgICAgICAgICByZXNvbHZlOiByZXNvbHZlLFxyXG4gICAgICAgICAgICAgICAgICAgIHJlamVjdDogcmVqZWN0LFxyXG4gICAgICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgICAgIEJyaWRnZVByb3h5LmJyaWRnZVJlcXVlc3RzLnB1c2gocmVxdWVzdCk7XHJcbiAgICAgICAgICAgICAgICB3aW5kb3cubmVzdGVkQXBwQXV0aEJyaWRnZS5wb3N0TWVzc2FnZShKU09OLnN0cmluZ2lmeShtZXNzYWdlKSk7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICByZXR1cm4gQnJpZGdlUHJveHkudmFsaWRhdGVCcmlkZ2VSZXN1bHRPclRocm93KGJyaWRnZVJlc3BvbnNlLmluaXRDb250ZXh0KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgY2F0Y2ggKGVycm9yKSB7XHJcbiAgICAgICAgICAgIHdpbmRvdy5jb25zb2xlLmxvZyhlcnJvcik7XHJcbiAgICAgICAgICAgIHRocm93IGVycm9yO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIC8qKlxyXG4gICAgICogZ2V0VG9rZW5JbnRlcmFjdGl2ZSAtIEF0dGVtcHRzIHRvIGdldCBhIHRva2VuIGludGVyYWN0aXZlbHkgZnJvbSB0aGUgYnJpZGdlXHJcbiAgICAgKiBAcGFyYW0gcmVxdWVzdCBBIHRva2VuIHJlcXVlc3RcclxuICAgICAqIEByZXR1cm5zIGEgcHJvbWlzZSB0aGF0IHJlc29sdmVzIHRvIGFuIGF1dGggcmVzdWx0IG9yIHJlamVjdHMgd2l0aCBhIEJyaWRnZUVycm9yXHJcbiAgICAgKi9cclxuICAgIGdldFRva2VuSW50ZXJhY3RpdmUocmVxdWVzdCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmdldFRva2VuKFwiR2V0VG9rZW5Qb3B1cFwiLCByZXF1ZXN0KTtcclxuICAgIH1cclxuICAgIC8qKlxyXG4gICAgICogZ2V0VG9rZW5TaWxlbnQgQXR0ZW1wdHMgdG8gZ2V0IGEgdG9rZW4gc2lsZW50bHkgZnJvbSB0aGUgYnJpZGdlXHJcbiAgICAgKiBAcGFyYW0gcmVxdWVzdCBBIHRva2VuIHJlcXVlc3RcclxuICAgICAqIEByZXR1cm5zIGEgcHJvbWlzZSB0aGF0IHJlc29sdmVzIHRvIGFuIGF1dGggcmVzdWx0IG9yIHJlamVjdHMgd2l0aCBhIEJyaWRnZUVycm9yXHJcbiAgICAgKi9cclxuICAgIGdldFRva2VuU2lsZW50KHJlcXVlc3QpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5nZXRUb2tlbihcIkdldFRva2VuXCIsIHJlcXVlc3QpO1xyXG4gICAgfVxyXG4gICAgYXN5bmMgZ2V0VG9rZW4ocmVxdWVzdFR5cGUsIHJlcXVlc3QpIHtcclxuICAgICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCB0aGlzLnNlbmRSZXF1ZXN0KHJlcXVlc3RUeXBlLCB7XHJcbiAgICAgICAgICAgIHRva2VuUGFyYW1zOiByZXF1ZXN0LFxyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgIHRva2VuOiBCcmlkZ2VQcm94eS52YWxpZGF0ZUJyaWRnZVJlc3VsdE9yVGhyb3cocmVzdWx0LnRva2VuKSxcclxuICAgICAgICAgICAgYWNjb3VudDogQnJpZGdlUHJveHkudmFsaWRhdGVCcmlkZ2VSZXN1bHRPclRocm93KHJlc3VsdC5hY2NvdW50KSxcclxuICAgICAgICB9O1xyXG4gICAgfVxyXG4gICAgZ2V0SG9zdENhcGFiaWxpdGllcygpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5jYXBhYmlsaXRpZXMgPz8gbnVsbDtcclxuICAgIH1cclxuICAgIGdldEFjY291bnRDb250ZXh0KCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmFjY291bnRDb250ZXh0ID8gdGhpcy5hY2NvdW50Q29udGV4dCA6IG51bGw7XHJcbiAgICB9XHJcbiAgICBzdGF0aWMgYnVpbGRSZXF1ZXN0KG1ldGhvZCwgcmVxdWVzdFBhcmFtcykge1xyXG4gICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgIG1lc3NhZ2VUeXBlOiBcIk5lc3RlZEFwcEF1dGhSZXF1ZXN0XCIsXHJcbiAgICAgICAgICAgIG1ldGhvZDogbWV0aG9kLFxyXG4gICAgICAgICAgICByZXF1ZXN0SWQ6IGNyZWF0ZU5ld0d1aWQoKSxcclxuICAgICAgICAgICAgc2VuZFRpbWU6IERhdGUubm93KCksXHJcbiAgICAgICAgICAgIGNsaWVudExpYnJhcnk6IEJyb3dzZXJDb25zdGFudHMuTVNBTF9TS1UsXHJcbiAgICAgICAgICAgIGNsaWVudExpYnJhcnlWZXJzaW9uOiB2ZXJzaW9uLFxyXG4gICAgICAgICAgICAuLi5yZXF1ZXN0UGFyYW1zLFxyXG4gICAgICAgIH07XHJcbiAgICB9XHJcbiAgICAvKipcclxuICAgICAqIEEgbWV0aG9kIHVzZWQgdG8gc2VuZCBhIHJlcXVlc3QgdG8gdGhlIGJyaWRnZVxyXG4gICAgICogQHBhcmFtIHJlcXVlc3QgQSB0b2tlbiByZXF1ZXN0XHJcbiAgICAgKiBAcmV0dXJucyBhIHByb21pc2UgdGhhdCByZXNvbHZlcyB0byBhIHJlc3BvbnNlIG9mIHByb3ZpZGVkIHR5cGUgb3IgcmVqZWN0cyB3aXRoIGEgQnJpZGdlRXJyb3JcclxuICAgICAqL1xyXG4gICAgc2VuZFJlcXVlc3QobWV0aG9kLCByZXF1ZXN0UGFyYW1zKSB7XHJcbiAgICAgICAgY29uc3QgbWVzc2FnZSA9IEJyaWRnZVByb3h5LmJ1aWxkUmVxdWVzdChtZXRob2QsIHJlcXVlc3RQYXJhbXMpO1xyXG4gICAgICAgIGNvbnN0IHByb21pc2UgPSBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XHJcbiAgICAgICAgICAgIGNvbnN0IHJlcXVlc3QgPSB7XHJcbiAgICAgICAgICAgICAgICByZXF1ZXN0SWQ6IG1lc3NhZ2UucmVxdWVzdElkLFxyXG4gICAgICAgICAgICAgICAgbWV0aG9kOiBtZXNzYWdlLm1ldGhvZCxcclxuICAgICAgICAgICAgICAgIHJlc29sdmU6IHJlc29sdmUsXHJcbiAgICAgICAgICAgICAgICByZWplY3Q6IHJlamVjdCxcclxuICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgQnJpZGdlUHJveHkuYnJpZGdlUmVxdWVzdHMucHVzaChyZXF1ZXN0KTtcclxuICAgICAgICAgICAgd2luZG93Lm5lc3RlZEFwcEF1dGhCcmlkZ2UucG9zdE1lc3NhZ2UoSlNPTi5zdHJpbmdpZnkobWVzc2FnZSkpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIHJldHVybiBwcm9taXNlO1xyXG4gICAgfVxyXG4gICAgc3RhdGljIHZhbGlkYXRlQnJpZGdlUmVzdWx0T3JUaHJvdyhpbnB1dCkge1xyXG4gICAgICAgIGlmIChpbnB1dCA9PT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGJyaWRnZUVycm9yID0ge1xyXG4gICAgICAgICAgICAgICAgc3RhdHVzOiBCcmlkZ2VTdGF0dXNDb2RlLk5lc3RlZEFwcEF1dGhVbmF2YWlsYWJsZSxcclxuICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgdGhyb3cgYnJpZGdlRXJyb3I7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBpbnB1dDtcclxuICAgIH1cclxuICAgIC8qKlxyXG4gICAgICogUHJpdmF0ZSBjb25zdHJ1Y3RvciBmb3IgQnJpZGdlUHJveHlcclxuICAgICAqIEBwYXJhbSBzZGtOYW1lIFRoZSBuYW1lIG9mIHRoZSBTREsgYmVpbmcgdXNlZCB0byBtYWtlIHJlcXVlc3RzIG9uIGJlaGFsZiBvZiB0aGUgYXBwXHJcbiAgICAgKiBAcGFyYW0gc2RrVmVyc2lvbiBUaGUgdmVyc2lvbiBvZiB0aGUgU0RLIGJlaW5nIHVzZWQgdG8gbWFrZSByZXF1ZXN0cyBvbiBiZWhhbGYgb2YgdGhlIGFwcFxyXG4gICAgICogQHBhcmFtIGNhcGFiaWxpdGllcyBUaGUgY2FwYWJpbGl0aWVzIG9mIHRoZSBicmlkZ2UgLyBTREsgLyBwbGF0Zm9ybSBicm9rZXJcclxuICAgICAqL1xyXG4gICAgY29uc3RydWN0b3Ioc2RrTmFtZSwgc2RrVmVyc2lvbiwgYWNjb3VudENvbnRleHQsIGNhcGFiaWxpdGllcykge1xyXG4gICAgICAgIHRoaXMuc2RrTmFtZSA9IHNka05hbWU7XHJcbiAgICAgICAgdGhpcy5zZGtWZXJzaW9uID0gc2RrVmVyc2lvbjtcclxuICAgICAgICB0aGlzLmFjY291bnRDb250ZXh0ID0gYWNjb3VudENvbnRleHQ7XHJcbiAgICAgICAgdGhpcy5jYXBhYmlsaXRpZXMgPSBjYXBhYmlsaXRpZXM7XHJcbiAgICB9XHJcbiAgICAvKipcclxuICAgICAqIEZhY3RvcnkgbWV0aG9kIGZvciBjcmVhdGluZyBhbiBpbXBsZW1lbnRhdGlvbiBvZiBJQnJpZGdlUHJveHlcclxuICAgICAqIEByZXR1cm5zIEEgcHJvbWlzZSB0aGF0IHJlc29sdmVzIHRvIGEgQnJpZGdlUHJveHkgaW1wbGVtZW50YXRpb25cclxuICAgICAqL1xyXG4gICAgc3RhdGljIGFzeW5jIGNyZWF0ZSgpIHtcclxuICAgICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IEJyaWRnZVByb3h5LmluaXRpYWxpemVOZXN0ZWRBcHBBdXRoQnJpZGdlKCk7XHJcbiAgICAgICAgcmV0dXJuIG5ldyBCcmlkZ2VQcm94eShyZXNwb25zZS5zZGtOYW1lLCByZXNwb25zZS5zZGtWZXJzaW9uLCByZXNwb25zZS5hY2NvdW50Q29udGV4dCwgcmVzcG9uc2UuY2FwYWJpbGl0aWVzKTtcclxuICAgIH1cclxufVxyXG5CcmlkZ2VQcm94eS5icmlkZ2VSZXF1ZXN0cyA9IFtdO1xuXG5leHBvcnQgeyBCcmlkZ2VQcm94eSwgQnJpZGdlUHJveHkgYXMgZGVmYXVsdCB9O1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9QnJpZGdlUHJveHkubWpzLm1hcFxuIiwiLyohIEBhenVyZS9tc2FsLWJyb3dzZXIgdjMuMjguMSAyMDI1LTAxLTE0ICovXG4ndXNlIHN0cmljdCc7XG5pbXBvcnQgeyBCYXNlT3BlcmF0aW5nQ29udGV4dCB9IGZyb20gJy4vQmFzZU9wZXJhdGluZ0NvbnRleHQubWpzJztcbmltcG9ydCB7IEJyaWRnZVByb3h5IH0gZnJvbSAnLi4vbmFhL0JyaWRnZVByb3h5Lm1qcyc7XG5cbi8qXHJcbiAqIENvcHlyaWdodCAoYykgTWljcm9zb2Z0IENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLlxyXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgTUlUIExpY2Vuc2UuXHJcbiAqL1xyXG5jbGFzcyBOZXN0ZWRBcHBPcGVyYXRpbmdDb250ZXh0IGV4dGVuZHMgQmFzZU9wZXJhdGluZ0NvbnRleHQge1xyXG4gICAgY29uc3RydWN0b3IoKSB7XHJcbiAgICAgICAgc3VwZXIoLi4uYXJndW1lbnRzKTtcclxuICAgICAgICB0aGlzLmJyaWRnZVByb3h5ID0gdW5kZWZpbmVkO1xyXG4gICAgICAgIHRoaXMuYWNjb3VudENvbnRleHQgPSBudWxsO1xyXG4gICAgfVxyXG4gICAgLyoqXHJcbiAgICAgKiBSZXR1cm4gdGhlIG1vZHVsZSBuYW1lLiAgSW50ZW5kZWQgZm9yIHVzZSB3aXRoIGltcG9ydCgpIHRvIGVuYWJsZSBkeW5hbWljIGltcG9ydFxyXG4gICAgICogb2YgdGhlIGltcGxlbWVudGF0aW9uIGFzc29jaWF0ZWQgd2l0aCB0aGlzIG9wZXJhdGluZyBjb250ZXh0XHJcbiAgICAgKiBAcmV0dXJuc1xyXG4gICAgICovXHJcbiAgICBnZXRNb2R1bGVOYW1lKCkge1xyXG4gICAgICAgIHJldHVybiBOZXN0ZWRBcHBPcGVyYXRpbmdDb250ZXh0Lk1PRFVMRV9OQU1FO1xyXG4gICAgfVxyXG4gICAgLyoqXHJcbiAgICAgKiBSZXR1cm5zIHRoZSB1bmlxdWUgaWRlbnRpZmllciBmb3IgdGhpcyBvcGVyYXRpbmcgY29udGV4dFxyXG4gICAgICogQHJldHVybnMgc3RyaW5nXHJcbiAgICAgKi9cclxuICAgIGdldElkKCkge1xyXG4gICAgICAgIHJldHVybiBOZXN0ZWRBcHBPcGVyYXRpbmdDb250ZXh0LklEO1xyXG4gICAgfVxyXG4gICAgLyoqXHJcbiAgICAgKiBSZXR1cm5zIHRoZSBjdXJyZW50IEJyaWRnZVByb3h5XHJcbiAgICAgKiBAcmV0dXJucyBJQnJpZGdlUHJveHkgfCB1bmRlZmluZWRcclxuICAgICAqL1xyXG4gICAgZ2V0QnJpZGdlUHJveHkoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuYnJpZGdlUHJveHk7XHJcbiAgICB9XHJcbiAgICAvKipcclxuICAgICAqIENoZWNrcyB3aGV0aGVyIHRoZSBvcGVyYXRpbmcgY29udGV4dCBpcyBhdmFpbGFibGUuXHJcbiAgICAgKiBDb25maXJtcyB0aGF0IHRoZSBjb2RlIGlzIHJ1bm5pbmcgYSBicm93c2VyIHJhdGhlci4gIFRoaXMgaXMgcmVxdWlyZWQuXHJcbiAgICAgKiBAcmV0dXJucyBQcm9taXNlPGJvb2xlYW4+IGluZGljYXRpbmcgd2hldGhlciB0aGlzIG9wZXJhdGluZyBjb250ZXh0IGlzIGN1cnJlbnRseSBhdmFpbGFibGUuXHJcbiAgICAgKi9cclxuICAgIGFzeW5jIGluaXRpYWxpemUoKSB7XHJcbiAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgaWYgKHR5cGVvZiB3aW5kb3cgIT09IFwidW5kZWZpbmVkXCIpIHtcclxuICAgICAgICAgICAgICAgIGlmICh0eXBlb2Ygd2luZG93Ll9faW5pdGlhbGl6ZU5lc3RlZEFwcEF1dGggPT09IFwiZnVuY3Rpb25cIikge1xyXG4gICAgICAgICAgICAgICAgICAgIGF3YWl0IHdpbmRvdy5fX2luaXRpYWxpemVOZXN0ZWRBcHBBdXRoKCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBjb25zdCBicmlkZ2VQcm94eSA9IGF3YWl0IEJyaWRnZVByb3h5LmNyZWF0ZSgpO1xyXG4gICAgICAgICAgICAgICAgLypcclxuICAgICAgICAgICAgICAgICAqIEJlY2F1c2Ugd2Ugd2FudCBzaW5nbGUgc2lnbiBvbiB3ZSBleHBlY3QgdGhlIGhvc3QgYXBwIHRvIHByb3ZpZGUgdGhlIGFjY291bnQgY29udGV4dFxyXG4gICAgICAgICAgICAgICAgICogd2l0aCBhIG1pbiBzZXQgb2YgcGFyYW1zIHRoYXQgY2FuIGJlIHVzZWQgdG8gaWRlbnRpZnkgdGhlIGFjY291bnRcclxuICAgICAgICAgICAgICAgICAqIHRoaXMuYWNjb3VudCA9IG5lc3RlZEFwcC5nZXRBY2NvdW50QnlGaWx0ZXIoYnJpZGdlUHJveHkuZ2V0QWNjb3VudENvbnRleHQoKSk7XHJcbiAgICAgICAgICAgICAgICAgKi9cclxuICAgICAgICAgICAgICAgIHRoaXMuYWNjb3VudENvbnRleHQgPSBicmlkZ2VQcm94eS5nZXRBY2NvdW50Q29udGV4dCgpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5icmlkZ2VQcm94eSA9IGJyaWRnZVByb3h5O1xyXG4gICAgICAgICAgICAgICAgdGhpcy5hdmFpbGFibGUgPSBicmlkZ2VQcm94eSAhPT0gdW5kZWZpbmVkO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNhdGNoIChleCkge1xyXG4gICAgICAgICAgICB0aGlzLmxvZ2dlci5pbmZvUGlpKGBDb3VsZCBub3QgaW5pdGlhbGl6ZSBOZXN0ZWQgQXBwIEF1dGggYnJpZGdlICgke2V4fSlgKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5sb2dnZXIuaW5mbyhgTmVzdGVkIEFwcCBBdXRoIEJyaWRnZSBhdmFpbGFibGU6ICR7dGhpcy5hdmFpbGFibGV9YCk7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuYXZhaWxhYmxlO1xyXG4gICAgfVxyXG59XHJcbi8qXHJcbiAqIFRPRE86IE9uY2Ugd2UgaGF2ZSBkZXRlcm1pbmUgdGhlIGJ1bmRsaW5nIGNvZGUgcmV0dXJuIGhlcmUgdG8gc3BlY2lmeSB0aGUgbmFtZSBvZiB0aGUgYnVuZGxlXHJcbiAqIGNvbnRhaW5pbmcgdGhlIGltcGxlbWVudGF0aW9uIGZvciB0aGlzIG9wZXJhdGluZyBjb250ZXh0XHJcbiAqL1xyXG5OZXN0ZWRBcHBPcGVyYXRpbmdDb250ZXh0Lk1PRFVMRV9OQU1FID0gXCJcIjtcclxuLyoqXHJcbiAqIFVuaXF1ZSBpZGVudGlmaWVyIGZvciB0aGUgb3BlcmF0aW5nIGNvbnRleHRcclxuICovXHJcbk5lc3RlZEFwcE9wZXJhdGluZ0NvbnRleHQuSUQgPSBcIk5lc3RlZEFwcE9wZXJhdGluZ0NvbnRleHRcIjtcblxuZXhwb3J0IHsgTmVzdGVkQXBwT3BlcmF0aW5nQ29udGV4dCB9O1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9TmVzdGVkQXBwT3BlcmF0aW5nQ29udGV4dC5tanMubWFwXG4iLCIvKiEgQGF6dXJlL21zYWwtYnJvd3NlciB2My4yOC4xIDIwMjUtMDEtMTQgKi9cbid1c2Ugc3RyaWN0JztcbmltcG9ydCB7IEJhc2VPcGVyYXRpbmdDb250ZXh0IH0gZnJvbSAnLi9CYXNlT3BlcmF0aW5nQ29udGV4dC5tanMnO1xuXG4vKlxyXG4gKiBDb3B5cmlnaHQgKGMpIE1pY3Jvc29mdCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cclxuICogTGljZW5zZWQgdW5kZXIgdGhlIE1JVCBMaWNlbnNlLlxyXG4gKi9cclxuY2xhc3MgU3RhbmRhcmRPcGVyYXRpbmdDb250ZXh0IGV4dGVuZHMgQmFzZU9wZXJhdGluZ0NvbnRleHQge1xyXG4gICAgLyoqXHJcbiAgICAgKiBSZXR1cm4gdGhlIG1vZHVsZSBuYW1lLiAgSW50ZW5kZWQgZm9yIHVzZSB3aXRoIGltcG9ydCgpIHRvIGVuYWJsZSBkeW5hbWljIGltcG9ydFxyXG4gICAgICogb2YgdGhlIGltcGxlbWVudGF0aW9uIGFzc29jaWF0ZWQgd2l0aCB0aGlzIG9wZXJhdGluZyBjb250ZXh0XHJcbiAgICAgKiBAcmV0dXJuc1xyXG4gICAgICovXHJcbiAgICBnZXRNb2R1bGVOYW1lKCkge1xyXG4gICAgICAgIHJldHVybiBTdGFuZGFyZE9wZXJhdGluZ0NvbnRleHQuTU9EVUxFX05BTUU7XHJcbiAgICB9XHJcbiAgICAvKipcclxuICAgICAqIFJldHVybnMgdGhlIHVuaXF1ZSBpZGVudGlmaWVyIGZvciB0aGlzIG9wZXJhdGluZyBjb250ZXh0XHJcbiAgICAgKiBAcmV0dXJucyBzdHJpbmdcclxuICAgICAqL1xyXG4gICAgZ2V0SWQoKSB7XHJcbiAgICAgICAgcmV0dXJuIFN0YW5kYXJkT3BlcmF0aW5nQ29udGV4dC5JRDtcclxuICAgIH1cclxuICAgIC8qKlxyXG4gICAgICogQ2hlY2tzIHdoZXRoZXIgdGhlIG9wZXJhdGluZyBjb250ZXh0IGlzIGF2YWlsYWJsZS5cclxuICAgICAqIENvbmZpcm1zIHRoYXQgdGhlIGNvZGUgaXMgcnVubmluZyBhIGJyb3dzZXIgcmF0aGVyLiAgVGhpcyBpcyByZXF1aXJlZC5cclxuICAgICAqIEByZXR1cm5zIFByb21pc2U8Ym9vbGVhbj4gaW5kaWNhdGluZyB3aGV0aGVyIHRoaXMgb3BlcmF0aW5nIGNvbnRleHQgaXMgY3VycmVudGx5IGF2YWlsYWJsZS5cclxuICAgICAqL1xyXG4gICAgYXN5bmMgaW5pdGlhbGl6ZSgpIHtcclxuICAgICAgICB0aGlzLmF2YWlsYWJsZSA9IHR5cGVvZiB3aW5kb3cgIT09IFwidW5kZWZpbmVkXCI7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuYXZhaWxhYmxlO1xyXG4gICAgICAgIC8qXHJcbiAgICAgICAgICogTk9URTogVGhlIHN0YW5kYXJkIGNvbnRleHQgaXMgYXZhaWxhYmxlIGFzIGxvbmcgYXMgdGhlcmUgaXMgYSB3aW5kb3cuICBJZi93aGVuIHdlIHNwbGl0IG91dCBXQU0gZnJvbSBCcm93c2VyXHJcbiAgICAgICAgICogV2UgY2FuIG1vdmUgdGhlIGN1cnJlbnQgY29udGVudHMgb2YgdGhlIGluaXRpYWxpemUgbWV0aG9kIHRvIGhlcmUgYW5kIHZlcmlmeSB0aGF0IHRoZSBXQU0gZXh0ZW5zaW9uIGlzIGF2YWlsYWJsZVxyXG4gICAgICAgICAqL1xyXG4gICAgfVxyXG59XHJcbi8qXHJcbiAqIFRPRE86IE9uY2Ugd2UgaGF2ZSBkZXRlcm1pbmUgdGhlIGJ1bmRsaW5nIGNvZGUgcmV0dXJuIGhlcmUgdG8gc3BlY2lmeSB0aGUgbmFtZSBvZiB0aGUgYnVuZGxlXHJcbiAqIGNvbnRhaW5pbmcgdGhlIGltcGxlbWVudGF0aW9uIGZvciB0aGlzIG9wZXJhdGluZyBjb250ZXh0XHJcbiAqL1xyXG5TdGFuZGFyZE9wZXJhdGluZ0NvbnRleHQuTU9EVUxFX05BTUUgPSBcIlwiO1xyXG4vKipcclxuICogVW5pcXVlIGlkZW50aWZpZXIgZm9yIHRoZSBvcGVyYXRpbmcgY29udGV4dFxyXG4gKi9cclxuU3RhbmRhcmRPcGVyYXRpbmdDb250ZXh0LklEID0gXCJTdGFuZGFyZE9wZXJhdGluZ0NvbnRleHRcIjtcblxuZXhwb3J0IHsgU3RhbmRhcmRPcGVyYXRpbmdDb250ZXh0IH07XG4vLyMgc291cmNlTWFwcGluZ1VSTD1TdGFuZGFyZE9wZXJhdGluZ0NvbnRleHQubWpzLm1hcFxuIiwiLyohIEBhenVyZS9tc2FsLWNvbW1vbiB2MTQuMTYuMCAyMDI0LTExLTA1ICovXG4ndXNlIHN0cmljdCc7XG4vKlxyXG4gKiBDb3B5cmlnaHQgKGMpIE1pY3Jvc29mdCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cclxuICogTGljZW5zZWQgdW5kZXIgdGhlIE1JVCBMaWNlbnNlLlxyXG4gKi9cclxuY29uc3QgbWlzc2luZ0tpZEVycm9yID0gXCJtaXNzaW5nX2tpZF9lcnJvclwiO1xyXG5jb25zdCBtaXNzaW5nQWxnRXJyb3IgPSBcIm1pc3NpbmdfYWxnX2Vycm9yXCI7XG5cbmV4cG9ydCB7IG1pc3NpbmdBbGdFcnJvciwgbWlzc2luZ0tpZEVycm9yIH07XG4vLyMgc291cmNlTWFwcGluZ1VSTD1Kb3NlSGVhZGVyRXJyb3JDb2Rlcy5tanMubWFwXG4iLCIvKiEgQGF6dXJlL21zYWwtY29tbW9uIHYxNC4xNi4wIDIwMjQtMTEtMDUgKi9cbid1c2Ugc3RyaWN0JztcbmltcG9ydCB7IEF1dGhFcnJvciB9IGZyb20gJy4vQXV0aEVycm9yLm1qcyc7XG5pbXBvcnQgeyBtaXNzaW5nS2lkRXJyb3IsIG1pc3NpbmdBbGdFcnJvciB9IGZyb20gJy4vSm9zZUhlYWRlckVycm9yQ29kZXMubWpzJztcblxuLypcclxuICogQ29weXJpZ2h0IChjKSBNaWNyb3NvZnQgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuXHJcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgTGljZW5zZS5cclxuICovXHJcbmNvbnN0IEpvc2VIZWFkZXJFcnJvck1lc3NhZ2VzID0ge1xyXG4gICAgW21pc3NpbmdLaWRFcnJvcl06IFwiVGhlIEpPU0UgSGVhZGVyIGZvciB0aGUgcmVxdWVzdGVkIEpXVCwgSldTIG9yIEpXSyBvYmplY3QgcmVxdWlyZXMgYSBrZXlJZCB0byBiZSBjb25maWd1cmVkIGFzIHRoZSAna2lkJyBoZWFkZXIgY2xhaW0uIE5vICdraWQnIHZhbHVlIHdhcyBwcm92aWRlZC5cIixcclxuICAgIFttaXNzaW5nQWxnRXJyb3JdOiBcIlRoZSBKT1NFIEhlYWRlciBmb3IgdGhlIHJlcXVlc3RlZCBKV1QsIEpXUyBvciBKV0sgb2JqZWN0IHJlcXVpcmVzIGFuIGFsZ29yaXRobSB0byBiZSBzcGVjaWZpZWQgYXMgdGhlICdhbGcnIGhlYWRlciBjbGFpbS4gTm8gJ2FsZycgdmFsdWUgd2FzIHByb3ZpZGVkLlwiLFxyXG59O1xyXG4vKipcclxuICogRXJyb3IgdGhyb3duIHdoZW4gdGhlcmUgaXMgYW4gZXJyb3IgaW4gdGhlIGNsaWVudCBjb2RlIHJ1bm5pbmcgb24gdGhlIGJyb3dzZXIuXHJcbiAqL1xyXG5jbGFzcyBKb3NlSGVhZGVyRXJyb3IgZXh0ZW5kcyBBdXRoRXJyb3Ige1xyXG4gICAgY29uc3RydWN0b3IoZXJyb3JDb2RlLCBlcnJvck1lc3NhZ2UpIHtcclxuICAgICAgICBzdXBlcihlcnJvckNvZGUsIGVycm9yTWVzc2FnZSk7XHJcbiAgICAgICAgdGhpcy5uYW1lID0gXCJKb3NlSGVhZGVyRXJyb3JcIjtcclxuICAgICAgICBPYmplY3Quc2V0UHJvdG90eXBlT2YodGhpcywgSm9zZUhlYWRlckVycm9yLnByb3RvdHlwZSk7XHJcbiAgICB9XHJcbn1cclxuLyoqIFJldHVybnMgSm9zZUhlYWRlckVycm9yIG9iamVjdCAqL1xyXG5mdW5jdGlvbiBjcmVhdGVKb3NlSGVhZGVyRXJyb3IoY29kZSkge1xyXG4gICAgcmV0dXJuIG5ldyBKb3NlSGVhZGVyRXJyb3IoY29kZSwgSm9zZUhlYWRlckVycm9yTWVzc2FnZXNbY29kZV0pO1xyXG59XG5cbmV4cG9ydCB7IEpvc2VIZWFkZXJFcnJvciwgSm9zZUhlYWRlckVycm9yTWVzc2FnZXMsIGNyZWF0ZUpvc2VIZWFkZXJFcnJvciB9O1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9Sm9zZUhlYWRlckVycm9yLm1qcy5tYXBcbiIsIi8qISBAYXp1cmUvbXNhbC1jb21tb24gdjE0LjE2LjAgMjAyNC0xMS0wNSAqL1xuJ3VzZSBzdHJpY3QnO1xuaW1wb3J0IHsgY3JlYXRlSm9zZUhlYWRlckVycm9yIH0gZnJvbSAnLi4vZXJyb3IvSm9zZUhlYWRlckVycm9yLm1qcyc7XG5pbXBvcnQgeyBKc29uV2ViVG9rZW5UeXBlcyB9IGZyb20gJy4uL3V0aWxzL0NvbnN0YW50cy5tanMnO1xuaW1wb3J0IHsgbWlzc2luZ0tpZEVycm9yLCBtaXNzaW5nQWxnRXJyb3IgfSBmcm9tICcuLi9lcnJvci9Kb3NlSGVhZGVyRXJyb3JDb2Rlcy5tanMnO1xuXG4vKlxyXG4gKiBDb3B5cmlnaHQgKGMpIE1pY3Jvc29mdCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cclxuICogTGljZW5zZWQgdW5kZXIgdGhlIE1JVCBMaWNlbnNlLlxyXG4gKi9cclxuLyoqIEBpbnRlcm5hbCAqL1xyXG5jbGFzcyBKb3NlSGVhZGVyIHtcclxuICAgIGNvbnN0cnVjdG9yKG9wdGlvbnMpIHtcclxuICAgICAgICB0aGlzLnR5cCA9IG9wdGlvbnMudHlwO1xyXG4gICAgICAgIHRoaXMuYWxnID0gb3B0aW9ucy5hbGc7XHJcbiAgICAgICAgdGhpcy5raWQgPSBvcHRpb25zLmtpZDtcclxuICAgIH1cclxuICAgIC8qKlxyXG4gICAgICogQnVpbGRzIFNpZ25lZEh0dHBSZXF1ZXN0IGZvcm1hdHRlZCBKT1NFIEhlYWRlciBmcm9tIHRoZVxyXG4gICAgICogSk9TRSBIZWFkZXIgb3B0aW9ucyBwcm92aWRlZCBvciBwcmV2aW91c2x5IHNldCBvbiB0aGUgb2JqZWN0IGFuZCByZXR1cm5zXHJcbiAgICAgKiB0aGUgc3RyaW5naWZpZWQgaGVhZGVyIG9iamVjdC5cclxuICAgICAqIFRocm93cyBpZiBrZXlJZCBvciBhbGdvcml0aG0gYXJlbid0IHByb3ZpZGVkIHNpbmNlIHRoZXkgYXJlIHJlcXVpcmVkIGZvciBBY2Nlc3MgVG9rZW4gQmluZGluZy5cclxuICAgICAqIEBwYXJhbSBzaHJIZWFkZXJPcHRpb25zXHJcbiAgICAgKiBAcmV0dXJuc1xyXG4gICAgICovXHJcbiAgICBzdGF0aWMgZ2V0U2hySGVhZGVyU3RyaW5nKHNockhlYWRlck9wdGlvbnMpIHtcclxuICAgICAgICAvLyBLZXlJRCBpcyByZXF1aXJlZCBvbiB0aGUgU0hSIGhlYWRlclxyXG4gICAgICAgIGlmICghc2hySGVhZGVyT3B0aW9ucy5raWQpIHtcclxuICAgICAgICAgICAgdGhyb3cgY3JlYXRlSm9zZUhlYWRlckVycm9yKG1pc3NpbmdLaWRFcnJvcik7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIC8vIEFsZyBpcyByZXF1aXJlZCBvbiB0aGUgU0hSIGhlYWRlclxyXG4gICAgICAgIGlmICghc2hySGVhZGVyT3B0aW9ucy5hbGcpIHtcclxuICAgICAgICAgICAgdGhyb3cgY3JlYXRlSm9zZUhlYWRlckVycm9yKG1pc3NpbmdBbGdFcnJvcik7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNvbnN0IHNockhlYWRlciA9IG5ldyBKb3NlSGVhZGVyKHtcclxuICAgICAgICAgICAgLy8gQWNjZXNzIFRva2VuIFBvUCBoZWFkZXJzIG11c3QgaGF2ZSB0eXBlIHBvcCwgYnV0IHRoZSB0eXBlIGhlYWRlciBjYW4gYmUgb3ZlcnJpZGVuIGZvciBzcGVjaWFsIGNhc2VzXHJcbiAgICAgICAgICAgIHR5cDogc2hySGVhZGVyT3B0aW9ucy50eXAgfHwgSnNvbldlYlRva2VuVHlwZXMuUG9wLFxyXG4gICAgICAgICAgICBraWQ6IHNockhlYWRlck9wdGlvbnMua2lkLFxyXG4gICAgICAgICAgICBhbGc6IHNockhlYWRlck9wdGlvbnMuYWxnLFxyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIHJldHVybiBKU09OLnN0cmluZ2lmeShzaHJIZWFkZXIpO1xyXG4gICAgfVxyXG59XG5cbmV4cG9ydCB7IEpvc2VIZWFkZXIgfTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPUpvc2VIZWFkZXIubWpzLm1hcFxuIiwiLyohIEBhenVyZS9tc2FsLWJyb3dzZXIgdjMuMjguMSAyMDI1LTAxLTE0ICovXG4ndXNlIHN0cmljdCc7XG5pbXBvcnQgeyBjcmVhdGVCcm93c2VyQXV0aEVycm9yIH0gZnJvbSAnLi4vZXJyb3IvQnJvd3NlckF1dGhFcnJvci5tanMnO1xuaW1wb3J0IHsgaW52YWxpZEJhc2U2NFN0cmluZyB9IGZyb20gJy4uL2Vycm9yL0Jyb3dzZXJBdXRoRXJyb3JDb2Rlcy5tanMnO1xuXG4vKlxyXG4gKiBDb3B5cmlnaHQgKGMpIE1pY3Jvc29mdCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cclxuICogTGljZW5zZWQgdW5kZXIgdGhlIE1JVCBMaWNlbnNlLlxyXG4gKi9cclxuLyoqXHJcbiAqIENsYXNzIHdoaWNoIGV4cG9zZXMgQVBJcyB0byBkZWNvZGUgYmFzZTY0IHN0cmluZ3MgdG8gcGxhaW50ZXh0LiBTZWUgaGVyZSBmb3IgaW1wbGVtZW50YXRpb24gZGV0YWlsczpcclxuICogaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9HbG9zc2FyeS9CYXNlNjQjdGhlX3VuaWNvZGVfcHJvYmxlbVxyXG4gKi9cclxuLyoqXHJcbiAqIFJldHVybnMgYSBVUkwtc2FmZSBwbGFpbnRleHQgZGVjb2RlZCBzdHJpbmcgZnJvbSBiNjQgZW5jb2RlZCBpbnB1dC5cclxuICogQHBhcmFtIGlucHV0XHJcbiAqL1xyXG5mdW5jdGlvbiBiYXNlNjREZWNvZGUoaW5wdXQpIHtcclxuICAgIHJldHVybiBuZXcgVGV4dERlY29kZXIoKS5kZWNvZGUoYmFzZTY0RGVjVG9BcnIoaW5wdXQpKTtcclxufVxyXG4vKipcclxuICogRGVjb2RlcyBiYXNlNjQgaW50byBVaW50OEFycmF5XHJcbiAqIEBwYXJhbSBiYXNlNjRTdHJpbmdcclxuICovXHJcbmZ1bmN0aW9uIGJhc2U2NERlY1RvQXJyKGJhc2U2NFN0cmluZykge1xyXG4gICAgbGV0IGVuY29kZWRTdHJpbmcgPSBiYXNlNjRTdHJpbmcucmVwbGFjZSgvLS9nLCBcIitcIikucmVwbGFjZSgvXy9nLCBcIi9cIik7XHJcbiAgICBzd2l0Y2ggKGVuY29kZWRTdHJpbmcubGVuZ3RoICUgNCkge1xyXG4gICAgICAgIGNhc2UgMDpcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgY2FzZSAyOlxyXG4gICAgICAgICAgICBlbmNvZGVkU3RyaW5nICs9IFwiPT1cIjtcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgY2FzZSAzOlxyXG4gICAgICAgICAgICBlbmNvZGVkU3RyaW5nICs9IFwiPVwiO1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICBkZWZhdWx0OlxyXG4gICAgICAgICAgICB0aHJvdyBjcmVhdGVCcm93c2VyQXV0aEVycm9yKGludmFsaWRCYXNlNjRTdHJpbmcpO1xyXG4gICAgfVxyXG4gICAgY29uc3QgYmluU3RyaW5nID0gYXRvYihlbmNvZGVkU3RyaW5nKTtcclxuICAgIHJldHVybiBVaW50OEFycmF5LmZyb20oYmluU3RyaW5nLCAobSkgPT4gbS5jb2RlUG9pbnRBdCgwKSB8fCAwKTtcclxufVxuXG5leHBvcnQgeyBiYXNlNjREZWNvZGUgfTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPUJhc2U2NERlY29kZS5tanMubWFwXG4iLCIvKiEgQGF6dXJlL21zYWwtYnJvd3NlciB2My4yOC4xIDIwMjUtMDEtMTQgKi9cbid1c2Ugc3RyaWN0JztcbmltcG9ydCB7IGNyZWF0ZUJyb3dzZXJBdXRoRXJyb3IgfSBmcm9tICcuLi9lcnJvci9Ccm93c2VyQXV0aEVycm9yLm1qcyc7XG5pbXBvcnQgeyBEQl9OQU1FLCBEQl9WRVJTSU9OLCBEQl9UQUJMRV9OQU1FIH0gZnJvbSAnLi4vdXRpbHMvQnJvd3NlckNvbnN0YW50cy5tanMnO1xuaW1wb3J0IHsgZGF0YWJhc2VVbmF2YWlsYWJsZSwgZGF0YWJhc2VOb3RPcGVuIH0gZnJvbSAnLi4vZXJyb3IvQnJvd3NlckF1dGhFcnJvckNvZGVzLm1qcyc7XG5cbi8qXHJcbiAqIENvcHlyaWdodCAoYykgTWljcm9zb2Z0IENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLlxyXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgTUlUIExpY2Vuc2UuXHJcbiAqL1xyXG4vKipcclxuICogU3RvcmFnZSB3cmFwcGVyIGZvciBJbmRleGVkREIgc3RvcmFnZSBpbiBicm93c2VyczogaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQVBJL0luZGV4ZWREQl9BUElcclxuICovXHJcbmNsYXNzIERhdGFiYXNlU3RvcmFnZSB7XHJcbiAgICBjb25zdHJ1Y3RvcigpIHtcclxuICAgICAgICB0aGlzLmRiTmFtZSA9IERCX05BTUU7XHJcbiAgICAgICAgdGhpcy52ZXJzaW9uID0gREJfVkVSU0lPTjtcclxuICAgICAgICB0aGlzLnRhYmxlTmFtZSA9IERCX1RBQkxFX05BTUU7XHJcbiAgICAgICAgdGhpcy5kYk9wZW4gPSBmYWxzZTtcclxuICAgIH1cclxuICAgIC8qKlxyXG4gICAgICogT3BlbnMgSW5kZXhlZERCIGluc3RhbmNlLlxyXG4gICAgICovXHJcbiAgICBhc3luYyBvcGVuKCkge1xyXG4gICAgICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XHJcbiAgICAgICAgICAgIGNvbnN0IG9wZW5EQiA9IHdpbmRvdy5pbmRleGVkREIub3Blbih0aGlzLmRiTmFtZSwgdGhpcy52ZXJzaW9uKTtcclxuICAgICAgICAgICAgb3BlbkRCLmFkZEV2ZW50TGlzdGVuZXIoXCJ1cGdyYWRlbmVlZGVkXCIsIChlKSA9PiB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBldmVudCA9IGU7XHJcbiAgICAgICAgICAgICAgICBldmVudC50YXJnZXQucmVzdWx0LmNyZWF0ZU9iamVjdFN0b3JlKHRoaXMudGFibGVOYW1lKTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIG9wZW5EQi5hZGRFdmVudExpc3RlbmVyKFwic3VjY2Vzc1wiLCAoZSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgZXZlbnQgPSBlO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5kYiA9IGV2ZW50LnRhcmdldC5yZXN1bHQ7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmRiT3BlbiA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICByZXNvbHZlKCk7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICBvcGVuREIuYWRkRXZlbnRMaXN0ZW5lcihcImVycm9yXCIsICgpID0+IHJlamVjdChjcmVhdGVCcm93c2VyQXV0aEVycm9yKGRhdGFiYXNlVW5hdmFpbGFibGUpKSk7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcbiAgICAvKipcclxuICAgICAqIENsb3NlcyB0aGUgY29ubmVjdGlvbiB0byBJbmRleGVkREIgZGF0YWJhc2Ugd2hlbiBhbGwgcGVuZGluZyB0cmFuc2FjdGlvbnNcclxuICAgICAqIGNvbXBsZXRlLlxyXG4gICAgICovXHJcbiAgICBjbG9zZUNvbm5lY3Rpb24oKSB7XHJcbiAgICAgICAgY29uc3QgZGIgPSB0aGlzLmRiO1xyXG4gICAgICAgIGlmIChkYiAmJiB0aGlzLmRiT3Blbikge1xyXG4gICAgICAgICAgICBkYi5jbG9zZSgpO1xyXG4gICAgICAgICAgICB0aGlzLmRiT3BlbiA9IGZhbHNlO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIC8qKlxyXG4gICAgICogT3BlbnMgZGF0YWJhc2UgaWYgaXQncyBub3QgYWxyZWFkeSBvcGVuXHJcbiAgICAgKi9cclxuICAgIGFzeW5jIHZhbGlkYXRlRGJJc09wZW4oKSB7XHJcbiAgICAgICAgaWYgKCF0aGlzLmRiT3Blbikge1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5vcGVuKCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgLyoqXHJcbiAgICAgKiBSZXRyaWV2ZXMgaXRlbSBmcm9tIEluZGV4ZWREQiBpbnN0YW5jZS5cclxuICAgICAqIEBwYXJhbSBrZXlcclxuICAgICAqL1xyXG4gICAgYXN5bmMgZ2V0SXRlbShrZXkpIHtcclxuICAgICAgICBhd2FpdCB0aGlzLnZhbGlkYXRlRGJJc09wZW4oKTtcclxuICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xyXG4gICAgICAgICAgICAvLyBUT0RPOiBBZGQgdGltZW91dHM/XHJcbiAgICAgICAgICAgIGlmICghdGhpcy5kYikge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHJlamVjdChjcmVhdGVCcm93c2VyQXV0aEVycm9yKGRhdGFiYXNlTm90T3BlbikpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGNvbnN0IHRyYW5zYWN0aW9uID0gdGhpcy5kYi50cmFuc2FjdGlvbihbdGhpcy50YWJsZU5hbWVdLCBcInJlYWRvbmx5XCIpO1xyXG4gICAgICAgICAgICBjb25zdCBvYmplY3RTdG9yZSA9IHRyYW5zYWN0aW9uLm9iamVjdFN0b3JlKHRoaXMudGFibGVOYW1lKTtcclxuICAgICAgICAgICAgY29uc3QgZGJHZXQgPSBvYmplY3RTdG9yZS5nZXQoa2V5KTtcclxuICAgICAgICAgICAgZGJHZXQuYWRkRXZlbnRMaXN0ZW5lcihcInN1Y2Nlc3NcIiwgKGUpID0+IHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGV2ZW50ID0gZTtcclxuICAgICAgICAgICAgICAgIHRoaXMuY2xvc2VDb25uZWN0aW9uKCk7XHJcbiAgICAgICAgICAgICAgICByZXNvbHZlKGV2ZW50LnRhcmdldC5yZXN1bHQpO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgZGJHZXQuYWRkRXZlbnRMaXN0ZW5lcihcImVycm9yXCIsIChlKSA9PiB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmNsb3NlQ29ubmVjdGlvbigpO1xyXG4gICAgICAgICAgICAgICAgcmVqZWN0KGUpO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuICAgIC8qKlxyXG4gICAgICogQWRkcyBpdGVtIHRvIEluZGV4ZWREQiB1bmRlciBnaXZlbiBrZXlcclxuICAgICAqIEBwYXJhbSBrZXlcclxuICAgICAqIEBwYXJhbSBwYXlsb2FkXHJcbiAgICAgKi9cclxuICAgIGFzeW5jIHNldEl0ZW0oa2V5LCBwYXlsb2FkKSB7XHJcbiAgICAgICAgYXdhaXQgdGhpcy52YWxpZGF0ZURiSXNPcGVuKCk7XHJcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcclxuICAgICAgICAgICAgLy8gVE9ETzogQWRkIHRpbWVvdXRzP1xyXG4gICAgICAgICAgICBpZiAoIXRoaXMuZGIpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiByZWplY3QoY3JlYXRlQnJvd3NlckF1dGhFcnJvcihkYXRhYmFzZU5vdE9wZW4pKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBjb25zdCB0cmFuc2FjdGlvbiA9IHRoaXMuZGIudHJhbnNhY3Rpb24oW3RoaXMudGFibGVOYW1lXSwgXCJyZWFkd3JpdGVcIik7XHJcbiAgICAgICAgICAgIGNvbnN0IG9iamVjdFN0b3JlID0gdHJhbnNhY3Rpb24ub2JqZWN0U3RvcmUodGhpcy50YWJsZU5hbWUpO1xyXG4gICAgICAgICAgICBjb25zdCBkYlB1dCA9IG9iamVjdFN0b3JlLnB1dChwYXlsb2FkLCBrZXkpO1xyXG4gICAgICAgICAgICBkYlB1dC5hZGRFdmVudExpc3RlbmVyKFwic3VjY2Vzc1wiLCAoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmNsb3NlQ29ubmVjdGlvbigpO1xyXG4gICAgICAgICAgICAgICAgcmVzb2x2ZSgpO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgZGJQdXQuYWRkRXZlbnRMaXN0ZW5lcihcImVycm9yXCIsIChlKSA9PiB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmNsb3NlQ29ubmVjdGlvbigpO1xyXG4gICAgICAgICAgICAgICAgcmVqZWN0KGUpO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuICAgIC8qKlxyXG4gICAgICogUmVtb3ZlcyBpdGVtIGZyb20gSW5kZXhlZERCIHVuZGVyIGdpdmVuIGtleVxyXG4gICAgICogQHBhcmFtIGtleVxyXG4gICAgICovXHJcbiAgICBhc3luYyByZW1vdmVJdGVtKGtleSkge1xyXG4gICAgICAgIGF3YWl0IHRoaXMudmFsaWRhdGVEYklzT3BlbigpO1xyXG4gICAgICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XHJcbiAgICAgICAgICAgIGlmICghdGhpcy5kYikge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHJlamVjdChjcmVhdGVCcm93c2VyQXV0aEVycm9yKGRhdGFiYXNlTm90T3BlbikpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGNvbnN0IHRyYW5zYWN0aW9uID0gdGhpcy5kYi50cmFuc2FjdGlvbihbdGhpcy50YWJsZU5hbWVdLCBcInJlYWR3cml0ZVwiKTtcclxuICAgICAgICAgICAgY29uc3Qgb2JqZWN0U3RvcmUgPSB0cmFuc2FjdGlvbi5vYmplY3RTdG9yZSh0aGlzLnRhYmxlTmFtZSk7XHJcbiAgICAgICAgICAgIGNvbnN0IGRiRGVsZXRlID0gb2JqZWN0U3RvcmUuZGVsZXRlKGtleSk7XHJcbiAgICAgICAgICAgIGRiRGVsZXRlLmFkZEV2ZW50TGlzdGVuZXIoXCJzdWNjZXNzXCIsICgpID0+IHtcclxuICAgICAgICAgICAgICAgIHRoaXMuY2xvc2VDb25uZWN0aW9uKCk7XHJcbiAgICAgICAgICAgICAgICByZXNvbHZlKCk7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICBkYkRlbGV0ZS5hZGRFdmVudExpc3RlbmVyKFwiZXJyb3JcIiwgKGUpID0+IHtcclxuICAgICAgICAgICAgICAgIHRoaXMuY2xvc2VDb25uZWN0aW9uKCk7XHJcbiAgICAgICAgICAgICAgICByZWplY3QoZSk7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG4gICAgLyoqXHJcbiAgICAgKiBHZXQgYWxsIHRoZSBrZXlzIGZyb20gdGhlIHN0b3JhZ2Ugb2JqZWN0IGFzIGFuIGl0ZXJhYmxlIGFycmF5IG9mIHN0cmluZ3MuXHJcbiAgICAgKi9cclxuICAgIGFzeW5jIGdldEtleXMoKSB7XHJcbiAgICAgICAgYXdhaXQgdGhpcy52YWxpZGF0ZURiSXNPcGVuKCk7XHJcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcclxuICAgICAgICAgICAgaWYgKCF0aGlzLmRiKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gcmVqZWN0KGNyZWF0ZUJyb3dzZXJBdXRoRXJyb3IoZGF0YWJhc2VOb3RPcGVuKSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgY29uc3QgdHJhbnNhY3Rpb24gPSB0aGlzLmRiLnRyYW5zYWN0aW9uKFt0aGlzLnRhYmxlTmFtZV0sIFwicmVhZG9ubHlcIik7XHJcbiAgICAgICAgICAgIGNvbnN0IG9iamVjdFN0b3JlID0gdHJhbnNhY3Rpb24ub2JqZWN0U3RvcmUodGhpcy50YWJsZU5hbWUpO1xyXG4gICAgICAgICAgICBjb25zdCBkYkdldEtleXMgPSBvYmplY3RTdG9yZS5nZXRBbGxLZXlzKCk7XHJcbiAgICAgICAgICAgIGRiR2V0S2V5cy5hZGRFdmVudExpc3RlbmVyKFwic3VjY2Vzc1wiLCAoZSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgZXZlbnQgPSBlO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jbG9zZUNvbm5lY3Rpb24oKTtcclxuICAgICAgICAgICAgICAgIHJlc29sdmUoZXZlbnQudGFyZ2V0LnJlc3VsdCk7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICBkYkdldEtleXMuYWRkRXZlbnRMaXN0ZW5lcihcImVycm9yXCIsIChlKSA9PiB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmNsb3NlQ29ubmVjdGlvbigpO1xyXG4gICAgICAgICAgICAgICAgcmVqZWN0KGUpO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuICAgIC8qKlxyXG4gICAgICpcclxuICAgICAqIENoZWNrcyB3aGV0aGVyIHRoZXJlIGlzIGFuIG9iamVjdCB1bmRlciB0aGUgc2VhcmNoIGtleSBpbiB0aGUgb2JqZWN0IHN0b3JlXHJcbiAgICAgKi9cclxuICAgIGFzeW5jIGNvbnRhaW5zS2V5KGtleSkge1xyXG4gICAgICAgIGF3YWl0IHRoaXMudmFsaWRhdGVEYklzT3BlbigpO1xyXG4gICAgICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XHJcbiAgICAgICAgICAgIGlmICghdGhpcy5kYikge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHJlamVjdChjcmVhdGVCcm93c2VyQXV0aEVycm9yKGRhdGFiYXNlTm90T3BlbikpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGNvbnN0IHRyYW5zYWN0aW9uID0gdGhpcy5kYi50cmFuc2FjdGlvbihbdGhpcy50YWJsZU5hbWVdLCBcInJlYWRvbmx5XCIpO1xyXG4gICAgICAgICAgICBjb25zdCBvYmplY3RTdG9yZSA9IHRyYW5zYWN0aW9uLm9iamVjdFN0b3JlKHRoaXMudGFibGVOYW1lKTtcclxuICAgICAgICAgICAgY29uc3QgZGJDb250YWluc0tleSA9IG9iamVjdFN0b3JlLmNvdW50KGtleSk7XHJcbiAgICAgICAgICAgIGRiQ29udGFpbnNLZXkuYWRkRXZlbnRMaXN0ZW5lcihcInN1Y2Nlc3NcIiwgKGUpID0+IHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGV2ZW50ID0gZTtcclxuICAgICAgICAgICAgICAgIHRoaXMuY2xvc2VDb25uZWN0aW9uKCk7XHJcbiAgICAgICAgICAgICAgICByZXNvbHZlKGV2ZW50LnRhcmdldC5yZXN1bHQgPT09IDEpO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgZGJDb250YWluc0tleS5hZGRFdmVudExpc3RlbmVyKFwiZXJyb3JcIiwgKGUpID0+IHtcclxuICAgICAgICAgICAgICAgIHRoaXMuY2xvc2VDb25uZWN0aW9uKCk7XHJcbiAgICAgICAgICAgICAgICByZWplY3QoZSk7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG4gICAgLyoqXHJcbiAgICAgKiBEZWxldGVzIHRoZSBNU0FMIGRhdGFiYXNlLiBUaGUgZGF0YWJhc2UgaXMgZGVsZXRlZCByYXRoZXIgdGhhbiBjbGVhcmVkIHRvIG1ha2UgaXQgcG9zc2libGVcclxuICAgICAqIGZvciBjbGllbnQgYXBwbGljYXRpb25zIHRvIGRvd25ncmFkZSB0byBhIHByZXZpb3VzIE1TQUwgdmVyc2lvbiB3aXRob3V0IHdvcnJ5aW5nIGFib3V0IGZvcndhcmQgY29tcGF0aWJpbGl0eSBpc3N1ZXNcclxuICAgICAqIHdpdGggSW5kZXhlZERCIGRhdGFiYXNlIHZlcnNpb25zLlxyXG4gICAgICovXHJcbiAgICBhc3luYyBkZWxldGVEYXRhYmFzZSgpIHtcclxuICAgICAgICAvLyBDaGVjayBpZiBkYXRhYmFzZSBiZWluZyBkZWxldGVkIGV4aXN0c1xyXG4gICAgICAgIGlmICh0aGlzLmRiICYmIHRoaXMuZGJPcGVuKSB7XHJcbiAgICAgICAgICAgIHRoaXMuY2xvc2VDb25uZWN0aW9uKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XHJcbiAgICAgICAgICAgIGNvbnN0IGRlbGV0ZURiUmVxdWVzdCA9IHdpbmRvdy5pbmRleGVkREIuZGVsZXRlRGF0YWJhc2UoREJfTkFNRSk7XHJcbiAgICAgICAgICAgIGNvbnN0IGlkID0gc2V0VGltZW91dCgoKSA9PiByZWplY3QoZmFsc2UpLCAyMDApOyAvLyBSZWplY3QgaWYgZXZlbnRzIGFyZW4ndCByYWlzZWQgd2l0aGluIDIwMG1zXHJcbiAgICAgICAgICAgIGRlbGV0ZURiUmVxdWVzdC5hZGRFdmVudExpc3RlbmVyKFwic3VjY2Vzc1wiLCAoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICBjbGVhclRpbWVvdXQoaWQpO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHJlc29sdmUodHJ1ZSk7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICBkZWxldGVEYlJlcXVlc3QuYWRkRXZlbnRMaXN0ZW5lcihcImJsb2NrZWRcIiwgKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgY2xlYXJUaW1lb3V0KGlkKTtcclxuICAgICAgICAgICAgICAgIHJldHVybiByZXNvbHZlKHRydWUpO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgZGVsZXRlRGJSZXF1ZXN0LmFkZEV2ZW50TGlzdGVuZXIoXCJlcnJvclwiLCAoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICBjbGVhclRpbWVvdXQoaWQpO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHJlamVjdChmYWxzZSk7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG59XG5cbmV4cG9ydCB7IERhdGFiYXNlU3RvcmFnZSB9O1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9RGF0YWJhc2VTdG9yYWdlLm1qcy5tYXBcbiIsIi8qISBAYXp1cmUvbXNhbC1icm93c2VyIHYzLjI4LjEgMjAyNS0wMS0xNCAqL1xuJ3VzZSBzdHJpY3QnO1xuLypcclxuICogQ29weXJpZ2h0IChjKSBNaWNyb3NvZnQgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuXHJcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgTGljZW5zZS5cclxuICovXHJcbmNsYXNzIE1lbW9yeVN0b3JhZ2Uge1xyXG4gICAgY29uc3RydWN0b3IoKSB7XHJcbiAgICAgICAgdGhpcy5jYWNoZSA9IG5ldyBNYXAoKTtcclxuICAgIH1cclxuICAgIGdldEl0ZW0oa2V5KSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuY2FjaGUuZ2V0KGtleSkgfHwgbnVsbDtcclxuICAgIH1cclxuICAgIHNldEl0ZW0oa2V5LCB2YWx1ZSkge1xyXG4gICAgICAgIHRoaXMuY2FjaGUuc2V0KGtleSwgdmFsdWUpO1xyXG4gICAgfVxyXG4gICAgcmVtb3ZlSXRlbShrZXkpIHtcclxuICAgICAgICB0aGlzLmNhY2hlLmRlbGV0ZShrZXkpO1xyXG4gICAgfVxyXG4gICAgZ2V0S2V5cygpIHtcclxuICAgICAgICBjb25zdCBjYWNoZUtleXMgPSBbXTtcclxuICAgICAgICB0aGlzLmNhY2hlLmZvckVhY2goKHZhbHVlLCBrZXkpID0+IHtcclxuICAgICAgICAgICAgY2FjaGVLZXlzLnB1c2goa2V5KTtcclxuICAgICAgICB9KTtcclxuICAgICAgICByZXR1cm4gY2FjaGVLZXlzO1xyXG4gICAgfVxyXG4gICAgY29udGFpbnNLZXkoa2V5KSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuY2FjaGUuaGFzKGtleSk7XHJcbiAgICB9XHJcbiAgICBjbGVhcigpIHtcclxuICAgICAgICB0aGlzLmNhY2hlLmNsZWFyKCk7XHJcbiAgICB9XHJcbn1cblxuZXhwb3J0IHsgTWVtb3J5U3RvcmFnZSB9O1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9TWVtb3J5U3RvcmFnZS5tanMubWFwXG4iLCIvKiEgQGF6dXJlL21zYWwtYnJvd3NlciB2My4yOC4xIDIwMjUtMDEtMTQgKi9cbid1c2Ugc3RyaWN0JztcbmltcG9ydCB7IEJyb3dzZXJBdXRoRXJyb3IgfSBmcm9tICcuLi9lcnJvci9Ccm93c2VyQXV0aEVycm9yLm1qcyc7XG5pbXBvcnQgeyBEYXRhYmFzZVN0b3JhZ2UgfSBmcm9tICcuL0RhdGFiYXNlU3RvcmFnZS5tanMnO1xuaW1wb3J0IHsgTWVtb3J5U3RvcmFnZSB9IGZyb20gJy4vTWVtb3J5U3RvcmFnZS5tanMnO1xuaW1wb3J0IHsgZGF0YWJhc2VVbmF2YWlsYWJsZSB9IGZyb20gJy4uL2Vycm9yL0Jyb3dzZXJBdXRoRXJyb3JDb2Rlcy5tanMnO1xuXG4vKlxyXG4gKiBDb3B5cmlnaHQgKGMpIE1pY3Jvc29mdCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cclxuICogTGljZW5zZWQgdW5kZXIgdGhlIE1JVCBMaWNlbnNlLlxyXG4gKi9cclxuLyoqXHJcbiAqIFRoaXMgY2xhc3MgYWxsb3dzIE1TQUwgdG8gc3RvcmUgYXJ0aWZhY3RzIGFzeW5jaHJvbm91c2x5IHVzaW5nIHRoZSBEYXRhYmFzZVN0b3JhZ2UgSW5kZXhlZERCIHdyYXBwZXIsXHJcbiAqIGJhY2tlZCB1cCB3aXRoIHRoZSBtb3JlIHZvbGF0aWxlIE1lbW9yeVN0b3JhZ2Ugb2JqZWN0IGZvciBjYXNlcyBpbiB3aGljaCBJbmRleGVkREIgbWF5IGJlIHVuYXZhaWxhYmxlLlxyXG4gKi9cclxuY2xhc3MgQXN5bmNNZW1vcnlTdG9yYWdlIHtcclxuICAgIGNvbnN0cnVjdG9yKGxvZ2dlcikge1xyXG4gICAgICAgIHRoaXMuaW5NZW1vcnlDYWNoZSA9IG5ldyBNZW1vcnlTdG9yYWdlKCk7XHJcbiAgICAgICAgdGhpcy5pbmRleGVkREJDYWNoZSA9IG5ldyBEYXRhYmFzZVN0b3JhZ2UoKTtcclxuICAgICAgICB0aGlzLmxvZ2dlciA9IGxvZ2dlcjtcclxuICAgIH1cclxuICAgIGhhbmRsZURhdGFiYXNlQWNjZXNzRXJyb3IoZXJyb3IpIHtcclxuICAgICAgICBpZiAoZXJyb3IgaW5zdGFuY2VvZiBCcm93c2VyQXV0aEVycm9yICYmXHJcbiAgICAgICAgICAgIGVycm9yLmVycm9yQ29kZSA9PT0gZGF0YWJhc2VVbmF2YWlsYWJsZSkge1xyXG4gICAgICAgICAgICB0aGlzLmxvZ2dlci5lcnJvcihcIkNvdWxkIG5vdCBhY2Nlc3MgcGVyc2lzdGVudCBzdG9yYWdlLiBUaGlzIG1heSBiZSBjYXVzZWQgYnkgYnJvd3NlciBwcml2YWN5IGZlYXR1cmVzIHdoaWNoIGJsb2NrIHBlcnNpc3RlbnQgc3RvcmFnZSBpbiB0aGlyZC1wYXJ0eSBjb250ZXh0cy5cIik7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICB0aHJvdyBlcnJvcjtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICAvKipcclxuICAgICAqIEdldCB0aGUgaXRlbSBtYXRjaGluZyB0aGUgZ2l2ZW4ga2V5LiBUcmllcyBpbi1tZW1vcnkgY2FjaGUgZmlyc3QsIHRoZW4gaW4gdGhlIGFzeW5jaHJvbm91c1xyXG4gICAgICogc3RvcmFnZSBvYmplY3QgaWYgaXRlbSBpc24ndCBmb3VuZCBpbi1tZW1vcnkuXHJcbiAgICAgKiBAcGFyYW0ga2V5XHJcbiAgICAgKi9cclxuICAgIGFzeW5jIGdldEl0ZW0oa2V5KSB7XHJcbiAgICAgICAgY29uc3QgaXRlbSA9IHRoaXMuaW5NZW1vcnlDYWNoZS5nZXRJdGVtKGtleSk7XHJcbiAgICAgICAgaWYgKCFpdGVtKSB7XHJcbiAgICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmxvZ2dlci52ZXJib3NlKFwiUXVlcmllZCBpdGVtIG5vdCBmb3VuZCBpbiBpbi1tZW1vcnkgY2FjaGUsIG5vdyBxdWVyeWluZyBwZXJzaXN0ZW50IHN0b3JhZ2UuXCIpO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGF3YWl0IHRoaXMuaW5kZXhlZERCQ2FjaGUuZ2V0SXRlbShrZXkpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGNhdGNoIChlKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmhhbmRsZURhdGFiYXNlQWNjZXNzRXJyb3IoZSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIGl0ZW07XHJcbiAgICB9XHJcbiAgICAvKipcclxuICAgICAqIFNldHMgdGhlIGl0ZW0gaW4gdGhlIGluLW1lbW9yeSBjYWNoZSBhbmQgdGhlbiB0cmllcyB0byBzZXQgaXQgaW4gdGhlIGFzeW5jaHJvbm91c1xyXG4gICAgICogc3RvcmFnZSBvYmplY3Qgd2l0aCB0aGUgZ2l2ZW4ga2V5LlxyXG4gICAgICogQHBhcmFtIGtleVxyXG4gICAgICogQHBhcmFtIHZhbHVlXHJcbiAgICAgKi9cclxuICAgIGFzeW5jIHNldEl0ZW0oa2V5LCB2YWx1ZSkge1xyXG4gICAgICAgIHRoaXMuaW5NZW1vcnlDYWNoZS5zZXRJdGVtKGtleSwgdmFsdWUpO1xyXG4gICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgIGF3YWl0IHRoaXMuaW5kZXhlZERCQ2FjaGUuc2V0SXRlbShrZXksIHZhbHVlKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgY2F0Y2ggKGUpIHtcclxuICAgICAgICAgICAgdGhpcy5oYW5kbGVEYXRhYmFzZUFjY2Vzc0Vycm9yKGUpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIC8qKlxyXG4gICAgICogUmVtb3ZlcyB0aGUgaXRlbSBtYXRjaGluZyB0aGUga2V5IGZyb20gdGhlIGluLW1lbW9yeSBjYWNoZSwgdGhlbiB0cmllcyB0byByZW1vdmUgaXQgZnJvbSB0aGUgYXN5bmNocm9ub3VzIHN0b3JhZ2Ugb2JqZWN0LlxyXG4gICAgICogQHBhcmFtIGtleVxyXG4gICAgICovXHJcbiAgICBhc3luYyByZW1vdmVJdGVtKGtleSkge1xyXG4gICAgICAgIHRoaXMuaW5NZW1vcnlDYWNoZS5yZW1vdmVJdGVtKGtleSk7XHJcbiAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgYXdhaXQgdGhpcy5pbmRleGVkREJDYWNoZS5yZW1vdmVJdGVtKGtleSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNhdGNoIChlKSB7XHJcbiAgICAgICAgICAgIHRoaXMuaGFuZGxlRGF0YWJhc2VBY2Nlc3NFcnJvcihlKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICAvKipcclxuICAgICAqIEdldCBhbGwgdGhlIGtleXMgZnJvbSB0aGUgaW4tbWVtb3J5IGNhY2hlIGFzIGFuIGl0ZXJhYmxlIGFycmF5IG9mIHN0cmluZ3MuIElmIG5vIGtleXMgYXJlIGZvdW5kLCBxdWVyeSB0aGUga2V5cyBpbiB0aGVcclxuICAgICAqIGFzeW5jaHJvbm91cyBzdG9yYWdlIG9iamVjdC5cclxuICAgICAqL1xyXG4gICAgYXN5bmMgZ2V0S2V5cygpIHtcclxuICAgICAgICBjb25zdCBjYWNoZUtleXMgPSB0aGlzLmluTWVtb3J5Q2FjaGUuZ2V0S2V5cygpO1xyXG4gICAgICAgIGlmIChjYWNoZUtleXMubGVuZ3RoID09PSAwKSB7XHJcbiAgICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmxvZ2dlci52ZXJib3NlKFwiSW4tbWVtb3J5IGNhY2hlIGlzIGVtcHR5LCBub3cgcXVlcnlpbmcgcGVyc2lzdGVudCBzdG9yYWdlLlwiKTtcclxuICAgICAgICAgICAgICAgIHJldHVybiBhd2FpdCB0aGlzLmluZGV4ZWREQkNhY2hlLmdldEtleXMoKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBjYXRjaCAoZSkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5oYW5kbGVEYXRhYmFzZUFjY2Vzc0Vycm9yKGUpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBjYWNoZUtleXM7XHJcbiAgICB9XHJcbiAgICAvKipcclxuICAgICAqIFJldHVybnMgdHJ1ZSBvciBmYWxzZSBpZiB0aGUgZ2l2ZW4ga2V5IGlzIHByZXNlbnQgaW4gdGhlIGNhY2hlLlxyXG4gICAgICogQHBhcmFtIGtleVxyXG4gICAgICovXHJcbiAgICBhc3luYyBjb250YWluc0tleShrZXkpIHtcclxuICAgICAgICBjb25zdCBjb250YWluc0tleSA9IHRoaXMuaW5NZW1vcnlDYWNoZS5jb250YWluc0tleShrZXkpO1xyXG4gICAgICAgIGlmICghY29udGFpbnNLZXkpIHtcclxuICAgICAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgICAgIHRoaXMubG9nZ2VyLnZlcmJvc2UoXCJLZXkgbm90IGZvdW5kIGluIGluLW1lbW9yeSBjYWNoZSwgbm93IHF1ZXJ5aW5nIHBlcnNpc3RlbnQgc3RvcmFnZS5cIik7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gYXdhaXQgdGhpcy5pbmRleGVkREJDYWNoZS5jb250YWluc0tleShrZXkpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGNhdGNoIChlKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmhhbmRsZURhdGFiYXNlQWNjZXNzRXJyb3IoZSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIGNvbnRhaW5zS2V5O1xyXG4gICAgfVxyXG4gICAgLyoqXHJcbiAgICAgKiBDbGVhcnMgaW4tbWVtb3J5IE1hcFxyXG4gICAgICovXHJcbiAgICBjbGVhckluTWVtb3J5KCkge1xyXG4gICAgICAgIC8vIEluTWVtb3J5IGNhY2hlIGlzIGEgTWFwIGluc3RhbmNlLCBjbGVhciBpcyBzdHJhaWdodGZvcndhcmRcclxuICAgICAgICB0aGlzLmxvZ2dlci52ZXJib3NlKGBEZWxldGluZyBpbi1tZW1vcnkga2V5c3RvcmVgKTtcclxuICAgICAgICB0aGlzLmluTWVtb3J5Q2FjaGUuY2xlYXIoKTtcclxuICAgICAgICB0aGlzLmxvZ2dlci52ZXJib3NlKGBJbi1tZW1vcnkga2V5c3RvcmUgZGVsZXRlZGApO1xyXG4gICAgfVxyXG4gICAgLyoqXHJcbiAgICAgKiBUcmllcyB0byBkZWxldGUgdGhlIEluZGV4ZWREQiBkYXRhYmFzZVxyXG4gICAgICogQHJldHVybnNcclxuICAgICAqL1xyXG4gICAgYXN5bmMgY2xlYXJQZXJzaXN0ZW50KCkge1xyXG4gICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgIHRoaXMubG9nZ2VyLnZlcmJvc2UoXCJEZWxldGluZyBwZXJzaXN0ZW50IGtleXN0b3JlXCIpO1xyXG4gICAgICAgICAgICBjb25zdCBkYkRlbGV0ZWQgPSBhd2FpdCB0aGlzLmluZGV4ZWREQkNhY2hlLmRlbGV0ZURhdGFiYXNlKCk7XHJcbiAgICAgICAgICAgIGlmIChkYkRlbGV0ZWQpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMubG9nZ2VyLnZlcmJvc2UoXCJQZXJzaXN0ZW50IGtleXN0b3JlIGRlbGV0ZWRcIik7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmV0dXJuIGRiRGVsZXRlZDtcclxuICAgICAgICB9XHJcbiAgICAgICAgY2F0Y2ggKGUpIHtcclxuICAgICAgICAgICAgdGhpcy5oYW5kbGVEYXRhYmFzZUFjY2Vzc0Vycm9yKGUpO1xyXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG59XG5cbmV4cG9ydCB7IEFzeW5jTWVtb3J5U3RvcmFnZSB9O1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9QXN5bmNNZW1vcnlTdG9yYWdlLm1qcy5tYXBcbiIsIi8qISBAYXp1cmUvbXNhbC1icm93c2VyIHYzLjI4LjEgMjAyNS0wMS0xNCAqL1xuJ3VzZSBzdHJpY3QnO1xuaW1wb3J0IHsgUGVyZm9ybWFuY2VFdmVudHMsIEpvc2VIZWFkZXIgfSBmcm9tICdAYXp1cmUvbXNhbC1jb21tb24vYnJvd3Nlcic7XG5pbXBvcnQgeyBiYXNlNjRFbmNvZGUsIHVybEVuY29kZSwgdXJsRW5jb2RlQXJyIH0gZnJvbSAnLi4vZW5jb2RlL0Jhc2U2NEVuY29kZS5tanMnO1xuaW1wb3J0IHsgYmFzZTY0RGVjb2RlIH0gZnJvbSAnLi4vZW5jb2RlL0Jhc2U2NERlY29kZS5tanMnO1xuaW1wb3J0IHsgdmFsaWRhdGVDcnlwdG9BdmFpbGFibGUsIGNyZWF0ZU5ld0d1aWQsIGdlbmVyYXRlS2V5UGFpciwgZXhwb3J0SndrLCBpbXBvcnRKd2ssIHNpZ24sIGhhc2hTdHJpbmcgfSBmcm9tICcuL0Jyb3dzZXJDcnlwdG8ubWpzJztcbmltcG9ydCB7IGNyZWF0ZUJyb3dzZXJBdXRoRXJyb3IgfSBmcm9tICcuLi9lcnJvci9Ccm93c2VyQXV0aEVycm9yLm1qcyc7XG5pbXBvcnQgeyBBc3luY01lbW9yeVN0b3JhZ2UgfSBmcm9tICcuLi9jYWNoZS9Bc3luY01lbW9yeVN0b3JhZ2UubWpzJztcbmltcG9ydCB7IGNyeXB0b0tleU5vdEZvdW5kIH0gZnJvbSAnLi4vZXJyb3IvQnJvd3NlckF1dGhFcnJvckNvZGVzLm1qcyc7XG5cbi8qXHJcbiAqIENvcHlyaWdodCAoYykgTWljcm9zb2Z0IENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLlxyXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgTUlUIExpY2Vuc2UuXHJcbiAqL1xyXG4vKipcclxuICogVGhpcyBjbGFzcyBpbXBsZW1lbnRzIE1TQUwncyBjcnlwdG8gaW50ZXJmYWNlLCB3aGljaCBhbGxvd3MgaXQgdG8gcGVyZm9ybSBiYXNlNjQgZW5jb2RpbmcgYW5kIGRlY29kaW5nLCBnZW5lcmF0aW5nIGNyeXB0b2dyYXBoaWNhbGx5IHJhbmRvbSBHVUlEcyBhbmRcclxuICogaW1wbGVtZW50aW5nIFByb29mIEtleSBmb3IgQ29kZSBFeGNoYW5nZSBzcGVjcyBmb3IgdGhlIE9BdXRoIEF1dGhvcml6YXRpb24gQ29kZSBGbG93IHVzaW5nIFBLQ0UgKHJmYyBoZXJlOiBodHRwczovL3Rvb2xzLmlldGYub3JnL2h0bWwvcmZjNzYzNikuXHJcbiAqL1xyXG5jbGFzcyBDcnlwdG9PcHMge1xyXG4gICAgY29uc3RydWN0b3IobG9nZ2VyLCBwZXJmb3JtYW5jZUNsaWVudCwgc2tpcFZhbGlkYXRlU3VidGxlQ3J5cHRvKSB7XHJcbiAgICAgICAgdGhpcy5sb2dnZXIgPSBsb2dnZXI7XHJcbiAgICAgICAgLy8gQnJvd3NlciBjcnlwdG8gbmVlZHMgdG8gYmUgdmFsaWRhdGVkIGZpcnN0IGJlZm9yZSBhbnkgb3RoZXIgY2xhc3NlcyBjYW4gYmUgc2V0LlxyXG4gICAgICAgIHZhbGlkYXRlQ3J5cHRvQXZhaWxhYmxlKHNraXBWYWxpZGF0ZVN1YnRsZUNyeXB0byA/PyBmYWxzZSk7XHJcbiAgICAgICAgdGhpcy5jYWNoZSA9IG5ldyBBc3luY01lbW9yeVN0b3JhZ2UodGhpcy5sb2dnZXIpO1xyXG4gICAgICAgIHRoaXMucGVyZm9ybWFuY2VDbGllbnQgPSBwZXJmb3JtYW5jZUNsaWVudDtcclxuICAgIH1cclxuICAgIC8qKlxyXG4gICAgICogQ3JlYXRlcyBhIG5ldyByYW5kb20gR1VJRCAtIHVzZWQgdG8gcG9wdWxhdGUgc3RhdGUgYW5kIG5vbmNlLlxyXG4gICAgICogQHJldHVybnMgc3RyaW5nIChHVUlEKVxyXG4gICAgICovXHJcbiAgICBjcmVhdGVOZXdHdWlkKCkge1xyXG4gICAgICAgIHJldHVybiBjcmVhdGVOZXdHdWlkKCk7XHJcbiAgICB9XHJcbiAgICAvKipcclxuICAgICAqIEVuY29kZXMgaW5wdXQgc3RyaW5nIHRvIGJhc2U2NC5cclxuICAgICAqIEBwYXJhbSBpbnB1dFxyXG4gICAgICovXHJcbiAgICBiYXNlNjRFbmNvZGUoaW5wdXQpIHtcclxuICAgICAgICByZXR1cm4gYmFzZTY0RW5jb2RlKGlucHV0KTtcclxuICAgIH1cclxuICAgIC8qKlxyXG4gICAgICogRGVjb2RlcyBpbnB1dCBzdHJpbmcgZnJvbSBiYXNlNjQuXHJcbiAgICAgKiBAcGFyYW0gaW5wdXRcclxuICAgICAqL1xyXG4gICAgYmFzZTY0RGVjb2RlKGlucHV0KSB7XHJcbiAgICAgICAgcmV0dXJuIGJhc2U2NERlY29kZShpbnB1dCk7XHJcbiAgICB9XHJcbiAgICAvKipcclxuICAgICAqIEVuY29kZXMgaW5wdXQgc3RyaW5nIHRvIGJhc2U2NCBVUkwgc2FmZSBzdHJpbmcuXHJcbiAgICAgKiBAcGFyYW0gaW5wdXRcclxuICAgICAqL1xyXG4gICAgYmFzZTY0VXJsRW5jb2RlKGlucHV0KSB7XHJcbiAgICAgICAgcmV0dXJuIHVybEVuY29kZShpbnB1dCk7XHJcbiAgICB9XHJcbiAgICAvKipcclxuICAgICAqIFN0cmluZ2lmaWVzIGFuZCBiYXNlNjRVcmwgZW5jb2RlcyBpbnB1dCBwdWJsaWMga2V5XHJcbiAgICAgKiBAcGFyYW0gaW5wdXRLaWRcclxuICAgICAqIEByZXR1cm5zIEJhc2U2NFVybCBlbmNvZGVkIHB1YmxpYyBrZXlcclxuICAgICAqL1xyXG4gICAgZW5jb2RlS2lkKGlucHV0S2lkKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuYmFzZTY0VXJsRW5jb2RlKEpTT04uc3RyaW5naWZ5KHsga2lkOiBpbnB1dEtpZCB9KSk7XHJcbiAgICB9XHJcbiAgICAvKipcclxuICAgICAqIEdlbmVyYXRlcyBhIGtleXBhaXIsIHN0b3JlcyBpdCBhbmQgcmV0dXJucyBhIHRodW1icHJpbnRcclxuICAgICAqIEBwYXJhbSByZXF1ZXN0XHJcbiAgICAgKi9cclxuICAgIGFzeW5jIGdldFB1YmxpY0tleVRodW1icHJpbnQocmVxdWVzdCkge1xyXG4gICAgICAgIGNvbnN0IHB1YmxpY0tleVRodW1iTWVhc3VyZW1lbnQgPSB0aGlzLnBlcmZvcm1hbmNlQ2xpZW50Py5zdGFydE1lYXN1cmVtZW50KFBlcmZvcm1hbmNlRXZlbnRzLkNyeXB0b09wdHNHZXRQdWJsaWNLZXlUaHVtYnByaW50LCByZXF1ZXN0LmNvcnJlbGF0aW9uSWQpO1xyXG4gICAgICAgIC8vIEdlbmVyYXRlIEtleXBhaXJcclxuICAgICAgICBjb25zdCBrZXlQYWlyID0gYXdhaXQgZ2VuZXJhdGVLZXlQYWlyKENyeXB0b09wcy5FWFRSQUNUQUJMRSwgQ3J5cHRvT3BzLlBPUF9LRVlfVVNBR0VTKTtcclxuICAgICAgICAvLyBHZW5lcmF0ZSBUaHVtYnByaW50IGZvciBQdWJsaWMgS2V5XHJcbiAgICAgICAgY29uc3QgcHVibGljS2V5SndrID0gYXdhaXQgZXhwb3J0SndrKGtleVBhaXIucHVibGljS2V5KTtcclxuICAgICAgICBjb25zdCBwdWJLZXlUaHVtcHJpbnRPYmogPSB7XHJcbiAgICAgICAgICAgIGU6IHB1YmxpY0tleUp3ay5lLFxyXG4gICAgICAgICAgICBrdHk6IHB1YmxpY0tleUp3ay5rdHksXHJcbiAgICAgICAgICAgIG46IHB1YmxpY0tleUp3ay5uLFxyXG4gICAgICAgIH07XHJcbiAgICAgICAgY29uc3QgcHVibGljSndrU3RyaW5nID0gZ2V0U29ydGVkT2JqZWN0U3RyaW5nKHB1YktleVRodW1wcmludE9iaik7XHJcbiAgICAgICAgY29uc3QgcHVibGljSndrSGFzaCA9IGF3YWl0IHRoaXMuaGFzaFN0cmluZyhwdWJsaWNKd2tTdHJpbmcpO1xyXG4gICAgICAgIC8vIEdlbmVyYXRlIFRodW1icHJpbnQgZm9yIFByaXZhdGUgS2V5XHJcbiAgICAgICAgY29uc3QgcHJpdmF0ZUtleUp3ayA9IGF3YWl0IGV4cG9ydEp3ayhrZXlQYWlyLnByaXZhdGVLZXkpO1xyXG4gICAgICAgIC8vIFJlLWltcG9ydCBwcml2YXRlIGtleSB0byBtYWtlIGl0IHVuZXh0cmFjdGFibGVcclxuICAgICAgICBjb25zdCB1bmV4dHJhY3RhYmxlUHJpdmF0ZUtleSA9IGF3YWl0IGltcG9ydEp3ayhwcml2YXRlS2V5SndrLCBmYWxzZSwgW1wic2lnblwiXSk7XHJcbiAgICAgICAgLy8gU3RvcmUgS2V5cGFpciBkYXRhIGluIGtleXN0b3JlXHJcbiAgICAgICAgYXdhaXQgdGhpcy5jYWNoZS5zZXRJdGVtKHB1YmxpY0p3a0hhc2gsIHtcclxuICAgICAgICAgICAgcHJpdmF0ZUtleTogdW5leHRyYWN0YWJsZVByaXZhdGVLZXksXHJcbiAgICAgICAgICAgIHB1YmxpY0tleToga2V5UGFpci5wdWJsaWNLZXksXHJcbiAgICAgICAgICAgIHJlcXVlc3RNZXRob2Q6IHJlcXVlc3QucmVzb3VyY2VSZXF1ZXN0TWV0aG9kLFxyXG4gICAgICAgICAgICByZXF1ZXN0VXJpOiByZXF1ZXN0LnJlc291cmNlUmVxdWVzdFVyaSxcclxuICAgICAgICB9KTtcclxuICAgICAgICBpZiAocHVibGljS2V5VGh1bWJNZWFzdXJlbWVudCkge1xyXG4gICAgICAgICAgICBwdWJsaWNLZXlUaHVtYk1lYXN1cmVtZW50LmVuZCh7XHJcbiAgICAgICAgICAgICAgICBzdWNjZXNzOiB0cnVlLFxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHB1YmxpY0p3a0hhc2g7XHJcbiAgICB9XHJcbiAgICAvKipcclxuICAgICAqIFJlbW92ZXMgY3J5cHRvZ3JhcGhpYyBrZXlwYWlyIGZyb20ga2V5IHN0b3JlIG1hdGNoaW5nIHRoZSBrZXlJZCBwYXNzZWQgaW5cclxuICAgICAqIEBwYXJhbSBraWRcclxuICAgICAqL1xyXG4gICAgYXN5bmMgcmVtb3ZlVG9rZW5CaW5kaW5nS2V5KGtpZCkge1xyXG4gICAgICAgIGF3YWl0IHRoaXMuY2FjaGUucmVtb3ZlSXRlbShraWQpO1xyXG4gICAgICAgIGNvbnN0IGtleUZvdW5kID0gYXdhaXQgdGhpcy5jYWNoZS5jb250YWluc0tleShraWQpO1xyXG4gICAgICAgIHJldHVybiAha2V5Rm91bmQ7XHJcbiAgICB9XHJcbiAgICAvKipcclxuICAgICAqIFJlbW92ZXMgYWxsIGNyeXB0b2dyYXBoaWMga2V5cyBmcm9tIEluZGV4ZWREQiBzdG9yYWdlXHJcbiAgICAgKi9cclxuICAgIGFzeW5jIGNsZWFyS2V5c3RvcmUoKSB7XHJcbiAgICAgICAgLy8gRGVsZXRlIGluLW1lbW9yeSBrZXlzdG9yZXNcclxuICAgICAgICB0aGlzLmNhY2hlLmNsZWFySW5NZW1vcnkoKTtcclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBUaGVyZSBpcyBvbmx5IG9uZSBkYXRhYmFzZSwgc28gY2FsbGluZyBjbGVhclBlcnNpc3RlbnQgb24gYXN5bW1ldHJpYyBrZXlzdG9yZSB0YWtlcyBjYXJlIG9mXHJcbiAgICAgICAgICogZXZlcnkgcGVyc2lzdGVudCBrZXlzdG9yZVxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgIGF3YWl0IHRoaXMuY2FjaGUuY2xlYXJQZXJzaXN0ZW50KCk7XHJcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjYXRjaCAoZSkge1xyXG4gICAgICAgICAgICBpZiAoZSBpbnN0YW5jZW9mIEVycm9yKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmxvZ2dlci5lcnJvcihgQ2xlYXJpbmcga2V5c3RvcmUgZmFpbGVkIHdpdGggZXJyb3I6ICR7ZS5tZXNzYWdlfWApO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5sb2dnZXIuZXJyb3IoXCJDbGVhcmluZyBrZXlzdG9yZSBmYWlsZWQgd2l0aCB1bmtub3duIGVycm9yXCIpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICAvKipcclxuICAgICAqIFNpZ25zIHRoZSBnaXZlbiBvYmplY3QgYXMgYSBqd3QgcGF5bG9hZCB3aXRoIHByaXZhdGUga2V5IHJldHJpZXZlZCBieSBnaXZlbiBraWQuXHJcbiAgICAgKiBAcGFyYW0gcGF5bG9hZFxyXG4gICAgICogQHBhcmFtIGtpZFxyXG4gICAgICovXHJcbiAgICBhc3luYyBzaWduSnd0KHBheWxvYWQsIGtpZCwgc2hyT3B0aW9ucywgY29ycmVsYXRpb25JZCkge1xyXG4gICAgICAgIGNvbnN0IHNpZ25Kd3RNZWFzdXJlbWVudCA9IHRoaXMucGVyZm9ybWFuY2VDbGllbnQ/LnN0YXJ0TWVhc3VyZW1lbnQoUGVyZm9ybWFuY2VFdmVudHMuQ3J5cHRvT3B0c1NpZ25Kd3QsIGNvcnJlbGF0aW9uSWQpO1xyXG4gICAgICAgIGNvbnN0IGNhY2hlZEtleVBhaXIgPSBhd2FpdCB0aGlzLmNhY2hlLmdldEl0ZW0oa2lkKTtcclxuICAgICAgICBpZiAoIWNhY2hlZEtleVBhaXIpIHtcclxuICAgICAgICAgICAgdGhyb3cgY3JlYXRlQnJvd3NlckF1dGhFcnJvcihjcnlwdG9LZXlOb3RGb3VuZCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIC8vIEdldCBwdWJsaWMga2V5IGFzIEpXS1xyXG4gICAgICAgIGNvbnN0IHB1YmxpY0tleUp3ayA9IGF3YWl0IGV4cG9ydEp3ayhjYWNoZWRLZXlQYWlyLnB1YmxpY0tleSk7XHJcbiAgICAgICAgY29uc3QgcHVibGljS2V5SndrU3RyaW5nID0gZ2V0U29ydGVkT2JqZWN0U3RyaW5nKHB1YmxpY0tleUp3ayk7XHJcbiAgICAgICAgLy8gQmFzZTY0VVJMIGVuY29kZSBwdWJsaWMga2V5IHRodW1icHJpbnQgd2l0aCBrZXlJZCBvbmx5OiBCQVNFNjRVUkwoeyBraWQ6IFwiRlVMTF9QVUJMSUNfS0VZX0hBU0hcIiB9KVxyXG4gICAgICAgIGNvbnN0IGVuY29kZWRLZXlJZFRodW1icHJpbnQgPSB1cmxFbmNvZGUoSlNPTi5zdHJpbmdpZnkoeyBraWQ6IGtpZCB9KSk7XHJcbiAgICAgICAgLy8gR2VuZXJhdGUgaGVhZGVyXHJcbiAgICAgICAgY29uc3Qgc2hySGVhZGVyID0gSm9zZUhlYWRlci5nZXRTaHJIZWFkZXJTdHJpbmcoe1xyXG4gICAgICAgICAgICAuLi5zaHJPcHRpb25zPy5oZWFkZXIsXHJcbiAgICAgICAgICAgIGFsZzogcHVibGljS2V5SndrLmFsZyxcclxuICAgICAgICAgICAga2lkOiBlbmNvZGVkS2V5SWRUaHVtYnByaW50LFxyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIGNvbnN0IGVuY29kZWRTaHJIZWFkZXIgPSB1cmxFbmNvZGUoc2hySGVhZGVyKTtcclxuICAgICAgICAvLyBHZW5lcmF0ZSBwYXlsb2FkXHJcbiAgICAgICAgcGF5bG9hZC5jbmYgPSB7XHJcbiAgICAgICAgICAgIGp3azogSlNPTi5wYXJzZShwdWJsaWNLZXlKd2tTdHJpbmcpLFxyXG4gICAgICAgIH07XHJcbiAgICAgICAgY29uc3QgZW5jb2RlZFBheWxvYWQgPSB1cmxFbmNvZGUoSlNPTi5zdHJpbmdpZnkocGF5bG9hZCkpO1xyXG4gICAgICAgIC8vIEZvcm0gdG9rZW4gc3RyaW5nXHJcbiAgICAgICAgY29uc3QgdG9rZW5TdHJpbmcgPSBgJHtlbmNvZGVkU2hySGVhZGVyfS4ke2VuY29kZWRQYXlsb2FkfWA7XHJcbiAgICAgICAgLy8gU2lnbiB0b2tlblxyXG4gICAgICAgIGNvbnN0IGVuY29kZXIgPSBuZXcgVGV4dEVuY29kZXIoKTtcclxuICAgICAgICBjb25zdCB0b2tlbkJ1ZmZlciA9IGVuY29kZXIuZW5jb2RlKHRva2VuU3RyaW5nKTtcclxuICAgICAgICBjb25zdCBzaWduYXR1cmVCdWZmZXIgPSBhd2FpdCBzaWduKGNhY2hlZEtleVBhaXIucHJpdmF0ZUtleSwgdG9rZW5CdWZmZXIpO1xyXG4gICAgICAgIGNvbnN0IGVuY29kZWRTaWduYXR1cmUgPSB1cmxFbmNvZGVBcnIobmV3IFVpbnQ4QXJyYXkoc2lnbmF0dXJlQnVmZmVyKSk7XHJcbiAgICAgICAgY29uc3Qgc2lnbmVkSnd0ID0gYCR7dG9rZW5TdHJpbmd9LiR7ZW5jb2RlZFNpZ25hdHVyZX1gO1xyXG4gICAgICAgIGlmIChzaWduSnd0TWVhc3VyZW1lbnQpIHtcclxuICAgICAgICAgICAgc2lnbkp3dE1lYXN1cmVtZW50LmVuZCh7XHJcbiAgICAgICAgICAgICAgICBzdWNjZXNzOiB0cnVlLFxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHNpZ25lZEp3dDtcclxuICAgIH1cclxuICAgIC8qKlxyXG4gICAgICogUmV0dXJucyB0aGUgU0hBLTI1NiBoYXNoIG9mIGFuIGlucHV0IHN0cmluZ1xyXG4gICAgICogQHBhcmFtIHBsYWluVGV4dFxyXG4gICAgICovXHJcbiAgICBhc3luYyBoYXNoU3RyaW5nKHBsYWluVGV4dCkge1xyXG4gICAgICAgIHJldHVybiBoYXNoU3RyaW5nKHBsYWluVGV4dCk7XHJcbiAgICB9XHJcbn1cclxuQ3J5cHRvT3BzLlBPUF9LRVlfVVNBR0VTID0gW1wic2lnblwiLCBcInZlcmlmeVwiXTtcclxuQ3J5cHRvT3BzLkVYVFJBQ1RBQkxFID0gdHJ1ZTtcclxuZnVuY3Rpb24gZ2V0U29ydGVkT2JqZWN0U3RyaW5nKG9iaikge1xyXG4gICAgcmV0dXJuIEpTT04uc3RyaW5naWZ5KG9iaiwgT2JqZWN0LmtleXMob2JqKS5zb3J0KCkpO1xyXG59XG5cbmV4cG9ydCB7IENyeXB0b09wcyB9O1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9Q3J5cHRvT3BzLm1qcy5tYXBcbiIsIi8qISBAYXp1cmUvbXNhbC1jb21tb24gdjE0LjE2LjAgMjAyNC0xMS0wNSAqL1xuJ3VzZSBzdHJpY3QnO1xuLypcclxuICogQ29weXJpZ2h0IChjKSBNaWNyb3NvZnQgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuXHJcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgTGljZW5zZS5cclxuICovXHJcbmZ1bmN0aW9uIGlzT3BlbklkQ29uZmlnUmVzcG9uc2UocmVzcG9uc2UpIHtcclxuICAgIHJldHVybiAocmVzcG9uc2UuaGFzT3duUHJvcGVydHkoXCJhdXRob3JpemF0aW9uX2VuZHBvaW50XCIpICYmXHJcbiAgICAgICAgcmVzcG9uc2UuaGFzT3duUHJvcGVydHkoXCJ0b2tlbl9lbmRwb2ludFwiKSAmJlxyXG4gICAgICAgIHJlc3BvbnNlLmhhc093blByb3BlcnR5KFwiaXNzdWVyXCIpICYmXHJcbiAgICAgICAgcmVzcG9uc2UuaGFzT3duUHJvcGVydHkoXCJqd2tzX3VyaVwiKSk7XHJcbn1cblxuZXhwb3J0IHsgaXNPcGVuSWRDb25maWdSZXNwb25zZSB9O1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9T3BlbklkQ29uZmlnUmVzcG9uc2UubWpzLm1hcFxuIiwiLyohIEBhenVyZS9tc2FsLWNvbW1vbiB2MTQuMTYuMCAyMDI0LTExLTA1ICovXG4ndXNlIHN0cmljdCc7XG4vKlxyXG4gKiBDb3B5cmlnaHQgKGMpIE1pY3Jvc29mdCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cclxuICogTGljZW5zZWQgdW5kZXIgdGhlIE1JVCBMaWNlbnNlLlxyXG4gKi9cclxuZnVuY3Rpb24gaXNDbG91ZEluc3RhbmNlRGlzY292ZXJ5UmVzcG9uc2UocmVzcG9uc2UpIHtcclxuICAgIHJldHVybiAocmVzcG9uc2UuaGFzT3duUHJvcGVydHkoXCJ0ZW5hbnRfZGlzY292ZXJ5X2VuZHBvaW50XCIpICYmXHJcbiAgICAgICAgcmVzcG9uc2UuaGFzT3duUHJvcGVydHkoXCJtZXRhZGF0YVwiKSk7XHJcbn1cblxuZXhwb3J0IHsgaXNDbG91ZEluc3RhbmNlRGlzY292ZXJ5UmVzcG9uc2UgfTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPUNsb3VkSW5zdGFuY2VEaXNjb3ZlcnlSZXNwb25zZS5tanMubWFwXG4iLCIvKiEgQGF6dXJlL21zYWwtY29tbW9uIHYxNC4xNi4wIDIwMjQtMTEtMDUgKi9cbid1c2Ugc3RyaWN0Jztcbi8qXHJcbiAqIENvcHlyaWdodCAoYykgTWljcm9zb2Z0IENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLlxyXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgTUlUIExpY2Vuc2UuXHJcbiAqL1xyXG5mdW5jdGlvbiBpc0Nsb3VkSW5zdGFuY2VEaXNjb3ZlcnlFcnJvclJlc3BvbnNlKHJlc3BvbnNlKSB7XHJcbiAgICByZXR1cm4gKHJlc3BvbnNlLmhhc093blByb3BlcnR5KFwiZXJyb3JcIikgJiZcclxuICAgICAgICByZXNwb25zZS5oYXNPd25Qcm9wZXJ0eShcImVycm9yX2Rlc2NyaXB0aW9uXCIpKTtcclxufVxuXG5leHBvcnQgeyBpc0Nsb3VkSW5zdGFuY2VEaXNjb3ZlcnlFcnJvclJlc3BvbnNlIH07XG4vLyMgc291cmNlTWFwcGluZ1VSTD1DbG91ZEluc3RhbmNlRGlzY292ZXJ5RXJyb3JSZXNwb25zZS5tanMubWFwXG4iLCIvKiEgQGF6dXJlL21zYWwtY29tbW9uIHYxNC4xNi4wIDIwMjQtMTEtMDUgKi9cbid1c2Ugc3RyaWN0JztcbmltcG9ydCB7IENvbnN0YW50cywgUmVzcG9uc2VDb2RlcywgUmVnaW9uRGlzY292ZXJ5U291cmNlcyB9IGZyb20gJy4uL3V0aWxzL0NvbnN0YW50cy5tanMnO1xuaW1wb3J0IHsgUGVyZm9ybWFuY2VFdmVudHMgfSBmcm9tICcuLi90ZWxlbWV0cnkvcGVyZm9ybWFuY2UvUGVyZm9ybWFuY2VFdmVudC5tanMnO1xuaW1wb3J0IHsgaW52b2tlQXN5bmMgfSBmcm9tICcuLi91dGlscy9GdW5jdGlvbldyYXBwZXJzLm1qcyc7XG5cbi8qXHJcbiAqIENvcHlyaWdodCAoYykgTWljcm9zb2Z0IENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLlxyXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgTUlUIExpY2Vuc2UuXHJcbiAqL1xyXG5jbGFzcyBSZWdpb25EaXNjb3Zlcnkge1xyXG4gICAgY29uc3RydWN0b3IobmV0d29ya0ludGVyZmFjZSwgbG9nZ2VyLCBwZXJmb3JtYW5jZUNsaWVudCwgY29ycmVsYXRpb25JZCkge1xyXG4gICAgICAgIHRoaXMubmV0d29ya0ludGVyZmFjZSA9IG5ldHdvcmtJbnRlcmZhY2U7XHJcbiAgICAgICAgdGhpcy5sb2dnZXIgPSBsb2dnZXI7XHJcbiAgICAgICAgdGhpcy5wZXJmb3JtYW5jZUNsaWVudCA9IHBlcmZvcm1hbmNlQ2xpZW50O1xyXG4gICAgICAgIHRoaXMuY29ycmVsYXRpb25JZCA9IGNvcnJlbGF0aW9uSWQ7XHJcbiAgICB9XHJcbiAgICAvKipcclxuICAgICAqIERldGVjdCB0aGUgcmVnaW9uIGZyb20gdGhlIGFwcGxpY2F0aW9uJ3MgZW52aXJvbm1lbnQuXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybnMgUHJvbWlzZTxzdHJpbmcgfCBudWxsPlxyXG4gICAgICovXHJcbiAgICBhc3luYyBkZXRlY3RSZWdpb24oZW52aXJvbm1lbnRSZWdpb24sIHJlZ2lvbkRpc2NvdmVyeU1ldGFkYXRhKSB7XHJcbiAgICAgICAgdGhpcy5wZXJmb3JtYW5jZUNsaWVudD8uYWRkUXVldWVNZWFzdXJlbWVudChQZXJmb3JtYW5jZUV2ZW50cy5SZWdpb25EaXNjb3ZlcnlEZXRlY3RSZWdpb24sIHRoaXMuY29ycmVsYXRpb25JZCk7XHJcbiAgICAgICAgLy8gSW5pdGlhbGl6ZSBhdXRvIGRldGVjdGVkIHJlZ2lvbiB3aXRoIHRoZSByZWdpb24gZnJvbSB0aGUgZW52cmlvbm1lbnRcclxuICAgICAgICBsZXQgYXV0b2RldGVjdGVkUmVnaW9uTmFtZSA9IGVudmlyb25tZW50UmVnaW9uO1xyXG4gICAgICAgIC8vIENoZWNrIGlmIGEgcmVnaW9uIHdhcyBkZXRlY3RlZCBmcm9tIHRoZSBlbnZpcm9ubWVudCwgaWYgbm90LCBhdHRlbXB0IHRvIGdldCB0aGUgcmVnaW9uIGZyb20gSU1EU1xyXG4gICAgICAgIGlmICghYXV0b2RldGVjdGVkUmVnaW9uTmFtZSkge1xyXG4gICAgICAgICAgICBjb25zdCBvcHRpb25zID0gUmVnaW9uRGlzY292ZXJ5LklNRFNfT1BUSU9OUztcclxuICAgICAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGxvY2FsSU1EU1ZlcnNpb25SZXNwb25zZSA9IGF3YWl0IGludm9rZUFzeW5jKHRoaXMuZ2V0UmVnaW9uRnJvbUlNRFMuYmluZCh0aGlzKSwgUGVyZm9ybWFuY2VFdmVudHMuUmVnaW9uRGlzY292ZXJ5R2V0UmVnaW9uRnJvbUlNRFMsIHRoaXMubG9nZ2VyLCB0aGlzLnBlcmZvcm1hbmNlQ2xpZW50LCB0aGlzLmNvcnJlbGF0aW9uSWQpKENvbnN0YW50cy5JTURTX1ZFUlNJT04sIG9wdGlvbnMpO1xyXG4gICAgICAgICAgICAgICAgaWYgKGxvY2FsSU1EU1ZlcnNpb25SZXNwb25zZS5zdGF0dXMgPT09XHJcbiAgICAgICAgICAgICAgICAgICAgUmVzcG9uc2VDb2Rlcy5odHRwU3VjY2Vzcykge1xyXG4gICAgICAgICAgICAgICAgICAgIGF1dG9kZXRlY3RlZFJlZ2lvbk5hbWUgPSBsb2NhbElNRFNWZXJzaW9uUmVzcG9uc2UuYm9keTtcclxuICAgICAgICAgICAgICAgICAgICByZWdpb25EaXNjb3ZlcnlNZXRhZGF0YS5yZWdpb25fc291cmNlID1cclxuICAgICAgICAgICAgICAgICAgICAgICAgUmVnaW9uRGlzY292ZXJ5U291cmNlcy5JTURTO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgLy8gSWYgdGhlIHJlc3BvbnNlIHVzaW5nIHRoZSBsb2NhbCBJTURTIHZlcnNpb24gZmFpbGVkLCB0cnkgdG8gZmV0Y2ggdGhlIGN1cnJlbnQgdmVyc2lvbiBvZiBJTURTIGFuZCByZXRyeS5cclxuICAgICAgICAgICAgICAgIGlmIChsb2NhbElNRFNWZXJzaW9uUmVzcG9uc2Uuc3RhdHVzID09PVxyXG4gICAgICAgICAgICAgICAgICAgIFJlc3BvbnNlQ29kZXMuaHR0cEJhZFJlcXVlc3QpIHtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBjdXJyZW50SU1EU1ZlcnNpb24gPSBhd2FpdCBpbnZva2VBc3luYyh0aGlzLmdldEN1cnJlbnRWZXJzaW9uLmJpbmQodGhpcyksIFBlcmZvcm1hbmNlRXZlbnRzLlJlZ2lvbkRpc2NvdmVyeUdldEN1cnJlbnRWZXJzaW9uLCB0aGlzLmxvZ2dlciwgdGhpcy5wZXJmb3JtYW5jZUNsaWVudCwgdGhpcy5jb3JyZWxhdGlvbklkKShvcHRpb25zKTtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoIWN1cnJlbnRJTURTVmVyc2lvbikge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZWdpb25EaXNjb3ZlcnlNZXRhZGF0YS5yZWdpb25fc291cmNlID1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJlZ2lvbkRpc2NvdmVyeVNvdXJjZXMuRkFJTEVEX0FVVE9fREVURUNUSU9OO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgY3VycmVudElNRFNWZXJzaW9uUmVzcG9uc2UgPSBhd2FpdCBpbnZva2VBc3luYyh0aGlzLmdldFJlZ2lvbkZyb21JTURTLmJpbmQodGhpcyksIFBlcmZvcm1hbmNlRXZlbnRzLlJlZ2lvbkRpc2NvdmVyeUdldFJlZ2lvbkZyb21JTURTLCB0aGlzLmxvZ2dlciwgdGhpcy5wZXJmb3JtYW5jZUNsaWVudCwgdGhpcy5jb3JyZWxhdGlvbklkKShjdXJyZW50SU1EU1ZlcnNpb24sIG9wdGlvbnMpO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChjdXJyZW50SU1EU1ZlcnNpb25SZXNwb25zZS5zdGF0dXMgPT09XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFJlc3BvbnNlQ29kZXMuaHR0cFN1Y2Nlc3MpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgYXV0b2RldGVjdGVkUmVnaW9uTmFtZSA9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdXJyZW50SU1EU1ZlcnNpb25SZXNwb25zZS5ib2R5O1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZWdpb25EaXNjb3ZlcnlNZXRhZGF0YS5yZWdpb25fc291cmNlID1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJlZ2lvbkRpc2NvdmVyeVNvdXJjZXMuSU1EUztcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgY2F0Y2ggKGUpIHtcclxuICAgICAgICAgICAgICAgIHJlZ2lvbkRpc2NvdmVyeU1ldGFkYXRhLnJlZ2lvbl9zb3VyY2UgPVxyXG4gICAgICAgICAgICAgICAgICAgIFJlZ2lvbkRpc2NvdmVyeVNvdXJjZXMuRkFJTEVEX0FVVE9fREVURUNUSU9OO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIHJlZ2lvbkRpc2NvdmVyeU1ldGFkYXRhLnJlZ2lvbl9zb3VyY2UgPVxyXG4gICAgICAgICAgICAgICAgUmVnaW9uRGlzY292ZXJ5U291cmNlcy5FTlZJUk9OTUVOVF9WQVJJQUJMRTtcclxuICAgICAgICB9XHJcbiAgICAgICAgLy8gSWYgbm8gcmVnaW9uIHdhcyBhdXRvIGRldGVjdGVkIGZyb20gdGhlIGVudmlyb25tZW50IG9yIGZyb20gdGhlIElNRFMgZW5kcG9pbnQsIG1hcmsgdGhlIGF0dGVtcHQgYXMgYSBGQUlMRURfQVVUT19ERVRFQ1RJT05cclxuICAgICAgICBpZiAoIWF1dG9kZXRlY3RlZFJlZ2lvbk5hbWUpIHtcclxuICAgICAgICAgICAgcmVnaW9uRGlzY292ZXJ5TWV0YWRhdGEucmVnaW9uX3NvdXJjZSA9XHJcbiAgICAgICAgICAgICAgICBSZWdpb25EaXNjb3ZlcnlTb3VyY2VzLkZBSUxFRF9BVVRPX0RFVEVDVElPTjtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIGF1dG9kZXRlY3RlZFJlZ2lvbk5hbWUgfHwgbnVsbDtcclxuICAgIH1cclxuICAgIC8qKlxyXG4gICAgICogTWFrZSB0aGUgY2FsbCB0byB0aGUgSU1EUyBlbmRwb2ludFxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSBpbWRzRW5kcG9pbnRVcmxcclxuICAgICAqIEByZXR1cm5zIFByb21pc2U8TmV0d29ya1Jlc3BvbnNlPHN0cmluZz4+XHJcbiAgICAgKi9cclxuICAgIGFzeW5jIGdldFJlZ2lvbkZyb21JTURTKHZlcnNpb24sIG9wdGlvbnMpIHtcclxuICAgICAgICB0aGlzLnBlcmZvcm1hbmNlQ2xpZW50Py5hZGRRdWV1ZU1lYXN1cmVtZW50KFBlcmZvcm1hbmNlRXZlbnRzLlJlZ2lvbkRpc2NvdmVyeUdldFJlZ2lvbkZyb21JTURTLCB0aGlzLmNvcnJlbGF0aW9uSWQpO1xyXG4gICAgICAgIHJldHVybiB0aGlzLm5ldHdvcmtJbnRlcmZhY2Uuc2VuZEdldFJlcXVlc3RBc3luYyhgJHtDb25zdGFudHMuSU1EU19FTkRQT0lOVH0/YXBpLXZlcnNpb249JHt2ZXJzaW9ufSZmb3JtYXQ9dGV4dGAsIG9wdGlvbnMsIENvbnN0YW50cy5JTURTX1RJTUVPVVQpO1xyXG4gICAgfVxyXG4gICAgLyoqXHJcbiAgICAgKiBHZXQgdGhlIG1vc3QgcmVjZW50IHZlcnNpb24gb2YgdGhlIElNRFMgZW5kcG9pbnQgYXZhaWxhYmxlXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybnMgUHJvbWlzZTxzdHJpbmcgfCBudWxsPlxyXG4gICAgICovXHJcbiAgICBhc3luYyBnZXRDdXJyZW50VmVyc2lvbihvcHRpb25zKSB7XHJcbiAgICAgICAgdGhpcy5wZXJmb3JtYW5jZUNsaWVudD8uYWRkUXVldWVNZWFzdXJlbWVudChQZXJmb3JtYW5jZUV2ZW50cy5SZWdpb25EaXNjb3ZlcnlHZXRDdXJyZW50VmVyc2lvbiwgdGhpcy5jb3JyZWxhdGlvbklkKTtcclxuICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IHRoaXMubmV0d29ya0ludGVyZmFjZS5zZW5kR2V0UmVxdWVzdEFzeW5jKGAke0NvbnN0YW50cy5JTURTX0VORFBPSU5UfT9mb3JtYXQ9anNvbmAsIG9wdGlvbnMpO1xyXG4gICAgICAgICAgICAvLyBXaGVuIElNRFMgZW5kcG9pbnQgaXMgY2FsbGVkIHdpdGhvdXQgdGhlIGFwaSB2ZXJzaW9uIHF1ZXJ5IHBhcmFtLCBiYWQgcmVxdWVzdCByZXNwb25zZSBjb21lcyBiYWNrIHdpdGggbGF0ZXN0IHZlcnNpb24uXHJcbiAgICAgICAgICAgIGlmIChyZXNwb25zZS5zdGF0dXMgPT09IFJlc3BvbnNlQ29kZXMuaHR0cEJhZFJlcXVlc3QgJiZcclxuICAgICAgICAgICAgICAgIHJlc3BvbnNlLmJvZHkgJiZcclxuICAgICAgICAgICAgICAgIHJlc3BvbnNlLmJvZHlbXCJuZXdlc3QtdmVyc2lvbnNcIl0gJiZcclxuICAgICAgICAgICAgICAgIHJlc3BvbnNlLmJvZHlbXCJuZXdlc3QtdmVyc2lvbnNcIl0ubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHJlc3BvbnNlLmJvZHlbXCJuZXdlc3QtdmVyc2lvbnNcIl1bMF07XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNhdGNoIChlKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxufVxyXG4vLyBPcHRpb25zIGZvciB0aGUgSU1EUyBlbmRwb2ludCByZXF1ZXN0XHJcblJlZ2lvbkRpc2NvdmVyeS5JTURTX09QVElPTlMgPSB7XHJcbiAgICBoZWFkZXJzOiB7XHJcbiAgICAgICAgTWV0YWRhdGE6IFwidHJ1ZVwiLFxyXG4gICAgfSxcclxufTtcblxuZXhwb3J0IHsgUmVnaW9uRGlzY292ZXJ5IH07XG4vLyMgc291cmNlTWFwcGluZ1VSTD1SZWdpb25EaXNjb3ZlcnkubWpzLm1hcFxuIiwiLyohIEBhenVyZS9tc2FsLWNvbW1vbiB2MTQuMTYuMCAyMDI0LTExLTA1ICovXG4ndXNlIHN0cmljdCc7XG5pbXBvcnQgeyBBdXRob3JpdHlUeXBlIH0gZnJvbSAnLi9BdXRob3JpdHlUeXBlLm1qcyc7XG5pbXBvcnQgeyBpc09wZW5JZENvbmZpZ1Jlc3BvbnNlIH0gZnJvbSAnLi9PcGVuSWRDb25maWdSZXNwb25zZS5tanMnO1xuaW1wb3J0IHsgVXJsU3RyaW5nIH0gZnJvbSAnLi4vdXJsL1VybFN0cmluZy5tanMnO1xuaW1wb3J0IHsgY3JlYXRlQ2xpZW50QXV0aEVycm9yIH0gZnJvbSAnLi4vZXJyb3IvQ2xpZW50QXV0aEVycm9yLm1qcyc7XG5pbXBvcnQgeyBDb25zdGFudHMsIEF1dGhvcml0eU1ldGFkYXRhU291cmNlLCBSZWdpb25EaXNjb3ZlcnlPdXRjb21lcywgQUFEQXV0aG9yaXR5Q29uc3RhbnRzIH0gZnJvbSAnLi4vdXRpbHMvQ29uc3RhbnRzLm1qcyc7XG5pbXBvcnQgeyBFbmRwb2ludE1ldGFkYXRhLCBnZXRDbG91ZERpc2NvdmVyeU1ldGFkYXRhRnJvbUhhcmRjb2RlZFZhbHVlcywgZ2V0Q2xvdWREaXNjb3ZlcnlNZXRhZGF0YUZyb21OZXR3b3JrUmVzcG9uc2UsIEluc3RhbmNlRGlzY292ZXJ5TWV0YWRhdGFBbGlhc2VzIH0gZnJvbSAnLi9BdXRob3JpdHlNZXRhZGF0YS5tanMnO1xuaW1wb3J0IHsgY3JlYXRlQ2xpZW50Q29uZmlndXJhdGlvbkVycm9yIH0gZnJvbSAnLi4vZXJyb3IvQ2xpZW50Q29uZmlndXJhdGlvbkVycm9yLm1qcyc7XG5pbXBvcnQgeyBQcm90b2NvbE1vZGUgfSBmcm9tICcuL1Byb3RvY29sTW9kZS5tanMnO1xuaW1wb3J0IHsgQXp1cmVDbG91ZEluc3RhbmNlIH0gZnJvbSAnLi9BdXRob3JpdHlPcHRpb25zLm1qcyc7XG5pbXBvcnQgeyBpc0Nsb3VkSW5zdGFuY2VEaXNjb3ZlcnlSZXNwb25zZSB9IGZyb20gJy4vQ2xvdWRJbnN0YW5jZURpc2NvdmVyeVJlc3BvbnNlLm1qcyc7XG5pbXBvcnQgeyBpc0Nsb3VkSW5zdGFuY2VEaXNjb3ZlcnlFcnJvclJlc3BvbnNlIH0gZnJvbSAnLi9DbG91ZEluc3RhbmNlRGlzY292ZXJ5RXJyb3JSZXNwb25zZS5tanMnO1xuaW1wb3J0IHsgUmVnaW9uRGlzY292ZXJ5IH0gZnJvbSAnLi9SZWdpb25EaXNjb3ZlcnkubWpzJztcbmltcG9ydCB7IEF1dGhFcnJvciB9IGZyb20gJy4uL2Vycm9yL0F1dGhFcnJvci5tanMnO1xuaW1wb3J0IHsgUGVyZm9ybWFuY2VFdmVudHMgfSBmcm9tICcuLi90ZWxlbWV0cnkvcGVyZm9ybWFuY2UvUGVyZm9ybWFuY2VFdmVudC5tanMnO1xuaW1wb3J0IHsgaW52b2tlQXN5bmMgfSBmcm9tICcuLi91dGlscy9GdW5jdGlvbldyYXBwZXJzLm1qcyc7XG5pbXBvcnQgeyBnZW5lcmF0ZUF1dGhvcml0eU1ldGFkYXRhRXhwaXJlc0F0LCB1cGRhdGVBdXRob3JpdHlFbmRwb2ludE1ldGFkYXRhLCBpc0F1dGhvcml0eU1ldGFkYXRhRXhwaXJlZCwgdXBkYXRlQ2xvdWREaXNjb3ZlcnlNZXRhZGF0YSB9IGZyb20gJy4uL2NhY2hlL3V0aWxzL0NhY2hlSGVscGVycy5tanMnO1xuaW1wb3J0IHsgZW5kcG9pbnRSZXNvbHV0aW9uRXJyb3IsIGVuZFNlc3Npb25FbmRwb2ludE5vdFN1cHBvcnRlZCwgb3BlbklkQ29uZmlnRXJyb3IgfSBmcm9tICcuLi9lcnJvci9DbGllbnRBdXRoRXJyb3JDb2Rlcy5tanMnO1xuaW1wb3J0IHsgaW52YWxpZEF1dGhvcml0eU1ldGFkYXRhLCB1bnRydXN0ZWRBdXRob3JpdHksIGludmFsaWRDbG91ZERpc2NvdmVyeU1ldGFkYXRhIH0gZnJvbSAnLi4vZXJyb3IvQ2xpZW50Q29uZmlndXJhdGlvbkVycm9yQ29kZXMubWpzJztcblxuLypcclxuICogQ29weXJpZ2h0IChjKSBNaWNyb3NvZnQgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuXHJcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgTGljZW5zZS5cclxuICovXHJcbi8qKlxyXG4gKiBUaGUgYXV0aG9yaXR5IGNsYXNzIHZhbGlkYXRlcyB0aGUgYXV0aG9yaXR5IFVSSXMgdXNlZCBieSB0aGUgdXNlciwgYW5kIHJldHJpZXZlcyB0aGUgT3BlbklEIENvbmZpZ3VyYXRpb24gRGF0YSBmcm9tIHRoZVxyXG4gKiBlbmRwb2ludC4gSXQgd2lsbCBzdG9yZSB0aGUgcGVydGluZW50IGNvbmZpZyBkYXRhIGluIHRoaXMgb2JqZWN0IGZvciB1c2UgZHVyaW5nIHRva2VuIGNhbGxzLlxyXG4gKiBAaW50ZXJuYWxcclxuICovXHJcbmNsYXNzIEF1dGhvcml0eSB7XHJcbiAgICBjb25zdHJ1Y3RvcihhdXRob3JpdHksIG5ldHdvcmtJbnRlcmZhY2UsIGNhY2hlTWFuYWdlciwgYXV0aG9yaXR5T3B0aW9ucywgbG9nZ2VyLCBjb3JyZWxhdGlvbklkLCBwZXJmb3JtYW5jZUNsaWVudCwgbWFuYWdlZElkZW50aXR5KSB7XHJcbiAgICAgICAgdGhpcy5jYW5vbmljYWxBdXRob3JpdHkgPSBhdXRob3JpdHk7XHJcbiAgICAgICAgdGhpcy5fY2Fub25pY2FsQXV0aG9yaXR5LnZhbGlkYXRlQXNVcmkoKTtcclxuICAgICAgICB0aGlzLm5ldHdvcmtJbnRlcmZhY2UgPSBuZXR3b3JrSW50ZXJmYWNlO1xyXG4gICAgICAgIHRoaXMuY2FjaGVNYW5hZ2VyID0gY2FjaGVNYW5hZ2VyO1xyXG4gICAgICAgIHRoaXMuYXV0aG9yaXR5T3B0aW9ucyA9IGF1dGhvcml0eU9wdGlvbnM7XHJcbiAgICAgICAgdGhpcy5yZWdpb25EaXNjb3ZlcnlNZXRhZGF0YSA9IHtcclxuICAgICAgICAgICAgcmVnaW9uX3VzZWQ6IHVuZGVmaW5lZCxcclxuICAgICAgICAgICAgcmVnaW9uX3NvdXJjZTogdW5kZWZpbmVkLFxyXG4gICAgICAgICAgICByZWdpb25fb3V0Y29tZTogdW5kZWZpbmVkLFxyXG4gICAgICAgIH07XHJcbiAgICAgICAgdGhpcy5sb2dnZXIgPSBsb2dnZXI7XHJcbiAgICAgICAgdGhpcy5wZXJmb3JtYW5jZUNsaWVudCA9IHBlcmZvcm1hbmNlQ2xpZW50O1xyXG4gICAgICAgIHRoaXMuY29ycmVsYXRpb25JZCA9IGNvcnJlbGF0aW9uSWQ7XHJcbiAgICAgICAgdGhpcy5tYW5hZ2VkSWRlbnRpdHkgPSBtYW5hZ2VkSWRlbnRpdHkgfHwgZmFsc2U7XHJcbiAgICAgICAgdGhpcy5yZWdpb25EaXNjb3ZlcnkgPSBuZXcgUmVnaW9uRGlzY292ZXJ5KG5ldHdvcmtJbnRlcmZhY2UsIHRoaXMubG9nZ2VyLCB0aGlzLnBlcmZvcm1hbmNlQ2xpZW50LCB0aGlzLmNvcnJlbGF0aW9uSWQpO1xyXG4gICAgfVxyXG4gICAgLyoqXHJcbiAgICAgKiBHZXQge0BsaW5rIEF1dGhvcml0eVR5cGV9XHJcbiAgICAgKiBAcGFyYW0gYXV0aG9yaXR5VXJpIHtAbGluayBJVXJpfVxyXG4gICAgICogQHByaXZhdGVcclxuICAgICAqL1xyXG4gICAgZ2V0QXV0aG9yaXR5VHlwZShhdXRob3JpdHlVcmkpIHtcclxuICAgICAgICAvLyBDSUFNIGF1dGggdXJsIHBhdHRlcm4gaXMgYmVpbmcgc3RhbmRhcmRpemVkIGFzOiA8dGVuYW50Pi5jaWFtbG9naW4uY29tXHJcbiAgICAgICAgaWYgKGF1dGhvcml0eVVyaS5Ib3N0TmFtZUFuZFBvcnQuZW5kc1dpdGgoQ29uc3RhbnRzLkNJQU1fQVVUSF9VUkwpKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBBdXRob3JpdHlUeXBlLkNpYW07XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNvbnN0IHBhdGhTZWdtZW50cyA9IGF1dGhvcml0eVVyaS5QYXRoU2VnbWVudHM7XHJcbiAgICAgICAgaWYgKHBhdGhTZWdtZW50cy5sZW5ndGgpIHtcclxuICAgICAgICAgICAgc3dpdGNoIChwYXRoU2VnbWVudHNbMF0udG9Mb3dlckNhc2UoKSkge1xyXG4gICAgICAgICAgICAgICAgY2FzZSBDb25zdGFudHMuQURGUzpcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gQXV0aG9yaXR5VHlwZS5BZGZzO1xyXG4gICAgICAgICAgICAgICAgY2FzZSBDb25zdGFudHMuRFNUUzpcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gQXV0aG9yaXR5VHlwZS5Ec3RzO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBBdXRob3JpdHlUeXBlLkRlZmF1bHQ7XHJcbiAgICB9XHJcbiAgICAvLyBTZWUgYWJvdmUgZm9yIEF1dGhvcml0eVR5cGVcclxuICAgIGdldCBhdXRob3JpdHlUeXBlKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmdldEF1dGhvcml0eVR5cGUodGhpcy5jYW5vbmljYWxBdXRob3JpdHlVcmxDb21wb25lbnRzKTtcclxuICAgIH1cclxuICAgIC8qKlxyXG4gICAgICogUHJvdG9jb2xNb2RlIGVudW0gcmVwcmVzZW50aW5nIHRoZSB3YXkgZW5kcG9pbnRzIGFyZSBjb25zdHJ1Y3RlZC5cclxuICAgICAqL1xyXG4gICAgZ2V0IHByb3RvY29sTW9kZSgpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5hdXRob3JpdHlPcHRpb25zLnByb3RvY29sTW9kZTtcclxuICAgIH1cclxuICAgIC8qKlxyXG4gICAgICogUmV0dXJucyBhdXRob3JpdHlPcHRpb25zIHdoaWNoIGNhbiBiZSB1c2VkIHRvIHJlaW5zdGFudGlhdGUgYSBuZXcgYXV0aG9yaXR5IGluc3RhbmNlXHJcbiAgICAgKi9cclxuICAgIGdldCBvcHRpb25zKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmF1dGhvcml0eU9wdGlvbnM7XHJcbiAgICB9XHJcbiAgICAvKipcclxuICAgICAqIEEgVVJMIHRoYXQgaXMgdGhlIGF1dGhvcml0eSBzZXQgYnkgdGhlIGRldmVsb3BlclxyXG4gICAgICovXHJcbiAgICBnZXQgY2Fub25pY2FsQXV0aG9yaXR5KCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9jYW5vbmljYWxBdXRob3JpdHkudXJsU3RyaW5nO1xyXG4gICAgfVxyXG4gICAgLyoqXHJcbiAgICAgKiBTZXRzIGNhbm9uaWNhbCBhdXRob3JpdHkuXHJcbiAgICAgKi9cclxuICAgIHNldCBjYW5vbmljYWxBdXRob3JpdHkodXJsKSB7XHJcbiAgICAgICAgdGhpcy5fY2Fub25pY2FsQXV0aG9yaXR5ID0gbmV3IFVybFN0cmluZyh1cmwpO1xyXG4gICAgICAgIHRoaXMuX2Nhbm9uaWNhbEF1dGhvcml0eS52YWxpZGF0ZUFzVXJpKCk7XHJcbiAgICAgICAgdGhpcy5fY2Fub25pY2FsQXV0aG9yaXR5VXJsQ29tcG9uZW50cyA9IG51bGw7XHJcbiAgICB9XHJcbiAgICAvKipcclxuICAgICAqIEdldCBhdXRob3JpdHkgY29tcG9uZW50cy5cclxuICAgICAqL1xyXG4gICAgZ2V0IGNhbm9uaWNhbEF1dGhvcml0eVVybENvbXBvbmVudHMoKSB7XHJcbiAgICAgICAgaWYgKCF0aGlzLl9jYW5vbmljYWxBdXRob3JpdHlVcmxDb21wb25lbnRzKSB7XHJcbiAgICAgICAgICAgIHRoaXMuX2Nhbm9uaWNhbEF1dGhvcml0eVVybENvbXBvbmVudHMgPVxyXG4gICAgICAgICAgICAgICAgdGhpcy5fY2Fub25pY2FsQXV0aG9yaXR5LmdldFVybENvbXBvbmVudHMoKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX2Nhbm9uaWNhbEF1dGhvcml0eVVybENvbXBvbmVudHM7XHJcbiAgICB9XHJcbiAgICAvKipcclxuICAgICAqIEdldCBob3N0bmFtZSBhbmQgcG9ydCBpLmUuIGxvZ2luLm1pY3Jvc29mdG9ubGluZS5jb21cclxuICAgICAqL1xyXG4gICAgZ2V0IGhvc3RuYW1lQW5kUG9ydCgpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5jYW5vbmljYWxBdXRob3JpdHlVcmxDb21wb25lbnRzLkhvc3ROYW1lQW5kUG9ydC50b0xvd2VyQ2FzZSgpO1xyXG4gICAgfVxyXG4gICAgLyoqXHJcbiAgICAgKiBHZXQgdGVuYW50IGZvciBhdXRob3JpdHkuXHJcbiAgICAgKi9cclxuICAgIGdldCB0ZW5hbnQoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuY2Fub25pY2FsQXV0aG9yaXR5VXJsQ29tcG9uZW50cy5QYXRoU2VnbWVudHNbMF07XHJcbiAgICB9XHJcbiAgICAvKipcclxuICAgICAqIE9BdXRoIC9hdXRob3JpemUgZW5kcG9pbnQgZm9yIHJlcXVlc3RzXHJcbiAgICAgKi9cclxuICAgIGdldCBhdXRob3JpemF0aW9uRW5kcG9pbnQoKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuZGlzY292ZXJ5Q29tcGxldGUoKSkge1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5yZXBsYWNlUGF0aCh0aGlzLm1ldGFkYXRhLmF1dGhvcml6YXRpb25fZW5kcG9pbnQpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgdGhyb3cgY3JlYXRlQ2xpZW50QXV0aEVycm9yKGVuZHBvaW50UmVzb2x1dGlvbkVycm9yKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICAvKipcclxuICAgICAqIE9BdXRoIC90b2tlbiBlbmRwb2ludCBmb3IgcmVxdWVzdHNcclxuICAgICAqL1xyXG4gICAgZ2V0IHRva2VuRW5kcG9pbnQoKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuZGlzY292ZXJ5Q29tcGxldGUoKSkge1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5yZXBsYWNlUGF0aCh0aGlzLm1ldGFkYXRhLnRva2VuX2VuZHBvaW50KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIHRocm93IGNyZWF0ZUNsaWVudEF1dGhFcnJvcihlbmRwb2ludFJlc29sdXRpb25FcnJvcik7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgZ2V0IGRldmljZUNvZGVFbmRwb2ludCgpIHtcclxuICAgICAgICBpZiAodGhpcy5kaXNjb3ZlcnlDb21wbGV0ZSgpKSB7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnJlcGxhY2VQYXRoKHRoaXMubWV0YWRhdGEudG9rZW5fZW5kcG9pbnQucmVwbGFjZShcIi90b2tlblwiLCBcIi9kZXZpY2Vjb2RlXCIpKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIHRocm93IGNyZWF0ZUNsaWVudEF1dGhFcnJvcihlbmRwb2ludFJlc29sdXRpb25FcnJvcik7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgLyoqXHJcbiAgICAgKiBPQXV0aCBsb2dvdXQgZW5kcG9pbnQgZm9yIHJlcXVlc3RzXHJcbiAgICAgKi9cclxuICAgIGdldCBlbmRTZXNzaW9uRW5kcG9pbnQoKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuZGlzY292ZXJ5Q29tcGxldGUoKSkge1xyXG4gICAgICAgICAgICAvLyBST1BDIHBvbGljaWVzIG1heSBub3QgaGF2ZSBlbmRfc2Vzc2lvbl9lbmRwb2ludCBzZXRcclxuICAgICAgICAgICAgaWYgKCF0aGlzLm1ldGFkYXRhLmVuZF9zZXNzaW9uX2VuZHBvaW50KSB7XHJcbiAgICAgICAgICAgICAgICB0aHJvdyBjcmVhdGVDbGllbnRBdXRoRXJyb3IoZW5kU2Vzc2lvbkVuZHBvaW50Tm90U3VwcG9ydGVkKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5yZXBsYWNlUGF0aCh0aGlzLm1ldGFkYXRhLmVuZF9zZXNzaW9uX2VuZHBvaW50KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIHRocm93IGNyZWF0ZUNsaWVudEF1dGhFcnJvcihlbmRwb2ludFJlc29sdXRpb25FcnJvcik7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgLyoqXHJcbiAgICAgKiBPQXV0aCBpc3N1ZXIgZm9yIHJlcXVlc3RzXHJcbiAgICAgKi9cclxuICAgIGdldCBzZWxmU2lnbmVkSnd0QXVkaWVuY2UoKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuZGlzY292ZXJ5Q29tcGxldGUoKSkge1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5yZXBsYWNlUGF0aCh0aGlzLm1ldGFkYXRhLmlzc3Vlcik7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICB0aHJvdyBjcmVhdGVDbGllbnRBdXRoRXJyb3IoZW5kcG9pbnRSZXNvbHV0aW9uRXJyb3IpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIC8qKlxyXG4gICAgICogSndrc191cmkgZm9yIHRva2VuIHNpZ25pbmcga2V5c1xyXG4gICAgICovXHJcbiAgICBnZXQgandrc1VyaSgpIHtcclxuICAgICAgICBpZiAodGhpcy5kaXNjb3ZlcnlDb21wbGV0ZSgpKSB7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnJlcGxhY2VQYXRoKHRoaXMubWV0YWRhdGEuandrc191cmkpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgdGhyb3cgY3JlYXRlQ2xpZW50QXV0aEVycm9yKGVuZHBvaW50UmVzb2x1dGlvbkVycm9yKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICAvKipcclxuICAgICAqIFJldHVybnMgYSBmbGFnIGluZGljYXRpbmcgdGhhdCB0ZW5hbnQgbmFtZSBjYW4gYmUgcmVwbGFjZWQgaW4gYXV0aG9yaXR5IHtAbGluayBJVXJpfVxyXG4gICAgICogQHBhcmFtIGF1dGhvcml0eVVyaSB7QGxpbmsgSVVyaX1cclxuICAgICAqIEBwcml2YXRlXHJcbiAgICAgKi9cclxuICAgIGNhblJlcGxhY2VUZW5hbnQoYXV0aG9yaXR5VXJpKSB7XHJcbiAgICAgICAgcmV0dXJuIChhdXRob3JpdHlVcmkuUGF0aFNlZ21lbnRzLmxlbmd0aCA9PT0gMSAmJlxyXG4gICAgICAgICAgICAhQXV0aG9yaXR5LnJlc2VydmVkVGVuYW50RG9tYWlucy5oYXMoYXV0aG9yaXR5VXJpLlBhdGhTZWdtZW50c1swXSkgJiZcclxuICAgICAgICAgICAgdGhpcy5nZXRBdXRob3JpdHlUeXBlKGF1dGhvcml0eVVyaSkgPT09IEF1dGhvcml0eVR5cGUuRGVmYXVsdCAmJlxyXG4gICAgICAgICAgICB0aGlzLnByb3RvY29sTW9kZSA9PT0gUHJvdG9jb2xNb2RlLkFBRCk7XHJcbiAgICB9XHJcbiAgICAvKipcclxuICAgICAqIFJlcGxhY2VzIHRlbmFudCBpbiB1cmwgcGF0aCB3aXRoIGN1cnJlbnQgdGVuYW50LiBEZWZhdWx0cyB0byBjb21tb24uXHJcbiAgICAgKiBAcGFyYW0gdXJsU3RyaW5nXHJcbiAgICAgKi9cclxuICAgIHJlcGxhY2VUZW5hbnQodXJsU3RyaW5nKSB7XHJcbiAgICAgICAgcmV0dXJuIHVybFN0cmluZy5yZXBsYWNlKC97dGVuYW50fXx7dGVuYW50aWR9L2csIHRoaXMudGVuYW50KTtcclxuICAgIH1cclxuICAgIC8qKlxyXG4gICAgICogUmVwbGFjZXMgcGF0aCBzdWNoIGFzIHRlbmFudCBvciBwb2xpY3kgd2l0aCB0aGUgY3VycmVudCB0ZW5hbnQgb3IgcG9saWN5LlxyXG4gICAgICogQHBhcmFtIHVybFN0cmluZ1xyXG4gICAgICovXHJcbiAgICByZXBsYWNlUGF0aCh1cmxTdHJpbmcpIHtcclxuICAgICAgICBsZXQgZW5kcG9pbnQgPSB1cmxTdHJpbmc7XHJcbiAgICAgICAgY29uc3QgY2FjaGVkQXV0aG9yaXR5VXJsID0gbmV3IFVybFN0cmluZyh0aGlzLm1ldGFkYXRhLmNhbm9uaWNhbF9hdXRob3JpdHkpO1xyXG4gICAgICAgIGNvbnN0IGNhY2hlZEF1dGhvcml0eVVybENvbXBvbmVudHMgPSBjYWNoZWRBdXRob3JpdHlVcmwuZ2V0VXJsQ29tcG9uZW50cygpO1xyXG4gICAgICAgIGNvbnN0IGNhY2hlZEF1dGhvcml0eVBhcnRzID0gY2FjaGVkQXV0aG9yaXR5VXJsQ29tcG9uZW50cy5QYXRoU2VnbWVudHM7XHJcbiAgICAgICAgY29uc3QgY3VycmVudEF1dGhvcml0eVBhcnRzID0gdGhpcy5jYW5vbmljYWxBdXRob3JpdHlVcmxDb21wb25lbnRzLlBhdGhTZWdtZW50cztcclxuICAgICAgICBjdXJyZW50QXV0aG9yaXR5UGFydHMuZm9yRWFjaCgoY3VycmVudFBhcnQsIGluZGV4KSA9PiB7XHJcbiAgICAgICAgICAgIGxldCBjYWNoZWRQYXJ0ID0gY2FjaGVkQXV0aG9yaXR5UGFydHNbaW5kZXhdO1xyXG4gICAgICAgICAgICBpZiAoaW5kZXggPT09IDAgJiZcclxuICAgICAgICAgICAgICAgIHRoaXMuY2FuUmVwbGFjZVRlbmFudChjYWNoZWRBdXRob3JpdHlVcmxDb21wb25lbnRzKSkge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgdGVuYW50SWQgPSBuZXcgVXJsU3RyaW5nKHRoaXMubWV0YWRhdGEuYXV0aG9yaXphdGlvbl9lbmRwb2ludCkuZ2V0VXJsQ29tcG9uZW50cygpLlBhdGhTZWdtZW50c1swXTtcclxuICAgICAgICAgICAgICAgIC8qKlxyXG4gICAgICAgICAgICAgICAgICogQ2hlY2sgaWYgQUFEIGNhbm9uaWNhbCBhdXRob3JpdHkgY29udGFpbnMgdGVuYW50IGRvbWFpbiBuYW1lLCBmb3IgZXhhbXBsZSBcInRlc3Rkb21haW4ub25taWNyb3NvZnQuY29tXCIsXHJcbiAgICAgICAgICAgICAgICAgKiBieSBjb21wYXJpbmcgaXRzIGZpcnN0IHBhdGggc2VnbWVudCB0byB0aGUgY29ycmVzcG9uZGluZyBhdXRob3JpemF0aW9uIGVuZHBvaW50IHBhdGggc2VnbWVudCwgd2hpY2ggaXNcclxuICAgICAgICAgICAgICAgICAqIGFsd2F5cyByZXNvbHZlZCB3aXRoIHRlbmFudCBpZCBieSBPSURDLlxyXG4gICAgICAgICAgICAgICAgICovXHJcbiAgICAgICAgICAgICAgICBpZiAoY2FjaGVkUGFydCAhPT0gdGVuYW50SWQpIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmxvZ2dlci52ZXJib3NlKGBSZXBsYWNpbmcgdGVuYW50IGRvbWFpbiBuYW1lICR7Y2FjaGVkUGFydH0gd2l0aCBpZCAke3RlbmFudElkfWApO1xyXG4gICAgICAgICAgICAgICAgICAgIGNhY2hlZFBhcnQgPSB0ZW5hbnRJZDtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAoY3VycmVudFBhcnQgIT09IGNhY2hlZFBhcnQpIHtcclxuICAgICAgICAgICAgICAgIGVuZHBvaW50ID0gZW5kcG9pbnQucmVwbGFjZShgLyR7Y2FjaGVkUGFydH0vYCwgYC8ke2N1cnJlbnRQYXJ0fS9gKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIHJldHVybiB0aGlzLnJlcGxhY2VUZW5hbnQoZW5kcG9pbnQpO1xyXG4gICAgfVxyXG4gICAgLyoqXHJcbiAgICAgKiBUaGUgZGVmYXVsdCBvcGVuIGlkIGNvbmZpZ3VyYXRpb24gZW5kcG9pbnQgZm9yIGFueSBjYW5vbmljYWwgYXV0aG9yaXR5LlxyXG4gICAgICovXHJcbiAgICBnZXQgZGVmYXVsdE9wZW5JZENvbmZpZ3VyYXRpb25FbmRwb2ludCgpIHtcclxuICAgICAgICBjb25zdCBjYW5vbmljYWxBdXRob3JpdHlIb3N0ID0gdGhpcy5ob3N0bmFtZUFuZFBvcnQ7XHJcbiAgICAgICAgaWYgKHRoaXMuY2Fub25pY2FsQXV0aG9yaXR5LmVuZHNXaXRoKFwidjIuMC9cIikgfHxcclxuICAgICAgICAgICAgdGhpcy5hdXRob3JpdHlUeXBlID09PSBBdXRob3JpdHlUeXBlLkFkZnMgfHxcclxuICAgICAgICAgICAgKHRoaXMucHJvdG9jb2xNb2RlICE9PSBQcm90b2NvbE1vZGUuQUFEICYmXHJcbiAgICAgICAgICAgICAgICAhdGhpcy5pc0FsaWFzT2ZLbm93bk1pY3Jvc29mdEF1dGhvcml0eShjYW5vbmljYWxBdXRob3JpdHlIb3N0KSkpIHtcclxuICAgICAgICAgICAgcmV0dXJuIGAke3RoaXMuY2Fub25pY2FsQXV0aG9yaXR5fS53ZWxsLWtub3duL29wZW5pZC1jb25maWd1cmF0aW9uYDtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIGAke3RoaXMuY2Fub25pY2FsQXV0aG9yaXR5fXYyLjAvLndlbGwta25vd24vb3BlbmlkLWNvbmZpZ3VyYXRpb25gO1xyXG4gICAgfVxyXG4gICAgLyoqXHJcbiAgICAgKiBCb29sZWFuIHRoYXQgcmV0dXJucyB3aGV0aGVyIG9yIG5vdCB0ZW5hbnQgZGlzY292ZXJ5IGhhcyBiZWVuIGNvbXBsZXRlZC5cclxuICAgICAqL1xyXG4gICAgZGlzY292ZXJ5Q29tcGxldGUoKSB7XHJcbiAgICAgICAgcmV0dXJuICEhdGhpcy5tZXRhZGF0YTtcclxuICAgIH1cclxuICAgIC8qKlxyXG4gICAgICogUGVyZm9ybSBlbmRwb2ludCBkaXNjb3ZlcnkgdG8gZGlzY292ZXIgYWxpYXNlcywgcHJlZmVycmVkX2NhY2hlLCBwcmVmZXJyZWRfbmV0d29ya1xyXG4gICAgICogYW5kIHRoZSAvYXV0aG9yaXplLCAvdG9rZW4gYW5kIGxvZ291dCBlbmRwb2ludHMuXHJcbiAgICAgKi9cclxuICAgIGFzeW5jIHJlc29sdmVFbmRwb2ludHNBc3luYygpIHtcclxuICAgICAgICB0aGlzLnBlcmZvcm1hbmNlQ2xpZW50Py5hZGRRdWV1ZU1lYXN1cmVtZW50KFBlcmZvcm1hbmNlRXZlbnRzLkF1dGhvcml0eVJlc29sdmVFbmRwb2ludHNBc3luYywgdGhpcy5jb3JyZWxhdGlvbklkKTtcclxuICAgICAgICBjb25zdCBtZXRhZGF0YUVudGl0eSA9IHRoaXMuZ2V0Q3VycmVudE1ldGFkYXRhRW50aXR5KCk7XHJcbiAgICAgICAgY29uc3QgY2xvdWREaXNjb3ZlcnlTb3VyY2UgPSBhd2FpdCBpbnZva2VBc3luYyh0aGlzLnVwZGF0ZUNsb3VkRGlzY292ZXJ5TWV0YWRhdGEuYmluZCh0aGlzKSwgUGVyZm9ybWFuY2VFdmVudHMuQXV0aG9yaXR5VXBkYXRlQ2xvdWREaXNjb3ZlcnlNZXRhZGF0YSwgdGhpcy5sb2dnZXIsIHRoaXMucGVyZm9ybWFuY2VDbGllbnQsIHRoaXMuY29ycmVsYXRpb25JZCkobWV0YWRhdGFFbnRpdHkpO1xyXG4gICAgICAgIHRoaXMuY2Fub25pY2FsQXV0aG9yaXR5ID0gdGhpcy5jYW5vbmljYWxBdXRob3JpdHkucmVwbGFjZSh0aGlzLmhvc3RuYW1lQW5kUG9ydCwgbWV0YWRhdGFFbnRpdHkucHJlZmVycmVkX25ldHdvcmspO1xyXG4gICAgICAgIGNvbnN0IGVuZHBvaW50U291cmNlID0gYXdhaXQgaW52b2tlQXN5bmModGhpcy51cGRhdGVFbmRwb2ludE1ldGFkYXRhLmJpbmQodGhpcyksIFBlcmZvcm1hbmNlRXZlbnRzLkF1dGhvcml0eVVwZGF0ZUVuZHBvaW50TWV0YWRhdGEsIHRoaXMubG9nZ2VyLCB0aGlzLnBlcmZvcm1hbmNlQ2xpZW50LCB0aGlzLmNvcnJlbGF0aW9uSWQpKG1ldGFkYXRhRW50aXR5KTtcclxuICAgICAgICB0aGlzLnVwZGF0ZUNhY2hlZE1ldGFkYXRhKG1ldGFkYXRhRW50aXR5LCBjbG91ZERpc2NvdmVyeVNvdXJjZSwge1xyXG4gICAgICAgICAgICBzb3VyY2U6IGVuZHBvaW50U291cmNlLFxyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIHRoaXMucGVyZm9ybWFuY2VDbGllbnQ/LmFkZEZpZWxkcyh7XHJcbiAgICAgICAgICAgIGNsb3VkRGlzY292ZXJ5U291cmNlOiBjbG91ZERpc2NvdmVyeVNvdXJjZSxcclxuICAgICAgICAgICAgYXV0aG9yaXR5RW5kcG9pbnRTb3VyY2U6IGVuZHBvaW50U291cmNlLFxyXG4gICAgICAgIH0sIHRoaXMuY29ycmVsYXRpb25JZCk7XHJcbiAgICB9XHJcbiAgICAvKipcclxuICAgICAqIFJldHVybnMgbWV0YWRhdGEgZW50aXR5IGZyb20gY2FjaGUgaWYgaXQgZXhpc3RzLCBvdGhlcndpc2VyIHJldHVybnMgYSBuZXcgbWV0YWRhdGEgZW50aXR5IGJ1aWx0XHJcbiAgICAgKiBmcm9tIHRoZSBjb25maWd1cmVkIGNhbm9uaWNhbCBhdXRob3JpdHlcclxuICAgICAqIEByZXR1cm5zXHJcbiAgICAgKi9cclxuICAgIGdldEN1cnJlbnRNZXRhZGF0YUVudGl0eSgpIHtcclxuICAgICAgICBsZXQgbWV0YWRhdGFFbnRpdHkgPSB0aGlzLmNhY2hlTWFuYWdlci5nZXRBdXRob3JpdHlNZXRhZGF0YUJ5QWxpYXModGhpcy5ob3N0bmFtZUFuZFBvcnQpO1xyXG4gICAgICAgIGlmICghbWV0YWRhdGFFbnRpdHkpIHtcclxuICAgICAgICAgICAgbWV0YWRhdGFFbnRpdHkgPSB7XHJcbiAgICAgICAgICAgICAgICBhbGlhc2VzOiBbXSxcclxuICAgICAgICAgICAgICAgIHByZWZlcnJlZF9jYWNoZTogdGhpcy5ob3N0bmFtZUFuZFBvcnQsXHJcbiAgICAgICAgICAgICAgICBwcmVmZXJyZWRfbmV0d29yazogdGhpcy5ob3N0bmFtZUFuZFBvcnQsXHJcbiAgICAgICAgICAgICAgICBjYW5vbmljYWxfYXV0aG9yaXR5OiB0aGlzLmNhbm9uaWNhbEF1dGhvcml0eSxcclxuICAgICAgICAgICAgICAgIGF1dGhvcml6YXRpb25fZW5kcG9pbnQ6IFwiXCIsXHJcbiAgICAgICAgICAgICAgICB0b2tlbl9lbmRwb2ludDogXCJcIixcclxuICAgICAgICAgICAgICAgIGVuZF9zZXNzaW9uX2VuZHBvaW50OiBcIlwiLFxyXG4gICAgICAgICAgICAgICAgaXNzdWVyOiBcIlwiLFxyXG4gICAgICAgICAgICAgICAgYWxpYXNlc0Zyb21OZXR3b3JrOiBmYWxzZSxcclxuICAgICAgICAgICAgICAgIGVuZHBvaW50c0Zyb21OZXR3b3JrOiBmYWxzZSxcclxuICAgICAgICAgICAgICAgIGV4cGlyZXNBdDogZ2VuZXJhdGVBdXRob3JpdHlNZXRhZGF0YUV4cGlyZXNBdCgpLFxyXG4gICAgICAgICAgICAgICAgandrc191cmk6IFwiXCIsXHJcbiAgICAgICAgICAgIH07XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBtZXRhZGF0YUVudGl0eTtcclxuICAgIH1cclxuICAgIC8qKlxyXG4gICAgICogVXBkYXRlcyBjYWNoZWQgbWV0YWRhdGEgYmFzZWQgb24gbWV0YWRhdGEgc291cmNlIGFuZCBzZXRzIHRoZSBpbnN0YW5jZSdzIG1ldGFkYXRhXHJcbiAgICAgKiBwcm9wZXJ0eSB0byB0aGUgc2FtZSB2YWx1ZVxyXG4gICAgICogQHBhcmFtIG1ldGFkYXRhRW50aXR5XHJcbiAgICAgKiBAcGFyYW0gY2xvdWREaXNjb3ZlcnlTb3VyY2VcclxuICAgICAqIEBwYXJhbSBlbmRwb2ludE1ldGFkYXRhUmVzdWx0XHJcbiAgICAgKi9cclxuICAgIHVwZGF0ZUNhY2hlZE1ldGFkYXRhKG1ldGFkYXRhRW50aXR5LCBjbG91ZERpc2NvdmVyeVNvdXJjZSwgZW5kcG9pbnRNZXRhZGF0YVJlc3VsdCkge1xyXG4gICAgICAgIGlmIChjbG91ZERpc2NvdmVyeVNvdXJjZSAhPT0gQXV0aG9yaXR5TWV0YWRhdGFTb3VyY2UuQ0FDSEUgJiZcclxuICAgICAgICAgICAgZW5kcG9pbnRNZXRhZGF0YVJlc3VsdD8uc291cmNlICE9PSBBdXRob3JpdHlNZXRhZGF0YVNvdXJjZS5DQUNIRSkge1xyXG4gICAgICAgICAgICAvLyBSZXNldCB0aGUgZXhwaXJhdGlvbiB0aW1lIHVubGVzcyBib3RoIHZhbHVlcyBjYW1lIGZyb20gYSBzdWNjZXNzZnVsIGNhY2hlIGxvb2t1cFxyXG4gICAgICAgICAgICBtZXRhZGF0YUVudGl0eS5leHBpcmVzQXQgPVxyXG4gICAgICAgICAgICAgICAgZ2VuZXJhdGVBdXRob3JpdHlNZXRhZGF0YUV4cGlyZXNBdCgpO1xyXG4gICAgICAgICAgICBtZXRhZGF0YUVudGl0eS5jYW5vbmljYWxfYXV0aG9yaXR5ID0gdGhpcy5jYW5vbmljYWxBdXRob3JpdHk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNvbnN0IGNhY2hlS2V5ID0gdGhpcy5jYWNoZU1hbmFnZXIuZ2VuZXJhdGVBdXRob3JpdHlNZXRhZGF0YUNhY2hlS2V5KG1ldGFkYXRhRW50aXR5LnByZWZlcnJlZF9jYWNoZSk7XHJcbiAgICAgICAgdGhpcy5jYWNoZU1hbmFnZXIuc2V0QXV0aG9yaXR5TWV0YWRhdGEoY2FjaGVLZXksIG1ldGFkYXRhRW50aXR5KTtcclxuICAgICAgICB0aGlzLm1ldGFkYXRhID0gbWV0YWRhdGFFbnRpdHk7XHJcbiAgICB9XHJcbiAgICAvKipcclxuICAgICAqIFVwZGF0ZSBBdXRob3JpdHlNZXRhZGF0YUVudGl0eSB3aXRoIG5ldyBlbmRwb2ludHMgYW5kIHJldHVybiB3aGVyZSB0aGUgaW5mb3JtYXRpb24gY2FtZSBmcm9tXHJcbiAgICAgKiBAcGFyYW0gbWV0YWRhdGFFbnRpdHlcclxuICAgICAqL1xyXG4gICAgYXN5bmMgdXBkYXRlRW5kcG9pbnRNZXRhZGF0YShtZXRhZGF0YUVudGl0eSkge1xyXG4gICAgICAgIHRoaXMucGVyZm9ybWFuY2VDbGllbnQ/LmFkZFF1ZXVlTWVhc3VyZW1lbnQoUGVyZm9ybWFuY2VFdmVudHMuQXV0aG9yaXR5VXBkYXRlRW5kcG9pbnRNZXRhZGF0YSwgdGhpcy5jb3JyZWxhdGlvbklkKTtcclxuICAgICAgICBjb25zdCBsb2NhbE1ldGFkYXRhID0gdGhpcy51cGRhdGVFbmRwb2ludE1ldGFkYXRhRnJvbUxvY2FsU291cmNlcyhtZXRhZGF0YUVudGl0eSk7XHJcbiAgICAgICAgLy8gRnVydGhlciB1cGRhdGUgbWF5IGJlIHJlcXVpcmVkIGZvciBoYXJkY29kZWQgbWV0YWRhdGEgaWYgcmVnaW9uYWwgbWV0YWRhdGEgaXMgcHJlZmVycmVkXHJcbiAgICAgICAgaWYgKGxvY2FsTWV0YWRhdGEpIHtcclxuICAgICAgICAgICAgaWYgKGxvY2FsTWV0YWRhdGEuc291cmNlID09PVxyXG4gICAgICAgICAgICAgICAgQXV0aG9yaXR5TWV0YWRhdGFTb3VyY2UuSEFSRENPREVEX1ZBTFVFUykge1xyXG4gICAgICAgICAgICAgICAgLy8gSWYgdGhlIHVzZXIgcHJlZmVycyB0byB1c2UgYW4gYXp1cmUgcmVnaW9uIHJlcGxhY2UgdGhlIGdsb2JhbCBlbmRwb2ludHMgd2l0aCByZWdpb25hbCBpbmZvcm1hdGlvbi5cclxuICAgICAgICAgICAgICAgIGlmICh0aGlzLmF1dGhvcml0eU9wdGlvbnMuYXp1cmVSZWdpb25Db25maWd1cmF0aW9uPy5henVyZVJlZ2lvbikge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChsb2NhbE1ldGFkYXRhLm1ldGFkYXRhKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGhhcmRjb2RlZE1ldGFkYXRhID0gYXdhaXQgaW52b2tlQXN5bmModGhpcy51cGRhdGVNZXRhZGF0YVdpdGhSZWdpb25hbEluZm9ybWF0aW9uLmJpbmQodGhpcyksIFBlcmZvcm1hbmNlRXZlbnRzLkF1dGhvcml0eVVwZGF0ZU1ldGFkYXRhV2l0aFJlZ2lvbmFsSW5mb3JtYXRpb24sIHRoaXMubG9nZ2VyLCB0aGlzLnBlcmZvcm1hbmNlQ2xpZW50LCB0aGlzLmNvcnJlbGF0aW9uSWQpKGxvY2FsTWV0YWRhdGEubWV0YWRhdGEpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB1cGRhdGVBdXRob3JpdHlFbmRwb2ludE1ldGFkYXRhKG1ldGFkYXRhRW50aXR5LCBoYXJkY29kZWRNZXRhZGF0YSwgZmFsc2UpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBtZXRhZGF0YUVudGl0eS5jYW5vbmljYWxfYXV0aG9yaXR5ID1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY2Fub25pY2FsQXV0aG9yaXR5O1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICByZXR1cm4gbG9jYWxNZXRhZGF0YS5zb3VyY2U7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIC8vIEdldCBtZXRhZGF0YSBmcm9tIG5ldHdvcmsgaWYgbG9jYWwgc291cmNlcyBhcmVuJ3QgYXZhaWxhYmxlXHJcbiAgICAgICAgbGV0IG1ldGFkYXRhID0gYXdhaXQgaW52b2tlQXN5bmModGhpcy5nZXRFbmRwb2ludE1ldGFkYXRhRnJvbU5ldHdvcmsuYmluZCh0aGlzKSwgUGVyZm9ybWFuY2VFdmVudHMuQXV0aG9yaXR5R2V0RW5kcG9pbnRNZXRhZGF0YUZyb21OZXR3b3JrLCB0aGlzLmxvZ2dlciwgdGhpcy5wZXJmb3JtYW5jZUNsaWVudCwgdGhpcy5jb3JyZWxhdGlvbklkKSgpO1xyXG4gICAgICAgIGlmIChtZXRhZGF0YSkge1xyXG4gICAgICAgICAgICAvLyBJZiB0aGUgdXNlciBwcmVmZXJzIHRvIHVzZSBhbiBhenVyZSByZWdpb24gcmVwbGFjZSB0aGUgZ2xvYmFsIGVuZHBvaW50cyB3aXRoIHJlZ2lvbmFsIGluZm9ybWF0aW9uLlxyXG4gICAgICAgICAgICBpZiAodGhpcy5hdXRob3JpdHlPcHRpb25zLmF6dXJlUmVnaW9uQ29uZmlndXJhdGlvbj8uYXp1cmVSZWdpb24pIHtcclxuICAgICAgICAgICAgICAgIG1ldGFkYXRhID0gYXdhaXQgaW52b2tlQXN5bmModGhpcy51cGRhdGVNZXRhZGF0YVdpdGhSZWdpb25hbEluZm9ybWF0aW9uLmJpbmQodGhpcyksIFBlcmZvcm1hbmNlRXZlbnRzLkF1dGhvcml0eVVwZGF0ZU1ldGFkYXRhV2l0aFJlZ2lvbmFsSW5mb3JtYXRpb24sIHRoaXMubG9nZ2VyLCB0aGlzLnBlcmZvcm1hbmNlQ2xpZW50LCB0aGlzLmNvcnJlbGF0aW9uSWQpKG1ldGFkYXRhKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB1cGRhdGVBdXRob3JpdHlFbmRwb2ludE1ldGFkYXRhKG1ldGFkYXRhRW50aXR5LCBtZXRhZGF0YSwgdHJ1ZSk7XHJcbiAgICAgICAgICAgIHJldHVybiBBdXRob3JpdHlNZXRhZGF0YVNvdXJjZS5ORVRXT1JLO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgLy8gTWV0YWRhdGEgY291bGQgbm90IGJlIG9idGFpbmVkIGZyb20gdGhlIGNvbmZpZywgY2FjaGUsIG5ldHdvcmsgb3IgaGFyZGNvZGVkIHZhbHVlc1xyXG4gICAgICAgICAgICB0aHJvdyBjcmVhdGVDbGllbnRBdXRoRXJyb3Iob3BlbklkQ29uZmlnRXJyb3IsIHRoaXMuZGVmYXVsdE9wZW5JZENvbmZpZ3VyYXRpb25FbmRwb2ludCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgLyoqXHJcbiAgICAgKiBVcGRhdGVzIGVuZHBvaW50IG1ldGFkYXRhIGZyb20gbG9jYWwgc291cmNlcyBhbmQgcmV0dXJucyB3aGVyZSB0aGUgaW5mb3JtYXRpb24gd2FzIHJldHJpZXZlZCBmcm9tIGFuZCB0aGUgbWV0YWRhdGEgY29uZmlnXHJcbiAgICAgKiByZXNwb25zZSBpZiB0aGUgc291cmNlIGlzIGhhcmRjb2RlZCBtZXRhZGF0YVxyXG4gICAgICogQHBhcmFtIG1ldGFkYXRhRW50aXR5XHJcbiAgICAgKiBAcmV0dXJuc1xyXG4gICAgICovXHJcbiAgICB1cGRhdGVFbmRwb2ludE1ldGFkYXRhRnJvbUxvY2FsU291cmNlcyhtZXRhZGF0YUVudGl0eSkge1xyXG4gICAgICAgIHRoaXMubG9nZ2VyLnZlcmJvc2UoXCJBdHRlbXB0aW5nIHRvIGdldCBlbmRwb2ludCBtZXRhZGF0YSBmcm9tIGF1dGhvcml0eSBjb25maWd1cmF0aW9uXCIpO1xyXG4gICAgICAgIGNvbnN0IGNvbmZpZ01ldGFkYXRhID0gdGhpcy5nZXRFbmRwb2ludE1ldGFkYXRhRnJvbUNvbmZpZygpO1xyXG4gICAgICAgIGlmIChjb25maWdNZXRhZGF0YSkge1xyXG4gICAgICAgICAgICB0aGlzLmxvZ2dlci52ZXJib3NlKFwiRm91bmQgZW5kcG9pbnQgbWV0YWRhdGEgaW4gYXV0aG9yaXR5IGNvbmZpZ3VyYXRpb25cIik7XHJcbiAgICAgICAgICAgIHVwZGF0ZUF1dGhvcml0eUVuZHBvaW50TWV0YWRhdGEobWV0YWRhdGFFbnRpdHksIGNvbmZpZ01ldGFkYXRhLCBmYWxzZSk7XHJcbiAgICAgICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgICAgICBzb3VyY2U6IEF1dGhvcml0eU1ldGFkYXRhU291cmNlLkNPTkZJRyxcclxuICAgICAgICAgICAgfTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5sb2dnZXIudmVyYm9zZShcIkRpZCBub3QgZmluZCBlbmRwb2ludCBtZXRhZGF0YSBpbiB0aGUgY29uZmlnLi4uIEF0dGVtcHRpbmcgdG8gZ2V0IGVuZHBvaW50IG1ldGFkYXRhIGZyb20gdGhlIGhhcmRjb2RlZCB2YWx1ZXMuXCIpO1xyXG4gICAgICAgIC8vIHNraXBBdXRob3JpdHlNZXRhZGF0YUNhY2hlIGlzIHVzZWQgdG8gYnlwYXNzIGhhcmRjb2RlZCBhdXRob3JpdHkgbWV0YWRhdGEgYW5kIGZvcmNlIGEgbmV0d29yayBtZXRhZGF0YSBjYWNoZSBsb29rdXAgYW5kIG5ldHdvcmsgbWV0YWRhdGEgcmVxdWVzdCBpZiBubyBjYWNoZWQgcmVzcG9uc2UgaXMgYXZhaWxhYmxlLlxyXG4gICAgICAgIGlmICh0aGlzLmF1dGhvcml0eU9wdGlvbnMuc2tpcEF1dGhvcml0eU1ldGFkYXRhQ2FjaGUpIHtcclxuICAgICAgICAgICAgdGhpcy5sb2dnZXIudmVyYm9zZShcIlNraXBwaW5nIGhhcmRjb2RlZCBtZXRhZGF0YSBjYWNoZSBzaW5jZSBza2lwQXV0aG9yaXR5TWV0YWRhdGFDYWNoZSBpcyBzZXQgdG8gdHJ1ZS4gQXR0ZW1wdGluZyB0byBnZXQgZW5kcG9pbnQgbWV0YWRhdGEgZnJvbSB0aGUgbmV0d29yayBtZXRhZGF0YSBjYWNoZS5cIik7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICBjb25zdCBoYXJkY29kZWRNZXRhZGF0YSA9IHRoaXMuZ2V0RW5kcG9pbnRNZXRhZGF0YUZyb21IYXJkY29kZWRWYWx1ZXMoKTtcclxuICAgICAgICAgICAgaWYgKGhhcmRjb2RlZE1ldGFkYXRhKSB7XHJcbiAgICAgICAgICAgICAgICB1cGRhdGVBdXRob3JpdHlFbmRwb2ludE1ldGFkYXRhKG1ldGFkYXRhRW50aXR5LCBoYXJkY29kZWRNZXRhZGF0YSwgZmFsc2UpO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgICAgICAgICBzb3VyY2U6IEF1dGhvcml0eU1ldGFkYXRhU291cmNlLkhBUkRDT0RFRF9WQUxVRVMsXHJcbiAgICAgICAgICAgICAgICAgICAgbWV0YWRhdGE6IGhhcmRjb2RlZE1ldGFkYXRhLFxyXG4gICAgICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHRoaXMubG9nZ2VyLnZlcmJvc2UoXCJEaWQgbm90IGZpbmQgZW5kcG9pbnQgbWV0YWRhdGEgaW4gaGFyZGNvZGVkIHZhbHVlcy4uLiBBdHRlbXB0aW5nIHRvIGdldCBlbmRwb2ludCBtZXRhZGF0YSBmcm9tIHRoZSBuZXR3b3JrIG1ldGFkYXRhIGNhY2hlLlwiKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICAvLyBDaGVjayBjYWNoZWQgbWV0YWRhdGEgZW50aXR5IGV4cGlyYXRpb24gc3RhdHVzXHJcbiAgICAgICAgY29uc3QgbWV0YWRhdGFFbnRpdHlFeHBpcmVkID0gaXNBdXRob3JpdHlNZXRhZGF0YUV4cGlyZWQobWV0YWRhdGFFbnRpdHkpO1xyXG4gICAgICAgIGlmICh0aGlzLmlzQXV0aG9yaXR5U2FtZVR5cGUobWV0YWRhdGFFbnRpdHkpICYmXHJcbiAgICAgICAgICAgIG1ldGFkYXRhRW50aXR5LmVuZHBvaW50c0Zyb21OZXR3b3JrICYmXHJcbiAgICAgICAgICAgICFtZXRhZGF0YUVudGl0eUV4cGlyZWQpIHtcclxuICAgICAgICAgICAgLy8gTm8gbmVlZCB0byB1cGRhdGVcclxuICAgICAgICAgICAgdGhpcy5sb2dnZXIudmVyYm9zZShcIkZvdW5kIGVuZHBvaW50IG1ldGFkYXRhIGluIHRoZSBjYWNoZS5cIik7XHJcbiAgICAgICAgICAgIHJldHVybiB7IHNvdXJjZTogQXV0aG9yaXR5TWV0YWRhdGFTb3VyY2UuQ0FDSEUgfTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSBpZiAobWV0YWRhdGFFbnRpdHlFeHBpcmVkKSB7XHJcbiAgICAgICAgICAgIHRoaXMubG9nZ2VyLnZlcmJvc2UoXCJUaGUgbWV0YWRhdGEgZW50aXR5IGlzIGV4cGlyZWQuXCIpO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgIH1cclxuICAgIC8qKlxyXG4gICAgICogQ29tcGFyZXMgdGhlIG51bWJlciBvZiB1cmwgY29tcG9uZW50cyBhZnRlciB0aGUgZG9tYWluIHRvIGRldGVybWluZSBpZiB0aGUgY2FjaGVkXHJcbiAgICAgKiBhdXRob3JpdHkgbWV0YWRhdGEgY2FuIGJlIHVzZWQgZm9yIHRoZSByZXF1ZXN0ZWQgYXV0aG9yaXR5LiBQcm90ZWN0cyBhZ2FpbnN0IHNhbWUgZG9tYWluIGRpZmZlcmVudFxyXG4gICAgICogYXV0aG9yaXR5IHN1Y2ggYXMgbG9naW4ubWljcm9zb2Z0b25saW5lLmNvbS90ZW5hbnQgYW5kIGxvZ2luLm1pY3Jvc29mdG9ubGluZS5jb20vdGZwL3RlbmFudC9wb2xpY3lcclxuICAgICAqIEBwYXJhbSBtZXRhZGF0YUVudGl0eVxyXG4gICAgICovXHJcbiAgICBpc0F1dGhvcml0eVNhbWVUeXBlKG1ldGFkYXRhRW50aXR5KSB7XHJcbiAgICAgICAgY29uc3QgY2FjaGVkQXV0aG9yaXR5VXJsID0gbmV3IFVybFN0cmluZyhtZXRhZGF0YUVudGl0eS5jYW5vbmljYWxfYXV0aG9yaXR5KTtcclxuICAgICAgICBjb25zdCBjYWNoZWRQYXJ0cyA9IGNhY2hlZEF1dGhvcml0eVVybC5nZXRVcmxDb21wb25lbnRzKCkuUGF0aFNlZ21lbnRzO1xyXG4gICAgICAgIHJldHVybiAoY2FjaGVkUGFydHMubGVuZ3RoID09PVxyXG4gICAgICAgICAgICB0aGlzLmNhbm9uaWNhbEF1dGhvcml0eVVybENvbXBvbmVudHMuUGF0aFNlZ21lbnRzLmxlbmd0aCk7XHJcbiAgICB9XHJcbiAgICAvKipcclxuICAgICAqIFBhcnNlIGF1dGhvcml0eU1ldGFkYXRhIGNvbmZpZyBvcHRpb25cclxuICAgICAqL1xyXG4gICAgZ2V0RW5kcG9pbnRNZXRhZGF0YUZyb21Db25maWcoKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuYXV0aG9yaXR5T3B0aW9ucy5hdXRob3JpdHlNZXRhZGF0YSkge1xyXG4gICAgICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIEpTT04ucGFyc2UodGhpcy5hdXRob3JpdHlPcHRpb25zLmF1dGhvcml0eU1ldGFkYXRhKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBjYXRjaCAoZSkge1xyXG4gICAgICAgICAgICAgICAgdGhyb3cgY3JlYXRlQ2xpZW50Q29uZmlndXJhdGlvbkVycm9yKGludmFsaWRBdXRob3JpdHlNZXRhZGF0YSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICB9XHJcbiAgICAvKipcclxuICAgICAqIEdldHMgT0F1dGggZW5kcG9pbnRzIGZyb20gdGhlIGdpdmVuIE9wZW5JRCBjb25maWd1cmF0aW9uIGVuZHBvaW50LlxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSBoYXNIYXJkY29kZWRNZXRhZGF0YSBib29sZWFuXHJcbiAgICAgKi9cclxuICAgIGFzeW5jIGdldEVuZHBvaW50TWV0YWRhdGFGcm9tTmV0d29yaygpIHtcclxuICAgICAgICB0aGlzLnBlcmZvcm1hbmNlQ2xpZW50Py5hZGRRdWV1ZU1lYXN1cmVtZW50KFBlcmZvcm1hbmNlRXZlbnRzLkF1dGhvcml0eUdldEVuZHBvaW50TWV0YWRhdGFGcm9tTmV0d29yaywgdGhpcy5jb3JyZWxhdGlvbklkKTtcclxuICAgICAgICBjb25zdCBvcHRpb25zID0ge307XHJcbiAgICAgICAgLypcclxuICAgICAgICAgKiBUT0RPOiBBZGQgYSB0aW1lb3V0IGlmIHRoZSBhdXRob3JpdHkgZXhpc3RzIGluIG91ciBsaWJyYXJ5J3NcclxuICAgICAgICAgKiBoYXJkY29kZWQgbGlzdCBvZiBtZXRhZGF0YVxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIGNvbnN0IG9wZW5JZENvbmZpZ3VyYXRpb25FbmRwb2ludCA9IHRoaXMuZGVmYXVsdE9wZW5JZENvbmZpZ3VyYXRpb25FbmRwb2ludDtcclxuICAgICAgICB0aGlzLmxvZ2dlci52ZXJib3NlKGBBdXRob3JpdHkuZ2V0RW5kcG9pbnRNZXRhZGF0YUZyb21OZXR3b3JrOiBhdHRlbXB0aW5nIHRvIHJldHJpZXZlIE9BdXRoIGVuZHBvaW50cyBmcm9tICR7b3BlbklkQ29uZmlndXJhdGlvbkVuZHBvaW50fWApO1xyXG4gICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgdGhpcy5uZXR3b3JrSW50ZXJmYWNlLnNlbmRHZXRSZXF1ZXN0QXN5bmMob3BlbklkQ29uZmlndXJhdGlvbkVuZHBvaW50LCBvcHRpb25zKTtcclxuICAgICAgICAgICAgY29uc3QgaXNWYWxpZFJlc3BvbnNlID0gaXNPcGVuSWRDb25maWdSZXNwb25zZShyZXNwb25zZS5ib2R5KTtcclxuICAgICAgICAgICAgaWYgKGlzVmFsaWRSZXNwb25zZSkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHJlc3BvbnNlLmJvZHk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmxvZ2dlci52ZXJib3NlKGBBdXRob3JpdHkuZ2V0RW5kcG9pbnRNZXRhZGF0YUZyb21OZXR3b3JrOiBjb3VsZCBub3QgcGFyc2UgcmVzcG9uc2UgYXMgT3BlbklEIGNvbmZpZ3VyYXRpb25gKTtcclxuICAgICAgICAgICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNhdGNoIChlKSB7XHJcbiAgICAgICAgICAgIHRoaXMubG9nZ2VyLnZlcmJvc2UoYEF1dGhvcml0eS5nZXRFbmRwb2ludE1ldGFkYXRhRnJvbU5ldHdvcms6ICR7ZX1gKTtcclxuICAgICAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgLyoqXHJcbiAgICAgKiBHZXQgT0F1dGggZW5kcG9pbnRzIGZvciBjb21tb24gYXV0aG9yaXRpZXMuXHJcbiAgICAgKi9cclxuICAgIGdldEVuZHBvaW50TWV0YWRhdGFGcm9tSGFyZGNvZGVkVmFsdWVzKCkge1xyXG4gICAgICAgIGlmICh0aGlzLmhvc3RuYW1lQW5kUG9ydCBpbiBFbmRwb2ludE1ldGFkYXRhKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBFbmRwb2ludE1ldGFkYXRhW3RoaXMuaG9zdG5hbWVBbmRQb3J0XTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICB9XHJcbiAgICAvKipcclxuICAgICAqIFVwZGF0ZSB0aGUgcmV0cmlldmVkIG1ldGFkYXRhIHdpdGggcmVnaW9uYWwgaW5mb3JtYXRpb24uXHJcbiAgICAgKiBVc2VyIHNlbGVjdGVkIEF6dXJlIHJlZ2lvbiB3aWxsIGJlIHVzZWQgaWYgY29uZmlndXJlZC5cclxuICAgICAqL1xyXG4gICAgYXN5bmMgdXBkYXRlTWV0YWRhdGFXaXRoUmVnaW9uYWxJbmZvcm1hdGlvbihtZXRhZGF0YSkge1xyXG4gICAgICAgIHRoaXMucGVyZm9ybWFuY2VDbGllbnQ/LmFkZFF1ZXVlTWVhc3VyZW1lbnQoUGVyZm9ybWFuY2VFdmVudHMuQXV0aG9yaXR5VXBkYXRlTWV0YWRhdGFXaXRoUmVnaW9uYWxJbmZvcm1hdGlvbiwgdGhpcy5jb3JyZWxhdGlvbklkKTtcclxuICAgICAgICBjb25zdCB1c2VyQ29uZmlndXJlZEF6dXJlUmVnaW9uID0gdGhpcy5hdXRob3JpdHlPcHRpb25zLmF6dXJlUmVnaW9uQ29uZmlndXJhdGlvbj8uYXp1cmVSZWdpb247XHJcbiAgICAgICAgaWYgKHVzZXJDb25maWd1cmVkQXp1cmVSZWdpb24pIHtcclxuICAgICAgICAgICAgaWYgKHVzZXJDb25maWd1cmVkQXp1cmVSZWdpb24gIT09XHJcbiAgICAgICAgICAgICAgICBDb25zdGFudHMuQVpVUkVfUkVHSU9OX0FVVE9fRElTQ09WRVJfRkxBRykge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5yZWdpb25EaXNjb3ZlcnlNZXRhZGF0YS5yZWdpb25fb3V0Y29tZSA9XHJcbiAgICAgICAgICAgICAgICAgICAgUmVnaW9uRGlzY292ZXJ5T3V0Y29tZXMuQ09ORklHVVJFRF9OT19BVVRPX0RFVEVDVElPTjtcclxuICAgICAgICAgICAgICAgIHRoaXMucmVnaW9uRGlzY292ZXJ5TWV0YWRhdGEucmVnaW9uX3VzZWQgPVxyXG4gICAgICAgICAgICAgICAgICAgIHVzZXJDb25maWd1cmVkQXp1cmVSZWdpb247XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gQXV0aG9yaXR5LnJlcGxhY2VXaXRoUmVnaW9uYWxJbmZvcm1hdGlvbihtZXRhZGF0YSwgdXNlckNvbmZpZ3VyZWRBenVyZVJlZ2lvbik7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgY29uc3QgYXV0b2RldGVjdGVkUmVnaW9uTmFtZSA9IGF3YWl0IGludm9rZUFzeW5jKHRoaXMucmVnaW9uRGlzY292ZXJ5LmRldGVjdFJlZ2lvbi5iaW5kKHRoaXMucmVnaW9uRGlzY292ZXJ5KSwgUGVyZm9ybWFuY2VFdmVudHMuUmVnaW9uRGlzY292ZXJ5RGV0ZWN0UmVnaW9uLCB0aGlzLmxvZ2dlciwgdGhpcy5wZXJmb3JtYW5jZUNsaWVudCwgdGhpcy5jb3JyZWxhdGlvbklkKSh0aGlzLmF1dGhvcml0eU9wdGlvbnMuYXp1cmVSZWdpb25Db25maWd1cmF0aW9uXHJcbiAgICAgICAgICAgICAgICA/LmVudmlyb25tZW50UmVnaW9uLCB0aGlzLnJlZ2lvbkRpc2NvdmVyeU1ldGFkYXRhKTtcclxuICAgICAgICAgICAgaWYgKGF1dG9kZXRlY3RlZFJlZ2lvbk5hbWUpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMucmVnaW9uRGlzY292ZXJ5TWV0YWRhdGEucmVnaW9uX291dGNvbWUgPVxyXG4gICAgICAgICAgICAgICAgICAgIFJlZ2lvbkRpc2NvdmVyeU91dGNvbWVzLkFVVE9fREVURUNUSU9OX1JFUVVFU1RFRF9TVUNDRVNTRlVMO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5yZWdpb25EaXNjb3ZlcnlNZXRhZGF0YS5yZWdpb25fdXNlZCA9XHJcbiAgICAgICAgICAgICAgICAgICAgYXV0b2RldGVjdGVkUmVnaW9uTmFtZTtcclxuICAgICAgICAgICAgICAgIHJldHVybiBBdXRob3JpdHkucmVwbGFjZVdpdGhSZWdpb25hbEluZm9ybWF0aW9uKG1ldGFkYXRhLCBhdXRvZGV0ZWN0ZWRSZWdpb25OYW1lKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB0aGlzLnJlZ2lvbkRpc2NvdmVyeU1ldGFkYXRhLnJlZ2lvbl9vdXRjb21lID1cclxuICAgICAgICAgICAgICAgIFJlZ2lvbkRpc2NvdmVyeU91dGNvbWVzLkFVVE9fREVURUNUSU9OX1JFUVVFU1RFRF9GQUlMRUQ7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBtZXRhZGF0YTtcclxuICAgIH1cclxuICAgIC8qKlxyXG4gICAgICogVXBkYXRlcyB0aGUgQXV0aG9yaXR5TWV0YWRhdGFFbnRpdHkgd2l0aCBuZXcgYWxpYXNlcywgcHJlZmVycmVkX25ldHdvcmsgYW5kIHByZWZlcnJlZF9jYWNoZVxyXG4gICAgICogYW5kIHJldHVybnMgd2hlcmUgdGhlIGluZm9ybWF0aW9uIHdhcyByZXRyaWV2ZWQgZnJvbVxyXG4gICAgICogQHBhcmFtIG1ldGFkYXRhRW50aXR5XHJcbiAgICAgKiBAcmV0dXJucyBBdXRob3JpdHlNZXRhZGF0YVNvdXJjZVxyXG4gICAgICovXHJcbiAgICBhc3luYyB1cGRhdGVDbG91ZERpc2NvdmVyeU1ldGFkYXRhKG1ldGFkYXRhRW50aXR5KSB7XHJcbiAgICAgICAgdGhpcy5wZXJmb3JtYW5jZUNsaWVudD8uYWRkUXVldWVNZWFzdXJlbWVudChQZXJmb3JtYW5jZUV2ZW50cy5BdXRob3JpdHlVcGRhdGVDbG91ZERpc2NvdmVyeU1ldGFkYXRhLCB0aGlzLmNvcnJlbGF0aW9uSWQpO1xyXG4gICAgICAgIGNvbnN0IGxvY2FsTWV0YWRhdGFTb3VyY2UgPSB0aGlzLnVwZGF0ZUNsb3VkRGlzY292ZXJ5TWV0YWRhdGFGcm9tTG9jYWxTb3VyY2VzKG1ldGFkYXRhRW50aXR5KTtcclxuICAgICAgICBpZiAobG9jYWxNZXRhZGF0YVNvdXJjZSkge1xyXG4gICAgICAgICAgICByZXR1cm4gbG9jYWxNZXRhZGF0YVNvdXJjZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgLy8gRmFsbGJhY2sgdG8gbmV0d29yayBhcyBtZXRhZGF0YSBzb3VyY2VcclxuICAgICAgICBjb25zdCBtZXRhZGF0YSA9IGF3YWl0IGludm9rZUFzeW5jKHRoaXMuZ2V0Q2xvdWREaXNjb3ZlcnlNZXRhZGF0YUZyb21OZXR3b3JrLmJpbmQodGhpcyksIFBlcmZvcm1hbmNlRXZlbnRzLkF1dGhvcml0eUdldENsb3VkRGlzY292ZXJ5TWV0YWRhdGFGcm9tTmV0d29yaywgdGhpcy5sb2dnZXIsIHRoaXMucGVyZm9ybWFuY2VDbGllbnQsIHRoaXMuY29ycmVsYXRpb25JZCkoKTtcclxuICAgICAgICBpZiAobWV0YWRhdGEpIHtcclxuICAgICAgICAgICAgdXBkYXRlQ2xvdWREaXNjb3ZlcnlNZXRhZGF0YShtZXRhZGF0YUVudGl0eSwgbWV0YWRhdGEsIHRydWUpO1xyXG4gICAgICAgICAgICByZXR1cm4gQXV0aG9yaXR5TWV0YWRhdGFTb3VyY2UuTkVUV09SSztcclxuICAgICAgICB9XHJcbiAgICAgICAgLy8gTWV0YWRhdGEgY291bGQgbm90IGJlIG9idGFpbmVkIGZyb20gdGhlIGNvbmZpZywgY2FjaGUsIG5ldHdvcmsgb3IgaGFyZGNvZGVkIHZhbHVlc1xyXG4gICAgICAgIHRocm93IGNyZWF0ZUNsaWVudENvbmZpZ3VyYXRpb25FcnJvcih1bnRydXN0ZWRBdXRob3JpdHkpO1xyXG4gICAgfVxyXG4gICAgdXBkYXRlQ2xvdWREaXNjb3ZlcnlNZXRhZGF0YUZyb21Mb2NhbFNvdXJjZXMobWV0YWRhdGFFbnRpdHkpIHtcclxuICAgICAgICB0aGlzLmxvZ2dlci52ZXJib3NlKFwiQXR0ZW1wdGluZyB0byBnZXQgY2xvdWQgZGlzY292ZXJ5IG1ldGFkYXRhICBmcm9tIGF1dGhvcml0eSBjb25maWd1cmF0aW9uXCIpO1xyXG4gICAgICAgIHRoaXMubG9nZ2VyLnZlcmJvc2VQaWkoYEtub3duIEF1dGhvcml0aWVzOiAke3RoaXMuYXV0aG9yaXR5T3B0aW9ucy5rbm93bkF1dGhvcml0aWVzIHx8XHJcbiAgICAgICAgICAgIENvbnN0YW50cy5OT1RfQVBQTElDQUJMRX1gKTtcclxuICAgICAgICB0aGlzLmxvZ2dlci52ZXJib3NlUGlpKGBBdXRob3JpdHkgTWV0YWRhdGE6ICR7dGhpcy5hdXRob3JpdHlPcHRpb25zLmF1dGhvcml0eU1ldGFkYXRhIHx8XHJcbiAgICAgICAgICAgIENvbnN0YW50cy5OT1RfQVBQTElDQUJMRX1gKTtcclxuICAgICAgICB0aGlzLmxvZ2dlci52ZXJib3NlUGlpKGBDYW5vbmljYWwgQXV0aG9yaXR5OiAke21ldGFkYXRhRW50aXR5LmNhbm9uaWNhbF9hdXRob3JpdHkgfHwgQ29uc3RhbnRzLk5PVF9BUFBMSUNBQkxFfWApO1xyXG4gICAgICAgIGNvbnN0IG1ldGFkYXRhID0gdGhpcy5nZXRDbG91ZERpc2NvdmVyeU1ldGFkYXRhRnJvbUNvbmZpZygpO1xyXG4gICAgICAgIGlmIChtZXRhZGF0YSkge1xyXG4gICAgICAgICAgICB0aGlzLmxvZ2dlci52ZXJib3NlKFwiRm91bmQgY2xvdWQgZGlzY292ZXJ5IG1ldGFkYXRhIGluIGF1dGhvcml0eSBjb25maWd1cmF0aW9uXCIpO1xyXG4gICAgICAgICAgICB1cGRhdGVDbG91ZERpc2NvdmVyeU1ldGFkYXRhKG1ldGFkYXRhRW50aXR5LCBtZXRhZGF0YSwgZmFsc2UpO1xyXG4gICAgICAgICAgICByZXR1cm4gQXV0aG9yaXR5TWV0YWRhdGFTb3VyY2UuQ09ORklHO1xyXG4gICAgICAgIH1cclxuICAgICAgICAvLyBJZiB0aGUgY2FjaGVkIG1ldGFkYXRhIGNhbWUgZnJvbSBjb25maWcgYnV0IHRoYXQgY29uZmlnIHdhcyBub3QgcGFzc2VkIHRvIHRoaXMgaW5zdGFuY2UsIHdlIG11c3QgZ28gdG8gaGFyZGNvZGVkIHZhbHVlc1xyXG4gICAgICAgIHRoaXMubG9nZ2VyLnZlcmJvc2UoXCJEaWQgbm90IGZpbmQgY2xvdWQgZGlzY292ZXJ5IG1ldGFkYXRhIGluIHRoZSBjb25maWcuLi4gQXR0ZW1wdGluZyB0byBnZXQgY2xvdWQgZGlzY292ZXJ5IG1ldGFkYXRhIGZyb20gdGhlIGhhcmRjb2RlZCB2YWx1ZXMuXCIpO1xyXG4gICAgICAgIGlmICh0aGlzLm9wdGlvbnMuc2tpcEF1dGhvcml0eU1ldGFkYXRhQ2FjaGUpIHtcclxuICAgICAgICAgICAgdGhpcy5sb2dnZXIudmVyYm9zZShcIlNraXBwaW5nIGhhcmRjb2RlZCBjbG91ZCBkaXNjb3ZlcnkgbWV0YWRhdGEgY2FjaGUgc2luY2Ugc2tpcEF1dGhvcml0eU1ldGFkYXRhQ2FjaGUgaXMgc2V0IHRvIHRydWUuIEF0dGVtcHRpbmcgdG8gZ2V0IGNsb3VkIGRpc2NvdmVyeSBtZXRhZGF0YSBmcm9tIHRoZSBuZXR3b3JrIG1ldGFkYXRhIGNhY2hlLlwiKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGhhcmRjb2RlZE1ldGFkYXRhID0gZ2V0Q2xvdWREaXNjb3ZlcnlNZXRhZGF0YUZyb21IYXJkY29kZWRWYWx1ZXModGhpcy5ob3N0bmFtZUFuZFBvcnQpO1xyXG4gICAgICAgICAgICBpZiAoaGFyZGNvZGVkTWV0YWRhdGEpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMubG9nZ2VyLnZlcmJvc2UoXCJGb3VuZCBjbG91ZCBkaXNjb3ZlcnkgbWV0YWRhdGEgZnJvbSBoYXJkY29kZWQgdmFsdWVzLlwiKTtcclxuICAgICAgICAgICAgICAgIHVwZGF0ZUNsb3VkRGlzY292ZXJ5TWV0YWRhdGEobWV0YWRhdGFFbnRpdHksIGhhcmRjb2RlZE1ldGFkYXRhLCBmYWxzZSk7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gQXV0aG9yaXR5TWV0YWRhdGFTb3VyY2UuSEFSRENPREVEX1ZBTFVFUztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB0aGlzLmxvZ2dlci52ZXJib3NlKFwiRGlkIG5vdCBmaW5kIGNsb3VkIGRpc2NvdmVyeSBtZXRhZGF0YSBpbiBoYXJkY29kZWQgdmFsdWVzLi4uIEF0dGVtcHRpbmcgdG8gZ2V0IGNsb3VkIGRpc2NvdmVyeSBtZXRhZGF0YSBmcm9tIHRoZSBuZXR3b3JrIG1ldGFkYXRhIGNhY2hlLlwiKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgY29uc3QgbWV0YWRhdGFFbnRpdHlFeHBpcmVkID0gaXNBdXRob3JpdHlNZXRhZGF0YUV4cGlyZWQobWV0YWRhdGFFbnRpdHkpO1xyXG4gICAgICAgIGlmICh0aGlzLmlzQXV0aG9yaXR5U2FtZVR5cGUobWV0YWRhdGFFbnRpdHkpICYmXHJcbiAgICAgICAgICAgIG1ldGFkYXRhRW50aXR5LmFsaWFzZXNGcm9tTmV0d29yayAmJlxyXG4gICAgICAgICAgICAhbWV0YWRhdGFFbnRpdHlFeHBpcmVkKSB7XHJcbiAgICAgICAgICAgIHRoaXMubG9nZ2VyLnZlcmJvc2UoXCJGb3VuZCBjbG91ZCBkaXNjb3ZlcnkgbWV0YWRhdGEgaW4gdGhlIGNhY2hlLlwiKTtcclxuICAgICAgICAgICAgLy8gTm8gbmVlZCB0byB1cGRhdGVcclxuICAgICAgICAgICAgcmV0dXJuIEF1dGhvcml0eU1ldGFkYXRhU291cmNlLkNBQ0hFO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIGlmIChtZXRhZGF0YUVudGl0eUV4cGlyZWQpIHtcclxuICAgICAgICAgICAgdGhpcy5sb2dnZXIudmVyYm9zZShcIlRoZSBtZXRhZGF0YSBlbnRpdHkgaXMgZXhwaXJlZC5cIik7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgfVxyXG4gICAgLyoqXHJcbiAgICAgKiBQYXJzZSBjbG91ZERpc2NvdmVyeU1ldGFkYXRhIGNvbmZpZyBvciBjaGVjayBrbm93bkF1dGhvcml0aWVzXHJcbiAgICAgKi9cclxuICAgIGdldENsb3VkRGlzY292ZXJ5TWV0YWRhdGFGcm9tQ29uZmlnKCkge1xyXG4gICAgICAgIC8vIENJQU0gZG9lcyBub3Qgc3VwcG9ydCBjbG91ZCBkaXNjb3ZlcnkgbWV0YWRhdGFcclxuICAgICAgICBpZiAodGhpcy5hdXRob3JpdHlUeXBlID09PSBBdXRob3JpdHlUeXBlLkNpYW0pIHtcclxuICAgICAgICAgICAgdGhpcy5sb2dnZXIudmVyYm9zZShcIkNJQU0gYXV0aG9yaXRpZXMgZG8gbm90IHN1cHBvcnQgY2xvdWQgZGlzY292ZXJ5IG1ldGFkYXRhLCBnZW5lcmF0ZSB0aGUgYWxpYXNlcyBmcm9tIGF1dGhvcml0eSBob3N0LlwiKTtcclxuICAgICAgICAgICAgcmV0dXJuIEF1dGhvcml0eS5jcmVhdGVDbG91ZERpc2NvdmVyeU1ldGFkYXRhRnJvbUhvc3QodGhpcy5ob3N0bmFtZUFuZFBvcnQpO1xyXG4gICAgICAgIH1cclxuICAgICAgICAvLyBDaGVjayBpZiBuZXR3b3JrIHJlc3BvbnNlIHdhcyBwcm92aWRlZCBpbiBjb25maWdcclxuICAgICAgICBpZiAodGhpcy5hdXRob3JpdHlPcHRpb25zLmNsb3VkRGlzY292ZXJ5TWV0YWRhdGEpIHtcclxuICAgICAgICAgICAgdGhpcy5sb2dnZXIudmVyYm9zZShcIlRoZSBjbG91ZCBkaXNjb3ZlcnkgbWV0YWRhdGEgaGFzIGJlZW4gcHJvdmlkZWQgYXMgYSBuZXR3b3JrIHJlc3BvbnNlLCBpbiB0aGUgY29uZmlnLlwiKTtcclxuICAgICAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgICAgIHRoaXMubG9nZ2VyLnZlcmJvc2UoXCJBdHRlbXB0aW5nIHRvIHBhcnNlIHRoZSBjbG91ZCBkaXNjb3ZlcnkgbWV0YWRhdGEuXCIpO1xyXG4gICAgICAgICAgICAgICAgY29uc3QgcGFyc2VkUmVzcG9uc2UgPSBKU09OLnBhcnNlKHRoaXMuYXV0aG9yaXR5T3B0aW9ucy5jbG91ZERpc2NvdmVyeU1ldGFkYXRhKTtcclxuICAgICAgICAgICAgICAgIGNvbnN0IG1ldGFkYXRhID0gZ2V0Q2xvdWREaXNjb3ZlcnlNZXRhZGF0YUZyb21OZXR3b3JrUmVzcG9uc2UocGFyc2VkUmVzcG9uc2UubWV0YWRhdGEsIHRoaXMuaG9zdG5hbWVBbmRQb3J0KTtcclxuICAgICAgICAgICAgICAgIHRoaXMubG9nZ2VyLnZlcmJvc2UoXCJQYXJzZWQgdGhlIGNsb3VkIGRpc2NvdmVyeSBtZXRhZGF0YS5cIik7XHJcbiAgICAgICAgICAgICAgICBpZiAobWV0YWRhdGEpIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmxvZ2dlci52ZXJib3NlKFwiVGhlcmUgaXMgcmV0dXJuYWJsZSBtZXRhZGF0YSBhdHRhY2hlZCB0byB0aGUgcGFyc2VkIGNsb3VkIGRpc2NvdmVyeSBtZXRhZGF0YS5cIik7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG1ldGFkYXRhO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5sb2dnZXIudmVyYm9zZShcIlRoZXJlIGlzIG5vIG1ldGFkYXRhIGF0dGFjaGVkIHRvIHRoZSBwYXJzZWQgY2xvdWQgZGlzY292ZXJ5IG1ldGFkYXRhLlwiKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBjYXRjaCAoZSkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5sb2dnZXIudmVyYm9zZShcIlVuYWJsZSB0byBwYXJzZSB0aGUgY2xvdWQgZGlzY292ZXJ5IG1ldGFkYXRhLiBUaHJvd2luZyBJbnZhbGlkIENsb3VkIERpc2NvdmVyeSBNZXRhZGF0YSBFcnJvci5cIik7XHJcbiAgICAgICAgICAgICAgICB0aHJvdyBjcmVhdGVDbGllbnRDb25maWd1cmF0aW9uRXJyb3IoaW52YWxpZENsb3VkRGlzY292ZXJ5TWV0YWRhdGEpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIC8vIElmIGNsb3VkRGlzY292ZXJ5TWV0YWRhdGEgaXMgZW1wdHkgb3IgZG9lcyBub3QgY29udGFpbiB0aGUgaG9zdCwgY2hlY2sga25vd25BdXRob3JpdGllc1xyXG4gICAgICAgIGlmICh0aGlzLmlzSW5Lbm93bkF1dGhvcml0aWVzKCkpIHtcclxuICAgICAgICAgICAgdGhpcy5sb2dnZXIudmVyYm9zZShcIlRoZSBob3N0IGlzIGluY2x1ZGVkIGluIGtub3duQXV0aG9yaXRpZXMuIENyZWF0aW5nIG5ldyBjbG91ZCBkaXNjb3ZlcnkgbWV0YWRhdGEgZnJvbSB0aGUgaG9zdC5cIik7XHJcbiAgICAgICAgICAgIHJldHVybiBBdXRob3JpdHkuY3JlYXRlQ2xvdWREaXNjb3ZlcnlNZXRhZGF0YUZyb21Ib3N0KHRoaXMuaG9zdG5hbWVBbmRQb3J0KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICB9XHJcbiAgICAvKipcclxuICAgICAqIENhbGxlZCB0byBnZXQgbWV0YWRhdGEgZnJvbSBuZXR3b3JrIGlmIENsb3VkRGlzY292ZXJ5TWV0YWRhdGEgd2FzIG5vdCBwb3B1bGF0ZWQgYnkgY29uZmlnXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIGhhc0hhcmRjb2RlZE1ldGFkYXRhIGJvb2xlYW5cclxuICAgICAqL1xyXG4gICAgYXN5bmMgZ2V0Q2xvdWREaXNjb3ZlcnlNZXRhZGF0YUZyb21OZXR3b3JrKCkge1xyXG4gICAgICAgIHRoaXMucGVyZm9ybWFuY2VDbGllbnQ/LmFkZFF1ZXVlTWVhc3VyZW1lbnQoUGVyZm9ybWFuY2VFdmVudHMuQXV0aG9yaXR5R2V0Q2xvdWREaXNjb3ZlcnlNZXRhZGF0YUZyb21OZXR3b3JrLCB0aGlzLmNvcnJlbGF0aW9uSWQpO1xyXG4gICAgICAgIGNvbnN0IGluc3RhbmNlRGlzY292ZXJ5RW5kcG9pbnQgPSBgJHtDb25zdGFudHMuQUFEX0lOU1RBTkNFX0RJU0NPVkVSWV9FTkRQVH0ke3RoaXMuY2Fub25pY2FsQXV0aG9yaXR5fW9hdXRoMi92Mi4wL2F1dGhvcml6ZWA7XHJcbiAgICAgICAgY29uc3Qgb3B0aW9ucyA9IHt9O1xyXG4gICAgICAgIC8qXHJcbiAgICAgICAgICogVE9ETzogQWRkIGEgdGltZW91dCBpZiB0aGUgYXV0aG9yaXR5IGV4aXN0cyBpbiBvdXIgbGlicmFyeSdzXHJcbiAgICAgICAgICogaGFyZGNvZGVkIGxpc3Qgb2YgbWV0YWRhdGFcclxuICAgICAgICAgKi9cclxuICAgICAgICBsZXQgbWF0Y2ggPSBudWxsO1xyXG4gICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgdGhpcy5uZXR3b3JrSW50ZXJmYWNlLnNlbmRHZXRSZXF1ZXN0QXN5bmMoaW5zdGFuY2VEaXNjb3ZlcnlFbmRwb2ludCwgb3B0aW9ucyk7XHJcbiAgICAgICAgICAgIGxldCB0eXBlZFJlc3BvbnNlQm9keTtcclxuICAgICAgICAgICAgbGV0IG1ldGFkYXRhO1xyXG4gICAgICAgICAgICBpZiAoaXNDbG91ZEluc3RhbmNlRGlzY292ZXJ5UmVzcG9uc2UocmVzcG9uc2UuYm9keSkpIHtcclxuICAgICAgICAgICAgICAgIHR5cGVkUmVzcG9uc2VCb2R5ID1cclxuICAgICAgICAgICAgICAgICAgICByZXNwb25zZS5ib2R5O1xyXG4gICAgICAgICAgICAgICAgbWV0YWRhdGEgPSB0eXBlZFJlc3BvbnNlQm9keS5tZXRhZGF0YTtcclxuICAgICAgICAgICAgICAgIHRoaXMubG9nZ2VyLnZlcmJvc2VQaWkoYHRlbmFudF9kaXNjb3ZlcnlfZW5kcG9pbnQgaXM6ICR7dHlwZWRSZXNwb25zZUJvZHkudGVuYW50X2Rpc2NvdmVyeV9lbmRwb2ludH1gKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIGlmIChpc0Nsb3VkSW5zdGFuY2VEaXNjb3ZlcnlFcnJvclJlc3BvbnNlKHJlc3BvbnNlLmJvZHkpKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmxvZ2dlci53YXJuaW5nKGBBIENsb3VkSW5zdGFuY2VEaXNjb3ZlcnlFcnJvclJlc3BvbnNlIHdhcyByZXR1cm5lZC4gVGhlIGNsb3VkIGluc3RhbmNlIGRpc2NvdmVyeSBuZXR3b3JrIHJlcXVlc3QncyBzdGF0dXMgY29kZSBpczogJHtyZXNwb25zZS5zdGF0dXN9YCk7XHJcbiAgICAgICAgICAgICAgICB0eXBlZFJlc3BvbnNlQm9keSA9XHJcbiAgICAgICAgICAgICAgICAgICAgcmVzcG9uc2UuYm9keTtcclxuICAgICAgICAgICAgICAgIGlmICh0eXBlZFJlc3BvbnNlQm9keS5lcnJvciA9PT0gQ29uc3RhbnRzLklOVkFMSURfSU5TVEFOQ0UpIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmxvZ2dlci5lcnJvcihcIlRoZSBDbG91ZEluc3RhbmNlRGlzY292ZXJ5RXJyb3JSZXNwb25zZSBlcnJvciBpcyBpbnZhbGlkX2luc3RhbmNlLlwiKTtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIHRoaXMubG9nZ2VyLndhcm5pbmcoYFRoZSBDbG91ZEluc3RhbmNlRGlzY292ZXJ5RXJyb3JSZXNwb25zZSBlcnJvciBpcyAke3R5cGVkUmVzcG9uc2VCb2R5LmVycm9yfWApO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5sb2dnZXIud2FybmluZyhgVGhlIENsb3VkSW5zdGFuY2VEaXNjb3ZlcnlFcnJvclJlc3BvbnNlIGVycm9yIGRlc2NyaXB0aW9uIGlzICR7dHlwZWRSZXNwb25zZUJvZHkuZXJyb3JfZGVzY3JpcHRpb259YCk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmxvZ2dlci53YXJuaW5nKFwiU2V0dGluZyB0aGUgdmFsdWUgb2YgdGhlIENsb3VkSW5zdGFuY2VEaXNjb3ZlcnlNZXRhZGF0YSAocmV0dXJuZWQgZnJvbSB0aGUgbmV0d29yaykgdG8gW11cIik7XHJcbiAgICAgICAgICAgICAgICBtZXRhZGF0YSA9IFtdO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5sb2dnZXIuZXJyb3IoXCJBQUQgZGlkIG5vdCByZXR1cm4gYSBDbG91ZEluc3RhbmNlRGlzY292ZXJ5UmVzcG9uc2Ugb3IgQ2xvdWRJbnN0YW5jZURpc2NvdmVyeUVycm9yUmVzcG9uc2VcIik7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB0aGlzLmxvZ2dlci52ZXJib3NlKFwiQXR0ZW1wdGluZyB0byBmaW5kIGEgbWF0Y2ggYmV0d2VlbiB0aGUgZGV2ZWxvcGVyJ3MgYXV0aG9yaXR5IGFuZCB0aGUgQ2xvdWRJbnN0YW5jZURpc2NvdmVyeU1ldGFkYXRhIHJldHVybmVkIGZyb20gdGhlIG5ldHdvcmsgcmVxdWVzdC5cIik7XHJcbiAgICAgICAgICAgIG1hdGNoID0gZ2V0Q2xvdWREaXNjb3ZlcnlNZXRhZGF0YUZyb21OZXR3b3JrUmVzcG9uc2UobWV0YWRhdGEsIHRoaXMuaG9zdG5hbWVBbmRQb3J0KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgY2F0Y2ggKGVycm9yKSB7XHJcbiAgICAgICAgICAgIGlmIChlcnJvciBpbnN0YW5jZW9mIEF1dGhFcnJvcikge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5sb2dnZXIuZXJyb3IoYFRoZXJlIHdhcyBhIG5ldHdvcmsgZXJyb3Igd2hpbGUgYXR0ZW1wdGluZyB0byBnZXQgdGhlIGNsb3VkIGRpc2NvdmVyeSBpbnN0YW5jZSBtZXRhZGF0YS5cXG5FcnJvcjogJHtlcnJvci5lcnJvckNvZGV9XFxuRXJyb3IgRGVzY3JpcHRpb246ICR7ZXJyb3IuZXJyb3JNZXNzYWdlfWApO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgdHlwZWRFcnJvciA9IGVycm9yO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5sb2dnZXIuZXJyb3IoYEEgbm9uLU1TQUxKUyBlcnJvciB3YXMgdGhyb3duIHdoaWxlIGF0dGVtcHRpbmcgdG8gZ2V0IHRoZSBjbG91ZCBpbnN0YW5jZSBkaXNjb3ZlcnkgbWV0YWRhdGEuXFxuRXJyb3I6ICR7dHlwZWRFcnJvci5uYW1lfVxcbkVycm9yIERlc2NyaXB0aW9uOiAke3R5cGVkRXJyb3IubWVzc2FnZX1gKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgICAgICB9XHJcbiAgICAgICAgLy8gQ3VzdG9tIERvbWFpbiBzY2VuYXJpbywgaG9zdCBpcyB0cnVzdGVkIGJlY2F1c2UgSW5zdGFuY2UgRGlzY292ZXJ5IGNhbGwgc3VjY2VlZGVkXHJcbiAgICAgICAgaWYgKCFtYXRjaCkge1xyXG4gICAgICAgICAgICB0aGlzLmxvZ2dlci53YXJuaW5nKFwiVGhlIGRldmVsb3BlcidzIGF1dGhvcml0eSB3YXMgbm90IGZvdW5kIHdpdGhpbiB0aGUgQ2xvdWRJbnN0YW5jZURpc2NvdmVyeU1ldGFkYXRhIHJldHVybmVkIGZyb20gdGhlIG5ldHdvcmsgcmVxdWVzdC5cIik7XHJcbiAgICAgICAgICAgIHRoaXMubG9nZ2VyLnZlcmJvc2UoXCJDcmVhdGluZyBjdXN0b20gQXV0aG9yaXR5IGZvciBjdXN0b20gZG9tYWluIHNjZW5hcmlvLlwiKTtcclxuICAgICAgICAgICAgbWF0Y2ggPSBBdXRob3JpdHkuY3JlYXRlQ2xvdWREaXNjb3ZlcnlNZXRhZGF0YUZyb21Ib3N0KHRoaXMuaG9zdG5hbWVBbmRQb3J0KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIG1hdGNoO1xyXG4gICAgfVxyXG4gICAgLyoqXHJcbiAgICAgKiBIZWxwZXIgZnVuY3Rpb24gdG8gZGV0ZXJtaW5lIGlmIHRoaXMgaG9zdCBpcyBpbmNsdWRlZCBpbiB0aGUga25vd25BdXRob3JpdGllcyBjb25maWcgb3B0aW9uXHJcbiAgICAgKi9cclxuICAgIGlzSW5Lbm93bkF1dGhvcml0aWVzKCkge1xyXG4gICAgICAgIGNvbnN0IG1hdGNoZXMgPSB0aGlzLmF1dGhvcml0eU9wdGlvbnMua25vd25BdXRob3JpdGllcy5maWx0ZXIoKGF1dGhvcml0eSkgPT4ge1xyXG4gICAgICAgICAgICByZXR1cm4gKGF1dGhvcml0eSAmJlxyXG4gICAgICAgICAgICAgICAgVXJsU3RyaW5nLmdldERvbWFpbkZyb21VcmwoYXV0aG9yaXR5KS50b0xvd2VyQ2FzZSgpID09PVxyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuaG9zdG5hbWVBbmRQb3J0KTtcclxuICAgICAgICB9KTtcclxuICAgICAgICByZXR1cm4gbWF0Y2hlcy5sZW5ndGggPiAwO1xyXG4gICAgfVxyXG4gICAgLyoqXHJcbiAgICAgKiBoZWxwZXIgZnVuY3Rpb24gdG8gcG9wdWxhdGUgdGhlIGF1dGhvcml0eSBiYXNlZCBvbiBhenVyZUNsb3VkT3B0aW9uc1xyXG4gICAgICogQHBhcmFtIGF1dGhvcml0eVN0cmluZ1xyXG4gICAgICogQHBhcmFtIGF6dXJlQ2xvdWRPcHRpb25zXHJcbiAgICAgKi9cclxuICAgIHN0YXRpYyBnZW5lcmF0ZUF1dGhvcml0eShhdXRob3JpdHlTdHJpbmcsIGF6dXJlQ2xvdWRPcHRpb25zKSB7XHJcbiAgICAgICAgbGV0IGF1dGhvcml0eUF6dXJlQ2xvdWRJbnN0YW5jZTtcclxuICAgICAgICBpZiAoYXp1cmVDbG91ZE9wdGlvbnMgJiZcclxuICAgICAgICAgICAgYXp1cmVDbG91ZE9wdGlvbnMuYXp1cmVDbG91ZEluc3RhbmNlICE9PSBBenVyZUNsb3VkSW5zdGFuY2UuTm9uZSkge1xyXG4gICAgICAgICAgICBjb25zdCB0ZW5hbnQgPSBhenVyZUNsb3VkT3B0aW9ucy50ZW5hbnRcclxuICAgICAgICAgICAgICAgID8gYXp1cmVDbG91ZE9wdGlvbnMudGVuYW50XHJcbiAgICAgICAgICAgICAgICA6IENvbnN0YW50cy5ERUZBVUxUX0NPTU1PTl9URU5BTlQ7XHJcbiAgICAgICAgICAgIGF1dGhvcml0eUF6dXJlQ2xvdWRJbnN0YW5jZSA9IGAke2F6dXJlQ2xvdWRPcHRpb25zLmF6dXJlQ2xvdWRJbnN0YW5jZX0vJHt0ZW5hbnR9L2A7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBhdXRob3JpdHlBenVyZUNsb3VkSW5zdGFuY2VcclxuICAgICAgICAgICAgPyBhdXRob3JpdHlBenVyZUNsb3VkSW5zdGFuY2VcclxuICAgICAgICAgICAgOiBhdXRob3JpdHlTdHJpbmc7XHJcbiAgICB9XHJcbiAgICAvKipcclxuICAgICAqIENyZWF0ZXMgY2xvdWQgZGlzY292ZXJ5IG1ldGFkYXRhIG9iamVjdCBmcm9tIGEgZ2l2ZW4gaG9zdFxyXG4gICAgICogQHBhcmFtIGhvc3RcclxuICAgICAqL1xyXG4gICAgc3RhdGljIGNyZWF0ZUNsb3VkRGlzY292ZXJ5TWV0YWRhdGFGcm9tSG9zdChob3N0KSB7XHJcbiAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgcHJlZmVycmVkX25ldHdvcms6IGhvc3QsXHJcbiAgICAgICAgICAgIHByZWZlcnJlZF9jYWNoZTogaG9zdCxcclxuICAgICAgICAgICAgYWxpYXNlczogW2hvc3RdLFxyXG4gICAgICAgIH07XHJcbiAgICB9XHJcbiAgICAvKipcclxuICAgICAqIGhlbHBlciBmdW5jdGlvbiB0byBnZW5lcmF0ZSBlbnZpcm9ubWVudCBmcm9tIGF1dGhvcml0eSBvYmplY3RcclxuICAgICAqL1xyXG4gICAgZ2V0UHJlZmVycmVkQ2FjaGUoKSB7XHJcbiAgICAgICAgaWYgKHRoaXMubWFuYWdlZElkZW50aXR5KSB7XHJcbiAgICAgICAgICAgIHJldHVybiBDb25zdGFudHMuREVGQVVMVF9BVVRIT1JJVFlfSE9TVDtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSBpZiAodGhpcy5kaXNjb3ZlcnlDb21wbGV0ZSgpKSB7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLm1ldGFkYXRhLnByZWZlcnJlZF9jYWNoZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIHRocm93IGNyZWF0ZUNsaWVudEF1dGhFcnJvcihlbmRwb2ludFJlc29sdXRpb25FcnJvcik7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgLyoqXHJcbiAgICAgKiBSZXR1cm5zIHdoZXRoZXIgb3Igbm90IHRoZSBwcm92aWRlZCBob3N0IGlzIGFuIGFsaWFzIG9mIHRoaXMgYXV0aG9yaXR5IGluc3RhbmNlXHJcbiAgICAgKiBAcGFyYW0gaG9zdFxyXG4gICAgICovXHJcbiAgICBpc0FsaWFzKGhvc3QpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5tZXRhZGF0YS5hbGlhc2VzLmluZGV4T2YoaG9zdCkgPiAtMTtcclxuICAgIH1cclxuICAgIC8qKlxyXG4gICAgICogUmV0dXJucyB3aGV0aGVyIG9yIG5vdCB0aGUgcHJvdmlkZWQgaG9zdCBpcyBhbiBhbGlhcyBvZiBhIGtub3duIE1pY3Jvc29mdCBhdXRob3JpdHkgZm9yIHB1cnBvc2VzIG9mIGVuZHBvaW50IGRpc2NvdmVyeVxyXG4gICAgICogQHBhcmFtIGhvc3RcclxuICAgICAqL1xyXG4gICAgaXNBbGlhc09mS25vd25NaWNyb3NvZnRBdXRob3JpdHkoaG9zdCkge1xyXG4gICAgICAgIHJldHVybiBJbnN0YW5jZURpc2NvdmVyeU1ldGFkYXRhQWxpYXNlcy5oYXMoaG9zdCk7XHJcbiAgICB9XHJcbiAgICAvKipcclxuICAgICAqIENoZWNrcyB3aGV0aGVyIHRoZSBwcm92aWRlZCBob3N0IGlzIHRoYXQgb2YgYSBwdWJsaWMgY2xvdWQgYXV0aG9yaXR5XHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIGF1dGhvcml0eSBzdHJpbmdcclxuICAgICAqIEByZXR1cm5zIGJvb2xcclxuICAgICAqL1xyXG4gICAgc3RhdGljIGlzUHVibGljQ2xvdWRBdXRob3JpdHkoaG9zdCkge1xyXG4gICAgICAgIHJldHVybiBDb25zdGFudHMuS05PV05fUFVCTElDX0NMT1VEUy5pbmRleE9mKGhvc3QpID49IDA7XHJcbiAgICB9XHJcbiAgICAvKipcclxuICAgICAqIFJlYnVpbGQgdGhlIGF1dGhvcml0eSBzdHJpbmcgd2l0aCB0aGUgcmVnaW9uXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIGhvc3Qgc3RyaW5nXHJcbiAgICAgKiBAcGFyYW0gcmVnaW9uIHN0cmluZ1xyXG4gICAgICovXHJcbiAgICBzdGF0aWMgYnVpbGRSZWdpb25hbEF1dGhvcml0eVN0cmluZyhob3N0LCByZWdpb24sIHF1ZXJ5U3RyaW5nKSB7XHJcbiAgICAgICAgLy8gQ3JlYXRlIGFuZCB2YWxpZGF0ZSBhIFVybCBzdHJpbmcgb2JqZWN0IHdpdGggdGhlIGluaXRpYWwgYXV0aG9yaXR5IHN0cmluZ1xyXG4gICAgICAgIGNvbnN0IGF1dGhvcml0eVVybEluc3RhbmNlID0gbmV3IFVybFN0cmluZyhob3N0KTtcclxuICAgICAgICBhdXRob3JpdHlVcmxJbnN0YW5jZS52YWxpZGF0ZUFzVXJpKCk7XHJcbiAgICAgICAgY29uc3QgYXV0aG9yaXR5VXJsUGFydHMgPSBhdXRob3JpdHlVcmxJbnN0YW5jZS5nZXRVcmxDb21wb25lbnRzKCk7XHJcbiAgICAgICAgbGV0IGhvc3ROYW1lQW5kUG9ydCA9IGAke3JlZ2lvbn0uJHthdXRob3JpdHlVcmxQYXJ0cy5Ib3N0TmFtZUFuZFBvcnR9YDtcclxuICAgICAgICBpZiAodGhpcy5pc1B1YmxpY0Nsb3VkQXV0aG9yaXR5KGF1dGhvcml0eVVybFBhcnRzLkhvc3ROYW1lQW5kUG9ydCkpIHtcclxuICAgICAgICAgICAgaG9zdE5hbWVBbmRQb3J0ID0gYCR7cmVnaW9ufS4ke0NvbnN0YW50cy5SRUdJT05BTF9BVVRIX1BVQkxJQ19DTE9VRF9TVUZGSVh9YDtcclxuICAgICAgICB9XHJcbiAgICAgICAgLy8gSW5jbHVkZSB0aGUgcXVlcnkgc3RyaW5nIHBvcnRpb24gb2YgdGhlIHVybFxyXG4gICAgICAgIGNvbnN0IHVybCA9IFVybFN0cmluZy5jb25zdHJ1Y3RBdXRob3JpdHlVcmlGcm9tT2JqZWN0KHtcclxuICAgICAgICAgICAgLi4uYXV0aG9yaXR5VXJsSW5zdGFuY2UuZ2V0VXJsQ29tcG9uZW50cygpLFxyXG4gICAgICAgICAgICBIb3N0TmFtZUFuZFBvcnQ6IGhvc3ROYW1lQW5kUG9ydCxcclxuICAgICAgICB9KS51cmxTdHJpbmc7XHJcbiAgICAgICAgLy8gQWRkIHRoZSBxdWVyeSBzdHJpbmcgaWYgYSBxdWVyeSBzdHJpbmcgd2FzIHByb3ZpZGVkXHJcbiAgICAgICAgaWYgKHF1ZXJ5U3RyaW5nKVxyXG4gICAgICAgICAgICByZXR1cm4gYCR7dXJsfT8ke3F1ZXJ5U3RyaW5nfWA7XHJcbiAgICAgICAgcmV0dXJuIHVybDtcclxuICAgIH1cclxuICAgIC8qKlxyXG4gICAgICogUmVwbGFjZSB0aGUgZW5kcG9pbnRzIGluIHRoZSBtZXRhZGF0YSBvYmplY3Qgd2l0aCB0aGVpciByZWdpb25hbCBlcXVpdmFsZW50cy5cclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0gbWV0YWRhdGEgT3BlbklkQ29uZmlnUmVzcG9uc2VcclxuICAgICAqIEBwYXJhbSBhenVyZVJlZ2lvbiBzdHJpbmdcclxuICAgICAqL1xyXG4gICAgc3RhdGljIHJlcGxhY2VXaXRoUmVnaW9uYWxJbmZvcm1hdGlvbihtZXRhZGF0YSwgYXp1cmVSZWdpb24pIHtcclxuICAgICAgICBjb25zdCByZWdpb25hbE1ldGFkYXRhID0geyAuLi5tZXRhZGF0YSB9O1xyXG4gICAgICAgIHJlZ2lvbmFsTWV0YWRhdGEuYXV0aG9yaXphdGlvbl9lbmRwb2ludCA9XHJcbiAgICAgICAgICAgIEF1dGhvcml0eS5idWlsZFJlZ2lvbmFsQXV0aG9yaXR5U3RyaW5nKHJlZ2lvbmFsTWV0YWRhdGEuYXV0aG9yaXphdGlvbl9lbmRwb2ludCwgYXp1cmVSZWdpb24pO1xyXG4gICAgICAgIHJlZ2lvbmFsTWV0YWRhdGEudG9rZW5fZW5kcG9pbnQgPVxyXG4gICAgICAgICAgICBBdXRob3JpdHkuYnVpbGRSZWdpb25hbEF1dGhvcml0eVN0cmluZyhyZWdpb25hbE1ldGFkYXRhLnRva2VuX2VuZHBvaW50LCBhenVyZVJlZ2lvbik7XHJcbiAgICAgICAgaWYgKHJlZ2lvbmFsTWV0YWRhdGEuZW5kX3Nlc3Npb25fZW5kcG9pbnQpIHtcclxuICAgICAgICAgICAgcmVnaW9uYWxNZXRhZGF0YS5lbmRfc2Vzc2lvbl9lbmRwb2ludCA9XHJcbiAgICAgICAgICAgICAgICBBdXRob3JpdHkuYnVpbGRSZWdpb25hbEF1dGhvcml0eVN0cmluZyhyZWdpb25hbE1ldGFkYXRhLmVuZF9zZXNzaW9uX2VuZHBvaW50LCBhenVyZVJlZ2lvbik7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiByZWdpb25hbE1ldGFkYXRhO1xyXG4gICAgfVxyXG4gICAgLyoqXHJcbiAgICAgKiBUcmFuc2Zvcm0gQ0lBTV9BVVRIT1JJWSBhcyBwZXIgdGhlIGJlbG93IHJ1bGVzOlxyXG4gICAgICogSWYgbm8gcGF0aCBzZWdtZW50cyBmb3VuZCBhbmQgaXQgaXMgYSBDSUFNIGF1dGhvcml0eSAoaG9zdG5hbWUgZW5kcyB3aXRoIC5jaWFtbG9naW4uY29tKSwgdGhlbiB0cmFuc2Zvcm0gaXRcclxuICAgICAqXHJcbiAgICAgKiBOT1RFOiBUaGUgdHJhbnNmb3JtYXRpb24gcGF0aCBzaG91bGQgZ28gYXdheSBvbmNlIFNUUyBzdXBwb3J0cyBDSUFNIHdpdGggdGhlIGZvcm1hdDogYHRlbmFudElkb3JEb21haW4uY2lhbWxvZ2luLmNvbWBcclxuICAgICAqIGBjaWFtbG9naW4uY29tYCBjYW4gYWxzbyBjaGFuZ2UgaW4gdGhlIGZ1dHVyZSBhbmQgd2Ugc2hvdWxkIGFjY29tbW9kYXRlIHRoZSBzYW1lXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIGF1dGhvcml0eVxyXG4gICAgICovXHJcbiAgICBzdGF0aWMgdHJhbnNmb3JtQ0lBTUF1dGhvcml0eShhdXRob3JpdHkpIHtcclxuICAgICAgICBsZXQgY2lhbUF1dGhvcml0eSA9IGF1dGhvcml0eTtcclxuICAgICAgICBjb25zdCBhdXRob3JpdHlVcmwgPSBuZXcgVXJsU3RyaW5nKGF1dGhvcml0eSk7XHJcbiAgICAgICAgY29uc3QgYXV0aG9yaXR5VXJsQ29tcG9uZW50cyA9IGF1dGhvcml0eVVybC5nZXRVcmxDb21wb25lbnRzKCk7XHJcbiAgICAgICAgLy8gY2hlY2sgaWYgdHJhbnNmb3JtYXRpb24gaXMgbmVlZGVkXHJcbiAgICAgICAgaWYgKGF1dGhvcml0eVVybENvbXBvbmVudHMuUGF0aFNlZ21lbnRzLmxlbmd0aCA9PT0gMCAmJlxyXG4gICAgICAgICAgICBhdXRob3JpdHlVcmxDb21wb25lbnRzLkhvc3ROYW1lQW5kUG9ydC5lbmRzV2l0aChDb25zdGFudHMuQ0lBTV9BVVRIX1VSTCkpIHtcclxuICAgICAgICAgICAgY29uc3QgdGVuYW50SWRPckRvbWFpbiA9IGF1dGhvcml0eVVybENvbXBvbmVudHMuSG9zdE5hbWVBbmRQb3J0LnNwbGl0KFwiLlwiKVswXTtcclxuICAgICAgICAgICAgY2lhbUF1dGhvcml0eSA9IGAke2NpYW1BdXRob3JpdHl9JHt0ZW5hbnRJZE9yRG9tYWlufSR7Q29uc3RhbnRzLkFBRF9URU5BTlRfRE9NQUlOX1NVRkZJWH1gO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gY2lhbUF1dGhvcml0eTtcclxuICAgIH1cclxufVxyXG4vLyBSZXNlcnZlZCB0ZW5hbnQgZG9tYWluIG5hbWVzIHRoYXQgd2lsbCBub3QgYmUgcmVwbGFjZWQgd2l0aCB0ZW5hbnQgaWRcclxuQXV0aG9yaXR5LnJlc2VydmVkVGVuYW50RG9tYWlucyA9IG5ldyBTZXQoW1xyXG4gICAgXCJ7dGVuYW50fVwiLFxyXG4gICAgXCJ7dGVuYW50aWR9XCIsXHJcbiAgICBBQURBdXRob3JpdHlDb25zdGFudHMuQ09NTU9OLFxyXG4gICAgQUFEQXV0aG9yaXR5Q29uc3RhbnRzLkNPTlNVTUVSUyxcclxuICAgIEFBREF1dGhvcml0eUNvbnN0YW50cy5PUkdBTklaQVRJT05TLFxyXG5dKTtcclxuLyoqXHJcbiAqIEV4dHJhY3QgdGVuYW50SWQgZnJvbSBhdXRob3JpdHlcclxuICovXHJcbmZ1bmN0aW9uIGdldFRlbmFudEZyb21BdXRob3JpdHlTdHJpbmcoYXV0aG9yaXR5KSB7XHJcbiAgICBjb25zdCBhdXRob3JpdHlVcmwgPSBuZXcgVXJsU3RyaW5nKGF1dGhvcml0eSk7XHJcbiAgICBjb25zdCBhdXRob3JpdHlVcmxDb21wb25lbnRzID0gYXV0aG9yaXR5VXJsLmdldFVybENvbXBvbmVudHMoKTtcclxuICAgIC8qKlxyXG4gICAgICogRm9yIGNyZWRlbnRpYWwgbWF0Y2hpbmcgcHVycG9zZXMsIHRlbmFudElkIGlzIHRoZSBsYXN0IHBhdGggc2VnbWVudCBvZiB0aGUgYXV0aG9yaXR5IFVSTDpcclxuICAgICAqICBBQUQgQXV0aG9yaXR5IC0gZG9tYWluL3RlbmFudElkIC0+IENyZWRlbnRpYWxzIGFyZSBjYWNoZWQgd2l0aCByZWFsbSA9IHRlbmFudElkXHJcbiAgICAgKiAgQjJDIEF1dGhvcml0eSAtIGRvbWFpbi97dGVuYW50SWR9Py8uLi4vcG9saWN5IC0+IENyZWRlbnRpYWxzIGFyZSBjYWNoZWQgd2l0aCByZWFsbSA9IHBvbGljeVxyXG4gICAgICogIHRlbmFudElkIGlzIGRvd25jYXNlZCBiZWNhdXNlIEIyQyBwb2xpY2llcyBjYW4gaGF2ZSBtaXhlZCBjYXNlIGJ1dCB0ZnAgY2xhaW0gaXMgZG93bmNhc2VkXHJcbiAgICAgKlxyXG4gICAgICogTm90ZSB0aGF0IHdlIG1heSBub3QgaGF2ZSBhbnkgcGF0aCBzZWdtZW50cyBpbiBjZXJ0YWluIE9JREMgc2NlbmFyaW9zLlxyXG4gICAgICovXHJcbiAgICBjb25zdCB0ZW5hbnRJZCA9IGF1dGhvcml0eVVybENvbXBvbmVudHMuUGF0aFNlZ21lbnRzLnNsaWNlKC0xKVswXT8udG9Mb3dlckNhc2UoKTtcclxuICAgIHN3aXRjaCAodGVuYW50SWQpIHtcclxuICAgICAgICBjYXNlIEFBREF1dGhvcml0eUNvbnN0YW50cy5DT01NT046XHJcbiAgICAgICAgY2FzZSBBQURBdXRob3JpdHlDb25zdGFudHMuT1JHQU5JWkFUSU9OUzpcclxuICAgICAgICBjYXNlIEFBREF1dGhvcml0eUNvbnN0YW50cy5DT05TVU1FUlM6XHJcbiAgICAgICAgICAgIHJldHVybiB1bmRlZmluZWQ7XHJcbiAgICAgICAgZGVmYXVsdDpcclxuICAgICAgICAgICAgcmV0dXJuIHRlbmFudElkO1xyXG4gICAgfVxyXG59XHJcbmZ1bmN0aW9uIGZvcm1hdEF1dGhvcml0eVVyaShhdXRob3JpdHlVcmkpIHtcclxuICAgIHJldHVybiBhdXRob3JpdHlVcmkuZW5kc1dpdGgoQ29uc3RhbnRzLkZPUldBUkRfU0xBU0gpXHJcbiAgICAgICAgPyBhdXRob3JpdHlVcmlcclxuICAgICAgICA6IGAke2F1dGhvcml0eVVyaX0ke0NvbnN0YW50cy5GT1JXQVJEX1NMQVNIfWA7XHJcbn1cclxuZnVuY3Rpb24gYnVpbGRTdGF0aWNBdXRob3JpdHlPcHRpb25zKGF1dGhPcHRpb25zKSB7XHJcbiAgICBjb25zdCByYXdDbG91ZERpc2NvdmVyeU1ldGFkYXRhID0gYXV0aE9wdGlvbnMuY2xvdWREaXNjb3ZlcnlNZXRhZGF0YTtcclxuICAgIGxldCBjbG91ZERpc2NvdmVyeU1ldGFkYXRhID0gdW5kZWZpbmVkO1xyXG4gICAgaWYgKHJhd0Nsb3VkRGlzY292ZXJ5TWV0YWRhdGEpIHtcclxuICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICBjbG91ZERpc2NvdmVyeU1ldGFkYXRhID0gSlNPTi5wYXJzZShyYXdDbG91ZERpc2NvdmVyeU1ldGFkYXRhKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgY2F0Y2ggKGUpIHtcclxuICAgICAgICAgICAgdGhyb3cgY3JlYXRlQ2xpZW50Q29uZmlndXJhdGlvbkVycm9yKGludmFsaWRDbG91ZERpc2NvdmVyeU1ldGFkYXRhKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4ge1xyXG4gICAgICAgIGNhbm9uaWNhbEF1dGhvcml0eTogYXV0aE9wdGlvbnMuYXV0aG9yaXR5XHJcbiAgICAgICAgICAgID8gZm9ybWF0QXV0aG9yaXR5VXJpKGF1dGhPcHRpb25zLmF1dGhvcml0eSlcclxuICAgICAgICAgICAgOiB1bmRlZmluZWQsXHJcbiAgICAgICAga25vd25BdXRob3JpdGllczogYXV0aE9wdGlvbnMua25vd25BdXRob3JpdGllcyxcclxuICAgICAgICBjbG91ZERpc2NvdmVyeU1ldGFkYXRhOiBjbG91ZERpc2NvdmVyeU1ldGFkYXRhLFxyXG4gICAgfTtcclxufVxuXG5leHBvcnQgeyBBdXRob3JpdHksIGJ1aWxkU3RhdGljQXV0aG9yaXR5T3B0aW9ucywgZm9ybWF0QXV0aG9yaXR5VXJpLCBnZXRUZW5hbnRGcm9tQXV0aG9yaXR5U3RyaW5nIH07XG4vLyMgc291cmNlTWFwcGluZ1VSTD1BdXRob3JpdHkubWpzLm1hcFxuIiwiLyohIEBhenVyZS9tc2FsLWNvbW1vbiB2MTQuMTYuMCAyMDI0LTExLTA1ICovXG4ndXNlIHN0cmljdCc7XG4vKlxyXG4gKiBDb3B5cmlnaHQgKGMpIE1pY3Jvc29mdCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cclxuICogTGljZW5zZWQgdW5kZXIgdGhlIE1JVCBMaWNlbnNlLlxyXG4gKi9cclxuLy8gQ29kZXMgZGVmaW5lZCBieSBNU0FMXHJcbmNvbnN0IG5vVG9rZW5zRm91bmQgPSBcIm5vX3Rva2Vuc19mb3VuZFwiO1xyXG5jb25zdCBuYXRpdmVBY2NvdW50VW5hdmFpbGFibGUgPSBcIm5hdGl2ZV9hY2NvdW50X3VuYXZhaWxhYmxlXCI7XHJcbmNvbnN0IHJlZnJlc2hUb2tlbkV4cGlyZWQgPSBcInJlZnJlc2hfdG9rZW5fZXhwaXJlZFwiO1xyXG4vLyBDb2RlcyBwb3RlbnRpYWxseSByZXR1cm5lZCBieSBzZXJ2ZXJcclxuY29uc3QgaW50ZXJhY3Rpb25SZXF1aXJlZCA9IFwiaW50ZXJhY3Rpb25fcmVxdWlyZWRcIjtcclxuY29uc3QgY29uc2VudFJlcXVpcmVkID0gXCJjb25zZW50X3JlcXVpcmVkXCI7XHJcbmNvbnN0IGxvZ2luUmVxdWlyZWQgPSBcImxvZ2luX3JlcXVpcmVkXCI7XHJcbmNvbnN0IGJhZFRva2VuID0gXCJiYWRfdG9rZW5cIjtcblxuZXhwb3J0IHsgYmFkVG9rZW4sIGNvbnNlbnRSZXF1aXJlZCwgaW50ZXJhY3Rpb25SZXF1aXJlZCwgbG9naW5SZXF1aXJlZCwgbmF0aXZlQWNjb3VudFVuYXZhaWxhYmxlLCBub1Rva2Vuc0ZvdW5kLCByZWZyZXNoVG9rZW5FeHBpcmVkIH07XG4vLyMgc291cmNlTWFwcGluZ1VSTD1JbnRlcmFjdGlvblJlcXVpcmVkQXV0aEVycm9yQ29kZXMubWpzLm1hcFxuIiwiLyohIEBhenVyZS9tc2FsLWNvbW1vbiB2MTQuMTYuMCAyMDI0LTExLTA1ICovXG4ndXNlIHN0cmljdCc7XG5pbXBvcnQgeyBDb25zdGFudHMgfSBmcm9tICcuLi91dGlscy9Db25zdGFudHMubWpzJztcbmltcG9ydCB7IEF1dGhFcnJvciB9IGZyb20gJy4vQXV0aEVycm9yLm1qcyc7XG5pbXBvcnQgeyBub1Rva2Vuc0ZvdW5kLCBuYXRpdmVBY2NvdW50VW5hdmFpbGFibGUsIGJhZFRva2VuLCByZWZyZXNoVG9rZW5FeHBpcmVkLCBpbnRlcmFjdGlvblJlcXVpcmVkLCBjb25zZW50UmVxdWlyZWQsIGxvZ2luUmVxdWlyZWQgfSBmcm9tICcuL0ludGVyYWN0aW9uUmVxdWlyZWRBdXRoRXJyb3JDb2Rlcy5tanMnO1xuaW1wb3J0ICogYXMgSW50ZXJhY3Rpb25SZXF1aXJlZEF1dGhFcnJvckNvZGVzIGZyb20gJy4vSW50ZXJhY3Rpb25SZXF1aXJlZEF1dGhFcnJvckNvZGVzLm1qcyc7XG5leHBvcnQgeyBJbnRlcmFjdGlvblJlcXVpcmVkQXV0aEVycm9yQ29kZXMgfTtcblxuLypcclxuICogQ29weXJpZ2h0IChjKSBNaWNyb3NvZnQgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuXHJcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgTGljZW5zZS5cclxuICovXHJcbi8qKlxyXG4gKiBJbnRlcmFjdGlvblJlcXVpcmVkU2VydmVyRXJyb3JNZXNzYWdlIGNvbnRhaW5zIHN0cmluZyBjb25zdGFudHMgdXNlZCBieSBlcnJvciBjb2RlcyBhbmQgbWVzc2FnZXMgcmV0dXJuZWQgYnkgdGhlIHNlcnZlciBpbmRpY2F0aW5nIGludGVyYWN0aW9uIGlzIHJlcXVpcmVkXHJcbiAqL1xyXG5jb25zdCBJbnRlcmFjdGlvblJlcXVpcmVkU2VydmVyRXJyb3JNZXNzYWdlID0gW1xyXG4gICAgaW50ZXJhY3Rpb25SZXF1aXJlZCxcclxuICAgIGNvbnNlbnRSZXF1aXJlZCxcclxuICAgIGxvZ2luUmVxdWlyZWQsXHJcbiAgICBiYWRUb2tlbixcclxuXTtcclxuY29uc3QgSW50ZXJhY3Rpb25SZXF1aXJlZEF1dGhTdWJFcnJvck1lc3NhZ2UgPSBbXHJcbiAgICBcIm1lc3NhZ2Vfb25seVwiLFxyXG4gICAgXCJhZGRpdGlvbmFsX2FjdGlvblwiLFxyXG4gICAgXCJiYXNpY19hY3Rpb25cIixcclxuICAgIFwidXNlcl9wYXNzd29yZF9leHBpcmVkXCIsXHJcbiAgICBcImNvbnNlbnRfcmVxdWlyZWRcIixcclxuICAgIFwiYmFkX3Rva2VuXCIsXHJcbl07XHJcbmNvbnN0IEludGVyYWN0aW9uUmVxdWlyZWRBdXRoRXJyb3JNZXNzYWdlcyA9IHtcclxuICAgIFtub1Rva2Vuc0ZvdW5kXTogXCJObyByZWZyZXNoIHRva2VuIGZvdW5kIGluIHRoZSBjYWNoZS4gUGxlYXNlIHNpZ24taW4uXCIsXHJcbiAgICBbbmF0aXZlQWNjb3VudFVuYXZhaWxhYmxlXTogXCJUaGUgcmVxdWVzdGVkIGFjY291bnQgaXMgbm90IGF2YWlsYWJsZSBpbiB0aGUgbmF0aXZlIGJyb2tlci4gSXQgbWF5IGhhdmUgYmVlbiBkZWxldGVkIG9yIGxvZ2dlZCBvdXQuIFBsZWFzZSBzaWduLWluIGFnYWluIHVzaW5nIGFuIGludGVyYWN0aXZlIEFQSS5cIixcclxuICAgIFtyZWZyZXNoVG9rZW5FeHBpcmVkXTogXCJSZWZyZXNoIHRva2VuIGhhcyBleHBpcmVkLlwiLFxyXG4gICAgW2JhZFRva2VuXTogXCJJZGVudGl0eSBwcm92aWRlciByZXR1cm5lZCBiYWRfdG9rZW4gZHVlIHRvIGFuIGV4cGlyZWQgb3IgaW52YWxpZCByZWZyZXNoIHRva2VuLiBQbGVhc2UgaW52b2tlIGFuIGludGVyYWN0aXZlIEFQSSB0byByZXNvbHZlLlwiLFxyXG59O1xyXG4vKipcclxuICogSW50ZXJhY3Rpb24gcmVxdWlyZWQgZXJyb3JzIGRlZmluZWQgYnkgdGhlIFNES1xyXG4gKiBAZGVwcmVjYXRlZCBVc2UgSW50ZXJhY3Rpb25SZXF1aXJlZEF1dGhFcnJvckNvZGVzIGluc3RlYWRcclxuICovXHJcbmNvbnN0IEludGVyYWN0aW9uUmVxdWlyZWRBdXRoRXJyb3JNZXNzYWdlID0ge1xyXG4gICAgbm9Ub2tlbnNGb3VuZEVycm9yOiB7XHJcbiAgICAgICAgY29kZTogbm9Ub2tlbnNGb3VuZCxcclxuICAgICAgICBkZXNjOiBJbnRlcmFjdGlvblJlcXVpcmVkQXV0aEVycm9yTWVzc2FnZXNbbm9Ub2tlbnNGb3VuZF0sXHJcbiAgICB9LFxyXG4gICAgbmF0aXZlX2FjY291bnRfdW5hdmFpbGFibGU6IHtcclxuICAgICAgICBjb2RlOiBuYXRpdmVBY2NvdW50VW5hdmFpbGFibGUsXHJcbiAgICAgICAgZGVzYzogSW50ZXJhY3Rpb25SZXF1aXJlZEF1dGhFcnJvck1lc3NhZ2VzW25hdGl2ZUFjY291bnRVbmF2YWlsYWJsZV0sXHJcbiAgICB9LFxyXG4gICAgYmFkX3Rva2VuOiB7XHJcbiAgICAgICAgY29kZTogYmFkVG9rZW4sXHJcbiAgICAgICAgZGVzYzogSW50ZXJhY3Rpb25SZXF1aXJlZEF1dGhFcnJvck1lc3NhZ2VzW2JhZFRva2VuXSxcclxuICAgIH0sXHJcbn07XHJcbi8qKlxyXG4gKiBFcnJvciB0aHJvd24gd2hlbiB1c2VyIGludGVyYWN0aW9uIGlzIHJlcXVpcmVkLlxyXG4gKi9cclxuY2xhc3MgSW50ZXJhY3Rpb25SZXF1aXJlZEF1dGhFcnJvciBleHRlbmRzIEF1dGhFcnJvciB7XHJcbiAgICBjb25zdHJ1Y3RvcihlcnJvckNvZGUsIGVycm9yTWVzc2FnZSwgc3ViRXJyb3IsIHRpbWVzdGFtcCwgdHJhY2VJZCwgY29ycmVsYXRpb25JZCwgY2xhaW1zLCBlcnJvck5vKSB7XHJcbiAgICAgICAgc3VwZXIoZXJyb3JDb2RlLCBlcnJvck1lc3NhZ2UsIHN1YkVycm9yKTtcclxuICAgICAgICBPYmplY3Quc2V0UHJvdG90eXBlT2YodGhpcywgSW50ZXJhY3Rpb25SZXF1aXJlZEF1dGhFcnJvci5wcm90b3R5cGUpO1xyXG4gICAgICAgIHRoaXMudGltZXN0YW1wID0gdGltZXN0YW1wIHx8IENvbnN0YW50cy5FTVBUWV9TVFJJTkc7XHJcbiAgICAgICAgdGhpcy50cmFjZUlkID0gdHJhY2VJZCB8fCBDb25zdGFudHMuRU1QVFlfU1RSSU5HO1xyXG4gICAgICAgIHRoaXMuY29ycmVsYXRpb25JZCA9IGNvcnJlbGF0aW9uSWQgfHwgQ29uc3RhbnRzLkVNUFRZX1NUUklORztcclxuICAgICAgICB0aGlzLmNsYWltcyA9IGNsYWltcyB8fCBDb25zdGFudHMuRU1QVFlfU1RSSU5HO1xyXG4gICAgICAgIHRoaXMubmFtZSA9IFwiSW50ZXJhY3Rpb25SZXF1aXJlZEF1dGhFcnJvclwiO1xyXG4gICAgICAgIHRoaXMuZXJyb3JObyA9IGVycm9yTm87XHJcbiAgICB9XHJcbn1cclxuLyoqXHJcbiAqIEhlbHBlciBmdW5jdGlvbiB1c2VkIHRvIGRldGVybWluZSBpZiBhbiBlcnJvciB0aHJvd24gYnkgdGhlIHNlcnZlciByZXF1aXJlcyBpbnRlcmFjdGlvbiB0byByZXNvbHZlXHJcbiAqIEBwYXJhbSBlcnJvckNvZGVcclxuICogQHBhcmFtIGVycm9yU3RyaW5nXHJcbiAqIEBwYXJhbSBzdWJFcnJvclxyXG4gKi9cclxuZnVuY3Rpb24gaXNJbnRlcmFjdGlvblJlcXVpcmVkRXJyb3IoZXJyb3JDb2RlLCBlcnJvclN0cmluZywgc3ViRXJyb3IpIHtcclxuICAgIGNvbnN0IGlzSW50ZXJhY3Rpb25SZXF1aXJlZEVycm9yQ29kZSA9ICEhZXJyb3JDb2RlICYmXHJcbiAgICAgICAgSW50ZXJhY3Rpb25SZXF1aXJlZFNlcnZlckVycm9yTWVzc2FnZS5pbmRleE9mKGVycm9yQ29kZSkgPiAtMTtcclxuICAgIGNvbnN0IGlzSW50ZXJhY3Rpb25SZXF1aXJlZFN1YkVycm9yID0gISFzdWJFcnJvciAmJlxyXG4gICAgICAgIEludGVyYWN0aW9uUmVxdWlyZWRBdXRoU3ViRXJyb3JNZXNzYWdlLmluZGV4T2Yoc3ViRXJyb3IpID4gLTE7XHJcbiAgICBjb25zdCBpc0ludGVyYWN0aW9uUmVxdWlyZWRFcnJvckRlc2MgPSAhIWVycm9yU3RyaW5nICYmXHJcbiAgICAgICAgSW50ZXJhY3Rpb25SZXF1aXJlZFNlcnZlckVycm9yTWVzc2FnZS5zb21lKChpckVycm9yQ29kZSkgPT4ge1xyXG4gICAgICAgICAgICByZXR1cm4gZXJyb3JTdHJpbmcuaW5kZXhPZihpckVycm9yQ29kZSkgPiAtMTtcclxuICAgICAgICB9KTtcclxuICAgIHJldHVybiAoaXNJbnRlcmFjdGlvblJlcXVpcmVkRXJyb3JDb2RlIHx8XHJcbiAgICAgICAgaXNJbnRlcmFjdGlvblJlcXVpcmVkRXJyb3JEZXNjIHx8XHJcbiAgICAgICAgaXNJbnRlcmFjdGlvblJlcXVpcmVkU3ViRXJyb3IpO1xyXG59XHJcbi8qKlxyXG4gKiBDcmVhdGVzIGFuIEludGVyYWN0aW9uUmVxdWlyZWRBdXRoRXJyb3JcclxuICovXHJcbmZ1bmN0aW9uIGNyZWF0ZUludGVyYWN0aW9uUmVxdWlyZWRBdXRoRXJyb3IoZXJyb3JDb2RlKSB7XHJcbiAgICByZXR1cm4gbmV3IEludGVyYWN0aW9uUmVxdWlyZWRBdXRoRXJyb3IoZXJyb3JDb2RlLCBJbnRlcmFjdGlvblJlcXVpcmVkQXV0aEVycm9yTWVzc2FnZXNbZXJyb3JDb2RlXSk7XHJcbn1cblxuZXhwb3J0IHsgSW50ZXJhY3Rpb25SZXF1aXJlZEF1dGhFcnJvciwgSW50ZXJhY3Rpb25SZXF1aXJlZEF1dGhFcnJvck1lc3NhZ2UsIEludGVyYWN0aW9uUmVxdWlyZWRBdXRoU3ViRXJyb3JNZXNzYWdlLCBJbnRlcmFjdGlvblJlcXVpcmVkU2VydmVyRXJyb3JNZXNzYWdlLCBjcmVhdGVJbnRlcmFjdGlvblJlcXVpcmVkQXV0aEVycm9yLCBpc0ludGVyYWN0aW9uUmVxdWlyZWRFcnJvciB9O1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9SW50ZXJhY3Rpb25SZXF1aXJlZEF1dGhFcnJvci5tanMubWFwXG4iLCIvKiEgQGF6dXJlL21zYWwtY29tbW9uIHYxNC4xNi4wIDIwMjQtMTEtMDUgKi9cbid1c2Ugc3RyaWN0JztcbmltcG9ydCB7IENvbnN0YW50cyB9IGZyb20gJy4vQ29uc3RhbnRzLm1qcyc7XG5pbXBvcnQgeyBjcmVhdGVDbGllbnRBdXRoRXJyb3IgfSBmcm9tICcuLi9lcnJvci9DbGllbnRBdXRoRXJyb3IubWpzJztcbmltcG9ydCB7IG5vQ3J5cHRvT2JqZWN0LCBpbnZhbGlkU3RhdGUgfSBmcm9tICcuLi9lcnJvci9DbGllbnRBdXRoRXJyb3JDb2Rlcy5tanMnO1xuXG4vKlxyXG4gKiBDb3B5cmlnaHQgKGMpIE1pY3Jvc29mdCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cclxuICogTGljZW5zZWQgdW5kZXIgdGhlIE1JVCBMaWNlbnNlLlxyXG4gKi9cclxuLyoqXHJcbiAqIENsYXNzIHdoaWNoIHByb3ZpZGVzIGhlbHBlcnMgZm9yIE9BdXRoIDIuMCBwcm90b2NvbCBzcGVjaWZpYyB2YWx1ZXNcclxuICovXHJcbmNsYXNzIFByb3RvY29sVXRpbHMge1xyXG4gICAgLyoqXHJcbiAgICAgKiBBcHBlbmRzIHVzZXIgc3RhdGUgd2l0aCByYW5kb20gZ3VpZCwgb3IgcmV0dXJucyByYW5kb20gZ3VpZC5cclxuICAgICAqIEBwYXJhbSB1c2VyU3RhdGVcclxuICAgICAqIEBwYXJhbSByYW5kb21HdWlkXHJcbiAgICAgKi9cclxuICAgIHN0YXRpYyBzZXRSZXF1ZXN0U3RhdGUoY3J5cHRvT2JqLCB1c2VyU3RhdGUsIG1ldGEpIHtcclxuICAgICAgICBjb25zdCBsaWJyYXJ5U3RhdGUgPSBQcm90b2NvbFV0aWxzLmdlbmVyYXRlTGlicmFyeVN0YXRlKGNyeXB0b09iaiwgbWV0YSk7XHJcbiAgICAgICAgcmV0dXJuIHVzZXJTdGF0ZVxyXG4gICAgICAgICAgICA/IGAke2xpYnJhcnlTdGF0ZX0ke0NvbnN0YW50cy5SRVNPVVJDRV9ERUxJTX0ke3VzZXJTdGF0ZX1gXHJcbiAgICAgICAgICAgIDogbGlicmFyeVN0YXRlO1xyXG4gICAgfVxyXG4gICAgLyoqXHJcbiAgICAgKiBHZW5lcmF0ZXMgdGhlIHN0YXRlIHZhbHVlIHVzZWQgYnkgdGhlIGNvbW1vbiBsaWJyYXJ5LlxyXG4gICAgICogQHBhcmFtIHJhbmRvbUd1aWRcclxuICAgICAqIEBwYXJhbSBjcnlwdG9PYmpcclxuICAgICAqL1xyXG4gICAgc3RhdGljIGdlbmVyYXRlTGlicmFyeVN0YXRlKGNyeXB0b09iaiwgbWV0YSkge1xyXG4gICAgICAgIGlmICghY3J5cHRvT2JqKSB7XHJcbiAgICAgICAgICAgIHRocm93IGNyZWF0ZUNsaWVudEF1dGhFcnJvcihub0NyeXB0b09iamVjdCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIC8vIENyZWF0ZSBhIHN0YXRlIG9iamVjdCBjb250YWluaW5nIGEgdW5pcXVlIGlkIGFuZCB0aGUgdGltZXN0YW1wIG9mIHRoZSByZXF1ZXN0IGNyZWF0aW9uXHJcbiAgICAgICAgY29uc3Qgc3RhdGVPYmogPSB7XHJcbiAgICAgICAgICAgIGlkOiBjcnlwdG9PYmouY3JlYXRlTmV3R3VpZCgpLFxyXG4gICAgICAgIH07XHJcbiAgICAgICAgaWYgKG1ldGEpIHtcclxuICAgICAgICAgICAgc3RhdGVPYmoubWV0YSA9IG1ldGE7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNvbnN0IHN0YXRlU3RyaW5nID0gSlNPTi5zdHJpbmdpZnkoc3RhdGVPYmopO1xyXG4gICAgICAgIHJldHVybiBjcnlwdG9PYmouYmFzZTY0RW5jb2RlKHN0YXRlU3RyaW5nKTtcclxuICAgIH1cclxuICAgIC8qKlxyXG4gICAgICogUGFyc2VzIHRoZSBzdGF0ZSBpbnRvIHRoZSBSZXF1ZXN0U3RhdGVPYmplY3QsIHdoaWNoIGNvbnRhaW5zIHRoZSBMaWJyYXJ5U3RhdGUgaW5mbyBhbmQgdGhlIHN0YXRlIHBhc3NlZCBieSB0aGUgdXNlci5cclxuICAgICAqIEBwYXJhbSBzdGF0ZVxyXG4gICAgICogQHBhcmFtIGNyeXB0b09ialxyXG4gICAgICovXHJcbiAgICBzdGF0aWMgcGFyc2VSZXF1ZXN0U3RhdGUoY3J5cHRvT2JqLCBzdGF0ZSkge1xyXG4gICAgICAgIGlmICghY3J5cHRvT2JqKSB7XHJcbiAgICAgICAgICAgIHRocm93IGNyZWF0ZUNsaWVudEF1dGhFcnJvcihub0NyeXB0b09iamVjdCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICghc3RhdGUpIHtcclxuICAgICAgICAgICAgdGhyb3cgY3JlYXRlQ2xpZW50QXV0aEVycm9yKGludmFsaWRTdGF0ZSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgIC8vIFNwbGl0IHRoZSBzdGF0ZSBiZXR3ZWVuIGxpYnJhcnkgc3RhdGUgYW5kIHVzZXIgcGFzc2VkIHN0YXRlIGFuZCBkZWNvZGUgdGhlbSBzZXBhcmF0ZWx5XHJcbiAgICAgICAgICAgIGNvbnN0IHNwbGl0U3RhdGUgPSBzdGF0ZS5zcGxpdChDb25zdGFudHMuUkVTT1VSQ0VfREVMSU0pO1xyXG4gICAgICAgICAgICBjb25zdCBsaWJyYXJ5U3RhdGUgPSBzcGxpdFN0YXRlWzBdO1xyXG4gICAgICAgICAgICBjb25zdCB1c2VyU3RhdGUgPSBzcGxpdFN0YXRlLmxlbmd0aCA+IDFcclxuICAgICAgICAgICAgICAgID8gc3BsaXRTdGF0ZS5zbGljZSgxKS5qb2luKENvbnN0YW50cy5SRVNPVVJDRV9ERUxJTSlcclxuICAgICAgICAgICAgICAgIDogQ29uc3RhbnRzLkVNUFRZX1NUUklORztcclxuICAgICAgICAgICAgY29uc3QgbGlicmFyeVN0YXRlU3RyaW5nID0gY3J5cHRvT2JqLmJhc2U2NERlY29kZShsaWJyYXJ5U3RhdGUpO1xyXG4gICAgICAgICAgICBjb25zdCBsaWJyYXJ5U3RhdGVPYmogPSBKU09OLnBhcnNlKGxpYnJhcnlTdGF0ZVN0cmluZyk7XHJcbiAgICAgICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgICAgICB1c2VyUmVxdWVzdFN0YXRlOiB1c2VyU3RhdGUgfHwgQ29uc3RhbnRzLkVNUFRZX1NUUklORyxcclxuICAgICAgICAgICAgICAgIGxpYnJhcnlTdGF0ZTogbGlicmFyeVN0YXRlT2JqLFxyXG4gICAgICAgICAgICB9O1xyXG4gICAgICAgIH1cclxuICAgICAgICBjYXRjaCAoZSkge1xyXG4gICAgICAgICAgICB0aHJvdyBjcmVhdGVDbGllbnRBdXRoRXJyb3IoaW52YWxpZFN0YXRlKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbn1cblxuZXhwb3J0IHsgUHJvdG9jb2xVdGlscyB9O1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9UHJvdG9jb2xVdGlscy5tanMubWFwXG4iLCIvKiEgQGF6dXJlL21zYWwtY29tbW9uIHYxNC4xNi4wIDIwMjQtMTEtMDUgKi9cbid1c2Ugc3RyaWN0Jztcbi8qXHJcbiAqIENvcHlyaWdodCAoYykgTWljcm9zb2Z0IENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLlxyXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgTUlUIExpY2Vuc2UuXHJcbiAqL1xyXG5jb25zdCBDY3NDcmVkZW50aWFsVHlwZSA9IHtcclxuICAgIEhPTUVfQUNDT1VOVF9JRDogXCJob21lX2FjY291bnRfaWRcIixcclxuICAgIFVQTjogXCJVUE5cIixcclxufTtcblxuZXhwb3J0IHsgQ2NzQ3JlZGVudGlhbFR5cGUgfTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPUNjc0NyZWRlbnRpYWwubWpzLm1hcFxuIiwiLyohIEBhenVyZS9tc2FsLWJyb3dzZXIgdjMuMjguMSAyMDI1LTAxLTE0ICovXG4ndXNlIHN0cmljdCc7XG5pbXBvcnQgeyBjcmVhdGVCcm93c2VyQ29uZmlndXJhdGlvbkF1dGhFcnJvciB9IGZyb20gJy4uL2Vycm9yL0Jyb3dzZXJDb25maWd1cmF0aW9uQXV0aEVycm9yLm1qcyc7XG5pbXBvcnQgeyBzdG9yYWdlTm90U3VwcG9ydGVkIH0gZnJvbSAnLi4vZXJyb3IvQnJvd3NlckNvbmZpZ3VyYXRpb25BdXRoRXJyb3JDb2Rlcy5tanMnO1xuXG4vKlxyXG4gKiBDb3B5cmlnaHQgKGMpIE1pY3Jvc29mdCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cclxuICogTGljZW5zZWQgdW5kZXIgdGhlIE1JVCBMaWNlbnNlLlxyXG4gKi9cclxuY2xhc3MgTG9jYWxTdG9yYWdlIHtcclxuICAgIGNvbnN0cnVjdG9yKCkge1xyXG4gICAgICAgIGlmICghd2luZG93LmxvY2FsU3RvcmFnZSkge1xyXG4gICAgICAgICAgICB0aHJvdyBjcmVhdGVCcm93c2VyQ29uZmlndXJhdGlvbkF1dGhFcnJvcihzdG9yYWdlTm90U3VwcG9ydGVkKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBnZXRJdGVtKGtleSkge1xyXG4gICAgICAgIHJldHVybiB3aW5kb3cubG9jYWxTdG9yYWdlLmdldEl0ZW0oa2V5KTtcclxuICAgIH1cclxuICAgIHNldEl0ZW0oa2V5LCB2YWx1ZSkge1xyXG4gICAgICAgIHdpbmRvdy5sb2NhbFN0b3JhZ2Uuc2V0SXRlbShrZXksIHZhbHVlKTtcclxuICAgIH1cclxuICAgIHJlbW92ZUl0ZW0oa2V5KSB7XHJcbiAgICAgICAgd2luZG93LmxvY2FsU3RvcmFnZS5yZW1vdmVJdGVtKGtleSk7XHJcbiAgICB9XHJcbiAgICBnZXRLZXlzKCkge1xyXG4gICAgICAgIHJldHVybiBPYmplY3Qua2V5cyh3aW5kb3cubG9jYWxTdG9yYWdlKTtcclxuICAgIH1cclxuICAgIGNvbnRhaW5zS2V5KGtleSkge1xyXG4gICAgICAgIHJldHVybiB3aW5kb3cubG9jYWxTdG9yYWdlLmhhc093blByb3BlcnR5KGtleSk7XHJcbiAgICB9XHJcbn1cblxuZXhwb3J0IHsgTG9jYWxTdG9yYWdlIH07XG4vLyMgc291cmNlTWFwcGluZ1VSTD1Mb2NhbFN0b3JhZ2UubWpzLm1hcFxuIiwiLyohIEBhenVyZS9tc2FsLWJyb3dzZXIgdjMuMjguMSAyMDI1LTAxLTE0ICovXG4ndXNlIHN0cmljdCc7XG5pbXBvcnQgeyBjcmVhdGVCcm93c2VyQ29uZmlndXJhdGlvbkF1dGhFcnJvciB9IGZyb20gJy4uL2Vycm9yL0Jyb3dzZXJDb25maWd1cmF0aW9uQXV0aEVycm9yLm1qcyc7XG5pbXBvcnQgeyBzdG9yYWdlTm90U3VwcG9ydGVkIH0gZnJvbSAnLi4vZXJyb3IvQnJvd3NlckNvbmZpZ3VyYXRpb25BdXRoRXJyb3JDb2Rlcy5tanMnO1xuXG4vKlxyXG4gKiBDb3B5cmlnaHQgKGMpIE1pY3Jvc29mdCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cclxuICogTGljZW5zZWQgdW5kZXIgdGhlIE1JVCBMaWNlbnNlLlxyXG4gKi9cclxuY2xhc3MgU2Vzc2lvblN0b3JhZ2Uge1xyXG4gICAgY29uc3RydWN0b3IoKSB7XHJcbiAgICAgICAgaWYgKCF3aW5kb3cuc2Vzc2lvblN0b3JhZ2UpIHtcclxuICAgICAgICAgICAgdGhyb3cgY3JlYXRlQnJvd3NlckNvbmZpZ3VyYXRpb25BdXRoRXJyb3Ioc3RvcmFnZU5vdFN1cHBvcnRlZCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgZ2V0SXRlbShrZXkpIHtcclxuICAgICAgICByZXR1cm4gd2luZG93LnNlc3Npb25TdG9yYWdlLmdldEl0ZW0oa2V5KTtcclxuICAgIH1cclxuICAgIHNldEl0ZW0oa2V5LCB2YWx1ZSkge1xyXG4gICAgICAgIHdpbmRvdy5zZXNzaW9uU3RvcmFnZS5zZXRJdGVtKGtleSwgdmFsdWUpO1xyXG4gICAgfVxyXG4gICAgcmVtb3ZlSXRlbShrZXkpIHtcclxuICAgICAgICB3aW5kb3cuc2Vzc2lvblN0b3JhZ2UucmVtb3ZlSXRlbShrZXkpO1xyXG4gICAgfVxyXG4gICAgZ2V0S2V5cygpIHtcclxuICAgICAgICByZXR1cm4gT2JqZWN0LmtleXMod2luZG93LnNlc3Npb25TdG9yYWdlKTtcclxuICAgIH1cclxuICAgIGNvbnRhaW5zS2V5KGtleSkge1xyXG4gICAgICAgIHJldHVybiB3aW5kb3cuc2Vzc2lvblN0b3JhZ2UuaGFzT3duUHJvcGVydHkoa2V5KTtcclxuICAgIH1cclxufVxuXG5leHBvcnQgeyBTZXNzaW9uU3RvcmFnZSB9O1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9U2Vzc2lvblN0b3JhZ2UubWpzLm1hcFxuIiwiLyohIEBhenVyZS9tc2FsLWJyb3dzZXIgdjMuMjguMSAyMDI1LTAxLTE0ICovXG4ndXNlIHN0cmljdCc7XG5pbXBvcnQgeyBQcm90b2NvbFV0aWxzLCBjcmVhdGVDbGllbnRBdXRoRXJyb3IsIENsaWVudEF1dGhFcnJvckNvZGVzIH0gZnJvbSAnQGF6dXJlL21zYWwtY29tbW9uL2Jyb3dzZXInO1xuXG4vKlxyXG4gKiBDb3B5cmlnaHQgKGMpIE1pY3Jvc29mdCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cclxuICogTGljZW5zZWQgdW5kZXIgdGhlIE1JVCBMaWNlbnNlLlxyXG4gKi9cclxuLyoqXHJcbiAqIEV4dHJhY3RzIHRoZSBCcm93c2VyU3RhdGVPYmplY3QgZnJvbSB0aGUgc3RhdGUgc3RyaW5nLlxyXG4gKiBAcGFyYW0gYnJvd3NlckNyeXB0b1xyXG4gKiBAcGFyYW0gc3RhdGVcclxuICovXHJcbmZ1bmN0aW9uIGV4dHJhY3RCcm93c2VyUmVxdWVzdFN0YXRlKGJyb3dzZXJDcnlwdG8sIHN0YXRlKSB7XHJcbiAgICBpZiAoIXN0YXRlKSB7XHJcbiAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICB9XHJcbiAgICB0cnkge1xyXG4gICAgICAgIGNvbnN0IHJlcXVlc3RTdGF0ZU9iaiA9IFByb3RvY29sVXRpbHMucGFyc2VSZXF1ZXN0U3RhdGUoYnJvd3NlckNyeXB0bywgc3RhdGUpO1xyXG4gICAgICAgIHJldHVybiByZXF1ZXN0U3RhdGVPYmoubGlicmFyeVN0YXRlLm1ldGE7XHJcbiAgICB9XHJcbiAgICBjYXRjaCAoZSkge1xyXG4gICAgICAgIHRocm93IGNyZWF0ZUNsaWVudEF1dGhFcnJvcihDbGllbnRBdXRoRXJyb3JDb2Rlcy5pbnZhbGlkU3RhdGUpO1xyXG4gICAgfVxyXG59XG5cbmV4cG9ydCB7IGV4dHJhY3RCcm93c2VyUmVxdWVzdFN0YXRlIH07XG4vLyMgc291cmNlTWFwcGluZ1VSTD1Ccm93c2VyUHJvdG9jb2xVdGlscy5tanMubWFwXG4iLCIvKiEgQGF6dXJlL21zYWwtYnJvd3NlciB2My4yOC4xIDIwMjUtMDEtMTQgKi9cbid1c2Ugc3RyaWN0Jztcbi8qXHJcbiAqIENvcHlyaWdodCAoYykgTWljcm9zb2Z0IENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLlxyXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgTUlUIExpY2Vuc2UuXHJcbiAqL1xyXG4vLyBDb29raWUgbGlmZSBjYWxjdWxhdGlvbiAoaG91cnMgKiBtaW51dGVzICogc2Vjb25kcyAqIG1zKVxyXG5jb25zdCBDT09LSUVfTElGRV9NVUxUSVBMSUVSID0gMjQgKiA2MCAqIDYwICogMTAwMDtcclxuY2xhc3MgQ29va2llU3RvcmFnZSB7XHJcbiAgICBnZXRJdGVtKGtleSkge1xyXG4gICAgICAgIGNvbnN0IG5hbWUgPSBgJHtlbmNvZGVVUklDb21wb25lbnQoa2V5KX1gO1xyXG4gICAgICAgIGNvbnN0IGNvb2tpZUxpc3QgPSBkb2N1bWVudC5jb29raWUuc3BsaXQoXCI7XCIpO1xyXG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgY29va2llTGlzdC5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICBjb25zdCBjb29raWUgPSBjb29raWVMaXN0W2ldO1xyXG4gICAgICAgICAgICBjb25zdCBba2V5LCAuLi5yZXN0XSA9IGRlY29kZVVSSUNvbXBvbmVudChjb29raWUpLnRyaW0oKS5zcGxpdChcIj1cIik7XHJcbiAgICAgICAgICAgIGNvbnN0IHZhbHVlID0gcmVzdC5qb2luKFwiPVwiKTtcclxuICAgICAgICAgICAgaWYgKGtleSA9PT0gbmFtZSkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHZhbHVlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBcIlwiO1xyXG4gICAgfVxyXG4gICAgc2V0SXRlbShrZXksIHZhbHVlLCBjb29raWVMaWZlRGF5cywgc2VjdXJlID0gdHJ1ZSkge1xyXG4gICAgICAgIGxldCBjb29raWVTdHIgPSBgJHtlbmNvZGVVUklDb21wb25lbnQoa2V5KX09JHtlbmNvZGVVUklDb21wb25lbnQodmFsdWUpfTtwYXRoPS87U2FtZVNpdGU9TGF4O2A7XHJcbiAgICAgICAgaWYgKGNvb2tpZUxpZmVEYXlzKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGV4cGlyZVRpbWUgPSBnZXRDb29raWVFeHBpcmF0aW9uVGltZShjb29raWVMaWZlRGF5cyk7XHJcbiAgICAgICAgICAgIGNvb2tpZVN0ciArPSBgZXhwaXJlcz0ke2V4cGlyZVRpbWV9O2A7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChzZWN1cmUpIHtcclxuICAgICAgICAgICAgY29va2llU3RyICs9IFwiU2VjdXJlO1wiO1xyXG4gICAgICAgIH1cclxuICAgICAgICBkb2N1bWVudC5jb29raWUgPSBjb29raWVTdHI7XHJcbiAgICB9XHJcbiAgICByZW1vdmVJdGVtKGtleSkge1xyXG4gICAgICAgIC8vIFNldHRpbmcgZXhwaXJhdGlvbiB0byAtMSByZW1vdmVzIGl0XHJcbiAgICAgICAgdGhpcy5zZXRJdGVtKGtleSwgXCJcIiwgLTEpO1xyXG4gICAgfVxyXG4gICAgZ2V0S2V5cygpIHtcclxuICAgICAgICBjb25zdCBjb29raWVMaXN0ID0gZG9jdW1lbnQuY29va2llLnNwbGl0KFwiO1wiKTtcclxuICAgICAgICBjb25zdCBrZXlzID0gW107XHJcbiAgICAgICAgY29va2llTGlzdC5mb3JFYWNoKChjb29raWUpID0+IHtcclxuICAgICAgICAgICAgY29uc3QgY29va2llUGFydHMgPSBkZWNvZGVVUklDb21wb25lbnQoY29va2llKS50cmltKCkuc3BsaXQoXCI9XCIpO1xyXG4gICAgICAgICAgICBrZXlzLnB1c2goY29va2llUGFydHNbMF0pO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIHJldHVybiBrZXlzO1xyXG4gICAgfVxyXG4gICAgY29udGFpbnNLZXkoa2V5KSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0S2V5cygpLmluY2x1ZGVzKGtleSk7XHJcbiAgICB9XHJcbn1cclxuLyoqXHJcbiAqIEdldCBjb29raWUgZXhwaXJhdGlvbiB0aW1lXHJcbiAqIEBwYXJhbSBjb29raWVMaWZlRGF5c1xyXG4gKi9cclxuZnVuY3Rpb24gZ2V0Q29va2llRXhwaXJhdGlvblRpbWUoY29va2llTGlmZURheXMpIHtcclxuICAgIGNvbnN0IHRvZGF5ID0gbmV3IERhdGUoKTtcclxuICAgIGNvbnN0IGV4cHIgPSBuZXcgRGF0ZSh0b2RheS5nZXRUaW1lKCkgKyBjb29raWVMaWZlRGF5cyAqIENPT0tJRV9MSUZFX01VTFRJUExJRVIpO1xyXG4gICAgcmV0dXJuIGV4cHIudG9VVENTdHJpbmcoKTtcclxufVxuXG5leHBvcnQgeyBDb29raWVTdG9yYWdlLCBnZXRDb29raWVFeHBpcmF0aW9uVGltZSB9O1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9Q29va2llU3RvcmFnZS5tanMubWFwXG4iLCIvKiEgQGF6dXJlL21zYWwtYnJvd3NlciB2My4yOC4xIDIwMjUtMDEtMTQgKi9cbid1c2Ugc3RyaWN0JztcbmltcG9ydCB7IENhY2hlTWFuYWdlciwgQ3JlZGVudGlhbFR5cGUsIENhY2hlSGVscGVycywgQWNjb3VudEVudGl0eSwgY3JlYXRlQ2xpZW50QXV0aEVycm9yLCBDbGllbnRBdXRoRXJyb3JDb2RlcywgQ29uc3RhbnRzLCBQZXJzaXN0ZW50Q2FjaGVLZXlzLCBQZXJmb3JtYW5jZUV2ZW50cywgU3RyaW5nVXRpbHMsIFByb3RvY29sVXRpbHMsIEF1dGhUb2tlbiwgQ2FjaGVFcnJvciwgREVGQVVMVF9DUllQVE9fSU1QTEVNRU5UQVRJT04sIENjc0NyZWRlbnRpYWxUeXBlIH0gZnJvbSAnQGF6dXJlL21zYWwtY29tbW9uL2Jyb3dzZXInO1xuaW1wb3J0IHsgY3JlYXRlQnJvd3NlckF1dGhFcnJvciB9IGZyb20gJy4uL2Vycm9yL0Jyb3dzZXJBdXRoRXJyb3IubWpzJztcbmltcG9ydCB7IEJyb3dzZXJDYWNoZUxvY2F0aW9uLCBTdGF0aWNDYWNoZUtleXMsIEluTWVtb3J5Q2FjaGVLZXlzLCBUZW1wb3JhcnlDYWNoZUtleXMgfSBmcm9tICcuLi91dGlscy9Ccm93c2VyQ29uc3RhbnRzLm1qcyc7XG5pbXBvcnQgeyBMb2NhbFN0b3JhZ2UgfSBmcm9tICcuL0xvY2FsU3RvcmFnZS5tanMnO1xuaW1wb3J0IHsgU2Vzc2lvblN0b3JhZ2UgfSBmcm9tICcuL1Nlc3Npb25TdG9yYWdlLm1qcyc7XG5pbXBvcnQgeyBNZW1vcnlTdG9yYWdlIH0gZnJvbSAnLi9NZW1vcnlTdG9yYWdlLm1qcyc7XG5pbXBvcnQgeyBleHRyYWN0QnJvd3NlclJlcXVlc3RTdGF0ZSB9IGZyb20gJy4uL3V0aWxzL0Jyb3dzZXJQcm90b2NvbFV0aWxzLm1qcyc7XG5pbXBvcnQgeyBiYXNlNjREZWNvZGUgfSBmcm9tICcuLi9lbmNvZGUvQmFzZTY0RGVjb2RlLm1qcyc7XG5pbXBvcnQgeyBiYXNlNjRFbmNvZGUgfSBmcm9tICcuLi9lbmNvZGUvQmFzZTY0RW5jb2RlLm1qcyc7XG5pbXBvcnQgeyBDb29raWVTdG9yYWdlIH0gZnJvbSAnLi9Db29raWVTdG9yYWdlLm1qcyc7XG5pbXBvcnQgeyBub1Rva2VuUmVxdWVzdENhY2hlRXJyb3IsIHVuYWJsZVRvUGFyc2VUb2tlblJlcXVlc3RDYWNoZUVycm9yLCBub0NhY2hlZEF1dGhvcml0eUVycm9yLCBpbnRlcmFjdGlvbkluUHJvZ3Jlc3MgfSBmcm9tICcuLi9lcnJvci9Ccm93c2VyQXV0aEVycm9yQ29kZXMubWpzJztcblxuLypcclxuICogQ29weXJpZ2h0IChjKSBNaWNyb3NvZnQgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuXHJcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgTGljZW5zZS5cclxuICovXHJcbi8qKlxyXG4gKiBUaGlzIGNsYXNzIGltcGxlbWVudHMgdGhlIGNhY2hlIHN0b3JhZ2UgaW50ZXJmYWNlIGZvciBNU0FMIHRocm91Z2ggYnJvd3NlciBsb2NhbCBvciBzZXNzaW9uIHN0b3JhZ2UuXHJcbiAqIENvb2tpZXMgYXJlIG9ubHkgdXNlZCBpZiBzdG9yZUF1dGhTdGF0ZUluQ29va2llIGlzIHRydWUsIGFuZCBhcmUgb25seSB1c2VkIGZvclxyXG4gKiBwYXJhbWV0ZXJzIHN1Y2ggYXMgc3RhdGUgYW5kIG5vbmNlLCBnZW5lcmFsbHkuXHJcbiAqL1xyXG5jbGFzcyBCcm93c2VyQ2FjaGVNYW5hZ2VyIGV4dGVuZHMgQ2FjaGVNYW5hZ2VyIHtcclxuICAgIGNvbnN0cnVjdG9yKGNsaWVudElkLCBjYWNoZUNvbmZpZywgY3J5cHRvSW1wbCwgbG9nZ2VyLCBzdGF0aWNBdXRob3JpdHlPcHRpb25zLCBwZXJmb3JtYW5jZUNsaWVudCkge1xyXG4gICAgICAgIHN1cGVyKGNsaWVudElkLCBjcnlwdG9JbXBsLCBsb2dnZXIsIHN0YXRpY0F1dGhvcml0eU9wdGlvbnMpO1xyXG4gICAgICAgIHRoaXMuY2FjaGVDb25maWcgPSBjYWNoZUNvbmZpZztcclxuICAgICAgICB0aGlzLmxvZ2dlciA9IGxvZ2dlcjtcclxuICAgICAgICB0aGlzLmludGVybmFsU3RvcmFnZSA9IG5ldyBNZW1vcnlTdG9yYWdlKCk7XHJcbiAgICAgICAgdGhpcy5icm93c2VyU3RvcmFnZSA9IHRoaXMuc2V0dXBCcm93c2VyU3RvcmFnZSh0aGlzLmNhY2hlQ29uZmlnLmNhY2hlTG9jYXRpb24pO1xyXG4gICAgICAgIHRoaXMudGVtcG9yYXJ5Q2FjaGVTdG9yYWdlID0gdGhpcy5zZXR1cEJyb3dzZXJTdG9yYWdlKHRoaXMuY2FjaGVDb25maWcudGVtcG9yYXJ5Q2FjaGVMb2NhdGlvbik7XHJcbiAgICAgICAgdGhpcy5jb29raWVTdG9yYWdlID0gbmV3IENvb2tpZVN0b3JhZ2UoKTtcclxuICAgICAgICAvLyBNaWdyYXRlIGNhY2hlIGVudHJpZXMgZnJvbSBvbGRlciB2ZXJzaW9ucyBvZiBNU0FMLlxyXG4gICAgICAgIGlmIChjYWNoZUNvbmZpZy5jYWNoZU1pZ3JhdGlvbkVuYWJsZWQpIHtcclxuICAgICAgICAgICAgdGhpcy5taWdyYXRlQ2FjaGVFbnRyaWVzKCk7XHJcbiAgICAgICAgICAgIHRoaXMuY3JlYXRlS2V5TWFwcygpO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLnBlcmZvcm1hbmNlQ2xpZW50ID0gcGVyZm9ybWFuY2VDbGllbnQ7XHJcbiAgICB9XHJcbiAgICAvKipcclxuICAgICAqIFJldHVybnMgYSB3aW5kb3cgc3RvcmFnZSBjbGFzcyBpbXBsZW1lbnRpbmcgdGhlIElXaW5kb3dTdG9yYWdlIGludGVyZmFjZSB0aGF0IGNvcnJlc3BvbmRzIHRvIHRoZSBjb25maWd1cmVkIGNhY2hlTG9jYXRpb24uXHJcbiAgICAgKiBAcGFyYW0gY2FjaGVMb2NhdGlvblxyXG4gICAgICovXHJcbiAgICBzZXR1cEJyb3dzZXJTdG9yYWdlKGNhY2hlTG9jYXRpb24pIHtcclxuICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICBzd2l0Y2ggKGNhY2hlTG9jYXRpb24pIHtcclxuICAgICAgICAgICAgICAgIGNhc2UgQnJvd3NlckNhY2hlTG9jYXRpb24uTG9jYWxTdG9yYWdlOlxyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBuZXcgTG9jYWxTdG9yYWdlKCk7XHJcbiAgICAgICAgICAgICAgICBjYXNlIEJyb3dzZXJDYWNoZUxvY2F0aW9uLlNlc3Npb25TdG9yYWdlOlxyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBuZXcgU2Vzc2lvblN0b3JhZ2UoKTtcclxuICAgICAgICAgICAgICAgIGNhc2UgQnJvd3NlckNhY2hlTG9jYXRpb24uTWVtb3J5U3RvcmFnZTpcclxuICAgICAgICAgICAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgY2F0Y2ggKGUpIHtcclxuICAgICAgICAgICAgdGhpcy5sb2dnZXIuZXJyb3IoZSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuY2FjaGVDb25maWcuY2FjaGVMb2NhdGlvbiA9IEJyb3dzZXJDYWNoZUxvY2F0aW9uLk1lbW9yeVN0b3JhZ2U7XHJcbiAgICAgICAgcmV0dXJuIG5ldyBNZW1vcnlTdG9yYWdlKCk7XHJcbiAgICB9XHJcbiAgICAvKipcclxuICAgICAqIE1pZ3JhdGUgYWxsIG9sZCBjYWNoZSBlbnRyaWVzIHRvIG5ldyBzY2hlbWEuIE5vIHJvbGxiYWNrIHN1cHBvcnRlZC5cclxuICAgICAqIEBwYXJhbSBzdG9yZUF1dGhTdGF0ZUluQ29va2llXHJcbiAgICAgKi9cclxuICAgIG1pZ3JhdGVDYWNoZUVudHJpZXMoKSB7XHJcbiAgICAgICAgY29uc3QgaWRUb2tlbktleSA9IGAke0NvbnN0YW50cy5DQUNIRV9QUkVGSVh9LiR7UGVyc2lzdGVudENhY2hlS2V5cy5JRF9UT0tFTn1gO1xyXG4gICAgICAgIGNvbnN0IGNsaWVudEluZm9LZXkgPSBgJHtDb25zdGFudHMuQ0FDSEVfUFJFRklYfS4ke1BlcnNpc3RlbnRDYWNoZUtleXMuQ0xJRU5UX0lORk99YDtcclxuICAgICAgICBjb25zdCBlcnJvcktleSA9IGAke0NvbnN0YW50cy5DQUNIRV9QUkVGSVh9LiR7UGVyc2lzdGVudENhY2hlS2V5cy5FUlJPUn1gO1xyXG4gICAgICAgIGNvbnN0IGVycm9yRGVzY0tleSA9IGAke0NvbnN0YW50cy5DQUNIRV9QUkVGSVh9LiR7UGVyc2lzdGVudENhY2hlS2V5cy5FUlJPUl9ERVNDfWA7XHJcbiAgICAgICAgY29uc3QgaWRUb2tlblZhbHVlID0gdGhpcy5icm93c2VyU3RvcmFnZS5nZXRJdGVtKGlkVG9rZW5LZXkpO1xyXG4gICAgICAgIGNvbnN0IGNsaWVudEluZm9WYWx1ZSA9IHRoaXMuYnJvd3NlclN0b3JhZ2UuZ2V0SXRlbShjbGllbnRJbmZvS2V5KTtcclxuICAgICAgICBjb25zdCBlcnJvclZhbHVlID0gdGhpcy5icm93c2VyU3RvcmFnZS5nZXRJdGVtKGVycm9yS2V5KTtcclxuICAgICAgICBjb25zdCBlcnJvckRlc2NWYWx1ZSA9IHRoaXMuYnJvd3NlclN0b3JhZ2UuZ2V0SXRlbShlcnJvckRlc2NLZXkpO1xyXG4gICAgICAgIGNvbnN0IHZhbHVlcyA9IFtcclxuICAgICAgICAgICAgaWRUb2tlblZhbHVlLFxyXG4gICAgICAgICAgICBjbGllbnRJbmZvVmFsdWUsXHJcbiAgICAgICAgICAgIGVycm9yVmFsdWUsXHJcbiAgICAgICAgICAgIGVycm9yRGVzY1ZhbHVlLFxyXG4gICAgICAgIF07XHJcbiAgICAgICAgY29uc3Qga2V5c1RvTWlncmF0ZSA9IFtcclxuICAgICAgICAgICAgUGVyc2lzdGVudENhY2hlS2V5cy5JRF9UT0tFTixcclxuICAgICAgICAgICAgUGVyc2lzdGVudENhY2hlS2V5cy5DTElFTlRfSU5GTyxcclxuICAgICAgICAgICAgUGVyc2lzdGVudENhY2hlS2V5cy5FUlJPUixcclxuICAgICAgICAgICAgUGVyc2lzdGVudENhY2hlS2V5cy5FUlJPUl9ERVNDLFxyXG4gICAgICAgIF07XHJcbiAgICAgICAga2V5c1RvTWlncmF0ZS5mb3JFYWNoKChjYWNoZUtleSwgaW5kZXgpID0+IHtcclxuICAgICAgICAgICAgY29uc3QgdmFsdWUgPSB2YWx1ZXNbaW5kZXhdO1xyXG4gICAgICAgICAgICBpZiAodmFsdWUpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuc2V0VGVtcG9yYXJ5Q2FjaGUoY2FjaGVLZXksIHZhbHVlLCB0cnVlKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG4gICAgLyoqXHJcbiAgICAgKiBTZWFyY2hlcyBhbGwgY2FjaGUgZW50cmllcyBmb3IgTVNBTCBhY2NvdW50cyBhbmQgY3JlYXRlcyB0aGUgYWNjb3VudCBrZXkgbWFwXHJcbiAgICAgKiBUaGlzIGlzIHVzZWQgdG8gbWlncmF0ZSB1c2VycyBmcm9tIG9sZGVyIHZlcnNpb25zIG9mIE1TQUwgd2hpY2ggZGlkIG5vdCBjcmVhdGUgdGhlIG1hcC5cclxuICAgICAqIEByZXR1cm5zXHJcbiAgICAgKi9cclxuICAgIGNyZWF0ZUtleU1hcHMoKSB7XHJcbiAgICAgICAgdGhpcy5sb2dnZXIudHJhY2UoXCJCcm93c2VyQ2FjaGVNYW5hZ2VyIC0gY3JlYXRlS2V5TWFwcyBjYWxsZWQuXCIpO1xyXG4gICAgICAgIGNvbnN0IGFjY291bnRLZXlzID0gdGhpcy5nZXRJdGVtKFN0YXRpY0NhY2hlS2V5cy5BQ0NPVU5UX0tFWVMpO1xyXG4gICAgICAgIGNvbnN0IHRva2VuS2V5cyA9IHRoaXMuZ2V0SXRlbShgJHtTdGF0aWNDYWNoZUtleXMuVE9LRU5fS0VZU30uJHt0aGlzLmNsaWVudElkfWApO1xyXG4gICAgICAgIGlmIChhY2NvdW50S2V5cyAmJiB0b2tlbktleXMpIHtcclxuICAgICAgICAgICAgdGhpcy5sb2dnZXIudmVyYm9zZShcIkJyb3dzZXJDYWNoZU1hbmFnZXI6Y3JlYXRlS2V5TWFwcyAtIGFjY291bnQgYW5kIHRva2VuIGtleSBtYXBzIGFscmVhZHkgZXhpc3QsIHNraXBwaW5nIG1pZ3JhdGlvbi5cIik7XHJcbiAgICAgICAgICAgIC8vIEtleSBtYXBzIGFscmVhZHkgZXhpc3QsIG5vIG5lZWQgdG8gaXRlcmF0ZSB0aHJvdWdoIGNhY2hlXHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgY29uc3QgYWxsS2V5cyA9IHRoaXMuYnJvd3NlclN0b3JhZ2UuZ2V0S2V5cygpO1xyXG4gICAgICAgIGFsbEtleXMuZm9yRWFjaCgoa2V5KSA9PiB7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLmlzQ3JlZGVudGlhbEtleShrZXkpKSB7XHJcbiAgICAgICAgICAgICAgICAvLyBHZXQgaXRlbSwgcGFyc2UsIHZhbGlkYXRlIGFuZCB3cml0ZSBrZXkgdG8gbWFwXHJcbiAgICAgICAgICAgICAgICBjb25zdCB2YWx1ZSA9IHRoaXMuZ2V0SXRlbShrZXkpO1xyXG4gICAgICAgICAgICAgICAgaWYgKHZhbHVlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgY3JlZE9iaiA9IHRoaXMudmFsaWRhdGVBbmRQYXJzZUpzb24odmFsdWUpO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChjcmVkT2JqICYmIGNyZWRPYmouaGFzT3duUHJvcGVydHkoXCJjcmVkZW50aWFsVHlwZVwiKSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBzd2l0Y2ggKGNyZWRPYmpbXCJjcmVkZW50aWFsVHlwZVwiXSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBDcmVkZW50aWFsVHlwZS5JRF9UT0tFTjpcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoQ2FjaGVIZWxwZXJzLmlzSWRUb2tlbkVudGl0eShjcmVkT2JqKSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmxvZ2dlci50cmFjZShcIkJyb3dzZXJDYWNoZU1hbmFnZXI6Y3JlYXRlS2V5TWFwcyAtIGlkVG9rZW4gZm91bmQsIHNhdmluZyBrZXkgdG8gdG9rZW4ga2V5IG1hcFwiKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5sb2dnZXIudHJhY2VQaWkoYEJyb3dzZXJDYWNoZU1hbmFnZXI6Y3JlYXRlS2V5TWFwcyAtIGlkVG9rZW4gd2l0aCBrZXk6ICR7a2V5fSBmb3VuZCwgc2F2aW5nIGtleSB0byB0b2tlbiBrZXkgbWFwYCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGlkVG9rZW5FbnRpdHkgPSBjcmVkT2JqO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBuZXdLZXkgPSB0aGlzLnVwZGF0ZUNyZWRlbnRpYWxDYWNoZUtleShrZXksIGlkVG9rZW5FbnRpdHkpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmFkZFRva2VuS2V5KG5ld0tleSwgQ3JlZGVudGlhbFR5cGUuSURfVE9LRU4pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmxvZ2dlci50cmFjZShcIkJyb3dzZXJDYWNoZU1hbmFnZXI6Y3JlYXRlS2V5TWFwcyAtIGtleSBmb3VuZCBtYXRjaGluZyBpZFRva2VuIHNjaGVtYSB3aXRoIHZhbHVlIGNvbnRhaW5pbmcgaWRUb2tlbiBjcmVkZW50aWFsVHlwZSBmaWVsZCBidXQgdmFsdWUgZmFpbGVkIElkVG9rZW5FbnRpdHkgdmFsaWRhdGlvbiwgc2tpcHBpbmcuXCIpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmxvZ2dlci50cmFjZVBpaShgQnJvd3NlckNhY2hlTWFuYWdlcjpjcmVhdGVLZXlNYXBzIC0gZmFpbGVkIGlkVG9rZW4gdmFsaWRhdGlvbiBvbiBrZXk6ICR7a2V5fWApO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgQ3JlZGVudGlhbFR5cGUuQUNDRVNTX1RPS0VOOlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBDcmVkZW50aWFsVHlwZS5BQ0NFU1NfVE9LRU5fV0lUSF9BVVRIX1NDSEVNRTpcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoQ2FjaGVIZWxwZXJzLmlzQWNjZXNzVG9rZW5FbnRpdHkoY3JlZE9iaikpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5sb2dnZXIudHJhY2UoXCJCcm93c2VyQ2FjaGVNYW5hZ2VyOmNyZWF0ZUtleU1hcHMgLSBhY2Nlc3NUb2tlbiBmb3VuZCwgc2F2aW5nIGtleSB0byB0b2tlbiBrZXkgbWFwXCIpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmxvZ2dlci50cmFjZVBpaShgQnJvd3NlckNhY2hlTWFuYWdlcjpjcmVhdGVLZXlNYXBzIC0gYWNjZXNzVG9rZW4gd2l0aCBrZXk6ICR7a2V5fSBmb3VuZCwgc2F2aW5nIGtleSB0byB0b2tlbiBrZXkgbWFwYCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGFjY2Vzc1Rva2VuRW50aXR5ID0gY3JlZE9iajtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgbmV3S2V5ID0gdGhpcy51cGRhdGVDcmVkZW50aWFsQ2FjaGVLZXkoa2V5LCBhY2Nlc3NUb2tlbkVudGl0eSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuYWRkVG9rZW5LZXkobmV3S2V5LCBDcmVkZW50aWFsVHlwZS5BQ0NFU1NfVE9LRU4pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmxvZ2dlci50cmFjZShcIkJyb3dzZXJDYWNoZU1hbmFnZXI6Y3JlYXRlS2V5TWFwcyAtIGtleSBmb3VuZCBtYXRjaGluZyBhY2Nlc3NUb2tlbiBzY2hlbWEgd2l0aCB2YWx1ZSBjb250YWluaW5nIGFjY2Vzc1Rva2VuIGNyZWRlbnRpYWxUeXBlIGZpZWxkIGJ1dCB2YWx1ZSBmYWlsZWQgQWNjZXNzVG9rZW5FbnRpdHkgdmFsaWRhdGlvbiwgc2tpcHBpbmcuXCIpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmxvZ2dlci50cmFjZVBpaShgQnJvd3NlckNhY2hlTWFuYWdlcjpjcmVhdGVLZXlNYXBzIC0gZmFpbGVkIGFjY2Vzc1Rva2VuIHZhbGlkYXRpb24gb24ga2V5OiAke2tleX1gKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIENyZWRlbnRpYWxUeXBlLlJFRlJFU0hfVE9LRU46XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKENhY2hlSGVscGVycy5pc1JlZnJlc2hUb2tlbkVudGl0eShjcmVkT2JqKSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmxvZ2dlci50cmFjZShcIkJyb3dzZXJDYWNoZU1hbmFnZXI6Y3JlYXRlS2V5TWFwcyAtIHJlZnJlc2hUb2tlbiBmb3VuZCwgc2F2aW5nIGtleSB0byB0b2tlbiBrZXkgbWFwXCIpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmxvZ2dlci50cmFjZVBpaShgQnJvd3NlckNhY2hlTWFuYWdlcjpjcmVhdGVLZXlNYXBzIC0gcmVmcmVzaFRva2VuIHdpdGgga2V5OiAke2tleX0gZm91bmQsIHNhdmluZyBrZXkgdG8gdG9rZW4ga2V5IG1hcGApO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCByZWZyZXNoVG9rZW5FbnRpdHkgPSBjcmVkT2JqO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBuZXdLZXkgPSB0aGlzLnVwZGF0ZUNyZWRlbnRpYWxDYWNoZUtleShrZXksIHJlZnJlc2hUb2tlbkVudGl0eSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuYWRkVG9rZW5LZXkobmV3S2V5LCBDcmVkZW50aWFsVHlwZS5SRUZSRVNIX1RPS0VOKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5sb2dnZXIudHJhY2UoXCJCcm93c2VyQ2FjaGVNYW5hZ2VyOmNyZWF0ZUtleU1hcHMgLSBrZXkgZm91bmQgbWF0Y2hpbmcgcmVmcmVzaFRva2VuIHNjaGVtYSB3aXRoIHZhbHVlIGNvbnRhaW5pbmcgcmVmcmVzaFRva2VuIGNyZWRlbnRpYWxUeXBlIGZpZWxkIGJ1dCB2YWx1ZSBmYWlsZWQgUmVmcmVzaFRva2VuRW50aXR5IHZhbGlkYXRpb24sIHNraXBwaW5nLlwiKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5sb2dnZXIudHJhY2VQaWkoYEJyb3dzZXJDYWNoZU1hbmFnZXI6Y3JlYXRlS2V5TWFwcyAtIGZhaWxlZCByZWZyZXNoVG9rZW4gdmFsaWRhdGlvbiBvbiBrZXk6ICR7a2V5fWApO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIElmIGNyZWRlbnRpYWxUeXBlIGlzbid0IG9uZSBvZiBvdXIgcHJlZGVmaW5lZCBvbmVzLCBpdCBtYXkgbm90IGJlIGFuIE1TQUwgY2FjaGUgdmFsdWUuIElnbm9yZS5cclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAodGhpcy5pc0FjY291bnRLZXkoa2V5KSkge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgdmFsdWUgPSB0aGlzLmdldEl0ZW0oa2V5KTtcclxuICAgICAgICAgICAgICAgIGlmICh2YWx1ZSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGFjY291bnRPYmogPSB0aGlzLnZhbGlkYXRlQW5kUGFyc2VKc29uKHZhbHVlKTtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoYWNjb3VudE9iaiAmJlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBBY2NvdW50RW50aXR5LmlzQWNjb3VudEVudGl0eShhY2NvdW50T2JqKSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmxvZ2dlci50cmFjZShcIkJyb3dzZXJDYWNoZU1hbmFnZXI6Y3JlYXRlS2V5TWFwcyAtIGFjY291bnQgZm91bmQsIHNhdmluZyBrZXkgdG8gYWNjb3VudCBrZXkgbWFwXCIpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmxvZ2dlci50cmFjZVBpaShgQnJvd3NlckNhY2hlTWFuYWdlcjpjcmVhdGVLZXlNYXBzIC0gYWNjb3VudCB3aXRoIGtleTogJHtrZXl9IGZvdW5kLCBzYXZpbmcga2V5IHRvIGFjY291bnQga2V5IG1hcGApO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmFkZEFjY291bnRLZXlUb01hcChrZXkpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG4gICAgLyoqXHJcbiAgICAgKiBQYXJzZXMgcGFzc2VkIHZhbHVlIGFzIEpTT04gb2JqZWN0LCBKU09OLnBhcnNlKCkgd2lsbCB0aHJvdyBhbiBlcnJvci5cclxuICAgICAqIEBwYXJhbSBpbnB1dFxyXG4gICAgICovXHJcbiAgICB2YWxpZGF0ZUFuZFBhcnNlSnNvbihqc29uVmFsdWUpIHtcclxuICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICBjb25zdCBwYXJzZWRKc29uID0gSlNPTi5wYXJzZShqc29uVmFsdWUpO1xyXG4gICAgICAgICAgICAvKipcclxuICAgICAgICAgICAgICogVGhlcmUgYXJlIGVkZ2UgY2FzZXMgaW4gd2hpY2ggSlNPTi5wYXJzZSB3aWxsIHN1Y2Nlc3NmdWxseSBwYXJzZSBhIG5vbi12YWxpZCBKU09OIG9iamVjdFxyXG4gICAgICAgICAgICAgKiAoZS5nLiBKU09OLnBhcnNlIHdpbGwgcGFyc2UgYW4gZXNjYXBlZCBzdHJpbmcgaW50byBhbiB1bmVzY2FwZWQgc3RyaW5nKSwgc28gYWRkaW5nIGEgdHlwZSBjaGVja1xyXG4gICAgICAgICAgICAgKiBvZiB0aGUgcGFyc2VkIHZhbHVlIGlzIG5lY2Vzc2FyeSBpbiBvcmRlciB0byBiZSBjZXJ0YWluIHRoYXQgdGhlIHN0cmluZyByZXByZXNlbnRzIGEgdmFsaWQgSlNPTiBvYmplY3QuXHJcbiAgICAgICAgICAgICAqXHJcbiAgICAgICAgICAgICAqL1xyXG4gICAgICAgICAgICByZXR1cm4gcGFyc2VkSnNvbiAmJiB0eXBlb2YgcGFyc2VkSnNvbiA9PT0gXCJvYmplY3RcIlxyXG4gICAgICAgICAgICAgICAgPyBwYXJzZWRKc29uXHJcbiAgICAgICAgICAgICAgICA6IG51bGw7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNhdGNoIChlcnJvcikge1xyXG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICAvKipcclxuICAgICAqIGZldGNoZXMgdGhlIGVudHJ5IGZyb20gdGhlIGJyb3dzZXIgc3RvcmFnZSBiYXNlZCBvZmYgdGhlIGtleVxyXG4gICAgICogQHBhcmFtIGtleVxyXG4gICAgICovXHJcbiAgICBnZXRJdGVtKGtleSkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmJyb3dzZXJTdG9yYWdlLmdldEl0ZW0oa2V5KTtcclxuICAgIH1cclxuICAgIC8qKlxyXG4gICAgICogc2V0cyB0aGUgZW50cnkgaW4gdGhlIGJyb3dzZXIgc3RvcmFnZVxyXG4gICAgICogQHBhcmFtIGtleVxyXG4gICAgICogQHBhcmFtIHZhbHVlXHJcbiAgICAgKi9cclxuICAgIHNldEl0ZW0oa2V5LCB2YWx1ZSkge1xyXG4gICAgICAgIHRoaXMuYnJvd3NlclN0b3JhZ2Uuc2V0SXRlbShrZXksIHZhbHVlKTtcclxuICAgIH1cclxuICAgIC8qKlxyXG4gICAgICogZmV0Y2ggdGhlIGFjY291bnQgZW50aXR5IGZyb20gdGhlIHBsYXRmb3JtIGNhY2hlXHJcbiAgICAgKiBAcGFyYW0gYWNjb3VudEtleVxyXG4gICAgICovXHJcbiAgICBnZXRBY2NvdW50KGFjY291bnRLZXksIGxvZ2dlcikge1xyXG4gICAgICAgIHRoaXMubG9nZ2VyLnRyYWNlKFwiQnJvd3NlckNhY2hlTWFuYWdlci5nZXRBY2NvdW50IGNhbGxlZFwiKTtcclxuICAgICAgICBjb25zdCBhY2NvdW50RW50aXR5ID0gdGhpcy5nZXRDYWNoZWRBY2NvdW50RW50aXR5KGFjY291bnRLZXkpO1xyXG4gICAgICAgIHJldHVybiB0aGlzLnVwZGF0ZU91dGRhdGVkQ2FjaGVkQWNjb3VudChhY2NvdW50S2V5LCBhY2NvdW50RW50aXR5LCBsb2dnZXIpO1xyXG4gICAgfVxyXG4gICAgLyoqXHJcbiAgICAgKiBSZWFkcyBhY2NvdW50IGZyb20gY2FjaGUsIGRlc2VyaWFsaXplcyBpdCBpbnRvIGFuIGFjY291bnQgZW50aXR5IGFuZCByZXR1cm5zIGl0LlxyXG4gICAgICogSWYgYWNjb3VudCBpcyBub3QgZm91bmQgZnJvbSB0aGUga2V5LCByZXR1cm5zIG51bGwgYW5kIHJlbW92ZXMga2V5IGZyb20gbWFwLlxyXG4gICAgICogQHBhcmFtIGFjY291bnRLZXlcclxuICAgICAqIEByZXR1cm5zXHJcbiAgICAgKi9cclxuICAgIGdldENhY2hlZEFjY291bnRFbnRpdHkoYWNjb3VudEtleSkge1xyXG4gICAgICAgIGNvbnN0IHNlcmlhbGl6ZWRBY2NvdW50ID0gdGhpcy5nZXRJdGVtKGFjY291bnRLZXkpO1xyXG4gICAgICAgIGlmICghc2VyaWFsaXplZEFjY291bnQpIHtcclxuICAgICAgICAgICAgdGhpcy5yZW1vdmVBY2NvdW50S2V5RnJvbU1hcChhY2NvdW50S2V5KTtcclxuICAgICAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNvbnN0IHBhcnNlZEFjY291bnQgPSB0aGlzLnZhbGlkYXRlQW5kUGFyc2VKc29uKHNlcmlhbGl6ZWRBY2NvdW50KTtcclxuICAgICAgICBpZiAoIXBhcnNlZEFjY291bnQgfHwgIUFjY291bnRFbnRpdHkuaXNBY2NvdW50RW50aXR5KHBhcnNlZEFjY291bnQpKSB7XHJcbiAgICAgICAgICAgIHRoaXMucmVtb3ZlQWNjb3VudEtleUZyb21NYXAoYWNjb3VudEtleSk7XHJcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gQ2FjaGVNYW5hZ2VyLnRvT2JqZWN0KG5ldyBBY2NvdW50RW50aXR5KCksIHBhcnNlZEFjY291bnQpO1xyXG4gICAgfVxyXG4gICAgLyoqXHJcbiAgICAgKiBzZXQgYWNjb3VudCBlbnRpdHkgaW4gdGhlIHBsYXRmb3JtIGNhY2hlXHJcbiAgICAgKiBAcGFyYW0gYWNjb3VudFxyXG4gICAgICovXHJcbiAgICBzZXRBY2NvdW50KGFjY291bnQpIHtcclxuICAgICAgICB0aGlzLmxvZ2dlci50cmFjZShcIkJyb3dzZXJDYWNoZU1hbmFnZXIuc2V0QWNjb3VudCBjYWxsZWRcIik7XHJcbiAgICAgICAgY29uc3Qga2V5ID0gYWNjb3VudC5nZW5lcmF0ZUFjY291bnRLZXkoKTtcclxuICAgICAgICB0aGlzLnNldEl0ZW0oa2V5LCBKU09OLnN0cmluZ2lmeShhY2NvdW50KSk7XHJcbiAgICAgICAgdGhpcy5hZGRBY2NvdW50S2V5VG9NYXAoa2V5KTtcclxuICAgIH1cclxuICAgIC8qKlxyXG4gICAgICogUmV0dXJucyB0aGUgYXJyYXkgb2YgYWNjb3VudCBrZXlzIGN1cnJlbnRseSBjYWNoZWRcclxuICAgICAqIEByZXR1cm5zXHJcbiAgICAgKi9cclxuICAgIGdldEFjY291bnRLZXlzKCkge1xyXG4gICAgICAgIHRoaXMubG9nZ2VyLnRyYWNlKFwiQnJvd3NlckNhY2hlTWFuYWdlci5nZXRBY2NvdW50S2V5cyBjYWxsZWRcIik7XHJcbiAgICAgICAgY29uc3QgYWNjb3VudEtleXMgPSB0aGlzLmdldEl0ZW0oU3RhdGljQ2FjaGVLZXlzLkFDQ09VTlRfS0VZUyk7XHJcbiAgICAgICAgaWYgKGFjY291bnRLZXlzKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBKU09OLnBhcnNlKGFjY291bnRLZXlzKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5sb2dnZXIudmVyYm9zZShcIkJyb3dzZXJDYWNoZU1hbmFnZXIuZ2V0QWNjb3VudEtleXMgLSBObyBhY2NvdW50IGtleXMgZm91bmRcIik7XHJcbiAgICAgICAgcmV0dXJuIFtdO1xyXG4gICAgfVxyXG4gICAgLyoqXHJcbiAgICAgKiBBZGQgYSBuZXcgYWNjb3VudCB0byB0aGUga2V5IG1hcFxyXG4gICAgICogQHBhcmFtIGtleVxyXG4gICAgICovXHJcbiAgICBhZGRBY2NvdW50S2V5VG9NYXAoa2V5KSB7XHJcbiAgICAgICAgdGhpcy5sb2dnZXIudHJhY2UoXCJCcm93c2VyQ2FjaGVNYW5hZ2VyLmFkZEFjY291bnRLZXlUb01hcCBjYWxsZWRcIik7XHJcbiAgICAgICAgdGhpcy5sb2dnZXIudHJhY2VQaWkoYEJyb3dzZXJDYWNoZU1hbmFnZXIuYWRkQWNjb3VudEtleVRvTWFwIGNhbGxlZCB3aXRoIGtleTogJHtrZXl9YCk7XHJcbiAgICAgICAgY29uc3QgYWNjb3VudEtleXMgPSB0aGlzLmdldEFjY291bnRLZXlzKCk7XHJcbiAgICAgICAgaWYgKGFjY291bnRLZXlzLmluZGV4T2Yoa2V5KSA9PT0gLTEpIHtcclxuICAgICAgICAgICAgLy8gT25seSBhZGQga2V5IGlmIGl0IGRvZXMgbm90IGFscmVhZHkgZXhpc3QgaW4gdGhlIG1hcFxyXG4gICAgICAgICAgICBhY2NvdW50S2V5cy5wdXNoKGtleSk7XHJcbiAgICAgICAgICAgIHRoaXMuc2V0SXRlbShTdGF0aWNDYWNoZUtleXMuQUNDT1VOVF9LRVlTLCBKU09OLnN0cmluZ2lmeShhY2NvdW50S2V5cykpO1xyXG4gICAgICAgICAgICB0aGlzLmxvZ2dlci52ZXJib3NlKFwiQnJvd3NlckNhY2hlTWFuYWdlci5hZGRBY2NvdW50S2V5VG9NYXAgYWNjb3VudCBrZXkgYWRkZWRcIik7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLmxvZ2dlci52ZXJib3NlKFwiQnJvd3NlckNhY2hlTWFuYWdlci5hZGRBY2NvdW50S2V5VG9NYXAgYWNjb3VudCBrZXkgYWxyZWFkeSBleGlzdHMgaW4gbWFwXCIpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIC8qKlxyXG4gICAgICogUmVtb3ZlIGFuIGFjY291bnQgZnJvbSB0aGUga2V5IG1hcFxyXG4gICAgICogQHBhcmFtIGtleVxyXG4gICAgICovXHJcbiAgICByZW1vdmVBY2NvdW50S2V5RnJvbU1hcChrZXkpIHtcclxuICAgICAgICB0aGlzLmxvZ2dlci50cmFjZShcIkJyb3dzZXJDYWNoZU1hbmFnZXIucmVtb3ZlQWNjb3VudEtleUZyb21NYXAgY2FsbGVkXCIpO1xyXG4gICAgICAgIHRoaXMubG9nZ2VyLnRyYWNlUGlpKGBCcm93c2VyQ2FjaGVNYW5hZ2VyLnJlbW92ZUFjY291bnRLZXlGcm9tTWFwIGNhbGxlZCB3aXRoIGtleTogJHtrZXl9YCk7XHJcbiAgICAgICAgY29uc3QgYWNjb3VudEtleXMgPSB0aGlzLmdldEFjY291bnRLZXlzKCk7XHJcbiAgICAgICAgY29uc3QgcmVtb3ZhbEluZGV4ID0gYWNjb3VudEtleXMuaW5kZXhPZihrZXkpO1xyXG4gICAgICAgIGlmIChyZW1vdmFsSW5kZXggPiAtMSkge1xyXG4gICAgICAgICAgICBhY2NvdW50S2V5cy5zcGxpY2UocmVtb3ZhbEluZGV4LCAxKTtcclxuICAgICAgICAgICAgdGhpcy5zZXRJdGVtKFN0YXRpY0NhY2hlS2V5cy5BQ0NPVU5UX0tFWVMsIEpTT04uc3RyaW5naWZ5KGFjY291bnRLZXlzKSk7XHJcbiAgICAgICAgICAgIHRoaXMubG9nZ2VyLnRyYWNlKFwiQnJvd3NlckNhY2hlTWFuYWdlci5yZW1vdmVBY2NvdW50S2V5RnJvbU1hcCBhY2NvdW50IGtleSByZW1vdmVkXCIpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5sb2dnZXIudHJhY2UoXCJCcm93c2VyQ2FjaGVNYW5hZ2VyLnJlbW92ZUFjY291bnRLZXlGcm9tTWFwIGtleSBub3QgZm91bmQgaW4gZXhpc3RpbmcgbWFwXCIpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIC8qKlxyXG4gICAgICogRXh0ZW5kcyBpbmhlcml0ZWQgcmVtb3ZlQWNjb3VudCBmdW5jdGlvbiB0byBpbmNsdWRlIHJlbW92YWwgb2YgdGhlIGFjY291bnQga2V5IGZyb20gdGhlIG1hcFxyXG4gICAgICogQHBhcmFtIGtleVxyXG4gICAgICovXHJcbiAgICBhc3luYyByZW1vdmVBY2NvdW50KGtleSkge1xyXG4gICAgICAgIHZvaWQgc3VwZXIucmVtb3ZlQWNjb3VudChrZXkpO1xyXG4gICAgICAgIHRoaXMucmVtb3ZlQWNjb3VudEtleUZyb21NYXAoa2V5KTtcclxuICAgIH1cclxuICAgIC8qKlxyXG4gICAgICogUmVtb3ZlIGFjY291bnQgZW50aXR5IGZyb20gdGhlIHBsYXRmb3JtIGNhY2hlIGlmIGl0J3Mgb3V0ZGF0ZWRcclxuICAgICAqIEBwYXJhbSBhY2NvdW50S2V5XHJcbiAgICAgKi9cclxuICAgIHJlbW92ZU91dGRhdGVkQWNjb3VudChhY2NvdW50S2V5KSB7XHJcbiAgICAgICAgdGhpcy5yZW1vdmVJdGVtKGFjY291bnRLZXkpO1xyXG4gICAgICAgIHRoaXMucmVtb3ZlQWNjb3VudEtleUZyb21NYXAoYWNjb3VudEtleSk7XHJcbiAgICB9XHJcbiAgICAvKipcclxuICAgICAqIFJlbW92ZXMgZ2l2ZW4gaWRUb2tlbiBmcm9tIHRoZSBjYWNoZSBhbmQgZnJvbSB0aGUga2V5IG1hcFxyXG4gICAgICogQHBhcmFtIGtleVxyXG4gICAgICovXHJcbiAgICByZW1vdmVJZFRva2VuKGtleSkge1xyXG4gICAgICAgIHN1cGVyLnJlbW92ZUlkVG9rZW4oa2V5KTtcclxuICAgICAgICB0aGlzLnJlbW92ZVRva2VuS2V5KGtleSwgQ3JlZGVudGlhbFR5cGUuSURfVE9LRU4pO1xyXG4gICAgfVxyXG4gICAgLyoqXHJcbiAgICAgKiBSZW1vdmVzIGdpdmVuIGFjY2Vzc1Rva2VuIGZyb20gdGhlIGNhY2hlIGFuZCBmcm9tIHRoZSBrZXkgbWFwXHJcbiAgICAgKiBAcGFyYW0ga2V5XHJcbiAgICAgKi9cclxuICAgIGFzeW5jIHJlbW92ZUFjY2Vzc1Rva2VuKGtleSkge1xyXG4gICAgICAgIHZvaWQgc3VwZXIucmVtb3ZlQWNjZXNzVG9rZW4oa2V5KTtcclxuICAgICAgICB0aGlzLnJlbW92ZVRva2VuS2V5KGtleSwgQ3JlZGVudGlhbFR5cGUuQUNDRVNTX1RPS0VOKTtcclxuICAgIH1cclxuICAgIC8qKlxyXG4gICAgICogUmVtb3ZlcyBnaXZlbiByZWZyZXNoVG9rZW4gZnJvbSB0aGUgY2FjaGUgYW5kIGZyb20gdGhlIGtleSBtYXBcclxuICAgICAqIEBwYXJhbSBrZXlcclxuICAgICAqL1xyXG4gICAgcmVtb3ZlUmVmcmVzaFRva2VuKGtleSkge1xyXG4gICAgICAgIHN1cGVyLnJlbW92ZVJlZnJlc2hUb2tlbihrZXkpO1xyXG4gICAgICAgIHRoaXMucmVtb3ZlVG9rZW5LZXkoa2V5LCBDcmVkZW50aWFsVHlwZS5SRUZSRVNIX1RPS0VOKTtcclxuICAgIH1cclxuICAgIC8qKlxyXG4gICAgICogR2V0cyB0aGUga2V5cyBmb3IgdGhlIGNhY2hlZCB0b2tlbnMgYXNzb2NpYXRlZCB3aXRoIHRoaXMgY2xpZW50SWRcclxuICAgICAqIEByZXR1cm5zXHJcbiAgICAgKi9cclxuICAgIGdldFRva2VuS2V5cygpIHtcclxuICAgICAgICB0aGlzLmxvZ2dlci50cmFjZShcIkJyb3dzZXJDYWNoZU1hbmFnZXIuZ2V0VG9rZW5LZXlzIGNhbGxlZFwiKTtcclxuICAgICAgICBjb25zdCBpdGVtID0gdGhpcy5nZXRJdGVtKGAke1N0YXRpY0NhY2hlS2V5cy5UT0tFTl9LRVlTfS4ke3RoaXMuY2xpZW50SWR9YCk7XHJcbiAgICAgICAgaWYgKGl0ZW0pIHtcclxuICAgICAgICAgICAgY29uc3QgdG9rZW5LZXlzID0gdGhpcy52YWxpZGF0ZUFuZFBhcnNlSnNvbihpdGVtKTtcclxuICAgICAgICAgICAgaWYgKHRva2VuS2V5cyAmJlxyXG4gICAgICAgICAgICAgICAgdG9rZW5LZXlzLmhhc093blByb3BlcnR5KFwiaWRUb2tlblwiKSAmJlxyXG4gICAgICAgICAgICAgICAgdG9rZW5LZXlzLmhhc093blByb3BlcnR5KFwiYWNjZXNzVG9rZW5cIikgJiZcclxuICAgICAgICAgICAgICAgIHRva2VuS2V5cy5oYXNPd25Qcm9wZXJ0eShcInJlZnJlc2hUb2tlblwiKSkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRva2VuS2V5cztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHRoaXMubG9nZ2VyLmVycm9yKFwiQnJvd3NlckNhY2hlTWFuYWdlci5nZXRUb2tlbktleXMgLSBUb2tlbiBrZXlzIGZvdW5kIGJ1dCBpbiBhbiB1bmtub3duIGZvcm1hdC4gUmV0dXJuaW5nIGVtcHR5IGtleSBtYXAuXCIpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLmxvZ2dlci52ZXJib3NlKFwiQnJvd3NlckNhY2hlTWFuYWdlci5nZXRUb2tlbktleXMgLSBObyB0b2tlbiBrZXlzIGZvdW5kXCIpO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICBpZFRva2VuOiBbXSxcclxuICAgICAgICAgICAgYWNjZXNzVG9rZW46IFtdLFxyXG4gICAgICAgICAgICByZWZyZXNoVG9rZW46IFtdLFxyXG4gICAgICAgIH07XHJcbiAgICB9XHJcbiAgICAvKipcclxuICAgICAqIEFkZHMgdGhlIGdpdmVuIGtleSB0byB0aGUgdG9rZW4ga2V5IG1hcFxyXG4gICAgICogQHBhcmFtIGtleVxyXG4gICAgICogQHBhcmFtIHR5cGVcclxuICAgICAqL1xyXG4gICAgYWRkVG9rZW5LZXkoa2V5LCB0eXBlKSB7XHJcbiAgICAgICAgdGhpcy5sb2dnZXIudHJhY2UoXCJCcm93c2VyQ2FjaGVNYW5hZ2VyIGFkZFRva2VuS2V5IGNhbGxlZFwiKTtcclxuICAgICAgICBjb25zdCB0b2tlbktleXMgPSB0aGlzLmdldFRva2VuS2V5cygpO1xyXG4gICAgICAgIHN3aXRjaCAodHlwZSkge1xyXG4gICAgICAgICAgICBjYXNlIENyZWRlbnRpYWxUeXBlLklEX1RPS0VOOlxyXG4gICAgICAgICAgICAgICAgaWYgKHRva2VuS2V5cy5pZFRva2VuLmluZGV4T2Yoa2V5KSA9PT0gLTEpIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmxvZ2dlci5pbmZvKFwiQnJvd3NlckNhY2hlTWFuYWdlcjogYWRkVG9rZW5LZXkgLSBpZFRva2VuIGFkZGVkIHRvIG1hcFwiKTtcclxuICAgICAgICAgICAgICAgICAgICB0b2tlbktleXMuaWRUb2tlbi5wdXNoKGtleSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSBDcmVkZW50aWFsVHlwZS5BQ0NFU1NfVE9LRU46XHJcbiAgICAgICAgICAgICAgICBpZiAodG9rZW5LZXlzLmFjY2Vzc1Rva2VuLmluZGV4T2Yoa2V5KSA9PT0gLTEpIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmxvZ2dlci5pbmZvKFwiQnJvd3NlckNhY2hlTWFuYWdlcjogYWRkVG9rZW5LZXkgLSBhY2Nlc3NUb2tlbiBhZGRlZCB0byBtYXBcIik7XHJcbiAgICAgICAgICAgICAgICAgICAgdG9rZW5LZXlzLmFjY2Vzc1Rva2VuLnB1c2goa2V5KTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlIENyZWRlbnRpYWxUeXBlLlJFRlJFU0hfVE9LRU46XHJcbiAgICAgICAgICAgICAgICBpZiAodG9rZW5LZXlzLnJlZnJlc2hUb2tlbi5pbmRleE9mKGtleSkgPT09IC0xKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5sb2dnZXIuaW5mbyhcIkJyb3dzZXJDYWNoZU1hbmFnZXI6IGFkZFRva2VuS2V5IC0gcmVmcmVzaFRva2VuIGFkZGVkIHRvIG1hcFwiKTtcclxuICAgICAgICAgICAgICAgICAgICB0b2tlbktleXMucmVmcmVzaFRva2VuLnB1c2goa2V5KTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBkZWZhdWx0OlxyXG4gICAgICAgICAgICAgICAgdGhpcy5sb2dnZXIuZXJyb3IoYEJyb3dzZXJDYWNoZU1hbmFnZXI6YWRkVG9rZW5LZXkgLSBDcmVkZW50aWFsVHlwZSBwcm92aWRlZCBpbnZhbGlkLiBDcmVkZW50aWFsVHlwZTogJHt0eXBlfWApO1xyXG4gICAgICAgICAgICAgICAgdGhyb3cgY3JlYXRlQ2xpZW50QXV0aEVycm9yKENsaWVudEF1dGhFcnJvckNvZGVzLnVuZXhwZWN0ZWRDcmVkZW50aWFsVHlwZSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuc2V0SXRlbShgJHtTdGF0aWNDYWNoZUtleXMuVE9LRU5fS0VZU30uJHt0aGlzLmNsaWVudElkfWAsIEpTT04uc3RyaW5naWZ5KHRva2VuS2V5cykpO1xyXG4gICAgfVxyXG4gICAgLyoqXHJcbiAgICAgKiBSZW1vdmVzIHRoZSBnaXZlbiBrZXkgZnJvbSB0aGUgdG9rZW4ga2V5IG1hcFxyXG4gICAgICogQHBhcmFtIGtleVxyXG4gICAgICogQHBhcmFtIHR5cGVcclxuICAgICAqL1xyXG4gICAgcmVtb3ZlVG9rZW5LZXkoa2V5LCB0eXBlKSB7XHJcbiAgICAgICAgdGhpcy5sb2dnZXIudHJhY2UoXCJCcm93c2VyQ2FjaGVNYW5hZ2VyIHJlbW92ZVRva2VuS2V5IGNhbGxlZFwiKTtcclxuICAgICAgICBjb25zdCB0b2tlbktleXMgPSB0aGlzLmdldFRva2VuS2V5cygpO1xyXG4gICAgICAgIHN3aXRjaCAodHlwZSkge1xyXG4gICAgICAgICAgICBjYXNlIENyZWRlbnRpYWxUeXBlLklEX1RPS0VOOlxyXG4gICAgICAgICAgICAgICAgdGhpcy5sb2dnZXIuaW5mb1BpaShgQnJvd3NlckNhY2hlTWFuYWdlcjogcmVtb3ZlVG9rZW5LZXkgLSBhdHRlbXB0aW5nIHRvIHJlbW92ZSBpZFRva2VuIHdpdGgga2V5OiAke2tleX0gZnJvbSBtYXBgKTtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGlkUmVtb3ZhbCA9IHRva2VuS2V5cy5pZFRva2VuLmluZGV4T2Yoa2V5KTtcclxuICAgICAgICAgICAgICAgIGlmIChpZFJlbW92YWwgPiAtMSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMubG9nZ2VyLmluZm8oXCJCcm93c2VyQ2FjaGVNYW5hZ2VyOiByZW1vdmVUb2tlbktleSAtIGlkVG9rZW4gcmVtb3ZlZCBmcm9tIG1hcFwiKTtcclxuICAgICAgICAgICAgICAgICAgICB0b2tlbktleXMuaWRUb2tlbi5zcGxpY2UoaWRSZW1vdmFsLCAxKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMubG9nZ2VyLmluZm8oXCJCcm93c2VyQ2FjaGVNYW5hZ2VyOiByZW1vdmVUb2tlbktleSAtIGlkVG9rZW4gZG9lcyBub3QgZXhpc3QgaW4gbWFwLiBFaXRoZXIgaXQgd2FzIHByZXZpb3VzbHkgcmVtb3ZlZCBvciBpdCB3YXMgbmV2ZXIgYWRkZWQuXCIpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgQ3JlZGVudGlhbFR5cGUuQUNDRVNTX1RPS0VOOlxyXG4gICAgICAgICAgICAgICAgdGhpcy5sb2dnZXIuaW5mb1BpaShgQnJvd3NlckNhY2hlTWFuYWdlcjogcmVtb3ZlVG9rZW5LZXkgLSBhdHRlbXB0aW5nIHRvIHJlbW92ZSBhY2Nlc3NUb2tlbiB3aXRoIGtleTogJHtrZXl9IGZyb20gbWFwYCk7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBhY2Nlc3NSZW1vdmFsID0gdG9rZW5LZXlzLmFjY2Vzc1Rva2VuLmluZGV4T2Yoa2V5KTtcclxuICAgICAgICAgICAgICAgIGlmIChhY2Nlc3NSZW1vdmFsID4gLTEpIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmxvZ2dlci5pbmZvKFwiQnJvd3NlckNhY2hlTWFuYWdlcjogcmVtb3ZlVG9rZW5LZXkgLSBhY2Nlc3NUb2tlbiByZW1vdmVkIGZyb20gbWFwXCIpO1xyXG4gICAgICAgICAgICAgICAgICAgIHRva2VuS2V5cy5hY2Nlc3NUb2tlbi5zcGxpY2UoYWNjZXNzUmVtb3ZhbCwgMSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmxvZ2dlci5pbmZvKFwiQnJvd3NlckNhY2hlTWFuYWdlcjogcmVtb3ZlVG9rZW5LZXkgLSBhY2Nlc3NUb2tlbiBkb2VzIG5vdCBleGlzdCBpbiBtYXAuIEVpdGhlciBpdCB3YXMgcHJldmlvdXNseSByZW1vdmVkIG9yIGl0IHdhcyBuZXZlciBhZGRlZC5cIik7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSBDcmVkZW50aWFsVHlwZS5SRUZSRVNIX1RPS0VOOlxyXG4gICAgICAgICAgICAgICAgdGhpcy5sb2dnZXIuaW5mb1BpaShgQnJvd3NlckNhY2hlTWFuYWdlcjogcmVtb3ZlVG9rZW5LZXkgLSBhdHRlbXB0aW5nIHRvIHJlbW92ZSByZWZyZXNoVG9rZW4gd2l0aCBrZXk6ICR7a2V5fSBmcm9tIG1hcGApO1xyXG4gICAgICAgICAgICAgICAgY29uc3QgcmVmcmVzaFJlbW92YWwgPSB0b2tlbktleXMucmVmcmVzaFRva2VuLmluZGV4T2Yoa2V5KTtcclxuICAgICAgICAgICAgICAgIGlmIChyZWZyZXNoUmVtb3ZhbCA+IC0xKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5sb2dnZXIuaW5mbyhcIkJyb3dzZXJDYWNoZU1hbmFnZXI6IHJlbW92ZVRva2VuS2V5IC0gcmVmcmVzaFRva2VuIHJlbW92ZWQgZnJvbSBtYXBcIik7XHJcbiAgICAgICAgICAgICAgICAgICAgdG9rZW5LZXlzLnJlZnJlc2hUb2tlbi5zcGxpY2UocmVmcmVzaFJlbW92YWwsIDEpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5sb2dnZXIuaW5mbyhcIkJyb3dzZXJDYWNoZU1hbmFnZXI6IHJlbW92ZVRva2VuS2V5IC0gcmVmcmVzaFRva2VuIGRvZXMgbm90IGV4aXN0IGluIG1hcC4gRWl0aGVyIGl0IHdhcyBwcmV2aW91c2x5IHJlbW92ZWQgb3IgaXQgd2FzIG5ldmVyIGFkZGVkLlwiKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBkZWZhdWx0OlxyXG4gICAgICAgICAgICAgICAgdGhpcy5sb2dnZXIuZXJyb3IoYEJyb3dzZXJDYWNoZU1hbmFnZXI6cmVtb3ZlVG9rZW5LZXkgLSBDcmVkZW50aWFsVHlwZSBwcm92aWRlZCBpbnZhbGlkLiBDcmVkZW50aWFsVHlwZTogJHt0eXBlfWApO1xyXG4gICAgICAgICAgICAgICAgdGhyb3cgY3JlYXRlQ2xpZW50QXV0aEVycm9yKENsaWVudEF1dGhFcnJvckNvZGVzLnVuZXhwZWN0ZWRDcmVkZW50aWFsVHlwZSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuc2V0SXRlbShgJHtTdGF0aWNDYWNoZUtleXMuVE9LRU5fS0VZU30uJHt0aGlzLmNsaWVudElkfWAsIEpTT04uc3RyaW5naWZ5KHRva2VuS2V5cykpO1xyXG4gICAgfVxyXG4gICAgLyoqXHJcbiAgICAgKiBnZW5lcmF0ZXMgaWRUb2tlbiBlbnRpdHkgZnJvbSBhIHN0cmluZ1xyXG4gICAgICogQHBhcmFtIGlkVG9rZW5LZXlcclxuICAgICAqL1xyXG4gICAgZ2V0SWRUb2tlbkNyZWRlbnRpYWwoaWRUb2tlbktleSkge1xyXG4gICAgICAgIGNvbnN0IHZhbHVlID0gdGhpcy5nZXRJdGVtKGlkVG9rZW5LZXkpO1xyXG4gICAgICAgIGlmICghdmFsdWUpIHtcclxuICAgICAgICAgICAgdGhpcy5sb2dnZXIudHJhY2UoXCJCcm93c2VyQ2FjaGVNYW5hZ2VyLmdldElkVG9rZW5DcmVkZW50aWFsOiBjYWxsZWQsIG5vIGNhY2hlIGhpdFwiKTtcclxuICAgICAgICAgICAgdGhpcy5yZW1vdmVUb2tlbktleShpZFRva2VuS2V5LCBDcmVkZW50aWFsVHlwZS5JRF9UT0tFTik7XHJcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjb25zdCBwYXJzZWRJZFRva2VuID0gdGhpcy52YWxpZGF0ZUFuZFBhcnNlSnNvbih2YWx1ZSk7XHJcbiAgICAgICAgaWYgKCFwYXJzZWRJZFRva2VuIHx8ICFDYWNoZUhlbHBlcnMuaXNJZFRva2VuRW50aXR5KHBhcnNlZElkVG9rZW4pKSB7XHJcbiAgICAgICAgICAgIHRoaXMubG9nZ2VyLnRyYWNlKFwiQnJvd3NlckNhY2hlTWFuYWdlci5nZXRJZFRva2VuQ3JlZGVudGlhbDogY2FsbGVkLCBubyBjYWNoZSBoaXRcIik7XHJcbiAgICAgICAgICAgIHRoaXMucmVtb3ZlVG9rZW5LZXkoaWRUb2tlbktleSwgQ3JlZGVudGlhbFR5cGUuSURfVE9LRU4pO1xyXG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5sb2dnZXIudHJhY2UoXCJCcm93c2VyQ2FjaGVNYW5hZ2VyLmdldElkVG9rZW5DcmVkZW50aWFsOiBjYWNoZSBoaXRcIik7XHJcbiAgICAgICAgcmV0dXJuIHBhcnNlZElkVG9rZW47XHJcbiAgICB9XHJcbiAgICAvKipcclxuICAgICAqIHNldCBJZFRva2VuIGNyZWRlbnRpYWwgdG8gdGhlIHBsYXRmb3JtIGNhY2hlXHJcbiAgICAgKiBAcGFyYW0gaWRUb2tlblxyXG4gICAgICovXHJcbiAgICBzZXRJZFRva2VuQ3JlZGVudGlhbChpZFRva2VuKSB7XHJcbiAgICAgICAgdGhpcy5sb2dnZXIudHJhY2UoXCJCcm93c2VyQ2FjaGVNYW5hZ2VyLnNldElkVG9rZW5DcmVkZW50aWFsIGNhbGxlZFwiKTtcclxuICAgICAgICBjb25zdCBpZFRva2VuS2V5ID0gQ2FjaGVIZWxwZXJzLmdlbmVyYXRlQ3JlZGVudGlhbEtleShpZFRva2VuKTtcclxuICAgICAgICB0aGlzLnNldEl0ZW0oaWRUb2tlbktleSwgSlNPTi5zdHJpbmdpZnkoaWRUb2tlbikpO1xyXG4gICAgICAgIHRoaXMuYWRkVG9rZW5LZXkoaWRUb2tlbktleSwgQ3JlZGVudGlhbFR5cGUuSURfVE9LRU4pO1xyXG4gICAgfVxyXG4gICAgLyoqXHJcbiAgICAgKiBnZW5lcmF0ZXMgYWNjZXNzVG9rZW4gZW50aXR5IGZyb20gYSBzdHJpbmdcclxuICAgICAqIEBwYXJhbSBrZXlcclxuICAgICAqL1xyXG4gICAgZ2V0QWNjZXNzVG9rZW5DcmVkZW50aWFsKGFjY2Vzc1Rva2VuS2V5KSB7XHJcbiAgICAgICAgY29uc3QgdmFsdWUgPSB0aGlzLmdldEl0ZW0oYWNjZXNzVG9rZW5LZXkpO1xyXG4gICAgICAgIGlmICghdmFsdWUpIHtcclxuICAgICAgICAgICAgdGhpcy5sb2dnZXIudHJhY2UoXCJCcm93c2VyQ2FjaGVNYW5hZ2VyLmdldEFjY2Vzc1Rva2VuQ3JlZGVudGlhbDogY2FsbGVkLCBubyBjYWNoZSBoaXRcIik7XHJcbiAgICAgICAgICAgIHRoaXMucmVtb3ZlVG9rZW5LZXkoYWNjZXNzVG9rZW5LZXksIENyZWRlbnRpYWxUeXBlLkFDQ0VTU19UT0tFTik7XHJcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjb25zdCBwYXJzZWRBY2Nlc3NUb2tlbiA9IHRoaXMudmFsaWRhdGVBbmRQYXJzZUpzb24odmFsdWUpO1xyXG4gICAgICAgIGlmICghcGFyc2VkQWNjZXNzVG9rZW4gfHxcclxuICAgICAgICAgICAgIUNhY2hlSGVscGVycy5pc0FjY2Vzc1Rva2VuRW50aXR5KHBhcnNlZEFjY2Vzc1Rva2VuKSkge1xyXG4gICAgICAgICAgICB0aGlzLmxvZ2dlci50cmFjZShcIkJyb3dzZXJDYWNoZU1hbmFnZXIuZ2V0QWNjZXNzVG9rZW5DcmVkZW50aWFsOiBjYWxsZWQsIG5vIGNhY2hlIGhpdFwiKTtcclxuICAgICAgICAgICAgdGhpcy5yZW1vdmVUb2tlbktleShhY2Nlc3NUb2tlbktleSwgQ3JlZGVudGlhbFR5cGUuQUNDRVNTX1RPS0VOKTtcclxuICAgICAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMubG9nZ2VyLnRyYWNlKFwiQnJvd3NlckNhY2hlTWFuYWdlci5nZXRBY2Nlc3NUb2tlbkNyZWRlbnRpYWw6IGNhY2hlIGhpdFwiKTtcclxuICAgICAgICByZXR1cm4gcGFyc2VkQWNjZXNzVG9rZW47XHJcbiAgICB9XHJcbiAgICAvKipcclxuICAgICAqIHNldCBhY2Nlc3NUb2tlbiBjcmVkZW50aWFsIHRvIHRoZSBwbGF0Zm9ybSBjYWNoZVxyXG4gICAgICogQHBhcmFtIGFjY2Vzc1Rva2VuXHJcbiAgICAgKi9cclxuICAgIHNldEFjY2Vzc1Rva2VuQ3JlZGVudGlhbChhY2Nlc3NUb2tlbikge1xyXG4gICAgICAgIHRoaXMubG9nZ2VyLnRyYWNlKFwiQnJvd3NlckNhY2hlTWFuYWdlci5zZXRBY2Nlc3NUb2tlbkNyZWRlbnRpYWwgY2FsbGVkXCIpO1xyXG4gICAgICAgIGNvbnN0IGFjY2Vzc1Rva2VuS2V5ID0gQ2FjaGVIZWxwZXJzLmdlbmVyYXRlQ3JlZGVudGlhbEtleShhY2Nlc3NUb2tlbik7XHJcbiAgICAgICAgdGhpcy5zZXRJdGVtKGFjY2Vzc1Rva2VuS2V5LCBKU09OLnN0cmluZ2lmeShhY2Nlc3NUb2tlbikpO1xyXG4gICAgICAgIHRoaXMuYWRkVG9rZW5LZXkoYWNjZXNzVG9rZW5LZXksIENyZWRlbnRpYWxUeXBlLkFDQ0VTU19UT0tFTik7XHJcbiAgICB9XHJcbiAgICAvKipcclxuICAgICAqIGdlbmVyYXRlcyByZWZyZXNoVG9rZW4gZW50aXR5IGZyb20gYSBzdHJpbmdcclxuICAgICAqIEBwYXJhbSByZWZyZXNoVG9rZW5LZXlcclxuICAgICAqL1xyXG4gICAgZ2V0UmVmcmVzaFRva2VuQ3JlZGVudGlhbChyZWZyZXNoVG9rZW5LZXkpIHtcclxuICAgICAgICBjb25zdCB2YWx1ZSA9IHRoaXMuZ2V0SXRlbShyZWZyZXNoVG9rZW5LZXkpO1xyXG4gICAgICAgIGlmICghdmFsdWUpIHtcclxuICAgICAgICAgICAgdGhpcy5sb2dnZXIudHJhY2UoXCJCcm93c2VyQ2FjaGVNYW5hZ2VyLmdldFJlZnJlc2hUb2tlbkNyZWRlbnRpYWw6IGNhbGxlZCwgbm8gY2FjaGUgaGl0XCIpO1xyXG4gICAgICAgICAgICB0aGlzLnJlbW92ZVRva2VuS2V5KHJlZnJlc2hUb2tlbktleSwgQ3JlZGVudGlhbFR5cGUuUkVGUkVTSF9UT0tFTik7XHJcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjb25zdCBwYXJzZWRSZWZyZXNoVG9rZW4gPSB0aGlzLnZhbGlkYXRlQW5kUGFyc2VKc29uKHZhbHVlKTtcclxuICAgICAgICBpZiAoIXBhcnNlZFJlZnJlc2hUb2tlbiB8fFxyXG4gICAgICAgICAgICAhQ2FjaGVIZWxwZXJzLmlzUmVmcmVzaFRva2VuRW50aXR5KHBhcnNlZFJlZnJlc2hUb2tlbikpIHtcclxuICAgICAgICAgICAgdGhpcy5sb2dnZXIudHJhY2UoXCJCcm93c2VyQ2FjaGVNYW5hZ2VyLmdldFJlZnJlc2hUb2tlbkNyZWRlbnRpYWw6IGNhbGxlZCwgbm8gY2FjaGUgaGl0XCIpO1xyXG4gICAgICAgICAgICB0aGlzLnJlbW92ZVRva2VuS2V5KHJlZnJlc2hUb2tlbktleSwgQ3JlZGVudGlhbFR5cGUuUkVGUkVTSF9UT0tFTik7XHJcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLmxvZ2dlci50cmFjZShcIkJyb3dzZXJDYWNoZU1hbmFnZXIuZ2V0UmVmcmVzaFRva2VuQ3JlZGVudGlhbDogY2FjaGUgaGl0XCIpO1xyXG4gICAgICAgIHJldHVybiBwYXJzZWRSZWZyZXNoVG9rZW47XHJcbiAgICB9XHJcbiAgICAvKipcclxuICAgICAqIHNldCByZWZyZXNoVG9rZW4gY3JlZGVudGlhbCB0byB0aGUgcGxhdGZvcm0gY2FjaGVcclxuICAgICAqIEBwYXJhbSByZWZyZXNoVG9rZW5cclxuICAgICAqL1xyXG4gICAgc2V0UmVmcmVzaFRva2VuQ3JlZGVudGlhbChyZWZyZXNoVG9rZW4pIHtcclxuICAgICAgICB0aGlzLmxvZ2dlci50cmFjZShcIkJyb3dzZXJDYWNoZU1hbmFnZXIuc2V0UmVmcmVzaFRva2VuQ3JlZGVudGlhbCBjYWxsZWRcIik7XHJcbiAgICAgICAgY29uc3QgcmVmcmVzaFRva2VuS2V5ID0gQ2FjaGVIZWxwZXJzLmdlbmVyYXRlQ3JlZGVudGlhbEtleShyZWZyZXNoVG9rZW4pO1xyXG4gICAgICAgIHRoaXMuc2V0SXRlbShyZWZyZXNoVG9rZW5LZXksIEpTT04uc3RyaW5naWZ5KHJlZnJlc2hUb2tlbikpO1xyXG4gICAgICAgIHRoaXMuYWRkVG9rZW5LZXkocmVmcmVzaFRva2VuS2V5LCBDcmVkZW50aWFsVHlwZS5SRUZSRVNIX1RPS0VOKTtcclxuICAgIH1cclxuICAgIC8qKlxyXG4gICAgICogZmV0Y2ggYXBwTWV0YWRhdGEgZW50aXR5IGZyb20gdGhlIHBsYXRmb3JtIGNhY2hlXHJcbiAgICAgKiBAcGFyYW0gYXBwTWV0YWRhdGFLZXlcclxuICAgICAqL1xyXG4gICAgZ2V0QXBwTWV0YWRhdGEoYXBwTWV0YWRhdGFLZXkpIHtcclxuICAgICAgICBjb25zdCB2YWx1ZSA9IHRoaXMuZ2V0SXRlbShhcHBNZXRhZGF0YUtleSk7XHJcbiAgICAgICAgaWYgKCF2YWx1ZSkge1xyXG4gICAgICAgICAgICB0aGlzLmxvZ2dlci50cmFjZShcIkJyb3dzZXJDYWNoZU1hbmFnZXIuZ2V0QXBwTWV0YWRhdGE6IGNhbGxlZCwgbm8gY2FjaGUgaGl0XCIpO1xyXG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgICAgICB9XHJcbiAgICAgICAgY29uc3QgcGFyc2VkTWV0YWRhdGEgPSB0aGlzLnZhbGlkYXRlQW5kUGFyc2VKc29uKHZhbHVlKTtcclxuICAgICAgICBpZiAoIXBhcnNlZE1ldGFkYXRhIHx8XHJcbiAgICAgICAgICAgICFDYWNoZUhlbHBlcnMuaXNBcHBNZXRhZGF0YUVudGl0eShhcHBNZXRhZGF0YUtleSwgcGFyc2VkTWV0YWRhdGEpKSB7XHJcbiAgICAgICAgICAgIHRoaXMubG9nZ2VyLnRyYWNlKFwiQnJvd3NlckNhY2hlTWFuYWdlci5nZXRBcHBNZXRhZGF0YTogY2FsbGVkLCBubyBjYWNoZSBoaXRcIik7XHJcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLmxvZ2dlci50cmFjZShcIkJyb3dzZXJDYWNoZU1hbmFnZXIuZ2V0QXBwTWV0YWRhdGE6IGNhY2hlIGhpdFwiKTtcclxuICAgICAgICByZXR1cm4gcGFyc2VkTWV0YWRhdGE7XHJcbiAgICB9XHJcbiAgICAvKipcclxuICAgICAqIHNldCBhcHBNZXRhZGF0YSBlbnRpdHkgdG8gdGhlIHBsYXRmb3JtIGNhY2hlXHJcbiAgICAgKiBAcGFyYW0gYXBwTWV0YWRhdGFcclxuICAgICAqL1xyXG4gICAgc2V0QXBwTWV0YWRhdGEoYXBwTWV0YWRhdGEpIHtcclxuICAgICAgICB0aGlzLmxvZ2dlci50cmFjZShcIkJyb3dzZXJDYWNoZU1hbmFnZXIuc2V0QXBwTWV0YWRhdGEgY2FsbGVkXCIpO1xyXG4gICAgICAgIGNvbnN0IGFwcE1ldGFkYXRhS2V5ID0gQ2FjaGVIZWxwZXJzLmdlbmVyYXRlQXBwTWV0YWRhdGFLZXkoYXBwTWV0YWRhdGEpO1xyXG4gICAgICAgIHRoaXMuc2V0SXRlbShhcHBNZXRhZGF0YUtleSwgSlNPTi5zdHJpbmdpZnkoYXBwTWV0YWRhdGEpKTtcclxuICAgIH1cclxuICAgIC8qKlxyXG4gICAgICogZmV0Y2ggc2VydmVyIHRlbGVtZXRyeSBlbnRpdHkgZnJvbSB0aGUgcGxhdGZvcm0gY2FjaGVcclxuICAgICAqIEBwYXJhbSBzZXJ2ZXJUZWxlbWV0cnlLZXlcclxuICAgICAqL1xyXG4gICAgZ2V0U2VydmVyVGVsZW1ldHJ5KHNlcnZlclRlbGVtZXRyeUtleSkge1xyXG4gICAgICAgIGNvbnN0IHZhbHVlID0gdGhpcy5nZXRJdGVtKHNlcnZlclRlbGVtZXRyeUtleSk7XHJcbiAgICAgICAgaWYgKCF2YWx1ZSkge1xyXG4gICAgICAgICAgICB0aGlzLmxvZ2dlci50cmFjZShcIkJyb3dzZXJDYWNoZU1hbmFnZXIuZ2V0U2VydmVyVGVsZW1ldHJ5OiBjYWxsZWQsIG5vIGNhY2hlIGhpdFwiKTtcclxuICAgICAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNvbnN0IHBhcnNlZEVudGl0eSA9IHRoaXMudmFsaWRhdGVBbmRQYXJzZUpzb24odmFsdWUpO1xyXG4gICAgICAgIGlmICghcGFyc2VkRW50aXR5IHx8XHJcbiAgICAgICAgICAgICFDYWNoZUhlbHBlcnMuaXNTZXJ2ZXJUZWxlbWV0cnlFbnRpdHkoc2VydmVyVGVsZW1ldHJ5S2V5LCBwYXJzZWRFbnRpdHkpKSB7XHJcbiAgICAgICAgICAgIHRoaXMubG9nZ2VyLnRyYWNlKFwiQnJvd3NlckNhY2hlTWFuYWdlci5nZXRTZXJ2ZXJUZWxlbWV0cnk6IGNhbGxlZCwgbm8gY2FjaGUgaGl0XCIpO1xyXG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5sb2dnZXIudHJhY2UoXCJCcm93c2VyQ2FjaGVNYW5hZ2VyLmdldFNlcnZlclRlbGVtZXRyeTogY2FjaGUgaGl0XCIpO1xyXG4gICAgICAgIHJldHVybiBwYXJzZWRFbnRpdHk7XHJcbiAgICB9XHJcbiAgICAvKipcclxuICAgICAqIHNldCBzZXJ2ZXIgdGVsZW1ldHJ5IGVudGl0eSB0byB0aGUgcGxhdGZvcm0gY2FjaGVcclxuICAgICAqIEBwYXJhbSBzZXJ2ZXJUZWxlbWV0cnlLZXlcclxuICAgICAqIEBwYXJhbSBzZXJ2ZXJUZWxlbWV0cnlcclxuICAgICAqL1xyXG4gICAgc2V0U2VydmVyVGVsZW1ldHJ5KHNlcnZlclRlbGVtZXRyeUtleSwgc2VydmVyVGVsZW1ldHJ5KSB7XHJcbiAgICAgICAgdGhpcy5sb2dnZXIudHJhY2UoXCJCcm93c2VyQ2FjaGVNYW5hZ2VyLnNldFNlcnZlclRlbGVtZXRyeSBjYWxsZWRcIik7XHJcbiAgICAgICAgdGhpcy5zZXRJdGVtKHNlcnZlclRlbGVtZXRyeUtleSwgSlNPTi5zdHJpbmdpZnkoc2VydmVyVGVsZW1ldHJ5KSk7XHJcbiAgICB9XHJcbiAgICAvKipcclxuICAgICAqXHJcbiAgICAgKi9cclxuICAgIGdldEF1dGhvcml0eU1ldGFkYXRhKGtleSkge1xyXG4gICAgICAgIGNvbnN0IHZhbHVlID0gdGhpcy5pbnRlcm5hbFN0b3JhZ2UuZ2V0SXRlbShrZXkpO1xyXG4gICAgICAgIGlmICghdmFsdWUpIHtcclxuICAgICAgICAgICAgdGhpcy5sb2dnZXIudHJhY2UoXCJCcm93c2VyQ2FjaGVNYW5hZ2VyLmdldEF1dGhvcml0eU1ldGFkYXRhOiBjYWxsZWQsIG5vIGNhY2hlIGhpdFwiKTtcclxuICAgICAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNvbnN0IHBhcnNlZE1ldGFkYXRhID0gdGhpcy52YWxpZGF0ZUFuZFBhcnNlSnNvbih2YWx1ZSk7XHJcbiAgICAgICAgaWYgKHBhcnNlZE1ldGFkYXRhICYmXHJcbiAgICAgICAgICAgIENhY2hlSGVscGVycy5pc0F1dGhvcml0eU1ldGFkYXRhRW50aXR5KGtleSwgcGFyc2VkTWV0YWRhdGEpKSB7XHJcbiAgICAgICAgICAgIHRoaXMubG9nZ2VyLnRyYWNlKFwiQnJvd3NlckNhY2hlTWFuYWdlci5nZXRBdXRob3JpdHlNZXRhZGF0YTogY2FjaGUgaGl0XCIpO1xyXG4gICAgICAgICAgICByZXR1cm4gcGFyc2VkTWV0YWRhdGE7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgfVxyXG4gICAgLyoqXHJcbiAgICAgKlxyXG4gICAgICovXHJcbiAgICBnZXRBdXRob3JpdHlNZXRhZGF0YUtleXMoKSB7XHJcbiAgICAgICAgY29uc3QgYWxsS2V5cyA9IHRoaXMuaW50ZXJuYWxTdG9yYWdlLmdldEtleXMoKTtcclxuICAgICAgICByZXR1cm4gYWxsS2V5cy5maWx0ZXIoKGtleSkgPT4ge1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5pc0F1dGhvcml0eU1ldGFkYXRhKGtleSk7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcbiAgICAvKipcclxuICAgICAqIFNldHMgd3JhcHBlciBtZXRhZGF0YSBpbiBtZW1vcnlcclxuICAgICAqIEBwYXJhbSB3cmFwcGVyU0tVXHJcbiAgICAgKiBAcGFyYW0gd3JhcHBlclZlcnNpb25cclxuICAgICAqL1xyXG4gICAgc2V0V3JhcHBlck1ldGFkYXRhKHdyYXBwZXJTS1UsIHdyYXBwZXJWZXJzaW9uKSB7XHJcbiAgICAgICAgdGhpcy5pbnRlcm5hbFN0b3JhZ2Uuc2V0SXRlbShJbk1lbW9yeUNhY2hlS2V5cy5XUkFQUEVSX1NLVSwgd3JhcHBlclNLVSk7XHJcbiAgICAgICAgdGhpcy5pbnRlcm5hbFN0b3JhZ2Uuc2V0SXRlbShJbk1lbW9yeUNhY2hlS2V5cy5XUkFQUEVSX1ZFUiwgd3JhcHBlclZlcnNpb24pO1xyXG4gICAgfVxyXG4gICAgLyoqXHJcbiAgICAgKiBSZXR1cm5zIHdyYXBwZXIgbWV0YWRhdGEgZnJvbSBpbi1tZW1vcnkgc3RvcmFnZVxyXG4gICAgICovXHJcbiAgICBnZXRXcmFwcGVyTWV0YWRhdGEoKSB7XHJcbiAgICAgICAgY29uc3Qgc2t1ID0gdGhpcy5pbnRlcm5hbFN0b3JhZ2UuZ2V0SXRlbShJbk1lbW9yeUNhY2hlS2V5cy5XUkFQUEVSX1NLVSkgfHxcclxuICAgICAgICAgICAgQ29uc3RhbnRzLkVNUFRZX1NUUklORztcclxuICAgICAgICBjb25zdCB2ZXJzaW9uID0gdGhpcy5pbnRlcm5hbFN0b3JhZ2UuZ2V0SXRlbShJbk1lbW9yeUNhY2hlS2V5cy5XUkFQUEVSX1ZFUikgfHxcclxuICAgICAgICAgICAgQ29uc3RhbnRzLkVNUFRZX1NUUklORztcclxuICAgICAgICByZXR1cm4gW3NrdSwgdmVyc2lvbl07XHJcbiAgICB9XHJcbiAgICAvKipcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0gZW50aXR5XHJcbiAgICAgKi9cclxuICAgIHNldEF1dGhvcml0eU1ldGFkYXRhKGtleSwgZW50aXR5KSB7XHJcbiAgICAgICAgdGhpcy5sb2dnZXIudHJhY2UoXCJCcm93c2VyQ2FjaGVNYW5hZ2VyLnNldEF1dGhvcml0eU1ldGFkYXRhIGNhbGxlZFwiKTtcclxuICAgICAgICB0aGlzLmludGVybmFsU3RvcmFnZS5zZXRJdGVtKGtleSwgSlNPTi5zdHJpbmdpZnkoZW50aXR5KSk7XHJcbiAgICB9XHJcbiAgICAvKipcclxuICAgICAqIEdldHMgdGhlIGFjdGl2ZSBhY2NvdW50XHJcbiAgICAgKi9cclxuICAgIGdldEFjdGl2ZUFjY291bnQoKSB7XHJcbiAgICAgICAgY29uc3QgYWN0aXZlQWNjb3VudEtleUZpbHRlcnMgPSB0aGlzLmdlbmVyYXRlQ2FjaGVLZXkoUGVyc2lzdGVudENhY2hlS2V5cy5BQ1RJVkVfQUNDT1VOVF9GSUxURVJTKTtcclxuICAgICAgICBjb25zdCBhY3RpdmVBY2NvdW50VmFsdWVGaWx0ZXJzID0gdGhpcy5nZXRJdGVtKGFjdGl2ZUFjY291bnRLZXlGaWx0ZXJzKTtcclxuICAgICAgICBpZiAoIWFjdGl2ZUFjY291bnRWYWx1ZUZpbHRlcnMpIHtcclxuICAgICAgICAgICAgLy8gaWYgbmV3IGFjdGl2ZSBhY2NvdW50IGNhY2hlIHR5cGUgaXNuJ3QgZm91bmQsIGl0J3MgYW4gb2xkIHZlcnNpb24sIHNvIGxvb2sgZm9yIHRoYXQgaW5zdGVhZFxyXG4gICAgICAgICAgICB0aGlzLmxvZ2dlci50cmFjZShcIkJyb3dzZXJDYWNoZU1hbmFnZXIuZ2V0QWN0aXZlQWNjb3VudDogTm8gYWN0aXZlIGFjY291bnQgZmlsdGVycyBjYWNoZSBzY2hlbWEgZm91bmQsIGxvb2tpbmcgZm9yIGxlZ2FjeSBzY2hlbWFcIik7XHJcbiAgICAgICAgICAgIGNvbnN0IGFjdGl2ZUFjY291bnRLZXlMb2NhbCA9IHRoaXMuZ2VuZXJhdGVDYWNoZUtleShQZXJzaXN0ZW50Q2FjaGVLZXlzLkFDVElWRV9BQ0NPVU5UKTtcclxuICAgICAgICAgICAgY29uc3QgYWN0aXZlQWNjb3VudFZhbHVlTG9jYWwgPSB0aGlzLmdldEl0ZW0oYWN0aXZlQWNjb3VudEtleUxvY2FsKTtcclxuICAgICAgICAgICAgaWYgKCFhY3RpdmVBY2NvdW50VmFsdWVMb2NhbCkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5sb2dnZXIudHJhY2UoXCJCcm93c2VyQ2FjaGVNYW5hZ2VyLmdldEFjdGl2ZUFjY291bnQ6IE5vIGFjdGl2ZSBhY2NvdW50IGZvdW5kXCIpO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgY29uc3QgYWN0aXZlQWNjb3VudCA9IHRoaXMuZ2V0QWNjb3VudEluZm9GaWx0ZXJlZEJ5KHtcclxuICAgICAgICAgICAgICAgIGxvY2FsQWNjb3VudElkOiBhY3RpdmVBY2NvdW50VmFsdWVMb2NhbCxcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIGlmIChhY3RpdmVBY2NvdW50KSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmxvZ2dlci50cmFjZShcIkJyb3dzZXJDYWNoZU1hbmFnZXIuZ2V0QWN0aXZlQWNjb3VudDogTGVnYWN5IGFjdGl2ZSBhY2NvdW50IGNhY2hlIHNjaGVtYSBmb3VuZFwiKTtcclxuICAgICAgICAgICAgICAgIHRoaXMubG9nZ2VyLnRyYWNlKFwiQnJvd3NlckNhY2hlTWFuYWdlci5nZXRBY3RpdmVBY2NvdW50OiBBZGRpbmcgYWN0aXZlIGFjY291bnQgZmlsdGVycyBjYWNoZSBzY2hlbWFcIik7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNldEFjdGl2ZUFjY291bnQoYWN0aXZlQWNjb3VudCk7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gYWN0aXZlQWNjb3VudDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgICAgICB9XHJcbiAgICAgICAgY29uc3QgYWN0aXZlQWNjb3VudFZhbHVlT2JqID0gdGhpcy52YWxpZGF0ZUFuZFBhcnNlSnNvbihhY3RpdmVBY2NvdW50VmFsdWVGaWx0ZXJzKTtcclxuICAgICAgICBpZiAoYWN0aXZlQWNjb3VudFZhbHVlT2JqKSB7XHJcbiAgICAgICAgICAgIHRoaXMubG9nZ2VyLnRyYWNlKFwiQnJvd3NlckNhY2hlTWFuYWdlci5nZXRBY3RpdmVBY2NvdW50OiBBY3RpdmUgYWNjb3VudCBmaWx0ZXJzIHNjaGVtYSBmb3VuZFwiKTtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZ2V0QWNjb3VudEluZm9GaWx0ZXJlZEJ5KHtcclxuICAgICAgICAgICAgICAgIGhvbWVBY2NvdW50SWQ6IGFjdGl2ZUFjY291bnRWYWx1ZU9iai5ob21lQWNjb3VudElkLFxyXG4gICAgICAgICAgICAgICAgbG9jYWxBY2NvdW50SWQ6IGFjdGl2ZUFjY291bnRWYWx1ZU9iai5sb2NhbEFjY291bnRJZCxcclxuICAgICAgICAgICAgICAgIHRlbmFudElkOiBhY3RpdmVBY2NvdW50VmFsdWVPYmoudGVuYW50SWQsXHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLmxvZ2dlci50cmFjZShcIkJyb3dzZXJDYWNoZU1hbmFnZXIuZ2V0QWN0aXZlQWNjb3VudDogTm8gYWN0aXZlIGFjY291bnQgZm91bmRcIik7XHJcbiAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICB9XHJcbiAgICAvKipcclxuICAgICAqIFNldHMgdGhlIGFjdGl2ZSBhY2NvdW50J3MgbG9jYWxBY2NvdW50SWQgaW4gY2FjaGVcclxuICAgICAqIEBwYXJhbSBhY2NvdW50XHJcbiAgICAgKi9cclxuICAgIHNldEFjdGl2ZUFjY291bnQoYWNjb3VudCkge1xyXG4gICAgICAgIGNvbnN0IGFjdGl2ZUFjY291bnRLZXkgPSB0aGlzLmdlbmVyYXRlQ2FjaGVLZXkoUGVyc2lzdGVudENhY2hlS2V5cy5BQ1RJVkVfQUNDT1VOVF9GSUxURVJTKTtcclxuICAgICAgICBjb25zdCBhY3RpdmVBY2NvdW50S2V5TG9jYWwgPSB0aGlzLmdlbmVyYXRlQ2FjaGVLZXkoUGVyc2lzdGVudENhY2hlS2V5cy5BQ1RJVkVfQUNDT1VOVCk7XHJcbiAgICAgICAgaWYgKGFjY291bnQpIHtcclxuICAgICAgICAgICAgdGhpcy5sb2dnZXIudmVyYm9zZShcInNldEFjdGl2ZUFjY291bnQ6IEFjdGl2ZSBhY2NvdW50IHNldFwiKTtcclxuICAgICAgICAgICAgY29uc3QgYWN0aXZlQWNjb3VudFZhbHVlID0ge1xyXG4gICAgICAgICAgICAgICAgaG9tZUFjY291bnRJZDogYWNjb3VudC5ob21lQWNjb3VudElkLFxyXG4gICAgICAgICAgICAgICAgbG9jYWxBY2NvdW50SWQ6IGFjY291bnQubG9jYWxBY2NvdW50SWQsXHJcbiAgICAgICAgICAgICAgICB0ZW5hbnRJZDogYWNjb3VudC50ZW5hbnRJZCxcclxuICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgdGhpcy5icm93c2VyU3RvcmFnZS5zZXRJdGVtKGFjdGl2ZUFjY291bnRLZXksIEpTT04uc3RyaW5naWZ5KGFjdGl2ZUFjY291bnRWYWx1ZSkpO1xyXG4gICAgICAgICAgICB0aGlzLmJyb3dzZXJTdG9yYWdlLnNldEl0ZW0oYWN0aXZlQWNjb3VudEtleUxvY2FsLCBhY2NvdW50LmxvY2FsQWNjb3VudElkKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMubG9nZ2VyLnZlcmJvc2UoXCJzZXRBY3RpdmVBY2NvdW50OiBObyBhY2NvdW50IHBhc3NlZCwgYWN0aXZlIGFjY291bnQgbm90IHNldFwiKTtcclxuICAgICAgICAgICAgdGhpcy5icm93c2VyU3RvcmFnZS5yZW1vdmVJdGVtKGFjdGl2ZUFjY291bnRLZXkpO1xyXG4gICAgICAgICAgICB0aGlzLmJyb3dzZXJTdG9yYWdlLnJlbW92ZUl0ZW0oYWN0aXZlQWNjb3VudEtleUxvY2FsKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICAvKipcclxuICAgICAqIGZldGNoIHRocm90dGxpbmcgZW50aXR5IGZyb20gdGhlIHBsYXRmb3JtIGNhY2hlXHJcbiAgICAgKiBAcGFyYW0gdGhyb3R0bGluZ0NhY2hlS2V5XHJcbiAgICAgKi9cclxuICAgIGdldFRocm90dGxpbmdDYWNoZSh0aHJvdHRsaW5nQ2FjaGVLZXkpIHtcclxuICAgICAgICBjb25zdCB2YWx1ZSA9IHRoaXMuZ2V0SXRlbSh0aHJvdHRsaW5nQ2FjaGVLZXkpO1xyXG4gICAgICAgIGlmICghdmFsdWUpIHtcclxuICAgICAgICAgICAgdGhpcy5sb2dnZXIudHJhY2UoXCJCcm93c2VyQ2FjaGVNYW5hZ2VyLmdldFRocm90dGxpbmdDYWNoZTogY2FsbGVkLCBubyBjYWNoZSBoaXRcIik7XHJcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjb25zdCBwYXJzZWRUaHJvdHRsaW5nQ2FjaGUgPSB0aGlzLnZhbGlkYXRlQW5kUGFyc2VKc29uKHZhbHVlKTtcclxuICAgICAgICBpZiAoIXBhcnNlZFRocm90dGxpbmdDYWNoZSB8fFxyXG4gICAgICAgICAgICAhQ2FjaGVIZWxwZXJzLmlzVGhyb3R0bGluZ0VudGl0eSh0aHJvdHRsaW5nQ2FjaGVLZXksIHBhcnNlZFRocm90dGxpbmdDYWNoZSkpIHtcclxuICAgICAgICAgICAgdGhpcy5sb2dnZXIudHJhY2UoXCJCcm93c2VyQ2FjaGVNYW5hZ2VyLmdldFRocm90dGxpbmdDYWNoZTogY2FsbGVkLCBubyBjYWNoZSBoaXRcIik7XHJcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLmxvZ2dlci50cmFjZShcIkJyb3dzZXJDYWNoZU1hbmFnZXIuZ2V0VGhyb3R0bGluZ0NhY2hlOiBjYWNoZSBoaXRcIik7XHJcbiAgICAgICAgcmV0dXJuIHBhcnNlZFRocm90dGxpbmdDYWNoZTtcclxuICAgIH1cclxuICAgIC8qKlxyXG4gICAgICogc2V0IHRocm90dGxpbmcgZW50aXR5IHRvIHRoZSBwbGF0Zm9ybSBjYWNoZVxyXG4gICAgICogQHBhcmFtIHRocm90dGxpbmdDYWNoZUtleVxyXG4gICAgICogQHBhcmFtIHRocm90dGxpbmdDYWNoZVxyXG4gICAgICovXHJcbiAgICBzZXRUaHJvdHRsaW5nQ2FjaGUodGhyb3R0bGluZ0NhY2hlS2V5LCB0aHJvdHRsaW5nQ2FjaGUpIHtcclxuICAgICAgICB0aGlzLmxvZ2dlci50cmFjZShcIkJyb3dzZXJDYWNoZU1hbmFnZXIuc2V0VGhyb3R0bGluZ0NhY2hlIGNhbGxlZFwiKTtcclxuICAgICAgICB0aGlzLnNldEl0ZW0odGhyb3R0bGluZ0NhY2hlS2V5LCBKU09OLnN0cmluZ2lmeSh0aHJvdHRsaW5nQ2FjaGUpKTtcclxuICAgIH1cclxuICAgIC8qKlxyXG4gICAgICogR2V0cyBjYWNoZSBpdGVtIHdpdGggZ2l2ZW4ga2V5LlxyXG4gICAgICogV2lsbCByZXRyaWV2ZSBmcm9tIGNvb2tpZXMgaWYgc3RvcmVBdXRoU3RhdGVJbkNvb2tpZSBpcyBzZXQgdG8gdHJ1ZS5cclxuICAgICAqIEBwYXJhbSBrZXlcclxuICAgICAqL1xyXG4gICAgZ2V0VGVtcG9yYXJ5Q2FjaGUoY2FjaGVLZXksIGdlbmVyYXRlS2V5KSB7XHJcbiAgICAgICAgY29uc3Qga2V5ID0gZ2VuZXJhdGVLZXkgPyB0aGlzLmdlbmVyYXRlQ2FjaGVLZXkoY2FjaGVLZXkpIDogY2FjaGVLZXk7XHJcbiAgICAgICAgaWYgKHRoaXMuY2FjaGVDb25maWcuc3RvcmVBdXRoU3RhdGVJbkNvb2tpZSkge1xyXG4gICAgICAgICAgICBjb25zdCBpdGVtQ29va2llID0gdGhpcy5jb29raWVTdG9yYWdlLmdldEl0ZW0oa2V5KTtcclxuICAgICAgICAgICAgaWYgKGl0ZW1Db29raWUpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMubG9nZ2VyLnRyYWNlKFwiQnJvd3NlckNhY2hlTWFuYWdlci5nZXRUZW1wb3JhcnlDYWNoZTogc3RvcmVBdXRoU3RhdGVJbkNvb2tpZXMgc2V0IHRvIHRydWUsIHJldHJpZXZpbmcgZnJvbSBjb29raWVzXCIpO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGl0ZW1Db29raWU7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgY29uc3QgdmFsdWUgPSB0aGlzLnRlbXBvcmFyeUNhY2hlU3RvcmFnZS5nZXRJdGVtKGtleSk7XHJcbiAgICAgICAgaWYgKCF2YWx1ZSkge1xyXG4gICAgICAgICAgICAvLyBJZiB0ZW1wIGNhY2hlIGl0ZW0gbm90IGZvdW5kIGluIHNlc3Npb24vbWVtb3J5LCBjaGVjayBsb2NhbCBzdG9yYWdlIGZvciBpdGVtcyBzZXQgYnkgb2xkIHZlcnNpb25zXHJcbiAgICAgICAgICAgIGlmICh0aGlzLmNhY2hlQ29uZmlnLmNhY2hlTG9jYXRpb24gPT09XHJcbiAgICAgICAgICAgICAgICBCcm93c2VyQ2FjaGVMb2NhdGlvbi5Mb2NhbFN0b3JhZ2UpIHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGl0ZW0gPSB0aGlzLmJyb3dzZXJTdG9yYWdlLmdldEl0ZW0oa2V5KTtcclxuICAgICAgICAgICAgICAgIGlmIChpdGVtKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5sb2dnZXIudHJhY2UoXCJCcm93c2VyQ2FjaGVNYW5hZ2VyLmdldFRlbXBvcmFyeUNhY2hlOiBUZW1wb3JhcnkgY2FjaGUgaXRlbSBmb3VuZCBpbiBsb2NhbCBzdG9yYWdlXCIpO1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBpdGVtO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHRoaXMubG9nZ2VyLnRyYWNlKFwiQnJvd3NlckNhY2hlTWFuYWdlci5nZXRUZW1wb3JhcnlDYWNoZTogTm8gY2FjaGUgaXRlbSBmb3VuZCBpbiBsb2NhbCBzdG9yYWdlXCIpO1xyXG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5sb2dnZXIudHJhY2UoXCJCcm93c2VyQ2FjaGVNYW5hZ2VyLmdldFRlbXBvcmFyeUNhY2hlOiBUZW1wb3JhcnkgY2FjaGUgaXRlbSByZXR1cm5lZFwiKTtcclxuICAgICAgICByZXR1cm4gdmFsdWU7XHJcbiAgICB9XHJcbiAgICAvKipcclxuICAgICAqIFNldHMgdGhlIGNhY2hlIGl0ZW0gd2l0aCB0aGUga2V5IGFuZCB2YWx1ZSBnaXZlbi5cclxuICAgICAqIFN0b3JlcyBpbiBjb29raWUgaWYgc3RvcmVBdXRoU3RhdGVJbkNvb2tpZSBpcyBzZXQgdG8gdHJ1ZS5cclxuICAgICAqIFRoaXMgY2FuIGNhdXNlIGNvb2tpZSBvdmVyZmxvdyBpZiB1c2VkIGluY29ycmVjdGx5LlxyXG4gICAgICogQHBhcmFtIGtleVxyXG4gICAgICogQHBhcmFtIHZhbHVlXHJcbiAgICAgKi9cclxuICAgIHNldFRlbXBvcmFyeUNhY2hlKGNhY2hlS2V5LCB2YWx1ZSwgZ2VuZXJhdGVLZXkpIHtcclxuICAgICAgICBjb25zdCBrZXkgPSBnZW5lcmF0ZUtleSA/IHRoaXMuZ2VuZXJhdGVDYWNoZUtleShjYWNoZUtleSkgOiBjYWNoZUtleTtcclxuICAgICAgICB0aGlzLnRlbXBvcmFyeUNhY2hlU3RvcmFnZS5zZXRJdGVtKGtleSwgdmFsdWUpO1xyXG4gICAgICAgIGlmICh0aGlzLmNhY2hlQ29uZmlnLnN0b3JlQXV0aFN0YXRlSW5Db29raWUpIHtcclxuICAgICAgICAgICAgdGhpcy5sb2dnZXIudHJhY2UoXCJCcm93c2VyQ2FjaGVNYW5hZ2VyLnNldFRlbXBvcmFyeUNhY2hlOiBzdG9yZUF1dGhTdGF0ZUluQ29va2llIHNldCB0byB0cnVlLCBzZXR0aW5nIGl0ZW0gY29va2llXCIpO1xyXG4gICAgICAgICAgICB0aGlzLmNvb2tpZVN0b3JhZ2Uuc2V0SXRlbShrZXksIHZhbHVlLCB1bmRlZmluZWQsIHRoaXMuY2FjaGVDb25maWcuc2VjdXJlQ29va2llcyk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgLyoqXHJcbiAgICAgKiBSZW1vdmVzIHRoZSBjYWNoZSBpdGVtIHdpdGggdGhlIGdpdmVuIGtleS5cclxuICAgICAqIEBwYXJhbSBrZXlcclxuICAgICAqL1xyXG4gICAgcmVtb3ZlSXRlbShrZXkpIHtcclxuICAgICAgICB0aGlzLmJyb3dzZXJTdG9yYWdlLnJlbW92ZUl0ZW0oa2V5KTtcclxuICAgIH1cclxuICAgIC8qKlxyXG4gICAgICogUmVtb3ZlcyB0aGUgdGVtcG9yYXJ5IGNhY2hlIGl0ZW0gd2l0aCB0aGUgZ2l2ZW4ga2V5LlxyXG4gICAgICogV2lsbCBhbHNvIGNsZWFyIHRoZSBjb29raWUgaXRlbSBpZiBzdG9yZUF1dGhTdGF0ZUluQ29va2llIGlzIHNldCB0byB0cnVlLlxyXG4gICAgICogQHBhcmFtIGtleVxyXG4gICAgICovXHJcbiAgICByZW1vdmVUZW1wb3JhcnlJdGVtKGtleSkge1xyXG4gICAgICAgIHRoaXMudGVtcG9yYXJ5Q2FjaGVTdG9yYWdlLnJlbW92ZUl0ZW0oa2V5KTtcclxuICAgICAgICBpZiAodGhpcy5jYWNoZUNvbmZpZy5zdG9yZUF1dGhTdGF0ZUluQ29va2llKSB7XHJcbiAgICAgICAgICAgIHRoaXMubG9nZ2VyLnRyYWNlKFwiQnJvd3NlckNhY2hlTWFuYWdlci5yZW1vdmVJdGVtOiBzdG9yZUF1dGhTdGF0ZUluQ29va2llIGlzIHRydWUsIGNsZWFyaW5nIGl0ZW0gY29va2llXCIpO1xyXG4gICAgICAgICAgICB0aGlzLmNvb2tpZVN0b3JhZ2UucmVtb3ZlSXRlbShrZXkpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIC8qKlxyXG4gICAgICogR2V0cyBhbGwga2V5cyBpbiB3aW5kb3cuXHJcbiAgICAgKi9cclxuICAgIGdldEtleXMoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuYnJvd3NlclN0b3JhZ2UuZ2V0S2V5cygpO1xyXG4gICAgfVxyXG4gICAgLyoqXHJcbiAgICAgKiBDbGVhcnMgYWxsIGNhY2hlIGVudHJpZXMgY3JlYXRlZCBieSBNU0FMLlxyXG4gICAgICovXHJcbiAgICBhc3luYyBjbGVhcigpIHtcclxuICAgICAgICAvLyBSZW1vdmVzIGFsbCBhY2NvdW50cyBhbmQgdGhlaXIgY3JlZGVudGlhbHNcclxuICAgICAgICBhd2FpdCB0aGlzLnJlbW92ZUFsbEFjY291bnRzKCk7XHJcbiAgICAgICAgdGhpcy5yZW1vdmVBcHBNZXRhZGF0YSgpO1xyXG4gICAgICAgIC8vIFJlbW92ZSB0ZW1wIHN0b3JhZ2UgZmlyc3QgdG8gbWFrZSBzdXJlIGFueSBjb29raWVzIGFyZSBjbGVhcmVkXHJcbiAgICAgICAgdGhpcy50ZW1wb3JhcnlDYWNoZVN0b3JhZ2UuZ2V0S2V5cygpLmZvckVhY2goKGNhY2hlS2V5KSA9PiB7XHJcbiAgICAgICAgICAgIGlmIChjYWNoZUtleS5pbmRleE9mKENvbnN0YW50cy5DQUNIRV9QUkVGSVgpICE9PSAtMSB8fFxyXG4gICAgICAgICAgICAgICAgY2FjaGVLZXkuaW5kZXhPZih0aGlzLmNsaWVudElkKSAhPT0gLTEpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMucmVtb3ZlVGVtcG9yYXJ5SXRlbShjYWNoZUtleSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgICAgICAvLyBSZW1vdmVzIGFsbCByZW1haW5pbmcgTVNBTCBjYWNoZSBpdGVtc1xyXG4gICAgICAgIHRoaXMuYnJvd3NlclN0b3JhZ2UuZ2V0S2V5cygpLmZvckVhY2goKGNhY2hlS2V5KSA9PiB7XHJcbiAgICAgICAgICAgIGlmIChjYWNoZUtleS5pbmRleE9mKENvbnN0YW50cy5DQUNIRV9QUkVGSVgpICE9PSAtMSB8fFxyXG4gICAgICAgICAgICAgICAgY2FjaGVLZXkuaW5kZXhPZih0aGlzLmNsaWVudElkKSAhPT0gLTEpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuYnJvd3NlclN0b3JhZ2UucmVtb3ZlSXRlbShjYWNoZUtleSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgICAgICB0aGlzLmludGVybmFsU3RvcmFnZS5jbGVhcigpO1xyXG4gICAgfVxyXG4gICAgLyoqXHJcbiAgICAgKiBDbGVhcnMgYWxsIGFjY2VzcyB0b2tlcyB0aGF0IGhhdmUgY2xhaW1zIHByaW9yIHRvIHNhdmluZyB0aGUgY3VycmVudCBvbmVcclxuICAgICAqIEBwYXJhbSBwZXJmb3JtYW5jZUNsaWVudCB7SVBlcmZvcm1hbmNlQ2xpZW50fVxyXG4gICAgICogQHBhcmFtIGNvcnJlbGF0aW9uSWQge3N0cmluZ30gY29ycmVsYXRpb24gaWRcclxuICAgICAqIEByZXR1cm5zXHJcbiAgICAgKi9cclxuICAgIGFzeW5jIGNsZWFyVG9rZW5zQW5kS2V5c1dpdGhDbGFpbXMocGVyZm9ybWFuY2VDbGllbnQsIGNvcnJlbGF0aW9uSWQpIHtcclxuICAgICAgICBwZXJmb3JtYW5jZUNsaWVudC5hZGRRdWV1ZU1lYXN1cmVtZW50KFBlcmZvcm1hbmNlRXZlbnRzLkNsZWFyVG9rZW5zQW5kS2V5c1dpdGhDbGFpbXMsIGNvcnJlbGF0aW9uSWQpO1xyXG4gICAgICAgIGNvbnN0IHRva2VuS2V5cyA9IHRoaXMuZ2V0VG9rZW5LZXlzKCk7XHJcbiAgICAgICAgY29uc3QgcmVtb3ZlZEFjY2Vzc1Rva2VucyA9IFtdO1xyXG4gICAgICAgIHRva2VuS2V5cy5hY2Nlc3NUb2tlbi5mb3JFYWNoKChrZXkpID0+IHtcclxuICAgICAgICAgICAgLy8gaWYgdGhlIGFjY2VzcyB0b2tlbiBoYXMgY2xhaW1zIGluIGl0cyBrZXksIHJlbW92ZSB0aGUgdG9rZW4ga2V5IGFuZCB0aGUgdG9rZW5cclxuICAgICAgICAgICAgY29uc3QgY3JlZGVudGlhbCA9IHRoaXMuZ2V0QWNjZXNzVG9rZW5DcmVkZW50aWFsKGtleSk7XHJcbiAgICAgICAgICAgIGlmIChjcmVkZW50aWFsPy5yZXF1ZXN0ZWRDbGFpbXNIYXNoICYmXHJcbiAgICAgICAgICAgICAgICBrZXkuaW5jbHVkZXMoY3JlZGVudGlhbC5yZXF1ZXN0ZWRDbGFpbXNIYXNoLnRvTG93ZXJDYXNlKCkpKSB7XHJcbiAgICAgICAgICAgICAgICByZW1vdmVkQWNjZXNzVG9rZW5zLnB1c2godGhpcy5yZW1vdmVBY2Nlc3NUb2tlbihrZXkpKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIGF3YWl0IFByb21pc2UuYWxsKHJlbW92ZWRBY2Nlc3NUb2tlbnMpO1xyXG4gICAgICAgIC8vIHdhcm4gaWYgYW55IGFjY2VzcyB0b2tlbnMgYXJlIHJlbW92ZWRcclxuICAgICAgICBpZiAocmVtb3ZlZEFjY2Vzc1Rva2Vucy5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgIHRoaXMubG9nZ2VyLndhcm5pbmcoYCR7cmVtb3ZlZEFjY2Vzc1Rva2Vucy5sZW5ndGh9IGFjY2VzcyB0b2tlbnMgd2l0aCBjbGFpbXMgaW4gdGhlIGNhY2hlIGtleXMgaGF2ZSBiZWVuIHJlbW92ZWQgZnJvbSB0aGUgY2FjaGUuYCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgLyoqXHJcbiAgICAgKiBQcmVwZW5kIG1zYWwuPGNsaWVudC1pZD4gdG8gZWFjaCBrZXk7IFNraXAgZm9yIGFueSBKU09OIG9iamVjdCBhcyBLZXkgKGRlZmluZWQgc2NoZW1hcyBkbyBub3QgbmVlZCB0aGUga2V5IGFwcGVuZGVkOiBBY2Nlc3NUb2tlbiBLZXlzIG9yIHRoZSB1cGNvbWluZyBzY2hlbWEpXHJcbiAgICAgKiBAcGFyYW0ga2V5XHJcbiAgICAgKiBAcGFyYW0gYWRkSW5zdGFuY2VJZFxyXG4gICAgICovXHJcbiAgICBnZW5lcmF0ZUNhY2hlS2V5KGtleSkge1xyXG4gICAgICAgIGNvbnN0IGdlbmVyYXRlZEtleSA9IHRoaXMudmFsaWRhdGVBbmRQYXJzZUpzb24oa2V5KTtcclxuICAgICAgICBpZiAoIWdlbmVyYXRlZEtleSkge1xyXG4gICAgICAgICAgICBpZiAoU3RyaW5nVXRpbHMuc3RhcnRzV2l0aChrZXksIENvbnN0YW50cy5DQUNIRV9QUkVGSVgpIHx8XHJcbiAgICAgICAgICAgICAgICBTdHJpbmdVdGlscy5zdGFydHNXaXRoKGtleSwgUGVyc2lzdGVudENhY2hlS2V5cy5BREFMX0lEX1RPS0VOKSkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGtleTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICByZXR1cm4gYCR7Q29uc3RhbnRzLkNBQ0hFX1BSRUZJWH0uJHt0aGlzLmNsaWVudElkfS4ke2tleX1gO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gSlNPTi5zdHJpbmdpZnkoa2V5KTtcclxuICAgIH1cclxuICAgIC8qKlxyXG4gICAgICogQ3JlYXRlIGF1dGhvcml0eUtleSB0byBjYWNoZSBhdXRob3JpdHlcclxuICAgICAqIEBwYXJhbSBzdGF0ZVxyXG4gICAgICovXHJcbiAgICBnZW5lcmF0ZUF1dGhvcml0eUtleShzdGF0ZVN0cmluZykge1xyXG4gICAgICAgIGNvbnN0IHsgbGlicmFyeVN0YXRlOiB7IGlkOiBzdGF0ZUlkIH0sIH0gPSBQcm90b2NvbFV0aWxzLnBhcnNlUmVxdWVzdFN0YXRlKHRoaXMuY3J5cHRvSW1wbCwgc3RhdGVTdHJpbmcpO1xyXG4gICAgICAgIHJldHVybiB0aGlzLmdlbmVyYXRlQ2FjaGVLZXkoYCR7VGVtcG9yYXJ5Q2FjaGVLZXlzLkFVVEhPUklUWX0uJHtzdGF0ZUlkfWApO1xyXG4gICAgfVxyXG4gICAgLyoqXHJcbiAgICAgKiBDcmVhdGUgTm9uY2Uga2V5IHRvIGNhY2hlIG5vbmNlXHJcbiAgICAgKiBAcGFyYW0gc3RhdGVcclxuICAgICAqL1xyXG4gICAgZ2VuZXJhdGVOb25jZUtleShzdGF0ZVN0cmluZykge1xyXG4gICAgICAgIGNvbnN0IHsgbGlicmFyeVN0YXRlOiB7IGlkOiBzdGF0ZUlkIH0sIH0gPSBQcm90b2NvbFV0aWxzLnBhcnNlUmVxdWVzdFN0YXRlKHRoaXMuY3J5cHRvSW1wbCwgc3RhdGVTdHJpbmcpO1xyXG4gICAgICAgIHJldHVybiB0aGlzLmdlbmVyYXRlQ2FjaGVLZXkoYCR7VGVtcG9yYXJ5Q2FjaGVLZXlzLk5PTkNFX0lEVE9LRU59LiR7c3RhdGVJZH1gKTtcclxuICAgIH1cclxuICAgIC8qKlxyXG4gICAgICogQ3JlYXRlcyBmdWxsIGNhY2hlIGtleSBmb3IgdGhlIHJlcXVlc3Qgc3RhdGVcclxuICAgICAqIEBwYXJhbSBzdGF0ZVN0cmluZyBTdGF0ZSBzdHJpbmcgZm9yIHRoZSByZXF1ZXN0XHJcbiAgICAgKi9cclxuICAgIGdlbmVyYXRlU3RhdGVLZXkoc3RhdGVTdHJpbmcpIHtcclxuICAgICAgICAvLyBVc2UgdGhlIGxpYnJhcnkgc3RhdGUgaWQgdG8ga2V5IHRlbXAgc3RvcmFnZSBmb3IgdW5pcXVlbmVzcyBmb3IgbXVsdGlwbGUgY29uY3VycmVudCByZXF1ZXN0c1xyXG4gICAgICAgIGNvbnN0IHsgbGlicmFyeVN0YXRlOiB7IGlkOiBzdGF0ZUlkIH0sIH0gPSBQcm90b2NvbFV0aWxzLnBhcnNlUmVxdWVzdFN0YXRlKHRoaXMuY3J5cHRvSW1wbCwgc3RhdGVTdHJpbmcpO1xyXG4gICAgICAgIHJldHVybiB0aGlzLmdlbmVyYXRlQ2FjaGVLZXkoYCR7VGVtcG9yYXJ5Q2FjaGVLZXlzLlJFUVVFU1RfU1RBVEV9LiR7c3RhdGVJZH1gKTtcclxuICAgIH1cclxuICAgIC8qKlxyXG4gICAgICogR2V0cyB0aGUgY2FjaGVkIGF1dGhvcml0eSBiYXNlZCBvbiB0aGUgY2FjaGVkIHN0YXRlLiBSZXR1cm5zIGVtcHR5IGlmIG5vIGNhY2hlZCBzdGF0ZSBmb3VuZC5cclxuICAgICAqL1xyXG4gICAgZ2V0Q2FjaGVkQXV0aG9yaXR5KGNhY2hlZFN0YXRlKSB7XHJcbiAgICAgICAgY29uc3Qgc3RhdGVDYWNoZUtleSA9IHRoaXMuZ2VuZXJhdGVTdGF0ZUtleShjYWNoZWRTdGF0ZSk7XHJcbiAgICAgICAgY29uc3Qgc3RhdGUgPSB0aGlzLmdldFRlbXBvcmFyeUNhY2hlKHN0YXRlQ2FjaGVLZXkpO1xyXG4gICAgICAgIGlmICghc3RhdGUpIHtcclxuICAgICAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNvbnN0IGF1dGhvcml0eUNhY2hlS2V5ID0gdGhpcy5nZW5lcmF0ZUF1dGhvcml0eUtleShzdGF0ZSk7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0VGVtcG9yYXJ5Q2FjaGUoYXV0aG9yaXR5Q2FjaGVLZXkpO1xyXG4gICAgfVxyXG4gICAgLyoqXHJcbiAgICAgKiBVcGRhdGVzIGFjY291bnQsIGF1dGhvcml0eSwgYW5kIHN0YXRlIGluIGNhY2hlXHJcbiAgICAgKiBAcGFyYW0gc2VydmVyQXV0aGVudGljYXRpb25SZXF1ZXN0XHJcbiAgICAgKiBAcGFyYW0gYWNjb3VudFxyXG4gICAgICovXHJcbiAgICB1cGRhdGVDYWNoZUVudHJpZXMoc3RhdGUsIG5vbmNlLCBhdXRob3JpdHlJbnN0YW5jZSwgbG9naW5IaW50LCBhY2NvdW50KSB7XHJcbiAgICAgICAgdGhpcy5sb2dnZXIudHJhY2UoXCJCcm93c2VyQ2FjaGVNYW5hZ2VyLnVwZGF0ZUNhY2hlRW50cmllcyBjYWxsZWRcIik7XHJcbiAgICAgICAgLy8gQ2FjaGUgdGhlIHJlcXVlc3Qgc3RhdGVcclxuICAgICAgICBjb25zdCBzdGF0ZUNhY2hlS2V5ID0gdGhpcy5nZW5lcmF0ZVN0YXRlS2V5KHN0YXRlKTtcclxuICAgICAgICB0aGlzLnNldFRlbXBvcmFyeUNhY2hlKHN0YXRlQ2FjaGVLZXksIHN0YXRlLCBmYWxzZSk7XHJcbiAgICAgICAgLy8gQ2FjaGUgdGhlIG5vbmNlXHJcbiAgICAgICAgY29uc3Qgbm9uY2VDYWNoZUtleSA9IHRoaXMuZ2VuZXJhdGVOb25jZUtleShzdGF0ZSk7XHJcbiAgICAgICAgdGhpcy5zZXRUZW1wb3JhcnlDYWNoZShub25jZUNhY2hlS2V5LCBub25jZSwgZmFsc2UpO1xyXG4gICAgICAgIC8vIENhY2hlIGF1dGhvcml0eUtleVxyXG4gICAgICAgIGNvbnN0IGF1dGhvcml0eUNhY2hlS2V5ID0gdGhpcy5nZW5lcmF0ZUF1dGhvcml0eUtleShzdGF0ZSk7XHJcbiAgICAgICAgdGhpcy5zZXRUZW1wb3JhcnlDYWNoZShhdXRob3JpdHlDYWNoZUtleSwgYXV0aG9yaXR5SW5zdGFuY2UsIGZhbHNlKTtcclxuICAgICAgICBpZiAoYWNjb3VudCkge1xyXG4gICAgICAgICAgICBjb25zdCBjY3NDcmVkZW50aWFsID0ge1xyXG4gICAgICAgICAgICAgICAgY3JlZGVudGlhbDogYWNjb3VudC5ob21lQWNjb3VudElkLFxyXG4gICAgICAgICAgICAgICAgdHlwZTogQ2NzQ3JlZGVudGlhbFR5cGUuSE9NRV9BQ0NPVU5UX0lELFxyXG4gICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICB0aGlzLnNldFRlbXBvcmFyeUNhY2hlKFRlbXBvcmFyeUNhY2hlS2V5cy5DQ1NfQ1JFREVOVElBTCwgSlNPTi5zdHJpbmdpZnkoY2NzQ3JlZGVudGlhbCksIHRydWUpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIGlmIChsb2dpbkhpbnQpIHtcclxuICAgICAgICAgICAgY29uc3QgY2NzQ3JlZGVudGlhbCA9IHtcclxuICAgICAgICAgICAgICAgIGNyZWRlbnRpYWw6IGxvZ2luSGludCxcclxuICAgICAgICAgICAgICAgIHR5cGU6IENjc0NyZWRlbnRpYWxUeXBlLlVQTixcclxuICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgdGhpcy5zZXRUZW1wb3JhcnlDYWNoZShUZW1wb3JhcnlDYWNoZUtleXMuQ0NTX0NSRURFTlRJQUwsIEpTT04uc3RyaW5naWZ5KGNjc0NyZWRlbnRpYWwpLCB0cnVlKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICAvKipcclxuICAgICAqIFJlc2V0IGFsbCB0ZW1wb3JhcnkgY2FjaGUgaXRlbXNcclxuICAgICAqIEBwYXJhbSBzdGF0ZVxyXG4gICAgICovXHJcbiAgICByZXNldFJlcXVlc3RDYWNoZShzdGF0ZSkge1xyXG4gICAgICAgIHRoaXMubG9nZ2VyLnRyYWNlKFwiQnJvd3NlckNhY2hlTWFuYWdlci5yZXNldFJlcXVlc3RDYWNoZSBjYWxsZWRcIik7XHJcbiAgICAgICAgLy8gY2hlY2sgc3RhdGUgYW5kIHJlbW92ZSBhc3NvY2lhdGVkIGNhY2hlIGl0ZW1zXHJcbiAgICAgICAgaWYgKHN0YXRlKSB7XHJcbiAgICAgICAgICAgIHRoaXMudGVtcG9yYXJ5Q2FjaGVTdG9yYWdlLmdldEtleXMoKS5mb3JFYWNoKChrZXkpID0+IHtcclxuICAgICAgICAgICAgICAgIGlmIChrZXkuaW5kZXhPZihzdGF0ZSkgIT09IC0xKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5yZW1vdmVUZW1wb3JhcnlJdGVtKGtleSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAvLyBkZWxldGUgZ2VuZXJpYyBpbnRlcmFjdGl2ZSByZXF1ZXN0IHBhcmFtZXRlcnNcclxuICAgICAgICAgICAgdGhpcy5yZW1vdmVUZW1wb3JhcnlJdGVtKHRoaXMuZ2VuZXJhdGVTdGF0ZUtleShzdGF0ZSkpO1xyXG4gICAgICAgICAgICB0aGlzLnJlbW92ZVRlbXBvcmFyeUl0ZW0odGhpcy5nZW5lcmF0ZU5vbmNlS2V5KHN0YXRlKSk7XHJcbiAgICAgICAgICAgIHRoaXMucmVtb3ZlVGVtcG9yYXJ5SXRlbSh0aGlzLmdlbmVyYXRlQXV0aG9yaXR5S2V5KHN0YXRlKSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMucmVtb3ZlVGVtcG9yYXJ5SXRlbSh0aGlzLmdlbmVyYXRlQ2FjaGVLZXkoVGVtcG9yYXJ5Q2FjaGVLZXlzLlJFUVVFU1RfUEFSQU1TKSk7XHJcbiAgICAgICAgdGhpcy5yZW1vdmVUZW1wb3JhcnlJdGVtKHRoaXMuZ2VuZXJhdGVDYWNoZUtleShUZW1wb3JhcnlDYWNoZUtleXMuT1JJR0lOX1VSSSkpO1xyXG4gICAgICAgIHRoaXMucmVtb3ZlVGVtcG9yYXJ5SXRlbSh0aGlzLmdlbmVyYXRlQ2FjaGVLZXkoVGVtcG9yYXJ5Q2FjaGVLZXlzLlVSTF9IQVNIKSk7XHJcbiAgICAgICAgdGhpcy5yZW1vdmVUZW1wb3JhcnlJdGVtKHRoaXMuZ2VuZXJhdGVDYWNoZUtleShUZW1wb3JhcnlDYWNoZUtleXMuQ09SUkVMQVRJT05fSUQpKTtcclxuICAgICAgICB0aGlzLnJlbW92ZVRlbXBvcmFyeUl0ZW0odGhpcy5nZW5lcmF0ZUNhY2hlS2V5KFRlbXBvcmFyeUNhY2hlS2V5cy5DQ1NfQ1JFREVOVElBTCkpO1xyXG4gICAgICAgIHRoaXMucmVtb3ZlVGVtcG9yYXJ5SXRlbSh0aGlzLmdlbmVyYXRlQ2FjaGVLZXkoVGVtcG9yYXJ5Q2FjaGVLZXlzLk5BVElWRV9SRVFVRVNUKSk7XHJcbiAgICAgICAgdGhpcy5zZXRJbnRlcmFjdGlvbkluUHJvZ3Jlc3MoZmFsc2UpO1xyXG4gICAgfVxyXG4gICAgLyoqXHJcbiAgICAgKiBSZW1vdmVzIHRlbXBvcmFyeSBjYWNoZSBmb3IgdGhlIHByb3ZpZGVkIHN0YXRlXHJcbiAgICAgKiBAcGFyYW0gc3RhdGVTdHJpbmdcclxuICAgICAqL1xyXG4gICAgY2xlYW5SZXF1ZXN0QnlTdGF0ZShzdGF0ZVN0cmluZykge1xyXG4gICAgICAgIHRoaXMubG9nZ2VyLnRyYWNlKFwiQnJvd3NlckNhY2hlTWFuYWdlci5jbGVhblJlcXVlc3RCeVN0YXRlIGNhbGxlZFwiKTtcclxuICAgICAgICAvLyBJbnRlcmFjdGlvbiBpcyBjb21wbGV0ZWQgLSByZW1vdmUgaW50ZXJhY3Rpb24gc3RhdHVzLlxyXG4gICAgICAgIGlmIChzdGF0ZVN0cmluZykge1xyXG4gICAgICAgICAgICBjb25zdCBzdGF0ZUtleSA9IHRoaXMuZ2VuZXJhdGVTdGF0ZUtleShzdGF0ZVN0cmluZyk7XHJcbiAgICAgICAgICAgIGNvbnN0IGNhY2hlZFN0YXRlID0gdGhpcy50ZW1wb3JhcnlDYWNoZVN0b3JhZ2UuZ2V0SXRlbShzdGF0ZUtleSk7XHJcbiAgICAgICAgICAgIHRoaXMubG9nZ2VyLmluZm9QaWkoYEJyb3dzZXJDYWNoZU1hbmFnZXIuY2xlYW5SZXF1ZXN0QnlTdGF0ZTogUmVtb3ZpbmcgdGVtcG9yYXJ5IGNhY2hlIGl0ZW1zIGZvciBzdGF0ZTogJHtjYWNoZWRTdGF0ZX1gKTtcclxuICAgICAgICAgICAgdGhpcy5yZXNldFJlcXVlc3RDYWNoZShjYWNoZWRTdGF0ZSB8fCBDb25zdGFudHMuRU1QVFlfU1RSSU5HKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICAvKipcclxuICAgICAqIExvb2tzIGluIHRlbXBvcmFyeSBjYWNoZSBmb3IgYW55IHN0YXRlIHZhbHVlcyB3aXRoIHRoZSBwcm92aWRlZCBpbnRlcmFjdGlvblR5cGUgYW5kIHJlbW92ZXMgYWxsIHRlbXBvcmFyeSBjYWNoZSBpdGVtcyBmb3IgdGhhdCBzdGF0ZVxyXG4gICAgICogVXNlZCBpbiBzY2VuYXJpb3Mgd2hlcmUgdGVtcCBjYWNoZSBuZWVkcyB0byBiZSBjbGVhbmVkIGJ1dCBzdGF0ZSBpcyBub3Qga25vd24sIHN1Y2ggYXMgY2xpY2tpbmcgYnJvd3NlciBiYWNrIGJ1dHRvbi5cclxuICAgICAqIEBwYXJhbSBpbnRlcmFjdGlvblR5cGVcclxuICAgICAqL1xyXG4gICAgY2xlYW5SZXF1ZXN0QnlJbnRlcmFjdGlvblR5cGUoaW50ZXJhY3Rpb25UeXBlKSB7XHJcbiAgICAgICAgdGhpcy5sb2dnZXIudHJhY2UoXCJCcm93c2VyQ2FjaGVNYW5hZ2VyLmNsZWFuUmVxdWVzdEJ5SW50ZXJhY3Rpb25UeXBlIGNhbGxlZFwiKTtcclxuICAgICAgICAvLyBMb29wIHRocm91Z2ggYWxsIGtleXMgdG8gZmluZCBzdGF0ZSBrZXlcclxuICAgICAgICB0aGlzLnRlbXBvcmFyeUNhY2hlU3RvcmFnZS5nZXRLZXlzKCkuZm9yRWFjaCgoa2V5KSA9PiB7XHJcbiAgICAgICAgICAgIC8vIElmIHRoaXMga2V5IGlzIG5vdCB0aGUgc3RhdGUga2V5LCBtb3ZlIG9uXHJcbiAgICAgICAgICAgIGlmIChrZXkuaW5kZXhPZihUZW1wb3JhcnlDYWNoZUtleXMuUkVRVUVTVF9TVEFURSkgPT09IC0xKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgLy8gUmV0cmlldmUgc3RhdGUgdmFsdWUsIHJldHVybiBpZiBub3QgYSB2YWxpZCB2YWx1ZVxyXG4gICAgICAgICAgICBjb25zdCBzdGF0ZVZhbHVlID0gdGhpcy50ZW1wb3JhcnlDYWNoZVN0b3JhZ2UuZ2V0SXRlbShrZXkpO1xyXG4gICAgICAgICAgICBpZiAoIXN0YXRlVmFsdWUpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAvLyBFeHRyYWN0IHN0YXRlIGFuZCBlbnN1cmUgaXQgbWF0Y2hlcyBnaXZlbiBJbnRlcmFjdGlvblR5cGUsIHRoZW4gY2xlYW4gcmVxdWVzdCBjYWNoZVxyXG4gICAgICAgICAgICBjb25zdCBwYXJzZWRTdGF0ZSA9IGV4dHJhY3RCcm93c2VyUmVxdWVzdFN0YXRlKHRoaXMuY3J5cHRvSW1wbCwgc3RhdGVWYWx1ZSk7XHJcbiAgICAgICAgICAgIGlmIChwYXJzZWRTdGF0ZSAmJlxyXG4gICAgICAgICAgICAgICAgcGFyc2VkU3RhdGUuaW50ZXJhY3Rpb25UeXBlID09PSBpbnRlcmFjdGlvblR5cGUpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMubG9nZ2VyLmluZm9QaWkoYEJyb3dzZXJDYWNoZU1hbmFnZXIuY2xlYW5SZXF1ZXN0QnlJbnRlcmFjdGlvblR5cGU6IFJlbW92aW5nIHRlbXBvcmFyeSBjYWNoZSBpdGVtcyBmb3Igc3RhdGU6ICR7c3RhdGVWYWx1ZX1gKTtcclxuICAgICAgICAgICAgICAgIHRoaXMucmVzZXRSZXF1ZXN0Q2FjaGUoc3RhdGVWYWx1ZSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgICAgICB0aGlzLnNldEludGVyYWN0aW9uSW5Qcm9ncmVzcyhmYWxzZSk7XHJcbiAgICB9XHJcbiAgICBjYWNoZUNvZGVSZXF1ZXN0KGF1dGhDb2RlUmVxdWVzdCkge1xyXG4gICAgICAgIHRoaXMubG9nZ2VyLnRyYWNlKFwiQnJvd3NlckNhY2hlTWFuYWdlci5jYWNoZUNvZGVSZXF1ZXN0IGNhbGxlZFwiKTtcclxuICAgICAgICBjb25zdCBlbmNvZGVkVmFsdWUgPSBiYXNlNjRFbmNvZGUoSlNPTi5zdHJpbmdpZnkoYXV0aENvZGVSZXF1ZXN0KSk7XHJcbiAgICAgICAgdGhpcy5zZXRUZW1wb3JhcnlDYWNoZShUZW1wb3JhcnlDYWNoZUtleXMuUkVRVUVTVF9QQVJBTVMsIGVuY29kZWRWYWx1ZSwgdHJ1ZSk7XHJcbiAgICB9XHJcbiAgICAvKipcclxuICAgICAqIEdldHMgdGhlIHRva2VuIGV4Y2hhbmdlIHBhcmFtZXRlcnMgZnJvbSB0aGUgY2FjaGUuIFRocm93cyBhbiBlcnJvciBpZiBub3RoaW5nIGlzIGZvdW5kLlxyXG4gICAgICovXHJcbiAgICBnZXRDYWNoZWRSZXF1ZXN0KHN0YXRlKSB7XHJcbiAgICAgICAgdGhpcy5sb2dnZXIudHJhY2UoXCJCcm93c2VyQ2FjaGVNYW5hZ2VyLmdldENhY2hlZFJlcXVlc3QgY2FsbGVkXCIpO1xyXG4gICAgICAgIC8vIEdldCB0b2tlbiByZXF1ZXN0IGZyb20gY2FjaGUgYW5kIHBhcnNlIGFzIFRva2VuRXhjaGFuZ2VQYXJhbWV0ZXJzLlxyXG4gICAgICAgIGNvbnN0IGVuY29kZWRUb2tlblJlcXVlc3QgPSB0aGlzLmdldFRlbXBvcmFyeUNhY2hlKFRlbXBvcmFyeUNhY2hlS2V5cy5SRVFVRVNUX1BBUkFNUywgdHJ1ZSk7XHJcbiAgICAgICAgaWYgKCFlbmNvZGVkVG9rZW5SZXF1ZXN0KSB7XHJcbiAgICAgICAgICAgIHRocm93IGNyZWF0ZUJyb3dzZXJBdXRoRXJyb3Iobm9Ub2tlblJlcXVlc3RDYWNoZUVycm9yKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgbGV0IHBhcnNlZFJlcXVlc3Q7XHJcbiAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgcGFyc2VkUmVxdWVzdCA9IEpTT04ucGFyc2UoYmFzZTY0RGVjb2RlKGVuY29kZWRUb2tlblJlcXVlc3QpKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgY2F0Y2ggKGUpIHtcclxuICAgICAgICAgICAgdGhpcy5sb2dnZXIuZXJyb3JQaWkoYEF0dGVtcHRlZCB0byBwYXJzZTogJHtlbmNvZGVkVG9rZW5SZXF1ZXN0fWApO1xyXG4gICAgICAgICAgICB0aGlzLmxvZ2dlci5lcnJvcihgUGFyc2luZyBjYWNoZWQgdG9rZW4gcmVxdWVzdCB0aHJldyB3aXRoIGVycm9yOiAke2V9YCk7XHJcbiAgICAgICAgICAgIHRocm93IGNyZWF0ZUJyb3dzZXJBdXRoRXJyb3IodW5hYmxlVG9QYXJzZVRva2VuUmVxdWVzdENhY2hlRXJyb3IpO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLnJlbW92ZVRlbXBvcmFyeUl0ZW0odGhpcy5nZW5lcmF0ZUNhY2hlS2V5KFRlbXBvcmFyeUNhY2hlS2V5cy5SRVFVRVNUX1BBUkFNUykpO1xyXG4gICAgICAgIC8vIEdldCBjYWNoZWQgYXV0aG9yaXR5IGFuZCB1c2UgaWYgbm8gYXV0aG9yaXR5IGlzIGNhY2hlZCB3aXRoIHJlcXVlc3QuXHJcbiAgICAgICAgaWYgKCFwYXJzZWRSZXF1ZXN0LmF1dGhvcml0eSkge1xyXG4gICAgICAgICAgICBjb25zdCBhdXRob3JpdHlDYWNoZUtleSA9IHRoaXMuZ2VuZXJhdGVBdXRob3JpdHlLZXkoc3RhdGUpO1xyXG4gICAgICAgICAgICBjb25zdCBjYWNoZWRBdXRob3JpdHkgPSB0aGlzLmdldFRlbXBvcmFyeUNhY2hlKGF1dGhvcml0eUNhY2hlS2V5KTtcclxuICAgICAgICAgICAgaWYgKCFjYWNoZWRBdXRob3JpdHkpIHtcclxuICAgICAgICAgICAgICAgIHRocm93IGNyZWF0ZUJyb3dzZXJBdXRoRXJyb3Iobm9DYWNoZWRBdXRob3JpdHlFcnJvcik7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcGFyc2VkUmVxdWVzdC5hdXRob3JpdHkgPSBjYWNoZWRBdXRob3JpdHk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBwYXJzZWRSZXF1ZXN0O1xyXG4gICAgfVxyXG4gICAgLyoqXHJcbiAgICAgKiBHZXRzIGNhY2hlZCBuYXRpdmUgcmVxdWVzdCBmb3IgcmVkaXJlY3QgZmxvd3NcclxuICAgICAqL1xyXG4gICAgZ2V0Q2FjaGVkTmF0aXZlUmVxdWVzdCgpIHtcclxuICAgICAgICB0aGlzLmxvZ2dlci50cmFjZShcIkJyb3dzZXJDYWNoZU1hbmFnZXIuZ2V0Q2FjaGVkTmF0aXZlUmVxdWVzdCBjYWxsZWRcIik7XHJcbiAgICAgICAgY29uc3QgY2FjaGVkUmVxdWVzdCA9IHRoaXMuZ2V0VGVtcG9yYXJ5Q2FjaGUoVGVtcG9yYXJ5Q2FjaGVLZXlzLk5BVElWRV9SRVFVRVNULCB0cnVlKTtcclxuICAgICAgICBpZiAoIWNhY2hlZFJlcXVlc3QpIHtcclxuICAgICAgICAgICAgdGhpcy5sb2dnZXIudHJhY2UoXCJCcm93c2VyQ2FjaGVNYW5hZ2VyLmdldENhY2hlZE5hdGl2ZVJlcXVlc3Q6IE5vIGNhY2hlZCBuYXRpdmUgcmVxdWVzdCBmb3VuZFwiKTtcclxuICAgICAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNvbnN0IHBhcnNlZFJlcXVlc3QgPSB0aGlzLnZhbGlkYXRlQW5kUGFyc2VKc29uKGNhY2hlZFJlcXVlc3QpO1xyXG4gICAgICAgIGlmICghcGFyc2VkUmVxdWVzdCkge1xyXG4gICAgICAgICAgICB0aGlzLmxvZ2dlci5lcnJvcihcIkJyb3dzZXJDYWNoZU1hbmFnZXIuZ2V0Q2FjaGVkTmF0aXZlUmVxdWVzdDogVW5hYmxlIHRvIHBhcnNlIG5hdGl2ZSByZXF1ZXN0XCIpO1xyXG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHBhcnNlZFJlcXVlc3Q7XHJcbiAgICB9XHJcbiAgICBpc0ludGVyYWN0aW9uSW5Qcm9ncmVzcyhtYXRjaENsaWVudElkKSB7XHJcbiAgICAgICAgY29uc3QgY2xpZW50SWQgPSB0aGlzLmdldEludGVyYWN0aW9uSW5Qcm9ncmVzcygpO1xyXG4gICAgICAgIGlmIChtYXRjaENsaWVudElkKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBjbGllbnRJZCA9PT0gdGhpcy5jbGllbnRJZDtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIHJldHVybiAhIWNsaWVudElkO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIGdldEludGVyYWN0aW9uSW5Qcm9ncmVzcygpIHtcclxuICAgICAgICBjb25zdCBrZXkgPSBgJHtDb25zdGFudHMuQ0FDSEVfUFJFRklYfS4ke1RlbXBvcmFyeUNhY2hlS2V5cy5JTlRFUkFDVElPTl9TVEFUVVNfS0VZfWA7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0VGVtcG9yYXJ5Q2FjaGUoa2V5LCBmYWxzZSk7XHJcbiAgICB9XHJcbiAgICBzZXRJbnRlcmFjdGlvbkluUHJvZ3Jlc3MoaW5Qcm9ncmVzcykge1xyXG4gICAgICAgIC8vIEVuc3VyZSB3ZSBkb24ndCBvdmVyd3JpdGUgaW50ZXJhY3Rpb24gaW4gcHJvZ3Jlc3MgZm9yIGEgZGlmZmVyZW50IGNsaWVudElkXHJcbiAgICAgICAgY29uc3Qga2V5ID0gYCR7Q29uc3RhbnRzLkNBQ0hFX1BSRUZJWH0uJHtUZW1wb3JhcnlDYWNoZUtleXMuSU5URVJBQ1RJT05fU1RBVFVTX0tFWX1gO1xyXG4gICAgICAgIGlmIChpblByb2dyZXNzKSB7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLmdldEludGVyYWN0aW9uSW5Qcm9ncmVzcygpKSB7XHJcbiAgICAgICAgICAgICAgICB0aHJvdyBjcmVhdGVCcm93c2VyQXV0aEVycm9yKGludGVyYWN0aW9uSW5Qcm9ncmVzcyk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAvLyBObyBpbnRlcmFjdGlvbiBpcyBpbiBwcm9ncmVzc1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zZXRUZW1wb3JhcnlDYWNoZShrZXksIHRoaXMuY2xpZW50SWQsIGZhbHNlKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIGlmICghaW5Qcm9ncmVzcyAmJlxyXG4gICAgICAgICAgICB0aGlzLmdldEludGVyYWN0aW9uSW5Qcm9ncmVzcygpID09PSB0aGlzLmNsaWVudElkKSB7XHJcbiAgICAgICAgICAgIHRoaXMucmVtb3ZlVGVtcG9yYXJ5SXRlbShrZXkpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIC8qKlxyXG4gICAgICogUmV0dXJucyB1c2VybmFtZSByZXRyaWV2ZWQgZnJvbSBBREFMIG9yIE1TQUwgdjEgaWRUb2tlblxyXG4gICAgICogQGRlcHJlY2F0ZWRcclxuICAgICAqL1xyXG4gICAgZ2V0TGVnYWN5TG9naW5IaW50KCkge1xyXG4gICAgICAgIC8vIE9ubHkgY2hlY2sgZm9yIGFkYWwvbXNhbCB0b2tlbiBpZiBubyBTU08gcGFyYW1zIGFyZSBiZWluZyB1c2VkXHJcbiAgICAgICAgY29uc3QgYWRhbElkVG9rZW5TdHJpbmcgPSB0aGlzLmdldFRlbXBvcmFyeUNhY2hlKFBlcnNpc3RlbnRDYWNoZUtleXMuQURBTF9JRF9UT0tFTik7XHJcbiAgICAgICAgaWYgKGFkYWxJZFRva2VuU3RyaW5nKSB7XHJcbiAgICAgICAgICAgIHRoaXMuYnJvd3NlclN0b3JhZ2UucmVtb3ZlSXRlbShQZXJzaXN0ZW50Q2FjaGVLZXlzLkFEQUxfSURfVE9LRU4pO1xyXG4gICAgICAgICAgICB0aGlzLmxvZ2dlci52ZXJib3NlKFwiQ2FjaGVkIEFEQUwgaWQgdG9rZW4gcmV0cmlldmVkLlwiKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgLy8gQ2hlY2sgZm9yIGNhY2hlZCBNU0FMIHYxIGlkIHRva2VuXHJcbiAgICAgICAgY29uc3QgbXNhbElkVG9rZW5TdHJpbmcgPSB0aGlzLmdldFRlbXBvcmFyeUNhY2hlKFBlcnNpc3RlbnRDYWNoZUtleXMuSURfVE9LRU4sIHRydWUpO1xyXG4gICAgICAgIGlmIChtc2FsSWRUb2tlblN0cmluZykge1xyXG4gICAgICAgICAgICB0aGlzLmJyb3dzZXJTdG9yYWdlLnJlbW92ZUl0ZW0odGhpcy5nZW5lcmF0ZUNhY2hlS2V5KFBlcnNpc3RlbnRDYWNoZUtleXMuSURfVE9LRU4pKTtcclxuICAgICAgICAgICAgdGhpcy5sb2dnZXIudmVyYm9zZShcIkNhY2hlZCBNU0FMLmpzIHYxIGlkIHRva2VuIHJldHJpZXZlZFwiKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgY29uc3QgY2FjaGVkSWRUb2tlblN0cmluZyA9IG1zYWxJZFRva2VuU3RyaW5nIHx8IGFkYWxJZFRva2VuU3RyaW5nO1xyXG4gICAgICAgIGlmIChjYWNoZWRJZFRva2VuU3RyaW5nKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGlkVG9rZW5DbGFpbXMgPSBBdXRoVG9rZW4uZXh0cmFjdFRva2VuQ2xhaW1zKGNhY2hlZElkVG9rZW5TdHJpbmcsIGJhc2U2NERlY29kZSk7XHJcbiAgICAgICAgICAgIGlmIChpZFRva2VuQ2xhaW1zLnByZWZlcnJlZF91c2VybmFtZSkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5sb2dnZXIudmVyYm9zZShcIk5vIFNTTyBwYXJhbXMgdXNlZCBhbmQgQURBTC9NU0FMIHYxIHRva2VuIHJldHJpZXZlZCwgc2V0dGluZyBBREFML01TQUwgdjEgcHJlZmVycmVkX3VzZXJuYW1lIGFzIGxvZ2luSGludFwiKTtcclxuICAgICAgICAgICAgICAgIHJldHVybiBpZFRva2VuQ2xhaW1zLnByZWZlcnJlZF91c2VybmFtZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIGlmIChpZFRva2VuQ2xhaW1zLnVwbikge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5sb2dnZXIudmVyYm9zZShcIk5vIFNTTyBwYXJhbXMgdXNlZCBhbmQgQURBTC9NU0FMIHYxIHRva2VuIHJldHJpZXZlZCwgc2V0dGluZyBBREFML01TQUwgdjEgdXBuIGFzIGxvZ2luSGludFwiKTtcclxuICAgICAgICAgICAgICAgIHJldHVybiBpZFRva2VuQ2xhaW1zLnVwbjtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHRoaXMubG9nZ2VyLnZlcmJvc2UoXCJObyBTU08gcGFyYW1zIHVzZWQgYW5kIEFEQUwvTVNBTCB2MSB0b2tlbiByZXRyaWV2ZWQsIGhvd2V2ZXIsIG5vIGFjY291bnQgaGludCBjbGFpbSBmb3VuZC4gRW5hYmxlIHByZWZlcnJlZF91c2VybmFtZSBvciB1cG4gaWQgdG9rZW4gY2xhaW0gdG8gZ2V0IFNTTy5cIik7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICB9XHJcbiAgICAvKipcclxuICAgICAqIFVwZGF0ZXMgYSBjcmVkZW50aWFsJ3MgY2FjaGUga2V5IGlmIHRoZSBjdXJyZW50IGNhY2hlIGtleSBpcyBvdXRkYXRlZFxyXG4gICAgICovXHJcbiAgICB1cGRhdGVDcmVkZW50aWFsQ2FjaGVLZXkoY3VycmVudENhY2hlS2V5LCBjcmVkZW50aWFsKSB7XHJcbiAgICAgICAgY29uc3QgdXBkYXRlZENhY2hlS2V5ID0gQ2FjaGVIZWxwZXJzLmdlbmVyYXRlQ3JlZGVudGlhbEtleShjcmVkZW50aWFsKTtcclxuICAgICAgICBpZiAoY3VycmVudENhY2hlS2V5ICE9PSB1cGRhdGVkQ2FjaGVLZXkpIHtcclxuICAgICAgICAgICAgY29uc3QgY2FjaGVJdGVtID0gdGhpcy5nZXRJdGVtKGN1cnJlbnRDYWNoZUtleSk7XHJcbiAgICAgICAgICAgIGlmIChjYWNoZUl0ZW0pIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuYnJvd3NlclN0b3JhZ2UucmVtb3ZlSXRlbShjdXJyZW50Q2FjaGVLZXkpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zZXRJdGVtKHVwZGF0ZWRDYWNoZUtleSwgY2FjaGVJdGVtKTtcclxuICAgICAgICAgICAgICAgIHRoaXMubG9nZ2VyLnZlcmJvc2UoYFVwZGF0ZWQgYW4gb3V0ZGF0ZWQgJHtjcmVkZW50aWFsLmNyZWRlbnRpYWxUeXBlfSBjYWNoZSBrZXlgKTtcclxuICAgICAgICAgICAgICAgIHJldHVybiB1cGRhdGVkQ2FjaGVLZXk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmxvZ2dlci5lcnJvcihgQXR0ZW1wdGVkIHRvIHVwZGF0ZSBhbiBvdXRkYXRlZCAke2NyZWRlbnRpYWwuY3JlZGVudGlhbFR5cGV9IGNhY2hlIGtleSBidXQgbm8gaXRlbSBtYXRjaGluZyB0aGUgb3V0ZGF0ZWQga2V5IHdhcyBmb3VuZCBpbiBzdG9yYWdlYCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIGN1cnJlbnRDYWNoZUtleTtcclxuICAgIH1cclxuICAgIC8qKlxyXG4gICAgICogQnVpbGRzIGNyZWRlbnRpYWwgZW50aXRpZXMgZnJvbSBBdXRoZW50aWNhdGlvblJlc3VsdCBvYmplY3QgYW5kIHNhdmVzIHRoZSByZXN1bHRpbmcgY3JlZGVudGlhbHMgdG8gdGhlIGNhY2hlXHJcbiAgICAgKiBAcGFyYW0gcmVzdWx0XHJcbiAgICAgKiBAcGFyYW0gcmVxdWVzdFxyXG4gICAgICovXHJcbiAgICBhc3luYyBoeWRyYXRlQ2FjaGUocmVzdWx0LCByZXF1ZXN0KSB7XHJcbiAgICAgICAgY29uc3QgaWRUb2tlbkVudGl0eSA9IENhY2hlSGVscGVycy5jcmVhdGVJZFRva2VuRW50aXR5KHJlc3VsdC5hY2NvdW50Py5ob21lQWNjb3VudElkLCByZXN1bHQuYWNjb3VudD8uZW52aXJvbm1lbnQsIHJlc3VsdC5pZFRva2VuLCB0aGlzLmNsaWVudElkLCByZXN1bHQudGVuYW50SWQpO1xyXG4gICAgICAgIGxldCBjbGFpbXNIYXNoO1xyXG4gICAgICAgIGlmIChyZXF1ZXN0LmNsYWltcykge1xyXG4gICAgICAgICAgICBjbGFpbXNIYXNoID0gYXdhaXQgdGhpcy5jcnlwdG9JbXBsLmhhc2hTdHJpbmcocmVxdWVzdC5jbGFpbXMpO1xyXG4gICAgICAgIH1cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBtZXRhIGRhdGEgZm9yIGNhY2hlIHN0b3JlcyB0aW1lIGluIHNlY29uZHMgZnJvbSBlcG9jaFxyXG4gICAgICAgICAqIEF1dGhlbnRpY2F0aW9uUmVzdWx0IHJldHVybnMgZXhwaXJlc09uIGFuZCBleHRFeHBpcmVzT24gaW4gbWlsbGlzZWNvbmRzIChhcyBhIERhdGUgb2JqZWN0IHdoaWNoIGlzIGluIG1zKVxyXG4gICAgICAgICAqIFdlIG5lZWQgdG8gbWFwIHRoZXNlIGZvciB0aGUgY2FjaGUgd2hlbiBidWlsZGluZyB0b2tlbnMgZnJvbSBBdXRoZW50aWNhdGlvblJlc3VsdFxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogVGhlIG5leHQgTVNBTCBWRnV0dXJlIHNob3VsZCBtYXAgdGhlc2UgYm90aCB0byBzYW1lIHZhbHVlIGlmIHBvc3NpYmxlXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgY29uc3QgYWNjZXNzVG9rZW5FbnRpdHkgPSBDYWNoZUhlbHBlcnMuY3JlYXRlQWNjZXNzVG9rZW5FbnRpdHkocmVzdWx0LmFjY291bnQ/LmhvbWVBY2NvdW50SWQsIHJlc3VsdC5hY2NvdW50LmVudmlyb25tZW50LCByZXN1bHQuYWNjZXNzVG9rZW4sIHRoaXMuY2xpZW50SWQsIHJlc3VsdC50ZW5hbnRJZCwgcmVzdWx0LnNjb3Blcy5qb2luKFwiIFwiKSwgcmVzdWx0LmV4cGlyZXNPbiA/IHJlc3VsdC5leHBpcmVzT24uZ2V0VGltZSgpIC8gMTAwMCA6IDAsIHJlc3VsdC5leHRFeHBpcmVzT24gPyByZXN1bHQuZXh0RXhwaXJlc09uLmdldFRpbWUoKSAvIDEwMDAgOiAwLCBiYXNlNjREZWNvZGUsIHVuZGVmaW5lZCwgLy8gcmVmcmVzaE9uXHJcbiAgICAgICAgcmVzdWx0LnRva2VuVHlwZSwgdW5kZWZpbmVkLCAvLyB1c2VyQXNzZXJ0aW9uSGFzaFxyXG4gICAgICAgIHJlcXVlc3Quc3NoS2lkLCByZXF1ZXN0LmNsYWltcywgY2xhaW1zSGFzaCk7XHJcbiAgICAgICAgY29uc3QgY2FjaGVSZWNvcmQgPSB7XHJcbiAgICAgICAgICAgIGlkVG9rZW46IGlkVG9rZW5FbnRpdHksXHJcbiAgICAgICAgICAgIGFjY2Vzc1Rva2VuOiBhY2Nlc3NUb2tlbkVudGl0eSxcclxuICAgICAgICB9O1xyXG4gICAgICAgIHJldHVybiB0aGlzLnNhdmVDYWNoZVJlY29yZChjYWNoZVJlY29yZCk7XHJcbiAgICB9XHJcbiAgICAvKipcclxuICAgICAqIHNhdmVzIGEgY2FjaGUgcmVjb3JkXHJcbiAgICAgKiBAcGFyYW0gY2FjaGVSZWNvcmQge0NhY2hlUmVjb3JkfVxyXG4gICAgICogQHBhcmFtIHN0b3JlSW5DYWNoZSB7P1N0b3JlSW5DYWNoZX1cclxuICAgICAqIEBwYXJhbSBjb3JyZWxhdGlvbklkIHs/c3RyaW5nfSBjb3JyZWxhdGlvbiBpZFxyXG4gICAgICovXHJcbiAgICBhc3luYyBzYXZlQ2FjaGVSZWNvcmQoY2FjaGVSZWNvcmQsIHN0b3JlSW5DYWNoZSwgY29ycmVsYXRpb25JZCkge1xyXG4gICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgIGF3YWl0IHN1cGVyLnNhdmVDYWNoZVJlY29yZChjYWNoZVJlY29yZCwgc3RvcmVJbkNhY2hlLCBjb3JyZWxhdGlvbklkKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgY2F0Y2ggKGUpIHtcclxuICAgICAgICAgICAgaWYgKGUgaW5zdGFuY2VvZiBDYWNoZUVycm9yICYmXHJcbiAgICAgICAgICAgICAgICB0aGlzLnBlcmZvcm1hbmNlQ2xpZW50ICYmXHJcbiAgICAgICAgICAgICAgICBjb3JyZWxhdGlvbklkKSB7XHJcbiAgICAgICAgICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHRva2VuS2V5cyA9IHRoaXMuZ2V0VG9rZW5LZXlzKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5wZXJmb3JtYW5jZUNsaWVudC5hZGRGaWVsZHMoe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjYWNoZVJ0Q291bnQ6IHRva2VuS2V5cy5yZWZyZXNoVG9rZW4ubGVuZ3RoLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBjYWNoZUlkQ291bnQ6IHRva2VuS2V5cy5pZFRva2VuLmxlbmd0aCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgY2FjaGVBdENvdW50OiB0b2tlbktleXMuYWNjZXNzVG9rZW4ubGVuZ3RoLFxyXG4gICAgICAgICAgICAgICAgICAgIH0sIGNvcnJlbGF0aW9uSWQpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgY2F0Y2ggKGUpIHsgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHRocm93IGU7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG59XHJcbmNvbnN0IERFRkFVTFRfQlJPV1NFUl9DQUNIRV9NQU5BR0VSID0gKGNsaWVudElkLCBsb2dnZXIpID0+IHtcclxuICAgIGNvbnN0IGNhY2hlT3B0aW9ucyA9IHtcclxuICAgICAgICBjYWNoZUxvY2F0aW9uOiBCcm93c2VyQ2FjaGVMb2NhdGlvbi5NZW1vcnlTdG9yYWdlLFxyXG4gICAgICAgIHRlbXBvcmFyeUNhY2hlTG9jYXRpb246IEJyb3dzZXJDYWNoZUxvY2F0aW9uLk1lbW9yeVN0b3JhZ2UsXHJcbiAgICAgICAgc3RvcmVBdXRoU3RhdGVJbkNvb2tpZTogZmFsc2UsXHJcbiAgICAgICAgc2VjdXJlQ29va2llczogZmFsc2UsXHJcbiAgICAgICAgY2FjaGVNaWdyYXRpb25FbmFibGVkOiBmYWxzZSxcclxuICAgICAgICBjbGFpbXNCYXNlZENhY2hpbmdFbmFibGVkOiBmYWxzZSxcclxuICAgIH07XHJcbiAgICByZXR1cm4gbmV3IEJyb3dzZXJDYWNoZU1hbmFnZXIoY2xpZW50SWQsIGNhY2hlT3B0aW9ucywgREVGQVVMVF9DUllQVE9fSU1QTEVNRU5UQVRJT04sIGxvZ2dlcik7XHJcbn07XG5cbmV4cG9ydCB7IEJyb3dzZXJDYWNoZU1hbmFnZXIsIERFRkFVTFRfQlJPV1NFUl9DQUNIRV9NQU5BR0VSIH07XG4vLyMgc291cmNlTWFwcGluZ1VSTD1Ccm93c2VyQ2FjaGVNYW5hZ2VyLm1qcy5tYXBcbiIsIi8qISBAYXp1cmUvbXNhbC1icm93c2VyIHYzLjI4LjEgMjAyNS0wMS0xNCAqL1xuJ3VzZSBzdHJpY3QnO1xuLypcclxuICogQ29weXJpZ2h0IChjKSBNaWNyb3NvZnQgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuXHJcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgTGljZW5zZS5cclxuICovXHJcbi8qKlxyXG4gKiBSZXR1cm5zIGFsbCB0aGUgYWNjb3VudHMgaW4gdGhlIGNhY2hlIHRoYXQgbWF0Y2ggdGhlIG9wdGlvbmFsIGZpbHRlci4gSWYgbm8gZmlsdGVyIGlzIHByb3ZpZGVkLCBhbGwgYWNjb3VudHMgYXJlIHJldHVybmVkLlxyXG4gKiBAcGFyYW0gYWNjb3VudEZpbHRlciAtIChPcHRpb25hbCkgZmlsdGVyIHRvIG5hcnJvdyBkb3duIHRoZSBhY2NvdW50cyByZXR1cm5lZFxyXG4gKiBAcmV0dXJucyBBcnJheSBvZiBBY2NvdW50SW5mbyBvYmplY3RzIGluIGNhY2hlXHJcbiAqL1xyXG5mdW5jdGlvbiBnZXRBbGxBY2NvdW50cyhsb2dnZXIsIGJyb3dzZXJTdG9yYWdlLCBpc0luQnJvd3NlciwgYWNjb3VudEZpbHRlcikge1xyXG4gICAgbG9nZ2VyLnZlcmJvc2UoXCJnZXRBbGxBY2NvdW50cyBjYWxsZWRcIik7XHJcbiAgICByZXR1cm4gaXNJbkJyb3dzZXIgPyBicm93c2VyU3RvcmFnZS5nZXRBbGxBY2NvdW50cyhhY2NvdW50RmlsdGVyKSA6IFtdO1xyXG59XHJcbi8qKlxyXG4gKiBSZXR1cm5zIHRoZSBmaXJzdCBhY2NvdW50IGZvdW5kIGluIHRoZSBjYWNoZSB0aGF0IG1hdGNoZXMgdGhlIGFjY291bnQgZmlsdGVyIHBhc3NlZCBpbi5cclxuICogQHBhcmFtIGFjY291bnRGaWx0ZXJcclxuICogQHJldHVybnMgVGhlIGZpcnN0IGFjY291bnQgZm91bmQgaW4gdGhlIGNhY2hlIG1hdGNoaW5nIHRoZSBwcm92aWRlZCBmaWx0ZXIgb3IgbnVsbCBpZiBubyBhY2NvdW50IGNvdWxkIGJlIGZvdW5kLlxyXG4gKi9cclxuZnVuY3Rpb24gZ2V0QWNjb3VudChhY2NvdW50RmlsdGVyLCBsb2dnZXIsIGJyb3dzZXJTdG9yYWdlKSB7XHJcbiAgICBsb2dnZXIudHJhY2UoXCJnZXRBY2NvdW50IGNhbGxlZFwiKTtcclxuICAgIGlmIChPYmplY3Qua2V5cyhhY2NvdW50RmlsdGVyKS5sZW5ndGggPT09IDApIHtcclxuICAgICAgICBsb2dnZXIud2FybmluZyhcImdldEFjY291bnQ6IE5vIGFjY291bnRGaWx0ZXIgcHJvdmlkZWRcIik7XHJcbiAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICB9XHJcbiAgICBjb25zdCBhY2NvdW50ID0gYnJvd3NlclN0b3JhZ2UuZ2V0QWNjb3VudEluZm9GaWx0ZXJlZEJ5KGFjY291bnRGaWx0ZXIpO1xyXG4gICAgaWYgKGFjY291bnQpIHtcclxuICAgICAgICBsb2dnZXIudmVyYm9zZShcImdldEFjY291bnQ6IEFjY291bnQgbWF0Y2hpbmcgcHJvdmlkZWQgZmlsdGVyIGZvdW5kLCByZXR1cm5pbmdcIik7XHJcbiAgICAgICAgcmV0dXJuIGFjY291bnQ7XHJcbiAgICB9XHJcbiAgICBlbHNlIHtcclxuICAgICAgICBsb2dnZXIudmVyYm9zZShcImdldEFjY291bnQ6IE5vIG1hdGNoaW5nIGFjY291bnQgZm91bmQsIHJldHVybmluZyBudWxsXCIpO1xyXG4gICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgfVxyXG59XHJcbi8qKlxyXG4gKiBSZXR1cm5zIHRoZSBzaWduZWQgaW4gYWNjb3VudCBtYXRjaGluZyB1c2VybmFtZS5cclxuICogKHRoZSBhY2NvdW50IG9iamVjdCBpcyBjcmVhdGVkIGF0IHRoZSB0aW1lIG9mIHN1Y2Nlc3NmdWwgbG9naW4pXHJcbiAqIG9yIG51bGwgd2hlbiBubyBtYXRjaGluZyBhY2NvdW50IGlzIGZvdW5kLlxyXG4gKiBUaGlzIEFQSSBpcyBwcm92aWRlZCBmb3IgY29udmVuaWVuY2UgYnV0IGdldEFjY291bnRCeUlkIHNob3VsZCBiZSB1c2VkIGZvciBiZXN0IHJlbGlhYmlsaXR5XHJcbiAqIEBwYXJhbSB1c2VybmFtZVxyXG4gKiBAcmV0dXJucyBUaGUgYWNjb3VudCBvYmplY3Qgc3RvcmVkIGluIE1TQUxcclxuICovXHJcbmZ1bmN0aW9uIGdldEFjY291bnRCeVVzZXJuYW1lKHVzZXJuYW1lLCBsb2dnZXIsIGJyb3dzZXJTdG9yYWdlKSB7XHJcbiAgICBsb2dnZXIudHJhY2UoXCJnZXRBY2NvdW50QnlVc2VybmFtZSBjYWxsZWRcIik7XHJcbiAgICBpZiAoIXVzZXJuYW1lKSB7XHJcbiAgICAgICAgbG9nZ2VyLndhcm5pbmcoXCJnZXRBY2NvdW50QnlVc2VybmFtZTogTm8gdXNlcm5hbWUgcHJvdmlkZWRcIik7XHJcbiAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICB9XHJcbiAgICBjb25zdCBhY2NvdW50ID0gYnJvd3NlclN0b3JhZ2UuZ2V0QWNjb3VudEluZm9GaWx0ZXJlZEJ5KHtcclxuICAgICAgICB1c2VybmFtZSxcclxuICAgIH0pO1xyXG4gICAgaWYgKGFjY291bnQpIHtcclxuICAgICAgICBsb2dnZXIudmVyYm9zZShcImdldEFjY291bnRCeVVzZXJuYW1lOiBBY2NvdW50IG1hdGNoaW5nIHVzZXJuYW1lIGZvdW5kLCByZXR1cm5pbmdcIik7XHJcbiAgICAgICAgbG9nZ2VyLnZlcmJvc2VQaWkoYGdldEFjY291bnRCeVVzZXJuYW1lOiBSZXR1cm5pbmcgc2lnbmVkLWluIGFjY291bnRzIG1hdGNoaW5nIHVzZXJuYW1lOiAke3VzZXJuYW1lfWApO1xyXG4gICAgICAgIHJldHVybiBhY2NvdW50O1xyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcbiAgICAgICAgbG9nZ2VyLnZlcmJvc2UoXCJnZXRBY2NvdW50QnlVc2VybmFtZTogTm8gbWF0Y2hpbmcgYWNjb3VudCBmb3VuZCwgcmV0dXJuaW5nIG51bGxcIik7XHJcbiAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICB9XHJcbn1cclxuLyoqXHJcbiAqIFJldHVybnMgdGhlIHNpZ25lZCBpbiBhY2NvdW50IG1hdGNoaW5nIGhvbWVBY2NvdW50SWQuXHJcbiAqICh0aGUgYWNjb3VudCBvYmplY3QgaXMgY3JlYXRlZCBhdCB0aGUgdGltZSBvZiBzdWNjZXNzZnVsIGxvZ2luKVxyXG4gKiBvciBudWxsIHdoZW4gbm8gbWF0Y2hpbmcgYWNjb3VudCBpcyBmb3VuZFxyXG4gKiBAcGFyYW0gaG9tZUFjY291bnRJZFxyXG4gKiBAcmV0dXJucyBUaGUgYWNjb3VudCBvYmplY3Qgc3RvcmVkIGluIE1TQUxcclxuICovXHJcbmZ1bmN0aW9uIGdldEFjY291bnRCeUhvbWVJZChob21lQWNjb3VudElkLCBsb2dnZXIsIGJyb3dzZXJTdG9yYWdlKSB7XHJcbiAgICBsb2dnZXIudHJhY2UoXCJnZXRBY2NvdW50QnlIb21lSWQgY2FsbGVkXCIpO1xyXG4gICAgaWYgKCFob21lQWNjb3VudElkKSB7XHJcbiAgICAgICAgbG9nZ2VyLndhcm5pbmcoXCJnZXRBY2NvdW50QnlIb21lSWQ6IE5vIGhvbWVBY2NvdW50SWQgcHJvdmlkZWRcIik7XHJcbiAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICB9XHJcbiAgICBjb25zdCBhY2NvdW50ID0gYnJvd3NlclN0b3JhZ2UuZ2V0QWNjb3VudEluZm9GaWx0ZXJlZEJ5KHtcclxuICAgICAgICBob21lQWNjb3VudElkLFxyXG4gICAgfSk7XHJcbiAgICBpZiAoYWNjb3VudCkge1xyXG4gICAgICAgIGxvZ2dlci52ZXJib3NlKFwiZ2V0QWNjb3VudEJ5SG9tZUlkOiBBY2NvdW50IG1hdGNoaW5nIGhvbWVBY2NvdW50SWQgZm91bmQsIHJldHVybmluZ1wiKTtcclxuICAgICAgICBsb2dnZXIudmVyYm9zZVBpaShgZ2V0QWNjb3VudEJ5SG9tZUlkOiBSZXR1cm5pbmcgc2lnbmVkLWluIGFjY291bnRzIG1hdGNoaW5nIGhvbWVBY2NvdW50SWQ6ICR7aG9tZUFjY291bnRJZH1gKTtcclxuICAgICAgICByZXR1cm4gYWNjb3VudDtcclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICAgIGxvZ2dlci52ZXJib3NlKFwiZ2V0QWNjb3VudEJ5SG9tZUlkOiBObyBtYXRjaGluZyBhY2NvdW50IGZvdW5kLCByZXR1cm5pbmcgbnVsbFwiKTtcclxuICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgIH1cclxufVxyXG4vKipcclxuICogUmV0dXJucyB0aGUgc2lnbmVkIGluIGFjY291bnQgbWF0Y2hpbmcgbG9jYWxBY2NvdW50SWQuXHJcbiAqICh0aGUgYWNjb3VudCBvYmplY3QgaXMgY3JlYXRlZCBhdCB0aGUgdGltZSBvZiBzdWNjZXNzZnVsIGxvZ2luKVxyXG4gKiBvciBudWxsIHdoZW4gbm8gbWF0Y2hpbmcgYWNjb3VudCBpcyBmb3VuZFxyXG4gKiBAcGFyYW0gbG9jYWxBY2NvdW50SWRcclxuICogQHJldHVybnMgVGhlIGFjY291bnQgb2JqZWN0IHN0b3JlZCBpbiBNU0FMXHJcbiAqL1xyXG5mdW5jdGlvbiBnZXRBY2NvdW50QnlMb2NhbElkKGxvY2FsQWNjb3VudElkLCBsb2dnZXIsIGJyb3dzZXJTdG9yYWdlKSB7XHJcbiAgICBsb2dnZXIudHJhY2UoXCJnZXRBY2NvdW50QnlMb2NhbElkIGNhbGxlZFwiKTtcclxuICAgIGlmICghbG9jYWxBY2NvdW50SWQpIHtcclxuICAgICAgICBsb2dnZXIud2FybmluZyhcImdldEFjY291bnRCeUxvY2FsSWQ6IE5vIGxvY2FsQWNjb3VudElkIHByb3ZpZGVkXCIpO1xyXG4gICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgfVxyXG4gICAgY29uc3QgYWNjb3VudCA9IGJyb3dzZXJTdG9yYWdlLmdldEFjY291bnRJbmZvRmlsdGVyZWRCeSh7XHJcbiAgICAgICAgbG9jYWxBY2NvdW50SWQsXHJcbiAgICB9KTtcclxuICAgIGlmIChhY2NvdW50KSB7XHJcbiAgICAgICAgbG9nZ2VyLnZlcmJvc2UoXCJnZXRBY2NvdW50QnlMb2NhbElkOiBBY2NvdW50IG1hdGNoaW5nIGxvY2FsQWNjb3VudElkIGZvdW5kLCByZXR1cm5pbmdcIik7XHJcbiAgICAgICAgbG9nZ2VyLnZlcmJvc2VQaWkoYGdldEFjY291bnRCeUxvY2FsSWQ6IFJldHVybmluZyBzaWduZWQtaW4gYWNjb3VudHMgbWF0Y2hpbmcgbG9jYWxBY2NvdW50SWQ6ICR7bG9jYWxBY2NvdW50SWR9YCk7XHJcbiAgICAgICAgcmV0dXJuIGFjY291bnQ7XHJcbiAgICB9XHJcbiAgICBlbHNlIHtcclxuICAgICAgICBsb2dnZXIudmVyYm9zZShcImdldEFjY291bnRCeUxvY2FsSWQ6IE5vIG1hdGNoaW5nIGFjY291bnQgZm91bmQsIHJldHVybmluZyBudWxsXCIpO1xyXG4gICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgfVxyXG59XHJcbi8qKlxyXG4gKiBTZXRzIHRoZSBhY2NvdW50IHRvIHVzZSBhcyB0aGUgYWN0aXZlIGFjY291bnQuIElmIG5vIGFjY291bnQgaXMgcGFzc2VkIHRvIHRoZSBhY3F1aXJlVG9rZW4gQVBJcywgdGhlbiBNU0FMIHdpbGwgdXNlIHRoaXMgYWN0aXZlIGFjY291bnQuXHJcbiAqIEBwYXJhbSBhY2NvdW50XHJcbiAqL1xyXG5mdW5jdGlvbiBzZXRBY3RpdmVBY2NvdW50KGFjY291bnQsIGJyb3dzZXJTdG9yYWdlKSB7XHJcbiAgICBicm93c2VyU3RvcmFnZS5zZXRBY3RpdmVBY2NvdW50KGFjY291bnQpO1xyXG59XHJcbi8qKlxyXG4gKiBHZXRzIHRoZSBjdXJyZW50bHkgYWN0aXZlIGFjY291bnRcclxuICovXHJcbmZ1bmN0aW9uIGdldEFjdGl2ZUFjY291bnQoYnJvd3NlclN0b3JhZ2UpIHtcclxuICAgIHJldHVybiBicm93c2VyU3RvcmFnZS5nZXRBY3RpdmVBY2NvdW50KCk7XHJcbn1cblxuZXhwb3J0IHsgZ2V0QWNjb3VudCwgZ2V0QWNjb3VudEJ5SG9tZUlkLCBnZXRBY2NvdW50QnlMb2NhbElkLCBnZXRBY2NvdW50QnlVc2VybmFtZSwgZ2V0QWN0aXZlQWNjb3VudCwgZ2V0QWxsQWNjb3VudHMsIHNldEFjdGl2ZUFjY291bnQgfTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPUFjY291bnRNYW5hZ2VyLm1qcy5tYXBcbiIsIi8qISBAYXp1cmUvbXNhbC1icm93c2VyIHYzLjI4LjEgMjAyNS0wMS0xNCAqL1xuJ3VzZSBzdHJpY3QnO1xuLypcclxuICogQ29weXJpZ2h0IChjKSBNaWNyb3NvZnQgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuXHJcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgTGljZW5zZS5cclxuICovXHJcbmNvbnN0IEV2ZW50VHlwZSA9IHtcclxuICAgIElOSVRJQUxJWkVfU1RBUlQ6IFwibXNhbDppbml0aWFsaXplU3RhcnRcIixcclxuICAgIElOSVRJQUxJWkVfRU5EOiBcIm1zYWw6aW5pdGlhbGl6ZUVuZFwiLFxyXG4gICAgQUNDT1VOVF9BRERFRDogXCJtc2FsOmFjY291bnRBZGRlZFwiLFxyXG4gICAgQUNDT1VOVF9SRU1PVkVEOiBcIm1zYWw6YWNjb3VudFJlbW92ZWRcIixcclxuICAgIEFDVElWRV9BQ0NPVU5UX0NIQU5HRUQ6IFwibXNhbDphY3RpdmVBY2NvdW50Q2hhbmdlZFwiLFxyXG4gICAgTE9HSU5fU1RBUlQ6IFwibXNhbDpsb2dpblN0YXJ0XCIsXHJcbiAgICBMT0dJTl9TVUNDRVNTOiBcIm1zYWw6bG9naW5TdWNjZXNzXCIsXHJcbiAgICBMT0dJTl9GQUlMVVJFOiBcIm1zYWw6bG9naW5GYWlsdXJlXCIsXHJcbiAgICBBQ1FVSVJFX1RPS0VOX1NUQVJUOiBcIm1zYWw6YWNxdWlyZVRva2VuU3RhcnRcIixcclxuICAgIEFDUVVJUkVfVE9LRU5fU1VDQ0VTUzogXCJtc2FsOmFjcXVpcmVUb2tlblN1Y2Nlc3NcIixcclxuICAgIEFDUVVJUkVfVE9LRU5fRkFJTFVSRTogXCJtc2FsOmFjcXVpcmVUb2tlbkZhaWx1cmVcIixcclxuICAgIEFDUVVJUkVfVE9LRU5fTkVUV09SS19TVEFSVDogXCJtc2FsOmFjcXVpcmVUb2tlbkZyb21OZXR3b3JrU3RhcnRcIixcclxuICAgIFNTT19TSUxFTlRfU1RBUlQ6IFwibXNhbDpzc29TaWxlbnRTdGFydFwiLFxyXG4gICAgU1NPX1NJTEVOVF9TVUNDRVNTOiBcIm1zYWw6c3NvU2lsZW50U3VjY2Vzc1wiLFxyXG4gICAgU1NPX1NJTEVOVF9GQUlMVVJFOiBcIm1zYWw6c3NvU2lsZW50RmFpbHVyZVwiLFxyXG4gICAgQUNRVUlSRV9UT0tFTl9CWV9DT0RFX1NUQVJUOiBcIm1zYWw6YWNxdWlyZVRva2VuQnlDb2RlU3RhcnRcIixcclxuICAgIEFDUVVJUkVfVE9LRU5fQllfQ09ERV9TVUNDRVNTOiBcIm1zYWw6YWNxdWlyZVRva2VuQnlDb2RlU3VjY2Vzc1wiLFxyXG4gICAgQUNRVUlSRV9UT0tFTl9CWV9DT0RFX0ZBSUxVUkU6IFwibXNhbDphY3F1aXJlVG9rZW5CeUNvZGVGYWlsdXJlXCIsXHJcbiAgICBIQU5ETEVfUkVESVJFQ1RfU1RBUlQ6IFwibXNhbDpoYW5kbGVSZWRpcmVjdFN0YXJ0XCIsXHJcbiAgICBIQU5ETEVfUkVESVJFQ1RfRU5EOiBcIm1zYWw6aGFuZGxlUmVkaXJlY3RFbmRcIixcclxuICAgIFBPUFVQX09QRU5FRDogXCJtc2FsOnBvcHVwT3BlbmVkXCIsXHJcbiAgICBMT0dPVVRfU1RBUlQ6IFwibXNhbDpsb2dvdXRTdGFydFwiLFxyXG4gICAgTE9HT1VUX1NVQ0NFU1M6IFwibXNhbDpsb2dvdXRTdWNjZXNzXCIsXHJcbiAgICBMT0dPVVRfRkFJTFVSRTogXCJtc2FsOmxvZ291dEZhaWx1cmVcIixcclxuICAgIExPR09VVF9FTkQ6IFwibXNhbDpsb2dvdXRFbmRcIixcclxuICAgIFJFU1RPUkVfRlJPTV9CRkNBQ0hFOiBcIm1zYWw6cmVzdG9yZUZyb21CRkNhY2hlXCIsXHJcbn07XG5cbmV4cG9ydCB7IEV2ZW50VHlwZSB9O1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9RXZlbnRUeXBlLm1qcy5tYXBcbiIsIi8qISBAYXp1cmUvbXNhbC1icm93c2VyIHYzLjI4LjEgMjAyNS0wMS0xNCAqL1xuJ3VzZSBzdHJpY3QnO1xuaW1wb3J0IHsgTG9nZ2VyIH0gZnJvbSAnQGF6dXJlL21zYWwtY29tbW9uL2Jyb3dzZXInO1xuaW1wb3J0IHsgY3JlYXRlR3VpZCB9IGZyb20gJy4uL3V0aWxzL0Jyb3dzZXJVdGlscy5tanMnO1xuXG4vKlxyXG4gKiBDb3B5cmlnaHQgKGMpIE1pY3Jvc29mdCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cclxuICogTGljZW5zZWQgdW5kZXIgdGhlIE1JVCBMaWNlbnNlLlxyXG4gKi9cclxuY2xhc3MgRXZlbnRIYW5kbGVyIHtcclxuICAgIGNvbnN0cnVjdG9yKGxvZ2dlcikge1xyXG4gICAgICAgIHRoaXMuZXZlbnRDYWxsYmFja3MgPSBuZXcgTWFwKCk7XHJcbiAgICAgICAgdGhpcy5sb2dnZXIgPSBsb2dnZXIgfHwgbmV3IExvZ2dlcih7fSk7XHJcbiAgICB9XHJcbiAgICAvKipcclxuICAgICAqIEFkZHMgZXZlbnQgY2FsbGJhY2tzIHRvIGFycmF5XHJcbiAgICAgKiBAcGFyYW0gY2FsbGJhY2sgLSBjYWxsYmFjayB0byBiZSBpbnZva2VkIHdoZW4gYW4gZXZlbnQgaXMgcmFpc2VkXHJcbiAgICAgKiBAcGFyYW0gZXZlbnRUeXBlcyAtIGxpc3Qgb2YgZXZlbnRzIHRoYXQgdGhpcyBjYWxsYmFjayB3aWxsIGJlIGludm9rZWQgZm9yLCBpZiBub3QgcHJvdmlkZWQgY2FsbGJhY2sgd2lsbCBiZSBpbnZva2VkIGZvciBhbGwgZXZlbnRzXHJcbiAgICAgKiBAcGFyYW0gY2FsbGJhY2tJZCAtIElkZW50aWZpZXIgZm9yIHRoZSBjYWxsYmFjaywgdXNlZCB0byBsb2NhdGUgYW5kIHJlbW92ZSB0aGUgY2FsbGJhY2sgd2hlbiBubyBsb25nZXIgcmVxdWlyZWRcclxuICAgICAqL1xyXG4gICAgYWRkRXZlbnRDYWxsYmFjayhjYWxsYmFjaywgZXZlbnRUeXBlcywgY2FsbGJhY2tJZCkge1xyXG4gICAgICAgIGlmICh0eXBlb2Ygd2luZG93ICE9PSBcInVuZGVmaW5lZFwiKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGlkID0gY2FsbGJhY2tJZCB8fCBjcmVhdGVHdWlkKCk7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLmV2ZW50Q2FsbGJhY2tzLmhhcyhpZCkpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMubG9nZ2VyLmVycm9yKGBFdmVudCBjYWxsYmFjayB3aXRoIGlkOiAke2lkfSBpcyBhbHJlYWR5IHJlZ2lzdGVyZWQuIFBsZWFzZSBwcm92aWRlIGEgdW5pcXVlIGlkIG9yIHJlbW92ZSB0aGUgZXhpc3RpbmcgY2FsbGJhY2sgYW5kIHRyeSBhZ2Fpbi5gKTtcclxuICAgICAgICAgICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHRoaXMuZXZlbnRDYWxsYmFja3Muc2V0KGlkLCBbY2FsbGJhY2ssIGV2ZW50VHlwZXMgfHwgW11dKTtcclxuICAgICAgICAgICAgdGhpcy5sb2dnZXIudmVyYm9zZShgRXZlbnQgY2FsbGJhY2sgcmVnaXN0ZXJlZCB3aXRoIGlkOiAke2lkfWApO1xyXG4gICAgICAgICAgICByZXR1cm4gaWQ7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgfVxyXG4gICAgLyoqXHJcbiAgICAgKiBSZW1vdmVzIGNhbGxiYWNrIHdpdGggcHJvdmlkZWQgaWQgZnJvbSBjYWxsYmFjayBhcnJheVxyXG4gICAgICogQHBhcmFtIGNhbGxiYWNrSWRcclxuICAgICAqL1xyXG4gICAgcmVtb3ZlRXZlbnRDYWxsYmFjayhjYWxsYmFja0lkKSB7XHJcbiAgICAgICAgdGhpcy5ldmVudENhbGxiYWNrcy5kZWxldGUoY2FsbGJhY2tJZCk7XHJcbiAgICAgICAgdGhpcy5sb2dnZXIudmVyYm9zZShgRXZlbnQgY2FsbGJhY2sgJHtjYWxsYmFja0lkfSByZW1vdmVkLmApO1xyXG4gICAgfVxyXG4gICAgLyoqXHJcbiAgICAgKiBFbWl0cyBldmVudHMgYnkgY2FsbGluZyBjYWxsYmFjayB3aXRoIGV2ZW50IG1lc3NhZ2VcclxuICAgICAqIEBwYXJhbSBldmVudFR5cGVcclxuICAgICAqIEBwYXJhbSBpbnRlcmFjdGlvblR5cGVcclxuICAgICAqIEBwYXJhbSBwYXlsb2FkXHJcbiAgICAgKiBAcGFyYW0gZXJyb3JcclxuICAgICAqL1xyXG4gICAgZW1pdEV2ZW50KGV2ZW50VHlwZSwgaW50ZXJhY3Rpb25UeXBlLCBwYXlsb2FkLCBlcnJvcikge1xyXG4gICAgICAgIGlmICh0eXBlb2Ygd2luZG93ICE9PSBcInVuZGVmaW5lZFwiKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IG1lc3NhZ2UgPSB7XHJcbiAgICAgICAgICAgICAgICBldmVudFR5cGU6IGV2ZW50VHlwZSxcclxuICAgICAgICAgICAgICAgIGludGVyYWN0aW9uVHlwZTogaW50ZXJhY3Rpb25UeXBlIHx8IG51bGwsXHJcbiAgICAgICAgICAgICAgICBwYXlsb2FkOiBwYXlsb2FkIHx8IG51bGwsXHJcbiAgICAgICAgICAgICAgICBlcnJvcjogZXJyb3IgfHwgbnVsbCxcclxuICAgICAgICAgICAgICAgIHRpbWVzdGFtcDogRGF0ZS5ub3coKSxcclxuICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgdGhpcy5ldmVudENhbGxiYWNrcy5mb3JFYWNoKChbY2FsbGJhY2ssIGV2ZW50VHlwZXNdLCBjYWxsYmFja0lkKSA9PiB7XHJcbiAgICAgICAgICAgICAgICBpZiAoZXZlbnRUeXBlcy5sZW5ndGggPT09IDAgfHxcclxuICAgICAgICAgICAgICAgICAgICBldmVudFR5cGVzLmluY2x1ZGVzKGV2ZW50VHlwZSkpIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmxvZ2dlci52ZXJib3NlKGBFbWl0dGluZyBldmVudCB0byBjYWxsYmFjayAke2NhbGxiYWNrSWR9OiAke2V2ZW50VHlwZX1gKTtcclxuICAgICAgICAgICAgICAgICAgICBjYWxsYmFjay5hcHBseShudWxsLCBbbWVzc2FnZV0pO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbn1cblxuZXhwb3J0IHsgRXZlbnRIYW5kbGVyIH07XG4vLyMgc291cmNlTWFwcGluZ1VSTD1FdmVudEhhbmRsZXIubWpzLm1hcFxuIiwiLyohIEBhenVyZS9tc2FsLWNvbW1vbiB2MTQuMTYuMCAyMDI0LTExLTA1ICovXG4ndXNlIHN0cmljdCc7XG5pbXBvcnQgeyBBdXRoRXJyb3IgfSBmcm9tICcuL0F1dGhFcnJvci5tanMnO1xuXG4vKlxyXG4gKiBDb3B5cmlnaHQgKGMpIE1pY3Jvc29mdCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cclxuICogTGljZW5zZWQgdW5kZXIgdGhlIE1JVCBMaWNlbnNlLlxyXG4gKi9cclxuLyoqXHJcbiAqIEVycm9yIHRocm93biB3aGVuIHRoZXJlIGlzIGFuIGVycm9yIHdpdGggdGhlIHNlcnZlciBjb2RlLCBmb3IgZXhhbXBsZSwgdW5hdmFpbGFiaWxpdHkuXHJcbiAqL1xyXG5jbGFzcyBTZXJ2ZXJFcnJvciBleHRlbmRzIEF1dGhFcnJvciB7XHJcbiAgICBjb25zdHJ1Y3RvcihlcnJvckNvZGUsIGVycm9yTWVzc2FnZSwgc3ViRXJyb3IsIGVycm9yTm8sIHN0YXR1cykge1xyXG4gICAgICAgIHN1cGVyKGVycm9yQ29kZSwgZXJyb3JNZXNzYWdlLCBzdWJFcnJvcik7XHJcbiAgICAgICAgdGhpcy5uYW1lID0gXCJTZXJ2ZXJFcnJvclwiO1xyXG4gICAgICAgIHRoaXMuZXJyb3JObyA9IGVycm9yTm87XHJcbiAgICAgICAgdGhpcy5zdGF0dXMgPSBzdGF0dXM7XHJcbiAgICAgICAgT2JqZWN0LnNldFByb3RvdHlwZU9mKHRoaXMsIFNlcnZlckVycm9yLnByb3RvdHlwZSk7XHJcbiAgICB9XHJcbn1cblxuZXhwb3J0IHsgU2VydmVyRXJyb3IgfTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPVNlcnZlckVycm9yLm1qcy5tYXBcbiIsIi8qISBAYXp1cmUvbXNhbC1jb21tb24gdjE0LjE2LjAgMjAyNC0xMS0wNSAqL1xuJ3VzZSBzdHJpY3QnO1xuaW1wb3J0IHsgVGhyb3R0bGluZ0NvbnN0YW50cywgQ29uc3RhbnRzLCBIZWFkZXJOYW1lcyB9IGZyb20gJy4uL3V0aWxzL0NvbnN0YW50cy5tanMnO1xuaW1wb3J0IHsgU2VydmVyRXJyb3IgfSBmcm9tICcuLi9lcnJvci9TZXJ2ZXJFcnJvci5tanMnO1xuXG4vKlxyXG4gKiBDb3B5cmlnaHQgKGMpIE1pY3Jvc29mdCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cclxuICogTGljZW5zZWQgdW5kZXIgdGhlIE1JVCBMaWNlbnNlLlxyXG4gKi9cclxuLyoqIEBpbnRlcm5hbCAqL1xyXG5jbGFzcyBUaHJvdHRsaW5nVXRpbHMge1xyXG4gICAgLyoqXHJcbiAgICAgKiBQcmVwYXJlcyBhIFJlcXVlc3RUaHVtYnByaW50IHRvIGJlIHN0b3JlZCBhcyBhIGtleS5cclxuICAgICAqIEBwYXJhbSB0aHVtYnByaW50XHJcbiAgICAgKi9cclxuICAgIHN0YXRpYyBnZW5lcmF0ZVRocm90dGxpbmdTdG9yYWdlS2V5KHRodW1icHJpbnQpIHtcclxuICAgICAgICByZXR1cm4gYCR7VGhyb3R0bGluZ0NvbnN0YW50cy5USFJPVFRMSU5HX1BSRUZJWH0uJHtKU09OLnN0cmluZ2lmeSh0aHVtYnByaW50KX1gO1xyXG4gICAgfVxyXG4gICAgLyoqXHJcbiAgICAgKiBQZXJmb3JtcyBuZWNlc3NhcnkgdGhyb3R0bGluZyBjaGVja3MgYmVmb3JlIGEgbmV0d29yayByZXF1ZXN0LlxyXG4gICAgICogQHBhcmFtIGNhY2hlTWFuYWdlclxyXG4gICAgICogQHBhcmFtIHRodW1icHJpbnRcclxuICAgICAqL1xyXG4gICAgc3RhdGljIHByZVByb2Nlc3MoY2FjaGVNYW5hZ2VyLCB0aHVtYnByaW50KSB7XHJcbiAgICAgICAgY29uc3Qga2V5ID0gVGhyb3R0bGluZ1V0aWxzLmdlbmVyYXRlVGhyb3R0bGluZ1N0b3JhZ2VLZXkodGh1bWJwcmludCk7XHJcbiAgICAgICAgY29uc3QgdmFsdWUgPSBjYWNoZU1hbmFnZXIuZ2V0VGhyb3R0bGluZ0NhY2hlKGtleSk7XHJcbiAgICAgICAgaWYgKHZhbHVlKSB7XHJcbiAgICAgICAgICAgIGlmICh2YWx1ZS50aHJvdHRsZVRpbWUgPCBEYXRlLm5vdygpKSB7XHJcbiAgICAgICAgICAgICAgICBjYWNoZU1hbmFnZXIucmVtb3ZlSXRlbShrZXkpO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHRocm93IG5ldyBTZXJ2ZXJFcnJvcih2YWx1ZS5lcnJvckNvZGVzPy5qb2luKFwiIFwiKSB8fCBDb25zdGFudHMuRU1QVFlfU1RSSU5HLCB2YWx1ZS5lcnJvck1lc3NhZ2UsIHZhbHVlLnN1YkVycm9yKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICAvKipcclxuICAgICAqIFBlcmZvcm1zIG5lY2Vzc2FyeSB0aHJvdHRsaW5nIGNoZWNrcyBhZnRlciBhIG5ldHdvcmsgcmVxdWVzdC5cclxuICAgICAqIEBwYXJhbSBjYWNoZU1hbmFnZXJcclxuICAgICAqIEBwYXJhbSB0aHVtYnByaW50XHJcbiAgICAgKiBAcGFyYW0gcmVzcG9uc2VcclxuICAgICAqL1xyXG4gICAgc3RhdGljIHBvc3RQcm9jZXNzKGNhY2hlTWFuYWdlciwgdGh1bWJwcmludCwgcmVzcG9uc2UpIHtcclxuICAgICAgICBpZiAoVGhyb3R0bGluZ1V0aWxzLmNoZWNrUmVzcG9uc2VTdGF0dXMocmVzcG9uc2UpIHx8XHJcbiAgICAgICAgICAgIFRocm90dGxpbmdVdGlscy5jaGVja1Jlc3BvbnNlRm9yUmV0cnlBZnRlcihyZXNwb25zZSkpIHtcclxuICAgICAgICAgICAgY29uc3QgdGh1bWJwcmludFZhbHVlID0ge1xyXG4gICAgICAgICAgICAgICAgdGhyb3R0bGVUaW1lOiBUaHJvdHRsaW5nVXRpbHMuY2FsY3VsYXRlVGhyb3R0bGVUaW1lKHBhcnNlSW50KHJlc3BvbnNlLmhlYWRlcnNbSGVhZGVyTmFtZXMuUkVUUllfQUZURVJdKSksXHJcbiAgICAgICAgICAgICAgICBlcnJvcjogcmVzcG9uc2UuYm9keS5lcnJvcixcclxuICAgICAgICAgICAgICAgIGVycm9yQ29kZXM6IHJlc3BvbnNlLmJvZHkuZXJyb3JfY29kZXMsXHJcbiAgICAgICAgICAgICAgICBlcnJvck1lc3NhZ2U6IHJlc3BvbnNlLmJvZHkuZXJyb3JfZGVzY3JpcHRpb24sXHJcbiAgICAgICAgICAgICAgICBzdWJFcnJvcjogcmVzcG9uc2UuYm9keS5zdWJlcnJvcixcclxuICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgY2FjaGVNYW5hZ2VyLnNldFRocm90dGxpbmdDYWNoZShUaHJvdHRsaW5nVXRpbHMuZ2VuZXJhdGVUaHJvdHRsaW5nU3RvcmFnZUtleSh0aHVtYnByaW50KSwgdGh1bWJwcmludFZhbHVlKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICAvKipcclxuICAgICAqIENoZWNrcyBhIE5ldHdvcmtSZXNwb25zZSBvYmplY3QncyBzdGF0dXMgY29kZXMgYWdhaW5zdCA0Mjkgb3IgNXh4XHJcbiAgICAgKiBAcGFyYW0gcmVzcG9uc2VcclxuICAgICAqL1xyXG4gICAgc3RhdGljIGNoZWNrUmVzcG9uc2VTdGF0dXMocmVzcG9uc2UpIHtcclxuICAgICAgICByZXR1cm4gKHJlc3BvbnNlLnN0YXR1cyA9PT0gNDI5IHx8XHJcbiAgICAgICAgICAgIChyZXNwb25zZS5zdGF0dXMgPj0gNTAwICYmIHJlc3BvbnNlLnN0YXR1cyA8IDYwMCkpO1xyXG4gICAgfVxyXG4gICAgLyoqXHJcbiAgICAgKiBDaGVja3MgYSBOZXR3b3JrUmVzcG9uc2Ugb2JqZWN0J3MgUmV0cnlBZnRlciBoZWFkZXJcclxuICAgICAqIEBwYXJhbSByZXNwb25zZVxyXG4gICAgICovXHJcbiAgICBzdGF0aWMgY2hlY2tSZXNwb25zZUZvclJldHJ5QWZ0ZXIocmVzcG9uc2UpIHtcclxuICAgICAgICBpZiAocmVzcG9uc2UuaGVhZGVycykge1xyXG4gICAgICAgICAgICByZXR1cm4gKHJlc3BvbnNlLmhlYWRlcnMuaGFzT3duUHJvcGVydHkoSGVhZGVyTmFtZXMuUkVUUllfQUZURVIpICYmXHJcbiAgICAgICAgICAgICAgICAocmVzcG9uc2Uuc3RhdHVzIDwgMjAwIHx8IHJlc3BvbnNlLnN0YXR1cyA+PSAzMDApKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG4gICAgLyoqXHJcbiAgICAgKiBDYWxjdWxhdGVzIHRoZSBVbml4LXRpbWUgdmFsdWUgZm9yIGEgdGhyb3R0bGUgdG8gZXhwaXJlIGdpdmVuIHRocm90dGxlVGltZSBpbiBzZWNvbmRzLlxyXG4gICAgICogQHBhcmFtIHRocm90dGxlVGltZVxyXG4gICAgICovXHJcbiAgICBzdGF0aWMgY2FsY3VsYXRlVGhyb3R0bGVUaW1lKHRocm90dGxlVGltZSkge1xyXG4gICAgICAgIGNvbnN0IHRpbWUgPSB0aHJvdHRsZVRpbWUgPD0gMCA/IDAgOiB0aHJvdHRsZVRpbWU7XHJcbiAgICAgICAgY29uc3QgY3VycmVudFNlY29uZHMgPSBEYXRlLm5vdygpIC8gMTAwMDtcclxuICAgICAgICByZXR1cm4gTWF0aC5mbG9vcihNYXRoLm1pbihjdXJyZW50U2Vjb25kcyArXHJcbiAgICAgICAgICAgICh0aW1lIHx8IFRocm90dGxpbmdDb25zdGFudHMuREVGQVVMVF9USFJPVFRMRV9USU1FX1NFQ09ORFMpLCBjdXJyZW50U2Vjb25kcyArXHJcbiAgICAgICAgICAgIFRocm90dGxpbmdDb25zdGFudHMuREVGQVVMVF9NQVhfVEhST1RUTEVfVElNRV9TRUNPTkRTKSAqIDEwMDApO1xyXG4gICAgfVxyXG4gICAgc3RhdGljIHJlbW92ZVRocm90dGxlKGNhY2hlTWFuYWdlciwgY2xpZW50SWQsIHJlcXVlc3QsIGhvbWVBY2NvdW50SWRlbnRpZmllcikge1xyXG4gICAgICAgIGNvbnN0IHRodW1icHJpbnQgPSB7XHJcbiAgICAgICAgICAgIGNsaWVudElkOiBjbGllbnRJZCxcclxuICAgICAgICAgICAgYXV0aG9yaXR5OiByZXF1ZXN0LmF1dGhvcml0eSxcclxuICAgICAgICAgICAgc2NvcGVzOiByZXF1ZXN0LnNjb3BlcyxcclxuICAgICAgICAgICAgaG9tZUFjY291bnRJZGVudGlmaWVyOiBob21lQWNjb3VudElkZW50aWZpZXIsXHJcbiAgICAgICAgICAgIGNsYWltczogcmVxdWVzdC5jbGFpbXMsXHJcbiAgICAgICAgICAgIGF1dGhlbnRpY2F0aW9uU2NoZW1lOiByZXF1ZXN0LmF1dGhlbnRpY2F0aW9uU2NoZW1lLFxyXG4gICAgICAgICAgICByZXNvdXJjZVJlcXVlc3RNZXRob2Q6IHJlcXVlc3QucmVzb3VyY2VSZXF1ZXN0TWV0aG9kLFxyXG4gICAgICAgICAgICByZXNvdXJjZVJlcXVlc3RVcmk6IHJlcXVlc3QucmVzb3VyY2VSZXF1ZXN0VXJpLFxyXG4gICAgICAgICAgICBzaHJDbGFpbXM6IHJlcXVlc3Quc2hyQ2xhaW1zLFxyXG4gICAgICAgICAgICBzc2hLaWQ6IHJlcXVlc3Quc3NoS2lkLFxyXG4gICAgICAgIH07XHJcbiAgICAgICAgY29uc3Qga2V5ID0gdGhpcy5nZW5lcmF0ZVRocm90dGxpbmdTdG9yYWdlS2V5KHRodW1icHJpbnQpO1xyXG4gICAgICAgIGNhY2hlTWFuYWdlci5yZW1vdmVJdGVtKGtleSk7XHJcbiAgICB9XHJcbn1cblxuZXhwb3J0IHsgVGhyb3R0bGluZ1V0aWxzIH07XG4vLyMgc291cmNlTWFwcGluZ1VSTD1UaHJvdHRsaW5nVXRpbHMubWpzLm1hcFxuIiwiLyohIEBhenVyZS9tc2FsLWNvbW1vbiB2MTQuMTYuMCAyMDI0LTExLTA1ICovXG4ndXNlIHN0cmljdCc7XG4vKlxyXG4gKiBDb3B5cmlnaHQgKGMpIE1pY3Jvc29mdCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cclxuICogTGljZW5zZWQgdW5kZXIgdGhlIE1JVCBMaWNlbnNlLlxyXG4gKi9cclxuY29uc3QgQ0xJRU5UX0lEID0gXCJjbGllbnRfaWRcIjtcclxuY29uc3QgUkVESVJFQ1RfVVJJID0gXCJyZWRpcmVjdF91cmlcIjtcclxuY29uc3QgUkVTUE9OU0VfVFlQRSA9IFwicmVzcG9uc2VfdHlwZVwiO1xyXG5jb25zdCBSRVNQT05TRV9NT0RFID0gXCJyZXNwb25zZV9tb2RlXCI7XHJcbmNvbnN0IEdSQU5UX1RZUEUgPSBcImdyYW50X3R5cGVcIjtcclxuY29uc3QgQ0xBSU1TID0gXCJjbGFpbXNcIjtcclxuY29uc3QgU0NPUEUgPSBcInNjb3BlXCI7XHJcbmNvbnN0IEVSUk9SID0gXCJlcnJvclwiO1xyXG5jb25zdCBFUlJPUl9ERVNDUklQVElPTiA9IFwiZXJyb3JfZGVzY3JpcHRpb25cIjtcclxuY29uc3QgQUNDRVNTX1RPS0VOID0gXCJhY2Nlc3NfdG9rZW5cIjtcclxuY29uc3QgSURfVE9LRU4gPSBcImlkX3Rva2VuXCI7XHJcbmNvbnN0IFJFRlJFU0hfVE9LRU4gPSBcInJlZnJlc2hfdG9rZW5cIjtcclxuY29uc3QgRVhQSVJFU19JTiA9IFwiZXhwaXJlc19pblwiO1xyXG5jb25zdCBSRUZSRVNIX1RPS0VOX0VYUElSRVNfSU4gPSBcInJlZnJlc2hfdG9rZW5fZXhwaXJlc19pblwiO1xyXG5jb25zdCBTVEFURSA9IFwic3RhdGVcIjtcclxuY29uc3QgTk9OQ0UgPSBcIm5vbmNlXCI7XHJcbmNvbnN0IFBST01QVCA9IFwicHJvbXB0XCI7XHJcbmNvbnN0IFNFU1NJT05fU1RBVEUgPSBcInNlc3Npb25fc3RhdGVcIjtcclxuY29uc3QgQ0xJRU5UX0lORk8gPSBcImNsaWVudF9pbmZvXCI7XHJcbmNvbnN0IENPREUgPSBcImNvZGVcIjtcclxuY29uc3QgQ09ERV9DSEFMTEVOR0UgPSBcImNvZGVfY2hhbGxlbmdlXCI7XHJcbmNvbnN0IENPREVfQ0hBTExFTkdFX01FVEhPRCA9IFwiY29kZV9jaGFsbGVuZ2VfbWV0aG9kXCI7XHJcbmNvbnN0IENPREVfVkVSSUZJRVIgPSBcImNvZGVfdmVyaWZpZXJcIjtcclxuY29uc3QgQ0xJRU5UX1JFUVVFU1RfSUQgPSBcImNsaWVudC1yZXF1ZXN0LWlkXCI7XHJcbmNvbnN0IFhfQ0xJRU5UX1NLVSA9IFwieC1jbGllbnQtU0tVXCI7XHJcbmNvbnN0IFhfQ0xJRU5UX1ZFUiA9IFwieC1jbGllbnQtVkVSXCI7XHJcbmNvbnN0IFhfQ0xJRU5UX09TID0gXCJ4LWNsaWVudC1PU1wiO1xyXG5jb25zdCBYX0NMSUVOVF9DUFUgPSBcIngtY2xpZW50LUNQVVwiO1xyXG5jb25zdCBYX0NMSUVOVF9DVVJSX1RFTEVNID0gXCJ4LWNsaWVudC1jdXJyZW50LXRlbGVtZXRyeVwiO1xyXG5jb25zdCBYX0NMSUVOVF9MQVNUX1RFTEVNID0gXCJ4LWNsaWVudC1sYXN0LXRlbGVtZXRyeVwiO1xyXG5jb25zdCBYX01TX0xJQl9DQVBBQklMSVRZID0gXCJ4LW1zLWxpYi1jYXBhYmlsaXR5XCI7XHJcbmNvbnN0IFhfQVBQX05BTUUgPSBcIngtYXBwLW5hbWVcIjtcclxuY29uc3QgWF9BUFBfVkVSID0gXCJ4LWFwcC12ZXJcIjtcclxuY29uc3QgUE9TVF9MT0dPVVRfVVJJID0gXCJwb3N0X2xvZ291dF9yZWRpcmVjdF91cmlcIjtcclxuY29uc3QgSURfVE9LRU5fSElOVCA9IFwiaWRfdG9rZW5faGludFwiO1xyXG5jb25zdCBERVZJQ0VfQ09ERSA9IFwiZGV2aWNlX2NvZGVcIjtcclxuY29uc3QgQ0xJRU5UX1NFQ1JFVCA9IFwiY2xpZW50X3NlY3JldFwiO1xyXG5jb25zdCBDTElFTlRfQVNTRVJUSU9OID0gXCJjbGllbnRfYXNzZXJ0aW9uXCI7XHJcbmNvbnN0IENMSUVOVF9BU1NFUlRJT05fVFlQRSA9IFwiY2xpZW50X2Fzc2VydGlvbl90eXBlXCI7XHJcbmNvbnN0IFRPS0VOX1RZUEUgPSBcInRva2VuX3R5cGVcIjtcclxuY29uc3QgUkVRX0NORiA9IFwicmVxX2NuZlwiO1xyXG5jb25zdCBPQk9fQVNTRVJUSU9OID0gXCJhc3NlcnRpb25cIjtcclxuY29uc3QgUkVRVUVTVEVEX1RPS0VOX1VTRSA9IFwicmVxdWVzdGVkX3Rva2VuX3VzZVwiO1xyXG5jb25zdCBPTl9CRUhBTEZfT0YgPSBcIm9uX2JlaGFsZl9vZlwiO1xyXG5jb25zdCBGT0NJID0gXCJmb2NpXCI7XHJcbmNvbnN0IENDU19IRUFERVIgPSBcIlgtQW5jaG9yTWFpbGJveFwiO1xyXG5jb25zdCBSRVRVUk5fU1BBX0NPREUgPSBcInJldHVybl9zcGFfY29kZVwiO1xyXG5jb25zdCBOQVRJVkVfQlJPS0VSID0gXCJuYXRpdmVicm9rZXJcIjtcclxuY29uc3QgTE9HT1VUX0hJTlQgPSBcImxvZ291dF9oaW50XCI7XHJcbmNvbnN0IFNJRCA9IFwic2lkXCI7XHJcbmNvbnN0IExPR0lOX0hJTlQgPSBcImxvZ2luX2hpbnRcIjtcclxuY29uc3QgRE9NQUlOX0hJTlQgPSBcImRvbWFpbl9oaW50XCI7XHJcbmNvbnN0IFhfQ0xJRU5UX0VYVFJBX1NLVSA9IFwieC1jbGllbnQteHRyYS1za3VcIjtcclxuY29uc3QgQlJPS0VSX0NMSUVOVF9JRCA9IFwiYnJrX2NsaWVudF9pZFwiO1xyXG5jb25zdCBCUk9LRVJfUkVESVJFQ1RfVVJJID0gXCJicmtfcmVkaXJlY3RfdXJpXCI7XG5cbmV4cG9ydCB7IEFDQ0VTU19UT0tFTiwgQlJPS0VSX0NMSUVOVF9JRCwgQlJPS0VSX1JFRElSRUNUX1VSSSwgQ0NTX0hFQURFUiwgQ0xBSU1TLCBDTElFTlRfQVNTRVJUSU9OLCBDTElFTlRfQVNTRVJUSU9OX1RZUEUsIENMSUVOVF9JRCwgQ0xJRU5UX0lORk8sIENMSUVOVF9SRVFVRVNUX0lELCBDTElFTlRfU0VDUkVULCBDT0RFLCBDT0RFX0NIQUxMRU5HRSwgQ09ERV9DSEFMTEVOR0VfTUVUSE9ELCBDT0RFX1ZFUklGSUVSLCBERVZJQ0VfQ09ERSwgRE9NQUlOX0hJTlQsIEVSUk9SLCBFUlJPUl9ERVNDUklQVElPTiwgRVhQSVJFU19JTiwgRk9DSSwgR1JBTlRfVFlQRSwgSURfVE9LRU4sIElEX1RPS0VOX0hJTlQsIExPR0lOX0hJTlQsIExPR09VVF9ISU5ULCBOQVRJVkVfQlJPS0VSLCBOT05DRSwgT0JPX0FTU0VSVElPTiwgT05fQkVIQUxGX09GLCBQT1NUX0xPR09VVF9VUkksIFBST01QVCwgUkVESVJFQ1RfVVJJLCBSRUZSRVNIX1RPS0VOLCBSRUZSRVNIX1RPS0VOX0VYUElSRVNfSU4sIFJFUVVFU1RFRF9UT0tFTl9VU0UsIFJFUV9DTkYsIFJFU1BPTlNFX01PREUsIFJFU1BPTlNFX1RZUEUsIFJFVFVSTl9TUEFfQ09ERSwgU0NPUEUsIFNFU1NJT05fU1RBVEUsIFNJRCwgU1RBVEUsIFRPS0VOX1RZUEUsIFhfQVBQX05BTUUsIFhfQVBQX1ZFUiwgWF9DTElFTlRfQ1BVLCBYX0NMSUVOVF9DVVJSX1RFTEVNLCBYX0NMSUVOVF9FWFRSQV9TS1UsIFhfQ0xJRU5UX0xBU1RfVEVMRU0sIFhfQ0xJRU5UX09TLCBYX0NMSUVOVF9TS1UsIFhfQ0xJRU5UX1ZFUiwgWF9NU19MSUJfQ0FQQUJJTElUWSB9O1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9QUFEU2VydmVyUGFyYW1LZXlzLm1qcy5tYXBcbiIsIi8qISBAYXp1cmUvbXNhbC1jb21tb24gdjE0LjE2LjAgMjAyNC0xMS0wNSAqL1xuJ3VzZSBzdHJpY3QnO1xuaW1wb3J0IHsgY3JlYXRlQ2xpZW50Q29uZmlndXJhdGlvbkVycm9yIH0gZnJvbSAnLi4vZXJyb3IvQ2xpZW50Q29uZmlndXJhdGlvbkVycm9yLm1qcyc7XG5pbXBvcnQgeyBDb2RlQ2hhbGxlbmdlTWV0aG9kVmFsdWVzLCBQcm9tcHRWYWx1ZSB9IGZyb20gJy4uL3V0aWxzL0NvbnN0YW50cy5tanMnO1xuaW1wb3J0IHsgcmVkaXJlY3RVcmlFbXB0eSwgaW52YWxpZFByb21wdFZhbHVlLCBpbnZhbGlkQ2xhaW1zLCBwa2NlUGFyYW1zTWlzc2luZywgaW52YWxpZENvZGVDaGFsbGVuZ2VNZXRob2QgfSBmcm9tICcuLi9lcnJvci9DbGllbnRDb25maWd1cmF0aW9uRXJyb3JDb2Rlcy5tanMnO1xuXG4vKlxyXG4gKiBDb3B5cmlnaHQgKGMpIE1pY3Jvc29mdCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cclxuICogTGljZW5zZWQgdW5kZXIgdGhlIE1JVCBMaWNlbnNlLlxyXG4gKi9cclxuLyoqXHJcbiAqIFZhbGlkYXRlcyBzZXJ2ZXIgY29uc3VtYWJsZSBwYXJhbXMgZnJvbSB0aGUgXCJyZXF1ZXN0XCIgb2JqZWN0c1xyXG4gKi9cclxuY2xhc3MgUmVxdWVzdFZhbGlkYXRvciB7XHJcbiAgICAvKipcclxuICAgICAqIFV0aWxpdHkgdG8gY2hlY2sgaWYgdGhlIGByZWRpcmVjdFVyaWAgaW4gdGhlIHJlcXVlc3QgaXMgYSBub24tbnVsbCB2YWx1ZVxyXG4gICAgICogQHBhcmFtIHJlZGlyZWN0VXJpXHJcbiAgICAgKi9cclxuICAgIHN0YXRpYyB2YWxpZGF0ZVJlZGlyZWN0VXJpKHJlZGlyZWN0VXJpKSB7XHJcbiAgICAgICAgaWYgKCFyZWRpcmVjdFVyaSkge1xyXG4gICAgICAgICAgICB0aHJvdyBjcmVhdGVDbGllbnRDb25maWd1cmF0aW9uRXJyb3IocmVkaXJlY3RVcmlFbXB0eSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgLyoqXHJcbiAgICAgKiBVdGlsaXR5IHRvIHZhbGlkYXRlIHByb21wdCBzZW50IGJ5IHRoZSB1c2VyIGluIHRoZSByZXF1ZXN0XHJcbiAgICAgKiBAcGFyYW0gcHJvbXB0XHJcbiAgICAgKi9cclxuICAgIHN0YXRpYyB2YWxpZGF0ZVByb21wdChwcm9tcHQpIHtcclxuICAgICAgICBjb25zdCBwcm9tcHRWYWx1ZXMgPSBbXTtcclxuICAgICAgICBmb3IgKGNvbnN0IHZhbHVlIGluIFByb21wdFZhbHVlKSB7XHJcbiAgICAgICAgICAgIHByb21wdFZhbHVlcy5wdXNoKFByb21wdFZhbHVlW3ZhbHVlXSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChwcm9tcHRWYWx1ZXMuaW5kZXhPZihwcm9tcHQpIDwgMCkge1xyXG4gICAgICAgICAgICB0aHJvdyBjcmVhdGVDbGllbnRDb25maWd1cmF0aW9uRXJyb3IoaW52YWxpZFByb21wdFZhbHVlKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBzdGF0aWMgdmFsaWRhdGVDbGFpbXMoY2xhaW1zKSB7XHJcbiAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgSlNPTi5wYXJzZShjbGFpbXMpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjYXRjaCAoZSkge1xyXG4gICAgICAgICAgICB0aHJvdyBjcmVhdGVDbGllbnRDb25maWd1cmF0aW9uRXJyb3IoaW52YWxpZENsYWltcyk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgLyoqXHJcbiAgICAgKiBVdGlsaXR5IHRvIHZhbGlkYXRlIGNvZGVfY2hhbGxlbmdlIGFuZCBjb2RlX2NoYWxsZW5nZV9tZXRob2RcclxuICAgICAqIEBwYXJhbSBjb2RlQ2hhbGxlbmdlXHJcbiAgICAgKiBAcGFyYW0gY29kZUNoYWxsZW5nZU1ldGhvZFxyXG4gICAgICovXHJcbiAgICBzdGF0aWMgdmFsaWRhdGVDb2RlQ2hhbGxlbmdlUGFyYW1zKGNvZGVDaGFsbGVuZ2UsIGNvZGVDaGFsbGVuZ2VNZXRob2QpIHtcclxuICAgICAgICBpZiAoIWNvZGVDaGFsbGVuZ2UgfHwgIWNvZGVDaGFsbGVuZ2VNZXRob2QpIHtcclxuICAgICAgICAgICAgdGhyb3cgY3JlYXRlQ2xpZW50Q29uZmlndXJhdGlvbkVycm9yKHBrY2VQYXJhbXNNaXNzaW5nKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMudmFsaWRhdGVDb2RlQ2hhbGxlbmdlTWV0aG9kKGNvZGVDaGFsbGVuZ2VNZXRob2QpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIC8qKlxyXG4gICAgICogVXRpbGl0eSB0byB2YWxpZGF0ZSBjb2RlX2NoYWxsZW5nZV9tZXRob2RcclxuICAgICAqIEBwYXJhbSBjb2RlQ2hhbGxlbmdlTWV0aG9kXHJcbiAgICAgKi9cclxuICAgIHN0YXRpYyB2YWxpZGF0ZUNvZGVDaGFsbGVuZ2VNZXRob2QoY29kZUNoYWxsZW5nZU1ldGhvZCkge1xyXG4gICAgICAgIGlmIChbXHJcbiAgICAgICAgICAgIENvZGVDaGFsbGVuZ2VNZXRob2RWYWx1ZXMuUExBSU4sXHJcbiAgICAgICAgICAgIENvZGVDaGFsbGVuZ2VNZXRob2RWYWx1ZXMuUzI1NixcclxuICAgICAgICBdLmluZGV4T2YoY29kZUNoYWxsZW5nZU1ldGhvZCkgPCAwKSB7XHJcbiAgICAgICAgICAgIHRocm93IGNyZWF0ZUNsaWVudENvbmZpZ3VyYXRpb25FcnJvcihpbnZhbGlkQ29kZUNoYWxsZW5nZU1ldGhvZCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG59XG5cbmV4cG9ydCB7IFJlcXVlc3RWYWxpZGF0b3IgfTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPVJlcXVlc3RWYWxpZGF0b3IubWpzLm1hcFxuIiwiLyohIEBhenVyZS9tc2FsLWNvbW1vbiB2MTQuMTYuMCAyMDI0LTExLTA1ICovXG4ndXNlIHN0cmljdCc7XG5pbXBvcnQgeyBDb25zdGFudHMsIFJlc3BvbnNlTW9kZSwgT0lEQ19ERUZBVUxUX1NDT1BFUywgSGVhZGVyTmFtZXMsIENMSUVOVF9JTkZPLCBDbGFpbXNSZXF1ZXN0S2V5cywgUGFzc3dvcmRHcmFudENvbnN0YW50cywgQXV0aGVudGljYXRpb25TY2hlbWUsIFRocm90dGxpbmdDb25zdGFudHMgfSBmcm9tICcuLi91dGlscy9Db25zdGFudHMubWpzJztcbmltcG9ydCB7IFJFU1BPTlNFX1RZUEUsIFJFU1BPTlNFX01PREUsIE5BVElWRV9CUk9LRVIsIFNDT1BFLCBDTElFTlRfSUQsIFJFRElSRUNUX1VSSSwgUE9TVF9MT0dPVVRfVVJJLCBJRF9UT0tFTl9ISU5ULCBET01BSU5fSElOVCwgTE9HSU5fSElOVCwgU0lELCBDTEFJTVMsIENMSUVOVF9SRVFVRVNUX0lELCBYX0NMSUVOVF9TS1UsIFhfQ0xJRU5UX1ZFUiwgWF9DTElFTlRfT1MsIFhfQ0xJRU5UX0NQVSwgWF9BUFBfTkFNRSwgWF9BUFBfVkVSLCBQUk9NUFQsIFNUQVRFLCBOT05DRSwgQ09ERV9DSEFMTEVOR0UsIENPREVfQ0hBTExFTkdFX01FVEhPRCwgQ09ERSwgREVWSUNFX0NPREUsIFJFRlJFU0hfVE9LRU4sIENPREVfVkVSSUZJRVIsIENMSUVOVF9TRUNSRVQsIENMSUVOVF9BU1NFUlRJT04sIENMSUVOVF9BU1NFUlRJT05fVFlQRSwgT0JPX0FTU0VSVElPTiwgUkVRVUVTVEVEX1RPS0VOX1VTRSwgR1JBTlRfVFlQRSwgVE9LRU5fVFlQRSwgUkVRX0NORiwgWF9DTElFTlRfQ1VSUl9URUxFTSwgWF9DTElFTlRfTEFTVF9URUxFTSwgWF9NU19MSUJfQ0FQQUJJTElUWSwgTE9HT1VUX0hJTlQsIEJST0tFUl9DTElFTlRfSUQsIEJST0tFUl9SRURJUkVDVF9VUkkgfSBmcm9tICcuLi9jb25zdGFudHMvQUFEU2VydmVyUGFyYW1LZXlzLm1qcyc7XG5pbXBvcnQgeyBTY29wZVNldCB9IGZyb20gJy4vU2NvcGVTZXQubWpzJztcbmltcG9ydCB7IGNyZWF0ZUNsaWVudENvbmZpZ3VyYXRpb25FcnJvciB9IGZyb20gJy4uL2Vycm9yL0NsaWVudENvbmZpZ3VyYXRpb25FcnJvci5tanMnO1xuaW1wb3J0IHsgUmVxdWVzdFZhbGlkYXRvciB9IGZyb20gJy4vUmVxdWVzdFZhbGlkYXRvci5tanMnO1xuaW1wb3J0IHsgcGtjZVBhcmFtc01pc3NpbmcsIGludmFsaWRDbGFpbXMgfSBmcm9tICcuLi9lcnJvci9DbGllbnRDb25maWd1cmF0aW9uRXJyb3JDb2Rlcy5tanMnO1xuXG4vKlxyXG4gKiBDb3B5cmlnaHQgKGMpIE1pY3Jvc29mdCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cclxuICogTGljZW5zZWQgdW5kZXIgdGhlIE1JVCBMaWNlbnNlLlxyXG4gKi9cclxuZnVuY3Rpb24gaW5zdHJ1bWVudEJyb2tlclBhcmFtcyhwYXJhbWV0ZXJzLCBjb3JyZWxhdGlvbklkLCBwZXJmb3JtYW5jZUNsaWVudCkge1xyXG4gICAgaWYgKCFjb3JyZWxhdGlvbklkKSB7XHJcbiAgICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgY29uc3QgY2xpZW50SWQgPSBwYXJhbWV0ZXJzLmdldChDTElFTlRfSUQpO1xyXG4gICAgaWYgKGNsaWVudElkICYmIHBhcmFtZXRlcnMuaGFzKEJST0tFUl9DTElFTlRfSUQpKSB7XHJcbiAgICAgICAgcGVyZm9ybWFuY2VDbGllbnQ/LmFkZEZpZWxkcyh7XHJcbiAgICAgICAgICAgIGVtYmVkZGVkQ2xpZW50SWQ6IGNsaWVudElkLFxyXG4gICAgICAgICAgICBlbWJlZGRlZFJlZGlyZWN0VXJpOiBwYXJhbWV0ZXJzLmdldChSRURJUkVDVF9VUkkpLFxyXG4gICAgICAgIH0sIGNvcnJlbGF0aW9uSWQpO1xyXG4gICAgfVxyXG59XHJcbi8qKiBAaW50ZXJuYWwgKi9cclxuY2xhc3MgUmVxdWVzdFBhcmFtZXRlckJ1aWxkZXIge1xyXG4gICAgY29uc3RydWN0b3IoY29ycmVsYXRpb25JZCwgcGVyZm9ybWFuY2VDbGllbnQpIHtcclxuICAgICAgICB0aGlzLnBhcmFtZXRlcnMgPSBuZXcgTWFwKCk7XHJcbiAgICAgICAgdGhpcy5wZXJmb3JtYW5jZUNsaWVudCA9IHBlcmZvcm1hbmNlQ2xpZW50O1xyXG4gICAgICAgIHRoaXMuY29ycmVsYXRpb25JZCA9IGNvcnJlbGF0aW9uSWQ7XHJcbiAgICB9XHJcbiAgICAvKipcclxuICAgICAqIGFkZCByZXNwb25zZV90eXBlID0gY29kZVxyXG4gICAgICovXHJcbiAgICBhZGRSZXNwb25zZVR5cGVDb2RlKCkge1xyXG4gICAgICAgIHRoaXMucGFyYW1ldGVycy5zZXQoUkVTUE9OU0VfVFlQRSwgZW5jb2RlVVJJQ29tcG9uZW50KENvbnN0YW50cy5DT0RFX1JFU1BPTlNFX1RZUEUpKTtcclxuICAgIH1cclxuICAgIC8qKlxyXG4gICAgICogYWRkIHJlc3BvbnNlX3R5cGUgPSB0b2tlbiBpZF90b2tlblxyXG4gICAgICovXHJcbiAgICBhZGRSZXNwb25zZVR5cGVGb3JUb2tlbkFuZElkVG9rZW4oKSB7XHJcbiAgICAgICAgdGhpcy5wYXJhbWV0ZXJzLnNldChSRVNQT05TRV9UWVBFLCBlbmNvZGVVUklDb21wb25lbnQoYCR7Q29uc3RhbnRzLlRPS0VOX1JFU1BPTlNFX1RZUEV9ICR7Q29uc3RhbnRzLklEX1RPS0VOX1JFU1BPTlNFX1RZUEV9YCkpO1xyXG4gICAgfVxyXG4gICAgLyoqXHJcbiAgICAgKiBhZGQgcmVzcG9uc2VfbW9kZS4gZGVmYXVsdHMgdG8gcXVlcnkuXHJcbiAgICAgKiBAcGFyYW0gcmVzcG9uc2VNb2RlXHJcbiAgICAgKi9cclxuICAgIGFkZFJlc3BvbnNlTW9kZShyZXNwb25zZU1vZGUpIHtcclxuICAgICAgICB0aGlzLnBhcmFtZXRlcnMuc2V0KFJFU1BPTlNFX01PREUsIGVuY29kZVVSSUNvbXBvbmVudChyZXNwb25zZU1vZGUgPyByZXNwb25zZU1vZGUgOiBSZXNwb25zZU1vZGUuUVVFUlkpKTtcclxuICAgIH1cclxuICAgIC8qKlxyXG4gICAgICogQWRkIGZsYWcgdG8gaW5kaWNhdGUgU1RTIHNob3VsZCBhdHRlbXB0IHRvIHVzZSBXQU0gaWYgYXZhaWxhYmxlXHJcbiAgICAgKi9cclxuICAgIGFkZE5hdGl2ZUJyb2tlcigpIHtcclxuICAgICAgICB0aGlzLnBhcmFtZXRlcnMuc2V0KE5BVElWRV9CUk9LRVIsIGVuY29kZVVSSUNvbXBvbmVudChcIjFcIikpO1xyXG4gICAgfVxyXG4gICAgLyoqXHJcbiAgICAgKiBhZGQgc2NvcGVzLiBzZXQgYWRkT2lkY1Njb3BlcyB0byBmYWxzZSB0byBwcmV2ZW50IGRlZmF1bHQgc2NvcGVzIGluIG5vbi11c2VyIHNjZW5hcmlvc1xyXG4gICAgICogQHBhcmFtIHNjb3BlU2V0XHJcbiAgICAgKiBAcGFyYW0gYWRkT2lkY1Njb3Blc1xyXG4gICAgICovXHJcbiAgICBhZGRTY29wZXMoc2NvcGVzLCBhZGRPaWRjU2NvcGVzID0gdHJ1ZSwgZGVmYXVsdFNjb3BlcyA9IE9JRENfREVGQVVMVF9TQ09QRVMpIHtcclxuICAgICAgICAvLyBBbHdheXMgYWRkIG9wZW5pZCB0byB0aGUgc2NvcGVzIHdoZW4gYWRkaW5nIE9JREMgc2NvcGVzXHJcbiAgICAgICAgaWYgKGFkZE9pZGNTY29wZXMgJiZcclxuICAgICAgICAgICAgIWRlZmF1bHRTY29wZXMuaW5jbHVkZXMoXCJvcGVuaWRcIikgJiZcclxuICAgICAgICAgICAgIXNjb3Blcy5pbmNsdWRlcyhcIm9wZW5pZFwiKSkge1xyXG4gICAgICAgICAgICBkZWZhdWx0U2NvcGVzLnB1c2goXCJvcGVuaWRcIik7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNvbnN0IHJlcXVlc3RTY29wZXMgPSBhZGRPaWRjU2NvcGVzXHJcbiAgICAgICAgICAgID8gWy4uLihzY29wZXMgfHwgW10pLCAuLi5kZWZhdWx0U2NvcGVzXVxyXG4gICAgICAgICAgICA6IHNjb3BlcyB8fCBbXTtcclxuICAgICAgICBjb25zdCBzY29wZVNldCA9IG5ldyBTY29wZVNldChyZXF1ZXN0U2NvcGVzKTtcclxuICAgICAgICB0aGlzLnBhcmFtZXRlcnMuc2V0KFNDT1BFLCBlbmNvZGVVUklDb21wb25lbnQoc2NvcGVTZXQucHJpbnRTY29wZXMoKSkpO1xyXG4gICAgfVxyXG4gICAgLyoqXHJcbiAgICAgKiBhZGQgY2xpZW50SWRcclxuICAgICAqIEBwYXJhbSBjbGllbnRJZFxyXG4gICAgICovXHJcbiAgICBhZGRDbGllbnRJZChjbGllbnRJZCkge1xyXG4gICAgICAgIHRoaXMucGFyYW1ldGVycy5zZXQoQ0xJRU5UX0lELCBlbmNvZGVVUklDb21wb25lbnQoY2xpZW50SWQpKTtcclxuICAgIH1cclxuICAgIC8qKlxyXG4gICAgICogYWRkIHJlZGlyZWN0X3VyaVxyXG4gICAgICogQHBhcmFtIHJlZGlyZWN0VXJpXHJcbiAgICAgKi9cclxuICAgIGFkZFJlZGlyZWN0VXJpKHJlZGlyZWN0VXJpKSB7XHJcbiAgICAgICAgUmVxdWVzdFZhbGlkYXRvci52YWxpZGF0ZVJlZGlyZWN0VXJpKHJlZGlyZWN0VXJpKTtcclxuICAgICAgICB0aGlzLnBhcmFtZXRlcnMuc2V0KFJFRElSRUNUX1VSSSwgZW5jb2RlVVJJQ29tcG9uZW50KHJlZGlyZWN0VXJpKSk7XHJcbiAgICB9XHJcbiAgICAvKipcclxuICAgICAqIGFkZCBwb3N0IGxvZ291dCByZWRpcmVjdFVyaVxyXG4gICAgICogQHBhcmFtIHJlZGlyZWN0VXJpXHJcbiAgICAgKi9cclxuICAgIGFkZFBvc3RMb2dvdXRSZWRpcmVjdFVyaShyZWRpcmVjdFVyaSkge1xyXG4gICAgICAgIFJlcXVlc3RWYWxpZGF0b3IudmFsaWRhdGVSZWRpcmVjdFVyaShyZWRpcmVjdFVyaSk7XHJcbiAgICAgICAgdGhpcy5wYXJhbWV0ZXJzLnNldChQT1NUX0xPR09VVF9VUkksIGVuY29kZVVSSUNvbXBvbmVudChyZWRpcmVjdFVyaSkpO1xyXG4gICAgfVxyXG4gICAgLyoqXHJcbiAgICAgKiBhZGQgaWRfdG9rZW5faGludCB0byBsb2dvdXQgcmVxdWVzdFxyXG4gICAgICogQHBhcmFtIGlkVG9rZW5IaW50XHJcbiAgICAgKi9cclxuICAgIGFkZElkVG9rZW5IaW50KGlkVG9rZW5IaW50KSB7XHJcbiAgICAgICAgdGhpcy5wYXJhbWV0ZXJzLnNldChJRF9UT0tFTl9ISU5ULCBlbmNvZGVVUklDb21wb25lbnQoaWRUb2tlbkhpbnQpKTtcclxuICAgIH1cclxuICAgIC8qKlxyXG4gICAgICogYWRkIGRvbWFpbl9oaW50XHJcbiAgICAgKiBAcGFyYW0gZG9tYWluSGludFxyXG4gICAgICovXHJcbiAgICBhZGREb21haW5IaW50KGRvbWFpbkhpbnQpIHtcclxuICAgICAgICB0aGlzLnBhcmFtZXRlcnMuc2V0KERPTUFJTl9ISU5ULCBlbmNvZGVVUklDb21wb25lbnQoZG9tYWluSGludCkpO1xyXG4gICAgfVxyXG4gICAgLyoqXHJcbiAgICAgKiBhZGQgbG9naW5faGludFxyXG4gICAgICogQHBhcmFtIGxvZ2luSGludFxyXG4gICAgICovXHJcbiAgICBhZGRMb2dpbkhpbnQobG9naW5IaW50KSB7XHJcbiAgICAgICAgdGhpcy5wYXJhbWV0ZXJzLnNldChMT0dJTl9ISU5ULCBlbmNvZGVVUklDb21wb25lbnQobG9naW5IaW50KSk7XHJcbiAgICB9XHJcbiAgICAvKipcclxuICAgICAqIEFkZHMgdGhlIENDUyAoQ2FjaGUgQ3JlZGVudGlhbCBTZXJ2aWNlKSBxdWVyeSBwYXJhbWV0ZXIgZm9yIGxvZ2luX2hpbnRcclxuICAgICAqIEBwYXJhbSBsb2dpbkhpbnRcclxuICAgICAqL1xyXG4gICAgYWRkQ2NzVXBuKGxvZ2luSGludCkge1xyXG4gICAgICAgIHRoaXMucGFyYW1ldGVycy5zZXQoSGVhZGVyTmFtZXMuQ0NTX0hFQURFUiwgZW5jb2RlVVJJQ29tcG9uZW50KGBVUE46JHtsb2dpbkhpbnR9YCkpO1xyXG4gICAgfVxyXG4gICAgLyoqXHJcbiAgICAgKiBBZGRzIHRoZSBDQ1MgKENhY2hlIENyZWRlbnRpYWwgU2VydmljZSkgcXVlcnkgcGFyYW1ldGVyIGZvciBhY2NvdW50IG9iamVjdFxyXG4gICAgICogQHBhcmFtIGxvZ2luSGludFxyXG4gICAgICovXHJcbiAgICBhZGRDY3NPaWQoY2xpZW50SW5mbykge1xyXG4gICAgICAgIHRoaXMucGFyYW1ldGVycy5zZXQoSGVhZGVyTmFtZXMuQ0NTX0hFQURFUiwgZW5jb2RlVVJJQ29tcG9uZW50KGBPaWQ6JHtjbGllbnRJbmZvLnVpZH1AJHtjbGllbnRJbmZvLnV0aWR9YCkpO1xyXG4gICAgfVxyXG4gICAgLyoqXHJcbiAgICAgKiBhZGQgc2lkXHJcbiAgICAgKiBAcGFyYW0gc2lkXHJcbiAgICAgKi9cclxuICAgIGFkZFNpZChzaWQpIHtcclxuICAgICAgICB0aGlzLnBhcmFtZXRlcnMuc2V0KFNJRCwgZW5jb2RlVVJJQ29tcG9uZW50KHNpZCkpO1xyXG4gICAgfVxyXG4gICAgLyoqXHJcbiAgICAgKiBhZGQgY2xhaW1zXHJcbiAgICAgKiBAcGFyYW0gY2xhaW1zXHJcbiAgICAgKi9cclxuICAgIGFkZENsYWltcyhjbGFpbXMsIGNsaWVudENhcGFiaWxpdGllcykge1xyXG4gICAgICAgIGNvbnN0IG1lcmdlZENsYWltcyA9IHRoaXMuYWRkQ2xpZW50Q2FwYWJpbGl0aWVzVG9DbGFpbXMoY2xhaW1zLCBjbGllbnRDYXBhYmlsaXRpZXMpO1xyXG4gICAgICAgIFJlcXVlc3RWYWxpZGF0b3IudmFsaWRhdGVDbGFpbXMobWVyZ2VkQ2xhaW1zKTtcclxuICAgICAgICB0aGlzLnBhcmFtZXRlcnMuc2V0KENMQUlNUywgZW5jb2RlVVJJQ29tcG9uZW50KG1lcmdlZENsYWltcykpO1xyXG4gICAgfVxyXG4gICAgLyoqXHJcbiAgICAgKiBhZGQgY29ycmVsYXRpb25JZFxyXG4gICAgICogQHBhcmFtIGNvcnJlbGF0aW9uSWRcclxuICAgICAqL1xyXG4gICAgYWRkQ29ycmVsYXRpb25JZChjb3JyZWxhdGlvbklkKSB7XHJcbiAgICAgICAgdGhpcy5wYXJhbWV0ZXJzLnNldChDTElFTlRfUkVRVUVTVF9JRCwgZW5jb2RlVVJJQ29tcG9uZW50KGNvcnJlbGF0aW9uSWQpKTtcclxuICAgIH1cclxuICAgIC8qKlxyXG4gICAgICogYWRkIGxpYnJhcnkgaW5mbyBxdWVyeSBwYXJhbXNcclxuICAgICAqIEBwYXJhbSBsaWJyYXJ5SW5mb1xyXG4gICAgICovXHJcbiAgICBhZGRMaWJyYXJ5SW5mbyhsaWJyYXJ5SW5mbykge1xyXG4gICAgICAgIC8vIFRlbGVtZXRyeSBJbmZvXHJcbiAgICAgICAgdGhpcy5wYXJhbWV0ZXJzLnNldChYX0NMSUVOVF9TS1UsIGxpYnJhcnlJbmZvLnNrdSk7XHJcbiAgICAgICAgdGhpcy5wYXJhbWV0ZXJzLnNldChYX0NMSUVOVF9WRVIsIGxpYnJhcnlJbmZvLnZlcnNpb24pO1xyXG4gICAgICAgIGlmIChsaWJyYXJ5SW5mby5vcykge1xyXG4gICAgICAgICAgICB0aGlzLnBhcmFtZXRlcnMuc2V0KFhfQ0xJRU5UX09TLCBsaWJyYXJ5SW5mby5vcyk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChsaWJyYXJ5SW5mby5jcHUpIHtcclxuICAgICAgICAgICAgdGhpcy5wYXJhbWV0ZXJzLnNldChYX0NMSUVOVF9DUFUsIGxpYnJhcnlJbmZvLmNwdSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgLyoqXHJcbiAgICAgKiBBZGQgY2xpZW50IHRlbGVtZXRyeSBwYXJhbWV0ZXJzXHJcbiAgICAgKiBAcGFyYW0gYXBwVGVsZW1ldHJ5XHJcbiAgICAgKi9cclxuICAgIGFkZEFwcGxpY2F0aW9uVGVsZW1ldHJ5KGFwcFRlbGVtZXRyeSkge1xyXG4gICAgICAgIGlmIChhcHBUZWxlbWV0cnk/LmFwcE5hbWUpIHtcclxuICAgICAgICAgICAgdGhpcy5wYXJhbWV0ZXJzLnNldChYX0FQUF9OQU1FLCBhcHBUZWxlbWV0cnkuYXBwTmFtZSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChhcHBUZWxlbWV0cnk/LmFwcFZlcnNpb24pIHtcclxuICAgICAgICAgICAgdGhpcy5wYXJhbWV0ZXJzLnNldChYX0FQUF9WRVIsIGFwcFRlbGVtZXRyeS5hcHBWZXJzaW9uKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICAvKipcclxuICAgICAqIGFkZCBwcm9tcHRcclxuICAgICAqIEBwYXJhbSBwcm9tcHRcclxuICAgICAqL1xyXG4gICAgYWRkUHJvbXB0KHByb21wdCkge1xyXG4gICAgICAgIFJlcXVlc3RWYWxpZGF0b3IudmFsaWRhdGVQcm9tcHQocHJvbXB0KTtcclxuICAgICAgICB0aGlzLnBhcmFtZXRlcnMuc2V0KGAke1BST01QVH1gLCBlbmNvZGVVUklDb21wb25lbnQocHJvbXB0KSk7XHJcbiAgICB9XHJcbiAgICAvKipcclxuICAgICAqIGFkZCBzdGF0ZVxyXG4gICAgICogQHBhcmFtIHN0YXRlXHJcbiAgICAgKi9cclxuICAgIGFkZFN0YXRlKHN0YXRlKSB7XHJcbiAgICAgICAgaWYgKHN0YXRlKSB7XHJcbiAgICAgICAgICAgIHRoaXMucGFyYW1ldGVycy5zZXQoU1RBVEUsIGVuY29kZVVSSUNvbXBvbmVudChzdGF0ZSkpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIC8qKlxyXG4gICAgICogYWRkIG5vbmNlXHJcbiAgICAgKiBAcGFyYW0gbm9uY2VcclxuICAgICAqL1xyXG4gICAgYWRkTm9uY2Uobm9uY2UpIHtcclxuICAgICAgICB0aGlzLnBhcmFtZXRlcnMuc2V0KE5PTkNFLCBlbmNvZGVVUklDb21wb25lbnQobm9uY2UpKTtcclxuICAgIH1cclxuICAgIC8qKlxyXG4gICAgICogYWRkIGNvZGVfY2hhbGxlbmdlIGFuZCBjb2RlX2NoYWxsZW5nZV9tZXRob2RcclxuICAgICAqIC0gdGhyb3cgaWYgZWl0aGVyIG9mIHRoZW0gYXJlIG5vdCBwYXNzZWRcclxuICAgICAqIEBwYXJhbSBjb2RlQ2hhbGxlbmdlXHJcbiAgICAgKiBAcGFyYW0gY29kZUNoYWxsZW5nZU1ldGhvZFxyXG4gICAgICovXHJcbiAgICBhZGRDb2RlQ2hhbGxlbmdlUGFyYW1zKGNvZGVDaGFsbGVuZ2UsIGNvZGVDaGFsbGVuZ2VNZXRob2QpIHtcclxuICAgICAgICBSZXF1ZXN0VmFsaWRhdG9yLnZhbGlkYXRlQ29kZUNoYWxsZW5nZVBhcmFtcyhjb2RlQ2hhbGxlbmdlLCBjb2RlQ2hhbGxlbmdlTWV0aG9kKTtcclxuICAgICAgICBpZiAoY29kZUNoYWxsZW5nZSAmJiBjb2RlQ2hhbGxlbmdlTWV0aG9kKSB7XHJcbiAgICAgICAgICAgIHRoaXMucGFyYW1ldGVycy5zZXQoQ09ERV9DSEFMTEVOR0UsIGVuY29kZVVSSUNvbXBvbmVudChjb2RlQ2hhbGxlbmdlKSk7XHJcbiAgICAgICAgICAgIHRoaXMucGFyYW1ldGVycy5zZXQoQ09ERV9DSEFMTEVOR0VfTUVUSE9ELCBlbmNvZGVVUklDb21wb25lbnQoY29kZUNoYWxsZW5nZU1ldGhvZCkpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgdGhyb3cgY3JlYXRlQ2xpZW50Q29uZmlndXJhdGlvbkVycm9yKHBrY2VQYXJhbXNNaXNzaW5nKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICAvKipcclxuICAgICAqIGFkZCB0aGUgYGF1dGhvcml6YXRpb25fY29kZWAgcGFzc2VkIGJ5IHRoZSB1c2VyIHRvIGV4Y2hhbmdlIGZvciBhIHRva2VuXHJcbiAgICAgKiBAcGFyYW0gY29kZVxyXG4gICAgICovXHJcbiAgICBhZGRBdXRob3JpemF0aW9uQ29kZShjb2RlKSB7XHJcbiAgICAgICAgdGhpcy5wYXJhbWV0ZXJzLnNldChDT0RFLCBlbmNvZGVVUklDb21wb25lbnQoY29kZSkpO1xyXG4gICAgfVxyXG4gICAgLyoqXHJcbiAgICAgKiBhZGQgdGhlIGBhdXRob3JpemF0aW9uX2NvZGVgIHBhc3NlZCBieSB0aGUgdXNlciB0byBleGNoYW5nZSBmb3IgYSB0b2tlblxyXG4gICAgICogQHBhcmFtIGNvZGVcclxuICAgICAqL1xyXG4gICAgYWRkRGV2aWNlQ29kZShjb2RlKSB7XHJcbiAgICAgICAgdGhpcy5wYXJhbWV0ZXJzLnNldChERVZJQ0VfQ09ERSwgZW5jb2RlVVJJQ29tcG9uZW50KGNvZGUpKTtcclxuICAgIH1cclxuICAgIC8qKlxyXG4gICAgICogYWRkIHRoZSBgcmVmcmVzaFRva2VuYCBwYXNzZWQgYnkgdGhlIHVzZXJcclxuICAgICAqIEBwYXJhbSByZWZyZXNoVG9rZW5cclxuICAgICAqL1xyXG4gICAgYWRkUmVmcmVzaFRva2VuKHJlZnJlc2hUb2tlbikge1xyXG4gICAgICAgIHRoaXMucGFyYW1ldGVycy5zZXQoUkVGUkVTSF9UT0tFTiwgZW5jb2RlVVJJQ29tcG9uZW50KHJlZnJlc2hUb2tlbikpO1xyXG4gICAgfVxyXG4gICAgLyoqXHJcbiAgICAgKiBhZGQgdGhlIGBjb2RlX3ZlcmlmaWVyYCBwYXNzZWQgYnkgdGhlIHVzZXIgdG8gZXhjaGFuZ2UgZm9yIGEgdG9rZW5cclxuICAgICAqIEBwYXJhbSBjb2RlVmVyaWZpZXJcclxuICAgICAqL1xyXG4gICAgYWRkQ29kZVZlcmlmaWVyKGNvZGVWZXJpZmllcikge1xyXG4gICAgICAgIHRoaXMucGFyYW1ldGVycy5zZXQoQ09ERV9WRVJJRklFUiwgZW5jb2RlVVJJQ29tcG9uZW50KGNvZGVWZXJpZmllcikpO1xyXG4gICAgfVxyXG4gICAgLyoqXHJcbiAgICAgKiBhZGQgY2xpZW50X3NlY3JldFxyXG4gICAgICogQHBhcmFtIGNsaWVudFNlY3JldFxyXG4gICAgICovXHJcbiAgICBhZGRDbGllbnRTZWNyZXQoY2xpZW50U2VjcmV0KSB7XHJcbiAgICAgICAgdGhpcy5wYXJhbWV0ZXJzLnNldChDTElFTlRfU0VDUkVULCBlbmNvZGVVUklDb21wb25lbnQoY2xpZW50U2VjcmV0KSk7XHJcbiAgICB9XHJcbiAgICAvKipcclxuICAgICAqIGFkZCBjbGllbnRBc3NlcnRpb24gZm9yIGNvbmZpZGVudGlhbCBjbGllbnQgZmxvd3NcclxuICAgICAqIEBwYXJhbSBjbGllbnRBc3NlcnRpb25cclxuICAgICAqL1xyXG4gICAgYWRkQ2xpZW50QXNzZXJ0aW9uKGNsaWVudEFzc2VydGlvbikge1xyXG4gICAgICAgIGlmIChjbGllbnRBc3NlcnRpb24pIHtcclxuICAgICAgICAgICAgdGhpcy5wYXJhbWV0ZXJzLnNldChDTElFTlRfQVNTRVJUSU9OLCBlbmNvZGVVUklDb21wb25lbnQoY2xpZW50QXNzZXJ0aW9uKSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgLyoqXHJcbiAgICAgKiBhZGQgY2xpZW50QXNzZXJ0aW9uVHlwZSBmb3IgY29uZmlkZW50aWFsIGNsaWVudCBmbG93c1xyXG4gICAgICogQHBhcmFtIGNsaWVudEFzc2VydGlvblR5cGVcclxuICAgICAqL1xyXG4gICAgYWRkQ2xpZW50QXNzZXJ0aW9uVHlwZShjbGllbnRBc3NlcnRpb25UeXBlKSB7XHJcbiAgICAgICAgaWYgKGNsaWVudEFzc2VydGlvblR5cGUpIHtcclxuICAgICAgICAgICAgdGhpcy5wYXJhbWV0ZXJzLnNldChDTElFTlRfQVNTRVJUSU9OX1RZUEUsIGVuY29kZVVSSUNvbXBvbmVudChjbGllbnRBc3NlcnRpb25UeXBlKSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgLyoqXHJcbiAgICAgKiBhZGQgT0JPIGFzc2VydGlvbiBmb3IgY29uZmlkZW50aWFsIGNsaWVudCBmbG93c1xyXG4gICAgICogQHBhcmFtIGNsaWVudEFzc2VydGlvblxyXG4gICAgICovXHJcbiAgICBhZGRPYm9Bc3NlcnRpb24ob2JvQXNzZXJ0aW9uKSB7XHJcbiAgICAgICAgdGhpcy5wYXJhbWV0ZXJzLnNldChPQk9fQVNTRVJUSU9OLCBlbmNvZGVVUklDb21wb25lbnQob2JvQXNzZXJ0aW9uKSk7XHJcbiAgICB9XHJcbiAgICAvKipcclxuICAgICAqIGFkZCBncmFudCB0eXBlXHJcbiAgICAgKiBAcGFyYW0gZ3JhbnRUeXBlXHJcbiAgICAgKi9cclxuICAgIGFkZFJlcXVlc3RUb2tlblVzZSh0b2tlblVzZSkge1xyXG4gICAgICAgIHRoaXMucGFyYW1ldGVycy5zZXQoUkVRVUVTVEVEX1RPS0VOX1VTRSwgZW5jb2RlVVJJQ29tcG9uZW50KHRva2VuVXNlKSk7XHJcbiAgICB9XHJcbiAgICAvKipcclxuICAgICAqIGFkZCBncmFudCB0eXBlXHJcbiAgICAgKiBAcGFyYW0gZ3JhbnRUeXBlXHJcbiAgICAgKi9cclxuICAgIGFkZEdyYW50VHlwZShncmFudFR5cGUpIHtcclxuICAgICAgICB0aGlzLnBhcmFtZXRlcnMuc2V0KEdSQU5UX1RZUEUsIGVuY29kZVVSSUNvbXBvbmVudChncmFudFR5cGUpKTtcclxuICAgIH1cclxuICAgIC8qKlxyXG4gICAgICogYWRkIGNsaWVudCBpbmZvXHJcbiAgICAgKlxyXG4gICAgICovXHJcbiAgICBhZGRDbGllbnRJbmZvKCkge1xyXG4gICAgICAgIHRoaXMucGFyYW1ldGVycy5zZXQoQ0xJRU5UX0lORk8sIFwiMVwiKTtcclxuICAgIH1cclxuICAgIC8qKlxyXG4gICAgICogYWRkIGV4dHJhUXVlcnlQYXJhbXNcclxuICAgICAqIEBwYXJhbSBlUVBhcmFtc1xyXG4gICAgICovXHJcbiAgICBhZGRFeHRyYVF1ZXJ5UGFyYW1ldGVycyhlUVBhcmFtcykge1xyXG4gICAgICAgIE9iamVjdC5lbnRyaWVzKGVRUGFyYW1zKS5mb3JFYWNoKChba2V5LCB2YWx1ZV0pID0+IHtcclxuICAgICAgICAgICAgaWYgKCF0aGlzLnBhcmFtZXRlcnMuaGFzKGtleSkgJiYgdmFsdWUpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMucGFyYW1ldGVycy5zZXQoa2V5LCB2YWx1ZSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgIH1cclxuICAgIGFkZENsaWVudENhcGFiaWxpdGllc1RvQ2xhaW1zKGNsYWltcywgY2xpZW50Q2FwYWJpbGl0aWVzKSB7XHJcbiAgICAgICAgbGV0IG1lcmdlZENsYWltcztcclxuICAgICAgICAvLyBQYXJzZSBwcm92aWRlZCBjbGFpbXMgaW50byBKU09OIG9iamVjdCBvciBpbml0aWFsaXplIGVtcHR5IG9iamVjdFxyXG4gICAgICAgIGlmICghY2xhaW1zKSB7XHJcbiAgICAgICAgICAgIG1lcmdlZENsYWltcyA9IHt9O1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgICAgIG1lcmdlZENsYWltcyA9IEpTT04ucGFyc2UoY2xhaW1zKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBjYXRjaCAoZSkge1xyXG4gICAgICAgICAgICAgICAgdGhyb3cgY3JlYXRlQ2xpZW50Q29uZmlndXJhdGlvbkVycm9yKGludmFsaWRDbGFpbXMpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChjbGllbnRDYXBhYmlsaXRpZXMgJiYgY2xpZW50Q2FwYWJpbGl0aWVzLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgaWYgKCFtZXJnZWRDbGFpbXMuaGFzT3duUHJvcGVydHkoQ2xhaW1zUmVxdWVzdEtleXMuQUNDRVNTX1RPS0VOKSkge1xyXG4gICAgICAgICAgICAgICAgLy8gQWRkIGFjY2Vzc190b2tlbiBrZXkgdG8gY2xhaW1zIG9iamVjdFxyXG4gICAgICAgICAgICAgICAgbWVyZ2VkQ2xhaW1zW0NsYWltc1JlcXVlc3RLZXlzLkFDQ0VTU19UT0tFTl0gPSB7fTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAvLyBBZGQgeG1zX2NjIGNsYWltIHdpdGggcHJvdmlkZWQgY2xpZW50Q2FwYWJpbGl0aWVzIHRvIGFjY2Vzc190b2tlbiBrZXlcclxuICAgICAgICAgICAgbWVyZ2VkQ2xhaW1zW0NsYWltc1JlcXVlc3RLZXlzLkFDQ0VTU19UT0tFTl1bQ2xhaW1zUmVxdWVzdEtleXMuWE1TX0NDXSA9IHtcclxuICAgICAgICAgICAgICAgIHZhbHVlczogY2xpZW50Q2FwYWJpbGl0aWVzLFxyXG4gICAgICAgICAgICB9O1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gSlNPTi5zdHJpbmdpZnkobWVyZ2VkQ2xhaW1zKTtcclxuICAgIH1cclxuICAgIC8qKlxyXG4gICAgICogYWRkcyBgdXNlcm5hbWVgIGZvciBQYXNzd29yZCBHcmFudCBmbG93XHJcbiAgICAgKiBAcGFyYW0gdXNlcm5hbWVcclxuICAgICAqL1xyXG4gICAgYWRkVXNlcm5hbWUodXNlcm5hbWUpIHtcclxuICAgICAgICB0aGlzLnBhcmFtZXRlcnMuc2V0KFBhc3N3b3JkR3JhbnRDb25zdGFudHMudXNlcm5hbWUsIGVuY29kZVVSSUNvbXBvbmVudCh1c2VybmFtZSkpO1xyXG4gICAgfVxyXG4gICAgLyoqXHJcbiAgICAgKiBhZGRzIGBwYXNzd29yZGAgZm9yIFBhc3N3b3JkIEdyYW50IGZsb3dcclxuICAgICAqIEBwYXJhbSBwYXNzd29yZFxyXG4gICAgICovXHJcbiAgICBhZGRQYXNzd29yZChwYXNzd29yZCkge1xyXG4gICAgICAgIHRoaXMucGFyYW1ldGVycy5zZXQoUGFzc3dvcmRHcmFudENvbnN0YW50cy5wYXNzd29yZCwgZW5jb2RlVVJJQ29tcG9uZW50KHBhc3N3b3JkKSk7XHJcbiAgICB9XHJcbiAgICAvKipcclxuICAgICAqIGFkZCBwb3BfandrIHRvIHF1ZXJ5IHBhcmFtc1xyXG4gICAgICogQHBhcmFtIGNuZlN0cmluZ1xyXG4gICAgICovXHJcbiAgICBhZGRQb3BUb2tlbihjbmZTdHJpbmcpIHtcclxuICAgICAgICBpZiAoY25mU3RyaW5nKSB7XHJcbiAgICAgICAgICAgIHRoaXMucGFyYW1ldGVycy5zZXQoVE9LRU5fVFlQRSwgQXV0aGVudGljYXRpb25TY2hlbWUuUE9QKTtcclxuICAgICAgICAgICAgdGhpcy5wYXJhbWV0ZXJzLnNldChSRVFfQ05GLCBlbmNvZGVVUklDb21wb25lbnQoY25mU3RyaW5nKSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgLyoqXHJcbiAgICAgKiBhZGQgU1NIIEpXSyBhbmQga2V5IElEIHRvIHF1ZXJ5IHBhcmFtc1xyXG4gICAgICovXHJcbiAgICBhZGRTc2hKd2soc3NoSndrU3RyaW5nKSB7XHJcbiAgICAgICAgaWYgKHNzaEp3a1N0cmluZykge1xyXG4gICAgICAgICAgICB0aGlzLnBhcmFtZXRlcnMuc2V0KFRPS0VOX1RZUEUsIEF1dGhlbnRpY2F0aW9uU2NoZW1lLlNTSCk7XHJcbiAgICAgICAgICAgIHRoaXMucGFyYW1ldGVycy5zZXQoUkVRX0NORiwgZW5jb2RlVVJJQ29tcG9uZW50KHNzaEp3a1N0cmluZykpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIC8qKlxyXG4gICAgICogYWRkIHNlcnZlciB0ZWxlbWV0cnkgZmllbGRzXHJcbiAgICAgKiBAcGFyYW0gc2VydmVyVGVsZW1ldHJ5TWFuYWdlclxyXG4gICAgICovXHJcbiAgICBhZGRTZXJ2ZXJUZWxlbWV0cnkoc2VydmVyVGVsZW1ldHJ5TWFuYWdlcikge1xyXG4gICAgICAgIHRoaXMucGFyYW1ldGVycy5zZXQoWF9DTElFTlRfQ1VSUl9URUxFTSwgc2VydmVyVGVsZW1ldHJ5TWFuYWdlci5nZW5lcmF0ZUN1cnJlbnRSZXF1ZXN0SGVhZGVyVmFsdWUoKSk7XHJcbiAgICAgICAgdGhpcy5wYXJhbWV0ZXJzLnNldChYX0NMSUVOVF9MQVNUX1RFTEVNLCBzZXJ2ZXJUZWxlbWV0cnlNYW5hZ2VyLmdlbmVyYXRlTGFzdFJlcXVlc3RIZWFkZXJWYWx1ZSgpKTtcclxuICAgIH1cclxuICAgIC8qKlxyXG4gICAgICogQWRkcyBwYXJhbWV0ZXIgdGhhdCBpbmRpY2F0ZXMgdG8gdGhlIHNlcnZlciB0aGF0IHRocm90dGxpbmcgaXMgc3VwcG9ydGVkXHJcbiAgICAgKi9cclxuICAgIGFkZFRocm90dGxpbmcoKSB7XHJcbiAgICAgICAgdGhpcy5wYXJhbWV0ZXJzLnNldChYX01TX0xJQl9DQVBBQklMSVRZLCBUaHJvdHRsaW5nQ29uc3RhbnRzLlhfTVNfTElCX0NBUEFCSUxJVFlfVkFMVUUpO1xyXG4gICAgfVxyXG4gICAgLyoqXHJcbiAgICAgKiBBZGRzIGxvZ291dF9oaW50IHBhcmFtZXRlciBmb3IgXCJzaWxlbnRcIiBsb2dvdXQgd2hpY2ggcHJldmVudCBzZXJ2ZXIgYWNjb3VudCBwaWNrZXJcclxuICAgICAqL1xyXG4gICAgYWRkTG9nb3V0SGludChsb2dvdXRIaW50KSB7XHJcbiAgICAgICAgdGhpcy5wYXJhbWV0ZXJzLnNldChMT0dPVVRfSElOVCwgZW5jb2RlVVJJQ29tcG9uZW50KGxvZ291dEhpbnQpKTtcclxuICAgIH1cclxuICAgIGFkZEJyb2tlclBhcmFtZXRlcnMocGFyYW1zKSB7XHJcbiAgICAgICAgY29uc3QgYnJva2VyUGFyYW1zID0ge307XHJcbiAgICAgICAgYnJva2VyUGFyYW1zW0JST0tFUl9DTElFTlRfSURdID1cclxuICAgICAgICAgICAgcGFyYW1zLmJyb2tlckNsaWVudElkO1xyXG4gICAgICAgIGJyb2tlclBhcmFtc1tCUk9LRVJfUkVESVJFQ1RfVVJJXSA9XHJcbiAgICAgICAgICAgIHBhcmFtcy5icm9rZXJSZWRpcmVjdFVyaTtcclxuICAgICAgICB0aGlzLmFkZEV4dHJhUXVlcnlQYXJhbWV0ZXJzKGJyb2tlclBhcmFtcyk7XHJcbiAgICB9XHJcbiAgICAvKipcclxuICAgICAqIFV0aWxpdHkgdG8gY3JlYXRlIGEgVVJMIGZyb20gdGhlIHBhcmFtcyBtYXBcclxuICAgICAqL1xyXG4gICAgY3JlYXRlUXVlcnlTdHJpbmcoKSB7XHJcbiAgICAgICAgY29uc3QgcXVlcnlQYXJhbWV0ZXJBcnJheSA9IG5ldyBBcnJheSgpO1xyXG4gICAgICAgIHRoaXMucGFyYW1ldGVycy5mb3JFYWNoKCh2YWx1ZSwga2V5KSA9PiB7XHJcbiAgICAgICAgICAgIHF1ZXJ5UGFyYW1ldGVyQXJyYXkucHVzaChgJHtrZXl9PSR7dmFsdWV9YCk7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgaW5zdHJ1bWVudEJyb2tlclBhcmFtcyh0aGlzLnBhcmFtZXRlcnMsIHRoaXMuY29ycmVsYXRpb25JZCwgdGhpcy5wZXJmb3JtYW5jZUNsaWVudCk7XHJcbiAgICAgICAgcmV0dXJuIHF1ZXJ5UGFyYW1ldGVyQXJyYXkuam9pbihcIiZcIik7XHJcbiAgICB9XHJcbn1cblxuZXhwb3J0IHsgUmVxdWVzdFBhcmFtZXRlckJ1aWxkZXIgfTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPVJlcXVlc3RQYXJhbWV0ZXJCdWlsZGVyLm1qcy5tYXBcbiIsIi8qISBAYXp1cmUvbXNhbC1jb21tb24gdjE0LjE2LjAgMjAyNC0xMS0wNSAqL1xuJ3VzZSBzdHJpY3QnO1xuaW1wb3J0IHsgQXV0aG9yaXR5LCBmb3JtYXRBdXRob3JpdHlVcmkgfSBmcm9tICcuL0F1dGhvcml0eS5tanMnO1xuaW1wb3J0IHsgY3JlYXRlQ2xpZW50QXV0aEVycm9yIH0gZnJvbSAnLi4vZXJyb3IvQ2xpZW50QXV0aEVycm9yLm1qcyc7XG5pbXBvcnQgeyBQZXJmb3JtYW5jZUV2ZW50cyB9IGZyb20gJy4uL3RlbGVtZXRyeS9wZXJmb3JtYW5jZS9QZXJmb3JtYW5jZUV2ZW50Lm1qcyc7XG5pbXBvcnQgeyBpbnZva2VBc3luYyB9IGZyb20gJy4uL3V0aWxzL0Z1bmN0aW9uV3JhcHBlcnMubWpzJztcbmltcG9ydCB7IGVuZHBvaW50UmVzb2x1dGlvbkVycm9yIH0gZnJvbSAnLi4vZXJyb3IvQ2xpZW50QXV0aEVycm9yQ29kZXMubWpzJztcblxuLypcclxuICogQ29weXJpZ2h0IChjKSBNaWNyb3NvZnQgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuXHJcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgTGljZW5zZS5cclxuICovXHJcbi8qKlxyXG4gKiBDcmVhdGUgYW4gYXV0aG9yaXR5IG9iamVjdCBvZiB0aGUgY29ycmVjdCB0eXBlIGJhc2VkIG9uIHRoZSB1cmxcclxuICogUGVyZm9ybXMgYmFzaWMgYXV0aG9yaXR5IHZhbGlkYXRpb24gLSBjaGVja3MgdG8gc2VlIGlmIHRoZSBhdXRob3JpdHkgaXMgb2YgYSB2YWxpZCB0eXBlIChpLmUuIGFhZCwgYjJjLCBhZGZzKVxyXG4gKlxyXG4gKiBBbHNvIHBlcmZvcm1zIGVuZHBvaW50IGRpc2NvdmVyeS5cclxuICpcclxuICogQHBhcmFtIGF1dGhvcml0eVVyaVxyXG4gKiBAcGFyYW0gbmV0d29ya0NsaWVudFxyXG4gKiBAcGFyYW0gcHJvdG9jb2xNb2RlXHJcbiAqIEBpbnRlcm5hbFxyXG4gKi9cclxuYXN5bmMgZnVuY3Rpb24gY3JlYXRlRGlzY292ZXJlZEluc3RhbmNlKGF1dGhvcml0eVVyaSwgbmV0d29ya0NsaWVudCwgY2FjaGVNYW5hZ2VyLCBhdXRob3JpdHlPcHRpb25zLCBsb2dnZXIsIGNvcnJlbGF0aW9uSWQsIHBlcmZvcm1hbmNlQ2xpZW50KSB7XHJcbiAgICBwZXJmb3JtYW5jZUNsaWVudD8uYWRkUXVldWVNZWFzdXJlbWVudChQZXJmb3JtYW5jZUV2ZW50cy5BdXRob3JpdHlGYWN0b3J5Q3JlYXRlRGlzY292ZXJlZEluc3RhbmNlLCBjb3JyZWxhdGlvbklkKTtcclxuICAgIGNvbnN0IGF1dGhvcml0eVVyaUZpbmFsID0gQXV0aG9yaXR5LnRyYW5zZm9ybUNJQU1BdXRob3JpdHkoZm9ybWF0QXV0aG9yaXR5VXJpKGF1dGhvcml0eVVyaSkpO1xyXG4gICAgLy8gSW5pdGlhbGl6ZSBhdXRob3JpdHkgYW5kIHBlcmZvcm0gZGlzY292ZXJ5IGVuZHBvaW50IGNoZWNrLlxyXG4gICAgY29uc3QgYWNxdWlyZVRva2VuQXV0aG9yaXR5ID0gbmV3IEF1dGhvcml0eShhdXRob3JpdHlVcmlGaW5hbCwgbmV0d29ya0NsaWVudCwgY2FjaGVNYW5hZ2VyLCBhdXRob3JpdHlPcHRpb25zLCBsb2dnZXIsIGNvcnJlbGF0aW9uSWQsIHBlcmZvcm1hbmNlQ2xpZW50KTtcclxuICAgIHRyeSB7XHJcbiAgICAgICAgYXdhaXQgaW52b2tlQXN5bmMoYWNxdWlyZVRva2VuQXV0aG9yaXR5LnJlc29sdmVFbmRwb2ludHNBc3luYy5iaW5kKGFjcXVpcmVUb2tlbkF1dGhvcml0eSksIFBlcmZvcm1hbmNlRXZlbnRzLkF1dGhvcml0eVJlc29sdmVFbmRwb2ludHNBc3luYywgbG9nZ2VyLCBwZXJmb3JtYW5jZUNsaWVudCwgY29ycmVsYXRpb25JZCkoKTtcclxuICAgICAgICByZXR1cm4gYWNxdWlyZVRva2VuQXV0aG9yaXR5O1xyXG4gICAgfVxyXG4gICAgY2F0Y2ggKGUpIHtcclxuICAgICAgICB0aHJvdyBjcmVhdGVDbGllbnRBdXRoRXJyb3IoZW5kcG9pbnRSZXNvbHV0aW9uRXJyb3IpO1xyXG4gICAgfVxyXG59XG5cbmV4cG9ydCB7IGNyZWF0ZURpc2NvdmVyZWRJbnN0YW5jZSB9O1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9QXV0aG9yaXR5RmFjdG9yeS5tanMubWFwXG4iLCIvKiEgQGF6dXJlL21zYWwtY29tbW9uIHYxNC4xNi4wIDIwMjQtMTEtMDUgKi9cbid1c2Ugc3RyaWN0JztcbmltcG9ydCB7IGJ1aWxkQ2xpZW50Q29uZmlndXJhdGlvbiB9IGZyb20gJy4uL2NvbmZpZy9DbGllbnRDb25maWd1cmF0aW9uLm1qcyc7XG5pbXBvcnQgeyBMb2dnZXIgfSBmcm9tICcuLi9sb2dnZXIvTG9nZ2VyLm1qcyc7XG5pbXBvcnQgeyBIZWFkZXJOYW1lcywgQ29uc3RhbnRzIH0gZnJvbSAnLi4vdXRpbHMvQ29uc3RhbnRzLm1qcyc7XG5pbXBvcnQgeyBuYW1lLCB2ZXJzaW9uIH0gZnJvbSAnLi4vcGFja2FnZU1ldGFkYXRhLm1qcyc7XG5pbXBvcnQgeyBDY3NDcmVkZW50aWFsVHlwZSB9IGZyb20gJy4uL2FjY291bnQvQ2NzQ3JlZGVudGlhbC5tanMnO1xuaW1wb3J0IHsgYnVpbGRDbGllbnRJbmZvRnJvbUhvbWVBY2NvdW50SWQgfSBmcm9tICcuLi9hY2NvdW50L0NsaWVudEluZm8ubWpzJztcbmltcG9ydCB7IFJlcXVlc3RQYXJhbWV0ZXJCdWlsZGVyIH0gZnJvbSAnLi4vcmVxdWVzdC9SZXF1ZXN0UGFyYW1ldGVyQnVpbGRlci5tanMnO1xuaW1wb3J0IHsgY3JlYXRlRGlzY292ZXJlZEluc3RhbmNlIH0gZnJvbSAnLi4vYXV0aG9yaXR5L0F1dGhvcml0eUZhY3RvcnkubWpzJztcbmltcG9ydCB7IFBlcmZvcm1hbmNlRXZlbnRzIH0gZnJvbSAnLi4vdGVsZW1ldHJ5L3BlcmZvcm1hbmNlL1BlcmZvcm1hbmNlRXZlbnQubWpzJztcbmltcG9ydCB7IFRocm90dGxpbmdVdGlscyB9IGZyb20gJy4uL25ldHdvcmsvVGhyb3R0bGluZ1V0aWxzLm1qcyc7XG5pbXBvcnQgeyBBdXRoRXJyb3IgfSBmcm9tICcuLi9lcnJvci9BdXRoRXJyb3IubWpzJztcbmltcG9ydCB7IGNyZWF0ZUNsaWVudEF1dGhFcnJvciB9IGZyb20gJy4uL2Vycm9yL0NsaWVudEF1dGhFcnJvci5tanMnO1xuaW1wb3J0IHsgTmV0d29ya0Vycm9yIH0gZnJvbSAnLi4vZXJyb3IvTmV0d29ya0Vycm9yLm1qcyc7XG5pbXBvcnQgeyBpbnZva2VBc3luYyB9IGZyb20gJy4uL3V0aWxzL0Z1bmN0aW9uV3JhcHBlcnMubWpzJztcbmltcG9ydCB7IG5ldHdvcmtFcnJvciB9IGZyb20gJy4uL2Vycm9yL0NsaWVudEF1dGhFcnJvckNvZGVzLm1qcyc7XG5cbi8qXHJcbiAqIENvcHlyaWdodCAoYykgTWljcm9zb2Z0IENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLlxyXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgTUlUIExpY2Vuc2UuXHJcbiAqL1xyXG4vKipcclxuICogQmFzZSBhcHBsaWNhdGlvbiBjbGFzcyB3aGljaCB3aWxsIGNvbnN0cnVjdCByZXF1ZXN0cyB0byBzZW5kIHRvIGFuZCBoYW5kbGUgcmVzcG9uc2VzIGZyb20gdGhlIE1pY3Jvc29mdCBTVFMgdXNpbmcgdGhlIGF1dGhvcml6YXRpb24gY29kZSBmbG93LlxyXG4gKiBAaW50ZXJuYWxcclxuICovXHJcbmNsYXNzIEJhc2VDbGllbnQge1xyXG4gICAgY29uc3RydWN0b3IoY29uZmlndXJhdGlvbiwgcGVyZm9ybWFuY2VDbGllbnQpIHtcclxuICAgICAgICAvLyBTZXQgdGhlIGNvbmZpZ3VyYXRpb25cclxuICAgICAgICB0aGlzLmNvbmZpZyA9IGJ1aWxkQ2xpZW50Q29uZmlndXJhdGlvbihjb25maWd1cmF0aW9uKTtcclxuICAgICAgICAvLyBJbml0aWFsaXplIHRoZSBsb2dnZXJcclxuICAgICAgICB0aGlzLmxvZ2dlciA9IG5ldyBMb2dnZXIodGhpcy5jb25maWcubG9nZ2VyT3B0aW9ucywgbmFtZSwgdmVyc2lvbik7XHJcbiAgICAgICAgLy8gSW5pdGlhbGl6ZSBjcnlwdG9cclxuICAgICAgICB0aGlzLmNyeXB0b1V0aWxzID0gdGhpcy5jb25maWcuY3J5cHRvSW50ZXJmYWNlO1xyXG4gICAgICAgIC8vIEluaXRpYWxpemUgc3RvcmFnZSBpbnRlcmZhY2VcclxuICAgICAgICB0aGlzLmNhY2hlTWFuYWdlciA9IHRoaXMuY29uZmlnLnN0b3JhZ2VJbnRlcmZhY2U7XHJcbiAgICAgICAgLy8gU2V0IHRoZSBuZXR3b3JrIGludGVyZmFjZVxyXG4gICAgICAgIHRoaXMubmV0d29ya0NsaWVudCA9IHRoaXMuY29uZmlnLm5ldHdvcmtJbnRlcmZhY2U7XHJcbiAgICAgICAgLy8gU2V0IFRlbGVtZXRyeU1hbmFnZXJcclxuICAgICAgICB0aGlzLnNlcnZlclRlbGVtZXRyeU1hbmFnZXIgPSB0aGlzLmNvbmZpZy5zZXJ2ZXJUZWxlbWV0cnlNYW5hZ2VyO1xyXG4gICAgICAgIC8vIHNldCBBdXRob3JpdHlcclxuICAgICAgICB0aGlzLmF1dGhvcml0eSA9IHRoaXMuY29uZmlnLmF1dGhPcHRpb25zLmF1dGhvcml0eTtcclxuICAgICAgICAvLyBzZXQgcGVyZm9ybWFuY2UgdGVsZW1ldHJ5IGNsaWVudFxyXG4gICAgICAgIHRoaXMucGVyZm9ybWFuY2VDbGllbnQgPSBwZXJmb3JtYW5jZUNsaWVudDtcclxuICAgIH1cclxuICAgIC8qKlxyXG4gICAgICogQ3JlYXRlcyBkZWZhdWx0IGhlYWRlcnMgZm9yIHJlcXVlc3RzIHRvIHRva2VuIGVuZHBvaW50XHJcbiAgICAgKi9cclxuICAgIGNyZWF0ZVRva2VuUmVxdWVzdEhlYWRlcnMoY2NzQ3JlZCkge1xyXG4gICAgICAgIGNvbnN0IGhlYWRlcnMgPSB7fTtcclxuICAgICAgICBoZWFkZXJzW0hlYWRlck5hbWVzLkNPTlRFTlRfVFlQRV0gPSBDb25zdGFudHMuVVJMX0ZPUk1fQ09OVEVOVF9UWVBFO1xyXG4gICAgICAgIGlmICghdGhpcy5jb25maWcuc3lzdGVtT3B0aW9ucy5wcmV2ZW50Q29yc1ByZWZsaWdodCAmJiBjY3NDcmVkKSB7XHJcbiAgICAgICAgICAgIHN3aXRjaCAoY2NzQ3JlZC50eXBlKSB7XHJcbiAgICAgICAgICAgICAgICBjYXNlIENjc0NyZWRlbnRpYWxUeXBlLkhPTUVfQUNDT1VOVF9JRDpcclxuICAgICAgICAgICAgICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjbGllbnRJbmZvID0gYnVpbGRDbGllbnRJbmZvRnJvbUhvbWVBY2NvdW50SWQoY2NzQ3JlZC5jcmVkZW50aWFsKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaGVhZGVyc1tIZWFkZXJOYW1lcy5DQ1NfSEVBREVSXSA9IGBPaWQ6JHtjbGllbnRJbmZvLnVpZH1AJHtjbGllbnRJbmZvLnV0aWR9YDtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgY2F0Y2ggKGUpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5sb2dnZXIudmVyYm9zZShcIkNvdWxkIG5vdCBwYXJzZSBob21lIGFjY291bnQgSUQgZm9yIENDUyBIZWFkZXI6IFwiICtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGUpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgIGNhc2UgQ2NzQ3JlZGVudGlhbFR5cGUuVVBOOlxyXG4gICAgICAgICAgICAgICAgICAgIGhlYWRlcnNbSGVhZGVyTmFtZXMuQ0NTX0hFQURFUl0gPSBgVVBOOiAke2Njc0NyZWQuY3JlZGVudGlhbH1gO1xyXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBoZWFkZXJzO1xyXG4gICAgfVxyXG4gICAgLyoqXHJcbiAgICAgKiBIdHRwIHBvc3QgdG8gdG9rZW4gZW5kcG9pbnRcclxuICAgICAqIEBwYXJhbSB0b2tlbkVuZHBvaW50XHJcbiAgICAgKiBAcGFyYW0gcXVlcnlTdHJpbmdcclxuICAgICAqIEBwYXJhbSBoZWFkZXJzXHJcbiAgICAgKiBAcGFyYW0gdGh1bWJwcmludFxyXG4gICAgICovXHJcbiAgICBhc3luYyBleGVjdXRlUG9zdFRvVG9rZW5FbmRwb2ludCh0b2tlbkVuZHBvaW50LCBxdWVyeVN0cmluZywgaGVhZGVycywgdGh1bWJwcmludCwgY29ycmVsYXRpb25JZCwgcXVldWVkRXZlbnQpIHtcclxuICAgICAgICBpZiAocXVldWVkRXZlbnQpIHtcclxuICAgICAgICAgICAgdGhpcy5wZXJmb3JtYW5jZUNsaWVudD8uYWRkUXVldWVNZWFzdXJlbWVudChxdWV1ZWRFdmVudCwgY29ycmVsYXRpb25JZCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgdGhpcy5zZW5kUG9zdFJlcXVlc3QodGh1bWJwcmludCwgdG9rZW5FbmRwb2ludCwgeyBib2R5OiBxdWVyeVN0cmluZywgaGVhZGVyczogaGVhZGVycyB9LCBjb3JyZWxhdGlvbklkKTtcclxuICAgICAgICBpZiAodGhpcy5jb25maWcuc2VydmVyVGVsZW1ldHJ5TWFuYWdlciAmJlxyXG4gICAgICAgICAgICByZXNwb25zZS5zdGF0dXMgPCA1MDAgJiZcclxuICAgICAgICAgICAgcmVzcG9uc2Uuc3RhdHVzICE9PSA0MjkpIHtcclxuICAgICAgICAgICAgLy8gVGVsZW1ldHJ5IGRhdGEgc3VjY2Vzc2Z1bGx5IGxvZ2dlZCBieSBzZXJ2ZXIsIGNsZWFyIFRlbGVtZXRyeSBjYWNoZVxyXG4gICAgICAgICAgICB0aGlzLmNvbmZpZy5zZXJ2ZXJUZWxlbWV0cnlNYW5hZ2VyLmNsZWFyVGVsZW1ldHJ5Q2FjaGUoKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHJlc3BvbnNlO1xyXG4gICAgfVxyXG4gICAgLyoqXHJcbiAgICAgKiBXcmFwcyBzZW5kUG9zdFJlcXVlc3RBc3luYyB3aXRoIG5lY2Vzc2FyeSBwcmVmbGlnaHQgYW5kIHBvc3RmbGlnaHQgbG9naWNcclxuICAgICAqIEBwYXJhbSB0aHVtYnByaW50IC0gUmVxdWVzdCB0aHVtYnByaW50IGZvciB0aHJvdHRsaW5nXHJcbiAgICAgKiBAcGFyYW0gdG9rZW5FbmRwb2ludCAtIEVuZHBvaW50IHRvIG1ha2UgdGhlIFBPU1QgdG9cclxuICAgICAqIEBwYXJhbSBvcHRpb25zIC0gQm9keSBhbmQgSGVhZGVycyB0byBpbmNsdWRlIG9uIHRoZSBQT1NUIHJlcXVlc3RcclxuICAgICAqIEBwYXJhbSBjb3JyZWxhdGlvbklkIC0gQ29ycmVsYXRpb25JZCBmb3IgdGVsZW1ldHJ5XHJcbiAgICAgKi9cclxuICAgIGFzeW5jIHNlbmRQb3N0UmVxdWVzdCh0aHVtYnByaW50LCB0b2tlbkVuZHBvaW50LCBvcHRpb25zLCBjb3JyZWxhdGlvbklkKSB7XHJcbiAgICAgICAgVGhyb3R0bGluZ1V0aWxzLnByZVByb2Nlc3ModGhpcy5jYWNoZU1hbmFnZXIsIHRodW1icHJpbnQpO1xyXG4gICAgICAgIGxldCByZXNwb25zZTtcclxuICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICByZXNwb25zZSA9IGF3YWl0IGludm9rZUFzeW5jKCh0aGlzLm5ldHdvcmtDbGllbnQuc2VuZFBvc3RSZXF1ZXN0QXN5bmMuYmluZCh0aGlzLm5ldHdvcmtDbGllbnQpKSwgUGVyZm9ybWFuY2VFdmVudHMuTmV0d29ya0NsaWVudFNlbmRQb3N0UmVxdWVzdEFzeW5jLCB0aGlzLmxvZ2dlciwgdGhpcy5wZXJmb3JtYW5jZUNsaWVudCwgY29ycmVsYXRpb25JZCkodG9rZW5FbmRwb2ludCwgb3B0aW9ucyk7XHJcbiAgICAgICAgICAgIGNvbnN0IHJlc3BvbnNlSGVhZGVycyA9IHJlc3BvbnNlLmhlYWRlcnMgfHwge307XHJcbiAgICAgICAgICAgIHRoaXMucGVyZm9ybWFuY2VDbGllbnQ/LmFkZEZpZWxkcyh7XHJcbiAgICAgICAgICAgICAgICByZWZyZXNoVG9rZW5TaXplOiByZXNwb25zZS5ib2R5LnJlZnJlc2hfdG9rZW4/Lmxlbmd0aCB8fCAwLFxyXG4gICAgICAgICAgICAgICAgaHR0cFZlclRva2VuOiByZXNwb25zZUhlYWRlcnNbSGVhZGVyTmFtZXMuWF9NU19IVFRQX1ZFUlNJT05dIHx8IFwiXCIsXHJcbiAgICAgICAgICAgICAgICByZXF1ZXN0SWQ6IHJlc3BvbnNlSGVhZGVyc1tIZWFkZXJOYW1lcy5YX01TX1JFUVVFU1RfSURdIHx8IFwiXCIsXHJcbiAgICAgICAgICAgIH0sIGNvcnJlbGF0aW9uSWQpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjYXRjaCAoZSkge1xyXG4gICAgICAgICAgICBpZiAoZSBpbnN0YW5jZW9mIE5ldHdvcmtFcnJvcikge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgcmVzcG9uc2VIZWFkZXJzID0gZS5yZXNwb25zZUhlYWRlcnM7XHJcbiAgICAgICAgICAgICAgICBpZiAocmVzcG9uc2VIZWFkZXJzKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5wZXJmb3JtYW5jZUNsaWVudD8uYWRkRmllbGRzKHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaHR0cFZlclRva2VuOiByZXNwb25zZUhlYWRlcnNbSGVhZGVyTmFtZXMuWF9NU19IVFRQX1ZFUlNJT05dIHx8IFwiXCIsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlcXVlc3RJZDogcmVzcG9uc2VIZWFkZXJzW0hlYWRlck5hbWVzLlhfTVNfUkVRVUVTVF9JRF0gfHxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiXCIsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRlbnRUeXBlSGVhZGVyOiByZXNwb25zZUhlYWRlcnNbSGVhZGVyTmFtZXMuQ09OVEVOVF9UWVBFXSB8fFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5kZWZpbmVkLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb250ZW50TGVuZ3RoSGVhZGVyOiByZXNwb25zZUhlYWRlcnNbSGVhZGVyTmFtZXMuQ09OVEVOVF9MRU5HVEhdIHx8XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bmRlZmluZWQsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGh0dHBTdGF0dXM6IGUuaHR0cFN0YXR1cyxcclxuICAgICAgICAgICAgICAgICAgICB9LCBjb3JyZWxhdGlvbklkKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIHRocm93IGUuZXJyb3I7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYgKGUgaW5zdGFuY2VvZiBBdXRoRXJyb3IpIHtcclxuICAgICAgICAgICAgICAgIHRocm93IGU7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICB0aHJvdyBjcmVhdGVDbGllbnRBdXRoRXJyb3IobmV0d29ya0Vycm9yKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBUaHJvdHRsaW5nVXRpbHMucG9zdFByb2Nlc3ModGhpcy5jYWNoZU1hbmFnZXIsIHRodW1icHJpbnQsIHJlc3BvbnNlKTtcclxuICAgICAgICByZXR1cm4gcmVzcG9uc2U7XHJcbiAgICB9XHJcbiAgICAvKipcclxuICAgICAqIFVwZGF0ZXMgdGhlIGF1dGhvcml0eSBvYmplY3Qgb2YgdGhlIGNsaWVudC4gRW5kcG9pbnQgZGlzY292ZXJ5IG11c3QgYmUgY29tcGxldGVkLlxyXG4gICAgICogQHBhcmFtIHVwZGF0ZWRBdXRob3JpdHlcclxuICAgICAqL1xyXG4gICAgYXN5bmMgdXBkYXRlQXV0aG9yaXR5KGNsb3VkSW5zdGFuY2VIb3N0bmFtZSwgY29ycmVsYXRpb25JZCkge1xyXG4gICAgICAgIHRoaXMucGVyZm9ybWFuY2VDbGllbnQ/LmFkZFF1ZXVlTWVhc3VyZW1lbnQoUGVyZm9ybWFuY2VFdmVudHMuVXBkYXRlVG9rZW5FbmRwb2ludEF1dGhvcml0eSwgY29ycmVsYXRpb25JZCk7XHJcbiAgICAgICAgY29uc3QgY2xvdWRJbnN0YW5jZUF1dGhvcml0eVVyaSA9IGBodHRwczovLyR7Y2xvdWRJbnN0YW5jZUhvc3RuYW1lfS8ke3RoaXMuYXV0aG9yaXR5LnRlbmFudH0vYDtcclxuICAgICAgICBjb25zdCBjbG91ZEluc3RhbmNlQXV0aG9yaXR5ID0gYXdhaXQgY3JlYXRlRGlzY292ZXJlZEluc3RhbmNlKGNsb3VkSW5zdGFuY2VBdXRob3JpdHlVcmksIHRoaXMubmV0d29ya0NsaWVudCwgdGhpcy5jYWNoZU1hbmFnZXIsIHRoaXMuYXV0aG9yaXR5Lm9wdGlvbnMsIHRoaXMubG9nZ2VyLCBjb3JyZWxhdGlvbklkLCB0aGlzLnBlcmZvcm1hbmNlQ2xpZW50KTtcclxuICAgICAgICB0aGlzLmF1dGhvcml0eSA9IGNsb3VkSW5zdGFuY2VBdXRob3JpdHk7XHJcbiAgICB9XHJcbiAgICAvKipcclxuICAgICAqIENyZWF0ZXMgcXVlcnkgc3RyaW5nIGZvciB0aGUgL3Rva2VuIHJlcXVlc3RcclxuICAgICAqIEBwYXJhbSByZXF1ZXN0XHJcbiAgICAgKi9cclxuICAgIGNyZWF0ZVRva2VuUXVlcnlQYXJhbWV0ZXJzKHJlcXVlc3QpIHtcclxuICAgICAgICBjb25zdCBwYXJhbWV0ZXJCdWlsZGVyID0gbmV3IFJlcXVlc3RQYXJhbWV0ZXJCdWlsZGVyKHJlcXVlc3QuY29ycmVsYXRpb25JZCwgdGhpcy5wZXJmb3JtYW5jZUNsaWVudCk7XHJcbiAgICAgICAgaWYgKHJlcXVlc3QuZW1iZWRkZWRDbGllbnRJZCkge1xyXG4gICAgICAgICAgICBwYXJhbWV0ZXJCdWlsZGVyLmFkZEJyb2tlclBhcmFtZXRlcnMoe1xyXG4gICAgICAgICAgICAgICAgYnJva2VyQ2xpZW50SWQ6IHRoaXMuY29uZmlnLmF1dGhPcHRpb25zLmNsaWVudElkLFxyXG4gICAgICAgICAgICAgICAgYnJva2VyUmVkaXJlY3RVcmk6IHRoaXMuY29uZmlnLmF1dGhPcHRpb25zLnJlZGlyZWN0VXJpLFxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHJlcXVlc3QudG9rZW5RdWVyeVBhcmFtZXRlcnMpIHtcclxuICAgICAgICAgICAgcGFyYW1ldGVyQnVpbGRlci5hZGRFeHRyYVF1ZXJ5UGFyYW1ldGVycyhyZXF1ZXN0LnRva2VuUXVlcnlQYXJhbWV0ZXJzKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcGFyYW1ldGVyQnVpbGRlci5hZGRDb3JyZWxhdGlvbklkKHJlcXVlc3QuY29ycmVsYXRpb25JZCk7XHJcbiAgICAgICAgcmV0dXJuIHBhcmFtZXRlckJ1aWxkZXIuY3JlYXRlUXVlcnlTdHJpbmcoKTtcclxuICAgIH1cclxufVxuXG5leHBvcnQgeyBCYXNlQ2xpZW50IH07XG4vLyMgc291cmNlTWFwcGluZ1VSTD1CYXNlQ2xpZW50Lm1qcy5tYXBcbiIsIi8qISBAYXp1cmUvbXNhbC1jb21tb24gdjE0LjE2LjAgMjAyNC0xMS0wNSAqL1xuJ3VzZSBzdHJpY3QnO1xuaW1wb3J0IHsgbm93U2Vjb25kcyB9IGZyb20gJy4uL3V0aWxzL1RpbWVVdGlscy5tanMnO1xuaW1wb3J0IHsgVXJsU3RyaW5nIH0gZnJvbSAnLi4vdXJsL1VybFN0cmluZy5tanMnO1xuaW1wb3J0IHsgUGVyZm9ybWFuY2VFdmVudHMgfSBmcm9tICcuLi90ZWxlbWV0cnkvcGVyZm9ybWFuY2UvUGVyZm9ybWFuY2VFdmVudC5tanMnO1xuaW1wb3J0IHsgaW52b2tlQXN5bmMgfSBmcm9tICcuLi91dGlscy9GdW5jdGlvbldyYXBwZXJzLm1qcyc7XG5cbi8qXHJcbiAqIENvcHlyaWdodCAoYykgTWljcm9zb2Z0IENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLlxyXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgTUlUIExpY2Vuc2UuXHJcbiAqL1xyXG5jb25zdCBLZXlMb2NhdGlvbiA9IHtcclxuICAgIFNXOiBcInN3XCIsXHJcbiAgICBVSFc6IFwidWh3XCIsXHJcbn07XHJcbi8qKiBAaW50ZXJuYWwgKi9cclxuY2xhc3MgUG9wVG9rZW5HZW5lcmF0b3Ige1xyXG4gICAgY29uc3RydWN0b3IoY3J5cHRvVXRpbHMsIHBlcmZvcm1hbmNlQ2xpZW50KSB7XHJcbiAgICAgICAgdGhpcy5jcnlwdG9VdGlscyA9IGNyeXB0b1V0aWxzO1xyXG4gICAgICAgIHRoaXMucGVyZm9ybWFuY2VDbGllbnQgPSBwZXJmb3JtYW5jZUNsaWVudDtcclxuICAgIH1cclxuICAgIC8qKlxyXG4gICAgICogR2VuZXJhdGVzIHRoZSByZXFfY25mIHZhbGlkYXRlZCBhdCB0aGUgUlAgaW4gdGhlIFBPUCBwcm90b2NvbCBmb3IgU0hSIHBhcmFtZXRlcnNcclxuICAgICAqIGFuZCByZXR1cm5zIGFuIG9iamVjdCBjb250YWluaW5nIHRoZSBrZXlpZCwgdGhlIGZ1bGwgcmVxX2NuZiBzdHJpbmcgYW5kIHRoZSByZXFfY25mIHN0cmluZyBoYXNoXHJcbiAgICAgKiBAcGFyYW0gcmVxdWVzdFxyXG4gICAgICogQHJldHVybnNcclxuICAgICAqL1xyXG4gICAgYXN5bmMgZ2VuZXJhdGVDbmYocmVxdWVzdCwgbG9nZ2VyKSB7XHJcbiAgICAgICAgdGhpcy5wZXJmb3JtYW5jZUNsaWVudD8uYWRkUXVldWVNZWFzdXJlbWVudChQZXJmb3JtYW5jZUV2ZW50cy5Qb3BUb2tlbkdlbmVyYXRlQ25mLCByZXF1ZXN0LmNvcnJlbGF0aW9uSWQpO1xyXG4gICAgICAgIGNvbnN0IHJlcUNuZiA9IGF3YWl0IGludm9rZUFzeW5jKHRoaXMuZ2VuZXJhdGVLaWQuYmluZCh0aGlzKSwgUGVyZm9ybWFuY2VFdmVudHMuUG9wVG9rZW5HZW5lcmF0ZUNuZiwgbG9nZ2VyLCB0aGlzLnBlcmZvcm1hbmNlQ2xpZW50LCByZXF1ZXN0LmNvcnJlbGF0aW9uSWQpKHJlcXVlc3QpO1xyXG4gICAgICAgIGNvbnN0IHJlcUNuZlN0cmluZyA9IHRoaXMuY3J5cHRvVXRpbHMuYmFzZTY0VXJsRW5jb2RlKEpTT04uc3RyaW5naWZ5KHJlcUNuZikpO1xyXG4gICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgIGtpZDogcmVxQ25mLmtpZCxcclxuICAgICAgICAgICAgcmVxQ25mU3RyaW5nLFxyXG4gICAgICAgIH07XHJcbiAgICB9XHJcbiAgICAvKipcclxuICAgICAqIEdlbmVyYXRlcyBrZXlfaWQgZm9yIGEgU0hSIHRva2VuIHJlcXVlc3RcclxuICAgICAqIEBwYXJhbSByZXF1ZXN0XHJcbiAgICAgKiBAcmV0dXJuc1xyXG4gICAgICovXHJcbiAgICBhc3luYyBnZW5lcmF0ZUtpZChyZXF1ZXN0KSB7XHJcbiAgICAgICAgdGhpcy5wZXJmb3JtYW5jZUNsaWVudD8uYWRkUXVldWVNZWFzdXJlbWVudChQZXJmb3JtYW5jZUV2ZW50cy5Qb3BUb2tlbkdlbmVyYXRlS2lkLCByZXF1ZXN0LmNvcnJlbGF0aW9uSWQpO1xyXG4gICAgICAgIGNvbnN0IGtpZFRodW1icHJpbnQgPSBhd2FpdCB0aGlzLmNyeXB0b1V0aWxzLmdldFB1YmxpY0tleVRodW1icHJpbnQocmVxdWVzdCk7XHJcbiAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAga2lkOiBraWRUaHVtYnByaW50LFxyXG4gICAgICAgICAgICB4bXNfa3NsOiBLZXlMb2NhdGlvbi5TVyxcclxuICAgICAgICB9O1xyXG4gICAgfVxyXG4gICAgLyoqXHJcbiAgICAgKiBTaWducyB0aGUgUE9QIGFjY2Vzc190b2tlbiB3aXRoIHRoZSBsb2NhbCBnZW5lcmF0ZWQga2V5LXBhaXJcclxuICAgICAqIEBwYXJhbSBhY2Nlc3NUb2tlblxyXG4gICAgICogQHBhcmFtIHJlcXVlc3RcclxuICAgICAqIEByZXR1cm5zXHJcbiAgICAgKi9cclxuICAgIGFzeW5jIHNpZ25Qb3BUb2tlbihhY2Nlc3NUb2tlbiwga2V5SWQsIHJlcXVlc3QpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5zaWduUGF5bG9hZChhY2Nlc3NUb2tlbiwga2V5SWQsIHJlcXVlc3QpO1xyXG4gICAgfVxyXG4gICAgLyoqXHJcbiAgICAgKiBVdGlsaXR5IGZ1bmN0aW9uIHRvIGdlbmVyYXRlIHRoZSBzaWduZWQgSldUIGZvciBhbiBhY2Nlc3NfdG9rZW5cclxuICAgICAqIEBwYXJhbSBwYXlsb2FkXHJcbiAgICAgKiBAcGFyYW0ga2lkXHJcbiAgICAgKiBAcGFyYW0gcmVxdWVzdFxyXG4gICAgICogQHBhcmFtIGNsYWltc1xyXG4gICAgICogQHJldHVybnNcclxuICAgICAqL1xyXG4gICAgYXN5bmMgc2lnblBheWxvYWQocGF5bG9hZCwga2V5SWQsIHJlcXVlc3QsIGNsYWltcykge1xyXG4gICAgICAgIC8vIERlY29uc3RydWN0IHJlcXVlc3QgdG8gZXh0cmFjdCBTSFIgcGFyYW1ldGVyc1xyXG4gICAgICAgIGNvbnN0IHsgcmVzb3VyY2VSZXF1ZXN0TWV0aG9kLCByZXNvdXJjZVJlcXVlc3RVcmksIHNockNsYWltcywgc2hyTm9uY2UsIHNock9wdGlvbnMsIH0gPSByZXF1ZXN0O1xyXG4gICAgICAgIGNvbnN0IHJlc291cmNlVXJsU3RyaW5nID0gcmVzb3VyY2VSZXF1ZXN0VXJpXHJcbiAgICAgICAgICAgID8gbmV3IFVybFN0cmluZyhyZXNvdXJjZVJlcXVlc3RVcmkpXHJcbiAgICAgICAgICAgIDogdW5kZWZpbmVkO1xyXG4gICAgICAgIGNvbnN0IHJlc291cmNlVXJsQ29tcG9uZW50cyA9IHJlc291cmNlVXJsU3RyaW5nPy5nZXRVcmxDb21wb25lbnRzKCk7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuY3J5cHRvVXRpbHMuc2lnbkp3dCh7XHJcbiAgICAgICAgICAgIGF0OiBwYXlsb2FkLFxyXG4gICAgICAgICAgICB0czogbm93U2Vjb25kcygpLFxyXG4gICAgICAgICAgICBtOiByZXNvdXJjZVJlcXVlc3RNZXRob2Q/LnRvVXBwZXJDYXNlKCksXHJcbiAgICAgICAgICAgIHU6IHJlc291cmNlVXJsQ29tcG9uZW50cz8uSG9zdE5hbWVBbmRQb3J0LFxyXG4gICAgICAgICAgICBub25jZTogc2hyTm9uY2UgfHwgdGhpcy5jcnlwdG9VdGlscy5jcmVhdGVOZXdHdWlkKCksXHJcbiAgICAgICAgICAgIHA6IHJlc291cmNlVXJsQ29tcG9uZW50cz8uQWJzb2x1dGVQYXRoLFxyXG4gICAgICAgICAgICBxOiByZXNvdXJjZVVybENvbXBvbmVudHM/LlF1ZXJ5U3RyaW5nXHJcbiAgICAgICAgICAgICAgICA/IFtbXSwgcmVzb3VyY2VVcmxDb21wb25lbnRzLlF1ZXJ5U3RyaW5nXVxyXG4gICAgICAgICAgICAgICAgOiB1bmRlZmluZWQsXHJcbiAgICAgICAgICAgIGNsaWVudF9jbGFpbXM6IHNockNsYWltcyB8fCB1bmRlZmluZWQsXHJcbiAgICAgICAgICAgIC4uLmNsYWltcyxcclxuICAgICAgICB9LCBrZXlJZCwgc2hyT3B0aW9ucywgcmVxdWVzdC5jb3JyZWxhdGlvbklkKTtcclxuICAgIH1cclxufVxuXG5leHBvcnQgeyBQb3BUb2tlbkdlbmVyYXRvciB9O1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9UG9wVG9rZW5HZW5lcmF0b3IubWpzLm1hcFxuIiwiLyohIEBhenVyZS9tc2FsLWNvbW1vbiB2MTQuMTYuMCAyMDI0LTExLTA1ICovXG4ndXNlIHN0cmljdCc7XG4vKlxyXG4gKiBDb3B5cmlnaHQgKGMpIE1pY3Jvc29mdCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cclxuICogTGljZW5zZWQgdW5kZXIgdGhlIE1JVCBMaWNlbnNlLlxyXG4gKi9cclxuLyoqXHJcbiAqIFRoaXMgY2xhc3MgaW5zdGFuY2UgaGVscHMgdHJhY2sgdGhlIG1lbW9yeSBjaGFuZ2VzIGZhY2lsaXRhdGluZ1xyXG4gKiBkZWNpc2lvbnMgdG8gcmVhZCBmcm9tIGFuZCB3cml0ZSB0byB0aGUgcGVyc2lzdGVudCBjYWNoZVxyXG4gKi8gY2xhc3MgVG9rZW5DYWNoZUNvbnRleHQge1xyXG4gICAgY29uc3RydWN0b3IodG9rZW5DYWNoZSwgaGFzQ2hhbmdlZCkge1xyXG4gICAgICAgIHRoaXMuY2FjaGUgPSB0b2tlbkNhY2hlO1xyXG4gICAgICAgIHRoaXMuaGFzQ2hhbmdlZCA9IGhhc0NoYW5nZWQ7XHJcbiAgICB9XHJcbiAgICAvKipcclxuICAgICAqIGJvb2xlYW4gd2hpY2ggaW5kaWNhdGVzIHRoZSBjaGFuZ2VzIGluIGNhY2hlXHJcbiAgICAgKi9cclxuICAgIGdldCBjYWNoZUhhc0NoYW5nZWQoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuaGFzQ2hhbmdlZDtcclxuICAgIH1cclxuICAgIC8qKlxyXG4gICAgICogZnVuY3Rpb24gdG8gcmV0cmlldmUgdGhlIHRva2VuIGNhY2hlXHJcbiAgICAgKi9cclxuICAgIGdldCB0b2tlbkNhY2hlKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmNhY2hlO1xyXG4gICAgfVxyXG59XG5cbmV4cG9ydCB7IFRva2VuQ2FjaGVDb250ZXh0IH07XG4vLyMgc291cmNlTWFwcGluZ1VSTD1Ub2tlbkNhY2hlQ29udGV4dC5tanMubWFwXG4iLCIvKiEgQGF6dXJlL21zYWwtY29tbW9uIHYxNC4xNi4wIDIwMjQtMTEtMDUgKi9cbid1c2Ugc3RyaWN0JztcbmltcG9ydCB7IGNyZWF0ZUNsaWVudEF1dGhFcnJvciB9IGZyb20gJy4uL2Vycm9yL0NsaWVudEF1dGhFcnJvci5tanMnO1xuaW1wb3J0IHsgU2VydmVyRXJyb3IgfSBmcm9tICcuLi9lcnJvci9TZXJ2ZXJFcnJvci5tanMnO1xuaW1wb3J0IHsgU2NvcGVTZXQgfSBmcm9tICcuLi9yZXF1ZXN0L1Njb3BlU2V0Lm1qcyc7XG5pbXBvcnQgeyBBY2NvdW50RW50aXR5IH0gZnJvbSAnLi4vY2FjaGUvZW50aXRpZXMvQWNjb3VudEVudGl0eS5tanMnO1xuaW1wb3J0IHsgaXNJbnRlcmFjdGlvblJlcXVpcmVkRXJyb3IsIEludGVyYWN0aW9uUmVxdWlyZWRBdXRoRXJyb3IgfSBmcm9tICcuLi9lcnJvci9JbnRlcmFjdGlvblJlcXVpcmVkQXV0aEVycm9yLm1qcyc7XG5pbXBvcnQgeyBQcm90b2NvbFV0aWxzIH0gZnJvbSAnLi4vdXRpbHMvUHJvdG9jb2xVdGlscy5tanMnO1xuaW1wb3J0IHsgSHR0cFN0YXR1cywgQ29uc3RhbnRzLCBBdXRoZW50aWNhdGlvblNjaGVtZSwgVEhFX0ZBTUlMWV9JRCB9IGZyb20gJy4uL3V0aWxzL0NvbnN0YW50cy5tanMnO1xuaW1wb3J0IHsgUG9wVG9rZW5HZW5lcmF0b3IgfSBmcm9tICcuLi9jcnlwdG8vUG9wVG9rZW5HZW5lcmF0b3IubWpzJztcbmltcG9ydCB7IFRva2VuQ2FjaGVDb250ZXh0IH0gZnJvbSAnLi4vY2FjaGUvcGVyc2lzdGVuY2UvVG9rZW5DYWNoZUNvbnRleHQubWpzJztcbmltcG9ydCB7IFBlcmZvcm1hbmNlRXZlbnRzIH0gZnJvbSAnLi4vdGVsZW1ldHJ5L3BlcmZvcm1hbmNlL1BlcmZvcm1hbmNlRXZlbnQubWpzJztcbmltcG9ydCB7IGV4dHJhY3RUb2tlbkNsYWltcywgY2hlY2tNYXhBZ2UgfSBmcm9tICcuLi9hY2NvdW50L0F1dGhUb2tlbi5tanMnO1xuaW1wb3J0IHsgZ2V0VGVuYW50SWRGcm9tSWRUb2tlbkNsYWltcyB9IGZyb20gJy4uL2FjY291bnQvVG9rZW5DbGFpbXMubWpzJztcbmltcG9ydCB7IHVwZGF0ZUFjY291bnRUZW5hbnRQcm9maWxlRGF0YSwgYnVpbGRUZW5hbnRQcm9maWxlIH0gZnJvbSAnLi4vYWNjb3VudC9BY2NvdW50SW5mby5tanMnO1xuaW1wb3J0IHsgY3JlYXRlQWNjZXNzVG9rZW5FbnRpdHksIGNyZWF0ZVJlZnJlc2hUb2tlbkVudGl0eSwgY3JlYXRlSWRUb2tlbkVudGl0eSB9IGZyb20gJy4uL2NhY2hlL3V0aWxzL0NhY2hlSGVscGVycy5tanMnO1xuaW1wb3J0IHsgc3RhdGVOb3RGb3VuZCwgaW52YWxpZFN0YXRlLCBzdGF0ZU1pc21hdGNoLCBub25jZU1pc21hdGNoLCBhdXRoVGltZU5vdEZvdW5kLCBpbnZhbGlkQ2FjaGVFbnZpcm9ubWVudCwga2V5SWRNaXNzaW5nIH0gZnJvbSAnLi4vZXJyb3IvQ2xpZW50QXV0aEVycm9yQ29kZXMubWpzJztcblxuLypcclxuICogQ29weXJpZ2h0IChjKSBNaWNyb3NvZnQgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuXHJcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgTGljZW5zZS5cclxuICovXHJcbmZ1bmN0aW9uIHBhcnNlU2VydmVyRXJyb3JObyhzZXJ2ZXJSZXNwb25zZSkge1xyXG4gICAgY29uc3QgZXJyb3JDb2RlUHJlZml4ID0gXCJjb2RlPVwiO1xyXG4gICAgY29uc3QgZXJyb3JDb2RlUHJlZml4SW5kZXggPSBzZXJ2ZXJSZXNwb25zZS5lcnJvcl91cmk/Lmxhc3RJbmRleE9mKGVycm9yQ29kZVByZWZpeCk7XHJcbiAgICByZXR1cm4gZXJyb3JDb2RlUHJlZml4SW5kZXggJiYgZXJyb3JDb2RlUHJlZml4SW5kZXggPj0gMFxyXG4gICAgICAgID8gc2VydmVyUmVzcG9uc2UuZXJyb3JfdXJpPy5zdWJzdHJpbmcoZXJyb3JDb2RlUHJlZml4SW5kZXggKyBlcnJvckNvZGVQcmVmaXgubGVuZ3RoKVxyXG4gICAgICAgIDogdW5kZWZpbmVkO1xyXG59XHJcbi8qKlxyXG4gKiBDbGFzcyB0aGF0IGhhbmRsZXMgcmVzcG9uc2UgcGFyc2luZy5cclxuICogQGludGVybmFsXHJcbiAqL1xyXG5jbGFzcyBSZXNwb25zZUhhbmRsZXIge1xyXG4gICAgY29uc3RydWN0b3IoY2xpZW50SWQsIGNhY2hlU3RvcmFnZSwgY3J5cHRvT2JqLCBsb2dnZXIsIHNlcmlhbGl6YWJsZUNhY2hlLCBwZXJzaXN0ZW5jZVBsdWdpbiwgcGVyZm9ybWFuY2VDbGllbnQpIHtcclxuICAgICAgICB0aGlzLmNsaWVudElkID0gY2xpZW50SWQ7XHJcbiAgICAgICAgdGhpcy5jYWNoZVN0b3JhZ2UgPSBjYWNoZVN0b3JhZ2U7XHJcbiAgICAgICAgdGhpcy5jcnlwdG9PYmogPSBjcnlwdG9PYmo7XHJcbiAgICAgICAgdGhpcy5sb2dnZXIgPSBsb2dnZXI7XHJcbiAgICAgICAgdGhpcy5zZXJpYWxpemFibGVDYWNoZSA9IHNlcmlhbGl6YWJsZUNhY2hlO1xyXG4gICAgICAgIHRoaXMucGVyc2lzdGVuY2VQbHVnaW4gPSBwZXJzaXN0ZW5jZVBsdWdpbjtcclxuICAgICAgICB0aGlzLnBlcmZvcm1hbmNlQ2xpZW50ID0gcGVyZm9ybWFuY2VDbGllbnQ7XHJcbiAgICB9XHJcbiAgICAvKipcclxuICAgICAqIEZ1bmN0aW9uIHdoaWNoIHZhbGlkYXRlcyBzZXJ2ZXIgYXV0aG9yaXphdGlvbiBjb2RlIHJlc3BvbnNlLlxyXG4gICAgICogQHBhcmFtIHNlcnZlclJlc3BvbnNlSGFzaFxyXG4gICAgICogQHBhcmFtIHJlcXVlc3RTdGF0ZVxyXG4gICAgICogQHBhcmFtIGNyeXB0b09ialxyXG4gICAgICovXHJcbiAgICB2YWxpZGF0ZVNlcnZlckF1dGhvcml6YXRpb25Db2RlUmVzcG9uc2Uoc2VydmVyUmVzcG9uc2UsIHJlcXVlc3RTdGF0ZSkge1xyXG4gICAgICAgIGlmICghc2VydmVyUmVzcG9uc2Uuc3RhdGUgfHwgIXJlcXVlc3RTdGF0ZSkge1xyXG4gICAgICAgICAgICB0aHJvdyBzZXJ2ZXJSZXNwb25zZS5zdGF0ZVxyXG4gICAgICAgICAgICAgICAgPyBjcmVhdGVDbGllbnRBdXRoRXJyb3Ioc3RhdGVOb3RGb3VuZCwgXCJDYWNoZWQgU3RhdGVcIilcclxuICAgICAgICAgICAgICAgIDogY3JlYXRlQ2xpZW50QXV0aEVycm9yKHN0YXRlTm90Rm91bmQsIFwiU2VydmVyIFN0YXRlXCIpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBsZXQgZGVjb2RlZFNlcnZlclJlc3BvbnNlU3RhdGU7XHJcbiAgICAgICAgbGV0IGRlY29kZWRSZXF1ZXN0U3RhdGU7XHJcbiAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgZGVjb2RlZFNlcnZlclJlc3BvbnNlU3RhdGUgPSBkZWNvZGVVUklDb21wb25lbnQoc2VydmVyUmVzcG9uc2Uuc3RhdGUpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjYXRjaCAoZSkge1xyXG4gICAgICAgICAgICB0aHJvdyBjcmVhdGVDbGllbnRBdXRoRXJyb3IoaW52YWxpZFN0YXRlLCBzZXJ2ZXJSZXNwb25zZS5zdGF0ZSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgIGRlY29kZWRSZXF1ZXN0U3RhdGUgPSBkZWNvZGVVUklDb21wb25lbnQocmVxdWVzdFN0YXRlKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgY2F0Y2ggKGUpIHtcclxuICAgICAgICAgICAgdGhyb3cgY3JlYXRlQ2xpZW50QXV0aEVycm9yKGludmFsaWRTdGF0ZSwgc2VydmVyUmVzcG9uc2Uuc3RhdGUpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoZGVjb2RlZFNlcnZlclJlc3BvbnNlU3RhdGUgIT09IGRlY29kZWRSZXF1ZXN0U3RhdGUpIHtcclxuICAgICAgICAgICAgdGhyb3cgY3JlYXRlQ2xpZW50QXV0aEVycm9yKHN0YXRlTWlzbWF0Y2gpO1xyXG4gICAgICAgIH1cclxuICAgICAgICAvLyBDaGVjayBmb3IgZXJyb3JcclxuICAgICAgICBpZiAoc2VydmVyUmVzcG9uc2UuZXJyb3IgfHxcclxuICAgICAgICAgICAgc2VydmVyUmVzcG9uc2UuZXJyb3JfZGVzY3JpcHRpb24gfHxcclxuICAgICAgICAgICAgc2VydmVyUmVzcG9uc2Uuc3ViZXJyb3IpIHtcclxuICAgICAgICAgICAgY29uc3Qgc2VydmVyRXJyb3JObyA9IHBhcnNlU2VydmVyRXJyb3JObyhzZXJ2ZXJSZXNwb25zZSk7XHJcbiAgICAgICAgICAgIGlmIChpc0ludGVyYWN0aW9uUmVxdWlyZWRFcnJvcihzZXJ2ZXJSZXNwb25zZS5lcnJvciwgc2VydmVyUmVzcG9uc2UuZXJyb3JfZGVzY3JpcHRpb24sIHNlcnZlclJlc3BvbnNlLnN1YmVycm9yKSkge1xyXG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEludGVyYWN0aW9uUmVxdWlyZWRBdXRoRXJyb3Ioc2VydmVyUmVzcG9uc2UuZXJyb3IgfHwgXCJcIiwgc2VydmVyUmVzcG9uc2UuZXJyb3JfZGVzY3JpcHRpb24sIHNlcnZlclJlc3BvbnNlLnN1YmVycm9yLCBzZXJ2ZXJSZXNwb25zZS50aW1lc3RhbXAgfHwgXCJcIiwgc2VydmVyUmVzcG9uc2UudHJhY2VfaWQgfHwgXCJcIiwgc2VydmVyUmVzcG9uc2UuY29ycmVsYXRpb25faWQgfHwgXCJcIiwgc2VydmVyUmVzcG9uc2UuY2xhaW1zIHx8IFwiXCIsIHNlcnZlckVycm9yTm8pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHRocm93IG5ldyBTZXJ2ZXJFcnJvcihzZXJ2ZXJSZXNwb25zZS5lcnJvciB8fCBcIlwiLCBzZXJ2ZXJSZXNwb25zZS5lcnJvcl9kZXNjcmlwdGlvbiwgc2VydmVyUmVzcG9uc2Uuc3ViZXJyb3IsIHNlcnZlckVycm9yTm8pO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIC8qKlxyXG4gICAgICogRnVuY3Rpb24gd2hpY2ggdmFsaWRhdGVzIHNlcnZlciBhdXRob3JpemF0aW9uIHRva2VuIHJlc3BvbnNlLlxyXG4gICAgICogQHBhcmFtIHNlcnZlclJlc3BvbnNlXHJcbiAgICAgKiBAcGFyYW0gcmVmcmVzaEFjY2Vzc1Rva2VuXHJcbiAgICAgKi9cclxuICAgIHZhbGlkYXRlVG9rZW5SZXNwb25zZShzZXJ2ZXJSZXNwb25zZSwgcmVmcmVzaEFjY2Vzc1Rva2VuKSB7XHJcbiAgICAgICAgLy8gQ2hlY2sgZm9yIGVycm9yXHJcbiAgICAgICAgaWYgKHNlcnZlclJlc3BvbnNlLmVycm9yIHx8XHJcbiAgICAgICAgICAgIHNlcnZlclJlc3BvbnNlLmVycm9yX2Rlc2NyaXB0aW9uIHx8XHJcbiAgICAgICAgICAgIHNlcnZlclJlc3BvbnNlLnN1YmVycm9yKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGVyclN0cmluZyA9IGBFcnJvcihzKTogJHtzZXJ2ZXJSZXNwb25zZS5lcnJvcl9jb2RlcyB8fCBDb25zdGFudHMuTk9UX0FWQUlMQUJMRX0gLSBUaW1lc3RhbXA6ICR7c2VydmVyUmVzcG9uc2UudGltZXN0YW1wIHx8IENvbnN0YW50cy5OT1RfQVZBSUxBQkxFfSAtIERlc2NyaXB0aW9uOiAke3NlcnZlclJlc3BvbnNlLmVycm9yX2Rlc2NyaXB0aW9uIHx8IENvbnN0YW50cy5OT1RfQVZBSUxBQkxFfSAtIENvcnJlbGF0aW9uIElEOiAke3NlcnZlclJlc3BvbnNlLmNvcnJlbGF0aW9uX2lkIHx8IENvbnN0YW50cy5OT1RfQVZBSUxBQkxFfSAtIFRyYWNlIElEOiAke3NlcnZlclJlc3BvbnNlLnRyYWNlX2lkIHx8IENvbnN0YW50cy5OT1RfQVZBSUxBQkxFfWA7XHJcbiAgICAgICAgICAgIGNvbnN0IHNlcnZlckVycm9yTm8gPSBzZXJ2ZXJSZXNwb25zZS5lcnJvcl9jb2Rlcz8ubGVuZ3RoXHJcbiAgICAgICAgICAgICAgICA/IHNlcnZlclJlc3BvbnNlLmVycm9yX2NvZGVzWzBdXHJcbiAgICAgICAgICAgICAgICA6IHVuZGVmaW5lZDtcclxuICAgICAgICAgICAgY29uc3Qgc2VydmVyRXJyb3IgPSBuZXcgU2VydmVyRXJyb3Ioc2VydmVyUmVzcG9uc2UuZXJyb3IsIGVyclN0cmluZywgc2VydmVyUmVzcG9uc2Uuc3ViZXJyb3IsIHNlcnZlckVycm9yTm8sIHNlcnZlclJlc3BvbnNlLnN0YXR1cyk7XHJcbiAgICAgICAgICAgIC8vIGNoZWNrIGlmIDUwMCBlcnJvclxyXG4gICAgICAgICAgICBpZiAocmVmcmVzaEFjY2Vzc1Rva2VuICYmXHJcbiAgICAgICAgICAgICAgICBzZXJ2ZXJSZXNwb25zZS5zdGF0dXMgJiZcclxuICAgICAgICAgICAgICAgIHNlcnZlclJlc3BvbnNlLnN0YXR1cyA+PSBIdHRwU3RhdHVzLlNFUlZFUl9FUlJPUl9SQU5HRV9TVEFSVCAmJlxyXG4gICAgICAgICAgICAgICAgc2VydmVyUmVzcG9uc2Uuc3RhdHVzIDw9IEh0dHBTdGF0dXMuU0VSVkVSX0VSUk9SX1JBTkdFX0VORCkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5sb2dnZXIud2FybmluZyhgZXhlY3V0ZVRva2VuUmVxdWVzdDp2YWxpZGF0ZVRva2VuUmVzcG9uc2UgLSBBQUQgaXMgY3VycmVudGx5IHVuYXZhaWxhYmxlIGFuZCB0aGUgYWNjZXNzIHRva2VuIGlzIHVuYWJsZSB0byBiZSByZWZyZXNoZWQuXFxuJHtzZXJ2ZXJFcnJvcn1gKTtcclxuICAgICAgICAgICAgICAgIC8vIGRvbid0IHRocm93IGFuIGV4Y2VwdGlvbiwgYnV0IGFsZXJ0IHRoZSB1c2VyIHZpYSBhIGxvZyB0aGF0IHRoZSB0b2tlbiB3YXMgdW5hYmxlIHRvIGJlIHJlZnJlc2hlZFxyXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICAgICAgLy8gY2hlY2sgaWYgNDAwIGVycm9yXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSBpZiAocmVmcmVzaEFjY2Vzc1Rva2VuICYmXHJcbiAgICAgICAgICAgICAgICBzZXJ2ZXJSZXNwb25zZS5zdGF0dXMgJiZcclxuICAgICAgICAgICAgICAgIHNlcnZlclJlc3BvbnNlLnN0YXR1cyA+PSBIdHRwU3RhdHVzLkNMSUVOVF9FUlJPUl9SQU5HRV9TVEFSVCAmJlxyXG4gICAgICAgICAgICAgICAgc2VydmVyUmVzcG9uc2Uuc3RhdHVzIDw9IEh0dHBTdGF0dXMuQ0xJRU5UX0VSUk9SX1JBTkdFX0VORCkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5sb2dnZXIud2FybmluZyhgZXhlY3V0ZVRva2VuUmVxdWVzdDp2YWxpZGF0ZVRva2VuUmVzcG9uc2UgLSBBQUQgaXMgY3VycmVudGx5IGF2YWlsYWJsZSBidXQgaXMgdW5hYmxlIHRvIHJlZnJlc2ggdGhlIGFjY2VzcyB0b2tlbi5cXG4ke3NlcnZlckVycm9yfWApO1xyXG4gICAgICAgICAgICAgICAgLy8gZG9uJ3QgdGhyb3cgYW4gZXhjZXB0aW9uLCBidXQgYWxlcnQgdGhlIHVzZXIgdmlhIGEgbG9nIHRoYXQgdGhlIHRva2VuIHdhcyB1bmFibGUgdG8gYmUgcmVmcmVzaGVkXHJcbiAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYgKGlzSW50ZXJhY3Rpb25SZXF1aXJlZEVycm9yKHNlcnZlclJlc3BvbnNlLmVycm9yLCBzZXJ2ZXJSZXNwb25zZS5lcnJvcl9kZXNjcmlwdGlvbiwgc2VydmVyUmVzcG9uc2Uuc3ViZXJyb3IpKSB7XHJcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgSW50ZXJhY3Rpb25SZXF1aXJlZEF1dGhFcnJvcihzZXJ2ZXJSZXNwb25zZS5lcnJvciwgc2VydmVyUmVzcG9uc2UuZXJyb3JfZGVzY3JpcHRpb24sIHNlcnZlclJlc3BvbnNlLnN1YmVycm9yLCBzZXJ2ZXJSZXNwb25zZS50aW1lc3RhbXAgfHwgQ29uc3RhbnRzLkVNUFRZX1NUUklORywgc2VydmVyUmVzcG9uc2UudHJhY2VfaWQgfHwgQ29uc3RhbnRzLkVNUFRZX1NUUklORywgc2VydmVyUmVzcG9uc2UuY29ycmVsYXRpb25faWQgfHwgQ29uc3RhbnRzLkVNUFRZX1NUUklORywgc2VydmVyUmVzcG9uc2UuY2xhaW1zIHx8IENvbnN0YW50cy5FTVBUWV9TVFJJTkcsIHNlcnZlckVycm9yTm8pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHRocm93IHNlcnZlckVycm9yO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIC8qKlxyXG4gICAgICogUmV0dXJucyBhIGNvbnN0cnVjdGVkIHRva2VuIHJlc3BvbnNlIGJhc2VkIG9uIGdpdmVuIHN0cmluZy4gQWxzbyBtYW5hZ2VzIHRoZSBjYWNoZSB1cGRhdGVzIGFuZCBjbGVhbnVwcy5cclxuICAgICAqIEBwYXJhbSBzZXJ2ZXJUb2tlblJlc3BvbnNlXHJcbiAgICAgKiBAcGFyYW0gYXV0aG9yaXR5XHJcbiAgICAgKi9cclxuICAgIGFzeW5jIGhhbmRsZVNlcnZlclRva2VuUmVzcG9uc2Uoc2VydmVyVG9rZW5SZXNwb25zZSwgYXV0aG9yaXR5LCByZXFUaW1lc3RhbXAsIHJlcXVlc3QsIGF1dGhDb2RlUGF5bG9hZCwgdXNlckFzc2VydGlvbkhhc2gsIGhhbmRsaW5nUmVmcmVzaFRva2VuUmVzcG9uc2UsIGZvcmNlQ2FjaGVSZWZyZXNoVG9rZW5SZXNwb25zZSwgc2VydmVyUmVxdWVzdElkKSB7XHJcbiAgICAgICAgdGhpcy5wZXJmb3JtYW5jZUNsaWVudD8uYWRkUXVldWVNZWFzdXJlbWVudChQZXJmb3JtYW5jZUV2ZW50cy5IYW5kbGVTZXJ2ZXJUb2tlblJlc3BvbnNlLCBzZXJ2ZXJUb2tlblJlc3BvbnNlLmNvcnJlbGF0aW9uX2lkKTtcclxuICAgICAgICAvLyBjcmVhdGUgYW4gaWRUb2tlbiBvYmplY3QgKG5vdCBlbnRpdHkpXHJcbiAgICAgICAgbGV0IGlkVG9rZW5DbGFpbXM7XHJcbiAgICAgICAgaWYgKHNlcnZlclRva2VuUmVzcG9uc2UuaWRfdG9rZW4pIHtcclxuICAgICAgICAgICAgaWRUb2tlbkNsYWltcyA9IGV4dHJhY3RUb2tlbkNsYWltcyhzZXJ2ZXJUb2tlblJlc3BvbnNlLmlkX3Rva2VuIHx8IENvbnN0YW50cy5FTVBUWV9TVFJJTkcsIHRoaXMuY3J5cHRvT2JqLmJhc2U2NERlY29kZSk7XHJcbiAgICAgICAgICAgIC8vIHRva2VuIG5vbmNlIGNoZWNrIChUT0RPOiBBZGQgYSB3YXJuaW5nIGlmIG5vIG5vbmNlIGlzIGdpdmVuPylcclxuICAgICAgICAgICAgaWYgKGF1dGhDb2RlUGF5bG9hZCAmJiBhdXRoQ29kZVBheWxvYWQubm9uY2UpIHtcclxuICAgICAgICAgICAgICAgIGlmIChpZFRva2VuQ2xhaW1zLm5vbmNlICE9PSBhdXRoQ29kZVBheWxvYWQubm9uY2UpIHtcclxuICAgICAgICAgICAgICAgICAgICB0aHJvdyBjcmVhdGVDbGllbnRBdXRoRXJyb3Iobm9uY2VNaXNtYXRjaCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgLy8gdG9rZW4gbWF4X2FnZSBjaGVja1xyXG4gICAgICAgICAgICBpZiAocmVxdWVzdC5tYXhBZ2UgfHwgcmVxdWVzdC5tYXhBZ2UgPT09IDApIHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGF1dGhUaW1lID0gaWRUb2tlbkNsYWltcy5hdXRoX3RpbWU7XHJcbiAgICAgICAgICAgICAgICBpZiAoIWF1dGhUaW1lKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgY3JlYXRlQ2xpZW50QXV0aEVycm9yKGF1dGhUaW1lTm90Rm91bmQpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgY2hlY2tNYXhBZ2UoYXV0aFRpbWUsIHJlcXVlc3QubWF4QWdlKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICAvLyBnZW5lcmF0ZSBob21lQWNjb3VudElkXHJcbiAgICAgICAgdGhpcy5ob21lQWNjb3VudElkZW50aWZpZXIgPSBBY2NvdW50RW50aXR5LmdlbmVyYXRlSG9tZUFjY291bnRJZChzZXJ2ZXJUb2tlblJlc3BvbnNlLmNsaWVudF9pbmZvIHx8IENvbnN0YW50cy5FTVBUWV9TVFJJTkcsIGF1dGhvcml0eS5hdXRob3JpdHlUeXBlLCB0aGlzLmxvZ2dlciwgdGhpcy5jcnlwdG9PYmosIGlkVG9rZW5DbGFpbXMpO1xyXG4gICAgICAgIC8vIHNhdmUgdGhlIHJlc3BvbnNlIHRva2Vuc1xyXG4gICAgICAgIGxldCByZXF1ZXN0U3RhdGVPYmo7XHJcbiAgICAgICAgaWYgKCEhYXV0aENvZGVQYXlsb2FkICYmICEhYXV0aENvZGVQYXlsb2FkLnN0YXRlKSB7XHJcbiAgICAgICAgICAgIHJlcXVlc3RTdGF0ZU9iaiA9IFByb3RvY29sVXRpbHMucGFyc2VSZXF1ZXN0U3RhdGUodGhpcy5jcnlwdG9PYmosIGF1dGhDb2RlUGF5bG9hZC5zdGF0ZSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIC8vIEFkZCBrZXlJZCBmcm9tIHJlcXVlc3QgdG8gc2VydmVyVG9rZW5SZXNwb25zZSBpZiBkZWZpbmVkXHJcbiAgICAgICAgc2VydmVyVG9rZW5SZXNwb25zZS5rZXlfaWQgPVxyXG4gICAgICAgICAgICBzZXJ2ZXJUb2tlblJlc3BvbnNlLmtleV9pZCB8fCByZXF1ZXN0LnNzaEtpZCB8fCB1bmRlZmluZWQ7XHJcbiAgICAgICAgY29uc3QgY2FjaGVSZWNvcmQgPSB0aGlzLmdlbmVyYXRlQ2FjaGVSZWNvcmQoc2VydmVyVG9rZW5SZXNwb25zZSwgYXV0aG9yaXR5LCByZXFUaW1lc3RhbXAsIHJlcXVlc3QsIGlkVG9rZW5DbGFpbXMsIHVzZXJBc3NlcnRpb25IYXNoLCBhdXRoQ29kZVBheWxvYWQpO1xyXG4gICAgICAgIGxldCBjYWNoZUNvbnRleHQ7XHJcbiAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgaWYgKHRoaXMucGVyc2lzdGVuY2VQbHVnaW4gJiYgdGhpcy5zZXJpYWxpemFibGVDYWNoZSkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5sb2dnZXIudmVyYm9zZShcIlBlcnNpc3RlbmNlIGVuYWJsZWQsIGNhbGxpbmcgYmVmb3JlQ2FjaGVBY2Nlc3NcIik7XHJcbiAgICAgICAgICAgICAgICBjYWNoZUNvbnRleHQgPSBuZXcgVG9rZW5DYWNoZUNvbnRleHQodGhpcy5zZXJpYWxpemFibGVDYWNoZSwgdHJ1ZSk7XHJcbiAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLnBlcnNpc3RlbmNlUGx1Z2luLmJlZm9yZUNhY2hlQWNjZXNzKGNhY2hlQ29udGV4dCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgLypcclxuICAgICAgICAgICAgICogV2hlbiBzYXZpbmcgYSByZWZyZXNoZWQgdG9rZW5zIHRvIHRoZSBjYWNoZSwgaXQgaXMgZXhwZWN0ZWQgdGhhdCB0aGUgYWNjb3VudCB0aGF0IHdhcyB1c2VkIGlzIHByZXNlbnQgaW4gdGhlIGNhY2hlLlxyXG4gICAgICAgICAgICAgKiBJZiBub3QgcHJlc2VudCwgd2Ugc2hvdWxkIHJldHVybiBudWxsLCBhcyBpdCdzIHRoZSBjYXNlIHRoYXQgYW5vdGhlciBhcHBsaWNhdGlvbiBjYWxsZWQgcmVtb3ZlQWNjb3VudCBpbiBiZXR3ZWVuXHJcbiAgICAgICAgICAgICAqIHRoZSBjYWxscyB0byBnZXRBbGxBY2NvdW50cyBhbmQgYWNxdWlyZVRva2VuU2lsZW50LiBXZSBzaG91bGQgbm90IG92ZXJ3cml0ZSB0aGF0IHJlbW92YWwsIHVubGVzcyBleHBsaWNpdGx5IGZsYWdnZWQgYnlcclxuICAgICAgICAgICAgICogdGhlIGRldmVsb3BlciwgYXMgaW4gdGhlIGNhc2Ugb2YgcmVmcmVzaCB0b2tlbiBmbG93IHVzZWQgaW4gQURBTCBOb2RlIHRvIE1TQUwgTm9kZSBtaWdyYXRpb24uXHJcbiAgICAgICAgICAgICAqL1xyXG4gICAgICAgICAgICBpZiAoaGFuZGxpbmdSZWZyZXNoVG9rZW5SZXNwb25zZSAmJlxyXG4gICAgICAgICAgICAgICAgIWZvcmNlQ2FjaGVSZWZyZXNoVG9rZW5SZXNwb25zZSAmJlxyXG4gICAgICAgICAgICAgICAgY2FjaGVSZWNvcmQuYWNjb3VudCkge1xyXG4gICAgICAgICAgICAgICAgY29uc3Qga2V5ID0gY2FjaGVSZWNvcmQuYWNjb3VudC5nZW5lcmF0ZUFjY291bnRLZXkoKTtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGFjY291bnQgPSB0aGlzLmNhY2hlU3RvcmFnZS5nZXRBY2NvdW50KGtleSwgdGhpcy5sb2dnZXIpO1xyXG4gICAgICAgICAgICAgICAgaWYgKCFhY2NvdW50KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5sb2dnZXIud2FybmluZyhcIkFjY291bnQgdXNlZCB0byByZWZyZXNoIHRva2VucyBub3QgaW4gcGVyc2lzdGVuY2UsIHJlZnJlc2hlZCB0b2tlbnMgd2lsbCBub3QgYmUgc3RvcmVkIGluIHRoZSBjYWNoZVwiKTtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gYXdhaXQgUmVzcG9uc2VIYW5kbGVyLmdlbmVyYXRlQXV0aGVudGljYXRpb25SZXN1bHQodGhpcy5jcnlwdG9PYmosIGF1dGhvcml0eSwgY2FjaGVSZWNvcmQsIGZhbHNlLCByZXF1ZXN0LCBpZFRva2VuQ2xhaW1zLCByZXF1ZXN0U3RhdGVPYmosIHVuZGVmaW5lZCwgc2VydmVyUmVxdWVzdElkKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBhd2FpdCB0aGlzLmNhY2hlU3RvcmFnZS5zYXZlQ2FjaGVSZWNvcmQoY2FjaGVSZWNvcmQsIHJlcXVlc3Quc3RvcmVJbkNhY2hlLCByZXF1ZXN0LmNvcnJlbGF0aW9uSWQpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBmaW5hbGx5IHtcclxuICAgICAgICAgICAgaWYgKHRoaXMucGVyc2lzdGVuY2VQbHVnaW4gJiZcclxuICAgICAgICAgICAgICAgIHRoaXMuc2VyaWFsaXphYmxlQ2FjaGUgJiZcclxuICAgICAgICAgICAgICAgIGNhY2hlQ29udGV4dCkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5sb2dnZXIudmVyYm9zZShcIlBlcnNpc3RlbmNlIGVuYWJsZWQsIGNhbGxpbmcgYWZ0ZXJDYWNoZUFjY2Vzc1wiKTtcclxuICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMucGVyc2lzdGVuY2VQbHVnaW4uYWZ0ZXJDYWNoZUFjY2VzcyhjYWNoZUNvbnRleHQpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBSZXNwb25zZUhhbmRsZXIuZ2VuZXJhdGVBdXRoZW50aWNhdGlvblJlc3VsdCh0aGlzLmNyeXB0b09iaiwgYXV0aG9yaXR5LCBjYWNoZVJlY29yZCwgZmFsc2UsIHJlcXVlc3QsIGlkVG9rZW5DbGFpbXMsIHJlcXVlc3RTdGF0ZU9iaiwgc2VydmVyVG9rZW5SZXNwb25zZSwgc2VydmVyUmVxdWVzdElkKTtcclxuICAgIH1cclxuICAgIC8qKlxyXG4gICAgICogR2VuZXJhdGVzIENhY2hlUmVjb3JkXHJcbiAgICAgKiBAcGFyYW0gc2VydmVyVG9rZW5SZXNwb25zZVxyXG4gICAgICogQHBhcmFtIGlkVG9rZW5PYmpcclxuICAgICAqIEBwYXJhbSBhdXRob3JpdHlcclxuICAgICAqL1xyXG4gICAgZ2VuZXJhdGVDYWNoZVJlY29yZChzZXJ2ZXJUb2tlblJlc3BvbnNlLCBhdXRob3JpdHksIHJlcVRpbWVzdGFtcCwgcmVxdWVzdCwgaWRUb2tlbkNsYWltcywgdXNlckFzc2VydGlvbkhhc2gsIGF1dGhDb2RlUGF5bG9hZCkge1xyXG4gICAgICAgIGNvbnN0IGVudiA9IGF1dGhvcml0eS5nZXRQcmVmZXJyZWRDYWNoZSgpO1xyXG4gICAgICAgIGlmICghZW52KSB7XHJcbiAgICAgICAgICAgIHRocm93IGNyZWF0ZUNsaWVudEF1dGhFcnJvcihpbnZhbGlkQ2FjaGVFbnZpcm9ubWVudCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNvbnN0IGNsYWltc1RlbmFudElkID0gZ2V0VGVuYW50SWRGcm9tSWRUb2tlbkNsYWltcyhpZFRva2VuQ2xhaW1zKTtcclxuICAgICAgICAvLyBJZFRva2VuOiBub24gQUFEIHNjZW5hcmlvcyBjYW4gaGF2ZSBlbXB0eSByZWFsbVxyXG4gICAgICAgIGxldCBjYWNoZWRJZFRva2VuO1xyXG4gICAgICAgIGxldCBjYWNoZWRBY2NvdW50O1xyXG4gICAgICAgIGlmIChzZXJ2ZXJUb2tlblJlc3BvbnNlLmlkX3Rva2VuICYmICEhaWRUb2tlbkNsYWltcykge1xyXG4gICAgICAgICAgICBjYWNoZWRJZFRva2VuID0gY3JlYXRlSWRUb2tlbkVudGl0eSh0aGlzLmhvbWVBY2NvdW50SWRlbnRpZmllciwgZW52LCBzZXJ2ZXJUb2tlblJlc3BvbnNlLmlkX3Rva2VuLCB0aGlzLmNsaWVudElkLCBjbGFpbXNUZW5hbnRJZCB8fCBcIlwiKTtcclxuICAgICAgICAgICAgY2FjaGVkQWNjb3VudCA9IGJ1aWxkQWNjb3VudFRvQ2FjaGUodGhpcy5jYWNoZVN0b3JhZ2UsIGF1dGhvcml0eSwgdGhpcy5ob21lQWNjb3VudElkZW50aWZpZXIsIHRoaXMuY3J5cHRvT2JqLmJhc2U2NERlY29kZSwgaWRUb2tlbkNsYWltcywgc2VydmVyVG9rZW5SZXNwb25zZS5jbGllbnRfaW5mbywgZW52LCBjbGFpbXNUZW5hbnRJZCwgYXV0aENvZGVQYXlsb2FkLCB1bmRlZmluZWQsIC8vIG5hdGl2ZUFjY291bnRJZFxyXG4gICAgICAgICAgICB0aGlzLmxvZ2dlcik7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIC8vIEFjY2Vzc1Rva2VuXHJcbiAgICAgICAgbGV0IGNhY2hlZEFjY2Vzc1Rva2VuID0gbnVsbDtcclxuICAgICAgICBpZiAoc2VydmVyVG9rZW5SZXNwb25zZS5hY2Nlc3NfdG9rZW4pIHtcclxuICAgICAgICAgICAgLy8gSWYgc2NvcGVzIG5vdCByZXR1cm5lZCBpbiBzZXJ2ZXIgcmVzcG9uc2UsIHVzZSByZXF1ZXN0IHNjb3Blc1xyXG4gICAgICAgICAgICBjb25zdCByZXNwb25zZVNjb3BlcyA9IHNlcnZlclRva2VuUmVzcG9uc2Uuc2NvcGVcclxuICAgICAgICAgICAgICAgID8gU2NvcGVTZXQuZnJvbVN0cmluZyhzZXJ2ZXJUb2tlblJlc3BvbnNlLnNjb3BlKVxyXG4gICAgICAgICAgICAgICAgOiBuZXcgU2NvcGVTZXQocmVxdWVzdC5zY29wZXMgfHwgW10pO1xyXG4gICAgICAgICAgICAvKlxyXG4gICAgICAgICAgICAgKiBVc2UgdGltZXN0YW1wIGNhbGN1bGF0ZWQgYmVmb3JlIHJlcXVlc3RcclxuICAgICAgICAgICAgICogU2VydmVyIG1heSByZXR1cm4gdGltZXN0YW1wcyBhcyBzdHJpbmdzLCBwYXJzZSB0byBudW1iZXJzIGlmIHNvLlxyXG4gICAgICAgICAgICAgKi9cclxuICAgICAgICAgICAgY29uc3QgZXhwaXJlc0luID0gKHR5cGVvZiBzZXJ2ZXJUb2tlblJlc3BvbnNlLmV4cGlyZXNfaW4gPT09IFwic3RyaW5nXCJcclxuICAgICAgICAgICAgICAgID8gcGFyc2VJbnQoc2VydmVyVG9rZW5SZXNwb25zZS5leHBpcmVzX2luLCAxMClcclxuICAgICAgICAgICAgICAgIDogc2VydmVyVG9rZW5SZXNwb25zZS5leHBpcmVzX2luKSB8fCAwO1xyXG4gICAgICAgICAgICBjb25zdCBleHRFeHBpcmVzSW4gPSAodHlwZW9mIHNlcnZlclRva2VuUmVzcG9uc2UuZXh0X2V4cGlyZXNfaW4gPT09IFwic3RyaW5nXCJcclxuICAgICAgICAgICAgICAgID8gcGFyc2VJbnQoc2VydmVyVG9rZW5SZXNwb25zZS5leHRfZXhwaXJlc19pbiwgMTApXHJcbiAgICAgICAgICAgICAgICA6IHNlcnZlclRva2VuUmVzcG9uc2UuZXh0X2V4cGlyZXNfaW4pIHx8IDA7XHJcbiAgICAgICAgICAgIGNvbnN0IHJlZnJlc2hJbiA9ICh0eXBlb2Ygc2VydmVyVG9rZW5SZXNwb25zZS5yZWZyZXNoX2luID09PSBcInN0cmluZ1wiXHJcbiAgICAgICAgICAgICAgICA/IHBhcnNlSW50KHNlcnZlclRva2VuUmVzcG9uc2UucmVmcmVzaF9pbiwgMTApXHJcbiAgICAgICAgICAgICAgICA6IHNlcnZlclRva2VuUmVzcG9uc2UucmVmcmVzaF9pbikgfHwgdW5kZWZpbmVkO1xyXG4gICAgICAgICAgICBjb25zdCB0b2tlbkV4cGlyYXRpb25TZWNvbmRzID0gcmVxVGltZXN0YW1wICsgZXhwaXJlc0luO1xyXG4gICAgICAgICAgICBjb25zdCBleHRlbmRlZFRva2VuRXhwaXJhdGlvblNlY29uZHMgPSB0b2tlbkV4cGlyYXRpb25TZWNvbmRzICsgZXh0RXhwaXJlc0luO1xyXG4gICAgICAgICAgICBjb25zdCByZWZyZXNoT25TZWNvbmRzID0gcmVmcmVzaEluICYmIHJlZnJlc2hJbiA+IDBcclxuICAgICAgICAgICAgICAgID8gcmVxVGltZXN0YW1wICsgcmVmcmVzaEluXHJcbiAgICAgICAgICAgICAgICA6IHVuZGVmaW5lZDtcclxuICAgICAgICAgICAgLy8gbm9uIEFBRCBzY2VuYXJpb3MgY2FuIGhhdmUgZW1wdHkgcmVhbG1cclxuICAgICAgICAgICAgY2FjaGVkQWNjZXNzVG9rZW4gPSBjcmVhdGVBY2Nlc3NUb2tlbkVudGl0eSh0aGlzLmhvbWVBY2NvdW50SWRlbnRpZmllciwgZW52LCBzZXJ2ZXJUb2tlblJlc3BvbnNlLmFjY2Vzc190b2tlbiwgdGhpcy5jbGllbnRJZCwgY2xhaW1zVGVuYW50SWQgfHwgYXV0aG9yaXR5LnRlbmFudCB8fCBcIlwiLCByZXNwb25zZVNjb3Blcy5wcmludFNjb3BlcygpLCB0b2tlbkV4cGlyYXRpb25TZWNvbmRzLCBleHRlbmRlZFRva2VuRXhwaXJhdGlvblNlY29uZHMsIHRoaXMuY3J5cHRvT2JqLmJhc2U2NERlY29kZSwgcmVmcmVzaE9uU2Vjb25kcywgc2VydmVyVG9rZW5SZXNwb25zZS50b2tlbl90eXBlLCB1c2VyQXNzZXJ0aW9uSGFzaCwgc2VydmVyVG9rZW5SZXNwb25zZS5rZXlfaWQsIHJlcXVlc3QuY2xhaW1zLCByZXF1ZXN0LnJlcXVlc3RlZENsYWltc0hhc2gpO1xyXG4gICAgICAgIH1cclxuICAgICAgICAvLyByZWZyZXNoVG9rZW5cclxuICAgICAgICBsZXQgY2FjaGVkUmVmcmVzaFRva2VuID0gbnVsbDtcclxuICAgICAgICBpZiAoc2VydmVyVG9rZW5SZXNwb25zZS5yZWZyZXNoX3Rva2VuKSB7XHJcbiAgICAgICAgICAgIGxldCBydEV4cGlyZXNPbjtcclxuICAgICAgICAgICAgaWYgKHNlcnZlclRva2VuUmVzcG9uc2UucmVmcmVzaF90b2tlbl9leHBpcmVzX2luKSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBydEV4cGlyZXNJbiA9IHR5cGVvZiBzZXJ2ZXJUb2tlblJlc3BvbnNlLnJlZnJlc2hfdG9rZW5fZXhwaXJlc19pbiA9PT1cclxuICAgICAgICAgICAgICAgICAgICBcInN0cmluZ1wiXHJcbiAgICAgICAgICAgICAgICAgICAgPyBwYXJzZUludChzZXJ2ZXJUb2tlblJlc3BvbnNlLnJlZnJlc2hfdG9rZW5fZXhwaXJlc19pbiwgMTApXHJcbiAgICAgICAgICAgICAgICAgICAgOiBzZXJ2ZXJUb2tlblJlc3BvbnNlLnJlZnJlc2hfdG9rZW5fZXhwaXJlc19pbjtcclxuICAgICAgICAgICAgICAgIHJ0RXhwaXJlc09uID0gcmVxVGltZXN0YW1wICsgcnRFeHBpcmVzSW47XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgY2FjaGVkUmVmcmVzaFRva2VuID0gY3JlYXRlUmVmcmVzaFRva2VuRW50aXR5KHRoaXMuaG9tZUFjY291bnRJZGVudGlmaWVyLCBlbnYsIHNlcnZlclRva2VuUmVzcG9uc2UucmVmcmVzaF90b2tlbiwgdGhpcy5jbGllbnRJZCwgc2VydmVyVG9rZW5SZXNwb25zZS5mb2NpLCB1c2VyQXNzZXJ0aW9uSGFzaCwgcnRFeHBpcmVzT24pO1xyXG4gICAgICAgIH1cclxuICAgICAgICAvLyBhcHBNZXRhZGF0YVxyXG4gICAgICAgIGxldCBjYWNoZWRBcHBNZXRhZGF0YSA9IG51bGw7XHJcbiAgICAgICAgaWYgKHNlcnZlclRva2VuUmVzcG9uc2UuZm9jaSkge1xyXG4gICAgICAgICAgICBjYWNoZWRBcHBNZXRhZGF0YSA9IHtcclxuICAgICAgICAgICAgICAgIGNsaWVudElkOiB0aGlzLmNsaWVudElkLFxyXG4gICAgICAgICAgICAgICAgZW52aXJvbm1lbnQ6IGVudixcclxuICAgICAgICAgICAgICAgIGZhbWlseUlkOiBzZXJ2ZXJUb2tlblJlc3BvbnNlLmZvY2ksXHJcbiAgICAgICAgICAgIH07XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgIGFjY291bnQ6IGNhY2hlZEFjY291bnQsXHJcbiAgICAgICAgICAgIGlkVG9rZW46IGNhY2hlZElkVG9rZW4sXHJcbiAgICAgICAgICAgIGFjY2Vzc1Rva2VuOiBjYWNoZWRBY2Nlc3NUb2tlbixcclxuICAgICAgICAgICAgcmVmcmVzaFRva2VuOiBjYWNoZWRSZWZyZXNoVG9rZW4sXHJcbiAgICAgICAgICAgIGFwcE1ldGFkYXRhOiBjYWNoZWRBcHBNZXRhZGF0YSxcclxuICAgICAgICB9O1xyXG4gICAgfVxyXG4gICAgLyoqXHJcbiAgICAgKiBDcmVhdGVzIGFuIEBBdXRoZW50aWNhdGlvblJlc3VsdCBmcm9tIEBDYWNoZVJlY29yZCAsIEBJZFRva2VuICwgYW5kIGEgYm9vbGVhbiB0aGF0IHN0YXRlcyB3aGV0aGVyIG9yIG5vdCB0aGUgcmVzdWx0IGlzIGZyb20gY2FjaGUuXHJcbiAgICAgKlxyXG4gICAgICogT3B0aW9uYWxseSB0YWtlcyBhIHN0YXRlIHN0cmluZyB0aGF0IGlzIHNldCBhcy1pcyBpbiB0aGUgcmVzcG9uc2UuXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIGNhY2hlUmVjb3JkXHJcbiAgICAgKiBAcGFyYW0gaWRUb2tlbk9ialxyXG4gICAgICogQHBhcmFtIGZyb21Ub2tlbkNhY2hlXHJcbiAgICAgKiBAcGFyYW0gc3RhdGVTdHJpbmdcclxuICAgICAqL1xyXG4gICAgc3RhdGljIGFzeW5jIGdlbmVyYXRlQXV0aGVudGljYXRpb25SZXN1bHQoY3J5cHRvT2JqLCBhdXRob3JpdHksIGNhY2hlUmVjb3JkLCBmcm9tVG9rZW5DYWNoZSwgcmVxdWVzdCwgaWRUb2tlbkNsYWltcywgcmVxdWVzdFN0YXRlLCBzZXJ2ZXJUb2tlblJlc3BvbnNlLCByZXF1ZXN0SWQpIHtcclxuICAgICAgICBsZXQgYWNjZXNzVG9rZW4gPSBDb25zdGFudHMuRU1QVFlfU1RSSU5HO1xyXG4gICAgICAgIGxldCByZXNwb25zZVNjb3BlcyA9IFtdO1xyXG4gICAgICAgIGxldCBleHBpcmVzT24gPSBudWxsO1xyXG4gICAgICAgIGxldCBleHRFeHBpcmVzT247XHJcbiAgICAgICAgbGV0IHJlZnJlc2hPbjtcclxuICAgICAgICBsZXQgZmFtaWx5SWQgPSBDb25zdGFudHMuRU1QVFlfU1RSSU5HO1xyXG4gICAgICAgIGlmIChjYWNoZVJlY29yZC5hY2Nlc3NUb2tlbikge1xyXG4gICAgICAgICAgICAvKlxyXG4gICAgICAgICAgICAgKiBpZiB0aGUgcmVxdWVzdCBvYmplY3QgaGFzIGBwb3BLaWRgIHByb3BlcnR5LCBgc2lnblBvcFRva2VuYCB3aWxsIGJlIHNldCB0byBmYWxzZSBhbmRcclxuICAgICAgICAgICAgICogdGhlIHRva2VuIHdpbGwgYmUgcmV0dXJuZWQgdW5zaWduZWRcclxuICAgICAgICAgICAgICovXHJcbiAgICAgICAgICAgIGlmIChjYWNoZVJlY29yZC5hY2Nlc3NUb2tlbi50b2tlblR5cGUgPT09XHJcbiAgICAgICAgICAgICAgICBBdXRoZW50aWNhdGlvblNjaGVtZS5QT1AgJiZcclxuICAgICAgICAgICAgICAgICFyZXF1ZXN0LnBvcEtpZCkge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgcG9wVG9rZW5HZW5lcmF0b3IgPSBuZXcgUG9wVG9rZW5HZW5lcmF0b3IoY3J5cHRvT2JqKTtcclxuICAgICAgICAgICAgICAgIGNvbnN0IHsgc2VjcmV0LCBrZXlJZCB9ID0gY2FjaGVSZWNvcmQuYWNjZXNzVG9rZW47XHJcbiAgICAgICAgICAgICAgICBpZiAoIWtleUlkKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgY3JlYXRlQ2xpZW50QXV0aEVycm9yKGtleUlkTWlzc2luZyk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBhY2Nlc3NUb2tlbiA9IGF3YWl0IHBvcFRva2VuR2VuZXJhdG9yLnNpZ25Qb3BUb2tlbihzZWNyZXQsIGtleUlkLCByZXF1ZXN0KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgIGFjY2Vzc1Rva2VuID0gY2FjaGVSZWNvcmQuYWNjZXNzVG9rZW4uc2VjcmV0O1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJlc3BvbnNlU2NvcGVzID0gU2NvcGVTZXQuZnJvbVN0cmluZyhjYWNoZVJlY29yZC5hY2Nlc3NUb2tlbi50YXJnZXQpLmFzQXJyYXkoKTtcclxuICAgICAgICAgICAgZXhwaXJlc09uID0gbmV3IERhdGUoTnVtYmVyKGNhY2hlUmVjb3JkLmFjY2Vzc1Rva2VuLmV4cGlyZXNPbikgKiAxMDAwKTtcclxuICAgICAgICAgICAgZXh0RXhwaXJlc09uID0gbmV3IERhdGUoTnVtYmVyKGNhY2hlUmVjb3JkLmFjY2Vzc1Rva2VuLmV4dGVuZGVkRXhwaXJlc09uKSAqIDEwMDApO1xyXG4gICAgICAgICAgICBpZiAoY2FjaGVSZWNvcmQuYWNjZXNzVG9rZW4ucmVmcmVzaE9uKSB7XHJcbiAgICAgICAgICAgICAgICByZWZyZXNoT24gPSBuZXcgRGF0ZShOdW1iZXIoY2FjaGVSZWNvcmQuYWNjZXNzVG9rZW4ucmVmcmVzaE9uKSAqIDEwMDApO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChjYWNoZVJlY29yZC5hcHBNZXRhZGF0YSkge1xyXG4gICAgICAgICAgICBmYW1pbHlJZCA9XHJcbiAgICAgICAgICAgICAgICBjYWNoZVJlY29yZC5hcHBNZXRhZGF0YS5mYW1pbHlJZCA9PT0gVEhFX0ZBTUlMWV9JRFxyXG4gICAgICAgICAgICAgICAgICAgID8gVEhFX0ZBTUlMWV9JRFxyXG4gICAgICAgICAgICAgICAgICAgIDogXCJcIjtcclxuICAgICAgICB9XHJcbiAgICAgICAgY29uc3QgdWlkID0gaWRUb2tlbkNsYWltcz8ub2lkIHx8IGlkVG9rZW5DbGFpbXM/LnN1YiB8fCBcIlwiO1xyXG4gICAgICAgIGNvbnN0IHRpZCA9IGlkVG9rZW5DbGFpbXM/LnRpZCB8fCBcIlwiO1xyXG4gICAgICAgIC8vIGZvciBoeWJyaWQgKyBuYXRpdmUgYnJpZGdlIGVuYWJsZW1lbnQsIHNlbmQgYmFjayB0aGUgbmF0aXZlIGFjY291bnQgSWRcclxuICAgICAgICBpZiAoc2VydmVyVG9rZW5SZXNwb25zZT8uc3BhX2FjY291bnRpZCAmJiAhIWNhY2hlUmVjb3JkLmFjY291bnQpIHtcclxuICAgICAgICAgICAgY2FjaGVSZWNvcmQuYWNjb3VudC5uYXRpdmVBY2NvdW50SWQgPVxyXG4gICAgICAgICAgICAgICAgc2VydmVyVG9rZW5SZXNwb25zZT8uc3BhX2FjY291bnRpZDtcclxuICAgICAgICB9XHJcbiAgICAgICAgY29uc3QgYWNjb3VudEluZm8gPSBjYWNoZVJlY29yZC5hY2NvdW50XHJcbiAgICAgICAgICAgID8gdXBkYXRlQWNjb3VudFRlbmFudFByb2ZpbGVEYXRhKGNhY2hlUmVjb3JkLmFjY291bnQuZ2V0QWNjb3VudEluZm8oKSwgdW5kZWZpbmVkLCAvLyB0ZW5hbnRQcm9maWxlIG9wdGlvbmFsXHJcbiAgICAgICAgICAgIGlkVG9rZW5DbGFpbXMsIGNhY2hlUmVjb3JkLmlkVG9rZW4/LnNlY3JldClcclxuICAgICAgICAgICAgOiBudWxsO1xyXG4gICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgIGF1dGhvcml0eTogYXV0aG9yaXR5LmNhbm9uaWNhbEF1dGhvcml0eSxcclxuICAgICAgICAgICAgdW5pcXVlSWQ6IHVpZCxcclxuICAgICAgICAgICAgdGVuYW50SWQ6IHRpZCxcclxuICAgICAgICAgICAgc2NvcGVzOiByZXNwb25zZVNjb3BlcyxcclxuICAgICAgICAgICAgYWNjb3VudDogYWNjb3VudEluZm8sXHJcbiAgICAgICAgICAgIGlkVG9rZW46IGNhY2hlUmVjb3JkPy5pZFRva2VuPy5zZWNyZXQgfHwgXCJcIixcclxuICAgICAgICAgICAgaWRUb2tlbkNsYWltczogaWRUb2tlbkNsYWltcyB8fCB7fSxcclxuICAgICAgICAgICAgYWNjZXNzVG9rZW46IGFjY2Vzc1Rva2VuLFxyXG4gICAgICAgICAgICBmcm9tQ2FjaGU6IGZyb21Ub2tlbkNhY2hlLFxyXG4gICAgICAgICAgICBleHBpcmVzT246IGV4cGlyZXNPbixcclxuICAgICAgICAgICAgZXh0RXhwaXJlc09uOiBleHRFeHBpcmVzT24sXHJcbiAgICAgICAgICAgIHJlZnJlc2hPbjogcmVmcmVzaE9uLFxyXG4gICAgICAgICAgICBjb3JyZWxhdGlvbklkOiByZXF1ZXN0LmNvcnJlbGF0aW9uSWQsXHJcbiAgICAgICAgICAgIHJlcXVlc3RJZDogcmVxdWVzdElkIHx8IENvbnN0YW50cy5FTVBUWV9TVFJJTkcsXHJcbiAgICAgICAgICAgIGZhbWlseUlkOiBmYW1pbHlJZCxcclxuICAgICAgICAgICAgdG9rZW5UeXBlOiBjYWNoZVJlY29yZC5hY2Nlc3NUb2tlbj8udG9rZW5UeXBlIHx8IENvbnN0YW50cy5FTVBUWV9TVFJJTkcsXHJcbiAgICAgICAgICAgIHN0YXRlOiByZXF1ZXN0U3RhdGVcclxuICAgICAgICAgICAgICAgID8gcmVxdWVzdFN0YXRlLnVzZXJSZXF1ZXN0U3RhdGVcclxuICAgICAgICAgICAgICAgIDogQ29uc3RhbnRzLkVNUFRZX1NUUklORyxcclxuICAgICAgICAgICAgY2xvdWRHcmFwaEhvc3ROYW1lOiBjYWNoZVJlY29yZC5hY2NvdW50Py5jbG91ZEdyYXBoSG9zdE5hbWUgfHxcclxuICAgICAgICAgICAgICAgIENvbnN0YW50cy5FTVBUWV9TVFJJTkcsXHJcbiAgICAgICAgICAgIG1zR3JhcGhIb3N0OiBjYWNoZVJlY29yZC5hY2NvdW50Py5tc0dyYXBoSG9zdCB8fCBDb25zdGFudHMuRU1QVFlfU1RSSU5HLFxyXG4gICAgICAgICAgICBjb2RlOiBzZXJ2ZXJUb2tlblJlc3BvbnNlPy5zcGFfY29kZSxcclxuICAgICAgICAgICAgZnJvbU5hdGl2ZUJyb2tlcjogZmFsc2UsXHJcbiAgICAgICAgfTtcclxuICAgIH1cclxufVxyXG5mdW5jdGlvbiBidWlsZEFjY291bnRUb0NhY2hlKGNhY2hlU3RvcmFnZSwgYXV0aG9yaXR5LCBob21lQWNjb3VudElkLCBiYXNlNjREZWNvZGUsIGlkVG9rZW5DbGFpbXMsIGNsaWVudEluZm8sIGVudmlyb25tZW50LCBjbGFpbXNUZW5hbnRJZCwgYXV0aENvZGVQYXlsb2FkLCBuYXRpdmVBY2NvdW50SWQsIGxvZ2dlcikge1xyXG4gICAgbG9nZ2VyPy52ZXJib3NlKFwic2V0Q2FjaGVkQWNjb3VudCBjYWxsZWRcIik7XHJcbiAgICAvLyBDaGVjayBpZiBiYXNlIGFjY291bnQgaXMgYWxyZWFkeSBjYWNoZWRcclxuICAgIGNvbnN0IGFjY291bnRLZXlzID0gY2FjaGVTdG9yYWdlLmdldEFjY291bnRLZXlzKCk7XHJcbiAgICBjb25zdCBiYXNlQWNjb3VudEtleSA9IGFjY291bnRLZXlzLmZpbmQoKGFjY291bnRLZXkpID0+IHtcclxuICAgICAgICByZXR1cm4gYWNjb3VudEtleS5zdGFydHNXaXRoKGhvbWVBY2NvdW50SWQpO1xyXG4gICAgfSk7XHJcbiAgICBsZXQgY2FjaGVkQWNjb3VudCA9IG51bGw7XHJcbiAgICBpZiAoYmFzZUFjY291bnRLZXkpIHtcclxuICAgICAgICBjYWNoZWRBY2NvdW50ID0gY2FjaGVTdG9yYWdlLmdldEFjY291bnQoYmFzZUFjY291bnRLZXksIGxvZ2dlcik7XHJcbiAgICB9XHJcbiAgICBjb25zdCBiYXNlQWNjb3VudCA9IGNhY2hlZEFjY291bnQgfHxcclxuICAgICAgICBBY2NvdW50RW50aXR5LmNyZWF0ZUFjY291bnQoe1xyXG4gICAgICAgICAgICBob21lQWNjb3VudElkLFxyXG4gICAgICAgICAgICBpZFRva2VuQ2xhaW1zLFxyXG4gICAgICAgICAgICBjbGllbnRJbmZvLFxyXG4gICAgICAgICAgICBlbnZpcm9ubWVudCxcclxuICAgICAgICAgICAgY2xvdWRHcmFwaEhvc3ROYW1lOiBhdXRoQ29kZVBheWxvYWQ/LmNsb3VkX2dyYXBoX2hvc3RfbmFtZSxcclxuICAgICAgICAgICAgbXNHcmFwaEhvc3Q6IGF1dGhDb2RlUGF5bG9hZD8ubXNncmFwaF9ob3N0LFxyXG4gICAgICAgICAgICBuYXRpdmVBY2NvdW50SWQ6IG5hdGl2ZUFjY291bnRJZCxcclxuICAgICAgICB9LCBhdXRob3JpdHksIGJhc2U2NERlY29kZSk7XHJcbiAgICBjb25zdCB0ZW5hbnRQcm9maWxlcyA9IGJhc2VBY2NvdW50LnRlbmFudFByb2ZpbGVzIHx8IFtdO1xyXG4gICAgY29uc3QgdGVuYW50SWQgPSBjbGFpbXNUZW5hbnRJZCB8fCBiYXNlQWNjb3VudC5yZWFsbTtcclxuICAgIGlmICh0ZW5hbnRJZCAmJlxyXG4gICAgICAgICF0ZW5hbnRQcm9maWxlcy5maW5kKCh0ZW5hbnRQcm9maWxlKSA9PiB7XHJcbiAgICAgICAgICAgIHJldHVybiB0ZW5hbnRQcm9maWxlLnRlbmFudElkID09PSB0ZW5hbnRJZDtcclxuICAgICAgICB9KSkge1xyXG4gICAgICAgIGNvbnN0IG5ld1RlbmFudFByb2ZpbGUgPSBidWlsZFRlbmFudFByb2ZpbGUoaG9tZUFjY291bnRJZCwgYmFzZUFjY291bnQubG9jYWxBY2NvdW50SWQsIHRlbmFudElkLCBpZFRva2VuQ2xhaW1zKTtcclxuICAgICAgICB0ZW5hbnRQcm9maWxlcy5wdXNoKG5ld1RlbmFudFByb2ZpbGUpO1xyXG4gICAgfVxyXG4gICAgYmFzZUFjY291bnQudGVuYW50UHJvZmlsZXMgPSB0ZW5hbnRQcm9maWxlcztcclxuICAgIHJldHVybiBiYXNlQWNjb3VudDtcclxufVxuXG5leHBvcnQgeyBSZXNwb25zZUhhbmRsZXIsIGJ1aWxkQWNjb3VudFRvQ2FjaGUgfTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPVJlc3BvbnNlSGFuZGxlci5tanMubWFwXG4iLCIvKiEgQGF6dXJlL21zYWwtY29tbW9uIHYxNC4xNi4wIDIwMjQtMTEtMDUgKi9cbid1c2Ugc3RyaWN0Jztcbi8qXHJcbiAqIENvcHlyaWdodCAoYykgTWljcm9zb2Z0IENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLlxyXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgTUlUIExpY2Vuc2UuXHJcbiAqL1xyXG5hc3luYyBmdW5jdGlvbiBnZXRDbGllbnRBc3NlcnRpb24oY2xpZW50QXNzZXJ0aW9uLCBjbGllbnRJZCwgdG9rZW5FbmRwb2ludCkge1xyXG4gICAgaWYgKHR5cGVvZiBjbGllbnRBc3NlcnRpb24gPT09IFwic3RyaW5nXCIpIHtcclxuICAgICAgICByZXR1cm4gY2xpZW50QXNzZXJ0aW9uO1xyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcbiAgICAgICAgY29uc3QgY29uZmlnID0ge1xyXG4gICAgICAgICAgICBjbGllbnRJZDogY2xpZW50SWQsXHJcbiAgICAgICAgICAgIHRva2VuRW5kcG9pbnQ6IHRva2VuRW5kcG9pbnQsXHJcbiAgICAgICAgfTtcclxuICAgICAgICByZXR1cm4gY2xpZW50QXNzZXJ0aW9uKGNvbmZpZyk7XHJcbiAgICB9XHJcbn1cblxuZXhwb3J0IHsgZ2V0Q2xpZW50QXNzZXJ0aW9uIH07XG4vLyMgc291cmNlTWFwcGluZ1VSTD1DbGllbnRBc3NlcnRpb25VdGlscy5tanMubWFwXG4iLCIvKiEgQGF6dXJlL21zYWwtY29tbW9uIHYxNC4xNi4wIDIwMjQtMTEtMDUgKi9cbid1c2Ugc3RyaWN0JztcbmltcG9ydCB7IEJhc2VDbGllbnQgfSBmcm9tICcuL0Jhc2VDbGllbnQubWpzJztcbmltcG9ydCB7IFJlcXVlc3RQYXJhbWV0ZXJCdWlsZGVyIH0gZnJvbSAnLi4vcmVxdWVzdC9SZXF1ZXN0UGFyYW1ldGVyQnVpbGRlci5tanMnO1xuaW1wb3J0IHsgU2VwYXJhdG9ycywgR3JhbnRUeXBlLCBBdXRoZW50aWNhdGlvblNjaGVtZSwgUHJvbXB0VmFsdWUsIEhlYWRlck5hbWVzIH0gZnJvbSAnLi4vdXRpbHMvQ29uc3RhbnRzLm1qcyc7XG5pbXBvcnQgeyBDTElFTlRfSUQsIFJFVFVSTl9TUEFfQ09ERSB9IGZyb20gJy4uL2NvbnN0YW50cy9BQURTZXJ2ZXJQYXJhbUtleXMubWpzJztcbmltcG9ydCB7IGlzT2lkY1Byb3RvY29sTW9kZSB9IGZyb20gJy4uL2NvbmZpZy9DbGllbnRDb25maWd1cmF0aW9uLm1qcyc7XG5pbXBvcnQgeyBSZXNwb25zZUhhbmRsZXIgfSBmcm9tICcuLi9yZXNwb25zZS9SZXNwb25zZUhhbmRsZXIubWpzJztcbmltcG9ydCB7IFN0cmluZ1V0aWxzIH0gZnJvbSAnLi4vdXRpbHMvU3RyaW5nVXRpbHMubWpzJztcbmltcG9ydCB7IGNyZWF0ZUNsaWVudEF1dGhFcnJvciB9IGZyb20gJy4uL2Vycm9yL0NsaWVudEF1dGhFcnJvci5tanMnO1xuaW1wb3J0IHsgVXJsU3RyaW5nIH0gZnJvbSAnLi4vdXJsL1VybFN0cmluZy5tanMnO1xuaW1wb3J0IHsgUG9wVG9rZW5HZW5lcmF0b3IgfSBmcm9tICcuLi9jcnlwdG8vUG9wVG9rZW5HZW5lcmF0b3IubWpzJztcbmltcG9ydCB7IG5vd1NlY29uZHMgfSBmcm9tICcuLi91dGlscy9UaW1lVXRpbHMubWpzJztcbmltcG9ydCB7IGJ1aWxkQ2xpZW50SW5mbywgYnVpbGRDbGllbnRJbmZvRnJvbUhvbWVBY2NvdW50SWQgfSBmcm9tICcuLi9hY2NvdW50L0NsaWVudEluZm8ubWpzJztcbmltcG9ydCB7IENjc0NyZWRlbnRpYWxUeXBlIH0gZnJvbSAnLi4vYWNjb3VudC9DY3NDcmVkZW50aWFsLm1qcyc7XG5pbXBvcnQgeyBjcmVhdGVDbGllbnRDb25maWd1cmF0aW9uRXJyb3IgfSBmcm9tICcuLi9lcnJvci9DbGllbnRDb25maWd1cmF0aW9uRXJyb3IubWpzJztcbmltcG9ydCB7IFJlcXVlc3RWYWxpZGF0b3IgfSBmcm9tICcuLi9yZXF1ZXN0L1JlcXVlc3RWYWxpZGF0b3IubWpzJztcbmltcG9ydCB7IFBlcmZvcm1hbmNlRXZlbnRzIH0gZnJvbSAnLi4vdGVsZW1ldHJ5L3BlcmZvcm1hbmNlL1BlcmZvcm1hbmNlRXZlbnQubWpzJztcbmltcG9ydCB7IGludm9rZUFzeW5jIH0gZnJvbSAnLi4vdXRpbHMvRnVuY3Rpb25XcmFwcGVycy5tanMnO1xuaW1wb3J0IHsgZ2V0Q2xpZW50QXNzZXJ0aW9uIH0gZnJvbSAnLi4vdXRpbHMvQ2xpZW50QXNzZXJ0aW9uVXRpbHMubWpzJztcbmltcG9ydCB7IHJlcXVlc3RDYW5ub3RCZU1hZGUsIGF1dGhvcml6YXRpb25Db2RlTWlzc2luZ0Zyb21TZXJ2ZXJSZXNwb25zZSB9IGZyb20gJy4uL2Vycm9yL0NsaWVudEF1dGhFcnJvckNvZGVzLm1qcyc7XG5pbXBvcnQgeyBsb2dvdXRSZXF1ZXN0RW1wdHksIG1pc3NpbmdTc2hKd2sgfSBmcm9tICcuLi9lcnJvci9DbGllbnRDb25maWd1cmF0aW9uRXJyb3JDb2Rlcy5tanMnO1xuXG4vKlxyXG4gKiBDb3B5cmlnaHQgKGMpIE1pY3Jvc29mdCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cclxuICogTGljZW5zZWQgdW5kZXIgdGhlIE1JVCBMaWNlbnNlLlxyXG4gKi9cclxuLyoqXHJcbiAqIE9hdXRoMi4wIEF1dGhvcml6YXRpb24gQ29kZSBjbGllbnRcclxuICogQGludGVybmFsXHJcbiAqL1xyXG5jbGFzcyBBdXRob3JpemF0aW9uQ29kZUNsaWVudCBleHRlbmRzIEJhc2VDbGllbnQge1xyXG4gICAgY29uc3RydWN0b3IoY29uZmlndXJhdGlvbiwgcGVyZm9ybWFuY2VDbGllbnQpIHtcclxuICAgICAgICBzdXBlcihjb25maWd1cmF0aW9uLCBwZXJmb3JtYW5jZUNsaWVudCk7XHJcbiAgICAgICAgLy8gRmxhZyB0byBpbmRpY2F0ZSBpZiBjbGllbnQgaXMgZm9yIGh5YnJpZCBzcGEgYXV0aCBjb2RlIHJlZGVtcHRpb25cclxuICAgICAgICB0aGlzLmluY2x1ZGVSZWRpcmVjdFVyaSA9IHRydWU7XHJcbiAgICAgICAgdGhpcy5vaWRjRGVmYXVsdFNjb3BlcyA9XHJcbiAgICAgICAgICAgIHRoaXMuY29uZmlnLmF1dGhPcHRpb25zLmF1dGhvcml0eS5vcHRpb25zLk9JRENPcHRpb25zPy5kZWZhdWx0U2NvcGVzO1xyXG4gICAgfVxyXG4gICAgLyoqXHJcbiAgICAgKiBDcmVhdGVzIHRoZSBVUkwgb2YgdGhlIGF1dGhvcml6YXRpb24gcmVxdWVzdCBsZXR0aW5nIHRoZSB1c2VyIGlucHV0IGNyZWRlbnRpYWxzIGFuZCBjb25zZW50IHRvIHRoZVxyXG4gICAgICogYXBwbGljYXRpb24uIFRoZSBVUkwgdGFyZ2V0IHRoZSAvYXV0aG9yaXplIGVuZHBvaW50IG9mIHRoZSBhdXRob3JpdHkgY29uZmlndXJlZCBpbiB0aGVcclxuICAgICAqIGFwcGxpY2F0aW9uIG9iamVjdC5cclxuICAgICAqXHJcbiAgICAgKiBPbmNlIHRoZSB1c2VyIGlucHV0cyB0aGVpciBjcmVkZW50aWFscyBhbmQgY29uc2VudHMsIHRoZSBhdXRob3JpdHkgd2lsbCBzZW5kIGEgcmVzcG9uc2UgdG8gdGhlIHJlZGlyZWN0IFVSSVxyXG4gICAgICogc2VudCBpbiB0aGUgcmVxdWVzdCBhbmQgc2hvdWxkIGNvbnRhaW4gYW4gYXV0aG9yaXphdGlvbiBjb2RlLCB3aGljaCBjYW4gdGhlbiBiZSB1c2VkIHRvIGFjcXVpcmUgdG9rZW5zIHZpYVxyXG4gICAgICogYWNxdWlyZVRva2VuKEF1dGhvcml6YXRpb25Db2RlUmVxdWVzdClcclxuICAgICAqIEBwYXJhbSByZXF1ZXN0XHJcbiAgICAgKi9cclxuICAgIGFzeW5jIGdldEF1dGhDb2RlVXJsKHJlcXVlc3QpIHtcclxuICAgICAgICB0aGlzLnBlcmZvcm1hbmNlQ2xpZW50Py5hZGRRdWV1ZU1lYXN1cmVtZW50KFBlcmZvcm1hbmNlRXZlbnRzLkdldEF1dGhDb2RlVXJsLCByZXF1ZXN0LmNvcnJlbGF0aW9uSWQpO1xyXG4gICAgICAgIGNvbnN0IHF1ZXJ5U3RyaW5nID0gYXdhaXQgaW52b2tlQXN5bmModGhpcy5jcmVhdGVBdXRoQ29kZVVybFF1ZXJ5U3RyaW5nLmJpbmQodGhpcyksIFBlcmZvcm1hbmNlRXZlbnRzLkF1dGhDbGllbnRDcmVhdGVRdWVyeVN0cmluZywgdGhpcy5sb2dnZXIsIHRoaXMucGVyZm9ybWFuY2VDbGllbnQsIHJlcXVlc3QuY29ycmVsYXRpb25JZCkocmVxdWVzdCk7XHJcbiAgICAgICAgcmV0dXJuIFVybFN0cmluZy5hcHBlbmRRdWVyeVN0cmluZyh0aGlzLmF1dGhvcml0eS5hdXRob3JpemF0aW9uRW5kcG9pbnQsIHF1ZXJ5U3RyaW5nKTtcclxuICAgIH1cclxuICAgIC8qKlxyXG4gICAgICogQVBJIHRvIGFjcXVpcmUgYSB0b2tlbiBpbiBleGNoYW5nZSBvZiAnYXV0aG9yaXphdGlvbl9jb2RlYCBhY3F1aXJlZCBieSB0aGUgdXNlciBpbiB0aGUgZmlyc3QgbGVnIG9mIHRoZVxyXG4gICAgICogYXV0aG9yaXphdGlvbl9jb2RlX2dyYW50XHJcbiAgICAgKiBAcGFyYW0gcmVxdWVzdFxyXG4gICAgICovXHJcbiAgICBhc3luYyBhY3F1aXJlVG9rZW4ocmVxdWVzdCwgYXV0aENvZGVQYXlsb2FkKSB7XHJcbiAgICAgICAgdGhpcy5wZXJmb3JtYW5jZUNsaWVudD8uYWRkUXVldWVNZWFzdXJlbWVudChQZXJmb3JtYW5jZUV2ZW50cy5BdXRoQ2xpZW50QWNxdWlyZVRva2VuLCByZXF1ZXN0LmNvcnJlbGF0aW9uSWQpO1xyXG4gICAgICAgIGlmICghcmVxdWVzdC5jb2RlKSB7XHJcbiAgICAgICAgICAgIHRocm93IGNyZWF0ZUNsaWVudEF1dGhFcnJvcihyZXF1ZXN0Q2Fubm90QmVNYWRlKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgY29uc3QgcmVxVGltZXN0YW1wID0gbm93U2Vjb25kcygpO1xyXG4gICAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgaW52b2tlQXN5bmModGhpcy5leGVjdXRlVG9rZW5SZXF1ZXN0LmJpbmQodGhpcyksIFBlcmZvcm1hbmNlRXZlbnRzLkF1dGhDbGllbnRFeGVjdXRlVG9rZW5SZXF1ZXN0LCB0aGlzLmxvZ2dlciwgdGhpcy5wZXJmb3JtYW5jZUNsaWVudCwgcmVxdWVzdC5jb3JyZWxhdGlvbklkKSh0aGlzLmF1dGhvcml0eSwgcmVxdWVzdCk7XHJcbiAgICAgICAgLy8gUmV0cmlldmUgcmVxdWVzdElkIGZyb20gcmVzcG9uc2UgaGVhZGVyc1xyXG4gICAgICAgIGNvbnN0IHJlcXVlc3RJZCA9IHJlc3BvbnNlLmhlYWRlcnM/LltIZWFkZXJOYW1lcy5YX01TX1JFUVVFU1RfSURdO1xyXG4gICAgICAgIGNvbnN0IHJlc3BvbnNlSGFuZGxlciA9IG5ldyBSZXNwb25zZUhhbmRsZXIodGhpcy5jb25maWcuYXV0aE9wdGlvbnMuY2xpZW50SWQsIHRoaXMuY2FjaGVNYW5hZ2VyLCB0aGlzLmNyeXB0b1V0aWxzLCB0aGlzLmxvZ2dlciwgdGhpcy5jb25maWcuc2VyaWFsaXphYmxlQ2FjaGUsIHRoaXMuY29uZmlnLnBlcnNpc3RlbmNlUGx1Z2luLCB0aGlzLnBlcmZvcm1hbmNlQ2xpZW50KTtcclxuICAgICAgICAvLyBWYWxpZGF0ZSByZXNwb25zZS4gVGhpcyBmdW5jdGlvbiB0aHJvd3MgYSBzZXJ2ZXIgZXJyb3IgaWYgYW4gZXJyb3IgaXMgcmV0dXJuZWQgYnkgdGhlIHNlcnZlci5cclxuICAgICAgICByZXNwb25zZUhhbmRsZXIudmFsaWRhdGVUb2tlblJlc3BvbnNlKHJlc3BvbnNlLmJvZHkpO1xyXG4gICAgICAgIHJldHVybiBpbnZva2VBc3luYyhyZXNwb25zZUhhbmRsZXIuaGFuZGxlU2VydmVyVG9rZW5SZXNwb25zZS5iaW5kKHJlc3BvbnNlSGFuZGxlciksIFBlcmZvcm1hbmNlRXZlbnRzLkhhbmRsZVNlcnZlclRva2VuUmVzcG9uc2UsIHRoaXMubG9nZ2VyLCB0aGlzLnBlcmZvcm1hbmNlQ2xpZW50LCByZXF1ZXN0LmNvcnJlbGF0aW9uSWQpKHJlc3BvbnNlLmJvZHksIHRoaXMuYXV0aG9yaXR5LCByZXFUaW1lc3RhbXAsIHJlcXVlc3QsIGF1dGhDb2RlUGF5bG9hZCwgdW5kZWZpbmVkLCB1bmRlZmluZWQsIHVuZGVmaW5lZCwgcmVxdWVzdElkKTtcclxuICAgIH1cclxuICAgIC8qKlxyXG4gICAgICogSGFuZGxlcyB0aGUgaGFzaCBmcmFnbWVudCByZXNwb25zZSBmcm9tIHB1YmxpYyBjbGllbnQgY29kZSByZXF1ZXN0LiBSZXR1cm5zIGEgY29kZSByZXNwb25zZSB1c2VkIGJ5XHJcbiAgICAgKiB0aGUgY2xpZW50IHRvIGV4Y2hhbmdlIGZvciBhIHRva2VuIGluIGFjcXVpcmVUb2tlbi5cclxuICAgICAqIEBwYXJhbSBoYXNoRnJhZ21lbnRcclxuICAgICAqL1xyXG4gICAgaGFuZGxlRnJhZ21lbnRSZXNwb25zZShzZXJ2ZXJQYXJhbXMsIGNhY2hlZFN0YXRlKSB7XHJcbiAgICAgICAgLy8gSGFuZGxlIHJlc3BvbnNlcy5cclxuICAgICAgICBjb25zdCByZXNwb25zZUhhbmRsZXIgPSBuZXcgUmVzcG9uc2VIYW5kbGVyKHRoaXMuY29uZmlnLmF1dGhPcHRpb25zLmNsaWVudElkLCB0aGlzLmNhY2hlTWFuYWdlciwgdGhpcy5jcnlwdG9VdGlscywgdGhpcy5sb2dnZXIsIG51bGwsIG51bGwpO1xyXG4gICAgICAgIC8vIEdldCBjb2RlIHJlc3BvbnNlXHJcbiAgICAgICAgcmVzcG9uc2VIYW5kbGVyLnZhbGlkYXRlU2VydmVyQXV0aG9yaXphdGlvbkNvZGVSZXNwb25zZShzZXJ2ZXJQYXJhbXMsIGNhY2hlZFN0YXRlKTtcclxuICAgICAgICAvLyB0aHJvdyB3aGVuIHRoZXJlIGlzIG5vIGF1dGggY29kZSBpbiB0aGUgcmVzcG9uc2VcclxuICAgICAgICBpZiAoIXNlcnZlclBhcmFtcy5jb2RlKSB7XHJcbiAgICAgICAgICAgIHRocm93IGNyZWF0ZUNsaWVudEF1dGhFcnJvcihhdXRob3JpemF0aW9uQ29kZU1pc3NpbmdGcm9tU2VydmVyUmVzcG9uc2UpO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gc2VydmVyUGFyYW1zO1xyXG4gICAgfVxyXG4gICAgLyoqXHJcbiAgICAgKiBVc2VkIHRvIGxvZyBvdXQgdGhlIGN1cnJlbnQgdXNlciwgYW5kIHJlZGlyZWN0IHRoZSB1c2VyIHRvIHRoZSBwb3N0TG9nb3V0UmVkaXJlY3RVcmkuXHJcbiAgICAgKiBEZWZhdWx0IGJlaGF2aW91ciBpcyB0byByZWRpcmVjdCB0aGUgdXNlciB0byBgd2luZG93LmxvY2F0aW9uLmhyZWZgLlxyXG4gICAgICogQHBhcmFtIGF1dGhvcml0eVVyaVxyXG4gICAgICovXHJcbiAgICBnZXRMb2dvdXRVcmkobG9nb3V0UmVxdWVzdCkge1xyXG4gICAgICAgIC8vIFRocm93IGVycm9yIGlmIGxvZ291dFJlcXVlc3QgaXMgbnVsbC91bmRlZmluZWRcclxuICAgICAgICBpZiAoIWxvZ291dFJlcXVlc3QpIHtcclxuICAgICAgICAgICAgdGhyb3cgY3JlYXRlQ2xpZW50Q29uZmlndXJhdGlvbkVycm9yKGxvZ291dFJlcXVlc3RFbXB0eSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNvbnN0IHF1ZXJ5U3RyaW5nID0gdGhpcy5jcmVhdGVMb2dvdXRVcmxRdWVyeVN0cmluZyhsb2dvdXRSZXF1ZXN0KTtcclxuICAgICAgICAvLyBDb25zdHJ1Y3QgbG9nb3V0IFVSSVxyXG4gICAgICAgIHJldHVybiBVcmxTdHJpbmcuYXBwZW5kUXVlcnlTdHJpbmcodGhpcy5hdXRob3JpdHkuZW5kU2Vzc2lvbkVuZHBvaW50LCBxdWVyeVN0cmluZyk7XHJcbiAgICB9XHJcbiAgICAvKipcclxuICAgICAqIEV4ZWN1dGVzIFBPU1QgcmVxdWVzdCB0byB0b2tlbiBlbmRwb2ludFxyXG4gICAgICogQHBhcmFtIGF1dGhvcml0eVxyXG4gICAgICogQHBhcmFtIHJlcXVlc3RcclxuICAgICAqL1xyXG4gICAgYXN5bmMgZXhlY3V0ZVRva2VuUmVxdWVzdChhdXRob3JpdHksIHJlcXVlc3QpIHtcclxuICAgICAgICB0aGlzLnBlcmZvcm1hbmNlQ2xpZW50Py5hZGRRdWV1ZU1lYXN1cmVtZW50KFBlcmZvcm1hbmNlRXZlbnRzLkF1dGhDbGllbnRFeGVjdXRlVG9rZW5SZXF1ZXN0LCByZXF1ZXN0LmNvcnJlbGF0aW9uSWQpO1xyXG4gICAgICAgIGNvbnN0IHF1ZXJ5UGFyYW1ldGVyc1N0cmluZyA9IHRoaXMuY3JlYXRlVG9rZW5RdWVyeVBhcmFtZXRlcnMocmVxdWVzdCk7XHJcbiAgICAgICAgY29uc3QgZW5kcG9pbnQgPSBVcmxTdHJpbmcuYXBwZW5kUXVlcnlTdHJpbmcoYXV0aG9yaXR5LnRva2VuRW5kcG9pbnQsIHF1ZXJ5UGFyYW1ldGVyc1N0cmluZyk7XHJcbiAgICAgICAgY29uc3QgcmVxdWVzdEJvZHkgPSBhd2FpdCBpbnZva2VBc3luYyh0aGlzLmNyZWF0ZVRva2VuUmVxdWVzdEJvZHkuYmluZCh0aGlzKSwgUGVyZm9ybWFuY2VFdmVudHMuQXV0aENsaWVudENyZWF0ZVRva2VuUmVxdWVzdEJvZHksIHRoaXMubG9nZ2VyLCB0aGlzLnBlcmZvcm1hbmNlQ2xpZW50LCByZXF1ZXN0LmNvcnJlbGF0aW9uSWQpKHJlcXVlc3QpO1xyXG4gICAgICAgIGxldCBjY3NDcmVkZW50aWFsID0gdW5kZWZpbmVkO1xyXG4gICAgICAgIGlmIChyZXF1ZXN0LmNsaWVudEluZm8pIHtcclxuICAgICAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGNsaWVudEluZm8gPSBidWlsZENsaWVudEluZm8ocmVxdWVzdC5jbGllbnRJbmZvLCB0aGlzLmNyeXB0b1V0aWxzLmJhc2U2NERlY29kZSk7XHJcbiAgICAgICAgICAgICAgICBjY3NDcmVkZW50aWFsID0ge1xyXG4gICAgICAgICAgICAgICAgICAgIGNyZWRlbnRpYWw6IGAke2NsaWVudEluZm8udWlkfSR7U2VwYXJhdG9ycy5DTElFTlRfSU5GT19TRVBBUkFUT1J9JHtjbGllbnRJbmZvLnV0aWR9YCxcclxuICAgICAgICAgICAgICAgICAgICB0eXBlOiBDY3NDcmVkZW50aWFsVHlwZS5IT01FX0FDQ09VTlRfSUQsXHJcbiAgICAgICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGNhdGNoIChlKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmxvZ2dlci52ZXJib3NlKFwiQ291bGQgbm90IHBhcnNlIGNsaWVudCBpbmZvIGZvciBDQ1MgSGVhZGVyOiBcIiArIGUpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNvbnN0IGhlYWRlcnMgPSB0aGlzLmNyZWF0ZVRva2VuUmVxdWVzdEhlYWRlcnMoY2NzQ3JlZGVudGlhbCB8fCByZXF1ZXN0LmNjc0NyZWRlbnRpYWwpO1xyXG4gICAgICAgIGNvbnN0IHRodW1icHJpbnQgPSB7XHJcbiAgICAgICAgICAgIGNsaWVudElkOiByZXF1ZXN0LnRva2VuQm9keVBhcmFtZXRlcnM/LmNsaWVudElkIHx8XHJcbiAgICAgICAgICAgICAgICB0aGlzLmNvbmZpZy5hdXRoT3B0aW9ucy5jbGllbnRJZCxcclxuICAgICAgICAgICAgYXV0aG9yaXR5OiBhdXRob3JpdHkuY2Fub25pY2FsQXV0aG9yaXR5LFxyXG4gICAgICAgICAgICBzY29wZXM6IHJlcXVlc3Quc2NvcGVzLFxyXG4gICAgICAgICAgICBjbGFpbXM6IHJlcXVlc3QuY2xhaW1zLFxyXG4gICAgICAgICAgICBhdXRoZW50aWNhdGlvblNjaGVtZTogcmVxdWVzdC5hdXRoZW50aWNhdGlvblNjaGVtZSxcclxuICAgICAgICAgICAgcmVzb3VyY2VSZXF1ZXN0TWV0aG9kOiByZXF1ZXN0LnJlc291cmNlUmVxdWVzdE1ldGhvZCxcclxuICAgICAgICAgICAgcmVzb3VyY2VSZXF1ZXN0VXJpOiByZXF1ZXN0LnJlc291cmNlUmVxdWVzdFVyaSxcclxuICAgICAgICAgICAgc2hyQ2xhaW1zOiByZXF1ZXN0LnNockNsYWltcyxcclxuICAgICAgICAgICAgc3NoS2lkOiByZXF1ZXN0LnNzaEtpZCxcclxuICAgICAgICB9O1xyXG4gICAgICAgIHJldHVybiBpbnZva2VBc3luYyh0aGlzLmV4ZWN1dGVQb3N0VG9Ub2tlbkVuZHBvaW50LmJpbmQodGhpcyksIFBlcmZvcm1hbmNlRXZlbnRzLkF1dGhvcml6YXRpb25Db2RlQ2xpZW50RXhlY3V0ZVBvc3RUb1Rva2VuRW5kcG9pbnQsIHRoaXMubG9nZ2VyLCB0aGlzLnBlcmZvcm1hbmNlQ2xpZW50LCByZXF1ZXN0LmNvcnJlbGF0aW9uSWQpKGVuZHBvaW50LCByZXF1ZXN0Qm9keSwgaGVhZGVycywgdGh1bWJwcmludCwgcmVxdWVzdC5jb3JyZWxhdGlvbklkLCBQZXJmb3JtYW5jZUV2ZW50cy5BdXRob3JpemF0aW9uQ29kZUNsaWVudEV4ZWN1dGVQb3N0VG9Ub2tlbkVuZHBvaW50KTtcclxuICAgIH1cclxuICAgIC8qKlxyXG4gICAgICogR2VuZXJhdGVzIGEgbWFwIGZvciBhbGwgdGhlIHBhcmFtcyB0byBiZSBzZW50IHRvIHRoZSBzZXJ2aWNlXHJcbiAgICAgKiBAcGFyYW0gcmVxdWVzdFxyXG4gICAgICovXHJcbiAgICBhc3luYyBjcmVhdGVUb2tlblJlcXVlc3RCb2R5KHJlcXVlc3QpIHtcclxuICAgICAgICB0aGlzLnBlcmZvcm1hbmNlQ2xpZW50Py5hZGRRdWV1ZU1lYXN1cmVtZW50KFBlcmZvcm1hbmNlRXZlbnRzLkF1dGhDbGllbnRDcmVhdGVUb2tlblJlcXVlc3RCb2R5LCByZXF1ZXN0LmNvcnJlbGF0aW9uSWQpO1xyXG4gICAgICAgIGNvbnN0IHBhcmFtZXRlckJ1aWxkZXIgPSBuZXcgUmVxdWVzdFBhcmFtZXRlckJ1aWxkZXIocmVxdWVzdC5jb3JyZWxhdGlvbklkLCB0aGlzLnBlcmZvcm1hbmNlQ2xpZW50KTtcclxuICAgICAgICBwYXJhbWV0ZXJCdWlsZGVyLmFkZENsaWVudElkKHJlcXVlc3QuZW1iZWRkZWRDbGllbnRJZCB8fFxyXG4gICAgICAgICAgICByZXF1ZXN0LnRva2VuQm9keVBhcmFtZXRlcnM/LltDTElFTlRfSURdIHx8XHJcbiAgICAgICAgICAgIHRoaXMuY29uZmlnLmF1dGhPcHRpb25zLmNsaWVudElkKTtcclxuICAgICAgICAvKlxyXG4gICAgICAgICAqIEZvciBoeWJyaWQgc3BhIGZsb3csIHRoZXJlIHdpbGwgYmUgYSBjb2RlIGJ1dCBubyB2ZXJpZmllclxyXG4gICAgICAgICAqIEluIHRoaXMgc2NlbmFyaW8sIGRvbid0IGluY2x1ZGUgcmVkaXJlY3QgdXJpIGFzIGF1dGggY29kZSB3aWxsIG5vdCBiZSBib3VuZCB0byByZWRpcmVjdCBVUklcclxuICAgICAgICAgKi9cclxuICAgICAgICBpZiAoIXRoaXMuaW5jbHVkZVJlZGlyZWN0VXJpKSB7XHJcbiAgICAgICAgICAgIC8vIEp1c3QgdmFsaWRhdGVcclxuICAgICAgICAgICAgUmVxdWVzdFZhbGlkYXRvci52YWxpZGF0ZVJlZGlyZWN0VXJpKHJlcXVlc3QucmVkaXJlY3RVcmkpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgLy8gVmFsaWRhdGUgYW5kIGluY2x1ZGUgcmVkaXJlY3QgdXJpXHJcbiAgICAgICAgICAgIHBhcmFtZXRlckJ1aWxkZXIuYWRkUmVkaXJlY3RVcmkocmVxdWVzdC5yZWRpcmVjdFVyaSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIC8vIEFkZCBzY29wZSBhcnJheSwgcGFyYW1ldGVyIGJ1aWxkZXIgd2lsbCBhZGQgZGVmYXVsdCBzY29wZXMgYW5kIGRlZHVwZVxyXG4gICAgICAgIHBhcmFtZXRlckJ1aWxkZXIuYWRkU2NvcGVzKHJlcXVlc3Quc2NvcGVzLCB0cnVlLCB0aGlzLm9pZGNEZWZhdWx0U2NvcGVzKTtcclxuICAgICAgICAvLyBhZGQgY29kZTogdXNlciBzZXQsIG5vdCB2YWxpZGF0ZWRcclxuICAgICAgICBwYXJhbWV0ZXJCdWlsZGVyLmFkZEF1dGhvcml6YXRpb25Db2RlKHJlcXVlc3QuY29kZSk7XHJcbiAgICAgICAgLy8gQWRkIGxpYnJhcnkgbWV0YWRhdGFcclxuICAgICAgICBwYXJhbWV0ZXJCdWlsZGVyLmFkZExpYnJhcnlJbmZvKHRoaXMuY29uZmlnLmxpYnJhcnlJbmZvKTtcclxuICAgICAgICBwYXJhbWV0ZXJCdWlsZGVyLmFkZEFwcGxpY2F0aW9uVGVsZW1ldHJ5KHRoaXMuY29uZmlnLnRlbGVtZXRyeS5hcHBsaWNhdGlvbik7XHJcbiAgICAgICAgcGFyYW1ldGVyQnVpbGRlci5hZGRUaHJvdHRsaW5nKCk7XHJcbiAgICAgICAgaWYgKHRoaXMuc2VydmVyVGVsZW1ldHJ5TWFuYWdlciAmJiAhaXNPaWRjUHJvdG9jb2xNb2RlKHRoaXMuY29uZmlnKSkge1xyXG4gICAgICAgICAgICBwYXJhbWV0ZXJCdWlsZGVyLmFkZFNlcnZlclRlbGVtZXRyeSh0aGlzLnNlcnZlclRlbGVtZXRyeU1hbmFnZXIpO1xyXG4gICAgICAgIH1cclxuICAgICAgICAvLyBhZGQgY29kZV92ZXJpZmllciBpZiBwYXNzZWRcclxuICAgICAgICBpZiAocmVxdWVzdC5jb2RlVmVyaWZpZXIpIHtcclxuICAgICAgICAgICAgcGFyYW1ldGVyQnVpbGRlci5hZGRDb2RlVmVyaWZpZXIocmVxdWVzdC5jb2RlVmVyaWZpZXIpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAodGhpcy5jb25maWcuY2xpZW50Q3JlZGVudGlhbHMuY2xpZW50U2VjcmV0KSB7XHJcbiAgICAgICAgICAgIHBhcmFtZXRlckJ1aWxkZXIuYWRkQ2xpZW50U2VjcmV0KHRoaXMuY29uZmlnLmNsaWVudENyZWRlbnRpYWxzLmNsaWVudFNlY3JldCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICh0aGlzLmNvbmZpZy5jbGllbnRDcmVkZW50aWFscy5jbGllbnRBc3NlcnRpb24pIHtcclxuICAgICAgICAgICAgY29uc3QgY2xpZW50QXNzZXJ0aW9uID0gdGhpcy5jb25maWcuY2xpZW50Q3JlZGVudGlhbHMuY2xpZW50QXNzZXJ0aW9uO1xyXG4gICAgICAgICAgICBwYXJhbWV0ZXJCdWlsZGVyLmFkZENsaWVudEFzc2VydGlvbihhd2FpdCBnZXRDbGllbnRBc3NlcnRpb24oY2xpZW50QXNzZXJ0aW9uLmFzc2VydGlvbiwgdGhpcy5jb25maWcuYXV0aE9wdGlvbnMuY2xpZW50SWQsIHJlcXVlc3QucmVzb3VyY2VSZXF1ZXN0VXJpKSk7XHJcbiAgICAgICAgICAgIHBhcmFtZXRlckJ1aWxkZXIuYWRkQ2xpZW50QXNzZXJ0aW9uVHlwZShjbGllbnRBc3NlcnRpb24uYXNzZXJ0aW9uVHlwZSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHBhcmFtZXRlckJ1aWxkZXIuYWRkR3JhbnRUeXBlKEdyYW50VHlwZS5BVVRIT1JJWkFUSU9OX0NPREVfR1JBTlQpO1xyXG4gICAgICAgIHBhcmFtZXRlckJ1aWxkZXIuYWRkQ2xpZW50SW5mbygpO1xyXG4gICAgICAgIGlmIChyZXF1ZXN0LmF1dGhlbnRpY2F0aW9uU2NoZW1lID09PSBBdXRoZW50aWNhdGlvblNjaGVtZS5QT1ApIHtcclxuICAgICAgICAgICAgY29uc3QgcG9wVG9rZW5HZW5lcmF0b3IgPSBuZXcgUG9wVG9rZW5HZW5lcmF0b3IodGhpcy5jcnlwdG9VdGlscywgdGhpcy5wZXJmb3JtYW5jZUNsaWVudCk7XHJcbiAgICAgICAgICAgIGxldCByZXFDbmZEYXRhO1xyXG4gICAgICAgICAgICBpZiAoIXJlcXVlc3QucG9wS2lkKSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBnZW5lcmF0ZWRSZXFDbmZEYXRhID0gYXdhaXQgaW52b2tlQXN5bmMocG9wVG9rZW5HZW5lcmF0b3IuZ2VuZXJhdGVDbmYuYmluZChwb3BUb2tlbkdlbmVyYXRvciksIFBlcmZvcm1hbmNlRXZlbnRzLlBvcFRva2VuR2VuZXJhdGVDbmYsIHRoaXMubG9nZ2VyLCB0aGlzLnBlcmZvcm1hbmNlQ2xpZW50LCByZXF1ZXN0LmNvcnJlbGF0aW9uSWQpKHJlcXVlc3QsIHRoaXMubG9nZ2VyKTtcclxuICAgICAgICAgICAgICAgIHJlcUNuZkRhdGEgPSBnZW5lcmF0ZWRSZXFDbmZEYXRhLnJlcUNuZlN0cmluZztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHJlcUNuZkRhdGEgPSB0aGlzLmNyeXB0b1V0aWxzLmVuY29kZUtpZChyZXF1ZXN0LnBvcEtpZCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgLy8gU1BBIFBvUCByZXF1aXJlcyBmdWxsIEJhc2U2NFVybCBlbmNvZGVkIHJlcV9jbmYgc3RyaW5nICh1bmhhc2hlZClcclxuICAgICAgICAgICAgcGFyYW1ldGVyQnVpbGRlci5hZGRQb3BUb2tlbihyZXFDbmZEYXRhKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSBpZiAocmVxdWVzdC5hdXRoZW50aWNhdGlvblNjaGVtZSA9PT0gQXV0aGVudGljYXRpb25TY2hlbWUuU1NIKSB7XHJcbiAgICAgICAgICAgIGlmIChyZXF1ZXN0LnNzaEp3aykge1xyXG4gICAgICAgICAgICAgICAgcGFyYW1ldGVyQnVpbGRlci5hZGRTc2hKd2socmVxdWVzdC5zc2hKd2spO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgdGhyb3cgY3JlYXRlQ2xpZW50Q29uZmlndXJhdGlvbkVycm9yKG1pc3NpbmdTc2hKd2spO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICghU3RyaW5nVXRpbHMuaXNFbXB0eU9iaihyZXF1ZXN0LmNsYWltcykgfHxcclxuICAgICAgICAgICAgKHRoaXMuY29uZmlnLmF1dGhPcHRpb25zLmNsaWVudENhcGFiaWxpdGllcyAmJlxyXG4gICAgICAgICAgICAgICAgdGhpcy5jb25maWcuYXV0aE9wdGlvbnMuY2xpZW50Q2FwYWJpbGl0aWVzLmxlbmd0aCA+IDApKSB7XHJcbiAgICAgICAgICAgIHBhcmFtZXRlckJ1aWxkZXIuYWRkQ2xhaW1zKHJlcXVlc3QuY2xhaW1zLCB0aGlzLmNvbmZpZy5hdXRoT3B0aW9ucy5jbGllbnRDYXBhYmlsaXRpZXMpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBsZXQgY2NzQ3JlZCA9IHVuZGVmaW5lZDtcclxuICAgICAgICBpZiAocmVxdWVzdC5jbGllbnRJbmZvKSB7XHJcbiAgICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBjbGllbnRJbmZvID0gYnVpbGRDbGllbnRJbmZvKHJlcXVlc3QuY2xpZW50SW5mbywgdGhpcy5jcnlwdG9VdGlscy5iYXNlNjREZWNvZGUpO1xyXG4gICAgICAgICAgICAgICAgY2NzQ3JlZCA9IHtcclxuICAgICAgICAgICAgICAgICAgICBjcmVkZW50aWFsOiBgJHtjbGllbnRJbmZvLnVpZH0ke1NlcGFyYXRvcnMuQ0xJRU5UX0lORk9fU0VQQVJBVE9SfSR7Y2xpZW50SW5mby51dGlkfWAsXHJcbiAgICAgICAgICAgICAgICAgICAgdHlwZTogQ2NzQ3JlZGVudGlhbFR5cGUuSE9NRV9BQ0NPVU5UX0lELFxyXG4gICAgICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBjYXRjaCAoZSkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5sb2dnZXIudmVyYm9zZShcIkNvdWxkIG5vdCBwYXJzZSBjbGllbnQgaW5mbyBmb3IgQ0NTIEhlYWRlcjogXCIgKyBlKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgY2NzQ3JlZCA9IHJlcXVlc3QuY2NzQ3JlZGVudGlhbDtcclxuICAgICAgICB9XHJcbiAgICAgICAgLy8gQWRkcyB0aGVzZSBhcyBwYXJhbWV0ZXJzIGluIHRoZSByZXF1ZXN0IGluc3RlYWQgb2YgaGVhZGVycyB0byBwcmV2ZW50IENPUlMgcHJlZmxpZ2h0IHJlcXVlc3RcclxuICAgICAgICBpZiAodGhpcy5jb25maWcuc3lzdGVtT3B0aW9ucy5wcmV2ZW50Q29yc1ByZWZsaWdodCAmJiBjY3NDcmVkKSB7XHJcbiAgICAgICAgICAgIHN3aXRjaCAoY2NzQ3JlZC50eXBlKSB7XHJcbiAgICAgICAgICAgICAgICBjYXNlIENjc0NyZWRlbnRpYWxUeXBlLkhPTUVfQUNDT1VOVF9JRDpcclxuICAgICAgICAgICAgICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjbGllbnRJbmZvID0gYnVpbGRDbGllbnRJbmZvRnJvbUhvbWVBY2NvdW50SWQoY2NzQ3JlZC5jcmVkZW50aWFsKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcGFyYW1ldGVyQnVpbGRlci5hZGRDY3NPaWQoY2xpZW50SW5mbyk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIGNhdGNoIChlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubG9nZ2VyLnZlcmJvc2UoXCJDb3VsZCBub3QgcGFyc2UgaG9tZSBhY2NvdW50IElEIGZvciBDQ1MgSGVhZGVyOiBcIiArXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICBjYXNlIENjc0NyZWRlbnRpYWxUeXBlLlVQTjpcclxuICAgICAgICAgICAgICAgICAgICBwYXJhbWV0ZXJCdWlsZGVyLmFkZENjc1VwbihjY3NDcmVkLmNyZWRlbnRpYWwpO1xyXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChyZXF1ZXN0LmVtYmVkZGVkQ2xpZW50SWQpIHtcclxuICAgICAgICAgICAgcGFyYW1ldGVyQnVpbGRlci5hZGRCcm9rZXJQYXJhbWV0ZXJzKHtcclxuICAgICAgICAgICAgICAgIGJyb2tlckNsaWVudElkOiB0aGlzLmNvbmZpZy5hdXRoT3B0aW9ucy5jbGllbnRJZCxcclxuICAgICAgICAgICAgICAgIGJyb2tlclJlZGlyZWN0VXJpOiB0aGlzLmNvbmZpZy5hdXRoT3B0aW9ucy5yZWRpcmVjdFVyaSxcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChyZXF1ZXN0LnRva2VuQm9keVBhcmFtZXRlcnMpIHtcclxuICAgICAgICAgICAgcGFyYW1ldGVyQnVpbGRlci5hZGRFeHRyYVF1ZXJ5UGFyYW1ldGVycyhyZXF1ZXN0LnRva2VuQm9keVBhcmFtZXRlcnMpO1xyXG4gICAgICAgIH1cclxuICAgICAgICAvLyBBZGQgaHlicmlkIHNwYSBwYXJhbWV0ZXJzIGlmIG5vdCBhbHJlYWR5IHByb3ZpZGVkXHJcbiAgICAgICAgaWYgKHJlcXVlc3QuZW5hYmxlU3BhQXV0aG9yaXphdGlvbkNvZGUgJiZcclxuICAgICAgICAgICAgKCFyZXF1ZXN0LnRva2VuQm9keVBhcmFtZXRlcnMgfHxcclxuICAgICAgICAgICAgICAgICFyZXF1ZXN0LnRva2VuQm9keVBhcmFtZXRlcnNbUkVUVVJOX1NQQV9DT0RFXSkpIHtcclxuICAgICAgICAgICAgcGFyYW1ldGVyQnVpbGRlci5hZGRFeHRyYVF1ZXJ5UGFyYW1ldGVycyh7XHJcbiAgICAgICAgICAgICAgICBbUkVUVVJOX1NQQV9DT0RFXTogXCIxXCIsXHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gcGFyYW1ldGVyQnVpbGRlci5jcmVhdGVRdWVyeVN0cmluZygpO1xyXG4gICAgfVxyXG4gICAgLyoqXHJcbiAgICAgKiBUaGlzIEFQSSB2YWxpZGF0ZXMgdGhlIGBBdXRob3JpemF0aW9uQ29kZVVybFJlcXVlc3RgIGFuZCBjcmVhdGVzIGEgVVJMXHJcbiAgICAgKiBAcGFyYW0gcmVxdWVzdFxyXG4gICAgICovXHJcbiAgICBhc3luYyBjcmVhdGVBdXRoQ29kZVVybFF1ZXJ5U3RyaW5nKHJlcXVlc3QpIHtcclxuICAgICAgICAvLyBnZW5lcmF0ZSB0aGUgY29ycmVsYXRpb25JZCBpZiBub3Qgc2V0IGJ5IHRoZSB1c2VyIGFuZCBhZGRcclxuICAgICAgICBjb25zdCBjb3JyZWxhdGlvbklkID0gcmVxdWVzdC5jb3JyZWxhdGlvbklkIHx8XHJcbiAgICAgICAgICAgIHRoaXMuY29uZmlnLmNyeXB0b0ludGVyZmFjZS5jcmVhdGVOZXdHdWlkKCk7XHJcbiAgICAgICAgdGhpcy5wZXJmb3JtYW5jZUNsaWVudD8uYWRkUXVldWVNZWFzdXJlbWVudChQZXJmb3JtYW5jZUV2ZW50cy5BdXRoQ2xpZW50Q3JlYXRlUXVlcnlTdHJpbmcsIGNvcnJlbGF0aW9uSWQpO1xyXG4gICAgICAgIGNvbnN0IHBhcmFtZXRlckJ1aWxkZXIgPSBuZXcgUmVxdWVzdFBhcmFtZXRlckJ1aWxkZXIoY29ycmVsYXRpb25JZCwgdGhpcy5wZXJmb3JtYW5jZUNsaWVudCk7XHJcbiAgICAgICAgcGFyYW1ldGVyQnVpbGRlci5hZGRDbGllbnRJZChyZXF1ZXN0LmVtYmVkZGVkQ2xpZW50SWQgfHxcclxuICAgICAgICAgICAgcmVxdWVzdC5leHRyYVF1ZXJ5UGFyYW1ldGVycz8uW0NMSUVOVF9JRF0gfHxcclxuICAgICAgICAgICAgdGhpcy5jb25maWcuYXV0aE9wdGlvbnMuY2xpZW50SWQpO1xyXG4gICAgICAgIGNvbnN0IHJlcXVlc3RTY29wZXMgPSBbXHJcbiAgICAgICAgICAgIC4uLihyZXF1ZXN0LnNjb3BlcyB8fCBbXSksXHJcbiAgICAgICAgICAgIC4uLihyZXF1ZXN0LmV4dHJhU2NvcGVzVG9Db25zZW50IHx8IFtdKSxcclxuICAgICAgICBdO1xyXG4gICAgICAgIHBhcmFtZXRlckJ1aWxkZXIuYWRkU2NvcGVzKHJlcXVlc3RTY29wZXMsIHRydWUsIHRoaXMub2lkY0RlZmF1bHRTY29wZXMpO1xyXG4gICAgICAgIC8vIHZhbGlkYXRlIHRoZSByZWRpcmVjdFVyaSAodG8gYmUgYSBub24gbnVsbCB2YWx1ZSlcclxuICAgICAgICBwYXJhbWV0ZXJCdWlsZGVyLmFkZFJlZGlyZWN0VXJpKHJlcXVlc3QucmVkaXJlY3RVcmkpO1xyXG4gICAgICAgIHBhcmFtZXRlckJ1aWxkZXIuYWRkQ29ycmVsYXRpb25JZChjb3JyZWxhdGlvbklkKTtcclxuICAgICAgICAvLyBhZGQgcmVzcG9uc2VfbW9kZS4gSWYgbm90IHBhc3NlZCBpbiBpdCBkZWZhdWx0cyB0byBxdWVyeS5cclxuICAgICAgICBwYXJhbWV0ZXJCdWlsZGVyLmFkZFJlc3BvbnNlTW9kZShyZXF1ZXN0LnJlc3BvbnNlTW9kZSk7XHJcbiAgICAgICAgLy8gYWRkIHJlc3BvbnNlX3R5cGUgPSBjb2RlXHJcbiAgICAgICAgcGFyYW1ldGVyQnVpbGRlci5hZGRSZXNwb25zZVR5cGVDb2RlKCk7XHJcbiAgICAgICAgLy8gYWRkIGxpYnJhcnkgaW5mbyBwYXJhbWV0ZXJzXHJcbiAgICAgICAgcGFyYW1ldGVyQnVpbGRlci5hZGRMaWJyYXJ5SW5mbyh0aGlzLmNvbmZpZy5saWJyYXJ5SW5mbyk7XHJcbiAgICAgICAgaWYgKCFpc09pZGNQcm90b2NvbE1vZGUodGhpcy5jb25maWcpKSB7XHJcbiAgICAgICAgICAgIHBhcmFtZXRlckJ1aWxkZXIuYWRkQXBwbGljYXRpb25UZWxlbWV0cnkodGhpcy5jb25maWcudGVsZW1ldHJ5LmFwcGxpY2F0aW9uKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgLy8gYWRkIGNsaWVudF9pbmZvPTFcclxuICAgICAgICBwYXJhbWV0ZXJCdWlsZGVyLmFkZENsaWVudEluZm8oKTtcclxuICAgICAgICBpZiAocmVxdWVzdC5jb2RlQ2hhbGxlbmdlICYmIHJlcXVlc3QuY29kZUNoYWxsZW5nZU1ldGhvZCkge1xyXG4gICAgICAgICAgICBwYXJhbWV0ZXJCdWlsZGVyLmFkZENvZGVDaGFsbGVuZ2VQYXJhbXMocmVxdWVzdC5jb2RlQ2hhbGxlbmdlLCByZXF1ZXN0LmNvZGVDaGFsbGVuZ2VNZXRob2QpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAocmVxdWVzdC5wcm9tcHQpIHtcclxuICAgICAgICAgICAgcGFyYW1ldGVyQnVpbGRlci5hZGRQcm9tcHQocmVxdWVzdC5wcm9tcHQpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAocmVxdWVzdC5kb21haW5IaW50KSB7XHJcbiAgICAgICAgICAgIHBhcmFtZXRlckJ1aWxkZXIuYWRkRG9tYWluSGludChyZXF1ZXN0LmRvbWFpbkhpbnQpO1xyXG4gICAgICAgIH1cclxuICAgICAgICAvLyBBZGQgc2lkIG9yIGxvZ2luSGludCB3aXRoIHByZWZlcmVuY2UgZm9yIGxvZ2luX2hpbnQgY2xhaW0gKGluIHJlcXVlc3QpIC0+IHNpZCAtPiBsb2dpbkhpbnQgKHVwbi9lbWFpbCkgLT4gdXNlcm5hbWUgb2YgQWNjb3VudEluZm8gb2JqZWN0XHJcbiAgICAgICAgaWYgKHJlcXVlc3QucHJvbXB0ICE9PSBQcm9tcHRWYWx1ZS5TRUxFQ1RfQUNDT1VOVCkge1xyXG4gICAgICAgICAgICAvLyBBQUQgd2lsbCB0aHJvdyBpZiBwcm9tcHQ9c2VsZWN0X2FjY291bnQgaXMgcGFzc2VkIHdpdGggYW4gYWNjb3VudCBoaW50XHJcbiAgICAgICAgICAgIGlmIChyZXF1ZXN0LnNpZCAmJiByZXF1ZXN0LnByb21wdCA9PT0gUHJvbXB0VmFsdWUuTk9ORSkge1xyXG4gICAgICAgICAgICAgICAgLy8gU2Vzc2lvbklEIGlzIG9ubHkgdXNlZCBpbiBzaWxlbnQgY2FsbHNcclxuICAgICAgICAgICAgICAgIHRoaXMubG9nZ2VyLnZlcmJvc2UoXCJjcmVhdGVBdXRoQ29kZVVybFF1ZXJ5U3RyaW5nOiBQcm9tcHQgaXMgbm9uZSwgYWRkaW5nIHNpZCBmcm9tIHJlcXVlc3RcIik7XHJcbiAgICAgICAgICAgICAgICBwYXJhbWV0ZXJCdWlsZGVyLmFkZFNpZChyZXF1ZXN0LnNpZCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSBpZiAocmVxdWVzdC5hY2NvdW50KSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBhY2NvdW50U2lkID0gdGhpcy5leHRyYWN0QWNjb3VudFNpZChyZXF1ZXN0LmFjY291bnQpO1xyXG4gICAgICAgICAgICAgICAgbGV0IGFjY291bnRMb2dpbkhpbnRDbGFpbSA9IHRoaXMuZXh0cmFjdExvZ2luSGludChyZXF1ZXN0LmFjY291bnQpO1xyXG4gICAgICAgICAgICAgICAgaWYgKGFjY291bnRMb2dpbkhpbnRDbGFpbSAmJiByZXF1ZXN0LmRvbWFpbkhpbnQpIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmxvZ2dlci53YXJuaW5nKGBBdXRob3JpemF0aW9uQ29kZUNsaWVudC5jcmVhdGVBdXRoQ29kZVVybFF1ZXJ5U3RyaW5nOiBcImRvbWFpbkhpbnRcIiBwYXJhbSBpcyBzZXQsIHNraXBwaW5nIG9wYXF1ZSBcImxvZ2luX2hpbnRcIiBjbGFpbS4gUGxlYXNlIGNvbnNpZGVyIG5vdCBwYXNzaW5nIGRvbWFpbkhpbnRgKTtcclxuICAgICAgICAgICAgICAgICAgICBhY2NvdW50TG9naW5IaW50Q2xhaW0gPSBudWxsO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgLy8gSWYgbG9naW5faGludCBjbGFpbSBpcyBwcmVzZW50LCB1c2UgaXQgb3ZlciBzaWQvdXNlcm5hbWVcclxuICAgICAgICAgICAgICAgIGlmIChhY2NvdW50TG9naW5IaW50Q2xhaW0pIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmxvZ2dlci52ZXJib3NlKFwiY3JlYXRlQXV0aENvZGVVcmxRdWVyeVN0cmluZzogbG9naW5faGludCBjbGFpbSBwcmVzZW50IG9uIGFjY291bnRcIik7XHJcbiAgICAgICAgICAgICAgICAgICAgcGFyYW1ldGVyQnVpbGRlci5hZGRMb2dpbkhpbnQoYWNjb3VudExvZ2luSGludENsYWltKTtcclxuICAgICAgICAgICAgICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjbGllbnRJbmZvID0gYnVpbGRDbGllbnRJbmZvRnJvbUhvbWVBY2NvdW50SWQocmVxdWVzdC5hY2NvdW50LmhvbWVBY2NvdW50SWQpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBwYXJhbWV0ZXJCdWlsZGVyLmFkZENjc09pZChjbGllbnRJbmZvKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgY2F0Y2ggKGUpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5sb2dnZXIudmVyYm9zZShcImNyZWF0ZUF1dGhDb2RlVXJsUXVlcnlTdHJpbmc6IENvdWxkIG5vdCBwYXJzZSBob21lIGFjY291bnQgSUQgZm9yIENDUyBIZWFkZXJcIik7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgZWxzZSBpZiAoYWNjb3VudFNpZCAmJiByZXF1ZXN0LnByb21wdCA9PT0gUHJvbXB0VmFsdWUuTk9ORSkge1xyXG4gICAgICAgICAgICAgICAgICAgIC8qXHJcbiAgICAgICAgICAgICAgICAgICAgICogSWYgYWNjb3VudCBhbmQgbG9naW5IaW50IGFyZSBwcm92aWRlZCwgd2Ugd2lsbCBjaGVjayBhY2NvdW50IGZpcnN0IGZvciBzaWQgYmVmb3JlIGFkZGluZyBsb2dpbkhpbnRcclxuICAgICAgICAgICAgICAgICAgICAgKiBTZXNzaW9uSWQgaXMgb25seSB1c2VkIGluIHNpbGVudCBjYWxsc1xyXG4gICAgICAgICAgICAgICAgICAgICAqL1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMubG9nZ2VyLnZlcmJvc2UoXCJjcmVhdGVBdXRoQ29kZVVybFF1ZXJ5U3RyaW5nOiBQcm9tcHQgaXMgbm9uZSwgYWRkaW5nIHNpZCBmcm9tIGFjY291bnRcIik7XHJcbiAgICAgICAgICAgICAgICAgICAgcGFyYW1ldGVyQnVpbGRlci5hZGRTaWQoYWNjb3VudFNpZCk7XHJcbiAgICAgICAgICAgICAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2xpZW50SW5mbyA9IGJ1aWxkQ2xpZW50SW5mb0Zyb21Ib21lQWNjb3VudElkKHJlcXVlc3QuYWNjb3VudC5ob21lQWNjb3VudElkKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcGFyYW1ldGVyQnVpbGRlci5hZGRDY3NPaWQoY2xpZW50SW5mbyk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIGNhdGNoIChlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubG9nZ2VyLnZlcmJvc2UoXCJjcmVhdGVBdXRoQ29kZVVybFF1ZXJ5U3RyaW5nOiBDb3VsZCBub3QgcGFyc2UgaG9tZSBhY2NvdW50IElEIGZvciBDQ1MgSGVhZGVyXCIpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGVsc2UgaWYgKHJlcXVlc3QubG9naW5IaW50KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5sb2dnZXIudmVyYm9zZShcImNyZWF0ZUF1dGhDb2RlVXJsUXVlcnlTdHJpbmc6IEFkZGluZyBsb2dpbl9oaW50IGZyb20gcmVxdWVzdFwiKTtcclxuICAgICAgICAgICAgICAgICAgICBwYXJhbWV0ZXJCdWlsZGVyLmFkZExvZ2luSGludChyZXF1ZXN0LmxvZ2luSGludCk7XHJcbiAgICAgICAgICAgICAgICAgICAgcGFyYW1ldGVyQnVpbGRlci5hZGRDY3NVcG4ocmVxdWVzdC5sb2dpbkhpbnQpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgZWxzZSBpZiAocmVxdWVzdC5hY2NvdW50LnVzZXJuYW1lKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgLy8gRmFsbGJhY2sgdG8gYWNjb3VudCB1c2VybmFtZSBpZiBwcm92aWRlZFxyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMubG9nZ2VyLnZlcmJvc2UoXCJjcmVhdGVBdXRoQ29kZVVybFF1ZXJ5U3RyaW5nOiBBZGRpbmcgbG9naW5faGludCBmcm9tIGFjY291bnRcIik7XHJcbiAgICAgICAgICAgICAgICAgICAgcGFyYW1ldGVyQnVpbGRlci5hZGRMb2dpbkhpbnQocmVxdWVzdC5hY2NvdW50LnVzZXJuYW1lKTtcclxuICAgICAgICAgICAgICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjbGllbnRJbmZvID0gYnVpbGRDbGllbnRJbmZvRnJvbUhvbWVBY2NvdW50SWQocmVxdWVzdC5hY2NvdW50LmhvbWVBY2NvdW50SWQpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBwYXJhbWV0ZXJCdWlsZGVyLmFkZENjc09pZChjbGllbnRJbmZvKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgY2F0Y2ggKGUpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5sb2dnZXIudmVyYm9zZShcImNyZWF0ZUF1dGhDb2RlVXJsUXVlcnlTdHJpbmc6IENvdWxkIG5vdCBwYXJzZSBob21lIGFjY291bnQgSUQgZm9yIENDUyBIZWFkZXJcIik7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2UgaWYgKHJlcXVlc3QubG9naW5IaW50KSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmxvZ2dlci52ZXJib3NlKFwiY3JlYXRlQXV0aENvZGVVcmxRdWVyeVN0cmluZzogTm8gYWNjb3VudCwgYWRkaW5nIGxvZ2luX2hpbnQgZnJvbSByZXF1ZXN0XCIpO1xyXG4gICAgICAgICAgICAgICAgcGFyYW1ldGVyQnVpbGRlci5hZGRMb2dpbkhpbnQocmVxdWVzdC5sb2dpbkhpbnQpO1xyXG4gICAgICAgICAgICAgICAgcGFyYW1ldGVyQnVpbGRlci5hZGRDY3NVcG4ocmVxdWVzdC5sb2dpbkhpbnQpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLmxvZ2dlci52ZXJib3NlKFwiY3JlYXRlQXV0aENvZGVVcmxRdWVyeVN0cmluZzogUHJvbXB0IGlzIHNlbGVjdF9hY2NvdW50LCBpZ25vcmluZyBhY2NvdW50IGhpbnRzXCIpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAocmVxdWVzdC5ub25jZSkge1xyXG4gICAgICAgICAgICBwYXJhbWV0ZXJCdWlsZGVyLmFkZE5vbmNlKHJlcXVlc3Qubm9uY2UpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAocmVxdWVzdC5zdGF0ZSkge1xyXG4gICAgICAgICAgICBwYXJhbWV0ZXJCdWlsZGVyLmFkZFN0YXRlKHJlcXVlc3Quc3RhdGUpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAocmVxdWVzdC5jbGFpbXMgfHxcclxuICAgICAgICAgICAgKHRoaXMuY29uZmlnLmF1dGhPcHRpb25zLmNsaWVudENhcGFiaWxpdGllcyAmJlxyXG4gICAgICAgICAgICAgICAgdGhpcy5jb25maWcuYXV0aE9wdGlvbnMuY2xpZW50Q2FwYWJpbGl0aWVzLmxlbmd0aCA+IDApKSB7XHJcbiAgICAgICAgICAgIHBhcmFtZXRlckJ1aWxkZXIuYWRkQ2xhaW1zKHJlcXVlc3QuY2xhaW1zLCB0aGlzLmNvbmZpZy5hdXRoT3B0aW9ucy5jbGllbnRDYXBhYmlsaXRpZXMpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAocmVxdWVzdC5lbWJlZGRlZENsaWVudElkKSB7XHJcbiAgICAgICAgICAgIHBhcmFtZXRlckJ1aWxkZXIuYWRkQnJva2VyUGFyYW1ldGVycyh7XHJcbiAgICAgICAgICAgICAgICBicm9rZXJDbGllbnRJZDogdGhpcy5jb25maWcuYXV0aE9wdGlvbnMuY2xpZW50SWQsXHJcbiAgICAgICAgICAgICAgICBicm9rZXJSZWRpcmVjdFVyaTogdGhpcy5jb25maWcuYXV0aE9wdGlvbnMucmVkaXJlY3RVcmksXHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLmFkZEV4dHJhUXVlcnlQYXJhbXMocmVxdWVzdCwgcGFyYW1ldGVyQnVpbGRlcik7XHJcbiAgICAgICAgaWYgKHJlcXVlc3QubmF0aXZlQnJva2VyKSB7XHJcbiAgICAgICAgICAgIC8vIHNpZ25hbCBlc3RzIHRoYXQgdGhpcyBpcyBhIFdBTSBjYWxsXHJcbiAgICAgICAgICAgIHBhcmFtZXRlckJ1aWxkZXIuYWRkTmF0aXZlQnJva2VyKCk7XHJcbiAgICAgICAgICAgIC8vIHBhc3MgdGhlIHJlcV9jbmYgZm9yIFBPUFxyXG4gICAgICAgICAgICBpZiAocmVxdWVzdC5hdXRoZW50aWNhdGlvblNjaGVtZSA9PT0gQXV0aGVudGljYXRpb25TY2hlbWUuUE9QKSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBwb3BUb2tlbkdlbmVyYXRvciA9IG5ldyBQb3BUb2tlbkdlbmVyYXRvcih0aGlzLmNyeXB0b1V0aWxzKTtcclxuICAgICAgICAgICAgICAgIC8vIHJlcV9jbmYgaXMgYWx3YXlzIHNlbnQgYXMgYSBzdHJpbmcgZm9yIFNQQXNcclxuICAgICAgICAgICAgICAgIGxldCByZXFDbmZEYXRhO1xyXG4gICAgICAgICAgICAgICAgaWYgKCFyZXF1ZXN0LnBvcEtpZCkge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGdlbmVyYXRlZFJlcUNuZkRhdGEgPSBhd2FpdCBpbnZva2VBc3luYyhwb3BUb2tlbkdlbmVyYXRvci5nZW5lcmF0ZUNuZi5iaW5kKHBvcFRva2VuR2VuZXJhdG9yKSwgUGVyZm9ybWFuY2VFdmVudHMuUG9wVG9rZW5HZW5lcmF0ZUNuZiwgdGhpcy5sb2dnZXIsIHRoaXMucGVyZm9ybWFuY2VDbGllbnQsIHJlcXVlc3QuY29ycmVsYXRpb25JZCkocmVxdWVzdCwgdGhpcy5sb2dnZXIpO1xyXG4gICAgICAgICAgICAgICAgICAgIHJlcUNuZkRhdGEgPSBnZW5lcmF0ZWRSZXFDbmZEYXRhLnJlcUNuZlN0cmluZztcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIHJlcUNuZkRhdGEgPSB0aGlzLmNyeXB0b1V0aWxzLmVuY29kZUtpZChyZXF1ZXN0LnBvcEtpZCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBwYXJhbWV0ZXJCdWlsZGVyLmFkZFBvcFRva2VuKHJlcUNuZkRhdGEpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBwYXJhbWV0ZXJCdWlsZGVyLmNyZWF0ZVF1ZXJ5U3RyaW5nKCk7XHJcbiAgICB9XHJcbiAgICAvKipcclxuICAgICAqIFRoaXMgQVBJIHZhbGlkYXRlcyB0aGUgYEVuZFNlc3Npb25SZXF1ZXN0YCBhbmQgY3JlYXRlcyBhIFVSTFxyXG4gICAgICogQHBhcmFtIHJlcXVlc3RcclxuICAgICAqL1xyXG4gICAgY3JlYXRlTG9nb3V0VXJsUXVlcnlTdHJpbmcocmVxdWVzdCkge1xyXG4gICAgICAgIGNvbnN0IHBhcmFtZXRlckJ1aWxkZXIgPSBuZXcgUmVxdWVzdFBhcmFtZXRlckJ1aWxkZXIocmVxdWVzdC5jb3JyZWxhdGlvbklkLCB0aGlzLnBlcmZvcm1hbmNlQ2xpZW50KTtcclxuICAgICAgICBpZiAocmVxdWVzdC5wb3N0TG9nb3V0UmVkaXJlY3RVcmkpIHtcclxuICAgICAgICAgICAgcGFyYW1ldGVyQnVpbGRlci5hZGRQb3N0TG9nb3V0UmVkaXJlY3RVcmkocmVxdWVzdC5wb3N0TG9nb3V0UmVkaXJlY3RVcmkpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAocmVxdWVzdC5jb3JyZWxhdGlvbklkKSB7XHJcbiAgICAgICAgICAgIHBhcmFtZXRlckJ1aWxkZXIuYWRkQ29ycmVsYXRpb25JZChyZXF1ZXN0LmNvcnJlbGF0aW9uSWQpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAocmVxdWVzdC5pZFRva2VuSGludCkge1xyXG4gICAgICAgICAgICBwYXJhbWV0ZXJCdWlsZGVyLmFkZElkVG9rZW5IaW50KHJlcXVlc3QuaWRUb2tlbkhpbnQpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAocmVxdWVzdC5zdGF0ZSkge1xyXG4gICAgICAgICAgICBwYXJhbWV0ZXJCdWlsZGVyLmFkZFN0YXRlKHJlcXVlc3Quc3RhdGUpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAocmVxdWVzdC5sb2dvdXRIaW50KSB7XHJcbiAgICAgICAgICAgIHBhcmFtZXRlckJ1aWxkZXIuYWRkTG9nb3V0SGludChyZXF1ZXN0LmxvZ291dEhpbnQpO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLmFkZEV4dHJhUXVlcnlQYXJhbXMocmVxdWVzdCwgcGFyYW1ldGVyQnVpbGRlcik7XHJcbiAgICAgICAgcmV0dXJuIHBhcmFtZXRlckJ1aWxkZXIuY3JlYXRlUXVlcnlTdHJpbmcoKTtcclxuICAgIH1cclxuICAgIGFkZEV4dHJhUXVlcnlQYXJhbXMocmVxdWVzdCwgcGFyYW1ldGVyQnVpbGRlcikge1xyXG4gICAgICAgIGNvbnN0IGhhc1JlcXVlc3RJbnN0YW5jZUF3YXJlID0gcmVxdWVzdC5leHRyYVF1ZXJ5UGFyYW1ldGVycyAmJlxyXG4gICAgICAgICAgICByZXF1ZXN0LmV4dHJhUXVlcnlQYXJhbWV0ZXJzLmhhc093blByb3BlcnR5KFwiaW5zdGFuY2VfYXdhcmVcIik7XHJcbiAgICAgICAgLy8gU2V0IGluc3RhbmNlX2F3YXJlIGZsYWcgaWYgY29uZmlnIGF1dGggcGFyYW0gaXMgc2V0XHJcbiAgICAgICAgaWYgKCFoYXNSZXF1ZXN0SW5zdGFuY2VBd2FyZSAmJiB0aGlzLmNvbmZpZy5hdXRoT3B0aW9ucy5pbnN0YW5jZUF3YXJlKSB7XHJcbiAgICAgICAgICAgIHJlcXVlc3QuZXh0cmFRdWVyeVBhcmFtZXRlcnMgPSByZXF1ZXN0LmV4dHJhUXVlcnlQYXJhbWV0ZXJzIHx8IHt9O1xyXG4gICAgICAgICAgICByZXF1ZXN0LmV4dHJhUXVlcnlQYXJhbWV0ZXJzW1wiaW5zdGFuY2VfYXdhcmVcIl0gPSBcInRydWVcIjtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHJlcXVlc3QuZXh0cmFRdWVyeVBhcmFtZXRlcnMpIHtcclxuICAgICAgICAgICAgcGFyYW1ldGVyQnVpbGRlci5hZGRFeHRyYVF1ZXJ5UGFyYW1ldGVycyhyZXF1ZXN0LmV4dHJhUXVlcnlQYXJhbWV0ZXJzKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICAvKipcclxuICAgICAqIEhlbHBlciB0byBnZXQgc2lkIGZyb20gYWNjb3VudC4gUmV0dXJucyBudWxsIGlmIGlkVG9rZW5DbGFpbXMgYXJlIG5vdCBwcmVzZW50IG9yIHNpZCBpcyBub3QgcHJlc2VudC5cclxuICAgICAqIEBwYXJhbSBhY2NvdW50XHJcbiAgICAgKi9cclxuICAgIGV4dHJhY3RBY2NvdW50U2lkKGFjY291bnQpIHtcclxuICAgICAgICByZXR1cm4gYWNjb3VudC5pZFRva2VuQ2xhaW1zPy5zaWQgfHwgbnVsbDtcclxuICAgIH1cclxuICAgIGV4dHJhY3RMb2dpbkhpbnQoYWNjb3VudCkge1xyXG4gICAgICAgIHJldHVybiBhY2NvdW50LmlkVG9rZW5DbGFpbXM/LmxvZ2luX2hpbnQgfHwgbnVsbDtcclxuICAgIH1cclxufVxuXG5leHBvcnQgeyBBdXRob3JpemF0aW9uQ29kZUNsaWVudCB9O1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9QXV0aG9yaXphdGlvbkNvZGVDbGllbnQubWpzLm1hcFxuIiwiLyohIEBhenVyZS9tc2FsLWNvbW1vbiB2MTQuMTYuMCAyMDI0LTExLTA1ICovXG4ndXNlIHN0cmljdCc7XG5pbXBvcnQgeyBDYWNoZU91dGNvbWUsIENvbnN0YW50cywgU0VSVkVSX1RFTEVNX0NPTlNUQU5UUywgU2VwYXJhdG9ycyB9IGZyb20gJy4uLy4uL3V0aWxzL0NvbnN0YW50cy5tanMnO1xuaW1wb3J0IHsgQXV0aEVycm9yIH0gZnJvbSAnLi4vLi4vZXJyb3IvQXV0aEVycm9yLm1qcyc7XG5cbi8qXHJcbiAqIENvcHlyaWdodCAoYykgTWljcm9zb2Z0IENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLlxyXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgTUlUIExpY2Vuc2UuXHJcbiAqL1xyXG5jb25zdCBza3VHcm91cFNlcGFyYXRvciA9IFwiLFwiO1xyXG5jb25zdCBza3VWYWx1ZVNlcGFyYXRvciA9IFwifFwiO1xyXG5mdW5jdGlvbiBtYWtlRXh0cmFTa3VTdHJpbmcocGFyYW1zKSB7XHJcbiAgICBjb25zdCB7IHNrdXMsIGxpYnJhcnlOYW1lLCBsaWJyYXJ5VmVyc2lvbiwgZXh0ZW5zaW9uTmFtZSwgZXh0ZW5zaW9uVmVyc2lvbiwgfSA9IHBhcmFtcztcclxuICAgIGNvbnN0IHNrdU1hcCA9IG5ldyBNYXAoW1xyXG4gICAgICAgIFswLCBbbGlicmFyeU5hbWUsIGxpYnJhcnlWZXJzaW9uXV0sXHJcbiAgICAgICAgWzIsIFtleHRlbnNpb25OYW1lLCBleHRlbnNpb25WZXJzaW9uXV0sXHJcbiAgICBdKTtcclxuICAgIGxldCBza3VBcnIgPSBbXTtcclxuICAgIGlmIChza3VzPy5sZW5ndGgpIHtcclxuICAgICAgICBza3VBcnIgPSBza3VzLnNwbGl0KHNrdUdyb3VwU2VwYXJhdG9yKTtcclxuICAgICAgICAvLyBJZ25vcmUgaW52YWxpZCBpbnB1dCBza3UgcGFyYW1cclxuICAgICAgICBpZiAoc2t1QXJyLmxlbmd0aCA8IDQpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHNrdXM7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcbiAgICAgICAgc2t1QXJyID0gQXJyYXkuZnJvbSh7IGxlbmd0aDogNCB9LCAoKSA9PiBza3VWYWx1ZVNlcGFyYXRvcik7XHJcbiAgICB9XHJcbiAgICBza3VNYXAuZm9yRWFjaCgodmFsdWUsIGtleSkgPT4ge1xyXG4gICAgICAgIGlmICh2YWx1ZS5sZW5ndGggPT09IDIgJiYgdmFsdWVbMF0/Lmxlbmd0aCAmJiB2YWx1ZVsxXT8ubGVuZ3RoKSB7XHJcbiAgICAgICAgICAgIHNldFNrdSh7XHJcbiAgICAgICAgICAgICAgICBza3VBcnIsXHJcbiAgICAgICAgICAgICAgICBpbmRleDoga2V5LFxyXG4gICAgICAgICAgICAgICAgc2t1TmFtZTogdmFsdWVbMF0sXHJcbiAgICAgICAgICAgICAgICBza3VWZXJzaW9uOiB2YWx1ZVsxXSxcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgfSk7XHJcbiAgICByZXR1cm4gc2t1QXJyLmpvaW4oc2t1R3JvdXBTZXBhcmF0b3IpO1xyXG59XHJcbmZ1bmN0aW9uIHNldFNrdShwYXJhbXMpIHtcclxuICAgIGNvbnN0IHsgc2t1QXJyLCBpbmRleCwgc2t1TmFtZSwgc2t1VmVyc2lvbiB9ID0gcGFyYW1zO1xyXG4gICAgaWYgKGluZGV4ID49IHNrdUFyci5sZW5ndGgpIHtcclxuICAgICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICBza3VBcnJbaW5kZXhdID0gW3NrdU5hbWUsIHNrdVZlcnNpb25dLmpvaW4oc2t1VmFsdWVTZXBhcmF0b3IpO1xyXG59XHJcbi8qKiBAaW50ZXJuYWwgKi9cclxuY2xhc3MgU2VydmVyVGVsZW1ldHJ5TWFuYWdlciB7XHJcbiAgICBjb25zdHJ1Y3Rvcih0ZWxlbWV0cnlSZXF1ZXN0LCBjYWNoZU1hbmFnZXIpIHtcclxuICAgICAgICB0aGlzLmNhY2hlT3V0Y29tZSA9IENhY2hlT3V0Y29tZS5OT1RfQVBQTElDQUJMRTtcclxuICAgICAgICB0aGlzLmNhY2hlTWFuYWdlciA9IGNhY2hlTWFuYWdlcjtcclxuICAgICAgICB0aGlzLmFwaUlkID0gdGVsZW1ldHJ5UmVxdWVzdC5hcGlJZDtcclxuICAgICAgICB0aGlzLmNvcnJlbGF0aW9uSWQgPSB0ZWxlbWV0cnlSZXF1ZXN0LmNvcnJlbGF0aW9uSWQ7XHJcbiAgICAgICAgdGhpcy53cmFwcGVyU0tVID0gdGVsZW1ldHJ5UmVxdWVzdC53cmFwcGVyU0tVIHx8IENvbnN0YW50cy5FTVBUWV9TVFJJTkc7XHJcbiAgICAgICAgdGhpcy53cmFwcGVyVmVyID0gdGVsZW1ldHJ5UmVxdWVzdC53cmFwcGVyVmVyIHx8IENvbnN0YW50cy5FTVBUWV9TVFJJTkc7XHJcbiAgICAgICAgdGhpcy50ZWxlbWV0cnlDYWNoZUtleSA9XHJcbiAgICAgICAgICAgIFNFUlZFUl9URUxFTV9DT05TVEFOVFMuQ0FDSEVfS0VZICtcclxuICAgICAgICAgICAgICAgIFNlcGFyYXRvcnMuQ0FDSEVfS0VZX1NFUEFSQVRPUiArXHJcbiAgICAgICAgICAgICAgICB0ZWxlbWV0cnlSZXF1ZXN0LmNsaWVudElkO1xyXG4gICAgfVxyXG4gICAgLyoqXHJcbiAgICAgKiBBUEkgdG8gYWRkIE1TRVIgVGVsZW1ldHJ5IHRvIHJlcXVlc3RcclxuICAgICAqL1xyXG4gICAgZ2VuZXJhdGVDdXJyZW50UmVxdWVzdEhlYWRlclZhbHVlKCkge1xyXG4gICAgICAgIGNvbnN0IHJlcXVlc3QgPSBgJHt0aGlzLmFwaUlkfSR7U0VSVkVSX1RFTEVNX0NPTlNUQU5UUy5WQUxVRV9TRVBBUkFUT1J9JHt0aGlzLmNhY2hlT3V0Y29tZX1gO1xyXG4gICAgICAgIGNvbnN0IHBsYXRmb3JtRmllbGRzQXJyID0gW3RoaXMud3JhcHBlclNLVSwgdGhpcy53cmFwcGVyVmVyXTtcclxuICAgICAgICBjb25zdCBuYXRpdmVCcm9rZXJFcnJvckNvZGUgPSB0aGlzLmdldE5hdGl2ZUJyb2tlckVycm9yQ29kZSgpO1xyXG4gICAgICAgIGlmIChuYXRpdmVCcm9rZXJFcnJvckNvZGU/Lmxlbmd0aCkge1xyXG4gICAgICAgICAgICBwbGF0Zm9ybUZpZWxkc0Fyci5wdXNoKGBicm9rZXJfZXJyb3I9JHtuYXRpdmVCcm9rZXJFcnJvckNvZGV9YCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNvbnN0IHBsYXRmb3JtRmllbGRzID0gcGxhdGZvcm1GaWVsZHNBcnIuam9pbihTRVJWRVJfVEVMRU1fQ09OU1RBTlRTLlZBTFVFX1NFUEFSQVRPUik7XHJcbiAgICAgICAgY29uc3QgcmVnaW9uRGlzY292ZXJ5RmllbGRzID0gdGhpcy5nZXRSZWdpb25EaXNjb3ZlcnlGaWVsZHMoKTtcclxuICAgICAgICBjb25zdCByZXF1ZXN0V2l0aFJlZ2lvbkRpc2NvdmVyeUZpZWxkcyA9IFtcclxuICAgICAgICAgICAgcmVxdWVzdCxcclxuICAgICAgICAgICAgcmVnaW9uRGlzY292ZXJ5RmllbGRzLFxyXG4gICAgICAgIF0uam9pbihTRVJWRVJfVEVMRU1fQ09OU1RBTlRTLlZBTFVFX1NFUEFSQVRPUik7XHJcbiAgICAgICAgcmV0dXJuIFtcclxuICAgICAgICAgICAgU0VSVkVSX1RFTEVNX0NPTlNUQU5UUy5TQ0hFTUFfVkVSU0lPTixcclxuICAgICAgICAgICAgcmVxdWVzdFdpdGhSZWdpb25EaXNjb3ZlcnlGaWVsZHMsXHJcbiAgICAgICAgICAgIHBsYXRmb3JtRmllbGRzLFxyXG4gICAgICAgIF0uam9pbihTRVJWRVJfVEVMRU1fQ09OU1RBTlRTLkNBVEVHT1JZX1NFUEFSQVRPUik7XHJcbiAgICB9XHJcbiAgICAvKipcclxuICAgICAqIEFQSSB0byBhZGQgTVNFUiBUZWxlbWV0cnkgZm9yIHRoZSBsYXN0IGZhaWxlZCByZXF1ZXN0XHJcbiAgICAgKi9cclxuICAgIGdlbmVyYXRlTGFzdFJlcXVlc3RIZWFkZXJWYWx1ZSgpIHtcclxuICAgICAgICBjb25zdCBsYXN0UmVxdWVzdHMgPSB0aGlzLmdldExhc3RSZXF1ZXN0cygpO1xyXG4gICAgICAgIGNvbnN0IG1heEVycm9ycyA9IFNlcnZlclRlbGVtZXRyeU1hbmFnZXIubWF4RXJyb3JzVG9TZW5kKGxhc3RSZXF1ZXN0cyk7XHJcbiAgICAgICAgY29uc3QgZmFpbGVkUmVxdWVzdHMgPSBsYXN0UmVxdWVzdHMuZmFpbGVkUmVxdWVzdHNcclxuICAgICAgICAgICAgLnNsaWNlKDAsIDIgKiBtYXhFcnJvcnMpXHJcbiAgICAgICAgICAgIC5qb2luKFNFUlZFUl9URUxFTV9DT05TVEFOVFMuVkFMVUVfU0VQQVJBVE9SKTtcclxuICAgICAgICBjb25zdCBlcnJvcnMgPSBsYXN0UmVxdWVzdHMuZXJyb3JzXHJcbiAgICAgICAgICAgIC5zbGljZSgwLCBtYXhFcnJvcnMpXHJcbiAgICAgICAgICAgIC5qb2luKFNFUlZFUl9URUxFTV9DT05TVEFOVFMuVkFMVUVfU0VQQVJBVE9SKTtcclxuICAgICAgICBjb25zdCBlcnJvckNvdW50ID0gbGFzdFJlcXVlc3RzLmVycm9ycy5sZW5ndGg7XHJcbiAgICAgICAgLy8gSW5kaWNhdGUgd2hldGhlciB0aGlzIGhlYWRlciBjb250YWlucyBhbGwgZGF0YSBvciBwYXJ0aWFsIGRhdGFcclxuICAgICAgICBjb25zdCBvdmVyZmxvdyA9IG1heEVycm9ycyA8IGVycm9yQ291bnRcclxuICAgICAgICAgICAgPyBTRVJWRVJfVEVMRU1fQ09OU1RBTlRTLk9WRVJGTE9XX1RSVUVcclxuICAgICAgICAgICAgOiBTRVJWRVJfVEVMRU1fQ09OU1RBTlRTLk9WRVJGTE9XX0ZBTFNFO1xyXG4gICAgICAgIGNvbnN0IHBsYXRmb3JtRmllbGRzID0gW2Vycm9yQ291bnQsIG92ZXJmbG93XS5qb2luKFNFUlZFUl9URUxFTV9DT05TVEFOVFMuVkFMVUVfU0VQQVJBVE9SKTtcclxuICAgICAgICByZXR1cm4gW1xyXG4gICAgICAgICAgICBTRVJWRVJfVEVMRU1fQ09OU1RBTlRTLlNDSEVNQV9WRVJTSU9OLFxyXG4gICAgICAgICAgICBsYXN0UmVxdWVzdHMuY2FjaGVIaXRzLFxyXG4gICAgICAgICAgICBmYWlsZWRSZXF1ZXN0cyxcclxuICAgICAgICAgICAgZXJyb3JzLFxyXG4gICAgICAgICAgICBwbGF0Zm9ybUZpZWxkcyxcclxuICAgICAgICBdLmpvaW4oU0VSVkVSX1RFTEVNX0NPTlNUQU5UUy5DQVRFR09SWV9TRVBBUkFUT1IpO1xyXG4gICAgfVxyXG4gICAgLyoqXHJcbiAgICAgKiBBUEkgdG8gY2FjaGUgdG9rZW4gZmFpbHVyZXMgZm9yIE1TRVIgZGF0YSBjYXB0dXJlXHJcbiAgICAgKiBAcGFyYW0gZXJyb3JcclxuICAgICAqL1xyXG4gICAgY2FjaGVGYWlsZWRSZXF1ZXN0KGVycm9yKSB7XHJcbiAgICAgICAgY29uc3QgbGFzdFJlcXVlc3RzID0gdGhpcy5nZXRMYXN0UmVxdWVzdHMoKTtcclxuICAgICAgICBpZiAobGFzdFJlcXVlc3RzLmVycm9ycy5sZW5ndGggPj1cclxuICAgICAgICAgICAgU0VSVkVSX1RFTEVNX0NPTlNUQU5UUy5NQVhfQ0FDSEVEX0VSUk9SUykge1xyXG4gICAgICAgICAgICAvLyBSZW1vdmUgYSBjYWNoZWQgZXJyb3IgdG8gbWFrZSByb29tLCBmaXJzdCBpbiBmaXJzdCBvdXRcclxuICAgICAgICAgICAgbGFzdFJlcXVlc3RzLmZhaWxlZFJlcXVlc3RzLnNoaWZ0KCk7IC8vIGFwaUlkXHJcbiAgICAgICAgICAgIGxhc3RSZXF1ZXN0cy5mYWlsZWRSZXF1ZXN0cy5zaGlmdCgpOyAvLyBjb3JyZWxhdGlvbklkXHJcbiAgICAgICAgICAgIGxhc3RSZXF1ZXN0cy5lcnJvcnMuc2hpZnQoKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgbGFzdFJlcXVlc3RzLmZhaWxlZFJlcXVlc3RzLnB1c2godGhpcy5hcGlJZCwgdGhpcy5jb3JyZWxhdGlvbklkKTtcclxuICAgICAgICBpZiAoZXJyb3IgaW5zdGFuY2VvZiBFcnJvciAmJiAhIWVycm9yICYmIGVycm9yLnRvU3RyaW5nKCkpIHtcclxuICAgICAgICAgICAgaWYgKGVycm9yIGluc3RhbmNlb2YgQXV0aEVycm9yKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoZXJyb3Iuc3ViRXJyb3IpIHtcclxuICAgICAgICAgICAgICAgICAgICBsYXN0UmVxdWVzdHMuZXJyb3JzLnB1c2goZXJyb3Iuc3ViRXJyb3IpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgZWxzZSBpZiAoZXJyb3IuZXJyb3JDb2RlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgbGFzdFJlcXVlc3RzLmVycm9ycy5wdXNoKGVycm9yLmVycm9yQ29kZSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICBsYXN0UmVxdWVzdHMuZXJyb3JzLnB1c2goZXJyb3IudG9TdHJpbmcoKSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBsYXN0UmVxdWVzdHMuZXJyb3JzLnB1c2goZXJyb3IudG9TdHJpbmcoKSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIGxhc3RSZXF1ZXN0cy5lcnJvcnMucHVzaChTRVJWRVJfVEVMRU1fQ09OU1RBTlRTLlVOS05PV05fRVJST1IpO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLmNhY2hlTWFuYWdlci5zZXRTZXJ2ZXJUZWxlbWV0cnkodGhpcy50ZWxlbWV0cnlDYWNoZUtleSwgbGFzdFJlcXVlc3RzKTtcclxuICAgICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICAvKipcclxuICAgICAqIFVwZGF0ZSBzZXJ2ZXIgdGVsZW1ldHJ5IGNhY2hlIGVudHJ5IGJ5IGluY3JlbWVudGluZyBjYWNoZSBoaXQgY291bnRlclxyXG4gICAgICovXHJcbiAgICBpbmNyZW1lbnRDYWNoZUhpdHMoKSB7XHJcbiAgICAgICAgY29uc3QgbGFzdFJlcXVlc3RzID0gdGhpcy5nZXRMYXN0UmVxdWVzdHMoKTtcclxuICAgICAgICBsYXN0UmVxdWVzdHMuY2FjaGVIaXRzICs9IDE7XHJcbiAgICAgICAgdGhpcy5jYWNoZU1hbmFnZXIuc2V0U2VydmVyVGVsZW1ldHJ5KHRoaXMudGVsZW1ldHJ5Q2FjaGVLZXksIGxhc3RSZXF1ZXN0cyk7XHJcbiAgICAgICAgcmV0dXJuIGxhc3RSZXF1ZXN0cy5jYWNoZUhpdHM7XHJcbiAgICB9XHJcbiAgICAvKipcclxuICAgICAqIEdldCB0aGUgc2VydmVyIHRlbGVtZXRyeSBlbnRpdHkgZnJvbSBjYWNoZSBvciBpbml0aWFsaXplIGEgbmV3IG9uZVxyXG4gICAgICovXHJcbiAgICBnZXRMYXN0UmVxdWVzdHMoKSB7XHJcbiAgICAgICAgY29uc3QgaW5pdGlhbFZhbHVlID0ge1xyXG4gICAgICAgICAgICBmYWlsZWRSZXF1ZXN0czogW10sXHJcbiAgICAgICAgICAgIGVycm9yczogW10sXHJcbiAgICAgICAgICAgIGNhY2hlSGl0czogMCxcclxuICAgICAgICB9O1xyXG4gICAgICAgIGNvbnN0IGxhc3RSZXF1ZXN0cyA9IHRoaXMuY2FjaGVNYW5hZ2VyLmdldFNlcnZlclRlbGVtZXRyeSh0aGlzLnRlbGVtZXRyeUNhY2hlS2V5KTtcclxuICAgICAgICByZXR1cm4gbGFzdFJlcXVlc3RzIHx8IGluaXRpYWxWYWx1ZTtcclxuICAgIH1cclxuICAgIC8qKlxyXG4gICAgICogUmVtb3ZlIHNlcnZlciB0ZWxlbWV0cnkgY2FjaGUgZW50cnlcclxuICAgICAqL1xyXG4gICAgY2xlYXJUZWxlbWV0cnlDYWNoZSgpIHtcclxuICAgICAgICBjb25zdCBsYXN0UmVxdWVzdHMgPSB0aGlzLmdldExhc3RSZXF1ZXN0cygpO1xyXG4gICAgICAgIGNvbnN0IG51bUVycm9yc0ZsdXNoZWQgPSBTZXJ2ZXJUZWxlbWV0cnlNYW5hZ2VyLm1heEVycm9yc1RvU2VuZChsYXN0UmVxdWVzdHMpO1xyXG4gICAgICAgIGNvbnN0IGVycm9yQ291bnQgPSBsYXN0UmVxdWVzdHMuZXJyb3JzLmxlbmd0aDtcclxuICAgICAgICBpZiAobnVtRXJyb3JzRmx1c2hlZCA9PT0gZXJyb3JDb3VudCkge1xyXG4gICAgICAgICAgICAvLyBBbGwgZXJyb3JzIHdlcmUgc2VudCBvbiBsYXN0IHJlcXVlc3QsIGNsZWFyIFRlbGVtZXRyeSBjYWNoZVxyXG4gICAgICAgICAgICB0aGlzLmNhY2hlTWFuYWdlci5yZW1vdmVJdGVtKHRoaXMudGVsZW1ldHJ5Q2FjaGVLZXkpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgLy8gUGFydGlhbCBkYXRhIHdhcyBmbHVzaGVkIHRvIHNlcnZlciwgY29uc3RydWN0IGEgbmV3IHRlbGVtZXRyeSBjYWNoZSBpdGVtIHdpdGggZXJyb3JzIHRoYXQgd2VyZSBub3QgZmx1c2hlZFxyXG4gICAgICAgICAgICBjb25zdCBzZXJ2ZXJUZWxlbUVudGl0eSA9IHtcclxuICAgICAgICAgICAgICAgIGZhaWxlZFJlcXVlc3RzOiBsYXN0UmVxdWVzdHMuZmFpbGVkUmVxdWVzdHMuc2xpY2UobnVtRXJyb3JzRmx1c2hlZCAqIDIpLFxyXG4gICAgICAgICAgICAgICAgZXJyb3JzOiBsYXN0UmVxdWVzdHMuZXJyb3JzLnNsaWNlKG51bUVycm9yc0ZsdXNoZWQpLFxyXG4gICAgICAgICAgICAgICAgY2FjaGVIaXRzOiAwLFxyXG4gICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICB0aGlzLmNhY2hlTWFuYWdlci5zZXRTZXJ2ZXJUZWxlbWV0cnkodGhpcy50ZWxlbWV0cnlDYWNoZUtleSwgc2VydmVyVGVsZW1FbnRpdHkpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIC8qKlxyXG4gICAgICogUmV0dXJucyB0aGUgbWF4aW11bSBudW1iZXIgb2YgZXJyb3JzIHRoYXQgY2FuIGJlIGZsdXNoZWQgdG8gdGhlIHNlcnZlciBpbiB0aGUgbmV4dCBuZXR3b3JrIHJlcXVlc3RcclxuICAgICAqIEBwYXJhbSBzZXJ2ZXJUZWxlbWV0cnlFbnRpdHlcclxuICAgICAqL1xyXG4gICAgc3RhdGljIG1heEVycm9yc1RvU2VuZChzZXJ2ZXJUZWxlbWV0cnlFbnRpdHkpIHtcclxuICAgICAgICBsZXQgaTtcclxuICAgICAgICBsZXQgbWF4RXJyb3JzID0gMDtcclxuICAgICAgICBsZXQgZGF0YVNpemUgPSAwO1xyXG4gICAgICAgIGNvbnN0IGVycm9yQ291bnQgPSBzZXJ2ZXJUZWxlbWV0cnlFbnRpdHkuZXJyb3JzLmxlbmd0aDtcclxuICAgICAgICBmb3IgKGkgPSAwOyBpIDwgZXJyb3JDb3VudDsgaSsrKSB7XHJcbiAgICAgICAgICAgIC8vIGZhaWxlZFJlcXVlc3RzIHBhcmFtZXRlciBjb250YWlucyBwYWlycyBvZiBhcGlJZCBhbmQgY29ycmVsYXRpb25JZCwgbXVsdGlwbHkgaW5kZXggYnkgMiB0byBwcmVzZXJ2ZSBwYWlyc1xyXG4gICAgICAgICAgICBjb25zdCBhcGlJZCA9IHNlcnZlclRlbGVtZXRyeUVudGl0eS5mYWlsZWRSZXF1ZXN0c1syICogaV0gfHxcclxuICAgICAgICAgICAgICAgIENvbnN0YW50cy5FTVBUWV9TVFJJTkc7XHJcbiAgICAgICAgICAgIGNvbnN0IGNvcnJlbGF0aW9uSWQgPSBzZXJ2ZXJUZWxlbWV0cnlFbnRpdHkuZmFpbGVkUmVxdWVzdHNbMiAqIGkgKyAxXSB8fFxyXG4gICAgICAgICAgICAgICAgQ29uc3RhbnRzLkVNUFRZX1NUUklORztcclxuICAgICAgICAgICAgY29uc3QgZXJyb3JDb2RlID0gc2VydmVyVGVsZW1ldHJ5RW50aXR5LmVycm9yc1tpXSB8fCBDb25zdGFudHMuRU1QVFlfU1RSSU5HO1xyXG4gICAgICAgICAgICAvLyBDb3VudCBudW1iZXIgb2YgY2hhcmFjdGVycyB0aGF0IHdvdWxkIGJlIGFkZGVkIHRvIGhlYWRlciwgZWFjaCBjaGFyYWN0ZXIgaXMgMSBieXRlLiBBZGQgMyBhdCB0aGUgZW5kIHRvIGFjY291bnQgZm9yIHNlcGFyYXRvcnNcclxuICAgICAgICAgICAgZGF0YVNpemUgKz1cclxuICAgICAgICAgICAgICAgIGFwaUlkLnRvU3RyaW5nKCkubGVuZ3RoICtcclxuICAgICAgICAgICAgICAgICAgICBjb3JyZWxhdGlvbklkLnRvU3RyaW5nKCkubGVuZ3RoICtcclxuICAgICAgICAgICAgICAgICAgICBlcnJvckNvZGUubGVuZ3RoICtcclxuICAgICAgICAgICAgICAgICAgICAzO1xyXG4gICAgICAgICAgICBpZiAoZGF0YVNpemUgPCBTRVJWRVJfVEVMRU1fQ09OU1RBTlRTLk1BWF9MQVNUX0hFQURFUl9CWVRFUykge1xyXG4gICAgICAgICAgICAgICAgLy8gQWRkaW5nIHRoaXMgZW50cnkgdG8gdGhlIGhlYWRlciB3b3VsZCBzdGlsbCBrZWVwIGhlYWRlciBzaXplIGJlbG93IHRoZSBsaW1pdFxyXG4gICAgICAgICAgICAgICAgbWF4RXJyb3JzICs9IDE7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gbWF4RXJyb3JzO1xyXG4gICAgfVxyXG4gICAgLyoqXHJcbiAgICAgKiBHZXQgdGhlIHJlZ2lvbiBkaXNjb3ZlcnkgZmllbGRzXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybnMgc3RyaW5nXHJcbiAgICAgKi9cclxuICAgIGdldFJlZ2lvbkRpc2NvdmVyeUZpZWxkcygpIHtcclxuICAgICAgICBjb25zdCByZWdpb25EaXNjb3ZlcnlGaWVsZHMgPSBbXTtcclxuICAgICAgICByZWdpb25EaXNjb3ZlcnlGaWVsZHMucHVzaCh0aGlzLnJlZ2lvblVzZWQgfHwgQ29uc3RhbnRzLkVNUFRZX1NUUklORyk7XHJcbiAgICAgICAgcmVnaW9uRGlzY292ZXJ5RmllbGRzLnB1c2godGhpcy5yZWdpb25Tb3VyY2UgfHwgQ29uc3RhbnRzLkVNUFRZX1NUUklORyk7XHJcbiAgICAgICAgcmVnaW9uRGlzY292ZXJ5RmllbGRzLnB1c2godGhpcy5yZWdpb25PdXRjb21lIHx8IENvbnN0YW50cy5FTVBUWV9TVFJJTkcpO1xyXG4gICAgICAgIHJldHVybiByZWdpb25EaXNjb3ZlcnlGaWVsZHMuam9pbihcIixcIik7XHJcbiAgICB9XHJcbiAgICAvKipcclxuICAgICAqIFVwZGF0ZSB0aGUgcmVnaW9uIGRpc2NvdmVyeSBtZXRhZGF0YVxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSByZWdpb25EaXNjb3ZlcnlNZXRhZGF0YVxyXG4gICAgICogQHJldHVybnMgdm9pZFxyXG4gICAgICovXHJcbiAgICB1cGRhdGVSZWdpb25EaXNjb3ZlcnlNZXRhZGF0YShyZWdpb25EaXNjb3ZlcnlNZXRhZGF0YSkge1xyXG4gICAgICAgIHRoaXMucmVnaW9uVXNlZCA9IHJlZ2lvbkRpc2NvdmVyeU1ldGFkYXRhLnJlZ2lvbl91c2VkO1xyXG4gICAgICAgIHRoaXMucmVnaW9uU291cmNlID0gcmVnaW9uRGlzY292ZXJ5TWV0YWRhdGEucmVnaW9uX3NvdXJjZTtcclxuICAgICAgICB0aGlzLnJlZ2lvbk91dGNvbWUgPSByZWdpb25EaXNjb3ZlcnlNZXRhZGF0YS5yZWdpb25fb3V0Y29tZTtcclxuICAgIH1cclxuICAgIC8qKlxyXG4gICAgICogU2V0IGNhY2hlIG91dGNvbWVcclxuICAgICAqL1xyXG4gICAgc2V0Q2FjaGVPdXRjb21lKGNhY2hlT3V0Y29tZSkge1xyXG4gICAgICAgIHRoaXMuY2FjaGVPdXRjb21lID0gY2FjaGVPdXRjb21lO1xyXG4gICAgfVxyXG4gICAgc2V0TmF0aXZlQnJva2VyRXJyb3JDb2RlKGVycm9yQ29kZSkge1xyXG4gICAgICAgIGNvbnN0IGxhc3RSZXF1ZXN0cyA9IHRoaXMuZ2V0TGFzdFJlcXVlc3RzKCk7XHJcbiAgICAgICAgbGFzdFJlcXVlc3RzLm5hdGl2ZUJyb2tlckVycm9yQ29kZSA9IGVycm9yQ29kZTtcclxuICAgICAgICB0aGlzLmNhY2hlTWFuYWdlci5zZXRTZXJ2ZXJUZWxlbWV0cnkodGhpcy50ZWxlbWV0cnlDYWNoZUtleSwgbGFzdFJlcXVlc3RzKTtcclxuICAgIH1cclxuICAgIGdldE5hdGl2ZUJyb2tlckVycm9yQ29kZSgpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5nZXRMYXN0UmVxdWVzdHMoKS5uYXRpdmVCcm9rZXJFcnJvckNvZGU7XHJcbiAgICB9XHJcbiAgICBjbGVhck5hdGl2ZUJyb2tlckVycm9yQ29kZSgpIHtcclxuICAgICAgICBjb25zdCBsYXN0UmVxdWVzdHMgPSB0aGlzLmdldExhc3RSZXF1ZXN0cygpO1xyXG4gICAgICAgIGRlbGV0ZSBsYXN0UmVxdWVzdHMubmF0aXZlQnJva2VyRXJyb3JDb2RlO1xyXG4gICAgICAgIHRoaXMuY2FjaGVNYW5hZ2VyLnNldFNlcnZlclRlbGVtZXRyeSh0aGlzLnRlbGVtZXRyeUNhY2hlS2V5LCBsYXN0UmVxdWVzdHMpO1xyXG4gICAgfVxyXG4gICAgc3RhdGljIG1ha2VFeHRyYVNrdVN0cmluZyhwYXJhbXMpIHtcclxuICAgICAgICByZXR1cm4gbWFrZUV4dHJhU2t1U3RyaW5nKHBhcmFtcyk7XHJcbiAgICB9XHJcbn1cblxuZXhwb3J0IHsgU2VydmVyVGVsZW1ldHJ5TWFuYWdlciB9O1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9U2VydmVyVGVsZW1ldHJ5TWFuYWdlci5tanMubWFwXG4iLCIvKiEgQGF6dXJlL21zYWwtYnJvd3NlciB2My4yOC4xIDIwMjUtMDEtMTQgKi9cbid1c2Ugc3RyaWN0JztcbmltcG9ydCB7IEFjY291bnRFbnRpdHksIFVybFN0cmluZywgU2VydmVyVGVsZW1ldHJ5TWFuYWdlciwgUGVyZm9ybWFuY2VFdmVudHMsIEF1dGhvcml0eSwgaW52b2tlQXN5bmMsIEF1dGhvcml0eUZhY3RvcnksIGNyZWF0ZUNsaWVudENvbmZpZ3VyYXRpb25FcnJvciwgQ2xpZW50Q29uZmlndXJhdGlvbkVycm9yQ29kZXMgfSBmcm9tICdAYXp1cmUvbXNhbC1jb21tb24vYnJvd3Nlcic7XG5pbXBvcnQgeyB2ZXJzaW9uIH0gZnJvbSAnLi4vcGFja2FnZU1ldGFkYXRhLm1qcyc7XG5pbXBvcnQgeyBCcm93c2VyQ29uc3RhbnRzIH0gZnJvbSAnLi4vdXRpbHMvQnJvd3NlckNvbnN0YW50cy5tanMnO1xuaW1wb3J0IHsgZ2V0Q3VycmVudFVyaSB9IGZyb20gJy4uL3V0aWxzL0Jyb3dzZXJVdGlscy5tanMnO1xuaW1wb3J0IHsgY3JlYXRlTmV3R3VpZCB9IGZyb20gJy4uL2NyeXB0by9Ccm93c2VyQ3J5cHRvLm1qcyc7XG5cbi8qXHJcbiAqIENvcHlyaWdodCAoYykgTWljcm9zb2Z0IENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLlxyXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgTUlUIExpY2Vuc2UuXHJcbiAqL1xyXG5jbGFzcyBCYXNlSW50ZXJhY3Rpb25DbGllbnQge1xyXG4gICAgY29uc3RydWN0b3IoY29uZmlnLCBzdG9yYWdlSW1wbCwgYnJvd3NlckNyeXB0bywgbG9nZ2VyLCBldmVudEhhbmRsZXIsIG5hdmlnYXRpb25DbGllbnQsIHBlcmZvcm1hbmNlQ2xpZW50LCBuYXRpdmVNZXNzYWdlSGFuZGxlciwgY29ycmVsYXRpb25JZCkge1xyXG4gICAgICAgIHRoaXMuY29uZmlnID0gY29uZmlnO1xyXG4gICAgICAgIHRoaXMuYnJvd3NlclN0b3JhZ2UgPSBzdG9yYWdlSW1wbDtcclxuICAgICAgICB0aGlzLmJyb3dzZXJDcnlwdG8gPSBicm93c2VyQ3J5cHRvO1xyXG4gICAgICAgIHRoaXMubmV0d29ya0NsaWVudCA9IHRoaXMuY29uZmlnLnN5c3RlbS5uZXR3b3JrQ2xpZW50O1xyXG4gICAgICAgIHRoaXMuZXZlbnRIYW5kbGVyID0gZXZlbnRIYW5kbGVyO1xyXG4gICAgICAgIHRoaXMubmF2aWdhdGlvbkNsaWVudCA9IG5hdmlnYXRpb25DbGllbnQ7XHJcbiAgICAgICAgdGhpcy5uYXRpdmVNZXNzYWdlSGFuZGxlciA9IG5hdGl2ZU1lc3NhZ2VIYW5kbGVyO1xyXG4gICAgICAgIHRoaXMuY29ycmVsYXRpb25JZCA9IGNvcnJlbGF0aW9uSWQgfHwgY3JlYXRlTmV3R3VpZCgpO1xyXG4gICAgICAgIHRoaXMubG9nZ2VyID0gbG9nZ2VyLmNsb25lKEJyb3dzZXJDb25zdGFudHMuTVNBTF9TS1UsIHZlcnNpb24sIHRoaXMuY29ycmVsYXRpb25JZCk7XHJcbiAgICAgICAgdGhpcy5wZXJmb3JtYW5jZUNsaWVudCA9IHBlcmZvcm1hbmNlQ2xpZW50O1xyXG4gICAgfVxyXG4gICAgYXN5bmMgY2xlYXJDYWNoZU9uTG9nb3V0KGFjY291bnQpIHtcclxuICAgICAgICBpZiAoYWNjb3VudCkge1xyXG4gICAgICAgICAgICBpZiAoQWNjb3VudEVudGl0eS5hY2NvdW50SW5mb0lzRXF1YWwoYWNjb3VudCwgdGhpcy5icm93c2VyU3RvcmFnZS5nZXRBY3RpdmVBY2NvdW50KCksIGZhbHNlKSkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5sb2dnZXIudmVyYm9zZShcIlNldHRpbmcgYWN0aXZlIGFjY291bnQgdG8gbnVsbFwiKTtcclxuICAgICAgICAgICAgICAgIHRoaXMuYnJvd3NlclN0b3JhZ2Uuc2V0QWN0aXZlQWNjb3VudChudWxsKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAvLyBDbGVhciBnaXZlbiBhY2NvdW50LlxyXG4gICAgICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5icm93c2VyU3RvcmFnZS5yZW1vdmVBY2NvdW50KEFjY291bnRFbnRpdHkuZ2VuZXJhdGVBY2NvdW50Q2FjaGVLZXkoYWNjb3VudCkpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5sb2dnZXIudmVyYm9zZShcIkNsZWFyZWQgY2FjaGUgaXRlbXMgYmVsb25naW5nIHRvIHRoZSBhY2NvdW50IHByb3ZpZGVkIGluIHRoZSBsb2dvdXQgcmVxdWVzdC5cIik7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgY2F0Y2ggKGVycm9yKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmxvZ2dlci5lcnJvcihcIkFjY291bnQgcHJvdmlkZWQgaW4gbG9nb3V0IHJlcXVlc3Qgd2FzIG5vdCBmb3VuZC4gTG9jYWwgY2FjaGUgdW5jaGFuZ2VkLlwiKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgICAgIHRoaXMubG9nZ2VyLnZlcmJvc2UoXCJObyBhY2NvdW50IHByb3ZpZGVkIGluIGxvZ291dCByZXF1ZXN0LCBjbGVhcmluZyBhbGwgY2FjaGUgaXRlbXMuXCIsIHRoaXMuY29ycmVsYXRpb25JZCk7XHJcbiAgICAgICAgICAgICAgICAvLyBDbGVhciBhbGwgYWNjb3VudHMgYW5kIHRva2Vuc1xyXG4gICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5icm93c2VyU3RvcmFnZS5jbGVhcigpO1xyXG4gICAgICAgICAgICAgICAgLy8gQ2xlYXIgYW55IHN0cmF5IGtleXMgZnJvbSBJbmRleGVkREJcclxuICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMuYnJvd3NlckNyeXB0by5jbGVhcktleXN0b3JlKCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgY2F0Y2ggKGUpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMubG9nZ2VyLmVycm9yKFwiQXR0ZW1wdGVkIHRvIGNsZWFyIGFsbCBNU0FMIGNhY2hlIGl0ZW1zIGFuZCBmYWlsZWQuIExvY2FsIGNhY2hlIHVuY2hhbmdlZC5cIik7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICAvKipcclxuICAgICAqXHJcbiAgICAgKiBVc2UgdG8gZ2V0IHRoZSByZWRpcmVjdCB1cmkgY29uZmlndXJlZCBpbiBNU0FMIG9yIG51bGwuXHJcbiAgICAgKiBAcGFyYW0gcmVxdWVzdFJlZGlyZWN0VXJpXHJcbiAgICAgKiBAcmV0dXJucyBSZWRpcmVjdCBVUkxcclxuICAgICAqXHJcbiAgICAgKi9cclxuICAgIGdldFJlZGlyZWN0VXJpKHJlcXVlc3RSZWRpcmVjdFVyaSkge1xyXG4gICAgICAgIHRoaXMubG9nZ2VyLnZlcmJvc2UoXCJnZXRSZWRpcmVjdFVyaSBjYWxsZWRcIik7XHJcbiAgICAgICAgY29uc3QgcmVkaXJlY3RVcmkgPSByZXF1ZXN0UmVkaXJlY3RVcmkgfHwgdGhpcy5jb25maWcuYXV0aC5yZWRpcmVjdFVyaTtcclxuICAgICAgICByZXR1cm4gVXJsU3RyaW5nLmdldEFic29sdXRlVXJsKHJlZGlyZWN0VXJpLCBnZXRDdXJyZW50VXJpKCkpO1xyXG4gICAgfVxyXG4gICAgLyoqXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIGFwaUlkXHJcbiAgICAgKiBAcGFyYW0gY29ycmVsYXRpb25JZFxyXG4gICAgICogQHBhcmFtIGZvcmNlUmVmcmVzaFxyXG4gICAgICovXHJcbiAgICBpbml0aWFsaXplU2VydmVyVGVsZW1ldHJ5TWFuYWdlcihhcGlJZCwgZm9yY2VSZWZyZXNoKSB7XHJcbiAgICAgICAgdGhpcy5sb2dnZXIudmVyYm9zZShcImluaXRpYWxpemVTZXJ2ZXJUZWxlbWV0cnlNYW5hZ2VyIGNhbGxlZFwiKTtcclxuICAgICAgICBjb25zdCB0ZWxlbWV0cnlQYXlsb2FkID0ge1xyXG4gICAgICAgICAgICBjbGllbnRJZDogdGhpcy5jb25maWcuYXV0aC5jbGllbnRJZCxcclxuICAgICAgICAgICAgY29ycmVsYXRpb25JZDogdGhpcy5jb3JyZWxhdGlvbklkLFxyXG4gICAgICAgICAgICBhcGlJZDogYXBpSWQsXHJcbiAgICAgICAgICAgIGZvcmNlUmVmcmVzaDogZm9yY2VSZWZyZXNoIHx8IGZhbHNlLFxyXG4gICAgICAgICAgICB3cmFwcGVyU0tVOiB0aGlzLmJyb3dzZXJTdG9yYWdlLmdldFdyYXBwZXJNZXRhZGF0YSgpWzBdLFxyXG4gICAgICAgICAgICB3cmFwcGVyVmVyOiB0aGlzLmJyb3dzZXJTdG9yYWdlLmdldFdyYXBwZXJNZXRhZGF0YSgpWzFdLFxyXG4gICAgICAgIH07XHJcbiAgICAgICAgcmV0dXJuIG5ldyBTZXJ2ZXJUZWxlbWV0cnlNYW5hZ2VyKHRlbGVtZXRyeVBheWxvYWQsIHRoaXMuYnJvd3NlclN0b3JhZ2UpO1xyXG4gICAgfVxyXG4gICAgLyoqXHJcbiAgICAgKiBVc2VkIHRvIGdldCBhIGRpc2NvdmVyZWQgdmVyc2lvbiBvZiB0aGUgZGVmYXVsdCBhdXRob3JpdHkuXHJcbiAgICAgKiBAcGFyYW0gcGFyYW1zIHtcclxuICAgICAqICAgICAgICAgcmVxdWVzdEF1dGhvcml0eT86IHN0cmluZztcclxuICAgICAqICAgICAgICAgcmVxdWVzdEF6dXJlQ2xvdWRPcHRpb25zPzogQXp1cmVDbG91ZE9wdGlvbnM7XHJcbiAgICAgKiAgICAgICAgIHJlcXVlc3RFeHRyYVF1ZXJ5UGFyYW1ldGVycz86IFN0cmluZ0RpY3Q7XHJcbiAgICAgKiAgICAgICAgIGFjY291bnQ/OiBBY2NvdW50SW5mbztcclxuICAgICAqICAgICAgICB9XHJcbiAgICAgKi9cclxuICAgIGFzeW5jIGdldERpc2NvdmVyZWRBdXRob3JpdHkocGFyYW1zKSB7XHJcbiAgICAgICAgY29uc3QgeyBhY2NvdW50IH0gPSBwYXJhbXM7XHJcbiAgICAgICAgY29uc3QgaW5zdGFuY2VBd2FyZUVRID0gcGFyYW1zLnJlcXVlc3RFeHRyYVF1ZXJ5UGFyYW1ldGVycyAmJlxyXG4gICAgICAgICAgICBwYXJhbXMucmVxdWVzdEV4dHJhUXVlcnlQYXJhbWV0ZXJzLmhhc093blByb3BlcnR5KFwiaW5zdGFuY2VfYXdhcmVcIilcclxuICAgICAgICAgICAgPyBwYXJhbXMucmVxdWVzdEV4dHJhUXVlcnlQYXJhbWV0ZXJzW1wiaW5zdGFuY2VfYXdhcmVcIl1cclxuICAgICAgICAgICAgOiB1bmRlZmluZWQ7XHJcbiAgICAgICAgdGhpcy5wZXJmb3JtYW5jZUNsaWVudC5hZGRRdWV1ZU1lYXN1cmVtZW50KFBlcmZvcm1hbmNlRXZlbnRzLlN0YW5kYXJkSW50ZXJhY3Rpb25DbGllbnRHZXREaXNjb3ZlcmVkQXV0aG9yaXR5LCB0aGlzLmNvcnJlbGF0aW9uSWQpO1xyXG4gICAgICAgIGNvbnN0IGF1dGhvcml0eU9wdGlvbnMgPSB7XHJcbiAgICAgICAgICAgIHByb3RvY29sTW9kZTogdGhpcy5jb25maWcuYXV0aC5wcm90b2NvbE1vZGUsXHJcbiAgICAgICAgICAgIE9JRENPcHRpb25zOiB0aGlzLmNvbmZpZy5hdXRoLk9JRENPcHRpb25zLFxyXG4gICAgICAgICAgICBrbm93bkF1dGhvcml0aWVzOiB0aGlzLmNvbmZpZy5hdXRoLmtub3duQXV0aG9yaXRpZXMsXHJcbiAgICAgICAgICAgIGNsb3VkRGlzY292ZXJ5TWV0YWRhdGE6IHRoaXMuY29uZmlnLmF1dGguY2xvdWREaXNjb3ZlcnlNZXRhZGF0YSxcclxuICAgICAgICAgICAgYXV0aG9yaXR5TWV0YWRhdGE6IHRoaXMuY29uZmlnLmF1dGguYXV0aG9yaXR5TWV0YWRhdGEsXHJcbiAgICAgICAgICAgIHNraXBBdXRob3JpdHlNZXRhZGF0YUNhY2hlOiB0aGlzLmNvbmZpZy5hdXRoLnNraXBBdXRob3JpdHlNZXRhZGF0YUNhY2hlLFxyXG4gICAgICAgIH07XHJcbiAgICAgICAgLy8gYnVpbGQgYXV0aG9yaXR5IHN0cmluZyBiYXNlZCBvbiBhdXRoIHBhcmFtcywgcHJlY2VkZW5jZSAtIGF6dXJlQ2xvdWRJbnN0YW5jZSArIHRlbmFudCA+PiBhdXRob3JpdHlcclxuICAgICAgICBjb25zdCByZXNvbHZlZEF1dGhvcml0eSA9IHBhcmFtcy5yZXF1ZXN0QXV0aG9yaXR5IHx8IHRoaXMuY29uZmlnLmF1dGguYXV0aG9yaXR5O1xyXG4gICAgICAgIGNvbnN0IHJlc29sdmVkSW5zdGFuY2VBd2FyZSA9IGluc3RhbmNlQXdhcmVFUT8ubGVuZ3RoXHJcbiAgICAgICAgICAgID8gaW5zdGFuY2VBd2FyZUVRID09PSBcInRydWVcIlxyXG4gICAgICAgICAgICA6IHRoaXMuY29uZmlnLmF1dGguaW5zdGFuY2VBd2FyZTtcclxuICAgICAgICBjb25zdCB1c2VyQXV0aG9yaXR5ID0gYWNjb3VudCAmJiByZXNvbHZlZEluc3RhbmNlQXdhcmVcclxuICAgICAgICAgICAgPyB0aGlzLmNvbmZpZy5hdXRoLmF1dGhvcml0eS5yZXBsYWNlKFVybFN0cmluZy5nZXREb21haW5Gcm9tVXJsKHJlc29sdmVkQXV0aG9yaXR5KSwgYWNjb3VudC5lbnZpcm9ubWVudClcclxuICAgICAgICAgICAgOiByZXNvbHZlZEF1dGhvcml0eTtcclxuICAgICAgICAvLyBmYWxsIGJhY2sgdG8gdGhlIGF1dGhvcml0eSBmcm9tIGNvbmZpZ1xyXG4gICAgICAgIGNvbnN0IGJ1aWx0QXV0aG9yaXR5ID0gQXV0aG9yaXR5LmdlbmVyYXRlQXV0aG9yaXR5KHVzZXJBdXRob3JpdHksIHBhcmFtcy5yZXF1ZXN0QXp1cmVDbG91ZE9wdGlvbnMgfHxcclxuICAgICAgICAgICAgdGhpcy5jb25maWcuYXV0aC5henVyZUNsb3VkT3B0aW9ucyk7XHJcbiAgICAgICAgY29uc3QgZGlzY292ZXJlZEF1dGhvcml0eSA9IGF3YWl0IGludm9rZUFzeW5jKEF1dGhvcml0eUZhY3RvcnkuY3JlYXRlRGlzY292ZXJlZEluc3RhbmNlLCBQZXJmb3JtYW5jZUV2ZW50cy5BdXRob3JpdHlGYWN0b3J5Q3JlYXRlRGlzY292ZXJlZEluc3RhbmNlLCB0aGlzLmxvZ2dlciwgdGhpcy5wZXJmb3JtYW5jZUNsaWVudCwgdGhpcy5jb3JyZWxhdGlvbklkKShidWlsdEF1dGhvcml0eSwgdGhpcy5jb25maWcuc3lzdGVtLm5ldHdvcmtDbGllbnQsIHRoaXMuYnJvd3NlclN0b3JhZ2UsIGF1dGhvcml0eU9wdGlvbnMsIHRoaXMubG9nZ2VyLCB0aGlzLmNvcnJlbGF0aW9uSWQsIHRoaXMucGVyZm9ybWFuY2VDbGllbnQpO1xyXG4gICAgICAgIGlmIChhY2NvdW50ICYmICFkaXNjb3ZlcmVkQXV0aG9yaXR5LmlzQWxpYXMoYWNjb3VudC5lbnZpcm9ubWVudCkpIHtcclxuICAgICAgICAgICAgdGhyb3cgY3JlYXRlQ2xpZW50Q29uZmlndXJhdGlvbkVycm9yKENsaWVudENvbmZpZ3VyYXRpb25FcnJvckNvZGVzLmF1dGhvcml0eU1pc21hdGNoKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIGRpc2NvdmVyZWRBdXRob3JpdHk7XHJcbiAgICB9XHJcbn1cblxuZXhwb3J0IHsgQmFzZUludGVyYWN0aW9uQ2xpZW50IH07XG4vLyMgc291cmNlTWFwcGluZ1VSTD1CYXNlSW50ZXJhY3Rpb25DbGllbnQubWpzLm1hcFxuIiwiLyohIEBhenVyZS9tc2FsLWJyb3dzZXIgdjMuMjguMSAyMDI1LTAxLTE0ICovXG4ndXNlIHN0cmljdCc7XG5pbXBvcnQgeyBQZXJmb3JtYW5jZUV2ZW50cywgaW52b2tlLCBpbnZva2VBc3luYyB9IGZyb20gJ0BhenVyZS9tc2FsLWNvbW1vbi9icm93c2VyJztcbmltcG9ydCB7IGNyZWF0ZUJyb3dzZXJBdXRoRXJyb3IgfSBmcm9tICcuLi9lcnJvci9Ccm93c2VyQXV0aEVycm9yLm1qcyc7XG5pbXBvcnQgeyB1cmxFbmNvZGVBcnIgfSBmcm9tICcuLi9lbmNvZGUvQmFzZTY0RW5jb2RlLm1qcyc7XG5pbXBvcnQgeyBnZXRSYW5kb21WYWx1ZXMsIHNoYTI1NkRpZ2VzdCB9IGZyb20gJy4vQnJvd3NlckNyeXB0by5tanMnO1xuaW1wb3J0IHsgcGtjZU5vdENyZWF0ZWQgfSBmcm9tICcuLi9lcnJvci9Ccm93c2VyQXV0aEVycm9yQ29kZXMubWpzJztcblxuLypcclxuICogQ29weXJpZ2h0IChjKSBNaWNyb3NvZnQgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuXHJcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgTGljZW5zZS5cclxuICovXHJcbi8vIENvbnN0YW50IGJ5dGUgYXJyYXkgbGVuZ3RoXHJcbmNvbnN0IFJBTkRPTV9CWVRFX0FSUl9MRU5HVEggPSAzMjtcclxuLyoqXHJcbiAqIFRoaXMgZmlsZSBkZWZpbmVzIEFQSXMgdG8gZ2VuZXJhdGUgUEtDRSBjb2RlcyBhbmQgY29kZSB2ZXJpZmllcnMuXHJcbiAqL1xyXG4vKipcclxuICogR2VuZXJhdGVzIFBLQ0UgQ29kZXMuIFNlZSB0aGUgUkZDIGZvciBtb3JlIGluZm9ybWF0aW9uOiBodHRwczovL3Rvb2xzLmlldGYub3JnL2h0bWwvcmZjNzYzNlxyXG4gKi9cclxuYXN5bmMgZnVuY3Rpb24gZ2VuZXJhdGVQa2NlQ29kZXMocGVyZm9ybWFuY2VDbGllbnQsIGxvZ2dlciwgY29ycmVsYXRpb25JZCkge1xyXG4gICAgcGVyZm9ybWFuY2VDbGllbnQuYWRkUXVldWVNZWFzdXJlbWVudChQZXJmb3JtYW5jZUV2ZW50cy5HZW5lcmF0ZVBrY2VDb2RlcywgY29ycmVsYXRpb25JZCk7XHJcbiAgICBjb25zdCBjb2RlVmVyaWZpZXIgPSBpbnZva2UoZ2VuZXJhdGVDb2RlVmVyaWZpZXIsIFBlcmZvcm1hbmNlRXZlbnRzLkdlbmVyYXRlQ29kZVZlcmlmaWVyLCBsb2dnZXIsIHBlcmZvcm1hbmNlQ2xpZW50LCBjb3JyZWxhdGlvbklkKShwZXJmb3JtYW5jZUNsaWVudCwgbG9nZ2VyLCBjb3JyZWxhdGlvbklkKTtcclxuICAgIGNvbnN0IGNvZGVDaGFsbGVuZ2UgPSBhd2FpdCBpbnZva2VBc3luYyhnZW5lcmF0ZUNvZGVDaGFsbGVuZ2VGcm9tVmVyaWZpZXIsIFBlcmZvcm1hbmNlRXZlbnRzLkdlbmVyYXRlQ29kZUNoYWxsZW5nZUZyb21WZXJpZmllciwgbG9nZ2VyLCBwZXJmb3JtYW5jZUNsaWVudCwgY29ycmVsYXRpb25JZCkoY29kZVZlcmlmaWVyLCBwZXJmb3JtYW5jZUNsaWVudCwgbG9nZ2VyLCBjb3JyZWxhdGlvbklkKTtcclxuICAgIHJldHVybiB7XHJcbiAgICAgICAgdmVyaWZpZXI6IGNvZGVWZXJpZmllcixcclxuICAgICAgICBjaGFsbGVuZ2U6IGNvZGVDaGFsbGVuZ2UsXHJcbiAgICB9O1xyXG59XHJcbi8qKlxyXG4gKiBHZW5lcmF0ZXMgYSByYW5kb20gMzIgYnl0ZSBidWZmZXIgYW5kIHJldHVybnMgdGhlIGJhc2U2NFxyXG4gKiBlbmNvZGVkIHN0cmluZyB0byBiZSB1c2VkIGFzIGEgUEtDRSBDb2RlIFZlcmlmaWVyXHJcbiAqL1xyXG5mdW5jdGlvbiBnZW5lcmF0ZUNvZGVWZXJpZmllcihwZXJmb3JtYW5jZUNsaWVudCwgbG9nZ2VyLCBjb3JyZWxhdGlvbklkKSB7XHJcbiAgICB0cnkge1xyXG4gICAgICAgIC8vIEdlbmVyYXRlIHJhbmRvbSB2YWx1ZXMgYXMgdXRmLThcclxuICAgICAgICBjb25zdCBidWZmZXIgPSBuZXcgVWludDhBcnJheShSQU5ET01fQllURV9BUlJfTEVOR1RIKTtcclxuICAgICAgICBpbnZva2UoZ2V0UmFuZG9tVmFsdWVzLCBQZXJmb3JtYW5jZUV2ZW50cy5HZXRSYW5kb21WYWx1ZXMsIGxvZ2dlciwgcGVyZm9ybWFuY2VDbGllbnQsIGNvcnJlbGF0aW9uSWQpKGJ1ZmZlcik7XHJcbiAgICAgICAgLy8gZW5jb2RlIHZlcmlmaWVyIGFzIGJhc2U2NFxyXG4gICAgICAgIGNvbnN0IHBrY2VDb2RlVmVyaWZpZXJCNjQgPSB1cmxFbmNvZGVBcnIoYnVmZmVyKTtcclxuICAgICAgICByZXR1cm4gcGtjZUNvZGVWZXJpZmllckI2NDtcclxuICAgIH1cclxuICAgIGNhdGNoIChlKSB7XHJcbiAgICAgICAgdGhyb3cgY3JlYXRlQnJvd3NlckF1dGhFcnJvcihwa2NlTm90Q3JlYXRlZCk7XHJcbiAgICB9XHJcbn1cclxuLyoqXHJcbiAqIENyZWF0ZXMgYSBiYXNlNjQgZW5jb2RlZCBQS0NFIENvZGUgQ2hhbGxlbmdlIHN0cmluZyBmcm9tIHRoZVxyXG4gKiBoYXNoIGNyZWF0ZWQgZnJvbSB0aGUgUEtDRSBDb2RlIFZlcmlmaWVyIHN1cHBsaWVkXHJcbiAqL1xyXG5hc3luYyBmdW5jdGlvbiBnZW5lcmF0ZUNvZGVDaGFsbGVuZ2VGcm9tVmVyaWZpZXIocGtjZUNvZGVWZXJpZmllciwgcGVyZm9ybWFuY2VDbGllbnQsIGxvZ2dlciwgY29ycmVsYXRpb25JZCkge1xyXG4gICAgcGVyZm9ybWFuY2VDbGllbnQuYWRkUXVldWVNZWFzdXJlbWVudChQZXJmb3JtYW5jZUV2ZW50cy5HZW5lcmF0ZUNvZGVDaGFsbGVuZ2VGcm9tVmVyaWZpZXIsIGNvcnJlbGF0aW9uSWQpO1xyXG4gICAgdHJ5IHtcclxuICAgICAgICAvLyBoYXNoZWQgdmVyaWZpZXJcclxuICAgICAgICBjb25zdCBwa2NlSGFzaGVkQ29kZVZlcmlmaWVyID0gYXdhaXQgaW52b2tlQXN5bmMoc2hhMjU2RGlnZXN0LCBQZXJmb3JtYW5jZUV2ZW50cy5TaGEyNTZEaWdlc3QsIGxvZ2dlciwgcGVyZm9ybWFuY2VDbGllbnQsIGNvcnJlbGF0aW9uSWQpKHBrY2VDb2RlVmVyaWZpZXIsIHBlcmZvcm1hbmNlQ2xpZW50LCBjb3JyZWxhdGlvbklkKTtcclxuICAgICAgICAvLyBlbmNvZGUgaGFzaCBhcyBiYXNlNjRcclxuICAgICAgICByZXR1cm4gdXJsRW5jb2RlQXJyKG5ldyBVaW50OEFycmF5KHBrY2VIYXNoZWRDb2RlVmVyaWZpZXIpKTtcclxuICAgIH1cclxuICAgIGNhdGNoIChlKSB7XHJcbiAgICAgICAgdGhyb3cgY3JlYXRlQnJvd3NlckF1dGhFcnJvcihwa2NlTm90Q3JlYXRlZCk7XHJcbiAgICB9XHJcbn1cblxuZXhwb3J0IHsgZ2VuZXJhdGVQa2NlQ29kZXMgfTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPVBrY2VHZW5lcmF0b3IubWpzLm1hcFxuIiwiLyohIEBhenVyZS9tc2FsLWJyb3dzZXIgdjMuMjguMSAyMDI1LTAxLTE0ICovXG4ndXNlIHN0cmljdCc7XG5pbXBvcnQgeyBQZXJmb3JtYW5jZUV2ZW50cywgaW52b2tlQXN5bmMsIEF1dGhlbnRpY2F0aW9uU2NoZW1lLCBjcmVhdGVDbGllbnRDb25maWd1cmF0aW9uRXJyb3IsIENsaWVudENvbmZpZ3VyYXRpb25FcnJvckNvZGVzLCBTdHJpbmdVdGlscyB9IGZyb20gJ0BhenVyZS9tc2FsLWNvbW1vbi9icm93c2VyJztcbmltcG9ydCB7IGhhc2hTdHJpbmcgfSBmcm9tICcuLi9jcnlwdG8vQnJvd3NlckNyeXB0by5tanMnO1xuXG4vKlxyXG4gKiBDb3B5cmlnaHQgKGMpIE1pY3Jvc29mdCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cclxuICogTGljZW5zZWQgdW5kZXIgdGhlIE1JVCBMaWNlbnNlLlxyXG4gKi9cclxuLyoqXHJcbiAqIEluaXRpYWxpemVyIGZ1bmN0aW9uIGZvciBhbGwgcmVxdWVzdCBBUElzXHJcbiAqIEBwYXJhbSByZXF1ZXN0XHJcbiAqL1xyXG5hc3luYyBmdW5jdGlvbiBpbml0aWFsaXplQmFzZVJlcXVlc3QocmVxdWVzdCwgY29uZmlnLCBwZXJmb3JtYW5jZUNsaWVudCwgbG9nZ2VyKSB7XHJcbiAgICBwZXJmb3JtYW5jZUNsaWVudC5hZGRRdWV1ZU1lYXN1cmVtZW50KFBlcmZvcm1hbmNlRXZlbnRzLkluaXRpYWxpemVCYXNlUmVxdWVzdCwgcmVxdWVzdC5jb3JyZWxhdGlvbklkKTtcclxuICAgIGNvbnN0IGF1dGhvcml0eSA9IHJlcXVlc3QuYXV0aG9yaXR5IHx8IGNvbmZpZy5hdXRoLmF1dGhvcml0eTtcclxuICAgIGNvbnN0IHNjb3BlcyA9IFsuLi4oKHJlcXVlc3QgJiYgcmVxdWVzdC5zY29wZXMpIHx8IFtdKV07XHJcbiAgICBjb25zdCB2YWxpZGF0ZWRSZXF1ZXN0ID0ge1xyXG4gICAgICAgIC4uLnJlcXVlc3QsXHJcbiAgICAgICAgY29ycmVsYXRpb25JZDogcmVxdWVzdC5jb3JyZWxhdGlvbklkLFxyXG4gICAgICAgIGF1dGhvcml0eSxcclxuICAgICAgICBzY29wZXMsXHJcbiAgICB9O1xyXG4gICAgLy8gU2V0IGF1dGhlbnRpY2F0aW9uU2NoZW1lIHRvIEJFQVJFUiBpZiBub3QgZXhwbGljaXRseSBzZXQgaW4gdGhlIHJlcXVlc3RcclxuICAgIGlmICghdmFsaWRhdGVkUmVxdWVzdC5hdXRoZW50aWNhdGlvblNjaGVtZSkge1xyXG4gICAgICAgIHZhbGlkYXRlZFJlcXVlc3QuYXV0aGVudGljYXRpb25TY2hlbWUgPSBBdXRoZW50aWNhdGlvblNjaGVtZS5CRUFSRVI7XHJcbiAgICAgICAgbG9nZ2VyLnZlcmJvc2UoJ0F1dGhlbnRpY2F0aW9uIFNjaGVtZSB3YXNuXFwndCBleHBsaWNpdGx5IHNldCBpbiByZXF1ZXN0LCBkZWZhdWx0aW5nIHRvIFwiQmVhcmVyXCIgcmVxdWVzdCcpO1xyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcbiAgICAgICAgaWYgKHZhbGlkYXRlZFJlcXVlc3QuYXV0aGVudGljYXRpb25TY2hlbWUgPT09IEF1dGhlbnRpY2F0aW9uU2NoZW1lLlNTSCkge1xyXG4gICAgICAgICAgICBpZiAoIXJlcXVlc3Quc3NoSndrKSB7XHJcbiAgICAgICAgICAgICAgICB0aHJvdyBjcmVhdGVDbGllbnRDb25maWd1cmF0aW9uRXJyb3IoQ2xpZW50Q29uZmlndXJhdGlvbkVycm9yQ29kZXMubWlzc2luZ1NzaEp3ayk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYgKCFyZXF1ZXN0LnNzaEtpZCkge1xyXG4gICAgICAgICAgICAgICAgdGhyb3cgY3JlYXRlQ2xpZW50Q29uZmlndXJhdGlvbkVycm9yKENsaWVudENvbmZpZ3VyYXRpb25FcnJvckNvZGVzLm1pc3NpbmdTc2hLaWQpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGxvZ2dlci52ZXJib3NlKGBBdXRoZW50aWNhdGlvbiBTY2hlbWUgc2V0IHRvIFwiJHt2YWxpZGF0ZWRSZXF1ZXN0LmF1dGhlbnRpY2F0aW9uU2NoZW1lfVwiIGFzIGNvbmZpZ3VyZWQgaW4gQXV0aCByZXF1ZXN0YCk7XHJcbiAgICB9XHJcbiAgICAvLyBTZXQgcmVxdWVzdGVkIGNsYWltcyBoYXNoIGlmIGNsYWltcy1iYXNlZCBjYWNoaW5nIGlzIGVuYWJsZWQgYW5kIGNsYWltcyB3ZXJlIHJlcXVlc3RlZFxyXG4gICAgaWYgKGNvbmZpZy5jYWNoZS5jbGFpbXNCYXNlZENhY2hpbmdFbmFibGVkICYmXHJcbiAgICAgICAgcmVxdWVzdC5jbGFpbXMgJiZcclxuICAgICAgICAvLyBDaGVja3MgZm9yIGVtcHR5IHN0cmluZ2lmaWVkIG9iamVjdCBcInt9XCIgd2hpY2ggZG9lc24ndCBxdWFsaWZ5IGFzIHJlcXVlc3RlZCBjbGFpbXNcclxuICAgICAgICAhU3RyaW5nVXRpbHMuaXNFbXB0eU9iaihyZXF1ZXN0LmNsYWltcykpIHtcclxuICAgICAgICB2YWxpZGF0ZWRSZXF1ZXN0LnJlcXVlc3RlZENsYWltc0hhc2ggPSBhd2FpdCBoYXNoU3RyaW5nKHJlcXVlc3QuY2xhaW1zKTtcclxuICAgIH1cclxuICAgIHJldHVybiB2YWxpZGF0ZWRSZXF1ZXN0O1xyXG59XHJcbmFzeW5jIGZ1bmN0aW9uIGluaXRpYWxpemVTaWxlbnRSZXF1ZXN0KHJlcXVlc3QsIGFjY291bnQsIGNvbmZpZywgcGVyZm9ybWFuY2VDbGllbnQsIGxvZ2dlcikge1xyXG4gICAgcGVyZm9ybWFuY2VDbGllbnQuYWRkUXVldWVNZWFzdXJlbWVudChQZXJmb3JtYW5jZUV2ZW50cy5Jbml0aWFsaXplU2lsZW50UmVxdWVzdCwgcmVxdWVzdC5jb3JyZWxhdGlvbklkKTtcclxuICAgIGNvbnN0IGJhc2VSZXF1ZXN0ID0gYXdhaXQgaW52b2tlQXN5bmMoaW5pdGlhbGl6ZUJhc2VSZXF1ZXN0LCBQZXJmb3JtYW5jZUV2ZW50cy5Jbml0aWFsaXplQmFzZVJlcXVlc3QsIGxvZ2dlciwgcGVyZm9ybWFuY2VDbGllbnQsIHJlcXVlc3QuY29ycmVsYXRpb25JZCkocmVxdWVzdCwgY29uZmlnLCBwZXJmb3JtYW5jZUNsaWVudCwgbG9nZ2VyKTtcclxuICAgIHJldHVybiB7XHJcbiAgICAgICAgLi4ucmVxdWVzdCxcclxuICAgICAgICAuLi5iYXNlUmVxdWVzdCxcclxuICAgICAgICBhY2NvdW50OiBhY2NvdW50LFxyXG4gICAgICAgIGZvcmNlUmVmcmVzaDogcmVxdWVzdC5mb3JjZVJlZnJlc2ggfHwgZmFsc2UsXHJcbiAgICB9O1xyXG59XG5cbmV4cG9ydCB7IGluaXRpYWxpemVCYXNlUmVxdWVzdCwgaW5pdGlhbGl6ZVNpbGVudFJlcXVlc3QgfTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPVJlcXVlc3RIZWxwZXJzLm1qcy5tYXBcbiIsIi8qISBAYXp1cmUvbXNhbC1icm93c2VyIHYzLjI4LjEgMjAyNS0wMS0xNCAqL1xuJ3VzZSBzdHJpY3QnO1xuaW1wb3J0IHsgUGVyZm9ybWFuY2VFdmVudHMsIGludm9rZUFzeW5jLCBDb25zdGFudHMsIFVybFN0cmluZywgQXV0aG9yaXphdGlvbkNvZGVDbGllbnQsIFByb3RvY29sVXRpbHMgfSBmcm9tICdAYXp1cmUvbXNhbC1jb21tb24vYnJvd3Nlcic7XG5pbXBvcnQgeyBCYXNlSW50ZXJhY3Rpb25DbGllbnQgfSBmcm9tICcuL0Jhc2VJbnRlcmFjdGlvbkNsaWVudC5tanMnO1xuaW1wb3J0IHsgQnJvd3NlckNvbnN0YW50cyB9IGZyb20gJy4uL3V0aWxzL0Jyb3dzZXJDb25zdGFudHMubWpzJztcbmltcG9ydCB7IHZlcnNpb24gfSBmcm9tICcuLi9wYWNrYWdlTWV0YWRhdGEubWpzJztcbmltcG9ydCB7IGdldEN1cnJlbnRVcmkgfSBmcm9tICcuLi91dGlscy9Ccm93c2VyVXRpbHMubWpzJztcbmltcG9ydCB7IGdlbmVyYXRlUGtjZUNvZGVzIH0gZnJvbSAnLi4vY3J5cHRvL1BrY2VHZW5lcmF0b3IubWpzJztcbmltcG9ydCB7IGNyZWF0ZU5ld0d1aWQgfSBmcm9tICcuLi9jcnlwdG8vQnJvd3NlckNyeXB0by5tanMnO1xuaW1wb3J0IHsgaW5pdGlhbGl6ZUJhc2VSZXF1ZXN0IH0gZnJvbSAnLi4vcmVxdWVzdC9SZXF1ZXN0SGVscGVycy5tanMnO1xuXG4vKlxyXG4gKiBDb3B5cmlnaHQgKGMpIE1pY3Jvc29mdCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cclxuICogTGljZW5zZWQgdW5kZXIgdGhlIE1JVCBMaWNlbnNlLlxyXG4gKi9cclxuLyoqXHJcbiAqIERlZmluZXMgdGhlIGNsYXNzIHN0cnVjdHVyZSBhbmQgaGVscGVyIGZ1bmN0aW9ucyB1c2VkIGJ5IHRoZSBcInN0YW5kYXJkXCIsIG5vbi1icm9rZXJlZCBhdXRoIGZsb3dzIChwb3B1cCwgcmVkaXJlY3QsIHNpbGVudCAoUlQpLCBzaWxlbnQgKGlmcmFtZSkpXHJcbiAqL1xyXG5jbGFzcyBTdGFuZGFyZEludGVyYWN0aW9uQ2xpZW50IGV4dGVuZHMgQmFzZUludGVyYWN0aW9uQ2xpZW50IHtcclxuICAgIC8qKlxyXG4gICAgICogR2VuZXJhdGVzIGFuIGF1dGggY29kZSByZXF1ZXN0IHRpZWQgdG8gdGhlIHVybCByZXF1ZXN0LlxyXG4gICAgICogQHBhcmFtIHJlcXVlc3RcclxuICAgICAqL1xyXG4gICAgYXN5bmMgaW5pdGlhbGl6ZUF1dGhvcml6YXRpb25Db2RlUmVxdWVzdChyZXF1ZXN0KSB7XHJcbiAgICAgICAgdGhpcy5wZXJmb3JtYW5jZUNsaWVudC5hZGRRdWV1ZU1lYXN1cmVtZW50KFBlcmZvcm1hbmNlRXZlbnRzLlN0YW5kYXJkSW50ZXJhY3Rpb25DbGllbnRJbml0aWFsaXplQXV0aG9yaXphdGlvbkNvZGVSZXF1ZXN0LCB0aGlzLmNvcnJlbGF0aW9uSWQpO1xyXG4gICAgICAgIGNvbnN0IGdlbmVyYXRlZFBrY2VQYXJhbXMgPSBhd2FpdCBpbnZva2VBc3luYyhnZW5lcmF0ZVBrY2VDb2RlcywgUGVyZm9ybWFuY2VFdmVudHMuR2VuZXJhdGVQa2NlQ29kZXMsIHRoaXMubG9nZ2VyLCB0aGlzLnBlcmZvcm1hbmNlQ2xpZW50LCB0aGlzLmNvcnJlbGF0aW9uSWQpKHRoaXMucGVyZm9ybWFuY2VDbGllbnQsIHRoaXMubG9nZ2VyLCB0aGlzLmNvcnJlbGF0aW9uSWQpO1xyXG4gICAgICAgIGNvbnN0IGF1dGhDb2RlUmVxdWVzdCA9IHtcclxuICAgICAgICAgICAgLi4ucmVxdWVzdCxcclxuICAgICAgICAgICAgcmVkaXJlY3RVcmk6IHJlcXVlc3QucmVkaXJlY3RVcmksXHJcbiAgICAgICAgICAgIGNvZGU6IENvbnN0YW50cy5FTVBUWV9TVFJJTkcsXHJcbiAgICAgICAgICAgIGNvZGVWZXJpZmllcjogZ2VuZXJhdGVkUGtjZVBhcmFtcy52ZXJpZmllcixcclxuICAgICAgICB9O1xyXG4gICAgICAgIHJlcXVlc3QuY29kZUNoYWxsZW5nZSA9IGdlbmVyYXRlZFBrY2VQYXJhbXMuY2hhbGxlbmdlO1xyXG4gICAgICAgIHJlcXVlc3QuY29kZUNoYWxsZW5nZU1ldGhvZCA9IENvbnN0YW50cy5TMjU2X0NPREVfQ0hBTExFTkdFX01FVEhPRDtcclxuICAgICAgICByZXR1cm4gYXV0aENvZGVSZXF1ZXN0O1xyXG4gICAgfVxyXG4gICAgLyoqXHJcbiAgICAgKiBJbml0aWFsaXplciBmb3IgdGhlIGxvZ291dCByZXF1ZXN0LlxyXG4gICAgICogQHBhcmFtIGxvZ291dFJlcXVlc3RcclxuICAgICAqL1xyXG4gICAgaW5pdGlhbGl6ZUxvZ291dFJlcXVlc3QobG9nb3V0UmVxdWVzdCkge1xyXG4gICAgICAgIHRoaXMubG9nZ2VyLnZlcmJvc2UoXCJpbml0aWFsaXplTG9nb3V0UmVxdWVzdCBjYWxsZWRcIiwgbG9nb3V0UmVxdWVzdD8uY29ycmVsYXRpb25JZCk7XHJcbiAgICAgICAgY29uc3QgdmFsaWRMb2dvdXRSZXF1ZXN0ID0ge1xyXG4gICAgICAgICAgICBjb3JyZWxhdGlvbklkOiB0aGlzLmNvcnJlbGF0aW9uSWQgfHwgY3JlYXRlTmV3R3VpZCgpLFxyXG4gICAgICAgICAgICAuLi5sb2dvdXRSZXF1ZXN0LFxyXG4gICAgICAgIH07XHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogU2V0IGxvZ291dF9oaW50IHRvIGJlIGxvZ2luX2hpbnQgZnJvbSBJRCBUb2tlbiBDbGFpbXMgaWYgcHJlc2VudFxyXG4gICAgICAgICAqIGFuZCBsb2dvdXRIaW50IGF0dHJpYnV0ZSB3YXNuJ3QgbWFudWFsbHkgc2V0IGluIGxvZ291dCByZXF1ZXN0XHJcbiAgICAgICAgICovXHJcbiAgICAgICAgaWYgKGxvZ291dFJlcXVlc3QpIHtcclxuICAgICAgICAgICAgLy8gSWYgbG9nb3V0SGludCBpc24ndCBzZXQgYW5kIGFuIGFjY291bnQgd2FzIHBhc3NlZCBpbiwgdHJ5IHRvIGV4dHJhY3QgbG9nb3V0SGludCBmcm9tIElEIFRva2VuIENsYWltc1xyXG4gICAgICAgICAgICBpZiAoIWxvZ291dFJlcXVlc3QubG9nb3V0SGludCkge1xyXG4gICAgICAgICAgICAgICAgaWYgKGxvZ291dFJlcXVlc3QuYWNjb3VudCkge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGxvZ291dEhpbnQgPSB0aGlzLmdldExvZ291dEhpbnRGcm9tSWRUb2tlbkNsYWltcyhsb2dvdXRSZXF1ZXN0LmFjY291bnQpO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChsb2dvdXRIaW50KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubG9nZ2VyLnZlcmJvc2UoXCJTZXR0aW5nIGxvZ291dEhpbnQgdG8gbG9naW5faGludCBJRCBUb2tlbiBDbGFpbSB2YWx1ZSBmb3IgdGhlIGFjY291bnQgcHJvdmlkZWRcIik7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhbGlkTG9nb3V0UmVxdWVzdC5sb2dvdXRIaW50ID0gbG9nb3V0SGludDtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmxvZ2dlci52ZXJib3NlKFwibG9nb3V0SGludCB3YXMgbm90IHNldCBhbmQgYWNjb3VudCB3YXMgbm90IHBhc3NlZCBpbnRvIGxvZ291dCByZXF1ZXN0LCBsb2dvdXRIaW50IHdpbGwgbm90IGJlIHNldFwiKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHRoaXMubG9nZ2VyLnZlcmJvc2UoXCJsb2dvdXRIaW50IGhhcyBhbHJlYWR5IGJlZW4gc2V0IGluIGxvZ291dFJlcXVlc3RcIik7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMubG9nZ2VyLnZlcmJvc2UoXCJsb2dvdXRIaW50IHdpbGwgbm90IGJlIHNldCBzaW5jZSBubyBsb2dvdXQgcmVxdWVzdCB3YXMgY29uZmlndXJlZFwiKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgLypcclxuICAgICAgICAgKiBPbmx5IHNldCByZWRpcmVjdCB1cmkgaWYgbG9nb3V0IHJlcXVlc3QgaXNuJ3QgcHJvdmlkZWQgb3IgdGhlIHNldCB1cmkgaXNuJ3QgbnVsbC5cclxuICAgICAgICAgKiBPdGhlcndpc2UsIHVzZSBwYXNzZWQgdXJpLCBjb25maWcsIG9yIGN1cnJlbnQgcGFnZS5cclxuICAgICAgICAgKi9cclxuICAgICAgICBpZiAoIWxvZ291dFJlcXVlc3QgfHwgbG9nb3V0UmVxdWVzdC5wb3N0TG9nb3V0UmVkaXJlY3RVcmkgIT09IG51bGwpIHtcclxuICAgICAgICAgICAgaWYgKGxvZ291dFJlcXVlc3QgJiYgbG9nb3V0UmVxdWVzdC5wb3N0TG9nb3V0UmVkaXJlY3RVcmkpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMubG9nZ2VyLnZlcmJvc2UoXCJTZXR0aW5nIHBvc3RMb2dvdXRSZWRpcmVjdFVyaSB0byB1cmkgc2V0IG9uIGxvZ291dCByZXF1ZXN0XCIsIHZhbGlkTG9nb3V0UmVxdWVzdC5jb3JyZWxhdGlvbklkKTtcclxuICAgICAgICAgICAgICAgIHZhbGlkTG9nb3V0UmVxdWVzdC5wb3N0TG9nb3V0UmVkaXJlY3RVcmkgPVxyXG4gICAgICAgICAgICAgICAgICAgIFVybFN0cmluZy5nZXRBYnNvbHV0ZVVybChsb2dvdXRSZXF1ZXN0LnBvc3RMb2dvdXRSZWRpcmVjdFVyaSwgZ2V0Q3VycmVudFVyaSgpKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIGlmICh0aGlzLmNvbmZpZy5hdXRoLnBvc3RMb2dvdXRSZWRpcmVjdFVyaSA9PT0gbnVsbCkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5sb2dnZXIudmVyYm9zZShcInBvc3RMb2dvdXRSZWRpcmVjdFVyaSBjb25maWd1cmVkIGFzIG51bGwgYW5kIG5vIHVyaSBzZXQgb24gcmVxdWVzdCwgbm90IHBhc3NpbmcgcG9zdCBsb2dvdXQgcmVkaXJlY3RcIiwgdmFsaWRMb2dvdXRSZXF1ZXN0LmNvcnJlbGF0aW9uSWQpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2UgaWYgKHRoaXMuY29uZmlnLmF1dGgucG9zdExvZ291dFJlZGlyZWN0VXJpKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmxvZ2dlci52ZXJib3NlKFwiU2V0dGluZyBwb3N0TG9nb3V0UmVkaXJlY3RVcmkgdG8gY29uZmlndXJlZCB1cmlcIiwgdmFsaWRMb2dvdXRSZXF1ZXN0LmNvcnJlbGF0aW9uSWQpO1xyXG4gICAgICAgICAgICAgICAgdmFsaWRMb2dvdXRSZXF1ZXN0LnBvc3RMb2dvdXRSZWRpcmVjdFVyaSA9XHJcbiAgICAgICAgICAgICAgICAgICAgVXJsU3RyaW5nLmdldEFic29sdXRlVXJsKHRoaXMuY29uZmlnLmF1dGgucG9zdExvZ291dFJlZGlyZWN0VXJpLCBnZXRDdXJyZW50VXJpKCkpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5sb2dnZXIudmVyYm9zZShcIlNldHRpbmcgcG9zdExvZ291dFJlZGlyZWN0VXJpIHRvIGN1cnJlbnQgcGFnZVwiLCB2YWxpZExvZ291dFJlcXVlc3QuY29ycmVsYXRpb25JZCk7XHJcbiAgICAgICAgICAgICAgICB2YWxpZExvZ291dFJlcXVlc3QucG9zdExvZ291dFJlZGlyZWN0VXJpID1cclxuICAgICAgICAgICAgICAgICAgICBVcmxTdHJpbmcuZ2V0QWJzb2x1dGVVcmwoZ2V0Q3VycmVudFVyaSgpLCBnZXRDdXJyZW50VXJpKCkpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLmxvZ2dlci52ZXJib3NlKFwicG9zdExvZ291dFJlZGlyZWN0VXJpIHBhc3NlZCBhcyBudWxsLCBub3Qgc2V0dGluZyBwb3N0IGxvZ291dCByZWRpcmVjdCB1cmlcIiwgdmFsaWRMb2dvdXRSZXF1ZXN0LmNvcnJlbGF0aW9uSWQpO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gdmFsaWRMb2dvdXRSZXF1ZXN0O1xyXG4gICAgfVxyXG4gICAgLyoqXHJcbiAgICAgKiBQYXJzZXMgbG9naW5faGludCBJRCBUb2tlbiBDbGFpbSBvdXQgb2YgQWNjb3VudEluZm8gb2JqZWN0IHRvIGJlIHVzZWQgYXNcclxuICAgICAqIGxvZ291dF9oaW50IGluIGVuZCBzZXNzaW9uIHJlcXVlc3QuXHJcbiAgICAgKiBAcGFyYW0gYWNjb3VudFxyXG4gICAgICovXHJcbiAgICBnZXRMb2dvdXRIaW50RnJvbUlkVG9rZW5DbGFpbXMoYWNjb3VudCkge1xyXG4gICAgICAgIGNvbnN0IGlkVG9rZW5DbGFpbXMgPSBhY2NvdW50LmlkVG9rZW5DbGFpbXM7XHJcbiAgICAgICAgaWYgKGlkVG9rZW5DbGFpbXMpIHtcclxuICAgICAgICAgICAgaWYgKGlkVG9rZW5DbGFpbXMubG9naW5faGludCkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGlkVG9rZW5DbGFpbXMubG9naW5faGludDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHRoaXMubG9nZ2VyLnZlcmJvc2UoXCJUaGUgSUQgVG9rZW4gQ2xhaW1zIHRpZWQgdG8gdGhlIHByb3ZpZGVkIGFjY291bnQgZG8gbm90IGNvbnRhaW4gYSBsb2dpbl9oaW50IGNsYWltLCBsb2dvdXRIaW50IHdpbGwgbm90IGJlIGFkZGVkIHRvIGxvZ291dCByZXF1ZXN0XCIpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLmxvZ2dlci52ZXJib3NlKFwiVGhlIHByb3ZpZGVkIGFjY291bnQgZG9lcyBub3QgY29udGFpbiBJRCBUb2tlbiBDbGFpbXMsIGxvZ291dEhpbnQgd2lsbCBub3QgYmUgYWRkZWQgdG8gbG9nb3V0IHJlcXVlc3RcIik7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgfVxyXG4gICAgLyoqXHJcbiAgICAgKiBDcmVhdGVzIGFuIEF1dGhvcml6YXRpb24gQ29kZSBDbGllbnQgd2l0aCB0aGUgZ2l2ZW4gYXV0aG9yaXR5LCBvciB0aGUgZGVmYXVsdCBhdXRob3JpdHkuXHJcbiAgICAgKiBAcGFyYW0gcGFyYW1zIHtcclxuICAgICAqICAgICAgICAgc2VydmVyVGVsZW1ldHJ5TWFuYWdlcjogU2VydmVyVGVsZW1ldHJ5TWFuYWdlcjtcclxuICAgICAqICAgICAgICAgYXV0aG9yaXR5VXJsPzogc3RyaW5nO1xyXG4gICAgICogICAgICAgICByZXF1ZXN0QXp1cmVDbG91ZE9wdGlvbnM/OiBBenVyZUNsb3VkT3B0aW9ucztcclxuICAgICAqICAgICAgICAgcmVxdWVzdEV4dHJhUXVlcnlQYXJhbWV0ZXJzPzogU3RyaW5nRGljdDtcclxuICAgICAqICAgICAgICAgYWNjb3VudD86IEFjY291bnRJbmZvO1xyXG4gICAgICogICAgICAgIH1cclxuICAgICAqL1xyXG4gICAgYXN5bmMgY3JlYXRlQXV0aENvZGVDbGllbnQocGFyYW1zKSB7XHJcbiAgICAgICAgdGhpcy5wZXJmb3JtYW5jZUNsaWVudC5hZGRRdWV1ZU1lYXN1cmVtZW50KFBlcmZvcm1hbmNlRXZlbnRzLlN0YW5kYXJkSW50ZXJhY3Rpb25DbGllbnRDcmVhdGVBdXRoQ29kZUNsaWVudCwgdGhpcy5jb3JyZWxhdGlvbklkKTtcclxuICAgICAgICAvLyBDcmVhdGUgYXV0aCBtb2R1bGUuXHJcbiAgICAgICAgY29uc3QgY2xpZW50Q29uZmlnID0gYXdhaXQgaW52b2tlQXN5bmModGhpcy5nZXRDbGllbnRDb25maWd1cmF0aW9uLmJpbmQodGhpcyksIFBlcmZvcm1hbmNlRXZlbnRzLlN0YW5kYXJkSW50ZXJhY3Rpb25DbGllbnRHZXRDbGllbnRDb25maWd1cmF0aW9uLCB0aGlzLmxvZ2dlciwgdGhpcy5wZXJmb3JtYW5jZUNsaWVudCwgdGhpcy5jb3JyZWxhdGlvbklkKShwYXJhbXMpO1xyXG4gICAgICAgIHJldHVybiBuZXcgQXV0aG9yaXphdGlvbkNvZGVDbGllbnQoY2xpZW50Q29uZmlnLCB0aGlzLnBlcmZvcm1hbmNlQ2xpZW50KTtcclxuICAgIH1cclxuICAgIC8qKlxyXG4gICAgICogQ3JlYXRlcyBhIENsaWVudCBDb25maWd1cmF0aW9uIG9iamVjdCB3aXRoIHRoZSBnaXZlbiByZXF1ZXN0IGF1dGhvcml0eSwgb3IgdGhlIGRlZmF1bHQgYXV0aG9yaXR5LlxyXG4gICAgICogQHBhcmFtIHBhcmFtcyB7XHJcbiAgICAgKiAgICAgICAgIHNlcnZlclRlbGVtZXRyeU1hbmFnZXI6IFNlcnZlclRlbGVtZXRyeU1hbmFnZXI7XHJcbiAgICAgKiAgICAgICAgIHJlcXVlc3RBdXRob3JpdHk/OiBzdHJpbmc7XHJcbiAgICAgKiAgICAgICAgIHJlcXVlc3RBenVyZUNsb3VkT3B0aW9ucz86IEF6dXJlQ2xvdWRPcHRpb25zO1xyXG4gICAgICogICAgICAgICByZXF1ZXN0RXh0cmFRdWVyeVBhcmFtZXRlcnM/OiBib29sZWFuO1xyXG4gICAgICogICAgICAgICBhY2NvdW50PzogQWNjb3VudEluZm87XHJcbiAgICAgKiAgICAgICAgfVxyXG4gICAgICovXHJcbiAgICBhc3luYyBnZXRDbGllbnRDb25maWd1cmF0aW9uKHBhcmFtcykge1xyXG4gICAgICAgIGNvbnN0IHsgc2VydmVyVGVsZW1ldHJ5TWFuYWdlciwgcmVxdWVzdEF1dGhvcml0eSwgcmVxdWVzdEF6dXJlQ2xvdWRPcHRpb25zLCByZXF1ZXN0RXh0cmFRdWVyeVBhcmFtZXRlcnMsIGFjY291bnQsIH0gPSBwYXJhbXM7XHJcbiAgICAgICAgdGhpcy5wZXJmb3JtYW5jZUNsaWVudC5hZGRRdWV1ZU1lYXN1cmVtZW50KFBlcmZvcm1hbmNlRXZlbnRzLlN0YW5kYXJkSW50ZXJhY3Rpb25DbGllbnRHZXRDbGllbnRDb25maWd1cmF0aW9uLCB0aGlzLmNvcnJlbGF0aW9uSWQpO1xyXG4gICAgICAgIGNvbnN0IGRpc2NvdmVyZWRBdXRob3JpdHkgPSBhd2FpdCBpbnZva2VBc3luYyh0aGlzLmdldERpc2NvdmVyZWRBdXRob3JpdHkuYmluZCh0aGlzKSwgUGVyZm9ybWFuY2VFdmVudHMuU3RhbmRhcmRJbnRlcmFjdGlvbkNsaWVudEdldERpc2NvdmVyZWRBdXRob3JpdHksIHRoaXMubG9nZ2VyLCB0aGlzLnBlcmZvcm1hbmNlQ2xpZW50LCB0aGlzLmNvcnJlbGF0aW9uSWQpKHtcclxuICAgICAgICAgICAgcmVxdWVzdEF1dGhvcml0eSxcclxuICAgICAgICAgICAgcmVxdWVzdEF6dXJlQ2xvdWRPcHRpb25zLFxyXG4gICAgICAgICAgICByZXF1ZXN0RXh0cmFRdWVyeVBhcmFtZXRlcnMsXHJcbiAgICAgICAgICAgIGFjY291bnQsXHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgY29uc3QgbG9nZ2VyID0gdGhpcy5jb25maWcuc3lzdGVtLmxvZ2dlck9wdGlvbnM7XHJcbiAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgYXV0aE9wdGlvbnM6IHtcclxuICAgICAgICAgICAgICAgIGNsaWVudElkOiB0aGlzLmNvbmZpZy5hdXRoLmNsaWVudElkLFxyXG4gICAgICAgICAgICAgICAgYXV0aG9yaXR5OiBkaXNjb3ZlcmVkQXV0aG9yaXR5LFxyXG4gICAgICAgICAgICAgICAgY2xpZW50Q2FwYWJpbGl0aWVzOiB0aGlzLmNvbmZpZy5hdXRoLmNsaWVudENhcGFiaWxpdGllcyxcclxuICAgICAgICAgICAgICAgIHJlZGlyZWN0VXJpOiB0aGlzLmNvbmZpZy5hdXRoLnJlZGlyZWN0VXJpLFxyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICBzeXN0ZW1PcHRpb25zOiB7XHJcbiAgICAgICAgICAgICAgICB0b2tlblJlbmV3YWxPZmZzZXRTZWNvbmRzOiB0aGlzLmNvbmZpZy5zeXN0ZW0udG9rZW5SZW5ld2FsT2Zmc2V0U2Vjb25kcyxcclxuICAgICAgICAgICAgICAgIHByZXZlbnRDb3JzUHJlZmxpZ2h0OiB0cnVlLFxyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICBsb2dnZXJPcHRpb25zOiB7XHJcbiAgICAgICAgICAgICAgICBsb2dnZXJDYWxsYmFjazogbG9nZ2VyLmxvZ2dlckNhbGxiYWNrLFxyXG4gICAgICAgICAgICAgICAgcGlpTG9nZ2luZ0VuYWJsZWQ6IGxvZ2dlci5waWlMb2dnaW5nRW5hYmxlZCxcclxuICAgICAgICAgICAgICAgIGxvZ0xldmVsOiBsb2dnZXIubG9nTGV2ZWwsXHJcbiAgICAgICAgICAgICAgICBjb3JyZWxhdGlvbklkOiB0aGlzLmNvcnJlbGF0aW9uSWQsXHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIGNhY2hlT3B0aW9uczoge1xyXG4gICAgICAgICAgICAgICAgY2xhaW1zQmFzZWRDYWNoaW5nRW5hYmxlZDogdGhpcy5jb25maWcuY2FjaGUuY2xhaW1zQmFzZWRDYWNoaW5nRW5hYmxlZCxcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgY3J5cHRvSW50ZXJmYWNlOiB0aGlzLmJyb3dzZXJDcnlwdG8sXHJcbiAgICAgICAgICAgIG5ldHdvcmtJbnRlcmZhY2U6IHRoaXMubmV0d29ya0NsaWVudCxcclxuICAgICAgICAgICAgc3RvcmFnZUludGVyZmFjZTogdGhpcy5icm93c2VyU3RvcmFnZSxcclxuICAgICAgICAgICAgc2VydmVyVGVsZW1ldHJ5TWFuYWdlcjogc2VydmVyVGVsZW1ldHJ5TWFuYWdlcixcclxuICAgICAgICAgICAgbGlicmFyeUluZm86IHtcclxuICAgICAgICAgICAgICAgIHNrdTogQnJvd3NlckNvbnN0YW50cy5NU0FMX1NLVSxcclxuICAgICAgICAgICAgICAgIHZlcnNpb246IHZlcnNpb24sXHJcbiAgICAgICAgICAgICAgICBjcHU6IENvbnN0YW50cy5FTVBUWV9TVFJJTkcsXHJcbiAgICAgICAgICAgICAgICBvczogQ29uc3RhbnRzLkVNUFRZX1NUUklORyxcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgdGVsZW1ldHJ5OiB0aGlzLmNvbmZpZy50ZWxlbWV0cnksXHJcbiAgICAgICAgfTtcclxuICAgIH1cclxuICAgIC8qKlxyXG4gICAgICogSGVscGVyIHRvIGluaXRpYWxpemUgcmVxdWlyZWQgcmVxdWVzdCBwYXJhbWV0ZXJzIGZvciBpbnRlcmFjdGl2ZSBBUElzIGFuZCBzc29TaWxlbnQoKVxyXG4gICAgICogQHBhcmFtIHJlcXVlc3RcclxuICAgICAqIEBwYXJhbSBpbnRlcmFjdGlvblR5cGVcclxuICAgICAqL1xyXG4gICAgYXN5bmMgaW5pdGlhbGl6ZUF1dGhvcml6YXRpb25SZXF1ZXN0KHJlcXVlc3QsIGludGVyYWN0aW9uVHlwZSkge1xyXG4gICAgICAgIHRoaXMucGVyZm9ybWFuY2VDbGllbnQuYWRkUXVldWVNZWFzdXJlbWVudChQZXJmb3JtYW5jZUV2ZW50cy5TdGFuZGFyZEludGVyYWN0aW9uQ2xpZW50SW5pdGlhbGl6ZUF1dGhvcml6YXRpb25SZXF1ZXN0LCB0aGlzLmNvcnJlbGF0aW9uSWQpO1xyXG4gICAgICAgIGNvbnN0IHJlZGlyZWN0VXJpID0gdGhpcy5nZXRSZWRpcmVjdFVyaShyZXF1ZXN0LnJlZGlyZWN0VXJpKTtcclxuICAgICAgICBjb25zdCBicm93c2VyU3RhdGUgPSB7XHJcbiAgICAgICAgICAgIGludGVyYWN0aW9uVHlwZTogaW50ZXJhY3Rpb25UeXBlLFxyXG4gICAgICAgIH07XHJcbiAgICAgICAgY29uc3Qgc3RhdGUgPSBQcm90b2NvbFV0aWxzLnNldFJlcXVlc3RTdGF0ZSh0aGlzLmJyb3dzZXJDcnlwdG8sIChyZXF1ZXN0ICYmIHJlcXVlc3Quc3RhdGUpIHx8IENvbnN0YW50cy5FTVBUWV9TVFJJTkcsIGJyb3dzZXJTdGF0ZSk7XHJcbiAgICAgICAgY29uc3QgYmFzZVJlcXVlc3QgPSBhd2FpdCBpbnZva2VBc3luYyhpbml0aWFsaXplQmFzZVJlcXVlc3QsIFBlcmZvcm1hbmNlRXZlbnRzLkluaXRpYWxpemVCYXNlUmVxdWVzdCwgdGhpcy5sb2dnZXIsIHRoaXMucGVyZm9ybWFuY2VDbGllbnQsIHRoaXMuY29ycmVsYXRpb25JZCkoeyAuLi5yZXF1ZXN0LCBjb3JyZWxhdGlvbklkOiB0aGlzLmNvcnJlbGF0aW9uSWQgfSwgdGhpcy5jb25maWcsIHRoaXMucGVyZm9ybWFuY2VDbGllbnQsIHRoaXMubG9nZ2VyKTtcclxuICAgICAgICBjb25zdCB2YWxpZGF0ZWRSZXF1ZXN0ID0ge1xyXG4gICAgICAgICAgICAuLi5iYXNlUmVxdWVzdCxcclxuICAgICAgICAgICAgcmVkaXJlY3RVcmk6IHJlZGlyZWN0VXJpLFxyXG4gICAgICAgICAgICBzdGF0ZTogc3RhdGUsXHJcbiAgICAgICAgICAgIG5vbmNlOiByZXF1ZXN0Lm5vbmNlIHx8IGNyZWF0ZU5ld0d1aWQoKSxcclxuICAgICAgICAgICAgcmVzcG9uc2VNb2RlOiB0aGlzLmNvbmZpZy5hdXRoLk9JRENPcHRpb25zXHJcbiAgICAgICAgICAgICAgICAuc2VydmVyUmVzcG9uc2VUeXBlLFxyXG4gICAgICAgIH07XHJcbiAgICAgICAgLy8gU2tpcCBhY3RpdmUgYWNjb3VudCBsb29rdXAgaWYgZWl0aGVyIGxvZ2luIGhpbnQgb3Igc2Vzc2lvbiBpZCBpcyBzZXRcclxuICAgICAgICBpZiAocmVxdWVzdC5sb2dpbkhpbnQgfHwgcmVxdWVzdC5zaWQpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHZhbGlkYXRlZFJlcXVlc3Q7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNvbnN0IGFjY291bnQgPSByZXF1ZXN0LmFjY291bnQgfHwgdGhpcy5icm93c2VyU3RvcmFnZS5nZXRBY3RpdmVBY2NvdW50KCk7XHJcbiAgICAgICAgaWYgKGFjY291bnQpIHtcclxuICAgICAgICAgICAgdGhpcy5sb2dnZXIudmVyYm9zZShcIlNldHRpbmcgdmFsaWRhdGVkIHJlcXVlc3QgYWNjb3VudFwiLCB0aGlzLmNvcnJlbGF0aW9uSWQpO1xyXG4gICAgICAgICAgICB0aGlzLmxvZ2dlci52ZXJib3NlUGlpKGBTZXR0aW5nIHZhbGlkYXRlZCByZXF1ZXN0IGFjY291bnQ6ICR7YWNjb3VudC5ob21lQWNjb3VudElkfWAsIHRoaXMuY29ycmVsYXRpb25JZCk7XHJcbiAgICAgICAgICAgIHZhbGlkYXRlZFJlcXVlc3QuYWNjb3VudCA9IGFjY291bnQ7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIC8vIENoZWNrIGZvciBBREFML01TQUwgdjEgU1NPXHJcbiAgICAgICAgaWYgKCF2YWxpZGF0ZWRSZXF1ZXN0LmxvZ2luSGludCAmJiAhYWNjb3VudCkge1xyXG4gICAgICAgICAgICBjb25zdCBsZWdhY3lMb2dpbkhpbnQgPSB0aGlzLmJyb3dzZXJTdG9yYWdlLmdldExlZ2FjeUxvZ2luSGludCgpO1xyXG4gICAgICAgICAgICBpZiAobGVnYWN5TG9naW5IaW50KSB7XHJcbiAgICAgICAgICAgICAgICB2YWxpZGF0ZWRSZXF1ZXN0LmxvZ2luSGludCA9IGxlZ2FjeUxvZ2luSGludDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gdmFsaWRhdGVkUmVxdWVzdDtcclxuICAgIH1cclxufVxuXG5leHBvcnQgeyBTdGFuZGFyZEludGVyYWN0aW9uQ2xpZW50IH07XG4vLyMgc291cmNlTWFwcGluZ1VSTD1TdGFuZGFyZEludGVyYWN0aW9uQ2xpZW50Lm1qcy5tYXBcbiIsIi8qISBAYXp1cmUvbXNhbC1icm93c2VyIHYzLjI4LjEgMjAyNS0wMS0xNCAqL1xuJ3VzZSBzdHJpY3QnO1xuLypcclxuICogQ29weXJpZ2h0IChjKSBNaWNyb3NvZnQgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuXHJcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgTGljZW5zZS5cclxuICovXHJcbmNvbnN0IGNvbnRlbnRFcnJvciA9IFwiQ29udGVudEVycm9yXCI7XHJcbmNvbnN0IHVzZXJTd2l0Y2ggPSBcInVzZXJfc3dpdGNoXCI7XG5cbmV4cG9ydCB7IGNvbnRlbnRFcnJvciwgdXNlclN3aXRjaCB9O1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9TmF0aXZlQXV0aEVycm9yQ29kZXMubWpzLm1hcFxuIiwiLyohIEBhenVyZS9tc2FsLWJyb3dzZXIgdjMuMjguMSAyMDI1LTAxLTE0ICovXG4ndXNlIHN0cmljdCc7XG4vKlxyXG4gKiBDb3B5cmlnaHQgKGMpIE1pY3Jvc29mdCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cclxuICogTGljZW5zZWQgdW5kZXIgdGhlIE1JVCBMaWNlbnNlLlxyXG4gKi9cclxuLy8gU3RhdHVzIENvZGVzIHRoYXQgY2FuIGJlIHRocm93biBieSBXQU1cclxuY29uc3QgVVNFUl9JTlRFUkFDVElPTl9SRVFVSVJFRCA9IFwiVVNFUl9JTlRFUkFDVElPTl9SRVFVSVJFRFwiO1xyXG5jb25zdCBVU0VSX0NBTkNFTCA9IFwiVVNFUl9DQU5DRUxcIjtcclxuY29uc3QgTk9fTkVUV09SSyA9IFwiTk9fTkVUV09SS1wiO1xyXG5jb25zdCBQRVJTSVNURU5UX0VSUk9SID0gXCJQRVJTSVNURU5UX0VSUk9SXCI7XHJcbmNvbnN0IERJU0FCTEVEID0gXCJESVNBQkxFRFwiO1xyXG5jb25zdCBBQ0NPVU5UX1VOQVZBSUxBQkxFID0gXCJBQ0NPVU5UX1VOQVZBSUxBQkxFXCI7XG5cbmV4cG9ydCB7IEFDQ09VTlRfVU5BVkFJTEFCTEUsIERJU0FCTEVELCBOT19ORVRXT1JLLCBQRVJTSVNURU5UX0VSUk9SLCBVU0VSX0NBTkNFTCwgVVNFUl9JTlRFUkFDVElPTl9SRVFVSVJFRCB9O1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9TmF0aXZlU3RhdHVzQ29kZXMubWpzLm1hcFxuIiwiLyohIEBhenVyZS9tc2FsLWJyb3dzZXIgdjMuMjguMSAyMDI1LTAxLTE0ICovXG4ndXNlIHN0cmljdCc7XG5pbXBvcnQgeyBBdXRoRXJyb3IsIEludGVyYWN0aW9uUmVxdWlyZWRBdXRoRXJyb3IsIGNyZWF0ZUludGVyYWN0aW9uUmVxdWlyZWRBdXRoRXJyb3IsIEludGVyYWN0aW9uUmVxdWlyZWRBdXRoRXJyb3JDb2RlcyB9IGZyb20gJ0BhenVyZS9tc2FsLWNvbW1vbi9icm93c2VyJztcbmltcG9ydCB7IGNyZWF0ZUJyb3dzZXJBdXRoRXJyb3IgfSBmcm9tICcuL0Jyb3dzZXJBdXRoRXJyb3IubWpzJztcbmltcG9ydCB7IGNvbnRlbnRFcnJvciwgdXNlclN3aXRjaCB9IGZyb20gJy4vTmF0aXZlQXV0aEVycm9yQ29kZXMubWpzJztcbmltcG9ydCB7IFBFUlNJU1RFTlRfRVJST1IsIERJU0FCTEVELCBOT19ORVRXT1JLLCBVU0VSX0NBTkNFTCwgVVNFUl9JTlRFUkFDVElPTl9SRVFVSVJFRCwgQUNDT1VOVF9VTkFWQUlMQUJMRSB9IGZyb20gJy4uL2Jyb2tlci9uYXRpdmVCcm9rZXIvTmF0aXZlU3RhdHVzQ29kZXMubWpzJztcbmltcG9ydCB7IG5vTmV0d29ya0Nvbm5lY3Rpdml0eSwgdXNlckNhbmNlbGxlZCB9IGZyb20gJy4vQnJvd3NlckF1dGhFcnJvckNvZGVzLm1qcyc7XG5cbi8qXHJcbiAqIENvcHlyaWdodCAoYykgTWljcm9zb2Z0IENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLlxyXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgTUlUIExpY2Vuc2UuXHJcbiAqL1xyXG5jb25zdCBJTlZBTElEX01FVEhPRF9FUlJPUiA9IC0yMTQ3MTg2OTQzO1xyXG5jb25zdCBOYXRpdmVBdXRoRXJyb3JNZXNzYWdlcyA9IHtcclxuICAgIFt1c2VyU3dpdGNoXTogXCJVc2VyIGF0dGVtcHRlZCB0byBzd2l0Y2ggYWNjb3VudHMgaW4gdGhlIG5hdGl2ZSBicm9rZXIsIHdoaWNoIGlzIG5vdCBhbGxvd2VkLiBBbGwgbmV3IGFjY291bnRzIG11c3Qgc2lnbi1pbiB0aHJvdWdoIHRoZSBzdGFuZGFyZCB3ZWIgZmxvdyBmaXJzdCwgcGxlYXNlIHRyeSBhZ2Fpbi5cIixcclxufTtcclxuY2xhc3MgTmF0aXZlQXV0aEVycm9yIGV4dGVuZHMgQXV0aEVycm9yIHtcclxuICAgIGNvbnN0cnVjdG9yKGVycm9yQ29kZSwgZGVzY3JpcHRpb24sIGV4dCkge1xyXG4gICAgICAgIHN1cGVyKGVycm9yQ29kZSwgZGVzY3JpcHRpb24pO1xyXG4gICAgICAgIE9iamVjdC5zZXRQcm90b3R5cGVPZih0aGlzLCBOYXRpdmVBdXRoRXJyb3IucHJvdG90eXBlKTtcclxuICAgICAgICB0aGlzLm5hbWUgPSBcIk5hdGl2ZUF1dGhFcnJvclwiO1xyXG4gICAgICAgIHRoaXMuZXh0ID0gZXh0O1xyXG4gICAgfVxyXG59XHJcbi8qKlxyXG4gKiBUaGVzZSBlcnJvcnMgc2hvdWxkIHJlc3VsdCBpbiBhIGZhbGxiYWNrIHRvIHRoZSAnc3RhbmRhcmQnIGJyb3dzZXIgYmFzZWQgYXV0aCBmbG93LlxyXG4gKi9cclxuZnVuY3Rpb24gaXNGYXRhbE5hdGl2ZUF1dGhFcnJvcihlcnJvcikge1xyXG4gICAgaWYgKGVycm9yLmV4dCAmJlxyXG4gICAgICAgIGVycm9yLmV4dC5zdGF0dXMgJiZcclxuICAgICAgICAoZXJyb3IuZXh0LnN0YXR1cyA9PT0gUEVSU0lTVEVOVF9FUlJPUiB8fFxyXG4gICAgICAgICAgICBlcnJvci5leHQuc3RhdHVzID09PSBESVNBQkxFRCkpIHtcclxuICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgIH1cclxuICAgIGlmIChlcnJvci5leHQgJiZcclxuICAgICAgICBlcnJvci5leHQuZXJyb3IgJiZcclxuICAgICAgICBlcnJvci5leHQuZXJyb3IgPT09IElOVkFMSURfTUVUSE9EX0VSUk9SKSB7XHJcbiAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICB9XHJcbiAgICBzd2l0Y2ggKGVycm9yLmVycm9yQ29kZSkge1xyXG4gICAgICAgIGNhc2UgY29udGVudEVycm9yOlxyXG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgICAgICBkZWZhdWx0OlxyXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcbn1cclxuLyoqXHJcbiAqIENyZWF0ZSB0aGUgYXBwcm9wcmlhdGUgZXJyb3Igb2JqZWN0IGJhc2VkIG9uIHRoZSBXQU0gc3RhdHVzIGNvZGUuXHJcbiAqIEBwYXJhbSBjb2RlXHJcbiAqIEBwYXJhbSBkZXNjcmlwdGlvblxyXG4gKiBAcGFyYW0gZXh0XHJcbiAqIEByZXR1cm5zXHJcbiAqL1xyXG5mdW5jdGlvbiBjcmVhdGVOYXRpdmVBdXRoRXJyb3IoY29kZSwgZGVzY3JpcHRpb24sIGV4dCkge1xyXG4gICAgaWYgKGV4dCAmJiBleHQuc3RhdHVzKSB7XHJcbiAgICAgICAgc3dpdGNoIChleHQuc3RhdHVzKSB7XHJcbiAgICAgICAgICAgIGNhc2UgQUNDT1VOVF9VTkFWQUlMQUJMRTpcclxuICAgICAgICAgICAgICAgIHJldHVybiBjcmVhdGVJbnRlcmFjdGlvblJlcXVpcmVkQXV0aEVycm9yKEludGVyYWN0aW9uUmVxdWlyZWRBdXRoRXJyb3JDb2Rlcy5uYXRpdmVBY2NvdW50VW5hdmFpbGFibGUpO1xyXG4gICAgICAgICAgICBjYXNlIFVTRVJfSU5URVJBQ1RJT05fUkVRVUlSRUQ6XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gbmV3IEludGVyYWN0aW9uUmVxdWlyZWRBdXRoRXJyb3IoY29kZSwgZGVzY3JpcHRpb24pO1xyXG4gICAgICAgICAgICBjYXNlIFVTRVJfQ0FOQ0VMOlxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGNyZWF0ZUJyb3dzZXJBdXRoRXJyb3IodXNlckNhbmNlbGxlZCk7XHJcbiAgICAgICAgICAgIGNhc2UgTk9fTkVUV09SSzpcclxuICAgICAgICAgICAgICAgIHJldHVybiBjcmVhdGVCcm93c2VyQXV0aEVycm9yKG5vTmV0d29ya0Nvbm5lY3Rpdml0eSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIG5ldyBOYXRpdmVBdXRoRXJyb3IoY29kZSwgTmF0aXZlQXV0aEVycm9yTWVzc2FnZXNbY29kZV0gfHwgZGVzY3JpcHRpb24sIGV4dCk7XHJcbn1cblxuZXhwb3J0IHsgTmF0aXZlQXV0aEVycm9yLCBOYXRpdmVBdXRoRXJyb3JNZXNzYWdlcywgY3JlYXRlTmF0aXZlQXV0aEVycm9yLCBpc0ZhdGFsTmF0aXZlQXV0aEVycm9yIH07XG4vLyMgc291cmNlTWFwcGluZ1VSTD1OYXRpdmVBdXRoRXJyb3IubWpzLm1hcFxuIiwiLyohIEBhenVyZS9tc2FsLWNvbW1vbiB2MTQuMTYuMCAyMDI0LTExLTA1ICovXG4ndXNlIHN0cmljdCc7XG5pbXBvcnQgeyBpc09pZGNQcm90b2NvbE1vZGUgfSBmcm9tICcuLi9jb25maWcvQ2xpZW50Q29uZmlndXJhdGlvbi5tanMnO1xuaW1wb3J0IHsgQmFzZUNsaWVudCB9IGZyb20gJy4vQmFzZUNsaWVudC5tanMnO1xuaW1wb3J0IHsgUmVxdWVzdFBhcmFtZXRlckJ1aWxkZXIgfSBmcm9tICcuLi9yZXF1ZXN0L1JlcXVlc3RQYXJhbWV0ZXJCdWlsZGVyLm1qcyc7XG5pbXBvcnQgeyBHcmFudFR5cGUsIEF1dGhlbnRpY2F0aW9uU2NoZW1lLCBIZWFkZXJOYW1lcywgRXJyb3JzIH0gZnJvbSAnLi4vdXRpbHMvQ29uc3RhbnRzLm1qcyc7XG5pbXBvcnQgeyBDTElFTlRfSUQgfSBmcm9tICcuLi9jb25zdGFudHMvQUFEU2VydmVyUGFyYW1LZXlzLm1qcyc7XG5pbXBvcnQgeyBSZXNwb25zZUhhbmRsZXIgfSBmcm9tICcuLi9yZXNwb25zZS9SZXNwb25zZUhhbmRsZXIubWpzJztcbmltcG9ydCB7IFBvcFRva2VuR2VuZXJhdG9yIH0gZnJvbSAnLi4vY3J5cHRvL1BvcFRva2VuR2VuZXJhdG9yLm1qcyc7XG5pbXBvcnQgeyBTdHJpbmdVdGlscyB9IGZyb20gJy4uL3V0aWxzL1N0cmluZ1V0aWxzLm1qcyc7XG5pbXBvcnQgeyBjcmVhdGVDbGllbnRDb25maWd1cmF0aW9uRXJyb3IgfSBmcm9tICcuLi9lcnJvci9DbGllbnRDb25maWd1cmF0aW9uRXJyb3IubWpzJztcbmltcG9ydCB7IGNyZWF0ZUNsaWVudEF1dGhFcnJvciB9IGZyb20gJy4uL2Vycm9yL0NsaWVudEF1dGhFcnJvci5tanMnO1xuaW1wb3J0IHsgU2VydmVyRXJyb3IgfSBmcm9tICcuLi9lcnJvci9TZXJ2ZXJFcnJvci5tanMnO1xuaW1wb3J0IHsgbm93U2Vjb25kcywgaXNUb2tlbkV4cGlyZWQgfSBmcm9tICcuLi91dGlscy9UaW1lVXRpbHMubWpzJztcbmltcG9ydCB7IFVybFN0cmluZyB9IGZyb20gJy4uL3VybC9VcmxTdHJpbmcubWpzJztcbmltcG9ydCB7IENjc0NyZWRlbnRpYWxUeXBlIH0gZnJvbSAnLi4vYWNjb3VudC9DY3NDcmVkZW50aWFsLm1qcyc7XG5pbXBvcnQgeyBidWlsZENsaWVudEluZm9Gcm9tSG9tZUFjY291bnRJZCB9IGZyb20gJy4uL2FjY291bnQvQ2xpZW50SW5mby5tanMnO1xuaW1wb3J0IHsgY3JlYXRlSW50ZXJhY3Rpb25SZXF1aXJlZEF1dGhFcnJvciwgSW50ZXJhY3Rpb25SZXF1aXJlZEF1dGhFcnJvciB9IGZyb20gJy4uL2Vycm9yL0ludGVyYWN0aW9uUmVxdWlyZWRBdXRoRXJyb3IubWpzJztcbmltcG9ydCB7IFBlcmZvcm1hbmNlRXZlbnRzIH0gZnJvbSAnLi4vdGVsZW1ldHJ5L3BlcmZvcm1hbmNlL1BlcmZvcm1hbmNlRXZlbnQubWpzJztcbmltcG9ydCB7IGludm9rZUFzeW5jLCBpbnZva2UgfSBmcm9tICcuLi91dGlscy9GdW5jdGlvbldyYXBwZXJzLm1qcyc7XG5pbXBvcnQgeyBnZW5lcmF0ZUNyZWRlbnRpYWxLZXkgfSBmcm9tICcuLi9jYWNoZS91dGlscy9DYWNoZUhlbHBlcnMubWpzJztcbmltcG9ydCB7IGdldENsaWVudEFzc2VydGlvbiB9IGZyb20gJy4uL3V0aWxzL0NsaWVudEFzc2VydGlvblV0aWxzLm1qcyc7XG5pbXBvcnQgeyB0b2tlblJlcXVlc3RFbXB0eSwgbWlzc2luZ1NzaEp3ayB9IGZyb20gJy4uL2Vycm9yL0NsaWVudENvbmZpZ3VyYXRpb25FcnJvckNvZGVzLm1qcyc7XG5pbXBvcnQgeyBub0FjY291bnRJblNpbGVudFJlcXVlc3QgfSBmcm9tICcuLi9lcnJvci9DbGllbnRBdXRoRXJyb3JDb2Rlcy5tanMnO1xuaW1wb3J0IHsgbm9Ub2tlbnNGb3VuZCwgcmVmcmVzaFRva2VuRXhwaXJlZCwgYmFkVG9rZW4gfSBmcm9tICcuLi9lcnJvci9JbnRlcmFjdGlvblJlcXVpcmVkQXV0aEVycm9yQ29kZXMubWpzJztcblxuLypcclxuICogQ29weXJpZ2h0IChjKSBNaWNyb3NvZnQgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuXHJcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgTGljZW5zZS5cclxuICovXHJcbmNvbnN0IERFRkFVTFRfUkVGUkVTSF9UT0tFTl9FWFBJUkFUSU9OX09GRlNFVF9TRUNPTkRTID0gMzAwOyAvLyA1IE1pbnV0ZXNcclxuLyoqXHJcbiAqIE9BdXRoMi4wIHJlZnJlc2ggdG9rZW4gY2xpZW50XHJcbiAqIEBpbnRlcm5hbFxyXG4gKi9cclxuY2xhc3MgUmVmcmVzaFRva2VuQ2xpZW50IGV4dGVuZHMgQmFzZUNsaWVudCB7XHJcbiAgICBjb25zdHJ1Y3Rvcihjb25maWd1cmF0aW9uLCBwZXJmb3JtYW5jZUNsaWVudCkge1xyXG4gICAgICAgIHN1cGVyKGNvbmZpZ3VyYXRpb24sIHBlcmZvcm1hbmNlQ2xpZW50KTtcclxuICAgIH1cclxuICAgIGFzeW5jIGFjcXVpcmVUb2tlbihyZXF1ZXN0KSB7XHJcbiAgICAgICAgdGhpcy5wZXJmb3JtYW5jZUNsaWVudD8uYWRkUXVldWVNZWFzdXJlbWVudChQZXJmb3JtYW5jZUV2ZW50cy5SZWZyZXNoVG9rZW5DbGllbnRBY3F1aXJlVG9rZW4sIHJlcXVlc3QuY29ycmVsYXRpb25JZCk7XHJcbiAgICAgICAgY29uc3QgcmVxVGltZXN0YW1wID0gbm93U2Vjb25kcygpO1xyXG4gICAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgaW52b2tlQXN5bmModGhpcy5leGVjdXRlVG9rZW5SZXF1ZXN0LmJpbmQodGhpcyksIFBlcmZvcm1hbmNlRXZlbnRzLlJlZnJlc2hUb2tlbkNsaWVudEV4ZWN1dGVUb2tlblJlcXVlc3QsIHRoaXMubG9nZ2VyLCB0aGlzLnBlcmZvcm1hbmNlQ2xpZW50LCByZXF1ZXN0LmNvcnJlbGF0aW9uSWQpKHJlcXVlc3QsIHRoaXMuYXV0aG9yaXR5KTtcclxuICAgICAgICAvLyBSZXRyaWV2ZSByZXF1ZXN0SWQgZnJvbSByZXNwb25zZSBoZWFkZXJzXHJcbiAgICAgICAgY29uc3QgcmVxdWVzdElkID0gcmVzcG9uc2UuaGVhZGVycz8uW0hlYWRlck5hbWVzLlhfTVNfUkVRVUVTVF9JRF07XHJcbiAgICAgICAgY29uc3QgcmVzcG9uc2VIYW5kbGVyID0gbmV3IFJlc3BvbnNlSGFuZGxlcih0aGlzLmNvbmZpZy5hdXRoT3B0aW9ucy5jbGllbnRJZCwgdGhpcy5jYWNoZU1hbmFnZXIsIHRoaXMuY3J5cHRvVXRpbHMsIHRoaXMubG9nZ2VyLCB0aGlzLmNvbmZpZy5zZXJpYWxpemFibGVDYWNoZSwgdGhpcy5jb25maWcucGVyc2lzdGVuY2VQbHVnaW4pO1xyXG4gICAgICAgIHJlc3BvbnNlSGFuZGxlci52YWxpZGF0ZVRva2VuUmVzcG9uc2UocmVzcG9uc2UuYm9keSk7XHJcbiAgICAgICAgcmV0dXJuIGludm9rZUFzeW5jKHJlc3BvbnNlSGFuZGxlci5oYW5kbGVTZXJ2ZXJUb2tlblJlc3BvbnNlLmJpbmQocmVzcG9uc2VIYW5kbGVyKSwgUGVyZm9ybWFuY2VFdmVudHMuSGFuZGxlU2VydmVyVG9rZW5SZXNwb25zZSwgdGhpcy5sb2dnZXIsIHRoaXMucGVyZm9ybWFuY2VDbGllbnQsIHJlcXVlc3QuY29ycmVsYXRpb25JZCkocmVzcG9uc2UuYm9keSwgdGhpcy5hdXRob3JpdHksIHJlcVRpbWVzdGFtcCwgcmVxdWVzdCwgdW5kZWZpbmVkLCB1bmRlZmluZWQsIHRydWUsIHJlcXVlc3QuZm9yY2VDYWNoZSwgcmVxdWVzdElkKTtcclxuICAgIH1cclxuICAgIC8qKlxyXG4gICAgICogR2V0cyBjYWNoZWQgcmVmcmVzaCB0b2tlbiBhbmQgYXR0YWNoZXMgdG8gcmVxdWVzdCwgdGhlbiBjYWxscyBhY3F1aXJlVG9rZW4gQVBJXHJcbiAgICAgKiBAcGFyYW0gcmVxdWVzdFxyXG4gICAgICovXHJcbiAgICBhc3luYyBhY3F1aXJlVG9rZW5CeVJlZnJlc2hUb2tlbihyZXF1ZXN0KSB7XHJcbiAgICAgICAgLy8gQ2Fubm90IHJlbmV3IHRva2VuIGlmIG5vIHJlcXVlc3Qgb2JqZWN0IGlzIGdpdmVuLlxyXG4gICAgICAgIGlmICghcmVxdWVzdCkge1xyXG4gICAgICAgICAgICB0aHJvdyBjcmVhdGVDbGllbnRDb25maWd1cmF0aW9uRXJyb3IodG9rZW5SZXF1ZXN0RW1wdHkpO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLnBlcmZvcm1hbmNlQ2xpZW50Py5hZGRRdWV1ZU1lYXN1cmVtZW50KFBlcmZvcm1hbmNlRXZlbnRzLlJlZnJlc2hUb2tlbkNsaWVudEFjcXVpcmVUb2tlbkJ5UmVmcmVzaFRva2VuLCByZXF1ZXN0LmNvcnJlbGF0aW9uSWQpO1xyXG4gICAgICAgIC8vIFdlIGN1cnJlbnRseSBkbyBub3Qgc3VwcG9ydCBzaWxlbnQgZmxvdyBmb3IgYWNjb3VudCA9PT0gbnVsbCB1c2UgY2FzZXM7IFRoaXMgd2lsbCBiZSByZXZpc2l0ZWQgZm9yIGNvbmZpZGVudGlhbCBmbG93IHVzZWNhc2VzXHJcbiAgICAgICAgaWYgKCFyZXF1ZXN0LmFjY291bnQpIHtcclxuICAgICAgICAgICAgdGhyb3cgY3JlYXRlQ2xpZW50QXV0aEVycm9yKG5vQWNjb3VudEluU2lsZW50UmVxdWVzdCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIC8vIHRyeSBjaGVja2luZyBpZiBGT0NJIGlzIGVuYWJsZWQgZm9yIHRoZSBnaXZlbiBhcHBsaWNhdGlvblxyXG4gICAgICAgIGNvbnN0IGlzRk9DSSA9IHRoaXMuY2FjaGVNYW5hZ2VyLmlzQXBwTWV0YWRhdGFGT0NJKHJlcXVlc3QuYWNjb3VudC5lbnZpcm9ubWVudCk7XHJcbiAgICAgICAgLy8gaWYgdGhlIGFwcCBpcyBwYXJ0IG9mIHRoZSBmYW1pbHksIHJldHJpdmUgYSBGYW1pbHkgcmVmcmVzaCB0b2tlbiBpZiBwcmVzZW50IGFuZCBtYWtlIGEgcmVmcmVzaFRva2VuUmVxdWVzdFxyXG4gICAgICAgIGlmIChpc0ZPQ0kpIHtcclxuICAgICAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgICAgIHJldHVybiBhd2FpdCBpbnZva2VBc3luYyh0aGlzLmFjcXVpcmVUb2tlbldpdGhDYWNoZWRSZWZyZXNoVG9rZW4uYmluZCh0aGlzKSwgUGVyZm9ybWFuY2VFdmVudHMuUmVmcmVzaFRva2VuQ2xpZW50QWNxdWlyZVRva2VuV2l0aENhY2hlZFJlZnJlc2hUb2tlbiwgdGhpcy5sb2dnZXIsIHRoaXMucGVyZm9ybWFuY2VDbGllbnQsIHJlcXVlc3QuY29ycmVsYXRpb25JZCkocmVxdWVzdCwgdHJ1ZSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgY2F0Y2ggKGUpIHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IG5vRmFtaWx5UlRJbkNhY2hlID0gZSBpbnN0YW5jZW9mIEludGVyYWN0aW9uUmVxdWlyZWRBdXRoRXJyb3IgJiZcclxuICAgICAgICAgICAgICAgICAgICBlLmVycm9yQ29kZSA9PT1cclxuICAgICAgICAgICAgICAgICAgICAgICAgbm9Ub2tlbnNGb3VuZDtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGNsaWVudE1pc21hdGNoRXJyb3JXaXRoRmFtaWx5UlQgPSBlIGluc3RhbmNlb2YgU2VydmVyRXJyb3IgJiZcclxuICAgICAgICAgICAgICAgICAgICBlLmVycm9yQ29kZSA9PT0gRXJyb3JzLklOVkFMSURfR1JBTlRfRVJST1IgJiZcclxuICAgICAgICAgICAgICAgICAgICBlLnN1YkVycm9yID09PSBFcnJvcnMuQ0xJRU5UX01JU01BVENIX0VSUk9SO1xyXG4gICAgICAgICAgICAgICAgLy8gaWYgZmFtaWx5IFJlZnJlc2ggVG9rZW4gKEZSVCkgY2FjaGUgYWNxdWlzaXRpb24gZmFpbHMgb3IgaWYgY2xpZW50X21pc21hdGNoIGVycm9yIGlzIHNlZW4gd2l0aCBGUlQsIHJlYXR0ZW1wdCB3aXRoIGFwcGxpY2F0aW9uIFJlZnJlc2ggVG9rZW4gKEFSVClcclxuICAgICAgICAgICAgICAgIGlmIChub0ZhbWlseVJUSW5DYWNoZSB8fCBjbGllbnRNaXNtYXRjaEVycm9yV2l0aEZhbWlseVJUKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGludm9rZUFzeW5jKHRoaXMuYWNxdWlyZVRva2VuV2l0aENhY2hlZFJlZnJlc2hUb2tlbi5iaW5kKHRoaXMpLCBQZXJmb3JtYW5jZUV2ZW50cy5SZWZyZXNoVG9rZW5DbGllbnRBY3F1aXJlVG9rZW5XaXRoQ2FjaGVkUmVmcmVzaFRva2VuLCB0aGlzLmxvZ2dlciwgdGhpcy5wZXJmb3JtYW5jZUNsaWVudCwgcmVxdWVzdC5jb3JyZWxhdGlvbklkKShyZXF1ZXN0LCBmYWxzZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgLy8gdGhyb3cgaW4gYWxsIG90aGVyIGNhc2VzXHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICB0aHJvdyBlO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIC8vIGZhbGwgYmFjayB0byBhcHBsaWNhdGlvbiByZWZyZXNoIHRva2VuIGFjcXVpc2l0aW9uXHJcbiAgICAgICAgcmV0dXJuIGludm9rZUFzeW5jKHRoaXMuYWNxdWlyZVRva2VuV2l0aENhY2hlZFJlZnJlc2hUb2tlbi5iaW5kKHRoaXMpLCBQZXJmb3JtYW5jZUV2ZW50cy5SZWZyZXNoVG9rZW5DbGllbnRBY3F1aXJlVG9rZW5XaXRoQ2FjaGVkUmVmcmVzaFRva2VuLCB0aGlzLmxvZ2dlciwgdGhpcy5wZXJmb3JtYW5jZUNsaWVudCwgcmVxdWVzdC5jb3JyZWxhdGlvbklkKShyZXF1ZXN0LCBmYWxzZSk7XHJcbiAgICB9XHJcbiAgICAvKipcclxuICAgICAqIG1ha2VzIGEgbmV0d29yayBjYWxsIHRvIGFjcXVpcmUgdG9rZW5zIGJ5IGV4Y2hhbmdpbmcgUmVmcmVzaFRva2VuIGF2YWlsYWJsZSBpbiB1c2VyQ2FjaGU7IHRocm93cyBpZiByZWZyZXNoIHRva2VuIGlzIG5vdCBjYWNoZWRcclxuICAgICAqIEBwYXJhbSByZXF1ZXN0XHJcbiAgICAgKi9cclxuICAgIGFzeW5jIGFjcXVpcmVUb2tlbldpdGhDYWNoZWRSZWZyZXNoVG9rZW4ocmVxdWVzdCwgZm9jaSkge1xyXG4gICAgICAgIHRoaXMucGVyZm9ybWFuY2VDbGllbnQ/LmFkZFF1ZXVlTWVhc3VyZW1lbnQoUGVyZm9ybWFuY2VFdmVudHMuUmVmcmVzaFRva2VuQ2xpZW50QWNxdWlyZVRva2VuV2l0aENhY2hlZFJlZnJlc2hUb2tlbiwgcmVxdWVzdC5jb3JyZWxhdGlvbklkKTtcclxuICAgICAgICAvLyBmZXRjaGVzIGZhbWlseSBSVCBvciBhcHBsaWNhdGlvbiBSVCBiYXNlZCBvbiBGT0NJIHZhbHVlXHJcbiAgICAgICAgY29uc3QgcmVmcmVzaFRva2VuID0gaW52b2tlKHRoaXMuY2FjaGVNYW5hZ2VyLmdldFJlZnJlc2hUb2tlbi5iaW5kKHRoaXMuY2FjaGVNYW5hZ2VyKSwgUGVyZm9ybWFuY2VFdmVudHMuQ2FjaGVNYW5hZ2VyR2V0UmVmcmVzaFRva2VuLCB0aGlzLmxvZ2dlciwgdGhpcy5wZXJmb3JtYW5jZUNsaWVudCwgcmVxdWVzdC5jb3JyZWxhdGlvbklkKShyZXF1ZXN0LmFjY291bnQsIGZvY2ksIHVuZGVmaW5lZCwgdGhpcy5wZXJmb3JtYW5jZUNsaWVudCwgcmVxdWVzdC5jb3JyZWxhdGlvbklkKTtcclxuICAgICAgICBpZiAoIXJlZnJlc2hUb2tlbikge1xyXG4gICAgICAgICAgICB0aHJvdyBjcmVhdGVJbnRlcmFjdGlvblJlcXVpcmVkQXV0aEVycm9yKG5vVG9rZW5zRm91bmQpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAocmVmcmVzaFRva2VuLmV4cGlyZXNPbiAmJlxyXG4gICAgICAgICAgICBpc1Rva2VuRXhwaXJlZChyZWZyZXNoVG9rZW4uZXhwaXJlc09uLCByZXF1ZXN0LnJlZnJlc2hUb2tlbkV4cGlyYXRpb25PZmZzZXRTZWNvbmRzIHx8XHJcbiAgICAgICAgICAgICAgICBERUZBVUxUX1JFRlJFU0hfVE9LRU5fRVhQSVJBVElPTl9PRkZTRVRfU0VDT05EUykpIHtcclxuICAgICAgICAgICAgdGhyb3cgY3JlYXRlSW50ZXJhY3Rpb25SZXF1aXJlZEF1dGhFcnJvcihyZWZyZXNoVG9rZW5FeHBpcmVkKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgLy8gYXR0YWNoIGNhY2hlZCBSVCBzaXplIHRvIHRoZSBjdXJyZW50IG1lYXN1cmVtZW50XHJcbiAgICAgICAgY29uc3QgcmVmcmVzaFRva2VuUmVxdWVzdCA9IHtcclxuICAgICAgICAgICAgLi4ucmVxdWVzdCxcclxuICAgICAgICAgICAgcmVmcmVzaFRva2VuOiByZWZyZXNoVG9rZW4uc2VjcmV0LFxyXG4gICAgICAgICAgICBhdXRoZW50aWNhdGlvblNjaGVtZTogcmVxdWVzdC5hdXRoZW50aWNhdGlvblNjaGVtZSB8fCBBdXRoZW50aWNhdGlvblNjaGVtZS5CRUFSRVIsXHJcbiAgICAgICAgICAgIGNjc0NyZWRlbnRpYWw6IHtcclxuICAgICAgICAgICAgICAgIGNyZWRlbnRpYWw6IHJlcXVlc3QuYWNjb3VudC5ob21lQWNjb3VudElkLFxyXG4gICAgICAgICAgICAgICAgdHlwZTogQ2NzQ3JlZGVudGlhbFR5cGUuSE9NRV9BQ0NPVU5UX0lELFxyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgIH07XHJcbiAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgcmV0dXJuIGF3YWl0IGludm9rZUFzeW5jKHRoaXMuYWNxdWlyZVRva2VuLmJpbmQodGhpcyksIFBlcmZvcm1hbmNlRXZlbnRzLlJlZnJlc2hUb2tlbkNsaWVudEFjcXVpcmVUb2tlbiwgdGhpcy5sb2dnZXIsIHRoaXMucGVyZm9ybWFuY2VDbGllbnQsIHJlcXVlc3QuY29ycmVsYXRpb25JZCkocmVmcmVzaFRva2VuUmVxdWVzdCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNhdGNoIChlKSB7XHJcbiAgICAgICAgICAgIGlmIChlIGluc3RhbmNlb2YgSW50ZXJhY3Rpb25SZXF1aXJlZEF1dGhFcnJvciAmJlxyXG4gICAgICAgICAgICAgICAgZS5zdWJFcnJvciA9PT0gYmFkVG9rZW4pIHtcclxuICAgICAgICAgICAgICAgIC8vIFJlbW92ZSBiYWQgcmVmcmVzaCB0b2tlbiBmcm9tIGNhY2hlXHJcbiAgICAgICAgICAgICAgICB0aGlzLmxvZ2dlci52ZXJib3NlKFwiYWNxdWlyZVRva2VuV2l0aFJlZnJlc2hUb2tlbjogYmFkIHJlZnJlc2ggdG9rZW4sIHJlbW92aW5nIGZyb20gY2FjaGVcIik7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBiYWRSZWZyZXNoVG9rZW5LZXkgPSBnZW5lcmF0ZUNyZWRlbnRpYWxLZXkocmVmcmVzaFRva2VuKTtcclxuICAgICAgICAgICAgICAgIHRoaXMuY2FjaGVNYW5hZ2VyLnJlbW92ZVJlZnJlc2hUb2tlbihiYWRSZWZyZXNoVG9rZW5LZXkpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHRocm93IGU7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgLyoqXHJcbiAgICAgKiBDb25zdHJ1Y3RzIHRoZSBuZXR3b3JrIG1lc3NhZ2UgYW5kIG1ha2VzIGEgTlcgY2FsbCB0byB0aGUgdW5kZXJseWluZyBzZWN1cmUgdG9rZW4gc2VydmljZVxyXG4gICAgICogQHBhcmFtIHJlcXVlc3RcclxuICAgICAqIEBwYXJhbSBhdXRob3JpdHlcclxuICAgICAqL1xyXG4gICAgYXN5bmMgZXhlY3V0ZVRva2VuUmVxdWVzdChyZXF1ZXN0LCBhdXRob3JpdHkpIHtcclxuICAgICAgICB0aGlzLnBlcmZvcm1hbmNlQ2xpZW50Py5hZGRRdWV1ZU1lYXN1cmVtZW50KFBlcmZvcm1hbmNlRXZlbnRzLlJlZnJlc2hUb2tlbkNsaWVudEV4ZWN1dGVUb2tlblJlcXVlc3QsIHJlcXVlc3QuY29ycmVsYXRpb25JZCk7XHJcbiAgICAgICAgY29uc3QgcXVlcnlQYXJhbWV0ZXJzU3RyaW5nID0gdGhpcy5jcmVhdGVUb2tlblF1ZXJ5UGFyYW1ldGVycyhyZXF1ZXN0KTtcclxuICAgICAgICBjb25zdCBlbmRwb2ludCA9IFVybFN0cmluZy5hcHBlbmRRdWVyeVN0cmluZyhhdXRob3JpdHkudG9rZW5FbmRwb2ludCwgcXVlcnlQYXJhbWV0ZXJzU3RyaW5nKTtcclxuICAgICAgICBjb25zdCByZXF1ZXN0Qm9keSA9IGF3YWl0IGludm9rZUFzeW5jKHRoaXMuY3JlYXRlVG9rZW5SZXF1ZXN0Qm9keS5iaW5kKHRoaXMpLCBQZXJmb3JtYW5jZUV2ZW50cy5SZWZyZXNoVG9rZW5DbGllbnRDcmVhdGVUb2tlblJlcXVlc3RCb2R5LCB0aGlzLmxvZ2dlciwgdGhpcy5wZXJmb3JtYW5jZUNsaWVudCwgcmVxdWVzdC5jb3JyZWxhdGlvbklkKShyZXF1ZXN0KTtcclxuICAgICAgICBjb25zdCBoZWFkZXJzID0gdGhpcy5jcmVhdGVUb2tlblJlcXVlc3RIZWFkZXJzKHJlcXVlc3QuY2NzQ3JlZGVudGlhbCk7XHJcbiAgICAgICAgY29uc3QgdGh1bWJwcmludCA9IHtcclxuICAgICAgICAgICAgY2xpZW50SWQ6IHJlcXVlc3QudG9rZW5Cb2R5UGFyYW1ldGVycz8uY2xpZW50SWQgfHxcclxuICAgICAgICAgICAgICAgIHRoaXMuY29uZmlnLmF1dGhPcHRpb25zLmNsaWVudElkLFxyXG4gICAgICAgICAgICBhdXRob3JpdHk6IGF1dGhvcml0eS5jYW5vbmljYWxBdXRob3JpdHksXHJcbiAgICAgICAgICAgIHNjb3BlczogcmVxdWVzdC5zY29wZXMsXHJcbiAgICAgICAgICAgIGNsYWltczogcmVxdWVzdC5jbGFpbXMsXHJcbiAgICAgICAgICAgIGF1dGhlbnRpY2F0aW9uU2NoZW1lOiByZXF1ZXN0LmF1dGhlbnRpY2F0aW9uU2NoZW1lLFxyXG4gICAgICAgICAgICByZXNvdXJjZVJlcXVlc3RNZXRob2Q6IHJlcXVlc3QucmVzb3VyY2VSZXF1ZXN0TWV0aG9kLFxyXG4gICAgICAgICAgICByZXNvdXJjZVJlcXVlc3RVcmk6IHJlcXVlc3QucmVzb3VyY2VSZXF1ZXN0VXJpLFxyXG4gICAgICAgICAgICBzaHJDbGFpbXM6IHJlcXVlc3Quc2hyQ2xhaW1zLFxyXG4gICAgICAgICAgICBzc2hLaWQ6IHJlcXVlc3Quc3NoS2lkLFxyXG4gICAgICAgIH07XHJcbiAgICAgICAgcmV0dXJuIGludm9rZUFzeW5jKHRoaXMuZXhlY3V0ZVBvc3RUb1Rva2VuRW5kcG9pbnQuYmluZCh0aGlzKSwgUGVyZm9ybWFuY2VFdmVudHMuUmVmcmVzaFRva2VuQ2xpZW50RXhlY3V0ZVBvc3RUb1Rva2VuRW5kcG9pbnQsIHRoaXMubG9nZ2VyLCB0aGlzLnBlcmZvcm1hbmNlQ2xpZW50LCByZXF1ZXN0LmNvcnJlbGF0aW9uSWQpKGVuZHBvaW50LCByZXF1ZXN0Qm9keSwgaGVhZGVycywgdGh1bWJwcmludCwgcmVxdWVzdC5jb3JyZWxhdGlvbklkLCBQZXJmb3JtYW5jZUV2ZW50cy5SZWZyZXNoVG9rZW5DbGllbnRFeGVjdXRlUG9zdFRvVG9rZW5FbmRwb2ludCk7XHJcbiAgICB9XHJcbiAgICAvKipcclxuICAgICAqIEhlbHBlciBmdW5jdGlvbiB0byBjcmVhdGUgdGhlIHRva2VuIHJlcXVlc3QgYm9keVxyXG4gICAgICogQHBhcmFtIHJlcXVlc3RcclxuICAgICAqL1xyXG4gICAgYXN5bmMgY3JlYXRlVG9rZW5SZXF1ZXN0Qm9keShyZXF1ZXN0KSB7XHJcbiAgICAgICAgdGhpcy5wZXJmb3JtYW5jZUNsaWVudD8uYWRkUXVldWVNZWFzdXJlbWVudChQZXJmb3JtYW5jZUV2ZW50cy5SZWZyZXNoVG9rZW5DbGllbnRDcmVhdGVUb2tlblJlcXVlc3RCb2R5LCByZXF1ZXN0LmNvcnJlbGF0aW9uSWQpO1xyXG4gICAgICAgIGNvbnN0IGNvcnJlbGF0aW9uSWQgPSByZXF1ZXN0LmNvcnJlbGF0aW9uSWQ7XHJcbiAgICAgICAgY29uc3QgcGFyYW1ldGVyQnVpbGRlciA9IG5ldyBSZXF1ZXN0UGFyYW1ldGVyQnVpbGRlcihjb3JyZWxhdGlvbklkLCB0aGlzLnBlcmZvcm1hbmNlQ2xpZW50KTtcclxuICAgICAgICBwYXJhbWV0ZXJCdWlsZGVyLmFkZENsaWVudElkKHJlcXVlc3QuZW1iZWRkZWRDbGllbnRJZCB8fFxyXG4gICAgICAgICAgICByZXF1ZXN0LnRva2VuQm9keVBhcmFtZXRlcnM/LltDTElFTlRfSURdIHx8XHJcbiAgICAgICAgICAgIHRoaXMuY29uZmlnLmF1dGhPcHRpb25zLmNsaWVudElkKTtcclxuICAgICAgICBpZiAocmVxdWVzdC5yZWRpcmVjdFVyaSkge1xyXG4gICAgICAgICAgICBwYXJhbWV0ZXJCdWlsZGVyLmFkZFJlZGlyZWN0VXJpKHJlcXVlc3QucmVkaXJlY3RVcmkpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBwYXJhbWV0ZXJCdWlsZGVyLmFkZFNjb3BlcyhyZXF1ZXN0LnNjb3BlcywgdHJ1ZSwgdGhpcy5jb25maWcuYXV0aE9wdGlvbnMuYXV0aG9yaXR5Lm9wdGlvbnMuT0lEQ09wdGlvbnM/LmRlZmF1bHRTY29wZXMpO1xyXG4gICAgICAgIHBhcmFtZXRlckJ1aWxkZXIuYWRkR3JhbnRUeXBlKEdyYW50VHlwZS5SRUZSRVNIX1RPS0VOX0dSQU5UKTtcclxuICAgICAgICBwYXJhbWV0ZXJCdWlsZGVyLmFkZENsaWVudEluZm8oKTtcclxuICAgICAgICBwYXJhbWV0ZXJCdWlsZGVyLmFkZExpYnJhcnlJbmZvKHRoaXMuY29uZmlnLmxpYnJhcnlJbmZvKTtcclxuICAgICAgICBwYXJhbWV0ZXJCdWlsZGVyLmFkZEFwcGxpY2F0aW9uVGVsZW1ldHJ5KHRoaXMuY29uZmlnLnRlbGVtZXRyeS5hcHBsaWNhdGlvbik7XHJcbiAgICAgICAgcGFyYW1ldGVyQnVpbGRlci5hZGRUaHJvdHRsaW5nKCk7XHJcbiAgICAgICAgaWYgKHRoaXMuc2VydmVyVGVsZW1ldHJ5TWFuYWdlciAmJiAhaXNPaWRjUHJvdG9jb2xNb2RlKHRoaXMuY29uZmlnKSkge1xyXG4gICAgICAgICAgICBwYXJhbWV0ZXJCdWlsZGVyLmFkZFNlcnZlclRlbGVtZXRyeSh0aGlzLnNlcnZlclRlbGVtZXRyeU1hbmFnZXIpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBwYXJhbWV0ZXJCdWlsZGVyLmFkZFJlZnJlc2hUb2tlbihyZXF1ZXN0LnJlZnJlc2hUb2tlbik7XHJcbiAgICAgICAgaWYgKHRoaXMuY29uZmlnLmNsaWVudENyZWRlbnRpYWxzLmNsaWVudFNlY3JldCkge1xyXG4gICAgICAgICAgICBwYXJhbWV0ZXJCdWlsZGVyLmFkZENsaWVudFNlY3JldCh0aGlzLmNvbmZpZy5jbGllbnRDcmVkZW50aWFscy5jbGllbnRTZWNyZXQpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAodGhpcy5jb25maWcuY2xpZW50Q3JlZGVudGlhbHMuY2xpZW50QXNzZXJ0aW9uKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGNsaWVudEFzc2VydGlvbiA9IHRoaXMuY29uZmlnLmNsaWVudENyZWRlbnRpYWxzLmNsaWVudEFzc2VydGlvbjtcclxuICAgICAgICAgICAgcGFyYW1ldGVyQnVpbGRlci5hZGRDbGllbnRBc3NlcnRpb24oYXdhaXQgZ2V0Q2xpZW50QXNzZXJ0aW9uKGNsaWVudEFzc2VydGlvbi5hc3NlcnRpb24sIHRoaXMuY29uZmlnLmF1dGhPcHRpb25zLmNsaWVudElkLCByZXF1ZXN0LnJlc291cmNlUmVxdWVzdFVyaSkpO1xyXG4gICAgICAgICAgICBwYXJhbWV0ZXJCdWlsZGVyLmFkZENsaWVudEFzc2VydGlvblR5cGUoY2xpZW50QXNzZXJ0aW9uLmFzc2VydGlvblR5cGUpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAocmVxdWVzdC5hdXRoZW50aWNhdGlvblNjaGVtZSA9PT0gQXV0aGVudGljYXRpb25TY2hlbWUuUE9QKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHBvcFRva2VuR2VuZXJhdG9yID0gbmV3IFBvcFRva2VuR2VuZXJhdG9yKHRoaXMuY3J5cHRvVXRpbHMsIHRoaXMucGVyZm9ybWFuY2VDbGllbnQpO1xyXG4gICAgICAgICAgICBsZXQgcmVxQ25mRGF0YTtcclxuICAgICAgICAgICAgaWYgKCFyZXF1ZXN0LnBvcEtpZCkge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgZ2VuZXJhdGVkUmVxQ25mRGF0YSA9IGF3YWl0IGludm9rZUFzeW5jKHBvcFRva2VuR2VuZXJhdG9yLmdlbmVyYXRlQ25mLmJpbmQocG9wVG9rZW5HZW5lcmF0b3IpLCBQZXJmb3JtYW5jZUV2ZW50cy5Qb3BUb2tlbkdlbmVyYXRlQ25mLCB0aGlzLmxvZ2dlciwgdGhpcy5wZXJmb3JtYW5jZUNsaWVudCwgcmVxdWVzdC5jb3JyZWxhdGlvbklkKShyZXF1ZXN0LCB0aGlzLmxvZ2dlcik7XHJcbiAgICAgICAgICAgICAgICByZXFDbmZEYXRhID0gZ2VuZXJhdGVkUmVxQ25mRGF0YS5yZXFDbmZTdHJpbmc7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICByZXFDbmZEYXRhID0gdGhpcy5jcnlwdG9VdGlscy5lbmNvZGVLaWQocmVxdWVzdC5wb3BLaWQpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIC8vIFNQQSBQb1AgcmVxdWlyZXMgZnVsbCBCYXNlNjRVcmwgZW5jb2RlZCByZXFfY25mIHN0cmluZyAodW5oYXNoZWQpXHJcbiAgICAgICAgICAgIHBhcmFtZXRlckJ1aWxkZXIuYWRkUG9wVG9rZW4ocmVxQ25mRGF0YSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2UgaWYgKHJlcXVlc3QuYXV0aGVudGljYXRpb25TY2hlbWUgPT09IEF1dGhlbnRpY2F0aW9uU2NoZW1lLlNTSCkge1xyXG4gICAgICAgICAgICBpZiAocmVxdWVzdC5zc2hKd2spIHtcclxuICAgICAgICAgICAgICAgIHBhcmFtZXRlckJ1aWxkZXIuYWRkU3NoSndrKHJlcXVlc3Quc3NoSndrKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHRocm93IGNyZWF0ZUNsaWVudENvbmZpZ3VyYXRpb25FcnJvcihtaXNzaW5nU3NoSndrKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoIVN0cmluZ1V0aWxzLmlzRW1wdHlPYmoocmVxdWVzdC5jbGFpbXMpIHx8XHJcbiAgICAgICAgICAgICh0aGlzLmNvbmZpZy5hdXRoT3B0aW9ucy5jbGllbnRDYXBhYmlsaXRpZXMgJiZcclxuICAgICAgICAgICAgICAgIHRoaXMuY29uZmlnLmF1dGhPcHRpb25zLmNsaWVudENhcGFiaWxpdGllcy5sZW5ndGggPiAwKSkge1xyXG4gICAgICAgICAgICBwYXJhbWV0ZXJCdWlsZGVyLmFkZENsYWltcyhyZXF1ZXN0LmNsYWltcywgdGhpcy5jb25maWcuYXV0aE9wdGlvbnMuY2xpZW50Q2FwYWJpbGl0aWVzKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHRoaXMuY29uZmlnLnN5c3RlbU9wdGlvbnMucHJldmVudENvcnNQcmVmbGlnaHQgJiZcclxuICAgICAgICAgICAgcmVxdWVzdC5jY3NDcmVkZW50aWFsKSB7XHJcbiAgICAgICAgICAgIHN3aXRjaCAocmVxdWVzdC5jY3NDcmVkZW50aWFsLnR5cGUpIHtcclxuICAgICAgICAgICAgICAgIGNhc2UgQ2NzQ3JlZGVudGlhbFR5cGUuSE9NRV9BQ0NPVU5UX0lEOlxyXG4gICAgICAgICAgICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNsaWVudEluZm8gPSBidWlsZENsaWVudEluZm9Gcm9tSG9tZUFjY291bnRJZChyZXF1ZXN0LmNjc0NyZWRlbnRpYWwuY3JlZGVudGlhbCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHBhcmFtZXRlckJ1aWxkZXIuYWRkQ2NzT2lkKGNsaWVudEluZm8pO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICBjYXRjaCAoZSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmxvZ2dlci52ZXJib3NlKFwiQ291bGQgbm90IHBhcnNlIGhvbWUgYWNjb3VudCBJRCBmb3IgQ0NTIEhlYWRlcjogXCIgK1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgY2FzZSBDY3NDcmVkZW50aWFsVHlwZS5VUE46XHJcbiAgICAgICAgICAgICAgICAgICAgcGFyYW1ldGVyQnVpbGRlci5hZGRDY3NVcG4ocmVxdWVzdC5jY3NDcmVkZW50aWFsLmNyZWRlbnRpYWwpO1xyXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChyZXF1ZXN0LmVtYmVkZGVkQ2xpZW50SWQpIHtcclxuICAgICAgICAgICAgcGFyYW1ldGVyQnVpbGRlci5hZGRCcm9rZXJQYXJhbWV0ZXJzKHtcclxuICAgICAgICAgICAgICAgIGJyb2tlckNsaWVudElkOiB0aGlzLmNvbmZpZy5hdXRoT3B0aW9ucy5jbGllbnRJZCxcclxuICAgICAgICAgICAgICAgIGJyb2tlclJlZGlyZWN0VXJpOiB0aGlzLmNvbmZpZy5hdXRoT3B0aW9ucy5yZWRpcmVjdFVyaSxcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChyZXF1ZXN0LnRva2VuQm9keVBhcmFtZXRlcnMpIHtcclxuICAgICAgICAgICAgcGFyYW1ldGVyQnVpbGRlci5hZGRFeHRyYVF1ZXJ5UGFyYW1ldGVycyhyZXF1ZXN0LnRva2VuQm9keVBhcmFtZXRlcnMpO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gcGFyYW1ldGVyQnVpbGRlci5jcmVhdGVRdWVyeVN0cmluZygpO1xyXG4gICAgfVxyXG59XG5cbmV4cG9ydCB7IFJlZnJlc2hUb2tlbkNsaWVudCB9O1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9UmVmcmVzaFRva2VuQ2xpZW50Lm1qcy5tYXBcbiIsIi8qISBAYXp1cmUvbXNhbC1jb21tb24gdjE0LjE2LjAgMjAyNC0xMS0wNSAqL1xuJ3VzZSBzdHJpY3QnO1xuaW1wb3J0IHsgQmFzZUNsaWVudCB9IGZyb20gJy4vQmFzZUNsaWVudC5tanMnO1xuaW1wb3J0IHsgd2FzQ2xvY2tUdXJuZWRCYWNrLCBpc1Rva2VuRXhwaXJlZCB9IGZyb20gJy4uL3V0aWxzL1RpbWVVdGlscy5tanMnO1xuaW1wb3J0IHsgUmVmcmVzaFRva2VuQ2xpZW50IH0gZnJvbSAnLi9SZWZyZXNoVG9rZW5DbGllbnQubWpzJztcbmltcG9ydCB7IENsaWVudEF1dGhFcnJvciwgY3JlYXRlQ2xpZW50QXV0aEVycm9yIH0gZnJvbSAnLi4vZXJyb3IvQ2xpZW50QXV0aEVycm9yLm1qcyc7XG5pbXBvcnQgeyBSZXNwb25zZUhhbmRsZXIgfSBmcm9tICcuLi9yZXNwb25zZS9SZXNwb25zZUhhbmRsZXIubWpzJztcbmltcG9ydCB7IE9JRENfREVGQVVMVF9TQ09QRVMsIENhY2hlT3V0Y29tZSB9IGZyb20gJy4uL3V0aWxzL0NvbnN0YW50cy5tanMnO1xuaW1wb3J0IHsgU3RyaW5nVXRpbHMgfSBmcm9tICcuLi91dGlscy9TdHJpbmdVdGlscy5tanMnO1xuaW1wb3J0IHsgZXh0cmFjdFRva2VuQ2xhaW1zLCBjaGVja01heEFnZSB9IGZyb20gJy4uL2FjY291bnQvQXV0aFRva2VuLm1qcyc7XG5pbXBvcnQgeyBQZXJmb3JtYW5jZUV2ZW50cyB9IGZyb20gJy4uL3RlbGVtZXRyeS9wZXJmb3JtYW5jZS9QZXJmb3JtYW5jZUV2ZW50Lm1qcyc7XG5pbXBvcnQgeyBpbnZva2VBc3luYyB9IGZyb20gJy4uL3V0aWxzL0Z1bmN0aW9uV3JhcHBlcnMubWpzJztcbmltcG9ydCB7IGdldFRlbmFudEZyb21BdXRob3JpdHlTdHJpbmcgfSBmcm9tICcuLi9hdXRob3JpdHkvQXV0aG9yaXR5Lm1qcyc7XG5pbXBvcnQgeyB0b2tlblJlZnJlc2hSZXF1aXJlZCwgbm9BY2NvdW50SW5TaWxlbnRSZXF1ZXN0LCBhdXRoVGltZU5vdEZvdW5kIH0gZnJvbSAnLi4vZXJyb3IvQ2xpZW50QXV0aEVycm9yQ29kZXMubWpzJztcblxuLypcclxuICogQ29weXJpZ2h0IChjKSBNaWNyb3NvZnQgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuXHJcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgTGljZW5zZS5cclxuICovXHJcbi8qKiBAaW50ZXJuYWwgKi9cclxuY2xhc3MgU2lsZW50Rmxvd0NsaWVudCBleHRlbmRzIEJhc2VDbGllbnQge1xyXG4gICAgY29uc3RydWN0b3IoY29uZmlndXJhdGlvbiwgcGVyZm9ybWFuY2VDbGllbnQpIHtcclxuICAgICAgICBzdXBlcihjb25maWd1cmF0aW9uLCBwZXJmb3JtYW5jZUNsaWVudCk7XHJcbiAgICB9XHJcbiAgICAvKipcclxuICAgICAqIFJldHJpZXZlcyBhIHRva2VuIGZyb20gY2FjaGUgaWYgaXQgaXMgc3RpbGwgdmFsaWQsIG9yIHVzZXMgdGhlIGNhY2hlZCByZWZyZXNoIHRva2VuIHRvIHJlbmV3XHJcbiAgICAgKiB0aGUgZ2l2ZW4gdG9rZW4gYW5kIHJldHVybnMgdGhlIHJlbmV3ZWQgdG9rZW5cclxuICAgICAqIEBwYXJhbSByZXF1ZXN0XHJcbiAgICAgKi9cclxuICAgIGFzeW5jIGFjcXVpcmVUb2tlbihyZXF1ZXN0KSB7XHJcbiAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgY29uc3QgW2F1dGhSZXNwb25zZSwgY2FjaGVPdXRjb21lXSA9IGF3YWl0IHRoaXMuYWNxdWlyZUNhY2hlZFRva2VuKHtcclxuICAgICAgICAgICAgICAgIC4uLnJlcXVlc3QsXHJcbiAgICAgICAgICAgICAgICBzY29wZXM6IHJlcXVlc3Quc2NvcGVzPy5sZW5ndGhcclxuICAgICAgICAgICAgICAgICAgICA/IHJlcXVlc3Quc2NvcGVzXHJcbiAgICAgICAgICAgICAgICAgICAgOiBbLi4uT0lEQ19ERUZBVUxUX1NDT1BFU10sXHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAvLyBpZiB0aGUgdG9rZW4gaXMgbm90IGV4cGlyZWQgYnV0IG11c3QgYmUgcmVmcmVzaGVkOyBnZXQgYSBuZXcgb25lIGluIHRoZSBiYWNrZ3JvdW5kXHJcbiAgICAgICAgICAgIGlmIChjYWNoZU91dGNvbWUgPT09IENhY2hlT3V0Y29tZS5QUk9BQ1RJVkVMWV9SRUZSRVNIRUQpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMubG9nZ2VyLmluZm8oXCJTaWxlbnRGbG93Q2xpZW50OmFjcXVpcmVDYWNoZWRUb2tlbiAtIENhY2hlZCBhY2Nlc3MgdG9rZW4ncyByZWZyZXNoT24gcHJvcGVydHkgaGFzIGJlZW4gZXhjZWVkZWQnLiBJdCdzIG5vdCBleHBpcmVkLCBidXQgbXVzdCBiZSByZWZyZXNoZWQuXCIpO1xyXG4gICAgICAgICAgICAgICAgLy8gcmVmcmVzaCB0aGUgYWNjZXNzIHRva2VuIGluIHRoZSBiYWNrZ3JvdW5kXHJcbiAgICAgICAgICAgICAgICBjb25zdCByZWZyZXNoVG9rZW5DbGllbnQgPSBuZXcgUmVmcmVzaFRva2VuQ2xpZW50KHRoaXMuY29uZmlnLCB0aGlzLnBlcmZvcm1hbmNlQ2xpZW50KTtcclxuICAgICAgICAgICAgICAgIHJlZnJlc2hUb2tlbkNsaWVudFxyXG4gICAgICAgICAgICAgICAgICAgIC5hY3F1aXJlVG9rZW5CeVJlZnJlc2hUb2tlbihyZXF1ZXN0KVxyXG4gICAgICAgICAgICAgICAgICAgIC5jYXRjaCgoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgLy8gZG8gbm90aGluZywgdGhpcyBpcyBydW5uaW5nIGluIHRoZSBiYWNrZ3JvdW5kIGFuZCBubyBhY3Rpb24gaXMgdG8gYmUgdGFrZW4gdXBvbiBzdWNjZXNzIG9yIGZhaWx1cmVcclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIC8vIHJldHVybiB0aGUgY2FjaGVkIHRva2VuXHJcbiAgICAgICAgICAgIHJldHVybiBhdXRoUmVzcG9uc2U7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNhdGNoIChlKSB7XHJcbiAgICAgICAgICAgIGlmIChlIGluc3RhbmNlb2YgQ2xpZW50QXV0aEVycm9yICYmXHJcbiAgICAgICAgICAgICAgICBlLmVycm9yQ29kZSA9PT0gdG9rZW5SZWZyZXNoUmVxdWlyZWQpIHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IHJlZnJlc2hUb2tlbkNsaWVudCA9IG5ldyBSZWZyZXNoVG9rZW5DbGllbnQodGhpcy5jb25maWcsIHRoaXMucGVyZm9ybWFuY2VDbGllbnQpO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHJlZnJlc2hUb2tlbkNsaWVudC5hY3F1aXJlVG9rZW5CeVJlZnJlc2hUb2tlbihyZXF1ZXN0KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHRocm93IGU7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICAvKipcclxuICAgICAqIFJldHJpZXZlcyB0b2tlbiBmcm9tIGNhY2hlIG9yIHRocm93cyBhbiBlcnJvciBpZiBpdCBtdXN0IGJlIHJlZnJlc2hlZC5cclxuICAgICAqIEBwYXJhbSByZXF1ZXN0XHJcbiAgICAgKi9cclxuICAgIGFzeW5jIGFjcXVpcmVDYWNoZWRUb2tlbihyZXF1ZXN0KSB7XHJcbiAgICAgICAgdGhpcy5wZXJmb3JtYW5jZUNsaWVudD8uYWRkUXVldWVNZWFzdXJlbWVudChQZXJmb3JtYW5jZUV2ZW50cy5TaWxlbnRGbG93Q2xpZW50QWNxdWlyZUNhY2hlZFRva2VuLCByZXF1ZXN0LmNvcnJlbGF0aW9uSWQpO1xyXG4gICAgICAgIGxldCBsYXN0Q2FjaGVPdXRjb21lID0gQ2FjaGVPdXRjb21lLk5PVF9BUFBMSUNBQkxFO1xyXG4gICAgICAgIGlmIChyZXF1ZXN0LmZvcmNlUmVmcmVzaCB8fFxyXG4gICAgICAgICAgICAoIXRoaXMuY29uZmlnLmNhY2hlT3B0aW9ucy5jbGFpbXNCYXNlZENhY2hpbmdFbmFibGVkICYmXHJcbiAgICAgICAgICAgICAgICAhU3RyaW5nVXRpbHMuaXNFbXB0eU9iaihyZXF1ZXN0LmNsYWltcykpKSB7XHJcbiAgICAgICAgICAgIC8vIE11c3QgcmVmcmVzaCBkdWUgdG8gcHJlc2VudCBmb3JjZV9yZWZyZXNoIGZsYWcuXHJcbiAgICAgICAgICAgIHRoaXMuc2V0Q2FjaGVPdXRjb21lKENhY2hlT3V0Y29tZS5GT1JDRV9SRUZSRVNIX09SX0NMQUlNUywgcmVxdWVzdC5jb3JyZWxhdGlvbklkKTtcclxuICAgICAgICAgICAgdGhyb3cgY3JlYXRlQ2xpZW50QXV0aEVycm9yKHRva2VuUmVmcmVzaFJlcXVpcmVkKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgLy8gV2UgY3VycmVudGx5IGRvIG5vdCBzdXBwb3J0IHNpbGVudCBmbG93IGZvciBhY2NvdW50ID09PSBudWxsIHVzZSBjYXNlczsgVGhpcyB3aWxsIGJlIHJldmlzaXRlZCBmb3IgY29uZmlkZW50aWFsIGZsb3cgdXNlY2FzZXNcclxuICAgICAgICBpZiAoIXJlcXVlc3QuYWNjb3VudCkge1xyXG4gICAgICAgICAgICB0aHJvdyBjcmVhdGVDbGllbnRBdXRoRXJyb3Iobm9BY2NvdW50SW5TaWxlbnRSZXF1ZXN0KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgY29uc3QgcmVxdWVzdFRlbmFudElkID0gcmVxdWVzdC5hY2NvdW50LnRlbmFudElkIHx8XHJcbiAgICAgICAgICAgIGdldFRlbmFudEZyb21BdXRob3JpdHlTdHJpbmcocmVxdWVzdC5hdXRob3JpdHkpO1xyXG4gICAgICAgIGNvbnN0IHRva2VuS2V5cyA9IHRoaXMuY2FjaGVNYW5hZ2VyLmdldFRva2VuS2V5cygpO1xyXG4gICAgICAgIGNvbnN0IGNhY2hlZEFjY2Vzc1Rva2VuID0gdGhpcy5jYWNoZU1hbmFnZXIuZ2V0QWNjZXNzVG9rZW4ocmVxdWVzdC5hY2NvdW50LCByZXF1ZXN0LCB0b2tlbktleXMsIHJlcXVlc3RUZW5hbnRJZCwgdGhpcy5wZXJmb3JtYW5jZUNsaWVudCwgcmVxdWVzdC5jb3JyZWxhdGlvbklkKTtcclxuICAgICAgICBpZiAoIWNhY2hlZEFjY2Vzc1Rva2VuKSB7XHJcbiAgICAgICAgICAgIC8vIG11c3QgcmVmcmVzaCBkdWUgdG8gbm9uLWV4aXN0ZW50IGFjY2Vzc190b2tlblxyXG4gICAgICAgICAgICB0aGlzLnNldENhY2hlT3V0Y29tZShDYWNoZU91dGNvbWUuTk9fQ0FDSEVEX0FDQ0VTU19UT0tFTiwgcmVxdWVzdC5jb3JyZWxhdGlvbklkKTtcclxuICAgICAgICAgICAgdGhyb3cgY3JlYXRlQ2xpZW50QXV0aEVycm9yKHRva2VuUmVmcmVzaFJlcXVpcmVkKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSBpZiAod2FzQ2xvY2tUdXJuZWRCYWNrKGNhY2hlZEFjY2Vzc1Rva2VuLmNhY2hlZEF0KSB8fFxyXG4gICAgICAgICAgICBpc1Rva2VuRXhwaXJlZChjYWNoZWRBY2Nlc3NUb2tlbi5leHBpcmVzT24sIHRoaXMuY29uZmlnLnN5c3RlbU9wdGlvbnMudG9rZW5SZW5ld2FsT2Zmc2V0U2Vjb25kcykpIHtcclxuICAgICAgICAgICAgLy8gbXVzdCByZWZyZXNoIGR1ZSB0byB0aGUgZXhwaXJlc19pbiB2YWx1ZVxyXG4gICAgICAgICAgICB0aGlzLnNldENhY2hlT3V0Y29tZShDYWNoZU91dGNvbWUuQ0FDSEVEX0FDQ0VTU19UT0tFTl9FWFBJUkVELCByZXF1ZXN0LmNvcnJlbGF0aW9uSWQpO1xyXG4gICAgICAgICAgICB0aHJvdyBjcmVhdGVDbGllbnRBdXRoRXJyb3IodG9rZW5SZWZyZXNoUmVxdWlyZWQpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIGlmIChjYWNoZWRBY2Nlc3NUb2tlbi5yZWZyZXNoT24gJiZcclxuICAgICAgICAgICAgaXNUb2tlbkV4cGlyZWQoY2FjaGVkQWNjZXNzVG9rZW4ucmVmcmVzaE9uLCAwKSkge1xyXG4gICAgICAgICAgICAvLyBtdXN0IHJlZnJlc2ggKGluIHRoZSBiYWNrZ3JvdW5kKSBkdWUgdG8gdGhlIHJlZnJlc2hfaW4gdmFsdWVcclxuICAgICAgICAgICAgbGFzdENhY2hlT3V0Y29tZSA9IENhY2hlT3V0Y29tZS5QUk9BQ1RJVkVMWV9SRUZSRVNIRUQ7XHJcbiAgICAgICAgICAgIC8vIGRvbid0IHRocm93IENsaWVudEF1dGhFcnJvci5jcmVhdGVSZWZyZXNoUmVxdWlyZWRFcnJvcigpLCByZXR1cm4gY2FjaGVkIHRva2VuIGluc3RlYWRcclxuICAgICAgICB9XHJcbiAgICAgICAgY29uc3QgZW52aXJvbm1lbnQgPSByZXF1ZXN0LmF1dGhvcml0eSB8fCB0aGlzLmF1dGhvcml0eS5nZXRQcmVmZXJyZWRDYWNoZSgpO1xyXG4gICAgICAgIGNvbnN0IGNhY2hlUmVjb3JkID0ge1xyXG4gICAgICAgICAgICBhY2NvdW50OiB0aGlzLmNhY2hlTWFuYWdlci5yZWFkQWNjb3VudEZyb21DYWNoZShyZXF1ZXN0LmFjY291bnQpLFxyXG4gICAgICAgICAgICBhY2Nlc3NUb2tlbjogY2FjaGVkQWNjZXNzVG9rZW4sXHJcbiAgICAgICAgICAgIGlkVG9rZW46IHRoaXMuY2FjaGVNYW5hZ2VyLmdldElkVG9rZW4ocmVxdWVzdC5hY2NvdW50LCB0b2tlbktleXMsIHJlcXVlc3RUZW5hbnRJZCwgdGhpcy5wZXJmb3JtYW5jZUNsaWVudCwgcmVxdWVzdC5jb3JyZWxhdGlvbklkKSxcclxuICAgICAgICAgICAgcmVmcmVzaFRva2VuOiBudWxsLFxyXG4gICAgICAgICAgICBhcHBNZXRhZGF0YTogdGhpcy5jYWNoZU1hbmFnZXIucmVhZEFwcE1ldGFkYXRhRnJvbUNhY2hlKGVudmlyb25tZW50KSxcclxuICAgICAgICB9O1xyXG4gICAgICAgIHRoaXMuc2V0Q2FjaGVPdXRjb21lKGxhc3RDYWNoZU91dGNvbWUsIHJlcXVlc3QuY29ycmVsYXRpb25JZCk7XHJcbiAgICAgICAgaWYgKHRoaXMuY29uZmlnLnNlcnZlclRlbGVtZXRyeU1hbmFnZXIpIHtcclxuICAgICAgICAgICAgdGhpcy5jb25maWcuc2VydmVyVGVsZW1ldHJ5TWFuYWdlci5pbmNyZW1lbnRDYWNoZUhpdHMoKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIFtcclxuICAgICAgICAgICAgYXdhaXQgaW52b2tlQXN5bmModGhpcy5nZW5lcmF0ZVJlc3VsdEZyb21DYWNoZVJlY29yZC5iaW5kKHRoaXMpLCBQZXJmb3JtYW5jZUV2ZW50cy5TaWxlbnRGbG93Q2xpZW50R2VuZXJhdGVSZXN1bHRGcm9tQ2FjaGVSZWNvcmQsIHRoaXMubG9nZ2VyLCB0aGlzLnBlcmZvcm1hbmNlQ2xpZW50LCByZXF1ZXN0LmNvcnJlbGF0aW9uSWQpKGNhY2hlUmVjb3JkLCByZXF1ZXN0KSxcclxuICAgICAgICAgICAgbGFzdENhY2hlT3V0Y29tZSxcclxuICAgICAgICBdO1xyXG4gICAgfVxyXG4gICAgc2V0Q2FjaGVPdXRjb21lKGNhY2hlT3V0Y29tZSwgY29ycmVsYXRpb25JZCkge1xyXG4gICAgICAgIHRoaXMuc2VydmVyVGVsZW1ldHJ5TWFuYWdlcj8uc2V0Q2FjaGVPdXRjb21lKGNhY2hlT3V0Y29tZSk7XHJcbiAgICAgICAgdGhpcy5wZXJmb3JtYW5jZUNsaWVudD8uYWRkRmllbGRzKHtcclxuICAgICAgICAgICAgY2FjaGVPdXRjb21lOiBjYWNoZU91dGNvbWUsXHJcbiAgICAgICAgfSwgY29ycmVsYXRpb25JZCk7XHJcbiAgICAgICAgaWYgKGNhY2hlT3V0Y29tZSAhPT0gQ2FjaGVPdXRjb21lLk5PVF9BUFBMSUNBQkxFKSB7XHJcbiAgICAgICAgICAgIHRoaXMubG9nZ2VyLmluZm8oYFRva2VuIHJlZnJlc2ggaXMgcmVxdWlyZWQgZHVlIHRvIGNhY2hlIG91dGNvbWU6ICR7Y2FjaGVPdXRjb21lfWApO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIC8qKlxyXG4gICAgICogSGVscGVyIGZ1bmN0aW9uIHRvIGJ1aWxkIHJlc3BvbnNlIG9iamVjdCBmcm9tIHRoZSBDYWNoZVJlY29yZFxyXG4gICAgICogQHBhcmFtIGNhY2hlUmVjb3JkXHJcbiAgICAgKi9cclxuICAgIGFzeW5jIGdlbmVyYXRlUmVzdWx0RnJvbUNhY2hlUmVjb3JkKGNhY2hlUmVjb3JkLCByZXF1ZXN0KSB7XHJcbiAgICAgICAgdGhpcy5wZXJmb3JtYW5jZUNsaWVudD8uYWRkUXVldWVNZWFzdXJlbWVudChQZXJmb3JtYW5jZUV2ZW50cy5TaWxlbnRGbG93Q2xpZW50R2VuZXJhdGVSZXN1bHRGcm9tQ2FjaGVSZWNvcmQsIHJlcXVlc3QuY29ycmVsYXRpb25JZCk7XHJcbiAgICAgICAgbGV0IGlkVG9rZW5DbGFpbXM7XHJcbiAgICAgICAgaWYgKGNhY2hlUmVjb3JkLmlkVG9rZW4pIHtcclxuICAgICAgICAgICAgaWRUb2tlbkNsYWltcyA9IGV4dHJhY3RUb2tlbkNsYWltcyhjYWNoZVJlY29yZC5pZFRva2VuLnNlY3JldCwgdGhpcy5jb25maWcuY3J5cHRvSW50ZXJmYWNlLmJhc2U2NERlY29kZSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIC8vIHRva2VuIG1heF9hZ2UgY2hlY2tcclxuICAgICAgICBpZiAocmVxdWVzdC5tYXhBZ2UgfHwgcmVxdWVzdC5tYXhBZ2UgPT09IDApIHtcclxuICAgICAgICAgICAgY29uc3QgYXV0aFRpbWUgPSBpZFRva2VuQ2xhaW1zPy5hdXRoX3RpbWU7XHJcbiAgICAgICAgICAgIGlmICghYXV0aFRpbWUpIHtcclxuICAgICAgICAgICAgICAgIHRocm93IGNyZWF0ZUNsaWVudEF1dGhFcnJvcihhdXRoVGltZU5vdEZvdW5kKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBjaGVja01heEFnZShhdXRoVGltZSwgcmVxdWVzdC5tYXhBZ2UpO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gUmVzcG9uc2VIYW5kbGVyLmdlbmVyYXRlQXV0aGVudGljYXRpb25SZXN1bHQodGhpcy5jcnlwdG9VdGlscywgdGhpcy5hdXRob3JpdHksIGNhY2hlUmVjb3JkLCB0cnVlLCByZXF1ZXN0LCBpZFRva2VuQ2xhaW1zKTtcclxuICAgIH1cclxufVxuXG5leHBvcnQgeyBTaWxlbnRGbG93Q2xpZW50IH07XG4vLyMgc291cmNlTWFwcGluZ1VSTD1TaWxlbnRGbG93Q2xpZW50Lm1qcy5tYXBcbiIsIi8qISBAYXp1cmUvbXNhbC1icm93c2VyIHYzLjI4LjEgMjAyNS0wMS0xNCAqL1xuJ3VzZSBzdHJpY3QnO1xuaW1wb3J0IHsgU3RhbmRhcmRJbnRlcmFjdGlvbkNsaWVudCB9IGZyb20gJy4vU3RhbmRhcmRJbnRlcmFjdGlvbkNsaWVudC5tanMnO1xuaW1wb3J0IHsgUGVyZm9ybWFuY2VFdmVudHMsIGludm9rZUFzeW5jLCBTaWxlbnRGbG93Q2xpZW50IH0gZnJvbSAnQGF6dXJlL21zYWwtY29tbW9uL2Jyb3dzZXInO1xuaW1wb3J0IHsgQXBpSWQgfSBmcm9tICcuLi91dGlscy9Ccm93c2VyQ29uc3RhbnRzLm1qcyc7XG5pbXBvcnQgeyBCcm93c2VyQXV0aEVycm9yIH0gZnJvbSAnLi4vZXJyb3IvQnJvd3NlckF1dGhFcnJvci5tanMnO1xuaW1wb3J0IHsgY3J5cHRvS2V5Tm90Rm91bmQgfSBmcm9tICcuLi9lcnJvci9Ccm93c2VyQXV0aEVycm9yQ29kZXMubWpzJztcblxuLypcclxuICogQ29weXJpZ2h0IChjKSBNaWNyb3NvZnQgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuXHJcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgTGljZW5zZS5cclxuICovXHJcbmNsYXNzIFNpbGVudENhY2hlQ2xpZW50IGV4dGVuZHMgU3RhbmRhcmRJbnRlcmFjdGlvbkNsaWVudCB7XHJcbiAgICAvKipcclxuICAgICAqIFJldHVybnMgdW5leHBpcmVkIHRva2VucyBmcm9tIHRoZSBjYWNoZSwgaWYgYXZhaWxhYmxlXHJcbiAgICAgKiBAcGFyYW0gc2lsZW50UmVxdWVzdFxyXG4gICAgICovXHJcbiAgICBhc3luYyBhY3F1aXJlVG9rZW4oc2lsZW50UmVxdWVzdCkge1xyXG4gICAgICAgIHRoaXMucGVyZm9ybWFuY2VDbGllbnQuYWRkUXVldWVNZWFzdXJlbWVudChQZXJmb3JtYW5jZUV2ZW50cy5TaWxlbnRDYWNoZUNsaWVudEFjcXVpcmVUb2tlbiwgc2lsZW50UmVxdWVzdC5jb3JyZWxhdGlvbklkKTtcclxuICAgICAgICAvLyBUZWxlbWV0cnkgbWFuYWdlciBvbmx5IHVzZWQgdG8gaW5jcmVtZW50IGNhY2hlSGl0cyBoZXJlXHJcbiAgICAgICAgY29uc3Qgc2VydmVyVGVsZW1ldHJ5TWFuYWdlciA9IHRoaXMuaW5pdGlhbGl6ZVNlcnZlclRlbGVtZXRyeU1hbmFnZXIoQXBpSWQuYWNxdWlyZVRva2VuU2lsZW50X3NpbGVudEZsb3cpO1xyXG4gICAgICAgIGNvbnN0IGNsaWVudENvbmZpZyA9IGF3YWl0IGludm9rZUFzeW5jKHRoaXMuZ2V0Q2xpZW50Q29uZmlndXJhdGlvbi5iaW5kKHRoaXMpLCBQZXJmb3JtYW5jZUV2ZW50cy5TdGFuZGFyZEludGVyYWN0aW9uQ2xpZW50R2V0Q2xpZW50Q29uZmlndXJhdGlvbiwgdGhpcy5sb2dnZXIsIHRoaXMucGVyZm9ybWFuY2VDbGllbnQsIHRoaXMuY29ycmVsYXRpb25JZCkoe1xyXG4gICAgICAgICAgICBzZXJ2ZXJUZWxlbWV0cnlNYW5hZ2VyLFxyXG4gICAgICAgICAgICByZXF1ZXN0QXV0aG9yaXR5OiBzaWxlbnRSZXF1ZXN0LmF1dGhvcml0eSxcclxuICAgICAgICAgICAgcmVxdWVzdEF6dXJlQ2xvdWRPcHRpb25zOiBzaWxlbnRSZXF1ZXN0LmF6dXJlQ2xvdWRPcHRpb25zLFxyXG4gICAgICAgICAgICBhY2NvdW50OiBzaWxlbnRSZXF1ZXN0LmFjY291bnQsXHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgY29uc3Qgc2lsZW50QXV0aENsaWVudCA9IG5ldyBTaWxlbnRGbG93Q2xpZW50KGNsaWVudENvbmZpZywgdGhpcy5wZXJmb3JtYW5jZUNsaWVudCk7XHJcbiAgICAgICAgdGhpcy5sb2dnZXIudmVyYm9zZShcIlNpbGVudCBhdXRoIGNsaWVudCBjcmVhdGVkXCIpO1xyXG4gICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgaW52b2tlQXN5bmMoc2lsZW50QXV0aENsaWVudC5hY3F1aXJlQ2FjaGVkVG9rZW4uYmluZChzaWxlbnRBdXRoQ2xpZW50KSwgUGVyZm9ybWFuY2VFdmVudHMuU2lsZW50Rmxvd0NsaWVudEFjcXVpcmVDYWNoZWRUb2tlbiwgdGhpcy5sb2dnZXIsIHRoaXMucGVyZm9ybWFuY2VDbGllbnQsIHNpbGVudFJlcXVlc3QuY29ycmVsYXRpb25JZCkoc2lsZW50UmVxdWVzdCk7XHJcbiAgICAgICAgICAgIGNvbnN0IGF1dGhSZXNwb25zZSA9IHJlc3BvbnNlWzBdO1xyXG4gICAgICAgICAgICB0aGlzLnBlcmZvcm1hbmNlQ2xpZW50LmFkZEZpZWxkcyh7XHJcbiAgICAgICAgICAgICAgICBmcm9tQ2FjaGU6IHRydWUsXHJcbiAgICAgICAgICAgIH0sIHNpbGVudFJlcXVlc3QuY29ycmVsYXRpb25JZCk7XHJcbiAgICAgICAgICAgIHJldHVybiBhdXRoUmVzcG9uc2U7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNhdGNoIChlcnJvcikge1xyXG4gICAgICAgICAgICBpZiAoZXJyb3IgaW5zdGFuY2VvZiBCcm93c2VyQXV0aEVycm9yICYmXHJcbiAgICAgICAgICAgICAgICBlcnJvci5lcnJvckNvZGUgPT09IGNyeXB0b0tleU5vdEZvdW5kKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmxvZ2dlci52ZXJib3NlKFwiU2lnbmluZyBrZXlwYWlyIGZvciBib3VuZCBhY2Nlc3MgdG9rZW4gbm90IGZvdW5kLiBSZWZyZXNoaW5nIGJvdW5kIGFjY2VzcyB0b2tlbiBhbmQgZ2VuZXJhdGluZyBhIG5ldyBjcnlwdG8ga2V5cGFpci5cIik7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgdGhyb3cgZXJyb3I7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgLyoqXHJcbiAgICAgKiBBUEkgdG8gc2lsZW50eSBjbGVhciB0aGUgYnJvd3NlciBjYWNoZS5cclxuICAgICAqIEBwYXJhbSBsb2dvdXRSZXF1ZXN0XHJcbiAgICAgKi9cclxuICAgIGxvZ291dChsb2dvdXRSZXF1ZXN0KSB7XHJcbiAgICAgICAgdGhpcy5sb2dnZXIudmVyYm9zZShcImxvZ291dFJlZGlyZWN0IGNhbGxlZFwiKTtcclxuICAgICAgICBjb25zdCB2YWxpZExvZ291dFJlcXVlc3QgPSB0aGlzLmluaXRpYWxpemVMb2dvdXRSZXF1ZXN0KGxvZ291dFJlcXVlc3QpO1xyXG4gICAgICAgIHJldHVybiB0aGlzLmNsZWFyQ2FjaGVPbkxvZ291dCh2YWxpZExvZ291dFJlcXVlc3Q/LmFjY291bnQpO1xyXG4gICAgfVxyXG59XG5cbmV4cG9ydCB7IFNpbGVudENhY2hlQ2xpZW50IH07XG4vLyMgc291cmNlTWFwcGluZ1VSTD1TaWxlbnRDYWNoZUNsaWVudC5tanMubWFwXG4iLCIvKiEgQGF6dXJlL21zYWwtYnJvd3NlciB2My4yOC4xIDIwMjUtMDEtMTQgKi9cbid1c2Ugc3RyaWN0JztcbmltcG9ydCB7IFNlcnZlclRlbGVtZXRyeU1hbmFnZXIsIEFBRFNlcnZlclBhcmFtS2V5cywgUGVyZm9ybWFuY2VFdmVudHMsIFRpbWVVdGlscywgU2NvcGVTZXQsIGNyZWF0ZUNsaWVudEF1dGhFcnJvciwgQ2xpZW50QXV0aEVycm9yQ29kZXMsIEF1dGhUb2tlbiwgYnVpbGRBY2NvdW50VG9DYWNoZSwgQWNjb3VudEVudGl0eSwgQ29uc3RhbnRzLCBBdXRob3JpdHlUeXBlLCBBdXRoZW50aWNhdGlvblNjaGVtZSwgUG9wVG9rZW5HZW5lcmF0b3IsIHVwZGF0ZUFjY291bnRUZW5hbnRQcm9maWxlRGF0YSwgQ2FjaGVIZWxwZXJzLCBjcmVhdGVBdXRoRXJyb3IsIEF1dGhFcnJvckNvZGVzLCBVcmxTdHJpbmcsIE9JRENfREVGQVVMVF9TQ09QRVMsIGludm9rZUFzeW5jLCBQcm9tcHRWYWx1ZSB9IGZyb20gJ0BhenVyZS9tc2FsLWNvbW1vbi9icm93c2VyJztcbmltcG9ydCB7IEJhc2VJbnRlcmFjdGlvbkNsaWVudCB9IGZyb20gJy4vQmFzZUludGVyYWN0aW9uQ2xpZW50Lm1qcyc7XG5pbXBvcnQgeyBOYXRpdmVDb25zdGFudHMsIEJyb3dzZXJDb25zdGFudHMsIE5hdGl2ZUV4dGVuc2lvbk1ldGhvZCwgVGVtcG9yYXJ5Q2FjaGVLZXlzLCBBcGlJZCB9IGZyb20gJy4uL3V0aWxzL0Jyb3dzZXJDb25zdGFudHMubWpzJztcbmltcG9ydCB7IE5hdGl2ZUF1dGhFcnJvciwgaXNGYXRhbE5hdGl2ZUF1dGhFcnJvciwgY3JlYXRlTmF0aXZlQXV0aEVycm9yIH0gZnJvbSAnLi4vZXJyb3IvTmF0aXZlQXV0aEVycm9yLm1qcyc7XG5pbXBvcnQgeyBjcmVhdGVCcm93c2VyQXV0aEVycm9yIH0gZnJvbSAnLi4vZXJyb3IvQnJvd3NlckF1dGhFcnJvci5tanMnO1xuaW1wb3J0IHsgU2lsZW50Q2FjaGVDbGllbnQgfSBmcm9tICcuL1NpbGVudENhY2hlQ2xpZW50Lm1qcyc7XG5pbXBvcnQgeyBiYXNlNjREZWNvZGUgfSBmcm9tICcuLi9lbmNvZGUvQmFzZTY0RGVjb2RlLm1qcyc7XG5pbXBvcnQgeyB2ZXJzaW9uIH0gZnJvbSAnLi4vcGFja2FnZU1ldGFkYXRhLm1qcyc7XG5pbXBvcnQgeyBpbnZhbGlkUG9wVG9rZW5SZXF1ZXN0LCBuYXRpdmVQcm9tcHROb3RTdXBwb3J0ZWQgfSBmcm9tICcuLi9lcnJvci9Ccm93c2VyQXV0aEVycm9yQ29kZXMubWpzJztcbmltcG9ydCB7IHVzZXJTd2l0Y2ggfSBmcm9tICcuLi9lcnJvci9OYXRpdmVBdXRoRXJyb3JDb2Rlcy5tanMnO1xuXG4vKlxyXG4gKiBDb3B5cmlnaHQgKGMpIE1pY3Jvc29mdCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cclxuICogTGljZW5zZWQgdW5kZXIgdGhlIE1JVCBMaWNlbnNlLlxyXG4gKi9cclxuY2xhc3MgTmF0aXZlSW50ZXJhY3Rpb25DbGllbnQgZXh0ZW5kcyBCYXNlSW50ZXJhY3Rpb25DbGllbnQge1xyXG4gICAgY29uc3RydWN0b3IoY29uZmlnLCBicm93c2VyU3RvcmFnZSwgYnJvd3NlckNyeXB0bywgbG9nZ2VyLCBldmVudEhhbmRsZXIsIG5hdmlnYXRpb25DbGllbnQsIGFwaUlkLCBwZXJmb3JtYW5jZUNsaWVudCwgcHJvdmlkZXIsIGFjY291bnRJZCwgbmF0aXZlU3RvcmFnZUltcGwsIGNvcnJlbGF0aW9uSWQpIHtcclxuICAgICAgICBzdXBlcihjb25maWcsIGJyb3dzZXJTdG9yYWdlLCBicm93c2VyQ3J5cHRvLCBsb2dnZXIsIGV2ZW50SGFuZGxlciwgbmF2aWdhdGlvbkNsaWVudCwgcGVyZm9ybWFuY2VDbGllbnQsIHByb3ZpZGVyLCBjb3JyZWxhdGlvbklkKTtcclxuICAgICAgICB0aGlzLmFwaUlkID0gYXBpSWQ7XHJcbiAgICAgICAgdGhpcy5hY2NvdW50SWQgPSBhY2NvdW50SWQ7XHJcbiAgICAgICAgdGhpcy5uYXRpdmVNZXNzYWdlSGFuZGxlciA9IHByb3ZpZGVyO1xyXG4gICAgICAgIHRoaXMubmF0aXZlU3RvcmFnZU1hbmFnZXIgPSBuYXRpdmVTdG9yYWdlSW1wbDtcclxuICAgICAgICB0aGlzLnNpbGVudENhY2hlQ2xpZW50ID0gbmV3IFNpbGVudENhY2hlQ2xpZW50KGNvbmZpZywgdGhpcy5uYXRpdmVTdG9yYWdlTWFuYWdlciwgYnJvd3NlckNyeXB0bywgbG9nZ2VyLCBldmVudEhhbmRsZXIsIG5hdmlnYXRpb25DbGllbnQsIHBlcmZvcm1hbmNlQ2xpZW50LCBwcm92aWRlciwgY29ycmVsYXRpb25JZCk7XHJcbiAgICAgICAgdGhpcy5zZXJ2ZXJUZWxlbWV0cnlNYW5hZ2VyID0gdGhpcy5pbml0aWFsaXplU2VydmVyVGVsZW1ldHJ5TWFuYWdlcih0aGlzLmFwaUlkKTtcclxuICAgICAgICBjb25zdCBleHRlbnNpb25OYW1lID0gdGhpcy5uYXRpdmVNZXNzYWdlSGFuZGxlci5nZXRFeHRlbnNpb25JZCgpID09PVxyXG4gICAgICAgICAgICBOYXRpdmVDb25zdGFudHMuUFJFRkVSUkVEX0VYVEVOU0lPTl9JRFxyXG4gICAgICAgICAgICA/IFwiY2hyb21lXCJcclxuICAgICAgICAgICAgOiB0aGlzLm5hdGl2ZU1lc3NhZ2VIYW5kbGVyLmdldEV4dGVuc2lvbklkKCk/Lmxlbmd0aFxyXG4gICAgICAgICAgICAgICAgPyBcInVua25vd25cIlxyXG4gICAgICAgICAgICAgICAgOiB1bmRlZmluZWQ7XHJcbiAgICAgICAgdGhpcy5za3VzID0gU2VydmVyVGVsZW1ldHJ5TWFuYWdlci5tYWtlRXh0cmFTa3VTdHJpbmcoe1xyXG4gICAgICAgICAgICBsaWJyYXJ5TmFtZTogQnJvd3NlckNvbnN0YW50cy5NU0FMX1NLVSxcclxuICAgICAgICAgICAgbGlicmFyeVZlcnNpb246IHZlcnNpb24sXHJcbiAgICAgICAgICAgIGV4dGVuc2lvbk5hbWU6IGV4dGVuc2lvbk5hbWUsXHJcbiAgICAgICAgICAgIGV4dGVuc2lvblZlcnNpb246IHRoaXMubmF0aXZlTWVzc2FnZUhhbmRsZXIuZ2V0RXh0ZW5zaW9uVmVyc2lvbigpLFxyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG4gICAgLyoqXHJcbiAgICAgKiBBZGRzIFNLVXMgdG8gcmVxdWVzdCBleHRyYSBxdWVyeSBwYXJhbWV0ZXJzXHJcbiAgICAgKiBAcGFyYW0gcmVxdWVzdCB7TmF0aXZlVG9rZW5SZXF1ZXN0fVxyXG4gICAgICogQHByaXZhdGVcclxuICAgICAqL1xyXG4gICAgYWRkUmVxdWVzdFNLVXMocmVxdWVzdCkge1xyXG4gICAgICAgIHJlcXVlc3QuZXh0cmFQYXJhbWV0ZXJzID0ge1xyXG4gICAgICAgICAgICAuLi5yZXF1ZXN0LmV4dHJhUGFyYW1ldGVycyxcclxuICAgICAgICAgICAgW0FBRFNlcnZlclBhcmFtS2V5cy5YX0NMSUVOVF9FWFRSQV9TS1VdOiB0aGlzLnNrdXMsXHJcbiAgICAgICAgfTtcclxuICAgIH1cclxuICAgIC8qKlxyXG4gICAgICogQWNxdWlyZSB0b2tlbiBmcm9tIG5hdGl2ZSBwbGF0Zm9ybSB2aWEgYnJvd3NlciBleHRlbnNpb25cclxuICAgICAqIEBwYXJhbSByZXF1ZXN0XHJcbiAgICAgKi9cclxuICAgIGFzeW5jIGFjcXVpcmVUb2tlbihyZXF1ZXN0KSB7XHJcbiAgICAgICAgdGhpcy5wZXJmb3JtYW5jZUNsaWVudC5hZGRRdWV1ZU1lYXN1cmVtZW50KFBlcmZvcm1hbmNlRXZlbnRzLk5hdGl2ZUludGVyYWN0aW9uQ2xpZW50QWNxdWlyZVRva2VuLCByZXF1ZXN0LmNvcnJlbGF0aW9uSWQpO1xyXG4gICAgICAgIHRoaXMubG9nZ2VyLnRyYWNlKFwiTmF0aXZlSW50ZXJhY3Rpb25DbGllbnQgLSBhY3F1aXJlVG9rZW4gY2FsbGVkLlwiKTtcclxuICAgICAgICAvLyBzdGFydCB0aGUgcGVyZiBtZWFzdXJlbWVudFxyXG4gICAgICAgIGNvbnN0IG5hdGl2ZUFUTWVhc3VyZW1lbnQgPSB0aGlzLnBlcmZvcm1hbmNlQ2xpZW50LnN0YXJ0TWVhc3VyZW1lbnQoUGVyZm9ybWFuY2VFdmVudHMuTmF0aXZlSW50ZXJhY3Rpb25DbGllbnRBY3F1aXJlVG9rZW4sIHJlcXVlc3QuY29ycmVsYXRpb25JZCk7XHJcbiAgICAgICAgY29uc3QgcmVxVGltZXN0YW1wID0gVGltZVV0aWxzLm5vd1NlY29uZHMoKTtcclxuICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICAvLyBpbml0aWFsaXplIG5hdGl2ZSByZXF1ZXN0XHJcbiAgICAgICAgICAgIGNvbnN0IG5hdGl2ZVJlcXVlc3QgPSBhd2FpdCB0aGlzLmluaXRpYWxpemVOYXRpdmVSZXF1ZXN0KHJlcXVlc3QpO1xyXG4gICAgICAgICAgICAvLyBjaGVjayBpZiB0aGUgdG9rZW5zIGNhbiBiZSByZXRyaWV2ZWQgZnJvbSBpbnRlcm5hbCBjYWNoZVxyXG4gICAgICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgdGhpcy5hY3F1aXJlVG9rZW5zRnJvbUNhY2hlKHRoaXMuYWNjb3VudElkLCBuYXRpdmVSZXF1ZXN0KTtcclxuICAgICAgICAgICAgICAgIG5hdGl2ZUFUTWVhc3VyZW1lbnQuZW5kKHtcclxuICAgICAgICAgICAgICAgICAgICBzdWNjZXNzOiB0cnVlLFxyXG4gICAgICAgICAgICAgICAgICAgIGlzTmF0aXZlQnJva2VyOiBmYWxzZSxcclxuICAgICAgICAgICAgICAgICAgICBmcm9tQ2FjaGU6IHRydWUsXHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgY2F0Y2ggKGUpIHtcclxuICAgICAgICAgICAgICAgIC8vIGNvbnRpbnVlIHdpdGggYSBuYXRpdmUgY2FsbCBmb3IgYW55IGFuZCBhbGwgZXJyb3JzXHJcbiAgICAgICAgICAgICAgICB0aGlzLmxvZ2dlci5pbmZvKFwiTVNBTCBpbnRlcm5hbCBDYWNoZSBkb2VzIG5vdCBjb250YWluIHRva2VucywgcHJvY2VlZCB0byBtYWtlIGEgbmF0aXZlIGNhbGxcIik7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgY29uc3QgeyAuLi5uYXRpdmVUb2tlblJlcXVlc3QgfSA9IG5hdGl2ZVJlcXVlc3Q7XHJcbiAgICAgICAgICAgIC8vIGZhbGwgYmFjayB0byBuYXRpdmUgY2FsbHNcclxuICAgICAgICAgICAgY29uc3QgbWVzc2FnZUJvZHkgPSB7XHJcbiAgICAgICAgICAgICAgICBtZXRob2Q6IE5hdGl2ZUV4dGVuc2lvbk1ldGhvZC5HZXRUb2tlbixcclxuICAgICAgICAgICAgICAgIHJlcXVlc3Q6IG5hdGl2ZVRva2VuUmVxdWVzdCxcclxuICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLm5hdGl2ZU1lc3NhZ2VIYW5kbGVyLnNlbmRNZXNzYWdlKG1lc3NhZ2VCb2R5KTtcclxuICAgICAgICAgICAgY29uc3QgdmFsaWRhdGVkUmVzcG9uc2UgPSB0aGlzLnZhbGlkYXRlTmF0aXZlUmVzcG9uc2UocmVzcG9uc2UpO1xyXG4gICAgICAgICAgICByZXR1cm4gYXdhaXQgdGhpcy5oYW5kbGVOYXRpdmVSZXNwb25zZSh2YWxpZGF0ZWRSZXNwb25zZSwgbmF0aXZlUmVxdWVzdCwgcmVxVGltZXN0YW1wKVxyXG4gICAgICAgICAgICAgICAgLnRoZW4oKHJlc3VsdCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgbmF0aXZlQVRNZWFzdXJlbWVudC5lbmQoe1xyXG4gICAgICAgICAgICAgICAgICAgIHN1Y2Nlc3M6IHRydWUsXHJcbiAgICAgICAgICAgICAgICAgICAgaXNOYXRpdmVCcm9rZXI6IHRydWUsXHJcbiAgICAgICAgICAgICAgICAgICAgcmVxdWVzdElkOiByZXN1bHQucmVxdWVzdElkLFxyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNlcnZlclRlbGVtZXRyeU1hbmFnZXIuY2xlYXJOYXRpdmVCcm9rZXJFcnJvckNvZGUoKTtcclxuICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7XHJcbiAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgICAgICAuY2F0Y2goKGVycm9yKSA9PiB7XHJcbiAgICAgICAgICAgICAgICBuYXRpdmVBVE1lYXN1cmVtZW50LmVuZCh7XHJcbiAgICAgICAgICAgICAgICAgICAgc3VjY2VzczogZmFsc2UsXHJcbiAgICAgICAgICAgICAgICAgICAgZXJyb3JDb2RlOiBlcnJvci5lcnJvckNvZGUsXHJcbiAgICAgICAgICAgICAgICAgICAgc3ViRXJyb3JDb2RlOiBlcnJvci5zdWJFcnJvcixcclxuICAgICAgICAgICAgICAgICAgICBpc05hdGl2ZUJyb2tlcjogdHJ1ZSxcclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgdGhyb3cgZXJyb3I7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjYXRjaCAoZSkge1xyXG4gICAgICAgICAgICBpZiAoZSBpbnN0YW5jZW9mIE5hdGl2ZUF1dGhFcnJvcikge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zZXJ2ZXJUZWxlbWV0cnlNYW5hZ2VyLnNldE5hdGl2ZUJyb2tlckVycm9yQ29kZShlLmVycm9yQ29kZSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgdGhyb3cgZTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICAvKipcclxuICAgICAqIENyZWF0ZXMgc2lsZW50IGZsb3cgcmVxdWVzdFxyXG4gICAgICogQHBhcmFtIHJlcXVlc3RcclxuICAgICAqIEBwYXJhbSBjYWNoZWRBY2NvdW50XHJcbiAgICAgKiBAcmV0dXJucyBDb21tb25TaWxlbnRGbG93UmVxdWVzdFxyXG4gICAgICovXHJcbiAgICBjcmVhdGVTaWxlbnRDYWNoZVJlcXVlc3QocmVxdWVzdCwgY2FjaGVkQWNjb3VudCkge1xyXG4gICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgIGF1dGhvcml0eTogcmVxdWVzdC5hdXRob3JpdHksXHJcbiAgICAgICAgICAgIGNvcnJlbGF0aW9uSWQ6IHRoaXMuY29ycmVsYXRpb25JZCxcclxuICAgICAgICAgICAgc2NvcGVzOiBTY29wZVNldC5mcm9tU3RyaW5nKHJlcXVlc3Quc2NvcGUpLmFzQXJyYXkoKSxcclxuICAgICAgICAgICAgYWNjb3VudDogY2FjaGVkQWNjb3VudCxcclxuICAgICAgICAgICAgZm9yY2VSZWZyZXNoOiBmYWxzZSxcclxuICAgICAgICB9O1xyXG4gICAgfVxyXG4gICAgLyoqXHJcbiAgICAgKiBGZXRjaGVzIHRoZSB0b2tlbnMgZnJvbSB0aGUgY2FjaGUgaWYgdW4tZXhwaXJlZFxyXG4gICAgICogQHBhcmFtIG5hdGl2ZUFjY291bnRJZFxyXG4gICAgICogQHBhcmFtIHJlcXVlc3RcclxuICAgICAqIEByZXR1cm5zIGF1dGhlbnRpY2F0aW9uUmVzdWx0XHJcbiAgICAgKi9cclxuICAgIGFzeW5jIGFjcXVpcmVUb2tlbnNGcm9tQ2FjaGUobmF0aXZlQWNjb3VudElkLCByZXF1ZXN0KSB7XHJcbiAgICAgICAgaWYgKCFuYXRpdmVBY2NvdW50SWQpIHtcclxuICAgICAgICAgICAgdGhpcy5sb2dnZXIud2FybmluZyhcIk5hdGl2ZUludGVyYWN0aW9uQ2xpZW50OmFjcXVpcmVUb2tlbnNGcm9tQ2FjaGUgLSBObyBuYXRpdmVBY2NvdW50SWQgcHJvdmlkZWRcIik7XHJcbiAgICAgICAgICAgIHRocm93IGNyZWF0ZUNsaWVudEF1dGhFcnJvcihDbGllbnRBdXRoRXJyb3JDb2Rlcy5ub0FjY291bnRGb3VuZCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIC8vIGZldGNoIHRoZSBhY2NvdW50IGZyb20gYnJvd3NlciBjYWNoZVxyXG4gICAgICAgIGNvbnN0IGFjY291bnQgPSB0aGlzLmJyb3dzZXJTdG9yYWdlLmdldEJhc2VBY2NvdW50SW5mbyh7XHJcbiAgICAgICAgICAgIG5hdGl2ZUFjY291bnRJZCxcclxuICAgICAgICB9KTtcclxuICAgICAgICBpZiAoIWFjY291bnQpIHtcclxuICAgICAgICAgICAgdGhyb3cgY3JlYXRlQ2xpZW50QXV0aEVycm9yKENsaWVudEF1dGhFcnJvckNvZGVzLm5vQWNjb3VudEZvdW5kKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgLy8gbGV2ZXJhZ2Ugc2lsZW50IGZsb3cgZm9yIGNhY2hlZCB0b2tlbnMgcmV0cmlldmFsXHJcbiAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgY29uc3Qgc2lsZW50UmVxdWVzdCA9IHRoaXMuY3JlYXRlU2lsZW50Q2FjaGVSZXF1ZXN0KHJlcXVlc3QsIGFjY291bnQpO1xyXG4gICAgICAgICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCB0aGlzLnNpbGVudENhY2hlQ2xpZW50LmFjcXVpcmVUb2tlbihzaWxlbnRSZXF1ZXN0KTtcclxuICAgICAgICAgICAgY29uc3QgZnVsbEFjY291bnQgPSB7XHJcbiAgICAgICAgICAgICAgICAuLi5hY2NvdW50LFxyXG4gICAgICAgICAgICAgICAgaWRUb2tlbkNsYWltczogcmVzdWx0Py5pZFRva2VuQ2xhaW1zLFxyXG4gICAgICAgICAgICAgICAgaWRUb2tlbjogcmVzdWx0Py5pZFRva2VuLFxyXG4gICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICAgICAgLi4ucmVzdWx0LFxyXG4gICAgICAgICAgICAgICAgYWNjb3VudDogZnVsbEFjY291bnQsXHJcbiAgICAgICAgICAgIH07XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNhdGNoIChlKSB7XHJcbiAgICAgICAgICAgIHRocm93IGU7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgLyoqXHJcbiAgICAgKiBBY3F1aXJlcyBhIHRva2VuIGZyb20gbmF0aXZlIHBsYXRmb3JtIHRoZW4gcmVkaXJlY3RzIHRvIHRoZSByZWRpcmVjdFVyaSBpbnN0ZWFkIG9mIHJldHVybmluZyB0aGUgcmVzcG9uc2VcclxuICAgICAqIEBwYXJhbSB7UmVkaXJlY3RSZXF1ZXN0fSByZXF1ZXN0XHJcbiAgICAgKiBAcGFyYW0ge0luUHJvZ3Jlc3NQZXJmb3JtYW5jZUV2ZW50fSByb290TWVhc3VyZW1lbnRcclxuICAgICAqL1xyXG4gICAgYXN5bmMgYWNxdWlyZVRva2VuUmVkaXJlY3QocmVxdWVzdCwgcm9vdE1lYXN1cmVtZW50KSB7XHJcbiAgICAgICAgdGhpcy5sb2dnZXIudHJhY2UoXCJOYXRpdmVJbnRlcmFjdGlvbkNsaWVudCAtIGFjcXVpcmVUb2tlblJlZGlyZWN0IGNhbGxlZC5cIik7XHJcbiAgICAgICAgY29uc3QgeyAuLi5yZW1haW5pbmdQYXJhbWV0ZXJzIH0gPSByZXF1ZXN0O1xyXG4gICAgICAgIGRlbGV0ZSByZW1haW5pbmdQYXJhbWV0ZXJzLm9uUmVkaXJlY3ROYXZpZ2F0ZTtcclxuICAgICAgICBjb25zdCBuYXRpdmVSZXF1ZXN0ID0gYXdhaXQgdGhpcy5pbml0aWFsaXplTmF0aXZlUmVxdWVzdChyZW1haW5pbmdQYXJhbWV0ZXJzKTtcclxuICAgICAgICBjb25zdCBtZXNzYWdlQm9keSA9IHtcclxuICAgICAgICAgICAgbWV0aG9kOiBOYXRpdmVFeHRlbnNpb25NZXRob2QuR2V0VG9rZW4sXHJcbiAgICAgICAgICAgIHJlcXVlc3Q6IG5hdGl2ZVJlcXVlc3QsXHJcbiAgICAgICAgfTtcclxuICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IHRoaXMubmF0aXZlTWVzc2FnZUhhbmRsZXIuc2VuZE1lc3NhZ2UobWVzc2FnZUJvZHkpO1xyXG4gICAgICAgICAgICB0aGlzLnZhbGlkYXRlTmF0aXZlUmVzcG9uc2UocmVzcG9uc2UpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjYXRjaCAoZSkge1xyXG4gICAgICAgICAgICAvLyBPbmx5IHRocm93IGZhdGFsIGVycm9ycyBoZXJlIHRvIGFsbG93IGFwcGxpY2F0aW9uIHRvIGZhbGxiYWNrIHRvIHJlZ3VsYXIgcmVkaXJlY3QuIE90aGVyd2lzZSBwcm9jZWVkIGFuZCB0aGUgZXJyb3Igd2lsbCBiZSB0aHJvd24gaW4gaGFuZGxlUmVkaXJlY3RQcm9taXNlXHJcbiAgICAgICAgICAgIGlmIChlIGluc3RhbmNlb2YgTmF0aXZlQXV0aEVycm9yKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNlcnZlclRlbGVtZXRyeU1hbmFnZXIuc2V0TmF0aXZlQnJva2VyRXJyb3JDb2RlKGUuZXJyb3JDb2RlKTtcclxuICAgICAgICAgICAgICAgIGlmIChpc0ZhdGFsTmF0aXZlQXV0aEVycm9yKGUpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgZTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLmJyb3dzZXJTdG9yYWdlLnNldFRlbXBvcmFyeUNhY2hlKFRlbXBvcmFyeUNhY2hlS2V5cy5OQVRJVkVfUkVRVUVTVCwgSlNPTi5zdHJpbmdpZnkobmF0aXZlUmVxdWVzdCksIHRydWUpO1xyXG4gICAgICAgIGNvbnN0IG5hdmlnYXRpb25PcHRpb25zID0ge1xyXG4gICAgICAgICAgICBhcGlJZDogQXBpSWQuYWNxdWlyZVRva2VuUmVkaXJlY3QsXHJcbiAgICAgICAgICAgIHRpbWVvdXQ6IHRoaXMuY29uZmlnLnN5c3RlbS5yZWRpcmVjdE5hdmlnYXRpb25UaW1lb3V0LFxyXG4gICAgICAgICAgICBub0hpc3Rvcnk6IGZhbHNlLFxyXG4gICAgICAgIH07XHJcbiAgICAgICAgY29uc3QgcmVkaXJlY3RVcmkgPSB0aGlzLmNvbmZpZy5hdXRoLm5hdmlnYXRlVG9Mb2dpblJlcXVlc3RVcmxcclxuICAgICAgICAgICAgPyB3aW5kb3cubG9jYXRpb24uaHJlZlxyXG4gICAgICAgICAgICA6IHRoaXMuZ2V0UmVkaXJlY3RVcmkocmVxdWVzdC5yZWRpcmVjdFVyaSk7XHJcbiAgICAgICAgcm9vdE1lYXN1cmVtZW50LmVuZCh7IHN1Y2Nlc3M6IHRydWUgfSk7XHJcbiAgICAgICAgYXdhaXQgdGhpcy5uYXZpZ2F0aW9uQ2xpZW50Lm5hdmlnYXRlRXh0ZXJuYWwocmVkaXJlY3RVcmksIG5hdmlnYXRpb25PcHRpb25zKTsgLy8gTmVlZCB0byB0cmVhdCB0aGlzIGFzIGV4dGVybmFsIHRvIGVuc3VyZSBoYW5kbGVSZWRpcmVjdFByb21pc2UgaXMgcnVuIGFnYWluXHJcbiAgICB9XHJcbiAgICAvKipcclxuICAgICAqIElmIHRoZSBwcmV2aW91cyBwYWdlIGNhbGxlZCBuYXRpdmUgcGxhdGZvcm0gZm9yIGEgdG9rZW4gdXNpbmcgcmVkaXJlY3QgQVBJcywgc2VuZCB0aGUgc2FtZSByZXF1ZXN0IGFnYWluIGFuZCByZXR1cm4gdGhlIHJlc3BvbnNlXHJcbiAgICAgKiBAcGFyYW0gcGVyZm9ybWFuY2VDbGllbnQge0lQZXJmb3JtYW5jZUNsaWVudD99XHJcbiAgICAgKiBAcGFyYW0gY29ycmVsYXRpb25JZCB7c3RyaW5nP30gY29ycmVsYXRpb24gaWRlbnRpZmllclxyXG4gICAgICovXHJcbiAgICBhc3luYyBoYW5kbGVSZWRpcmVjdFByb21pc2UocGVyZm9ybWFuY2VDbGllbnQsIGNvcnJlbGF0aW9uSWQpIHtcclxuICAgICAgICB0aGlzLmxvZ2dlci50cmFjZShcIk5hdGl2ZUludGVyYWN0aW9uQ2xpZW50IC0gaGFuZGxlUmVkaXJlY3RQcm9taXNlIGNhbGxlZC5cIik7XHJcbiAgICAgICAgaWYgKCF0aGlzLmJyb3dzZXJTdG9yYWdlLmlzSW50ZXJhY3Rpb25JblByb2dyZXNzKHRydWUpKSB7XHJcbiAgICAgICAgICAgIHRoaXMubG9nZ2VyLmluZm8oXCJoYW5kbGVSZWRpcmVjdFByb21pc2UgY2FsbGVkIGJ1dCB0aGVyZSBpcyBubyBpbnRlcmFjdGlvbiBpbiBwcm9ncmVzcywgcmV0dXJuaW5nIG51bGwuXCIpO1xyXG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgICAgICB9XHJcbiAgICAgICAgLy8gcmVtb3ZlIHByb21wdCBmcm9tIHRoZSByZXF1ZXN0IHRvIHByZXZlbnQgV0FNIGZyb20gcHJvbXB0aW5nIHR3aWNlXHJcbiAgICAgICAgY29uc3QgY2FjaGVkUmVxdWVzdCA9IHRoaXMuYnJvd3NlclN0b3JhZ2UuZ2V0Q2FjaGVkTmF0aXZlUmVxdWVzdCgpO1xyXG4gICAgICAgIGlmICghY2FjaGVkUmVxdWVzdCkge1xyXG4gICAgICAgICAgICB0aGlzLmxvZ2dlci52ZXJib3NlKFwiTmF0aXZlSW50ZXJhY3Rpb25DbGllbnQgLSBoYW5kbGVSZWRpcmVjdFByb21pc2UgY2FsbGVkIGJ1dCB0aGVyZSBpcyBubyBjYWNoZWQgcmVxdWVzdCwgcmV0dXJuaW5nIG51bGwuXCIpO1xyXG4gICAgICAgICAgICBpZiAocGVyZm9ybWFuY2VDbGllbnQgJiYgY29ycmVsYXRpb25JZCkge1xyXG4gICAgICAgICAgICAgICAgcGVyZm9ybWFuY2VDbGllbnQ/LmFkZEZpZWxkcyh7IGVycm9yQ29kZTogXCJub19jYWNoZWRfcmVxdWVzdFwiIH0sIGNvcnJlbGF0aW9uSWQpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjb25zdCB7IHByb21wdCwgLi4ucmVxdWVzdCB9ID0gY2FjaGVkUmVxdWVzdDtcclxuICAgICAgICBpZiAocHJvbXB0KSB7XHJcbiAgICAgICAgICAgIHRoaXMubG9nZ2VyLnZlcmJvc2UoXCJOYXRpdmVJbnRlcmFjdGlvbkNsaWVudCAtIGhhbmRsZVJlZGlyZWN0UHJvbWlzZSBjYWxsZWQgYW5kIHByb21wdCB3YXMgaW5jbHVkZWQgaW4gdGhlIG9yaWdpbmFsIHJlcXVlc3QsIHJlbW92aW5nIHByb21wdCBmcm9tIGNhY2hlZCByZXF1ZXN0IHRvIHByZXZlbnQgc2Vjb25kIGludGVyYWN0aW9uIHdpdGggbmF0aXZlIGJyb2tlciB3aW5kb3cuXCIpO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLmJyb3dzZXJTdG9yYWdlLnJlbW92ZUl0ZW0odGhpcy5icm93c2VyU3RvcmFnZS5nZW5lcmF0ZUNhY2hlS2V5KFRlbXBvcmFyeUNhY2hlS2V5cy5OQVRJVkVfUkVRVUVTVCkpO1xyXG4gICAgICAgIGNvbnN0IG1lc3NhZ2VCb2R5ID0ge1xyXG4gICAgICAgICAgICBtZXRob2Q6IE5hdGl2ZUV4dGVuc2lvbk1ldGhvZC5HZXRUb2tlbixcclxuICAgICAgICAgICAgcmVxdWVzdDogcmVxdWVzdCxcclxuICAgICAgICB9O1xyXG4gICAgICAgIGNvbnN0IHJlcVRpbWVzdGFtcCA9IFRpbWVVdGlscy5ub3dTZWNvbmRzKCk7XHJcbiAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgdGhpcy5sb2dnZXIudmVyYm9zZShcIk5hdGl2ZUludGVyYWN0aW9uQ2xpZW50IC0gaGFuZGxlUmVkaXJlY3RQcm9taXNlIHNlbmRpbmcgbWVzc2FnZSB0byBuYXRpdmUgYnJva2VyLlwiKTtcclxuICAgICAgICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLm5hdGl2ZU1lc3NhZ2VIYW5kbGVyLnNlbmRNZXNzYWdlKG1lc3NhZ2VCb2R5KTtcclxuICAgICAgICAgICAgdGhpcy52YWxpZGF0ZU5hdGl2ZVJlc3BvbnNlKHJlc3BvbnNlKTtcclxuICAgICAgICAgICAgY29uc3QgcmVzdWx0ID0gdGhpcy5oYW5kbGVOYXRpdmVSZXNwb25zZShyZXNwb25zZSwgcmVxdWVzdCwgcmVxVGltZXN0YW1wKTtcclxuICAgICAgICAgICAgdGhpcy5icm93c2VyU3RvcmFnZS5zZXRJbnRlcmFjdGlvbkluUHJvZ3Jlc3MoZmFsc2UpO1xyXG4gICAgICAgICAgICBjb25zdCByZXMgPSBhd2FpdCByZXN1bHQ7XHJcbiAgICAgICAgICAgIHRoaXMuc2VydmVyVGVsZW1ldHJ5TWFuYWdlci5jbGVhck5hdGl2ZUJyb2tlckVycm9yQ29kZSgpO1xyXG4gICAgICAgICAgICByZXR1cm4gcmVzO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjYXRjaCAoZSkge1xyXG4gICAgICAgICAgICB0aGlzLmJyb3dzZXJTdG9yYWdlLnNldEludGVyYWN0aW9uSW5Qcm9ncmVzcyhmYWxzZSk7XHJcbiAgICAgICAgICAgIHRocm93IGU7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgLyoqXHJcbiAgICAgKiBMb2dvdXQgZnJvbSBuYXRpdmUgcGxhdGZvcm0gdmlhIGJyb3dzZXIgZXh0ZW5zaW9uXHJcbiAgICAgKiBAcGFyYW0gcmVxdWVzdFxyXG4gICAgICovXHJcbiAgICBsb2dvdXQoKSB7XHJcbiAgICAgICAgdGhpcy5sb2dnZXIudHJhY2UoXCJOYXRpdmVJbnRlcmFjdGlvbkNsaWVudCAtIGxvZ291dCBjYWxsZWQuXCIpO1xyXG4gICAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdChcIkxvZ291dCBub3QgaW1wbGVtZW50ZWQgeWV0XCIpO1xyXG4gICAgfVxyXG4gICAgLyoqXHJcbiAgICAgKiBUcmFuc2Zvcm0gcmVzcG9uc2UgZnJvbSBuYXRpdmUgcGxhdGZvcm0gaW50byBBdXRoZW50aWNhdGlvblJlc3VsdCBvYmplY3Qgd2hpY2ggd2lsbCBiZSByZXR1cm5lZCB0byB0aGUgZW5kIHVzZXJcclxuICAgICAqIEBwYXJhbSByZXNwb25zZVxyXG4gICAgICogQHBhcmFtIHJlcXVlc3RcclxuICAgICAqIEBwYXJhbSByZXFUaW1lc3RhbXBcclxuICAgICAqL1xyXG4gICAgYXN5bmMgaGFuZGxlTmF0aXZlUmVzcG9uc2UocmVzcG9uc2UsIHJlcXVlc3QsIHJlcVRpbWVzdGFtcCkge1xyXG4gICAgICAgIHRoaXMubG9nZ2VyLnRyYWNlKFwiTmF0aXZlSW50ZXJhY3Rpb25DbGllbnQgLSBoYW5kbGVOYXRpdmVSZXNwb25zZSBjYWxsZWQuXCIpO1xyXG4gICAgICAgIC8vIGdlbmVyYXRlIGlkZW50aWZpZXJzXHJcbiAgICAgICAgY29uc3QgaWRUb2tlbkNsYWltcyA9IEF1dGhUb2tlbi5leHRyYWN0VG9rZW5DbGFpbXMocmVzcG9uc2UuaWRfdG9rZW4sIGJhc2U2NERlY29kZSk7XHJcbiAgICAgICAgY29uc3QgaG9tZUFjY291bnRJZGVudGlmaWVyID0gdGhpcy5jcmVhdGVIb21lQWNjb3VudElkZW50aWZpZXIocmVzcG9uc2UsIGlkVG9rZW5DbGFpbXMpO1xyXG4gICAgICAgIGNvbnN0IGNhY2hlZGhvbWVBY2NvdW50SWQgPSB0aGlzLmJyb3dzZXJTdG9yYWdlLmdldEFjY291bnRJbmZvRmlsdGVyZWRCeSh7XHJcbiAgICAgICAgICAgIG5hdGl2ZUFjY291bnRJZDogcmVxdWVzdC5hY2NvdW50SWQsXHJcbiAgICAgICAgfSk/LmhvbWVBY2NvdW50SWQ7XHJcbiAgICAgICAgaWYgKGhvbWVBY2NvdW50SWRlbnRpZmllciAhPT0gY2FjaGVkaG9tZUFjY291bnRJZCAmJlxyXG4gICAgICAgICAgICByZXNwb25zZS5hY2NvdW50LmlkICE9PSByZXF1ZXN0LmFjY291bnRJZCkge1xyXG4gICAgICAgICAgICAvLyBVc2VyIHN3aXRjaCBpbiBuYXRpdmUgYnJva2VyIHByb21wdCBpcyBub3Qgc3VwcG9ydGVkLiBBbGwgdXNlcnMgbXVzdCBmaXJzdCBzaWduIGluIHRocm91Z2ggd2ViIGZsb3cgdG8gZW5zdXJlIHNlcnZlciBzdGF0ZSBpcyBpbiBzeW5jXHJcbiAgICAgICAgICAgIHRocm93IGNyZWF0ZU5hdGl2ZUF1dGhFcnJvcih1c2VyU3dpdGNoKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgLy8gR2V0IHRoZSBwcmVmZXJyZWRfY2FjaGUgZG9tYWluIGZvciB0aGUgZ2l2ZW4gYXV0aG9yaXR5XHJcbiAgICAgICAgY29uc3QgYXV0aG9yaXR5ID0gYXdhaXQgdGhpcy5nZXREaXNjb3ZlcmVkQXV0aG9yaXR5KHtcclxuICAgICAgICAgICAgcmVxdWVzdEF1dGhvcml0eTogcmVxdWVzdC5hdXRob3JpdHksXHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgY29uc3QgYmFzZUFjY291bnQgPSBidWlsZEFjY291bnRUb0NhY2hlKHRoaXMuYnJvd3NlclN0b3JhZ2UsIGF1dGhvcml0eSwgaG9tZUFjY291bnRJZGVudGlmaWVyLCBiYXNlNjREZWNvZGUsIGlkVG9rZW5DbGFpbXMsIHJlc3BvbnNlLmNsaWVudF9pbmZvLCB1bmRlZmluZWQsIC8vIGVudmlyb25tZW50XHJcbiAgICAgICAgaWRUb2tlbkNsYWltcy50aWQsIHVuZGVmaW5lZCwgLy8gYXV0aCBjb2RlIHBheWxvYWRcclxuICAgICAgICByZXNwb25zZS5hY2NvdW50LmlkLCB0aGlzLmxvZ2dlcik7XHJcbiAgICAgICAgLy8gZ2VuZXJhdGUgYXV0aGVudGljYXRpb25SZXN1bHRcclxuICAgICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCB0aGlzLmdlbmVyYXRlQXV0aGVudGljYXRpb25SZXN1bHQocmVzcG9uc2UsIHJlcXVlc3QsIGlkVG9rZW5DbGFpbXMsIGJhc2VBY2NvdW50LCBhdXRob3JpdHkuY2Fub25pY2FsQXV0aG9yaXR5LCByZXFUaW1lc3RhbXApO1xyXG4gICAgICAgIC8vIGNhY2hlIGFjY291bnRzIGFuZCB0b2tlbnMgaW4gdGhlIGFwcHJvcHJpYXRlIHN0b3JhZ2VcclxuICAgICAgICB0aGlzLmNhY2hlQWNjb3VudChiYXNlQWNjb3VudCk7XHJcbiAgICAgICAgdGhpcy5jYWNoZU5hdGl2ZVRva2VucyhyZXNwb25zZSwgcmVxdWVzdCwgaG9tZUFjY291bnRJZGVudGlmaWVyLCBpZFRva2VuQ2xhaW1zLCByZXNwb25zZS5hY2Nlc3NfdG9rZW4sIHJlc3VsdC50ZW5hbnRJZCwgcmVxVGltZXN0YW1wKTtcclxuICAgICAgICByZXR1cm4gcmVzdWx0O1xyXG4gICAgfVxyXG4gICAgLyoqXHJcbiAgICAgKiBjcmVhdGVzIGFuIGhvbWVBY2NvdW50SWRlbnRpZmllciBmb3IgdGhlIGFjY291bnRcclxuICAgICAqIEBwYXJhbSByZXNwb25zZVxyXG4gICAgICogQHBhcmFtIGlkVG9rZW5PYmpcclxuICAgICAqIEByZXR1cm5zXHJcbiAgICAgKi9cclxuICAgIGNyZWF0ZUhvbWVBY2NvdW50SWRlbnRpZmllcihyZXNwb25zZSwgaWRUb2tlbkNsYWltcykge1xyXG4gICAgICAgIC8vIFNhdmUgYWNjb3VudCBpbiBicm93c2VyIHN0b3JhZ2VcclxuICAgICAgICBjb25zdCBob21lQWNjb3VudElkZW50aWZpZXIgPSBBY2NvdW50RW50aXR5LmdlbmVyYXRlSG9tZUFjY291bnRJZChyZXNwb25zZS5jbGllbnRfaW5mbyB8fCBDb25zdGFudHMuRU1QVFlfU1RSSU5HLCBBdXRob3JpdHlUeXBlLkRlZmF1bHQsIHRoaXMubG9nZ2VyLCB0aGlzLmJyb3dzZXJDcnlwdG8sIGlkVG9rZW5DbGFpbXMpO1xyXG4gICAgICAgIHJldHVybiBob21lQWNjb3VudElkZW50aWZpZXI7XHJcbiAgICB9XHJcbiAgICAvKipcclxuICAgICAqIEhlbHBlciB0byBnZW5lcmF0ZSBzY29wZXNcclxuICAgICAqIEBwYXJhbSByZXNwb25zZVxyXG4gICAgICogQHBhcmFtIHJlcXVlc3RcclxuICAgICAqIEByZXR1cm5zXHJcbiAgICAgKi9cclxuICAgIGdlbmVyYXRlU2NvcGVzKHJlc3BvbnNlLCByZXF1ZXN0KSB7XHJcbiAgICAgICAgcmV0dXJuIHJlc3BvbnNlLnNjb3BlXHJcbiAgICAgICAgICAgID8gU2NvcGVTZXQuZnJvbVN0cmluZyhyZXNwb25zZS5zY29wZSlcclxuICAgICAgICAgICAgOiBTY29wZVNldC5mcm9tU3RyaW5nKHJlcXVlc3Quc2NvcGUpO1xyXG4gICAgfVxyXG4gICAgLyoqXHJcbiAgICAgKiBJZiBQb1AgdG9rZW4gaXMgcmVxdWVzcmVkLCByZWNvcmRzIHRoZSBQb1AgdG9rZW4gaWYgcmV0dXJuZWQgZnJvbSB0aGUgV0FNLCBlbHNlIGdlbmVyYXRlcyBvbmUgaW4gdGhlIGJyb3dzZXJcclxuICAgICAqIEBwYXJhbSByZXF1ZXN0XHJcbiAgICAgKiBAcGFyYW0gcmVzcG9uc2VcclxuICAgICAqL1xyXG4gICAgYXN5bmMgZ2VuZXJhdGVQb3BBY2Nlc3NUb2tlbihyZXNwb25zZSwgcmVxdWVzdCkge1xyXG4gICAgICAgIGlmIChyZXF1ZXN0LnRva2VuVHlwZSA9PT0gQXV0aGVudGljYXRpb25TY2hlbWUuUE9QICYmXHJcbiAgICAgICAgICAgIHJlcXVlc3Quc2lnblBvcFRva2VuKSB7XHJcbiAgICAgICAgICAgIC8qKlxyXG4gICAgICAgICAgICAgKiBUaGlzIGNvZGUgcHJpb3JpdGl6ZXMgU0hSIHJldHVybmVkIGZyb20gdGhlIG5hdGl2ZSBsYXllci4gSW4gY2FzZSBvZiBlcnJvci9TSFIgbm90IGNhbGN1bGF0ZWQgZnJvbSBXQU0gYW5kIHRoZSBBVFxyXG4gICAgICAgICAgICAgKiBpcyBzdGlsbCByZWNlaXZlZCwgU0hSIGlzIGNhbGN1bGF0ZWQgbG9jYWxseVxyXG4gICAgICAgICAgICAgKi9cclxuICAgICAgICAgICAgLy8gQ2hlY2sgaWYgbmF0aXZlIGxheWVyIHJldHVybmVkIGFuIFNIUiB0b2tlblxyXG4gICAgICAgICAgICBpZiAocmVzcG9uc2Uuc2hyKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmxvZ2dlci50cmFjZShcImhhbmRsZU5hdGl2ZVNlcnZlclJlc3BvbnNlOiBTSFIgaXMgZW5hYmxlZCBpbiBuYXRpdmUgbGF5ZXJcIik7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gcmVzcG9uc2Uuc2hyO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIC8vIEdlbmVyYXRlIFNIUiBpbiBtc2FsIGpzIGlmIFdBTSBkb2VzIG5vdCBjb21wdXRlIGl0IHdoZW4gUE9QIGlzIGVuYWJsZWRcclxuICAgICAgICAgICAgY29uc3QgcG9wVG9rZW5HZW5lcmF0b3IgPSBuZXcgUG9wVG9rZW5HZW5lcmF0b3IodGhpcy5icm93c2VyQ3J5cHRvKTtcclxuICAgICAgICAgICAgY29uc3Qgc2hyUGFyYW1ldGVycyA9IHtcclxuICAgICAgICAgICAgICAgIHJlc291cmNlUmVxdWVzdE1ldGhvZDogcmVxdWVzdC5yZXNvdXJjZVJlcXVlc3RNZXRob2QsXHJcbiAgICAgICAgICAgICAgICByZXNvdXJjZVJlcXVlc3RVcmk6IHJlcXVlc3QucmVzb3VyY2VSZXF1ZXN0VXJpLFxyXG4gICAgICAgICAgICAgICAgc2hyQ2xhaW1zOiByZXF1ZXN0LnNockNsYWltcyxcclxuICAgICAgICAgICAgICAgIHNock5vbmNlOiByZXF1ZXN0LnNock5vbmNlLFxyXG4gICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICAvKipcclxuICAgICAgICAgICAgICogS2V5SUQgbXVzdCBiZSBwcmVzZW50IGluIHRoZSBuYXRpdmUgcmVxdWVzdCBmcm9tIHdoZW4gdGhlIFBvUCBrZXkgd2FzIGdlbmVyYXRlZCBpbiBvcmRlciBmb3JcclxuICAgICAgICAgICAgICogUG9wVG9rZW5HZW5lcmF0b3IgdG8gcXVlcnkgdGhlIGZ1bGwga2V5IGZvciBzaWduaW5nXHJcbiAgICAgICAgICAgICAqL1xyXG4gICAgICAgICAgICBpZiAoIXJlcXVlc3Qua2V5SWQpIHtcclxuICAgICAgICAgICAgICAgIHRocm93IGNyZWF0ZUNsaWVudEF1dGhFcnJvcihDbGllbnRBdXRoRXJyb3JDb2Rlcy5rZXlJZE1pc3NpbmcpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJldHVybiBwb3BUb2tlbkdlbmVyYXRvci5zaWduUG9wVG9rZW4ocmVzcG9uc2UuYWNjZXNzX3Rva2VuLCByZXF1ZXN0LmtleUlkLCBzaHJQYXJhbWV0ZXJzKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIHJldHVybiByZXNwb25zZS5hY2Nlc3NfdG9rZW47XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgLyoqXHJcbiAgICAgKiBHZW5lcmF0ZXMgYXV0aGVudGljYXRpb24gcmVzdWx0XHJcbiAgICAgKiBAcGFyYW0gcmVzcG9uc2VcclxuICAgICAqIEBwYXJhbSByZXF1ZXN0XHJcbiAgICAgKiBAcGFyYW0gaWRUb2tlbk9ialxyXG4gICAgICogQHBhcmFtIGFjY291bnRFbnRpdHlcclxuICAgICAqIEBwYXJhbSBhdXRob3JpdHlcclxuICAgICAqIEBwYXJhbSByZXFUaW1lc3RhbXBcclxuICAgICAqIEByZXR1cm5zXHJcbiAgICAgKi9cclxuICAgIGFzeW5jIGdlbmVyYXRlQXV0aGVudGljYXRpb25SZXN1bHQocmVzcG9uc2UsIHJlcXVlc3QsIGlkVG9rZW5DbGFpbXMsIGFjY291bnRFbnRpdHksIGF1dGhvcml0eSwgcmVxVGltZXN0YW1wKSB7XHJcbiAgICAgICAgLy8gQWRkIE5hdGl2ZSBCcm9rZXIgZmllbGRzIHRvIFRlbGVtZXRyeVxyXG4gICAgICAgIGNvbnN0IG1hdHMgPSB0aGlzLmFkZFRlbGVtZXRyeUZyb21OYXRpdmVSZXNwb25zZShyZXNwb25zZSk7XHJcbiAgICAgICAgLy8gSWYgc2NvcGVzIG5vdCByZXR1cm5lZCBpbiBzZXJ2ZXIgcmVzcG9uc2UsIHVzZSByZXF1ZXN0IHNjb3Blc1xyXG4gICAgICAgIGNvbnN0IHJlc3BvbnNlU2NvcGVzID0gcmVzcG9uc2Uuc2NvcGVcclxuICAgICAgICAgICAgPyBTY29wZVNldC5mcm9tU3RyaW5nKHJlc3BvbnNlLnNjb3BlKVxyXG4gICAgICAgICAgICA6IFNjb3BlU2V0LmZyb21TdHJpbmcocmVxdWVzdC5zY29wZSk7XHJcbiAgICAgICAgY29uc3QgYWNjb3VudFByb3BlcnRpZXMgPSByZXNwb25zZS5hY2NvdW50LnByb3BlcnRpZXMgfHwge307XHJcbiAgICAgICAgY29uc3QgdWlkID0gYWNjb3VudFByb3BlcnRpZXNbXCJVSURcIl0gfHxcclxuICAgICAgICAgICAgaWRUb2tlbkNsYWltcy5vaWQgfHxcclxuICAgICAgICAgICAgaWRUb2tlbkNsYWltcy5zdWIgfHxcclxuICAgICAgICAgICAgQ29uc3RhbnRzLkVNUFRZX1NUUklORztcclxuICAgICAgICBjb25zdCB0aWQgPSBhY2NvdW50UHJvcGVydGllc1tcIlRlbmFudElkXCJdIHx8XHJcbiAgICAgICAgICAgIGlkVG9rZW5DbGFpbXMudGlkIHx8XHJcbiAgICAgICAgICAgIENvbnN0YW50cy5FTVBUWV9TVFJJTkc7XHJcbiAgICAgICAgY29uc3QgYWNjb3VudEluZm8gPSB1cGRhdGVBY2NvdW50VGVuYW50UHJvZmlsZURhdGEoYWNjb3VudEVudGl0eS5nZXRBY2NvdW50SW5mbygpLCB1bmRlZmluZWQsIC8vIHRlbmFudFByb2ZpbGUgb3B0aW9uYWxcclxuICAgICAgICBpZFRva2VuQ2xhaW1zLCByZXNwb25zZS5pZF90b2tlbik7XHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogSW4gcGFpcndpc2UgYnJva2VyIGZsb3dzLCB0aGlzIGNoZWNrIHByZXZlbnRzIHRoZSBicm9rZXIncyBuYXRpdmUgYWNjb3VudCBpZFxyXG4gICAgICAgICAqIGZyb20gYmVpbmcgcmV0dXJuZWQgb3ZlciB0aGUgZW1iZWRkZWQgYXBwJ3MgYWNjb3VudCBpZC5cclxuICAgICAgICAgKi9cclxuICAgICAgICBpZiAoYWNjb3VudEluZm8ubmF0aXZlQWNjb3VudElkICE9PSByZXNwb25zZS5hY2NvdW50LmlkKSB7XHJcbiAgICAgICAgICAgIGFjY291bnRJbmZvLm5hdGl2ZUFjY291bnRJZCA9IHJlc3BvbnNlLmFjY291bnQuaWQ7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIC8vIGdlbmVyYXRlIFBvUCB0b2tlbiBhcyBuZWVkZWRcclxuICAgICAgICBjb25zdCByZXNwb25zZUFjY2Vzc1Rva2VuID0gYXdhaXQgdGhpcy5nZW5lcmF0ZVBvcEFjY2Vzc1Rva2VuKHJlc3BvbnNlLCByZXF1ZXN0KTtcclxuICAgICAgICBjb25zdCB0b2tlblR5cGUgPSByZXF1ZXN0LnRva2VuVHlwZSA9PT0gQXV0aGVudGljYXRpb25TY2hlbWUuUE9QXHJcbiAgICAgICAgICAgID8gQXV0aGVudGljYXRpb25TY2hlbWUuUE9QXHJcbiAgICAgICAgICAgIDogQXV0aGVudGljYXRpb25TY2hlbWUuQkVBUkVSO1xyXG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IHtcclxuICAgICAgICAgICAgYXV0aG9yaXR5OiBhdXRob3JpdHksXHJcbiAgICAgICAgICAgIHVuaXF1ZUlkOiB1aWQsXHJcbiAgICAgICAgICAgIHRlbmFudElkOiB0aWQsXHJcbiAgICAgICAgICAgIHNjb3BlczogcmVzcG9uc2VTY29wZXMuYXNBcnJheSgpLFxyXG4gICAgICAgICAgICBhY2NvdW50OiBhY2NvdW50SW5mbyxcclxuICAgICAgICAgICAgaWRUb2tlbjogcmVzcG9uc2UuaWRfdG9rZW4sXHJcbiAgICAgICAgICAgIGlkVG9rZW5DbGFpbXM6IGlkVG9rZW5DbGFpbXMsXHJcbiAgICAgICAgICAgIGFjY2Vzc1Rva2VuOiByZXNwb25zZUFjY2Vzc1Rva2VuLFxyXG4gICAgICAgICAgICBmcm9tQ2FjaGU6IG1hdHMgPyB0aGlzLmlzUmVzcG9uc2VGcm9tQ2FjaGUobWF0cykgOiBmYWxzZSxcclxuICAgICAgICAgICAgZXhwaXJlc09uOiBuZXcgRGF0ZShOdW1iZXIocmVxVGltZXN0YW1wICsgcmVzcG9uc2UuZXhwaXJlc19pbikgKiAxMDAwKSxcclxuICAgICAgICAgICAgdG9rZW5UeXBlOiB0b2tlblR5cGUsXHJcbiAgICAgICAgICAgIGNvcnJlbGF0aW9uSWQ6IHRoaXMuY29ycmVsYXRpb25JZCxcclxuICAgICAgICAgICAgc3RhdGU6IHJlc3BvbnNlLnN0YXRlLFxyXG4gICAgICAgICAgICBmcm9tTmF0aXZlQnJva2VyOiB0cnVlLFxyXG4gICAgICAgIH07XHJcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcclxuICAgIH1cclxuICAgIC8qKlxyXG4gICAgICogY2FjaGUgdGhlIGFjY291bnQgZW50aXR5IGluIGJyb3dzZXIgc3RvcmFnZVxyXG4gICAgICogQHBhcmFtIGFjY291bnRFbnRpdHlcclxuICAgICAqL1xyXG4gICAgY2FjaGVBY2NvdW50KGFjY291bnRFbnRpdHkpIHtcclxuICAgICAgICAvLyBTdG9yZSB0aGUgYWNjb3VudCBpbmZvIGFuZCBoZW5jZSBgbmF0aXZlQWNjb3VudElkYCBpbiBicm93c2VyIGNhY2hlXHJcbiAgICAgICAgdGhpcy5icm93c2VyU3RvcmFnZS5zZXRBY2NvdW50KGFjY291bnRFbnRpdHkpO1xyXG4gICAgICAgIC8vIFJlbW92ZSBhbnkgZXhpc3RpbmcgY2FjaGVkIHRva2VucyBmb3IgdGhpcyBhY2NvdW50IGluIGJyb3dzZXIgc3RvcmFnZVxyXG4gICAgICAgIHRoaXMuYnJvd3NlclN0b3JhZ2UucmVtb3ZlQWNjb3VudENvbnRleHQoYWNjb3VudEVudGl0eSkuY2F0Y2goKGUpID0+IHtcclxuICAgICAgICAgICAgdGhpcy5sb2dnZXIuZXJyb3IoYEVycm9yIG9jY3VycmVkIHdoaWxlIHJlbW92aW5nIGFjY291bnQgY29udGV4dCBmcm9tIGJyb3dzZXIgc3RvcmFnZS4gJHtlfWApO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG4gICAgLyoqXHJcbiAgICAgKiBTdG9yZXMgdGhlIGFjY2Vzc190b2tlbiBhbmQgaWRfdG9rZW4gaW4gaW5tZW1vcnkgc3RvcmFnZVxyXG4gICAgICogQHBhcmFtIHJlc3BvbnNlXHJcbiAgICAgKiBAcGFyYW0gcmVxdWVzdFxyXG4gICAgICogQHBhcmFtIGhvbWVBY2NvdW50SWRlbnRpZmllclxyXG4gICAgICogQHBhcmFtIGlkVG9rZW5PYmpcclxuICAgICAqIEBwYXJhbSByZXNwb25zZUFjY2Vzc1Rva2VuXHJcbiAgICAgKiBAcGFyYW0gdGVuYW50SWRcclxuICAgICAqIEBwYXJhbSByZXFUaW1lc3RhbXBcclxuICAgICAqL1xyXG4gICAgY2FjaGVOYXRpdmVUb2tlbnMocmVzcG9uc2UsIHJlcXVlc3QsIGhvbWVBY2NvdW50SWRlbnRpZmllciwgaWRUb2tlbkNsYWltcywgcmVzcG9uc2VBY2Nlc3NUb2tlbiwgdGVuYW50SWQsIHJlcVRpbWVzdGFtcCkge1xyXG4gICAgICAgIGNvbnN0IGNhY2hlZElkVG9rZW4gPSBDYWNoZUhlbHBlcnMuY3JlYXRlSWRUb2tlbkVudGl0eShob21lQWNjb3VudElkZW50aWZpZXIsIHJlcXVlc3QuYXV0aG9yaXR5LCByZXNwb25zZS5pZF90b2tlbiB8fCBcIlwiLCByZXF1ZXN0LmNsaWVudElkLCBpZFRva2VuQ2xhaW1zLnRpZCB8fCBcIlwiKTtcclxuICAgICAgICAvLyBjYWNoZSBhY2Nlc3NUb2tlbiBpbiBpbm1lbW9yeSBzdG9yYWdlXHJcbiAgICAgICAgY29uc3QgZXhwaXJlc0luID0gcmVxdWVzdC50b2tlblR5cGUgPT09IEF1dGhlbnRpY2F0aW9uU2NoZW1lLlBPUFxyXG4gICAgICAgICAgICA/IENvbnN0YW50cy5TSFJfTk9OQ0VfVkFMSURJVFlcclxuICAgICAgICAgICAgOiAodHlwZW9mIHJlc3BvbnNlLmV4cGlyZXNfaW4gPT09IFwic3RyaW5nXCJcclxuICAgICAgICAgICAgICAgID8gcGFyc2VJbnQocmVzcG9uc2UuZXhwaXJlc19pbiwgMTApXHJcbiAgICAgICAgICAgICAgICA6IHJlc3BvbnNlLmV4cGlyZXNfaW4pIHx8IDA7XHJcbiAgICAgICAgY29uc3QgdG9rZW5FeHBpcmF0aW9uU2Vjb25kcyA9IHJlcVRpbWVzdGFtcCArIGV4cGlyZXNJbjtcclxuICAgICAgICBjb25zdCByZXNwb25zZVNjb3BlcyA9IHRoaXMuZ2VuZXJhdGVTY29wZXMocmVzcG9uc2UsIHJlcXVlc3QpO1xyXG4gICAgICAgIGNvbnN0IGNhY2hlZEFjY2Vzc1Rva2VuID0gQ2FjaGVIZWxwZXJzLmNyZWF0ZUFjY2Vzc1Rva2VuRW50aXR5KGhvbWVBY2NvdW50SWRlbnRpZmllciwgcmVxdWVzdC5hdXRob3JpdHksIHJlc3BvbnNlQWNjZXNzVG9rZW4sIHJlcXVlc3QuY2xpZW50SWQsIGlkVG9rZW5DbGFpbXMudGlkIHx8IHRlbmFudElkLCByZXNwb25zZVNjb3Blcy5wcmludFNjb3BlcygpLCB0b2tlbkV4cGlyYXRpb25TZWNvbmRzLCAwLCBiYXNlNjREZWNvZGUsIHVuZGVmaW5lZCwgcmVxdWVzdC50b2tlblR5cGUsIHVuZGVmaW5lZCwgcmVxdWVzdC5rZXlJZCk7XHJcbiAgICAgICAgY29uc3QgbmF0aXZlQ2FjaGVSZWNvcmQgPSB7XHJcbiAgICAgICAgICAgIGlkVG9rZW46IGNhY2hlZElkVG9rZW4sXHJcbiAgICAgICAgICAgIGFjY2Vzc1Rva2VuOiBjYWNoZWRBY2Nlc3NUb2tlbixcclxuICAgICAgICB9O1xyXG4gICAgICAgIHZvaWQgdGhpcy5uYXRpdmVTdG9yYWdlTWFuYWdlci5zYXZlQ2FjaGVSZWNvcmQobmF0aXZlQ2FjaGVSZWNvcmQsIHJlcXVlc3Quc3RvcmVJbkNhY2hlKTtcclxuICAgIH1cclxuICAgIGFkZFRlbGVtZXRyeUZyb21OYXRpdmVSZXNwb25zZShyZXNwb25zZSkge1xyXG4gICAgICAgIGNvbnN0IG1hdHMgPSB0aGlzLmdldE1BVFNGcm9tUmVzcG9uc2UocmVzcG9uc2UpO1xyXG4gICAgICAgIGlmICghbWF0cykge1xyXG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5wZXJmb3JtYW5jZUNsaWVudC5hZGRGaWVsZHMoe1xyXG4gICAgICAgICAgICBleHRlbnNpb25JZDogdGhpcy5uYXRpdmVNZXNzYWdlSGFuZGxlci5nZXRFeHRlbnNpb25JZCgpLFxyXG4gICAgICAgICAgICBleHRlbnNpb25WZXJzaW9uOiB0aGlzLm5hdGl2ZU1lc3NhZ2VIYW5kbGVyLmdldEV4dGVuc2lvblZlcnNpb24oKSxcclxuICAgICAgICAgICAgbWF0c0Jyb2tlclZlcnNpb246IG1hdHMuYnJva2VyX3ZlcnNpb24sXHJcbiAgICAgICAgICAgIG1hdHNBY2NvdW50Sm9pbk9uU3RhcnQ6IG1hdHMuYWNjb3VudF9qb2luX29uX3N0YXJ0LFxyXG4gICAgICAgICAgICBtYXRzQWNjb3VudEpvaW5PbkVuZDogbWF0cy5hY2NvdW50X2pvaW5fb25fZW5kLFxyXG4gICAgICAgICAgICBtYXRzRGV2aWNlSm9pbjogbWF0cy5kZXZpY2Vfam9pbixcclxuICAgICAgICAgICAgbWF0c1Byb21wdEJlaGF2aW9yOiBtYXRzLnByb21wdF9iZWhhdmlvcixcclxuICAgICAgICAgICAgbWF0c0FwaUVycm9yQ29kZTogbWF0cy5hcGlfZXJyb3JfY29kZSxcclxuICAgICAgICAgICAgbWF0c1VpVmlzaWJsZTogbWF0cy51aV92aXNpYmxlLFxyXG4gICAgICAgICAgICBtYXRzU2lsZW50Q29kZTogbWF0cy5zaWxlbnRfY29kZSxcclxuICAgICAgICAgICAgbWF0c1NpbGVudEJpU3ViQ29kZTogbWF0cy5zaWxlbnRfYmlfc3ViX2NvZGUsXHJcbiAgICAgICAgICAgIG1hdHNTaWxlbnRNZXNzYWdlOiBtYXRzLnNpbGVudF9tZXNzYWdlLFxyXG4gICAgICAgICAgICBtYXRzU2lsZW50U3RhdHVzOiBtYXRzLnNpbGVudF9zdGF0dXMsXHJcbiAgICAgICAgICAgIG1hdHNIdHRwU3RhdHVzOiBtYXRzLmh0dHBfc3RhdHVzLFxyXG4gICAgICAgICAgICBtYXRzSHR0cEV2ZW50Q291bnQ6IG1hdHMuaHR0cF9ldmVudF9jb3VudCxcclxuICAgICAgICB9LCB0aGlzLmNvcnJlbGF0aW9uSWQpO1xyXG4gICAgICAgIHJldHVybiBtYXRzO1xyXG4gICAgfVxyXG4gICAgLyoqXHJcbiAgICAgKiBWYWxpZGF0ZXMgbmF0aXZlIHBsYXRmb3JtIHJlc3BvbnNlIGJlZm9yZSBwcm9jZXNzaW5nXHJcbiAgICAgKiBAcGFyYW0gcmVzcG9uc2VcclxuICAgICAqL1xyXG4gICAgdmFsaWRhdGVOYXRpdmVSZXNwb25zZShyZXNwb25zZSkge1xyXG4gICAgICAgIGlmIChyZXNwb25zZS5oYXNPd25Qcm9wZXJ0eShcImFjY2Vzc190b2tlblwiKSAmJlxyXG4gICAgICAgICAgICByZXNwb25zZS5oYXNPd25Qcm9wZXJ0eShcImlkX3Rva2VuXCIpICYmXHJcbiAgICAgICAgICAgIHJlc3BvbnNlLmhhc093blByb3BlcnR5KFwiY2xpZW50X2luZm9cIikgJiZcclxuICAgICAgICAgICAgcmVzcG9uc2UuaGFzT3duUHJvcGVydHkoXCJhY2NvdW50XCIpICYmXHJcbiAgICAgICAgICAgIHJlc3BvbnNlLmhhc093blByb3BlcnR5KFwic2NvcGVcIikgJiZcclxuICAgICAgICAgICAgcmVzcG9uc2UuaGFzT3duUHJvcGVydHkoXCJleHBpcmVzX2luXCIpKSB7XHJcbiAgICAgICAgICAgIHJldHVybiByZXNwb25zZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIHRocm93IGNyZWF0ZUF1dGhFcnJvcihBdXRoRXJyb3JDb2Rlcy51bmV4cGVjdGVkRXJyb3IsIFwiUmVzcG9uc2UgbWlzc2luZyBleHBlY3RlZCBwcm9wZXJ0aWVzLlwiKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICAvKipcclxuICAgICAqIEdldHMgTUFUUyB0ZWxlbWV0cnkgZnJvbSBuYXRpdmUgcmVzcG9uc2VcclxuICAgICAqIEBwYXJhbSByZXNwb25zZVxyXG4gICAgICogQHJldHVybnNcclxuICAgICAqL1xyXG4gICAgZ2V0TUFUU0Zyb21SZXNwb25zZShyZXNwb25zZSkge1xyXG4gICAgICAgIGlmIChyZXNwb25zZS5wcm9wZXJ0aWVzLk1BVFMpIHtcclxuICAgICAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgICAgIHJldHVybiBKU09OLnBhcnNlKHJlc3BvbnNlLnByb3BlcnRpZXMuTUFUUyk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgY2F0Y2ggKGUpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMubG9nZ2VyLmVycm9yKFwiTmF0aXZlSW50ZXJhY3Rpb25DbGllbnQgLSBFcnJvciBwYXJzaW5nIE1BVFMgdGVsZW1ldHJ5LCByZXR1cm5pbmcgbnVsbCBpbnN0ZWFkXCIpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgfVxyXG4gICAgLyoqXHJcbiAgICAgKiBSZXR1cm5zIHdoZXRoZXIgb3Igbm90IHJlc3BvbnNlIGNhbWUgZnJvbSBuYXRpdmUgY2FjaGVcclxuICAgICAqIEBwYXJhbSByZXNwb25zZVxyXG4gICAgICogQHJldHVybnNcclxuICAgICAqL1xyXG4gICAgaXNSZXNwb25zZUZyb21DYWNoZShtYXRzKSB7XHJcbiAgICAgICAgaWYgKHR5cGVvZiBtYXRzLmlzX2NhY2hlZCA9PT0gXCJ1bmRlZmluZWRcIikge1xyXG4gICAgICAgICAgICB0aGlzLmxvZ2dlci52ZXJib3NlKFwiTmF0aXZlSW50ZXJhY3Rpb25DbGllbnQgLSBNQVRTIHRlbGVtZXRyeSBkb2VzIG5vdCBjb250YWluIGZpZWxkIGluZGljYXRpbmcgaWYgcmVzcG9uc2Ugd2FzIHNlcnZlZCBmcm9tIGNhY2hlLiBSZXR1cm5pbmcgZmFsc2UuXCIpO1xyXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiAhIW1hdHMuaXNfY2FjaGVkO1xyXG4gICAgfVxyXG4gICAgLyoqXHJcbiAgICAgKiBUcmFuc2xhdGVzIGRldmVsb3BlciBwcm92aWRlZCByZXF1ZXN0IG9iamVjdCBpbnRvIE5hdGl2ZVJlcXVlc3Qgb2JqZWN0XHJcbiAgICAgKiBAcGFyYW0gcmVxdWVzdFxyXG4gICAgICovXHJcbiAgICBhc3luYyBpbml0aWFsaXplTmF0aXZlUmVxdWVzdChyZXF1ZXN0KSB7XHJcbiAgICAgICAgdGhpcy5sb2dnZXIudHJhY2UoXCJOYXRpdmVJbnRlcmFjdGlvbkNsaWVudCAtIGluaXRpYWxpemVOYXRpdmVSZXF1ZXN0IGNhbGxlZFwiKTtcclxuICAgICAgICBjb25zdCByZXF1ZXN0QXV0aG9yaXR5ID0gcmVxdWVzdC5hdXRob3JpdHkgfHwgdGhpcy5jb25maWcuYXV0aC5hdXRob3JpdHk7XHJcbiAgICAgICAgaWYgKHJlcXVlc3QuYWNjb3VudCkge1xyXG4gICAgICAgICAgICAvLyB2YWxpZGF0ZSBhdXRob3JpdHlcclxuICAgICAgICAgICAgYXdhaXQgdGhpcy5nZXREaXNjb3ZlcmVkQXV0aG9yaXR5KHtcclxuICAgICAgICAgICAgICAgIHJlcXVlc3RBdXRob3JpdHksXHJcbiAgICAgICAgICAgICAgICByZXF1ZXN0QXp1cmVDbG91ZE9wdGlvbnM6IHJlcXVlc3QuYXp1cmVDbG91ZE9wdGlvbnMsXHJcbiAgICAgICAgICAgICAgICBhY2NvdW50OiByZXF1ZXN0LmFjY291bnQsXHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjb25zdCBjYW5vbmljYWxBdXRob3JpdHkgPSBuZXcgVXJsU3RyaW5nKHJlcXVlc3RBdXRob3JpdHkpO1xyXG4gICAgICAgIGNhbm9uaWNhbEF1dGhvcml0eS52YWxpZGF0ZUFzVXJpKCk7XHJcbiAgICAgICAgLy8gc2NvcGVzIGFyZSBleHBlY3RlZCB0byBiZSByZWNlaXZlZCBieSB0aGUgbmF0aXZlIGJyb2tlciBhcyBcInNjb3BlXCIgYW5kIHdpbGwgYmUgYWRkZWQgdG8gdGhlIHJlcXVlc3QgYmVsb3cuIE90aGVyIHByb3BlcnRpZXMgdGhhdCBzaG91bGQgYmUgZHJvcHBlZCBmcm9tIHRoZSByZXF1ZXN0IHRvIHRoZSBuYXRpdmUgYnJva2VyIGNhbiBiZSBpbmNsdWRlZCBpbiB0aGUgb2JqZWN0IGRlc3RydWN0dXJpbmcgaGVyZS5cclxuICAgICAgICBjb25zdCB7IHNjb3BlcywgLi4ucmVtYWluaW5nUHJvcGVydGllcyB9ID0gcmVxdWVzdDtcclxuICAgICAgICBjb25zdCBzY29wZVNldCA9IG5ldyBTY29wZVNldChzY29wZXMgfHwgW10pO1xyXG4gICAgICAgIHNjb3BlU2V0LmFwcGVuZFNjb3BlcyhPSURDX0RFRkFVTFRfU0NPUEVTKTtcclxuICAgICAgICBjb25zdCBnZXRQcm9tcHQgPSAoKSA9PiB7XHJcbiAgICAgICAgICAgIC8vIElmIHJlcXVlc3QgaXMgc2lsZW50LCBwcm9tcHQgaXMgYWx3YXlzIG5vbmVcclxuICAgICAgICAgICAgc3dpdGNoICh0aGlzLmFwaUlkKSB7XHJcbiAgICAgICAgICAgICAgICBjYXNlIEFwaUlkLnNzb1NpbGVudDpcclxuICAgICAgICAgICAgICAgIGNhc2UgQXBpSWQuYWNxdWlyZVRva2VuU2lsZW50X3NpbGVudEZsb3c6XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5sb2dnZXIudHJhY2UoXCJpbml0aWFsaXplTmF0aXZlUmVxdWVzdDogc2lsZW50IHJlcXVlc3Qgc2V0cyBwcm9tcHQgdG8gbm9uZVwiKTtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gUHJvbXB0VmFsdWUuTk9ORTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAvLyBQcm9tcHQgbm90IHByb3ZpZGVkLCByZXF1ZXN0IG1heSBwcm9jZWVkIGFuZCBuYXRpdmUgYnJva2VyIGRlY2lkZXMgaWYgaXQgbmVlZHMgdG8gcHJvbXB0XHJcbiAgICAgICAgICAgIGlmICghcmVxdWVzdC5wcm9tcHQpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMubG9nZ2VyLnRyYWNlKFwiaW5pdGlhbGl6ZU5hdGl2ZVJlcXVlc3Q6IHByb21wdCB3YXMgbm90IHByb3ZpZGVkXCIpO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAvLyBJZiByZXF1ZXN0IGlzIGludGVyYWN0aXZlLCBjaGVjayBpZiBwcm9tcHQgcHJvdmlkZWQgaXMgYWxsb3dlZCB0byBnbyBkaXJlY3RseSB0byBuYXRpdmUgYnJva2VyXHJcbiAgICAgICAgICAgIHN3aXRjaCAocmVxdWVzdC5wcm9tcHQpIHtcclxuICAgICAgICAgICAgICAgIGNhc2UgUHJvbXB0VmFsdWUuTk9ORTpcclxuICAgICAgICAgICAgICAgIGNhc2UgUHJvbXB0VmFsdWUuQ09OU0VOVDpcclxuICAgICAgICAgICAgICAgIGNhc2UgUHJvbXB0VmFsdWUuTE9HSU46XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5sb2dnZXIudHJhY2UoXCJpbml0aWFsaXplTmF0aXZlUmVxdWVzdDogcHJvbXB0IGlzIGNvbXBhdGlibGUgd2l0aCBuYXRpdmUgZmxvd1wiKTtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVxdWVzdC5wcm9tcHQ7XHJcbiAgICAgICAgICAgICAgICBkZWZhdWx0OlxyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMubG9nZ2VyLnRyYWNlKGBpbml0aWFsaXplTmF0aXZlUmVxdWVzdDogcHJvbXB0ID0gJHtyZXF1ZXN0LnByb21wdH0gaXMgbm90IGNvbXBhdGlibGUgd2l0aCBuYXRpdmUgZmxvd2ApO1xyXG4gICAgICAgICAgICAgICAgICAgIHRocm93IGNyZWF0ZUJyb3dzZXJBdXRoRXJyb3IobmF0aXZlUHJvbXB0Tm90U3VwcG9ydGVkKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH07XHJcbiAgICAgICAgY29uc3QgdmFsaWRhdGVkUmVxdWVzdCA9IHtcclxuICAgICAgICAgICAgLi4ucmVtYWluaW5nUHJvcGVydGllcyxcclxuICAgICAgICAgICAgYWNjb3VudElkOiB0aGlzLmFjY291bnRJZCxcclxuICAgICAgICAgICAgY2xpZW50SWQ6IHRoaXMuY29uZmlnLmF1dGguY2xpZW50SWQsXHJcbiAgICAgICAgICAgIGF1dGhvcml0eTogY2Fub25pY2FsQXV0aG9yaXR5LnVybFN0cmluZyxcclxuICAgICAgICAgICAgc2NvcGU6IHNjb3BlU2V0LnByaW50U2NvcGVzKCksXHJcbiAgICAgICAgICAgIHJlZGlyZWN0VXJpOiB0aGlzLmdldFJlZGlyZWN0VXJpKHJlcXVlc3QucmVkaXJlY3RVcmkpLFxyXG4gICAgICAgICAgICBwcm9tcHQ6IGdldFByb21wdCgpLFxyXG4gICAgICAgICAgICBjb3JyZWxhdGlvbklkOiB0aGlzLmNvcnJlbGF0aW9uSWQsXHJcbiAgICAgICAgICAgIHRva2VuVHlwZTogcmVxdWVzdC5hdXRoZW50aWNhdGlvblNjaGVtZSxcclxuICAgICAgICAgICAgd2luZG93VGl0bGVTdWJzdHJpbmc6IGRvY3VtZW50LnRpdGxlLFxyXG4gICAgICAgICAgICBleHRyYVBhcmFtZXRlcnM6IHtcclxuICAgICAgICAgICAgICAgIC4uLnJlcXVlc3QuZXh0cmFRdWVyeVBhcmFtZXRlcnMsXHJcbiAgICAgICAgICAgICAgICAuLi5yZXF1ZXN0LnRva2VuUXVlcnlQYXJhbWV0ZXJzLFxyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICBleHRlbmRlZEV4cGlyeVRva2VuOiBmYWxzZSxcclxuICAgICAgICAgICAga2V5SWQ6IHJlcXVlc3QucG9wS2lkLFxyXG4gICAgICAgIH07XHJcbiAgICAgICAgLy8gQ2hlY2sgZm9yIFBvUCB0b2tlbiByZXF1ZXN0czogc2lnblBvcFRva2VuIHNob3VsZCBvbmx5IGJlIHNldCB0byB0cnVlIGlmIHBvcEtpZCBpcyBub3Qgc2V0XHJcbiAgICAgICAgaWYgKHZhbGlkYXRlZFJlcXVlc3Quc2lnblBvcFRva2VuICYmICEhcmVxdWVzdC5wb3BLaWQpIHtcclxuICAgICAgICAgICAgdGhyb3cgY3JlYXRlQnJvd3NlckF1dGhFcnJvcihpbnZhbGlkUG9wVG9rZW5SZXF1ZXN0KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5oYW5kbGVFeHRyYUJyb2tlclBhcmFtcyh2YWxpZGF0ZWRSZXF1ZXN0KTtcclxuICAgICAgICB2YWxpZGF0ZWRSZXF1ZXN0LmV4dHJhUGFyYW1ldGVycyA9XHJcbiAgICAgICAgICAgIHZhbGlkYXRlZFJlcXVlc3QuZXh0cmFQYXJhbWV0ZXJzIHx8IHt9O1xyXG4gICAgICAgIHZhbGlkYXRlZFJlcXVlc3QuZXh0cmFQYXJhbWV0ZXJzLnRlbGVtZXRyeSA9XHJcbiAgICAgICAgICAgIE5hdGl2ZUNvbnN0YW50cy5NQVRTX1RFTEVNRVRSWTtcclxuICAgICAgICBpZiAocmVxdWVzdC5hdXRoZW50aWNhdGlvblNjaGVtZSA9PT0gQXV0aGVudGljYXRpb25TY2hlbWUuUE9QKSB7XHJcbiAgICAgICAgICAgIC8vIGFkZCBQT1AgcmVxdWVzdCB0eXBlXHJcbiAgICAgICAgICAgIGNvbnN0IHNoclBhcmFtZXRlcnMgPSB7XHJcbiAgICAgICAgICAgICAgICByZXNvdXJjZVJlcXVlc3RVcmk6IHJlcXVlc3QucmVzb3VyY2VSZXF1ZXN0VXJpLFxyXG4gICAgICAgICAgICAgICAgcmVzb3VyY2VSZXF1ZXN0TWV0aG9kOiByZXF1ZXN0LnJlc291cmNlUmVxdWVzdE1ldGhvZCxcclxuICAgICAgICAgICAgICAgIHNockNsYWltczogcmVxdWVzdC5zaHJDbGFpbXMsXHJcbiAgICAgICAgICAgICAgICBzaHJOb25jZTogcmVxdWVzdC5zaHJOb25jZSxcclxuICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgY29uc3QgcG9wVG9rZW5HZW5lcmF0b3IgPSBuZXcgUG9wVG9rZW5HZW5lcmF0b3IodGhpcy5icm93c2VyQ3J5cHRvKTtcclxuICAgICAgICAgICAgLy8gZ2VuZXJhdGUgcmVxQ25mIGlmIG5vdCBwcm92aWRlZCBpbiB0aGUgcmVxdWVzdFxyXG4gICAgICAgICAgICBsZXQgcmVxQ25mRGF0YTtcclxuICAgICAgICAgICAgaWYgKCF2YWxpZGF0ZWRSZXF1ZXN0LmtleUlkKSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBnZW5lcmF0ZWRSZXFDbmZEYXRhID0gYXdhaXQgaW52b2tlQXN5bmMocG9wVG9rZW5HZW5lcmF0b3IuZ2VuZXJhdGVDbmYuYmluZChwb3BUb2tlbkdlbmVyYXRvciksIFBlcmZvcm1hbmNlRXZlbnRzLlBvcFRva2VuR2VuZXJhdGVDbmYsIHRoaXMubG9nZ2VyLCB0aGlzLnBlcmZvcm1hbmNlQ2xpZW50LCByZXF1ZXN0LmNvcnJlbGF0aW9uSWQpKHNoclBhcmFtZXRlcnMsIHRoaXMubG9nZ2VyKTtcclxuICAgICAgICAgICAgICAgIHJlcUNuZkRhdGEgPSBnZW5lcmF0ZWRSZXFDbmZEYXRhLnJlcUNuZlN0cmluZztcclxuICAgICAgICAgICAgICAgIHZhbGlkYXRlZFJlcXVlc3Qua2V5SWQgPSBnZW5lcmF0ZWRSZXFDbmZEYXRhLmtpZDtcclxuICAgICAgICAgICAgICAgIHZhbGlkYXRlZFJlcXVlc3Quc2lnblBvcFRva2VuID0gdHJ1ZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHJlcUNuZkRhdGEgPSB0aGlzLmJyb3dzZXJDcnlwdG8uYmFzZTY0VXJsRW5jb2RlKEpTT04uc3RyaW5naWZ5KHsga2lkOiB2YWxpZGF0ZWRSZXF1ZXN0LmtleUlkIH0pKTtcclxuICAgICAgICAgICAgICAgIHZhbGlkYXRlZFJlcXVlc3Quc2lnblBvcFRva2VuID0gZmFsc2U7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgLy8gU1BBcyByZXF1aXJlIHdob2xlIHN0cmluZyB0byBiZSBwYXNzZWQgdG8gYnJva2VyXHJcbiAgICAgICAgICAgIHZhbGlkYXRlZFJlcXVlc3QucmVxQ25mID0gcmVxQ25mRGF0YTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5hZGRSZXF1ZXN0U0tVcyh2YWxpZGF0ZWRSZXF1ZXN0KTtcclxuICAgICAgICByZXR1cm4gdmFsaWRhdGVkUmVxdWVzdDtcclxuICAgIH1cclxuICAgIC8qKlxyXG4gICAgICogSGFuZGxlcyBleHRyYSBicm9rZXIgcmVxdWVzdCBwYXJhbWV0ZXJzXHJcbiAgICAgKiBAcGFyYW0gcmVxdWVzdCB7TmF0aXZlVG9rZW5SZXF1ZXN0fVxyXG4gICAgICogQHByaXZhdGVcclxuICAgICAqL1xyXG4gICAgaGFuZGxlRXh0cmFCcm9rZXJQYXJhbXMocmVxdWVzdCkge1xyXG4gICAgICAgIGNvbnN0IGhhc0V4dHJhQnJva2VyUGFyYW1zID0gcmVxdWVzdC5leHRyYVBhcmFtZXRlcnMgJiZcclxuICAgICAgICAgICAgcmVxdWVzdC5leHRyYVBhcmFtZXRlcnMuaGFzT3duUHJvcGVydHkoQUFEU2VydmVyUGFyYW1LZXlzLkJST0tFUl9DTElFTlRfSUQpICYmXHJcbiAgICAgICAgICAgIHJlcXVlc3QuZXh0cmFQYXJhbWV0ZXJzLmhhc093blByb3BlcnR5KEFBRFNlcnZlclBhcmFtS2V5cy5CUk9LRVJfUkVESVJFQ1RfVVJJKSAmJlxyXG4gICAgICAgICAgICByZXF1ZXN0LmV4dHJhUGFyYW1ldGVycy5oYXNPd25Qcm9wZXJ0eShBQURTZXJ2ZXJQYXJhbUtleXMuQ0xJRU5UX0lEKTtcclxuICAgICAgICBpZiAoIXJlcXVlc3QuZW1iZWRkZWRDbGllbnRJZCAmJiAhaGFzRXh0cmFCcm9rZXJQYXJhbXMpIHtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICBsZXQgY2hpbGRfY2xpZW50X2lkID0gXCJcIjtcclxuICAgICAgICBjb25zdCBjaGlsZF9yZWRpcmVjdF91cmkgPSByZXF1ZXN0LnJlZGlyZWN0VXJpO1xyXG4gICAgICAgIGlmIChyZXF1ZXN0LmVtYmVkZGVkQ2xpZW50SWQpIHtcclxuICAgICAgICAgICAgcmVxdWVzdC5yZWRpcmVjdFVyaSA9IHRoaXMuY29uZmlnLmF1dGgucmVkaXJlY3RVcmk7XHJcbiAgICAgICAgICAgIGNoaWxkX2NsaWVudF9pZCA9IHJlcXVlc3QuZW1iZWRkZWRDbGllbnRJZDtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSBpZiAocmVxdWVzdC5leHRyYVBhcmFtZXRlcnMpIHtcclxuICAgICAgICAgICAgcmVxdWVzdC5yZWRpcmVjdFVyaSA9XHJcbiAgICAgICAgICAgICAgICByZXF1ZXN0LmV4dHJhUGFyYW1ldGVyc1tBQURTZXJ2ZXJQYXJhbUtleXMuQlJPS0VSX1JFRElSRUNUX1VSSV07XHJcbiAgICAgICAgICAgIGNoaWxkX2NsaWVudF9pZCA9XHJcbiAgICAgICAgICAgICAgICByZXF1ZXN0LmV4dHJhUGFyYW1ldGVyc1tBQURTZXJ2ZXJQYXJhbUtleXMuQ0xJRU5UX0lEXTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmVxdWVzdC5leHRyYVBhcmFtZXRlcnMgPSB7XHJcbiAgICAgICAgICAgIGNoaWxkX2NsaWVudF9pZCxcclxuICAgICAgICAgICAgY2hpbGRfcmVkaXJlY3RfdXJpLFxyXG4gICAgICAgIH07XHJcbiAgICAgICAgdGhpcy5wZXJmb3JtYW5jZUNsaWVudD8uYWRkRmllbGRzKHtcclxuICAgICAgICAgICAgZW1iZWRkZWRDbGllbnRJZDogY2hpbGRfY2xpZW50X2lkLFxyXG4gICAgICAgICAgICBlbWJlZGRlZFJlZGlyZWN0VXJpOiBjaGlsZF9yZWRpcmVjdF91cmksXHJcbiAgICAgICAgfSwgcmVxdWVzdC5jb3JyZWxhdGlvbklkKTtcclxuICAgIH1cclxufVxuXG5leHBvcnQgeyBOYXRpdmVJbnRlcmFjdGlvbkNsaWVudCB9O1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9TmF0aXZlSW50ZXJhY3Rpb25DbGllbnQubWpzLm1hcFxuIiwiLyohIEBhenVyZS9tc2FsLWJyb3dzZXIgdjMuMjguMSAyMDI1LTAxLTE0ICovXG4ndXNlIHN0cmljdCc7XG5pbXBvcnQgeyBOYXRpdmVDb25zdGFudHMsIE5hdGl2ZUV4dGVuc2lvbk1ldGhvZCB9IGZyb20gJy4uLy4uL3V0aWxzL0Jyb3dzZXJDb25zdGFudHMubWpzJztcbmltcG9ydCB7IFBlcmZvcm1hbmNlRXZlbnRzLCBjcmVhdGVBdXRoRXJyb3IsIEF1dGhFcnJvckNvZGVzLCBBdXRoZW50aWNhdGlvblNjaGVtZSB9IGZyb20gJ0BhenVyZS9tc2FsLWNvbW1vbi9icm93c2VyJztcbmltcG9ydCB7IGNyZWF0ZU5hdGl2ZUF1dGhFcnJvciB9IGZyb20gJy4uLy4uL2Vycm9yL05hdGl2ZUF1dGhFcnJvci5tanMnO1xuaW1wb3J0IHsgY3JlYXRlQnJvd3NlckF1dGhFcnJvciB9IGZyb20gJy4uLy4uL2Vycm9yL0Jyb3dzZXJBdXRoRXJyb3IubWpzJztcbmltcG9ydCB7IGNyZWF0ZU5ld0d1aWQgfSBmcm9tICcuLi8uLi9jcnlwdG8vQnJvd3NlckNyeXB0by5tanMnO1xuaW1wb3J0IHsgbmF0aXZlSGFuZHNoYWtlVGltZW91dCwgbmF0aXZlRXh0ZW5zaW9uTm90SW5zdGFsbGVkIH0gZnJvbSAnLi4vLi4vZXJyb3IvQnJvd3NlckF1dGhFcnJvckNvZGVzLm1qcyc7XG5cbi8qXHJcbiAqIENvcHlyaWdodCAoYykgTWljcm9zb2Z0IENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLlxyXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgTUlUIExpY2Vuc2UuXHJcbiAqL1xyXG5jbGFzcyBOYXRpdmVNZXNzYWdlSGFuZGxlciB7XHJcbiAgICBjb25zdHJ1Y3Rvcihsb2dnZXIsIGhhbmRzaGFrZVRpbWVvdXRNcywgcGVyZm9ybWFuY2VDbGllbnQsIGV4dGVuc2lvbklkKSB7XHJcbiAgICAgICAgdGhpcy5sb2dnZXIgPSBsb2dnZXI7XHJcbiAgICAgICAgdGhpcy5oYW5kc2hha2VUaW1lb3V0TXMgPSBoYW5kc2hha2VUaW1lb3V0TXM7XHJcbiAgICAgICAgdGhpcy5leHRlbnNpb25JZCA9IGV4dGVuc2lvbklkO1xyXG4gICAgICAgIHRoaXMucmVzb2x2ZXJzID0gbmV3IE1hcCgpOyAvLyBVc2VkIGZvciBub24taGFuZHNoYWtlIG1lc3NhZ2VzXHJcbiAgICAgICAgdGhpcy5oYW5kc2hha2VSZXNvbHZlcnMgPSBuZXcgTWFwKCk7IC8vIFVzZWQgZm9yIGhhbmRzaGFrZSBtZXNzYWdlc1xyXG4gICAgICAgIHRoaXMubWVzc2FnZUNoYW5uZWwgPSBuZXcgTWVzc2FnZUNoYW5uZWwoKTtcclxuICAgICAgICB0aGlzLndpbmRvd0xpc3RlbmVyID0gdGhpcy5vbldpbmRvd01lc3NhZ2UuYmluZCh0aGlzKTsgLy8gV2luZG93IGV2ZW50IGNhbGxiYWNrIGRvZXNuJ3QgaGF2ZSBhY2Nlc3MgdG8gJ3RoaXMnIHVubGVzcyBpdCdzIGJvdW5kXHJcbiAgICAgICAgdGhpcy5wZXJmb3JtYW5jZUNsaWVudCA9IHBlcmZvcm1hbmNlQ2xpZW50O1xyXG4gICAgICAgIHRoaXMuaGFuZHNoYWtlRXZlbnQgPSBwZXJmb3JtYW5jZUNsaWVudC5zdGFydE1lYXN1cmVtZW50KFBlcmZvcm1hbmNlRXZlbnRzLk5hdGl2ZU1lc3NhZ2VIYW5kbGVySGFuZHNoYWtlKTtcclxuICAgIH1cclxuICAgIC8qKlxyXG4gICAgICogU2VuZHMgYSBnaXZlbiBtZXNzYWdlIHRvIHRoZSBleHRlbnNpb24gYW5kIHJlc29sdmVzIHdpdGggdGhlIGV4dGVuc2lvbiByZXNwb25zZVxyXG4gICAgICogQHBhcmFtIGJvZHlcclxuICAgICAqL1xyXG4gICAgYXN5bmMgc2VuZE1lc3NhZ2UoYm9keSkge1xyXG4gICAgICAgIHRoaXMubG9nZ2VyLnRyYWNlKFwiTmF0aXZlTWVzc2FnZUhhbmRsZXIgLSBzZW5kTWVzc2FnZSBjYWxsZWQuXCIpO1xyXG4gICAgICAgIGNvbnN0IHJlcSA9IHtcclxuICAgICAgICAgICAgY2hhbm5lbDogTmF0aXZlQ29uc3RhbnRzLkNIQU5ORUxfSUQsXHJcbiAgICAgICAgICAgIGV4dGVuc2lvbklkOiB0aGlzLmV4dGVuc2lvbklkLFxyXG4gICAgICAgICAgICByZXNwb25zZUlkOiBjcmVhdGVOZXdHdWlkKCksXHJcbiAgICAgICAgICAgIGJvZHk6IGJvZHksXHJcbiAgICAgICAgfTtcclxuICAgICAgICB0aGlzLmxvZ2dlci50cmFjZShcIk5hdGl2ZU1lc3NhZ2VIYW5kbGVyIC0gU2VuZGluZyByZXF1ZXN0IHRvIGJyb3dzZXIgZXh0ZW5zaW9uXCIpO1xyXG4gICAgICAgIHRoaXMubG9nZ2VyLnRyYWNlUGlpKGBOYXRpdmVNZXNzYWdlSGFuZGxlciAtIFNlbmRpbmcgcmVxdWVzdCB0byBicm93c2VyIGV4dGVuc2lvbjogJHtKU09OLnN0cmluZ2lmeShyZXEpfWApO1xyXG4gICAgICAgIHRoaXMubWVzc2FnZUNoYW5uZWwucG9ydDEucG9zdE1lc3NhZ2UocmVxKTtcclxuICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLnJlc29sdmVycy5zZXQocmVxLnJlc3BvbnNlSWQsIHsgcmVzb2x2ZSwgcmVqZWN0IH0pO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG4gICAgLyoqXHJcbiAgICAgKiBSZXR1cm5zIGFuIGluc3RhbmNlIG9mIHRoZSBNZXNzYWdlSGFuZGxlciB0aGF0IGhhcyBzdWNjZXNzZnVsbHkgZXN0YWJsaXNoZWQgYSBjb25uZWN0aW9uIHdpdGggYW4gZXh0ZW5zaW9uXHJcbiAgICAgKiBAcGFyYW0ge0xvZ2dlcn0gbG9nZ2VyXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gaGFuZHNoYWtlVGltZW91dE1zXHJcbiAgICAgKiBAcGFyYW0ge0lQZXJmb3JtYW5jZUNsaWVudH0gcGVyZm9ybWFuY2VDbGllbnRcclxuICAgICAqIEBwYXJhbSB7SUNyeXB0b30gY3J5cHRvXHJcbiAgICAgKi9cclxuICAgIHN0YXRpYyBhc3luYyBjcmVhdGVQcm92aWRlcihsb2dnZXIsIGhhbmRzaGFrZVRpbWVvdXRNcywgcGVyZm9ybWFuY2VDbGllbnQpIHtcclxuICAgICAgICBsb2dnZXIudHJhY2UoXCJOYXRpdmVNZXNzYWdlSGFuZGxlciAtIGNyZWF0ZVByb3ZpZGVyIGNhbGxlZC5cIik7XHJcbiAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgY29uc3QgcHJlZmVycmVkUHJvdmlkZXIgPSBuZXcgTmF0aXZlTWVzc2FnZUhhbmRsZXIobG9nZ2VyLCBoYW5kc2hha2VUaW1lb3V0TXMsIHBlcmZvcm1hbmNlQ2xpZW50LCBOYXRpdmVDb25zdGFudHMuUFJFRkVSUkVEX0VYVEVOU0lPTl9JRCk7XHJcbiAgICAgICAgICAgIGF3YWl0IHByZWZlcnJlZFByb3ZpZGVyLnNlbmRIYW5kc2hha2VSZXF1ZXN0KCk7XHJcbiAgICAgICAgICAgIHJldHVybiBwcmVmZXJyZWRQcm92aWRlcjtcclxuICAgICAgICB9XHJcbiAgICAgICAgY2F0Y2ggKGUpIHtcclxuICAgICAgICAgICAgLy8gSWYgcHJlZmVycmVkIGV4dGVuc2lvbiBmYWlscyBmb3Igd2hhdGV2ZXIgcmVhc29uLCBmYWxsYmFjayB0byB1c2luZyBhbnkgaW5zdGFsbGVkIGV4dGVuc2lvblxyXG4gICAgICAgICAgICBjb25zdCBiYWNrdXBQcm92aWRlciA9IG5ldyBOYXRpdmVNZXNzYWdlSGFuZGxlcihsb2dnZXIsIGhhbmRzaGFrZVRpbWVvdXRNcywgcGVyZm9ybWFuY2VDbGllbnQpO1xyXG4gICAgICAgICAgICBhd2FpdCBiYWNrdXBQcm92aWRlci5zZW5kSGFuZHNoYWtlUmVxdWVzdCgpO1xyXG4gICAgICAgICAgICByZXR1cm4gYmFja3VwUHJvdmlkZXI7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgLyoqXHJcbiAgICAgKiBTZW5kIGhhbmRzaGFrZSByZXF1ZXN0IGhlbHBlci5cclxuICAgICAqL1xyXG4gICAgYXN5bmMgc2VuZEhhbmRzaGFrZVJlcXVlc3QoKSB7XHJcbiAgICAgICAgdGhpcy5sb2dnZXIudHJhY2UoXCJOYXRpdmVNZXNzYWdlSGFuZGxlciAtIHNlbmRIYW5kc2hha2VSZXF1ZXN0IGNhbGxlZC5cIik7XHJcbiAgICAgICAgLy8gUmVnaXN0ZXIgdGhpcyBldmVudCBsaXN0ZW5lciBiZWZvcmUgc2VuZGluZyBoYW5kc2hha2VcclxuICAgICAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcihcIm1lc3NhZ2VcIiwgdGhpcy53aW5kb3dMaXN0ZW5lciwgZmFsc2UpOyAvLyBmYWxzZSBpcyBpbXBvcnRhbnQsIGJlY2F1c2UgY29udGVudCBzY3JpcHQgbWVzc2FnZSBwcm9jZXNzaW5nIHNob3VsZCB3b3JrIGZpcnN0XHJcbiAgICAgICAgY29uc3QgcmVxID0ge1xyXG4gICAgICAgICAgICBjaGFubmVsOiBOYXRpdmVDb25zdGFudHMuQ0hBTk5FTF9JRCxcclxuICAgICAgICAgICAgZXh0ZW5zaW9uSWQ6IHRoaXMuZXh0ZW5zaW9uSWQsXHJcbiAgICAgICAgICAgIHJlc3BvbnNlSWQ6IGNyZWF0ZU5ld0d1aWQoKSxcclxuICAgICAgICAgICAgYm9keToge1xyXG4gICAgICAgICAgICAgICAgbWV0aG9kOiBOYXRpdmVFeHRlbnNpb25NZXRob2QuSGFuZHNoYWtlUmVxdWVzdCxcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICB9O1xyXG4gICAgICAgIHRoaXMuaGFuZHNoYWtlRXZlbnQuYWRkKHtcclxuICAgICAgICAgICAgZXh0ZW5zaW9uSWQ6IHRoaXMuZXh0ZW5zaW9uSWQsXHJcbiAgICAgICAgICAgIGV4dGVuc2lvbkhhbmRzaGFrZVRpbWVvdXRNczogdGhpcy5oYW5kc2hha2VUaW1lb3V0TXMsXHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgdGhpcy5tZXNzYWdlQ2hhbm5lbC5wb3J0MS5vbm1lc3NhZ2UgPSAoZXZlbnQpID0+IHtcclxuICAgICAgICAgICAgdGhpcy5vbkNoYW5uZWxNZXNzYWdlKGV2ZW50KTtcclxuICAgICAgICB9O1xyXG4gICAgICAgIHdpbmRvdy5wb3N0TWVzc2FnZShyZXEsIHdpbmRvdy5vcmlnaW4sIFt0aGlzLm1lc3NhZ2VDaGFubmVsLnBvcnQyXSk7XHJcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcclxuICAgICAgICAgICAgdGhpcy5oYW5kc2hha2VSZXNvbHZlcnMuc2V0KHJlcS5yZXNwb25zZUlkLCB7IHJlc29sdmUsIHJlamVjdCB9KTtcclxuICAgICAgICAgICAgdGhpcy50aW1lb3V0SWQgPSB3aW5kb3cuc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAvKlxyXG4gICAgICAgICAgICAgICAgICogVGhyb3cgYW4gZXJyb3IgaWYgbmVpdGhlciBIYW5kc2hha2VSZXNwb25zZSBub3Igb3JpZ2luYWwgSGFuZHNoYWtlIHJlcXVlc3QgYXJlIHJlY2VpdmVkIGluIGEgcmVhc29uYWJsZSB0aW1lZnJhbWUuXHJcbiAgICAgICAgICAgICAgICAgKiBUaGlzIHR5cGljYWxseSBzdWdnZXN0cyBhbiBldmVudCBoYW5kbGVyIHN0b3BwZWQgcHJvcGFnYXRpb24gb2YgdGhlIEhhbmRzaGFrZSByZXF1ZXN0IGJ1dCBkaWQgbm90IHJlc3BvbmQgdG8gaXQgb24gdGhlIE1lc3NhZ2VDaGFubmVsIHBvcnRcclxuICAgICAgICAgICAgICAgICAqL1xyXG4gICAgICAgICAgICAgICAgd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJtZXNzYWdlXCIsIHRoaXMud2luZG93TGlzdGVuZXIsIGZhbHNlKTtcclxuICAgICAgICAgICAgICAgIHRoaXMubWVzc2FnZUNoYW5uZWwucG9ydDEuY2xvc2UoKTtcclxuICAgICAgICAgICAgICAgIHRoaXMubWVzc2FnZUNoYW5uZWwucG9ydDIuY2xvc2UoKTtcclxuICAgICAgICAgICAgICAgIHRoaXMuaGFuZHNoYWtlRXZlbnQuZW5kKHtcclxuICAgICAgICAgICAgICAgICAgICBleHRlbnNpb25IYW5kc2hha2VUaW1lZE91dDogdHJ1ZSxcclxuICAgICAgICAgICAgICAgICAgICBzdWNjZXNzOiBmYWxzZSxcclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgcmVqZWN0KGNyZWF0ZUJyb3dzZXJBdXRoRXJyb3IobmF0aXZlSGFuZHNoYWtlVGltZW91dCkpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5oYW5kc2hha2VSZXNvbHZlcnMuZGVsZXRlKHJlcS5yZXNwb25zZUlkKTtcclxuICAgICAgICAgICAgfSwgdGhpcy5oYW5kc2hha2VUaW1lb3V0TXMpOyAvLyBVc2UgYSByZWFzb25hYmxlIHRpbWVvdXQgaW4gbWlsbGlzZWNvbmRzIGhlcmVcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuICAgIC8qKlxyXG4gICAgICogSW52b2tlZCB3aGVuIGEgbWVzc2FnZSBpcyBwb3N0ZWQgdG8gdGhlIHdpbmRvdy4gSWYgYSBoYW5kc2hha2UgcmVxdWVzdCBpcyByZWNlaXZlZCBpdCBtZWFucyB0aGUgZXh0ZW5zaW9uIGlzIG5vdCBpbnN0YWxsZWQuXHJcbiAgICAgKiBAcGFyYW0gZXZlbnRcclxuICAgICAqL1xyXG4gICAgb25XaW5kb3dNZXNzYWdlKGV2ZW50KSB7XHJcbiAgICAgICAgdGhpcy5sb2dnZXIudHJhY2UoXCJOYXRpdmVNZXNzYWdlSGFuZGxlciAtIG9uV2luZG93TWVzc2FnZSBjYWxsZWRcIik7XHJcbiAgICAgICAgLy8gV2Ugb25seSBhY2NlcHQgbWVzc2FnZXMgZnJvbSBvdXJzZWx2ZXNcclxuICAgICAgICBpZiAoZXZlbnQuc291cmNlICE9PSB3aW5kb3cpIHtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjb25zdCByZXF1ZXN0ID0gZXZlbnQuZGF0YTtcclxuICAgICAgICBpZiAoIXJlcXVlc3QuY2hhbm5lbCB8fFxyXG4gICAgICAgICAgICByZXF1ZXN0LmNoYW5uZWwgIT09IE5hdGl2ZUNvbnN0YW50cy5DSEFOTkVMX0lEKSB7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHJlcXVlc3QuZXh0ZW5zaW9uSWQgJiYgcmVxdWVzdC5leHRlbnNpb25JZCAhPT0gdGhpcy5leHRlbnNpb25JZCkge1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChyZXF1ZXN0LmJvZHkubWV0aG9kID09PSBOYXRpdmVFeHRlbnNpb25NZXRob2QuSGFuZHNoYWtlUmVxdWVzdCkge1xyXG4gICAgICAgICAgICBjb25zdCBoYW5kc2hha2VSZXNvbHZlciA9IHRoaXMuaGFuZHNoYWtlUmVzb2x2ZXJzLmdldChyZXF1ZXN0LnJlc3BvbnNlSWQpO1xyXG4gICAgICAgICAgICAvKlxyXG4gICAgICAgICAgICAgKiBGaWx0ZXIgb3V0IHJlc3BvbnNlcyB3aXRoIG5vIG1hdGNoZWQgcmVzb2x2ZXJzIHNvb25lciB0byBrZWVwIGNoYW5uZWwgcG9ydHMgb3BlbiB3aGlsZSB3YWl0aW5nIGZvclxyXG4gICAgICAgICAgICAgKiB0aGUgcHJvcGVyIHJlc3BvbnNlLlxyXG4gICAgICAgICAgICAgKi9cclxuICAgICAgICAgICAgaWYgKCFoYW5kc2hha2VSZXNvbHZlcikge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5sb2dnZXIudHJhY2UoYE5hdGl2ZU1lc3NhZ2VIYW5kbGVyLm9uV2luZG93TWVzc2FnZSAtIHJlc29sdmVyIGNhbid0IGJlIGZvdW5kIGZvciByZXF1ZXN0ICR7cmVxdWVzdC5yZXNwb25zZUlkfWApO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIC8vIElmIHdlIHJlY2VpdmUgdGhpcyBtZXNzYWdlIGJhY2sgaXQgbWVhbnMgbm8gZXh0ZW5zaW9uIGludGVyY2VwdGVkIHRoZSByZXF1ZXN0LCBtZWFuaW5nIG5vIGV4dGVuc2lvbiBzdXBwb3J0aW5nIGhhbmRzaGFrZSBwcm90b2NvbCBpcyBpbnN0YWxsZWRcclxuICAgICAgICAgICAgdGhpcy5sb2dnZXIudmVyYm9zZShyZXF1ZXN0LmV4dGVuc2lvbklkXHJcbiAgICAgICAgICAgICAgICA/IGBFeHRlbnNpb24gd2l0aCBpZDogJHtyZXF1ZXN0LmV4dGVuc2lvbklkfSBub3QgaW5zdGFsbGVkYFxyXG4gICAgICAgICAgICAgICAgOiBcIk5vIGV4dGVuc2lvbiBpbnN0YWxsZWRcIik7XHJcbiAgICAgICAgICAgIGNsZWFyVGltZW91dCh0aGlzLnRpbWVvdXRJZCk7XHJcbiAgICAgICAgICAgIHRoaXMubWVzc2FnZUNoYW5uZWwucG9ydDEuY2xvc2UoKTtcclxuICAgICAgICAgICAgdGhpcy5tZXNzYWdlQ2hhbm5lbC5wb3J0Mi5jbG9zZSgpO1xyXG4gICAgICAgICAgICB3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcihcIm1lc3NhZ2VcIiwgdGhpcy53aW5kb3dMaXN0ZW5lciwgZmFsc2UpO1xyXG4gICAgICAgICAgICB0aGlzLmhhbmRzaGFrZUV2ZW50LmVuZCh7XHJcbiAgICAgICAgICAgICAgICBzdWNjZXNzOiBmYWxzZSxcclxuICAgICAgICAgICAgICAgIGV4dGVuc2lvbkluc3RhbGxlZDogZmFsc2UsXHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICBoYW5kc2hha2VSZXNvbHZlci5yZWplY3QoY3JlYXRlQnJvd3NlckF1dGhFcnJvcihuYXRpdmVFeHRlbnNpb25Ob3RJbnN0YWxsZWQpKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICAvKipcclxuICAgICAqIEludm9rZWQgd2hlbiBhIG1lc3NhZ2UgaXMgcmVjZWl2ZWQgZnJvbSB0aGUgZXh0ZW5zaW9uIG9uIHRoZSBNZXNzYWdlQ2hhbm5lbCBwb3J0XHJcbiAgICAgKiBAcGFyYW0gZXZlbnRcclxuICAgICAqL1xyXG4gICAgb25DaGFubmVsTWVzc2FnZShldmVudCkge1xyXG4gICAgICAgIHRoaXMubG9nZ2VyLnRyYWNlKFwiTmF0aXZlTWVzc2FnZUhhbmRsZXIgLSBvbkNoYW5uZWxNZXNzYWdlIGNhbGxlZC5cIik7XHJcbiAgICAgICAgY29uc3QgcmVxdWVzdCA9IGV2ZW50LmRhdGE7XHJcbiAgICAgICAgY29uc3QgcmVzb2x2ZXIgPSB0aGlzLnJlc29sdmVycy5nZXQocmVxdWVzdC5yZXNwb25zZUlkKTtcclxuICAgICAgICBjb25zdCBoYW5kc2hha2VSZXNvbHZlciA9IHRoaXMuaGFuZHNoYWtlUmVzb2x2ZXJzLmdldChyZXF1ZXN0LnJlc3BvbnNlSWQpO1xyXG4gICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgIGNvbnN0IG1ldGhvZCA9IHJlcXVlc3QuYm9keS5tZXRob2Q7XHJcbiAgICAgICAgICAgIGlmIChtZXRob2QgPT09IE5hdGl2ZUV4dGVuc2lvbk1ldGhvZC5SZXNwb25zZSkge1xyXG4gICAgICAgICAgICAgICAgaWYgKCFyZXNvbHZlcikge1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGNvbnN0IHJlc3BvbnNlID0gcmVxdWVzdC5ib2R5LnJlc3BvbnNlO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5sb2dnZXIudHJhY2UoXCJOYXRpdmVNZXNzYWdlSGFuZGxlciAtIFJlY2VpdmVkIHJlc3BvbnNlIGZyb20gYnJvd3NlciBleHRlbnNpb25cIik7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmxvZ2dlci50cmFjZVBpaShgTmF0aXZlTWVzc2FnZUhhbmRsZXIgLSBSZWNlaXZlZCByZXNwb25zZSBmcm9tIGJyb3dzZXIgZXh0ZW5zaW9uOiAke0pTT04uc3RyaW5naWZ5KHJlc3BvbnNlKX1gKTtcclxuICAgICAgICAgICAgICAgIGlmIChyZXNwb25zZS5zdGF0dXMgIT09IFwiU3VjY2Vzc1wiKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZXIucmVqZWN0KGNyZWF0ZU5hdGl2ZUF1dGhFcnJvcihyZXNwb25zZS5jb2RlLCByZXNwb25zZS5kZXNjcmlwdGlvbiwgcmVzcG9uc2UuZXh0KSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBlbHNlIGlmIChyZXNwb25zZS5yZXN1bHQpIHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAocmVzcG9uc2UucmVzdWx0W1wiY29kZVwiXSAmJlxyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXNwb25zZS5yZXN1bHRbXCJkZXNjcmlwdGlvblwiXSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXNvbHZlci5yZWplY3QoY3JlYXRlTmF0aXZlQXV0aEVycm9yKHJlc3BvbnNlLnJlc3VsdFtcImNvZGVcIl0sIHJlc3BvbnNlLnJlc3VsdFtcImRlc2NyaXB0aW9uXCJdLCByZXNwb25zZS5yZXN1bHRbXCJleHRcIl0pKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlc29sdmVyLnJlc29sdmUocmVzcG9uc2UucmVzdWx0KTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICB0aHJvdyBjcmVhdGVBdXRoRXJyb3IoQXV0aEVycm9yQ29kZXMudW5leHBlY3RlZEVycm9yLCBcIkV2ZW50IGRvZXMgbm90IGNvbnRhaW4gcmVzdWx0LlwiKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIHRoaXMucmVzb2x2ZXJzLmRlbGV0ZShyZXF1ZXN0LnJlc3BvbnNlSWQpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2UgaWYgKG1ldGhvZCA9PT0gTmF0aXZlRXh0ZW5zaW9uTWV0aG9kLkhhbmRzaGFrZVJlc3BvbnNlKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoIWhhbmRzaGFrZVJlc29sdmVyKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5sb2dnZXIudHJhY2UoYE5hdGl2ZU1lc3NhZ2VIYW5kbGVyLm9uQ2hhbm5lbE1lc3NhZ2UgLSByZXNvbHZlciBjYW4ndCBiZSBmb3VuZCBmb3IgcmVxdWVzdCAke3JlcXVlc3QucmVzcG9uc2VJZH1gKTtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBjbGVhclRpbWVvdXQodGhpcy50aW1lb3V0SWQpOyAvLyBDbGVhciBzZXRUaW1lb3V0XHJcbiAgICAgICAgICAgICAgICB3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcihcIm1lc3NhZ2VcIiwgdGhpcy53aW5kb3dMaXN0ZW5lciwgZmFsc2UpOyAvLyBSZW1vdmUgJ05vIGV4dGVuc2lvbicgbGlzdGVuZXJcclxuICAgICAgICAgICAgICAgIHRoaXMuZXh0ZW5zaW9uSWQgPSByZXF1ZXN0LmV4dGVuc2lvbklkO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5leHRlbnNpb25WZXJzaW9uID0gcmVxdWVzdC5ib2R5LnZlcnNpb247XHJcbiAgICAgICAgICAgICAgICB0aGlzLmxvZ2dlci52ZXJib3NlKGBOYXRpdmVNZXNzYWdlSGFuZGxlciAtIFJlY2VpdmVkIEhhbmRzaGFrZVJlc3BvbnNlIGZyb20gZXh0ZW5zaW9uOiAke3RoaXMuZXh0ZW5zaW9uSWR9YCk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmhhbmRzaGFrZUV2ZW50LmVuZCh7XHJcbiAgICAgICAgICAgICAgICAgICAgZXh0ZW5zaW9uSW5zdGFsbGVkOiB0cnVlLFxyXG4gICAgICAgICAgICAgICAgICAgIHN1Y2Nlc3M6IHRydWUsXHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgIGhhbmRzaGFrZVJlc29sdmVyLnJlc29sdmUoKTtcclxuICAgICAgICAgICAgICAgIHRoaXMuaGFuZHNoYWtlUmVzb2x2ZXJzLmRlbGV0ZShyZXF1ZXN0LnJlc3BvbnNlSWQpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIC8vIERvIG5vdGhpbmcgaWYgbWV0aG9kIGlzIG5vdCBSZXNwb25zZSBvciBIYW5kc2hha2VSZXNwb25zZVxyXG4gICAgICAgIH1cclxuICAgICAgICBjYXRjaCAoZXJyKSB7XHJcbiAgICAgICAgICAgIHRoaXMubG9nZ2VyLmVycm9yKFwiRXJyb3IgcGFyc2luZyByZXNwb25zZSBmcm9tIFdBTSBFeHRlbnNpb25cIik7XHJcbiAgICAgICAgICAgIHRoaXMubG9nZ2VyLmVycm9yUGlpKGBFcnJvciBwYXJzaW5nIHJlc3BvbnNlIGZyb20gV0FNIEV4dGVuc2lvbjogJHtlcnJ9YCk7XHJcbiAgICAgICAgICAgIHRoaXMubG9nZ2VyLmVycm9yUGlpKGBVbmFibGUgdG8gcGFyc2UgJHtldmVudH1gKTtcclxuICAgICAgICAgICAgaWYgKHJlc29sdmVyKSB7XHJcbiAgICAgICAgICAgICAgICByZXNvbHZlci5yZWplY3QoZXJyKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIGlmIChoYW5kc2hha2VSZXNvbHZlcikge1xyXG4gICAgICAgICAgICAgICAgaGFuZHNoYWtlUmVzb2x2ZXIucmVqZWN0KGVycik7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICAvKipcclxuICAgICAqIFJldHVybnMgdGhlIElkIGZvciB0aGUgYnJvd3NlciBleHRlbnNpb24gdGhpcyBoYW5kbGVyIGlzIGNvbW11bmljYXRpbmcgd2l0aFxyXG4gICAgICogQHJldHVybnNcclxuICAgICAqL1xyXG4gICAgZ2V0RXh0ZW5zaW9uSWQoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuZXh0ZW5zaW9uSWQ7XHJcbiAgICB9XHJcbiAgICAvKipcclxuICAgICAqIFJldHVybnMgdGhlIHZlcnNpb24gZm9yIHRoZSBicm93c2VyIGV4dGVuc2lvbiB0aGlzIGhhbmRsZXIgaXMgY29tbXVuaWNhdGluZyB3aXRoXHJcbiAgICAgKiBAcmV0dXJuc1xyXG4gICAgICovXHJcbiAgICBnZXRFeHRlbnNpb25WZXJzaW9uKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmV4dGVuc2lvblZlcnNpb247XHJcbiAgICB9XHJcbiAgICAvKipcclxuICAgICAqIFJldHVybnMgYm9vbGVhbiBpbmRpY2F0aW5nIHdoZXRoZXIgb3Igbm90IHRoZSByZXF1ZXN0IHNob3VsZCBhdHRlbXB0IHRvIHVzZSBuYXRpdmUgYnJva2VyXHJcbiAgICAgKiBAcGFyYW0gbG9nZ2VyXHJcbiAgICAgKiBAcGFyYW0gY29uZmlnXHJcbiAgICAgKiBAcGFyYW0gbmF0aXZlRXh0ZW5zaW9uUHJvdmlkZXJcclxuICAgICAqIEBwYXJhbSBhdXRoZW50aWNhdGlvblNjaGVtZVxyXG4gICAgICovXHJcbiAgICBzdGF0aWMgaXNOYXRpdmVBdmFpbGFibGUoY29uZmlnLCBsb2dnZXIsIG5hdGl2ZUV4dGVuc2lvblByb3ZpZGVyLCBhdXRoZW50aWNhdGlvblNjaGVtZSkge1xyXG4gICAgICAgIGxvZ2dlci50cmFjZShcImlzTmF0aXZlQXZhaWxhYmxlIGNhbGxlZFwiKTtcclxuICAgICAgICBpZiAoIWNvbmZpZy5zeXN0ZW0uYWxsb3dOYXRpdmVCcm9rZXIpIHtcclxuICAgICAgICAgICAgbG9nZ2VyLnRyYWNlKFwiaXNOYXRpdmVBdmFpbGFibGU6IGFsbG93TmF0aXZlQnJva2VyIGlzIG5vdCBlbmFibGVkLCByZXR1cm5pbmcgZmFsc2VcIik7XHJcbiAgICAgICAgICAgIC8vIERldmVsb3BlciBkaXNhYmxlZCBXQU1cclxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoIW5hdGl2ZUV4dGVuc2lvblByb3ZpZGVyKSB7XHJcbiAgICAgICAgICAgIGxvZ2dlci50cmFjZShcImlzTmF0aXZlQXZhaWxhYmxlOiBXQU0gZXh0ZW5zaW9uIHByb3ZpZGVyIGlzIG5vdCBpbml0aWFsaXplZCwgcmV0dXJuaW5nIGZhbHNlXCIpO1xyXG4gICAgICAgICAgICAvLyBFeHRlbnNpb24gaXMgbm90IGF2YWlsYWJsZVxyXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChhdXRoZW50aWNhdGlvblNjaGVtZSkge1xyXG4gICAgICAgICAgICBzd2l0Y2ggKGF1dGhlbnRpY2F0aW9uU2NoZW1lKSB7XHJcbiAgICAgICAgICAgICAgICBjYXNlIEF1dGhlbnRpY2F0aW9uU2NoZW1lLkJFQVJFUjpcclxuICAgICAgICAgICAgICAgIGNhc2UgQXV0aGVudGljYXRpb25TY2hlbWUuUE9QOlxyXG4gICAgICAgICAgICAgICAgICAgIGxvZ2dlci50cmFjZShcImlzTmF0aXZlQXZhaWxhYmxlOiBhdXRoZW50aWNhdGlvblNjaGVtZSBpcyBzdXBwb3J0ZWQsIHJldHVybmluZyB0cnVlXCIpO1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgICAgICAgICAgICAgZGVmYXVsdDpcclxuICAgICAgICAgICAgICAgICAgICBsb2dnZXIudHJhY2UoXCJpc05hdGl2ZUF2YWlsYWJsZTogYXV0aGVudGljYXRpb25TY2hlbWUgaXMgbm90IHN1cHBvcnRlZCwgcmV0dXJuaW5nIGZhbHNlXCIpO1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgIH1cclxufVxuXG5leHBvcnQgeyBOYXRpdmVNZXNzYWdlSGFuZGxlciB9O1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9TmF0aXZlTWVzc2FnZUhhbmRsZXIubWpzLm1hcFxuIiwiLyohIEBhenVyZS9tc2FsLWJyb3dzZXIgdjMuMjguMSAyMDI1LTAxLTE0ICovXG4ndXNlIHN0cmljdCc7XG5pbXBvcnQgeyBQZXJmb3JtYW5jZUV2ZW50cywgU2VydmVyRXJyb3IsIGludm9rZUFzeW5jLCBDY3NDcmVkZW50aWFsVHlwZSB9IGZyb20gJ0BhenVyZS9tc2FsLWNvbW1vbi9icm93c2VyJztcbmltcG9ydCB7IGNyZWF0ZUJyb3dzZXJBdXRoRXJyb3IgfSBmcm9tICcuLi9lcnJvci9Ccm93c2VyQXV0aEVycm9yLm1qcyc7XG5pbXBvcnQgeyB1c2VyQ2FuY2VsbGVkIH0gZnJvbSAnLi4vZXJyb3IvQnJvd3NlckF1dGhFcnJvckNvZGVzLm1qcyc7XG5cbi8qXHJcbiAqIENvcHlyaWdodCAoYykgTWljcm9zb2Z0IENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLlxyXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgTUlUIExpY2Vuc2UuXHJcbiAqL1xyXG4vKipcclxuICogQWJzdHJhY3QgY2xhc3Mgd2hpY2ggZGVmaW5lcyBvcGVyYXRpb25zIGZvciBhIGJyb3dzZXIgaW50ZXJhY3Rpb24gaGFuZGxpbmcgY2xhc3MuXHJcbiAqL1xyXG5jbGFzcyBJbnRlcmFjdGlvbkhhbmRsZXIge1xyXG4gICAgY29uc3RydWN0b3IoYXV0aENvZGVNb2R1bGUsIHN0b3JhZ2VJbXBsLCBhdXRoQ29kZVJlcXVlc3QsIGxvZ2dlciwgcGVyZm9ybWFuY2VDbGllbnQpIHtcclxuICAgICAgICB0aGlzLmF1dGhNb2R1bGUgPSBhdXRoQ29kZU1vZHVsZTtcclxuICAgICAgICB0aGlzLmJyb3dzZXJTdG9yYWdlID0gc3RvcmFnZUltcGw7XHJcbiAgICAgICAgdGhpcy5hdXRoQ29kZVJlcXVlc3QgPSBhdXRoQ29kZVJlcXVlc3Q7XHJcbiAgICAgICAgdGhpcy5sb2dnZXIgPSBsb2dnZXI7XHJcbiAgICAgICAgdGhpcy5wZXJmb3JtYW5jZUNsaWVudCA9IHBlcmZvcm1hbmNlQ2xpZW50O1xyXG4gICAgfVxyXG4gICAgLyoqXHJcbiAgICAgKiBGdW5jdGlvbiB0byBoYW5kbGUgcmVzcG9uc2UgcGFyYW1ldGVycyBmcm9tIGhhc2guXHJcbiAgICAgKiBAcGFyYW0gbG9jYXRpb25IYXNoXHJcbiAgICAgKi9cclxuICAgIGFzeW5jIGhhbmRsZUNvZGVSZXNwb25zZShyZXNwb25zZSwgcmVxdWVzdCkge1xyXG4gICAgICAgIHRoaXMucGVyZm9ybWFuY2VDbGllbnQuYWRkUXVldWVNZWFzdXJlbWVudChQZXJmb3JtYW5jZUV2ZW50cy5IYW5kbGVDb2RlUmVzcG9uc2UsIHJlcXVlc3QuY29ycmVsYXRpb25JZCk7XHJcbiAgICAgICAgbGV0IGF1dGhDb2RlUmVzcG9uc2U7XHJcbiAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgYXV0aENvZGVSZXNwb25zZSA9IHRoaXMuYXV0aE1vZHVsZS5oYW5kbGVGcmFnbWVudFJlc3BvbnNlKHJlc3BvbnNlLCByZXF1ZXN0LnN0YXRlKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgY2F0Y2ggKGUpIHtcclxuICAgICAgICAgICAgaWYgKGUgaW5zdGFuY2VvZiBTZXJ2ZXJFcnJvciAmJlxyXG4gICAgICAgICAgICAgICAgZS5zdWJFcnJvciA9PT0gdXNlckNhbmNlbGxlZCkge1xyXG4gICAgICAgICAgICAgICAgLy8gVHJhbnNsYXRlIHNlcnZlciBlcnJvciBjYXVzZWQgYnkgdXNlciBjbG9zaW5nIG5hdGl2ZSBwcm9tcHQgdG8gY29ycmVzcG9uZGluZyBmaXJzdCBjbGFzcyBNU0FMIGVycm9yXHJcbiAgICAgICAgICAgICAgICB0aHJvdyBjcmVhdGVCcm93c2VyQXV0aEVycm9yKHVzZXJDYW5jZWxsZWQpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgdGhyb3cgZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gaW52b2tlQXN5bmModGhpcy5oYW5kbGVDb2RlUmVzcG9uc2VGcm9tU2VydmVyLmJpbmQodGhpcyksIFBlcmZvcm1hbmNlRXZlbnRzLkhhbmRsZUNvZGVSZXNwb25zZUZyb21TZXJ2ZXIsIHRoaXMubG9nZ2VyLCB0aGlzLnBlcmZvcm1hbmNlQ2xpZW50LCByZXF1ZXN0LmNvcnJlbGF0aW9uSWQpKGF1dGhDb2RlUmVzcG9uc2UsIHJlcXVlc3QpO1xyXG4gICAgfVxyXG4gICAgLyoqXHJcbiAgICAgKiBQcm9jZXNzIGF1dGggY29kZSByZXNwb25zZSBmcm9tIEFBRFxyXG4gICAgICogQHBhcmFtIGF1dGhDb2RlUmVzcG9uc2VcclxuICAgICAqIEBwYXJhbSBzdGF0ZVxyXG4gICAgICogQHBhcmFtIGF1dGhvcml0eVxyXG4gICAgICogQHBhcmFtIG5ldHdvcmtNb2R1bGVcclxuICAgICAqIEByZXR1cm5zXHJcbiAgICAgKi9cclxuICAgIGFzeW5jIGhhbmRsZUNvZGVSZXNwb25zZUZyb21TZXJ2ZXIoYXV0aENvZGVSZXNwb25zZSwgcmVxdWVzdCwgdmFsaWRhdGVOb25jZSA9IHRydWUpIHtcclxuICAgICAgICB0aGlzLnBlcmZvcm1hbmNlQ2xpZW50LmFkZFF1ZXVlTWVhc3VyZW1lbnQoUGVyZm9ybWFuY2VFdmVudHMuSGFuZGxlQ29kZVJlc3BvbnNlRnJvbVNlcnZlciwgcmVxdWVzdC5jb3JyZWxhdGlvbklkKTtcclxuICAgICAgICB0aGlzLmxvZ2dlci50cmFjZShcIkludGVyYWN0aW9uSGFuZGxlci5oYW5kbGVDb2RlUmVzcG9uc2VGcm9tU2VydmVyIGNhbGxlZFwiKTtcclxuICAgICAgICAvLyBBc3NpZ24gY29kZSB0byByZXF1ZXN0XHJcbiAgICAgICAgdGhpcy5hdXRoQ29kZVJlcXVlc3QuY29kZSA9IGF1dGhDb2RlUmVzcG9uc2UuY29kZTtcclxuICAgICAgICAvLyBDaGVjayBmb3IgbmV3IGNsb3VkIGluc3RhbmNlXHJcbiAgICAgICAgaWYgKGF1dGhDb2RlUmVzcG9uc2UuY2xvdWRfaW5zdGFuY2VfaG9zdF9uYW1lKSB7XHJcbiAgICAgICAgICAgIGF3YWl0IGludm9rZUFzeW5jKHRoaXMuYXV0aE1vZHVsZS51cGRhdGVBdXRob3JpdHkuYmluZCh0aGlzLmF1dGhNb2R1bGUpLCBQZXJmb3JtYW5jZUV2ZW50cy5VcGRhdGVUb2tlbkVuZHBvaW50QXV0aG9yaXR5LCB0aGlzLmxvZ2dlciwgdGhpcy5wZXJmb3JtYW5jZUNsaWVudCwgcmVxdWVzdC5jb3JyZWxhdGlvbklkKShhdXRoQ29kZVJlc3BvbnNlLmNsb3VkX2luc3RhbmNlX2hvc3RfbmFtZSwgcmVxdWVzdC5jb3JyZWxhdGlvbklkKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgLy8gTm9uY2UgdmFsaWRhdGlvbiBub3QgbmVlZGVkIHdoZW4gcmVkaXJlY3Qgbm90IGludm9sdmVkIChlLmcuIGh5YnJpZCBzcGEsIHJlbmV3aW5nIHRva2VuIHZpYSBydClcclxuICAgICAgICBpZiAodmFsaWRhdGVOb25jZSkge1xyXG4gICAgICAgICAgICAvLyBUT0RPOiBBc3NpZ25pbmcgXCJyZXNwb25zZSBub25jZVwiIHRvIFwicmVxdWVzdCBub25jZVwiIGlzIGNvbmZ1c2luZy4gUmVmYWN0b3IgdGhlIGZ1bmN0aW9uIGRvaW5nIHZhbGlkYXRpb24gdG8gYWNjZXB0IHJlcXVlc3Qgbm9uY2UgZGlyZWN0bHlcclxuICAgICAgICAgICAgYXV0aENvZGVSZXNwb25zZS5ub25jZSA9IHJlcXVlc3Qubm9uY2UgfHwgdW5kZWZpbmVkO1xyXG4gICAgICAgIH1cclxuICAgICAgICBhdXRoQ29kZVJlc3BvbnNlLnN0YXRlID0gcmVxdWVzdC5zdGF0ZTtcclxuICAgICAgICAvLyBBZGQgQ0NTIHBhcmFtZXRlcnMgaWYgYXZhaWxhYmxlXHJcbiAgICAgICAgaWYgKGF1dGhDb2RlUmVzcG9uc2UuY2xpZW50X2luZm8pIHtcclxuICAgICAgICAgICAgdGhpcy5hdXRoQ29kZVJlcXVlc3QuY2xpZW50SW5mbyA9IGF1dGhDb2RlUmVzcG9uc2UuY2xpZW50X2luZm87XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICBjb25zdCBjY3NDcmVkID0gdGhpcy5jcmVhdGVDY3NDcmVkZW50aWFscyhyZXF1ZXN0KTtcclxuICAgICAgICAgICAgaWYgKGNjc0NyZWQpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuYXV0aENvZGVSZXF1ZXN0LmNjc0NyZWRlbnRpYWwgPSBjY3NDcmVkO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIC8vIEFjcXVpcmUgdG9rZW4gd2l0aCByZXRyaWV2ZWQgY29kZS5cclxuICAgICAgICBjb25zdCB0b2tlblJlc3BvbnNlID0gKGF3YWl0IGludm9rZUFzeW5jKHRoaXMuYXV0aE1vZHVsZS5hY3F1aXJlVG9rZW4uYmluZCh0aGlzLmF1dGhNb2R1bGUpLCBQZXJmb3JtYW5jZUV2ZW50cy5BdXRoQ2xpZW50QWNxdWlyZVRva2VuLCB0aGlzLmxvZ2dlciwgdGhpcy5wZXJmb3JtYW5jZUNsaWVudCwgcmVxdWVzdC5jb3JyZWxhdGlvbklkKSh0aGlzLmF1dGhDb2RlUmVxdWVzdCwgYXV0aENvZGVSZXNwb25zZSkpO1xyXG4gICAgICAgIHJldHVybiB0b2tlblJlc3BvbnNlO1xyXG4gICAgfVxyXG4gICAgLyoqXHJcbiAgICAgKiBCdWlsZCBjY3MgY3JlZHMgaWYgYXZhaWxhYmxlXHJcbiAgICAgKi9cclxuICAgIGNyZWF0ZUNjc0NyZWRlbnRpYWxzKHJlcXVlc3QpIHtcclxuICAgICAgICBpZiAocmVxdWVzdC5hY2NvdW50KSB7XHJcbiAgICAgICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgICAgICBjcmVkZW50aWFsOiByZXF1ZXN0LmFjY291bnQuaG9tZUFjY291bnRJZCxcclxuICAgICAgICAgICAgICAgIHR5cGU6IENjc0NyZWRlbnRpYWxUeXBlLkhPTUVfQUNDT1VOVF9JRCxcclxuICAgICAgICAgICAgfTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSBpZiAocmVxdWVzdC5sb2dpbkhpbnQpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgICAgIGNyZWRlbnRpYWw6IHJlcXVlc3QubG9naW5IaW50LFxyXG4gICAgICAgICAgICAgICAgdHlwZTogQ2NzQ3JlZGVudGlhbFR5cGUuVVBOLFxyXG4gICAgICAgICAgICB9O1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgIH1cclxufVxuXG5leHBvcnQgeyBJbnRlcmFjdGlvbkhhbmRsZXIgfTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPUludGVyYWN0aW9uSGFuZGxlci5tanMubWFwXG4iLCIvKiEgQGF6dXJlL21zYWwtYnJvd3NlciB2My4yOC4xIDIwMjUtMDEtMTQgKi9cbid1c2Ugc3RyaWN0JztcbmltcG9ydCB7IFVybFV0aWxzIH0gZnJvbSAnQGF6dXJlL21zYWwtY29tbW9uL2Jyb3dzZXInO1xuaW1wb3J0IHsgY3JlYXRlQnJvd3NlckF1dGhFcnJvciB9IGZyb20gJy4uL2Vycm9yL0Jyb3dzZXJBdXRoRXJyb3IubWpzJztcbmltcG9ydCB7IGV4dHJhY3RCcm93c2VyUmVxdWVzdFN0YXRlIH0gZnJvbSAnLi4vdXRpbHMvQnJvd3NlclByb3RvY29sVXRpbHMubWpzJztcbmltcG9ydCB7IGhhc2hFbXB0eUVycm9yLCBoYXNoRG9lc05vdENvbnRhaW5Lbm93blByb3BlcnRpZXMsIG5vU3RhdGVJbkhhc2gsIHVuYWJsZVRvUGFyc2VTdGF0ZSwgc3RhdGVJbnRlcmFjdGlvblR5cGVNaXNtYXRjaCB9IGZyb20gJy4uL2Vycm9yL0Jyb3dzZXJBdXRoRXJyb3JDb2Rlcy5tanMnO1xuXG4vKlxyXG4gKiBDb3B5cmlnaHQgKGMpIE1pY3Jvc29mdCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cclxuICogTGljZW5zZWQgdW5kZXIgdGhlIE1JVCBMaWNlbnNlLlxyXG4gKi9cclxuZnVuY3Rpb24gZGVzZXJpYWxpemVSZXNwb25zZShyZXNwb25zZVN0cmluZywgcmVzcG9uc2VMb2NhdGlvbiwgbG9nZ2VyKSB7XHJcbiAgICAvLyBEZXNlcmlhbGl6ZSBoYXNoIGZyYWdtZW50IHJlc3BvbnNlIHBhcmFtZXRlcnMuXHJcbiAgICBjb25zdCBzZXJ2ZXJQYXJhbXMgPSBVcmxVdGlscy5nZXREZXNlcmlhbGl6ZWRSZXNwb25zZShyZXNwb25zZVN0cmluZyk7XHJcbiAgICBpZiAoIXNlcnZlclBhcmFtcykge1xyXG4gICAgICAgIGlmICghVXJsVXRpbHMuc3RyaXBMZWFkaW5nSGFzaE9yUXVlcnkocmVzcG9uc2VTdHJpbmcpKSB7XHJcbiAgICAgICAgICAgIC8vIEhhc2ggb3IgUXVlcnkgc3RyaW5nIGlzIGVtcHR5XHJcbiAgICAgICAgICAgIGxvZ2dlci5lcnJvcihgVGhlIHJlcXVlc3QgaGFzIHJldHVybmVkIHRvIHRoZSByZWRpcmVjdFVyaSBidXQgYSAke3Jlc3BvbnNlTG9jYXRpb259IGlzIG5vdCBwcmVzZW50LiBJdCdzIGxpa2VseSB0aGF0IHRoZSAke3Jlc3BvbnNlTG9jYXRpb259IGhhcyBiZWVuIHJlbW92ZWQgb3IgdGhlIHBhZ2UgaGFzIGJlZW4gcmVkaXJlY3RlZCBieSBjb2RlIHJ1bm5pbmcgb24gdGhlIHJlZGlyZWN0VXJpIHBhZ2UuYCk7XHJcbiAgICAgICAgICAgIHRocm93IGNyZWF0ZUJyb3dzZXJBdXRoRXJyb3IoaGFzaEVtcHR5RXJyb3IpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgbG9nZ2VyLmVycm9yKGBBICR7cmVzcG9uc2VMb2NhdGlvbn0gaXMgcHJlc2VudCBpbiB0aGUgaWZyYW1lIGJ1dCBpdCBkb2VzIG5vdCBjb250YWluIGtub3duIHByb3BlcnRpZXMuIEl0J3MgbGlrZWx5IHRoYXQgdGhlICR7cmVzcG9uc2VMb2NhdGlvbn0gaGFzIGJlZW4gcmVwbGFjZWQgYnkgY29kZSBydW5uaW5nIG9uIHRoZSByZWRpcmVjdFVyaSBwYWdlLmApO1xyXG4gICAgICAgICAgICBsb2dnZXIuZXJyb3JQaWkoYFRoZSAke3Jlc3BvbnNlTG9jYXRpb259IGRldGVjdGVkIGlzOiAke3Jlc3BvbnNlU3RyaW5nfWApO1xyXG4gICAgICAgICAgICB0aHJvdyBjcmVhdGVCcm93c2VyQXV0aEVycm9yKGhhc2hEb2VzTm90Q29udGFpbktub3duUHJvcGVydGllcyk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIHNlcnZlclBhcmFtcztcclxufVxyXG4vKipcclxuICogUmV0dXJucyB0aGUgaW50ZXJhY3Rpb24gdHlwZSB0aGF0IHRoZSByZXNwb25zZSBvYmplY3QgYmVsb25ncyB0b1xyXG4gKi9cclxuZnVuY3Rpb24gdmFsaWRhdGVJbnRlcmFjdGlvblR5cGUocmVzcG9uc2UsIGJyb3dzZXJDcnlwdG8sIGludGVyYWN0aW9uVHlwZSkge1xyXG4gICAgaWYgKCFyZXNwb25zZS5zdGF0ZSkge1xyXG4gICAgICAgIHRocm93IGNyZWF0ZUJyb3dzZXJBdXRoRXJyb3Iobm9TdGF0ZUluSGFzaCk7XHJcbiAgICB9XHJcbiAgICBjb25zdCBwbGF0Zm9ybVN0YXRlT2JqID0gZXh0cmFjdEJyb3dzZXJSZXF1ZXN0U3RhdGUoYnJvd3NlckNyeXB0bywgcmVzcG9uc2Uuc3RhdGUpO1xyXG4gICAgaWYgKCFwbGF0Zm9ybVN0YXRlT2JqKSB7XHJcbiAgICAgICAgdGhyb3cgY3JlYXRlQnJvd3NlckF1dGhFcnJvcih1bmFibGVUb1BhcnNlU3RhdGUpO1xyXG4gICAgfVxyXG4gICAgaWYgKHBsYXRmb3JtU3RhdGVPYmouaW50ZXJhY3Rpb25UeXBlICE9PSBpbnRlcmFjdGlvblR5cGUpIHtcclxuICAgICAgICB0aHJvdyBjcmVhdGVCcm93c2VyQXV0aEVycm9yKHN0YXRlSW50ZXJhY3Rpb25UeXBlTWlzbWF0Y2gpO1xyXG4gICAgfVxyXG59XG5cbmV4cG9ydCB7IGRlc2VyaWFsaXplUmVzcG9uc2UsIHZhbGlkYXRlSW50ZXJhY3Rpb25UeXBlIH07XG4vLyMgc291cmNlTWFwcGluZ1VSTD1SZXNwb25zZUhhbmRsZXIubWpzLm1hcFxuIiwiLyohIEBhenVyZS9tc2FsLWJyb3dzZXIgdjMuMjguMSAyMDI1LTAxLTE0ICovXG4ndXNlIHN0cmljdCc7XG5pbXBvcnQgeyBPSURDX0RFRkFVTFRfU0NPUEVTLCBpbnZva2VBc3luYywgUGVyZm9ybWFuY2VFdmVudHMsIGludm9rZSwgVGhyb3R0bGluZ1V0aWxzLCBQcm90b2NvbFV0aWxzLCBBdXRoRXJyb3IsIFByb3RvY29sTW9kZSwgVXJsU3RyaW5nLCBTZXJ2ZXJSZXNwb25zZVR5cGUgfSBmcm9tICdAYXp1cmUvbXNhbC1jb21tb24vYnJvd3Nlcic7XG5pbXBvcnQgeyBTdGFuZGFyZEludGVyYWN0aW9uQ2xpZW50IH0gZnJvbSAnLi9TdGFuZGFyZEludGVyYWN0aW9uQ2xpZW50Lm1qcyc7XG5pbXBvcnQgeyBFdmVudFR5cGUgfSBmcm9tICcuLi9ldmVudC9FdmVudFR5cGUubWpzJztcbmltcG9ydCB7IEFwaUlkLCBJbnRlcmFjdGlvblR5cGUsIEJyb3dzZXJDb25zdGFudHMgfSBmcm9tICcuLi91dGlscy9Ccm93c2VyQ29uc3RhbnRzLm1qcyc7XG5pbXBvcnQgeyBwcmVjb25uZWN0LCBnZXRDdXJyZW50VXJpIH0gZnJvbSAnLi4vdXRpbHMvQnJvd3NlclV0aWxzLm1qcyc7XG5pbXBvcnQgeyBOYXRpdmVJbnRlcmFjdGlvbkNsaWVudCB9IGZyb20gJy4vTmF0aXZlSW50ZXJhY3Rpb25DbGllbnQubWpzJztcbmltcG9ydCB7IE5hdGl2ZU1lc3NhZ2VIYW5kbGVyIH0gZnJvbSAnLi4vYnJva2VyL25hdGl2ZUJyb2tlci9OYXRpdmVNZXNzYWdlSGFuZGxlci5tanMnO1xuaW1wb3J0IHsgY3JlYXRlQnJvd3NlckF1dGhFcnJvciB9IGZyb20gJy4uL2Vycm9yL0Jyb3dzZXJBdXRoRXJyb3IubWpzJztcbmltcG9ydCB7IEludGVyYWN0aW9uSGFuZGxlciB9IGZyb20gJy4uL2ludGVyYWN0aW9uX2hhbmRsZXIvSW50ZXJhY3Rpb25IYW5kbGVyLm1qcyc7XG5pbXBvcnQgeyBkZXNlcmlhbGl6ZVJlc3BvbnNlIH0gZnJvbSAnLi4vcmVzcG9uc2UvUmVzcG9uc2VIYW5kbGVyLm1qcyc7XG5pbXBvcnQgeyBuYXRpdmVDb25uZWN0aW9uTm90RXN0YWJsaXNoZWQsIGVtcHR5TmF2aWdhdGVVcmksIHVzZXJDYW5jZWxsZWQsIGVtcHR5V2luZG93RXJyb3IsIHBvcHVwV2luZG93RXJyb3IgfSBmcm9tICcuLi9lcnJvci9Ccm93c2VyQXV0aEVycm9yQ29kZXMubWpzJztcblxuLypcclxuICogQ29weXJpZ2h0IChjKSBNaWNyb3NvZnQgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuXHJcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgTGljZW5zZS5cclxuICovXHJcbmNsYXNzIFBvcHVwQ2xpZW50IGV4dGVuZHMgU3RhbmRhcmRJbnRlcmFjdGlvbkNsaWVudCB7XHJcbiAgICBjb25zdHJ1Y3Rvcihjb25maWcsIHN0b3JhZ2VJbXBsLCBicm93c2VyQ3J5cHRvLCBsb2dnZXIsIGV2ZW50SGFuZGxlciwgbmF2aWdhdGlvbkNsaWVudCwgcGVyZm9ybWFuY2VDbGllbnQsIG5hdGl2ZVN0b3JhZ2VJbXBsLCBuYXRpdmVNZXNzYWdlSGFuZGxlciwgY29ycmVsYXRpb25JZCkge1xyXG4gICAgICAgIHN1cGVyKGNvbmZpZywgc3RvcmFnZUltcGwsIGJyb3dzZXJDcnlwdG8sIGxvZ2dlciwgZXZlbnRIYW5kbGVyLCBuYXZpZ2F0aW9uQ2xpZW50LCBwZXJmb3JtYW5jZUNsaWVudCwgbmF0aXZlTWVzc2FnZUhhbmRsZXIsIGNvcnJlbGF0aW9uSWQpO1xyXG4gICAgICAgIC8vIFByb3Blcmx5IHNldHMgdGhpcyByZWZlcmVuY2UgZm9yIHRoZSB1bmxvYWQgZXZlbnQuXHJcbiAgICAgICAgdGhpcy51bmxvYWRXaW5kb3cgPSB0aGlzLnVubG9hZFdpbmRvdy5iaW5kKHRoaXMpO1xyXG4gICAgICAgIHRoaXMubmF0aXZlU3RvcmFnZSA9IG5hdGl2ZVN0b3JhZ2VJbXBsO1xyXG4gICAgfVxyXG4gICAgLyoqXHJcbiAgICAgKiBBY3F1aXJlcyB0b2tlbnMgYnkgb3BlbmluZyBhIHBvcHVwIHdpbmRvdyB0byB0aGUgL2F1dGhvcml6ZSBlbmRwb2ludCBvZiB0aGUgYXV0aG9yaXR5XHJcbiAgICAgKiBAcGFyYW0gcmVxdWVzdFxyXG4gICAgICovXHJcbiAgICBhY3F1aXJlVG9rZW4ocmVxdWVzdCkge1xyXG4gICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHBvcHVwTmFtZSA9IHRoaXMuZ2VuZXJhdGVQb3B1cE5hbWUocmVxdWVzdC5zY29wZXMgfHwgT0lEQ19ERUZBVUxUX1NDT1BFUywgcmVxdWVzdC5hdXRob3JpdHkgfHwgdGhpcy5jb25maWcuYXV0aC5hdXRob3JpdHkpO1xyXG4gICAgICAgICAgICBjb25zdCBwb3B1cFBhcmFtcyA9IHtcclxuICAgICAgICAgICAgICAgIHBvcHVwTmFtZSxcclxuICAgICAgICAgICAgICAgIHBvcHVwV2luZG93QXR0cmlidXRlczogcmVxdWVzdC5wb3B1cFdpbmRvd0F0dHJpYnV0ZXMgfHwge30sXHJcbiAgICAgICAgICAgICAgICBwb3B1cFdpbmRvd1BhcmVudDogcmVxdWVzdC5wb3B1cFdpbmRvd1BhcmVudCA/PyB3aW5kb3csXHJcbiAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgIC8vIGFzeW5jUG9wdXBzIGZsYWcgaXMgdHJ1ZS4gQWNxdWlyZXMgdG9rZW4gd2l0aG91dCBmaXJzdCBvcGVuaW5nIHBvcHVwLiBQb3B1cCB3aWxsIGJlIG9wZW5lZCBsYXRlciBhc3luY2hyb25vdXNseS5cclxuICAgICAgICAgICAgaWYgKHRoaXMuY29uZmlnLnN5c3RlbS5hc3luY1BvcHVwcykge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5sb2dnZXIudmVyYm9zZShcImFzeW5jUG9wdXBzIHNldCB0byB0cnVlLCBhY3F1aXJpbmcgdG9rZW5cIik7XHJcbiAgICAgICAgICAgICAgICAvLyBQYXNzZXMgb24gcG9wdXAgcG9zaXRpb24gYW5kIGRpbWVuc2lvbnMgaWYgaW4gcmVxdWVzdFxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuYWNxdWlyZVRva2VuUG9wdXBBc3luYyhyZXF1ZXN0LCBwb3B1cFBhcmFtcyk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAvLyBhc3luY1BvcHVwcyBmbGFnIGlzIHNldCB0byBmYWxzZS4gT3BlbnMgcG9wdXAgYmVmb3JlIGFjcXVpcmluZyB0b2tlbi5cclxuICAgICAgICAgICAgICAgIHRoaXMubG9nZ2VyLnZlcmJvc2UoXCJhc3luY1BvcHVwIHNldCB0byBmYWxzZSwgb3BlbmluZyBwb3B1cCBiZWZvcmUgYWNxdWlyaW5nIHRva2VuXCIpO1xyXG4gICAgICAgICAgICAgICAgcG9wdXBQYXJhbXMucG9wdXAgPSB0aGlzLm9wZW5TaXplZFBvcHVwKFwiYWJvdXQ6YmxhbmtcIiwgcG9wdXBQYXJhbXMpO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuYWNxdWlyZVRva2VuUG9wdXBBc3luYyhyZXF1ZXN0LCBwb3B1cFBhcmFtcyk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgY2F0Y2ggKGUpIHtcclxuICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KGUpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIC8qKlxyXG4gICAgICogQ2xlYXJzIGxvY2FsIGNhY2hlIGZvciB0aGUgY3VycmVudCB1c2VyIHRoZW4gb3BlbnMgYSBwb3B1cCB3aW5kb3cgcHJvbXB0aW5nIHRoZSB1c2VyIHRvIHNpZ24tb3V0IG9mIHRoZSBzZXJ2ZXJcclxuICAgICAqIEBwYXJhbSBsb2dvdXRSZXF1ZXN0XHJcbiAgICAgKi9cclxuICAgIGxvZ291dChsb2dvdXRSZXF1ZXN0KSB7XHJcbiAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgdGhpcy5sb2dnZXIudmVyYm9zZShcImxvZ291dFBvcHVwIGNhbGxlZFwiKTtcclxuICAgICAgICAgICAgY29uc3QgdmFsaWRMb2dvdXRSZXF1ZXN0ID0gdGhpcy5pbml0aWFsaXplTG9nb3V0UmVxdWVzdChsb2dvdXRSZXF1ZXN0KTtcclxuICAgICAgICAgICAgY29uc3QgcG9wdXBQYXJhbXMgPSB7XHJcbiAgICAgICAgICAgICAgICBwb3B1cE5hbWU6IHRoaXMuZ2VuZXJhdGVMb2dvdXRQb3B1cE5hbWUodmFsaWRMb2dvdXRSZXF1ZXN0KSxcclxuICAgICAgICAgICAgICAgIHBvcHVwV2luZG93QXR0cmlidXRlczogbG9nb3V0UmVxdWVzdD8ucG9wdXBXaW5kb3dBdHRyaWJ1dGVzIHx8IHt9LFxyXG4gICAgICAgICAgICAgICAgcG9wdXBXaW5kb3dQYXJlbnQ6IGxvZ291dFJlcXVlc3Q/LnBvcHVwV2luZG93UGFyZW50ID8/IHdpbmRvdyxcclxuICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgY29uc3QgYXV0aG9yaXR5ID0gbG9nb3V0UmVxdWVzdCAmJiBsb2dvdXRSZXF1ZXN0LmF1dGhvcml0eTtcclxuICAgICAgICAgICAgY29uc3QgbWFpbldpbmRvd1JlZGlyZWN0VXJpID0gbG9nb3V0UmVxdWVzdCAmJiBsb2dvdXRSZXF1ZXN0Lm1haW5XaW5kb3dSZWRpcmVjdFVyaTtcclxuICAgICAgICAgICAgLy8gYXN5bmNQb3B1cHMgZmxhZyBpcyB0cnVlLiBBY3F1aXJlcyB0b2tlbiB3aXRob3V0IGZpcnN0IG9wZW5pbmcgcG9wdXAuIFBvcHVwIHdpbGwgYmUgb3BlbmVkIGxhdGVyIGFzeW5jaHJvbm91c2x5LlxyXG4gICAgICAgICAgICBpZiAodGhpcy5jb25maWcuc3lzdGVtLmFzeW5jUG9wdXBzKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmxvZ2dlci52ZXJib3NlKFwiYXN5bmNQb3B1cHMgc2V0IHRvIHRydWVcIik7XHJcbiAgICAgICAgICAgICAgICAvLyBQYXNzZXMgb24gcG9wdXAgcG9zaXRpb24gYW5kIGRpbWVuc2lvbnMgaWYgaW4gcmVxdWVzdFxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMubG9nb3V0UG9wdXBBc3luYyh2YWxpZExvZ291dFJlcXVlc3QsIHBvcHVwUGFyYW1zLCBhdXRob3JpdHksIG1haW5XaW5kb3dSZWRpcmVjdFVyaSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAvLyBhc3luY1BvcHVwcyBmbGFnIGlzIHNldCB0byBmYWxzZS4gT3BlbnMgcG9wdXAgYmVmb3JlIGxvZ2dpbmcgb3V0LlxyXG4gICAgICAgICAgICAgICAgdGhpcy5sb2dnZXIudmVyYm9zZShcImFzeW5jUG9wdXAgc2V0IHRvIGZhbHNlLCBvcGVuaW5nIHBvcHVwXCIpO1xyXG4gICAgICAgICAgICAgICAgcG9wdXBQYXJhbXMucG9wdXAgPSB0aGlzLm9wZW5TaXplZFBvcHVwKFwiYWJvdXQ6YmxhbmtcIiwgcG9wdXBQYXJhbXMpO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMubG9nb3V0UG9wdXBBc3luYyh2YWxpZExvZ291dFJlcXVlc3QsIHBvcHVwUGFyYW1zLCBhdXRob3JpdHksIG1haW5XaW5kb3dSZWRpcmVjdFVyaSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgY2F0Y2ggKGUpIHtcclxuICAgICAgICAgICAgLy8gU2luY2UgdGhpcyBmdW5jdGlvbiBpcyBzeW5jaHJvbm91cyB3ZSBuZWVkIHRvIHJlamVjdFxyXG4gICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QoZSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgLyoqXHJcbiAgICAgKiBIZWxwZXIgd2hpY2ggb2J0YWlucyBhbiBhY2Nlc3NfdG9rZW4gZm9yIHlvdXIgQVBJIHZpYSBvcGVuaW5nIGEgcG9wdXAgd2luZG93IGluIHRoZSB1c2VyJ3MgYnJvd3NlclxyXG4gICAgICogQHBhcmFtIHZhbGlkUmVxdWVzdFxyXG4gICAgICogQHBhcmFtIHBvcHVwTmFtZVxyXG4gICAgICogQHBhcmFtIHBvcHVwXHJcbiAgICAgKiBAcGFyYW0gcG9wdXBXaW5kb3dBdHRyaWJ1dGVzXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybnMgQSBwcm9taXNlIHRoYXQgaXMgZnVsZmlsbGVkIHdoZW4gdGhpcyBmdW5jdGlvbiBoYXMgY29tcGxldGVkLCBvciByZWplY3RlZCBpZiBhbiBlcnJvciB3YXMgcmFpc2VkLlxyXG4gICAgICovXHJcbiAgICBhc3luYyBhY3F1aXJlVG9rZW5Qb3B1cEFzeW5jKHJlcXVlc3QsIHBvcHVwUGFyYW1zKSB7XHJcbiAgICAgICAgdGhpcy5sb2dnZXIudmVyYm9zZShcImFjcXVpcmVUb2tlblBvcHVwQXN5bmMgY2FsbGVkXCIpO1xyXG4gICAgICAgIGNvbnN0IHNlcnZlclRlbGVtZXRyeU1hbmFnZXIgPSB0aGlzLmluaXRpYWxpemVTZXJ2ZXJUZWxlbWV0cnlNYW5hZ2VyKEFwaUlkLmFjcXVpcmVUb2tlblBvcHVwKTtcclxuICAgICAgICBjb25zdCB2YWxpZFJlcXVlc3QgPSBhd2FpdCBpbnZva2VBc3luYyh0aGlzLmluaXRpYWxpemVBdXRob3JpemF0aW9uUmVxdWVzdC5iaW5kKHRoaXMpLCBQZXJmb3JtYW5jZUV2ZW50cy5TdGFuZGFyZEludGVyYWN0aW9uQ2xpZW50SW5pdGlhbGl6ZUF1dGhvcml6YXRpb25SZXF1ZXN0LCB0aGlzLmxvZ2dlciwgdGhpcy5wZXJmb3JtYW5jZUNsaWVudCwgdGhpcy5jb3JyZWxhdGlvbklkKShyZXF1ZXN0LCBJbnRlcmFjdGlvblR5cGUuUG9wdXApO1xyXG4gICAgICAgIHByZWNvbm5lY3QodmFsaWRSZXF1ZXN0LmF1dGhvcml0eSk7XHJcbiAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgLy8gQ3JlYXRlIGF1dGggY29kZSByZXF1ZXN0IGFuZCBnZW5lcmF0ZSBQS0NFIHBhcmFtc1xyXG4gICAgICAgICAgICBjb25zdCBhdXRoQ29kZVJlcXVlc3QgPSBhd2FpdCBpbnZva2VBc3luYyh0aGlzLmluaXRpYWxpemVBdXRob3JpemF0aW9uQ29kZVJlcXVlc3QuYmluZCh0aGlzKSwgUGVyZm9ybWFuY2VFdmVudHMuU3RhbmRhcmRJbnRlcmFjdGlvbkNsaWVudEluaXRpYWxpemVBdXRob3JpemF0aW9uQ29kZVJlcXVlc3QsIHRoaXMubG9nZ2VyLCB0aGlzLnBlcmZvcm1hbmNlQ2xpZW50LCB0aGlzLmNvcnJlbGF0aW9uSWQpKHZhbGlkUmVxdWVzdCk7XHJcbiAgICAgICAgICAgIC8vIEluaXRpYWxpemUgdGhlIGNsaWVudFxyXG4gICAgICAgICAgICBjb25zdCBhdXRoQ2xpZW50ID0gYXdhaXQgaW52b2tlQXN5bmModGhpcy5jcmVhdGVBdXRoQ29kZUNsaWVudC5iaW5kKHRoaXMpLCBQZXJmb3JtYW5jZUV2ZW50cy5TdGFuZGFyZEludGVyYWN0aW9uQ2xpZW50Q3JlYXRlQXV0aENvZGVDbGllbnQsIHRoaXMubG9nZ2VyLCB0aGlzLnBlcmZvcm1hbmNlQ2xpZW50LCB0aGlzLmNvcnJlbGF0aW9uSWQpKHtcclxuICAgICAgICAgICAgICAgIHNlcnZlclRlbGVtZXRyeU1hbmFnZXIsXHJcbiAgICAgICAgICAgICAgICByZXF1ZXN0QXV0aG9yaXR5OiB2YWxpZFJlcXVlc3QuYXV0aG9yaXR5LFxyXG4gICAgICAgICAgICAgICAgcmVxdWVzdEF6dXJlQ2xvdWRPcHRpb25zOiB2YWxpZFJlcXVlc3QuYXp1cmVDbG91ZE9wdGlvbnMsXHJcbiAgICAgICAgICAgICAgICByZXF1ZXN0RXh0cmFRdWVyeVBhcmFtZXRlcnM6IHZhbGlkUmVxdWVzdC5leHRyYVF1ZXJ5UGFyYW1ldGVycyxcclxuICAgICAgICAgICAgICAgIGFjY291bnQ6IHZhbGlkUmVxdWVzdC5hY2NvdW50LFxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgY29uc3QgaXNOYXRpdmVCcm9rZXIgPSBOYXRpdmVNZXNzYWdlSGFuZGxlci5pc05hdGl2ZUF2YWlsYWJsZSh0aGlzLmNvbmZpZywgdGhpcy5sb2dnZXIsIHRoaXMubmF0aXZlTWVzc2FnZUhhbmRsZXIsIHJlcXVlc3QuYXV0aGVudGljYXRpb25TY2hlbWUpO1xyXG4gICAgICAgICAgICAvLyBTdGFydCBtZWFzdXJlbWVudCBmb3Igc2VydmVyIGNhbGxzIHdpdGggbmF0aXZlIGJyb2tlcmluZyBlbmFibGVkXHJcbiAgICAgICAgICAgIGxldCBmZXRjaE5hdGl2ZUFjY291bnRJZE1lYXN1cmVtZW50O1xyXG4gICAgICAgICAgICBpZiAoaXNOYXRpdmVCcm9rZXIpIHtcclxuICAgICAgICAgICAgICAgIGZldGNoTmF0aXZlQWNjb3VudElkTWVhc3VyZW1lbnQgPVxyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMucGVyZm9ybWFuY2VDbGllbnQuc3RhcnRNZWFzdXJlbWVudChQZXJmb3JtYW5jZUV2ZW50cy5GZXRjaEFjY291bnRJZFdpdGhOYXRpdmVCcm9rZXIsIHJlcXVlc3QuY29ycmVsYXRpb25JZCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgLy8gQ3JlYXRlIGFjcXVpcmUgdG9rZW4gdXJsLlxyXG4gICAgICAgICAgICBjb25zdCBuYXZpZ2F0ZVVybCA9IGF3YWl0IGF1dGhDbGllbnQuZ2V0QXV0aENvZGVVcmwoe1xyXG4gICAgICAgICAgICAgICAgLi4udmFsaWRSZXF1ZXN0LFxyXG4gICAgICAgICAgICAgICAgbmF0aXZlQnJva2VyOiBpc05hdGl2ZUJyb2tlcixcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIC8vIENyZWF0ZSBwb3B1cCBpbnRlcmFjdGlvbiBoYW5kbGVyLlxyXG4gICAgICAgICAgICBjb25zdCBpbnRlcmFjdGlvbkhhbmRsZXIgPSBuZXcgSW50ZXJhY3Rpb25IYW5kbGVyKGF1dGhDbGllbnQsIHRoaXMuYnJvd3NlclN0b3JhZ2UsIGF1dGhDb2RlUmVxdWVzdCwgdGhpcy5sb2dnZXIsIHRoaXMucGVyZm9ybWFuY2VDbGllbnQpO1xyXG4gICAgICAgICAgICAvLyBTaG93IHRoZSBVSSBvbmNlIHRoZSB1cmwgaGFzIGJlZW4gY3JlYXRlZC4gR2V0IHRoZSB3aW5kb3cgaGFuZGxlIGZvciB0aGUgcG9wdXAuXHJcbiAgICAgICAgICAgIGNvbnN0IHBvcHVwV2luZG93ID0gdGhpcy5pbml0aWF0ZUF1dGhSZXF1ZXN0KG5hdmlnYXRlVXJsLCBwb3B1cFBhcmFtcyk7XHJcbiAgICAgICAgICAgIHRoaXMuZXZlbnRIYW5kbGVyLmVtaXRFdmVudChFdmVudFR5cGUuUE9QVVBfT1BFTkVELCBJbnRlcmFjdGlvblR5cGUuUG9wdXAsIHsgcG9wdXBXaW5kb3cgfSwgbnVsbCk7XHJcbiAgICAgICAgICAgIC8vIE1vbml0b3IgdGhlIHdpbmRvdyBmb3IgdGhlIGhhc2guIFJldHVybiB0aGUgc3RyaW5nIHZhbHVlIGFuZCBjbG9zZSB0aGUgcG9wdXAgd2hlbiB0aGUgaGFzaCBpcyByZWNlaXZlZC4gRGVmYXVsdCB0aW1lb3V0IGlzIDYwIHNlY29uZHMuXHJcbiAgICAgICAgICAgIGNvbnN0IHJlc3BvbnNlU3RyaW5nID0gYXdhaXQgdGhpcy5tb25pdG9yUG9wdXBGb3JIYXNoKHBvcHVwV2luZG93LCBwb3B1cFBhcmFtcy5wb3B1cFdpbmRvd1BhcmVudCk7XHJcbiAgICAgICAgICAgIGNvbnN0IHNlcnZlclBhcmFtcyA9IGludm9rZShkZXNlcmlhbGl6ZVJlc3BvbnNlLCBQZXJmb3JtYW5jZUV2ZW50cy5EZXNlcmlhbGl6ZVJlc3BvbnNlLCB0aGlzLmxvZ2dlciwgdGhpcy5wZXJmb3JtYW5jZUNsaWVudCwgdGhpcy5jb3JyZWxhdGlvbklkKShyZXNwb25zZVN0cmluZywgdGhpcy5jb25maWcuYXV0aC5PSURDT3B0aW9ucy5zZXJ2ZXJSZXNwb25zZVR5cGUsIHRoaXMubG9nZ2VyKTtcclxuICAgICAgICAgICAgLy8gUmVtb3ZlIHRocm90dGxlIGlmIGl0IGV4aXN0c1xyXG4gICAgICAgICAgICBUaHJvdHRsaW5nVXRpbHMucmVtb3ZlVGhyb3R0bGUodGhpcy5icm93c2VyU3RvcmFnZSwgdGhpcy5jb25maWcuYXV0aC5jbGllbnRJZCwgYXV0aENvZGVSZXF1ZXN0KTtcclxuICAgICAgICAgICAgaWYgKHNlcnZlclBhcmFtcy5hY2NvdW50SWQpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMubG9nZ2VyLnZlcmJvc2UoXCJBY2NvdW50IGlkIGZvdW5kIGluIGhhc2gsIGNhbGxpbmcgV0FNIGZvciB0b2tlblwiKTtcclxuICAgICAgICAgICAgICAgIC8vIGVuZCBtZWFzdXJlbWVudCBmb3Igc2VydmVyIGNhbGwgd2l0aCBuYXRpdmUgYnJva2VyaW5nIGVuYWJsZWRcclxuICAgICAgICAgICAgICAgIGlmIChmZXRjaE5hdGl2ZUFjY291bnRJZE1lYXN1cmVtZW50KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgZmV0Y2hOYXRpdmVBY2NvdW50SWRNZWFzdXJlbWVudC5lbmQoe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBzdWNjZXNzOiB0cnVlLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBpc05hdGl2ZUJyb2tlcjogdHJ1ZSxcclxuICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGlmICghdGhpcy5uYXRpdmVNZXNzYWdlSGFuZGxlcikge1xyXG4gICAgICAgICAgICAgICAgICAgIHRocm93IGNyZWF0ZUJyb3dzZXJBdXRoRXJyb3IobmF0aXZlQ29ubmVjdGlvbk5vdEVzdGFibGlzaGVkKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGNvbnN0IG5hdGl2ZUludGVyYWN0aW9uQ2xpZW50ID0gbmV3IE5hdGl2ZUludGVyYWN0aW9uQ2xpZW50KHRoaXMuY29uZmlnLCB0aGlzLmJyb3dzZXJTdG9yYWdlLCB0aGlzLmJyb3dzZXJDcnlwdG8sIHRoaXMubG9nZ2VyLCB0aGlzLmV2ZW50SGFuZGxlciwgdGhpcy5uYXZpZ2F0aW9uQ2xpZW50LCBBcGlJZC5hY3F1aXJlVG9rZW5Qb3B1cCwgdGhpcy5wZXJmb3JtYW5jZUNsaWVudCwgdGhpcy5uYXRpdmVNZXNzYWdlSGFuZGxlciwgc2VydmVyUGFyYW1zLmFjY291bnRJZCwgdGhpcy5uYXRpdmVTdG9yYWdlLCB2YWxpZFJlcXVlc3QuY29ycmVsYXRpb25JZCk7XHJcbiAgICAgICAgICAgICAgICBjb25zdCB7IHVzZXJSZXF1ZXN0U3RhdGUgfSA9IFByb3RvY29sVXRpbHMucGFyc2VSZXF1ZXN0U3RhdGUodGhpcy5icm93c2VyQ3J5cHRvLCB2YWxpZFJlcXVlc3Quc3RhdGUpO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGF3YWl0IG5hdGl2ZUludGVyYWN0aW9uQ2xpZW50LmFjcXVpcmVUb2tlbih7XHJcbiAgICAgICAgICAgICAgICAgICAgLi4udmFsaWRSZXF1ZXN0LFxyXG4gICAgICAgICAgICAgICAgICAgIHN0YXRlOiB1c2VyUmVxdWVzdFN0YXRlLFxyXG4gICAgICAgICAgICAgICAgICAgIHByb21wdDogdW5kZWZpbmVkLCAvLyBTZXJ2ZXIgc2hvdWxkIGhhbmRsZSB0aGUgcHJvbXB0LCBpZGVhbGx5IG5hdGl2ZSBicm9rZXIgY2FuIGRvIHRoaXMgcGFydCBzaWxlbnRseVxyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgLy8gSGFuZGxlIHJlc3BvbnNlIGZyb20gaGFzaCBzdHJpbmcuXHJcbiAgICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGludGVyYWN0aW9uSGFuZGxlci5oYW5kbGVDb2RlUmVzcG9uc2Uoc2VydmVyUGFyYW1zLCB2YWxpZFJlcXVlc3QpO1xyXG4gICAgICAgICAgICByZXR1cm4gcmVzdWx0O1xyXG4gICAgICAgIH1cclxuICAgICAgICBjYXRjaCAoZSkge1xyXG4gICAgICAgICAgICAvLyBDbG9zZSB0aGUgc3luY2hyb25vdXMgcG9wdXAgaWYgYW4gZXJyb3IgaXMgdGhyb3duIGJlZm9yZSB0aGUgd2luZG93IHVubG9hZCBldmVudCBpcyByZWdpc3RlcmVkXHJcbiAgICAgICAgICAgIHBvcHVwUGFyYW1zLnBvcHVwPy5jbG9zZSgpO1xyXG4gICAgICAgICAgICBpZiAoZSBpbnN0YW5jZW9mIEF1dGhFcnJvcikge1xyXG4gICAgICAgICAgICAgICAgZS5zZXRDb3JyZWxhdGlvbklkKHRoaXMuY29ycmVsYXRpb25JZCk7XHJcbiAgICAgICAgICAgICAgICBzZXJ2ZXJUZWxlbWV0cnlNYW5hZ2VyLmNhY2hlRmFpbGVkUmVxdWVzdChlKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB0aHJvdyBlO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIC8qKlxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB2YWxpZFJlcXVlc3RcclxuICAgICAqIEBwYXJhbSBwb3B1cE5hbWVcclxuICAgICAqIEBwYXJhbSByZXF1ZXN0QXV0aG9yaXR5XHJcbiAgICAgKiBAcGFyYW0gcG9wdXBcclxuICAgICAqIEBwYXJhbSBtYWluV2luZG93UmVkaXJlY3RVcmlcclxuICAgICAqIEBwYXJhbSBwb3B1cFdpbmRvd0F0dHJpYnV0ZXNcclxuICAgICAqL1xyXG4gICAgYXN5bmMgbG9nb3V0UG9wdXBBc3luYyh2YWxpZFJlcXVlc3QsIHBvcHVwUGFyYW1zLCByZXF1ZXN0QXV0aG9yaXR5LCBtYWluV2luZG93UmVkaXJlY3RVcmkpIHtcclxuICAgICAgICB0aGlzLmxvZ2dlci52ZXJib3NlKFwibG9nb3V0UG9wdXBBc3luYyBjYWxsZWRcIik7XHJcbiAgICAgICAgdGhpcy5ldmVudEhhbmRsZXIuZW1pdEV2ZW50KEV2ZW50VHlwZS5MT0dPVVRfU1RBUlQsIEludGVyYWN0aW9uVHlwZS5Qb3B1cCwgdmFsaWRSZXF1ZXN0KTtcclxuICAgICAgICBjb25zdCBzZXJ2ZXJUZWxlbWV0cnlNYW5hZ2VyID0gdGhpcy5pbml0aWFsaXplU2VydmVyVGVsZW1ldHJ5TWFuYWdlcihBcGlJZC5sb2dvdXRQb3B1cCk7XHJcbiAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgLy8gQ2xlYXIgY2FjaGUgb24gbG9nb3V0XHJcbiAgICAgICAgICAgIGF3YWl0IHRoaXMuY2xlYXJDYWNoZU9uTG9nb3V0KHZhbGlkUmVxdWVzdC5hY2NvdW50KTtcclxuICAgICAgICAgICAgLy8gSW5pdGlhbGl6ZSB0aGUgY2xpZW50XHJcbiAgICAgICAgICAgIGNvbnN0IGF1dGhDbGllbnQgPSBhd2FpdCBpbnZva2VBc3luYyh0aGlzLmNyZWF0ZUF1dGhDb2RlQ2xpZW50LmJpbmQodGhpcyksIFBlcmZvcm1hbmNlRXZlbnRzLlN0YW5kYXJkSW50ZXJhY3Rpb25DbGllbnRDcmVhdGVBdXRoQ29kZUNsaWVudCwgdGhpcy5sb2dnZXIsIHRoaXMucGVyZm9ybWFuY2VDbGllbnQsIHRoaXMuY29ycmVsYXRpb25JZCkoe1xyXG4gICAgICAgICAgICAgICAgc2VydmVyVGVsZW1ldHJ5TWFuYWdlcixcclxuICAgICAgICAgICAgICAgIHJlcXVlc3RBdXRob3JpdHk6IHJlcXVlc3RBdXRob3JpdHksXHJcbiAgICAgICAgICAgICAgICBhY2NvdW50OiB2YWxpZFJlcXVlc3QuYWNjb3VudCB8fCB1bmRlZmluZWQsXHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICAgICAgYXV0aENsaWVudC5hdXRob3JpdHkuZW5kU2Vzc2lvbkVuZHBvaW50O1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGNhdGNoIHtcclxuICAgICAgICAgICAgICAgIGlmICh2YWxpZFJlcXVlc3QuYWNjb3VudD8uaG9tZUFjY291bnRJZCAmJlxyXG4gICAgICAgICAgICAgICAgICAgIHZhbGlkUmVxdWVzdC5wb3N0TG9nb3V0UmVkaXJlY3RVcmkgJiZcclxuICAgICAgICAgICAgICAgICAgICBhdXRoQ2xpZW50LmF1dGhvcml0eS5wcm90b2NvbE1vZGUgPT09IFByb3RvY29sTW9kZS5PSURDKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdm9pZCB0aGlzLmJyb3dzZXJTdG9yYWdlLnJlbW92ZUFjY291bnQodmFsaWRSZXF1ZXN0LmFjY291bnQ/LmhvbWVBY2NvdW50SWQpO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZXZlbnRIYW5kbGVyLmVtaXRFdmVudChFdmVudFR5cGUuTE9HT1VUX1NVQ0NFU1MsIEludGVyYWN0aW9uVHlwZS5Qb3B1cCwgdmFsaWRSZXF1ZXN0KTtcclxuICAgICAgICAgICAgICAgICAgICBpZiAobWFpbldpbmRvd1JlZGlyZWN0VXJpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG5hdmlnYXRpb25PcHRpb25zID0ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYXBpSWQ6IEFwaUlkLmxvZ291dFBvcHVwLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGltZW91dDogdGhpcy5jb25maWcuc3lzdGVtLnJlZGlyZWN0TmF2aWdhdGlvblRpbWVvdXQsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBub0hpc3Rvcnk6IGZhbHNlLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBhYnNvbHV0ZVVybCA9IFVybFN0cmluZy5nZXRBYnNvbHV0ZVVybChtYWluV2luZG93UmVkaXJlY3RVcmksIGdldEN1cnJlbnRVcmkoKSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMubmF2aWdhdGlvbkNsaWVudC5uYXZpZ2F0ZUludGVybmFsKGFic29sdXRlVXJsLCBuYXZpZ2F0aW9uT3B0aW9ucyk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIHBvcHVwUGFyYW1zLnBvcHVwPy5jbG9zZSgpO1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAvLyBDcmVhdGUgbG9nb3V0IHN0cmluZyBhbmQgbmF2aWdhdGUgdXNlciB3aW5kb3cgdG8gbG9nb3V0LlxyXG4gICAgICAgICAgICBjb25zdCBsb2dvdXRVcmkgPSBhdXRoQ2xpZW50LmdldExvZ291dFVyaSh2YWxpZFJlcXVlc3QpO1xyXG4gICAgICAgICAgICB0aGlzLmV2ZW50SGFuZGxlci5lbWl0RXZlbnQoRXZlbnRUeXBlLkxPR09VVF9TVUNDRVNTLCBJbnRlcmFjdGlvblR5cGUuUG9wdXAsIHZhbGlkUmVxdWVzdCk7XHJcbiAgICAgICAgICAgIC8vIE9wZW4gdGhlIHBvcHVwIHdpbmRvdyB0byByZXF1ZXN0VXJsLlxyXG4gICAgICAgICAgICBjb25zdCBwb3B1cFdpbmRvdyA9IHRoaXMub3BlblBvcHVwKGxvZ291dFVyaSwgcG9wdXBQYXJhbXMpO1xyXG4gICAgICAgICAgICB0aGlzLmV2ZW50SGFuZGxlci5lbWl0RXZlbnQoRXZlbnRUeXBlLlBPUFVQX09QRU5FRCwgSW50ZXJhY3Rpb25UeXBlLlBvcHVwLCB7IHBvcHVwV2luZG93IH0sIG51bGwpO1xyXG4gICAgICAgICAgICBhd2FpdCB0aGlzLm1vbml0b3JQb3B1cEZvckhhc2gocG9wdXBXaW5kb3csIHBvcHVwUGFyYW1zLnBvcHVwV2luZG93UGFyZW50KS5jYXRjaCgoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAvLyBTd2FsbG93IGFueSBlcnJvcnMgcmVsYXRlZCB0byBtb25pdG9yaW5nIHRoZSB3aW5kb3cuIFNlcnZlciBsb2dvdXQgaXMgYmVzdCBlZmZvcnRcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIGlmIChtYWluV2luZG93UmVkaXJlY3RVcmkpIHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IG5hdmlnYXRpb25PcHRpb25zID0ge1xyXG4gICAgICAgICAgICAgICAgICAgIGFwaUlkOiBBcGlJZC5sb2dvdXRQb3B1cCxcclxuICAgICAgICAgICAgICAgICAgICB0aW1lb3V0OiB0aGlzLmNvbmZpZy5zeXN0ZW0ucmVkaXJlY3ROYXZpZ2F0aW9uVGltZW91dCxcclxuICAgICAgICAgICAgICAgICAgICBub0hpc3Rvcnk6IGZhbHNlLFxyXG4gICAgICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGFic29sdXRlVXJsID0gVXJsU3RyaW5nLmdldEFic29sdXRlVXJsKG1haW5XaW5kb3dSZWRpcmVjdFVyaSwgZ2V0Q3VycmVudFVyaSgpKTtcclxuICAgICAgICAgICAgICAgIHRoaXMubG9nZ2VyLnZlcmJvc2UoXCJSZWRpcmVjdGluZyBtYWluIHdpbmRvdyB0byB1cmwgc3BlY2lmaWVkIGluIHRoZSByZXF1ZXN0XCIpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5sb2dnZXIudmVyYm9zZVBpaShgUmVkaXJlY3RpbmcgbWFpbiB3aW5kb3cgdG86ICR7YWJzb2x1dGVVcmx9YCk7XHJcbiAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLm5hdmlnYXRpb25DbGllbnQubmF2aWdhdGVJbnRlcm5hbChhYnNvbHV0ZVVybCwgbmF2aWdhdGlvbk9wdGlvbnMpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5sb2dnZXIudmVyYm9zZShcIk5vIG1haW4gd2luZG93IG5hdmlnYXRpb24gcmVxdWVzdGVkXCIpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNhdGNoIChlKSB7XHJcbiAgICAgICAgICAgIC8vIENsb3NlIHRoZSBzeW5jaHJvbm91cyBwb3B1cCBpZiBhbiBlcnJvciBpcyB0aHJvd24gYmVmb3JlIHRoZSB3aW5kb3cgdW5sb2FkIGV2ZW50IGlzIHJlZ2lzdGVyZWRcclxuICAgICAgICAgICAgcG9wdXBQYXJhbXMucG9wdXA/LmNsb3NlKCk7XHJcbiAgICAgICAgICAgIGlmIChlIGluc3RhbmNlb2YgQXV0aEVycm9yKSB7XHJcbiAgICAgICAgICAgICAgICBlLnNldENvcnJlbGF0aW9uSWQodGhpcy5jb3JyZWxhdGlvbklkKTtcclxuICAgICAgICAgICAgICAgIHNlcnZlclRlbGVtZXRyeU1hbmFnZXIuY2FjaGVGYWlsZWRSZXF1ZXN0KGUpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHRoaXMuYnJvd3NlclN0b3JhZ2Uuc2V0SW50ZXJhY3Rpb25JblByb2dyZXNzKGZhbHNlKTtcclxuICAgICAgICAgICAgdGhpcy5ldmVudEhhbmRsZXIuZW1pdEV2ZW50KEV2ZW50VHlwZS5MT0dPVVRfRkFJTFVSRSwgSW50ZXJhY3Rpb25UeXBlLlBvcHVwLCBudWxsLCBlKTtcclxuICAgICAgICAgICAgdGhpcy5ldmVudEhhbmRsZXIuZW1pdEV2ZW50KEV2ZW50VHlwZS5MT0dPVVRfRU5ELCBJbnRlcmFjdGlvblR5cGUuUG9wdXApO1xyXG4gICAgICAgICAgICB0aHJvdyBlO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLmV2ZW50SGFuZGxlci5lbWl0RXZlbnQoRXZlbnRUeXBlLkxPR09VVF9FTkQsIEludGVyYWN0aW9uVHlwZS5Qb3B1cCk7XHJcbiAgICB9XHJcbiAgICAvKipcclxuICAgICAqIE9wZW5zIGEgcG9wdXAgd2luZG93IHdpdGggZ2l2ZW4gcmVxdWVzdCBVcmwuXHJcbiAgICAgKiBAcGFyYW0gcmVxdWVzdFVybFxyXG4gICAgICovXHJcbiAgICBpbml0aWF0ZUF1dGhSZXF1ZXN0KHJlcXVlc3RVcmwsIHBhcmFtcykge1xyXG4gICAgICAgIC8vIENoZWNrIHRoYXQgcmVxdWVzdCB1cmwgaXMgbm90IGVtcHR5LlxyXG4gICAgICAgIGlmIChyZXF1ZXN0VXJsKSB7XHJcbiAgICAgICAgICAgIHRoaXMubG9nZ2VyLmluZm9QaWkoYE5hdmlnYXRlIHRvOiAke3JlcXVlc3RVcmx9YCk7XHJcbiAgICAgICAgICAgIC8vIE9wZW4gdGhlIHBvcHVwIHdpbmRvdyB0byByZXF1ZXN0VXJsLlxyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5vcGVuUG9wdXAocmVxdWVzdFVybCwgcGFyYW1zKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIC8vIFRocm93IGVycm9yIGlmIHJlcXVlc3QgVVJMIGlzIGVtcHR5LlxyXG4gICAgICAgICAgICB0aGlzLmxvZ2dlci5lcnJvcihcIk5hdmlnYXRlIHVybCBpcyBlbXB0eVwiKTtcclxuICAgICAgICAgICAgdGhyb3cgY3JlYXRlQnJvd3NlckF1dGhFcnJvcihlbXB0eU5hdmlnYXRlVXJpKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICAvKipcclxuICAgICAqIE1vbml0b3JzIGEgd2luZG93IHVudGlsIGl0IGxvYWRzIGEgdXJsIHdpdGggdGhlIHNhbWUgb3JpZ2luLlxyXG4gICAgICogQHBhcmFtIHBvcHVwV2luZG93IC0gd2luZG93IHRoYXQgaXMgYmVpbmcgbW9uaXRvcmVkXHJcbiAgICAgKiBAcGFyYW0gdGltZW91dCAtIHRpbWVvdXQgZm9yIHByb2Nlc3NpbmcgaGFzaCBvbmNlIHBvcHVwIGlzIHJlZGlyZWN0ZWQgYmFjayB0byBhcHBsaWNhdGlvblxyXG4gICAgICovXHJcbiAgICBtb25pdG9yUG9wdXBGb3JIYXNoKHBvcHVwV2luZG93LCBwb3B1cFdpbmRvd1BhcmVudCkge1xyXG4gICAgICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMubG9nZ2VyLnZlcmJvc2UoXCJQb3B1cEhhbmRsZXIubW9uaXRvclBvcHVwRm9ySGFzaCAtIHBvbGxpbmcgc3RhcnRlZFwiKTtcclxuICAgICAgICAgICAgY29uc3QgaW50ZXJ2YWxJZCA9IHNldEludGVydmFsKCgpID0+IHtcclxuICAgICAgICAgICAgICAgIC8vIFdpbmRvdyBpcyBjbG9zZWRcclxuICAgICAgICAgICAgICAgIGlmIChwb3B1cFdpbmRvdy5jbG9zZWQpIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmxvZ2dlci5lcnJvcihcIlBvcHVwSGFuZGxlci5tb25pdG9yUG9wdXBGb3JIYXNoIC0gd2luZG93IGNsb3NlZFwiKTtcclxuICAgICAgICAgICAgICAgICAgICBjbGVhckludGVydmFsKGludGVydmFsSWQpO1xyXG4gICAgICAgICAgICAgICAgICAgIHJlamVjdChjcmVhdGVCcm93c2VyQXV0aEVycm9yKHVzZXJDYW5jZWxsZWQpKTtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBsZXQgaHJlZiA9IFwiXCI7XHJcbiAgICAgICAgICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICAgICAgICAgIC8qXHJcbiAgICAgICAgICAgICAgICAgICAgICogV2lsbCB0aHJvdyBpZiBjcm9zcyBvcmlnaW4sXHJcbiAgICAgICAgICAgICAgICAgICAgICogd2hpY2ggc2hvdWxkIGJlIGNhdWdodCBhbmQgaWdub3JlZFxyXG4gICAgICAgICAgICAgICAgICAgICAqIHNpbmNlIHdlIG5lZWQgdGhlIGludGVydmFsIHRvIGtlZXAgcnVubmluZyB3aGlsZSBvbiBTVFMgVUkuXHJcbiAgICAgICAgICAgICAgICAgICAgICovXHJcbiAgICAgICAgICAgICAgICAgICAgaHJlZiA9IHBvcHVwV2luZG93LmxvY2F0aW9uLmhyZWY7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBjYXRjaCAoZSkgeyB9XHJcbiAgICAgICAgICAgICAgICAvLyBEb24ndCBwcm9jZXNzIGJsYW5rIHBhZ2VzIG9yIGNyb3NzIGRvbWFpblxyXG4gICAgICAgICAgICAgICAgaWYgKCFocmVmIHx8IGhyZWYgPT09IFwiYWJvdXQ6YmxhbmtcIikge1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGNsZWFySW50ZXJ2YWwoaW50ZXJ2YWxJZCk7XHJcbiAgICAgICAgICAgICAgICBsZXQgcmVzcG9uc2VTdHJpbmcgPSBcIlwiO1xyXG4gICAgICAgICAgICAgICAgY29uc3QgcmVzcG9uc2VUeXBlID0gdGhpcy5jb25maWcuYXV0aC5PSURDT3B0aW9ucy5zZXJ2ZXJSZXNwb25zZVR5cGU7XHJcbiAgICAgICAgICAgICAgICBpZiAocG9wdXBXaW5kb3cpIHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAocmVzcG9uc2VUeXBlID09PSBTZXJ2ZXJSZXNwb25zZVR5cGUuUVVFUlkpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmVzcG9uc2VTdHJpbmcgPSBwb3B1cFdpbmRvdy5sb2NhdGlvbi5zZWFyY2g7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXNwb25zZVN0cmluZyA9IHBvcHVwV2luZG93LmxvY2F0aW9uLmhhc2g7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgdGhpcy5sb2dnZXIudmVyYm9zZShcIlBvcHVwSGFuZGxlci5tb25pdG9yUG9wdXBGb3JIYXNoIC0gcG9wdXAgd2luZG93IGlzIG9uIHNhbWUgb3JpZ2luIGFzIGNhbGxlclwiKTtcclxuICAgICAgICAgICAgICAgIHJlc29sdmUocmVzcG9uc2VTdHJpbmcpO1xyXG4gICAgICAgICAgICB9LCB0aGlzLmNvbmZpZy5zeXN0ZW0ucG9sbEludGVydmFsTWlsbGlzZWNvbmRzKTtcclxuICAgICAgICB9KS5maW5hbGx5KCgpID0+IHtcclxuICAgICAgICAgICAgdGhpcy5jbGVhblBvcHVwKHBvcHVwV2luZG93LCBwb3B1cFdpbmRvd1BhcmVudCk7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcbiAgICAvKipcclxuICAgICAqIEBoaWRkZW5cclxuICAgICAqXHJcbiAgICAgKiBDb25maWd1cmVzIHBvcHVwIHdpbmRvdyBmb3IgbG9naW4uXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHVybE5hdmlnYXRlXHJcbiAgICAgKiBAcGFyYW0gdGl0bGVcclxuICAgICAqIEBwYXJhbSBwb3BVcFdpZHRoXHJcbiAgICAgKiBAcGFyYW0gcG9wVXBIZWlnaHRcclxuICAgICAqIEBwYXJhbSBwb3B1cFdpbmRvd0F0dHJpYnV0ZXNcclxuICAgICAqIEBpZ25vcmVcclxuICAgICAqIEBoaWRkZW5cclxuICAgICAqL1xyXG4gICAgb3BlblBvcHVwKHVybE5hdmlnYXRlLCBwb3B1cFBhcmFtcykge1xyXG4gICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgIGxldCBwb3B1cFdpbmRvdztcclxuICAgICAgICAgICAgLy8gUG9wdXAgd2luZG93IHBhc3NlZCBpbiwgc2V0dGluZyB1cmwgdG8gbmF2aWdhdGUgdG9cclxuICAgICAgICAgICAgaWYgKHBvcHVwUGFyYW1zLnBvcHVwKSB7XHJcbiAgICAgICAgICAgICAgICBwb3B1cFdpbmRvdyA9IHBvcHVwUGFyYW1zLnBvcHVwO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5sb2dnZXIudmVyYm9zZVBpaShgTmF2aWdhdGluZyBwb3B1cCB3aW5kb3cgdG86ICR7dXJsTmF2aWdhdGV9YCk7XHJcbiAgICAgICAgICAgICAgICBwb3B1cFdpbmRvdy5sb2NhdGlvbi5hc3NpZ24odXJsTmF2aWdhdGUpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2UgaWYgKHR5cGVvZiBwb3B1cFBhcmFtcy5wb3B1cCA9PT0gXCJ1bmRlZmluZWRcIikge1xyXG4gICAgICAgICAgICAgICAgLy8gUG9wdXAgd2lsbCBiZSB1bmRlZmluZWQgaWYgaXQgd2FzIG5vdCBwYXNzZWQgaW5cclxuICAgICAgICAgICAgICAgIHRoaXMubG9nZ2VyLnZlcmJvc2VQaWkoYE9wZW5pbmcgcG9wdXAgd2luZG93IHRvOiAke3VybE5hdmlnYXRlfWApO1xyXG4gICAgICAgICAgICAgICAgcG9wdXBXaW5kb3cgPSB0aGlzLm9wZW5TaXplZFBvcHVwKHVybE5hdmlnYXRlLCBwb3B1cFBhcmFtcyk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgLy8gUG9wdXAgd2lsbCBiZSBudWxsIGlmIHBvcHVwcyBhcmUgYmxvY2tlZFxyXG4gICAgICAgICAgICBpZiAoIXBvcHVwV2luZG93KSB7XHJcbiAgICAgICAgICAgICAgICB0aHJvdyBjcmVhdGVCcm93c2VyQXV0aEVycm9yKGVtcHR5V2luZG93RXJyb3IpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmIChwb3B1cFdpbmRvdy5mb2N1cykge1xyXG4gICAgICAgICAgICAgICAgcG9wdXBXaW5kb3cuZm9jdXMoKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB0aGlzLmN1cnJlbnRXaW5kb3cgPSBwb3B1cFdpbmRvdztcclxuICAgICAgICAgICAgcG9wdXBQYXJhbXMucG9wdXBXaW5kb3dQYXJlbnQuYWRkRXZlbnRMaXN0ZW5lcihcImJlZm9yZXVubG9hZFwiLCB0aGlzLnVubG9hZFdpbmRvdyk7XHJcbiAgICAgICAgICAgIHJldHVybiBwb3B1cFdpbmRvdztcclxuICAgICAgICB9XHJcbiAgICAgICAgY2F0Y2ggKGUpIHtcclxuICAgICAgICAgICAgdGhpcy5sb2dnZXIuZXJyb3IoXCJlcnJvciBvcGVuaW5nIHBvcHVwIFwiICsgZS5tZXNzYWdlKTtcclxuICAgICAgICAgICAgdGhpcy5icm93c2VyU3RvcmFnZS5zZXRJbnRlcmFjdGlvbkluUHJvZ3Jlc3MoZmFsc2UpO1xyXG4gICAgICAgICAgICB0aHJvdyBjcmVhdGVCcm93c2VyQXV0aEVycm9yKHBvcHVwV2luZG93RXJyb3IpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIC8qKlxyXG4gICAgICogSGVscGVyIGZ1bmN0aW9uIHRvIHNldCBwb3B1cCB3aW5kb3cgZGltZW5zaW9ucyBhbmQgcG9zaXRpb25cclxuICAgICAqIEBwYXJhbSB1cmxOYXZpZ2F0ZVxyXG4gICAgICogQHBhcmFtIHBvcHVwTmFtZVxyXG4gICAgICogQHBhcmFtIHBvcHVwV2luZG93QXR0cmlidXRlc1xyXG4gICAgICogQHJldHVybnNcclxuICAgICAqL1xyXG4gICAgb3BlblNpemVkUG9wdXAodXJsTmF2aWdhdGUsIHsgcG9wdXBOYW1lLCBwb3B1cFdpbmRvd0F0dHJpYnV0ZXMsIHBvcHVwV2luZG93UGFyZW50IH0pIHtcclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBhZGRpbmcgd2luTGVmdCBhbmQgd2luVG9wIHRvIGFjY291bnQgZm9yIGR1YWwgbW9uaXRvclxyXG4gICAgICAgICAqIHVzaW5nIHNjcmVlbkxlZnQgYW5kIHNjcmVlblRvcCBmb3IgSUU4IGFuZCBlYXJsaWVyXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgY29uc3Qgd2luTGVmdCA9IHBvcHVwV2luZG93UGFyZW50LnNjcmVlbkxlZnRcclxuICAgICAgICAgICAgPyBwb3B1cFdpbmRvd1BhcmVudC5zY3JlZW5MZWZ0XHJcbiAgICAgICAgICAgIDogcG9wdXBXaW5kb3dQYXJlbnQuc2NyZWVuWDtcclxuICAgICAgICBjb25zdCB3aW5Ub3AgPSBwb3B1cFdpbmRvd1BhcmVudC5zY3JlZW5Ub3BcclxuICAgICAgICAgICAgPyBwb3B1cFdpbmRvd1BhcmVudC5zY3JlZW5Ub3BcclxuICAgICAgICAgICAgOiBwb3B1cFdpbmRvd1BhcmVudC5zY3JlZW5ZO1xyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIHdpbmRvdy5pbm5lcldpZHRoIGRpc3BsYXlzIGJyb3dzZXIgd2luZG93XCJzIGhlaWdodCBhbmQgd2lkdGggZXhjbHVkaW5nIHRvb2xiYXJzXHJcbiAgICAgICAgICogdXNpbmcgZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmNsaWVudFdpZHRoIGZvciBJRTggYW5kIGVhcmxpZXJcclxuICAgICAgICAgKi9cclxuICAgICAgICBjb25zdCB3aW5XaWR0aCA9IHBvcHVwV2luZG93UGFyZW50LmlubmVyV2lkdGggfHxcclxuICAgICAgICAgICAgZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmNsaWVudFdpZHRoIHx8XHJcbiAgICAgICAgICAgIGRvY3VtZW50LmJvZHkuY2xpZW50V2lkdGg7XHJcbiAgICAgICAgY29uc3Qgd2luSGVpZ2h0ID0gcG9wdXBXaW5kb3dQYXJlbnQuaW5uZXJIZWlnaHQgfHxcclxuICAgICAgICAgICAgZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmNsaWVudEhlaWdodCB8fFxyXG4gICAgICAgICAgICBkb2N1bWVudC5ib2R5LmNsaWVudEhlaWdodDtcclxuICAgICAgICBsZXQgd2lkdGggPSBwb3B1cFdpbmRvd0F0dHJpYnV0ZXMucG9wdXBTaXplPy53aWR0aDtcclxuICAgICAgICBsZXQgaGVpZ2h0ID0gcG9wdXBXaW5kb3dBdHRyaWJ1dGVzLnBvcHVwU2l6ZT8uaGVpZ2h0O1xyXG4gICAgICAgIGxldCB0b3AgPSBwb3B1cFdpbmRvd0F0dHJpYnV0ZXMucG9wdXBQb3NpdGlvbj8udG9wO1xyXG4gICAgICAgIGxldCBsZWZ0ID0gcG9wdXBXaW5kb3dBdHRyaWJ1dGVzLnBvcHVwUG9zaXRpb24/LmxlZnQ7XHJcbiAgICAgICAgaWYgKCF3aWR0aCB8fCB3aWR0aCA8IDAgfHwgd2lkdGggPiB3aW5XaWR0aCkge1xyXG4gICAgICAgICAgICB0aGlzLmxvZ2dlci52ZXJib3NlKFwiRGVmYXVsdCBwb3B1cCB3aW5kb3cgd2lkdGggdXNlZC4gV2luZG93IHdpZHRoIG5vdCBjb25maWd1cmVkIG9yIGludmFsaWQuXCIpO1xyXG4gICAgICAgICAgICB3aWR0aCA9IEJyb3dzZXJDb25zdGFudHMuUE9QVVBfV0lEVEg7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICghaGVpZ2h0IHx8IGhlaWdodCA8IDAgfHwgaGVpZ2h0ID4gd2luSGVpZ2h0KSB7XHJcbiAgICAgICAgICAgIHRoaXMubG9nZ2VyLnZlcmJvc2UoXCJEZWZhdWx0IHBvcHVwIHdpbmRvdyBoZWlnaHQgdXNlZC4gV2luZG93IGhlaWdodCBub3QgY29uZmlndXJlZCBvciBpbnZhbGlkLlwiKTtcclxuICAgICAgICAgICAgaGVpZ2h0ID0gQnJvd3NlckNvbnN0YW50cy5QT1BVUF9IRUlHSFQ7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICghdG9wIHx8IHRvcCA8IDAgfHwgdG9wID4gd2luSGVpZ2h0KSB7XHJcbiAgICAgICAgICAgIHRoaXMubG9nZ2VyLnZlcmJvc2UoXCJEZWZhdWx0IHBvcHVwIHdpbmRvdyB0b3AgcG9zaXRpb24gdXNlZC4gV2luZG93IHRvcCBub3QgY29uZmlndXJlZCBvciBpbnZhbGlkLlwiKTtcclxuICAgICAgICAgICAgdG9wID0gTWF0aC5tYXgoMCwgd2luSGVpZ2h0IC8gMiAtIEJyb3dzZXJDb25zdGFudHMuUE9QVVBfSEVJR0hUIC8gMiArIHdpblRvcCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICghbGVmdCB8fCBsZWZ0IDwgMCB8fCBsZWZ0ID4gd2luV2lkdGgpIHtcclxuICAgICAgICAgICAgdGhpcy5sb2dnZXIudmVyYm9zZShcIkRlZmF1bHQgcG9wdXAgd2luZG93IGxlZnQgcG9zaXRpb24gdXNlZC4gV2luZG93IGxlZnQgbm90IGNvbmZpZ3VyZWQgb3IgaW52YWxpZC5cIik7XHJcbiAgICAgICAgICAgIGxlZnQgPSBNYXRoLm1heCgwLCB3aW5XaWR0aCAvIDIgLSBCcm93c2VyQ29uc3RhbnRzLlBPUFVQX1dJRFRIIC8gMiArIHdpbkxlZnQpO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gcG9wdXBXaW5kb3dQYXJlbnQub3Blbih1cmxOYXZpZ2F0ZSwgcG9wdXBOYW1lLCBgd2lkdGg9JHt3aWR0aH0sIGhlaWdodD0ke2hlaWdodH0sIHRvcD0ke3RvcH0sIGxlZnQ9JHtsZWZ0fSwgc2Nyb2xsYmFycz15ZXNgKTtcclxuICAgIH1cclxuICAgIC8qKlxyXG4gICAgICogRXZlbnQgY2FsbGJhY2sgdG8gdW5sb2FkIG1haW4gd2luZG93LlxyXG4gICAgICovXHJcbiAgICB1bmxvYWRXaW5kb3coZSkge1xyXG4gICAgICAgIHRoaXMuYnJvd3NlclN0b3JhZ2UuY2xlYW5SZXF1ZXN0QnlJbnRlcmFjdGlvblR5cGUoSW50ZXJhY3Rpb25UeXBlLlBvcHVwKTtcclxuICAgICAgICBpZiAodGhpcy5jdXJyZW50V2luZG93KSB7XHJcbiAgICAgICAgICAgIHRoaXMuY3VycmVudFdpbmRvdy5jbG9zZSgpO1xyXG4gICAgICAgIH1cclxuICAgICAgICAvLyBHdWFyYW50ZWVzIGJyb3dzZXIgdW5sb2FkIHdpbGwgaGFwcGVuLCBzbyBubyBvdGhlciBlcnJvcnMgd2lsbCBiZSB0aHJvd24uXHJcbiAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgfVxyXG4gICAgLyoqXHJcbiAgICAgKiBDbG9zZXMgcG9wdXAsIHJlbW92ZXMgYW55IHN0YXRlIHZhcnMgY3JlYXRlZCBkdXJpbmcgcG9wdXAgY2FsbHMuXHJcbiAgICAgKiBAcGFyYW0gcG9wdXBXaW5kb3dcclxuICAgICAqL1xyXG4gICAgY2xlYW5Qb3B1cChwb3B1cFdpbmRvdywgcG9wdXBXaW5kb3dQYXJlbnQpIHtcclxuICAgICAgICAvLyBDbG9zZSB3aW5kb3cuXHJcbiAgICAgICAgcG9wdXBXaW5kb3cuY2xvc2UoKTtcclxuICAgICAgICAvLyBSZW1vdmUgd2luZG93IHVubG9hZCBmdW5jdGlvblxyXG4gICAgICAgIHBvcHVwV2luZG93UGFyZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJiZWZvcmV1bmxvYWRcIiwgdGhpcy51bmxvYWRXaW5kb3cpO1xyXG4gICAgICAgIC8vIEludGVyYWN0aW9uIGlzIGNvbXBsZXRlZCAtIHJlbW92ZSBpbnRlcmFjdGlvbiBzdGF0dXMuXHJcbiAgICAgICAgdGhpcy5icm93c2VyU3RvcmFnZS5zZXRJbnRlcmFjdGlvbkluUHJvZ3Jlc3MoZmFsc2UpO1xyXG4gICAgfVxyXG4gICAgLyoqXHJcbiAgICAgKiBHZW5lcmF0ZXMgdGhlIG5hbWUgZm9yIHRoZSBwb3B1cCBiYXNlZCBvbiB0aGUgY2xpZW50IGlkIGFuZCByZXF1ZXN0XHJcbiAgICAgKiBAcGFyYW0gY2xpZW50SWRcclxuICAgICAqIEBwYXJhbSByZXF1ZXN0XHJcbiAgICAgKi9cclxuICAgIGdlbmVyYXRlUG9wdXBOYW1lKHNjb3BlcywgYXV0aG9yaXR5KSB7XHJcbiAgICAgICAgcmV0dXJuIGAke0Jyb3dzZXJDb25zdGFudHMuUE9QVVBfTkFNRV9QUkVGSVh9LiR7dGhpcy5jb25maWcuYXV0aC5jbGllbnRJZH0uJHtzY29wZXMuam9pbihcIi1cIil9LiR7YXV0aG9yaXR5fS4ke3RoaXMuY29ycmVsYXRpb25JZH1gO1xyXG4gICAgfVxyXG4gICAgLyoqXHJcbiAgICAgKiBHZW5lcmF0ZXMgdGhlIG5hbWUgZm9yIHRoZSBwb3B1cCBiYXNlZCBvbiB0aGUgY2xpZW50IGlkIGFuZCByZXF1ZXN0IGZvciBsb2dvdXRzXHJcbiAgICAgKiBAcGFyYW0gY2xpZW50SWRcclxuICAgICAqIEBwYXJhbSByZXF1ZXN0XHJcbiAgICAgKi9cclxuICAgIGdlbmVyYXRlTG9nb3V0UG9wdXBOYW1lKHJlcXVlc3QpIHtcclxuICAgICAgICBjb25zdCBob21lQWNjb3VudElkID0gcmVxdWVzdC5hY2NvdW50ICYmIHJlcXVlc3QuYWNjb3VudC5ob21lQWNjb3VudElkO1xyXG4gICAgICAgIHJldHVybiBgJHtCcm93c2VyQ29uc3RhbnRzLlBPUFVQX05BTUVfUFJFRklYfS4ke3RoaXMuY29uZmlnLmF1dGguY2xpZW50SWR9LiR7aG9tZUFjY291bnRJZH0uJHt0aGlzLmNvcnJlbGF0aW9uSWR9YDtcclxuICAgIH1cclxufVxuXG5leHBvcnQgeyBQb3B1cENsaWVudCB9O1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9UG9wdXBDbGllbnQubWpzLm1hcFxuIiwiLyohIEBhenVyZS9tc2FsLWJyb3dzZXIgdjMuMjguMSAyMDI1LTAxLTE0ICovXG4ndXNlIHN0cmljdCc7XG5pbXBvcnQgeyBjcmVhdGVDbGllbnRBdXRoRXJyb3IsIENsaWVudEF1dGhFcnJvckNvZGVzLCBTZXJ2ZXJFcnJvciwgaW52b2tlQXN5bmMsIFBlcmZvcm1hbmNlRXZlbnRzIH0gZnJvbSAnQGF6dXJlL21zYWwtY29tbW9uL2Jyb3dzZXInO1xuaW1wb3J0IHsgY3JlYXRlQnJvd3NlckF1dGhFcnJvciB9IGZyb20gJy4uL2Vycm9yL0Jyb3dzZXJBdXRoRXJyb3IubWpzJztcbmltcG9ydCB7IFRlbXBvcmFyeUNhY2hlS2V5cywgQXBpSWQgfSBmcm9tICcuLi91dGlscy9Ccm93c2VyQ29uc3RhbnRzLm1qcyc7XG5pbXBvcnQgeyBlbXB0eU5hdmlnYXRlVXJpLCB1c2VyQ2FuY2VsbGVkIH0gZnJvbSAnLi4vZXJyb3IvQnJvd3NlckF1dGhFcnJvckNvZGVzLm1qcyc7XG5cbi8qXHJcbiAqIENvcHlyaWdodCAoYykgTWljcm9zb2Z0IENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLlxyXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgTUlUIExpY2Vuc2UuXHJcbiAqL1xyXG5jbGFzcyBSZWRpcmVjdEhhbmRsZXIge1xyXG4gICAgY29uc3RydWN0b3IoYXV0aENvZGVNb2R1bGUsIHN0b3JhZ2VJbXBsLCBhdXRoQ29kZVJlcXVlc3QsIGxvZ2dlciwgcGVyZm9ybWFuY2VDbGllbnQpIHtcclxuICAgICAgICB0aGlzLmF1dGhNb2R1bGUgPSBhdXRoQ29kZU1vZHVsZTtcclxuICAgICAgICB0aGlzLmJyb3dzZXJTdG9yYWdlID0gc3RvcmFnZUltcGw7XHJcbiAgICAgICAgdGhpcy5hdXRoQ29kZVJlcXVlc3QgPSBhdXRoQ29kZVJlcXVlc3Q7XHJcbiAgICAgICAgdGhpcy5sb2dnZXIgPSBsb2dnZXI7XHJcbiAgICAgICAgdGhpcy5wZXJmb3JtYW5jZUNsaWVudCA9IHBlcmZvcm1hbmNlQ2xpZW50O1xyXG4gICAgfVxyXG4gICAgLyoqXHJcbiAgICAgKiBSZWRpcmVjdHMgd2luZG93IHRvIGdpdmVuIFVSTC5cclxuICAgICAqIEBwYXJhbSB1cmxOYXZpZ2F0ZVxyXG4gICAgICovXHJcbiAgICBhc3luYyBpbml0aWF0ZUF1dGhSZXF1ZXN0KHJlcXVlc3RVcmwsIHBhcmFtcykge1xyXG4gICAgICAgIHRoaXMubG9nZ2VyLnZlcmJvc2UoXCJSZWRpcmVjdEhhbmRsZXIuaW5pdGlhdGVBdXRoUmVxdWVzdCBjYWxsZWRcIik7XHJcbiAgICAgICAgLy8gTmF2aWdhdGUgaWYgdmFsaWQgVVJMXHJcbiAgICAgICAgaWYgKHJlcXVlc3RVcmwpIHtcclxuICAgICAgICAgICAgLy8gQ2FjaGUgc3RhcnQgcGFnZSwgcmV0dXJucyB0byB0aGlzIHBhZ2UgYWZ0ZXIgcmVkaXJlY3RVcmkgaWYgbmF2aWdhdGVUb0xvZ2luUmVxdWVzdFVybCBpcyB0cnVlXHJcbiAgICAgICAgICAgIGlmIChwYXJhbXMucmVkaXJlY3RTdGFydFBhZ2UpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMubG9nZ2VyLnZlcmJvc2UoXCJSZWRpcmVjdEhhbmRsZXIuaW5pdGlhdGVBdXRoUmVxdWVzdDogcmVkaXJlY3RTdGFydFBhZ2Ugc2V0LCBjYWNoaW5nIHN0YXJ0IHBhZ2VcIik7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmJyb3dzZXJTdG9yYWdlLnNldFRlbXBvcmFyeUNhY2hlKFRlbXBvcmFyeUNhY2hlS2V5cy5PUklHSU5fVVJJLCBwYXJhbXMucmVkaXJlY3RTdGFydFBhZ2UsIHRydWUpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIC8vIFNldCBpbnRlcmFjdGlvbiBzdGF0dXMgaW4gdGhlIGxpYnJhcnkuXHJcbiAgICAgICAgICAgIHRoaXMuYnJvd3NlclN0b3JhZ2Uuc2V0VGVtcG9yYXJ5Q2FjaGUoVGVtcG9yYXJ5Q2FjaGVLZXlzLkNPUlJFTEFUSU9OX0lELCB0aGlzLmF1dGhDb2RlUmVxdWVzdC5jb3JyZWxhdGlvbklkLCB0cnVlKTtcclxuICAgICAgICAgICAgdGhpcy5icm93c2VyU3RvcmFnZS5jYWNoZUNvZGVSZXF1ZXN0KHRoaXMuYXV0aENvZGVSZXF1ZXN0KTtcclxuICAgICAgICAgICAgdGhpcy5sb2dnZXIuaW5mb1BpaShgUmVkaXJlY3RIYW5kbGVyLmluaXRpYXRlQXV0aFJlcXVlc3Q6IE5hdmlnYXRlIHRvOiAke3JlcXVlc3RVcmx9YCk7XHJcbiAgICAgICAgICAgIGNvbnN0IG5hdmlnYXRpb25PcHRpb25zID0ge1xyXG4gICAgICAgICAgICAgICAgYXBpSWQ6IEFwaUlkLmFjcXVpcmVUb2tlblJlZGlyZWN0LFxyXG4gICAgICAgICAgICAgICAgdGltZW91dDogcGFyYW1zLnJlZGlyZWN0VGltZW91dCxcclxuICAgICAgICAgICAgICAgIG5vSGlzdG9yeTogZmFsc2UsXHJcbiAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgIC8vIElmIG9uUmVkaXJlY3ROYXZpZ2F0ZSBpcyBpbXBsZW1lbnRlZCwgaW52b2tlIGl0IGFuZCBwcm92aWRlIHJlcXVlc3RVcmxcclxuICAgICAgICAgICAgaWYgKHR5cGVvZiBwYXJhbXMub25SZWRpcmVjdE5hdmlnYXRlID09PSBcImZ1bmN0aW9uXCIpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMubG9nZ2VyLnZlcmJvc2UoXCJSZWRpcmVjdEhhbmRsZXIuaW5pdGlhdGVBdXRoUmVxdWVzdDogSW52b2tpbmcgb25SZWRpcmVjdE5hdmlnYXRlIGNhbGxiYWNrXCIpO1xyXG4gICAgICAgICAgICAgICAgY29uc3QgbmF2aWdhdGUgPSBwYXJhbXMub25SZWRpcmVjdE5hdmlnYXRlKHJlcXVlc3RVcmwpO1xyXG4gICAgICAgICAgICAgICAgLy8gUmV0dXJuaW5nIGZhbHNlIGZyb20gb25SZWRpcmVjdE5hdmlnYXRlIHdpbGwgc3RvcCBuYXZpZ2F0aW9uXHJcbiAgICAgICAgICAgICAgICBpZiAobmF2aWdhdGUgIT09IGZhbHNlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5sb2dnZXIudmVyYm9zZShcIlJlZGlyZWN0SGFuZGxlci5pbml0aWF0ZUF1dGhSZXF1ZXN0OiBvblJlZGlyZWN0TmF2aWdhdGUgZGlkIG5vdCByZXR1cm4gZmFsc2UsIG5hdmlnYXRpbmdcIik7XHJcbiAgICAgICAgICAgICAgICAgICAgYXdhaXQgcGFyYW1zLm5hdmlnYXRpb25DbGllbnQubmF2aWdhdGVFeHRlcm5hbChyZXF1ZXN0VXJsLCBuYXZpZ2F0aW9uT3B0aW9ucyk7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5sb2dnZXIudmVyYm9zZShcIlJlZGlyZWN0SGFuZGxlci5pbml0aWF0ZUF1dGhSZXF1ZXN0OiBvblJlZGlyZWN0TmF2aWdhdGUgcmV0dXJuZWQgZmFsc2UsIHN0b3BwaW5nIG5hdmlnYXRpb25cIik7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgLy8gTmF2aWdhdGUgd2luZG93IHRvIHJlcXVlc3QgVVJMXHJcbiAgICAgICAgICAgICAgICB0aGlzLmxvZ2dlci52ZXJib3NlKFwiUmVkaXJlY3RIYW5kbGVyLmluaXRpYXRlQXV0aFJlcXVlc3Q6IE5hdmlnYXRpbmcgd2luZG93IHRvIG5hdmlnYXRlIHVybFwiKTtcclxuICAgICAgICAgICAgICAgIGF3YWl0IHBhcmFtcy5uYXZpZ2F0aW9uQ2xpZW50Lm5hdmlnYXRlRXh0ZXJuYWwocmVxdWVzdFVybCwgbmF2aWdhdGlvbk9wdGlvbnMpO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAvLyBUaHJvdyBlcnJvciBpZiByZXF1ZXN0IFVSTCBpcyBlbXB0eS5cclxuICAgICAgICAgICAgdGhpcy5sb2dnZXIuaW5mbyhcIlJlZGlyZWN0SGFuZGxlci5pbml0aWF0ZUF1dGhSZXF1ZXN0OiBOYXZpZ2F0ZSB1cmwgaXMgZW1wdHlcIik7XHJcbiAgICAgICAgICAgIHRocm93IGNyZWF0ZUJyb3dzZXJBdXRoRXJyb3IoZW1wdHlOYXZpZ2F0ZVVyaSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgLyoqXHJcbiAgICAgKiBIYW5kbGUgYXV0aG9yaXphdGlvbiBjb2RlIHJlc3BvbnNlIGluIHRoZSB3aW5kb3cuXHJcbiAgICAgKiBAcGFyYW0gaGFzaFxyXG4gICAgICovXHJcbiAgICBhc3luYyBoYW5kbGVDb2RlUmVzcG9uc2UocmVzcG9uc2UsIHN0YXRlKSB7XHJcbiAgICAgICAgdGhpcy5sb2dnZXIudmVyYm9zZShcIlJlZGlyZWN0SGFuZGxlci5oYW5kbGVDb2RlUmVzcG9uc2UgY2FsbGVkXCIpO1xyXG4gICAgICAgIC8vIEludGVyYWN0aW9uIGlzIGNvbXBsZXRlZCAtIHJlbW92ZSBpbnRlcmFjdGlvbiBzdGF0dXMuXHJcbiAgICAgICAgdGhpcy5icm93c2VyU3RvcmFnZS5zZXRJbnRlcmFjdGlvbkluUHJvZ3Jlc3MoZmFsc2UpO1xyXG4gICAgICAgIC8vIEhhbmRsZSBjb2RlIHJlc3BvbnNlLlxyXG4gICAgICAgIGNvbnN0IHN0YXRlS2V5ID0gdGhpcy5icm93c2VyU3RvcmFnZS5nZW5lcmF0ZVN0YXRlS2V5KHN0YXRlKTtcclxuICAgICAgICBjb25zdCByZXF1ZXN0U3RhdGUgPSB0aGlzLmJyb3dzZXJTdG9yYWdlLmdldFRlbXBvcmFyeUNhY2hlKHN0YXRlS2V5KTtcclxuICAgICAgICBpZiAoIXJlcXVlc3RTdGF0ZSkge1xyXG4gICAgICAgICAgICB0aHJvdyBjcmVhdGVDbGllbnRBdXRoRXJyb3IoQ2xpZW50QXV0aEVycm9yQ29kZXMuc3RhdGVOb3RGb3VuZCwgXCJDYWNoZWQgU3RhdGVcIik7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGxldCBhdXRoQ29kZVJlc3BvbnNlO1xyXG4gICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgIGF1dGhDb2RlUmVzcG9uc2UgPSB0aGlzLmF1dGhNb2R1bGUuaGFuZGxlRnJhZ21lbnRSZXNwb25zZShyZXNwb25zZSwgcmVxdWVzdFN0YXRlKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgY2F0Y2ggKGUpIHtcclxuICAgICAgICAgICAgaWYgKGUgaW5zdGFuY2VvZiBTZXJ2ZXJFcnJvciAmJlxyXG4gICAgICAgICAgICAgICAgZS5zdWJFcnJvciA9PT0gdXNlckNhbmNlbGxlZCkge1xyXG4gICAgICAgICAgICAgICAgLy8gVHJhbnNsYXRlIHNlcnZlciBlcnJvciBjYXVzZWQgYnkgdXNlciBjbG9zaW5nIG5hdGl2ZSBwcm9tcHQgdG8gY29ycmVzcG9uZGluZyBmaXJzdCBjbGFzcyBNU0FMIGVycm9yXHJcbiAgICAgICAgICAgICAgICB0aHJvdyBjcmVhdGVCcm93c2VyQXV0aEVycm9yKHVzZXJDYW5jZWxsZWQpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgdGhyb3cgZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICAvLyBHZXQgY2FjaGVkIGl0ZW1zXHJcbiAgICAgICAgY29uc3Qgbm9uY2VLZXkgPSB0aGlzLmJyb3dzZXJTdG9yYWdlLmdlbmVyYXRlTm9uY2VLZXkocmVxdWVzdFN0YXRlKTtcclxuICAgICAgICBjb25zdCBjYWNoZWROb25jZSA9IHRoaXMuYnJvd3NlclN0b3JhZ2UuZ2V0VGVtcG9yYXJ5Q2FjaGUobm9uY2VLZXkpO1xyXG4gICAgICAgIC8vIEFzc2lnbiBjb2RlIHRvIHJlcXVlc3RcclxuICAgICAgICB0aGlzLmF1dGhDb2RlUmVxdWVzdC5jb2RlID0gYXV0aENvZGVSZXNwb25zZS5jb2RlO1xyXG4gICAgICAgIC8vIENoZWNrIGZvciBuZXcgY2xvdWQgaW5zdGFuY2VcclxuICAgICAgICBpZiAoYXV0aENvZGVSZXNwb25zZS5jbG91ZF9pbnN0YW5jZV9ob3N0X25hbWUpIHtcclxuICAgICAgICAgICAgYXdhaXQgaW52b2tlQXN5bmModGhpcy5hdXRoTW9kdWxlLnVwZGF0ZUF1dGhvcml0eS5iaW5kKHRoaXMuYXV0aE1vZHVsZSksIFBlcmZvcm1hbmNlRXZlbnRzLlVwZGF0ZVRva2VuRW5kcG9pbnRBdXRob3JpdHksIHRoaXMubG9nZ2VyLCB0aGlzLnBlcmZvcm1hbmNlQ2xpZW50LCB0aGlzLmF1dGhDb2RlUmVxdWVzdC5jb3JyZWxhdGlvbklkKShhdXRoQ29kZVJlc3BvbnNlLmNsb3VkX2luc3RhbmNlX2hvc3RfbmFtZSwgdGhpcy5hdXRoQ29kZVJlcXVlc3QuY29ycmVsYXRpb25JZCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGF1dGhDb2RlUmVzcG9uc2Uubm9uY2UgPSBjYWNoZWROb25jZSB8fCB1bmRlZmluZWQ7XHJcbiAgICAgICAgYXV0aENvZGVSZXNwb25zZS5zdGF0ZSA9IHJlcXVlc3RTdGF0ZTtcclxuICAgICAgICAvLyBBZGQgQ0NTIHBhcmFtZXRlcnMgaWYgYXZhaWxhYmxlXHJcbiAgICAgICAgaWYgKGF1dGhDb2RlUmVzcG9uc2UuY2xpZW50X2luZm8pIHtcclxuICAgICAgICAgICAgdGhpcy5hdXRoQ29kZVJlcXVlc3QuY2xpZW50SW5mbyA9IGF1dGhDb2RlUmVzcG9uc2UuY2xpZW50X2luZm87XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICBjb25zdCBjYWNoZWRDY3NDcmVkID0gdGhpcy5jaGVja0Njc0NyZWRlbnRpYWxzKCk7XHJcbiAgICAgICAgICAgIGlmIChjYWNoZWRDY3NDcmVkKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmF1dGhDb2RlUmVxdWVzdC5jY3NDcmVkZW50aWFsID0gY2FjaGVkQ2NzQ3JlZDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICAvLyBBY3F1aXJlIHRva2VuIHdpdGggcmV0cmlldmVkIGNvZGUuXHJcbiAgICAgICAgY29uc3QgdG9rZW5SZXNwb25zZSA9IChhd2FpdCB0aGlzLmF1dGhNb2R1bGUuYWNxdWlyZVRva2VuKHRoaXMuYXV0aENvZGVSZXF1ZXN0LCBhdXRoQ29kZVJlc3BvbnNlKSk7XHJcbiAgICAgICAgdGhpcy5icm93c2VyU3RvcmFnZS5jbGVhblJlcXVlc3RCeVN0YXRlKHN0YXRlKTtcclxuICAgICAgICByZXR1cm4gdG9rZW5SZXNwb25zZTtcclxuICAgIH1cclxuICAgIC8qKlxyXG4gICAgICogTG9va3MgdXAgY2NzIGNyZWRzIGluIHRoZSBjYWNoZVxyXG4gICAgICovXHJcbiAgICBjaGVja0Njc0NyZWRlbnRpYWxzKCkge1xyXG4gICAgICAgIC8vIExvb2sgdXAgY2NzIGNyZWRlbnRpYWwgaW4gdGVtcCBjYWNoZVxyXG4gICAgICAgIGNvbnN0IGNhY2hlZENjc0NyZWQgPSB0aGlzLmJyb3dzZXJTdG9yYWdlLmdldFRlbXBvcmFyeUNhY2hlKFRlbXBvcmFyeUNhY2hlS2V5cy5DQ1NfQ1JFREVOVElBTCwgdHJ1ZSk7XHJcbiAgICAgICAgaWYgKGNhY2hlZENjc0NyZWQpIHtcclxuICAgICAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgICAgIHJldHVybiBKU09OLnBhcnNlKGNhY2hlZENjc0NyZWQpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGNhdGNoIChlKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmF1dGhNb2R1bGUubG9nZ2VyLmVycm9yKFwiQ2FjaGUgY3JlZGVudGlhbCBjb3VsZCBub3QgYmUgcGFyc2VkXCIpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5hdXRoTW9kdWxlLmxvZ2dlci5lcnJvclBpaShgQ2FjaGUgY3JlZGVudGlhbCBjb3VsZCBub3QgYmUgcGFyc2VkOiAke2NhY2hlZENjc0NyZWR9YCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICB9XHJcbn1cblxuZXhwb3J0IHsgUmVkaXJlY3RIYW5kbGVyIH07XG4vLyMgc291cmNlTWFwcGluZ1VSTD1SZWRpcmVjdEhhbmRsZXIubWpzLm1hcFxuIiwiLyohIEBhenVyZS9tc2FsLWJyb3dzZXIgdjMuMjguMSAyMDI1LTAxLTE0ICovXG4ndXNlIHN0cmljdCc7XG5pbXBvcnQgeyBpbnZva2VBc3luYywgUGVyZm9ybWFuY2VFdmVudHMsIEF1dGhFcnJvciwgQ29uc3RhbnRzLCBVcmxTdHJpbmcsIFVybFV0aWxzLCBQcm90b2NvbFV0aWxzLCBUaHJvdHRsaW5nVXRpbHMsIFByb3RvY29sTW9kZSwgU2VydmVyUmVzcG9uc2VUeXBlIH0gZnJvbSAnQGF6dXJlL21zYWwtY29tbW9uL2Jyb3dzZXInO1xuaW1wb3J0IHsgU3RhbmRhcmRJbnRlcmFjdGlvbkNsaWVudCB9IGZyb20gJy4vU3RhbmRhcmRJbnRlcmFjdGlvbkNsaWVudC5tanMnO1xuaW1wb3J0IHsgSW50ZXJhY3Rpb25UeXBlLCBBcGlJZCwgVGVtcG9yYXJ5Q2FjaGVLZXlzIH0gZnJvbSAnLi4vdXRpbHMvQnJvd3NlckNvbnN0YW50cy5tanMnO1xuaW1wb3J0IHsgUmVkaXJlY3RIYW5kbGVyIH0gZnJvbSAnLi4vaW50ZXJhY3Rpb25faGFuZGxlci9SZWRpcmVjdEhhbmRsZXIubWpzJztcbmltcG9ydCB7IHJlcGxhY2VIYXNoLCBpc0luSWZyYW1lLCBnZXRIb21lcGFnZSwgY2xlYXJIYXNoLCBnZXRDdXJyZW50VXJpIH0gZnJvbSAnLi4vdXRpbHMvQnJvd3NlclV0aWxzLm1qcyc7XG5pbXBvcnQgeyBFdmVudFR5cGUgfSBmcm9tICcuLi9ldmVudC9FdmVudFR5cGUubWpzJztcbmltcG9ydCB7IGNyZWF0ZUJyb3dzZXJBdXRoRXJyb3IgfSBmcm9tICcuLi9lcnJvci9Ccm93c2VyQXV0aEVycm9yLm1qcyc7XG5pbXBvcnQgeyBOYXRpdmVJbnRlcmFjdGlvbkNsaWVudCB9IGZyb20gJy4vTmF0aXZlSW50ZXJhY3Rpb25DbGllbnQubWpzJztcbmltcG9ydCB7IE5hdGl2ZU1lc3NhZ2VIYW5kbGVyIH0gZnJvbSAnLi4vYnJva2VyL25hdGl2ZUJyb2tlci9OYXRpdmVNZXNzYWdlSGFuZGxlci5tanMnO1xuaW1wb3J0IHsgdmFsaWRhdGVJbnRlcmFjdGlvblR5cGUgfSBmcm9tICcuLi9yZXNwb25zZS9SZXNwb25zZUhhbmRsZXIubWpzJztcbmltcG9ydCB7IG5vU3RhdGVJbkhhc2gsIG5hdGl2ZUNvbm5lY3Rpb25Ob3RFc3RhYmxpc2hlZCwgbm9DYWNoZWRBdXRob3JpdHlFcnJvciB9IGZyb20gJy4uL2Vycm9yL0Jyb3dzZXJBdXRoRXJyb3JDb2Rlcy5tanMnO1xuXG4vKlxyXG4gKiBDb3B5cmlnaHQgKGMpIE1pY3Jvc29mdCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cclxuICogTGljZW5zZWQgdW5kZXIgdGhlIE1JVCBMaWNlbnNlLlxyXG4gKi9cclxuZnVuY3Rpb24gZ2V0TmF2aWdhdGlvblR5cGUoKSB7XHJcbiAgICBpZiAodHlwZW9mIHdpbmRvdyA9PT0gXCJ1bmRlZmluZWRcIiB8fFxyXG4gICAgICAgIHR5cGVvZiB3aW5kb3cucGVyZm9ybWFuY2UgPT09IFwidW5kZWZpbmVkXCIgfHxcclxuICAgICAgICB0eXBlb2Ygd2luZG93LnBlcmZvcm1hbmNlLmdldEVudHJpZXNCeVR5cGUgIT09IFwiZnVuY3Rpb25cIikge1xyXG4gICAgICAgIHJldHVybiB1bmRlZmluZWQ7XHJcbiAgICB9XHJcbiAgICBjb25zdCBuYXZpZ2F0aW9uRW50cmllcyA9IHdpbmRvdy5wZXJmb3JtYW5jZS5nZXRFbnRyaWVzQnlUeXBlKFwibmF2aWdhdGlvblwiKTtcclxuICAgIGNvbnN0IG5hdmlnYXRpb24gPSBuYXZpZ2F0aW9uRW50cmllcy5sZW5ndGhcclxuICAgICAgICA/IG5hdmlnYXRpb25FbnRyaWVzWzBdXHJcbiAgICAgICAgOiB1bmRlZmluZWQ7XHJcbiAgICByZXR1cm4gbmF2aWdhdGlvbj8udHlwZTtcclxufVxyXG5jbGFzcyBSZWRpcmVjdENsaWVudCBleHRlbmRzIFN0YW5kYXJkSW50ZXJhY3Rpb25DbGllbnQge1xyXG4gICAgY29uc3RydWN0b3IoY29uZmlnLCBzdG9yYWdlSW1wbCwgYnJvd3NlckNyeXB0bywgbG9nZ2VyLCBldmVudEhhbmRsZXIsIG5hdmlnYXRpb25DbGllbnQsIHBlcmZvcm1hbmNlQ2xpZW50LCBuYXRpdmVTdG9yYWdlSW1wbCwgbmF0aXZlTWVzc2FnZUhhbmRsZXIsIGNvcnJlbGF0aW9uSWQpIHtcclxuICAgICAgICBzdXBlcihjb25maWcsIHN0b3JhZ2VJbXBsLCBicm93c2VyQ3J5cHRvLCBsb2dnZXIsIGV2ZW50SGFuZGxlciwgbmF2aWdhdGlvbkNsaWVudCwgcGVyZm9ybWFuY2VDbGllbnQsIG5hdGl2ZU1lc3NhZ2VIYW5kbGVyLCBjb3JyZWxhdGlvbklkKTtcclxuICAgICAgICB0aGlzLm5hdGl2ZVN0b3JhZ2UgPSBuYXRpdmVTdG9yYWdlSW1wbDtcclxuICAgIH1cclxuICAgIC8qKlxyXG4gICAgICogUmVkaXJlY3RzIHRoZSBwYWdlIHRvIHRoZSAvYXV0aG9yaXplIGVuZHBvaW50IG9mIHRoZSBJRFBcclxuICAgICAqIEBwYXJhbSByZXF1ZXN0XHJcbiAgICAgKi9cclxuICAgIGFzeW5jIGFjcXVpcmVUb2tlbihyZXF1ZXN0KSB7XHJcbiAgICAgICAgY29uc3QgdmFsaWRSZXF1ZXN0ID0gYXdhaXQgaW52b2tlQXN5bmModGhpcy5pbml0aWFsaXplQXV0aG9yaXphdGlvblJlcXVlc3QuYmluZCh0aGlzKSwgUGVyZm9ybWFuY2VFdmVudHMuU3RhbmRhcmRJbnRlcmFjdGlvbkNsaWVudEluaXRpYWxpemVBdXRob3JpemF0aW9uUmVxdWVzdCwgdGhpcy5sb2dnZXIsIHRoaXMucGVyZm9ybWFuY2VDbGllbnQsIHRoaXMuY29ycmVsYXRpb25JZCkocmVxdWVzdCwgSW50ZXJhY3Rpb25UeXBlLlJlZGlyZWN0KTtcclxuICAgICAgICB0aGlzLmJyb3dzZXJTdG9yYWdlLnVwZGF0ZUNhY2hlRW50cmllcyh2YWxpZFJlcXVlc3Quc3RhdGUsIHZhbGlkUmVxdWVzdC5ub25jZSwgdmFsaWRSZXF1ZXN0LmF1dGhvcml0eSwgdmFsaWRSZXF1ZXN0LmxvZ2luSGludCB8fCBcIlwiLCB2YWxpZFJlcXVlc3QuYWNjb3VudCB8fCBudWxsKTtcclxuICAgICAgICBjb25zdCBzZXJ2ZXJUZWxlbWV0cnlNYW5hZ2VyID0gdGhpcy5pbml0aWFsaXplU2VydmVyVGVsZW1ldHJ5TWFuYWdlcihBcGlJZC5hY3F1aXJlVG9rZW5SZWRpcmVjdCk7XHJcbiAgICAgICAgY29uc3QgaGFuZGxlQmFja0J1dHRvbiA9IChldmVudCkgPT4ge1xyXG4gICAgICAgICAgICAvLyBDbGVhciB0ZW1wb3JhcnkgY2FjaGUgaWYgdGhlIGJhY2sgYnV0dG9uIGlzIGNsaWNrZWQgZHVyaW5nIHRoZSByZWRpcmVjdCBmbG93LlxyXG4gICAgICAgICAgICBpZiAoZXZlbnQucGVyc2lzdGVkKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmxvZ2dlci52ZXJib3NlKFwiUGFnZSB3YXMgcmVzdG9yZWQgZnJvbSBiYWNrL2ZvcndhcmQgY2FjaGUuIENsZWFyaW5nIHRlbXBvcmFyeSBjYWNoZS5cIik7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmJyb3dzZXJTdG9yYWdlLmNsZWFuUmVxdWVzdEJ5U3RhdGUodmFsaWRSZXF1ZXN0LnN0YXRlKTtcclxuICAgICAgICAgICAgICAgIHRoaXMuZXZlbnRIYW5kbGVyLmVtaXRFdmVudChFdmVudFR5cGUuUkVTVE9SRV9GUk9NX0JGQ0FDSEUsIEludGVyYWN0aW9uVHlwZS5SZWRpcmVjdCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9O1xyXG4gICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgIC8vIENyZWF0ZSBhdXRoIGNvZGUgcmVxdWVzdCBhbmQgZ2VuZXJhdGUgUEtDRSBwYXJhbXNcclxuICAgICAgICAgICAgY29uc3QgYXV0aENvZGVSZXF1ZXN0ID0gYXdhaXQgaW52b2tlQXN5bmModGhpcy5pbml0aWFsaXplQXV0aG9yaXphdGlvbkNvZGVSZXF1ZXN0LmJpbmQodGhpcyksIFBlcmZvcm1hbmNlRXZlbnRzLlN0YW5kYXJkSW50ZXJhY3Rpb25DbGllbnRJbml0aWFsaXplQXV0aG9yaXphdGlvbkNvZGVSZXF1ZXN0LCB0aGlzLmxvZ2dlciwgdGhpcy5wZXJmb3JtYW5jZUNsaWVudCwgdGhpcy5jb3JyZWxhdGlvbklkKSh2YWxpZFJlcXVlc3QpO1xyXG4gICAgICAgICAgICAvLyBJbml0aWFsaXplIHRoZSBjbGllbnRcclxuICAgICAgICAgICAgY29uc3QgYXV0aENsaWVudCA9IGF3YWl0IGludm9rZUFzeW5jKHRoaXMuY3JlYXRlQXV0aENvZGVDbGllbnQuYmluZCh0aGlzKSwgUGVyZm9ybWFuY2VFdmVudHMuU3RhbmRhcmRJbnRlcmFjdGlvbkNsaWVudENyZWF0ZUF1dGhDb2RlQ2xpZW50LCB0aGlzLmxvZ2dlciwgdGhpcy5wZXJmb3JtYW5jZUNsaWVudCwgdGhpcy5jb3JyZWxhdGlvbklkKSh7XHJcbiAgICAgICAgICAgICAgICBzZXJ2ZXJUZWxlbWV0cnlNYW5hZ2VyLFxyXG4gICAgICAgICAgICAgICAgcmVxdWVzdEF1dGhvcml0eTogdmFsaWRSZXF1ZXN0LmF1dGhvcml0eSxcclxuICAgICAgICAgICAgICAgIHJlcXVlc3RBenVyZUNsb3VkT3B0aW9uczogdmFsaWRSZXF1ZXN0LmF6dXJlQ2xvdWRPcHRpb25zLFxyXG4gICAgICAgICAgICAgICAgcmVxdWVzdEV4dHJhUXVlcnlQYXJhbWV0ZXJzOiB2YWxpZFJlcXVlc3QuZXh0cmFRdWVyeVBhcmFtZXRlcnMsXHJcbiAgICAgICAgICAgICAgICBhY2NvdW50OiB2YWxpZFJlcXVlc3QuYWNjb3VudCxcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIC8vIENyZWF0ZSByZWRpcmVjdCBpbnRlcmFjdGlvbiBoYW5kbGVyLlxyXG4gICAgICAgICAgICBjb25zdCBpbnRlcmFjdGlvbkhhbmRsZXIgPSBuZXcgUmVkaXJlY3RIYW5kbGVyKGF1dGhDbGllbnQsIHRoaXMuYnJvd3NlclN0b3JhZ2UsIGF1dGhDb2RlUmVxdWVzdCwgdGhpcy5sb2dnZXIsIHRoaXMucGVyZm9ybWFuY2VDbGllbnQpO1xyXG4gICAgICAgICAgICAvLyBDcmVhdGUgYWNxdWlyZSB0b2tlbiB1cmwuXHJcbiAgICAgICAgICAgIGNvbnN0IG5hdmlnYXRlVXJsID0gYXdhaXQgYXV0aENsaWVudC5nZXRBdXRoQ29kZVVybCh7XHJcbiAgICAgICAgICAgICAgICAuLi52YWxpZFJlcXVlc3QsXHJcbiAgICAgICAgICAgICAgICBuYXRpdmVCcm9rZXI6IE5hdGl2ZU1lc3NhZ2VIYW5kbGVyLmlzTmF0aXZlQXZhaWxhYmxlKHRoaXMuY29uZmlnLCB0aGlzLmxvZ2dlciwgdGhpcy5uYXRpdmVNZXNzYWdlSGFuZGxlciwgcmVxdWVzdC5hdXRoZW50aWNhdGlvblNjaGVtZSksXHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICBjb25zdCByZWRpcmVjdFN0YXJ0UGFnZSA9IHRoaXMuZ2V0UmVkaXJlY3RTdGFydFBhZ2UocmVxdWVzdC5yZWRpcmVjdFN0YXJ0UGFnZSk7XHJcbiAgICAgICAgICAgIHRoaXMubG9nZ2VyLnZlcmJvc2VQaWkoYFJlZGlyZWN0IHN0YXJ0IHBhZ2U6ICR7cmVkaXJlY3RTdGFydFBhZ2V9YCk7XHJcbiAgICAgICAgICAgIC8vIENsZWFyIHRlbXBvcmFyeSBjYWNoZSBpZiB0aGUgYmFjayBidXR0b24gaXMgY2xpY2tlZCBkdXJpbmcgdGhlIHJlZGlyZWN0IGZsb3cuXHJcbiAgICAgICAgICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKFwicGFnZXNob3dcIiwgaGFuZGxlQmFja0J1dHRvbik7XHJcbiAgICAgICAgICAgIC8vIFNob3cgdGhlIFVJIG9uY2UgdGhlIHVybCBoYXMgYmVlbiBjcmVhdGVkLiBSZXNwb25zZSB3aWxsIGNvbWUgYmFjayBpbiB0aGUgaGFzaCwgd2hpY2ggd2lsbCBiZSBoYW5kbGVkIGluIHRoZSBoYW5kbGVSZWRpcmVjdENhbGxiYWNrIGZ1bmN0aW9uLlxyXG4gICAgICAgICAgICByZXR1cm4gYXdhaXQgaW50ZXJhY3Rpb25IYW5kbGVyLmluaXRpYXRlQXV0aFJlcXVlc3QobmF2aWdhdGVVcmwsIHtcclxuICAgICAgICAgICAgICAgIG5hdmlnYXRpb25DbGllbnQ6IHRoaXMubmF2aWdhdGlvbkNsaWVudCxcclxuICAgICAgICAgICAgICAgIHJlZGlyZWN0VGltZW91dDogdGhpcy5jb25maWcuc3lzdGVtLnJlZGlyZWN0TmF2aWdhdGlvblRpbWVvdXQsXHJcbiAgICAgICAgICAgICAgICByZWRpcmVjdFN0YXJ0UGFnZTogcmVkaXJlY3RTdGFydFBhZ2UsXHJcbiAgICAgICAgICAgICAgICBvblJlZGlyZWN0TmF2aWdhdGU6IHJlcXVlc3Qub25SZWRpcmVjdE5hdmlnYXRlIHx8XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5jb25maWcuYXV0aC5vblJlZGlyZWN0TmF2aWdhdGUsXHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjYXRjaCAoZSkge1xyXG4gICAgICAgICAgICBpZiAoZSBpbnN0YW5jZW9mIEF1dGhFcnJvcikge1xyXG4gICAgICAgICAgICAgICAgZS5zZXRDb3JyZWxhdGlvbklkKHRoaXMuY29ycmVsYXRpb25JZCk7XHJcbiAgICAgICAgICAgICAgICBzZXJ2ZXJUZWxlbWV0cnlNYW5hZ2VyLmNhY2hlRmFpbGVkUmVxdWVzdChlKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcihcInBhZ2VzaG93XCIsIGhhbmRsZUJhY2tCdXR0b24pO1xyXG4gICAgICAgICAgICB0aGlzLmJyb3dzZXJTdG9yYWdlLmNsZWFuUmVxdWVzdEJ5U3RhdGUodmFsaWRSZXF1ZXN0LnN0YXRlKTtcclxuICAgICAgICAgICAgdGhyb3cgZTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICAvKipcclxuICAgICAqIENoZWNrcyBpZiBuYXZpZ2F0ZVRvTG9naW5SZXF1ZXN0VXJsIGlzIHNldCwgYW5kOlxyXG4gICAgICogLSBpZiB0cnVlLCBwZXJmb3JtcyBsb2dpYyB0byBjYWNoZSBhbmQgbmF2aWdhdGVcclxuICAgICAqIC0gaWYgZmFsc2UsIGhhbmRsZXMgaGFzaCBzdHJpbmcgYW5kIHBhcnNlcyByZXNwb25zZVxyXG4gICAgICogQHBhcmFtIGhhc2gge3N0cmluZ30gdXJsIGhhc2hcclxuICAgICAqIEBwYXJhbSBwYXJlbnRNZWFzdXJlbWVudCB7SW5Qcm9ncmVzc1BlcmZvcm1hbmNlRXZlbnR9IHBhcmVudCBtZWFzdXJlbWVudFxyXG4gICAgICovXHJcbiAgICBhc3luYyBoYW5kbGVSZWRpcmVjdFByb21pc2UoaGFzaCA9IFwiXCIsIHBhcmVudE1lYXN1cmVtZW50KSB7XHJcbiAgICAgICAgY29uc3Qgc2VydmVyVGVsZW1ldHJ5TWFuYWdlciA9IHRoaXMuaW5pdGlhbGl6ZVNlcnZlclRlbGVtZXRyeU1hbmFnZXIoQXBpSWQuaGFuZGxlUmVkaXJlY3RQcm9taXNlKTtcclxuICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICBpZiAoIXRoaXMuYnJvd3NlclN0b3JhZ2UuaXNJbnRlcmFjdGlvbkluUHJvZ3Jlc3ModHJ1ZSkpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMubG9nZ2VyLmluZm8oXCJoYW5kbGVSZWRpcmVjdFByb21pc2UgY2FsbGVkIGJ1dCB0aGVyZSBpcyBubyBpbnRlcmFjdGlvbiBpbiBwcm9ncmVzcywgcmV0dXJuaW5nIG51bGwuXCIpO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgY29uc3QgW3NlcnZlclBhcmFtcywgcmVzcG9uc2VTdHJpbmddID0gdGhpcy5nZXRSZWRpcmVjdFJlc3BvbnNlKGhhc2ggfHwgXCJcIik7XHJcbiAgICAgICAgICAgIGlmICghc2VydmVyUGFyYW1zKSB7XHJcbiAgICAgICAgICAgICAgICAvLyBOb3QgYSByZWNvZ25pemVkIHNlcnZlciByZXNwb25zZSBoYXNoIG9yIGhhc2ggbm90IGFzc29jaWF0ZWQgd2l0aCBhIHJlZGlyZWN0IHJlcXVlc3RcclxuICAgICAgICAgICAgICAgIHRoaXMubG9nZ2VyLmluZm8oXCJoYW5kbGVSZWRpcmVjdFByb21pc2UgZGlkIG5vdCBkZXRlY3QgYSByZXNwb25zZSBhcyBhIHJlc3VsdCBvZiBhIHJlZGlyZWN0LiBDbGVhbmluZyB0ZW1wb3JhcnkgY2FjaGUuXCIpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5icm93c2VyU3RvcmFnZS5jbGVhblJlcXVlc3RCeUludGVyYWN0aW9uVHlwZShJbnRlcmFjdGlvblR5cGUuUmVkaXJlY3QpO1xyXG4gICAgICAgICAgICAgICAgLy8gRG8gbm90IGluc3RydW1lbnQgXCJub19zZXJ2ZXJfcmVzcG9uc2VcIiBpZiB1c2VyIGNsaWNrZWQgYmFjayBidXR0b25cclxuICAgICAgICAgICAgICAgIGlmIChnZXROYXZpZ2F0aW9uVHlwZSgpICE9PSBcImJhY2tfZm9yd2FyZFwiKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcGFyZW50TWVhc3VyZW1lbnQuZXZlbnQuZXJyb3JDb2RlID0gXCJub19zZXJ2ZXJfcmVzcG9uc2VcIjtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMubG9nZ2VyLnZlcmJvc2UoXCJCYWNrIG5hdmlnYXRpb24gZXZlbnQgZGV0ZWN0ZWQuIE11dGluZyBub19zZXJ2ZXJfcmVzcG9uc2UgZXJyb3JcIik7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAvLyBJZiBuYXZpZ2F0ZVRvTG9naW5SZXF1ZXN0VXJsIGlzIHRydWUsIGdldCB0aGUgdXJsIHdoZXJlIHRoZSByZWRpcmVjdCByZXF1ZXN0IHdhcyBpbml0aWF0ZWRcclxuICAgICAgICAgICAgY29uc3QgbG9naW5SZXF1ZXN0VXJsID0gdGhpcy5icm93c2VyU3RvcmFnZS5nZXRUZW1wb3JhcnlDYWNoZShUZW1wb3JhcnlDYWNoZUtleXMuT1JJR0lOX1VSSSwgdHJ1ZSkgfHwgQ29uc3RhbnRzLkVNUFRZX1NUUklORztcclxuICAgICAgICAgICAgY29uc3QgbG9naW5SZXF1ZXN0VXJsTm9ybWFsaXplZCA9IFVybFN0cmluZy5yZW1vdmVIYXNoRnJvbVVybChsb2dpblJlcXVlc3RVcmwpO1xyXG4gICAgICAgICAgICBjb25zdCBjdXJyZW50VXJsTm9ybWFsaXplZCA9IFVybFN0cmluZy5yZW1vdmVIYXNoRnJvbVVybCh3aW5kb3cubG9jYXRpb24uaHJlZik7XHJcbiAgICAgICAgICAgIGlmIChsb2dpblJlcXVlc3RVcmxOb3JtYWxpemVkID09PSBjdXJyZW50VXJsTm9ybWFsaXplZCAmJlxyXG4gICAgICAgICAgICAgICAgdGhpcy5jb25maWcuYXV0aC5uYXZpZ2F0ZVRvTG9naW5SZXF1ZXN0VXJsKSB7XHJcbiAgICAgICAgICAgICAgICAvLyBXZSBhcmUgb24gdGhlIHBhZ2Ugd2UgbmVlZCB0byBuYXZpZ2F0ZSB0byAtIGhhbmRsZSBoYXNoXHJcbiAgICAgICAgICAgICAgICB0aGlzLmxvZ2dlci52ZXJib3NlKFwiQ3VycmVudCBwYWdlIGlzIGxvZ2luUmVxdWVzdFVybCwgaGFuZGxpbmcgcmVzcG9uc2VcIik7XHJcbiAgICAgICAgICAgICAgICBpZiAobG9naW5SZXF1ZXN0VXJsLmluZGV4T2YoXCIjXCIpID4gLTEpIHtcclxuICAgICAgICAgICAgICAgICAgICAvLyBSZXBsYWNlIGN1cnJlbnQgaGFzaCB3aXRoIG5vbi1tc2FsIGhhc2gsIGlmIHByZXNlbnRcclxuICAgICAgICAgICAgICAgICAgICByZXBsYWNlSGFzaChsb2dpblJlcXVlc3RVcmwpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgY29uc3QgaGFuZGxlSGFzaFJlc3VsdCA9IGF3YWl0IHRoaXMuaGFuZGxlUmVzcG9uc2Uoc2VydmVyUGFyYW1zLCBzZXJ2ZXJUZWxlbWV0cnlNYW5hZ2VyKTtcclxuICAgICAgICAgICAgICAgIHJldHVybiBoYW5kbGVIYXNoUmVzdWx0O1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2UgaWYgKCF0aGlzLmNvbmZpZy5hdXRoLm5hdmlnYXRlVG9Mb2dpblJlcXVlc3RVcmwpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMubG9nZ2VyLnZlcmJvc2UoXCJOYXZpZ2F0ZVRvTG9naW5SZXF1ZXN0VXJsIHNldCB0byBmYWxzZSwgaGFuZGxpbmcgcmVzcG9uc2VcIik7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gYXdhaXQgdGhpcy5oYW5kbGVSZXNwb25zZShzZXJ2ZXJQYXJhbXMsIHNlcnZlclRlbGVtZXRyeU1hbmFnZXIpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2UgaWYgKCFpc0luSWZyYW1lKCkgfHxcclxuICAgICAgICAgICAgICAgIHRoaXMuY29uZmlnLnN5c3RlbS5hbGxvd1JlZGlyZWN0SW5JZnJhbWUpIHtcclxuICAgICAgICAgICAgICAgIC8qXHJcbiAgICAgICAgICAgICAgICAgKiBSZXR1cm5lZCBmcm9tIGF1dGhvcml0eSB1c2luZyByZWRpcmVjdCAtIG5lZWQgdG8gcGVyZm9ybSBuYXZpZ2F0aW9uIGJlZm9yZSBwcm9jZXNzaW5nIHJlc3BvbnNlXHJcbiAgICAgICAgICAgICAgICAgKiBDYWNoZSB0aGUgaGFzaCB0byBiZSByZXRyaWV2ZWQgYWZ0ZXIgdGhlIG5leHQgcmVkaXJlY3RcclxuICAgICAgICAgICAgICAgICAqL1xyXG4gICAgICAgICAgICAgICAgdGhpcy5icm93c2VyU3RvcmFnZS5zZXRUZW1wb3JhcnlDYWNoZShUZW1wb3JhcnlDYWNoZUtleXMuVVJMX0hBU0gsIHJlc3BvbnNlU3RyaW5nLCB0cnVlKTtcclxuICAgICAgICAgICAgICAgIGNvbnN0IG5hdmlnYXRpb25PcHRpb25zID0ge1xyXG4gICAgICAgICAgICAgICAgICAgIGFwaUlkOiBBcGlJZC5oYW5kbGVSZWRpcmVjdFByb21pc2UsXHJcbiAgICAgICAgICAgICAgICAgICAgdGltZW91dDogdGhpcy5jb25maWcuc3lzdGVtLnJlZGlyZWN0TmF2aWdhdGlvblRpbWVvdXQsXHJcbiAgICAgICAgICAgICAgICAgICAgbm9IaXN0b3J5OiB0cnVlLFxyXG4gICAgICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgICAgIC8qKlxyXG4gICAgICAgICAgICAgICAgICogRGVmYXVsdCBiZWhhdmlvciBpcyB0byByZWRpcmVjdCB0byB0aGUgc3RhcnQgcGFnZSBhbmQgbm90IHByb2Nlc3MgdGhlIGhhc2ggbm93LlxyXG4gICAgICAgICAgICAgICAgICogVGhlIHN0YXJ0IHBhZ2UgaXMgZXhwZWN0ZWQgdG8gYWxzbyBjYWxsIGhhbmRsZVJlZGlyZWN0UHJvbWlzZSB3aGljaCB3aWxsIHByb2Nlc3MgdGhlIGhhc2ggaW4gb25lIG9mIHRoZSBjaGVja3MgYWJvdmUuXHJcbiAgICAgICAgICAgICAgICAgKi9cclxuICAgICAgICAgICAgICAgIGxldCBwcm9jZXNzSGFzaE9uUmVkaXJlY3QgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgaWYgKCFsb2dpblJlcXVlc3RVcmwgfHwgbG9naW5SZXF1ZXN0VXJsID09PSBcIm51bGxcIikge1xyXG4gICAgICAgICAgICAgICAgICAgIC8vIFJlZGlyZWN0IHRvIGhvbWUgcGFnZSBpZiBsb2dpbiByZXF1ZXN0IHVybCBpcyBudWxsIChyZWFsIG51bGwgb3IgdGhlIHN0cmluZyBudWxsKVxyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGhvbWVwYWdlID0gZ2V0SG9tZXBhZ2UoKTtcclxuICAgICAgICAgICAgICAgICAgICAvLyBDYWNoZSB0aGUgaG9tZXBhZ2UgdW5kZXIgT1JJR0lOX1VSSSB0byBlbnN1cmUgY2FjaGVkIGhhc2ggaXMgcHJvY2Vzc2VkIG9uIGhvbWVwYWdlXHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5icm93c2VyU3RvcmFnZS5zZXRUZW1wb3JhcnlDYWNoZShUZW1wb3JhcnlDYWNoZUtleXMuT1JJR0lOX1VSSSwgaG9tZXBhZ2UsIHRydWUpO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMubG9nZ2VyLndhcm5pbmcoXCJVbmFibGUgdG8gZ2V0IHZhbGlkIGxvZ2luIHJlcXVlc3QgdXJsIGZyb20gY2FjaGUsIHJlZGlyZWN0aW5nIHRvIGhvbWUgcGFnZVwiKTtcclxuICAgICAgICAgICAgICAgICAgICBwcm9jZXNzSGFzaE9uUmVkaXJlY3QgPVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLm5hdmlnYXRpb25DbGllbnQubmF2aWdhdGVJbnRlcm5hbChob21lcGFnZSwgbmF2aWdhdGlvbk9wdGlvbnMpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgLy8gTmF2aWdhdGUgdG8gcGFnZSB0aGF0IGluaXRpYXRlZCB0aGUgcmVkaXJlY3QgcmVxdWVzdFxyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMubG9nZ2VyLnZlcmJvc2UoYE5hdmlnYXRpbmcgdG8gbG9naW5SZXF1ZXN0VXJsOiAke2xvZ2luUmVxdWVzdFVybH1gKTtcclxuICAgICAgICAgICAgICAgICAgICBwcm9jZXNzSGFzaE9uUmVkaXJlY3QgPVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLm5hdmlnYXRpb25DbGllbnQubmF2aWdhdGVJbnRlcm5hbChsb2dpblJlcXVlc3RVcmwsIG5hdmlnYXRpb25PcHRpb25zKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIC8vIElmIG5hdmlnYXRlSW50ZXJuYWwgaW1wbGVtZW50YXRpb24gcmV0dXJucyBmYWxzZSwgaGFuZGxlIHRoZSBoYXNoIG5vd1xyXG4gICAgICAgICAgICAgICAgaWYgKCFwcm9jZXNzSGFzaE9uUmVkaXJlY3QpIHtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gYXdhaXQgdGhpcy5oYW5kbGVSZXNwb25zZShzZXJ2ZXJQYXJhbXMsIHNlcnZlclRlbGVtZXRyeU1hbmFnZXIpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjYXRjaCAoZSkge1xyXG4gICAgICAgICAgICBpZiAoZSBpbnN0YW5jZW9mIEF1dGhFcnJvcikge1xyXG4gICAgICAgICAgICAgICAgZS5zZXRDb3JyZWxhdGlvbklkKHRoaXMuY29ycmVsYXRpb25JZCk7XHJcbiAgICAgICAgICAgICAgICBzZXJ2ZXJUZWxlbWV0cnlNYW5hZ2VyLmNhY2hlRmFpbGVkUmVxdWVzdChlKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB0aGlzLmJyb3dzZXJTdG9yYWdlLmNsZWFuUmVxdWVzdEJ5SW50ZXJhY3Rpb25UeXBlKEludGVyYWN0aW9uVHlwZS5SZWRpcmVjdCk7XHJcbiAgICAgICAgICAgIHRocm93IGU7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgLyoqXHJcbiAgICAgKiBHZXRzIHRoZSByZXNwb25zZSBoYXNoIGZvciBhIHJlZGlyZWN0IHJlcXVlc3RcclxuICAgICAqIFJldHVybnMgbnVsbCBpZiBpbnRlcmFjdGlvblR5cGUgaW4gdGhlIHN0YXRlIHZhbHVlIGlzIG5vdCBcInJlZGlyZWN0XCIgb3IgdGhlIGhhc2ggZG9lcyBub3QgY29udGFpbiBrbm93biBwcm9wZXJ0aWVzXHJcbiAgICAgKiBAcGFyYW0gaGFzaFxyXG4gICAgICovXHJcbiAgICBnZXRSZWRpcmVjdFJlc3BvbnNlKHVzZXJQcm92aWRlZFJlc3BvbnNlKSB7XHJcbiAgICAgICAgdGhpcy5sb2dnZXIudmVyYm9zZShcImdldFJlZGlyZWN0UmVzcG9uc2VIYXNoIGNhbGxlZFwiKTtcclxuICAgICAgICAvLyBHZXQgY3VycmVudCBsb2NhdGlvbiBoYXNoIGZyb20gd2luZG93IG9yIGNhY2hlLlxyXG4gICAgICAgIGxldCByZXNwb25zZVN0cmluZyA9IHVzZXJQcm92aWRlZFJlc3BvbnNlO1xyXG4gICAgICAgIGlmICghcmVzcG9uc2VTdHJpbmcpIHtcclxuICAgICAgICAgICAgaWYgKHRoaXMuY29uZmlnLmF1dGguT0lEQ09wdGlvbnMuc2VydmVyUmVzcG9uc2VUeXBlID09PVxyXG4gICAgICAgICAgICAgICAgU2VydmVyUmVzcG9uc2VUeXBlLlFVRVJZKSB7XHJcbiAgICAgICAgICAgICAgICByZXNwb25zZVN0cmluZyA9IHdpbmRvdy5sb2NhdGlvbi5zZWFyY2g7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICByZXNwb25zZVN0cmluZyA9IHdpbmRvdy5sb2NhdGlvbi5oYXNoO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGxldCByZXNwb25zZSA9IFVybFV0aWxzLmdldERlc2VyaWFsaXplZFJlc3BvbnNlKHJlc3BvbnNlU3RyaW5nKTtcclxuICAgICAgICBpZiAocmVzcG9uc2UpIHtcclxuICAgICAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgICAgIHZhbGlkYXRlSW50ZXJhY3Rpb25UeXBlKHJlc3BvbnNlLCB0aGlzLmJyb3dzZXJDcnlwdG8sIEludGVyYWN0aW9uVHlwZS5SZWRpcmVjdCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgY2F0Y2ggKGUpIHtcclxuICAgICAgICAgICAgICAgIGlmIChlIGluc3RhbmNlb2YgQXV0aEVycm9yKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5sb2dnZXIuZXJyb3IoYEludGVyYWN0aW9uIHR5cGUgdmFsaWRhdGlvbiBmYWlsZWQgZHVlIHRvICR7ZS5lcnJvckNvZGV9OiAke2UuZXJyb3JNZXNzYWdlfWApO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIFtudWxsLCBcIlwiXTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBjbGVhckhhc2god2luZG93KTtcclxuICAgICAgICAgICAgdGhpcy5sb2dnZXIudmVyYm9zZShcIkhhc2ggY29udGFpbnMga25vd24gcHJvcGVydGllcywgcmV0dXJuaW5nIHJlc3BvbnNlIGhhc2hcIik7XHJcbiAgICAgICAgICAgIHJldHVybiBbcmVzcG9uc2UsIHJlc3BvbnNlU3RyaW5nXTtcclxuICAgICAgICB9XHJcbiAgICAgICAgY29uc3QgY2FjaGVkSGFzaCA9IHRoaXMuYnJvd3NlclN0b3JhZ2UuZ2V0VGVtcG9yYXJ5Q2FjaGUoVGVtcG9yYXJ5Q2FjaGVLZXlzLlVSTF9IQVNILCB0cnVlKTtcclxuICAgICAgICB0aGlzLmJyb3dzZXJTdG9yYWdlLnJlbW92ZUl0ZW0odGhpcy5icm93c2VyU3RvcmFnZS5nZW5lcmF0ZUNhY2hlS2V5KFRlbXBvcmFyeUNhY2hlS2V5cy5VUkxfSEFTSCkpO1xyXG4gICAgICAgIGlmIChjYWNoZWRIYXNoKSB7XHJcbiAgICAgICAgICAgIHJlc3BvbnNlID0gVXJsVXRpbHMuZ2V0RGVzZXJpYWxpemVkUmVzcG9uc2UoY2FjaGVkSGFzaCk7XHJcbiAgICAgICAgICAgIGlmIChyZXNwb25zZSkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5sb2dnZXIudmVyYm9zZShcIkhhc2ggZG9lcyBub3QgY29udGFpbiBrbm93biBwcm9wZXJ0aWVzLCByZXR1cm5pbmcgY2FjaGVkIGhhc2hcIik7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gW3Jlc3BvbnNlLCBjYWNoZWRIYXNoXTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gW251bGwsIFwiXCJdO1xyXG4gICAgfVxyXG4gICAgLyoqXHJcbiAgICAgKiBDaGVja3MgaWYgaGFzaCBleGlzdHMgYW5kIGhhbmRsZXMgaW4gd2luZG93LlxyXG4gICAgICogQHBhcmFtIGhhc2hcclxuICAgICAqIEBwYXJhbSBzdGF0ZVxyXG4gICAgICovXHJcbiAgICBhc3luYyBoYW5kbGVSZXNwb25zZShzZXJ2ZXJQYXJhbXMsIHNlcnZlclRlbGVtZXRyeU1hbmFnZXIpIHtcclxuICAgICAgICBjb25zdCBzdGF0ZSA9IHNlcnZlclBhcmFtcy5zdGF0ZTtcclxuICAgICAgICBpZiAoIXN0YXRlKSB7XHJcbiAgICAgICAgICAgIHRocm93IGNyZWF0ZUJyb3dzZXJBdXRoRXJyb3Iobm9TdGF0ZUluSGFzaCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNvbnN0IGNhY2hlZFJlcXVlc3QgPSB0aGlzLmJyb3dzZXJTdG9yYWdlLmdldENhY2hlZFJlcXVlc3Qoc3RhdGUpO1xyXG4gICAgICAgIHRoaXMubG9nZ2VyLnZlcmJvc2UoXCJoYW5kbGVSZXNwb25zZSBjYWxsZWQsIHJldHJpZXZlZCBjYWNoZWQgcmVxdWVzdFwiKTtcclxuICAgICAgICBpZiAoc2VydmVyUGFyYW1zLmFjY291bnRJZCkge1xyXG4gICAgICAgICAgICB0aGlzLmxvZ2dlci52ZXJib3NlKFwiQWNjb3VudCBpZCBmb3VuZCBpbiBoYXNoLCBjYWxsaW5nIFdBTSBmb3IgdG9rZW5cIik7XHJcbiAgICAgICAgICAgIGlmICghdGhpcy5uYXRpdmVNZXNzYWdlSGFuZGxlcikge1xyXG4gICAgICAgICAgICAgICAgdGhyb3cgY3JlYXRlQnJvd3NlckF1dGhFcnJvcihuYXRpdmVDb25uZWN0aW9uTm90RXN0YWJsaXNoZWQpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGNvbnN0IG5hdGl2ZUludGVyYWN0aW9uQ2xpZW50ID0gbmV3IE5hdGl2ZUludGVyYWN0aW9uQ2xpZW50KHRoaXMuY29uZmlnLCB0aGlzLmJyb3dzZXJTdG9yYWdlLCB0aGlzLmJyb3dzZXJDcnlwdG8sIHRoaXMubG9nZ2VyLCB0aGlzLmV2ZW50SGFuZGxlciwgdGhpcy5uYXZpZ2F0aW9uQ2xpZW50LCBBcGlJZC5hY3F1aXJlVG9rZW5Qb3B1cCwgdGhpcy5wZXJmb3JtYW5jZUNsaWVudCwgdGhpcy5uYXRpdmVNZXNzYWdlSGFuZGxlciwgc2VydmVyUGFyYW1zLmFjY291bnRJZCwgdGhpcy5uYXRpdmVTdG9yYWdlLCBjYWNoZWRSZXF1ZXN0LmNvcnJlbGF0aW9uSWQpO1xyXG4gICAgICAgICAgICBjb25zdCB7IHVzZXJSZXF1ZXN0U3RhdGUgfSA9IFByb3RvY29sVXRpbHMucGFyc2VSZXF1ZXN0U3RhdGUodGhpcy5icm93c2VyQ3J5cHRvLCBzdGF0ZSk7XHJcbiAgICAgICAgICAgIHJldHVybiBuYXRpdmVJbnRlcmFjdGlvbkNsaWVudFxyXG4gICAgICAgICAgICAgICAgLmFjcXVpcmVUb2tlbih7XHJcbiAgICAgICAgICAgICAgICAuLi5jYWNoZWRSZXF1ZXN0LFxyXG4gICAgICAgICAgICAgICAgc3RhdGU6IHVzZXJSZXF1ZXN0U3RhdGUsXHJcbiAgICAgICAgICAgICAgICBwcm9tcHQ6IHVuZGVmaW5lZCwgLy8gU2VydmVyIHNob3VsZCBoYW5kbGUgdGhlIHByb21wdCwgaWRlYWxseSBuYXRpdmUgYnJva2VyIGNhbiBkbyB0aGlzIHBhcnQgc2lsZW50bHlcclxuICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgICAgIC5maW5hbGx5KCgpID0+IHtcclxuICAgICAgICAgICAgICAgIHRoaXMuYnJvd3NlclN0b3JhZ2UuY2xlYW5SZXF1ZXN0QnlTdGF0ZShzdGF0ZSk7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuICAgICAgICAvLyBIYXNoIGNvbnRhaW5zIGtub3duIHByb3BlcnRpZXMgLSBoYW5kbGUgYW5kIHJldHVybiBpbiBjYWxsYmFja1xyXG4gICAgICAgIGNvbnN0IGN1cnJlbnRBdXRob3JpdHkgPSB0aGlzLmJyb3dzZXJTdG9yYWdlLmdldENhY2hlZEF1dGhvcml0eShzdGF0ZSk7XHJcbiAgICAgICAgaWYgKCFjdXJyZW50QXV0aG9yaXR5KSB7XHJcbiAgICAgICAgICAgIHRocm93IGNyZWF0ZUJyb3dzZXJBdXRoRXJyb3Iobm9DYWNoZWRBdXRob3JpdHlFcnJvcik7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNvbnN0IGF1dGhDbGllbnQgPSBhd2FpdCBpbnZva2VBc3luYyh0aGlzLmNyZWF0ZUF1dGhDb2RlQ2xpZW50LmJpbmQodGhpcyksIFBlcmZvcm1hbmNlRXZlbnRzLlN0YW5kYXJkSW50ZXJhY3Rpb25DbGllbnRDcmVhdGVBdXRoQ29kZUNsaWVudCwgdGhpcy5sb2dnZXIsIHRoaXMucGVyZm9ybWFuY2VDbGllbnQsIHRoaXMuY29ycmVsYXRpb25JZCkoeyBzZXJ2ZXJUZWxlbWV0cnlNYW5hZ2VyLCByZXF1ZXN0QXV0aG9yaXR5OiBjdXJyZW50QXV0aG9yaXR5IH0pO1xyXG4gICAgICAgIFRocm90dGxpbmdVdGlscy5yZW1vdmVUaHJvdHRsZSh0aGlzLmJyb3dzZXJTdG9yYWdlLCB0aGlzLmNvbmZpZy5hdXRoLmNsaWVudElkLCBjYWNoZWRSZXF1ZXN0KTtcclxuICAgICAgICBjb25zdCBpbnRlcmFjdGlvbkhhbmRsZXIgPSBuZXcgUmVkaXJlY3RIYW5kbGVyKGF1dGhDbGllbnQsIHRoaXMuYnJvd3NlclN0b3JhZ2UsIGNhY2hlZFJlcXVlc3QsIHRoaXMubG9nZ2VyLCB0aGlzLnBlcmZvcm1hbmNlQ2xpZW50KTtcclxuICAgICAgICByZXR1cm4gaW50ZXJhY3Rpb25IYW5kbGVyLmhhbmRsZUNvZGVSZXNwb25zZShzZXJ2ZXJQYXJhbXMsIHN0YXRlKTtcclxuICAgIH1cclxuICAgIC8qKlxyXG4gICAgICogVXNlIHRvIGxvZyBvdXQgdGhlIGN1cnJlbnQgdXNlciwgYW5kIHJlZGlyZWN0IHRoZSB1c2VyIHRvIHRoZSBwb3N0TG9nb3V0UmVkaXJlY3RVcmkuXHJcbiAgICAgKiBEZWZhdWx0IGJlaGF2aW91ciBpcyB0byByZWRpcmVjdCB0aGUgdXNlciB0byBgd2luZG93LmxvY2F0aW9uLmhyZWZgLlxyXG4gICAgICogQHBhcmFtIGxvZ291dFJlcXVlc3RcclxuICAgICAqL1xyXG4gICAgYXN5bmMgbG9nb3V0KGxvZ291dFJlcXVlc3QpIHtcclxuICAgICAgICB0aGlzLmxvZ2dlci52ZXJib3NlKFwibG9nb3V0UmVkaXJlY3QgY2FsbGVkXCIpO1xyXG4gICAgICAgIGNvbnN0IHZhbGlkTG9nb3V0UmVxdWVzdCA9IHRoaXMuaW5pdGlhbGl6ZUxvZ291dFJlcXVlc3QobG9nb3V0UmVxdWVzdCk7XHJcbiAgICAgICAgY29uc3Qgc2VydmVyVGVsZW1ldHJ5TWFuYWdlciA9IHRoaXMuaW5pdGlhbGl6ZVNlcnZlclRlbGVtZXRyeU1hbmFnZXIoQXBpSWQubG9nb3V0KTtcclxuICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICB0aGlzLmV2ZW50SGFuZGxlci5lbWl0RXZlbnQoRXZlbnRUeXBlLkxPR09VVF9TVEFSVCwgSW50ZXJhY3Rpb25UeXBlLlJlZGlyZWN0LCBsb2dvdXRSZXF1ZXN0KTtcclxuICAgICAgICAgICAgLy8gQ2xlYXIgY2FjaGUgb24gbG9nb3V0XHJcbiAgICAgICAgICAgIGF3YWl0IHRoaXMuY2xlYXJDYWNoZU9uTG9nb3V0KHZhbGlkTG9nb3V0UmVxdWVzdC5hY2NvdW50KTtcclxuICAgICAgICAgICAgY29uc3QgbmF2aWdhdGlvbk9wdGlvbnMgPSB7XHJcbiAgICAgICAgICAgICAgICBhcGlJZDogQXBpSWQubG9nb3V0LFxyXG4gICAgICAgICAgICAgICAgdGltZW91dDogdGhpcy5jb25maWcuc3lzdGVtLnJlZGlyZWN0TmF2aWdhdGlvblRpbWVvdXQsXHJcbiAgICAgICAgICAgICAgICBub0hpc3Rvcnk6IGZhbHNlLFxyXG4gICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICBjb25zdCBhdXRoQ2xpZW50ID0gYXdhaXQgaW52b2tlQXN5bmModGhpcy5jcmVhdGVBdXRoQ29kZUNsaWVudC5iaW5kKHRoaXMpLCBQZXJmb3JtYW5jZUV2ZW50cy5TdGFuZGFyZEludGVyYWN0aW9uQ2xpZW50Q3JlYXRlQXV0aENvZGVDbGllbnQsIHRoaXMubG9nZ2VyLCB0aGlzLnBlcmZvcm1hbmNlQ2xpZW50LCB0aGlzLmNvcnJlbGF0aW9uSWQpKHtcclxuICAgICAgICAgICAgICAgIHNlcnZlclRlbGVtZXRyeU1hbmFnZXIsXHJcbiAgICAgICAgICAgICAgICByZXF1ZXN0QXV0aG9yaXR5OiBsb2dvdXRSZXF1ZXN0ICYmIGxvZ291dFJlcXVlc3QuYXV0aG9yaXR5LFxyXG4gICAgICAgICAgICAgICAgcmVxdWVzdEV4dHJhUXVlcnlQYXJhbWV0ZXJzOiBsb2dvdXRSZXF1ZXN0Py5leHRyYVF1ZXJ5UGFyYW1ldGVycyxcclxuICAgICAgICAgICAgICAgIGFjY291bnQ6IChsb2dvdXRSZXF1ZXN0ICYmIGxvZ291dFJlcXVlc3QuYWNjb3VudCkgfHwgdW5kZWZpbmVkLFxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgaWYgKGF1dGhDbGllbnQuYXV0aG9yaXR5LnByb3RvY29sTW9kZSA9PT0gUHJvdG9jb2xNb2RlLk9JREMpIHtcclxuICAgICAgICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgICAgICAgICAgYXV0aENsaWVudC5hdXRob3JpdHkuZW5kU2Vzc2lvbkVuZHBvaW50O1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgY2F0Y2gge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmICh2YWxpZExvZ291dFJlcXVlc3QuYWNjb3VudD8uaG9tZUFjY291bnRJZCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB2b2lkIHRoaXMuYnJvd3NlclN0b3JhZ2UucmVtb3ZlQWNjb3VudCh2YWxpZExvZ291dFJlcXVlc3QuYWNjb3VudD8uaG9tZUFjY291bnRJZCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZXZlbnRIYW5kbGVyLmVtaXRFdmVudChFdmVudFR5cGUuTE9HT1VUX1NVQ0NFU1MsIEludGVyYWN0aW9uVHlwZS5SZWRpcmVjdCwgdmFsaWRMb2dvdXRSZXF1ZXN0KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAvLyBDcmVhdGUgbG9nb3V0IHN0cmluZyBhbmQgbmF2aWdhdGUgdXNlciB3aW5kb3cgdG8gbG9nb3V0LlxyXG4gICAgICAgICAgICBjb25zdCBsb2dvdXRVcmkgPSBhdXRoQ2xpZW50LmdldExvZ291dFVyaSh2YWxpZExvZ291dFJlcXVlc3QpO1xyXG4gICAgICAgICAgICB0aGlzLmV2ZW50SGFuZGxlci5lbWl0RXZlbnQoRXZlbnRUeXBlLkxPR09VVF9TVUNDRVNTLCBJbnRlcmFjdGlvblR5cGUuUmVkaXJlY3QsIHZhbGlkTG9nb3V0UmVxdWVzdCk7XHJcbiAgICAgICAgICAgIC8vIENoZWNrIGlmIG9uUmVkaXJlY3ROYXZpZ2F0ZSBpcyBpbXBsZW1lbnRlZCwgYW5kIGludm9rZSBpdCBpZiBzb1xyXG4gICAgICAgICAgICBpZiAobG9nb3V0UmVxdWVzdCAmJlxyXG4gICAgICAgICAgICAgICAgdHlwZW9mIGxvZ291dFJlcXVlc3Qub25SZWRpcmVjdE5hdmlnYXRlID09PSBcImZ1bmN0aW9uXCIpIHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IG5hdmlnYXRlID0gbG9nb3V0UmVxdWVzdC5vblJlZGlyZWN0TmF2aWdhdGUobG9nb3V0VXJpKTtcclxuICAgICAgICAgICAgICAgIGlmIChuYXZpZ2F0ZSAhPT0gZmFsc2UpIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmxvZ2dlci52ZXJib3NlKFwiTG9nb3V0IG9uUmVkaXJlY3ROYXZpZ2F0ZSBkaWQgbm90IHJldHVybiBmYWxzZSwgbmF2aWdhdGluZ1wiKTtcclxuICAgICAgICAgICAgICAgICAgICAvLyBFbnN1cmUgaW50ZXJhY3Rpb24gaXMgaW4gcHJvZ3Jlc3NcclxuICAgICAgICAgICAgICAgICAgICBpZiAoIXRoaXMuYnJvd3NlclN0b3JhZ2UuZ2V0SW50ZXJhY3Rpb25JblByb2dyZXNzKCkpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5icm93c2VyU3RvcmFnZS5zZXRJbnRlcmFjdGlvbkluUHJvZ3Jlc3ModHJ1ZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMubmF2aWdhdGlvbkNsaWVudC5uYXZpZ2F0ZUV4dGVybmFsKGxvZ291dFVyaSwgbmF2aWdhdGlvbk9wdGlvbnMpO1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIC8vIEVuc3VyZSBpbnRlcmFjdGlvbiBpcyBub3QgaW4gcHJvZ3Jlc3NcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmJyb3dzZXJTdG9yYWdlLnNldEludGVyYWN0aW9uSW5Qcm9ncmVzcyhmYWxzZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5sb2dnZXIudmVyYm9zZShcIkxvZ291dCBvblJlZGlyZWN0TmF2aWdhdGUgcmV0dXJuZWQgZmFsc2UsIHN0b3BwaW5nIG5hdmlnYXRpb25cIik7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAvLyBFbnN1cmUgaW50ZXJhY3Rpb24gaXMgaW4gcHJvZ3Jlc3NcclxuICAgICAgICAgICAgICAgIGlmICghdGhpcy5icm93c2VyU3RvcmFnZS5nZXRJbnRlcmFjdGlvbkluUHJvZ3Jlc3MoKSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuYnJvd3NlclN0b3JhZ2Uuc2V0SW50ZXJhY3Rpb25JblByb2dyZXNzKHRydWUpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5uYXZpZ2F0aW9uQ2xpZW50Lm5hdmlnYXRlRXh0ZXJuYWwobG9nb3V0VXJpLCBuYXZpZ2F0aW9uT3B0aW9ucyk7XHJcbiAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgY2F0Y2ggKGUpIHtcclxuICAgICAgICAgICAgaWYgKGUgaW5zdGFuY2VvZiBBdXRoRXJyb3IpIHtcclxuICAgICAgICAgICAgICAgIGUuc2V0Q29ycmVsYXRpb25JZCh0aGlzLmNvcnJlbGF0aW9uSWQpO1xyXG4gICAgICAgICAgICAgICAgc2VydmVyVGVsZW1ldHJ5TWFuYWdlci5jYWNoZUZhaWxlZFJlcXVlc3QoZSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgdGhpcy5ldmVudEhhbmRsZXIuZW1pdEV2ZW50KEV2ZW50VHlwZS5MT0dPVVRfRkFJTFVSRSwgSW50ZXJhY3Rpb25UeXBlLlJlZGlyZWN0LCBudWxsLCBlKTtcclxuICAgICAgICAgICAgdGhpcy5ldmVudEhhbmRsZXIuZW1pdEV2ZW50KEV2ZW50VHlwZS5MT0dPVVRfRU5ELCBJbnRlcmFjdGlvblR5cGUuUmVkaXJlY3QpO1xyXG4gICAgICAgICAgICB0aHJvdyBlO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLmV2ZW50SGFuZGxlci5lbWl0RXZlbnQoRXZlbnRUeXBlLkxPR09VVF9FTkQsIEludGVyYWN0aW9uVHlwZS5SZWRpcmVjdCk7XHJcbiAgICB9XHJcbiAgICAvKipcclxuICAgICAqIFVzZSB0byBnZXQgdGhlIHJlZGlyZWN0U3RhcnRQYWdlIGVpdGhlciBmcm9tIHJlcXVlc3Qgb3IgdXNlIGN1cnJlbnQgd2luZG93XHJcbiAgICAgKiBAcGFyYW0gcmVxdWVzdFN0YXJ0UGFnZVxyXG4gICAgICovXHJcbiAgICBnZXRSZWRpcmVjdFN0YXJ0UGFnZShyZXF1ZXN0U3RhcnRQYWdlKSB7XHJcbiAgICAgICAgY29uc3QgcmVkaXJlY3RTdGFydFBhZ2UgPSByZXF1ZXN0U3RhcnRQYWdlIHx8IHdpbmRvdy5sb2NhdGlvbi5ocmVmO1xyXG4gICAgICAgIHJldHVybiBVcmxTdHJpbmcuZ2V0QWJzb2x1dGVVcmwocmVkaXJlY3RTdGFydFBhZ2UsIGdldEN1cnJlbnRVcmkoKSk7XHJcbiAgICB9XHJcbn1cblxuZXhwb3J0IHsgUmVkaXJlY3RDbGllbnQgfTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPVJlZGlyZWN0Q2xpZW50Lm1qcy5tYXBcbiIsIi8qISBAYXp1cmUvbXNhbC1icm93c2VyIHYzLjI4LjEgMjAyNS0wMS0xNCAqL1xuJ3VzZSBzdHJpY3QnO1xuaW1wb3J0IHsgUGVyZm9ybWFuY2VFdmVudHMsIGludm9rZUFzeW5jLCBpbnZva2UsIFNlcnZlclJlc3BvbnNlVHlwZSB9IGZyb20gJ0BhenVyZS9tc2FsLWNvbW1vbi9icm93c2VyJztcbmltcG9ydCB7IGNyZWF0ZUJyb3dzZXJBdXRoRXJyb3IgfSBmcm9tICcuLi9lcnJvci9Ccm93c2VyQXV0aEVycm9yLm1qcyc7XG5pbXBvcnQgeyBERUZBVUxUX0lGUkFNRV9USU1FT1VUX01TIH0gZnJvbSAnLi4vY29uZmlnL0NvbmZpZ3VyYXRpb24ubWpzJztcbmltcG9ydCB7IGVtcHR5TmF2aWdhdGVVcmksIG1vbml0b3JXaW5kb3dUaW1lb3V0IH0gZnJvbSAnLi4vZXJyb3IvQnJvd3NlckF1dGhFcnJvckNvZGVzLm1qcyc7XG5cbi8qXHJcbiAqIENvcHlyaWdodCAoYykgTWljcm9zb2Z0IENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLlxyXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgTUlUIExpY2Vuc2UuXHJcbiAqL1xyXG4vKipcclxuICogQ3JlYXRlcyBhIGhpZGRlbiBpZnJhbWUgdG8gZ2l2ZW4gVVJMIHVzaW5nIHVzZXItcmVxdWVzdGVkIHNjb3BlcyBhcyBhbiBpZC5cclxuICogQHBhcmFtIHVybE5hdmlnYXRlXHJcbiAqIEBwYXJhbSB1c2VyUmVxdWVzdFNjb3Blc1xyXG4gKi9cclxuYXN5bmMgZnVuY3Rpb24gaW5pdGlhdGVBdXRoUmVxdWVzdChyZXF1ZXN0VXJsLCBwZXJmb3JtYW5jZUNsaWVudCwgbG9nZ2VyLCBjb3JyZWxhdGlvbklkLCBuYXZpZ2F0ZUZyYW1lV2FpdCkge1xyXG4gICAgcGVyZm9ybWFuY2VDbGllbnQuYWRkUXVldWVNZWFzdXJlbWVudChQZXJmb3JtYW5jZUV2ZW50cy5TaWxlbnRIYW5kbGVySW5pdGlhdGVBdXRoUmVxdWVzdCwgY29ycmVsYXRpb25JZCk7XHJcbiAgICBpZiAoIXJlcXVlc3RVcmwpIHtcclxuICAgICAgICAvLyBUaHJvdyBlcnJvciBpZiByZXF1ZXN0IFVSTCBpcyBlbXB0eS5cclxuICAgICAgICBsb2dnZXIuaW5mbyhcIk5hdmlnYXRlIHVybCBpcyBlbXB0eVwiKTtcclxuICAgICAgICB0aHJvdyBjcmVhdGVCcm93c2VyQXV0aEVycm9yKGVtcHR5TmF2aWdhdGVVcmkpO1xyXG4gICAgfVxyXG4gICAgaWYgKG5hdmlnYXRlRnJhbWVXYWl0KSB7XHJcbiAgICAgICAgcmV0dXJuIGludm9rZUFzeW5jKGxvYWRGcmFtZSwgUGVyZm9ybWFuY2VFdmVudHMuU2lsZW50SGFuZGxlckxvYWRGcmFtZSwgbG9nZ2VyLCBwZXJmb3JtYW5jZUNsaWVudCwgY29ycmVsYXRpb25JZCkocmVxdWVzdFVybCwgbmF2aWdhdGVGcmFtZVdhaXQsIHBlcmZvcm1hbmNlQ2xpZW50LCBjb3JyZWxhdGlvbklkKTtcclxuICAgIH1cclxuICAgIHJldHVybiBpbnZva2UobG9hZEZyYW1lU3luYywgUGVyZm9ybWFuY2VFdmVudHMuU2lsZW50SGFuZGxlckxvYWRGcmFtZVN5bmMsIGxvZ2dlciwgcGVyZm9ybWFuY2VDbGllbnQsIGNvcnJlbGF0aW9uSWQpKHJlcXVlc3RVcmwpO1xyXG59XHJcbi8qKlxyXG4gKiBNb25pdG9ycyBhbiBpZnJhbWUgY29udGVudCB3aW5kb3cgdW50aWwgaXQgbG9hZHMgYSB1cmwgd2l0aCBhIGtub3duIGhhc2gsIG9yIGhpdHMgYSBzcGVjaWZpZWQgdGltZW91dC5cclxuICogQHBhcmFtIGlmcmFtZVxyXG4gKiBAcGFyYW0gdGltZW91dFxyXG4gKi9cclxuYXN5bmMgZnVuY3Rpb24gbW9uaXRvcklmcmFtZUZvckhhc2goaWZyYW1lLCB0aW1lb3V0LCBwb2xsSW50ZXJ2YWxNaWxsaXNlY29uZHMsIHBlcmZvcm1hbmNlQ2xpZW50LCBsb2dnZXIsIGNvcnJlbGF0aW9uSWQsIHJlc3BvbnNlVHlwZSkge1xyXG4gICAgcGVyZm9ybWFuY2VDbGllbnQuYWRkUXVldWVNZWFzdXJlbWVudChQZXJmb3JtYW5jZUV2ZW50cy5TaWxlbnRIYW5kbGVyTW9uaXRvcklmcmFtZUZvckhhc2gsIGNvcnJlbGF0aW9uSWQpO1xyXG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcclxuICAgICAgICBpZiAodGltZW91dCA8IERFRkFVTFRfSUZSQU1FX1RJTUVPVVRfTVMpIHtcclxuICAgICAgICAgICAgbG9nZ2VyLndhcm5pbmcoYHN5c3RlbS5sb2FkRnJhbWVUaW1lb3V0IG9yIHN5c3RlbS5pZnJhbWVIYXNoVGltZW91dCBzZXQgdG8gbG93ZXIgKCR7dGltZW91dH1tcykgdGhhbiB0aGUgZGVmYXVsdCAoJHtERUZBVUxUX0lGUkFNRV9USU1FT1VUX01TfW1zKS4gVGhpcyBtYXkgcmVzdWx0IGluIHRpbWVvdXRzLmApO1xyXG4gICAgICAgIH1cclxuICAgICAgICAvKlxyXG4gICAgICAgICAqIFBvbGxpbmcgZm9yIGlmcmFtZXMgY2FuIGJlIHB1cmVseSB0aW1pbmcgYmFzZWQsXHJcbiAgICAgICAgICogc2luY2Ugd2UgZG9uJ3QgbmVlZCB0byBhY2NvdW50IGZvciBpbnRlcmFjdGlvbi5cclxuICAgICAgICAgKi9cclxuICAgICAgICBjb25zdCB0aW1lb3V0SWQgPSB3aW5kb3cuc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgICAgIHdpbmRvdy5jbGVhckludGVydmFsKGludGVydmFsSWQpO1xyXG4gICAgICAgICAgICByZWplY3QoY3JlYXRlQnJvd3NlckF1dGhFcnJvcihtb25pdG9yV2luZG93VGltZW91dCkpO1xyXG4gICAgICAgIH0sIHRpbWVvdXQpO1xyXG4gICAgICAgIGNvbnN0IGludGVydmFsSWQgPSB3aW5kb3cuc2V0SW50ZXJ2YWwoKCkgPT4ge1xyXG4gICAgICAgICAgICBsZXQgaHJlZiA9IFwiXCI7XHJcbiAgICAgICAgICAgIGNvbnN0IGNvbnRlbnRXaW5kb3cgPSBpZnJhbWUuY29udGVudFdpbmRvdztcclxuICAgICAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgICAgIC8qXHJcbiAgICAgICAgICAgICAgICAgKiBXaWxsIHRocm93IGlmIGNyb3NzIG9yaWdpbixcclxuICAgICAgICAgICAgICAgICAqIHdoaWNoIHNob3VsZCBiZSBjYXVnaHQgYW5kIGlnbm9yZWRcclxuICAgICAgICAgICAgICAgICAqIHNpbmNlIHdlIG5lZWQgdGhlIGludGVydmFsIHRvIGtlZXAgcnVubmluZyB3aGlsZSBvbiBTVFMgVUkuXHJcbiAgICAgICAgICAgICAgICAgKi9cclxuICAgICAgICAgICAgICAgIGhyZWYgPSBjb250ZW50V2luZG93ID8gY29udGVudFdpbmRvdy5sb2NhdGlvbi5ocmVmIDogXCJcIjtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBjYXRjaCAoZSkgeyB9XHJcbiAgICAgICAgICAgIGlmICghaHJlZiB8fCBocmVmID09PSBcImFib3V0OmJsYW5rXCIpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBsZXQgcmVzcG9uc2VTdHJpbmcgPSBcIlwiO1xyXG4gICAgICAgICAgICBpZiAoY29udGVudFdpbmRvdykge1xyXG4gICAgICAgICAgICAgICAgaWYgKHJlc3BvbnNlVHlwZSA9PT0gU2VydmVyUmVzcG9uc2VUeXBlLlFVRVJZKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmVzcG9uc2VTdHJpbmcgPSBjb250ZW50V2luZG93LmxvY2F0aW9uLnNlYXJjaDtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIHJlc3BvbnNlU3RyaW5nID0gY29udGVudFdpbmRvdy5sb2NhdGlvbi5oYXNoO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHdpbmRvdy5jbGVhclRpbWVvdXQodGltZW91dElkKTtcclxuICAgICAgICAgICAgd2luZG93LmNsZWFySW50ZXJ2YWwoaW50ZXJ2YWxJZCk7XHJcbiAgICAgICAgICAgIHJlc29sdmUocmVzcG9uc2VTdHJpbmcpO1xyXG4gICAgICAgIH0sIHBvbGxJbnRlcnZhbE1pbGxpc2Vjb25kcyk7XHJcbiAgICB9KS5maW5hbGx5KCgpID0+IHtcclxuICAgICAgICBpbnZva2UocmVtb3ZlSGlkZGVuSWZyYW1lLCBQZXJmb3JtYW5jZUV2ZW50cy5SZW1vdmVIaWRkZW5JZnJhbWUsIGxvZ2dlciwgcGVyZm9ybWFuY2VDbGllbnQsIGNvcnJlbGF0aW9uSWQpKGlmcmFtZSk7XHJcbiAgICB9KTtcclxufVxyXG4vKipcclxuICogQGhpZGRlblxyXG4gKiBMb2FkcyBpZnJhbWUgd2l0aCBhdXRob3JpemF0aW9uIGVuZHBvaW50IFVSTFxyXG4gKiBAaWdub3JlXHJcbiAqIEBkZXByZWNhdGVkXHJcbiAqL1xyXG5mdW5jdGlvbiBsb2FkRnJhbWUodXJsTmF2aWdhdGUsIG5hdmlnYXRlRnJhbWVXYWl0LCBwZXJmb3JtYW5jZUNsaWVudCwgY29ycmVsYXRpb25JZCkge1xyXG4gICAgcGVyZm9ybWFuY2VDbGllbnQuYWRkUXVldWVNZWFzdXJlbWVudChQZXJmb3JtYW5jZUV2ZW50cy5TaWxlbnRIYW5kbGVyTG9hZEZyYW1lLCBjb3JyZWxhdGlvbklkKTtcclxuICAgIC8qXHJcbiAgICAgKiBUaGlzIHRyaWNrIG92ZXJjb21lcyBpZnJhbWUgbmF2aWdhdGlvbiBpbiBJRVxyXG4gICAgICogSUUgZG9lcyBub3QgbG9hZCB0aGUgcGFnZSBjb25zaXN0ZW50bHkgaW4gaWZyYW1lXHJcbiAgICAgKi9cclxuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XHJcbiAgICAgICAgY29uc3QgZnJhbWVIYW5kbGUgPSBjcmVhdGVIaWRkZW5JZnJhbWUoKTtcclxuICAgICAgICB3aW5kb3cuc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgICAgIGlmICghZnJhbWVIYW5kbGUpIHtcclxuICAgICAgICAgICAgICAgIHJlamVjdChcIlVuYWJsZSB0byBsb2FkIGlmcmFtZVwiKTtcclxuICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBmcmFtZUhhbmRsZS5zcmMgPSB1cmxOYXZpZ2F0ZTtcclxuICAgICAgICAgICAgcmVzb2x2ZShmcmFtZUhhbmRsZSk7XHJcbiAgICAgICAgfSwgbmF2aWdhdGVGcmFtZVdhaXQpO1xyXG4gICAgfSk7XHJcbn1cclxuLyoqXHJcbiAqIEBoaWRkZW5cclxuICogTG9hZHMgdGhlIGlmcmFtZSBzeW5jaHJvbm91c2x5IHdoZW4gdGhlIG5hdmlnYXRlVGltZUZyYW1lIGlzIHNldCB0byBgMGBcclxuICogQHBhcmFtIHVybE5hdmlnYXRlXHJcbiAqIEBwYXJhbSBmcmFtZU5hbWVcclxuICogQHBhcmFtIGxvZ2dlclxyXG4gKi9cclxuZnVuY3Rpb24gbG9hZEZyYW1lU3luYyh1cmxOYXZpZ2F0ZSkge1xyXG4gICAgY29uc3QgZnJhbWVIYW5kbGUgPSBjcmVhdGVIaWRkZW5JZnJhbWUoKTtcclxuICAgIGZyYW1lSGFuZGxlLnNyYyA9IHVybE5hdmlnYXRlO1xyXG4gICAgcmV0dXJuIGZyYW1lSGFuZGxlO1xyXG59XHJcbi8qKlxyXG4gKiBAaGlkZGVuXHJcbiAqIENyZWF0ZXMgYSBuZXcgaGlkZGVuIGlmcmFtZSBvciBnZXRzIGFuIGV4aXN0aW5nIG9uZSBmb3Igc2lsZW50IHRva2VuIHJlbmV3YWwuXHJcbiAqIEBpZ25vcmVcclxuICovXHJcbmZ1bmN0aW9uIGNyZWF0ZUhpZGRlbklmcmFtZSgpIHtcclxuICAgIGNvbnN0IGF1dGhGcmFtZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJpZnJhbWVcIik7XHJcbiAgICBhdXRoRnJhbWUuY2xhc3NOYW1lID0gXCJtc2FsU2lsZW50SWZyYW1lXCI7XHJcbiAgICBhdXRoRnJhbWUuc3R5bGUudmlzaWJpbGl0eSA9IFwiaGlkZGVuXCI7XHJcbiAgICBhdXRoRnJhbWUuc3R5bGUucG9zaXRpb24gPSBcImFic29sdXRlXCI7XHJcbiAgICBhdXRoRnJhbWUuc3R5bGUud2lkdGggPSBhdXRoRnJhbWUuc3R5bGUuaGVpZ2h0ID0gXCIwXCI7XHJcbiAgICBhdXRoRnJhbWUuc3R5bGUuYm9yZGVyID0gXCIwXCI7XHJcbiAgICBhdXRoRnJhbWUuc2V0QXR0cmlidXRlKFwic2FuZGJveFwiLCBcImFsbG93LXNjcmlwdHMgYWxsb3ctc2FtZS1vcmlnaW4gYWxsb3ctZm9ybXNcIik7XHJcbiAgICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKGF1dGhGcmFtZSk7XHJcbiAgICByZXR1cm4gYXV0aEZyYW1lO1xyXG59XHJcbi8qKlxyXG4gKiBAaGlkZGVuXHJcbiAqIFJlbW92ZXMgYSBoaWRkZW4gaWZyYW1lIGZyb20gdGhlIHBhZ2UuXHJcbiAqIEBpZ25vcmVcclxuICovXHJcbmZ1bmN0aW9uIHJlbW92ZUhpZGRlbklmcmFtZShpZnJhbWUpIHtcclxuICAgIGlmIChkb2N1bWVudC5ib2R5ID09PSBpZnJhbWUucGFyZW50Tm9kZSkge1xyXG4gICAgICAgIGRvY3VtZW50LmJvZHkucmVtb3ZlQ2hpbGQoaWZyYW1lKTtcclxuICAgIH1cclxufVxuXG5leHBvcnQgeyBpbml0aWF0ZUF1dGhSZXF1ZXN0LCBtb25pdG9ySWZyYW1lRm9ySGFzaCB9O1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9U2lsZW50SGFuZGxlci5tanMubWFwXG4iLCIvKiEgQGF6dXJlL21zYWwtYnJvd3NlciB2My4yOC4xIDIwMjUtMDEtMTQgKi9cbid1c2Ugc3RyaWN0JztcbmltcG9ydCB7IFBlcmZvcm1hbmNlRXZlbnRzLCBQcm9tcHRWYWx1ZSwgaW52b2tlQXN5bmMsIEF1dGhFcnJvciwgaW52b2tlLCBQcm90b2NvbFV0aWxzIH0gZnJvbSAnQGF6dXJlL21zYWwtY29tbW9uL2Jyb3dzZXInO1xuaW1wb3J0IHsgU3RhbmRhcmRJbnRlcmFjdGlvbkNsaWVudCB9IGZyb20gJy4vU3RhbmRhcmRJbnRlcmFjdGlvbkNsaWVudC5tanMnO1xuaW1wb3J0IHsgY3JlYXRlQnJvd3NlckF1dGhFcnJvciB9IGZyb20gJy4uL2Vycm9yL0Jyb3dzZXJBdXRoRXJyb3IubWpzJztcbmltcG9ydCB7IEludGVyYWN0aW9uVHlwZSwgQnJvd3NlckNvbnN0YW50cyB9IGZyb20gJy4uL3V0aWxzL0Jyb3dzZXJDb25zdGFudHMubWpzJztcbmltcG9ydCB7IGluaXRpYXRlQXV0aFJlcXVlc3QsIG1vbml0b3JJZnJhbWVGb3JIYXNoIH0gZnJvbSAnLi4vaW50ZXJhY3Rpb25faGFuZGxlci9TaWxlbnRIYW5kbGVyLm1qcyc7XG5pbXBvcnQgeyBOYXRpdmVNZXNzYWdlSGFuZGxlciB9IGZyb20gJy4uL2Jyb2tlci9uYXRpdmVCcm9rZXIvTmF0aXZlTWVzc2FnZUhhbmRsZXIubWpzJztcbmltcG9ydCB7IE5hdGl2ZUludGVyYWN0aW9uQ2xpZW50IH0gZnJvbSAnLi9OYXRpdmVJbnRlcmFjdGlvbkNsaWVudC5tanMnO1xuaW1wb3J0IHsgSW50ZXJhY3Rpb25IYW5kbGVyIH0gZnJvbSAnLi4vaW50ZXJhY3Rpb25faGFuZGxlci9JbnRlcmFjdGlvbkhhbmRsZXIubWpzJztcbmltcG9ydCB7IHByZWNvbm5lY3QgfSBmcm9tICcuLi91dGlscy9Ccm93c2VyVXRpbHMubWpzJztcbmltcG9ydCB7IGRlc2VyaWFsaXplUmVzcG9uc2UgfSBmcm9tICcuLi9yZXNwb25zZS9SZXNwb25zZUhhbmRsZXIubWpzJztcbmltcG9ydCB7IHNpbGVudExvZ291dFVuc3VwcG9ydGVkLCBuYXRpdmVDb25uZWN0aW9uTm90RXN0YWJsaXNoZWQgfSBmcm9tICcuLi9lcnJvci9Ccm93c2VyQXV0aEVycm9yQ29kZXMubWpzJztcblxuLypcclxuICogQ29weXJpZ2h0IChjKSBNaWNyb3NvZnQgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuXHJcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgTGljZW5zZS5cclxuICovXHJcbmNsYXNzIFNpbGVudElmcmFtZUNsaWVudCBleHRlbmRzIFN0YW5kYXJkSW50ZXJhY3Rpb25DbGllbnQge1xyXG4gICAgY29uc3RydWN0b3IoY29uZmlnLCBzdG9yYWdlSW1wbCwgYnJvd3NlckNyeXB0bywgbG9nZ2VyLCBldmVudEhhbmRsZXIsIG5hdmlnYXRpb25DbGllbnQsIGFwaUlkLCBwZXJmb3JtYW5jZUNsaWVudCwgbmF0aXZlU3RvcmFnZUltcGwsIG5hdGl2ZU1lc3NhZ2VIYW5kbGVyLCBjb3JyZWxhdGlvbklkKSB7XHJcbiAgICAgICAgc3VwZXIoY29uZmlnLCBzdG9yYWdlSW1wbCwgYnJvd3NlckNyeXB0bywgbG9nZ2VyLCBldmVudEhhbmRsZXIsIG5hdmlnYXRpb25DbGllbnQsIHBlcmZvcm1hbmNlQ2xpZW50LCBuYXRpdmVNZXNzYWdlSGFuZGxlciwgY29ycmVsYXRpb25JZCk7XHJcbiAgICAgICAgdGhpcy5hcGlJZCA9IGFwaUlkO1xyXG4gICAgICAgIHRoaXMubmF0aXZlU3RvcmFnZSA9IG5hdGl2ZVN0b3JhZ2VJbXBsO1xyXG4gICAgfVxyXG4gICAgLyoqXHJcbiAgICAgKiBBY3F1aXJlcyBhIHRva2VuIHNpbGVudGx5IGJ5IG9wZW5pbmcgYSBoaWRkZW4gaWZyYW1lIHRvIHRoZSAvYXV0aG9yaXplIGVuZHBvaW50IHdpdGggcHJvbXB0PW5vbmUgb3IgcHJvbXB0PW5vX3Nlc3Npb25cclxuICAgICAqIEBwYXJhbSByZXF1ZXN0XHJcbiAgICAgKi9cclxuICAgIGFzeW5jIGFjcXVpcmVUb2tlbihyZXF1ZXN0KSB7XHJcbiAgICAgICAgdGhpcy5wZXJmb3JtYW5jZUNsaWVudC5hZGRRdWV1ZU1lYXN1cmVtZW50KFBlcmZvcm1hbmNlRXZlbnRzLlNpbGVudElmcmFtZUNsaWVudEFjcXVpcmVUb2tlbiwgcmVxdWVzdC5jb3JyZWxhdGlvbklkKTtcclxuICAgICAgICAvLyBDaGVjayB0aGF0IHdlIGhhdmUgc29tZSBTU08gZGF0YVxyXG4gICAgICAgIGlmICghcmVxdWVzdC5sb2dpbkhpbnQgJiZcclxuICAgICAgICAgICAgIXJlcXVlc3Quc2lkICYmXHJcbiAgICAgICAgICAgICghcmVxdWVzdC5hY2NvdW50IHx8ICFyZXF1ZXN0LmFjY291bnQudXNlcm5hbWUpKSB7XHJcbiAgICAgICAgICAgIHRoaXMubG9nZ2VyLndhcm5pbmcoXCJObyB1c2VyIGhpbnQgcHJvdmlkZWQuIFRoZSBhdXRob3JpemF0aW9uIHNlcnZlciBtYXkgbmVlZCBtb3JlIGluZm9ybWF0aW9uIHRvIGNvbXBsZXRlIHRoaXMgcmVxdWVzdC5cIik7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIC8vIENoZWNrIHRoZSBwcm9tcHQgdmFsdWVcclxuICAgICAgICBjb25zdCBpbnB1dFJlcXVlc3QgPSB7IC4uLnJlcXVlc3QgfTtcclxuICAgICAgICBpZiAoaW5wdXRSZXF1ZXN0LnByb21wdCkge1xyXG4gICAgICAgICAgICBpZiAoaW5wdXRSZXF1ZXN0LnByb21wdCAhPT0gUHJvbXB0VmFsdWUuTk9ORSAmJlxyXG4gICAgICAgICAgICAgICAgaW5wdXRSZXF1ZXN0LnByb21wdCAhPT0gUHJvbXB0VmFsdWUuTk9fU0VTU0lPTikge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5sb2dnZXIud2FybmluZyhgU2lsZW50SWZyYW1lQ2xpZW50LiBSZXBsYWNpbmcgaW52YWxpZCBwcm9tcHQgJHtpbnB1dFJlcXVlc3QucHJvbXB0fSB3aXRoICR7UHJvbXB0VmFsdWUuTk9ORX1gKTtcclxuICAgICAgICAgICAgICAgIGlucHV0UmVxdWVzdC5wcm9tcHQgPSBQcm9tcHRWYWx1ZS5OT05FO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICBpbnB1dFJlcXVlc3QucHJvbXB0ID0gUHJvbXB0VmFsdWUuTk9ORTtcclxuICAgICAgICB9XHJcbiAgICAgICAgLy8gQ3JlYXRlIHNpbGVudCByZXF1ZXN0XHJcbiAgICAgICAgY29uc3Qgc2lsZW50UmVxdWVzdCA9IGF3YWl0IGludm9rZUFzeW5jKHRoaXMuaW5pdGlhbGl6ZUF1dGhvcml6YXRpb25SZXF1ZXN0LmJpbmQodGhpcyksIFBlcmZvcm1hbmNlRXZlbnRzLlN0YW5kYXJkSW50ZXJhY3Rpb25DbGllbnRJbml0aWFsaXplQXV0aG9yaXphdGlvblJlcXVlc3QsIHRoaXMubG9nZ2VyLCB0aGlzLnBlcmZvcm1hbmNlQ2xpZW50LCByZXF1ZXN0LmNvcnJlbGF0aW9uSWQpKGlucHV0UmVxdWVzdCwgSW50ZXJhY3Rpb25UeXBlLlNpbGVudCk7XHJcbiAgICAgICAgcHJlY29ubmVjdChzaWxlbnRSZXF1ZXN0LmF1dGhvcml0eSk7XHJcbiAgICAgICAgY29uc3Qgc2VydmVyVGVsZW1ldHJ5TWFuYWdlciA9IHRoaXMuaW5pdGlhbGl6ZVNlcnZlclRlbGVtZXRyeU1hbmFnZXIodGhpcy5hcGlJZCk7XHJcbiAgICAgICAgbGV0IGF1dGhDbGllbnQ7XHJcbiAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgLy8gSW5pdGlhbGl6ZSB0aGUgY2xpZW50XHJcbiAgICAgICAgICAgIGF1dGhDbGllbnQgPSBhd2FpdCBpbnZva2VBc3luYyh0aGlzLmNyZWF0ZUF1dGhDb2RlQ2xpZW50LmJpbmQodGhpcyksIFBlcmZvcm1hbmNlRXZlbnRzLlN0YW5kYXJkSW50ZXJhY3Rpb25DbGllbnRDcmVhdGVBdXRoQ29kZUNsaWVudCwgdGhpcy5sb2dnZXIsIHRoaXMucGVyZm9ybWFuY2VDbGllbnQsIHJlcXVlc3QuY29ycmVsYXRpb25JZCkoe1xyXG4gICAgICAgICAgICAgICAgc2VydmVyVGVsZW1ldHJ5TWFuYWdlcixcclxuICAgICAgICAgICAgICAgIHJlcXVlc3RBdXRob3JpdHk6IHNpbGVudFJlcXVlc3QuYXV0aG9yaXR5LFxyXG4gICAgICAgICAgICAgICAgcmVxdWVzdEF6dXJlQ2xvdWRPcHRpb25zOiBzaWxlbnRSZXF1ZXN0LmF6dXJlQ2xvdWRPcHRpb25zLFxyXG4gICAgICAgICAgICAgICAgcmVxdWVzdEV4dHJhUXVlcnlQYXJhbWV0ZXJzOiBzaWxlbnRSZXF1ZXN0LmV4dHJhUXVlcnlQYXJhbWV0ZXJzLFxyXG4gICAgICAgICAgICAgICAgYWNjb3VudDogc2lsZW50UmVxdWVzdC5hY2NvdW50LFxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgcmV0dXJuIGF3YWl0IGludm9rZUFzeW5jKHRoaXMuc2lsZW50VG9rZW5IZWxwZXIuYmluZCh0aGlzKSwgUGVyZm9ybWFuY2VFdmVudHMuU2lsZW50SWZyYW1lQ2xpZW50VG9rZW5IZWxwZXIsIHRoaXMubG9nZ2VyLCB0aGlzLnBlcmZvcm1hbmNlQ2xpZW50LCByZXF1ZXN0LmNvcnJlbGF0aW9uSWQpKGF1dGhDbGllbnQsIHNpbGVudFJlcXVlc3QpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjYXRjaCAoZSkge1xyXG4gICAgICAgICAgICBpZiAoZSBpbnN0YW5jZW9mIEF1dGhFcnJvcikge1xyXG4gICAgICAgICAgICAgICAgZS5zZXRDb3JyZWxhdGlvbklkKHRoaXMuY29ycmVsYXRpb25JZCk7XHJcbiAgICAgICAgICAgICAgICBzZXJ2ZXJUZWxlbWV0cnlNYW5hZ2VyLmNhY2hlRmFpbGVkUmVxdWVzdChlKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAoIWF1dGhDbGllbnQgfHxcclxuICAgICAgICAgICAgICAgICEoZSBpbnN0YW5jZW9mIEF1dGhFcnJvcikgfHxcclxuICAgICAgICAgICAgICAgIGUuZXJyb3JDb2RlICE9PSBCcm93c2VyQ29uc3RhbnRzLklOVkFMSURfR1JBTlRfRVJST1IpIHtcclxuICAgICAgICAgICAgICAgIHRocm93IGU7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgdGhpcy5wZXJmb3JtYW5jZUNsaWVudC5hZGRGaWVsZHMoe1xyXG4gICAgICAgICAgICAgICAgcmV0cnlFcnJvcjogZS5lcnJvckNvZGUsXHJcbiAgICAgICAgICAgIH0sIHRoaXMuY29ycmVsYXRpb25JZCk7XHJcbiAgICAgICAgICAgIGNvbnN0IHJldHJ5U2lsZW50UmVxdWVzdCA9IGF3YWl0IGludm9rZUFzeW5jKHRoaXMuaW5pdGlhbGl6ZUF1dGhvcml6YXRpb25SZXF1ZXN0LmJpbmQodGhpcyksIFBlcmZvcm1hbmNlRXZlbnRzLlN0YW5kYXJkSW50ZXJhY3Rpb25DbGllbnRJbml0aWFsaXplQXV0aG9yaXphdGlvblJlcXVlc3QsIHRoaXMubG9nZ2VyLCB0aGlzLnBlcmZvcm1hbmNlQ2xpZW50LCByZXF1ZXN0LmNvcnJlbGF0aW9uSWQpKGlucHV0UmVxdWVzdCwgSW50ZXJhY3Rpb25UeXBlLlNpbGVudCk7XHJcbiAgICAgICAgICAgIHJldHVybiBhd2FpdCBpbnZva2VBc3luYyh0aGlzLnNpbGVudFRva2VuSGVscGVyLmJpbmQodGhpcyksIFBlcmZvcm1hbmNlRXZlbnRzLlNpbGVudElmcmFtZUNsaWVudFRva2VuSGVscGVyLCB0aGlzLmxvZ2dlciwgdGhpcy5wZXJmb3JtYW5jZUNsaWVudCwgdGhpcy5jb3JyZWxhdGlvbklkKShhdXRoQ2xpZW50LCByZXRyeVNpbGVudFJlcXVlc3QpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIC8qKlxyXG4gICAgICogQ3VycmVudGx5IFVuc3VwcG9ydGVkXHJcbiAgICAgKi9cclxuICAgIGxvZ291dCgpIHtcclxuICAgICAgICAvLyBTeW5jaHJvbm91cyBzbyB3ZSBtdXN0IHJlamVjdFxyXG4gICAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdChjcmVhdGVCcm93c2VyQXV0aEVycm9yKHNpbGVudExvZ291dFVuc3VwcG9ydGVkKSk7XHJcbiAgICB9XHJcbiAgICAvKipcclxuICAgICAqIEhlbHBlciB3aGljaCBhY3F1aXJlcyBhbiBhdXRob3JpemF0aW9uIGNvZGUgc2lsZW50bHkgdXNpbmcgYSBoaWRkZW4gaWZyYW1lIGZyb20gZ2l2ZW4gdXJsXHJcbiAgICAgKiB1c2luZyB0aGUgc2NvcGVzIHJlcXVlc3RlZCBhcyBwYXJ0IG9mIHRoZSBpZCwgYW5kIGV4Y2hhbmdlcyB0aGUgY29kZSBmb3IgYSBzZXQgb2YgT0F1dGggdG9rZW5zLlxyXG4gICAgICogQHBhcmFtIG5hdmlnYXRlVXJsXHJcbiAgICAgKiBAcGFyYW0gdXNlclJlcXVlc3RTY29wZXNcclxuICAgICAqL1xyXG4gICAgYXN5bmMgc2lsZW50VG9rZW5IZWxwZXIoYXV0aENsaWVudCwgc2lsZW50UmVxdWVzdCkge1xyXG4gICAgICAgIGNvbnN0IGNvcnJlbGF0aW9uSWQgPSBzaWxlbnRSZXF1ZXN0LmNvcnJlbGF0aW9uSWQ7XHJcbiAgICAgICAgdGhpcy5wZXJmb3JtYW5jZUNsaWVudC5hZGRRdWV1ZU1lYXN1cmVtZW50KFBlcmZvcm1hbmNlRXZlbnRzLlNpbGVudElmcmFtZUNsaWVudFRva2VuSGVscGVyLCBjb3JyZWxhdGlvbklkKTtcclxuICAgICAgICAvLyBDcmVhdGUgYXV0aCBjb2RlIHJlcXVlc3QgYW5kIGdlbmVyYXRlIFBLQ0UgcGFyYW1zXHJcbiAgICAgICAgY29uc3QgYXV0aENvZGVSZXF1ZXN0ID0gYXdhaXQgaW52b2tlQXN5bmModGhpcy5pbml0aWFsaXplQXV0aG9yaXphdGlvbkNvZGVSZXF1ZXN0LmJpbmQodGhpcyksIFBlcmZvcm1hbmNlRXZlbnRzLlN0YW5kYXJkSW50ZXJhY3Rpb25DbGllbnRJbml0aWFsaXplQXV0aG9yaXphdGlvbkNvZGVSZXF1ZXN0LCB0aGlzLmxvZ2dlciwgdGhpcy5wZXJmb3JtYW5jZUNsaWVudCwgY29ycmVsYXRpb25JZCkoc2lsZW50UmVxdWVzdCk7XHJcbiAgICAgICAgLy8gQ3JlYXRlIGF1dGhvcml6ZSByZXF1ZXN0IHVybFxyXG4gICAgICAgIGNvbnN0IG5hdmlnYXRlVXJsID0gYXdhaXQgaW52b2tlQXN5bmMoYXV0aENsaWVudC5nZXRBdXRoQ29kZVVybC5iaW5kKGF1dGhDbGllbnQpLCBQZXJmb3JtYW5jZUV2ZW50cy5HZXRBdXRoQ29kZVVybCwgdGhpcy5sb2dnZXIsIHRoaXMucGVyZm9ybWFuY2VDbGllbnQsIGNvcnJlbGF0aW9uSWQpKHtcclxuICAgICAgICAgICAgLi4uc2lsZW50UmVxdWVzdCxcclxuICAgICAgICAgICAgbmF0aXZlQnJva2VyOiBOYXRpdmVNZXNzYWdlSGFuZGxlci5pc05hdGl2ZUF2YWlsYWJsZSh0aGlzLmNvbmZpZywgdGhpcy5sb2dnZXIsIHRoaXMubmF0aXZlTWVzc2FnZUhhbmRsZXIsIHNpbGVudFJlcXVlc3QuYXV0aGVudGljYXRpb25TY2hlbWUpLFxyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIC8vIENyZWF0ZSBzaWxlbnQgaGFuZGxlclxyXG4gICAgICAgIGNvbnN0IGludGVyYWN0aW9uSGFuZGxlciA9IG5ldyBJbnRlcmFjdGlvbkhhbmRsZXIoYXV0aENsaWVudCwgdGhpcy5icm93c2VyU3RvcmFnZSwgYXV0aENvZGVSZXF1ZXN0LCB0aGlzLmxvZ2dlciwgdGhpcy5wZXJmb3JtYW5jZUNsaWVudCk7XHJcbiAgICAgICAgLy8gR2V0IHRoZSBmcmFtZSBoYW5kbGUgZm9yIHRoZSBzaWxlbnQgcmVxdWVzdFxyXG4gICAgICAgIGNvbnN0IG1zYWxGcmFtZSA9IGF3YWl0IGludm9rZUFzeW5jKGluaXRpYXRlQXV0aFJlcXVlc3QsIFBlcmZvcm1hbmNlRXZlbnRzLlNpbGVudEhhbmRsZXJJbml0aWF0ZUF1dGhSZXF1ZXN0LCB0aGlzLmxvZ2dlciwgdGhpcy5wZXJmb3JtYW5jZUNsaWVudCwgY29ycmVsYXRpb25JZCkobmF2aWdhdGVVcmwsIHRoaXMucGVyZm9ybWFuY2VDbGllbnQsIHRoaXMubG9nZ2VyLCBjb3JyZWxhdGlvbklkLCB0aGlzLmNvbmZpZy5zeXN0ZW0ubmF2aWdhdGVGcmFtZVdhaXQpO1xyXG4gICAgICAgIGNvbnN0IHJlc3BvbnNlVHlwZSA9IHRoaXMuY29uZmlnLmF1dGguT0lEQ09wdGlvbnMuc2VydmVyUmVzcG9uc2VUeXBlO1xyXG4gICAgICAgIC8vIE1vbml0b3IgdGhlIHdpbmRvdyBmb3IgdGhlIGhhc2guIFJldHVybiB0aGUgc3RyaW5nIHZhbHVlIGFuZCBjbG9zZSB0aGUgcG9wdXAgd2hlbiB0aGUgaGFzaCBpcyByZWNlaXZlZC4gRGVmYXVsdCB0aW1lb3V0IGlzIDYwIHNlY29uZHMuXHJcbiAgICAgICAgY29uc3QgcmVzcG9uc2VTdHJpbmcgPSBhd2FpdCBpbnZva2VBc3luYyhtb25pdG9ySWZyYW1lRm9ySGFzaCwgUGVyZm9ybWFuY2VFdmVudHMuU2lsZW50SGFuZGxlck1vbml0b3JJZnJhbWVGb3JIYXNoLCB0aGlzLmxvZ2dlciwgdGhpcy5wZXJmb3JtYW5jZUNsaWVudCwgY29ycmVsYXRpb25JZCkobXNhbEZyYW1lLCB0aGlzLmNvbmZpZy5zeXN0ZW0uaWZyYW1lSGFzaFRpbWVvdXQsIHRoaXMuY29uZmlnLnN5c3RlbS5wb2xsSW50ZXJ2YWxNaWxsaXNlY29uZHMsIHRoaXMucGVyZm9ybWFuY2VDbGllbnQsIHRoaXMubG9nZ2VyLCBjb3JyZWxhdGlvbklkLCByZXNwb25zZVR5cGUpO1xyXG4gICAgICAgIGNvbnN0IHNlcnZlclBhcmFtcyA9IGludm9rZShkZXNlcmlhbGl6ZVJlc3BvbnNlLCBQZXJmb3JtYW5jZUV2ZW50cy5EZXNlcmlhbGl6ZVJlc3BvbnNlLCB0aGlzLmxvZ2dlciwgdGhpcy5wZXJmb3JtYW5jZUNsaWVudCwgdGhpcy5jb3JyZWxhdGlvbklkKShyZXNwb25zZVN0cmluZywgcmVzcG9uc2VUeXBlLCB0aGlzLmxvZ2dlcik7XHJcbiAgICAgICAgaWYgKHNlcnZlclBhcmFtcy5hY2NvdW50SWQpIHtcclxuICAgICAgICAgICAgdGhpcy5sb2dnZXIudmVyYm9zZShcIkFjY291bnQgaWQgZm91bmQgaW4gaGFzaCwgY2FsbGluZyBXQU0gZm9yIHRva2VuXCIpO1xyXG4gICAgICAgICAgICBpZiAoIXRoaXMubmF0aXZlTWVzc2FnZUhhbmRsZXIpIHtcclxuICAgICAgICAgICAgICAgIHRocm93IGNyZWF0ZUJyb3dzZXJBdXRoRXJyb3IobmF0aXZlQ29ubmVjdGlvbk5vdEVzdGFibGlzaGVkKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBjb25zdCBuYXRpdmVJbnRlcmFjdGlvbkNsaWVudCA9IG5ldyBOYXRpdmVJbnRlcmFjdGlvbkNsaWVudCh0aGlzLmNvbmZpZywgdGhpcy5icm93c2VyU3RvcmFnZSwgdGhpcy5icm93c2VyQ3J5cHRvLCB0aGlzLmxvZ2dlciwgdGhpcy5ldmVudEhhbmRsZXIsIHRoaXMubmF2aWdhdGlvbkNsaWVudCwgdGhpcy5hcGlJZCwgdGhpcy5wZXJmb3JtYW5jZUNsaWVudCwgdGhpcy5uYXRpdmVNZXNzYWdlSGFuZGxlciwgc2VydmVyUGFyYW1zLmFjY291bnRJZCwgdGhpcy5icm93c2VyU3RvcmFnZSwgY29ycmVsYXRpb25JZCk7XHJcbiAgICAgICAgICAgIGNvbnN0IHsgdXNlclJlcXVlc3RTdGF0ZSB9ID0gUHJvdG9jb2xVdGlscy5wYXJzZVJlcXVlc3RTdGF0ZSh0aGlzLmJyb3dzZXJDcnlwdG8sIHNpbGVudFJlcXVlc3Quc3RhdGUpO1xyXG4gICAgICAgICAgICByZXR1cm4gaW52b2tlQXN5bmMobmF0aXZlSW50ZXJhY3Rpb25DbGllbnQuYWNxdWlyZVRva2VuLmJpbmQobmF0aXZlSW50ZXJhY3Rpb25DbGllbnQpLCBQZXJmb3JtYW5jZUV2ZW50cy5OYXRpdmVJbnRlcmFjdGlvbkNsaWVudEFjcXVpcmVUb2tlbiwgdGhpcy5sb2dnZXIsIHRoaXMucGVyZm9ybWFuY2VDbGllbnQsIGNvcnJlbGF0aW9uSWQpKHtcclxuICAgICAgICAgICAgICAgIC4uLnNpbGVudFJlcXVlc3QsXHJcbiAgICAgICAgICAgICAgICBzdGF0ZTogdXNlclJlcXVlc3RTdGF0ZSxcclxuICAgICAgICAgICAgICAgIHByb21wdDogc2lsZW50UmVxdWVzdC5wcm9tcHQgfHwgUHJvbXB0VmFsdWUuTk9ORSxcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIC8vIEhhbmRsZSByZXNwb25zZSBmcm9tIGhhc2ggc3RyaW5nXHJcbiAgICAgICAgcmV0dXJuIGludm9rZUFzeW5jKGludGVyYWN0aW9uSGFuZGxlci5oYW5kbGVDb2RlUmVzcG9uc2UuYmluZChpbnRlcmFjdGlvbkhhbmRsZXIpLCBQZXJmb3JtYW5jZUV2ZW50cy5IYW5kbGVDb2RlUmVzcG9uc2UsIHRoaXMubG9nZ2VyLCB0aGlzLnBlcmZvcm1hbmNlQ2xpZW50LCBjb3JyZWxhdGlvbklkKShzZXJ2ZXJQYXJhbXMsIHNpbGVudFJlcXVlc3QpO1xyXG4gICAgfVxyXG59XG5cbmV4cG9ydCB7IFNpbGVudElmcmFtZUNsaWVudCB9O1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9U2lsZW50SWZyYW1lQ2xpZW50Lm1qcy5tYXBcbiIsIi8qISBAYXp1cmUvbXNhbC1icm93c2VyIHYzLjI4LjEgMjAyNS0wMS0xNCAqL1xuJ3VzZSBzdHJpY3QnO1xuaW1wb3J0IHsgU3RhbmRhcmRJbnRlcmFjdGlvbkNsaWVudCB9IGZyb20gJy4vU3RhbmRhcmRJbnRlcmFjdGlvbkNsaWVudC5tanMnO1xuaW1wb3J0IHsgUGVyZm9ybWFuY2VFdmVudHMsIGludm9rZUFzeW5jLCBSZWZyZXNoVG9rZW5DbGllbnQgfSBmcm9tICdAYXp1cmUvbXNhbC1jb21tb24vYnJvd3Nlcic7XG5pbXBvcnQgeyBBcGlJZCB9IGZyb20gJy4uL3V0aWxzL0Jyb3dzZXJDb25zdGFudHMubWpzJztcbmltcG9ydCB7IGNyZWF0ZUJyb3dzZXJBdXRoRXJyb3IgfSBmcm9tICcuLi9lcnJvci9Ccm93c2VyQXV0aEVycm9yLm1qcyc7XG5pbXBvcnQgeyBpbml0aWFsaXplQmFzZVJlcXVlc3QgfSBmcm9tICcuLi9yZXF1ZXN0L1JlcXVlc3RIZWxwZXJzLm1qcyc7XG5pbXBvcnQgeyBzaWxlbnRMb2dvdXRVbnN1cHBvcnRlZCB9IGZyb20gJy4uL2Vycm9yL0Jyb3dzZXJBdXRoRXJyb3JDb2Rlcy5tanMnO1xuXG4vKlxyXG4gKiBDb3B5cmlnaHQgKGMpIE1pY3Jvc29mdCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cclxuICogTGljZW5zZWQgdW5kZXIgdGhlIE1JVCBMaWNlbnNlLlxyXG4gKi9cclxuY2xhc3MgU2lsZW50UmVmcmVzaENsaWVudCBleHRlbmRzIFN0YW5kYXJkSW50ZXJhY3Rpb25DbGllbnQge1xyXG4gICAgLyoqXHJcbiAgICAgKiBFeGNoYW5nZXMgdGhlIHJlZnJlc2ggdG9rZW4gZm9yIG5ldyB0b2tlbnNcclxuICAgICAqIEBwYXJhbSByZXF1ZXN0XHJcbiAgICAgKi9cclxuICAgIGFzeW5jIGFjcXVpcmVUb2tlbihyZXF1ZXN0KSB7XHJcbiAgICAgICAgdGhpcy5wZXJmb3JtYW5jZUNsaWVudC5hZGRRdWV1ZU1lYXN1cmVtZW50KFBlcmZvcm1hbmNlRXZlbnRzLlNpbGVudFJlZnJlc2hDbGllbnRBY3F1aXJlVG9rZW4sIHJlcXVlc3QuY29ycmVsYXRpb25JZCk7XHJcbiAgICAgICAgY29uc3QgYmFzZVJlcXVlc3QgPSBhd2FpdCBpbnZva2VBc3luYyhpbml0aWFsaXplQmFzZVJlcXVlc3QsIFBlcmZvcm1hbmNlRXZlbnRzLkluaXRpYWxpemVCYXNlUmVxdWVzdCwgdGhpcy5sb2dnZXIsIHRoaXMucGVyZm9ybWFuY2VDbGllbnQsIHJlcXVlc3QuY29ycmVsYXRpb25JZCkocmVxdWVzdCwgdGhpcy5jb25maWcsIHRoaXMucGVyZm9ybWFuY2VDbGllbnQsIHRoaXMubG9nZ2VyKTtcclxuICAgICAgICBjb25zdCBzaWxlbnRSZXF1ZXN0ID0ge1xyXG4gICAgICAgICAgICAuLi5yZXF1ZXN0LFxyXG4gICAgICAgICAgICAuLi5iYXNlUmVxdWVzdCxcclxuICAgICAgICB9O1xyXG4gICAgICAgIGlmIChyZXF1ZXN0LnJlZGlyZWN0VXJpKSB7XHJcbiAgICAgICAgICAgIC8vIE1ha2Ugc3VyZSBhbnkgcGFzc2VkIHJlZGlyZWN0VXJpIGlzIGNvbnZlcnRlZCB0byBhbiBhYnNvbHV0ZSBVUkwgLSByZWRpcmVjdFVyaSBpcyBub3QgYSByZXF1aXJlZCBwYXJhbWV0ZXIgZm9yIHJlZnJlc2ggdG9rZW4gcmVkZW1wdGlvbiBzbyBvbmx5IGluY2x1ZGUgaWYgZXhwbGljaXRseSBwcm92aWRlZFxyXG4gICAgICAgICAgICBzaWxlbnRSZXF1ZXN0LnJlZGlyZWN0VXJpID0gdGhpcy5nZXRSZWRpcmVjdFVyaShyZXF1ZXN0LnJlZGlyZWN0VXJpKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgY29uc3Qgc2VydmVyVGVsZW1ldHJ5TWFuYWdlciA9IHRoaXMuaW5pdGlhbGl6ZVNlcnZlclRlbGVtZXRyeU1hbmFnZXIoQXBpSWQuYWNxdWlyZVRva2VuU2lsZW50X3NpbGVudEZsb3cpO1xyXG4gICAgICAgIGNvbnN0IHJlZnJlc2hUb2tlbkNsaWVudCA9IGF3YWl0IHRoaXMuY3JlYXRlUmVmcmVzaFRva2VuQ2xpZW50KHtcclxuICAgICAgICAgICAgc2VydmVyVGVsZW1ldHJ5TWFuYWdlcixcclxuICAgICAgICAgICAgYXV0aG9yaXR5VXJsOiBzaWxlbnRSZXF1ZXN0LmF1dGhvcml0eSxcclxuICAgICAgICAgICAgYXp1cmVDbG91ZE9wdGlvbnM6IHNpbGVudFJlcXVlc3QuYXp1cmVDbG91ZE9wdGlvbnMsXHJcbiAgICAgICAgICAgIGFjY291bnQ6IHNpbGVudFJlcXVlc3QuYWNjb3VudCxcclxuICAgICAgICB9KTtcclxuICAgICAgICAvLyBTZW5kIHJlcXVlc3QgdG8gcmVuZXcgdG9rZW4uIEF1dGggbW9kdWxlIHdpbGwgdGhyb3cgZXJyb3JzIGlmIHRva2VuIGNhbm5vdCBiZSByZW5ld2VkLlxyXG4gICAgICAgIHJldHVybiBpbnZva2VBc3luYyhyZWZyZXNoVG9rZW5DbGllbnQuYWNxdWlyZVRva2VuQnlSZWZyZXNoVG9rZW4uYmluZChyZWZyZXNoVG9rZW5DbGllbnQpLCBQZXJmb3JtYW5jZUV2ZW50cy5SZWZyZXNoVG9rZW5DbGllbnRBY3F1aXJlVG9rZW5CeVJlZnJlc2hUb2tlbiwgdGhpcy5sb2dnZXIsIHRoaXMucGVyZm9ybWFuY2VDbGllbnQsIHJlcXVlc3QuY29ycmVsYXRpb25JZCkoc2lsZW50UmVxdWVzdCkuY2F0Y2goKGUpID0+IHtcclxuICAgICAgICAgICAgZS5zZXRDb3JyZWxhdGlvbklkKHRoaXMuY29ycmVsYXRpb25JZCk7XHJcbiAgICAgICAgICAgIHNlcnZlclRlbGVtZXRyeU1hbmFnZXIuY2FjaGVGYWlsZWRSZXF1ZXN0KGUpO1xyXG4gICAgICAgICAgICB0aHJvdyBlO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG4gICAgLyoqXHJcbiAgICAgKiBDdXJyZW50bHkgVW5zdXBwb3J0ZWRcclxuICAgICAqL1xyXG4gICAgbG9nb3V0KCkge1xyXG4gICAgICAgIC8vIFN5bmNocm9ub3VzIHNvIHdlIG11c3QgcmVqZWN0XHJcbiAgICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KGNyZWF0ZUJyb3dzZXJBdXRoRXJyb3Ioc2lsZW50TG9nb3V0VW5zdXBwb3J0ZWQpKTtcclxuICAgIH1cclxuICAgIC8qKlxyXG4gICAgICogQ3JlYXRlcyBhIFJlZnJlc2ggQ2xpZW50IHdpdGggdGhlIGdpdmVuIGF1dGhvcml0eSwgb3IgdGhlIGRlZmF1bHQgYXV0aG9yaXR5LlxyXG4gICAgICogQHBhcmFtIHBhcmFtcyB7XHJcbiAgICAgKiAgICAgICAgIHNlcnZlclRlbGVtZXRyeU1hbmFnZXI6IFNlcnZlclRlbGVtZXRyeU1hbmFnZXI7XHJcbiAgICAgKiAgICAgICAgIGF1dGhvcml0eVVybD86IHN0cmluZztcclxuICAgICAqICAgICAgICAgYXp1cmVDbG91ZE9wdGlvbnM/OiBBenVyZUNsb3VkT3B0aW9ucztcclxuICAgICAqICAgICAgICAgZXh0cmFRdWVyeVBhcmFtcz86IFN0cmluZ0RpY3Q7XHJcbiAgICAgKiAgICAgICAgIGFjY291bnQ/OiBBY2NvdW50SW5mbztcclxuICAgICAqICAgICAgICB9XHJcbiAgICAgKi9cclxuICAgIGFzeW5jIGNyZWF0ZVJlZnJlc2hUb2tlbkNsaWVudChwYXJhbXMpIHtcclxuICAgICAgICAvLyBDcmVhdGUgYXV0aCBtb2R1bGUuXHJcbiAgICAgICAgY29uc3QgY2xpZW50Q29uZmlnID0gYXdhaXQgaW52b2tlQXN5bmModGhpcy5nZXRDbGllbnRDb25maWd1cmF0aW9uLmJpbmQodGhpcyksIFBlcmZvcm1hbmNlRXZlbnRzLlN0YW5kYXJkSW50ZXJhY3Rpb25DbGllbnRHZXRDbGllbnRDb25maWd1cmF0aW9uLCB0aGlzLmxvZ2dlciwgdGhpcy5wZXJmb3JtYW5jZUNsaWVudCwgdGhpcy5jb3JyZWxhdGlvbklkKSh7XHJcbiAgICAgICAgICAgIHNlcnZlclRlbGVtZXRyeU1hbmFnZXI6IHBhcmFtcy5zZXJ2ZXJUZWxlbWV0cnlNYW5hZ2VyLFxyXG4gICAgICAgICAgICByZXF1ZXN0QXV0aG9yaXR5OiBwYXJhbXMuYXV0aG9yaXR5VXJsLFxyXG4gICAgICAgICAgICByZXF1ZXN0QXp1cmVDbG91ZE9wdGlvbnM6IHBhcmFtcy5henVyZUNsb3VkT3B0aW9ucyxcclxuICAgICAgICAgICAgcmVxdWVzdEV4dHJhUXVlcnlQYXJhbWV0ZXJzOiBwYXJhbXMuZXh0cmFRdWVyeVBhcmFtZXRlcnMsXHJcbiAgICAgICAgICAgIGFjY291bnQ6IHBhcmFtcy5hY2NvdW50LFxyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIHJldHVybiBuZXcgUmVmcmVzaFRva2VuQ2xpZW50KGNsaWVudENvbmZpZywgdGhpcy5wZXJmb3JtYW5jZUNsaWVudCk7XHJcbiAgICB9XHJcbn1cblxuZXhwb3J0IHsgU2lsZW50UmVmcmVzaENsaWVudCB9O1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9U2lsZW50UmVmcmVzaENsaWVudC5tanMubWFwXG4iLCIvKiEgQGF6dXJlL21zYWwtYnJvd3NlciB2My4yOC4xIDIwMjUtMDEtMTQgKi9cbid1c2Ugc3RyaWN0JztcbmltcG9ydCB7IEF1dGhUb2tlbiwgQXV0aG9yaXR5LCBBY2NvdW50RW50aXR5LCBidWlsZEFjY291bnRUb0NhY2hlLCBDYWNoZUhlbHBlcnMsIFNjb3BlU2V0IH0gZnJvbSAnQGF6dXJlL21zYWwtY29tbW9uL2Jyb3dzZXInO1xuaW1wb3J0IHsgY3JlYXRlQnJvd3NlckF1dGhFcnJvciB9IGZyb20gJy4uL2Vycm9yL0Jyb3dzZXJBdXRoRXJyb3IubWpzJztcbmltcG9ydCB7IGJhc2U2NERlY29kZSB9IGZyb20gJy4uL2VuY29kZS9CYXNlNjREZWNvZGUubWpzJztcbmltcG9ydCB7IGNyZWF0ZU5ld0d1aWQgfSBmcm9tICcuLi9jcnlwdG8vQnJvd3NlckNyeXB0by5tanMnO1xuaW1wb3J0IHsgbm9uQnJvd3NlckVudmlyb25tZW50LCB1bmFibGVUb0xvYWRUb2tlbiB9IGZyb20gJy4uL2Vycm9yL0Jyb3dzZXJBdXRoRXJyb3JDb2Rlcy5tanMnO1xuXG4vKlxyXG4gKiBDb3B5cmlnaHQgKGMpIE1pY3Jvc29mdCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cclxuICogTGljZW5zZWQgdW5kZXIgdGhlIE1JVCBMaWNlbnNlLlxyXG4gKi9cclxuLyoqXHJcbiAqIFRva2VuIGNhY2hlIG1hbmFnZXJcclxuICovXHJcbmNsYXNzIFRva2VuQ2FjaGUge1xyXG4gICAgY29uc3RydWN0b3IoY29uZmlndXJhdGlvbiwgc3RvcmFnZSwgbG9nZ2VyLCBjcnlwdG9PYmopIHtcclxuICAgICAgICB0aGlzLmlzQnJvd3NlckVudmlyb25tZW50ID0gdHlwZW9mIHdpbmRvdyAhPT0gXCJ1bmRlZmluZWRcIjtcclxuICAgICAgICB0aGlzLmNvbmZpZyA9IGNvbmZpZ3VyYXRpb247XHJcbiAgICAgICAgdGhpcy5zdG9yYWdlID0gc3RvcmFnZTtcclxuICAgICAgICB0aGlzLmxvZ2dlciA9IGxvZ2dlcjtcclxuICAgICAgICB0aGlzLmNyeXB0b09iaiA9IGNyeXB0b09iajtcclxuICAgIH1cclxuICAgIC8vIE1vdmUgZ2V0QWxsQWNjb3VudHMgaGVyZSBhbmQgY2FjaGUgdXRpbGl0eSBBUElzXHJcbiAgICAvKipcclxuICAgICAqIEFQSSB0byBsb2FkIHRva2VucyB0byBtc2FsLWJyb3dzZXIgY2FjaGUuXHJcbiAgICAgKiBAcGFyYW0gcmVxdWVzdFxyXG4gICAgICogQHBhcmFtIHJlc3BvbnNlXHJcbiAgICAgKiBAcGFyYW0gb3B0aW9uc1xyXG4gICAgICogQHJldHVybnMgYEF1dGhlbnRpY2F0aW9uUmVzdWx0YCBmb3IgdGhlIHJlc3BvbnNlIHRoYXQgd2FzIGxvYWRlZC5cclxuICAgICAqL1xyXG4gICAgbG9hZEV4dGVybmFsVG9rZW5zKHJlcXVlc3QsIHJlc3BvbnNlLCBvcHRpb25zKSB7XHJcbiAgICAgICAgaWYgKCF0aGlzLmlzQnJvd3NlckVudmlyb25tZW50KSB7XHJcbiAgICAgICAgICAgIHRocm93IGNyZWF0ZUJyb3dzZXJBdXRoRXJyb3Iobm9uQnJvd3NlckVudmlyb25tZW50KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgY29uc3QgaWRUb2tlbkNsYWltcyA9IHJlc3BvbnNlLmlkX3Rva2VuXHJcbiAgICAgICAgICAgID8gQXV0aFRva2VuLmV4dHJhY3RUb2tlbkNsYWltcyhyZXNwb25zZS5pZF90b2tlbiwgYmFzZTY0RGVjb2RlKVxyXG4gICAgICAgICAgICA6IHVuZGVmaW5lZDtcclxuICAgICAgICBjb25zdCBhdXRob3JpdHlPcHRpb25zID0ge1xyXG4gICAgICAgICAgICBwcm90b2NvbE1vZGU6IHRoaXMuY29uZmlnLmF1dGgucHJvdG9jb2xNb2RlLFxyXG4gICAgICAgICAgICBrbm93bkF1dGhvcml0aWVzOiB0aGlzLmNvbmZpZy5hdXRoLmtub3duQXV0aG9yaXRpZXMsXHJcbiAgICAgICAgICAgIGNsb3VkRGlzY292ZXJ5TWV0YWRhdGE6IHRoaXMuY29uZmlnLmF1dGguY2xvdWREaXNjb3ZlcnlNZXRhZGF0YSxcclxuICAgICAgICAgICAgYXV0aG9yaXR5TWV0YWRhdGE6IHRoaXMuY29uZmlnLmF1dGguYXV0aG9yaXR5TWV0YWRhdGEsXHJcbiAgICAgICAgICAgIHNraXBBdXRob3JpdHlNZXRhZGF0YUNhY2hlOiB0aGlzLmNvbmZpZy5hdXRoLnNraXBBdXRob3JpdHlNZXRhZGF0YUNhY2hlLFxyXG4gICAgICAgIH07XHJcbiAgICAgICAgY29uc3QgYXV0aG9yaXR5ID0gcmVxdWVzdC5hdXRob3JpdHlcclxuICAgICAgICAgICAgPyBuZXcgQXV0aG9yaXR5KEF1dGhvcml0eS5nZW5lcmF0ZUF1dGhvcml0eShyZXF1ZXN0LmF1dGhvcml0eSwgcmVxdWVzdC5henVyZUNsb3VkT3B0aW9ucyksIHRoaXMuY29uZmlnLnN5c3RlbS5uZXR3b3JrQ2xpZW50LCB0aGlzLnN0b3JhZ2UsIGF1dGhvcml0eU9wdGlvbnMsIHRoaXMubG9nZ2VyLCByZXF1ZXN0LmNvcnJlbGF0aW9uSWQgfHwgY3JlYXRlTmV3R3VpZCgpKVxyXG4gICAgICAgICAgICA6IHVuZGVmaW5lZDtcclxuICAgICAgICBjb25zdCBjYWNoZVJlY29yZEFjY291bnQgPSB0aGlzLmxvYWRBY2NvdW50KHJlcXVlc3QsIG9wdGlvbnMuY2xpZW50SW5mbyB8fCByZXNwb25zZS5jbGllbnRfaW5mbyB8fCBcIlwiLCBpZFRva2VuQ2xhaW1zLCBhdXRob3JpdHkpO1xyXG4gICAgICAgIGNvbnN0IGlkVG9rZW4gPSB0aGlzLmxvYWRJZFRva2VuKHJlc3BvbnNlLCBjYWNoZVJlY29yZEFjY291bnQuaG9tZUFjY291bnRJZCwgY2FjaGVSZWNvcmRBY2NvdW50LmVudmlyb25tZW50LCBjYWNoZVJlY29yZEFjY291bnQucmVhbG0pO1xyXG4gICAgICAgIGNvbnN0IGFjY2Vzc1Rva2VuID0gdGhpcy5sb2FkQWNjZXNzVG9rZW4ocmVxdWVzdCwgcmVzcG9uc2UsIGNhY2hlUmVjb3JkQWNjb3VudC5ob21lQWNjb3VudElkLCBjYWNoZVJlY29yZEFjY291bnQuZW52aXJvbm1lbnQsIGNhY2hlUmVjb3JkQWNjb3VudC5yZWFsbSwgb3B0aW9ucyk7XHJcbiAgICAgICAgY29uc3QgcmVmcmVzaFRva2VuID0gdGhpcy5sb2FkUmVmcmVzaFRva2VuKHJlc3BvbnNlLCBjYWNoZVJlY29yZEFjY291bnQuaG9tZUFjY291bnRJZCwgY2FjaGVSZWNvcmRBY2NvdW50LmVudmlyb25tZW50KTtcclxuICAgICAgICByZXR1cm4gdGhpcy5nZW5lcmF0ZUF1dGhlbnRpY2F0aW9uUmVzdWx0KHJlcXVlc3QsIHtcclxuICAgICAgICAgICAgYWNjb3VudDogY2FjaGVSZWNvcmRBY2NvdW50LFxyXG4gICAgICAgICAgICBpZFRva2VuLFxyXG4gICAgICAgICAgICBhY2Nlc3NUb2tlbixcclxuICAgICAgICAgICAgcmVmcmVzaFRva2VuLFxyXG4gICAgICAgIH0sIGlkVG9rZW5DbGFpbXMsIGF1dGhvcml0eSk7XHJcbiAgICB9XHJcbiAgICAvKipcclxuICAgICAqIEhlbHBlciBmdW5jdGlvbiB0byBsb2FkIGFjY291bnQgdG8gbXNhbC1icm93c2VyIGNhY2hlXHJcbiAgICAgKiBAcGFyYW0gaWRUb2tlblxyXG4gICAgICogQHBhcmFtIGVudmlyb25tZW50XHJcbiAgICAgKiBAcGFyYW0gY2xpZW50SW5mb1xyXG4gICAgICogQHBhcmFtIGF1dGhvcml0eVR5cGVcclxuICAgICAqIEBwYXJhbSByZXF1ZXN0SG9tZUFjY291bnRJZFxyXG4gICAgICogQHJldHVybnMgYEFjY291bnRFbnRpdHlgXHJcbiAgICAgKi9cclxuICAgIGxvYWRBY2NvdW50KHJlcXVlc3QsIGNsaWVudEluZm8sIGlkVG9rZW5DbGFpbXMsIGF1dGhvcml0eSkge1xyXG4gICAgICAgIHRoaXMubG9nZ2VyLnZlcmJvc2UoXCJUb2tlbkNhY2hlIC0gbG9hZGluZyBhY2NvdW50XCIpO1xyXG4gICAgICAgIGlmIChyZXF1ZXN0LmFjY291bnQpIHtcclxuICAgICAgICAgICAgY29uc3QgYWNjb3VudEVudGl0eSA9IEFjY291bnRFbnRpdHkuY3JlYXRlRnJvbUFjY291bnRJbmZvKHJlcXVlc3QuYWNjb3VudCk7XHJcbiAgICAgICAgICAgIHRoaXMuc3RvcmFnZS5zZXRBY2NvdW50KGFjY291bnRFbnRpdHkpO1xyXG4gICAgICAgICAgICByZXR1cm4gYWNjb3VudEVudGl0eTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSBpZiAoIWF1dGhvcml0eSB8fCAoIWNsaWVudEluZm8gJiYgIWlkVG9rZW5DbGFpbXMpKSB7XHJcbiAgICAgICAgICAgIHRoaXMubG9nZ2VyLmVycm9yKFwiVG9rZW5DYWNoZSAtIGlmIGFuIGFjY291bnQgaXMgbm90IHByb3ZpZGVkIG9uIHRoZSByZXF1ZXN0LCBhdXRob3JpdHkgYW5kIGVpdGhlciBjbGllbnRJbmZvIG9yIGlkVG9rZW4gbXVzdCBiZSBwcm92aWRlZCBpbnN0ZWFkLlwiKTtcclxuICAgICAgICAgICAgdGhyb3cgY3JlYXRlQnJvd3NlckF1dGhFcnJvcih1bmFibGVUb0xvYWRUb2tlbik7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNvbnN0IGhvbWVBY2NvdW50SWQgPSBBY2NvdW50RW50aXR5LmdlbmVyYXRlSG9tZUFjY291bnRJZChjbGllbnRJbmZvLCBhdXRob3JpdHkuYXV0aG9yaXR5VHlwZSwgdGhpcy5sb2dnZXIsIHRoaXMuY3J5cHRvT2JqLCBpZFRva2VuQ2xhaW1zKTtcclxuICAgICAgICBjb25zdCBjbGFpbXNUZW5hbnRJZCA9IGlkVG9rZW5DbGFpbXM/LnRpZDtcclxuICAgICAgICBjb25zdCBjYWNoZWRBY2NvdW50ID0gYnVpbGRBY2NvdW50VG9DYWNoZSh0aGlzLnN0b3JhZ2UsIGF1dGhvcml0eSwgaG9tZUFjY291bnRJZCwgYmFzZTY0RGVjb2RlLCBpZFRva2VuQ2xhaW1zLCBjbGllbnRJbmZvLCBhdXRob3JpdHkuaG9zdG5hbWVBbmRQb3J0LCBjbGFpbXNUZW5hbnRJZCwgdW5kZWZpbmVkLCAvLyBhdXRoQ29kZVBheWxvYWRcclxuICAgICAgICB1bmRlZmluZWQsIC8vIG5hdGl2ZUFjY291bnRJZFxyXG4gICAgICAgIHRoaXMubG9nZ2VyKTtcclxuICAgICAgICB0aGlzLnN0b3JhZ2Uuc2V0QWNjb3VudChjYWNoZWRBY2NvdW50KTtcclxuICAgICAgICByZXR1cm4gY2FjaGVkQWNjb3VudDtcclxuICAgIH1cclxuICAgIC8qKlxyXG4gICAgICogSGVscGVyIGZ1bmN0aW9uIHRvIGxvYWQgaWQgdG9rZW5zIHRvIG1zYWwtYnJvd3NlciBjYWNoZVxyXG4gICAgICogQHBhcmFtIGlkVG9rZW5cclxuICAgICAqIEBwYXJhbSBob21lQWNjb3VudElkXHJcbiAgICAgKiBAcGFyYW0gZW52aXJvbm1lbnRcclxuICAgICAqIEBwYXJhbSB0ZW5hbnRJZFxyXG4gICAgICogQHJldHVybnMgYElkVG9rZW5FbnRpdHlgXHJcbiAgICAgKi9cclxuICAgIGxvYWRJZFRva2VuKHJlc3BvbnNlLCBob21lQWNjb3VudElkLCBlbnZpcm9ubWVudCwgdGVuYW50SWQpIHtcclxuICAgICAgICBpZiAoIXJlc3BvbnNlLmlkX3Rva2VuKSB7XHJcbiAgICAgICAgICAgIHRoaXMubG9nZ2VyLnZlcmJvc2UoXCJUb2tlbkNhY2hlIC0gbm8gaWQgdG9rZW4gZm91bmQgaW4gcmVzcG9uc2VcIik7XHJcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLmxvZ2dlci52ZXJib3NlKFwiVG9rZW5DYWNoZSAtIGxvYWRpbmcgaWQgdG9rZW5cIik7XHJcbiAgICAgICAgY29uc3QgaWRUb2tlbkVudGl0eSA9IENhY2hlSGVscGVycy5jcmVhdGVJZFRva2VuRW50aXR5KGhvbWVBY2NvdW50SWQsIGVudmlyb25tZW50LCByZXNwb25zZS5pZF90b2tlbiwgdGhpcy5jb25maWcuYXV0aC5jbGllbnRJZCwgdGVuYW50SWQpO1xyXG4gICAgICAgIHRoaXMuc3RvcmFnZS5zZXRJZFRva2VuQ3JlZGVudGlhbChpZFRva2VuRW50aXR5KTtcclxuICAgICAgICByZXR1cm4gaWRUb2tlbkVudGl0eTtcclxuICAgIH1cclxuICAgIC8qKlxyXG4gICAgICogSGVscGVyIGZ1bmN0aW9uIHRvIGxvYWQgYWNjZXNzIHRva2VucyB0byBtc2FsLWJyb3dzZXIgY2FjaGVcclxuICAgICAqIEBwYXJhbSByZXF1ZXN0XHJcbiAgICAgKiBAcGFyYW0gcmVzcG9uc2VcclxuICAgICAqIEBwYXJhbSBob21lQWNjb3VudElkXHJcbiAgICAgKiBAcGFyYW0gZW52aXJvbm1lbnRcclxuICAgICAqIEBwYXJhbSB0ZW5hbnRJZFxyXG4gICAgICogQHJldHVybnMgYEFjY2Vzc1Rva2VuRW50aXR5YFxyXG4gICAgICovXHJcbiAgICBsb2FkQWNjZXNzVG9rZW4ocmVxdWVzdCwgcmVzcG9uc2UsIGhvbWVBY2NvdW50SWQsIGVudmlyb25tZW50LCB0ZW5hbnRJZCwgb3B0aW9ucykge1xyXG4gICAgICAgIGlmICghcmVzcG9uc2UuYWNjZXNzX3Rva2VuKSB7XHJcbiAgICAgICAgICAgIHRoaXMubG9nZ2VyLnZlcmJvc2UoXCJUb2tlbkNhY2hlIC0gbm8gYWNjZXNzIHRva2VuIGZvdW5kIGluIHJlc3BvbnNlXCIpO1xyXG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSBpZiAoIXJlc3BvbnNlLmV4cGlyZXNfaW4pIHtcclxuICAgICAgICAgICAgdGhpcy5sb2dnZXIuZXJyb3IoXCJUb2tlbkNhY2hlIC0gbm8gZXhwaXJhdGlvbiBzZXQgb24gdGhlIGFjY2VzcyB0b2tlbi4gQ2Fubm90IGFkZCBpdCB0byB0aGUgY2FjaGUuXCIpO1xyXG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSBpZiAoIXJlc3BvbnNlLnNjb3BlICYmXHJcbiAgICAgICAgICAgICghcmVxdWVzdC5zY29wZXMgfHwgIXJlcXVlc3Quc2NvcGVzLmxlbmd0aCkpIHtcclxuICAgICAgICAgICAgdGhpcy5sb2dnZXIuZXJyb3IoXCJUb2tlbkNhY2hlIC0gc2NvcGVzIG5vdCBzcGVjaWZpZWQgaW4gdGhlIHJlcXVlc3Qgb3IgcmVzcG9uc2UuIENhbm5vdCBhZGQgdG9rZW4gdG8gdGhlIGNhY2hlLlwiKTtcclxuICAgICAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMubG9nZ2VyLnZlcmJvc2UoXCJUb2tlbkNhY2hlIC0gbG9hZGluZyBhY2Nlc3MgdG9rZW5cIik7XHJcbiAgICAgICAgY29uc3Qgc2NvcGVzID0gcmVzcG9uc2Uuc2NvcGVcclxuICAgICAgICAgICAgPyBTY29wZVNldC5mcm9tU3RyaW5nKHJlc3BvbnNlLnNjb3BlKVxyXG4gICAgICAgICAgICA6IG5ldyBTY29wZVNldChyZXF1ZXN0LnNjb3Blcyk7XHJcbiAgICAgICAgY29uc3QgZXhwaXJlc09uID0gb3B0aW9ucy5leHBpcmVzT24gfHxcclxuICAgICAgICAgICAgcmVzcG9uc2UuZXhwaXJlc19pbiArIG5ldyBEYXRlKCkuZ2V0VGltZSgpIC8gMTAwMDtcclxuICAgICAgICBjb25zdCBleHRlbmRlZEV4cGlyZXNPbiA9IG9wdGlvbnMuZXh0ZW5kZWRFeHBpcmVzT24gfHxcclxuICAgICAgICAgICAgKHJlc3BvbnNlLmV4dF9leHBpcmVzX2luIHx8IHJlc3BvbnNlLmV4cGlyZXNfaW4pICtcclxuICAgICAgICAgICAgICAgIG5ldyBEYXRlKCkuZ2V0VGltZSgpIC8gMTAwMDtcclxuICAgICAgICBjb25zdCBhY2Nlc3NUb2tlbkVudGl0eSA9IENhY2hlSGVscGVycy5jcmVhdGVBY2Nlc3NUb2tlbkVudGl0eShob21lQWNjb3VudElkLCBlbnZpcm9ubWVudCwgcmVzcG9uc2UuYWNjZXNzX3Rva2VuLCB0aGlzLmNvbmZpZy5hdXRoLmNsaWVudElkLCB0ZW5hbnRJZCwgc2NvcGVzLnByaW50U2NvcGVzKCksIGV4cGlyZXNPbiwgZXh0ZW5kZWRFeHBpcmVzT24sIGJhc2U2NERlY29kZSk7XHJcbiAgICAgICAgdGhpcy5zdG9yYWdlLnNldEFjY2Vzc1Rva2VuQ3JlZGVudGlhbChhY2Nlc3NUb2tlbkVudGl0eSk7XHJcbiAgICAgICAgcmV0dXJuIGFjY2Vzc1Rva2VuRW50aXR5O1xyXG4gICAgfVxyXG4gICAgLyoqXHJcbiAgICAgKiBIZWxwZXIgZnVuY3Rpb24gdG8gbG9hZCByZWZyZXNoIHRva2VucyB0byBtc2FsLWJyb3dzZXIgY2FjaGVcclxuICAgICAqIEBwYXJhbSByZXF1ZXN0XHJcbiAgICAgKiBAcGFyYW0gcmVzcG9uc2VcclxuICAgICAqIEBwYXJhbSBob21lQWNjb3VudElkXHJcbiAgICAgKiBAcGFyYW0gZW52aXJvbm1lbnRcclxuICAgICAqIEByZXR1cm5zIGBSZWZyZXNoVG9rZW5FbnRpdHlgXHJcbiAgICAgKi9cclxuICAgIGxvYWRSZWZyZXNoVG9rZW4ocmVzcG9uc2UsIGhvbWVBY2NvdW50SWQsIGVudmlyb25tZW50KSB7XHJcbiAgICAgICAgaWYgKCFyZXNwb25zZS5yZWZyZXNoX3Rva2VuKSB7XHJcbiAgICAgICAgICAgIHRoaXMubG9nZ2VyLnZlcmJvc2UoXCJUb2tlbkNhY2hlIC0gbm8gcmVmcmVzaCB0b2tlbiBmb3VuZCBpbiByZXNwb25zZVwiKTtcclxuICAgICAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMubG9nZ2VyLnZlcmJvc2UoXCJUb2tlbkNhY2hlIC0gbG9hZGluZyByZWZyZXNoIHRva2VuXCIpO1xyXG4gICAgICAgIGNvbnN0IHJlZnJlc2hUb2tlbkVudGl0eSA9IENhY2hlSGVscGVycy5jcmVhdGVSZWZyZXNoVG9rZW5FbnRpdHkoaG9tZUFjY291bnRJZCwgZW52aXJvbm1lbnQsIHJlc3BvbnNlLnJlZnJlc2hfdG9rZW4sIHRoaXMuY29uZmlnLmF1dGguY2xpZW50SWQsIHJlc3BvbnNlLmZvY2ksIHVuZGVmaW5lZCwgLy8gdXNlckFzc2VydGlvbkhhc2hcclxuICAgICAgICByZXNwb25zZS5yZWZyZXNoX3Rva2VuX2V4cGlyZXNfaW4pO1xyXG4gICAgICAgIHRoaXMuc3RvcmFnZS5zZXRSZWZyZXNoVG9rZW5DcmVkZW50aWFsKHJlZnJlc2hUb2tlbkVudGl0eSk7XHJcbiAgICAgICAgcmV0dXJuIHJlZnJlc2hUb2tlbkVudGl0eTtcclxuICAgIH1cclxuICAgIC8qKlxyXG4gICAgICogSGVscGVyIGZ1bmN0aW9uIHRvIGdlbmVyYXRlIGFuIGBBdXRoZW50aWNhdGlvblJlc3VsdGAgZm9yIHRoZSByZXN1bHQuXHJcbiAgICAgKiBAcGFyYW0gcmVxdWVzdFxyXG4gICAgICogQHBhcmFtIGlkVG9rZW5PYmpcclxuICAgICAqIEBwYXJhbSBjYWNoZVJlY29yZFxyXG4gICAgICogQHBhcmFtIGF1dGhvcml0eVxyXG4gICAgICogQHJldHVybnMgYEF1dGhlbnRpY2F0aW9uUmVzdWx0YFxyXG4gICAgICovXHJcbiAgICBnZW5lcmF0ZUF1dGhlbnRpY2F0aW9uUmVzdWx0KHJlcXVlc3QsIGNhY2hlUmVjb3JkLCBpZFRva2VuQ2xhaW1zLCBhdXRob3JpdHkpIHtcclxuICAgICAgICBsZXQgYWNjZXNzVG9rZW4gPSBcIlwiO1xyXG4gICAgICAgIGxldCByZXNwb25zZVNjb3BlcyA9IFtdO1xyXG4gICAgICAgIGxldCBleHBpcmVzT24gPSBudWxsO1xyXG4gICAgICAgIGxldCBleHRFeHBpcmVzT247XHJcbiAgICAgICAgaWYgKGNhY2hlUmVjb3JkPy5hY2Nlc3NUb2tlbikge1xyXG4gICAgICAgICAgICBhY2Nlc3NUb2tlbiA9IGNhY2hlUmVjb3JkLmFjY2Vzc1Rva2VuLnNlY3JldDtcclxuICAgICAgICAgICAgcmVzcG9uc2VTY29wZXMgPSBTY29wZVNldC5mcm9tU3RyaW5nKGNhY2hlUmVjb3JkLmFjY2Vzc1Rva2VuLnRhcmdldCkuYXNBcnJheSgpO1xyXG4gICAgICAgICAgICBleHBpcmVzT24gPSBuZXcgRGF0ZShOdW1iZXIoY2FjaGVSZWNvcmQuYWNjZXNzVG9rZW4uZXhwaXJlc09uKSAqIDEwMDApO1xyXG4gICAgICAgICAgICBleHRFeHBpcmVzT24gPSBuZXcgRGF0ZShOdW1iZXIoY2FjaGVSZWNvcmQuYWNjZXNzVG9rZW4uZXh0ZW5kZWRFeHBpcmVzT24pICogMTAwMCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNvbnN0IGFjY291bnRFbnRpdHkgPSBjYWNoZVJlY29yZC5hY2NvdW50O1xyXG4gICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgIGF1dGhvcml0eTogYXV0aG9yaXR5ID8gYXV0aG9yaXR5LmNhbm9uaWNhbEF1dGhvcml0eSA6IFwiXCIsXHJcbiAgICAgICAgICAgIHVuaXF1ZUlkOiBjYWNoZVJlY29yZC5hY2NvdW50LmxvY2FsQWNjb3VudElkLFxyXG4gICAgICAgICAgICB0ZW5hbnRJZDogY2FjaGVSZWNvcmQuYWNjb3VudC5yZWFsbSxcclxuICAgICAgICAgICAgc2NvcGVzOiByZXNwb25zZVNjb3BlcyxcclxuICAgICAgICAgICAgYWNjb3VudDogYWNjb3VudEVudGl0eS5nZXRBY2NvdW50SW5mbygpLFxyXG4gICAgICAgICAgICBpZFRva2VuOiBjYWNoZVJlY29yZC5pZFRva2VuPy5zZWNyZXQgfHwgXCJcIixcclxuICAgICAgICAgICAgaWRUb2tlbkNsYWltczogaWRUb2tlbkNsYWltcyB8fCB7fSxcclxuICAgICAgICAgICAgYWNjZXNzVG9rZW46IGFjY2Vzc1Rva2VuLFxyXG4gICAgICAgICAgICBmcm9tQ2FjaGU6IHRydWUsXHJcbiAgICAgICAgICAgIGV4cGlyZXNPbjogZXhwaXJlc09uLFxyXG4gICAgICAgICAgICBjb3JyZWxhdGlvbklkOiByZXF1ZXN0LmNvcnJlbGF0aW9uSWQgfHwgXCJcIixcclxuICAgICAgICAgICAgcmVxdWVzdElkOiBcIlwiLFxyXG4gICAgICAgICAgICBleHRFeHBpcmVzT246IGV4dEV4cGlyZXNPbixcclxuICAgICAgICAgICAgZmFtaWx5SWQ6IGNhY2hlUmVjb3JkLnJlZnJlc2hUb2tlbj8uZmFtaWx5SWQgfHwgXCJcIixcclxuICAgICAgICAgICAgdG9rZW5UeXBlOiBjYWNoZVJlY29yZD8uYWNjZXNzVG9rZW4/LnRva2VuVHlwZSB8fCBcIlwiLFxyXG4gICAgICAgICAgICBzdGF0ZTogcmVxdWVzdC5zdGF0ZSB8fCBcIlwiLFxyXG4gICAgICAgICAgICBjbG91ZEdyYXBoSG9zdE5hbWU6IGFjY291bnRFbnRpdHkuY2xvdWRHcmFwaEhvc3ROYW1lIHx8IFwiXCIsXHJcbiAgICAgICAgICAgIG1zR3JhcGhIb3N0OiBhY2NvdW50RW50aXR5Lm1zR3JhcGhIb3N0IHx8IFwiXCIsXHJcbiAgICAgICAgICAgIGZyb21OYXRpdmVCcm9rZXI6IGZhbHNlLFxyXG4gICAgICAgIH07XHJcbiAgICB9XHJcbn1cblxuZXhwb3J0IHsgVG9rZW5DYWNoZSB9O1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9VG9rZW5DYWNoZS5tanMubWFwXG4iLCIvKiEgQGF6dXJlL21zYWwtYnJvd3NlciB2My4yOC4xIDIwMjUtMDEtMTQgKi9cbid1c2Ugc3RyaWN0JztcbmltcG9ydCB7IEF1dGhvcml6YXRpb25Db2RlQ2xpZW50IH0gZnJvbSAnQGF6dXJlL21zYWwtY29tbW9uL2Jyb3dzZXInO1xuXG4vKlxyXG4gKiBDb3B5cmlnaHQgKGMpIE1pY3Jvc29mdCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cclxuICogTGljZW5zZWQgdW5kZXIgdGhlIE1JVCBMaWNlbnNlLlxyXG4gKi9cclxuY2xhc3MgSHlicmlkU3BhQXV0aG9yaXphdGlvbkNvZGVDbGllbnQgZXh0ZW5kcyBBdXRob3JpemF0aW9uQ29kZUNsaWVudCB7XHJcbiAgICBjb25zdHJ1Y3Rvcihjb25maWcpIHtcclxuICAgICAgICBzdXBlcihjb25maWcpO1xyXG4gICAgICAgIHRoaXMuaW5jbHVkZVJlZGlyZWN0VXJpID0gZmFsc2U7XHJcbiAgICB9XHJcbn1cblxuZXhwb3J0IHsgSHlicmlkU3BhQXV0aG9yaXphdGlvbkNvZGVDbGllbnQgfTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPUh5YnJpZFNwYUF1dGhvcml6YXRpb25Db2RlQ2xpZW50Lm1qcy5tYXBcbiIsIi8qISBAYXp1cmUvbXNhbC1icm93c2VyIHYzLjI4LjEgMjAyNS0wMS0xNCAqL1xuJ3VzZSBzdHJpY3QnO1xuaW1wb3J0IHsgaW52b2tlQXN5bmMsIFBlcmZvcm1hbmNlRXZlbnRzLCBBdXRoRXJyb3IgfSBmcm9tICdAYXp1cmUvbXNhbC1jb21tb24vYnJvd3Nlcic7XG5pbXBvcnQgeyBTdGFuZGFyZEludGVyYWN0aW9uQ2xpZW50IH0gZnJvbSAnLi9TdGFuZGFyZEludGVyYWN0aW9uQ2xpZW50Lm1qcyc7XG5pbXBvcnQgeyBjcmVhdGVCcm93c2VyQXV0aEVycm9yIH0gZnJvbSAnLi4vZXJyb3IvQnJvd3NlckF1dGhFcnJvci5tanMnO1xuaW1wb3J0IHsgSW50ZXJhY3Rpb25UeXBlIH0gZnJvbSAnLi4vdXRpbHMvQnJvd3NlckNvbnN0YW50cy5tanMnO1xuaW1wb3J0IHsgSHlicmlkU3BhQXV0aG9yaXphdGlvbkNvZGVDbGllbnQgfSBmcm9tICcuL0h5YnJpZFNwYUF1dGhvcml6YXRpb25Db2RlQ2xpZW50Lm1qcyc7XG5pbXBvcnQgeyBJbnRlcmFjdGlvbkhhbmRsZXIgfSBmcm9tICcuLi9pbnRlcmFjdGlvbl9oYW5kbGVyL0ludGVyYWN0aW9uSGFuZGxlci5tanMnO1xuaW1wb3J0IHsgYXV0aENvZGVSZXF1aXJlZCwgc2lsZW50TG9nb3V0VW5zdXBwb3J0ZWQgfSBmcm9tICcuLi9lcnJvci9Ccm93c2VyQXV0aEVycm9yQ29kZXMubWpzJztcblxuLypcclxuICogQ29weXJpZ2h0IChjKSBNaWNyb3NvZnQgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuXHJcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgTGljZW5zZS5cclxuICovXHJcbmNsYXNzIFNpbGVudEF1dGhDb2RlQ2xpZW50IGV4dGVuZHMgU3RhbmRhcmRJbnRlcmFjdGlvbkNsaWVudCB7XHJcbiAgICBjb25zdHJ1Y3Rvcihjb25maWcsIHN0b3JhZ2VJbXBsLCBicm93c2VyQ3J5cHRvLCBsb2dnZXIsIGV2ZW50SGFuZGxlciwgbmF2aWdhdGlvbkNsaWVudCwgYXBpSWQsIHBlcmZvcm1hbmNlQ2xpZW50LCBuYXRpdmVNZXNzYWdlSGFuZGxlciwgY29ycmVsYXRpb25JZCkge1xyXG4gICAgICAgIHN1cGVyKGNvbmZpZywgc3RvcmFnZUltcGwsIGJyb3dzZXJDcnlwdG8sIGxvZ2dlciwgZXZlbnRIYW5kbGVyLCBuYXZpZ2F0aW9uQ2xpZW50LCBwZXJmb3JtYW5jZUNsaWVudCwgbmF0aXZlTWVzc2FnZUhhbmRsZXIsIGNvcnJlbGF0aW9uSWQpO1xyXG4gICAgICAgIHRoaXMuYXBpSWQgPSBhcGlJZDtcclxuICAgIH1cclxuICAgIC8qKlxyXG4gICAgICogQWNxdWlyZXMgYSB0b2tlbiBzaWxlbnRseSBieSByZWRlZW1pbmcgYW4gYXV0aG9yaXphdGlvbiBjb2RlIGFnYWluc3QgdGhlIC90b2tlbiBlbmRwb2ludFxyXG4gICAgICogQHBhcmFtIHJlcXVlc3RcclxuICAgICAqL1xyXG4gICAgYXN5bmMgYWNxdWlyZVRva2VuKHJlcXVlc3QpIHtcclxuICAgICAgICAvLyBBdXRoIGNvZGUgcGF5bG9hZCBpcyByZXF1aXJlZFxyXG4gICAgICAgIGlmICghcmVxdWVzdC5jb2RlKSB7XHJcbiAgICAgICAgICAgIHRocm93IGNyZWF0ZUJyb3dzZXJBdXRoRXJyb3IoYXV0aENvZGVSZXF1aXJlZCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIC8vIENyZWF0ZSBzaWxlbnQgcmVxdWVzdFxyXG4gICAgICAgIGNvbnN0IHNpbGVudFJlcXVlc3QgPSBhd2FpdCBpbnZva2VBc3luYyh0aGlzLmluaXRpYWxpemVBdXRob3JpemF0aW9uUmVxdWVzdC5iaW5kKHRoaXMpLCBQZXJmb3JtYW5jZUV2ZW50cy5TdGFuZGFyZEludGVyYWN0aW9uQ2xpZW50SW5pdGlhbGl6ZUF1dGhvcml6YXRpb25SZXF1ZXN0LCB0aGlzLmxvZ2dlciwgdGhpcy5wZXJmb3JtYW5jZUNsaWVudCwgcmVxdWVzdC5jb3JyZWxhdGlvbklkKShyZXF1ZXN0LCBJbnRlcmFjdGlvblR5cGUuU2lsZW50KTtcclxuICAgICAgICBjb25zdCBzZXJ2ZXJUZWxlbWV0cnlNYW5hZ2VyID0gdGhpcy5pbml0aWFsaXplU2VydmVyVGVsZW1ldHJ5TWFuYWdlcih0aGlzLmFwaUlkKTtcclxuICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICAvLyBDcmVhdGUgYXV0aCBjb2RlIHJlcXVlc3QgKFBLQ0Ugbm90IG5lZWRlZClcclxuICAgICAgICAgICAgY29uc3QgYXV0aENvZGVSZXF1ZXN0ID0ge1xyXG4gICAgICAgICAgICAgICAgLi4uc2lsZW50UmVxdWVzdCxcclxuICAgICAgICAgICAgICAgIGNvZGU6IHJlcXVlc3QuY29kZSxcclxuICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgLy8gSW5pdGlhbGl6ZSB0aGUgY2xpZW50XHJcbiAgICAgICAgICAgIGNvbnN0IGNsaWVudENvbmZpZyA9IGF3YWl0IGludm9rZUFzeW5jKHRoaXMuZ2V0Q2xpZW50Q29uZmlndXJhdGlvbi5iaW5kKHRoaXMpLCBQZXJmb3JtYW5jZUV2ZW50cy5TdGFuZGFyZEludGVyYWN0aW9uQ2xpZW50R2V0Q2xpZW50Q29uZmlndXJhdGlvbiwgdGhpcy5sb2dnZXIsIHRoaXMucGVyZm9ybWFuY2VDbGllbnQsIHJlcXVlc3QuY29ycmVsYXRpb25JZCkoe1xyXG4gICAgICAgICAgICAgICAgc2VydmVyVGVsZW1ldHJ5TWFuYWdlcixcclxuICAgICAgICAgICAgICAgIHJlcXVlc3RBdXRob3JpdHk6IHNpbGVudFJlcXVlc3QuYXV0aG9yaXR5LFxyXG4gICAgICAgICAgICAgICAgcmVxdWVzdEF6dXJlQ2xvdWRPcHRpb25zOiBzaWxlbnRSZXF1ZXN0LmF6dXJlQ2xvdWRPcHRpb25zLFxyXG4gICAgICAgICAgICAgICAgcmVxdWVzdEV4dHJhUXVlcnlQYXJhbWV0ZXJzOiBzaWxlbnRSZXF1ZXN0LmV4dHJhUXVlcnlQYXJhbWV0ZXJzLFxyXG4gICAgICAgICAgICAgICAgYWNjb3VudDogc2lsZW50UmVxdWVzdC5hY2NvdW50LFxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgY29uc3QgYXV0aENsaWVudCA9IG5ldyBIeWJyaWRTcGFBdXRob3JpemF0aW9uQ29kZUNsaWVudChjbGllbnRDb25maWcpO1xyXG4gICAgICAgICAgICB0aGlzLmxvZ2dlci52ZXJib3NlKFwiQXV0aCBjb2RlIGNsaWVudCBjcmVhdGVkXCIpO1xyXG4gICAgICAgICAgICAvLyBDcmVhdGUgc2lsZW50IGhhbmRsZXJcclxuICAgICAgICAgICAgY29uc3QgaW50ZXJhY3Rpb25IYW5kbGVyID0gbmV3IEludGVyYWN0aW9uSGFuZGxlcihhdXRoQ2xpZW50LCB0aGlzLmJyb3dzZXJTdG9yYWdlLCBhdXRoQ29kZVJlcXVlc3QsIHRoaXMubG9nZ2VyLCB0aGlzLnBlcmZvcm1hbmNlQ2xpZW50KTtcclxuICAgICAgICAgICAgLy8gSGFuZGxlIGF1dGggY29kZSBwYXJhbWV0ZXJzIGZyb20gcmVxdWVzdFxyXG4gICAgICAgICAgICByZXR1cm4gYXdhaXQgaW52b2tlQXN5bmMoaW50ZXJhY3Rpb25IYW5kbGVyLmhhbmRsZUNvZGVSZXNwb25zZUZyb21TZXJ2ZXIuYmluZChpbnRlcmFjdGlvbkhhbmRsZXIpLCBQZXJmb3JtYW5jZUV2ZW50cy5IYW5kbGVDb2RlUmVzcG9uc2VGcm9tU2VydmVyLCB0aGlzLmxvZ2dlciwgdGhpcy5wZXJmb3JtYW5jZUNsaWVudCwgcmVxdWVzdC5jb3JyZWxhdGlvbklkKSh7XHJcbiAgICAgICAgICAgICAgICBjb2RlOiByZXF1ZXN0LmNvZGUsXHJcbiAgICAgICAgICAgICAgICBtc2dyYXBoX2hvc3Q6IHJlcXVlc3QubXNHcmFwaEhvc3QsXHJcbiAgICAgICAgICAgICAgICBjbG91ZF9ncmFwaF9ob3N0X25hbWU6IHJlcXVlc3QuY2xvdWRHcmFwaEhvc3ROYW1lLFxyXG4gICAgICAgICAgICAgICAgY2xvdWRfaW5zdGFuY2VfaG9zdF9uYW1lOiByZXF1ZXN0LmNsb3VkSW5zdGFuY2VIb3N0TmFtZSxcclxuICAgICAgICAgICAgfSwgc2lsZW50UmVxdWVzdCwgZmFsc2UpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjYXRjaCAoZSkge1xyXG4gICAgICAgICAgICBpZiAoZSBpbnN0YW5jZW9mIEF1dGhFcnJvcikge1xyXG4gICAgICAgICAgICAgICAgZS5zZXRDb3JyZWxhdGlvbklkKHRoaXMuY29ycmVsYXRpb25JZCk7XHJcbiAgICAgICAgICAgICAgICBzZXJ2ZXJUZWxlbWV0cnlNYW5hZ2VyLmNhY2hlRmFpbGVkUmVxdWVzdChlKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB0aHJvdyBlO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIC8qKlxyXG4gICAgICogQ3VycmVudGx5IFVuc3VwcG9ydGVkXHJcbiAgICAgKi9cclxuICAgIGxvZ291dCgpIHtcclxuICAgICAgICAvLyBTeW5jaHJvbm91cyBzbyB3ZSBtdXN0IHJlamVjdFxyXG4gICAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdChjcmVhdGVCcm93c2VyQXV0aEVycm9yKHNpbGVudExvZ291dFVuc3VwcG9ydGVkKSk7XHJcbiAgICB9XHJcbn1cblxuZXhwb3J0IHsgU2lsZW50QXV0aENvZGVDbGllbnQgfTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPVNpbGVudEF1dGhDb2RlQ2xpZW50Lm1qcy5tYXBcbiIsIi8qISBAYXp1cmUvbXNhbC1icm93c2VyIHYzLjI4LjEgMjAyNS0wMS0xNCAqL1xuJ3VzZSBzdHJpY3QnO1xuaW1wb3J0IHsgQ3J5cHRvT3BzIH0gZnJvbSAnLi4vY3J5cHRvL0NyeXB0b09wcy5tanMnO1xuaW1wb3J0IHsgREVGQVVMVF9DUllQVE9fSU1QTEVNRU5UQVRJT04sIGJ1aWxkU3RhdGljQXV0aG9yaXR5T3B0aW9ucywgUGVyZm9ybWFuY2VFdmVudHMsIGludm9rZUFzeW5jLCBJbnRlcmFjdGlvblJlcXVpcmVkQXV0aEVycm9yLCBjcmVhdGVDbGllbnRBdXRoRXJyb3IsIENsaWVudEF1dGhFcnJvckNvZGVzLCBBY2NvdW50RW50aXR5LCBQcm9tcHRWYWx1ZSwgUGVyc2lzdGVudENhY2hlS2V5cywgQ2FjaGVNYW5hZ2VyLCBDb25zdGFudHMsIEludGVyYWN0aW9uUmVxdWlyZWRBdXRoRXJyb3JDb2RlcyB9IGZyb20gJ0BhenVyZS9tc2FsLWNvbW1vbi9icm93c2VyJztcbmltcG9ydCB7IEJyb3dzZXJDYWNoZU1hbmFnZXIsIERFRkFVTFRfQlJPV1NFUl9DQUNIRV9NQU5BR0VSIH0gZnJvbSAnLi4vY2FjaGUvQnJvd3NlckNhY2hlTWFuYWdlci5tanMnO1xuaW1wb3J0IHsgZ2V0QWxsQWNjb3VudHMsIGdldEFjY291bnQsIGdldEFjY291bnRCeVVzZXJuYW1lLCBnZXRBY2NvdW50QnlIb21lSWQsIGdldEFjY291bnRCeUxvY2FsSWQsIHNldEFjdGl2ZUFjY291bnQsIGdldEFjdGl2ZUFjY291bnQgfSBmcm9tICcuLi9jYWNoZS9BY2NvdW50TWFuYWdlci5tanMnO1xuaW1wb3J0IHsgVGVtcG9yYXJ5Q2FjaGVLZXlzLCBJbnRlcmFjdGlvblR5cGUsIEFwaUlkLCBDYWNoZUxvb2t1cFBvbGljeSwgREVGQVVMVF9SRVFVRVNULCBCcm93c2VyQ2FjaGVMb2NhdGlvbiwgaUZyYW1lUmVuZXdhbFBvbGljaWVzLCBCcm93c2VyQ29uc3RhbnRzIH0gZnJvbSAnLi4vdXRpbHMvQnJvd3NlckNvbnN0YW50cy5tanMnO1xuaW1wb3J0IHsgYmxvY2tBUElDYWxsc0JlZm9yZUluaXRpYWxpemUsIHJlZGlyZWN0UHJlZmxpZ2h0Q2hlY2ssIHByZWZsaWdodENoZWNrIGFzIHByZWZsaWdodENoZWNrJDEsIGJsb2NrTm9uQnJvd3NlckVudmlyb25tZW50IH0gZnJvbSAnLi4vdXRpbHMvQnJvd3NlclV0aWxzLm1qcyc7XG5pbXBvcnQgeyBFdmVudFR5cGUgfSBmcm9tICcuLi9ldmVudC9FdmVudFR5cGUubWpzJztcbmltcG9ydCB7IEV2ZW50SGFuZGxlciB9IGZyb20gJy4uL2V2ZW50L0V2ZW50SGFuZGxlci5tanMnO1xuaW1wb3J0IHsgUG9wdXBDbGllbnQgfSBmcm9tICcuLi9pbnRlcmFjdGlvbl9jbGllbnQvUG9wdXBDbGllbnQubWpzJztcbmltcG9ydCB7IFJlZGlyZWN0Q2xpZW50IH0gZnJvbSAnLi4vaW50ZXJhY3Rpb25fY2xpZW50L1JlZGlyZWN0Q2xpZW50Lm1qcyc7XG5pbXBvcnQgeyBTaWxlbnRJZnJhbWVDbGllbnQgfSBmcm9tICcuLi9pbnRlcmFjdGlvbl9jbGllbnQvU2lsZW50SWZyYW1lQ2xpZW50Lm1qcyc7XG5pbXBvcnQgeyBTaWxlbnRSZWZyZXNoQ2xpZW50IH0gZnJvbSAnLi4vaW50ZXJhY3Rpb25fY2xpZW50L1NpbGVudFJlZnJlc2hDbGllbnQubWpzJztcbmltcG9ydCB7IFRva2VuQ2FjaGUgfSBmcm9tICcuLi9jYWNoZS9Ub2tlbkNhY2hlLm1qcyc7XG5pbXBvcnQgeyBOYXRpdmVJbnRlcmFjdGlvbkNsaWVudCB9IGZyb20gJy4uL2ludGVyYWN0aW9uX2NsaWVudC9OYXRpdmVJbnRlcmFjdGlvbkNsaWVudC5tanMnO1xuaW1wb3J0IHsgTmF0aXZlTWVzc2FnZUhhbmRsZXIgfSBmcm9tICcuLi9icm9rZXIvbmF0aXZlQnJva2VyL05hdGl2ZU1lc3NhZ2VIYW5kbGVyLm1qcyc7XG5pbXBvcnQgeyBOYXRpdmVBdXRoRXJyb3IsIGlzRmF0YWxOYXRpdmVBdXRoRXJyb3IgfSBmcm9tICcuLi9lcnJvci9OYXRpdmVBdXRoRXJyb3IubWpzJztcbmltcG9ydCB7IFNpbGVudENhY2hlQ2xpZW50IH0gZnJvbSAnLi4vaW50ZXJhY3Rpb25fY2xpZW50L1NpbGVudENhY2hlQ2xpZW50Lm1qcyc7XG5pbXBvcnQgeyBTaWxlbnRBdXRoQ29kZUNsaWVudCB9IGZyb20gJy4uL2ludGVyYWN0aW9uX2NsaWVudC9TaWxlbnRBdXRoQ29kZUNsaWVudC5tanMnO1xuaW1wb3J0IHsgY3JlYXRlQnJvd3NlckF1dGhFcnJvciB9IGZyb20gJy4uL2Vycm9yL0Jyb3dzZXJBdXRoRXJyb3IubWpzJztcbmltcG9ydCB7IGNyZWF0ZU5ld0d1aWQgfSBmcm9tICcuLi9jcnlwdG8vQnJvd3NlckNyeXB0by5tanMnO1xuaW1wb3J0IHsgaW5pdGlhbGl6ZVNpbGVudFJlcXVlc3QgfSBmcm9tICcuLi9yZXF1ZXN0L1JlcXVlc3RIZWxwZXJzLm1qcyc7XG5pbXBvcnQgeyBzcGFDb2RlQW5kTmF0aXZlQWNjb3VudElkUHJlc2VudCwgdW5hYmxlVG9BY3F1aXJlVG9rZW5Gcm9tTmF0aXZlUGxhdGZvcm0sIGF1dGhDb2RlT3JOYXRpdmVBY2NvdW50SWRSZXF1aXJlZCwgbmF0aXZlQ29ubmVjdGlvbk5vdEVzdGFibGlzaGVkLCBub0FjY291bnRFcnJvciB9IGZyb20gJy4uL2Vycm9yL0Jyb3dzZXJBdXRoRXJyb3JDb2Rlcy5tanMnO1xuXG4vKlxyXG4gKiBDb3B5cmlnaHQgKGMpIE1pY3Jvc29mdCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cclxuICogTGljZW5zZWQgdW5kZXIgdGhlIE1JVCBMaWNlbnNlLlxyXG4gKi9cclxuZnVuY3Rpb24gZ2V0QWNjb3VudFR5cGUoYWNjb3VudCkge1xyXG4gICAgY29uc3QgaWRUb2tlbkNsYWltcyA9IGFjY291bnQ/LmlkVG9rZW5DbGFpbXM7XHJcbiAgICBpZiAoaWRUb2tlbkNsYWltcz8udGZwIHx8IGlkVG9rZW5DbGFpbXM/LmFjcikge1xyXG4gICAgICAgIHJldHVybiBcIkIyQ1wiO1xyXG4gICAgfVxyXG4gICAgaWYgKCFpZFRva2VuQ2xhaW1zPy50aWQpIHtcclxuICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xyXG4gICAgfVxyXG4gICAgZWxzZSBpZiAoaWRUb2tlbkNsYWltcz8udGlkID09PSBcIjkxODgwNDBkLTZjNjctNGM1Yi1iMTEyLTM2YTMwNGI2NmRhZFwiKSB7XHJcbiAgICAgICAgcmV0dXJuIFwiTVNBXCI7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gXCJBQURcIjtcclxufVxyXG5mdW5jdGlvbiBwcmVmbGlnaHRDaGVjayhpbml0aWFsaXplZCwgcGVyZm9ybWFuY2VFdmVudCkge1xyXG4gICAgdHJ5IHtcclxuICAgICAgICBwcmVmbGlnaHRDaGVjayQxKGluaXRpYWxpemVkKTtcclxuICAgIH1cclxuICAgIGNhdGNoIChlKSB7XHJcbiAgICAgICAgcGVyZm9ybWFuY2VFdmVudC5lbmQoeyBzdWNjZXNzOiBmYWxzZSB9LCBlKTtcclxuICAgICAgICB0aHJvdyBlO1xyXG4gICAgfVxyXG59XHJcbmNsYXNzIFN0YW5kYXJkQ29udHJvbGxlciB7XHJcbiAgICAvKipcclxuICAgICAqIEBjb25zdHJ1Y3RvclxyXG4gICAgICogQ29uc3RydWN0b3IgZm9yIHRoZSBQdWJsaWNDbGllbnRBcHBsaWNhdGlvbiB1c2VkIHRvIGluc3RhbnRpYXRlIHRoZSBQdWJsaWNDbGllbnRBcHBsaWNhdGlvbiBvYmplY3RcclxuICAgICAqXHJcbiAgICAgKiBJbXBvcnRhbnQgYXR0cmlidXRlcyBpbiB0aGUgQ29uZmlndXJhdGlvbiBvYmplY3QgZm9yIGF1dGggYXJlOlxyXG4gICAgICogLSBjbGllbnRJRDogdGhlIGFwcGxpY2F0aW9uIElEIG9mIHlvdXIgYXBwbGljYXRpb24uIFlvdSBjYW4gb2J0YWluIG9uZSBieSByZWdpc3RlcmluZyB5b3VyIGFwcGxpY2F0aW9uIHdpdGggb3VyIEFwcGxpY2F0aW9uIHJlZ2lzdHJhdGlvbiBwb3J0YWwgOiBodHRwczovL3BvcnRhbC5henVyZS5jb20vI2JsYWRlL01pY3Jvc29mdF9BQURfSUFNL0FjdGl2ZURpcmVjdG9yeU1lbnVCbGFkZS9SZWdpc3RlcmVkQXBwc1ByZXZpZXdcclxuICAgICAqIC0gYXV0aG9yaXR5OiB0aGUgYXV0aG9yaXR5IFVSTCBmb3IgeW91ciBhcHBsaWNhdGlvbi5cclxuICAgICAqIC0gcmVkaXJlY3RfdXJpOiB0aGUgdXJpIG9mIHlvdXIgYXBwbGljYXRpb24gcmVnaXN0ZXJlZCBpbiB0aGUgcG9ydGFsLlxyXG4gICAgICpcclxuICAgICAqIEluIEF6dXJlIEFELCBhdXRob3JpdHkgaXMgYSBVUkwgaW5kaWNhdGluZyB0aGUgQXp1cmUgYWN0aXZlIGRpcmVjdG9yeSB0aGF0IE1TQUwgdXNlcyB0byBvYnRhaW4gdG9rZW5zLlxyXG4gICAgICogSXQgaXMgb2YgdGhlIGZvcm0gaHR0cHM6Ly9sb2dpbi5taWNyb3NvZnRvbmxpbmUuY29tL3tFbnRlcl90aGVfVGVuYW50X0luZm9fSGVyZX1cclxuICAgICAqIElmIHlvdXIgYXBwbGljYXRpb24gc3VwcG9ydHMgQWNjb3VudHMgaW4gb25lIG9yZ2FuaXphdGlvbmFsIGRpcmVjdG9yeSwgcmVwbGFjZSBcIkVudGVyX3RoZV9UZW5hbnRfSW5mb19IZXJlXCIgdmFsdWUgd2l0aCB0aGUgVGVuYW50IElkIG9yIFRlbmFudCBuYW1lIChmb3IgZXhhbXBsZSwgY29udG9zby5taWNyb3NvZnQuY29tKS5cclxuICAgICAqIElmIHlvdXIgYXBwbGljYXRpb24gc3VwcG9ydHMgQWNjb3VudHMgaW4gYW55IG9yZ2FuaXphdGlvbmFsIGRpcmVjdG9yeSwgcmVwbGFjZSBcIkVudGVyX3RoZV9UZW5hbnRfSW5mb19IZXJlXCIgdmFsdWUgd2l0aCBvcmdhbml6YXRpb25zLlxyXG4gICAgICogSWYgeW91ciBhcHBsaWNhdGlvbiBzdXBwb3J0cyBBY2NvdW50cyBpbiBhbnkgb3JnYW5pemF0aW9uYWwgZGlyZWN0b3J5IGFuZCBwZXJzb25hbCBNaWNyb3NvZnQgYWNjb3VudHMsIHJlcGxhY2UgXCJFbnRlcl90aGVfVGVuYW50X0luZm9fSGVyZVwiIHZhbHVlIHdpdGggY29tbW9uLlxyXG4gICAgICogVG8gcmVzdHJpY3Qgc3VwcG9ydCB0byBQZXJzb25hbCBNaWNyb3NvZnQgYWNjb3VudHMgb25seSwgcmVwbGFjZSBcIkVudGVyX3RoZV9UZW5hbnRfSW5mb19IZXJlXCIgdmFsdWUgd2l0aCBjb25zdW1lcnMuXHJcbiAgICAgKlxyXG4gICAgICogSW4gQXp1cmUgQjJDLCBhdXRob3JpdHkgaXMgb2YgdGhlIGZvcm0gaHR0cHM6Ly97aW5zdGFuY2V9L3RmcC97dGVuYW50fS97cG9saWN5TmFtZX0vXHJcbiAgICAgKiBGdWxsIEIyQyBmdW5jdGlvbmFsaXR5IHdpbGwgYmUgYXZhaWxhYmxlIGluIHRoaXMgbGlicmFyeSBpbiBmdXR1cmUgdmVyc2lvbnMuXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIGNvbmZpZ3VyYXRpb24gT2JqZWN0IGZvciB0aGUgTVNBTCBQdWJsaWNDbGllbnRBcHBsaWNhdGlvbiBpbnN0YW5jZVxyXG4gICAgICovXHJcbiAgICBjb25zdHJ1Y3RvcihvcGVyYXRpbmdDb250ZXh0KSB7XHJcbiAgICAgICAgdGhpcy5vcGVyYXRpbmdDb250ZXh0ID0gb3BlcmF0aW5nQ29udGV4dDtcclxuICAgICAgICB0aGlzLmlzQnJvd3NlckVudmlyb25tZW50ID1cclxuICAgICAgICAgICAgdGhpcy5vcGVyYXRpbmdDb250ZXh0LmlzQnJvd3NlckVudmlyb25tZW50KCk7XHJcbiAgICAgICAgLy8gU2V0IHRoZSBjb25maWd1cmF0aW9uLlxyXG4gICAgICAgIHRoaXMuY29uZmlnID0gb3BlcmF0aW5nQ29udGV4dC5nZXRDb25maWcoKTtcclxuICAgICAgICB0aGlzLmluaXRpYWxpemVkID0gZmFsc2U7XHJcbiAgICAgICAgLy8gSW5pdGlhbGl6ZSBsb2dnZXJcclxuICAgICAgICB0aGlzLmxvZ2dlciA9IHRoaXMub3BlcmF0aW5nQ29udGV4dC5nZXRMb2dnZXIoKTtcclxuICAgICAgICAvLyBJbml0aWFsaXplIHRoZSBuZXR3b3JrIG1vZHVsZSBjbGFzcy5cclxuICAgICAgICB0aGlzLm5ldHdvcmtDbGllbnQgPSB0aGlzLmNvbmZpZy5zeXN0ZW0ubmV0d29ya0NsaWVudDtcclxuICAgICAgICAvLyBJbml0aWFsaXplIHRoZSBuYXZpZ2F0aW9uIGNsaWVudCBjbGFzcy5cclxuICAgICAgICB0aGlzLm5hdmlnYXRpb25DbGllbnQgPSB0aGlzLmNvbmZpZy5zeXN0ZW0ubmF2aWdhdGlvbkNsaWVudDtcclxuICAgICAgICAvLyBJbml0aWFsaXplIHJlZGlyZWN0UmVzcG9uc2UgTWFwXHJcbiAgICAgICAgdGhpcy5yZWRpcmVjdFJlc3BvbnNlID0gbmV3IE1hcCgpO1xyXG4gICAgICAgIC8vIEluaXRpYWwgaHlicmlkIHNwYSBtYXBcclxuICAgICAgICB0aGlzLmh5YnJpZEF1dGhDb2RlUmVzcG9uc2VzID0gbmV3IE1hcCgpO1xyXG4gICAgICAgIC8vIEluaXRpYWxpemUgcGVyZm9ybWFuY2UgY2xpZW50XHJcbiAgICAgICAgdGhpcy5wZXJmb3JtYW5jZUNsaWVudCA9IHRoaXMuY29uZmlnLnRlbGVtZXRyeS5jbGllbnQ7XHJcbiAgICAgICAgLy8gSW5pdGlhbGl6ZSB0aGUgY3J5cHRvIGNsYXNzLlxyXG4gICAgICAgIHRoaXMuYnJvd3NlckNyeXB0byA9IHRoaXMuaXNCcm93c2VyRW52aXJvbm1lbnRcclxuICAgICAgICAgICAgPyBuZXcgQ3J5cHRvT3BzKHRoaXMubG9nZ2VyLCB0aGlzLnBlcmZvcm1hbmNlQ2xpZW50KVxyXG4gICAgICAgICAgICA6IERFRkFVTFRfQ1JZUFRPX0lNUExFTUVOVEFUSU9OO1xyXG4gICAgICAgIHRoaXMuZXZlbnRIYW5kbGVyID0gbmV3IEV2ZW50SGFuZGxlcih0aGlzLmxvZ2dlcik7XHJcbiAgICAgICAgLy8gSW5pdGlhbGl6ZSB0aGUgYnJvd3NlciBzdG9yYWdlIGNsYXNzLlxyXG4gICAgICAgIHRoaXMuYnJvd3NlclN0b3JhZ2UgPSB0aGlzLmlzQnJvd3NlckVudmlyb25tZW50XHJcbiAgICAgICAgICAgID8gbmV3IEJyb3dzZXJDYWNoZU1hbmFnZXIodGhpcy5jb25maWcuYXV0aC5jbGllbnRJZCwgdGhpcy5jb25maWcuY2FjaGUsIHRoaXMuYnJvd3NlckNyeXB0bywgdGhpcy5sb2dnZXIsIGJ1aWxkU3RhdGljQXV0aG9yaXR5T3B0aW9ucyh0aGlzLmNvbmZpZy5hdXRoKSwgdGhpcy5wZXJmb3JtYW5jZUNsaWVudClcclxuICAgICAgICAgICAgOiBERUZBVUxUX0JST1dTRVJfQ0FDSEVfTUFOQUdFUih0aGlzLmNvbmZpZy5hdXRoLmNsaWVudElkLCB0aGlzLmxvZ2dlcik7XHJcbiAgICAgICAgLy8gaW5pdGlhbGl6ZSBpbiBtZW1vcnkgc3RvcmFnZSBmb3IgbmF0aXZlIGZsb3dzXHJcbiAgICAgICAgY29uc3QgbmF0aXZlQ2FjaGVPcHRpb25zID0ge1xyXG4gICAgICAgICAgICBjYWNoZUxvY2F0aW9uOiBCcm93c2VyQ2FjaGVMb2NhdGlvbi5NZW1vcnlTdG9yYWdlLFxyXG4gICAgICAgICAgICB0ZW1wb3JhcnlDYWNoZUxvY2F0aW9uOiBCcm93c2VyQ2FjaGVMb2NhdGlvbi5NZW1vcnlTdG9yYWdlLFxyXG4gICAgICAgICAgICBzdG9yZUF1dGhTdGF0ZUluQ29va2llOiBmYWxzZSxcclxuICAgICAgICAgICAgc2VjdXJlQ29va2llczogZmFsc2UsXHJcbiAgICAgICAgICAgIGNhY2hlTWlncmF0aW9uRW5hYmxlZDogZmFsc2UsXHJcbiAgICAgICAgICAgIGNsYWltc0Jhc2VkQ2FjaGluZ0VuYWJsZWQ6IGZhbHNlLFxyXG4gICAgICAgIH07XHJcbiAgICAgICAgdGhpcy5uYXRpdmVJbnRlcm5hbFN0b3JhZ2UgPSBuZXcgQnJvd3NlckNhY2hlTWFuYWdlcih0aGlzLmNvbmZpZy5hdXRoLmNsaWVudElkLCBuYXRpdmVDYWNoZU9wdGlvbnMsIHRoaXMuYnJvd3NlckNyeXB0bywgdGhpcy5sb2dnZXIsIHVuZGVmaW5lZCwgdGhpcy5wZXJmb3JtYW5jZUNsaWVudCk7XHJcbiAgICAgICAgLy8gSW5pdGlhbGl6ZSB0aGUgdG9rZW4gY2FjaGVcclxuICAgICAgICB0aGlzLnRva2VuQ2FjaGUgPSBuZXcgVG9rZW5DYWNoZSh0aGlzLmNvbmZpZywgdGhpcy5icm93c2VyU3RvcmFnZSwgdGhpcy5sb2dnZXIsIHRoaXMuYnJvd3NlckNyeXB0byk7XHJcbiAgICAgICAgdGhpcy5hY3RpdmVTaWxlbnRUb2tlblJlcXVlc3RzID0gbmV3IE1hcCgpO1xyXG4gICAgICAgIC8vIFJlZ2lzdGVyIGxpc3RlbmVyIGZ1bmN0aW9uc1xyXG4gICAgICAgIHRoaXMudHJhY2tQYWdlVmlzaWJpbGl0eSA9IHRoaXMudHJhY2tQYWdlVmlzaWJpbGl0eS5iaW5kKHRoaXMpO1xyXG4gICAgICAgIC8vIFJlZ2lzdGVyIGxpc3RlbmVyIGZ1bmN0aW9uc1xyXG4gICAgICAgIHRoaXMudHJhY2tQYWdlVmlzaWJpbGl0eVdpdGhNZWFzdXJlbWVudCA9XHJcbiAgICAgICAgICAgIHRoaXMudHJhY2tQYWdlVmlzaWJpbGl0eVdpdGhNZWFzdXJlbWVudC5iaW5kKHRoaXMpO1xyXG4gICAgICAgIC8vIGFjY291bnQgc3RvcmFnZSBldmVudHNcclxuICAgICAgICB0aGlzLmxpc3RlbmluZ1RvU3RvcmFnZUV2ZW50cyA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMuaGFuZGxlQWNjb3VudENhY2hlQ2hhbmdlID1cclxuICAgICAgICAgICAgdGhpcy5oYW5kbGVBY2NvdW50Q2FjaGVDaGFuZ2UuYmluZCh0aGlzKTtcclxuICAgIH1cclxuICAgIHN0YXRpYyBhc3luYyBjcmVhdGVDb250cm9sbGVyKG9wZXJhdGluZ0NvbnRleHQsIHJlcXVlc3QpIHtcclxuICAgICAgICBjb25zdCBjb250cm9sbGVyID0gbmV3IFN0YW5kYXJkQ29udHJvbGxlcihvcGVyYXRpbmdDb250ZXh0KTtcclxuICAgICAgICBhd2FpdCBjb250cm9sbGVyLmluaXRpYWxpemUocmVxdWVzdCk7XHJcbiAgICAgICAgcmV0dXJuIGNvbnRyb2xsZXI7XHJcbiAgICB9XHJcbiAgICB0cmFja1BhZ2VWaXNpYmlsaXR5KGNvcnJlbGF0aW9uSWQpIHtcclxuICAgICAgICBpZiAoIWNvcnJlbGF0aW9uSWQpIHtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLmxvZ2dlci5pbmZvKFwiUGVyZjogVmlzaWJpbGl0eSBjaGFuZ2UgZGV0ZWN0ZWRcIik7XHJcbiAgICAgICAgdGhpcy5wZXJmb3JtYW5jZUNsaWVudC5pbmNyZW1lbnRGaWVsZHMoeyB2aXNpYmlsaXR5Q2hhbmdlQ291bnQ6IDEgfSwgY29ycmVsYXRpb25JZCk7XHJcbiAgICB9XHJcbiAgICAvKipcclxuICAgICAqIEluaXRpYWxpemVyIGZ1bmN0aW9uIHRvIHBlcmZvcm0gYXN5bmMgc3RhcnR1cCB0YXNrcyBzdWNoIGFzIGNvbm5lY3RpbmcgdG8gV0FNIGV4dGVuc2lvblxyXG4gICAgICogQHBhcmFtIHJlcXVlc3Qgez9Jbml0aWFsaXplQXBwbGljYXRpb25SZXF1ZXN0fSBjb3JyZWxhdGlvbiBpZFxyXG4gICAgICovXHJcbiAgICBhc3luYyBpbml0aWFsaXplKHJlcXVlc3QpIHtcclxuICAgICAgICB0aGlzLmxvZ2dlci50cmFjZShcImluaXRpYWxpemUgY2FsbGVkXCIpO1xyXG4gICAgICAgIGlmICh0aGlzLmluaXRpYWxpemVkKSB7XHJcbiAgICAgICAgICAgIHRoaXMubG9nZ2VyLmluZm8oXCJpbml0aWFsaXplIGhhcyBhbHJlYWR5IGJlZW4gY2FsbGVkLCBleGl0aW5nIGVhcmx5LlwiKTtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoIXRoaXMuaXNCcm93c2VyRW52aXJvbm1lbnQpIHtcclxuICAgICAgICAgICAgdGhpcy5sb2dnZXIuaW5mbyhcImluIG5vbi1icm93c2VyIGVudmlyb25tZW50LCBleGl0aW5nIGVhcmx5LlwiKTtcclxuICAgICAgICAgICAgdGhpcy5pbml0aWFsaXplZCA9IHRydWU7XHJcbiAgICAgICAgICAgIHRoaXMuZXZlbnRIYW5kbGVyLmVtaXRFdmVudChFdmVudFR5cGUuSU5JVElBTElaRV9FTkQpO1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNvbnN0IGluaXRDb3JyZWxhdGlvbklkID0gcmVxdWVzdD8uY29ycmVsYXRpb25JZCB8fCB0aGlzLmdldFJlcXVlc3RDb3JyZWxhdGlvbklkKCk7XHJcbiAgICAgICAgY29uc3QgYWxsb3dOYXRpdmVCcm9rZXIgPSB0aGlzLmNvbmZpZy5zeXN0ZW0uYWxsb3dOYXRpdmVCcm9rZXI7XHJcbiAgICAgICAgY29uc3QgaW5pdE1lYXN1cmVtZW50ID0gdGhpcy5wZXJmb3JtYW5jZUNsaWVudC5zdGFydE1lYXN1cmVtZW50KFBlcmZvcm1hbmNlRXZlbnRzLkluaXRpYWxpemVDbGllbnRBcHBsaWNhdGlvbiwgaW5pdENvcnJlbGF0aW9uSWQpO1xyXG4gICAgICAgIHRoaXMuZXZlbnRIYW5kbGVyLmVtaXRFdmVudChFdmVudFR5cGUuSU5JVElBTElaRV9TVEFSVCk7XHJcbiAgICAgICAgaWYgKGFsbG93TmF0aXZlQnJva2VyKSB7XHJcbiAgICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLm5hdGl2ZUV4dGVuc2lvblByb3ZpZGVyID1cclxuICAgICAgICAgICAgICAgICAgICBhd2FpdCBOYXRpdmVNZXNzYWdlSGFuZGxlci5jcmVhdGVQcm92aWRlcih0aGlzLmxvZ2dlciwgdGhpcy5jb25maWcuc3lzdGVtLm5hdGl2ZUJyb2tlckhhbmRzaGFrZVRpbWVvdXQsIHRoaXMucGVyZm9ybWFuY2VDbGllbnQpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGNhdGNoIChlKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmxvZ2dlci52ZXJib3NlKGUpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICghdGhpcy5jb25maWcuY2FjaGUuY2xhaW1zQmFzZWRDYWNoaW5nRW5hYmxlZCkge1xyXG4gICAgICAgICAgICB0aGlzLmxvZ2dlci52ZXJib3NlKFwiQ2xhaW1zLWJhc2VkIGNhY2hpbmcgaXMgZGlzYWJsZWQuIENsZWFyaW5nIHRoZSBwcmV2aW91cyBjYWNoZSB3aXRoIGNsYWltc1wiKTtcclxuICAgICAgICAgICAgYXdhaXQgaW52b2tlQXN5bmModGhpcy5icm93c2VyU3RvcmFnZS5jbGVhclRva2Vuc0FuZEtleXNXaXRoQ2xhaW1zLmJpbmQodGhpcy5icm93c2VyU3RvcmFnZSksIFBlcmZvcm1hbmNlRXZlbnRzLkNsZWFyVG9rZW5zQW5kS2V5c1dpdGhDbGFpbXMsIHRoaXMubG9nZ2VyLCB0aGlzLnBlcmZvcm1hbmNlQ2xpZW50LCBpbml0Q29ycmVsYXRpb25JZCkodGhpcy5wZXJmb3JtYW5jZUNsaWVudCwgaW5pdENvcnJlbGF0aW9uSWQpO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLmluaXRpYWxpemVkID0gdHJ1ZTtcclxuICAgICAgICB0aGlzLmV2ZW50SGFuZGxlci5lbWl0RXZlbnQoRXZlbnRUeXBlLklOSVRJQUxJWkVfRU5EKTtcclxuICAgICAgICBpbml0TWVhc3VyZW1lbnQuZW5kKHsgYWxsb3dOYXRpdmVCcm9rZXIsIHN1Y2Nlc3M6IHRydWUgfSk7XHJcbiAgICB9XHJcbiAgICAvLyAjcmVnaW9uIFJlZGlyZWN0IEZsb3dcclxuICAgIC8qKlxyXG4gICAgICogRXZlbnQgaGFuZGxlciBmdW5jdGlvbiB3aGljaCBhbGxvd3MgdXNlcnMgdG8gZmlyZSBldmVudHMgYWZ0ZXIgdGhlIFB1YmxpY0NsaWVudEFwcGxpY2F0aW9uIG9iamVjdFxyXG4gICAgICogaGFzIGxvYWRlZCBkdXJpbmcgcmVkaXJlY3QgZmxvd3MuIFRoaXMgc2hvdWxkIGJlIGludm9rZWQgb24gYWxsIHBhZ2UgbG9hZHMgaW52b2x2ZWQgaW4gcmVkaXJlY3RcclxuICAgICAqIGF1dGggZmxvd3MuXHJcbiAgICAgKiBAcGFyYW0gaGFzaCBIYXNoIHRvIHByb2Nlc3MuIERlZmF1bHRzIHRvIHRoZSBjdXJyZW50IHZhbHVlIG9mIHdpbmRvdy5sb2NhdGlvbi5oYXNoLiBPbmx5IG5lZWRzIHRvIGJlIHByb3ZpZGVkIGV4cGxpY2l0bHkgaWYgdGhlIHJlc3BvbnNlIHRvIGJlIGhhbmRsZWQgaXMgbm90IGNvbnRhaW5lZCBpbiB0aGUgY3VycmVudCB2YWx1ZS5cclxuICAgICAqIEByZXR1cm5zIFRva2VuIHJlc3BvbnNlIG9yIG51bGwuIElmIHRoZSByZXR1cm4gdmFsdWUgaXMgbnVsbCwgdGhlbiBubyBhdXRoIHJlZGlyZWN0IHdhcyBkZXRlY3RlZC5cclxuICAgICAqL1xyXG4gICAgYXN5bmMgaGFuZGxlUmVkaXJlY3RQcm9taXNlKGhhc2gpIHtcclxuICAgICAgICB0aGlzLmxvZ2dlci52ZXJib3NlKFwiaGFuZGxlUmVkaXJlY3RQcm9taXNlIGNhbGxlZFwiKTtcclxuICAgICAgICAvLyBCbG9jayB0b2tlbiBhY3F1aXNpdGlvbiBiZWZvcmUgaW5pdGlhbGl6ZSBoYXMgYmVlbiBjYWxsZWRcclxuICAgICAgICBibG9ja0FQSUNhbGxzQmVmb3JlSW5pdGlhbGl6ZSh0aGlzLmluaXRpYWxpemVkKTtcclxuICAgICAgICBpZiAodGhpcy5pc0Jyb3dzZXJFbnZpcm9ubWVudCkge1xyXG4gICAgICAgICAgICAvKipcclxuICAgICAgICAgICAgICogU3RvcmUgdGhlIHByb21pc2Ugb24gdGhlIFB1YmxpY0NsaWVudEFwcGxpY2F0aW9uIGluc3RhbmNlIGlmIHRoaXMgaXMgdGhlIGZpcnN0IGludm9jYXRpb24gb2YgaGFuZGxlUmVkaXJlY3RQcm9taXNlLFxyXG4gICAgICAgICAgICAgKiBvdGhlcndpc2UgcmV0dXJuIHRoZSBwcm9taXNlIGZyb20gdGhlIGZpcnN0IGludm9jYXRpb24uIFByZXZlbnRzIHJhY2UgY29uZGl0aW9ucyB3aGVuIGhhbmRsZVJlZGlyZWN0UHJvbWlzZSBpcyBjYWxsZWRcclxuICAgICAgICAgICAgICogc2V2ZXJhbCB0aW1lcyBjb25jdXJyZW50bHkuXHJcbiAgICAgICAgICAgICAqL1xyXG4gICAgICAgICAgICBjb25zdCByZWRpcmVjdFJlc3BvbnNlS2V5ID0gaGFzaCB8fCBcIlwiO1xyXG4gICAgICAgICAgICBsZXQgcmVzcG9uc2UgPSB0aGlzLnJlZGlyZWN0UmVzcG9uc2UuZ2V0KHJlZGlyZWN0UmVzcG9uc2VLZXkpO1xyXG4gICAgICAgICAgICBpZiAodHlwZW9mIHJlc3BvbnNlID09PSBcInVuZGVmaW5lZFwiKSB7XHJcbiAgICAgICAgICAgICAgICByZXNwb25zZSA9IHRoaXMuaGFuZGxlUmVkaXJlY3RQcm9taXNlSW50ZXJuYWwoaGFzaCk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnJlZGlyZWN0UmVzcG9uc2Uuc2V0KHJlZGlyZWN0UmVzcG9uc2VLZXksIHJlc3BvbnNlKTtcclxuICAgICAgICAgICAgICAgIHRoaXMubG9nZ2VyLnZlcmJvc2UoXCJoYW5kbGVSZWRpcmVjdFByb21pc2UgaGFzIGJlZW4gY2FsbGVkIGZvciB0aGUgZmlyc3QgdGltZSwgc3RvcmluZyB0aGUgcHJvbWlzZVwiKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHRoaXMubG9nZ2VyLnZlcmJvc2UoXCJoYW5kbGVSZWRpcmVjdFByb21pc2UgaGFzIGJlZW4gY2FsbGVkIHByZXZpb3VzbHksIHJldHVybmluZyB0aGUgcmVzdWx0IGZyb20gdGhlIGZpcnN0IGNhbGxcIik7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmV0dXJuIHJlc3BvbnNlO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLmxvZ2dlci52ZXJib3NlKFwiaGFuZGxlUmVkaXJlY3RQcm9taXNlIHJldHVybnMgbnVsbCwgbm90IGJyb3dzZXIgZW52aXJvbm1lbnRcIik7XHJcbiAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICB9XHJcbiAgICAvKipcclxuICAgICAqIFRoZSBpbnRlcm5hbCBkZXRhaWxzIG9mIGhhbmRsZVJlZGlyZWN0UHJvbWlzZS4gVGhpcyBpcyBzZXBhcmF0ZWQgb3V0IHRvIGEgaGVscGVyIHRvIGFsbG93IGhhbmRsZVJlZGlyZWN0UHJvbWlzZSB0byBtZW1vaXplIHJlcXVlc3RzXHJcbiAgICAgKiBAcGFyYW0gaGFzaFxyXG4gICAgICogQHJldHVybnNcclxuICAgICAqL1xyXG4gICAgYXN5bmMgaGFuZGxlUmVkaXJlY3RQcm9taXNlSW50ZXJuYWwoaGFzaCkge1xyXG4gICAgICAgIGNvbnN0IGxvZ2dlZEluQWNjb3VudHMgPSB0aGlzLmdldEFsbEFjY291bnRzKCk7XHJcbiAgICAgICAgY29uc3QgcmVxdWVzdCA9IHRoaXMuYnJvd3NlclN0b3JhZ2UuZ2V0Q2FjaGVkTmF0aXZlUmVxdWVzdCgpO1xyXG4gICAgICAgIGNvbnN0IHVzZU5hdGl2ZSA9IHJlcXVlc3QgJiZcclxuICAgICAgICAgICAgTmF0aXZlTWVzc2FnZUhhbmRsZXIuaXNOYXRpdmVBdmFpbGFibGUodGhpcy5jb25maWcsIHRoaXMubG9nZ2VyLCB0aGlzLm5hdGl2ZUV4dGVuc2lvblByb3ZpZGVyKSAmJlxyXG4gICAgICAgICAgICB0aGlzLm5hdGl2ZUV4dGVuc2lvblByb3ZpZGVyICYmXHJcbiAgICAgICAgICAgICFoYXNoO1xyXG4gICAgICAgIGNvbnN0IGNvcnJlbGF0aW9uSWQgPSB1c2VOYXRpdmVcclxuICAgICAgICAgICAgPyByZXF1ZXN0Py5jb3JyZWxhdGlvbklkXHJcbiAgICAgICAgICAgIDogdGhpcy5icm93c2VyU3RvcmFnZS5nZXRUZW1wb3JhcnlDYWNoZShUZW1wb3JhcnlDYWNoZUtleXMuQ09SUkVMQVRJT05fSUQsIHRydWUpIHx8IFwiXCI7XHJcbiAgICAgICAgY29uc3Qgcm9vdE1lYXN1cmVtZW50ID0gdGhpcy5wZXJmb3JtYW5jZUNsaWVudC5zdGFydE1lYXN1cmVtZW50KFBlcmZvcm1hbmNlRXZlbnRzLkFjcXVpcmVUb2tlblJlZGlyZWN0LCBjb3JyZWxhdGlvbklkKTtcclxuICAgICAgICB0aGlzLmV2ZW50SGFuZGxlci5lbWl0RXZlbnQoRXZlbnRUeXBlLkhBTkRMRV9SRURJUkVDVF9TVEFSVCwgSW50ZXJhY3Rpb25UeXBlLlJlZGlyZWN0KTtcclxuICAgICAgICBsZXQgcmVkaXJlY3RSZXNwb25zZTtcclxuICAgICAgICBpZiAodXNlTmF0aXZlICYmIHRoaXMubmF0aXZlRXh0ZW5zaW9uUHJvdmlkZXIpIHtcclxuICAgICAgICAgICAgdGhpcy5sb2dnZXIudHJhY2UoXCJoYW5kbGVSZWRpcmVjdFByb21pc2UgLSBhY3F1aXJpbmcgdG9rZW4gZnJvbSBuYXRpdmUgcGxhdGZvcm1cIik7XHJcbiAgICAgICAgICAgIGNvbnN0IG5hdGl2ZUNsaWVudCA9IG5ldyBOYXRpdmVJbnRlcmFjdGlvbkNsaWVudCh0aGlzLmNvbmZpZywgdGhpcy5icm93c2VyU3RvcmFnZSwgdGhpcy5icm93c2VyQ3J5cHRvLCB0aGlzLmxvZ2dlciwgdGhpcy5ldmVudEhhbmRsZXIsIHRoaXMubmF2aWdhdGlvbkNsaWVudCwgQXBpSWQuaGFuZGxlUmVkaXJlY3RQcm9taXNlLCB0aGlzLnBlcmZvcm1hbmNlQ2xpZW50LCB0aGlzLm5hdGl2ZUV4dGVuc2lvblByb3ZpZGVyLCByZXF1ZXN0LmFjY291bnRJZCwgdGhpcy5uYXRpdmVJbnRlcm5hbFN0b3JhZ2UsIHJlcXVlc3QuY29ycmVsYXRpb25JZCk7XHJcbiAgICAgICAgICAgIHJlZGlyZWN0UmVzcG9uc2UgPSBpbnZva2VBc3luYyhuYXRpdmVDbGllbnQuaGFuZGxlUmVkaXJlY3RQcm9taXNlLmJpbmQobmF0aXZlQ2xpZW50KSwgUGVyZm9ybWFuY2VFdmVudHMuSGFuZGxlTmF0aXZlUmVkaXJlY3RQcm9taXNlTWVhc3VyZW1lbnQsIHRoaXMubG9nZ2VyLCB0aGlzLnBlcmZvcm1hbmNlQ2xpZW50LCByb290TWVhc3VyZW1lbnQuZXZlbnQuY29ycmVsYXRpb25JZCkodGhpcy5wZXJmb3JtYW5jZUNsaWVudCwgcm9vdE1lYXN1cmVtZW50LmV2ZW50LmNvcnJlbGF0aW9uSWQpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5sb2dnZXIudHJhY2UoXCJoYW5kbGVSZWRpcmVjdFByb21pc2UgLSBhY3F1aXJpbmcgdG9rZW4gZnJvbSB3ZWIgZmxvd1wiKTtcclxuICAgICAgICAgICAgY29uc3QgcmVkaXJlY3RDbGllbnQgPSB0aGlzLmNyZWF0ZVJlZGlyZWN0Q2xpZW50KGNvcnJlbGF0aW9uSWQpO1xyXG4gICAgICAgICAgICByZWRpcmVjdFJlc3BvbnNlID0gaW52b2tlQXN5bmMocmVkaXJlY3RDbGllbnQuaGFuZGxlUmVkaXJlY3RQcm9taXNlLmJpbmQocmVkaXJlY3RDbGllbnQpLCBQZXJmb3JtYW5jZUV2ZW50cy5IYW5kbGVSZWRpcmVjdFByb21pc2VNZWFzdXJlbWVudCwgdGhpcy5sb2dnZXIsIHRoaXMucGVyZm9ybWFuY2VDbGllbnQsIHJvb3RNZWFzdXJlbWVudC5ldmVudC5jb3JyZWxhdGlvbklkKShoYXNoLCByb290TWVhc3VyZW1lbnQpO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gcmVkaXJlY3RSZXNwb25zZVxyXG4gICAgICAgICAgICAudGhlbigocmVzdWx0KSA9PiB7XHJcbiAgICAgICAgICAgIGlmIChyZXN1bHQpIHtcclxuICAgICAgICAgICAgICAgIC8vIEVtaXQgbG9naW4gZXZlbnQgaWYgbnVtYmVyIG9mIGFjY291bnRzIGNoYW5nZVxyXG4gICAgICAgICAgICAgICAgY29uc3QgaXNMb2dnaW5nSW4gPSBsb2dnZWRJbkFjY291bnRzLmxlbmd0aCA8IHRoaXMuZ2V0QWxsQWNjb3VudHMoKS5sZW5ndGg7XHJcbiAgICAgICAgICAgICAgICBpZiAoaXNMb2dnaW5nSW4pIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmV2ZW50SGFuZGxlci5lbWl0RXZlbnQoRXZlbnRUeXBlLkxPR0lOX1NVQ0NFU1MsIEludGVyYWN0aW9uVHlwZS5SZWRpcmVjdCwgcmVzdWx0KTtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmxvZ2dlci52ZXJib3NlKFwiaGFuZGxlUmVkaXJlY3RSZXNwb25zZSByZXR1cm5lZCByZXN1bHQsIGxvZ2luIHN1Y2Nlc3NcIik7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmV2ZW50SGFuZGxlci5lbWl0RXZlbnQoRXZlbnRUeXBlLkFDUVVJUkVfVE9LRU5fU1VDQ0VTUywgSW50ZXJhY3Rpb25UeXBlLlJlZGlyZWN0LCByZXN1bHQpO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMubG9nZ2VyLnZlcmJvc2UoXCJoYW5kbGVSZWRpcmVjdFJlc3BvbnNlIHJldHVybmVkIHJlc3VsdCwgYWNxdWlyZSB0b2tlbiBzdWNjZXNzXCIpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgcm9vdE1lYXN1cmVtZW50LmVuZCh7XHJcbiAgICAgICAgICAgICAgICAgICAgc3VjY2VzczogdHJ1ZSxcclxuICAgICAgICAgICAgICAgICAgICBhY2NvdW50VHlwZTogZ2V0QWNjb3VudFR5cGUocmVzdWx0LmFjY291bnQpLFxyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAvKlxyXG4gICAgICAgICAgICAgICAgICogSW5zdHJ1bWVudCBhbiBldmVudCBvbmx5IGlmIGFuIGVycm9yIGNvZGUgaXMgc2V0LiBPdGhlcndpc2UsIGRpc2NhcmQgaXQgd2hlbiB0aGUgcmVkaXJlY3QgcmVzcG9uc2VcclxuICAgICAgICAgICAgICAgICAqIGlzIGVtcHR5IGFuZCB0aGUgZXJyb3IgY29kZSBpcyBtaXNzaW5nLlxyXG4gICAgICAgICAgICAgICAgICovXHJcbiAgICAgICAgICAgICAgICBpZiAocm9vdE1lYXN1cmVtZW50LmV2ZW50LmVycm9yQ29kZSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHJvb3RNZWFzdXJlbWVudC5lbmQoeyBzdWNjZXNzOiBmYWxzZSB9KTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIHJvb3RNZWFzdXJlbWVudC5kaXNjYXJkKCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgdGhpcy5ldmVudEhhbmRsZXIuZW1pdEV2ZW50KEV2ZW50VHlwZS5IQU5ETEVfUkVESVJFQ1RfRU5ELCBJbnRlcmFjdGlvblR5cGUuUmVkaXJlY3QpO1xyXG4gICAgICAgICAgICByZXR1cm4gcmVzdWx0O1xyXG4gICAgICAgIH0pXHJcbiAgICAgICAgICAgIC5jYXRjaCgoZSkgPT4ge1xyXG4gICAgICAgICAgICBjb25zdCBldmVudEVycm9yID0gZTtcclxuICAgICAgICAgICAgLy8gRW1pdCBsb2dpbiBldmVudCBpZiB0aGVyZSBpcyBhbiBhY2NvdW50XHJcbiAgICAgICAgICAgIGlmIChsb2dnZWRJbkFjY291bnRzLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuZXZlbnRIYW5kbGVyLmVtaXRFdmVudChFdmVudFR5cGUuQUNRVUlSRV9UT0tFTl9GQUlMVVJFLCBJbnRlcmFjdGlvblR5cGUuUmVkaXJlY3QsIG51bGwsIGV2ZW50RXJyb3IpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5ldmVudEhhbmRsZXIuZW1pdEV2ZW50KEV2ZW50VHlwZS5MT0dJTl9GQUlMVVJFLCBJbnRlcmFjdGlvblR5cGUuUmVkaXJlY3QsIG51bGwsIGV2ZW50RXJyb3IpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHRoaXMuZXZlbnRIYW5kbGVyLmVtaXRFdmVudChFdmVudFR5cGUuSEFORExFX1JFRElSRUNUX0VORCwgSW50ZXJhY3Rpb25UeXBlLlJlZGlyZWN0KTtcclxuICAgICAgICAgICAgcm9vdE1lYXN1cmVtZW50LmVuZCh7XHJcbiAgICAgICAgICAgICAgICBzdWNjZXNzOiBmYWxzZSxcclxuICAgICAgICAgICAgfSwgZXZlbnRFcnJvcik7XHJcbiAgICAgICAgICAgIHRocm93IGU7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcbiAgICAvKipcclxuICAgICAqIFVzZSB3aGVuIHlvdSB3YW50IHRvIG9idGFpbiBhbiBhY2Nlc3NfdG9rZW4gZm9yIHlvdXIgQVBJIGJ5IHJlZGlyZWN0aW5nIHRoZSB1c2VyJ3MgYnJvd3NlciB3aW5kb3cgdG8gdGhlIGF1dGhvcml6YXRpb24gZW5kcG9pbnQuIFRoaXMgZnVuY3Rpb24gcmVkaXJlY3RzXHJcbiAgICAgKiB0aGUgcGFnZSwgc28gYW55IGNvZGUgdGhhdCBmb2xsb3dzIHRoaXMgZnVuY3Rpb24gd2lsbCBub3QgZXhlY3V0ZS5cclxuICAgICAqXHJcbiAgICAgKiBJTVBPUlRBTlQ6IEl0IGlzIE5PVCByZWNvbW1lbmRlZCB0byBoYXZlIGNvZGUgdGhhdCBpcyBkZXBlbmRlbnQgb24gdGhlIHJlc29sdXRpb24gb2YgdGhlIFByb21pc2UuIFRoaXMgZnVuY3Rpb24gd2lsbCBuYXZpZ2F0ZSBhd2F5IGZyb20gdGhlIGN1cnJlbnRcclxuICAgICAqIGJyb3dzZXIgd2luZG93LiBJdCBjdXJyZW50bHkgcmV0dXJucyBhIFByb21pc2UgaW4gb3JkZXIgdG8gcmVmbGVjdCB0aGUgYXN5bmNocm9ub3VzIG5hdHVyZSBvZiB0aGUgY29kZSBydW5uaW5nIGluIHRoaXMgZnVuY3Rpb24uXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHJlcXVlc3RcclxuICAgICAqL1xyXG4gICAgYXN5bmMgYWNxdWlyZVRva2VuUmVkaXJlY3QocmVxdWVzdCkge1xyXG4gICAgICAgIC8vIFByZWZsaWdodCByZXF1ZXN0XHJcbiAgICAgICAgY29uc3QgY29ycmVsYXRpb25JZCA9IHRoaXMuZ2V0UmVxdWVzdENvcnJlbGF0aW9uSWQocmVxdWVzdCk7XHJcbiAgICAgICAgdGhpcy5sb2dnZXIudmVyYm9zZShcImFjcXVpcmVUb2tlblJlZGlyZWN0IGNhbGxlZFwiLCBjb3JyZWxhdGlvbklkKTtcclxuICAgICAgICBjb25zdCBhdHJNZWFzdXJlbWVudCA9IHRoaXMucGVyZm9ybWFuY2VDbGllbnQuc3RhcnRNZWFzdXJlbWVudChQZXJmb3JtYW5jZUV2ZW50cy5BY3F1aXJlVG9rZW5QcmVSZWRpcmVjdCwgY29ycmVsYXRpb25JZCk7XHJcbiAgICAgICAgYXRyTWVhc3VyZW1lbnQuYWRkKHtcclxuICAgICAgICAgICAgYWNjb3VudFR5cGU6IGdldEFjY291bnRUeXBlKHJlcXVlc3QuYWNjb3VudCksXHJcbiAgICAgICAgICAgIHNjZW5hcmlvSWQ6IHJlcXVlc3Quc2NlbmFyaW9JZCxcclxuICAgICAgICB9KTtcclxuICAgICAgICAvLyBPdmVycmlkZSBvbiByZXF1ZXN0IG9ubHkgaWYgc2V0LCBhcyBvblJlZGlyZWN0TmF2aWdhdGUgZmllbGQgaXMgZGVwcmVjYXRlZFxyXG4gICAgICAgIGNvbnN0IG9uUmVkaXJlY3ROYXZpZ2F0ZUNiID0gcmVxdWVzdC5vblJlZGlyZWN0TmF2aWdhdGU7XHJcbiAgICAgICAgaWYgKG9uUmVkaXJlY3ROYXZpZ2F0ZUNiKSB7XHJcbiAgICAgICAgICAgIHJlcXVlc3Qub25SZWRpcmVjdE5hdmlnYXRlID0gKHVybCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgbmF2aWdhdGUgPSB0eXBlb2Ygb25SZWRpcmVjdE5hdmlnYXRlQ2IgPT09IFwiZnVuY3Rpb25cIlxyXG4gICAgICAgICAgICAgICAgICAgID8gb25SZWRpcmVjdE5hdmlnYXRlQ2IodXJsKVxyXG4gICAgICAgICAgICAgICAgICAgIDogdW5kZWZpbmVkO1xyXG4gICAgICAgICAgICAgICAgaWYgKG5hdmlnYXRlICE9PSBmYWxzZSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGF0ck1lYXN1cmVtZW50LmVuZCh7IHN1Y2Nlc3M6IHRydWUgfSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICBhdHJNZWFzdXJlbWVudC5kaXNjYXJkKCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gbmF2aWdhdGU7XHJcbiAgICAgICAgICAgIH07XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICBjb25zdCBjb25maWdPblJlZGlyZWN0TmF2aWdhdGVDYiA9IHRoaXMuY29uZmlnLmF1dGgub25SZWRpcmVjdE5hdmlnYXRlO1xyXG4gICAgICAgICAgICB0aGlzLmNvbmZpZy5hdXRoLm9uUmVkaXJlY3ROYXZpZ2F0ZSA9ICh1cmwpID0+IHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IG5hdmlnYXRlID0gdHlwZW9mIGNvbmZpZ09uUmVkaXJlY3ROYXZpZ2F0ZUNiID09PSBcImZ1bmN0aW9uXCJcclxuICAgICAgICAgICAgICAgICAgICA/IGNvbmZpZ09uUmVkaXJlY3ROYXZpZ2F0ZUNiKHVybClcclxuICAgICAgICAgICAgICAgICAgICA6IHVuZGVmaW5lZDtcclxuICAgICAgICAgICAgICAgIGlmIChuYXZpZ2F0ZSAhPT0gZmFsc2UpIHtcclxuICAgICAgICAgICAgICAgICAgICBhdHJNZWFzdXJlbWVudC5lbmQoeyBzdWNjZXNzOiB0cnVlIH0pO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgYXRyTWVhc3VyZW1lbnQuZGlzY2FyZCgpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIG5hdmlnYXRlO1xyXG4gICAgICAgICAgICB9O1xyXG4gICAgICAgIH1cclxuICAgICAgICAvLyBJZiBsb2dnZWQgaW4sIGVtaXQgYWNxdWlyZSB0b2tlbiBldmVudHNcclxuICAgICAgICBjb25zdCBpc0xvZ2dlZEluID0gdGhpcy5nZXRBbGxBY2NvdW50cygpLmxlbmd0aCA+IDA7XHJcbiAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgcmVkaXJlY3RQcmVmbGlnaHRDaGVjayh0aGlzLmluaXRpYWxpemVkLCB0aGlzLmNvbmZpZyk7XHJcbiAgICAgICAgICAgIHRoaXMuYnJvd3NlclN0b3JhZ2Uuc2V0SW50ZXJhY3Rpb25JblByb2dyZXNzKHRydWUpO1xyXG4gICAgICAgICAgICBpZiAoaXNMb2dnZWRJbikge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5ldmVudEhhbmRsZXIuZW1pdEV2ZW50KEV2ZW50VHlwZS5BQ1FVSVJFX1RPS0VOX1NUQVJULCBJbnRlcmFjdGlvblR5cGUuUmVkaXJlY3QsIHJlcXVlc3QpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5ldmVudEhhbmRsZXIuZW1pdEV2ZW50KEV2ZW50VHlwZS5MT0dJTl9TVEFSVCwgSW50ZXJhY3Rpb25UeXBlLlJlZGlyZWN0LCByZXF1ZXN0KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBsZXQgcmVzdWx0O1xyXG4gICAgICAgICAgICBpZiAodGhpcy5uYXRpdmVFeHRlbnNpb25Qcm92aWRlciAmJiB0aGlzLmNhblVzZU5hdGl2ZShyZXF1ZXN0KSkge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgbmF0aXZlQ2xpZW50ID0gbmV3IE5hdGl2ZUludGVyYWN0aW9uQ2xpZW50KHRoaXMuY29uZmlnLCB0aGlzLmJyb3dzZXJTdG9yYWdlLCB0aGlzLmJyb3dzZXJDcnlwdG8sIHRoaXMubG9nZ2VyLCB0aGlzLmV2ZW50SGFuZGxlciwgdGhpcy5uYXZpZ2F0aW9uQ2xpZW50LCBBcGlJZC5hY3F1aXJlVG9rZW5SZWRpcmVjdCwgdGhpcy5wZXJmb3JtYW5jZUNsaWVudCwgdGhpcy5uYXRpdmVFeHRlbnNpb25Qcm92aWRlciwgdGhpcy5nZXROYXRpdmVBY2NvdW50SWQocmVxdWVzdCksIHRoaXMubmF0aXZlSW50ZXJuYWxTdG9yYWdlLCBjb3JyZWxhdGlvbklkKTtcclxuICAgICAgICAgICAgICAgIHJlc3VsdCA9IG5hdGl2ZUNsaWVudFxyXG4gICAgICAgICAgICAgICAgICAgIC5hY3F1aXJlVG9rZW5SZWRpcmVjdChyZXF1ZXN0LCBhdHJNZWFzdXJlbWVudClcclxuICAgICAgICAgICAgICAgICAgICAuY2F0Y2goKGUpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoZSBpbnN0YW5jZW9mIE5hdGl2ZUF1dGhFcnJvciAmJlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBpc0ZhdGFsTmF0aXZlQXV0aEVycm9yKGUpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubmF0aXZlRXh0ZW5zaW9uUHJvdmlkZXIgPSB1bmRlZmluZWQ7IC8vIElmIGV4dGVuc2lvbiBnZXRzIHVuaW5zdGFsbGVkIGR1cmluZyBzZXNzaW9uIHByZXZlbnQgZnV0dXJlIHJlcXVlc3RzIGZyb20gY29udGludWluZyB0byBhdHRlbXB0XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHJlZGlyZWN0Q2xpZW50ID0gdGhpcy5jcmVhdGVSZWRpcmVjdENsaWVudChjb3JyZWxhdGlvbklkKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlZGlyZWN0Q2xpZW50LmFjcXVpcmVUb2tlbihyZXF1ZXN0KTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoZSBpbnN0YW5jZW9mIEludGVyYWN0aW9uUmVxdWlyZWRBdXRoRXJyb3IpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5sb2dnZXIudmVyYm9zZShcImFjcXVpcmVUb2tlblJlZGlyZWN0IC0gUmVzb2x2aW5nIGludGVyYWN0aW9uIHJlcXVpcmVkIGVycm9yIHRocm93biBieSBuYXRpdmUgYnJva2VyIGJ5IGZhbGxpbmcgYmFjayB0byB3ZWIgZmxvd1wiKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgcmVkaXJlY3RDbGllbnQgPSB0aGlzLmNyZWF0ZVJlZGlyZWN0Q2xpZW50KGNvcnJlbGF0aW9uSWQpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVkaXJlY3RDbGllbnQuYWNxdWlyZVRva2VuKHJlcXVlc3QpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmJyb3dzZXJTdG9yYWdlLnNldEludGVyYWN0aW9uSW5Qcm9ncmVzcyhmYWxzZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgZTtcclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgcmVkaXJlY3RDbGllbnQgPSB0aGlzLmNyZWF0ZVJlZGlyZWN0Q2xpZW50KGNvcnJlbGF0aW9uSWQpO1xyXG4gICAgICAgICAgICAgICAgcmVzdWx0ID0gcmVkaXJlY3RDbGllbnQuYWNxdWlyZVRva2VuKHJlcXVlc3QpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJldHVybiBhd2FpdCByZXN1bHQ7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNhdGNoIChlKSB7XHJcbiAgICAgICAgICAgIGF0ck1lYXN1cmVtZW50LmVuZCh7IHN1Y2Nlc3M6IGZhbHNlIH0sIGUpO1xyXG4gICAgICAgICAgICBpZiAoaXNMb2dnZWRJbikge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5ldmVudEhhbmRsZXIuZW1pdEV2ZW50KEV2ZW50VHlwZS5BQ1FVSVJFX1RPS0VOX0ZBSUxVUkUsIEludGVyYWN0aW9uVHlwZS5SZWRpcmVjdCwgbnVsbCwgZSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmV2ZW50SGFuZGxlci5lbWl0RXZlbnQoRXZlbnRUeXBlLkxPR0lOX0ZBSUxVUkUsIEludGVyYWN0aW9uVHlwZS5SZWRpcmVjdCwgbnVsbCwgZSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgdGhyb3cgZTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICAvLyAjZW5kcmVnaW9uXHJcbiAgICAvLyAjcmVnaW9uIFBvcHVwIEZsb3dcclxuICAgIC8qKlxyXG4gICAgICogVXNlIHdoZW4geW91IHdhbnQgdG8gb2J0YWluIGFuIGFjY2Vzc190b2tlbiBmb3IgeW91ciBBUEkgdmlhIG9wZW5pbmcgYSBwb3B1cCB3aW5kb3cgaW4gdGhlIHVzZXIncyBicm93c2VyXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHJlcXVlc3RcclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJucyBBIHByb21pc2UgdGhhdCBpcyBmdWxmaWxsZWQgd2hlbiB0aGlzIGZ1bmN0aW9uIGhhcyBjb21wbGV0ZWQsIG9yIHJlamVjdGVkIGlmIGFuIGVycm9yIHdhcyByYWlzZWQuXHJcbiAgICAgKi9cclxuICAgIGFjcXVpcmVUb2tlblBvcHVwKHJlcXVlc3QpIHtcclxuICAgICAgICBjb25zdCBjb3JyZWxhdGlvbklkID0gdGhpcy5nZXRSZXF1ZXN0Q29ycmVsYXRpb25JZChyZXF1ZXN0KTtcclxuICAgICAgICBjb25zdCBhdFBvcHVwTWVhc3VyZW1lbnQgPSB0aGlzLnBlcmZvcm1hbmNlQ2xpZW50LnN0YXJ0TWVhc3VyZW1lbnQoUGVyZm9ybWFuY2VFdmVudHMuQWNxdWlyZVRva2VuUG9wdXAsIGNvcnJlbGF0aW9uSWQpO1xyXG4gICAgICAgIGF0UG9wdXBNZWFzdXJlbWVudC5hZGQoe1xyXG4gICAgICAgICAgICBzY2VuYXJpb0lkOiByZXF1ZXN0LnNjZW5hcmlvSWQsXHJcbiAgICAgICAgICAgIGFjY291bnRUeXBlOiBnZXRBY2NvdW50VHlwZShyZXF1ZXN0LmFjY291bnQpLFxyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgIHRoaXMubG9nZ2VyLnZlcmJvc2UoXCJhY3F1aXJlVG9rZW5Qb3B1cCBjYWxsZWRcIiwgY29ycmVsYXRpb25JZCk7XHJcbiAgICAgICAgICAgIHByZWZsaWdodENoZWNrKHRoaXMuaW5pdGlhbGl6ZWQsIGF0UG9wdXBNZWFzdXJlbWVudCk7XHJcbiAgICAgICAgICAgIHRoaXMuYnJvd3NlclN0b3JhZ2Uuc2V0SW50ZXJhY3Rpb25JblByb2dyZXNzKHRydWUpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjYXRjaCAoZSkge1xyXG4gICAgICAgICAgICAvLyBTaW5jZSB0aGlzIGZ1bmN0aW9uIGlzIHN5bmNyb25vdXMgd2UgbmVlZCB0byByZWplY3RcclxuICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KGUpO1xyXG4gICAgICAgIH1cclxuICAgICAgICAvLyBJZiBsb2dnZWQgaW4sIGVtaXQgYWNxdWlyZSB0b2tlbiBldmVudHNcclxuICAgICAgICBjb25zdCBsb2dnZWRJbkFjY291bnRzID0gdGhpcy5nZXRBbGxBY2NvdW50cygpO1xyXG4gICAgICAgIGlmIChsb2dnZWRJbkFjY291bnRzLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgdGhpcy5ldmVudEhhbmRsZXIuZW1pdEV2ZW50KEV2ZW50VHlwZS5BQ1FVSVJFX1RPS0VOX1NUQVJULCBJbnRlcmFjdGlvblR5cGUuUG9wdXAsIHJlcXVlc3QpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5ldmVudEhhbmRsZXIuZW1pdEV2ZW50KEV2ZW50VHlwZS5MT0dJTl9TVEFSVCwgSW50ZXJhY3Rpb25UeXBlLlBvcHVwLCByZXF1ZXN0KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgbGV0IHJlc3VsdDtcclxuICAgICAgICBpZiAodGhpcy5jYW5Vc2VOYXRpdmUocmVxdWVzdCkpIHtcclxuICAgICAgICAgICAgcmVzdWx0ID0gdGhpcy5hY3F1aXJlVG9rZW5OYXRpdmUoe1xyXG4gICAgICAgICAgICAgICAgLi4ucmVxdWVzdCxcclxuICAgICAgICAgICAgICAgIGNvcnJlbGF0aW9uSWQsXHJcbiAgICAgICAgICAgIH0sIEFwaUlkLmFjcXVpcmVUb2tlblBvcHVwKVxyXG4gICAgICAgICAgICAgICAgLnRoZW4oKHJlc3BvbnNlKSA9PiB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmJyb3dzZXJTdG9yYWdlLnNldEludGVyYWN0aW9uSW5Qcm9ncmVzcyhmYWxzZSk7XHJcbiAgICAgICAgICAgICAgICBhdFBvcHVwTWVhc3VyZW1lbnQuZW5kKHtcclxuICAgICAgICAgICAgICAgICAgICBzdWNjZXNzOiB0cnVlLFxyXG4gICAgICAgICAgICAgICAgICAgIGlzTmF0aXZlQnJva2VyOiB0cnVlLFxyXG4gICAgICAgICAgICAgICAgICAgIGFjY291bnRUeXBlOiBnZXRBY2NvdW50VHlwZShyZXNwb25zZS5hY2NvdW50KSxcclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHJlc3BvbnNlO1xyXG4gICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICAgICAgLmNhdGNoKChlKSA9PiB7XHJcbiAgICAgICAgICAgICAgICBpZiAoZSBpbnN0YW5jZW9mIE5hdGl2ZUF1dGhFcnJvciAmJlxyXG4gICAgICAgICAgICAgICAgICAgIGlzRmF0YWxOYXRpdmVBdXRoRXJyb3IoZSkpIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLm5hdGl2ZUV4dGVuc2lvblByb3ZpZGVyID0gdW5kZWZpbmVkOyAvLyBJZiBleHRlbnNpb24gZ2V0cyB1bmluc3RhbGxlZCBkdXJpbmcgc2Vzc2lvbiBwcmV2ZW50IGZ1dHVyZSByZXF1ZXN0cyBmcm9tIGNvbnRpbnVpbmcgdG8gYXR0ZW1wdFxyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHBvcHVwQ2xpZW50ID0gdGhpcy5jcmVhdGVQb3B1cENsaWVudChjb3JyZWxhdGlvbklkKTtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gcG9wdXBDbGllbnQuYWNxdWlyZVRva2VuKHJlcXVlc3QpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgZWxzZSBpZiAoZSBpbnN0YW5jZW9mIEludGVyYWN0aW9uUmVxdWlyZWRBdXRoRXJyb3IpIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmxvZ2dlci52ZXJib3NlKFwiYWNxdWlyZVRva2VuUG9wdXAgLSBSZXNvbHZpbmcgaW50ZXJhY3Rpb24gcmVxdWlyZWQgZXJyb3IgdGhyb3duIGJ5IG5hdGl2ZSBicm9rZXIgYnkgZmFsbGluZyBiYWNrIHRvIHdlYiBmbG93XCIpO1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHBvcHVwQ2xpZW50ID0gdGhpcy5jcmVhdGVQb3B1cENsaWVudChjb3JyZWxhdGlvbklkKTtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gcG9wdXBDbGllbnQuYWNxdWlyZVRva2VuKHJlcXVlc3QpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgdGhpcy5icm93c2VyU3RvcmFnZS5zZXRJbnRlcmFjdGlvbkluUHJvZ3Jlc3MoZmFsc2UpO1xyXG4gICAgICAgICAgICAgICAgdGhyb3cgZTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICBjb25zdCBwb3B1cENsaWVudCA9IHRoaXMuY3JlYXRlUG9wdXBDbGllbnQoY29ycmVsYXRpb25JZCk7XHJcbiAgICAgICAgICAgIHJlc3VsdCA9IHBvcHVwQ2xpZW50LmFjcXVpcmVUb2tlbihyZXF1ZXN0KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHJlc3VsdFxyXG4gICAgICAgICAgICAudGhlbigocmVzdWx0KSA9PiB7XHJcbiAgICAgICAgICAgIC8qXHJcbiAgICAgICAgICAgICAqICBJZiBsb2dnZWQgaW4sIGVtaXQgYWNxdWlyZSB0b2tlbiBldmVudHNcclxuICAgICAgICAgICAgICovXHJcbiAgICAgICAgICAgIGNvbnN0IGlzTG9nZ2luZ0luID0gbG9nZ2VkSW5BY2NvdW50cy5sZW5ndGggPCB0aGlzLmdldEFsbEFjY291bnRzKCkubGVuZ3RoO1xyXG4gICAgICAgICAgICBpZiAoaXNMb2dnaW5nSW4pIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuZXZlbnRIYW5kbGVyLmVtaXRFdmVudChFdmVudFR5cGUuTE9HSU5fU1VDQ0VTUywgSW50ZXJhY3Rpb25UeXBlLlBvcHVwLCByZXN1bHQpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5ldmVudEhhbmRsZXIuZW1pdEV2ZW50KEV2ZW50VHlwZS5BQ1FVSVJFX1RPS0VOX1NVQ0NFU1MsIEludGVyYWN0aW9uVHlwZS5Qb3B1cCwgcmVzdWx0KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBhdFBvcHVwTWVhc3VyZW1lbnQuZW5kKHtcclxuICAgICAgICAgICAgICAgIHN1Y2Nlc3M6IHRydWUsXHJcbiAgICAgICAgICAgICAgICBhY2Nlc3NUb2tlblNpemU6IHJlc3VsdC5hY2Nlc3NUb2tlbi5sZW5ndGgsXHJcbiAgICAgICAgICAgICAgICBpZFRva2VuU2l6ZTogcmVzdWx0LmlkVG9rZW4ubGVuZ3RoLFxyXG4gICAgICAgICAgICAgICAgYWNjb3VudFR5cGU6IGdldEFjY291bnRUeXBlKHJlc3VsdC5hY2NvdW50KSxcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIHJldHVybiByZXN1bHQ7XHJcbiAgICAgICAgfSlcclxuICAgICAgICAgICAgLmNhdGNoKChlKSA9PiB7XHJcbiAgICAgICAgICAgIGlmIChsb2dnZWRJbkFjY291bnRzLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuZXZlbnRIYW5kbGVyLmVtaXRFdmVudChFdmVudFR5cGUuQUNRVUlSRV9UT0tFTl9GQUlMVVJFLCBJbnRlcmFjdGlvblR5cGUuUG9wdXAsIG51bGwsIGUpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5ldmVudEhhbmRsZXIuZW1pdEV2ZW50KEV2ZW50VHlwZS5MT0dJTl9GQUlMVVJFLCBJbnRlcmFjdGlvblR5cGUuUG9wdXAsIG51bGwsIGUpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGF0UG9wdXBNZWFzdXJlbWVudC5lbmQoe1xyXG4gICAgICAgICAgICAgICAgc3VjY2VzczogZmFsc2UsXHJcbiAgICAgICAgICAgIH0sIGUpO1xyXG4gICAgICAgICAgICAvLyBTaW5jZSB0aGlzIGZ1bmN0aW9uIGlzIHN5bmNyb25vdXMgd2UgbmVlZCB0byByZWplY3RcclxuICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KGUpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG4gICAgdHJhY2tQYWdlVmlzaWJpbGl0eVdpdGhNZWFzdXJlbWVudCgpIHtcclxuICAgICAgICBjb25zdCBtZWFzdXJlbWVudCA9IHRoaXMuc3NvU2lsZW50TWVhc3VyZW1lbnQgfHxcclxuICAgICAgICAgICAgdGhpcy5hY3F1aXJlVG9rZW5CeUNvZGVBc3luY01lYXN1cmVtZW50O1xyXG4gICAgICAgIGlmICghbWVhc3VyZW1lbnQpIHtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLmxvZ2dlci5pbmZvKFwiUGVyZjogVmlzaWJpbGl0eSBjaGFuZ2UgZGV0ZWN0ZWQgaW4gXCIsIG1lYXN1cmVtZW50LmV2ZW50Lm5hbWUpO1xyXG4gICAgICAgIG1lYXN1cmVtZW50LmluY3JlbWVudCh7XHJcbiAgICAgICAgICAgIHZpc2liaWxpdHlDaGFuZ2VDb3VudDogMSxcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuICAgIC8vICNlbmRyZWdpb25cclxuICAgIC8vICNyZWdpb24gU2lsZW50IEZsb3dcclxuICAgIC8qKlxyXG4gICAgICogVGhpcyBmdW5jdGlvbiB1c2VzIGEgaGlkZGVuIGlmcmFtZSB0byBmZXRjaCBhbiBhdXRob3JpemF0aW9uIGNvZGUgZnJvbSB0aGUgZVNUUy4gVGhlcmUgYXJlIGNhc2VzIHdoZXJlIHRoaXMgbWF5IG5vdCB3b3JrOlxyXG4gICAgICogLSBBbnkgYnJvd3NlciB1c2luZyBhIGZvcm0gb2YgSW50ZWxsaWdlbnQgVHJhY2tpbmcgUHJldmVudGlvblxyXG4gICAgICogLSBJZiB0aGVyZSBpcyBub3QgYW4gZXN0YWJsaXNoZWQgc2Vzc2lvbiB3aXRoIHRoZSBzZXJ2aWNlXHJcbiAgICAgKlxyXG4gICAgICogSW4gdGhlc2UgY2FzZXMsIHRoZSByZXF1ZXN0IG11c3QgYmUgZG9uZSBpbnNpZGUgYSBwb3B1cCBvciBmdWxsIGZyYW1lIHJlZGlyZWN0LlxyXG4gICAgICpcclxuICAgICAqIEZvciB0aGUgY2FzZXMgd2hlcmUgaW50ZXJhY3Rpb24gaXMgcmVxdWlyZWQsIHlvdSBjYW5ub3Qgc2VuZCBhIHJlcXVlc3Qgd2l0aCBwcm9tcHQ9bm9uZS5cclxuICAgICAqXHJcbiAgICAgKiBJZiB5b3VyIHJlZnJlc2ggdG9rZW4gaGFzIGV4cGlyZWQsIHlvdSBjYW4gdXNlIHRoaXMgZnVuY3Rpb24gdG8gZmV0Y2ggYSBuZXcgc2V0IG9mIHRva2VucyBzaWxlbnRseSBhcyBsb25nIGFzXHJcbiAgICAgKiB5b3Ugc2Vzc2lvbiBvbiB0aGUgc2VydmVyIHN0aWxsIGV4aXN0cy5cclxuICAgICAqIEBwYXJhbSByZXF1ZXN0IHtAbGluayBTc29TaWxlbnRSZXF1ZXN0fVxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm5zIEEgcHJvbWlzZSB0aGF0IGlzIGZ1bGZpbGxlZCB3aGVuIHRoaXMgZnVuY3Rpb24gaGFzIGNvbXBsZXRlZCwgb3IgcmVqZWN0ZWQgaWYgYW4gZXJyb3Igd2FzIHJhaXNlZC5cclxuICAgICAqL1xyXG4gICAgYXN5bmMgc3NvU2lsZW50KHJlcXVlc3QpIHtcclxuICAgICAgICBjb25zdCBjb3JyZWxhdGlvbklkID0gdGhpcy5nZXRSZXF1ZXN0Q29ycmVsYXRpb25JZChyZXF1ZXN0KTtcclxuICAgICAgICBjb25zdCB2YWxpZFJlcXVlc3QgPSB7XHJcbiAgICAgICAgICAgIC4uLnJlcXVlc3QsXHJcbiAgICAgICAgICAgIC8vIHdpbGwgYmUgUHJvbXB0VmFsdWUuTk9ORSBvciBQcm9tcHRWYWx1ZS5OT19TRVNTSU9OXHJcbiAgICAgICAgICAgIHByb21wdDogcmVxdWVzdC5wcm9tcHQsXHJcbiAgICAgICAgICAgIGNvcnJlbGF0aW9uSWQ6IGNvcnJlbGF0aW9uSWQsXHJcbiAgICAgICAgfTtcclxuICAgICAgICB0aGlzLnNzb1NpbGVudE1lYXN1cmVtZW50ID0gdGhpcy5wZXJmb3JtYW5jZUNsaWVudC5zdGFydE1lYXN1cmVtZW50KFBlcmZvcm1hbmNlRXZlbnRzLlNzb1NpbGVudCwgY29ycmVsYXRpb25JZCk7XHJcbiAgICAgICAgdGhpcy5zc29TaWxlbnRNZWFzdXJlbWVudD8uYWRkKHtcclxuICAgICAgICAgICAgc2NlbmFyaW9JZDogcmVxdWVzdC5zY2VuYXJpb0lkLFxyXG4gICAgICAgICAgICBhY2NvdW50VHlwZTogZ2V0QWNjb3VudFR5cGUocmVxdWVzdC5hY2NvdW50KSxcclxuICAgICAgICB9KTtcclxuICAgICAgICBwcmVmbGlnaHRDaGVjayh0aGlzLmluaXRpYWxpemVkLCB0aGlzLnNzb1NpbGVudE1lYXN1cmVtZW50KTtcclxuICAgICAgICB0aGlzLnNzb1NpbGVudE1lYXN1cmVtZW50Py5pbmNyZW1lbnQoe1xyXG4gICAgICAgICAgICB2aXNpYmlsaXR5Q2hhbmdlQ291bnQ6IDAsXHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcihcInZpc2liaWxpdHljaGFuZ2VcIiwgdGhpcy50cmFja1BhZ2VWaXNpYmlsaXR5V2l0aE1lYXN1cmVtZW50KTtcclxuICAgICAgICB0aGlzLmxvZ2dlci52ZXJib3NlKFwic3NvU2lsZW50IGNhbGxlZFwiLCBjb3JyZWxhdGlvbklkKTtcclxuICAgICAgICB0aGlzLmV2ZW50SGFuZGxlci5lbWl0RXZlbnQoRXZlbnRUeXBlLlNTT19TSUxFTlRfU1RBUlQsIEludGVyYWN0aW9uVHlwZS5TaWxlbnQsIHZhbGlkUmVxdWVzdCk7XHJcbiAgICAgICAgbGV0IHJlc3VsdDtcclxuICAgICAgICBpZiAodGhpcy5jYW5Vc2VOYXRpdmUodmFsaWRSZXF1ZXN0KSkge1xyXG4gICAgICAgICAgICByZXN1bHQgPSB0aGlzLmFjcXVpcmVUb2tlbk5hdGl2ZSh2YWxpZFJlcXVlc3QsIEFwaUlkLnNzb1NpbGVudCkuY2F0Y2goKGUpID0+IHtcclxuICAgICAgICAgICAgICAgIC8vIElmIG5hdGl2ZSB0b2tlbiBhY3F1aXNpdGlvbiBmYWlscyBmb3IgYXZhaWxhYmlsaXR5IHJlYXNvbnMgZmFsbGJhY2sgdG8gc3RhbmRhcmQgZmxvd1xyXG4gICAgICAgICAgICAgICAgaWYgKGUgaW5zdGFuY2VvZiBOYXRpdmVBdXRoRXJyb3IgJiYgaXNGYXRhbE5hdGl2ZUF1dGhFcnJvcihlKSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMubmF0aXZlRXh0ZW5zaW9uUHJvdmlkZXIgPSB1bmRlZmluZWQ7IC8vIElmIGV4dGVuc2lvbiBnZXRzIHVuaW5zdGFsbGVkIGR1cmluZyBzZXNzaW9uIHByZXZlbnQgZnV0dXJlIHJlcXVlc3RzIGZyb20gY29udGludWluZyB0byBhdHRlbXB0XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3Qgc2lsZW50SWZyYW1lQ2xpZW50ID0gdGhpcy5jcmVhdGVTaWxlbnRJZnJhbWVDbGllbnQodmFsaWRSZXF1ZXN0LmNvcnJlbGF0aW9uSWQpO1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBzaWxlbnRJZnJhbWVDbGllbnQuYWNxdWlyZVRva2VuKHZhbGlkUmVxdWVzdCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB0aHJvdyBlO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHNpbGVudElmcmFtZUNsaWVudCA9IHRoaXMuY3JlYXRlU2lsZW50SWZyYW1lQ2xpZW50KHZhbGlkUmVxdWVzdC5jb3JyZWxhdGlvbklkKTtcclxuICAgICAgICAgICAgcmVzdWx0ID0gc2lsZW50SWZyYW1lQ2xpZW50LmFjcXVpcmVUb2tlbih2YWxpZFJlcXVlc3QpO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gcmVzdWx0XHJcbiAgICAgICAgICAgIC50aGVuKChyZXNwb25zZSkgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLmV2ZW50SGFuZGxlci5lbWl0RXZlbnQoRXZlbnRUeXBlLlNTT19TSUxFTlRfU1VDQ0VTUywgSW50ZXJhY3Rpb25UeXBlLlNpbGVudCwgcmVzcG9uc2UpO1xyXG4gICAgICAgICAgICB0aGlzLnNzb1NpbGVudE1lYXN1cmVtZW50Py5lbmQoe1xyXG4gICAgICAgICAgICAgICAgc3VjY2VzczogdHJ1ZSxcclxuICAgICAgICAgICAgICAgIGlzTmF0aXZlQnJva2VyOiByZXNwb25zZS5mcm9tTmF0aXZlQnJva2VyLFxyXG4gICAgICAgICAgICAgICAgYWNjZXNzVG9rZW5TaXplOiByZXNwb25zZS5hY2Nlc3NUb2tlbi5sZW5ndGgsXHJcbiAgICAgICAgICAgICAgICBpZFRva2VuU2l6ZTogcmVzcG9uc2UuaWRUb2tlbi5sZW5ndGgsXHJcbiAgICAgICAgICAgICAgICBhY2NvdW50VHlwZTogZ2V0QWNjb3VudFR5cGUocmVzcG9uc2UuYWNjb3VudCksXHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICByZXR1cm4gcmVzcG9uc2U7XHJcbiAgICAgICAgfSlcclxuICAgICAgICAgICAgLmNhdGNoKChlKSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMuZXZlbnRIYW5kbGVyLmVtaXRFdmVudChFdmVudFR5cGUuU1NPX1NJTEVOVF9GQUlMVVJFLCBJbnRlcmFjdGlvblR5cGUuU2lsZW50LCBudWxsLCBlKTtcclxuICAgICAgICAgICAgdGhpcy5zc29TaWxlbnRNZWFzdXJlbWVudD8uZW5kKHtcclxuICAgICAgICAgICAgICAgIHN1Y2Nlc3M6IGZhbHNlLFxyXG4gICAgICAgICAgICB9LCBlKTtcclxuICAgICAgICAgICAgdGhyb3cgZTtcclxuICAgICAgICB9KVxyXG4gICAgICAgICAgICAuZmluYWxseSgoKSA9PiB7XHJcbiAgICAgICAgICAgIGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJ2aXNpYmlsaXR5Y2hhbmdlXCIsIHRoaXMudHJhY2tQYWdlVmlzaWJpbGl0eVdpdGhNZWFzdXJlbWVudCk7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcbiAgICAvKipcclxuICAgICAqIFRoaXMgZnVuY3Rpb24gcmVkZWVtcyBhbiBhdXRob3JpemF0aW9uIGNvZGUgKHBhc3NlZCBhcyBjb2RlKSBmcm9tIHRoZSBlU1RTIHRva2VuIGVuZHBvaW50LlxyXG4gICAgICogVGhpcyBhdXRob3JpemF0aW9uIGNvZGUgc2hvdWxkIGJlIGFjcXVpcmVkIHNlcnZlci1zaWRlIHVzaW5nIGEgY29uZmlkZW50aWFsIGNsaWVudCB0byBhY3F1aXJlIGEgc3BhX2NvZGUuXHJcbiAgICAgKiBUaGlzIEFQSSBpcyBub3QgaW5kZW5kZWQgZm9yIG5vcm1hbCBhdXRob3JpemF0aW9uIGNvZGUgYWNxdWlzaXRpb24gYW5kIHJlZGVtcHRpb24uXHJcbiAgICAgKlxyXG4gICAgICogUmVkZW1wdGlvbiBvZiB0aGlzIGF1dGhvcml6YXRpb24gY29kZSB3aWxsIG5vdCByZXF1aXJlIFBLQ0UsIGFzIGl0IHdhcyBhY3F1aXJlZCBieSBhIGNvbmZpZGVudGlhbCBjbGllbnQuXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHJlcXVlc3Qge0BsaW5rIEF1dGhvcml6YXRpb25Db2RlUmVxdWVzdH1cclxuICAgICAqIEByZXR1cm5zIEEgcHJvbWlzZSB0aGF0IGlzIGZ1bGZpbGxlZCB3aGVuIHRoaXMgZnVuY3Rpb24gaGFzIGNvbXBsZXRlZCwgb3IgcmVqZWN0ZWQgaWYgYW4gZXJyb3Igd2FzIHJhaXNlZC5cclxuICAgICAqL1xyXG4gICAgYXN5bmMgYWNxdWlyZVRva2VuQnlDb2RlKHJlcXVlc3QpIHtcclxuICAgICAgICBjb25zdCBjb3JyZWxhdGlvbklkID0gdGhpcy5nZXRSZXF1ZXN0Q29ycmVsYXRpb25JZChyZXF1ZXN0KTtcclxuICAgICAgICB0aGlzLmxvZ2dlci50cmFjZShcImFjcXVpcmVUb2tlbkJ5Q29kZSBjYWxsZWRcIiwgY29ycmVsYXRpb25JZCk7XHJcbiAgICAgICAgY29uc3QgYXRiY01lYXN1cmVtZW50ID0gdGhpcy5wZXJmb3JtYW5jZUNsaWVudC5zdGFydE1lYXN1cmVtZW50KFBlcmZvcm1hbmNlRXZlbnRzLkFjcXVpcmVUb2tlbkJ5Q29kZSwgY29ycmVsYXRpb25JZCk7XHJcbiAgICAgICAgcHJlZmxpZ2h0Q2hlY2sodGhpcy5pbml0aWFsaXplZCwgYXRiY01lYXN1cmVtZW50KTtcclxuICAgICAgICB0aGlzLmV2ZW50SGFuZGxlci5lbWl0RXZlbnQoRXZlbnRUeXBlLkFDUVVJUkVfVE9LRU5fQllfQ09ERV9TVEFSVCwgSW50ZXJhY3Rpb25UeXBlLlNpbGVudCwgcmVxdWVzdCk7XHJcbiAgICAgICAgYXRiY01lYXN1cmVtZW50LmFkZCh7IHNjZW5hcmlvSWQ6IHJlcXVlc3Quc2NlbmFyaW9JZCB9KTtcclxuICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICBpZiAocmVxdWVzdC5jb2RlICYmIHJlcXVlc3QubmF0aXZlQWNjb3VudElkKSB7XHJcbiAgICAgICAgICAgICAgICAvLyBUaHJvdyBlcnJvciBpbiBjYXNlIHNlcnZlciByZXR1cm5zIGJvdGggc3BhX2NvZGUgYW5kIHNwYV9hY2NvdW50aWQgaW4gZXhjaGFuZ2UgZm9yIGF1dGggY29kZS5cclxuICAgICAgICAgICAgICAgIHRocm93IGNyZWF0ZUJyb3dzZXJBdXRoRXJyb3Ioc3BhQ29kZUFuZE5hdGl2ZUFjY291bnRJZFByZXNlbnQpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2UgaWYgKHJlcXVlc3QuY29kZSkge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgaHlicmlkQXV0aENvZGUgPSByZXF1ZXN0LmNvZGU7XHJcbiAgICAgICAgICAgICAgICBsZXQgcmVzcG9uc2UgPSB0aGlzLmh5YnJpZEF1dGhDb2RlUmVzcG9uc2VzLmdldChoeWJyaWRBdXRoQ29kZSk7XHJcbiAgICAgICAgICAgICAgICBpZiAoIXJlc3BvbnNlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5sb2dnZXIudmVyYm9zZShcIkluaXRpYXRpbmcgbmV3IGFjcXVpcmVUb2tlbkJ5Q29kZSByZXF1ZXN0XCIsIGNvcnJlbGF0aW9uSWQpO1xyXG4gICAgICAgICAgICAgICAgICAgIHJlc3BvbnNlID0gdGhpcy5hY3F1aXJlVG9rZW5CeUNvZGVBc3luYyh7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC4uLnJlcXVlc3QsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvcnJlbGF0aW9uSWQsXHJcbiAgICAgICAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgICAgICAgICAgICAgLnRoZW4oKHJlc3VsdCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmV2ZW50SGFuZGxlci5lbWl0RXZlbnQoRXZlbnRUeXBlLkFDUVVJUkVfVE9LRU5fQllfQ09ERV9TVUNDRVNTLCBJbnRlcmFjdGlvblR5cGUuU2lsZW50LCByZXN1bHQpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmh5YnJpZEF1dGhDb2RlUmVzcG9uc2VzLmRlbGV0ZShoeWJyaWRBdXRoQ29kZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGF0YmNNZWFzdXJlbWVudC5lbmQoe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3VjY2VzczogdHJ1ZSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlzTmF0aXZlQnJva2VyOiByZXN1bHQuZnJvbU5hdGl2ZUJyb2tlcixcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFjY2Vzc1Rva2VuU2l6ZTogcmVzdWx0LmFjY2Vzc1Rva2VuLmxlbmd0aCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlkVG9rZW5TaXplOiByZXN1bHQuaWRUb2tlbi5sZW5ndGgsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhY2NvdW50VHlwZTogZ2V0QWNjb3VudFR5cGUocmVzdWx0LmFjY291bnQpLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDtcclxuICAgICAgICAgICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAuY2F0Y2goKGVycm9yKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuaHlicmlkQXV0aENvZGVSZXNwb25zZXMuZGVsZXRlKGh5YnJpZEF1dGhDb2RlKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5ldmVudEhhbmRsZXIuZW1pdEV2ZW50KEV2ZW50VHlwZS5BQ1FVSVJFX1RPS0VOX0JZX0NPREVfRkFJTFVSRSwgSW50ZXJhY3Rpb25UeXBlLlNpbGVudCwgbnVsbCwgZXJyb3IpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBhdGJjTWVhc3VyZW1lbnQuZW5kKHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN1Y2Nlc3M6IGZhbHNlLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9LCBlcnJvcik7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IGVycm9yO1xyXG4gICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuaHlicmlkQXV0aENvZGVSZXNwb25zZXMuc2V0KGh5YnJpZEF1dGhDb2RlLCByZXNwb25zZSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmxvZ2dlci52ZXJib3NlKFwiRXhpc3RpbmcgYWNxdWlyZVRva2VuQnlDb2RlIHJlcXVlc3QgZm91bmRcIiwgY29ycmVsYXRpb25JZCk7XHJcbiAgICAgICAgICAgICAgICAgICAgYXRiY01lYXN1cmVtZW50LmRpc2NhcmQoKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIHJldHVybiBhd2FpdCByZXNwb25zZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIGlmIChyZXF1ZXN0Lm5hdGl2ZUFjY291bnRJZCkge1xyXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuY2FuVXNlTmF0aXZlKHJlcXVlc3QsIHJlcXVlc3QubmF0aXZlQWNjb3VudElkKSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHRoaXMuYWNxdWlyZVRva2VuTmF0aXZlKHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgLi4ucmVxdWVzdCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgY29ycmVsYXRpb25JZCxcclxuICAgICAgICAgICAgICAgICAgICB9LCBBcGlJZC5hY3F1aXJlVG9rZW5CeUNvZGUsIHJlcXVlc3QubmF0aXZlQWNjb3VudElkKS5jYXRjaCgoZSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBJZiBuYXRpdmUgdG9rZW4gYWNxdWlzaXRpb24gZmFpbHMgZm9yIGF2YWlsYWJpbGl0eSByZWFzb25zIGZhbGxiYWNrIHRvIHN0YW5kYXJkIGZsb3dcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGUgaW5zdGFuY2VvZiBOYXRpdmVBdXRoRXJyb3IgJiZcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlzRmF0YWxOYXRpdmVBdXRoRXJyb3IoZSkpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubmF0aXZlRXh0ZW5zaW9uUHJvdmlkZXIgPSB1bmRlZmluZWQ7IC8vIElmIGV4dGVuc2lvbiBnZXRzIHVuaW5zdGFsbGVkIGR1cmluZyBzZXNzaW9uIHByZXZlbnQgZnV0dXJlIHJlcXVlc3RzIGZyb20gY29udGludWluZyB0byBhdHRlbXB0XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgZTtcclxuICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgICAgICBhdGJjTWVhc3VyZW1lbnQuZW5kKHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgYWNjb3VudFR5cGU6IGdldEFjY291bnRUeXBlKHJlc3VsdC5hY2NvdW50KSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgc3VjY2VzczogdHJ1ZSxcclxuICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0O1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgY3JlYXRlQnJvd3NlckF1dGhFcnJvcih1bmFibGVUb0FjcXVpcmVUb2tlbkZyb21OYXRpdmVQbGF0Zm9ybSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICB0aHJvdyBjcmVhdGVCcm93c2VyQXV0aEVycm9yKGF1dGhDb2RlT3JOYXRpdmVBY2NvdW50SWRSZXF1aXJlZCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgY2F0Y2ggKGUpIHtcclxuICAgICAgICAgICAgdGhpcy5ldmVudEhhbmRsZXIuZW1pdEV2ZW50KEV2ZW50VHlwZS5BQ1FVSVJFX1RPS0VOX0JZX0NPREVfRkFJTFVSRSwgSW50ZXJhY3Rpb25UeXBlLlNpbGVudCwgbnVsbCwgZSk7XHJcbiAgICAgICAgICAgIGF0YmNNZWFzdXJlbWVudC5lbmQoe1xyXG4gICAgICAgICAgICAgICAgc3VjY2VzczogZmFsc2UsXHJcbiAgICAgICAgICAgIH0sIGUpO1xyXG4gICAgICAgICAgICB0aHJvdyBlO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIC8qKlxyXG4gICAgICogQ3JlYXRlcyBhIFNpbGVudEF1dGhDb2RlQ2xpZW50IHRvIHJlZGVlbSBhbiBhdXRob3JpemF0aW9uIGNvZGUuXHJcbiAgICAgKiBAcGFyYW0gcmVxdWVzdFxyXG4gICAgICogQHJldHVybnMgUmVzdWx0IG9mIHRoZSBvcGVyYXRpb24gdG8gcmVkZWVtIHRoZSBhdXRob3JpemF0aW9uIGNvZGVcclxuICAgICAqL1xyXG4gICAgYXN5bmMgYWNxdWlyZVRva2VuQnlDb2RlQXN5bmMocmVxdWVzdCkge1xyXG4gICAgICAgIHRoaXMubG9nZ2VyLnRyYWNlKFwiYWNxdWlyZVRva2VuQnlDb2RlQXN5bmMgY2FsbGVkXCIsIHJlcXVlc3QuY29ycmVsYXRpb25JZCk7XHJcbiAgICAgICAgdGhpcy5hY3F1aXJlVG9rZW5CeUNvZGVBc3luY01lYXN1cmVtZW50ID1cclxuICAgICAgICAgICAgdGhpcy5wZXJmb3JtYW5jZUNsaWVudC5zdGFydE1lYXN1cmVtZW50KFBlcmZvcm1hbmNlRXZlbnRzLkFjcXVpcmVUb2tlbkJ5Q29kZUFzeW5jLCByZXF1ZXN0LmNvcnJlbGF0aW9uSWQpO1xyXG4gICAgICAgIHRoaXMuYWNxdWlyZVRva2VuQnlDb2RlQXN5bmNNZWFzdXJlbWVudD8uaW5jcmVtZW50KHtcclxuICAgICAgICAgICAgdmlzaWJpbGl0eUNoYW5nZUNvdW50OiAwLFxyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoXCJ2aXNpYmlsaXR5Y2hhbmdlXCIsIHRoaXMudHJhY2tQYWdlVmlzaWJpbGl0eVdpdGhNZWFzdXJlbWVudCk7XHJcbiAgICAgICAgY29uc3Qgc2lsZW50QXV0aENvZGVDbGllbnQgPSB0aGlzLmNyZWF0ZVNpbGVudEF1dGhDb2RlQ2xpZW50KHJlcXVlc3QuY29ycmVsYXRpb25JZCk7XHJcbiAgICAgICAgY29uc3Qgc2lsZW50VG9rZW5SZXN1bHQgPSBhd2FpdCBzaWxlbnRBdXRoQ29kZUNsaWVudFxyXG4gICAgICAgICAgICAuYWNxdWlyZVRva2VuKHJlcXVlc3QpXHJcbiAgICAgICAgICAgIC50aGVuKChyZXNwb25zZSkgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLmFjcXVpcmVUb2tlbkJ5Q29kZUFzeW5jTWVhc3VyZW1lbnQ/LmVuZCh7XHJcbiAgICAgICAgICAgICAgICBzdWNjZXNzOiB0cnVlLFxyXG4gICAgICAgICAgICAgICAgZnJvbUNhY2hlOiByZXNwb25zZS5mcm9tQ2FjaGUsXHJcbiAgICAgICAgICAgICAgICBpc05hdGl2ZUJyb2tlcjogcmVzcG9uc2UuZnJvbU5hdGl2ZUJyb2tlcixcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIHJldHVybiByZXNwb25zZTtcclxuICAgICAgICB9KVxyXG4gICAgICAgICAgICAuY2F0Y2goKHRva2VuUmVuZXdhbEVycm9yKSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMuYWNxdWlyZVRva2VuQnlDb2RlQXN5bmNNZWFzdXJlbWVudD8uZW5kKHtcclxuICAgICAgICAgICAgICAgIHN1Y2Nlc3M6IGZhbHNlLFxyXG4gICAgICAgICAgICB9LCB0b2tlblJlbmV3YWxFcnJvcik7XHJcbiAgICAgICAgICAgIHRocm93IHRva2VuUmVuZXdhbEVycm9yO1xyXG4gICAgICAgIH0pXHJcbiAgICAgICAgICAgIC5maW5hbGx5KCgpID0+IHtcclxuICAgICAgICAgICAgZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcihcInZpc2liaWxpdHljaGFuZ2VcIiwgdGhpcy50cmFja1BhZ2VWaXNpYmlsaXR5V2l0aE1lYXN1cmVtZW50KTtcclxuICAgICAgICB9KTtcclxuICAgICAgICByZXR1cm4gc2lsZW50VG9rZW5SZXN1bHQ7XHJcbiAgICB9XHJcbiAgICAvKipcclxuICAgICAqIEF0dGVtcHQgdG8gYWNxdWlyZSBhbiBhY2Nlc3MgdG9rZW4gZnJvbSB0aGUgY2FjaGVcclxuICAgICAqIEBwYXJhbSBzaWxlbnRDYWNoZUNsaWVudCBTaWxlbnRDYWNoZUNsaWVudFxyXG4gICAgICogQHBhcmFtIGNvbW1vblJlcXVlc3QgQ29tbW9uU2lsZW50Rmxvd1JlcXVlc3RcclxuICAgICAqIEBwYXJhbSBzaWxlbnRSZXF1ZXN0IFNpbGVudFJlcXVlc3RcclxuICAgICAqIEByZXR1cm5zIEEgcHJvbWlzZSB0aGF0LCB3aGVuIHJlc29sdmVkLCByZXR1cm5zIHRoZSBhY2Nlc3MgdG9rZW5cclxuICAgICAqL1xyXG4gICAgYXN5bmMgYWNxdWlyZVRva2VuRnJvbUNhY2hlKGNvbW1vblJlcXVlc3QsIGNhY2hlTG9va3VwUG9saWN5KSB7XHJcbiAgICAgICAgdGhpcy5wZXJmb3JtYW5jZUNsaWVudC5hZGRRdWV1ZU1lYXN1cmVtZW50KFBlcmZvcm1hbmNlRXZlbnRzLkFjcXVpcmVUb2tlbkZyb21DYWNoZSwgY29tbW9uUmVxdWVzdC5jb3JyZWxhdGlvbklkKTtcclxuICAgICAgICBzd2l0Y2ggKGNhY2hlTG9va3VwUG9saWN5KSB7XHJcbiAgICAgICAgICAgIGNhc2UgQ2FjaGVMb29rdXBQb2xpY3kuRGVmYXVsdDpcclxuICAgICAgICAgICAgY2FzZSBDYWNoZUxvb2t1cFBvbGljeS5BY2Nlc3NUb2tlbjpcclxuICAgICAgICAgICAgY2FzZSBDYWNoZUxvb2t1cFBvbGljeS5BY2Nlc3NUb2tlbkFuZFJlZnJlc2hUb2tlbjpcclxuICAgICAgICAgICAgICAgIGNvbnN0IHNpbGVudENhY2hlQ2xpZW50ID0gdGhpcy5jcmVhdGVTaWxlbnRDYWNoZUNsaWVudChjb21tb25SZXF1ZXN0LmNvcnJlbGF0aW9uSWQpO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGludm9rZUFzeW5jKHNpbGVudENhY2hlQ2xpZW50LmFjcXVpcmVUb2tlbi5iaW5kKHNpbGVudENhY2hlQ2xpZW50KSwgUGVyZm9ybWFuY2VFdmVudHMuU2lsZW50Q2FjaGVDbGllbnRBY3F1aXJlVG9rZW4sIHRoaXMubG9nZ2VyLCB0aGlzLnBlcmZvcm1hbmNlQ2xpZW50LCBjb21tb25SZXF1ZXN0LmNvcnJlbGF0aW9uSWQpKGNvbW1vblJlcXVlc3QpO1xyXG4gICAgICAgICAgICBkZWZhdWx0OlxyXG4gICAgICAgICAgICAgICAgdGhyb3cgY3JlYXRlQ2xpZW50QXV0aEVycm9yKENsaWVudEF1dGhFcnJvckNvZGVzLnRva2VuUmVmcmVzaFJlcXVpcmVkKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICAvKipcclxuICAgICAqIEF0dGVtcHQgdG8gYWNxdWlyZSBhbiBhY2Nlc3MgdG9rZW4gdmlhIGEgcmVmcmVzaCB0b2tlblxyXG4gICAgICogQHBhcmFtIGNvbW1vblJlcXVlc3QgQ29tbW9uU2lsZW50Rmxvd1JlcXVlc3RcclxuICAgICAqIEBwYXJhbSBjYWNoZUxvb2t1cFBvbGljeSBDYWNoZUxvb2t1cFBvbGljeVxyXG4gICAgICogQHJldHVybnMgQSBwcm9taXNlIHRoYXQsIHdoZW4gcmVzb2x2ZWQsIHJldHVybnMgdGhlIGFjY2VzcyB0b2tlblxyXG4gICAgICovXHJcbiAgICBhc3luYyBhY3F1aXJlVG9rZW5CeVJlZnJlc2hUb2tlbihjb21tb25SZXF1ZXN0LCBjYWNoZUxvb2t1cFBvbGljeSkge1xyXG4gICAgICAgIHRoaXMucGVyZm9ybWFuY2VDbGllbnQuYWRkUXVldWVNZWFzdXJlbWVudChQZXJmb3JtYW5jZUV2ZW50cy5BY3F1aXJlVG9rZW5CeVJlZnJlc2hUb2tlbiwgY29tbW9uUmVxdWVzdC5jb3JyZWxhdGlvbklkKTtcclxuICAgICAgICBzd2l0Y2ggKGNhY2hlTG9va3VwUG9saWN5KSB7XHJcbiAgICAgICAgICAgIGNhc2UgQ2FjaGVMb29rdXBQb2xpY3kuRGVmYXVsdDpcclxuICAgICAgICAgICAgY2FzZSBDYWNoZUxvb2t1cFBvbGljeS5BY2Nlc3NUb2tlbkFuZFJlZnJlc2hUb2tlbjpcclxuICAgICAgICAgICAgY2FzZSBDYWNoZUxvb2t1cFBvbGljeS5SZWZyZXNoVG9rZW46XHJcbiAgICAgICAgICAgIGNhc2UgQ2FjaGVMb29rdXBQb2xpY3kuUmVmcmVzaFRva2VuQW5kTmV0d29yazpcclxuICAgICAgICAgICAgICAgIGNvbnN0IHNpbGVudFJlZnJlc2hDbGllbnQgPSB0aGlzLmNyZWF0ZVNpbGVudFJlZnJlc2hDbGllbnQoY29tbW9uUmVxdWVzdC5jb3JyZWxhdGlvbklkKTtcclxuICAgICAgICAgICAgICAgIHJldHVybiBpbnZva2VBc3luYyhzaWxlbnRSZWZyZXNoQ2xpZW50LmFjcXVpcmVUb2tlbi5iaW5kKHNpbGVudFJlZnJlc2hDbGllbnQpLCBQZXJmb3JtYW5jZUV2ZW50cy5TaWxlbnRSZWZyZXNoQ2xpZW50QWNxdWlyZVRva2VuLCB0aGlzLmxvZ2dlciwgdGhpcy5wZXJmb3JtYW5jZUNsaWVudCwgY29tbW9uUmVxdWVzdC5jb3JyZWxhdGlvbklkKShjb21tb25SZXF1ZXN0KTtcclxuICAgICAgICAgICAgZGVmYXVsdDpcclxuICAgICAgICAgICAgICAgIHRocm93IGNyZWF0ZUNsaWVudEF1dGhFcnJvcihDbGllbnRBdXRoRXJyb3JDb2Rlcy50b2tlblJlZnJlc2hSZXF1aXJlZCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgLyoqXHJcbiAgICAgKiBBdHRlbXB0IHRvIGFjcXVpcmUgYW4gYWNjZXNzIHRva2VuIHZpYSBhbiBpZnJhbWVcclxuICAgICAqIEBwYXJhbSByZXF1ZXN0IENvbW1vblNpbGVudEZsb3dSZXF1ZXN0XHJcbiAgICAgKiBAcmV0dXJucyBBIHByb21pc2UgdGhhdCwgd2hlbiByZXNvbHZlZCwgcmV0dXJucyB0aGUgYWNjZXNzIHRva2VuXHJcbiAgICAgKi9cclxuICAgIGFzeW5jIGFjcXVpcmVUb2tlbkJ5U2lsZW50SWZyYW1lKHJlcXVlc3QpIHtcclxuICAgICAgICB0aGlzLnBlcmZvcm1hbmNlQ2xpZW50LmFkZFF1ZXVlTWVhc3VyZW1lbnQoUGVyZm9ybWFuY2VFdmVudHMuQWNxdWlyZVRva2VuQnlTaWxlbnRJZnJhbWUsIHJlcXVlc3QuY29ycmVsYXRpb25JZCk7XHJcbiAgICAgICAgY29uc3Qgc2lsZW50SWZyYW1lQ2xpZW50ID0gdGhpcy5jcmVhdGVTaWxlbnRJZnJhbWVDbGllbnQocmVxdWVzdC5jb3JyZWxhdGlvbklkKTtcclxuICAgICAgICByZXR1cm4gaW52b2tlQXN5bmMoc2lsZW50SWZyYW1lQ2xpZW50LmFjcXVpcmVUb2tlbi5iaW5kKHNpbGVudElmcmFtZUNsaWVudCksIFBlcmZvcm1hbmNlRXZlbnRzLlNpbGVudElmcmFtZUNsaWVudEFjcXVpcmVUb2tlbiwgdGhpcy5sb2dnZXIsIHRoaXMucGVyZm9ybWFuY2VDbGllbnQsIHJlcXVlc3QuY29ycmVsYXRpb25JZCkocmVxdWVzdCk7XHJcbiAgICB9XHJcbiAgICAvLyAjZW5kcmVnaW9uXHJcbiAgICAvLyAjcmVnaW9uIExvZ291dFxyXG4gICAgLyoqXHJcbiAgICAgKiBEZXByZWNhdGVkIGxvZ291dCBmdW5jdGlvbi4gVXNlIGxvZ291dFJlZGlyZWN0IG9yIGxvZ291dFBvcHVwIGluc3RlYWRcclxuICAgICAqIEBwYXJhbSBsb2dvdXRSZXF1ZXN0XHJcbiAgICAgKiBAZGVwcmVjYXRlZFxyXG4gICAgICovXHJcbiAgICBhc3luYyBsb2dvdXQobG9nb3V0UmVxdWVzdCkge1xyXG4gICAgICAgIGNvbnN0IGNvcnJlbGF0aW9uSWQgPSB0aGlzLmdldFJlcXVlc3RDb3JyZWxhdGlvbklkKGxvZ291dFJlcXVlc3QpO1xyXG4gICAgICAgIHRoaXMubG9nZ2VyLndhcm5pbmcoXCJsb2dvdXQgQVBJIGlzIGRlcHJlY2F0ZWQgYW5kIHdpbGwgYmUgcmVtb3ZlZCBpbiBtc2FsLWJyb3dzZXIgdjMuMC4wLiBVc2UgbG9nb3V0UmVkaXJlY3QgaW5zdGVhZC5cIiwgY29ycmVsYXRpb25JZCk7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMubG9nb3V0UmVkaXJlY3Qoe1xyXG4gICAgICAgICAgICBjb3JyZWxhdGlvbklkLFxyXG4gICAgICAgICAgICAuLi5sb2dvdXRSZXF1ZXN0LFxyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG4gICAgLyoqXHJcbiAgICAgKiBVc2UgdG8gbG9nIG91dCB0aGUgY3VycmVudCB1c2VyLCBhbmQgcmVkaXJlY3QgdGhlIHVzZXIgdG8gdGhlIHBvc3RMb2dvdXRSZWRpcmVjdFVyaS5cclxuICAgICAqIERlZmF1bHQgYmVoYXZpb3VyIGlzIHRvIHJlZGlyZWN0IHRoZSB1c2VyIHRvIGB3aW5kb3cubG9jYXRpb24uaHJlZmAuXHJcbiAgICAgKiBAcGFyYW0gbG9nb3V0UmVxdWVzdFxyXG4gICAgICovXHJcbiAgICBhc3luYyBsb2dvdXRSZWRpcmVjdChsb2dvdXRSZXF1ZXN0KSB7XHJcbiAgICAgICAgY29uc3QgY29ycmVsYXRpb25JZCA9IHRoaXMuZ2V0UmVxdWVzdENvcnJlbGF0aW9uSWQobG9nb3V0UmVxdWVzdCk7XHJcbiAgICAgICAgcmVkaXJlY3RQcmVmbGlnaHRDaGVjayh0aGlzLmluaXRpYWxpemVkLCB0aGlzLmNvbmZpZyk7XHJcbiAgICAgICAgdGhpcy5icm93c2VyU3RvcmFnZS5zZXRJbnRlcmFjdGlvbkluUHJvZ3Jlc3ModHJ1ZSk7XHJcbiAgICAgICAgY29uc3QgcmVkaXJlY3RDbGllbnQgPSB0aGlzLmNyZWF0ZVJlZGlyZWN0Q2xpZW50KGNvcnJlbGF0aW9uSWQpO1xyXG4gICAgICAgIHJldHVybiByZWRpcmVjdENsaWVudC5sb2dvdXQobG9nb3V0UmVxdWVzdCk7XHJcbiAgICB9XHJcbiAgICAvKipcclxuICAgICAqIENsZWFycyBsb2NhbCBjYWNoZSBmb3IgdGhlIGN1cnJlbnQgdXNlciB0aGVuIG9wZW5zIGEgcG9wdXAgd2luZG93IHByb21wdGluZyB0aGUgdXNlciB0byBzaWduLW91dCBvZiB0aGUgc2VydmVyXHJcbiAgICAgKiBAcGFyYW0gbG9nb3V0UmVxdWVzdFxyXG4gICAgICovXHJcbiAgICBsb2dvdXRQb3B1cChsb2dvdXRSZXF1ZXN0KSB7XHJcbiAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgY29uc3QgY29ycmVsYXRpb25JZCA9IHRoaXMuZ2V0UmVxdWVzdENvcnJlbGF0aW9uSWQobG9nb3V0UmVxdWVzdCk7XHJcbiAgICAgICAgICAgIHByZWZsaWdodENoZWNrJDEodGhpcy5pbml0aWFsaXplZCk7XHJcbiAgICAgICAgICAgIHRoaXMuYnJvd3NlclN0b3JhZ2Uuc2V0SW50ZXJhY3Rpb25JblByb2dyZXNzKHRydWUpO1xyXG4gICAgICAgICAgICBjb25zdCBwb3B1cENsaWVudCA9IHRoaXMuY3JlYXRlUG9wdXBDbGllbnQoY29ycmVsYXRpb25JZCk7XHJcbiAgICAgICAgICAgIHJldHVybiBwb3B1cENsaWVudC5sb2dvdXQobG9nb3V0UmVxdWVzdCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNhdGNoIChlKSB7XHJcbiAgICAgICAgICAgIC8vIFNpbmNlIHRoaXMgZnVuY3Rpb24gaXMgc3luY3Jvbm91cyB3ZSBuZWVkIHRvIHJlamVjdFxyXG4gICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QoZSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgLyoqXHJcbiAgICAgKiBDcmVhdGVzIGEgY2FjaGUgaW50ZXJhY3Rpb24gY2xpZW50IHRvIGNsZWFyIGJyb3N3ZXIgY2FjaGUuXHJcbiAgICAgKiBAcGFyYW0gbG9nb3V0UmVxdWVzdFxyXG4gICAgICovXHJcbiAgICBhc3luYyBjbGVhckNhY2hlKGxvZ291dFJlcXVlc3QpIHtcclxuICAgICAgICBpZiAoIXRoaXMuaXNCcm93c2VyRW52aXJvbm1lbnQpIHtcclxuICAgICAgICAgICAgdGhpcy5sb2dnZXIuaW5mbyhcImluIG5vbi1icm93c2VyIGVudmlyb25tZW50LCByZXR1cm5pbmcgZWFybHkuXCIpO1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNvbnN0IGNvcnJlbGF0aW9uSWQgPSB0aGlzLmdldFJlcXVlc3RDb3JyZWxhdGlvbklkKGxvZ291dFJlcXVlc3QpO1xyXG4gICAgICAgIGNvbnN0IGNhY2hlQ2xpZW50ID0gdGhpcy5jcmVhdGVTaWxlbnRDYWNoZUNsaWVudChjb3JyZWxhdGlvbklkKTtcclxuICAgICAgICByZXR1cm4gY2FjaGVDbGllbnQubG9nb3V0KGxvZ291dFJlcXVlc3QpO1xyXG4gICAgfVxyXG4gICAgLy8gI2VuZHJlZ2lvblxyXG4gICAgLy8gI3JlZ2lvbiBBY2NvdW50IEFQSXNcclxuICAgIC8qKlxyXG4gICAgICogUmV0dXJucyBhbGwgdGhlIGFjY291bnRzIGluIHRoZSBjYWNoZSB0aGF0IG1hdGNoIHRoZSBvcHRpb25hbCBmaWx0ZXIuIElmIG5vIGZpbHRlciBpcyBwcm92aWRlZCwgYWxsIGFjY291bnRzIGFyZSByZXR1cm5lZC5cclxuICAgICAqIEBwYXJhbSBhY2NvdW50RmlsdGVyIC0gKE9wdGlvbmFsKSBmaWx0ZXIgdG8gbmFycm93IGRvd24gdGhlIGFjY291bnRzIHJldHVybmVkXHJcbiAgICAgKiBAcmV0dXJucyBBcnJheSBvZiBBY2NvdW50SW5mbyBvYmplY3RzIGluIGNhY2hlXHJcbiAgICAgKi9cclxuICAgIGdldEFsbEFjY291bnRzKGFjY291bnRGaWx0ZXIpIHtcclxuICAgICAgICByZXR1cm4gZ2V0QWxsQWNjb3VudHModGhpcy5sb2dnZXIsIHRoaXMuYnJvd3NlclN0b3JhZ2UsIHRoaXMuaXNCcm93c2VyRW52aXJvbm1lbnQsIGFjY291bnRGaWx0ZXIpO1xyXG4gICAgfVxyXG4gICAgLyoqXHJcbiAgICAgKiBSZXR1cm5zIHRoZSBmaXJzdCBhY2NvdW50IGZvdW5kIGluIHRoZSBjYWNoZSB0aGF0IG1hdGNoZXMgdGhlIGFjY291bnQgZmlsdGVyIHBhc3NlZCBpbi5cclxuICAgICAqIEBwYXJhbSBhY2NvdW50RmlsdGVyXHJcbiAgICAgKiBAcmV0dXJucyBUaGUgZmlyc3QgYWNjb3VudCBmb3VuZCBpbiB0aGUgY2FjaGUgbWF0Y2hpbmcgdGhlIHByb3ZpZGVkIGZpbHRlciBvciBudWxsIGlmIG5vIGFjY291bnQgY291bGQgYmUgZm91bmQuXHJcbiAgICAgKi9cclxuICAgIGdldEFjY291bnQoYWNjb3VudEZpbHRlcikge1xyXG4gICAgICAgIHJldHVybiBnZXRBY2NvdW50KGFjY291bnRGaWx0ZXIsIHRoaXMubG9nZ2VyLCB0aGlzLmJyb3dzZXJTdG9yYWdlKTtcclxuICAgIH1cclxuICAgIC8qKlxyXG4gICAgICogUmV0dXJucyB0aGUgc2lnbmVkIGluIGFjY291bnQgbWF0Y2hpbmcgdXNlcm5hbWUuXHJcbiAgICAgKiAodGhlIGFjY291bnQgb2JqZWN0IGlzIGNyZWF0ZWQgYXQgdGhlIHRpbWUgb2Ygc3VjY2Vzc2Z1bCBsb2dpbilcclxuICAgICAqIG9yIG51bGwgd2hlbiBubyBtYXRjaGluZyBhY2NvdW50IGlzIGZvdW5kLlxyXG4gICAgICogVGhpcyBBUEkgaXMgcHJvdmlkZWQgZm9yIGNvbnZlbmllbmNlIGJ1dCBnZXRBY2NvdW50QnlJZCBzaG91bGQgYmUgdXNlZCBmb3IgYmVzdCByZWxpYWJpbGl0eVxyXG4gICAgICogQHBhcmFtIHVzZXJuYW1lXHJcbiAgICAgKiBAcmV0dXJucyBUaGUgYWNjb3VudCBvYmplY3Qgc3RvcmVkIGluIE1TQUxcclxuICAgICAqL1xyXG4gICAgZ2V0QWNjb3VudEJ5VXNlcm5hbWUodXNlcm5hbWUpIHtcclxuICAgICAgICByZXR1cm4gZ2V0QWNjb3VudEJ5VXNlcm5hbWUodXNlcm5hbWUsIHRoaXMubG9nZ2VyLCB0aGlzLmJyb3dzZXJTdG9yYWdlKTtcclxuICAgIH1cclxuICAgIC8qKlxyXG4gICAgICogUmV0dXJucyB0aGUgc2lnbmVkIGluIGFjY291bnQgbWF0Y2hpbmcgaG9tZUFjY291bnRJZC5cclxuICAgICAqICh0aGUgYWNjb3VudCBvYmplY3QgaXMgY3JlYXRlZCBhdCB0aGUgdGltZSBvZiBzdWNjZXNzZnVsIGxvZ2luKVxyXG4gICAgICogb3IgbnVsbCB3aGVuIG5vIG1hdGNoaW5nIGFjY291bnQgaXMgZm91bmRcclxuICAgICAqIEBwYXJhbSBob21lQWNjb3VudElkXHJcbiAgICAgKiBAcmV0dXJucyBUaGUgYWNjb3VudCBvYmplY3Qgc3RvcmVkIGluIE1TQUxcclxuICAgICAqL1xyXG4gICAgZ2V0QWNjb3VudEJ5SG9tZUlkKGhvbWVBY2NvdW50SWQpIHtcclxuICAgICAgICByZXR1cm4gZ2V0QWNjb3VudEJ5SG9tZUlkKGhvbWVBY2NvdW50SWQsIHRoaXMubG9nZ2VyLCB0aGlzLmJyb3dzZXJTdG9yYWdlKTtcclxuICAgIH1cclxuICAgIC8qKlxyXG4gICAgICogUmV0dXJucyB0aGUgc2lnbmVkIGluIGFjY291bnQgbWF0Y2hpbmcgbG9jYWxBY2NvdW50SWQuXHJcbiAgICAgKiAodGhlIGFjY291bnQgb2JqZWN0IGlzIGNyZWF0ZWQgYXQgdGhlIHRpbWUgb2Ygc3VjY2Vzc2Z1bCBsb2dpbilcclxuICAgICAqIG9yIG51bGwgd2hlbiBubyBtYXRjaGluZyBhY2NvdW50IGlzIGZvdW5kXHJcbiAgICAgKiBAcGFyYW0gbG9jYWxBY2NvdW50SWRcclxuICAgICAqIEByZXR1cm5zIFRoZSBhY2NvdW50IG9iamVjdCBzdG9yZWQgaW4gTVNBTFxyXG4gICAgICovXHJcbiAgICBnZXRBY2NvdW50QnlMb2NhbElkKGxvY2FsQWNjb3VudElkKSB7XHJcbiAgICAgICAgcmV0dXJuIGdldEFjY291bnRCeUxvY2FsSWQobG9jYWxBY2NvdW50SWQsIHRoaXMubG9nZ2VyLCB0aGlzLmJyb3dzZXJTdG9yYWdlKTtcclxuICAgIH1cclxuICAgIC8qKlxyXG4gICAgICogU2V0cyB0aGUgYWNjb3VudCB0byB1c2UgYXMgdGhlIGFjdGl2ZSBhY2NvdW50LiBJZiBubyBhY2NvdW50IGlzIHBhc3NlZCB0byB0aGUgYWNxdWlyZVRva2VuIEFQSXMsIHRoZW4gTVNBTCB3aWxsIHVzZSB0aGlzIGFjdGl2ZSBhY2NvdW50LlxyXG4gICAgICogQHBhcmFtIGFjY291bnRcclxuICAgICAqL1xyXG4gICAgc2V0QWN0aXZlQWNjb3VudChhY2NvdW50KSB7XHJcbiAgICAgICAgc2V0QWN0aXZlQWNjb3VudChhY2NvdW50LCB0aGlzLmJyb3dzZXJTdG9yYWdlKTtcclxuICAgIH1cclxuICAgIC8qKlxyXG4gICAgICogR2V0cyB0aGUgY3VycmVudGx5IGFjdGl2ZSBhY2NvdW50XHJcbiAgICAgKi9cclxuICAgIGdldEFjdGl2ZUFjY291bnQoKSB7XHJcbiAgICAgICAgcmV0dXJuIGdldEFjdGl2ZUFjY291bnQodGhpcy5icm93c2VyU3RvcmFnZSk7XHJcbiAgICB9XHJcbiAgICAvLyAjZW5kcmVnaW9uXHJcbiAgICAvKipcclxuICAgICAqIEh5ZHJhdGVzIHRoZSBjYWNoZSB3aXRoIHRoZSB0b2tlbnMgZnJvbSBhbiBBdXRoZW50aWNhdGlvblJlc3VsdFxyXG4gICAgICogQHBhcmFtIHJlc3VsdFxyXG4gICAgICogQHBhcmFtIHJlcXVlc3RcclxuICAgICAqIEByZXR1cm5zXHJcbiAgICAgKi9cclxuICAgIGFzeW5jIGh5ZHJhdGVDYWNoZShyZXN1bHQsIHJlcXVlc3QpIHtcclxuICAgICAgICB0aGlzLmxvZ2dlci52ZXJib3NlKFwiaHlkcmF0ZUNhY2hlIGNhbGxlZFwiKTtcclxuICAgICAgICAvLyBBY2NvdW50IGdldHMgc2F2ZWQgdG8gYnJvd3NlciBzdG9yYWdlIHJlZ2FyZGxlc3Mgb2YgbmF0aXZlIG9yIG5vdFxyXG4gICAgICAgIGNvbnN0IGFjY291bnRFbnRpdHkgPSBBY2NvdW50RW50aXR5LmNyZWF0ZUZyb21BY2NvdW50SW5mbyhyZXN1bHQuYWNjb3VudCwgcmVzdWx0LmNsb3VkR3JhcGhIb3N0TmFtZSwgcmVzdWx0Lm1zR3JhcGhIb3N0KTtcclxuICAgICAgICB0aGlzLmJyb3dzZXJTdG9yYWdlLnNldEFjY291bnQoYWNjb3VudEVudGl0eSk7XHJcbiAgICAgICAgaWYgKHJlc3VsdC5mcm9tTmF0aXZlQnJva2VyKSB7XHJcbiAgICAgICAgICAgIHRoaXMubG9nZ2VyLnZlcmJvc2UoXCJSZXNwb25zZSB3YXMgZnJvbSBuYXRpdmUgYnJva2VyLCBzdG9yaW5nIGluLW1lbW9yeVwiKTtcclxuICAgICAgICAgICAgLy8gVG9rZW5zIGZyb20gbmF0aXZlIGJyb2tlciBhcmUgc3RvcmVkIGluLW1lbW9yeVxyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5uYXRpdmVJbnRlcm5hbFN0b3JhZ2UuaHlkcmF0ZUNhY2hlKHJlc3VsdCwgcmVxdWVzdCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5icm93c2VyU3RvcmFnZS5oeWRyYXRlQ2FjaGUocmVzdWx0LCByZXF1ZXN0KTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICAvLyAjcmVnaW9uIEhlbHBlcnNcclxuICAgIC8qKlxyXG4gICAgICogQWNxdWlyZSBhIHRva2VuIGZyb20gbmF0aXZlIGRldmljZSAoZS5nLiBXQU0pXHJcbiAgICAgKiBAcGFyYW0gcmVxdWVzdFxyXG4gICAgICovXHJcbiAgICBhc3luYyBhY3F1aXJlVG9rZW5OYXRpdmUocmVxdWVzdCwgYXBpSWQsIGFjY291bnRJZCkge1xyXG4gICAgICAgIHRoaXMubG9nZ2VyLnRyYWNlKFwiYWNxdWlyZVRva2VuTmF0aXZlIGNhbGxlZFwiKTtcclxuICAgICAgICBpZiAoIXRoaXMubmF0aXZlRXh0ZW5zaW9uUHJvdmlkZXIpIHtcclxuICAgICAgICAgICAgdGhyb3cgY3JlYXRlQnJvd3NlckF1dGhFcnJvcihuYXRpdmVDb25uZWN0aW9uTm90RXN0YWJsaXNoZWQpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjb25zdCBuYXRpdmVDbGllbnQgPSBuZXcgTmF0aXZlSW50ZXJhY3Rpb25DbGllbnQodGhpcy5jb25maWcsIHRoaXMuYnJvd3NlclN0b3JhZ2UsIHRoaXMuYnJvd3NlckNyeXB0bywgdGhpcy5sb2dnZXIsIHRoaXMuZXZlbnRIYW5kbGVyLCB0aGlzLm5hdmlnYXRpb25DbGllbnQsIGFwaUlkLCB0aGlzLnBlcmZvcm1hbmNlQ2xpZW50LCB0aGlzLm5hdGl2ZUV4dGVuc2lvblByb3ZpZGVyLCBhY2NvdW50SWQgfHwgdGhpcy5nZXROYXRpdmVBY2NvdW50SWQocmVxdWVzdCksIHRoaXMubmF0aXZlSW50ZXJuYWxTdG9yYWdlLCByZXF1ZXN0LmNvcnJlbGF0aW9uSWQpO1xyXG4gICAgICAgIHJldHVybiBuYXRpdmVDbGllbnQuYWNxdWlyZVRva2VuKHJlcXVlc3QpO1xyXG4gICAgfVxyXG4gICAgLyoqXHJcbiAgICAgKiBSZXR1cm5zIGJvb2xlYW4gaW5kaWNhdGluZyBpZiB0aGlzIHJlcXVlc3QgY2FuIHVzZSB0aGUgbmF0aXZlIGJyb2tlclxyXG4gICAgICogQHBhcmFtIHJlcXVlc3RcclxuICAgICAqL1xyXG4gICAgY2FuVXNlTmF0aXZlKHJlcXVlc3QsIGFjY291bnRJZCkge1xyXG4gICAgICAgIHRoaXMubG9nZ2VyLnRyYWNlKFwiY2FuVXNlTmF0aXZlIGNhbGxlZFwiKTtcclxuICAgICAgICBpZiAoIU5hdGl2ZU1lc3NhZ2VIYW5kbGVyLmlzTmF0aXZlQXZhaWxhYmxlKHRoaXMuY29uZmlnLCB0aGlzLmxvZ2dlciwgdGhpcy5uYXRpdmVFeHRlbnNpb25Qcm92aWRlciwgcmVxdWVzdC5hdXRoZW50aWNhdGlvblNjaGVtZSkpIHtcclxuICAgICAgICAgICAgdGhpcy5sb2dnZXIudHJhY2UoXCJjYW5Vc2VOYXRpdmU6IGlzTmF0aXZlQXZhaWxhYmxlIHJldHVybmVkIGZhbHNlLCByZXR1cm5pbmcgZmFsc2VcIik7XHJcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHJlcXVlc3QucHJvbXB0KSB7XHJcbiAgICAgICAgICAgIHN3aXRjaCAocmVxdWVzdC5wcm9tcHQpIHtcclxuICAgICAgICAgICAgICAgIGNhc2UgUHJvbXB0VmFsdWUuTk9ORTpcclxuICAgICAgICAgICAgICAgIGNhc2UgUHJvbXB0VmFsdWUuQ09OU0VOVDpcclxuICAgICAgICAgICAgICAgIGNhc2UgUHJvbXB0VmFsdWUuTE9HSU46XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5sb2dnZXIudHJhY2UoXCJjYW5Vc2VOYXRpdmU6IHByb21wdCBpcyBjb21wYXRpYmxlIHdpdGggbmF0aXZlIGZsb3dcIik7XHJcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICBkZWZhdWx0OlxyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMubG9nZ2VyLnRyYWNlKGBjYW5Vc2VOYXRpdmU6IHByb21wdCA9ICR7cmVxdWVzdC5wcm9tcHR9IGlzIG5vdCBjb21wYXRpYmxlIHdpdGggbmF0aXZlIGZsb3csIHJldHVybmluZyBmYWxzZWApO1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoIWFjY291bnRJZCAmJiAhdGhpcy5nZXROYXRpdmVBY2NvdW50SWQocmVxdWVzdCkpIHtcclxuICAgICAgICAgICAgdGhpcy5sb2dnZXIudHJhY2UoXCJjYW5Vc2VOYXRpdmU6IG5hdGl2ZUFjY291bnRJZCBpcyBub3QgYXZhaWxhYmxlLCByZXR1cm5pbmcgZmFsc2VcIik7XHJcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICB9XHJcbiAgICAvKipcclxuICAgICAqIEdldCB0aGUgbmF0aXZlIGFjY291bnRJZCBmcm9tIHRoZSBhY2NvdW50XHJcbiAgICAgKiBAcGFyYW0gcmVxdWVzdFxyXG4gICAgICogQHJldHVybnNcclxuICAgICAqL1xyXG4gICAgZ2V0TmF0aXZlQWNjb3VudElkKHJlcXVlc3QpIHtcclxuICAgICAgICBjb25zdCBhY2NvdW50ID0gcmVxdWVzdC5hY2NvdW50IHx8XHJcbiAgICAgICAgICAgIHRoaXMuZ2V0QWNjb3VudCh7XHJcbiAgICAgICAgICAgICAgICBsb2dpbkhpbnQ6IHJlcXVlc3QubG9naW5IaW50LFxyXG4gICAgICAgICAgICAgICAgc2lkOiByZXF1ZXN0LnNpZCxcclxuICAgICAgICAgICAgfSkgfHxcclxuICAgICAgICAgICAgdGhpcy5nZXRBY3RpdmVBY2NvdW50KCk7XHJcbiAgICAgICAgcmV0dXJuIChhY2NvdW50ICYmIGFjY291bnQubmF0aXZlQWNjb3VudElkKSB8fCBcIlwiO1xyXG4gICAgfVxyXG4gICAgLyoqXHJcbiAgICAgKiBSZXR1cm5zIG5ldyBpbnN0YW5jZSBvZiB0aGUgUG9wdXAgSW50ZXJhY3Rpb24gQ2xpZW50XHJcbiAgICAgKiBAcGFyYW0gY29ycmVsYXRpb25JZFxyXG4gICAgICovXHJcbiAgICBjcmVhdGVQb3B1cENsaWVudChjb3JyZWxhdGlvbklkKSB7XHJcbiAgICAgICAgcmV0dXJuIG5ldyBQb3B1cENsaWVudCh0aGlzLmNvbmZpZywgdGhpcy5icm93c2VyU3RvcmFnZSwgdGhpcy5icm93c2VyQ3J5cHRvLCB0aGlzLmxvZ2dlciwgdGhpcy5ldmVudEhhbmRsZXIsIHRoaXMubmF2aWdhdGlvbkNsaWVudCwgdGhpcy5wZXJmb3JtYW5jZUNsaWVudCwgdGhpcy5uYXRpdmVJbnRlcm5hbFN0b3JhZ2UsIHRoaXMubmF0aXZlRXh0ZW5zaW9uUHJvdmlkZXIsIGNvcnJlbGF0aW9uSWQpO1xyXG4gICAgfVxyXG4gICAgLyoqXHJcbiAgICAgKiBSZXR1cm5zIG5ldyBpbnN0YW5jZSBvZiB0aGUgUmVkaXJlY3QgSW50ZXJhY3Rpb24gQ2xpZW50XHJcbiAgICAgKiBAcGFyYW0gY29ycmVsYXRpb25JZFxyXG4gICAgICovXHJcbiAgICBjcmVhdGVSZWRpcmVjdENsaWVudChjb3JyZWxhdGlvbklkKSB7XHJcbiAgICAgICAgcmV0dXJuIG5ldyBSZWRpcmVjdENsaWVudCh0aGlzLmNvbmZpZywgdGhpcy5icm93c2VyU3RvcmFnZSwgdGhpcy5icm93c2VyQ3J5cHRvLCB0aGlzLmxvZ2dlciwgdGhpcy5ldmVudEhhbmRsZXIsIHRoaXMubmF2aWdhdGlvbkNsaWVudCwgdGhpcy5wZXJmb3JtYW5jZUNsaWVudCwgdGhpcy5uYXRpdmVJbnRlcm5hbFN0b3JhZ2UsIHRoaXMubmF0aXZlRXh0ZW5zaW9uUHJvdmlkZXIsIGNvcnJlbGF0aW9uSWQpO1xyXG4gICAgfVxyXG4gICAgLyoqXHJcbiAgICAgKiBSZXR1cm5zIG5ldyBpbnN0YW5jZSBvZiB0aGUgU2lsZW50IElmcmFtZSBJbnRlcmFjdGlvbiBDbGllbnRcclxuICAgICAqIEBwYXJhbSBjb3JyZWxhdGlvbklkXHJcbiAgICAgKi9cclxuICAgIGNyZWF0ZVNpbGVudElmcmFtZUNsaWVudChjb3JyZWxhdGlvbklkKSB7XHJcbiAgICAgICAgcmV0dXJuIG5ldyBTaWxlbnRJZnJhbWVDbGllbnQodGhpcy5jb25maWcsIHRoaXMuYnJvd3NlclN0b3JhZ2UsIHRoaXMuYnJvd3NlckNyeXB0bywgdGhpcy5sb2dnZXIsIHRoaXMuZXZlbnRIYW5kbGVyLCB0aGlzLm5hdmlnYXRpb25DbGllbnQsIEFwaUlkLnNzb1NpbGVudCwgdGhpcy5wZXJmb3JtYW5jZUNsaWVudCwgdGhpcy5uYXRpdmVJbnRlcm5hbFN0b3JhZ2UsIHRoaXMubmF0aXZlRXh0ZW5zaW9uUHJvdmlkZXIsIGNvcnJlbGF0aW9uSWQpO1xyXG4gICAgfVxyXG4gICAgLyoqXHJcbiAgICAgKiBSZXR1cm5zIG5ldyBpbnN0YW5jZSBvZiB0aGUgU2lsZW50IENhY2hlIEludGVyYWN0aW9uIENsaWVudFxyXG4gICAgICovXHJcbiAgICBjcmVhdGVTaWxlbnRDYWNoZUNsaWVudChjb3JyZWxhdGlvbklkKSB7XHJcbiAgICAgICAgcmV0dXJuIG5ldyBTaWxlbnRDYWNoZUNsaWVudCh0aGlzLmNvbmZpZywgdGhpcy5icm93c2VyU3RvcmFnZSwgdGhpcy5icm93c2VyQ3J5cHRvLCB0aGlzLmxvZ2dlciwgdGhpcy5ldmVudEhhbmRsZXIsIHRoaXMubmF2aWdhdGlvbkNsaWVudCwgdGhpcy5wZXJmb3JtYW5jZUNsaWVudCwgdGhpcy5uYXRpdmVFeHRlbnNpb25Qcm92aWRlciwgY29ycmVsYXRpb25JZCk7XHJcbiAgICB9XHJcbiAgICAvKipcclxuICAgICAqIFJldHVybnMgbmV3IGluc3RhbmNlIG9mIHRoZSBTaWxlbnQgUmVmcmVzaCBJbnRlcmFjdGlvbiBDbGllbnRcclxuICAgICAqL1xyXG4gICAgY3JlYXRlU2lsZW50UmVmcmVzaENsaWVudChjb3JyZWxhdGlvbklkKSB7XHJcbiAgICAgICAgcmV0dXJuIG5ldyBTaWxlbnRSZWZyZXNoQ2xpZW50KHRoaXMuY29uZmlnLCB0aGlzLmJyb3dzZXJTdG9yYWdlLCB0aGlzLmJyb3dzZXJDcnlwdG8sIHRoaXMubG9nZ2VyLCB0aGlzLmV2ZW50SGFuZGxlciwgdGhpcy5uYXZpZ2F0aW9uQ2xpZW50LCB0aGlzLnBlcmZvcm1hbmNlQ2xpZW50LCB0aGlzLm5hdGl2ZUV4dGVuc2lvblByb3ZpZGVyLCBjb3JyZWxhdGlvbklkKTtcclxuICAgIH1cclxuICAgIC8qKlxyXG4gICAgICogUmV0dXJucyBuZXcgaW5zdGFuY2Ugb2YgdGhlIFNpbGVudCBBdXRoQ29kZSBJbnRlcmFjdGlvbiBDbGllbnRcclxuICAgICAqL1xyXG4gICAgY3JlYXRlU2lsZW50QXV0aENvZGVDbGllbnQoY29ycmVsYXRpb25JZCkge1xyXG4gICAgICAgIHJldHVybiBuZXcgU2lsZW50QXV0aENvZGVDbGllbnQodGhpcy5jb25maWcsIHRoaXMuYnJvd3NlclN0b3JhZ2UsIHRoaXMuYnJvd3NlckNyeXB0bywgdGhpcy5sb2dnZXIsIHRoaXMuZXZlbnRIYW5kbGVyLCB0aGlzLm5hdmlnYXRpb25DbGllbnQsIEFwaUlkLmFjcXVpcmVUb2tlbkJ5Q29kZSwgdGhpcy5wZXJmb3JtYW5jZUNsaWVudCwgdGhpcy5uYXRpdmVFeHRlbnNpb25Qcm92aWRlciwgY29ycmVsYXRpb25JZCk7XHJcbiAgICB9XHJcbiAgICAvKipcclxuICAgICAqIEFkZHMgZXZlbnQgY2FsbGJhY2tzIHRvIGFycmF5XHJcbiAgICAgKiBAcGFyYW0gY2FsbGJhY2tcclxuICAgICAqL1xyXG4gICAgYWRkRXZlbnRDYWxsYmFjayhjYWxsYmFjaywgZXZlbnRUeXBlcykge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmV2ZW50SGFuZGxlci5hZGRFdmVudENhbGxiYWNrKGNhbGxiYWNrLCBldmVudFR5cGVzKTtcclxuICAgIH1cclxuICAgIC8qKlxyXG4gICAgICogUmVtb3ZlcyBjYWxsYmFjayB3aXRoIHByb3ZpZGVkIGlkIGZyb20gY2FsbGJhY2sgYXJyYXlcclxuICAgICAqIEBwYXJhbSBjYWxsYmFja0lkXHJcbiAgICAgKi9cclxuICAgIHJlbW92ZUV2ZW50Q2FsbGJhY2soY2FsbGJhY2tJZCkge1xyXG4gICAgICAgIHRoaXMuZXZlbnRIYW5kbGVyLnJlbW92ZUV2ZW50Q2FsbGJhY2soY2FsbGJhY2tJZCk7XHJcbiAgICB9XHJcbiAgICAvKipcclxuICAgICAqIFJlZ2lzdGVycyBhIGNhbGxiYWNrIHRvIHJlY2VpdmUgcGVyZm9ybWFuY2UgZXZlbnRzLlxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7UGVyZm9ybWFuY2VDYWxsYmFja0Z1bmN0aW9ufSBjYWxsYmFja1xyXG4gICAgICogQHJldHVybnMge3N0cmluZ31cclxuICAgICAqL1xyXG4gICAgYWRkUGVyZm9ybWFuY2VDYWxsYmFjayhjYWxsYmFjaykge1xyXG4gICAgICAgIGJsb2NrTm9uQnJvd3NlckVudmlyb25tZW50KCk7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMucGVyZm9ybWFuY2VDbGllbnQuYWRkUGVyZm9ybWFuY2VDYWxsYmFjayhjYWxsYmFjayk7XHJcbiAgICB9XHJcbiAgICAvKipcclxuICAgICAqIFJlbW92ZXMgYSBjYWxsYmFjayByZWdpc3RlcmVkIHdpdGggYWRkUGVyZm9ybWFuY2VDYWxsYmFjay5cclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gY2FsbGJhY2tJZFxyXG4gICAgICogQHJldHVybnMge2Jvb2xlYW59XHJcbiAgICAgKi9cclxuICAgIHJlbW92ZVBlcmZvcm1hbmNlQ2FsbGJhY2soY2FsbGJhY2tJZCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLnBlcmZvcm1hbmNlQ2xpZW50LnJlbW92ZVBlcmZvcm1hbmNlQ2FsbGJhY2soY2FsbGJhY2tJZCk7XHJcbiAgICB9XHJcbiAgICAvKipcclxuICAgICAqIEFkZHMgZXZlbnQgbGlzdGVuZXIgdGhhdCBlbWl0cyBhbiBldmVudCB3aGVuIGEgdXNlciBhY2NvdW50IGlzIGFkZGVkIG9yIHJlbW92ZWQgZnJvbSBsb2NhbHN0b3JhZ2UgaW4gYSBkaWZmZXJlbnQgYnJvd3NlciB0YWIgb3Igd2luZG93XHJcbiAgICAgKi9cclxuICAgIGVuYWJsZUFjY291bnRTdG9yYWdlRXZlbnRzKCkge1xyXG4gICAgICAgIGlmICh0eXBlb2Ygd2luZG93ID09PSBcInVuZGVmaW5lZFwiKSB7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKCF0aGlzLmxpc3RlbmluZ1RvU3RvcmFnZUV2ZW50cykge1xyXG4gICAgICAgICAgICB0aGlzLmxvZ2dlci52ZXJib3NlKFwiQWRkaW5nIGFjY291bnQgc3RvcmFnZSBsaXN0ZW5lci5cIik7XHJcbiAgICAgICAgICAgIHRoaXMubGlzdGVuaW5nVG9TdG9yYWdlRXZlbnRzID0gdHJ1ZTtcclxuICAgICAgICAgICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoXCJzdG9yYWdlXCIsIHRoaXMuaGFuZGxlQWNjb3VudENhY2hlQ2hhbmdlKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMubG9nZ2VyLnZlcmJvc2UoXCJBY2NvdW50IHN0b3JhZ2UgbGlzdGVuZXIgYWxyZWFkeSByZWdpc3RlcmVkLlwiKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICAvKipcclxuICAgICAqIFJlbW92ZXMgZXZlbnQgbGlzdGVuZXIgdGhhdCBlbWl0cyBhbiBldmVudCB3aGVuIGEgdXNlciBhY2NvdW50IGlzIGFkZGVkIG9yIHJlbW92ZWQgZnJvbSBsb2NhbHN0b3JhZ2UgaW4gYSBkaWZmZXJlbnQgYnJvd3NlciB0YWIgb3Igd2luZG93XHJcbiAgICAgKi9cclxuICAgIGRpc2FibGVBY2NvdW50U3RvcmFnZUV2ZW50cygpIHtcclxuICAgICAgICBpZiAodHlwZW9mIHdpbmRvdyA9PT0gXCJ1bmRlZmluZWRcIikge1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICh0aGlzLmxpc3RlbmluZ1RvU3RvcmFnZUV2ZW50cykge1xyXG4gICAgICAgICAgICB0aGlzLmxvZ2dlci52ZXJib3NlKFwiUmVtb3ZpbmcgYWNjb3VudCBzdG9yYWdlIGxpc3RlbmVyLlwiKTtcclxuICAgICAgICAgICAgd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJzdG9yYWdlXCIsIHRoaXMuaGFuZGxlQWNjb3VudENhY2hlQ2hhbmdlKTtcclxuICAgICAgICAgICAgdGhpcy5saXN0ZW5pbmdUb1N0b3JhZ2VFdmVudHMgPSBmYWxzZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMubG9nZ2VyLnZlcmJvc2UoXCJObyBhY2NvdW50IHN0b3JhZ2UgbGlzdGVuZXIgcmVnaXN0ZXJlZC5cIik7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgLyoqXHJcbiAgICAgKiBFbWl0IGFjY291bnQgYWRkZWQvcmVtb3ZlZCBldmVudHMgd2hlbiBjYWNoZWQgYWNjb3VudHMgYXJlIGNoYW5nZWQgaW4gYSBkaWZmZXJlbnQgdGFiIG9yIGZyYW1lXHJcbiAgICAgKi9cclxuICAgIGhhbmRsZUFjY291bnRDYWNoZUNoYW5nZShlKSB7XHJcbiAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgLy8gSGFuZGxlIGFjdGl2ZSBhY2NvdW50IGZpbHRlciBjaGFuZ2VcclxuICAgICAgICAgICAgaWYgKGUua2V5Py5pbmNsdWRlcyhQZXJzaXN0ZW50Q2FjaGVLZXlzLkFDVElWRV9BQ0NPVU5UX0ZJTFRFUlMpKSB7XHJcbiAgICAgICAgICAgICAgICAvLyBUaGlzIGV2ZW50IGhhcyBubyBwYXlsb2FkLCBpdCBvbmx5IHNpZ25hbHMgY3Jvc3MtdGFiIGFwcCBpbnN0YW5jZXMgdGhhdCB0aGUgcmVzdWx0cyBvZiBjYWxsaW5nIGdldEFjdGl2ZUFjY291bnQoKSB3aWxsIGhhdmUgY2hhbmdlZFxyXG4gICAgICAgICAgICAgICAgdGhpcy5ldmVudEhhbmRsZXIuZW1pdEV2ZW50KEV2ZW50VHlwZS5BQ1RJVkVfQUNDT1VOVF9DSEFOR0VEKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAvLyBIYW5kbGUgYWNjb3VudCBvYmplY3QgY2hhbmdlXHJcbiAgICAgICAgICAgIGNvbnN0IGNhY2hlVmFsdWUgPSBlLm5ld1ZhbHVlIHx8IGUub2xkVmFsdWU7XHJcbiAgICAgICAgICAgIGlmICghY2FjaGVWYWx1ZSkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGNvbnN0IHBhcnNlZFZhbHVlID0gSlNPTi5wYXJzZShjYWNoZVZhbHVlKTtcclxuICAgICAgICAgICAgaWYgKHR5cGVvZiBwYXJzZWRWYWx1ZSAhPT0gXCJvYmplY3RcIiB8fFxyXG4gICAgICAgICAgICAgICAgIUFjY291bnRFbnRpdHkuaXNBY2NvdW50RW50aXR5KHBhcnNlZFZhbHVlKSkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGNvbnN0IGFjY291bnRFbnRpdHkgPSBDYWNoZU1hbmFnZXIudG9PYmplY3QobmV3IEFjY291bnRFbnRpdHkoKSwgcGFyc2VkVmFsdWUpO1xyXG4gICAgICAgICAgICBjb25zdCBhY2NvdW50SW5mbyA9IGFjY291bnRFbnRpdHkuZ2V0QWNjb3VudEluZm8oKTtcclxuICAgICAgICAgICAgaWYgKCFlLm9sZFZhbHVlICYmIGUubmV3VmFsdWUpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMubG9nZ2VyLmluZm8oXCJBY2NvdW50IHdhcyBhZGRlZCB0byBjYWNoZSBpbiBhIGRpZmZlcmVudCB3aW5kb3dcIik7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmV2ZW50SGFuZGxlci5lbWl0RXZlbnQoRXZlbnRUeXBlLkFDQ09VTlRfQURERUQsIHVuZGVmaW5lZCwgYWNjb3VudEluZm8pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2UgaWYgKCFlLm5ld1ZhbHVlICYmIGUub2xkVmFsdWUpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMubG9nZ2VyLmluZm8oXCJBY2NvdW50IHdhcyByZW1vdmVkIGZyb20gY2FjaGUgaW4gYSBkaWZmZXJlbnQgd2luZG93XCIpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5ldmVudEhhbmRsZXIuZW1pdEV2ZW50KEV2ZW50VHlwZS5BQ0NPVU5UX1JFTU9WRUQsIHVuZGVmaW5lZCwgYWNjb3VudEluZm8pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNhdGNoIChlKSB7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICAvKipcclxuICAgICAqIEdldHMgdGhlIHRva2VuIGNhY2hlIGZvciB0aGUgYXBwbGljYXRpb24uXHJcbiAgICAgKi9cclxuICAgIGdldFRva2VuQ2FjaGUoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMudG9rZW5DYWNoZTtcclxuICAgIH1cclxuICAgIC8qKlxyXG4gICAgICogUmV0dXJucyB0aGUgbG9nZ2VyIGluc3RhbmNlXHJcbiAgICAgKi9cclxuICAgIGdldExvZ2dlcigpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5sb2dnZXI7XHJcbiAgICB9XHJcbiAgICAvKipcclxuICAgICAqIFJlcGxhY2VzIHRoZSBkZWZhdWx0IGxvZ2dlciBzZXQgaW4gY29uZmlndXJhdGlvbnMgd2l0aCBuZXcgTG9nZ2VyIHdpdGggbmV3IGNvbmZpZ3VyYXRpb25zXHJcbiAgICAgKiBAcGFyYW0gbG9nZ2VyIExvZ2dlciBpbnN0YW5jZVxyXG4gICAgICovXHJcbiAgICBzZXRMb2dnZXIobG9nZ2VyKSB7XHJcbiAgICAgICAgdGhpcy5sb2dnZXIgPSBsb2dnZXI7XHJcbiAgICB9XHJcbiAgICAvKipcclxuICAgICAqIENhbGxlZCBieSB3cmFwcGVyIGxpYnJhcmllcyAoQW5ndWxhciAmIFJlYWN0KSB0byBzZXQgU0tVIGFuZCBWZXJzaW9uIHBhc3NlZCBkb3duIHRvIHRlbGVtZXRyeSwgbG9nZ2VyLCBldGMuXHJcbiAgICAgKiBAcGFyYW0gc2t1XHJcbiAgICAgKiBAcGFyYW0gdmVyc2lvblxyXG4gICAgICovXHJcbiAgICBpbml0aWFsaXplV3JhcHBlckxpYnJhcnkoc2t1LCB2ZXJzaW9uKSB7XHJcbiAgICAgICAgLy8gVmFsaWRhdGUgdGhlIFNLVSBwYXNzZWQgaW4gaXMgb25lIHdlIGV4cGVjdFxyXG4gICAgICAgIHRoaXMuYnJvd3NlclN0b3JhZ2Uuc2V0V3JhcHBlck1ldGFkYXRhKHNrdSwgdmVyc2lvbik7XHJcbiAgICB9XHJcbiAgICAvKipcclxuICAgICAqIFNldHMgbmF2aWdhdGlvbiBjbGllbnRcclxuICAgICAqIEBwYXJhbSBuYXZpZ2F0aW9uQ2xpZW50XHJcbiAgICAgKi9cclxuICAgIHNldE5hdmlnYXRpb25DbGllbnQobmF2aWdhdGlvbkNsaWVudCkge1xyXG4gICAgICAgIHRoaXMubmF2aWdhdGlvbkNsaWVudCA9IG5hdmlnYXRpb25DbGllbnQ7XHJcbiAgICB9XHJcbiAgICAvKipcclxuICAgICAqIFJldHVybnMgdGhlIGNvbmZpZ3VyYXRpb24gb2JqZWN0XHJcbiAgICAgKi9cclxuICAgIGdldENvbmZpZ3VyYXRpb24oKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuY29uZmlnO1xyXG4gICAgfVxyXG4gICAgLyoqXHJcbiAgICAgKiBSZXR1cm5zIHRoZSBwZXJmb3JtYW5jZSBjbGllbnRcclxuICAgICAqL1xyXG4gICAgZ2V0UGVyZm9ybWFuY2VDbGllbnQoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMucGVyZm9ybWFuY2VDbGllbnQ7XHJcbiAgICB9XHJcbiAgICAvKipcclxuICAgICAqIFJldHVybnMgdGhlIGJyb3dzZXIgZW52IGluZGljYXRvclxyXG4gICAgICovXHJcbiAgICBpc0Jyb3dzZXJFbnYoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuaXNCcm93c2VyRW52aXJvbm1lbnQ7XHJcbiAgICB9XHJcbiAgICAvKipcclxuICAgICAqIEdlbmVyYXRlcyBhIGNvcnJlbGF0aW9uIGlkIGZvciBhIHJlcXVlc3QgaWYgbm9uZSBpcyBwcm92aWRlZC5cclxuICAgICAqXHJcbiAgICAgKiBAcHJvdGVjdGVkXHJcbiAgICAgKiBAcGFyYW0gez9QYXJ0aWFsPEJhc2VBdXRoUmVxdWVzdD59IFtyZXF1ZXN0XVxyXG4gICAgICogQHJldHVybnMge3N0cmluZ31cclxuICAgICAqL1xyXG4gICAgZ2V0UmVxdWVzdENvcnJlbGF0aW9uSWQocmVxdWVzdCkge1xyXG4gICAgICAgIGlmIChyZXF1ZXN0Py5jb3JyZWxhdGlvbklkKSB7XHJcbiAgICAgICAgICAgIHJldHVybiByZXF1ZXN0LmNvcnJlbGF0aW9uSWQ7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICh0aGlzLmlzQnJvd3NlckVudmlyb25tZW50KSB7XHJcbiAgICAgICAgICAgIHJldHVybiBjcmVhdGVOZXdHdWlkKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIC8qXHJcbiAgICAgICAgICogSW5jbHVkZWQgZm9yIGZhbGxiYWNrIGZvciBub24tYnJvd3NlciBlbnZpcm9ubWVudHMsXHJcbiAgICAgICAgICogYW5kIHRvIGVuc3VyZSB0aGlzIG1ldGhvZCBhbHdheXMgcmV0dXJucyBhIHN0cmluZy5cclxuICAgICAgICAgKi9cclxuICAgICAgICByZXR1cm4gQ29uc3RhbnRzLkVNUFRZX1NUUklORztcclxuICAgIH1cclxuICAgIC8vICNlbmRyZWdpb25cclxuICAgIC8qKlxyXG4gICAgICogVXNlIHdoZW4gaW5pdGlhdGluZyB0aGUgbG9naW4gcHJvY2VzcyBieSByZWRpcmVjdGluZyB0aGUgdXNlcidzIGJyb3dzZXIgdG8gdGhlIGF1dGhvcml6YXRpb24gZW5kcG9pbnQuIFRoaXMgZnVuY3Rpb24gcmVkaXJlY3RzIHRoZSBwYWdlLCBzb1xyXG4gICAgICogYW55IGNvZGUgdGhhdCBmb2xsb3dzIHRoaXMgZnVuY3Rpb24gd2lsbCBub3QgZXhlY3V0ZS5cclxuICAgICAqXHJcbiAgICAgKiBJTVBPUlRBTlQ6IEl0IGlzIE5PVCByZWNvbW1lbmRlZCB0byBoYXZlIGNvZGUgdGhhdCBpcyBkZXBlbmRlbnQgb24gdGhlIHJlc29sdXRpb24gb2YgdGhlIFByb21pc2UuIFRoaXMgZnVuY3Rpb24gd2lsbCBuYXZpZ2F0ZSBhd2F5IGZyb20gdGhlIGN1cnJlbnRcclxuICAgICAqIGJyb3dzZXIgd2luZG93LiBJdCBjdXJyZW50bHkgcmV0dXJucyBhIFByb21pc2UgaW4gb3JkZXIgdG8gcmVmbGVjdCB0aGUgYXN5bmNocm9ub3VzIG5hdHVyZSBvZiB0aGUgY29kZSBydW5uaW5nIGluIHRoaXMgZnVuY3Rpb24uXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHJlcXVlc3RcclxuICAgICAqL1xyXG4gICAgYXN5bmMgbG9naW5SZWRpcmVjdChyZXF1ZXN0KSB7XHJcbiAgICAgICAgY29uc3QgY29ycmVsYXRpb25JZCA9IHRoaXMuZ2V0UmVxdWVzdENvcnJlbGF0aW9uSWQocmVxdWVzdCk7XHJcbiAgICAgICAgdGhpcy5sb2dnZXIudmVyYm9zZShcImxvZ2luUmVkaXJlY3QgY2FsbGVkXCIsIGNvcnJlbGF0aW9uSWQpO1xyXG4gICAgICAgIHJldHVybiB0aGlzLmFjcXVpcmVUb2tlblJlZGlyZWN0KHtcclxuICAgICAgICAgICAgY29ycmVsYXRpb25JZCxcclxuICAgICAgICAgICAgLi4uKHJlcXVlc3QgfHwgREVGQVVMVF9SRVFVRVNUKSxcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuICAgIC8qKlxyXG4gICAgICogVXNlIHdoZW4gaW5pdGlhdGluZyB0aGUgbG9naW4gcHJvY2VzcyB2aWEgb3BlbmluZyBhIHBvcHVwIHdpbmRvdyBpbiB0aGUgdXNlcidzIGJyb3dzZXJcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0gcmVxdWVzdFxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm5zIEEgcHJvbWlzZSB0aGF0IGlzIGZ1bGZpbGxlZCB3aGVuIHRoaXMgZnVuY3Rpb24gaGFzIGNvbXBsZXRlZCwgb3IgcmVqZWN0ZWQgaWYgYW4gZXJyb3Igd2FzIHJhaXNlZC5cclxuICAgICAqL1xyXG4gICAgbG9naW5Qb3B1cChyZXF1ZXN0KSB7XHJcbiAgICAgICAgY29uc3QgY29ycmVsYXRpb25JZCA9IHRoaXMuZ2V0UmVxdWVzdENvcnJlbGF0aW9uSWQocmVxdWVzdCk7XHJcbiAgICAgICAgdGhpcy5sb2dnZXIudmVyYm9zZShcImxvZ2luUG9wdXAgY2FsbGVkXCIsIGNvcnJlbGF0aW9uSWQpO1xyXG4gICAgICAgIHJldHVybiB0aGlzLmFjcXVpcmVUb2tlblBvcHVwKHtcclxuICAgICAgICAgICAgY29ycmVsYXRpb25JZCxcclxuICAgICAgICAgICAgLi4uKHJlcXVlc3QgfHwgREVGQVVMVF9SRVFVRVNUKSxcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuICAgIC8qKlxyXG4gICAgICogU2lsZW50bHkgYWNxdWlyZSBhbiBhY2Nlc3MgdG9rZW4gZm9yIGEgZ2l2ZW4gc2V0IG9mIHNjb3Blcy4gUmV0dXJucyBjdXJyZW50bHkgcHJvY2Vzc2luZyBwcm9taXNlIGlmIHBhcmFsbGVsIHJlcXVlc3RzIGFyZSBtYWRlLlxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7QGxpbmsgKFNpbGVudFJlcXVlc3Q6dHlwZSl9XHJcbiAgICAgKiBAcmV0dXJucyB7UHJvbWlzZS48QXV0aGVudGljYXRpb25SZXN1bHQ+fSAtIGEgcHJvbWlzZSB0aGF0IGlzIGZ1bGZpbGxlZCB3aGVuIHRoaXMgZnVuY3Rpb24gaGFzIGNvbXBsZXRlZCwgb3IgcmVqZWN0ZWQgaWYgYW4gZXJyb3Igd2FzIHJhaXNlZC4gUmV0dXJucyB0aGUge0BsaW5rIEF1dGhSZXNwb25zZX0gb2JqZWN0XHJcbiAgICAgKi9cclxuICAgIGFzeW5jIGFjcXVpcmVUb2tlblNpbGVudChyZXF1ZXN0KSB7XHJcbiAgICAgICAgY29uc3QgY29ycmVsYXRpb25JZCA9IHRoaXMuZ2V0UmVxdWVzdENvcnJlbGF0aW9uSWQocmVxdWVzdCk7XHJcbiAgICAgICAgY29uc3QgYXRzTWVhc3VyZW1lbnQgPSB0aGlzLnBlcmZvcm1hbmNlQ2xpZW50LnN0YXJ0TWVhc3VyZW1lbnQoUGVyZm9ybWFuY2VFdmVudHMuQWNxdWlyZVRva2VuU2lsZW50LCBjb3JyZWxhdGlvbklkKTtcclxuICAgICAgICBhdHNNZWFzdXJlbWVudC5hZGQoe1xyXG4gICAgICAgICAgICBjYWNoZUxvb2t1cFBvbGljeTogcmVxdWVzdC5jYWNoZUxvb2t1cFBvbGljeSxcclxuICAgICAgICAgICAgc2NlbmFyaW9JZDogcmVxdWVzdC5zY2VuYXJpb0lkLFxyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIHByZWZsaWdodENoZWNrKHRoaXMuaW5pdGlhbGl6ZWQsIGF0c01lYXN1cmVtZW50KTtcclxuICAgICAgICB0aGlzLmxvZ2dlci52ZXJib3NlKFwiYWNxdWlyZVRva2VuU2lsZW50IGNhbGxlZFwiLCBjb3JyZWxhdGlvbklkKTtcclxuICAgICAgICBjb25zdCBhY2NvdW50ID0gcmVxdWVzdC5hY2NvdW50IHx8IHRoaXMuZ2V0QWN0aXZlQWNjb3VudCgpO1xyXG4gICAgICAgIGlmICghYWNjb3VudCkge1xyXG4gICAgICAgICAgICB0aHJvdyBjcmVhdGVCcm93c2VyQXV0aEVycm9yKG5vQWNjb3VudEVycm9yKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgYXRzTWVhc3VyZW1lbnQuYWRkKHsgYWNjb3VudFR5cGU6IGdldEFjY291bnRUeXBlKGFjY291bnQpIH0pO1xyXG4gICAgICAgIGNvbnN0IHRodW1icHJpbnQgPSB7XHJcbiAgICAgICAgICAgIGNsaWVudElkOiB0aGlzLmNvbmZpZy5hdXRoLmNsaWVudElkLFxyXG4gICAgICAgICAgICBhdXRob3JpdHk6IHJlcXVlc3QuYXV0aG9yaXR5IHx8IENvbnN0YW50cy5FTVBUWV9TVFJJTkcsXHJcbiAgICAgICAgICAgIHNjb3BlczogcmVxdWVzdC5zY29wZXMsXHJcbiAgICAgICAgICAgIGhvbWVBY2NvdW50SWRlbnRpZmllcjogYWNjb3VudC5ob21lQWNjb3VudElkLFxyXG4gICAgICAgICAgICBjbGFpbXM6IHJlcXVlc3QuY2xhaW1zLFxyXG4gICAgICAgICAgICBhdXRoZW50aWNhdGlvblNjaGVtZTogcmVxdWVzdC5hdXRoZW50aWNhdGlvblNjaGVtZSxcclxuICAgICAgICAgICAgcmVzb3VyY2VSZXF1ZXN0TWV0aG9kOiByZXF1ZXN0LnJlc291cmNlUmVxdWVzdE1ldGhvZCxcclxuICAgICAgICAgICAgcmVzb3VyY2VSZXF1ZXN0VXJpOiByZXF1ZXN0LnJlc291cmNlUmVxdWVzdFVyaSxcclxuICAgICAgICAgICAgc2hyQ2xhaW1zOiByZXF1ZXN0LnNockNsYWltcyxcclxuICAgICAgICAgICAgc3NoS2lkOiByZXF1ZXN0LnNzaEtpZCxcclxuICAgICAgICAgICAgc2hyT3B0aW9uczogcmVxdWVzdC5zaHJPcHRpb25zLFxyXG4gICAgICAgIH07XHJcbiAgICAgICAgY29uc3Qgc2lsZW50UmVxdWVzdEtleSA9IEpTT04uc3RyaW5naWZ5KHRodW1icHJpbnQpO1xyXG4gICAgICAgIGNvbnN0IGNhY2hlZFJlc3BvbnNlID0gdGhpcy5hY3RpdmVTaWxlbnRUb2tlblJlcXVlc3RzLmdldChzaWxlbnRSZXF1ZXN0S2V5KTtcclxuICAgICAgICBpZiAodHlwZW9mIGNhY2hlZFJlc3BvbnNlID09PSBcInVuZGVmaW5lZFwiKSB7XHJcbiAgICAgICAgICAgIHRoaXMubG9nZ2VyLnZlcmJvc2UoXCJhY3F1aXJlVG9rZW5TaWxlbnQgY2FsbGVkIGZvciB0aGUgZmlyc3QgdGltZSwgc3RvcmluZyBhY3RpdmUgcmVxdWVzdFwiLCBjb3JyZWxhdGlvbklkKTtcclxuICAgICAgICAgICAgY29uc3QgcmVzcG9uc2UgPSBpbnZva2VBc3luYyh0aGlzLmFjcXVpcmVUb2tlblNpbGVudEFzeW5jLmJpbmQodGhpcyksIFBlcmZvcm1hbmNlRXZlbnRzLkFjcXVpcmVUb2tlblNpbGVudEFzeW5jLCB0aGlzLmxvZ2dlciwgdGhpcy5wZXJmb3JtYW5jZUNsaWVudCwgY29ycmVsYXRpb25JZCkoe1xyXG4gICAgICAgICAgICAgICAgLi4ucmVxdWVzdCxcclxuICAgICAgICAgICAgICAgIGNvcnJlbGF0aW9uSWQsXHJcbiAgICAgICAgICAgIH0sIGFjY291bnQpXHJcbiAgICAgICAgICAgICAgICAudGhlbigocmVzdWx0KSA9PiB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmFjdGl2ZVNpbGVudFRva2VuUmVxdWVzdHMuZGVsZXRlKHNpbGVudFJlcXVlc3RLZXkpO1xyXG4gICAgICAgICAgICAgICAgYXRzTWVhc3VyZW1lbnQuZW5kKHtcclxuICAgICAgICAgICAgICAgICAgICBzdWNjZXNzOiB0cnVlLFxyXG4gICAgICAgICAgICAgICAgICAgIGZyb21DYWNoZTogcmVzdWx0LmZyb21DYWNoZSxcclxuICAgICAgICAgICAgICAgICAgICBpc05hdGl2ZUJyb2tlcjogcmVzdWx0LmZyb21OYXRpdmVCcm9rZXIsXHJcbiAgICAgICAgICAgICAgICAgICAgY2FjaGVMb29rdXBQb2xpY3k6IHJlcXVlc3QuY2FjaGVMb29rdXBQb2xpY3ksXHJcbiAgICAgICAgICAgICAgICAgICAgYWNjZXNzVG9rZW5TaXplOiByZXN1bHQuYWNjZXNzVG9rZW4ubGVuZ3RoLFxyXG4gICAgICAgICAgICAgICAgICAgIGlkVG9rZW5TaXplOiByZXN1bHQuaWRUb2tlbi5sZW5ndGgsXHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7XHJcbiAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgICAgICAuY2F0Y2goKGVycm9yKSA9PiB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmFjdGl2ZVNpbGVudFRva2VuUmVxdWVzdHMuZGVsZXRlKHNpbGVudFJlcXVlc3RLZXkpO1xyXG4gICAgICAgICAgICAgICAgYXRzTWVhc3VyZW1lbnQuZW5kKHtcclxuICAgICAgICAgICAgICAgICAgICBzdWNjZXNzOiBmYWxzZSxcclxuICAgICAgICAgICAgICAgIH0sIGVycm9yKTtcclxuICAgICAgICAgICAgICAgIHRocm93IGVycm9yO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgdGhpcy5hY3RpdmVTaWxlbnRUb2tlblJlcXVlc3RzLnNldChzaWxlbnRSZXF1ZXN0S2V5LCByZXNwb25zZSk7XHJcbiAgICAgICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgICAgICAuLi4oYXdhaXQgcmVzcG9uc2UpLFxyXG4gICAgICAgICAgICAgICAgc3RhdGU6IHJlcXVlc3Quc3RhdGUsXHJcbiAgICAgICAgICAgIH07XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLmxvZ2dlci52ZXJib3NlKFwiYWNxdWlyZVRva2VuU2lsZW50IGhhcyBiZWVuIGNhbGxlZCBwcmV2aW91c2x5LCByZXR1cm5pbmcgdGhlIHJlc3VsdCBmcm9tIHRoZSBmaXJzdCBjYWxsXCIsIGNvcnJlbGF0aW9uSWQpO1xyXG4gICAgICAgICAgICAvLyBEaXNjYXJkIG1lYXN1cmVtZW50cyBmb3IgbWVtb2l6ZWQgY2FsbHMsIGFzIHRoZXkgYXJlIHVzdWFsbHkgb25seSBhIGNvdXBsZSBvZiBtcyBhbmQgd2lsbCBhcnRpZmljaWFsbHkgZGVmbGF0ZSBtZXRyaWNzXHJcbiAgICAgICAgICAgIGF0c01lYXN1cmVtZW50LmRpc2NhcmQoKTtcclxuICAgICAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgICAgIC4uLihhd2FpdCBjYWNoZWRSZXNwb25zZSksXHJcbiAgICAgICAgICAgICAgICBzdGF0ZTogcmVxdWVzdC5zdGF0ZSxcclxuICAgICAgICAgICAgfTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICAvKipcclxuICAgICAqIFNpbGVudGx5IGFjcXVpcmUgYW4gYWNjZXNzIHRva2VuIGZvciBhIGdpdmVuIHNldCBvZiBzY29wZXMuIFdpbGwgdXNlIGNhY2hlZCB0b2tlbiBpZiBhdmFpbGFibGUsIG90aGVyd2lzZSB3aWxsIGF0dGVtcHQgdG8gYWNxdWlyZSBhIG5ldyB0b2tlbiBmcm9tIHRoZSBuZXR3b3JrIHZpYSByZWZyZXNoIHRva2VuLlxyXG4gICAgICogQHBhcmFtIHtAbGluayAoU2lsZW50UmVxdWVzdDp0eXBlKX1cclxuICAgICAqIEBwYXJhbSB7QGxpbmsgKEFjY291bnRJbmZvOnR5cGUpfVxyXG4gICAgICogQHJldHVybnMge1Byb21pc2UuPEF1dGhlbnRpY2F0aW9uUmVzdWx0Pn0gLSBhIHByb21pc2UgdGhhdCBpcyBmdWxmaWxsZWQgd2hlbiB0aGlzIGZ1bmN0aW9uIGhhcyBjb21wbGV0ZWQsIG9yIHJlamVjdGVkIGlmIGFuIGVycm9yIHdhcyByYWlzZWQuIFJldHVybnMgdGhlIHtAbGluayBBdXRoUmVzcG9uc2V9XHJcbiAgICAgKi9cclxuICAgIGFzeW5jIGFjcXVpcmVUb2tlblNpbGVudEFzeW5jKHJlcXVlc3QsIGFjY291bnQpIHtcclxuICAgICAgICBjb25zdCB0cmFja1BhZ2VWaXNpYmlsaXR5ID0gKCkgPT4gdGhpcy50cmFja1BhZ2VWaXNpYmlsaXR5KHJlcXVlc3QuY29ycmVsYXRpb25JZCk7XHJcbiAgICAgICAgdGhpcy5wZXJmb3JtYW5jZUNsaWVudC5hZGRRdWV1ZU1lYXN1cmVtZW50KFBlcmZvcm1hbmNlRXZlbnRzLkFjcXVpcmVUb2tlblNpbGVudEFzeW5jLCByZXF1ZXN0LmNvcnJlbGF0aW9uSWQpO1xyXG4gICAgICAgIHRoaXMuZXZlbnRIYW5kbGVyLmVtaXRFdmVudChFdmVudFR5cGUuQUNRVUlSRV9UT0tFTl9TVEFSVCwgSW50ZXJhY3Rpb25UeXBlLlNpbGVudCwgcmVxdWVzdCk7XHJcbiAgICAgICAgaWYgKHJlcXVlc3QuY29ycmVsYXRpb25JZCkge1xyXG4gICAgICAgICAgICB0aGlzLnBlcmZvcm1hbmNlQ2xpZW50LmluY3JlbWVudEZpZWxkcyh7IHZpc2liaWxpdHlDaGFuZ2VDb3VudDogMCB9LCByZXF1ZXN0LmNvcnJlbGF0aW9uSWQpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKFwidmlzaWJpbGl0eWNoYW5nZVwiLCB0cmFja1BhZ2VWaXNpYmlsaXR5KTtcclxuICAgICAgICBjb25zdCBzaWxlbnRSZXF1ZXN0ID0gYXdhaXQgaW52b2tlQXN5bmMoaW5pdGlhbGl6ZVNpbGVudFJlcXVlc3QsIFBlcmZvcm1hbmNlRXZlbnRzLkluaXRpYWxpemVTaWxlbnRSZXF1ZXN0LCB0aGlzLmxvZ2dlciwgdGhpcy5wZXJmb3JtYW5jZUNsaWVudCwgcmVxdWVzdC5jb3JyZWxhdGlvbklkKShyZXF1ZXN0LCBhY2NvdW50LCB0aGlzLmNvbmZpZywgdGhpcy5wZXJmb3JtYW5jZUNsaWVudCwgdGhpcy5sb2dnZXIpO1xyXG4gICAgICAgIGNvbnN0IGNhY2hlTG9va3VwUG9saWN5ID0gcmVxdWVzdC5jYWNoZUxvb2t1cFBvbGljeSB8fCBDYWNoZUxvb2t1cFBvbGljeS5EZWZhdWx0O1xyXG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IHRoaXMuYWNxdWlyZVRva2VuU2lsZW50Tm9JZnJhbWUoc2lsZW50UmVxdWVzdCwgY2FjaGVMb29rdXBQb2xpY3kpLmNhdGNoKGFzeW5jIChyZWZyZXNoVG9rZW5FcnJvcikgPT4ge1xyXG4gICAgICAgICAgICBjb25zdCBzaG91bGRUcnlUb1Jlc29sdmVTaWxlbnRseSA9IGNoZWNrSWZSZWZyZXNoVG9rZW5FcnJvckNhbkJlUmVzb2x2ZWRTaWxlbnRseShyZWZyZXNoVG9rZW5FcnJvciwgY2FjaGVMb29rdXBQb2xpY3kpO1xyXG4gICAgICAgICAgICBpZiAoc2hvdWxkVHJ5VG9SZXNvbHZlU2lsZW50bHkpIHtcclxuICAgICAgICAgICAgICAgIGlmICghdGhpcy5hY3RpdmVJZnJhbWVSZXF1ZXN0KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgbGV0IF9yZXNvbHZlO1xyXG4gICAgICAgICAgICAgICAgICAgIC8vIEFsd2F5cyBzZXQgdGhlIGFjdGl2ZSByZXF1ZXN0IHRyYWNrZXIgaW1tZWRpYXRlbHkgYWZ0ZXIgY2hlY2tpbmcgaXQgdG8gcHJldmVudCByYWNlc1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuYWN0aXZlSWZyYW1lUmVxdWVzdCA9IFtcclxuICAgICAgICAgICAgICAgICAgICAgICAgbmV3IFByb21pc2UoKHJlc29sdmUpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9yZXNvbHZlID0gcmVzb2x2ZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfSksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHNpbGVudFJlcXVlc3QuY29ycmVsYXRpb25JZCxcclxuICAgICAgICAgICAgICAgICAgICBdO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMubG9nZ2VyLnZlcmJvc2UoXCJSZWZyZXNoIHRva2VuIGV4cGlyZWQvaW52YWxpZCBvciBDYWNoZUxvb2t1cFBvbGljeSBpcyBzZXQgdG8gU2tpcCwgYXR0ZW1wdGluZyBhY3F1aXJlIHRva2VuIGJ5IGlmcmFtZS5cIiwgc2lsZW50UmVxdWVzdC5jb3JyZWxhdGlvbklkKTtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gaW52b2tlQXN5bmModGhpcy5hY3F1aXJlVG9rZW5CeVNpbGVudElmcmFtZS5iaW5kKHRoaXMpLCBQZXJmb3JtYW5jZUV2ZW50cy5BY3F1aXJlVG9rZW5CeVNpbGVudElmcmFtZSwgdGhpcy5sb2dnZXIsIHRoaXMucGVyZm9ybWFuY2VDbGllbnQsIHNpbGVudFJlcXVlc3QuY29ycmVsYXRpb25JZCkoc2lsZW50UmVxdWVzdClcclxuICAgICAgICAgICAgICAgICAgICAgICAgLnRoZW4oKGlmcmFtZVJlc3VsdCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBfcmVzb2x2ZSh0cnVlKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGlmcmFtZVJlc3VsdDtcclxuICAgICAgICAgICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAuY2F0Y2goKGUpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgX3Jlc29sdmUoZmFsc2UpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBlO1xyXG4gICAgICAgICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC5maW5hbGx5KCgpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5hY3RpdmVJZnJhbWVSZXF1ZXN0ID0gdW5kZWZpbmVkO1xyXG4gICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgZWxzZSBpZiAoY2FjaGVMb29rdXBQb2xpY3kgIT09IENhY2hlTG9va3VwUG9saWN5LlNraXApIHtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBbYWN0aXZlUHJvbWlzZSwgYWN0aXZlQ29ycmVsYXRpb25JZF0gPSB0aGlzLmFjdGl2ZUlmcmFtZVJlcXVlc3Q7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5sb2dnZXIudmVyYm9zZShgSWZyYW1lIHJlcXVlc3QgaXMgYWxyZWFkeSBpbiBwcm9ncmVzcywgYXdhaXRpbmcgcmVzb2x1dGlvbiBmb3IgcmVxdWVzdCB3aXRoIGNvcnJlbGF0aW9uSWQ6ICR7YWN0aXZlQ29ycmVsYXRpb25JZH1gLCBzaWxlbnRSZXF1ZXN0LmNvcnJlbGF0aW9uSWQpO1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGF3YWl0Q29uY3VycmVudElmcmFtZU1lYXN1cmUgPSB0aGlzLnBlcmZvcm1hbmNlQ2xpZW50LnN0YXJ0TWVhc3VyZW1lbnQoUGVyZm9ybWFuY2VFdmVudHMuQXdhaXRDb25jdXJyZW50SWZyYW1lLCBzaWxlbnRSZXF1ZXN0LmNvcnJlbGF0aW9uSWQpO1xyXG4gICAgICAgICAgICAgICAgICAgIGF3YWl0Q29uY3VycmVudElmcmFtZU1lYXN1cmUuYWRkKHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgYXdhaXRJZnJhbWVDb3JyZWxhdGlvbklkOiBhY3RpdmVDb3JyZWxhdGlvbklkLFxyXG4gICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGFjdGl2ZVByb21pc2VSZXN1bHQgPSBhd2FpdCBhY3RpdmVQcm9taXNlO1xyXG4gICAgICAgICAgICAgICAgICAgIGF3YWl0Q29uY3VycmVudElmcmFtZU1lYXN1cmUuZW5kKHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgc3VjY2VzczogYWN0aXZlUHJvbWlzZVJlc3VsdCxcclxuICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoYWN0aXZlUHJvbWlzZVJlc3VsdCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmxvZ2dlci52ZXJib3NlKGBQYXJhbGxlbCBpZnJhbWUgcmVxdWVzdCB3aXRoIGNvcnJlbGF0aW9uSWQ6ICR7YWN0aXZlQ29ycmVsYXRpb25JZH0gc3VjY2VlZGVkLiBSZXRyeWluZyBjYWNoZSBhbmQvb3IgUlQgcmVkZW1wdGlvbmAsIHNpbGVudFJlcXVlc3QuY29ycmVsYXRpb25JZCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIFJldHJ5IGNhY2hlIGxvb2t1cCBhbmQvb3IgUlQgZXhjaGFuZ2UgYWZ0ZXIgaWZyYW1lIGNvbXBsZXRlc1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5hY3F1aXJlVG9rZW5TaWxlbnROb0lmcmFtZShzaWxlbnRSZXF1ZXN0LCBjYWNoZUxvb2t1cFBvbGljeSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmxvZ2dlci5pbmZvKGBJZnJhbWUgcmVxdWVzdCB3aXRoIGNvcnJlbGF0aW9uSWQ6ICR7YWN0aXZlQ29ycmVsYXRpb25JZH0gZmFpbGVkLiBJbnRlcmFjdGlvbiBpcyByZXF1aXJlZC5gKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gSWYgcHJldmlvdXMgaWZyYW1lIHJlcXVlc3QgZmFpbGVkLCBpdCdzIHVubGlrZWx5IHRvIHN1Y2NlZWQgdGhpcyB0aW1lLiBUaHJvdyBvcmlnaW5hbCBlcnJvci5cclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgcmVmcmVzaFRva2VuRXJyb3I7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgLy8gQ2FjaGUgcG9saWN5IHNldCB0byBza2lwIGFuZCBhbm90aGVyIGlmcmFtZSByZXF1ZXN0IGlzIGFscmVhZHkgaW4gcHJvZ3Jlc3NcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmxvZ2dlci53YXJuaW5nKFwiQW5vdGhlciBpZnJhbWUgcmVxdWVzdCBpcyBjdXJyZW50bHkgaW4gcHJvZ3Jlc3MgYW5kIENhY2hlTG9va3VwUG9saWN5IGlzIHNldCB0byBTa2lwLiBUaGlzIG1heSByZXN1bHQgaW4gZGVncmFkZWQgcGVyZm9ybWFuY2UgYW5kL29yIHJlbGlhYmlsaXR5IGZvciBib3RoIGNhbGxzLiBQbGVhc2UgY29uc2lkZXIgY2hhbmdpbmcgdGhlIENhY2hlTG9va3VwUG9saWN5IHRvIHRha2UgYWR2YW50YWdlIG9mIHJlcXVlc3QgcXVldWluZyBhbmQgdG9rZW4gY2FjaGUuXCIsIHNpbGVudFJlcXVlc3QuY29ycmVsYXRpb25JZCk7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGludm9rZUFzeW5jKHRoaXMuYWNxdWlyZVRva2VuQnlTaWxlbnRJZnJhbWUuYmluZCh0aGlzKSwgUGVyZm9ybWFuY2VFdmVudHMuQWNxdWlyZVRva2VuQnlTaWxlbnRJZnJhbWUsIHRoaXMubG9nZ2VyLCB0aGlzLnBlcmZvcm1hbmNlQ2xpZW50LCBzaWxlbnRSZXF1ZXN0LmNvcnJlbGF0aW9uSWQpKHNpbGVudFJlcXVlc3QpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgLy8gRXJyb3IgY2Fubm90IGJlIHNpbGVudGx5IHJlc29sdmVkIG9yIGlmcmFtZSByZW5ld2FsIGlzIG5vdCBhbGxvd2VkLCBpbnRlcmFjdGlvbiByZXF1aXJlZFxyXG4gICAgICAgICAgICAgICAgdGhyb3cgcmVmcmVzaFRva2VuRXJyb3I7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgICAgICByZXR1cm4gcmVzdWx0XHJcbiAgICAgICAgICAgIC50aGVuKChyZXNwb25zZSkgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLmV2ZW50SGFuZGxlci5lbWl0RXZlbnQoRXZlbnRUeXBlLkFDUVVJUkVfVE9LRU5fU1VDQ0VTUywgSW50ZXJhY3Rpb25UeXBlLlNpbGVudCwgcmVzcG9uc2UpO1xyXG4gICAgICAgICAgICBpZiAocmVxdWVzdC5jb3JyZWxhdGlvbklkKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnBlcmZvcm1hbmNlQ2xpZW50LmFkZEZpZWxkcyh7XHJcbiAgICAgICAgICAgICAgICAgICAgZnJvbUNhY2hlOiByZXNwb25zZS5mcm9tQ2FjaGUsXHJcbiAgICAgICAgICAgICAgICAgICAgaXNOYXRpdmVCcm9rZXI6IHJlc3BvbnNlLmZyb21OYXRpdmVCcm9rZXIsXHJcbiAgICAgICAgICAgICAgICB9LCByZXF1ZXN0LmNvcnJlbGF0aW9uSWQpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJldHVybiByZXNwb25zZTtcclxuICAgICAgICB9KVxyXG4gICAgICAgICAgICAuY2F0Y2goKHRva2VuUmVuZXdhbEVycm9yKSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMuZXZlbnRIYW5kbGVyLmVtaXRFdmVudChFdmVudFR5cGUuQUNRVUlSRV9UT0tFTl9GQUlMVVJFLCBJbnRlcmFjdGlvblR5cGUuU2lsZW50LCBudWxsLCB0b2tlblJlbmV3YWxFcnJvcik7XHJcbiAgICAgICAgICAgIHRocm93IHRva2VuUmVuZXdhbEVycm9yO1xyXG4gICAgICAgIH0pXHJcbiAgICAgICAgICAgIC5maW5hbGx5KCgpID0+IHtcclxuICAgICAgICAgICAgZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcihcInZpc2liaWxpdHljaGFuZ2VcIiwgdHJhY2tQYWdlVmlzaWJpbGl0eSk7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcbiAgICAvKipcclxuICAgICAqIEFjcXVpcmVUb2tlblNpbGVudCB3aXRob3V0IHRoZSBpZnJhbWUgZmFsbGJhY2suIFRoaXMgaXMgdXNlZCB0byBlbmFibGUgdGhlIGNvcnJlY3QgZmFsbGJhY2tzIGluIGNhc2VzIHdoZXJlIHRoZXJlJ3MgYSBwb3RlbnRpYWwgZm9yIG11bHRpcGxlIHNpbGVudCByZXF1ZXN0cyB0byBiZSBtYWRlIGluIHBhcmFsbGVsIGFuZCBwcmV2ZW50IHRob3NlIHJlcXVlc3RzIGZyb20gbWFraW5nIGNvbmN1cnJlbnQgaWZyYW1lIHJlcXVlc3RzLlxyXG4gICAgICogQHBhcmFtIHNpbGVudFJlcXVlc3RcclxuICAgICAqIEBwYXJhbSBjYWNoZUxvb2t1cFBvbGljeVxyXG4gICAgICogQHJldHVybnNcclxuICAgICAqL1xyXG4gICAgYXN5bmMgYWNxdWlyZVRva2VuU2lsZW50Tm9JZnJhbWUoc2lsZW50UmVxdWVzdCwgY2FjaGVMb29rdXBQb2xpY3kpIHtcclxuICAgICAgICBpZiAoTmF0aXZlTWVzc2FnZUhhbmRsZXIuaXNOYXRpdmVBdmFpbGFibGUodGhpcy5jb25maWcsIHRoaXMubG9nZ2VyLCB0aGlzLm5hdGl2ZUV4dGVuc2lvblByb3ZpZGVyLCBzaWxlbnRSZXF1ZXN0LmF1dGhlbnRpY2F0aW9uU2NoZW1lKSAmJlxyXG4gICAgICAgICAgICBzaWxlbnRSZXF1ZXN0LmFjY291bnQubmF0aXZlQWNjb3VudElkKSB7XHJcbiAgICAgICAgICAgIHRoaXMubG9nZ2VyLnZlcmJvc2UoXCJhY3F1aXJlVG9rZW5TaWxlbnQgLSBhdHRlbXB0aW5nIHRvIGFjcXVpcmUgdG9rZW4gZnJvbSBuYXRpdmUgcGxhdGZvcm1cIik7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmFjcXVpcmVUb2tlbk5hdGl2ZShzaWxlbnRSZXF1ZXN0LCBBcGlJZC5hY3F1aXJlVG9rZW5TaWxlbnRfc2lsZW50RmxvdykuY2F0Y2goYXN5bmMgKGUpID0+IHtcclxuICAgICAgICAgICAgICAgIC8vIElmIG5hdGl2ZSB0b2tlbiBhY3F1aXNpdGlvbiBmYWlscyBmb3IgYXZhaWxhYmlsaXR5IHJlYXNvbnMgZmFsbGJhY2sgdG8gd2ViIGZsb3dcclxuICAgICAgICAgICAgICAgIGlmIChlIGluc3RhbmNlb2YgTmF0aXZlQXV0aEVycm9yICYmIGlzRmF0YWxOYXRpdmVBdXRoRXJyb3IoZSkpIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmxvZ2dlci52ZXJib3NlKFwiYWNxdWlyZVRva2VuU2lsZW50IC0gbmF0aXZlIHBsYXRmb3JtIHVuYXZhaWxhYmxlLCBmYWxsaW5nIGJhY2sgdG8gd2ViIGZsb3dcIik7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5uYXRpdmVFeHRlbnNpb25Qcm92aWRlciA9IHVuZGVmaW5lZDsgLy8gUHJldmVudCBmdXR1cmUgcmVxdWVzdHMgZnJvbSBjb250aW51aW5nIHRvIGF0dGVtcHRcclxuICAgICAgICAgICAgICAgICAgICAvLyBDYWNoZSB3aWxsIG5vdCBjb250YWluIHRva2VucywgZ2l2ZW4gdGhhdCBwcmV2aW91cyBXQU0gcmVxdWVzdHMgc3VjY2VlZGVkLiBTa2lwIGNhY2hlIGFuZCBSVCByZW5ld2FsIGFuZCBnbyBzdHJhaWdodCB0byBpZnJhbWUgcmVuZXdhbFxyXG4gICAgICAgICAgICAgICAgICAgIHRocm93IGNyZWF0ZUNsaWVudEF1dGhFcnJvcihDbGllbnRBdXRoRXJyb3JDb2Rlcy50b2tlblJlZnJlc2hSZXF1aXJlZCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB0aHJvdyBlO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMubG9nZ2VyLnZlcmJvc2UoXCJhY3F1aXJlVG9rZW5TaWxlbnQgLSBhdHRlbXB0aW5nIHRvIGFjcXVpcmUgdG9rZW4gZnJvbSB3ZWIgZmxvd1wiKTtcclxuICAgICAgICAgICAgcmV0dXJuIGludm9rZUFzeW5jKHRoaXMuYWNxdWlyZVRva2VuRnJvbUNhY2hlLmJpbmQodGhpcyksIFBlcmZvcm1hbmNlRXZlbnRzLkFjcXVpcmVUb2tlbkZyb21DYWNoZSwgdGhpcy5sb2dnZXIsIHRoaXMucGVyZm9ybWFuY2VDbGllbnQsIHNpbGVudFJlcXVlc3QuY29ycmVsYXRpb25JZCkoc2lsZW50UmVxdWVzdCwgY2FjaGVMb29rdXBQb2xpY3kpLmNhdGNoKChjYWNoZUVycm9yKSA9PiB7XHJcbiAgICAgICAgICAgICAgICBpZiAoY2FjaGVMb29rdXBQb2xpY3kgPT09IENhY2hlTG9va3VwUG9saWN5LkFjY2Vzc1Rva2VuKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgY2FjaGVFcnJvcjtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIHRoaXMuZXZlbnRIYW5kbGVyLmVtaXRFdmVudChFdmVudFR5cGUuQUNRVUlSRV9UT0tFTl9ORVRXT1JLX1NUQVJULCBJbnRlcmFjdGlvblR5cGUuU2lsZW50LCBzaWxlbnRSZXF1ZXN0KTtcclxuICAgICAgICAgICAgICAgIHJldHVybiBpbnZva2VBc3luYyh0aGlzLmFjcXVpcmVUb2tlbkJ5UmVmcmVzaFRva2VuLmJpbmQodGhpcyksIFBlcmZvcm1hbmNlRXZlbnRzLkFjcXVpcmVUb2tlbkJ5UmVmcmVzaFRva2VuLCB0aGlzLmxvZ2dlciwgdGhpcy5wZXJmb3JtYW5jZUNsaWVudCwgc2lsZW50UmVxdWVzdC5jb3JyZWxhdGlvbklkKShzaWxlbnRSZXF1ZXN0LCBjYWNoZUxvb2t1cFBvbGljeSk7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxufVxyXG4vKipcclxuICogRGV0ZXJtaW5lcyB3aGV0aGVyIGFuIGVycm9yIHRocm93biBieSB0aGUgcmVmcmVzaCB0b2tlbiBlbmRwb2ludCBjYW4gYmUgcmVzb2x2ZWQgd2l0aG91dCBpbnRlcmFjdGlvblxyXG4gKiBAcGFyYW0gcmVmcmVzaFRva2VuRXJyb3JcclxuICogQHBhcmFtIHNpbGVudFJlcXVlc3RcclxuICogQHBhcmFtIGNhY2hlTG9va3VwUG9saWN5XHJcbiAqIEByZXR1cm5zXHJcbiAqL1xyXG5mdW5jdGlvbiBjaGVja0lmUmVmcmVzaFRva2VuRXJyb3JDYW5CZVJlc29sdmVkU2lsZW50bHkocmVmcmVzaFRva2VuRXJyb3IsIGNhY2hlTG9va3VwUG9saWN5KSB7XHJcbiAgICBjb25zdCBub0ludGVyYWN0aW9uUmVxdWlyZWQgPSAhKHJlZnJlc2hUb2tlbkVycm9yIGluc3RhbmNlb2YgSW50ZXJhY3Rpb25SZXF1aXJlZEF1dGhFcnJvciAmJlxyXG4gICAgICAgIC8vIEZvciByZWZyZXNoIHRva2VuIGVycm9ycywgYmFkX3Rva2VuIGRvZXMgbm90IGFsd2F5cyByZXF1aXJlIGludGVyYWN0aW9uIChzaWxlbnRseSByZXNvbHZhYmxlKVxyXG4gICAgICAgIHJlZnJlc2hUb2tlbkVycm9yLnN1YkVycm9yICE9PVxyXG4gICAgICAgICAgICBJbnRlcmFjdGlvblJlcXVpcmVkQXV0aEVycm9yQ29kZXMuYmFkVG9rZW4pO1xyXG4gICAgLy8gRXJyb3JzIHRoYXQgcmVzdWx0IHdoZW4gdGhlIHJlZnJlc2ggdG9rZW4gbmVlZHMgdG8gYmUgcmVwbGFjZWRcclxuICAgIGNvbnN0IHJlZnJlc2hUb2tlblJlZnJlc2hSZXF1aXJlZCA9IHJlZnJlc2hUb2tlbkVycm9yLmVycm9yQ29kZSA9PT0gQnJvd3NlckNvbnN0YW50cy5JTlZBTElEX0dSQU5UX0VSUk9SIHx8XHJcbiAgICAgICAgcmVmcmVzaFRva2VuRXJyb3IuZXJyb3JDb2RlID09PVxyXG4gICAgICAgICAgICBDbGllbnRBdXRoRXJyb3JDb2Rlcy50b2tlblJlZnJlc2hSZXF1aXJlZDtcclxuICAgIC8vIEVycm9ycyB0aGF0IG1heSBiZSByZXNvbHZlZCBiZWZvcmUgZmFsbGluZyBiYWNrIHRvIGludGVyYWN0aW9uICh0aHJvdWdoIGlmcmFtZSByZW5ld2FsKVxyXG4gICAgY29uc3QgaXNTaWxlbnRseVJlc29sdmFibGUgPSAobm9JbnRlcmFjdGlvblJlcXVpcmVkICYmIHJlZnJlc2hUb2tlblJlZnJlc2hSZXF1aXJlZCkgfHxcclxuICAgICAgICByZWZyZXNoVG9rZW5FcnJvci5lcnJvckNvZGUgPT09XHJcbiAgICAgICAgICAgIEludGVyYWN0aW9uUmVxdWlyZWRBdXRoRXJyb3JDb2Rlcy5ub1Rva2Vuc0ZvdW5kIHx8XHJcbiAgICAgICAgcmVmcmVzaFRva2VuRXJyb3IuZXJyb3JDb2RlID09PVxyXG4gICAgICAgICAgICBJbnRlcmFjdGlvblJlcXVpcmVkQXV0aEVycm9yQ29kZXMucmVmcmVzaFRva2VuRXhwaXJlZDtcclxuICAgIC8vIE9ubHkgdGhlc2UgcG9saWNpZXMgYWxsb3cgZm9yIGFuIGlmcmFtZSByZW5ld2FsIGF0dGVtcHRcclxuICAgIGNvbnN0IHRyeUlmcmFtZVJlbmV3YWwgPSBpRnJhbWVSZW5ld2FsUG9saWNpZXMuaW5jbHVkZXMoY2FjaGVMb29rdXBQb2xpY3kpO1xyXG4gICAgcmV0dXJuIGlzU2lsZW50bHlSZXNvbHZhYmxlICYmIHRyeUlmcmFtZVJlbmV3YWw7XHJcbn1cblxuZXhwb3J0IHsgU3RhbmRhcmRDb250cm9sbGVyIH07XG4vLyMgc291cmNlTWFwcGluZ1VSTD1TdGFuZGFyZENvbnRyb2xsZXIubWpzLm1hcFxuIiwiLyohIEBhenVyZS9tc2FsLWJyb3dzZXIgdjMuMjguMSAyMDI1LTAxLTE0ICovXG4ndXNlIHN0cmljdCc7XG4vKlxyXG4gKiBDb3B5cmlnaHQgKGMpIE1pY3Jvc29mdCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cclxuICogTGljZW5zZWQgdW5kZXIgdGhlIE1JVCBMaWNlbnNlLlxyXG4gKi9cclxuZnVuY3Rpb24gaXNCcmlkZ2VFcnJvcihlcnJvcikge1xyXG4gICAgcmV0dXJuIGVycm9yLnN0YXR1cyAhPT0gdW5kZWZpbmVkO1xyXG59XG5cbmV4cG9ydCB7IGlzQnJpZGdlRXJyb3IgfTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPUJyaWRnZUVycm9yLm1qcy5tYXBcbiIsIi8qISBAYXp1cmUvbXNhbC1icm93c2VyIHYzLjI4LjEgMjAyNS0wMS0xNCAqL1xuJ3VzZSBzdHJpY3QnO1xuaW1wb3J0IHsgUmVxdWVzdFBhcmFtZXRlckJ1aWxkZXIsIFN0cmluZ1V0aWxzLCBBdXRoZW50aWNhdGlvblNjaGVtZSwgY3JlYXRlQ2xpZW50QXV0aEVycm9yLCBDbGllbnRBdXRoRXJyb3JDb2RlcywgQXV0aFRva2VuLCBidWlsZFRlbmFudFByb2ZpbGUsIEF1dGhFcnJvciwgSW50ZXJhY3Rpb25SZXF1aXJlZEF1dGhFcnJvciwgU2VydmVyRXJyb3IsIENsaWVudEF1dGhFcnJvciwgT0lEQ19ERUZBVUxUX1NDT1BFUyB9IGZyb20gJ0BhenVyZS9tc2FsLWNvbW1vbi9icm93c2VyJztcbmltcG9ydCB7IGlzQnJpZGdlRXJyb3IgfSBmcm9tICcuLi9CcmlkZ2VFcnJvci5tanMnO1xuaW1wb3J0IHsgQnJpZGdlU3RhdHVzQ29kZSB9IGZyb20gJy4uL0JyaWRnZVN0YXR1c0NvZGUubWpzJztcblxuLypcclxuICogQ29weXJpZ2h0IChjKSBNaWNyb3NvZnQgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuXHJcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgTGljZW5zZS5cclxuICovXHJcbmNsYXNzIE5lc3RlZEFwcEF1dGhBZGFwdGVyIHtcclxuICAgIGNvbnN0cnVjdG9yKGNsaWVudElkLCBjbGllbnRDYXBhYmlsaXRpZXMsIGNyeXB0bywgbG9nZ2VyKSB7XHJcbiAgICAgICAgdGhpcy5jbGllbnRJZCA9IGNsaWVudElkO1xyXG4gICAgICAgIHRoaXMuY2xpZW50Q2FwYWJpbGl0aWVzID0gY2xpZW50Q2FwYWJpbGl0aWVzO1xyXG4gICAgICAgIHRoaXMuY3J5cHRvID0gY3J5cHRvO1xyXG4gICAgICAgIHRoaXMubG9nZ2VyID0gbG9nZ2VyO1xyXG4gICAgfVxyXG4gICAgdG9OYWFUb2tlblJlcXVlc3QocmVxdWVzdCkge1xyXG4gICAgICAgIGxldCBleHRyYVBhcmFtcztcclxuICAgICAgICBpZiAocmVxdWVzdC5leHRyYVF1ZXJ5UGFyYW1ldGVycyA9PT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgICAgIGV4dHJhUGFyYW1zID0gbmV3IE1hcCgpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgZXh0cmFQYXJhbXMgPSBuZXcgTWFwKE9iamVjdC5lbnRyaWVzKHJlcXVlc3QuZXh0cmFRdWVyeVBhcmFtZXRlcnMpKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgY29uc3QgY29ycmVsYXRpb25JZCA9IHJlcXVlc3QuY29ycmVsYXRpb25JZCB8fCB0aGlzLmNyeXB0by5jcmVhdGVOZXdHdWlkKCk7XHJcbiAgICAgICAgY29uc3QgcmVxdWVzdEJ1aWxkZXIgPSBuZXcgUmVxdWVzdFBhcmFtZXRlckJ1aWxkZXIoY29ycmVsYXRpb25JZCk7XHJcbiAgICAgICAgY29uc3QgY2xhaW1zID0gcmVxdWVzdEJ1aWxkZXIuYWRkQ2xpZW50Q2FwYWJpbGl0aWVzVG9DbGFpbXMocmVxdWVzdC5jbGFpbXMsIHRoaXMuY2xpZW50Q2FwYWJpbGl0aWVzKTtcclxuICAgICAgICBjb25zdCBzY29wZXMgPSByZXF1ZXN0LnNjb3BlcyB8fCBPSURDX0RFRkFVTFRfU0NPUEVTO1xyXG4gICAgICAgIGNvbnN0IHRva2VuUmVxdWVzdCA9IHtcclxuICAgICAgICAgICAgcGxhdGZvcm1Ccm9rZXJJZDogcmVxdWVzdC5hY2NvdW50Py5ob21lQWNjb3VudElkLFxyXG4gICAgICAgICAgICBjbGllbnRJZDogdGhpcy5jbGllbnRJZCxcclxuICAgICAgICAgICAgYXV0aG9yaXR5OiByZXF1ZXN0LmF1dGhvcml0eSxcclxuICAgICAgICAgICAgc2NvcGU6IHNjb3Blcy5qb2luKFwiIFwiKSxcclxuICAgICAgICAgICAgY29ycmVsYXRpb25JZCxcclxuICAgICAgICAgICAgY2xhaW1zOiAhU3RyaW5nVXRpbHMuaXNFbXB0eU9iaihjbGFpbXMpID8gY2xhaW1zIDogdW5kZWZpbmVkLFxyXG4gICAgICAgICAgICBzdGF0ZTogcmVxdWVzdC5zdGF0ZSxcclxuICAgICAgICAgICAgYXV0aGVudGljYXRpb25TY2hlbWU6IHJlcXVlc3QuYXV0aGVudGljYXRpb25TY2hlbWUgfHwgQXV0aGVudGljYXRpb25TY2hlbWUuQkVBUkVSLFxyXG4gICAgICAgICAgICBleHRyYVBhcmFtZXRlcnM6IGV4dHJhUGFyYW1zLFxyXG4gICAgICAgIH07XHJcbiAgICAgICAgcmV0dXJuIHRva2VuUmVxdWVzdDtcclxuICAgIH1cclxuICAgIGZyb21OYWFUb2tlblJlc3BvbnNlKHJlcXVlc3QsIHJlc3BvbnNlLCByZXFUaW1lc3RhbXApIHtcclxuICAgICAgICBpZiAoIXJlc3BvbnNlLnRva2VuLmlkX3Rva2VuIHx8ICFyZXNwb25zZS50b2tlbi5hY2Nlc3NfdG9rZW4pIHtcclxuICAgICAgICAgICAgdGhyb3cgY3JlYXRlQ2xpZW50QXV0aEVycm9yKENsaWVudEF1dGhFcnJvckNvZGVzLm51bGxPckVtcHR5VG9rZW4pO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjb25zdCBleHBpcmVzT24gPSBuZXcgRGF0ZSgocmVxVGltZXN0YW1wICsgKHJlc3BvbnNlLnRva2VuLmV4cGlyZXNfaW4gfHwgMCkpICogMTAwMCk7XHJcbiAgICAgICAgY29uc3QgaWRUb2tlbkNsYWltcyA9IEF1dGhUb2tlbi5leHRyYWN0VG9rZW5DbGFpbXMocmVzcG9uc2UudG9rZW4uaWRfdG9rZW4sIHRoaXMuY3J5cHRvLmJhc2U2NERlY29kZSk7XHJcbiAgICAgICAgY29uc3QgYWNjb3VudCA9IHRoaXMuZnJvbU5hYUFjY291bnRJbmZvKHJlc3BvbnNlLmFjY291bnQsIHJlc3BvbnNlLnRva2VuLmlkX3Rva2VuLCBpZFRva2VuQ2xhaW1zKTtcclxuICAgICAgICBjb25zdCBzY29wZXMgPSByZXNwb25zZS50b2tlbi5zY29wZSB8fCByZXF1ZXN0LnNjb3BlO1xyXG4gICAgICAgIGNvbnN0IGF1dGhlbnRpY2F0aW9uUmVzdWx0ID0ge1xyXG4gICAgICAgICAgICBhdXRob3JpdHk6IHJlc3BvbnNlLnRva2VuLmF1dGhvcml0eSB8fCBhY2NvdW50LmVudmlyb25tZW50LFxyXG4gICAgICAgICAgICB1bmlxdWVJZDogYWNjb3VudC5sb2NhbEFjY291bnRJZCxcclxuICAgICAgICAgICAgdGVuYW50SWQ6IGFjY291bnQudGVuYW50SWQsXHJcbiAgICAgICAgICAgIHNjb3Blczogc2NvcGVzLnNwbGl0KFwiIFwiKSxcclxuICAgICAgICAgICAgYWNjb3VudCxcclxuICAgICAgICAgICAgaWRUb2tlbjogcmVzcG9uc2UudG9rZW4uaWRfdG9rZW4sXHJcbiAgICAgICAgICAgIGlkVG9rZW5DbGFpbXMsXHJcbiAgICAgICAgICAgIGFjY2Vzc1Rva2VuOiByZXNwb25zZS50b2tlbi5hY2Nlc3NfdG9rZW4sXHJcbiAgICAgICAgICAgIGZyb21DYWNoZTogZmFsc2UsXHJcbiAgICAgICAgICAgIGV4cGlyZXNPbjogZXhwaXJlc09uLFxyXG4gICAgICAgICAgICB0b2tlblR5cGU6IHJlcXVlc3QuYXV0aGVudGljYXRpb25TY2hlbWUgfHwgQXV0aGVudGljYXRpb25TY2hlbWUuQkVBUkVSLFxyXG4gICAgICAgICAgICBjb3JyZWxhdGlvbklkOiByZXF1ZXN0LmNvcnJlbGF0aW9uSWQsXHJcbiAgICAgICAgICAgIGV4dEV4cGlyZXNPbjogZXhwaXJlc09uLFxyXG4gICAgICAgICAgICBzdGF0ZTogcmVxdWVzdC5zdGF0ZSxcclxuICAgICAgICB9O1xyXG4gICAgICAgIHJldHVybiBhdXRoZW50aWNhdGlvblJlc3VsdDtcclxuICAgIH1cclxuICAgIC8qXHJcbiAgICAgKiAgZXhwb3J0IHR5cGUgQWNjb3VudEluZm8gPSB7XHJcbiAgICAgKiAgICAgaG9tZUFjY291bnRJZDogc3RyaW5nO1xyXG4gICAgICogICAgIGVudmlyb25tZW50OiBzdHJpbmc7XHJcbiAgICAgKiAgICAgdGVuYW50SWQ6IHN0cmluZztcclxuICAgICAqICAgICB1c2VybmFtZTogc3RyaW5nO1xyXG4gICAgICogICAgIGxvY2FsQWNjb3VudElkOiBzdHJpbmc7XHJcbiAgICAgKiAgICAgbmFtZT86IHN0cmluZztcclxuICAgICAqICAgICBpZFRva2VuPzogc3RyaW5nO1xyXG4gICAgICogICAgIGlkVG9rZW5DbGFpbXM/OiBUb2tlbkNsYWltcyAmIHtcclxuICAgICAqICAgICAgICAgW2tleTogc3RyaW5nXTpcclxuICAgICAqICAgICAgICAgICAgIHwgc3RyaW5nXHJcbiAgICAgKiAgICAgICAgICAgICB8IG51bWJlclxyXG4gICAgICogICAgICAgICAgICAgfCBzdHJpbmdbXVxyXG4gICAgICogICAgICAgICAgICAgfCBvYmplY3RcclxuICAgICAqICAgICAgICAgICAgIHwgdW5kZWZpbmVkXHJcbiAgICAgKiAgICAgICAgICAgICB8IHVua25vd247XHJcbiAgICAgKiAgICAgfTtcclxuICAgICAqICAgICBuYXRpdmVBY2NvdW50SWQ/OiBzdHJpbmc7XHJcbiAgICAgKiAgICAgYXV0aG9yaXR5VHlwZT86IHN0cmluZztcclxuICAgICAqIH07XHJcbiAgICAgKi9cclxuICAgIGZyb21OYWFBY2NvdW50SW5mbyhmcm9tQWNjb3VudCwgaWRUb2tlbiwgaWRUb2tlbkNsYWltcykge1xyXG4gICAgICAgIGNvbnN0IGVmZmVjdGl2ZUlkVG9rZW5DbGFpbXMgPSBpZFRva2VuQ2xhaW1zIHx8IGZyb21BY2NvdW50LmlkVG9rZW5DbGFpbXM7XHJcbiAgICAgICAgY29uc3QgbG9jYWxBY2NvdW50SWQgPSBmcm9tQWNjb3VudC5sb2NhbEFjY291bnRJZCB8fFxyXG4gICAgICAgICAgICBlZmZlY3RpdmVJZFRva2VuQ2xhaW1zPy5vaWQgfHxcclxuICAgICAgICAgICAgZWZmZWN0aXZlSWRUb2tlbkNsYWltcz8uc3ViIHx8XHJcbiAgICAgICAgICAgIFwiXCI7XHJcbiAgICAgICAgY29uc3QgdGVuYW50SWQgPSBmcm9tQWNjb3VudC50ZW5hbnRJZCB8fCBlZmZlY3RpdmVJZFRva2VuQ2xhaW1zPy50aWQgfHwgXCJcIjtcclxuICAgICAgICBjb25zdCBob21lQWNjb3VudElkID0gZnJvbUFjY291bnQuaG9tZUFjY291bnRJZCB8fCBgJHtsb2NhbEFjY291bnRJZH0uJHt0ZW5hbnRJZH1gO1xyXG4gICAgICAgIGNvbnN0IHVzZXJuYW1lID0gZnJvbUFjY291bnQudXNlcm5hbWUgfHxcclxuICAgICAgICAgICAgZWZmZWN0aXZlSWRUb2tlbkNsYWltcz8ucHJlZmVycmVkX3VzZXJuYW1lIHx8XHJcbiAgICAgICAgICAgIFwiXCI7XHJcbiAgICAgICAgY29uc3QgbmFtZSA9IGZyb21BY2NvdW50Lm5hbWUgfHwgZWZmZWN0aXZlSWRUb2tlbkNsYWltcz8ubmFtZTtcclxuICAgICAgICBjb25zdCB0ZW5hbnRQcm9maWxlcyA9IG5ldyBNYXAoKTtcclxuICAgICAgICBjb25zdCB0ZW5hbnRQcm9maWxlID0gYnVpbGRUZW5hbnRQcm9maWxlKGhvbWVBY2NvdW50SWQsIGxvY2FsQWNjb3VudElkLCB0ZW5hbnRJZCwgZWZmZWN0aXZlSWRUb2tlbkNsYWltcyk7XHJcbiAgICAgICAgdGVuYW50UHJvZmlsZXMuc2V0KHRlbmFudElkLCB0ZW5hbnRQcm9maWxlKTtcclxuICAgICAgICBjb25zdCBhY2NvdW50ID0ge1xyXG4gICAgICAgICAgICBob21lQWNjb3VudElkLFxyXG4gICAgICAgICAgICBlbnZpcm9ubWVudDogZnJvbUFjY291bnQuZW52aXJvbm1lbnQsXHJcbiAgICAgICAgICAgIHRlbmFudElkLFxyXG4gICAgICAgICAgICB1c2VybmFtZSxcclxuICAgICAgICAgICAgbG9jYWxBY2NvdW50SWQsXHJcbiAgICAgICAgICAgIG5hbWUsXHJcbiAgICAgICAgICAgIGlkVG9rZW46IGlkVG9rZW4sXHJcbiAgICAgICAgICAgIGlkVG9rZW5DbGFpbXM6IGVmZmVjdGl2ZUlkVG9rZW5DbGFpbXMsXHJcbiAgICAgICAgICAgIHRlbmFudFByb2ZpbGVzLFxyXG4gICAgICAgIH07XHJcbiAgICAgICAgcmV0dXJuIGFjY291bnQ7XHJcbiAgICB9XHJcbiAgICAvKipcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0gZXJyb3IgQnJpZGdlRXJyb3JcclxuICAgICAqIEByZXR1cm5zIEF1dGhFcnJvciwgQ2xpZW50QXV0aEVycm9yLCBDbGllbnRDb25maWd1cmF0aW9uRXJyb3IsIFNlcnZlckVycm9yLCBJbnRlcmFjdGlvblJlcXVpcmVkRXJyb3JcclxuICAgICAqL1xyXG4gICAgZnJvbUJyaWRnZUVycm9yKGVycm9yKSB7XHJcbiAgICAgICAgaWYgKGlzQnJpZGdlRXJyb3IoZXJyb3IpKSB7XHJcbiAgICAgICAgICAgIHN3aXRjaCAoZXJyb3Iuc3RhdHVzKSB7XHJcbiAgICAgICAgICAgICAgICBjYXNlIEJyaWRnZVN0YXR1c0NvZGUuVXNlckNhbmNlbDpcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gbmV3IENsaWVudEF1dGhFcnJvcihDbGllbnRBdXRoRXJyb3JDb2Rlcy51c2VyQ2FuY2VsZWQpO1xyXG4gICAgICAgICAgICAgICAgY2FzZSBCcmlkZ2VTdGF0dXNDb2RlLk5vTmV0d29yazpcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gbmV3IENsaWVudEF1dGhFcnJvcihDbGllbnRBdXRoRXJyb3JDb2Rlcy5ub05ldHdvcmtDb25uZWN0aXZpdHkpO1xyXG4gICAgICAgICAgICAgICAgY2FzZSBCcmlkZ2VTdGF0dXNDb2RlLkFjY291bnRVbmF2YWlsYWJsZTpcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gbmV3IENsaWVudEF1dGhFcnJvcihDbGllbnRBdXRoRXJyb3JDb2Rlcy5ub0FjY291bnRGb3VuZCk7XHJcbiAgICAgICAgICAgICAgICBjYXNlIEJyaWRnZVN0YXR1c0NvZGUuRGlzYWJsZWQ6XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBDbGllbnRBdXRoRXJyb3IoQ2xpZW50QXV0aEVycm9yQ29kZXMubmVzdGVkQXBwQXV0aEJyaWRnZURpc2FibGVkKTtcclxuICAgICAgICAgICAgICAgIGNhc2UgQnJpZGdlU3RhdHVzQ29kZS5OZXN0ZWRBcHBBdXRoVW5hdmFpbGFibGU6XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBDbGllbnRBdXRoRXJyb3IoZXJyb3IuY29kZSB8fFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBDbGllbnRBdXRoRXJyb3JDb2Rlcy5uZXN0ZWRBcHBBdXRoQnJpZGdlRGlzYWJsZWQsIGVycm9yLmRlc2NyaXB0aW9uKTtcclxuICAgICAgICAgICAgICAgIGNhc2UgQnJpZGdlU3RhdHVzQ29kZS5UcmFuc2llbnRFcnJvcjpcclxuICAgICAgICAgICAgICAgIGNhc2UgQnJpZGdlU3RhdHVzQ29kZS5QZXJzaXN0ZW50RXJyb3I6XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBTZXJ2ZXJFcnJvcihlcnJvci5jb2RlLCBlcnJvci5kZXNjcmlwdGlvbik7XHJcbiAgICAgICAgICAgICAgICBjYXNlIEJyaWRnZVN0YXR1c0NvZGUuVXNlckludGVyYWN0aW9uUmVxdWlyZWQ6XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBJbnRlcmFjdGlvblJlcXVpcmVkQXV0aEVycm9yKGVycm9yLmNvZGUsIGVycm9yLmRlc2NyaXB0aW9uKTtcclxuICAgICAgICAgICAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBBdXRoRXJyb3IoZXJyb3IuY29kZSwgZXJyb3IuZGVzY3JpcHRpb24pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICByZXR1cm4gbmV3IEF1dGhFcnJvcihcInVua25vd25fZXJyb3JcIiwgXCJBbiB1bmtub3duIGVycm9yIG9jY3VycmVkXCIpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIC8qKlxyXG4gICAgICogUmV0dXJucyBhbiBBdXRoZW50aWNhdGlvblJlc3VsdCBmcm9tIHRoZSBnaXZlbiBjYWNoZSBpdGVtc1xyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSBhY2NvdW50XHJcbiAgICAgKiBAcGFyYW0gaWRUb2tlblxyXG4gICAgICogQHBhcmFtIGFjY2Vzc1Rva2VuXHJcbiAgICAgKiBAcGFyYW0gcmVxVGltZXN0YW1wXHJcbiAgICAgKiBAcmV0dXJuc1xyXG4gICAgICovXHJcbiAgICB0b0F1dGhlbnRpY2F0aW9uUmVzdWx0RnJvbUNhY2hlKGFjY291bnQsIGlkVG9rZW4sIGFjY2Vzc1Rva2VuLCByZXF1ZXN0LCBjb3JyZWxhdGlvbklkKSB7XHJcbiAgICAgICAgaWYgKCFpZFRva2VuIHx8ICFhY2Nlc3NUb2tlbikge1xyXG4gICAgICAgICAgICB0aHJvdyBjcmVhdGVDbGllbnRBdXRoRXJyb3IoQ2xpZW50QXV0aEVycm9yQ29kZXMubnVsbE9yRW1wdHlUb2tlbik7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNvbnN0IGlkVG9rZW5DbGFpbXMgPSBBdXRoVG9rZW4uZXh0cmFjdFRva2VuQ2xhaW1zKGlkVG9rZW4uc2VjcmV0LCB0aGlzLmNyeXB0by5iYXNlNjREZWNvZGUpO1xyXG4gICAgICAgIGNvbnN0IHNjb3BlcyA9IGFjY2Vzc1Rva2VuLnRhcmdldCB8fCByZXF1ZXN0LnNjb3Blcy5qb2luKFwiIFwiKTtcclxuICAgICAgICBjb25zdCBhdXRoZW50aWNhdGlvblJlc3VsdCA9IHtcclxuICAgICAgICAgICAgYXV0aG9yaXR5OiBhY2Nlc3NUb2tlbi5lbnZpcm9ubWVudCB8fCBhY2NvdW50LmVudmlyb25tZW50LFxyXG4gICAgICAgICAgICB1bmlxdWVJZDogYWNjb3VudC5sb2NhbEFjY291bnRJZCxcclxuICAgICAgICAgICAgdGVuYW50SWQ6IGFjY291bnQudGVuYW50SWQsXHJcbiAgICAgICAgICAgIHNjb3Blczogc2NvcGVzLnNwbGl0KFwiIFwiKSxcclxuICAgICAgICAgICAgYWNjb3VudCxcclxuICAgICAgICAgICAgaWRUb2tlbjogaWRUb2tlbi5zZWNyZXQsXHJcbiAgICAgICAgICAgIGlkVG9rZW5DbGFpbXM6IGlkVG9rZW5DbGFpbXMgfHwge30sXHJcbiAgICAgICAgICAgIGFjY2Vzc1Rva2VuOiBhY2Nlc3NUb2tlbi5zZWNyZXQsXHJcbiAgICAgICAgICAgIGZyb21DYWNoZTogdHJ1ZSxcclxuICAgICAgICAgICAgZXhwaXJlc09uOiBuZXcgRGF0ZShOdW1iZXIoYWNjZXNzVG9rZW4uZXhwaXJlc09uKSAqIDEwMDApLFxyXG4gICAgICAgICAgICB0b2tlblR5cGU6IHJlcXVlc3QuYXV0aGVudGljYXRpb25TY2hlbWUgfHwgQXV0aGVudGljYXRpb25TY2hlbWUuQkVBUkVSLFxyXG4gICAgICAgICAgICBjb3JyZWxhdGlvbklkLFxyXG4gICAgICAgICAgICBleHRFeHBpcmVzT246IG5ldyBEYXRlKE51bWJlcihhY2Nlc3NUb2tlbi5leHRlbmRlZEV4cGlyZXNPbikgKiAxMDAwKSxcclxuICAgICAgICAgICAgc3RhdGU6IHJlcXVlc3Quc3RhdGUsXHJcbiAgICAgICAgfTtcclxuICAgICAgICByZXR1cm4gYXV0aGVudGljYXRpb25SZXN1bHQ7XHJcbiAgICB9XHJcbn1cblxuZXhwb3J0IHsgTmVzdGVkQXBwQXV0aEFkYXB0ZXIgfTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPU5lc3RlZEFwcEF1dGhBZGFwdGVyLm1qcy5tYXBcbiIsIi8qISBAYXp1cmUvbXNhbC1icm93c2VyIHYzLjI4LjEgMjAyNS0wMS0xNCAqL1xuJ3VzZSBzdHJpY3QnO1xuaW1wb3J0IHsgQXV0aEVycm9yIH0gZnJvbSAnQGF6dXJlL21zYWwtY29tbW9uL2Jyb3dzZXInO1xuXG4vKlxyXG4gKiBDb3B5cmlnaHQgKGMpIE1pY3Jvc29mdCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cclxuICogTGljZW5zZWQgdW5kZXIgdGhlIE1JVCBMaWNlbnNlLlxyXG4gKi9cclxuLyoqXHJcbiAqIE5lc3RlZEFwcEF1dGhFcnJvck1lc3NhZ2UgY2xhc3MgY29udGFpbmluZyBzdHJpbmcgY29uc3RhbnRzIHVzZWQgYnkgZXJyb3IgY29kZXMgYW5kIG1lc3NhZ2VzLlxyXG4gKi9cclxuY29uc3QgTmVzdGVkQXBwQXV0aEVycm9yTWVzc2FnZSA9IHtcclxuICAgIHVuc3VwcG9ydGVkTWV0aG9kOiB7XHJcbiAgICAgICAgY29kZTogXCJ1bnN1cHBvcnRlZF9tZXRob2RcIixcclxuICAgICAgICBkZXNjOiBcIlRoaXMgbWV0aG9kIGlzIG5vdCBzdXBwb3J0ZWQgaW4gbmVzdGVkIGFwcCBlbnZpcm9ubWVudC5cIixcclxuICAgIH0sXHJcbn07XHJcbmNsYXNzIE5lc3RlZEFwcEF1dGhFcnJvciBleHRlbmRzIEF1dGhFcnJvciB7XHJcbiAgICBjb25zdHJ1Y3RvcihlcnJvckNvZGUsIGVycm9yTWVzc2FnZSkge1xyXG4gICAgICAgIHN1cGVyKGVycm9yQ29kZSwgZXJyb3JNZXNzYWdlKTtcclxuICAgICAgICBPYmplY3Quc2V0UHJvdG90eXBlT2YodGhpcywgTmVzdGVkQXBwQXV0aEVycm9yLnByb3RvdHlwZSk7XHJcbiAgICAgICAgdGhpcy5uYW1lID0gXCJOZXN0ZWRBcHBBdXRoRXJyb3JcIjtcclxuICAgIH1cclxuICAgIHN0YXRpYyBjcmVhdGVVbnN1cHBvcnRlZEVycm9yKCkge1xyXG4gICAgICAgIHJldHVybiBuZXcgTmVzdGVkQXBwQXV0aEVycm9yKE5lc3RlZEFwcEF1dGhFcnJvck1lc3NhZ2UudW5zdXBwb3J0ZWRNZXRob2QuY29kZSwgTmVzdGVkQXBwQXV0aEVycm9yTWVzc2FnZS51bnN1cHBvcnRlZE1ldGhvZC5kZXNjKTtcclxuICAgIH1cclxufVxuXG5leHBvcnQgeyBOZXN0ZWRBcHBBdXRoRXJyb3IsIE5lc3RlZEFwcEF1dGhFcnJvck1lc3NhZ2UgfTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPU5lc3RlZEFwcEF1dGhFcnJvci5tanMubWFwXG4iLCIvKiEgQGF6dXJlL21zYWwtYnJvd3NlciB2My4yOC4xIDIwMjUtMDEtMTQgKi9cbid1c2Ugc3RyaWN0JztcbmltcG9ydCB7IERFRkFVTFRfQ1JZUFRPX0lNUExFTUVOVEFUSU9OLCBidWlsZFN0YXRpY0F1dGhvcml0eU9wdGlvbnMsIFBlcmZvcm1hbmNlRXZlbnRzLCBUaW1lVXRpbHMsIE9JRENfREVGQVVMVF9TQ09QRVMsIEFjY291bnRFbnRpdHkgfSBmcm9tICdAYXp1cmUvbXNhbC1jb21tb24vYnJvd3Nlcic7XG5pbXBvcnQgeyBJbnRlcmFjdGlvblR5cGUsIENhY2hlTG9va3VwUG9saWN5LCBERUZBVUxUX1JFUVVFU1QgfSBmcm9tICcuLi91dGlscy9Ccm93c2VyQ29uc3RhbnRzLm1qcyc7XG5pbXBvcnQgeyBDcnlwdG9PcHMgfSBmcm9tICcuLi9jcnlwdG8vQ3J5cHRvT3BzLm1qcyc7XG5pbXBvcnQgeyBOZXN0ZWRBcHBBdXRoQWRhcHRlciB9IGZyb20gJy4uL25hYS9tYXBwaW5nL05lc3RlZEFwcEF1dGhBZGFwdGVyLm1qcyc7XG5pbXBvcnQgeyBOZXN0ZWRBcHBBdXRoRXJyb3IgfSBmcm9tICcuLi9lcnJvci9OZXN0ZWRBcHBBdXRoRXJyb3IubWpzJztcbmltcG9ydCB7IEV2ZW50SGFuZGxlciB9IGZyb20gJy4uL2V2ZW50L0V2ZW50SGFuZGxlci5tanMnO1xuaW1wb3J0IHsgRXZlbnRUeXBlIH0gZnJvbSAnLi4vZXZlbnQvRXZlbnRUeXBlLm1qcyc7XG5pbXBvcnQgeyBCcm93c2VyQ2FjaGVNYW5hZ2VyLCBERUZBVUxUX0JST1dTRVJfQ0FDSEVfTUFOQUdFUiB9IGZyb20gJy4uL2NhY2hlL0Jyb3dzZXJDYWNoZU1hbmFnZXIubWpzJztcbmltcG9ydCB7IGdldEFjY291bnQsIHNldEFjdGl2ZUFjY291bnQsIGdldEFsbEFjY291bnRzLCBnZXRBY2NvdW50QnlVc2VybmFtZSwgZ2V0QWNjb3VudEJ5SG9tZUlkLCBnZXRBY2NvdW50QnlMb2NhbElkLCBnZXRBY3RpdmVBY2NvdW50IH0gZnJvbSAnLi4vY2FjaGUvQWNjb3VudE1hbmFnZXIubWpzJztcblxuLypcclxuICogQ29weXJpZ2h0IChjKSBNaWNyb3NvZnQgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuXHJcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgTGljZW5zZS5cclxuICovXHJcbmNsYXNzIE5lc3RlZEFwcEF1dGhDb250cm9sbGVyIHtcclxuICAgIGNvbnN0cnVjdG9yKG9wZXJhdGluZ0NvbnRleHQpIHtcclxuICAgICAgICB0aGlzLm9wZXJhdGluZ0NvbnRleHQgPSBvcGVyYXRpbmdDb250ZXh0O1xyXG4gICAgICAgIGNvbnN0IHByb3h5ID0gdGhpcy5vcGVyYXRpbmdDb250ZXh0LmdldEJyaWRnZVByb3h5KCk7XHJcbiAgICAgICAgaWYgKHByb3h5ICE9PSB1bmRlZmluZWQpIHtcclxuICAgICAgICAgICAgdGhpcy5icmlkZ2VQcm94eSA9IHByb3h5O1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwidW5leHBlY3RlZDogYnJpZGdlUHJveHkgaXMgdW5kZWZpbmVkXCIpO1xyXG4gICAgICAgIH1cclxuICAgICAgICAvLyBTZXQgdGhlIGNvbmZpZ3VyYXRpb24uXHJcbiAgICAgICAgdGhpcy5jb25maWcgPSBvcGVyYXRpbmdDb250ZXh0LmdldENvbmZpZygpO1xyXG4gICAgICAgIC8vIEluaXRpYWxpemUgbG9nZ2VyXHJcbiAgICAgICAgdGhpcy5sb2dnZXIgPSB0aGlzLm9wZXJhdGluZ0NvbnRleHQuZ2V0TG9nZ2VyKCk7XHJcbiAgICAgICAgLy8gSW5pdGlhbGl6ZSBwZXJmb3JtYW5jZSBjbGllbnRcclxuICAgICAgICB0aGlzLnBlcmZvcm1hbmNlQ2xpZW50ID0gdGhpcy5jb25maWcudGVsZW1ldHJ5LmNsaWVudDtcclxuICAgICAgICAvLyBJbml0aWFsaXplIHRoZSBjcnlwdG8gY2xhc3MuXHJcbiAgICAgICAgdGhpcy5icm93c2VyQ3J5cHRvID0gb3BlcmF0aW5nQ29udGV4dC5pc0Jyb3dzZXJFbnZpcm9ubWVudCgpXHJcbiAgICAgICAgICAgID8gbmV3IENyeXB0b09wcyh0aGlzLmxvZ2dlciwgdGhpcy5wZXJmb3JtYW5jZUNsaWVudCwgdHJ1ZSlcclxuICAgICAgICAgICAgOiBERUZBVUxUX0NSWVBUT19JTVBMRU1FTlRBVElPTjtcclxuICAgICAgICAvLyBJbml0aWFsaXplIHRoZSBicm93c2VyIHN0b3JhZ2UgY2xhc3MuXHJcbiAgICAgICAgdGhpcy5icm93c2VyU3RvcmFnZSA9IHRoaXMub3BlcmF0aW5nQ29udGV4dC5pc0Jyb3dzZXJFbnZpcm9ubWVudCgpXHJcbiAgICAgICAgICAgID8gbmV3IEJyb3dzZXJDYWNoZU1hbmFnZXIodGhpcy5jb25maWcuYXV0aC5jbGllbnRJZCwgdGhpcy5jb25maWcuY2FjaGUsIHRoaXMuYnJvd3NlckNyeXB0bywgdGhpcy5sb2dnZXIsIGJ1aWxkU3RhdGljQXV0aG9yaXR5T3B0aW9ucyh0aGlzLmNvbmZpZy5hdXRoKSlcclxuICAgICAgICAgICAgOiBERUZBVUxUX0JST1dTRVJfQ0FDSEVfTUFOQUdFUih0aGlzLmNvbmZpZy5hdXRoLmNsaWVudElkLCB0aGlzLmxvZ2dlcik7XHJcbiAgICAgICAgdGhpcy5ldmVudEhhbmRsZXIgPSBuZXcgRXZlbnRIYW5kbGVyKHRoaXMubG9nZ2VyKTtcclxuICAgICAgICB0aGlzLm5lc3RlZEFwcEF1dGhBZGFwdGVyID0gbmV3IE5lc3RlZEFwcEF1dGhBZGFwdGVyKHRoaXMuY29uZmlnLmF1dGguY2xpZW50SWQsIHRoaXMuY29uZmlnLmF1dGguY2xpZW50Q2FwYWJpbGl0aWVzLCB0aGlzLmJyb3dzZXJDcnlwdG8sIHRoaXMubG9nZ2VyKTtcclxuICAgICAgICAvLyBTZXQgdGhlIGFjdGl2ZSBhY2NvdW50IGlmIGF2YWlsYWJsZVxyXG4gICAgICAgIGNvbnN0IGFjY291bnRDb250ZXh0ID0gdGhpcy5icmlkZ2VQcm94eS5nZXRBY2NvdW50Q29udGV4dCgpO1xyXG4gICAgICAgIGlmIChhY2NvdW50Q29udGV4dCkge1xyXG4gICAgICAgICAgICBjb25zdCBjYWNoZWRBY2NvdW50ID0gZ2V0QWNjb3VudChhY2NvdW50Q29udGV4dCwgdGhpcy5sb2dnZXIsIHRoaXMuYnJvd3NlclN0b3JhZ2UpO1xyXG4gICAgICAgICAgICBzZXRBY3RpdmVBY2NvdW50KGNhY2hlZEFjY291bnQsIHRoaXMuYnJvd3NlclN0b3JhZ2UpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIC8qKlxyXG4gICAgICogRmFjdG9yeSBmdW5jdGlvbiB0byBjcmVhdGUgYSBuZXcgaW5zdGFuY2Ugb2YgTmVzdGVkQXBwQXV0aENvbnRyb2xsZXJcclxuICAgICAqIEBwYXJhbSBvcGVyYXRpbmdDb250ZXh0XHJcbiAgICAgKiBAcmV0dXJucyBQcm9taXNlPElDb250cm9sbGVyPlxyXG4gICAgICovXHJcbiAgICBzdGF0aWMgYXN5bmMgY3JlYXRlQ29udHJvbGxlcihvcGVyYXRpbmdDb250ZXh0KSB7XHJcbiAgICAgICAgY29uc3QgY29udHJvbGxlciA9IG5ldyBOZXN0ZWRBcHBBdXRoQ29udHJvbGxlcihvcGVyYXRpbmdDb250ZXh0KTtcclxuICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKGNvbnRyb2xsZXIpO1xyXG4gICAgfVxyXG4gICAgLyoqXHJcbiAgICAgKiBTcGVjaWZpYyBpbXBsZW1lbnRhdGlvbiBvZiBpbml0aWFsaXplIGZ1bmN0aW9uIGZvciBOZXN0ZWRBcHBBdXRoQ29udHJvbGxlclxyXG4gICAgICogQHJldHVybnNcclxuICAgICAqL1xyXG4gICAgaW5pdGlhbGl6ZSgpIHtcclxuICAgICAgICAvLyBkbyBub3RoaW5nIG5vdCByZXF1aXJlZCBieSB0aGlzIGNvbnRyb2xsZXJcclxuICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCk7XHJcbiAgICB9XHJcbiAgICAvKipcclxuICAgICAqIFZhbGlkYXRlIHRoZSBpbmNvbWluZyByZXF1ZXN0IGFuZCBhZGQgY29ycmVsYXRpb25JZCBpZiBub3QgcHJlc2VudFxyXG4gICAgICogQHBhcmFtIHJlcXVlc3RcclxuICAgICAqIEByZXR1cm5zXHJcbiAgICAgKi9cclxuICAgIGVuc3VyZVZhbGlkUmVxdWVzdChyZXF1ZXN0KSB7XHJcbiAgICAgICAgaWYgKHJlcXVlc3Q/LmNvcnJlbGF0aW9uSWQpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHJlcXVlc3Q7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgIC4uLnJlcXVlc3QsXHJcbiAgICAgICAgICAgIGNvcnJlbGF0aW9uSWQ6IHRoaXMuYnJvd3NlckNyeXB0by5jcmVhdGVOZXdHdWlkKCksXHJcbiAgICAgICAgfTtcclxuICAgIH1cclxuICAgIC8qKlxyXG4gICAgICogSW50ZXJuYWwgaW1wbGVtZW50YXRpb24gb2YgYWNxdWlyZVRva2VuSW50ZXJhY3RpdmUgZmxvd1xyXG4gICAgICogQHBhcmFtIHJlcXVlc3RcclxuICAgICAqIEByZXR1cm5zXHJcbiAgICAgKi9cclxuICAgIGFzeW5jIGFjcXVpcmVUb2tlbkludGVyYWN0aXZlKHJlcXVlc3QpIHtcclxuICAgICAgICBjb25zdCB2YWxpZFJlcXVlc3QgPSB0aGlzLmVuc3VyZVZhbGlkUmVxdWVzdChyZXF1ZXN0KTtcclxuICAgICAgICB0aGlzLmV2ZW50SGFuZGxlci5lbWl0RXZlbnQoRXZlbnRUeXBlLkFDUVVJUkVfVE9LRU5fU1RBUlQsIEludGVyYWN0aW9uVHlwZS5Qb3B1cCwgdmFsaWRSZXF1ZXN0KTtcclxuICAgICAgICBjb25zdCBhdFBvcHVwTWVhc3VyZW1lbnQgPSB0aGlzLnBlcmZvcm1hbmNlQ2xpZW50LnN0YXJ0TWVhc3VyZW1lbnQoUGVyZm9ybWFuY2VFdmVudHMuQWNxdWlyZVRva2VuUG9wdXAsIHZhbGlkUmVxdWVzdC5jb3JyZWxhdGlvbklkKTtcclxuICAgICAgICBhdFBvcHVwTWVhc3VyZW1lbnQ/LmFkZCh7IG5lc3RlZEFwcEF1dGhSZXF1ZXN0OiB0cnVlIH0pO1xyXG4gICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgIGNvbnN0IG5hYVJlcXVlc3QgPSB0aGlzLm5lc3RlZEFwcEF1dGhBZGFwdGVyLnRvTmFhVG9rZW5SZXF1ZXN0KHZhbGlkUmVxdWVzdCk7XHJcbiAgICAgICAgICAgIGNvbnN0IHJlcVRpbWVzdGFtcCA9IFRpbWVVdGlscy5ub3dTZWNvbmRzKCk7XHJcbiAgICAgICAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgdGhpcy5icmlkZ2VQcm94eS5nZXRUb2tlbkludGVyYWN0aXZlKG5hYVJlcXVlc3QpO1xyXG4gICAgICAgICAgICBjb25zdCByZXN1bHQgPSB7XHJcbiAgICAgICAgICAgICAgICAuLi50aGlzLm5lc3RlZEFwcEF1dGhBZGFwdGVyLmZyb21OYWFUb2tlblJlc3BvbnNlKG5hYVJlcXVlc3QsIHJlc3BvbnNlLCByZXFUaW1lc3RhbXApLFxyXG4gICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICAvLyBjYWNoZSB0aGUgdG9rZW5zIGluIHRoZSByZXNwb25zZVxyXG4gICAgICAgICAgICBhd2FpdCB0aGlzLmh5ZHJhdGVDYWNoZShyZXN1bHQsIHJlcXVlc3QpO1xyXG4gICAgICAgICAgICB0aGlzLmJyb3dzZXJTdG9yYWdlLnNldEFjdGl2ZUFjY291bnQocmVzdWx0LmFjY291bnQpO1xyXG4gICAgICAgICAgICB0aGlzLmV2ZW50SGFuZGxlci5lbWl0RXZlbnQoRXZlbnRUeXBlLkFDUVVJUkVfVE9LRU5fU1VDQ0VTUywgSW50ZXJhY3Rpb25UeXBlLlBvcHVwLCByZXN1bHQpO1xyXG4gICAgICAgICAgICBhdFBvcHVwTWVhc3VyZW1lbnQuYWRkKHtcclxuICAgICAgICAgICAgICAgIGFjY2Vzc1Rva2VuU2l6ZTogcmVzdWx0LmFjY2Vzc1Rva2VuLmxlbmd0aCxcclxuICAgICAgICAgICAgICAgIGlkVG9rZW5TaXplOiByZXN1bHQuaWRUb2tlbi5sZW5ndGgsXHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICBhdFBvcHVwTWVhc3VyZW1lbnQuZW5kKHtcclxuICAgICAgICAgICAgICAgIHN1Y2Nlc3M6IHRydWUsXHJcbiAgICAgICAgICAgICAgICByZXF1ZXN0SWQ6IHJlc3VsdC5yZXF1ZXN0SWQsXHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICByZXR1cm4gcmVzdWx0O1xyXG4gICAgICAgIH1cclxuICAgICAgICBjYXRjaCAoZSkge1xyXG4gICAgICAgICAgICBjb25zdCBlcnJvciA9IHRoaXMubmVzdGVkQXBwQXV0aEFkYXB0ZXIuZnJvbUJyaWRnZUVycm9yKGUpO1xyXG4gICAgICAgICAgICB0aGlzLmV2ZW50SGFuZGxlci5lbWl0RXZlbnQoRXZlbnRUeXBlLkFDUVVJUkVfVE9LRU5fRkFJTFVSRSwgSW50ZXJhY3Rpb25UeXBlLlBvcHVwLCBudWxsLCBlKTtcclxuICAgICAgICAgICAgYXRQb3B1cE1lYXN1cmVtZW50LmVuZCh7XHJcbiAgICAgICAgICAgICAgICBzdWNjZXNzOiBmYWxzZSxcclxuICAgICAgICAgICAgfSwgZSk7XHJcbiAgICAgICAgICAgIHRocm93IGVycm9yO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIC8qKlxyXG4gICAgICogSW50ZXJuYWwgaW1wbGVtZW50YXRpb24gb2YgYWNxdWlyZVRva2VuU2lsZW50IGZsb3dcclxuICAgICAqIEBwYXJhbSByZXF1ZXN0XHJcbiAgICAgKiBAcmV0dXJuc1xyXG4gICAgICovXHJcbiAgICBhc3luYyBhY3F1aXJlVG9rZW5TaWxlbnRJbnRlcm5hbChyZXF1ZXN0KSB7XHJcbiAgICAgICAgY29uc3QgdmFsaWRSZXF1ZXN0ID0gdGhpcy5lbnN1cmVWYWxpZFJlcXVlc3QocmVxdWVzdCk7XHJcbiAgICAgICAgdGhpcy5ldmVudEhhbmRsZXIuZW1pdEV2ZW50KEV2ZW50VHlwZS5BQ1FVSVJFX1RPS0VOX1NUQVJULCBJbnRlcmFjdGlvblR5cGUuU2lsZW50LCB2YWxpZFJlcXVlc3QpO1xyXG4gICAgICAgIC8vIExvb2sgZm9yIHRva2VucyBpbiB0aGUgY2FjaGUgZmlyc3RcclxuICAgICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCB0aGlzLmFjcXVpcmVUb2tlbkZyb21DYWNoZSh2YWxpZFJlcXVlc3QpO1xyXG4gICAgICAgIGlmIChyZXN1bHQpIHtcclxuICAgICAgICAgICAgdGhpcy5ldmVudEhhbmRsZXIuZW1pdEV2ZW50KEV2ZW50VHlwZS5BQ1FVSVJFX1RPS0VOX1NVQ0NFU1MsIEludGVyYWN0aW9uVHlwZS5TaWxlbnQsIHJlc3VsdCk7XHJcbiAgICAgICAgICAgIHJldHVybiByZXN1bHQ7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIC8vIHByb2NlZWQgd2l0aCBhY3F1aXJpbmcgdG9rZW5zIHZpYSB0aGUgaG9zdFxyXG4gICAgICAgIGNvbnN0IHNzb1NpbGVudE1lYXN1cmVtZW50ID0gdGhpcy5wZXJmb3JtYW5jZUNsaWVudC5zdGFydE1lYXN1cmVtZW50KFBlcmZvcm1hbmNlRXZlbnRzLlNzb1NpbGVudCwgdmFsaWRSZXF1ZXN0LmNvcnJlbGF0aW9uSWQpO1xyXG4gICAgICAgIHNzb1NpbGVudE1lYXN1cmVtZW50Py5pbmNyZW1lbnQoe1xyXG4gICAgICAgICAgICB2aXNpYmlsaXR5Q2hhbmdlQ291bnQ6IDAsXHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgc3NvU2lsZW50TWVhc3VyZW1lbnQ/LmFkZCh7XHJcbiAgICAgICAgICAgIG5lc3RlZEFwcEF1dGhSZXF1ZXN0OiB0cnVlLFxyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgIGNvbnN0IG5hYVJlcXVlc3QgPSB0aGlzLm5lc3RlZEFwcEF1dGhBZGFwdGVyLnRvTmFhVG9rZW5SZXF1ZXN0KHZhbGlkUmVxdWVzdCk7XHJcbiAgICAgICAgICAgIGNvbnN0IHJlcVRpbWVzdGFtcCA9IFRpbWVVdGlscy5ub3dTZWNvbmRzKCk7XHJcbiAgICAgICAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgdGhpcy5icmlkZ2VQcm94eS5nZXRUb2tlblNpbGVudChuYWFSZXF1ZXN0KTtcclxuICAgICAgICAgICAgY29uc3QgcmVzdWx0ID0gdGhpcy5uZXN0ZWRBcHBBdXRoQWRhcHRlci5mcm9tTmFhVG9rZW5SZXNwb25zZShuYWFSZXF1ZXN0LCByZXNwb25zZSwgcmVxVGltZXN0YW1wKTtcclxuICAgICAgICAgICAgLy8gY2FjaGUgdGhlIHRva2VucyBpbiB0aGUgcmVzcG9uc2VcclxuICAgICAgICAgICAgYXdhaXQgdGhpcy5oeWRyYXRlQ2FjaGUocmVzdWx0LCByZXF1ZXN0KTtcclxuICAgICAgICAgICAgdGhpcy5icm93c2VyU3RvcmFnZS5zZXRBY3RpdmVBY2NvdW50KHJlc3VsdC5hY2NvdW50KTtcclxuICAgICAgICAgICAgdGhpcy5ldmVudEhhbmRsZXIuZW1pdEV2ZW50KEV2ZW50VHlwZS5BQ1FVSVJFX1RPS0VOX1NVQ0NFU1MsIEludGVyYWN0aW9uVHlwZS5TaWxlbnQsIHJlc3VsdCk7XHJcbiAgICAgICAgICAgIHNzb1NpbGVudE1lYXN1cmVtZW50Py5hZGQoe1xyXG4gICAgICAgICAgICAgICAgYWNjZXNzVG9rZW5TaXplOiByZXN1bHQuYWNjZXNzVG9rZW4ubGVuZ3RoLFxyXG4gICAgICAgICAgICAgICAgaWRUb2tlblNpemU6IHJlc3VsdC5pZFRva2VuLmxlbmd0aCxcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIHNzb1NpbGVudE1lYXN1cmVtZW50Py5lbmQoe1xyXG4gICAgICAgICAgICAgICAgc3VjY2VzczogdHJ1ZSxcclxuICAgICAgICAgICAgICAgIHJlcXVlc3RJZDogcmVzdWx0LnJlcXVlc3RJZCxcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIHJldHVybiByZXN1bHQ7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNhdGNoIChlKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGVycm9yID0gdGhpcy5uZXN0ZWRBcHBBdXRoQWRhcHRlci5mcm9tQnJpZGdlRXJyb3IoZSk7XHJcbiAgICAgICAgICAgIHRoaXMuZXZlbnRIYW5kbGVyLmVtaXRFdmVudChFdmVudFR5cGUuQUNRVUlSRV9UT0tFTl9GQUlMVVJFLCBJbnRlcmFjdGlvblR5cGUuU2lsZW50LCBudWxsLCBlKTtcclxuICAgICAgICAgICAgc3NvU2lsZW50TWVhc3VyZW1lbnQ/LmVuZCh7XHJcbiAgICAgICAgICAgICAgICBzdWNjZXNzOiBmYWxzZSxcclxuICAgICAgICAgICAgfSwgZSk7XHJcbiAgICAgICAgICAgIHRocm93IGVycm9yO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIC8qKlxyXG4gICAgICogYWNxdWlyZXMgdG9rZW5zIGZyb20gY2FjaGVcclxuICAgICAqIEBwYXJhbSByZXF1ZXN0XHJcbiAgICAgKiBAcmV0dXJuc1xyXG4gICAgICovXHJcbiAgICBhc3luYyBhY3F1aXJlVG9rZW5Gcm9tQ2FjaGUocmVxdWVzdCkge1xyXG4gICAgICAgIGNvbnN0IGF0c01lYXN1cmVtZW50ID0gdGhpcy5wZXJmb3JtYW5jZUNsaWVudC5zdGFydE1lYXN1cmVtZW50KFBlcmZvcm1hbmNlRXZlbnRzLkFjcXVpcmVUb2tlblNpbGVudCwgcmVxdWVzdC5jb3JyZWxhdGlvbklkKTtcclxuICAgICAgICBhdHNNZWFzdXJlbWVudD8uYWRkKHtcclxuICAgICAgICAgICAgbmVzdGVkQXBwQXV0aFJlcXVlc3Q6IHRydWUsXHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgLy8gaWYgdGhlIHJlcXVlc3QgaGFzIGNsYWltcywgd2UgY2Fubm90IGxvb2sgdXAgaW4gdGhlIGNhY2hlXHJcbiAgICAgICAgaWYgKHJlcXVlc3QuY2xhaW1zKSB7XHJcbiAgICAgICAgICAgIHRoaXMubG9nZ2VyLnZlcmJvc2UoXCJDbGFpbXMgYXJlIHByZXNlbnQgaW4gdGhlIHJlcXVlc3QsIHNraXBwaW5nIGNhY2hlIGxvb2t1cFwiKTtcclxuICAgICAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIC8vIHJlc3BlY3QgY2FjaGUgbG9va3VwIHBvbGljeVxyXG4gICAgICAgIGxldCByZXN1bHQgPSBudWxsO1xyXG4gICAgICAgIHN3aXRjaCAocmVxdWVzdC5jYWNoZUxvb2t1cFBvbGljeSkge1xyXG4gICAgICAgICAgICBjYXNlIENhY2hlTG9va3VwUG9saWN5LkRlZmF1bHQ6XHJcbiAgICAgICAgICAgIGNhc2UgQ2FjaGVMb29rdXBQb2xpY3kuQWNjZXNzVG9rZW46XHJcbiAgICAgICAgICAgIGNhc2UgQ2FjaGVMb29rdXBQb2xpY3kuQWNjZXNzVG9rZW5BbmRSZWZyZXNoVG9rZW46XHJcbiAgICAgICAgICAgICAgICByZXN1bHQgPSBhd2FpdCB0aGlzLmFjcXVpcmVUb2tlbkZyb21DYWNoZUludGVybmFsKHJlcXVlc3QpO1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHJlc3VsdCkge1xyXG4gICAgICAgICAgICB0aGlzLmV2ZW50SGFuZGxlci5lbWl0RXZlbnQoRXZlbnRUeXBlLkFDUVVJUkVfVE9LRU5fU1VDQ0VTUywgSW50ZXJhY3Rpb25UeXBlLlNpbGVudCwgcmVzdWx0KTtcclxuICAgICAgICAgICAgYXRzTWVhc3VyZW1lbnQ/LmFkZCh7XHJcbiAgICAgICAgICAgICAgICBhY2Nlc3NUb2tlblNpemU6IHJlc3VsdD8uYWNjZXNzVG9rZW4ubGVuZ3RoLFxyXG4gICAgICAgICAgICAgICAgaWRUb2tlblNpemU6IHJlc3VsdD8uaWRUb2tlbi5sZW5ndGgsXHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICBhdHNNZWFzdXJlbWVudD8uZW5kKHtcclxuICAgICAgICAgICAgICAgIHN1Y2Nlc3M6IHRydWUsXHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICByZXR1cm4gcmVzdWx0O1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLmxvZ2dlci5lcnJvcihcIkNhY2hlZCB0b2tlbnMgYXJlIG5vdCBmb3VuZCBmb3IgdGhlIGFjY291bnQsIHByb2NlZWRpbmcgd2l0aCBzaWxlbnQgdG9rZW4gcmVxdWVzdC5cIik7XHJcbiAgICAgICAgdGhpcy5ldmVudEhhbmRsZXIuZW1pdEV2ZW50KEV2ZW50VHlwZS5BQ1FVSVJFX1RPS0VOX0ZBSUxVUkUsIEludGVyYWN0aW9uVHlwZS5TaWxlbnQsIG51bGwpO1xyXG4gICAgICAgIGF0c01lYXN1cmVtZW50Py5lbmQoe1xyXG4gICAgICAgICAgICBzdWNjZXNzOiBmYWxzZSxcclxuICAgICAgICB9KTtcclxuICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgIH1cclxuICAgIC8qKlxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSByZXF1ZXN0XHJcbiAgICAgKiBAcmV0dXJuc1xyXG4gICAgICovXHJcbiAgICBhc3luYyBhY3F1aXJlVG9rZW5Gcm9tQ2FjaGVJbnRlcm5hbChyZXF1ZXN0KSB7XHJcbiAgICAgICAgY29uc3QgYWNjb3VudENvbnRleHQgPSB0aGlzLmJyaWRnZVByb3h5LmdldEFjY291bnRDb250ZXh0KCk7XHJcbiAgICAgICAgbGV0IGN1cnJlbnRBY2NvdW50ID0gbnVsbDtcclxuICAgICAgICBpZiAoYWNjb3VudENvbnRleHQpIHtcclxuICAgICAgICAgICAgY29uc3QgaHViQWNjb3VudCA9IGdldEFjY291bnQoYWNjb3VudENvbnRleHQsIHRoaXMubG9nZ2VyLCB0aGlzLmJyb3dzZXJTdG9yYWdlKTtcclxuICAgICAgICAgICAgLy8gYWx3YXlzIHByaW9yaXRpemUgZm9yIGh1YiBhY2NvdW50IGNvbnRleHQsIHRoZSByZXFpcmVtZW50IG9mIGByZXF1ZXN0LmFjY291bnRgIHdpbGwgYmUgcmVtb3ZlZCBzb29uXHJcbiAgICAgICAgICAgIGN1cnJlbnRBY2NvdW50ID0gaHViQWNjb3VudCB8fCByZXF1ZXN0LmFjY291bnQ7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIC8vIGZhbGwgYmFjayB0byBicm9rZXJpbmcgaWYgbm8gY2FjaGVkIGFjY291bnQgaXMgZm91bmRcclxuICAgICAgICBpZiAoIWN1cnJlbnRBY2NvdW50KSB7XHJcbiAgICAgICAgICAgIHRoaXMubG9nZ2VyLnZlcmJvc2UoXCJObyBhY3RpdmUgYWNjb3VudCBmb3VuZCwgZmFsbGluZyBiYWNrIHRvIHRoZSBob3N0XCIpO1xyXG4gICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKG51bGwpO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLmxvZ2dlci52ZXJib3NlKFwiYWN0aXZlIGFjY291bnQgZm91bmQsIGF0dGVtcHRpbmcgdG8gYWNxdWlyZSB0b2tlbiBzaWxlbnRseVwiKTtcclxuICAgICAgICBjb25zdCBhdXRoUmVxdWVzdCA9IHtcclxuICAgICAgICAgICAgLi4ucmVxdWVzdCxcclxuICAgICAgICAgICAgY29ycmVsYXRpb25JZDogcmVxdWVzdC5jb3JyZWxhdGlvbklkIHx8IHRoaXMuYnJvd3NlckNyeXB0by5jcmVhdGVOZXdHdWlkKCksXHJcbiAgICAgICAgICAgIGF1dGhvcml0eTogcmVxdWVzdC5hdXRob3JpdHkgfHwgY3VycmVudEFjY291bnQuZW52aXJvbm1lbnQsXHJcbiAgICAgICAgICAgIHNjb3BlczogcmVxdWVzdC5zY29wZXM/Lmxlbmd0aFxyXG4gICAgICAgICAgICAgICAgPyByZXF1ZXN0LnNjb3Blc1xyXG4gICAgICAgICAgICAgICAgOiBbLi4uT0lEQ19ERUZBVUxUX1NDT1BFU10sXHJcbiAgICAgICAgfTtcclxuICAgICAgICAvLyBmZXRjaCBhY2Nlc3MgdG9rZW4gYW5kIGNoZWNrIGZvciBleHBpcnlcclxuICAgICAgICBjb25zdCB0b2tlbktleXMgPSB0aGlzLmJyb3dzZXJTdG9yYWdlLmdldFRva2VuS2V5cygpO1xyXG4gICAgICAgIGNvbnN0IGNhY2hlZEFjY2Vzc1Rva2VuID0gdGhpcy5icm93c2VyU3RvcmFnZS5nZXRBY2Nlc3NUb2tlbihjdXJyZW50QWNjb3VudCwgYXV0aFJlcXVlc3QsIHRva2VuS2V5cywgY3VycmVudEFjY291bnQudGVuYW50SWQsIHRoaXMucGVyZm9ybWFuY2VDbGllbnQsIGF1dGhSZXF1ZXN0LmNvcnJlbGF0aW9uSWQpO1xyXG4gICAgICAgIC8vIElmIHRoZXJlIGlzIG5vIGFjY2VzcyB0b2tlbiwgbG9nIGl0IGFuZCByZXR1cm4gbnVsbFxyXG4gICAgICAgIGlmICghY2FjaGVkQWNjZXNzVG9rZW4pIHtcclxuICAgICAgICAgICAgdGhpcy5sb2dnZXIudmVyYm9zZShcIk5vIGNhY2hlZCBhY2Nlc3MgdG9rZW4gZm91bmRcIik7XHJcbiAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUobnVsbCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2UgaWYgKFRpbWVVdGlscy53YXNDbG9ja1R1cm5lZEJhY2soY2FjaGVkQWNjZXNzVG9rZW4uY2FjaGVkQXQpIHx8XHJcbiAgICAgICAgICAgIFRpbWVVdGlscy5pc1Rva2VuRXhwaXJlZChjYWNoZWRBY2Nlc3NUb2tlbi5leHBpcmVzT24sIHRoaXMuY29uZmlnLnN5c3RlbS50b2tlblJlbmV3YWxPZmZzZXRTZWNvbmRzKSkge1xyXG4gICAgICAgICAgICB0aGlzLmxvZ2dlci52ZXJib3NlKFwiQ2FjaGVkIGFjY2VzcyB0b2tlbiBoYXMgZXhwaXJlZFwiKTtcclxuICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShudWxsKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgY29uc3QgY2FjaGVkSWRUb2tlbiA9IHRoaXMuYnJvd3NlclN0b3JhZ2UuZ2V0SWRUb2tlbihjdXJyZW50QWNjb3VudCwgdG9rZW5LZXlzLCBjdXJyZW50QWNjb3VudC50ZW5hbnRJZCwgdGhpcy5wZXJmb3JtYW5jZUNsaWVudCwgYXV0aFJlcXVlc3QuY29ycmVsYXRpb25JZCk7XHJcbiAgICAgICAgaWYgKCFjYWNoZWRJZFRva2VuKSB7XHJcbiAgICAgICAgICAgIHRoaXMubG9nZ2VyLnZlcmJvc2UoXCJObyBjYWNoZWQgaWQgdG9rZW4gZm91bmRcIik7XHJcbiAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUobnVsbCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiB0aGlzLm5lc3RlZEFwcEF1dGhBZGFwdGVyLnRvQXV0aGVudGljYXRpb25SZXN1bHRGcm9tQ2FjaGUoY3VycmVudEFjY291bnQsIGNhY2hlZElkVG9rZW4sIGNhY2hlZEFjY2Vzc1Rva2VuLCBhdXRoUmVxdWVzdCwgYXV0aFJlcXVlc3QuY29ycmVsYXRpb25JZCk7XHJcbiAgICB9XHJcbiAgICAvKipcclxuICAgICAqIGFjcXVpcmVUb2tlblBvcHVwIGZsb3cgaW1wbGVtZW50YXRpb25cclxuICAgICAqIEBwYXJhbSByZXF1ZXN0XHJcbiAgICAgKiBAcmV0dXJuc1xyXG4gICAgICovXHJcbiAgICBhc3luYyBhY3F1aXJlVG9rZW5Qb3B1cChyZXF1ZXN0KSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuYWNxdWlyZVRva2VuSW50ZXJhY3RpdmUocmVxdWVzdCk7XHJcbiAgICB9XHJcbiAgICAvKipcclxuICAgICAqIGFjcXVpcmVUb2tlblJlZGlyZWN0IGZsb3cgaXMgbm90IHN1cHBvcnRlZCBpbiBuZXN0ZWQgYXBwIGF1dGhcclxuICAgICAqIEBwYXJhbSByZXF1ZXN0XHJcbiAgICAgKi9cclxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW51c2VkLXZhcnNcclxuICAgIGFjcXVpcmVUb2tlblJlZGlyZWN0KHJlcXVlc3QpIHtcclxuICAgICAgICB0aHJvdyBOZXN0ZWRBcHBBdXRoRXJyb3IuY3JlYXRlVW5zdXBwb3J0ZWRFcnJvcigpO1xyXG4gICAgfVxyXG4gICAgLyoqXHJcbiAgICAgKiBhY3F1aXJlVG9rZW5TaWxlbnQgZmxvdyBpbXBsZW1lbnRhdGlvblxyXG4gICAgICogQHBhcmFtIHNpbGVudFJlcXVlc3RcclxuICAgICAqIEByZXR1cm5zXHJcbiAgICAgKi9cclxuICAgIGFzeW5jIGFjcXVpcmVUb2tlblNpbGVudChzaWxlbnRSZXF1ZXN0KSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuYWNxdWlyZVRva2VuU2lsZW50SW50ZXJuYWwoc2lsZW50UmVxdWVzdCk7XHJcbiAgICB9XHJcbiAgICAvKipcclxuICAgICAqIEh5YnJpZCBmbG93IGlzIG5vdCBjdXJyZW50bHkgc3VwcG9ydGVkIGluIG5lc3RlZCBhcHAgYXV0aFxyXG4gICAgICogQHBhcmFtIHJlcXVlc3RcclxuICAgICAqL1xyXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnVzZWQtdmFyc1xyXG4gICAgYWNxdWlyZVRva2VuQnlDb2RlKHJlcXVlc3QgLy8gZXNsaW50LWRpc2FibGUtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW51c2VkLXZhcnNcclxuICAgICkge1xyXG4gICAgICAgIHRocm93IE5lc3RlZEFwcEF1dGhFcnJvci5jcmVhdGVVbnN1cHBvcnRlZEVycm9yKCk7XHJcbiAgICB9XHJcbiAgICAvKipcclxuICAgICAqIGFjcXVpcmVUb2tlbk5hdGl2ZSBmbG93IGlzIG5vdCBjdXJyZW50bHkgc3VwcG9ydGVkIGluIG5lc3RlZCBhcHAgYXV0aFxyXG4gICAgICogQHBhcmFtIHJlcXVlc3RcclxuICAgICAqIEBwYXJhbSBhcGlJZFxyXG4gICAgICogQHBhcmFtIGFjY291bnRJZFxyXG4gICAgICovXHJcbiAgICBhY3F1aXJlVG9rZW5OYXRpdmUocmVxdWVzdCwgYXBpSWQsIC8vIGVzbGludC1kaXNhYmxlLWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVudXNlZC12YXJzXHJcbiAgICBhY2NvdW50SWQgLy8gZXNsaW50LWRpc2FibGUtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW51c2VkLXZhcnNcclxuICAgICkge1xyXG4gICAgICAgIHRocm93IE5lc3RlZEFwcEF1dGhFcnJvci5jcmVhdGVVbnN1cHBvcnRlZEVycm9yKCk7XHJcbiAgICB9XHJcbiAgICAvKipcclxuICAgICAqIGFjcXVpcmVUb2tlbkJ5UmVmcmVzaFRva2VuIGZsb3cgaXMgbm90IGN1cnJlbnRseSBzdXBwb3J0ZWQgaW4gbmVzdGVkIGFwcCBhdXRoXHJcbiAgICAgKiBAcGFyYW0gY29tbW9uUmVxdWVzdFxyXG4gICAgICogQHBhcmFtIHNpbGVudFJlcXVlc3RcclxuICAgICAqL1xyXG4gICAgYWNxdWlyZVRva2VuQnlSZWZyZXNoVG9rZW4oY29tbW9uUmVxdWVzdCwgLy8gZXNsaW50LWRpc2FibGUtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW51c2VkLXZhcnNcclxuICAgIHNpbGVudFJlcXVlc3QgLy8gZXNsaW50LWRpc2FibGUtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW51c2VkLXZhcnNcclxuICAgICkge1xyXG4gICAgICAgIHRocm93IE5lc3RlZEFwcEF1dGhFcnJvci5jcmVhdGVVbnN1cHBvcnRlZEVycm9yKCk7XHJcbiAgICB9XHJcbiAgICAvKipcclxuICAgICAqIEFkZHMgZXZlbnQgY2FsbGJhY2tzIHRvIGFycmF5XHJcbiAgICAgKiBAcGFyYW0gY2FsbGJhY2tcclxuICAgICAqIEBwYXJhbSBldmVudFR5cGVzXHJcbiAgICAgKi9cclxuICAgIGFkZEV2ZW50Q2FsbGJhY2soY2FsbGJhY2ssIGV2ZW50VHlwZXMpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5ldmVudEhhbmRsZXIuYWRkRXZlbnRDYWxsYmFjayhjYWxsYmFjaywgZXZlbnRUeXBlcyk7XHJcbiAgICB9XHJcbiAgICAvKipcclxuICAgICAqIFJlbW92ZXMgY2FsbGJhY2sgd2l0aCBwcm92aWRlZCBpZCBmcm9tIGNhbGxiYWNrIGFycmF5XHJcbiAgICAgKiBAcGFyYW0gY2FsbGJhY2tJZFxyXG4gICAgICovXHJcbiAgICByZW1vdmVFdmVudENhbGxiYWNrKGNhbGxiYWNrSWQpIHtcclxuICAgICAgICB0aGlzLmV2ZW50SGFuZGxlci5yZW1vdmVFdmVudENhbGxiYWNrKGNhbGxiYWNrSWQpO1xyXG4gICAgfVxyXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnVzZWQtdmFyc1xyXG4gICAgYWRkUGVyZm9ybWFuY2VDYWxsYmFjayhjYWxsYmFjaykge1xyXG4gICAgICAgIHRocm93IE5lc3RlZEFwcEF1dGhFcnJvci5jcmVhdGVVbnN1cHBvcnRlZEVycm9yKCk7XHJcbiAgICB9XHJcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVudXNlZC12YXJzXHJcbiAgICByZW1vdmVQZXJmb3JtYW5jZUNhbGxiYWNrKGNhbGxiYWNrSWQpIHtcclxuICAgICAgICB0aHJvdyBOZXN0ZWRBcHBBdXRoRXJyb3IuY3JlYXRlVW5zdXBwb3J0ZWRFcnJvcigpO1xyXG4gICAgfVxyXG4gICAgZW5hYmxlQWNjb3VudFN0b3JhZ2VFdmVudHMoKSB7XHJcbiAgICAgICAgdGhyb3cgTmVzdGVkQXBwQXV0aEVycm9yLmNyZWF0ZVVuc3VwcG9ydGVkRXJyb3IoKTtcclxuICAgIH1cclxuICAgIGRpc2FibGVBY2NvdW50U3RvcmFnZUV2ZW50cygpIHtcclxuICAgICAgICB0aHJvdyBOZXN0ZWRBcHBBdXRoRXJyb3IuY3JlYXRlVW5zdXBwb3J0ZWRFcnJvcigpO1xyXG4gICAgfVxyXG4gICAgLy8gI3JlZ2lvbiBBY2NvdW50IEFQSXNcclxuICAgIC8qKlxyXG4gICAgICogUmV0dXJucyBhbGwgdGhlIGFjY291bnRzIGluIHRoZSBjYWNoZSB0aGF0IG1hdGNoIHRoZSBvcHRpb25hbCBmaWx0ZXIuIElmIG5vIGZpbHRlciBpcyBwcm92aWRlZCwgYWxsIGFjY291bnRzIGFyZSByZXR1cm5lZC5cclxuICAgICAqIEBwYXJhbSBhY2NvdW50RmlsdGVyIC0gKE9wdGlvbmFsKSBmaWx0ZXIgdG8gbmFycm93IGRvd24gdGhlIGFjY291bnRzIHJldHVybmVkXHJcbiAgICAgKiBAcmV0dXJucyBBcnJheSBvZiBBY2NvdW50SW5mbyBvYmplY3RzIGluIGNhY2hlXHJcbiAgICAgKi9cclxuICAgIGdldEFsbEFjY291bnRzKGFjY291bnRGaWx0ZXIpIHtcclxuICAgICAgICByZXR1cm4gZ2V0QWxsQWNjb3VudHModGhpcy5sb2dnZXIsIHRoaXMuYnJvd3NlclN0b3JhZ2UsIHRoaXMuaXNCcm93c2VyRW52KCksIGFjY291bnRGaWx0ZXIpO1xyXG4gICAgfVxyXG4gICAgLyoqXHJcbiAgICAgKiBSZXR1cm5zIHRoZSBmaXJzdCBhY2NvdW50IGZvdW5kIGluIHRoZSBjYWNoZSB0aGF0IG1hdGNoZXMgdGhlIGFjY291bnQgZmlsdGVyIHBhc3NlZCBpbi5cclxuICAgICAqIEBwYXJhbSBhY2NvdW50RmlsdGVyXHJcbiAgICAgKiBAcmV0dXJucyBUaGUgZmlyc3QgYWNjb3VudCBmb3VuZCBpbiB0aGUgY2FjaGUgbWF0Y2hpbmcgdGhlIHByb3ZpZGVkIGZpbHRlciBvciBudWxsIGlmIG5vIGFjY291bnQgY291bGQgYmUgZm91bmQuXHJcbiAgICAgKi9cclxuICAgIGdldEFjY291bnQoYWNjb3VudEZpbHRlcikge1xyXG4gICAgICAgIHJldHVybiBnZXRBY2NvdW50KGFjY291bnRGaWx0ZXIsIHRoaXMubG9nZ2VyLCB0aGlzLmJyb3dzZXJTdG9yYWdlKTtcclxuICAgIH1cclxuICAgIC8qKlxyXG4gICAgICogUmV0dXJucyB0aGUgc2lnbmVkIGluIGFjY291bnQgbWF0Y2hpbmcgdXNlcm5hbWUuXHJcbiAgICAgKiAodGhlIGFjY291bnQgb2JqZWN0IGlzIGNyZWF0ZWQgYXQgdGhlIHRpbWUgb2Ygc3VjY2Vzc2Z1bCBsb2dpbilcclxuICAgICAqIG9yIG51bGwgd2hlbiBubyBtYXRjaGluZyBhY2NvdW50IGlzIGZvdW5kLlxyXG4gICAgICogVGhpcyBBUEkgaXMgcHJvdmlkZWQgZm9yIGNvbnZlbmllbmNlIGJ1dCBnZXRBY2NvdW50QnlJZCBzaG91bGQgYmUgdXNlZCBmb3IgYmVzdCByZWxpYWJpbGl0eVxyXG4gICAgICogQHBhcmFtIHVzZXJuYW1lXHJcbiAgICAgKiBAcmV0dXJucyBUaGUgYWNjb3VudCBvYmplY3Qgc3RvcmVkIGluIE1TQUxcclxuICAgICAqL1xyXG4gICAgZ2V0QWNjb3VudEJ5VXNlcm5hbWUodXNlcm5hbWUpIHtcclxuICAgICAgICByZXR1cm4gZ2V0QWNjb3VudEJ5VXNlcm5hbWUodXNlcm5hbWUsIHRoaXMubG9nZ2VyLCB0aGlzLmJyb3dzZXJTdG9yYWdlKTtcclxuICAgIH1cclxuICAgIC8qKlxyXG4gICAgICogUmV0dXJucyB0aGUgc2lnbmVkIGluIGFjY291bnQgbWF0Y2hpbmcgaG9tZUFjY291bnRJZC5cclxuICAgICAqICh0aGUgYWNjb3VudCBvYmplY3QgaXMgY3JlYXRlZCBhdCB0aGUgdGltZSBvZiBzdWNjZXNzZnVsIGxvZ2luKVxyXG4gICAgICogb3IgbnVsbCB3aGVuIG5vIG1hdGNoaW5nIGFjY291bnQgaXMgZm91bmRcclxuICAgICAqIEBwYXJhbSBob21lQWNjb3VudElkXHJcbiAgICAgKiBAcmV0dXJucyBUaGUgYWNjb3VudCBvYmplY3Qgc3RvcmVkIGluIE1TQUxcclxuICAgICAqL1xyXG4gICAgZ2V0QWNjb3VudEJ5SG9tZUlkKGhvbWVBY2NvdW50SWQpIHtcclxuICAgICAgICByZXR1cm4gZ2V0QWNjb3VudEJ5SG9tZUlkKGhvbWVBY2NvdW50SWQsIHRoaXMubG9nZ2VyLCB0aGlzLmJyb3dzZXJTdG9yYWdlKTtcclxuICAgIH1cclxuICAgIC8qKlxyXG4gICAgICogUmV0dXJucyB0aGUgc2lnbmVkIGluIGFjY291bnQgbWF0Y2hpbmcgbG9jYWxBY2NvdW50SWQuXHJcbiAgICAgKiAodGhlIGFjY291bnQgb2JqZWN0IGlzIGNyZWF0ZWQgYXQgdGhlIHRpbWUgb2Ygc3VjY2Vzc2Z1bCBsb2dpbilcclxuICAgICAqIG9yIG51bGwgd2hlbiBubyBtYXRjaGluZyBhY2NvdW50IGlzIGZvdW5kXHJcbiAgICAgKiBAcGFyYW0gbG9jYWxBY2NvdW50SWRcclxuICAgICAqIEByZXR1cm5zIFRoZSBhY2NvdW50IG9iamVjdCBzdG9yZWQgaW4gTVNBTFxyXG4gICAgICovXHJcbiAgICBnZXRBY2NvdW50QnlMb2NhbElkKGxvY2FsQWNjb3VudElkKSB7XHJcbiAgICAgICAgcmV0dXJuIGdldEFjY291bnRCeUxvY2FsSWQobG9jYWxBY2NvdW50SWQsIHRoaXMubG9nZ2VyLCB0aGlzLmJyb3dzZXJTdG9yYWdlKTtcclxuICAgIH1cclxuICAgIC8qKlxyXG4gICAgICogU2V0cyB0aGUgYWNjb3VudCB0byB1c2UgYXMgdGhlIGFjdGl2ZSBhY2NvdW50LiBJZiBubyBhY2NvdW50IGlzIHBhc3NlZCB0byB0aGUgYWNxdWlyZVRva2VuIEFQSXMsIHRoZW4gTVNBTCB3aWxsIHVzZSB0aGlzIGFjdGl2ZSBhY2NvdW50LlxyXG4gICAgICogQHBhcmFtIGFjY291bnRcclxuICAgICAqL1xyXG4gICAgc2V0QWN0aXZlQWNjb3VudChhY2NvdW50KSB7XHJcbiAgICAgICAgLypcclxuICAgICAgICAgKiBTdGFuZGFyZENvbnRyb2xsZXIgdXNlcyB0aGlzIHRvIGFsbG93IHRoZSBkZXZlbG9wZXIgdG8gc2V0IHRoZSBhY3RpdmUgYWNjb3VudFxyXG4gICAgICAgICAqIGluIHRoZSBuZXN0ZWQgYXBwIGF1dGggc2NlbmFyaW8gdGhlIGFjdGl2ZSBhY2NvdW50IGlzIGNvbnRyb2xsZWQgYnkgdGhlIGFwcCBob3N0aW5nIHRoZSBuZXN0ZWQgYXBwXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgcmV0dXJuIHNldEFjdGl2ZUFjY291bnQoYWNjb3VudCwgdGhpcy5icm93c2VyU3RvcmFnZSk7XHJcbiAgICB9XHJcbiAgICAvKipcclxuICAgICAqIEdldHMgdGhlIGN1cnJlbnRseSBhY3RpdmUgYWNjb3VudFxyXG4gICAgICovXHJcbiAgICBnZXRBY3RpdmVBY2NvdW50KCkge1xyXG4gICAgICAgIHJldHVybiBnZXRBY3RpdmVBY2NvdW50KHRoaXMuYnJvd3NlclN0b3JhZ2UpO1xyXG4gICAgfVxyXG4gICAgLy8gI2VuZHJlZ2lvblxyXG4gICAgaGFuZGxlUmVkaXJlY3RQcm9taXNlKGhhc2ggLy8gZXNsaW50LWRpc2FibGUtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW51c2VkLXZhcnNcclxuICAgICkge1xyXG4gICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUobnVsbCk7XHJcbiAgICB9XHJcbiAgICBsb2dpblBvcHVwKHJlcXVlc3QgLy8gZXNsaW50LWRpc2FibGUtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW51c2VkLXZhcnNcclxuICAgICkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmFjcXVpcmVUb2tlbkludGVyYWN0aXZlKHJlcXVlc3QgfHwgREVGQVVMVF9SRVFVRVNUKTtcclxuICAgIH1cclxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW51c2VkLXZhcnNcclxuICAgIGxvZ2luUmVkaXJlY3QocmVxdWVzdCkge1xyXG4gICAgICAgIHRocm93IE5lc3RlZEFwcEF1dGhFcnJvci5jcmVhdGVVbnN1cHBvcnRlZEVycm9yKCk7XHJcbiAgICB9XHJcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVudXNlZC12YXJzXHJcbiAgICBsb2dvdXQobG9nb3V0UmVxdWVzdCkge1xyXG4gICAgICAgIHRocm93IE5lc3RlZEFwcEF1dGhFcnJvci5jcmVhdGVVbnN1cHBvcnRlZEVycm9yKCk7XHJcbiAgICB9XHJcbiAgICBsb2dvdXRSZWRpcmVjdChsb2dvdXRSZXF1ZXN0IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVudXNlZC12YXJzXHJcbiAgICApIHtcclxuICAgICAgICB0aHJvdyBOZXN0ZWRBcHBBdXRoRXJyb3IuY3JlYXRlVW5zdXBwb3J0ZWRFcnJvcigpO1xyXG4gICAgfVxyXG4gICAgbG9nb3V0UG9wdXAobG9nb3V0UmVxdWVzdCAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnVzZWQtdmFyc1xyXG4gICAgKSB7XHJcbiAgICAgICAgdGhyb3cgTmVzdGVkQXBwQXV0aEVycm9yLmNyZWF0ZVVuc3VwcG9ydGVkRXJyb3IoKTtcclxuICAgIH1cclxuICAgIHNzb1NpbGVudChcclxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW51c2VkLXZhcnNcclxuICAgIHJlcXVlc3QpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5hY3F1aXJlVG9rZW5TaWxlbnRJbnRlcm5hbChyZXF1ZXN0KTtcclxuICAgIH1cclxuICAgIGdldFRva2VuQ2FjaGUoKSB7XHJcbiAgICAgICAgdGhyb3cgTmVzdGVkQXBwQXV0aEVycm9yLmNyZWF0ZVVuc3VwcG9ydGVkRXJyb3IoKTtcclxuICAgIH1cclxuICAgIC8qKlxyXG4gICAgICogUmV0dXJucyB0aGUgbG9nZ2VyIGluc3RhbmNlXHJcbiAgICAgKi9cclxuICAgIGdldExvZ2dlcigpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5sb2dnZXI7XHJcbiAgICB9XHJcbiAgICAvKipcclxuICAgICAqIFJlcGxhY2VzIHRoZSBkZWZhdWx0IGxvZ2dlciBzZXQgaW4gY29uZmlndXJhdGlvbnMgd2l0aCBuZXcgTG9nZ2VyIHdpdGggbmV3IGNvbmZpZ3VyYXRpb25zXHJcbiAgICAgKiBAcGFyYW0gbG9nZ2VyIExvZ2dlciBpbnN0YW5jZVxyXG4gICAgICovXHJcbiAgICBzZXRMb2dnZXIobG9nZ2VyKSB7XHJcbiAgICAgICAgdGhpcy5sb2dnZXIgPSBsb2dnZXI7XHJcbiAgICB9XHJcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVudXNlZC12YXJzXHJcbiAgICBpbml0aWFsaXplV3JhcHBlckxpYnJhcnkoc2t1LCB2ZXJzaW9uKSB7XHJcbiAgICAgICAgLypcclxuICAgICAgICAgKiBTdGFuZGFyZCBjb250cm9sbGVyIHVzZXMgdGhpcyB0byBzZXQgdGhlIHNrdSBhbmQgdmVyc2lvbiBvZiB0aGUgd3JhcHBlciBsaWJyYXJ5IGluIHRoZSBzdG9yYWdlXHJcbiAgICAgICAgICogd2UgZG8gbm90aGluZyBoZXJlXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnVzZWQtdmFyc1xyXG4gICAgc2V0TmF2aWdhdGlvbkNsaWVudChuYXZpZ2F0aW9uQ2xpZW50KSB7XHJcbiAgICAgICAgdGhpcy5sb2dnZXIud2FybmluZyhcInNldE5hdmlnYXRpb25DbGllbnQgaXMgbm90IHN1cHBvcnRlZCBpbiBuZXN0ZWQgYXBwIGF1dGhcIik7XHJcbiAgICB9XHJcbiAgICBnZXRDb25maWd1cmF0aW9uKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmNvbmZpZztcclxuICAgIH1cclxuICAgIGlzQnJvd3NlckVudigpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5vcGVyYXRpbmdDb250ZXh0LmlzQnJvd3NlckVudmlyb25tZW50KCk7XHJcbiAgICB9XHJcbiAgICBnZXRCcm93c2VyQ3J5cHRvKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmJyb3dzZXJDcnlwdG87XHJcbiAgICB9XHJcbiAgICBnZXRQZXJmb3JtYW5jZUNsaWVudCgpIHtcclxuICAgICAgICB0aHJvdyBOZXN0ZWRBcHBBdXRoRXJyb3IuY3JlYXRlVW5zdXBwb3J0ZWRFcnJvcigpO1xyXG4gICAgfVxyXG4gICAgZ2V0UmVkaXJlY3RSZXNwb25zZSgpIHtcclxuICAgICAgICB0aHJvdyBOZXN0ZWRBcHBBdXRoRXJyb3IuY3JlYXRlVW5zdXBwb3J0ZWRFcnJvcigpO1xyXG4gICAgfVxyXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnVzZWQtdmFyc1xyXG4gICAgYXN5bmMgY2xlYXJDYWNoZShsb2dvdXRSZXF1ZXN0KSB7XHJcbiAgICAgICAgdGhyb3cgTmVzdGVkQXBwQXV0aEVycm9yLmNyZWF0ZVVuc3VwcG9ydGVkRXJyb3IoKTtcclxuICAgIH1cclxuICAgIGFzeW5jIGh5ZHJhdGVDYWNoZShyZXN1bHQsIHJlcXVlc3QpIHtcclxuICAgICAgICB0aGlzLmxvZ2dlci52ZXJib3NlKFwiaHlkcmF0ZUNhY2hlIGNhbGxlZFwiKTtcclxuICAgICAgICBjb25zdCBhY2NvdW50RW50aXR5ID0gQWNjb3VudEVudGl0eS5jcmVhdGVGcm9tQWNjb3VudEluZm8ocmVzdWx0LmFjY291bnQsIHJlc3VsdC5jbG91ZEdyYXBoSG9zdE5hbWUsIHJlc3VsdC5tc0dyYXBoSG9zdCk7XHJcbiAgICAgICAgdGhpcy5icm93c2VyU3RvcmFnZS5zZXRBY2NvdW50KGFjY291bnRFbnRpdHkpO1xyXG4gICAgICAgIHJldHVybiB0aGlzLmJyb3dzZXJTdG9yYWdlLmh5ZHJhdGVDYWNoZShyZXN1bHQsIHJlcXVlc3QpO1xyXG4gICAgfVxyXG59XG5cbmV4cG9ydCB7IE5lc3RlZEFwcEF1dGhDb250cm9sbGVyIH07XG4vLyMgc291cmNlTWFwcGluZ1VSTD1OZXN0ZWRBcHBBdXRoQ29udHJvbGxlci5tanMubWFwXG4iLCIvKiEgQGF6dXJlL21zYWwtYnJvd3NlciB2My4yOC4xIDIwMjUtMDEtMTQgKi9cbid1c2Ugc3RyaWN0JztcbmltcG9ydCB7IE5lc3RlZEFwcE9wZXJhdGluZ0NvbnRleHQgfSBmcm9tICcuLi9vcGVyYXRpbmdjb250ZXh0L05lc3RlZEFwcE9wZXJhdGluZ0NvbnRleHQubWpzJztcbmltcG9ydCB7IFN0YW5kYXJkT3BlcmF0aW5nQ29udGV4dCB9IGZyb20gJy4uL29wZXJhdGluZ2NvbnRleHQvU3RhbmRhcmRPcGVyYXRpbmdDb250ZXh0Lm1qcyc7XG5pbXBvcnQgeyBTdGFuZGFyZENvbnRyb2xsZXIgfSBmcm9tICcuL1N0YW5kYXJkQ29udHJvbGxlci5tanMnO1xuaW1wb3J0IHsgTmVzdGVkQXBwQXV0aENvbnRyb2xsZXIgfSBmcm9tICcuL05lc3RlZEFwcEF1dGhDb250cm9sbGVyLm1qcyc7XG5cbi8qXHJcbiAqIENvcHlyaWdodCAoYykgTWljcm9zb2Z0IENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLlxyXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgTUlUIExpY2Vuc2UuXHJcbiAqL1xyXG5hc3luYyBmdW5jdGlvbiBjcmVhdGVWM0NvbnRyb2xsZXIoY29uZmlnLCByZXF1ZXN0KSB7XHJcbiAgICBjb25zdCBzdGFuZGFyZCA9IG5ldyBTdGFuZGFyZE9wZXJhdGluZ0NvbnRleHQoY29uZmlnKTtcclxuICAgIGF3YWl0IHN0YW5kYXJkLmluaXRpYWxpemUoKTtcclxuICAgIHJldHVybiBTdGFuZGFyZENvbnRyb2xsZXIuY3JlYXRlQ29udHJvbGxlcihzdGFuZGFyZCwgcmVxdWVzdCk7XHJcbn1cclxuYXN5bmMgZnVuY3Rpb24gY3JlYXRlQ29udHJvbGxlcihjb25maWcpIHtcclxuICAgIGNvbnN0IHN0YW5kYXJkID0gbmV3IFN0YW5kYXJkT3BlcmF0aW5nQ29udGV4dChjb25maWcpO1xyXG4gICAgY29uc3QgbmVzdGVkQXBwID0gbmV3IE5lc3RlZEFwcE9wZXJhdGluZ0NvbnRleHQoY29uZmlnKTtcclxuICAgIGNvbnN0IG9wZXJhdGluZ0NvbnRleHRzID0gW3N0YW5kYXJkLmluaXRpYWxpemUoKSwgbmVzdGVkQXBwLmluaXRpYWxpemUoKV07XHJcbiAgICBhd2FpdCBQcm9taXNlLmFsbChvcGVyYXRpbmdDb250ZXh0cyk7XHJcbiAgICBpZiAobmVzdGVkQXBwLmlzQXZhaWxhYmxlKCkgJiYgY29uZmlnLmF1dGguc3VwcG9ydHNOZXN0ZWRBcHBBdXRoKSB7XHJcbiAgICAgICAgcmV0dXJuIE5lc3RlZEFwcEF1dGhDb250cm9sbGVyLmNyZWF0ZUNvbnRyb2xsZXIobmVzdGVkQXBwKTtcclxuICAgIH1cclxuICAgIGVsc2UgaWYgKHN0YW5kYXJkLmlzQXZhaWxhYmxlKCkpIHtcclxuICAgICAgICByZXR1cm4gU3RhbmRhcmRDb250cm9sbGVyLmNyZWF0ZUNvbnRyb2xsZXIoc3RhbmRhcmQpO1xyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcbiAgICAgICAgLy8gU2luY2UgbmVpdGhlciBvZiB0aGUgYWN0dWFsIG9wZXJhdGluZyBjb250ZXh0cyBhcmUgYXZhaWxhYmxlIGtlZXAgdGhlIFVua25vd25PcGVyYXRpbmdDb250ZXh0Q29udHJvbGxlclxyXG4gICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgfVxyXG59XG5cbmV4cG9ydCB7IGNyZWF0ZUNvbnRyb2xsZXIsIGNyZWF0ZVYzQ29udHJvbGxlciB9O1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9Q29udHJvbGxlckZhY3RvcnkubWpzLm1hcFxuIiwiLyohIEBhenVyZS9tc2FsLWJyb3dzZXIgdjMuMjguMSAyMDI1LTAxLTE0ICovXG4ndXNlIHN0cmljdCc7XG5pbXBvcnQgeyBjcmVhdGVWM0NvbnRyb2xsZXIgfSBmcm9tICcuLi9jb250cm9sbGVycy9Db250cm9sbGVyRmFjdG9yeS5tanMnO1xuaW1wb3J0IHsgU3RhbmRhcmRDb250cm9sbGVyIH0gZnJvbSAnLi4vY29udHJvbGxlcnMvU3RhbmRhcmRDb250cm9sbGVyLm1qcyc7XG5pbXBvcnQgeyBTdGFuZGFyZE9wZXJhdGluZ0NvbnRleHQgfSBmcm9tICcuLi9vcGVyYXRpbmdjb250ZXh0L1N0YW5kYXJkT3BlcmF0aW5nQ29udGV4dC5tanMnO1xuaW1wb3J0IHsgTmVzdGVkQXBwQXV0aENvbnRyb2xsZXIgfSBmcm9tICcuLi9jb250cm9sbGVycy9OZXN0ZWRBcHBBdXRoQ29udHJvbGxlci5tanMnO1xuaW1wb3J0IHsgTmVzdGVkQXBwT3BlcmF0aW5nQ29udGV4dCB9IGZyb20gJy4uL29wZXJhdGluZ2NvbnRleHQvTmVzdGVkQXBwT3BlcmF0aW5nQ29udGV4dC5tanMnO1xuXG4vKlxyXG4gKiBDb3B5cmlnaHQgKGMpIE1pY3Jvc29mdCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cclxuICogTGljZW5zZWQgdW5kZXIgdGhlIE1JVCBMaWNlbnNlLlxyXG4gKi9cclxuLyoqXHJcbiAqIFRoZSBQdWJsaWNDbGllbnRBcHBsaWNhdGlvbiBjbGFzcyBpcyB0aGUgb2JqZWN0IGV4cG9zZWQgYnkgdGhlIGxpYnJhcnkgdG8gcGVyZm9ybSBhdXRoZW50aWNhdGlvbiBhbmQgYXV0aG9yaXphdGlvbiBmdW5jdGlvbnMgaW4gU2luZ2xlIFBhZ2UgQXBwbGljYXRpb25zXHJcbiAqIHRvIG9idGFpbiBKV1QgdG9rZW5zIGFzIGRlc2NyaWJlZCBpbiB0aGUgT0F1dGggMi4wIEF1dGhvcml6YXRpb24gQ29kZSBGbG93IHdpdGggUEtDRSBzcGVjaWZpY2F0aW9uLlxyXG4gKi9cclxuY2xhc3MgUHVibGljQ2xpZW50QXBwbGljYXRpb24ge1xyXG4gICAgLyoqXHJcbiAgICAgKiBDcmVhdGVzIFN0YW5kYXJkQ29udHJvbGxlciBhbmQgcGFzc2VzIGl0IHRvIHRoZSBQdWJsaWNDbGllbnRBcHBsaWNhdGlvblxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSBjb25maWd1cmF0aW9uIHtDb25maWd1cmF0aW9ufVxyXG4gICAgICovXHJcbiAgICBzdGF0aWMgYXN5bmMgY3JlYXRlUHVibGljQ2xpZW50QXBwbGljYXRpb24oY29uZmlndXJhdGlvbikge1xyXG4gICAgICAgIGNvbnN0IGNvbnRyb2xsZXIgPSBhd2FpdCBjcmVhdGVWM0NvbnRyb2xsZXIoY29uZmlndXJhdGlvbik7XHJcbiAgICAgICAgY29uc3QgcGNhID0gbmV3IFB1YmxpY0NsaWVudEFwcGxpY2F0aW9uKGNvbmZpZ3VyYXRpb24sIGNvbnRyb2xsZXIpO1xyXG4gICAgICAgIHJldHVybiBwY2E7XHJcbiAgICB9XHJcbiAgICAvKipcclxuICAgICAqIEBjb25zdHJ1Y3RvclxyXG4gICAgICogQ29uc3RydWN0b3IgZm9yIHRoZSBQdWJsaWNDbGllbnRBcHBsaWNhdGlvbiB1c2VkIHRvIGluc3RhbnRpYXRlIHRoZSBQdWJsaWNDbGllbnRBcHBsaWNhdGlvbiBvYmplY3RcclxuICAgICAqXHJcbiAgICAgKiBJbXBvcnRhbnQgYXR0cmlidXRlcyBpbiB0aGUgQ29uZmlndXJhdGlvbiBvYmplY3QgZm9yIGF1dGggYXJlOlxyXG4gICAgICogLSBjbGllbnRJRDogdGhlIGFwcGxpY2F0aW9uIElEIG9mIHlvdXIgYXBwbGljYXRpb24uIFlvdSBjYW4gb2J0YWluIG9uZSBieSByZWdpc3RlcmluZyB5b3VyIGFwcGxpY2F0aW9uIHdpdGggb3VyIEFwcGxpY2F0aW9uIHJlZ2lzdHJhdGlvbiBwb3J0YWwgOiBodHRwczovL3BvcnRhbC5henVyZS5jb20vI2JsYWRlL01pY3Jvc29mdF9BQURfSUFNL0FjdGl2ZURpcmVjdG9yeU1lbnVCbGFkZS9SZWdpc3RlcmVkQXBwc1ByZXZpZXdcclxuICAgICAqIC0gYXV0aG9yaXR5OiB0aGUgYXV0aG9yaXR5IFVSTCBmb3IgeW91ciBhcHBsaWNhdGlvbi5cclxuICAgICAqIC0gcmVkaXJlY3RfdXJpOiB0aGUgdXJpIG9mIHlvdXIgYXBwbGljYXRpb24gcmVnaXN0ZXJlZCBpbiB0aGUgcG9ydGFsLlxyXG4gICAgICpcclxuICAgICAqIEluIEF6dXJlIEFELCBhdXRob3JpdHkgaXMgYSBVUkwgaW5kaWNhdGluZyB0aGUgQXp1cmUgYWN0aXZlIGRpcmVjdG9yeSB0aGF0IE1TQUwgdXNlcyB0byBvYnRhaW4gdG9rZW5zLlxyXG4gICAgICogSXQgaXMgb2YgdGhlIGZvcm0gaHR0cHM6Ly9sb2dpbi5taWNyb3NvZnRvbmxpbmUuY29tL3tFbnRlcl90aGVfVGVuYW50X0luZm9fSGVyZX1cclxuICAgICAqIElmIHlvdXIgYXBwbGljYXRpb24gc3VwcG9ydHMgQWNjb3VudHMgaW4gb25lIG9yZ2FuaXphdGlvbmFsIGRpcmVjdG9yeSwgcmVwbGFjZSBcIkVudGVyX3RoZV9UZW5hbnRfSW5mb19IZXJlXCIgdmFsdWUgd2l0aCB0aGUgVGVuYW50IElkIG9yIFRlbmFudCBuYW1lIChmb3IgZXhhbXBsZSwgY29udG9zby5taWNyb3NvZnQuY29tKS5cclxuICAgICAqIElmIHlvdXIgYXBwbGljYXRpb24gc3VwcG9ydHMgQWNjb3VudHMgaW4gYW55IG9yZ2FuaXphdGlvbmFsIGRpcmVjdG9yeSwgcmVwbGFjZSBcIkVudGVyX3RoZV9UZW5hbnRfSW5mb19IZXJlXCIgdmFsdWUgd2l0aCBvcmdhbml6YXRpb25zLlxyXG4gICAgICogSWYgeW91ciBhcHBsaWNhdGlvbiBzdXBwb3J0cyBBY2NvdW50cyBpbiBhbnkgb3JnYW5pemF0aW9uYWwgZGlyZWN0b3J5IGFuZCBwZXJzb25hbCBNaWNyb3NvZnQgYWNjb3VudHMsIHJlcGxhY2UgXCJFbnRlcl90aGVfVGVuYW50X0luZm9fSGVyZVwiIHZhbHVlIHdpdGggY29tbW9uLlxyXG4gICAgICogVG8gcmVzdHJpY3Qgc3VwcG9ydCB0byBQZXJzb25hbCBNaWNyb3NvZnQgYWNjb3VudHMgb25seSwgcmVwbGFjZSBcIkVudGVyX3RoZV9UZW5hbnRfSW5mb19IZXJlXCIgdmFsdWUgd2l0aCBjb25zdW1lcnMuXHJcbiAgICAgKlxyXG4gICAgICogSW4gQXp1cmUgQjJDLCBhdXRob3JpdHkgaXMgb2YgdGhlIGZvcm0gaHR0cHM6Ly97aW5zdGFuY2V9L3RmcC97dGVuYW50fS97cG9saWN5TmFtZX0vXHJcbiAgICAgKiBGdWxsIEIyQyBmdW5jdGlvbmFsaXR5IHdpbGwgYmUgYXZhaWxhYmxlIGluIHRoaXMgbGlicmFyeSBpbiBmdXR1cmUgdmVyc2lvbnMuXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIGNvbmZpZ3VyYXRpb24gT2JqZWN0IGZvciB0aGUgTVNBTCBQdWJsaWNDbGllbnRBcHBsaWNhdGlvbiBpbnN0YW5jZVxyXG4gICAgICogQHBhcmFtIElDb250cm9sbGVyIE9wdGlvbmFsIHBhcmFtZXRlciB0byBleHBsaWN0bHkgc2V0IHRoZSBjb250cm9sbGVyLiAoV2lsbCBiZSByZW1vdmVkIHdoZW4gd2UgcmVtb3ZlIHB1YmxpYyBjb25zdHJ1Y3RvcilcclxuICAgICAqL1xyXG4gICAgY29uc3RydWN0b3IoY29uZmlndXJhdGlvbiwgY29udHJvbGxlcikge1xyXG4gICAgICAgIHRoaXMuY29udHJvbGxlciA9XHJcbiAgICAgICAgICAgIGNvbnRyb2xsZXIgfHxcclxuICAgICAgICAgICAgICAgIG5ldyBTdGFuZGFyZENvbnRyb2xsZXIobmV3IFN0YW5kYXJkT3BlcmF0aW5nQ29udGV4dChjb25maWd1cmF0aW9uKSk7XHJcbiAgICB9XHJcbiAgICAvKipcclxuICAgICAqIEluaXRpYWxpemVyIGZ1bmN0aW9uIHRvIHBlcmZvcm0gYXN5bmMgc3RhcnR1cCB0YXNrcyBzdWNoIGFzIGNvbm5lY3RpbmcgdG8gV0FNIGV4dGVuc2lvblxyXG4gICAgICogQHBhcmFtIHJlcXVlc3Qgez9Jbml0aWFsaXplQXBwbGljYXRpb25SZXF1ZXN0fVxyXG4gICAgICovXHJcbiAgICBhc3luYyBpbml0aWFsaXplKHJlcXVlc3QpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5jb250cm9sbGVyLmluaXRpYWxpemUocmVxdWVzdCk7XHJcbiAgICB9XHJcbiAgICAvKipcclxuICAgICAqIFVzZSB3aGVuIHlvdSB3YW50IHRvIG9idGFpbiBhbiBhY2Nlc3NfdG9rZW4gZm9yIHlvdXIgQVBJIHZpYSBvcGVuaW5nIGEgcG9wdXAgd2luZG93IGluIHRoZSB1c2VyJ3MgYnJvd3NlclxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSByZXF1ZXN0XHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybnMgQSBwcm9taXNlIHRoYXQgaXMgZnVsZmlsbGVkIHdoZW4gdGhpcyBmdW5jdGlvbiBoYXMgY29tcGxldGVkLCBvciByZWplY3RlZCBpZiBhbiBlcnJvciB3YXMgcmFpc2VkLlxyXG4gICAgICovXHJcbiAgICBhc3luYyBhY3F1aXJlVG9rZW5Qb3B1cChyZXF1ZXN0KSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuY29udHJvbGxlci5hY3F1aXJlVG9rZW5Qb3B1cChyZXF1ZXN0KTtcclxuICAgIH1cclxuICAgIC8qKlxyXG4gICAgICogVXNlIHdoZW4geW91IHdhbnQgdG8gb2J0YWluIGFuIGFjY2Vzc190b2tlbiBmb3IgeW91ciBBUEkgYnkgcmVkaXJlY3RpbmcgdGhlIHVzZXIncyBicm93c2VyIHdpbmRvdyB0byB0aGUgYXV0aG9yaXphdGlvbiBlbmRwb2ludC4gVGhpcyBmdW5jdGlvbiByZWRpcmVjdHNcclxuICAgICAqIHRoZSBwYWdlLCBzbyBhbnkgY29kZSB0aGF0IGZvbGxvd3MgdGhpcyBmdW5jdGlvbiB3aWxsIG5vdCBleGVjdXRlLlxyXG4gICAgICpcclxuICAgICAqIElNUE9SVEFOVDogSXQgaXMgTk9UIHJlY29tbWVuZGVkIHRvIGhhdmUgY29kZSB0aGF0IGlzIGRlcGVuZGVudCBvbiB0aGUgcmVzb2x1dGlvbiBvZiB0aGUgUHJvbWlzZS4gVGhpcyBmdW5jdGlvbiB3aWxsIG5hdmlnYXRlIGF3YXkgZnJvbSB0aGUgY3VycmVudFxyXG4gICAgICogYnJvd3NlciB3aW5kb3cuIEl0IGN1cnJlbnRseSByZXR1cm5zIGEgUHJvbWlzZSBpbiBvcmRlciB0byByZWZsZWN0IHRoZSBhc3luY2hyb25vdXMgbmF0dXJlIG9mIHRoZSBjb2RlIHJ1bm5pbmcgaW4gdGhpcyBmdW5jdGlvbi5cclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0gcmVxdWVzdFxyXG4gICAgICovXHJcbiAgICBhY3F1aXJlVG9rZW5SZWRpcmVjdChyZXF1ZXN0KSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuY29udHJvbGxlci5hY3F1aXJlVG9rZW5SZWRpcmVjdChyZXF1ZXN0KTtcclxuICAgIH1cclxuICAgIC8qKlxyXG4gICAgICogU2lsZW50bHkgYWNxdWlyZSBhbiBhY2Nlc3MgdG9rZW4gZm9yIGEgZ2l2ZW4gc2V0IG9mIHNjb3Blcy4gUmV0dXJucyBjdXJyZW50bHkgcHJvY2Vzc2luZyBwcm9taXNlIGlmIHBhcmFsbGVsIHJlcXVlc3RzIGFyZSBtYWRlLlxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7QGxpbmsgKFNpbGVudFJlcXVlc3Q6dHlwZSl9XHJcbiAgICAgKiBAcmV0dXJucyB7UHJvbWlzZS48QXV0aGVudGljYXRpb25SZXN1bHQ+fSAtIGEgcHJvbWlzZSB0aGF0IGlzIGZ1bGZpbGxlZCB3aGVuIHRoaXMgZnVuY3Rpb24gaGFzIGNvbXBsZXRlZCwgb3IgcmVqZWN0ZWQgaWYgYW4gZXJyb3Igd2FzIHJhaXNlZC4gUmV0dXJucyB0aGUge0BsaW5rIEF1dGhlbnRpY2F0aW9uUmVzdWx0fSBvYmplY3RcclxuICAgICAqL1xyXG4gICAgYWNxdWlyZVRva2VuU2lsZW50KHNpbGVudFJlcXVlc3QpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5jb250cm9sbGVyLmFjcXVpcmVUb2tlblNpbGVudChzaWxlbnRSZXF1ZXN0KTtcclxuICAgIH1cclxuICAgIC8qKlxyXG4gICAgICogVGhpcyBmdW5jdGlvbiByZWRlZW1zIGFuIGF1dGhvcml6YXRpb24gY29kZSAocGFzc2VkIGFzIGNvZGUpIGZyb20gdGhlIGVTVFMgdG9rZW4gZW5kcG9pbnQuXHJcbiAgICAgKiBUaGlzIGF1dGhvcml6YXRpb24gY29kZSBzaG91bGQgYmUgYWNxdWlyZWQgc2VydmVyLXNpZGUgdXNpbmcgYSBjb25maWRlbnRpYWwgY2xpZW50IHRvIGFjcXVpcmUgYSBzcGFfY29kZS5cclxuICAgICAqIFRoaXMgQVBJIGlzIG5vdCBpbmRlbmRlZCBmb3Igbm9ybWFsIGF1dGhvcml6YXRpb24gY29kZSBhY3F1aXNpdGlvbiBhbmQgcmVkZW1wdGlvbi5cclxuICAgICAqXHJcbiAgICAgKiBSZWRlbXB0aW9uIG9mIHRoaXMgYXV0aG9yaXphdGlvbiBjb2RlIHdpbGwgbm90IHJlcXVpcmUgUEtDRSwgYXMgaXQgd2FzIGFjcXVpcmVkIGJ5IGEgY29uZmlkZW50aWFsIGNsaWVudC5cclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0gcmVxdWVzdCB7QGxpbmsgQXV0aG9yaXphdGlvbkNvZGVSZXF1ZXN0fVxyXG4gICAgICogQHJldHVybnMgQSBwcm9taXNlIHRoYXQgaXMgZnVsZmlsbGVkIHdoZW4gdGhpcyBmdW5jdGlvbiBoYXMgY29tcGxldGVkLCBvciByZWplY3RlZCBpZiBhbiBlcnJvciB3YXMgcmFpc2VkLlxyXG4gICAgICovXHJcbiAgICBhY3F1aXJlVG9rZW5CeUNvZGUocmVxdWVzdCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmNvbnRyb2xsZXIuYWNxdWlyZVRva2VuQnlDb2RlKHJlcXVlc3QpO1xyXG4gICAgfVxyXG4gICAgLyoqXHJcbiAgICAgKiBBZGRzIGV2ZW50IGNhbGxiYWNrcyB0byBhcnJheVxyXG4gICAgICogQHBhcmFtIGNhbGxiYWNrXHJcbiAgICAgKiBAcGFyYW0gZXZlbnRUeXBlc1xyXG4gICAgICovXHJcbiAgICBhZGRFdmVudENhbGxiYWNrKGNhbGxiYWNrLCBldmVudFR5cGVzKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuY29udHJvbGxlci5hZGRFdmVudENhbGxiYWNrKGNhbGxiYWNrLCBldmVudFR5cGVzKTtcclxuICAgIH1cclxuICAgIC8qKlxyXG4gICAgICogUmVtb3ZlcyBjYWxsYmFjayB3aXRoIHByb3ZpZGVkIGlkIGZyb20gY2FsbGJhY2sgYXJyYXlcclxuICAgICAqIEBwYXJhbSBjYWxsYmFja0lkXHJcbiAgICAgKi9cclxuICAgIHJlbW92ZUV2ZW50Q2FsbGJhY2soY2FsbGJhY2tJZCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmNvbnRyb2xsZXIucmVtb3ZlRXZlbnRDYWxsYmFjayhjYWxsYmFja0lkKTtcclxuICAgIH1cclxuICAgIC8qKlxyXG4gICAgICogUmVnaXN0ZXJzIGEgY2FsbGJhY2sgdG8gcmVjZWl2ZSBwZXJmb3JtYW5jZSBldmVudHMuXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtQZXJmb3JtYW5jZUNhbGxiYWNrRnVuY3Rpb259IGNhbGxiYWNrXHJcbiAgICAgKiBAcmV0dXJucyB7c3RyaW5nfVxyXG4gICAgICovXHJcbiAgICBhZGRQZXJmb3JtYW5jZUNhbGxiYWNrKGNhbGxiYWNrKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuY29udHJvbGxlci5hZGRQZXJmb3JtYW5jZUNhbGxiYWNrKGNhbGxiYWNrKTtcclxuICAgIH1cclxuICAgIC8qKlxyXG4gICAgICogUmVtb3ZlcyBhIGNhbGxiYWNrIHJlZ2lzdGVyZWQgd2l0aCBhZGRQZXJmb3JtYW5jZUNhbGxiYWNrLlxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBjYWxsYmFja0lkXHJcbiAgICAgKiBAcmV0dXJucyB7Ym9vbGVhbn1cclxuICAgICAqL1xyXG4gICAgcmVtb3ZlUGVyZm9ybWFuY2VDYWxsYmFjayhjYWxsYmFja0lkKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuY29udHJvbGxlci5yZW1vdmVQZXJmb3JtYW5jZUNhbGxiYWNrKGNhbGxiYWNrSWQpO1xyXG4gICAgfVxyXG4gICAgLyoqXHJcbiAgICAgKiBBZGRzIGV2ZW50IGxpc3RlbmVyIHRoYXQgZW1pdHMgYW4gZXZlbnQgd2hlbiBhIHVzZXIgYWNjb3VudCBpcyBhZGRlZCBvciByZW1vdmVkIGZyb20gbG9jYWxzdG9yYWdlIGluIGEgZGlmZmVyZW50IGJyb3dzZXIgdGFiIG9yIHdpbmRvd1xyXG4gICAgICovXHJcbiAgICBlbmFibGVBY2NvdW50U3RvcmFnZUV2ZW50cygpIHtcclxuICAgICAgICB0aGlzLmNvbnRyb2xsZXIuZW5hYmxlQWNjb3VudFN0b3JhZ2VFdmVudHMoKTtcclxuICAgIH1cclxuICAgIC8qKlxyXG4gICAgICogUmVtb3ZlcyBldmVudCBsaXN0ZW5lciB0aGF0IGVtaXRzIGFuIGV2ZW50IHdoZW4gYSB1c2VyIGFjY291bnQgaXMgYWRkZWQgb3IgcmVtb3ZlZCBmcm9tIGxvY2Fsc3RvcmFnZSBpbiBhIGRpZmZlcmVudCBicm93c2VyIHRhYiBvciB3aW5kb3dcclxuICAgICAqL1xyXG4gICAgZGlzYWJsZUFjY291bnRTdG9yYWdlRXZlbnRzKCkge1xyXG4gICAgICAgIHRoaXMuY29udHJvbGxlci5kaXNhYmxlQWNjb3VudFN0b3JhZ2VFdmVudHMoKTtcclxuICAgIH1cclxuICAgIC8qKlxyXG4gICAgICogUmV0dXJucyB0aGUgZmlyc3QgYWNjb3VudCBmb3VuZCBpbiB0aGUgY2FjaGUgdGhhdCBtYXRjaGVzIHRoZSBhY2NvdW50IGZpbHRlciBwYXNzZWQgaW4uXHJcbiAgICAgKiBAcGFyYW0gYWNjb3VudEZpbHRlclxyXG4gICAgICogQHJldHVybnMgVGhlIGZpcnN0IGFjY291bnQgZm91bmQgaW4gdGhlIGNhY2hlIG1hdGNoaW5nIHRoZSBwcm92aWRlZCBmaWx0ZXIgb3IgbnVsbCBpZiBubyBhY2NvdW50IGNvdWxkIGJlIGZvdW5kLlxyXG4gICAgICovXHJcbiAgICBnZXRBY2NvdW50KGFjY291bnRGaWx0ZXIpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5jb250cm9sbGVyLmdldEFjY291bnQoYWNjb3VudEZpbHRlcik7XHJcbiAgICB9XHJcbiAgICAvKipcclxuICAgICAqIFJldHVybnMgdGhlIHNpZ25lZCBpbiBhY2NvdW50IG1hdGNoaW5nIGhvbWVBY2NvdW50SWQuXHJcbiAgICAgKiAodGhlIGFjY291bnQgb2JqZWN0IGlzIGNyZWF0ZWQgYXQgdGhlIHRpbWUgb2Ygc3VjY2Vzc2Z1bCBsb2dpbilcclxuICAgICAqIG9yIG51bGwgd2hlbiBubyBtYXRjaGluZyBhY2NvdW50IGlzIGZvdW5kXHJcbiAgICAgKiBAcGFyYW0gaG9tZUFjY291bnRJZFxyXG4gICAgICogQHJldHVybnMgVGhlIGFjY291bnQgb2JqZWN0IHN0b3JlZCBpbiBNU0FMXHJcbiAgICAgKiBAZGVwcmVjYXRlZCAtIFVzZSBnZXRBY2NvdW50IGluc3RlYWRcclxuICAgICAqL1xyXG4gICAgZ2V0QWNjb3VudEJ5SG9tZUlkKGhvbWVBY2NvdW50SWQpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5jb250cm9sbGVyLmdldEFjY291bnRCeUhvbWVJZChob21lQWNjb3VudElkKTtcclxuICAgIH1cclxuICAgIC8qKlxyXG4gICAgICogUmV0dXJucyB0aGUgc2lnbmVkIGluIGFjY291bnQgbWF0Y2hpbmcgbG9jYWxBY2NvdW50SWQuXHJcbiAgICAgKiAodGhlIGFjY291bnQgb2JqZWN0IGlzIGNyZWF0ZWQgYXQgdGhlIHRpbWUgb2Ygc3VjY2Vzc2Z1bCBsb2dpbilcclxuICAgICAqIG9yIG51bGwgd2hlbiBubyBtYXRjaGluZyBhY2NvdW50IGlzIGZvdW5kXHJcbiAgICAgKiBAcGFyYW0gbG9jYWxBY2NvdW50SWRcclxuICAgICAqIEByZXR1cm5zIFRoZSBhY2NvdW50IG9iamVjdCBzdG9yZWQgaW4gTVNBTFxyXG4gICAgICogQGRlcHJlY2F0ZWQgLSBVc2UgZ2V0QWNjb3VudCBpbnN0ZWFkXHJcbiAgICAgKi9cclxuICAgIGdldEFjY291bnRCeUxvY2FsSWQobG9jYWxJZCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmNvbnRyb2xsZXIuZ2V0QWNjb3VudEJ5TG9jYWxJZChsb2NhbElkKTtcclxuICAgIH1cclxuICAgIC8qKlxyXG4gICAgICogUmV0dXJucyB0aGUgc2lnbmVkIGluIGFjY291bnQgbWF0Y2hpbmcgdXNlcm5hbWUuXHJcbiAgICAgKiAodGhlIGFjY291bnQgb2JqZWN0IGlzIGNyZWF0ZWQgYXQgdGhlIHRpbWUgb2Ygc3VjY2Vzc2Z1bCBsb2dpbilcclxuICAgICAqIG9yIG51bGwgd2hlbiBubyBtYXRjaGluZyBhY2NvdW50IGlzIGZvdW5kLlxyXG4gICAgICogVGhpcyBBUEkgaXMgcHJvdmlkZWQgZm9yIGNvbnZlbmllbmNlIGJ1dCBnZXRBY2NvdW50QnlJZCBzaG91bGQgYmUgdXNlZCBmb3IgYmVzdCByZWxpYWJpbGl0eVxyXG4gICAgICogQHBhcmFtIHVzZXJOYW1lXHJcbiAgICAgKiBAcmV0dXJucyBUaGUgYWNjb3VudCBvYmplY3Qgc3RvcmVkIGluIE1TQUxcclxuICAgICAqIEBkZXByZWNhdGVkIC0gVXNlIGdldEFjY291bnQgaW5zdGVhZFxyXG4gICAgICovXHJcbiAgICBnZXRBY2NvdW50QnlVc2VybmFtZSh1c2VyTmFtZSkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmNvbnRyb2xsZXIuZ2V0QWNjb3VudEJ5VXNlcm5hbWUodXNlck5hbWUpO1xyXG4gICAgfVxyXG4gICAgLyoqXHJcbiAgICAgKiBSZXR1cm5zIGFsbCB0aGUgYWNjb3VudHMgaW4gdGhlIGNhY2hlIHRoYXQgbWF0Y2ggdGhlIG9wdGlvbmFsIGZpbHRlci4gSWYgbm8gZmlsdGVyIGlzIHByb3ZpZGVkLCBhbGwgYWNjb3VudHMgYXJlIHJldHVybmVkLlxyXG4gICAgICogQHBhcmFtIGFjY291bnRGaWx0ZXIgLSAoT3B0aW9uYWwpIGZpbHRlciB0byBuYXJyb3cgZG93biB0aGUgYWNjb3VudHMgcmV0dXJuZWRcclxuICAgICAqIEByZXR1cm5zIEFycmF5IG9mIEFjY291bnRJbmZvIG9iamVjdHMgaW4gY2FjaGVcclxuICAgICAqL1xyXG4gICAgZ2V0QWxsQWNjb3VudHMoYWNjb3VudEZpbHRlcikge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmNvbnRyb2xsZXIuZ2V0QWxsQWNjb3VudHMoYWNjb3VudEZpbHRlcik7XHJcbiAgICB9XHJcbiAgICAvKipcclxuICAgICAqIEV2ZW50IGhhbmRsZXIgZnVuY3Rpb24gd2hpY2ggYWxsb3dzIHVzZXJzIHRvIGZpcmUgZXZlbnRzIGFmdGVyIHRoZSBQdWJsaWNDbGllbnRBcHBsaWNhdGlvbiBvYmplY3RcclxuICAgICAqIGhhcyBsb2FkZWQgZHVyaW5nIHJlZGlyZWN0IGZsb3dzLiBUaGlzIHNob3VsZCBiZSBpbnZva2VkIG9uIGFsbCBwYWdlIGxvYWRzIGludm9sdmVkIGluIHJlZGlyZWN0XHJcbiAgICAgKiBhdXRoIGZsb3dzLlxyXG4gICAgICogQHBhcmFtIGhhc2ggSGFzaCB0byBwcm9jZXNzLiBEZWZhdWx0cyB0byB0aGUgY3VycmVudCB2YWx1ZSBvZiB3aW5kb3cubG9jYXRpb24uaGFzaC4gT25seSBuZWVkcyB0byBiZSBwcm92aWRlZCBleHBsaWNpdGx5IGlmIHRoZSByZXNwb25zZSB0byBiZSBoYW5kbGVkIGlzIG5vdCBjb250YWluZWQgaW4gdGhlIGN1cnJlbnQgdmFsdWUuXHJcbiAgICAgKiBAcmV0dXJucyBUb2tlbiByZXNwb25zZSBvciBudWxsLiBJZiB0aGUgcmV0dXJuIHZhbHVlIGlzIG51bGwsIHRoZW4gbm8gYXV0aCByZWRpcmVjdCB3YXMgZGV0ZWN0ZWQuXHJcbiAgICAgKi9cclxuICAgIGhhbmRsZVJlZGlyZWN0UHJvbWlzZShoYXNoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuY29udHJvbGxlci5oYW5kbGVSZWRpcmVjdFByb21pc2UoaGFzaCk7XHJcbiAgICB9XHJcbiAgICAvKipcclxuICAgICAqIFVzZSB3aGVuIGluaXRpYXRpbmcgdGhlIGxvZ2luIHByb2Nlc3MgdmlhIG9wZW5pbmcgYSBwb3B1cCB3aW5kb3cgaW4gdGhlIHVzZXIncyBicm93c2VyXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHJlcXVlc3RcclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJucyBBIHByb21pc2UgdGhhdCBpcyBmdWxmaWxsZWQgd2hlbiB0aGlzIGZ1bmN0aW9uIGhhcyBjb21wbGV0ZWQsIG9yIHJlamVjdGVkIGlmIGFuIGVycm9yIHdhcyByYWlzZWQuXHJcbiAgICAgKi9cclxuICAgIGxvZ2luUG9wdXAocmVxdWVzdCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmNvbnRyb2xsZXIubG9naW5Qb3B1cChyZXF1ZXN0KTtcclxuICAgIH1cclxuICAgIC8qKlxyXG4gICAgICogVXNlIHdoZW4gaW5pdGlhdGluZyB0aGUgbG9naW4gcHJvY2VzcyBieSByZWRpcmVjdGluZyB0aGUgdXNlcidzIGJyb3dzZXIgdG8gdGhlIGF1dGhvcml6YXRpb24gZW5kcG9pbnQuIFRoaXMgZnVuY3Rpb24gcmVkaXJlY3RzIHRoZSBwYWdlLCBzb1xyXG4gICAgICogYW55IGNvZGUgdGhhdCBmb2xsb3dzIHRoaXMgZnVuY3Rpb24gd2lsbCBub3QgZXhlY3V0ZS5cclxuICAgICAqXHJcbiAgICAgKiBJTVBPUlRBTlQ6IEl0IGlzIE5PVCByZWNvbW1lbmRlZCB0byBoYXZlIGNvZGUgdGhhdCBpcyBkZXBlbmRlbnQgb24gdGhlIHJlc29sdXRpb24gb2YgdGhlIFByb21pc2UuIFRoaXMgZnVuY3Rpb24gd2lsbCBuYXZpZ2F0ZSBhd2F5IGZyb20gdGhlIGN1cnJlbnRcclxuICAgICAqIGJyb3dzZXIgd2luZG93LiBJdCBjdXJyZW50bHkgcmV0dXJucyBhIFByb21pc2UgaW4gb3JkZXIgdG8gcmVmbGVjdCB0aGUgYXN5bmNocm9ub3VzIG5hdHVyZSBvZiB0aGUgY29kZSBydW5uaW5nIGluIHRoaXMgZnVuY3Rpb24uXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHJlcXVlc3RcclxuICAgICAqL1xyXG4gICAgbG9naW5SZWRpcmVjdChyZXF1ZXN0KSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuY29udHJvbGxlci5sb2dpblJlZGlyZWN0KHJlcXVlc3QpO1xyXG4gICAgfVxyXG4gICAgLyoqXHJcbiAgICAgKiBEZXByZWNhdGVkIGxvZ291dCBmdW5jdGlvbi4gVXNlIGxvZ291dFJlZGlyZWN0IG9yIGxvZ291dFBvcHVwIGluc3RlYWRcclxuICAgICAqIEBwYXJhbSBsb2dvdXRSZXF1ZXN0XHJcbiAgICAgKiBAZGVwcmVjYXRlZFxyXG4gICAgICovXHJcbiAgICBsb2dvdXQobG9nb3V0UmVxdWVzdCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmNvbnRyb2xsZXIubG9nb3V0KGxvZ291dFJlcXVlc3QpO1xyXG4gICAgfVxyXG4gICAgLyoqXHJcbiAgICAgKiBVc2UgdG8gbG9nIG91dCB0aGUgY3VycmVudCB1c2VyLCBhbmQgcmVkaXJlY3QgdGhlIHVzZXIgdG8gdGhlIHBvc3RMb2dvdXRSZWRpcmVjdFVyaS5cclxuICAgICAqIERlZmF1bHQgYmVoYXZpb3VyIGlzIHRvIHJlZGlyZWN0IHRoZSB1c2VyIHRvIGB3aW5kb3cubG9jYXRpb24uaHJlZmAuXHJcbiAgICAgKiBAcGFyYW0gbG9nb3V0UmVxdWVzdFxyXG4gICAgICovXHJcbiAgICBsb2dvdXRSZWRpcmVjdChsb2dvdXRSZXF1ZXN0KSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuY29udHJvbGxlci5sb2dvdXRSZWRpcmVjdChsb2dvdXRSZXF1ZXN0KTtcclxuICAgIH1cclxuICAgIC8qKlxyXG4gICAgICogQ2xlYXJzIGxvY2FsIGNhY2hlIGZvciB0aGUgY3VycmVudCB1c2VyIHRoZW4gb3BlbnMgYSBwb3B1cCB3aW5kb3cgcHJvbXB0aW5nIHRoZSB1c2VyIHRvIHNpZ24tb3V0IG9mIHRoZSBzZXJ2ZXJcclxuICAgICAqIEBwYXJhbSBsb2dvdXRSZXF1ZXN0XHJcbiAgICAgKi9cclxuICAgIGxvZ291dFBvcHVwKGxvZ291dFJlcXVlc3QpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5jb250cm9sbGVyLmxvZ291dFBvcHVwKGxvZ291dFJlcXVlc3QpO1xyXG4gICAgfVxyXG4gICAgLyoqXHJcbiAgICAgKiBUaGlzIGZ1bmN0aW9uIHVzZXMgYSBoaWRkZW4gaWZyYW1lIHRvIGZldGNoIGFuIGF1dGhvcml6YXRpb24gY29kZSBmcm9tIHRoZSBlU1RTLiBUaGVyZSBhcmUgY2FzZXMgd2hlcmUgdGhpcyBtYXkgbm90IHdvcms6XHJcbiAgICAgKiAtIEFueSBicm93c2VyIHVzaW5nIGEgZm9ybSBvZiBJbnRlbGxpZ2VudCBUcmFja2luZyBQcmV2ZW50aW9uXHJcbiAgICAgKiAtIElmIHRoZXJlIGlzIG5vdCBhbiBlc3RhYmxpc2hlZCBzZXNzaW9uIHdpdGggdGhlIHNlcnZpY2VcclxuICAgICAqXHJcbiAgICAgKiBJbiB0aGVzZSBjYXNlcywgdGhlIHJlcXVlc3QgbXVzdCBiZSBkb25lIGluc2lkZSBhIHBvcHVwIG9yIGZ1bGwgZnJhbWUgcmVkaXJlY3QuXHJcbiAgICAgKlxyXG4gICAgICogRm9yIHRoZSBjYXNlcyB3aGVyZSBpbnRlcmFjdGlvbiBpcyByZXF1aXJlZCwgeW91IGNhbm5vdCBzZW5kIGEgcmVxdWVzdCB3aXRoIHByb21wdD1ub25lLlxyXG4gICAgICpcclxuICAgICAqIElmIHlvdXIgcmVmcmVzaCB0b2tlbiBoYXMgZXhwaXJlZCwgeW91IGNhbiB1c2UgdGhpcyBmdW5jdGlvbiB0byBmZXRjaCBhIG5ldyBzZXQgb2YgdG9rZW5zIHNpbGVudGx5IGFzIGxvbmcgYXNcclxuICAgICAqIHlvdSBzZXNzaW9uIG9uIHRoZSBzZXJ2ZXIgc3RpbGwgZXhpc3RzLlxyXG4gICAgICogQHBhcmFtIHJlcXVlc3Qge0BsaW5rIFNzb1NpbGVudFJlcXVlc3R9XHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybnMgQSBwcm9taXNlIHRoYXQgaXMgZnVsZmlsbGVkIHdoZW4gdGhpcyBmdW5jdGlvbiBoYXMgY29tcGxldGVkLCBvciByZWplY3RlZCBpZiBhbiBlcnJvciB3YXMgcmFpc2VkLlxyXG4gICAgICovXHJcbiAgICBzc29TaWxlbnQocmVxdWVzdCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmNvbnRyb2xsZXIuc3NvU2lsZW50KHJlcXVlc3QpO1xyXG4gICAgfVxyXG4gICAgLyoqXHJcbiAgICAgKiBHZXRzIHRoZSB0b2tlbiBjYWNoZSBmb3IgdGhlIGFwcGxpY2F0aW9uLlxyXG4gICAgICovXHJcbiAgICBnZXRUb2tlbkNhY2hlKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmNvbnRyb2xsZXIuZ2V0VG9rZW5DYWNoZSgpO1xyXG4gICAgfVxyXG4gICAgLyoqXHJcbiAgICAgKiBSZXR1cm5zIHRoZSBsb2dnZXIgaW5zdGFuY2VcclxuICAgICAqL1xyXG4gICAgZ2V0TG9nZ2VyKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmNvbnRyb2xsZXIuZ2V0TG9nZ2VyKCk7XHJcbiAgICB9XHJcbiAgICAvKipcclxuICAgICAqIFJlcGxhY2VzIHRoZSBkZWZhdWx0IGxvZ2dlciBzZXQgaW4gY29uZmlndXJhdGlvbnMgd2l0aCBuZXcgTG9nZ2VyIHdpdGggbmV3IGNvbmZpZ3VyYXRpb25zXHJcbiAgICAgKiBAcGFyYW0gbG9nZ2VyIExvZ2dlciBpbnN0YW5jZVxyXG4gICAgICovXHJcbiAgICBzZXRMb2dnZXIobG9nZ2VyKSB7XHJcbiAgICAgICAgdGhpcy5jb250cm9sbGVyLnNldExvZ2dlcihsb2dnZXIpO1xyXG4gICAgfVxyXG4gICAgLyoqXHJcbiAgICAgKiBTZXRzIHRoZSBhY2NvdW50IHRvIHVzZSBhcyB0aGUgYWN0aXZlIGFjY291bnQuIElmIG5vIGFjY291bnQgaXMgcGFzc2VkIHRvIHRoZSBhY3F1aXJlVG9rZW4gQVBJcywgdGhlbiBNU0FMIHdpbGwgdXNlIHRoaXMgYWN0aXZlIGFjY291bnQuXHJcbiAgICAgKiBAcGFyYW0gYWNjb3VudFxyXG4gICAgICovXHJcbiAgICBzZXRBY3RpdmVBY2NvdW50KGFjY291bnQpIHtcclxuICAgICAgICB0aGlzLmNvbnRyb2xsZXIuc2V0QWN0aXZlQWNjb3VudChhY2NvdW50KTtcclxuICAgIH1cclxuICAgIC8qKlxyXG4gICAgICogR2V0cyB0aGUgY3VycmVudGx5IGFjdGl2ZSBhY2NvdW50XHJcbiAgICAgKi9cclxuICAgIGdldEFjdGl2ZUFjY291bnQoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuY29udHJvbGxlci5nZXRBY3RpdmVBY2NvdW50KCk7XHJcbiAgICB9XHJcbiAgICAvKipcclxuICAgICAqIENhbGxlZCBieSB3cmFwcGVyIGxpYnJhcmllcyAoQW5ndWxhciAmIFJlYWN0KSB0byBzZXQgU0tVIGFuZCBWZXJzaW9uIHBhc3NlZCBkb3duIHRvIHRlbGVtZXRyeSwgbG9nZ2VyLCBldGMuXHJcbiAgICAgKiBAcGFyYW0gc2t1XHJcbiAgICAgKiBAcGFyYW0gdmVyc2lvblxyXG4gICAgICovXHJcbiAgICBpbml0aWFsaXplV3JhcHBlckxpYnJhcnkoc2t1LCB2ZXJzaW9uKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuY29udHJvbGxlci5pbml0aWFsaXplV3JhcHBlckxpYnJhcnkoc2t1LCB2ZXJzaW9uKTtcclxuICAgIH1cclxuICAgIC8qKlxyXG4gICAgICogU2V0cyBuYXZpZ2F0aW9uIGNsaWVudFxyXG4gICAgICogQHBhcmFtIG5hdmlnYXRpb25DbGllbnRcclxuICAgICAqL1xyXG4gICAgc2V0TmF2aWdhdGlvbkNsaWVudChuYXZpZ2F0aW9uQ2xpZW50KSB7XHJcbiAgICAgICAgdGhpcy5jb250cm9sbGVyLnNldE5hdmlnYXRpb25DbGllbnQobmF2aWdhdGlvbkNsaWVudCk7XHJcbiAgICB9XHJcbiAgICAvKipcclxuICAgICAqIFJldHVybnMgdGhlIGNvbmZpZ3VyYXRpb24gb2JqZWN0XHJcbiAgICAgKiBAaW50ZXJuYWxcclxuICAgICAqL1xyXG4gICAgZ2V0Q29uZmlndXJhdGlvbigpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5jb250cm9sbGVyLmdldENvbmZpZ3VyYXRpb24oKTtcclxuICAgIH1cclxuICAgIC8qKlxyXG4gICAgICogSHlkcmF0ZXMgY2FjaGUgd2l0aCB0aGUgdG9rZW5zIGFuZCBhY2NvdW50IGluIHRoZSBBdXRoZW50aWNhdGlvblJlc3VsdCBvYmplY3RcclxuICAgICAqIEBwYXJhbSByZXN1bHRcclxuICAgICAqIEBwYXJhbSByZXF1ZXN0IC0gVGhlIHJlcXVlc3Qgb2JqZWN0IHRoYXQgd2FzIHVzZWQgdG8gb2J0YWluIHRoZSBBdXRoZW50aWNhdGlvblJlc3VsdFxyXG4gICAgICogQHJldHVybnNcclxuICAgICAqL1xyXG4gICAgYXN5bmMgaHlkcmF0ZUNhY2hlKHJlc3VsdCwgcmVxdWVzdCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmNvbnRyb2xsZXIuaHlkcmF0ZUNhY2hlKHJlc3VsdCwgcmVxdWVzdCk7XHJcbiAgICB9XHJcbiAgICAvKipcclxuICAgICAqIENsZWFycyB0b2tlbnMgYW5kIGFjY291bnQgZnJvbSB0aGUgYnJvd3NlciBjYWNoZS5cclxuICAgICAqIEBwYXJhbSBsb2dvdXRSZXF1ZXN0XHJcbiAgICAgKi9cclxuICAgIGNsZWFyQ2FjaGUobG9nb3V0UmVxdWVzdCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmNvbnRyb2xsZXIuY2xlYXJDYWNoZShsb2dvdXRSZXF1ZXN0KTtcclxuICAgIH1cclxufVxyXG4vKipcclxuICogY3JlYXRlcyBOZXN0ZWRBcHBBdXRoQ29udHJvbGxlciBhbmQgcGFzc2VzIGl0IHRvIHRoZSBQdWJsaWNDbGllbnRBcHBsaWNhdGlvbixcclxuICogZmFsbHMgYmFjayB0byBTdGFuZGFyZENvbnRyb2xsZXIgaWYgTmVzdGVkQXBwQXV0aENvbnRyb2xsZXIgaXMgbm90IGF2YWlsYWJsZVxyXG4gKlxyXG4gKiBAcGFyYW0gY29uZmlndXJhdGlvblxyXG4gKiBAcmV0dXJucyBJUHVibGljQ2xpZW50QXBwbGljYXRpb25cclxuICpcclxuICovXHJcbmFzeW5jIGZ1bmN0aW9uIGNyZWF0ZU5lc3RhYmxlUHVibGljQ2xpZW50QXBwbGljYXRpb24oY29uZmlndXJhdGlvbikge1xyXG4gICAgY29uc3QgbmVzdGVkQXBwQXV0aCA9IG5ldyBOZXN0ZWRBcHBPcGVyYXRpbmdDb250ZXh0KGNvbmZpZ3VyYXRpb24pO1xyXG4gICAgYXdhaXQgbmVzdGVkQXBwQXV0aC5pbml0aWFsaXplKCk7XHJcbiAgICBpZiAobmVzdGVkQXBwQXV0aC5pc0F2YWlsYWJsZSgpKSB7XHJcbiAgICAgICAgY29uc3QgY29udHJvbGxlciA9IG5ldyBOZXN0ZWRBcHBBdXRoQ29udHJvbGxlcihuZXN0ZWRBcHBBdXRoKTtcclxuICAgICAgICByZXR1cm4gbmV3IFB1YmxpY0NsaWVudEFwcGxpY2F0aW9uKGNvbmZpZ3VyYXRpb24sIGNvbnRyb2xsZXIpO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIGNyZWF0ZVN0YW5kYXJkUHVibGljQ2xpZW50QXBwbGljYXRpb24oY29uZmlndXJhdGlvbik7XHJcbn1cclxuLyoqXHJcbiAqIGNyZWF0ZXMgUHVibGljQ2xpZW50QXBwbGljYXRpb24gdXNpbmcgU3RhbmRhcmRDb250cm9sbGVyXHJcbiAqXHJcbiAqIEBwYXJhbSBjb25maWd1cmF0aW9uXHJcbiAqIEByZXR1cm5zIElQdWJsaWNDbGllbnRBcHBsaWNhdGlvblxyXG4gKlxyXG4gKi9cclxuYXN5bmMgZnVuY3Rpb24gY3JlYXRlU3RhbmRhcmRQdWJsaWNDbGllbnRBcHBsaWNhdGlvbihjb25maWd1cmF0aW9uKSB7XHJcbiAgICBjb25zdCBwY2EgPSBuZXcgUHVibGljQ2xpZW50QXBwbGljYXRpb24oY29uZmlndXJhdGlvbik7XHJcbiAgICBhd2FpdCBwY2EuaW5pdGlhbGl6ZSgpO1xyXG4gICAgcmV0dXJuIHBjYTtcclxufVxuXG5leHBvcnQgeyBQdWJsaWNDbGllbnRBcHBsaWNhdGlvbiwgY3JlYXRlTmVzdGFibGVQdWJsaWNDbGllbnRBcHBsaWNhdGlvbiwgY3JlYXRlU3RhbmRhcmRQdWJsaWNDbGllbnRBcHBsaWNhdGlvbiB9O1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9UHVibGljQ2xpZW50QXBwbGljYXRpb24ubWpzLm1hcFxuIiwiLyohIEBhenVyZS9tc2FsLWJyb3dzZXIgdjMuMjguMSAyMDI1LTAxLTE0ICovXG4ndXNlIHN0cmljdCc7XG5pbXBvcnQgeyBERUZBVUxUX0NSWVBUT19JTVBMRU1FTlRBVElPTiB9IGZyb20gJ0BhenVyZS9tc2FsLWNvbW1vbi9icm93c2VyJztcbmltcG9ydCB7IEJyb3dzZXJDYWNoZU1hbmFnZXIsIERFRkFVTFRfQlJPV1NFUl9DQUNIRV9NQU5BR0VSIH0gZnJvbSAnLi4vY2FjaGUvQnJvd3NlckNhY2hlTWFuYWdlci5tanMnO1xuaW1wb3J0IHsgQ3J5cHRvT3BzIH0gZnJvbSAnLi4vY3J5cHRvL0NyeXB0b09wcy5tanMnO1xuaW1wb3J0IHsgYmxvY2tBUElDYWxsc0JlZm9yZUluaXRpYWxpemUsIGJsb2NrTm9uQnJvd3NlckVudmlyb25tZW50IH0gZnJvbSAnLi4vdXRpbHMvQnJvd3NlclV0aWxzLm1qcyc7XG5cbi8qXHJcbiAqIENvcHlyaWdodCAoYykgTWljcm9zb2Z0IENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLlxyXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgTUlUIExpY2Vuc2UuXHJcbiAqL1xyXG4vKipcclxuICogVW5rbm93bk9wZXJhdGluZ0NvbnRleHRDb250cm9sbGVyIGNsYXNzXHJcbiAqXHJcbiAqIC0gVW50aWwgaW5pdGlhbGl6ZSBtZXRob2QgaXMgY2FsbGVkLCB0aGlzIGNvbnRyb2xsZXIgaXMgdGhlIGRlZmF1bHRcclxuICogLSBBRnRlciBpbml0aWFsaXplIG1ldGhvZCBpcyBjYWxsZWQsIHRoaXMgY29udHJvbGxlciB3aWxsIGJlIHN3YXBwZWQgb3V0IGZvciB0aGUgYXBwcm9wcmlhdGUgY29udHJvbGxlclxyXG4gKiBpZiB0aGUgb3BlcmF0aW5nIGNvbnRleHQgY2FuIGJlIGRldGVybWluZWQ7IG90aGVyd2lzZSB0aGlzIGNvbnRyb2xsZXIgd2lsbCBjb250aW51ZWQgYmUgdXNlZFxyXG4gKlxyXG4gKiAtIFdoeSBkbyB3ZSBoYXZlIHRoaXM/ICBXZSBkb24ndCB3YW50IHRvIGR5bmFtaWNhbGx5IGltcG9ydCAoZG93bmxvYWQpIGFsbCBvZiB0aGUgY29kZSBpbiBTdGFuZGFyZENvbnRyb2xsZXIgaWYgd2UgZG9uJ3QgbmVlZCB0by5cclxuICpcclxuICogLSBPbmx5IGluY2x1ZGVzIGltcGxlbWVudGF0aW9uIGZvciBnZXRBY2NvdW50cyBhbmQgaGFuZGxlUmVkaXJlY3RQcm9taXNlXHJcbiAqICAgLSBBbGwgb3RoZXIgbWV0aG9kcyBhcmUgd2lsbCB0aHJvdyBpbml0aWFsaXphdGlvbiBlcnJvciAoYmVjYXVzZSBlaXRoZXIgaW5pdGlhbGl6ZSBtZXRob2Qgb3IgdGhlIGZhY3RvcnkgbWV0aG9kIHdlcmUgbm90IHVzZWQpXHJcbiAqICAgLSBUaGlzIGNvbnRyb2xsZXIgaXMgbmVjZXNzYXJ5IGZvciBSZWFjdCBOYXRpdmUgd3JhcHBlciwgc2VydmVyIHNpZGUgcmVuZGVyaW5nIGFuZCBhbnkgb3RoZXIgc2NlbmFyaW8gd2hlcmUgd2UgZG9uJ3QgaGF2ZSBhIERPTVxyXG4gKlxyXG4gKi9cclxuY2xhc3MgVW5rbm93bk9wZXJhdGluZ0NvbnRleHRDb250cm9sbGVyIHtcclxuICAgIGNvbnN0cnVjdG9yKG9wZXJhdGluZ0NvbnRleHQpIHtcclxuICAgICAgICAvLyBGbGFnIHJlcHJlc2VudGluZyB3aGV0aGVyIG9yIG5vdCB0aGUgaW5pdGlhbGl6ZSBBUEkgaGFzIGJlZW4gY2FsbGVkIGFuZCBjb21wbGV0ZWRcclxuICAgICAgICB0aGlzLmluaXRpYWxpemVkID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy5vcGVyYXRpbmdDb250ZXh0ID0gb3BlcmF0aW5nQ29udGV4dDtcclxuICAgICAgICB0aGlzLmlzQnJvd3NlckVudmlyb25tZW50ID1cclxuICAgICAgICAgICAgdGhpcy5vcGVyYXRpbmdDb250ZXh0LmlzQnJvd3NlckVudmlyb25tZW50KCk7XHJcbiAgICAgICAgdGhpcy5jb25maWcgPSBvcGVyYXRpbmdDb250ZXh0LmdldENvbmZpZygpO1xyXG4gICAgICAgIHRoaXMubG9nZ2VyID0gb3BlcmF0aW5nQ29udGV4dC5nZXRMb2dnZXIoKTtcclxuICAgICAgICAvLyBJbml0aWFsaXplIHBlcmZvcm1hbmNlIGNsaWVudFxyXG4gICAgICAgIHRoaXMucGVyZm9ybWFuY2VDbGllbnQgPSB0aGlzLmNvbmZpZy50ZWxlbWV0cnkuY2xpZW50O1xyXG4gICAgICAgIC8vIEluaXRpYWxpemUgdGhlIGNyeXB0byBjbGFzcy5cclxuICAgICAgICB0aGlzLmJyb3dzZXJDcnlwdG8gPSB0aGlzLmlzQnJvd3NlckVudmlyb25tZW50XHJcbiAgICAgICAgICAgID8gbmV3IENyeXB0b09wcyh0aGlzLmxvZ2dlciwgdGhpcy5wZXJmb3JtYW5jZUNsaWVudClcclxuICAgICAgICAgICAgOiBERUZBVUxUX0NSWVBUT19JTVBMRU1FTlRBVElPTjtcclxuICAgICAgICAvLyBJbml0aWFsaXplIHRoZSBicm93c2VyIHN0b3JhZ2UgY2xhc3MuXHJcbiAgICAgICAgdGhpcy5icm93c2VyU3RvcmFnZSA9IHRoaXMuaXNCcm93c2VyRW52aXJvbm1lbnRcclxuICAgICAgICAgICAgPyBuZXcgQnJvd3NlckNhY2hlTWFuYWdlcih0aGlzLmNvbmZpZy5hdXRoLmNsaWVudElkLCB0aGlzLmNvbmZpZy5jYWNoZSwgdGhpcy5icm93c2VyQ3J5cHRvLCB0aGlzLmxvZ2dlciwgdW5kZWZpbmVkLCB0aGlzLnBlcmZvcm1hbmNlQ2xpZW50KVxyXG4gICAgICAgICAgICA6IERFRkFVTFRfQlJPV1NFUl9DQUNIRV9NQU5BR0VSKHRoaXMuY29uZmlnLmF1dGguY2xpZW50SWQsIHRoaXMubG9nZ2VyKTtcclxuICAgIH1cclxuICAgIGdldEJyb3dzZXJTdG9yYWdlKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmJyb3dzZXJTdG9yYWdlO1xyXG4gICAgfVxyXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnVzZWQtdmFyc1xyXG4gICAgZ2V0QWNjb3VudChhY2NvdW50RmlsdGVyKSB7XHJcbiAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICB9XHJcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVudXNlZC12YXJzXHJcbiAgICBnZXRBY2NvdW50QnlIb21lSWQoaG9tZUFjY291bnRJZCkge1xyXG4gICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgfVxyXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnVzZWQtdmFyc1xyXG4gICAgZ2V0QWNjb3VudEJ5TG9jYWxJZChsb2NhbEFjY291bnRJZCkge1xyXG4gICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgfVxyXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnVzZWQtdmFyc1xyXG4gICAgZ2V0QWNjb3VudEJ5VXNlcm5hbWUodXNlcm5hbWUpIHtcclxuICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgIH1cclxuICAgIGdldEFsbEFjY291bnRzKCkge1xyXG4gICAgICAgIHJldHVybiBbXTtcclxuICAgIH1cclxuICAgIGluaXRpYWxpemUoKSB7XHJcbiAgICAgICAgdGhpcy5pbml0aWFsaXplZCA9IHRydWU7XHJcbiAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSgpO1xyXG4gICAgfVxyXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnVzZWQtdmFyc1xyXG4gICAgYWNxdWlyZVRva2VuUG9wdXAocmVxdWVzdCkge1xyXG4gICAgICAgIGJsb2NrQVBJQ2FsbHNCZWZvcmVJbml0aWFsaXplKHRoaXMuaW5pdGlhbGl6ZWQpO1xyXG4gICAgICAgIGJsb2NrTm9uQnJvd3NlckVudmlyb25tZW50KCk7XHJcbiAgICAgICAgcmV0dXJuIHt9O1xyXG4gICAgfVxyXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnVzZWQtdmFyc1xyXG4gICAgYWNxdWlyZVRva2VuUmVkaXJlY3QocmVxdWVzdCkge1xyXG4gICAgICAgIGJsb2NrQVBJQ2FsbHNCZWZvcmVJbml0aWFsaXplKHRoaXMuaW5pdGlhbGl6ZWQpO1xyXG4gICAgICAgIGJsb2NrTm9uQnJvd3NlckVudmlyb25tZW50KCk7XHJcbiAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSgpO1xyXG4gICAgfVxyXG4gICAgYWNxdWlyZVRva2VuU2lsZW50KFxyXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnVzZWQtdmFyc1xyXG4gICAgc2lsZW50UmVxdWVzdCkge1xyXG4gICAgICAgIGJsb2NrQVBJQ2FsbHNCZWZvcmVJbml0aWFsaXplKHRoaXMuaW5pdGlhbGl6ZWQpO1xyXG4gICAgICAgIGJsb2NrTm9uQnJvd3NlckVudmlyb25tZW50KCk7XHJcbiAgICAgICAgcmV0dXJuIHt9O1xyXG4gICAgfVxyXG4gICAgYWNxdWlyZVRva2VuQnlDb2RlKFxyXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnVzZWQtdmFyc1xyXG4gICAgcmVxdWVzdCkge1xyXG4gICAgICAgIGJsb2NrQVBJQ2FsbHNCZWZvcmVJbml0aWFsaXplKHRoaXMuaW5pdGlhbGl6ZWQpO1xyXG4gICAgICAgIGJsb2NrTm9uQnJvd3NlckVudmlyb25tZW50KCk7XHJcbiAgICAgICAgcmV0dXJuIHt9O1xyXG4gICAgfVxyXG4gICAgYWNxdWlyZVRva2VuTmF0aXZlKFxyXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnVzZWQtdmFyc1xyXG4gICAgcmVxdWVzdCwgXHJcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVudXNlZC12YXJzXHJcbiAgICBhcGlJZCwgXHJcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVudXNlZC12YXJzXHJcbiAgICBhY2NvdW50SWQpIHtcclxuICAgICAgICBibG9ja0FQSUNhbGxzQmVmb3JlSW5pdGlhbGl6ZSh0aGlzLmluaXRpYWxpemVkKTtcclxuICAgICAgICBibG9ja05vbkJyb3dzZXJFbnZpcm9ubWVudCgpO1xyXG4gICAgICAgIHJldHVybiB7fTtcclxuICAgIH1cclxuICAgIGFjcXVpcmVUb2tlbkJ5UmVmcmVzaFRva2VuKFxyXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnVzZWQtdmFyc1xyXG4gICAgY29tbW9uUmVxdWVzdCwgXHJcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVudXNlZC12YXJzXHJcbiAgICBzaWxlbnRSZXF1ZXN0KSB7XHJcbiAgICAgICAgYmxvY2tBUElDYWxsc0JlZm9yZUluaXRpYWxpemUodGhpcy5pbml0aWFsaXplZCk7XHJcbiAgICAgICAgYmxvY2tOb25Ccm93c2VyRW52aXJvbm1lbnQoKTtcclxuICAgICAgICByZXR1cm4ge307XHJcbiAgICB9XHJcbiAgICBhZGRFdmVudENhbGxiYWNrKFxyXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnVzZWQtdmFyc1xyXG4gICAgY2FsbGJhY2ssIFxyXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnVzZWQtdmFyc1xyXG4gICAgZXZlbnRUeXBlcykge1xyXG4gICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgfVxyXG4gICAgcmVtb3ZlRXZlbnRDYWxsYmFjayhcclxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW51c2VkLXZhcnNcclxuICAgIGNhbGxiYWNrSWQpIHsgfVxyXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnVzZWQtdmFyc1xyXG4gICAgYWRkUGVyZm9ybWFuY2VDYWxsYmFjayhjYWxsYmFjaykge1xyXG4gICAgICAgIGJsb2NrQVBJQ2FsbHNCZWZvcmVJbml0aWFsaXplKHRoaXMuaW5pdGlhbGl6ZWQpO1xyXG4gICAgICAgIGJsb2NrTm9uQnJvd3NlckVudmlyb25tZW50KCk7XHJcbiAgICAgICAgcmV0dXJuIFwiXCI7XHJcbiAgICB9XHJcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVudXNlZC12YXJzXHJcbiAgICByZW1vdmVQZXJmb3JtYW5jZUNhbGxiYWNrKGNhbGxiYWNrSWQpIHtcclxuICAgICAgICBibG9ja0FQSUNhbGxzQmVmb3JlSW5pdGlhbGl6ZSh0aGlzLmluaXRpYWxpemVkKTtcclxuICAgICAgICBibG9ja05vbkJyb3dzZXJFbnZpcm9ubWVudCgpO1xyXG4gICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgfVxyXG4gICAgZW5hYmxlQWNjb3VudFN0b3JhZ2VFdmVudHMoKSB7XHJcbiAgICAgICAgYmxvY2tBUElDYWxsc0JlZm9yZUluaXRpYWxpemUodGhpcy5pbml0aWFsaXplZCk7XHJcbiAgICAgICAgYmxvY2tOb25Ccm93c2VyRW52aXJvbm1lbnQoKTtcclxuICAgIH1cclxuICAgIGRpc2FibGVBY2NvdW50U3RvcmFnZUV2ZW50cygpIHtcclxuICAgICAgICBibG9ja0FQSUNhbGxzQmVmb3JlSW5pdGlhbGl6ZSh0aGlzLmluaXRpYWxpemVkKTtcclxuICAgICAgICBibG9ja05vbkJyb3dzZXJFbnZpcm9ubWVudCgpO1xyXG4gICAgfVxyXG4gICAgaGFuZGxlUmVkaXJlY3RQcm9taXNlKFxyXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnVzZWQtdmFyc1xyXG4gICAgaGFzaCkge1xyXG4gICAgICAgIGJsb2NrQVBJQ2FsbHNCZWZvcmVJbml0aWFsaXplKHRoaXMuaW5pdGlhbGl6ZWQpO1xyXG4gICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUobnVsbCk7XHJcbiAgICB9XHJcbiAgICBsb2dpblBvcHVwKFxyXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnVzZWQtdmFyc1xyXG4gICAgcmVxdWVzdCkge1xyXG4gICAgICAgIGJsb2NrQVBJQ2FsbHNCZWZvcmVJbml0aWFsaXplKHRoaXMuaW5pdGlhbGl6ZWQpO1xyXG4gICAgICAgIGJsb2NrTm9uQnJvd3NlckVudmlyb25tZW50KCk7XHJcbiAgICAgICAgcmV0dXJuIHt9O1xyXG4gICAgfVxyXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnVzZWQtdmFyc1xyXG4gICAgbG9naW5SZWRpcmVjdChyZXF1ZXN0KSB7XHJcbiAgICAgICAgYmxvY2tBUElDYWxsc0JlZm9yZUluaXRpYWxpemUodGhpcy5pbml0aWFsaXplZCk7XHJcbiAgICAgICAgYmxvY2tOb25Ccm93c2VyRW52aXJvbm1lbnQoKTtcclxuICAgICAgICByZXR1cm4ge307XHJcbiAgICB9XHJcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVudXNlZC12YXJzXHJcbiAgICBsb2dvdXQobG9nb3V0UmVxdWVzdCkge1xyXG4gICAgICAgIGJsb2NrQVBJQ2FsbHNCZWZvcmVJbml0aWFsaXplKHRoaXMuaW5pdGlhbGl6ZWQpO1xyXG4gICAgICAgIGJsb2NrTm9uQnJvd3NlckVudmlyb25tZW50KCk7XHJcbiAgICAgICAgcmV0dXJuIHt9O1xyXG4gICAgfVxyXG4gICAgbG9nb3V0UmVkaXJlY3QoXHJcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVudXNlZC12YXJzXHJcbiAgICBsb2dvdXRSZXF1ZXN0KSB7XHJcbiAgICAgICAgYmxvY2tBUElDYWxsc0JlZm9yZUluaXRpYWxpemUodGhpcy5pbml0aWFsaXplZCk7XHJcbiAgICAgICAgYmxvY2tOb25Ccm93c2VyRW52aXJvbm1lbnQoKTtcclxuICAgICAgICByZXR1cm4ge307XHJcbiAgICB9XHJcbiAgICBsb2dvdXRQb3B1cChcclxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW51c2VkLXZhcnNcclxuICAgIGxvZ291dFJlcXVlc3QpIHtcclxuICAgICAgICBibG9ja0FQSUNhbGxzQmVmb3JlSW5pdGlhbGl6ZSh0aGlzLmluaXRpYWxpemVkKTtcclxuICAgICAgICBibG9ja05vbkJyb3dzZXJFbnZpcm9ubWVudCgpO1xyXG4gICAgICAgIHJldHVybiB7fTtcclxuICAgIH1cclxuICAgIHNzb1NpbGVudChcclxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW51c2VkLXZhcnNcclxuICAgIHJlcXVlc3QpIHtcclxuICAgICAgICBibG9ja0FQSUNhbGxzQmVmb3JlSW5pdGlhbGl6ZSh0aGlzLmluaXRpYWxpemVkKTtcclxuICAgICAgICBibG9ja05vbkJyb3dzZXJFbnZpcm9ubWVudCgpO1xyXG4gICAgICAgIHJldHVybiB7fTtcclxuICAgIH1cclxuICAgIGdldFRva2VuQ2FjaGUoKSB7XHJcbiAgICAgICAgYmxvY2tBUElDYWxsc0JlZm9yZUluaXRpYWxpemUodGhpcy5pbml0aWFsaXplZCk7XHJcbiAgICAgICAgYmxvY2tOb25Ccm93c2VyRW52aXJvbm1lbnQoKTtcclxuICAgICAgICByZXR1cm4ge307XHJcbiAgICB9XHJcbiAgICBnZXRMb2dnZXIoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMubG9nZ2VyO1xyXG4gICAgfVxyXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnVzZWQtdmFyc1xyXG4gICAgc2V0TG9nZ2VyKGxvZ2dlcikge1xyXG4gICAgICAgIGJsb2NrQVBJQ2FsbHNCZWZvcmVJbml0aWFsaXplKHRoaXMuaW5pdGlhbGl6ZWQpO1xyXG4gICAgICAgIGJsb2NrTm9uQnJvd3NlckVudmlyb25tZW50KCk7XHJcbiAgICB9XHJcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVudXNlZC12YXJzXHJcbiAgICBzZXRBY3RpdmVBY2NvdW50KGFjY291bnQpIHtcclxuICAgICAgICBibG9ja0FQSUNhbGxzQmVmb3JlSW5pdGlhbGl6ZSh0aGlzLmluaXRpYWxpemVkKTtcclxuICAgICAgICBibG9ja05vbkJyb3dzZXJFbnZpcm9ubWVudCgpO1xyXG4gICAgfVxyXG4gICAgZ2V0QWN0aXZlQWNjb3VudCgpIHtcclxuICAgICAgICBibG9ja0FQSUNhbGxzQmVmb3JlSW5pdGlhbGl6ZSh0aGlzLmluaXRpYWxpemVkKTtcclxuICAgICAgICBibG9ja05vbkJyb3dzZXJFbnZpcm9ubWVudCgpO1xyXG4gICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgfVxyXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnVzZWQtdmFyc1xyXG4gICAgaW5pdGlhbGl6ZVdyYXBwZXJMaWJyYXJ5KHNrdSwgdmVyc2lvbikge1xyXG4gICAgICAgIHRoaXMuYnJvd3NlclN0b3JhZ2Uuc2V0V3JhcHBlck1ldGFkYXRhKHNrdSwgdmVyc2lvbik7XHJcbiAgICB9XHJcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVudXNlZC12YXJzXHJcbiAgICBzZXROYXZpZ2F0aW9uQ2xpZW50KG5hdmlnYXRpb25DbGllbnQpIHtcclxuICAgICAgICBibG9ja0FQSUNhbGxzQmVmb3JlSW5pdGlhbGl6ZSh0aGlzLmluaXRpYWxpemVkKTtcclxuICAgICAgICBibG9ja05vbkJyb3dzZXJFbnZpcm9ubWVudCgpO1xyXG4gICAgfVxyXG4gICAgZ2V0Q29uZmlndXJhdGlvbigpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5jb25maWc7XHJcbiAgICB9XHJcbiAgICBpc0Jyb3dzZXJFbnYoKSB7XHJcbiAgICAgICAgYmxvY2tBUElDYWxsc0JlZm9yZUluaXRpYWxpemUodGhpcy5pbml0aWFsaXplZCk7XHJcbiAgICAgICAgYmxvY2tOb25Ccm93c2VyRW52aXJvbm1lbnQoKTtcclxuICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgIH1cclxuICAgIGdldEJyb3dzZXJDcnlwdG8oKSB7XHJcbiAgICAgICAgYmxvY2tBUElDYWxsc0JlZm9yZUluaXRpYWxpemUodGhpcy5pbml0aWFsaXplZCk7XHJcbiAgICAgICAgYmxvY2tOb25Ccm93c2VyRW52aXJvbm1lbnQoKTtcclxuICAgICAgICByZXR1cm4ge307XHJcbiAgICB9XHJcbiAgICBnZXRQZXJmb3JtYW5jZUNsaWVudCgpIHtcclxuICAgICAgICBibG9ja0FQSUNhbGxzQmVmb3JlSW5pdGlhbGl6ZSh0aGlzLmluaXRpYWxpemVkKTtcclxuICAgICAgICBibG9ja05vbkJyb3dzZXJFbnZpcm9ubWVudCgpO1xyXG4gICAgICAgIHJldHVybiB7fTtcclxuICAgIH1cclxuICAgIGdldFJlZGlyZWN0UmVzcG9uc2UoKSB7XHJcbiAgICAgICAgYmxvY2tBUElDYWxsc0JlZm9yZUluaXRpYWxpemUodGhpcy5pbml0aWFsaXplZCk7XHJcbiAgICAgICAgYmxvY2tOb25Ccm93c2VyRW52aXJvbm1lbnQoKTtcclxuICAgICAgICByZXR1cm4ge307XHJcbiAgICB9XHJcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVudXNlZC12YXJzXHJcbiAgICBhc3luYyBjbGVhckNhY2hlKGxvZ291dFJlcXVlc3QpIHtcclxuICAgICAgICBibG9ja0FQSUNhbGxzQmVmb3JlSW5pdGlhbGl6ZSh0aGlzLmluaXRpYWxpemVkKTtcclxuICAgICAgICBibG9ja05vbkJyb3dzZXJFbnZpcm9ubWVudCgpO1xyXG4gICAgfVxyXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnVzZWQtdmFyc1xyXG4gICAgYXN5bmMgaHlkcmF0ZUNhY2hlKFxyXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnVzZWQtdmFyc1xyXG4gICAgcmVzdWx0LCBcclxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW51c2VkLXZhcnNcclxuICAgIHJlcXVlc3QpIHtcclxuICAgICAgICBibG9ja0FQSUNhbGxzQmVmb3JlSW5pdGlhbGl6ZSh0aGlzLmluaXRpYWxpemVkKTtcclxuICAgICAgICBibG9ja05vbkJyb3dzZXJFbnZpcm9ubWVudCgpO1xyXG4gICAgfVxyXG59XG5cbmV4cG9ydCB7IFVua25vd25PcGVyYXRpbmdDb250ZXh0Q29udHJvbGxlciB9O1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9VW5rbm93bk9wZXJhdGluZ0NvbnRleHRDb250cm9sbGVyLm1qcy5tYXBcbiIsIi8qISBAYXp1cmUvbXNhbC1icm93c2VyIHYzLjI4LjEgMjAyNS0wMS0xNCAqL1xuJ3VzZSBzdHJpY3QnO1xuaW1wb3J0IHsgQmFzZU9wZXJhdGluZ0NvbnRleHQgfSBmcm9tICcuL0Jhc2VPcGVyYXRpbmdDb250ZXh0Lm1qcyc7XG5cbi8qXHJcbiAqIENvcHlyaWdodCAoYykgTWljcm9zb2Z0IENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLlxyXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgTUlUIExpY2Vuc2UuXHJcbiAqL1xyXG5jbGFzcyBVbmtub3duT3BlcmF0aW5nQ29udGV4dCBleHRlbmRzIEJhc2VPcGVyYXRpbmdDb250ZXh0IHtcclxuICAgIC8qKlxyXG4gICAgICogUmV0dXJucyB0aGUgdW5pcXVlIGlkZW50aWZpZXIgZm9yIHRoaXMgb3BlcmF0aW5nIGNvbnRleHRcclxuICAgICAqIEByZXR1cm5zIHN0cmluZ1xyXG4gICAgICovXHJcbiAgICBnZXRJZCgpIHtcclxuICAgICAgICByZXR1cm4gVW5rbm93bk9wZXJhdGluZ0NvbnRleHQuSUQ7XHJcbiAgICB9XHJcbiAgICAvKipcclxuICAgICAqIFJldHVybiB0aGUgbW9kdWxlIG5hbWUuICBJbnRlbmRlZCBmb3IgdXNlIHdpdGggaW1wb3J0KCkgdG8gZW5hYmxlIGR5bmFtaWMgaW1wb3J0XHJcbiAgICAgKiBvZiB0aGUgaW1wbGVtZW50YXRpb24gYXNzb2NpYXRlZCB3aXRoIHRoaXMgb3BlcmF0aW5nIGNvbnRleHRcclxuICAgICAqIEByZXR1cm5zXHJcbiAgICAgKi9cclxuICAgIGdldE1vZHVsZU5hbWUoKSB7XHJcbiAgICAgICAgcmV0dXJuIFVua25vd25PcGVyYXRpbmdDb250ZXh0Lk1PRFVMRV9OQU1FO1xyXG4gICAgfVxyXG4gICAgLyoqXHJcbiAgICAgKiBDaGVja3Mgd2hldGhlciB0aGUgb3BlcmF0aW5nIGNvbnRleHQgaXMgYXZhaWxhYmxlLlxyXG4gICAgICogQ29uZmlybXMgdGhhdCB0aGUgY29kZSBpcyBydW5uaW5nIGEgYnJvd3NlciByYXRoZXIuICBUaGlzIGlzIHJlcXVpcmVkLlxyXG4gICAgICogQHJldHVybnMgUHJvbWlzZTxib29sZWFuPiBpbmRpY2F0aW5nIHdoZXRoZXIgdGhpcyBvcGVyYXRpbmcgY29udGV4dCBpcyBjdXJyZW50bHkgYXZhaWxhYmxlLlxyXG4gICAgICovXHJcbiAgICBhc3luYyBpbml0aWFsaXplKCkge1xyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIFRoaXMgb3BlcmF0aW5nIGNvbnRleHQgaXMgaW4gdXNlIHdoZW4gd2UgaGF2ZSBub3QgY2hlY2tlZCBmb3Igd2hhdCB0aGUgb3BlcmF0aW5nIGNvbnRleHQgaXMuXHJcbiAgICAgICAgICogVGhlIGNvbnRleHQgaXMgdW5rbm93biB1bnRpbCB3ZSBjaGVjayBpdC5cclxuICAgICAgICAgKi9cclxuICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgIH1cclxufVxyXG4vKlxyXG4gKiBUT0RPOiBPbmNlIHdlIGhhdmUgZGV0ZXJtaW5lIHRoZSBidW5kbGluZyBjb2RlIHJldHVybiBoZXJlIHRvIHNwZWNpZnkgdGhlIG5hbWUgb2YgdGhlIGJ1bmRsZVxyXG4gKiBjb250YWluaW5nIHRoZSBpbXBsZW1lbnRhdGlvbiBmb3IgdGhpcyBvcGVyYXRpbmcgY29udGV4dFxyXG4gKi9cclxuVW5rbm93bk9wZXJhdGluZ0NvbnRleHQuTU9EVUxFX05BTUUgPSBcIlwiO1xyXG4vKipcclxuICogVW5pcXVlIGlkZW50aWZpZXIgZm9yIHRoZSBvcGVyYXRpbmcgY29udGV4dFxyXG4gKi9cclxuVW5rbm93bk9wZXJhdGluZ0NvbnRleHQuSUQgPSBcIlVua25vd25PcGVyYXRpbmdDb250ZXh0XCI7XG5cbmV4cG9ydCB7IFVua25vd25PcGVyYXRpbmdDb250ZXh0IH07XG4vLyMgc291cmNlTWFwcGluZ1VSTD1Vbmtub3duT3BlcmF0aW5nQ29udGV4dC5tanMubWFwXG4iLCIvKiEgQGF6dXJlL21zYWwtYnJvd3NlciB2My4yOC4xIDIwMjUtMDEtMTQgKi9cbid1c2Ugc3RyaWN0JztcbmltcG9ydCB7IGNyZWF0ZUNvbnRyb2xsZXIgfSBmcm9tICcuLi9jb250cm9sbGVycy9Db250cm9sbGVyRmFjdG9yeS5tanMnO1xuaW1wb3J0IHsgVW5rbm93bk9wZXJhdGluZ0NvbnRleHRDb250cm9sbGVyIH0gZnJvbSAnLi4vY29udHJvbGxlcnMvVW5rbm93bk9wZXJhdGluZ0NvbnRleHRDb250cm9sbGVyLm1qcyc7XG5pbXBvcnQgeyBVbmtub3duT3BlcmF0aW5nQ29udGV4dCB9IGZyb20gJy4uL29wZXJhdGluZ2NvbnRleHQvVW5rbm93bk9wZXJhdGluZ0NvbnRleHQubWpzJztcblxuLypcclxuICogQ29weXJpZ2h0IChjKSBNaWNyb3NvZnQgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuXHJcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgTGljZW5zZS5cclxuICovXHJcbi8qKlxyXG4gKiBQdWJsaWNDbGllbnROZXh0IGlzIGFuIGVhcmx5IGxvb2sgYXQgdGhlIHBsYW5uZWQgaW1wbGVtZW50YXRpb24gb2YgUHVibGljQ2xpZW50QXBwbGljYXRpb24gaW4gdGhlIG5leHQgbWFqb3IgdmVyc2lvbiBvZiBNU0FMLmpzLlxyXG4gKiBJdCBjb250YWlucyBzdXBwb3J0IGZvciBtdWx0aXBsZSBBUEkgaW1wbGVtZW50YXRpb25zIGJhc2VkIG9uIHRoZSBydW50aW1lIGVudmlyb25tZW50IHRoYXQgaXQgaXMgcnVubmluZyBpbi5cclxuICpcclxuICogVGhlIGdvYWxzIG9mIHRoZXNlIGNoYW5nZXMgYXJlIHRvIHByb3ZpZGUgYSBjbGVhbiBzZXBhcmF0aW9uIG9mIGJlaGF2aW9yIGJldHdlZW4gZGlmZmVyZW50IG9wZXJhdGluZyBjb250ZXh0cyAoTmVzdGVkIEFwcCBBdXRoLCBQbGF0Zm9ybSBCcm9rZXJzLCBQbGFpbiBvbGQgQnJvd3NlciwgZXRjLilcclxuICogd2hpbGUgc3RpbGwgcHJvdmlkaW5nIGEgY29uc2lzdGVudCBBUEkgc3VyZmFjZSBmb3IgZGV2ZWxvcGVycy5cclxuICpcclxuICogUGxlYXNlIHVzZSBQdWJsaWNDbGllbnRBcHBsaWNhdGlvbiBmb3IgYW55IHByb2QvcmVhbC13b3JsZCBzY2VuYXJpb3MuXHJcbiAqIE5vdGU6IFB1YmxpY0NsaWVudE5leHQgaXMgZXhwZXJpbWVudGFsIGFuZCBzdWJqZWN0IHRvIGJyZWFraW5nIGNoYW5nZXMgd2l0aG91dCBmb2xsb3dpbmcgc2VtdmVyXHJcbiAqXHJcbiAqL1xyXG5jbGFzcyBQdWJsaWNDbGllbnROZXh0IHtcclxuICAgIHN0YXRpYyBhc3luYyBjcmVhdGVQdWJsaWNDbGllbnRBcHBsaWNhdGlvbihjb25maWd1cmF0aW9uKSB7XHJcbiAgICAgICAgY29uc3QgY29udHJvbGxlciA9IGF3YWl0IGNyZWF0ZUNvbnRyb2xsZXIoY29uZmlndXJhdGlvbik7XHJcbiAgICAgICAgbGV0IHBjYTtcclxuICAgICAgICBpZiAoY29udHJvbGxlciAhPT0gbnVsbCkge1xyXG4gICAgICAgICAgICBwY2EgPSBuZXcgUHVibGljQ2xpZW50TmV4dChjb25maWd1cmF0aW9uLCBjb250cm9sbGVyKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIHBjYSA9IG5ldyBQdWJsaWNDbGllbnROZXh0KGNvbmZpZ3VyYXRpb24pO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gcGNhO1xyXG4gICAgfVxyXG4gICAgLyoqXHJcbiAgICAgKiBAY29uc3RydWN0b3JcclxuICAgICAqIENvbnN0cnVjdG9yIGZvciB0aGUgUHVibGljQ2xpZW50TmV4dCB1c2VkIHRvIGluc3RhbnRpYXRlIHRoZSBQdWJsaWNDbGllbnROZXh0IG9iamVjdFxyXG4gICAgICpcclxuICAgICAqIEltcG9ydGFudCBhdHRyaWJ1dGVzIGluIHRoZSBDb25maWd1cmF0aW9uIG9iamVjdCBmb3IgYXV0aCBhcmU6XHJcbiAgICAgKiAtIGNsaWVudElEOiB0aGUgYXBwbGljYXRpb24gSUQgb2YgeW91ciBhcHBsaWNhdGlvbi4gWW91IGNhbiBvYnRhaW4gb25lIGJ5IHJlZ2lzdGVyaW5nIHlvdXIgYXBwbGljYXRpb24gd2l0aCBvdXIgQXBwbGljYXRpb24gcmVnaXN0cmF0aW9uIHBvcnRhbCA6IGh0dHBzOi8vcG9ydGFsLmF6dXJlLmNvbS8jYmxhZGUvTWljcm9zb2Z0X0FBRF9JQU0vQWN0aXZlRGlyZWN0b3J5TWVudUJsYWRlL1JlZ2lzdGVyZWRBcHBzUHJldmlld1xyXG4gICAgICogLSBhdXRob3JpdHk6IHRoZSBhdXRob3JpdHkgVVJMIGZvciB5b3VyIGFwcGxpY2F0aW9uLlxyXG4gICAgICogLSByZWRpcmVjdF91cmk6IHRoZSB1cmkgb2YgeW91ciBhcHBsaWNhdGlvbiByZWdpc3RlcmVkIGluIHRoZSBwb3J0YWwuXHJcbiAgICAgKlxyXG4gICAgICogSW4gQXp1cmUgQUQsIGF1dGhvcml0eSBpcyBhIFVSTCBpbmRpY2F0aW5nIHRoZSBBenVyZSBhY3RpdmUgZGlyZWN0b3J5IHRoYXQgTVNBTCB1c2VzIHRvIG9idGFpbiB0b2tlbnMuXHJcbiAgICAgKiBJdCBpcyBvZiB0aGUgZm9ybSBodHRwczovL2xvZ2luLm1pY3Jvc29mdG9ubGluZS5jb20ve0VudGVyX3RoZV9UZW5hbnRfSW5mb19IZXJlfVxyXG4gICAgICogSWYgeW91ciBhcHBsaWNhdGlvbiBzdXBwb3J0cyBBY2NvdW50cyBpbiBvbmUgb3JnYW5pemF0aW9uYWwgZGlyZWN0b3J5LCByZXBsYWNlIFwiRW50ZXJfdGhlX1RlbmFudF9JbmZvX0hlcmVcIiB2YWx1ZSB3aXRoIHRoZSBUZW5hbnQgSWQgb3IgVGVuYW50IG5hbWUgKGZvciBleGFtcGxlLCBjb250b3NvLm1pY3Jvc29mdC5jb20pLlxyXG4gICAgICogSWYgeW91ciBhcHBsaWNhdGlvbiBzdXBwb3J0cyBBY2NvdW50cyBpbiBhbnkgb3JnYW5pemF0aW9uYWwgZGlyZWN0b3J5LCByZXBsYWNlIFwiRW50ZXJfdGhlX1RlbmFudF9JbmZvX0hlcmVcIiB2YWx1ZSB3aXRoIG9yZ2FuaXphdGlvbnMuXHJcbiAgICAgKiBJZiB5b3VyIGFwcGxpY2F0aW9uIHN1cHBvcnRzIEFjY291bnRzIGluIGFueSBvcmdhbml6YXRpb25hbCBkaXJlY3RvcnkgYW5kIHBlcnNvbmFsIE1pY3Jvc29mdCBhY2NvdW50cywgcmVwbGFjZSBcIkVudGVyX3RoZV9UZW5hbnRfSW5mb19IZXJlXCIgdmFsdWUgd2l0aCBjb21tb24uXHJcbiAgICAgKiBUbyByZXN0cmljdCBzdXBwb3J0IHRvIFBlcnNvbmFsIE1pY3Jvc29mdCBhY2NvdW50cyBvbmx5LCByZXBsYWNlIFwiRW50ZXJfdGhlX1RlbmFudF9JbmZvX0hlcmVcIiB2YWx1ZSB3aXRoIGNvbnN1bWVycy5cclxuICAgICAqXHJcbiAgICAgKiBJbiBBenVyZSBCMkMsIGF1dGhvcml0eSBpcyBvZiB0aGUgZm9ybSBodHRwczovL3tpbnN0YW5jZX0vdGZwL3t0ZW5hbnR9L3twb2xpY3lOYW1lfS9cclxuICAgICAqIEZ1bGwgQjJDIGZ1bmN0aW9uYWxpdHkgd2lsbCBiZSBhdmFpbGFibGUgaW4gdGhpcyBsaWJyYXJ5IGluIGZ1dHVyZSB2ZXJzaW9ucy5cclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0gY29uZmlndXJhdGlvbiBPYmplY3QgZm9yIHRoZSBNU0FMIFB1YmxpY0NsaWVudEFwcGxpY2F0aW9uIGluc3RhbmNlXHJcbiAgICAgKiBAcGFyYW0gSUNvbnRyb2xsZXIgT3B0aW9uYWwgcGFyYW1ldGVyIHRvIGV4cGxpY3RseSBzZXQgdGhlIGNvbnRyb2xsZXIuIChXaWxsIGJlIHJlbW92ZWQgd2hlbiB3ZSByZW1vdmUgcHVibGljIGNvbnN0cnVjdG9yKVxyXG4gICAgICovXHJcbiAgICBjb25zdHJ1Y3Rvcihjb25maWd1cmF0aW9uLCBjb250cm9sbGVyKSB7XHJcbiAgICAgICAgdGhpcy5jb25maWd1cmF0aW9uID0gY29uZmlndXJhdGlvbjtcclxuICAgICAgICBpZiAoY29udHJvbGxlcikge1xyXG4gICAgICAgICAgICB0aGlzLmNvbnRyb2xsZXIgPSBjb250cm9sbGVyO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgY29uc3Qgb3BlcmF0aW5nQ29udGV4dCA9IG5ldyBVbmtub3duT3BlcmF0aW5nQ29udGV4dChjb25maWd1cmF0aW9uKTtcclxuICAgICAgICAgICAgdGhpcy5jb250cm9sbGVyID0gbmV3IFVua25vd25PcGVyYXRpbmdDb250ZXh0Q29udHJvbGxlcihvcGVyYXRpbmdDb250ZXh0KTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICAvKipcclxuICAgICAqIEluaXRpYWxpemVyIGZ1bmN0aW9uIHRvIHBlcmZvcm0gYXN5bmMgc3RhcnR1cCB0YXNrcyBzdWNoIGFzIGNvbm5lY3RpbmcgdG8gV0FNIGV4dGVuc2lvblxyXG4gICAgICovXHJcbiAgICBhc3luYyBpbml0aWFsaXplKCkge1xyXG4gICAgICAgIGlmICh0aGlzLmNvbnRyb2xsZXIgaW5zdGFuY2VvZiBVbmtub3duT3BlcmF0aW5nQ29udGV4dENvbnRyb2xsZXIpIHtcclxuICAgICAgICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgY3JlYXRlQ29udHJvbGxlcih0aGlzLmNvbmZpZ3VyYXRpb24pO1xyXG4gICAgICAgICAgICBpZiAocmVzdWx0ICE9PSBudWxsKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmNvbnRyb2xsZXIgPSByZXN1bHQ7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuY29udHJvbGxlci5pbml0aWFsaXplKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoKTtcclxuICAgIH1cclxuICAgIC8qKlxyXG4gICAgICogVXNlIHdoZW4geW91IHdhbnQgdG8gb2J0YWluIGFuIGFjY2Vzc190b2tlbiBmb3IgeW91ciBBUEkgdmlhIG9wZW5pbmcgYSBwb3B1cCB3aW5kb3cgaW4gdGhlIHVzZXIncyBicm93c2VyXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHJlcXVlc3RcclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJucyBBIHByb21pc2UgdGhhdCBpcyBmdWxmaWxsZWQgd2hlbiB0aGlzIGZ1bmN0aW9uIGhhcyBjb21wbGV0ZWQsIG9yIHJlamVjdGVkIGlmIGFuIGVycm9yIHdhcyByYWlzZWQuXHJcbiAgICAgKi9cclxuICAgIGFzeW5jIGFjcXVpcmVUb2tlblBvcHVwKHJlcXVlc3QpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5jb250cm9sbGVyLmFjcXVpcmVUb2tlblBvcHVwKHJlcXVlc3QpO1xyXG4gICAgfVxyXG4gICAgLyoqXHJcbiAgICAgKiBVc2Ugd2hlbiB5b3Ugd2FudCB0byBvYnRhaW4gYW4gYWNjZXNzX3Rva2VuIGZvciB5b3VyIEFQSSBieSByZWRpcmVjdGluZyB0aGUgdXNlcidzIGJyb3dzZXIgd2luZG93IHRvIHRoZSBhdXRob3JpemF0aW9uIGVuZHBvaW50LiBUaGlzIGZ1bmN0aW9uIHJlZGlyZWN0c1xyXG4gICAgICogdGhlIHBhZ2UsIHNvIGFueSBjb2RlIHRoYXQgZm9sbG93cyB0aGlzIGZ1bmN0aW9uIHdpbGwgbm90IGV4ZWN1dGUuXHJcbiAgICAgKlxyXG4gICAgICogSU1QT1JUQU5UOiBJdCBpcyBOT1QgcmVjb21tZW5kZWQgdG8gaGF2ZSBjb2RlIHRoYXQgaXMgZGVwZW5kZW50IG9uIHRoZSByZXNvbHV0aW9uIG9mIHRoZSBQcm9taXNlLiBUaGlzIGZ1bmN0aW9uIHdpbGwgbmF2aWdhdGUgYXdheSBmcm9tIHRoZSBjdXJyZW50XHJcbiAgICAgKiBicm93c2VyIHdpbmRvdy4gSXQgY3VycmVudGx5IHJldHVybnMgYSBQcm9taXNlIGluIG9yZGVyIHRvIHJlZmxlY3QgdGhlIGFzeW5jaHJvbm91cyBuYXR1cmUgb2YgdGhlIGNvZGUgcnVubmluZyBpbiB0aGlzIGZ1bmN0aW9uLlxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSByZXF1ZXN0XHJcbiAgICAgKi9cclxuICAgIGFjcXVpcmVUb2tlblJlZGlyZWN0KHJlcXVlc3QpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5jb250cm9sbGVyLmFjcXVpcmVUb2tlblJlZGlyZWN0KHJlcXVlc3QpO1xyXG4gICAgfVxyXG4gICAgLyoqXHJcbiAgICAgKiBTaWxlbnRseSBhY3F1aXJlIGFuIGFjY2VzcyB0b2tlbiBmb3IgYSBnaXZlbiBzZXQgb2Ygc2NvcGVzLiBSZXR1cm5zIGN1cnJlbnRseSBwcm9jZXNzaW5nIHByb21pc2UgaWYgcGFyYWxsZWwgcmVxdWVzdHMgYXJlIG1hZGUuXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtAbGluayAoU2lsZW50UmVxdWVzdDp0eXBlKX1cclxuICAgICAqIEByZXR1cm5zIHtQcm9taXNlLjxBdXRoZW50aWNhdGlvblJlc3VsdD59IC0gYSBwcm9taXNlIHRoYXQgaXMgZnVsZmlsbGVkIHdoZW4gdGhpcyBmdW5jdGlvbiBoYXMgY29tcGxldGVkLCBvciByZWplY3RlZCBpZiBhbiBlcnJvciB3YXMgcmFpc2VkLiBSZXR1cm5zIHRoZSB7QGxpbmsgQXV0aGVudGljYXRpb25SZXN1bHR9IG9iamVjdFxyXG4gICAgICovXHJcbiAgICBhY3F1aXJlVG9rZW5TaWxlbnQoc2lsZW50UmVxdWVzdCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmNvbnRyb2xsZXIuYWNxdWlyZVRva2VuU2lsZW50KHNpbGVudFJlcXVlc3QpO1xyXG4gICAgfVxyXG4gICAgLyoqXHJcbiAgICAgKiBUaGlzIGZ1bmN0aW9uIHJlZGVlbXMgYW4gYXV0aG9yaXphdGlvbiBjb2RlIChwYXNzZWQgYXMgY29kZSkgZnJvbSB0aGUgZVNUUyB0b2tlbiBlbmRwb2ludC5cclxuICAgICAqIFRoaXMgYXV0aG9yaXphdGlvbiBjb2RlIHNob3VsZCBiZSBhY3F1aXJlZCBzZXJ2ZXItc2lkZSB1c2luZyBhIGNvbmZpZGVudGlhbCBjbGllbnQgdG8gYWNxdWlyZSBhIHNwYV9jb2RlLlxyXG4gICAgICogVGhpcyBBUEkgaXMgbm90IGluZGVuZGVkIGZvciBub3JtYWwgYXV0aG9yaXphdGlvbiBjb2RlIGFjcXVpc2l0aW9uIGFuZCByZWRlbXB0aW9uLlxyXG4gICAgICpcclxuICAgICAqIFJlZGVtcHRpb24gb2YgdGhpcyBhdXRob3JpemF0aW9uIGNvZGUgd2lsbCBub3QgcmVxdWlyZSBQS0NFLCBhcyBpdCB3YXMgYWNxdWlyZWQgYnkgYSBjb25maWRlbnRpYWwgY2xpZW50LlxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSByZXF1ZXN0IHtAbGluayBBdXRob3JpemF0aW9uQ29kZVJlcXVlc3R9XHJcbiAgICAgKiBAcmV0dXJucyBBIHByb21pc2UgdGhhdCBpcyBmdWxmaWxsZWQgd2hlbiB0aGlzIGZ1bmN0aW9uIGhhcyBjb21wbGV0ZWQsIG9yIHJlamVjdGVkIGlmIGFuIGVycm9yIHdhcyByYWlzZWQuXHJcbiAgICAgKi9cclxuICAgIGFjcXVpcmVUb2tlbkJ5Q29kZShyZXF1ZXN0KSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuY29udHJvbGxlci5hY3F1aXJlVG9rZW5CeUNvZGUocmVxdWVzdCk7XHJcbiAgICB9XHJcbiAgICAvKipcclxuICAgICAqIEFkZHMgZXZlbnQgY2FsbGJhY2tzIHRvIGFycmF5XHJcbiAgICAgKiBAcGFyYW0gY2FsbGJhY2tcclxuICAgICAqL1xyXG4gICAgYWRkRXZlbnRDYWxsYmFjayhjYWxsYmFjaywgZXZlbnRUeXBlcykge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmNvbnRyb2xsZXIuYWRkRXZlbnRDYWxsYmFjayhjYWxsYmFjaywgZXZlbnRUeXBlcyk7XHJcbiAgICB9XHJcbiAgICAvKipcclxuICAgICAqIFJlbW92ZXMgY2FsbGJhY2sgd2l0aCBwcm92aWRlZCBpZCBmcm9tIGNhbGxiYWNrIGFycmF5XHJcbiAgICAgKiBAcGFyYW0gY2FsbGJhY2tJZFxyXG4gICAgICovXHJcbiAgICByZW1vdmVFdmVudENhbGxiYWNrKGNhbGxiYWNrSWQpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5jb250cm9sbGVyLnJlbW92ZUV2ZW50Q2FsbGJhY2soY2FsbGJhY2tJZCk7XHJcbiAgICB9XHJcbiAgICAvKipcclxuICAgICAqIFJlZ2lzdGVycyBhIGNhbGxiYWNrIHRvIHJlY2VpdmUgcGVyZm9ybWFuY2UgZXZlbnRzLlxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7UGVyZm9ybWFuY2VDYWxsYmFja0Z1bmN0aW9ufSBjYWxsYmFja1xyXG4gICAgICogQHJldHVybnMge3N0cmluZ31cclxuICAgICAqL1xyXG4gICAgYWRkUGVyZm9ybWFuY2VDYWxsYmFjayhjYWxsYmFjaykge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmNvbnRyb2xsZXIuYWRkUGVyZm9ybWFuY2VDYWxsYmFjayhjYWxsYmFjayk7XHJcbiAgICB9XHJcbiAgICAvKipcclxuICAgICAqIFJlbW92ZXMgYSBjYWxsYmFjayByZWdpc3RlcmVkIHdpdGggYWRkUGVyZm9ybWFuY2VDYWxsYmFjay5cclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gY2FsbGJhY2tJZFxyXG4gICAgICogQHJldHVybnMge2Jvb2xlYW59XHJcbiAgICAgKi9cclxuICAgIHJlbW92ZVBlcmZvcm1hbmNlQ2FsbGJhY2soY2FsbGJhY2tJZCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmNvbnRyb2xsZXIucmVtb3ZlUGVyZm9ybWFuY2VDYWxsYmFjayhjYWxsYmFja0lkKTtcclxuICAgIH1cclxuICAgIC8qKlxyXG4gICAgICogQWRkcyBldmVudCBsaXN0ZW5lciB0aGF0IGVtaXRzIGFuIGV2ZW50IHdoZW4gYSB1c2VyIGFjY291bnQgaXMgYWRkZWQgb3IgcmVtb3ZlZCBmcm9tIGxvY2Fsc3RvcmFnZSBpbiBhIGRpZmZlcmVudCBicm93c2VyIHRhYiBvciB3aW5kb3dcclxuICAgICAqL1xyXG4gICAgZW5hYmxlQWNjb3VudFN0b3JhZ2VFdmVudHMoKSB7XHJcbiAgICAgICAgdGhpcy5jb250cm9sbGVyLmVuYWJsZUFjY291bnRTdG9yYWdlRXZlbnRzKCk7XHJcbiAgICB9XHJcbiAgICAvKipcclxuICAgICAqIFJlbW92ZXMgZXZlbnQgbGlzdGVuZXIgdGhhdCBlbWl0cyBhbiBldmVudCB3aGVuIGEgdXNlciBhY2NvdW50IGlzIGFkZGVkIG9yIHJlbW92ZWQgZnJvbSBsb2NhbHN0b3JhZ2UgaW4gYSBkaWZmZXJlbnQgYnJvd3NlciB0YWIgb3Igd2luZG93XHJcbiAgICAgKi9cclxuICAgIGRpc2FibGVBY2NvdW50U3RvcmFnZUV2ZW50cygpIHtcclxuICAgICAgICB0aGlzLmNvbnRyb2xsZXIuZGlzYWJsZUFjY291bnRTdG9yYWdlRXZlbnRzKCk7XHJcbiAgICB9XHJcbiAgICAvKipcclxuICAgICAqIFJldHVybnMgdGhlIGZpcnN0IGFjY291bnQgZm91bmQgaW4gdGhlIGNhY2hlIHRoYXQgbWF0Y2hlcyB0aGUgYWNjb3VudCBmaWx0ZXIgcGFzc2VkIGluLlxyXG4gICAgICogQHBhcmFtIGFjY291bnRGaWx0ZXJcclxuICAgICAqIEByZXR1cm5zIFRoZSBmaXJzdCBhY2NvdW50IGZvdW5kIGluIHRoZSBjYWNoZSBtYXRjaGluZyB0aGUgcHJvdmlkZWQgZmlsdGVyIG9yIG51bGwgaWYgbm8gYWNjb3VudCBjb3VsZCBiZSBmb3VuZC5cclxuICAgICAqL1xyXG4gICAgZ2V0QWNjb3VudChhY2NvdW50RmlsdGVyKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuY29udHJvbGxlci5nZXRBY2NvdW50KGFjY291bnRGaWx0ZXIpO1xyXG4gICAgfVxyXG4gICAgLyoqXHJcbiAgICAgKiBSZXR1cm5zIHRoZSBzaWduZWQgaW4gYWNjb3VudCBtYXRjaGluZyBob21lQWNjb3VudElkLlxyXG4gICAgICogKHRoZSBhY2NvdW50IG9iamVjdCBpcyBjcmVhdGVkIGF0IHRoZSB0aW1lIG9mIHN1Y2Nlc3NmdWwgbG9naW4pXHJcbiAgICAgKiBvciBudWxsIHdoZW4gbm8gbWF0Y2hpbmcgYWNjb3VudCBpcyBmb3VuZFxyXG4gICAgICogQHBhcmFtIGhvbWVBY2NvdW50SWRcclxuICAgICAqIEByZXR1cm5zIFRoZSBhY2NvdW50IG9iamVjdCBzdG9yZWQgaW4gTVNBTFxyXG4gICAgICogQGRlcHJlY2F0ZWQgLSBVc2UgZ2V0QWNjb3VudCBpbnN0ZWFkXHJcbiAgICAgKi9cclxuICAgIGdldEFjY291bnRCeUhvbWVJZChob21lQWNjb3VudElkKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuY29udHJvbGxlci5nZXRBY2NvdW50QnlIb21lSWQoaG9tZUFjY291bnRJZCk7XHJcbiAgICB9XHJcbiAgICAvKipcclxuICAgICAqIFJldHVybnMgdGhlIHNpZ25lZCBpbiBhY2NvdW50IG1hdGNoaW5nIGxvY2FsQWNjb3VudElkLlxyXG4gICAgICogKHRoZSBhY2NvdW50IG9iamVjdCBpcyBjcmVhdGVkIGF0IHRoZSB0aW1lIG9mIHN1Y2Nlc3NmdWwgbG9naW4pXHJcbiAgICAgKiBvciBudWxsIHdoZW4gbm8gbWF0Y2hpbmcgYWNjb3VudCBpcyBmb3VuZFxyXG4gICAgICogQHBhcmFtIGxvY2FsQWNjb3VudElkXHJcbiAgICAgKiBAcmV0dXJucyBUaGUgYWNjb3VudCBvYmplY3Qgc3RvcmVkIGluIE1TQUxcclxuICAgICAqIEBkZXByZWNhdGVkIC0gVXNlIGdldEFjY291bnQgaW5zdGVhZFxyXG4gICAgICovXHJcbiAgICBnZXRBY2NvdW50QnlMb2NhbElkKGxvY2FsSWQpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5jb250cm9sbGVyLmdldEFjY291bnRCeUxvY2FsSWQobG9jYWxJZCk7XHJcbiAgICB9XHJcbiAgICAvKipcclxuICAgICAqIFJldHVybnMgdGhlIHNpZ25lZCBpbiBhY2NvdW50IG1hdGNoaW5nIHVzZXJuYW1lLlxyXG4gICAgICogKHRoZSBhY2NvdW50IG9iamVjdCBpcyBjcmVhdGVkIGF0IHRoZSB0aW1lIG9mIHN1Y2Nlc3NmdWwgbG9naW4pXHJcbiAgICAgKiBvciBudWxsIHdoZW4gbm8gbWF0Y2hpbmcgYWNjb3VudCBpcyBmb3VuZC5cclxuICAgICAqIFRoaXMgQVBJIGlzIHByb3ZpZGVkIGZvciBjb252ZW5pZW5jZSBidXQgZ2V0QWNjb3VudEJ5SWQgc2hvdWxkIGJlIHVzZWQgZm9yIGJlc3QgcmVsaWFiaWxpdHlcclxuICAgICAqIEBwYXJhbSB1c2VyTmFtZVxyXG4gICAgICogQHJldHVybnMgVGhlIGFjY291bnQgb2JqZWN0IHN0b3JlZCBpbiBNU0FMXHJcbiAgICAgKiBAZGVwcmVjYXRlZCAtIFVzZSBnZXRBY2NvdW50IGluc3RlYWRcclxuICAgICAqL1xyXG4gICAgZ2V0QWNjb3VudEJ5VXNlcm5hbWUodXNlck5hbWUpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5jb250cm9sbGVyLmdldEFjY291bnRCeVVzZXJuYW1lKHVzZXJOYW1lKTtcclxuICAgIH1cclxuICAgIC8qKlxyXG4gICAgICogUmV0dXJucyBhbGwgdGhlIGFjY291bnRzIGluIHRoZSBjYWNoZSB0aGF0IG1hdGNoIHRoZSBvcHRpb25hbCBmaWx0ZXIuIElmIG5vIGZpbHRlciBpcyBwcm92aWRlZCwgYWxsIGFjY291bnRzIGFyZSByZXR1cm5lZC5cclxuICAgICAqIEBwYXJhbSBhY2NvdW50RmlsdGVyIC0gKE9wdGlvbmFsKSBmaWx0ZXIgdG8gbmFycm93IGRvd24gdGhlIGFjY291bnRzIHJldHVybmVkXHJcbiAgICAgKiBAcmV0dXJucyBBcnJheSBvZiBBY2NvdW50SW5mbyBvYmplY3RzIGluIGNhY2hlXHJcbiAgICAgKi9cclxuICAgIGdldEFsbEFjY291bnRzKGFjY291bnRGaWx0ZXIpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5jb250cm9sbGVyLmdldEFsbEFjY291bnRzKGFjY291bnRGaWx0ZXIpO1xyXG4gICAgfVxyXG4gICAgLyoqXHJcbiAgICAgKiBFdmVudCBoYW5kbGVyIGZ1bmN0aW9uIHdoaWNoIGFsbG93cyB1c2VycyB0byBmaXJlIGV2ZW50cyBhZnRlciB0aGUgUHVibGljQ2xpZW50QXBwbGljYXRpb24gb2JqZWN0XHJcbiAgICAgKiBoYXMgbG9hZGVkIGR1cmluZyByZWRpcmVjdCBmbG93cy4gVGhpcyBzaG91bGQgYmUgaW52b2tlZCBvbiBhbGwgcGFnZSBsb2FkcyBpbnZvbHZlZCBpbiByZWRpcmVjdFxyXG4gICAgICogYXV0aCBmbG93cy5cclxuICAgICAqIEBwYXJhbSBoYXNoIEhhc2ggdG8gcHJvY2Vzcy4gRGVmYXVsdHMgdG8gdGhlIGN1cnJlbnQgdmFsdWUgb2Ygd2luZG93LmxvY2F0aW9uLmhhc2guIE9ubHkgbmVlZHMgdG8gYmUgcHJvdmlkZWQgZXhwbGljaXRseSBpZiB0aGUgcmVzcG9uc2UgdG8gYmUgaGFuZGxlZCBpcyBub3QgY29udGFpbmVkIGluIHRoZSBjdXJyZW50IHZhbHVlLlxyXG4gICAgICogQHJldHVybnMgVG9rZW4gcmVzcG9uc2Ugb3IgbnVsbC4gSWYgdGhlIHJldHVybiB2YWx1ZSBpcyBudWxsLCB0aGVuIG5vIGF1dGggcmVkaXJlY3Qgd2FzIGRldGVjdGVkLlxyXG4gICAgICovXHJcbiAgICBoYW5kbGVSZWRpcmVjdFByb21pc2UoaGFzaCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmNvbnRyb2xsZXIuaGFuZGxlUmVkaXJlY3RQcm9taXNlKGhhc2gpO1xyXG4gICAgfVxyXG4gICAgLyoqXHJcbiAgICAgKiBVc2Ugd2hlbiBpbml0aWF0aW5nIHRoZSBsb2dpbiBwcm9jZXNzIHZpYSBvcGVuaW5nIGEgcG9wdXAgd2luZG93IGluIHRoZSB1c2VyJ3MgYnJvd3NlclxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSByZXF1ZXN0XHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybnMgQSBwcm9taXNlIHRoYXQgaXMgZnVsZmlsbGVkIHdoZW4gdGhpcyBmdW5jdGlvbiBoYXMgY29tcGxldGVkLCBvciByZWplY3RlZCBpZiBhbiBlcnJvciB3YXMgcmFpc2VkLlxyXG4gICAgICovXHJcbiAgICBsb2dpblBvcHVwKHJlcXVlc3QpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5jb250cm9sbGVyLmxvZ2luUG9wdXAocmVxdWVzdCk7XHJcbiAgICB9XHJcbiAgICAvKipcclxuICAgICAqIFVzZSB3aGVuIGluaXRpYXRpbmcgdGhlIGxvZ2luIHByb2Nlc3MgYnkgcmVkaXJlY3RpbmcgdGhlIHVzZXIncyBicm93c2VyIHRvIHRoZSBhdXRob3JpemF0aW9uIGVuZHBvaW50LiBUaGlzIGZ1bmN0aW9uIHJlZGlyZWN0cyB0aGUgcGFnZSwgc29cclxuICAgICAqIGFueSBjb2RlIHRoYXQgZm9sbG93cyB0aGlzIGZ1bmN0aW9uIHdpbGwgbm90IGV4ZWN1dGUuXHJcbiAgICAgKlxyXG4gICAgICogSU1QT1JUQU5UOiBJdCBpcyBOT1QgcmVjb21tZW5kZWQgdG8gaGF2ZSBjb2RlIHRoYXQgaXMgZGVwZW5kZW50IG9uIHRoZSByZXNvbHV0aW9uIG9mIHRoZSBQcm9taXNlLiBUaGlzIGZ1bmN0aW9uIHdpbGwgbmF2aWdhdGUgYXdheSBmcm9tIHRoZSBjdXJyZW50XHJcbiAgICAgKiBicm93c2VyIHdpbmRvdy4gSXQgY3VycmVudGx5IHJldHVybnMgYSBQcm9taXNlIGluIG9yZGVyIHRvIHJlZmxlY3QgdGhlIGFzeW5jaHJvbm91cyBuYXR1cmUgb2YgdGhlIGNvZGUgcnVubmluZyBpbiB0aGlzIGZ1bmN0aW9uLlxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSByZXF1ZXN0XHJcbiAgICAgKi9cclxuICAgIGxvZ2luUmVkaXJlY3QocmVxdWVzdCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmNvbnRyb2xsZXIubG9naW5SZWRpcmVjdChyZXF1ZXN0KTtcclxuICAgIH1cclxuICAgIC8qKlxyXG4gICAgICogRGVwcmVjYXRlZCBsb2dvdXQgZnVuY3Rpb24uIFVzZSBsb2dvdXRSZWRpcmVjdCBvciBsb2dvdXRQb3B1cCBpbnN0ZWFkXHJcbiAgICAgKiBAcGFyYW0gbG9nb3V0UmVxdWVzdFxyXG4gICAgICogQGRlcHJlY2F0ZWRcclxuICAgICAqL1xyXG4gICAgbG9nb3V0KGxvZ291dFJlcXVlc3QpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5jb250cm9sbGVyLmxvZ291dChsb2dvdXRSZXF1ZXN0KTtcclxuICAgIH1cclxuICAgIC8qKlxyXG4gICAgICogVXNlIHRvIGxvZyBvdXQgdGhlIGN1cnJlbnQgdXNlciwgYW5kIHJlZGlyZWN0IHRoZSB1c2VyIHRvIHRoZSBwb3N0TG9nb3V0UmVkaXJlY3RVcmkuXHJcbiAgICAgKiBEZWZhdWx0IGJlaGF2aW91ciBpcyB0byByZWRpcmVjdCB0aGUgdXNlciB0byBgd2luZG93LmxvY2F0aW9uLmhyZWZgLlxyXG4gICAgICogQHBhcmFtIGxvZ291dFJlcXVlc3RcclxuICAgICAqL1xyXG4gICAgbG9nb3V0UmVkaXJlY3QobG9nb3V0UmVxdWVzdCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmNvbnRyb2xsZXIubG9nb3V0UmVkaXJlY3QobG9nb3V0UmVxdWVzdCk7XHJcbiAgICB9XHJcbiAgICAvKipcclxuICAgICAqIENsZWFycyBsb2NhbCBjYWNoZSBmb3IgdGhlIGN1cnJlbnQgdXNlciB0aGVuIG9wZW5zIGEgcG9wdXAgd2luZG93IHByb21wdGluZyB0aGUgdXNlciB0byBzaWduLW91dCBvZiB0aGUgc2VydmVyXHJcbiAgICAgKiBAcGFyYW0gbG9nb3V0UmVxdWVzdFxyXG4gICAgICovXHJcbiAgICBsb2dvdXRQb3B1cChsb2dvdXRSZXF1ZXN0KSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuY29udHJvbGxlci5sb2dvdXRQb3B1cChsb2dvdXRSZXF1ZXN0KTtcclxuICAgIH1cclxuICAgIC8qKlxyXG4gICAgICogVGhpcyBmdW5jdGlvbiB1c2VzIGEgaGlkZGVuIGlmcmFtZSB0byBmZXRjaCBhbiBhdXRob3JpemF0aW9uIGNvZGUgZnJvbSB0aGUgZVNUUy4gVGhlcmUgYXJlIGNhc2VzIHdoZXJlIHRoaXMgbWF5IG5vdCB3b3JrOlxyXG4gICAgICogLSBBbnkgYnJvd3NlciB1c2luZyBhIGZvcm0gb2YgSW50ZWxsaWdlbnQgVHJhY2tpbmcgUHJldmVudGlvblxyXG4gICAgICogLSBJZiB0aGVyZSBpcyBub3QgYW4gZXN0YWJsaXNoZWQgc2Vzc2lvbiB3aXRoIHRoZSBzZXJ2aWNlXHJcbiAgICAgKlxyXG4gICAgICogSW4gdGhlc2UgY2FzZXMsIHRoZSByZXF1ZXN0IG11c3QgYmUgZG9uZSBpbnNpZGUgYSBwb3B1cCBvciBmdWxsIGZyYW1lIHJlZGlyZWN0LlxyXG4gICAgICpcclxuICAgICAqIEZvciB0aGUgY2FzZXMgd2hlcmUgaW50ZXJhY3Rpb24gaXMgcmVxdWlyZWQsIHlvdSBjYW5ub3Qgc2VuZCBhIHJlcXVlc3Qgd2l0aCBwcm9tcHQ9bm9uZS5cclxuICAgICAqXHJcbiAgICAgKiBJZiB5b3VyIHJlZnJlc2ggdG9rZW4gaGFzIGV4cGlyZWQsIHlvdSBjYW4gdXNlIHRoaXMgZnVuY3Rpb24gdG8gZmV0Y2ggYSBuZXcgc2V0IG9mIHRva2VucyBzaWxlbnRseSBhcyBsb25nIGFzXHJcbiAgICAgKiB5b3Ugc2Vzc2lvbiBvbiB0aGUgc2VydmVyIHN0aWxsIGV4aXN0cy5cclxuICAgICAqIEBwYXJhbSByZXF1ZXN0IHtAbGluayBTc29TaWxlbnRSZXF1ZXN0fVxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm5zIEEgcHJvbWlzZSB0aGF0IGlzIGZ1bGZpbGxlZCB3aGVuIHRoaXMgZnVuY3Rpb24gaGFzIGNvbXBsZXRlZCwgb3IgcmVqZWN0ZWQgaWYgYW4gZXJyb3Igd2FzIHJhaXNlZC5cclxuICAgICAqL1xyXG4gICAgc3NvU2lsZW50KHJlcXVlc3QpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5jb250cm9sbGVyLnNzb1NpbGVudChyZXF1ZXN0KTtcclxuICAgIH1cclxuICAgIC8qKlxyXG4gICAgICogR2V0cyB0aGUgdG9rZW4gY2FjaGUgZm9yIHRoZSBhcHBsaWNhdGlvbi5cclxuICAgICAqL1xyXG4gICAgZ2V0VG9rZW5DYWNoZSgpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5jb250cm9sbGVyLmdldFRva2VuQ2FjaGUoKTtcclxuICAgIH1cclxuICAgIC8qKlxyXG4gICAgICogUmV0dXJucyB0aGUgbG9nZ2VyIGluc3RhbmNlXHJcbiAgICAgKi9cclxuICAgIGdldExvZ2dlcigpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5jb250cm9sbGVyLmdldExvZ2dlcigpO1xyXG4gICAgfVxyXG4gICAgLyoqXHJcbiAgICAgKiBSZXBsYWNlcyB0aGUgZGVmYXVsdCBsb2dnZXIgc2V0IGluIGNvbmZpZ3VyYXRpb25zIHdpdGggbmV3IExvZ2dlciB3aXRoIG5ldyBjb25maWd1cmF0aW9uc1xyXG4gICAgICogQHBhcmFtIGxvZ2dlciBMb2dnZXIgaW5zdGFuY2VcclxuICAgICAqL1xyXG4gICAgc2V0TG9nZ2VyKGxvZ2dlcikge1xyXG4gICAgICAgIHRoaXMuY29udHJvbGxlci5zZXRMb2dnZXIobG9nZ2VyKTtcclxuICAgIH1cclxuICAgIC8qKlxyXG4gICAgICogU2V0cyB0aGUgYWNjb3VudCB0byB1c2UgYXMgdGhlIGFjdGl2ZSBhY2NvdW50LiBJZiBubyBhY2NvdW50IGlzIHBhc3NlZCB0byB0aGUgYWNxdWlyZVRva2VuIEFQSXMsIHRoZW4gTVNBTCB3aWxsIHVzZSB0aGlzIGFjdGl2ZSBhY2NvdW50LlxyXG4gICAgICogQHBhcmFtIGFjY291bnRcclxuICAgICAqL1xyXG4gICAgc2V0QWN0aXZlQWNjb3VudChhY2NvdW50KSB7XHJcbiAgICAgICAgdGhpcy5jb250cm9sbGVyLnNldEFjdGl2ZUFjY291bnQoYWNjb3VudCk7XHJcbiAgICB9XHJcbiAgICAvKipcclxuICAgICAqIEdldHMgdGhlIGN1cnJlbnRseSBhY3RpdmUgYWNjb3VudFxyXG4gICAgICovXHJcbiAgICBnZXRBY3RpdmVBY2NvdW50KCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmNvbnRyb2xsZXIuZ2V0QWN0aXZlQWNjb3VudCgpO1xyXG4gICAgfVxyXG4gICAgLyoqXHJcbiAgICAgKiBDYWxsZWQgYnkgd3JhcHBlciBsaWJyYXJpZXMgKEFuZ3VsYXIgJiBSZWFjdCkgdG8gc2V0IFNLVSBhbmQgVmVyc2lvbiBwYXNzZWQgZG93biB0byB0ZWxlbWV0cnksIGxvZ2dlciwgZXRjLlxyXG4gICAgICogQHBhcmFtIHNrdVxyXG4gICAgICogQHBhcmFtIHZlcnNpb25cclxuICAgICAqL1xyXG4gICAgaW5pdGlhbGl6ZVdyYXBwZXJMaWJyYXJ5KHNrdSwgdmVyc2lvbikge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmNvbnRyb2xsZXIuaW5pdGlhbGl6ZVdyYXBwZXJMaWJyYXJ5KHNrdSwgdmVyc2lvbik7XHJcbiAgICB9XHJcbiAgICAvKipcclxuICAgICAqIFNldHMgbmF2aWdhdGlvbiBjbGllbnRcclxuICAgICAqIEBwYXJhbSBuYXZpZ2F0aW9uQ2xpZW50XHJcbiAgICAgKi9cclxuICAgIHNldE5hdmlnYXRpb25DbGllbnQobmF2aWdhdGlvbkNsaWVudCkge1xyXG4gICAgICAgIHRoaXMuY29udHJvbGxlci5zZXROYXZpZ2F0aW9uQ2xpZW50KG5hdmlnYXRpb25DbGllbnQpO1xyXG4gICAgfVxyXG4gICAgLyoqXHJcbiAgICAgKiBSZXR1cm5zIHRoZSBjb25maWd1cmF0aW9uIG9iamVjdFxyXG4gICAgICogQGludGVybmFsXHJcbiAgICAgKi9cclxuICAgIGdldENvbmZpZ3VyYXRpb24oKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuY29udHJvbGxlci5nZXRDb25maWd1cmF0aW9uKCk7XHJcbiAgICB9XHJcbiAgICAvKipcclxuICAgICAqIEh5ZHJhdGVzIGNhY2hlIHdpdGggdGhlIHRva2VucyBhbmQgYWNjb3VudCBpbiB0aGUgQXV0aGVudGljYXRpb25SZXN1bHQgb2JqZWN0XHJcbiAgICAgKiBAcGFyYW0gcmVzdWx0XHJcbiAgICAgKiBAcGFyYW0gcmVxdWVzdCAtIFRoZSByZXF1ZXN0IG9iamVjdCB0aGF0IHdhcyB1c2VkIHRvIG9idGFpbiB0aGUgQXV0aGVudGljYXRpb25SZXN1bHRcclxuICAgICAqIEByZXR1cm5zXHJcbiAgICAgKi9cclxuICAgIGFzeW5jIGh5ZHJhdGVDYWNoZShyZXN1bHQsIHJlcXVlc3QpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5jb250cm9sbGVyLmh5ZHJhdGVDYWNoZShyZXN1bHQsIHJlcXVlc3QpO1xyXG4gICAgfVxyXG4gICAgLyoqXHJcbiAgICAgKiBDbGVhcnMgdG9rZW5zIGFuZCBhY2NvdW50IGZyb20gdGhlIGJyb3dzZXIgY2FjaGUuXHJcbiAgICAgKiBAcGFyYW0gbG9nb3V0UmVxdWVzdFxyXG4gICAgICovXHJcbiAgICBjbGVhckNhY2hlKGxvZ291dFJlcXVlc3QpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5jb250cm9sbGVyLmNsZWFyQ2FjaGUobG9nb3V0UmVxdWVzdCk7XHJcbiAgICB9XHJcbn1cblxuZXhwb3J0IHsgUHVibGljQ2xpZW50TmV4dCB9O1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9UHVibGljQ2xpZW50TmV4dC5tanMubWFwXG4iLCIvKiEgQGF6dXJlL21zYWwtYnJvd3NlciB2My4yOC4xIDIwMjUtMDEtMTQgKi9cbid1c2Ugc3RyaWN0JztcbmltcG9ydCB7IGNyZWF0ZUJyb3dzZXJDb25maWd1cmF0aW9uQXV0aEVycm9yIH0gZnJvbSAnLi4vZXJyb3IvQnJvd3NlckNvbmZpZ3VyYXRpb25BdXRoRXJyb3IubWpzJztcbmltcG9ydCB7IHN0dWJiZWRQdWJsaWNDbGllbnRBcHBsaWNhdGlvbkNhbGxlZCB9IGZyb20gJy4uL2Vycm9yL0Jyb3dzZXJDb25maWd1cmF0aW9uQXV0aEVycm9yQ29kZXMubWpzJztcblxuLypcclxuICogQ29weXJpZ2h0IChjKSBNaWNyb3NvZnQgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuXHJcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgTGljZW5zZS5cclxuICovXHJcbmNvbnN0IHN0dWJiZWRQdWJsaWNDbGllbnRBcHBsaWNhdGlvbiA9IHtcclxuICAgIGluaXRpYWxpemU6ICgpID0+IHtcclxuICAgICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QoY3JlYXRlQnJvd3NlckNvbmZpZ3VyYXRpb25BdXRoRXJyb3Ioc3R1YmJlZFB1YmxpY0NsaWVudEFwcGxpY2F0aW9uQ2FsbGVkKSk7XHJcbiAgICB9LFxyXG4gICAgYWNxdWlyZVRva2VuUG9wdXA6ICgpID0+IHtcclxuICAgICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QoY3JlYXRlQnJvd3NlckNvbmZpZ3VyYXRpb25BdXRoRXJyb3Ioc3R1YmJlZFB1YmxpY0NsaWVudEFwcGxpY2F0aW9uQ2FsbGVkKSk7XHJcbiAgICB9LFxyXG4gICAgYWNxdWlyZVRva2VuUmVkaXJlY3Q6ICgpID0+IHtcclxuICAgICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QoY3JlYXRlQnJvd3NlckNvbmZpZ3VyYXRpb25BdXRoRXJyb3Ioc3R1YmJlZFB1YmxpY0NsaWVudEFwcGxpY2F0aW9uQ2FsbGVkKSk7XHJcbiAgICB9LFxyXG4gICAgYWNxdWlyZVRva2VuU2lsZW50OiAoKSA9PiB7XHJcbiAgICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KGNyZWF0ZUJyb3dzZXJDb25maWd1cmF0aW9uQXV0aEVycm9yKHN0dWJiZWRQdWJsaWNDbGllbnRBcHBsaWNhdGlvbkNhbGxlZCkpO1xyXG4gICAgfSxcclxuICAgIGFjcXVpcmVUb2tlbkJ5Q29kZTogKCkgPT4ge1xyXG4gICAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdChjcmVhdGVCcm93c2VyQ29uZmlndXJhdGlvbkF1dGhFcnJvcihzdHViYmVkUHVibGljQ2xpZW50QXBwbGljYXRpb25DYWxsZWQpKTtcclxuICAgIH0sXHJcbiAgICBnZXRBbGxBY2NvdW50czogKCkgPT4ge1xyXG4gICAgICAgIHJldHVybiBbXTtcclxuICAgIH0sXHJcbiAgICBnZXRBY2NvdW50OiAoKSA9PiB7XHJcbiAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICB9LFxyXG4gICAgZ2V0QWNjb3VudEJ5SG9tZUlkOiAoKSA9PiB7XHJcbiAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICB9LFxyXG4gICAgZ2V0QWNjb3VudEJ5VXNlcm5hbWU6ICgpID0+IHtcclxuICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgIH0sXHJcbiAgICBnZXRBY2NvdW50QnlMb2NhbElkOiAoKSA9PiB7XHJcbiAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICB9LFxyXG4gICAgaGFuZGxlUmVkaXJlY3RQcm9taXNlOiAoKSA9PiB7XHJcbiAgICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KGNyZWF0ZUJyb3dzZXJDb25maWd1cmF0aW9uQXV0aEVycm9yKHN0dWJiZWRQdWJsaWNDbGllbnRBcHBsaWNhdGlvbkNhbGxlZCkpO1xyXG4gICAgfSxcclxuICAgIGxvZ2luUG9wdXA6ICgpID0+IHtcclxuICAgICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QoY3JlYXRlQnJvd3NlckNvbmZpZ3VyYXRpb25BdXRoRXJyb3Ioc3R1YmJlZFB1YmxpY0NsaWVudEFwcGxpY2F0aW9uQ2FsbGVkKSk7XHJcbiAgICB9LFxyXG4gICAgbG9naW5SZWRpcmVjdDogKCkgPT4ge1xyXG4gICAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdChjcmVhdGVCcm93c2VyQ29uZmlndXJhdGlvbkF1dGhFcnJvcihzdHViYmVkUHVibGljQ2xpZW50QXBwbGljYXRpb25DYWxsZWQpKTtcclxuICAgIH0sXHJcbiAgICBsb2dvdXQ6ICgpID0+IHtcclxuICAgICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QoY3JlYXRlQnJvd3NlckNvbmZpZ3VyYXRpb25BdXRoRXJyb3Ioc3R1YmJlZFB1YmxpY0NsaWVudEFwcGxpY2F0aW9uQ2FsbGVkKSk7XHJcbiAgICB9LFxyXG4gICAgbG9nb3V0UmVkaXJlY3Q6ICgpID0+IHtcclxuICAgICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QoY3JlYXRlQnJvd3NlckNvbmZpZ3VyYXRpb25BdXRoRXJyb3Ioc3R1YmJlZFB1YmxpY0NsaWVudEFwcGxpY2F0aW9uQ2FsbGVkKSk7XHJcbiAgICB9LFxyXG4gICAgbG9nb3V0UG9wdXA6ICgpID0+IHtcclxuICAgICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QoY3JlYXRlQnJvd3NlckNvbmZpZ3VyYXRpb25BdXRoRXJyb3Ioc3R1YmJlZFB1YmxpY0NsaWVudEFwcGxpY2F0aW9uQ2FsbGVkKSk7XHJcbiAgICB9LFxyXG4gICAgc3NvU2lsZW50OiAoKSA9PiB7XHJcbiAgICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KGNyZWF0ZUJyb3dzZXJDb25maWd1cmF0aW9uQXV0aEVycm9yKHN0dWJiZWRQdWJsaWNDbGllbnRBcHBsaWNhdGlvbkNhbGxlZCkpO1xyXG4gICAgfSxcclxuICAgIGFkZEV2ZW50Q2FsbGJhY2s6ICgpID0+IHtcclxuICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgIH0sXHJcbiAgICByZW1vdmVFdmVudENhbGxiYWNrOiAoKSA9PiB7XHJcbiAgICAgICAgcmV0dXJuO1xyXG4gICAgfSxcclxuICAgIGFkZFBlcmZvcm1hbmNlQ2FsbGJhY2s6ICgpID0+IHtcclxuICAgICAgICByZXR1cm4gXCJcIjtcclxuICAgIH0sXHJcbiAgICByZW1vdmVQZXJmb3JtYW5jZUNhbGxiYWNrOiAoKSA9PiB7XHJcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfSxcclxuICAgIGVuYWJsZUFjY291bnRTdG9yYWdlRXZlbnRzOiAoKSA9PiB7XHJcbiAgICAgICAgcmV0dXJuO1xyXG4gICAgfSxcclxuICAgIGRpc2FibGVBY2NvdW50U3RvcmFnZUV2ZW50czogKCkgPT4ge1xyXG4gICAgICAgIHJldHVybjtcclxuICAgIH0sXHJcbiAgICBnZXRUb2tlbkNhY2hlOiAoKSA9PiB7XHJcbiAgICAgICAgdGhyb3cgY3JlYXRlQnJvd3NlckNvbmZpZ3VyYXRpb25BdXRoRXJyb3Ioc3R1YmJlZFB1YmxpY0NsaWVudEFwcGxpY2F0aW9uQ2FsbGVkKTtcclxuICAgIH0sXHJcbiAgICBnZXRMb2dnZXI6ICgpID0+IHtcclxuICAgICAgICB0aHJvdyBjcmVhdGVCcm93c2VyQ29uZmlndXJhdGlvbkF1dGhFcnJvcihzdHViYmVkUHVibGljQ2xpZW50QXBwbGljYXRpb25DYWxsZWQpO1xyXG4gICAgfSxcclxuICAgIHNldExvZ2dlcjogKCkgPT4ge1xyXG4gICAgICAgIHJldHVybjtcclxuICAgIH0sXHJcbiAgICBzZXRBY3RpdmVBY2NvdW50OiAoKSA9PiB7XHJcbiAgICAgICAgcmV0dXJuO1xyXG4gICAgfSxcclxuICAgIGdldEFjdGl2ZUFjY291bnQ6ICgpID0+IHtcclxuICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgIH0sXHJcbiAgICBpbml0aWFsaXplV3JhcHBlckxpYnJhcnk6ICgpID0+IHtcclxuICAgICAgICByZXR1cm47XHJcbiAgICB9LFxyXG4gICAgc2V0TmF2aWdhdGlvbkNsaWVudDogKCkgPT4ge1xyXG4gICAgICAgIHJldHVybjtcclxuICAgIH0sXHJcbiAgICBnZXRDb25maWd1cmF0aW9uOiAoKSA9PiB7XHJcbiAgICAgICAgdGhyb3cgY3JlYXRlQnJvd3NlckNvbmZpZ3VyYXRpb25BdXRoRXJyb3Ioc3R1YmJlZFB1YmxpY0NsaWVudEFwcGxpY2F0aW9uQ2FsbGVkKTtcclxuICAgIH0sXHJcbiAgICBoeWRyYXRlQ2FjaGU6ICgpID0+IHtcclxuICAgICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QoY3JlYXRlQnJvd3NlckNvbmZpZ3VyYXRpb25BdXRoRXJyb3Ioc3R1YmJlZFB1YmxpY0NsaWVudEFwcGxpY2F0aW9uQ2FsbGVkKSk7XHJcbiAgICB9LFxyXG4gICAgY2xlYXJDYWNoZTogKCkgPT4ge1xyXG4gICAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdChjcmVhdGVCcm93c2VyQ29uZmlndXJhdGlvbkF1dGhFcnJvcihzdHViYmVkUHVibGljQ2xpZW50QXBwbGljYXRpb25DYWxsZWQpKTtcclxuICAgIH0sXHJcbn07XG5cbmV4cG9ydCB7IHN0dWJiZWRQdWJsaWNDbGllbnRBcHBsaWNhdGlvbiB9O1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9SVB1YmxpY0NsaWVudEFwcGxpY2F0aW9uLm1qcy5tYXBcbiIsIi8qISBAYXp1cmUvbXNhbC1icm93c2VyIHYzLjI4LjEgMjAyNS0wMS0xNCAqL1xuJ3VzZSBzdHJpY3QnO1xuaW1wb3J0IHsgY3JlYXRlQnJvd3NlckNvbmZpZ3VyYXRpb25BdXRoRXJyb3IgfSBmcm9tICcuLi9lcnJvci9Ccm93c2VyQ29uZmlndXJhdGlvbkF1dGhFcnJvci5tanMnO1xuaW1wb3J0IHsgQnJvd3NlckNhY2hlTG9jYXRpb24gfSBmcm9tICcuLi91dGlscy9Ccm93c2VyQ29uc3RhbnRzLm1qcyc7XG5pbXBvcnQgeyBMb2NhbFN0b3JhZ2UgfSBmcm9tICcuL0xvY2FsU3RvcmFnZS5tanMnO1xuaW1wb3J0IHsgU2Vzc2lvblN0b3JhZ2UgfSBmcm9tICcuL1Nlc3Npb25TdG9yYWdlLm1qcyc7XG5pbXBvcnQgeyBzdG9yYWdlTm90U3VwcG9ydGVkIH0gZnJvbSAnLi4vZXJyb3IvQnJvd3NlckNvbmZpZ3VyYXRpb25BdXRoRXJyb3JDb2Rlcy5tanMnO1xuXG4vKlxyXG4gKiBDb3B5cmlnaHQgKGMpIE1pY3Jvc29mdCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cclxuICogTGljZW5zZWQgdW5kZXIgdGhlIE1JVCBMaWNlbnNlLlxyXG4gKi9cclxuLyoqXHJcbiAqIEBkZXByZWNhdGVkIFRoaXMgY2xhc3Mgd2lsbCBiZSByZW1vdmVkIGluIGEgZnV0dXJlIG1ham9yIHZlcnNpb25cclxuICovXHJcbmNsYXNzIEJyb3dzZXJTdG9yYWdlIHtcclxuICAgIGNvbnN0cnVjdG9yKGNhY2hlTG9jYXRpb24pIHtcclxuICAgICAgICBpZiAoY2FjaGVMb2NhdGlvbiA9PT0gQnJvd3NlckNhY2hlTG9jYXRpb24uTG9jYWxTdG9yYWdlKSB7XHJcbiAgICAgICAgICAgIHRoaXMud2luZG93U3RvcmFnZSA9IG5ldyBMb2NhbFN0b3JhZ2UoKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSBpZiAoY2FjaGVMb2NhdGlvbiA9PT0gQnJvd3NlckNhY2hlTG9jYXRpb24uU2Vzc2lvblN0b3JhZ2UpIHtcclxuICAgICAgICAgICAgdGhpcy53aW5kb3dTdG9yYWdlID0gbmV3IFNlc3Npb25TdG9yYWdlKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICB0aHJvdyBjcmVhdGVCcm93c2VyQ29uZmlndXJhdGlvbkF1dGhFcnJvcihzdG9yYWdlTm90U3VwcG9ydGVkKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBnZXRJdGVtKGtleSkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLndpbmRvd1N0b3JhZ2UuZ2V0SXRlbShrZXkpO1xyXG4gICAgfVxyXG4gICAgc2V0SXRlbShrZXksIHZhbHVlKSB7XHJcbiAgICAgICAgdGhpcy53aW5kb3dTdG9yYWdlLnNldEl0ZW0oa2V5LCB2YWx1ZSk7XHJcbiAgICB9XHJcbiAgICByZW1vdmVJdGVtKGtleSkge1xyXG4gICAgICAgIHRoaXMud2luZG93U3RvcmFnZS5yZW1vdmVJdGVtKGtleSk7XHJcbiAgICB9XHJcbiAgICBnZXRLZXlzKCkge1xyXG4gICAgICAgIHJldHVybiBPYmplY3Qua2V5cyh0aGlzLndpbmRvd1N0b3JhZ2UpO1xyXG4gICAgfVxyXG4gICAgY29udGFpbnNLZXkoa2V5KSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMud2luZG93U3RvcmFnZS5oYXNPd25Qcm9wZXJ0eShrZXkpO1xyXG4gICAgfVxyXG59XG5cbmV4cG9ydCB7IEJyb3dzZXJTdG9yYWdlIH07XG4vLyMgc291cmNlTWFwcGluZ1VSTD1Ccm93c2VyU3RvcmFnZS5tanMubWFwXG4iLCIvKiEgQGF6dXJlL21zYWwtYnJvd3NlciB2My4yOC4xIDIwMjUtMDEtMTQgKi9cbid1c2Ugc3RyaWN0JztcbmltcG9ydCB7IEV2ZW50VHlwZSB9IGZyb20gJy4vRXZlbnRUeXBlLm1qcyc7XG5pbXBvcnQgeyBJbnRlcmFjdGlvblR5cGUsIEludGVyYWN0aW9uU3RhdHVzIH0gZnJvbSAnLi4vdXRpbHMvQnJvd3NlckNvbnN0YW50cy5tanMnO1xuXG4vKlxyXG4gKiBDb3B5cmlnaHQgKGMpIE1pY3Jvc29mdCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cclxuICogTGljZW5zZWQgdW5kZXIgdGhlIE1JVCBMaWNlbnNlLlxyXG4gKi9cclxuY2xhc3MgRXZlbnRNZXNzYWdlVXRpbHMge1xyXG4gICAgLyoqXHJcbiAgICAgKiBHZXRzIGludGVyYWN0aW9uIHN0YXR1cyBmcm9tIGV2ZW50IG1lc3NhZ2VcclxuICAgICAqIEBwYXJhbSBtZXNzYWdlXHJcbiAgICAgKiBAcGFyYW0gY3VycmVudFN0YXR1c1xyXG4gICAgICovXHJcbiAgICBzdGF0aWMgZ2V0SW50ZXJhY3Rpb25TdGF0dXNGcm9tRXZlbnQobWVzc2FnZSwgY3VycmVudFN0YXR1cykge1xyXG4gICAgICAgIHN3aXRjaCAobWVzc2FnZS5ldmVudFR5cGUpIHtcclxuICAgICAgICAgICAgY2FzZSBFdmVudFR5cGUuTE9HSU5fU1RBUlQ6XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gSW50ZXJhY3Rpb25TdGF0dXMuTG9naW47XHJcbiAgICAgICAgICAgIGNhc2UgRXZlbnRUeXBlLlNTT19TSUxFTlRfU1RBUlQ6XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gSW50ZXJhY3Rpb25TdGF0dXMuU3NvU2lsZW50O1xyXG4gICAgICAgICAgICBjYXNlIEV2ZW50VHlwZS5BQ1FVSVJFX1RPS0VOX1NUQVJUOlxyXG4gICAgICAgICAgICAgICAgaWYgKG1lc3NhZ2UuaW50ZXJhY3Rpb25UeXBlID09PSBJbnRlcmFjdGlvblR5cGUuUmVkaXJlY3QgfHxcclxuICAgICAgICAgICAgICAgICAgICBtZXNzYWdlLmludGVyYWN0aW9uVHlwZSA9PT0gSW50ZXJhY3Rpb25UeXBlLlBvcHVwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEludGVyYWN0aW9uU3RhdHVzLkFjcXVpcmVUb2tlbjtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlIEV2ZW50VHlwZS5IQU5ETEVfUkVESVJFQ1RfU1RBUlQ6XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gSW50ZXJhY3Rpb25TdGF0dXMuSGFuZGxlUmVkaXJlY3Q7XHJcbiAgICAgICAgICAgIGNhc2UgRXZlbnRUeXBlLkxPR09VVF9TVEFSVDpcclxuICAgICAgICAgICAgICAgIHJldHVybiBJbnRlcmFjdGlvblN0YXR1cy5Mb2dvdXQ7XHJcbiAgICAgICAgICAgIGNhc2UgRXZlbnRUeXBlLlNTT19TSUxFTlRfU1VDQ0VTUzpcclxuICAgICAgICAgICAgY2FzZSBFdmVudFR5cGUuU1NPX1NJTEVOVF9GQUlMVVJFOlxyXG4gICAgICAgICAgICAgICAgaWYgKGN1cnJlbnRTdGF0dXMgJiZcclxuICAgICAgICAgICAgICAgICAgICBjdXJyZW50U3RhdHVzICE9PSBJbnRlcmFjdGlvblN0YXR1cy5Tc29TaWxlbnQpIHtcclxuICAgICAgICAgICAgICAgICAgICAvLyBQcmV2ZW50IHRoaXMgZXZlbnQgZnJvbSBjbGVhcmluZyBhbnkgc3RhdHVzIG90aGVyIHRoYW4gc3NvU2lsZW50XHJcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gSW50ZXJhY3Rpb25TdGF0dXMuTm9uZTtcclxuICAgICAgICAgICAgY2FzZSBFdmVudFR5cGUuTE9HT1VUX0VORDpcclxuICAgICAgICAgICAgICAgIGlmIChjdXJyZW50U3RhdHVzICYmXHJcbiAgICAgICAgICAgICAgICAgICAgY3VycmVudFN0YXR1cyAhPT0gSW50ZXJhY3Rpb25TdGF0dXMuTG9nb3V0KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgLy8gUHJldmVudCB0aGlzIGV2ZW50IGZyb20gY2xlYXJpbmcgYW55IHN0YXR1cyBvdGhlciB0aGFuIGxvZ291dFxyXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIEludGVyYWN0aW9uU3RhdHVzLk5vbmU7XHJcbiAgICAgICAgICAgIGNhc2UgRXZlbnRUeXBlLkhBTkRMRV9SRURJUkVDVF9FTkQ6XHJcbiAgICAgICAgICAgICAgICBpZiAoY3VycmVudFN0YXR1cyAmJlxyXG4gICAgICAgICAgICAgICAgICAgIGN1cnJlbnRTdGF0dXMgIT09IEludGVyYWN0aW9uU3RhdHVzLkhhbmRsZVJlZGlyZWN0KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgLy8gUHJldmVudCB0aGlzIGV2ZW50IGZyb20gY2xlYXJpbmcgYW55IHN0YXR1cyBvdGhlciB0aGFuIGhhbmRsZVJlZGlyZWN0XHJcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gSW50ZXJhY3Rpb25TdGF0dXMuTm9uZTtcclxuICAgICAgICAgICAgY2FzZSBFdmVudFR5cGUuTE9HSU5fU1VDQ0VTUzpcclxuICAgICAgICAgICAgY2FzZSBFdmVudFR5cGUuTE9HSU5fRkFJTFVSRTpcclxuICAgICAgICAgICAgY2FzZSBFdmVudFR5cGUuQUNRVUlSRV9UT0tFTl9TVUNDRVNTOlxyXG4gICAgICAgICAgICBjYXNlIEV2ZW50VHlwZS5BQ1FVSVJFX1RPS0VOX0ZBSUxVUkU6XHJcbiAgICAgICAgICAgIGNhc2UgRXZlbnRUeXBlLlJFU1RPUkVfRlJPTV9CRkNBQ0hFOlxyXG4gICAgICAgICAgICAgICAgaWYgKG1lc3NhZ2UuaW50ZXJhY3Rpb25UeXBlID09PSBJbnRlcmFjdGlvblR5cGUuUmVkaXJlY3QgfHxcclxuICAgICAgICAgICAgICAgICAgICBtZXNzYWdlLmludGVyYWN0aW9uVHlwZSA9PT0gSW50ZXJhY3Rpb25UeXBlLlBvcHVwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGN1cnJlbnRTdGF0dXMgJiZcclxuICAgICAgICAgICAgICAgICAgICAgICAgY3VycmVudFN0YXR1cyAhPT0gSW50ZXJhY3Rpb25TdGF0dXMuTG9naW4gJiZcclxuICAgICAgICAgICAgICAgICAgICAgICAgY3VycmVudFN0YXR1cyAhPT0gSW50ZXJhY3Rpb25TdGF0dXMuQWNxdWlyZVRva2VuKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIFByZXZlbnQgdGhpcyBldmVudCBmcm9tIGNsZWFyaW5nIGFueSBzdGF0dXMgb3RoZXIgdGhhbiBsb2dpbiBvciBhY3F1aXJlVG9rZW5cclxuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBJbnRlcmFjdGlvblN0YXR1cy5Ob25lO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgfVxyXG59XG5cbmV4cG9ydCB7IEV2ZW50TWVzc2FnZVV0aWxzIH07XG4vLyMgc291cmNlTWFwcGluZ1VSTD1FdmVudE1lc3NhZ2UubWpzLm1hcFxuIiwiLyohIEBhenVyZS9tc2FsLWJyb3dzZXIgdjMuMjguMSAyMDI1LTAxLTE0ICovXG4ndXNlIHN0cmljdCc7XG5pbXBvcnQgeyBDcnlwdG9PcHMgfSBmcm9tICcuL0NyeXB0b09wcy5tanMnO1xuaW1wb3J0IHsgTG9nZ2VyLCBQb3BUb2tlbkdlbmVyYXRvciB9IGZyb20gJ0BhenVyZS9tc2FsLWNvbW1vbi9icm93c2VyJztcbmltcG9ydCB7IG5hbWUsIHZlcnNpb24gfSBmcm9tICcuLi9wYWNrYWdlTWV0YWRhdGEubWpzJztcblxuLypcclxuICogQ29weXJpZ2h0IChjKSBNaWNyb3NvZnQgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuXHJcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgTGljZW5zZS5cclxuICovXHJcbmNsYXNzIFNpZ25lZEh0dHBSZXF1ZXN0IHtcclxuICAgIGNvbnN0cnVjdG9yKHNoclBhcmFtZXRlcnMsIHNock9wdGlvbnMpIHtcclxuICAgICAgICBjb25zdCBsb2dnZXJPcHRpb25zID0gKHNock9wdGlvbnMgJiYgc2hyT3B0aW9ucy5sb2dnZXJPcHRpb25zKSB8fCB7fTtcclxuICAgICAgICB0aGlzLmxvZ2dlciA9IG5ldyBMb2dnZXIobG9nZ2VyT3B0aW9ucywgbmFtZSwgdmVyc2lvbik7XHJcbiAgICAgICAgdGhpcy5jcnlwdG9PcHMgPSBuZXcgQ3J5cHRvT3BzKHRoaXMubG9nZ2VyKTtcclxuICAgICAgICB0aGlzLnBvcFRva2VuR2VuZXJhdG9yID0gbmV3IFBvcFRva2VuR2VuZXJhdG9yKHRoaXMuY3J5cHRvT3BzKTtcclxuICAgICAgICB0aGlzLnNoclBhcmFtZXRlcnMgPSBzaHJQYXJhbWV0ZXJzO1xyXG4gICAgfVxyXG4gICAgLyoqXHJcbiAgICAgKiBHZW5lcmF0ZXMgYW5kIGNhY2hlcyBhIGtleXBhaXIgZm9yIHRoZSBnaXZlbiByZXF1ZXN0IG9wdGlvbnMuXHJcbiAgICAgKiBAcmV0dXJucyBQdWJsaWMga2V5IGRpZ2VzdCwgd2hpY2ggc2hvdWxkIGJlIHNlbnQgdG8gdGhlIHRva2VuIGlzc3Vlci5cclxuICAgICAqL1xyXG4gICAgYXN5bmMgZ2VuZXJhdGVQdWJsaWNLZXlUaHVtYnByaW50KCkge1xyXG4gICAgICAgIGNvbnN0IHsga2lkIH0gPSBhd2FpdCB0aGlzLnBvcFRva2VuR2VuZXJhdG9yLmdlbmVyYXRlS2lkKHRoaXMuc2hyUGFyYW1ldGVycyk7XHJcbiAgICAgICAgcmV0dXJuIGtpZDtcclxuICAgIH1cclxuICAgIC8qKlxyXG4gICAgICogR2VuZXJhdGVzIGEgc2lnbmVkIGh0dHAgcmVxdWVzdCBmb3IgdGhlIGdpdmVuIHBheWxvYWQgd2l0aCB0aGUgZ2l2ZW4ga2V5LlxyXG4gICAgICogQHBhcmFtIHBheWxvYWQgUGF5bG9hZCB0byBzaWduIChlLmcuIGFjY2VzcyB0b2tlbilcclxuICAgICAqIEBwYXJhbSBwdWJsaWNLZXlUaHVtYnByaW50IFB1YmxpYyBrZXkgZGlnZXN0IChmcm9tIGdlbmVyYXRlUHVibGljS2V5VGh1bWJwcmludCBBUEkpXHJcbiAgICAgKiBAcGFyYW0gY2xhaW1zIEFkZGl0aW9uYWwgY2xhaW1zIHRvIGluY2x1ZGUvb3ZlcnJpZGUgaW4gdGhlIHNpZ25lZCBKV1RcclxuICAgICAqIEByZXR1cm5zIFBvcCB0b2tlbiBzaWduZWQgd2l0aCB0aGUgY29ycmVzcG9uZGluZyBwcml2YXRlIGtleVxyXG4gICAgICovXHJcbiAgICBhc3luYyBzaWduUmVxdWVzdChwYXlsb2FkLCBwdWJsaWNLZXlUaHVtYnByaW50LCBjbGFpbXMpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5wb3BUb2tlbkdlbmVyYXRvci5zaWduUGF5bG9hZChwYXlsb2FkLCBwdWJsaWNLZXlUaHVtYnByaW50LCB0aGlzLnNoclBhcmFtZXRlcnMsIGNsYWltcyk7XHJcbiAgICB9XHJcbiAgICAvKipcclxuICAgICAqIFJlbW92ZXMgY2FjaGVkIGtleXMgZnJvbSBicm93c2VyIGZvciBnaXZlbiBwdWJsaWMga2V5IHRodW1icHJpbnRcclxuICAgICAqIEBwYXJhbSBwdWJsaWNLZXlUaHVtYnByaW50IFB1YmxpYyBrZXkgZGlnZXN0IChmcm9tIGdlbmVyYXRlUHVibGljS2V5VGh1bWJwcmludCBBUEkpXHJcbiAgICAgKiBAcmV0dXJucyBJZiBrZXlzIGFyZSBwcm9wZXJseSBkZWxldGVkXHJcbiAgICAgKi9cclxuICAgIGFzeW5jIHJlbW92ZUtleXMocHVibGljS2V5VGh1bWJwcmludCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmNyeXB0b09wcy5yZW1vdmVUb2tlbkJpbmRpbmdLZXkocHVibGljS2V5VGh1bWJwcmludCk7XHJcbiAgICB9XHJcbn1cblxuZXhwb3J0IHsgU2lnbmVkSHR0cFJlcXVlc3QgfTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPVNpZ25lZEh0dHBSZXF1ZXN0Lm1qcy5tYXBcbiIsIi8qISBAYXp1cmUvbXNhbC1jb21tb24gdjE0LjE2LjAgMjAyNC0xMS0wNSAqL1xuJ3VzZSBzdHJpY3QnO1xuaW1wb3J0IHsgSW50RmllbGRzLCBQZXJmb3JtYW5jZUV2ZW50QWJicmV2aWF0aW9ucywgUGVyZm9ybWFuY2VFdmVudFN0YXR1cyB9IGZyb20gJy4vUGVyZm9ybWFuY2VFdmVudC5tanMnO1xuaW1wb3J0IHsgU3R1YlBlcmZvcm1hbmNlTWVhc3VyZW1lbnQgfSBmcm9tICcuL1N0dWJQZXJmb3JtYW5jZUNsaWVudC5tanMnO1xuaW1wb3J0IHsgQXV0aEVycm9yIH0gZnJvbSAnLi4vLi4vZXJyb3IvQXV0aEVycm9yLm1qcyc7XG5pbXBvcnQgeyBDYWNoZUVycm9yIH0gZnJvbSAnLi4vLi4vZXJyb3IvQ2FjaGVFcnJvci5tanMnO1xuaW1wb3J0IHsgU2VydmVyRXJyb3IgfSBmcm9tICcuLi8uLi9lcnJvci9TZXJ2ZXJFcnJvci5tanMnO1xuaW1wb3J0IHsgSW50ZXJhY3Rpb25SZXF1aXJlZEF1dGhFcnJvciB9IGZyb20gJy4uLy4uL2Vycm9yL0ludGVyYWN0aW9uUmVxdWlyZWRBdXRoRXJyb3IubWpzJztcblxuLypcclxuICogQ29weXJpZ2h0IChjKSBNaWNyb3NvZnQgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuXHJcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgTGljZW5zZS5cclxuICovXHJcbi8qKlxyXG4gKiBTdGFydHMgY29udGV4dCBieSBhZGRpbmcgcGF5bG9hZCB0byB0aGUgc3RhY2tcclxuICogQHBhcmFtIGV2ZW50IHtQZXJmb3JtYW5jZUV2ZW50fVxyXG4gKiBAcGFyYW0gYWJicmV2aWF0aW9ucyB7TWFwPHN0cmluZywgc3RyaW5nPn0gZXZlbnQgbmFtZSBhYmJyZXZpYXRpb25zXHJcbiAqIEBwYXJhbSBzdGFjayB7P1BlcmZvcm1hbmNlRXZlbnRTdGFja2VkQ29udGV4dFtdfSBzdGFja1xyXG4gKi9cclxuZnVuY3Rpb24gc3RhcnRDb250ZXh0KGV2ZW50LCBhYmJyZXZpYXRpb25zLCBzdGFjaykge1xyXG4gICAgaWYgKCFzdGFjaykge1xyXG4gICAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIHN0YWNrLnB1c2goe1xyXG4gICAgICAgIG5hbWU6IGFiYnJldmlhdGlvbnMuZ2V0KGV2ZW50Lm5hbWUpIHx8IGV2ZW50Lm5hbWUsXHJcbiAgICB9KTtcclxufVxyXG4vKipcclxuICogRW5kcyBjb250ZXh0IGJ5IHJlbW92aW5nIHBheWxvYWQgZnJvbSB0aGUgc3RhY2sgYW5kIHJldHVybmluZyBwYXJlbnQgb3Igc2VsZiwgaWYgc3RhY2sgaXMgZW1wdHksIHBheWxvYWRcclxuICpcclxuICogQHBhcmFtIGV2ZW50IHtQZXJmb3JtYW5jZUV2ZW50fVxyXG4gKiBAcGFyYW0gYWJicmV2aWF0aW9ucyB7TWFwPHN0cmluZywgc3RyaW5nPn0gZXZlbnQgbmFtZSBhYmJyZXZpYXRpb25zXHJcbiAqIEBwYXJhbSBzdGFjayB7P1BlcmZvcm1hbmNlRXZlbnRTdGFja2VkQ29udGV4dFtdfSBzdGFja1xyXG4gKiBAcGFyYW0gZXJyb3Igez91bmtub3dufSBlcnJvclxyXG4gKi9cclxuZnVuY3Rpb24gZW5kQ29udGV4dChldmVudCwgYWJicmV2aWF0aW9ucywgc3RhY2ssIGVycm9yKSB7XHJcbiAgICBpZiAoIXN0YWNrPy5sZW5ndGgpIHtcclxuICAgICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICBjb25zdCBwZWVrID0gKHN0YWNrKSA9PiB7XHJcbiAgICAgICAgcmV0dXJuIHN0YWNrLmxlbmd0aCA/IHN0YWNrW3N0YWNrLmxlbmd0aCAtIDFdIDogdW5kZWZpbmVkO1xyXG4gICAgfTtcclxuICAgIGNvbnN0IGFiYnJFdmVudE5hbWUgPSBhYmJyZXZpYXRpb25zLmdldChldmVudC5uYW1lKSB8fCBldmVudC5uYW1lO1xyXG4gICAgY29uc3QgdG9wID0gcGVlayhzdGFjayk7XHJcbiAgICBpZiAodG9wPy5uYW1lICE9PSBhYmJyRXZlbnROYW1lKSB7XHJcbiAgICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgY29uc3QgY3VycmVudCA9IHN0YWNrPy5wb3AoKTtcclxuICAgIGlmICghY3VycmVudCkge1xyXG4gICAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIGNvbnN0IGVycm9yQ29kZSA9IGVycm9yIGluc3RhbmNlb2YgQXV0aEVycm9yXHJcbiAgICAgICAgPyBlcnJvci5lcnJvckNvZGVcclxuICAgICAgICA6IGVycm9yIGluc3RhbmNlb2YgRXJyb3JcclxuICAgICAgICAgICAgPyBlcnJvci5uYW1lXHJcbiAgICAgICAgICAgIDogdW5kZWZpbmVkO1xyXG4gICAgY29uc3Qgc3ViRXJyID0gZXJyb3IgaW5zdGFuY2VvZiBBdXRoRXJyb3IgPyBlcnJvci5zdWJFcnJvciA6IHVuZGVmaW5lZDtcclxuICAgIGlmIChlcnJvckNvZGUgJiYgY3VycmVudC5jaGlsZEVyciAhPT0gZXJyb3JDb2RlKSB7XHJcbiAgICAgICAgY3VycmVudC5lcnIgPSBlcnJvckNvZGU7XHJcbiAgICAgICAgaWYgKHN1YkVycikge1xyXG4gICAgICAgICAgICBjdXJyZW50LnN1YkVyciA9IHN1YkVycjtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBkZWxldGUgY3VycmVudC5uYW1lO1xyXG4gICAgZGVsZXRlIGN1cnJlbnQuY2hpbGRFcnI7XHJcbiAgICBjb25zdCBjb250ZXh0ID0ge1xyXG4gICAgICAgIC4uLmN1cnJlbnQsXHJcbiAgICAgICAgZHVyOiBldmVudC5kdXJhdGlvbk1zLFxyXG4gICAgfTtcclxuICAgIGlmICghZXZlbnQuc3VjY2Vzcykge1xyXG4gICAgICAgIGNvbnRleHQuZmFpbCA9IDE7XHJcbiAgICB9XHJcbiAgICBjb25zdCBwYXJlbnQgPSBwZWVrKHN0YWNrKTtcclxuICAgIGlmICghcGFyZW50KSB7XHJcbiAgICAgICAgcmV0dXJuIHsgW2FiYnJFdmVudE5hbWVdOiBjb250ZXh0IH07XHJcbiAgICB9XHJcbiAgICBpZiAoZXJyb3JDb2RlKSB7XHJcbiAgICAgICAgcGFyZW50LmNoaWxkRXJyID0gZXJyb3JDb2RlO1xyXG4gICAgfVxyXG4gICAgbGV0IGNoaWxkTmFtZTtcclxuICAgIGlmICghcGFyZW50W2FiYnJFdmVudE5hbWVdKSB7XHJcbiAgICAgICAgY2hpbGROYW1lID0gYWJickV2ZW50TmFtZTtcclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICAgIGNvbnN0IHNpYmxpbmdzID0gT2JqZWN0LmtleXMocGFyZW50KS5maWx0ZXIoKGtleSkgPT4ga2V5LnN0YXJ0c1dpdGgoYWJickV2ZW50TmFtZSkpLmxlbmd0aDtcclxuICAgICAgICBjaGlsZE5hbWUgPSBgJHthYmJyRXZlbnROYW1lfV8ke3NpYmxpbmdzICsgMX1gO1xyXG4gICAgfVxyXG4gICAgcGFyZW50W2NoaWxkTmFtZV0gPSBjb250ZXh0O1xyXG4gICAgcmV0dXJuIHBhcmVudDtcclxufVxyXG4vKipcclxuICogQWRkcyBlcnJvciBuYW1lIGFuZCBzdGFjayB0cmFjZSB0byB0aGUgdGVsZW1ldHJ5IGV2ZW50XHJcbiAqIEBwYXJhbSBlcnJvciB7RXJyb3J9XHJcbiAqIEBwYXJhbSBsb2dnZXIge0xvZ2dlcn1cclxuICogQHBhcmFtIGV2ZW50IHtQZXJmb3JtYW5jZUV2ZW50fVxyXG4gKiBAcGFyYW0gc3RhY2tNYXhTaXplIHtudW1iZXJ9IG1heCBlcnJvciBzdGFjayBzaXplIHRvIGNhcHR1cmVcclxuICovXHJcbmZ1bmN0aW9uIGFkZEVycm9yKGVycm9yLCBsb2dnZXIsIGV2ZW50LCBzdGFja01heFNpemUgPSA1KSB7XHJcbiAgICBpZiAoIShlcnJvciBpbnN0YW5jZW9mIEVycm9yKSkge1xyXG4gICAgICAgIGxvZ2dlci50cmFjZShcIlBlcmZvcm1hbmNlQ2xpZW50LmFkZEVycm9yU3RhY2s6IElucHV0IGVycm9yIGlzIG5vdCBpbnN0YW5jZSBvZiBFcnJvclwiLCBldmVudC5jb3JyZWxhdGlvbklkKTtcclxuICAgICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICBlbHNlIGlmIChlcnJvciBpbnN0YW5jZW9mIEF1dGhFcnJvcikge1xyXG4gICAgICAgIGV2ZW50LmVycm9yQ29kZSA9IGVycm9yLmVycm9yQ29kZTtcclxuICAgICAgICBldmVudC5zdWJFcnJvckNvZGUgPSBlcnJvci5zdWJFcnJvcjtcclxuICAgICAgICBpZiAoZXJyb3IgaW5zdGFuY2VvZiBTZXJ2ZXJFcnJvciB8fFxyXG4gICAgICAgICAgICBlcnJvciBpbnN0YW5jZW9mIEludGVyYWN0aW9uUmVxdWlyZWRBdXRoRXJyb3IpIHtcclxuICAgICAgICAgICAgZXZlbnQuc2VydmVyRXJyb3JObyA9IGVycm9yLmVycm9yTm87XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIGVsc2UgaWYgKGVycm9yIGluc3RhbmNlb2YgQ2FjaGVFcnJvcikge1xyXG4gICAgICAgIGV2ZW50LmVycm9yQ29kZSA9IGVycm9yLmVycm9yQ29kZTtcclxuICAgICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICBlbHNlIGlmIChldmVudC5lcnJvclN0YWNrPy5sZW5ndGgpIHtcclxuICAgICAgICBsb2dnZXIudHJhY2UoXCJQZXJmb3JtYW5jZUNsaWVudC5hZGRFcnJvclN0YWNrOiBTdGFjayBhbHJlYWR5IGV4aXN0XCIsIGV2ZW50LmNvcnJlbGF0aW9uSWQpO1xyXG4gICAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIGVsc2UgaWYgKCFlcnJvci5zdGFjaz8ubGVuZ3RoKSB7XHJcbiAgICAgICAgbG9nZ2VyLnRyYWNlKFwiUGVyZm9ybWFuY2VDbGllbnQuYWRkRXJyb3JTdGFjazogSW5wdXQgc3RhY2sgaXMgZW1wdHlcIiwgZXZlbnQuY29ycmVsYXRpb25JZCk7XHJcbiAgICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgaWYgKGVycm9yLnN0YWNrKSB7XHJcbiAgICAgICAgZXZlbnQuZXJyb3JTdGFjayA9IGNvbXBhY3RTdGFjayhlcnJvci5zdGFjaywgc3RhY2tNYXhTaXplKTtcclxuICAgIH1cclxuICAgIGV2ZW50LmVycm9yTmFtZSA9IGVycm9yLm5hbWU7XHJcbn1cclxuLyoqXHJcbiAqIENvbXBhY3RzIGVycm9yIHN0YWNrIGludG8gYXJyYXkgYnkgZmV0Y2hpbmcgTiBmaXJzdCBlbnRyaWVzXHJcbiAqIEBwYXJhbSBzdGFjayB7c3RyaW5nfSBlcnJvciBzdGFja1xyXG4gKiBAcGFyYW0gc3RhY2tNYXhTaXplIHtudW1iZXJ9IG1heCBlcnJvciBzdGFjayBzaXplIHRvIGNhcHR1cmVcclxuICogQHJldHVybnMge3N0cmluZ1tdfVxyXG4gKi9cclxuZnVuY3Rpb24gY29tcGFjdFN0YWNrKHN0YWNrLCBzdGFja01heFNpemUpIHtcclxuICAgIGlmIChzdGFja01heFNpemUgPCAwKSB7XHJcbiAgICAgICAgcmV0dXJuIFtdO1xyXG4gICAgfVxyXG4gICAgY29uc3Qgc3RhY2tBcnIgPSBzdGFjay5zcGxpdChcIlxcblwiKSB8fCBbXTtcclxuICAgIGNvbnN0IHJlcyA9IFtdO1xyXG4gICAgLy8gQ2hlY2sgZm9yIGEgaGFuZGZ1bCBvZiBrbm93biwgY29tbW9uIHJ1bnRpbWUgZXJyb3JzIGFuZCBsb2cgdGhlbSAod2l0aCByZWRhY3Rpb24gd2hlcmUgYXBwbGljYWJsZSkuXHJcbiAgICBjb25zdCBmaXJzdExpbmUgPSBzdGFja0FyclswXTtcclxuICAgIGlmIChmaXJzdExpbmUuc3RhcnRzV2l0aChcIlR5cGVFcnJvcjogQ2Fubm90IHJlYWQgcHJvcGVydHlcIikgfHxcclxuICAgICAgICBmaXJzdExpbmUuc3RhcnRzV2l0aChcIlR5cGVFcnJvcjogQ2Fubm90IHJlYWQgcHJvcGVydGllcyBvZlwiKSB8fFxyXG4gICAgICAgIGZpcnN0TGluZS5zdGFydHNXaXRoKFwiVHlwZUVycm9yOiBDYW5ub3Qgc2V0IHByb3BlcnR5XCIpIHx8XHJcbiAgICAgICAgZmlyc3RMaW5lLnN0YXJ0c1dpdGgoXCJUeXBlRXJyb3I6IENhbm5vdCBzZXQgcHJvcGVydGllcyBvZlwiKSB8fFxyXG4gICAgICAgIGZpcnN0TGluZS5lbmRzV2l0aChcImlzIG5vdCBhIGZ1bmN0aW9uXCIpKSB7XHJcbiAgICAgICAgLy8gVGhlc2UgdHlwZXMgb2YgZXJyb3JzIGFyZSBub3QgYXQgcmlzayBvZiBsZWFraW5nIFBJSS4gVGhleSB3aWxsIGluZGljYXRlIHVuYXZhaWxhYmxlIEFQSXNcclxuICAgICAgICByZXMucHVzaChjb21wYWN0U3RhY2tMaW5lKGZpcnN0TGluZSkpO1xyXG4gICAgfVxyXG4gICAgZWxzZSBpZiAoZmlyc3RMaW5lLnN0YXJ0c1dpdGgoXCJTeW50YXhFcnJvclwiKSB8fFxyXG4gICAgICAgIGZpcnN0TGluZS5zdGFydHNXaXRoKFwiVHlwZUVycm9yXCIpKSB7XHJcbiAgICAgICAgLy8gUHJldmVudCB1bmludGVudGlvbmFsIGxlYWtpbmcgb2YgYXJiaXRyYXJ5IGluZm8gYnkgcmVkYWN0aW5nIGNvbnRlbnRzIGJldHdlZW4gYm90aCBzaW5nbGUgYW5kIGRvdWJsZSBxdW90ZXNcclxuICAgICAgICByZXMucHVzaChjb21wYWN0U3RhY2tMaW5lKFxyXG4gICAgICAgIC8vIEV4YW1wbGU6IFN5bnRheEVycm9yOiBVbmV4cGVjdGVkIHRva2VuICdlJywgXCJ0ZXN0XCIgaXMgbm90IHZhbGlkIEpTT04gLT4gU3ludGF4RXJyb3I6IFVuZXhwZWN0ZWQgdG9rZW4gPHJlZGFjdGVkPiwgPHJlZGFjdGVkPiBpcyBub3QgdmFsaWQgSlNPTlxyXG4gICAgICAgIGZpcnN0TGluZS5yZXBsYWNlKC9bJ10uKlsnXXxbXCJdLipbXCJdL2csIFwiPHJlZGFjdGVkPlwiKSkpO1xyXG4gICAgfVxyXG4gICAgLy8gR2V0IHRvcCBOIHN0YWNrIGxpbmVzXHJcbiAgICBmb3IgKGxldCBpeCA9IDE7IGl4IDwgc3RhY2tBcnIubGVuZ3RoOyBpeCsrKSB7XHJcbiAgICAgICAgaWYgKHJlcy5sZW5ndGggPj0gc3RhY2tNYXhTaXplKSB7XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjb25zdCBsaW5lID0gc3RhY2tBcnJbaXhdO1xyXG4gICAgICAgIHJlcy5wdXNoKGNvbXBhY3RTdGFja0xpbmUobGluZSkpO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHJlcztcclxufVxyXG4vKipcclxuICogQ29tcGFjdHMgZXJyb3Igc3RhY2sgbGluZSBieSBzaG9ydGVuaW5nIGZpbGUgcGF0aFxyXG4gKiBFeGFtcGxlOiBodHRwczovL2xvY2FsaG9zdC9tc2FsLWNvbW1vbi9zcmMvYXV0aG9yaXR5L0F1dGhvcml0eS5qczoxMDA6MSAtPiBBdXRob3JpdHkuanM6MTAwOjFcclxuICogQHBhcmFtIGxpbmUge3N0cmluZ30gc3RhY2sgbGluZVxyXG4gKiBAcmV0dXJucyB7c3RyaW5nfVxyXG4gKi9cclxuZnVuY3Rpb24gY29tcGFjdFN0YWNrTGluZShsaW5lKSB7XHJcbiAgICBjb25zdCBmaWxlUGF0aEl4ID0gbGluZS5sYXN0SW5kZXhPZihcIiBcIikgKyAxO1xyXG4gICAgaWYgKGZpbGVQYXRoSXggPCAxKSB7XHJcbiAgICAgICAgcmV0dXJuIGxpbmU7XHJcbiAgICB9XHJcbiAgICBjb25zdCBmaWxlUGF0aCA9IGxpbmUuc3Vic3RyaW5nKGZpbGVQYXRoSXgpO1xyXG4gICAgbGV0IGZpbGVOYW1lSXggPSBmaWxlUGF0aC5sYXN0SW5kZXhPZihcIi9cIik7XHJcbiAgICBmaWxlTmFtZUl4ID0gZmlsZU5hbWVJeCA8IDAgPyBmaWxlUGF0aC5sYXN0SW5kZXhPZihcIlxcXFxcIikgOiBmaWxlTmFtZUl4O1xyXG4gICAgaWYgKGZpbGVOYW1lSXggPj0gMCkge1xyXG4gICAgICAgIHJldHVybiAobGluZS5zdWJzdHJpbmcoMCwgZmlsZVBhdGhJeCkgK1xyXG4gICAgICAgICAgICBcIihcIiArXHJcbiAgICAgICAgICAgIGZpbGVQYXRoLnN1YnN0cmluZyhmaWxlTmFtZUl4ICsgMSkgK1xyXG4gICAgICAgICAgICAoZmlsZVBhdGguY2hhckF0KGZpbGVQYXRoLmxlbmd0aCAtIDEpID09PSBcIilcIiA/IFwiXCIgOiBcIilcIikpLnRyaW1TdGFydCgpO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIGxpbmUudHJpbVN0YXJ0KCk7XHJcbn1cclxuY2xhc3MgUGVyZm9ybWFuY2VDbGllbnQge1xyXG4gICAgLyoqXHJcbiAgICAgKiBDcmVhdGVzIGFuIGluc3RhbmNlIG9mIFBlcmZvcm1hbmNlQ2xpZW50LFxyXG4gICAgICogYW4gYWJzdHJhY3QgY2xhc3MgY29udGFpbmluZyBjb3JlIHBlcmZvcm1hbmNlIHRlbGVtZXRyeSBsb2dpYy5cclxuICAgICAqXHJcbiAgICAgKiBAY29uc3RydWN0b3JcclxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBjbGllbnRJZCBDbGllbnQgSUQgb2YgdGhlIGFwcGxpY2F0aW9uXHJcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gYXV0aG9yaXR5IEF1dGhvcml0eSB1c2VkIGJ5IHRoZSBhcHBsaWNhdGlvblxyXG4gICAgICogQHBhcmFtIHtMb2dnZXJ9IGxvZ2dlciBMb2dnZXIgdXNlZCBieSB0aGUgYXBwbGljYXRpb25cclxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBsaWJyYXJ5TmFtZSBOYW1lIG9mIHRoZSBsaWJyYXJ5XHJcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gbGlicmFyeVZlcnNpb24gVmVyc2lvbiBvZiB0aGUgbGlicmFyeVxyXG4gICAgICogQHBhcmFtIHtBcHBsaWNhdGlvblRlbGVtZXRyeX0gYXBwbGljYXRpb25UZWxlbWV0cnkgYXBwbGljYXRpb24gbmFtZSBhbmQgdmVyc2lvblxyXG4gICAgICogQHBhcmFtIHtTZXQ8U3RyaW5nPn0gaW50RmllbGRzIGludGVnZXIgZmllbGRzIHRvIGJlIHRydW5jYXRlZFxyXG4gICAgICogQHBhcmFtIHtNYXA8c3RyaW5nLCBzdHJpbmc+fSBhYmJyZXZpYXRpb25zIGV2ZW50IG5hbWUgYWJicmV2aWF0aW9uc1xyXG4gICAgICovXHJcbiAgICBjb25zdHJ1Y3RvcihjbGllbnRJZCwgYXV0aG9yaXR5LCBsb2dnZXIsIGxpYnJhcnlOYW1lLCBsaWJyYXJ5VmVyc2lvbiwgYXBwbGljYXRpb25UZWxlbWV0cnksIGludEZpZWxkcywgYWJicmV2aWF0aW9ucykge1xyXG4gICAgICAgIHRoaXMuYXV0aG9yaXR5ID0gYXV0aG9yaXR5O1xyXG4gICAgICAgIHRoaXMubGlicmFyeU5hbWUgPSBsaWJyYXJ5TmFtZTtcclxuICAgICAgICB0aGlzLmxpYnJhcnlWZXJzaW9uID0gbGlicmFyeVZlcnNpb247XHJcbiAgICAgICAgdGhpcy5hcHBsaWNhdGlvblRlbGVtZXRyeSA9IGFwcGxpY2F0aW9uVGVsZW1ldHJ5O1xyXG4gICAgICAgIHRoaXMuY2xpZW50SWQgPSBjbGllbnRJZDtcclxuICAgICAgICB0aGlzLmxvZ2dlciA9IGxvZ2dlcjtcclxuICAgICAgICB0aGlzLmNhbGxiYWNrcyA9IG5ldyBNYXAoKTtcclxuICAgICAgICB0aGlzLmV2ZW50c0J5Q29ycmVsYXRpb25JZCA9IG5ldyBNYXAoKTtcclxuICAgICAgICB0aGlzLmV2ZW50U3RhY2sgPSBuZXcgTWFwKCk7XHJcbiAgICAgICAgdGhpcy5xdWV1ZU1lYXN1cmVtZW50cyA9IG5ldyBNYXAoKTtcclxuICAgICAgICB0aGlzLnByZVF1ZXVlVGltZUJ5Q29ycmVsYXRpb25JZCA9IG5ldyBNYXAoKTtcclxuICAgICAgICB0aGlzLmludEZpZWxkcyA9IGludEZpZWxkcyB8fCBuZXcgU2V0KCk7XHJcbiAgICAgICAgZm9yIChjb25zdCBpdGVtIG9mIEludEZpZWxkcykge1xyXG4gICAgICAgICAgICB0aGlzLmludEZpZWxkcy5hZGQoaXRlbSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuYWJicmV2aWF0aW9ucyA9IGFiYnJldmlhdGlvbnMgfHwgbmV3IE1hcCgpO1xyXG4gICAgICAgIGZvciAoY29uc3QgW2tleSwgdmFsdWVdIG9mIFBlcmZvcm1hbmNlRXZlbnRBYmJyZXZpYXRpb25zKSB7XHJcbiAgICAgICAgICAgIHRoaXMuYWJicmV2aWF0aW9ucy5zZXQoa2V5LCB2YWx1ZSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgLyoqXHJcbiAgICAgKiBTdGFydHMgYW5kIHJldHVybnMgYW4gcGxhdGZvcm0tc3BlY2lmaWMgaW1wbGVtZW50YXRpb24gb2YgSVBlcmZvcm1hbmNlTWVhc3VyZW1lbnQuXHJcbiAgICAgKiBOb3RlOiB0aGlzIGZ1bmN0aW9uIGNhbiBiZSBjaGFuZ2VkIHRvIGFic3RyYWN0IGF0IHRoZSBuZXh0IG1ham9yIHZlcnNpb24gYnVtcC5cclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gbWVhc3VyZU5hbWVcclxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBjb3JyZWxhdGlvbklkXHJcbiAgICAgKiBAcmV0dXJucyB7SVBlcmZvcm1hbmNlTWVhc3VyZW1lbnR9XHJcbiAgICAgKiBAZGVwcmVjYXRlZCBUaGlzIG1ldGhvZCB3aWxsIGJlIHJlbW92ZWQgaW4gdGhlIG5leHQgbWFqb3IgdmVyc2lvblxyXG4gICAgICovXHJcbiAgICBzdGFydFBlcmZvcm1hbmNlTWVhc3VyZW1lbnQobWVhc3VyZU5hbWUsIC8vIGVzbGludC1kaXNhYmxlLWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVudXNlZC12YXJzXHJcbiAgICBjb3JyZWxhdGlvbklkIC8vIGVzbGludC1kaXNhYmxlLWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVudXNlZC12YXJzXHJcbiAgICApIHtcclxuICAgICAgICByZXR1cm4ge307XHJcbiAgICB9XHJcbiAgICAvKipcclxuICAgICAqIEdldHMgbWFwIG9mIHByZS1xdWV1ZSB0aW1lcyBieSBjb3JyZWxhdGlvbiBJZFxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7UGVyZm9ybWFuY2VFdmVudHN9IGV2ZW50TmFtZVxyXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IGNvcnJlbGF0aW9uSWRcclxuICAgICAqIEByZXR1cm5zIHtudW1iZXJ9XHJcbiAgICAgKi9cclxuICAgIGdldFByZVF1ZXVlVGltZShldmVudE5hbWUsIGNvcnJlbGF0aW9uSWQpIHtcclxuICAgICAgICBjb25zdCBwcmVRdWV1ZUV2ZW50ID0gdGhpcy5wcmVRdWV1ZVRpbWVCeUNvcnJlbGF0aW9uSWQuZ2V0KGNvcnJlbGF0aW9uSWQpO1xyXG4gICAgICAgIGlmICghcHJlUXVldWVFdmVudCkge1xyXG4gICAgICAgICAgICB0aGlzLmxvZ2dlci50cmFjZShgUGVyZm9ybWFuY2VDbGllbnQuZ2V0UHJlUXVldWVUaW1lOiBubyBwcmUtcXVldWUgdGltZXMgZm91bmQgZm9yIGNvcnJlbGF0aW9uSWQ6ICR7Y29ycmVsYXRpb25JZH0sIHVuYWJsZSB0byBhZGQgcXVldWUgbWVhc3VyZW1lbnRgKTtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIGlmIChwcmVRdWV1ZUV2ZW50Lm5hbWUgIT09IGV2ZW50TmFtZSkge1xyXG4gICAgICAgICAgICB0aGlzLmxvZ2dlci50cmFjZShgUGVyZm9ybWFuY2VDbGllbnQuZ2V0UHJlUXVldWVUaW1lOiBubyBwcmUtcXVldWUgdGltZSBmb3VuZCBmb3IgJHtldmVudE5hbWV9LCB1bmFibGUgdG8gYWRkIHF1ZXVlIG1lYXN1cmVtZW50YCk7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHByZVF1ZXVlRXZlbnQudGltZTtcclxuICAgIH1cclxuICAgIC8qKlxyXG4gICAgICogQ2FsY3VsYXRlcyB0aGUgZGlmZmVyZW5jZSBiZXR3ZWVuIGN1cnJlbnQgdGltZSBhbmQgdGltZSB3aGVuIGZ1bmN0aW9uIHdhcyBxdWV1ZWQuXHJcbiAgICAgKiBOb3RlOiBJdCBpcyBwb3NzaWJsZSB0byBoYXZlIDAgYXMgdGhlIHF1ZXVlIHRpbWUgaWYgdGhlIGN1cnJlbnQgdGltZSBhbmQgdGhlIHF1ZXVlZCB0aW1lIHdhcyB0aGUgc2FtZS5cclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gcHJlUXVldWVUaW1lXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gY3VycmVudFRpbWVcclxuICAgICAqIEByZXR1cm5zIHtudW1iZXJ9XHJcbiAgICAgKi9cclxuICAgIGNhbGN1bGF0ZVF1ZXVlZFRpbWUocHJlUXVldWVUaW1lLCBjdXJyZW50VGltZSkge1xyXG4gICAgICAgIGlmIChwcmVRdWV1ZVRpbWUgPCAxKSB7XHJcbiAgICAgICAgICAgIHRoaXMubG9nZ2VyLnRyYWNlKGBQZXJmb3JtYW5jZUNsaWVudDogcHJlUXVldWVUaW1lIHNob3VsZCBiZSBhIHBvc2l0aXZlIGludGVnZXIgYW5kIG5vdCAke3ByZVF1ZXVlVGltZX1gKTtcclxuICAgICAgICAgICAgcmV0dXJuIDA7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChjdXJyZW50VGltZSA8IDEpIHtcclxuICAgICAgICAgICAgdGhpcy5sb2dnZXIudHJhY2UoYFBlcmZvcm1hbmNlQ2xpZW50OiBjdXJyZW50VGltZSBzaG91bGQgYmUgYSBwb3NpdGl2ZSBpbnRlZ2VyIGFuZCBub3QgJHtjdXJyZW50VGltZX1gKTtcclxuICAgICAgICAgICAgcmV0dXJuIDA7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChjdXJyZW50VGltZSA8IHByZVF1ZXVlVGltZSkge1xyXG4gICAgICAgICAgICB0aGlzLmxvZ2dlci50cmFjZShcIlBlcmZvcm1hbmNlQ2xpZW50OiBjdXJyZW50VGltZSBpcyBsZXNzIHRoYW4gcHJlUXVldWVUaW1lLCBjaGVjayBob3cgdGltZSBpcyBiZWluZyByZXRyaWV2ZWRcIik7XHJcbiAgICAgICAgICAgIHJldHVybiAwO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gY3VycmVudFRpbWUgLSBwcmVRdWV1ZVRpbWU7XHJcbiAgICB9XHJcbiAgICAvKipcclxuICAgICAqIEFkZHMgcXVldWUgbWVhc3VyZW1lbnQgdGltZSB0byBRdWV1ZU1lYXN1cmVtZW50cyBhcnJheSBmb3IgZ2l2ZW4gY29ycmVsYXRpb24gSUQuXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtQZXJmb3JtYW5jZUV2ZW50c30gZXZlbnROYW1lXHJcbiAgICAgKiBAcGFyYW0gez9zdHJpbmd9IGNvcnJlbGF0aW9uSWRcclxuICAgICAqIEBwYXJhbSB7P251bWJlcn0gcXVldWVUaW1lXHJcbiAgICAgKiBAcGFyYW0gez9ib29sZWFufSBtYW51YWxseUNvbXBsZXRlZCAtIGluZGljYXRvciBmb3IgbWFudWFsbHkgY29tcGxldGVkIHF1ZXVlIG1lYXN1cmVtZW50c1xyXG4gICAgICogQHJldHVybnNcclxuICAgICAqL1xyXG4gICAgYWRkUXVldWVNZWFzdXJlbWVudChldmVudE5hbWUsIGNvcnJlbGF0aW9uSWQsIHF1ZXVlVGltZSwgbWFudWFsbHlDb21wbGV0ZWQpIHtcclxuICAgICAgICBpZiAoIWNvcnJlbGF0aW9uSWQpIHtcclxuICAgICAgICAgICAgdGhpcy5sb2dnZXIudHJhY2UoYFBlcmZvcm1hbmNlQ2xpZW50LmFkZFF1ZXVlTWVhc3VyZW1lbnQ6IGNvcnJlbGF0aW9uSWQgbm90IHByb3ZpZGVkIGZvciAke2V2ZW50TmFtZX0sIGNhbm5vdCBhZGQgcXVldWUgbWVhc3VyZW1lbnRgKTtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAocXVldWVUaW1lID09PSAwKSB7XHJcbiAgICAgICAgICAgIC8vIFBvc3NpYmxlIGZvciB0aGVyZSB0byBiZSBubyBxdWV1ZSB0aW1lIGFmdGVyIGNhbGN1bGF0aW9uXHJcbiAgICAgICAgICAgIHRoaXMubG9nZ2VyLnRyYWNlKGBQZXJmb3JtYW5jZUNsaWVudC5hZGRRdWV1ZU1lYXN1cmVtZW50OiBxdWV1ZSB0aW1lIHByb3ZpZGVkIGZvciAke2V2ZW50TmFtZX0gaXMgJHtxdWV1ZVRpbWV9YCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2UgaWYgKCFxdWV1ZVRpbWUpIHtcclxuICAgICAgICAgICAgdGhpcy5sb2dnZXIudHJhY2UoYFBlcmZvcm1hbmNlQ2xpZW50LmFkZFF1ZXVlTWVhc3VyZW1lbnQ6IG5vIHF1ZXVlIHRpbWUgcHJvdmlkZWQgZm9yICR7ZXZlbnROYW1lfWApO1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNvbnN0IHF1ZXVlTWVhc3VyZW1lbnQgPSB7XHJcbiAgICAgICAgICAgIGV2ZW50TmFtZSxcclxuICAgICAgICAgICAgLy8gQWx3YXlzIGRlZmF1bHQgcXVldWUgdGltZSB0byAwIGZvciBtYW51YWxseSBjb21wbGV0ZWQgKGltcHJvcGVybHkgaW5zdHJ1bWVudGVkKVxyXG4gICAgICAgICAgICBxdWV1ZVRpbWU6IG1hbnVhbGx5Q29tcGxldGVkID8gMCA6IHF1ZXVlVGltZSxcclxuICAgICAgICAgICAgbWFudWFsbHlDb21wbGV0ZWQsXHJcbiAgICAgICAgfTtcclxuICAgICAgICAvLyBBZGRzIHRvIGV4aXN0aW5nIGNvcnJlbGF0aW9uIElkIGlmIHByZXNlbnQgaW4gcXVldWVNZWFzdXJlbWVudHNcclxuICAgICAgICBjb25zdCBleGlzdGluZ01lYXN1cmVtZW50cyA9IHRoaXMucXVldWVNZWFzdXJlbWVudHMuZ2V0KGNvcnJlbGF0aW9uSWQpO1xyXG4gICAgICAgIGlmIChleGlzdGluZ01lYXN1cmVtZW50cykge1xyXG4gICAgICAgICAgICBleGlzdGluZ01lYXN1cmVtZW50cy5wdXNoKHF1ZXVlTWVhc3VyZW1lbnQpO1xyXG4gICAgICAgICAgICB0aGlzLnF1ZXVlTWVhc3VyZW1lbnRzLnNldChjb3JyZWxhdGlvbklkLCBleGlzdGluZ01lYXN1cmVtZW50cyk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAvLyBTZXRzIG5ldyBjb3JyZWxhdGlvbiBJZCBpZiBub3QgcHJlc2VudCBpbiBxdWV1ZU1lYXN1cmVtZW50c1xyXG4gICAgICAgICAgICB0aGlzLmxvZ2dlci50cmFjZShgUGVyZm9ybWFuY2VDbGllbnQuYWRkUXVldWVNZWFzdXJlbWVudDogYWRkaW5nIGNvcnJlbGF0aW9uSWQgJHtjb3JyZWxhdGlvbklkfSB0byBxdWV1ZSBtZWFzdXJlbWVudHNgKTtcclxuICAgICAgICAgICAgY29uc3QgbWVhc3VyZW1lbnRBcnJheSA9IFtxdWV1ZU1lYXN1cmVtZW50XTtcclxuICAgICAgICAgICAgdGhpcy5xdWV1ZU1lYXN1cmVtZW50cy5zZXQoY29ycmVsYXRpb25JZCwgbWVhc3VyZW1lbnRBcnJheSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIC8vIERlbGV0ZSBwcm9jZXNzZWQgcHJlLXF1ZXVlIGV2ZW50LlxyXG4gICAgICAgIHRoaXMucHJlUXVldWVUaW1lQnlDb3JyZWxhdGlvbklkLmRlbGV0ZShjb3JyZWxhdGlvbklkKTtcclxuICAgIH1cclxuICAgIC8qKlxyXG4gICAgICogU3RhcnRzIG1lYXN1cmluZyBwZXJmb3JtYW5jZSBmb3IgYSBnaXZlbiBvcGVyYXRpb24uIFJldHVybnMgYSBmdW5jdGlvbiB0aGF0IHNob3VsZCBiZSB1c2VkIHRvIGVuZCB0aGUgbWVhc3VyZW1lbnQuXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtQZXJmb3JtYW5jZUV2ZW50c30gbWVhc3VyZU5hbWVcclxuICAgICAqIEBwYXJhbSB7P3N0cmluZ30gW2NvcnJlbGF0aW9uSWRdXHJcbiAgICAgKiBAcmV0dXJucyB7SW5Qcm9ncmVzc1BlcmZvcm1hbmNlRXZlbnR9XHJcbiAgICAgKi9cclxuICAgIHN0YXJ0TWVhc3VyZW1lbnQobWVhc3VyZU5hbWUsIGNvcnJlbGF0aW9uSWQpIHtcclxuICAgICAgICAvLyBHZW5lcmF0ZSBhIHBsYWNlaG9sZGVyIGNvcnJlbGF0aW9uIGlmIHRoZSByZXF1ZXN0IGRvZXMgbm90IHByb3ZpZGUgb25lXHJcbiAgICAgICAgY29uc3QgZXZlbnRDb3JyZWxhdGlvbklkID0gY29ycmVsYXRpb25JZCB8fCB0aGlzLmdlbmVyYXRlSWQoKTtcclxuICAgICAgICBpZiAoIWNvcnJlbGF0aW9uSWQpIHtcclxuICAgICAgICAgICAgdGhpcy5sb2dnZXIuaW5mbyhgUGVyZm9ybWFuY2VDbGllbnQ6IE5vIGNvcnJlbGF0aW9uIGlkIHByb3ZpZGVkIGZvciAke21lYXN1cmVOYW1lfSwgZ2VuZXJhdGluZ2AsIGV2ZW50Q29ycmVsYXRpb25JZCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMubG9nZ2VyLnRyYWNlKGBQZXJmb3JtYW5jZUNsaWVudDogUGVyZm9ybWFuY2UgbWVhc3VyZW1lbnQgc3RhcnRlZCBmb3IgJHttZWFzdXJlTmFtZX1gLCBldmVudENvcnJlbGF0aW9uSWQpO1xyXG4gICAgICAgIGNvbnN0IGluUHJvZ3Jlc3NFdmVudCA9IHtcclxuICAgICAgICAgICAgZXZlbnRJZDogdGhpcy5nZW5lcmF0ZUlkKCksXHJcbiAgICAgICAgICAgIHN0YXR1czogUGVyZm9ybWFuY2VFdmVudFN0YXR1cy5JblByb2dyZXNzLFxyXG4gICAgICAgICAgICBhdXRob3JpdHk6IHRoaXMuYXV0aG9yaXR5LFxyXG4gICAgICAgICAgICBsaWJyYXJ5TmFtZTogdGhpcy5saWJyYXJ5TmFtZSxcclxuICAgICAgICAgICAgbGlicmFyeVZlcnNpb246IHRoaXMubGlicmFyeVZlcnNpb24sXHJcbiAgICAgICAgICAgIGNsaWVudElkOiB0aGlzLmNsaWVudElkLFxyXG4gICAgICAgICAgICBuYW1lOiBtZWFzdXJlTmFtZSxcclxuICAgICAgICAgICAgc3RhcnRUaW1lTXM6IERhdGUubm93KCksXHJcbiAgICAgICAgICAgIGNvcnJlbGF0aW9uSWQ6IGV2ZW50Q29ycmVsYXRpb25JZCxcclxuICAgICAgICAgICAgYXBwTmFtZTogdGhpcy5hcHBsaWNhdGlvblRlbGVtZXRyeT8uYXBwTmFtZSxcclxuICAgICAgICAgICAgYXBwVmVyc2lvbjogdGhpcy5hcHBsaWNhdGlvblRlbGVtZXRyeT8uYXBwVmVyc2lvbixcclxuICAgICAgICB9O1xyXG4gICAgICAgIC8vIFN0b3JlIGluIHByb2dyZXNzIGV2ZW50cyBzbyB0aGV5IGNhbiBiZSBkaXNjYXJkZWQgaWYgbm90IGVuZGVkIHByb3Blcmx5XHJcbiAgICAgICAgdGhpcy5jYWNoZUV2ZW50QnlDb3JyZWxhdGlvbklkKGluUHJvZ3Jlc3NFdmVudCk7XHJcbiAgICAgICAgc3RhcnRDb250ZXh0KGluUHJvZ3Jlc3NFdmVudCwgdGhpcy5hYmJyZXZpYXRpb25zLCB0aGlzLmV2ZW50U3RhY2suZ2V0KGV2ZW50Q29ycmVsYXRpb25JZCkpO1xyXG4gICAgICAgIC8vIFJldHVybiB0aGUgZXZlbnQgYW5kIGZ1bmN0aW9ucyB0aGUgY2FsbGVyIGNhbiB1c2UgdG8gcHJvcGVybHkgZW5kL2ZsdXNoIHRoZSBtZWFzdXJlbWVudFxyXG4gICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgIGVuZDogKGV2ZW50LCBlcnJvcikgPT4ge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuZW5kTWVhc3VyZW1lbnQoe1xyXG4gICAgICAgICAgICAgICAgICAgIC8vIEluaXRpYWwgc2V0IG9mIGV2ZW50IHByb3BlcnRpZXNcclxuICAgICAgICAgICAgICAgICAgICAuLi5pblByb2dyZXNzRXZlbnQsXHJcbiAgICAgICAgICAgICAgICAgICAgLy8gUHJvcGVydGllcyBzZXQgd2hlbiBldmVudCBlbmRzXHJcbiAgICAgICAgICAgICAgICAgICAgLi4uZXZlbnQsXHJcbiAgICAgICAgICAgICAgICB9LCBlcnJvcik7XHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIGRpc2NhcmQ6ICgpID0+IHtcclxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmRpc2NhcmRNZWFzdXJlbWVudHMoaW5Qcm9ncmVzc0V2ZW50LmNvcnJlbGF0aW9uSWQpO1xyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICBhZGQ6IChmaWVsZHMpID0+IHtcclxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmFkZEZpZWxkcyhmaWVsZHMsIGluUHJvZ3Jlc3NFdmVudC5jb3JyZWxhdGlvbklkKTtcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgaW5jcmVtZW50OiAoZmllbGRzKSA9PiB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5pbmNyZW1lbnRGaWVsZHMoZmllbGRzLCBpblByb2dyZXNzRXZlbnQuY29ycmVsYXRpb25JZCk7XHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIGV2ZW50OiBpblByb2dyZXNzRXZlbnQsXHJcbiAgICAgICAgICAgIG1lYXN1cmVtZW50OiBuZXcgU3R1YlBlcmZvcm1hbmNlTWVhc3VyZW1lbnQoKSxcclxuICAgICAgICB9O1xyXG4gICAgfVxyXG4gICAgLyoqXHJcbiAgICAgKiBTdG9wcyBtZWFzdXJpbmcgdGhlIHBlcmZvcm1hbmNlIGZvciBhbiBvcGVyYXRpb24uIFNob3VsZCBvbmx5IGJlIGNhbGxlZCBkaXJlY3RseSBieSBQZXJmb3JtYW5jZUNsaWVudCBjbGFzc2VzLFxyXG4gICAgICogYXMgY29uc3VtZXJzIHNob3VsZCBpbnN0ZWFkIHVzZSB0aGUgZnVuY3Rpb24gcmV0dXJuZWQgYnkgc3RhcnRNZWFzdXJlbWVudC5cclxuICAgICAqIEFkZHMgYSBuZXcgZmllbGQgbmFtZWQgYXMgXCJbZXZlbnQgbmFtZV1EdXJhdGlvbk1zXCIgZm9yIHN1Yi1tZWFzdXJlbWVudHMsIGNvbXBsZXRlcyBhbmQgZW1pdHMgYW4gZXZlbnRcclxuICAgICAqIG90aGVyd2lzZS5cclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge1BlcmZvcm1hbmNlRXZlbnR9IGV2ZW50XHJcbiAgICAgKiBAcGFyYW0ge3Vua25vd259IGVycm9yXHJcbiAgICAgKiBAcmV0dXJucyB7KFBlcmZvcm1hbmNlRXZlbnQgfCBudWxsKX1cclxuICAgICAqL1xyXG4gICAgZW5kTWVhc3VyZW1lbnQoZXZlbnQsIGVycm9yKSB7XHJcbiAgICAgICAgY29uc3Qgcm9vdEV2ZW50ID0gdGhpcy5ldmVudHNCeUNvcnJlbGF0aW9uSWQuZ2V0KGV2ZW50LmNvcnJlbGF0aW9uSWQpO1xyXG4gICAgICAgIGlmICghcm9vdEV2ZW50KSB7XHJcbiAgICAgICAgICAgIHRoaXMubG9nZ2VyLnRyYWNlKGBQZXJmb3JtYW5jZUNsaWVudDogTWVhc3VyZW1lbnQgbm90IGZvdW5kIGZvciAke2V2ZW50LmV2ZW50SWR9YCwgZXZlbnQuY29ycmVsYXRpb25JZCk7XHJcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjb25zdCBpc1Jvb3QgPSBldmVudC5ldmVudElkID09PSByb290RXZlbnQuZXZlbnRJZDtcclxuICAgICAgICBsZXQgcXVldWVJbmZvID0ge1xyXG4gICAgICAgICAgICB0b3RhbFF1ZXVlVGltZTogMCxcclxuICAgICAgICAgICAgdG90YWxRdWV1ZUNvdW50OiAwLFxyXG4gICAgICAgICAgICBtYW51YWxseUNvbXBsZXRlZENvdW50OiAwLFxyXG4gICAgICAgIH07XHJcbiAgICAgICAgZXZlbnQuZHVyYXRpb25NcyA9IE1hdGgucm91bmQoZXZlbnQuZHVyYXRpb25NcyB8fCB0aGlzLmdldER1cmF0aW9uTXMoZXZlbnQuc3RhcnRUaW1lTXMpKTtcclxuICAgICAgICBjb25zdCBjb250ZXh0ID0gSlNPTi5zdHJpbmdpZnkoZW5kQ29udGV4dChldmVudCwgdGhpcy5hYmJyZXZpYXRpb25zLCB0aGlzLmV2ZW50U3RhY2suZ2V0KHJvb3RFdmVudC5jb3JyZWxhdGlvbklkKSwgZXJyb3IpKTtcclxuICAgICAgICBpZiAoaXNSb290KSB7XHJcbiAgICAgICAgICAgIHF1ZXVlSW5mbyA9IHRoaXMuZ2V0UXVldWVJbmZvKGV2ZW50LmNvcnJlbGF0aW9uSWQpO1xyXG4gICAgICAgICAgICB0aGlzLmRpc2NhcmRNZWFzdXJlbWVudHMocm9vdEV2ZW50LmNvcnJlbGF0aW9uSWQpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgcm9vdEV2ZW50LmluY29tcGxldGVTdWJNZWFzdXJlbWVudHM/LmRlbGV0ZShldmVudC5ldmVudElkKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5sb2dnZXIudHJhY2UoYFBlcmZvcm1hbmNlQ2xpZW50OiBQZXJmb3JtYW5jZSBtZWFzdXJlbWVudCBlbmRlZCBmb3IgJHtldmVudC5uYW1lfTogJHtldmVudC5kdXJhdGlvbk1zfSBtc2AsIGV2ZW50LmNvcnJlbGF0aW9uSWQpO1xyXG4gICAgICAgIGlmIChlcnJvcikge1xyXG4gICAgICAgICAgICBhZGRFcnJvcihlcnJvciwgdGhpcy5sb2dnZXIsIHJvb3RFdmVudCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIC8vIEFkZCBzdWItbWVhc3VyZW1lbnQgYXR0cmlidXRlIHRvIHJvb3QgZXZlbnQuXHJcbiAgICAgICAgaWYgKCFpc1Jvb3QpIHtcclxuICAgICAgICAgICAgcm9vdEV2ZW50W2V2ZW50Lm5hbWUgKyBcIkR1cmF0aW9uTXNcIl0gPSBNYXRoLmZsb29yKGV2ZW50LmR1cmF0aW9uTXMpO1xyXG4gICAgICAgICAgICByZXR1cm4geyAuLi5yb290RXZlbnQgfTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKGlzUm9vdCAmJlxyXG4gICAgICAgICAgICAhZXJyb3IgJiZcclxuICAgICAgICAgICAgKHJvb3RFdmVudC5lcnJvckNvZGUgfHwgcm9vdEV2ZW50LnN1YkVycm9yQ29kZSkpIHtcclxuICAgICAgICAgICAgdGhpcy5sb2dnZXIudHJhY2UoYFBlcmZvcm1hbmNlQ2xpZW50OiBSZW1vdmUgZXJyb3IgYW5kIHN1Yi1lcnJvciBjb2RlcyBmb3Igcm9vdCBldmVudCAke2V2ZW50Lm5hbWV9IGFzIGludGVybWVkaWF0ZSBlcnJvciB3YXMgc3VjY2Vzc2Z1bGx5IGhhbmRsZWRgLCBldmVudC5jb3JyZWxhdGlvbklkKTtcclxuICAgICAgICAgICAgcm9vdEV2ZW50LmVycm9yQ29kZSA9IHVuZGVmaW5lZDtcclxuICAgICAgICAgICAgcm9vdEV2ZW50LnN1YkVycm9yQ29kZSA9IHVuZGVmaW5lZDtcclxuICAgICAgICB9XHJcbiAgICAgICAgbGV0IGZpbmFsRXZlbnQgPSB7IC4uLnJvb3RFdmVudCwgLi4uZXZlbnQgfTtcclxuICAgICAgICBsZXQgaW5jb21wbGV0ZVN1YnNDb3VudCA9IDA7XHJcbiAgICAgICAgLy8gSW5jb21wbGV0ZSBzdWItbWVhc3VyZW1lbnRzIGFyZSBkaXNjYXJkZWQuIFRoZXkgYXJlIGxpa2VseSBhbiBpbnN0cnVtZW50YXRpb24gYnVnIHRoYXQgc2hvdWxkIGJlIGZpeGVkLlxyXG4gICAgICAgIGZpbmFsRXZlbnQuaW5jb21wbGV0ZVN1Yk1lYXN1cmVtZW50cz8uZm9yRWFjaCgoc3ViTWVhc3VyZW1lbnQpID0+IHtcclxuICAgICAgICAgICAgdGhpcy5sb2dnZXIudHJhY2UoYFBlcmZvcm1hbmNlQ2xpZW50OiBJbmNvbXBsZXRlIHN1Ym1lYXN1cmVtZW50ICR7c3ViTWVhc3VyZW1lbnQubmFtZX0gZm91bmQgZm9yICR7ZXZlbnQubmFtZX1gLCBmaW5hbEV2ZW50LmNvcnJlbGF0aW9uSWQpO1xyXG4gICAgICAgICAgICBpbmNvbXBsZXRlU3Vic0NvdW50Kys7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgZmluYWxFdmVudC5pbmNvbXBsZXRlU3ViTWVhc3VyZW1lbnRzID0gdW5kZWZpbmVkO1xyXG4gICAgICAgIGZpbmFsRXZlbnQgPSB7XHJcbiAgICAgICAgICAgIC4uLmZpbmFsRXZlbnQsXHJcbiAgICAgICAgICAgIHF1ZXVlZFRpbWVNczogcXVldWVJbmZvLnRvdGFsUXVldWVUaW1lLFxyXG4gICAgICAgICAgICBxdWV1ZWRDb3VudDogcXVldWVJbmZvLnRvdGFsUXVldWVDb3VudCxcclxuICAgICAgICAgICAgcXVldWVkTWFudWFsbHlDb21wbGV0ZWRDb3VudDogcXVldWVJbmZvLm1hbnVhbGx5Q29tcGxldGVkQ291bnQsXHJcbiAgICAgICAgICAgIHN0YXR1czogUGVyZm9ybWFuY2VFdmVudFN0YXR1cy5Db21wbGV0ZWQsXHJcbiAgICAgICAgICAgIGluY29tcGxldGVTdWJzQ291bnQsXHJcbiAgICAgICAgICAgIGNvbnRleHQsXHJcbiAgICAgICAgfTtcclxuICAgICAgICB0aGlzLnRydW5jYXRlSW50ZWdyYWxGaWVsZHMoZmluYWxFdmVudCk7XHJcbiAgICAgICAgdGhpcy5lbWl0RXZlbnRzKFtmaW5hbEV2ZW50XSwgZXZlbnQuY29ycmVsYXRpb25JZCk7XHJcbiAgICAgICAgcmV0dXJuIGZpbmFsRXZlbnQ7XHJcbiAgICB9XHJcbiAgICAvKipcclxuICAgICAqIFNhdmVzIGV4dHJhIGluZm9ybWF0aW9uIHRvIGJlIGVtaXR0ZWQgd2hlbiB0aGUgbWVhc3VyZW1lbnRzIGFyZSBmbHVzaGVkXHJcbiAgICAgKiBAcGFyYW0gZmllbGRzXHJcbiAgICAgKiBAcGFyYW0gY29ycmVsYXRpb25JZFxyXG4gICAgICovXHJcbiAgICBhZGRGaWVsZHMoZmllbGRzLCBjb3JyZWxhdGlvbklkKSB7XHJcbiAgICAgICAgdGhpcy5sb2dnZXIudHJhY2UoXCJQZXJmb3JtYW5jZUNsaWVudDogVXBkYXRpbmcgc3RhdGljIGZpZWxkc1wiKTtcclxuICAgICAgICBjb25zdCBldmVudCA9IHRoaXMuZXZlbnRzQnlDb3JyZWxhdGlvbklkLmdldChjb3JyZWxhdGlvbklkKTtcclxuICAgICAgICBpZiAoZXZlbnQpIHtcclxuICAgICAgICAgICAgdGhpcy5ldmVudHNCeUNvcnJlbGF0aW9uSWQuc2V0KGNvcnJlbGF0aW9uSWQsIHtcclxuICAgICAgICAgICAgICAgIC4uLmV2ZW50LFxyXG4gICAgICAgICAgICAgICAgLi4uZmllbGRzLFxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMubG9nZ2VyLnRyYWNlKFwiUGVyZm9ybWFuY2VDbGllbnQ6IEV2ZW50IG5vdCBmb3VuZCBmb3JcIiwgY29ycmVsYXRpb25JZCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgLyoqXHJcbiAgICAgKiBJbmNyZW1lbnQgY291bnRlcnMgdG8gYmUgZW1pdHRlZCB3aGVuIHRoZSBtZWFzdXJlbWVudHMgYXJlIGZsdXNoZWRcclxuICAgICAqIEBwYXJhbSBmaWVsZHMge3N0cmluZ1tdfVxyXG4gICAgICogQHBhcmFtIGNvcnJlbGF0aW9uSWQge3N0cmluZ30gY29ycmVsYXRpb24gaWRlbnRpZmllclxyXG4gICAgICovXHJcbiAgICBpbmNyZW1lbnRGaWVsZHMoZmllbGRzLCBjb3JyZWxhdGlvbklkKSB7XHJcbiAgICAgICAgdGhpcy5sb2dnZXIudHJhY2UoXCJQZXJmb3JtYW5jZUNsaWVudDogVXBkYXRpbmcgY291bnRlcnNcIik7XHJcbiAgICAgICAgY29uc3QgZXZlbnQgPSB0aGlzLmV2ZW50c0J5Q29ycmVsYXRpb25JZC5nZXQoY29ycmVsYXRpb25JZCk7XHJcbiAgICAgICAgaWYgKGV2ZW50KSB7XHJcbiAgICAgICAgICAgIGZvciAoY29uc3QgY291bnRlciBpbiBmaWVsZHMpIHtcclxuICAgICAgICAgICAgICAgIGlmICghZXZlbnQuaGFzT3duUHJvcGVydHkoY291bnRlcikpIHtcclxuICAgICAgICAgICAgICAgICAgICBldmVudFtjb3VudGVyXSA9IDA7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBlbHNlIGlmIChpc05hTihOdW1iZXIoZXZlbnRbY291bnRlcl0pKSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGV2ZW50W2NvdW50ZXJdICs9IGZpZWxkc1tjb3VudGVyXTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5sb2dnZXIudHJhY2UoXCJQZXJmb3JtYW5jZUNsaWVudDogRXZlbnQgbm90IGZvdW5kIGZvclwiLCBjb3JyZWxhdGlvbklkKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICAvKipcclxuICAgICAqIFVwc2VydHMgZXZlbnQgaW50byBldmVudCBjYWNoZS5cclxuICAgICAqIEZpcnN0IGtleSBpcyB0aGUgY29ycmVsYXRpb24gaWQsIHNlY29uZCBrZXkgaXMgdGhlIGV2ZW50IGlkLlxyXG4gICAgICogQWxsb3dzIGZvciBldmVudHMgdG8gYmUgZ3JvdXBlZCBieSBjb3JyZWxhdGlvbiBpZCxcclxuICAgICAqIGFuZCB0byBlYXNpbHkgYWxsb3cgZm9yIHByb3BlcnRpZXMgb24gdGhlbSB0byBiZSB1cGRhdGVkLlxyXG4gICAgICpcclxuICAgICAqIEBwcml2YXRlXHJcbiAgICAgKiBAcGFyYW0ge1BlcmZvcm1hbmNlRXZlbnR9IGV2ZW50XHJcbiAgICAgKi9cclxuICAgIGNhY2hlRXZlbnRCeUNvcnJlbGF0aW9uSWQoZXZlbnQpIHtcclxuICAgICAgICBjb25zdCByb290RXZlbnQgPSB0aGlzLmV2ZW50c0J5Q29ycmVsYXRpb25JZC5nZXQoZXZlbnQuY29ycmVsYXRpb25JZCk7XHJcbiAgICAgICAgaWYgKHJvb3RFdmVudCkge1xyXG4gICAgICAgICAgICB0aGlzLmxvZ2dlci50cmFjZShgUGVyZm9ybWFuY2VDbGllbnQ6IFBlcmZvcm1hbmNlIG1lYXN1cmVtZW50IGZvciAke2V2ZW50Lm5hbWV9IGFkZGVkL3VwZGF0ZWRgLCBldmVudC5jb3JyZWxhdGlvbklkKTtcclxuICAgICAgICAgICAgcm9vdEV2ZW50LmluY29tcGxldGVTdWJNZWFzdXJlbWVudHMgPVxyXG4gICAgICAgICAgICAgICAgcm9vdEV2ZW50LmluY29tcGxldGVTdWJNZWFzdXJlbWVudHMgfHwgbmV3IE1hcCgpO1xyXG4gICAgICAgICAgICByb290RXZlbnQuaW5jb21wbGV0ZVN1Yk1lYXN1cmVtZW50cy5zZXQoZXZlbnQuZXZlbnRJZCwge1xyXG4gICAgICAgICAgICAgICAgbmFtZTogZXZlbnQubmFtZSxcclxuICAgICAgICAgICAgICAgIHN0YXJ0VGltZU1zOiBldmVudC5zdGFydFRpbWVNcyxcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLmxvZ2dlci50cmFjZShgUGVyZm9ybWFuY2VDbGllbnQ6IFBlcmZvcm1hbmNlIG1lYXN1cmVtZW50IGZvciAke2V2ZW50Lm5hbWV9IHN0YXJ0ZWRgLCBldmVudC5jb3JyZWxhdGlvbklkKTtcclxuICAgICAgICAgICAgdGhpcy5ldmVudHNCeUNvcnJlbGF0aW9uSWQuc2V0KGV2ZW50LmNvcnJlbGF0aW9uSWQsIHsgLi4uZXZlbnQgfSk7XHJcbiAgICAgICAgICAgIHRoaXMuZXZlbnRTdGFjay5zZXQoZXZlbnQuY29ycmVsYXRpb25JZCwgW10pO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIGdldFF1ZXVlSW5mbyhjb3JyZWxhdGlvbklkKSB7XHJcbiAgICAgICAgY29uc3QgcXVldWVNZWFzdXJlbWVudEZvckNvcnJlbGF0aW9uSWQgPSB0aGlzLnF1ZXVlTWVhc3VyZW1lbnRzLmdldChjb3JyZWxhdGlvbklkKTtcclxuICAgICAgICBpZiAoIXF1ZXVlTWVhc3VyZW1lbnRGb3JDb3JyZWxhdGlvbklkKSB7XHJcbiAgICAgICAgICAgIHRoaXMubG9nZ2VyLnRyYWNlKGBQZXJmb3JtYW5jZUNsaWVudDogbm8gcXVldWUgbWVhc3VyZW1lbnRzIGZvdW5kIGZvciBmb3IgY29ycmVsYXRpb25JZDogJHtjb3JyZWxhdGlvbklkfWApO1xyXG4gICAgICAgIH1cclxuICAgICAgICBsZXQgdG90YWxRdWV1ZVRpbWUgPSAwO1xyXG4gICAgICAgIGxldCB0b3RhbFF1ZXVlQ291bnQgPSAwO1xyXG4gICAgICAgIGxldCBtYW51YWxseUNvbXBsZXRlZENvdW50ID0gMDtcclxuICAgICAgICBxdWV1ZU1lYXN1cmVtZW50Rm9yQ29ycmVsYXRpb25JZD8uZm9yRWFjaCgobWVhc3VyZW1lbnQpID0+IHtcclxuICAgICAgICAgICAgdG90YWxRdWV1ZVRpbWUgKz0gbWVhc3VyZW1lbnQucXVldWVUaW1lO1xyXG4gICAgICAgICAgICB0b3RhbFF1ZXVlQ291bnQrKztcclxuICAgICAgICAgICAgbWFudWFsbHlDb21wbGV0ZWRDb3VudCArPSBtZWFzdXJlbWVudC5tYW51YWxseUNvbXBsZXRlZCA/IDEgOiAwO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgIHRvdGFsUXVldWVUaW1lLFxyXG4gICAgICAgICAgICB0b3RhbFF1ZXVlQ291bnQsXHJcbiAgICAgICAgICAgIG1hbnVhbGx5Q29tcGxldGVkQ291bnQsXHJcbiAgICAgICAgfTtcclxuICAgIH1cclxuICAgIC8qKlxyXG4gICAgICogUmVtb3ZlcyBtZWFzdXJlbWVudHMgYW5kIGF1eCBkYXRhIGZvciBhIGdpdmVuIGNvcnJlbGF0aW9uIGlkLlxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBjb3JyZWxhdGlvbklkXHJcbiAgICAgKi9cclxuICAgIGRpc2NhcmRNZWFzdXJlbWVudHMoY29ycmVsYXRpb25JZCkge1xyXG4gICAgICAgIHRoaXMubG9nZ2VyLnRyYWNlKFwiUGVyZm9ybWFuY2VDbGllbnQ6IFBlcmZvcm1hbmNlIG1lYXN1cmVtZW50cyBkaXNjYXJkZWRcIiwgY29ycmVsYXRpb25JZCk7XHJcbiAgICAgICAgdGhpcy5ldmVudHNCeUNvcnJlbGF0aW9uSWQuZGVsZXRlKGNvcnJlbGF0aW9uSWQpO1xyXG4gICAgICAgIHRoaXMubG9nZ2VyLnRyYWNlKFwiUGVyZm9ybWFuY2VDbGllbnQ6IFF1ZXVlTWVhc3VyZW1lbnRzIGRpc2NhcmRlZFwiLCBjb3JyZWxhdGlvbklkKTtcclxuICAgICAgICB0aGlzLnF1ZXVlTWVhc3VyZW1lbnRzLmRlbGV0ZShjb3JyZWxhdGlvbklkKTtcclxuICAgICAgICB0aGlzLmxvZ2dlci50cmFjZShcIlBlcmZvcm1hbmNlQ2xpZW50OiBQcmUtcXVldWUgdGltZXMgZGlzY2FyZGVkXCIsIGNvcnJlbGF0aW9uSWQpO1xyXG4gICAgICAgIHRoaXMucHJlUXVldWVUaW1lQnlDb3JyZWxhdGlvbklkLmRlbGV0ZShjb3JyZWxhdGlvbklkKTtcclxuICAgICAgICB0aGlzLmxvZ2dlci50cmFjZShcIlBlcmZvcm1hbmNlQ2xpZW50OiBFdmVudCBzdGFjayBkaXNjYXJkZWRcIiwgY29ycmVsYXRpb25JZCk7XHJcbiAgICAgICAgdGhpcy5ldmVudFN0YWNrLmRlbGV0ZShjb3JyZWxhdGlvbklkKTtcclxuICAgIH1cclxuICAgIC8qKlxyXG4gICAgICogUmVnaXN0ZXJzIGEgY2FsbGJhY2sgZnVuY3Rpb24gdG8gcmVjZWl2ZSBwZXJmb3JtYW5jZSBldmVudHMuXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtQZXJmb3JtYW5jZUNhbGxiYWNrRnVuY3Rpb259IGNhbGxiYWNrXHJcbiAgICAgKiBAcmV0dXJucyB7c3RyaW5nfVxyXG4gICAgICovXHJcbiAgICBhZGRQZXJmb3JtYW5jZUNhbGxiYWNrKGNhbGxiYWNrKSB7XHJcbiAgICAgICAgZm9yIChjb25zdCBbaWQsIGNiXSBvZiB0aGlzLmNhbGxiYWNrcykge1xyXG4gICAgICAgICAgICBpZiAoY2IudG9TdHJpbmcoKSA9PT0gY2FsbGJhY2sudG9TdHJpbmcoKSkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5sb2dnZXIud2FybmluZyhgUGVyZm9ybWFuY2VDbGllbnQ6IFBlcmZvcm1hbmNlIGNhbGxiYWNrIGlzIGFscmVhZHkgcmVnaXN0ZXJlZCB3aXRoIGlkOiAke2lkfWApO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGlkO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNvbnN0IGNhbGxiYWNrSWQgPSB0aGlzLmdlbmVyYXRlSWQoKTtcclxuICAgICAgICB0aGlzLmNhbGxiYWNrcy5zZXQoY2FsbGJhY2tJZCwgY2FsbGJhY2spO1xyXG4gICAgICAgIHRoaXMubG9nZ2VyLnZlcmJvc2UoYFBlcmZvcm1hbmNlQ2xpZW50OiBQZXJmb3JtYW5jZSBjYWxsYmFjayByZWdpc3RlcmVkIHdpdGggaWQ6ICR7Y2FsbGJhY2tJZH1gKTtcclxuICAgICAgICByZXR1cm4gY2FsbGJhY2tJZDtcclxuICAgIH1cclxuICAgIC8qKlxyXG4gICAgICogUmVtb3ZlcyBhIGNhbGxiYWNrIHJlZ2lzdGVyZWQgd2l0aCBhZGRQZXJmb3JtYW5jZUNhbGxiYWNrLlxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBjYWxsYmFja0lkXHJcbiAgICAgKiBAcmV0dXJucyB7Ym9vbGVhbn1cclxuICAgICAqL1xyXG4gICAgcmVtb3ZlUGVyZm9ybWFuY2VDYWxsYmFjayhjYWxsYmFja0lkKSB7XHJcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gdGhpcy5jYWxsYmFja3MuZGVsZXRlKGNhbGxiYWNrSWQpO1xyXG4gICAgICAgIGlmIChyZXN1bHQpIHtcclxuICAgICAgICAgICAgdGhpcy5sb2dnZXIudmVyYm9zZShgUGVyZm9ybWFuY2VDbGllbnQ6IFBlcmZvcm1hbmNlIGNhbGxiYWNrICR7Y2FsbGJhY2tJZH0gcmVtb3ZlZC5gKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMubG9nZ2VyLnZlcmJvc2UoYFBlcmZvcm1hbmNlQ2xpZW50OiBQZXJmb3JtYW5jZSBjYWxsYmFjayAke2NhbGxiYWNrSWR9IG5vdCByZW1vdmVkLmApO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gcmVzdWx0O1xyXG4gICAgfVxyXG4gICAgLyoqXHJcbiAgICAgKiBFbWl0cyBldmVudHMgdG8gYWxsIHJlZ2lzdGVyZWQgY2FsbGJhY2tzLlxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7UGVyZm9ybWFuY2VFdmVudFtdfSBldmVudHNcclxuICAgICAqIEBwYXJhbSB7P3N0cmluZ30gW2NvcnJlbGF0aW9uSWRdXHJcbiAgICAgKi9cclxuICAgIGVtaXRFdmVudHMoZXZlbnRzLCBjb3JyZWxhdGlvbklkKSB7XHJcbiAgICAgICAgdGhpcy5sb2dnZXIudmVyYm9zZShcIlBlcmZvcm1hbmNlQ2xpZW50OiBFbWl0dGluZyBwZXJmb3JtYW5jZSBldmVudHNcIiwgY29ycmVsYXRpb25JZCk7XHJcbiAgICAgICAgdGhpcy5jYWxsYmFja3MuZm9yRWFjaCgoY2FsbGJhY2ssIGNhbGxiYWNrSWQpID0+IHtcclxuICAgICAgICAgICAgdGhpcy5sb2dnZXIudHJhY2UoYFBlcmZvcm1hbmNlQ2xpZW50OiBFbWl0dGluZyBldmVudCB0byBjYWxsYmFjayAke2NhbGxiYWNrSWR9YCwgY29ycmVsYXRpb25JZCk7XHJcbiAgICAgICAgICAgIGNhbGxiYWNrLmFwcGx5KG51bGwsIFtldmVudHNdKTtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuICAgIC8qKlxyXG4gICAgICogRW5mb3JjZSB0cnVuY2F0aW9uIG9mIGludGVncmFsIGZpZWxkcyBpbiBwZXJmb3JtYW5jZSBldmVudC5cclxuICAgICAqIEBwYXJhbSB7UGVyZm9ybWFuY2VFdmVudH0gZXZlbnQgcGVyZm9ybWFuY2UgZXZlbnQgdG8gdXBkYXRlLlxyXG4gICAgICovXHJcbiAgICB0cnVuY2F0ZUludGVncmFsRmllbGRzKGV2ZW50KSB7XHJcbiAgICAgICAgdGhpcy5pbnRGaWVsZHMuZm9yRWFjaCgoa2V5KSA9PiB7XHJcbiAgICAgICAgICAgIGlmIChrZXkgaW4gZXZlbnQgJiYgdHlwZW9mIGV2ZW50W2tleV0gPT09IFwibnVtYmVyXCIpIHtcclxuICAgICAgICAgICAgICAgIGV2ZW50W2tleV0gPSBNYXRoLmZsb29yKGV2ZW50W2tleV0pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcbiAgICAvKipcclxuICAgICAqIFJldHVybnMgZXZlbnQgZHVyYXRpb24gaW4gbWlsbGlzZWNvbmRzXHJcbiAgICAgKiBAcGFyYW0gc3RhcnRUaW1lTXMge251bWJlcn1cclxuICAgICAqIEByZXR1cm5zIHtudW1iZXJ9XHJcbiAgICAgKi9cclxuICAgIGdldER1cmF0aW9uTXMoc3RhcnRUaW1lTXMpIHtcclxuICAgICAgICBjb25zdCBkdXJhdGlvbk1zID0gRGF0ZS5ub3coKSAtIHN0YXJ0VGltZU1zO1xyXG4gICAgICAgIC8vIEhhbmRsZSBjbG9jayBza2V3XHJcbiAgICAgICAgcmV0dXJuIGR1cmF0aW9uTXMgPCAwID8gZHVyYXRpb25NcyA6IDA7XHJcbiAgICB9XHJcbn1cblxuZXhwb3J0IHsgUGVyZm9ybWFuY2VDbGllbnQsIGFkZEVycm9yLCBjb21wYWN0U3RhY2ssIGNvbXBhY3RTdGFja0xpbmUsIGVuZENvbnRleHQsIHN0YXJ0Q29udGV4dCB9O1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9UGVyZm9ybWFuY2VDbGllbnQubWpzLm1hcFxuIiwiLyohIEBhenVyZS9tc2FsLWJyb3dzZXIgdjMuMjguMSAyMDI1LTAxLTE0ICovXG4ndXNlIHN0cmljdCc7XG5pbXBvcnQgeyBQZXJmb3JtYW5jZUNsaWVudCwgQ29uc3RhbnRzLCBMb2dnZXIgfSBmcm9tICdAYXp1cmUvbXNhbC1jb21tb24vYnJvd3Nlcic7XG5pbXBvcnQgeyBuYW1lLCB2ZXJzaW9uIH0gZnJvbSAnLi4vcGFja2FnZU1ldGFkYXRhLm1qcyc7XG5pbXBvcnQgeyBCcm93c2VyQ2FjaGVMb2NhdGlvbiwgQlJPV1NFUl9QRVJGX0VOQUJMRURfS0VZIH0gZnJvbSAnLi4vdXRpbHMvQnJvd3NlckNvbnN0YW50cy5tanMnO1xuaW1wb3J0IHsgY3JlYXRlTmV3R3VpZCB9IGZyb20gJy4uL2NyeXB0by9Ccm93c2VyQ3J5cHRvLm1qcyc7XG5cbi8qXHJcbiAqIENvcHlyaWdodCAoYykgTWljcm9zb2Z0IENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLlxyXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgTUlUIExpY2Vuc2UuXHJcbiAqL1xyXG4vKipcclxuICogUmV0dXJucyBicm93c2VyIHBlcmZvcm1hbmNlIG1lYXN1cmVtZW50IG1vZHVsZSBpZiBzZXNzaW9uIGZsYWcgaXMgZW5hYmxlZC4gUmV0dXJucyB1bmRlZmluZWQgb3RoZXJ3aXNlLlxyXG4gKi9cclxuZnVuY3Rpb24gZ2V0UGVyZk1lYXN1cmVtZW50TW9kdWxlKCkge1xyXG4gICAgbGV0IHNlc3Npb25TdG9yYWdlO1xyXG4gICAgdHJ5IHtcclxuICAgICAgICBzZXNzaW9uU3RvcmFnZSA9IHdpbmRvd1tCcm93c2VyQ2FjaGVMb2NhdGlvbi5TZXNzaW9uU3RvcmFnZV07XHJcbiAgICAgICAgY29uc3QgcGVyZkVuYWJsZWQgPSBzZXNzaW9uU3RvcmFnZT8uZ2V0SXRlbShCUk9XU0VSX1BFUkZfRU5BQkxFRF9LRVkpO1xyXG4gICAgICAgIGlmIChOdW1iZXIocGVyZkVuYWJsZWQpID09PSAxKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBpbXBvcnQoJy4vQnJvd3NlclBlcmZvcm1hbmNlTWVhc3VyZW1lbnQubWpzJyk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIC8vIE11dGUgZXJyb3JzIGlmIGl0J3MgYSBub24tYnJvd3NlciBlbnZpcm9ubWVudCBvciBjb29raWVzIGFyZSBibG9ja2VkLlxyXG4gICAgfVxyXG4gICAgY2F0Y2ggKGUpIHsgfVxyXG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcclxufVxyXG4vKipcclxuICogUmV0dXJucyBib29sZWFuLCBpbmRpY2F0aW5nIHdoZXRoZXIgYnJvd3NlciBzdXBwb3J0cyB3aW5kb3cucGVyZm9ybWFuY2Uubm93KCkgZnVuY3Rpb24uXHJcbiAqL1xyXG5mdW5jdGlvbiBzdXBwb3J0c0Jyb3dzZXJQZXJmb3JtYW5jZU5vdygpIHtcclxuICAgIHJldHVybiAodHlwZW9mIHdpbmRvdyAhPT0gXCJ1bmRlZmluZWRcIiAmJlxyXG4gICAgICAgIHR5cGVvZiB3aW5kb3cucGVyZm9ybWFuY2UgIT09IFwidW5kZWZpbmVkXCIgJiZcclxuICAgICAgICB0eXBlb2Ygd2luZG93LnBlcmZvcm1hbmNlLm5vdyA9PT0gXCJmdW5jdGlvblwiKTtcclxufVxyXG4vKipcclxuICogUmV0dXJucyBldmVudCBkdXJhdGlvbiBpbiBtaWxsaXNlY29uZHMgdXNpbmcgd2luZG93IHBlcmZvcm1hbmNlIEFQSSBpZiBhdmFpbGFibGUuIFJldHVybnMgdW5kZWZpbmVkIG90aGVyd2lzZS5cclxuICogQHBhcmFtIHN0YXJ0VGltZSB7RE9NSGlnaFJlc1RpbWVTdGFtcCB8IHVuZGVmaW5lZH1cclxuICogQHJldHVybnMge251bWJlciB8IHVuZGVmaW5lZH1cclxuICovXHJcbmZ1bmN0aW9uIGdldFBlcmZEdXJhdGlvbk1zKHN0YXJ0VGltZSkge1xyXG4gICAgaWYgKCFzdGFydFRpbWUgfHwgIXN1cHBvcnRzQnJvd3NlclBlcmZvcm1hbmNlTm93KCkpIHtcclxuICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIE1hdGgucm91bmQod2luZG93LnBlcmZvcm1hbmNlLm5vdygpIC0gc3RhcnRUaW1lKTtcclxufVxyXG5jbGFzcyBCcm93c2VyUGVyZm9ybWFuY2VDbGllbnQgZXh0ZW5kcyBQZXJmb3JtYW5jZUNsaWVudCB7XHJcbiAgICBjb25zdHJ1Y3Rvcihjb25maWd1cmF0aW9uLCBpbnRGaWVsZHMsIGFiYnJldmlhdGlvbnMpIHtcclxuICAgICAgICBzdXBlcihjb25maWd1cmF0aW9uLmF1dGguY2xpZW50SWQsIGNvbmZpZ3VyYXRpb24uYXV0aC5hdXRob3JpdHkgfHwgYCR7Q29uc3RhbnRzLkRFRkFVTFRfQVVUSE9SSVRZfWAsIG5ldyBMb2dnZXIoY29uZmlndXJhdGlvbi5zeXN0ZW0/LmxvZ2dlck9wdGlvbnMgfHwge30sIG5hbWUsIHZlcnNpb24pLCBuYW1lLCB2ZXJzaW9uLCBjb25maWd1cmF0aW9uLnRlbGVtZXRyeT8uYXBwbGljYXRpb24gfHwge1xyXG4gICAgICAgICAgICBhcHBOYW1lOiBcIlwiLFxyXG4gICAgICAgICAgICBhcHBWZXJzaW9uOiBcIlwiLFxyXG4gICAgICAgIH0sIGludEZpZWxkcywgYWJicmV2aWF0aW9ucyk7XHJcbiAgICB9XHJcbiAgICBnZW5lcmF0ZUlkKCkge1xyXG4gICAgICAgIHJldHVybiBjcmVhdGVOZXdHdWlkKCk7XHJcbiAgICB9XHJcbiAgICBnZXRQYWdlVmlzaWJpbGl0eSgpIHtcclxuICAgICAgICByZXR1cm4gZG9jdW1lbnQudmlzaWJpbGl0eVN0YXRlPy50b1N0cmluZygpIHx8IG51bGw7XHJcbiAgICB9XHJcbiAgICBkZWxldGVJbmNvbXBsZXRlU3ViTWVhc3VyZW1lbnRzKGluUHJvZ3Jlc3NFdmVudCkge1xyXG4gICAgICAgIHZvaWQgZ2V0UGVyZk1lYXN1cmVtZW50TW9kdWxlKCk/LnRoZW4oKG1vZHVsZSkgPT4ge1xyXG4gICAgICAgICAgICBjb25zdCByb290RXZlbnQgPSB0aGlzLmV2ZW50c0J5Q29ycmVsYXRpb25JZC5nZXQoaW5Qcm9ncmVzc0V2ZW50LmV2ZW50LmNvcnJlbGF0aW9uSWQpO1xyXG4gICAgICAgICAgICBjb25zdCBpc1Jvb3RFdmVudCA9IHJvb3RFdmVudCAmJlxyXG4gICAgICAgICAgICAgICAgcm9vdEV2ZW50LmV2ZW50SWQgPT09IGluUHJvZ3Jlc3NFdmVudC5ldmVudC5ldmVudElkO1xyXG4gICAgICAgICAgICBjb25zdCBpbmNvbXBsZXRlTWVhc3VyZW1lbnRzID0gW107XHJcbiAgICAgICAgICAgIGlmIChpc1Jvb3RFdmVudCAmJiByb290RXZlbnQ/LmluY29tcGxldGVTdWJNZWFzdXJlbWVudHMpIHtcclxuICAgICAgICAgICAgICAgIHJvb3RFdmVudC5pbmNvbXBsZXRlU3ViTWVhc3VyZW1lbnRzLmZvckVhY2goKHN1Yk1lYXN1cmVtZW50KSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgaW5jb21wbGV0ZU1lYXN1cmVtZW50cy5wdXNoKHsgLi4uc3ViTWVhc3VyZW1lbnQgfSk7XHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAvLyBDbGVhbiB1cCByZW1haW5pbmcgbWFya3MgZm9yIGluY29tcGxldGUgc3ViLW1lYXN1cmVtZW50c1xyXG4gICAgICAgICAgICBtb2R1bGUuQnJvd3NlclBlcmZvcm1hbmNlTWVhc3VyZW1lbnQuZmx1c2hNZWFzdXJlbWVudHMoaW5Qcm9ncmVzc0V2ZW50LmV2ZW50LmNvcnJlbGF0aW9uSWQsIGluY29tcGxldGVNZWFzdXJlbWVudHMpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG4gICAgLyoqXHJcbiAgICAgKiBTdGFydHMgbWVhc3VyaW5nIHBlcmZvcm1hbmNlIGZvciBhIGdpdmVuIG9wZXJhdGlvbi4gUmV0dXJucyBhIGZ1bmN0aW9uIHRoYXQgc2hvdWxkIGJlIHVzZWQgdG8gZW5kIHRoZSBtZWFzdXJlbWVudC5cclxuICAgICAqIEFsc28gY2FwdHVyZXMgYnJvd3NlciBwYWdlIHZpc2liaWxpdHlTdGF0ZS5cclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge1BlcmZvcm1hbmNlRXZlbnRzfSBtZWFzdXJlTmFtZVxyXG4gICAgICogQHBhcmFtIHs/c3RyaW5nfSBbY29ycmVsYXRpb25JZF1cclxuICAgICAqIEByZXR1cm5zIHsoKGV2ZW50PzogUGFydGlhbDxQZXJmb3JtYW5jZUV2ZW50PikgPT4gUGVyZm9ybWFuY2VFdmVudHwgbnVsbCl9XHJcbiAgICAgKi9cclxuICAgIHN0YXJ0TWVhc3VyZW1lbnQobWVhc3VyZU5hbWUsIGNvcnJlbGF0aW9uSWQpIHtcclxuICAgICAgICAvLyBDYXB0dXJlIHBhZ2UgdmlzaWJpbGl0eVN0YXRlIGFuZCB0aGVuIGludm9rZSBzdGFydC9lbmQgbWVhc3VyZW1lbnRcclxuICAgICAgICBjb25zdCBzdGFydFBhZ2VWaXNpYmlsaXR5ID0gdGhpcy5nZXRQYWdlVmlzaWJpbGl0eSgpO1xyXG4gICAgICAgIGNvbnN0IGluUHJvZ3Jlc3NFdmVudCA9IHN1cGVyLnN0YXJ0TWVhc3VyZW1lbnQobWVhc3VyZU5hbWUsIGNvcnJlbGF0aW9uSWQpO1xyXG4gICAgICAgIGNvbnN0IHN0YXJ0VGltZSA9IHN1cHBvcnRzQnJvd3NlclBlcmZvcm1hbmNlTm93KClcclxuICAgICAgICAgICAgPyB3aW5kb3cucGVyZm9ybWFuY2Uubm93KClcclxuICAgICAgICAgICAgOiB1bmRlZmluZWQ7XHJcbiAgICAgICAgY29uc3QgYnJvd3Nlck1lYXN1cmVtZW50ID0gZ2V0UGVyZk1lYXN1cmVtZW50TW9kdWxlKCk/LnRoZW4oKG1vZHVsZSkgPT4ge1xyXG4gICAgICAgICAgICByZXR1cm4gbmV3IG1vZHVsZS5Ccm93c2VyUGVyZm9ybWFuY2VNZWFzdXJlbWVudChtZWFzdXJlTmFtZSwgaW5Qcm9ncmVzc0V2ZW50LmV2ZW50LmNvcnJlbGF0aW9uSWQpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIHZvaWQgYnJvd3Nlck1lYXN1cmVtZW50Py50aGVuKChtZWFzdXJlbWVudCkgPT4gbWVhc3VyZW1lbnQuc3RhcnRNZWFzdXJlbWVudCgpKTtcclxuICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICAuLi5pblByb2dyZXNzRXZlbnQsXHJcbiAgICAgICAgICAgIGVuZDogKGV2ZW50LCBlcnJvcikgPT4ge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgcmVzID0gaW5Qcm9ncmVzc0V2ZW50LmVuZCh7XHJcbiAgICAgICAgICAgICAgICAgICAgLi4uZXZlbnQsXHJcbiAgICAgICAgICAgICAgICAgICAgc3RhcnRQYWdlVmlzaWJpbGl0eSxcclxuICAgICAgICAgICAgICAgICAgICBlbmRQYWdlVmlzaWJpbGl0eTogdGhpcy5nZXRQYWdlVmlzaWJpbGl0eSgpLFxyXG4gICAgICAgICAgICAgICAgICAgIGR1cmF0aW9uTXM6IGdldFBlcmZEdXJhdGlvbk1zKHN0YXJ0VGltZSksXHJcbiAgICAgICAgICAgICAgICB9LCBlcnJvcik7XHJcbiAgICAgICAgICAgICAgICB2b2lkIGJyb3dzZXJNZWFzdXJlbWVudD8udGhlbigobWVhc3VyZW1lbnQpID0+IG1lYXN1cmVtZW50LmVuZE1lYXN1cmVtZW50KCkpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5kZWxldGVJbmNvbXBsZXRlU3ViTWVhc3VyZW1lbnRzKGluUHJvZ3Jlc3NFdmVudCk7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gcmVzO1xyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICBkaXNjYXJkOiAoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICBpblByb2dyZXNzRXZlbnQuZGlzY2FyZCgpO1xyXG4gICAgICAgICAgICAgICAgdm9pZCBicm93c2VyTWVhc3VyZW1lbnQ/LnRoZW4oKG1lYXN1cmVtZW50KSA9PiBtZWFzdXJlbWVudC5mbHVzaE1lYXN1cmVtZW50KCkpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5kZWxldGVJbmNvbXBsZXRlU3ViTWVhc3VyZW1lbnRzKGluUHJvZ3Jlc3NFdmVudCk7XHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgfTtcclxuICAgIH1cclxuICAgIC8qKlxyXG4gICAgICogQWRkcyBwcmUtcXVldWUgdGltZSB0byBwcmVRdWV1ZVRpbWVCeUNvcnJlbGF0aW9uSWQgbWFwLlxyXG4gICAgICogQHBhcmFtIHtQZXJmb3JtYW5jZUV2ZW50c30gZXZlbnROYW1lXHJcbiAgICAgKiBAcGFyYW0gez9zdHJpbmd9IGNvcnJlbGF0aW9uSWRcclxuICAgICAqIEByZXR1cm5zXHJcbiAgICAgKi9cclxuICAgIHNldFByZVF1ZXVlVGltZShldmVudE5hbWUsIGNvcnJlbGF0aW9uSWQpIHtcclxuICAgICAgICBpZiAoIXN1cHBvcnRzQnJvd3NlclBlcmZvcm1hbmNlTm93KCkpIHtcclxuICAgICAgICAgICAgdGhpcy5sb2dnZXIudHJhY2UoYEJyb3dzZXJQZXJmb3JtYW5jZUNsaWVudDogd2luZG93IHBlcmZvcm1hbmNlIEFQSSBub3QgYXZhaWxhYmxlLCB1bmFibGUgdG8gc2V0IHRlbGVtZXRyeSBxdWV1ZSB0aW1lIGZvciAke2V2ZW50TmFtZX1gKTtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoIWNvcnJlbGF0aW9uSWQpIHtcclxuICAgICAgICAgICAgdGhpcy5sb2dnZXIudHJhY2UoYEJyb3dzZXJQZXJmb3JtYW5jZUNsaWVudDogY29ycmVsYXRpb25JZCBmb3IgJHtldmVudE5hbWV9IG5vdCBwcm92aWRlZCwgdW5hYmxlIHRvIHNldCB0ZWxlbWV0cnkgcXVldWUgdGltZWApO1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNvbnN0IHByZVF1ZXVlRXZlbnQgPSB0aGlzLnByZVF1ZXVlVGltZUJ5Q29ycmVsYXRpb25JZC5nZXQoY29ycmVsYXRpb25JZCk7XHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogTWFudWFsbHkgY29tcGxldGUgcXVldWUgbWVhc3VyZW1lbnQgaWYgdGhlcmUgaXMgYW4gaW5jb21wbGV0ZSBwcmUtcXVldWUgZXZlbnQuXHJcbiAgICAgICAgICogSW5jb21wbGV0ZSBwcmUtcXVldWUgZXZlbnRzIGFyZSBpbnN0cnVtZW50YXRpb24gYnVncyB0aGF0IHNob3VsZCBiZSBmaXhlZC5cclxuICAgICAgICAgKi9cclxuICAgICAgICBpZiAocHJlUXVldWVFdmVudCkge1xyXG4gICAgICAgICAgICB0aGlzLmxvZ2dlci50cmFjZShgQnJvd3NlclBlcmZvcm1hbmNlQ2xpZW50OiBJbmNvbXBsZXRlIHByZS1xdWV1ZSAke3ByZVF1ZXVlRXZlbnQubmFtZX0gZm91bmRgLCBjb3JyZWxhdGlvbklkKTtcclxuICAgICAgICAgICAgdGhpcy5hZGRRdWV1ZU1lYXN1cmVtZW50KHByZVF1ZXVlRXZlbnQubmFtZSwgY29ycmVsYXRpb25JZCwgdW5kZWZpbmVkLCB0cnVlKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5wcmVRdWV1ZVRpbWVCeUNvcnJlbGF0aW9uSWQuc2V0KGNvcnJlbGF0aW9uSWQsIHtcclxuICAgICAgICAgICAgbmFtZTogZXZlbnROYW1lLFxyXG4gICAgICAgICAgICB0aW1lOiB3aW5kb3cucGVyZm9ybWFuY2Uubm93KCksXHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcbiAgICAvKipcclxuICAgICAqIENhbGN1bGF0ZXMgYW5kIGFkZHMgcXVldWUgdGltZSBtZWFzdXJlbWVudCBmb3IgZ2l2ZW4gcGVyZm9ybWFuY2UgZXZlbnQuXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtQZXJmb3JtYW5jZUV2ZW50c30gZXZlbnROYW1lXHJcbiAgICAgKiBAcGFyYW0gez9zdHJpbmd9IGNvcnJlbGF0aW9uSWRcclxuICAgICAqIEBwYXJhbSB7P251bWJlcn0gcXVldWVUaW1lXHJcbiAgICAgKiBAcGFyYW0gez9ib29sZWFufSBtYW51YWxseUNvbXBsZXRlZCAtIGluZGljYXRvciBmb3IgbWFudWFsbHkgY29tcGxldGVkIHF1ZXVlIG1lYXN1cmVtZW50c1xyXG4gICAgICogQHJldHVybnNcclxuICAgICAqL1xyXG4gICAgYWRkUXVldWVNZWFzdXJlbWVudChldmVudE5hbWUsIGNvcnJlbGF0aW9uSWQsIHF1ZXVlVGltZSwgbWFudWFsbHlDb21wbGV0ZWQpIHtcclxuICAgICAgICBpZiAoIXN1cHBvcnRzQnJvd3NlclBlcmZvcm1hbmNlTm93KCkpIHtcclxuICAgICAgICAgICAgdGhpcy5sb2dnZXIudHJhY2UoYEJyb3dzZXJQZXJmb3JtYW5jZUNsaWVudDogd2luZG93IHBlcmZvcm1hbmNlIEFQSSBub3QgYXZhaWxhYmxlLCB1bmFibGUgdG8gYWRkIHF1ZXVlIG1lYXN1cmVtZW50IGZvciAke2V2ZW50TmFtZX1gKTtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoIWNvcnJlbGF0aW9uSWQpIHtcclxuICAgICAgICAgICAgdGhpcy5sb2dnZXIudHJhY2UoYEJyb3dzZXJQZXJmb3JtYW5jZUNsaWVudDogY29ycmVsYXRpb25JZCBmb3IgJHtldmVudE5hbWV9IG5vdCBwcm92aWRlZCwgdW5hYmxlIHRvIGFkZCBxdWV1ZSBtZWFzdXJlbWVudGApO1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNvbnN0IHByZVF1ZXVlVGltZSA9IHN1cGVyLmdldFByZVF1ZXVlVGltZShldmVudE5hbWUsIGNvcnJlbGF0aW9uSWQpO1xyXG4gICAgICAgIGlmICghcHJlUXVldWVUaW1lKSB7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgY29uc3QgY3VycmVudFRpbWUgPSB3aW5kb3cucGVyZm9ybWFuY2Uubm93KCk7XHJcbiAgICAgICAgY29uc3QgcmVzUXVldWVUaW1lID0gcXVldWVUaW1lIHx8IHN1cGVyLmNhbGN1bGF0ZVF1ZXVlZFRpbWUocHJlUXVldWVUaW1lLCBjdXJyZW50VGltZSk7XHJcbiAgICAgICAgcmV0dXJuIHN1cGVyLmFkZFF1ZXVlTWVhc3VyZW1lbnQoZXZlbnROYW1lLCBjb3JyZWxhdGlvbklkLCByZXNRdWV1ZVRpbWUsIG1hbnVhbGx5Q29tcGxldGVkKTtcclxuICAgIH1cclxufVxuXG5leHBvcnQgeyBCcm93c2VyUGVyZm9ybWFuY2VDbGllbnQgfTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPUJyb3dzZXJQZXJmb3JtYW5jZUNsaWVudC5tanMubWFwXG4iLCIvKiEgQGF6dXJlL21zYWwtY29tbW9uIHYxNC4xNi4wIDIwMjQtMTEtMDUgKi9cbid1c2Ugc3RyaWN0JztcbmltcG9ydCB7IGNyZWF0ZUNsaWVudENvbmZpZ3VyYXRpb25FcnJvciB9IGZyb20gJy4uL2Vycm9yL0NsaWVudENvbmZpZ3VyYXRpb25FcnJvci5tanMnO1xuaW1wb3J0IHsgQ29uc3RhbnRzLCBIZWFkZXJOYW1lcyB9IGZyb20gJy4uL3V0aWxzL0NvbnN0YW50cy5tanMnO1xuaW1wb3J0IHsgaW52YWxpZEF1dGhlbnRpY2F0aW9uSGVhZGVyLCBtaXNzaW5nTm9uY2VBdXRoZW50aWNhdGlvbkhlYWRlciB9IGZyb20gJy4uL2Vycm9yL0NsaWVudENvbmZpZ3VyYXRpb25FcnJvckNvZGVzLm1qcyc7XG5cbi8qXHJcbiAqIENvcHlyaWdodCAoYykgTWljcm9zb2Z0IENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLlxyXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgTUlUIExpY2Vuc2UuXHJcbiAqL1xyXG4vKipcclxuICogVGhpcyBpcyBhIGhlbHBlciBjbGFzcyB0aGF0IHBhcnNlcyBzdXBwb3J0ZWQgSFRUUCByZXNwb25zZSBhdXRoZW50aWNhdGlvbiBoZWFkZXJzIHRvIGV4dHJhY3QgYW5kIHJldHVyblxyXG4gKiBoZWFkZXIgY2hhbGxlbmdlIHZhbHVlcyB0aGF0IGNhbiBiZSB1c2VkIG91dHNpZGUgdGhlIGJhc2ljIGF1dGhvcml6YXRpb24gZmxvd3MuXHJcbiAqL1xyXG5jbGFzcyBBdXRoZW50aWNhdGlvbkhlYWRlclBhcnNlciB7XHJcbiAgICBjb25zdHJ1Y3RvcihoZWFkZXJzKSB7XHJcbiAgICAgICAgdGhpcy5oZWFkZXJzID0gaGVhZGVycztcclxuICAgIH1cclxuICAgIC8qKlxyXG4gICAgICogVGhpcyBtZXRob2QgcGFyc2VzIHRoZSBTSFIgbm9uY2UgdmFsdWUgb3V0IG9mIGVpdGhlciB0aGUgQXV0aGVudGljYXRpb24tSW5mbyBvciBXV1ctQXV0aGVudGljYXRlIGF1dGhlbnRpY2F0aW9uIGhlYWRlcnMuXHJcbiAgICAgKiBAcmV0dXJuc1xyXG4gICAgICovXHJcbiAgICBnZXRTaHJOb25jZSgpIHtcclxuICAgICAgICAvLyBBdHRlbXB0IHRvIHBhcnNlIG5vbmNlIGZyb20gQXV0aGVudGlhY2F0aW9uLUluZm9cclxuICAgICAgICBjb25zdCBhdXRoZW50aWNhdGlvbkluZm8gPSB0aGlzLmhlYWRlcnNbSGVhZGVyTmFtZXMuQXV0aGVudGljYXRpb25JbmZvXTtcclxuICAgICAgICBpZiAoYXV0aGVudGljYXRpb25JbmZvKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGF1dGhlbnRpY2F0aW9uSW5mb0NoYWxsZW5nZXMgPSB0aGlzLnBhcnNlQ2hhbGxlbmdlcyhhdXRoZW50aWNhdGlvbkluZm8pO1xyXG4gICAgICAgICAgICBpZiAoYXV0aGVudGljYXRpb25JbmZvQ2hhbGxlbmdlcy5uZXh0bm9uY2UpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiBhdXRoZW50aWNhdGlvbkluZm9DaGFsbGVuZ2VzLm5leHRub25jZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB0aHJvdyBjcmVhdGVDbGllbnRDb25maWd1cmF0aW9uRXJyb3IoaW52YWxpZEF1dGhlbnRpY2F0aW9uSGVhZGVyKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgLy8gQXR0ZW1wdCB0byBwYXJzZSBub25jZSBmcm9tIFdXVy1BdXRoZW50aWNhdGVcclxuICAgICAgICBjb25zdCB3d3dBdXRoZW50aWNhdGUgPSB0aGlzLmhlYWRlcnNbSGVhZGVyTmFtZXMuV1dXQXV0aGVudGljYXRlXTtcclxuICAgICAgICBpZiAod3d3QXV0aGVudGljYXRlKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHd3d0F1dGhlbnRpY2F0ZUNoYWxsZW5nZXMgPSB0aGlzLnBhcnNlQ2hhbGxlbmdlcyh3d3dBdXRoZW50aWNhdGUpO1xyXG4gICAgICAgICAgICBpZiAod3d3QXV0aGVudGljYXRlQ2hhbGxlbmdlcy5ub25jZSkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHd3d0F1dGhlbnRpY2F0ZUNoYWxsZW5nZXMubm9uY2U7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgdGhyb3cgY3JlYXRlQ2xpZW50Q29uZmlndXJhdGlvbkVycm9yKGludmFsaWRBdXRoZW50aWNhdGlvbkhlYWRlcik7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIC8vIElmIG5laXRoZXIgaGVhZGVyIGlzIHByZXNlbnQsIHRocm93IG1pc3NpbmcgaGVhZGVycyBlcnJvclxyXG4gICAgICAgIHRocm93IGNyZWF0ZUNsaWVudENvbmZpZ3VyYXRpb25FcnJvcihtaXNzaW5nTm9uY2VBdXRoZW50aWNhdGlvbkhlYWRlcik7XHJcbiAgICB9XHJcbiAgICAvKipcclxuICAgICAqIFBhcnNlcyBhbiBIVFRQIGhlYWRlcidzIGNoYWxsZW5nZSBzZXQgaW50byBhIGtleS92YWx1ZSBtYXAuXHJcbiAgICAgKiBAcGFyYW0gaGVhZGVyXHJcbiAgICAgKiBAcmV0dXJuc1xyXG4gICAgICovXHJcbiAgICBwYXJzZUNoYWxsZW5nZXMoaGVhZGVyKSB7XHJcbiAgICAgICAgY29uc3Qgc2NoZW1lU2VwYXJhdG9yID0gaGVhZGVyLmluZGV4T2YoXCIgXCIpO1xyXG4gICAgICAgIGNvbnN0IGNoYWxsZW5nZXMgPSBoZWFkZXIuc3Vic3RyKHNjaGVtZVNlcGFyYXRvciArIDEpLnNwbGl0KFwiLFwiKTtcclxuICAgICAgICBjb25zdCBjaGFsbGVuZ2VNYXAgPSB7fTtcclxuICAgICAgICBjaGFsbGVuZ2VzLmZvckVhY2goKGNoYWxsZW5nZSkgPT4ge1xyXG4gICAgICAgICAgICBjb25zdCBba2V5LCB2YWx1ZV0gPSBjaGFsbGVuZ2Uuc3BsaXQoXCI9XCIpO1xyXG4gICAgICAgICAgICAvLyBSZW1vdmUgZXNjYXBlZCBxdW90YXRpb24gbWFya3MgKCcsIFwiKSBmcm9tIGNoYWxsZW5nZSBzdHJpbmcgdG8ga2VlcCBvbmx5IHRoZSBjaGFsbGVuZ2UgdmFsdWVcclxuICAgICAgICAgICAgY2hhbGxlbmdlTWFwW2tleV0gPSB1bmVzY2FwZSh2YWx1ZS5yZXBsYWNlKC9bJ1wiXSsvZywgQ29uc3RhbnRzLkVNUFRZX1NUUklORykpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIHJldHVybiBjaGFsbGVuZ2VNYXA7XHJcbiAgICB9XHJcbn1cblxuZXhwb3J0IHsgQXV0aGVudGljYXRpb25IZWFkZXJQYXJzZXIgfTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPUF1dGhlbnRpY2F0aW9uSGVhZGVyUGFyc2VyLm1qcy5tYXBcbiIsIi8qISBAYXp1cmUvbXNhbC1icm93c2VyIHYzLjI4LjEgMjAyNS0wMS0xNCAqL1xuJ3VzZSBzdHJpY3QnO1xuaW1wb3J0ICogYXMgQnJvd3NlclV0aWxzIGZyb20gJy4vdXRpbHMvQnJvd3NlclV0aWxzLm1qcyc7XG5leHBvcnQgeyBCcm93c2VyVXRpbHMgfTtcbmV4cG9ydCB7IFB1YmxpY0NsaWVudEFwcGxpY2F0aW9uLCBjcmVhdGVOZXN0YWJsZVB1YmxpY0NsaWVudEFwcGxpY2F0aW9uLCBjcmVhdGVTdGFuZGFyZFB1YmxpY0NsaWVudEFwcGxpY2F0aW9uIH0gZnJvbSAnLi9hcHAvUHVibGljQ2xpZW50QXBwbGljYXRpb24ubWpzJztcbmV4cG9ydCB7IFB1YmxpY0NsaWVudE5leHQgfSBmcm9tICcuL2FwcC9QdWJsaWNDbGllbnROZXh0Lm1qcyc7XG5leHBvcnQgeyBERUZBVUxUX0lGUkFNRV9USU1FT1VUX01TIH0gZnJvbSAnLi9jb25maWcvQ29uZmlndXJhdGlvbi5tanMnO1xuZXhwb3J0IHsgQXBpSWQsIEJyb3dzZXJDYWNoZUxvY2F0aW9uLCBDYWNoZUxvb2t1cFBvbGljeSwgSW50ZXJhY3Rpb25TdGF0dXMsIEludGVyYWN0aW9uVHlwZSwgV3JhcHBlclNLVSB9IGZyb20gJy4vdXRpbHMvQnJvd3NlckNvbnN0YW50cy5tanMnO1xuZXhwb3J0IHsgQnJvd3NlckF1dGhFcnJvciwgQnJvd3NlckF1dGhFcnJvck1lc3NhZ2UgfSBmcm9tICcuL2Vycm9yL0Jyb3dzZXJBdXRoRXJyb3IubWpzJztcbmV4cG9ydCB7IEJyb3dzZXJDb25maWd1cmF0aW9uQXV0aEVycm9yLCBCcm93c2VyQ29uZmlndXJhdGlvbkF1dGhFcnJvck1lc3NhZ2UgfSBmcm9tICcuL2Vycm9yL0Jyb3dzZXJDb25maWd1cmF0aW9uQXV0aEVycm9yLm1qcyc7XG5leHBvcnQgeyBzdHViYmVkUHVibGljQ2xpZW50QXBwbGljYXRpb24gfSBmcm9tICcuL2FwcC9JUHVibGljQ2xpZW50QXBwbGljYXRpb24ubWpzJztcbmV4cG9ydCB7IE5hdmlnYXRpb25DbGllbnQgfSBmcm9tICcuL25hdmlnYXRpb24vTmF2aWdhdGlvbkNsaWVudC5tanMnO1xuZXhwb3J0IHsgTWVtb3J5U3RvcmFnZSB9IGZyb20gJy4vY2FjaGUvTWVtb3J5U3RvcmFnZS5tanMnO1xuZXhwb3J0IHsgQnJvd3NlclN0b3JhZ2UgfSBmcm9tICcuL2NhY2hlL0Jyb3dzZXJTdG9yYWdlLm1qcyc7XG5leHBvcnQgeyBMb2NhbFN0b3JhZ2UgfSBmcm9tICcuL2NhY2hlL0xvY2FsU3RvcmFnZS5tanMnO1xuZXhwb3J0IHsgU2Vzc2lvblN0b3JhZ2UgfSBmcm9tICcuL2NhY2hlL1Nlc3Npb25TdG9yYWdlLm1qcyc7XG5leHBvcnQgeyBFdmVudE1lc3NhZ2VVdGlscyB9IGZyb20gJy4vZXZlbnQvRXZlbnRNZXNzYWdlLm1qcyc7XG5leHBvcnQgeyBFdmVudFR5cGUgfSBmcm9tICcuL2V2ZW50L0V2ZW50VHlwZS5tanMnO1xuZXhwb3J0IHsgRXZlbnRIYW5kbGVyIH0gZnJvbSAnLi9ldmVudC9FdmVudEhhbmRsZXIubWpzJztcbmV4cG9ydCB7IFNpZ25lZEh0dHBSZXF1ZXN0IH0gZnJvbSAnLi9jcnlwdG8vU2lnbmVkSHR0cFJlcXVlc3QubWpzJztcbmV4cG9ydCB7IEJyb3dzZXJQZXJmb3JtYW5jZUNsaWVudCB9IGZyb20gJy4vdGVsZW1ldHJ5L0Jyb3dzZXJQZXJmb3JtYW5jZUNsaWVudC5tanMnO1xuZXhwb3J0IHsgQnJvd3NlclBlcmZvcm1hbmNlTWVhc3VyZW1lbnQgfSBmcm9tICcuL3RlbGVtZXRyeS9Ccm93c2VyUGVyZm9ybWFuY2VNZWFzdXJlbWVudC5tanMnO1xuZXhwb3J0IHsgQWNjb3VudEVudGl0eSwgQXV0aEVycm9yLCBBdXRoRXJyb3JDb2RlcywgQXV0aEVycm9yTWVzc2FnZSwgQXV0aGVudGljYXRpb25IZWFkZXJQYXJzZXIsIEF1dGhlbnRpY2F0aW9uU2NoZW1lLCBBenVyZUNsb3VkSW5zdGFuY2UsIENsaWVudEF1dGhFcnJvciwgQ2xpZW50QXV0aEVycm9yQ29kZXMsIENsaWVudEF1dGhFcnJvck1lc3NhZ2UsIENsaWVudENvbmZpZ3VyYXRpb25FcnJvciwgQ2xpZW50Q29uZmlndXJhdGlvbkVycm9yQ29kZXMsIENsaWVudENvbmZpZ3VyYXRpb25FcnJvck1lc3NhZ2UsIEludGVyYWN0aW9uUmVxdWlyZWRBdXRoRXJyb3IsIEludGVyYWN0aW9uUmVxdWlyZWRBdXRoRXJyb3JDb2RlcywgSW50ZXJhY3Rpb25SZXF1aXJlZEF1dGhFcnJvck1lc3NhZ2UsIEpzb25XZWJUb2tlblR5cGVzLCBMb2dMZXZlbCwgTG9nZ2VyLCBPSURDX0RFRkFVTFRfU0NPUEVTLCBQZXJmb3JtYW5jZUV2ZW50cywgUHJvbXB0VmFsdWUsIFByb3RvY29sTW9kZSwgU2VydmVyRXJyb3IsIFNlcnZlclJlc3BvbnNlVHlwZSwgU3RyaW5nVXRpbHMsIFN0dWJQZXJmb3JtYW5jZUNsaWVudCwgVXJsU3RyaW5nIH0gZnJvbSAnQGF6dXJlL21zYWwtY29tbW9uL2Jyb3dzZXInO1xuZXhwb3J0IHsgdmVyc2lvbiB9IGZyb20gJy4vcGFja2FnZU1ldGFkYXRhLm1qcyc7XG5pbXBvcnQgKiBhcyBCcm93c2VyQXV0aEVycm9yQ29kZXMgZnJvbSAnLi9lcnJvci9Ccm93c2VyQXV0aEVycm9yQ29kZXMubWpzJztcbmV4cG9ydCB7IEJyb3dzZXJBdXRoRXJyb3JDb2RlcyB9O1xuaW1wb3J0ICogYXMgQnJvd3NlckNvbmZpZ3VyYXRpb25BdXRoRXJyb3JDb2RlcyBmcm9tICcuL2Vycm9yL0Jyb3dzZXJDb25maWd1cmF0aW9uQXV0aEVycm9yQ29kZXMubWpzJztcbmV4cG9ydCB7IEJyb3dzZXJDb25maWd1cmF0aW9uQXV0aEVycm9yQ29kZXMgfTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWluZGV4Lm1qcy5tYXBcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///8616\n')},8675:(I,g,t)=>{"use strict";I.exports=t.p+"dcf54727e1982cf56604.png"},9033:function(__unused_webpack_module,__unused_webpack_exports,__webpack_require__){eval("//! moment.js locale configuration\n//! locale : English (India) [en-in]\n//! author : Jatin Agrawal : https://github.com/jatinag22\n\n;(function (global, factory) {\n true ? factory(__webpack_require__(95093)) :\n 0\n}(this, (function (moment) { 'use strict';\n\n //! moment.js locale configuration\n\n var enIn = moment.defineLocale('en-in', {\n months: 'January_February_March_April_May_June_July_August_September_October_November_December'.split(\n '_'\n ),\n monthsShort: 'Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec'.split('_'),\n weekdays: 'Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday'.split(\n '_'\n ),\n weekdaysShort: 'Sun_Mon_Tue_Wed_Thu_Fri_Sat'.split('_'),\n weekdaysMin: 'Su_Mo_Tu_We_Th_Fr_Sa'.split('_'),\n longDateFormat: {\n LT: 'h:mm A',\n LTS: 'h:mm:ss A',\n L: 'DD/MM/YYYY',\n LL: 'D MMMM YYYY',\n LLL: 'D MMMM YYYY h:mm A',\n LLLL: 'dddd, D MMMM YYYY h:mm A',\n },\n calendar: {\n sameDay: '[Today at] LT',\n nextDay: '[Tomorrow at] LT',\n nextWeek: 'dddd [at] LT',\n lastDay: '[Yesterday at] LT',\n lastWeek: '[Last] dddd [at] LT',\n sameElse: 'L',\n },\n relativeTime: {\n future: 'in %s',\n past: '%s ago',\n s: 'a few seconds',\n ss: '%d seconds',\n m: 'a minute',\n mm: '%d minutes',\n h: 'an hour',\n hh: '%d hours',\n d: 'a day',\n dd: '%d days',\n M: 'a month',\n MM: '%d months',\n y: 'a year',\n yy: '%d years',\n },\n dayOfMonthOrdinalParse: /\\d{1,2}(st|nd|rd|th)/,\n ordinal: function (number) {\n var b = number % 10,\n output =\n ~~((number % 100) / 10) === 1\n ? 'th'\n : b === 1\n ? 'st'\n : b === 2\n ? 'nd'\n : b === 3\n ? 'rd'\n : 'th';\n return number + output;\n },\n week: {\n dow: 0, // Sunday is the first day of the week.\n doy: 6, // The week that contains Jan 1st is the first week of the year.\n },\n });\n\n return enIn;\n\n})));\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiOTAzMy5qcyIsIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vaXRnLW5leHRnZW4tZnJvbnRlbmQvLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9lbi1pbi5qcz9lYzJlIl0sInNvdXJjZXNDb250ZW50IjpbIi8vISBtb21lbnQuanMgbG9jYWxlIGNvbmZpZ3VyYXRpb25cbi8vISBsb2NhbGUgOiBFbmdsaXNoIChJbmRpYSkgW2VuLWluXVxuLy8hIGF1dGhvciA6IEphdGluIEFncmF3YWwgOiBodHRwczovL2dpdGh1Yi5jb20vamF0aW5hZzIyXG5cbjsoZnVuY3Rpb24gKGdsb2JhbCwgZmFjdG9yeSkge1xuICAgdHlwZW9mIGV4cG9ydHMgPT09ICdvYmplY3QnICYmIHR5cGVvZiBtb2R1bGUgIT09ICd1bmRlZmluZWQnXG4gICAgICAgJiYgdHlwZW9mIHJlcXVpcmUgPT09ICdmdW5jdGlvbicgPyBmYWN0b3J5KHJlcXVpcmUoJy4uL21vbWVudCcpKSA6XG4gICB0eXBlb2YgZGVmaW5lID09PSAnZnVuY3Rpb24nICYmIGRlZmluZS5hbWQgPyBkZWZpbmUoWycuLi9tb21lbnQnXSwgZmFjdG9yeSkgOlxuICAgZmFjdG9yeShnbG9iYWwubW9tZW50KVxufSh0aGlzLCAoZnVuY3Rpb24gKG1vbWVudCkgeyAndXNlIHN0cmljdCc7XG5cbiAgICAvLyEgbW9tZW50LmpzIGxvY2FsZSBjb25maWd1cmF0aW9uXG5cbiAgICB2YXIgZW5JbiA9IG1vbWVudC5kZWZpbmVMb2NhbGUoJ2VuLWluJywge1xuICAgICAgICBtb250aHM6ICdKYW51YXJ5X0ZlYnJ1YXJ5X01hcmNoX0FwcmlsX01heV9KdW5lX0p1bHlfQXVndXN0X1NlcHRlbWJlcl9PY3RvYmVyX05vdmVtYmVyX0RlY2VtYmVyJy5zcGxpdChcbiAgICAgICAgICAgICdfJ1xuICAgICAgICApLFxuICAgICAgICBtb250aHNTaG9ydDogJ0phbl9GZWJfTWFyX0Fwcl9NYXlfSnVuX0p1bF9BdWdfU2VwX09jdF9Ob3ZfRGVjJy5zcGxpdCgnXycpLFxuICAgICAgICB3ZWVrZGF5czogJ1N1bmRheV9Nb25kYXlfVHVlc2RheV9XZWRuZXNkYXlfVGh1cnNkYXlfRnJpZGF5X1NhdHVyZGF5Jy5zcGxpdChcbiAgICAgICAgICAgICdfJ1xuICAgICAgICApLFxuICAgICAgICB3ZWVrZGF5c1Nob3J0OiAnU3VuX01vbl9UdWVfV2VkX1RodV9GcmlfU2F0Jy5zcGxpdCgnXycpLFxuICAgICAgICB3ZWVrZGF5c01pbjogJ1N1X01vX1R1X1dlX1RoX0ZyX1NhJy5zcGxpdCgnXycpLFxuICAgICAgICBsb25nRGF0ZUZvcm1hdDoge1xuICAgICAgICAgICAgTFQ6ICdoOm1tIEEnLFxuICAgICAgICAgICAgTFRTOiAnaDptbTpzcyBBJyxcbiAgICAgICAgICAgIEw6ICdERC9NTS9ZWVlZJyxcbiAgICAgICAgICAgIExMOiAnRCBNTU1NIFlZWVknLFxuICAgICAgICAgICAgTExMOiAnRCBNTU1NIFlZWVkgaDptbSBBJyxcbiAgICAgICAgICAgIExMTEw6ICdkZGRkLCBEIE1NTU0gWVlZWSBoOm1tIEEnLFxuICAgICAgICB9LFxuICAgICAgICBjYWxlbmRhcjoge1xuICAgICAgICAgICAgc2FtZURheTogJ1tUb2RheSBhdF0gTFQnLFxuICAgICAgICAgICAgbmV4dERheTogJ1tUb21vcnJvdyBhdF0gTFQnLFxuICAgICAgICAgICAgbmV4dFdlZWs6ICdkZGRkIFthdF0gTFQnLFxuICAgICAgICAgICAgbGFzdERheTogJ1tZZXN0ZXJkYXkgYXRdIExUJyxcbiAgICAgICAgICAgIGxhc3RXZWVrOiAnW0xhc3RdIGRkZGQgW2F0XSBMVCcsXG4gICAgICAgICAgICBzYW1lRWxzZTogJ0wnLFxuICAgICAgICB9LFxuICAgICAgICByZWxhdGl2ZVRpbWU6IHtcbiAgICAgICAgICAgIGZ1dHVyZTogJ2luICVzJyxcbiAgICAgICAgICAgIHBhc3Q6ICclcyBhZ28nLFxuICAgICAgICAgICAgczogJ2EgZmV3IHNlY29uZHMnLFxuICAgICAgICAgICAgc3M6ICclZCBzZWNvbmRzJyxcbiAgICAgICAgICAgIG06ICdhIG1pbnV0ZScsXG4gICAgICAgICAgICBtbTogJyVkIG1pbnV0ZXMnLFxuICAgICAgICAgICAgaDogJ2FuIGhvdXInLFxuICAgICAgICAgICAgaGg6ICclZCBob3VycycsXG4gICAgICAgICAgICBkOiAnYSBkYXknLFxuICAgICAgICAgICAgZGQ6ICclZCBkYXlzJyxcbiAgICAgICAgICAgIE06ICdhIG1vbnRoJyxcbiAgICAgICAgICAgIE1NOiAnJWQgbW9udGhzJyxcbiAgICAgICAgICAgIHk6ICdhIHllYXInLFxuICAgICAgICAgICAgeXk6ICclZCB5ZWFycycsXG4gICAgICAgIH0sXG4gICAgICAgIGRheU9mTW9udGhPcmRpbmFsUGFyc2U6IC9cXGR7MSwyfShzdHxuZHxyZHx0aCkvLFxuICAgICAgICBvcmRpbmFsOiBmdW5jdGlvbiAobnVtYmVyKSB7XG4gICAgICAgICAgICB2YXIgYiA9IG51bWJlciAlIDEwLFxuICAgICAgICAgICAgICAgIG91dHB1dCA9XG4gICAgICAgICAgICAgICAgICAgIH5+KChudW1iZXIgJSAxMDApIC8gMTApID09PSAxXG4gICAgICAgICAgICAgICAgICAgICAgICA/ICd0aCdcbiAgICAgICAgICAgICAgICAgICAgICAgIDogYiA9PT0gMVxuICAgICAgICAgICAgICAgICAgICAgICAgICA/ICdzdCdcbiAgICAgICAgICAgICAgICAgICAgICAgICAgOiBiID09PSAyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPyAnbmQnXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBiID09PSAzXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/ICdyZCdcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogJ3RoJztcbiAgICAgICAgICAgIHJldHVybiBudW1iZXIgKyBvdXRwdXQ7XG4gICAgICAgIH0sXG4gICAgICAgIHdlZWs6IHtcbiAgICAgICAgICAgIGRvdzogMCwgLy8gU3VuZGF5IGlzIHRoZSBmaXJzdCBkYXkgb2YgdGhlIHdlZWsuXG4gICAgICAgICAgICBkb3k6IDYsIC8vIFRoZSB3ZWVrIHRoYXQgY29udGFpbnMgSmFuIDFzdCBpcyB0aGUgZmlyc3Qgd2VlayBvZiB0aGUgeWVhci5cbiAgICAgICAgfSxcbiAgICB9KTtcblxuICAgIHJldHVybiBlbkluO1xuXG59KSkpO1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///9033\n")},9423:(module,__webpack_exports__,__webpack_require__)=>{"use strict";eval("\n// EXPORTS\n__webpack_require__.d(__webpack_exports__, {\n A: () => (/* binding */ es)\n});\n\n;// ./node_modules/symbol-observable/es/ponyfill.js\nfunction symbolObservablePonyfill(root) {\n\tvar result;\n\tvar Symbol = root.Symbol;\n\n\tif (typeof Symbol === 'function') {\n\t\tif (Symbol.observable) {\n\t\t\tresult = Symbol.observable;\n\t\t} else {\n\t\t\tresult = Symbol('observable');\n\t\t\tSymbol.observable = result;\n\t\t}\n\t} else {\n\t\tresult = '@@observable';\n\t}\n\n\treturn result;\n};\n\n;// ./node_modules/symbol-observable/es/index.js\n/* module decorator */ module = __webpack_require__.hmd(module);\n/* global window */\n\n\nvar root;\n\nif (typeof self !== 'undefined') {\n root = self;\n} else if (typeof window !== 'undefined') {\n root = window;\n} else if (typeof __webpack_require__.g !== 'undefined') {\n root = __webpack_require__.g;\n} else if (true) {\n root = module;\n} else {}\n\nvar result = symbolObservablePonyfill(root);\n/* harmony default export */ const es = (result);\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiOTQyMy5qcyIsIm1hcHBpbmdzIjoiOzs7Ozs7O0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7OztBQ2hCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBR0E7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vaXRnLW5leHRnZW4tZnJvbnRlbmQvLi9ub2RlX21vZHVsZXMvc3ltYm9sLW9ic2VydmFibGUvZXMvcG9ueWZpbGwuanM/NDhiNSIsIndlYnBhY2s6Ly9pdGctbmV4dGdlbi1mcm9udGVuZC8uL25vZGVfbW9kdWxlcy9zeW1ib2wtb2JzZXJ2YWJsZS9lcy9pbmRleC5qcz82YzIwIl0sInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHN5bWJvbE9ic2VydmFibGVQb255ZmlsbChyb290KSB7XG5cdHZhciByZXN1bHQ7XG5cdHZhciBTeW1ib2wgPSByb290LlN5bWJvbDtcblxuXHRpZiAodHlwZW9mIFN5bWJvbCA9PT0gJ2Z1bmN0aW9uJykge1xuXHRcdGlmIChTeW1ib2wub2JzZXJ2YWJsZSkge1xuXHRcdFx0cmVzdWx0ID0gU3ltYm9sLm9ic2VydmFibGU7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHJlc3VsdCA9IFN5bWJvbCgnb2JzZXJ2YWJsZScpO1xuXHRcdFx0U3ltYm9sLm9ic2VydmFibGUgPSByZXN1bHQ7XG5cdFx0fVxuXHR9IGVsc2Uge1xuXHRcdHJlc3VsdCA9ICdAQG9ic2VydmFibGUnO1xuXHR9XG5cblx0cmV0dXJuIHJlc3VsdDtcbn07XG4iLCIvKiBnbG9iYWwgd2luZG93ICovXG5pbXBvcnQgcG9ueWZpbGwgZnJvbSAnLi9wb255ZmlsbC5qcyc7XG5cbnZhciByb290O1xuXG5pZiAodHlwZW9mIHNlbGYgIT09ICd1bmRlZmluZWQnKSB7XG4gIHJvb3QgPSBzZWxmO1xufSBlbHNlIGlmICh0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJykge1xuICByb290ID0gd2luZG93O1xufSBlbHNlIGlmICh0eXBlb2YgZ2xvYmFsICE9PSAndW5kZWZpbmVkJykge1xuICByb290ID0gZ2xvYmFsO1xufSBlbHNlIGlmICh0eXBlb2YgbW9kdWxlICE9PSAndW5kZWZpbmVkJykge1xuICByb290ID0gbW9kdWxlO1xufSBlbHNlIHtcbiAgcm9vdCA9IEZ1bmN0aW9uKCdyZXR1cm4gdGhpcycpKCk7XG59XG5cbnZhciByZXN1bHQgPSBwb255ZmlsbChyb290KTtcbmV4cG9ydCBkZWZhdWx0IHJlc3VsdDtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///9423\n")},9516:(module,__unused_webpack_exports,__webpack_require__)=>{"use strict";eval("\n\nvar bind = __webpack_require__(69012);\n\n// utils is a library of generic helper functions non-specific to axios\n\nvar toString = Object.prototype.toString;\n\n/**\n * Determine if a value is an Array\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is an Array, otherwise false\n */\nfunction isArray(val) {\n return Array.isArray(val);\n}\n\n/**\n * Determine if a value is undefined\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if the value is undefined, otherwise false\n */\nfunction isUndefined(val) {\n return typeof val === 'undefined';\n}\n\n/**\n * Determine if a value is a Buffer\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is a Buffer, otherwise false\n */\nfunction isBuffer(val) {\n return val !== null && !isUndefined(val) && val.constructor !== null && !isUndefined(val.constructor)\n && typeof val.constructor.isBuffer === 'function' && val.constructor.isBuffer(val);\n}\n\n/**\n * Determine if a value is an ArrayBuffer\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is an ArrayBuffer, otherwise false\n */\nfunction isArrayBuffer(val) {\n return toString.call(val) === '[object ArrayBuffer]';\n}\n\n/**\n * Determine if a value is a FormData\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is an FormData, otherwise false\n */\nfunction isFormData(val) {\n return toString.call(val) === '[object FormData]';\n}\n\n/**\n * Determine if a value is a view on an ArrayBuffer\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is a view on an ArrayBuffer, otherwise false\n */\nfunction isArrayBufferView(val) {\n var result;\n if ((typeof ArrayBuffer !== 'undefined') && (ArrayBuffer.isView)) {\n result = ArrayBuffer.isView(val);\n } else {\n result = (val) && (val.buffer) && (isArrayBuffer(val.buffer));\n }\n return result;\n}\n\n/**\n * Determine if a value is a String\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is a String, otherwise false\n */\nfunction isString(val) {\n return typeof val === 'string';\n}\n\n/**\n * Determine if a value is a Number\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is a Number, otherwise false\n */\nfunction isNumber(val) {\n return typeof val === 'number';\n}\n\n/**\n * Determine if a value is an Object\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is an Object, otherwise false\n */\nfunction isObject(val) {\n return val !== null && typeof val === 'object';\n}\n\n/**\n * Determine if a value is a plain Object\n *\n * @param {Object} val The value to test\n * @return {boolean} True if value is a plain Object, otherwise false\n */\nfunction isPlainObject(val) {\n if (toString.call(val) !== '[object Object]') {\n return false;\n }\n\n var prototype = Object.getPrototypeOf(val);\n return prototype === null || prototype === Object.prototype;\n}\n\n/**\n * Determine if a value is a Date\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is a Date, otherwise false\n */\nfunction isDate(val) {\n return toString.call(val) === '[object Date]';\n}\n\n/**\n * Determine if a value is a File\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is a File, otherwise false\n */\nfunction isFile(val) {\n return toString.call(val) === '[object File]';\n}\n\n/**\n * Determine if a value is a Blob\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is a Blob, otherwise false\n */\nfunction isBlob(val) {\n return toString.call(val) === '[object Blob]';\n}\n\n/**\n * Determine if a value is a Function\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is a Function, otherwise false\n */\nfunction isFunction(val) {\n return toString.call(val) === '[object Function]';\n}\n\n/**\n * Determine if a value is a Stream\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is a Stream, otherwise false\n */\nfunction isStream(val) {\n return isObject(val) && isFunction(val.pipe);\n}\n\n/**\n * Determine if a value is a URLSearchParams object\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is a URLSearchParams object, otherwise false\n */\nfunction isURLSearchParams(val) {\n return toString.call(val) === '[object URLSearchParams]';\n}\n\n/**\n * Trim excess whitespace off the beginning and end of a string\n *\n * @param {String} str The String to trim\n * @returns {String} The String freed of excess whitespace\n */\nfunction trim(str) {\n return str.trim ? str.trim() : str.replace(/^\\s+|\\s+$/g, '');\n}\n\n/**\n * Determine if we're running in a standard browser environment\n *\n * This allows axios to run in a web worker, and react-native.\n * Both environments support XMLHttpRequest, but not fully standard globals.\n *\n * web workers:\n * typeof window -> undefined\n * typeof document -> undefined\n *\n * react-native:\n * navigator.product -> 'ReactNative'\n * nativescript\n * navigator.product -> 'NativeScript' or 'NS'\n */\nfunction isStandardBrowserEnv() {\n if (typeof navigator !== 'undefined' && (navigator.product === 'ReactNative' ||\n navigator.product === 'NativeScript' ||\n navigator.product === 'NS')) {\n return false;\n }\n return (\n typeof window !== 'undefined' &&\n typeof document !== 'undefined'\n );\n}\n\n/**\n * Iterate over an Array or an Object invoking a function for each item.\n *\n * If `obj` is an Array callback will be called passing\n * the value, index, and complete array for each item.\n *\n * If 'obj' is an Object callback will be called passing\n * the value, key, and complete object for each property.\n *\n * @param {Object|Array} obj The object to iterate\n * @param {Function} fn The callback to invoke for each item\n */\nfunction forEach(obj, fn) {\n // Don't bother if no value provided\n if (obj === null || typeof obj === 'undefined') {\n return;\n }\n\n // Force an array if not already something iterable\n if (typeof obj !== 'object') {\n /*eslint no-param-reassign:0*/\n obj = [obj];\n }\n\n if (isArray(obj)) {\n // Iterate over array values\n for (var i = 0, l = obj.length; i < l; i++) {\n fn.call(null, obj[i], i, obj);\n }\n } else {\n // Iterate over object keys\n for (var key in obj) {\n if (Object.prototype.hasOwnProperty.call(obj, key)) {\n fn.call(null, obj[key], key, obj);\n }\n }\n }\n}\n\n/**\n * Accepts varargs expecting each argument to be an object, then\n * immutably merges the properties of each object and returns result.\n *\n * When multiple objects contain the same key the later object in\n * the arguments list will take precedence.\n *\n * Example:\n *\n * ```js\n * var result = merge({foo: 123}, {foo: 456});\n * console.log(result.foo); // outputs 456\n * ```\n *\n * @param {Object} obj1 Object to merge\n * @returns {Object} Result of all merge properties\n */\nfunction merge(/* obj1, obj2, obj3, ... */) {\n var result = {};\n function assignValue(val, key) {\n if (isPlainObject(result[key]) && isPlainObject(val)) {\n result[key] = merge(result[key], val);\n } else if (isPlainObject(val)) {\n result[key] = merge({}, val);\n } else if (isArray(val)) {\n result[key] = val.slice();\n } else {\n result[key] = val;\n }\n }\n\n for (var i = 0, l = arguments.length; i < l; i++) {\n forEach(arguments[i], assignValue);\n }\n return result;\n}\n\n/**\n * Extends object a by mutably adding to it the properties of object b.\n *\n * @param {Object} a The object to be extended\n * @param {Object} b The object to copy properties from\n * @param {Object} thisArg The object to bind function to\n * @return {Object} The resulting value of object a\n */\nfunction extend(a, b, thisArg) {\n forEach(b, function assignValue(val, key) {\n if (thisArg && typeof val === 'function') {\n a[key] = bind(val, thisArg);\n } else {\n a[key] = val;\n }\n });\n return a;\n}\n\n/**\n * Remove byte order marker. This catches EF BB BF (the UTF-8 BOM)\n *\n * @param {string} content with BOM\n * @return {string} content value without BOM\n */\nfunction stripBOM(content) {\n if (content.charCodeAt(0) === 0xFEFF) {\n content = content.slice(1);\n }\n return content;\n}\n\nmodule.exports = {\n isArray: isArray,\n isArrayBuffer: isArrayBuffer,\n isBuffer: isBuffer,\n isFormData: isFormData,\n isArrayBufferView: isArrayBufferView,\n isString: isString,\n isNumber: isNumber,\n isObject: isObject,\n isPlainObject: isPlainObject,\n isUndefined: isUndefined,\n isDate: isDate,\n isFile: isFile,\n isBlob: isBlob,\n isFunction: isFunction,\n isStream: isStream,\n isURLSearchParams: isURLSearchParams,\n isStandardBrowserEnv: isStandardBrowserEnv,\n forEach: forEach,\n merge: merge,\n extend: extend,\n trim: trim,\n stripBOM: stripBOM\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiOTUxNi5qcyIsIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL2l0Zy1uZXh0Z2VuLWZyb250ZW5kLy4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi91dGlscy5qcz9jNTMyIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIGJpbmQgPSByZXF1aXJlKCcuL2hlbHBlcnMvYmluZCcpO1xuXG4vLyB1dGlscyBpcyBhIGxpYnJhcnkgb2YgZ2VuZXJpYyBoZWxwZXIgZnVuY3Rpb25zIG5vbi1zcGVjaWZpYyB0byBheGlvc1xuXG52YXIgdG9TdHJpbmcgPSBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nO1xuXG4vKipcbiAqIERldGVybWluZSBpZiBhIHZhbHVlIGlzIGFuIEFycmF5XG4gKlxuICogQHBhcmFtIHtPYmplY3R9IHZhbCBUaGUgdmFsdWUgdG8gdGVzdFxuICogQHJldHVybnMge2Jvb2xlYW59IFRydWUgaWYgdmFsdWUgaXMgYW4gQXJyYXksIG90aGVyd2lzZSBmYWxzZVxuICovXG5mdW5jdGlvbiBpc0FycmF5KHZhbCkge1xuICByZXR1cm4gQXJyYXkuaXNBcnJheSh2YWwpO1xufVxuXG4vKipcbiAqIERldGVybWluZSBpZiBhIHZhbHVlIGlzIHVuZGVmaW5lZFxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSB2YWwgVGhlIHZhbHVlIHRvIHRlc3RcbiAqIEByZXR1cm5zIHtib29sZWFufSBUcnVlIGlmIHRoZSB2YWx1ZSBpcyB1bmRlZmluZWQsIG90aGVyd2lzZSBmYWxzZVxuICovXG5mdW5jdGlvbiBpc1VuZGVmaW5lZCh2YWwpIHtcbiAgcmV0dXJuIHR5cGVvZiB2YWwgPT09ICd1bmRlZmluZWQnO1xufVxuXG4vKipcbiAqIERldGVybWluZSBpZiBhIHZhbHVlIGlzIGEgQnVmZmVyXG4gKlxuICogQHBhcmFtIHtPYmplY3R9IHZhbCBUaGUgdmFsdWUgdG8gdGVzdFxuICogQHJldHVybnMge2Jvb2xlYW59IFRydWUgaWYgdmFsdWUgaXMgYSBCdWZmZXIsIG90aGVyd2lzZSBmYWxzZVxuICovXG5mdW5jdGlvbiBpc0J1ZmZlcih2YWwpIHtcbiAgcmV0dXJuIHZhbCAhPT0gbnVsbCAmJiAhaXNVbmRlZmluZWQodmFsKSAmJiB2YWwuY29uc3RydWN0b3IgIT09IG51bGwgJiYgIWlzVW5kZWZpbmVkKHZhbC5jb25zdHJ1Y3RvcilcbiAgICAmJiB0eXBlb2YgdmFsLmNvbnN0cnVjdG9yLmlzQnVmZmVyID09PSAnZnVuY3Rpb24nICYmIHZhbC5jb25zdHJ1Y3Rvci5pc0J1ZmZlcih2YWwpO1xufVxuXG4vKipcbiAqIERldGVybWluZSBpZiBhIHZhbHVlIGlzIGFuIEFycmF5QnVmZmVyXG4gKlxuICogQHBhcmFtIHtPYmplY3R9IHZhbCBUaGUgdmFsdWUgdG8gdGVzdFxuICogQHJldHVybnMge2Jvb2xlYW59IFRydWUgaWYgdmFsdWUgaXMgYW4gQXJyYXlCdWZmZXIsIG90aGVyd2lzZSBmYWxzZVxuICovXG5mdW5jdGlvbiBpc0FycmF5QnVmZmVyKHZhbCkge1xuICByZXR1cm4gdG9TdHJpbmcuY2FsbCh2YWwpID09PSAnW29iamVjdCBBcnJheUJ1ZmZlcl0nO1xufVxuXG4vKipcbiAqIERldGVybWluZSBpZiBhIHZhbHVlIGlzIGEgRm9ybURhdGFcbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gdmFsIFRoZSB2YWx1ZSB0byB0ZXN0XG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gVHJ1ZSBpZiB2YWx1ZSBpcyBhbiBGb3JtRGF0YSwgb3RoZXJ3aXNlIGZhbHNlXG4gKi9cbmZ1bmN0aW9uIGlzRm9ybURhdGEodmFsKSB7XG4gIHJldHVybiB0b1N0cmluZy5jYWxsKHZhbCkgPT09ICdbb2JqZWN0IEZvcm1EYXRhXSc7XG59XG5cbi8qKlxuICogRGV0ZXJtaW5lIGlmIGEgdmFsdWUgaXMgYSB2aWV3IG9uIGFuIEFycmF5QnVmZmVyXG4gKlxuICogQHBhcmFtIHtPYmplY3R9IHZhbCBUaGUgdmFsdWUgdG8gdGVzdFxuICogQHJldHVybnMge2Jvb2xlYW59IFRydWUgaWYgdmFsdWUgaXMgYSB2aWV3IG9uIGFuIEFycmF5QnVmZmVyLCBvdGhlcndpc2UgZmFsc2VcbiAqL1xuZnVuY3Rpb24gaXNBcnJheUJ1ZmZlclZpZXcodmFsKSB7XG4gIHZhciByZXN1bHQ7XG4gIGlmICgodHlwZW9mIEFycmF5QnVmZmVyICE9PSAndW5kZWZpbmVkJykgJiYgKEFycmF5QnVmZmVyLmlzVmlldykpIHtcbiAgICByZXN1bHQgPSBBcnJheUJ1ZmZlci5pc1ZpZXcodmFsKTtcbiAgfSBlbHNlIHtcbiAgICByZXN1bHQgPSAodmFsKSAmJiAodmFsLmJ1ZmZlcikgJiYgKGlzQXJyYXlCdWZmZXIodmFsLmJ1ZmZlcikpO1xuICB9XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbi8qKlxuICogRGV0ZXJtaW5lIGlmIGEgdmFsdWUgaXMgYSBTdHJpbmdcbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gdmFsIFRoZSB2YWx1ZSB0byB0ZXN0XG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gVHJ1ZSBpZiB2YWx1ZSBpcyBhIFN0cmluZywgb3RoZXJ3aXNlIGZhbHNlXG4gKi9cbmZ1bmN0aW9uIGlzU3RyaW5nKHZhbCkge1xuICByZXR1cm4gdHlwZW9mIHZhbCA9PT0gJ3N0cmluZyc7XG59XG5cbi8qKlxuICogRGV0ZXJtaW5lIGlmIGEgdmFsdWUgaXMgYSBOdW1iZXJcbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gdmFsIFRoZSB2YWx1ZSB0byB0ZXN0XG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gVHJ1ZSBpZiB2YWx1ZSBpcyBhIE51bWJlciwgb3RoZXJ3aXNlIGZhbHNlXG4gKi9cbmZ1bmN0aW9uIGlzTnVtYmVyKHZhbCkge1xuICByZXR1cm4gdHlwZW9mIHZhbCA9PT0gJ251bWJlcic7XG59XG5cbi8qKlxuICogRGV0ZXJtaW5lIGlmIGEgdmFsdWUgaXMgYW4gT2JqZWN0XG4gKlxuICogQHBhcmFtIHtPYmplY3R9IHZhbCBUaGUgdmFsdWUgdG8gdGVzdFxuICogQHJldHVybnMge2Jvb2xlYW59IFRydWUgaWYgdmFsdWUgaXMgYW4gT2JqZWN0LCBvdGhlcndpc2UgZmFsc2VcbiAqL1xuZnVuY3Rpb24gaXNPYmplY3QodmFsKSB7XG4gIHJldHVybiB2YWwgIT09IG51bGwgJiYgdHlwZW9mIHZhbCA9PT0gJ29iamVjdCc7XG59XG5cbi8qKlxuICogRGV0ZXJtaW5lIGlmIGEgdmFsdWUgaXMgYSBwbGFpbiBPYmplY3RcbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gdmFsIFRoZSB2YWx1ZSB0byB0ZXN0XG4gKiBAcmV0dXJuIHtib29sZWFufSBUcnVlIGlmIHZhbHVlIGlzIGEgcGxhaW4gT2JqZWN0LCBvdGhlcndpc2UgZmFsc2VcbiAqL1xuZnVuY3Rpb24gaXNQbGFpbk9iamVjdCh2YWwpIHtcbiAgaWYgKHRvU3RyaW5nLmNhbGwodmFsKSAhPT0gJ1tvYmplY3QgT2JqZWN0XScpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICB2YXIgcHJvdG90eXBlID0gT2JqZWN0LmdldFByb3RvdHlwZU9mKHZhbCk7XG4gIHJldHVybiBwcm90b3R5cGUgPT09IG51bGwgfHwgcHJvdG90eXBlID09PSBPYmplY3QucHJvdG90eXBlO1xufVxuXG4vKipcbiAqIERldGVybWluZSBpZiBhIHZhbHVlIGlzIGEgRGF0ZVxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSB2YWwgVGhlIHZhbHVlIHRvIHRlc3RcbiAqIEByZXR1cm5zIHtib29sZWFufSBUcnVlIGlmIHZhbHVlIGlzIGEgRGF0ZSwgb3RoZXJ3aXNlIGZhbHNlXG4gKi9cbmZ1bmN0aW9uIGlzRGF0ZSh2YWwpIHtcbiAgcmV0dXJuIHRvU3RyaW5nLmNhbGwodmFsKSA9PT0gJ1tvYmplY3QgRGF0ZV0nO1xufVxuXG4vKipcbiAqIERldGVybWluZSBpZiBhIHZhbHVlIGlzIGEgRmlsZVxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSB2YWwgVGhlIHZhbHVlIHRvIHRlc3RcbiAqIEByZXR1cm5zIHtib29sZWFufSBUcnVlIGlmIHZhbHVlIGlzIGEgRmlsZSwgb3RoZXJ3aXNlIGZhbHNlXG4gKi9cbmZ1bmN0aW9uIGlzRmlsZSh2YWwpIHtcbiAgcmV0dXJuIHRvU3RyaW5nLmNhbGwodmFsKSA9PT0gJ1tvYmplY3QgRmlsZV0nO1xufVxuXG4vKipcbiAqIERldGVybWluZSBpZiBhIHZhbHVlIGlzIGEgQmxvYlxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSB2YWwgVGhlIHZhbHVlIHRvIHRlc3RcbiAqIEByZXR1cm5zIHtib29sZWFufSBUcnVlIGlmIHZhbHVlIGlzIGEgQmxvYiwgb3RoZXJ3aXNlIGZhbHNlXG4gKi9cbmZ1bmN0aW9uIGlzQmxvYih2YWwpIHtcbiAgcmV0dXJuIHRvU3RyaW5nLmNhbGwodmFsKSA9PT0gJ1tvYmplY3QgQmxvYl0nO1xufVxuXG4vKipcbiAqIERldGVybWluZSBpZiBhIHZhbHVlIGlzIGEgRnVuY3Rpb25cbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gdmFsIFRoZSB2YWx1ZSB0byB0ZXN0XG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gVHJ1ZSBpZiB2YWx1ZSBpcyBhIEZ1bmN0aW9uLCBvdGhlcndpc2UgZmFsc2VcbiAqL1xuZnVuY3Rpb24gaXNGdW5jdGlvbih2YWwpIHtcbiAgcmV0dXJuIHRvU3RyaW5nLmNhbGwodmFsKSA9PT0gJ1tvYmplY3QgRnVuY3Rpb25dJztcbn1cblxuLyoqXG4gKiBEZXRlcm1pbmUgaWYgYSB2YWx1ZSBpcyBhIFN0cmVhbVxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSB2YWwgVGhlIHZhbHVlIHRvIHRlc3RcbiAqIEByZXR1cm5zIHtib29sZWFufSBUcnVlIGlmIHZhbHVlIGlzIGEgU3RyZWFtLCBvdGhlcndpc2UgZmFsc2VcbiAqL1xuZnVuY3Rpb24gaXNTdHJlYW0odmFsKSB7XG4gIHJldHVybiBpc09iamVjdCh2YWwpICYmIGlzRnVuY3Rpb24odmFsLnBpcGUpO1xufVxuXG4vKipcbiAqIERldGVybWluZSBpZiBhIHZhbHVlIGlzIGEgVVJMU2VhcmNoUGFyYW1zIG9iamVjdFxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSB2YWwgVGhlIHZhbHVlIHRvIHRlc3RcbiAqIEByZXR1cm5zIHtib29sZWFufSBUcnVlIGlmIHZhbHVlIGlzIGEgVVJMU2VhcmNoUGFyYW1zIG9iamVjdCwgb3RoZXJ3aXNlIGZhbHNlXG4gKi9cbmZ1bmN0aW9uIGlzVVJMU2VhcmNoUGFyYW1zKHZhbCkge1xuICByZXR1cm4gdG9TdHJpbmcuY2FsbCh2YWwpID09PSAnW29iamVjdCBVUkxTZWFyY2hQYXJhbXNdJztcbn1cblxuLyoqXG4gKiBUcmltIGV4Y2VzcyB3aGl0ZXNwYWNlIG9mZiB0aGUgYmVnaW5uaW5nIGFuZCBlbmQgb2YgYSBzdHJpbmdcbiAqXG4gKiBAcGFyYW0ge1N0cmluZ30gc3RyIFRoZSBTdHJpbmcgdG8gdHJpbVxuICogQHJldHVybnMge1N0cmluZ30gVGhlIFN0cmluZyBmcmVlZCBvZiBleGNlc3Mgd2hpdGVzcGFjZVxuICovXG5mdW5jdGlvbiB0cmltKHN0cikge1xuICByZXR1cm4gc3RyLnRyaW0gPyBzdHIudHJpbSgpIDogc3RyLnJlcGxhY2UoL15cXHMrfFxccyskL2csICcnKTtcbn1cblxuLyoqXG4gKiBEZXRlcm1pbmUgaWYgd2UncmUgcnVubmluZyBpbiBhIHN0YW5kYXJkIGJyb3dzZXIgZW52aXJvbm1lbnRcbiAqXG4gKiBUaGlzIGFsbG93cyBheGlvcyB0byBydW4gaW4gYSB3ZWIgd29ya2VyLCBhbmQgcmVhY3QtbmF0aXZlLlxuICogQm90aCBlbnZpcm9ubWVudHMgc3VwcG9ydCBYTUxIdHRwUmVxdWVzdCwgYnV0IG5vdCBmdWxseSBzdGFuZGFyZCBnbG9iYWxzLlxuICpcbiAqIHdlYiB3b3JrZXJzOlxuICogIHR5cGVvZiB3aW5kb3cgLT4gdW5kZWZpbmVkXG4gKiAgdHlwZW9mIGRvY3VtZW50IC0+IHVuZGVmaW5lZFxuICpcbiAqIHJlYWN0LW5hdGl2ZTpcbiAqICBuYXZpZ2F0b3IucHJvZHVjdCAtPiAnUmVhY3ROYXRpdmUnXG4gKiBuYXRpdmVzY3JpcHRcbiAqICBuYXZpZ2F0b3IucHJvZHVjdCAtPiAnTmF0aXZlU2NyaXB0JyBvciAnTlMnXG4gKi9cbmZ1bmN0aW9uIGlzU3RhbmRhcmRCcm93c2VyRW52KCkge1xuICBpZiAodHlwZW9mIG5hdmlnYXRvciAhPT0gJ3VuZGVmaW5lZCcgJiYgKG5hdmlnYXRvci5wcm9kdWN0ID09PSAnUmVhY3ROYXRpdmUnIHx8XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmF2aWdhdG9yLnByb2R1Y3QgPT09ICdOYXRpdmVTY3JpcHQnIHx8XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmF2aWdhdG9yLnByb2R1Y3QgPT09ICdOUycpKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIHJldHVybiAoXG4gICAgdHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcgJiZcbiAgICB0eXBlb2YgZG9jdW1lbnQgIT09ICd1bmRlZmluZWQnXG4gICk7XG59XG5cbi8qKlxuICogSXRlcmF0ZSBvdmVyIGFuIEFycmF5IG9yIGFuIE9iamVjdCBpbnZva2luZyBhIGZ1bmN0aW9uIGZvciBlYWNoIGl0ZW0uXG4gKlxuICogSWYgYG9iamAgaXMgYW4gQXJyYXkgY2FsbGJhY2sgd2lsbCBiZSBjYWxsZWQgcGFzc2luZ1xuICogdGhlIHZhbHVlLCBpbmRleCwgYW5kIGNvbXBsZXRlIGFycmF5IGZvciBlYWNoIGl0ZW0uXG4gKlxuICogSWYgJ29iaicgaXMgYW4gT2JqZWN0IGNhbGxiYWNrIHdpbGwgYmUgY2FsbGVkIHBhc3NpbmdcbiAqIHRoZSB2YWx1ZSwga2V5LCBhbmQgY29tcGxldGUgb2JqZWN0IGZvciBlYWNoIHByb3BlcnR5LlxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fEFycmF5fSBvYmogVGhlIG9iamVjdCB0byBpdGVyYXRlXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmbiBUaGUgY2FsbGJhY2sgdG8gaW52b2tlIGZvciBlYWNoIGl0ZW1cbiAqL1xuZnVuY3Rpb24gZm9yRWFjaChvYmosIGZuKSB7XG4gIC8vIERvbid0IGJvdGhlciBpZiBubyB2YWx1ZSBwcm92aWRlZFxuICBpZiAob2JqID09PSBudWxsIHx8IHR5cGVvZiBvYmogPT09ICd1bmRlZmluZWQnKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgLy8gRm9yY2UgYW4gYXJyYXkgaWYgbm90IGFscmVhZHkgc29tZXRoaW5nIGl0ZXJhYmxlXG4gIGlmICh0eXBlb2Ygb2JqICE9PSAnb2JqZWN0Jykge1xuICAgIC8qZXNsaW50IG5vLXBhcmFtLXJlYXNzaWduOjAqL1xuICAgIG9iaiA9IFtvYmpdO1xuICB9XG5cbiAgaWYgKGlzQXJyYXkob2JqKSkge1xuICAgIC8vIEl0ZXJhdGUgb3ZlciBhcnJheSB2YWx1ZXNcbiAgICBmb3IgKHZhciBpID0gMCwgbCA9IG9iai5sZW5ndGg7IGkgPCBsOyBpKyspIHtcbiAgICAgIGZuLmNhbGwobnVsbCwgb2JqW2ldLCBpLCBvYmopO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICAvLyBJdGVyYXRlIG92ZXIgb2JqZWN0IGtleXNcbiAgICBmb3IgKHZhciBrZXkgaW4gb2JqKSB7XG4gICAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG9iaiwga2V5KSkge1xuICAgICAgICBmbi5jYWxsKG51bGwsIG9ialtrZXldLCBrZXksIG9iaik7XG4gICAgICB9XG4gICAgfVxuICB9XG59XG5cbi8qKlxuICogQWNjZXB0cyB2YXJhcmdzIGV4cGVjdGluZyBlYWNoIGFyZ3VtZW50IHRvIGJlIGFuIG9iamVjdCwgdGhlblxuICogaW1tdXRhYmx5IG1lcmdlcyB0aGUgcHJvcGVydGllcyBvZiBlYWNoIG9iamVjdCBhbmQgcmV0dXJucyByZXN1bHQuXG4gKlxuICogV2hlbiBtdWx0aXBsZSBvYmplY3RzIGNvbnRhaW4gdGhlIHNhbWUga2V5IHRoZSBsYXRlciBvYmplY3QgaW5cbiAqIHRoZSBhcmd1bWVudHMgbGlzdCB3aWxsIHRha2UgcHJlY2VkZW5jZS5cbiAqXG4gKiBFeGFtcGxlOlxuICpcbiAqIGBgYGpzXG4gKiB2YXIgcmVzdWx0ID0gbWVyZ2Uoe2ZvbzogMTIzfSwge2ZvbzogNDU2fSk7XG4gKiBjb25zb2xlLmxvZyhyZXN1bHQuZm9vKTsgLy8gb3V0cHV0cyA0NTZcbiAqIGBgYFxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmoxIE9iamVjdCB0byBtZXJnZVxuICogQHJldHVybnMge09iamVjdH0gUmVzdWx0IG9mIGFsbCBtZXJnZSBwcm9wZXJ0aWVzXG4gKi9cbmZ1bmN0aW9uIG1lcmdlKC8qIG9iajEsIG9iajIsIG9iajMsIC4uLiAqLykge1xuICB2YXIgcmVzdWx0ID0ge307XG4gIGZ1bmN0aW9uIGFzc2lnblZhbHVlKHZhbCwga2V5KSB7XG4gICAgaWYgKGlzUGxhaW5PYmplY3QocmVzdWx0W2tleV0pICYmIGlzUGxhaW5PYmplY3QodmFsKSkge1xuICAgICAgcmVzdWx0W2tleV0gPSBtZXJnZShyZXN1bHRba2V5XSwgdmFsKTtcbiAgICB9IGVsc2UgaWYgKGlzUGxhaW5PYmplY3QodmFsKSkge1xuICAgICAgcmVzdWx0W2tleV0gPSBtZXJnZSh7fSwgdmFsKTtcbiAgICB9IGVsc2UgaWYgKGlzQXJyYXkodmFsKSkge1xuICAgICAgcmVzdWx0W2tleV0gPSB2YWwuc2xpY2UoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmVzdWx0W2tleV0gPSB2YWw7XG4gICAgfVxuICB9XG5cbiAgZm9yICh2YXIgaSA9IDAsIGwgPSBhcmd1bWVudHMubGVuZ3RoOyBpIDwgbDsgaSsrKSB7XG4gICAgZm9yRWFjaChhcmd1bWVudHNbaV0sIGFzc2lnblZhbHVlKTtcbiAgfVxuICByZXR1cm4gcmVzdWx0O1xufVxuXG4vKipcbiAqIEV4dGVuZHMgb2JqZWN0IGEgYnkgbXV0YWJseSBhZGRpbmcgdG8gaXQgdGhlIHByb3BlcnRpZXMgb2Ygb2JqZWN0IGIuXG4gKlxuICogQHBhcmFtIHtPYmplY3R9IGEgVGhlIG9iamVjdCB0byBiZSBleHRlbmRlZFxuICogQHBhcmFtIHtPYmplY3R9IGIgVGhlIG9iamVjdCB0byBjb3B5IHByb3BlcnRpZXMgZnJvbVxuICogQHBhcmFtIHtPYmplY3R9IHRoaXNBcmcgVGhlIG9iamVjdCB0byBiaW5kIGZ1bmN0aW9uIHRvXG4gKiBAcmV0dXJuIHtPYmplY3R9IFRoZSByZXN1bHRpbmcgdmFsdWUgb2Ygb2JqZWN0IGFcbiAqL1xuZnVuY3Rpb24gZXh0ZW5kKGEsIGIsIHRoaXNBcmcpIHtcbiAgZm9yRWFjaChiLCBmdW5jdGlvbiBhc3NpZ25WYWx1ZSh2YWwsIGtleSkge1xuICAgIGlmICh0aGlzQXJnICYmIHR5cGVvZiB2YWwgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIGFba2V5XSA9IGJpbmQodmFsLCB0aGlzQXJnKTtcbiAgICB9IGVsc2Uge1xuICAgICAgYVtrZXldID0gdmFsO1xuICAgIH1cbiAgfSk7XG4gIHJldHVybiBhO1xufVxuXG4vKipcbiAqIFJlbW92ZSBieXRlIG9yZGVyIG1hcmtlci4gVGhpcyBjYXRjaGVzIEVGIEJCIEJGICh0aGUgVVRGLTggQk9NKVxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBjb250ZW50IHdpdGggQk9NXG4gKiBAcmV0dXJuIHtzdHJpbmd9IGNvbnRlbnQgdmFsdWUgd2l0aG91dCBCT01cbiAqL1xuZnVuY3Rpb24gc3RyaXBCT00oY29udGVudCkge1xuICBpZiAoY29udGVudC5jaGFyQ29kZUF0KDApID09PSAweEZFRkYpIHtcbiAgICBjb250ZW50ID0gY29udGVudC5zbGljZSgxKTtcbiAgfVxuICByZXR1cm4gY29udGVudDtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIGlzQXJyYXk6IGlzQXJyYXksXG4gIGlzQXJyYXlCdWZmZXI6IGlzQXJyYXlCdWZmZXIsXG4gIGlzQnVmZmVyOiBpc0J1ZmZlcixcbiAgaXNGb3JtRGF0YTogaXNGb3JtRGF0YSxcbiAgaXNBcnJheUJ1ZmZlclZpZXc6IGlzQXJyYXlCdWZmZXJWaWV3LFxuICBpc1N0cmluZzogaXNTdHJpbmcsXG4gIGlzTnVtYmVyOiBpc051bWJlcixcbiAgaXNPYmplY3Q6IGlzT2JqZWN0LFxuICBpc1BsYWluT2JqZWN0OiBpc1BsYWluT2JqZWN0LFxuICBpc1VuZGVmaW5lZDogaXNVbmRlZmluZWQsXG4gIGlzRGF0ZTogaXNEYXRlLFxuICBpc0ZpbGU6IGlzRmlsZSxcbiAgaXNCbG9iOiBpc0Jsb2IsXG4gIGlzRnVuY3Rpb246IGlzRnVuY3Rpb24sXG4gIGlzU3RyZWFtOiBpc1N0cmVhbSxcbiAgaXNVUkxTZWFyY2hQYXJhbXM6IGlzVVJMU2VhcmNoUGFyYW1zLFxuICBpc1N0YW5kYXJkQnJvd3NlckVudjogaXNTdGFuZGFyZEJyb3dzZXJFbnYsXG4gIGZvckVhY2g6IGZvckVhY2gsXG4gIG1lcmdlOiBtZXJnZSxcbiAgZXh0ZW5kOiBleHRlbmQsXG4gIHRyaW06IHRyaW0sXG4gIHN0cmlwQk9NOiBzdHJpcEJPTVxufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///9516\n")},9638:(I,g,t)=>{"use strict";I.exports=t.p+"24cc0f2102ee345623cd.png"},9743:function(__unused_webpack_module,__unused_webpack_exports,__webpack_require__){eval("//! moment.js locale configuration\n//! locale : Konkani Devanagari script [gom-deva]\n//! author : The Discoverer : https://github.com/WikiDiscoverer\n\n;(function (global, factory) {\n true ? factory(__webpack_require__(95093)) :\n 0\n}(this, (function (moment) { 'use strict';\n\n //! moment.js locale configuration\n\n function processRelativeTime(number, withoutSuffix, key, isFuture) {\n var format = {\n s: ['थोडया सॅकंडांनी', 'थोडे सॅकंड'],\n ss: [number + ' सॅकंडांनी', number + ' सॅकंड'],\n m: ['एका मिणटान', 'एक मिनूट'],\n mm: [number + ' मिणटांनी', number + ' मिणटां'],\n h: ['एका वरान', 'एक वर'],\n hh: [number + ' वरांनी', number + ' वरां'],\n d: ['एका दिसान', 'एक दीस'],\n dd: [number + ' दिसांनी', number + ' दीस'],\n M: ['एका म्हयन्यान', 'एक म्हयनो'],\n MM: [number + ' म्हयन्यानी', number + ' म्हयने'],\n y: ['एका वर्सान', 'एक वर्स'],\n yy: [number + ' वर्सांनी', number + ' वर्सां'],\n };\n return isFuture ? format[key][0] : format[key][1];\n }\n\n var gomDeva = moment.defineLocale('gom-deva', {\n months: {\n standalone:\n 'जानेवारी_फेब्रुवारी_मार्च_एप्रील_मे_जून_जुलय_ऑगस्ट_सप्टेंबर_ऑक्टोबर_नोव्हेंबर_डिसेंबर'.split(\n '_'\n ),\n format: 'जानेवारीच्या_फेब्रुवारीच्या_मार्चाच्या_एप्रीलाच्या_मेयाच्या_जूनाच्या_जुलयाच्या_ऑगस्टाच्या_सप्टेंबराच्या_ऑक्टोबराच्या_नोव्हेंबराच्या_डिसेंबराच्या'.split(\n '_'\n ),\n isFormat: /MMMM(\\s)+D[oD]?/,\n },\n monthsShort:\n 'जाने._फेब्रु._मार्च_एप्री._मे_जून_जुल._ऑग._सप्टें._ऑक्टो._नोव्हें._डिसें.'.split(\n '_'\n ),\n monthsParseExact: true,\n weekdays: 'आयतार_सोमार_मंगळार_बुधवार_बिरेस्तार_सुक्रार_शेनवार'.split('_'),\n weekdaysShort: 'आयत._सोम._मंगळ._बुध._ब्रेस्त._सुक्र._शेन.'.split('_'),\n weekdaysMin: 'आ_सो_मं_बु_ब्रे_सु_शे'.split('_'),\n weekdaysParseExact: true,\n longDateFormat: {\n LT: 'A h:mm [वाजतां]',\n LTS: 'A h:mm:ss [वाजतां]',\n L: 'DD-MM-YYYY',\n LL: 'D MMMM YYYY',\n LLL: 'D MMMM YYYY A h:mm [वाजतां]',\n LLLL: 'dddd, MMMM Do, YYYY, A h:mm [वाजतां]',\n llll: 'ddd, D MMM YYYY, A h:mm [वाजतां]',\n },\n calendar: {\n sameDay: '[आयज] LT',\n nextDay: '[फाल्यां] LT',\n nextWeek: '[फुडलो] dddd[,] LT',\n lastDay: '[काल] LT',\n lastWeek: '[फाटलो] dddd[,] LT',\n sameElse: 'L',\n },\n relativeTime: {\n future: '%s',\n past: '%s आदीं',\n s: processRelativeTime,\n ss: processRelativeTime,\n m: processRelativeTime,\n mm: processRelativeTime,\n h: processRelativeTime,\n hh: processRelativeTime,\n d: processRelativeTime,\n dd: processRelativeTime,\n M: processRelativeTime,\n MM: processRelativeTime,\n y: processRelativeTime,\n yy: processRelativeTime,\n },\n dayOfMonthOrdinalParse: /\\d{1,2}(वेर)/,\n ordinal: function (number, period) {\n switch (period) {\n // the ordinal 'वेर' only applies to day of the month\n case 'D':\n return number + 'वेर';\n default:\n case 'M':\n case 'Q':\n case 'DDD':\n case 'd':\n case 'w':\n case 'W':\n return number;\n }\n },\n week: {\n dow: 0, // Sunday is the first day of the week\n doy: 3, // The week that contains Jan 4th is the first week of the year (7 + 0 - 4)\n },\n meridiemParse: /राती|सकाळीं|दनपारां|सांजे/,\n meridiemHour: function (hour, meridiem) {\n if (hour === 12) {\n hour = 0;\n }\n if (meridiem === 'राती') {\n return hour < 4 ? hour : hour + 12;\n } else if (meridiem === 'सकाळीं') {\n return hour;\n } else if (meridiem === 'दनपारां') {\n return hour > 12 ? hour : hour + 12;\n } else if (meridiem === 'सांजे') {\n return hour + 12;\n }\n },\n meridiem: function (hour, minute, isLower) {\n if (hour < 4) {\n return 'राती';\n } else if (hour < 12) {\n return 'सकाळीं';\n } else if (hour < 16) {\n return 'दनपारां';\n } else if (hour < 20) {\n return 'सांजे';\n } else {\n return 'राती';\n }\n },\n });\n\n return gomDeva;\n\n})));\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiOTc0My5qcyIsIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9pdGctbmV4dGdlbi1mcm9udGVuZC8uL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL2dvbS1kZXZhLmpzP2FhZjIiXSwic291cmNlc0NvbnRlbnQiOlsiLy8hIG1vbWVudC5qcyBsb2NhbGUgY29uZmlndXJhdGlvblxuLy8hIGxvY2FsZSA6IEtvbmthbmkgRGV2YW5hZ2FyaSBzY3JpcHQgW2dvbS1kZXZhXVxuLy8hIGF1dGhvciA6IFRoZSBEaXNjb3ZlcmVyIDogaHR0cHM6Ly9naXRodWIuY29tL1dpa2lEaXNjb3ZlcmVyXG5cbjsoZnVuY3Rpb24gKGdsb2JhbCwgZmFjdG9yeSkge1xuICAgdHlwZW9mIGV4cG9ydHMgPT09ICdvYmplY3QnICYmIHR5cGVvZiBtb2R1bGUgIT09ICd1bmRlZmluZWQnXG4gICAgICAgJiYgdHlwZW9mIHJlcXVpcmUgPT09ICdmdW5jdGlvbicgPyBmYWN0b3J5KHJlcXVpcmUoJy4uL21vbWVudCcpKSA6XG4gICB0eXBlb2YgZGVmaW5lID09PSAnZnVuY3Rpb24nICYmIGRlZmluZS5hbWQgPyBkZWZpbmUoWycuLi9tb21lbnQnXSwgZmFjdG9yeSkgOlxuICAgZmFjdG9yeShnbG9iYWwubW9tZW50KVxufSh0aGlzLCAoZnVuY3Rpb24gKG1vbWVudCkgeyAndXNlIHN0cmljdCc7XG5cbiAgICAvLyEgbW9tZW50LmpzIGxvY2FsZSBjb25maWd1cmF0aW9uXG5cbiAgICBmdW5jdGlvbiBwcm9jZXNzUmVsYXRpdmVUaW1lKG51bWJlciwgd2l0aG91dFN1ZmZpeCwga2V5LCBpc0Z1dHVyZSkge1xuICAgICAgICB2YXIgZm9ybWF0ID0ge1xuICAgICAgICAgICAgczogWyfgpKXgpYvgpKHgpK/gpL4g4KS44KWF4KSV4KSC4KSh4KS+4KSC4KSo4KWAJywgJ+CkpeCli+CkoeClhyDgpLjgpYXgpJXgpILgpKEnXSxcbiAgICAgICAgICAgIHNzOiBbbnVtYmVyICsgJyDgpLjgpYXgpJXgpILgpKHgpL7gpILgpKjgpYAnLCBudW1iZXIgKyAnIOCkuOClheCkleCkguCkoSddLFxuICAgICAgICAgICAgbTogWyfgpI/gpJXgpL4g4KSu4KS/4KSj4KSf4KS+4KSoJywgJ+Ckj+CklSDgpK7gpL/gpKjgpYLgpJ8nXSxcbiAgICAgICAgICAgIG1tOiBbbnVtYmVyICsgJyDgpK7gpL/gpKPgpJ/gpL7gpILgpKjgpYAnLCBudW1iZXIgKyAnIOCkruCkv+Cko+Ckn+CkvuCkgiddLFxuICAgICAgICAgICAgaDogWyfgpI/gpJXgpL4g4KS14KSw4KS+4KSoJywgJ+Ckj+CklSDgpLXgpLAnXSxcbiAgICAgICAgICAgIGhoOiBbbnVtYmVyICsgJyDgpLXgpLDgpL7gpILgpKjgpYAnLCBudW1iZXIgKyAnIOCkteCksOCkvuCkgiddLFxuICAgICAgICAgICAgZDogWyfgpI/gpJXgpL4g4KSm4KS/4KS44KS+4KSoJywgJ+Ckj+CklSDgpKbgpYDgpLgnXSxcbiAgICAgICAgICAgIGRkOiBbbnVtYmVyICsgJyDgpKbgpL/gpLjgpL7gpILgpKjgpYAnLCBudW1iZXIgKyAnIOCkpuClgOCkuCddLFxuICAgICAgICAgICAgTTogWyfgpI/gpJXgpL4g4KSu4KWN4KS54KSv4KSo4KWN4KSv4KS+4KSoJywgJ+Ckj+CklSDgpK7gpY3gpLngpK/gpKjgpYsnXSxcbiAgICAgICAgICAgIE1NOiBbbnVtYmVyICsgJyDgpK7gpY3gpLngpK/gpKjgpY3gpK/gpL7gpKjgpYAnLCBudW1iZXIgKyAnIOCkruCljeCkueCkr+CkqOClhyddLFxuICAgICAgICAgICAgeTogWyfgpI/gpJXgpL4g4KS14KSw4KWN4KS44KS+4KSoJywgJ+Ckj+CklSDgpLXgpLDgpY3gpLgnXSxcbiAgICAgICAgICAgIHl5OiBbbnVtYmVyICsgJyDgpLXgpLDgpY3gpLjgpL7gpILgpKjgpYAnLCBudW1iZXIgKyAnIOCkteCksOCljeCkuOCkvuCkgiddLFxuICAgICAgICB9O1xuICAgICAgICByZXR1cm4gaXNGdXR1cmUgPyBmb3JtYXRba2V5XVswXSA6IGZvcm1hdFtrZXldWzFdO1xuICAgIH1cblxuICAgIHZhciBnb21EZXZhID0gbW9tZW50LmRlZmluZUxvY2FsZSgnZ29tLWRldmEnLCB7XG4gICAgICAgIG1vbnRoczoge1xuICAgICAgICAgICAgc3RhbmRhbG9uZTpcbiAgICAgICAgICAgICAgICAn4KSc4KS+4KSo4KWH4KS14KS+4KSw4KWAX+Ckq+Clh+CkrOCljeCksOClgeCkteCkvuCksOClgF/gpK7gpL7gpLDgpY3gpJpf4KSP4KSq4KWN4KSw4KWA4KSyX+CkruClh1/gpJzgpYLgpKhf4KSc4KWB4KSy4KSvX+CkkeCkl+CkuOCljeCkn1/gpLjgpKrgpY3gpJ/gpYfgpILgpKzgpLBf4KSR4KSV4KWN4KSf4KWL4KSs4KSwX+CkqOCli+CkteCljeCkueClh+CkguCkrOCksF/gpKHgpL/gpLjgpYfgpILgpKzgpLAnLnNwbGl0KFxuICAgICAgICAgICAgICAgICAgICAnXydcbiAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgZm9ybWF0OiAn4KSc4KS+4KSo4KWH4KS14KS+4KSw4KWA4KSa4KWN4KSv4KS+X+Ckq+Clh+CkrOCljeCksOClgeCkteCkvuCksOClgOCkmuCljeCkr+Ckvl/gpK7gpL7gpLDgpY3gpJrgpL7gpJrgpY3gpK/gpL5f4KSP4KSq4KWN4KSw4KWA4KSy4KS+4KSa4KWN4KSv4KS+X+CkruClh+Ckr+CkvuCkmuCljeCkr+Ckvl/gpJzgpYLgpKjgpL7gpJrgpY3gpK/gpL5f4KSc4KWB4KSy4KSv4KS+4KSa4KWN4KSv4KS+X+CkkeCkl+CkuOCljeCkn+CkvuCkmuCljeCkr+Ckvl/gpLjgpKrgpY3gpJ/gpYfgpILgpKzgpLDgpL7gpJrgpY3gpK/gpL5f4KSR4KSV4KWN4KSf4KWL4KSs4KSw4KS+4KSa4KWN4KSv4KS+X+CkqOCli+CkteCljeCkueClh+CkguCkrOCksOCkvuCkmuCljeCkr+Ckvl/gpKHgpL/gpLjgpYfgpILgpKzgpLDgpL7gpJrgpY3gpK/gpL4nLnNwbGl0KFxuICAgICAgICAgICAgICAgICdfJ1xuICAgICAgICAgICAgKSxcbiAgICAgICAgICAgIGlzRm9ybWF0OiAvTU1NTShcXHMpK0Rbb0RdPy8sXG4gICAgICAgIH0sXG4gICAgICAgIG1vbnRoc1Nob3J0OlxuICAgICAgICAgICAgJ+CknOCkvuCkqOClhy5f4KSr4KWH4KSs4KWN4KSw4KWBLl/gpK7gpL7gpLDgpY3gpJpf4KSP4KSq4KWN4KSw4KWALl/gpK7gpYdf4KSc4KWC4KSoX+CknOClgeCksi5f4KSR4KSXLl/gpLjgpKrgpY3gpJ/gpYfgpIIuX+CkkeCkleCljeCkn+Cliy5f4KSo4KWL4KS14KWN4KS54KWH4KSCLl/gpKHgpL/gpLjgpYfgpIIuJy5zcGxpdChcbiAgICAgICAgICAgICAgICAnXydcbiAgICAgICAgICAgICksXG4gICAgICAgIG1vbnRoc1BhcnNlRXhhY3Q6IHRydWUsXG4gICAgICAgIHdlZWtkYXlzOiAn4KSG4KSv4KSk4KS+4KSwX+CkuOCli+CkruCkvuCksF/gpK7gpILgpJfgpLPgpL7gpLBf4KSs4KWB4KSn4KS14KS+4KSwX+CkrOCkv+CksOClh+CkuOCljeCkpOCkvuCksF/gpLjgpYHgpJXgpY3gpLDgpL7gpLBf4KS24KWH4KSo4KS14KS+4KSwJy5zcGxpdCgnXycpLFxuICAgICAgICB3ZWVrZGF5c1Nob3J0OiAn4KSG4KSv4KSkLl/gpLjgpYvgpK4uX+CkruCkguCkl+Cksy5f4KSs4KWB4KSnLl/gpKzgpY3gpLDgpYfgpLjgpY3gpKQuX+CkuOClgeCkleCljeCksC5f4KS24KWH4KSoLicuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXNNaW46ICfgpIZf4KS44KWLX+CkruCkgl/gpKzgpYFf4KSs4KWN4KSw4KWHX+CkuOClgV/gpLbgpYcnLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzUGFyc2VFeGFjdDogdHJ1ZSxcbiAgICAgICAgbG9uZ0RhdGVGb3JtYXQ6IHtcbiAgICAgICAgICAgIExUOiAnQSBoOm1tIFvgpLXgpL7gpJzgpKTgpL7gpIJdJyxcbiAgICAgICAgICAgIExUUzogJ0EgaDptbTpzcyBb4KS14KS+4KSc4KSk4KS+4KSCXScsXG4gICAgICAgICAgICBMOiAnREQtTU0tWVlZWScsXG4gICAgICAgICAgICBMTDogJ0QgTU1NTSBZWVlZJyxcbiAgICAgICAgICAgIExMTDogJ0QgTU1NTSBZWVlZIEEgaDptbSBb4KS14KS+4KSc4KSk4KS+4KSCXScsXG4gICAgICAgICAgICBMTExMOiAnZGRkZCwgTU1NTSBEbywgWVlZWSwgQSBoOm1tIFvgpLXgpL7gpJzgpKTgpL7gpIJdJyxcbiAgICAgICAgICAgIGxsbGw6ICdkZGQsIEQgTU1NIFlZWVksIEEgaDptbSBb4KS14KS+4KSc4KSk4KS+4KSCXScsXG4gICAgICAgIH0sXG4gICAgICAgIGNhbGVuZGFyOiB7XG4gICAgICAgICAgICBzYW1lRGF5OiAnW+CkhuCkr+CknF0gTFQnLFxuICAgICAgICAgICAgbmV4dERheTogJ1vgpKvgpL7gpLLgpY3gpK/gpL7gpIJdIExUJyxcbiAgICAgICAgICAgIG5leHRXZWVrOiAnW+Ckq+ClgeCkoeCksuCli10gZGRkZFssXSBMVCcsXG4gICAgICAgICAgICBsYXN0RGF5OiAnW+CkleCkvuCksl0gTFQnLFxuICAgICAgICAgICAgbGFzdFdlZWs6ICdb4KSr4KS+4KSf4KSy4KWLXSBkZGRkWyxdIExUJyxcbiAgICAgICAgICAgIHNhbWVFbHNlOiAnTCcsXG4gICAgICAgIH0sXG4gICAgICAgIHJlbGF0aXZlVGltZToge1xuICAgICAgICAgICAgZnV0dXJlOiAnJXMnLFxuICAgICAgICAgICAgcGFzdDogJyVzIOCkhuCkpuClgOCkgicsXG4gICAgICAgICAgICBzOiBwcm9jZXNzUmVsYXRpdmVUaW1lLFxuICAgICAgICAgICAgc3M6IHByb2Nlc3NSZWxhdGl2ZVRpbWUsXG4gICAgICAgICAgICBtOiBwcm9jZXNzUmVsYXRpdmVUaW1lLFxuICAgICAgICAgICAgbW06IHByb2Nlc3NSZWxhdGl2ZVRpbWUsXG4gICAgICAgICAgICBoOiBwcm9jZXNzUmVsYXRpdmVUaW1lLFxuICAgICAgICAgICAgaGg6IHByb2Nlc3NSZWxhdGl2ZVRpbWUsXG4gICAgICAgICAgICBkOiBwcm9jZXNzUmVsYXRpdmVUaW1lLFxuICAgICAgICAgICAgZGQ6IHByb2Nlc3NSZWxhdGl2ZVRpbWUsXG4gICAgICAgICAgICBNOiBwcm9jZXNzUmVsYXRpdmVUaW1lLFxuICAgICAgICAgICAgTU06IHByb2Nlc3NSZWxhdGl2ZVRpbWUsXG4gICAgICAgICAgICB5OiBwcm9jZXNzUmVsYXRpdmVUaW1lLFxuICAgICAgICAgICAgeXk6IHByb2Nlc3NSZWxhdGl2ZVRpbWUsXG4gICAgICAgIH0sXG4gICAgICAgIGRheU9mTW9udGhPcmRpbmFsUGFyc2U6IC9cXGR7MSwyfSjgpLXgpYfgpLApLyxcbiAgICAgICAgb3JkaW5hbDogZnVuY3Rpb24gKG51bWJlciwgcGVyaW9kKSB7XG4gICAgICAgICAgICBzd2l0Y2ggKHBlcmlvZCkge1xuICAgICAgICAgICAgICAgIC8vIHRoZSBvcmRpbmFsICfgpLXgpYfgpLAnIG9ubHkgYXBwbGllcyB0byBkYXkgb2YgdGhlIG1vbnRoXG4gICAgICAgICAgICAgICAgY2FzZSAnRCc6XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBudW1iZXIgKyAn4KS14KWH4KSwJztcbiAgICAgICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgIGNhc2UgJ00nOlxuICAgICAgICAgICAgICAgIGNhc2UgJ1EnOlxuICAgICAgICAgICAgICAgIGNhc2UgJ0RERCc6XG4gICAgICAgICAgICAgICAgY2FzZSAnZCc6XG4gICAgICAgICAgICAgICAgY2FzZSAndyc6XG4gICAgICAgICAgICAgICAgY2FzZSAnVyc6XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBudW1iZXI7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIHdlZWs6IHtcbiAgICAgICAgICAgIGRvdzogMCwgLy8gU3VuZGF5IGlzIHRoZSBmaXJzdCBkYXkgb2YgdGhlIHdlZWtcbiAgICAgICAgICAgIGRveTogMywgLy8gVGhlIHdlZWsgdGhhdCBjb250YWlucyBKYW4gNHRoIGlzIHRoZSBmaXJzdCB3ZWVrIG9mIHRoZSB5ZWFyICg3ICsgMCAtIDQpXG4gICAgICAgIH0sXG4gICAgICAgIG1lcmlkaWVtUGFyc2U6IC/gpLDgpL7gpKTgpYB84KS44KSV4KS+4KSz4KWA4KSCfOCkpuCkqOCkquCkvuCksOCkvuCkgnzgpLjgpL7gpILgpJzgpYcvLFxuICAgICAgICBtZXJpZGllbUhvdXI6IGZ1bmN0aW9uIChob3VyLCBtZXJpZGllbSkge1xuICAgICAgICAgICAgaWYgKGhvdXIgPT09IDEyKSB7XG4gICAgICAgICAgICAgICAgaG91ciA9IDA7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAobWVyaWRpZW0gPT09ICfgpLDgpL7gpKTgpYAnKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGhvdXIgPCA0ID8gaG91ciA6IGhvdXIgKyAxMjtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAobWVyaWRpZW0gPT09ICfgpLjgpJXgpL7gpLPgpYDgpIInKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGhvdXI7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKG1lcmlkaWVtID09PSAn4KSm4KSo4KSq4KS+4KSw4KS+4KSCJykge1xuICAgICAgICAgICAgICAgIHJldHVybiBob3VyID4gMTIgPyBob3VyIDogaG91ciArIDEyO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChtZXJpZGllbSA9PT0gJ+CkuOCkvuCkguCknOClhycpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gaG91ciArIDEyO1xuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBtZXJpZGllbTogZnVuY3Rpb24gKGhvdXIsIG1pbnV0ZSwgaXNMb3dlcikge1xuICAgICAgICAgICAgaWYgKGhvdXIgPCA0KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuICfgpLDgpL7gpKTgpYAnO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChob3VyIDwgMTIpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gJ+CkuOCkleCkvuCks+ClgOCkgic7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGhvdXIgPCAxNikge1xuICAgICAgICAgICAgICAgIHJldHVybiAn4KSm4KSo4KSq4KS+4KSw4KS+4KSCJztcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoaG91ciA8IDIwKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuICfgpLjgpL7gpILgpJzgpYcnO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gJ+CksOCkvuCkpOClgCc7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgfSk7XG5cbiAgICByZXR1cm4gZ29tRGV2YTtcblxufSkpKTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///9743\n")},10482:function(module,exports,__webpack_require__){eval(";(function (root, factory, undef) {\n\tif (true) {\n\t\t// CommonJS\n\t\tmodule.exports = exports = factory(__webpack_require__(19021), __webpack_require__(57165));\n\t}\n\telse {}\n}(this, function (CryptoJS) {\n\n\t/**\n\t * ISO/IEC 9797-1 Padding Method 2.\n\t */\n\tCryptoJS.pad.Iso97971 = {\n\t pad: function (data, blockSize) {\n\t // Add 0x80 byte\n\t data.concat(CryptoJS.lib.WordArray.create([0x80000000], 1));\n\n\t // Zero pad the rest\n\t CryptoJS.pad.ZeroPadding.pad(data, blockSize);\n\t },\n\n\t unpad: function (data) {\n\t // Remove zero padding\n\t CryptoJS.pad.ZeroPadding.unpad(data);\n\n\t // Remove one more byte -- the 0x80 byte\n\t data.sigBytes--;\n\t }\n\t};\n\n\n\treturn CryptoJS.pad.Iso97971;\n\n}));//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMTA0ODIuanMiLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBUUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vaXRnLW5leHRnZW4tZnJvbnRlbmQvLi9ub2RlX21vZHVsZXMvY3J5cHRvLWpzL3BhZC1pc285Nzk3MS5qcz84Y2VmIl0sInNvdXJjZXNDb250ZW50IjpbIjsoZnVuY3Rpb24gKHJvb3QsIGZhY3RvcnksIHVuZGVmKSB7XG5cdGlmICh0eXBlb2YgZXhwb3J0cyA9PT0gXCJvYmplY3RcIikge1xuXHRcdC8vIENvbW1vbkpTXG5cdFx0bW9kdWxlLmV4cG9ydHMgPSBleHBvcnRzID0gZmFjdG9yeShyZXF1aXJlKFwiLi9jb3JlXCIpLCByZXF1aXJlKFwiLi9jaXBoZXItY29yZVwiKSk7XG5cdH1cblx0ZWxzZSBpZiAodHlwZW9mIGRlZmluZSA9PT0gXCJmdW5jdGlvblwiICYmIGRlZmluZS5hbWQpIHtcblx0XHQvLyBBTURcblx0XHRkZWZpbmUoW1wiLi9jb3JlXCIsIFwiLi9jaXBoZXItY29yZVwiXSwgZmFjdG9yeSk7XG5cdH1cblx0ZWxzZSB7XG5cdFx0Ly8gR2xvYmFsIChicm93c2VyKVxuXHRcdGZhY3Rvcnkocm9vdC5DcnlwdG9KUyk7XG5cdH1cbn0odGhpcywgZnVuY3Rpb24gKENyeXB0b0pTKSB7XG5cblx0LyoqXG5cdCAqIElTTy9JRUMgOTc5Ny0xIFBhZGRpbmcgTWV0aG9kIDIuXG5cdCAqL1xuXHRDcnlwdG9KUy5wYWQuSXNvOTc5NzEgPSB7XG5cdCAgICBwYWQ6IGZ1bmN0aW9uIChkYXRhLCBibG9ja1NpemUpIHtcblx0ICAgICAgICAvLyBBZGQgMHg4MCBieXRlXG5cdCAgICAgICAgZGF0YS5jb25jYXQoQ3J5cHRvSlMubGliLldvcmRBcnJheS5jcmVhdGUoWzB4ODAwMDAwMDBdLCAxKSk7XG5cblx0ICAgICAgICAvLyBaZXJvIHBhZCB0aGUgcmVzdFxuXHQgICAgICAgIENyeXB0b0pTLnBhZC5aZXJvUGFkZGluZy5wYWQoZGF0YSwgYmxvY2tTaXplKTtcblx0ICAgIH0sXG5cblx0ICAgIHVucGFkOiBmdW5jdGlvbiAoZGF0YSkge1xuXHQgICAgICAgIC8vIFJlbW92ZSB6ZXJvIHBhZGRpbmdcblx0ICAgICAgICBDcnlwdG9KUy5wYWQuWmVyb1BhZGRpbmcudW5wYWQoZGF0YSk7XG5cblx0ICAgICAgICAvLyBSZW1vdmUgb25lIG1vcmUgYnl0ZSAtLSB0aGUgMHg4MCBieXRlXG5cdCAgICAgICAgZGF0YS5zaWdCeXRlcy0tO1xuXHQgICAgfVxuXHR9O1xuXG5cblx0cmV0dXJuIENyeXB0b0pTLnBhZC5Jc285Nzk3MTtcblxufSkpOyJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///10482\n")},10540:(__unused_webpack_module,__webpack_exports__,__webpack_require__)=>{"use strict";eval("// ESM COMPAT FLAG\n__webpack_require__.r(__webpack_exports__);\n\n// EXPORTS\n__webpack_require__.d(__webpack_exports__, {\n branch: () => (/* binding */ branch),\n componentFromProp: () => (/* binding */ componentFromProp),\n componentFromStream: () => (/* binding */ componentFromStream),\n componentFromStreamWithConfig: () => (/* binding */ componentFromStreamWithConfig),\n compose: () => (/* binding */ compose),\n createEventHandler: () => (/* binding */ createEventHandler),\n createEventHandlerWithConfig: () => (/* binding */ createEventHandlerWithConfig),\n createSink: () => (/* binding */ createSink),\n defaultProps: () => (/* binding */ defaultProps),\n flattenProp: () => (/* binding */ flattenProp),\n fromRenderProps: () => (/* binding */ fromRenderProps),\n getContext: () => (/* binding */ getContext),\n getDisplayName: () => (/* binding */ getDisplayName),\n hoistStatics: () => (/* binding */ hoistStatics),\n isClassComponent: () => (/* binding */ isClassComponent),\n lifecycle: () => (/* binding */ lifecycle),\n mapProps: () => (/* binding */ mapProps),\n mapPropsStream: () => (/* binding */ mapPropsStream),\n mapPropsStreamWithConfig: () => (/* binding */ mapPropsStreamWithConfig),\n nest: () => (/* binding */ nest),\n onlyUpdateForKeys: () => (/* binding */ onlyUpdateForKeys),\n onlyUpdateForPropTypes: () => (/* binding */ onlyUpdateForPropTypes),\n pure: () => (/* binding */ pure),\n renameProp: () => (/* binding */ renameProp),\n renameProps: () => (/* binding */ renameProps),\n renderComponent: () => (/* binding */ renderComponent),\n renderNothing: () => (/* binding */ renderNothing),\n setDisplayName: () => (/* binding */ setDisplayName),\n setObservableConfig: () => (/* binding */ configureObservable),\n setPropTypes: () => (/* binding */ setPropTypes),\n setStatic: () => (/* binding */ setStatic),\n shallowEqual: () => (/* reexport */ (shallowEqual_default())),\n shouldUpdate: () => (/* binding */ shouldUpdate),\n toClass: () => (/* binding */ toClass),\n toRenderProps: () => (/* binding */ toRenderProps),\n withContext: () => (/* binding */ withContext),\n withHandlers: () => (/* binding */ withHandlers),\n withProps: () => (/* binding */ withProps),\n withPropsOnChange: () => (/* binding */ withPropsOnChange),\n withReducer: () => (/* binding */ withReducer),\n withState: () => (/* binding */ withState),\n withStateHandlers: () => (/* binding */ withStateHandlers),\n wrapDisplayName: () => (/* binding */ wrapDisplayName)\n});\n\n// EXTERNAL MODULE: consume shared module (default) react@^17.0.2 (singleton) (fallback: ./node_modules/react/index.js) (eager)\nvar index_js_eager_ = __webpack_require__(24002);\nvar index_js_eager_default = /*#__PURE__*/__webpack_require__.n(index_js_eager_);\n// EXTERNAL MODULE: ./node_modules/@babel/runtime/helpers/esm/extends.js\nvar esm_extends = __webpack_require__(58168);\n// EXTERNAL MODULE: ./node_modules/fbjs/lib/shallowEqual.js\nvar shallowEqual = __webpack_require__(48940);\nvar shallowEqual_default = /*#__PURE__*/__webpack_require__.n(shallowEqual);\n// EXTERNAL MODULE: ./node_modules/@babel/runtime/helpers/esm/inheritsLoose.js + 1 modules\nvar inheritsLoose = __webpack_require__(25540);\n;// ./node_modules/react-lifecycles-compat/react-lifecycles-compat.es.js\n/**\n * Copyright (c) 2013-present, Facebook, Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\nfunction componentWillMount() {\n // Call this.constructor.gDSFP to support sub-classes.\n var state = this.constructor.getDerivedStateFromProps(this.props, this.state);\n if (state !== null && state !== undefined) {\n this.setState(state);\n }\n}\n\nfunction componentWillReceiveProps(nextProps) {\n // Call this.constructor.gDSFP to support sub-classes.\n // Use the setState() updater to ensure state isn't stale in certain edge cases.\n function updater(prevState) {\n var state = this.constructor.getDerivedStateFromProps(nextProps, prevState);\n return state !== null && state !== undefined ? state : null;\n }\n // Binding \"this\" is important for shallow renderer support.\n this.setState(updater.bind(this));\n}\n\nfunction componentWillUpdate(nextProps, nextState) {\n try {\n var prevProps = this.props;\n var prevState = this.state;\n this.props = nextProps;\n this.state = nextState;\n this.__reactInternalSnapshotFlag = true;\n this.__reactInternalSnapshot = this.getSnapshotBeforeUpdate(\n prevProps,\n prevState\n );\n } finally {\n this.props = prevProps;\n this.state = prevState;\n }\n}\n\n// React may warn about cWM/cWRP/cWU methods being deprecated.\n// Add a flag to suppress these warnings for this special case.\ncomponentWillMount.__suppressDeprecationWarning = true;\ncomponentWillReceiveProps.__suppressDeprecationWarning = true;\ncomponentWillUpdate.__suppressDeprecationWarning = true;\n\nfunction polyfill(Component) {\n var prototype = Component.prototype;\n\n if (!prototype || !prototype.isReactComponent) {\n throw new Error('Can only polyfill class components');\n }\n\n if (\n typeof Component.getDerivedStateFromProps !== 'function' &&\n typeof prototype.getSnapshotBeforeUpdate !== 'function'\n ) {\n return Component;\n }\n\n // If new component APIs are defined, \"unsafe\" lifecycles won't be called.\n // Error if any of these lifecycles are present,\n // Because they would work differently between older and newer (16.3+) versions of React.\n var foundWillMountName = null;\n var foundWillReceivePropsName = null;\n var foundWillUpdateName = null;\n if (typeof prototype.componentWillMount === 'function') {\n foundWillMountName = 'componentWillMount';\n } else if (typeof prototype.UNSAFE_componentWillMount === 'function') {\n foundWillMountName = 'UNSAFE_componentWillMount';\n }\n if (typeof prototype.componentWillReceiveProps === 'function') {\n foundWillReceivePropsName = 'componentWillReceiveProps';\n } else if (typeof prototype.UNSAFE_componentWillReceiveProps === 'function') {\n foundWillReceivePropsName = 'UNSAFE_componentWillReceiveProps';\n }\n if (typeof prototype.componentWillUpdate === 'function') {\n foundWillUpdateName = 'componentWillUpdate';\n } else if (typeof prototype.UNSAFE_componentWillUpdate === 'function') {\n foundWillUpdateName = 'UNSAFE_componentWillUpdate';\n }\n if (\n foundWillMountName !== null ||\n foundWillReceivePropsName !== null ||\n foundWillUpdateName !== null\n ) {\n var componentName = Component.displayName || Component.name;\n var newApiName =\n typeof Component.getDerivedStateFromProps === 'function'\n ? 'getDerivedStateFromProps()'\n : 'getSnapshotBeforeUpdate()';\n\n throw Error(\n 'Unsafe legacy lifecycles will not be called for components using new component APIs.\\n\\n' +\n componentName +\n ' uses ' +\n newApiName +\n ' but also contains the following legacy lifecycles:' +\n (foundWillMountName !== null ? '\\n ' + foundWillMountName : '') +\n (foundWillReceivePropsName !== null\n ? '\\n ' + foundWillReceivePropsName\n : '') +\n (foundWillUpdateName !== null ? '\\n ' + foundWillUpdateName : '') +\n '\\n\\nThe above lifecycles should be removed. Learn more about this warning here:\\n' +\n 'https://fb.me/react-async-component-lifecycle-hooks'\n );\n }\n\n // React <= 16.2 does not support static getDerivedStateFromProps.\n // As a workaround, use cWM and cWRP to invoke the new static lifecycle.\n // Newer versions of React will ignore these lifecycles if gDSFP exists.\n if (typeof Component.getDerivedStateFromProps === 'function') {\n prototype.componentWillMount = componentWillMount;\n prototype.componentWillReceiveProps = componentWillReceiveProps;\n }\n\n // React <= 16.2 does not support getSnapshotBeforeUpdate.\n // As a workaround, use cWU to invoke the new lifecycle.\n // Newer versions of React will ignore that lifecycle if gSBU exists.\n if (typeof prototype.getSnapshotBeforeUpdate === 'function') {\n if (typeof prototype.componentDidUpdate !== 'function') {\n throw new Error(\n 'Cannot polyfill getSnapshotBeforeUpdate() for components that do not define componentDidUpdate() on the prototype'\n );\n }\n\n prototype.componentWillUpdate = componentWillUpdate;\n\n var componentDidUpdate = prototype.componentDidUpdate;\n\n prototype.componentDidUpdate = function componentDidUpdatePolyfill(\n prevProps,\n prevState,\n maybeSnapshot\n ) {\n // 16.3+ will not execute our will-update method;\n // It will pass a snapshot value to did-update though.\n // Older versions will require our polyfilled will-update value.\n // We need to handle both cases, but can't just check for the presence of \"maybeSnapshot\",\n // Because for <= 15.x versions this might be a \"prevContext\" object.\n // We also can't just check \"__reactInternalSnapshot\",\n // Because get-snapshot might return a falsy value.\n // So check for the explicit __reactInternalSnapshotFlag flag to determine behavior.\n var snapshot = this.__reactInternalSnapshotFlag\n ? this.__reactInternalSnapshot\n : maybeSnapshot;\n\n componentDidUpdate.call(this, prevProps, prevState, snapshot);\n };\n }\n\n return Component;\n}\n\n\n\n// EXTERNAL MODULE: ./node_modules/@babel/runtime/helpers/esm/objectWithoutPropertiesLoose.js\nvar objectWithoutPropertiesLoose = __webpack_require__(98587);\n// EXTERNAL MODULE: ./node_modules/recompose/node_modules/hoist-non-react-statics/dist/hoist-non-react-statics.cjs.js\nvar hoist_non_react_statics_cjs = __webpack_require__(87939);\nvar hoist_non_react_statics_cjs_default = /*#__PURE__*/__webpack_require__.n(hoist_non_react_statics_cjs);\n// EXTERNAL MODULE: ./node_modules/change-emitter/lib/index.js\nvar lib = __webpack_require__(39606);\n// EXTERNAL MODULE: ./node_modules/symbol-observable/es/index.js + 1 modules\nvar es = __webpack_require__(9423);\n;// ./node_modules/recompose/dist/Recompose.esm.js\n\n\n\n\n\n\n\n\n\n\nvar setStatic = function setStatic(key, value) {\n return function (BaseComponent) {\n /* eslint-disable no-param-reassign */\n BaseComponent[key] = value;\n /* eslint-enable no-param-reassign */\n\n return BaseComponent;\n };\n};\n\nvar setDisplayName = function setDisplayName(displayName) {\n return setStatic('displayName', displayName);\n};\n\nvar getDisplayName = function getDisplayName(Component$$1) {\n if (typeof Component$$1 === 'string') {\n return Component$$1;\n }\n\n if (!Component$$1) {\n return undefined;\n }\n\n return Component$$1.displayName || Component$$1.name || 'Component';\n};\n\nvar wrapDisplayName = function wrapDisplayName(BaseComponent, hocName) {\n return hocName + \"(\" + getDisplayName(BaseComponent) + \")\";\n};\n\nvar mapProps = function mapProps(propsMapper) {\n return function (BaseComponent) {\n var factory = (0,index_js_eager_.createFactory)(BaseComponent);\n\n var MapProps = function MapProps(props) {\n return factory(propsMapper(props));\n };\n\n if (false) {}\n\n return MapProps;\n };\n};\n\nvar withProps = function withProps(input) {\n var hoc = mapProps(function (props) {\n return (0,esm_extends/* default */.A)({}, props, typeof input === 'function' ? input(props) : input);\n });\n\n if (false) {}\n\n return hoc;\n};\n\nvar pick = function pick(obj, keys) {\n var result = {};\n\n for (var i = 0; i < keys.length; i++) {\n var key = keys[i];\n\n if (obj.hasOwnProperty(key)) {\n result[key] = obj[key];\n }\n }\n\n return result;\n};\n\nvar withPropsOnChange = function withPropsOnChange(shouldMapOrKeys, propsMapper) {\n return function (BaseComponent) {\n var factory = (0,index_js_eager_.createFactory)(BaseComponent);\n var shouldMap = typeof shouldMapOrKeys === 'function' ? shouldMapOrKeys : function (props, nextProps) {\n return !shallowEqual_default()(pick(props, shouldMapOrKeys), pick(nextProps, shouldMapOrKeys));\n };\n\n var WithPropsOnChange =\n /*#__PURE__*/\n function (_Component) {\n (0,inheritsLoose/* default */.A)(WithPropsOnChange, _Component);\n\n function WithPropsOnChange() {\n var _this;\n\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n _this = _Component.call.apply(_Component, [this].concat(args)) || this;\n _this.state = {\n computedProps: propsMapper(_this.props),\n prevProps: _this.props\n };\n return _this;\n }\n\n WithPropsOnChange.getDerivedStateFromProps = function getDerivedStateFromProps(nextProps, prevState) {\n if (shouldMap(prevState.prevProps, nextProps)) {\n return {\n computedProps: propsMapper(nextProps),\n prevProps: nextProps\n };\n }\n\n return {\n prevProps: nextProps\n };\n };\n\n var _proto = WithPropsOnChange.prototype;\n\n _proto.render = function render() {\n return factory((0,esm_extends/* default */.A)({}, this.props, this.state.computedProps));\n };\n\n return WithPropsOnChange;\n }(index_js_eager_.Component);\n\n polyfill(WithPropsOnChange);\n\n if (false) {}\n\n return WithPropsOnChange;\n };\n};\n\nvar mapValues = function mapValues(obj, func) {\n var result = {};\n /* eslint-disable no-restricted-syntax */\n\n for (var key in obj) {\n if (obj.hasOwnProperty(key)) {\n result[key] = func(obj[key], key);\n }\n }\n /* eslint-enable no-restricted-syntax */\n\n\n return result;\n};\n\nvar withHandlers = function withHandlers(handlers) {\n return function (BaseComponent) {\n var factory = (0,index_js_eager_.createFactory)(BaseComponent);\n\n var WithHandlers =\n /*#__PURE__*/\n function (_Component) {\n (0,inheritsLoose/* default */.A)(WithHandlers, _Component);\n\n function WithHandlers() {\n var _this;\n\n for (var _len = arguments.length, _args = new Array(_len), _key = 0; _key < _len; _key++) {\n _args[_key] = arguments[_key];\n }\n\n _this = _Component.call.apply(_Component, [this].concat(_args)) || this;\n _this.handlers = mapValues(typeof handlers === 'function' ? handlers(_this.props) : handlers, function (createHandler) {\n return function () {\n var handler = createHandler(_this.props);\n\n if (false) {}\n\n return handler.apply(void 0, arguments);\n };\n });\n return _this;\n }\n\n var _proto = WithHandlers.prototype;\n\n _proto.render = function render() {\n return factory((0,esm_extends/* default */.A)({}, this.props, this.handlers));\n };\n\n return WithHandlers;\n }(index_js_eager_.Component);\n\n if (false) {}\n\n return WithHandlers;\n };\n};\n\nvar defaultProps = function defaultProps(props) {\n return function (BaseComponent) {\n var factory = (0,index_js_eager_.createFactory)(BaseComponent);\n\n var DefaultProps = function DefaultProps(ownerProps) {\n return factory(ownerProps);\n };\n\n DefaultProps.defaultProps = props;\n\n if (false) {}\n\n return DefaultProps;\n };\n};\n\nvar omit = function omit(obj, keys) {\n var rest = (0,esm_extends/* default */.A)({}, obj);\n\n for (var i = 0; i < keys.length; i++) {\n var key = keys[i];\n\n if (rest.hasOwnProperty(key)) {\n delete rest[key];\n }\n }\n\n return rest;\n};\n\nvar renameProp = function renameProp(oldName, newName) {\n var hoc = mapProps(function (props) {\n var _extends2;\n\n return (0,esm_extends/* default */.A)({}, omit(props, [oldName]), (_extends2 = {}, _extends2[newName] = props[oldName], _extends2));\n });\n\n if (false) {}\n\n return hoc;\n};\n\nvar keys = Object.keys;\n\nvar mapKeys = function mapKeys(obj, func) {\n return keys(obj).reduce(function (result, key) {\n var val = obj[key];\n /* eslint-disable no-param-reassign */\n\n result[func(val, key)] = val;\n /* eslint-enable no-param-reassign */\n\n return result;\n }, {});\n};\n\nvar renameProps = function renameProps(nameMap) {\n var hoc = mapProps(function (props) {\n return (0,esm_extends/* default */.A)({}, omit(props, keys(nameMap)), mapKeys(pick(props, keys(nameMap)), function (_, oldName) {\n return nameMap[oldName];\n }));\n });\n\n if (false) {}\n\n return hoc;\n};\n\nvar flattenProp = function flattenProp(propName) {\n return function (BaseComponent) {\n var factory = (0,index_js_eager_.createFactory)(BaseComponent);\n\n var FlattenProp = function FlattenProp(props) {\n return factory((0,esm_extends/* default */.A)({}, props, props[propName]));\n };\n\n if (false) {}\n\n return FlattenProp;\n };\n};\n\nvar withState = function withState(stateName, stateUpdaterName, initialState) {\n return function (BaseComponent) {\n var factory = (0,index_js_eager_.createFactory)(BaseComponent);\n\n var WithState =\n /*#__PURE__*/\n function (_Component) {\n (0,inheritsLoose/* default */.A)(WithState, _Component);\n\n function WithState() {\n var _this;\n\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n _this = _Component.call.apply(_Component, [this].concat(args)) || this;\n _this.state = {\n stateValue: typeof initialState === 'function' ? initialState(_this.props) : initialState\n };\n\n _this.updateStateValue = function (updateFn, callback) {\n return _this.setState(function (_ref) {\n var stateValue = _ref.stateValue;\n return {\n stateValue: typeof updateFn === 'function' ? updateFn(stateValue) : updateFn\n };\n }, callback);\n };\n\n return _this;\n }\n\n var _proto = WithState.prototype;\n\n _proto.render = function render() {\n var _extends2;\n\n return factory((0,esm_extends/* default */.A)({}, this.props, (_extends2 = {}, _extends2[stateName] = this.state.stateValue, _extends2[stateUpdaterName] = this.updateStateValue, _extends2)));\n };\n\n return WithState;\n }(index_js_eager_.Component);\n\n if (false) {}\n\n return WithState;\n };\n};\n\nvar withStateHandlers = function withStateHandlers(initialState, stateUpdaters) {\n return function (BaseComponent) {\n var factory = (0,index_js_eager_.createFactory)(BaseComponent);\n\n var WithStateHandlers =\n /*#__PURE__*/\n function (_Component) {\n (0,inheritsLoose/* default */.A)(WithStateHandlers, _Component);\n\n function WithStateHandlers() {\n var _this;\n\n for (var _len = arguments.length, _args = new Array(_len), _key = 0; _key < _len; _key++) {\n _args[_key] = arguments[_key];\n }\n\n _this = _Component.call.apply(_Component, [this].concat(_args)) || this;\n _this.state = typeof initialState === 'function' ? initialState(_this.props) : initialState;\n _this.stateUpdaters = mapValues(stateUpdaters, function (handler) {\n return function (mayBeEvent) {\n for (var _len2 = arguments.length, args = new Array(_len2 > 1 ? _len2 - 1 : 0), _key2 = 1; _key2 < _len2; _key2++) {\n args[_key2 - 1] = arguments[_key2];\n }\n\n // Having that functional form of setState can be called async\n // we need to persist SyntheticEvent\n if (mayBeEvent && typeof mayBeEvent.persist === 'function') {\n mayBeEvent.persist();\n }\n\n _this.setState(function (state, props) {\n return handler(state, props).apply(void 0, [mayBeEvent].concat(args));\n });\n };\n });\n return _this;\n }\n\n var _proto = WithStateHandlers.prototype;\n\n _proto.render = function render() {\n return factory((0,esm_extends/* default */.A)({}, this.props, this.state, this.stateUpdaters));\n };\n\n return WithStateHandlers;\n }(index_js_eager_.Component);\n\n if (false) {}\n\n return WithStateHandlers;\n };\n};\n\nvar noop = function noop() {};\n\nvar withReducer = function withReducer(stateName, dispatchName, reducer, initialState) {\n return function (BaseComponent) {\n var factory = (0,index_js_eager_.createFactory)(BaseComponent);\n\n var WithReducer =\n /*#__PURE__*/\n function (_Component) {\n (0,inheritsLoose/* default */.A)(WithReducer, _Component);\n\n function WithReducer() {\n var _this;\n\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n _this = _Component.call.apply(_Component, [this].concat(args)) || this;\n _this.state = {\n stateValue: _this.initializeStateValue()\n };\n\n _this.dispatch = function (action, callback) {\n if (callback === void 0) {\n callback = noop;\n }\n\n return _this.setState(function (_ref) {\n var stateValue = _ref.stateValue;\n return {\n stateValue: reducer(stateValue, action)\n };\n }, function () {\n return callback(_this.state.stateValue);\n });\n };\n\n return _this;\n }\n\n var _proto = WithReducer.prototype;\n\n _proto.initializeStateValue = function initializeStateValue() {\n if (initialState !== undefined) {\n return typeof initialState === 'function' ? initialState(this.props) : initialState;\n }\n\n return reducer(undefined, {\n type: '@@recompose/INIT'\n });\n };\n\n _proto.render = function render() {\n var _extends2;\n\n return factory((0,esm_extends/* default */.A)({}, this.props, (_extends2 = {}, _extends2[stateName] = this.state.stateValue, _extends2[dispatchName] = this.dispatch, _extends2)));\n };\n\n return WithReducer;\n }(index_js_eager_.Component);\n\n if (false) {}\n\n return WithReducer;\n };\n};\n\nvar identity = function identity(Component$$1) {\n return Component$$1;\n};\n\nvar branch = function branch(test, left, right) {\n if (right === void 0) {\n right = identity;\n }\n\n return function (BaseComponent) {\n var leftFactory;\n var rightFactory;\n\n var Branch = function Branch(props) {\n if (test(props)) {\n leftFactory = leftFactory || (0,index_js_eager_.createFactory)(left(BaseComponent));\n return leftFactory(props);\n }\n\n rightFactory = rightFactory || (0,index_js_eager_.createFactory)(right(BaseComponent));\n return rightFactory(props);\n };\n\n if (false) {}\n\n return Branch;\n };\n};\n\nvar renderComponent = function renderComponent(Component$$1) {\n return function (_) {\n var factory = (0,index_js_eager_.createFactory)(Component$$1);\n\n var RenderComponent = function RenderComponent(props) {\n return factory(props);\n };\n\n if (false) {}\n\n return RenderComponent;\n };\n};\n\nvar Nothing =\n/*#__PURE__*/\nfunction (_Component) {\n (0,inheritsLoose/* default */.A)(Nothing, _Component);\n\n function Nothing() {\n return _Component.apply(this, arguments) || this;\n }\n\n var _proto = Nothing.prototype;\n\n _proto.render = function render() {\n return null;\n };\n\n return Nothing;\n}(index_js_eager_.Component);\n\nvar renderNothing = function renderNothing(_) {\n return Nothing;\n};\n\nvar shouldUpdate = function shouldUpdate(test) {\n return function (BaseComponent) {\n var factory = (0,index_js_eager_.createFactory)(BaseComponent);\n\n var ShouldUpdate =\n /*#__PURE__*/\n function (_Component) {\n (0,inheritsLoose/* default */.A)(ShouldUpdate, _Component);\n\n function ShouldUpdate() {\n return _Component.apply(this, arguments) || this;\n }\n\n var _proto = ShouldUpdate.prototype;\n\n _proto.shouldComponentUpdate = function shouldComponentUpdate(nextProps) {\n return test(this.props, nextProps);\n };\n\n _proto.render = function render() {\n return factory(this.props);\n };\n\n return ShouldUpdate;\n }(index_js_eager_.Component);\n\n if (false) {}\n\n return ShouldUpdate;\n };\n};\n\nvar pure = function pure(BaseComponent) {\n var hoc = shouldUpdate(function (props, nextProps) {\n return !shallowEqual_default()(props, nextProps);\n });\n\n if (false) {}\n\n return hoc(BaseComponent);\n};\n\nvar onlyUpdateForKeys = function onlyUpdateForKeys(propKeys) {\n var hoc = shouldUpdate(function (props, nextProps) {\n return !shallowEqual_default()(pick(nextProps, propKeys), pick(props, propKeys));\n });\n\n if (false) {}\n\n return hoc;\n};\n\nvar onlyUpdateForPropTypes = function onlyUpdateForPropTypes(BaseComponent) {\n var propTypes = BaseComponent.propTypes;\n\n if (false) {}\n\n var propKeys = Object.keys(propTypes || {});\n var OnlyUpdateForPropTypes = onlyUpdateForKeys(propKeys)(BaseComponent);\n\n if (false) {}\n\n return OnlyUpdateForPropTypes;\n};\n\nvar withContext = function withContext(childContextTypes, getChildContext) {\n return function (BaseComponent) {\n var factory = (0,index_js_eager_.createFactory)(BaseComponent);\n\n var WithContext =\n /*#__PURE__*/\n function (_Component) {\n (0,inheritsLoose/* default */.A)(WithContext, _Component);\n\n function WithContext() {\n var _this;\n\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n _this = _Component.call.apply(_Component, [this].concat(args)) || this;\n\n _this.getChildContext = function () {\n return getChildContext(_this.props);\n };\n\n return _this;\n }\n\n var _proto = WithContext.prototype;\n\n _proto.render = function render() {\n return factory(this.props);\n };\n\n return WithContext;\n }(index_js_eager_.Component);\n\n WithContext.childContextTypes = childContextTypes;\n\n if (false) {}\n\n return WithContext;\n };\n};\n\nvar getContext = function getContext(contextTypes) {\n return function (BaseComponent) {\n var factory = (0,index_js_eager_.createFactory)(BaseComponent);\n\n var GetContext = function GetContext(ownerProps, context) {\n return factory((0,esm_extends/* default */.A)({}, ownerProps, context));\n };\n\n GetContext.contextTypes = contextTypes;\n\n if (false) {}\n\n return GetContext;\n };\n};\n\nvar lifecycle = function lifecycle(spec) {\n return function (BaseComponent) {\n var factory = (0,index_js_eager_.createFactory)(BaseComponent);\n\n if (false) {}\n\n var Lifecycle =\n /*#__PURE__*/\n function (_Component) {\n (0,inheritsLoose/* default */.A)(Lifecycle, _Component);\n\n function Lifecycle() {\n return _Component.apply(this, arguments) || this;\n }\n\n var _proto = Lifecycle.prototype;\n\n _proto.render = function render() {\n return factory((0,esm_extends/* default */.A)({}, this.props, this.state));\n };\n\n return Lifecycle;\n }(index_js_eager_.Component);\n\n Object.keys(spec).forEach(function (hook) {\n return Lifecycle.prototype[hook] = spec[hook];\n });\n\n if (false) {}\n\n return Lifecycle;\n };\n};\n\nvar isClassComponent = function isClassComponent(Component$$1) {\n return Boolean(Component$$1 && Component$$1.prototype && typeof Component$$1.prototype.render === 'function');\n};\n\nvar toClass = function toClass(baseComponent) {\n var _class, _temp;\n\n return isClassComponent(baseComponent) ? baseComponent : (_temp = _class =\n /*#__PURE__*/\n function (_Component) {\n (0,inheritsLoose/* default */.A)(ToClass, _Component);\n\n function ToClass() {\n return _Component.apply(this, arguments) || this;\n }\n\n var _proto = ToClass.prototype;\n\n _proto.render = function render() {\n if (typeof baseComponent === 'string') {\n return index_js_eager_default().createElement(baseComponent, this.props);\n }\n\n return baseComponent(this.props, this.context);\n };\n\n return ToClass;\n }(index_js_eager_.Component), _class.displayName = getDisplayName(baseComponent), _class.propTypes = baseComponent.propTypes, _class.contextTypes = baseComponent.contextTypes, _class.defaultProps = baseComponent.defaultProps, _temp);\n};\n\nfunction toRenderProps(hoc) {\n var RenderPropsComponent = function RenderPropsComponent(props) {\n return props.children(props);\n };\n\n return hoc(RenderPropsComponent);\n}\n\nvar fromRenderProps = function fromRenderProps(RenderPropsComponent, propsMapper, renderPropName) {\n if (renderPropName === void 0) {\n renderPropName = 'children';\n }\n\n return function (BaseComponent) {\n var baseFactory = index_js_eager_default().createFactory(BaseComponent);\n var renderPropsFactory = index_js_eager_default().createFactory(RenderPropsComponent);\n\n var FromRenderProps = function FromRenderProps(ownerProps) {\n var _renderPropsFactory;\n\n return renderPropsFactory((_renderPropsFactory = {}, _renderPropsFactory[renderPropName] = function () {\n return baseFactory((0,esm_extends/* default */.A)({}, ownerProps, propsMapper.apply(void 0, arguments)));\n }, _renderPropsFactory));\n };\n\n if (false) {}\n\n return FromRenderProps;\n };\n};\n\nvar setPropTypes = function setPropTypes(propTypes) {\n return setStatic('propTypes', propTypes);\n};\n\nvar compose = function compose() {\n for (var _len = arguments.length, funcs = new Array(_len), _key = 0; _key < _len; _key++) {\n funcs[_key] = arguments[_key];\n }\n\n return funcs.reduce(function (a, b) {\n return function () {\n return a(b.apply(void 0, arguments));\n };\n }, function (arg) {\n return arg;\n });\n};\n\nvar createSink = function createSink(callback) {\n var Sink =\n /*#__PURE__*/\n function (_Component) {\n (0,inheritsLoose/* default */.A)(Sink, _Component);\n\n function Sink() {\n var _this;\n\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n _this = _Component.call.apply(_Component, [this].concat(args)) || this;\n _this.state = {};\n return _this;\n }\n\n Sink.getDerivedStateFromProps = function getDerivedStateFromProps(nextProps) {\n callback(nextProps);\n return null;\n };\n\n var _proto = Sink.prototype;\n\n _proto.render = function render() {\n return null;\n };\n\n return Sink;\n }(index_js_eager_.Component);\n\n polyfill(Sink);\n return Sink;\n};\n\nvar componentFromProp = function componentFromProp(propName) {\n var Component$$1 = function Component$$1(props) {\n return (0,index_js_eager_.createElement)(props[propName], omit(props, [propName]));\n };\n\n Component$$1.displayName = \"componentFromProp(\" + propName + \")\";\n return Component$$1;\n};\n\nvar nest = function nest() {\n for (var _len = arguments.length, Components = new Array(_len), _key = 0; _key < _len; _key++) {\n Components[_key] = arguments[_key];\n }\n\n var factories = Components.map(index_js_eager_.createFactory);\n\n var Nest = function Nest(_ref) {\n var children = _ref.children,\n props = (0,objectWithoutPropertiesLoose/* default */.A)(_ref, [\"children\"]);\n\n return factories.reduceRight(function (child, factory) {\n return factory(props, child);\n }, children);\n };\n\n if (false) { var displayNames; }\n\n return Nest;\n};\n\nvar hoistStatics = function hoistStatics(higherOrderComponent, blacklist) {\n return function (BaseComponent) {\n var NewComponent = higherOrderComponent(BaseComponent);\n hoist_non_react_statics_cjs_default()(NewComponent, BaseComponent, blacklist);\n return NewComponent;\n };\n};\n\nvar _config = {\n fromESObservable: null,\n toESObservable: null\n};\n\nvar configureObservable = function configureObservable(c) {\n _config = c;\n};\n\nvar config = {\n fromESObservable: function fromESObservable(observable) {\n return typeof _config.fromESObservable === 'function' ? _config.fromESObservable(observable) : observable;\n },\n toESObservable: function toESObservable(stream) {\n return typeof _config.toESObservable === 'function' ? _config.toESObservable(stream) : stream;\n }\n};\n\nvar componentFromStreamWithConfig = function componentFromStreamWithConfig(config$$1) {\n return function (propsToVdom) {\n return (\n /*#__PURE__*/\n function (_Component) {\n (0,inheritsLoose/* default */.A)(ComponentFromStream, _Component);\n\n function ComponentFromStream() {\n var _config$fromESObserva;\n\n var _this;\n\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n _this = _Component.call.apply(_Component, [this].concat(args)) || this;\n _this.state = {\n vdom: null\n };\n _this.propsEmitter = (0,lib/* createChangeEmitter */.F)();\n _this.props$ = config$$1.fromESObservable((_config$fromESObserva = {\n subscribe: function subscribe(observer) {\n var unsubscribe = _this.propsEmitter.listen(function (props) {\n if (props) {\n observer.next(props);\n } else {\n observer.complete();\n }\n });\n\n return {\n unsubscribe: unsubscribe\n };\n }\n }, _config$fromESObserva[es/* default */.A] = function () {\n return this;\n }, _config$fromESObserva));\n _this.vdom$ = config$$1.toESObservable(propsToVdom(_this.props$));\n return _this;\n }\n\n var _proto = ComponentFromStream.prototype;\n\n _proto.componentWillMount = function componentWillMount() {\n var _this2 = this;\n\n // Subscribe to child prop changes so we know when to re-render\n this.subscription = this.vdom$.subscribe({\n next: function next(vdom) {\n _this2.setState({\n vdom: vdom\n });\n }\n });\n this.propsEmitter.emit(this.props);\n };\n\n _proto.componentWillReceiveProps = function componentWillReceiveProps(nextProps) {\n // Receive new props from the owner\n this.propsEmitter.emit(nextProps);\n };\n\n _proto.shouldComponentUpdate = function shouldComponentUpdate(nextProps, nextState) {\n return nextState.vdom !== this.state.vdom;\n };\n\n _proto.componentWillUnmount = function componentWillUnmount() {\n // Call without arguments to complete stream\n this.propsEmitter.emit(); // Clean-up subscription before un-mounting\n\n this.subscription.unsubscribe();\n };\n\n _proto.render = function render() {\n return this.state.vdom;\n };\n\n return ComponentFromStream;\n }(index_js_eager_.Component)\n );\n };\n};\n\nvar componentFromStream = function componentFromStream(propsToVdom) {\n return componentFromStreamWithConfig(config)(propsToVdom);\n};\n\nvar identity$1 = function identity(t) {\n return t;\n};\n\nvar mapPropsStreamWithConfig = function mapPropsStreamWithConfig(config$$1) {\n var componentFromStream$$1 = componentFromStreamWithConfig({\n fromESObservable: identity$1,\n toESObservable: identity$1\n });\n return function (transform) {\n return function (BaseComponent) {\n var factory = (0,index_js_eager_.createFactory)(BaseComponent);\n var fromESObservable = config$$1.fromESObservable,\n toESObservable = config$$1.toESObservable;\n return componentFromStream$$1(function (props$) {\n var _ref;\n\n return _ref = {\n subscribe: function subscribe(observer) {\n var subscription = toESObservable(transform(fromESObservable(props$))).subscribe({\n next: function next(childProps) {\n return observer.next(factory(childProps));\n }\n });\n return {\n unsubscribe: function unsubscribe() {\n return subscription.unsubscribe();\n }\n };\n }\n }, _ref[es/* default */.A] = function () {\n return this;\n }, _ref;\n });\n };\n };\n};\n\nvar mapPropsStream = function mapPropsStream(transform) {\n var hoc = mapPropsStreamWithConfig(config)(transform);\n\n if (false) {}\n\n return hoc;\n};\n\nvar createEventHandlerWithConfig = function createEventHandlerWithConfig(config$$1) {\n return function () {\n var _config$fromESObserva;\n\n var emitter = (0,lib/* createChangeEmitter */.F)();\n var stream = config$$1.fromESObservable((_config$fromESObserva = {\n subscribe: function subscribe(observer) {\n var unsubscribe = emitter.listen(function (value) {\n return observer.next(value);\n });\n return {\n unsubscribe: unsubscribe\n };\n }\n }, _config$fromESObserva[es/* default */.A] = function () {\n return this;\n }, _config$fromESObserva));\n return {\n handler: emitter.emit,\n stream: stream\n };\n };\n};\nvar createEventHandler = createEventHandlerWithConfig(config);\n\n// Higher-order component helpers\n\n\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMTA1NDAuanMiLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7Ozs7Ozs7OztBQzdKQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFLQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUlBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUtBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFLQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBS0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQU9BO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFJQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUtBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9pdGctbmV4dGdlbi1mcm9udGVuZC8uL25vZGVfbW9kdWxlcy9yZWFjdC1saWZlY3ljbGVzLWNvbXBhdC9yZWFjdC1saWZlY3ljbGVzLWNvbXBhdC5lcy5qcz81NDIyIiwid2VicGFjazovL2l0Zy1uZXh0Z2VuLWZyb250ZW5kLy4vbm9kZV9tb2R1bGVzL3JlY29tcG9zZS9kaXN0L1JlY29tcG9zZS5lc20uanM/Nzg3MSJdLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIENvcHlyaWdodCAoYykgMjAxMy1wcmVzZW50LCBGYWNlYm9vaywgSW5jLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLlxuICovXG5cbmZ1bmN0aW9uIGNvbXBvbmVudFdpbGxNb3VudCgpIHtcbiAgLy8gQ2FsbCB0aGlzLmNvbnN0cnVjdG9yLmdEU0ZQIHRvIHN1cHBvcnQgc3ViLWNsYXNzZXMuXG4gIHZhciBzdGF0ZSA9IHRoaXMuY29uc3RydWN0b3IuZ2V0RGVyaXZlZFN0YXRlRnJvbVByb3BzKHRoaXMucHJvcHMsIHRoaXMuc3RhdGUpO1xuICBpZiAoc3RhdGUgIT09IG51bGwgJiYgc3RhdGUgIT09IHVuZGVmaW5lZCkge1xuICAgIHRoaXMuc2V0U3RhdGUoc3RhdGUpO1xuICB9XG59XG5cbmZ1bmN0aW9uIGNvbXBvbmVudFdpbGxSZWNlaXZlUHJvcHMobmV4dFByb3BzKSB7XG4gIC8vIENhbGwgdGhpcy5jb25zdHJ1Y3Rvci5nRFNGUCB0byBzdXBwb3J0IHN1Yi1jbGFzc2VzLlxuICAvLyBVc2UgdGhlIHNldFN0YXRlKCkgdXBkYXRlciB0byBlbnN1cmUgc3RhdGUgaXNuJ3Qgc3RhbGUgaW4gY2VydGFpbiBlZGdlIGNhc2VzLlxuICBmdW5jdGlvbiB1cGRhdGVyKHByZXZTdGF0ZSkge1xuICAgIHZhciBzdGF0ZSA9IHRoaXMuY29uc3RydWN0b3IuZ2V0RGVyaXZlZFN0YXRlRnJvbVByb3BzKG5leHRQcm9wcywgcHJldlN0YXRlKTtcbiAgICByZXR1cm4gc3RhdGUgIT09IG51bGwgJiYgc3RhdGUgIT09IHVuZGVmaW5lZCA/IHN0YXRlIDogbnVsbDtcbiAgfVxuICAvLyBCaW5kaW5nIFwidGhpc1wiIGlzIGltcG9ydGFudCBmb3Igc2hhbGxvdyByZW5kZXJlciBzdXBwb3J0LlxuICB0aGlzLnNldFN0YXRlKHVwZGF0ZXIuYmluZCh0aGlzKSk7XG59XG5cbmZ1bmN0aW9uIGNvbXBvbmVudFdpbGxVcGRhdGUobmV4dFByb3BzLCBuZXh0U3RhdGUpIHtcbiAgdHJ5IHtcbiAgICB2YXIgcHJldlByb3BzID0gdGhpcy5wcm9wcztcbiAgICB2YXIgcHJldlN0YXRlID0gdGhpcy5zdGF0ZTtcbiAgICB0aGlzLnByb3BzID0gbmV4dFByb3BzO1xuICAgIHRoaXMuc3RhdGUgPSBuZXh0U3RhdGU7XG4gICAgdGhpcy5fX3JlYWN0SW50ZXJuYWxTbmFwc2hvdEZsYWcgPSB0cnVlO1xuICAgIHRoaXMuX19yZWFjdEludGVybmFsU25hcHNob3QgPSB0aGlzLmdldFNuYXBzaG90QmVmb3JlVXBkYXRlKFxuICAgICAgcHJldlByb3BzLFxuICAgICAgcHJldlN0YXRlXG4gICAgKTtcbiAgfSBmaW5hbGx5IHtcbiAgICB0aGlzLnByb3BzID0gcHJldlByb3BzO1xuICAgIHRoaXMuc3RhdGUgPSBwcmV2U3RhdGU7XG4gIH1cbn1cblxuLy8gUmVhY3QgbWF5IHdhcm4gYWJvdXQgY1dNL2NXUlAvY1dVIG1ldGhvZHMgYmVpbmcgZGVwcmVjYXRlZC5cbi8vIEFkZCBhIGZsYWcgdG8gc3VwcHJlc3MgdGhlc2Ugd2FybmluZ3MgZm9yIHRoaXMgc3BlY2lhbCBjYXNlLlxuY29tcG9uZW50V2lsbE1vdW50Ll9fc3VwcHJlc3NEZXByZWNhdGlvbldhcm5pbmcgPSB0cnVlO1xuY29tcG9uZW50V2lsbFJlY2VpdmVQcm9wcy5fX3N1cHByZXNzRGVwcmVjYXRpb25XYXJuaW5nID0gdHJ1ZTtcbmNvbXBvbmVudFdpbGxVcGRhdGUuX19zdXBwcmVzc0RlcHJlY2F0aW9uV2FybmluZyA9IHRydWU7XG5cbmZ1bmN0aW9uIHBvbHlmaWxsKENvbXBvbmVudCkge1xuICB2YXIgcHJvdG90eXBlID0gQ29tcG9uZW50LnByb3RvdHlwZTtcblxuICBpZiAoIXByb3RvdHlwZSB8fCAhcHJvdG90eXBlLmlzUmVhY3RDb21wb25lbnQpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ0NhbiBvbmx5IHBvbHlmaWxsIGNsYXNzIGNvbXBvbmVudHMnKTtcbiAgfVxuXG4gIGlmIChcbiAgICB0eXBlb2YgQ29tcG9uZW50LmdldERlcml2ZWRTdGF0ZUZyb21Qcm9wcyAhPT0gJ2Z1bmN0aW9uJyAmJlxuICAgIHR5cGVvZiBwcm90b3R5cGUuZ2V0U25hcHNob3RCZWZvcmVVcGRhdGUgIT09ICdmdW5jdGlvbidcbiAgKSB7XG4gICAgcmV0dXJuIENvbXBvbmVudDtcbiAgfVxuXG4gIC8vIElmIG5ldyBjb21wb25lbnQgQVBJcyBhcmUgZGVmaW5lZCwgXCJ1bnNhZmVcIiBsaWZlY3ljbGVzIHdvbid0IGJlIGNhbGxlZC5cbiAgLy8gRXJyb3IgaWYgYW55IG9mIHRoZXNlIGxpZmVjeWNsZXMgYXJlIHByZXNlbnQsXG4gIC8vIEJlY2F1c2UgdGhleSB3b3VsZCB3b3JrIGRpZmZlcmVudGx5IGJldHdlZW4gb2xkZXIgYW5kIG5ld2VyICgxNi4zKykgdmVyc2lvbnMgb2YgUmVhY3QuXG4gIHZhciBmb3VuZFdpbGxNb3VudE5hbWUgPSBudWxsO1xuICB2YXIgZm91bmRXaWxsUmVjZWl2ZVByb3BzTmFtZSA9IG51bGw7XG4gIHZhciBmb3VuZFdpbGxVcGRhdGVOYW1lID0gbnVsbDtcbiAgaWYgKHR5cGVvZiBwcm90b3R5cGUuY29tcG9uZW50V2lsbE1vdW50ID09PSAnZnVuY3Rpb24nKSB7XG4gICAgZm91bmRXaWxsTW91bnROYW1lID0gJ2NvbXBvbmVudFdpbGxNb3VudCc7XG4gIH0gZWxzZSBpZiAodHlwZW9mIHByb3RvdHlwZS5VTlNBRkVfY29tcG9uZW50V2lsbE1vdW50ID09PSAnZnVuY3Rpb24nKSB7XG4gICAgZm91bmRXaWxsTW91bnROYW1lID0gJ1VOU0FGRV9jb21wb25lbnRXaWxsTW91bnQnO1xuICB9XG4gIGlmICh0eXBlb2YgcHJvdG90eXBlLmNvbXBvbmVudFdpbGxSZWNlaXZlUHJvcHMgPT09ICdmdW5jdGlvbicpIHtcbiAgICBmb3VuZFdpbGxSZWNlaXZlUHJvcHNOYW1lID0gJ2NvbXBvbmVudFdpbGxSZWNlaXZlUHJvcHMnO1xuICB9IGVsc2UgaWYgKHR5cGVvZiBwcm90b3R5cGUuVU5TQUZFX2NvbXBvbmVudFdpbGxSZWNlaXZlUHJvcHMgPT09ICdmdW5jdGlvbicpIHtcbiAgICBmb3VuZFdpbGxSZWNlaXZlUHJvcHNOYW1lID0gJ1VOU0FGRV9jb21wb25lbnRXaWxsUmVjZWl2ZVByb3BzJztcbiAgfVxuICBpZiAodHlwZW9mIHByb3RvdHlwZS5jb21wb25lbnRXaWxsVXBkYXRlID09PSAnZnVuY3Rpb24nKSB7XG4gICAgZm91bmRXaWxsVXBkYXRlTmFtZSA9ICdjb21wb25lbnRXaWxsVXBkYXRlJztcbiAgfSBlbHNlIGlmICh0eXBlb2YgcHJvdG90eXBlLlVOU0FGRV9jb21wb25lbnRXaWxsVXBkYXRlID09PSAnZnVuY3Rpb24nKSB7XG4gICAgZm91bmRXaWxsVXBkYXRlTmFtZSA9ICdVTlNBRkVfY29tcG9uZW50V2lsbFVwZGF0ZSc7XG4gIH1cbiAgaWYgKFxuICAgIGZvdW5kV2lsbE1vdW50TmFtZSAhPT0gbnVsbCB8fFxuICAgIGZvdW5kV2lsbFJlY2VpdmVQcm9wc05hbWUgIT09IG51bGwgfHxcbiAgICBmb3VuZFdpbGxVcGRhdGVOYW1lICE9PSBudWxsXG4gICkge1xuICAgIHZhciBjb21wb25lbnROYW1lID0gQ29tcG9uZW50LmRpc3BsYXlOYW1lIHx8IENvbXBvbmVudC5uYW1lO1xuICAgIHZhciBuZXdBcGlOYW1lID1cbiAgICAgIHR5cGVvZiBDb21wb25lbnQuZ2V0RGVyaXZlZFN0YXRlRnJvbVByb3BzID09PSAnZnVuY3Rpb24nXG4gICAgICAgID8gJ2dldERlcml2ZWRTdGF0ZUZyb21Qcm9wcygpJ1xuICAgICAgICA6ICdnZXRTbmFwc2hvdEJlZm9yZVVwZGF0ZSgpJztcblxuICAgIHRocm93IEVycm9yKFxuICAgICAgJ1Vuc2FmZSBsZWdhY3kgbGlmZWN5Y2xlcyB3aWxsIG5vdCBiZSBjYWxsZWQgZm9yIGNvbXBvbmVudHMgdXNpbmcgbmV3IGNvbXBvbmVudCBBUElzLlxcblxcbicgK1xuICAgICAgICBjb21wb25lbnROYW1lICtcbiAgICAgICAgJyB1c2VzICcgK1xuICAgICAgICBuZXdBcGlOYW1lICtcbiAgICAgICAgJyBidXQgYWxzbyBjb250YWlucyB0aGUgZm9sbG93aW5nIGxlZ2FjeSBsaWZlY3ljbGVzOicgK1xuICAgICAgICAoZm91bmRXaWxsTW91bnROYW1lICE9PSBudWxsID8gJ1xcbiAgJyArIGZvdW5kV2lsbE1vdW50TmFtZSA6ICcnKSArXG4gICAgICAgIChmb3VuZFdpbGxSZWNlaXZlUHJvcHNOYW1lICE9PSBudWxsXG4gICAgICAgICAgPyAnXFxuICAnICsgZm91bmRXaWxsUmVjZWl2ZVByb3BzTmFtZVxuICAgICAgICAgIDogJycpICtcbiAgICAgICAgKGZvdW5kV2lsbFVwZGF0ZU5hbWUgIT09IG51bGwgPyAnXFxuICAnICsgZm91bmRXaWxsVXBkYXRlTmFtZSA6ICcnKSArXG4gICAgICAgICdcXG5cXG5UaGUgYWJvdmUgbGlmZWN5Y2xlcyBzaG91bGQgYmUgcmVtb3ZlZC4gTGVhcm4gbW9yZSBhYm91dCB0aGlzIHdhcm5pbmcgaGVyZTpcXG4nICtcbiAgICAgICAgJ2h0dHBzOi8vZmIubWUvcmVhY3QtYXN5bmMtY29tcG9uZW50LWxpZmVjeWNsZS1ob29rcydcbiAgICApO1xuICB9XG5cbiAgLy8gUmVhY3QgPD0gMTYuMiBkb2VzIG5vdCBzdXBwb3J0IHN0YXRpYyBnZXREZXJpdmVkU3RhdGVGcm9tUHJvcHMuXG4gIC8vIEFzIGEgd29ya2Fyb3VuZCwgdXNlIGNXTSBhbmQgY1dSUCB0byBpbnZva2UgdGhlIG5ldyBzdGF0aWMgbGlmZWN5Y2xlLlxuICAvLyBOZXdlciB2ZXJzaW9ucyBvZiBSZWFjdCB3aWxsIGlnbm9yZSB0aGVzZSBsaWZlY3ljbGVzIGlmIGdEU0ZQIGV4aXN0cy5cbiAgaWYgKHR5cGVvZiBDb21wb25lbnQuZ2V0RGVyaXZlZFN0YXRlRnJvbVByb3BzID09PSAnZnVuY3Rpb24nKSB7XG4gICAgcHJvdG90eXBlLmNvbXBvbmVudFdpbGxNb3VudCA9IGNvbXBvbmVudFdpbGxNb3VudDtcbiAgICBwcm90b3R5cGUuY29tcG9uZW50V2lsbFJlY2VpdmVQcm9wcyA9IGNvbXBvbmVudFdpbGxSZWNlaXZlUHJvcHM7XG4gIH1cblxuICAvLyBSZWFjdCA8PSAxNi4yIGRvZXMgbm90IHN1cHBvcnQgZ2V0U25hcHNob3RCZWZvcmVVcGRhdGUuXG4gIC8vIEFzIGEgd29ya2Fyb3VuZCwgdXNlIGNXVSB0byBpbnZva2UgdGhlIG5ldyBsaWZlY3ljbGUuXG4gIC8vIE5ld2VyIHZlcnNpb25zIG9mIFJlYWN0IHdpbGwgaWdub3JlIHRoYXQgbGlmZWN5Y2xlIGlmIGdTQlUgZXhpc3RzLlxuICBpZiAodHlwZW9mIHByb3RvdHlwZS5nZXRTbmFwc2hvdEJlZm9yZVVwZGF0ZSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIGlmICh0eXBlb2YgcHJvdG90eXBlLmNvbXBvbmVudERpZFVwZGF0ZSAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAnQ2Fubm90IHBvbHlmaWxsIGdldFNuYXBzaG90QmVmb3JlVXBkYXRlKCkgZm9yIGNvbXBvbmVudHMgdGhhdCBkbyBub3QgZGVmaW5lIGNvbXBvbmVudERpZFVwZGF0ZSgpIG9uIHRoZSBwcm90b3R5cGUnXG4gICAgICApO1xuICAgIH1cblxuICAgIHByb3RvdHlwZS5jb21wb25lbnRXaWxsVXBkYXRlID0gY29tcG9uZW50V2lsbFVwZGF0ZTtcblxuICAgIHZhciBjb21wb25lbnREaWRVcGRhdGUgPSBwcm90b3R5cGUuY29tcG9uZW50RGlkVXBkYXRlO1xuXG4gICAgcHJvdG90eXBlLmNvbXBvbmVudERpZFVwZGF0ZSA9IGZ1bmN0aW9uIGNvbXBvbmVudERpZFVwZGF0ZVBvbHlmaWxsKFxuICAgICAgcHJldlByb3BzLFxuICAgICAgcHJldlN0YXRlLFxuICAgICAgbWF5YmVTbmFwc2hvdFxuICAgICkge1xuICAgICAgLy8gMTYuMysgd2lsbCBub3QgZXhlY3V0ZSBvdXIgd2lsbC11cGRhdGUgbWV0aG9kO1xuICAgICAgLy8gSXQgd2lsbCBwYXNzIGEgc25hcHNob3QgdmFsdWUgdG8gZGlkLXVwZGF0ZSB0aG91Z2guXG4gICAgICAvLyBPbGRlciB2ZXJzaW9ucyB3aWxsIHJlcXVpcmUgb3VyIHBvbHlmaWxsZWQgd2lsbC11cGRhdGUgdmFsdWUuXG4gICAgICAvLyBXZSBuZWVkIHRvIGhhbmRsZSBib3RoIGNhc2VzLCBidXQgY2FuJ3QganVzdCBjaGVjayBmb3IgdGhlIHByZXNlbmNlIG9mIFwibWF5YmVTbmFwc2hvdFwiLFxuICAgICAgLy8gQmVjYXVzZSBmb3IgPD0gMTUueCB2ZXJzaW9ucyB0aGlzIG1pZ2h0IGJlIGEgXCJwcmV2Q29udGV4dFwiIG9iamVjdC5cbiAgICAgIC8vIFdlIGFsc28gY2FuJ3QganVzdCBjaGVjayBcIl9fcmVhY3RJbnRlcm5hbFNuYXBzaG90XCIsXG4gICAgICAvLyBCZWNhdXNlIGdldC1zbmFwc2hvdCBtaWdodCByZXR1cm4gYSBmYWxzeSB2YWx1ZS5cbiAgICAgIC8vIFNvIGNoZWNrIGZvciB0aGUgZXhwbGljaXQgX19yZWFjdEludGVybmFsU25hcHNob3RGbGFnIGZsYWcgdG8gZGV0ZXJtaW5lIGJlaGF2aW9yLlxuICAgICAgdmFyIHNuYXBzaG90ID0gdGhpcy5fX3JlYWN0SW50ZXJuYWxTbmFwc2hvdEZsYWdcbiAgICAgICAgPyB0aGlzLl9fcmVhY3RJbnRlcm5hbFNuYXBzaG90XG4gICAgICAgIDogbWF5YmVTbmFwc2hvdDtcblxuICAgICAgY29tcG9uZW50RGlkVXBkYXRlLmNhbGwodGhpcywgcHJldlByb3BzLCBwcmV2U3RhdGUsIHNuYXBzaG90KTtcbiAgICB9O1xuICB9XG5cbiAgcmV0dXJuIENvbXBvbmVudDtcbn1cblxuZXhwb3J0IHsgcG9seWZpbGwgfTtcbiIsImltcG9ydCBSZWFjdCwgeyBjcmVhdGVGYWN0b3J5LCBDb21wb25lbnQsIGNyZWF0ZUVsZW1lbnQgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgX2V4dGVuZHMgZnJvbSAnQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vZXh0ZW5kcyc7XG5pbXBvcnQgc2hhbGxvd0VxdWFsIGZyb20gJ2ZianMvbGliL3NoYWxsb3dFcXVhbCc7XG5pbXBvcnQgX2luaGVyaXRzTG9vc2UgZnJvbSAnQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vaW5oZXJpdHNMb29zZSc7XG5pbXBvcnQgeyBwb2x5ZmlsbCB9IGZyb20gJ3JlYWN0LWxpZmVjeWNsZXMtY29tcGF0JztcbmltcG9ydCBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSBmcm9tICdAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlJztcbmltcG9ydCBob2lzdE5vblJlYWN0U3RhdGljcyBmcm9tICdob2lzdC1ub24tcmVhY3Qtc3RhdGljcyc7XG5pbXBvcnQgeyBjcmVhdGVDaGFuZ2VFbWl0dGVyIH0gZnJvbSAnY2hhbmdlLWVtaXR0ZXInO1xuaW1wb3J0ICQkb2JzZXJ2YWJsZSBmcm9tICdzeW1ib2wtb2JzZXJ2YWJsZSc7XG5cbnZhciBzZXRTdGF0aWMgPSBmdW5jdGlvbiBzZXRTdGF0aWMoa2V5LCB2YWx1ZSkge1xuICByZXR1cm4gZnVuY3Rpb24gKEJhc2VDb21wb25lbnQpIHtcbiAgICAvKiBlc2xpbnQtZGlzYWJsZSBuby1wYXJhbS1yZWFzc2lnbiAqL1xuICAgIEJhc2VDb21wb25lbnRba2V5XSA9IHZhbHVlO1xuICAgIC8qIGVzbGludC1lbmFibGUgbm8tcGFyYW0tcmVhc3NpZ24gKi9cblxuICAgIHJldHVybiBCYXNlQ29tcG9uZW50O1xuICB9O1xufTtcblxudmFyIHNldERpc3BsYXlOYW1lID0gZnVuY3Rpb24gc2V0RGlzcGxheU5hbWUoZGlzcGxheU5hbWUpIHtcbiAgcmV0dXJuIHNldFN0YXRpYygnZGlzcGxheU5hbWUnLCBkaXNwbGF5TmFtZSk7XG59O1xuXG52YXIgZ2V0RGlzcGxheU5hbWUgPSBmdW5jdGlvbiBnZXREaXNwbGF5TmFtZShDb21wb25lbnQkJDEpIHtcbiAgaWYgKHR5cGVvZiBDb21wb25lbnQkJDEgPT09ICdzdHJpbmcnKSB7XG4gICAgcmV0dXJuIENvbXBvbmVudCQkMTtcbiAgfVxuXG4gIGlmICghQ29tcG9uZW50JCQxKSB7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuXG4gIHJldHVybiBDb21wb25lbnQkJDEuZGlzcGxheU5hbWUgfHwgQ29tcG9uZW50JCQxLm5hbWUgfHwgJ0NvbXBvbmVudCc7XG59O1xuXG52YXIgd3JhcERpc3BsYXlOYW1lID0gZnVuY3Rpb24gd3JhcERpc3BsYXlOYW1lKEJhc2VDb21wb25lbnQsIGhvY05hbWUpIHtcbiAgcmV0dXJuIGhvY05hbWUgKyBcIihcIiArIGdldERpc3BsYXlOYW1lKEJhc2VDb21wb25lbnQpICsgXCIpXCI7XG59O1xuXG52YXIgbWFwUHJvcHMgPSBmdW5jdGlvbiBtYXBQcm9wcyhwcm9wc01hcHBlcikge1xuICByZXR1cm4gZnVuY3Rpb24gKEJhc2VDb21wb25lbnQpIHtcbiAgICB2YXIgZmFjdG9yeSA9IGNyZWF0ZUZhY3RvcnkoQmFzZUNvbXBvbmVudCk7XG5cbiAgICB2YXIgTWFwUHJvcHMgPSBmdW5jdGlvbiBNYXBQcm9wcyhwcm9wcykge1xuICAgICAgcmV0dXJuIGZhY3RvcnkocHJvcHNNYXBwZXIocHJvcHMpKTtcbiAgICB9O1xuXG4gICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICAgIHJldHVybiBzZXREaXNwbGF5TmFtZSh3cmFwRGlzcGxheU5hbWUoQmFzZUNvbXBvbmVudCwgJ21hcFByb3BzJykpKE1hcFByb3BzKTtcbiAgICB9XG5cbiAgICByZXR1cm4gTWFwUHJvcHM7XG4gIH07XG59O1xuXG52YXIgd2l0aFByb3BzID0gZnVuY3Rpb24gd2l0aFByb3BzKGlucHV0KSB7XG4gIHZhciBob2MgPSBtYXBQcm9wcyhmdW5jdGlvbiAocHJvcHMpIHtcbiAgICByZXR1cm4gX2V4dGVuZHMoe30sIHByb3BzLCB0eXBlb2YgaW5wdXQgPT09ICdmdW5jdGlvbicgPyBpbnB1dChwcm9wcykgOiBpbnB1dCk7XG4gIH0pO1xuXG4gIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uIChCYXNlQ29tcG9uZW50KSB7XG4gICAgICByZXR1cm4gc2V0RGlzcGxheU5hbWUod3JhcERpc3BsYXlOYW1lKEJhc2VDb21wb25lbnQsICd3aXRoUHJvcHMnKSkoaG9jKEJhc2VDb21wb25lbnQpKTtcbiAgICB9O1xuICB9XG5cbiAgcmV0dXJuIGhvYztcbn07XG5cbnZhciBwaWNrID0gZnVuY3Rpb24gcGljayhvYmosIGtleXMpIHtcbiAgdmFyIHJlc3VsdCA9IHt9O1xuXG4gIGZvciAodmFyIGkgPSAwOyBpIDwga2V5cy5sZW5ndGg7IGkrKykge1xuICAgIHZhciBrZXkgPSBrZXlzW2ldO1xuXG4gICAgaWYgKG9iai5oYXNPd25Qcm9wZXJ0eShrZXkpKSB7XG4gICAgICByZXN1bHRba2V5XSA9IG9ialtrZXldO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiByZXN1bHQ7XG59O1xuXG52YXIgd2l0aFByb3BzT25DaGFuZ2UgPSBmdW5jdGlvbiB3aXRoUHJvcHNPbkNoYW5nZShzaG91bGRNYXBPcktleXMsIHByb3BzTWFwcGVyKSB7XG4gIHJldHVybiBmdW5jdGlvbiAoQmFzZUNvbXBvbmVudCkge1xuICAgIHZhciBmYWN0b3J5ID0gY3JlYXRlRmFjdG9yeShCYXNlQ29tcG9uZW50KTtcbiAgICB2YXIgc2hvdWxkTWFwID0gdHlwZW9mIHNob3VsZE1hcE9yS2V5cyA9PT0gJ2Z1bmN0aW9uJyA/IHNob3VsZE1hcE9yS2V5cyA6IGZ1bmN0aW9uIChwcm9wcywgbmV4dFByb3BzKSB7XG4gICAgICByZXR1cm4gIXNoYWxsb3dFcXVhbChwaWNrKHByb3BzLCBzaG91bGRNYXBPcktleXMpLCBwaWNrKG5leHRQcm9wcywgc2hvdWxkTWFwT3JLZXlzKSk7XG4gICAgfTtcblxuICAgIHZhciBXaXRoUHJvcHNPbkNoYW5nZSA9XG4gICAgLyojX19QVVJFX18qL1xuICAgIGZ1bmN0aW9uIChfQ29tcG9uZW50KSB7XG4gICAgICBfaW5oZXJpdHNMb29zZShXaXRoUHJvcHNPbkNoYW5nZSwgX0NvbXBvbmVudCk7XG5cbiAgICAgIGZ1bmN0aW9uIFdpdGhQcm9wc09uQ2hhbmdlKCkge1xuICAgICAgICB2YXIgX3RoaXM7XG5cbiAgICAgICAgZm9yICh2YXIgX2xlbiA9IGFyZ3VtZW50cy5sZW5ndGgsIGFyZ3MgPSBuZXcgQXJyYXkoX2xlbiksIF9rZXkgPSAwOyBfa2V5IDwgX2xlbjsgX2tleSsrKSB7XG4gICAgICAgICAgYXJnc1tfa2V5XSA9IGFyZ3VtZW50c1tfa2V5XTtcbiAgICAgICAgfVxuXG4gICAgICAgIF90aGlzID0gX0NvbXBvbmVudC5jYWxsLmFwcGx5KF9Db21wb25lbnQsIFt0aGlzXS5jb25jYXQoYXJncykpIHx8IHRoaXM7XG4gICAgICAgIF90aGlzLnN0YXRlID0ge1xuICAgICAgICAgIGNvbXB1dGVkUHJvcHM6IHByb3BzTWFwcGVyKF90aGlzLnByb3BzKSxcbiAgICAgICAgICBwcmV2UHJvcHM6IF90aGlzLnByb3BzXG4gICAgICAgIH07XG4gICAgICAgIHJldHVybiBfdGhpcztcbiAgICAgIH1cblxuICAgICAgV2l0aFByb3BzT25DaGFuZ2UuZ2V0RGVyaXZlZFN0YXRlRnJvbVByb3BzID0gZnVuY3Rpb24gZ2V0RGVyaXZlZFN0YXRlRnJvbVByb3BzKG5leHRQcm9wcywgcHJldlN0YXRlKSB7XG4gICAgICAgIGlmIChzaG91bGRNYXAocHJldlN0YXRlLnByZXZQcm9wcywgbmV4dFByb3BzKSkge1xuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBjb21wdXRlZFByb3BzOiBwcm9wc01hcHBlcihuZXh0UHJvcHMpLFxuICAgICAgICAgICAgcHJldlByb3BzOiBuZXh0UHJvcHNcbiAgICAgICAgICB9O1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBwcmV2UHJvcHM6IG5leHRQcm9wc1xuICAgICAgICB9O1xuICAgICAgfTtcblxuICAgICAgdmFyIF9wcm90byA9IFdpdGhQcm9wc09uQ2hhbmdlLnByb3RvdHlwZTtcblxuICAgICAgX3Byb3RvLnJlbmRlciA9IGZ1bmN0aW9uIHJlbmRlcigpIHtcbiAgICAgICAgcmV0dXJuIGZhY3RvcnkoX2V4dGVuZHMoe30sIHRoaXMucHJvcHMsIHRoaXMuc3RhdGUuY29tcHV0ZWRQcm9wcykpO1xuICAgICAgfTtcblxuICAgICAgcmV0dXJuIFdpdGhQcm9wc09uQ2hhbmdlO1xuICAgIH0oQ29tcG9uZW50KTtcblxuICAgIHBvbHlmaWxsKFdpdGhQcm9wc09uQ2hhbmdlKTtcblxuICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgICByZXR1cm4gc2V0RGlzcGxheU5hbWUod3JhcERpc3BsYXlOYW1lKEJhc2VDb21wb25lbnQsICd3aXRoUHJvcHNPbkNoYW5nZScpKShXaXRoUHJvcHNPbkNoYW5nZSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIFdpdGhQcm9wc09uQ2hhbmdlO1xuICB9O1xufTtcblxudmFyIG1hcFZhbHVlcyA9IGZ1bmN0aW9uIG1hcFZhbHVlcyhvYmosIGZ1bmMpIHtcbiAgdmFyIHJlc3VsdCA9IHt9O1xuICAvKiBlc2xpbnQtZGlzYWJsZSBuby1yZXN0cmljdGVkLXN5bnRheCAqL1xuXG4gIGZvciAodmFyIGtleSBpbiBvYmopIHtcbiAgICBpZiAob2JqLmhhc093blByb3BlcnR5KGtleSkpIHtcbiAgICAgIHJlc3VsdFtrZXldID0gZnVuYyhvYmpba2V5XSwga2V5KTtcbiAgICB9XG4gIH1cbiAgLyogZXNsaW50LWVuYWJsZSBuby1yZXN0cmljdGVkLXN5bnRheCAqL1xuXG5cbiAgcmV0dXJuIHJlc3VsdDtcbn07XG5cbnZhciB3aXRoSGFuZGxlcnMgPSBmdW5jdGlvbiB3aXRoSGFuZGxlcnMoaGFuZGxlcnMpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIChCYXNlQ29tcG9uZW50KSB7XG4gICAgdmFyIGZhY3RvcnkgPSBjcmVhdGVGYWN0b3J5KEJhc2VDb21wb25lbnQpO1xuXG4gICAgdmFyIFdpdGhIYW5kbGVycyA9XG4gICAgLyojX19QVVJFX18qL1xuICAgIGZ1bmN0aW9uIChfQ29tcG9uZW50KSB7XG4gICAgICBfaW5oZXJpdHNMb29zZShXaXRoSGFuZGxlcnMsIF9Db21wb25lbnQpO1xuXG4gICAgICBmdW5jdGlvbiBXaXRoSGFuZGxlcnMoKSB7XG4gICAgICAgIHZhciBfdGhpcztcblxuICAgICAgICBmb3IgKHZhciBfbGVuID0gYXJndW1lbnRzLmxlbmd0aCwgX2FyZ3MgPSBuZXcgQXJyYXkoX2xlbiksIF9rZXkgPSAwOyBfa2V5IDwgX2xlbjsgX2tleSsrKSB7XG4gICAgICAgICAgX2FyZ3NbX2tleV0gPSBhcmd1bWVudHNbX2tleV07XG4gICAgICAgIH1cblxuICAgICAgICBfdGhpcyA9IF9Db21wb25lbnQuY2FsbC5hcHBseShfQ29tcG9uZW50LCBbdGhpc10uY29uY2F0KF9hcmdzKSkgfHwgdGhpcztcbiAgICAgICAgX3RoaXMuaGFuZGxlcnMgPSBtYXBWYWx1ZXModHlwZW9mIGhhbmRsZXJzID09PSAnZnVuY3Rpb24nID8gaGFuZGxlcnMoX3RoaXMucHJvcHMpIDogaGFuZGxlcnMsIGZ1bmN0aW9uIChjcmVhdGVIYW5kbGVyKSB7XG4gICAgICAgICAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHZhciBoYW5kbGVyID0gY3JlYXRlSGFuZGxlcihfdGhpcy5wcm9wcyk7XG5cbiAgICAgICAgICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nICYmIHR5cGVvZiBoYW5kbGVyICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoIC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tY29uc29sZVxuICAgICAgICAgICAgICAnd2l0aEhhbmRsZXJzKCk6IEV4cGVjdGVkIGEgbWFwIG9mIGhpZ2hlci1vcmRlciBmdW5jdGlvbnMuICcgKyAnUmVmZXIgdG8gdGhlIGRvY3MgZm9yIG1vcmUgaW5mby4nKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcmV0dXJuIGhhbmRsZXIuYXBwbHkodm9pZCAwLCBhcmd1bWVudHMpO1xuICAgICAgICAgIH07XG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gX3RoaXM7XG4gICAgICB9XG5cbiAgICAgIHZhciBfcHJvdG8gPSBXaXRoSGFuZGxlcnMucHJvdG90eXBlO1xuXG4gICAgICBfcHJvdG8ucmVuZGVyID0gZnVuY3Rpb24gcmVuZGVyKCkge1xuICAgICAgICByZXR1cm4gZmFjdG9yeShfZXh0ZW5kcyh7fSwgdGhpcy5wcm9wcywgdGhpcy5oYW5kbGVycykpO1xuICAgICAgfTtcblxuICAgICAgcmV0dXJuIFdpdGhIYW5kbGVycztcbiAgICB9KENvbXBvbmVudCk7XG5cbiAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgICAgcmV0dXJuIHNldERpc3BsYXlOYW1lKHdyYXBEaXNwbGF5TmFtZShCYXNlQ29tcG9uZW50LCAnd2l0aEhhbmRsZXJzJykpKFdpdGhIYW5kbGVycyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIFdpdGhIYW5kbGVycztcbiAgfTtcbn07XG5cbnZhciBkZWZhdWx0UHJvcHMgPSBmdW5jdGlvbiBkZWZhdWx0UHJvcHMocHJvcHMpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIChCYXNlQ29tcG9uZW50KSB7XG4gICAgdmFyIGZhY3RvcnkgPSBjcmVhdGVGYWN0b3J5KEJhc2VDb21wb25lbnQpO1xuXG4gICAgdmFyIERlZmF1bHRQcm9wcyA9IGZ1bmN0aW9uIERlZmF1bHRQcm9wcyhvd25lclByb3BzKSB7XG4gICAgICByZXR1cm4gZmFjdG9yeShvd25lclByb3BzKTtcbiAgICB9O1xuXG4gICAgRGVmYXVsdFByb3BzLmRlZmF1bHRQcm9wcyA9IHByb3BzO1xuXG4gICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICAgIHJldHVybiBzZXREaXNwbGF5TmFtZSh3cmFwRGlzcGxheU5hbWUoQmFzZUNvbXBvbmVudCwgJ2RlZmF1bHRQcm9wcycpKShEZWZhdWx0UHJvcHMpO1xuICAgIH1cblxuICAgIHJldHVybiBEZWZhdWx0UHJvcHM7XG4gIH07XG59O1xuXG52YXIgb21pdCA9IGZ1bmN0aW9uIG9taXQob2JqLCBrZXlzKSB7XG4gIHZhciByZXN0ID0gX2V4dGVuZHMoe30sIG9iaik7XG5cbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBrZXlzLmxlbmd0aDsgaSsrKSB7XG4gICAgdmFyIGtleSA9IGtleXNbaV07XG5cbiAgICBpZiAocmVzdC5oYXNPd25Qcm9wZXJ0eShrZXkpKSB7XG4gICAgICBkZWxldGUgcmVzdFtrZXldO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiByZXN0O1xufTtcblxudmFyIHJlbmFtZVByb3AgPSBmdW5jdGlvbiByZW5hbWVQcm9wKG9sZE5hbWUsIG5ld05hbWUpIHtcbiAgdmFyIGhvYyA9IG1hcFByb3BzKGZ1bmN0aW9uIChwcm9wcykge1xuICAgIHZhciBfZXh0ZW5kczI7XG5cbiAgICByZXR1cm4gX2V4dGVuZHMoe30sIG9taXQocHJvcHMsIFtvbGROYW1lXSksIChfZXh0ZW5kczIgPSB7fSwgX2V4dGVuZHMyW25ld05hbWVdID0gcHJvcHNbb2xkTmFtZV0sIF9leHRlbmRzMikpO1xuICB9KTtcblxuICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgIHJldHVybiBmdW5jdGlvbiAoQmFzZUNvbXBvbmVudCkge1xuICAgICAgcmV0dXJuIHNldERpc3BsYXlOYW1lKHdyYXBEaXNwbGF5TmFtZShCYXNlQ29tcG9uZW50LCAncmVuYW1lUHJvcCcpKShob2MoQmFzZUNvbXBvbmVudCkpO1xuICAgIH07XG4gIH1cblxuICByZXR1cm4gaG9jO1xufTtcblxudmFyIGtleXMgPSBPYmplY3Qua2V5cztcblxudmFyIG1hcEtleXMgPSBmdW5jdGlvbiBtYXBLZXlzKG9iaiwgZnVuYykge1xuICByZXR1cm4ga2V5cyhvYmopLnJlZHVjZShmdW5jdGlvbiAocmVzdWx0LCBrZXkpIHtcbiAgICB2YXIgdmFsID0gb2JqW2tleV07XG4gICAgLyogZXNsaW50LWRpc2FibGUgbm8tcGFyYW0tcmVhc3NpZ24gKi9cblxuICAgIHJlc3VsdFtmdW5jKHZhbCwga2V5KV0gPSB2YWw7XG4gICAgLyogZXNsaW50LWVuYWJsZSBuby1wYXJhbS1yZWFzc2lnbiAqL1xuXG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfSwge30pO1xufTtcblxudmFyIHJlbmFtZVByb3BzID0gZnVuY3Rpb24gcmVuYW1lUHJvcHMobmFtZU1hcCkge1xuICB2YXIgaG9jID0gbWFwUHJvcHMoZnVuY3Rpb24gKHByb3BzKSB7XG4gICAgcmV0dXJuIF9leHRlbmRzKHt9LCBvbWl0KHByb3BzLCBrZXlzKG5hbWVNYXApKSwgbWFwS2V5cyhwaWNrKHByb3BzLCBrZXlzKG5hbWVNYXApKSwgZnVuY3Rpb24gKF8sIG9sZE5hbWUpIHtcbiAgICAgIHJldHVybiBuYW1lTWFwW29sZE5hbWVdO1xuICAgIH0pKTtcbiAgfSk7XG5cbiAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICByZXR1cm4gZnVuY3Rpb24gKEJhc2VDb21wb25lbnQpIHtcbiAgICAgIHJldHVybiBzZXREaXNwbGF5TmFtZSh3cmFwRGlzcGxheU5hbWUoQmFzZUNvbXBvbmVudCwgJ3JlbmFtZVByb3BzJykpKGhvYyhCYXNlQ29tcG9uZW50KSk7XG4gICAgfTtcbiAgfVxuXG4gIHJldHVybiBob2M7XG59O1xuXG52YXIgZmxhdHRlblByb3AgPSBmdW5jdGlvbiBmbGF0dGVuUHJvcChwcm9wTmFtZSkge1xuICByZXR1cm4gZnVuY3Rpb24gKEJhc2VDb21wb25lbnQpIHtcbiAgICB2YXIgZmFjdG9yeSA9IGNyZWF0ZUZhY3RvcnkoQmFzZUNvbXBvbmVudCk7XG5cbiAgICB2YXIgRmxhdHRlblByb3AgPSBmdW5jdGlvbiBGbGF0dGVuUHJvcChwcm9wcykge1xuICAgICAgcmV0dXJuIGZhY3RvcnkoX2V4dGVuZHMoe30sIHByb3BzLCBwcm9wc1twcm9wTmFtZV0pKTtcbiAgICB9O1xuXG4gICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICAgIHJldHVybiBzZXREaXNwbGF5TmFtZSh3cmFwRGlzcGxheU5hbWUoQmFzZUNvbXBvbmVudCwgJ2ZsYXR0ZW5Qcm9wJykpKEZsYXR0ZW5Qcm9wKTtcbiAgICB9XG5cbiAgICByZXR1cm4gRmxhdHRlblByb3A7XG4gIH07XG59O1xuXG52YXIgd2l0aFN0YXRlID0gZnVuY3Rpb24gd2l0aFN0YXRlKHN0YXRlTmFtZSwgc3RhdGVVcGRhdGVyTmFtZSwgaW5pdGlhbFN0YXRlKSB7XG4gIHJldHVybiBmdW5jdGlvbiAoQmFzZUNvbXBvbmVudCkge1xuICAgIHZhciBmYWN0b3J5ID0gY3JlYXRlRmFjdG9yeShCYXNlQ29tcG9uZW50KTtcblxuICAgIHZhciBXaXRoU3RhdGUgPVxuICAgIC8qI19fUFVSRV9fKi9cbiAgICBmdW5jdGlvbiAoX0NvbXBvbmVudCkge1xuICAgICAgX2luaGVyaXRzTG9vc2UoV2l0aFN0YXRlLCBfQ29tcG9uZW50KTtcblxuICAgICAgZnVuY3Rpb24gV2l0aFN0YXRlKCkge1xuICAgICAgICB2YXIgX3RoaXM7XG5cbiAgICAgICAgZm9yICh2YXIgX2xlbiA9IGFyZ3VtZW50cy5sZW5ndGgsIGFyZ3MgPSBuZXcgQXJyYXkoX2xlbiksIF9rZXkgPSAwOyBfa2V5IDwgX2xlbjsgX2tleSsrKSB7XG4gICAgICAgICAgYXJnc1tfa2V5XSA9IGFyZ3VtZW50c1tfa2V5XTtcbiAgICAgICAgfVxuXG4gICAgICAgIF90aGlzID0gX0NvbXBvbmVudC5jYWxsLmFwcGx5KF9Db21wb25lbnQsIFt0aGlzXS5jb25jYXQoYXJncykpIHx8IHRoaXM7XG4gICAgICAgIF90aGlzLnN0YXRlID0ge1xuICAgICAgICAgIHN0YXRlVmFsdWU6IHR5cGVvZiBpbml0aWFsU3RhdGUgPT09ICdmdW5jdGlvbicgPyBpbml0aWFsU3RhdGUoX3RoaXMucHJvcHMpIDogaW5pdGlhbFN0YXRlXG4gICAgICAgIH07XG5cbiAgICAgICAgX3RoaXMudXBkYXRlU3RhdGVWYWx1ZSA9IGZ1bmN0aW9uICh1cGRhdGVGbiwgY2FsbGJhY2spIHtcbiAgICAgICAgICByZXR1cm4gX3RoaXMuc2V0U3RhdGUoZnVuY3Rpb24gKF9yZWYpIHtcbiAgICAgICAgICAgIHZhciBzdGF0ZVZhbHVlID0gX3JlZi5zdGF0ZVZhbHVlO1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgc3RhdGVWYWx1ZTogdHlwZW9mIHVwZGF0ZUZuID09PSAnZnVuY3Rpb24nID8gdXBkYXRlRm4oc3RhdGVWYWx1ZSkgOiB1cGRhdGVGblxuICAgICAgICAgICAgfTtcbiAgICAgICAgICB9LCBjYWxsYmFjayk7XG4gICAgICAgIH07XG5cbiAgICAgICAgcmV0dXJuIF90aGlzO1xuICAgICAgfVxuXG4gICAgICB2YXIgX3Byb3RvID0gV2l0aFN0YXRlLnByb3RvdHlwZTtcblxuICAgICAgX3Byb3RvLnJlbmRlciA9IGZ1bmN0aW9uIHJlbmRlcigpIHtcbiAgICAgICAgdmFyIF9leHRlbmRzMjtcblxuICAgICAgICByZXR1cm4gZmFjdG9yeShfZXh0ZW5kcyh7fSwgdGhpcy5wcm9wcywgKF9leHRlbmRzMiA9IHt9LCBfZXh0ZW5kczJbc3RhdGVOYW1lXSA9IHRoaXMuc3RhdGUuc3RhdGVWYWx1ZSwgX2V4dGVuZHMyW3N0YXRlVXBkYXRlck5hbWVdID0gdGhpcy51cGRhdGVTdGF0ZVZhbHVlLCBfZXh0ZW5kczIpKSk7XG4gICAgICB9O1xuXG4gICAgICByZXR1cm4gV2l0aFN0YXRlO1xuICAgIH0oQ29tcG9uZW50KTtcblxuICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgICByZXR1cm4gc2V0RGlzcGxheU5hbWUod3JhcERpc3BsYXlOYW1lKEJhc2VDb21wb25lbnQsICd3aXRoU3RhdGUnKSkoV2l0aFN0YXRlKTtcbiAgICB9XG5cbiAgICByZXR1cm4gV2l0aFN0YXRlO1xuICB9O1xufTtcblxudmFyIHdpdGhTdGF0ZUhhbmRsZXJzID0gZnVuY3Rpb24gd2l0aFN0YXRlSGFuZGxlcnMoaW5pdGlhbFN0YXRlLCBzdGF0ZVVwZGF0ZXJzKSB7XG4gIHJldHVybiBmdW5jdGlvbiAoQmFzZUNvbXBvbmVudCkge1xuICAgIHZhciBmYWN0b3J5ID0gY3JlYXRlRmFjdG9yeShCYXNlQ29tcG9uZW50KTtcblxuICAgIHZhciBXaXRoU3RhdGVIYW5kbGVycyA9XG4gICAgLyojX19QVVJFX18qL1xuICAgIGZ1bmN0aW9uIChfQ29tcG9uZW50KSB7XG4gICAgICBfaW5oZXJpdHNMb29zZShXaXRoU3RhdGVIYW5kbGVycywgX0NvbXBvbmVudCk7XG5cbiAgICAgIGZ1bmN0aW9uIFdpdGhTdGF0ZUhhbmRsZXJzKCkge1xuICAgICAgICB2YXIgX3RoaXM7XG5cbiAgICAgICAgZm9yICh2YXIgX2xlbiA9IGFyZ3VtZW50cy5sZW5ndGgsIF9hcmdzID0gbmV3IEFycmF5KF9sZW4pLCBfa2V5ID0gMDsgX2tleSA8IF9sZW47IF9rZXkrKykge1xuICAgICAgICAgIF9hcmdzW19rZXldID0gYXJndW1lbnRzW19rZXldO1xuICAgICAgICB9XG5cbiAgICAgICAgX3RoaXMgPSBfQ29tcG9uZW50LmNhbGwuYXBwbHkoX0NvbXBvbmVudCwgW3RoaXNdLmNvbmNhdChfYXJncykpIHx8IHRoaXM7XG4gICAgICAgIF90aGlzLnN0YXRlID0gdHlwZW9mIGluaXRpYWxTdGF0ZSA9PT0gJ2Z1bmN0aW9uJyA/IGluaXRpYWxTdGF0ZShfdGhpcy5wcm9wcykgOiBpbml0aWFsU3RhdGU7XG4gICAgICAgIF90aGlzLnN0YXRlVXBkYXRlcnMgPSBtYXBWYWx1ZXMoc3RhdGVVcGRhdGVycywgZnVuY3Rpb24gKGhhbmRsZXIpIHtcbiAgICAgICAgICByZXR1cm4gZnVuY3Rpb24gKG1heUJlRXZlbnQpIHtcbiAgICAgICAgICAgIGZvciAodmFyIF9sZW4yID0gYXJndW1lbnRzLmxlbmd0aCwgYXJncyA9IG5ldyBBcnJheShfbGVuMiA+IDEgPyBfbGVuMiAtIDEgOiAwKSwgX2tleTIgPSAxOyBfa2V5MiA8IF9sZW4yOyBfa2V5MisrKSB7XG4gICAgICAgICAgICAgIGFyZ3NbX2tleTIgLSAxXSA9IGFyZ3VtZW50c1tfa2V5Ml07XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIEhhdmluZyB0aGF0IGZ1bmN0aW9uYWwgZm9ybSBvZiBzZXRTdGF0ZSBjYW4gYmUgY2FsbGVkIGFzeW5jXG4gICAgICAgICAgICAvLyB3ZSBuZWVkIHRvIHBlcnNpc3QgU3ludGhldGljRXZlbnRcbiAgICAgICAgICAgIGlmIChtYXlCZUV2ZW50ICYmIHR5cGVvZiBtYXlCZUV2ZW50LnBlcnNpc3QgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgICAgbWF5QmVFdmVudC5wZXJzaXN0KCk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIF90aGlzLnNldFN0YXRlKGZ1bmN0aW9uIChzdGF0ZSwgcHJvcHMpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIGhhbmRsZXIoc3RhdGUsIHByb3BzKS5hcHBseSh2b2lkIDAsIFttYXlCZUV2ZW50XS5jb25jYXQoYXJncykpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfTtcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiBfdGhpcztcbiAgICAgIH1cblxuICAgICAgdmFyIF9wcm90byA9IFdpdGhTdGF0ZUhhbmRsZXJzLnByb3RvdHlwZTtcblxuICAgICAgX3Byb3RvLnJlbmRlciA9IGZ1bmN0aW9uIHJlbmRlcigpIHtcbiAgICAgICAgcmV0dXJuIGZhY3RvcnkoX2V4dGVuZHMoe30sIHRoaXMucHJvcHMsIHRoaXMuc3RhdGUsIHRoaXMuc3RhdGVVcGRhdGVycykpO1xuICAgICAgfTtcblxuICAgICAgcmV0dXJuIFdpdGhTdGF0ZUhhbmRsZXJzO1xuICAgIH0oQ29tcG9uZW50KTtcblxuICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgICByZXR1cm4gc2V0RGlzcGxheU5hbWUod3JhcERpc3BsYXlOYW1lKEJhc2VDb21wb25lbnQsICd3aXRoU3RhdGVIYW5kbGVycycpKShXaXRoU3RhdGVIYW5kbGVycyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIFdpdGhTdGF0ZUhhbmRsZXJzO1xuICB9O1xufTtcblxudmFyIG5vb3AgPSBmdW5jdGlvbiBub29wKCkge307XG5cbnZhciB3aXRoUmVkdWNlciA9IGZ1bmN0aW9uIHdpdGhSZWR1Y2VyKHN0YXRlTmFtZSwgZGlzcGF0Y2hOYW1lLCByZWR1Y2VyLCBpbml0aWFsU3RhdGUpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIChCYXNlQ29tcG9uZW50KSB7XG4gICAgdmFyIGZhY3RvcnkgPSBjcmVhdGVGYWN0b3J5KEJhc2VDb21wb25lbnQpO1xuXG4gICAgdmFyIFdpdGhSZWR1Y2VyID1cbiAgICAvKiNfX1BVUkVfXyovXG4gICAgZnVuY3Rpb24gKF9Db21wb25lbnQpIHtcbiAgICAgIF9pbmhlcml0c0xvb3NlKFdpdGhSZWR1Y2VyLCBfQ29tcG9uZW50KTtcblxuICAgICAgZnVuY3Rpb24gV2l0aFJlZHVjZXIoKSB7XG4gICAgICAgIHZhciBfdGhpcztcblxuICAgICAgICBmb3IgKHZhciBfbGVuID0gYXJndW1lbnRzLmxlbmd0aCwgYXJncyA9IG5ldyBBcnJheShfbGVuKSwgX2tleSA9IDA7IF9rZXkgPCBfbGVuOyBfa2V5KyspIHtcbiAgICAgICAgICBhcmdzW19rZXldID0gYXJndW1lbnRzW19rZXldO1xuICAgICAgICB9XG5cbiAgICAgICAgX3RoaXMgPSBfQ29tcG9uZW50LmNhbGwuYXBwbHkoX0NvbXBvbmVudCwgW3RoaXNdLmNvbmNhdChhcmdzKSkgfHwgdGhpcztcbiAgICAgICAgX3RoaXMuc3RhdGUgPSB7XG4gICAgICAgICAgc3RhdGVWYWx1ZTogX3RoaXMuaW5pdGlhbGl6ZVN0YXRlVmFsdWUoKVxuICAgICAgICB9O1xuXG4gICAgICAgIF90aGlzLmRpc3BhdGNoID0gZnVuY3Rpb24gKGFjdGlvbiwgY2FsbGJhY2spIHtcbiAgICAgICAgICBpZiAoY2FsbGJhY2sgPT09IHZvaWQgMCkge1xuICAgICAgICAgICAgY2FsbGJhY2sgPSBub29wO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHJldHVybiBfdGhpcy5zZXRTdGF0ZShmdW5jdGlvbiAoX3JlZikge1xuICAgICAgICAgICAgdmFyIHN0YXRlVmFsdWUgPSBfcmVmLnN0YXRlVmFsdWU7XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICBzdGF0ZVZhbHVlOiByZWR1Y2VyKHN0YXRlVmFsdWUsIGFjdGlvbilcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgfSwgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuIGNhbGxiYWNrKF90aGlzLnN0YXRlLnN0YXRlVmFsdWUpO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9O1xuXG4gICAgICAgIHJldHVybiBfdGhpcztcbiAgICAgIH1cblxuICAgICAgdmFyIF9wcm90byA9IFdpdGhSZWR1Y2VyLnByb3RvdHlwZTtcblxuICAgICAgX3Byb3RvLmluaXRpYWxpemVTdGF0ZVZhbHVlID0gZnVuY3Rpb24gaW5pdGlhbGl6ZVN0YXRlVmFsdWUoKSB7XG4gICAgICAgIGlmIChpbml0aWFsU3RhdGUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIHJldHVybiB0eXBlb2YgaW5pdGlhbFN0YXRlID09PSAnZnVuY3Rpb24nID8gaW5pdGlhbFN0YXRlKHRoaXMucHJvcHMpIDogaW5pdGlhbFN0YXRlO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHJlZHVjZXIodW5kZWZpbmVkLCB7XG4gICAgICAgICAgdHlwZTogJ0BAcmVjb21wb3NlL0lOSVQnXG4gICAgICAgIH0pO1xuICAgICAgfTtcblxuICAgICAgX3Byb3RvLnJlbmRlciA9IGZ1bmN0aW9uIHJlbmRlcigpIHtcbiAgICAgICAgdmFyIF9leHRlbmRzMjtcblxuICAgICAgICByZXR1cm4gZmFjdG9yeShfZXh0ZW5kcyh7fSwgdGhpcy5wcm9wcywgKF9leHRlbmRzMiA9IHt9LCBfZXh0ZW5kczJbc3RhdGVOYW1lXSA9IHRoaXMuc3RhdGUuc3RhdGVWYWx1ZSwgX2V4dGVuZHMyW2Rpc3BhdGNoTmFtZV0gPSB0aGlzLmRpc3BhdGNoLCBfZXh0ZW5kczIpKSk7XG4gICAgICB9O1xuXG4gICAgICByZXR1cm4gV2l0aFJlZHVjZXI7XG4gICAgfShDb21wb25lbnQpO1xuXG4gICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICAgIHJldHVybiBzZXREaXNwbGF5TmFtZSh3cmFwRGlzcGxheU5hbWUoQmFzZUNvbXBvbmVudCwgJ3dpdGhSZWR1Y2VyJykpKFdpdGhSZWR1Y2VyKTtcbiAgICB9XG5cbiAgICByZXR1cm4gV2l0aFJlZHVjZXI7XG4gIH07XG59O1xuXG52YXIgaWRlbnRpdHkgPSBmdW5jdGlvbiBpZGVudGl0eShDb21wb25lbnQkJDEpIHtcbiAgcmV0dXJuIENvbXBvbmVudCQkMTtcbn07XG5cbnZhciBicmFuY2ggPSBmdW5jdGlvbiBicmFuY2godGVzdCwgbGVmdCwgcmlnaHQpIHtcbiAgaWYgKHJpZ2h0ID09PSB2b2lkIDApIHtcbiAgICByaWdodCA9IGlkZW50aXR5O1xuICB9XG5cbiAgcmV0dXJuIGZ1bmN0aW9uIChCYXNlQ29tcG9uZW50KSB7XG4gICAgdmFyIGxlZnRGYWN0b3J5O1xuICAgIHZhciByaWdodEZhY3Rvcnk7XG5cbiAgICB2YXIgQnJhbmNoID0gZnVuY3Rpb24gQnJhbmNoKHByb3BzKSB7XG4gICAgICBpZiAodGVzdChwcm9wcykpIHtcbiAgICAgICAgbGVmdEZhY3RvcnkgPSBsZWZ0RmFjdG9yeSB8fCBjcmVhdGVGYWN0b3J5KGxlZnQoQmFzZUNvbXBvbmVudCkpO1xuICAgICAgICByZXR1cm4gbGVmdEZhY3RvcnkocHJvcHMpO1xuICAgICAgfVxuXG4gICAgICByaWdodEZhY3RvcnkgPSByaWdodEZhY3RvcnkgfHwgY3JlYXRlRmFjdG9yeShyaWdodChCYXNlQ29tcG9uZW50KSk7XG4gICAgICByZXR1cm4gcmlnaHRGYWN0b3J5KHByb3BzKTtcbiAgICB9O1xuXG4gICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICAgIHJldHVybiBzZXREaXNwbGF5TmFtZSh3cmFwRGlzcGxheU5hbWUoQmFzZUNvbXBvbmVudCwgJ2JyYW5jaCcpKShCcmFuY2gpO1xuICAgIH1cblxuICAgIHJldHVybiBCcmFuY2g7XG4gIH07XG59O1xuXG52YXIgcmVuZGVyQ29tcG9uZW50ID0gZnVuY3Rpb24gcmVuZGVyQ29tcG9uZW50KENvbXBvbmVudCQkMSkge1xuICByZXR1cm4gZnVuY3Rpb24gKF8pIHtcbiAgICB2YXIgZmFjdG9yeSA9IGNyZWF0ZUZhY3RvcnkoQ29tcG9uZW50JCQxKTtcblxuICAgIHZhciBSZW5kZXJDb21wb25lbnQgPSBmdW5jdGlvbiBSZW5kZXJDb21wb25lbnQocHJvcHMpIHtcbiAgICAgIHJldHVybiBmYWN0b3J5KHByb3BzKTtcbiAgICB9O1xuXG4gICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICAgIFJlbmRlckNvbXBvbmVudC5kaXNwbGF5TmFtZSA9IHdyYXBEaXNwbGF5TmFtZShDb21wb25lbnQkJDEsICdyZW5kZXJDb21wb25lbnQnKTtcbiAgICB9XG5cbiAgICByZXR1cm4gUmVuZGVyQ29tcG9uZW50O1xuICB9O1xufTtcblxudmFyIE5vdGhpbmcgPVxuLyojX19QVVJFX18qL1xuZnVuY3Rpb24gKF9Db21wb25lbnQpIHtcbiAgX2luaGVyaXRzTG9vc2UoTm90aGluZywgX0NvbXBvbmVudCk7XG5cbiAgZnVuY3Rpb24gTm90aGluZygpIHtcbiAgICByZXR1cm4gX0NvbXBvbmVudC5hcHBseSh0aGlzLCBhcmd1bWVudHMpIHx8IHRoaXM7XG4gIH1cblxuICB2YXIgX3Byb3RvID0gTm90aGluZy5wcm90b3R5cGU7XG5cbiAgX3Byb3RvLnJlbmRlciA9IGZ1bmN0aW9uIHJlbmRlcigpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfTtcblxuICByZXR1cm4gTm90aGluZztcbn0oQ29tcG9uZW50KTtcblxudmFyIHJlbmRlck5vdGhpbmcgPSBmdW5jdGlvbiByZW5kZXJOb3RoaW5nKF8pIHtcbiAgcmV0dXJuIE5vdGhpbmc7XG59O1xuXG52YXIgc2hvdWxkVXBkYXRlID0gZnVuY3Rpb24gc2hvdWxkVXBkYXRlKHRlc3QpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIChCYXNlQ29tcG9uZW50KSB7XG4gICAgdmFyIGZhY3RvcnkgPSBjcmVhdGVGYWN0b3J5KEJhc2VDb21wb25lbnQpO1xuXG4gICAgdmFyIFNob3VsZFVwZGF0ZSA9XG4gICAgLyojX19QVVJFX18qL1xuICAgIGZ1bmN0aW9uIChfQ29tcG9uZW50KSB7XG4gICAgICBfaW5oZXJpdHNMb29zZShTaG91bGRVcGRhdGUsIF9Db21wb25lbnQpO1xuXG4gICAgICBmdW5jdGlvbiBTaG91bGRVcGRhdGUoKSB7XG4gICAgICAgIHJldHVybiBfQ29tcG9uZW50LmFwcGx5KHRoaXMsIGFyZ3VtZW50cykgfHwgdGhpcztcbiAgICAgIH1cblxuICAgICAgdmFyIF9wcm90byA9IFNob3VsZFVwZGF0ZS5wcm90b3R5cGU7XG5cbiAgICAgIF9wcm90by5zaG91bGRDb21wb25lbnRVcGRhdGUgPSBmdW5jdGlvbiBzaG91bGRDb21wb25lbnRVcGRhdGUobmV4dFByb3BzKSB7XG4gICAgICAgIHJldHVybiB0ZXN0KHRoaXMucHJvcHMsIG5leHRQcm9wcyk7XG4gICAgICB9O1xuXG4gICAgICBfcHJvdG8ucmVuZGVyID0gZnVuY3Rpb24gcmVuZGVyKCkge1xuICAgICAgICByZXR1cm4gZmFjdG9yeSh0aGlzLnByb3BzKTtcbiAgICAgIH07XG5cbiAgICAgIHJldHVybiBTaG91bGRVcGRhdGU7XG4gICAgfShDb21wb25lbnQpO1xuXG4gICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICAgIHJldHVybiBzZXREaXNwbGF5TmFtZSh3cmFwRGlzcGxheU5hbWUoQmFzZUNvbXBvbmVudCwgJ3Nob3VsZFVwZGF0ZScpKShTaG91bGRVcGRhdGUpO1xuICAgIH1cblxuICAgIHJldHVybiBTaG91bGRVcGRhdGU7XG4gIH07XG59O1xuXG52YXIgcHVyZSA9IGZ1bmN0aW9uIHB1cmUoQmFzZUNvbXBvbmVudCkge1xuICB2YXIgaG9jID0gc2hvdWxkVXBkYXRlKGZ1bmN0aW9uIChwcm9wcywgbmV4dFByb3BzKSB7XG4gICAgcmV0dXJuICFzaGFsbG93RXF1YWwocHJvcHMsIG5leHRQcm9wcyk7XG4gIH0pO1xuXG4gIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgcmV0dXJuIHNldERpc3BsYXlOYW1lKHdyYXBEaXNwbGF5TmFtZShCYXNlQ29tcG9uZW50LCAncHVyZScpKShob2MoQmFzZUNvbXBvbmVudCkpO1xuICB9XG5cbiAgcmV0dXJuIGhvYyhCYXNlQ29tcG9uZW50KTtcbn07XG5cbnZhciBvbmx5VXBkYXRlRm9yS2V5cyA9IGZ1bmN0aW9uIG9ubHlVcGRhdGVGb3JLZXlzKHByb3BLZXlzKSB7XG4gIHZhciBob2MgPSBzaG91bGRVcGRhdGUoZnVuY3Rpb24gKHByb3BzLCBuZXh0UHJvcHMpIHtcbiAgICByZXR1cm4gIXNoYWxsb3dFcXVhbChwaWNrKG5leHRQcm9wcywgcHJvcEtleXMpLCBwaWNrKHByb3BzLCBwcm9wS2V5cykpO1xuICB9KTtcblxuICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgIHJldHVybiBmdW5jdGlvbiAoQmFzZUNvbXBvbmVudCkge1xuICAgICAgcmV0dXJuIHNldERpc3BsYXlOYW1lKHdyYXBEaXNwbGF5TmFtZShCYXNlQ29tcG9uZW50LCAnb25seVVwZGF0ZUZvcktleXMnKSkoaG9jKEJhc2VDb21wb25lbnQpKTtcbiAgICB9O1xuICB9XG5cbiAgcmV0dXJuIGhvYztcbn07XG5cbnZhciBvbmx5VXBkYXRlRm9yUHJvcFR5cGVzID0gZnVuY3Rpb24gb25seVVwZGF0ZUZvclByb3BUeXBlcyhCYXNlQ29tcG9uZW50KSB7XG4gIHZhciBwcm9wVHlwZXMgPSBCYXNlQ29tcG9uZW50LnByb3BUeXBlcztcblxuICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgIGlmICghcHJvcFR5cGVzKSB7XG4gICAgICAvKiBlc2xpbnQtZGlzYWJsZSAqL1xuICAgICAgY29uc29sZS5lcnJvcignQSBjb21wb25lbnQgd2l0aG91dCBhbnkgYHByb3BUeXBlc2Agd2FzIHBhc3NlZCB0byAnICsgJ2Bvbmx5VXBkYXRlRm9yUHJvcFR5cGVzKClgLiBDaGVjayB0aGUgaW1wbGVtZW50YXRpb24gb2YgdGhlICcgKyAoXCJjb21wb25lbnQgd2l0aCBkaXNwbGF5IG5hbWUgXFxcIlwiICsgZ2V0RGlzcGxheU5hbWUoQmFzZUNvbXBvbmVudCkgKyBcIlxcXCIuXCIpKTtcbiAgICAgIC8qIGVzbGludC1lbmFibGUgKi9cbiAgICB9XG4gIH1cblxuICB2YXIgcHJvcEtleXMgPSBPYmplY3Qua2V5cyhwcm9wVHlwZXMgfHwge30pO1xuICB2YXIgT25seVVwZGF0ZUZvclByb3BUeXBlcyA9IG9ubHlVcGRhdGVGb3JLZXlzKHByb3BLZXlzKShCYXNlQ29tcG9uZW50KTtcblxuICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgIHJldHVybiBzZXREaXNwbGF5TmFtZSh3cmFwRGlzcGxheU5hbWUoQmFzZUNvbXBvbmVudCwgJ29ubHlVcGRhdGVGb3JQcm9wVHlwZXMnKSkoT25seVVwZGF0ZUZvclByb3BUeXBlcyk7XG4gIH1cblxuICByZXR1cm4gT25seVVwZGF0ZUZvclByb3BUeXBlcztcbn07XG5cbnZhciB3aXRoQ29udGV4dCA9IGZ1bmN0aW9uIHdpdGhDb250ZXh0KGNoaWxkQ29udGV4dFR5cGVzLCBnZXRDaGlsZENvbnRleHQpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIChCYXNlQ29tcG9uZW50KSB7XG4gICAgdmFyIGZhY3RvcnkgPSBjcmVhdGVGYWN0b3J5KEJhc2VDb21wb25lbnQpO1xuXG4gICAgdmFyIFdpdGhDb250ZXh0ID1cbiAgICAvKiNfX1BVUkVfXyovXG4gICAgZnVuY3Rpb24gKF9Db21wb25lbnQpIHtcbiAgICAgIF9pbmhlcml0c0xvb3NlKFdpdGhDb250ZXh0LCBfQ29tcG9uZW50KTtcblxuICAgICAgZnVuY3Rpb24gV2l0aENvbnRleHQoKSB7XG4gICAgICAgIHZhciBfdGhpcztcblxuICAgICAgICBmb3IgKHZhciBfbGVuID0gYXJndW1lbnRzLmxlbmd0aCwgYXJncyA9IG5ldyBBcnJheShfbGVuKSwgX2tleSA9IDA7IF9rZXkgPCBfbGVuOyBfa2V5KyspIHtcbiAgICAgICAgICBhcmdzW19rZXldID0gYXJndW1lbnRzW19rZXldO1xuICAgICAgICB9XG5cbiAgICAgICAgX3RoaXMgPSBfQ29tcG9uZW50LmNhbGwuYXBwbHkoX0NvbXBvbmVudCwgW3RoaXNdLmNvbmNhdChhcmdzKSkgfHwgdGhpcztcblxuICAgICAgICBfdGhpcy5nZXRDaGlsZENvbnRleHQgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgcmV0dXJuIGdldENoaWxkQ29udGV4dChfdGhpcy5wcm9wcyk7XG4gICAgICAgIH07XG5cbiAgICAgICAgcmV0dXJuIF90aGlzO1xuICAgICAgfVxuXG4gICAgICB2YXIgX3Byb3RvID0gV2l0aENvbnRleHQucHJvdG90eXBlO1xuXG4gICAgICBfcHJvdG8ucmVuZGVyID0gZnVuY3Rpb24gcmVuZGVyKCkge1xuICAgICAgICByZXR1cm4gZmFjdG9yeSh0aGlzLnByb3BzKTtcbiAgICAgIH07XG5cbiAgICAgIHJldHVybiBXaXRoQ29udGV4dDtcbiAgICB9KENvbXBvbmVudCk7XG5cbiAgICBXaXRoQ29udGV4dC5jaGlsZENvbnRleHRUeXBlcyA9IGNoaWxkQ29udGV4dFR5cGVzO1xuXG4gICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICAgIHJldHVybiBzZXREaXNwbGF5TmFtZSh3cmFwRGlzcGxheU5hbWUoQmFzZUNvbXBvbmVudCwgJ3dpdGhDb250ZXh0JykpKFdpdGhDb250ZXh0KTtcbiAgICB9XG5cbiAgICByZXR1cm4gV2l0aENvbnRleHQ7XG4gIH07XG59O1xuXG52YXIgZ2V0Q29udGV4dCA9IGZ1bmN0aW9uIGdldENvbnRleHQoY29udGV4dFR5cGVzKSB7XG4gIHJldHVybiBmdW5jdGlvbiAoQmFzZUNvbXBvbmVudCkge1xuICAgIHZhciBmYWN0b3J5ID0gY3JlYXRlRmFjdG9yeShCYXNlQ29tcG9uZW50KTtcblxuICAgIHZhciBHZXRDb250ZXh0ID0gZnVuY3Rpb24gR2V0Q29udGV4dChvd25lclByb3BzLCBjb250ZXh0KSB7XG4gICAgICByZXR1cm4gZmFjdG9yeShfZXh0ZW5kcyh7fSwgb3duZXJQcm9wcywgY29udGV4dCkpO1xuICAgIH07XG5cbiAgICBHZXRDb250ZXh0LmNvbnRleHRUeXBlcyA9IGNvbnRleHRUeXBlcztcblxuICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgICByZXR1cm4gc2V0RGlzcGxheU5hbWUod3JhcERpc3BsYXlOYW1lKEJhc2VDb21wb25lbnQsICdnZXRDb250ZXh0JykpKEdldENvbnRleHQpO1xuICAgIH1cblxuICAgIHJldHVybiBHZXRDb250ZXh0O1xuICB9O1xufTtcblxudmFyIGxpZmVjeWNsZSA9IGZ1bmN0aW9uIGxpZmVjeWNsZShzcGVjKSB7XG4gIHJldHVybiBmdW5jdGlvbiAoQmFzZUNvbXBvbmVudCkge1xuICAgIHZhciBmYWN0b3J5ID0gY3JlYXRlRmFjdG9yeShCYXNlQ29tcG9uZW50KTtcblxuICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nICYmIHNwZWMuaGFzT3duUHJvcGVydHkoJ3JlbmRlcicpKSB7XG4gICAgICBjb25zb2xlLmVycm9yKCdsaWZlY3ljbGUoKSBkb2VzIG5vdCBzdXBwb3J0IHRoZSByZW5kZXIgbWV0aG9kOyBpdHMgYmVoYXZpb3IgaXMgdG8gJyArICdwYXNzIGFsbCBwcm9wcyBhbmQgc3RhdGUgdG8gdGhlIGJhc2UgY29tcG9uZW50LicpO1xuICAgIH1cblxuICAgIHZhciBMaWZlY3ljbGUgPVxuICAgIC8qI19fUFVSRV9fKi9cbiAgICBmdW5jdGlvbiAoX0NvbXBvbmVudCkge1xuICAgICAgX2luaGVyaXRzTG9vc2UoTGlmZWN5Y2xlLCBfQ29tcG9uZW50KTtcblxuICAgICAgZnVuY3Rpb24gTGlmZWN5Y2xlKCkge1xuICAgICAgICByZXR1cm4gX0NvbXBvbmVudC5hcHBseSh0aGlzLCBhcmd1bWVudHMpIHx8IHRoaXM7XG4gICAgICB9XG5cbiAgICAgIHZhciBfcHJvdG8gPSBMaWZlY3ljbGUucHJvdG90eXBlO1xuXG4gICAgICBfcHJvdG8ucmVuZGVyID0gZnVuY3Rpb24gcmVuZGVyKCkge1xuICAgICAgICByZXR1cm4gZmFjdG9yeShfZXh0ZW5kcyh7fSwgdGhpcy5wcm9wcywgdGhpcy5zdGF0ZSkpO1xuICAgICAgfTtcblxuICAgICAgcmV0dXJuIExpZmVjeWNsZTtcbiAgICB9KENvbXBvbmVudCk7XG5cbiAgICBPYmplY3Qua2V5cyhzcGVjKS5mb3JFYWNoKGZ1bmN0aW9uIChob29rKSB7XG4gICAgICByZXR1cm4gTGlmZWN5Y2xlLnByb3RvdHlwZVtob29rXSA9IHNwZWNbaG9va107XG4gICAgfSk7XG5cbiAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgICAgcmV0dXJuIHNldERpc3BsYXlOYW1lKHdyYXBEaXNwbGF5TmFtZShCYXNlQ29tcG9uZW50LCAnbGlmZWN5Y2xlJykpKExpZmVjeWNsZSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIExpZmVjeWNsZTtcbiAgfTtcbn07XG5cbnZhciBpc0NsYXNzQ29tcG9uZW50ID0gZnVuY3Rpb24gaXNDbGFzc0NvbXBvbmVudChDb21wb25lbnQkJDEpIHtcbiAgcmV0dXJuIEJvb2xlYW4oQ29tcG9uZW50JCQxICYmIENvbXBvbmVudCQkMS5wcm90b3R5cGUgJiYgdHlwZW9mIENvbXBvbmVudCQkMS5wcm90b3R5cGUucmVuZGVyID09PSAnZnVuY3Rpb24nKTtcbn07XG5cbnZhciB0b0NsYXNzID0gZnVuY3Rpb24gdG9DbGFzcyhiYXNlQ29tcG9uZW50KSB7XG4gIHZhciBfY2xhc3MsIF90ZW1wO1xuXG4gIHJldHVybiBpc0NsYXNzQ29tcG9uZW50KGJhc2VDb21wb25lbnQpID8gYmFzZUNvbXBvbmVudCA6IChfdGVtcCA9IF9jbGFzcyA9XG4gIC8qI19fUFVSRV9fKi9cbiAgZnVuY3Rpb24gKF9Db21wb25lbnQpIHtcbiAgICBfaW5oZXJpdHNMb29zZShUb0NsYXNzLCBfQ29tcG9uZW50KTtcblxuICAgIGZ1bmN0aW9uIFRvQ2xhc3MoKSB7XG4gICAgICByZXR1cm4gX0NvbXBvbmVudC5hcHBseSh0aGlzLCBhcmd1bWVudHMpIHx8IHRoaXM7XG4gICAgfVxuXG4gICAgdmFyIF9wcm90byA9IFRvQ2xhc3MucHJvdG90eXBlO1xuXG4gICAgX3Byb3RvLnJlbmRlciA9IGZ1bmN0aW9uIHJlbmRlcigpIHtcbiAgICAgIGlmICh0eXBlb2YgYmFzZUNvbXBvbmVudCA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgcmV0dXJuIFJlYWN0LmNyZWF0ZUVsZW1lbnQoYmFzZUNvbXBvbmVudCwgdGhpcy5wcm9wcyk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBiYXNlQ29tcG9uZW50KHRoaXMucHJvcHMsIHRoaXMuY29udGV4dCk7XG4gICAgfTtcblxuICAgIHJldHVybiBUb0NsYXNzO1xuICB9KENvbXBvbmVudCksIF9jbGFzcy5kaXNwbGF5TmFtZSA9IGdldERpc3BsYXlOYW1lKGJhc2VDb21wb25lbnQpLCBfY2xhc3MucHJvcFR5cGVzID0gYmFzZUNvbXBvbmVudC5wcm9wVHlwZXMsIF9jbGFzcy5jb250ZXh0VHlwZXMgPSBiYXNlQ29tcG9uZW50LmNvbnRleHRUeXBlcywgX2NsYXNzLmRlZmF1bHRQcm9wcyA9IGJhc2VDb21wb25lbnQuZGVmYXVsdFByb3BzLCBfdGVtcCk7XG59O1xuXG5mdW5jdGlvbiB0b1JlbmRlclByb3BzKGhvYykge1xuICB2YXIgUmVuZGVyUHJvcHNDb21wb25lbnQgPSBmdW5jdGlvbiBSZW5kZXJQcm9wc0NvbXBvbmVudChwcm9wcykge1xuICAgIHJldHVybiBwcm9wcy5jaGlsZHJlbihwcm9wcyk7XG4gIH07XG5cbiAgcmV0dXJuIGhvYyhSZW5kZXJQcm9wc0NvbXBvbmVudCk7XG59XG5cbnZhciBmcm9tUmVuZGVyUHJvcHMgPSBmdW5jdGlvbiBmcm9tUmVuZGVyUHJvcHMoUmVuZGVyUHJvcHNDb21wb25lbnQsIHByb3BzTWFwcGVyLCByZW5kZXJQcm9wTmFtZSkge1xuICBpZiAocmVuZGVyUHJvcE5hbWUgPT09IHZvaWQgMCkge1xuICAgIHJlbmRlclByb3BOYW1lID0gJ2NoaWxkcmVuJztcbiAgfVxuXG4gIHJldHVybiBmdW5jdGlvbiAoQmFzZUNvbXBvbmVudCkge1xuICAgIHZhciBiYXNlRmFjdG9yeSA9IFJlYWN0LmNyZWF0ZUZhY3RvcnkoQmFzZUNvbXBvbmVudCk7XG4gICAgdmFyIHJlbmRlclByb3BzRmFjdG9yeSA9IFJlYWN0LmNyZWF0ZUZhY3RvcnkoUmVuZGVyUHJvcHNDb21wb25lbnQpO1xuXG4gICAgdmFyIEZyb21SZW5kZXJQcm9wcyA9IGZ1bmN0aW9uIEZyb21SZW5kZXJQcm9wcyhvd25lclByb3BzKSB7XG4gICAgICB2YXIgX3JlbmRlclByb3BzRmFjdG9yeTtcblxuICAgICAgcmV0dXJuIHJlbmRlclByb3BzRmFjdG9yeSgoX3JlbmRlclByb3BzRmFjdG9yeSA9IHt9LCBfcmVuZGVyUHJvcHNGYWN0b3J5W3JlbmRlclByb3BOYW1lXSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIGJhc2VGYWN0b3J5KF9leHRlbmRzKHt9LCBvd25lclByb3BzLCBwcm9wc01hcHBlci5hcHBseSh2b2lkIDAsIGFyZ3VtZW50cykpKTtcbiAgICAgIH0sIF9yZW5kZXJQcm9wc0ZhY3RvcnkpKTtcbiAgICB9O1xuXG4gICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICAgIHJldHVybiBzZXREaXNwbGF5TmFtZSh3cmFwRGlzcGxheU5hbWUoQmFzZUNvbXBvbmVudCwgJ2Zyb21SZW5kZXJQcm9wcycpKShGcm9tUmVuZGVyUHJvcHMpO1xuICAgIH1cblxuICAgIHJldHVybiBGcm9tUmVuZGVyUHJvcHM7XG4gIH07XG59O1xuXG52YXIgc2V0UHJvcFR5cGVzID0gZnVuY3Rpb24gc2V0UHJvcFR5cGVzKHByb3BUeXBlcykge1xuICByZXR1cm4gc2V0U3RhdGljKCdwcm9wVHlwZXMnLCBwcm9wVHlwZXMpO1xufTtcblxudmFyIGNvbXBvc2UgPSBmdW5jdGlvbiBjb21wb3NlKCkge1xuICBmb3IgKHZhciBfbGVuID0gYXJndW1lbnRzLmxlbmd0aCwgZnVuY3MgPSBuZXcgQXJyYXkoX2xlbiksIF9rZXkgPSAwOyBfa2V5IDwgX2xlbjsgX2tleSsrKSB7XG4gICAgZnVuY3NbX2tleV0gPSBhcmd1bWVudHNbX2tleV07XG4gIH1cblxuICByZXR1cm4gZnVuY3MucmVkdWNlKGZ1bmN0aW9uIChhLCBiKSB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICAgIHJldHVybiBhKGIuYXBwbHkodm9pZCAwLCBhcmd1bWVudHMpKTtcbiAgICB9O1xuICB9LCBmdW5jdGlvbiAoYXJnKSB7XG4gICAgcmV0dXJuIGFyZztcbiAgfSk7XG59O1xuXG52YXIgY3JlYXRlU2luayA9IGZ1bmN0aW9uIGNyZWF0ZVNpbmsoY2FsbGJhY2spIHtcbiAgdmFyIFNpbmsgPVxuICAvKiNfX1BVUkVfXyovXG4gIGZ1bmN0aW9uIChfQ29tcG9uZW50KSB7XG4gICAgX2luaGVyaXRzTG9vc2UoU2luaywgX0NvbXBvbmVudCk7XG5cbiAgICBmdW5jdGlvbiBTaW5rKCkge1xuICAgICAgdmFyIF90aGlzO1xuXG4gICAgICBmb3IgKHZhciBfbGVuID0gYXJndW1lbnRzLmxlbmd0aCwgYXJncyA9IG5ldyBBcnJheShfbGVuKSwgX2tleSA9IDA7IF9rZXkgPCBfbGVuOyBfa2V5KyspIHtcbiAgICAgICAgYXJnc1tfa2V5XSA9IGFyZ3VtZW50c1tfa2V5XTtcbiAgICAgIH1cblxuICAgICAgX3RoaXMgPSBfQ29tcG9uZW50LmNhbGwuYXBwbHkoX0NvbXBvbmVudCwgW3RoaXNdLmNvbmNhdChhcmdzKSkgfHwgdGhpcztcbiAgICAgIF90aGlzLnN0YXRlID0ge307XG4gICAgICByZXR1cm4gX3RoaXM7XG4gICAgfVxuXG4gICAgU2luay5nZXREZXJpdmVkU3RhdGVGcm9tUHJvcHMgPSBmdW5jdGlvbiBnZXREZXJpdmVkU3RhdGVGcm9tUHJvcHMobmV4dFByb3BzKSB7XG4gICAgICBjYWxsYmFjayhuZXh0UHJvcHMpO1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfTtcblxuICAgIHZhciBfcHJvdG8gPSBTaW5rLnByb3RvdHlwZTtcblxuICAgIF9wcm90by5yZW5kZXIgPSBmdW5jdGlvbiByZW5kZXIoKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9O1xuXG4gICAgcmV0dXJuIFNpbms7XG4gIH0oQ29tcG9uZW50KTtcblxuICBwb2x5ZmlsbChTaW5rKTtcbiAgcmV0dXJuIFNpbms7XG59O1xuXG52YXIgY29tcG9uZW50RnJvbVByb3AgPSBmdW5jdGlvbiBjb21wb25lbnRGcm9tUHJvcChwcm9wTmFtZSkge1xuICB2YXIgQ29tcG9uZW50JCQxID0gZnVuY3Rpb24gQ29tcG9uZW50JCQxKHByb3BzKSB7XG4gICAgcmV0dXJuIGNyZWF0ZUVsZW1lbnQocHJvcHNbcHJvcE5hbWVdLCBvbWl0KHByb3BzLCBbcHJvcE5hbWVdKSk7XG4gIH07XG5cbiAgQ29tcG9uZW50JCQxLmRpc3BsYXlOYW1lID0gXCJjb21wb25lbnRGcm9tUHJvcChcIiArIHByb3BOYW1lICsgXCIpXCI7XG4gIHJldHVybiBDb21wb25lbnQkJDE7XG59O1xuXG52YXIgbmVzdCA9IGZ1bmN0aW9uIG5lc3QoKSB7XG4gIGZvciAodmFyIF9sZW4gPSBhcmd1bWVudHMubGVuZ3RoLCBDb21wb25lbnRzID0gbmV3IEFycmF5KF9sZW4pLCBfa2V5ID0gMDsgX2tleSA8IF9sZW47IF9rZXkrKykge1xuICAgIENvbXBvbmVudHNbX2tleV0gPSBhcmd1bWVudHNbX2tleV07XG4gIH1cblxuICB2YXIgZmFjdG9yaWVzID0gQ29tcG9uZW50cy5tYXAoY3JlYXRlRmFjdG9yeSk7XG5cbiAgdmFyIE5lc3QgPSBmdW5jdGlvbiBOZXN0KF9yZWYpIHtcbiAgICB2YXIgY2hpbGRyZW4gPSBfcmVmLmNoaWxkcmVuLFxuICAgICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKF9yZWYsIFtcImNoaWxkcmVuXCJdKTtcblxuICAgIHJldHVybiBmYWN0b3JpZXMucmVkdWNlUmlnaHQoZnVuY3Rpb24gKGNoaWxkLCBmYWN0b3J5KSB7XG4gICAgICByZXR1cm4gZmFjdG9yeShwcm9wcywgY2hpbGQpO1xuICAgIH0sIGNoaWxkcmVuKTtcbiAgfTtcblxuICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgIHZhciBkaXNwbGF5TmFtZXMgPSBDb21wb25lbnRzLm1hcChnZXREaXNwbGF5TmFtZSk7XG4gICAgTmVzdC5kaXNwbGF5TmFtZSA9IFwibmVzdChcIiArIGRpc3BsYXlOYW1lcy5qb2luKCcsICcpICsgXCIpXCI7XG4gIH1cblxuICByZXR1cm4gTmVzdDtcbn07XG5cbnZhciBob2lzdFN0YXRpY3MgPSBmdW5jdGlvbiBob2lzdFN0YXRpY3MoaGlnaGVyT3JkZXJDb21wb25lbnQsIGJsYWNrbGlzdCkge1xuICByZXR1cm4gZnVuY3Rpb24gKEJhc2VDb21wb25lbnQpIHtcbiAgICB2YXIgTmV3Q29tcG9uZW50ID0gaGlnaGVyT3JkZXJDb21wb25lbnQoQmFzZUNvbXBvbmVudCk7XG4gICAgaG9pc3ROb25SZWFjdFN0YXRpY3MoTmV3Q29tcG9uZW50LCBCYXNlQ29tcG9uZW50LCBibGFja2xpc3QpO1xuICAgIHJldHVybiBOZXdDb21wb25lbnQ7XG4gIH07XG59O1xuXG52YXIgX2NvbmZpZyA9IHtcbiAgZnJvbUVTT2JzZXJ2YWJsZTogbnVsbCxcbiAgdG9FU09ic2VydmFibGU6IG51bGxcbn07XG5cbnZhciBjb25maWd1cmVPYnNlcnZhYmxlID0gZnVuY3Rpb24gY29uZmlndXJlT2JzZXJ2YWJsZShjKSB7XG4gIF9jb25maWcgPSBjO1xufTtcblxudmFyIGNvbmZpZyA9IHtcbiAgZnJvbUVTT2JzZXJ2YWJsZTogZnVuY3Rpb24gZnJvbUVTT2JzZXJ2YWJsZShvYnNlcnZhYmxlKSB7XG4gICAgcmV0dXJuIHR5cGVvZiBfY29uZmlnLmZyb21FU09ic2VydmFibGUgPT09ICdmdW5jdGlvbicgPyBfY29uZmlnLmZyb21FU09ic2VydmFibGUob2JzZXJ2YWJsZSkgOiBvYnNlcnZhYmxlO1xuICB9LFxuICB0b0VTT2JzZXJ2YWJsZTogZnVuY3Rpb24gdG9FU09ic2VydmFibGUoc3RyZWFtKSB7XG4gICAgcmV0dXJuIHR5cGVvZiBfY29uZmlnLnRvRVNPYnNlcnZhYmxlID09PSAnZnVuY3Rpb24nID8gX2NvbmZpZy50b0VTT2JzZXJ2YWJsZShzdHJlYW0pIDogc3RyZWFtO1xuICB9XG59O1xuXG52YXIgY29tcG9uZW50RnJvbVN0cmVhbVdpdGhDb25maWcgPSBmdW5jdGlvbiBjb21wb25lbnRGcm9tU3RyZWFtV2l0aENvbmZpZyhjb25maWckJDEpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIChwcm9wc1RvVmRvbSkge1xuICAgIHJldHVybiAoXG4gICAgICAvKiNfX1BVUkVfXyovXG4gICAgICBmdW5jdGlvbiAoX0NvbXBvbmVudCkge1xuICAgICAgICBfaW5oZXJpdHNMb29zZShDb21wb25lbnRGcm9tU3RyZWFtLCBfQ29tcG9uZW50KTtcblxuICAgICAgICBmdW5jdGlvbiBDb21wb25lbnRGcm9tU3RyZWFtKCkge1xuICAgICAgICAgIHZhciBfY29uZmlnJGZyb21FU09ic2VydmE7XG5cbiAgICAgICAgICB2YXIgX3RoaXM7XG5cbiAgICAgICAgICBmb3IgKHZhciBfbGVuID0gYXJndW1lbnRzLmxlbmd0aCwgYXJncyA9IG5ldyBBcnJheShfbGVuKSwgX2tleSA9IDA7IF9rZXkgPCBfbGVuOyBfa2V5KyspIHtcbiAgICAgICAgICAgIGFyZ3NbX2tleV0gPSBhcmd1bWVudHNbX2tleV07XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgX3RoaXMgPSBfQ29tcG9uZW50LmNhbGwuYXBwbHkoX0NvbXBvbmVudCwgW3RoaXNdLmNvbmNhdChhcmdzKSkgfHwgdGhpcztcbiAgICAgICAgICBfdGhpcy5zdGF0ZSA9IHtcbiAgICAgICAgICAgIHZkb206IG51bGxcbiAgICAgICAgICB9O1xuICAgICAgICAgIF90aGlzLnByb3BzRW1pdHRlciA9IGNyZWF0ZUNoYW5nZUVtaXR0ZXIoKTtcbiAgICAgICAgICBfdGhpcy5wcm9wcyQgPSBjb25maWckJDEuZnJvbUVTT2JzZXJ2YWJsZSgoX2NvbmZpZyRmcm9tRVNPYnNlcnZhID0ge1xuICAgICAgICAgICAgc3Vic2NyaWJlOiBmdW5jdGlvbiBzdWJzY3JpYmUob2JzZXJ2ZXIpIHtcbiAgICAgICAgICAgICAgdmFyIHVuc3Vic2NyaWJlID0gX3RoaXMucHJvcHNFbWl0dGVyLmxpc3RlbihmdW5jdGlvbiAocHJvcHMpIHtcbiAgICAgICAgICAgICAgICBpZiAocHJvcHMpIHtcbiAgICAgICAgICAgICAgICAgIG9ic2VydmVyLm5leHQocHJvcHMpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICBvYnNlcnZlci5jb21wbGV0ZSgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICB1bnN1YnNjcmliZTogdW5zdWJzY3JpYmVcbiAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9LCBfY29uZmlnJGZyb21FU09ic2VydmFbJCRvYnNlcnZhYmxlXSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzO1xuICAgICAgICAgIH0sIF9jb25maWckZnJvbUVTT2JzZXJ2YSkpO1xuICAgICAgICAgIF90aGlzLnZkb20kID0gY29uZmlnJCQxLnRvRVNPYnNlcnZhYmxlKHByb3BzVG9WZG9tKF90aGlzLnByb3BzJCkpO1xuICAgICAgICAgIHJldHVybiBfdGhpcztcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBfcHJvdG8gPSBDb21wb25lbnRGcm9tU3RyZWFtLnByb3RvdHlwZTtcblxuICAgICAgICBfcHJvdG8uY29tcG9uZW50V2lsbE1vdW50ID0gZnVuY3Rpb24gY29tcG9uZW50V2lsbE1vdW50KCkge1xuICAgICAgICAgIHZhciBfdGhpczIgPSB0aGlzO1xuXG4gICAgICAgICAgLy8gU3Vic2NyaWJlIHRvIGNoaWxkIHByb3AgY2hhbmdlcyBzbyB3ZSBrbm93IHdoZW4gdG8gcmUtcmVuZGVyXG4gICAgICAgICAgdGhpcy5zdWJzY3JpcHRpb24gPSB0aGlzLnZkb20kLnN1YnNjcmliZSh7XG4gICAgICAgICAgICBuZXh0OiBmdW5jdGlvbiBuZXh0KHZkb20pIHtcbiAgICAgICAgICAgICAgX3RoaXMyLnNldFN0YXRlKHtcbiAgICAgICAgICAgICAgICB2ZG9tOiB2ZG9tXG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pO1xuICAgICAgICAgIHRoaXMucHJvcHNFbWl0dGVyLmVtaXQodGhpcy5wcm9wcyk7XG4gICAgICAgIH07XG5cbiAgICAgICAgX3Byb3RvLmNvbXBvbmVudFdpbGxSZWNlaXZlUHJvcHMgPSBmdW5jdGlvbiBjb21wb25lbnRXaWxsUmVjZWl2ZVByb3BzKG5leHRQcm9wcykge1xuICAgICAgICAgIC8vIFJlY2VpdmUgbmV3IHByb3BzIGZyb20gdGhlIG93bmVyXG4gICAgICAgICAgdGhpcy5wcm9wc0VtaXR0ZXIuZW1pdChuZXh0UHJvcHMpO1xuICAgICAgICB9O1xuXG4gICAgICAgIF9wcm90by5zaG91bGRDb21wb25lbnRVcGRhdGUgPSBmdW5jdGlvbiBzaG91bGRDb21wb25lbnRVcGRhdGUobmV4dFByb3BzLCBuZXh0U3RhdGUpIHtcbiAgICAgICAgICByZXR1cm4gbmV4dFN0YXRlLnZkb20gIT09IHRoaXMuc3RhdGUudmRvbTtcbiAgICAgICAgfTtcblxuICAgICAgICBfcHJvdG8uY29tcG9uZW50V2lsbFVubW91bnQgPSBmdW5jdGlvbiBjb21wb25lbnRXaWxsVW5tb3VudCgpIHtcbiAgICAgICAgICAvLyBDYWxsIHdpdGhvdXQgYXJndW1lbnRzIHRvIGNvbXBsZXRlIHN0cmVhbVxuICAgICAgICAgIHRoaXMucHJvcHNFbWl0dGVyLmVtaXQoKTsgLy8gQ2xlYW4tdXAgc3Vic2NyaXB0aW9uIGJlZm9yZSB1bi1tb3VudGluZ1xuXG4gICAgICAgICAgdGhpcy5zdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcbiAgICAgICAgfTtcblxuICAgICAgICBfcHJvdG8ucmVuZGVyID0gZnVuY3Rpb24gcmVuZGVyKCkge1xuICAgICAgICAgIHJldHVybiB0aGlzLnN0YXRlLnZkb207XG4gICAgICAgIH07XG5cbiAgICAgICAgcmV0dXJuIENvbXBvbmVudEZyb21TdHJlYW07XG4gICAgICB9KENvbXBvbmVudClcbiAgICApO1xuICB9O1xufTtcblxudmFyIGNvbXBvbmVudEZyb21TdHJlYW0gPSBmdW5jdGlvbiBjb21wb25lbnRGcm9tU3RyZWFtKHByb3BzVG9WZG9tKSB7XG4gIHJldHVybiBjb21wb25lbnRGcm9tU3RyZWFtV2l0aENvbmZpZyhjb25maWcpKHByb3BzVG9WZG9tKTtcbn07XG5cbnZhciBpZGVudGl0eSQxID0gZnVuY3Rpb24gaWRlbnRpdHkodCkge1xuICByZXR1cm4gdDtcbn07XG5cbnZhciBtYXBQcm9wc1N0cmVhbVdpdGhDb25maWcgPSBmdW5jdGlvbiBtYXBQcm9wc1N0cmVhbVdpdGhDb25maWcoY29uZmlnJCQxKSB7XG4gIHZhciBjb21wb25lbnRGcm9tU3RyZWFtJCQxID0gY29tcG9uZW50RnJvbVN0cmVhbVdpdGhDb25maWcoe1xuICAgIGZyb21FU09ic2VydmFibGU6IGlkZW50aXR5JDEsXG4gICAgdG9FU09ic2VydmFibGU6IGlkZW50aXR5JDFcbiAgfSk7XG4gIHJldHVybiBmdW5jdGlvbiAodHJhbnNmb3JtKSB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uIChCYXNlQ29tcG9uZW50KSB7XG4gICAgICB2YXIgZmFjdG9yeSA9IGNyZWF0ZUZhY3RvcnkoQmFzZUNvbXBvbmVudCk7XG4gICAgICB2YXIgZnJvbUVTT2JzZXJ2YWJsZSA9IGNvbmZpZyQkMS5mcm9tRVNPYnNlcnZhYmxlLFxuICAgICAgICAgIHRvRVNPYnNlcnZhYmxlID0gY29uZmlnJCQxLnRvRVNPYnNlcnZhYmxlO1xuICAgICAgcmV0dXJuIGNvbXBvbmVudEZyb21TdHJlYW0kJDEoZnVuY3Rpb24gKHByb3BzJCkge1xuICAgICAgICB2YXIgX3JlZjtcblxuICAgICAgICByZXR1cm4gX3JlZiA9IHtcbiAgICAgICAgICBzdWJzY3JpYmU6IGZ1bmN0aW9uIHN1YnNjcmliZShvYnNlcnZlcikge1xuICAgICAgICAgICAgdmFyIHN1YnNjcmlwdGlvbiA9IHRvRVNPYnNlcnZhYmxlKHRyYW5zZm9ybShmcm9tRVNPYnNlcnZhYmxlKHByb3BzJCkpKS5zdWJzY3JpYmUoe1xuICAgICAgICAgICAgICBuZXh0OiBmdW5jdGlvbiBuZXh0KGNoaWxkUHJvcHMpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gb2JzZXJ2ZXIubmV4dChmYWN0b3J5KGNoaWxkUHJvcHMpKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICB1bnN1YnNjcmliZTogZnVuY3Rpb24gdW5zdWJzY3JpYmUoKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9O1xuICAgICAgICAgIH1cbiAgICAgICAgfSwgX3JlZlskJG9ic2VydmFibGVdID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgIHJldHVybiB0aGlzO1xuICAgICAgICB9LCBfcmVmO1xuICAgICAgfSk7XG4gICAgfTtcbiAgfTtcbn07XG5cbnZhciBtYXBQcm9wc1N0cmVhbSA9IGZ1bmN0aW9uIG1hcFByb3BzU3RyZWFtKHRyYW5zZm9ybSkge1xuICB2YXIgaG9jID0gbWFwUHJvcHNTdHJlYW1XaXRoQ29uZmlnKGNvbmZpZykodHJhbnNmb3JtKTtcblxuICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgIHJldHVybiBmdW5jdGlvbiAoQmFzZUNvbXBvbmVudCkge1xuICAgICAgcmV0dXJuIHNldERpc3BsYXlOYW1lKHdyYXBEaXNwbGF5TmFtZShCYXNlQ29tcG9uZW50LCAnbWFwUHJvcHNTdHJlYW0nKSkoaG9jKEJhc2VDb21wb25lbnQpKTtcbiAgICB9O1xuICB9XG5cbiAgcmV0dXJuIGhvYztcbn07XG5cbnZhciBjcmVhdGVFdmVudEhhbmRsZXJXaXRoQ29uZmlnID0gZnVuY3Rpb24gY3JlYXRlRXZlbnRIYW5kbGVyV2l0aENvbmZpZyhjb25maWckJDEpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgX2NvbmZpZyRmcm9tRVNPYnNlcnZhO1xuXG4gICAgdmFyIGVtaXR0ZXIgPSBjcmVhdGVDaGFuZ2VFbWl0dGVyKCk7XG4gICAgdmFyIHN0cmVhbSA9IGNvbmZpZyQkMS5mcm9tRVNPYnNlcnZhYmxlKChfY29uZmlnJGZyb21FU09ic2VydmEgPSB7XG4gICAgICBzdWJzY3JpYmU6IGZ1bmN0aW9uIHN1YnNjcmliZShvYnNlcnZlcikge1xuICAgICAgICB2YXIgdW5zdWJzY3JpYmUgPSBlbWl0dGVyLmxpc3RlbihmdW5jdGlvbiAodmFsdWUpIHtcbiAgICAgICAgICByZXR1cm4gb2JzZXJ2ZXIubmV4dCh2YWx1ZSk7XG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIHVuc3Vic2NyaWJlOiB1bnN1YnNjcmliZVxuICAgICAgICB9O1xuICAgICAgfVxuICAgIH0sIF9jb25maWckZnJvbUVTT2JzZXJ2YVskJG9ic2VydmFibGVdID0gZnVuY3Rpb24gKCkge1xuICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfSwgX2NvbmZpZyRmcm9tRVNPYnNlcnZhKSk7XG4gICAgcmV0dXJuIHtcbiAgICAgIGhhbmRsZXI6IGVtaXR0ZXIuZW1pdCxcbiAgICAgIHN0cmVhbTogc3RyZWFtXG4gICAgfTtcbiAgfTtcbn07XG52YXIgY3JlYXRlRXZlbnRIYW5kbGVyID0gY3JlYXRlRXZlbnRIYW5kbGVyV2l0aENvbmZpZyhjb25maWcpO1xuXG4vLyBIaWdoZXItb3JkZXIgY29tcG9uZW50IGhlbHBlcnNcblxuZXhwb3J0IHsgbWFwUHJvcHMsIHdpdGhQcm9wcywgd2l0aFByb3BzT25DaGFuZ2UsIHdpdGhIYW5kbGVycywgZGVmYXVsdFByb3BzLCByZW5hbWVQcm9wLCByZW5hbWVQcm9wcywgZmxhdHRlblByb3AsIHdpdGhTdGF0ZSwgd2l0aFN0YXRlSGFuZGxlcnMsIHdpdGhSZWR1Y2VyLCBicmFuY2gsIHJlbmRlckNvbXBvbmVudCwgcmVuZGVyTm90aGluZywgc2hvdWxkVXBkYXRlLCBwdXJlLCBvbmx5VXBkYXRlRm9yS2V5cywgb25seVVwZGF0ZUZvclByb3BUeXBlcywgd2l0aENvbnRleHQsIGdldENvbnRleHQsIGxpZmVjeWNsZSwgdG9DbGFzcywgdG9SZW5kZXJQcm9wcywgZnJvbVJlbmRlclByb3BzLCBzZXRTdGF0aWMsIHNldFByb3BUeXBlcywgc2V0RGlzcGxheU5hbWUsIGNvbXBvc2UsIGdldERpc3BsYXlOYW1lLCB3cmFwRGlzcGxheU5hbWUsIHNoYWxsb3dFcXVhbCwgaXNDbGFzc0NvbXBvbmVudCwgY3JlYXRlU2luaywgY29tcG9uZW50RnJvbVByb3AsIG5lc3QsIGhvaXN0U3RhdGljcywgY29tcG9uZW50RnJvbVN0cmVhbSwgY29tcG9uZW50RnJvbVN0cmVhbVdpdGhDb25maWcsIG1hcFByb3BzU3RyZWFtLCBtYXBQcm9wc1N0cmVhbVdpdGhDb25maWcsIGNyZWF0ZUV2ZW50SGFuZGxlciwgY3JlYXRlRXZlbnRIYW5kbGVyV2l0aENvbmZpZywgY29uZmlndXJlT2JzZXJ2YWJsZSBhcyBzZXRPYnNlcnZhYmxlQ29uZmlnIH07XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///10540\n")},11025:function(__unused_webpack_module,__unused_webpack_exports,__webpack_require__){eval("//! moment.js locale configuration\n//! locale : Tamil [ta]\n//! author : Arjunkumar Krishnamoorthy : https://github.com/tk120404\n\n;(function (global, factory) {\n true ? factory(__webpack_require__(95093)) :\n 0\n}(this, (function (moment) { 'use strict';\n\n //! moment.js locale configuration\n\n var symbolMap = {\n 1: '௧',\n 2: '௨',\n 3: '௩',\n 4: '௪',\n 5: '௫',\n 6: '௬',\n 7: '௭',\n 8: '௮',\n 9: '௯',\n 0: '௦',\n },\n numberMap = {\n '௧': '1',\n '௨': '2',\n '௩': '3',\n '௪': '4',\n '௫': '5',\n '௬': '6',\n '௭': '7',\n '௮': '8',\n '௯': '9',\n '௦': '0',\n };\n\n var ta = moment.defineLocale('ta', {\n months: 'ஜனவரி_பிப்ரவரி_மார்ச்_ஏப்ரல்_மே_ஜூன்_ஜூலை_ஆகஸ்ட்_செப்டெம்பர்_அக்டோபர்_நவம்பர்_டிசம்பர்'.split(\n '_'\n ),\n monthsShort:\n 'ஜனவரி_பிப்ரவரி_மார்ச்_ஏப்ரல்_மே_ஜூன்_ஜூலை_ஆகஸ்ட்_செப்டெம்பர்_அக்டோபர்_நவம்பர்_டிசம்பர்'.split(\n '_'\n ),\n weekdays:\n 'ஞாயிற்றுக்கிழமை_திங்கட்கிழமை_செவ்வாய்கிழமை_புதன்கிழமை_வியாழக்கிழமை_வெள்ளிக்கிழமை_சனிக்கிழமை'.split(\n '_'\n ),\n weekdaysShort: 'ஞாயிறு_திங்கள்_செவ்வாய்_புதன்_வியாழன்_வெள்ளி_சனி'.split(\n '_'\n ),\n weekdaysMin: 'ஞா_தி_செ_பு_வி_வெ_ச'.split('_'),\n longDateFormat: {\n LT: 'HH:mm',\n LTS: 'HH:mm:ss',\n L: 'DD/MM/YYYY',\n LL: 'D MMMM YYYY',\n LLL: 'D MMMM YYYY, HH:mm',\n LLLL: 'dddd, D MMMM YYYY, HH:mm',\n },\n calendar: {\n sameDay: '[இன்று] LT',\n nextDay: '[நாளை] LT',\n nextWeek: 'dddd, LT',\n lastDay: '[நேற்று] LT',\n lastWeek: '[கடந்த வாரம்] dddd, LT',\n sameElse: 'L',\n },\n relativeTime: {\n future: '%s இல்',\n past: '%s முன்',\n s: 'ஒரு சில விநாடிகள்',\n ss: '%d விநாடிகள்',\n m: 'ஒரு நிமிடம்',\n mm: '%d நிமிடங்கள்',\n h: 'ஒரு மணி நேரம்',\n hh: '%d மணி நேரம்',\n d: 'ஒரு நாள்',\n dd: '%d நாட்கள்',\n M: 'ஒரு மாதம்',\n MM: '%d மாதங்கள்',\n y: 'ஒரு வருடம்',\n yy: '%d ஆண்டுகள்',\n },\n dayOfMonthOrdinalParse: /\\d{1,2}வது/,\n ordinal: function (number) {\n return number + 'வது';\n },\n preparse: function (string) {\n return string.replace(/[௧௨௩௪௫௬௭௮௯௦]/g, function (match) {\n return numberMap[match];\n });\n },\n postformat: function (string) {\n return string.replace(/\\d/g, function (match) {\n return symbolMap[match];\n });\n },\n // refer http://ta.wikipedia.org/s/1er1\n meridiemParse: /யாமம்|வைகறை|காலை|நண்பகல்|எற்பாடு|மாலை/,\n meridiem: function (hour, minute, isLower) {\n if (hour < 2) {\n return ' யாமம்';\n } else if (hour < 6) {\n return ' வைகறை'; // வைகறை\n } else if (hour < 10) {\n return ' காலை'; // காலை\n } else if (hour < 14) {\n return ' நண்பகல்'; // நண்பகல்\n } else if (hour < 18) {\n return ' எற்பாடு'; // எற்பாடு\n } else if (hour < 22) {\n return ' மாலை'; // மாலை\n } else {\n return ' யாமம்';\n }\n },\n meridiemHour: function (hour, meridiem) {\n if (hour === 12) {\n hour = 0;\n }\n if (meridiem === 'யாமம்') {\n return hour < 2 ? hour : hour + 12;\n } else if (meridiem === 'வைகறை' || meridiem === 'காலை') {\n return hour;\n } else if (meridiem === 'நண்பகல்') {\n return hour >= 10 ? hour : hour + 12;\n } else {\n return hour + 12;\n }\n },\n week: {\n dow: 0, // Sunday is the first day of the week.\n doy: 6, // The week that contains Jan 6th is the first week of the year.\n },\n });\n\n return ta;\n\n})));\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMTEwMjUuanMiLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL2l0Zy1uZXh0Z2VuLWZyb250ZW5kLy4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvdGEuanM/M2RlNSJdLCJzb3VyY2VzQ29udGVudCI6WyIvLyEgbW9tZW50LmpzIGxvY2FsZSBjb25maWd1cmF0aW9uXG4vLyEgbG9jYWxlIDogVGFtaWwgW3RhXVxuLy8hIGF1dGhvciA6IEFyanVua3VtYXIgS3Jpc2huYW1vb3J0aHkgOiBodHRwczovL2dpdGh1Yi5jb20vdGsxMjA0MDRcblxuOyhmdW5jdGlvbiAoZ2xvYmFsLCBmYWN0b3J5KSB7XG4gICB0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcgJiYgdHlwZW9mIG1vZHVsZSAhPT0gJ3VuZGVmaW5lZCdcbiAgICAgICAmJiB0eXBlb2YgcmVxdWlyZSA9PT0gJ2Z1bmN0aW9uJyA/IGZhY3RvcnkocmVxdWlyZSgnLi4vbW9tZW50JykpIDpcbiAgIHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgZGVmaW5lLmFtZCA/IGRlZmluZShbJy4uL21vbWVudCddLCBmYWN0b3J5KSA6XG4gICBmYWN0b3J5KGdsb2JhbC5tb21lbnQpXG59KHRoaXMsIChmdW5jdGlvbiAobW9tZW50KSB7ICd1c2Ugc3RyaWN0JztcblxuICAgIC8vISBtb21lbnQuanMgbG9jYWxlIGNvbmZpZ3VyYXRpb25cblxuICAgIHZhciBzeW1ib2xNYXAgPSB7XG4gICAgICAgICAgICAxOiAn4K+nJyxcbiAgICAgICAgICAgIDI6ICfgr6gnLFxuICAgICAgICAgICAgMzogJ+CvqScsXG4gICAgICAgICAgICA0OiAn4K+qJyxcbiAgICAgICAgICAgIDU6ICfgr6snLFxuICAgICAgICAgICAgNjogJ+CvrCcsXG4gICAgICAgICAgICA3OiAn4K+tJyxcbiAgICAgICAgICAgIDg6ICfgr64nLFxuICAgICAgICAgICAgOTogJ+CvrycsXG4gICAgICAgICAgICAwOiAn4K+mJyxcbiAgICAgICAgfSxcbiAgICAgICAgbnVtYmVyTWFwID0ge1xuICAgICAgICAgICAgJ+Cvpyc6ICcxJyxcbiAgICAgICAgICAgICfgr6gnOiAnMicsXG4gICAgICAgICAgICAn4K+pJzogJzMnLFxuICAgICAgICAgICAgJ+Cvqic6ICc0JyxcbiAgICAgICAgICAgICfgr6snOiAnNScsXG4gICAgICAgICAgICAn4K+sJzogJzYnLFxuICAgICAgICAgICAgJ+CvrSc6ICc3JyxcbiAgICAgICAgICAgICfgr64nOiAnOCcsXG4gICAgICAgICAgICAn4K+vJzogJzknLFxuICAgICAgICAgICAgJ+Cvpic6ICcwJyxcbiAgICAgICAgfTtcblxuICAgIHZhciB0YSA9IG1vbWVudC5kZWZpbmVMb2NhbGUoJ3RhJywge1xuICAgICAgICBtb250aHM6ICfgrpzgrqngrrXgrrDgrr9f4K6q4K6/4K6q4K+N4K6w4K614K6w4K6/X+CuruCuvuCusOCvjeCumuCvjV/gro/grqrgr43grrDgrrLgr41f4K6u4K+HX+CunOCvguCuqeCvjV/grpzgr4LgrrLgr4hf4K6G4K6V4K644K+N4K6f4K+NX+CumuCvhuCuquCvjeCun+CvhuCuruCvjeCuquCusOCvjV/groXgrpXgr43grp/gr4fgrr7grqrgrrDgr41f4K6o4K614K6u4K+N4K6q4K6w4K+NX+Cun+Cuv+CumuCuruCvjeCuquCusOCvjScuc3BsaXQoXG4gICAgICAgICAgICAnXydcbiAgICAgICAgKSxcbiAgICAgICAgbW9udGhzU2hvcnQ6XG4gICAgICAgICAgICAn4K6c4K6p4K614K6w4K6/X+CuquCuv+CuquCvjeCusOCuteCusOCuv1/grq7grr7grrDgr43grprgr41f4K6P4K6q4K+N4K6w4K6y4K+NX+CuruCvh1/grpzgr4Lgrqngr41f4K6c4K+C4K6y4K+IX+CuhuCuleCuuOCvjeCun+CvjV/grprgr4bgrqrgr43grp/gr4bgrq7gr43grqrgrrDgr41f4K6F4K6V4K+N4K6f4K+H4K6+4K6q4K6w4K+NX+CuqOCuteCuruCvjeCuquCusOCvjV/grp/grr/grprgrq7gr43grqrgrrDgr40nLnNwbGl0KFxuICAgICAgICAgICAgICAgICdfJ1xuICAgICAgICAgICAgKSxcbiAgICAgICAgd2Vla2RheXM6XG4gICAgICAgICAgICAn4K6e4K6+4K6v4K6/4K6x4K+N4K6x4K+B4K6V4K+N4K6V4K6/4K604K6u4K+IX+CupOCuv+CumeCvjeCuleCun+CvjeCuleCuv+CutOCuruCviF/grprgr4bgrrXgr43grrXgrr7grq/gr43grpXgrr/grrTgrq7gr4hf4K6q4K+B4K6k4K6p4K+N4K6V4K6/4K604K6u4K+IX+CuteCuv+Cur+CuvuCutOCuleCvjeCuleCuv+CutOCuruCviF/grrXgr4bgrrPgr43grrPgrr/grpXgr43grpXgrr/grrTgrq7gr4hf4K6a4K6p4K6/4K6V4K+N4K6V4K6/4K604K6u4K+IJy5zcGxpdChcbiAgICAgICAgICAgICAgICAnXydcbiAgICAgICAgICAgICksXG4gICAgICAgIHdlZWtkYXlzU2hvcnQ6ICfgrp7grr7grq/grr/grrHgr4Ff4K6k4K6/4K6Z4K+N4K6V4K6z4K+NX+CumuCvhuCuteCvjeCuteCuvuCur+CvjV/grqrgr4HgrqTgrqngr41f4K614K6/4K6v4K6+4K604K6p4K+NX+CuteCvhuCus+CvjeCus+Cuv1/grprgrqngrr8nLnNwbGl0KFxuICAgICAgICAgICAgJ18nXG4gICAgICAgICksXG4gICAgICAgIHdlZWtkYXlzTWluOiAn4K6e4K6+X+CupOCuv1/grprgr4Zf4K6q4K+BX+CuteCuv1/grrXgr4Zf4K6aJy5zcGxpdCgnXycpLFxuICAgICAgICBsb25nRGF0ZUZvcm1hdDoge1xuICAgICAgICAgICAgTFQ6ICdISDptbScsXG4gICAgICAgICAgICBMVFM6ICdISDptbTpzcycsXG4gICAgICAgICAgICBMOiAnREQvTU0vWVlZWScsXG4gICAgICAgICAgICBMTDogJ0QgTU1NTSBZWVlZJyxcbiAgICAgICAgICAgIExMTDogJ0QgTU1NTSBZWVlZLCBISDptbScsXG4gICAgICAgICAgICBMTExMOiAnZGRkZCwgRCBNTU1NIFlZWVksIEhIOm1tJyxcbiAgICAgICAgfSxcbiAgICAgICAgY2FsZW5kYXI6IHtcbiAgICAgICAgICAgIHNhbWVEYXk6ICdb4K6H4K6p4K+N4K6x4K+BXSBMVCcsXG4gICAgICAgICAgICBuZXh0RGF5OiAnW+CuqOCuvuCus+CviF0gTFQnLFxuICAgICAgICAgICAgbmV4dFdlZWs6ICdkZGRkLCBMVCcsXG4gICAgICAgICAgICBsYXN0RGF5OiAnW+CuqOCvh+CuseCvjeCuseCvgV0gTFQnLFxuICAgICAgICAgICAgbGFzdFdlZWs6ICdb4K6V4K6f4K6o4K+N4K6kIOCuteCuvuCusOCuruCvjV0gZGRkZCwgTFQnLFxuICAgICAgICAgICAgc2FtZUVsc2U6ICdMJyxcbiAgICAgICAgfSxcbiAgICAgICAgcmVsYXRpdmVUaW1lOiB7XG4gICAgICAgICAgICBmdXR1cmU6ICclcyDgrofgrrLgr40nLFxuICAgICAgICAgICAgcGFzdDogJyVzIOCuruCvgeCuqeCvjScsXG4gICAgICAgICAgICBzOiAn4K6S4K6w4K+BIOCumuCuv+CusiDgrrXgrr/grqjgrr7grp/grr/grpXgrrPgr40nLFxuICAgICAgICAgICAgc3M6ICclZCDgrrXgrr/grqjgrr7grp/grr/grpXgrrPgr40nLFxuICAgICAgICAgICAgbTogJ+CukuCusOCvgSDgrqjgrr/grq7grr/grp/grq7gr40nLFxuICAgICAgICAgICAgbW06ICclZCDgrqjgrr/grq7grr/grp/grpngr43grpXgrrPgr40nLFxuICAgICAgICAgICAgaDogJ+CukuCusOCvgSDgrq7grqPgrr8g4K6o4K+H4K6w4K6u4K+NJyxcbiAgICAgICAgICAgIGhoOiAnJWQg4K6u4K6j4K6/IOCuqOCvh+CusOCuruCvjScsXG4gICAgICAgICAgICBkOiAn4K6S4K6w4K+BIOCuqOCuvuCus+CvjScsXG4gICAgICAgICAgICBkZDogJyVkIOCuqOCuvuCun+CvjeCuleCus+CvjScsXG4gICAgICAgICAgICBNOiAn4K6S4K6w4K+BIOCuruCuvuCupOCuruCvjScsXG4gICAgICAgICAgICBNTTogJyVkIOCuruCuvuCupOCumeCvjeCuleCus+CvjScsXG4gICAgICAgICAgICB5OiAn4K6S4K6w4K+BIOCuteCusOCvgeCun+CuruCvjScsXG4gICAgICAgICAgICB5eTogJyVkIOCuhuCuo+CvjeCun+CvgeCuleCus+CvjScsXG4gICAgICAgIH0sXG4gICAgICAgIGRheU9mTW9udGhPcmRpbmFsUGFyc2U6IC9cXGR7MSwyfeCuteCupOCvgS8sXG4gICAgICAgIG9yZGluYWw6IGZ1bmN0aW9uIChudW1iZXIpIHtcbiAgICAgICAgICAgIHJldHVybiBudW1iZXIgKyAn4K614K6k4K+BJztcbiAgICAgICAgfSxcbiAgICAgICAgcHJlcGFyc2U6IGZ1bmN0aW9uIChzdHJpbmcpIHtcbiAgICAgICAgICAgIHJldHVybiBzdHJpbmcucmVwbGFjZSgvW+Cvp+CvqOCvqeCvquCvq+CvrOCvreCvruCvr+Cvpl0vZywgZnVuY3Rpb24gKG1hdGNoKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG51bWJlck1hcFttYXRjaF07XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSxcbiAgICAgICAgcG9zdGZvcm1hdDogZnVuY3Rpb24gKHN0cmluZykge1xuICAgICAgICAgICAgcmV0dXJuIHN0cmluZy5yZXBsYWNlKC9cXGQvZywgZnVuY3Rpb24gKG1hdGNoKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHN5bWJvbE1hcFttYXRjaF07XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSxcbiAgICAgICAgLy8gcmVmZXIgaHR0cDovL3RhLndpa2lwZWRpYS5vcmcvcy8xZXIxXG4gICAgICAgIG1lcmlkaWVtUGFyc2U6IC/grq/grr7grq7grq7gr4184K614K+I4K6V4K6x4K+IfOCuleCuvuCusuCviHzgrqjgrqPgr43grqrgrpXgrrLgr4184K6O4K6x4K+N4K6q4K6+4K6f4K+BfOCuruCuvuCusuCviC8sXG4gICAgICAgIG1lcmlkaWVtOiBmdW5jdGlvbiAoaG91ciwgbWludXRlLCBpc0xvd2VyKSB7XG4gICAgICAgICAgICBpZiAoaG91ciA8IDIpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gJyDgrq/grr7grq7grq7gr40nO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChob3VyIDwgNikge1xuICAgICAgICAgICAgICAgIHJldHVybiAnIOCuteCviOCuleCuseCviCc7IC8vIOCuteCviOCuleCuseCviFxuICAgICAgICAgICAgfSBlbHNlIGlmIChob3VyIDwgMTApIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gJyDgrpXgrr7grrLgr4gnOyAvLyDgrpXgrr7grrLgr4hcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoaG91ciA8IDE0KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuICcg4K6o4K6j4K+N4K6q4K6V4K6y4K+NJzsgLy8g4K6o4K6j4K+N4K6q4K6V4K6y4K+NXG4gICAgICAgICAgICB9IGVsc2UgaWYgKGhvdXIgPCAxOCkge1xuICAgICAgICAgICAgICAgIHJldHVybiAnIOCujuCuseCvjeCuquCuvuCun+CvgSc7IC8vIOCujuCuseCvjeCuquCuvuCun+CvgVxuICAgICAgICAgICAgfSBlbHNlIGlmIChob3VyIDwgMjIpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gJyDgrq7grr7grrLgr4gnOyAvLyDgrq7grr7grrLgr4hcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuICcg4K6v4K6+4K6u4K6u4K+NJztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgbWVyaWRpZW1Ib3VyOiBmdW5jdGlvbiAoaG91ciwgbWVyaWRpZW0pIHtcbiAgICAgICAgICAgIGlmIChob3VyID09PSAxMikge1xuICAgICAgICAgICAgICAgIGhvdXIgPSAwO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKG1lcmlkaWVtID09PSAn4K6v4K6+4K6u4K6u4K+NJykge1xuICAgICAgICAgICAgICAgIHJldHVybiBob3VyIDwgMiA/IGhvdXIgOiBob3VyICsgMTI7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKG1lcmlkaWVtID09PSAn4K614K+I4K6V4K6x4K+IJyB8fCBtZXJpZGllbSA9PT0gJ+CuleCuvuCusuCviCcpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gaG91cjtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAobWVyaWRpZW0gPT09ICfgrqjgrqPgr43grqrgrpXgrrLgr40nKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGhvdXIgPj0gMTAgPyBob3VyIDogaG91ciArIDEyO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gaG91ciArIDEyO1xuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICB3ZWVrOiB7XG4gICAgICAgICAgICBkb3c6IDAsIC8vIFN1bmRheSBpcyB0aGUgZmlyc3QgZGF5IG9mIHRoZSB3ZWVrLlxuICAgICAgICAgICAgZG95OiA2LCAvLyBUaGUgd2VlayB0aGF0IGNvbnRhaW5zIEphbiA2dGggaXMgdGhlIGZpcnN0IHdlZWsgb2YgdGhlIHllYXIuXG4gICAgICAgIH0sXG4gICAgfSk7XG5cbiAgICByZXR1cm4gdGE7XG5cbn0pKSk7XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///11025\n")},11470:function(__unused_webpack_module,__unused_webpack_exports,__webpack_require__){eval("//! moment.js locale configuration\n//! locale : Breton [br]\n//! author : Jean-Baptiste Le Duigou : https://github.com/jbleduigou\n\n;(function (global, factory) {\n true ? factory(__webpack_require__(95093)) :\n 0\n}(this, (function (moment) { 'use strict';\n\n //! moment.js locale configuration\n\n function relativeTimeWithMutation(number, withoutSuffix, key) {\n var format = {\n mm: 'munutenn',\n MM: 'miz',\n dd: 'devezh',\n };\n return number + ' ' + mutation(format[key], number);\n }\n function specialMutationForYears(number) {\n switch (lastNumber(number)) {\n case 1:\n case 3:\n case 4:\n case 5:\n case 9:\n return number + ' bloaz';\n default:\n return number + ' vloaz';\n }\n }\n function lastNumber(number) {\n if (number > 9) {\n return lastNumber(number % 10);\n }\n return number;\n }\n function mutation(text, number) {\n if (number === 2) {\n return softMutation(text);\n }\n return text;\n }\n function softMutation(text) {\n var mutationTable = {\n m: 'v',\n b: 'v',\n d: 'z',\n };\n if (mutationTable[text.charAt(0)] === undefined) {\n return text;\n }\n return mutationTable[text.charAt(0)] + text.substring(1);\n }\n\n var monthsParse = [\n /^gen/i,\n /^c[ʼ\\']hwe/i,\n /^meu/i,\n /^ebr/i,\n /^mae/i,\n /^(mez|eve)/i,\n /^gou/i,\n /^eos/i,\n /^gwe/i,\n /^her/i,\n /^du/i,\n /^ker/i,\n ],\n monthsRegex =\n /^(genver|c[ʼ\\']hwevrer|meurzh|ebrel|mae|mezheven|gouere|eost|gwengolo|here|du|kerzu|gen|c[ʼ\\']hwe|meu|ebr|mae|eve|gou|eos|gwe|her|du|ker)/i,\n monthsStrictRegex =\n /^(genver|c[ʼ\\']hwevrer|meurzh|ebrel|mae|mezheven|gouere|eost|gwengolo|here|du|kerzu)/i,\n monthsShortStrictRegex =\n /^(gen|c[ʼ\\']hwe|meu|ebr|mae|eve|gou|eos|gwe|her|du|ker)/i,\n fullWeekdaysParse = [\n /^sul/i,\n /^lun/i,\n /^meurzh/i,\n /^merc[ʼ\\']her/i,\n /^yaou/i,\n /^gwener/i,\n /^sadorn/i,\n ],\n shortWeekdaysParse = [\n /^Sul/i,\n /^Lun/i,\n /^Meu/i,\n /^Mer/i,\n /^Yao/i,\n /^Gwe/i,\n /^Sad/i,\n ],\n minWeekdaysParse = [\n /^Su/i,\n /^Lu/i,\n /^Me([^r]|$)/i,\n /^Mer/i,\n /^Ya/i,\n /^Gw/i,\n /^Sa/i,\n ];\n\n var br = moment.defineLocale('br', {\n months: 'Genver_Cʼhwevrer_Meurzh_Ebrel_Mae_Mezheven_Gouere_Eost_Gwengolo_Here_Du_Kerzu'.split(\n '_'\n ),\n monthsShort: 'Gen_Cʼhwe_Meu_Ebr_Mae_Eve_Gou_Eos_Gwe_Her_Du_Ker'.split('_'),\n weekdays: 'Sul_Lun_Meurzh_Mercʼher_Yaou_Gwener_Sadorn'.split('_'),\n weekdaysShort: 'Sul_Lun_Meu_Mer_Yao_Gwe_Sad'.split('_'),\n weekdaysMin: 'Su_Lu_Me_Mer_Ya_Gw_Sa'.split('_'),\n weekdaysParse: minWeekdaysParse,\n fullWeekdaysParse: fullWeekdaysParse,\n shortWeekdaysParse: shortWeekdaysParse,\n minWeekdaysParse: minWeekdaysParse,\n\n monthsRegex: monthsRegex,\n monthsShortRegex: monthsRegex,\n monthsStrictRegex: monthsStrictRegex,\n monthsShortStrictRegex: monthsShortStrictRegex,\n monthsParse: monthsParse,\n longMonthsParse: monthsParse,\n shortMonthsParse: monthsParse,\n\n longDateFormat: {\n LT: 'HH:mm',\n LTS: 'HH:mm:ss',\n L: 'DD/MM/YYYY',\n LL: 'D [a viz] MMMM YYYY',\n LLL: 'D [a viz] MMMM YYYY HH:mm',\n LLLL: 'dddd, D [a viz] MMMM YYYY HH:mm',\n },\n calendar: {\n sameDay: '[Hiziv da] LT',\n nextDay: '[Warcʼhoazh da] LT',\n nextWeek: 'dddd [da] LT',\n lastDay: '[Decʼh da] LT',\n lastWeek: 'dddd [paset da] LT',\n sameElse: 'L',\n },\n relativeTime: {\n future: 'a-benn %s',\n past: '%s ʼzo',\n s: 'un nebeud segondennoù',\n ss: '%d eilenn',\n m: 'ur vunutenn',\n mm: relativeTimeWithMutation,\n h: 'un eur',\n hh: '%d eur',\n d: 'un devezh',\n dd: relativeTimeWithMutation,\n M: 'ur miz',\n MM: relativeTimeWithMutation,\n y: 'ur bloaz',\n yy: specialMutationForYears,\n },\n dayOfMonthOrdinalParse: /\\d{1,2}(añ|vet)/,\n ordinal: function (number) {\n var output = number === 1 ? 'añ' : 'vet';\n return number + output;\n },\n week: {\n dow: 1, // Monday is the first day of the week.\n doy: 4, // The week that contains Jan 4th is the first week of the year.\n },\n meridiemParse: /a.m.|g.m./, // goude merenn | a-raok merenn\n isPM: function (token) {\n return token === 'g.m.';\n },\n meridiem: function (hour, minute, isLower) {\n return hour < 12 ? 'a.m.' : 'g.m.';\n },\n });\n\n return br;\n\n})));\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMTE0NzAuanMiLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vaXRnLW5leHRnZW4tZnJvbnRlbmQvLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9ici5qcz82ODg3Il0sInNvdXJjZXNDb250ZW50IjpbIi8vISBtb21lbnQuanMgbG9jYWxlIGNvbmZpZ3VyYXRpb25cbi8vISBsb2NhbGUgOiBCcmV0b24gW2JyXVxuLy8hIGF1dGhvciA6IEplYW4tQmFwdGlzdGUgTGUgRHVpZ291IDogaHR0cHM6Ly9naXRodWIuY29tL2pibGVkdWlnb3VcblxuOyhmdW5jdGlvbiAoZ2xvYmFsLCBmYWN0b3J5KSB7XG4gICB0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcgJiYgdHlwZW9mIG1vZHVsZSAhPT0gJ3VuZGVmaW5lZCdcbiAgICAgICAmJiB0eXBlb2YgcmVxdWlyZSA9PT0gJ2Z1bmN0aW9uJyA/IGZhY3RvcnkocmVxdWlyZSgnLi4vbW9tZW50JykpIDpcbiAgIHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgZGVmaW5lLmFtZCA/IGRlZmluZShbJy4uL21vbWVudCddLCBmYWN0b3J5KSA6XG4gICBmYWN0b3J5KGdsb2JhbC5tb21lbnQpXG59KHRoaXMsIChmdW5jdGlvbiAobW9tZW50KSB7ICd1c2Ugc3RyaWN0JztcblxuICAgIC8vISBtb21lbnQuanMgbG9jYWxlIGNvbmZpZ3VyYXRpb25cblxuICAgIGZ1bmN0aW9uIHJlbGF0aXZlVGltZVdpdGhNdXRhdGlvbihudW1iZXIsIHdpdGhvdXRTdWZmaXgsIGtleSkge1xuICAgICAgICB2YXIgZm9ybWF0ID0ge1xuICAgICAgICAgICAgbW06ICdtdW51dGVubicsXG4gICAgICAgICAgICBNTTogJ21peicsXG4gICAgICAgICAgICBkZDogJ2RldmV6aCcsXG4gICAgICAgIH07XG4gICAgICAgIHJldHVybiBudW1iZXIgKyAnICcgKyBtdXRhdGlvbihmb3JtYXRba2V5XSwgbnVtYmVyKTtcbiAgICB9XG4gICAgZnVuY3Rpb24gc3BlY2lhbE11dGF0aW9uRm9yWWVhcnMobnVtYmVyKSB7XG4gICAgICAgIHN3aXRjaCAobGFzdE51bWJlcihudW1iZXIpKSB7XG4gICAgICAgICAgICBjYXNlIDE6XG4gICAgICAgICAgICBjYXNlIDM6XG4gICAgICAgICAgICBjYXNlIDQ6XG4gICAgICAgICAgICBjYXNlIDU6XG4gICAgICAgICAgICBjYXNlIDk6XG4gICAgICAgICAgICAgICAgcmV0dXJuIG51bWJlciArICcgYmxvYXonO1xuICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICByZXR1cm4gbnVtYmVyICsgJyB2bG9heic7XG4gICAgICAgIH1cbiAgICB9XG4gICAgZnVuY3Rpb24gbGFzdE51bWJlcihudW1iZXIpIHtcbiAgICAgICAgaWYgKG51bWJlciA+IDkpIHtcbiAgICAgICAgICAgIHJldHVybiBsYXN0TnVtYmVyKG51bWJlciAlIDEwKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbnVtYmVyO1xuICAgIH1cbiAgICBmdW5jdGlvbiBtdXRhdGlvbih0ZXh0LCBudW1iZXIpIHtcbiAgICAgICAgaWYgKG51bWJlciA9PT0gMikge1xuICAgICAgICAgICAgcmV0dXJuIHNvZnRNdXRhdGlvbih0ZXh0KTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGV4dDtcbiAgICB9XG4gICAgZnVuY3Rpb24gc29mdE11dGF0aW9uKHRleHQpIHtcbiAgICAgICAgdmFyIG11dGF0aW9uVGFibGUgPSB7XG4gICAgICAgICAgICBtOiAndicsXG4gICAgICAgICAgICBiOiAndicsXG4gICAgICAgICAgICBkOiAneicsXG4gICAgICAgIH07XG4gICAgICAgIGlmIChtdXRhdGlvblRhYmxlW3RleHQuY2hhckF0KDApXSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICByZXR1cm4gdGV4dDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbXV0YXRpb25UYWJsZVt0ZXh0LmNoYXJBdCgwKV0gKyB0ZXh0LnN1YnN0cmluZygxKTtcbiAgICB9XG5cbiAgICB2YXIgbW9udGhzUGFyc2UgPSBbXG4gICAgICAgICAgICAvXmdlbi9pLFxuICAgICAgICAgICAgL15jW8q8XFwnXWh3ZS9pLFxuICAgICAgICAgICAgL15tZXUvaSxcbiAgICAgICAgICAgIC9eZWJyL2ksXG4gICAgICAgICAgICAvXm1hZS9pLFxuICAgICAgICAgICAgL14obWV6fGV2ZSkvaSxcbiAgICAgICAgICAgIC9eZ291L2ksXG4gICAgICAgICAgICAvXmVvcy9pLFxuICAgICAgICAgICAgL15nd2UvaSxcbiAgICAgICAgICAgIC9eaGVyL2ksXG4gICAgICAgICAgICAvXmR1L2ksXG4gICAgICAgICAgICAvXmtlci9pLFxuICAgICAgICBdLFxuICAgICAgICBtb250aHNSZWdleCA9XG4gICAgICAgICAgICAvXihnZW52ZXJ8Y1vKvFxcJ11od2V2cmVyfG1ldXJ6aHxlYnJlbHxtYWV8bWV6aGV2ZW58Z291ZXJlfGVvc3R8Z3dlbmdvbG98aGVyZXxkdXxrZXJ6dXxnZW58Y1vKvFxcJ11od2V8bWV1fGVicnxtYWV8ZXZlfGdvdXxlb3N8Z3dlfGhlcnxkdXxrZXIpL2ksXG4gICAgICAgIG1vbnRoc1N0cmljdFJlZ2V4ID1cbiAgICAgICAgICAgIC9eKGdlbnZlcnxjW8q8XFwnXWh3ZXZyZXJ8bWV1cnpofGVicmVsfG1hZXxtZXpoZXZlbnxnb3VlcmV8ZW9zdHxnd2VuZ29sb3xoZXJlfGR1fGtlcnp1KS9pLFxuICAgICAgICBtb250aHNTaG9ydFN0cmljdFJlZ2V4ID1cbiAgICAgICAgICAgIC9eKGdlbnxjW8q8XFwnXWh3ZXxtZXV8ZWJyfG1hZXxldmV8Z291fGVvc3xnd2V8aGVyfGR1fGtlcikvaSxcbiAgICAgICAgZnVsbFdlZWtkYXlzUGFyc2UgPSBbXG4gICAgICAgICAgICAvXnN1bC9pLFxuICAgICAgICAgICAgL15sdW4vaSxcbiAgICAgICAgICAgIC9ebWV1cnpoL2ksXG4gICAgICAgICAgICAvXm1lcmNbyrxcXCddaGVyL2ksXG4gICAgICAgICAgICAvXnlhb3UvaSxcbiAgICAgICAgICAgIC9eZ3dlbmVyL2ksXG4gICAgICAgICAgICAvXnNhZG9ybi9pLFxuICAgICAgICBdLFxuICAgICAgICBzaG9ydFdlZWtkYXlzUGFyc2UgPSBbXG4gICAgICAgICAgICAvXlN1bC9pLFxuICAgICAgICAgICAgL15MdW4vaSxcbiAgICAgICAgICAgIC9eTWV1L2ksXG4gICAgICAgICAgICAvXk1lci9pLFxuICAgICAgICAgICAgL15ZYW8vaSxcbiAgICAgICAgICAgIC9eR3dlL2ksXG4gICAgICAgICAgICAvXlNhZC9pLFxuICAgICAgICBdLFxuICAgICAgICBtaW5XZWVrZGF5c1BhcnNlID0gW1xuICAgICAgICAgICAgL15TdS9pLFxuICAgICAgICAgICAgL15MdS9pLFxuICAgICAgICAgICAgL15NZShbXnJdfCQpL2ksXG4gICAgICAgICAgICAvXk1lci9pLFxuICAgICAgICAgICAgL15ZYS9pLFxuICAgICAgICAgICAgL15Hdy9pLFxuICAgICAgICAgICAgL15TYS9pLFxuICAgICAgICBdO1xuXG4gICAgdmFyIGJyID0gbW9tZW50LmRlZmluZUxvY2FsZSgnYnInLCB7XG4gICAgICAgIG1vbnRoczogJ0dlbnZlcl9Dyrxod2V2cmVyX01ldXJ6aF9FYnJlbF9NYWVfTWV6aGV2ZW5fR291ZXJlX0Vvc3RfR3dlbmdvbG9fSGVyZV9EdV9LZXJ6dScuc3BsaXQoXG4gICAgICAgICAgICAnXydcbiAgICAgICAgKSxcbiAgICAgICAgbW9udGhzU2hvcnQ6ICdHZW5fQ8q8aHdlX01ldV9FYnJfTWFlX0V2ZV9Hb3VfRW9zX0d3ZV9IZXJfRHVfS2VyJy5zcGxpdCgnXycpLFxuICAgICAgICB3ZWVrZGF5czogJ1N1bF9MdW5fTWV1cnpoX01lcmPKvGhlcl9ZYW91X0d3ZW5lcl9TYWRvcm4nLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzU2hvcnQ6ICdTdWxfTHVuX01ldV9NZXJfWWFvX0d3ZV9TYWQnLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzTWluOiAnU3VfTHVfTWVfTWVyX1lhX0d3X1NhJy5zcGxpdCgnXycpLFxuICAgICAgICB3ZWVrZGF5c1BhcnNlOiBtaW5XZWVrZGF5c1BhcnNlLFxuICAgICAgICBmdWxsV2Vla2RheXNQYXJzZTogZnVsbFdlZWtkYXlzUGFyc2UsXG4gICAgICAgIHNob3J0V2Vla2RheXNQYXJzZTogc2hvcnRXZWVrZGF5c1BhcnNlLFxuICAgICAgICBtaW5XZWVrZGF5c1BhcnNlOiBtaW5XZWVrZGF5c1BhcnNlLFxuXG4gICAgICAgIG1vbnRoc1JlZ2V4OiBtb250aHNSZWdleCxcbiAgICAgICAgbW9udGhzU2hvcnRSZWdleDogbW9udGhzUmVnZXgsXG4gICAgICAgIG1vbnRoc1N0cmljdFJlZ2V4OiBtb250aHNTdHJpY3RSZWdleCxcbiAgICAgICAgbW9udGhzU2hvcnRTdHJpY3RSZWdleDogbW9udGhzU2hvcnRTdHJpY3RSZWdleCxcbiAgICAgICAgbW9udGhzUGFyc2U6IG1vbnRoc1BhcnNlLFxuICAgICAgICBsb25nTW9udGhzUGFyc2U6IG1vbnRoc1BhcnNlLFxuICAgICAgICBzaG9ydE1vbnRoc1BhcnNlOiBtb250aHNQYXJzZSxcblxuICAgICAgICBsb25nRGF0ZUZvcm1hdDoge1xuICAgICAgICAgICAgTFQ6ICdISDptbScsXG4gICAgICAgICAgICBMVFM6ICdISDptbTpzcycsXG4gICAgICAgICAgICBMOiAnREQvTU0vWVlZWScsXG4gICAgICAgICAgICBMTDogJ0QgW2Egdml6XSBNTU1NIFlZWVknLFxuICAgICAgICAgICAgTExMOiAnRCBbYSB2aXpdIE1NTU0gWVlZWSBISDptbScsXG4gICAgICAgICAgICBMTExMOiAnZGRkZCwgRCBbYSB2aXpdIE1NTU0gWVlZWSBISDptbScsXG4gICAgICAgIH0sXG4gICAgICAgIGNhbGVuZGFyOiB7XG4gICAgICAgICAgICBzYW1lRGF5OiAnW0hpeml2IGRhXSBMVCcsXG4gICAgICAgICAgICBuZXh0RGF5OiAnW1dhcmPKvGhvYXpoIGRhXSBMVCcsXG4gICAgICAgICAgICBuZXh0V2VlazogJ2RkZGQgW2RhXSBMVCcsXG4gICAgICAgICAgICBsYXN0RGF5OiAnW0RlY8q8aCBkYV0gTFQnLFxuICAgICAgICAgICAgbGFzdFdlZWs6ICdkZGRkIFtwYXNldCBkYV0gTFQnLFxuICAgICAgICAgICAgc2FtZUVsc2U6ICdMJyxcbiAgICAgICAgfSxcbiAgICAgICAgcmVsYXRpdmVUaW1lOiB7XG4gICAgICAgICAgICBmdXR1cmU6ICdhLWJlbm4gJXMnLFxuICAgICAgICAgICAgcGFzdDogJyVzIMq8em8nLFxuICAgICAgICAgICAgczogJ3VuIG5lYmV1ZCBzZWdvbmRlbm5vw7knLFxuICAgICAgICAgICAgc3M6ICclZCBlaWxlbm4nLFxuICAgICAgICAgICAgbTogJ3VyIHZ1bnV0ZW5uJyxcbiAgICAgICAgICAgIG1tOiByZWxhdGl2ZVRpbWVXaXRoTXV0YXRpb24sXG4gICAgICAgICAgICBoOiAndW4gZXVyJyxcbiAgICAgICAgICAgIGhoOiAnJWQgZXVyJyxcbiAgICAgICAgICAgIGQ6ICd1biBkZXZlemgnLFxuICAgICAgICAgICAgZGQ6IHJlbGF0aXZlVGltZVdpdGhNdXRhdGlvbixcbiAgICAgICAgICAgIE06ICd1ciBtaXonLFxuICAgICAgICAgICAgTU06IHJlbGF0aXZlVGltZVdpdGhNdXRhdGlvbixcbiAgICAgICAgICAgIHk6ICd1ciBibG9heicsXG4gICAgICAgICAgICB5eTogc3BlY2lhbE11dGF0aW9uRm9yWWVhcnMsXG4gICAgICAgIH0sXG4gICAgICAgIGRheU9mTW9udGhPcmRpbmFsUGFyc2U6IC9cXGR7MSwyfShhw7F8dmV0KS8sXG4gICAgICAgIG9yZGluYWw6IGZ1bmN0aW9uIChudW1iZXIpIHtcbiAgICAgICAgICAgIHZhciBvdXRwdXQgPSBudW1iZXIgPT09IDEgPyAnYcOxJyA6ICd2ZXQnO1xuICAgICAgICAgICAgcmV0dXJuIG51bWJlciArIG91dHB1dDtcbiAgICAgICAgfSxcbiAgICAgICAgd2Vlazoge1xuICAgICAgICAgICAgZG93OiAxLCAvLyBNb25kYXkgaXMgdGhlIGZpcnN0IGRheSBvZiB0aGUgd2Vlay5cbiAgICAgICAgICAgIGRveTogNCwgLy8gVGhlIHdlZWsgdGhhdCBjb250YWlucyBKYW4gNHRoIGlzIHRoZSBmaXJzdCB3ZWVrIG9mIHRoZSB5ZWFyLlxuICAgICAgICB9LFxuICAgICAgICBtZXJpZGllbVBhcnNlOiAvYS5tLnxnLm0uLywgLy8gZ291ZGUgbWVyZW5uIHwgYS1yYW9rIG1lcmVublxuICAgICAgICBpc1BNOiBmdW5jdGlvbiAodG9rZW4pIHtcbiAgICAgICAgICAgIHJldHVybiB0b2tlbiA9PT0gJ2cubS4nO1xuICAgICAgICB9LFxuICAgICAgICBtZXJpZGllbTogZnVuY3Rpb24gKGhvdXIsIG1pbnV0ZSwgaXNMb3dlcikge1xuICAgICAgICAgICAgcmV0dXJuIGhvdXIgPCAxMiA/ICdhLm0uJyA6ICdnLm0uJztcbiAgICAgICAgfSxcbiAgICB9KTtcblxuICAgIHJldHVybiBicjtcblxufSkpKTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///11470\n")},11636:(I,g,t)=>{"use strict";I.exports=t.p+"aaa4bfbb218b9bb904f8.png"},11713:function(__unused_webpack_module,__unused_webpack_exports,__webpack_require__){eval("//! moment.js locale configuration\n//! locale : Hebrew [he]\n//! author : Tomer Cohen : https://github.com/tomer\n//! author : Moshe Simantov : https://github.com/DevelopmentIL\n//! author : Tal Ater : https://github.com/TalAter\n\n;(function (global, factory) {\n true ? factory(__webpack_require__(95093)) :\n 0\n}(this, (function (moment) { 'use strict';\n\n //! moment.js locale configuration\n\n var he = moment.defineLocale('he', {\n months: 'ינואר_פברואר_מרץ_אפריל_מאי_יוני_יולי_אוגוסט_ספטמבר_אוקטובר_נובמבר_דצמבר'.split(\n '_'\n ),\n monthsShort:\n 'ינו׳_פבר׳_מרץ_אפר׳_מאי_יוני_יולי_אוג׳_ספט׳_אוק׳_נוב׳_דצמ׳'.split('_'),\n weekdays: 'ראשון_שני_שלישי_רביעי_חמישי_שישי_שבת'.split('_'),\n weekdaysShort: 'א׳_ב׳_ג׳_ד׳_ה׳_ו׳_ש׳'.split('_'),\n weekdaysMin: 'א_ב_ג_ד_ה_ו_ש'.split('_'),\n longDateFormat: {\n LT: 'HH:mm',\n LTS: 'HH:mm:ss',\n L: 'DD/MM/YYYY',\n LL: 'D [ב]MMMM YYYY',\n LLL: 'D [ב]MMMM YYYY HH:mm',\n LLLL: 'dddd, D [ב]MMMM YYYY HH:mm',\n l: 'D/M/YYYY',\n ll: 'D MMM YYYY',\n lll: 'D MMM YYYY HH:mm',\n llll: 'ddd, D MMM YYYY HH:mm',\n },\n calendar: {\n sameDay: '[היום ב־]LT',\n nextDay: '[מחר ב־]LT',\n nextWeek: 'dddd [בשעה] LT',\n lastDay: '[אתמול ב־]LT',\n lastWeek: '[ביום] dddd [האחרון בשעה] LT',\n sameElse: 'L',\n },\n relativeTime: {\n future: 'בעוד %s',\n past: 'לפני %s',\n s: 'מספר שניות',\n ss: '%d שניות',\n m: 'דקה',\n mm: '%d דקות',\n h: 'שעה',\n hh: function (number) {\n if (number === 2) {\n return 'שעתיים';\n }\n return number + ' שעות';\n },\n d: 'יום',\n dd: function (number) {\n if (number === 2) {\n return 'יומיים';\n }\n return number + ' ימים';\n },\n M: 'חודש',\n MM: function (number) {\n if (number === 2) {\n return 'חודשיים';\n }\n return number + ' חודשים';\n },\n y: 'שנה',\n yy: function (number) {\n if (number === 2) {\n return 'שנתיים';\n } else if (number % 10 === 0 && number !== 10) {\n return number + ' שנה';\n }\n return number + ' שנים';\n },\n },\n meridiemParse:\n /אחה\"צ|לפנה\"צ|אחרי הצהריים|לפני הצהריים|לפנות בוקר|בבוקר|בערב/i,\n isPM: function (input) {\n return /^(אחה\"צ|אחרי הצהריים|בערב)$/.test(input);\n },\n meridiem: function (hour, minute, isLower) {\n if (hour < 5) {\n return 'לפנות בוקר';\n } else if (hour < 10) {\n return 'בבוקר';\n } else if (hour < 12) {\n return isLower ? 'לפנה\"צ' : 'לפני הצהריים';\n } else if (hour < 18) {\n return isLower ? 'אחה\"צ' : 'אחרי הצהריים';\n } else {\n return 'בערב';\n }\n },\n });\n\n return he;\n\n})));\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMTE3MTMuanMiLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9pdGctbmV4dGdlbi1mcm9udGVuZC8uL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL2hlLmpzP2M3YWEiXSwic291cmNlc0NvbnRlbnQiOlsiLy8hIG1vbWVudC5qcyBsb2NhbGUgY29uZmlndXJhdGlvblxuLy8hIGxvY2FsZSA6IEhlYnJldyBbaGVdXG4vLyEgYXV0aG9yIDogVG9tZXIgQ29oZW4gOiBodHRwczovL2dpdGh1Yi5jb20vdG9tZXJcbi8vISBhdXRob3IgOiBNb3NoZSBTaW1hbnRvdiA6IGh0dHBzOi8vZ2l0aHViLmNvbS9EZXZlbG9wbWVudElMXG4vLyEgYXV0aG9yIDogVGFsIEF0ZXIgOiBodHRwczovL2dpdGh1Yi5jb20vVGFsQXRlclxuXG47KGZ1bmN0aW9uIChnbG9iYWwsIGZhY3RvcnkpIHtcbiAgIHR5cGVvZiBleHBvcnRzID09PSAnb2JqZWN0JyAmJiB0eXBlb2YgbW9kdWxlICE9PSAndW5kZWZpbmVkJ1xuICAgICAgICYmIHR5cGVvZiByZXF1aXJlID09PSAnZnVuY3Rpb24nID8gZmFjdG9yeShyZXF1aXJlKCcuLi9tb21lbnQnKSkgOlxuICAgdHlwZW9mIGRlZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiBkZWZpbmUuYW1kID8gZGVmaW5lKFsnLi4vbW9tZW50J10sIGZhY3RvcnkpIDpcbiAgIGZhY3RvcnkoZ2xvYmFsLm1vbWVudClcbn0odGhpcywgKGZ1bmN0aW9uIChtb21lbnQpIHsgJ3VzZSBzdHJpY3QnO1xuXG4gICAgLy8hIG1vbWVudC5qcyBsb2NhbGUgY29uZmlndXJhdGlvblxuXG4gICAgdmFyIGhlID0gbW9tZW50LmRlZmluZUxvY2FsZSgnaGUnLCB7XG4gICAgICAgIG1vbnRoczogJ9eZ16DXldeQ16hf16TXkdeo15XXkNeoX9ee16jXpV/XkNek16jXmdecX9ee15DXmV/XmdeV16DXmV/XmdeV15zXmV/XkNeV15LXldeh15hf16HXpNeY157XkdeoX9eQ15XXp9eY15XXkdeoX9eg15XXkdee15HXqF/Xk9em157XkdeoJy5zcGxpdChcbiAgICAgICAgICAgICdfJ1xuICAgICAgICApLFxuICAgICAgICBtb250aHNTaG9ydDpcbiAgICAgICAgICAgICfXmdeg15XXs1/XpNeR16jXs1/Xnteo16Vf15DXpNeo17Nf157XkNeZX9eZ15XXoNeZX9eZ15XXnNeZX9eQ15XXktezX9eh16TXmNezX9eQ15XXp9ezX9eg15XXkdezX9eT16bXntezJy5zcGxpdCgnXycpLFxuICAgICAgICB3ZWVrZGF5czogJ9eo15DXqdeV159f16nXoNeZX9ep15zXmdep15lf16jXkdeZ16LXmV/Xl9ee15nXqdeZX9ep15nXqdeZX9ep15HXqicuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXNTaG9ydDogJ9eQ17Nf15HXs1/XktezX9eT17Nf15TXs1/XldezX9ep17MnLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzTWluOiAn15Bf15Ff15Jf15Nf15Rf15Vf16knLnNwbGl0KCdfJyksXG4gICAgICAgIGxvbmdEYXRlRm9ybWF0OiB7XG4gICAgICAgICAgICBMVDogJ0hIOm1tJyxcbiAgICAgICAgICAgIExUUzogJ0hIOm1tOnNzJyxcbiAgICAgICAgICAgIEw6ICdERC9NTS9ZWVlZJyxcbiAgICAgICAgICAgIExMOiAnRCBb15FdTU1NTSBZWVlZJyxcbiAgICAgICAgICAgIExMTDogJ0QgW9eRXU1NTU0gWVlZWSBISDptbScsXG4gICAgICAgICAgICBMTExMOiAnZGRkZCwgRCBb15FdTU1NTSBZWVlZIEhIOm1tJyxcbiAgICAgICAgICAgIGw6ICdEL00vWVlZWScsXG4gICAgICAgICAgICBsbDogJ0QgTU1NIFlZWVknLFxuICAgICAgICAgICAgbGxsOiAnRCBNTU0gWVlZWSBISDptbScsXG4gICAgICAgICAgICBsbGxsOiAnZGRkLCBEIE1NTSBZWVlZIEhIOm1tJyxcbiAgICAgICAgfSxcbiAgICAgICAgY2FsZW5kYXI6IHtcbiAgICAgICAgICAgIHNhbWVEYXk6ICdb15TXmdeV150g15HWvl1MVCcsXG4gICAgICAgICAgICBuZXh0RGF5OiAnW9ee15fXqCDXkda+XUxUJyxcbiAgICAgICAgICAgIG5leHRXZWVrOiAnZGRkZCBb15HXqdei15RdIExUJyxcbiAgICAgICAgICAgIGxhc3REYXk6ICdb15DXqtee15XXnCDXkda+XUxUJyxcbiAgICAgICAgICAgIGxhc3RXZWVrOiAnW9eR15nXldedXSBkZGRkIFvXlNeQ15fXqNeV158g15HXqdei15RdIExUJyxcbiAgICAgICAgICAgIHNhbWVFbHNlOiAnTCcsXG4gICAgICAgIH0sXG4gICAgICAgIHJlbGF0aXZlVGltZToge1xuICAgICAgICAgICAgZnV0dXJlOiAn15HXoteV15MgJXMnLFxuICAgICAgICAgICAgcGFzdDogJ9ec16TXoNeZICVzJyxcbiAgICAgICAgICAgIHM6ICfXnteh16TXqCDXqdeg15nXldeqJyxcbiAgICAgICAgICAgIHNzOiAnJWQg16nXoNeZ15XXqicsXG4gICAgICAgICAgICBtOiAn15PXp9eUJyxcbiAgICAgICAgICAgIG1tOiAnJWQg15PXp9eV16onLFxuICAgICAgICAgICAgaDogJ9ep16LXlCcsXG4gICAgICAgICAgICBoaDogZnVuY3Rpb24gKG51bWJlcikge1xuICAgICAgICAgICAgICAgIGlmIChudW1iZXIgPT09IDIpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuICfXqdei16rXmdeZ150nO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gbnVtYmVyICsgJyDXqdei15XXqic7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgZDogJ9eZ15XXnScsXG4gICAgICAgICAgICBkZDogZnVuY3Rpb24gKG51bWJlcikge1xuICAgICAgICAgICAgICAgIGlmIChudW1iZXIgPT09IDIpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuICfXmdeV157XmdeZ150nO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gbnVtYmVyICsgJyDXmdee15nXnSc7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgTTogJ9eX15XXk9epJyxcbiAgICAgICAgICAgIE1NOiBmdW5jdGlvbiAobnVtYmVyKSB7XG4gICAgICAgICAgICAgICAgaWYgKG51bWJlciA9PT0gMikge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gJ9eX15XXk9ep15nXmdedJztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIG51bWJlciArICcg15fXldeT16nXmdedJztcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB5OiAn16nXoNeUJyxcbiAgICAgICAgICAgIHl5OiBmdW5jdGlvbiAobnVtYmVyKSB7XG4gICAgICAgICAgICAgICAgaWYgKG51bWJlciA9PT0gMikge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gJ9ep16DXqteZ15nXnSc7XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChudW1iZXIgJSAxMCA9PT0gMCAmJiBudW1iZXIgIT09IDEwKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBudW1iZXIgKyAnINep16DXlCc7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiBudW1iZXIgKyAnINep16DXmdedJztcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgICAgIG1lcmlkaWVtUGFyc2U6XG4gICAgICAgICAgICAv15DXl9eUXCLXpnzXnNek16DXlFwi16Z815DXl9eo15kg15TXpteU16jXmdeZ151815zXpNeg15kg15TXpteU16jXmdeZ151815zXpNeg15XXqiDXkdeV16fXqHzXkdeR15XXp9eofNeR16LXqNeRL2ksXG4gICAgICAgIGlzUE06IGZ1bmN0aW9uIChpbnB1dCkge1xuICAgICAgICAgICAgcmV0dXJuIC9eKNeQ15fXlFwi16Z815DXl9eo15kg15TXpteU16jXmdeZ151815HXoteo15EpJC8udGVzdChpbnB1dCk7XG4gICAgICAgIH0sXG4gICAgICAgIG1lcmlkaWVtOiBmdW5jdGlvbiAoaG91ciwgbWludXRlLCBpc0xvd2VyKSB7XG4gICAgICAgICAgICBpZiAoaG91ciA8IDUpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gJ9ec16TXoNeV16og15HXlden16gnO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChob3VyIDwgMTApIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gJ9eR15HXlden16gnO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChob3VyIDwgMTIpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gaXNMb3dlciA/ICfXnNek16DXlFwi16YnIDogJ9ec16TXoNeZINeU16bXlNeo15nXmdedJztcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoaG91ciA8IDE4KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGlzTG93ZXIgPyAn15DXl9eUXCLXpicgOiAn15DXl9eo15kg15TXpteU16jXmdeZ150nO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gJ9eR16LXqNeRJztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICB9KTtcblxuICAgIHJldHVybiBoZTtcblxufSkpKTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///11713\n")},11729:(I,g,t)=>{"use strict";I.exports=t.p+"1826b0be16eb2d9ba2a4.png"},11885:function(__unused_webpack_module,__unused_webpack_exports,__webpack_require__){eval("//! moment.js locale configuration\n//! locale : Telugu [te]\n//! author : Krishna Chaitanya Thota : https://github.com/kcthota\n\n;(function (global, factory) {\n true ? factory(__webpack_require__(95093)) :\n 0\n}(this, (function (moment) { 'use strict';\n\n //! moment.js locale configuration\n\n var te = moment.defineLocale('te', {\n months: 'జనవరి_ఫిబ్రవరి_మార్చి_ఏప్రిల్_మే_జూన్_జులై_ఆగస్టు_సెప్టెంబర్_అక్టోబర్_నవంబర్_డిసెంబర్'.split(\n '_'\n ),\n monthsShort:\n 'జన._ఫిబ్ర._మార్చి_ఏప్రి._మే_జూన్_జులై_ఆగ._సెప్._అక్టో._నవ._డిసె.'.split(\n '_'\n ),\n monthsParseExact: true,\n weekdays:\n 'ఆదివారం_సోమవారం_మంగళవారం_బుధవారం_గురువారం_శుక్రవారం_శనివారం'.split(\n '_'\n ),\n weekdaysShort: 'ఆది_సోమ_మంగళ_బుధ_గురు_శుక్ర_శని'.split('_'),\n weekdaysMin: 'ఆ_సో_మం_బు_గు_శు_శ'.split('_'),\n longDateFormat: {\n LT: 'A h:mm',\n LTS: 'A h:mm:ss',\n L: 'DD/MM/YYYY',\n LL: 'D MMMM YYYY',\n LLL: 'D MMMM YYYY, A h:mm',\n LLLL: 'dddd, D MMMM YYYY, A h:mm',\n },\n calendar: {\n sameDay: '[నేడు] LT',\n nextDay: '[రేపు] LT',\n nextWeek: 'dddd, LT',\n lastDay: '[నిన్న] LT',\n lastWeek: '[గత] dddd, LT',\n sameElse: 'L',\n },\n relativeTime: {\n future: '%s లో',\n past: '%s క్రితం',\n s: 'కొన్ని క్షణాలు',\n ss: '%d సెకన్లు',\n m: 'ఒక నిమిషం',\n mm: '%d నిమిషాలు',\n h: 'ఒక గంట',\n hh: '%d గంటలు',\n d: 'ఒక రోజు',\n dd: '%d రోజులు',\n M: 'ఒక నెల',\n MM: '%d నెలలు',\n y: 'ఒక సంవత్సరం',\n yy: '%d సంవత్సరాలు',\n },\n dayOfMonthOrdinalParse: /\\d{1,2}వ/,\n ordinal: '%dవ',\n meridiemParse: /రాత్రి|ఉదయం|మధ్యాహ్నం|సాయంత్రం/,\n meridiemHour: function (hour, meridiem) {\n if (hour === 12) {\n hour = 0;\n }\n if (meridiem === 'రాత్రి') {\n return hour < 4 ? hour : hour + 12;\n } else if (meridiem === 'ఉదయం') {\n return hour;\n } else if (meridiem === 'మధ్యాహ్నం') {\n return hour >= 10 ? hour : hour + 12;\n } else if (meridiem === 'సాయంత్రం') {\n return hour + 12;\n }\n },\n meridiem: function (hour, minute, isLower) {\n if (hour < 4) {\n return 'రాత్రి';\n } else if (hour < 10) {\n return 'ఉదయం';\n } else if (hour < 17) {\n return 'మధ్యాహ్నం';\n } else if (hour < 20) {\n return 'సాయంత్రం';\n } else {\n return 'రాత్రి';\n }\n },\n week: {\n dow: 0, // Sunday is the first day of the week.\n doy: 6, // The week that contains Jan 6th is the first week of the year.\n },\n });\n\n return te;\n\n})));\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMTE4ODUuanMiLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9pdGctbmV4dGdlbi1mcm9udGVuZC8uL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL3RlLmpzPzVjYmIiXSwic291cmNlc0NvbnRlbnQiOlsiLy8hIG1vbWVudC5qcyBsb2NhbGUgY29uZmlndXJhdGlvblxuLy8hIGxvY2FsZSA6IFRlbHVndSBbdGVdXG4vLyEgYXV0aG9yIDogS3Jpc2huYSBDaGFpdGFueWEgVGhvdGEgOiBodHRwczovL2dpdGh1Yi5jb20va2N0aG90YVxuXG47KGZ1bmN0aW9uIChnbG9iYWwsIGZhY3RvcnkpIHtcbiAgIHR5cGVvZiBleHBvcnRzID09PSAnb2JqZWN0JyAmJiB0eXBlb2YgbW9kdWxlICE9PSAndW5kZWZpbmVkJ1xuICAgICAgICYmIHR5cGVvZiByZXF1aXJlID09PSAnZnVuY3Rpb24nID8gZmFjdG9yeShyZXF1aXJlKCcuLi9tb21lbnQnKSkgOlxuICAgdHlwZW9mIGRlZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiBkZWZpbmUuYW1kID8gZGVmaW5lKFsnLi4vbW9tZW50J10sIGZhY3RvcnkpIDpcbiAgIGZhY3RvcnkoZ2xvYmFsLm1vbWVudClcbn0odGhpcywgKGZ1bmN0aW9uIChtb21lbnQpIHsgJ3VzZSBzdHJpY3QnO1xuXG4gICAgLy8hIG1vbWVudC5qcyBsb2NhbGUgY29uZmlndXJhdGlvblxuXG4gICAgdmFyIHRlID0gbW9tZW50LmRlZmluZUxvY2FsZSgndGUnLCB7XG4gICAgICAgIG1vbnRoczogJ+CwnOCwqOCwteCwsOCwv1/gsKvgsL/gsKzgsY3gsLDgsLXgsLDgsL9f4LCu4LC+4LCw4LGN4LCa4LC/X+Cwj+CwquCxjeCwsOCwv+CwsuCxjV/gsK7gsYdf4LCc4LGC4LCo4LGNX+CwnOCxgeCwsuCxiF/gsIbgsJfgsLjgsY3gsJ/gsYFf4LC44LGG4LCq4LGN4LCf4LGG4LCC4LCs4LCw4LGNX+CwheCwleCxjeCwn+Cxi+CwrOCwsOCxjV/gsKjgsLXgsILgsKzgsLDgsY1f4LCh4LC/4LC44LGG4LCC4LCs4LCw4LGNJy5zcGxpdChcbiAgICAgICAgICAgICdfJ1xuICAgICAgICApLFxuICAgICAgICBtb250aHNTaG9ydDpcbiAgICAgICAgICAgICfgsJzgsKguX+Cwq+Cwv+CwrOCxjeCwsC5f4LCu4LC+4LCw4LGN4LCa4LC/X+Cwj+CwquCxjeCwsOCwvy5f4LCu4LGHX+CwnOCxguCwqOCxjV/gsJzgsYHgsLLgsYhf4LCG4LCXLl/gsLjgsYbgsKrgsY0uX+CwheCwleCxjeCwn+Cxiy5f4LCo4LC1Ll/gsKHgsL/gsLjgsYYuJy5zcGxpdChcbiAgICAgICAgICAgICAgICAnXydcbiAgICAgICAgICAgICksXG4gICAgICAgIG1vbnRoc1BhcnNlRXhhY3Q6IHRydWUsXG4gICAgICAgIHdlZWtkYXlzOlxuICAgICAgICAgICAgJ+CwhuCwpuCwv+CwteCwvuCwsOCwgl/gsLjgsYvgsK7gsLXgsL7gsLDgsIJf4LCu4LCC4LCX4LCz4LC14LC+4LCw4LCCX+CwrOCxgeCwp+CwteCwvuCwsOCwgl/gsJfgsYHgsLDgsYHgsLXgsL7gsLDgsIJf4LC24LGB4LCV4LGN4LCw4LC14LC+4LCw4LCCX+CwtuCwqOCwv+CwteCwvuCwsOCwgicuc3BsaXQoXG4gICAgICAgICAgICAgICAgJ18nXG4gICAgICAgICAgICApLFxuICAgICAgICB3ZWVrZGF5c1Nob3J0OiAn4LCG4LCm4LC/X+CwuOCxi+Cwrl/gsK7gsILgsJfgsLNf4LCs4LGB4LCnX+Cwl+CxgeCwsOCxgV/gsLbgsYHgsJXgsY3gsLBf4LC24LCo4LC/Jy5zcGxpdCgnXycpLFxuICAgICAgICB3ZWVrZGF5c01pbjogJ+Cwhl/gsLjgsYtf4LCu4LCCX+CwrOCxgV/gsJfgsYFf4LC24LGBX+Cwticuc3BsaXQoJ18nKSxcbiAgICAgICAgbG9uZ0RhdGVGb3JtYXQ6IHtcbiAgICAgICAgICAgIExUOiAnQSBoOm1tJyxcbiAgICAgICAgICAgIExUUzogJ0EgaDptbTpzcycsXG4gICAgICAgICAgICBMOiAnREQvTU0vWVlZWScsXG4gICAgICAgICAgICBMTDogJ0QgTU1NTSBZWVlZJyxcbiAgICAgICAgICAgIExMTDogJ0QgTU1NTSBZWVlZLCBBIGg6bW0nLFxuICAgICAgICAgICAgTExMTDogJ2RkZGQsIEQgTU1NTSBZWVlZLCBBIGg6bW0nLFxuICAgICAgICB9LFxuICAgICAgICBjYWxlbmRhcjoge1xuICAgICAgICAgICAgc2FtZURheTogJ1vgsKjgsYfgsKHgsYFdIExUJyxcbiAgICAgICAgICAgIG5leHREYXk6ICdb4LCw4LGH4LCq4LGBXSBMVCcsXG4gICAgICAgICAgICBuZXh0V2VlazogJ2RkZGQsIExUJyxcbiAgICAgICAgICAgIGxhc3REYXk6ICdb4LCo4LC/4LCo4LGN4LCoXSBMVCcsXG4gICAgICAgICAgICBsYXN0V2VlazogJ1vgsJfgsKRdIGRkZGQsIExUJyxcbiAgICAgICAgICAgIHNhbWVFbHNlOiAnTCcsXG4gICAgICAgIH0sXG4gICAgICAgIHJlbGF0aXZlVGltZToge1xuICAgICAgICAgICAgZnV0dXJlOiAnJXMg4LCy4LGLJyxcbiAgICAgICAgICAgIHBhc3Q6ICclcyDgsJXgsY3gsLDgsL/gsKTgsIInLFxuICAgICAgICAgICAgczogJ+CwleCxiuCwqOCxjeCwqOCwvyDgsJXgsY3gsLfgsKPgsL7gsLLgsYEnLFxuICAgICAgICAgICAgc3M6ICclZCDgsLjgsYbgsJXgsKjgsY3gsLLgsYEnLFxuICAgICAgICAgICAgbTogJ+CwkuCwlSDgsKjgsL/gsK7gsL/gsLfgsIInLFxuICAgICAgICAgICAgbW06ICclZCDgsKjgsL/gsK7gsL/gsLfgsL7gsLLgsYEnLFxuICAgICAgICAgICAgaDogJ+CwkuCwlSDgsJfgsILgsJ8nLFxuICAgICAgICAgICAgaGg6ICclZCDgsJfgsILgsJ/gsLLgsYEnLFxuICAgICAgICAgICAgZDogJ+CwkuCwlSDgsLDgsYvgsJzgsYEnLFxuICAgICAgICAgICAgZGQ6ICclZCDgsLDgsYvgsJzgsYHgsLLgsYEnLFxuICAgICAgICAgICAgTTogJ+CwkuCwlSDgsKjgsYbgsLInLFxuICAgICAgICAgICAgTU06ICclZCDgsKjgsYbgsLLgsLLgsYEnLFxuICAgICAgICAgICAgeTogJ+CwkuCwlSDgsLjgsILgsLXgsKTgsY3gsLjgsLDgsIInLFxuICAgICAgICAgICAgeXk6ICclZCDgsLjgsILgsLXgsKTgsY3gsLjgsLDgsL7gsLLgsYEnLFxuICAgICAgICB9LFxuICAgICAgICBkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOiAvXFxkezEsMn3gsLUvLFxuICAgICAgICBvcmRpbmFsOiAnJWTgsLUnLFxuICAgICAgICBtZXJpZGllbVBhcnNlOiAv4LCw4LC+4LCk4LGN4LCw4LC/fOCwieCwpuCwr+CwgnzgsK7gsKfgsY3gsK/gsL7gsLngsY3gsKjgsIJ84LC44LC+4LCv4LCC4LCk4LGN4LCw4LCCLyxcbiAgICAgICAgbWVyaWRpZW1Ib3VyOiBmdW5jdGlvbiAoaG91ciwgbWVyaWRpZW0pIHtcbiAgICAgICAgICAgIGlmIChob3VyID09PSAxMikge1xuICAgICAgICAgICAgICAgIGhvdXIgPSAwO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKG1lcmlkaWVtID09PSAn4LCw4LC+4LCk4LGN4LCw4LC/Jykge1xuICAgICAgICAgICAgICAgIHJldHVybiBob3VyIDwgNCA/IGhvdXIgOiBob3VyICsgMTI7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKG1lcmlkaWVtID09PSAn4LCJ4LCm4LCv4LCCJykge1xuICAgICAgICAgICAgICAgIHJldHVybiBob3VyO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChtZXJpZGllbSA9PT0gJ+CwruCwp+CxjeCwr+CwvuCwueCxjeCwqOCwgicpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gaG91ciA+PSAxMCA/IGhvdXIgOiBob3VyICsgMTI7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKG1lcmlkaWVtID09PSAn4LC44LC+4LCv4LCC4LCk4LGN4LCw4LCCJykge1xuICAgICAgICAgICAgICAgIHJldHVybiBob3VyICsgMTI7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIG1lcmlkaWVtOiBmdW5jdGlvbiAoaG91ciwgbWludXRlLCBpc0xvd2VyKSB7XG4gICAgICAgICAgICBpZiAoaG91ciA8IDQpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gJ+CwsOCwvuCwpOCxjeCwsOCwvyc7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGhvdXIgPCAxMCkge1xuICAgICAgICAgICAgICAgIHJldHVybiAn4LCJ4LCm4LCv4LCCJztcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoaG91ciA8IDE3KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuICfgsK7gsKfgsY3gsK/gsL7gsLngsY3gsKjgsIInO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChob3VyIDwgMjApIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gJ+CwuOCwvuCwr+CwguCwpOCxjeCwsOCwgic7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHJldHVybiAn4LCw4LC+4LCk4LGN4LCw4LC/JztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgd2Vlazoge1xuICAgICAgICAgICAgZG93OiAwLCAvLyBTdW5kYXkgaXMgdGhlIGZpcnN0IGRheSBvZiB0aGUgd2Vlay5cbiAgICAgICAgICAgIGRveTogNiwgLy8gVGhlIHdlZWsgdGhhdCBjb250YWlucyBKYW4gNnRoIGlzIHRoZSBmaXJzdCB3ZWVrIG9mIHRoZSB5ZWFyLlxuICAgICAgICB9LFxuICAgIH0pO1xuXG4gICAgcmV0dXJuIHRlO1xuXG59KSkpO1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///11885\n")},13184:(__unused_webpack_module,__webpack_exports__,__webpack_require__)=>{"use strict";eval('// ESM COMPAT FLAG\n__webpack_require__.r(__webpack_exports__);\n\n// EXPORTS\n__webpack_require__.d(__webpack_exports__, {\n ServerStyleSheet: () => (/* binding */ vt),\n StyleSheetConsumer: () => (/* binding */ Be),\n StyleSheetContext: () => (/* binding */ $e),\n StyleSheetManager: () => (/* binding */ Ye),\n ThemeConsumer: () => (/* binding */ tt),\n ThemeContext: () => (/* binding */ et),\n ThemeProvider: () => (/* binding */ ot),\n __PRIVATE__: () => (/* binding */ gt),\n createGlobalStyle: () => (/* binding */ ft),\n css: () => (/* binding */ lt),\n "default": () => (/* binding */ dt),\n isStyledComponent: () => (/* binding */ se),\n keyframes: () => (/* binding */ mt),\n styled: () => (/* binding */ dt),\n useTheme: () => (/* binding */ nt),\n version: () => (/* binding */ v),\n withTheme: () => (/* binding */ yt)\n});\n\n;// ./node_modules/@intertrust/condensed-uikit/node_modules/tslib/tslib.es6.mjs\n/******************************************************************************\nCopyright (c) Microsoft Corporation.\n\nPermission to use, copy, modify, and/or distribute this software for any\npurpose with or without fee is hereby granted.\n\nTHE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\nREGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\nAND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\nINDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\nLOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\nOTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\nPERFORMANCE OF THIS SOFTWARE.\n***************************************************************************** */\n/* global Reflect, Promise, SuppressedError, Symbol */\n\nvar extendStatics = function(d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n};\n\nfunction __extends(d, b) {\n if (typeof b !== "function" && b !== null)\n throw new TypeError("Class extends value " + String(b) + " is not a constructor or null");\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n}\n\nvar __assign = function() {\n __assign = Object.assign || function __assign(t) {\n for (var s, i = 1, n = arguments.length; i < n; i++) {\n s = arguments[i];\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\n }\n return t;\n }\n return __assign.apply(this, arguments);\n}\n\nfunction __rest(s, e) {\n var t = {};\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\n t[p] = s[p];\n if (s != null && typeof Object.getOwnPropertySymbols === "function")\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\n t[p[i]] = s[p[i]];\n }\n return t;\n}\n\nfunction __decorate(decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n}\n\nfunction __param(paramIndex, decorator) {\n return function (target, key) { decorator(target, key, paramIndex); }\n}\n\nfunction __esDecorate(ctor, descriptorIn, decorators, contextIn, initializers, extraInitializers) {\n function accept(f) { if (f !== void 0 && typeof f !== "function") throw new TypeError("Function expected"); return f; }\n var kind = contextIn.kind, key = kind === "getter" ? "get" : kind === "setter" ? "set" : "value";\n var target = !descriptorIn && ctor ? contextIn["static"] ? ctor : ctor.prototype : null;\n var descriptor = descriptorIn || (target ? Object.getOwnPropertyDescriptor(target, contextIn.name) : {});\n var _, done = false;\n for (var i = decorators.length - 1; i >= 0; i--) {\n var context = {};\n for (var p in contextIn) context[p] = p === "access" ? {} : contextIn[p];\n for (var p in contextIn.access) context.access[p] = contextIn.access[p];\n context.addInitializer = function (f) { if (done) throw new TypeError("Cannot add initializers after decoration has completed"); extraInitializers.push(accept(f || null)); };\n var result = (0, decorators[i])(kind === "accessor" ? { get: descriptor.get, set: descriptor.set } : descriptor[key], context);\n if (kind === "accessor") {\n if (result === void 0) continue;\n if (result === null || typeof result !== "object") throw new TypeError("Object expected");\n if (_ = accept(result.get)) descriptor.get = _;\n if (_ = accept(result.set)) descriptor.set = _;\n if (_ = accept(result.init)) initializers.unshift(_);\n }\n else if (_ = accept(result)) {\n if (kind === "field") initializers.unshift(_);\n else descriptor[key] = _;\n }\n }\n if (target) Object.defineProperty(target, contextIn.name, descriptor);\n done = true;\n};\n\nfunction __runInitializers(thisArg, initializers, value) {\n var useValue = arguments.length > 2;\n for (var i = 0; i < initializers.length; i++) {\n value = useValue ? initializers[i].call(thisArg, value) : initializers[i].call(thisArg);\n }\n return useValue ? value : void 0;\n};\n\nfunction __propKey(x) {\n return typeof x === "symbol" ? x : "".concat(x);\n};\n\nfunction __setFunctionName(f, name, prefix) {\n if (typeof name === "symbol") name = name.description ? "[".concat(name.description, "]") : "";\n return Object.defineProperty(f, "name", { configurable: true, value: prefix ? "".concat(prefix, " ", name) : name });\n};\n\nfunction __metadata(metadataKey, metadataValue) {\n if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(metadataKey, metadataValue);\n}\n\nfunction __awaiter(thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n}\n\nfunction __generator(thisArg, body) {\n var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;\n return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;\n function verb(n) { return function (v) { return step([n, v]); }; }\n function step(op) {\n if (f) throw new TypeError("Generator is already executing.");\n while (g && (g = 0, op[0] && (_ = 0)), _) try {\n if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\n if (y = 0, t) op = [op[0] & 2, t.value];\n switch (op[0]) {\n case 0: case 1: t = op; break;\n case 4: _.label++; return { value: op[1], done: false };\n case 5: _.label++; y = op[1]; op = [0]; continue;\n case 7: op = _.ops.pop(); _.trys.pop(); continue;\n default:\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\n if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\n if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\n if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\n if (t[2]) _.ops.pop();\n _.trys.pop(); continue;\n }\n op = body.call(thisArg, _);\n } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\n if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\n }\n}\n\nvar __createBinding = Object.create ? (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n var desc = Object.getOwnPropertyDescriptor(m, k);\n if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {\n desc = { enumerable: true, get: function() { return m[k]; } };\n }\n Object.defineProperty(o, k2, desc);\n}) : (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n o[k2] = m[k];\n});\n\nfunction __exportStar(m, o) {\n for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(o, p)) __createBinding(o, m, p);\n}\n\nfunction __values(o) {\n var s = typeof Symbol === "function" && Symbol.iterator, m = s && o[s], i = 0;\n if (m) return m.call(o);\n if (o && typeof o.length === "number") return {\n next: function () {\n if (o && i >= o.length) o = void 0;\n return { value: o && o[i++], done: !o };\n }\n };\n throw new TypeError(s ? "Object is not iterable." : "Symbol.iterator is not defined.");\n}\n\nfunction __read(o, n) {\n var m = typeof Symbol === "function" && o[Symbol.iterator];\n if (!m) return o;\n var i = m.call(o), r, ar = [], e;\n try {\n while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\n }\n catch (error) { e = { error: error }; }\n finally {\n try {\n if (r && !r.done && (m = i["return"])) m.call(i);\n }\n finally { if (e) throw e.error; }\n }\n return ar;\n}\n\n/** @deprecated */\nfunction __spread() {\n for (var ar = [], i = 0; i < arguments.length; i++)\n ar = ar.concat(__read(arguments[i]));\n return ar;\n}\n\n/** @deprecated */\nfunction __spreadArrays() {\n for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;\n for (var r = Array(s), k = 0, i = 0; i < il; i++)\n for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)\n r[k] = a[j];\n return r;\n}\n\nfunction __spreadArray(to, from, pack) {\n if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {\n if (ar || !(i in from)) {\n if (!ar) ar = Array.prototype.slice.call(from, 0, i);\n ar[i] = from[i];\n }\n }\n return to.concat(ar || Array.prototype.slice.call(from));\n}\n\nfunction __await(v) {\n return this instanceof __await ? (this.v = v, this) : new __await(v);\n}\n\nfunction __asyncGenerator(thisArg, _arguments, generator) {\n if (!Symbol.asyncIterator) throw new TypeError("Symbol.asyncIterator is not defined.");\n var g = generator.apply(thisArg, _arguments || []), i, q = [];\n return i = {}, verb("next"), verb("throw"), verb("return"), i[Symbol.asyncIterator] = function () { return this; }, i;\n function verb(n) { if (g[n]) i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; }\n function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } }\n function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); }\n function fulfill(value) { resume("next", value); }\n function reject(value) { resume("throw", value); }\n function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); }\n}\n\nfunction __asyncDelegator(o) {\n var i, p;\n return i = {}, verb("next"), verb("throw", function (e) { throw e; }), verb("return"), i[Symbol.iterator] = function () { return this; }, i;\n function verb(n, f) { i[n] = o[n] ? function (v) { return (p = !p) ? { value: __await(o[n](v)), done: false } : f ? f(v) : v; } : f; }\n}\n\nfunction __asyncValues(o) {\n if (!Symbol.asyncIterator) throw new TypeError("Symbol.asyncIterator is not defined.");\n var m = o[Symbol.asyncIterator], i;\n return m ? m.call(o) : (o = typeof __values === "function" ? __values(o) : o[Symbol.iterator](), i = {}, verb("next"), verb("throw"), verb("return"), i[Symbol.asyncIterator] = function () { return this; }, i);\n function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; }\n function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); }\n}\n\nfunction __makeTemplateObject(cooked, raw) {\n if (Object.defineProperty) { Object.defineProperty(cooked, "raw", { value: raw }); } else { cooked.raw = raw; }\n return cooked;\n};\n\nvar __setModuleDefault = Object.create ? (function(o, v) {\n Object.defineProperty(o, "default", { enumerable: true, value: v });\n}) : function(o, v) {\n o["default"] = v;\n};\n\nfunction __importStar(mod) {\n if (mod && mod.__esModule) return mod;\n var result = {};\n if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);\n __setModuleDefault(result, mod);\n return result;\n}\n\nfunction __importDefault(mod) {\n return (mod && mod.__esModule) ? mod : { default: mod };\n}\n\nfunction __classPrivateFieldGet(receiver, state, kind, f) {\n if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a getter");\n if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot read private member from an object whose class did not declare it");\n return kind === "m" ? f : kind === "a" ? f.call(receiver) : f ? f.value : state.get(receiver);\n}\n\nfunction __classPrivateFieldSet(receiver, state, value, kind, f) {\n if (kind === "m") throw new TypeError("Private method is not writable");\n if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a setter");\n if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot write private member to an object whose class did not declare it");\n return (kind === "a" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;\n}\n\nfunction __classPrivateFieldIn(state, receiver) {\n if (receiver === null || (typeof receiver !== "object" && typeof receiver !== "function")) throw new TypeError("Cannot use \'in\' operator on non-object");\n return typeof state === "function" ? receiver === state : state.has(receiver);\n}\n\nfunction __addDisposableResource(env, value, async) {\n if (value !== null && value !== void 0) {\n if (typeof value !== "object" && typeof value !== "function") throw new TypeError("Object expected.");\n var dispose;\n if (async) {\n if (!Symbol.asyncDispose) throw new TypeError("Symbol.asyncDispose is not defined.");\n dispose = value[Symbol.asyncDispose];\n }\n if (dispose === void 0) {\n if (!Symbol.dispose) throw new TypeError("Symbol.dispose is not defined.");\n dispose = value[Symbol.dispose];\n }\n if (typeof dispose !== "function") throw new TypeError("Object not disposable.");\n env.stack.push({ value: value, dispose: dispose, async: async });\n }\n else if (async) {\n env.stack.push({ async: true });\n }\n return value;\n}\n\nvar _SuppressedError = typeof SuppressedError === "function" ? SuppressedError : function (error, suppressed, message) {\n var e = new Error(message);\n return e.name = "SuppressedError", e.error = error, e.suppressed = suppressed, e;\n};\n\nfunction __disposeResources(env) {\n function fail(e) {\n env.error = env.hasError ? new _SuppressedError(e, env.error, "An error was suppressed during disposal.") : e;\n env.hasError = true;\n }\n function next() {\n while (env.stack.length) {\n var rec = env.stack.pop();\n try {\n var result = rec.dispose && rec.dispose.call(rec.value);\n if (rec.async) return Promise.resolve(result).then(next, function(e) { fail(e); return next(); });\n }\n catch (e) {\n fail(e);\n }\n }\n if (env.hasError) throw env.error;\n }\n return next();\n}\n\n/* harmony default export */ const tslib_es6 = ({\n __extends,\n __assign,\n __rest,\n __decorate,\n __param,\n __metadata,\n __awaiter,\n __generator,\n __createBinding,\n __exportStar,\n __values,\n __read,\n __spread,\n __spreadArrays,\n __spreadArray,\n __await,\n __asyncGenerator,\n __asyncDelegator,\n __asyncValues,\n __makeTemplateObject,\n __importStar,\n __importDefault,\n __classPrivateFieldGet,\n __classPrivateFieldSet,\n __classPrivateFieldIn,\n __addDisposableResource,\n __disposeResources,\n});\n\n// EXTERNAL MODULE: consume shared module (default) react@^17.0.2 (singleton) (fallback: ./node_modules/react/index.js) (eager)\nvar index_js_eager_ = __webpack_require__(24002);\nvar index_js_eager_default = /*#__PURE__*/__webpack_require__.n(index_js_eager_);\n// EXTERNAL MODULE: ./node_modules/shallowequal/index.js\nvar shallowequal = __webpack_require__(2833);\nvar shallowequal_default = /*#__PURE__*/__webpack_require__.n(shallowequal);\n;// ./node_modules/stylis/src/Enum.js\nvar MS = \'-ms-\'\nvar MOZ = \'-moz-\'\nvar WEBKIT = \'-webkit-\'\n\nvar COMMENT = \'comm\'\nvar Enum_RULESET = \'rule\'\nvar DECLARATION = \'decl\'\n\nvar PAGE = \'@page\'\nvar MEDIA = \'@media\'\nvar IMPORT = \'@import\'\nvar CHARSET = \'@charset\'\nvar VIEWPORT = \'@viewport\'\nvar SUPPORTS = \'@supports\'\nvar DOCUMENT = \'@document\'\nvar NAMESPACE = \'@namespace\'\nvar KEYFRAMES = \'@keyframes\'\nvar FONT_FACE = \'@font-face\'\nvar COUNTER_STYLE = \'@counter-style\'\nvar FONT_FEATURE_VALUES = \'@font-feature-values\'\nvar LAYER = \'@layer\'\nvar SCOPE = \'@scope\'\n\n;// ./node_modules/stylis/src/Utility.js\n/**\n * @param {number}\n * @return {number}\n */\nvar abs = Math.abs\n\n/**\n * @param {number}\n * @return {string}\n */\nvar Utility_from = String.fromCharCode\n\n/**\n * @param {object}\n * @return {object}\n */\nvar Utility_assign = Object.assign\n\n/**\n * @param {string} value\n * @param {number} length\n * @return {number}\n */\nfunction hash (value, length) {\n\treturn Utility_charat(value, 0) ^ 45 ? (((((((length << 2) ^ Utility_charat(value, 0)) << 2) ^ Utility_charat(value, 1)) << 2) ^ Utility_charat(value, 2)) << 2) ^ Utility_charat(value, 3) : 0\n}\n\n/**\n * @param {string} value\n * @return {string}\n */\nfunction trim (value) {\n\treturn value.trim()\n}\n\n/**\n * @param {string} value\n * @param {RegExp} pattern\n * @return {string?}\n */\nfunction match (value, pattern) {\n\treturn (value = pattern.exec(value)) ? value[0] : value\n}\n\n/**\n * @param {string} value\n * @param {(string|RegExp)} pattern\n * @param {string} replacement\n * @return {string}\n */\nfunction replace (value, pattern, replacement) {\n\treturn value.replace(pattern, replacement)\n}\n\n/**\n * @param {string} value\n * @param {string} search\n * @param {number} position\n * @return {number}\n */\nfunction indexof (value, search, position) {\n\treturn value.indexOf(search, position)\n}\n\n/**\n * @param {string} value\n * @param {number} index\n * @return {number}\n */\nfunction Utility_charat (value, index) {\n\treturn value.charCodeAt(index) | 0\n}\n\n/**\n * @param {string} value\n * @param {number} begin\n * @param {number} end\n * @return {string}\n */\nfunction Utility_substr (value, begin, end) {\n\treturn value.slice(begin, end)\n}\n\n/**\n * @param {string} value\n * @return {number}\n */\nfunction Utility_strlen (value) {\n\treturn value.length\n}\n\n/**\n * @param {any[]} value\n * @return {number}\n */\nfunction Utility_sizeof (value) {\n\treturn value.length\n}\n\n/**\n * @param {any} value\n * @param {any[]} array\n * @return {any}\n */\nfunction Utility_append (value, array) {\n\treturn array.push(value), value\n}\n\n/**\n * @param {string[]} array\n * @param {function} callback\n * @return {string}\n */\nfunction Utility_combine (array, callback) {\n\treturn array.map(callback).join(\'\')\n}\n\n/**\n * @param {string[]} array\n * @param {RegExp} pattern\n * @return {string[]}\n */\nfunction filter (array, pattern) {\n\treturn array.filter(function (value) { return !match(value, pattern) })\n}\n\n;// ./node_modules/stylis/src/Tokenizer.js\n\n\nvar line = 1\nvar column = 1\nvar Tokenizer_length = 0\nvar position = 0\nvar character = 0\nvar characters = \'\'\n\n/**\n * @param {string} value\n * @param {object | null} root\n * @param {object | null} parent\n * @param {string} type\n * @param {string[] | string} props\n * @param {object[] | string} children\n * @param {object[]} siblings\n * @param {number} length\n */\nfunction node (value, root, parent, type, props, children, length, siblings) {\n\treturn {value: value, root: root, parent: parent, type: type, props: props, children: children, line: line, column: column, length: length, return: \'\', siblings: siblings}\n}\n\n/**\n * @param {object} root\n * @param {object} props\n * @return {object}\n */\nfunction copy (root, props) {\n\treturn Utility_assign(node(\'\', null, null, \'\', null, null, 0, root.siblings), root, {length: -root.length}, props)\n}\n\n/**\n * @param {object} root\n */\nfunction lift (root) {\n\twhile (root.root)\n\t\troot = copy(root.root, {children: [root]})\n\n\tUtility_append(root, root.siblings)\n}\n\n/**\n * @return {number}\n */\nfunction Tokenizer_char () {\n\treturn character\n}\n\n/**\n * @return {number}\n */\nfunction prev () {\n\tcharacter = position > 0 ? Utility_charat(characters, --position) : 0\n\n\tif (column--, character === 10)\n\t\tcolumn = 1, line--\n\n\treturn character\n}\n\n/**\n * @return {number}\n */\nfunction next () {\n\tcharacter = position < Tokenizer_length ? Utility_charat(characters, position++) : 0\n\n\tif (column++, character === 10)\n\t\tcolumn = 1, line++\n\n\treturn character\n}\n\n/**\n * @return {number}\n */\nfunction peek () {\n\treturn Utility_charat(characters, position)\n}\n\n/**\n * @return {number}\n */\nfunction caret () {\n\treturn position\n}\n\n/**\n * @param {number} begin\n * @param {number} end\n * @return {string}\n */\nfunction slice (begin, end) {\n\treturn Utility_substr(characters, begin, end)\n}\n\n/**\n * @param {number} type\n * @return {number}\n */\nfunction token (type) {\n\tswitch (type) {\n\t\t// \\0 \\t \\n \\r \\s whitespace token\n\t\tcase 0: case 9: case 10: case 13: case 32:\n\t\t\treturn 5\n\t\t// ! + , / > @ ~ isolate token\n\t\tcase 33: case 43: case 44: case 47: case 62: case 64: case 126:\n\t\t// ; { } breakpoint token\n\t\tcase 59: case 123: case 125:\n\t\t\treturn 4\n\t\t// : accompanied token\n\t\tcase 58:\n\t\t\treturn 3\n\t\t// " \' ( [ opening delimit token\n\t\tcase 34: case 39: case 40: case 91:\n\t\t\treturn 2\n\t\t// ) ] closing delimit token\n\t\tcase 41: case 93:\n\t\t\treturn 1\n\t}\n\n\treturn 0\n}\n\n/**\n * @param {string} value\n * @return {any[]}\n */\nfunction alloc (value) {\n\treturn line = column = 1, Tokenizer_length = Utility_strlen(characters = value), position = 0, []\n}\n\n/**\n * @param {any} value\n * @return {any}\n */\nfunction dealloc (value) {\n\treturn characters = \'\', value\n}\n\n/**\n * @param {number} type\n * @return {string}\n */\nfunction delimit (type) {\n\treturn trim(slice(position - 1, delimiter(type === 91 ? type + 2 : type === 40 ? type + 1 : type)))\n}\n\n/**\n * @param {string} value\n * @return {string[]}\n */\nfunction Tokenizer_tokenize (value) {\n\treturn dealloc(tokenizer(alloc(value)))\n}\n\n/**\n * @param {number} type\n * @return {string}\n */\nfunction whitespace (type) {\n\twhile (character = peek())\n\t\tif (character < 33)\n\t\t\tnext()\n\t\telse\n\t\t\tbreak\n\n\treturn token(type) > 2 || token(character) > 3 ? \'\' : \' \'\n}\n\n/**\n * @param {string[]} children\n * @return {string[]}\n */\nfunction tokenizer (children) {\n\twhile (next())\n\t\tswitch (token(character)) {\n\t\t\tcase 0: append(identifier(position - 1), children)\n\t\t\t\tbreak\n\t\t\tcase 2: append(delimit(character), children)\n\t\t\t\tbreak\n\t\t\tdefault: append(from(character), children)\n\t\t}\n\n\treturn children\n}\n\n/**\n * @param {number} index\n * @param {number} count\n * @return {string}\n */\nfunction escaping (index, count) {\n\twhile (--count && next())\n\t\t// not 0-9 A-F a-f\n\t\tif (character < 48 || character > 102 || (character > 57 && character < 65) || (character > 70 && character < 97))\n\t\t\tbreak\n\n\treturn slice(index, caret() + (count < 6 && peek() == 32 && next() == 32))\n}\n\n/**\n * @param {number} type\n * @return {number}\n */\nfunction delimiter (type) {\n\twhile (next())\n\t\tswitch (character) {\n\t\t\t// ] ) " \'\n\t\t\tcase type:\n\t\t\t\treturn position\n\t\t\t// " \'\n\t\t\tcase 34: case 39:\n\t\t\t\tif (type !== 34 && type !== 39)\n\t\t\t\t\tdelimiter(character)\n\t\t\t\tbreak\n\t\t\t// (\n\t\t\tcase 40:\n\t\t\t\tif (type === 41)\n\t\t\t\t\tdelimiter(type)\n\t\t\t\tbreak\n\t\t\t// \\\n\t\t\tcase 92:\n\t\t\t\tnext()\n\t\t\t\tbreak\n\t\t}\n\n\treturn position\n}\n\n/**\n * @param {number} type\n * @param {number} index\n * @return {number}\n */\nfunction commenter (type, index) {\n\twhile (next())\n\t\t// //\n\t\tif (type + character === 47 + 10)\n\t\t\tbreak\n\t\t// /*\n\t\telse if (type + character === 42 + 42 && peek() === 47)\n\t\t\tbreak\n\n\treturn \'/*\' + slice(index, position - 1) + \'*\' + Utility_from(type === 47 ? type : next())\n}\n\n/**\n * @param {number} index\n * @return {string}\n */\nfunction identifier (index) {\n\twhile (!token(peek()))\n\t\tnext()\n\n\treturn slice(index, position)\n}\n\n;// ./node_modules/stylis/src/Serializer.js\n\n\n\n/**\n * @param {object[]} children\n * @param {function} callback\n * @return {string}\n */\nfunction serialize (children, callback) {\n\tvar output = \'\'\n\n\tfor (var i = 0; i < children.length; i++)\n\t\toutput += callback(children[i], i, children, callback) || \'\'\n\n\treturn output\n}\n\n/**\n * @param {object} element\n * @param {number} index\n * @param {object[]} children\n * @param {function} callback\n * @return {string}\n */\nfunction stringify (element, index, children, callback) {\n\tswitch (element.type) {\n\t\tcase LAYER: if (element.children.length) break\n\t\tcase IMPORT: case DECLARATION: return element.return = element.return || element.value\n\t\tcase COMMENT: return \'\'\n\t\tcase KEYFRAMES: return element.return = element.value + \'{\' + serialize(element.children, callback) + \'}\'\n\t\tcase Enum_RULESET: if (!Utility_strlen(element.value = element.props.join(\',\'))) return \'\'\n\t}\n\n\treturn Utility_strlen(children = serialize(element.children, callback)) ? element.return = element.value + \'{\' + children + \'}\' : \'\'\n}\n\n;// ./node_modules/stylis/src/Prefixer.js\n\n\n\n/**\n * @param {string} value\n * @param {number} length\n * @param {object[]} children\n * @return {string}\n */\nfunction prefix (value, length, children) {\n\tswitch (hash(value, length)) {\n\t\t// color-adjust\n\t\tcase 5103:\n\t\t\treturn WEBKIT + \'print-\' + value + value\n\t\t// animation, animation-(delay|direction|duration|fill-mode|iteration-count|name|play-state|timing-function)\n\t\tcase 5737: case 4201: case 3177: case 3433: case 1641: case 4457: case 2921:\n\t\t// text-decoration, filter, clip-path, backface-visibility, column, box-decoration-break\n\t\tcase 5572: case 6356: case 5844: case 3191: case 6645: case 3005:\n\t\t// mask, mask-image, mask-(mode|clip|size), mask-(repeat|origin), mask-position, mask-composite,\n\t\tcase 6391: case 5879: case 5623: case 6135: case 4599: case 4855:\n\t\t// background-clip, columns, column-(count|fill|gap|rule|rule-color|rule-style|rule-width|span|width)\n\t\tcase 4215: case 6389: case 5109: case 5365: case 5621: case 3829:\n\t\t\treturn WEBKIT + value + value\n\t\t// tab-size\n\t\tcase 4789:\n\t\t\treturn MOZ + value + value\n\t\t// appearance, user-select, transform, hyphens, text-size-adjust\n\t\tcase 5349: case 4246: case 4810: case 6968: case 2756:\n\t\t\treturn WEBKIT + value + MOZ + value + MS + value + value\n\t\t// writing-mode\n\t\tcase 5936:\n\t\t\tswitch (Utility_charat(value, length + 11)) {\n\t\t\t\t// vertical-l(r)\n\t\t\t\tcase 114:\n\t\t\t\t\treturn WEBKIT + value + MS + replace(value, /[svh]\\w+-[tblr]{2}/, \'tb\') + value\n\t\t\t\t// vertical-r(l)\n\t\t\t\tcase 108:\n\t\t\t\t\treturn WEBKIT + value + MS + replace(value, /[svh]\\w+-[tblr]{2}/, \'tb-rl\') + value\n\t\t\t\t// horizontal(-)tb\n\t\t\t\tcase 45:\n\t\t\t\t\treturn WEBKIT + value + MS + replace(value, /[svh]\\w+-[tblr]{2}/, \'lr\') + value\n\t\t\t\t// default: fallthrough to below\n\t\t\t}\n\t\t// flex, flex-direction, scroll-snap-type, writing-mode\n\t\tcase 6828: case 4268: case 2903:\n\t\t\treturn WEBKIT + value + MS + value + value\n\t\t// order\n\t\tcase 6165:\n\t\t\treturn WEBKIT + value + MS + \'flex-\' + value + value\n\t\t// align-items\n\t\tcase 5187:\n\t\t\treturn WEBKIT + value + replace(value, /(\\w+).+(:[^]+)/, WEBKIT + \'box-$1$2\' + MS + \'flex-$1$2\') + value\n\t\t// align-self\n\t\tcase 5443:\n\t\t\treturn WEBKIT + value + MS + \'flex-item-\' + replace(value, /flex-|-self/g, \'\') + (!match(value, /flex-|baseline/) ? MS + \'grid-row-\' + replace(value, /flex-|-self/g, \'\') : \'\') + value\n\t\t// align-content\n\t\tcase 4675:\n\t\t\treturn WEBKIT + value + MS + \'flex-line-pack\' + replace(value, /align-content|flex-|-self/g, \'\') + value\n\t\t// flex-shrink\n\t\tcase 5548:\n\t\t\treturn WEBKIT + value + MS + replace(value, \'shrink\', \'negative\') + value\n\t\t// flex-basis\n\t\tcase 5292:\n\t\t\treturn WEBKIT + value + MS + replace(value, \'basis\', \'preferred-size\') + value\n\t\t// flex-grow\n\t\tcase 6060:\n\t\t\treturn WEBKIT + \'box-\' + replace(value, \'-grow\', \'\') + WEBKIT + value + MS + replace(value, \'grow\', \'positive\') + value\n\t\t// transition\n\t\tcase 4554:\n\t\t\treturn WEBKIT + replace(value, /([^-])(transform)/g, \'$1\' + WEBKIT + \'$2\') + value\n\t\t// cursor\n\t\tcase 6187:\n\t\t\treturn replace(replace(replace(value, /(zoom-|grab)/, WEBKIT + \'$1\'), /(image-set)/, WEBKIT + \'$1\'), value, \'\') + value\n\t\t// background, background-image\n\t\tcase 5495: case 3959:\n\t\t\treturn replace(value, /(image-set\\([^]*)/, WEBKIT + \'$1\' + \'$`$1\')\n\t\t// justify-content\n\t\tcase 4968:\n\t\t\treturn replace(replace(value, /(.+:)(flex-)?(.*)/, WEBKIT + \'box-pack:$3\' + MS + \'flex-pack:$3\'), /s.+-b[^;]+/, \'justify\') + WEBKIT + value + value\n\t\t// justify-self\n\t\tcase 4200:\n\t\t\tif (!match(value, /flex-|baseline/)) return MS + \'grid-column-align\' + Utility_substr(value, length) + value\n\t\t\tbreak\n\t\t// grid-template-(columns|rows)\n\t\tcase 2592: case 3360:\n\t\t\treturn MS + replace(value, \'template-\', \'\') + value\n\t\t// grid-(row|column)-start\n\t\tcase 4384: case 3616:\n\t\t\tif (children && children.some(function (element, index) { return length = index, match(element.props, /grid-\\w+-end/) })) {\n\t\t\t\treturn ~indexof(value + (children = children[length].value), \'span\', 0) ? value : (MS + replace(value, \'-start\', \'\') + value + MS + \'grid-row-span:\' + (~indexof(children, \'span\', 0) ? match(children, /\\d+/) : +match(children, /\\d+/) - +match(value, /\\d+/)) + \';\')\n\t\t\t}\n\t\t\treturn MS + replace(value, \'-start\', \'\') + value\n\t\t// grid-(row|column)-end\n\t\tcase 4896: case 4128:\n\t\t\treturn (children && children.some(function (element) { return match(element.props, /grid-\\w+-start/) })) ? value : MS + replace(replace(value, \'-end\', \'-span\'), \'span \', \'\') + value\n\t\t// (margin|padding)-inline-(start|end)\n\t\tcase 4095: case 3583: case 4068: case 2532:\n\t\t\treturn replace(value, /(.+)-inline(.+)/, WEBKIT + \'$1$2\') + value\n\t\t// (min|max)?(width|height|inline-size|block-size)\n\t\tcase 8116: case 7059: case 5753: case 5535:\n\t\tcase 5445: case 5701: case 4933: case 4677:\n\t\tcase 5533: case 5789: case 5021: case 4765:\n\t\t\t// stretch, max-content, min-content, fill-available\n\t\t\tif (Utility_strlen(value) - 1 - length > 6)\n\t\t\t\tswitch (Utility_charat(value, length + 1)) {\n\t\t\t\t\t// (m)ax-content, (m)in-content\n\t\t\t\t\tcase 109:\n\t\t\t\t\t\t// -\n\t\t\t\t\t\tif (Utility_charat(value, length + 4) !== 45)\n\t\t\t\t\t\t\tbreak\n\t\t\t\t\t// (f)ill-available, (f)it-content\n\t\t\t\t\tcase 102:\n\t\t\t\t\t\treturn replace(value, /(.+:)(.+)-([^]+)/, \'$1\' + WEBKIT + \'$2-$3\' + \'$1\' + MOZ + (Utility_charat(value, length + 3) == 108 ? \'$3\' : \'$2-$3\')) + value\n\t\t\t\t\t// (s)tretch\n\t\t\t\t\tcase 115:\n\t\t\t\t\t\treturn ~indexof(value, \'stretch\', 0) ? prefix(replace(value, \'stretch\', \'fill-available\'), length, children) + value : value\n\t\t\t\t}\n\t\t\tbreak\n\t\t// grid-(column|row)\n\t\tcase 5152: case 5920:\n\t\t\treturn replace(value, /(.+?):(\\d+)(\\s*\\/\\s*(span)?\\s*(\\d+))?(.*)/, function (_, a, b, c, d, e, f) { return (MS + a + \':\' + b + f) + (c ? (MS + a + \'-span:\' + (d ? e : +e - +b)) + f : \'\') + value })\n\t\t// position: sticky\n\t\tcase 4949:\n\t\t\t// stick(y)?\n\t\t\tif (Utility_charat(value, length + 6) === 121)\n\t\t\t\treturn replace(value, \':\', \':\' + WEBKIT) + value\n\t\t\tbreak\n\t\t// display: (flex|inline-flex|grid|inline-grid)\n\t\tcase 6444:\n\t\t\tswitch (Utility_charat(value, Utility_charat(value, 14) === 45 ? 18 : 11)) {\n\t\t\t\t// (inline-)?fle(x)\n\t\t\t\tcase 120:\n\t\t\t\t\treturn replace(value, /(.+:)([^;\\s!]+)(;|(\\s+)?!.+)?/, \'$1\' + WEBKIT + (Utility_charat(value, 14) === 45 ? \'inline-\' : \'\') + \'box$3\' + \'$1\' + WEBKIT + \'$2$3\' + \'$1\' + MS + \'$2box$3\') + value\n\t\t\t\t// (inline-)?gri(d)\n\t\t\t\tcase 100:\n\t\t\t\t\treturn replace(value, \':\', \':\' + MS) + value\n\t\t\t}\n\t\t\tbreak\n\t\t// scroll-margin, scroll-margin-(top|right|bottom|left)\n\t\tcase 5719: case 2647: case 2135: case 3927: case 2391:\n\t\t\treturn replace(value, \'scroll-\', \'scroll-snap-\') + value\n\t}\n\n\treturn value\n}\n\n;// ./node_modules/stylis/src/Middleware.js\n\n\n\n\n\n\n/**\n * @param {function[]} collection\n * @return {function}\n */\nfunction middleware (collection) {\n\tvar length = Utility_sizeof(collection)\n\n\treturn function (element, index, children, callback) {\n\t\tvar output = \'\'\n\n\t\tfor (var i = 0; i < length; i++)\n\t\t\toutput += collection[i](element, index, children, callback) || \'\'\n\n\t\treturn output\n\t}\n}\n\n/**\n * @param {function} callback\n * @return {function}\n */\nfunction rulesheet (callback) {\n\treturn function (element) {\n\t\tif (!element.root)\n\t\t\tif (element = element.return)\n\t\t\t\tcallback(element)\n\t}\n}\n\n/**\n * @param {object} element\n * @param {number} index\n * @param {object[]} children\n * @param {function} callback\n */\nfunction prefixer (element, index, children, callback) {\n\tif (element.length > -1)\n\t\tif (!element.return)\n\t\t\tswitch (element.type) {\n\t\t\t\tcase DECLARATION: element.return = prefix(element.value, element.length, children)\n\t\t\t\t\treturn\n\t\t\t\tcase KEYFRAMES:\n\t\t\t\t\treturn serialize([copy(element, {value: replace(element.value, \'@\', \'@\' + WEBKIT)})], callback)\n\t\t\t\tcase Enum_RULESET:\n\t\t\t\t\tif (element.length)\n\t\t\t\t\t\treturn Utility_combine(children = element.props, function (value) {\n\t\t\t\t\t\t\tswitch (match(value, callback = /(::plac\\w+|:read-\\w+)/)) {\n\t\t\t\t\t\t\t\t// :read-(only|write)\n\t\t\t\t\t\t\t\tcase \':read-only\': case \':read-write\':\n\t\t\t\t\t\t\t\t\tlift(copy(element, {props: [replace(value, /:(read-\\w+)/, \':\' + MOZ + \'$1\')]}))\n\t\t\t\t\t\t\t\t\tlift(copy(element, {props: [value]}))\n\t\t\t\t\t\t\t\t\tUtility_assign(element, {props: filter(children, callback)})\n\t\t\t\t\t\t\t\t\tbreak\n\t\t\t\t\t\t\t\t// :placeholder\n\t\t\t\t\t\t\t\tcase \'::placeholder\':\n\t\t\t\t\t\t\t\t\tlift(copy(element, {props: [replace(value, /:(plac\\w+)/, \':\' + WEBKIT + \'input-$1\')]}))\n\t\t\t\t\t\t\t\t\tlift(copy(element, {props: [replace(value, /:(plac\\w+)/, \':\' + MOZ + \'$1\')]}))\n\t\t\t\t\t\t\t\t\tlift(copy(element, {props: [replace(value, /:(plac\\w+)/, MS + \'input-$1\')]}))\n\t\t\t\t\t\t\t\t\tlift(copy(element, {props: [value]}))\n\t\t\t\t\t\t\t\t\tUtility_assign(element, {props: filter(children, callback)})\n\t\t\t\t\t\t\t\t\tbreak\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\treturn \'\'\n\t\t\t\t\t\t})\n\t\t\t}\n}\n\n/**\n * @param {object} element\n * @param {number} index\n * @param {object[]} children\n */\nfunction namespace (element) {\n\tswitch (element.type) {\n\t\tcase RULESET:\n\t\t\telement.props = element.props.map(function (value) {\n\t\t\t\treturn combine(tokenize(value), function (value, index, children) {\n\t\t\t\t\tswitch (charat(value, 0)) {\n\t\t\t\t\t\t// \\f\n\t\t\t\t\t\tcase 12:\n\t\t\t\t\t\t\treturn substr(value, 1, strlen(value))\n\t\t\t\t\t\t// \\0 ( + > ~\n\t\t\t\t\t\tcase 0: case 40: case 43: case 62: case 126:\n\t\t\t\t\t\t\treturn value\n\t\t\t\t\t\t// :\n\t\t\t\t\t\tcase 58:\n\t\t\t\t\t\t\tif (children[++index] === \'global\')\n\t\t\t\t\t\t\t\tchildren[index] = \'\', children[++index] = \'\\f\' + substr(children[index], index = 1, -1)\n\t\t\t\t\t\t// \\s\n\t\t\t\t\t\tcase 32:\n\t\t\t\t\t\t\treturn index === 1 ? \'\' : value\n\t\t\t\t\t\tdefault:\n\t\t\t\t\t\t\tswitch (index) {\n\t\t\t\t\t\t\t\tcase 0: element = value\n\t\t\t\t\t\t\t\t\treturn sizeof(children) > 1 ? \'\' : value\n\t\t\t\t\t\t\t\tcase index = sizeof(children) - 1: case 2:\n\t\t\t\t\t\t\t\t\treturn index === 2 ? value + element + element : value + element\n\t\t\t\t\t\t\t\tdefault:\n\t\t\t\t\t\t\t\t\treturn value\n\t\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t})\n\t\t\t})\n\t}\n}\n\n;// ./node_modules/stylis/src/Parser.js\n\n\n\n\n/**\n * @param {string} value\n * @return {object[]}\n */\nfunction compile (value) {\n\treturn dealloc(parse(\'\', null, null, null, [\'\'], value = alloc(value), 0, [0], value))\n}\n\n/**\n * @param {string} value\n * @param {object} root\n * @param {object?} parent\n * @param {string[]} rule\n * @param {string[]} rules\n * @param {string[]} rulesets\n * @param {number[]} pseudo\n * @param {number[]} points\n * @param {string[]} declarations\n * @return {object}\n */\nfunction parse (value, root, parent, rule, rules, rulesets, pseudo, points, declarations) {\n\tvar index = 0\n\tvar offset = 0\n\tvar length = pseudo\n\tvar atrule = 0\n\tvar property = 0\n\tvar previous = 0\n\tvar variable = 1\n\tvar scanning = 1\n\tvar ampersand = 1\n\tvar character = 0\n\tvar type = \'\'\n\tvar props = rules\n\tvar children = rulesets\n\tvar reference = rule\n\tvar characters = type\n\n\twhile (scanning)\n\t\tswitch (previous = character, character = next()) {\n\t\t\t// (\n\t\t\tcase 40:\n\t\t\t\tif (previous != 108 && Utility_charat(characters, length - 1) == 58) {\n\t\t\t\t\tif (indexof(characters += replace(delimit(character), \'&\', \'&\\f\'), \'&\\f\', abs(index ? points[index - 1] : 0)) != -1)\n\t\t\t\t\t\tampersand = -1\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t// " \' [\n\t\t\tcase 34: case 39: case 91:\n\t\t\t\tcharacters += delimit(character)\n\t\t\t\tbreak\n\t\t\t// \\t \\n \\r \\s\n\t\t\tcase 9: case 10: case 13: case 32:\n\t\t\t\tcharacters += whitespace(previous)\n\t\t\t\tbreak\n\t\t\t// \\\n\t\t\tcase 92:\n\t\t\t\tcharacters += escaping(caret() - 1, 7)\n\t\t\t\tcontinue\n\t\t\t// /\n\t\t\tcase 47:\n\t\t\t\tswitch (peek()) {\n\t\t\t\t\tcase 42: case 47:\n\t\t\t\t\t\tUtility_append(comment(commenter(next(), caret()), root, parent, declarations), declarations)\n\t\t\t\t\t\tbreak\n\t\t\t\t\tdefault:\n\t\t\t\t\t\tcharacters += \'/\'\n\t\t\t\t}\n\t\t\t\tbreak\n\t\t\t// {\n\t\t\tcase 123 * variable:\n\t\t\t\tpoints[index++] = Utility_strlen(characters) * ampersand\n\t\t\t// } ; \\0\n\t\t\tcase 125 * variable: case 59: case 0:\n\t\t\t\tswitch (character) {\n\t\t\t\t\t// \\0 }\n\t\t\t\t\tcase 0: case 125: scanning = 0\n\t\t\t\t\t// ;\n\t\t\t\t\tcase 59 + offset: if (ampersand == -1) characters = replace(characters, /\\f/g, \'\')\n\t\t\t\t\t\tif (property > 0 && (Utility_strlen(characters) - length))\n\t\t\t\t\t\t\tUtility_append(property > 32 ? declaration(characters + \';\', rule, parent, length - 1, declarations) : declaration(replace(characters, \' \', \'\') + \';\', rule, parent, length - 2, declarations), declarations)\n\t\t\t\t\t\tbreak\n\t\t\t\t\t// @ ;\n\t\t\t\t\tcase 59: characters += \';\'\n\t\t\t\t\t// { rule/at-rule\n\t\t\t\t\tdefault:\n\t\t\t\t\t\tUtility_append(reference = ruleset(characters, root, parent, index, offset, rules, points, type, props = [], children = [], length, rulesets), rulesets)\n\n\t\t\t\t\t\tif (character === 123)\n\t\t\t\t\t\t\tif (offset === 0)\n\t\t\t\t\t\t\t\tparse(characters, root, reference, reference, props, rulesets, length, points, children)\n\t\t\t\t\t\t\telse\n\t\t\t\t\t\t\t\tswitch (atrule === 99 && Utility_charat(characters, 3) === 110 ? 100 : atrule) {\n\t\t\t\t\t\t\t\t\t// d l m s\n\t\t\t\t\t\t\t\t\tcase 100: case 108: case 109: case 115:\n\t\t\t\t\t\t\t\t\t\tparse(value, reference, reference, rule && Utility_append(ruleset(value, reference, reference, 0, 0, rules, points, type, rules, props = [], length, children), children), rules, children, length, points, rule ? props : children)\n\t\t\t\t\t\t\t\t\t\tbreak\n\t\t\t\t\t\t\t\t\tdefault:\n\t\t\t\t\t\t\t\t\t\tparse(characters, reference, reference, reference, [\'\'], children, 0, points, children)\n\t\t\t\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tindex = offset = property = 0, variable = ampersand = 1, type = characters = \'\', length = pseudo\n\t\t\t\tbreak\n\t\t\t// :\n\t\t\tcase 58:\n\t\t\t\tlength = 1 + Utility_strlen(characters), property = previous\n\t\t\tdefault:\n\t\t\t\tif (variable < 1)\n\t\t\t\t\tif (character == 123)\n\t\t\t\t\t\t--variable\n\t\t\t\t\telse if (character == 125 && variable++ == 0 && prev() == 125)\n\t\t\t\t\t\tcontinue\n\n\t\t\t\tswitch (characters += Utility_from(character), character * variable) {\n\t\t\t\t\t// &\n\t\t\t\t\tcase 38:\n\t\t\t\t\t\tampersand = offset > 0 ? 1 : (characters += \'\\f\', -1)\n\t\t\t\t\t\tbreak\n\t\t\t\t\t// ,\n\t\t\t\t\tcase 44:\n\t\t\t\t\t\tpoints[index++] = (Utility_strlen(characters) - 1) * ampersand, ampersand = 1\n\t\t\t\t\t\tbreak\n\t\t\t\t\t// @\n\t\t\t\t\tcase 64:\n\t\t\t\t\t\t// -\n\t\t\t\t\t\tif (peek() === 45)\n\t\t\t\t\t\t\tcharacters += delimit(next())\n\n\t\t\t\t\t\tatrule = peek(), offset = length = Utility_strlen(type = characters += identifier(caret())), character++\n\t\t\t\t\t\tbreak\n\t\t\t\t\t// -\n\t\t\t\t\tcase 45:\n\t\t\t\t\t\tif (previous === 45 && Utility_strlen(characters) == 2)\n\t\t\t\t\t\t\tvariable = 0\n\t\t\t\t}\n\t\t}\n\n\treturn rulesets\n}\n\n/**\n * @param {string} value\n * @param {object} root\n * @param {object?} parent\n * @param {number} index\n * @param {number} offset\n * @param {string[]} rules\n * @param {number[]} points\n * @param {string} type\n * @param {string[]} props\n * @param {string[]} children\n * @param {number} length\n * @param {object[]} siblings\n * @return {object}\n */\nfunction ruleset (value, root, parent, index, offset, rules, points, type, props, children, length, siblings) {\n\tvar post = offset - 1\n\tvar rule = offset === 0 ? rules : [\'\']\n\tvar size = Utility_sizeof(rule)\n\n\tfor (var i = 0, j = 0, k = 0; i < index; ++i)\n\t\tfor (var x = 0, y = Utility_substr(value, post + 1, post = abs(j = points[i])), z = value; x < size; ++x)\n\t\t\tif (z = trim(j > 0 ? rule[x] + \' \' + y : replace(y, /&\\f/g, rule[x])))\n\t\t\t\tprops[k++] = z\n\n\treturn node(value, root, parent, offset === 0 ? Enum_RULESET : type, props, children, length, siblings)\n}\n\n/**\n * @param {number} value\n * @param {object} root\n * @param {object?} parent\n * @param {object[]} siblings\n * @return {object}\n */\nfunction comment (value, root, parent, siblings) {\n\treturn node(value, root, parent, COMMENT, Utility_from(Tokenizer_char()), Utility_substr(value, 2, -2), 0, siblings)\n}\n\n/**\n * @param {string} value\n * @param {object} root\n * @param {object?} parent\n * @param {number} length\n * @param {object[]} siblings\n * @return {object}\n */\nfunction declaration (value, root, parent, length, siblings) {\n\treturn node(value, root, parent, DECLARATION, Utility_substr(value, 0, length), Utility_substr(value, length + 1, -1), length, siblings)\n}\n\n;// ./node_modules/@intertrust/condensed-uikit/node_modules/@emotion/unitless/dist/emotion-unitless.esm.js\nvar unitlessKeys = {\n animationIterationCount: 1,\n aspectRatio: 1,\n borderImageOutset: 1,\n borderImageSlice: 1,\n borderImageWidth: 1,\n boxFlex: 1,\n boxFlexGroup: 1,\n boxOrdinalGroup: 1,\n columnCount: 1,\n columns: 1,\n flex: 1,\n flexGrow: 1,\n flexPositive: 1,\n flexShrink: 1,\n flexNegative: 1,\n flexOrder: 1,\n gridRow: 1,\n gridRowEnd: 1,\n gridRowSpan: 1,\n gridRowStart: 1,\n gridColumn: 1,\n gridColumnEnd: 1,\n gridColumnSpan: 1,\n gridColumnStart: 1,\n msGridRow: 1,\n msGridRowSpan: 1,\n msGridColumn: 1,\n msGridColumnSpan: 1,\n fontWeight: 1,\n lineHeight: 1,\n opacity: 1,\n order: 1,\n orphans: 1,\n tabSize: 1,\n widows: 1,\n zIndex: 1,\n zoom: 1,\n WebkitLineClamp: 1,\n // SVG-related properties\n fillOpacity: 1,\n floodOpacity: 1,\n stopOpacity: 1,\n strokeDasharray: 1,\n strokeDashoffset: 1,\n strokeMiterlimit: 1,\n strokeOpacity: 1,\n strokeWidth: 1\n};\n\n\n\n;// ./node_modules/@intertrust/condensed-uikit/node_modules/styled-components/dist/styled-components.browser.esm.js\nvar f="undefined"!=typeof process&&void 0!==process.env&&(process.env.REACT_APP_SC_ATTR||process.env.SC_ATTR)||"data-styled",m="active",y="data-styled-version",v="6.1.15",g="/*!sc*/\\n",S="undefined"!=typeof window&&"HTMLElement"in window,w=Boolean("boolean"==typeof SC_DISABLE_SPEEDY?SC_DISABLE_SPEEDY:"undefined"!=typeof process&&void 0!==process.env&&void 0!==process.env.REACT_APP_SC_DISABLE_SPEEDY&&""!==process.env.REACT_APP_SC_DISABLE_SPEEDY?"false"!==process.env.REACT_APP_SC_DISABLE_SPEEDY&&process.env.REACT_APP_SC_DISABLE_SPEEDY:"undefined"!=typeof process&&void 0!==process.env&&void 0!==process.env.SC_DISABLE_SPEEDY&&""!==process.env.SC_DISABLE_SPEEDY?"false"!==process.env.SC_DISABLE_SPEEDY&&process.env.SC_DISABLE_SPEEDY:"production"!=="production"),b={},E=/invalid hook call/i,N=new Set,P=function(t,n){if(false){ var a, o, s, i; }},_=Object.freeze([]),C=Object.freeze({});function I(e,t,n){return void 0===n&&(n=C),e.theme!==n.theme&&e.theme||t||n.theme}var A=new Set(["a","abbr","address","area","article","aside","audio","b","base","bdi","bdo","big","blockquote","body","br","button","canvas","caption","cite","code","col","colgroup","data","datalist","dd","del","details","dfn","dialog","div","dl","dt","em","embed","fieldset","figcaption","figure","footer","form","h1","h2","h3","h4","h5","h6","header","hgroup","hr","html","i","iframe","img","input","ins","kbd","keygen","label","legend","li","link","main","map","mark","menu","menuitem","meta","meter","nav","noscript","object","ol","optgroup","option","output","p","param","picture","pre","progress","q","rp","rt","ruby","s","samp","script","section","select","small","source","span","strong","style","sub","summary","sup","table","tbody","td","textarea","tfoot","th","thead","time","tr","track","u","ul","use","var","video","wbr","circle","clipPath","defs","ellipse","foreignObject","g","image","line","linearGradient","marker","mask","path","pattern","polygon","polyline","radialGradient","rect","stop","svg","text","tspan"]),O=/[!"#$%&\'()*+,./:;<=>?@[\\\\\\]^`{|}~-]+/g,D=/(^-|-$)/g;function R(e){return e.replace(O,"-").replace(D,"")}var T=/(a)(d)/gi,k=52,j=function(e){return String.fromCharCode(e+(e>25?39:97))};function x(e){var t,n="";for(t=Math.abs(e);t>k;t=t/k|0)n=j(t%k)+n;return(j(t%k)+n).replace(T,"$1-$2")}var V,F=5381,M=function(e,t){for(var n=t.length;n;)e=33*e^t.charCodeAt(--n);return e},z=function(e){return M(F,e)};function $(e){return x(z(e)>>>0)}function B(e){return false||e.displayName||e.name||"Component"}function L(e){return"string"==typeof e&&( true||0)}var G="function"==typeof Symbol&&Symbol.for,Y=G?Symbol.for("react.memo"):60115,W=G?Symbol.for("react.forward_ref"):60112,q={childContextTypes:!0,contextType:!0,contextTypes:!0,defaultProps:!0,displayName:!0,getDefaultProps:!0,getDerivedStateFromError:!0,getDerivedStateFromProps:!0,mixins:!0,propTypes:!0,type:!0},H={name:!0,length:!0,prototype:!0,caller:!0,callee:!0,arguments:!0,arity:!0},U={$$typeof:!0,compare:!0,defaultProps:!0,displayName:!0,propTypes:!0,type:!0},J=((V={})[W]={$$typeof:!0,render:!0,defaultProps:!0,displayName:!0,propTypes:!0},V[Y]=U,V);function X(e){return("type"in(t=e)&&t.type.$$typeof)===Y?U:"$$typeof"in e?J[e.$$typeof]:q;var t}var Z=Object.defineProperty,K=Object.getOwnPropertyNames,Q=Object.getOwnPropertySymbols,ee=Object.getOwnPropertyDescriptor,te=Object.getPrototypeOf,ne=Object.prototype;function oe(e,t,n){if("string"!=typeof t){if(ne){var o=te(t);o&&o!==ne&&oe(e,o,n)}var r=K(t);Q&&(r=r.concat(Q(t)));for(var s=X(e),i=X(t),a=0;a0?" Args: ".concat(n.join(", ")):"")):0}var fe=function(){function e(e){this.groupSizes=new Uint32Array(512),this.length=512,this.tag=e}return e.prototype.indexOfGroup=function(e){for(var t=0,n=0;n=this.groupSizes.length){for(var n=this.groupSizes,o=n.length,r=o;e>=r;)if((r<<=1)<0)throw he(16,"".concat(e));this.groupSizes=new Uint32Array(r),this.groupSizes.set(n),this.length=r;for(var s=o;s=this.length||0===this.groupSizes[e])return t;for(var n=this.groupSizes[e],o=this.indexOfGroup(e),r=o+n,s=o;s=0){var n=document.createTextNode(t);return this.element.insertBefore(n,this.nodes[e]||null),this.length++,!0}return!1},e.prototype.deleteRule=function(e){this.element.removeChild(this.nodes[e]),this.length--},e.prototype.getRule=function(e){return e0&&(c+="".concat(e,","))}),o+="".concat(i).concat(a,\'{content:"\').concat(c,\'"}\').concat(g)},s=0;s0?".".concat(t):e},u=c.slice();u.push(function(e){e.type===Enum_RULESET&&e.value.includes("&")&&(e.props[0]=e.props[0].replace(je,n).replace(o,l))}),i.prefix&&u.push(prefixer),u.push(stringify);var p=function(e,r,s,a){void 0===r&&(r=""),void 0===s&&(s=""),void 0===a&&(a="&"),t=a,n=r,o=new RegExp("\\\\".concat(n,"\\\\b"),"g");var c=e.replace(xe,""),l=compile(s||r?"".concat(s," ").concat(r," { ").concat(c," }"):c);i.namespace&&(l=Ve(l,i.namespace));var p=[];return serialize(l,middleware(u.concat(rulesheet(function(e){return p.push(e)})))),p};return p.hash=c.length?c.reduce(function(e,t){return t.name||he(15),M(e,t.name)},F).toString():"",p}var Me=new ke,ze=Fe(),$e=index_js_eager_default().createContext({shouldForwardProp:void 0,styleSheet:Me,stylis:ze}),Be=$e.Consumer,Le=index_js_eager_default().createContext(void 0);function Ge(){return (0,index_js_eager_.useContext)($e)}function Ye(e){var t=(0,index_js_eager_.useState)(e.stylisPlugins),n=t[0],r=t[1],c=Ge().styleSheet,l=(0,index_js_eager_.useMemo)(function(){var t=c;return e.sheet?t=e.sheet:e.target&&(t=t.reconstructWithOptions({target:e.target},!1)),e.disableCSSOMInjection&&(t=t.reconstructWithOptions({useCSSOMInjection:!1})),t},[e.disableCSSOMInjection,e.sheet,e.target,c]),u=(0,index_js_eager_.useMemo)(function(){return Fe({options:{namespace:e.namespace,prefix:e.enableVendorPrefixes},plugins:n})},[e.enableVendorPrefixes,e.namespace,n]);(0,index_js_eager_.useEffect)(function(){shallowequal_default()(n,e.stylisPlugins)||r(e.stylisPlugins)},[e.stylisPlugins]);var d=(0,index_js_eager_.useMemo)(function(){return{shouldForwardProp:e.shouldForwardProp,styleSheet:l,stylis:u}},[e.shouldForwardProp,l,u]);return index_js_eager_default().createElement($e.Provider,{value:d},index_js_eager_default().createElement(Le.Provider,{value:u},e.children))}var We=function(){function e(e,t){var n=this;this.inject=function(e,t){void 0===t&&(t=ze);var o=n.name+t.hash;e.hasNameForId(n.id,o)||e.insertRules(n.id,o,t(n.rules,o,"@keyframes"))},this.name=e,this.id="sc-keyframes-".concat(e),this.rules=t,ue(this,function(){throw he(12,String(n.name))})}return e.prototype.getName=function(e){return void 0===e&&(e=ze),this.name+e.hash},e}(),qe=function(e){return e>="A"&&e<="Z"};function He(e){for(var t="",n=0;n>>0);if(!t.hasNameForId(this.componentId,s)){var i=n(r,".".concat(s),void 0,this.componentId);t.insertRules(this.componentId,s,i)}o=ie(o,s),this.staticRulesId=s}else{for(var a=M(this.baseHash,n.hash),c="",l=0;l>>0);t.hasNameForId(this.componentId,d)||t.insertRules(this.componentId,d,n(c,".".concat(d),void 0,this.componentId)),o=ie(o,d)}}return o},e}(),et=index_js_eager_default().createContext(void 0),tt=et.Consumer;function nt(){var e=(0,index_js_eager_.useContext)(et);if(!e)throw he(18);return e}function ot(e){var n=index_js_eager_default().useContext(et),r=(0,index_js_eager_.useMemo)(function(){return function(e,n){if(!e)throw he(14);if(re(e)){var o=e(n);if(false){}return o}if(Array.isArray(e)||"object"!=typeof e)throw he(8);return n?__assign(__assign({},n),e):e}(e.theme,n)},[e.theme,n]);return e.children?index_js_eager_default().createElement(et.Provider,{value:r},e.children):null}var rt={},st=new Set;function it(e,r,s){var i=se(e),a=e,c=!L(e),p=r.attrs,d=void 0===p?_:p,h=r.componentId,f=void 0===h?function(e,t){var n="string"!=typeof e?"sc":R(e);rt[n]=(rt[n]||0)+1;var o="".concat(n,"-").concat($(v+n+rt[n]));return t?"".concat(t,"-").concat(o):o}(r.displayName,r.parentComponentId):h,m=r.displayName,y=void 0===m?function(e){return L(e)?"styled.".concat(e):"Styled(".concat(B(e),")")}(e):m,g=r.displayName&&r.componentId?"".concat(R(r.displayName),"-").concat(r.componentId):r.componentId||f,S=i&&a.attrs?a.attrs.concat(d).filter(Boolean):d,w=r.shouldForwardProp;if(i&&a.shouldForwardProp){var b=a.shouldForwardProp;if(r.shouldForwardProp){var E=r.shouldForwardProp;w=function(e,t){return b(e,t)&&E(e,t)}}else w=b}var N=new Qe(s,g,i?a.componentStyle:void 0);function O(e,r){return function(e,r,s){var i=e.attrs,a=e.componentStyle,c=e.defaultProps,p=e.foldedComponentIds,d=e.styledComponentId,h=e.target,f=index_js_eager_default().useContext(et),m=Ge(),y=e.shouldForwardProp||m.shouldForwardProp; false&&0;var v=I(r,f,c)||C,g=function(e,n,o){for(var r,s=__assign(__assign({},n),{className:void 0,theme:o}),i=0;i2&&ke.registerId(this.componentId+e),this.removeStyles(e,n),this.createStyles(e,t,n,o)},e}();function ft(n){for(var r=[],s=1;s").concat(t,"")},this.getStyleTags=function(){if(e.sealed)throw he(2);return e._emitSheetCSS()},this.getStyleElement=function(){var n;if(e.sealed)throw he(2);var r=e.instance.toString();if(!r)return[];var s=((n={})[f]="",n[y]=v,n.dangerouslySetInnerHTML={__html:r},n),i=Ce();return i&&(s.nonce=i),[index_js_eager_default().createElement("style",__assign({},s,{key:"sc-0-0"}))]},this.seal=function(){e.sealed=!0},this.instance=new ke({isServer:!0}),this.sealed=!1}return e.prototype.collectStyles=function(e){if(this.sealed)throw he(2);return index_js_eager_default().createElement(Ye,{sheet:this.instance},e)},e.prototype.interleaveWithNodeStream=function(e){throw he(3)},e}(),gt={StyleSheet:ke,mainSheet:Me}; false&&0;var St="__sc-".concat(f,"__"); false&&(0);\n//# sourceMappingURL=styled-components.browser.esm.js.map\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMTMxODQuanMiLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7Ozs7Ozs7QUNqWEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQ3JCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUM1SEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FDaFFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQ2xDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FDaEpBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUMvR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FDak1BO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FDbERBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9pdGctbmV4dGdlbi1mcm9udGVuZC8uL25vZGVfbW9kdWxlcy9AaW50ZXJ0cnVzdC9jb25kZW5zZWQtdWlraXQvbm9kZV9tb2R1bGVzL3RzbGliL3RzbGliLmVzNi5tanM/ZjYxZSIsIndlYnBhY2s6Ly9pdGctbmV4dGdlbi1mcm9udGVuZC8uL25vZGVfbW9kdWxlcy9zdHlsaXMvc3JjL0VudW0uanM/YmYxMSIsIndlYnBhY2s6Ly9pdGctbmV4dGdlbi1mcm9udGVuZC8uL25vZGVfbW9kdWxlcy9zdHlsaXMvc3JjL1V0aWxpdHkuanM/Y2RkNyIsIndlYnBhY2s6Ly9pdGctbmV4dGdlbi1mcm9udGVuZC8uL25vZGVfbW9kdWxlcy9zdHlsaXMvc3JjL1Rva2VuaXplci5qcz9mOGY2Iiwid2VicGFjazovL2l0Zy1uZXh0Z2VuLWZyb250ZW5kLy4vbm9kZV9tb2R1bGVzL3N0eWxpcy9zcmMvU2VyaWFsaXplci5qcz83YTcyIiwid2VicGFjazovL2l0Zy1uZXh0Z2VuLWZyb250ZW5kLy4vbm9kZV9tb2R1bGVzL3N0eWxpcy9zcmMvUHJlZml4ZXIuanM/ZDk4OSIsIndlYnBhY2s6Ly9pdGctbmV4dGdlbi1mcm9udGVuZC8uL25vZGVfbW9kdWxlcy9zdHlsaXMvc3JjL01pZGRsZXdhcmUuanM/MDYxNSIsIndlYnBhY2s6Ly9pdGctbmV4dGdlbi1mcm9udGVuZC8uL25vZGVfbW9kdWxlcy9zdHlsaXMvc3JjL1BhcnNlci5qcz8xMTQzIiwid2VicGFjazovL2l0Zy1uZXh0Z2VuLWZyb250ZW5kLy4vbm9kZV9tb2R1bGVzL0BpbnRlcnRydXN0L2NvbmRlbnNlZC11aWtpdC9ub2RlX21vZHVsZXMvQGVtb3Rpb24vdW5pdGxlc3MvZGlzdC9lbW90aW9uLXVuaXRsZXNzLmVzbS5qcz8yMThlIiwid2VicGFjazovL2l0Zy1uZXh0Z2VuLWZyb250ZW5kLy4vbm9kZV9tb2R1bGVzL0BpbnRlcnRydXN0L2NvbmRlbnNlZC11aWtpdC9ub2RlX21vZHVsZXMvc3R5bGVkLWNvbXBvbmVudHMvZGlzdC9zdHlsZWQtY29tcG9uZW50cy5icm93c2VyLmVzbS5qcz85NjA3Il0sInNvdXJjZXNDb250ZW50IjpbIi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcbkNvcHlyaWdodCAoYykgTWljcm9zb2Z0IENvcnBvcmF0aW9uLlxuXG5QZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBhbmQvb3IgZGlzdHJpYnV0ZSB0aGlzIHNvZnR3YXJlIGZvciBhbnlcbnB1cnBvc2Ugd2l0aCBvciB3aXRob3V0IGZlZSBpcyBoZXJlYnkgZ3JhbnRlZC5cblxuVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFwiQVMgSVNcIiBBTkQgVEhFIEFVVEhPUiBESVNDTEFJTVMgQUxMIFdBUlJBTlRJRVMgV0lUSFxuUkVHQVJEIFRPIFRISVMgU09GVFdBUkUgSU5DTFVESU5HIEFMTCBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZXG5BTkQgRklUTkVTUy4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBCRSBMSUFCTEUgRk9SIEFOWSBTUEVDSUFMLCBESVJFQ1QsXG5JTkRJUkVDVCwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIE9SIEFOWSBEQU1BR0VTIFdIQVRTT0VWRVIgUkVTVUxUSU5HIEZST01cbkxPU1MgT0YgVVNFLCBEQVRBIE9SIFBST0ZJVFMsIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBORUdMSUdFTkNFIE9SXG5PVEhFUiBUT1JUSU9VUyBBQ1RJT04sIEFSSVNJTkcgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgVVNFIE9SXG5QRVJGT1JNQU5DRSBPRiBUSElTIFNPRlRXQVJFLlxuKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogKi9cbi8qIGdsb2JhbCBSZWZsZWN0LCBQcm9taXNlLCBTdXBwcmVzc2VkRXJyb3IsIFN5bWJvbCAqL1xuXG52YXIgZXh0ZW5kU3RhdGljcyA9IGZ1bmN0aW9uKGQsIGIpIHtcbiAgZXh0ZW5kU3RhdGljcyA9IE9iamVjdC5zZXRQcm90b3R5cGVPZiB8fFxuICAgICAgKHsgX19wcm90b19fOiBbXSB9IGluc3RhbmNlb2YgQXJyYXkgJiYgZnVuY3Rpb24gKGQsIGIpIHsgZC5fX3Byb3RvX18gPSBiOyB9KSB8fFxuICAgICAgZnVuY3Rpb24gKGQsIGIpIHsgZm9yICh2YXIgcCBpbiBiKSBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGIsIHApKSBkW3BdID0gYltwXTsgfTtcbiAgcmV0dXJuIGV4dGVuZFN0YXRpY3MoZCwgYik7XG59O1xuXG5leHBvcnQgZnVuY3Rpb24gX19leHRlbmRzKGQsIGIpIHtcbiAgaWYgKHR5cGVvZiBiICE9PSBcImZ1bmN0aW9uXCIgJiYgYiAhPT0gbnVsbClcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJDbGFzcyBleHRlbmRzIHZhbHVlIFwiICsgU3RyaW5nKGIpICsgXCIgaXMgbm90IGEgY29uc3RydWN0b3Igb3IgbnVsbFwiKTtcbiAgZXh0ZW5kU3RhdGljcyhkLCBiKTtcbiAgZnVuY3Rpb24gX18oKSB7IHRoaXMuY29uc3RydWN0b3IgPSBkOyB9XG4gIGQucHJvdG90eXBlID0gYiA9PT0gbnVsbCA/IE9iamVjdC5jcmVhdGUoYikgOiAoX18ucHJvdG90eXBlID0gYi5wcm90b3R5cGUsIG5ldyBfXygpKTtcbn1cblxuZXhwb3J0IHZhciBfX2Fzc2lnbiA9IGZ1bmN0aW9uKCkge1xuICBfX2Fzc2lnbiA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gX19hc3NpZ24odCkge1xuICAgICAgZm9yICh2YXIgcywgaSA9IDEsIG4gPSBhcmd1bWVudHMubGVuZ3RoOyBpIDwgbjsgaSsrKSB7XG4gICAgICAgICAgcyA9IGFyZ3VtZW50c1tpXTtcbiAgICAgICAgICBmb3IgKHZhciBwIGluIHMpIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwocywgcCkpIHRbcF0gPSBzW3BdO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHQ7XG4gIH1cbiAgcmV0dXJuIF9fYXNzaWduLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBfX3Jlc3QocywgZSkge1xuICB2YXIgdCA9IHt9O1xuICBmb3IgKHZhciBwIGluIHMpIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwocywgcCkgJiYgZS5pbmRleE9mKHApIDwgMClcbiAgICAgIHRbcF0gPSBzW3BdO1xuICBpZiAocyAhPSBudWxsICYmIHR5cGVvZiBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzID09PSBcImZ1bmN0aW9uXCIpXG4gICAgICBmb3IgKHZhciBpID0gMCwgcCA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMocyk7IGkgPCBwLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgaWYgKGUuaW5kZXhPZihwW2ldKSA8IDAgJiYgT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHMsIHBbaV0pKVxuICAgICAgICAgICAgICB0W3BbaV1dID0gc1twW2ldXTtcbiAgICAgIH1cbiAgcmV0dXJuIHQ7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBfX2RlY29yYXRlKGRlY29yYXRvcnMsIHRhcmdldCwga2V5LCBkZXNjKSB7XG4gIHZhciBjID0gYXJndW1lbnRzLmxlbmd0aCwgciA9IGMgPCAzID8gdGFyZ2V0IDogZGVzYyA9PT0gbnVsbCA/IGRlc2MgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHRhcmdldCwga2V5KSA6IGRlc2MsIGQ7XG4gIGlmICh0eXBlb2YgUmVmbGVjdCA9PT0gXCJvYmplY3RcIiAmJiB0eXBlb2YgUmVmbGVjdC5kZWNvcmF0ZSA9PT0gXCJmdW5jdGlvblwiKSByID0gUmVmbGVjdC5kZWNvcmF0ZShkZWNvcmF0b3JzLCB0YXJnZXQsIGtleSwgZGVzYyk7XG4gIGVsc2UgZm9yICh2YXIgaSA9IGRlY29yYXRvcnMubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIGlmIChkID0gZGVjb3JhdG9yc1tpXSkgciA9IChjIDwgMyA/IGQocikgOiBjID4gMyA/IGQodGFyZ2V0LCBrZXksIHIpIDogZCh0YXJnZXQsIGtleSkpIHx8IHI7XG4gIHJldHVybiBjID4gMyAmJiByICYmIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGtleSwgciksIHI7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBfX3BhcmFtKHBhcmFtSW5kZXgsIGRlY29yYXRvcikge1xuICByZXR1cm4gZnVuY3Rpb24gKHRhcmdldCwga2V5KSB7IGRlY29yYXRvcih0YXJnZXQsIGtleSwgcGFyYW1JbmRleCk7IH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIF9fZXNEZWNvcmF0ZShjdG9yLCBkZXNjcmlwdG9ySW4sIGRlY29yYXRvcnMsIGNvbnRleHRJbiwgaW5pdGlhbGl6ZXJzLCBleHRyYUluaXRpYWxpemVycykge1xuICBmdW5jdGlvbiBhY2NlcHQoZikgeyBpZiAoZiAhPT0gdm9pZCAwICYmIHR5cGVvZiBmICE9PSBcImZ1bmN0aW9uXCIpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJGdW5jdGlvbiBleHBlY3RlZFwiKTsgcmV0dXJuIGY7IH1cbiAgdmFyIGtpbmQgPSBjb250ZXh0SW4ua2luZCwga2V5ID0ga2luZCA9PT0gXCJnZXR0ZXJcIiA/IFwiZ2V0XCIgOiBraW5kID09PSBcInNldHRlclwiID8gXCJzZXRcIiA6IFwidmFsdWVcIjtcbiAgdmFyIHRhcmdldCA9ICFkZXNjcmlwdG9ySW4gJiYgY3RvciA/IGNvbnRleHRJbltcInN0YXRpY1wiXSA/IGN0b3IgOiBjdG9yLnByb3RvdHlwZSA6IG51bGw7XG4gIHZhciBkZXNjcmlwdG9yID0gZGVzY3JpcHRvckluIHx8ICh0YXJnZXQgPyBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHRhcmdldCwgY29udGV4dEluLm5hbWUpIDoge30pO1xuICB2YXIgXywgZG9uZSA9IGZhbHNlO1xuICBmb3IgKHZhciBpID0gZGVjb3JhdG9ycy5sZW5ndGggLSAxOyBpID49IDA7IGktLSkge1xuICAgICAgdmFyIGNvbnRleHQgPSB7fTtcbiAgICAgIGZvciAodmFyIHAgaW4gY29udGV4dEluKSBjb250ZXh0W3BdID0gcCA9PT0gXCJhY2Nlc3NcIiA/IHt9IDogY29udGV4dEluW3BdO1xuICAgICAgZm9yICh2YXIgcCBpbiBjb250ZXh0SW4uYWNjZXNzKSBjb250ZXh0LmFjY2Vzc1twXSA9IGNvbnRleHRJbi5hY2Nlc3NbcF07XG4gICAgICBjb250ZXh0LmFkZEluaXRpYWxpemVyID0gZnVuY3Rpb24gKGYpIHsgaWYgKGRvbmUpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJDYW5ub3QgYWRkIGluaXRpYWxpemVycyBhZnRlciBkZWNvcmF0aW9uIGhhcyBjb21wbGV0ZWRcIik7IGV4dHJhSW5pdGlhbGl6ZXJzLnB1c2goYWNjZXB0KGYgfHwgbnVsbCkpOyB9O1xuICAgICAgdmFyIHJlc3VsdCA9ICgwLCBkZWNvcmF0b3JzW2ldKShraW5kID09PSBcImFjY2Vzc29yXCIgPyB7IGdldDogZGVzY3JpcHRvci5nZXQsIHNldDogZGVzY3JpcHRvci5zZXQgfSA6IGRlc2NyaXB0b3Jba2V5XSwgY29udGV4dCk7XG4gICAgICBpZiAoa2luZCA9PT0gXCJhY2Nlc3NvclwiKSB7XG4gICAgICAgICAgaWYgKHJlc3VsdCA9PT0gdm9pZCAwKSBjb250aW51ZTtcbiAgICAgICAgICBpZiAocmVzdWx0ID09PSBudWxsIHx8IHR5cGVvZiByZXN1bHQgIT09IFwib2JqZWN0XCIpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJPYmplY3QgZXhwZWN0ZWRcIik7XG4gICAgICAgICAgaWYgKF8gPSBhY2NlcHQocmVzdWx0LmdldCkpIGRlc2NyaXB0b3IuZ2V0ID0gXztcbiAgICAgICAgICBpZiAoXyA9IGFjY2VwdChyZXN1bHQuc2V0KSkgZGVzY3JpcHRvci5zZXQgPSBfO1xuICAgICAgICAgIGlmIChfID0gYWNjZXB0KHJlc3VsdC5pbml0KSkgaW5pdGlhbGl6ZXJzLnVuc2hpZnQoXyk7XG4gICAgICB9XG4gICAgICBlbHNlIGlmIChfID0gYWNjZXB0KHJlc3VsdCkpIHtcbiAgICAgICAgICBpZiAoa2luZCA9PT0gXCJmaWVsZFwiKSBpbml0aWFsaXplcnMudW5zaGlmdChfKTtcbiAgICAgICAgICBlbHNlIGRlc2NyaXB0b3Jba2V5XSA9IF87XG4gICAgICB9XG4gIH1cbiAgaWYgKHRhcmdldCkgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwgY29udGV4dEluLm5hbWUsIGRlc2NyaXB0b3IpO1xuICBkb25lID0gdHJ1ZTtcbn07XG5cbmV4cG9ydCBmdW5jdGlvbiBfX3J1bkluaXRpYWxpemVycyh0aGlzQXJnLCBpbml0aWFsaXplcnMsIHZhbHVlKSB7XG4gIHZhciB1c2VWYWx1ZSA9IGFyZ3VtZW50cy5sZW5ndGggPiAyO1xuICBmb3IgKHZhciBpID0gMDsgaSA8IGluaXRpYWxpemVycy5sZW5ndGg7IGkrKykge1xuICAgICAgdmFsdWUgPSB1c2VWYWx1ZSA/IGluaXRpYWxpemVyc1tpXS5jYWxsKHRoaXNBcmcsIHZhbHVlKSA6IGluaXRpYWxpemVyc1tpXS5jYWxsKHRoaXNBcmcpO1xuICB9XG4gIHJldHVybiB1c2VWYWx1ZSA/IHZhbHVlIDogdm9pZCAwO1xufTtcblxuZXhwb3J0IGZ1bmN0aW9uIF9fcHJvcEtleSh4KSB7XG4gIHJldHVybiB0eXBlb2YgeCA9PT0gXCJzeW1ib2xcIiA/IHggOiBcIlwiLmNvbmNhdCh4KTtcbn07XG5cbmV4cG9ydCBmdW5jdGlvbiBfX3NldEZ1bmN0aW9uTmFtZShmLCBuYW1lLCBwcmVmaXgpIHtcbiAgaWYgKHR5cGVvZiBuYW1lID09PSBcInN5bWJvbFwiKSBuYW1lID0gbmFtZS5kZXNjcmlwdGlvbiA/IFwiW1wiLmNvbmNhdChuYW1lLmRlc2NyaXB0aW9uLCBcIl1cIikgOiBcIlwiO1xuICByZXR1cm4gT2JqZWN0LmRlZmluZVByb3BlcnR5KGYsIFwibmFtZVwiLCB7IGNvbmZpZ3VyYWJsZTogdHJ1ZSwgdmFsdWU6IHByZWZpeCA/IFwiXCIuY29uY2F0KHByZWZpeCwgXCIgXCIsIG5hbWUpIDogbmFtZSB9KTtcbn07XG5cbmV4cG9ydCBmdW5jdGlvbiBfX21ldGFkYXRhKG1ldGFkYXRhS2V5LCBtZXRhZGF0YVZhbHVlKSB7XG4gIGlmICh0eXBlb2YgUmVmbGVjdCA9PT0gXCJvYmplY3RcIiAmJiB0eXBlb2YgUmVmbGVjdC5tZXRhZGF0YSA9PT0gXCJmdW5jdGlvblwiKSByZXR1cm4gUmVmbGVjdC5tZXRhZGF0YShtZXRhZGF0YUtleSwgbWV0YWRhdGFWYWx1ZSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBfX2F3YWl0ZXIodGhpc0FyZywgX2FyZ3VtZW50cywgUCwgZ2VuZXJhdG9yKSB7XG4gIGZ1bmN0aW9uIGFkb3B0KHZhbHVlKSB7IHJldHVybiB2YWx1ZSBpbnN0YW5jZW9mIFAgPyB2YWx1ZSA6IG5ldyBQKGZ1bmN0aW9uIChyZXNvbHZlKSB7IHJlc29sdmUodmFsdWUpOyB9KTsgfVxuICByZXR1cm4gbmV3IChQIHx8IChQID0gUHJvbWlzZSkpKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHtcbiAgICAgIGZ1bmN0aW9uIGZ1bGZpbGxlZCh2YWx1ZSkgeyB0cnkgeyBzdGVwKGdlbmVyYXRvci5uZXh0KHZhbHVlKSk7IH0gY2F0Y2ggKGUpIHsgcmVqZWN0KGUpOyB9IH1cbiAgICAgIGZ1bmN0aW9uIHJlamVjdGVkKHZhbHVlKSB7IHRyeSB7IHN0ZXAoZ2VuZXJhdG9yW1widGhyb3dcIl0odmFsdWUpKTsgfSBjYXRjaCAoZSkgeyByZWplY3QoZSk7IH0gfVxuICAgICAgZnVuY3Rpb24gc3RlcChyZXN1bHQpIHsgcmVzdWx0LmRvbmUgPyByZXNvbHZlKHJlc3VsdC52YWx1ZSkgOiBhZG9wdChyZXN1bHQudmFsdWUpLnRoZW4oZnVsZmlsbGVkLCByZWplY3RlZCk7IH1cbiAgICAgIHN0ZXAoKGdlbmVyYXRvciA9IGdlbmVyYXRvci5hcHBseSh0aGlzQXJnLCBfYXJndW1lbnRzIHx8IFtdKSkubmV4dCgpKTtcbiAgfSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBfX2dlbmVyYXRvcih0aGlzQXJnLCBib2R5KSB7XG4gIHZhciBfID0geyBsYWJlbDogMCwgc2VudDogZnVuY3Rpb24oKSB7IGlmICh0WzBdICYgMSkgdGhyb3cgdFsxXTsgcmV0dXJuIHRbMV07IH0sIHRyeXM6IFtdLCBvcHM6IFtdIH0sIGYsIHksIHQsIGc7XG4gIHJldHVybiBnID0geyBuZXh0OiB2ZXJiKDApLCBcInRocm93XCI6IHZlcmIoMSksIFwicmV0dXJuXCI6IHZlcmIoMikgfSwgdHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIChnW1N5bWJvbC5pdGVyYXRvcl0gPSBmdW5jdGlvbigpIHsgcmV0dXJuIHRoaXM7IH0pLCBnO1xuICBmdW5jdGlvbiB2ZXJiKG4pIHsgcmV0dXJuIGZ1bmN0aW9uICh2KSB7IHJldHVybiBzdGVwKFtuLCB2XSk7IH07IH1cbiAgZnVuY3Rpb24gc3RlcChvcCkge1xuICAgICAgaWYgKGYpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJHZW5lcmF0b3IgaXMgYWxyZWFkeSBleGVjdXRpbmcuXCIpO1xuICAgICAgd2hpbGUgKGcgJiYgKGcgPSAwLCBvcFswXSAmJiAoXyA9IDApKSwgXykgdHJ5IHtcbiAgICAgICAgICBpZiAoZiA9IDEsIHkgJiYgKHQgPSBvcFswXSAmIDIgPyB5W1wicmV0dXJuXCJdIDogb3BbMF0gPyB5W1widGhyb3dcIl0gfHwgKCh0ID0geVtcInJldHVyblwiXSkgJiYgdC5jYWxsKHkpLCAwKSA6IHkubmV4dCkgJiYgISh0ID0gdC5jYWxsKHksIG9wWzFdKSkuZG9uZSkgcmV0dXJuIHQ7XG4gICAgICAgICAgaWYgKHkgPSAwLCB0KSBvcCA9IFtvcFswXSAmIDIsIHQudmFsdWVdO1xuICAgICAgICAgIHN3aXRjaCAob3BbMF0pIHtcbiAgICAgICAgICAgICAgY2FzZSAwOiBjYXNlIDE6IHQgPSBvcDsgYnJlYWs7XG4gICAgICAgICAgICAgIGNhc2UgNDogXy5sYWJlbCsrOyByZXR1cm4geyB2YWx1ZTogb3BbMV0sIGRvbmU6IGZhbHNlIH07XG4gICAgICAgICAgICAgIGNhc2UgNTogXy5sYWJlbCsrOyB5ID0gb3BbMV07IG9wID0gWzBdOyBjb250aW51ZTtcbiAgICAgICAgICAgICAgY2FzZSA3OiBvcCA9IF8ub3BzLnBvcCgpOyBfLnRyeXMucG9wKCk7IGNvbnRpbnVlO1xuICAgICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgICAgaWYgKCEodCA9IF8udHJ5cywgdCA9IHQubGVuZ3RoID4gMCAmJiB0W3QubGVuZ3RoIC0gMV0pICYmIChvcFswXSA9PT0gNiB8fCBvcFswXSA9PT0gMikpIHsgXyA9IDA7IGNvbnRpbnVlOyB9XG4gICAgICAgICAgICAgICAgICBpZiAob3BbMF0gPT09IDMgJiYgKCF0IHx8IChvcFsxXSA+IHRbMF0gJiYgb3BbMV0gPCB0WzNdKSkpIHsgXy5sYWJlbCA9IG9wWzFdOyBicmVhazsgfVxuICAgICAgICAgICAgICAgICAgaWYgKG9wWzBdID09PSA2ICYmIF8ubGFiZWwgPCB0WzFdKSB7IF8ubGFiZWwgPSB0WzFdOyB0ID0gb3A7IGJyZWFrOyB9XG4gICAgICAgICAgICAgICAgICBpZiAodCAmJiBfLmxhYmVsIDwgdFsyXSkgeyBfLmxhYmVsID0gdFsyXTsgXy5vcHMucHVzaChvcCk7IGJyZWFrOyB9XG4gICAgICAgICAgICAgICAgICBpZiAodFsyXSkgXy5vcHMucG9wKCk7XG4gICAgICAgICAgICAgICAgICBfLnRyeXMucG9wKCk7IGNvbnRpbnVlO1xuICAgICAgICAgIH1cbiAgICAgICAgICBvcCA9IGJvZHkuY2FsbCh0aGlzQXJnLCBfKTtcbiAgICAgIH0gY2F0Y2ggKGUpIHsgb3AgPSBbNiwgZV07IHkgPSAwOyB9IGZpbmFsbHkgeyBmID0gdCA9IDA7IH1cbiAgICAgIGlmIChvcFswXSAmIDUpIHRocm93IG9wWzFdOyByZXR1cm4geyB2YWx1ZTogb3BbMF0gPyBvcFsxXSA6IHZvaWQgMCwgZG9uZTogdHJ1ZSB9O1xuICB9XG59XG5cbmV4cG9ydCB2YXIgX19jcmVhdGVCaW5kaW5nID0gT2JqZWN0LmNyZWF0ZSA/IChmdW5jdGlvbihvLCBtLCBrLCBrMikge1xuICBpZiAoazIgPT09IHVuZGVmaW5lZCkgazIgPSBrO1xuICB2YXIgZGVzYyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IobSwgayk7XG4gIGlmICghZGVzYyB8fCAoXCJnZXRcIiBpbiBkZXNjID8gIW0uX19lc01vZHVsZSA6IGRlc2Mud3JpdGFibGUgfHwgZGVzYy5jb25maWd1cmFibGUpKSB7XG4gICAgICBkZXNjID0geyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uKCkgeyByZXR1cm4gbVtrXTsgfSB9O1xuICB9XG4gIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvLCBrMiwgZGVzYyk7XG59KSA6IChmdW5jdGlvbihvLCBtLCBrLCBrMikge1xuICBpZiAoazIgPT09IHVuZGVmaW5lZCkgazIgPSBrO1xuICBvW2syXSA9IG1ba107XG59KTtcblxuZXhwb3J0IGZ1bmN0aW9uIF9fZXhwb3J0U3RhcihtLCBvKSB7XG4gIGZvciAodmFyIHAgaW4gbSkgaWYgKHAgIT09IFwiZGVmYXVsdFwiICYmICFPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwobywgcCkpIF9fY3JlYXRlQmluZGluZyhvLCBtLCBwKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIF9fdmFsdWVzKG8pIHtcbiAgdmFyIHMgPSB0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgU3ltYm9sLml0ZXJhdG9yLCBtID0gcyAmJiBvW3NdLCBpID0gMDtcbiAgaWYgKG0pIHJldHVybiBtLmNhbGwobyk7XG4gIGlmIChvICYmIHR5cGVvZiBvLmxlbmd0aCA9PT0gXCJudW1iZXJcIikgcmV0dXJuIHtcbiAgICAgIG5leHQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICBpZiAobyAmJiBpID49IG8ubGVuZ3RoKSBvID0gdm9pZCAwO1xuICAgICAgICAgIHJldHVybiB7IHZhbHVlOiBvICYmIG9baSsrXSwgZG9uZTogIW8gfTtcbiAgICAgIH1cbiAgfTtcbiAgdGhyb3cgbmV3IFR5cGVFcnJvcihzID8gXCJPYmplY3QgaXMgbm90IGl0ZXJhYmxlLlwiIDogXCJTeW1ib2wuaXRlcmF0b3IgaXMgbm90IGRlZmluZWQuXCIpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gX19yZWFkKG8sIG4pIHtcbiAgdmFyIG0gPSB0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgb1tTeW1ib2wuaXRlcmF0b3JdO1xuICBpZiAoIW0pIHJldHVybiBvO1xuICB2YXIgaSA9IG0uY2FsbChvKSwgciwgYXIgPSBbXSwgZTtcbiAgdHJ5IHtcbiAgICAgIHdoaWxlICgobiA9PT0gdm9pZCAwIHx8IG4tLSA+IDApICYmICEociA9IGkubmV4dCgpKS5kb25lKSBhci5wdXNoKHIudmFsdWUpO1xuICB9XG4gIGNhdGNoIChlcnJvcikgeyBlID0geyBlcnJvcjogZXJyb3IgfTsgfVxuICBmaW5hbGx5IHtcbiAgICAgIHRyeSB7XG4gICAgICAgICAgaWYgKHIgJiYgIXIuZG9uZSAmJiAobSA9IGlbXCJyZXR1cm5cIl0pKSBtLmNhbGwoaSk7XG4gICAgICB9XG4gICAgICBmaW5hbGx5IHsgaWYgKGUpIHRocm93IGUuZXJyb3I7IH1cbiAgfVxuICByZXR1cm4gYXI7XG59XG5cbi8qKiBAZGVwcmVjYXRlZCAqL1xuZXhwb3J0IGZ1bmN0aW9uIF9fc3ByZWFkKCkge1xuICBmb3IgKHZhciBhciA9IFtdLCBpID0gMDsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKylcbiAgICAgIGFyID0gYXIuY29uY2F0KF9fcmVhZChhcmd1bWVudHNbaV0pKTtcbiAgcmV0dXJuIGFyO1xufVxuXG4vKiogQGRlcHJlY2F0ZWQgKi9cbmV4cG9ydCBmdW5jdGlvbiBfX3NwcmVhZEFycmF5cygpIHtcbiAgZm9yICh2YXIgcyA9IDAsIGkgPSAwLCBpbCA9IGFyZ3VtZW50cy5sZW5ndGg7IGkgPCBpbDsgaSsrKSBzICs9IGFyZ3VtZW50c1tpXS5sZW5ndGg7XG4gIGZvciAodmFyIHIgPSBBcnJheShzKSwgayA9IDAsIGkgPSAwOyBpIDwgaWw7IGkrKylcbiAgICAgIGZvciAodmFyIGEgPSBhcmd1bWVudHNbaV0sIGogPSAwLCBqbCA9IGEubGVuZ3RoOyBqIDwgamw7IGorKywgaysrKVxuICAgICAgICAgIHJba10gPSBhW2pdO1xuICByZXR1cm4gcjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIF9fc3ByZWFkQXJyYXkodG8sIGZyb20sIHBhY2spIHtcbiAgaWYgKHBhY2sgfHwgYXJndW1lbnRzLmxlbmd0aCA9PT0gMikgZm9yICh2YXIgaSA9IDAsIGwgPSBmcm9tLmxlbmd0aCwgYXI7IGkgPCBsOyBpKyspIHtcbiAgICAgIGlmIChhciB8fCAhKGkgaW4gZnJvbSkpIHtcbiAgICAgICAgICBpZiAoIWFyKSBhciA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGZyb20sIDAsIGkpO1xuICAgICAgICAgIGFyW2ldID0gZnJvbVtpXTtcbiAgICAgIH1cbiAgfVxuICByZXR1cm4gdG8uY29uY2F0KGFyIHx8IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGZyb20pKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIF9fYXdhaXQodikge1xuICByZXR1cm4gdGhpcyBpbnN0YW5jZW9mIF9fYXdhaXQgPyAodGhpcy52ID0gdiwgdGhpcykgOiBuZXcgX19hd2FpdCh2KTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIF9fYXN5bmNHZW5lcmF0b3IodGhpc0FyZywgX2FyZ3VtZW50cywgZ2VuZXJhdG9yKSB7XG4gIGlmICghU3ltYm9sLmFzeW5jSXRlcmF0b3IpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJTeW1ib2wuYXN5bmNJdGVyYXRvciBpcyBub3QgZGVmaW5lZC5cIik7XG4gIHZhciBnID0gZ2VuZXJhdG9yLmFwcGx5KHRoaXNBcmcsIF9hcmd1bWVudHMgfHwgW10pLCBpLCBxID0gW107XG4gIHJldHVybiBpID0ge30sIHZlcmIoXCJuZXh0XCIpLCB2ZXJiKFwidGhyb3dcIiksIHZlcmIoXCJyZXR1cm5cIiksIGlbU3ltYm9sLmFzeW5jSXRlcmF0b3JdID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gdGhpczsgfSwgaTtcbiAgZnVuY3Rpb24gdmVyYihuKSB7IGlmIChnW25dKSBpW25dID0gZnVuY3Rpb24gKHYpIHsgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uIChhLCBiKSB7IHEucHVzaChbbiwgdiwgYSwgYl0pID4gMSB8fCByZXN1bWUobiwgdik7IH0pOyB9OyB9XG4gIGZ1bmN0aW9uIHJlc3VtZShuLCB2KSB7IHRyeSB7IHN0ZXAoZ1tuXSh2KSk7IH0gY2F0Y2ggKGUpIHsgc2V0dGxlKHFbMF1bM10sIGUpOyB9IH1cbiAgZnVuY3Rpb24gc3RlcChyKSB7IHIudmFsdWUgaW5zdGFuY2VvZiBfX2F3YWl0ID8gUHJvbWlzZS5yZXNvbHZlKHIudmFsdWUudikudGhlbihmdWxmaWxsLCByZWplY3QpIDogc2V0dGxlKHFbMF1bMl0sIHIpOyB9XG4gIGZ1bmN0aW9uIGZ1bGZpbGwodmFsdWUpIHsgcmVzdW1lKFwibmV4dFwiLCB2YWx1ZSk7IH1cbiAgZnVuY3Rpb24gcmVqZWN0KHZhbHVlKSB7IHJlc3VtZShcInRocm93XCIsIHZhbHVlKTsgfVxuICBmdW5jdGlvbiBzZXR0bGUoZiwgdikgeyBpZiAoZih2KSwgcS5zaGlmdCgpLCBxLmxlbmd0aCkgcmVzdW1lKHFbMF1bMF0sIHFbMF1bMV0pOyB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBfX2FzeW5jRGVsZWdhdG9yKG8pIHtcbiAgdmFyIGksIHA7XG4gIHJldHVybiBpID0ge30sIHZlcmIoXCJuZXh0XCIpLCB2ZXJiKFwidGhyb3dcIiwgZnVuY3Rpb24gKGUpIHsgdGhyb3cgZTsgfSksIHZlcmIoXCJyZXR1cm5cIiksIGlbU3ltYm9sLml0ZXJhdG9yXSA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHRoaXM7IH0sIGk7XG4gIGZ1bmN0aW9uIHZlcmIobiwgZikgeyBpW25dID0gb1tuXSA/IGZ1bmN0aW9uICh2KSB7IHJldHVybiAocCA9ICFwKSA/IHsgdmFsdWU6IF9fYXdhaXQob1tuXSh2KSksIGRvbmU6IGZhbHNlIH0gOiBmID8gZih2KSA6IHY7IH0gOiBmOyB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBfX2FzeW5jVmFsdWVzKG8pIHtcbiAgaWYgKCFTeW1ib2wuYXN5bmNJdGVyYXRvcikgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlN5bWJvbC5hc3luY0l0ZXJhdG9yIGlzIG5vdCBkZWZpbmVkLlwiKTtcbiAgdmFyIG0gPSBvW1N5bWJvbC5hc3luY0l0ZXJhdG9yXSwgaTtcbiAgcmV0dXJuIG0gPyBtLmNhbGwobykgOiAobyA9IHR5cGVvZiBfX3ZhbHVlcyA9PT0gXCJmdW5jdGlvblwiID8gX192YWx1ZXMobykgOiBvW1N5bWJvbC5pdGVyYXRvcl0oKSwgaSA9IHt9LCB2ZXJiKFwibmV4dFwiKSwgdmVyYihcInRocm93XCIpLCB2ZXJiKFwicmV0dXJuXCIpLCBpW1N5bWJvbC5hc3luY0l0ZXJhdG9yXSA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHRoaXM7IH0sIGkpO1xuICBmdW5jdGlvbiB2ZXJiKG4pIHsgaVtuXSA9IG9bbl0gJiYgZnVuY3Rpb24gKHYpIHsgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHsgdiA9IG9bbl0odiksIHNldHRsZShyZXNvbHZlLCByZWplY3QsIHYuZG9uZSwgdi52YWx1ZSk7IH0pOyB9OyB9XG4gIGZ1bmN0aW9uIHNldHRsZShyZXNvbHZlLCByZWplY3QsIGQsIHYpIHsgUHJvbWlzZS5yZXNvbHZlKHYpLnRoZW4oZnVuY3Rpb24odikgeyByZXNvbHZlKHsgdmFsdWU6IHYsIGRvbmU6IGQgfSk7IH0sIHJlamVjdCk7IH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIF9fbWFrZVRlbXBsYXRlT2JqZWN0KGNvb2tlZCwgcmF3KSB7XG4gIGlmIChPYmplY3QuZGVmaW5lUHJvcGVydHkpIHsgT2JqZWN0LmRlZmluZVByb3BlcnR5KGNvb2tlZCwgXCJyYXdcIiwgeyB2YWx1ZTogcmF3IH0pOyB9IGVsc2UgeyBjb29rZWQucmF3ID0gcmF3OyB9XG4gIHJldHVybiBjb29rZWQ7XG59O1xuXG52YXIgX19zZXRNb2R1bGVEZWZhdWx0ID0gT2JqZWN0LmNyZWF0ZSA/IChmdW5jdGlvbihvLCB2KSB7XG4gIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvLCBcImRlZmF1bHRcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCB2YWx1ZTogdiB9KTtcbn0pIDogZnVuY3Rpb24obywgdikge1xuICBvW1wiZGVmYXVsdFwiXSA9IHY7XG59O1xuXG5leHBvcnQgZnVuY3Rpb24gX19pbXBvcnRTdGFyKG1vZCkge1xuICBpZiAobW9kICYmIG1vZC5fX2VzTW9kdWxlKSByZXR1cm4gbW9kO1xuICB2YXIgcmVzdWx0ID0ge307XG4gIGlmIChtb2QgIT0gbnVsbCkgZm9yICh2YXIgayBpbiBtb2QpIGlmIChrICE9PSBcImRlZmF1bHRcIiAmJiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwobW9kLCBrKSkgX19jcmVhdGVCaW5kaW5nKHJlc3VsdCwgbW9kLCBrKTtcbiAgX19zZXRNb2R1bGVEZWZhdWx0KHJlc3VsdCwgbW9kKTtcbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIF9faW1wb3J0RGVmYXVsdChtb2QpIHtcbiAgcmV0dXJuIChtb2QgJiYgbW9kLl9fZXNNb2R1bGUpID8gbW9kIDogeyBkZWZhdWx0OiBtb2QgfTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIF9fY2xhc3NQcml2YXRlRmllbGRHZXQocmVjZWl2ZXIsIHN0YXRlLCBraW5kLCBmKSB7XG4gIGlmIChraW5kID09PSBcImFcIiAmJiAhZikgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlByaXZhdGUgYWNjZXNzb3Igd2FzIGRlZmluZWQgd2l0aG91dCBhIGdldHRlclwiKTtcbiAgaWYgKHR5cGVvZiBzdGF0ZSA9PT0gXCJmdW5jdGlvblwiID8gcmVjZWl2ZXIgIT09IHN0YXRlIHx8ICFmIDogIXN0YXRlLmhhcyhyZWNlaXZlcikpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJDYW5ub3QgcmVhZCBwcml2YXRlIG1lbWJlciBmcm9tIGFuIG9iamVjdCB3aG9zZSBjbGFzcyBkaWQgbm90IGRlY2xhcmUgaXRcIik7XG4gIHJldHVybiBraW5kID09PSBcIm1cIiA/IGYgOiBraW5kID09PSBcImFcIiA/IGYuY2FsbChyZWNlaXZlcikgOiBmID8gZi52YWx1ZSA6IHN0YXRlLmdldChyZWNlaXZlcik7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBfX2NsYXNzUHJpdmF0ZUZpZWxkU2V0KHJlY2VpdmVyLCBzdGF0ZSwgdmFsdWUsIGtpbmQsIGYpIHtcbiAgaWYgKGtpbmQgPT09IFwibVwiKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiUHJpdmF0ZSBtZXRob2QgaXMgbm90IHdyaXRhYmxlXCIpO1xuICBpZiAoa2luZCA9PT0gXCJhXCIgJiYgIWYpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJQcml2YXRlIGFjY2Vzc29yIHdhcyBkZWZpbmVkIHdpdGhvdXQgYSBzZXR0ZXJcIik7XG4gIGlmICh0eXBlb2Ygc3RhdGUgPT09IFwiZnVuY3Rpb25cIiA/IHJlY2VpdmVyICE9PSBzdGF0ZSB8fCAhZiA6ICFzdGF0ZS5oYXMocmVjZWl2ZXIpKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2Fubm90IHdyaXRlIHByaXZhdGUgbWVtYmVyIHRvIGFuIG9iamVjdCB3aG9zZSBjbGFzcyBkaWQgbm90IGRlY2xhcmUgaXRcIik7XG4gIHJldHVybiAoa2luZCA9PT0gXCJhXCIgPyBmLmNhbGwocmVjZWl2ZXIsIHZhbHVlKSA6IGYgPyBmLnZhbHVlID0gdmFsdWUgOiBzdGF0ZS5zZXQocmVjZWl2ZXIsIHZhbHVlKSksIHZhbHVlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gX19jbGFzc1ByaXZhdGVGaWVsZEluKHN0YXRlLCByZWNlaXZlcikge1xuICBpZiAocmVjZWl2ZXIgPT09IG51bGwgfHwgKHR5cGVvZiByZWNlaXZlciAhPT0gXCJvYmplY3RcIiAmJiB0eXBlb2YgcmVjZWl2ZXIgIT09IFwiZnVuY3Rpb25cIikpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJDYW5ub3QgdXNlICdpbicgb3BlcmF0b3Igb24gbm9uLW9iamVjdFwiKTtcbiAgcmV0dXJuIHR5cGVvZiBzdGF0ZSA9PT0gXCJmdW5jdGlvblwiID8gcmVjZWl2ZXIgPT09IHN0YXRlIDogc3RhdGUuaGFzKHJlY2VpdmVyKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIF9fYWRkRGlzcG9zYWJsZVJlc291cmNlKGVudiwgdmFsdWUsIGFzeW5jKSB7XG4gIGlmICh2YWx1ZSAhPT0gbnVsbCAmJiB2YWx1ZSAhPT0gdm9pZCAwKSB7XG4gICAgaWYgKHR5cGVvZiB2YWx1ZSAhPT0gXCJvYmplY3RcIiAmJiB0eXBlb2YgdmFsdWUgIT09IFwiZnVuY3Rpb25cIikgdGhyb3cgbmV3IFR5cGVFcnJvcihcIk9iamVjdCBleHBlY3RlZC5cIik7XG4gICAgdmFyIGRpc3Bvc2U7XG4gICAgaWYgKGFzeW5jKSB7XG4gICAgICAgIGlmICghU3ltYm9sLmFzeW5jRGlzcG9zZSkgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlN5bWJvbC5hc3luY0Rpc3Bvc2UgaXMgbm90IGRlZmluZWQuXCIpO1xuICAgICAgICBkaXNwb3NlID0gdmFsdWVbU3ltYm9sLmFzeW5jRGlzcG9zZV07XG4gICAgfVxuICAgIGlmIChkaXNwb3NlID09PSB2b2lkIDApIHtcbiAgICAgICAgaWYgKCFTeW1ib2wuZGlzcG9zZSkgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlN5bWJvbC5kaXNwb3NlIGlzIG5vdCBkZWZpbmVkLlwiKTtcbiAgICAgICAgZGlzcG9zZSA9IHZhbHVlW1N5bWJvbC5kaXNwb3NlXTtcbiAgICB9XG4gICAgaWYgKHR5cGVvZiBkaXNwb3NlICE9PSBcImZ1bmN0aW9uXCIpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJPYmplY3Qgbm90IGRpc3Bvc2FibGUuXCIpO1xuICAgIGVudi5zdGFjay5wdXNoKHsgdmFsdWU6IHZhbHVlLCBkaXNwb3NlOiBkaXNwb3NlLCBhc3luYzogYXN5bmMgfSk7XG4gIH1cbiAgZWxzZSBpZiAoYXN5bmMpIHtcbiAgICBlbnYuc3RhY2sucHVzaCh7IGFzeW5jOiB0cnVlIH0pO1xuICB9XG4gIHJldHVybiB2YWx1ZTtcbn1cblxudmFyIF9TdXBwcmVzc2VkRXJyb3IgPSB0eXBlb2YgU3VwcHJlc3NlZEVycm9yID09PSBcImZ1bmN0aW9uXCIgPyBTdXBwcmVzc2VkRXJyb3IgOiBmdW5jdGlvbiAoZXJyb3IsIHN1cHByZXNzZWQsIG1lc3NhZ2UpIHtcbiAgdmFyIGUgPSBuZXcgRXJyb3IobWVzc2FnZSk7XG4gIHJldHVybiBlLm5hbWUgPSBcIlN1cHByZXNzZWRFcnJvclwiLCBlLmVycm9yID0gZXJyb3IsIGUuc3VwcHJlc3NlZCA9IHN1cHByZXNzZWQsIGU7XG59O1xuXG5leHBvcnQgZnVuY3Rpb24gX19kaXNwb3NlUmVzb3VyY2VzKGVudikge1xuICBmdW5jdGlvbiBmYWlsKGUpIHtcbiAgICBlbnYuZXJyb3IgPSBlbnYuaGFzRXJyb3IgPyBuZXcgX1N1cHByZXNzZWRFcnJvcihlLCBlbnYuZXJyb3IsIFwiQW4gZXJyb3Igd2FzIHN1cHByZXNzZWQgZHVyaW5nIGRpc3Bvc2FsLlwiKSA6IGU7XG4gICAgZW52Lmhhc0Vycm9yID0gdHJ1ZTtcbiAgfVxuICBmdW5jdGlvbiBuZXh0KCkge1xuICAgIHdoaWxlIChlbnYuc3RhY2subGVuZ3RoKSB7XG4gICAgICB2YXIgcmVjID0gZW52LnN0YWNrLnBvcCgpO1xuICAgICAgdHJ5IHtcbiAgICAgICAgdmFyIHJlc3VsdCA9IHJlYy5kaXNwb3NlICYmIHJlYy5kaXNwb3NlLmNhbGwocmVjLnZhbHVlKTtcbiAgICAgICAgaWYgKHJlYy5hc3luYykgcmV0dXJuIFByb21pc2UucmVzb2x2ZShyZXN1bHQpLnRoZW4obmV4dCwgZnVuY3Rpb24oZSkgeyBmYWlsKGUpOyByZXR1cm4gbmV4dCgpOyB9KTtcbiAgICAgIH1cbiAgICAgIGNhdGNoIChlKSB7XG4gICAgICAgICAgZmFpbChlKTtcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKGVudi5oYXNFcnJvcikgdGhyb3cgZW52LmVycm9yO1xuICB9XG4gIHJldHVybiBuZXh0KCk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgX19leHRlbmRzLFxuICBfX2Fzc2lnbixcbiAgX19yZXN0LFxuICBfX2RlY29yYXRlLFxuICBfX3BhcmFtLFxuICBfX21ldGFkYXRhLFxuICBfX2F3YWl0ZXIsXG4gIF9fZ2VuZXJhdG9yLFxuICBfX2NyZWF0ZUJpbmRpbmcsXG4gIF9fZXhwb3J0U3RhcixcbiAgX192YWx1ZXMsXG4gIF9fcmVhZCxcbiAgX19zcHJlYWQsXG4gIF9fc3ByZWFkQXJyYXlzLFxuICBfX3NwcmVhZEFycmF5LFxuICBfX2F3YWl0LFxuICBfX2FzeW5jR2VuZXJhdG9yLFxuICBfX2FzeW5jRGVsZWdhdG9yLFxuICBfX2FzeW5jVmFsdWVzLFxuICBfX21ha2VUZW1wbGF0ZU9iamVjdCxcbiAgX19pbXBvcnRTdGFyLFxuICBfX2ltcG9ydERlZmF1bHQsXG4gIF9fY2xhc3NQcml2YXRlRmllbGRHZXQsXG4gIF9fY2xhc3NQcml2YXRlRmllbGRTZXQsXG4gIF9fY2xhc3NQcml2YXRlRmllbGRJbixcbiAgX19hZGREaXNwb3NhYmxlUmVzb3VyY2UsXG4gIF9fZGlzcG9zZVJlc291cmNlcyxcbn07XG4iLCJleHBvcnQgdmFyIE1TID0gJy1tcy0nXG5leHBvcnQgdmFyIE1PWiA9ICctbW96LSdcbmV4cG9ydCB2YXIgV0VCS0lUID0gJy13ZWJraXQtJ1xuXG5leHBvcnQgdmFyIENPTU1FTlQgPSAnY29tbSdcbmV4cG9ydCB2YXIgUlVMRVNFVCA9ICdydWxlJ1xuZXhwb3J0IHZhciBERUNMQVJBVElPTiA9ICdkZWNsJ1xuXG5leHBvcnQgdmFyIFBBR0UgPSAnQHBhZ2UnXG5leHBvcnQgdmFyIE1FRElBID0gJ0BtZWRpYSdcbmV4cG9ydCB2YXIgSU1QT1JUID0gJ0BpbXBvcnQnXG5leHBvcnQgdmFyIENIQVJTRVQgPSAnQGNoYXJzZXQnXG5leHBvcnQgdmFyIFZJRVdQT1JUID0gJ0B2aWV3cG9ydCdcbmV4cG9ydCB2YXIgU1VQUE9SVFMgPSAnQHN1cHBvcnRzJ1xuZXhwb3J0IHZhciBET0NVTUVOVCA9ICdAZG9jdW1lbnQnXG5leHBvcnQgdmFyIE5BTUVTUEFDRSA9ICdAbmFtZXNwYWNlJ1xuZXhwb3J0IHZhciBLRVlGUkFNRVMgPSAnQGtleWZyYW1lcydcbmV4cG9ydCB2YXIgRk9OVF9GQUNFID0gJ0Bmb250LWZhY2UnXG5leHBvcnQgdmFyIENPVU5URVJfU1RZTEUgPSAnQGNvdW50ZXItc3R5bGUnXG5leHBvcnQgdmFyIEZPTlRfRkVBVFVSRV9WQUxVRVMgPSAnQGZvbnQtZmVhdHVyZS12YWx1ZXMnXG5leHBvcnQgdmFyIExBWUVSID0gJ0BsYXllcidcbmV4cG9ydCB2YXIgU0NPUEUgPSAnQHNjb3BlJ1xuIiwiLyoqXG4gKiBAcGFyYW0ge251bWJlcn1cbiAqIEByZXR1cm4ge251bWJlcn1cbiAqL1xuZXhwb3J0IHZhciBhYnMgPSBNYXRoLmFic1xuXG4vKipcbiAqIEBwYXJhbSB7bnVtYmVyfVxuICogQHJldHVybiB7c3RyaW5nfVxuICovXG5leHBvcnQgdmFyIGZyb20gPSBTdHJpbmcuZnJvbUNoYXJDb2RlXG5cbi8qKlxuICogQHBhcmFtIHtvYmplY3R9XG4gKiBAcmV0dXJuIHtvYmplY3R9XG4gKi9cbmV4cG9ydCB2YXIgYXNzaWduID0gT2JqZWN0LmFzc2lnblxuXG4vKipcbiAqIEBwYXJhbSB7c3RyaW5nfSB2YWx1ZVxuICogQHBhcmFtIHtudW1iZXJ9IGxlbmd0aFxuICogQHJldHVybiB7bnVtYmVyfVxuICovXG5leHBvcnQgZnVuY3Rpb24gaGFzaCAodmFsdWUsIGxlbmd0aCkge1xuXHRyZXR1cm4gY2hhcmF0KHZhbHVlLCAwKSBeIDQ1ID8gKCgoKCgoKGxlbmd0aCA8PCAyKSBeIGNoYXJhdCh2YWx1ZSwgMCkpIDw8IDIpIF4gY2hhcmF0KHZhbHVlLCAxKSkgPDwgMikgXiBjaGFyYXQodmFsdWUsIDIpKSA8PCAyKSBeIGNoYXJhdCh2YWx1ZSwgMykgOiAwXG59XG5cbi8qKlxuICogQHBhcmFtIHtzdHJpbmd9IHZhbHVlXG4gKiBAcmV0dXJuIHtzdHJpbmd9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB0cmltICh2YWx1ZSkge1xuXHRyZXR1cm4gdmFsdWUudHJpbSgpXG59XG5cbi8qKlxuICogQHBhcmFtIHtzdHJpbmd9IHZhbHVlXG4gKiBAcGFyYW0ge1JlZ0V4cH0gcGF0dGVyblxuICogQHJldHVybiB7c3RyaW5nP31cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIG1hdGNoICh2YWx1ZSwgcGF0dGVybikge1xuXHRyZXR1cm4gKHZhbHVlID0gcGF0dGVybi5leGVjKHZhbHVlKSkgPyB2YWx1ZVswXSA6IHZhbHVlXG59XG5cbi8qKlxuICogQHBhcmFtIHtzdHJpbmd9IHZhbHVlXG4gKiBAcGFyYW0geyhzdHJpbmd8UmVnRXhwKX0gcGF0dGVyblxuICogQHBhcmFtIHtzdHJpbmd9IHJlcGxhY2VtZW50XG4gKiBAcmV0dXJuIHtzdHJpbmd9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiByZXBsYWNlICh2YWx1ZSwgcGF0dGVybiwgcmVwbGFjZW1lbnQpIHtcblx0cmV0dXJuIHZhbHVlLnJlcGxhY2UocGF0dGVybiwgcmVwbGFjZW1lbnQpXG59XG5cbi8qKlxuICogQHBhcmFtIHtzdHJpbmd9IHZhbHVlXG4gKiBAcGFyYW0ge3N0cmluZ30gc2VhcmNoXG4gKiBAcGFyYW0ge251bWJlcn0gcG9zaXRpb25cbiAqIEByZXR1cm4ge251bWJlcn1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGluZGV4b2YgKHZhbHVlLCBzZWFyY2gsIHBvc2l0aW9uKSB7XG5cdHJldHVybiB2YWx1ZS5pbmRleE9mKHNlYXJjaCwgcG9zaXRpb24pXG59XG5cbi8qKlxuICogQHBhcmFtIHtzdHJpbmd9IHZhbHVlXG4gKiBAcGFyYW0ge251bWJlcn0gaW5kZXhcbiAqIEByZXR1cm4ge251bWJlcn1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNoYXJhdCAodmFsdWUsIGluZGV4KSB7XG5cdHJldHVybiB2YWx1ZS5jaGFyQ29kZUF0KGluZGV4KSB8IDBcbn1cblxuLyoqXG4gKiBAcGFyYW0ge3N0cmluZ30gdmFsdWVcbiAqIEBwYXJhbSB7bnVtYmVyfSBiZWdpblxuICogQHBhcmFtIHtudW1iZXJ9IGVuZFxuICogQHJldHVybiB7c3RyaW5nfVxuICovXG5leHBvcnQgZnVuY3Rpb24gc3Vic3RyICh2YWx1ZSwgYmVnaW4sIGVuZCkge1xuXHRyZXR1cm4gdmFsdWUuc2xpY2UoYmVnaW4sIGVuZClcbn1cblxuLyoqXG4gKiBAcGFyYW0ge3N0cmluZ30gdmFsdWVcbiAqIEByZXR1cm4ge251bWJlcn1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHN0cmxlbiAodmFsdWUpIHtcblx0cmV0dXJuIHZhbHVlLmxlbmd0aFxufVxuXG4vKipcbiAqIEBwYXJhbSB7YW55W119IHZhbHVlXG4gKiBAcmV0dXJuIHtudW1iZXJ9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzaXplb2YgKHZhbHVlKSB7XG5cdHJldHVybiB2YWx1ZS5sZW5ndGhcbn1cblxuLyoqXG4gKiBAcGFyYW0ge2FueX0gdmFsdWVcbiAqIEBwYXJhbSB7YW55W119IGFycmF5XG4gKiBAcmV0dXJuIHthbnl9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBhcHBlbmQgKHZhbHVlLCBhcnJheSkge1xuXHRyZXR1cm4gYXJyYXkucHVzaCh2YWx1ZSksIHZhbHVlXG59XG5cbi8qKlxuICogQHBhcmFtIHtzdHJpbmdbXX0gYXJyYXlcbiAqIEBwYXJhbSB7ZnVuY3Rpb259IGNhbGxiYWNrXG4gKiBAcmV0dXJuIHtzdHJpbmd9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjb21iaW5lIChhcnJheSwgY2FsbGJhY2spIHtcblx0cmV0dXJuIGFycmF5Lm1hcChjYWxsYmFjaykuam9pbignJylcbn1cblxuLyoqXG4gKiBAcGFyYW0ge3N0cmluZ1tdfSBhcnJheVxuICogQHBhcmFtIHtSZWdFeHB9IHBhdHRlcm5cbiAqIEByZXR1cm4ge3N0cmluZ1tdfVxuICovXG5leHBvcnQgZnVuY3Rpb24gZmlsdGVyIChhcnJheSwgcGF0dGVybikge1xuXHRyZXR1cm4gYXJyYXkuZmlsdGVyKGZ1bmN0aW9uICh2YWx1ZSkgeyByZXR1cm4gIW1hdGNoKHZhbHVlLCBwYXR0ZXJuKSB9KVxufVxuIiwiaW1wb3J0IHtmcm9tLCB0cmltLCBjaGFyYXQsIHN0cmxlbiwgc3Vic3RyLCBhcHBlbmQsIGFzc2lnbn0gZnJvbSAnLi9VdGlsaXR5LmpzJ1xuXG5leHBvcnQgdmFyIGxpbmUgPSAxXG5leHBvcnQgdmFyIGNvbHVtbiA9IDFcbmV4cG9ydCB2YXIgbGVuZ3RoID0gMFxuZXhwb3J0IHZhciBwb3NpdGlvbiA9IDBcbmV4cG9ydCB2YXIgY2hhcmFjdGVyID0gMFxuZXhwb3J0IHZhciBjaGFyYWN0ZXJzID0gJydcblxuLyoqXG4gKiBAcGFyYW0ge3N0cmluZ30gdmFsdWVcbiAqIEBwYXJhbSB7b2JqZWN0IHwgbnVsbH0gcm9vdFxuICogQHBhcmFtIHtvYmplY3QgfCBudWxsfSBwYXJlbnRcbiAqIEBwYXJhbSB7c3RyaW5nfSB0eXBlXG4gKiBAcGFyYW0ge3N0cmluZ1tdIHwgc3RyaW5nfSBwcm9wc1xuICogQHBhcmFtIHtvYmplY3RbXSB8IHN0cmluZ30gY2hpbGRyZW5cbiAqIEBwYXJhbSB7b2JqZWN0W119IHNpYmxpbmdzXG4gKiBAcGFyYW0ge251bWJlcn0gbGVuZ3RoXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBub2RlICh2YWx1ZSwgcm9vdCwgcGFyZW50LCB0eXBlLCBwcm9wcywgY2hpbGRyZW4sIGxlbmd0aCwgc2libGluZ3MpIHtcblx0cmV0dXJuIHt2YWx1ZTogdmFsdWUsIHJvb3Q6IHJvb3QsIHBhcmVudDogcGFyZW50LCB0eXBlOiB0eXBlLCBwcm9wczogcHJvcHMsIGNoaWxkcmVuOiBjaGlsZHJlbiwgbGluZTogbGluZSwgY29sdW1uOiBjb2x1bW4sIGxlbmd0aDogbGVuZ3RoLCByZXR1cm46ICcnLCBzaWJsaW5nczogc2libGluZ3N9XG59XG5cbi8qKlxuICogQHBhcmFtIHtvYmplY3R9IHJvb3RcbiAqIEBwYXJhbSB7b2JqZWN0fSBwcm9wc1xuICogQHJldHVybiB7b2JqZWN0fVxuICovXG5leHBvcnQgZnVuY3Rpb24gY29weSAocm9vdCwgcHJvcHMpIHtcblx0cmV0dXJuIGFzc2lnbihub2RlKCcnLCBudWxsLCBudWxsLCAnJywgbnVsbCwgbnVsbCwgMCwgcm9vdC5zaWJsaW5ncyksIHJvb3QsIHtsZW5ndGg6IC1yb290Lmxlbmd0aH0sIHByb3BzKVxufVxuXG4vKipcbiAqIEBwYXJhbSB7b2JqZWN0fSByb290XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBsaWZ0IChyb290KSB7XG5cdHdoaWxlIChyb290LnJvb3QpXG5cdFx0cm9vdCA9IGNvcHkocm9vdC5yb290LCB7Y2hpbGRyZW46IFtyb290XX0pXG5cblx0YXBwZW5kKHJvb3QsIHJvb3Quc2libGluZ3MpXG59XG5cbi8qKlxuICogQHJldHVybiB7bnVtYmVyfVxuICovXG5leHBvcnQgZnVuY3Rpb24gY2hhciAoKSB7XG5cdHJldHVybiBjaGFyYWN0ZXJcbn1cblxuLyoqXG4gKiBAcmV0dXJuIHtudW1iZXJ9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBwcmV2ICgpIHtcblx0Y2hhcmFjdGVyID0gcG9zaXRpb24gPiAwID8gY2hhcmF0KGNoYXJhY3RlcnMsIC0tcG9zaXRpb24pIDogMFxuXG5cdGlmIChjb2x1bW4tLSwgY2hhcmFjdGVyID09PSAxMClcblx0XHRjb2x1bW4gPSAxLCBsaW5lLS1cblxuXHRyZXR1cm4gY2hhcmFjdGVyXG59XG5cbi8qKlxuICogQHJldHVybiB7bnVtYmVyfVxuICovXG5leHBvcnQgZnVuY3Rpb24gbmV4dCAoKSB7XG5cdGNoYXJhY3RlciA9IHBvc2l0aW9uIDwgbGVuZ3RoID8gY2hhcmF0KGNoYXJhY3RlcnMsIHBvc2l0aW9uKyspIDogMFxuXG5cdGlmIChjb2x1bW4rKywgY2hhcmFjdGVyID09PSAxMClcblx0XHRjb2x1bW4gPSAxLCBsaW5lKytcblxuXHRyZXR1cm4gY2hhcmFjdGVyXG59XG5cbi8qKlxuICogQHJldHVybiB7bnVtYmVyfVxuICovXG5leHBvcnQgZnVuY3Rpb24gcGVlayAoKSB7XG5cdHJldHVybiBjaGFyYXQoY2hhcmFjdGVycywgcG9zaXRpb24pXG59XG5cbi8qKlxuICogQHJldHVybiB7bnVtYmVyfVxuICovXG5leHBvcnQgZnVuY3Rpb24gY2FyZXQgKCkge1xuXHRyZXR1cm4gcG9zaXRpb25cbn1cblxuLyoqXG4gKiBAcGFyYW0ge251bWJlcn0gYmVnaW5cbiAqIEBwYXJhbSB7bnVtYmVyfSBlbmRcbiAqIEByZXR1cm4ge3N0cmluZ31cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHNsaWNlIChiZWdpbiwgZW5kKSB7XG5cdHJldHVybiBzdWJzdHIoY2hhcmFjdGVycywgYmVnaW4sIGVuZClcbn1cblxuLyoqXG4gKiBAcGFyYW0ge251bWJlcn0gdHlwZVxuICogQHJldHVybiB7bnVtYmVyfVxuICovXG5leHBvcnQgZnVuY3Rpb24gdG9rZW4gKHR5cGUpIHtcblx0c3dpdGNoICh0eXBlKSB7XG5cdFx0Ly8gXFwwIFxcdCBcXG4gXFxyIFxccyB3aGl0ZXNwYWNlIHRva2VuXG5cdFx0Y2FzZSAwOiBjYXNlIDk6IGNhc2UgMTA6IGNhc2UgMTM6IGNhc2UgMzI6XG5cdFx0XHRyZXR1cm4gNVxuXHRcdC8vICEgKyAsIC8gPiBAIH4gaXNvbGF0ZSB0b2tlblxuXHRcdGNhc2UgMzM6IGNhc2UgNDM6IGNhc2UgNDQ6IGNhc2UgNDc6IGNhc2UgNjI6IGNhc2UgNjQ6IGNhc2UgMTI2OlxuXHRcdC8vIDsgeyB9IGJyZWFrcG9pbnQgdG9rZW5cblx0XHRjYXNlIDU5OiBjYXNlIDEyMzogY2FzZSAxMjU6XG5cdFx0XHRyZXR1cm4gNFxuXHRcdC8vIDogYWNjb21wYW5pZWQgdG9rZW5cblx0XHRjYXNlIDU4OlxuXHRcdFx0cmV0dXJuIDNcblx0XHQvLyBcIiAnICggWyBvcGVuaW5nIGRlbGltaXQgdG9rZW5cblx0XHRjYXNlIDM0OiBjYXNlIDM5OiBjYXNlIDQwOiBjYXNlIDkxOlxuXHRcdFx0cmV0dXJuIDJcblx0XHQvLyApIF0gY2xvc2luZyBkZWxpbWl0IHRva2VuXG5cdFx0Y2FzZSA0MTogY2FzZSA5Mzpcblx0XHRcdHJldHVybiAxXG5cdH1cblxuXHRyZXR1cm4gMFxufVxuXG4vKipcbiAqIEBwYXJhbSB7c3RyaW5nfSB2YWx1ZVxuICogQHJldHVybiB7YW55W119XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBhbGxvYyAodmFsdWUpIHtcblx0cmV0dXJuIGxpbmUgPSBjb2x1bW4gPSAxLCBsZW5ndGggPSBzdHJsZW4oY2hhcmFjdGVycyA9IHZhbHVlKSwgcG9zaXRpb24gPSAwLCBbXVxufVxuXG4vKipcbiAqIEBwYXJhbSB7YW55fSB2YWx1ZVxuICogQHJldHVybiB7YW55fVxuICovXG5leHBvcnQgZnVuY3Rpb24gZGVhbGxvYyAodmFsdWUpIHtcblx0cmV0dXJuIGNoYXJhY3RlcnMgPSAnJywgdmFsdWVcbn1cblxuLyoqXG4gKiBAcGFyYW0ge251bWJlcn0gdHlwZVxuICogQHJldHVybiB7c3RyaW5nfVxuICovXG5leHBvcnQgZnVuY3Rpb24gZGVsaW1pdCAodHlwZSkge1xuXHRyZXR1cm4gdHJpbShzbGljZShwb3NpdGlvbiAtIDEsIGRlbGltaXRlcih0eXBlID09PSA5MSA/IHR5cGUgKyAyIDogdHlwZSA9PT0gNDAgPyB0eXBlICsgMSA6IHR5cGUpKSlcbn1cblxuLyoqXG4gKiBAcGFyYW0ge3N0cmluZ30gdmFsdWVcbiAqIEByZXR1cm4ge3N0cmluZ1tdfVxuICovXG5leHBvcnQgZnVuY3Rpb24gdG9rZW5pemUgKHZhbHVlKSB7XG5cdHJldHVybiBkZWFsbG9jKHRva2VuaXplcihhbGxvYyh2YWx1ZSkpKVxufVxuXG4vKipcbiAqIEBwYXJhbSB7bnVtYmVyfSB0eXBlXG4gKiBAcmV0dXJuIHtzdHJpbmd9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB3aGl0ZXNwYWNlICh0eXBlKSB7XG5cdHdoaWxlIChjaGFyYWN0ZXIgPSBwZWVrKCkpXG5cdFx0aWYgKGNoYXJhY3RlciA8IDMzKVxuXHRcdFx0bmV4dCgpXG5cdFx0ZWxzZVxuXHRcdFx0YnJlYWtcblxuXHRyZXR1cm4gdG9rZW4odHlwZSkgPiAyIHx8IHRva2VuKGNoYXJhY3RlcikgPiAzID8gJycgOiAnICdcbn1cblxuLyoqXG4gKiBAcGFyYW0ge3N0cmluZ1tdfSBjaGlsZHJlblxuICogQHJldHVybiB7c3RyaW5nW119XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB0b2tlbml6ZXIgKGNoaWxkcmVuKSB7XG5cdHdoaWxlIChuZXh0KCkpXG5cdFx0c3dpdGNoICh0b2tlbihjaGFyYWN0ZXIpKSB7XG5cdFx0XHRjYXNlIDA6IGFwcGVuZChpZGVudGlmaWVyKHBvc2l0aW9uIC0gMSksIGNoaWxkcmVuKVxuXHRcdFx0XHRicmVha1xuXHRcdFx0Y2FzZSAyOiBhcHBlbmQoZGVsaW1pdChjaGFyYWN0ZXIpLCBjaGlsZHJlbilcblx0XHRcdFx0YnJlYWtcblx0XHRcdGRlZmF1bHQ6IGFwcGVuZChmcm9tKGNoYXJhY3RlciksIGNoaWxkcmVuKVxuXHRcdH1cblxuXHRyZXR1cm4gY2hpbGRyZW5cbn1cblxuLyoqXG4gKiBAcGFyYW0ge251bWJlcn0gaW5kZXhcbiAqIEBwYXJhbSB7bnVtYmVyfSBjb3VudFxuICogQHJldHVybiB7c3RyaW5nfVxuICovXG5leHBvcnQgZnVuY3Rpb24gZXNjYXBpbmcgKGluZGV4LCBjb3VudCkge1xuXHR3aGlsZSAoLS1jb3VudCAmJiBuZXh0KCkpXG5cdFx0Ly8gbm90IDAtOSBBLUYgYS1mXG5cdFx0aWYgKGNoYXJhY3RlciA8IDQ4IHx8IGNoYXJhY3RlciA+IDEwMiB8fCAoY2hhcmFjdGVyID4gNTcgJiYgY2hhcmFjdGVyIDwgNjUpIHx8IChjaGFyYWN0ZXIgPiA3MCAmJiBjaGFyYWN0ZXIgPCA5NykpXG5cdFx0XHRicmVha1xuXG5cdHJldHVybiBzbGljZShpbmRleCwgY2FyZXQoKSArIChjb3VudCA8IDYgJiYgcGVlaygpID09IDMyICYmIG5leHQoKSA9PSAzMikpXG59XG5cbi8qKlxuICogQHBhcmFtIHtudW1iZXJ9IHR5cGVcbiAqIEByZXR1cm4ge251bWJlcn1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGRlbGltaXRlciAodHlwZSkge1xuXHR3aGlsZSAobmV4dCgpKVxuXHRcdHN3aXRjaCAoY2hhcmFjdGVyKSB7XG5cdFx0XHQvLyBdICkgXCIgJ1xuXHRcdFx0Y2FzZSB0eXBlOlxuXHRcdFx0XHRyZXR1cm4gcG9zaXRpb25cblx0XHRcdC8vIFwiICdcblx0XHRcdGNhc2UgMzQ6IGNhc2UgMzk6XG5cdFx0XHRcdGlmICh0eXBlICE9PSAzNCAmJiB0eXBlICE9PSAzOSlcblx0XHRcdFx0XHRkZWxpbWl0ZXIoY2hhcmFjdGVyKVxuXHRcdFx0XHRicmVha1xuXHRcdFx0Ly8gKFxuXHRcdFx0Y2FzZSA0MDpcblx0XHRcdFx0aWYgKHR5cGUgPT09IDQxKVxuXHRcdFx0XHRcdGRlbGltaXRlcih0eXBlKVxuXHRcdFx0XHRicmVha1xuXHRcdFx0Ly8gXFxcblx0XHRcdGNhc2UgOTI6XG5cdFx0XHRcdG5leHQoKVxuXHRcdFx0XHRicmVha1xuXHRcdH1cblxuXHRyZXR1cm4gcG9zaXRpb25cbn1cblxuLyoqXG4gKiBAcGFyYW0ge251bWJlcn0gdHlwZVxuICogQHBhcmFtIHtudW1iZXJ9IGluZGV4XG4gKiBAcmV0dXJuIHtudW1iZXJ9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjb21tZW50ZXIgKHR5cGUsIGluZGV4KSB7XG5cdHdoaWxlIChuZXh0KCkpXG5cdFx0Ly8gLy9cblx0XHRpZiAodHlwZSArIGNoYXJhY3RlciA9PT0gNDcgKyAxMClcblx0XHRcdGJyZWFrXG5cdFx0Ly8gLypcblx0XHRlbHNlIGlmICh0eXBlICsgY2hhcmFjdGVyID09PSA0MiArIDQyICYmIHBlZWsoKSA9PT0gNDcpXG5cdFx0XHRicmVha1xuXG5cdHJldHVybiAnLyonICsgc2xpY2UoaW5kZXgsIHBvc2l0aW9uIC0gMSkgKyAnKicgKyBmcm9tKHR5cGUgPT09IDQ3ID8gdHlwZSA6IG5leHQoKSlcbn1cblxuLyoqXG4gKiBAcGFyYW0ge251bWJlcn0gaW5kZXhcbiAqIEByZXR1cm4ge3N0cmluZ31cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlkZW50aWZpZXIgKGluZGV4KSB7XG5cdHdoaWxlICghdG9rZW4ocGVlaygpKSlcblx0XHRuZXh0KClcblxuXHRyZXR1cm4gc2xpY2UoaW5kZXgsIHBvc2l0aW9uKVxufVxuIiwiaW1wb3J0IHtJTVBPUlQsIExBWUVSLCBDT01NRU5ULCBSVUxFU0VULCBERUNMQVJBVElPTiwgS0VZRlJBTUVTfSBmcm9tICcuL0VudW0uanMnXG5pbXBvcnQge3N0cmxlbn0gZnJvbSAnLi9VdGlsaXR5LmpzJ1xuXG4vKipcbiAqIEBwYXJhbSB7b2JqZWN0W119IGNoaWxkcmVuXG4gKiBAcGFyYW0ge2Z1bmN0aW9ufSBjYWxsYmFja1xuICogQHJldHVybiB7c3RyaW5nfVxuICovXG5leHBvcnQgZnVuY3Rpb24gc2VyaWFsaXplIChjaGlsZHJlbiwgY2FsbGJhY2spIHtcblx0dmFyIG91dHB1dCA9ICcnXG5cblx0Zm9yICh2YXIgaSA9IDA7IGkgPCBjaGlsZHJlbi5sZW5ndGg7IGkrKylcblx0XHRvdXRwdXQgKz0gY2FsbGJhY2soY2hpbGRyZW5baV0sIGksIGNoaWxkcmVuLCBjYWxsYmFjaykgfHwgJydcblxuXHRyZXR1cm4gb3V0cHV0XG59XG5cbi8qKlxuICogQHBhcmFtIHtvYmplY3R9IGVsZW1lbnRcbiAqIEBwYXJhbSB7bnVtYmVyfSBpbmRleFxuICogQHBhcmFtIHtvYmplY3RbXX0gY2hpbGRyZW5cbiAqIEBwYXJhbSB7ZnVuY3Rpb259IGNhbGxiYWNrXG4gKiBAcmV0dXJuIHtzdHJpbmd9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzdHJpbmdpZnkgKGVsZW1lbnQsIGluZGV4LCBjaGlsZHJlbiwgY2FsbGJhY2spIHtcblx0c3dpdGNoIChlbGVtZW50LnR5cGUpIHtcblx0XHRjYXNlIExBWUVSOiBpZiAoZWxlbWVudC5jaGlsZHJlbi5sZW5ndGgpIGJyZWFrXG5cdFx0Y2FzZSBJTVBPUlQ6IGNhc2UgREVDTEFSQVRJT046IHJldHVybiBlbGVtZW50LnJldHVybiA9IGVsZW1lbnQucmV0dXJuIHx8IGVsZW1lbnQudmFsdWVcblx0XHRjYXNlIENPTU1FTlQ6IHJldHVybiAnJ1xuXHRcdGNhc2UgS0VZRlJBTUVTOiByZXR1cm4gZWxlbWVudC5yZXR1cm4gPSBlbGVtZW50LnZhbHVlICsgJ3snICsgc2VyaWFsaXplKGVsZW1lbnQuY2hpbGRyZW4sIGNhbGxiYWNrKSArICd9J1xuXHRcdGNhc2UgUlVMRVNFVDogaWYgKCFzdHJsZW4oZWxlbWVudC52YWx1ZSA9IGVsZW1lbnQucHJvcHMuam9pbignLCcpKSkgcmV0dXJuICcnXG5cdH1cblxuXHRyZXR1cm4gc3RybGVuKGNoaWxkcmVuID0gc2VyaWFsaXplKGVsZW1lbnQuY2hpbGRyZW4sIGNhbGxiYWNrKSkgPyBlbGVtZW50LnJldHVybiA9IGVsZW1lbnQudmFsdWUgKyAneycgKyBjaGlsZHJlbiArICd9JyA6ICcnXG59XG4iLCJpbXBvcnQge01TLCBNT1osIFdFQktJVH0gZnJvbSAnLi9FbnVtLmpzJ1xuaW1wb3J0IHtoYXNoLCBjaGFyYXQsIHN0cmxlbiwgaW5kZXhvZiwgcmVwbGFjZSwgc3Vic3RyLCBtYXRjaH0gZnJvbSAnLi9VdGlsaXR5LmpzJ1xuXG4vKipcbiAqIEBwYXJhbSB7c3RyaW5nfSB2YWx1ZVxuICogQHBhcmFtIHtudW1iZXJ9IGxlbmd0aFxuICogQHBhcmFtIHtvYmplY3RbXX0gY2hpbGRyZW5cbiAqIEByZXR1cm4ge3N0cmluZ31cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHByZWZpeCAodmFsdWUsIGxlbmd0aCwgY2hpbGRyZW4pIHtcblx0c3dpdGNoIChoYXNoKHZhbHVlLCBsZW5ndGgpKSB7XG5cdFx0Ly8gY29sb3ItYWRqdXN0XG5cdFx0Y2FzZSA1MTAzOlxuXHRcdFx0cmV0dXJuIFdFQktJVCArICdwcmludC0nICsgdmFsdWUgKyB2YWx1ZVxuXHRcdC8vIGFuaW1hdGlvbiwgYW5pbWF0aW9uLShkZWxheXxkaXJlY3Rpb258ZHVyYXRpb258ZmlsbC1tb2RlfGl0ZXJhdGlvbi1jb3VudHxuYW1lfHBsYXktc3RhdGV8dGltaW5nLWZ1bmN0aW9uKVxuXHRcdGNhc2UgNTczNzogY2FzZSA0MjAxOiBjYXNlIDMxNzc6IGNhc2UgMzQzMzogY2FzZSAxNjQxOiBjYXNlIDQ0NTc6IGNhc2UgMjkyMTpcblx0XHQvLyB0ZXh0LWRlY29yYXRpb24sIGZpbHRlciwgY2xpcC1wYXRoLCBiYWNrZmFjZS12aXNpYmlsaXR5LCBjb2x1bW4sIGJveC1kZWNvcmF0aW9uLWJyZWFrXG5cdFx0Y2FzZSA1NTcyOiBjYXNlIDYzNTY6IGNhc2UgNTg0NDogY2FzZSAzMTkxOiBjYXNlIDY2NDU6IGNhc2UgMzAwNTpcblx0XHQvLyBtYXNrLCBtYXNrLWltYWdlLCBtYXNrLShtb2RlfGNsaXB8c2l6ZSksIG1hc2stKHJlcGVhdHxvcmlnaW4pLCBtYXNrLXBvc2l0aW9uLCBtYXNrLWNvbXBvc2l0ZSxcblx0XHRjYXNlIDYzOTE6IGNhc2UgNTg3OTogY2FzZSA1NjIzOiBjYXNlIDYxMzU6IGNhc2UgNDU5OTogY2FzZSA0ODU1OlxuXHRcdC8vIGJhY2tncm91bmQtY2xpcCwgY29sdW1ucywgY29sdW1uLShjb3VudHxmaWxsfGdhcHxydWxlfHJ1bGUtY29sb3J8cnVsZS1zdHlsZXxydWxlLXdpZHRofHNwYW58d2lkdGgpXG5cdFx0Y2FzZSA0MjE1OiBjYXNlIDYzODk6IGNhc2UgNTEwOTogY2FzZSA1MzY1OiBjYXNlIDU2MjE6IGNhc2UgMzgyOTpcblx0XHRcdHJldHVybiBXRUJLSVQgKyB2YWx1ZSArIHZhbHVlXG5cdFx0Ly8gdGFiLXNpemVcblx0XHRjYXNlIDQ3ODk6XG5cdFx0XHRyZXR1cm4gTU9aICsgdmFsdWUgKyB2YWx1ZVxuXHRcdC8vIGFwcGVhcmFuY2UsIHVzZXItc2VsZWN0LCB0cmFuc2Zvcm0sIGh5cGhlbnMsIHRleHQtc2l6ZS1hZGp1c3Rcblx0XHRjYXNlIDUzNDk6IGNhc2UgNDI0NjogY2FzZSA0ODEwOiBjYXNlIDY5Njg6IGNhc2UgMjc1Njpcblx0XHRcdHJldHVybiBXRUJLSVQgKyB2YWx1ZSArIE1PWiArIHZhbHVlICsgTVMgKyB2YWx1ZSArIHZhbHVlXG5cdFx0Ly8gd3JpdGluZy1tb2RlXG5cdFx0Y2FzZSA1OTM2OlxuXHRcdFx0c3dpdGNoIChjaGFyYXQodmFsdWUsIGxlbmd0aCArIDExKSkge1xuXHRcdFx0XHQvLyB2ZXJ0aWNhbC1sKHIpXG5cdFx0XHRcdGNhc2UgMTE0OlxuXHRcdFx0XHRcdHJldHVybiBXRUJLSVQgKyB2YWx1ZSArIE1TICsgcmVwbGFjZSh2YWx1ZSwgL1tzdmhdXFx3Ky1bdGJscl17Mn0vLCAndGInKSArIHZhbHVlXG5cdFx0XHRcdC8vIHZlcnRpY2FsLXIobClcblx0XHRcdFx0Y2FzZSAxMDg6XG5cdFx0XHRcdFx0cmV0dXJuIFdFQktJVCArIHZhbHVlICsgTVMgKyByZXBsYWNlKHZhbHVlLCAvW3N2aF1cXHcrLVt0YmxyXXsyfS8sICd0Yi1ybCcpICsgdmFsdWVcblx0XHRcdFx0Ly8gaG9yaXpvbnRhbCgtKXRiXG5cdFx0XHRcdGNhc2UgNDU6XG5cdFx0XHRcdFx0cmV0dXJuIFdFQktJVCArIHZhbHVlICsgTVMgKyByZXBsYWNlKHZhbHVlLCAvW3N2aF1cXHcrLVt0YmxyXXsyfS8sICdscicpICsgdmFsdWVcblx0XHRcdFx0Ly8gZGVmYXVsdDogZmFsbHRocm91Z2ggdG8gYmVsb3dcblx0XHRcdH1cblx0XHQvLyBmbGV4LCBmbGV4LWRpcmVjdGlvbiwgc2Nyb2xsLXNuYXAtdHlwZSwgd3JpdGluZy1tb2RlXG5cdFx0Y2FzZSA2ODI4OiBjYXNlIDQyNjg6IGNhc2UgMjkwMzpcblx0XHRcdHJldHVybiBXRUJLSVQgKyB2YWx1ZSArIE1TICsgdmFsdWUgKyB2YWx1ZVxuXHRcdC8vIG9yZGVyXG5cdFx0Y2FzZSA2MTY1OlxuXHRcdFx0cmV0dXJuIFdFQktJVCArIHZhbHVlICsgTVMgKyAnZmxleC0nICsgdmFsdWUgKyB2YWx1ZVxuXHRcdC8vIGFsaWduLWl0ZW1zXG5cdFx0Y2FzZSA1MTg3OlxuXHRcdFx0cmV0dXJuIFdFQktJVCArIHZhbHVlICsgcmVwbGFjZSh2YWx1ZSwgLyhcXHcrKS4rKDpbXl0rKS8sIFdFQktJVCArICdib3gtJDEkMicgKyBNUyArICdmbGV4LSQxJDInKSArIHZhbHVlXG5cdFx0Ly8gYWxpZ24tc2VsZlxuXHRcdGNhc2UgNTQ0Mzpcblx0XHRcdHJldHVybiBXRUJLSVQgKyB2YWx1ZSArIE1TICsgJ2ZsZXgtaXRlbS0nICsgcmVwbGFjZSh2YWx1ZSwgL2ZsZXgtfC1zZWxmL2csICcnKSArICghbWF0Y2godmFsdWUsIC9mbGV4LXxiYXNlbGluZS8pID8gTVMgKyAnZ3JpZC1yb3ctJyArIHJlcGxhY2UodmFsdWUsIC9mbGV4LXwtc2VsZi9nLCAnJykgOiAnJykgKyB2YWx1ZVxuXHRcdC8vIGFsaWduLWNvbnRlbnRcblx0XHRjYXNlIDQ2NzU6XG5cdFx0XHRyZXR1cm4gV0VCS0lUICsgdmFsdWUgKyBNUyArICdmbGV4LWxpbmUtcGFjaycgKyByZXBsYWNlKHZhbHVlLCAvYWxpZ24tY29udGVudHxmbGV4LXwtc2VsZi9nLCAnJykgKyB2YWx1ZVxuXHRcdC8vIGZsZXgtc2hyaW5rXG5cdFx0Y2FzZSA1NTQ4OlxuXHRcdFx0cmV0dXJuIFdFQktJVCArIHZhbHVlICsgTVMgKyByZXBsYWNlKHZhbHVlLCAnc2hyaW5rJywgJ25lZ2F0aXZlJykgKyB2YWx1ZVxuXHRcdC8vIGZsZXgtYmFzaXNcblx0XHRjYXNlIDUyOTI6XG5cdFx0XHRyZXR1cm4gV0VCS0lUICsgdmFsdWUgKyBNUyArIHJlcGxhY2UodmFsdWUsICdiYXNpcycsICdwcmVmZXJyZWQtc2l6ZScpICsgdmFsdWVcblx0XHQvLyBmbGV4LWdyb3dcblx0XHRjYXNlIDYwNjA6XG5cdFx0XHRyZXR1cm4gV0VCS0lUICsgJ2JveC0nICsgcmVwbGFjZSh2YWx1ZSwgJy1ncm93JywgJycpICsgV0VCS0lUICsgdmFsdWUgKyBNUyArIHJlcGxhY2UodmFsdWUsICdncm93JywgJ3Bvc2l0aXZlJykgKyB2YWx1ZVxuXHRcdC8vIHRyYW5zaXRpb25cblx0XHRjYXNlIDQ1NTQ6XG5cdFx0XHRyZXR1cm4gV0VCS0lUICsgcmVwbGFjZSh2YWx1ZSwgLyhbXi1dKSh0cmFuc2Zvcm0pL2csICckMScgKyBXRUJLSVQgKyAnJDInKSArIHZhbHVlXG5cdFx0Ly8gY3Vyc29yXG5cdFx0Y2FzZSA2MTg3OlxuXHRcdFx0cmV0dXJuIHJlcGxhY2UocmVwbGFjZShyZXBsYWNlKHZhbHVlLCAvKHpvb20tfGdyYWIpLywgV0VCS0lUICsgJyQxJyksIC8oaW1hZ2Utc2V0KS8sIFdFQktJVCArICckMScpLCB2YWx1ZSwgJycpICsgdmFsdWVcblx0XHQvLyBiYWNrZ3JvdW5kLCBiYWNrZ3JvdW5kLWltYWdlXG5cdFx0Y2FzZSA1NDk1OiBjYXNlIDM5NTk6XG5cdFx0XHRyZXR1cm4gcmVwbGFjZSh2YWx1ZSwgLyhpbWFnZS1zZXRcXChbXl0qKS8sIFdFQktJVCArICckMScgKyAnJGAkMScpXG5cdFx0Ly8ganVzdGlmeS1jb250ZW50XG5cdFx0Y2FzZSA0OTY4OlxuXHRcdFx0cmV0dXJuIHJlcGxhY2UocmVwbGFjZSh2YWx1ZSwgLyguKzopKGZsZXgtKT8oLiopLywgV0VCS0lUICsgJ2JveC1wYWNrOiQzJyArIE1TICsgJ2ZsZXgtcGFjazokMycpLCAvcy4rLWJbXjtdKy8sICdqdXN0aWZ5JykgKyBXRUJLSVQgKyB2YWx1ZSArIHZhbHVlXG5cdFx0Ly8ganVzdGlmeS1zZWxmXG5cdFx0Y2FzZSA0MjAwOlxuXHRcdFx0aWYgKCFtYXRjaCh2YWx1ZSwgL2ZsZXgtfGJhc2VsaW5lLykpIHJldHVybiBNUyArICdncmlkLWNvbHVtbi1hbGlnbicgKyBzdWJzdHIodmFsdWUsIGxlbmd0aCkgKyB2YWx1ZVxuXHRcdFx0YnJlYWtcblx0XHQvLyBncmlkLXRlbXBsYXRlLShjb2x1bW5zfHJvd3MpXG5cdFx0Y2FzZSAyNTkyOiBjYXNlIDMzNjA6XG5cdFx0XHRyZXR1cm4gTVMgKyByZXBsYWNlKHZhbHVlLCAndGVtcGxhdGUtJywgJycpICsgdmFsdWVcblx0XHQvLyBncmlkLShyb3d8Y29sdW1uKS1zdGFydFxuXHRcdGNhc2UgNDM4NDogY2FzZSAzNjE2OlxuXHRcdFx0aWYgKGNoaWxkcmVuICYmIGNoaWxkcmVuLnNvbWUoZnVuY3Rpb24gKGVsZW1lbnQsIGluZGV4KSB7IHJldHVybiBsZW5ndGggPSBpbmRleCwgbWF0Y2goZWxlbWVudC5wcm9wcywgL2dyaWQtXFx3Ky1lbmQvKSB9KSkge1xuXHRcdFx0XHRyZXR1cm4gfmluZGV4b2YodmFsdWUgKyAoY2hpbGRyZW4gPSBjaGlsZHJlbltsZW5ndGhdLnZhbHVlKSwgJ3NwYW4nLCAwKSA/IHZhbHVlIDogKE1TICsgcmVwbGFjZSh2YWx1ZSwgJy1zdGFydCcsICcnKSArIHZhbHVlICsgTVMgKyAnZ3JpZC1yb3ctc3BhbjonICsgKH5pbmRleG9mKGNoaWxkcmVuLCAnc3BhbicsIDApID8gbWF0Y2goY2hpbGRyZW4sIC9cXGQrLykgOiArbWF0Y2goY2hpbGRyZW4sIC9cXGQrLykgLSArbWF0Y2godmFsdWUsIC9cXGQrLykpICsgJzsnKVxuXHRcdFx0fVxuXHRcdFx0cmV0dXJuIE1TICsgcmVwbGFjZSh2YWx1ZSwgJy1zdGFydCcsICcnKSArIHZhbHVlXG5cdFx0Ly8gZ3JpZC0ocm93fGNvbHVtbiktZW5kXG5cdFx0Y2FzZSA0ODk2OiBjYXNlIDQxMjg6XG5cdFx0XHRyZXR1cm4gKGNoaWxkcmVuICYmIGNoaWxkcmVuLnNvbWUoZnVuY3Rpb24gKGVsZW1lbnQpIHsgcmV0dXJuIG1hdGNoKGVsZW1lbnQucHJvcHMsIC9ncmlkLVxcdystc3RhcnQvKSB9KSkgPyB2YWx1ZSA6IE1TICsgcmVwbGFjZShyZXBsYWNlKHZhbHVlLCAnLWVuZCcsICctc3BhbicpLCAnc3BhbiAnLCAnJykgKyB2YWx1ZVxuXHRcdC8vIChtYXJnaW58cGFkZGluZyktaW5saW5lLShzdGFydHxlbmQpXG5cdFx0Y2FzZSA0MDk1OiBjYXNlIDM1ODM6IGNhc2UgNDA2ODogY2FzZSAyNTMyOlxuXHRcdFx0cmV0dXJuIHJlcGxhY2UodmFsdWUsIC8oLispLWlubGluZSguKykvLCBXRUJLSVQgKyAnJDEkMicpICsgdmFsdWVcblx0XHQvLyAobWlufG1heCk/KHdpZHRofGhlaWdodHxpbmxpbmUtc2l6ZXxibG9jay1zaXplKVxuXHRcdGNhc2UgODExNjogY2FzZSA3MDU5OiBjYXNlIDU3NTM6IGNhc2UgNTUzNTpcblx0XHRjYXNlIDU0NDU6IGNhc2UgNTcwMTogY2FzZSA0OTMzOiBjYXNlIDQ2Nzc6XG5cdFx0Y2FzZSA1NTMzOiBjYXNlIDU3ODk6IGNhc2UgNTAyMTogY2FzZSA0NzY1OlxuXHRcdFx0Ly8gc3RyZXRjaCwgbWF4LWNvbnRlbnQsIG1pbi1jb250ZW50LCBmaWxsLWF2YWlsYWJsZVxuXHRcdFx0aWYgKHN0cmxlbih2YWx1ZSkgLSAxIC0gbGVuZ3RoID4gNilcblx0XHRcdFx0c3dpdGNoIChjaGFyYXQodmFsdWUsIGxlbmd0aCArIDEpKSB7XG5cdFx0XHRcdFx0Ly8gKG0pYXgtY29udGVudCwgKG0paW4tY29udGVudFxuXHRcdFx0XHRcdGNhc2UgMTA5OlxuXHRcdFx0XHRcdFx0Ly8gLVxuXHRcdFx0XHRcdFx0aWYgKGNoYXJhdCh2YWx1ZSwgbGVuZ3RoICsgNCkgIT09IDQ1KVxuXHRcdFx0XHRcdFx0XHRicmVha1xuXHRcdFx0XHRcdC8vIChmKWlsbC1hdmFpbGFibGUsIChmKWl0LWNvbnRlbnRcblx0XHRcdFx0XHRjYXNlIDEwMjpcblx0XHRcdFx0XHRcdHJldHVybiByZXBsYWNlKHZhbHVlLCAvKC4rOikoLispLShbXl0rKS8sICckMScgKyBXRUJLSVQgKyAnJDItJDMnICsgJyQxJyArIE1PWiArIChjaGFyYXQodmFsdWUsIGxlbmd0aCArIDMpID09IDEwOCA/ICckMycgOiAnJDItJDMnKSkgKyB2YWx1ZVxuXHRcdFx0XHRcdC8vIChzKXRyZXRjaFxuXHRcdFx0XHRcdGNhc2UgMTE1OlxuXHRcdFx0XHRcdFx0cmV0dXJuIH5pbmRleG9mKHZhbHVlLCAnc3RyZXRjaCcsIDApID8gcHJlZml4KHJlcGxhY2UodmFsdWUsICdzdHJldGNoJywgJ2ZpbGwtYXZhaWxhYmxlJyksIGxlbmd0aCwgY2hpbGRyZW4pICsgdmFsdWUgOiB2YWx1ZVxuXHRcdFx0XHR9XG5cdFx0XHRicmVha1xuXHRcdC8vIGdyaWQtKGNvbHVtbnxyb3cpXG5cdFx0Y2FzZSA1MTUyOiBjYXNlIDU5MjA6XG5cdFx0XHRyZXR1cm4gcmVwbGFjZSh2YWx1ZSwgLyguKz8pOihcXGQrKShcXHMqXFwvXFxzKihzcGFuKT9cXHMqKFxcZCspKT8oLiopLywgZnVuY3Rpb24gKF8sIGEsIGIsIGMsIGQsIGUsIGYpIHsgcmV0dXJuIChNUyArIGEgKyAnOicgKyBiICsgZikgKyAoYyA/IChNUyArIGEgKyAnLXNwYW46JyArIChkID8gZSA6ICtlIC0gK2IpKSArIGYgOiAnJykgKyB2YWx1ZSB9KVxuXHRcdC8vIHBvc2l0aW9uOiBzdGlja3lcblx0XHRjYXNlIDQ5NDk6XG5cdFx0XHQvLyBzdGljayh5KT9cblx0XHRcdGlmIChjaGFyYXQodmFsdWUsIGxlbmd0aCArIDYpID09PSAxMjEpXG5cdFx0XHRcdHJldHVybiByZXBsYWNlKHZhbHVlLCAnOicsICc6JyArIFdFQktJVCkgKyB2YWx1ZVxuXHRcdFx0YnJlYWtcblx0XHQvLyBkaXNwbGF5OiAoZmxleHxpbmxpbmUtZmxleHxncmlkfGlubGluZS1ncmlkKVxuXHRcdGNhc2UgNjQ0NDpcblx0XHRcdHN3aXRjaCAoY2hhcmF0KHZhbHVlLCBjaGFyYXQodmFsdWUsIDE0KSA9PT0gNDUgPyAxOCA6IDExKSkge1xuXHRcdFx0XHQvLyAoaW5saW5lLSk/ZmxlKHgpXG5cdFx0XHRcdGNhc2UgMTIwOlxuXHRcdFx0XHRcdHJldHVybiByZXBsYWNlKHZhbHVlLCAvKC4rOikoW147XFxzIV0rKSg7fChcXHMrKT8hLispPy8sICckMScgKyBXRUJLSVQgKyAoY2hhcmF0KHZhbHVlLCAxNCkgPT09IDQ1ID8gJ2lubGluZS0nIDogJycpICsgJ2JveCQzJyArICckMScgKyBXRUJLSVQgKyAnJDIkMycgKyAnJDEnICsgTVMgKyAnJDJib3gkMycpICsgdmFsdWVcblx0XHRcdFx0Ly8gKGlubGluZS0pP2dyaShkKVxuXHRcdFx0XHRjYXNlIDEwMDpcblx0XHRcdFx0XHRyZXR1cm4gcmVwbGFjZSh2YWx1ZSwgJzonLCAnOicgKyBNUykgKyB2YWx1ZVxuXHRcdFx0fVxuXHRcdFx0YnJlYWtcblx0XHQvLyBzY3JvbGwtbWFyZ2luLCBzY3JvbGwtbWFyZ2luLSh0b3B8cmlnaHR8Ym90dG9tfGxlZnQpXG5cdFx0Y2FzZSA1NzE5OiBjYXNlIDI2NDc6IGNhc2UgMjEzNTogY2FzZSAzOTI3OiBjYXNlIDIzOTE6XG5cdFx0XHRyZXR1cm4gcmVwbGFjZSh2YWx1ZSwgJ3Njcm9sbC0nLCAnc2Nyb2xsLXNuYXAtJykgKyB2YWx1ZVxuXHR9XG5cblx0cmV0dXJuIHZhbHVlXG59XG4iLCJpbXBvcnQge01TLCBNT1osIFdFQktJVCwgUlVMRVNFVCwgS0VZRlJBTUVTLCBERUNMQVJBVElPTn0gZnJvbSAnLi9FbnVtLmpzJ1xuaW1wb3J0IHttYXRjaCwgY2hhcmF0LCBzdWJzdHIsIHN0cmxlbiwgc2l6ZW9mLCByZXBsYWNlLCBjb21iaW5lLCBmaWx0ZXIsIGFzc2lnbn0gZnJvbSAnLi9VdGlsaXR5LmpzJ1xuaW1wb3J0IHtjb3B5LCBsaWZ0LCB0b2tlbml6ZX0gZnJvbSAnLi9Ub2tlbml6ZXIuanMnXG5pbXBvcnQge3NlcmlhbGl6ZX0gZnJvbSAnLi9TZXJpYWxpemVyLmpzJ1xuaW1wb3J0IHtwcmVmaXh9IGZyb20gJy4vUHJlZml4ZXIuanMnXG5cbi8qKlxuICogQHBhcmFtIHtmdW5jdGlvbltdfSBjb2xsZWN0aW9uXG4gKiBAcmV0dXJuIHtmdW5jdGlvbn1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIG1pZGRsZXdhcmUgKGNvbGxlY3Rpb24pIHtcblx0dmFyIGxlbmd0aCA9IHNpemVvZihjb2xsZWN0aW9uKVxuXG5cdHJldHVybiBmdW5jdGlvbiAoZWxlbWVudCwgaW5kZXgsIGNoaWxkcmVuLCBjYWxsYmFjaykge1xuXHRcdHZhciBvdXRwdXQgPSAnJ1xuXG5cdFx0Zm9yICh2YXIgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKylcblx0XHRcdG91dHB1dCArPSBjb2xsZWN0aW9uW2ldKGVsZW1lbnQsIGluZGV4LCBjaGlsZHJlbiwgY2FsbGJhY2spIHx8ICcnXG5cblx0XHRyZXR1cm4gb3V0cHV0XG5cdH1cbn1cblxuLyoqXG4gKiBAcGFyYW0ge2Z1bmN0aW9ufSBjYWxsYmFja1xuICogQHJldHVybiB7ZnVuY3Rpb259XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBydWxlc2hlZXQgKGNhbGxiYWNrKSB7XG5cdHJldHVybiBmdW5jdGlvbiAoZWxlbWVudCkge1xuXHRcdGlmICghZWxlbWVudC5yb290KVxuXHRcdFx0aWYgKGVsZW1lbnQgPSBlbGVtZW50LnJldHVybilcblx0XHRcdFx0Y2FsbGJhY2soZWxlbWVudClcblx0fVxufVxuXG4vKipcbiAqIEBwYXJhbSB7b2JqZWN0fSBlbGVtZW50XG4gKiBAcGFyYW0ge251bWJlcn0gaW5kZXhcbiAqIEBwYXJhbSB7b2JqZWN0W119IGNoaWxkcmVuXG4gKiBAcGFyYW0ge2Z1bmN0aW9ufSBjYWxsYmFja1xuICovXG5leHBvcnQgZnVuY3Rpb24gcHJlZml4ZXIgKGVsZW1lbnQsIGluZGV4LCBjaGlsZHJlbiwgY2FsbGJhY2spIHtcblx0aWYgKGVsZW1lbnQubGVuZ3RoID4gLTEpXG5cdFx0aWYgKCFlbGVtZW50LnJldHVybilcblx0XHRcdHN3aXRjaCAoZWxlbWVudC50eXBlKSB7XG5cdFx0XHRcdGNhc2UgREVDTEFSQVRJT046IGVsZW1lbnQucmV0dXJuID0gcHJlZml4KGVsZW1lbnQudmFsdWUsIGVsZW1lbnQubGVuZ3RoLCBjaGlsZHJlbilcblx0XHRcdFx0XHRyZXR1cm5cblx0XHRcdFx0Y2FzZSBLRVlGUkFNRVM6XG5cdFx0XHRcdFx0cmV0dXJuIHNlcmlhbGl6ZShbY29weShlbGVtZW50LCB7dmFsdWU6IHJlcGxhY2UoZWxlbWVudC52YWx1ZSwgJ0AnLCAnQCcgKyBXRUJLSVQpfSldLCBjYWxsYmFjaylcblx0XHRcdFx0Y2FzZSBSVUxFU0VUOlxuXHRcdFx0XHRcdGlmIChlbGVtZW50Lmxlbmd0aClcblx0XHRcdFx0XHRcdHJldHVybiBjb21iaW5lKGNoaWxkcmVuID0gZWxlbWVudC5wcm9wcywgZnVuY3Rpb24gKHZhbHVlKSB7XG5cdFx0XHRcdFx0XHRcdHN3aXRjaCAobWF0Y2godmFsdWUsIGNhbGxiYWNrID0gLyg6OnBsYWNcXHcrfDpyZWFkLVxcdyspLykpIHtcblx0XHRcdFx0XHRcdFx0XHQvLyA6cmVhZC0ob25seXx3cml0ZSlcblx0XHRcdFx0XHRcdFx0XHRjYXNlICc6cmVhZC1vbmx5JzogY2FzZSAnOnJlYWQtd3JpdGUnOlxuXHRcdFx0XHRcdFx0XHRcdFx0bGlmdChjb3B5KGVsZW1lbnQsIHtwcm9wczogW3JlcGxhY2UodmFsdWUsIC86KHJlYWQtXFx3KykvLCAnOicgKyBNT1ogKyAnJDEnKV19KSlcblx0XHRcdFx0XHRcdFx0XHRcdGxpZnQoY29weShlbGVtZW50LCB7cHJvcHM6IFt2YWx1ZV19KSlcblx0XHRcdFx0XHRcdFx0XHRcdGFzc2lnbihlbGVtZW50LCB7cHJvcHM6IGZpbHRlcihjaGlsZHJlbiwgY2FsbGJhY2spfSlcblx0XHRcdFx0XHRcdFx0XHRcdGJyZWFrXG5cdFx0XHRcdFx0XHRcdFx0Ly8gOnBsYWNlaG9sZGVyXG5cdFx0XHRcdFx0XHRcdFx0Y2FzZSAnOjpwbGFjZWhvbGRlcic6XG5cdFx0XHRcdFx0XHRcdFx0XHRsaWZ0KGNvcHkoZWxlbWVudCwge3Byb3BzOiBbcmVwbGFjZSh2YWx1ZSwgLzoocGxhY1xcdyspLywgJzonICsgV0VCS0lUICsgJ2lucHV0LSQxJyldfSkpXG5cdFx0XHRcdFx0XHRcdFx0XHRsaWZ0KGNvcHkoZWxlbWVudCwge3Byb3BzOiBbcmVwbGFjZSh2YWx1ZSwgLzoocGxhY1xcdyspLywgJzonICsgTU9aICsgJyQxJyldfSkpXG5cdFx0XHRcdFx0XHRcdFx0XHRsaWZ0KGNvcHkoZWxlbWVudCwge3Byb3BzOiBbcmVwbGFjZSh2YWx1ZSwgLzoocGxhY1xcdyspLywgTVMgKyAnaW5wdXQtJDEnKV19KSlcblx0XHRcdFx0XHRcdFx0XHRcdGxpZnQoY29weShlbGVtZW50LCB7cHJvcHM6IFt2YWx1ZV19KSlcblx0XHRcdFx0XHRcdFx0XHRcdGFzc2lnbihlbGVtZW50LCB7cHJvcHM6IGZpbHRlcihjaGlsZHJlbiwgY2FsbGJhY2spfSlcblx0XHRcdFx0XHRcdFx0XHRcdGJyZWFrXG5cdFx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdFx0XHRyZXR1cm4gJydcblx0XHRcdFx0XHRcdH0pXG5cdFx0XHR9XG59XG5cbi8qKlxuICogQHBhcmFtIHtvYmplY3R9IGVsZW1lbnRcbiAqIEBwYXJhbSB7bnVtYmVyfSBpbmRleFxuICogQHBhcmFtIHtvYmplY3RbXX0gY2hpbGRyZW5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIG5hbWVzcGFjZSAoZWxlbWVudCkge1xuXHRzd2l0Y2ggKGVsZW1lbnQudHlwZSkge1xuXHRcdGNhc2UgUlVMRVNFVDpcblx0XHRcdGVsZW1lbnQucHJvcHMgPSBlbGVtZW50LnByb3BzLm1hcChmdW5jdGlvbiAodmFsdWUpIHtcblx0XHRcdFx0cmV0dXJuIGNvbWJpbmUodG9rZW5pemUodmFsdWUpLCBmdW5jdGlvbiAodmFsdWUsIGluZGV4LCBjaGlsZHJlbikge1xuXHRcdFx0XHRcdHN3aXRjaCAoY2hhcmF0KHZhbHVlLCAwKSkge1xuXHRcdFx0XHRcdFx0Ly8gXFxmXG5cdFx0XHRcdFx0XHRjYXNlIDEyOlxuXHRcdFx0XHRcdFx0XHRyZXR1cm4gc3Vic3RyKHZhbHVlLCAxLCBzdHJsZW4odmFsdWUpKVxuXHRcdFx0XHRcdFx0Ly8gXFwwICggKyA+IH5cblx0XHRcdFx0XHRcdGNhc2UgMDogY2FzZSA0MDogY2FzZSA0MzogY2FzZSA2MjogY2FzZSAxMjY6XG5cdFx0XHRcdFx0XHRcdHJldHVybiB2YWx1ZVxuXHRcdFx0XHRcdFx0Ly8gOlxuXHRcdFx0XHRcdFx0Y2FzZSA1ODpcblx0XHRcdFx0XHRcdFx0aWYgKGNoaWxkcmVuWysraW5kZXhdID09PSAnZ2xvYmFsJylcblx0XHRcdFx0XHRcdFx0XHRjaGlsZHJlbltpbmRleF0gPSAnJywgY2hpbGRyZW5bKytpbmRleF0gPSAnXFxmJyArIHN1YnN0cihjaGlsZHJlbltpbmRleF0sIGluZGV4ID0gMSwgLTEpXG5cdFx0XHRcdFx0XHQvLyBcXHNcblx0XHRcdFx0XHRcdGNhc2UgMzI6XG5cdFx0XHRcdFx0XHRcdHJldHVybiBpbmRleCA9PT0gMSA/ICcnIDogdmFsdWVcblx0XHRcdFx0XHRcdGRlZmF1bHQ6XG5cdFx0XHRcdFx0XHRcdHN3aXRjaCAoaW5kZXgpIHtcblx0XHRcdFx0XHRcdFx0XHRjYXNlIDA6IGVsZW1lbnQgPSB2YWx1ZVxuXHRcdFx0XHRcdFx0XHRcdFx0cmV0dXJuIHNpemVvZihjaGlsZHJlbikgPiAxID8gJycgOiB2YWx1ZVxuXHRcdFx0XHRcdFx0XHRcdGNhc2UgaW5kZXggPSBzaXplb2YoY2hpbGRyZW4pIC0gMTogY2FzZSAyOlxuXHRcdFx0XHRcdFx0XHRcdFx0cmV0dXJuIGluZGV4ID09PSAyID8gdmFsdWUgKyBlbGVtZW50ICsgZWxlbWVudCA6IHZhbHVlICsgZWxlbWVudFxuXHRcdFx0XHRcdFx0XHRcdGRlZmF1bHQ6XG5cdFx0XHRcdFx0XHRcdFx0XHRyZXR1cm4gdmFsdWVcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSlcblx0XHRcdH0pXG5cdH1cbn1cbiIsImltcG9ydCB7Q09NTUVOVCwgUlVMRVNFVCwgREVDTEFSQVRJT059IGZyb20gJy4vRW51bS5qcydcbmltcG9ydCB7YWJzLCBjaGFyYXQsIHRyaW0sIGZyb20sIHNpemVvZiwgc3RybGVuLCBzdWJzdHIsIGFwcGVuZCwgcmVwbGFjZSwgaW5kZXhvZn0gZnJvbSAnLi9VdGlsaXR5LmpzJ1xuaW1wb3J0IHtub2RlLCBjaGFyLCBwcmV2LCBuZXh0LCBwZWVrLCBjYXJldCwgYWxsb2MsIGRlYWxsb2MsIGRlbGltaXQsIHdoaXRlc3BhY2UsIGVzY2FwaW5nLCBpZGVudGlmaWVyLCBjb21tZW50ZXJ9IGZyb20gJy4vVG9rZW5pemVyLmpzJ1xuXG4vKipcbiAqIEBwYXJhbSB7c3RyaW5nfSB2YWx1ZVxuICogQHJldHVybiB7b2JqZWN0W119XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjb21waWxlICh2YWx1ZSkge1xuXHRyZXR1cm4gZGVhbGxvYyhwYXJzZSgnJywgbnVsbCwgbnVsbCwgbnVsbCwgWycnXSwgdmFsdWUgPSBhbGxvYyh2YWx1ZSksIDAsIFswXSwgdmFsdWUpKVxufVxuXG4vKipcbiAqIEBwYXJhbSB7c3RyaW5nfSB2YWx1ZVxuICogQHBhcmFtIHtvYmplY3R9IHJvb3RcbiAqIEBwYXJhbSB7b2JqZWN0P30gcGFyZW50XG4gKiBAcGFyYW0ge3N0cmluZ1tdfSBydWxlXG4gKiBAcGFyYW0ge3N0cmluZ1tdfSBydWxlc1xuICogQHBhcmFtIHtzdHJpbmdbXX0gcnVsZXNldHNcbiAqIEBwYXJhbSB7bnVtYmVyW119IHBzZXVkb1xuICogQHBhcmFtIHtudW1iZXJbXX0gcG9pbnRzXG4gKiBAcGFyYW0ge3N0cmluZ1tdfSBkZWNsYXJhdGlvbnNcbiAqIEByZXR1cm4ge29iamVjdH1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlICh2YWx1ZSwgcm9vdCwgcGFyZW50LCBydWxlLCBydWxlcywgcnVsZXNldHMsIHBzZXVkbywgcG9pbnRzLCBkZWNsYXJhdGlvbnMpIHtcblx0dmFyIGluZGV4ID0gMFxuXHR2YXIgb2Zmc2V0ID0gMFxuXHR2YXIgbGVuZ3RoID0gcHNldWRvXG5cdHZhciBhdHJ1bGUgPSAwXG5cdHZhciBwcm9wZXJ0eSA9IDBcblx0dmFyIHByZXZpb3VzID0gMFxuXHR2YXIgdmFyaWFibGUgPSAxXG5cdHZhciBzY2FubmluZyA9IDFcblx0dmFyIGFtcGVyc2FuZCA9IDFcblx0dmFyIGNoYXJhY3RlciA9IDBcblx0dmFyIHR5cGUgPSAnJ1xuXHR2YXIgcHJvcHMgPSBydWxlc1xuXHR2YXIgY2hpbGRyZW4gPSBydWxlc2V0c1xuXHR2YXIgcmVmZXJlbmNlID0gcnVsZVxuXHR2YXIgY2hhcmFjdGVycyA9IHR5cGVcblxuXHR3aGlsZSAoc2Nhbm5pbmcpXG5cdFx0c3dpdGNoIChwcmV2aW91cyA9IGNoYXJhY3RlciwgY2hhcmFjdGVyID0gbmV4dCgpKSB7XG5cdFx0XHQvLyAoXG5cdFx0XHRjYXNlIDQwOlxuXHRcdFx0XHRpZiAocHJldmlvdXMgIT0gMTA4ICYmIGNoYXJhdChjaGFyYWN0ZXJzLCBsZW5ndGggLSAxKSA9PSA1OCkge1xuXHRcdFx0XHRcdGlmIChpbmRleG9mKGNoYXJhY3RlcnMgKz0gcmVwbGFjZShkZWxpbWl0KGNoYXJhY3RlciksICcmJywgJyZcXGYnKSwgJyZcXGYnLCBhYnMoaW5kZXggPyBwb2ludHNbaW5kZXggLSAxXSA6IDApKSAhPSAtMSlcblx0XHRcdFx0XHRcdGFtcGVyc2FuZCA9IC0xXG5cdFx0XHRcdFx0YnJlYWtcblx0XHRcdFx0fVxuXHRcdFx0Ly8gXCIgJyBbXG5cdFx0XHRjYXNlIDM0OiBjYXNlIDM5OiBjYXNlIDkxOlxuXHRcdFx0XHRjaGFyYWN0ZXJzICs9IGRlbGltaXQoY2hhcmFjdGVyKVxuXHRcdFx0XHRicmVha1xuXHRcdFx0Ly8gXFx0IFxcbiBcXHIgXFxzXG5cdFx0XHRjYXNlIDk6IGNhc2UgMTA6IGNhc2UgMTM6IGNhc2UgMzI6XG5cdFx0XHRcdGNoYXJhY3RlcnMgKz0gd2hpdGVzcGFjZShwcmV2aW91cylcblx0XHRcdFx0YnJlYWtcblx0XHRcdC8vIFxcXG5cdFx0XHRjYXNlIDkyOlxuXHRcdFx0XHRjaGFyYWN0ZXJzICs9IGVzY2FwaW5nKGNhcmV0KCkgLSAxLCA3KVxuXHRcdFx0XHRjb250aW51ZVxuXHRcdFx0Ly8gL1xuXHRcdFx0Y2FzZSA0Nzpcblx0XHRcdFx0c3dpdGNoIChwZWVrKCkpIHtcblx0XHRcdFx0XHRjYXNlIDQyOiBjYXNlIDQ3OlxuXHRcdFx0XHRcdFx0YXBwZW5kKGNvbW1lbnQoY29tbWVudGVyKG5leHQoKSwgY2FyZXQoKSksIHJvb3QsIHBhcmVudCwgZGVjbGFyYXRpb25zKSwgZGVjbGFyYXRpb25zKVxuXHRcdFx0XHRcdFx0YnJlYWtcblx0XHRcdFx0XHRkZWZhdWx0OlxuXHRcdFx0XHRcdFx0Y2hhcmFjdGVycyArPSAnLydcblx0XHRcdFx0fVxuXHRcdFx0XHRicmVha1xuXHRcdFx0Ly8ge1xuXHRcdFx0Y2FzZSAxMjMgKiB2YXJpYWJsZTpcblx0XHRcdFx0cG9pbnRzW2luZGV4KytdID0gc3RybGVuKGNoYXJhY3RlcnMpICogYW1wZXJzYW5kXG5cdFx0XHQvLyB9IDsgXFwwXG5cdFx0XHRjYXNlIDEyNSAqIHZhcmlhYmxlOiBjYXNlIDU5OiBjYXNlIDA6XG5cdFx0XHRcdHN3aXRjaCAoY2hhcmFjdGVyKSB7XG5cdFx0XHRcdFx0Ly8gXFwwIH1cblx0XHRcdFx0XHRjYXNlIDA6IGNhc2UgMTI1OiBzY2FubmluZyA9IDBcblx0XHRcdFx0XHQvLyA7XG5cdFx0XHRcdFx0Y2FzZSA1OSArIG9mZnNldDogaWYgKGFtcGVyc2FuZCA9PSAtMSkgY2hhcmFjdGVycyA9IHJlcGxhY2UoY2hhcmFjdGVycywgL1xcZi9nLCAnJylcblx0XHRcdFx0XHRcdGlmIChwcm9wZXJ0eSA+IDAgJiYgKHN0cmxlbihjaGFyYWN0ZXJzKSAtIGxlbmd0aCkpXG5cdFx0XHRcdFx0XHRcdGFwcGVuZChwcm9wZXJ0eSA+IDMyID8gZGVjbGFyYXRpb24oY2hhcmFjdGVycyArICc7JywgcnVsZSwgcGFyZW50LCBsZW5ndGggLSAxLCBkZWNsYXJhdGlvbnMpIDogZGVjbGFyYXRpb24ocmVwbGFjZShjaGFyYWN0ZXJzLCAnICcsICcnKSArICc7JywgcnVsZSwgcGFyZW50LCBsZW5ndGggLSAyLCBkZWNsYXJhdGlvbnMpLCBkZWNsYXJhdGlvbnMpXG5cdFx0XHRcdFx0XHRicmVha1xuXHRcdFx0XHRcdC8vIEAgO1xuXHRcdFx0XHRcdGNhc2UgNTk6IGNoYXJhY3RlcnMgKz0gJzsnXG5cdFx0XHRcdFx0Ly8geyBydWxlL2F0LXJ1bGVcblx0XHRcdFx0XHRkZWZhdWx0OlxuXHRcdFx0XHRcdFx0YXBwZW5kKHJlZmVyZW5jZSA9IHJ1bGVzZXQoY2hhcmFjdGVycywgcm9vdCwgcGFyZW50LCBpbmRleCwgb2Zmc2V0LCBydWxlcywgcG9pbnRzLCB0eXBlLCBwcm9wcyA9IFtdLCBjaGlsZHJlbiA9IFtdLCBsZW5ndGgsIHJ1bGVzZXRzKSwgcnVsZXNldHMpXG5cblx0XHRcdFx0XHRcdGlmIChjaGFyYWN0ZXIgPT09IDEyMylcblx0XHRcdFx0XHRcdFx0aWYgKG9mZnNldCA9PT0gMClcblx0XHRcdFx0XHRcdFx0XHRwYXJzZShjaGFyYWN0ZXJzLCByb290LCByZWZlcmVuY2UsIHJlZmVyZW5jZSwgcHJvcHMsIHJ1bGVzZXRzLCBsZW5ndGgsIHBvaW50cywgY2hpbGRyZW4pXG5cdFx0XHRcdFx0XHRcdGVsc2Vcblx0XHRcdFx0XHRcdFx0XHRzd2l0Y2ggKGF0cnVsZSA9PT0gOTkgJiYgY2hhcmF0KGNoYXJhY3RlcnMsIDMpID09PSAxMTAgPyAxMDAgOiBhdHJ1bGUpIHtcblx0XHRcdFx0XHRcdFx0XHRcdC8vIGQgbCBtIHNcblx0XHRcdFx0XHRcdFx0XHRcdGNhc2UgMTAwOiBjYXNlIDEwODogY2FzZSAxMDk6IGNhc2UgMTE1OlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRwYXJzZSh2YWx1ZSwgcmVmZXJlbmNlLCByZWZlcmVuY2UsIHJ1bGUgJiYgYXBwZW5kKHJ1bGVzZXQodmFsdWUsIHJlZmVyZW5jZSwgcmVmZXJlbmNlLCAwLCAwLCBydWxlcywgcG9pbnRzLCB0eXBlLCBydWxlcywgcHJvcHMgPSBbXSwgbGVuZ3RoLCBjaGlsZHJlbiksIGNoaWxkcmVuKSwgcnVsZXMsIGNoaWxkcmVuLCBsZW5ndGgsIHBvaW50cywgcnVsZSA/IHByb3BzIDogY2hpbGRyZW4pXG5cdFx0XHRcdFx0XHRcdFx0XHRcdGJyZWFrXG5cdFx0XHRcdFx0XHRcdFx0XHRkZWZhdWx0OlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRwYXJzZShjaGFyYWN0ZXJzLCByZWZlcmVuY2UsIHJlZmVyZW5jZSwgcmVmZXJlbmNlLCBbJyddLCBjaGlsZHJlbiwgMCwgcG9pbnRzLCBjaGlsZHJlbilcblx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRpbmRleCA9IG9mZnNldCA9IHByb3BlcnR5ID0gMCwgdmFyaWFibGUgPSBhbXBlcnNhbmQgPSAxLCB0eXBlID0gY2hhcmFjdGVycyA9ICcnLCBsZW5ndGggPSBwc2V1ZG9cblx0XHRcdFx0YnJlYWtcblx0XHRcdC8vIDpcblx0XHRcdGNhc2UgNTg6XG5cdFx0XHRcdGxlbmd0aCA9IDEgKyBzdHJsZW4oY2hhcmFjdGVycyksIHByb3BlcnR5ID0gcHJldmlvdXNcblx0XHRcdGRlZmF1bHQ6XG5cdFx0XHRcdGlmICh2YXJpYWJsZSA8IDEpXG5cdFx0XHRcdFx0aWYgKGNoYXJhY3RlciA9PSAxMjMpXG5cdFx0XHRcdFx0XHQtLXZhcmlhYmxlXG5cdFx0XHRcdFx0ZWxzZSBpZiAoY2hhcmFjdGVyID09IDEyNSAmJiB2YXJpYWJsZSsrID09IDAgJiYgcHJldigpID09IDEyNSlcblx0XHRcdFx0XHRcdGNvbnRpbnVlXG5cblx0XHRcdFx0c3dpdGNoIChjaGFyYWN0ZXJzICs9IGZyb20oY2hhcmFjdGVyKSwgY2hhcmFjdGVyICogdmFyaWFibGUpIHtcblx0XHRcdFx0XHQvLyAmXG5cdFx0XHRcdFx0Y2FzZSAzODpcblx0XHRcdFx0XHRcdGFtcGVyc2FuZCA9IG9mZnNldCA+IDAgPyAxIDogKGNoYXJhY3RlcnMgKz0gJ1xcZicsIC0xKVxuXHRcdFx0XHRcdFx0YnJlYWtcblx0XHRcdFx0XHQvLyAsXG5cdFx0XHRcdFx0Y2FzZSA0NDpcblx0XHRcdFx0XHRcdHBvaW50c1tpbmRleCsrXSA9IChzdHJsZW4oY2hhcmFjdGVycykgLSAxKSAqIGFtcGVyc2FuZCwgYW1wZXJzYW5kID0gMVxuXHRcdFx0XHRcdFx0YnJlYWtcblx0XHRcdFx0XHQvLyBAXG5cdFx0XHRcdFx0Y2FzZSA2NDpcblx0XHRcdFx0XHRcdC8vIC1cblx0XHRcdFx0XHRcdGlmIChwZWVrKCkgPT09IDQ1KVxuXHRcdFx0XHRcdFx0XHRjaGFyYWN0ZXJzICs9IGRlbGltaXQobmV4dCgpKVxuXG5cdFx0XHRcdFx0XHRhdHJ1bGUgPSBwZWVrKCksIG9mZnNldCA9IGxlbmd0aCA9IHN0cmxlbih0eXBlID0gY2hhcmFjdGVycyArPSBpZGVudGlmaWVyKGNhcmV0KCkpKSwgY2hhcmFjdGVyKytcblx0XHRcdFx0XHRcdGJyZWFrXG5cdFx0XHRcdFx0Ly8gLVxuXHRcdFx0XHRcdGNhc2UgNDU6XG5cdFx0XHRcdFx0XHRpZiAocHJldmlvdXMgPT09IDQ1ICYmIHN0cmxlbihjaGFyYWN0ZXJzKSA9PSAyKVxuXHRcdFx0XHRcdFx0XHR2YXJpYWJsZSA9IDBcblx0XHRcdFx0fVxuXHRcdH1cblxuXHRyZXR1cm4gcnVsZXNldHNcbn1cblxuLyoqXG4gKiBAcGFyYW0ge3N0cmluZ30gdmFsdWVcbiAqIEBwYXJhbSB7b2JqZWN0fSByb290XG4gKiBAcGFyYW0ge29iamVjdD99IHBhcmVudFxuICogQHBhcmFtIHtudW1iZXJ9IGluZGV4XG4gKiBAcGFyYW0ge251bWJlcn0gb2Zmc2V0XG4gKiBAcGFyYW0ge3N0cmluZ1tdfSBydWxlc1xuICogQHBhcmFtIHtudW1iZXJbXX0gcG9pbnRzXG4gKiBAcGFyYW0ge3N0cmluZ30gdHlwZVxuICogQHBhcmFtIHtzdHJpbmdbXX0gcHJvcHNcbiAqIEBwYXJhbSB7c3RyaW5nW119IGNoaWxkcmVuXG4gKiBAcGFyYW0ge251bWJlcn0gbGVuZ3RoXG4gKiBAcGFyYW0ge29iamVjdFtdfSBzaWJsaW5nc1xuICogQHJldHVybiB7b2JqZWN0fVxuICovXG5leHBvcnQgZnVuY3Rpb24gcnVsZXNldCAodmFsdWUsIHJvb3QsIHBhcmVudCwgaW5kZXgsIG9mZnNldCwgcnVsZXMsIHBvaW50cywgdHlwZSwgcHJvcHMsIGNoaWxkcmVuLCBsZW5ndGgsIHNpYmxpbmdzKSB7XG5cdHZhciBwb3N0ID0gb2Zmc2V0IC0gMVxuXHR2YXIgcnVsZSA9IG9mZnNldCA9PT0gMCA/IHJ1bGVzIDogWycnXVxuXHR2YXIgc2l6ZSA9IHNpemVvZihydWxlKVxuXG5cdGZvciAodmFyIGkgPSAwLCBqID0gMCwgayA9IDA7IGkgPCBpbmRleDsgKytpKVxuXHRcdGZvciAodmFyIHggPSAwLCB5ID0gc3Vic3RyKHZhbHVlLCBwb3N0ICsgMSwgcG9zdCA9IGFicyhqID0gcG9pbnRzW2ldKSksIHogPSB2YWx1ZTsgeCA8IHNpemU7ICsreClcblx0XHRcdGlmICh6ID0gdHJpbShqID4gMCA/IHJ1bGVbeF0gKyAnICcgKyB5IDogcmVwbGFjZSh5LCAvJlxcZi9nLCBydWxlW3hdKSkpXG5cdFx0XHRcdHByb3BzW2srK10gPSB6XG5cblx0cmV0dXJuIG5vZGUodmFsdWUsIHJvb3QsIHBhcmVudCwgb2Zmc2V0ID09PSAwID8gUlVMRVNFVCA6IHR5cGUsIHByb3BzLCBjaGlsZHJlbiwgbGVuZ3RoLCBzaWJsaW5ncylcbn1cblxuLyoqXG4gKiBAcGFyYW0ge251bWJlcn0gdmFsdWVcbiAqIEBwYXJhbSB7b2JqZWN0fSByb290XG4gKiBAcGFyYW0ge29iamVjdD99IHBhcmVudFxuICogQHBhcmFtIHtvYmplY3RbXX0gc2libGluZ3NcbiAqIEByZXR1cm4ge29iamVjdH1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNvbW1lbnQgKHZhbHVlLCByb290LCBwYXJlbnQsIHNpYmxpbmdzKSB7XG5cdHJldHVybiBub2RlKHZhbHVlLCByb290LCBwYXJlbnQsIENPTU1FTlQsIGZyb20oY2hhcigpKSwgc3Vic3RyKHZhbHVlLCAyLCAtMiksIDAsIHNpYmxpbmdzKVxufVxuXG4vKipcbiAqIEBwYXJhbSB7c3RyaW5nfSB2YWx1ZVxuICogQHBhcmFtIHtvYmplY3R9IHJvb3RcbiAqIEBwYXJhbSB7b2JqZWN0P30gcGFyZW50XG4gKiBAcGFyYW0ge251bWJlcn0gbGVuZ3RoXG4gKiBAcGFyYW0ge29iamVjdFtdfSBzaWJsaW5nc1xuICogQHJldHVybiB7b2JqZWN0fVxuICovXG5leHBvcnQgZnVuY3Rpb24gZGVjbGFyYXRpb24gKHZhbHVlLCByb290LCBwYXJlbnQsIGxlbmd0aCwgc2libGluZ3MpIHtcblx0cmV0dXJuIG5vZGUodmFsdWUsIHJvb3QsIHBhcmVudCwgREVDTEFSQVRJT04sIHN1YnN0cih2YWx1ZSwgMCwgbGVuZ3RoKSwgc3Vic3RyKHZhbHVlLCBsZW5ndGggKyAxLCAtMSksIGxlbmd0aCwgc2libGluZ3MpXG59XG4iLCJ2YXIgdW5pdGxlc3NLZXlzID0ge1xuICBhbmltYXRpb25JdGVyYXRpb25Db3VudDogMSxcbiAgYXNwZWN0UmF0aW86IDEsXG4gIGJvcmRlckltYWdlT3V0c2V0OiAxLFxuICBib3JkZXJJbWFnZVNsaWNlOiAxLFxuICBib3JkZXJJbWFnZVdpZHRoOiAxLFxuICBib3hGbGV4OiAxLFxuICBib3hGbGV4R3JvdXA6IDEsXG4gIGJveE9yZGluYWxHcm91cDogMSxcbiAgY29sdW1uQ291bnQ6IDEsXG4gIGNvbHVtbnM6IDEsXG4gIGZsZXg6IDEsXG4gIGZsZXhHcm93OiAxLFxuICBmbGV4UG9zaXRpdmU6IDEsXG4gIGZsZXhTaHJpbms6IDEsXG4gIGZsZXhOZWdhdGl2ZTogMSxcbiAgZmxleE9yZGVyOiAxLFxuICBncmlkUm93OiAxLFxuICBncmlkUm93RW5kOiAxLFxuICBncmlkUm93U3BhbjogMSxcbiAgZ3JpZFJvd1N0YXJ0OiAxLFxuICBncmlkQ29sdW1uOiAxLFxuICBncmlkQ29sdW1uRW5kOiAxLFxuICBncmlkQ29sdW1uU3BhbjogMSxcbiAgZ3JpZENvbHVtblN0YXJ0OiAxLFxuICBtc0dyaWRSb3c6IDEsXG4gIG1zR3JpZFJvd1NwYW46IDEsXG4gIG1zR3JpZENvbHVtbjogMSxcbiAgbXNHcmlkQ29sdW1uU3BhbjogMSxcbiAgZm9udFdlaWdodDogMSxcbiAgbGluZUhlaWdodDogMSxcbiAgb3BhY2l0eTogMSxcbiAgb3JkZXI6IDEsXG4gIG9ycGhhbnM6IDEsXG4gIHRhYlNpemU6IDEsXG4gIHdpZG93czogMSxcbiAgekluZGV4OiAxLFxuICB6b29tOiAxLFxuICBXZWJraXRMaW5lQ2xhbXA6IDEsXG4gIC8vIFNWRy1yZWxhdGVkIHByb3BlcnRpZXNcbiAgZmlsbE9wYWNpdHk6IDEsXG4gIGZsb29kT3BhY2l0eTogMSxcbiAgc3RvcE9wYWNpdHk6IDEsXG4gIHN0cm9rZURhc2hhcnJheTogMSxcbiAgc3Ryb2tlRGFzaG9mZnNldDogMSxcbiAgc3Ryb2tlTWl0ZXJsaW1pdDogMSxcbiAgc3Ryb2tlT3BhY2l0eTogMSxcbiAgc3Ryb2tlV2lkdGg6IDFcbn07XG5cbmV4cG9ydCB7IHVuaXRsZXNzS2V5cyBhcyBkZWZhdWx0IH07XG4iLCJpbXBvcnR7X19zcHJlYWRBcnJheSBhcyBlLF9fYXNzaWduIGFzIHR9ZnJvbVwidHNsaWJcIjtpbXBvcnQgbiBmcm9tXCJAZW1vdGlvbi9pcy1wcm9wLXZhbGlkXCI7aW1wb3J0IG8se3VzZVJlZiBhcyByLHVzZVN0YXRlIGFzIHMsdXNlTWVtbyBhcyBpLHVzZUVmZmVjdCBhcyBhLHVzZUNvbnRleHQgYXMgYyx1c2VEZWJ1Z1ZhbHVlIGFzIGwsY3JlYXRlRWxlbWVudCBhcyB1fWZyb21cInJlYWN0XCI7aW1wb3J0IHAgZnJvbVwic2hhbGxvd2VxdWFsXCI7aW1wb3J0KmFzIGQgZnJvbVwic3R5bGlzXCI7aW1wb3J0IGggZnJvbVwiQGVtb3Rpb24vdW5pdGxlc3NcIjt2YXIgZj1cInVuZGVmaW5lZFwiIT10eXBlb2YgcHJvY2VzcyYmdm9pZCAwIT09cHJvY2Vzcy5lbnYmJihwcm9jZXNzLmVudi5SRUFDVF9BUFBfU0NfQVRUUnx8cHJvY2Vzcy5lbnYuU0NfQVRUUil8fFwiZGF0YS1zdHlsZWRcIixtPVwiYWN0aXZlXCIseT1cImRhdGEtc3R5bGVkLXZlcnNpb25cIix2PVwiNi4xLjE1XCIsZz1cIi8qIXNjKi9cXG5cIixTPVwidW5kZWZpbmVkXCIhPXR5cGVvZiB3aW5kb3cmJlwiSFRNTEVsZW1lbnRcImluIHdpbmRvdyx3PUJvb2xlYW4oXCJib29sZWFuXCI9PXR5cGVvZiBTQ19ESVNBQkxFX1NQRUVEWT9TQ19ESVNBQkxFX1NQRUVEWTpcInVuZGVmaW5lZFwiIT10eXBlb2YgcHJvY2VzcyYmdm9pZCAwIT09cHJvY2Vzcy5lbnYmJnZvaWQgMCE9PXByb2Nlc3MuZW52LlJFQUNUX0FQUF9TQ19ESVNBQkxFX1NQRUVEWSYmXCJcIiE9PXByb2Nlc3MuZW52LlJFQUNUX0FQUF9TQ19ESVNBQkxFX1NQRUVEWT9cImZhbHNlXCIhPT1wcm9jZXNzLmVudi5SRUFDVF9BUFBfU0NfRElTQUJMRV9TUEVFRFkmJnByb2Nlc3MuZW52LlJFQUNUX0FQUF9TQ19ESVNBQkxFX1NQRUVEWTpcInVuZGVmaW5lZFwiIT10eXBlb2YgcHJvY2VzcyYmdm9pZCAwIT09cHJvY2Vzcy5lbnYmJnZvaWQgMCE9PXByb2Nlc3MuZW52LlNDX0RJU0FCTEVfU1BFRURZJiZcIlwiIT09cHJvY2Vzcy5lbnYuU0NfRElTQUJMRV9TUEVFRFk/XCJmYWxzZVwiIT09cHJvY2Vzcy5lbnYuU0NfRElTQUJMRV9TUEVFRFkmJnByb2Nlc3MuZW52LlNDX0RJU0FCTEVfU1BFRURZOlwicHJvZHVjdGlvblwiIT09cHJvY2Vzcy5lbnYuTk9ERV9FTlYpLGI9e30sRT0vaW52YWxpZCBob29rIGNhbGwvaSxOPW5ldyBTZXQsUD1mdW5jdGlvbih0LG4pe2lmKFwicHJvZHVjdGlvblwiIT09cHJvY2Vzcy5lbnYuTk9ERV9FTlYpe3ZhciBvPW4/JyB3aXRoIHRoZSBpZCBvZiBcIicuY29uY2F0KG4sJ1wiJyk6XCJcIixzPVwiVGhlIGNvbXBvbmVudCBcIi5jb25jYXQodCkuY29uY2F0KG8sXCIgaGFzIGJlZW4gY3JlYXRlZCBkeW5hbWljYWxseS5cXG5cIikrXCJZb3UgbWF5IHNlZSB0aGlzIHdhcm5pbmcgYmVjYXVzZSB5b3UndmUgY2FsbGVkIHN0eWxlZCBpbnNpZGUgYW5vdGhlciBjb21wb25lbnQuXFxuVG8gcmVzb2x2ZSB0aGlzIG9ubHkgY3JlYXRlIG5ldyBTdHlsZWRDb21wb25lbnRzIG91dHNpZGUgb2YgYW55IHJlbmRlciBtZXRob2QgYW5kIGZ1bmN0aW9uIGNvbXBvbmVudC5cIixpPWNvbnNvbGUuZXJyb3I7dHJ5e3ZhciBhPSEwO2NvbnNvbGUuZXJyb3I9ZnVuY3Rpb24odCl7Zm9yKHZhciBuPVtdLG89MTtvPGFyZ3VtZW50cy5sZW5ndGg7bysrKW5bby0xXT1hcmd1bWVudHNbb107RS50ZXN0KHQpPyhhPSExLE4uZGVsZXRlKHMpKTppLmFwcGx5KHZvaWQgMCxlKFt0XSxuLCExKSl9LHIoKSxhJiYhTi5oYXMocykmJihjb25zb2xlLndhcm4ocyksTi5hZGQocykpfWNhdGNoKGUpe0UudGVzdChlLm1lc3NhZ2UpJiZOLmRlbGV0ZShzKX1maW5hbGx5e2NvbnNvbGUuZXJyb3I9aX19fSxfPU9iamVjdC5mcmVlemUoW10pLEM9T2JqZWN0LmZyZWV6ZSh7fSk7ZnVuY3Rpb24gSShlLHQsbil7cmV0dXJuIHZvaWQgMD09PW4mJihuPUMpLGUudGhlbWUhPT1uLnRoZW1lJiZlLnRoZW1lfHx0fHxuLnRoZW1lfXZhciBBPW5ldyBTZXQoW1wiYVwiLFwiYWJiclwiLFwiYWRkcmVzc1wiLFwiYXJlYVwiLFwiYXJ0aWNsZVwiLFwiYXNpZGVcIixcImF1ZGlvXCIsXCJiXCIsXCJiYXNlXCIsXCJiZGlcIixcImJkb1wiLFwiYmlnXCIsXCJibG9ja3F1b3RlXCIsXCJib2R5XCIsXCJiclwiLFwiYnV0dG9uXCIsXCJjYW52YXNcIixcImNhcHRpb25cIixcImNpdGVcIixcImNvZGVcIixcImNvbFwiLFwiY29sZ3JvdXBcIixcImRhdGFcIixcImRhdGFsaXN0XCIsXCJkZFwiLFwiZGVsXCIsXCJkZXRhaWxzXCIsXCJkZm5cIixcImRpYWxvZ1wiLFwiZGl2XCIsXCJkbFwiLFwiZHRcIixcImVtXCIsXCJlbWJlZFwiLFwiZmllbGRzZXRcIixcImZpZ2NhcHRpb25cIixcImZpZ3VyZVwiLFwiZm9vdGVyXCIsXCJmb3JtXCIsXCJoMVwiLFwiaDJcIixcImgzXCIsXCJoNFwiLFwiaDVcIixcImg2XCIsXCJoZWFkZXJcIixcImhncm91cFwiLFwiaHJcIixcImh0bWxcIixcImlcIixcImlmcmFtZVwiLFwiaW1nXCIsXCJpbnB1dFwiLFwiaW5zXCIsXCJrYmRcIixcImtleWdlblwiLFwibGFiZWxcIixcImxlZ2VuZFwiLFwibGlcIixcImxpbmtcIixcIm1haW5cIixcIm1hcFwiLFwibWFya1wiLFwibWVudVwiLFwibWVudWl0ZW1cIixcIm1ldGFcIixcIm1ldGVyXCIsXCJuYXZcIixcIm5vc2NyaXB0XCIsXCJvYmplY3RcIixcIm9sXCIsXCJvcHRncm91cFwiLFwib3B0aW9uXCIsXCJvdXRwdXRcIixcInBcIixcInBhcmFtXCIsXCJwaWN0dXJlXCIsXCJwcmVcIixcInByb2dyZXNzXCIsXCJxXCIsXCJycFwiLFwicnRcIixcInJ1YnlcIixcInNcIixcInNhbXBcIixcInNjcmlwdFwiLFwic2VjdGlvblwiLFwic2VsZWN0XCIsXCJzbWFsbFwiLFwic291cmNlXCIsXCJzcGFuXCIsXCJzdHJvbmdcIixcInN0eWxlXCIsXCJzdWJcIixcInN1bW1hcnlcIixcInN1cFwiLFwidGFibGVcIixcInRib2R5XCIsXCJ0ZFwiLFwidGV4dGFyZWFcIixcInRmb290XCIsXCJ0aFwiLFwidGhlYWRcIixcInRpbWVcIixcInRyXCIsXCJ0cmFja1wiLFwidVwiLFwidWxcIixcInVzZVwiLFwidmFyXCIsXCJ2aWRlb1wiLFwid2JyXCIsXCJjaXJjbGVcIixcImNsaXBQYXRoXCIsXCJkZWZzXCIsXCJlbGxpcHNlXCIsXCJmb3JlaWduT2JqZWN0XCIsXCJnXCIsXCJpbWFnZVwiLFwibGluZVwiLFwibGluZWFyR3JhZGllbnRcIixcIm1hcmtlclwiLFwibWFza1wiLFwicGF0aFwiLFwicGF0dGVyblwiLFwicG9seWdvblwiLFwicG9seWxpbmVcIixcInJhZGlhbEdyYWRpZW50XCIsXCJyZWN0XCIsXCJzdG9wXCIsXCJzdmdcIixcInRleHRcIixcInRzcGFuXCJdKSxPPS9bIVwiIyQlJicoKSorLC4vOjs8PT4/QFtcXFxcXFxdXmB7fH1+LV0rL2csRD0vKF4tfC0kKS9nO2Z1bmN0aW9uIFIoZSl7cmV0dXJuIGUucmVwbGFjZShPLFwiLVwiKS5yZXBsYWNlKEQsXCJcIil9dmFyIFQ9LyhhKShkKS9naSxrPTUyLGo9ZnVuY3Rpb24oZSl7cmV0dXJuIFN0cmluZy5mcm9tQ2hhckNvZGUoZSsoZT4yNT8zOTo5NykpfTtmdW5jdGlvbiB4KGUpe3ZhciB0LG49XCJcIjtmb3IodD1NYXRoLmFicyhlKTt0Pms7dD10L2t8MCluPWoodCVrKStuO3JldHVybihqKHQlaykrbikucmVwbGFjZShULFwiJDEtJDJcIil9dmFyIFYsRj01MzgxLE09ZnVuY3Rpb24oZSx0KXtmb3IodmFyIG49dC5sZW5ndGg7bjspZT0zMyplXnQuY2hhckNvZGVBdCgtLW4pO3JldHVybiBlfSx6PWZ1bmN0aW9uKGUpe3JldHVybiBNKEYsZSl9O2Z1bmN0aW9uICQoZSl7cmV0dXJuIHgoeihlKT4+PjApfWZ1bmN0aW9uIEIoZSl7cmV0dXJuXCJwcm9kdWN0aW9uXCIhPT1wcm9jZXNzLmVudi5OT0RFX0VOViYmXCJzdHJpbmdcIj09dHlwZW9mIGUmJmV8fGUuZGlzcGxheU5hbWV8fGUubmFtZXx8XCJDb21wb25lbnRcIn1mdW5jdGlvbiBMKGUpe3JldHVyblwic3RyaW5nXCI9PXR5cGVvZiBlJiYoXCJwcm9kdWN0aW9uXCI9PT1wcm9jZXNzLmVudi5OT0RFX0VOVnx8ZS5jaGFyQXQoMCk9PT1lLmNoYXJBdCgwKS50b0xvd2VyQ2FzZSgpKX12YXIgRz1cImZ1bmN0aW9uXCI9PXR5cGVvZiBTeW1ib2wmJlN5bWJvbC5mb3IsWT1HP1N5bWJvbC5mb3IoXCJyZWFjdC5tZW1vXCIpOjYwMTE1LFc9Rz9TeW1ib2wuZm9yKFwicmVhY3QuZm9yd2FyZF9yZWZcIik6NjAxMTIscT17Y2hpbGRDb250ZXh0VHlwZXM6ITAsY29udGV4dFR5cGU6ITAsY29udGV4dFR5cGVzOiEwLGRlZmF1bHRQcm9wczohMCxkaXNwbGF5TmFtZTohMCxnZXREZWZhdWx0UHJvcHM6ITAsZ2V0RGVyaXZlZFN0YXRlRnJvbUVycm9yOiEwLGdldERlcml2ZWRTdGF0ZUZyb21Qcm9wczohMCxtaXhpbnM6ITAscHJvcFR5cGVzOiEwLHR5cGU6ITB9LEg9e25hbWU6ITAsbGVuZ3RoOiEwLHByb3RvdHlwZTohMCxjYWxsZXI6ITAsY2FsbGVlOiEwLGFyZ3VtZW50czohMCxhcml0eTohMH0sVT17JCR0eXBlb2Y6ITAsY29tcGFyZTohMCxkZWZhdWx0UHJvcHM6ITAsZGlzcGxheU5hbWU6ITAscHJvcFR5cGVzOiEwLHR5cGU6ITB9LEo9KChWPXt9KVtXXT17JCR0eXBlb2Y6ITAscmVuZGVyOiEwLGRlZmF1bHRQcm9wczohMCxkaXNwbGF5TmFtZTohMCxwcm9wVHlwZXM6ITB9LFZbWV09VSxWKTtmdW5jdGlvbiBYKGUpe3JldHVybihcInR5cGVcImluKHQ9ZSkmJnQudHlwZS4kJHR5cGVvZik9PT1ZP1U6XCIkJHR5cGVvZlwiaW4gZT9KW2UuJCR0eXBlb2ZdOnE7dmFyIHR9dmFyIFo9T2JqZWN0LmRlZmluZVByb3BlcnR5LEs9T2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMsUT1PYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzLGVlPU9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IsdGU9T2JqZWN0LmdldFByb3RvdHlwZU9mLG5lPU9iamVjdC5wcm90b3R5cGU7ZnVuY3Rpb24gb2UoZSx0LG4pe2lmKFwic3RyaW5nXCIhPXR5cGVvZiB0KXtpZihuZSl7dmFyIG89dGUodCk7byYmbyE9PW5lJiZvZShlLG8sbil9dmFyIHI9Syh0KTtRJiYocj1yLmNvbmNhdChRKHQpKSk7Zm9yKHZhciBzPVgoZSksaT1YKHQpLGE9MDthPHIubGVuZ3RoOysrYSl7dmFyIGM9clthXTtpZighKGMgaW4gSHx8biYmbltjXXx8aSYmYyBpbiBpfHxzJiZjIGluIHMpKXt2YXIgbD1lZSh0LGMpO3RyeXtaKGUsYyxsKX1jYXRjaChlKXt9fX19cmV0dXJuIGV9ZnVuY3Rpb24gcmUoZSl7cmV0dXJuXCJmdW5jdGlvblwiPT10eXBlb2YgZX1mdW5jdGlvbiBzZShlKXtyZXR1cm5cIm9iamVjdFwiPT10eXBlb2YgZSYmXCJzdHlsZWRDb21wb25lbnRJZFwiaW4gZX1mdW5jdGlvbiBpZShlLHQpe3JldHVybiBlJiZ0P1wiXCIuY29uY2F0KGUsXCIgXCIpLmNvbmNhdCh0KTplfHx0fHxcIlwifWZ1bmN0aW9uIGFlKGUsdCl7aWYoMD09PWUubGVuZ3RoKXJldHVyblwiXCI7Zm9yKHZhciBuPWVbMF0sbz0xO288ZS5sZW5ndGg7bysrKW4rPXQ/dCtlW29dOmVbb107cmV0dXJuIG59ZnVuY3Rpb24gY2UoZSl7cmV0dXJuIG51bGwhPT1lJiZcIm9iamVjdFwiPT10eXBlb2YgZSYmZS5jb25zdHJ1Y3Rvci5uYW1lPT09T2JqZWN0Lm5hbWUmJiEoXCJwcm9wc1wiaW4gZSYmZS4kJHR5cGVvZil9ZnVuY3Rpb24gbGUoZSx0LG4pe2lmKHZvaWQgMD09PW4mJihuPSExKSwhbiYmIWNlKGUpJiYhQXJyYXkuaXNBcnJheShlKSlyZXR1cm4gdDtpZihBcnJheS5pc0FycmF5KHQpKWZvcih2YXIgbz0wO288dC5sZW5ndGg7bysrKWVbb109bGUoZVtvXSx0W29dKTtlbHNlIGlmKGNlKHQpKWZvcih2YXIgbyBpbiB0KWVbb109bGUoZVtvXSx0W29dKTtyZXR1cm4gZX1mdW5jdGlvbiB1ZShlLHQpe09iamVjdC5kZWZpbmVQcm9wZXJ0eShlLFwidG9TdHJpbmdcIix7dmFsdWU6dH0pfXZhciBwZT1cInByb2R1Y3Rpb25cIiE9PXByb2Nlc3MuZW52Lk5PREVfRU5WP3sxOlwiQ2Fubm90IGNyZWF0ZSBzdHlsZWQtY29tcG9uZW50IGZvciBjb21wb25lbnQ6ICVzLlxcblxcblwiLDI6XCJDYW4ndCBjb2xsZWN0IHN0eWxlcyBvbmNlIHlvdSd2ZSBjb25zdW1lZCBhIGBTZXJ2ZXJTdHlsZVNoZWV0YCdzIHN0eWxlcyEgYFNlcnZlclN0eWxlU2hlZXRgIGlzIGEgb25lIG9mZiBpbnN0YW5jZSBmb3IgZWFjaCBzZXJ2ZXItc2lkZSByZW5kZXIgY3ljbGUuXFxuXFxuLSBBcmUgeW91IHRyeWluZyB0byByZXVzZSBpdCBhY3Jvc3MgcmVuZGVycz9cXG4tIEFyZSB5b3UgYWNjaWRlbnRhbGx5IGNhbGxpbmcgY29sbGVjdFN0eWxlcyB0d2ljZT9cXG5cXG5cIiwzOlwiU3RyZWFtaW5nIFNTUiBpcyBvbmx5IHN1cHBvcnRlZCBpbiBhIE5vZGUuanMgZW52aXJvbm1lbnQ7IFBsZWFzZSBkbyBub3QgdHJ5IHRvIGNhbGwgdGhpcyBtZXRob2QgaW4gdGhlIGJyb3dzZXIuXFxuXFxuXCIsNDpcIlRoZSBgU3R5bGVTaGVldE1hbmFnZXJgIGV4cGVjdHMgYSB2YWxpZCB0YXJnZXQgb3Igc2hlZXQgcHJvcCFcXG5cXG4tIERvZXMgdGhpcyBlcnJvciBvY2N1ciBvbiB0aGUgY2xpZW50IGFuZCBpcyB5b3VyIHRhcmdldCBmYWxzeT9cXG4tIERvZXMgdGhpcyBlcnJvciBvY2N1ciBvbiB0aGUgc2VydmVyIGFuZCBpcyB0aGUgc2hlZXQgZmFsc3k/XFxuXFxuXCIsNTpcIlRoZSBjbG9uZSBtZXRob2QgY2Fubm90IGJlIHVzZWQgb24gdGhlIGNsaWVudCFcXG5cXG4tIEFyZSB5b3UgcnVubmluZyBpbiBhIGNsaWVudC1saWtlIGVudmlyb25tZW50IG9uIHRoZSBzZXJ2ZXI/XFxuLSBBcmUgeW91IHRyeWluZyB0byBydW4gU1NSIG9uIHRoZSBjbGllbnQ/XFxuXFxuXCIsNjpcIlRyeWluZyB0byBpbnNlcnQgYSBuZXcgc3R5bGUgdGFnLCBidXQgdGhlIGdpdmVuIE5vZGUgaXMgdW5tb3VudGVkIVxcblxcbi0gQXJlIHlvdSB1c2luZyBhIGN1c3RvbSB0YXJnZXQgdGhhdCBpc24ndCBtb3VudGVkP1xcbi0gRG9lcyB5b3VyIGRvY3VtZW50IG5vdCBoYXZlIGEgdmFsaWQgaGVhZCBlbGVtZW50P1xcbi0gSGF2ZSB5b3UgYWNjaWRlbnRhbGx5IHJlbW92ZWQgYSBzdHlsZSB0YWcgbWFudWFsbHk/XFxuXFxuXCIsNzonVGhlbWVQcm92aWRlcjogUGxlYXNlIHJldHVybiBhbiBvYmplY3QgZnJvbSB5b3VyIFwidGhlbWVcIiBwcm9wIGZ1bmN0aW9uLCBlLmcuXFxuXFxuYGBganNcXG50aGVtZT17KCkgPT4gKHt9KX1cXG5gYGBcXG5cXG4nLDg6J1RoZW1lUHJvdmlkZXI6IFBsZWFzZSBtYWtlIHlvdXIgXCJ0aGVtZVwiIHByb3AgYW4gb2JqZWN0LlxcblxcbicsOTpcIk1pc3NpbmcgZG9jdW1lbnQgYDxoZWFkPmBcXG5cXG5cIiwxMDpcIkNhbm5vdCBmaW5kIGEgU3R5bGVTaGVldCBpbnN0YW5jZS4gVXN1YWxseSB0aGlzIGhhcHBlbnMgaWYgdGhlcmUgYXJlIG11bHRpcGxlIGNvcGllcyBvZiBzdHlsZWQtY29tcG9uZW50cyBsb2FkZWQgYXQgb25jZS4gQ2hlY2sgb3V0IHRoaXMgaXNzdWUgZm9yIGhvdyB0byB0cm91Ymxlc2hvb3QgYW5kIGZpeCB0aGUgY29tbW9uIGNhc2VzIHdoZXJlIHRoaXMgc2l0dWF0aW9uIGNhbiBoYXBwZW46IGh0dHBzOi8vZ2l0aHViLmNvbS9zdHlsZWQtY29tcG9uZW50cy9zdHlsZWQtY29tcG9uZW50cy9pc3N1ZXMvMTk0MSNpc3N1ZWNvbW1lbnQtNDE3ODYyMDIxXFxuXFxuXCIsMTE6XCJfVGhpcyBlcnJvciB3YXMgcmVwbGFjZWQgd2l0aCBhIGRldi10aW1lIHdhcm5pbmcsIGl0IHdpbGwgYmUgZGVsZXRlZCBmb3IgdjQgZmluYWwuXyBbY3JlYXRlR2xvYmFsU3R5bGVdIHJlY2VpdmVkIGNoaWxkcmVuIHdoaWNoIHdpbGwgbm90IGJlIHJlbmRlcmVkLiBQbGVhc2UgdXNlIHRoZSBjb21wb25lbnQgd2l0aG91dCBwYXNzaW5nIGNoaWxkcmVuIGVsZW1lbnRzLlxcblxcblwiLDEyOlwiSXQgc2VlbXMgeW91IGFyZSBpbnRlcnBvbGF0aW5nIGEga2V5ZnJhbWUgZGVjbGFyYXRpb24gKCVzKSBpbnRvIGFuIHVudGFnZ2VkIHN0cmluZy4gVGhpcyB3YXMgc3VwcG9ydGVkIGluIHN0eWxlZC1jb21wb25lbnRzIHYzLCBidXQgaXMgbm90IGxvbmdlciBzdXBwb3J0ZWQgaW4gdjQgYXMga2V5ZnJhbWVzIGFyZSBub3cgaW5qZWN0ZWQgb24tZGVtYW5kLiBQbGVhc2Ugd3JhcCB5b3VyIHN0cmluZyBpbiB0aGUgY3NzXFxcXGBcXFxcYCBoZWxwZXIgd2hpY2ggZW5zdXJlcyB0aGUgc3R5bGVzIGFyZSBpbmplY3RlZCBjb3JyZWN0bHkuIFNlZSBodHRwczovL3d3dy5zdHlsZWQtY29tcG9uZW50cy5jb20vZG9jcy9hcGkjY3NzXFxuXFxuXCIsMTM6XCIlcyBpcyBub3QgYSBzdHlsZWQgY29tcG9uZW50IGFuZCBjYW5ub3QgYmUgcmVmZXJyZWQgdG8gdmlhIGNvbXBvbmVudCBzZWxlY3Rvci4gU2VlIGh0dHBzOi8vd3d3LnN0eWxlZC1jb21wb25lbnRzLmNvbS9kb2NzL2FkdmFuY2VkI3JlZmVycmluZy10by1vdGhlci1jb21wb25lbnRzIGZvciBtb3JlIGRldGFpbHMuXFxuXFxuXCIsMTQ6J1RoZW1lUHJvdmlkZXI6IFwidGhlbWVcIiBwcm9wIGlzIHJlcXVpcmVkLlxcblxcbicsMTU6XCJBIHN0eWxpcyBwbHVnaW4gaGFzIGJlZW4gc3VwcGxpZWQgdGhhdCBpcyBub3QgbmFtZWQuIFdlIG5lZWQgYSBuYW1lIGZvciBlYWNoIHBsdWdpbiB0byBiZSBhYmxlIHRvIHByZXZlbnQgc3R5bGluZyBjb2xsaXNpb25zIGJldHdlZW4gZGlmZmVyZW50IHN0eWxpcyBjb25maWd1cmF0aW9ucyB3aXRoaW4gdGhlIHNhbWUgYXBwLiBCZWZvcmUgeW91IHBhc3MgeW91ciBwbHVnaW4gdG8gYDxTdHlsZVNoZWV0TWFuYWdlciBzdHlsaXNQbHVnaW5zPXtbXX0+YCwgcGxlYXNlIG1ha2Ugc3VyZSBlYWNoIHBsdWdpbiBpcyB1bmlxdWVseS1uYW1lZCwgZS5nLlxcblxcbmBgYGpzXFxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGltcG9ydGVkUGx1Z2luLCAnbmFtZScsIHsgdmFsdWU6ICdzb21lLXVuaXF1ZS1uYW1lJyB9KTtcXG5gYGBcXG5cXG5cIiwxNjpcIlJlYWNoZWQgdGhlIGxpbWl0IG9mIGhvdyBtYW55IHN0eWxlZCBjb21wb25lbnRzIG1heSBiZSBjcmVhdGVkIGF0IGdyb3VwICVzLlxcbllvdSBtYXkgb25seSBjcmVhdGUgdXAgdG8gMSwwNzMsNzQxLDgyNCBjb21wb25lbnRzLiBJZiB5b3UncmUgY3JlYXRpbmcgY29tcG9uZW50cyBkeW5hbWljYWxseSxcXG5hcyBmb3IgaW5zdGFuY2UgaW4geW91ciByZW5kZXIgbWV0aG9kIHRoZW4geW91IG1heSBiZSBydW5uaW5nIGludG8gdGhpcyBsaW1pdGF0aW9uLlxcblxcblwiLDE3OlwiQ1NTU3R5bGVTaGVldCBjb3VsZCBub3QgYmUgZm91bmQgb24gSFRNTFN0eWxlRWxlbWVudC5cXG5IYXMgc3R5bGVkLWNvbXBvbmVudHMnIHN0eWxlIHRhZyBiZWVuIHVubW91bnRlZCBvciBhbHRlcmVkIGJ5IGFub3RoZXIgc2NyaXB0P1xcblwiLDE4OlwiVGhlbWVQcm92aWRlcjogUGxlYXNlIG1ha2Ugc3VyZSB5b3VyIHVzZVRoZW1lIGhvb2sgaXMgd2l0aGluIGEgYDxUaGVtZVByb3ZpZGVyPmBcIn06e307ZnVuY3Rpb24gZGUoKXtmb3IodmFyIGU9W10sdD0wO3Q8YXJndW1lbnRzLmxlbmd0aDt0KyspZVt0XT1hcmd1bWVudHNbdF07Zm9yKHZhciBuPWVbMF0sbz1bXSxyPTEscz1lLmxlbmd0aDtyPHM7cis9MSlvLnB1c2goZVtyXSk7cmV0dXJuIG8uZm9yRWFjaChmdW5jdGlvbihlKXtuPW4ucmVwbGFjZSgvJVthLXpdLyxlKX0pLG59ZnVuY3Rpb24gaGUodCl7Zm9yKHZhciBuPVtdLG89MTtvPGFyZ3VtZW50cy5sZW5ndGg7bysrKW5bby0xXT1hcmd1bWVudHNbb107cmV0dXJuXCJwcm9kdWN0aW9uXCI9PT1wcm9jZXNzLmVudi5OT0RFX0VOVj9uZXcgRXJyb3IoXCJBbiBlcnJvciBvY2N1cnJlZC4gU2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9zdHlsZWQtY29tcG9uZW50cy9zdHlsZWQtY29tcG9uZW50cy9ibG9iL21haW4vcGFja2FnZXMvc3R5bGVkLWNvbXBvbmVudHMvc3JjL3V0aWxzL2Vycm9ycy5tZCNcIi5jb25jYXQodCxcIiBmb3IgbW9yZSBpbmZvcm1hdGlvbi5cIikuY29uY2F0KG4ubGVuZ3RoPjA/XCIgQXJnczogXCIuY29uY2F0KG4uam9pbihcIiwgXCIpKTpcIlwiKSk6bmV3IEVycm9yKGRlLmFwcGx5KHZvaWQgMCxlKFtwZVt0XV0sbiwhMSkpLnRyaW0oKSl9dmFyIGZlPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZShlKXt0aGlzLmdyb3VwU2l6ZXM9bmV3IFVpbnQzMkFycmF5KDUxMiksdGhpcy5sZW5ndGg9NTEyLHRoaXMudGFnPWV9cmV0dXJuIGUucHJvdG90eXBlLmluZGV4T2ZHcm91cD1mdW5jdGlvbihlKXtmb3IodmFyIHQ9MCxuPTA7bjxlO24rKyl0Kz10aGlzLmdyb3VwU2l6ZXNbbl07cmV0dXJuIHR9LGUucHJvdG90eXBlLmluc2VydFJ1bGVzPWZ1bmN0aW9uKGUsdCl7aWYoZT49dGhpcy5ncm91cFNpemVzLmxlbmd0aCl7Zm9yKHZhciBuPXRoaXMuZ3JvdXBTaXplcyxvPW4ubGVuZ3RoLHI9bztlPj1yOylpZigocjw8PTEpPDApdGhyb3cgaGUoMTYsXCJcIi5jb25jYXQoZSkpO3RoaXMuZ3JvdXBTaXplcz1uZXcgVWludDMyQXJyYXkociksdGhpcy5ncm91cFNpemVzLnNldChuKSx0aGlzLmxlbmd0aD1yO2Zvcih2YXIgcz1vO3M8cjtzKyspdGhpcy5ncm91cFNpemVzW3NdPTB9Zm9yKHZhciBpPXRoaXMuaW5kZXhPZkdyb3VwKGUrMSksYT0ocz0wLHQubGVuZ3RoKTtzPGE7cysrKXRoaXMudGFnLmluc2VydFJ1bGUoaSx0W3NdKSYmKHRoaXMuZ3JvdXBTaXplc1tlXSsrLGkrKyl9LGUucHJvdG90eXBlLmNsZWFyR3JvdXA9ZnVuY3Rpb24oZSl7aWYoZTx0aGlzLmxlbmd0aCl7dmFyIHQ9dGhpcy5ncm91cFNpemVzW2VdLG49dGhpcy5pbmRleE9mR3JvdXAoZSksbz1uK3Q7dGhpcy5ncm91cFNpemVzW2VdPTA7Zm9yKHZhciByPW47cjxvO3IrKyl0aGlzLnRhZy5kZWxldGVSdWxlKG4pfX0sZS5wcm90b3R5cGUuZ2V0R3JvdXA9ZnVuY3Rpb24oZSl7dmFyIHQ9XCJcIjtpZihlPj10aGlzLmxlbmd0aHx8MD09PXRoaXMuZ3JvdXBTaXplc1tlXSlyZXR1cm4gdDtmb3IodmFyIG49dGhpcy5ncm91cFNpemVzW2VdLG89dGhpcy5pbmRleE9mR3JvdXAoZSkscj1vK24scz1vO3M8cjtzKyspdCs9XCJcIi5jb25jYXQodGhpcy50YWcuZ2V0UnVsZShzKSkuY29uY2F0KGcpO3JldHVybiB0fSxlfSgpLG1lPTE8PDMwLHllPW5ldyBNYXAsdmU9bmV3IE1hcCxnZT0xLFNlPWZ1bmN0aW9uKGUpe2lmKHllLmhhcyhlKSlyZXR1cm4geWUuZ2V0KGUpO2Zvcig7dmUuaGFzKGdlKTspZ2UrKzt2YXIgdD1nZSsrO2lmKFwicHJvZHVjdGlvblwiIT09cHJvY2Vzcy5lbnYuTk9ERV9FTlYmJigoMHx0KTwwfHx0Pm1lKSl0aHJvdyBoZSgxNixcIlwiLmNvbmNhdCh0KSk7cmV0dXJuIHllLnNldChlLHQpLHZlLnNldCh0LGUpLHR9LHdlPWZ1bmN0aW9uKGUsdCl7Z2U9dCsxLHllLnNldChlLHQpLHZlLnNldCh0LGUpfSxiZT1cInN0eWxlW1wiLmNvbmNhdChmLFwiXVtcIikuY29uY2F0KHksJz1cIicpLmNvbmNhdCh2LCdcIl0nKSxFZT1uZXcgUmVnRXhwKFwiXlwiLmNvbmNhdChmLCdcXFxcLmcoXFxcXGQrKVxcXFxbaWQ9XCIoW1xcXFx3XFxcXGQtXSspXCJcXFxcXS4qP1wiKFteXCJdKiknKSksTmU9ZnVuY3Rpb24oZSx0LG4pe2Zvcih2YXIgbyxyPW4uc3BsaXQoXCIsXCIpLHM9MCxpPXIubGVuZ3RoO3M8aTtzKyspKG89cltzXSkmJmUucmVnaXN0ZXJOYW1lKHQsbyl9LFBlPWZ1bmN0aW9uKGUsdCl7Zm9yKHZhciBuLG89KG51bGwhPT0obj10LnRleHRDb250ZW50KSYmdm9pZCAwIT09bj9uOlwiXCIpLnNwbGl0KGcpLHI9W10scz0wLGk9by5sZW5ndGg7czxpO3MrKyl7dmFyIGE9b1tzXS50cmltKCk7aWYoYSl7dmFyIGM9YS5tYXRjaChFZSk7aWYoYyl7dmFyIGw9MHxwYXJzZUludChjWzFdLDEwKSx1PWNbMl07MCE9PWwmJih3ZSh1LGwpLE5lKGUsdSxjWzNdKSxlLmdldFRhZygpLmluc2VydFJ1bGVzKGwscikpLHIubGVuZ3RoPTB9ZWxzZSByLnB1c2goYSl9fX0sX2U9ZnVuY3Rpb24oZSl7Zm9yKHZhciB0PWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoYmUpLG49MCxvPXQubGVuZ3RoO248bztuKyspe3ZhciByPXRbbl07ciYmci5nZXRBdHRyaWJ1dGUoZikhPT1tJiYoUGUoZSxyKSxyLnBhcmVudE5vZGUmJnIucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChyKSl9fTtmdW5jdGlvbiBDZSgpe3JldHVyblwidW5kZWZpbmVkXCIhPXR5cGVvZiBfX3dlYnBhY2tfbm9uY2VfXz9fX3dlYnBhY2tfbm9uY2VfXzpudWxsfXZhciBJZT1mdW5jdGlvbihlKXt2YXIgdD1kb2N1bWVudC5oZWFkLG49ZXx8dCxvPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJzdHlsZVwiKSxyPWZ1bmN0aW9uKGUpe3ZhciB0PUFycmF5LmZyb20oZS5xdWVyeVNlbGVjdG9yQWxsKFwic3R5bGVbXCIuY29uY2F0KGYsXCJdXCIpKSk7cmV0dXJuIHRbdC5sZW5ndGgtMV19KG4pLHM9dm9pZCAwIT09cj9yLm5leHRTaWJsaW5nOm51bGw7by5zZXRBdHRyaWJ1dGUoZixtKSxvLnNldEF0dHJpYnV0ZSh5LHYpO3ZhciBpPUNlKCk7cmV0dXJuIGkmJm8uc2V0QXR0cmlidXRlKFwibm9uY2VcIixpKSxuLmluc2VydEJlZm9yZShvLHMpLG99LEFlPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZShlKXt0aGlzLmVsZW1lbnQ9SWUoZSksdGhpcy5lbGVtZW50LmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKFwiXCIpKSx0aGlzLnNoZWV0PWZ1bmN0aW9uKGUpe2lmKGUuc2hlZXQpcmV0dXJuIGUuc2hlZXQ7Zm9yKHZhciB0PWRvY3VtZW50LnN0eWxlU2hlZXRzLG49MCxvPXQubGVuZ3RoO248bztuKyspe3ZhciByPXRbbl07aWYoci5vd25lck5vZGU9PT1lKXJldHVybiByfXRocm93IGhlKDE3KX0odGhpcy5lbGVtZW50KSx0aGlzLmxlbmd0aD0wfXJldHVybiBlLnByb3RvdHlwZS5pbnNlcnRSdWxlPWZ1bmN0aW9uKGUsdCl7dHJ5e3JldHVybiB0aGlzLnNoZWV0Lmluc2VydFJ1bGUodCxlKSx0aGlzLmxlbmd0aCsrLCEwfWNhdGNoKGUpe3JldHVybiExfX0sZS5wcm90b3R5cGUuZGVsZXRlUnVsZT1mdW5jdGlvbihlKXt0aGlzLnNoZWV0LmRlbGV0ZVJ1bGUoZSksdGhpcy5sZW5ndGgtLX0sZS5wcm90b3R5cGUuZ2V0UnVsZT1mdW5jdGlvbihlKXt2YXIgdD10aGlzLnNoZWV0LmNzc1J1bGVzW2VdO3JldHVybiB0JiZ0LmNzc1RleHQ/dC5jc3NUZXh0OlwiXCJ9LGV9KCksT2U9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKGUpe3RoaXMuZWxlbWVudD1JZShlKSx0aGlzLm5vZGVzPXRoaXMuZWxlbWVudC5jaGlsZE5vZGVzLHRoaXMubGVuZ3RoPTB9cmV0dXJuIGUucHJvdG90eXBlLmluc2VydFJ1bGU9ZnVuY3Rpb24oZSx0KXtpZihlPD10aGlzLmxlbmd0aCYmZT49MCl7dmFyIG49ZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUodCk7cmV0dXJuIHRoaXMuZWxlbWVudC5pbnNlcnRCZWZvcmUobix0aGlzLm5vZGVzW2VdfHxudWxsKSx0aGlzLmxlbmd0aCsrLCEwfXJldHVybiExfSxlLnByb3RvdHlwZS5kZWxldGVSdWxlPWZ1bmN0aW9uKGUpe3RoaXMuZWxlbWVudC5yZW1vdmVDaGlsZCh0aGlzLm5vZGVzW2VdKSx0aGlzLmxlbmd0aC0tfSxlLnByb3RvdHlwZS5nZXRSdWxlPWZ1bmN0aW9uKGUpe3JldHVybiBlPHRoaXMubGVuZ3RoP3RoaXMubm9kZXNbZV0udGV4dENvbnRlbnQ6XCJcIn0sZX0oKSxEZT1mdW5jdGlvbigpe2Z1bmN0aW9uIGUoZSl7dGhpcy5ydWxlcz1bXSx0aGlzLmxlbmd0aD0wfXJldHVybiBlLnByb3RvdHlwZS5pbnNlcnRSdWxlPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIGU8PXRoaXMubGVuZ3RoJiYodGhpcy5ydWxlcy5zcGxpY2UoZSwwLHQpLHRoaXMubGVuZ3RoKyssITApfSxlLnByb3RvdHlwZS5kZWxldGVSdWxlPWZ1bmN0aW9uKGUpe3RoaXMucnVsZXMuc3BsaWNlKGUsMSksdGhpcy5sZW5ndGgtLX0sZS5wcm90b3R5cGUuZ2V0UnVsZT1mdW5jdGlvbihlKXtyZXR1cm4gZTx0aGlzLmxlbmd0aD90aGlzLnJ1bGVzW2VdOlwiXCJ9LGV9KCksUmU9UyxUZT17aXNTZXJ2ZXI6IVMsdXNlQ1NTT01JbmplY3Rpb246IXd9LGtlPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZShlLG4sbyl7dm9pZCAwPT09ZSYmKGU9Qyksdm9pZCAwPT09biYmKG49e30pO3ZhciByPXRoaXM7dGhpcy5vcHRpb25zPXQodCh7fSxUZSksZSksdGhpcy5ncz1uLHRoaXMubmFtZXM9bmV3IE1hcChvKSx0aGlzLnNlcnZlcj0hIWUuaXNTZXJ2ZXIsIXRoaXMuc2VydmVyJiZTJiZSZSYmKFJlPSExLF9lKHRoaXMpKSx1ZSh0aGlzLGZ1bmN0aW9uKCl7cmV0dXJuIGZ1bmN0aW9uKGUpe2Zvcih2YXIgdD1lLmdldFRhZygpLG49dC5sZW5ndGgsbz1cIlwiLHI9ZnVuY3Rpb24obil7dmFyIHI9ZnVuY3Rpb24oZSl7cmV0dXJuIHZlLmdldChlKX0obik7aWYodm9pZCAwPT09cilyZXR1cm5cImNvbnRpbnVlXCI7dmFyIHM9ZS5uYW1lcy5nZXQociksaT10LmdldEdyb3VwKG4pO2lmKHZvaWQgMD09PXN8fCFzLnNpemV8fDA9PT1pLmxlbmd0aClyZXR1cm5cImNvbnRpbnVlXCI7dmFyIGE9XCJcIi5jb25jYXQoZixcIi5nXCIpLmNvbmNhdChuLCdbaWQ9XCInKS5jb25jYXQociwnXCJdJyksYz1cIlwiO3ZvaWQgMCE9PXMmJnMuZm9yRWFjaChmdW5jdGlvbihlKXtlLmxlbmd0aD4wJiYoYys9XCJcIi5jb25jYXQoZSxcIixcIikpfSksbys9XCJcIi5jb25jYXQoaSkuY29uY2F0KGEsJ3tjb250ZW50OlwiJykuY29uY2F0KGMsJ1wifScpLmNvbmNhdChnKX0scz0wO3M8bjtzKyspcihzKTtyZXR1cm4gb30ocil9KX1yZXR1cm4gZS5yZWdpc3RlcklkPWZ1bmN0aW9uKGUpe3JldHVybiBTZShlKX0sZS5wcm90b3R5cGUucmVoeWRyYXRlPWZ1bmN0aW9uKCl7IXRoaXMuc2VydmVyJiZTJiZfZSh0aGlzKX0sZS5wcm90b3R5cGUucmVjb25zdHJ1Y3RXaXRoT3B0aW9ucz1mdW5jdGlvbihuLG8pe3JldHVybiB2b2lkIDA9PT1vJiYobz0hMCksbmV3IGUodCh0KHt9LHRoaXMub3B0aW9ucyksbiksdGhpcy5ncyxvJiZ0aGlzLm5hbWVzfHx2b2lkIDApfSxlLnByb3RvdHlwZS5hbGxvY2F0ZUdTSW5zdGFuY2U9ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuZ3NbZV09KHRoaXMuZ3NbZV18fDApKzF9LGUucHJvdG90eXBlLmdldFRhZz1mdW5jdGlvbigpe3JldHVybiB0aGlzLnRhZ3x8KHRoaXMudGFnPShlPWZ1bmN0aW9uKGUpe3ZhciB0PWUudXNlQ1NTT01JbmplY3Rpb24sbj1lLnRhcmdldDtyZXR1cm4gZS5pc1NlcnZlcj9uZXcgRGUobik6dD9uZXcgQWUobik6bmV3IE9lKG4pfSh0aGlzLm9wdGlvbnMpLG5ldyBmZShlKSkpO3ZhciBlfSxlLnByb3RvdHlwZS5oYXNOYW1lRm9ySWQ9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdGhpcy5uYW1lcy5oYXMoZSkmJnRoaXMubmFtZXMuZ2V0KGUpLmhhcyh0KX0sZS5wcm90b3R5cGUucmVnaXN0ZXJOYW1lPWZ1bmN0aW9uKGUsdCl7aWYoU2UoZSksdGhpcy5uYW1lcy5oYXMoZSkpdGhpcy5uYW1lcy5nZXQoZSkuYWRkKHQpO2Vsc2V7dmFyIG49bmV3IFNldDtuLmFkZCh0KSx0aGlzLm5hbWVzLnNldChlLG4pfX0sZS5wcm90b3R5cGUuaW5zZXJ0UnVsZXM9ZnVuY3Rpb24oZSx0LG4pe3RoaXMucmVnaXN0ZXJOYW1lKGUsdCksdGhpcy5nZXRUYWcoKS5pbnNlcnRSdWxlcyhTZShlKSxuKX0sZS5wcm90b3R5cGUuY2xlYXJOYW1lcz1mdW5jdGlvbihlKXt0aGlzLm5hbWVzLmhhcyhlKSYmdGhpcy5uYW1lcy5nZXQoZSkuY2xlYXIoKX0sZS5wcm90b3R5cGUuY2xlYXJSdWxlcz1mdW5jdGlvbihlKXt0aGlzLmdldFRhZygpLmNsZWFyR3JvdXAoU2UoZSkpLHRoaXMuY2xlYXJOYW1lcyhlKX0sZS5wcm90b3R5cGUuY2xlYXJUYWc9ZnVuY3Rpb24oKXt0aGlzLnRhZz12b2lkIDB9LGV9KCksamU9LyYvZyx4ZT0vXlxccypcXC9cXC8uKiQvZ207ZnVuY3Rpb24gVmUoZSx0KXtyZXR1cm4gZS5tYXAoZnVuY3Rpb24oZSl7cmV0dXJuXCJydWxlXCI9PT1lLnR5cGUmJihlLnZhbHVlPVwiXCIuY29uY2F0KHQsXCIgXCIpLmNvbmNhdChlLnZhbHVlKSxlLnZhbHVlPWUudmFsdWUucmVwbGFjZUFsbChcIixcIixcIixcIi5jb25jYXQodCxcIiBcIikpLGUucHJvcHM9ZS5wcm9wcy5tYXAoZnVuY3Rpb24oZSl7cmV0dXJuXCJcIi5jb25jYXQodCxcIiBcIikuY29uY2F0KGUpfSkpLEFycmF5LmlzQXJyYXkoZS5jaGlsZHJlbikmJlwiQGtleWZyYW1lc1wiIT09ZS50eXBlJiYoZS5jaGlsZHJlbj1WZShlLmNoaWxkcmVuLHQpKSxlfSl9ZnVuY3Rpb24gRmUoZSl7dmFyIHQsbixvLHI9dm9pZCAwPT09ZT9DOmUscz1yLm9wdGlvbnMsaT12b2lkIDA9PT1zP0M6cyxhPXIucGx1Z2lucyxjPXZvaWQgMD09PWE/XzphLGw9ZnVuY3Rpb24oZSxvLHIpe3JldHVybiByLnN0YXJ0c1dpdGgobikmJnIuZW5kc1dpdGgobikmJnIucmVwbGFjZUFsbChuLFwiXCIpLmxlbmd0aD4wP1wiLlwiLmNvbmNhdCh0KTplfSx1PWMuc2xpY2UoKTt1LnB1c2goZnVuY3Rpb24oZSl7ZS50eXBlPT09ZC5SVUxFU0VUJiZlLnZhbHVlLmluY2x1ZGVzKFwiJlwiKSYmKGUucHJvcHNbMF09ZS5wcm9wc1swXS5yZXBsYWNlKGplLG4pLnJlcGxhY2UobyxsKSl9KSxpLnByZWZpeCYmdS5wdXNoKGQucHJlZml4ZXIpLHUucHVzaChkLnN0cmluZ2lmeSk7dmFyIHA9ZnVuY3Rpb24oZSxyLHMsYSl7dm9pZCAwPT09ciYmKHI9XCJcIiksdm9pZCAwPT09cyYmKHM9XCJcIiksdm9pZCAwPT09YSYmKGE9XCImXCIpLHQ9YSxuPXIsbz1uZXcgUmVnRXhwKFwiXFxcXFwiLmNvbmNhdChuLFwiXFxcXGJcIiksXCJnXCIpO3ZhciBjPWUucmVwbGFjZSh4ZSxcIlwiKSxsPWQuY29tcGlsZShzfHxyP1wiXCIuY29uY2F0KHMsXCIgXCIpLmNvbmNhdChyLFwiIHsgXCIpLmNvbmNhdChjLFwiIH1cIik6Yyk7aS5uYW1lc3BhY2UmJihsPVZlKGwsaS5uYW1lc3BhY2UpKTt2YXIgcD1bXTtyZXR1cm4gZC5zZXJpYWxpemUobCxkLm1pZGRsZXdhcmUodS5jb25jYXQoZC5ydWxlc2hlZXQoZnVuY3Rpb24oZSl7cmV0dXJuIHAucHVzaChlKX0pKSkpLHB9O3JldHVybiBwLmhhc2g9Yy5sZW5ndGg/Yy5yZWR1Y2UoZnVuY3Rpb24oZSx0KXtyZXR1cm4gdC5uYW1lfHxoZSgxNSksTShlLHQubmFtZSl9LEYpLnRvU3RyaW5nKCk6XCJcIixwfXZhciBNZT1uZXcga2UsemU9RmUoKSwkZT1vLmNyZWF0ZUNvbnRleHQoe3Nob3VsZEZvcndhcmRQcm9wOnZvaWQgMCxzdHlsZVNoZWV0Ok1lLHN0eWxpczp6ZX0pLEJlPSRlLkNvbnN1bWVyLExlPW8uY3JlYXRlQ29udGV4dCh2b2lkIDApO2Z1bmN0aW9uIEdlKCl7cmV0dXJuIGMoJGUpfWZ1bmN0aW9uIFllKGUpe3ZhciB0PXMoZS5zdHlsaXNQbHVnaW5zKSxuPXRbMF0scj10WzFdLGM9R2UoKS5zdHlsZVNoZWV0LGw9aShmdW5jdGlvbigpe3ZhciB0PWM7cmV0dXJuIGUuc2hlZXQ/dD1lLnNoZWV0OmUudGFyZ2V0JiYodD10LnJlY29uc3RydWN0V2l0aE9wdGlvbnMoe3RhcmdldDplLnRhcmdldH0sITEpKSxlLmRpc2FibGVDU1NPTUluamVjdGlvbiYmKHQ9dC5yZWNvbnN0cnVjdFdpdGhPcHRpb25zKHt1c2VDU1NPTUluamVjdGlvbjohMX0pKSx0fSxbZS5kaXNhYmxlQ1NTT01JbmplY3Rpb24sZS5zaGVldCxlLnRhcmdldCxjXSksdT1pKGZ1bmN0aW9uKCl7cmV0dXJuIEZlKHtvcHRpb25zOntuYW1lc3BhY2U6ZS5uYW1lc3BhY2UscHJlZml4OmUuZW5hYmxlVmVuZG9yUHJlZml4ZXN9LHBsdWdpbnM6bn0pfSxbZS5lbmFibGVWZW5kb3JQcmVmaXhlcyxlLm5hbWVzcGFjZSxuXSk7YShmdW5jdGlvbigpe3AobixlLnN0eWxpc1BsdWdpbnMpfHxyKGUuc3R5bGlzUGx1Z2lucyl9LFtlLnN0eWxpc1BsdWdpbnNdKTt2YXIgZD1pKGZ1bmN0aW9uKCl7cmV0dXJue3Nob3VsZEZvcndhcmRQcm9wOmUuc2hvdWxkRm9yd2FyZFByb3Asc3R5bGVTaGVldDpsLHN0eWxpczp1fX0sW2Uuc2hvdWxkRm9yd2FyZFByb3AsbCx1XSk7cmV0dXJuIG8uY3JlYXRlRWxlbWVudCgkZS5Qcm92aWRlcix7dmFsdWU6ZH0sby5jcmVhdGVFbGVtZW50KExlLlByb3ZpZGVyLHt2YWx1ZTp1fSxlLmNoaWxkcmVuKSl9dmFyIFdlPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZShlLHQpe3ZhciBuPXRoaXM7dGhpcy5pbmplY3Q9ZnVuY3Rpb24oZSx0KXt2b2lkIDA9PT10JiYodD16ZSk7dmFyIG89bi5uYW1lK3QuaGFzaDtlLmhhc05hbWVGb3JJZChuLmlkLG8pfHxlLmluc2VydFJ1bGVzKG4uaWQsbyx0KG4ucnVsZXMsbyxcIkBrZXlmcmFtZXNcIikpfSx0aGlzLm5hbWU9ZSx0aGlzLmlkPVwic2Mta2V5ZnJhbWVzLVwiLmNvbmNhdChlKSx0aGlzLnJ1bGVzPXQsdWUodGhpcyxmdW5jdGlvbigpe3Rocm93IGhlKDEyLFN0cmluZyhuLm5hbWUpKX0pfXJldHVybiBlLnByb3RvdHlwZS5nZXROYW1lPWZ1bmN0aW9uKGUpe3JldHVybiB2b2lkIDA9PT1lJiYoZT16ZSksdGhpcy5uYW1lK2UuaGFzaH0sZX0oKSxxZT1mdW5jdGlvbihlKXtyZXR1cm4gZT49XCJBXCImJmU8PVwiWlwifTtmdW5jdGlvbiBIZShlKXtmb3IodmFyIHQ9XCJcIixuPTA7bjxlLmxlbmd0aDtuKyspe3ZhciBvPWVbbl07aWYoMT09PW4mJlwiLVwiPT09byYmXCItXCI9PT1lWzBdKXJldHVybiBlO3FlKG8pP3QrPVwiLVwiK28udG9Mb3dlckNhc2UoKTp0Kz1vfXJldHVybiB0LnN0YXJ0c1dpdGgoXCJtcy1cIik/XCItXCIrdDp0fXZhciBVZT1mdW5jdGlvbihlKXtyZXR1cm4gbnVsbD09ZXx8ITE9PT1lfHxcIlwiPT09ZX0sSmU9ZnVuY3Rpb24odCl7dmFyIG4sbyxyPVtdO2Zvcih2YXIgcyBpbiB0KXt2YXIgaT10W3NdO3QuaGFzT3duUHJvcGVydHkocykmJiFVZShpKSYmKEFycmF5LmlzQXJyYXkoaSkmJmkuaXNDc3N8fHJlKGkpP3IucHVzaChcIlwiLmNvbmNhdChIZShzKSxcIjpcIiksaSxcIjtcIik6Y2UoaSk/ci5wdXNoLmFwcGx5KHIsZShlKFtcIlwiLmNvbmNhdChzLFwiIHtcIildLEplKGkpLCExKSxbXCJ9XCJdLCExKSk6ci5wdXNoKFwiXCIuY29uY2F0KEhlKHMpLFwiOiBcIikuY29uY2F0KChuPXMsbnVsbD09KG89aSl8fFwiYm9vbGVhblwiPT10eXBlb2Ygb3x8XCJcIj09PW8/XCJcIjpcIm51bWJlclwiIT10eXBlb2Ygb3x8MD09PW98fG4gaW4gaHx8bi5zdGFydHNXaXRoKFwiLS1cIik/U3RyaW5nKG8pLnRyaW0oKTpcIlwiLmNvbmNhdChvLFwicHhcIikpLFwiO1wiKSkpfXJldHVybiByfTtmdW5jdGlvbiBYZShlLHQsbixvKXtpZihVZShlKSlyZXR1cm5bXTtpZihzZShlKSlyZXR1cm5bXCIuXCIuY29uY2F0KGUuc3R5bGVkQ29tcG9uZW50SWQpXTtpZihyZShlKSl7aWYoIXJlKHM9ZSl8fHMucHJvdG90eXBlJiZzLnByb3RvdHlwZS5pc1JlYWN0Q29tcG9uZW50fHwhdClyZXR1cm5bZV07dmFyIHI9ZSh0KTtyZXR1cm5cInByb2R1Y3Rpb25cIj09PXByb2Nlc3MuZW52Lk5PREVfRU5WfHxcIm9iamVjdFwiIT10eXBlb2Ygcnx8QXJyYXkuaXNBcnJheShyKXx8ciBpbnN0YW5jZW9mIFdlfHxjZShyKXx8bnVsbD09PXJ8fGNvbnNvbGUuZXJyb3IoXCJcIi5jb25jYXQoQihlKSxcIiBpcyBub3QgYSBzdHlsZWQgY29tcG9uZW50IGFuZCBjYW5ub3QgYmUgcmVmZXJyZWQgdG8gdmlhIGNvbXBvbmVudCBzZWxlY3Rvci4gU2VlIGh0dHBzOi8vd3d3LnN0eWxlZC1jb21wb25lbnRzLmNvbS9kb2NzL2FkdmFuY2VkI3JlZmVycmluZy10by1vdGhlci1jb21wb25lbnRzIGZvciBtb3JlIGRldGFpbHMuXCIpKSxYZShyLHQsbixvKX12YXIgcztyZXR1cm4gZSBpbnN0YW5jZW9mIFdlP24/KGUuaW5qZWN0KG4sbyksW2UuZ2V0TmFtZShvKV0pOltlXTpjZShlKT9KZShlKTpBcnJheS5pc0FycmF5KGUpP0FycmF5LnByb3RvdHlwZS5jb25jYXQuYXBwbHkoXyxlLm1hcChmdW5jdGlvbihlKXtyZXR1cm4gWGUoZSx0LG4sbyl9KSk6W2UudG9TdHJpbmcoKV19ZnVuY3Rpb24gWmUoZSl7Zm9yKHZhciB0PTA7dDxlLmxlbmd0aDt0Kz0xKXt2YXIgbj1lW3RdO2lmKHJlKG4pJiYhc2UobikpcmV0dXJuITF9cmV0dXJuITB9dmFyIEtlPXoodiksUWU9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKGUsdCxuKXt0aGlzLnJ1bGVzPWUsdGhpcy5zdGF0aWNSdWxlc0lkPVwiXCIsdGhpcy5pc1N0YXRpYz1cInByb2R1Y3Rpb25cIj09PXByb2Nlc3MuZW52Lk5PREVfRU5WJiYodm9pZCAwPT09bnx8bi5pc1N0YXRpYykmJlplKGUpLHRoaXMuY29tcG9uZW50SWQ9dCx0aGlzLmJhc2VIYXNoPU0oS2UsdCksdGhpcy5iYXNlU3R5bGU9bixrZS5yZWdpc3RlcklkKHQpfXJldHVybiBlLnByb3RvdHlwZS5nZW5lcmF0ZUFuZEluamVjdFN0eWxlcz1mdW5jdGlvbihlLHQsbil7dmFyIG89dGhpcy5iYXNlU3R5bGU/dGhpcy5iYXNlU3R5bGUuZ2VuZXJhdGVBbmRJbmplY3RTdHlsZXMoZSx0LG4pOlwiXCI7aWYodGhpcy5pc1N0YXRpYyYmIW4uaGFzaClpZih0aGlzLnN0YXRpY1J1bGVzSWQmJnQuaGFzTmFtZUZvcklkKHRoaXMuY29tcG9uZW50SWQsdGhpcy5zdGF0aWNSdWxlc0lkKSlvPWllKG8sdGhpcy5zdGF0aWNSdWxlc0lkKTtlbHNle3ZhciByPWFlKFhlKHRoaXMucnVsZXMsZSx0LG4pKSxzPXgoTSh0aGlzLmJhc2VIYXNoLHIpPj4+MCk7aWYoIXQuaGFzTmFtZUZvcklkKHRoaXMuY29tcG9uZW50SWQscykpe3ZhciBpPW4ocixcIi5cIi5jb25jYXQocyksdm9pZCAwLHRoaXMuY29tcG9uZW50SWQpO3QuaW5zZXJ0UnVsZXModGhpcy5jb21wb25lbnRJZCxzLGkpfW89aWUobyxzKSx0aGlzLnN0YXRpY1J1bGVzSWQ9c31lbHNle2Zvcih2YXIgYT1NKHRoaXMuYmFzZUhhc2gsbi5oYXNoKSxjPVwiXCIsbD0wO2w8dGhpcy5ydWxlcy5sZW5ndGg7bCsrKXt2YXIgdT10aGlzLnJ1bGVzW2xdO2lmKFwic3RyaW5nXCI9PXR5cGVvZiB1KWMrPXUsXCJwcm9kdWN0aW9uXCIhPT1wcm9jZXNzLmVudi5OT0RFX0VOViYmKGE9TShhLHUpKTtlbHNlIGlmKHUpe3ZhciBwPWFlKFhlKHUsZSx0LG4pKTthPU0oYSxwK2wpLGMrPXB9fWlmKGMpe3ZhciBkPXgoYT4+PjApO3QuaGFzTmFtZUZvcklkKHRoaXMuY29tcG9uZW50SWQsZCl8fHQuaW5zZXJ0UnVsZXModGhpcy5jb21wb25lbnRJZCxkLG4oYyxcIi5cIi5jb25jYXQoZCksdm9pZCAwLHRoaXMuY29tcG9uZW50SWQpKSxvPWllKG8sZCl9fXJldHVybiBvfSxlfSgpLGV0PW8uY3JlYXRlQ29udGV4dCh2b2lkIDApLHR0PWV0LkNvbnN1bWVyO2Z1bmN0aW9uIG50KCl7dmFyIGU9YyhldCk7aWYoIWUpdGhyb3cgaGUoMTgpO3JldHVybiBlfWZ1bmN0aW9uIG90KGUpe3ZhciBuPW8udXNlQ29udGV4dChldCkscj1pKGZ1bmN0aW9uKCl7cmV0dXJuIGZ1bmN0aW9uKGUsbil7aWYoIWUpdGhyb3cgaGUoMTQpO2lmKHJlKGUpKXt2YXIgbz1lKG4pO2lmKFwicHJvZHVjdGlvblwiIT09cHJvY2Vzcy5lbnYuTk9ERV9FTlYmJihudWxsPT09b3x8QXJyYXkuaXNBcnJheShvKXx8XCJvYmplY3RcIiE9dHlwZW9mIG8pKXRocm93IGhlKDcpO3JldHVybiBvfWlmKEFycmF5LmlzQXJyYXkoZSl8fFwib2JqZWN0XCIhPXR5cGVvZiBlKXRocm93IGhlKDgpO3JldHVybiBuP3QodCh7fSxuKSxlKTplfShlLnRoZW1lLG4pfSxbZS50aGVtZSxuXSk7cmV0dXJuIGUuY2hpbGRyZW4/by5jcmVhdGVFbGVtZW50KGV0LlByb3ZpZGVyLHt2YWx1ZTpyfSxlLmNoaWxkcmVuKTpudWxsfXZhciBydD17fSxzdD1uZXcgU2V0O2Z1bmN0aW9uIGl0KGUscixzKXt2YXIgaT1zZShlKSxhPWUsYz0hTChlKSxwPXIuYXR0cnMsZD12b2lkIDA9PT1wP186cCxoPXIuY29tcG9uZW50SWQsZj12b2lkIDA9PT1oP2Z1bmN0aW9uKGUsdCl7dmFyIG49XCJzdHJpbmdcIiE9dHlwZW9mIGU/XCJzY1wiOlIoZSk7cnRbbl09KHJ0W25dfHwwKSsxO3ZhciBvPVwiXCIuY29uY2F0KG4sXCItXCIpLmNvbmNhdCgkKHYrbitydFtuXSkpO3JldHVybiB0P1wiXCIuY29uY2F0KHQsXCItXCIpLmNvbmNhdChvKTpvfShyLmRpc3BsYXlOYW1lLHIucGFyZW50Q29tcG9uZW50SWQpOmgsbT1yLmRpc3BsYXlOYW1lLHk9dm9pZCAwPT09bT9mdW5jdGlvbihlKXtyZXR1cm4gTChlKT9cInN0eWxlZC5cIi5jb25jYXQoZSk6XCJTdHlsZWQoXCIuY29uY2F0KEIoZSksXCIpXCIpfShlKTptLGc9ci5kaXNwbGF5TmFtZSYmci5jb21wb25lbnRJZD9cIlwiLmNvbmNhdChSKHIuZGlzcGxheU5hbWUpLFwiLVwiKS5jb25jYXQoci5jb21wb25lbnRJZCk6ci5jb21wb25lbnRJZHx8ZixTPWkmJmEuYXR0cnM/YS5hdHRycy5jb25jYXQoZCkuZmlsdGVyKEJvb2xlYW4pOmQsdz1yLnNob3VsZEZvcndhcmRQcm9wO2lmKGkmJmEuc2hvdWxkRm9yd2FyZFByb3Ape3ZhciBiPWEuc2hvdWxkRm9yd2FyZFByb3A7aWYoci5zaG91bGRGb3J3YXJkUHJvcCl7dmFyIEU9ci5zaG91bGRGb3J3YXJkUHJvcDt3PWZ1bmN0aW9uKGUsdCl7cmV0dXJuIGIoZSx0KSYmRShlLHQpfX1lbHNlIHc9Yn12YXIgTj1uZXcgUWUocyxnLGk/YS5jb21wb25lbnRTdHlsZTp2b2lkIDApO2Z1bmN0aW9uIE8oZSxyKXtyZXR1cm4gZnVuY3Rpb24oZSxyLHMpe3ZhciBpPWUuYXR0cnMsYT1lLmNvbXBvbmVudFN0eWxlLGM9ZS5kZWZhdWx0UHJvcHMscD1lLmZvbGRlZENvbXBvbmVudElkcyxkPWUuc3R5bGVkQ29tcG9uZW50SWQsaD1lLnRhcmdldCxmPW8udXNlQ29udGV4dChldCksbT1HZSgpLHk9ZS5zaG91bGRGb3J3YXJkUHJvcHx8bS5zaG91bGRGb3J3YXJkUHJvcDtcInByb2R1Y3Rpb25cIiE9PXByb2Nlc3MuZW52Lk5PREVfRU5WJiZsKGQpO3ZhciB2PUkocixmLGMpfHxDLGc9ZnVuY3Rpb24oZSxuLG8pe2Zvcih2YXIgcixzPXQodCh7fSxuKSx7Y2xhc3NOYW1lOnZvaWQgMCx0aGVtZTpvfSksaT0wO2k8ZS5sZW5ndGg7aSs9MSl7dmFyIGE9cmUocj1lW2ldKT9yKHMpOnI7Zm9yKHZhciBjIGluIGEpc1tjXT1cImNsYXNzTmFtZVwiPT09Yz9pZShzW2NdLGFbY10pOlwic3R5bGVcIj09PWM/dCh0KHt9LHNbY10pLGFbY10pOmFbY119cmV0dXJuIG4uY2xhc3NOYW1lJiYocy5jbGFzc05hbWU9aWUocy5jbGFzc05hbWUsbi5jbGFzc05hbWUpKSxzfShpLHIsdiksUz1nLmFzfHxoLHc9e307Zm9yKHZhciBiIGluIGcpdm9pZCAwPT09Z1tiXXx8XCIkXCI9PT1iWzBdfHxcImFzXCI9PT1ifHxcInRoZW1lXCI9PT1iJiZnLnRoZW1lPT09dnx8KFwiZm9yd2FyZGVkQXNcIj09PWI/dy5hcz1nLmZvcndhcmRlZEFzOnkmJiF5KGIsUyl8fCh3W2JdPWdbYl0seXx8XCJkZXZlbG9wbWVudFwiIT09cHJvY2Vzcy5lbnYuTk9ERV9FTlZ8fG4oYil8fHN0LmhhcyhiKXx8IUEuaGFzKFMpfHwoc3QuYWRkKGIpLGNvbnNvbGUud2Fybignc3R5bGVkLWNvbXBvbmVudHM6IGl0IGxvb2tzIGxpa2UgYW4gdW5rbm93biBwcm9wIFwiJy5jb25jYXQoYiwnXCIgaXMgYmVpbmcgc2VudCB0aHJvdWdoIHRvIHRoZSBET00sIHdoaWNoIHdpbGwgbGlrZWx5IHRyaWdnZXIgYSBSZWFjdCBjb25zb2xlIGVycm9yLiBJZiB5b3Ugd291bGQgbGlrZSBhdXRvbWF0aWMgZmlsdGVyaW5nIG9mIHVua25vd24gcHJvcHMsIHlvdSBjYW4gb3B0LWludG8gdGhhdCBiZWhhdmlvciB2aWEgYDxTdHlsZVNoZWV0TWFuYWdlciBzaG91bGRGb3J3YXJkUHJvcD17Li4ufT5gIChjb25uZWN0IGFuIEFQSSBsaWtlIGBAZW1vdGlvbi9pcy1wcm9wLXZhbGlkYCkgb3IgY29uc2lkZXIgdXNpbmcgdHJhbnNpZW50IHByb3BzIChgJGAgcHJlZml4IGZvciBhdXRvbWF0aWMgZmlsdGVyaW5nLiknKSkpKSk7dmFyIEU9ZnVuY3Rpb24oZSx0KXt2YXIgbj1HZSgpLG89ZS5nZW5lcmF0ZUFuZEluamVjdFN0eWxlcyh0LG4uc3R5bGVTaGVldCxuLnN0eWxpcyk7cmV0dXJuXCJwcm9kdWN0aW9uXCIhPT1wcm9jZXNzLmVudi5OT0RFX0VOViYmbChvKSxvfShhLGcpO1wicHJvZHVjdGlvblwiIT09cHJvY2Vzcy5lbnYuTk9ERV9FTlYmJmUud2FyblRvb01hbnlDbGFzc2VzJiZlLndhcm5Ub29NYW55Q2xhc3NlcyhFKTt2YXIgTj1pZShwLGQpO3JldHVybiBFJiYoTis9XCIgXCIrRSksZy5jbGFzc05hbWUmJihOKz1cIiBcIitnLmNsYXNzTmFtZSksd1tMKFMpJiYhQS5oYXMoUyk/XCJjbGFzc1wiOlwiY2xhc3NOYW1lXCJdPU4scyYmKHcucmVmPXMpLHUoUyx3KX0oRCxlLHIpfU8uZGlzcGxheU5hbWU9eTt2YXIgRD1vLmZvcndhcmRSZWYoTyk7cmV0dXJuIEQuYXR0cnM9UyxELmNvbXBvbmVudFN0eWxlPU4sRC5kaXNwbGF5TmFtZT15LEQuc2hvdWxkRm9yd2FyZFByb3A9dyxELmZvbGRlZENvbXBvbmVudElkcz1pP2llKGEuZm9sZGVkQ29tcG9uZW50SWRzLGEuc3R5bGVkQ29tcG9uZW50SWQpOlwiXCIsRC5zdHlsZWRDb21wb25lbnRJZD1nLEQudGFyZ2V0PWk/YS50YXJnZXQ6ZSxPYmplY3QuZGVmaW5lUHJvcGVydHkoRCxcImRlZmF1bHRQcm9wc1wiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fZm9sZGVkRGVmYXVsdFByb3BzfSxzZXQ6ZnVuY3Rpb24oZSl7dGhpcy5fZm9sZGVkRGVmYXVsdFByb3BzPWk/ZnVuY3Rpb24oZSl7Zm9yKHZhciB0PVtdLG49MTtuPGFyZ3VtZW50cy5sZW5ndGg7bisrKXRbbi0xXT1hcmd1bWVudHNbbl07Zm9yKHZhciBvPTAscj10O288ci5sZW5ndGg7bysrKWxlKGUscltvXSwhMCk7cmV0dXJuIGV9KHt9LGEuZGVmYXVsdFByb3BzLGUpOmV9fSksXCJwcm9kdWN0aW9uXCIhPT1wcm9jZXNzLmVudi5OT0RFX0VOViYmKFAoeSxnKSxELndhcm5Ub29NYW55Q2xhc3Nlcz1mdW5jdGlvbihlLHQpe3ZhciBuPXt9LG89ITE7cmV0dXJuIGZ1bmN0aW9uKHIpe2lmKCFvJiYobltyXT0hMCxPYmplY3Qua2V5cyhuKS5sZW5ndGg+PTIwMCkpe3ZhciBzPXQ/JyB3aXRoIHRoZSBpZCBvZiBcIicuY29uY2F0KHQsJ1wiJyk6XCJcIjtjb25zb2xlLndhcm4oXCJPdmVyIFwiLmNvbmNhdCgyMDAsXCIgY2xhc3NlcyB3ZXJlIGdlbmVyYXRlZCBmb3IgY29tcG9uZW50IFwiKS5jb25jYXQoZSkuY29uY2F0KHMsXCIuXFxuXCIpK1wiQ29uc2lkZXIgdXNpbmcgdGhlIGF0dHJzIG1ldGhvZCwgdG9nZXRoZXIgd2l0aCBhIHN0eWxlIG9iamVjdCBmb3IgZnJlcXVlbnRseSBjaGFuZ2VkIHN0eWxlcy5cXG5FeGFtcGxlOlxcbiAgY29uc3QgQ29tcG9uZW50ID0gc3R5bGVkLmRpdi5hdHRycyhwcm9wcyA9PiAoe1xcbiAgICBzdHlsZToge1xcbiAgICAgIGJhY2tncm91bmQ6IHByb3BzLmJhY2tncm91bmQsXFxuICAgIH0sXFxuICB9KSlgd2lkdGg6IDEwMCU7YFxcblxcbiAgPENvbXBvbmVudCAvPlwiKSxvPSEwLG49e319fX0oeSxnKSksdWUoRCxmdW5jdGlvbigpe3JldHVyblwiLlwiLmNvbmNhdChELnN0eWxlZENvbXBvbmVudElkKX0pLGMmJm9lKEQsZSx7YXR0cnM6ITAsY29tcG9uZW50U3R5bGU6ITAsZGlzcGxheU5hbWU6ITAsZm9sZGVkQ29tcG9uZW50SWRzOiEwLHNob3VsZEZvcndhcmRQcm9wOiEwLHN0eWxlZENvbXBvbmVudElkOiEwLHRhcmdldDohMH0pLER9ZnVuY3Rpb24gYXQoZSx0KXtmb3IodmFyIG49W2VbMF1dLG89MCxyPXQubGVuZ3RoO288cjtvKz0xKW4ucHVzaCh0W29dLGVbbysxXSk7cmV0dXJuIG59dmFyIGN0PWZ1bmN0aW9uKGUpe3JldHVybiBPYmplY3QuYXNzaWduKGUse2lzQ3NzOiEwfSl9O2Z1bmN0aW9uIGx0KHQpe2Zvcih2YXIgbj1bXSxvPTE7bzxhcmd1bWVudHMubGVuZ3RoO28rKyluW28tMV09YXJndW1lbnRzW29dO2lmKHJlKHQpfHxjZSh0KSlyZXR1cm4gY3QoWGUoYXQoXyxlKFt0XSxuLCEwKSkpKTt2YXIgcj10O3JldHVybiAwPT09bi5sZW5ndGgmJjE9PT1yLmxlbmd0aCYmXCJzdHJpbmdcIj09dHlwZW9mIHJbMF0/WGUocik6Y3QoWGUoYXQocixuKSkpfWZ1bmN0aW9uIHV0KG4sbyxyKXtpZih2b2lkIDA9PT1yJiYocj1DKSwhbyl0aHJvdyBoZSgxLG8pO3ZhciBzPWZ1bmN0aW9uKHQpe2Zvcih2YXIgcz1bXSxpPTE7aTxhcmd1bWVudHMubGVuZ3RoO2krKylzW2ktMV09YXJndW1lbnRzW2ldO3JldHVybiBuKG8scixsdC5hcHBseSh2b2lkIDAsZShbdF0scywhMSkpKX07cmV0dXJuIHMuYXR0cnM9ZnVuY3Rpb24oZSl7cmV0dXJuIHV0KG4sbyx0KHQoe30scikse2F0dHJzOkFycmF5LnByb3RvdHlwZS5jb25jYXQoci5hdHRycyxlKS5maWx0ZXIoQm9vbGVhbil9KSl9LHMud2l0aENvbmZpZz1mdW5jdGlvbihlKXtyZXR1cm4gdXQobixvLHQodCh7fSxyKSxlKSl9LHN9dmFyIHB0PWZ1bmN0aW9uKGUpe3JldHVybiB1dChpdCxlKX0sZHQ9cHQ7QS5mb3JFYWNoKGZ1bmN0aW9uKGUpe2R0W2VdPXB0KGUpfSk7dmFyIGh0PWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZShlLHQpe3RoaXMucnVsZXM9ZSx0aGlzLmNvbXBvbmVudElkPXQsdGhpcy5pc1N0YXRpYz1aZShlKSxrZS5yZWdpc3RlcklkKHRoaXMuY29tcG9uZW50SWQrMSl9cmV0dXJuIGUucHJvdG90eXBlLmNyZWF0ZVN0eWxlcz1mdW5jdGlvbihlLHQsbixvKXt2YXIgcj1vKGFlKFhlKHRoaXMucnVsZXMsdCxuLG8pKSxcIlwiKSxzPXRoaXMuY29tcG9uZW50SWQrZTtuLmluc2VydFJ1bGVzKHMscyxyKX0sZS5wcm90b3R5cGUucmVtb3ZlU3R5bGVzPWZ1bmN0aW9uKGUsdCl7dC5jbGVhclJ1bGVzKHRoaXMuY29tcG9uZW50SWQrZSl9LGUucHJvdG90eXBlLnJlbmRlclN0eWxlcz1mdW5jdGlvbihlLHQsbixvKXtlPjImJmtlLnJlZ2lzdGVySWQodGhpcy5jb21wb25lbnRJZCtlKSx0aGlzLnJlbW92ZVN0eWxlcyhlLG4pLHRoaXMuY3JlYXRlU3R5bGVzKGUsdCxuLG8pfSxlfSgpO2Z1bmN0aW9uIGZ0KG4pe2Zvcih2YXIgcj1bXSxzPTE7czxhcmd1bWVudHMubGVuZ3RoO3MrKylyW3MtMV09YXJndW1lbnRzW3NdO3ZhciBpPWx0LmFwcGx5KHZvaWQgMCxlKFtuXSxyLCExKSksYT1cInNjLWdsb2JhbC1cIi5jb25jYXQoJChKU09OLnN0cmluZ2lmeShpKSkpLGM9bmV3IGh0KGksYSk7XCJwcm9kdWN0aW9uXCIhPT1wcm9jZXNzLmVudi5OT0RFX0VOViYmUChhKTt2YXIgbD1mdW5jdGlvbihlKXt2YXIgdD1HZSgpLG49by51c2VDb250ZXh0KGV0KSxyPW8udXNlUmVmKHQuc3R5bGVTaGVldC5hbGxvY2F0ZUdTSW5zdGFuY2UoYSkpLmN1cnJlbnQ7cmV0dXJuXCJwcm9kdWN0aW9uXCIhPT1wcm9jZXNzLmVudi5OT0RFX0VOViYmby5DaGlsZHJlbi5jb3VudChlLmNoaWxkcmVuKSYmY29uc29sZS53YXJuKFwiVGhlIGdsb2JhbCBzdHlsZSBjb21wb25lbnQgXCIuY29uY2F0KGEsXCIgd2FzIGdpdmVuIGNoaWxkIEpTWC4gY3JlYXRlR2xvYmFsU3R5bGUgZG9lcyBub3QgcmVuZGVyIGNoaWxkcmVuLlwiKSksXCJwcm9kdWN0aW9uXCIhPT1wcm9jZXNzLmVudi5OT0RFX0VOViYmaS5zb21lKGZ1bmN0aW9uKGUpe3JldHVyblwic3RyaW5nXCI9PXR5cGVvZiBlJiYtMSE9PWUuaW5kZXhPZihcIkBpbXBvcnRcIil9KSYmY29uc29sZS53YXJuKFwiUGxlYXNlIGRvIG5vdCB1c2UgQGltcG9ydCBDU1Mgc3ludGF4IGluIGNyZWF0ZUdsb2JhbFN0eWxlIGF0IHRoaXMgdGltZSwgYXMgdGhlIENTU09NIEFQSXMgd2UgdXNlIGluIHByb2R1Y3Rpb24gZG8gbm90IGhhbmRsZSBpdCB3ZWxsLiBJbnN0ZWFkLCB3ZSByZWNvbW1lbmQgdXNpbmcgYSBsaWJyYXJ5IHN1Y2ggYXMgcmVhY3QtaGVsbWV0IHRvIGluamVjdCBhIHR5cGljYWwgPGxpbms+IG1ldGEgdGFnIHRvIHRoZSBzdHlsZXNoZWV0LCBvciBzaW1wbHkgZW1iZWRkaW5nIGl0IG1hbnVhbGx5IGluIHlvdXIgaW5kZXguaHRtbCA8aGVhZD4gc2VjdGlvbiBmb3IgYSBzaW1wbGVyIGFwcC5cIiksdC5zdHlsZVNoZWV0LnNlcnZlciYmdShyLGUsdC5zdHlsZVNoZWV0LG4sdC5zdHlsaXMpLG8udXNlTGF5b3V0RWZmZWN0KGZ1bmN0aW9uKCl7aWYoIXQuc3R5bGVTaGVldC5zZXJ2ZXIpcmV0dXJuIHUocixlLHQuc3R5bGVTaGVldCxuLHQuc3R5bGlzKSxmdW5jdGlvbigpe3JldHVybiBjLnJlbW92ZVN0eWxlcyhyLHQuc3R5bGVTaGVldCl9fSxbcixlLHQuc3R5bGVTaGVldCxuLHQuc3R5bGlzXSksbnVsbH07ZnVuY3Rpb24gdShlLG4sbyxyLHMpe2lmKGMuaXNTdGF0aWMpYy5yZW5kZXJTdHlsZXMoZSxiLG8scyk7ZWxzZXt2YXIgaT10KHQoe30sbikse3RoZW1lOkkobixyLGwuZGVmYXVsdFByb3BzKX0pO2MucmVuZGVyU3R5bGVzKGUsaSxvLHMpfX1yZXR1cm4gby5tZW1vKGwpfWZ1bmN0aW9uIG10KHQpe2Zvcih2YXIgbj1bXSxvPTE7bzxhcmd1bWVudHMubGVuZ3RoO28rKyluW28tMV09YXJndW1lbnRzW29dO1wicHJvZHVjdGlvblwiIT09cHJvY2Vzcy5lbnYuTk9ERV9FTlYmJlwidW5kZWZpbmVkXCIhPXR5cGVvZiBuYXZpZ2F0b3ImJlwiUmVhY3ROYXRpdmVcIj09PW5hdmlnYXRvci5wcm9kdWN0JiZjb25zb2xlLndhcm4oXCJga2V5ZnJhbWVzYCBjYW5ub3QgYmUgdXNlZCBvbiBSZWFjdE5hdGl2ZSwgb25seSBvbiB0aGUgd2ViLiBUbyBkbyBhbmltYXRpb24gaW4gUmVhY3ROYXRpdmUgcGxlYXNlIHVzZSBBbmltYXRlZC5cIik7dmFyIHI9YWUobHQuYXBwbHkodm9pZCAwLGUoW3RdLG4sITEpKSkscz0kKHIpO3JldHVybiBuZXcgV2UocyxyKX1mdW5jdGlvbiB5dChlKXt2YXIgbj1vLmZvcndhcmRSZWYoZnVuY3Rpb24obixyKXt2YXIgcz1JKG4sby51c2VDb250ZXh0KGV0KSxlLmRlZmF1bHRQcm9wcyk7cmV0dXJuXCJwcm9kdWN0aW9uXCIhPT1wcm9jZXNzLmVudi5OT0RFX0VOViYmdm9pZCAwPT09cyYmY29uc29sZS53YXJuKCdbd2l0aFRoZW1lXSBZb3UgYXJlIG5vdCB1c2luZyBhIFRoZW1lUHJvdmlkZXIgbm9yIHBhc3NpbmcgYSB0aGVtZSBwcm9wIG9yIGEgdGhlbWUgaW4gZGVmYXVsdFByb3BzIGluIGNvbXBvbmVudCBjbGFzcyBcIicuY29uY2F0KEIoZSksJ1wiJykpLG8uY3JlYXRlRWxlbWVudChlLHQoe30sbix7dGhlbWU6cyxyZWY6cn0pKX0pO3JldHVybiBuLmRpc3BsYXlOYW1lPVwiV2l0aFRoZW1lKFwiLmNvbmNhdChCKGUpLFwiKVwiKSxvZShuLGUpfXZhciB2dD1mdW5jdGlvbigpe2Z1bmN0aW9uIGUoKXt2YXIgZT10aGlzO3RoaXMuX2VtaXRTaGVldENTUz1mdW5jdGlvbigpe3ZhciB0PWUuaW5zdGFuY2UudG9TdHJpbmcoKTtpZighdClyZXR1cm5cIlwiO3ZhciBuPUNlKCksbz1hZShbbiYmJ25vbmNlPVwiJy5jb25jYXQobiwnXCInKSxcIlwiLmNvbmNhdChmLCc9XCJ0cnVlXCInKSxcIlwiLmNvbmNhdCh5LCc9XCInKS5jb25jYXQodiwnXCInKV0uZmlsdGVyKEJvb2xlYW4pLFwiIFwiKTtyZXR1cm5cIjxzdHlsZSBcIi5jb25jYXQobyxcIj5cIikuY29uY2F0KHQsXCI8L3N0eWxlPlwiKX0sdGhpcy5nZXRTdHlsZVRhZ3M9ZnVuY3Rpb24oKXtpZihlLnNlYWxlZCl0aHJvdyBoZSgyKTtyZXR1cm4gZS5fZW1pdFNoZWV0Q1NTKCl9LHRoaXMuZ2V0U3R5bGVFbGVtZW50PWZ1bmN0aW9uKCl7dmFyIG47aWYoZS5zZWFsZWQpdGhyb3cgaGUoMik7dmFyIHI9ZS5pbnN0YW5jZS50b1N0cmluZygpO2lmKCFyKXJldHVybltdO3ZhciBzPSgobj17fSlbZl09XCJcIixuW3ldPXYsbi5kYW5nZXJvdXNseVNldElubmVySFRNTD17X19odG1sOnJ9LG4pLGk9Q2UoKTtyZXR1cm4gaSYmKHMubm9uY2U9aSksW28uY3JlYXRlRWxlbWVudChcInN0eWxlXCIsdCh7fSxzLHtrZXk6XCJzYy0wLTBcIn0pKV19LHRoaXMuc2VhbD1mdW5jdGlvbigpe2Uuc2VhbGVkPSEwfSx0aGlzLmluc3RhbmNlPW5ldyBrZSh7aXNTZXJ2ZXI6ITB9KSx0aGlzLnNlYWxlZD0hMX1yZXR1cm4gZS5wcm90b3R5cGUuY29sbGVjdFN0eWxlcz1mdW5jdGlvbihlKXtpZih0aGlzLnNlYWxlZCl0aHJvdyBoZSgyKTtyZXR1cm4gby5jcmVhdGVFbGVtZW50KFllLHtzaGVldDp0aGlzLmluc3RhbmNlfSxlKX0sZS5wcm90b3R5cGUuaW50ZXJsZWF2ZVdpdGhOb2RlU3RyZWFtPWZ1bmN0aW9uKGUpe3Rocm93IGhlKDMpfSxlfSgpLGd0PXtTdHlsZVNoZWV0OmtlLG1haW5TaGVldDpNZX07XCJwcm9kdWN0aW9uXCIhPT1wcm9jZXNzLmVudi5OT0RFX0VOViYmXCJ1bmRlZmluZWRcIiE9dHlwZW9mIG5hdmlnYXRvciYmXCJSZWFjdE5hdGl2ZVwiPT09bmF2aWdhdG9yLnByb2R1Y3QmJmNvbnNvbGUud2FybihcIkl0IGxvb2tzIGxpa2UgeW91J3ZlIGltcG9ydGVkICdzdHlsZWQtY29tcG9uZW50cycgb24gUmVhY3QgTmF0aXZlLlxcblBlcmhhcHMgeW91J3JlIGxvb2tpbmcgdG8gaW1wb3J0ICdzdHlsZWQtY29tcG9uZW50cy9uYXRpdmUnP1xcblJlYWQgbW9yZSBhYm91dCB0aGlzIGF0IGh0dHBzOi8vd3d3LnN0eWxlZC1jb21wb25lbnRzLmNvbS9kb2NzL2Jhc2ljcyNyZWFjdC1uYXRpdmVcIik7dmFyIFN0PVwiX19zYy1cIi5jb25jYXQoZixcIl9fXCIpO1wicHJvZHVjdGlvblwiIT09cHJvY2Vzcy5lbnYuTk9ERV9FTlYmJlwidGVzdFwiIT09cHJvY2Vzcy5lbnYuTk9ERV9FTlYmJlwidW5kZWZpbmVkXCIhPXR5cGVvZiB3aW5kb3cmJih3aW5kb3dbU3RdfHwod2luZG93W1N0XT0wKSwxPT09d2luZG93W1N0XSYmY29uc29sZS53YXJuKFwiSXQgbG9va3MgbGlrZSB0aGVyZSBhcmUgc2V2ZXJhbCBpbnN0YW5jZXMgb2YgJ3N0eWxlZC1jb21wb25lbnRzJyBpbml0aWFsaXplZCBpbiB0aGlzIGFwcGxpY2F0aW9uLiBUaGlzIG1heSBjYXVzZSBkeW5hbWljIHN0eWxlcyB0byBub3QgcmVuZGVyIHByb3Blcmx5LCBlcnJvcnMgZHVyaW5nIHRoZSByZWh5ZHJhdGlvbiBwcm9jZXNzLCBhIG1pc3NpbmcgdGhlbWUgcHJvcCwgYW5kIG1ha2VzIHlvdXIgYXBwbGljYXRpb24gYmlnZ2VyIHdpdGhvdXQgZ29vZCByZWFzb24uXFxuXFxuU2VlIGh0dHBzOi8vcy1jLnNoLzJCQVh6ZWQgZm9yIG1vcmUgaW5mby5cIiksd2luZG93W1N0XSs9MSk7ZXhwb3J0e3Z0IGFzIFNlcnZlclN0eWxlU2hlZXQsQmUgYXMgU3R5bGVTaGVldENvbnN1bWVyLCRlIGFzIFN0eWxlU2hlZXRDb250ZXh0LFllIGFzIFN0eWxlU2hlZXRNYW5hZ2VyLHR0IGFzIFRoZW1lQ29uc3VtZXIsZXQgYXMgVGhlbWVDb250ZXh0LG90IGFzIFRoZW1lUHJvdmlkZXIsZ3QgYXMgX19QUklWQVRFX18sZnQgYXMgY3JlYXRlR2xvYmFsU3R5bGUsbHQgYXMgY3NzLGR0IGFzIGRlZmF1bHQsc2UgYXMgaXNTdHlsZWRDb21wb25lbnQsbXQgYXMga2V5ZnJhbWVzLGR0IGFzIHN0eWxlZCxudCBhcyB1c2VUaGVtZSx2IGFzIHZlcnNpb24seXQgYXMgd2l0aFRoZW1lfTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXN0eWxlZC1jb21wb25lbnRzLmJyb3dzZXIuZXNtLmpzLm1hcFxuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///13184\n')},13234:(I,g,t)=>{"use strict";I.exports=t.p+"f7942dd6e5bb84f05ccf.png"},13702:(I,g,t)=>{"use strict";I.exports=t.p+"c59a93c9f5b1c08c4299.png"},14149:(I,g,t)=>{"use strict";I.exports=t.p+"a682fb21367ac1342f48.png"},14835:(I,g,t)=>{"use strict";I.exports=t.p+"b5a41b638201292148b4.png"},14912:(__unused_webpack_module,exports)=>{"use strict";eval('var __webpack_unused_export__;\n/** @license React v16.13.1\n * react-is.production.min.js\n *\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\nvar b="function"===typeof Symbol&&Symbol.for,c=b?Symbol.for("react.element"):60103,d=b?Symbol.for("react.portal"):60106,e=b?Symbol.for("react.fragment"):60107,f=b?Symbol.for("react.strict_mode"):60108,g=b?Symbol.for("react.profiler"):60114,h=b?Symbol.for("react.provider"):60109,k=b?Symbol.for("react.context"):60110,l=b?Symbol.for("react.async_mode"):60111,m=b?Symbol.for("react.concurrent_mode"):60111,n=b?Symbol.for("react.forward_ref"):60112,p=b?Symbol.for("react.suspense"):60113,q=b?\nSymbol.for("react.suspense_list"):60120,r=b?Symbol.for("react.memo"):60115,t=b?Symbol.for("react.lazy"):60116,v=b?Symbol.for("react.block"):60121,w=b?Symbol.for("react.fundamental"):60117,x=b?Symbol.for("react.responder"):60118,y=b?Symbol.for("react.scope"):60119;\nfunction z(a){if("object"===typeof a&&null!==a){var u=a.$$typeof;switch(u){case c:switch(a=a.type,a){case l:case m:case e:case g:case f:case p:return a;default:switch(a=a&&a.$$typeof,a){case k:case n:case t:case r:case h:return a;default:return u}}case d:return u}}}function A(a){return z(a)===m}__webpack_unused_export__=l;__webpack_unused_export__=m;__webpack_unused_export__=k;__webpack_unused_export__=h;__webpack_unused_export__=c;__webpack_unused_export__=n;__webpack_unused_export__=e;__webpack_unused_export__=t;__webpack_unused_export__=r;__webpack_unused_export__=d;\n__webpack_unused_export__=g;__webpack_unused_export__=f;__webpack_unused_export__=p;__webpack_unused_export__=function(a){return A(a)||z(a)===l};__webpack_unused_export__=A;__webpack_unused_export__=function(a){return z(a)===k};__webpack_unused_export__=function(a){return z(a)===h};__webpack_unused_export__=function(a){return"object"===typeof a&&null!==a&&a.$$typeof===c};__webpack_unused_export__=function(a){return z(a)===n};__webpack_unused_export__=function(a){return z(a)===e};__webpack_unused_export__=function(a){return z(a)===t};\n__webpack_unused_export__=function(a){return z(a)===r};__webpack_unused_export__=function(a){return z(a)===d};__webpack_unused_export__=function(a){return z(a)===g};__webpack_unused_export__=function(a){return z(a)===f};__webpack_unused_export__=function(a){return z(a)===p};\n__webpack_unused_export__=function(a){return"string"===typeof a||"function"===typeof a||a===e||a===m||a===g||a===f||a===p||a===q||"object"===typeof a&&null!==a&&(a.$$typeof===t||a.$$typeof===r||a.$$typeof===h||a.$$typeof===k||a.$$typeof===n||a.$$typeof===w||a.$$typeof===x||a.$$typeof===y||a.$$typeof===v)};__webpack_unused_export__=z;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMTQ5MTIuanMiLCJtYXBwaW5ncyI6IjtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL2l0Zy1uZXh0Z2VuLWZyb250ZW5kLy4vbm9kZV9tb2R1bGVzL3JlYWN0LXJvdXRlci9ub2RlX21vZHVsZXMvcmVhY3QtaXMvY2pzL3JlYWN0LWlzLnByb2R1Y3Rpb24ubWluLmpzP2Y2MjMiXSwic291cmNlc0NvbnRlbnQiOlsiLyoqIEBsaWNlbnNlIFJlYWN0IHYxNi4xMy4xXG4gKiByZWFjdC1pcy5wcm9kdWN0aW9uLm1pbi5qc1xuICpcbiAqIENvcHlyaWdodCAoYykgRmFjZWJvb2ssIEluYy4gYW5kIGl0cyBhZmZpbGlhdGVzLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLlxuICovXG5cbid1c2Ugc3RyaWN0Jzt2YXIgYj1cImZ1bmN0aW9uXCI9PT10eXBlb2YgU3ltYm9sJiZTeW1ib2wuZm9yLGM9Yj9TeW1ib2wuZm9yKFwicmVhY3QuZWxlbWVudFwiKTo2MDEwMyxkPWI/U3ltYm9sLmZvcihcInJlYWN0LnBvcnRhbFwiKTo2MDEwNixlPWI/U3ltYm9sLmZvcihcInJlYWN0LmZyYWdtZW50XCIpOjYwMTA3LGY9Yj9TeW1ib2wuZm9yKFwicmVhY3Quc3RyaWN0X21vZGVcIik6NjAxMDgsZz1iP1N5bWJvbC5mb3IoXCJyZWFjdC5wcm9maWxlclwiKTo2MDExNCxoPWI/U3ltYm9sLmZvcihcInJlYWN0LnByb3ZpZGVyXCIpOjYwMTA5LGs9Yj9TeW1ib2wuZm9yKFwicmVhY3QuY29udGV4dFwiKTo2MDExMCxsPWI/U3ltYm9sLmZvcihcInJlYWN0LmFzeW5jX21vZGVcIik6NjAxMTEsbT1iP1N5bWJvbC5mb3IoXCJyZWFjdC5jb25jdXJyZW50X21vZGVcIik6NjAxMTEsbj1iP1N5bWJvbC5mb3IoXCJyZWFjdC5mb3J3YXJkX3JlZlwiKTo2MDExMixwPWI/U3ltYm9sLmZvcihcInJlYWN0LnN1c3BlbnNlXCIpOjYwMTEzLHE9Yj9cblN5bWJvbC5mb3IoXCJyZWFjdC5zdXNwZW5zZV9saXN0XCIpOjYwMTIwLHI9Yj9TeW1ib2wuZm9yKFwicmVhY3QubWVtb1wiKTo2MDExNSx0PWI/U3ltYm9sLmZvcihcInJlYWN0LmxhenlcIik6NjAxMTYsdj1iP1N5bWJvbC5mb3IoXCJyZWFjdC5ibG9ja1wiKTo2MDEyMSx3PWI/U3ltYm9sLmZvcihcInJlYWN0LmZ1bmRhbWVudGFsXCIpOjYwMTE3LHg9Yj9TeW1ib2wuZm9yKFwicmVhY3QucmVzcG9uZGVyXCIpOjYwMTE4LHk9Yj9TeW1ib2wuZm9yKFwicmVhY3Quc2NvcGVcIik6NjAxMTk7XG5mdW5jdGlvbiB6KGEpe2lmKFwib2JqZWN0XCI9PT10eXBlb2YgYSYmbnVsbCE9PWEpe3ZhciB1PWEuJCR0eXBlb2Y7c3dpdGNoKHUpe2Nhc2UgYzpzd2l0Y2goYT1hLnR5cGUsYSl7Y2FzZSBsOmNhc2UgbTpjYXNlIGU6Y2FzZSBnOmNhc2UgZjpjYXNlIHA6cmV0dXJuIGE7ZGVmYXVsdDpzd2l0Y2goYT1hJiZhLiQkdHlwZW9mLGEpe2Nhc2UgazpjYXNlIG46Y2FzZSB0OmNhc2UgcjpjYXNlIGg6cmV0dXJuIGE7ZGVmYXVsdDpyZXR1cm4gdX19Y2FzZSBkOnJldHVybiB1fX19ZnVuY3Rpb24gQShhKXtyZXR1cm4geihhKT09PW19ZXhwb3J0cy5Bc3luY01vZGU9bDtleHBvcnRzLkNvbmN1cnJlbnRNb2RlPW07ZXhwb3J0cy5Db250ZXh0Q29uc3VtZXI9aztleHBvcnRzLkNvbnRleHRQcm92aWRlcj1oO2V4cG9ydHMuRWxlbWVudD1jO2V4cG9ydHMuRm9yd2FyZFJlZj1uO2V4cG9ydHMuRnJhZ21lbnQ9ZTtleHBvcnRzLkxhenk9dDtleHBvcnRzLk1lbW89cjtleHBvcnRzLlBvcnRhbD1kO1xuZXhwb3J0cy5Qcm9maWxlcj1nO2V4cG9ydHMuU3RyaWN0TW9kZT1mO2V4cG9ydHMuU3VzcGVuc2U9cDtleHBvcnRzLmlzQXN5bmNNb2RlPWZ1bmN0aW9uKGEpe3JldHVybiBBKGEpfHx6KGEpPT09bH07ZXhwb3J0cy5pc0NvbmN1cnJlbnRNb2RlPUE7ZXhwb3J0cy5pc0NvbnRleHRDb25zdW1lcj1mdW5jdGlvbihhKXtyZXR1cm4geihhKT09PWt9O2V4cG9ydHMuaXNDb250ZXh0UHJvdmlkZXI9ZnVuY3Rpb24oYSl7cmV0dXJuIHooYSk9PT1ofTtleHBvcnRzLmlzRWxlbWVudD1mdW5jdGlvbihhKXtyZXR1cm5cIm9iamVjdFwiPT09dHlwZW9mIGEmJm51bGwhPT1hJiZhLiQkdHlwZW9mPT09Y307ZXhwb3J0cy5pc0ZvcndhcmRSZWY9ZnVuY3Rpb24oYSl7cmV0dXJuIHooYSk9PT1ufTtleHBvcnRzLmlzRnJhZ21lbnQ9ZnVuY3Rpb24oYSl7cmV0dXJuIHooYSk9PT1lfTtleHBvcnRzLmlzTGF6eT1mdW5jdGlvbihhKXtyZXR1cm4geihhKT09PXR9O1xuZXhwb3J0cy5pc01lbW89ZnVuY3Rpb24oYSl7cmV0dXJuIHooYSk9PT1yfTtleHBvcnRzLmlzUG9ydGFsPWZ1bmN0aW9uKGEpe3JldHVybiB6KGEpPT09ZH07ZXhwb3J0cy5pc1Byb2ZpbGVyPWZ1bmN0aW9uKGEpe3JldHVybiB6KGEpPT09Z307ZXhwb3J0cy5pc1N0cmljdE1vZGU9ZnVuY3Rpb24oYSl7cmV0dXJuIHooYSk9PT1mfTtleHBvcnRzLmlzU3VzcGVuc2U9ZnVuY3Rpb24oYSl7cmV0dXJuIHooYSk9PT1wfTtcbmV4cG9ydHMuaXNWYWxpZEVsZW1lbnRUeXBlPWZ1bmN0aW9uKGEpe3JldHVyblwic3RyaW5nXCI9PT10eXBlb2YgYXx8XCJmdW5jdGlvblwiPT09dHlwZW9mIGF8fGE9PT1lfHxhPT09bXx8YT09PWd8fGE9PT1mfHxhPT09cHx8YT09PXF8fFwib2JqZWN0XCI9PT10eXBlb2YgYSYmbnVsbCE9PWEmJihhLiQkdHlwZW9mPT09dHx8YS4kJHR5cGVvZj09PXJ8fGEuJCR0eXBlb2Y9PT1ofHxhLiQkdHlwZW9mPT09a3x8YS4kJHR5cGVvZj09PW58fGEuJCR0eXBlb2Y9PT13fHxhLiQkdHlwZW9mPT09eHx8YS4kJHR5cGVvZj09PXl8fGEuJCR0eXBlb2Y9PT12KX07ZXhwb3J0cy50eXBlT2Y9ejtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///14912\n')},14976:(I,g,t)=>{"use strict";I.exports=t.p+"31082e49b553b695ac86.png"},15273:(I,g,t)=>{"use strict";I.exports=t.p+"8bfcd49d2c147c1db076.png"},15287:(__unused_webpack_module,exports,__webpack_require__)=>{"use strict";eval('/** @license React v17.0.2\n * react.production.min.js\n *\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\nvar l=__webpack_require__(45228),n=60103,p=60106;exports.Fragment=60107;exports.StrictMode=60108;exports.Profiler=60114;var q=60109,r=60110,t=60112;exports.Suspense=60113;var u=60115,v=60116;\nif("function"===typeof Symbol&&Symbol.for){var w=Symbol.for;n=w("react.element");p=w("react.portal");exports.Fragment=w("react.fragment");exports.StrictMode=w("react.strict_mode");exports.Profiler=w("react.profiler");q=w("react.provider");r=w("react.context");t=w("react.forward_ref");exports.Suspense=w("react.suspense");u=w("react.memo");v=w("react.lazy")}var x="function"===typeof Symbol&&Symbol.iterator;\nfunction y(a){if(null===a||"object"!==typeof a)return null;a=x&&a[x]||a["@@iterator"];return"function"===typeof a?a:null}function z(a){for(var b="https://reactjs.org/docs/error-decoder.html?invariant="+a,c=1;c{"use strict";I.exports=t.p+"bdc9034ceef498a244ec.png"},15867:function(__unused_webpack_module,__unused_webpack_exports,__webpack_require__){eval("//! moment.js locale configuration\n//! locale : Lao [lo]\n//! author : Ryan Hart : https://github.com/ryanhart2\n\n;(function (global, factory) {\n true ? factory(__webpack_require__(95093)) :\n 0\n}(this, (function (moment) { 'use strict';\n\n //! moment.js locale configuration\n\n var lo = moment.defineLocale('lo', {\n months: 'ມັງກອນ_ກຸມພາ_ມີນາ_ເມສາ_ພຶດສະພາ_ມິຖຸນາ_ກໍລະກົດ_ສິງຫາ_ກັນຍາ_ຕຸລາ_ພະຈິກ_ທັນວາ'.split(\n '_'\n ),\n monthsShort:\n 'ມັງກອນ_ກຸມພາ_ມີນາ_ເມສາ_ພຶດສະພາ_ມິຖຸນາ_ກໍລະກົດ_ສິງຫາ_ກັນຍາ_ຕຸລາ_ພະຈິກ_ທັນວາ'.split(\n '_'\n ),\n weekdays: 'ອາທິດ_ຈັນ_ອັງຄານ_ພຸດ_ພະຫັດ_ສຸກ_ເສົາ'.split('_'),\n weekdaysShort: 'ທິດ_ຈັນ_ອັງຄານ_ພຸດ_ພະຫັດ_ສຸກ_ເສົາ'.split('_'),\n weekdaysMin: 'ທ_ຈ_ອຄ_ພ_ພຫ_ສກ_ສ'.split('_'),\n weekdaysParseExact: true,\n longDateFormat: {\n LT: 'HH:mm',\n LTS: 'HH:mm:ss',\n L: 'DD/MM/YYYY',\n LL: 'D MMMM YYYY',\n LLL: 'D MMMM YYYY HH:mm',\n LLLL: 'ວັນdddd D MMMM YYYY HH:mm',\n },\n meridiemParse: /ຕອນເຊົ້າ|ຕອນແລງ/,\n isPM: function (input) {\n return input === 'ຕອນແລງ';\n },\n meridiem: function (hour, minute, isLower) {\n if (hour < 12) {\n return 'ຕອນເຊົ້າ';\n } else {\n return 'ຕອນແລງ';\n }\n },\n calendar: {\n sameDay: '[ມື້ນີ້ເວລາ] LT',\n nextDay: '[ມື້ອື່ນເວລາ] LT',\n nextWeek: '[ວັນ]dddd[ໜ້າເວລາ] LT',\n lastDay: '[ມື້ວານນີ້ເວລາ] LT',\n lastWeek: '[ວັນ]dddd[ແລ້ວນີ້ເວລາ] LT',\n sameElse: 'L',\n },\n relativeTime: {\n future: 'ອີກ %s',\n past: '%sຜ່ານມາ',\n s: 'ບໍ່ເທົ່າໃດວິນາທີ',\n ss: '%d ວິນາທີ',\n m: '1 ນາທີ',\n mm: '%d ນາທີ',\n h: '1 ຊົ່ວໂມງ',\n hh: '%d ຊົ່ວໂມງ',\n d: '1 ມື້',\n dd: '%d ມື້',\n M: '1 ເດືອນ',\n MM: '%d ເດືອນ',\n y: '1 ປີ',\n yy: '%d ປີ',\n },\n dayOfMonthOrdinalParse: /(ທີ່)\\d{1,2}/,\n ordinal: function (number) {\n return 'ທີ່' + number;\n },\n });\n\n return lo;\n\n})));\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMTU4NjcuanMiLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vaXRnLW5leHRnZW4tZnJvbnRlbmQvLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9sby5qcz9iMjlkIl0sInNvdXJjZXNDb250ZW50IjpbIi8vISBtb21lbnQuanMgbG9jYWxlIGNvbmZpZ3VyYXRpb25cbi8vISBsb2NhbGUgOiBMYW8gW2xvXVxuLy8hIGF1dGhvciA6IFJ5YW4gSGFydCA6IGh0dHBzOi8vZ2l0aHViLmNvbS9yeWFuaGFydDJcblxuOyhmdW5jdGlvbiAoZ2xvYmFsLCBmYWN0b3J5KSB7XG4gICB0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcgJiYgdHlwZW9mIG1vZHVsZSAhPT0gJ3VuZGVmaW5lZCdcbiAgICAgICAmJiB0eXBlb2YgcmVxdWlyZSA9PT0gJ2Z1bmN0aW9uJyA/IGZhY3RvcnkocmVxdWlyZSgnLi4vbW9tZW50JykpIDpcbiAgIHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgZGVmaW5lLmFtZCA/IGRlZmluZShbJy4uL21vbWVudCddLCBmYWN0b3J5KSA6XG4gICBmYWN0b3J5KGdsb2JhbC5tb21lbnQpXG59KHRoaXMsIChmdW5jdGlvbiAobW9tZW50KSB7ICd1c2Ugc3RyaWN0JztcblxuICAgIC8vISBtb21lbnQuanMgbG9jYWxlIGNvbmZpZ3VyYXRpb25cblxuICAgIHZhciBsbyA9IG1vbWVudC5kZWZpbmVMb2NhbGUoJ2xvJywge1xuICAgICAgICBtb250aHM6ICfguqHgurHguofguoHguq3guplf4LqB4Lq44Lqh4Lqe4LqyX+C6oeC6teC6meC6sl/gu4DguqHguqrgurJf4Lqe4Lq24LqU4Lqq4Lqw4Lqe4LqyX+C6oeC6tOC6luC6uOC6meC6sl/guoHgu43guqXgurDguoHgurvgupRf4Lqq4Lq04LqH4Lqr4LqyX+C6geC6seC6meC6jeC6sl/gupXgurjguqXgurJf4Lqe4Lqw4LqI4Lq04LqBX+C6l+C6seC6meC6p+C6sicuc3BsaXQoXG4gICAgICAgICAgICAnXydcbiAgICAgICAgKSxcbiAgICAgICAgbW9udGhzU2hvcnQ6XG4gICAgICAgICAgICAn4Lqh4Lqx4LqH4LqB4Lqt4LqZX+C6geC6uOC6oeC6nuC6sl/guqHgurXgupngurJf4LuA4Lqh4Lqq4LqyX+C6nuC6tuC6lOC6quC6sOC6nuC6sl/guqHgurTgupbgurjgupngurJf4LqB4LuN4Lql4Lqw4LqB4Lq74LqUX+C6quC6tOC6h+C6q+C6sl/guoHgurHgupnguo3gurJf4LqV4Lq44Lql4LqyX+C6nuC6sOC6iOC6tOC6gV/gupfgurHgupnguqfgurInLnNwbGl0KFxuICAgICAgICAgICAgICAgICdfJ1xuICAgICAgICAgICAgKSxcbiAgICAgICAgd2Vla2RheXM6ICfguq3gurLgupfgurTgupRf4LqI4Lqx4LqZX+C6reC6seC6h+C6hOC6suC6mV/gup7gurjgupRf4Lqe4Lqw4Lqr4Lqx4LqUX+C6quC6uOC6gV/gu4DguqrgurvgurInLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzU2hvcnQ6ICfgupfgurTgupRf4LqI4Lqx4LqZX+C6reC6seC6h+C6hOC6suC6mV/gup7gurjgupRf4Lqe4Lqw4Lqr4Lqx4LqUX+C6quC6uOC6gV/gu4DguqrgurvgurInLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzTWluOiAn4LqXX+C6iF/guq3guoRf4LqeX+C6nuC6q1/guqrguoFf4LqqJy5zcGxpdCgnXycpLFxuICAgICAgICB3ZWVrZGF5c1BhcnNlRXhhY3Q6IHRydWUsXG4gICAgICAgIGxvbmdEYXRlRm9ybWF0OiB7XG4gICAgICAgICAgICBMVDogJ0hIOm1tJyxcbiAgICAgICAgICAgIExUUzogJ0hIOm1tOnNzJyxcbiAgICAgICAgICAgIEw6ICdERC9NTS9ZWVlZJyxcbiAgICAgICAgICAgIExMOiAnRCBNTU1NIFlZWVknLFxuICAgICAgICAgICAgTExMOiAnRCBNTU1NIFlZWVkgSEg6bW0nLFxuICAgICAgICAgICAgTExMTDogJ+C6p+C6seC6mWRkZGQgRCBNTU1NIFlZWVkgSEg6bW0nLFxuICAgICAgICB9LFxuICAgICAgICBtZXJpZGllbVBhcnNlOiAv4LqV4Lqt4LqZ4LuA4LqK4Lq74LuJ4LqyfOC6leC6reC6meC7geC6peC6hy8sXG4gICAgICAgIGlzUE06IGZ1bmN0aW9uIChpbnB1dCkge1xuICAgICAgICAgICAgcmV0dXJuIGlucHV0ID09PSAn4LqV4Lqt4LqZ4LuB4Lql4LqHJztcbiAgICAgICAgfSxcbiAgICAgICAgbWVyaWRpZW06IGZ1bmN0aW9uIChob3VyLCBtaW51dGUsIGlzTG93ZXIpIHtcbiAgICAgICAgICAgIGlmIChob3VyIDwgMTIpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gJ+C6leC6reC6meC7gOC6iuC6u+C7ieC6sic7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHJldHVybiAn4LqV4Lqt4LqZ4LuB4Lql4LqHJztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgY2FsZW5kYXI6IHtcbiAgICAgICAgICAgIHNhbWVEYXk6ICdb4Lqh4Lq34LuJ4LqZ4Lq14LuJ4LuA4Lqn4Lql4LqyXSBMVCcsXG4gICAgICAgICAgICBuZXh0RGF5OiAnW+C6oeC6t+C7ieC6reC6t+C7iOC6meC7gOC6p+C6peC6sl0gTFQnLFxuICAgICAgICAgICAgbmV4dFdlZWs6ICdb4Lqn4Lqx4LqZXWRkZGRb4Luc4LuJ4Lqy4LuA4Lqn4Lql4LqyXSBMVCcsXG4gICAgICAgICAgICBsYXN0RGF5OiAnW+C6oeC6t+C7ieC6p+C6suC6meC6meC6teC7ieC7gOC6p+C6peC6sl0gTFQnLFxuICAgICAgICAgICAgbGFzdFdlZWs6ICdb4Lqn4Lqx4LqZXWRkZGRb4LuB4Lql4LuJ4Lqn4LqZ4Lq14LuJ4LuA4Lqn4Lql4LqyXSBMVCcsXG4gICAgICAgICAgICBzYW1lRWxzZTogJ0wnLFxuICAgICAgICB9LFxuICAgICAgICByZWxhdGl2ZVRpbWU6IHtcbiAgICAgICAgICAgIGZ1dHVyZTogJ+C6reC6teC6gSAlcycsXG4gICAgICAgICAgICBwYXN0OiAnJXPgupzgu4jgurLgupnguqHgurInLFxuICAgICAgICAgICAgczogJ+C6muC7jeC7iOC7gOC6l+C6u+C7iOC6suC7g+C6lOC6p+C6tOC6meC6suC6l+C6tScsXG4gICAgICAgICAgICBzczogJyVkIOC6p+C6tOC6meC6suC6l+C6tScsXG4gICAgICAgICAgICBtOiAnMSDgupngurLgupfgurUnLFxuICAgICAgICAgICAgbW06ICclZCDgupngurLgupfgurUnLFxuICAgICAgICAgICAgaDogJzEg4LqK4Lq74LuI4Lqn4LuC4Lqh4LqHJyxcbiAgICAgICAgICAgIGhoOiAnJWQg4LqK4Lq74LuI4Lqn4LuC4Lqh4LqHJyxcbiAgICAgICAgICAgIGQ6ICcxIOC6oeC6t+C7iScsXG4gICAgICAgICAgICBkZDogJyVkIOC6oeC6t+C7iScsXG4gICAgICAgICAgICBNOiAnMSDgu4DgupTgurfguq3gupknLFxuICAgICAgICAgICAgTU06ICclZCDgu4DgupTgurfguq3gupknLFxuICAgICAgICAgICAgeTogJzEg4Lqb4Lq1JyxcbiAgICAgICAgICAgIHl5OiAnJWQg4Lqb4Lq1JyxcbiAgICAgICAgfSxcbiAgICAgICAgZGF5T2ZNb250aE9yZGluYWxQYXJzZTogLyjgupfgurXgu4gpXFxkezEsMn0vLFxuICAgICAgICBvcmRpbmFsOiBmdW5jdGlvbiAobnVtYmVyKSB7XG4gICAgICAgICAgICByZXR1cm4gJ+C6l+C6teC7iCcgKyBudW1iZXI7XG4gICAgICAgIH0sXG4gICAgfSk7XG5cbiAgICByZXR1cm4gbG87XG5cbn0pKSk7XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///15867\n")},16319:(I,g,t)=>{"use strict";I.exports=t.p+"a830ad8cfc751df80fdb.png"},16618:function(__unused_webpack_module,__unused_webpack_exports,__webpack_require__){eval("//! moment.js locale configuration\n//! locale : Ukrainian [uk]\n//! author : zemlanin : https://github.com/zemlanin\n//! Author : Menelion Elensúle : https://github.com/Oire\n\n;(function (global, factory) {\n true ? factory(__webpack_require__(95093)) :\n 0\n}(this, (function (moment) { 'use strict';\n\n //! moment.js locale configuration\n\n function plural(word, num) {\n var forms = word.split('_');\n return num % 10 === 1 && num % 100 !== 11\n ? forms[0]\n : num % 10 >= 2 && num % 10 <= 4 && (num % 100 < 10 || num % 100 >= 20)\n ? forms[1]\n : forms[2];\n }\n function relativeTimeWithPlural(number, withoutSuffix, key) {\n var format = {\n ss: withoutSuffix ? 'секунда_секунди_секунд' : 'секунду_секунди_секунд',\n mm: withoutSuffix ? 'хвилина_хвилини_хвилин' : 'хвилину_хвилини_хвилин',\n hh: withoutSuffix ? 'година_години_годин' : 'годину_години_годин',\n dd: 'день_дні_днів',\n MM: 'місяць_місяці_місяців',\n yy: 'рік_роки_років',\n };\n if (key === 'm') {\n return withoutSuffix ? 'хвилина' : 'хвилину';\n } else if (key === 'h') {\n return withoutSuffix ? 'година' : 'годину';\n } else {\n return number + ' ' + plural(format[key], +number);\n }\n }\n function weekdaysCaseReplace(m, format) {\n var weekdays = {\n nominative:\n 'неділя_понеділок_вівторок_середа_четвер_п’ятниця_субота'.split(\n '_'\n ),\n accusative:\n 'неділю_понеділок_вівторок_середу_четвер_п’ятницю_суботу'.split(\n '_'\n ),\n genitive:\n 'неділі_понеділка_вівторка_середи_четверга_п’ятниці_суботи'.split(\n '_'\n ),\n },\n nounCase;\n\n if (m === true) {\n return weekdays['nominative']\n .slice(1, 7)\n .concat(weekdays['nominative'].slice(0, 1));\n }\n if (!m) {\n return weekdays['nominative'];\n }\n\n nounCase = /(\\[[ВвУу]\\]) ?dddd/.test(format)\n ? 'accusative'\n : /\\[?(?:минулої|наступної)? ?\\] ?dddd/.test(format)\n ? 'genitive'\n : 'nominative';\n return weekdays[nounCase][m.day()];\n }\n function processHoursFunction(str) {\n return function () {\n return str + 'о' + (this.hours() === 11 ? 'б' : '') + '] LT';\n };\n }\n\n var uk = moment.defineLocale('uk', {\n months: {\n format: 'січня_лютого_березня_квітня_травня_червня_липня_серпня_вересня_жовтня_листопада_грудня'.split(\n '_'\n ),\n standalone:\n 'січень_лютий_березень_квітень_травень_червень_липень_серпень_вересень_жовтень_листопад_грудень'.split(\n '_'\n ),\n },\n monthsShort: 'січ_лют_бер_квіт_трав_черв_лип_серп_вер_жовт_лист_груд'.split(\n '_'\n ),\n weekdays: weekdaysCaseReplace,\n weekdaysShort: 'нд_пн_вт_ср_чт_пт_сб'.split('_'),\n weekdaysMin: 'нд_пн_вт_ср_чт_пт_сб'.split('_'),\n longDateFormat: {\n LT: 'HH:mm',\n LTS: 'HH:mm:ss',\n L: 'DD.MM.YYYY',\n LL: 'D MMMM YYYY р.',\n LLL: 'D MMMM YYYY р., HH:mm',\n LLLL: 'dddd, D MMMM YYYY р., HH:mm',\n },\n calendar: {\n sameDay: processHoursFunction('[Сьогодні '),\n nextDay: processHoursFunction('[Завтра '),\n lastDay: processHoursFunction('[Вчора '),\n nextWeek: processHoursFunction('[У] dddd ['),\n lastWeek: function () {\n switch (this.day()) {\n case 0:\n case 3:\n case 5:\n case 6:\n return processHoursFunction('[Минулої] dddd [').call(this);\n case 1:\n case 2:\n case 4:\n return processHoursFunction('[Минулого] dddd [').call(this);\n }\n },\n sameElse: 'L',\n },\n relativeTime: {\n future: 'за %s',\n past: '%s тому',\n s: 'декілька секунд',\n ss: relativeTimeWithPlural,\n m: relativeTimeWithPlural,\n mm: relativeTimeWithPlural,\n h: 'годину',\n hh: relativeTimeWithPlural,\n d: 'день',\n dd: relativeTimeWithPlural,\n M: 'місяць',\n MM: relativeTimeWithPlural,\n y: 'рік',\n yy: relativeTimeWithPlural,\n },\n // M. E.: those two are virtually unused but a user might want to implement them for his/her website for some reason\n meridiemParse: /ночі|ранку|дня|вечора/,\n isPM: function (input) {\n return /^(дня|вечора)$/.test(input);\n },\n meridiem: function (hour, minute, isLower) {\n if (hour < 4) {\n return 'ночі';\n } else if (hour < 12) {\n return 'ранку';\n } else if (hour < 17) {\n return 'дня';\n } else {\n return 'вечора';\n }\n },\n dayOfMonthOrdinalParse: /\\d{1,2}-(й|го)/,\n ordinal: function (number, period) {\n switch (period) {\n case 'M':\n case 'd':\n case 'DDD':\n case 'w':\n case 'W':\n return number + '-й';\n case 'D':\n return number + '-го';\n default:\n return number;\n }\n },\n week: {\n dow: 1, // Monday is the first day of the week.\n doy: 7, // The week that contains Jan 7th is the first week of the year.\n },\n });\n\n return uk;\n\n})));\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMTY2MTguanMiLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL2l0Zy1uZXh0Z2VuLWZyb250ZW5kLy4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvdWsuanM/YWRhMiJdLCJzb3VyY2VzQ29udGVudCI6WyIvLyEgbW9tZW50LmpzIGxvY2FsZSBjb25maWd1cmF0aW9uXG4vLyEgbG9jYWxlIDogVWtyYWluaWFuIFt1a11cbi8vISBhdXRob3IgOiB6ZW1sYW5pbiA6IGh0dHBzOi8vZ2l0aHViLmNvbS96ZW1sYW5pblxuLy8hIEF1dGhvciA6IE1lbmVsaW9uIEVsZW5zw7psZSA6IGh0dHBzOi8vZ2l0aHViLmNvbS9PaXJlXG5cbjsoZnVuY3Rpb24gKGdsb2JhbCwgZmFjdG9yeSkge1xuICAgdHlwZW9mIGV4cG9ydHMgPT09ICdvYmplY3QnICYmIHR5cGVvZiBtb2R1bGUgIT09ICd1bmRlZmluZWQnXG4gICAgICAgJiYgdHlwZW9mIHJlcXVpcmUgPT09ICdmdW5jdGlvbicgPyBmYWN0b3J5KHJlcXVpcmUoJy4uL21vbWVudCcpKSA6XG4gICB0eXBlb2YgZGVmaW5lID09PSAnZnVuY3Rpb24nICYmIGRlZmluZS5hbWQgPyBkZWZpbmUoWycuLi9tb21lbnQnXSwgZmFjdG9yeSkgOlxuICAgZmFjdG9yeShnbG9iYWwubW9tZW50KVxufSh0aGlzLCAoZnVuY3Rpb24gKG1vbWVudCkgeyAndXNlIHN0cmljdCc7XG5cbiAgICAvLyEgbW9tZW50LmpzIGxvY2FsZSBjb25maWd1cmF0aW9uXG5cbiAgICBmdW5jdGlvbiBwbHVyYWwod29yZCwgbnVtKSB7XG4gICAgICAgIHZhciBmb3JtcyA9IHdvcmQuc3BsaXQoJ18nKTtcbiAgICAgICAgcmV0dXJuIG51bSAlIDEwID09PSAxICYmIG51bSAlIDEwMCAhPT0gMTFcbiAgICAgICAgICAgID8gZm9ybXNbMF1cbiAgICAgICAgICAgIDogbnVtICUgMTAgPj0gMiAmJiBudW0gJSAxMCA8PSA0ICYmIChudW0gJSAxMDAgPCAxMCB8fCBudW0gJSAxMDAgPj0gMjApXG4gICAgICAgICAgICAgID8gZm9ybXNbMV1cbiAgICAgICAgICAgICAgOiBmb3Jtc1syXTtcbiAgICB9XG4gICAgZnVuY3Rpb24gcmVsYXRpdmVUaW1lV2l0aFBsdXJhbChudW1iZXIsIHdpdGhvdXRTdWZmaXgsIGtleSkge1xuICAgICAgICB2YXIgZm9ybWF0ID0ge1xuICAgICAgICAgICAgc3M6IHdpdGhvdXRTdWZmaXggPyAn0YHQtdC60YPQvdC00LBf0YHQtdC60YPQvdC00Lhf0YHQtdC60YPQvdC0JyA6ICfRgdC10LrRg9C90LTRg1/RgdC10LrRg9C90LTQuF/RgdC10LrRg9C90LQnLFxuICAgICAgICAgICAgbW06IHdpdGhvdXRTdWZmaXggPyAn0YXQstC40LvQuNC90LBf0YXQstC40LvQuNC90Lhf0YXQstC40LvQuNC9JyA6ICfRhdCy0LjQu9C40L3Rg1/RhdCy0LjQu9C40L3QuF/RhdCy0LjQu9C40L0nLFxuICAgICAgICAgICAgaGg6IHdpdGhvdXRTdWZmaXggPyAn0LPQvtC00LjQvdCwX9Cz0L7QtNC40L3QuF/Qs9C+0LTQuNC9JyA6ICfQs9C+0LTQuNC90YNf0LPQvtC00LjQvdC4X9Cz0L7QtNC40L0nLFxuICAgICAgICAgICAgZGQ6ICfQtNC10L3RjF/QtNC90ZZf0LTQvdGW0LInLFxuICAgICAgICAgICAgTU06ICfQvNGW0YHRj9GG0Yxf0LzRltGB0Y/RhtGWX9C80ZbRgdGP0YbRltCyJyxcbiAgICAgICAgICAgIHl5OiAn0YDRltC6X9GA0L7QutC4X9GA0L7QutGW0LInLFxuICAgICAgICB9O1xuICAgICAgICBpZiAoa2V5ID09PSAnbScpIHtcbiAgICAgICAgICAgIHJldHVybiB3aXRob3V0U3VmZml4ID8gJ9GF0LLQuNC70LjQvdCwJyA6ICfRhdCy0LjQu9C40L3Rgyc7XG4gICAgICAgIH0gZWxzZSBpZiAoa2V5ID09PSAnaCcpIHtcbiAgICAgICAgICAgIHJldHVybiB3aXRob3V0U3VmZml4ID8gJ9Cz0L7QtNC40L3QsCcgOiAn0LPQvtC00LjQvdGDJztcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBudW1iZXIgKyAnICcgKyBwbHVyYWwoZm9ybWF0W2tleV0sICtudW1iZXIpO1xuICAgICAgICB9XG4gICAgfVxuICAgIGZ1bmN0aW9uIHdlZWtkYXlzQ2FzZVJlcGxhY2UobSwgZm9ybWF0KSB7XG4gICAgICAgIHZhciB3ZWVrZGF5cyA9IHtcbiAgICAgICAgICAgICAgICBub21pbmF0aXZlOlxuICAgICAgICAgICAgICAgICAgICAn0L3QtdC00ZbQu9GPX9C/0L7QvdC10LTRltC70L7Qul/QstGW0LLRgtC+0YDQvtC6X9GB0LXRgNC10LTQsF/Rh9C10YLQstC10YBf0L/igJnRj9GC0L3QuNGG0Y9f0YHRg9Cx0L7RgtCwJy5zcGxpdChcbiAgICAgICAgICAgICAgICAgICAgICAgICdfJ1xuICAgICAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgIGFjY3VzYXRpdmU6XG4gICAgICAgICAgICAgICAgICAgICfQvdC10LTRltC70Y5f0L/QvtC90LXQtNGW0LvQvtC6X9Cy0ZbQstGC0L7RgNC+0Lpf0YHQtdGA0LXQtNGDX9GH0LXRgtCy0LXRgF/Qv+KAmdGP0YLQvdC40YbRjl/RgdGD0LHQvtGC0YMnLnNwbGl0KFxuICAgICAgICAgICAgICAgICAgICAgICAgJ18nXG4gICAgICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgZ2VuaXRpdmU6XG4gICAgICAgICAgICAgICAgICAgICfQvdC10LTRltC70ZZf0L/QvtC90LXQtNGW0LvQutCwX9Cy0ZbQstGC0L7RgNC60LBf0YHQtdGA0LXQtNC4X9GH0LXRgtCy0LXRgNCz0LBf0L/igJnRj9GC0L3QuNGG0ZZf0YHRg9Cx0L7RgtC4Jy5zcGxpdChcbiAgICAgICAgICAgICAgICAgICAgICAgICdfJ1xuICAgICAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIG5vdW5DYXNlO1xuXG4gICAgICAgIGlmIChtID09PSB0cnVlKSB7XG4gICAgICAgICAgICByZXR1cm4gd2Vla2RheXNbJ25vbWluYXRpdmUnXVxuICAgICAgICAgICAgICAgIC5zbGljZSgxLCA3KVxuICAgICAgICAgICAgICAgIC5jb25jYXQod2Vla2RheXNbJ25vbWluYXRpdmUnXS5zbGljZSgwLCAxKSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFtKSB7XG4gICAgICAgICAgICByZXR1cm4gd2Vla2RheXNbJ25vbWluYXRpdmUnXTtcbiAgICAgICAgfVxuXG4gICAgICAgIG5vdW5DYXNlID0gLyhcXFtb0JLQstCj0YNdXFxdKSA/ZGRkZC8udGVzdChmb3JtYXQpXG4gICAgICAgICAgICA/ICdhY2N1c2F0aXZlJ1xuICAgICAgICAgICAgOiAvXFxbPyg/OtC80LjQvdGD0LvQvtGXfNC90LDRgdGC0YPQv9C90L7Rlyk/ID9cXF0gP2RkZGQvLnRlc3QoZm9ybWF0KVxuICAgICAgICAgICAgICA/ICdnZW5pdGl2ZSdcbiAgICAgICAgICAgICAgOiAnbm9taW5hdGl2ZSc7XG4gICAgICAgIHJldHVybiB3ZWVrZGF5c1tub3VuQ2FzZV1bbS5kYXkoKV07XG4gICAgfVxuICAgIGZ1bmN0aW9uIHByb2Nlc3NIb3Vyc0Z1bmN0aW9uKHN0cikge1xuICAgICAgICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuIHN0ciArICfQvicgKyAodGhpcy5ob3VycygpID09PSAxMSA/ICfQsScgOiAnJykgKyAnXSBMVCc7XG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgdmFyIHVrID0gbW9tZW50LmRlZmluZUxvY2FsZSgndWsnLCB7XG4gICAgICAgIG1vbnRoczoge1xuICAgICAgICAgICAgZm9ybWF0OiAn0YHRltGH0L3Rj1/Qu9GO0YLQvtCz0L5f0LHQtdGA0LXQt9C90Y9f0LrQstGW0YLQvdGPX9GC0YDQsNCy0L3Rj1/Rh9C10YDQstC90Y9f0LvQuNC/0L3Rj1/RgdC10YDQv9C90Y9f0LLQtdGA0LXRgdC90Y9f0LbQvtCy0YLQvdGPX9C70LjRgdGC0L7Qv9Cw0LTQsF/Qs9GA0YPQtNC90Y8nLnNwbGl0KFxuICAgICAgICAgICAgICAgICdfJ1xuICAgICAgICAgICAgKSxcbiAgICAgICAgICAgIHN0YW5kYWxvbmU6XG4gICAgICAgICAgICAgICAgJ9GB0ZbRh9C10L3RjF/Qu9GO0YLQuNC5X9Cx0LXRgNC10LfQtdC90Yxf0LrQstGW0YLQtdC90Yxf0YLRgNCw0LLQtdC90Yxf0YfQtdGA0LLQtdC90Yxf0LvQuNC/0LXQvdGMX9GB0LXRgNC/0LXQvdGMX9Cy0LXRgNC10YHQtdC90Yxf0LbQvtCy0YLQtdC90Yxf0LvQuNGB0YLQvtC/0LDQtF/Qs9GA0YPQtNC10L3RjCcuc3BsaXQoXG4gICAgICAgICAgICAgICAgICAgICdfJ1xuICAgICAgICAgICAgICAgICksXG4gICAgICAgIH0sXG4gICAgICAgIG1vbnRoc1Nob3J0OiAn0YHRltGHX9C70Y7Rgl/QsdC10YBf0LrQstGW0YJf0YLRgNCw0LJf0YfQtdGA0LJf0LvQuNC/X9GB0LXRgNC/X9Cy0LXRgF/QttC+0LLRgl/Qu9C40YHRgl/Qs9GA0YPQtCcuc3BsaXQoXG4gICAgICAgICAgICAnXydcbiAgICAgICAgKSxcbiAgICAgICAgd2Vla2RheXM6IHdlZWtkYXlzQ2FzZVJlcGxhY2UsXG4gICAgICAgIHdlZWtkYXlzU2hvcnQ6ICfQvdC0X9C/0L1f0LLRgl/RgdGAX9GH0YJf0L/Rgl/RgdCxJy5zcGxpdCgnXycpLFxuICAgICAgICB3ZWVrZGF5c01pbjogJ9C90LRf0L/QvV/QstGCX9GB0YBf0YfRgl/Qv9GCX9GB0LEnLnNwbGl0KCdfJyksXG4gICAgICAgIGxvbmdEYXRlRm9ybWF0OiB7XG4gICAgICAgICAgICBMVDogJ0hIOm1tJyxcbiAgICAgICAgICAgIExUUzogJ0hIOm1tOnNzJyxcbiAgICAgICAgICAgIEw6ICdERC5NTS5ZWVlZJyxcbiAgICAgICAgICAgIExMOiAnRCBNTU1NIFlZWVkg0YAuJyxcbiAgICAgICAgICAgIExMTDogJ0QgTU1NTSBZWVlZINGALiwgSEg6bW0nLFxuICAgICAgICAgICAgTExMTDogJ2RkZGQsIEQgTU1NTSBZWVlZINGALiwgSEg6bW0nLFxuICAgICAgICB9LFxuICAgICAgICBjYWxlbmRhcjoge1xuICAgICAgICAgICAgc2FtZURheTogcHJvY2Vzc0hvdXJzRnVuY3Rpb24oJ1vQodGM0L7Qs9C+0LTQvdGWICcpLFxuICAgICAgICAgICAgbmV4dERheTogcHJvY2Vzc0hvdXJzRnVuY3Rpb24oJ1vQl9Cw0LLRgtGA0LAgJyksXG4gICAgICAgICAgICBsYXN0RGF5OiBwcm9jZXNzSG91cnNGdW5jdGlvbignW9CS0YfQvtGA0LAgJyksXG4gICAgICAgICAgICBuZXh0V2VlazogcHJvY2Vzc0hvdXJzRnVuY3Rpb24oJ1vQo10gZGRkZCBbJyksXG4gICAgICAgICAgICBsYXN0V2VlazogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIHN3aXRjaCAodGhpcy5kYXkoKSkge1xuICAgICAgICAgICAgICAgICAgICBjYXNlIDA6XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgMzpcbiAgICAgICAgICAgICAgICAgICAgY2FzZSA1OlxuICAgICAgICAgICAgICAgICAgICBjYXNlIDY6XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcHJvY2Vzc0hvdXJzRnVuY3Rpb24oJ1vQnNC40L3Rg9C70L7Rl10gZGRkZCBbJykuY2FsbCh0aGlzKTtcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAxOlxuICAgICAgICAgICAgICAgICAgICBjYXNlIDI6XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgNDpcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBwcm9jZXNzSG91cnNGdW5jdGlvbignW9Cc0LjQvdGD0LvQvtCz0L5dIGRkZGQgWycpLmNhbGwodGhpcyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHNhbWVFbHNlOiAnTCcsXG4gICAgICAgIH0sXG4gICAgICAgIHJlbGF0aXZlVGltZToge1xuICAgICAgICAgICAgZnV0dXJlOiAn0LfQsCAlcycsXG4gICAgICAgICAgICBwYXN0OiAnJXMg0YLQvtC80YMnLFxuICAgICAgICAgICAgczogJ9C00LXQutGW0LvRjNC60LAg0YHQtdC60YPQvdC0JyxcbiAgICAgICAgICAgIHNzOiByZWxhdGl2ZVRpbWVXaXRoUGx1cmFsLFxuICAgICAgICAgICAgbTogcmVsYXRpdmVUaW1lV2l0aFBsdXJhbCxcbiAgICAgICAgICAgIG1tOiByZWxhdGl2ZVRpbWVXaXRoUGx1cmFsLFxuICAgICAgICAgICAgaDogJ9Cz0L7QtNC40L3RgycsXG4gICAgICAgICAgICBoaDogcmVsYXRpdmVUaW1lV2l0aFBsdXJhbCxcbiAgICAgICAgICAgIGQ6ICfQtNC10L3RjCcsXG4gICAgICAgICAgICBkZDogcmVsYXRpdmVUaW1lV2l0aFBsdXJhbCxcbiAgICAgICAgICAgIE06ICfQvNGW0YHRj9GG0YwnLFxuICAgICAgICAgICAgTU06IHJlbGF0aXZlVGltZVdpdGhQbHVyYWwsXG4gICAgICAgICAgICB5OiAn0YDRltC6JyxcbiAgICAgICAgICAgIHl5OiByZWxhdGl2ZVRpbWVXaXRoUGx1cmFsLFxuICAgICAgICB9LFxuICAgICAgICAvLyBNLiBFLjogdGhvc2UgdHdvIGFyZSB2aXJ0dWFsbHkgdW51c2VkIGJ1dCBhIHVzZXIgbWlnaHQgd2FudCB0byBpbXBsZW1lbnQgdGhlbSBmb3IgaGlzL2hlciB3ZWJzaXRlIGZvciBzb21lIHJlYXNvblxuICAgICAgICBtZXJpZGllbVBhcnNlOiAv0L3QvtGH0ZZ80YDQsNC90LrRg3zQtNC90Y980LLQtdGH0L7RgNCwLyxcbiAgICAgICAgaXNQTTogZnVuY3Rpb24gKGlucHV0KSB7XG4gICAgICAgICAgICByZXR1cm4gL14o0LTQvdGPfNCy0LXRh9C+0YDQsCkkLy50ZXN0KGlucHV0KTtcbiAgICAgICAgfSxcbiAgICAgICAgbWVyaWRpZW06IGZ1bmN0aW9uIChob3VyLCBtaW51dGUsIGlzTG93ZXIpIHtcbiAgICAgICAgICAgIGlmIChob3VyIDwgNCkge1xuICAgICAgICAgICAgICAgIHJldHVybiAn0L3QvtGH0ZYnO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChob3VyIDwgMTIpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gJ9GA0LDQvdC60YMnO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChob3VyIDwgMTcpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gJ9C00L3Rjyc7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHJldHVybiAn0LLQtdGH0L7RgNCwJztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgZGF5T2ZNb250aE9yZGluYWxQYXJzZTogL1xcZHsxLDJ9LSjQuXzQs9C+KS8sXG4gICAgICAgIG9yZGluYWw6IGZ1bmN0aW9uIChudW1iZXIsIHBlcmlvZCkge1xuICAgICAgICAgICAgc3dpdGNoIChwZXJpb2QpIHtcbiAgICAgICAgICAgICAgICBjYXNlICdNJzpcbiAgICAgICAgICAgICAgICBjYXNlICdkJzpcbiAgICAgICAgICAgICAgICBjYXNlICdEREQnOlxuICAgICAgICAgICAgICAgIGNhc2UgJ3cnOlxuICAgICAgICAgICAgICAgIGNhc2UgJ1cnOlxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gbnVtYmVyICsgJy3QuSc7XG4gICAgICAgICAgICAgICAgY2FzZSAnRCc6XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBudW1iZXIgKyAnLdCz0L4nO1xuICAgICAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBudW1iZXI7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIHdlZWs6IHtcbiAgICAgICAgICAgIGRvdzogMSwgLy8gTW9uZGF5IGlzIHRoZSBmaXJzdCBkYXkgb2YgdGhlIHdlZWsuXG4gICAgICAgICAgICBkb3k6IDcsIC8vIFRoZSB3ZWVrIHRoYXQgY29udGFpbnMgSmFuIDd0aCBpcyB0aGUgZmlyc3Qgd2VlayBvZiB0aGUgeWVhci5cbiAgICAgICAgfSxcbiAgICB9KTtcblxuICAgIHJldHVybiB1aztcblxufSkpKTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///16618\n")},16643:(I,g,t)=>{"use strict";I.exports=t.p+"534964126bfa76edf7db.png"},16702:(I,g,t)=>{"use strict";I.exports=t.p+"d7b1357b207187f85d32.png"},16708:(module,__unused_webpack_exports,__webpack_require__)=>{"use strict";eval("// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n// A bit simpler than readable streams.\n// Implement an async ._write(chunk, encoding, cb), and it'll handle all\n// the drain event emission and buffering.\n\n\n\nmodule.exports = Writable;\n\n/* */\nfunction WriteReq(chunk, encoding, cb) {\n this.chunk = chunk;\n this.encoding = encoding;\n this.callback = cb;\n this.next = null;\n}\n\n// It seems a linked list but it is not\n// there will be only 2 of these for each stream\nfunction CorkedRequest(state) {\n var _this = this;\n this.next = null;\n this.entry = null;\n this.finish = function () {\n onCorkedFinish(_this, state);\n };\n}\n/* */\n\n/**/\nvar Duplex;\n/**/\n\nWritable.WritableState = WritableState;\n\n/**/\nvar internalUtil = {\n deprecate: __webpack_require__(94643)\n};\n/**/\n\n/**/\nvar Stream = __webpack_require__(40345);\n/**/\n\nvar Buffer = (__webpack_require__(27650).Buffer);\nvar OurUint8Array = (typeof __webpack_require__.g !== 'undefined' ? __webpack_require__.g : typeof window !== 'undefined' ? window : typeof self !== 'undefined' ? self : {}).Uint8Array || function () {};\nfunction _uint8ArrayToBuffer(chunk) {\n return Buffer.from(chunk);\n}\nfunction _isUint8Array(obj) {\n return Buffer.isBuffer(obj) || obj instanceof OurUint8Array;\n}\nvar destroyImpl = __webpack_require__(75896);\nvar _require = __webpack_require__(65291),\n getHighWaterMark = _require.getHighWaterMark;\nvar _require$codes = (__webpack_require__(86048)/* .codes */ .F),\n ERR_INVALID_ARG_TYPE = _require$codes.ERR_INVALID_ARG_TYPE,\n ERR_METHOD_NOT_IMPLEMENTED = _require$codes.ERR_METHOD_NOT_IMPLEMENTED,\n ERR_MULTIPLE_CALLBACK = _require$codes.ERR_MULTIPLE_CALLBACK,\n ERR_STREAM_CANNOT_PIPE = _require$codes.ERR_STREAM_CANNOT_PIPE,\n ERR_STREAM_DESTROYED = _require$codes.ERR_STREAM_DESTROYED,\n ERR_STREAM_NULL_VALUES = _require$codes.ERR_STREAM_NULL_VALUES,\n ERR_STREAM_WRITE_AFTER_END = _require$codes.ERR_STREAM_WRITE_AFTER_END,\n ERR_UNKNOWN_ENCODING = _require$codes.ERR_UNKNOWN_ENCODING;\nvar errorOrDestroy = destroyImpl.errorOrDestroy;\n__webpack_require__(56698)(Writable, Stream);\nfunction nop() {}\nfunction WritableState(options, stream, isDuplex) {\n Duplex = Duplex || __webpack_require__(25382);\n options = options || {};\n\n // Duplex streams are both readable and writable, but share\n // the same options object.\n // However, some cases require setting options to different\n // values for the readable and the writable sides of the duplex stream,\n // e.g. options.readableObjectMode vs. options.writableObjectMode, etc.\n if (typeof isDuplex !== 'boolean') isDuplex = stream instanceof Duplex;\n\n // object stream flag to indicate whether or not this stream\n // contains buffers or objects.\n this.objectMode = !!options.objectMode;\n if (isDuplex) this.objectMode = this.objectMode || !!options.writableObjectMode;\n\n // the point at which write() starts returning false\n // Note: 0 is a valid value, means that we always return false if\n // the entire buffer is not flushed immediately on write()\n this.highWaterMark = getHighWaterMark(this, options, 'writableHighWaterMark', isDuplex);\n\n // if _final has been called\n this.finalCalled = false;\n\n // drain event flag.\n this.needDrain = false;\n // at the start of calling end()\n this.ending = false;\n // when end() has been called, and returned\n this.ended = false;\n // when 'finish' is emitted\n this.finished = false;\n\n // has it been destroyed\n this.destroyed = false;\n\n // should we decode strings into buffers before passing to _write?\n // this is here so that some node-core streams can optimize string\n // handling at a lower level.\n var noDecode = options.decodeStrings === false;\n this.decodeStrings = !noDecode;\n\n // Crypto is kind of old and crusty. Historically, its default string\n // encoding is 'binary' so we have to make this configurable.\n // Everything else in the universe uses 'utf8', though.\n this.defaultEncoding = options.defaultEncoding || 'utf8';\n\n // not an actual buffer we keep track of, but a measurement\n // of how much we're waiting to get pushed to some underlying\n // socket or file.\n this.length = 0;\n\n // a flag to see when we're in the middle of a write.\n this.writing = false;\n\n // when true all writes will be buffered until .uncork() call\n this.corked = 0;\n\n // a flag to be able to tell if the onwrite cb is called immediately,\n // or on a later tick. We set this to true at first, because any\n // actions that shouldn't happen until \"later\" should generally also\n // not happen before the first write call.\n this.sync = true;\n\n // a flag to know if we're processing previously buffered items, which\n // may call the _write() callback in the same tick, so that we don't\n // end up in an overlapped onwrite situation.\n this.bufferProcessing = false;\n\n // the callback that's passed to _write(chunk,cb)\n this.onwrite = function (er) {\n onwrite(stream, er);\n };\n\n // the callback that the user supplies to write(chunk,encoding,cb)\n this.writecb = null;\n\n // the amount that is being written when _write is called.\n this.writelen = 0;\n this.bufferedRequest = null;\n this.lastBufferedRequest = null;\n\n // number of pending user-supplied write callbacks\n // this must be 0 before 'finish' can be emitted\n this.pendingcb = 0;\n\n // emit prefinish if the only thing we're waiting for is _write cbs\n // This is relevant for synchronous Transform streams\n this.prefinished = false;\n\n // True if the error was already emitted and should not be thrown again\n this.errorEmitted = false;\n\n // Should close be emitted on destroy. Defaults to true.\n this.emitClose = options.emitClose !== false;\n\n // Should .destroy() be called after 'finish' (and potentially 'end')\n this.autoDestroy = !!options.autoDestroy;\n\n // count buffered requests\n this.bufferedRequestCount = 0;\n\n // allocate the first CorkedRequest, there is always\n // one allocated and free to use, and we maintain at most two\n this.corkedRequestsFree = new CorkedRequest(this);\n}\nWritableState.prototype.getBuffer = function getBuffer() {\n var current = this.bufferedRequest;\n var out = [];\n while (current) {\n out.push(current);\n current = current.next;\n }\n return out;\n};\n(function () {\n try {\n Object.defineProperty(WritableState.prototype, 'buffer', {\n get: internalUtil.deprecate(function writableStateBufferGetter() {\n return this.getBuffer();\n }, '_writableState.buffer is deprecated. Use _writableState.getBuffer ' + 'instead.', 'DEP0003')\n });\n } catch (_) {}\n})();\n\n// Test _writableState for inheritance to account for Duplex streams,\n// whose prototype chain only points to Readable.\nvar realHasInstance;\nif (typeof Symbol === 'function' && Symbol.hasInstance && typeof Function.prototype[Symbol.hasInstance] === 'function') {\n realHasInstance = Function.prototype[Symbol.hasInstance];\n Object.defineProperty(Writable, Symbol.hasInstance, {\n value: function value(object) {\n if (realHasInstance.call(this, object)) return true;\n if (this !== Writable) return false;\n return object && object._writableState instanceof WritableState;\n }\n });\n} else {\n realHasInstance = function realHasInstance(object) {\n return object instanceof this;\n };\n}\nfunction Writable(options) {\n Duplex = Duplex || __webpack_require__(25382);\n\n // Writable ctor is applied to Duplexes, too.\n // `realHasInstance` is necessary because using plain `instanceof`\n // would return false, as no `_writableState` property is attached.\n\n // Trying to use the custom `instanceof` for Writable here will also break the\n // Node.js LazyTransform implementation, which has a non-trivial getter for\n // `_writableState` that would lead to infinite recursion.\n\n // Checking for a Stream.Duplex instance is faster here instead of inside\n // the WritableState constructor, at least with V8 6.5\n var isDuplex = this instanceof Duplex;\n if (!isDuplex && !realHasInstance.call(Writable, this)) return new Writable(options);\n this._writableState = new WritableState(options, this, isDuplex);\n\n // legacy.\n this.writable = true;\n if (options) {\n if (typeof options.write === 'function') this._write = options.write;\n if (typeof options.writev === 'function') this._writev = options.writev;\n if (typeof options.destroy === 'function') this._destroy = options.destroy;\n if (typeof options.final === 'function') this._final = options.final;\n }\n Stream.call(this);\n}\n\n// Otherwise people can pipe Writable streams, which is just wrong.\nWritable.prototype.pipe = function () {\n errorOrDestroy(this, new ERR_STREAM_CANNOT_PIPE());\n};\nfunction writeAfterEnd(stream, cb) {\n var er = new ERR_STREAM_WRITE_AFTER_END();\n // TODO: defer error events consistently everywhere, not just the cb\n errorOrDestroy(stream, er);\n process.nextTick(cb, er);\n}\n\n// Checks that a user-supplied chunk is valid, especially for the particular\n// mode the stream is in. Currently this means that `null` is never accepted\n// and undefined/non-string values are only allowed in object mode.\nfunction validChunk(stream, state, chunk, cb) {\n var er;\n if (chunk === null) {\n er = new ERR_STREAM_NULL_VALUES();\n } else if (typeof chunk !== 'string' && !state.objectMode) {\n er = new ERR_INVALID_ARG_TYPE('chunk', ['string', 'Buffer'], chunk);\n }\n if (er) {\n errorOrDestroy(stream, er);\n process.nextTick(cb, er);\n return false;\n }\n return true;\n}\nWritable.prototype.write = function (chunk, encoding, cb) {\n var state = this._writableState;\n var ret = false;\n var isBuf = !state.objectMode && _isUint8Array(chunk);\n if (isBuf && !Buffer.isBuffer(chunk)) {\n chunk = _uint8ArrayToBuffer(chunk);\n }\n if (typeof encoding === 'function') {\n cb = encoding;\n encoding = null;\n }\n if (isBuf) encoding = 'buffer';else if (!encoding) encoding = state.defaultEncoding;\n if (typeof cb !== 'function') cb = nop;\n if (state.ending) writeAfterEnd(this, cb);else if (isBuf || validChunk(this, state, chunk, cb)) {\n state.pendingcb++;\n ret = writeOrBuffer(this, state, isBuf, chunk, encoding, cb);\n }\n return ret;\n};\nWritable.prototype.cork = function () {\n this._writableState.corked++;\n};\nWritable.prototype.uncork = function () {\n var state = this._writableState;\n if (state.corked) {\n state.corked--;\n if (!state.writing && !state.corked && !state.bufferProcessing && state.bufferedRequest) clearBuffer(this, state);\n }\n};\nWritable.prototype.setDefaultEncoding = function setDefaultEncoding(encoding) {\n // node::ParseEncoding() requires lower case.\n if (typeof encoding === 'string') encoding = encoding.toLowerCase();\n if (!(['hex', 'utf8', 'utf-8', 'ascii', 'binary', 'base64', 'ucs2', 'ucs-2', 'utf16le', 'utf-16le', 'raw'].indexOf((encoding + '').toLowerCase()) > -1)) throw new ERR_UNKNOWN_ENCODING(encoding);\n this._writableState.defaultEncoding = encoding;\n return this;\n};\nObject.defineProperty(Writable.prototype, 'writableBuffer', {\n // making it explicit this property is not enumerable\n // because otherwise some prototype manipulation in\n // userland will fail\n enumerable: false,\n get: function get() {\n return this._writableState && this._writableState.getBuffer();\n }\n});\nfunction decodeChunk(state, chunk, encoding) {\n if (!state.objectMode && state.decodeStrings !== false && typeof chunk === 'string') {\n chunk = Buffer.from(chunk, encoding);\n }\n return chunk;\n}\nObject.defineProperty(Writable.prototype, 'writableHighWaterMark', {\n // making it explicit this property is not enumerable\n // because otherwise some prototype manipulation in\n // userland will fail\n enumerable: false,\n get: function get() {\n return this._writableState.highWaterMark;\n }\n});\n\n// if we're already writing something, then just put this\n// in the queue, and wait our turn. Otherwise, call _write\n// If we return false, then we need a drain event, so set that flag.\nfunction writeOrBuffer(stream, state, isBuf, chunk, encoding, cb) {\n if (!isBuf) {\n var newChunk = decodeChunk(state, chunk, encoding);\n if (chunk !== newChunk) {\n isBuf = true;\n encoding = 'buffer';\n chunk = newChunk;\n }\n }\n var len = state.objectMode ? 1 : chunk.length;\n state.length += len;\n var ret = state.length < state.highWaterMark;\n // we must ensure that previous needDrain will not be reset to false.\n if (!ret) state.needDrain = true;\n if (state.writing || state.corked) {\n var last = state.lastBufferedRequest;\n state.lastBufferedRequest = {\n chunk: chunk,\n encoding: encoding,\n isBuf: isBuf,\n callback: cb,\n next: null\n };\n if (last) {\n last.next = state.lastBufferedRequest;\n } else {\n state.bufferedRequest = state.lastBufferedRequest;\n }\n state.bufferedRequestCount += 1;\n } else {\n doWrite(stream, state, false, len, chunk, encoding, cb);\n }\n return ret;\n}\nfunction doWrite(stream, state, writev, len, chunk, encoding, cb) {\n state.writelen = len;\n state.writecb = cb;\n state.writing = true;\n state.sync = true;\n if (state.destroyed) state.onwrite(new ERR_STREAM_DESTROYED('write'));else if (writev) stream._writev(chunk, state.onwrite);else stream._write(chunk, encoding, state.onwrite);\n state.sync = false;\n}\nfunction onwriteError(stream, state, sync, er, cb) {\n --state.pendingcb;\n if (sync) {\n // defer the callback if we are being called synchronously\n // to avoid piling up things on the stack\n process.nextTick(cb, er);\n // this can emit finish, and it will always happen\n // after error\n process.nextTick(finishMaybe, stream, state);\n stream._writableState.errorEmitted = true;\n errorOrDestroy(stream, er);\n } else {\n // the caller expect this to happen before if\n // it is async\n cb(er);\n stream._writableState.errorEmitted = true;\n errorOrDestroy(stream, er);\n // this can emit finish, but finish must\n // always follow error\n finishMaybe(stream, state);\n }\n}\nfunction onwriteStateUpdate(state) {\n state.writing = false;\n state.writecb = null;\n state.length -= state.writelen;\n state.writelen = 0;\n}\nfunction onwrite(stream, er) {\n var state = stream._writableState;\n var sync = state.sync;\n var cb = state.writecb;\n if (typeof cb !== 'function') throw new ERR_MULTIPLE_CALLBACK();\n onwriteStateUpdate(state);\n if (er) onwriteError(stream, state, sync, er, cb);else {\n // Check if we're actually ready to finish, but don't emit yet\n var finished = needFinish(state) || stream.destroyed;\n if (!finished && !state.corked && !state.bufferProcessing && state.bufferedRequest) {\n clearBuffer(stream, state);\n }\n if (sync) {\n process.nextTick(afterWrite, stream, state, finished, cb);\n } else {\n afterWrite(stream, state, finished, cb);\n }\n }\n}\nfunction afterWrite(stream, state, finished, cb) {\n if (!finished) onwriteDrain(stream, state);\n state.pendingcb--;\n cb();\n finishMaybe(stream, state);\n}\n\n// Must force callback to be called on nextTick, so that we don't\n// emit 'drain' before the write() consumer gets the 'false' return\n// value, and has a chance to attach a 'drain' listener.\nfunction onwriteDrain(stream, state) {\n if (state.length === 0 && state.needDrain) {\n state.needDrain = false;\n stream.emit('drain');\n }\n}\n\n// if there's something in the buffer waiting, then process it\nfunction clearBuffer(stream, state) {\n state.bufferProcessing = true;\n var entry = state.bufferedRequest;\n if (stream._writev && entry && entry.next) {\n // Fast case, write everything using _writev()\n var l = state.bufferedRequestCount;\n var buffer = new Array(l);\n var holder = state.corkedRequestsFree;\n holder.entry = entry;\n var count = 0;\n var allBuffers = true;\n while (entry) {\n buffer[count] = entry;\n if (!entry.isBuf) allBuffers = false;\n entry = entry.next;\n count += 1;\n }\n buffer.allBuffers = allBuffers;\n doWrite(stream, state, true, state.length, buffer, '', holder.finish);\n\n // doWrite is almost always async, defer these to save a bit of time\n // as the hot path ends with doWrite\n state.pendingcb++;\n state.lastBufferedRequest = null;\n if (holder.next) {\n state.corkedRequestsFree = holder.next;\n holder.next = null;\n } else {\n state.corkedRequestsFree = new CorkedRequest(state);\n }\n state.bufferedRequestCount = 0;\n } else {\n // Slow case, write chunks one-by-one\n while (entry) {\n var chunk = entry.chunk;\n var encoding = entry.encoding;\n var cb = entry.callback;\n var len = state.objectMode ? 1 : chunk.length;\n doWrite(stream, state, false, len, chunk, encoding, cb);\n entry = entry.next;\n state.bufferedRequestCount--;\n // if we didn't call the onwrite immediately, then\n // it means that we need to wait until it does.\n // also, that means that the chunk and cb are currently\n // being processed, so move the buffer counter past them.\n if (state.writing) {\n break;\n }\n }\n if (entry === null) state.lastBufferedRequest = null;\n }\n state.bufferedRequest = entry;\n state.bufferProcessing = false;\n}\nWritable.prototype._write = function (chunk, encoding, cb) {\n cb(new ERR_METHOD_NOT_IMPLEMENTED('_write()'));\n};\nWritable.prototype._writev = null;\nWritable.prototype.end = function (chunk, encoding, cb) {\n var state = this._writableState;\n if (typeof chunk === 'function') {\n cb = chunk;\n chunk = null;\n encoding = null;\n } else if (typeof encoding === 'function') {\n cb = encoding;\n encoding = null;\n }\n if (chunk !== null && chunk !== undefined) this.write(chunk, encoding);\n\n // .end() fully uncorks\n if (state.corked) {\n state.corked = 1;\n this.uncork();\n }\n\n // ignore unnecessary end() calls.\n if (!state.ending) endWritable(this, state, cb);\n return this;\n};\nObject.defineProperty(Writable.prototype, 'writableLength', {\n // making it explicit this property is not enumerable\n // because otherwise some prototype manipulation in\n // userland will fail\n enumerable: false,\n get: function get() {\n return this._writableState.length;\n }\n});\nfunction needFinish(state) {\n return state.ending && state.length === 0 && state.bufferedRequest === null && !state.finished && !state.writing;\n}\nfunction callFinal(stream, state) {\n stream._final(function (err) {\n state.pendingcb--;\n if (err) {\n errorOrDestroy(stream, err);\n }\n state.prefinished = true;\n stream.emit('prefinish');\n finishMaybe(stream, state);\n });\n}\nfunction prefinish(stream, state) {\n if (!state.prefinished && !state.finalCalled) {\n if (typeof stream._final === 'function' && !state.destroyed) {\n state.pendingcb++;\n state.finalCalled = true;\n process.nextTick(callFinal, stream, state);\n } else {\n state.prefinished = true;\n stream.emit('prefinish');\n }\n }\n}\nfunction finishMaybe(stream, state) {\n var need = needFinish(state);\n if (need) {\n prefinish(stream, state);\n if (state.pendingcb === 0) {\n state.finished = true;\n stream.emit('finish');\n if (state.autoDestroy) {\n // In case of duplex streams we need a way to detect\n // if the readable side is ready for autoDestroy as well\n var rState = stream._readableState;\n if (!rState || rState.autoDestroy && rState.endEmitted) {\n stream.destroy();\n }\n }\n }\n }\n return need;\n}\nfunction endWritable(stream, state, cb) {\n state.ending = true;\n finishMaybe(stream, state);\n if (cb) {\n if (state.finished) process.nextTick(cb);else stream.once('finish', cb);\n }\n state.ended = true;\n stream.writable = false;\n}\nfunction onCorkedFinish(corkReq, state, err) {\n var entry = corkReq.entry;\n corkReq.entry = null;\n while (entry) {\n var cb = entry.callback;\n state.pendingcb--;\n cb(err);\n entry = entry.next;\n }\n\n // reuse the free corkReq.\n state.corkedRequestsFree.next = corkReq;\n}\nObject.defineProperty(Writable.prototype, 'destroyed', {\n // making it explicit this property is not enumerable\n // because otherwise some prototype manipulation in\n // userland will fail\n enumerable: false,\n get: function get() {\n if (this._writableState === undefined) {\n return false;\n }\n return this._writableState.destroyed;\n },\n set: function set(value) {\n // we ignore the value if the stream\n // has not been initialized yet\n if (!this._writableState) {\n return;\n }\n\n // backward compatibility, the user is explicitly\n // managing destroyed\n this._writableState.destroyed = value;\n }\n});\nWritable.prototype.destroy = destroyImpl.destroy;\nWritable.prototype._undestroy = destroyImpl.undestroy;\nWritable.prototype._destroy = function (err, cb) {\n cb(err);\n};//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMTY3MDguanMiLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL2l0Zy1uZXh0Z2VuLWZyb250ZW5kLy4vbm9kZV9tb2R1bGVzL3JlYWRhYmxlLXN0cmVhbS9saWIvX3N0cmVhbV93cml0YWJsZS5qcz9kYzE0Il0sInNvdXJjZXNDb250ZW50IjpbIi8vIENvcHlyaWdodCBKb3llbnQsIEluYy4gYW5kIG90aGVyIE5vZGUgY29udHJpYnV0b3JzLlxuLy9cbi8vIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhXG4vLyBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlXG4vLyBcIlNvZnR3YXJlXCIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmdcbi8vIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCxcbi8vIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXRcbi8vIHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZVxuLy8gZm9sbG93aW5nIGNvbmRpdGlvbnM6XG4vL1xuLy8gVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWRcbi8vIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLlxuLy9cbi8vIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1Ncbi8vIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0Zcbi8vIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU5cbi8vIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLFxuLy8gREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SXG4vLyBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFXG4vLyBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLlxuXG4vLyBBIGJpdCBzaW1wbGVyIHRoYW4gcmVhZGFibGUgc3RyZWFtcy5cbi8vIEltcGxlbWVudCBhbiBhc3luYyAuX3dyaXRlKGNodW5rLCBlbmNvZGluZywgY2IpLCBhbmQgaXQnbGwgaGFuZGxlIGFsbFxuLy8gdGhlIGRyYWluIGV2ZW50IGVtaXNzaW9uIGFuZCBidWZmZXJpbmcuXG5cbid1c2Ugc3RyaWN0JztcblxubW9kdWxlLmV4cG9ydHMgPSBXcml0YWJsZTtcblxuLyogPHJlcGxhY2VtZW50PiAqL1xuZnVuY3Rpb24gV3JpdGVSZXEoY2h1bmssIGVuY29kaW5nLCBjYikge1xuICB0aGlzLmNodW5rID0gY2h1bms7XG4gIHRoaXMuZW5jb2RpbmcgPSBlbmNvZGluZztcbiAgdGhpcy5jYWxsYmFjayA9IGNiO1xuICB0aGlzLm5leHQgPSBudWxsO1xufVxuXG4vLyBJdCBzZWVtcyBhIGxpbmtlZCBsaXN0IGJ1dCBpdCBpcyBub3Rcbi8vIHRoZXJlIHdpbGwgYmUgb25seSAyIG9mIHRoZXNlIGZvciBlYWNoIHN0cmVhbVxuZnVuY3Rpb24gQ29ya2VkUmVxdWVzdChzdGF0ZSkge1xuICB2YXIgX3RoaXMgPSB0aGlzO1xuICB0aGlzLm5leHQgPSBudWxsO1xuICB0aGlzLmVudHJ5ID0gbnVsbDtcbiAgdGhpcy5maW5pc2ggPSBmdW5jdGlvbiAoKSB7XG4gICAgb25Db3JrZWRGaW5pc2goX3RoaXMsIHN0YXRlKTtcbiAgfTtcbn1cbi8qIDwvcmVwbGFjZW1lbnQ+ICovXG5cbi8qPHJlcGxhY2VtZW50PiovXG52YXIgRHVwbGV4O1xuLyo8L3JlcGxhY2VtZW50PiovXG5cbldyaXRhYmxlLldyaXRhYmxlU3RhdGUgPSBXcml0YWJsZVN0YXRlO1xuXG4vKjxyZXBsYWNlbWVudD4qL1xudmFyIGludGVybmFsVXRpbCA9IHtcbiAgZGVwcmVjYXRlOiByZXF1aXJlKCd1dGlsLWRlcHJlY2F0ZScpXG59O1xuLyo8L3JlcGxhY2VtZW50PiovXG5cbi8qPHJlcGxhY2VtZW50PiovXG52YXIgU3RyZWFtID0gcmVxdWlyZSgnLi9pbnRlcm5hbC9zdHJlYW1zL3N0cmVhbScpO1xuLyo8L3JlcGxhY2VtZW50PiovXG5cbnZhciBCdWZmZXIgPSByZXF1aXJlKCdidWZmZXInKS5CdWZmZXI7XG52YXIgT3VyVWludDhBcnJheSA9ICh0eXBlb2YgZ2xvYmFsICE9PSAndW5kZWZpbmVkJyA/IGdsb2JhbCA6IHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnID8gd2luZG93IDogdHlwZW9mIHNlbGYgIT09ICd1bmRlZmluZWQnID8gc2VsZiA6IHt9KS5VaW50OEFycmF5IHx8IGZ1bmN0aW9uICgpIHt9O1xuZnVuY3Rpb24gX3VpbnQ4QXJyYXlUb0J1ZmZlcihjaHVuaykge1xuICByZXR1cm4gQnVmZmVyLmZyb20oY2h1bmspO1xufVxuZnVuY3Rpb24gX2lzVWludDhBcnJheShvYmopIHtcbiAgcmV0dXJuIEJ1ZmZlci5pc0J1ZmZlcihvYmopIHx8IG9iaiBpbnN0YW5jZW9mIE91clVpbnQ4QXJyYXk7XG59XG52YXIgZGVzdHJveUltcGwgPSByZXF1aXJlKCcuL2ludGVybmFsL3N0cmVhbXMvZGVzdHJveScpO1xudmFyIF9yZXF1aXJlID0gcmVxdWlyZSgnLi9pbnRlcm5hbC9zdHJlYW1zL3N0YXRlJyksXG4gIGdldEhpZ2hXYXRlck1hcmsgPSBfcmVxdWlyZS5nZXRIaWdoV2F0ZXJNYXJrO1xudmFyIF9yZXF1aXJlJGNvZGVzID0gcmVxdWlyZSgnLi4vZXJyb3JzJykuY29kZXMsXG4gIEVSUl9JTlZBTElEX0FSR19UWVBFID0gX3JlcXVpcmUkY29kZXMuRVJSX0lOVkFMSURfQVJHX1RZUEUsXG4gIEVSUl9NRVRIT0RfTk9UX0lNUExFTUVOVEVEID0gX3JlcXVpcmUkY29kZXMuRVJSX01FVEhPRF9OT1RfSU1QTEVNRU5URUQsXG4gIEVSUl9NVUxUSVBMRV9DQUxMQkFDSyA9IF9yZXF1aXJlJGNvZGVzLkVSUl9NVUxUSVBMRV9DQUxMQkFDSyxcbiAgRVJSX1NUUkVBTV9DQU5OT1RfUElQRSA9IF9yZXF1aXJlJGNvZGVzLkVSUl9TVFJFQU1fQ0FOTk9UX1BJUEUsXG4gIEVSUl9TVFJFQU1fREVTVFJPWUVEID0gX3JlcXVpcmUkY29kZXMuRVJSX1NUUkVBTV9ERVNUUk9ZRUQsXG4gIEVSUl9TVFJFQU1fTlVMTF9WQUxVRVMgPSBfcmVxdWlyZSRjb2Rlcy5FUlJfU1RSRUFNX05VTExfVkFMVUVTLFxuICBFUlJfU1RSRUFNX1dSSVRFX0FGVEVSX0VORCA9IF9yZXF1aXJlJGNvZGVzLkVSUl9TVFJFQU1fV1JJVEVfQUZURVJfRU5ELFxuICBFUlJfVU5LTk9XTl9FTkNPRElORyA9IF9yZXF1aXJlJGNvZGVzLkVSUl9VTktOT1dOX0VOQ09ESU5HO1xudmFyIGVycm9yT3JEZXN0cm95ID0gZGVzdHJveUltcGwuZXJyb3JPckRlc3Ryb3k7XG5yZXF1aXJlKCdpbmhlcml0cycpKFdyaXRhYmxlLCBTdHJlYW0pO1xuZnVuY3Rpb24gbm9wKCkge31cbmZ1bmN0aW9uIFdyaXRhYmxlU3RhdGUob3B0aW9ucywgc3RyZWFtLCBpc0R1cGxleCkge1xuICBEdXBsZXggPSBEdXBsZXggfHwgcmVxdWlyZSgnLi9fc3RyZWFtX2R1cGxleCcpO1xuICBvcHRpb25zID0gb3B0aW9ucyB8fCB7fTtcblxuICAvLyBEdXBsZXggc3RyZWFtcyBhcmUgYm90aCByZWFkYWJsZSBhbmQgd3JpdGFibGUsIGJ1dCBzaGFyZVxuICAvLyB0aGUgc2FtZSBvcHRpb25zIG9iamVjdC5cbiAgLy8gSG93ZXZlciwgc29tZSBjYXNlcyByZXF1aXJlIHNldHRpbmcgb3B0aW9ucyB0byBkaWZmZXJlbnRcbiAgLy8gdmFsdWVzIGZvciB0aGUgcmVhZGFibGUgYW5kIHRoZSB3cml0YWJsZSBzaWRlcyBvZiB0aGUgZHVwbGV4IHN0cmVhbSxcbiAgLy8gZS5nLiBvcHRpb25zLnJlYWRhYmxlT2JqZWN0TW9kZSB2cy4gb3B0aW9ucy53cml0YWJsZU9iamVjdE1vZGUsIGV0Yy5cbiAgaWYgKHR5cGVvZiBpc0R1cGxleCAhPT0gJ2Jvb2xlYW4nKSBpc0R1cGxleCA9IHN0cmVhbSBpbnN0YW5jZW9mIER1cGxleDtcblxuICAvLyBvYmplY3Qgc3RyZWFtIGZsYWcgdG8gaW5kaWNhdGUgd2hldGhlciBvciBub3QgdGhpcyBzdHJlYW1cbiAgLy8gY29udGFpbnMgYnVmZmVycyBvciBvYmplY3RzLlxuICB0aGlzLm9iamVjdE1vZGUgPSAhIW9wdGlvbnMub2JqZWN0TW9kZTtcbiAgaWYgKGlzRHVwbGV4KSB0aGlzLm9iamVjdE1vZGUgPSB0aGlzLm9iamVjdE1vZGUgfHwgISFvcHRpb25zLndyaXRhYmxlT2JqZWN0TW9kZTtcblxuICAvLyB0aGUgcG9pbnQgYXQgd2hpY2ggd3JpdGUoKSBzdGFydHMgcmV0dXJuaW5nIGZhbHNlXG4gIC8vIE5vdGU6IDAgaXMgYSB2YWxpZCB2YWx1ZSwgbWVhbnMgdGhhdCB3ZSBhbHdheXMgcmV0dXJuIGZhbHNlIGlmXG4gIC8vIHRoZSBlbnRpcmUgYnVmZmVyIGlzIG5vdCBmbHVzaGVkIGltbWVkaWF0ZWx5IG9uIHdyaXRlKClcbiAgdGhpcy5oaWdoV2F0ZXJNYXJrID0gZ2V0SGlnaFdhdGVyTWFyayh0aGlzLCBvcHRpb25zLCAnd3JpdGFibGVIaWdoV2F0ZXJNYXJrJywgaXNEdXBsZXgpO1xuXG4gIC8vIGlmIF9maW5hbCBoYXMgYmVlbiBjYWxsZWRcbiAgdGhpcy5maW5hbENhbGxlZCA9IGZhbHNlO1xuXG4gIC8vIGRyYWluIGV2ZW50IGZsYWcuXG4gIHRoaXMubmVlZERyYWluID0gZmFsc2U7XG4gIC8vIGF0IHRoZSBzdGFydCBvZiBjYWxsaW5nIGVuZCgpXG4gIHRoaXMuZW5kaW5nID0gZmFsc2U7XG4gIC8vIHdoZW4gZW5kKCkgaGFzIGJlZW4gY2FsbGVkLCBhbmQgcmV0dXJuZWRcbiAgdGhpcy5lbmRlZCA9IGZhbHNlO1xuICAvLyB3aGVuICdmaW5pc2gnIGlzIGVtaXR0ZWRcbiAgdGhpcy5maW5pc2hlZCA9IGZhbHNlO1xuXG4gIC8vIGhhcyBpdCBiZWVuIGRlc3Ryb3llZFxuICB0aGlzLmRlc3Ryb3llZCA9IGZhbHNlO1xuXG4gIC8vIHNob3VsZCB3ZSBkZWNvZGUgc3RyaW5ncyBpbnRvIGJ1ZmZlcnMgYmVmb3JlIHBhc3NpbmcgdG8gX3dyaXRlP1xuICAvLyB0aGlzIGlzIGhlcmUgc28gdGhhdCBzb21lIG5vZGUtY29yZSBzdHJlYW1zIGNhbiBvcHRpbWl6ZSBzdHJpbmdcbiAgLy8gaGFuZGxpbmcgYXQgYSBsb3dlciBsZXZlbC5cbiAgdmFyIG5vRGVjb2RlID0gb3B0aW9ucy5kZWNvZGVTdHJpbmdzID09PSBmYWxzZTtcbiAgdGhpcy5kZWNvZGVTdHJpbmdzID0gIW5vRGVjb2RlO1xuXG4gIC8vIENyeXB0byBpcyBraW5kIG9mIG9sZCBhbmQgY3J1c3R5LiAgSGlzdG9yaWNhbGx5LCBpdHMgZGVmYXVsdCBzdHJpbmdcbiAgLy8gZW5jb2RpbmcgaXMgJ2JpbmFyeScgc28gd2UgaGF2ZSB0byBtYWtlIHRoaXMgY29uZmlndXJhYmxlLlxuICAvLyBFdmVyeXRoaW5nIGVsc2UgaW4gdGhlIHVuaXZlcnNlIHVzZXMgJ3V0ZjgnLCB0aG91Z2guXG4gIHRoaXMuZGVmYXVsdEVuY29kaW5nID0gb3B0aW9ucy5kZWZhdWx0RW5jb2RpbmcgfHwgJ3V0ZjgnO1xuXG4gIC8vIG5vdCBhbiBhY3R1YWwgYnVmZmVyIHdlIGtlZXAgdHJhY2sgb2YsIGJ1dCBhIG1lYXN1cmVtZW50XG4gIC8vIG9mIGhvdyBtdWNoIHdlJ3JlIHdhaXRpbmcgdG8gZ2V0IHB1c2hlZCB0byBzb21lIHVuZGVybHlpbmdcbiAgLy8gc29ja2V0IG9yIGZpbGUuXG4gIHRoaXMubGVuZ3RoID0gMDtcblxuICAvLyBhIGZsYWcgdG8gc2VlIHdoZW4gd2UncmUgaW4gdGhlIG1pZGRsZSBvZiBhIHdyaXRlLlxuICB0aGlzLndyaXRpbmcgPSBmYWxzZTtcblxuICAvLyB3aGVuIHRydWUgYWxsIHdyaXRlcyB3aWxsIGJlIGJ1ZmZlcmVkIHVudGlsIC51bmNvcmsoKSBjYWxsXG4gIHRoaXMuY29ya2VkID0gMDtcblxuICAvLyBhIGZsYWcgdG8gYmUgYWJsZSB0byB0ZWxsIGlmIHRoZSBvbndyaXRlIGNiIGlzIGNhbGxlZCBpbW1lZGlhdGVseSxcbiAgLy8gb3Igb24gYSBsYXRlciB0aWNrLiAgV2Ugc2V0IHRoaXMgdG8gdHJ1ZSBhdCBmaXJzdCwgYmVjYXVzZSBhbnlcbiAgLy8gYWN0aW9ucyB0aGF0IHNob3VsZG4ndCBoYXBwZW4gdW50aWwgXCJsYXRlclwiIHNob3VsZCBnZW5lcmFsbHkgYWxzb1xuICAvLyBub3QgaGFwcGVuIGJlZm9yZSB0aGUgZmlyc3Qgd3JpdGUgY2FsbC5cbiAgdGhpcy5zeW5jID0gdHJ1ZTtcblxuICAvLyBhIGZsYWcgdG8ga25vdyBpZiB3ZSdyZSBwcm9jZXNzaW5nIHByZXZpb3VzbHkgYnVmZmVyZWQgaXRlbXMsIHdoaWNoXG4gIC8vIG1heSBjYWxsIHRoZSBfd3JpdGUoKSBjYWxsYmFjayBpbiB0aGUgc2FtZSB0aWNrLCBzbyB0aGF0IHdlIGRvbid0XG4gIC8vIGVuZCB1cCBpbiBhbiBvdmVybGFwcGVkIG9ud3JpdGUgc2l0dWF0aW9uLlxuICB0aGlzLmJ1ZmZlclByb2Nlc3NpbmcgPSBmYWxzZTtcblxuICAvLyB0aGUgY2FsbGJhY2sgdGhhdCdzIHBhc3NlZCB0byBfd3JpdGUoY2h1bmssY2IpXG4gIHRoaXMub253cml0ZSA9IGZ1bmN0aW9uIChlcikge1xuICAgIG9ud3JpdGUoc3RyZWFtLCBlcik7XG4gIH07XG5cbiAgLy8gdGhlIGNhbGxiYWNrIHRoYXQgdGhlIHVzZXIgc3VwcGxpZXMgdG8gd3JpdGUoY2h1bmssZW5jb2RpbmcsY2IpXG4gIHRoaXMud3JpdGVjYiA9IG51bGw7XG5cbiAgLy8gdGhlIGFtb3VudCB0aGF0IGlzIGJlaW5nIHdyaXR0ZW4gd2hlbiBfd3JpdGUgaXMgY2FsbGVkLlxuICB0aGlzLndyaXRlbGVuID0gMDtcbiAgdGhpcy5idWZmZXJlZFJlcXVlc3QgPSBudWxsO1xuICB0aGlzLmxhc3RCdWZmZXJlZFJlcXVlc3QgPSBudWxsO1xuXG4gIC8vIG51bWJlciBvZiBwZW5kaW5nIHVzZXItc3VwcGxpZWQgd3JpdGUgY2FsbGJhY2tzXG4gIC8vIHRoaXMgbXVzdCBiZSAwIGJlZm9yZSAnZmluaXNoJyBjYW4gYmUgZW1pdHRlZFxuICB0aGlzLnBlbmRpbmdjYiA9IDA7XG5cbiAgLy8gZW1pdCBwcmVmaW5pc2ggaWYgdGhlIG9ubHkgdGhpbmcgd2UncmUgd2FpdGluZyBmb3IgaXMgX3dyaXRlIGNic1xuICAvLyBUaGlzIGlzIHJlbGV2YW50IGZvciBzeW5jaHJvbm91cyBUcmFuc2Zvcm0gc3RyZWFtc1xuICB0aGlzLnByZWZpbmlzaGVkID0gZmFsc2U7XG5cbiAgLy8gVHJ1ZSBpZiB0aGUgZXJyb3Igd2FzIGFscmVhZHkgZW1pdHRlZCBhbmQgc2hvdWxkIG5vdCBiZSB0aHJvd24gYWdhaW5cbiAgdGhpcy5lcnJvckVtaXR0ZWQgPSBmYWxzZTtcblxuICAvLyBTaG91bGQgY2xvc2UgYmUgZW1pdHRlZCBvbiBkZXN0cm95LiBEZWZhdWx0cyB0byB0cnVlLlxuICB0aGlzLmVtaXRDbG9zZSA9IG9wdGlvbnMuZW1pdENsb3NlICE9PSBmYWxzZTtcblxuICAvLyBTaG91bGQgLmRlc3Ryb3koKSBiZSBjYWxsZWQgYWZ0ZXIgJ2ZpbmlzaCcgKGFuZCBwb3RlbnRpYWxseSAnZW5kJylcbiAgdGhpcy5hdXRvRGVzdHJveSA9ICEhb3B0aW9ucy5hdXRvRGVzdHJveTtcblxuICAvLyBjb3VudCBidWZmZXJlZCByZXF1ZXN0c1xuICB0aGlzLmJ1ZmZlcmVkUmVxdWVzdENvdW50ID0gMDtcblxuICAvLyBhbGxvY2F0ZSB0aGUgZmlyc3QgQ29ya2VkUmVxdWVzdCwgdGhlcmUgaXMgYWx3YXlzXG4gIC8vIG9uZSBhbGxvY2F0ZWQgYW5kIGZyZWUgdG8gdXNlLCBhbmQgd2UgbWFpbnRhaW4gYXQgbW9zdCB0d29cbiAgdGhpcy5jb3JrZWRSZXF1ZXN0c0ZyZWUgPSBuZXcgQ29ya2VkUmVxdWVzdCh0aGlzKTtcbn1cbldyaXRhYmxlU3RhdGUucHJvdG90eXBlLmdldEJ1ZmZlciA9IGZ1bmN0aW9uIGdldEJ1ZmZlcigpIHtcbiAgdmFyIGN1cnJlbnQgPSB0aGlzLmJ1ZmZlcmVkUmVxdWVzdDtcbiAgdmFyIG91dCA9IFtdO1xuICB3aGlsZSAoY3VycmVudCkge1xuICAgIG91dC5wdXNoKGN1cnJlbnQpO1xuICAgIGN1cnJlbnQgPSBjdXJyZW50Lm5leHQ7XG4gIH1cbiAgcmV0dXJuIG91dDtcbn07XG4oZnVuY3Rpb24gKCkge1xuICB0cnkge1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShXcml0YWJsZVN0YXRlLnByb3RvdHlwZSwgJ2J1ZmZlcicsIHtcbiAgICAgIGdldDogaW50ZXJuYWxVdGlsLmRlcHJlY2F0ZShmdW5jdGlvbiB3cml0YWJsZVN0YXRlQnVmZmVyR2V0dGVyKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5nZXRCdWZmZXIoKTtcbiAgICAgIH0sICdfd3JpdGFibGVTdGF0ZS5idWZmZXIgaXMgZGVwcmVjYXRlZC4gVXNlIF93cml0YWJsZVN0YXRlLmdldEJ1ZmZlciAnICsgJ2luc3RlYWQuJywgJ0RFUDAwMDMnKVxuICAgIH0pO1xuICB9IGNhdGNoIChfKSB7fVxufSkoKTtcblxuLy8gVGVzdCBfd3JpdGFibGVTdGF0ZSBmb3IgaW5oZXJpdGFuY2UgdG8gYWNjb3VudCBmb3IgRHVwbGV4IHN0cmVhbXMsXG4vLyB3aG9zZSBwcm90b3R5cGUgY2hhaW4gb25seSBwb2ludHMgdG8gUmVhZGFibGUuXG52YXIgcmVhbEhhc0luc3RhbmNlO1xuaWYgKHR5cGVvZiBTeW1ib2wgPT09ICdmdW5jdGlvbicgJiYgU3ltYm9sLmhhc0luc3RhbmNlICYmIHR5cGVvZiBGdW5jdGlvbi5wcm90b3R5cGVbU3ltYm9sLmhhc0luc3RhbmNlXSA9PT0gJ2Z1bmN0aW9uJykge1xuICByZWFsSGFzSW5zdGFuY2UgPSBGdW5jdGlvbi5wcm90b3R5cGVbU3ltYm9sLmhhc0luc3RhbmNlXTtcbiAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFdyaXRhYmxlLCBTeW1ib2wuaGFzSW5zdGFuY2UsIHtcbiAgICB2YWx1ZTogZnVuY3Rpb24gdmFsdWUob2JqZWN0KSB7XG4gICAgICBpZiAocmVhbEhhc0luc3RhbmNlLmNhbGwodGhpcywgb2JqZWN0KSkgcmV0dXJuIHRydWU7XG4gICAgICBpZiAodGhpcyAhPT0gV3JpdGFibGUpIHJldHVybiBmYWxzZTtcbiAgICAgIHJldHVybiBvYmplY3QgJiYgb2JqZWN0Ll93cml0YWJsZVN0YXRlIGluc3RhbmNlb2YgV3JpdGFibGVTdGF0ZTtcbiAgICB9XG4gIH0pO1xufSBlbHNlIHtcbiAgcmVhbEhhc0luc3RhbmNlID0gZnVuY3Rpb24gcmVhbEhhc0luc3RhbmNlKG9iamVjdCkge1xuICAgIHJldHVybiBvYmplY3QgaW5zdGFuY2VvZiB0aGlzO1xuICB9O1xufVxuZnVuY3Rpb24gV3JpdGFibGUob3B0aW9ucykge1xuICBEdXBsZXggPSBEdXBsZXggfHwgcmVxdWlyZSgnLi9fc3RyZWFtX2R1cGxleCcpO1xuXG4gIC8vIFdyaXRhYmxlIGN0b3IgaXMgYXBwbGllZCB0byBEdXBsZXhlcywgdG9vLlxuICAvLyBgcmVhbEhhc0luc3RhbmNlYCBpcyBuZWNlc3NhcnkgYmVjYXVzZSB1c2luZyBwbGFpbiBgaW5zdGFuY2VvZmBcbiAgLy8gd291bGQgcmV0dXJuIGZhbHNlLCBhcyBubyBgX3dyaXRhYmxlU3RhdGVgIHByb3BlcnR5IGlzIGF0dGFjaGVkLlxuXG4gIC8vIFRyeWluZyB0byB1c2UgdGhlIGN1c3RvbSBgaW5zdGFuY2VvZmAgZm9yIFdyaXRhYmxlIGhlcmUgd2lsbCBhbHNvIGJyZWFrIHRoZVxuICAvLyBOb2RlLmpzIExhenlUcmFuc2Zvcm0gaW1wbGVtZW50YXRpb24sIHdoaWNoIGhhcyBhIG5vbi10cml2aWFsIGdldHRlciBmb3JcbiAgLy8gYF93cml0YWJsZVN0YXRlYCB0aGF0IHdvdWxkIGxlYWQgdG8gaW5maW5pdGUgcmVjdXJzaW9uLlxuXG4gIC8vIENoZWNraW5nIGZvciBhIFN0cmVhbS5EdXBsZXggaW5zdGFuY2UgaXMgZmFzdGVyIGhlcmUgaW5zdGVhZCBvZiBpbnNpZGVcbiAgLy8gdGhlIFdyaXRhYmxlU3RhdGUgY29uc3RydWN0b3IsIGF0IGxlYXN0IHdpdGggVjggNi41XG4gIHZhciBpc0R1cGxleCA9IHRoaXMgaW5zdGFuY2VvZiBEdXBsZXg7XG4gIGlmICghaXNEdXBsZXggJiYgIXJlYWxIYXNJbnN0YW5jZS5jYWxsKFdyaXRhYmxlLCB0aGlzKSkgcmV0dXJuIG5ldyBXcml0YWJsZShvcHRpb25zKTtcbiAgdGhpcy5fd3JpdGFibGVTdGF0ZSA9IG5ldyBXcml0YWJsZVN0YXRlKG9wdGlvbnMsIHRoaXMsIGlzRHVwbGV4KTtcblxuICAvLyBsZWdhY3kuXG4gIHRoaXMud3JpdGFibGUgPSB0cnVlO1xuICBpZiAob3B0aW9ucykge1xuICAgIGlmICh0eXBlb2Ygb3B0aW9ucy53cml0ZSA9PT0gJ2Z1bmN0aW9uJykgdGhpcy5fd3JpdGUgPSBvcHRpb25zLndyaXRlO1xuICAgIGlmICh0eXBlb2Ygb3B0aW9ucy53cml0ZXYgPT09ICdmdW5jdGlvbicpIHRoaXMuX3dyaXRldiA9IG9wdGlvbnMud3JpdGV2O1xuICAgIGlmICh0eXBlb2Ygb3B0aW9ucy5kZXN0cm95ID09PSAnZnVuY3Rpb24nKSB0aGlzLl9kZXN0cm95ID0gb3B0aW9ucy5kZXN0cm95O1xuICAgIGlmICh0eXBlb2Ygb3B0aW9ucy5maW5hbCA9PT0gJ2Z1bmN0aW9uJykgdGhpcy5fZmluYWwgPSBvcHRpb25zLmZpbmFsO1xuICB9XG4gIFN0cmVhbS5jYWxsKHRoaXMpO1xufVxuXG4vLyBPdGhlcndpc2UgcGVvcGxlIGNhbiBwaXBlIFdyaXRhYmxlIHN0cmVhbXMsIHdoaWNoIGlzIGp1c3Qgd3JvbmcuXG5Xcml0YWJsZS5wcm90b3R5cGUucGlwZSA9IGZ1bmN0aW9uICgpIHtcbiAgZXJyb3JPckRlc3Ryb3kodGhpcywgbmV3IEVSUl9TVFJFQU1fQ0FOTk9UX1BJUEUoKSk7XG59O1xuZnVuY3Rpb24gd3JpdGVBZnRlckVuZChzdHJlYW0sIGNiKSB7XG4gIHZhciBlciA9IG5ldyBFUlJfU1RSRUFNX1dSSVRFX0FGVEVSX0VORCgpO1xuICAvLyBUT0RPOiBkZWZlciBlcnJvciBldmVudHMgY29uc2lzdGVudGx5IGV2ZXJ5d2hlcmUsIG5vdCBqdXN0IHRoZSBjYlxuICBlcnJvck9yRGVzdHJveShzdHJlYW0sIGVyKTtcbiAgcHJvY2Vzcy5uZXh0VGljayhjYiwgZXIpO1xufVxuXG4vLyBDaGVja3MgdGhhdCBhIHVzZXItc3VwcGxpZWQgY2h1bmsgaXMgdmFsaWQsIGVzcGVjaWFsbHkgZm9yIHRoZSBwYXJ0aWN1bGFyXG4vLyBtb2RlIHRoZSBzdHJlYW0gaXMgaW4uIEN1cnJlbnRseSB0aGlzIG1lYW5zIHRoYXQgYG51bGxgIGlzIG5ldmVyIGFjY2VwdGVkXG4vLyBhbmQgdW5kZWZpbmVkL25vbi1zdHJpbmcgdmFsdWVzIGFyZSBvbmx5IGFsbG93ZWQgaW4gb2JqZWN0IG1vZGUuXG5mdW5jdGlvbiB2YWxpZENodW5rKHN0cmVhbSwgc3RhdGUsIGNodW5rLCBjYikge1xuICB2YXIgZXI7XG4gIGlmIChjaHVuayA9PT0gbnVsbCkge1xuICAgIGVyID0gbmV3IEVSUl9TVFJFQU1fTlVMTF9WQUxVRVMoKTtcbiAgfSBlbHNlIGlmICh0eXBlb2YgY2h1bmsgIT09ICdzdHJpbmcnICYmICFzdGF0ZS5vYmplY3RNb2RlKSB7XG4gICAgZXIgPSBuZXcgRVJSX0lOVkFMSURfQVJHX1RZUEUoJ2NodW5rJywgWydzdHJpbmcnLCAnQnVmZmVyJ10sIGNodW5rKTtcbiAgfVxuICBpZiAoZXIpIHtcbiAgICBlcnJvck9yRGVzdHJveShzdHJlYW0sIGVyKTtcbiAgICBwcm9jZXNzLm5leHRUaWNrKGNiLCBlcik7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIHJldHVybiB0cnVlO1xufVxuV3JpdGFibGUucHJvdG90eXBlLndyaXRlID0gZnVuY3Rpb24gKGNodW5rLCBlbmNvZGluZywgY2IpIHtcbiAgdmFyIHN0YXRlID0gdGhpcy5fd3JpdGFibGVTdGF0ZTtcbiAgdmFyIHJldCA9IGZhbHNlO1xuICB2YXIgaXNCdWYgPSAhc3RhdGUub2JqZWN0TW9kZSAmJiBfaXNVaW50OEFycmF5KGNodW5rKTtcbiAgaWYgKGlzQnVmICYmICFCdWZmZXIuaXNCdWZmZXIoY2h1bmspKSB7XG4gICAgY2h1bmsgPSBfdWludDhBcnJheVRvQnVmZmVyKGNodW5rKTtcbiAgfVxuICBpZiAodHlwZW9mIGVuY29kaW5nID09PSAnZnVuY3Rpb24nKSB7XG4gICAgY2IgPSBlbmNvZGluZztcbiAgICBlbmNvZGluZyA9IG51bGw7XG4gIH1cbiAgaWYgKGlzQnVmKSBlbmNvZGluZyA9ICdidWZmZXInO2Vsc2UgaWYgKCFlbmNvZGluZykgZW5jb2RpbmcgPSBzdGF0ZS5kZWZhdWx0RW5jb2Rpbmc7XG4gIGlmICh0eXBlb2YgY2IgIT09ICdmdW5jdGlvbicpIGNiID0gbm9wO1xuICBpZiAoc3RhdGUuZW5kaW5nKSB3cml0ZUFmdGVyRW5kKHRoaXMsIGNiKTtlbHNlIGlmIChpc0J1ZiB8fCB2YWxpZENodW5rKHRoaXMsIHN0YXRlLCBjaHVuaywgY2IpKSB7XG4gICAgc3RhdGUucGVuZGluZ2NiKys7XG4gICAgcmV0ID0gd3JpdGVPckJ1ZmZlcih0aGlzLCBzdGF0ZSwgaXNCdWYsIGNodW5rLCBlbmNvZGluZywgY2IpO1xuICB9XG4gIHJldHVybiByZXQ7XG59O1xuV3JpdGFibGUucHJvdG90eXBlLmNvcmsgPSBmdW5jdGlvbiAoKSB7XG4gIHRoaXMuX3dyaXRhYmxlU3RhdGUuY29ya2VkKys7XG59O1xuV3JpdGFibGUucHJvdG90eXBlLnVuY29yayA9IGZ1bmN0aW9uICgpIHtcbiAgdmFyIHN0YXRlID0gdGhpcy5fd3JpdGFibGVTdGF0ZTtcbiAgaWYgKHN0YXRlLmNvcmtlZCkge1xuICAgIHN0YXRlLmNvcmtlZC0tO1xuICAgIGlmICghc3RhdGUud3JpdGluZyAmJiAhc3RhdGUuY29ya2VkICYmICFzdGF0ZS5idWZmZXJQcm9jZXNzaW5nICYmIHN0YXRlLmJ1ZmZlcmVkUmVxdWVzdCkgY2xlYXJCdWZmZXIodGhpcywgc3RhdGUpO1xuICB9XG59O1xuV3JpdGFibGUucHJvdG90eXBlLnNldERlZmF1bHRFbmNvZGluZyA9IGZ1bmN0aW9uIHNldERlZmF1bHRFbmNvZGluZyhlbmNvZGluZykge1xuICAvLyBub2RlOjpQYXJzZUVuY29kaW5nKCkgcmVxdWlyZXMgbG93ZXIgY2FzZS5cbiAgaWYgKHR5cGVvZiBlbmNvZGluZyA9PT0gJ3N0cmluZycpIGVuY29kaW5nID0gZW5jb2RpbmcudG9Mb3dlckNhc2UoKTtcbiAgaWYgKCEoWydoZXgnLCAndXRmOCcsICd1dGYtOCcsICdhc2NpaScsICdiaW5hcnknLCAnYmFzZTY0JywgJ3VjczInLCAndWNzLTInLCAndXRmMTZsZScsICd1dGYtMTZsZScsICdyYXcnXS5pbmRleE9mKChlbmNvZGluZyArICcnKS50b0xvd2VyQ2FzZSgpKSA+IC0xKSkgdGhyb3cgbmV3IEVSUl9VTktOT1dOX0VOQ09ESU5HKGVuY29kaW5nKTtcbiAgdGhpcy5fd3JpdGFibGVTdGF0ZS5kZWZhdWx0RW5jb2RpbmcgPSBlbmNvZGluZztcbiAgcmV0dXJuIHRoaXM7XG59O1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KFdyaXRhYmxlLnByb3RvdHlwZSwgJ3dyaXRhYmxlQnVmZmVyJywge1xuICAvLyBtYWtpbmcgaXQgZXhwbGljaXQgdGhpcyBwcm9wZXJ0eSBpcyBub3QgZW51bWVyYWJsZVxuICAvLyBiZWNhdXNlIG90aGVyd2lzZSBzb21lIHByb3RvdHlwZSBtYW5pcHVsYXRpb24gaW5cbiAgLy8gdXNlcmxhbmQgd2lsbCBmYWlsXG4gIGVudW1lcmFibGU6IGZhbHNlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gdGhpcy5fd3JpdGFibGVTdGF0ZSAmJiB0aGlzLl93cml0YWJsZVN0YXRlLmdldEJ1ZmZlcigpO1xuICB9XG59KTtcbmZ1bmN0aW9uIGRlY29kZUNodW5rKHN0YXRlLCBjaHVuaywgZW5jb2RpbmcpIHtcbiAgaWYgKCFzdGF0ZS5vYmplY3RNb2RlICYmIHN0YXRlLmRlY29kZVN0cmluZ3MgIT09IGZhbHNlICYmIHR5cGVvZiBjaHVuayA9PT0gJ3N0cmluZycpIHtcbiAgICBjaHVuayA9IEJ1ZmZlci5mcm9tKGNodW5rLCBlbmNvZGluZyk7XG4gIH1cbiAgcmV0dXJuIGNodW5rO1xufVxuT2JqZWN0LmRlZmluZVByb3BlcnR5KFdyaXRhYmxlLnByb3RvdHlwZSwgJ3dyaXRhYmxlSGlnaFdhdGVyTWFyaycsIHtcbiAgLy8gbWFraW5nIGl0IGV4cGxpY2l0IHRoaXMgcHJvcGVydHkgaXMgbm90IGVudW1lcmFibGVcbiAgLy8gYmVjYXVzZSBvdGhlcndpc2Ugc29tZSBwcm90b3R5cGUgbWFuaXB1bGF0aW9uIGluXG4gIC8vIHVzZXJsYW5kIHdpbGwgZmFpbFxuICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIHRoaXMuX3dyaXRhYmxlU3RhdGUuaGlnaFdhdGVyTWFyaztcbiAgfVxufSk7XG5cbi8vIGlmIHdlJ3JlIGFscmVhZHkgd3JpdGluZyBzb21ldGhpbmcsIHRoZW4ganVzdCBwdXQgdGhpc1xuLy8gaW4gdGhlIHF1ZXVlLCBhbmQgd2FpdCBvdXIgdHVybi4gIE90aGVyd2lzZSwgY2FsbCBfd3JpdGVcbi8vIElmIHdlIHJldHVybiBmYWxzZSwgdGhlbiB3ZSBuZWVkIGEgZHJhaW4gZXZlbnQsIHNvIHNldCB0aGF0IGZsYWcuXG5mdW5jdGlvbiB3cml0ZU9yQnVmZmVyKHN0cmVhbSwgc3RhdGUsIGlzQnVmLCBjaHVuaywgZW5jb2RpbmcsIGNiKSB7XG4gIGlmICghaXNCdWYpIHtcbiAgICB2YXIgbmV3Q2h1bmsgPSBkZWNvZGVDaHVuayhzdGF0ZSwgY2h1bmssIGVuY29kaW5nKTtcbiAgICBpZiAoY2h1bmsgIT09IG5ld0NodW5rKSB7XG4gICAgICBpc0J1ZiA9IHRydWU7XG4gICAgICBlbmNvZGluZyA9ICdidWZmZXInO1xuICAgICAgY2h1bmsgPSBuZXdDaHVuaztcbiAgICB9XG4gIH1cbiAgdmFyIGxlbiA9IHN0YXRlLm9iamVjdE1vZGUgPyAxIDogY2h1bmsubGVuZ3RoO1xuICBzdGF0ZS5sZW5ndGggKz0gbGVuO1xuICB2YXIgcmV0ID0gc3RhdGUubGVuZ3RoIDwgc3RhdGUuaGlnaFdhdGVyTWFyaztcbiAgLy8gd2UgbXVzdCBlbnN1cmUgdGhhdCBwcmV2aW91cyBuZWVkRHJhaW4gd2lsbCBub3QgYmUgcmVzZXQgdG8gZmFsc2UuXG4gIGlmICghcmV0KSBzdGF0ZS5uZWVkRHJhaW4gPSB0cnVlO1xuICBpZiAoc3RhdGUud3JpdGluZyB8fCBzdGF0ZS5jb3JrZWQpIHtcbiAgICB2YXIgbGFzdCA9IHN0YXRlLmxhc3RCdWZmZXJlZFJlcXVlc3Q7XG4gICAgc3RhdGUubGFzdEJ1ZmZlcmVkUmVxdWVzdCA9IHtcbiAgICAgIGNodW5rOiBjaHVuayxcbiAgICAgIGVuY29kaW5nOiBlbmNvZGluZyxcbiAgICAgIGlzQnVmOiBpc0J1ZixcbiAgICAgIGNhbGxiYWNrOiBjYixcbiAgICAgIG5leHQ6IG51bGxcbiAgICB9O1xuICAgIGlmIChsYXN0KSB7XG4gICAgICBsYXN0Lm5leHQgPSBzdGF0ZS5sYXN0QnVmZmVyZWRSZXF1ZXN0O1xuICAgIH0gZWxzZSB7XG4gICAgICBzdGF0ZS5idWZmZXJlZFJlcXVlc3QgPSBzdGF0ZS5sYXN0QnVmZmVyZWRSZXF1ZXN0O1xuICAgIH1cbiAgICBzdGF0ZS5idWZmZXJlZFJlcXVlc3RDb3VudCArPSAxO1xuICB9IGVsc2Uge1xuICAgIGRvV3JpdGUoc3RyZWFtLCBzdGF0ZSwgZmFsc2UsIGxlbiwgY2h1bmssIGVuY29kaW5nLCBjYik7XG4gIH1cbiAgcmV0dXJuIHJldDtcbn1cbmZ1bmN0aW9uIGRvV3JpdGUoc3RyZWFtLCBzdGF0ZSwgd3JpdGV2LCBsZW4sIGNodW5rLCBlbmNvZGluZywgY2IpIHtcbiAgc3RhdGUud3JpdGVsZW4gPSBsZW47XG4gIHN0YXRlLndyaXRlY2IgPSBjYjtcbiAgc3RhdGUud3JpdGluZyA9IHRydWU7XG4gIHN0YXRlLnN5bmMgPSB0cnVlO1xuICBpZiAoc3RhdGUuZGVzdHJveWVkKSBzdGF0ZS5vbndyaXRlKG5ldyBFUlJfU1RSRUFNX0RFU1RST1lFRCgnd3JpdGUnKSk7ZWxzZSBpZiAod3JpdGV2KSBzdHJlYW0uX3dyaXRldihjaHVuaywgc3RhdGUub253cml0ZSk7ZWxzZSBzdHJlYW0uX3dyaXRlKGNodW5rLCBlbmNvZGluZywgc3RhdGUub253cml0ZSk7XG4gIHN0YXRlLnN5bmMgPSBmYWxzZTtcbn1cbmZ1bmN0aW9uIG9ud3JpdGVFcnJvcihzdHJlYW0sIHN0YXRlLCBzeW5jLCBlciwgY2IpIHtcbiAgLS1zdGF0ZS5wZW5kaW5nY2I7XG4gIGlmIChzeW5jKSB7XG4gICAgLy8gZGVmZXIgdGhlIGNhbGxiYWNrIGlmIHdlIGFyZSBiZWluZyBjYWxsZWQgc3luY2hyb25vdXNseVxuICAgIC8vIHRvIGF2b2lkIHBpbGluZyB1cCB0aGluZ3Mgb24gdGhlIHN0YWNrXG4gICAgcHJvY2Vzcy5uZXh0VGljayhjYiwgZXIpO1xuICAgIC8vIHRoaXMgY2FuIGVtaXQgZmluaXNoLCBhbmQgaXQgd2lsbCBhbHdheXMgaGFwcGVuXG4gICAgLy8gYWZ0ZXIgZXJyb3JcbiAgICBwcm9jZXNzLm5leHRUaWNrKGZpbmlzaE1heWJlLCBzdHJlYW0sIHN0YXRlKTtcbiAgICBzdHJlYW0uX3dyaXRhYmxlU3RhdGUuZXJyb3JFbWl0dGVkID0gdHJ1ZTtcbiAgICBlcnJvck9yRGVzdHJveShzdHJlYW0sIGVyKTtcbiAgfSBlbHNlIHtcbiAgICAvLyB0aGUgY2FsbGVyIGV4cGVjdCB0aGlzIHRvIGhhcHBlbiBiZWZvcmUgaWZcbiAgICAvLyBpdCBpcyBhc3luY1xuICAgIGNiKGVyKTtcbiAgICBzdHJlYW0uX3dyaXRhYmxlU3RhdGUuZXJyb3JFbWl0dGVkID0gdHJ1ZTtcbiAgICBlcnJvck9yRGVzdHJveShzdHJlYW0sIGVyKTtcbiAgICAvLyB0aGlzIGNhbiBlbWl0IGZpbmlzaCwgYnV0IGZpbmlzaCBtdXN0XG4gICAgLy8gYWx3YXlzIGZvbGxvdyBlcnJvclxuICAgIGZpbmlzaE1heWJlKHN0cmVhbSwgc3RhdGUpO1xuICB9XG59XG5mdW5jdGlvbiBvbndyaXRlU3RhdGVVcGRhdGUoc3RhdGUpIHtcbiAgc3RhdGUud3JpdGluZyA9IGZhbHNlO1xuICBzdGF0ZS53cml0ZWNiID0gbnVsbDtcbiAgc3RhdGUubGVuZ3RoIC09IHN0YXRlLndyaXRlbGVuO1xuICBzdGF0ZS53cml0ZWxlbiA9IDA7XG59XG5mdW5jdGlvbiBvbndyaXRlKHN0cmVhbSwgZXIpIHtcbiAgdmFyIHN0YXRlID0gc3RyZWFtLl93cml0YWJsZVN0YXRlO1xuICB2YXIgc3luYyA9IHN0YXRlLnN5bmM7XG4gIHZhciBjYiA9IHN0YXRlLndyaXRlY2I7XG4gIGlmICh0eXBlb2YgY2IgIT09ICdmdW5jdGlvbicpIHRocm93IG5ldyBFUlJfTVVMVElQTEVfQ0FMTEJBQ0soKTtcbiAgb253cml0ZVN0YXRlVXBkYXRlKHN0YXRlKTtcbiAgaWYgKGVyKSBvbndyaXRlRXJyb3Ioc3RyZWFtLCBzdGF0ZSwgc3luYywgZXIsIGNiKTtlbHNlIHtcbiAgICAvLyBDaGVjayBpZiB3ZSdyZSBhY3R1YWxseSByZWFkeSB0byBmaW5pc2gsIGJ1dCBkb24ndCBlbWl0IHlldFxuICAgIHZhciBmaW5pc2hlZCA9IG5lZWRGaW5pc2goc3RhdGUpIHx8IHN0cmVhbS5kZXN0cm95ZWQ7XG4gICAgaWYgKCFmaW5pc2hlZCAmJiAhc3RhdGUuY29ya2VkICYmICFzdGF0ZS5idWZmZXJQcm9jZXNzaW5nICYmIHN0YXRlLmJ1ZmZlcmVkUmVxdWVzdCkge1xuICAgICAgY2xlYXJCdWZmZXIoc3RyZWFtLCBzdGF0ZSk7XG4gICAgfVxuICAgIGlmIChzeW5jKSB7XG4gICAgICBwcm9jZXNzLm5leHRUaWNrKGFmdGVyV3JpdGUsIHN0cmVhbSwgc3RhdGUsIGZpbmlzaGVkLCBjYik7XG4gICAgfSBlbHNlIHtcbiAgICAgIGFmdGVyV3JpdGUoc3RyZWFtLCBzdGF0ZSwgZmluaXNoZWQsIGNiKTtcbiAgICB9XG4gIH1cbn1cbmZ1bmN0aW9uIGFmdGVyV3JpdGUoc3RyZWFtLCBzdGF0ZSwgZmluaXNoZWQsIGNiKSB7XG4gIGlmICghZmluaXNoZWQpIG9ud3JpdGVEcmFpbihzdHJlYW0sIHN0YXRlKTtcbiAgc3RhdGUucGVuZGluZ2NiLS07XG4gIGNiKCk7XG4gIGZpbmlzaE1heWJlKHN0cmVhbSwgc3RhdGUpO1xufVxuXG4vLyBNdXN0IGZvcmNlIGNhbGxiYWNrIHRvIGJlIGNhbGxlZCBvbiBuZXh0VGljaywgc28gdGhhdCB3ZSBkb24ndFxuLy8gZW1pdCAnZHJhaW4nIGJlZm9yZSB0aGUgd3JpdGUoKSBjb25zdW1lciBnZXRzIHRoZSAnZmFsc2UnIHJldHVyblxuLy8gdmFsdWUsIGFuZCBoYXMgYSBjaGFuY2UgdG8gYXR0YWNoIGEgJ2RyYWluJyBsaXN0ZW5lci5cbmZ1bmN0aW9uIG9ud3JpdGVEcmFpbihzdHJlYW0sIHN0YXRlKSB7XG4gIGlmIChzdGF0ZS5sZW5ndGggPT09IDAgJiYgc3RhdGUubmVlZERyYWluKSB7XG4gICAgc3RhdGUubmVlZERyYWluID0gZmFsc2U7XG4gICAgc3RyZWFtLmVtaXQoJ2RyYWluJyk7XG4gIH1cbn1cblxuLy8gaWYgdGhlcmUncyBzb21ldGhpbmcgaW4gdGhlIGJ1ZmZlciB3YWl0aW5nLCB0aGVuIHByb2Nlc3MgaXRcbmZ1bmN0aW9uIGNsZWFyQnVmZmVyKHN0cmVhbSwgc3RhdGUpIHtcbiAgc3RhdGUuYnVmZmVyUHJvY2Vzc2luZyA9IHRydWU7XG4gIHZhciBlbnRyeSA9IHN0YXRlLmJ1ZmZlcmVkUmVxdWVzdDtcbiAgaWYgKHN0cmVhbS5fd3JpdGV2ICYmIGVudHJ5ICYmIGVudHJ5Lm5leHQpIHtcbiAgICAvLyBGYXN0IGNhc2UsIHdyaXRlIGV2ZXJ5dGhpbmcgdXNpbmcgX3dyaXRldigpXG4gICAgdmFyIGwgPSBzdGF0ZS5idWZmZXJlZFJlcXVlc3RDb3VudDtcbiAgICB2YXIgYnVmZmVyID0gbmV3IEFycmF5KGwpO1xuICAgIHZhciBob2xkZXIgPSBzdGF0ZS5jb3JrZWRSZXF1ZXN0c0ZyZWU7XG4gICAgaG9sZGVyLmVudHJ5ID0gZW50cnk7XG4gICAgdmFyIGNvdW50ID0gMDtcbiAgICB2YXIgYWxsQnVmZmVycyA9IHRydWU7XG4gICAgd2hpbGUgKGVudHJ5KSB7XG4gICAgICBidWZmZXJbY291bnRdID0gZW50cnk7XG4gICAgICBpZiAoIWVudHJ5LmlzQnVmKSBhbGxCdWZmZXJzID0gZmFsc2U7XG4gICAgICBlbnRyeSA9IGVudHJ5Lm5leHQ7XG4gICAgICBjb3VudCArPSAxO1xuICAgIH1cbiAgICBidWZmZXIuYWxsQnVmZmVycyA9IGFsbEJ1ZmZlcnM7XG4gICAgZG9Xcml0ZShzdHJlYW0sIHN0YXRlLCB0cnVlLCBzdGF0ZS5sZW5ndGgsIGJ1ZmZlciwgJycsIGhvbGRlci5maW5pc2gpO1xuXG4gICAgLy8gZG9Xcml0ZSBpcyBhbG1vc3QgYWx3YXlzIGFzeW5jLCBkZWZlciB0aGVzZSB0byBzYXZlIGEgYml0IG9mIHRpbWVcbiAgICAvLyBhcyB0aGUgaG90IHBhdGggZW5kcyB3aXRoIGRvV3JpdGVcbiAgICBzdGF0ZS5wZW5kaW5nY2IrKztcbiAgICBzdGF0ZS5sYXN0QnVmZmVyZWRSZXF1ZXN0ID0gbnVsbDtcbiAgICBpZiAoaG9sZGVyLm5leHQpIHtcbiAgICAgIHN0YXRlLmNvcmtlZFJlcXVlc3RzRnJlZSA9IGhvbGRlci5uZXh0O1xuICAgICAgaG9sZGVyLm5leHQgPSBudWxsO1xuICAgIH0gZWxzZSB7XG4gICAgICBzdGF0ZS5jb3JrZWRSZXF1ZXN0c0ZyZWUgPSBuZXcgQ29ya2VkUmVxdWVzdChzdGF0ZSk7XG4gICAgfVxuICAgIHN0YXRlLmJ1ZmZlcmVkUmVxdWVzdENvdW50ID0gMDtcbiAgfSBlbHNlIHtcbiAgICAvLyBTbG93IGNhc2UsIHdyaXRlIGNodW5rcyBvbmUtYnktb25lXG4gICAgd2hpbGUgKGVudHJ5KSB7XG4gICAgICB2YXIgY2h1bmsgPSBlbnRyeS5jaHVuaztcbiAgICAgIHZhciBlbmNvZGluZyA9IGVudHJ5LmVuY29kaW5nO1xuICAgICAgdmFyIGNiID0gZW50cnkuY2FsbGJhY2s7XG4gICAgICB2YXIgbGVuID0gc3RhdGUub2JqZWN0TW9kZSA/IDEgOiBjaHVuay5sZW5ndGg7XG4gICAgICBkb1dyaXRlKHN0cmVhbSwgc3RhdGUsIGZhbHNlLCBsZW4sIGNodW5rLCBlbmNvZGluZywgY2IpO1xuICAgICAgZW50cnkgPSBlbnRyeS5uZXh0O1xuICAgICAgc3RhdGUuYnVmZmVyZWRSZXF1ZXN0Q291bnQtLTtcbiAgICAgIC8vIGlmIHdlIGRpZG4ndCBjYWxsIHRoZSBvbndyaXRlIGltbWVkaWF0ZWx5LCB0aGVuXG4gICAgICAvLyBpdCBtZWFucyB0aGF0IHdlIG5lZWQgdG8gd2FpdCB1bnRpbCBpdCBkb2VzLlxuICAgICAgLy8gYWxzbywgdGhhdCBtZWFucyB0aGF0IHRoZSBjaHVuayBhbmQgY2IgYXJlIGN1cnJlbnRseVxuICAgICAgLy8gYmVpbmcgcHJvY2Vzc2VkLCBzbyBtb3ZlIHRoZSBidWZmZXIgY291bnRlciBwYXN0IHRoZW0uXG4gICAgICBpZiAoc3RhdGUud3JpdGluZykge1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKGVudHJ5ID09PSBudWxsKSBzdGF0ZS5sYXN0QnVmZmVyZWRSZXF1ZXN0ID0gbnVsbDtcbiAgfVxuICBzdGF0ZS5idWZmZXJlZFJlcXVlc3QgPSBlbnRyeTtcbiAgc3RhdGUuYnVmZmVyUHJvY2Vzc2luZyA9IGZhbHNlO1xufVxuV3JpdGFibGUucHJvdG90eXBlLl93cml0ZSA9IGZ1bmN0aW9uIChjaHVuaywgZW5jb2RpbmcsIGNiKSB7XG4gIGNiKG5ldyBFUlJfTUVUSE9EX05PVF9JTVBMRU1FTlRFRCgnX3dyaXRlKCknKSk7XG59O1xuV3JpdGFibGUucHJvdG90eXBlLl93cml0ZXYgPSBudWxsO1xuV3JpdGFibGUucHJvdG90eXBlLmVuZCA9IGZ1bmN0aW9uIChjaHVuaywgZW5jb2RpbmcsIGNiKSB7XG4gIHZhciBzdGF0ZSA9IHRoaXMuX3dyaXRhYmxlU3RhdGU7XG4gIGlmICh0eXBlb2YgY2h1bmsgPT09ICdmdW5jdGlvbicpIHtcbiAgICBjYiA9IGNodW5rO1xuICAgIGNodW5rID0gbnVsbDtcbiAgICBlbmNvZGluZyA9IG51bGw7XG4gIH0gZWxzZSBpZiAodHlwZW9mIGVuY29kaW5nID09PSAnZnVuY3Rpb24nKSB7XG4gICAgY2IgPSBlbmNvZGluZztcbiAgICBlbmNvZGluZyA9IG51bGw7XG4gIH1cbiAgaWYgKGNodW5rICE9PSBudWxsICYmIGNodW5rICE9PSB1bmRlZmluZWQpIHRoaXMud3JpdGUoY2h1bmssIGVuY29kaW5nKTtcblxuICAvLyAuZW5kKCkgZnVsbHkgdW5jb3Jrc1xuICBpZiAoc3RhdGUuY29ya2VkKSB7XG4gICAgc3RhdGUuY29ya2VkID0gMTtcbiAgICB0aGlzLnVuY29yaygpO1xuICB9XG5cbiAgLy8gaWdub3JlIHVubmVjZXNzYXJ5IGVuZCgpIGNhbGxzLlxuICBpZiAoIXN0YXRlLmVuZGluZykgZW5kV3JpdGFibGUodGhpcywgc3RhdGUsIGNiKTtcbiAgcmV0dXJuIHRoaXM7XG59O1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KFdyaXRhYmxlLnByb3RvdHlwZSwgJ3dyaXRhYmxlTGVuZ3RoJywge1xuICAvLyBtYWtpbmcgaXQgZXhwbGljaXQgdGhpcyBwcm9wZXJ0eSBpcyBub3QgZW51bWVyYWJsZVxuICAvLyBiZWNhdXNlIG90aGVyd2lzZSBzb21lIHByb3RvdHlwZSBtYW5pcHVsYXRpb24gaW5cbiAgLy8gdXNlcmxhbmQgd2lsbCBmYWlsXG4gIGVudW1lcmFibGU6IGZhbHNlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gdGhpcy5fd3JpdGFibGVTdGF0ZS5sZW5ndGg7XG4gIH1cbn0pO1xuZnVuY3Rpb24gbmVlZEZpbmlzaChzdGF0ZSkge1xuICByZXR1cm4gc3RhdGUuZW5kaW5nICYmIHN0YXRlLmxlbmd0aCA9PT0gMCAmJiBzdGF0ZS5idWZmZXJlZFJlcXVlc3QgPT09IG51bGwgJiYgIXN0YXRlLmZpbmlzaGVkICYmICFzdGF0ZS53cml0aW5nO1xufVxuZnVuY3Rpb24gY2FsbEZpbmFsKHN0cmVhbSwgc3RhdGUpIHtcbiAgc3RyZWFtLl9maW5hbChmdW5jdGlvbiAoZXJyKSB7XG4gICAgc3RhdGUucGVuZGluZ2NiLS07XG4gICAgaWYgKGVycikge1xuICAgICAgZXJyb3JPckRlc3Ryb3koc3RyZWFtLCBlcnIpO1xuICAgIH1cbiAgICBzdGF0ZS5wcmVmaW5pc2hlZCA9IHRydWU7XG4gICAgc3RyZWFtLmVtaXQoJ3ByZWZpbmlzaCcpO1xuICAgIGZpbmlzaE1heWJlKHN0cmVhbSwgc3RhdGUpO1xuICB9KTtcbn1cbmZ1bmN0aW9uIHByZWZpbmlzaChzdHJlYW0sIHN0YXRlKSB7XG4gIGlmICghc3RhdGUucHJlZmluaXNoZWQgJiYgIXN0YXRlLmZpbmFsQ2FsbGVkKSB7XG4gICAgaWYgKHR5cGVvZiBzdHJlYW0uX2ZpbmFsID09PSAnZnVuY3Rpb24nICYmICFzdGF0ZS5kZXN0cm95ZWQpIHtcbiAgICAgIHN0YXRlLnBlbmRpbmdjYisrO1xuICAgICAgc3RhdGUuZmluYWxDYWxsZWQgPSB0cnVlO1xuICAgICAgcHJvY2Vzcy5uZXh0VGljayhjYWxsRmluYWwsIHN0cmVhbSwgc3RhdGUpO1xuICAgIH0gZWxzZSB7XG4gICAgICBzdGF0ZS5wcmVmaW5pc2hlZCA9IHRydWU7XG4gICAgICBzdHJlYW0uZW1pdCgncHJlZmluaXNoJyk7XG4gICAgfVxuICB9XG59XG5mdW5jdGlvbiBmaW5pc2hNYXliZShzdHJlYW0sIHN0YXRlKSB7XG4gIHZhciBuZWVkID0gbmVlZEZpbmlzaChzdGF0ZSk7XG4gIGlmIChuZWVkKSB7XG4gICAgcHJlZmluaXNoKHN0cmVhbSwgc3RhdGUpO1xuICAgIGlmIChzdGF0ZS5wZW5kaW5nY2IgPT09IDApIHtcbiAgICAgIHN0YXRlLmZpbmlzaGVkID0gdHJ1ZTtcbiAgICAgIHN0cmVhbS5lbWl0KCdmaW5pc2gnKTtcbiAgICAgIGlmIChzdGF0ZS5hdXRvRGVzdHJveSkge1xuICAgICAgICAvLyBJbiBjYXNlIG9mIGR1cGxleCBzdHJlYW1zIHdlIG5lZWQgYSB3YXkgdG8gZGV0ZWN0XG4gICAgICAgIC8vIGlmIHRoZSByZWFkYWJsZSBzaWRlIGlzIHJlYWR5IGZvciBhdXRvRGVzdHJveSBhcyB3ZWxsXG4gICAgICAgIHZhciByU3RhdGUgPSBzdHJlYW0uX3JlYWRhYmxlU3RhdGU7XG4gICAgICAgIGlmICghclN0YXRlIHx8IHJTdGF0ZS5hdXRvRGVzdHJveSAmJiByU3RhdGUuZW5kRW1pdHRlZCkge1xuICAgICAgICAgIHN0cmVhbS5kZXN0cm95KCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgcmV0dXJuIG5lZWQ7XG59XG5mdW5jdGlvbiBlbmRXcml0YWJsZShzdHJlYW0sIHN0YXRlLCBjYikge1xuICBzdGF0ZS5lbmRpbmcgPSB0cnVlO1xuICBmaW5pc2hNYXliZShzdHJlYW0sIHN0YXRlKTtcbiAgaWYgKGNiKSB7XG4gICAgaWYgKHN0YXRlLmZpbmlzaGVkKSBwcm9jZXNzLm5leHRUaWNrKGNiKTtlbHNlIHN0cmVhbS5vbmNlKCdmaW5pc2gnLCBjYik7XG4gIH1cbiAgc3RhdGUuZW5kZWQgPSB0cnVlO1xuICBzdHJlYW0ud3JpdGFibGUgPSBmYWxzZTtcbn1cbmZ1bmN0aW9uIG9uQ29ya2VkRmluaXNoKGNvcmtSZXEsIHN0YXRlLCBlcnIpIHtcbiAgdmFyIGVudHJ5ID0gY29ya1JlcS5lbnRyeTtcbiAgY29ya1JlcS5lbnRyeSA9IG51bGw7XG4gIHdoaWxlIChlbnRyeSkge1xuICAgIHZhciBjYiA9IGVudHJ5LmNhbGxiYWNrO1xuICAgIHN0YXRlLnBlbmRpbmdjYi0tO1xuICAgIGNiKGVycik7XG4gICAgZW50cnkgPSBlbnRyeS5uZXh0O1xuICB9XG5cbiAgLy8gcmV1c2UgdGhlIGZyZWUgY29ya1JlcS5cbiAgc3RhdGUuY29ya2VkUmVxdWVzdHNGcmVlLm5leHQgPSBjb3JrUmVxO1xufVxuT2JqZWN0LmRlZmluZVByb3BlcnR5KFdyaXRhYmxlLnByb3RvdHlwZSwgJ2Rlc3Ryb3llZCcsIHtcbiAgLy8gbWFraW5nIGl0IGV4cGxpY2l0IHRoaXMgcHJvcGVydHkgaXMgbm90IGVudW1lcmFibGVcbiAgLy8gYmVjYXVzZSBvdGhlcndpc2Ugc29tZSBwcm90b3R5cGUgbWFuaXB1bGF0aW9uIGluXG4gIC8vIHVzZXJsYW5kIHdpbGwgZmFpbFxuICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgaWYgKHRoaXMuX3dyaXRhYmxlU3RhdGUgPT09IHVuZGVmaW5lZCkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5fd3JpdGFibGVTdGF0ZS5kZXN0cm95ZWQ7XG4gIH0sXG4gIHNldDogZnVuY3Rpb24gc2V0KHZhbHVlKSB7XG4gICAgLy8gd2UgaWdub3JlIHRoZSB2YWx1ZSBpZiB0aGUgc3RyZWFtXG4gICAgLy8gaGFzIG5vdCBiZWVuIGluaXRpYWxpemVkIHlldFxuICAgIGlmICghdGhpcy5fd3JpdGFibGVTdGF0ZSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIGJhY2t3YXJkIGNvbXBhdGliaWxpdHksIHRoZSB1c2VyIGlzIGV4cGxpY2l0bHlcbiAgICAvLyBtYW5hZ2luZyBkZXN0cm95ZWRcbiAgICB0aGlzLl93cml0YWJsZVN0YXRlLmRlc3Ryb3llZCA9IHZhbHVlO1xuICB9XG59KTtcbldyaXRhYmxlLnByb3RvdHlwZS5kZXN0cm95ID0gZGVzdHJveUltcGwuZGVzdHJveTtcbldyaXRhYmxlLnByb3RvdHlwZS5fdW5kZXN0cm95ID0gZGVzdHJveUltcGwudW5kZXN0cm95O1xuV3JpdGFibGUucHJvdG90eXBlLl9kZXN0cm95ID0gZnVuY3Rpb24gKGVyciwgY2IpIHtcbiAgY2IoZXJyKTtcbn07Il0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///16708\n")},17160:function(__unused_webpack_module,__unused_webpack_exports,__webpack_require__){eval("//! moment.js locale configuration\n//! locale : Armenian [hy-am]\n//! author : Armendarabyan : https://github.com/armendarabyan\n\n;(function (global, factory) {\n true ? factory(__webpack_require__(95093)) :\n 0\n}(this, (function (moment) { 'use strict';\n\n //! moment.js locale configuration\n\n var hyAm = moment.defineLocale('hy-am', {\n months: {\n format: 'հունվարի_փետրվարի_մարտի_ապրիլի_մայիսի_հունիսի_հուլիսի_օգոստոսի_սեպտեմբերի_հոկտեմբերի_նոյեմբերի_դեկտեմբերի'.split(\n '_'\n ),\n standalone:\n 'հունվար_փետրվար_մարտ_ապրիլ_մայիս_հունիս_հուլիս_օգոստոս_սեպտեմբեր_հոկտեմբեր_նոյեմբեր_դեկտեմբեր'.split(\n '_'\n ),\n },\n monthsShort: 'հնվ_փտր_մրտ_ապր_մյս_հնս_հլս_օգս_սպտ_հկտ_նմբ_դկտ'.split('_'),\n weekdays:\n 'կիրակի_երկուշաբթի_երեքշաբթի_չորեքշաբթի_հինգշաբթի_ուրբաթ_շաբաթ'.split(\n '_'\n ),\n weekdaysShort: 'կրկ_երկ_երք_չրք_հնգ_ուրբ_շբթ'.split('_'),\n weekdaysMin: 'կրկ_երկ_երք_չրք_հնգ_ուրբ_շբթ'.split('_'),\n longDateFormat: {\n LT: 'HH:mm',\n LTS: 'HH:mm:ss',\n L: 'DD.MM.YYYY',\n LL: 'D MMMM YYYY թ.',\n LLL: 'D MMMM YYYY թ., HH:mm',\n LLLL: 'dddd, D MMMM YYYY թ., HH:mm',\n },\n calendar: {\n sameDay: '[այսօր] LT',\n nextDay: '[վաղը] LT',\n lastDay: '[երեկ] LT',\n nextWeek: function () {\n return 'dddd [օրը ժամը] LT';\n },\n lastWeek: function () {\n return '[անցած] dddd [օրը ժամը] LT';\n },\n sameElse: 'L',\n },\n relativeTime: {\n future: '%s հետո',\n past: '%s առաջ',\n s: 'մի քանի վայրկյան',\n ss: '%d վայրկյան',\n m: 'րոպե',\n mm: '%d րոպե',\n h: 'ժամ',\n hh: '%d ժամ',\n d: 'օր',\n dd: '%d օր',\n M: 'ամիս',\n MM: '%d ամիս',\n y: 'տարի',\n yy: '%d տարի',\n },\n meridiemParse: /գիշերվա|առավոտվա|ցերեկվա|երեկոյան/,\n isPM: function (input) {\n return /^(ցերեկվա|երեկոյան)$/.test(input);\n },\n meridiem: function (hour) {\n if (hour < 4) {\n return 'գիշերվա';\n } else if (hour < 12) {\n return 'առավոտվա';\n } else if (hour < 17) {\n return 'ցերեկվա';\n } else {\n return 'երեկոյան';\n }\n },\n dayOfMonthOrdinalParse: /\\d{1,2}|\\d{1,2}-(ին|րդ)/,\n ordinal: function (number, period) {\n switch (period) {\n case 'DDD':\n case 'w':\n case 'W':\n case 'DDDo':\n if (number === 1) {\n return number + '-ին';\n }\n return number + '-րդ';\n default:\n return number;\n }\n },\n week: {\n dow: 1, // Monday is the first day of the week.\n doy: 7, // The week that contains Jan 7th is the first week of the year.\n },\n });\n\n return hyAm;\n\n})));\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMTcxNjAuanMiLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9pdGctbmV4dGdlbi1mcm9udGVuZC8uL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL2h5LWFtLmpzP2Q2YjYiXSwic291cmNlc0NvbnRlbnQiOlsiLy8hIG1vbWVudC5qcyBsb2NhbGUgY29uZmlndXJhdGlvblxuLy8hIGxvY2FsZSA6IEFybWVuaWFuIFtoeS1hbV1cbi8vISBhdXRob3IgOiBBcm1lbmRhcmFieWFuIDogaHR0cHM6Ly9naXRodWIuY29tL2FybWVuZGFyYWJ5YW5cblxuOyhmdW5jdGlvbiAoZ2xvYmFsLCBmYWN0b3J5KSB7XG4gICB0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcgJiYgdHlwZW9mIG1vZHVsZSAhPT0gJ3VuZGVmaW5lZCdcbiAgICAgICAmJiB0eXBlb2YgcmVxdWlyZSA9PT0gJ2Z1bmN0aW9uJyA/IGZhY3RvcnkocmVxdWlyZSgnLi4vbW9tZW50JykpIDpcbiAgIHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgZGVmaW5lLmFtZCA/IGRlZmluZShbJy4uL21vbWVudCddLCBmYWN0b3J5KSA6XG4gICBmYWN0b3J5KGdsb2JhbC5tb21lbnQpXG59KHRoaXMsIChmdW5jdGlvbiAobW9tZW50KSB7ICd1c2Ugc3RyaWN0JztcblxuICAgIC8vISBtb21lbnQuanMgbG9jYWxlIGNvbmZpZ3VyYXRpb25cblxuICAgIHZhciBoeUFtID0gbW9tZW50LmRlZmluZUxvY2FsZSgnaHktYW0nLCB7XG4gICAgICAgIG1vbnRoczoge1xuICAgICAgICAgICAgZm9ybWF0OiAn1bDVuNaC1bbVvtWh1oDVq1/Wg9Wl1b/WgNW+1aHWgNWrX9W01aHWgNW/1atf1aHVutaA1avVrNWrX9W01aHVtdWr1b3Vq1/VsNW41oLVttWr1b3Vq1/VsNW41oLVrNWr1b3Vq1/WhdWj1bjVvdW/1bjVvdWrX9W91aXVutW/1aXVtNWi1aXWgNWrX9Ww1bjVr9W/1aXVtNWi1aXWgNWrX9W21bjVtdWl1bTVotWl1oDVq1/VpNWl1a/Vv9Wl1bTVotWl1oDVqycuc3BsaXQoXG4gICAgICAgICAgICAgICAgJ18nXG4gICAgICAgICAgICApLFxuICAgICAgICAgICAgc3RhbmRhbG9uZTpcbiAgICAgICAgICAgICAgICAn1bDVuNaC1bbVvtWh1oBf1oPVpdW/1oDVvtWh1oBf1bTVodaA1b9f1aHVutaA1avVrF/VtNWh1bXVq9W9X9Ww1bjWgtW21avVvV/VsNW41oLVrNWr1b1f1oXVo9W41b3Vv9W41b1f1b3VpdW61b/VpdW01aLVpdaAX9Ww1bjVr9W/1aXVtNWi1aXWgF/VttW41bXVpdW01aLVpdaAX9Wk1aXVr9W/1aXVtNWi1aXWgCcuc3BsaXQoXG4gICAgICAgICAgICAgICAgICAgICdfJ1xuICAgICAgICAgICAgICAgICksXG4gICAgICAgIH0sXG4gICAgICAgIG1vbnRoc1Nob3J0OiAn1bDVttW+X9aD1b/WgF/VtNaA1b9f1aHVutaAX9W01bXVvV/VsNW21b1f1bDVrNW9X9aF1aPVvV/VvdW61b9f1bDVr9W/X9W21bTVol/VpNWv1b8nLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzOlxuICAgICAgICAgICAgJ9Wv1avWgNWh1a/Vq1/VpdaA1a/VuNaC1bfVodWi1anVq1/VpdaA1aXWhNW31aHVotWp1atf1bnVuNaA1aXWhNW31aHVotWp1atf1bDVq9W21aPVt9Wh1aLVqdWrX9W41oLWgNWi1aHVqV/Vt9Wh1aLVodWpJy5zcGxpdChcbiAgICAgICAgICAgICAgICAnXydcbiAgICAgICAgICAgICksXG4gICAgICAgIHdlZWtkYXlzU2hvcnQ6ICfVr9aA1a9f1aXWgNWvX9Wl1oDWhF/VudaA1oRf1bDVttWjX9W41oLWgNWiX9W31aLVqScuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXNNaW46ICfVr9aA1a9f1aXWgNWvX9Wl1oDWhF/VudaA1oRf1bDVttWjX9W41oLWgNWiX9W31aLVqScuc3BsaXQoJ18nKSxcbiAgICAgICAgbG9uZ0RhdGVGb3JtYXQ6IHtcbiAgICAgICAgICAgIExUOiAnSEg6bW0nLFxuICAgICAgICAgICAgTFRTOiAnSEg6bW06c3MnLFxuICAgICAgICAgICAgTDogJ0RELk1NLllZWVknLFxuICAgICAgICAgICAgTEw6ICdEIE1NTU0gWVlZWSDVqS4nLFxuICAgICAgICAgICAgTExMOiAnRCBNTU1NIFlZWVkg1akuLCBISDptbScsXG4gICAgICAgICAgICBMTExMOiAnZGRkZCwgRCBNTU1NIFlZWVkg1akuLCBISDptbScsXG4gICAgICAgIH0sXG4gICAgICAgIGNhbGVuZGFyOiB7XG4gICAgICAgICAgICBzYW1lRGF5OiAnW9Wh1bXVvdaF1oBdIExUJyxcbiAgICAgICAgICAgIG5leHREYXk6ICdb1b7VodWy1ahdIExUJyxcbiAgICAgICAgICAgIGxhc3REYXk6ICdb1aXWgNWl1a9dIExUJyxcbiAgICAgICAgICAgIG5leHRXZWVrOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuICdkZGRkIFvWhdaA1agg1arVodW01ahdIExUJztcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBsYXN0V2VlazogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIHJldHVybiAnW9Wh1bbWgdWh1a5dIGRkZGQgW9aF1oDVqCDVqtWh1bTVqF0gTFQnO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHNhbWVFbHNlOiAnTCcsXG4gICAgICAgIH0sXG4gICAgICAgIHJlbGF0aXZlVGltZToge1xuICAgICAgICAgICAgZnV0dXJlOiAnJXMg1bDVpdW/1bgnLFxuICAgICAgICAgICAgcGFzdDogJyVzINWh1bzVodW7JyxcbiAgICAgICAgICAgIHM6ICfVtNWrINaE1aHVttWrINW+1aHVtdaA1a/VtdWh1bYnLFxuICAgICAgICAgICAgc3M6ICclZCDVvtWh1bXWgNWv1bXVodW2JyxcbiAgICAgICAgICAgIG06ICfWgNW41brVpScsXG4gICAgICAgICAgICBtbTogJyVkINaA1bjVutWlJyxcbiAgICAgICAgICAgIGg6ICfVqtWh1bQnLFxuICAgICAgICAgICAgaGg6ICclZCDVqtWh1bQnLFxuICAgICAgICAgICAgZDogJ9aF1oAnLFxuICAgICAgICAgICAgZGQ6ICclZCDWhdaAJyxcbiAgICAgICAgICAgIE06ICfVodW01avVvScsXG4gICAgICAgICAgICBNTTogJyVkINWh1bTVq9W9JyxcbiAgICAgICAgICAgIHk6ICfVv9Wh1oDVqycsXG4gICAgICAgICAgICB5eTogJyVkINW/1aHWgNWrJyxcbiAgICAgICAgfSxcbiAgICAgICAgbWVyaWRpZW1QYXJzZTogL9Wj1avVt9Wl1oDVvtWhfNWh1bzVodW+1bjVv9W+1aF81oHVpdaA1aXVr9W+1aF81aXWgNWl1a/VuNW11aHVti8sXG4gICAgICAgIGlzUE06IGZ1bmN0aW9uIChpbnB1dCkge1xuICAgICAgICAgICAgcmV0dXJuIC9eKNaB1aXWgNWl1a/VvtWhfNWl1oDVpdWv1bjVtdWh1bYpJC8udGVzdChpbnB1dCk7XG4gICAgICAgIH0sXG4gICAgICAgIG1lcmlkaWVtOiBmdW5jdGlvbiAoaG91cikge1xuICAgICAgICAgICAgaWYgKGhvdXIgPCA0KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuICfVo9Wr1bfVpdaA1b7VoSc7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGhvdXIgPCAxMikge1xuICAgICAgICAgICAgICAgIHJldHVybiAn1aHVvNWh1b7VuNW/1b7VoSc7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGhvdXIgPCAxNykge1xuICAgICAgICAgICAgICAgIHJldHVybiAn1oHVpdaA1aXVr9W+1aEnO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gJ9Wl1oDVpdWv1bjVtdWh1bYnO1xuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOiAvXFxkezEsMn18XFxkezEsMn0tKNWr1bZ81oDVpCkvLFxuICAgICAgICBvcmRpbmFsOiBmdW5jdGlvbiAobnVtYmVyLCBwZXJpb2QpIHtcbiAgICAgICAgICAgIHN3aXRjaCAocGVyaW9kKSB7XG4gICAgICAgICAgICAgICAgY2FzZSAnREREJzpcbiAgICAgICAgICAgICAgICBjYXNlICd3JzpcbiAgICAgICAgICAgICAgICBjYXNlICdXJzpcbiAgICAgICAgICAgICAgICBjYXNlICdERERvJzpcbiAgICAgICAgICAgICAgICAgICAgaWYgKG51bWJlciA9PT0gMSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG51bWJlciArICct1avVtic7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG51bWJlciArICct1oDVpCc7XG4gICAgICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG51bWJlcjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgd2Vlazoge1xuICAgICAgICAgICAgZG93OiAxLCAvLyBNb25kYXkgaXMgdGhlIGZpcnN0IGRheSBvZiB0aGUgd2Vlay5cbiAgICAgICAgICAgIGRveTogNywgLy8gVGhlIHdlZWsgdGhhdCBjb250YWlucyBKYW4gN3RoIGlzIHRoZSBmaXJzdCB3ZWVrIG9mIHRoZSB5ZWFyLlxuICAgICAgICB9LFxuICAgIH0pO1xuXG4gICAgcmV0dXJuIGh5QW07XG5cbn0pKSk7XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///17160\n")},17357:function(__unused_webpack_module,__unused_webpack_exports,__webpack_require__){eval("//! moment.js locale configuration\n//! locale : Bengali (Bangladesh) [bn-bd]\n//! author : Asraf Hossain Patoary : https://github.com/ashwoolford\n\n;(function (global, factory) {\n true ? factory(__webpack_require__(95093)) :\n 0\n}(this, (function (moment) { 'use strict';\n\n //! moment.js locale configuration\n\n var symbolMap = {\n 1: '১',\n 2: '২',\n 3: '৩',\n 4: '৪',\n 5: '৫',\n 6: '৬',\n 7: '৭',\n 8: '৮',\n 9: '৯',\n 0: '০',\n },\n numberMap = {\n '১': '1',\n '২': '2',\n '৩': '3',\n '৪': '4',\n '৫': '5',\n '৬': '6',\n '৭': '7',\n '৮': '8',\n '৯': '9',\n '০': '0',\n };\n\n var bnBd = moment.defineLocale('bn-bd', {\n months: 'জানুয়ারি_ফেব্রুয়ারি_মার্চ_এপ্রিল_মে_জুন_জুলাই_আগস্ট_সেপ্টেম্বর_অক্টোবর_নভেম্বর_ডিসেম্বর'.split(\n '_'\n ),\n monthsShort:\n 'জানু_ফেব্রু_মার্চ_এপ্রিল_মে_জুন_জুলাই_আগস্ট_সেপ্ট_অক্টো_নভে_ডিসে'.split(\n '_'\n ),\n weekdays: 'রবিবার_সোমবার_মঙ্গলবার_বুধবার_বৃহস্পতিবার_শুক্রবার_শনিবার'.split(\n '_'\n ),\n weekdaysShort: 'রবি_সোম_মঙ্গল_বুধ_বৃহস্পতি_শুক্র_শনি'.split('_'),\n weekdaysMin: 'রবি_সোম_মঙ্গল_বুধ_বৃহ_শুক্র_শনি'.split('_'),\n longDateFormat: {\n LT: 'A h:mm সময়',\n LTS: 'A h:mm:ss সময়',\n L: 'DD/MM/YYYY',\n LL: 'D MMMM YYYY',\n LLL: 'D MMMM YYYY, A h:mm সময়',\n LLLL: 'dddd, D MMMM YYYY, A h:mm সময়',\n },\n calendar: {\n sameDay: '[আজ] LT',\n nextDay: '[আগামীকাল] LT',\n nextWeek: 'dddd, LT',\n lastDay: '[গতকাল] LT',\n lastWeek: '[গত] dddd, LT',\n sameElse: 'L',\n },\n relativeTime: {\n future: '%s পরে',\n past: '%s আগে',\n s: 'কয়েক সেকেন্ড',\n ss: '%d সেকেন্ড',\n m: 'এক মিনিট',\n mm: '%d মিনিট',\n h: 'এক ঘন্টা',\n hh: '%d ঘন্টা',\n d: 'এক দিন',\n dd: '%d দিন',\n M: 'এক মাস',\n MM: '%d মাস',\n y: 'এক বছর',\n yy: '%d বছর',\n },\n preparse: function (string) {\n return string.replace(/[১২৩৪৫৬৭৮৯০]/g, function (match) {\n return numberMap[match];\n });\n },\n postformat: function (string) {\n return string.replace(/\\d/g, function (match) {\n return symbolMap[match];\n });\n },\n\n meridiemParse: /রাত|ভোর|সকাল|দুপুর|বিকাল|সন্ধ্যা|রাত/,\n meridiemHour: function (hour, meridiem) {\n if (hour === 12) {\n hour = 0;\n }\n if (meridiem === 'রাত') {\n return hour < 4 ? hour : hour + 12;\n } else if (meridiem === 'ভোর') {\n return hour;\n } else if (meridiem === 'সকাল') {\n return hour;\n } else if (meridiem === 'দুপুর') {\n return hour >= 3 ? hour : hour + 12;\n } else if (meridiem === 'বিকাল') {\n return hour + 12;\n } else if (meridiem === 'সন্ধ্যা') {\n return hour + 12;\n }\n },\n\n meridiem: function (hour, minute, isLower) {\n if (hour < 4) {\n return 'রাত';\n } else if (hour < 6) {\n return 'ভোর';\n } else if (hour < 12) {\n return 'সকাল';\n } else if (hour < 15) {\n return 'দুপুর';\n } else if (hour < 18) {\n return 'বিকাল';\n } else if (hour < 20) {\n return 'সন্ধ্যা';\n } else {\n return 'রাত';\n }\n },\n week: {\n dow: 0, // Sunday is the first day of the week.\n doy: 6, // The week that contains Jan 6th is the first week of the year.\n },\n });\n\n return bnBd;\n\n})));\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMTczNTcuanMiLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vaXRnLW5leHRnZW4tZnJvbnRlbmQvLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9ibi1iZC5qcz85Njg2Il0sInNvdXJjZXNDb250ZW50IjpbIi8vISBtb21lbnQuanMgbG9jYWxlIGNvbmZpZ3VyYXRpb25cbi8vISBsb2NhbGUgOiBCZW5nYWxpIChCYW5nbGFkZXNoKSBbYm4tYmRdXG4vLyEgYXV0aG9yIDogQXNyYWYgSG9zc2FpbiBQYXRvYXJ5IDogaHR0cHM6Ly9naXRodWIuY29tL2FzaHdvb2xmb3JkXG5cbjsoZnVuY3Rpb24gKGdsb2JhbCwgZmFjdG9yeSkge1xuICAgdHlwZW9mIGV4cG9ydHMgPT09ICdvYmplY3QnICYmIHR5cGVvZiBtb2R1bGUgIT09ICd1bmRlZmluZWQnXG4gICAgICAgJiYgdHlwZW9mIHJlcXVpcmUgPT09ICdmdW5jdGlvbicgPyBmYWN0b3J5KHJlcXVpcmUoJy4uL21vbWVudCcpKSA6XG4gICB0eXBlb2YgZGVmaW5lID09PSAnZnVuY3Rpb24nICYmIGRlZmluZS5hbWQgPyBkZWZpbmUoWycuLi9tb21lbnQnXSwgZmFjdG9yeSkgOlxuICAgZmFjdG9yeShnbG9iYWwubW9tZW50KVxufSh0aGlzLCAoZnVuY3Rpb24gKG1vbWVudCkgeyAndXNlIHN0cmljdCc7XG5cbiAgICAvLyEgbW9tZW50LmpzIGxvY2FsZSBjb25maWd1cmF0aW9uXG5cbiAgICB2YXIgc3ltYm9sTWFwID0ge1xuICAgICAgICAgICAgMTogJ+CnpycsXG4gICAgICAgICAgICAyOiAn4KeoJyxcbiAgICAgICAgICAgIDM6ICfgp6knLFxuICAgICAgICAgICAgNDogJ+CnqicsXG4gICAgICAgICAgICA1OiAn4KerJyxcbiAgICAgICAgICAgIDY6ICfgp6wnLFxuICAgICAgICAgICAgNzogJ+CnrScsXG4gICAgICAgICAgICA4OiAn4KeuJyxcbiAgICAgICAgICAgIDk6ICfgp68nLFxuICAgICAgICAgICAgMDogJ+CnpicsXG4gICAgICAgIH0sXG4gICAgICAgIG51bWJlck1hcCA9IHtcbiAgICAgICAgICAgICfgp6cnOiAnMScsXG4gICAgICAgICAgICAn4KeoJzogJzInLFxuICAgICAgICAgICAgJ+CnqSc6ICczJyxcbiAgICAgICAgICAgICfgp6onOiAnNCcsXG4gICAgICAgICAgICAn4KerJzogJzUnLFxuICAgICAgICAgICAgJ+CnrCc6ICc2JyxcbiAgICAgICAgICAgICfgp60nOiAnNycsXG4gICAgICAgICAgICAn4KeuJzogJzgnLFxuICAgICAgICAgICAgJ+Cnryc6ICc5JyxcbiAgICAgICAgICAgICfgp6YnOiAnMCcsXG4gICAgICAgIH07XG5cbiAgICB2YXIgYm5CZCA9IG1vbWVudC5kZWZpbmVMb2NhbGUoJ2JuLWJkJywge1xuICAgICAgICBtb250aHM6ICfgppzgpr7gpqjgp4Hgp5/gpr7gprDgpr9f4Kar4KeH4Kas4KeN4Kaw4KeB4Kef4Ka+4Kaw4Ka/X+CmruCmvuCmsOCnjeCmml/gpo/gpqrgp43gprDgpr/gprJf4Kau4KeHX+CmnOCngeCmqF/gppzgp4HgprLgpr7gpodf4KaG4KaX4Ka44KeN4KafX+CmuOCnh+CmquCnjeCmn+Cnh+CmruCnjeCmrOCmsF/gpoXgppXgp43gpp/gp4vgpqzgprBf4Kao4Kat4KeH4Kau4KeN4Kas4KawX+CmoeCmv+CmuOCnh+CmruCnjeCmrOCmsCcuc3BsaXQoXG4gICAgICAgICAgICAnXydcbiAgICAgICAgKSxcbiAgICAgICAgbW9udGhzU2hvcnQ6XG4gICAgICAgICAgICAn4Kac4Ka+4Kao4KeBX+Cmq+Cnh+CmrOCnjeCmsOCngV/gpq7gpr7gprDgp43gpppf4KaP4Kaq4KeN4Kaw4Ka/4KayX+CmruCnh1/gppzgp4Hgpqhf4Kac4KeB4Kay4Ka+4KaHX+CmhuCml+CmuOCnjeCmn1/gprjgp4fgpqrgp43gpp9f4KaF4KaV4KeN4Kaf4KeLX+CmqOCmreCnh1/gpqHgpr/gprjgp4cnLnNwbGl0KFxuICAgICAgICAgICAgICAgICdfJ1xuICAgICAgICAgICAgKSxcbiAgICAgICAgd2Vla2RheXM6ICfgprDgpqzgpr/gpqzgpr7gprBf4Ka44KeL4Kau4Kas4Ka+4KawX+CmruCmmeCnjeCml+CmsuCmrOCmvuCmsF/gpqzgp4Hgpqfgpqzgpr7gprBf4Kas4KeD4Ka54Ka44KeN4Kaq4Kak4Ka/4Kas4Ka+4KawX+CmtuCngeCmleCnjeCmsOCmrOCmvuCmsF/gprbgpqjgpr/gpqzgpr7gprAnLnNwbGl0KFxuICAgICAgICAgICAgJ18nXG4gICAgICAgICksXG4gICAgICAgIHdlZWtkYXlzU2hvcnQ6ICfgprDgpqzgpr9f4Ka44KeL4KauX+CmruCmmeCnjeCml+Cmsl/gpqzgp4Hgpqdf4Kas4KeD4Ka54Ka44KeN4Kaq4Kak4Ka/X+CmtuCngeCmleCnjeCmsF/gprbgpqjgpr8nLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzTWluOiAn4Kaw4Kas4Ka/X+CmuOCni+Cmrl/gpq7gppngp43gppfgprJf4Kas4KeB4KanX+CmrOCng+CmuV/gprbgp4HgppXgp43gprBf4Ka24Kao4Ka/Jy5zcGxpdCgnXycpLFxuICAgICAgICBsb25nRGF0ZUZvcm1hdDoge1xuICAgICAgICAgICAgTFQ6ICdBIGg6bW0g4Ka44Kau4KefJyxcbiAgICAgICAgICAgIExUUzogJ0EgaDptbTpzcyDgprjgpq7gp58nLFxuICAgICAgICAgICAgTDogJ0REL01NL1lZWVknLFxuICAgICAgICAgICAgTEw6ICdEIE1NTU0gWVlZWScsXG4gICAgICAgICAgICBMTEw6ICdEIE1NTU0gWVlZWSwgQSBoOm1tIOCmuOCmruCnnycsXG4gICAgICAgICAgICBMTExMOiAnZGRkZCwgRCBNTU1NIFlZWVksIEEgaDptbSDgprjgpq7gp58nLFxuICAgICAgICB9LFxuICAgICAgICBjYWxlbmRhcjoge1xuICAgICAgICAgICAgc2FtZURheTogJ1vgpobgppxdIExUJyxcbiAgICAgICAgICAgIG5leHREYXk6ICdb4KaG4KaX4Ka+4Kau4KeA4KaV4Ka+4KayXSBMVCcsXG4gICAgICAgICAgICBuZXh0V2VlazogJ2RkZGQsIExUJyxcbiAgICAgICAgICAgIGxhc3REYXk6ICdb4KaX4Kak4KaV4Ka+4KayXSBMVCcsXG4gICAgICAgICAgICBsYXN0V2VlazogJ1vgppfgpqRdIGRkZGQsIExUJyxcbiAgICAgICAgICAgIHNhbWVFbHNlOiAnTCcsXG4gICAgICAgIH0sXG4gICAgICAgIHJlbGF0aXZlVGltZToge1xuICAgICAgICAgICAgZnV0dXJlOiAnJXMg4Kaq4Kaw4KeHJyxcbiAgICAgICAgICAgIHBhc3Q6ICclcyDgpobgppfgp4cnLFxuICAgICAgICAgICAgczogJ+CmleCnn+Cnh+CmlSDgprjgp4fgppXgp4fgpqjgp43gpqEnLFxuICAgICAgICAgICAgc3M6ICclZCDgprjgp4fgppXgp4fgpqjgp43gpqEnLFxuICAgICAgICAgICAgbTogJ+Cmj+CmlSDgpq7gpr/gpqjgpr/gpp8nLFxuICAgICAgICAgICAgbW06ICclZCDgpq7gpr/gpqjgpr/gpp8nLFxuICAgICAgICAgICAgaDogJ+Cmj+CmlSDgppjgpqjgp43gpp/gpr4nLFxuICAgICAgICAgICAgaGg6ICclZCDgppjgpqjgp43gpp/gpr4nLFxuICAgICAgICAgICAgZDogJ+Cmj+CmlSDgpqbgpr/gpqgnLFxuICAgICAgICAgICAgZGQ6ICclZCDgpqbgpr/gpqgnLFxuICAgICAgICAgICAgTTogJ+Cmj+CmlSDgpq7gpr7gprgnLFxuICAgICAgICAgICAgTU06ICclZCDgpq7gpr7gprgnLFxuICAgICAgICAgICAgeTogJ+Cmj+CmlSDgpqzgppvgprAnLFxuICAgICAgICAgICAgeXk6ICclZCDgpqzgppvgprAnLFxuICAgICAgICB9LFxuICAgICAgICBwcmVwYXJzZTogZnVuY3Rpb24gKHN0cmluZykge1xuICAgICAgICAgICAgcmV0dXJuIHN0cmluZy5yZXBsYWNlKC9b4Ken4Keo4Kep4Keq4Ker4Kes4Ket4Keu4Kev4KemXS9nLCBmdW5jdGlvbiAobWF0Y2gpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gbnVtYmVyTWFwW21hdGNoXTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9LFxuICAgICAgICBwb3N0Zm9ybWF0OiBmdW5jdGlvbiAoc3RyaW5nKSB7XG4gICAgICAgICAgICByZXR1cm4gc3RyaW5nLnJlcGxhY2UoL1xcZC9nLCBmdW5jdGlvbiAobWF0Y2gpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gc3ltYm9sTWFwW21hdGNoXTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9LFxuXG4gICAgICAgIG1lcmlkaWVtUGFyc2U6IC/gprDgpr7gpqR84Kat4KeL4KawfOCmuOCmleCmvuCmsnzgpqbgp4Hgpqrgp4HgprB84Kas4Ka/4KaV4Ka+4KayfOCmuOCmqOCnjeCmp+CnjeCmr+CmvnzgprDgpr7gpqQvLFxuICAgICAgICBtZXJpZGllbUhvdXI6IGZ1bmN0aW9uIChob3VyLCBtZXJpZGllbSkge1xuICAgICAgICAgICAgaWYgKGhvdXIgPT09IDEyKSB7XG4gICAgICAgICAgICAgICAgaG91ciA9IDA7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAobWVyaWRpZW0gPT09ICfgprDgpr7gpqQnKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGhvdXIgPCA0ID8gaG91ciA6IGhvdXIgKyAxMjtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAobWVyaWRpZW0gPT09ICfgpq3gp4vgprAnKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGhvdXI7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKG1lcmlkaWVtID09PSAn4Ka44KaV4Ka+4KayJykge1xuICAgICAgICAgICAgICAgIHJldHVybiBob3VyO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChtZXJpZGllbSA9PT0gJ+CmpuCngeCmquCngeCmsCcpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gaG91ciA+PSAzID8gaG91ciA6IGhvdXIgKyAxMjtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAobWVyaWRpZW0gPT09ICfgpqzgpr/gppXgpr7gprInKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGhvdXIgKyAxMjtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAobWVyaWRpZW0gPT09ICfgprjgpqjgp43gpqfgp43gpq/gpr4nKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGhvdXIgKyAxMjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcblxuICAgICAgICBtZXJpZGllbTogZnVuY3Rpb24gKGhvdXIsIG1pbnV0ZSwgaXNMb3dlcikge1xuICAgICAgICAgICAgaWYgKGhvdXIgPCA0KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuICfgprDgpr7gpqQnO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChob3VyIDwgNikge1xuICAgICAgICAgICAgICAgIHJldHVybiAn4Kat4KeL4KawJztcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoaG91ciA8IDEyKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuICfgprjgppXgpr7gprInO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChob3VyIDwgMTUpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gJ+CmpuCngeCmquCngeCmsCc7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGhvdXIgPCAxOCkge1xuICAgICAgICAgICAgICAgIHJldHVybiAn4Kas4Ka/4KaV4Ka+4KayJztcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoaG91ciA8IDIwKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuICfgprjgpqjgp43gpqfgp43gpq/gpr4nO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gJ+CmsOCmvuCmpCc7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIHdlZWs6IHtcbiAgICAgICAgICAgIGRvdzogMCwgLy8gU3VuZGF5IGlzIHRoZSBmaXJzdCBkYXkgb2YgdGhlIHdlZWsuXG4gICAgICAgICAgICBkb3k6IDYsIC8vIFRoZSB3ZWVrIHRoYXQgY29udGFpbnMgSmFuIDZ0aCBpcyB0aGUgZmlyc3Qgd2VlayBvZiB0aGUgeWVhci5cbiAgICAgICAgfSxcbiAgICB9KTtcblxuICAgIHJldHVybiBibkJkO1xuXG59KSkpO1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///17357\n")},17513:(I,g,t)=>{"use strict";I.exports=t.p+"e6a178d3155b9c7d2929.png"},17538:function(__unused_webpack_module,__unused_webpack_exports,__webpack_require__){eval("//! moment.js locale configuration\n//! locale : Sinhalese [si]\n//! author : Sampath Sitinamaluwa : https://github.com/sampathsris\n\n;(function (global, factory) {\n true ? factory(__webpack_require__(95093)) :\n 0\n}(this, (function (moment) { 'use strict';\n\n //! moment.js locale configuration\n\n /*jshint -W100*/\n var si = moment.defineLocale('si', {\n months: 'ජනවාරි_පෙබරවාරි_මාර්තු_අප්‍රේල්_මැයි_ජූනි_ජූලි_අගෝස්තු_සැප්තැම්බර්_ඔක්තෝබර්_නොවැම්බර්_දෙසැම්බර්'.split(\n '_'\n ),\n monthsShort: 'ජන_පෙබ_මාර්_අප්_මැයි_ජූනි_ජූලි_අගෝ_සැප්_ඔක්_නොවැ_දෙසැ'.split(\n '_'\n ),\n weekdays:\n 'ඉරිදා_සඳුදා_අඟහරුවාදා_බදාදා_බ්‍රහස්පතින්දා_සිකුරාදා_සෙනසුරාදා'.split(\n '_'\n ),\n weekdaysShort: 'ඉරි_සඳු_අඟ_බදා_බ්‍රහ_සිකු_සෙන'.split('_'),\n weekdaysMin: 'ඉ_ස_අ_බ_බ්‍ර_සි_සෙ'.split('_'),\n weekdaysParseExact: true,\n longDateFormat: {\n LT: 'a h:mm',\n LTS: 'a h:mm:ss',\n L: 'YYYY/MM/DD',\n LL: 'YYYY MMMM D',\n LLL: 'YYYY MMMM D, a h:mm',\n LLLL: 'YYYY MMMM D [වැනි] dddd, a h:mm:ss',\n },\n calendar: {\n sameDay: '[අද] LT[ට]',\n nextDay: '[හෙට] LT[ට]',\n nextWeek: 'dddd LT[ට]',\n lastDay: '[ඊයේ] LT[ට]',\n lastWeek: '[පසුගිය] dddd LT[ට]',\n sameElse: 'L',\n },\n relativeTime: {\n future: '%sකින්',\n past: '%sකට පෙර',\n s: 'තත්පර කිහිපය',\n ss: 'තත්පර %d',\n m: 'මිනිත්තුව',\n mm: 'මිනිත්තු %d',\n h: 'පැය',\n hh: 'පැය %d',\n d: 'දිනය',\n dd: 'දින %d',\n M: 'මාසය',\n MM: 'මාස %d',\n y: 'වසර',\n yy: 'වසර %d',\n },\n dayOfMonthOrdinalParse: /\\d{1,2} වැනි/,\n ordinal: function (number) {\n return number + ' වැනි';\n },\n meridiemParse: /පෙර වරු|පස් වරු|පෙ.ව|ප.ව./,\n isPM: function (input) {\n return input === 'ප.ව.' || input === 'පස් වරු';\n },\n meridiem: function (hours, minutes, isLower) {\n if (hours > 11) {\n return isLower ? 'ප.ව.' : 'පස් වරු';\n } else {\n return isLower ? 'පෙ.ව.' : 'පෙර වරු';\n }\n },\n });\n\n return si;\n\n})));\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMTc1MzguanMiLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vaXRnLW5leHRnZW4tZnJvbnRlbmQvLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9zaS5qcz9lZGE1Il0sInNvdXJjZXNDb250ZW50IjpbIi8vISBtb21lbnQuanMgbG9jYWxlIGNvbmZpZ3VyYXRpb25cbi8vISBsb2NhbGUgOiBTaW5oYWxlc2UgW3NpXVxuLy8hIGF1dGhvciA6IFNhbXBhdGggU2l0aW5hbWFsdXdhIDogaHR0cHM6Ly9naXRodWIuY29tL3NhbXBhdGhzcmlzXG5cbjsoZnVuY3Rpb24gKGdsb2JhbCwgZmFjdG9yeSkge1xuICAgdHlwZW9mIGV4cG9ydHMgPT09ICdvYmplY3QnICYmIHR5cGVvZiBtb2R1bGUgIT09ICd1bmRlZmluZWQnXG4gICAgICAgJiYgdHlwZW9mIHJlcXVpcmUgPT09ICdmdW5jdGlvbicgPyBmYWN0b3J5KHJlcXVpcmUoJy4uL21vbWVudCcpKSA6XG4gICB0eXBlb2YgZGVmaW5lID09PSAnZnVuY3Rpb24nICYmIGRlZmluZS5hbWQgPyBkZWZpbmUoWycuLi9tb21lbnQnXSwgZmFjdG9yeSkgOlxuICAgZmFjdG9yeShnbG9iYWwubW9tZW50KVxufSh0aGlzLCAoZnVuY3Rpb24gKG1vbWVudCkgeyAndXNlIHN0cmljdCc7XG5cbiAgICAvLyEgbW9tZW50LmpzIGxvY2FsZSBjb25maWd1cmF0aW9uXG5cbiAgICAvKmpzaGludCAtVzEwMCovXG4gICAgdmFyIHNpID0gbW9tZW50LmRlZmluZUxvY2FsZSgnc2knLCB7XG4gICAgICAgIG1vbnRoczogJ+C2ouC2seC3gOC3j+C2u+C3kl/gtrTgt5ngtrbgtrvgt4Dgt4/gtrvgt5Jf4La44LeP4La74LeK4Lat4LeUX+C2heC2tOC3iuKAjeC2u+C3muC2veC3il/gtrjgt5Dgtrrgt5Jf4Lai4LeW4Lax4LeSX+C2ouC3luC2veC3kl/gtoXgtpzgt53gt4Pgt4rgtq3gt5Rf4LeD4LeQ4La04LeK4Lat4LeQ4La44LeK4La24La74LeKX+C2lOC2muC3iuC2reC3neC2tuC2u+C3il/gtrHgt5zgt4Dgt5Dgtrjgt4rgtrbgtrvgt4pf4Lav4LeZ4LeD4LeQ4La44LeK4La24La74LeKJy5zcGxpdChcbiAgICAgICAgICAgICdfJ1xuICAgICAgICApLFxuICAgICAgICBtb250aHNTaG9ydDogJ+C2ouC2sV/gtrTgt5ngtrZf4La44LeP4La74LeKX+C2heC2tOC3il/gtrjgt5Dgtrrgt5Jf4Lai4LeW4Lax4LeSX+C2ouC3luC2veC3kl/gtoXgtpzgt51f4LeD4LeQ4La04LeKX+C2lOC2muC3il/gtrHgt5zgt4Dgt5Bf4Lav4LeZ4LeD4LeQJy5zcGxpdChcbiAgICAgICAgICAgICdfJ1xuICAgICAgICApLFxuICAgICAgICB3ZWVrZGF5czpcbiAgICAgICAgICAgICfgtongtrvgt5Lgtq/gt49f4LeD4Laz4LeU4Lav4LePX+C2heC2n+C3hOC2u+C3lOC3gOC3j+C2r+C3j1/gtrbgtq/gt4/gtq/gt49f4La24LeK4oCN4La74LeE4LeD4LeK4La04Lat4LeS4Lax4LeK4Lav4LePX+C3g+C3kuC2muC3lOC2u+C3j+C2r+C3j1/gt4Pgt5ngtrHgt4Pgt5Tgtrvgt4/gtq/gt48nLnNwbGl0KFxuICAgICAgICAgICAgICAgICdfJ1xuICAgICAgICAgICAgKSxcbiAgICAgICAgd2Vla2RheXNTaG9ydDogJ+C2ieC2u+C3kl/gt4PgtrPgt5Rf4LaF4LafX+C2tuC2r+C3j1/gtrbgt4rigI3gtrvgt4Rf4LeD4LeS4Laa4LeUX+C3g+C3meC2sScuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXNNaW46ICfgtolf4LeDX+C2hV/gtrZf4La24LeK4oCN4La7X+C3g+C3kl/gt4Pgt5knLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzUGFyc2VFeGFjdDogdHJ1ZSxcbiAgICAgICAgbG9uZ0RhdGVGb3JtYXQ6IHtcbiAgICAgICAgICAgIExUOiAnYSBoOm1tJyxcbiAgICAgICAgICAgIExUUzogJ2EgaDptbTpzcycsXG4gICAgICAgICAgICBMOiAnWVlZWS9NTS9ERCcsXG4gICAgICAgICAgICBMTDogJ1lZWVkgTU1NTSBEJyxcbiAgICAgICAgICAgIExMTDogJ1lZWVkgTU1NTSBELCBhIGg6bW0nLFxuICAgICAgICAgICAgTExMTDogJ1lZWVkgTU1NTSBEIFvgt4Dgt5DgtrHgt5JdIGRkZGQsIGEgaDptbTpzcycsXG4gICAgICAgIH0sXG4gICAgICAgIGNhbGVuZGFyOiB7XG4gICAgICAgICAgICBzYW1lRGF5OiAnW+C2heC2r10gTFRb4LanXScsXG4gICAgICAgICAgICBuZXh0RGF5OiAnW+C3hOC3meC2p10gTFRb4LanXScsXG4gICAgICAgICAgICBuZXh0V2VlazogJ2RkZGQgTFRb4LanXScsXG4gICAgICAgICAgICBsYXN0RGF5OiAnW+C2iuC2uuC3ml0gTFRb4LanXScsXG4gICAgICAgICAgICBsYXN0V2VlazogJ1vgtrTgt4Pgt5Tgtpzgt5LgtrpdIGRkZGQgTFRb4LanXScsXG4gICAgICAgICAgICBzYW1lRWxzZTogJ0wnLFxuICAgICAgICB9LFxuICAgICAgICByZWxhdGl2ZVRpbWU6IHtcbiAgICAgICAgICAgIGZ1dHVyZTogJyVz4Laa4LeS4Lax4LeKJyxcbiAgICAgICAgICAgIHBhc3Q6ICclc+C2muC2pyDgtrTgt5ngtrsnLFxuICAgICAgICAgICAgczogJ+C2reC2reC3iuC2tOC2uyDgtprgt5Lgt4Tgt5LgtrTgtronLFxuICAgICAgICAgICAgc3M6ICfgtq3gtq3gt4rgtrTgtrsgJWQnLFxuICAgICAgICAgICAgbTogJ+C2uOC3kuC2seC3kuC2reC3iuC2reC3lOC3gCcsXG4gICAgICAgICAgICBtbTogJ+C2uOC3kuC2seC3kuC2reC3iuC2reC3lCAlZCcsXG4gICAgICAgICAgICBoOiAn4La04LeQ4La6JyxcbiAgICAgICAgICAgIGhoOiAn4La04LeQ4La6ICVkJyxcbiAgICAgICAgICAgIGQ6ICfgtq/gt5LgtrHgtronLFxuICAgICAgICAgICAgZGQ6ICfgtq/gt5LgtrEgJWQnLFxuICAgICAgICAgICAgTTogJ+C2uOC3j+C3g+C2uicsXG4gICAgICAgICAgICBNTTogJ+C2uOC3j+C3gyAlZCcsXG4gICAgICAgICAgICB5OiAn4LeA4LeD4La7JyxcbiAgICAgICAgICAgIHl5OiAn4LeA4LeD4La7ICVkJyxcbiAgICAgICAgfSxcbiAgICAgICAgZGF5T2ZNb250aE9yZGluYWxQYXJzZTogL1xcZHsxLDJ9IOC3gOC3kOC2seC3ki8sXG4gICAgICAgIG9yZGluYWw6IGZ1bmN0aW9uIChudW1iZXIpIHtcbiAgICAgICAgICAgIHJldHVybiBudW1iZXIgKyAnIOC3gOC3kOC2seC3kic7XG4gICAgICAgIH0sXG4gICAgICAgIG1lcmlkaWVtUGFyc2U6IC/gtrTgt5ngtrsg4LeA4La74LeUfOC2tOC3g+C3iiDgt4Dgtrvgt5R84La04LeZLuC3gHzgtrQu4LeALi8sXG4gICAgICAgIGlzUE06IGZ1bmN0aW9uIChpbnB1dCkge1xuICAgICAgICAgICAgcmV0dXJuIGlucHV0ID09PSAn4La0LuC3gC4nIHx8IGlucHV0ID09PSAn4La04LeD4LeKIOC3gOC2u+C3lCc7XG4gICAgICAgIH0sXG4gICAgICAgIG1lcmlkaWVtOiBmdW5jdGlvbiAoaG91cnMsIG1pbnV0ZXMsIGlzTG93ZXIpIHtcbiAgICAgICAgICAgIGlmIChob3VycyA+IDExKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGlzTG93ZXIgPyAn4La0LuC3gC4nIDogJ+C2tOC3g+C3iiDgt4Dgtrvgt5QnO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gaXNMb3dlciA/ICfgtrTgt5ku4LeALicgOiAn4La04LeZ4La7IOC3gOC2u+C3lCc7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgfSk7XG5cbiAgICByZXR1cm4gc2k7XG5cbn0pKSk7XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///17538\n")},17730:function(__unused_webpack_module,__unused_webpack_exports,__webpack_require__){eval("//! moment.js locale configuration\n//! locale : Spanish (Mexico) [es-mx]\n//! author : JC Franco : https://github.com/jcfranco\n\n;(function (global, factory) {\n true ? factory(__webpack_require__(95093)) :\n 0\n}(this, (function (moment) { 'use strict';\n\n //! moment.js locale configuration\n\n var monthsShortDot =\n 'ene._feb._mar._abr._may._jun._jul._ago._sep._oct._nov._dic.'.split(\n '_'\n ),\n monthsShort = 'ene_feb_mar_abr_may_jun_jul_ago_sep_oct_nov_dic'.split('_'),\n monthsParse = [\n /^ene/i,\n /^feb/i,\n /^mar/i,\n /^abr/i,\n /^may/i,\n /^jun/i,\n /^jul/i,\n /^ago/i,\n /^sep/i,\n /^oct/i,\n /^nov/i,\n /^dic/i,\n ],\n monthsRegex =\n /^(enero|febrero|marzo|abril|mayo|junio|julio|agosto|septiembre|octubre|noviembre|diciembre|ene\\.?|feb\\.?|mar\\.?|abr\\.?|may\\.?|jun\\.?|jul\\.?|ago\\.?|sep\\.?|oct\\.?|nov\\.?|dic\\.?)/i;\n\n var esMx = moment.defineLocale('es-mx', {\n months: 'enero_febrero_marzo_abril_mayo_junio_julio_agosto_septiembre_octubre_noviembre_diciembre'.split(\n '_'\n ),\n monthsShort: function (m, format) {\n if (!m) {\n return monthsShortDot;\n } else if (/-MMM-/.test(format)) {\n return monthsShort[m.month()];\n } else {\n return monthsShortDot[m.month()];\n }\n },\n monthsRegex: monthsRegex,\n monthsShortRegex: monthsRegex,\n monthsStrictRegex:\n /^(enero|febrero|marzo|abril|mayo|junio|julio|agosto|septiembre|octubre|noviembre|diciembre)/i,\n monthsShortStrictRegex:\n /^(ene\\.?|feb\\.?|mar\\.?|abr\\.?|may\\.?|jun\\.?|jul\\.?|ago\\.?|sep\\.?|oct\\.?|nov\\.?|dic\\.?)/i,\n monthsParse: monthsParse,\n longMonthsParse: monthsParse,\n shortMonthsParse: monthsParse,\n weekdays: 'domingo_lunes_martes_miércoles_jueves_viernes_sábado'.split('_'),\n weekdaysShort: 'dom._lun._mar._mié._jue._vie._sáb.'.split('_'),\n weekdaysMin: 'do_lu_ma_mi_ju_vi_sá'.split('_'),\n weekdaysParseExact: true,\n longDateFormat: {\n LT: 'H:mm',\n LTS: 'H:mm:ss',\n L: 'DD/MM/YYYY',\n LL: 'D [de] MMMM [de] YYYY',\n LLL: 'D [de] MMMM [de] YYYY H:mm',\n LLLL: 'dddd, D [de] MMMM [de] YYYY H:mm',\n },\n calendar: {\n sameDay: function () {\n return '[hoy a la' + (this.hours() !== 1 ? 's' : '') + '] LT';\n },\n nextDay: function () {\n return '[mañana a la' + (this.hours() !== 1 ? 's' : '') + '] LT';\n },\n nextWeek: function () {\n return 'dddd [a la' + (this.hours() !== 1 ? 's' : '') + '] LT';\n },\n lastDay: function () {\n return '[ayer a la' + (this.hours() !== 1 ? 's' : '') + '] LT';\n },\n lastWeek: function () {\n return (\n '[el] dddd [pasado a la' +\n (this.hours() !== 1 ? 's' : '') +\n '] LT'\n );\n },\n sameElse: 'L',\n },\n relativeTime: {\n future: 'en %s',\n past: 'hace %s',\n s: 'unos segundos',\n ss: '%d segundos',\n m: 'un minuto',\n mm: '%d minutos',\n h: 'una hora',\n hh: '%d horas',\n d: 'un día',\n dd: '%d días',\n w: 'una semana',\n ww: '%d semanas',\n M: 'un mes',\n MM: '%d meses',\n y: 'un año',\n yy: '%d años',\n },\n dayOfMonthOrdinalParse: /\\d{1,2}º/,\n ordinal: '%dº',\n week: {\n dow: 0, // Sunday is the first day of the week.\n doy: 4, // The week that contains Jan 4th is the first week of the year.\n },\n invalidDate: 'Fecha inválida',\n });\n\n return esMx;\n\n})));\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMTc3MzAuanMiLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL2l0Zy1uZXh0Z2VuLWZyb250ZW5kLy4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvZXMtbXguanM/YjViNyJdLCJzb3VyY2VzQ29udGVudCI6WyIvLyEgbW9tZW50LmpzIGxvY2FsZSBjb25maWd1cmF0aW9uXG4vLyEgbG9jYWxlIDogU3BhbmlzaCAoTWV4aWNvKSBbZXMtbXhdXG4vLyEgYXV0aG9yIDogSkMgRnJhbmNvIDogaHR0cHM6Ly9naXRodWIuY29tL2pjZnJhbmNvXG5cbjsoZnVuY3Rpb24gKGdsb2JhbCwgZmFjdG9yeSkge1xuICAgdHlwZW9mIGV4cG9ydHMgPT09ICdvYmplY3QnICYmIHR5cGVvZiBtb2R1bGUgIT09ICd1bmRlZmluZWQnXG4gICAgICAgJiYgdHlwZW9mIHJlcXVpcmUgPT09ICdmdW5jdGlvbicgPyBmYWN0b3J5KHJlcXVpcmUoJy4uL21vbWVudCcpKSA6XG4gICB0eXBlb2YgZGVmaW5lID09PSAnZnVuY3Rpb24nICYmIGRlZmluZS5hbWQgPyBkZWZpbmUoWycuLi9tb21lbnQnXSwgZmFjdG9yeSkgOlxuICAgZmFjdG9yeShnbG9iYWwubW9tZW50KVxufSh0aGlzLCAoZnVuY3Rpb24gKG1vbWVudCkgeyAndXNlIHN0cmljdCc7XG5cbiAgICAvLyEgbW9tZW50LmpzIGxvY2FsZSBjb25maWd1cmF0aW9uXG5cbiAgICB2YXIgbW9udGhzU2hvcnREb3QgPVxuICAgICAgICAgICAgJ2VuZS5fZmViLl9tYXIuX2Fici5fbWF5Ll9qdW4uX2p1bC5fYWdvLl9zZXAuX29jdC5fbm92Ll9kaWMuJy5zcGxpdChcbiAgICAgICAgICAgICAgICAnXydcbiAgICAgICAgICAgICksXG4gICAgICAgIG1vbnRoc1Nob3J0ID0gJ2VuZV9mZWJfbWFyX2Ficl9tYXlfanVuX2p1bF9hZ29fc2VwX29jdF9ub3ZfZGljJy5zcGxpdCgnXycpLFxuICAgICAgICBtb250aHNQYXJzZSA9IFtcbiAgICAgICAgICAgIC9eZW5lL2ksXG4gICAgICAgICAgICAvXmZlYi9pLFxuICAgICAgICAgICAgL15tYXIvaSxcbiAgICAgICAgICAgIC9eYWJyL2ksXG4gICAgICAgICAgICAvXm1heS9pLFxuICAgICAgICAgICAgL15qdW4vaSxcbiAgICAgICAgICAgIC9eanVsL2ksXG4gICAgICAgICAgICAvXmFnby9pLFxuICAgICAgICAgICAgL15zZXAvaSxcbiAgICAgICAgICAgIC9eb2N0L2ksXG4gICAgICAgICAgICAvXm5vdi9pLFxuICAgICAgICAgICAgL15kaWMvaSxcbiAgICAgICAgXSxcbiAgICAgICAgbW9udGhzUmVnZXggPVxuICAgICAgICAgICAgL14oZW5lcm98ZmVicmVyb3xtYXJ6b3xhYnJpbHxtYXlvfGp1bmlvfGp1bGlvfGFnb3N0b3xzZXB0aWVtYnJlfG9jdHVicmV8bm92aWVtYnJlfGRpY2llbWJyZXxlbmVcXC4/fGZlYlxcLj98bWFyXFwuP3xhYnJcXC4/fG1heVxcLj98anVuXFwuP3xqdWxcXC4/fGFnb1xcLj98c2VwXFwuP3xvY3RcXC4/fG5vdlxcLj98ZGljXFwuPykvaTtcblxuICAgIHZhciBlc014ID0gbW9tZW50LmRlZmluZUxvY2FsZSgnZXMtbXgnLCB7XG4gICAgICAgIG1vbnRoczogJ2VuZXJvX2ZlYnJlcm9fbWFyem9fYWJyaWxfbWF5b19qdW5pb19qdWxpb19hZ29zdG9fc2VwdGllbWJyZV9vY3R1YnJlX25vdmllbWJyZV9kaWNpZW1icmUnLnNwbGl0KFxuICAgICAgICAgICAgJ18nXG4gICAgICAgICksXG4gICAgICAgIG1vbnRoc1Nob3J0OiBmdW5jdGlvbiAobSwgZm9ybWF0KSB7XG4gICAgICAgICAgICBpZiAoIW0pIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gbW9udGhzU2hvcnREb3Q7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKC8tTU1NLS8udGVzdChmb3JtYXQpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG1vbnRoc1Nob3J0W20ubW9udGgoKV07XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHJldHVybiBtb250aHNTaG9ydERvdFttLm1vbnRoKCldO1xuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBtb250aHNSZWdleDogbW9udGhzUmVnZXgsXG4gICAgICAgIG1vbnRoc1Nob3J0UmVnZXg6IG1vbnRoc1JlZ2V4LFxuICAgICAgICBtb250aHNTdHJpY3RSZWdleDpcbiAgICAgICAgICAgIC9eKGVuZXJvfGZlYnJlcm98bWFyem98YWJyaWx8bWF5b3xqdW5pb3xqdWxpb3xhZ29zdG98c2VwdGllbWJyZXxvY3R1YnJlfG5vdmllbWJyZXxkaWNpZW1icmUpL2ksXG4gICAgICAgIG1vbnRoc1Nob3J0U3RyaWN0UmVnZXg6XG4gICAgICAgICAgICAvXihlbmVcXC4/fGZlYlxcLj98bWFyXFwuP3xhYnJcXC4/fG1heVxcLj98anVuXFwuP3xqdWxcXC4/fGFnb1xcLj98c2VwXFwuP3xvY3RcXC4/fG5vdlxcLj98ZGljXFwuPykvaSxcbiAgICAgICAgbW9udGhzUGFyc2U6IG1vbnRoc1BhcnNlLFxuICAgICAgICBsb25nTW9udGhzUGFyc2U6IG1vbnRoc1BhcnNlLFxuICAgICAgICBzaG9ydE1vbnRoc1BhcnNlOiBtb250aHNQYXJzZSxcbiAgICAgICAgd2Vla2RheXM6ICdkb21pbmdvX2x1bmVzX21hcnRlc19tacOpcmNvbGVzX2p1ZXZlc192aWVybmVzX3PDoWJhZG8nLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzU2hvcnQ6ICdkb20uX2x1bi5fbWFyLl9tacOpLl9qdWUuX3ZpZS5fc8OhYi4nLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzTWluOiAnZG9fbHVfbWFfbWlfanVfdmlfc8OhJy5zcGxpdCgnXycpLFxuICAgICAgICB3ZWVrZGF5c1BhcnNlRXhhY3Q6IHRydWUsXG4gICAgICAgIGxvbmdEYXRlRm9ybWF0OiB7XG4gICAgICAgICAgICBMVDogJ0g6bW0nLFxuICAgICAgICAgICAgTFRTOiAnSDptbTpzcycsXG4gICAgICAgICAgICBMOiAnREQvTU0vWVlZWScsXG4gICAgICAgICAgICBMTDogJ0QgW2RlXSBNTU1NIFtkZV0gWVlZWScsXG4gICAgICAgICAgICBMTEw6ICdEIFtkZV0gTU1NTSBbZGVdIFlZWVkgSDptbScsXG4gICAgICAgICAgICBMTExMOiAnZGRkZCwgRCBbZGVdIE1NTU0gW2RlXSBZWVlZIEg6bW0nLFxuICAgICAgICB9LFxuICAgICAgICBjYWxlbmRhcjoge1xuICAgICAgICAgICAgc2FtZURheTogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIHJldHVybiAnW2hveSBhIGxhJyArICh0aGlzLmhvdXJzKCkgIT09IDEgPyAncycgOiAnJykgKyAnXSBMVCc7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgbmV4dERheTogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIHJldHVybiAnW21hw7FhbmEgYSBsYScgKyAodGhpcy5ob3VycygpICE9PSAxID8gJ3MnIDogJycpICsgJ10gTFQnO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIG5leHRXZWVrOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuICdkZGRkIFthIGxhJyArICh0aGlzLmhvdXJzKCkgIT09IDEgPyAncycgOiAnJykgKyAnXSBMVCc7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgbGFzdERheTogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIHJldHVybiAnW2F5ZXIgYSBsYScgKyAodGhpcy5ob3VycygpICE9PSAxID8gJ3MnIDogJycpICsgJ10gTFQnO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGxhc3RXZWVrOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICAgICAgICAgJ1tlbF0gZGRkZCBbcGFzYWRvIGEgbGEnICtcbiAgICAgICAgICAgICAgICAgICAgKHRoaXMuaG91cnMoKSAhPT0gMSA/ICdzJyA6ICcnKSArXG4gICAgICAgICAgICAgICAgICAgICddIExUJ1xuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgc2FtZUVsc2U6ICdMJyxcbiAgICAgICAgfSxcbiAgICAgICAgcmVsYXRpdmVUaW1lOiB7XG4gICAgICAgICAgICBmdXR1cmU6ICdlbiAlcycsXG4gICAgICAgICAgICBwYXN0OiAnaGFjZSAlcycsXG4gICAgICAgICAgICBzOiAndW5vcyBzZWd1bmRvcycsXG4gICAgICAgICAgICBzczogJyVkIHNlZ3VuZG9zJyxcbiAgICAgICAgICAgIG06ICd1biBtaW51dG8nLFxuICAgICAgICAgICAgbW06ICclZCBtaW51dG9zJyxcbiAgICAgICAgICAgIGg6ICd1bmEgaG9yYScsXG4gICAgICAgICAgICBoaDogJyVkIGhvcmFzJyxcbiAgICAgICAgICAgIGQ6ICd1biBkw61hJyxcbiAgICAgICAgICAgIGRkOiAnJWQgZMOtYXMnLFxuICAgICAgICAgICAgdzogJ3VuYSBzZW1hbmEnLFxuICAgICAgICAgICAgd3c6ICclZCBzZW1hbmFzJyxcbiAgICAgICAgICAgIE06ICd1biBtZXMnLFxuICAgICAgICAgICAgTU06ICclZCBtZXNlcycsXG4gICAgICAgICAgICB5OiAndW4gYcOxbycsXG4gICAgICAgICAgICB5eTogJyVkIGHDsW9zJyxcbiAgICAgICAgfSxcbiAgICAgICAgZGF5T2ZNb250aE9yZGluYWxQYXJzZTogL1xcZHsxLDJ9wrovLFxuICAgICAgICBvcmRpbmFsOiAnJWTCuicsXG4gICAgICAgIHdlZWs6IHtcbiAgICAgICAgICAgIGRvdzogMCwgLy8gU3VuZGF5IGlzIHRoZSBmaXJzdCBkYXkgb2YgdGhlIHdlZWsuXG4gICAgICAgICAgICBkb3k6IDQsIC8vIFRoZSB3ZWVrIHRoYXQgY29udGFpbnMgSmFuIDR0aCBpcyB0aGUgZmlyc3Qgd2VlayBvZiB0aGUgeWVhci5cbiAgICAgICAgfSxcbiAgICAgICAgaW52YWxpZERhdGU6ICdGZWNoYSBpbnbDoWxpZGEnLFxuICAgIH0pO1xuXG4gICAgcmV0dXJuIGVzTXg7XG5cbn0pKSk7XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///17730\n")},17798:(I,g,t)=>{"use strict";I.exports=t.p+"fd87d1123b4744c49f22.png"},17980:module=>{"use strict";eval("\n\n/**\n * Syntactic sugar for invoking a function and expanding an array for arguments.\n *\n * Common use case would be to use `Function.prototype.apply`.\n *\n * ```js\n * function f(x, y, z) {}\n * var args = [1, 2, 3];\n * f.apply(null, args);\n * ```\n *\n * With `spread` this example can be re-written.\n *\n * ```js\n * spread(function(x, y, z) {})([1, 2, 3]);\n * ```\n *\n * @param {Function} callback\n * @returns {Function}\n */\nmodule.exports = function spread(callback) {\n return function wrap(arr) {\n return callback.apply(null, arr);\n };\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMTc5ODAuanMiLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vaXRnLW5leHRnZW4tZnJvbnRlbmQvLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2hlbHBlcnMvc3ByZWFkLmpzPzBkZjYiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG4vKipcbiAqIFN5bnRhY3RpYyBzdWdhciBmb3IgaW52b2tpbmcgYSBmdW5jdGlvbiBhbmQgZXhwYW5kaW5nIGFuIGFycmF5IGZvciBhcmd1bWVudHMuXG4gKlxuICogQ29tbW9uIHVzZSBjYXNlIHdvdWxkIGJlIHRvIHVzZSBgRnVuY3Rpb24ucHJvdG90eXBlLmFwcGx5YC5cbiAqXG4gKiAgYGBganNcbiAqICBmdW5jdGlvbiBmKHgsIHksIHopIHt9XG4gKiAgdmFyIGFyZ3MgPSBbMSwgMiwgM107XG4gKiAgZi5hcHBseShudWxsLCBhcmdzKTtcbiAqICBgYGBcbiAqXG4gKiBXaXRoIGBzcHJlYWRgIHRoaXMgZXhhbXBsZSBjYW4gYmUgcmUtd3JpdHRlbi5cbiAqXG4gKiAgYGBganNcbiAqICBzcHJlYWQoZnVuY3Rpb24oeCwgeSwgeikge30pKFsxLCAyLCAzXSk7XG4gKiAgYGBgXG4gKlxuICogQHBhcmFtIHtGdW5jdGlvbn0gY2FsbGJhY2tcbiAqIEByZXR1cm5zIHtGdW5jdGlvbn1cbiAqL1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBzcHJlYWQoY2FsbGJhY2spIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIHdyYXAoYXJyKSB7XG4gICAgcmV0dXJuIGNhbGxiYWNrLmFwcGx5KG51bGwsIGFycik7XG4gIH07XG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///17980\n")},18015:(module,__unused_webpack_exports,__webpack_require__)=>{"use strict";eval('\n\nvar utils = __webpack_require__(9516);\nvar bind = __webpack_require__(69012);\nvar Axios = __webpack_require__(35155);\nvar mergeConfig = __webpack_require__(85343);\nvar defaults = __webpack_require__(37412);\n\n/**\n * Create an instance of Axios\n *\n * @param {Object} defaultConfig The default config for the instance\n * @return {Axios} A new instance of Axios\n */\nfunction createInstance(defaultConfig) {\n var context = new Axios(defaultConfig);\n var instance = bind(Axios.prototype.request, context);\n\n // Copy axios.prototype to instance\n utils.extend(instance, Axios.prototype, context);\n\n // Copy context to instance\n utils.extend(instance, context);\n\n // Factory for creating new instances\n instance.create = function create(instanceConfig) {\n return createInstance(mergeConfig(defaultConfig, instanceConfig));\n };\n\n return instance;\n}\n\n// Create the default instance to be exported\nvar axios = createInstance(defaults);\n\n// Expose Axios class to allow class inheritance\naxios.Axios = Axios;\n\n// Expose Cancel & CancelToken\naxios.Cancel = __webpack_require__(31928);\naxios.CancelToken = __webpack_require__(3191);\naxios.isCancel = __webpack_require__(93864);\naxios.VERSION = (__webpack_require__(49641).version);\n\n// Expose all/spread\naxios.all = function all(promises) {\n return Promise.all(promises);\n};\naxios.spread = __webpack_require__(17980);\n\n// Expose isAxiosError\naxios.isAxiosError = __webpack_require__(45019);\n\nmodule.exports = axios;\n\n// Allow use of default import syntax in TypeScript\nmodule.exports["default"] = axios;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMTgwMTUuanMiLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vaXRnLW5leHRnZW4tZnJvbnRlbmQvLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2F4aW9zLmpzP2NlZTQiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG52YXIgdXRpbHMgPSByZXF1aXJlKCcuL3V0aWxzJyk7XG52YXIgYmluZCA9IHJlcXVpcmUoJy4vaGVscGVycy9iaW5kJyk7XG52YXIgQXhpb3MgPSByZXF1aXJlKCcuL2NvcmUvQXhpb3MnKTtcbnZhciBtZXJnZUNvbmZpZyA9IHJlcXVpcmUoJy4vY29yZS9tZXJnZUNvbmZpZycpO1xudmFyIGRlZmF1bHRzID0gcmVxdWlyZSgnLi9kZWZhdWx0cycpO1xuXG4vKipcbiAqIENyZWF0ZSBhbiBpbnN0YW5jZSBvZiBBeGlvc1xuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSBkZWZhdWx0Q29uZmlnIFRoZSBkZWZhdWx0IGNvbmZpZyBmb3IgdGhlIGluc3RhbmNlXG4gKiBAcmV0dXJuIHtBeGlvc30gQSBuZXcgaW5zdGFuY2Ugb2YgQXhpb3NcbiAqL1xuZnVuY3Rpb24gY3JlYXRlSW5zdGFuY2UoZGVmYXVsdENvbmZpZykge1xuICB2YXIgY29udGV4dCA9IG5ldyBBeGlvcyhkZWZhdWx0Q29uZmlnKTtcbiAgdmFyIGluc3RhbmNlID0gYmluZChBeGlvcy5wcm90b3R5cGUucmVxdWVzdCwgY29udGV4dCk7XG5cbiAgLy8gQ29weSBheGlvcy5wcm90b3R5cGUgdG8gaW5zdGFuY2VcbiAgdXRpbHMuZXh0ZW5kKGluc3RhbmNlLCBBeGlvcy5wcm90b3R5cGUsIGNvbnRleHQpO1xuXG4gIC8vIENvcHkgY29udGV4dCB0byBpbnN0YW5jZVxuICB1dGlscy5leHRlbmQoaW5zdGFuY2UsIGNvbnRleHQpO1xuXG4gIC8vIEZhY3RvcnkgZm9yIGNyZWF0aW5nIG5ldyBpbnN0YW5jZXNcbiAgaW5zdGFuY2UuY3JlYXRlID0gZnVuY3Rpb24gY3JlYXRlKGluc3RhbmNlQ29uZmlnKSB7XG4gICAgcmV0dXJuIGNyZWF0ZUluc3RhbmNlKG1lcmdlQ29uZmlnKGRlZmF1bHRDb25maWcsIGluc3RhbmNlQ29uZmlnKSk7XG4gIH07XG5cbiAgcmV0dXJuIGluc3RhbmNlO1xufVxuXG4vLyBDcmVhdGUgdGhlIGRlZmF1bHQgaW5zdGFuY2UgdG8gYmUgZXhwb3J0ZWRcbnZhciBheGlvcyA9IGNyZWF0ZUluc3RhbmNlKGRlZmF1bHRzKTtcblxuLy8gRXhwb3NlIEF4aW9zIGNsYXNzIHRvIGFsbG93IGNsYXNzIGluaGVyaXRhbmNlXG5heGlvcy5BeGlvcyA9IEF4aW9zO1xuXG4vLyBFeHBvc2UgQ2FuY2VsICYgQ2FuY2VsVG9rZW5cbmF4aW9zLkNhbmNlbCA9IHJlcXVpcmUoJy4vY2FuY2VsL0NhbmNlbCcpO1xuYXhpb3MuQ2FuY2VsVG9rZW4gPSByZXF1aXJlKCcuL2NhbmNlbC9DYW5jZWxUb2tlbicpO1xuYXhpb3MuaXNDYW5jZWwgPSByZXF1aXJlKCcuL2NhbmNlbC9pc0NhbmNlbCcpO1xuYXhpb3MuVkVSU0lPTiA9IHJlcXVpcmUoJy4vZW52L2RhdGEnKS52ZXJzaW9uO1xuXG4vLyBFeHBvc2UgYWxsL3NwcmVhZFxuYXhpb3MuYWxsID0gZnVuY3Rpb24gYWxsKHByb21pc2VzKSB7XG4gIHJldHVybiBQcm9taXNlLmFsbChwcm9taXNlcyk7XG59O1xuYXhpb3Muc3ByZWFkID0gcmVxdWlyZSgnLi9oZWxwZXJzL3NwcmVhZCcpO1xuXG4vLyBFeHBvc2UgaXNBeGlvc0Vycm9yXG5heGlvcy5pc0F4aW9zRXJyb3IgPSByZXF1aXJlKCcuL2hlbHBlcnMvaXNBeGlvc0Vycm9yJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gYXhpb3M7XG5cbi8vIEFsbG93IHVzZSBvZiBkZWZhdWx0IGltcG9ydCBzeW50YXggaW4gVHlwZVNjcmlwdFxubW9kdWxlLmV4cG9ydHMuZGVmYXVsdCA9IGF4aW9zO1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///18015\n')},18305:(I,g,t)=>{"use strict";I.exports=t.p+"cbeb7de03c1986470f96.png"},19021:function(module,exports,__webpack_require__){eval(";(function (root, factory) {\n\tif (true) {\n\t\t// CommonJS\n\t\tmodule.exports = exports = factory();\n\t}\n\telse {}\n}(this, function () {\n\n\t/*globals window, global, require*/\n\n\t/**\n\t * CryptoJS core components.\n\t */\n\tvar CryptoJS = CryptoJS || (function (Math, undefined) {\n\n\t var crypto;\n\n\t // Native crypto from window (Browser)\n\t if (typeof window !== 'undefined' && window.crypto) {\n\t crypto = window.crypto;\n\t }\n\n\t // Native crypto in web worker (Browser)\n\t if (typeof self !== 'undefined' && self.crypto) {\n\t crypto = self.crypto;\n\t }\n\n\t // Native crypto from worker\n\t if (typeof globalThis !== 'undefined' && globalThis.crypto) {\n\t crypto = globalThis.crypto;\n\t }\n\n\t // Native (experimental IE 11) crypto from window (Browser)\n\t if (!crypto && typeof window !== 'undefined' && window.msCrypto) {\n\t crypto = window.msCrypto;\n\t }\n\n\t // Native crypto from global (NodeJS)\n\t if (!crypto && typeof __webpack_require__.g !== 'undefined' && __webpack_require__.g.crypto) {\n\t crypto = __webpack_require__.g.crypto;\n\t }\n\n\t // Native crypto import via require (NodeJS)\n\t if (!crypto && \"function\" === 'function') {\n\t try {\n\t crypto = __webpack_require__(28145);\n\t } catch (err) {}\n\t }\n\n\t /*\n\t * Cryptographically secure pseudorandom number generator\n\t *\n\t * As Math.random() is cryptographically not safe to use\n\t */\n\t var cryptoSecureRandomInt = function () {\n\t if (crypto) {\n\t // Use getRandomValues method (Browser)\n\t if (typeof crypto.getRandomValues === 'function') {\n\t try {\n\t return crypto.getRandomValues(new Uint32Array(1))[0];\n\t } catch (err) {}\n\t }\n\n\t // Use randomBytes method (NodeJS)\n\t if (typeof crypto.randomBytes === 'function') {\n\t try {\n\t return crypto.randomBytes(4).readInt32LE();\n\t } catch (err) {}\n\t }\n\t }\n\n\t throw new Error('Native crypto module could not be used to get secure random number.');\n\t };\n\n\t /*\n\t * Local polyfill of Object.create\n\n\t */\n\t var create = Object.create || (function () {\n\t function F() {}\n\n\t return function (obj) {\n\t var subtype;\n\n\t F.prototype = obj;\n\n\t subtype = new F();\n\n\t F.prototype = null;\n\n\t return subtype;\n\t };\n\t }());\n\n\t /**\n\t * CryptoJS namespace.\n\t */\n\t var C = {};\n\n\t /**\n\t * Library namespace.\n\t */\n\t var C_lib = C.lib = {};\n\n\t /**\n\t * Base object for prototypal inheritance.\n\t */\n\t var Base = C_lib.Base = (function () {\n\n\n\t return {\n\t /**\n\t * Creates a new object that inherits from this object.\n\t *\n\t * @param {Object} overrides Properties to copy into the new object.\n\t *\n\t * @return {Object} The new object.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var MyType = CryptoJS.lib.Base.extend({\n\t * field: 'value',\n\t *\n\t * method: function () {\n\t * }\n\t * });\n\t */\n\t extend: function (overrides) {\n\t // Spawn\n\t var subtype = create(this);\n\n\t // Augment\n\t if (overrides) {\n\t subtype.mixIn(overrides);\n\t }\n\n\t // Create default initializer\n\t if (!subtype.hasOwnProperty('init') || this.init === subtype.init) {\n\t subtype.init = function () {\n\t subtype.$super.init.apply(this, arguments);\n\t };\n\t }\n\n\t // Initializer's prototype is the subtype object\n\t subtype.init.prototype = subtype;\n\n\t // Reference supertype\n\t subtype.$super = this;\n\n\t return subtype;\n\t },\n\n\t /**\n\t * Extends this object and runs the init method.\n\t * Arguments to create() will be passed to init().\n\t *\n\t * @return {Object} The new object.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var instance = MyType.create();\n\t */\n\t create: function () {\n\t var instance = this.extend();\n\t instance.init.apply(instance, arguments);\n\n\t return instance;\n\t },\n\n\t /**\n\t * Initializes a newly created object.\n\t * Override this method to add some logic when your objects are created.\n\t *\n\t * @example\n\t *\n\t * var MyType = CryptoJS.lib.Base.extend({\n\t * init: function () {\n\t * // ...\n\t * }\n\t * });\n\t */\n\t init: function () {\n\t },\n\n\t /**\n\t * Copies properties into this object.\n\t *\n\t * @param {Object} properties The properties to mix in.\n\t *\n\t * @example\n\t *\n\t * MyType.mixIn({\n\t * field: 'value'\n\t * });\n\t */\n\t mixIn: function (properties) {\n\t for (var propertyName in properties) {\n\t if (properties.hasOwnProperty(propertyName)) {\n\t this[propertyName] = properties[propertyName];\n\t }\n\t }\n\n\t // IE won't copy toString using the loop above\n\t if (properties.hasOwnProperty('toString')) {\n\t this.toString = properties.toString;\n\t }\n\t },\n\n\t /**\n\t * Creates a copy of this object.\n\t *\n\t * @return {Object} The clone.\n\t *\n\t * @example\n\t *\n\t * var clone = instance.clone();\n\t */\n\t clone: function () {\n\t return this.init.prototype.extend(this);\n\t }\n\t };\n\t }());\n\n\t /**\n\t * An array of 32-bit words.\n\t *\n\t * @property {Array} words The array of 32-bit words.\n\t * @property {number} sigBytes The number of significant bytes in this word array.\n\t */\n\t var WordArray = C_lib.WordArray = Base.extend({\n\t /**\n\t * Initializes a newly created word array.\n\t *\n\t * @param {Array} words (Optional) An array of 32-bit words.\n\t * @param {number} sigBytes (Optional) The number of significant bytes in the words.\n\t *\n\t * @example\n\t *\n\t * var wordArray = CryptoJS.lib.WordArray.create();\n\t * var wordArray = CryptoJS.lib.WordArray.create([0x00010203, 0x04050607]);\n\t * var wordArray = CryptoJS.lib.WordArray.create([0x00010203, 0x04050607], 6);\n\t */\n\t init: function (words, sigBytes) {\n\t words = this.words = words || [];\n\n\t if (sigBytes != undefined) {\n\t this.sigBytes = sigBytes;\n\t } else {\n\t this.sigBytes = words.length * 4;\n\t }\n\t },\n\n\t /**\n\t * Converts this word array to a string.\n\t *\n\t * @param {Encoder} encoder (Optional) The encoding strategy to use. Default: CryptoJS.enc.Hex\n\t *\n\t * @return {string} The stringified word array.\n\t *\n\t * @example\n\t *\n\t * var string = wordArray + '';\n\t * var string = wordArray.toString();\n\t * var string = wordArray.toString(CryptoJS.enc.Utf8);\n\t */\n\t toString: function (encoder) {\n\t return (encoder || Hex).stringify(this);\n\t },\n\n\t /**\n\t * Concatenates a word array to this word array.\n\t *\n\t * @param {WordArray} wordArray The word array to append.\n\t *\n\t * @return {WordArray} This word array.\n\t *\n\t * @example\n\t *\n\t * wordArray1.concat(wordArray2);\n\t */\n\t concat: function (wordArray) {\n\t // Shortcuts\n\t var thisWords = this.words;\n\t var thatWords = wordArray.words;\n\t var thisSigBytes = this.sigBytes;\n\t var thatSigBytes = wordArray.sigBytes;\n\n\t // Clamp excess bits\n\t this.clamp();\n\n\t // Concat\n\t if (thisSigBytes % 4) {\n\t // Copy one byte at a time\n\t for (var i = 0; i < thatSigBytes; i++) {\n\t var thatByte = (thatWords[i >>> 2] >>> (24 - (i % 4) * 8)) & 0xff;\n\t thisWords[(thisSigBytes + i) >>> 2] |= thatByte << (24 - ((thisSigBytes + i) % 4) * 8);\n\t }\n\t } else {\n\t // Copy one word at a time\n\t for (var j = 0; j < thatSigBytes; j += 4) {\n\t thisWords[(thisSigBytes + j) >>> 2] = thatWords[j >>> 2];\n\t }\n\t }\n\t this.sigBytes += thatSigBytes;\n\n\t // Chainable\n\t return this;\n\t },\n\n\t /**\n\t * Removes insignificant bits.\n\t *\n\t * @example\n\t *\n\t * wordArray.clamp();\n\t */\n\t clamp: function () {\n\t // Shortcuts\n\t var words = this.words;\n\t var sigBytes = this.sigBytes;\n\n\t // Clamp\n\t words[sigBytes >>> 2] &= 0xffffffff << (32 - (sigBytes % 4) * 8);\n\t words.length = Math.ceil(sigBytes / 4);\n\t },\n\n\t /**\n\t * Creates a copy of this word array.\n\t *\n\t * @return {WordArray} The clone.\n\t *\n\t * @example\n\t *\n\t * var clone = wordArray.clone();\n\t */\n\t clone: function () {\n\t var clone = Base.clone.call(this);\n\t clone.words = this.words.slice(0);\n\n\t return clone;\n\t },\n\n\t /**\n\t * Creates a word array filled with random bytes.\n\t *\n\t * @param {number} nBytes The number of random bytes to generate.\n\t *\n\t * @return {WordArray} The random word array.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var wordArray = CryptoJS.lib.WordArray.random(16);\n\t */\n\t random: function (nBytes) {\n\t var words = [];\n\n\t for (var i = 0; i < nBytes; i += 4) {\n\t words.push(cryptoSecureRandomInt());\n\t }\n\n\t return new WordArray.init(words, nBytes);\n\t }\n\t });\n\n\t /**\n\t * Encoder namespace.\n\t */\n\t var C_enc = C.enc = {};\n\n\t /**\n\t * Hex encoding strategy.\n\t */\n\t var Hex = C_enc.Hex = {\n\t /**\n\t * Converts a word array to a hex string.\n\t *\n\t * @param {WordArray} wordArray The word array.\n\t *\n\t * @return {string} The hex string.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var hexString = CryptoJS.enc.Hex.stringify(wordArray);\n\t */\n\t stringify: function (wordArray) {\n\t // Shortcuts\n\t var words = wordArray.words;\n\t var sigBytes = wordArray.sigBytes;\n\n\t // Convert\n\t var hexChars = [];\n\t for (var i = 0; i < sigBytes; i++) {\n\t var bite = (words[i >>> 2] >>> (24 - (i % 4) * 8)) & 0xff;\n\t hexChars.push((bite >>> 4).toString(16));\n\t hexChars.push((bite & 0x0f).toString(16));\n\t }\n\n\t return hexChars.join('');\n\t },\n\n\t /**\n\t * Converts a hex string to a word array.\n\t *\n\t * @param {string} hexStr The hex string.\n\t *\n\t * @return {WordArray} The word array.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var wordArray = CryptoJS.enc.Hex.parse(hexString);\n\t */\n\t parse: function (hexStr) {\n\t // Shortcut\n\t var hexStrLength = hexStr.length;\n\n\t // Convert\n\t var words = [];\n\t for (var i = 0; i < hexStrLength; i += 2) {\n\t words[i >>> 3] |= parseInt(hexStr.substr(i, 2), 16) << (24 - (i % 8) * 4);\n\t }\n\n\t return new WordArray.init(words, hexStrLength / 2);\n\t }\n\t };\n\n\t /**\n\t * Latin1 encoding strategy.\n\t */\n\t var Latin1 = C_enc.Latin1 = {\n\t /**\n\t * Converts a word array to a Latin1 string.\n\t *\n\t * @param {WordArray} wordArray The word array.\n\t *\n\t * @return {string} The Latin1 string.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var latin1String = CryptoJS.enc.Latin1.stringify(wordArray);\n\t */\n\t stringify: function (wordArray) {\n\t // Shortcuts\n\t var words = wordArray.words;\n\t var sigBytes = wordArray.sigBytes;\n\n\t // Convert\n\t var latin1Chars = [];\n\t for (var i = 0; i < sigBytes; i++) {\n\t var bite = (words[i >>> 2] >>> (24 - (i % 4) * 8)) & 0xff;\n\t latin1Chars.push(String.fromCharCode(bite));\n\t }\n\n\t return latin1Chars.join('');\n\t },\n\n\t /**\n\t * Converts a Latin1 string to a word array.\n\t *\n\t * @param {string} latin1Str The Latin1 string.\n\t *\n\t * @return {WordArray} The word array.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var wordArray = CryptoJS.enc.Latin1.parse(latin1String);\n\t */\n\t parse: function (latin1Str) {\n\t // Shortcut\n\t var latin1StrLength = latin1Str.length;\n\n\t // Convert\n\t var words = [];\n\t for (var i = 0; i < latin1StrLength; i++) {\n\t words[i >>> 2] |= (latin1Str.charCodeAt(i) & 0xff) << (24 - (i % 4) * 8);\n\t }\n\n\t return new WordArray.init(words, latin1StrLength);\n\t }\n\t };\n\n\t /**\n\t * UTF-8 encoding strategy.\n\t */\n\t var Utf8 = C_enc.Utf8 = {\n\t /**\n\t * Converts a word array to a UTF-8 string.\n\t *\n\t * @param {WordArray} wordArray The word array.\n\t *\n\t * @return {string} The UTF-8 string.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var utf8String = CryptoJS.enc.Utf8.stringify(wordArray);\n\t */\n\t stringify: function (wordArray) {\n\t try {\n\t return decodeURIComponent(escape(Latin1.stringify(wordArray)));\n\t } catch (e) {\n\t throw new Error('Malformed UTF-8 data');\n\t }\n\t },\n\n\t /**\n\t * Converts a UTF-8 string to a word array.\n\t *\n\t * @param {string} utf8Str The UTF-8 string.\n\t *\n\t * @return {WordArray} The word array.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var wordArray = CryptoJS.enc.Utf8.parse(utf8String);\n\t */\n\t parse: function (utf8Str) {\n\t return Latin1.parse(unescape(encodeURIComponent(utf8Str)));\n\t }\n\t };\n\n\t /**\n\t * Abstract buffered block algorithm template.\n\t *\n\t * The property blockSize must be implemented in a concrete subtype.\n\t *\n\t * @property {number} _minBufferSize The number of blocks that should be kept unprocessed in the buffer. Default: 0\n\t */\n\t var BufferedBlockAlgorithm = C_lib.BufferedBlockAlgorithm = Base.extend({\n\t /**\n\t * Resets this block algorithm's data buffer to its initial state.\n\t *\n\t * @example\n\t *\n\t * bufferedBlockAlgorithm.reset();\n\t */\n\t reset: function () {\n\t // Initial values\n\t this._data = new WordArray.init();\n\t this._nDataBytes = 0;\n\t },\n\n\t /**\n\t * Adds new data to this block algorithm's buffer.\n\t *\n\t * @param {WordArray|string} data The data to append. Strings are converted to a WordArray using UTF-8.\n\t *\n\t * @example\n\t *\n\t * bufferedBlockAlgorithm._append('data');\n\t * bufferedBlockAlgorithm._append(wordArray);\n\t */\n\t _append: function (data) {\n\t // Convert string to WordArray, else assume WordArray already\n\t if (typeof data == 'string') {\n\t data = Utf8.parse(data);\n\t }\n\n\t // Append\n\t this._data.concat(data);\n\t this._nDataBytes += data.sigBytes;\n\t },\n\n\t /**\n\t * Processes available data blocks.\n\t *\n\t * This method invokes _doProcessBlock(offset), which must be implemented by a concrete subtype.\n\t *\n\t * @param {boolean} doFlush Whether all blocks and partial blocks should be processed.\n\t *\n\t * @return {WordArray} The processed data.\n\t *\n\t * @example\n\t *\n\t * var processedData = bufferedBlockAlgorithm._process();\n\t * var processedData = bufferedBlockAlgorithm._process(!!'flush');\n\t */\n\t _process: function (doFlush) {\n\t var processedWords;\n\n\t // Shortcuts\n\t var data = this._data;\n\t var dataWords = data.words;\n\t var dataSigBytes = data.sigBytes;\n\t var blockSize = this.blockSize;\n\t var blockSizeBytes = blockSize * 4;\n\n\t // Count blocks ready\n\t var nBlocksReady = dataSigBytes / blockSizeBytes;\n\t if (doFlush) {\n\t // Round up to include partial blocks\n\t nBlocksReady = Math.ceil(nBlocksReady);\n\t } else {\n\t // Round down to include only full blocks,\n\t // less the number of blocks that must remain in the buffer\n\t nBlocksReady = Math.max((nBlocksReady | 0) - this._minBufferSize, 0);\n\t }\n\n\t // Count words ready\n\t var nWordsReady = nBlocksReady * blockSize;\n\n\t // Count bytes ready\n\t var nBytesReady = Math.min(nWordsReady * 4, dataSigBytes);\n\n\t // Process blocks\n\t if (nWordsReady) {\n\t for (var offset = 0; offset < nWordsReady; offset += blockSize) {\n\t // Perform concrete-algorithm logic\n\t this._doProcessBlock(dataWords, offset);\n\t }\n\n\t // Remove processed words\n\t processedWords = dataWords.splice(0, nWordsReady);\n\t data.sigBytes -= nBytesReady;\n\t }\n\n\t // Return processed words\n\t return new WordArray.init(processedWords, nBytesReady);\n\t },\n\n\t /**\n\t * Creates a copy of this object.\n\t *\n\t * @return {Object} The clone.\n\t *\n\t * @example\n\t *\n\t * var clone = bufferedBlockAlgorithm.clone();\n\t */\n\t clone: function () {\n\t var clone = Base.clone.call(this);\n\t clone._data = this._data.clone();\n\n\t return clone;\n\t },\n\n\t _minBufferSize: 0\n\t });\n\n\t /**\n\t * Abstract hasher template.\n\t *\n\t * @property {number} blockSize The number of 32-bit words this hasher operates on. Default: 16 (512 bits)\n\t */\n\t var Hasher = C_lib.Hasher = BufferedBlockAlgorithm.extend({\n\t /**\n\t * Configuration options.\n\t */\n\t cfg: Base.extend(),\n\n\t /**\n\t * Initializes a newly created hasher.\n\t *\n\t * @param {Object} cfg (Optional) The configuration options to use for this hash computation.\n\t *\n\t * @example\n\t *\n\t * var hasher = CryptoJS.algo.SHA256.create();\n\t */\n\t init: function (cfg) {\n\t // Apply config defaults\n\t this.cfg = this.cfg.extend(cfg);\n\n\t // Set initial values\n\t this.reset();\n\t },\n\n\t /**\n\t * Resets this hasher to its initial state.\n\t *\n\t * @example\n\t *\n\t * hasher.reset();\n\t */\n\t reset: function () {\n\t // Reset data buffer\n\t BufferedBlockAlgorithm.reset.call(this);\n\n\t // Perform concrete-hasher logic\n\t this._doReset();\n\t },\n\n\t /**\n\t * Updates this hasher with a message.\n\t *\n\t * @param {WordArray|string} messageUpdate The message to append.\n\t *\n\t * @return {Hasher} This hasher.\n\t *\n\t * @example\n\t *\n\t * hasher.update('message');\n\t * hasher.update(wordArray);\n\t */\n\t update: function (messageUpdate) {\n\t // Append\n\t this._append(messageUpdate);\n\n\t // Update the hash\n\t this._process();\n\n\t // Chainable\n\t return this;\n\t },\n\n\t /**\n\t * Finalizes the hash computation.\n\t * Note that the finalize operation is effectively a destructive, read-once operation.\n\t *\n\t * @param {WordArray|string} messageUpdate (Optional) A final message update.\n\t *\n\t * @return {WordArray} The hash.\n\t *\n\t * @example\n\t *\n\t * var hash = hasher.finalize();\n\t * var hash = hasher.finalize('message');\n\t * var hash = hasher.finalize(wordArray);\n\t */\n\t finalize: function (messageUpdate) {\n\t // Final message update\n\t if (messageUpdate) {\n\t this._append(messageUpdate);\n\t }\n\n\t // Perform concrete-hasher logic\n\t var hash = this._doFinalize();\n\n\t return hash;\n\t },\n\n\t blockSize: 512/32,\n\n\t /**\n\t * Creates a shortcut function to a hasher's object interface.\n\t *\n\t * @param {Hasher} hasher The hasher to create a helper for.\n\t *\n\t * @return {Function} The shortcut function.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var SHA256 = CryptoJS.lib.Hasher._createHelper(CryptoJS.algo.SHA256);\n\t */\n\t _createHelper: function (hasher) {\n\t return function (message, cfg) {\n\t return new hasher.init(cfg).finalize(message);\n\t };\n\t },\n\n\t /**\n\t * Creates a shortcut function to the HMAC's object interface.\n\t *\n\t * @param {Hasher} hasher The hasher to use in this HMAC helper.\n\t *\n\t * @return {Function} The shortcut function.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var HmacSHA256 = CryptoJS.lib.Hasher._createHmacHelper(CryptoJS.algo.SHA256);\n\t */\n\t _createHmacHelper: function (hasher) {\n\t return function (message, key) {\n\t return new C_algo.HMAC.init(hasher, key).finalize(message);\n\t };\n\t }\n\t });\n\n\t /**\n\t * Algorithm namespace.\n\t */\n\t var C_algo = C.algo = {};\n\n\t return C;\n\t}(Math));\n\n\n\treturn CryptoJS;\n\n}));//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMTkwMjEuanMiLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBUUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL2l0Zy1uZXh0Z2VuLWZyb250ZW5kLy4vbm9kZV9tb2R1bGVzL2NyeXB0by1qcy9jb3JlLmpzPzIxYmYiXSwic291cmNlc0NvbnRlbnQiOlsiOyhmdW5jdGlvbiAocm9vdCwgZmFjdG9yeSkge1xuXHRpZiAodHlwZW9mIGV4cG9ydHMgPT09IFwib2JqZWN0XCIpIHtcblx0XHQvLyBDb21tb25KU1xuXHRcdG1vZHVsZS5leHBvcnRzID0gZXhwb3J0cyA9IGZhY3RvcnkoKTtcblx0fVxuXHRlbHNlIGlmICh0eXBlb2YgZGVmaW5lID09PSBcImZ1bmN0aW9uXCIgJiYgZGVmaW5lLmFtZCkge1xuXHRcdC8vIEFNRFxuXHRcdGRlZmluZShbXSwgZmFjdG9yeSk7XG5cdH1cblx0ZWxzZSB7XG5cdFx0Ly8gR2xvYmFsIChicm93c2VyKVxuXHRcdHJvb3QuQ3J5cHRvSlMgPSBmYWN0b3J5KCk7XG5cdH1cbn0odGhpcywgZnVuY3Rpb24gKCkge1xuXG5cdC8qZ2xvYmFscyB3aW5kb3csIGdsb2JhbCwgcmVxdWlyZSovXG5cblx0LyoqXG5cdCAqIENyeXB0b0pTIGNvcmUgY29tcG9uZW50cy5cblx0ICovXG5cdHZhciBDcnlwdG9KUyA9IENyeXB0b0pTIHx8IChmdW5jdGlvbiAoTWF0aCwgdW5kZWZpbmVkKSB7XG5cblx0ICAgIHZhciBjcnlwdG87XG5cblx0ICAgIC8vIE5hdGl2ZSBjcnlwdG8gZnJvbSB3aW5kb3cgKEJyb3dzZXIpXG5cdCAgICBpZiAodHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcgJiYgd2luZG93LmNyeXB0bykge1xuXHQgICAgICAgIGNyeXB0byA9IHdpbmRvdy5jcnlwdG87XG5cdCAgICB9XG5cblx0ICAgIC8vIE5hdGl2ZSBjcnlwdG8gaW4gd2ViIHdvcmtlciAoQnJvd3Nlcilcblx0ICAgIGlmICh0eXBlb2Ygc2VsZiAhPT0gJ3VuZGVmaW5lZCcgJiYgc2VsZi5jcnlwdG8pIHtcblx0ICAgICAgICBjcnlwdG8gPSBzZWxmLmNyeXB0bztcblx0ICAgIH1cblxuXHQgICAgLy8gTmF0aXZlIGNyeXB0byBmcm9tIHdvcmtlclxuXHQgICAgaWYgKHR5cGVvZiBnbG9iYWxUaGlzICE9PSAndW5kZWZpbmVkJyAmJiBnbG9iYWxUaGlzLmNyeXB0bykge1xuXHQgICAgICAgIGNyeXB0byA9IGdsb2JhbFRoaXMuY3J5cHRvO1xuXHQgICAgfVxuXG5cdCAgICAvLyBOYXRpdmUgKGV4cGVyaW1lbnRhbCBJRSAxMSkgY3J5cHRvIGZyb20gd2luZG93IChCcm93c2VyKVxuXHQgICAgaWYgKCFjcnlwdG8gJiYgdHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcgJiYgd2luZG93Lm1zQ3J5cHRvKSB7XG5cdCAgICAgICAgY3J5cHRvID0gd2luZG93Lm1zQ3J5cHRvO1xuXHQgICAgfVxuXG5cdCAgICAvLyBOYXRpdmUgY3J5cHRvIGZyb20gZ2xvYmFsIChOb2RlSlMpXG5cdCAgICBpZiAoIWNyeXB0byAmJiB0eXBlb2YgZ2xvYmFsICE9PSAndW5kZWZpbmVkJyAmJiBnbG9iYWwuY3J5cHRvKSB7XG5cdCAgICAgICAgY3J5cHRvID0gZ2xvYmFsLmNyeXB0bztcblx0ICAgIH1cblxuXHQgICAgLy8gTmF0aXZlIGNyeXB0byBpbXBvcnQgdmlhIHJlcXVpcmUgKE5vZGVKUylcblx0ICAgIGlmICghY3J5cHRvICYmIHR5cGVvZiByZXF1aXJlID09PSAnZnVuY3Rpb24nKSB7XG5cdCAgICAgICAgdHJ5IHtcblx0ICAgICAgICAgICAgY3J5cHRvID0gcmVxdWlyZSgnY3J5cHRvJyk7XG5cdCAgICAgICAgfSBjYXRjaCAoZXJyKSB7fVxuXHQgICAgfVxuXG5cdCAgICAvKlxuXHQgICAgICogQ3J5cHRvZ3JhcGhpY2FsbHkgc2VjdXJlIHBzZXVkb3JhbmRvbSBudW1iZXIgZ2VuZXJhdG9yXG5cdCAgICAgKlxuXHQgICAgICogQXMgTWF0aC5yYW5kb20oKSBpcyBjcnlwdG9ncmFwaGljYWxseSBub3Qgc2FmZSB0byB1c2Vcblx0ICAgICAqL1xuXHQgICAgdmFyIGNyeXB0b1NlY3VyZVJhbmRvbUludCA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICBpZiAoY3J5cHRvKSB7XG5cdCAgICAgICAgICAgIC8vIFVzZSBnZXRSYW5kb21WYWx1ZXMgbWV0aG9kIChCcm93c2VyKVxuXHQgICAgICAgICAgICBpZiAodHlwZW9mIGNyeXB0by5nZXRSYW5kb21WYWx1ZXMgPT09ICdmdW5jdGlvbicpIHtcblx0ICAgICAgICAgICAgICAgIHRyeSB7XG5cdCAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNyeXB0by5nZXRSYW5kb21WYWx1ZXMobmV3IFVpbnQzMkFycmF5KDEpKVswXTtcblx0ICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGVycikge31cblx0ICAgICAgICAgICAgfVxuXG5cdCAgICAgICAgICAgIC8vIFVzZSByYW5kb21CeXRlcyBtZXRob2QgKE5vZGVKUylcblx0ICAgICAgICAgICAgaWYgKHR5cGVvZiBjcnlwdG8ucmFuZG9tQnl0ZXMgPT09ICdmdW5jdGlvbicpIHtcblx0ICAgICAgICAgICAgICAgIHRyeSB7XG5cdCAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNyeXB0by5yYW5kb21CeXRlcyg0KS5yZWFkSW50MzJMRSgpO1xuXHQgICAgICAgICAgICAgICAgfSBjYXRjaCAoZXJyKSB7fVxuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgfVxuXG5cdCAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdOYXRpdmUgY3J5cHRvIG1vZHVsZSBjb3VsZCBub3QgYmUgdXNlZCB0byBnZXQgc2VjdXJlIHJhbmRvbSBudW1iZXIuJyk7XG5cdCAgICB9O1xuXG5cdCAgICAvKlxuXHQgICAgICogTG9jYWwgcG9seWZpbGwgb2YgT2JqZWN0LmNyZWF0ZVxuXG5cdCAgICAgKi9cblx0ICAgIHZhciBjcmVhdGUgPSBPYmplY3QuY3JlYXRlIHx8IChmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgZnVuY3Rpb24gRigpIHt9XG5cblx0ICAgICAgICByZXR1cm4gZnVuY3Rpb24gKG9iaikge1xuXHQgICAgICAgICAgICB2YXIgc3VidHlwZTtcblxuXHQgICAgICAgICAgICBGLnByb3RvdHlwZSA9IG9iajtcblxuXHQgICAgICAgICAgICBzdWJ0eXBlID0gbmV3IEYoKTtcblxuXHQgICAgICAgICAgICBGLnByb3RvdHlwZSA9IG51bGw7XG5cblx0ICAgICAgICAgICAgcmV0dXJuIHN1YnR5cGU7XG5cdCAgICAgICAgfTtcblx0ICAgIH0oKSk7XG5cblx0ICAgIC8qKlxuXHQgICAgICogQ3J5cHRvSlMgbmFtZXNwYWNlLlxuXHQgICAgICovXG5cdCAgICB2YXIgQyA9IHt9O1xuXG5cdCAgICAvKipcblx0ICAgICAqIExpYnJhcnkgbmFtZXNwYWNlLlxuXHQgICAgICovXG5cdCAgICB2YXIgQ19saWIgPSBDLmxpYiA9IHt9O1xuXG5cdCAgICAvKipcblx0ICAgICAqIEJhc2Ugb2JqZWN0IGZvciBwcm90b3R5cGFsIGluaGVyaXRhbmNlLlxuXHQgICAgICovXG5cdCAgICB2YXIgQmFzZSA9IENfbGliLkJhc2UgPSAoZnVuY3Rpb24gKCkge1xuXG5cblx0ICAgICAgICByZXR1cm4ge1xuXHQgICAgICAgICAgICAvKipcblx0ICAgICAgICAgICAgICogQ3JlYXRlcyBhIG5ldyBvYmplY3QgdGhhdCBpbmhlcml0cyBmcm9tIHRoaXMgb2JqZWN0LlxuXHQgICAgICAgICAgICAgKlxuXHQgICAgICAgICAgICAgKiBAcGFyYW0ge09iamVjdH0gb3ZlcnJpZGVzIFByb3BlcnRpZXMgdG8gY29weSBpbnRvIHRoZSBuZXcgb2JqZWN0LlxuXHQgICAgICAgICAgICAgKlxuXHQgICAgICAgICAgICAgKiBAcmV0dXJuIHtPYmplY3R9IFRoZSBuZXcgb2JqZWN0LlxuXHQgICAgICAgICAgICAgKlxuXHQgICAgICAgICAgICAgKiBAc3RhdGljXG5cdCAgICAgICAgICAgICAqXG5cdCAgICAgICAgICAgICAqIEBleGFtcGxlXG5cdCAgICAgICAgICAgICAqXG5cdCAgICAgICAgICAgICAqICAgICB2YXIgTXlUeXBlID0gQ3J5cHRvSlMubGliLkJhc2UuZXh0ZW5kKHtcblx0ICAgICAgICAgICAgICogICAgICAgICBmaWVsZDogJ3ZhbHVlJyxcblx0ICAgICAgICAgICAgICpcblx0ICAgICAgICAgICAgICogICAgICAgICBtZXRob2Q6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgICogICAgICAgICB9XG5cdCAgICAgICAgICAgICAqICAgICB9KTtcblx0ICAgICAgICAgICAgICovXG5cdCAgICAgICAgICAgIGV4dGVuZDogZnVuY3Rpb24gKG92ZXJyaWRlcykge1xuXHQgICAgICAgICAgICAgICAgLy8gU3Bhd25cblx0ICAgICAgICAgICAgICAgIHZhciBzdWJ0eXBlID0gY3JlYXRlKHRoaXMpO1xuXG5cdCAgICAgICAgICAgICAgICAvLyBBdWdtZW50XG5cdCAgICAgICAgICAgICAgICBpZiAob3ZlcnJpZGVzKSB7XG5cdCAgICAgICAgICAgICAgICAgICAgc3VidHlwZS5taXhJbihvdmVycmlkZXMpO1xuXHQgICAgICAgICAgICAgICAgfVxuXG5cdCAgICAgICAgICAgICAgICAvLyBDcmVhdGUgZGVmYXVsdCBpbml0aWFsaXplclxuXHQgICAgICAgICAgICAgICAgaWYgKCFzdWJ0eXBlLmhhc093blByb3BlcnR5KCdpbml0JykgfHwgdGhpcy5pbml0ID09PSBzdWJ0eXBlLmluaXQpIHtcblx0ICAgICAgICAgICAgICAgICAgICBzdWJ0eXBlLmluaXQgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgICAgICAgICAgICAgIHN1YnR5cGUuJHN1cGVyLmluaXQuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcblx0ICAgICAgICAgICAgICAgICAgICB9O1xuXHQgICAgICAgICAgICAgICAgfVxuXG5cdCAgICAgICAgICAgICAgICAvLyBJbml0aWFsaXplcidzIHByb3RvdHlwZSBpcyB0aGUgc3VidHlwZSBvYmplY3Rcblx0ICAgICAgICAgICAgICAgIHN1YnR5cGUuaW5pdC5wcm90b3R5cGUgPSBzdWJ0eXBlO1xuXG5cdCAgICAgICAgICAgICAgICAvLyBSZWZlcmVuY2Ugc3VwZXJ0eXBlXG5cdCAgICAgICAgICAgICAgICBzdWJ0eXBlLiRzdXBlciA9IHRoaXM7XG5cblx0ICAgICAgICAgICAgICAgIHJldHVybiBzdWJ0eXBlO1xuXHQgICAgICAgICAgICB9LFxuXG5cdCAgICAgICAgICAgIC8qKlxuXHQgICAgICAgICAgICAgKiBFeHRlbmRzIHRoaXMgb2JqZWN0IGFuZCBydW5zIHRoZSBpbml0IG1ldGhvZC5cblx0ICAgICAgICAgICAgICogQXJndW1lbnRzIHRvIGNyZWF0ZSgpIHdpbGwgYmUgcGFzc2VkIHRvIGluaXQoKS5cblx0ICAgICAgICAgICAgICpcblx0ICAgICAgICAgICAgICogQHJldHVybiB7T2JqZWN0fSBUaGUgbmV3IG9iamVjdC5cblx0ICAgICAgICAgICAgICpcblx0ICAgICAgICAgICAgICogQHN0YXRpY1xuXHQgICAgICAgICAgICAgKlxuXHQgICAgICAgICAgICAgKiBAZXhhbXBsZVxuXHQgICAgICAgICAgICAgKlxuXHQgICAgICAgICAgICAgKiAgICAgdmFyIGluc3RhbmNlID0gTXlUeXBlLmNyZWF0ZSgpO1xuXHQgICAgICAgICAgICAgKi9cblx0ICAgICAgICAgICAgY3JlYXRlOiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgICAgICB2YXIgaW5zdGFuY2UgPSB0aGlzLmV4dGVuZCgpO1xuXHQgICAgICAgICAgICAgICAgaW5zdGFuY2UuaW5pdC5hcHBseShpbnN0YW5jZSwgYXJndW1lbnRzKTtcblxuXHQgICAgICAgICAgICAgICAgcmV0dXJuIGluc3RhbmNlO1xuXHQgICAgICAgICAgICB9LFxuXG5cdCAgICAgICAgICAgIC8qKlxuXHQgICAgICAgICAgICAgKiBJbml0aWFsaXplcyBhIG5ld2x5IGNyZWF0ZWQgb2JqZWN0LlxuXHQgICAgICAgICAgICAgKiBPdmVycmlkZSB0aGlzIG1ldGhvZCB0byBhZGQgc29tZSBsb2dpYyB3aGVuIHlvdXIgb2JqZWN0cyBhcmUgY3JlYXRlZC5cblx0ICAgICAgICAgICAgICpcblx0ICAgICAgICAgICAgICogQGV4YW1wbGVcblx0ICAgICAgICAgICAgICpcblx0ICAgICAgICAgICAgICogICAgIHZhciBNeVR5cGUgPSBDcnlwdG9KUy5saWIuQmFzZS5leHRlbmQoe1xuXHQgICAgICAgICAgICAgKiAgICAgICAgIGluaXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgICogICAgICAgICAgICAgLy8gLi4uXG5cdCAgICAgICAgICAgICAqICAgICAgICAgfVxuXHQgICAgICAgICAgICAgKiAgICAgfSk7XG5cdCAgICAgICAgICAgICAqL1xuXHQgICAgICAgICAgICBpbml0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIH0sXG5cblx0ICAgICAgICAgICAgLyoqXG5cdCAgICAgICAgICAgICAqIENvcGllcyBwcm9wZXJ0aWVzIGludG8gdGhpcyBvYmplY3QuXG5cdCAgICAgICAgICAgICAqXG5cdCAgICAgICAgICAgICAqIEBwYXJhbSB7T2JqZWN0fSBwcm9wZXJ0aWVzIFRoZSBwcm9wZXJ0aWVzIHRvIG1peCBpbi5cblx0ICAgICAgICAgICAgICpcblx0ICAgICAgICAgICAgICogQGV4YW1wbGVcblx0ICAgICAgICAgICAgICpcblx0ICAgICAgICAgICAgICogICAgIE15VHlwZS5taXhJbih7XG5cdCAgICAgICAgICAgICAqICAgICAgICAgZmllbGQ6ICd2YWx1ZSdcblx0ICAgICAgICAgICAgICogICAgIH0pO1xuXHQgICAgICAgICAgICAgKi9cblx0ICAgICAgICAgICAgbWl4SW46IGZ1bmN0aW9uIChwcm9wZXJ0aWVzKSB7XG5cdCAgICAgICAgICAgICAgICBmb3IgKHZhciBwcm9wZXJ0eU5hbWUgaW4gcHJvcGVydGllcykge1xuXHQgICAgICAgICAgICAgICAgICAgIGlmIChwcm9wZXJ0aWVzLmhhc093blByb3BlcnR5KHByb3BlcnR5TmFtZSkpIHtcblx0ICAgICAgICAgICAgICAgICAgICAgICAgdGhpc1twcm9wZXJ0eU5hbWVdID0gcHJvcGVydGllc1twcm9wZXJ0eU5hbWVdO1xuXHQgICAgICAgICAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgICAgIH1cblxuXHQgICAgICAgICAgICAgICAgLy8gSUUgd29uJ3QgY29weSB0b1N0cmluZyB1c2luZyB0aGUgbG9vcCBhYm92ZVxuXHQgICAgICAgICAgICAgICAgaWYgKHByb3BlcnRpZXMuaGFzT3duUHJvcGVydHkoJ3RvU3RyaW5nJykpIHtcblx0ICAgICAgICAgICAgICAgICAgICB0aGlzLnRvU3RyaW5nID0gcHJvcGVydGllcy50b1N0cmluZztcblx0ICAgICAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgfSxcblxuXHQgICAgICAgICAgICAvKipcblx0ICAgICAgICAgICAgICogQ3JlYXRlcyBhIGNvcHkgb2YgdGhpcyBvYmplY3QuXG5cdCAgICAgICAgICAgICAqXG5cdCAgICAgICAgICAgICAqIEByZXR1cm4ge09iamVjdH0gVGhlIGNsb25lLlxuXHQgICAgICAgICAgICAgKlxuXHQgICAgICAgICAgICAgKiBAZXhhbXBsZVxuXHQgICAgICAgICAgICAgKlxuXHQgICAgICAgICAgICAgKiAgICAgdmFyIGNsb25lID0gaW5zdGFuY2UuY2xvbmUoKTtcblx0ICAgICAgICAgICAgICovXG5cdCAgICAgICAgICAgIGNsb25lOiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5pbml0LnByb3RvdHlwZS5leHRlbmQodGhpcyk7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICB9O1xuXHQgICAgfSgpKTtcblxuXHQgICAgLyoqXG5cdCAgICAgKiBBbiBhcnJheSBvZiAzMi1iaXQgd29yZHMuXG5cdCAgICAgKlxuXHQgICAgICogQHByb3BlcnR5IHtBcnJheX0gd29yZHMgVGhlIGFycmF5IG9mIDMyLWJpdCB3b3Jkcy5cblx0ICAgICAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBzaWdCeXRlcyBUaGUgbnVtYmVyIG9mIHNpZ25pZmljYW50IGJ5dGVzIGluIHRoaXMgd29yZCBhcnJheS5cblx0ICAgICAqL1xuXHQgICAgdmFyIFdvcmRBcnJheSA9IENfbGliLldvcmRBcnJheSA9IEJhc2UuZXh0ZW5kKHtcblx0ICAgICAgICAvKipcblx0ICAgICAgICAgKiBJbml0aWFsaXplcyBhIG5ld2x5IGNyZWF0ZWQgd29yZCBhcnJheS5cblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqIEBwYXJhbSB7QXJyYXl9IHdvcmRzIChPcHRpb25hbCkgQW4gYXJyYXkgb2YgMzItYml0IHdvcmRzLlxuXHQgICAgICAgICAqIEBwYXJhbSB7bnVtYmVyfSBzaWdCeXRlcyAoT3B0aW9uYWwpIFRoZSBudW1iZXIgb2Ygc2lnbmlmaWNhbnQgYnl0ZXMgaW4gdGhlIHdvcmRzLlxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogQGV4YW1wbGVcblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqICAgICB2YXIgd29yZEFycmF5ID0gQ3J5cHRvSlMubGliLldvcmRBcnJheS5jcmVhdGUoKTtcblx0ICAgICAgICAgKiAgICAgdmFyIHdvcmRBcnJheSA9IENyeXB0b0pTLmxpYi5Xb3JkQXJyYXkuY3JlYXRlKFsweDAwMDEwMjAzLCAweDA0MDUwNjA3XSk7XG5cdCAgICAgICAgICogICAgIHZhciB3b3JkQXJyYXkgPSBDcnlwdG9KUy5saWIuV29yZEFycmF5LmNyZWF0ZShbMHgwMDAxMDIwMywgMHgwNDA1MDYwN10sIDYpO1xuXHQgICAgICAgICAqL1xuXHQgICAgICAgIGluaXQ6IGZ1bmN0aW9uICh3b3Jkcywgc2lnQnl0ZXMpIHtcblx0ICAgICAgICAgICAgd29yZHMgPSB0aGlzLndvcmRzID0gd29yZHMgfHwgW107XG5cblx0ICAgICAgICAgICAgaWYgKHNpZ0J5dGVzICE9IHVuZGVmaW5lZCkge1xuXHQgICAgICAgICAgICAgICAgdGhpcy5zaWdCeXRlcyA9IHNpZ0J5dGVzO1xuXHQgICAgICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICAgICAgdGhpcy5zaWdCeXRlcyA9IHdvcmRzLmxlbmd0aCAqIDQ7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICB9LFxuXG5cdCAgICAgICAgLyoqXG5cdCAgICAgICAgICogQ29udmVydHMgdGhpcyB3b3JkIGFycmF5IHRvIGEgc3RyaW5nLlxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogQHBhcmFtIHtFbmNvZGVyfSBlbmNvZGVyIChPcHRpb25hbCkgVGhlIGVuY29kaW5nIHN0cmF0ZWd5IHRvIHVzZS4gRGVmYXVsdDogQ3J5cHRvSlMuZW5jLkhleFxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogQHJldHVybiB7c3RyaW5nfSBUaGUgc3RyaW5naWZpZWQgd29yZCBhcnJheS5cblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqIEBleGFtcGxlXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiAgICAgdmFyIHN0cmluZyA9IHdvcmRBcnJheSArICcnO1xuXHQgICAgICAgICAqICAgICB2YXIgc3RyaW5nID0gd29yZEFycmF5LnRvU3RyaW5nKCk7XG5cdCAgICAgICAgICogICAgIHZhciBzdHJpbmcgPSB3b3JkQXJyYXkudG9TdHJpbmcoQ3J5cHRvSlMuZW5jLlV0ZjgpO1xuXHQgICAgICAgICAqL1xuXHQgICAgICAgIHRvU3RyaW5nOiBmdW5jdGlvbiAoZW5jb2Rlcikge1xuXHQgICAgICAgICAgICByZXR1cm4gKGVuY29kZXIgfHwgSGV4KS5zdHJpbmdpZnkodGhpcyk7XG5cdCAgICAgICAgfSxcblxuXHQgICAgICAgIC8qKlxuXHQgICAgICAgICAqIENvbmNhdGVuYXRlcyBhIHdvcmQgYXJyYXkgdG8gdGhpcyB3b3JkIGFycmF5LlxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogQHBhcmFtIHtXb3JkQXJyYXl9IHdvcmRBcnJheSBUaGUgd29yZCBhcnJheSB0byBhcHBlbmQuXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAcmV0dXJuIHtXb3JkQXJyYXl9IFRoaXMgd29yZCBhcnJheS5cblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqIEBleGFtcGxlXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiAgICAgd29yZEFycmF5MS5jb25jYXQod29yZEFycmF5Mik7XG5cdCAgICAgICAgICovXG5cdCAgICAgICAgY29uY2F0OiBmdW5jdGlvbiAod29yZEFycmF5KSB7XG5cdCAgICAgICAgICAgIC8vIFNob3J0Y3V0c1xuXHQgICAgICAgICAgICB2YXIgdGhpc1dvcmRzID0gdGhpcy53b3Jkcztcblx0ICAgICAgICAgICAgdmFyIHRoYXRXb3JkcyA9IHdvcmRBcnJheS53b3Jkcztcblx0ICAgICAgICAgICAgdmFyIHRoaXNTaWdCeXRlcyA9IHRoaXMuc2lnQnl0ZXM7XG5cdCAgICAgICAgICAgIHZhciB0aGF0U2lnQnl0ZXMgPSB3b3JkQXJyYXkuc2lnQnl0ZXM7XG5cblx0ICAgICAgICAgICAgLy8gQ2xhbXAgZXhjZXNzIGJpdHNcblx0ICAgICAgICAgICAgdGhpcy5jbGFtcCgpO1xuXG5cdCAgICAgICAgICAgIC8vIENvbmNhdFxuXHQgICAgICAgICAgICBpZiAodGhpc1NpZ0J5dGVzICUgNCkge1xuXHQgICAgICAgICAgICAgICAgLy8gQ29weSBvbmUgYnl0ZSBhdCBhIHRpbWVcblx0ICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhhdFNpZ0J5dGVzOyBpKyspIHtcblx0ICAgICAgICAgICAgICAgICAgICB2YXIgdGhhdEJ5dGUgPSAodGhhdFdvcmRzW2kgPj4+IDJdID4+PiAoMjQgLSAoaSAlIDQpICogOCkpICYgMHhmZjtcblx0ICAgICAgICAgICAgICAgICAgICB0aGlzV29yZHNbKHRoaXNTaWdCeXRlcyArIGkpID4+PiAyXSB8PSB0aGF0Qnl0ZSA8PCAoMjQgLSAoKHRoaXNTaWdCeXRlcyArIGkpICUgNCkgKiA4KTtcblx0ICAgICAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgICAgICAgIC8vIENvcHkgb25lIHdvcmQgYXQgYSB0aW1lXG5cdCAgICAgICAgICAgICAgICBmb3IgKHZhciBqID0gMDsgaiA8IHRoYXRTaWdCeXRlczsgaiArPSA0KSB7XG5cdCAgICAgICAgICAgICAgICAgICAgdGhpc1dvcmRzWyh0aGlzU2lnQnl0ZXMgKyBqKSA+Pj4gMl0gPSB0aGF0V29yZHNbaiA+Pj4gMl07XG5cdCAgICAgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgdGhpcy5zaWdCeXRlcyArPSB0aGF0U2lnQnl0ZXM7XG5cblx0ICAgICAgICAgICAgLy8gQ2hhaW5hYmxlXG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgICAgIH0sXG5cblx0ICAgICAgICAvKipcblx0ICAgICAgICAgKiBSZW1vdmVzIGluc2lnbmlmaWNhbnQgYml0cy5cblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqIEBleGFtcGxlXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiAgICAgd29yZEFycmF5LmNsYW1wKCk7XG5cdCAgICAgICAgICovXG5cdCAgICAgICAgY2xhbXA6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgLy8gU2hvcnRjdXRzXG5cdCAgICAgICAgICAgIHZhciB3b3JkcyA9IHRoaXMud29yZHM7XG5cdCAgICAgICAgICAgIHZhciBzaWdCeXRlcyA9IHRoaXMuc2lnQnl0ZXM7XG5cblx0ICAgICAgICAgICAgLy8gQ2xhbXBcblx0ICAgICAgICAgICAgd29yZHNbc2lnQnl0ZXMgPj4+IDJdICY9IDB4ZmZmZmZmZmYgPDwgKDMyIC0gKHNpZ0J5dGVzICUgNCkgKiA4KTtcblx0ICAgICAgICAgICAgd29yZHMubGVuZ3RoID0gTWF0aC5jZWlsKHNpZ0J5dGVzIC8gNCk7XG5cdCAgICAgICAgfSxcblxuXHQgICAgICAgIC8qKlxuXHQgICAgICAgICAqIENyZWF0ZXMgYSBjb3B5IG9mIHRoaXMgd29yZCBhcnJheS5cblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqIEByZXR1cm4ge1dvcmRBcnJheX0gVGhlIGNsb25lLlxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogQGV4YW1wbGVcblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqICAgICB2YXIgY2xvbmUgPSB3b3JkQXJyYXkuY2xvbmUoKTtcblx0ICAgICAgICAgKi9cblx0ICAgICAgICBjbG9uZTogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICB2YXIgY2xvbmUgPSBCYXNlLmNsb25lLmNhbGwodGhpcyk7XG5cdCAgICAgICAgICAgIGNsb25lLndvcmRzID0gdGhpcy53b3Jkcy5zbGljZSgwKTtcblxuXHQgICAgICAgICAgICByZXR1cm4gY2xvbmU7XG5cdCAgICAgICAgfSxcblxuXHQgICAgICAgIC8qKlxuXHQgICAgICAgICAqIENyZWF0ZXMgYSB3b3JkIGFycmF5IGZpbGxlZCB3aXRoIHJhbmRvbSBieXRlcy5cblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqIEBwYXJhbSB7bnVtYmVyfSBuQnl0ZXMgVGhlIG51bWJlciBvZiByYW5kb20gYnl0ZXMgdG8gZ2VuZXJhdGUuXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAcmV0dXJuIHtXb3JkQXJyYXl9IFRoZSByYW5kb20gd29yZCBhcnJheS5cblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqIEBzdGF0aWNcblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqIEBleGFtcGxlXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiAgICAgdmFyIHdvcmRBcnJheSA9IENyeXB0b0pTLmxpYi5Xb3JkQXJyYXkucmFuZG9tKDE2KTtcblx0ICAgICAgICAgKi9cblx0ICAgICAgICByYW5kb206IGZ1bmN0aW9uIChuQnl0ZXMpIHtcblx0ICAgICAgICAgICAgdmFyIHdvcmRzID0gW107XG5cblx0ICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBuQnl0ZXM7IGkgKz0gNCkge1xuXHQgICAgICAgICAgICAgICAgd29yZHMucHVzaChjcnlwdG9TZWN1cmVSYW5kb21JbnQoKSk7XG5cdCAgICAgICAgICAgIH1cblxuXHQgICAgICAgICAgICByZXR1cm4gbmV3IFdvcmRBcnJheS5pbml0KHdvcmRzLCBuQnl0ZXMpO1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXG5cdCAgICAvKipcblx0ICAgICAqIEVuY29kZXIgbmFtZXNwYWNlLlxuXHQgICAgICovXG5cdCAgICB2YXIgQ19lbmMgPSBDLmVuYyA9IHt9O1xuXG5cdCAgICAvKipcblx0ICAgICAqIEhleCBlbmNvZGluZyBzdHJhdGVneS5cblx0ICAgICAqL1xuXHQgICAgdmFyIEhleCA9IENfZW5jLkhleCA9IHtcblx0ICAgICAgICAvKipcblx0ICAgICAgICAgKiBDb252ZXJ0cyBhIHdvcmQgYXJyYXkgdG8gYSBoZXggc3RyaW5nLlxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogQHBhcmFtIHtXb3JkQXJyYXl9IHdvcmRBcnJheSBUaGUgd29yZCBhcnJheS5cblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqIEByZXR1cm4ge3N0cmluZ30gVGhlIGhleCBzdHJpbmcuXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAc3RhdGljXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAZXhhbXBsZVxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogICAgIHZhciBoZXhTdHJpbmcgPSBDcnlwdG9KUy5lbmMuSGV4LnN0cmluZ2lmeSh3b3JkQXJyYXkpO1xuXHQgICAgICAgICAqL1xuXHQgICAgICAgIHN0cmluZ2lmeTogZnVuY3Rpb24gKHdvcmRBcnJheSkge1xuXHQgICAgICAgICAgICAvLyBTaG9ydGN1dHNcblx0ICAgICAgICAgICAgdmFyIHdvcmRzID0gd29yZEFycmF5LndvcmRzO1xuXHQgICAgICAgICAgICB2YXIgc2lnQnl0ZXMgPSB3b3JkQXJyYXkuc2lnQnl0ZXM7XG5cblx0ICAgICAgICAgICAgLy8gQ29udmVydFxuXHQgICAgICAgICAgICB2YXIgaGV4Q2hhcnMgPSBbXTtcblx0ICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBzaWdCeXRlczsgaSsrKSB7XG5cdCAgICAgICAgICAgICAgICB2YXIgYml0ZSA9ICh3b3Jkc1tpID4+PiAyXSA+Pj4gKDI0IC0gKGkgJSA0KSAqIDgpKSAmIDB4ZmY7XG5cdCAgICAgICAgICAgICAgICBoZXhDaGFycy5wdXNoKChiaXRlID4+PiA0KS50b1N0cmluZygxNikpO1xuXHQgICAgICAgICAgICAgICAgaGV4Q2hhcnMucHVzaCgoYml0ZSAmIDB4MGYpLnRvU3RyaW5nKDE2KSk7XG5cdCAgICAgICAgICAgIH1cblxuXHQgICAgICAgICAgICByZXR1cm4gaGV4Q2hhcnMuam9pbignJyk7XG5cdCAgICAgICAgfSxcblxuXHQgICAgICAgIC8qKlxuXHQgICAgICAgICAqIENvbnZlcnRzIGEgaGV4IHN0cmluZyB0byBhIHdvcmQgYXJyYXkuXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAcGFyYW0ge3N0cmluZ30gaGV4U3RyIFRoZSBoZXggc3RyaW5nLlxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogQHJldHVybiB7V29yZEFycmF5fSBUaGUgd29yZCBhcnJheS5cblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqIEBzdGF0aWNcblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqIEBleGFtcGxlXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiAgICAgdmFyIHdvcmRBcnJheSA9IENyeXB0b0pTLmVuYy5IZXgucGFyc2UoaGV4U3RyaW5nKTtcblx0ICAgICAgICAgKi9cblx0ICAgICAgICBwYXJzZTogZnVuY3Rpb24gKGhleFN0cikge1xuXHQgICAgICAgICAgICAvLyBTaG9ydGN1dFxuXHQgICAgICAgICAgICB2YXIgaGV4U3RyTGVuZ3RoID0gaGV4U3RyLmxlbmd0aDtcblxuXHQgICAgICAgICAgICAvLyBDb252ZXJ0XG5cdCAgICAgICAgICAgIHZhciB3b3JkcyA9IFtdO1xuXHQgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGhleFN0ckxlbmd0aDsgaSArPSAyKSB7XG5cdCAgICAgICAgICAgICAgICB3b3Jkc1tpID4+PiAzXSB8PSBwYXJzZUludChoZXhTdHIuc3Vic3RyKGksIDIpLCAxNikgPDwgKDI0IC0gKGkgJSA4KSAqIDQpO1xuXHQgICAgICAgICAgICB9XG5cblx0ICAgICAgICAgICAgcmV0dXJuIG5ldyBXb3JkQXJyYXkuaW5pdCh3b3JkcywgaGV4U3RyTGVuZ3RoIC8gMik7XG5cdCAgICAgICAgfVxuXHQgICAgfTtcblxuXHQgICAgLyoqXG5cdCAgICAgKiBMYXRpbjEgZW5jb2Rpbmcgc3RyYXRlZ3kuXG5cdCAgICAgKi9cblx0ICAgIHZhciBMYXRpbjEgPSBDX2VuYy5MYXRpbjEgPSB7XG5cdCAgICAgICAgLyoqXG5cdCAgICAgICAgICogQ29udmVydHMgYSB3b3JkIGFycmF5IHRvIGEgTGF0aW4xIHN0cmluZy5cblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqIEBwYXJhbSB7V29yZEFycmF5fSB3b3JkQXJyYXkgVGhlIHdvcmQgYXJyYXkuXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAcmV0dXJuIHtzdHJpbmd9IFRoZSBMYXRpbjEgc3RyaW5nLlxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogQHN0YXRpY1xuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogQGV4YW1wbGVcblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqICAgICB2YXIgbGF0aW4xU3RyaW5nID0gQ3J5cHRvSlMuZW5jLkxhdGluMS5zdHJpbmdpZnkod29yZEFycmF5KTtcblx0ICAgICAgICAgKi9cblx0ICAgICAgICBzdHJpbmdpZnk6IGZ1bmN0aW9uICh3b3JkQXJyYXkpIHtcblx0ICAgICAgICAgICAgLy8gU2hvcnRjdXRzXG5cdCAgICAgICAgICAgIHZhciB3b3JkcyA9IHdvcmRBcnJheS53b3Jkcztcblx0ICAgICAgICAgICAgdmFyIHNpZ0J5dGVzID0gd29yZEFycmF5LnNpZ0J5dGVzO1xuXG5cdCAgICAgICAgICAgIC8vIENvbnZlcnRcblx0ICAgICAgICAgICAgdmFyIGxhdGluMUNoYXJzID0gW107XG5cdCAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgc2lnQnl0ZXM7IGkrKykge1xuXHQgICAgICAgICAgICAgICAgdmFyIGJpdGUgPSAod29yZHNbaSA+Pj4gMl0gPj4+ICgyNCAtIChpICUgNCkgKiA4KSkgJiAweGZmO1xuXHQgICAgICAgICAgICAgICAgbGF0aW4xQ2hhcnMucHVzaChTdHJpbmcuZnJvbUNoYXJDb2RlKGJpdGUpKTtcblx0ICAgICAgICAgICAgfVxuXG5cdCAgICAgICAgICAgIHJldHVybiBsYXRpbjFDaGFycy5qb2luKCcnKTtcblx0ICAgICAgICB9LFxuXG5cdCAgICAgICAgLyoqXG5cdCAgICAgICAgICogQ29udmVydHMgYSBMYXRpbjEgc3RyaW5nIHRvIGEgd29yZCBhcnJheS5cblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqIEBwYXJhbSB7c3RyaW5nfSBsYXRpbjFTdHIgVGhlIExhdGluMSBzdHJpbmcuXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAcmV0dXJuIHtXb3JkQXJyYXl9IFRoZSB3b3JkIGFycmF5LlxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogQHN0YXRpY1xuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogQGV4YW1wbGVcblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqICAgICB2YXIgd29yZEFycmF5ID0gQ3J5cHRvSlMuZW5jLkxhdGluMS5wYXJzZShsYXRpbjFTdHJpbmcpO1xuXHQgICAgICAgICAqL1xuXHQgICAgICAgIHBhcnNlOiBmdW5jdGlvbiAobGF0aW4xU3RyKSB7XG5cdCAgICAgICAgICAgIC8vIFNob3J0Y3V0XG5cdCAgICAgICAgICAgIHZhciBsYXRpbjFTdHJMZW5ndGggPSBsYXRpbjFTdHIubGVuZ3RoO1xuXG5cdCAgICAgICAgICAgIC8vIENvbnZlcnRcblx0ICAgICAgICAgICAgdmFyIHdvcmRzID0gW107XG5cdCAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGF0aW4xU3RyTGVuZ3RoOyBpKyspIHtcblx0ICAgICAgICAgICAgICAgIHdvcmRzW2kgPj4+IDJdIHw9IChsYXRpbjFTdHIuY2hhckNvZGVBdChpKSAmIDB4ZmYpIDw8ICgyNCAtIChpICUgNCkgKiA4KTtcblx0ICAgICAgICAgICAgfVxuXG5cdCAgICAgICAgICAgIHJldHVybiBuZXcgV29yZEFycmF5LmluaXQod29yZHMsIGxhdGluMVN0ckxlbmd0aCk7XG5cdCAgICAgICAgfVxuXHQgICAgfTtcblxuXHQgICAgLyoqXG5cdCAgICAgKiBVVEYtOCBlbmNvZGluZyBzdHJhdGVneS5cblx0ICAgICAqL1xuXHQgICAgdmFyIFV0ZjggPSBDX2VuYy5VdGY4ID0ge1xuXHQgICAgICAgIC8qKlxuXHQgICAgICAgICAqIENvbnZlcnRzIGEgd29yZCBhcnJheSB0byBhIFVURi04IHN0cmluZy5cblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqIEBwYXJhbSB7V29yZEFycmF5fSB3b3JkQXJyYXkgVGhlIHdvcmQgYXJyYXkuXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAcmV0dXJuIHtzdHJpbmd9IFRoZSBVVEYtOCBzdHJpbmcuXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAc3RhdGljXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAZXhhbXBsZVxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogICAgIHZhciB1dGY4U3RyaW5nID0gQ3J5cHRvSlMuZW5jLlV0Zjguc3RyaW5naWZ5KHdvcmRBcnJheSk7XG5cdCAgICAgICAgICovXG5cdCAgICAgICAgc3RyaW5naWZ5OiBmdW5jdGlvbiAod29yZEFycmF5KSB7XG5cdCAgICAgICAgICAgIHRyeSB7XG5cdCAgICAgICAgICAgICAgICByZXR1cm4gZGVjb2RlVVJJQ29tcG9uZW50KGVzY2FwZShMYXRpbjEuc3RyaW5naWZ5KHdvcmRBcnJheSkpKTtcblx0ICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xuXHQgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdNYWxmb3JtZWQgVVRGLTggZGF0YScpO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgfSxcblxuXHQgICAgICAgIC8qKlxuXHQgICAgICAgICAqIENvbnZlcnRzIGEgVVRGLTggc3RyaW5nIHRvIGEgd29yZCBhcnJheS5cblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqIEBwYXJhbSB7c3RyaW5nfSB1dGY4U3RyIFRoZSBVVEYtOCBzdHJpbmcuXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAcmV0dXJuIHtXb3JkQXJyYXl9IFRoZSB3b3JkIGFycmF5LlxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogQHN0YXRpY1xuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogQGV4YW1wbGVcblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqICAgICB2YXIgd29yZEFycmF5ID0gQ3J5cHRvSlMuZW5jLlV0ZjgucGFyc2UodXRmOFN0cmluZyk7XG5cdCAgICAgICAgICovXG5cdCAgICAgICAgcGFyc2U6IGZ1bmN0aW9uICh1dGY4U3RyKSB7XG5cdCAgICAgICAgICAgIHJldHVybiBMYXRpbjEucGFyc2UodW5lc2NhcGUoZW5jb2RlVVJJQ29tcG9uZW50KHV0ZjhTdHIpKSk7XG5cdCAgICAgICAgfVxuXHQgICAgfTtcblxuXHQgICAgLyoqXG5cdCAgICAgKiBBYnN0cmFjdCBidWZmZXJlZCBibG9jayBhbGdvcml0aG0gdGVtcGxhdGUuXG5cdCAgICAgKlxuXHQgICAgICogVGhlIHByb3BlcnR5IGJsb2NrU2l6ZSBtdXN0IGJlIGltcGxlbWVudGVkIGluIGEgY29uY3JldGUgc3VidHlwZS5cblx0ICAgICAqXG5cdCAgICAgKiBAcHJvcGVydHkge251bWJlcn0gX21pbkJ1ZmZlclNpemUgVGhlIG51bWJlciBvZiBibG9ja3MgdGhhdCBzaG91bGQgYmUga2VwdCB1bnByb2Nlc3NlZCBpbiB0aGUgYnVmZmVyLiBEZWZhdWx0OiAwXG5cdCAgICAgKi9cblx0ICAgIHZhciBCdWZmZXJlZEJsb2NrQWxnb3JpdGhtID0gQ19saWIuQnVmZmVyZWRCbG9ja0FsZ29yaXRobSA9IEJhc2UuZXh0ZW5kKHtcblx0ICAgICAgICAvKipcblx0ICAgICAgICAgKiBSZXNldHMgdGhpcyBibG9jayBhbGdvcml0aG0ncyBkYXRhIGJ1ZmZlciB0byBpdHMgaW5pdGlhbCBzdGF0ZS5cblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqIEBleGFtcGxlXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiAgICAgYnVmZmVyZWRCbG9ja0FsZ29yaXRobS5yZXNldCgpO1xuXHQgICAgICAgICAqL1xuXHQgICAgICAgIHJlc2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIC8vIEluaXRpYWwgdmFsdWVzXG5cdCAgICAgICAgICAgIHRoaXMuX2RhdGEgPSBuZXcgV29yZEFycmF5LmluaXQoKTtcblx0ICAgICAgICAgICAgdGhpcy5fbkRhdGFCeXRlcyA9IDA7XG5cdCAgICAgICAgfSxcblxuXHQgICAgICAgIC8qKlxuXHQgICAgICAgICAqIEFkZHMgbmV3IGRhdGEgdG8gdGhpcyBibG9jayBhbGdvcml0aG0ncyBidWZmZXIuXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAcGFyYW0ge1dvcmRBcnJheXxzdHJpbmd9IGRhdGEgVGhlIGRhdGEgdG8gYXBwZW5kLiBTdHJpbmdzIGFyZSBjb252ZXJ0ZWQgdG8gYSBXb3JkQXJyYXkgdXNpbmcgVVRGLTguXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAZXhhbXBsZVxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogICAgIGJ1ZmZlcmVkQmxvY2tBbGdvcml0aG0uX2FwcGVuZCgnZGF0YScpO1xuXHQgICAgICAgICAqICAgICBidWZmZXJlZEJsb2NrQWxnb3JpdGhtLl9hcHBlbmQod29yZEFycmF5KTtcblx0ICAgICAgICAgKi9cblx0ICAgICAgICBfYXBwZW5kOiBmdW5jdGlvbiAoZGF0YSkge1xuXHQgICAgICAgICAgICAvLyBDb252ZXJ0IHN0cmluZyB0byBXb3JkQXJyYXksIGVsc2UgYXNzdW1lIFdvcmRBcnJheSBhbHJlYWR5XG5cdCAgICAgICAgICAgIGlmICh0eXBlb2YgZGF0YSA9PSAnc3RyaW5nJykge1xuXHQgICAgICAgICAgICAgICAgZGF0YSA9IFV0ZjgucGFyc2UoZGF0YSk7XG5cdCAgICAgICAgICAgIH1cblxuXHQgICAgICAgICAgICAvLyBBcHBlbmRcblx0ICAgICAgICAgICAgdGhpcy5fZGF0YS5jb25jYXQoZGF0YSk7XG5cdCAgICAgICAgICAgIHRoaXMuX25EYXRhQnl0ZXMgKz0gZGF0YS5zaWdCeXRlcztcblx0ICAgICAgICB9LFxuXG5cdCAgICAgICAgLyoqXG5cdCAgICAgICAgICogUHJvY2Vzc2VzIGF2YWlsYWJsZSBkYXRhIGJsb2Nrcy5cblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqIFRoaXMgbWV0aG9kIGludm9rZXMgX2RvUHJvY2Vzc0Jsb2NrKG9mZnNldCksIHdoaWNoIG11c3QgYmUgaW1wbGVtZW50ZWQgYnkgYSBjb25jcmV0ZSBzdWJ0eXBlLlxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogQHBhcmFtIHtib29sZWFufSBkb0ZsdXNoIFdoZXRoZXIgYWxsIGJsb2NrcyBhbmQgcGFydGlhbCBibG9ja3Mgc2hvdWxkIGJlIHByb2Nlc3NlZC5cblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqIEByZXR1cm4ge1dvcmRBcnJheX0gVGhlIHByb2Nlc3NlZCBkYXRhLlxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogQGV4YW1wbGVcblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqICAgICB2YXIgcHJvY2Vzc2VkRGF0YSA9IGJ1ZmZlcmVkQmxvY2tBbGdvcml0aG0uX3Byb2Nlc3MoKTtcblx0ICAgICAgICAgKiAgICAgdmFyIHByb2Nlc3NlZERhdGEgPSBidWZmZXJlZEJsb2NrQWxnb3JpdGhtLl9wcm9jZXNzKCEhJ2ZsdXNoJyk7XG5cdCAgICAgICAgICovXG5cdCAgICAgICAgX3Byb2Nlc3M6IGZ1bmN0aW9uIChkb0ZsdXNoKSB7XG5cdCAgICAgICAgICAgIHZhciBwcm9jZXNzZWRXb3JkcztcblxuXHQgICAgICAgICAgICAvLyBTaG9ydGN1dHNcblx0ICAgICAgICAgICAgdmFyIGRhdGEgPSB0aGlzLl9kYXRhO1xuXHQgICAgICAgICAgICB2YXIgZGF0YVdvcmRzID0gZGF0YS53b3Jkcztcblx0ICAgICAgICAgICAgdmFyIGRhdGFTaWdCeXRlcyA9IGRhdGEuc2lnQnl0ZXM7XG5cdCAgICAgICAgICAgIHZhciBibG9ja1NpemUgPSB0aGlzLmJsb2NrU2l6ZTtcblx0ICAgICAgICAgICAgdmFyIGJsb2NrU2l6ZUJ5dGVzID0gYmxvY2tTaXplICogNDtcblxuXHQgICAgICAgICAgICAvLyBDb3VudCBibG9ja3MgcmVhZHlcblx0ICAgICAgICAgICAgdmFyIG5CbG9ja3NSZWFkeSA9IGRhdGFTaWdCeXRlcyAvIGJsb2NrU2l6ZUJ5dGVzO1xuXHQgICAgICAgICAgICBpZiAoZG9GbHVzaCkge1xuXHQgICAgICAgICAgICAgICAgLy8gUm91bmQgdXAgdG8gaW5jbHVkZSBwYXJ0aWFsIGJsb2Nrc1xuXHQgICAgICAgICAgICAgICAgbkJsb2Nrc1JlYWR5ID0gTWF0aC5jZWlsKG5CbG9ja3NSZWFkeSk7XG5cdCAgICAgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICAgICAgICAvLyBSb3VuZCBkb3duIHRvIGluY2x1ZGUgb25seSBmdWxsIGJsb2Nrcyxcblx0ICAgICAgICAgICAgICAgIC8vIGxlc3MgdGhlIG51bWJlciBvZiBibG9ja3MgdGhhdCBtdXN0IHJlbWFpbiBpbiB0aGUgYnVmZmVyXG5cdCAgICAgICAgICAgICAgICBuQmxvY2tzUmVhZHkgPSBNYXRoLm1heCgobkJsb2Nrc1JlYWR5IHwgMCkgLSB0aGlzLl9taW5CdWZmZXJTaXplLCAwKTtcblx0ICAgICAgICAgICAgfVxuXG5cdCAgICAgICAgICAgIC8vIENvdW50IHdvcmRzIHJlYWR5XG5cdCAgICAgICAgICAgIHZhciBuV29yZHNSZWFkeSA9IG5CbG9ja3NSZWFkeSAqIGJsb2NrU2l6ZTtcblxuXHQgICAgICAgICAgICAvLyBDb3VudCBieXRlcyByZWFkeVxuXHQgICAgICAgICAgICB2YXIgbkJ5dGVzUmVhZHkgPSBNYXRoLm1pbihuV29yZHNSZWFkeSAqIDQsIGRhdGFTaWdCeXRlcyk7XG5cblx0ICAgICAgICAgICAgLy8gUHJvY2VzcyBibG9ja3Ncblx0ICAgICAgICAgICAgaWYgKG5Xb3Jkc1JlYWR5KSB7XG5cdCAgICAgICAgICAgICAgICBmb3IgKHZhciBvZmZzZXQgPSAwOyBvZmZzZXQgPCBuV29yZHNSZWFkeTsgb2Zmc2V0ICs9IGJsb2NrU2l6ZSkge1xuXHQgICAgICAgICAgICAgICAgICAgIC8vIFBlcmZvcm0gY29uY3JldGUtYWxnb3JpdGhtIGxvZ2ljXG5cdCAgICAgICAgICAgICAgICAgICAgdGhpcy5fZG9Qcm9jZXNzQmxvY2soZGF0YVdvcmRzLCBvZmZzZXQpO1xuXHQgICAgICAgICAgICAgICAgfVxuXG5cdCAgICAgICAgICAgICAgICAvLyBSZW1vdmUgcHJvY2Vzc2VkIHdvcmRzXG5cdCAgICAgICAgICAgICAgICBwcm9jZXNzZWRXb3JkcyA9IGRhdGFXb3Jkcy5zcGxpY2UoMCwgbldvcmRzUmVhZHkpO1xuXHQgICAgICAgICAgICAgICAgZGF0YS5zaWdCeXRlcyAtPSBuQnl0ZXNSZWFkeTtcblx0ICAgICAgICAgICAgfVxuXG5cdCAgICAgICAgICAgIC8vIFJldHVybiBwcm9jZXNzZWQgd29yZHNcblx0ICAgICAgICAgICAgcmV0dXJuIG5ldyBXb3JkQXJyYXkuaW5pdChwcm9jZXNzZWRXb3JkcywgbkJ5dGVzUmVhZHkpO1xuXHQgICAgICAgIH0sXG5cblx0ICAgICAgICAvKipcblx0ICAgICAgICAgKiBDcmVhdGVzIGEgY29weSBvZiB0aGlzIG9iamVjdC5cblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqIEByZXR1cm4ge09iamVjdH0gVGhlIGNsb25lLlxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogQGV4YW1wbGVcblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqICAgICB2YXIgY2xvbmUgPSBidWZmZXJlZEJsb2NrQWxnb3JpdGhtLmNsb25lKCk7XG5cdCAgICAgICAgICovXG5cdCAgICAgICAgY2xvbmU6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgdmFyIGNsb25lID0gQmFzZS5jbG9uZS5jYWxsKHRoaXMpO1xuXHQgICAgICAgICAgICBjbG9uZS5fZGF0YSA9IHRoaXMuX2RhdGEuY2xvbmUoKTtcblxuXHQgICAgICAgICAgICByZXR1cm4gY2xvbmU7XG5cdCAgICAgICAgfSxcblxuXHQgICAgICAgIF9taW5CdWZmZXJTaXplOiAwXG5cdCAgICB9KTtcblxuXHQgICAgLyoqXG5cdCAgICAgKiBBYnN0cmFjdCBoYXNoZXIgdGVtcGxhdGUuXG5cdCAgICAgKlxuXHQgICAgICogQHByb3BlcnR5IHtudW1iZXJ9IGJsb2NrU2l6ZSBUaGUgbnVtYmVyIG9mIDMyLWJpdCB3b3JkcyB0aGlzIGhhc2hlciBvcGVyYXRlcyBvbi4gRGVmYXVsdDogMTYgKDUxMiBiaXRzKVxuXHQgICAgICovXG5cdCAgICB2YXIgSGFzaGVyID0gQ19saWIuSGFzaGVyID0gQnVmZmVyZWRCbG9ja0FsZ29yaXRobS5leHRlbmQoe1xuXHQgICAgICAgIC8qKlxuXHQgICAgICAgICAqIENvbmZpZ3VyYXRpb24gb3B0aW9ucy5cblx0ICAgICAgICAgKi9cblx0ICAgICAgICBjZmc6IEJhc2UuZXh0ZW5kKCksXG5cblx0ICAgICAgICAvKipcblx0ICAgICAgICAgKiBJbml0aWFsaXplcyBhIG5ld2x5IGNyZWF0ZWQgaGFzaGVyLlxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogQHBhcmFtIHtPYmplY3R9IGNmZyAoT3B0aW9uYWwpIFRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgdG8gdXNlIGZvciB0aGlzIGhhc2ggY29tcHV0YXRpb24uXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAZXhhbXBsZVxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogICAgIHZhciBoYXNoZXIgPSBDcnlwdG9KUy5hbGdvLlNIQTI1Ni5jcmVhdGUoKTtcblx0ICAgICAgICAgKi9cblx0ICAgICAgICBpbml0OiBmdW5jdGlvbiAoY2ZnKSB7XG5cdCAgICAgICAgICAgIC8vIEFwcGx5IGNvbmZpZyBkZWZhdWx0c1xuXHQgICAgICAgICAgICB0aGlzLmNmZyA9IHRoaXMuY2ZnLmV4dGVuZChjZmcpO1xuXG5cdCAgICAgICAgICAgIC8vIFNldCBpbml0aWFsIHZhbHVlc1xuXHQgICAgICAgICAgICB0aGlzLnJlc2V0KCk7XG5cdCAgICAgICAgfSxcblxuXHQgICAgICAgIC8qKlxuXHQgICAgICAgICAqIFJlc2V0cyB0aGlzIGhhc2hlciB0byBpdHMgaW5pdGlhbCBzdGF0ZS5cblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqIEBleGFtcGxlXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiAgICAgaGFzaGVyLnJlc2V0KCk7XG5cdCAgICAgICAgICovXG5cdCAgICAgICAgcmVzZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgLy8gUmVzZXQgZGF0YSBidWZmZXJcblx0ICAgICAgICAgICAgQnVmZmVyZWRCbG9ja0FsZ29yaXRobS5yZXNldC5jYWxsKHRoaXMpO1xuXG5cdCAgICAgICAgICAgIC8vIFBlcmZvcm0gY29uY3JldGUtaGFzaGVyIGxvZ2ljXG5cdCAgICAgICAgICAgIHRoaXMuX2RvUmVzZXQoKTtcblx0ICAgICAgICB9LFxuXG5cdCAgICAgICAgLyoqXG5cdCAgICAgICAgICogVXBkYXRlcyB0aGlzIGhhc2hlciB3aXRoIGEgbWVzc2FnZS5cblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqIEBwYXJhbSB7V29yZEFycmF5fHN0cmluZ30gbWVzc2FnZVVwZGF0ZSBUaGUgbWVzc2FnZSB0byBhcHBlbmQuXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAcmV0dXJuIHtIYXNoZXJ9IFRoaXMgaGFzaGVyLlxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogQGV4YW1wbGVcblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqICAgICBoYXNoZXIudXBkYXRlKCdtZXNzYWdlJyk7XG5cdCAgICAgICAgICogICAgIGhhc2hlci51cGRhdGUod29yZEFycmF5KTtcblx0ICAgICAgICAgKi9cblx0ICAgICAgICB1cGRhdGU6IGZ1bmN0aW9uIChtZXNzYWdlVXBkYXRlKSB7XG5cdCAgICAgICAgICAgIC8vIEFwcGVuZFxuXHQgICAgICAgICAgICB0aGlzLl9hcHBlbmQobWVzc2FnZVVwZGF0ZSk7XG5cblx0ICAgICAgICAgICAgLy8gVXBkYXRlIHRoZSBoYXNoXG5cdCAgICAgICAgICAgIHRoaXMuX3Byb2Nlc3MoKTtcblxuXHQgICAgICAgICAgICAvLyBDaGFpbmFibGVcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICAgICAgfSxcblxuXHQgICAgICAgIC8qKlxuXHQgICAgICAgICAqIEZpbmFsaXplcyB0aGUgaGFzaCBjb21wdXRhdGlvbi5cblx0ICAgICAgICAgKiBOb3RlIHRoYXQgdGhlIGZpbmFsaXplIG9wZXJhdGlvbiBpcyBlZmZlY3RpdmVseSBhIGRlc3RydWN0aXZlLCByZWFkLW9uY2Ugb3BlcmF0aW9uLlxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogQHBhcmFtIHtXb3JkQXJyYXl8c3RyaW5nfSBtZXNzYWdlVXBkYXRlIChPcHRpb25hbCkgQSBmaW5hbCBtZXNzYWdlIHVwZGF0ZS5cblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqIEByZXR1cm4ge1dvcmRBcnJheX0gVGhlIGhhc2guXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAZXhhbXBsZVxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogICAgIHZhciBoYXNoID0gaGFzaGVyLmZpbmFsaXplKCk7XG5cdCAgICAgICAgICogICAgIHZhciBoYXNoID0gaGFzaGVyLmZpbmFsaXplKCdtZXNzYWdlJyk7XG5cdCAgICAgICAgICogICAgIHZhciBoYXNoID0gaGFzaGVyLmZpbmFsaXplKHdvcmRBcnJheSk7XG5cdCAgICAgICAgICovXG5cdCAgICAgICAgZmluYWxpemU6IGZ1bmN0aW9uIChtZXNzYWdlVXBkYXRlKSB7XG5cdCAgICAgICAgICAgIC8vIEZpbmFsIG1lc3NhZ2UgdXBkYXRlXG5cdCAgICAgICAgICAgIGlmIChtZXNzYWdlVXBkYXRlKSB7XG5cdCAgICAgICAgICAgICAgICB0aGlzLl9hcHBlbmQobWVzc2FnZVVwZGF0ZSk7XG5cdCAgICAgICAgICAgIH1cblxuXHQgICAgICAgICAgICAvLyBQZXJmb3JtIGNvbmNyZXRlLWhhc2hlciBsb2dpY1xuXHQgICAgICAgICAgICB2YXIgaGFzaCA9IHRoaXMuX2RvRmluYWxpemUoKTtcblxuXHQgICAgICAgICAgICByZXR1cm4gaGFzaDtcblx0ICAgICAgICB9LFxuXG5cdCAgICAgICAgYmxvY2tTaXplOiA1MTIvMzIsXG5cblx0ICAgICAgICAvKipcblx0ICAgICAgICAgKiBDcmVhdGVzIGEgc2hvcnRjdXQgZnVuY3Rpb24gdG8gYSBoYXNoZXIncyBvYmplY3QgaW50ZXJmYWNlLlxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogQHBhcmFtIHtIYXNoZXJ9IGhhc2hlciBUaGUgaGFzaGVyIHRvIGNyZWF0ZSBhIGhlbHBlciBmb3IuXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAcmV0dXJuIHtGdW5jdGlvbn0gVGhlIHNob3J0Y3V0IGZ1bmN0aW9uLlxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogQHN0YXRpY1xuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogQGV4YW1wbGVcblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqICAgICB2YXIgU0hBMjU2ID0gQ3J5cHRvSlMubGliLkhhc2hlci5fY3JlYXRlSGVscGVyKENyeXB0b0pTLmFsZ28uU0hBMjU2KTtcblx0ICAgICAgICAgKi9cblx0ICAgICAgICBfY3JlYXRlSGVscGVyOiBmdW5jdGlvbiAoaGFzaGVyKSB7XG5cdCAgICAgICAgICAgIHJldHVybiBmdW5jdGlvbiAobWVzc2FnZSwgY2ZnKSB7XG5cdCAgICAgICAgICAgICAgICByZXR1cm4gbmV3IGhhc2hlci5pbml0KGNmZykuZmluYWxpemUobWVzc2FnZSk7XG5cdCAgICAgICAgICAgIH07XG5cdCAgICAgICAgfSxcblxuXHQgICAgICAgIC8qKlxuXHQgICAgICAgICAqIENyZWF0ZXMgYSBzaG9ydGN1dCBmdW5jdGlvbiB0byB0aGUgSE1BQydzIG9iamVjdCBpbnRlcmZhY2UuXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAcGFyYW0ge0hhc2hlcn0gaGFzaGVyIFRoZSBoYXNoZXIgdG8gdXNlIGluIHRoaXMgSE1BQyBoZWxwZXIuXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAcmV0dXJuIHtGdW5jdGlvbn0gVGhlIHNob3J0Y3V0IGZ1bmN0aW9uLlxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogQHN0YXRpY1xuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogQGV4YW1wbGVcblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqICAgICB2YXIgSG1hY1NIQTI1NiA9IENyeXB0b0pTLmxpYi5IYXNoZXIuX2NyZWF0ZUhtYWNIZWxwZXIoQ3J5cHRvSlMuYWxnby5TSEEyNTYpO1xuXHQgICAgICAgICAqL1xuXHQgICAgICAgIF9jcmVhdGVIbWFjSGVscGVyOiBmdW5jdGlvbiAoaGFzaGVyKSB7XG5cdCAgICAgICAgICAgIHJldHVybiBmdW5jdGlvbiAobWVzc2FnZSwga2V5KSB7XG5cdCAgICAgICAgICAgICAgICByZXR1cm4gbmV3IENfYWxnby5ITUFDLmluaXQoaGFzaGVyLCBrZXkpLmZpbmFsaXplKG1lc3NhZ2UpO1xuXHQgICAgICAgICAgICB9O1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXG5cdCAgICAvKipcblx0ICAgICAqIEFsZ29yaXRobSBuYW1lc3BhY2UuXG5cdCAgICAgKi9cblx0ICAgIHZhciBDX2FsZ28gPSBDLmFsZ28gPSB7fTtcblxuXHQgICAgcmV0dXJuIEM7XG5cdH0oTWF0aCkpO1xuXG5cblx0cmV0dXJuIENyeXB0b0pTO1xuXG59KSk7Il0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///19021\n")},19508:(I,g,t)=>{"use strict";I.exports=t.p+"ba512fc50c99b3b5ae36.png"},19679:(module,exports,__webpack_require__)=>{eval("var __WEBPACK_AMD_DEFINE_RESULT__;/*!\nCopyright (c) The Cytoscape Consortium\n\nPermission is hereby granted, free of charge, to any person obtaining a copy of\nthis software and associated documentation files (the “Software”), to deal in\nthe Software without restriction, including without limitation the rights to\nuse, copy, modify, merge, publish, distribute, sublicense, and/or sell copies\nof the Software, and to permit persons to whom the Software is furnished to do\nso, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED “AS IS”, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\nSOFTWARE.\n*/\n\n;(function(){ 'use strict';\n\n // registers the extension on a cytoscape lib ref\n var register = function( cytoscape, $ ){\n if( !cytoscape || !$ ){ return; } // can't register if cytoscape or jquery unspecified\n\n $.fn.cyPanzoom = $.fn.cytoscapePanzoom = function( options ){\n panzoom.apply( this, [ options, cytoscape, $ ] );\n\n return this; // chainability\n };\n\n // if you want a core extension\n cytoscape('core', 'panzoom', function( options ){ // could use options object, but args are up to you\n panzoom.apply( this, [ options, cytoscape, $ ] );\n\n return this; // chainability\n });\n\n };\n\n var defaults = {\n zoomFactor: 0.05, // zoom factor per zoom tick\n zoomDelay: 45, // how many ms between zoom ticks\n minZoom: 0.1, // min zoom level\n maxZoom: 10, // max zoom level\n fitPadding: 50, // padding when fitting\n panSpeed: 10, // how many ms in between pan ticks\n panDistance: 10, // max pan distance per tick\n panDragAreaSize: 75, // the length of the pan drag box in which the vector for panning is calculated (bigger = finer control of pan speed and direction)\n panMinPercentSpeed: 0.25, // the slowest speed we can pan by (as a percent of panSpeed)\n panInactiveArea: 8, // radius of inactive area in pan drag box\n panIndicatorMinOpacity: 0.5, // min opacity of pan indicator (the draggable nib); scales from this to 1.0\n zoomOnly: false, // a minimal version of the ui only with zooming (useful on systems with bad mousewheel resolution)\n fitSelector: undefined, // selector of elements to fit\n animateOnFit: function(){ // whether to animate on fit\n return false;\n },\n fitAnimationDuration: 1000, // duration of animation on fit\n\n // icon class names\n sliderHandleIcon: 'fa fa-minus',\n zoomInIcon: 'fa fa-plus',\n zoomOutIcon: 'fa fa-minus',\n resetIcon: 'fa fa-expand'\n };\n\n var panzoom = function( params, cytoscape, $ ){\n var cyRef = this;\n var options = $.extend(true, {}, defaults, params);\n var fn = params;\n\n var functions = {\n destroy: function(){\n var $this = $(cyRef.container());\n var $pz = $this.find(\".cy-panzoom\");\n\n $pz.data('winbdgs').forEach(function( l ){\n $(window).unbind( l.evt, l.fn );\n });\n\n $pz.data('cybdgs').forEach(function( l ){\n cyRef.off( l.evt, l.fn );\n });\n\n $pz.remove();\n },\n\n init: function(){\n var browserIsMobile = 'ontouchstart' in window;\n\n return $(cyRef.container()).each(function(){\n var $container = $(this);\n $container.cytoscape = cytoscape;\n\n var winbdgs = [];\n var $win = $(window);\n\n var windowBind = function( evt, fn ){\n winbdgs.push({ evt: evt, fn: fn });\n\n $win.bind( evt, fn );\n };\n\n var windowUnbind = function( evt, fn ){\n for( var i = 0; i < winbdgs.length; i++ ){\n var l = winbdgs[i];\n\n if( l.evt === evt && l.fn === fn ){\n winbdgs.splice( i, 1 );\n break;\n }\n }\n\n $win.unbind( evt, fn );\n };\n\n var cybdgs = [];\n\n var cyOn = function( evt, fn ){\n cybdgs.push({ evt: evt, fn: fn });\n\n cyRef.on( evt, fn );\n };\n\n var cyOff = function( evt, fn ){\n for( var i = 0; i < cybdgs.length; i++ ){\n var l = cybdgs[i];\n\n if( l.evt === evt && l.fn === fn ){\n cybdgs.splice( i, 1 );\n break;\n }\n }\n\n cyRef.off( evt, fn );\n };\n\n var $panzoom = $('
');\n $container.prepend( $panzoom );\n\n $panzoom.css('position', 'absolute'); // must be absolute regardless of stylesheet\n\n $panzoom.data('winbdgs', winbdgs);\n $panzoom.data('cybdgs', cybdgs);\n\n if( options.zoomOnly ){\n $panzoom.addClass(\"cy-panzoom-zoom-only\");\n }\n\n // add base html elements\n /////////////////////////\n\n var $zoomIn = $('
');\n $panzoom.append( $zoomIn );\n\n var $zoomOut = $('
');\n $panzoom.append( $zoomOut );\n\n var $reset = $('
');\n $panzoom.append( $reset );\n\n var $slider = $('
');\n $panzoom.append( $slider );\n\n $slider.append('
');\n\n var $sliderHandle = $('
');\n $slider.append( $sliderHandle );\n\n var $noZoomTick = $('
');\n $slider.append( $noZoomTick );\n\n var $panner = $('
');\n $panzoom.append( $panner );\n\n var $pHandle = $('
');\n $panner.append( $pHandle );\n\n var $pUp = $('
');\n var $pDown = $('
');\n var $pLeft = $('
');\n var $pRight = $('
');\n $panner.append( $pUp ).append( $pDown ).append( $pLeft ).append( $pRight );\n\n var $pIndicator = $('
');\n $panner.append( $pIndicator );\n\n // functions for calculating panning\n ////////////////////////////////////\n\n function handle2pan(e){\n var v = {\n x: e.originalEvent.pageX - $panner.offset().left - $panner.width()/2,\n y: e.originalEvent.pageY - $panner.offset().top - $panner.height()/2\n }\n\n var r = options.panDragAreaSize;\n var d = Math.sqrt( v.x*v.x + v.y*v.y );\n var percent = Math.min( d/r, 1 );\n\n if( d < options.panInactiveArea ){\n return {\n x: NaN,\n y: NaN\n };\n }\n\n v = {\n x: v.x/d,\n y: v.y/d\n };\n\n percent = Math.max( options.panMinPercentSpeed, percent );\n\n var vnorm = {\n x: -1 * v.x * (percent * options.panDistance),\n y: -1 * v.y * (percent * options.panDistance)\n };\n\n return vnorm;\n }\n\n function donePanning(){\n clearInterval(panInterval);\n windowUnbind(\"mousemove\", handler);\n\n $pIndicator.hide();\n }\n\n function positionIndicator(pan){\n var v = pan;\n var d = Math.sqrt( v.x*v.x + v.y*v.y );\n var vnorm = {\n x: -1 * v.x/d,\n y: -1 * v.y/d\n };\n\n var w = $panner.width();\n var h = $panner.height();\n var percent = d/options.panDistance;\n var opacity = Math.max( options.panIndicatorMinOpacity, percent );\n var color = 255 - Math.round( opacity * 255 );\n\n $pIndicator.show().css({\n left: w/2 * vnorm.x + w/2,\n top: h/2 * vnorm.y + h/2,\n background: \"rgb(\" + color + \", \" + color + \", \" + color + \")\"\n });\n }\n\n function calculateZoomCenterPoint(){\n var pan = cyRef.pan();\n var zoom = cyRef.zoom();\n\n zx = $container.width()/2;\n zy = $container.height()/2;\n }\n\n var zooming = false;\n function startZooming(){\n zooming = true;\n\n calculateZoomCenterPoint();\n }\n\n\n function endZooming(){\n zooming = false;\n }\n\n var zx, zy;\n function zoomTo(level){\n if( !zooming ){ // for non-continuous zooming (e.g. click slider at pt)\n calculateZoomCenterPoint();\n }\n\n cyRef.zoom({\n level: level,\n renderedPosition: { x: zx, y: zy }\n });\n }\n\n var panInterval;\n\n var handler = function(e){\n e.stopPropagation(); // don't trigger dragging of panzoom\n e.preventDefault(); // don't cause text selection\n clearInterval(panInterval);\n\n var pan = handle2pan(e);\n\n if( isNaN(pan.x) || isNaN(pan.y) ){\n $pIndicator.hide();\n return;\n }\n\n positionIndicator(pan);\n panInterval = setInterval(function(){\n cyRef.panBy(pan);\n }, options.panSpeed);\n };\n\n $pHandle.bind(\"mousedown\", function(e){\n // handle click of icon\n handler(e);\n\n // update on mousemove\n windowBind(\"mousemove\", handler);\n });\n\n $pHandle.bind(\"mouseup\", function(){\n donePanning();\n });\n\n windowBind(\"mouseup blur\", function(){\n donePanning();\n });\n\n\n\n // set up slider behaviour\n //////////////////////////\n\n $slider.bind('mousedown', function(){\n return false; // so we don't pan close to the slider handle\n });\n\n var sliderVal;\n var sliding = false;\n var sliderPadding = 2;\n\n function setSliderFromMouse(evt, handleOffset){\n if( handleOffset === undefined ){\n handleOffset = 0;\n }\n\n var padding = sliderPadding;\n var min = 0 + padding;\n var max = $slider.height() - $sliderHandle.height() - 2*padding;\n var top = evt.pageY - $slider.offset().top - handleOffset;\n\n // constrain to slider bounds\n if( top < min ){ top = min }\n if( top > max ){ top = max }\n\n var percent = 1 - (top - min) / ( max - min );\n\n // move the handle\n $sliderHandle.css('top', top);\n\n var zmin = options.minZoom;\n var zmax = options.maxZoom;\n\n // assume (zoom = zmax ^ p) where p ranges on (x, 1) with x negative\n var x = Math.log(zmin) / Math.log(zmax);\n var p = (1 - x)*percent + x;\n\n // change the zoom level\n var z = Math.pow( zmax, p );\n\n // bound the zoom value in case of floating pt rounding error\n if( z < zmin ){\n z = zmin;\n } else if( z > zmax ){\n z = zmax;\n }\n\n zoomTo( z );\n }\n\n var sliderMdownHandler, sliderMmoveHandler;\n $sliderHandle.bind('mousedown', sliderMdownHandler = function( mdEvt ){\n var handleOffset = mdEvt.target === $sliderHandle[0] ? mdEvt.offsetY : 0;\n sliding = true;\n\n startZooming();\n $sliderHandle.addClass(\"active\");\n\n var lastMove = 0;\n windowBind('mousemove', sliderMmoveHandler = function( mmEvt ){\n var now = +new Date;\n\n // throttle the zooms every 10 ms so we don't call zoom too often and cause lag\n if( now > lastMove + 10 ){\n lastMove = now;\n } else {\n return false;\n }\n\n setSliderFromMouse(mmEvt, handleOffset);\n\n return false;\n });\n\n // unbind when\n windowBind('mouseup', function(){\n windowUnbind('mousemove', sliderMmoveHandler);\n sliding = false;\n\n $sliderHandle.removeClass(\"active\");\n endZooming();\n });\n\n return false;\n });\n\n $slider.bind('mousedown', function(e){\n if( e.target !== $sliderHandle[0] ){\n sliderMdownHandler(e);\n setSliderFromMouse(e);\n }\n });\n\n function positionSliderFromZoom(){\n var z = cyRef.zoom();\n var zmin = options.minZoom;\n var zmax = options.maxZoom;\n\n // assume (zoom = zmax ^ p) where p ranges on (x, 1) with x negative\n var x = Math.log(zmin) / Math.log(zmax);\n var p = Math.log(z) / Math.log(zmax);\n var percent = 1 - (p - x) / (1 - x); // the 1- bit at the front b/c up is in the -ve y direction\n\n var min = sliderPadding;\n var max = $slider.height() - $sliderHandle.height() - 2*sliderPadding;\n var top = percent * ( max - min );\n\n // constrain to slider bounds\n if( top < min ){ top = min }\n if( top > max ){ top = max }\n\n // move the handle\n $sliderHandle.css('top', top);\n }\n\n positionSliderFromZoom();\n\n cyOn('zoom', function(){\n if( !sliding ){\n positionSliderFromZoom();\n }\n });\n\n // set the position of the zoom=1 tick\n (function(){\n var z = 1;\n var zmin = options.minZoom;\n var zmax = options.maxZoom;\n\n // assume (zoom = zmax ^ p) where p ranges on (x, 1) with x negative\n var x = Math.log(zmin) / Math.log(zmax);\n var p = Math.log(z) / Math.log(zmax);\n var percent = 1 - (p - x) / (1 - x); // the 1- bit at the front b/c up is in the -ve y direction\n\n if( percent > 1 || percent < 0 ){\n $noZoomTick.hide();\n return;\n }\n\n var min = sliderPadding;\n var max = $slider.height() - $sliderHandle.height() - 2*sliderPadding;\n var top = percent * ( max - min );\n\n // constrain to slider bounds\n if( top < min ){ top = min }\n if( top > max ){ top = max }\n\n $noZoomTick.css('top', top);\n })();\n\n // set up zoom in/out buttons\n /////////////////////////////\n\n function bindButton($button, factor){\n var zoomInterval;\n\n $button.bind(\"mousedown\", function(e){\n e.preventDefault();\n e.stopPropagation();\n\n if( e.button != 0 ){\n return;\n }\n\n var doZoom = function(){\n var zoom = cyRef.zoom();\n var lvl = cyRef.zoom() * factor;\n\n if( lvl < options.minZoom ){\n lvl = options.minZoom;\n }\n\n if( lvl > options.maxZoom ){\n lvl = options.maxZoom;\n }\n\n if( (lvl == options.maxZoom && zoom == options.maxZoom) ||\n (lvl == options.minZoom && zoom == options.minZoom)\n ){\n return;\n }\n\n zoomTo(lvl);\n };\n\n startZooming();\n doZoom();\n zoomInterval = setInterval(doZoom, options.zoomDelay);\n\n return false;\n });\n\n windowBind(\"mouseup blur\", function(){\n clearInterval(zoomInterval);\n endZooming();\n });\n }\n\n bindButton( $zoomIn, (1 + options.zoomFactor) );\n bindButton( $zoomOut, (1 - options.zoomFactor) );\n\n $reset.bind(\"mousedown\", function(e){\n if( e.button != 0 ){\n return;\n }\n\n var elesToFit = options.fitSelector?cyRef.elements(options.fitSelector):cyRef.elements();\n\n if( elesToFit.size() === 0 ){\n cyRef.reset();\n } else {\n var animateOnFit = typeof options.animateOnFit === 'function' ? options.animateOnFit.call() : options.animateOnFit;\n if(animateOnFit){\n cyRef.animate({\n fit: {\n eles: elesToFit,\n padding: options.fitPadding\n }\n }, {\n duration: options.fitAnimationDuration\n });\n }\n else{\n cyRef.fit( elesToFit, options.fitPadding );\n }\n\n }\n\n return false;\n });\n\n\n\n });\n }\n };\n\n if( functions[fn] ){\n return functions[fn].apply(this, Array.prototype.slice.call( arguments, 1 ));\n } else if( typeof fn == 'object' || !fn ) {\n return functions.init.apply( this, arguments );\n } else {\n $.error(\"No such function `\"+ fn +\"` for jquery.cytoscapePanzoom\");\n }\n\n return $(this);\n };\n\n\n if( true && module.exports ){ // expose as a commonjs module\n module.exports = function( cytoscape, jquery ){\n register( cytoscape, jquery || __webpack_require__(74692) );\n }\n } else if( true ){ // expose as an amd/requirejs module\n !(__WEBPACK_AMD_DEFINE_RESULT__ = (function(){\n return register;\n }).call(exports, __webpack_require__, exports, module),\n\t\t__WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));\n }\n\n if( typeof cytoscape !== 'undefined' && typeof jQuery !== 'undefined' ){ // expose to global cytoscape (i.e. window.cytoscape)\n register( cytoscape, jQuery );\n }\n\n})();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMTk2NzkuanMiLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vaXRnLW5leHRnZW4tZnJvbnRlbmQvLi9ub2RlX21vZHVsZXMvY3l0b3NjYXBlLXBhbnpvb20vY3l0b3NjYXBlLXBhbnpvb20uanM/MWUxNiJdLCJzb3VyY2VzQ29udGVudCI6WyIvKiFcbkNvcHlyaWdodCAoYykgVGhlIEN5dG9zY2FwZSBDb25zb3J0aXVtXG5cblBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhIGNvcHkgb2ZcbnRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlIOKAnFNvZnR3YXJl4oCdKSwgdG8gZGVhbCBpblxudGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0b1xudXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCBjb3BpZXNcbm9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkb1xuc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOlxuXG5UaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbiBhbGxcbmNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuXG5cblRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCDigJxBUyBJU+KAnSwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUlxuSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksXG5GSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEVcbkFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVJcbkxJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sXG5PVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRVxuU09GVFdBUkUuXG4qL1xuXG47KGZ1bmN0aW9uKCl7ICd1c2Ugc3RyaWN0JztcblxuICAvLyByZWdpc3RlcnMgdGhlIGV4dGVuc2lvbiBvbiBhIGN5dG9zY2FwZSBsaWIgcmVmXG4gIHZhciByZWdpc3RlciA9IGZ1bmN0aW9uKCBjeXRvc2NhcGUsICQgKXtcbiAgICBpZiggIWN5dG9zY2FwZSB8fCAhJCApeyByZXR1cm47IH0gLy8gY2FuJ3QgcmVnaXN0ZXIgaWYgY3l0b3NjYXBlIG9yIGpxdWVyeSB1bnNwZWNpZmllZFxuXG4gICAgJC5mbi5jeVBhbnpvb20gPSAkLmZuLmN5dG9zY2FwZVBhbnpvb20gPSBmdW5jdGlvbiggb3B0aW9ucyApe1xuICAgICAgcGFuem9vbS5hcHBseSggdGhpcywgWyBvcHRpb25zLCBjeXRvc2NhcGUsICQgXSApO1xuXG4gICAgICByZXR1cm4gdGhpczsgLy8gY2hhaW5hYmlsaXR5XG4gICAgfTtcblxuICAgIC8vIGlmIHlvdSB3YW50IGEgY29yZSBleHRlbnNpb25cbiAgICBjeXRvc2NhcGUoJ2NvcmUnLCAncGFuem9vbScsIGZ1bmN0aW9uKCBvcHRpb25zICl7IC8vIGNvdWxkIHVzZSBvcHRpb25zIG9iamVjdCwgYnV0IGFyZ3MgYXJlIHVwIHRvIHlvdVxuICAgICAgcGFuem9vbS5hcHBseSggdGhpcywgWyBvcHRpb25zLCBjeXRvc2NhcGUsICQgXSApO1xuXG4gICAgICByZXR1cm4gdGhpczsgLy8gY2hhaW5hYmlsaXR5XG4gICAgfSk7XG5cbiAgfTtcblxuICB2YXIgZGVmYXVsdHMgPSB7XG4gICAgem9vbUZhY3RvcjogMC4wNSwgLy8gem9vbSBmYWN0b3IgcGVyIHpvb20gdGlja1xuICAgIHpvb21EZWxheTogNDUsIC8vIGhvdyBtYW55IG1zIGJldHdlZW4gem9vbSB0aWNrc1xuICAgIG1pblpvb206IDAuMSwgLy8gbWluIHpvb20gbGV2ZWxcbiAgICBtYXhab29tOiAxMCwgLy8gbWF4IHpvb20gbGV2ZWxcbiAgICBmaXRQYWRkaW5nOiA1MCwgLy8gcGFkZGluZyB3aGVuIGZpdHRpbmdcbiAgICBwYW5TcGVlZDogMTAsIC8vIGhvdyBtYW55IG1zIGluIGJldHdlZW4gcGFuIHRpY2tzXG4gICAgcGFuRGlzdGFuY2U6IDEwLCAvLyBtYXggcGFuIGRpc3RhbmNlIHBlciB0aWNrXG4gICAgcGFuRHJhZ0FyZWFTaXplOiA3NSwgLy8gdGhlIGxlbmd0aCBvZiB0aGUgcGFuIGRyYWcgYm94IGluIHdoaWNoIHRoZSB2ZWN0b3IgZm9yIHBhbm5pbmcgaXMgY2FsY3VsYXRlZCAoYmlnZ2VyID0gZmluZXIgY29udHJvbCBvZiBwYW4gc3BlZWQgYW5kIGRpcmVjdGlvbilcbiAgICBwYW5NaW5QZXJjZW50U3BlZWQ6IDAuMjUsIC8vIHRoZSBzbG93ZXN0IHNwZWVkIHdlIGNhbiBwYW4gYnkgKGFzIGEgcGVyY2VudCBvZiBwYW5TcGVlZClcbiAgICBwYW5JbmFjdGl2ZUFyZWE6IDgsIC8vIHJhZGl1cyBvZiBpbmFjdGl2ZSBhcmVhIGluIHBhbiBkcmFnIGJveFxuICAgIHBhbkluZGljYXRvck1pbk9wYWNpdHk6IDAuNSwgLy8gbWluIG9wYWNpdHkgb2YgcGFuIGluZGljYXRvciAodGhlIGRyYWdnYWJsZSBuaWIpOyBzY2FsZXMgZnJvbSB0aGlzIHRvIDEuMFxuICAgIHpvb21Pbmx5OiBmYWxzZSwgLy8gYSBtaW5pbWFsIHZlcnNpb24gb2YgdGhlIHVpIG9ubHkgd2l0aCB6b29taW5nICh1c2VmdWwgb24gc3lzdGVtcyB3aXRoIGJhZCBtb3VzZXdoZWVsIHJlc29sdXRpb24pXG4gICAgZml0U2VsZWN0b3I6IHVuZGVmaW5lZCwgLy8gc2VsZWN0b3Igb2YgZWxlbWVudHMgdG8gZml0XG4gICAgYW5pbWF0ZU9uRml0OiBmdW5jdGlvbigpeyAvLyB3aGV0aGVyIHRvIGFuaW1hdGUgb24gZml0XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfSxcbiAgICBmaXRBbmltYXRpb25EdXJhdGlvbjogMTAwMCwgLy8gZHVyYXRpb24gb2YgYW5pbWF0aW9uIG9uIGZpdFxuXG4gICAgLy8gaWNvbiBjbGFzcyBuYW1lc1xuICAgIHNsaWRlckhhbmRsZUljb246ICdmYSBmYS1taW51cycsXG4gICAgem9vbUluSWNvbjogJ2ZhIGZhLXBsdXMnLFxuICAgIHpvb21PdXRJY29uOiAnZmEgZmEtbWludXMnLFxuICAgIHJlc2V0SWNvbjogJ2ZhIGZhLWV4cGFuZCdcbiAgfTtcblxuICB2YXIgcGFuem9vbSA9IGZ1bmN0aW9uKCBwYXJhbXMsIGN5dG9zY2FwZSwgJCApe1xuICAgIHZhciBjeVJlZiA9IHRoaXM7XG4gICAgdmFyIG9wdGlvbnMgPSAkLmV4dGVuZCh0cnVlLCB7fSwgZGVmYXVsdHMsIHBhcmFtcyk7XG4gICAgdmFyIGZuID0gcGFyYW1zO1xuXG4gICAgdmFyIGZ1bmN0aW9ucyA9IHtcbiAgICAgIGRlc3Ryb3k6IGZ1bmN0aW9uKCl7XG4gICAgICAgIHZhciAkdGhpcyA9ICQoY3lSZWYuY29udGFpbmVyKCkpO1xuICAgICAgICB2YXIgJHB6ID0gJHRoaXMuZmluZChcIi5jeS1wYW56b29tXCIpO1xuXG4gICAgICAgICRwei5kYXRhKCd3aW5iZGdzJykuZm9yRWFjaChmdW5jdGlvbiggbCApe1xuICAgICAgICAgICQod2luZG93KS51bmJpbmQoIGwuZXZ0LCBsLmZuICk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgICRwei5kYXRhKCdjeWJkZ3MnKS5mb3JFYWNoKGZ1bmN0aW9uKCBsICl7XG4gICAgICAgICAgY3lSZWYub2ZmKCBsLmV2dCwgbC5mbiApO1xuICAgICAgICB9KTtcblxuICAgICAgICAkcHoucmVtb3ZlKCk7XG4gICAgICB9LFxuXG4gICAgICBpbml0OiBmdW5jdGlvbigpe1xuICAgICAgICB2YXIgYnJvd3NlcklzTW9iaWxlID0gJ29udG91Y2hzdGFydCcgaW4gd2luZG93O1xuXG4gICAgICAgIHJldHVybiAkKGN5UmVmLmNvbnRhaW5lcigpKS5lYWNoKGZ1bmN0aW9uKCl7XG4gICAgICAgICAgdmFyICRjb250YWluZXIgPSAkKHRoaXMpO1xuICAgICAgICAgICRjb250YWluZXIuY3l0b3NjYXBlID0gY3l0b3NjYXBlO1xuXG4gICAgICAgICAgdmFyIHdpbmJkZ3MgPSBbXTtcbiAgICAgICAgICB2YXIgJHdpbiA9ICQod2luZG93KTtcblxuICAgICAgICAgIHZhciB3aW5kb3dCaW5kID0gZnVuY3Rpb24oIGV2dCwgZm4gKXtcbiAgICAgICAgICAgIHdpbmJkZ3MucHVzaCh7IGV2dDogZXZ0LCBmbjogZm4gfSk7XG5cbiAgICAgICAgICAgICR3aW4uYmluZCggZXZ0LCBmbiApO1xuICAgICAgICAgIH07XG5cbiAgICAgICAgICB2YXIgd2luZG93VW5iaW5kID0gZnVuY3Rpb24oIGV2dCwgZm4gKXtcbiAgICAgICAgICAgIGZvciggdmFyIGkgPSAwOyBpIDwgd2luYmRncy5sZW5ndGg7IGkrKyApe1xuICAgICAgICAgICAgICB2YXIgbCA9IHdpbmJkZ3NbaV07XG5cbiAgICAgICAgICAgICAgaWYoIGwuZXZ0ID09PSBldnQgJiYgbC5mbiA9PT0gZm4gKXtcbiAgICAgICAgICAgICAgICB3aW5iZGdzLnNwbGljZSggaSwgMSApO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICR3aW4udW5iaW5kKCBldnQsIGZuICk7XG4gICAgICAgICAgfTtcblxuICAgICAgICAgIHZhciBjeWJkZ3MgPSBbXTtcblxuICAgICAgICAgIHZhciBjeU9uID0gZnVuY3Rpb24oIGV2dCwgZm4gKXtcbiAgICAgICAgICAgIGN5YmRncy5wdXNoKHsgZXZ0OiBldnQsIGZuOiBmbiB9KTtcblxuICAgICAgICAgICAgY3lSZWYub24oIGV2dCwgZm4gKTtcbiAgICAgICAgICB9O1xuXG4gICAgICAgICAgdmFyIGN5T2ZmID0gZnVuY3Rpb24oIGV2dCwgZm4gKXtcbiAgICAgICAgICAgIGZvciggdmFyIGkgPSAwOyBpIDwgY3liZGdzLmxlbmd0aDsgaSsrICl7XG4gICAgICAgICAgICAgIHZhciBsID0gY3liZGdzW2ldO1xuXG4gICAgICAgICAgICAgIGlmKCBsLmV2dCA9PT0gZXZ0ICYmIGwuZm4gPT09IGZuICl7XG4gICAgICAgICAgICAgICAgY3liZGdzLnNwbGljZSggaSwgMSApO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGN5UmVmLm9mZiggZXZ0LCBmbiApO1xuICAgICAgICAgIH07XG5cbiAgICAgICAgICB2YXIgJHBhbnpvb20gPSAkKCc8ZGl2IGNsYXNzPVwiY3ktcGFuem9vbVwiPjwvZGl2PicpO1xuICAgICAgICAgICRjb250YWluZXIucHJlcGVuZCggJHBhbnpvb20gKTtcblxuICAgICAgICAgICRwYW56b29tLmNzcygncG9zaXRpb24nLCAnYWJzb2x1dGUnKTsgLy8gbXVzdCBiZSBhYnNvbHV0ZSByZWdhcmRsZXNzIG9mIHN0eWxlc2hlZXRcblxuICAgICAgICAgICRwYW56b29tLmRhdGEoJ3dpbmJkZ3MnLCB3aW5iZGdzKTtcbiAgICAgICAgICAkcGFuem9vbS5kYXRhKCdjeWJkZ3MnLCBjeWJkZ3MpO1xuXG4gICAgICAgICAgaWYoIG9wdGlvbnMuem9vbU9ubHkgKXtcbiAgICAgICAgICAgICRwYW56b29tLmFkZENsYXNzKFwiY3ktcGFuem9vbS16b29tLW9ubHlcIik7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgLy8gYWRkIGJhc2UgaHRtbCBlbGVtZW50c1xuICAgICAgICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cblxuICAgICAgICAgIHZhciAkem9vbUluID0gJCgnPGRpdiBjbGFzcz1cImN5LXBhbnpvb20tem9vbS1pbiBjeS1wYW56b29tLXpvb20tYnV0dG9uXCI+PHNwYW4gY2xhc3M9XCJpY29uICcrIG9wdGlvbnMuem9vbUluSWNvbiArJ1wiPjwvc3Bhbj48L2Rpdj4nKTtcbiAgICAgICAgICAkcGFuem9vbS5hcHBlbmQoICR6b29tSW4gKTtcblxuICAgICAgICAgIHZhciAkem9vbU91dCA9ICQoJzxkaXYgY2xhc3M9XCJjeS1wYW56b29tLXpvb20tb3V0IGN5LXBhbnpvb20tem9vbS1idXR0b25cIj48c3BhbiBjbGFzcz1cImljb24gJyArIG9wdGlvbnMuem9vbU91dEljb24gKyAnXCI+PC9zcGFuPjwvZGl2PicpO1xuICAgICAgICAgICRwYW56b29tLmFwcGVuZCggJHpvb21PdXQgKTtcblxuICAgICAgICAgIHZhciAkcmVzZXQgPSAkKCc8ZGl2IGNsYXNzPVwiY3ktcGFuem9vbS1yZXNldCBjeS1wYW56b29tLXpvb20tYnV0dG9uXCI+PHNwYW4gY2xhc3M9XCJpY29uICcgKyBvcHRpb25zLnJlc2V0SWNvbiArICdcIj48L3NwYW4+PC9kaXY+Jyk7XG4gICAgICAgICAgJHBhbnpvb20uYXBwZW5kKCAkcmVzZXQgKTtcblxuICAgICAgICAgIHZhciAkc2xpZGVyID0gJCgnPGRpdiBjbGFzcz1cImN5LXBhbnpvb20tc2xpZGVyXCI+PC9kaXY+Jyk7XG4gICAgICAgICAgJHBhbnpvb20uYXBwZW5kKCAkc2xpZGVyICk7XG5cbiAgICAgICAgICAkc2xpZGVyLmFwcGVuZCgnPGRpdiBjbGFzcz1cImN5LXBhbnpvb20tc2xpZGVyLWJhY2tncm91bmRcIj48L2Rpdj4nKTtcblxuICAgICAgICAgIHZhciAkc2xpZGVySGFuZGxlID0gJCgnPGRpdiBjbGFzcz1cImN5LXBhbnpvb20tc2xpZGVyLWhhbmRsZVwiPjxzcGFuIGNsYXNzPVwiaWNvbiAnICsgb3B0aW9ucy5zbGlkZXJIYW5kbGVJY29uICsgJ1wiPjwvc3Bhbj48L2Rpdj4nKTtcbiAgICAgICAgICAkc2xpZGVyLmFwcGVuZCggJHNsaWRlckhhbmRsZSApO1xuXG4gICAgICAgICAgdmFyICRub1pvb21UaWNrID0gJCgnPGRpdiBjbGFzcz1cImN5LXBhbnpvb20tbm8tem9vbS10aWNrXCI+PC9kaXY+Jyk7XG4gICAgICAgICAgJHNsaWRlci5hcHBlbmQoICRub1pvb21UaWNrICk7XG5cbiAgICAgICAgICB2YXIgJHBhbm5lciA9ICQoJzxkaXYgY2xhc3M9XCJjeS1wYW56b29tLXBhbm5lclwiPjwvZGl2PicpO1xuICAgICAgICAgICRwYW56b29tLmFwcGVuZCggJHBhbm5lciApO1xuXG4gICAgICAgICAgdmFyICRwSGFuZGxlID0gJCgnPGRpdiBjbGFzcz1cImN5LXBhbnpvb20tcGFubmVyLWhhbmRsZVwiPjwvZGl2PicpO1xuICAgICAgICAgICRwYW5uZXIuYXBwZW5kKCAkcEhhbmRsZSApO1xuXG4gICAgICAgICAgdmFyICRwVXAgPSAkKCc8ZGl2IGNsYXNzPVwiY3ktcGFuem9vbS1wYW4tdXAgY3ktcGFuem9vbS1wYW4tYnV0dG9uXCI+PC9kaXY+Jyk7XG4gICAgICAgICAgdmFyICRwRG93biA9ICQoJzxkaXYgY2xhc3M9XCJjeS1wYW56b29tLXBhbi1kb3duIGN5LXBhbnpvb20tcGFuLWJ1dHRvblwiPjwvZGl2PicpO1xuICAgICAgICAgIHZhciAkcExlZnQgPSAkKCc8ZGl2IGNsYXNzPVwiY3ktcGFuem9vbS1wYW4tbGVmdCBjeS1wYW56b29tLXBhbi1idXR0b25cIj48L2Rpdj4nKTtcbiAgICAgICAgICB2YXIgJHBSaWdodCA9ICQoJzxkaXYgY2xhc3M9XCJjeS1wYW56b29tLXBhbi1yaWdodCBjeS1wYW56b29tLXBhbi1idXR0b25cIj48L2Rpdj4nKTtcbiAgICAgICAgICAkcGFubmVyLmFwcGVuZCggJHBVcCApLmFwcGVuZCggJHBEb3duICkuYXBwZW5kKCAkcExlZnQgKS5hcHBlbmQoICRwUmlnaHQgKTtcblxuICAgICAgICAgIHZhciAkcEluZGljYXRvciA9ICQoJzxkaXYgY2xhc3M9XCJjeS1wYW56b29tLXBhbi1pbmRpY2F0b3JcIj48L2Rpdj4nKTtcbiAgICAgICAgICAkcGFubmVyLmFwcGVuZCggJHBJbmRpY2F0b3IgKTtcblxuICAgICAgICAgIC8vIGZ1bmN0aW9ucyBmb3IgY2FsY3VsYXRpbmcgcGFubmluZ1xuICAgICAgICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuXG4gICAgICAgICAgZnVuY3Rpb24gaGFuZGxlMnBhbihlKXtcbiAgICAgICAgICAgIHZhciB2ID0ge1xuICAgICAgICAgICAgICB4OiBlLm9yaWdpbmFsRXZlbnQucGFnZVggLSAkcGFubmVyLm9mZnNldCgpLmxlZnQgLSAkcGFubmVyLndpZHRoKCkvMixcbiAgICAgICAgICAgICAgeTogZS5vcmlnaW5hbEV2ZW50LnBhZ2VZIC0gJHBhbm5lci5vZmZzZXQoKS50b3AgLSAkcGFubmVyLmhlaWdodCgpLzJcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdmFyIHIgPSBvcHRpb25zLnBhbkRyYWdBcmVhU2l6ZTtcbiAgICAgICAgICAgIHZhciBkID0gTWF0aC5zcXJ0KCB2Lngqdi54ICsgdi55KnYueSApO1xuICAgICAgICAgICAgdmFyIHBlcmNlbnQgPSBNYXRoLm1pbiggZC9yLCAxICk7XG5cbiAgICAgICAgICAgIGlmKCBkIDwgb3B0aW9ucy5wYW5JbmFjdGl2ZUFyZWEgKXtcbiAgICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICB4OiBOYU4sXG4gICAgICAgICAgICAgICAgeTogTmFOXG4gICAgICAgICAgICAgIH07XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHYgPSB7XG4gICAgICAgICAgICAgIHg6IHYueC9kLFxuICAgICAgICAgICAgICB5OiB2LnkvZFxuICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgcGVyY2VudCA9IE1hdGgubWF4KCBvcHRpb25zLnBhbk1pblBlcmNlbnRTcGVlZCwgcGVyY2VudCApO1xuXG4gICAgICAgICAgICB2YXIgdm5vcm0gPSB7XG4gICAgICAgICAgICAgIHg6IC0xICogdi54ICogKHBlcmNlbnQgKiBvcHRpb25zLnBhbkRpc3RhbmNlKSxcbiAgICAgICAgICAgICAgeTogLTEgKiB2LnkgKiAocGVyY2VudCAqIG9wdGlvbnMucGFuRGlzdGFuY2UpXG4gICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICByZXR1cm4gdm5vcm07XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgZnVuY3Rpb24gZG9uZVBhbm5pbmcoKXtcbiAgICAgICAgICAgIGNsZWFySW50ZXJ2YWwocGFuSW50ZXJ2YWwpO1xuICAgICAgICAgICAgd2luZG93VW5iaW5kKFwibW91c2Vtb3ZlXCIsIGhhbmRsZXIpO1xuXG4gICAgICAgICAgICAkcEluZGljYXRvci5oaWRlKCk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgZnVuY3Rpb24gcG9zaXRpb25JbmRpY2F0b3IocGFuKXtcbiAgICAgICAgICAgIHZhciB2ID0gcGFuO1xuICAgICAgICAgICAgdmFyIGQgPSBNYXRoLnNxcnQoIHYueCp2LnggKyB2Lnkqdi55ICk7XG4gICAgICAgICAgICB2YXIgdm5vcm0gPSB7XG4gICAgICAgICAgICAgIHg6IC0xICogdi54L2QsXG4gICAgICAgICAgICAgIHk6IC0xICogdi55L2RcbiAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgIHZhciB3ID0gJHBhbm5lci53aWR0aCgpO1xuICAgICAgICAgICAgdmFyIGggPSAkcGFubmVyLmhlaWdodCgpO1xuICAgICAgICAgICAgdmFyIHBlcmNlbnQgPSBkL29wdGlvbnMucGFuRGlzdGFuY2U7XG4gICAgICAgICAgICB2YXIgb3BhY2l0eSA9IE1hdGgubWF4KCBvcHRpb25zLnBhbkluZGljYXRvck1pbk9wYWNpdHksIHBlcmNlbnQgKTtcbiAgICAgICAgICAgIHZhciBjb2xvciA9IDI1NSAtIE1hdGgucm91bmQoIG9wYWNpdHkgKiAyNTUgKTtcblxuICAgICAgICAgICAgJHBJbmRpY2F0b3Iuc2hvdygpLmNzcyh7XG4gICAgICAgICAgICAgIGxlZnQ6IHcvMiAqIHZub3JtLnggKyB3LzIsXG4gICAgICAgICAgICAgIHRvcDogaC8yICogdm5vcm0ueSArIGgvMixcbiAgICAgICAgICAgICAgYmFja2dyb3VuZDogXCJyZ2IoXCIgKyBjb2xvciArIFwiLCBcIiArIGNvbG9yICsgXCIsIFwiICsgY29sb3IgKyBcIilcIlxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgZnVuY3Rpb24gY2FsY3VsYXRlWm9vbUNlbnRlclBvaW50KCl7XG4gICAgICAgICAgICB2YXIgcGFuID0gY3lSZWYucGFuKCk7XG4gICAgICAgICAgICB2YXIgem9vbSA9IGN5UmVmLnpvb20oKTtcblxuICAgICAgICAgICAgenggPSAkY29udGFpbmVyLndpZHRoKCkvMjtcbiAgICAgICAgICAgIHp5ID0gJGNvbnRhaW5lci5oZWlnaHQoKS8yO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHZhciB6b29taW5nID0gZmFsc2U7XG4gICAgICAgICAgZnVuY3Rpb24gc3RhcnRab29taW5nKCl7XG4gICAgICAgICAgICB6b29taW5nID0gdHJ1ZTtcblxuICAgICAgICAgICAgY2FsY3VsYXRlWm9vbUNlbnRlclBvaW50KCk7XG4gICAgICAgICAgfVxuXG5cbiAgICAgICAgICBmdW5jdGlvbiBlbmRab29taW5nKCl7XG4gICAgICAgICAgICB6b29taW5nID0gZmFsc2U7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgdmFyIHp4LCB6eTtcbiAgICAgICAgICBmdW5jdGlvbiB6b29tVG8obGV2ZWwpe1xuICAgICAgICAgICAgaWYoICF6b29taW5nICl7IC8vIGZvciBub24tY29udGludW91cyB6b29taW5nIChlLmcuIGNsaWNrIHNsaWRlciBhdCBwdClcbiAgICAgICAgICAgICAgY2FsY3VsYXRlWm9vbUNlbnRlclBvaW50KCk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGN5UmVmLnpvb20oe1xuICAgICAgICAgICAgICBsZXZlbDogbGV2ZWwsXG4gICAgICAgICAgICAgIHJlbmRlcmVkUG9zaXRpb246IHsgeDogengsIHk6IHp5IH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHZhciBwYW5JbnRlcnZhbDtcblxuICAgICAgICAgIHZhciBoYW5kbGVyID0gZnVuY3Rpb24oZSl7XG4gICAgICAgICAgICBlLnN0b3BQcm9wYWdhdGlvbigpOyAvLyBkb24ndCB0cmlnZ2VyIGRyYWdnaW5nIG9mIHBhbnpvb21cbiAgICAgICAgICAgIGUucHJldmVudERlZmF1bHQoKTsgLy8gZG9uJ3QgY2F1c2UgdGV4dCBzZWxlY3Rpb25cbiAgICAgICAgICAgIGNsZWFySW50ZXJ2YWwocGFuSW50ZXJ2YWwpO1xuXG4gICAgICAgICAgICB2YXIgcGFuID0gaGFuZGxlMnBhbihlKTtcblxuICAgICAgICAgICAgaWYoIGlzTmFOKHBhbi54KSB8fCBpc05hTihwYW4ueSkgKXtcbiAgICAgICAgICAgICAgJHBJbmRpY2F0b3IuaGlkZSgpO1xuICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHBvc2l0aW9uSW5kaWNhdG9yKHBhbik7XG4gICAgICAgICAgICBwYW5JbnRlcnZhbCA9IHNldEludGVydmFsKGZ1bmN0aW9uKCl7XG4gICAgICAgICAgICAgIGN5UmVmLnBhbkJ5KHBhbik7XG4gICAgICAgICAgICB9LCBvcHRpb25zLnBhblNwZWVkKTtcbiAgICAgICAgICB9O1xuXG4gICAgICAgICAgJHBIYW5kbGUuYmluZChcIm1vdXNlZG93blwiLCBmdW5jdGlvbihlKXtcbiAgICAgICAgICAgIC8vIGhhbmRsZSBjbGljayBvZiBpY29uXG4gICAgICAgICAgICBoYW5kbGVyKGUpO1xuXG4gICAgICAgICAgICAvLyB1cGRhdGUgb24gbW91c2Vtb3ZlXG4gICAgICAgICAgICB3aW5kb3dCaW5kKFwibW91c2Vtb3ZlXCIsIGhhbmRsZXIpO1xuICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgJHBIYW5kbGUuYmluZChcIm1vdXNldXBcIiwgZnVuY3Rpb24oKXtcbiAgICAgICAgICAgIGRvbmVQYW5uaW5nKCk7XG4gICAgICAgICAgfSk7XG5cbiAgICAgICAgICB3aW5kb3dCaW5kKFwibW91c2V1cCBibHVyXCIsIGZ1bmN0aW9uKCl7XG4gICAgICAgICAgICBkb25lUGFubmluZygpO1xuICAgICAgICAgIH0pO1xuXG5cblxuICAgICAgICAgIC8vIHNldCB1cCBzbGlkZXIgYmVoYXZpb3VyXG4gICAgICAgICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cblxuICAgICAgICAgICRzbGlkZXIuYmluZCgnbW91c2Vkb3duJywgZnVuY3Rpb24oKXtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTsgLy8gc28gd2UgZG9uJ3QgcGFuIGNsb3NlIHRvIHRoZSBzbGlkZXIgaGFuZGxlXG4gICAgICAgICAgfSk7XG5cbiAgICAgICAgICB2YXIgc2xpZGVyVmFsO1xuICAgICAgICAgIHZhciBzbGlkaW5nID0gZmFsc2U7XG4gICAgICAgICAgdmFyIHNsaWRlclBhZGRpbmcgPSAyO1xuXG4gICAgICAgICAgZnVuY3Rpb24gc2V0U2xpZGVyRnJvbU1vdXNlKGV2dCwgaGFuZGxlT2Zmc2V0KXtcbiAgICAgICAgICAgIGlmKCBoYW5kbGVPZmZzZXQgPT09IHVuZGVmaW5lZCApe1xuICAgICAgICAgICAgICBoYW5kbGVPZmZzZXQgPSAwO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB2YXIgcGFkZGluZyA9IHNsaWRlclBhZGRpbmc7XG4gICAgICAgICAgICB2YXIgbWluID0gMCArIHBhZGRpbmc7XG4gICAgICAgICAgICB2YXIgbWF4ID0gJHNsaWRlci5oZWlnaHQoKSAtICRzbGlkZXJIYW5kbGUuaGVpZ2h0KCkgLSAyKnBhZGRpbmc7XG4gICAgICAgICAgICB2YXIgdG9wID0gZXZ0LnBhZ2VZIC0gJHNsaWRlci5vZmZzZXQoKS50b3AgLSBoYW5kbGVPZmZzZXQ7XG5cbiAgICAgICAgICAgIC8vIGNvbnN0cmFpbiB0byBzbGlkZXIgYm91bmRzXG4gICAgICAgICAgICBpZiggdG9wIDwgbWluICl7IHRvcCA9IG1pbiB9XG4gICAgICAgICAgICBpZiggdG9wID4gbWF4ICl7IHRvcCA9IG1heCB9XG5cbiAgICAgICAgICAgIHZhciBwZXJjZW50ID0gMSAtICh0b3AgLSBtaW4pIC8gKCBtYXggLSBtaW4gKTtcblxuICAgICAgICAgICAgLy8gbW92ZSB0aGUgaGFuZGxlXG4gICAgICAgICAgICAkc2xpZGVySGFuZGxlLmNzcygndG9wJywgdG9wKTtcblxuICAgICAgICAgICAgdmFyIHptaW4gPSBvcHRpb25zLm1pblpvb207XG4gICAgICAgICAgICB2YXIgem1heCA9IG9wdGlvbnMubWF4Wm9vbTtcblxuICAgICAgICAgICAgLy8gYXNzdW1lICh6b29tID0gem1heCBeIHApIHdoZXJlIHAgcmFuZ2VzIG9uICh4LCAxKSB3aXRoIHggbmVnYXRpdmVcbiAgICAgICAgICAgIHZhciB4ID0gTWF0aC5sb2coem1pbikgLyBNYXRoLmxvZyh6bWF4KTtcbiAgICAgICAgICAgIHZhciBwID0gKDEgLSB4KSpwZXJjZW50ICsgeDtcblxuICAgICAgICAgICAgLy8gY2hhbmdlIHRoZSB6b29tIGxldmVsXG4gICAgICAgICAgICB2YXIgeiA9IE1hdGgucG93KCB6bWF4LCBwICk7XG5cbiAgICAgICAgICAgIC8vIGJvdW5kIHRoZSB6b29tIHZhbHVlIGluIGNhc2Ugb2YgZmxvYXRpbmcgcHQgcm91bmRpbmcgZXJyb3JcbiAgICAgICAgICAgIGlmKCB6IDwgem1pbiApe1xuICAgICAgICAgICAgICB6ID0gem1pbjtcbiAgICAgICAgICAgIH0gZWxzZSBpZiggeiA+IHptYXggKXtcbiAgICAgICAgICAgICAgeiA9IHptYXg7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHpvb21UbyggeiApO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHZhciBzbGlkZXJNZG93bkhhbmRsZXIsIHNsaWRlck1tb3ZlSGFuZGxlcjtcbiAgICAgICAgICAkc2xpZGVySGFuZGxlLmJpbmQoJ21vdXNlZG93bicsIHNsaWRlck1kb3duSGFuZGxlciA9IGZ1bmN0aW9uKCBtZEV2dCApe1xuICAgICAgICAgICAgdmFyIGhhbmRsZU9mZnNldCA9IG1kRXZ0LnRhcmdldCA9PT0gJHNsaWRlckhhbmRsZVswXSA/IG1kRXZ0Lm9mZnNldFkgOiAwO1xuICAgICAgICAgICAgc2xpZGluZyA9IHRydWU7XG5cbiAgICAgICAgICAgIHN0YXJ0Wm9vbWluZygpO1xuICAgICAgICAgICAgJHNsaWRlckhhbmRsZS5hZGRDbGFzcyhcImFjdGl2ZVwiKTtcblxuICAgICAgICAgICAgdmFyIGxhc3RNb3ZlID0gMDtcbiAgICAgICAgICAgIHdpbmRvd0JpbmQoJ21vdXNlbW92ZScsIHNsaWRlck1tb3ZlSGFuZGxlciA9IGZ1bmN0aW9uKCBtbUV2dCApe1xuICAgICAgICAgICAgICB2YXIgbm93ID0gK25ldyBEYXRlO1xuXG4gICAgICAgICAgICAgIC8vIHRocm90dGxlIHRoZSB6b29tcyBldmVyeSAxMCBtcyBzbyB3ZSBkb24ndCBjYWxsIHpvb20gdG9vIG9mdGVuIGFuZCBjYXVzZSBsYWdcbiAgICAgICAgICAgICAgaWYoIG5vdyA+IGxhc3RNb3ZlICsgMTAgKXtcbiAgICAgICAgICAgICAgICBsYXN0TW92ZSA9IG5vdztcbiAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICBzZXRTbGlkZXJGcm9tTW91c2UobW1FdnQsIGhhbmRsZU9mZnNldCk7XG5cbiAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIC8vIHVuYmluZCB3aGVuXG4gICAgICAgICAgICB3aW5kb3dCaW5kKCdtb3VzZXVwJywgZnVuY3Rpb24oKXtcbiAgICAgICAgICAgICAgd2luZG93VW5iaW5kKCdtb3VzZW1vdmUnLCBzbGlkZXJNbW92ZUhhbmRsZXIpO1xuICAgICAgICAgICAgICBzbGlkaW5nID0gZmFsc2U7XG5cbiAgICAgICAgICAgICAgJHNsaWRlckhhbmRsZS5yZW1vdmVDbGFzcyhcImFjdGl2ZVwiKTtcbiAgICAgICAgICAgICAgZW5kWm9vbWluZygpO1xuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICB9KTtcblxuICAgICAgICAgICRzbGlkZXIuYmluZCgnbW91c2Vkb3duJywgZnVuY3Rpb24oZSl7XG4gICAgICAgICAgICBpZiggZS50YXJnZXQgIT09ICRzbGlkZXJIYW5kbGVbMF0gKXtcbiAgICAgICAgICAgICAgc2xpZGVyTWRvd25IYW5kbGVyKGUpO1xuICAgICAgICAgICAgICBzZXRTbGlkZXJGcm9tTW91c2UoZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSk7XG5cbiAgICAgICAgICBmdW5jdGlvbiBwb3NpdGlvblNsaWRlckZyb21ab29tKCl7XG4gICAgICAgICAgICB2YXIgeiA9IGN5UmVmLnpvb20oKTtcbiAgICAgICAgICAgIHZhciB6bWluID0gb3B0aW9ucy5taW5ab29tO1xuICAgICAgICAgICAgdmFyIHptYXggPSBvcHRpb25zLm1heFpvb207XG5cbiAgICAgICAgICAgIC8vIGFzc3VtZSAoem9vbSA9IHptYXggXiBwKSB3aGVyZSBwIHJhbmdlcyBvbiAoeCwgMSkgd2l0aCB4IG5lZ2F0aXZlXG4gICAgICAgICAgICB2YXIgeCA9IE1hdGgubG9nKHptaW4pIC8gTWF0aC5sb2coem1heCk7XG4gICAgICAgICAgICB2YXIgcCA9IE1hdGgubG9nKHopIC8gTWF0aC5sb2coem1heCk7XG4gICAgICAgICAgICB2YXIgcGVyY2VudCA9IDEgLSAocCAtIHgpIC8gKDEgLSB4KTsgLy8gdGhlIDEtIGJpdCBhdCB0aGUgZnJvbnQgYi9jIHVwIGlzIGluIHRoZSAtdmUgeSBkaXJlY3Rpb25cblxuICAgICAgICAgICAgdmFyIG1pbiA9IHNsaWRlclBhZGRpbmc7XG4gICAgICAgICAgICB2YXIgbWF4ID0gJHNsaWRlci5oZWlnaHQoKSAtICRzbGlkZXJIYW5kbGUuaGVpZ2h0KCkgLSAyKnNsaWRlclBhZGRpbmc7XG4gICAgICAgICAgICB2YXIgdG9wID0gcGVyY2VudCAqICggbWF4IC0gbWluICk7XG5cbiAgICAgICAgICAgIC8vIGNvbnN0cmFpbiB0byBzbGlkZXIgYm91bmRzXG4gICAgICAgICAgICBpZiggdG9wIDwgbWluICl7IHRvcCA9IG1pbiB9XG4gICAgICAgICAgICBpZiggdG9wID4gbWF4ICl7IHRvcCA9IG1heCB9XG5cbiAgICAgICAgICAgIC8vIG1vdmUgdGhlIGhhbmRsZVxuICAgICAgICAgICAgJHNsaWRlckhhbmRsZS5jc3MoJ3RvcCcsIHRvcCk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgcG9zaXRpb25TbGlkZXJGcm9tWm9vbSgpO1xuXG4gICAgICAgICAgY3lPbignem9vbScsIGZ1bmN0aW9uKCl7XG4gICAgICAgICAgICBpZiggIXNsaWRpbmcgKXtcbiAgICAgICAgICAgICAgcG9zaXRpb25TbGlkZXJGcm9tWm9vbSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgLy8gc2V0IHRoZSBwb3NpdGlvbiBvZiB0aGUgem9vbT0xIHRpY2tcbiAgICAgICAgICAoZnVuY3Rpb24oKXtcbiAgICAgICAgICAgIHZhciB6ID0gMTtcbiAgICAgICAgICAgIHZhciB6bWluID0gb3B0aW9ucy5taW5ab29tO1xuICAgICAgICAgICAgdmFyIHptYXggPSBvcHRpb25zLm1heFpvb207XG5cbiAgICAgICAgICAgIC8vIGFzc3VtZSAoem9vbSA9IHptYXggXiBwKSB3aGVyZSBwIHJhbmdlcyBvbiAoeCwgMSkgd2l0aCB4IG5lZ2F0aXZlXG4gICAgICAgICAgICB2YXIgeCA9IE1hdGgubG9nKHptaW4pIC8gTWF0aC5sb2coem1heCk7XG4gICAgICAgICAgICB2YXIgcCA9IE1hdGgubG9nKHopIC8gTWF0aC5sb2coem1heCk7XG4gICAgICAgICAgICB2YXIgcGVyY2VudCA9IDEgLSAocCAtIHgpIC8gKDEgLSB4KTsgLy8gdGhlIDEtIGJpdCBhdCB0aGUgZnJvbnQgYi9jIHVwIGlzIGluIHRoZSAtdmUgeSBkaXJlY3Rpb25cblxuICAgICAgICAgICAgaWYoIHBlcmNlbnQgPiAxIHx8IHBlcmNlbnQgPCAwICl7XG4gICAgICAgICAgICAgICRub1pvb21UaWNrLmhpZGUoKTtcbiAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB2YXIgbWluID0gc2xpZGVyUGFkZGluZztcbiAgICAgICAgICAgIHZhciBtYXggPSAkc2xpZGVyLmhlaWdodCgpIC0gJHNsaWRlckhhbmRsZS5oZWlnaHQoKSAtIDIqc2xpZGVyUGFkZGluZztcbiAgICAgICAgICAgIHZhciB0b3AgPSBwZXJjZW50ICogKCBtYXggLSBtaW4gKTtcblxuICAgICAgICAgICAgLy8gY29uc3RyYWluIHRvIHNsaWRlciBib3VuZHNcbiAgICAgICAgICAgIGlmKCB0b3AgPCBtaW4gKXsgdG9wID0gbWluIH1cbiAgICAgICAgICAgIGlmKCB0b3AgPiBtYXggKXsgdG9wID0gbWF4IH1cblxuICAgICAgICAgICAgJG5vWm9vbVRpY2suY3NzKCd0b3AnLCB0b3ApO1xuICAgICAgICAgIH0pKCk7XG5cbiAgICAgICAgICAvLyBzZXQgdXAgem9vbSBpbi9vdXQgYnV0dG9uc1xuICAgICAgICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG5cbiAgICAgICAgICBmdW5jdGlvbiBiaW5kQnV0dG9uKCRidXR0b24sIGZhY3Rvcil7XG4gICAgICAgICAgICB2YXIgem9vbUludGVydmFsO1xuXG4gICAgICAgICAgICAkYnV0dG9uLmJpbmQoXCJtb3VzZWRvd25cIiwgZnVuY3Rpb24oZSl7XG4gICAgICAgICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgICAgZS5zdG9wUHJvcGFnYXRpb24oKTtcblxuICAgICAgICAgICAgICBpZiggZS5idXR0b24gIT0gMCApe1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIHZhciBkb1pvb20gPSBmdW5jdGlvbigpe1xuICAgICAgICAgICAgICAgIHZhciB6b29tID0gY3lSZWYuem9vbSgpO1xuICAgICAgICAgICAgICAgIHZhciBsdmwgPSBjeVJlZi56b29tKCkgKiBmYWN0b3I7XG5cbiAgICAgICAgICAgICAgICBpZiggbHZsIDwgb3B0aW9ucy5taW5ab29tICl7XG4gICAgICAgICAgICAgICAgICBsdmwgPSBvcHRpb25zLm1pblpvb207XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgaWYoIGx2bCA+IG9wdGlvbnMubWF4Wm9vbSApe1xuICAgICAgICAgICAgICAgICAgbHZsID0gb3B0aW9ucy5tYXhab29tO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGlmKCAobHZsID09IG9wdGlvbnMubWF4Wm9vbSAmJiB6b29tID09IG9wdGlvbnMubWF4Wm9vbSkgfHxcbiAgICAgICAgICAgICAgICAgIChsdmwgPT0gb3B0aW9ucy5taW5ab29tICYmIHpvb20gPT0gb3B0aW9ucy5taW5ab29tKVxuICAgICAgICAgICAgICAgICl7XG4gICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgem9vbVRvKGx2bCk7XG4gICAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgICAgc3RhcnRab29taW5nKCk7XG4gICAgICAgICAgICAgIGRvWm9vbSgpO1xuICAgICAgICAgICAgICB6b29tSW50ZXJ2YWwgPSBzZXRJbnRlcnZhbChkb1pvb20sIG9wdGlvbnMuem9vbURlbGF5KTtcblxuICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgd2luZG93QmluZChcIm1vdXNldXAgYmx1clwiLCBmdW5jdGlvbigpe1xuICAgICAgICAgICAgICBjbGVhckludGVydmFsKHpvb21JbnRlcnZhbCk7XG4gICAgICAgICAgICAgIGVuZFpvb21pbmcoKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGJpbmRCdXR0b24oICR6b29tSW4sICgxICsgb3B0aW9ucy56b29tRmFjdG9yKSApO1xuICAgICAgICAgIGJpbmRCdXR0b24oICR6b29tT3V0LCAoMSAtIG9wdGlvbnMuem9vbUZhY3RvcikgKTtcblxuICAgICAgICAgICRyZXNldC5iaW5kKFwibW91c2Vkb3duXCIsIGZ1bmN0aW9uKGUpe1xuICAgICAgICAgICAgaWYoIGUuYnV0dG9uICE9IDAgKXtcbiAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB2YXIgZWxlc1RvRml0ID0gb3B0aW9ucy5maXRTZWxlY3Rvcj9jeVJlZi5lbGVtZW50cyhvcHRpb25zLmZpdFNlbGVjdG9yKTpjeVJlZi5lbGVtZW50cygpO1xuXG4gICAgICAgICAgICBpZiggZWxlc1RvRml0LnNpemUoKSA9PT0gMCApe1xuICAgICAgICAgICAgICBjeVJlZi5yZXNldCgpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgdmFyIGFuaW1hdGVPbkZpdCA9IHR5cGVvZiBvcHRpb25zLmFuaW1hdGVPbkZpdCA9PT0gJ2Z1bmN0aW9uJyA/IG9wdGlvbnMuYW5pbWF0ZU9uRml0LmNhbGwoKSA6IG9wdGlvbnMuYW5pbWF0ZU9uRml0O1xuICAgICAgICAgICAgICBpZihhbmltYXRlT25GaXQpe1xuICAgICAgICAgICAgICAgIGN5UmVmLmFuaW1hdGUoe1xuICAgICAgICAgICAgICAgICAgZml0OiB7XG4gICAgICAgICAgICAgICAgICAgIGVsZXM6IGVsZXNUb0ZpdCxcbiAgICAgICAgICAgICAgICAgICAgcGFkZGluZzogb3B0aW9ucy5maXRQYWRkaW5nXG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSwge1xuICAgICAgICAgICAgICAgICAgZHVyYXRpb246IG9wdGlvbnMuZml0QW5pbWF0aW9uRHVyYXRpb25cbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBlbHNle1xuICAgICAgICAgICAgICAgIGN5UmVmLmZpdCggZWxlc1RvRml0LCBvcHRpb25zLmZpdFBhZGRpbmcgKTtcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICB9KTtcblxuXG5cbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfTtcblxuICAgIGlmKCBmdW5jdGlvbnNbZm5dICl7XG4gICAgICByZXR1cm4gZnVuY3Rpb25zW2ZuXS5hcHBseSh0aGlzLCBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbCggYXJndW1lbnRzLCAxICkpO1xuICAgIH0gZWxzZSBpZiggdHlwZW9mIGZuID09ICdvYmplY3QnIHx8ICFmbiApIHtcbiAgICAgIHJldHVybiBmdW5jdGlvbnMuaW5pdC5hcHBseSggdGhpcywgYXJndW1lbnRzICk7XG4gICAgfSBlbHNlIHtcbiAgICAgICQuZXJyb3IoXCJObyBzdWNoIGZ1bmN0aW9uIGBcIisgZm4gK1wiYCBmb3IganF1ZXJ5LmN5dG9zY2FwZVBhbnpvb21cIik7XG4gICAgfVxuXG4gICAgcmV0dXJuICQodGhpcyk7XG4gIH07XG5cblxuICBpZiggdHlwZW9mIG1vZHVsZSAhPT0gJ3VuZGVmaW5lZCcgJiYgbW9kdWxlLmV4cG9ydHMgKXsgLy8gZXhwb3NlIGFzIGEgY29tbW9uanMgbW9kdWxlXG4gICAgbW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiggY3l0b3NjYXBlLCBqcXVlcnkgKXtcbiAgICAgIHJlZ2lzdGVyKCBjeXRvc2NhcGUsIGpxdWVyeSB8fCByZXF1aXJlKCdqcXVlcnknKSApO1xuICAgIH1cbiAgfSBlbHNlIGlmKCB0eXBlb2YgZGVmaW5lICE9PSAndW5kZWZpbmVkJyAmJiBkZWZpbmUuYW1kICl7IC8vIGV4cG9zZSBhcyBhbiBhbWQvcmVxdWlyZWpzIG1vZHVsZVxuICAgIGRlZmluZSgnY3l0b3NjYXBlLXBhbnpvb20nLCBmdW5jdGlvbigpe1xuICAgICAgcmV0dXJuIHJlZ2lzdGVyO1xuICAgIH0pO1xuICB9XG5cbiAgaWYoIHR5cGVvZiBjeXRvc2NhcGUgIT09ICd1bmRlZmluZWQnICYmIHR5cGVvZiBqUXVlcnkgIT09ICd1bmRlZmluZWQnICl7IC8vIGV4cG9zZSB0byBnbG9iYWwgY3l0b3NjYXBlIChpLmUuIHdpbmRvdy5jeXRvc2NhcGUpXG4gICAgcmVnaXN0ZXIoIGN5dG9zY2FwZSwgalF1ZXJ5ICk7XG4gIH1cblxufSkoKTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///19679\n")},20838:function(__unused_webpack_module,__unused_webpack_exports,__webpack_require__){eval("//! moment.js locale configuration\n//! locale : Spanish (Dominican Republic) [es-do]\n\n;(function (global, factory) {\n true ? factory(__webpack_require__(95093)) :\n 0\n}(this, (function (moment) { 'use strict';\n\n //! moment.js locale configuration\n\n var monthsShortDot =\n 'ene._feb._mar._abr._may._jun._jul._ago._sep._oct._nov._dic.'.split(\n '_'\n ),\n monthsShort = 'ene_feb_mar_abr_may_jun_jul_ago_sep_oct_nov_dic'.split('_'),\n monthsParse = [\n /^ene/i,\n /^feb/i,\n /^mar/i,\n /^abr/i,\n /^may/i,\n /^jun/i,\n /^jul/i,\n /^ago/i,\n /^sep/i,\n /^oct/i,\n /^nov/i,\n /^dic/i,\n ],\n monthsRegex =\n /^(enero|febrero|marzo|abril|mayo|junio|julio|agosto|septiembre|octubre|noviembre|diciembre|ene\\.?|feb\\.?|mar\\.?|abr\\.?|may\\.?|jun\\.?|jul\\.?|ago\\.?|sep\\.?|oct\\.?|nov\\.?|dic\\.?)/i;\n\n var esDo = moment.defineLocale('es-do', {\n months: 'enero_febrero_marzo_abril_mayo_junio_julio_agosto_septiembre_octubre_noviembre_diciembre'.split(\n '_'\n ),\n monthsShort: function (m, format) {\n if (!m) {\n return monthsShortDot;\n } else if (/-MMM-/.test(format)) {\n return monthsShort[m.month()];\n } else {\n return monthsShortDot[m.month()];\n }\n },\n monthsRegex: monthsRegex,\n monthsShortRegex: monthsRegex,\n monthsStrictRegex:\n /^(enero|febrero|marzo|abril|mayo|junio|julio|agosto|septiembre|octubre|noviembre|diciembre)/i,\n monthsShortStrictRegex:\n /^(ene\\.?|feb\\.?|mar\\.?|abr\\.?|may\\.?|jun\\.?|jul\\.?|ago\\.?|sep\\.?|oct\\.?|nov\\.?|dic\\.?)/i,\n monthsParse: monthsParse,\n longMonthsParse: monthsParse,\n shortMonthsParse: monthsParse,\n weekdays: 'domingo_lunes_martes_miércoles_jueves_viernes_sábado'.split('_'),\n weekdaysShort: 'dom._lun._mar._mié._jue._vie._sáb.'.split('_'),\n weekdaysMin: 'do_lu_ma_mi_ju_vi_sá'.split('_'),\n weekdaysParseExact: true,\n longDateFormat: {\n LT: 'h:mm A',\n LTS: 'h:mm:ss A',\n L: 'DD/MM/YYYY',\n LL: 'D [de] MMMM [de] YYYY',\n LLL: 'D [de] MMMM [de] YYYY h:mm A',\n LLLL: 'dddd, D [de] MMMM [de] YYYY h:mm A',\n },\n calendar: {\n sameDay: function () {\n return '[hoy a la' + (this.hours() !== 1 ? 's' : '') + '] LT';\n },\n nextDay: function () {\n return '[mañana a la' + (this.hours() !== 1 ? 's' : '') + '] LT';\n },\n nextWeek: function () {\n return 'dddd [a la' + (this.hours() !== 1 ? 's' : '') + '] LT';\n },\n lastDay: function () {\n return '[ayer a la' + (this.hours() !== 1 ? 's' : '') + '] LT';\n },\n lastWeek: function () {\n return (\n '[el] dddd [pasado a la' +\n (this.hours() !== 1 ? 's' : '') +\n '] LT'\n );\n },\n sameElse: 'L',\n },\n relativeTime: {\n future: 'en %s',\n past: 'hace %s',\n s: 'unos segundos',\n ss: '%d segundos',\n m: 'un minuto',\n mm: '%d minutos',\n h: 'una hora',\n hh: '%d horas',\n d: 'un día',\n dd: '%d días',\n w: 'una semana',\n ww: '%d semanas',\n M: 'un mes',\n MM: '%d meses',\n y: 'un año',\n yy: '%d años',\n },\n dayOfMonthOrdinalParse: /\\d{1,2}º/,\n ordinal: '%dº',\n week: {\n dow: 1, // Monday is the first day of the week.\n doy: 4, // The week that contains Jan 4th is the first week of the year.\n },\n });\n\n return esDo;\n\n})));\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMjA4MzguanMiLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vaXRnLW5leHRnZW4tZnJvbnRlbmQvLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9lcy1kby5qcz8wYTNjIl0sInNvdXJjZXNDb250ZW50IjpbIi8vISBtb21lbnQuanMgbG9jYWxlIGNvbmZpZ3VyYXRpb25cbi8vISBsb2NhbGUgOiBTcGFuaXNoIChEb21pbmljYW4gUmVwdWJsaWMpIFtlcy1kb11cblxuOyhmdW5jdGlvbiAoZ2xvYmFsLCBmYWN0b3J5KSB7XG4gICB0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcgJiYgdHlwZW9mIG1vZHVsZSAhPT0gJ3VuZGVmaW5lZCdcbiAgICAgICAmJiB0eXBlb2YgcmVxdWlyZSA9PT0gJ2Z1bmN0aW9uJyA/IGZhY3RvcnkocmVxdWlyZSgnLi4vbW9tZW50JykpIDpcbiAgIHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgZGVmaW5lLmFtZCA/IGRlZmluZShbJy4uL21vbWVudCddLCBmYWN0b3J5KSA6XG4gICBmYWN0b3J5KGdsb2JhbC5tb21lbnQpXG59KHRoaXMsIChmdW5jdGlvbiAobW9tZW50KSB7ICd1c2Ugc3RyaWN0JztcblxuICAgIC8vISBtb21lbnQuanMgbG9jYWxlIGNvbmZpZ3VyYXRpb25cblxuICAgIHZhciBtb250aHNTaG9ydERvdCA9XG4gICAgICAgICAgICAnZW5lLl9mZWIuX21hci5fYWJyLl9tYXkuX2p1bi5fanVsLl9hZ28uX3NlcC5fb2N0Ll9ub3YuX2RpYy4nLnNwbGl0KFxuICAgICAgICAgICAgICAgICdfJ1xuICAgICAgICAgICAgKSxcbiAgICAgICAgbW9udGhzU2hvcnQgPSAnZW5lX2ZlYl9tYXJfYWJyX21heV9qdW5fanVsX2Fnb19zZXBfb2N0X25vdl9kaWMnLnNwbGl0KCdfJyksXG4gICAgICAgIG1vbnRoc1BhcnNlID0gW1xuICAgICAgICAgICAgL15lbmUvaSxcbiAgICAgICAgICAgIC9eZmViL2ksXG4gICAgICAgICAgICAvXm1hci9pLFxuICAgICAgICAgICAgL15hYnIvaSxcbiAgICAgICAgICAgIC9ebWF5L2ksXG4gICAgICAgICAgICAvXmp1bi9pLFxuICAgICAgICAgICAgL15qdWwvaSxcbiAgICAgICAgICAgIC9eYWdvL2ksXG4gICAgICAgICAgICAvXnNlcC9pLFxuICAgICAgICAgICAgL15vY3QvaSxcbiAgICAgICAgICAgIC9ebm92L2ksXG4gICAgICAgICAgICAvXmRpYy9pLFxuICAgICAgICBdLFxuICAgICAgICBtb250aHNSZWdleCA9XG4gICAgICAgICAgICAvXihlbmVyb3xmZWJyZXJvfG1hcnpvfGFicmlsfG1heW98anVuaW98anVsaW98YWdvc3RvfHNlcHRpZW1icmV8b2N0dWJyZXxub3ZpZW1icmV8ZGljaWVtYnJlfGVuZVxcLj98ZmViXFwuP3xtYXJcXC4/fGFiclxcLj98bWF5XFwuP3xqdW5cXC4/fGp1bFxcLj98YWdvXFwuP3xzZXBcXC4/fG9jdFxcLj98bm92XFwuP3xkaWNcXC4/KS9pO1xuXG4gICAgdmFyIGVzRG8gPSBtb21lbnQuZGVmaW5lTG9jYWxlKCdlcy1kbycsIHtcbiAgICAgICAgbW9udGhzOiAnZW5lcm9fZmVicmVyb19tYXJ6b19hYnJpbF9tYXlvX2p1bmlvX2p1bGlvX2Fnb3N0b19zZXB0aWVtYnJlX29jdHVicmVfbm92aWVtYnJlX2RpY2llbWJyZScuc3BsaXQoXG4gICAgICAgICAgICAnXydcbiAgICAgICAgKSxcbiAgICAgICAgbW9udGhzU2hvcnQ6IGZ1bmN0aW9uIChtLCBmb3JtYXQpIHtcbiAgICAgICAgICAgIGlmICghbSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBtb250aHNTaG9ydERvdDtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoLy1NTU0tLy50ZXN0KGZvcm1hdCkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gbW9udGhzU2hvcnRbbS5tb250aCgpXTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG1vbnRoc1Nob3J0RG90W20ubW9udGgoKV07XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIG1vbnRoc1JlZ2V4OiBtb250aHNSZWdleCxcbiAgICAgICAgbW9udGhzU2hvcnRSZWdleDogbW9udGhzUmVnZXgsXG4gICAgICAgIG1vbnRoc1N0cmljdFJlZ2V4OlxuICAgICAgICAgICAgL14oZW5lcm98ZmVicmVyb3xtYXJ6b3xhYnJpbHxtYXlvfGp1bmlvfGp1bGlvfGFnb3N0b3xzZXB0aWVtYnJlfG9jdHVicmV8bm92aWVtYnJlfGRpY2llbWJyZSkvaSxcbiAgICAgICAgbW9udGhzU2hvcnRTdHJpY3RSZWdleDpcbiAgICAgICAgICAgIC9eKGVuZVxcLj98ZmViXFwuP3xtYXJcXC4/fGFiclxcLj98bWF5XFwuP3xqdW5cXC4/fGp1bFxcLj98YWdvXFwuP3xzZXBcXC4/fG9jdFxcLj98bm92XFwuP3xkaWNcXC4/KS9pLFxuICAgICAgICBtb250aHNQYXJzZTogbW9udGhzUGFyc2UsXG4gICAgICAgIGxvbmdNb250aHNQYXJzZTogbW9udGhzUGFyc2UsXG4gICAgICAgIHNob3J0TW9udGhzUGFyc2U6IG1vbnRoc1BhcnNlLFxuICAgICAgICB3ZWVrZGF5czogJ2RvbWluZ29fbHVuZXNfbWFydGVzX21pw6lyY29sZXNfanVldmVzX3ZpZXJuZXNfc8OhYmFkbycuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXNTaG9ydDogJ2RvbS5fbHVuLl9tYXIuX21pw6kuX2p1ZS5fdmllLl9zw6FiLicuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXNNaW46ICdkb19sdV9tYV9taV9qdV92aV9zw6EnLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzUGFyc2VFeGFjdDogdHJ1ZSxcbiAgICAgICAgbG9uZ0RhdGVGb3JtYXQ6IHtcbiAgICAgICAgICAgIExUOiAnaDptbSBBJyxcbiAgICAgICAgICAgIExUUzogJ2g6bW06c3MgQScsXG4gICAgICAgICAgICBMOiAnREQvTU0vWVlZWScsXG4gICAgICAgICAgICBMTDogJ0QgW2RlXSBNTU1NIFtkZV0gWVlZWScsXG4gICAgICAgICAgICBMTEw6ICdEIFtkZV0gTU1NTSBbZGVdIFlZWVkgaDptbSBBJyxcbiAgICAgICAgICAgIExMTEw6ICdkZGRkLCBEIFtkZV0gTU1NTSBbZGVdIFlZWVkgaDptbSBBJyxcbiAgICAgICAgfSxcbiAgICAgICAgY2FsZW5kYXI6IHtcbiAgICAgICAgICAgIHNhbWVEYXk6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gJ1tob3kgYSBsYScgKyAodGhpcy5ob3VycygpICE9PSAxID8gJ3MnIDogJycpICsgJ10gTFQnO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIG5leHREYXk6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gJ1ttYcOxYW5hIGEgbGEnICsgKHRoaXMuaG91cnMoKSAhPT0gMSA/ICdzJyA6ICcnKSArICddIExUJztcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBuZXh0V2VlazogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIHJldHVybiAnZGRkZCBbYSBsYScgKyAodGhpcy5ob3VycygpICE9PSAxID8gJ3MnIDogJycpICsgJ10gTFQnO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGxhc3REYXk6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gJ1theWVyIGEgbGEnICsgKHRoaXMuaG91cnMoKSAhPT0gMSA/ICdzJyA6ICcnKSArICddIExUJztcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBsYXN0V2VlazogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgICAgICAgICdbZWxdIGRkZGQgW3Bhc2FkbyBhIGxhJyArXG4gICAgICAgICAgICAgICAgICAgICh0aGlzLmhvdXJzKCkgIT09IDEgPyAncycgOiAnJykgK1xuICAgICAgICAgICAgICAgICAgICAnXSBMVCdcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHNhbWVFbHNlOiAnTCcsXG4gICAgICAgIH0sXG4gICAgICAgIHJlbGF0aXZlVGltZToge1xuICAgICAgICAgICAgZnV0dXJlOiAnZW4gJXMnLFxuICAgICAgICAgICAgcGFzdDogJ2hhY2UgJXMnLFxuICAgICAgICAgICAgczogJ3Vub3Mgc2VndW5kb3MnLFxuICAgICAgICAgICAgc3M6ICclZCBzZWd1bmRvcycsXG4gICAgICAgICAgICBtOiAndW4gbWludXRvJyxcbiAgICAgICAgICAgIG1tOiAnJWQgbWludXRvcycsXG4gICAgICAgICAgICBoOiAndW5hIGhvcmEnLFxuICAgICAgICAgICAgaGg6ICclZCBob3JhcycsXG4gICAgICAgICAgICBkOiAndW4gZMOtYScsXG4gICAgICAgICAgICBkZDogJyVkIGTDrWFzJyxcbiAgICAgICAgICAgIHc6ICd1bmEgc2VtYW5hJyxcbiAgICAgICAgICAgIHd3OiAnJWQgc2VtYW5hcycsXG4gICAgICAgICAgICBNOiAndW4gbWVzJyxcbiAgICAgICAgICAgIE1NOiAnJWQgbWVzZXMnLFxuICAgICAgICAgICAgeTogJ3VuIGHDsW8nLFxuICAgICAgICAgICAgeXk6ICclZCBhw7FvcycsXG4gICAgICAgIH0sXG4gICAgICAgIGRheU9mTW9udGhPcmRpbmFsUGFyc2U6IC9cXGR7MSwyfcK6LyxcbiAgICAgICAgb3JkaW5hbDogJyVkwronLFxuICAgICAgICB3ZWVrOiB7XG4gICAgICAgICAgICBkb3c6IDEsIC8vIE1vbmRheSBpcyB0aGUgZmlyc3QgZGF5IG9mIHRoZSB3ZWVrLlxuICAgICAgICAgICAgZG95OiA0LCAvLyBUaGUgd2VlayB0aGF0IGNvbnRhaW5zIEphbiA0dGggaXMgdGhlIGZpcnN0IHdlZWsgb2YgdGhlIHllYXIuXG4gICAgICAgIH0sXG4gICAgfSk7XG5cbiAgICByZXR1cm4gZXNEbztcblxufSkpKTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///20838\n")},20923:(I,g,t)=>{"use strict";I.exports=t.p+"32b034e0e3427aa90968.png"},20934:(I,g,t)=>{"use strict";I.exports=t.p+"6fd3d41afe16c6dba57b.png"},21106:(I,g,t)=>{"use strict";I.exports=t.p+"7cbad61015d7c1ecdf2e.png"},21135:function(__unused_webpack_module,__unused_webpack_exports,__webpack_require__){eval("//! moment.js locale configuration\n//! locale : Vietnamese [vi]\n//! author : Bang Nguyen : https://github.com/bangnk\n//! author : Chien Kira : https://github.com/chienkira\n\n;(function (global, factory) {\n true ? factory(__webpack_require__(95093)) :\n 0\n}(this, (function (moment) { 'use strict';\n\n //! moment.js locale configuration\n\n var vi = moment.defineLocale('vi', {\n months: 'tháng 1_tháng 2_tháng 3_tháng 4_tháng 5_tháng 6_tháng 7_tháng 8_tháng 9_tháng 10_tháng 11_tháng 12'.split(\n '_'\n ),\n monthsShort:\n 'Thg 01_Thg 02_Thg 03_Thg 04_Thg 05_Thg 06_Thg 07_Thg 08_Thg 09_Thg 10_Thg 11_Thg 12'.split(\n '_'\n ),\n monthsParseExact: true,\n weekdays: 'chủ nhật_thứ hai_thứ ba_thứ tư_thứ năm_thứ sáu_thứ bảy'.split(\n '_'\n ),\n weekdaysShort: 'CN_T2_T3_T4_T5_T6_T7'.split('_'),\n weekdaysMin: 'CN_T2_T3_T4_T5_T6_T7'.split('_'),\n weekdaysParseExact: true,\n meridiemParse: /sa|ch/i,\n isPM: function (input) {\n return /^ch$/i.test(input);\n },\n meridiem: function (hours, minutes, isLower) {\n if (hours < 12) {\n return isLower ? 'sa' : 'SA';\n } else {\n return isLower ? 'ch' : 'CH';\n }\n },\n longDateFormat: {\n LT: 'HH:mm',\n LTS: 'HH:mm:ss',\n L: 'DD/MM/YYYY',\n LL: 'D MMMM [năm] YYYY',\n LLL: 'D MMMM [năm] YYYY HH:mm',\n LLLL: 'dddd, D MMMM [năm] YYYY HH:mm',\n l: 'DD/M/YYYY',\n ll: 'D MMM YYYY',\n lll: 'D MMM YYYY HH:mm',\n llll: 'ddd, D MMM YYYY HH:mm',\n },\n calendar: {\n sameDay: '[Hôm nay lúc] LT',\n nextDay: '[Ngày mai lúc] LT',\n nextWeek: 'dddd [tuần tới lúc] LT',\n lastDay: '[Hôm qua lúc] LT',\n lastWeek: 'dddd [tuần trước lúc] LT',\n sameElse: 'L',\n },\n relativeTime: {\n future: '%s tới',\n past: '%s trước',\n s: 'vài giây',\n ss: '%d giây',\n m: 'một phút',\n mm: '%d phút',\n h: 'một giờ',\n hh: '%d giờ',\n d: 'một ngày',\n dd: '%d ngày',\n w: 'một tuần',\n ww: '%d tuần',\n M: 'một tháng',\n MM: '%d tháng',\n y: 'một năm',\n yy: '%d năm',\n },\n dayOfMonthOrdinalParse: /\\d{1,2}/,\n ordinal: function (number) {\n return number;\n },\n week: {\n dow: 1, // Monday is the first day of the week.\n doy: 4, // The week that contains Jan 4th is the first week of the year.\n },\n });\n\n return vi;\n\n})));\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMjExMzUuanMiLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL2l0Zy1uZXh0Z2VuLWZyb250ZW5kLy4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvdmkuanM/MjkyMSJdLCJzb3VyY2VzQ29udGVudCI6WyIvLyEgbW9tZW50LmpzIGxvY2FsZSBjb25maWd1cmF0aW9uXG4vLyEgbG9jYWxlIDogVmlldG5hbWVzZSBbdmldXG4vLyEgYXV0aG9yIDogQmFuZyBOZ3V5ZW4gOiBodHRwczovL2dpdGh1Yi5jb20vYmFuZ25rXG4vLyEgYXV0aG9yIDogQ2hpZW4gS2lyYSA6IGh0dHBzOi8vZ2l0aHViLmNvbS9jaGllbmtpcmFcblxuOyhmdW5jdGlvbiAoZ2xvYmFsLCBmYWN0b3J5KSB7XG4gICB0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcgJiYgdHlwZW9mIG1vZHVsZSAhPT0gJ3VuZGVmaW5lZCdcbiAgICAgICAmJiB0eXBlb2YgcmVxdWlyZSA9PT0gJ2Z1bmN0aW9uJyA/IGZhY3RvcnkocmVxdWlyZSgnLi4vbW9tZW50JykpIDpcbiAgIHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgZGVmaW5lLmFtZCA/IGRlZmluZShbJy4uL21vbWVudCddLCBmYWN0b3J5KSA6XG4gICBmYWN0b3J5KGdsb2JhbC5tb21lbnQpXG59KHRoaXMsIChmdW5jdGlvbiAobW9tZW50KSB7ICd1c2Ugc3RyaWN0JztcblxuICAgIC8vISBtb21lbnQuanMgbG9jYWxlIGNvbmZpZ3VyYXRpb25cblxuICAgIHZhciB2aSA9IG1vbWVudC5kZWZpbmVMb2NhbGUoJ3ZpJywge1xuICAgICAgICBtb250aHM6ICd0aMOhbmcgMV90aMOhbmcgMl90aMOhbmcgM190aMOhbmcgNF90aMOhbmcgNV90aMOhbmcgNl90aMOhbmcgN190aMOhbmcgOF90aMOhbmcgOV90aMOhbmcgMTBfdGjDoW5nIDExX3Row6FuZyAxMicuc3BsaXQoXG4gICAgICAgICAgICAnXydcbiAgICAgICAgKSxcbiAgICAgICAgbW9udGhzU2hvcnQ6XG4gICAgICAgICAgICAnVGhnIDAxX1RoZyAwMl9UaGcgMDNfVGhnIDA0X1RoZyAwNV9UaGcgMDZfVGhnIDA3X1RoZyAwOF9UaGcgMDlfVGhnIDEwX1RoZyAxMV9UaGcgMTInLnNwbGl0KFxuICAgICAgICAgICAgICAgICdfJ1xuICAgICAgICAgICAgKSxcbiAgICAgICAgbW9udGhzUGFyc2VFeGFjdDogdHJ1ZSxcbiAgICAgICAgd2Vla2RheXM6ICdjaOG7pyBuaOG6rXRfdGjhu6kgaGFpX3Ro4bupIGJhX3Ro4bupIHTGsF90aOG7qSBuxINtX3Ro4bupIHPDoXVfdGjhu6kgYuG6o3knLnNwbGl0KFxuICAgICAgICAgICAgJ18nXG4gICAgICAgICksXG4gICAgICAgIHdlZWtkYXlzU2hvcnQ6ICdDTl9UMl9UM19UNF9UNV9UNl9UNycuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXNNaW46ICdDTl9UMl9UM19UNF9UNV9UNl9UNycuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXNQYXJzZUV4YWN0OiB0cnVlLFxuICAgICAgICBtZXJpZGllbVBhcnNlOiAvc2F8Y2gvaSxcbiAgICAgICAgaXNQTTogZnVuY3Rpb24gKGlucHV0KSB7XG4gICAgICAgICAgICByZXR1cm4gL15jaCQvaS50ZXN0KGlucHV0KTtcbiAgICAgICAgfSxcbiAgICAgICAgbWVyaWRpZW06IGZ1bmN0aW9uIChob3VycywgbWludXRlcywgaXNMb3dlcikge1xuICAgICAgICAgICAgaWYgKGhvdXJzIDwgMTIpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gaXNMb3dlciA/ICdzYScgOiAnU0EnO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gaXNMb3dlciA/ICdjaCcgOiAnQ0gnO1xuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBsb25nRGF0ZUZvcm1hdDoge1xuICAgICAgICAgICAgTFQ6ICdISDptbScsXG4gICAgICAgICAgICBMVFM6ICdISDptbTpzcycsXG4gICAgICAgICAgICBMOiAnREQvTU0vWVlZWScsXG4gICAgICAgICAgICBMTDogJ0QgTU1NTSBbbsSDbV0gWVlZWScsXG4gICAgICAgICAgICBMTEw6ICdEIE1NTU0gW27Eg21dIFlZWVkgSEg6bW0nLFxuICAgICAgICAgICAgTExMTDogJ2RkZGQsIEQgTU1NTSBbbsSDbV0gWVlZWSBISDptbScsXG4gICAgICAgICAgICBsOiAnREQvTS9ZWVlZJyxcbiAgICAgICAgICAgIGxsOiAnRCBNTU0gWVlZWScsXG4gICAgICAgICAgICBsbGw6ICdEIE1NTSBZWVlZIEhIOm1tJyxcbiAgICAgICAgICAgIGxsbGw6ICdkZGQsIEQgTU1NIFlZWVkgSEg6bW0nLFxuICAgICAgICB9LFxuICAgICAgICBjYWxlbmRhcjoge1xuICAgICAgICAgICAgc2FtZURheTogJ1tIw7RtIG5heSBsw7pjXSBMVCcsXG4gICAgICAgICAgICBuZXh0RGF5OiAnW05nw6B5IG1haSBsw7pjXSBMVCcsXG4gICAgICAgICAgICBuZXh0V2VlazogJ2RkZGQgW3R14bqnbiB04bubaSBsw7pjXSBMVCcsXG4gICAgICAgICAgICBsYXN0RGF5OiAnW0jDtG0gcXVhIGzDumNdIExUJyxcbiAgICAgICAgICAgIGxhc3RXZWVrOiAnZGRkZCBbdHXhuqduIHRyxrDhu5tjIGzDumNdIExUJyxcbiAgICAgICAgICAgIHNhbWVFbHNlOiAnTCcsXG4gICAgICAgIH0sXG4gICAgICAgIHJlbGF0aXZlVGltZToge1xuICAgICAgICAgICAgZnV0dXJlOiAnJXMgdOG7m2knLFxuICAgICAgICAgICAgcGFzdDogJyVzIHRyxrDhu5tjJyxcbiAgICAgICAgICAgIHM6ICd2w6BpIGdpw6J5JyxcbiAgICAgICAgICAgIHNzOiAnJWQgZ2nDonknLFxuICAgICAgICAgICAgbTogJ23hu5l0IHBow7p0JyxcbiAgICAgICAgICAgIG1tOiAnJWQgcGjDunQnLFxuICAgICAgICAgICAgaDogJ23hu5l0IGdp4budJyxcbiAgICAgICAgICAgIGhoOiAnJWQgZ2nhu50nLFxuICAgICAgICAgICAgZDogJ23hu5l0IG5nw6B5JyxcbiAgICAgICAgICAgIGRkOiAnJWQgbmfDoHknLFxuICAgICAgICAgICAgdzogJ23hu5l0IHR14bqnbicsXG4gICAgICAgICAgICB3dzogJyVkIHR14bqnbicsXG4gICAgICAgICAgICBNOiAnbeG7mXQgdGjDoW5nJyxcbiAgICAgICAgICAgIE1NOiAnJWQgdGjDoW5nJyxcbiAgICAgICAgICAgIHk6ICdt4buZdCBuxINtJyxcbiAgICAgICAgICAgIHl5OiAnJWQgbsSDbScsXG4gICAgICAgIH0sXG4gICAgICAgIGRheU9mTW9udGhPcmRpbmFsUGFyc2U6IC9cXGR7MSwyfS8sXG4gICAgICAgIG9yZGluYWw6IGZ1bmN0aW9uIChudW1iZXIpIHtcbiAgICAgICAgICAgIHJldHVybiBudW1iZXI7XG4gICAgICAgIH0sXG4gICAgICAgIHdlZWs6IHtcbiAgICAgICAgICAgIGRvdzogMSwgLy8gTW9uZGF5IGlzIHRoZSBmaXJzdCBkYXkgb2YgdGhlIHdlZWsuXG4gICAgICAgICAgICBkb3k6IDQsIC8vIFRoZSB3ZWVrIHRoYXQgY29udGFpbnMgSmFuIDR0aCBpcyB0aGUgZmlyc3Qgd2VlayBvZiB0aGUgeWVhci5cbiAgICAgICAgfSxcbiAgICB9KTtcblxuICAgIHJldHVybiB2aTtcblxufSkpKTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///21135\n")},21396:function(module,exports,__webpack_require__){eval(";(function (root, factory, undef) {\n\tif (true) {\n\t\t// CommonJS\n\t\tmodule.exports = exports = factory(__webpack_require__(19021), __webpack_require__(43240), __webpack_require__(6440), __webpack_require__(45503), __webpack_require__(80754), __webpack_require__(87106), __webpack_require__(84636), __webpack_require__(45471), __webpack_require__(63009), __webpack_require__(36308), __webpack_require__(81380), __webpack_require__(89557), __webpack_require__(45953), __webpack_require__(78056), __webpack_require__(51025), __webpack_require__(70019), __webpack_require__(39506), __webpack_require__(57165), __webpack_require__(82169), __webpack_require__(96939), __webpack_require__(6372), __webpack_require__(73797), __webpack_require__(38454), __webpack_require__(42073), __webpack_require__(54905), __webpack_require__(10482), __webpack_require__(52155), __webpack_require__(58124), __webpack_require__(70025), __webpack_require__(40955), __webpack_require__(7628), __webpack_require__(77193), __webpack_require__(96298), __webpack_require__(22696), __webpack_require__(43128));\n\t}\n\telse {}\n}(this, function (CryptoJS) {\n\n\treturn CryptoJS;\n\n}));//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMjEzOTYuanMiLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBUUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL2l0Zy1uZXh0Z2VuLWZyb250ZW5kLy4vbm9kZV9tb2R1bGVzL2NyeXB0by1qcy9pbmRleC5qcz8zNDUyIl0sInNvdXJjZXNDb250ZW50IjpbIjsoZnVuY3Rpb24gKHJvb3QsIGZhY3RvcnksIHVuZGVmKSB7XG5cdGlmICh0eXBlb2YgZXhwb3J0cyA9PT0gXCJvYmplY3RcIikge1xuXHRcdC8vIENvbW1vbkpTXG5cdFx0bW9kdWxlLmV4cG9ydHMgPSBleHBvcnRzID0gZmFjdG9yeShyZXF1aXJlKFwiLi9jb3JlXCIpLCByZXF1aXJlKFwiLi94NjQtY29yZVwiKSwgcmVxdWlyZShcIi4vbGliLXR5cGVkYXJyYXlzXCIpLCByZXF1aXJlKFwiLi9lbmMtdXRmMTZcIiksIHJlcXVpcmUoXCIuL2VuYy1iYXNlNjRcIiksIHJlcXVpcmUoXCIuL2VuYy1iYXNlNjR1cmxcIiksIHJlcXVpcmUoXCIuL21kNVwiKSwgcmVxdWlyZShcIi4vc2hhMVwiKSwgcmVxdWlyZShcIi4vc2hhMjU2XCIpLCByZXF1aXJlKFwiLi9zaGEyMjRcIiksIHJlcXVpcmUoXCIuL3NoYTUxMlwiKSwgcmVxdWlyZShcIi4vc2hhMzg0XCIpLCByZXF1aXJlKFwiLi9zaGEzXCIpLCByZXF1aXJlKFwiLi9yaXBlbWQxNjBcIiksIHJlcXVpcmUoXCIuL2htYWNcIiksIHJlcXVpcmUoXCIuL3Bia2RmMlwiKSwgcmVxdWlyZShcIi4vZXZwa2RmXCIpLCByZXF1aXJlKFwiLi9jaXBoZXItY29yZVwiKSwgcmVxdWlyZShcIi4vbW9kZS1jZmJcIiksIHJlcXVpcmUoXCIuL21vZGUtY3RyXCIpLCByZXF1aXJlKFwiLi9tb2RlLWN0ci1nbGFkbWFuXCIpLCByZXF1aXJlKFwiLi9tb2RlLW9mYlwiKSwgcmVxdWlyZShcIi4vbW9kZS1lY2JcIiksIHJlcXVpcmUoXCIuL3BhZC1hbnNpeDkyM1wiKSwgcmVxdWlyZShcIi4vcGFkLWlzbzEwMTI2XCIpLCByZXF1aXJlKFwiLi9wYWQtaXNvOTc5NzFcIiksIHJlcXVpcmUoXCIuL3BhZC16ZXJvcGFkZGluZ1wiKSwgcmVxdWlyZShcIi4vcGFkLW5vcGFkZGluZ1wiKSwgcmVxdWlyZShcIi4vZm9ybWF0LWhleFwiKSwgcmVxdWlyZShcIi4vYWVzXCIpLCByZXF1aXJlKFwiLi90cmlwbGVkZXNcIiksIHJlcXVpcmUoXCIuL3JjNFwiKSwgcmVxdWlyZShcIi4vcmFiYml0XCIpLCByZXF1aXJlKFwiLi9yYWJiaXQtbGVnYWN5XCIpLCByZXF1aXJlKFwiLi9ibG93ZmlzaFwiKSk7XG5cdH1cblx0ZWxzZSBpZiAodHlwZW9mIGRlZmluZSA9PT0gXCJmdW5jdGlvblwiICYmIGRlZmluZS5hbWQpIHtcblx0XHQvLyBBTURcblx0XHRkZWZpbmUoW1wiLi9jb3JlXCIsIFwiLi94NjQtY29yZVwiLCBcIi4vbGliLXR5cGVkYXJyYXlzXCIsIFwiLi9lbmMtdXRmMTZcIiwgXCIuL2VuYy1iYXNlNjRcIiwgXCIuL2VuYy1iYXNlNjR1cmxcIiwgXCIuL21kNVwiLCBcIi4vc2hhMVwiLCBcIi4vc2hhMjU2XCIsIFwiLi9zaGEyMjRcIiwgXCIuL3NoYTUxMlwiLCBcIi4vc2hhMzg0XCIsIFwiLi9zaGEzXCIsIFwiLi9yaXBlbWQxNjBcIiwgXCIuL2htYWNcIiwgXCIuL3Bia2RmMlwiLCBcIi4vZXZwa2RmXCIsIFwiLi9jaXBoZXItY29yZVwiLCBcIi4vbW9kZS1jZmJcIiwgXCIuL21vZGUtY3RyXCIsIFwiLi9tb2RlLWN0ci1nbGFkbWFuXCIsIFwiLi9tb2RlLW9mYlwiLCBcIi4vbW9kZS1lY2JcIiwgXCIuL3BhZC1hbnNpeDkyM1wiLCBcIi4vcGFkLWlzbzEwMTI2XCIsIFwiLi9wYWQtaXNvOTc5NzFcIiwgXCIuL3BhZC16ZXJvcGFkZGluZ1wiLCBcIi4vcGFkLW5vcGFkZGluZ1wiLCBcIi4vZm9ybWF0LWhleFwiLCBcIi4vYWVzXCIsIFwiLi90cmlwbGVkZXNcIiwgXCIuL3JjNFwiLCBcIi4vcmFiYml0XCIsIFwiLi9yYWJiaXQtbGVnYWN5XCIsIFwiLi9ibG93ZmlzaFwiXSwgZmFjdG9yeSk7XG5cdH1cblx0ZWxzZSB7XG5cdFx0Ly8gR2xvYmFsIChicm93c2VyKVxuXHRcdHJvb3QuQ3J5cHRvSlMgPSBmYWN0b3J5KHJvb3QuQ3J5cHRvSlMpO1xuXHR9XG59KHRoaXMsIGZ1bmN0aW9uIChDcnlwdG9KUykge1xuXG5cdHJldHVybiBDcnlwdG9KUztcblxufSkpOyJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///21396\n")},21428:(I,g,t)=>{"use strict";I.exports=t.p+"baffd199be0518e647c8.png"},21827:function(__unused_webpack_module,__unused_webpack_exports,__webpack_require__){eval("//! moment.js locale configuration\n//! locale : Italian (Switzerland) [it-ch]\n//! author : xfh : https://github.com/xfh\n\n;(function (global, factory) {\n true ? factory(__webpack_require__(95093)) :\n 0\n}(this, (function (moment) { 'use strict';\n\n //! moment.js locale configuration\n\n var itCh = moment.defineLocale('it-ch', {\n months: 'gennaio_febbraio_marzo_aprile_maggio_giugno_luglio_agosto_settembre_ottobre_novembre_dicembre'.split(\n '_'\n ),\n monthsShort: 'gen_feb_mar_apr_mag_giu_lug_ago_set_ott_nov_dic'.split('_'),\n weekdays: 'domenica_lunedì_martedì_mercoledì_giovedì_venerdì_sabato'.split(\n '_'\n ),\n weekdaysShort: 'dom_lun_mar_mer_gio_ven_sab'.split('_'),\n weekdaysMin: 'do_lu_ma_me_gi_ve_sa'.split('_'),\n longDateFormat: {\n LT: 'HH:mm',\n LTS: 'HH:mm:ss',\n L: 'DD.MM.YYYY',\n LL: 'D MMMM YYYY',\n LLL: 'D MMMM YYYY HH:mm',\n LLLL: 'dddd D MMMM YYYY HH:mm',\n },\n calendar: {\n sameDay: '[Oggi alle] LT',\n nextDay: '[Domani alle] LT',\n nextWeek: 'dddd [alle] LT',\n lastDay: '[Ieri alle] LT',\n lastWeek: function () {\n switch (this.day()) {\n case 0:\n return '[la scorsa] dddd [alle] LT';\n default:\n return '[lo scorso] dddd [alle] LT';\n }\n },\n sameElse: 'L',\n },\n relativeTime: {\n future: function (s) {\n return (/^[0-9].+$/.test(s) ? 'tra' : 'in') + ' ' + s;\n },\n past: '%s fa',\n s: 'alcuni secondi',\n ss: '%d secondi',\n m: 'un minuto',\n mm: '%d minuti',\n h: \"un'ora\",\n hh: '%d ore',\n d: 'un giorno',\n dd: '%d giorni',\n M: 'un mese',\n MM: '%d mesi',\n y: 'un anno',\n yy: '%d anni',\n },\n dayOfMonthOrdinalParse: /\\d{1,2}º/,\n ordinal: '%dº',\n week: {\n dow: 1, // Monday is the first day of the week.\n doy: 4, // The week that contains Jan 4th is the first week of the year.\n },\n });\n\n return itCh;\n\n})));\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMjE4MjcuanMiLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9pdGctbmV4dGdlbi1mcm9udGVuZC8uL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL2l0LWNoLmpzPzZmMTIiXSwic291cmNlc0NvbnRlbnQiOlsiLy8hIG1vbWVudC5qcyBsb2NhbGUgY29uZmlndXJhdGlvblxuLy8hIGxvY2FsZSA6IEl0YWxpYW4gKFN3aXR6ZXJsYW5kKSBbaXQtY2hdXG4vLyEgYXV0aG9yIDogeGZoIDogaHR0cHM6Ly9naXRodWIuY29tL3hmaFxuXG47KGZ1bmN0aW9uIChnbG9iYWwsIGZhY3RvcnkpIHtcbiAgIHR5cGVvZiBleHBvcnRzID09PSAnb2JqZWN0JyAmJiB0eXBlb2YgbW9kdWxlICE9PSAndW5kZWZpbmVkJ1xuICAgICAgICYmIHR5cGVvZiByZXF1aXJlID09PSAnZnVuY3Rpb24nID8gZmFjdG9yeShyZXF1aXJlKCcuLi9tb21lbnQnKSkgOlxuICAgdHlwZW9mIGRlZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiBkZWZpbmUuYW1kID8gZGVmaW5lKFsnLi4vbW9tZW50J10sIGZhY3RvcnkpIDpcbiAgIGZhY3RvcnkoZ2xvYmFsLm1vbWVudClcbn0odGhpcywgKGZ1bmN0aW9uIChtb21lbnQpIHsgJ3VzZSBzdHJpY3QnO1xuXG4gICAgLy8hIG1vbWVudC5qcyBsb2NhbGUgY29uZmlndXJhdGlvblxuXG4gICAgdmFyIGl0Q2ggPSBtb21lbnQuZGVmaW5lTG9jYWxlKCdpdC1jaCcsIHtcbiAgICAgICAgbW9udGhzOiAnZ2VubmFpb19mZWJicmFpb19tYXJ6b19hcHJpbGVfbWFnZ2lvX2dpdWdub19sdWdsaW9fYWdvc3RvX3NldHRlbWJyZV9vdHRvYnJlX25vdmVtYnJlX2RpY2VtYnJlJy5zcGxpdChcbiAgICAgICAgICAgICdfJ1xuICAgICAgICApLFxuICAgICAgICBtb250aHNTaG9ydDogJ2dlbl9mZWJfbWFyX2Fwcl9tYWdfZ2l1X2x1Z19hZ29fc2V0X290dF9ub3ZfZGljJy5zcGxpdCgnXycpLFxuICAgICAgICB3ZWVrZGF5czogJ2RvbWVuaWNhX2x1bmVkw6xfbWFydGVkw6xfbWVyY29sZWTDrF9naW92ZWTDrF92ZW5lcmTDrF9zYWJhdG8nLnNwbGl0KFxuICAgICAgICAgICAgJ18nXG4gICAgICAgICksXG4gICAgICAgIHdlZWtkYXlzU2hvcnQ6ICdkb21fbHVuX21hcl9tZXJfZ2lvX3Zlbl9zYWInLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzTWluOiAnZG9fbHVfbWFfbWVfZ2lfdmVfc2EnLnNwbGl0KCdfJyksXG4gICAgICAgIGxvbmdEYXRlRm9ybWF0OiB7XG4gICAgICAgICAgICBMVDogJ0hIOm1tJyxcbiAgICAgICAgICAgIExUUzogJ0hIOm1tOnNzJyxcbiAgICAgICAgICAgIEw6ICdERC5NTS5ZWVlZJyxcbiAgICAgICAgICAgIExMOiAnRCBNTU1NIFlZWVknLFxuICAgICAgICAgICAgTExMOiAnRCBNTU1NIFlZWVkgSEg6bW0nLFxuICAgICAgICAgICAgTExMTDogJ2RkZGQgRCBNTU1NIFlZWVkgSEg6bW0nLFxuICAgICAgICB9LFxuICAgICAgICBjYWxlbmRhcjoge1xuICAgICAgICAgICAgc2FtZURheTogJ1tPZ2dpIGFsbGVdIExUJyxcbiAgICAgICAgICAgIG5leHREYXk6ICdbRG9tYW5pIGFsbGVdIExUJyxcbiAgICAgICAgICAgIG5leHRXZWVrOiAnZGRkZCBbYWxsZV0gTFQnLFxuICAgICAgICAgICAgbGFzdERheTogJ1tJZXJpIGFsbGVdIExUJyxcbiAgICAgICAgICAgIGxhc3RXZWVrOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgc3dpdGNoICh0aGlzLmRheSgpKSB7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgMDpcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAnW2xhIHNjb3JzYV0gZGRkZCBbYWxsZV0gTFQnO1xuICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICdbbG8gc2NvcnNvXSBkZGRkIFthbGxlXSBMVCc7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHNhbWVFbHNlOiAnTCcsXG4gICAgICAgIH0sXG4gICAgICAgIHJlbGF0aXZlVGltZToge1xuICAgICAgICAgICAgZnV0dXJlOiBmdW5jdGlvbiAocykge1xuICAgICAgICAgICAgICAgIHJldHVybiAoL15bMC05XS4rJC8udGVzdChzKSA/ICd0cmEnIDogJ2luJykgKyAnICcgKyBzO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHBhc3Q6ICclcyBmYScsXG4gICAgICAgICAgICBzOiAnYWxjdW5pIHNlY29uZGknLFxuICAgICAgICAgICAgc3M6ICclZCBzZWNvbmRpJyxcbiAgICAgICAgICAgIG06ICd1biBtaW51dG8nLFxuICAgICAgICAgICAgbW06ICclZCBtaW51dGknLFxuICAgICAgICAgICAgaDogXCJ1bidvcmFcIixcbiAgICAgICAgICAgIGhoOiAnJWQgb3JlJyxcbiAgICAgICAgICAgIGQ6ICd1biBnaW9ybm8nLFxuICAgICAgICAgICAgZGQ6ICclZCBnaW9ybmknLFxuICAgICAgICAgICAgTTogJ3VuIG1lc2UnLFxuICAgICAgICAgICAgTU06ICclZCBtZXNpJyxcbiAgICAgICAgICAgIHk6ICd1biBhbm5vJyxcbiAgICAgICAgICAgIHl5OiAnJWQgYW5uaScsXG4gICAgICAgIH0sXG4gICAgICAgIGRheU9mTW9udGhPcmRpbmFsUGFyc2U6IC9cXGR7MSwyfcK6LyxcbiAgICAgICAgb3JkaW5hbDogJyVkwronLFxuICAgICAgICB3ZWVrOiB7XG4gICAgICAgICAgICBkb3c6IDEsIC8vIE1vbmRheSBpcyB0aGUgZmlyc3QgZGF5IG9mIHRoZSB3ZWVrLlxuICAgICAgICAgICAgZG95OiA0LCAvLyBUaGUgd2VlayB0aGF0IGNvbnRhaW5zIEphbiA0dGggaXMgdGhlIGZpcnN0IHdlZWsgb2YgdGhlIHllYXIuXG4gICAgICAgIH0sXG4gICAgfSk7XG5cbiAgICByZXR1cm4gaXRDaDtcblxufSkpKTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///21827\n")},21832:(I,g,t)=>{"use strict";I.exports=t.p+"edfd7169742280a5b11c.png"},22274:function(__unused_webpack_module,__unused_webpack_exports,__webpack_require__){eval("//! moment.js locale configuration\n//! locale : Norwegian Bokmål [nb]\n//! authors : Espen Hovlandsdal : https://github.com/rexxars\n//! Sigurd Gartmann : https://github.com/sigurdga\n//! Stephen Ramthun : https://github.com/stephenramthun\n\n;(function (global, factory) {\n true ? factory(__webpack_require__(95093)) :\n 0\n}(this, (function (moment) { 'use strict';\n\n //! moment.js locale configuration\n\n var nb = moment.defineLocale('nb', {\n months: 'januar_februar_mars_april_mai_juni_juli_august_september_oktober_november_desember'.split(\n '_'\n ),\n monthsShort:\n 'jan._feb._mars_apr._mai_juni_juli_aug._sep._okt._nov._des.'.split('_'),\n monthsParseExact: true,\n weekdays: 'søndag_mandag_tirsdag_onsdag_torsdag_fredag_lørdag'.split('_'),\n weekdaysShort: 'sø._ma._ti._on._to._fr._lø.'.split('_'),\n weekdaysMin: 'sø_ma_ti_on_to_fr_lø'.split('_'),\n weekdaysParseExact: true,\n longDateFormat: {\n LT: 'HH:mm',\n LTS: 'HH:mm:ss',\n L: 'DD.MM.YYYY',\n LL: 'D. MMMM YYYY',\n LLL: 'D. MMMM YYYY [kl.] HH:mm',\n LLLL: 'dddd D. MMMM YYYY [kl.] HH:mm',\n },\n calendar: {\n sameDay: '[i dag kl.] LT',\n nextDay: '[i morgen kl.] LT',\n nextWeek: 'dddd [kl.] LT',\n lastDay: '[i går kl.] LT',\n lastWeek: '[forrige] dddd [kl.] LT',\n sameElse: 'L',\n },\n relativeTime: {\n future: 'om %s',\n past: '%s siden',\n s: 'noen sekunder',\n ss: '%d sekunder',\n m: 'ett minutt',\n mm: '%d minutter',\n h: 'én time',\n hh: '%d timer',\n d: 'én dag',\n dd: '%d dager',\n w: 'én uke',\n ww: '%d uker',\n M: 'én måned',\n MM: '%d måneder',\n y: 'ett år',\n yy: '%d år',\n },\n dayOfMonthOrdinalParse: /\\d{1,2}\\./,\n ordinal: '%d.',\n week: {\n dow: 1, // Monday is the first day of the week.\n doy: 4, // The week that contains Jan 4th is the first week of the year.\n },\n });\n\n return nb;\n\n})));\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMjIyNzQuanMiLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vaXRnLW5leHRnZW4tZnJvbnRlbmQvLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9uYi5qcz82Y2UzIl0sInNvdXJjZXNDb250ZW50IjpbIi8vISBtb21lbnQuanMgbG9jYWxlIGNvbmZpZ3VyYXRpb25cbi8vISBsb2NhbGUgOiBOb3J3ZWdpYW4gQm9rbcOlbCBbbmJdXG4vLyEgYXV0aG9ycyA6IEVzcGVuIEhvdmxhbmRzZGFsIDogaHR0cHM6Ly9naXRodWIuY29tL3JleHhhcnNcbi8vISAgICAgICAgICAgU2lndXJkIEdhcnRtYW5uIDogaHR0cHM6Ly9naXRodWIuY29tL3NpZ3VyZGdhXG4vLyEgICAgICAgICAgIFN0ZXBoZW4gUmFtdGh1biA6IGh0dHBzOi8vZ2l0aHViLmNvbS9zdGVwaGVucmFtdGh1blxuXG47KGZ1bmN0aW9uIChnbG9iYWwsIGZhY3RvcnkpIHtcbiAgIHR5cGVvZiBleHBvcnRzID09PSAnb2JqZWN0JyAmJiB0eXBlb2YgbW9kdWxlICE9PSAndW5kZWZpbmVkJ1xuICAgICAgICYmIHR5cGVvZiByZXF1aXJlID09PSAnZnVuY3Rpb24nID8gZmFjdG9yeShyZXF1aXJlKCcuLi9tb21lbnQnKSkgOlxuICAgdHlwZW9mIGRlZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiBkZWZpbmUuYW1kID8gZGVmaW5lKFsnLi4vbW9tZW50J10sIGZhY3RvcnkpIDpcbiAgIGZhY3RvcnkoZ2xvYmFsLm1vbWVudClcbn0odGhpcywgKGZ1bmN0aW9uIChtb21lbnQpIHsgJ3VzZSBzdHJpY3QnO1xuXG4gICAgLy8hIG1vbWVudC5qcyBsb2NhbGUgY29uZmlndXJhdGlvblxuXG4gICAgdmFyIG5iID0gbW9tZW50LmRlZmluZUxvY2FsZSgnbmInLCB7XG4gICAgICAgIG1vbnRoczogJ2phbnVhcl9mZWJydWFyX21hcnNfYXByaWxfbWFpX2p1bmlfanVsaV9hdWd1c3Rfc2VwdGVtYmVyX29rdG9iZXJfbm92ZW1iZXJfZGVzZW1iZXInLnNwbGl0KFxuICAgICAgICAgICAgJ18nXG4gICAgICAgICksXG4gICAgICAgIG1vbnRoc1Nob3J0OlxuICAgICAgICAgICAgJ2phbi5fZmViLl9tYXJzX2Fwci5fbWFpX2p1bmlfanVsaV9hdWcuX3NlcC5fb2t0Ll9ub3YuX2Rlcy4nLnNwbGl0KCdfJyksXG4gICAgICAgIG1vbnRoc1BhcnNlRXhhY3Q6IHRydWUsXG4gICAgICAgIHdlZWtkYXlzOiAnc8O4bmRhZ19tYW5kYWdfdGlyc2RhZ19vbnNkYWdfdG9yc2RhZ19mcmVkYWdfbMO4cmRhZycuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXNTaG9ydDogJ3PDuC5fbWEuX3RpLl9vbi5fdG8uX2ZyLl9sw7guJy5zcGxpdCgnXycpLFxuICAgICAgICB3ZWVrZGF5c01pbjogJ3PDuF9tYV90aV9vbl90b19mcl9sw7gnLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzUGFyc2VFeGFjdDogdHJ1ZSxcbiAgICAgICAgbG9uZ0RhdGVGb3JtYXQ6IHtcbiAgICAgICAgICAgIExUOiAnSEg6bW0nLFxuICAgICAgICAgICAgTFRTOiAnSEg6bW06c3MnLFxuICAgICAgICAgICAgTDogJ0RELk1NLllZWVknLFxuICAgICAgICAgICAgTEw6ICdELiBNTU1NIFlZWVknLFxuICAgICAgICAgICAgTExMOiAnRC4gTU1NTSBZWVlZIFtrbC5dIEhIOm1tJyxcbiAgICAgICAgICAgIExMTEw6ICdkZGRkIEQuIE1NTU0gWVlZWSBba2wuXSBISDptbScsXG4gICAgICAgIH0sXG4gICAgICAgIGNhbGVuZGFyOiB7XG4gICAgICAgICAgICBzYW1lRGF5OiAnW2kgZGFnIGtsLl0gTFQnLFxuICAgICAgICAgICAgbmV4dERheTogJ1tpIG1vcmdlbiBrbC5dIExUJyxcbiAgICAgICAgICAgIG5leHRXZWVrOiAnZGRkZCBba2wuXSBMVCcsXG4gICAgICAgICAgICBsYXN0RGF5OiAnW2kgZ8OlciBrbC5dIExUJyxcbiAgICAgICAgICAgIGxhc3RXZWVrOiAnW2ZvcnJpZ2VdIGRkZGQgW2tsLl0gTFQnLFxuICAgICAgICAgICAgc2FtZUVsc2U6ICdMJyxcbiAgICAgICAgfSxcbiAgICAgICAgcmVsYXRpdmVUaW1lOiB7XG4gICAgICAgICAgICBmdXR1cmU6ICdvbSAlcycsXG4gICAgICAgICAgICBwYXN0OiAnJXMgc2lkZW4nLFxuICAgICAgICAgICAgczogJ25vZW4gc2VrdW5kZXInLFxuICAgICAgICAgICAgc3M6ICclZCBzZWt1bmRlcicsXG4gICAgICAgICAgICBtOiAnZXR0IG1pbnV0dCcsXG4gICAgICAgICAgICBtbTogJyVkIG1pbnV0dGVyJyxcbiAgICAgICAgICAgIGg6ICfDqW4gdGltZScsXG4gICAgICAgICAgICBoaDogJyVkIHRpbWVyJyxcbiAgICAgICAgICAgIGQ6ICfDqW4gZGFnJyxcbiAgICAgICAgICAgIGRkOiAnJWQgZGFnZXInLFxuICAgICAgICAgICAgdzogJ8OpbiB1a2UnLFxuICAgICAgICAgICAgd3c6ICclZCB1a2VyJyxcbiAgICAgICAgICAgIE06ICfDqW4gbcOlbmVkJyxcbiAgICAgICAgICAgIE1NOiAnJWQgbcOlbmVkZXInLFxuICAgICAgICAgICAgeTogJ2V0dCDDpXInLFxuICAgICAgICAgICAgeXk6ICclZCDDpXInLFxuICAgICAgICB9LFxuICAgICAgICBkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOiAvXFxkezEsMn1cXC4vLFxuICAgICAgICBvcmRpbmFsOiAnJWQuJyxcbiAgICAgICAgd2Vlazoge1xuICAgICAgICAgICAgZG93OiAxLCAvLyBNb25kYXkgaXMgdGhlIGZpcnN0IGRheSBvZiB0aGUgd2Vlay5cbiAgICAgICAgICAgIGRveTogNCwgLy8gVGhlIHdlZWsgdGhhdCBjb250YWlucyBKYW4gNHRoIGlzIHRoZSBmaXJzdCB3ZWVrIG9mIHRoZSB5ZWFyLlxuICAgICAgICB9LFxuICAgIH0pO1xuXG4gICAgcmV0dXJuIG5iO1xuXG59KSkpO1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///22274\n")},22551:(__unused_webpack_module,exports,__webpack_require__)=>{"use strict";eval('/** @license React v17.0.2\n * react-dom.production.min.js\n *\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n/*\n Modernizr 3.0.0pre (Custom Build) | MIT\n*/\nvar aa=__webpack_require__(24002),m=__webpack_require__(45228),r=__webpack_require__(69982);function y(a){for(var b="https://reactjs.org/docs/error-decoder.html?invariant="+a,c=1;cb}return!1}function B(a,b,c,d,e,f,g){this.acceptsBooleans=2===b||3===b||4===b;this.attributeName=d;this.attributeNamespace=e;this.mustUseProperty=c;this.propertyName=a;this.type=b;this.sanitizeURL=f;this.removeEmptyString=g}var D={};\n"children dangerouslySetInnerHTML defaultValue defaultChecked innerHTML suppressContentEditableWarning suppressHydrationWarning style".split(" ").forEach(function(a){D[a]=new B(a,0,!1,a,null,!1,!1)});[["acceptCharset","accept-charset"],["className","class"],["htmlFor","for"],["httpEquiv","http-equiv"]].forEach(function(a){var b=a[0];D[b]=new B(b,1,!1,a[1],null,!1,!1)});["contentEditable","draggable","spellCheck","value"].forEach(function(a){D[a]=new B(a,2,!1,a.toLowerCase(),null,!1,!1)});\n["autoReverse","externalResourcesRequired","focusable","preserveAlpha"].forEach(function(a){D[a]=new B(a,2,!1,a,null,!1,!1)});"allowFullScreen async autoFocus autoPlay controls default defer disabled disablePictureInPicture disableRemotePlayback formNoValidate hidden loop noModule noValidate open playsInline readOnly required reversed scoped seamless itemScope".split(" ").forEach(function(a){D[a]=new B(a,3,!1,a.toLowerCase(),null,!1,!1)});\n["checked","multiple","muted","selected"].forEach(function(a){D[a]=new B(a,3,!0,a,null,!1,!1)});["capture","download"].forEach(function(a){D[a]=new B(a,4,!1,a,null,!1,!1)});["cols","rows","size","span"].forEach(function(a){D[a]=new B(a,6,!1,a,null,!1,!1)});["rowSpan","start"].forEach(function(a){D[a]=new B(a,5,!1,a.toLowerCase(),null,!1,!1)});var oa=/[\\-:]([a-z])/g;function pa(a){return a[1].toUpperCase()}\n"accent-height alignment-baseline arabic-form baseline-shift cap-height clip-path clip-rule color-interpolation color-interpolation-filters color-profile color-rendering dominant-baseline enable-background fill-opacity fill-rule flood-color flood-opacity font-family font-size font-size-adjust font-stretch font-style font-variant font-weight glyph-name glyph-orientation-horizontal glyph-orientation-vertical horiz-adv-x horiz-origin-x image-rendering letter-spacing lighting-color marker-end marker-mid marker-start overline-position overline-thickness paint-order panose-1 pointer-events rendering-intent shape-rendering stop-color stop-opacity strikethrough-position strikethrough-thickness stroke-dasharray stroke-dashoffset stroke-linecap stroke-linejoin stroke-miterlimit stroke-opacity stroke-width text-anchor text-decoration text-rendering underline-position underline-thickness unicode-bidi unicode-range units-per-em v-alphabetic v-hanging v-ideographic v-mathematical vector-effect vert-adv-y vert-origin-x vert-origin-y word-spacing writing-mode xmlns:xlink x-height".split(" ").forEach(function(a){var b=a.replace(oa,\npa);D[b]=new B(b,1,!1,a,null,!1,!1)});"xlink:actuate xlink:arcrole xlink:role xlink:show xlink:title xlink:type".split(" ").forEach(function(a){var b=a.replace(oa,pa);D[b]=new B(b,1,!1,a,"http://www.w3.org/1999/xlink",!1,!1)});["xml:base","xml:lang","xml:space"].forEach(function(a){var b=a.replace(oa,pa);D[b]=new B(b,1,!1,a,"http://www.w3.org/XML/1998/namespace",!1,!1)});["tabIndex","crossOrigin"].forEach(function(a){D[a]=new B(a,1,!1,a.toLowerCase(),null,!1,!1)});\nD.xlinkHref=new B("xlinkHref",1,!1,"xlink:href","http://www.w3.org/1999/xlink",!0,!1);["src","href","action","formAction"].forEach(function(a){D[a]=new B(a,1,!1,a.toLowerCase(),null,!0,!0)});\nfunction qa(a,b,c,d){var e=D.hasOwnProperty(b)?D[b]:null;var f=null!==e?0===e.type:d?!1:!(2h||e[g]!==f[h])return"\\n"+e[g].replace(" at new "," at ");while(1<=g&&0<=h)}break}}}finally{Oa=!1,Error.prepareStackTrace=c}return(a=a?a.displayName||a.name:"")?Na(a):""}\nfunction Qa(a){switch(a.tag){case 5:return Na(a.type);case 16:return Na("Lazy");case 13:return Na("Suspense");case 19:return Na("SuspenseList");case 0:case 2:case 15:return a=Pa(a.type,!1),a;case 11:return a=Pa(a.type.render,!1),a;case 22:return a=Pa(a.type._render,!1),a;case 1:return a=Pa(a.type,!0),a;default:return""}}\nfunction Ra(a){if(null==a)return null;if("function"===typeof a)return a.displayName||a.name||null;if("string"===typeof a)return a;switch(a){case ua:return"Fragment";case ta:return"Portal";case xa:return"Profiler";case wa:return"StrictMode";case Ba:return"Suspense";case Ca:return"SuspenseList"}if("object"===typeof a)switch(a.$$typeof){case za:return(a.displayName||"Context")+".Consumer";case ya:return(a._context.displayName||"Context")+".Provider";case Aa:var b=a.render;b=b.displayName||b.name||"";\nreturn a.displayName||(""!==b?"ForwardRef("+b+")":"ForwardRef");case Da:return Ra(a.type);case Fa:return Ra(a._render);case Ea:b=a._payload;a=a._init;try{return Ra(a(b))}catch(c){}}return null}function Sa(a){switch(typeof a){case "boolean":case "number":case "object":case "string":case "undefined":return a;default:return""}}function Ta(a){var b=a.type;return(a=a.nodeName)&&"input"===a.toLowerCase()&&("checkbox"===b||"radio"===b)}\nfunction Ua(a){var b=Ta(a)?"checked":"value",c=Object.getOwnPropertyDescriptor(a.constructor.prototype,b),d=""+a[b];if(!a.hasOwnProperty(b)&&"undefined"!==typeof c&&"function"===typeof c.get&&"function"===typeof c.set){var e=c.get,f=c.set;Object.defineProperty(a,b,{configurable:!0,get:function(){return e.call(this)},set:function(a){d=""+a;f.call(this,a)}});Object.defineProperty(a,b,{enumerable:c.enumerable});return{getValue:function(){return d},setValue:function(a){d=""+a},stopTracking:function(){a._valueTracker=\nnull;delete a[b]}}}}function Va(a){a._valueTracker||(a._valueTracker=Ua(a))}function Wa(a){if(!a)return!1;var b=a._valueTracker;if(!b)return!0;var c=b.getValue();var d="";a&&(d=Ta(a)?a.checked?"true":"false":a.value);a=d;return a!==c?(b.setValue(a),!0):!1}function Xa(a){a=a||("undefined"!==typeof document?document:void 0);if("undefined"===typeof a)return null;try{return a.activeElement||a.body}catch(b){return a.body}}\nfunction Ya(a,b){var c=b.checked;return m({},b,{defaultChecked:void 0,defaultValue:void 0,value:void 0,checked:null!=c?c:a._wrapperState.initialChecked})}function Za(a,b){var c=null==b.defaultValue?"":b.defaultValue,d=null!=b.checked?b.checked:b.defaultChecked;c=Sa(null!=b.value?b.value:c);a._wrapperState={initialChecked:d,initialValue:c,controlled:"checkbox"===b.type||"radio"===b.type?null!=b.checked:null!=b.value}}function $a(a,b){b=b.checked;null!=b&&qa(a,"checked",b,!1)}\nfunction ab(a,b){$a(a,b);var c=Sa(b.value),d=b.type;if(null!=c)if("number"===d){if(0===c&&""===a.value||a.value!=c)a.value=""+c}else a.value!==""+c&&(a.value=""+c);else if("submit"===d||"reset"===d){a.removeAttribute("value");return}b.hasOwnProperty("value")?bb(a,b.type,c):b.hasOwnProperty("defaultValue")&&bb(a,b.type,Sa(b.defaultValue));null==b.checked&&null!=b.defaultChecked&&(a.defaultChecked=!!b.defaultChecked)}\nfunction cb(a,b,c){if(b.hasOwnProperty("value")||b.hasOwnProperty("defaultValue")){var d=b.type;if(!("submit"!==d&&"reset"!==d||void 0!==b.value&&null!==b.value))return;b=""+a._wrapperState.initialValue;c||b===a.value||(a.value=b);a.defaultValue=b}c=a.name;""!==c&&(a.name="");a.defaultChecked=!!a._wrapperState.initialChecked;""!==c&&(a.name=c)}\nfunction bb(a,b,c){if("number"!==b||Xa(a.ownerDocument)!==a)null==c?a.defaultValue=""+a._wrapperState.initialValue:a.defaultValue!==""+c&&(a.defaultValue=""+c)}function db(a){var b="";aa.Children.forEach(a,function(a){null!=a&&(b+=a)});return b}function eb(a,b){a=m({children:void 0},b);if(b=db(b.children))a.children=b;return a}\nfunction fb(a,b,c,d){a=a.options;if(b){b={};for(var e=0;e=c.length))throw Error(y(93));c=c[0]}b=c}null==b&&(b="");c=b}a._wrapperState={initialValue:Sa(c)}}\nfunction ib(a,b){var c=Sa(b.value),d=Sa(b.defaultValue);null!=c&&(c=""+c,c!==a.value&&(a.value=c),null==b.defaultValue&&a.defaultValue!==c&&(a.defaultValue=c));null!=d&&(a.defaultValue=""+d)}function jb(a){var b=a.textContent;b===a._wrapperState.initialValue&&""!==b&&null!==b&&(a.value=b)}var kb={html:"http://www.w3.org/1999/xhtml",mathml:"http://www.w3.org/1998/Math/MathML",svg:"http://www.w3.org/2000/svg"};\nfunction lb(a){switch(a){case "svg":return"http://www.w3.org/2000/svg";case "math":return"http://www.w3.org/1998/Math/MathML";default:return"http://www.w3.org/1999/xhtml"}}function mb(a,b){return null==a||"http://www.w3.org/1999/xhtml"===a?lb(b):"http://www.w3.org/2000/svg"===a&&"foreignObject"===b?"http://www.w3.org/1999/xhtml":a}\nvar nb,ob=function(a){return"undefined"!==typeof MSApp&&MSApp.execUnsafeLocalFunction?function(b,c,d,e){MSApp.execUnsafeLocalFunction(function(){return a(b,c,d,e)})}:a}(function(a,b){if(a.namespaceURI!==kb.svg||"innerHTML"in a)a.innerHTML=b;else{nb=nb||document.createElement("div");nb.innerHTML=""+b.valueOf().toString()+"";for(b=nb.firstChild;a.firstChild;)a.removeChild(a.firstChild);for(;b.firstChild;)a.appendChild(b.firstChild)}});\nfunction pb(a,b){if(b){var c=a.firstChild;if(c&&c===a.lastChild&&3===c.nodeType){c.nodeValue=b;return}}a.textContent=b}\nvar qb={animationIterationCount:!0,borderImageOutset:!0,borderImageSlice:!0,borderImageWidth:!0,boxFlex:!0,boxFlexGroup:!0,boxOrdinalGroup:!0,columnCount:!0,columns:!0,flex:!0,flexGrow:!0,flexPositive:!0,flexShrink:!0,flexNegative:!0,flexOrder:!0,gridArea:!0,gridRow:!0,gridRowEnd:!0,gridRowSpan:!0,gridRowStart:!0,gridColumn:!0,gridColumnEnd:!0,gridColumnSpan:!0,gridColumnStart:!0,fontWeight:!0,lineClamp:!0,lineHeight:!0,opacity:!0,order:!0,orphans:!0,tabSize:!0,widows:!0,zIndex:!0,zoom:!0,fillOpacity:!0,\nfloodOpacity:!0,stopOpacity:!0,strokeDasharray:!0,strokeDashoffset:!0,strokeMiterlimit:!0,strokeOpacity:!0,strokeWidth:!0},rb=["Webkit","ms","Moz","O"];Object.keys(qb).forEach(function(a){rb.forEach(function(b){b=b+a.charAt(0).toUpperCase()+a.substring(1);qb[b]=qb[a]})});function sb(a,b,c){return null==b||"boolean"===typeof b||""===b?"":c||"number"!==typeof b||0===b||qb.hasOwnProperty(a)&&qb[a]?(""+b).trim():b+"px"}\nfunction tb(a,b){a=a.style;for(var c in b)if(b.hasOwnProperty(c)){var d=0===c.indexOf("--"),e=sb(c,b[c],d);"float"===c&&(c="cssFloat");d?a.setProperty(c,e):a[c]=e}}var ub=m({menuitem:!0},{area:!0,base:!0,br:!0,col:!0,embed:!0,hr:!0,img:!0,input:!0,keygen:!0,link:!0,meta:!0,param:!0,source:!0,track:!0,wbr:!0});\nfunction vb(a,b){if(b){if(ub[a]&&(null!=b.children||null!=b.dangerouslySetInnerHTML))throw Error(y(137,a));if(null!=b.dangerouslySetInnerHTML){if(null!=b.children)throw Error(y(60));if(!("object"===typeof b.dangerouslySetInnerHTML&&"__html"in b.dangerouslySetInnerHTML))throw Error(y(61));}if(null!=b.style&&"object"!==typeof b.style)throw Error(y(62));}}\nfunction wb(a,b){if(-1===a.indexOf("-"))return"string"===typeof b.is;switch(a){case "annotation-xml":case "color-profile":case "font-face":case "font-face-src":case "font-face-uri":case "font-face-format":case "font-face-name":case "missing-glyph":return!1;default:return!0}}function xb(a){a=a.target||a.srcElement||window;a.correspondingUseElement&&(a=a.correspondingUseElement);return 3===a.nodeType?a.parentNode:a}var yb=null,zb=null,Ab=null;\nfunction Bb(a){if(a=Cb(a)){if("function"!==typeof yb)throw Error(y(280));var b=a.stateNode;b&&(b=Db(b),yb(a.stateNode,a.type,b))}}function Eb(a){zb?Ab?Ab.push(a):Ab=[a]:zb=a}function Fb(){if(zb){var a=zb,b=Ab;Ab=zb=null;Bb(a);if(b)for(a=0;ad?0:1<c;c++)b.push(a);return b}\nfunction $c(a,b,c){a.pendingLanes|=b;var d=b-1;a.suspendedLanes&=d;a.pingedLanes&=d;a=a.eventTimes;b=31-Vc(b);a[b]=c}var Vc=Math.clz32?Math.clz32:ad,bd=Math.log,cd=Math.LN2;function ad(a){return 0===a?32:31-(bd(a)/cd|0)|0}var dd=r.unstable_UserBlockingPriority,ed=r.unstable_runWithPriority,fd=!0;function gd(a,b,c,d){Kb||Ib();var e=hd,f=Kb;Kb=!0;try{Hb(e,a,b,c,d)}finally{(Kb=f)||Mb()}}function id(a,b,c,d){ed(dd,hd.bind(null,a,b,c,d))}\nfunction hd(a,b,c,d){if(fd){var e;if((e=0===(b&4))&&0=be),ee=String.fromCharCode(32),fe=!1;\nfunction ge(a,b){switch(a){case "keyup":return-1!==$d.indexOf(b.keyCode);case "keydown":return 229!==b.keyCode;case "keypress":case "mousedown":case "focusout":return!0;default:return!1}}function he(a){a=a.detail;return"object"===typeof a&&"data"in a?a.data:null}var ie=!1;function je(a,b){switch(a){case "compositionend":return he(b);case "keypress":if(32!==b.which)return null;fe=!0;return ee;case "textInput":return a=b.data,a===ee&&fe?null:a;default:return null}}\nfunction ke(a,b){if(ie)return"compositionend"===a||!ae&&ge(a,b)?(a=nd(),md=ld=kd=null,ie=!1,a):null;switch(a){case "paste":return null;case "keypress":if(!(b.ctrlKey||b.altKey||b.metaKey)||b.ctrlKey&&b.altKey){if(b.char&&1=b)return{node:c,offset:b-a};a=d}a:{for(;c;){if(c.nextSibling){c=c.nextSibling;break a}c=c.parentNode}c=void 0}c=Ke(c)}}function Me(a,b){return a&&b?a===b?!0:a&&3===a.nodeType?!1:b&&3===b.nodeType?Me(a,b.parentNode):"contains"in a?a.contains(b):a.compareDocumentPosition?!!(a.compareDocumentPosition(b)&16):!1:!1}\nfunction Ne(){for(var a=window,b=Xa();b instanceof a.HTMLIFrameElement;){try{var c="string"===typeof b.contentWindow.location.href}catch(d){c=!1}if(c)a=b.contentWindow;else break;b=Xa(a.document)}return b}function Oe(a){var b=a&&a.nodeName&&a.nodeName.toLowerCase();return b&&("input"===b&&("text"===a.type||"search"===a.type||"tel"===a.type||"url"===a.type||"password"===a.type)||"textarea"===b||"true"===a.contentEditable)}\nvar Pe=fa&&"documentMode"in document&&11>=document.documentMode,Qe=null,Re=null,Se=null,Te=!1;\nfunction Ue(a,b,c){var d=c.window===c?c.document:9===c.nodeType?c:c.ownerDocument;Te||null==Qe||Qe!==Xa(d)||(d=Qe,"selectionStart"in d&&Oe(d)?d={start:d.selectionStart,end:d.selectionEnd}:(d=(d.ownerDocument&&d.ownerDocument.defaultView||window).getSelection(),d={anchorNode:d.anchorNode,anchorOffset:d.anchorOffset,focusNode:d.focusNode,focusOffset:d.focusOffset}),Se&&Je(Se,d)||(Se=d,d=oe(Re,"onSelect"),0Af||(a.current=zf[Af],zf[Af]=null,Af--)}function I(a,b){Af++;zf[Af]=a.current;a.current=b}var Cf={},M=Bf(Cf),N=Bf(!1),Df=Cf;\nfunction Ef(a,b){var c=a.type.contextTypes;if(!c)return Cf;var d=a.stateNode;if(d&&d.__reactInternalMemoizedUnmaskedChildContext===b)return d.__reactInternalMemoizedMaskedChildContext;var e={},f;for(f in c)e[f]=b[f];d&&(a=a.stateNode,a.__reactInternalMemoizedUnmaskedChildContext=b,a.__reactInternalMemoizedMaskedChildContext=e);return e}function Ff(a){a=a.childContextTypes;return null!==a&&void 0!==a}function Gf(){H(N);H(M)}function Hf(a,b,c){if(M.current!==Cf)throw Error(y(168));I(M,b);I(N,c)}\nfunction If(a,b,c){var d=a.stateNode;a=b.childContextTypes;if("function"!==typeof d.getChildContext)return c;d=d.getChildContext();for(var e in d)if(!(e in a))throw Error(y(108,Ra(b)||"Unknown",e));return m({},c,d)}function Jf(a){a=(a=a.stateNode)&&a.__reactInternalMemoizedMergedChildContext||Cf;Df=M.current;I(M,a);I(N,N.current);return!0}function Kf(a,b,c){var d=a.stateNode;if(!d)throw Error(y(169));c?(a=If(a,b,Df),d.__reactInternalMemoizedMergedChildContext=a,H(N),H(M),I(M,a)):H(N);I(N,c)}\nvar Lf=null,Mf=null,Nf=r.unstable_runWithPriority,Of=r.unstable_scheduleCallback,Pf=r.unstable_cancelCallback,Qf=r.unstable_shouldYield,Rf=r.unstable_requestPaint,Sf=r.unstable_now,Tf=r.unstable_getCurrentPriorityLevel,Uf=r.unstable_ImmediatePriority,Vf=r.unstable_UserBlockingPriority,Wf=r.unstable_NormalPriority,Xf=r.unstable_LowPriority,Yf=r.unstable_IdlePriority,Zf={},$f=void 0!==Rf?Rf:function(){},ag=null,bg=null,cg=!1,dg=Sf(),O=1E4>dg?Sf:function(){return Sf()-dg};\nfunction eg(){switch(Tf()){case Uf:return 99;case Vf:return 98;case Wf:return 97;case Xf:return 96;case Yf:return 95;default:throw Error(y(332));}}function fg(a){switch(a){case 99:return Uf;case 98:return Vf;case 97:return Wf;case 96:return Xf;case 95:return Yf;default:throw Error(y(332));}}function gg(a,b){a=fg(a);return Nf(a,b)}function hg(a,b,c){a=fg(a);return Of(a,b,c)}function ig(){if(null!==bg){var a=bg;bg=null;Pf(a)}jg()}\nfunction jg(){if(!cg&&null!==ag){cg=!0;var a=0;try{var b=ag;gg(99,function(){for(;az?(q=u,u=null):q=u.sibling;var n=p(e,u,h[z],k);if(null===n){null===u&&(u=q);break}a&&u&&null===\nn.alternate&&b(e,u);g=f(n,g,z);null===t?l=n:t.sibling=n;t=n;u=q}if(z===h.length)return c(e,u),l;if(null===u){for(;zz?(q=u,u=null):q=u.sibling;var w=p(e,u,n.value,k);if(null===w){null===u&&(u=q);break}a&&u&&null===w.alternate&&b(e,u);g=f(w,g,z);null===t?l=w:t.sibling=w;t=w;u=q}if(n.done)return c(e,u),l;if(null===u){for(;!n.done;z++,n=h.next())n=A(e,n.value,k),null!==n&&(g=f(n,g,z),null===t?l=n:t.sibling=n,t=n);return l}for(u=d(e,u);!n.done;z++,n=h.next())n=C(u,e,z,n.value,k),null!==n&&(a&&null!==n.alternate&&\nu.delete(null===n.key?z:n.key),g=f(n,g,z),null===t?l=n:t.sibling=n,t=n);a&&u.forEach(function(a){return b(e,a)});return l}return function(a,d,f,h){var k="object"===typeof f&&null!==f&&f.type===ua&&null===f.key;k&&(f=f.props.children);var l="object"===typeof f&&null!==f;if(l)switch(f.$$typeof){case sa:a:{l=f.key;for(k=d;null!==k;){if(k.key===l){switch(k.tag){case 7:if(f.type===ua){c(a,k.sibling);d=e(k,f.props.children);d.return=a;a=d;break a}break;default:if(k.elementType===f.type){c(a,k.sibling);\nd=e(k,f.props);d.ref=Qg(a,k,f);d.return=a;a=d;break a}}c(a,k);break}else b(a,k);k=k.sibling}f.type===ua?(d=Xg(f.props.children,a.mode,h,f.key),d.return=a,a=d):(h=Vg(f.type,f.key,f.props,null,a.mode,h),h.ref=Qg(a,d,f),h.return=a,a=h)}return g(a);case ta:a:{for(k=f.key;null!==d;){if(d.key===k)if(4===d.tag&&d.stateNode.containerInfo===f.containerInfo&&d.stateNode.implementation===f.implementation){c(a,d.sibling);d=e(d,f.children||[]);d.return=a;a=d;break a}else{c(a,d);break}else b(a,d);d=d.sibling}d=\nWg(f,a.mode,h);d.return=a;a=d}return g(a)}if("string"===typeof f||"number"===typeof f)return f=""+f,null!==d&&6===d.tag?(c(a,d.sibling),d=e(d,f),d.return=a,a=d):(c(a,d),d=Ug(f,a.mode,h),d.return=a,a=d),g(a);if(Pg(f))return x(a,d,f,h);if(La(f))return w(a,d,f,h);l&&Rg(a,f);if("undefined"===typeof f&&!k)switch(a.tag){case 1:case 22:case 0:case 11:case 15:throw Error(y(152,Ra(a.type)||"Component"));}return c(a,d)}}var Yg=Sg(!0),Zg=Sg(!1),$g={},ah=Bf($g),bh=Bf($g),ch=Bf($g);\nfunction dh(a){if(a===$g)throw Error(y(174));return a}function eh(a,b){I(ch,b);I(bh,a);I(ah,$g);a=b.nodeType;switch(a){case 9:case 11:b=(b=b.documentElement)?b.namespaceURI:mb(null,"");break;default:a=8===a?b.parentNode:b,b=a.namespaceURI||null,a=a.tagName,b=mb(b,a)}H(ah);I(ah,b)}function fh(){H(ah);H(bh);H(ch)}function gh(a){dh(ch.current);var b=dh(ah.current);var c=mb(b,a.type);b!==c&&(I(bh,a),I(ah,c))}function hh(a){bh.current===a&&(H(ah),H(bh))}var P=Bf(0);\nfunction ih(a){for(var b=a;null!==b;){if(13===b.tag){var c=b.memoizedState;if(null!==c&&(c=c.dehydrated,null===c||"$?"===c.data||"$!"===c.data))return b}else if(19===b.tag&&void 0!==b.memoizedProps.revealOrder){if(0!==(b.flags&64))return b}else if(null!==b.child){b.child.return=b;b=b.child;continue}if(b===a)break;for(;null===b.sibling;){if(null===b.return||b.return===a)return null;b=b.return}b.sibling.return=b.return;b=b.sibling}return null}var jh=null,kh=null,lh=!1;\nfunction mh(a,b){var c=nh(5,null,null,0);c.elementType="DELETED";c.type="DELETED";c.stateNode=b;c.return=a;c.flags=8;null!==a.lastEffect?(a.lastEffect.nextEffect=c,a.lastEffect=c):a.firstEffect=a.lastEffect=c}function oh(a,b){switch(a.tag){case 5:var c=a.type;b=1!==b.nodeType||c.toLowerCase()!==b.nodeName.toLowerCase()?null:b;return null!==b?(a.stateNode=b,!0):!1;case 6:return b=""===a.pendingProps||3!==b.nodeType?null:b,null!==b?(a.stateNode=b,!0):!1;case 13:return!1;default:return!1}}\nfunction ph(a){if(lh){var b=kh;if(b){var c=b;if(!oh(a,b)){b=rf(c.nextSibling);if(!b||!oh(a,b)){a.flags=a.flags&-1025|2;lh=!1;jh=a;return}mh(jh,c)}jh=a;kh=rf(b.firstChild)}else a.flags=a.flags&-1025|2,lh=!1,jh=a}}function qh(a){for(a=a.return;null!==a&&5!==a.tag&&3!==a.tag&&13!==a.tag;)a=a.return;jh=a}\nfunction rh(a){if(a!==jh)return!1;if(!lh)return qh(a),lh=!0,!1;var b=a.type;if(5!==a.tag||"head"!==b&&"body"!==b&&!nf(b,a.memoizedProps))for(b=kh;b;)mh(a,b),b=rf(b.nextSibling);qh(a);if(13===a.tag){a=a.memoizedState;a=null!==a?a.dehydrated:null;if(!a)throw Error(y(317));a:{a=a.nextSibling;for(b=0;a;){if(8===a.nodeType){var c=a.data;if("/$"===c){if(0===b){kh=rf(a.nextSibling);break a}b--}else"$"!==c&&"$!"!==c&&"$?"!==c||b++}a=a.nextSibling}kh=null}}else kh=jh?rf(a.stateNode.nextSibling):null;return!0}\nfunction sh(){kh=jh=null;lh=!1}var th=[];function uh(){for(var a=0;af))throw Error(y(301));f+=1;T=S=null;b.updateQueue=null;vh.current=Fh;a=c(d,e)}while(zh)}vh.current=Gh;b=null!==S&&null!==S.next;xh=0;T=S=R=null;yh=!1;if(b)throw Error(y(300));return a}function Hh(){var a={memoizedState:null,baseState:null,baseQueue:null,queue:null,next:null};null===T?R.memoizedState=T=a:T=T.next=a;return T}\nfunction Ih(){if(null===S){var a=R.alternate;a=null!==a?a.memoizedState:null}else a=S.next;var b=null===T?R.memoizedState:T.next;if(null!==b)T=b,S=a;else{if(null===a)throw Error(y(310));S=a;a={memoizedState:S.memoizedState,baseState:S.baseState,baseQueue:S.baseQueue,queue:S.queue,next:null};null===T?R.memoizedState=T=a:T=T.next=a}return T}function Jh(a,b){return"function"===typeof b?b(a):b}\nfunction Kh(a){var b=Ih(),c=b.queue;if(null===c)throw Error(y(311));c.lastRenderedReducer=a;var d=S,e=d.baseQueue,f=c.pending;if(null!==f){if(null!==e){var g=e.next;e.next=f.next;f.next=g}d.baseQueue=e=f;c.pending=null}if(null!==e){e=e.next;d=d.baseState;var h=g=f=null,k=e;do{var l=k.lane;if((xh&l)===l)null!==h&&(h=h.next={lane:0,action:k.action,eagerReducer:k.eagerReducer,eagerState:k.eagerState,next:null}),d=k.eagerReducer===a?k.eagerState:a(d,k.action);else{var n={lane:l,action:k.action,eagerReducer:k.eagerReducer,\neagerState:k.eagerState,next:null};null===h?(g=h=n,f=d):h=h.next=n;R.lanes|=l;Dg|=l}k=k.next}while(null!==k&&k!==e);null===h?f=d:h.next=g;He(d,b.memoizedState)||(ug=!0);b.memoizedState=d;b.baseState=f;b.baseQueue=h;c.lastRenderedState=d}return[b.memoizedState,c.dispatch]}\nfunction Lh(a){var b=Ih(),c=b.queue;if(null===c)throw Error(y(311));c.lastRenderedReducer=a;var d=c.dispatch,e=c.pending,f=b.memoizedState;if(null!==e){c.pending=null;var g=e=e.next;do f=a(f,g.action),g=g.next;while(g!==e);He(f,b.memoizedState)||(ug=!0);b.memoizedState=f;null===b.baseQueue&&(b.baseState=f);c.lastRenderedState=f}return[f,d]}\nfunction Mh(a,b,c){var d=b._getVersion;d=d(b._source);var e=b._workInProgressVersionPrimary;if(null!==e)a=e===d;else if(a=a.mutableReadLanes,a=(xh&a)===a)b._workInProgressVersionPrimary=d,th.push(b);if(a)return c(b._source);th.push(b);throw Error(y(350));}\nfunction Nh(a,b,c,d){var e=U;if(null===e)throw Error(y(349));var f=b._getVersion,g=f(b._source),h=vh.current,k=h.useState(function(){return Mh(e,b,c)}),l=k[1],n=k[0];k=T;var A=a.memoizedState,p=A.refs,C=p.getSnapshot,x=A.source;A=A.subscribe;var w=R;a.memoizedState={refs:p,source:b,subscribe:d};h.useEffect(function(){p.getSnapshot=c;p.setSnapshot=l;var a=f(b._source);if(!He(g,a)){a=c(b._source);He(n,a)||(l(a),a=Ig(w),e.mutableReadLanes|=a&e.pendingLanes);a=e.mutableReadLanes;e.entangledLanes|=a;for(var d=\ne.entanglements,h=a;0c?98:c,function(){a(!0)});gg(97\\x3c/script>",a=a.removeChild(a.firstChild)):"string"===typeof d.is?a=g.createElement(c,{is:d.is}):(a=g.createElement(c),"select"===c&&(g=a,d.multiple?g.multiple=!0:d.size&&(g.size=d.size))):a=g.createElementNS(a,c);a[wf]=b;a[xf]=d;Bi(a,b,!1,!1);b.stateNode=a;g=wb(c,d);switch(c){case "dialog":G("cancel",a);G("close",a);\ne=d;break;case "iframe":case "object":case "embed":G("load",a);e=d;break;case "video":case "audio":for(e=0;eJi&&(b.flags|=64,f=!0,Fi(d,!1),b.lanes=33554432)}else{if(!f)if(a=ih(g),null!==a){if(b.flags|=64,f=!0,c=a.updateQueue,null!==c&&(b.updateQueue=c,b.flags|=4),Fi(d,!0),null===d.tail&&"hidden"===d.tailMode&&!g.alternate&&!lh)return b=b.lastEffect=d.lastEffect,null!==b&&(b.nextEffect=null),null}else 2*O()-d.renderingStartTime>Ji&&1073741824!==c&&(b.flags|=\n64,f=!0,Fi(d,!1),b.lanes=33554432);d.isBackwards?(g.sibling=b.child,b.child=g):(c=d.last,null!==c?c.sibling=g:b.child=g,d.last=g)}return null!==d.tail?(c=d.tail,d.rendering=c,d.tail=c.sibling,d.lastEffect=b.lastEffect,d.renderingStartTime=O(),c.sibling=null,b=P.current,I(P,f?b&1|2:b&1),c):null;case 23:case 24:return Ki(),null!==a&&null!==a.memoizedState!==(null!==b.memoizedState)&&"unstable-defer-without-hiding"!==d.mode&&(b.flags|=4),null}throw Error(y(156,b.tag));}\nfunction Li(a){switch(a.tag){case 1:Ff(a.type)&&Gf();var b=a.flags;return b&4096?(a.flags=b&-4097|64,a):null;case 3:fh();H(N);H(M);uh();b=a.flags;if(0!==(b&64))throw Error(y(285));a.flags=b&-4097|64;return a;case 5:return hh(a),null;case 13:return H(P),b=a.flags,b&4096?(a.flags=b&-4097|64,a):null;case 19:return H(P),null;case 4:return fh(),null;case 10:return rg(a),null;case 23:case 24:return Ki(),null;default:return null}}\nfunction Mi(a,b){try{var c="",d=b;do c+=Qa(d),d=d.return;while(d);var e=c}catch(f){e="\\nError generating stack: "+f.message+"\\n"+f.stack}return{value:a,source:b,stack:e}}function Ni(a,b){try{console.error(b.value)}catch(c){setTimeout(function(){throw c;})}}var Oi="function"===typeof WeakMap?WeakMap:Map;function Pi(a,b,c){c=zg(-1,c);c.tag=3;c.payload={element:null};var d=b.value;c.callback=function(){Qi||(Qi=!0,Ri=d);Ni(a,b)};return c}\nfunction Si(a,b,c){c=zg(-1,c);c.tag=3;var d=a.type.getDerivedStateFromError;if("function"===typeof d){var e=b.value;c.payload=function(){Ni(a,b);return d(e)}}var f=a.stateNode;null!==f&&"function"===typeof f.componentDidCatch&&(c.callback=function(){"function"!==typeof d&&(null===Ti?Ti=new Set([this]):Ti.add(this),Ni(a,b));var c=b.stack;this.componentDidCatch(b.value,{componentStack:null!==c?c:""})});return c}var Ui="function"===typeof WeakSet?WeakSet:Set;\nfunction Vi(a){var b=a.ref;if(null!==b)if("function"===typeof b)try{b(null)}catch(c){Wi(a,c)}else b.current=null}function Xi(a,b){switch(b.tag){case 0:case 11:case 15:case 22:return;case 1:if(b.flags&256&&null!==a){var c=a.memoizedProps,d=a.memoizedState;a=b.stateNode;b=a.getSnapshotBeforeUpdate(b.elementType===b.type?c:lg(b.type,c),d);a.__reactInternalSnapshotBeforeUpdate=b}return;case 3:b.flags&256&&qf(b.stateNode.containerInfo);return;case 5:case 6:case 4:case 17:return}throw Error(y(163));}\nfunction Yi(a,b,c){switch(c.tag){case 0:case 11:case 15:case 22:b=c.updateQueue;b=null!==b?b.lastEffect:null;if(null!==b){a=b=b.next;do{if(3===(a.tag&3)){var d=a.create;a.destroy=d()}a=a.next}while(a!==b)}b=c.updateQueue;b=null!==b?b.lastEffect:null;if(null!==b){a=b=b.next;do{var e=a;d=e.next;e=e.tag;0!==(e&4)&&0!==(e&1)&&(Zi(c,a),$i(c,a));a=d}while(a!==b)}return;case 1:a=c.stateNode;c.flags&4&&(null===b?a.componentDidMount():(d=c.elementType===c.type?b.memoizedProps:lg(c.type,b.memoizedProps),a.componentDidUpdate(d,\nb.memoizedState,a.__reactInternalSnapshotBeforeUpdate)));b=c.updateQueue;null!==b&&Eg(c,b,a);return;case 3:b=c.updateQueue;if(null!==b){a=null;if(null!==c.child)switch(c.child.tag){case 5:a=c.child.stateNode;break;case 1:a=c.child.stateNode}Eg(c,b,a)}return;case 5:a=c.stateNode;null===b&&c.flags&4&&mf(c.type,c.memoizedProps)&&a.focus();return;case 6:return;case 4:return;case 12:return;case 13:null===c.memoizedState&&(c=c.alternate,null!==c&&(c=c.memoizedState,null!==c&&(c=c.dehydrated,null!==c&&Cc(c))));\nreturn;case 19:case 17:case 20:case 21:case 23:case 24:return}throw Error(y(163));}\nfunction aj(a,b){for(var c=a;;){if(5===c.tag){var d=c.stateNode;if(b)d=d.style,"function"===typeof d.setProperty?d.setProperty("display","none","important"):d.display="none";else{d=c.stateNode;var e=c.memoizedProps.style;e=void 0!==e&&null!==e&&e.hasOwnProperty("display")?e.display:null;d.style.display=sb("display",e)}}else if(6===c.tag)c.stateNode.nodeValue=b?"":c.memoizedProps;else if((23!==c.tag&&24!==c.tag||null===c.memoizedState||c===a)&&null!==c.child){c.child.return=c;c=c.child;continue}if(c===\na)break;for(;null===c.sibling;){if(null===c.return||c.return===a)return;c=c.return}c.sibling.return=c.return;c=c.sibling}}\nfunction bj(a,b){if(Mf&&"function"===typeof Mf.onCommitFiberUnmount)try{Mf.onCommitFiberUnmount(Lf,b)}catch(f){}switch(b.tag){case 0:case 11:case 14:case 15:case 22:a=b.updateQueue;if(null!==a&&(a=a.lastEffect,null!==a)){var c=a=a.next;do{var d=c,e=d.destroy;d=d.tag;if(void 0!==e)if(0!==(d&4))Zi(b,c);else{d=b;try{e()}catch(f){Wi(d,f)}}c=c.next}while(c!==a)}break;case 1:Vi(b);a=b.stateNode;if("function"===typeof a.componentWillUnmount)try{a.props=b.memoizedProps,a.state=b.memoizedState,a.componentWillUnmount()}catch(f){Wi(b,\nf)}break;case 5:Vi(b);break;case 4:cj(a,b)}}function dj(a){a.alternate=null;a.child=null;a.dependencies=null;a.firstEffect=null;a.lastEffect=null;a.memoizedProps=null;a.memoizedState=null;a.pendingProps=null;a.return=null;a.updateQueue=null}function ej(a){return 5===a.tag||3===a.tag||4===a.tag}\nfunction fj(a){a:{for(var b=a.return;null!==b;){if(ej(b))break a;b=b.return}throw Error(y(160));}var c=b;b=c.stateNode;switch(c.tag){case 5:var d=!1;break;case 3:b=b.containerInfo;d=!0;break;case 4:b=b.containerInfo;d=!0;break;default:throw Error(y(161));}c.flags&16&&(pb(b,""),c.flags&=-17);a:b:for(c=a;;){for(;null===c.sibling;){if(null===c.return||ej(c.return)){c=null;break a}c=c.return}c.sibling.return=c.return;for(c=c.sibling;5!==c.tag&&6!==c.tag&&18!==c.tag;){if(c.flags&2)continue b;if(null===\nc.child||4===c.tag)continue b;else c.child.return=c,c=c.child}if(!(c.flags&2)){c=c.stateNode;break a}}d?gj(a,c,b):hj(a,c,b)}\nfunction gj(a,b,c){var d=a.tag,e=5===d||6===d;if(e)a=e?a.stateNode:a.stateNode.instance,b?8===c.nodeType?c.parentNode.insertBefore(a,b):c.insertBefore(a,b):(8===c.nodeType?(b=c.parentNode,b.insertBefore(a,c)):(b=c,b.appendChild(a)),c=c._reactRootContainer,null!==c&&void 0!==c||null!==b.onclick||(b.onclick=jf));else if(4!==d&&(a=a.child,null!==a))for(gj(a,b,c),a=a.sibling;null!==a;)gj(a,b,c),a=a.sibling}\nfunction hj(a,b,c){var d=a.tag,e=5===d||6===d;if(e)a=e?a.stateNode:a.stateNode.instance,b?c.insertBefore(a,b):c.appendChild(a);else if(4!==d&&(a=a.child,null!==a))for(hj(a,b,c),a=a.sibling;null!==a;)hj(a,b,c),a=a.sibling}\nfunction cj(a,b){for(var c=b,d=!1,e,f;;){if(!d){d=c.return;a:for(;;){if(null===d)throw Error(y(160));e=d.stateNode;switch(d.tag){case 5:f=!1;break a;case 3:e=e.containerInfo;f=!0;break a;case 4:e=e.containerInfo;f=!0;break a}d=d.return}d=!0}if(5===c.tag||6===c.tag){a:for(var g=a,h=c,k=h;;)if(bj(g,k),null!==k.child&&4!==k.tag)k.child.return=k,k=k.child;else{if(k===h)break a;for(;null===k.sibling;){if(null===k.return||k.return===h)break a;k=k.return}k.sibling.return=k.return;k=k.sibling}f?(g=e,h=c.stateNode,\n8===g.nodeType?g.parentNode.removeChild(h):g.removeChild(h)):e.removeChild(c.stateNode)}else if(4===c.tag){if(null!==c.child){e=c.stateNode.containerInfo;f=!0;c.child.return=c;c=c.child;continue}}else if(bj(a,c),null!==c.child){c.child.return=c;c=c.child;continue}if(c===b)break;for(;null===c.sibling;){if(null===c.return||c.return===b)return;c=c.return;4===c.tag&&(d=!1)}c.sibling.return=c.return;c=c.sibling}}\nfunction ij(a,b){switch(b.tag){case 0:case 11:case 14:case 15:case 22:var c=b.updateQueue;c=null!==c?c.lastEffect:null;if(null!==c){var d=c=c.next;do 3===(d.tag&3)&&(a=d.destroy,d.destroy=void 0,void 0!==a&&a()),d=d.next;while(d!==c)}return;case 1:return;case 5:c=b.stateNode;if(null!=c){d=b.memoizedProps;var e=null!==a?a.memoizedProps:d;a=b.type;var f=b.updateQueue;b.updateQueue=null;if(null!==f){c[xf]=d;"input"===a&&"radio"===d.type&&null!=d.name&&$a(c,d);wb(a,e);b=wb(a,d);for(e=0;ee&&(e=g);c&=~f}c=e;c=O()-c;c=(120>c?120:480>c?480:1080>c?1080:1920>c?1920:3E3>c?3E3:4320>\nc?4320:1960*nj(c/1960))-c;if(10 component higher in the tree to provide a loading indicator or placeholder to display.")}5!==V&&(V=2);k=Mi(k,h);p=\ng;do{switch(p.tag){case 3:f=k;p.flags|=4096;b&=-b;p.lanes|=b;var J=Pi(p,f,b);Bg(p,J);break a;case 1:f=k;var K=p.type,Q=p.stateNode;if(0===(p.flags&64)&&("function"===typeof K.getDerivedStateFromError||null!==Q&&"function"===typeof Q.componentDidCatch&&(null===Ti||!Ti.has(Q)))){p.flags|=4096;b&=-b;p.lanes|=b;var L=Si(p,f,b);Bg(p,L);break a}}p=p.return}while(null!==p)}Zj(c)}catch(va){b=va;Y===c&&null!==c&&(Y=c=c.return);continue}break}while(1)}\nfunction Pj(){var a=oj.current;oj.current=Gh;return null===a?Gh:a}function Tj(a,b){var c=X;X|=16;var d=Pj();U===a&&W===b||Qj(a,b);do try{ak();break}catch(e){Sj(a,e)}while(1);qg();X=c;oj.current=d;if(null!==Y)throw Error(y(261));U=null;W=0;return V}function ak(){for(;null!==Y;)bk(Y)}function Rj(){for(;null!==Y&&!Qf();)bk(Y)}function bk(a){var b=ck(a.alternate,a,qj);a.memoizedProps=a.pendingProps;null===b?Zj(a):Y=b;pj.current=null}\nfunction Zj(a){var b=a;do{var c=b.alternate;a=b.return;if(0===(b.flags&2048)){c=Gi(c,b,qj);if(null!==c){Y=c;return}c=b;if(24!==c.tag&&23!==c.tag||null===c.memoizedState||0!==(qj&1073741824)||0===(c.mode&4)){for(var d=0,e=c.child;null!==e;)d|=e.lanes|e.childLanes,e=e.sibling;c.childLanes=d}null!==a&&0===(a.flags&2048)&&(null===a.firstEffect&&(a.firstEffect=b.firstEffect),null!==b.lastEffect&&(null!==a.lastEffect&&(a.lastEffect.nextEffect=b.firstEffect),a.lastEffect=b.lastEffect),1g&&(h=g,g=J,J=h),h=Le(t,J),f=Le(t,g),h&&f&&(1!==v.rangeCount||v.anchorNode!==h.node||v.anchorOffset!==h.offset||v.focusNode!==f.node||v.focusOffset!==f.offset)&&(q=q.createRange(),q.setStart(h.node,h.offset),v.removeAllRanges(),J>g?(v.addRange(q),v.extend(f.node,f.offset)):(q.setEnd(f.node,f.offset),v.addRange(q))))));q=[];for(v=t;v=v.parentNode;)1===v.nodeType&&q.push({element:v,left:v.scrollLeft,top:v.scrollTop});"function"===typeof t.focus&&t.focus();for(t=\n0;tO()-jj?Qj(a,0):uj|=c);Mj(a,b)}function lj(a,b){var c=a.stateNode;null!==c&&c.delete(b);b=0;0===b&&(b=a.mode,0===(b&2)?b=1:0===(b&4)?b=99===eg()?1:2:(0===Gj&&(Gj=tj),b=Yc(62914560&~Gj),0===b&&(b=4194304)));c=Hg();a=Kj(a,b);null!==a&&($c(a,b,c),Mj(a,c))}var ck;\nck=function(a,b,c){var d=b.lanes;if(null!==a)if(a.memoizedProps!==b.pendingProps||N.current)ug=!0;else if(0!==(c&d))ug=0!==(a.flags&16384)?!0:!1;else{ug=!1;switch(b.tag){case 3:ri(b);sh();break;case 5:gh(b);break;case 1:Ff(b.type)&&Jf(b);break;case 4:eh(b,b.stateNode.containerInfo);break;case 10:d=b.memoizedProps.value;var e=b.type._context;I(mg,e._currentValue);e._currentValue=d;break;case 13:if(null!==b.memoizedState){if(0!==(c&b.child.childLanes))return ti(a,b,c);I(P,P.current&1);b=hi(a,b,c);return null!==\nb?b.sibling:null}I(P,P.current&1);break;case 19:d=0!==(c&b.childLanes);if(0!==(a.flags&64)){if(d)return Ai(a,b,c);b.flags|=64}e=b.memoizedState;null!==e&&(e.rendering=null,e.tail=null,e.lastEffect=null);I(P,P.current);if(d)break;else return null;case 23:case 24:return b.lanes=0,mi(a,b,c)}return hi(a,b,c)}else ug=!1;b.lanes=0;switch(b.tag){case 2:d=b.type;null!==a&&(a.alternate=null,b.alternate=null,b.flags|=2);a=b.pendingProps;e=Ef(b,M.current);tg(b,c);e=Ch(null,b,d,a,e,c);b.flags|=1;if("object"===\ntypeof e&&null!==e&&"function"===typeof e.render&&void 0===e.$$typeof){b.tag=1;b.memoizedState=null;b.updateQueue=null;if(Ff(d)){var f=!0;Jf(b)}else f=!1;b.memoizedState=null!==e.state&&void 0!==e.state?e.state:null;xg(b);var g=d.getDerivedStateFromProps;"function"===typeof g&&Gg(b,d,g,a);e.updater=Kg;b.stateNode=e;e._reactInternals=b;Og(b,d,a,c);b=qi(null,b,d,!0,f,c)}else b.tag=0,fi(null,b,e,c),b=b.child;return b;case 16:e=b.elementType;a:{null!==a&&(a.alternate=null,b.alternate=null,b.flags|=2);\na=b.pendingProps;f=e._init;e=f(e._payload);b.type=e;f=b.tag=hk(e);a=lg(e,a);switch(f){case 0:b=li(null,b,e,a,c);break a;case 1:b=pi(null,b,e,a,c);break a;case 11:b=gi(null,b,e,a,c);break a;case 14:b=ii(null,b,e,lg(e.type,a),d,c);break a}throw Error(y(306,e,""));}return b;case 0:return d=b.type,e=b.pendingProps,e=b.elementType===d?e:lg(d,e),li(a,b,d,e,c);case 1:return d=b.type,e=b.pendingProps,e=b.elementType===d?e:lg(d,e),pi(a,b,d,e,c);case 3:ri(b);d=b.updateQueue;if(null===a||null===d)throw Error(y(282));\nd=b.pendingProps;e=b.memoizedState;e=null!==e?e.element:null;yg(a,b);Cg(b,d,null,c);d=b.memoizedState.element;if(d===e)sh(),b=hi(a,b,c);else{e=b.stateNode;if(f=e.hydrate)kh=rf(b.stateNode.containerInfo.firstChild),jh=b,f=lh=!0;if(f){a=e.mutableSourceEagerHydrationData;if(null!=a)for(e=0;e>> 16),\n\t K[1], (K[0] << 16) | (K[3] >>> 16),\n\t K[2], (K[1] << 16) | (K[0] >>> 16),\n\t K[3], (K[2] << 16) | (K[1] >>> 16)\n\t ];\n\n\t // Generate initial counter values\n\t var C = this._C = [\n\t (K[2] << 16) | (K[2] >>> 16), (K[0] & 0xffff0000) | (K[1] & 0x0000ffff),\n\t (K[3] << 16) | (K[3] >>> 16), (K[1] & 0xffff0000) | (K[2] & 0x0000ffff),\n\t (K[0] << 16) | (K[0] >>> 16), (K[2] & 0xffff0000) | (K[3] & 0x0000ffff),\n\t (K[1] << 16) | (K[1] >>> 16), (K[3] & 0xffff0000) | (K[0] & 0x0000ffff)\n\t ];\n\n\t // Carry bit\n\t this._b = 0;\n\n\t // Iterate the system four times\n\t for (var i = 0; i < 4; i++) {\n\t nextState.call(this);\n\t }\n\n\t // Modify the counters\n\t for (var i = 0; i < 8; i++) {\n\t C[i] ^= X[(i + 4) & 7];\n\t }\n\n\t // IV setup\n\t if (iv) {\n\t // Shortcuts\n\t var IV = iv.words;\n\t var IV_0 = IV[0];\n\t var IV_1 = IV[1];\n\n\t // Generate four subvectors\n\t var i0 = (((IV_0 << 8) | (IV_0 >>> 24)) & 0x00ff00ff) | (((IV_0 << 24) | (IV_0 >>> 8)) & 0xff00ff00);\n\t var i2 = (((IV_1 << 8) | (IV_1 >>> 24)) & 0x00ff00ff) | (((IV_1 << 24) | (IV_1 >>> 8)) & 0xff00ff00);\n\t var i1 = (i0 >>> 16) | (i2 & 0xffff0000);\n\t var i3 = (i2 << 16) | (i0 & 0x0000ffff);\n\n\t // Modify counter values\n\t C[0] ^= i0;\n\t C[1] ^= i1;\n\t C[2] ^= i2;\n\t C[3] ^= i3;\n\t C[4] ^= i0;\n\t C[5] ^= i1;\n\t C[6] ^= i2;\n\t C[7] ^= i3;\n\n\t // Iterate the system four times\n\t for (var i = 0; i < 4; i++) {\n\t nextState.call(this);\n\t }\n\t }\n\t },\n\n\t _doProcessBlock: function (M, offset) {\n\t // Shortcut\n\t var X = this._X;\n\n\t // Iterate the system\n\t nextState.call(this);\n\n\t // Generate four keystream words\n\t S[0] = X[0] ^ (X[5] >>> 16) ^ (X[3] << 16);\n\t S[1] = X[2] ^ (X[7] >>> 16) ^ (X[5] << 16);\n\t S[2] = X[4] ^ (X[1] >>> 16) ^ (X[7] << 16);\n\t S[3] = X[6] ^ (X[3] >>> 16) ^ (X[1] << 16);\n\n\t for (var i = 0; i < 4; i++) {\n\t // Swap endian\n\t S[i] = (((S[i] << 8) | (S[i] >>> 24)) & 0x00ff00ff) |\n\t (((S[i] << 24) | (S[i] >>> 8)) & 0xff00ff00);\n\n\t // Encrypt\n\t M[offset + i] ^= S[i];\n\t }\n\t },\n\n\t blockSize: 128/32,\n\n\t ivSize: 64/32\n\t });\n\n\t function nextState() {\n\t // Shortcuts\n\t var X = this._X;\n\t var C = this._C;\n\n\t // Save old counter values\n\t for (var i = 0; i < 8; i++) {\n\t C_[i] = C[i];\n\t }\n\n\t // Calculate new counter values\n\t C[0] = (C[0] + 0x4d34d34d + this._b) | 0;\n\t C[1] = (C[1] + 0xd34d34d3 + ((C[0] >>> 0) < (C_[0] >>> 0) ? 1 : 0)) | 0;\n\t C[2] = (C[2] + 0x34d34d34 + ((C[1] >>> 0) < (C_[1] >>> 0) ? 1 : 0)) | 0;\n\t C[3] = (C[3] + 0x4d34d34d + ((C[2] >>> 0) < (C_[2] >>> 0) ? 1 : 0)) | 0;\n\t C[4] = (C[4] + 0xd34d34d3 + ((C[3] >>> 0) < (C_[3] >>> 0) ? 1 : 0)) | 0;\n\t C[5] = (C[5] + 0x34d34d34 + ((C[4] >>> 0) < (C_[4] >>> 0) ? 1 : 0)) | 0;\n\t C[6] = (C[6] + 0x4d34d34d + ((C[5] >>> 0) < (C_[5] >>> 0) ? 1 : 0)) | 0;\n\t C[7] = (C[7] + 0xd34d34d3 + ((C[6] >>> 0) < (C_[6] >>> 0) ? 1 : 0)) | 0;\n\t this._b = (C[7] >>> 0) < (C_[7] >>> 0) ? 1 : 0;\n\n\t // Calculate the g-values\n\t for (var i = 0; i < 8; i++) {\n\t var gx = X[i] + C[i];\n\n\t // Construct high and low argument for squaring\n\t var ga = gx & 0xffff;\n\t var gb = gx >>> 16;\n\n\t // Calculate high and low result of squaring\n\t var gh = ((((ga * ga) >>> 17) + ga * gb) >>> 15) + gb * gb;\n\t var gl = (((gx & 0xffff0000) * gx) | 0) + (((gx & 0x0000ffff) * gx) | 0);\n\n\t // High XOR low\n\t G[i] = gh ^ gl;\n\t }\n\n\t // Calculate new state values\n\t X[0] = (G[0] + ((G[7] << 16) | (G[7] >>> 16)) + ((G[6] << 16) | (G[6] >>> 16))) | 0;\n\t X[1] = (G[1] + ((G[0] << 8) | (G[0] >>> 24)) + G[7]) | 0;\n\t X[2] = (G[2] + ((G[1] << 16) | (G[1] >>> 16)) + ((G[0] << 16) | (G[0] >>> 16))) | 0;\n\t X[3] = (G[3] + ((G[2] << 8) | (G[2] >>> 24)) + G[1]) | 0;\n\t X[4] = (G[4] + ((G[3] << 16) | (G[3] >>> 16)) + ((G[2] << 16) | (G[2] >>> 16))) | 0;\n\t X[5] = (G[5] + ((G[4] << 8) | (G[4] >>> 24)) + G[3]) | 0;\n\t X[6] = (G[6] + ((G[5] << 16) | (G[5] >>> 16)) + ((G[4] << 16) | (G[4] >>> 16))) | 0;\n\t X[7] = (G[7] + ((G[6] << 8) | (G[6] >>> 24)) + G[5]) | 0;\n\t }\n\n\t /**\n\t * Shortcut functions to the cipher's object interface.\n\t *\n\t * @example\n\t *\n\t * var ciphertext = CryptoJS.RabbitLegacy.encrypt(message, key, cfg);\n\t * var plaintext = CryptoJS.RabbitLegacy.decrypt(ciphertext, key, cfg);\n\t */\n\t C.RabbitLegacy = StreamCipher._createHelper(RabbitLegacy);\n\t}());\n\n\n\treturn CryptoJS.RabbitLegacy;\n\n}));//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMjI2OTYuanMiLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBUUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vaXRnLW5leHRnZW4tZnJvbnRlbmQvLi9ub2RlX21vZHVsZXMvY3J5cHRvLWpzL3JhYmJpdC1sZWdhY3kuanM/M2Q1YSJdLCJzb3VyY2VzQ29udGVudCI6WyI7KGZ1bmN0aW9uIChyb290LCBmYWN0b3J5LCB1bmRlZikge1xuXHRpZiAodHlwZW9mIGV4cG9ydHMgPT09IFwib2JqZWN0XCIpIHtcblx0XHQvLyBDb21tb25KU1xuXHRcdG1vZHVsZS5leHBvcnRzID0gZXhwb3J0cyA9IGZhY3RvcnkocmVxdWlyZShcIi4vY29yZVwiKSwgcmVxdWlyZShcIi4vZW5jLWJhc2U2NFwiKSwgcmVxdWlyZShcIi4vbWQ1XCIpLCByZXF1aXJlKFwiLi9ldnBrZGZcIiksIHJlcXVpcmUoXCIuL2NpcGhlci1jb3JlXCIpKTtcblx0fVxuXHRlbHNlIGlmICh0eXBlb2YgZGVmaW5lID09PSBcImZ1bmN0aW9uXCIgJiYgZGVmaW5lLmFtZCkge1xuXHRcdC8vIEFNRFxuXHRcdGRlZmluZShbXCIuL2NvcmVcIiwgXCIuL2VuYy1iYXNlNjRcIiwgXCIuL21kNVwiLCBcIi4vZXZwa2RmXCIsIFwiLi9jaXBoZXItY29yZVwiXSwgZmFjdG9yeSk7XG5cdH1cblx0ZWxzZSB7XG5cdFx0Ly8gR2xvYmFsIChicm93c2VyKVxuXHRcdGZhY3Rvcnkocm9vdC5DcnlwdG9KUyk7XG5cdH1cbn0odGhpcywgZnVuY3Rpb24gKENyeXB0b0pTKSB7XG5cblx0KGZ1bmN0aW9uICgpIHtcblx0ICAgIC8vIFNob3J0Y3V0c1xuXHQgICAgdmFyIEMgPSBDcnlwdG9KUztcblx0ICAgIHZhciBDX2xpYiA9IEMubGliO1xuXHQgICAgdmFyIFN0cmVhbUNpcGhlciA9IENfbGliLlN0cmVhbUNpcGhlcjtcblx0ICAgIHZhciBDX2FsZ28gPSBDLmFsZ287XG5cblx0ICAgIC8vIFJldXNhYmxlIG9iamVjdHNcblx0ICAgIHZhciBTICA9IFtdO1xuXHQgICAgdmFyIENfID0gW107XG5cdCAgICB2YXIgRyAgPSBbXTtcblxuXHQgICAgLyoqXG5cdCAgICAgKiBSYWJiaXQgc3RyZWFtIGNpcGhlciBhbGdvcml0aG0uXG5cdCAgICAgKlxuXHQgICAgICogVGhpcyBpcyBhIGxlZ2FjeSB2ZXJzaW9uIHRoYXQgbmVnbGVjdGVkIHRvIGNvbnZlcnQgdGhlIGtleSB0byBsaXR0bGUtZW5kaWFuLlxuXHQgICAgICogVGhpcyBlcnJvciBkb2Vzbid0IGFmZmVjdCB0aGUgY2lwaGVyJ3Mgc2VjdXJpdHksXG5cdCAgICAgKiBidXQgaXQgZG9lcyBhZmZlY3QgaXRzIGNvbXBhdGliaWxpdHkgd2l0aCBvdGhlciBpbXBsZW1lbnRhdGlvbnMuXG5cdCAgICAgKi9cblx0ICAgIHZhciBSYWJiaXRMZWdhY3kgPSBDX2FsZ28uUmFiYml0TGVnYWN5ID0gU3RyZWFtQ2lwaGVyLmV4dGVuZCh7XG5cdCAgICAgICAgX2RvUmVzZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgLy8gU2hvcnRjdXRzXG5cdCAgICAgICAgICAgIHZhciBLID0gdGhpcy5fa2V5LndvcmRzO1xuXHQgICAgICAgICAgICB2YXIgaXYgPSB0aGlzLmNmZy5pdjtcblxuXHQgICAgICAgICAgICAvLyBHZW5lcmF0ZSBpbml0aWFsIHN0YXRlIHZhbHVlc1xuXHQgICAgICAgICAgICB2YXIgWCA9IHRoaXMuX1ggPSBbXG5cdCAgICAgICAgICAgICAgICBLWzBdLCAoS1szXSA8PCAxNikgfCAoS1syXSA+Pj4gMTYpLFxuXHQgICAgICAgICAgICAgICAgS1sxXSwgKEtbMF0gPDwgMTYpIHwgKEtbM10gPj4+IDE2KSxcblx0ICAgICAgICAgICAgICAgIEtbMl0sIChLWzFdIDw8IDE2KSB8IChLWzBdID4+PiAxNiksXG5cdCAgICAgICAgICAgICAgICBLWzNdLCAoS1syXSA8PCAxNikgfCAoS1sxXSA+Pj4gMTYpXG5cdCAgICAgICAgICAgIF07XG5cblx0ICAgICAgICAgICAgLy8gR2VuZXJhdGUgaW5pdGlhbCBjb3VudGVyIHZhbHVlc1xuXHQgICAgICAgICAgICB2YXIgQyA9IHRoaXMuX0MgPSBbXG5cdCAgICAgICAgICAgICAgICAoS1syXSA8PCAxNikgfCAoS1syXSA+Pj4gMTYpLCAoS1swXSAmIDB4ZmZmZjAwMDApIHwgKEtbMV0gJiAweDAwMDBmZmZmKSxcblx0ICAgICAgICAgICAgICAgIChLWzNdIDw8IDE2KSB8IChLWzNdID4+PiAxNiksIChLWzFdICYgMHhmZmZmMDAwMCkgfCAoS1syXSAmIDB4MDAwMGZmZmYpLFxuXHQgICAgICAgICAgICAgICAgKEtbMF0gPDwgMTYpIHwgKEtbMF0gPj4+IDE2KSwgKEtbMl0gJiAweGZmZmYwMDAwKSB8IChLWzNdICYgMHgwMDAwZmZmZiksXG5cdCAgICAgICAgICAgICAgICAoS1sxXSA8PCAxNikgfCAoS1sxXSA+Pj4gMTYpLCAoS1szXSAmIDB4ZmZmZjAwMDApIHwgKEtbMF0gJiAweDAwMDBmZmZmKVxuXHQgICAgICAgICAgICBdO1xuXG5cdCAgICAgICAgICAgIC8vIENhcnJ5IGJpdFxuXHQgICAgICAgICAgICB0aGlzLl9iID0gMDtcblxuXHQgICAgICAgICAgICAvLyBJdGVyYXRlIHRoZSBzeXN0ZW0gZm91ciB0aW1lc1xuXHQgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IDQ7IGkrKykge1xuXHQgICAgICAgICAgICAgICAgbmV4dFN0YXRlLmNhbGwodGhpcyk7XG5cdCAgICAgICAgICAgIH1cblxuXHQgICAgICAgICAgICAvLyBNb2RpZnkgdGhlIGNvdW50ZXJzXG5cdCAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgODsgaSsrKSB7XG5cdCAgICAgICAgICAgICAgICBDW2ldIF49IFhbKGkgKyA0KSAmIDddO1xuXHQgICAgICAgICAgICB9XG5cblx0ICAgICAgICAgICAgLy8gSVYgc2V0dXBcblx0ICAgICAgICAgICAgaWYgKGl2KSB7XG5cdCAgICAgICAgICAgICAgICAvLyBTaG9ydGN1dHNcblx0ICAgICAgICAgICAgICAgIHZhciBJViA9IGl2LndvcmRzO1xuXHQgICAgICAgICAgICAgICAgdmFyIElWXzAgPSBJVlswXTtcblx0ICAgICAgICAgICAgICAgIHZhciBJVl8xID0gSVZbMV07XG5cblx0ICAgICAgICAgICAgICAgIC8vIEdlbmVyYXRlIGZvdXIgc3VidmVjdG9yc1xuXHQgICAgICAgICAgICAgICAgdmFyIGkwID0gKCgoSVZfMCA8PCA4KSB8IChJVl8wID4+PiAyNCkpICYgMHgwMGZmMDBmZikgfCAoKChJVl8wIDw8IDI0KSB8IChJVl8wID4+PiA4KSkgJiAweGZmMDBmZjAwKTtcblx0ICAgICAgICAgICAgICAgIHZhciBpMiA9ICgoKElWXzEgPDwgOCkgfCAoSVZfMSA+Pj4gMjQpKSAmIDB4MDBmZjAwZmYpIHwgKCgoSVZfMSA8PCAyNCkgfCAoSVZfMSA+Pj4gOCkpICYgMHhmZjAwZmYwMCk7XG5cdCAgICAgICAgICAgICAgICB2YXIgaTEgPSAoaTAgPj4+IDE2KSB8IChpMiAmIDB4ZmZmZjAwMDApO1xuXHQgICAgICAgICAgICAgICAgdmFyIGkzID0gKGkyIDw8IDE2KSAgfCAoaTAgJiAweDAwMDBmZmZmKTtcblxuXHQgICAgICAgICAgICAgICAgLy8gTW9kaWZ5IGNvdW50ZXIgdmFsdWVzXG5cdCAgICAgICAgICAgICAgICBDWzBdIF49IGkwO1xuXHQgICAgICAgICAgICAgICAgQ1sxXSBePSBpMTtcblx0ICAgICAgICAgICAgICAgIENbMl0gXj0gaTI7XG5cdCAgICAgICAgICAgICAgICBDWzNdIF49IGkzO1xuXHQgICAgICAgICAgICAgICAgQ1s0XSBePSBpMDtcblx0ICAgICAgICAgICAgICAgIENbNV0gXj0gaTE7XG5cdCAgICAgICAgICAgICAgICBDWzZdIF49IGkyO1xuXHQgICAgICAgICAgICAgICAgQ1s3XSBePSBpMztcblxuXHQgICAgICAgICAgICAgICAgLy8gSXRlcmF0ZSB0aGUgc3lzdGVtIGZvdXIgdGltZXNcblx0ICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgNDsgaSsrKSB7XG5cdCAgICAgICAgICAgICAgICAgICAgbmV4dFN0YXRlLmNhbGwodGhpcyk7XG5cdCAgICAgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICB9LFxuXG5cdCAgICAgICAgX2RvUHJvY2Vzc0Jsb2NrOiBmdW5jdGlvbiAoTSwgb2Zmc2V0KSB7XG5cdCAgICAgICAgICAgIC8vIFNob3J0Y3V0XG5cdCAgICAgICAgICAgIHZhciBYID0gdGhpcy5fWDtcblxuXHQgICAgICAgICAgICAvLyBJdGVyYXRlIHRoZSBzeXN0ZW1cblx0ICAgICAgICAgICAgbmV4dFN0YXRlLmNhbGwodGhpcyk7XG5cblx0ICAgICAgICAgICAgLy8gR2VuZXJhdGUgZm91ciBrZXlzdHJlYW0gd29yZHNcblx0ICAgICAgICAgICAgU1swXSA9IFhbMF0gXiAoWFs1XSA+Pj4gMTYpIF4gKFhbM10gPDwgMTYpO1xuXHQgICAgICAgICAgICBTWzFdID0gWFsyXSBeIChYWzddID4+PiAxNikgXiAoWFs1XSA8PCAxNik7XG5cdCAgICAgICAgICAgIFNbMl0gPSBYWzRdIF4gKFhbMV0gPj4+IDE2KSBeIChYWzddIDw8IDE2KTtcblx0ICAgICAgICAgICAgU1szXSA9IFhbNl0gXiAoWFszXSA+Pj4gMTYpIF4gKFhbMV0gPDwgMTYpO1xuXG5cdCAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgNDsgaSsrKSB7XG5cdCAgICAgICAgICAgICAgICAvLyBTd2FwIGVuZGlhblxuXHQgICAgICAgICAgICAgICAgU1tpXSA9ICgoKFNbaV0gPDwgOCkgIHwgKFNbaV0gPj4+IDI0KSkgJiAweDAwZmYwMGZmKSB8XG5cdCAgICAgICAgICAgICAgICAgICAgICAgKCgoU1tpXSA8PCAyNCkgfCAoU1tpXSA+Pj4gOCkpICAmIDB4ZmYwMGZmMDApO1xuXG5cdCAgICAgICAgICAgICAgICAvLyBFbmNyeXB0XG5cdCAgICAgICAgICAgICAgICBNW29mZnNldCArIGldIF49IFNbaV07XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICB9LFxuXG5cdCAgICAgICAgYmxvY2tTaXplOiAxMjgvMzIsXG5cblx0ICAgICAgICBpdlNpemU6IDY0LzMyXG5cdCAgICB9KTtcblxuXHQgICAgZnVuY3Rpb24gbmV4dFN0YXRlKCkge1xuXHQgICAgICAgIC8vIFNob3J0Y3V0c1xuXHQgICAgICAgIHZhciBYID0gdGhpcy5fWDtcblx0ICAgICAgICB2YXIgQyA9IHRoaXMuX0M7XG5cblx0ICAgICAgICAvLyBTYXZlIG9sZCBjb3VudGVyIHZhbHVlc1xuXHQgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgODsgaSsrKSB7XG5cdCAgICAgICAgICAgIENfW2ldID0gQ1tpXTtcblx0ICAgICAgICB9XG5cblx0ICAgICAgICAvLyBDYWxjdWxhdGUgbmV3IGNvdW50ZXIgdmFsdWVzXG5cdCAgICAgICAgQ1swXSA9IChDWzBdICsgMHg0ZDM0ZDM0ZCArIHRoaXMuX2IpIHwgMDtcblx0ICAgICAgICBDWzFdID0gKENbMV0gKyAweGQzNGQzNGQzICsgKChDWzBdID4+PiAwKSA8IChDX1swXSA+Pj4gMCkgPyAxIDogMCkpIHwgMDtcblx0ICAgICAgICBDWzJdID0gKENbMl0gKyAweDM0ZDM0ZDM0ICsgKChDWzFdID4+PiAwKSA8IChDX1sxXSA+Pj4gMCkgPyAxIDogMCkpIHwgMDtcblx0ICAgICAgICBDWzNdID0gKENbM10gKyAweDRkMzRkMzRkICsgKChDWzJdID4+PiAwKSA8IChDX1syXSA+Pj4gMCkgPyAxIDogMCkpIHwgMDtcblx0ICAgICAgICBDWzRdID0gKENbNF0gKyAweGQzNGQzNGQzICsgKChDWzNdID4+PiAwKSA8IChDX1szXSA+Pj4gMCkgPyAxIDogMCkpIHwgMDtcblx0ICAgICAgICBDWzVdID0gKENbNV0gKyAweDM0ZDM0ZDM0ICsgKChDWzRdID4+PiAwKSA8IChDX1s0XSA+Pj4gMCkgPyAxIDogMCkpIHwgMDtcblx0ICAgICAgICBDWzZdID0gKENbNl0gKyAweDRkMzRkMzRkICsgKChDWzVdID4+PiAwKSA8IChDX1s1XSA+Pj4gMCkgPyAxIDogMCkpIHwgMDtcblx0ICAgICAgICBDWzddID0gKENbN10gKyAweGQzNGQzNGQzICsgKChDWzZdID4+PiAwKSA8IChDX1s2XSA+Pj4gMCkgPyAxIDogMCkpIHwgMDtcblx0ICAgICAgICB0aGlzLl9iID0gKENbN10gPj4+IDApIDwgKENfWzddID4+PiAwKSA/IDEgOiAwO1xuXG5cdCAgICAgICAgLy8gQ2FsY3VsYXRlIHRoZSBnLXZhbHVlc1xuXHQgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgODsgaSsrKSB7XG5cdCAgICAgICAgICAgIHZhciBneCA9IFhbaV0gKyBDW2ldO1xuXG5cdCAgICAgICAgICAgIC8vIENvbnN0cnVjdCBoaWdoIGFuZCBsb3cgYXJndW1lbnQgZm9yIHNxdWFyaW5nXG5cdCAgICAgICAgICAgIHZhciBnYSA9IGd4ICYgMHhmZmZmO1xuXHQgICAgICAgICAgICB2YXIgZ2IgPSBneCA+Pj4gMTY7XG5cblx0ICAgICAgICAgICAgLy8gQ2FsY3VsYXRlIGhpZ2ggYW5kIGxvdyByZXN1bHQgb2Ygc3F1YXJpbmdcblx0ICAgICAgICAgICAgdmFyIGdoID0gKCgoKGdhICogZ2EpID4+PiAxNykgKyBnYSAqIGdiKSA+Pj4gMTUpICsgZ2IgKiBnYjtcblx0ICAgICAgICAgICAgdmFyIGdsID0gKCgoZ3ggJiAweGZmZmYwMDAwKSAqIGd4KSB8IDApICsgKCgoZ3ggJiAweDAwMDBmZmZmKSAqIGd4KSB8IDApO1xuXG5cdCAgICAgICAgICAgIC8vIEhpZ2ggWE9SIGxvd1xuXHQgICAgICAgICAgICBHW2ldID0gZ2ggXiBnbDtcblx0ICAgICAgICB9XG5cblx0ICAgICAgICAvLyBDYWxjdWxhdGUgbmV3IHN0YXRlIHZhbHVlc1xuXHQgICAgICAgIFhbMF0gPSAoR1swXSArICgoR1s3XSA8PCAxNikgfCAoR1s3XSA+Pj4gMTYpKSArICgoR1s2XSA8PCAxNikgfCAoR1s2XSA+Pj4gMTYpKSkgfCAwO1xuXHQgICAgICAgIFhbMV0gPSAoR1sxXSArICgoR1swXSA8PCA4KSAgfCAoR1swXSA+Pj4gMjQpKSArIEdbN10pIHwgMDtcblx0ICAgICAgICBYWzJdID0gKEdbMl0gKyAoKEdbMV0gPDwgMTYpIHwgKEdbMV0gPj4+IDE2KSkgKyAoKEdbMF0gPDwgMTYpIHwgKEdbMF0gPj4+IDE2KSkpIHwgMDtcblx0ICAgICAgICBYWzNdID0gKEdbM10gKyAoKEdbMl0gPDwgOCkgIHwgKEdbMl0gPj4+IDI0KSkgKyBHWzFdKSB8IDA7XG5cdCAgICAgICAgWFs0XSA9IChHWzRdICsgKChHWzNdIDw8IDE2KSB8IChHWzNdID4+PiAxNikpICsgKChHWzJdIDw8IDE2KSB8IChHWzJdID4+PiAxNikpKSB8IDA7XG5cdCAgICAgICAgWFs1XSA9IChHWzVdICsgKChHWzRdIDw8IDgpICB8IChHWzRdID4+PiAyNCkpICsgR1szXSkgfCAwO1xuXHQgICAgICAgIFhbNl0gPSAoR1s2XSArICgoR1s1XSA8PCAxNikgfCAoR1s1XSA+Pj4gMTYpKSArICgoR1s0XSA8PCAxNikgfCAoR1s0XSA+Pj4gMTYpKSkgfCAwO1xuXHQgICAgICAgIFhbN10gPSAoR1s3XSArICgoR1s2XSA8PCA4KSAgfCAoR1s2XSA+Pj4gMjQpKSArIEdbNV0pIHwgMDtcblx0ICAgIH1cblxuXHQgICAgLyoqXG5cdCAgICAgKiBTaG9ydGN1dCBmdW5jdGlvbnMgdG8gdGhlIGNpcGhlcidzIG9iamVjdCBpbnRlcmZhY2UuXG5cdCAgICAgKlxuXHQgICAgICogQGV4YW1wbGVcblx0ICAgICAqXG5cdCAgICAgKiAgICAgdmFyIGNpcGhlcnRleHQgPSBDcnlwdG9KUy5SYWJiaXRMZWdhY3kuZW5jcnlwdChtZXNzYWdlLCBrZXksIGNmZyk7XG5cdCAgICAgKiAgICAgdmFyIHBsYWludGV4dCAgPSBDcnlwdG9KUy5SYWJiaXRMZWdhY3kuZGVjcnlwdChjaXBoZXJ0ZXh0LCBrZXksIGNmZyk7XG5cdCAgICAgKi9cblx0ICAgIEMuUmFiYml0TGVnYWN5ID0gU3RyZWFtQ2lwaGVyLl9jcmVhdGVIZWxwZXIoUmFiYml0TGVnYWN5KTtcblx0fSgpKTtcblxuXG5cdHJldHVybiBDcnlwdG9KUy5SYWJiaXRMZWdhY3k7XG5cbn0pKTsiXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///22696\n")},22794:(I,g,t)=>{"use strict";I.exports=t.p+"26356e88a338b7466920.png"},22835:(I,g,t)=>{"use strict";I.exports=t.p+"12fabc43618de99fcf04.png"},23082:(I,g,t)=>{"use strict";I.exports=t.p+"8d9c6046b4972b83c4dc.png"},23096:(I,g,t)=>{"use strict";I.exports=t.p+"6b6f7ed6fa57632dda3d.png"},23100:(I,g,t)=>{"use strict";I.exports=t.p+"b26f7e81545d742f54a3.png"},23214:(I,g,t)=>{"use strict";I.exports=t.p+"f55f9b6cc2422e7e8eb1.png"},23827:function(__unused_webpack_module,__unused_webpack_exports,__webpack_require__){eval("//! moment.js locale configuration\n//! locale : Japanese [ja]\n//! author : LI Long : https://github.com/baryon\n\n;(function (global, factory) {\n true ? factory(__webpack_require__(95093)) :\n 0\n}(this, (function (moment) { 'use strict';\n\n //! moment.js locale configuration\n\n var ja = moment.defineLocale('ja', {\n eras: [\n {\n since: '2019-05-01',\n offset: 1,\n name: '令和',\n narrow: '㋿',\n abbr: 'R',\n },\n {\n since: '1989-01-08',\n until: '2019-04-30',\n offset: 1,\n name: '平成',\n narrow: '㍻',\n abbr: 'H',\n },\n {\n since: '1926-12-25',\n until: '1989-01-07',\n offset: 1,\n name: '昭和',\n narrow: '㍼',\n abbr: 'S',\n },\n {\n since: '1912-07-30',\n until: '1926-12-24',\n offset: 1,\n name: '大正',\n narrow: '㍽',\n abbr: 'T',\n },\n {\n since: '1873-01-01',\n until: '1912-07-29',\n offset: 6,\n name: '明治',\n narrow: '㍾',\n abbr: 'M',\n },\n {\n since: '0001-01-01',\n until: '1873-12-31',\n offset: 1,\n name: '西暦',\n narrow: 'AD',\n abbr: 'AD',\n },\n {\n since: '0000-12-31',\n until: -Infinity,\n offset: 1,\n name: '紀元前',\n narrow: 'BC',\n abbr: 'BC',\n },\n ],\n eraYearOrdinalRegex: /(元|\\d+)年/,\n eraYearOrdinalParse: function (input, match) {\n return match[1] === '元' ? 1 : parseInt(match[1] || input, 10);\n },\n months: '1月_2月_3月_4月_5月_6月_7月_8月_9月_10月_11月_12月'.split('_'),\n monthsShort: '1月_2月_3月_4月_5月_6月_7月_8月_9月_10月_11月_12月'.split(\n '_'\n ),\n weekdays: '日曜日_月曜日_火曜日_水曜日_木曜日_金曜日_土曜日'.split('_'),\n weekdaysShort: '日_月_火_水_木_金_土'.split('_'),\n weekdaysMin: '日_月_火_水_木_金_土'.split('_'),\n longDateFormat: {\n LT: 'HH:mm',\n LTS: 'HH:mm:ss',\n L: 'YYYY/MM/DD',\n LL: 'YYYY年M月D日',\n LLL: 'YYYY年M月D日 HH:mm',\n LLLL: 'YYYY年M月D日 dddd HH:mm',\n l: 'YYYY/MM/DD',\n ll: 'YYYY年M月D日',\n lll: 'YYYY年M月D日 HH:mm',\n llll: 'YYYY年M月D日(ddd) HH:mm',\n },\n meridiemParse: /午前|午後/i,\n isPM: function (input) {\n return input === '午後';\n },\n meridiem: function (hour, minute, isLower) {\n if (hour < 12) {\n return '午前';\n } else {\n return '午後';\n }\n },\n calendar: {\n sameDay: '[今日] LT',\n nextDay: '[明日] LT',\n nextWeek: function (now) {\n if (now.week() !== this.week()) {\n return '[来週]dddd LT';\n } else {\n return 'dddd LT';\n }\n },\n lastDay: '[昨日] LT',\n lastWeek: function (now) {\n if (this.week() !== now.week()) {\n return '[先週]dddd LT';\n } else {\n return 'dddd LT';\n }\n },\n sameElse: 'L',\n },\n dayOfMonthOrdinalParse: /\\d{1,2}日/,\n ordinal: function (number, period) {\n switch (period) {\n case 'y':\n return number === 1 ? '元年' : number + '年';\n case 'd':\n case 'D':\n case 'DDD':\n return number + '日';\n default:\n return number;\n }\n },\n relativeTime: {\n future: '%s後',\n past: '%s前',\n s: '数秒',\n ss: '%d秒',\n m: '1分',\n mm: '%d分',\n h: '1時間',\n hh: '%d時間',\n d: '1日',\n dd: '%d日',\n M: '1ヶ月',\n MM: '%dヶ月',\n y: '1年',\n yy: '%d年',\n },\n });\n\n return ja;\n\n})));\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMjM4MjcuanMiLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9pdGctbmV4dGdlbi1mcm9udGVuZC8uL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL2phLmpzPzA3OWUiXSwic291cmNlc0NvbnRlbnQiOlsiLy8hIG1vbWVudC5qcyBsb2NhbGUgY29uZmlndXJhdGlvblxuLy8hIGxvY2FsZSA6IEphcGFuZXNlIFtqYV1cbi8vISBhdXRob3IgOiBMSSBMb25nIDogaHR0cHM6Ly9naXRodWIuY29tL2JhcnlvblxuXG47KGZ1bmN0aW9uIChnbG9iYWwsIGZhY3RvcnkpIHtcbiAgIHR5cGVvZiBleHBvcnRzID09PSAnb2JqZWN0JyAmJiB0eXBlb2YgbW9kdWxlICE9PSAndW5kZWZpbmVkJ1xuICAgICAgICYmIHR5cGVvZiByZXF1aXJlID09PSAnZnVuY3Rpb24nID8gZmFjdG9yeShyZXF1aXJlKCcuLi9tb21lbnQnKSkgOlxuICAgdHlwZW9mIGRlZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiBkZWZpbmUuYW1kID8gZGVmaW5lKFsnLi4vbW9tZW50J10sIGZhY3RvcnkpIDpcbiAgIGZhY3RvcnkoZ2xvYmFsLm1vbWVudClcbn0odGhpcywgKGZ1bmN0aW9uIChtb21lbnQpIHsgJ3VzZSBzdHJpY3QnO1xuXG4gICAgLy8hIG1vbWVudC5qcyBsb2NhbGUgY29uZmlndXJhdGlvblxuXG4gICAgdmFyIGphID0gbW9tZW50LmRlZmluZUxvY2FsZSgnamEnLCB7XG4gICAgICAgIGVyYXM6IFtcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBzaW5jZTogJzIwMTktMDUtMDEnLFxuICAgICAgICAgICAgICAgIG9mZnNldDogMSxcbiAgICAgICAgICAgICAgICBuYW1lOiAn5Luk5ZKMJyxcbiAgICAgICAgICAgICAgICBuYXJyb3c6ICfji78nLFxuICAgICAgICAgICAgICAgIGFiYnI6ICdSJyxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgc2luY2U6ICcxOTg5LTAxLTA4JyxcbiAgICAgICAgICAgICAgICB1bnRpbDogJzIwMTktMDQtMzAnLFxuICAgICAgICAgICAgICAgIG9mZnNldDogMSxcbiAgICAgICAgICAgICAgICBuYW1lOiAn5bmz5oiQJyxcbiAgICAgICAgICAgICAgICBuYXJyb3c6ICfjjbsnLFxuICAgICAgICAgICAgICAgIGFiYnI6ICdIJyxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgc2luY2U6ICcxOTI2LTEyLTI1JyxcbiAgICAgICAgICAgICAgICB1bnRpbDogJzE5ODktMDEtMDcnLFxuICAgICAgICAgICAgICAgIG9mZnNldDogMSxcbiAgICAgICAgICAgICAgICBuYW1lOiAn5pit5ZKMJyxcbiAgICAgICAgICAgICAgICBuYXJyb3c6ICfjjbwnLFxuICAgICAgICAgICAgICAgIGFiYnI6ICdTJyxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgc2luY2U6ICcxOTEyLTA3LTMwJyxcbiAgICAgICAgICAgICAgICB1bnRpbDogJzE5MjYtMTItMjQnLFxuICAgICAgICAgICAgICAgIG9mZnNldDogMSxcbiAgICAgICAgICAgICAgICBuYW1lOiAn5aSn5q2jJyxcbiAgICAgICAgICAgICAgICBuYXJyb3c6ICfjjb0nLFxuICAgICAgICAgICAgICAgIGFiYnI6ICdUJyxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgc2luY2U6ICcxODczLTAxLTAxJyxcbiAgICAgICAgICAgICAgICB1bnRpbDogJzE5MTItMDctMjknLFxuICAgICAgICAgICAgICAgIG9mZnNldDogNixcbiAgICAgICAgICAgICAgICBuYW1lOiAn5piO5rK7JyxcbiAgICAgICAgICAgICAgICBuYXJyb3c6ICfjjb4nLFxuICAgICAgICAgICAgICAgIGFiYnI6ICdNJyxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgc2luY2U6ICcwMDAxLTAxLTAxJyxcbiAgICAgICAgICAgICAgICB1bnRpbDogJzE4NzMtMTItMzEnLFxuICAgICAgICAgICAgICAgIG9mZnNldDogMSxcbiAgICAgICAgICAgICAgICBuYW1lOiAn6KW/5pqmJyxcbiAgICAgICAgICAgICAgICBuYXJyb3c6ICdBRCcsXG4gICAgICAgICAgICAgICAgYWJicjogJ0FEJyxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgc2luY2U6ICcwMDAwLTEyLTMxJyxcbiAgICAgICAgICAgICAgICB1bnRpbDogLUluZmluaXR5LFxuICAgICAgICAgICAgICAgIG9mZnNldDogMSxcbiAgICAgICAgICAgICAgICBuYW1lOiAn57SA5YWD5YmNJyxcbiAgICAgICAgICAgICAgICBuYXJyb3c6ICdCQycsXG4gICAgICAgICAgICAgICAgYWJicjogJ0JDJyxcbiAgICAgICAgICAgIH0sXG4gICAgICAgIF0sXG4gICAgICAgIGVyYVllYXJPcmRpbmFsUmVnZXg6IC8o5YWDfFxcZCsp5bm0LyxcbiAgICAgICAgZXJhWWVhck9yZGluYWxQYXJzZTogZnVuY3Rpb24gKGlucHV0LCBtYXRjaCkge1xuICAgICAgICAgICAgcmV0dXJuIG1hdGNoWzFdID09PSAn5YWDJyA/IDEgOiBwYXJzZUludChtYXRjaFsxXSB8fCBpbnB1dCwgMTApO1xuICAgICAgICB9LFxuICAgICAgICBtb250aHM6ICcx5pyIXzLmnIhfM+aciF805pyIXzXmnIhfNuaciF835pyIXzjmnIhfOeaciF8xMOaciF8xMeaciF8xMuaciCcuc3BsaXQoJ18nKSxcbiAgICAgICAgbW9udGhzU2hvcnQ6ICcx5pyIXzLmnIhfM+aciF805pyIXzXmnIhfNuaciF835pyIXzjmnIhfOeaciF8xMOaciF8xMeaciF8xMuaciCcuc3BsaXQoXG4gICAgICAgICAgICAnXydcbiAgICAgICAgKSxcbiAgICAgICAgd2Vla2RheXM6ICfml6Xmm5zml6Vf5pyI5puc5pelX+eBq+abnOaXpV/msLTmm5zml6Vf5pyo5puc5pelX+mHkeabnOaXpV/lnJ/mm5zml6UnLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzU2hvcnQ6ICfml6Vf5pyIX+eBq1/msLRf5pyoX+mHkV/lnJ8nLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzTWluOiAn5pelX+aciF/ngatf5rC0X+acqF/ph5Ff5ZyfJy5zcGxpdCgnXycpLFxuICAgICAgICBsb25nRGF0ZUZvcm1hdDoge1xuICAgICAgICAgICAgTFQ6ICdISDptbScsXG4gICAgICAgICAgICBMVFM6ICdISDptbTpzcycsXG4gICAgICAgICAgICBMOiAnWVlZWS9NTS9ERCcsXG4gICAgICAgICAgICBMTDogJ1lZWVnlubRN5pyIROaXpScsXG4gICAgICAgICAgICBMTEw6ICdZWVlZ5bm0TeaciETml6UgSEg6bW0nLFxuICAgICAgICAgICAgTExMTDogJ1lZWVnlubRN5pyIROaXpSBkZGRkIEhIOm1tJyxcbiAgICAgICAgICAgIGw6ICdZWVlZL01NL0REJyxcbiAgICAgICAgICAgIGxsOiAnWVlZWeW5tE3mnIhE5pelJyxcbiAgICAgICAgICAgIGxsbDogJ1lZWVnlubRN5pyIROaXpSBISDptbScsXG4gICAgICAgICAgICBsbGxsOiAnWVlZWeW5tE3mnIhE5pelKGRkZCkgSEg6bW0nLFxuICAgICAgICB9LFxuICAgICAgICBtZXJpZGllbVBhcnNlOiAv5Y2I5YmNfOWNiOW+jC9pLFxuICAgICAgICBpc1BNOiBmdW5jdGlvbiAoaW5wdXQpIHtcbiAgICAgICAgICAgIHJldHVybiBpbnB1dCA9PT0gJ+WNiOW+jCc7XG4gICAgICAgIH0sXG4gICAgICAgIG1lcmlkaWVtOiBmdW5jdGlvbiAoaG91ciwgbWludXRlLCBpc0xvd2VyKSB7XG4gICAgICAgICAgICBpZiAoaG91ciA8IDEyKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuICfljYjliY0nO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gJ+WNiOW+jCc7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIGNhbGVuZGFyOiB7XG4gICAgICAgICAgICBzYW1lRGF5OiAnW+S7iuaXpV0gTFQnLFxuICAgICAgICAgICAgbmV4dERheTogJ1vmmI7ml6VdIExUJyxcbiAgICAgICAgICAgIG5leHRXZWVrOiBmdW5jdGlvbiAobm93KSB7XG4gICAgICAgICAgICAgICAgaWYgKG5vdy53ZWVrKCkgIT09IHRoaXMud2VlaygpKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiAnW+adpemAsV1kZGRkIExUJztcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gJ2RkZGQgTFQnO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBsYXN0RGF5OiAnW+aYqOaXpV0gTFQnLFxuICAgICAgICAgICAgbGFzdFdlZWs6IGZ1bmN0aW9uIChub3cpIHtcbiAgICAgICAgICAgICAgICBpZiAodGhpcy53ZWVrKCkgIT09IG5vdy53ZWVrKCkpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuICdb5YWI6YCxXWRkZGQgTFQnO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiAnZGRkZCBMVCc7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHNhbWVFbHNlOiAnTCcsXG4gICAgICAgIH0sXG4gICAgICAgIGRheU9mTW9udGhPcmRpbmFsUGFyc2U6IC9cXGR7MSwyfeaXpS8sXG4gICAgICAgIG9yZGluYWw6IGZ1bmN0aW9uIChudW1iZXIsIHBlcmlvZCkge1xuICAgICAgICAgICAgc3dpdGNoIChwZXJpb2QpIHtcbiAgICAgICAgICAgICAgICBjYXNlICd5JzpcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG51bWJlciA9PT0gMSA/ICflhYPlubQnIDogbnVtYmVyICsgJ+W5tCc7XG4gICAgICAgICAgICAgICAgY2FzZSAnZCc6XG4gICAgICAgICAgICAgICAgY2FzZSAnRCc6XG4gICAgICAgICAgICAgICAgY2FzZSAnREREJzpcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG51bWJlciArICfml6UnO1xuICAgICAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBudW1iZXI7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIHJlbGF0aXZlVGltZToge1xuICAgICAgICAgICAgZnV0dXJlOiAnJXPlvownLFxuICAgICAgICAgICAgcGFzdDogJyVz5YmNJyxcbiAgICAgICAgICAgIHM6ICfmlbDnp5InLFxuICAgICAgICAgICAgc3M6ICclZOenkicsXG4gICAgICAgICAgICBtOiAnMeWIhicsXG4gICAgICAgICAgICBtbTogJyVk5YiGJyxcbiAgICAgICAgICAgIGg6ICcx5pmC6ZaTJyxcbiAgICAgICAgICAgIGhoOiAnJWTmmYLplpMnLFxuICAgICAgICAgICAgZDogJzHml6UnLFxuICAgICAgICAgICAgZGQ6ICclZOaXpScsXG4gICAgICAgICAgICBNOiAnMeODtuaciCcsXG4gICAgICAgICAgICBNTTogJyVk44O25pyIJyxcbiAgICAgICAgICAgIHk6ICcx5bm0JyxcbiAgICAgICAgICAgIHl5OiAnJWTlubQnLFxuICAgICAgICB9LFxuICAgIH0pO1xuXG4gICAgcmV0dXJuIGphO1xuXG59KSkpO1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///23827\n")},23844:(I,g,t)=>{"use strict";I.exports=t.p+"a49218e1ba991a2fc921.png"},24457:function(__unused_webpack_module,__unused_webpack_exports,__webpack_require__){eval("//! moment.js locale configuration\n//! locale : Romanian [ro]\n//! author : Vlad Gurdiga : https://github.com/gurdiga\n//! author : Valentin Agachi : https://github.com/avaly\n//! author : Emanuel Cepoi : https://github.com/cepem\n\n;(function (global, factory) {\n true ? factory(__webpack_require__(95093)) :\n 0\n}(this, (function (moment) { 'use strict';\n\n //! moment.js locale configuration\n\n function relativeTimeWithPlural(number, withoutSuffix, key) {\n var format = {\n ss: 'secunde',\n mm: 'minute',\n hh: 'ore',\n dd: 'zile',\n ww: 'săptămâni',\n MM: 'luni',\n yy: 'ani',\n },\n separator = ' ';\n if (number % 100 >= 20 || (number >= 100 && number % 100 === 0)) {\n separator = ' de ';\n }\n return number + separator + format[key];\n }\n\n var ro = moment.defineLocale('ro', {\n months: 'ianuarie_februarie_martie_aprilie_mai_iunie_iulie_august_septembrie_octombrie_noiembrie_decembrie'.split(\n '_'\n ),\n monthsShort:\n 'ian._feb._mart._apr._mai_iun._iul._aug._sept._oct._nov._dec.'.split(\n '_'\n ),\n monthsParseExact: true,\n weekdays: 'duminică_luni_marți_miercuri_joi_vineri_sâmbătă'.split('_'),\n weekdaysShort: 'Dum_Lun_Mar_Mie_Joi_Vin_Sâm'.split('_'),\n weekdaysMin: 'Du_Lu_Ma_Mi_Jo_Vi_Sâ'.split('_'),\n longDateFormat: {\n LT: 'H:mm',\n LTS: 'H:mm:ss',\n L: 'DD.MM.YYYY',\n LL: 'D MMMM YYYY',\n LLL: 'D MMMM YYYY H:mm',\n LLLL: 'dddd, D MMMM YYYY H:mm',\n },\n calendar: {\n sameDay: '[azi la] LT',\n nextDay: '[mâine la] LT',\n nextWeek: 'dddd [la] LT',\n lastDay: '[ieri la] LT',\n lastWeek: '[fosta] dddd [la] LT',\n sameElse: 'L',\n },\n relativeTime: {\n future: 'peste %s',\n past: '%s în urmă',\n s: 'câteva secunde',\n ss: relativeTimeWithPlural,\n m: 'un minut',\n mm: relativeTimeWithPlural,\n h: 'o oră',\n hh: relativeTimeWithPlural,\n d: 'o zi',\n dd: relativeTimeWithPlural,\n w: 'o săptămână',\n ww: relativeTimeWithPlural,\n M: 'o lună',\n MM: relativeTimeWithPlural,\n y: 'un an',\n yy: relativeTimeWithPlural,\n },\n week: {\n dow: 1, // Monday is the first day of the week.\n doy: 7, // The week that contains Jan 7th is the first week of the year.\n },\n });\n\n return ro;\n\n})));\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMjQ0NTcuanMiLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9pdGctbmV4dGdlbi1mcm9udGVuZC8uL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL3JvLmpzPzk3MmMiXSwic291cmNlc0NvbnRlbnQiOlsiLy8hIG1vbWVudC5qcyBsb2NhbGUgY29uZmlndXJhdGlvblxuLy8hIGxvY2FsZSA6IFJvbWFuaWFuIFtyb11cbi8vISBhdXRob3IgOiBWbGFkIEd1cmRpZ2EgOiBodHRwczovL2dpdGh1Yi5jb20vZ3VyZGlnYVxuLy8hIGF1dGhvciA6IFZhbGVudGluIEFnYWNoaSA6IGh0dHBzOi8vZ2l0aHViLmNvbS9hdmFseVxuLy8hIGF1dGhvciA6IEVtYW51ZWwgQ2Vwb2kgOiBodHRwczovL2dpdGh1Yi5jb20vY2VwZW1cblxuOyhmdW5jdGlvbiAoZ2xvYmFsLCBmYWN0b3J5KSB7XG4gICB0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcgJiYgdHlwZW9mIG1vZHVsZSAhPT0gJ3VuZGVmaW5lZCdcbiAgICAgICAmJiB0eXBlb2YgcmVxdWlyZSA9PT0gJ2Z1bmN0aW9uJyA/IGZhY3RvcnkocmVxdWlyZSgnLi4vbW9tZW50JykpIDpcbiAgIHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgZGVmaW5lLmFtZCA/IGRlZmluZShbJy4uL21vbWVudCddLCBmYWN0b3J5KSA6XG4gICBmYWN0b3J5KGdsb2JhbC5tb21lbnQpXG59KHRoaXMsIChmdW5jdGlvbiAobW9tZW50KSB7ICd1c2Ugc3RyaWN0JztcblxuICAgIC8vISBtb21lbnQuanMgbG9jYWxlIGNvbmZpZ3VyYXRpb25cblxuICAgIGZ1bmN0aW9uIHJlbGF0aXZlVGltZVdpdGhQbHVyYWwobnVtYmVyLCB3aXRob3V0U3VmZml4LCBrZXkpIHtcbiAgICAgICAgdmFyIGZvcm1hdCA9IHtcbiAgICAgICAgICAgICAgICBzczogJ3NlY3VuZGUnLFxuICAgICAgICAgICAgICAgIG1tOiAnbWludXRlJyxcbiAgICAgICAgICAgICAgICBoaDogJ29yZScsXG4gICAgICAgICAgICAgICAgZGQ6ICd6aWxlJyxcbiAgICAgICAgICAgICAgICB3dzogJ3PEg3B0xINtw6JuaScsXG4gICAgICAgICAgICAgICAgTU06ICdsdW5pJyxcbiAgICAgICAgICAgICAgICB5eTogJ2FuaScsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgc2VwYXJhdG9yID0gJyAnO1xuICAgICAgICBpZiAobnVtYmVyICUgMTAwID49IDIwIHx8IChudW1iZXIgPj0gMTAwICYmIG51bWJlciAlIDEwMCA9PT0gMCkpIHtcbiAgICAgICAgICAgIHNlcGFyYXRvciA9ICcgZGUgJztcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbnVtYmVyICsgc2VwYXJhdG9yICsgZm9ybWF0W2tleV07XG4gICAgfVxuXG4gICAgdmFyIHJvID0gbW9tZW50LmRlZmluZUxvY2FsZSgncm8nLCB7XG4gICAgICAgIG1vbnRoczogJ2lhbnVhcmllX2ZlYnJ1YXJpZV9tYXJ0aWVfYXByaWxpZV9tYWlfaXVuaWVfaXVsaWVfYXVndXN0X3NlcHRlbWJyaWVfb2N0b21icmllX25vaWVtYnJpZV9kZWNlbWJyaWUnLnNwbGl0KFxuICAgICAgICAgICAgJ18nXG4gICAgICAgICksXG4gICAgICAgIG1vbnRoc1Nob3J0OlxuICAgICAgICAgICAgJ2lhbi5fZmViLl9tYXJ0Ll9hcHIuX21haV9pdW4uX2l1bC5fYXVnLl9zZXB0Ll9vY3QuX25vdi5fZGVjLicuc3BsaXQoXG4gICAgICAgICAgICAgICAgJ18nXG4gICAgICAgICAgICApLFxuICAgICAgICBtb250aHNQYXJzZUV4YWN0OiB0cnVlLFxuICAgICAgICB3ZWVrZGF5czogJ2R1bWluaWPEg19sdW5pX21hcsibaV9taWVyY3VyaV9qb2lfdmluZXJpX3PDom1ixIN0xIMnLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzU2hvcnQ6ICdEdW1fTHVuX01hcl9NaWVfSm9pX1Zpbl9Tw6JtJy5zcGxpdCgnXycpLFxuICAgICAgICB3ZWVrZGF5c01pbjogJ0R1X0x1X01hX01pX0pvX1ZpX1PDoicuc3BsaXQoJ18nKSxcbiAgICAgICAgbG9uZ0RhdGVGb3JtYXQ6IHtcbiAgICAgICAgICAgIExUOiAnSDptbScsXG4gICAgICAgICAgICBMVFM6ICdIOm1tOnNzJyxcbiAgICAgICAgICAgIEw6ICdERC5NTS5ZWVlZJyxcbiAgICAgICAgICAgIExMOiAnRCBNTU1NIFlZWVknLFxuICAgICAgICAgICAgTExMOiAnRCBNTU1NIFlZWVkgSDptbScsXG4gICAgICAgICAgICBMTExMOiAnZGRkZCwgRCBNTU1NIFlZWVkgSDptbScsXG4gICAgICAgIH0sXG4gICAgICAgIGNhbGVuZGFyOiB7XG4gICAgICAgICAgICBzYW1lRGF5OiAnW2F6aSBsYV0gTFQnLFxuICAgICAgICAgICAgbmV4dERheTogJ1ttw6JpbmUgbGFdIExUJyxcbiAgICAgICAgICAgIG5leHRXZWVrOiAnZGRkZCBbbGFdIExUJyxcbiAgICAgICAgICAgIGxhc3REYXk6ICdbaWVyaSBsYV0gTFQnLFxuICAgICAgICAgICAgbGFzdFdlZWs6ICdbZm9zdGFdIGRkZGQgW2xhXSBMVCcsXG4gICAgICAgICAgICBzYW1lRWxzZTogJ0wnLFxuICAgICAgICB9LFxuICAgICAgICByZWxhdGl2ZVRpbWU6IHtcbiAgICAgICAgICAgIGZ1dHVyZTogJ3Blc3RlICVzJyxcbiAgICAgICAgICAgIHBhc3Q6ICclcyDDrm4gdXJtxIMnLFxuICAgICAgICAgICAgczogJ2PDonRldmEgc2VjdW5kZScsXG4gICAgICAgICAgICBzczogcmVsYXRpdmVUaW1lV2l0aFBsdXJhbCxcbiAgICAgICAgICAgIG06ICd1biBtaW51dCcsXG4gICAgICAgICAgICBtbTogcmVsYXRpdmVUaW1lV2l0aFBsdXJhbCxcbiAgICAgICAgICAgIGg6ICdvIG9yxIMnLFxuICAgICAgICAgICAgaGg6IHJlbGF0aXZlVGltZVdpdGhQbHVyYWwsXG4gICAgICAgICAgICBkOiAnbyB6aScsXG4gICAgICAgICAgICBkZDogcmVsYXRpdmVUaW1lV2l0aFBsdXJhbCxcbiAgICAgICAgICAgIHc6ICdvIHPEg3B0xINtw6JuxIMnLFxuICAgICAgICAgICAgd3c6IHJlbGF0aXZlVGltZVdpdGhQbHVyYWwsXG4gICAgICAgICAgICBNOiAnbyBsdW7EgycsXG4gICAgICAgICAgICBNTTogcmVsYXRpdmVUaW1lV2l0aFBsdXJhbCxcbiAgICAgICAgICAgIHk6ICd1biBhbicsXG4gICAgICAgICAgICB5eTogcmVsYXRpdmVUaW1lV2l0aFBsdXJhbCxcbiAgICAgICAgfSxcbiAgICAgICAgd2Vlazoge1xuICAgICAgICAgICAgZG93OiAxLCAvLyBNb25kYXkgaXMgdGhlIGZpcnN0IGRheSBvZiB0aGUgd2Vlay5cbiAgICAgICAgICAgIGRveTogNywgLy8gVGhlIHdlZWsgdGhhdCBjb250YWlucyBKYW4gN3RoIGlzIHRoZSBmaXJzdCB3ZWVrIG9mIHRoZSB5ZWFyLlxuICAgICAgICB9LFxuICAgIH0pO1xuXG4gICAgcmV0dXJuIHJvO1xuXG59KSkpO1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///24457\n")},24496:function(__unused_webpack_module,__unused_webpack_exports,__webpack_require__){eval("//! moment.js locale configuration\n//! locale : Arabic (Morocco) [ar-ma]\n//! author : ElFadili Yassine : https://github.com/ElFadiliY\n//! author : Abdel Said : https://github.com/abdelsaid\n\n;(function (global, factory) {\n true ? factory(__webpack_require__(95093)) :\n 0\n}(this, (function (moment) { 'use strict';\n\n //! moment.js locale configuration\n\n var arMa = moment.defineLocale('ar-ma', {\n months: 'يناير_فبراير_مارس_أبريل_ماي_يونيو_يوليوز_غشت_شتنبر_أكتوبر_نونبر_دجنبر'.split(\n '_'\n ),\n monthsShort:\n 'يناير_فبراير_مارس_أبريل_ماي_يونيو_يوليوز_غشت_شتنبر_أكتوبر_نونبر_دجنبر'.split(\n '_'\n ),\n weekdays: 'الأحد_الإثنين_الثلاثاء_الأربعاء_الخميس_الجمعة_السبت'.split('_'),\n weekdaysShort: 'احد_اثنين_ثلاثاء_اربعاء_خميس_جمعة_سبت'.split('_'),\n weekdaysMin: 'ح_ن_ث_ر_خ_ج_س'.split('_'),\n weekdaysParseExact: true,\n longDateFormat: {\n LT: 'HH:mm',\n LTS: 'HH:mm:ss',\n L: 'DD/MM/YYYY',\n LL: 'D MMMM YYYY',\n LLL: 'D MMMM YYYY HH:mm',\n LLLL: 'dddd D MMMM YYYY HH:mm',\n },\n calendar: {\n sameDay: '[اليوم على الساعة] LT',\n nextDay: '[غدا على الساعة] LT',\n nextWeek: 'dddd [على الساعة] LT',\n lastDay: '[أمس على الساعة] LT',\n lastWeek: 'dddd [على الساعة] LT',\n sameElse: 'L',\n },\n relativeTime: {\n future: 'في %s',\n past: 'منذ %s',\n s: 'ثوان',\n ss: '%d ثانية',\n m: 'دقيقة',\n mm: '%d دقائق',\n h: 'ساعة',\n hh: '%d ساعات',\n d: 'يوم',\n dd: '%d أيام',\n M: 'شهر',\n MM: '%d أشهر',\n y: 'سنة',\n yy: '%d سنوات',\n },\n week: {\n dow: 1, // Monday is the first day of the week.\n doy: 4, // The week that contains Jan 4th is the first week of the year.\n },\n });\n\n return arMa;\n\n})));\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMjQ0OTYuanMiLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL2l0Zy1uZXh0Z2VuLWZyb250ZW5kLy4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvYXItbWEuanM/MGE4NCJdLCJzb3VyY2VzQ29udGVudCI6WyIvLyEgbW9tZW50LmpzIGxvY2FsZSBjb25maWd1cmF0aW9uXG4vLyEgbG9jYWxlIDogQXJhYmljIChNb3JvY2NvKSBbYXItbWFdXG4vLyEgYXV0aG9yIDogRWxGYWRpbGkgWWFzc2luZSA6IGh0dHBzOi8vZ2l0aHViLmNvbS9FbEZhZGlsaVlcbi8vISBhdXRob3IgOiBBYmRlbCBTYWlkIDogaHR0cHM6Ly9naXRodWIuY29tL2FiZGVsc2FpZFxuXG47KGZ1bmN0aW9uIChnbG9iYWwsIGZhY3RvcnkpIHtcbiAgIHR5cGVvZiBleHBvcnRzID09PSAnb2JqZWN0JyAmJiB0eXBlb2YgbW9kdWxlICE9PSAndW5kZWZpbmVkJ1xuICAgICAgICYmIHR5cGVvZiByZXF1aXJlID09PSAnZnVuY3Rpb24nID8gZmFjdG9yeShyZXF1aXJlKCcuLi9tb21lbnQnKSkgOlxuICAgdHlwZW9mIGRlZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiBkZWZpbmUuYW1kID8gZGVmaW5lKFsnLi4vbW9tZW50J10sIGZhY3RvcnkpIDpcbiAgIGZhY3RvcnkoZ2xvYmFsLm1vbWVudClcbn0odGhpcywgKGZ1bmN0aW9uIChtb21lbnQpIHsgJ3VzZSBzdHJpY3QnO1xuXG4gICAgLy8hIG1vbWVudC5qcyBsb2NhbGUgY29uZmlndXJhdGlvblxuXG4gICAgdmFyIGFyTWEgPSBtb21lbnQuZGVmaW5lTG9jYWxlKCdhci1tYScsIHtcbiAgICAgICAgbW9udGhzOiAn2YrZhtin2YrYsV/Zgdio2LHYp9mK2LFf2YXYp9ix2LNf2KPYqNix2YrZhF/Zhdin2Ypf2YrZiNmG2YrZiF/ZitmI2YTZitmI2LJf2LrYtNiqX9i02KrZhtio2LFf2KPZg9iq2YjYqNixX9mG2YjZhtio2LFf2K/YrNmG2KjYsScuc3BsaXQoXG4gICAgICAgICAgICAnXydcbiAgICAgICAgKSxcbiAgICAgICAgbW9udGhzU2hvcnQ6XG4gICAgICAgICAgICAn2YrZhtin2YrYsV/Zgdio2LHYp9mK2LFf2YXYp9ix2LNf2KPYqNix2YrZhF/Zhdin2Ypf2YrZiNmG2YrZiF/ZitmI2YTZitmI2LJf2LrYtNiqX9i02KrZhtio2LFf2KPZg9iq2YjYqNixX9mG2YjZhtio2LFf2K/YrNmG2KjYsScuc3BsaXQoXG4gICAgICAgICAgICAgICAgJ18nXG4gICAgICAgICAgICApLFxuICAgICAgICB3ZWVrZGF5czogJ9in2YTYo9it2K9f2KfZhNil2KvZhtmK2YZf2KfZhNir2YTYp9ir2KfYoV/Yp9mE2KPYsdio2LnYp9ihX9in2YTYrtmF2YrYs1/Yp9mE2KzZhdi52Klf2KfZhNiz2KjYqicuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXNTaG9ydDogJ9in2K3Yr1/Yp9ir2YbZitmGX9ir2YTYp9ir2KfYoV/Yp9ix2KjYudin2KFf2K7ZhdmK2LNf2KzZhdi52Klf2LPYqNiqJy5zcGxpdCgnXycpLFxuICAgICAgICB3ZWVrZGF5c01pbjogJ9itX9mGX9irX9ixX9iuX9isX9izJy5zcGxpdCgnXycpLFxuICAgICAgICB3ZWVrZGF5c1BhcnNlRXhhY3Q6IHRydWUsXG4gICAgICAgIGxvbmdEYXRlRm9ybWF0OiB7XG4gICAgICAgICAgICBMVDogJ0hIOm1tJyxcbiAgICAgICAgICAgIExUUzogJ0hIOm1tOnNzJyxcbiAgICAgICAgICAgIEw6ICdERC9NTS9ZWVlZJyxcbiAgICAgICAgICAgIExMOiAnRCBNTU1NIFlZWVknLFxuICAgICAgICAgICAgTExMOiAnRCBNTU1NIFlZWVkgSEg6bW0nLFxuICAgICAgICAgICAgTExMTDogJ2RkZGQgRCBNTU1NIFlZWVkgSEg6bW0nLFxuICAgICAgICB9LFxuICAgICAgICBjYWxlbmRhcjoge1xuICAgICAgICAgICAgc2FtZURheTogJ1vYp9mE2YrZiNmFINi52YTZiSDYp9mE2LPYp9i52KldIExUJyxcbiAgICAgICAgICAgIG5leHREYXk6ICdb2LrYr9inINi52YTZiSDYp9mE2LPYp9i52KldIExUJyxcbiAgICAgICAgICAgIG5leHRXZWVrOiAnZGRkZCBb2LnZhNmJINin2YTYs9in2LnYqV0gTFQnLFxuICAgICAgICAgICAgbGFzdERheTogJ1vYo9mF2LMg2LnZhNmJINin2YTYs9in2LnYqV0gTFQnLFxuICAgICAgICAgICAgbGFzdFdlZWs6ICdkZGRkIFvYudmE2Ykg2KfZhNiz2KfYudipXSBMVCcsXG4gICAgICAgICAgICBzYW1lRWxzZTogJ0wnLFxuICAgICAgICB9LFxuICAgICAgICByZWxhdGl2ZVRpbWU6IHtcbiAgICAgICAgICAgIGZ1dHVyZTogJ9mB2YogJXMnLFxuICAgICAgICAgICAgcGFzdDogJ9mF2YbYsCAlcycsXG4gICAgICAgICAgICBzOiAn2KvZiNin2YYnLFxuICAgICAgICAgICAgc3M6ICclZCDYq9in2YbZitipJyxcbiAgICAgICAgICAgIG06ICfYr9mC2YrZgtipJyxcbiAgICAgICAgICAgIG1tOiAnJWQg2K/Zgtin2KbZgicsXG4gICAgICAgICAgICBoOiAn2LPYp9i52KknLFxuICAgICAgICAgICAgaGg6ICclZCDYs9in2LnYp9iqJyxcbiAgICAgICAgICAgIGQ6ICfZitmI2YUnLFxuICAgICAgICAgICAgZGQ6ICclZCDYo9mK2KfZhScsXG4gICAgICAgICAgICBNOiAn2LTZh9ixJyxcbiAgICAgICAgICAgIE1NOiAnJWQg2KPYtNmH2LEnLFxuICAgICAgICAgICAgeTogJ9iz2YbYqScsXG4gICAgICAgICAgICB5eTogJyVkINiz2YbZiNin2KonLFxuICAgICAgICB9LFxuICAgICAgICB3ZWVrOiB7XG4gICAgICAgICAgICBkb3c6IDEsIC8vIE1vbmRheSBpcyB0aGUgZmlyc3QgZGF5IG9mIHRoZSB3ZWVrLlxuICAgICAgICAgICAgZG95OiA0LCAvLyBUaGUgd2VlayB0aGF0IGNvbnRhaW5zIEphbiA0dGggaXMgdGhlIGZpcnN0IHdlZWsgb2YgdGhlIHllYXIuXG4gICAgICAgIH0sXG4gICAgfSk7XG5cbiAgICByZXR1cm4gYXJNYTtcblxufSkpKTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///24496\n")},25177:function(__unused_webpack_module,__unused_webpack_exports,__webpack_require__){eval("//! moment.js locale configuration\n//! locale : Afrikaans [af]\n//! author : Werner Mollentze : https://github.com/wernerm\n\n;(function (global, factory) {\n true ? factory(__webpack_require__(95093)) :\n 0\n}(this, (function (moment) { 'use strict';\n\n //! moment.js locale configuration\n\n var af = moment.defineLocale('af', {\n months: 'Januarie_Februarie_Maart_April_Mei_Junie_Julie_Augustus_September_Oktober_November_Desember'.split(\n '_'\n ),\n monthsShort: 'Jan_Feb_Mrt_Apr_Mei_Jun_Jul_Aug_Sep_Okt_Nov_Des'.split('_'),\n weekdays: 'Sondag_Maandag_Dinsdag_Woensdag_Donderdag_Vrydag_Saterdag'.split(\n '_'\n ),\n weekdaysShort: 'Son_Maa_Din_Woe_Don_Vry_Sat'.split('_'),\n weekdaysMin: 'So_Ma_Di_Wo_Do_Vr_Sa'.split('_'),\n meridiemParse: /vm|nm/i,\n isPM: function (input) {\n return /^nm$/i.test(input);\n },\n meridiem: function (hours, minutes, isLower) {\n if (hours < 12) {\n return isLower ? 'vm' : 'VM';\n } else {\n return isLower ? 'nm' : 'NM';\n }\n },\n longDateFormat: {\n LT: 'HH:mm',\n LTS: 'HH:mm:ss',\n L: 'DD/MM/YYYY',\n LL: 'D MMMM YYYY',\n LLL: 'D MMMM YYYY HH:mm',\n LLLL: 'dddd, D MMMM YYYY HH:mm',\n },\n calendar: {\n sameDay: '[Vandag om] LT',\n nextDay: '[Môre om] LT',\n nextWeek: 'dddd [om] LT',\n lastDay: '[Gister om] LT',\n lastWeek: '[Laas] dddd [om] LT',\n sameElse: 'L',\n },\n relativeTime: {\n future: 'oor %s',\n past: '%s gelede',\n s: \"'n paar sekondes\",\n ss: '%d sekondes',\n m: \"'n minuut\",\n mm: '%d minute',\n h: \"'n uur\",\n hh: '%d ure',\n d: \"'n dag\",\n dd: '%d dae',\n M: \"'n maand\",\n MM: '%d maande',\n y: \"'n jaar\",\n yy: '%d jaar',\n },\n dayOfMonthOrdinalParse: /\\d{1,2}(ste|de)/,\n ordinal: function (number) {\n return (\n number +\n (number === 1 || number === 8 || number >= 20 ? 'ste' : 'de')\n ); // Thanks to Joris Röling : https://github.com/jjupiter\n },\n week: {\n dow: 1, // Maandag is die eerste dag van die week.\n doy: 4, // Die week wat die 4de Januarie bevat is die eerste week van die jaar.\n },\n });\n\n return af;\n\n})));\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMjUxNzcuanMiLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL2l0Zy1uZXh0Z2VuLWZyb250ZW5kLy4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvYWYuanM/MmJmYiJdLCJzb3VyY2VzQ29udGVudCI6WyIvLyEgbW9tZW50LmpzIGxvY2FsZSBjb25maWd1cmF0aW9uXG4vLyEgbG9jYWxlIDogQWZyaWthYW5zIFthZl1cbi8vISBhdXRob3IgOiBXZXJuZXIgTW9sbGVudHplIDogaHR0cHM6Ly9naXRodWIuY29tL3dlcm5lcm1cblxuOyhmdW5jdGlvbiAoZ2xvYmFsLCBmYWN0b3J5KSB7XG4gICB0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcgJiYgdHlwZW9mIG1vZHVsZSAhPT0gJ3VuZGVmaW5lZCdcbiAgICAgICAmJiB0eXBlb2YgcmVxdWlyZSA9PT0gJ2Z1bmN0aW9uJyA/IGZhY3RvcnkocmVxdWlyZSgnLi4vbW9tZW50JykpIDpcbiAgIHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgZGVmaW5lLmFtZCA/IGRlZmluZShbJy4uL21vbWVudCddLCBmYWN0b3J5KSA6XG4gICBmYWN0b3J5KGdsb2JhbC5tb21lbnQpXG59KHRoaXMsIChmdW5jdGlvbiAobW9tZW50KSB7ICd1c2Ugc3RyaWN0JztcblxuICAgIC8vISBtb21lbnQuanMgbG9jYWxlIGNvbmZpZ3VyYXRpb25cblxuICAgIHZhciBhZiA9IG1vbWVudC5kZWZpbmVMb2NhbGUoJ2FmJywge1xuICAgICAgICBtb250aHM6ICdKYW51YXJpZV9GZWJydWFyaWVfTWFhcnRfQXByaWxfTWVpX0p1bmllX0p1bGllX0F1Z3VzdHVzX1NlcHRlbWJlcl9Pa3RvYmVyX05vdmVtYmVyX0Rlc2VtYmVyJy5zcGxpdChcbiAgICAgICAgICAgICdfJ1xuICAgICAgICApLFxuICAgICAgICBtb250aHNTaG9ydDogJ0phbl9GZWJfTXJ0X0Fwcl9NZWlfSnVuX0p1bF9BdWdfU2VwX09rdF9Ob3ZfRGVzJy5zcGxpdCgnXycpLFxuICAgICAgICB3ZWVrZGF5czogJ1NvbmRhZ19NYWFuZGFnX0RpbnNkYWdfV29lbnNkYWdfRG9uZGVyZGFnX1ZyeWRhZ19TYXRlcmRhZycuc3BsaXQoXG4gICAgICAgICAgICAnXydcbiAgICAgICAgKSxcbiAgICAgICAgd2Vla2RheXNTaG9ydDogJ1Nvbl9NYWFfRGluX1dvZV9Eb25fVnJ5X1NhdCcuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXNNaW46ICdTb19NYV9EaV9Xb19Eb19Wcl9TYScuc3BsaXQoJ18nKSxcbiAgICAgICAgbWVyaWRpZW1QYXJzZTogL3ZtfG5tL2ksXG4gICAgICAgIGlzUE06IGZ1bmN0aW9uIChpbnB1dCkge1xuICAgICAgICAgICAgcmV0dXJuIC9ebm0kL2kudGVzdChpbnB1dCk7XG4gICAgICAgIH0sXG4gICAgICAgIG1lcmlkaWVtOiBmdW5jdGlvbiAoaG91cnMsIG1pbnV0ZXMsIGlzTG93ZXIpIHtcbiAgICAgICAgICAgIGlmIChob3VycyA8IDEyKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGlzTG93ZXIgPyAndm0nIDogJ1ZNJztcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGlzTG93ZXIgPyAnbm0nIDogJ05NJztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgbG9uZ0RhdGVGb3JtYXQ6IHtcbiAgICAgICAgICAgIExUOiAnSEg6bW0nLFxuICAgICAgICAgICAgTFRTOiAnSEg6bW06c3MnLFxuICAgICAgICAgICAgTDogJ0REL01NL1lZWVknLFxuICAgICAgICAgICAgTEw6ICdEIE1NTU0gWVlZWScsXG4gICAgICAgICAgICBMTEw6ICdEIE1NTU0gWVlZWSBISDptbScsXG4gICAgICAgICAgICBMTExMOiAnZGRkZCwgRCBNTU1NIFlZWVkgSEg6bW0nLFxuICAgICAgICB9LFxuICAgICAgICBjYWxlbmRhcjoge1xuICAgICAgICAgICAgc2FtZURheTogJ1tWYW5kYWcgb21dIExUJyxcbiAgICAgICAgICAgIG5leHREYXk6ICdbTcO0cmUgb21dIExUJyxcbiAgICAgICAgICAgIG5leHRXZWVrOiAnZGRkZCBbb21dIExUJyxcbiAgICAgICAgICAgIGxhc3REYXk6ICdbR2lzdGVyIG9tXSBMVCcsXG4gICAgICAgICAgICBsYXN0V2VlazogJ1tMYWFzXSBkZGRkIFtvbV0gTFQnLFxuICAgICAgICAgICAgc2FtZUVsc2U6ICdMJyxcbiAgICAgICAgfSxcbiAgICAgICAgcmVsYXRpdmVUaW1lOiB7XG4gICAgICAgICAgICBmdXR1cmU6ICdvb3IgJXMnLFxuICAgICAgICAgICAgcGFzdDogJyVzIGdlbGVkZScsXG4gICAgICAgICAgICBzOiBcIiduIHBhYXIgc2Vrb25kZXNcIixcbiAgICAgICAgICAgIHNzOiAnJWQgc2Vrb25kZXMnLFxuICAgICAgICAgICAgbTogXCInbiBtaW51dXRcIixcbiAgICAgICAgICAgIG1tOiAnJWQgbWludXRlJyxcbiAgICAgICAgICAgIGg6IFwiJ24gdXVyXCIsXG4gICAgICAgICAgICBoaDogJyVkIHVyZScsXG4gICAgICAgICAgICBkOiBcIiduIGRhZ1wiLFxuICAgICAgICAgICAgZGQ6ICclZCBkYWUnLFxuICAgICAgICAgICAgTTogXCInbiBtYWFuZFwiLFxuICAgICAgICAgICAgTU06ICclZCBtYWFuZGUnLFxuICAgICAgICAgICAgeTogXCInbiBqYWFyXCIsXG4gICAgICAgICAgICB5eTogJyVkIGphYXInLFxuICAgICAgICB9LFxuICAgICAgICBkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOiAvXFxkezEsMn0oc3RlfGRlKS8sXG4gICAgICAgIG9yZGluYWw6IGZ1bmN0aW9uIChudW1iZXIpIHtcbiAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgICAgbnVtYmVyICtcbiAgICAgICAgICAgICAgICAobnVtYmVyID09PSAxIHx8IG51bWJlciA9PT0gOCB8fCBudW1iZXIgPj0gMjAgPyAnc3RlJyA6ICdkZScpXG4gICAgICAgICAgICApOyAvLyBUaGFua3MgdG8gSm9yaXMgUsO2bGluZyA6IGh0dHBzOi8vZ2l0aHViLmNvbS9qanVwaXRlclxuICAgICAgICB9LFxuICAgICAgICB3ZWVrOiB7XG4gICAgICAgICAgICBkb3c6IDEsIC8vIE1hYW5kYWcgaXMgZGllIGVlcnN0ZSBkYWcgdmFuIGRpZSB3ZWVrLlxuICAgICAgICAgICAgZG95OiA0LCAvLyBEaWUgd2VlayB3YXQgZGllIDRkZSBKYW51YXJpZSBiZXZhdCBpcyBkaWUgZWVyc3RlIHdlZWsgdmFuIGRpZSBqYWFyLlxuICAgICAgICB9LFxuICAgIH0pO1xuXG4gICAgcmV0dXJuIGFmO1xuXG59KSkpO1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///25177\n")},25382:(module,__unused_webpack_exports,__webpack_require__)=>{"use strict";eval("// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n// a duplex stream is just a stream that is both readable and writable.\n// Since JS doesn't have multiple prototypal inheritance, this class\n// prototypally inherits from Readable, and then parasitically from\n// Writable.\n\n\n\n/**/\nvar objectKeys = Object.keys || function (obj) {\n var keys = [];\n for (var key in obj) keys.push(key);\n return keys;\n};\n/**/\n\nmodule.exports = Duplex;\nvar Readable = __webpack_require__(45412);\nvar Writable = __webpack_require__(16708);\n__webpack_require__(56698)(Duplex, Readable);\n{\n // Allow the keys array to be GC'ed.\n var keys = objectKeys(Writable.prototype);\n for (var v = 0; v < keys.length; v++) {\n var method = keys[v];\n if (!Duplex.prototype[method]) Duplex.prototype[method] = Writable.prototype[method];\n }\n}\nfunction Duplex(options) {\n if (!(this instanceof Duplex)) return new Duplex(options);\n Readable.call(this, options);\n Writable.call(this, options);\n this.allowHalfOpen = true;\n if (options) {\n if (options.readable === false) this.readable = false;\n if (options.writable === false) this.writable = false;\n if (options.allowHalfOpen === false) {\n this.allowHalfOpen = false;\n this.once('end', onend);\n }\n }\n}\nObject.defineProperty(Duplex.prototype, 'writableHighWaterMark', {\n // making it explicit this property is not enumerable\n // because otherwise some prototype manipulation in\n // userland will fail\n enumerable: false,\n get: function get() {\n return this._writableState.highWaterMark;\n }\n});\nObject.defineProperty(Duplex.prototype, 'writableBuffer', {\n // making it explicit this property is not enumerable\n // because otherwise some prototype manipulation in\n // userland will fail\n enumerable: false,\n get: function get() {\n return this._writableState && this._writableState.getBuffer();\n }\n});\nObject.defineProperty(Duplex.prototype, 'writableLength', {\n // making it explicit this property is not enumerable\n // because otherwise some prototype manipulation in\n // userland will fail\n enumerable: false,\n get: function get() {\n return this._writableState.length;\n }\n});\n\n// the no-half-open enforcer\nfunction onend() {\n // If the writable side ended, then we're ok.\n if (this._writableState.ended) return;\n\n // no more data can be written.\n // But allow more writes to happen in this tick.\n process.nextTick(onEndNT, this);\n}\nfunction onEndNT(self) {\n self.end();\n}\nObject.defineProperty(Duplex.prototype, 'destroyed', {\n // making it explicit this property is not enumerable\n // because otherwise some prototype manipulation in\n // userland will fail\n enumerable: false,\n get: function get() {\n if (this._readableState === undefined || this._writableState === undefined) {\n return false;\n }\n return this._readableState.destroyed && this._writableState.destroyed;\n },\n set: function set(value) {\n // we ignore the value if the stream\n // has not been initialized yet\n if (this._readableState === undefined || this._writableState === undefined) {\n return;\n }\n\n // backward compatibility, the user is explicitly\n // managing destroyed\n this._readableState.destroyed = value;\n this._writableState.destroyed = value;\n }\n});//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMjUzODIuanMiLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vaXRnLW5leHRnZW4tZnJvbnRlbmQvLi9ub2RlX21vZHVsZXMvcmVhZGFibGUtc3RyZWFtL2xpYi9fc3RyZWFtX2R1cGxleC5qcz9iMTlhIl0sInNvdXJjZXNDb250ZW50IjpbIi8vIENvcHlyaWdodCBKb3llbnQsIEluYy4gYW5kIG90aGVyIE5vZGUgY29udHJpYnV0b3JzLlxuLy9cbi8vIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhXG4vLyBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlXG4vLyBcIlNvZnR3YXJlXCIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmdcbi8vIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCxcbi8vIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXRcbi8vIHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZVxuLy8gZm9sbG93aW5nIGNvbmRpdGlvbnM6XG4vL1xuLy8gVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWRcbi8vIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLlxuLy9cbi8vIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1Ncbi8vIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0Zcbi8vIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU5cbi8vIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLFxuLy8gREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SXG4vLyBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFXG4vLyBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLlxuXG4vLyBhIGR1cGxleCBzdHJlYW0gaXMganVzdCBhIHN0cmVhbSB0aGF0IGlzIGJvdGggcmVhZGFibGUgYW5kIHdyaXRhYmxlLlxuLy8gU2luY2UgSlMgZG9lc24ndCBoYXZlIG11bHRpcGxlIHByb3RvdHlwYWwgaW5oZXJpdGFuY2UsIHRoaXMgY2xhc3Ncbi8vIHByb3RvdHlwYWxseSBpbmhlcml0cyBmcm9tIFJlYWRhYmxlLCBhbmQgdGhlbiBwYXJhc2l0aWNhbGx5IGZyb21cbi8vIFdyaXRhYmxlLlxuXG4ndXNlIHN0cmljdCc7XG5cbi8qPHJlcGxhY2VtZW50PiovXG52YXIgb2JqZWN0S2V5cyA9IE9iamVjdC5rZXlzIHx8IGZ1bmN0aW9uIChvYmopIHtcbiAgdmFyIGtleXMgPSBbXTtcbiAgZm9yICh2YXIga2V5IGluIG9iaikga2V5cy5wdXNoKGtleSk7XG4gIHJldHVybiBrZXlzO1xufTtcbi8qPC9yZXBsYWNlbWVudD4qL1xuXG5tb2R1bGUuZXhwb3J0cyA9IER1cGxleDtcbnZhciBSZWFkYWJsZSA9IHJlcXVpcmUoJy4vX3N0cmVhbV9yZWFkYWJsZScpO1xudmFyIFdyaXRhYmxlID0gcmVxdWlyZSgnLi9fc3RyZWFtX3dyaXRhYmxlJyk7XG5yZXF1aXJlKCdpbmhlcml0cycpKER1cGxleCwgUmVhZGFibGUpO1xue1xuICAvLyBBbGxvdyB0aGUga2V5cyBhcnJheSB0byBiZSBHQydlZC5cbiAgdmFyIGtleXMgPSBvYmplY3RLZXlzKFdyaXRhYmxlLnByb3RvdHlwZSk7XG4gIGZvciAodmFyIHYgPSAwOyB2IDwga2V5cy5sZW5ndGg7IHYrKykge1xuICAgIHZhciBtZXRob2QgPSBrZXlzW3ZdO1xuICAgIGlmICghRHVwbGV4LnByb3RvdHlwZVttZXRob2RdKSBEdXBsZXgucHJvdG90eXBlW21ldGhvZF0gPSBXcml0YWJsZS5wcm90b3R5cGVbbWV0aG9kXTtcbiAgfVxufVxuZnVuY3Rpb24gRHVwbGV4KG9wdGlvbnMpIHtcbiAgaWYgKCEodGhpcyBpbnN0YW5jZW9mIER1cGxleCkpIHJldHVybiBuZXcgRHVwbGV4KG9wdGlvbnMpO1xuICBSZWFkYWJsZS5jYWxsKHRoaXMsIG9wdGlvbnMpO1xuICBXcml0YWJsZS5jYWxsKHRoaXMsIG9wdGlvbnMpO1xuICB0aGlzLmFsbG93SGFsZk9wZW4gPSB0cnVlO1xuICBpZiAob3B0aW9ucykge1xuICAgIGlmIChvcHRpb25zLnJlYWRhYmxlID09PSBmYWxzZSkgdGhpcy5yZWFkYWJsZSA9IGZhbHNlO1xuICAgIGlmIChvcHRpb25zLndyaXRhYmxlID09PSBmYWxzZSkgdGhpcy53cml0YWJsZSA9IGZhbHNlO1xuICAgIGlmIChvcHRpb25zLmFsbG93SGFsZk9wZW4gPT09IGZhbHNlKSB7XG4gICAgICB0aGlzLmFsbG93SGFsZk9wZW4gPSBmYWxzZTtcbiAgICAgIHRoaXMub25jZSgnZW5kJywgb25lbmQpO1xuICAgIH1cbiAgfVxufVxuT2JqZWN0LmRlZmluZVByb3BlcnR5KER1cGxleC5wcm90b3R5cGUsICd3cml0YWJsZUhpZ2hXYXRlck1hcmsnLCB7XG4gIC8vIG1ha2luZyBpdCBleHBsaWNpdCB0aGlzIHByb3BlcnR5IGlzIG5vdCBlbnVtZXJhYmxlXG4gIC8vIGJlY2F1c2Ugb3RoZXJ3aXNlIHNvbWUgcHJvdG90eXBlIG1hbmlwdWxhdGlvbiBpblxuICAvLyB1c2VybGFuZCB3aWxsIGZhaWxcbiAgZW51bWVyYWJsZTogZmFsc2UsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiB0aGlzLl93cml0YWJsZVN0YXRlLmhpZ2hXYXRlck1hcms7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KER1cGxleC5wcm90b3R5cGUsICd3cml0YWJsZUJ1ZmZlcicsIHtcbiAgLy8gbWFraW5nIGl0IGV4cGxpY2l0IHRoaXMgcHJvcGVydHkgaXMgbm90IGVudW1lcmFibGVcbiAgLy8gYmVjYXVzZSBvdGhlcndpc2Ugc29tZSBwcm90b3R5cGUgbWFuaXB1bGF0aW9uIGluXG4gIC8vIHVzZXJsYW5kIHdpbGwgZmFpbFxuICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIHRoaXMuX3dyaXRhYmxlU3RhdGUgJiYgdGhpcy5fd3JpdGFibGVTdGF0ZS5nZXRCdWZmZXIoKTtcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoRHVwbGV4LnByb3RvdHlwZSwgJ3dyaXRhYmxlTGVuZ3RoJywge1xuICAvLyBtYWtpbmcgaXQgZXhwbGljaXQgdGhpcyBwcm9wZXJ0eSBpcyBub3QgZW51bWVyYWJsZVxuICAvLyBiZWNhdXNlIG90aGVyd2lzZSBzb21lIHByb3RvdHlwZSBtYW5pcHVsYXRpb24gaW5cbiAgLy8gdXNlcmxhbmQgd2lsbCBmYWlsXG4gIGVudW1lcmFibGU6IGZhbHNlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gdGhpcy5fd3JpdGFibGVTdGF0ZS5sZW5ndGg7XG4gIH1cbn0pO1xuXG4vLyB0aGUgbm8taGFsZi1vcGVuIGVuZm9yY2VyXG5mdW5jdGlvbiBvbmVuZCgpIHtcbiAgLy8gSWYgdGhlIHdyaXRhYmxlIHNpZGUgZW5kZWQsIHRoZW4gd2UncmUgb2suXG4gIGlmICh0aGlzLl93cml0YWJsZVN0YXRlLmVuZGVkKSByZXR1cm47XG5cbiAgLy8gbm8gbW9yZSBkYXRhIGNhbiBiZSB3cml0dGVuLlxuICAvLyBCdXQgYWxsb3cgbW9yZSB3cml0ZXMgdG8gaGFwcGVuIGluIHRoaXMgdGljay5cbiAgcHJvY2Vzcy5uZXh0VGljayhvbkVuZE5ULCB0aGlzKTtcbn1cbmZ1bmN0aW9uIG9uRW5kTlQoc2VsZikge1xuICBzZWxmLmVuZCgpO1xufVxuT2JqZWN0LmRlZmluZVByb3BlcnR5KER1cGxleC5wcm90b3R5cGUsICdkZXN0cm95ZWQnLCB7XG4gIC8vIG1ha2luZyBpdCBleHBsaWNpdCB0aGlzIHByb3BlcnR5IGlzIG5vdCBlbnVtZXJhYmxlXG4gIC8vIGJlY2F1c2Ugb3RoZXJ3aXNlIHNvbWUgcHJvdG90eXBlIG1hbmlwdWxhdGlvbiBpblxuICAvLyB1c2VybGFuZCB3aWxsIGZhaWxcbiAgZW51bWVyYWJsZTogZmFsc2UsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIGlmICh0aGlzLl9yZWFkYWJsZVN0YXRlID09PSB1bmRlZmluZWQgfHwgdGhpcy5fd3JpdGFibGVTdGF0ZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLl9yZWFkYWJsZVN0YXRlLmRlc3Ryb3llZCAmJiB0aGlzLl93cml0YWJsZVN0YXRlLmRlc3Ryb3llZDtcbiAgfSxcbiAgc2V0OiBmdW5jdGlvbiBzZXQodmFsdWUpIHtcbiAgICAvLyB3ZSBpZ25vcmUgdGhlIHZhbHVlIGlmIHRoZSBzdHJlYW1cbiAgICAvLyBoYXMgbm90IGJlZW4gaW5pdGlhbGl6ZWQgeWV0XG4gICAgaWYgKHRoaXMuX3JlYWRhYmxlU3RhdGUgPT09IHVuZGVmaW5lZCB8fCB0aGlzLl93cml0YWJsZVN0YXRlID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyBiYWNrd2FyZCBjb21wYXRpYmlsaXR5LCB0aGUgdXNlciBpcyBleHBsaWNpdGx5XG4gICAgLy8gbWFuYWdpbmcgZGVzdHJveWVkXG4gICAgdGhpcy5fcmVhZGFibGVTdGF0ZS5kZXN0cm95ZWQgPSB2YWx1ZTtcbiAgICB0aGlzLl93cml0YWJsZVN0YXRlLmRlc3Ryb3llZCA9IHZhbHVlO1xuICB9XG59KTsiXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///25382\n")},25540:(__unused_webpack___webpack_module__,__webpack_exports__,__webpack_require__)=>{"use strict";eval("\n// EXPORTS\n__webpack_require__.d(__webpack_exports__, {\n A: () => (/* binding */ _inheritsLoose)\n});\n\n;// ./node_modules/@babel/runtime/helpers/esm/setPrototypeOf.js\nfunction _setPrototypeOf(t, e) {\n return _setPrototypeOf = Object.setPrototypeOf ? Object.setPrototypeOf.bind() : function (t, e) {\n return t.__proto__ = e, t;\n }, _setPrototypeOf(t, e);\n}\n\n;// ./node_modules/@babel/runtime/helpers/esm/inheritsLoose.js\n\nfunction _inheritsLoose(t, o) {\n t.prototype = Object.create(o.prototype), t.prototype.constructor = t, _setPrototypeOf(t, o);\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMjU1NDAuanMiLCJtYXBwaW5ncyI6Ijs7Ozs7OztBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQ0pBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vaXRnLW5leHRnZW4tZnJvbnRlbmQvLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vc2V0UHJvdG90eXBlT2YuanM/NGZiMSIsIndlYnBhY2s6Ly9pdGctbmV4dGdlbi1mcm9udGVuZC8uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9pbmhlcml0c0xvb3NlLmpzP2UwYzAiXSwic291cmNlc0NvbnRlbnQiOlsiZnVuY3Rpb24gX3NldFByb3RvdHlwZU9mKHQsIGUpIHtcbiAgcmV0dXJuIF9zZXRQcm90b3R5cGVPZiA9IE9iamVjdC5zZXRQcm90b3R5cGVPZiA/IE9iamVjdC5zZXRQcm90b3R5cGVPZi5iaW5kKCkgOiBmdW5jdGlvbiAodCwgZSkge1xuICAgIHJldHVybiB0Ll9fcHJvdG9fXyA9IGUsIHQ7XG4gIH0sIF9zZXRQcm90b3R5cGVPZih0LCBlKTtcbn1cbmV4cG9ydCB7IF9zZXRQcm90b3R5cGVPZiBhcyBkZWZhdWx0IH07IiwiaW1wb3J0IHNldFByb3RvdHlwZU9mIGZyb20gXCIuL3NldFByb3RvdHlwZU9mLmpzXCI7XG5mdW5jdGlvbiBfaW5oZXJpdHNMb29zZSh0LCBvKSB7XG4gIHQucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShvLnByb3RvdHlwZSksIHQucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gdCwgc2V0UHJvdG90eXBlT2YodCwgbyk7XG59XG5leHBvcnQgeyBfaW5oZXJpdHNMb29zZSBhcyBkZWZhdWx0IH07Il0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///25540\n")},25765:(I,g,t)=>{"use strict";I.exports=t.p+"c6302cbc175a850d08fb.png"},26111:function(__unused_webpack_module,__unused_webpack_exports,__webpack_require__){eval("//! moment.js locale configuration\n//! locale : German (Austria) [de-at]\n//! author : lluchs : https://github.com/lluchs\n//! author: Menelion Elensúle: https://github.com/Oire\n//! author : Martin Groller : https://github.com/MadMG\n//! author : Mikolaj Dadela : https://github.com/mik01aj\n\n;(function (global, factory) {\n true ? factory(__webpack_require__(95093)) :\n 0\n}(this, (function (moment) { 'use strict';\n\n //! moment.js locale configuration\n\n function processRelativeTime(number, withoutSuffix, key, isFuture) {\n var format = {\n m: ['eine Minute', 'einer Minute'],\n h: ['eine Stunde', 'einer Stunde'],\n d: ['ein Tag', 'einem Tag'],\n dd: [number + ' Tage', number + ' Tagen'],\n w: ['eine Woche', 'einer Woche'],\n M: ['ein Monat', 'einem Monat'],\n MM: [number + ' Monate', number + ' Monaten'],\n y: ['ein Jahr', 'einem Jahr'],\n yy: [number + ' Jahre', number + ' Jahren'],\n };\n return withoutSuffix ? format[key][0] : format[key][1];\n }\n\n var deAt = moment.defineLocale('de-at', {\n months: 'Jänner_Februar_März_April_Mai_Juni_Juli_August_September_Oktober_November_Dezember'.split(\n '_'\n ),\n monthsShort:\n 'Jän._Feb._März_Apr._Mai_Juni_Juli_Aug._Sep._Okt._Nov._Dez.'.split('_'),\n monthsParseExact: true,\n weekdays:\n 'Sonntag_Montag_Dienstag_Mittwoch_Donnerstag_Freitag_Samstag'.split(\n '_'\n ),\n weekdaysShort: 'So._Mo._Di._Mi._Do._Fr._Sa.'.split('_'),\n weekdaysMin: 'So_Mo_Di_Mi_Do_Fr_Sa'.split('_'),\n weekdaysParseExact: true,\n longDateFormat: {\n LT: 'HH:mm',\n LTS: 'HH:mm:ss',\n L: 'DD.MM.YYYY',\n LL: 'D. MMMM YYYY',\n LLL: 'D. MMMM YYYY HH:mm',\n LLLL: 'dddd, D. MMMM YYYY HH:mm',\n },\n calendar: {\n sameDay: '[heute um] LT [Uhr]',\n sameElse: 'L',\n nextDay: '[morgen um] LT [Uhr]',\n nextWeek: 'dddd [um] LT [Uhr]',\n lastDay: '[gestern um] LT [Uhr]',\n lastWeek: '[letzten] dddd [um] LT [Uhr]',\n },\n relativeTime: {\n future: 'in %s',\n past: 'vor %s',\n s: 'ein paar Sekunden',\n ss: '%d Sekunden',\n m: processRelativeTime,\n mm: '%d Minuten',\n h: processRelativeTime,\n hh: '%d Stunden',\n d: processRelativeTime,\n dd: processRelativeTime,\n w: processRelativeTime,\n ww: '%d Wochen',\n M: processRelativeTime,\n MM: processRelativeTime,\n y: processRelativeTime,\n yy: processRelativeTime,\n },\n dayOfMonthOrdinalParse: /\\d{1,2}\\./,\n ordinal: '%d.',\n week: {\n dow: 1, // Monday is the first day of the week.\n doy: 4, // The week that contains Jan 4th is the first week of the year.\n },\n });\n\n return deAt;\n\n})));\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMjYxMTEuanMiLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9pdGctbmV4dGdlbi1mcm9udGVuZC8uL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL2RlLWF0LmpzP2IzZWIiXSwic291cmNlc0NvbnRlbnQiOlsiLy8hIG1vbWVudC5qcyBsb2NhbGUgY29uZmlndXJhdGlvblxuLy8hIGxvY2FsZSA6IEdlcm1hbiAoQXVzdHJpYSkgW2RlLWF0XVxuLy8hIGF1dGhvciA6IGxsdWNocyA6IGh0dHBzOi8vZ2l0aHViLmNvbS9sbHVjaHNcbi8vISBhdXRob3I6IE1lbmVsaW9uIEVsZW5zw7psZTogaHR0cHM6Ly9naXRodWIuY29tL09pcmVcbi8vISBhdXRob3IgOiBNYXJ0aW4gR3JvbGxlciA6IGh0dHBzOi8vZ2l0aHViLmNvbS9NYWRNR1xuLy8hIGF1dGhvciA6IE1pa29sYWogRGFkZWxhIDogaHR0cHM6Ly9naXRodWIuY29tL21pazAxYWpcblxuOyhmdW5jdGlvbiAoZ2xvYmFsLCBmYWN0b3J5KSB7XG4gICB0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcgJiYgdHlwZW9mIG1vZHVsZSAhPT0gJ3VuZGVmaW5lZCdcbiAgICAgICAmJiB0eXBlb2YgcmVxdWlyZSA9PT0gJ2Z1bmN0aW9uJyA/IGZhY3RvcnkocmVxdWlyZSgnLi4vbW9tZW50JykpIDpcbiAgIHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgZGVmaW5lLmFtZCA/IGRlZmluZShbJy4uL21vbWVudCddLCBmYWN0b3J5KSA6XG4gICBmYWN0b3J5KGdsb2JhbC5tb21lbnQpXG59KHRoaXMsIChmdW5jdGlvbiAobW9tZW50KSB7ICd1c2Ugc3RyaWN0JztcblxuICAgIC8vISBtb21lbnQuanMgbG9jYWxlIGNvbmZpZ3VyYXRpb25cblxuICAgIGZ1bmN0aW9uIHByb2Nlc3NSZWxhdGl2ZVRpbWUobnVtYmVyLCB3aXRob3V0U3VmZml4LCBrZXksIGlzRnV0dXJlKSB7XG4gICAgICAgIHZhciBmb3JtYXQgPSB7XG4gICAgICAgICAgICBtOiBbJ2VpbmUgTWludXRlJywgJ2VpbmVyIE1pbnV0ZSddLFxuICAgICAgICAgICAgaDogWydlaW5lIFN0dW5kZScsICdlaW5lciBTdHVuZGUnXSxcbiAgICAgICAgICAgIGQ6IFsnZWluIFRhZycsICdlaW5lbSBUYWcnXSxcbiAgICAgICAgICAgIGRkOiBbbnVtYmVyICsgJyBUYWdlJywgbnVtYmVyICsgJyBUYWdlbiddLFxuICAgICAgICAgICAgdzogWydlaW5lIFdvY2hlJywgJ2VpbmVyIFdvY2hlJ10sXG4gICAgICAgICAgICBNOiBbJ2VpbiBNb25hdCcsICdlaW5lbSBNb25hdCddLFxuICAgICAgICAgICAgTU06IFtudW1iZXIgKyAnIE1vbmF0ZScsIG51bWJlciArICcgTW9uYXRlbiddLFxuICAgICAgICAgICAgeTogWydlaW4gSmFocicsICdlaW5lbSBKYWhyJ10sXG4gICAgICAgICAgICB5eTogW251bWJlciArICcgSmFocmUnLCBudW1iZXIgKyAnIEphaHJlbiddLFxuICAgICAgICB9O1xuICAgICAgICByZXR1cm4gd2l0aG91dFN1ZmZpeCA/IGZvcm1hdFtrZXldWzBdIDogZm9ybWF0W2tleV1bMV07XG4gICAgfVxuXG4gICAgdmFyIGRlQXQgPSBtb21lbnQuZGVmaW5lTG9jYWxlKCdkZS1hdCcsIHtcbiAgICAgICAgbW9udGhzOiAnSsOkbm5lcl9GZWJydWFyX03DpHJ6X0FwcmlsX01haV9KdW5pX0p1bGlfQXVndXN0X1NlcHRlbWJlcl9Pa3RvYmVyX05vdmVtYmVyX0RlemVtYmVyJy5zcGxpdChcbiAgICAgICAgICAgICdfJ1xuICAgICAgICApLFxuICAgICAgICBtb250aHNTaG9ydDpcbiAgICAgICAgICAgICdKw6RuLl9GZWIuX03DpHJ6X0Fwci5fTWFpX0p1bmlfSnVsaV9BdWcuX1NlcC5fT2t0Ll9Ob3YuX0Rlei4nLnNwbGl0KCdfJyksXG4gICAgICAgIG1vbnRoc1BhcnNlRXhhY3Q6IHRydWUsXG4gICAgICAgIHdlZWtkYXlzOlxuICAgICAgICAgICAgJ1Nvbm50YWdfTW9udGFnX0RpZW5zdGFnX01pdHR3b2NoX0Rvbm5lcnN0YWdfRnJlaXRhZ19TYW1zdGFnJy5zcGxpdChcbiAgICAgICAgICAgICAgICAnXydcbiAgICAgICAgICAgICksXG4gICAgICAgIHdlZWtkYXlzU2hvcnQ6ICdTby5fTW8uX0RpLl9NaS5fRG8uX0ZyLl9TYS4nLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzTWluOiAnU29fTW9fRGlfTWlfRG9fRnJfU2EnLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzUGFyc2VFeGFjdDogdHJ1ZSxcbiAgICAgICAgbG9uZ0RhdGVGb3JtYXQ6IHtcbiAgICAgICAgICAgIExUOiAnSEg6bW0nLFxuICAgICAgICAgICAgTFRTOiAnSEg6bW06c3MnLFxuICAgICAgICAgICAgTDogJ0RELk1NLllZWVknLFxuICAgICAgICAgICAgTEw6ICdELiBNTU1NIFlZWVknLFxuICAgICAgICAgICAgTExMOiAnRC4gTU1NTSBZWVlZIEhIOm1tJyxcbiAgICAgICAgICAgIExMTEw6ICdkZGRkLCBELiBNTU1NIFlZWVkgSEg6bW0nLFxuICAgICAgICB9LFxuICAgICAgICBjYWxlbmRhcjoge1xuICAgICAgICAgICAgc2FtZURheTogJ1toZXV0ZSB1bV0gTFQgW1Vocl0nLFxuICAgICAgICAgICAgc2FtZUVsc2U6ICdMJyxcbiAgICAgICAgICAgIG5leHREYXk6ICdbbW9yZ2VuIHVtXSBMVCBbVWhyXScsXG4gICAgICAgICAgICBuZXh0V2VlazogJ2RkZGQgW3VtXSBMVCBbVWhyXScsXG4gICAgICAgICAgICBsYXN0RGF5OiAnW2dlc3Rlcm4gdW1dIExUIFtVaHJdJyxcbiAgICAgICAgICAgIGxhc3RXZWVrOiAnW2xldHp0ZW5dIGRkZGQgW3VtXSBMVCBbVWhyXScsXG4gICAgICAgIH0sXG4gICAgICAgIHJlbGF0aXZlVGltZToge1xuICAgICAgICAgICAgZnV0dXJlOiAnaW4gJXMnLFxuICAgICAgICAgICAgcGFzdDogJ3ZvciAlcycsXG4gICAgICAgICAgICBzOiAnZWluIHBhYXIgU2VrdW5kZW4nLFxuICAgICAgICAgICAgc3M6ICclZCBTZWt1bmRlbicsXG4gICAgICAgICAgICBtOiBwcm9jZXNzUmVsYXRpdmVUaW1lLFxuICAgICAgICAgICAgbW06ICclZCBNaW51dGVuJyxcbiAgICAgICAgICAgIGg6IHByb2Nlc3NSZWxhdGl2ZVRpbWUsXG4gICAgICAgICAgICBoaDogJyVkIFN0dW5kZW4nLFxuICAgICAgICAgICAgZDogcHJvY2Vzc1JlbGF0aXZlVGltZSxcbiAgICAgICAgICAgIGRkOiBwcm9jZXNzUmVsYXRpdmVUaW1lLFxuICAgICAgICAgICAgdzogcHJvY2Vzc1JlbGF0aXZlVGltZSxcbiAgICAgICAgICAgIHd3OiAnJWQgV29jaGVuJyxcbiAgICAgICAgICAgIE06IHByb2Nlc3NSZWxhdGl2ZVRpbWUsXG4gICAgICAgICAgICBNTTogcHJvY2Vzc1JlbGF0aXZlVGltZSxcbiAgICAgICAgICAgIHk6IHByb2Nlc3NSZWxhdGl2ZVRpbWUsXG4gICAgICAgICAgICB5eTogcHJvY2Vzc1JlbGF0aXZlVGltZSxcbiAgICAgICAgfSxcbiAgICAgICAgZGF5T2ZNb250aE9yZGluYWxQYXJzZTogL1xcZHsxLDJ9XFwuLyxcbiAgICAgICAgb3JkaW5hbDogJyVkLicsXG4gICAgICAgIHdlZWs6IHtcbiAgICAgICAgICAgIGRvdzogMSwgLy8gTW9uZGF5IGlzIHRoZSBmaXJzdCBkYXkgb2YgdGhlIHdlZWsuXG4gICAgICAgICAgICBkb3k6IDQsIC8vIFRoZSB3ZWVrIHRoYXQgY29udGFpbnMgSmFuIDR0aCBpcyB0aGUgZmlyc3Qgd2VlayBvZiB0aGUgeWVhci5cbiAgICAgICAgfSxcbiAgICB9KTtcblxuICAgIHJldHVybiBkZUF0O1xuXG59KSkpO1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///26111\n")},26308:function(__unused_webpack_module,__unused_webpack_exports,__webpack_require__){eval("//! moment.js locale configuration\n//! locale : Croatian [hr]\n//! author : Bojan Marković : https://github.com/bmarkovic\n\n;(function (global, factory) {\n true ? factory(__webpack_require__(95093)) :\n 0\n}(this, (function (moment) { 'use strict';\n\n //! moment.js locale configuration\n\n function translate(number, withoutSuffix, key) {\n var result = number + ' ';\n switch (key) {\n case 'ss':\n if (number === 1) {\n result += 'sekunda';\n } else if (number === 2 || number === 3 || number === 4) {\n result += 'sekunde';\n } else {\n result += 'sekundi';\n }\n return result;\n case 'm':\n return withoutSuffix ? 'jedna minuta' : 'jedne minute';\n case 'mm':\n if (number === 1) {\n result += 'minuta';\n } else if (number === 2 || number === 3 || number === 4) {\n result += 'minute';\n } else {\n result += 'minuta';\n }\n return result;\n case 'h':\n return withoutSuffix ? 'jedan sat' : 'jednog sata';\n case 'hh':\n if (number === 1) {\n result += 'sat';\n } else if (number === 2 || number === 3 || number === 4) {\n result += 'sata';\n } else {\n result += 'sati';\n }\n return result;\n case 'dd':\n if (number === 1) {\n result += 'dan';\n } else {\n result += 'dana';\n }\n return result;\n case 'MM':\n if (number === 1) {\n result += 'mjesec';\n } else if (number === 2 || number === 3 || number === 4) {\n result += 'mjeseca';\n } else {\n result += 'mjeseci';\n }\n return result;\n case 'yy':\n if (number === 1) {\n result += 'godina';\n } else if (number === 2 || number === 3 || number === 4) {\n result += 'godine';\n } else {\n result += 'godina';\n }\n return result;\n }\n }\n\n var hr = moment.defineLocale('hr', {\n months: {\n format: 'siječnja_veljače_ožujka_travnja_svibnja_lipnja_srpnja_kolovoza_rujna_listopada_studenoga_prosinca'.split(\n '_'\n ),\n standalone:\n 'siječanj_veljača_ožujak_travanj_svibanj_lipanj_srpanj_kolovoz_rujan_listopad_studeni_prosinac'.split(\n '_'\n ),\n },\n monthsShort:\n 'sij._velj._ožu._tra._svi._lip._srp._kol._ruj._lis._stu._pro.'.split(\n '_'\n ),\n monthsParseExact: true,\n weekdays: 'nedjelja_ponedjeljak_utorak_srijeda_četvrtak_petak_subota'.split(\n '_'\n ),\n weekdaysShort: 'ned._pon._uto._sri._čet._pet._sub.'.split('_'),\n weekdaysMin: 'ne_po_ut_sr_če_pe_su'.split('_'),\n weekdaysParseExact: true,\n longDateFormat: {\n LT: 'H:mm',\n LTS: 'H:mm:ss',\n L: 'DD.MM.YYYY',\n LL: 'Do MMMM YYYY',\n LLL: 'Do MMMM YYYY H:mm',\n LLLL: 'dddd, Do MMMM YYYY H:mm',\n },\n calendar: {\n sameDay: '[danas u] LT',\n nextDay: '[sutra u] LT',\n nextWeek: function () {\n switch (this.day()) {\n case 0:\n return '[u] [nedjelju] [u] LT';\n case 3:\n return '[u] [srijedu] [u] LT';\n case 6:\n return '[u] [subotu] [u] LT';\n case 1:\n case 2:\n case 4:\n case 5:\n return '[u] dddd [u] LT';\n }\n },\n lastDay: '[jučer u] LT',\n lastWeek: function () {\n switch (this.day()) {\n case 0:\n return '[prošlu] [nedjelju] [u] LT';\n case 3:\n return '[prošlu] [srijedu] [u] LT';\n case 6:\n return '[prošle] [subote] [u] LT';\n case 1:\n case 2:\n case 4:\n case 5:\n return '[prošli] dddd [u] LT';\n }\n },\n sameElse: 'L',\n },\n relativeTime: {\n future: 'za %s',\n past: 'prije %s',\n s: 'par sekundi',\n ss: translate,\n m: translate,\n mm: translate,\n h: translate,\n hh: translate,\n d: 'dan',\n dd: translate,\n M: 'mjesec',\n MM: translate,\n y: 'godinu',\n yy: translate,\n },\n dayOfMonthOrdinalParse: /\\d{1,2}\\./,\n ordinal: '%d.',\n week: {\n dow: 1, // Monday is the first day of the week.\n doy: 7, // The week that contains Jan 7th is the first week of the year.\n },\n });\n\n return hr;\n\n})));\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMjYzMDguanMiLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vaXRnLW5leHRnZW4tZnJvbnRlbmQvLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9oci5qcz80YmE5Il0sInNvdXJjZXNDb250ZW50IjpbIi8vISBtb21lbnQuanMgbG9jYWxlIGNvbmZpZ3VyYXRpb25cbi8vISBsb2NhbGUgOiBDcm9hdGlhbiBbaHJdXG4vLyEgYXV0aG9yIDogQm9qYW4gTWFya292acSHIDogaHR0cHM6Ly9naXRodWIuY29tL2JtYXJrb3ZpY1xuXG47KGZ1bmN0aW9uIChnbG9iYWwsIGZhY3RvcnkpIHtcbiAgIHR5cGVvZiBleHBvcnRzID09PSAnb2JqZWN0JyAmJiB0eXBlb2YgbW9kdWxlICE9PSAndW5kZWZpbmVkJ1xuICAgICAgICYmIHR5cGVvZiByZXF1aXJlID09PSAnZnVuY3Rpb24nID8gZmFjdG9yeShyZXF1aXJlKCcuLi9tb21lbnQnKSkgOlxuICAgdHlwZW9mIGRlZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiBkZWZpbmUuYW1kID8gZGVmaW5lKFsnLi4vbW9tZW50J10sIGZhY3RvcnkpIDpcbiAgIGZhY3RvcnkoZ2xvYmFsLm1vbWVudClcbn0odGhpcywgKGZ1bmN0aW9uIChtb21lbnQpIHsgJ3VzZSBzdHJpY3QnO1xuXG4gICAgLy8hIG1vbWVudC5qcyBsb2NhbGUgY29uZmlndXJhdGlvblxuXG4gICAgZnVuY3Rpb24gdHJhbnNsYXRlKG51bWJlciwgd2l0aG91dFN1ZmZpeCwga2V5KSB7XG4gICAgICAgIHZhciByZXN1bHQgPSBudW1iZXIgKyAnICc7XG4gICAgICAgIHN3aXRjaCAoa2V5KSB7XG4gICAgICAgICAgICBjYXNlICdzcyc6XG4gICAgICAgICAgICAgICAgaWYgKG51bWJlciA9PT0gMSkge1xuICAgICAgICAgICAgICAgICAgICByZXN1bHQgKz0gJ3Nla3VuZGEnO1xuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAobnVtYmVyID09PSAyIHx8IG51bWJlciA9PT0gMyB8fCBudW1iZXIgPT09IDQpIHtcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0ICs9ICdzZWt1bmRlJztcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICByZXN1bHQgKz0gJ3Nla3VuZGknO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgICAgICAgY2FzZSAnbSc6XG4gICAgICAgICAgICAgICAgcmV0dXJuIHdpdGhvdXRTdWZmaXggPyAnamVkbmEgbWludXRhJyA6ICdqZWRuZSBtaW51dGUnO1xuICAgICAgICAgICAgY2FzZSAnbW0nOlxuICAgICAgICAgICAgICAgIGlmIChudW1iZXIgPT09IDEpIHtcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0ICs9ICdtaW51dGEnO1xuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAobnVtYmVyID09PSAyIHx8IG51bWJlciA9PT0gMyB8fCBudW1iZXIgPT09IDQpIHtcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0ICs9ICdtaW51dGUnO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdCArPSAnbWludXRhJztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICAgICAgICAgIGNhc2UgJ2gnOlxuICAgICAgICAgICAgICAgIHJldHVybiB3aXRob3V0U3VmZml4ID8gJ2plZGFuIHNhdCcgOiAnamVkbm9nIHNhdGEnO1xuICAgICAgICAgICAgY2FzZSAnaGgnOlxuICAgICAgICAgICAgICAgIGlmIChudW1iZXIgPT09IDEpIHtcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0ICs9ICdzYXQnO1xuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAobnVtYmVyID09PSAyIHx8IG51bWJlciA9PT0gMyB8fCBudW1iZXIgPT09IDQpIHtcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0ICs9ICdzYXRhJztcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICByZXN1bHQgKz0gJ3NhdGknO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgICAgICAgY2FzZSAnZGQnOlxuICAgICAgICAgICAgICAgIGlmIChudW1iZXIgPT09IDEpIHtcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0ICs9ICdkYW4nO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdCArPSAnZGFuYSc7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgICAgICAgICBjYXNlICdNTSc6XG4gICAgICAgICAgICAgICAgaWYgKG51bWJlciA9PT0gMSkge1xuICAgICAgICAgICAgICAgICAgICByZXN1bHQgKz0gJ21qZXNlYyc7XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChudW1iZXIgPT09IDIgfHwgbnVtYmVyID09PSAzIHx8IG51bWJlciA9PT0gNCkge1xuICAgICAgICAgICAgICAgICAgICByZXN1bHQgKz0gJ21qZXNlY2EnO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdCArPSAnbWplc2VjaSc7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgICAgICAgICBjYXNlICd5eSc6XG4gICAgICAgICAgICAgICAgaWYgKG51bWJlciA9PT0gMSkge1xuICAgICAgICAgICAgICAgICAgICByZXN1bHQgKz0gJ2dvZGluYSc7XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChudW1iZXIgPT09IDIgfHwgbnVtYmVyID09PSAzIHx8IG51bWJlciA9PT0gNCkge1xuICAgICAgICAgICAgICAgICAgICByZXN1bHQgKz0gJ2dvZGluZSc7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0ICs9ICdnb2RpbmEnO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgdmFyIGhyID0gbW9tZW50LmRlZmluZUxvY2FsZSgnaHInLCB7XG4gICAgICAgIG1vbnRoczoge1xuICAgICAgICAgICAgZm9ybWF0OiAnc2lqZcSNbmphX3ZlbGphxI1lX2/FvnVqa2FfdHJhdm5qYV9zdmlibmphX2xpcG5qYV9zcnBuamFfa29sb3ZvemFfcnVqbmFfbGlzdG9wYWRhX3N0dWRlbm9nYV9wcm9zaW5jYScuc3BsaXQoXG4gICAgICAgICAgICAgICAgJ18nXG4gICAgICAgICAgICApLFxuICAgICAgICAgICAgc3RhbmRhbG9uZTpcbiAgICAgICAgICAgICAgICAnc2lqZcSNYW5qX3ZlbGphxI1hX2/FvnVqYWtfdHJhdmFual9zdmliYW5qX2xpcGFual9zcnBhbmpfa29sb3Zvel9ydWphbl9saXN0b3BhZF9zdHVkZW5pX3Byb3NpbmFjJy5zcGxpdChcbiAgICAgICAgICAgICAgICAgICAgJ18nXG4gICAgICAgICAgICAgICAgKSxcbiAgICAgICAgfSxcbiAgICAgICAgbW9udGhzU2hvcnQ6XG4gICAgICAgICAgICAnc2lqLl92ZWxqLl9vxb51Ll90cmEuX3N2aS5fbGlwLl9zcnAuX2tvbC5fcnVqLl9saXMuX3N0dS5fcHJvLicuc3BsaXQoXG4gICAgICAgICAgICAgICAgJ18nXG4gICAgICAgICAgICApLFxuICAgICAgICBtb250aHNQYXJzZUV4YWN0OiB0cnVlLFxuICAgICAgICB3ZWVrZGF5czogJ25lZGplbGphX3BvbmVkamVsamFrX3V0b3Jha19zcmlqZWRhX8SNZXR2cnRha19wZXRha19zdWJvdGEnLnNwbGl0KFxuICAgICAgICAgICAgJ18nXG4gICAgICAgICksXG4gICAgICAgIHdlZWtkYXlzU2hvcnQ6ICduZWQuX3Bvbi5fdXRvLl9zcmkuX8SNZXQuX3BldC5fc3ViLicuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXNNaW46ICduZV9wb191dF9zcl/EjWVfcGVfc3UnLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzUGFyc2VFeGFjdDogdHJ1ZSxcbiAgICAgICAgbG9uZ0RhdGVGb3JtYXQ6IHtcbiAgICAgICAgICAgIExUOiAnSDptbScsXG4gICAgICAgICAgICBMVFM6ICdIOm1tOnNzJyxcbiAgICAgICAgICAgIEw6ICdERC5NTS5ZWVlZJyxcbiAgICAgICAgICAgIExMOiAnRG8gTU1NTSBZWVlZJyxcbiAgICAgICAgICAgIExMTDogJ0RvIE1NTU0gWVlZWSBIOm1tJyxcbiAgICAgICAgICAgIExMTEw6ICdkZGRkLCBEbyBNTU1NIFlZWVkgSDptbScsXG4gICAgICAgIH0sXG4gICAgICAgIGNhbGVuZGFyOiB7XG4gICAgICAgICAgICBzYW1lRGF5OiAnW2RhbmFzIHVdIExUJyxcbiAgICAgICAgICAgIG5leHREYXk6ICdbc3V0cmEgdV0gTFQnLFxuICAgICAgICAgICAgbmV4dFdlZWs6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICBzd2l0Y2ggKHRoaXMuZGF5KCkpIHtcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAwOlxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICdbdV0gW25lZGplbGp1XSBbdV0gTFQnO1xuICAgICAgICAgICAgICAgICAgICBjYXNlIDM6XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gJ1t1XSBbc3JpamVkdV0gW3VdIExUJztcbiAgICAgICAgICAgICAgICAgICAgY2FzZSA2OlxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICdbdV0gW3N1Ym90dV0gW3VdIExUJztcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAxOlxuICAgICAgICAgICAgICAgICAgICBjYXNlIDI6XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgNDpcbiAgICAgICAgICAgICAgICAgICAgY2FzZSA1OlxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICdbdV0gZGRkZCBbdV0gTFQnO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBsYXN0RGF5OiAnW2p1xI1lciB1XSBMVCcsXG4gICAgICAgICAgICBsYXN0V2VlazogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIHN3aXRjaCAodGhpcy5kYXkoKSkge1xuICAgICAgICAgICAgICAgICAgICBjYXNlIDA6XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gJ1twcm/FoWx1XSBbbmVkamVsanVdIFt1XSBMVCc7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgMzpcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAnW3Byb8WhbHVdIFtzcmlqZWR1XSBbdV0gTFQnO1xuICAgICAgICAgICAgICAgICAgICBjYXNlIDY6XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gJ1twcm/FoWxlXSBbc3Vib3RlXSBbdV0gTFQnO1xuICAgICAgICAgICAgICAgICAgICBjYXNlIDE6XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgMjpcbiAgICAgICAgICAgICAgICAgICAgY2FzZSA0OlxuICAgICAgICAgICAgICAgICAgICBjYXNlIDU6XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gJ1twcm/FoWxpXSBkZGRkIFt1XSBMVCc7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHNhbWVFbHNlOiAnTCcsXG4gICAgICAgIH0sXG4gICAgICAgIHJlbGF0aXZlVGltZToge1xuICAgICAgICAgICAgZnV0dXJlOiAnemEgJXMnLFxuICAgICAgICAgICAgcGFzdDogJ3ByaWplICVzJyxcbiAgICAgICAgICAgIHM6ICdwYXIgc2VrdW5kaScsXG4gICAgICAgICAgICBzczogdHJhbnNsYXRlLFxuICAgICAgICAgICAgbTogdHJhbnNsYXRlLFxuICAgICAgICAgICAgbW06IHRyYW5zbGF0ZSxcbiAgICAgICAgICAgIGg6IHRyYW5zbGF0ZSxcbiAgICAgICAgICAgIGhoOiB0cmFuc2xhdGUsXG4gICAgICAgICAgICBkOiAnZGFuJyxcbiAgICAgICAgICAgIGRkOiB0cmFuc2xhdGUsXG4gICAgICAgICAgICBNOiAnbWplc2VjJyxcbiAgICAgICAgICAgIE1NOiB0cmFuc2xhdGUsXG4gICAgICAgICAgICB5OiAnZ29kaW51JyxcbiAgICAgICAgICAgIHl5OiB0cmFuc2xhdGUsXG4gICAgICAgIH0sXG4gICAgICAgIGRheU9mTW9udGhPcmRpbmFsUGFyc2U6IC9cXGR7MSwyfVxcLi8sXG4gICAgICAgIG9yZGluYWw6ICclZC4nLFxuICAgICAgICB3ZWVrOiB7XG4gICAgICAgICAgICBkb3c6IDEsIC8vIE1vbmRheSBpcyB0aGUgZmlyc3QgZGF5IG9mIHRoZSB3ZWVrLlxuICAgICAgICAgICAgZG95OiA3LCAvLyBUaGUgd2VlayB0aGF0IGNvbnRhaW5zIEphbiA3dGggaXMgdGhlIGZpcnN0IHdlZWsgb2YgdGhlIHllYXIuXG4gICAgICAgIH0sXG4gICAgfSk7XG5cbiAgICByZXR1cm4gaHI7XG5cbn0pKSk7XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///26308\n")},26435:function(__unused_webpack_module,__unused_webpack_exports,__webpack_require__){eval("//! moment.js locale configuration\n//! locale : French (Canada) [fr-ca]\n//! author : Jonathan Abourbih : https://github.com/jonbca\n\n;(function (global, factory) {\n true ? factory(__webpack_require__(95093)) :\n 0\n}(this, (function (moment) { 'use strict';\n\n //! moment.js locale configuration\n\n var frCa = moment.defineLocale('fr-ca', {\n months: 'janvier_février_mars_avril_mai_juin_juillet_août_septembre_octobre_novembre_décembre'.split(\n '_'\n ),\n monthsShort:\n 'janv._févr._mars_avr._mai_juin_juil._août_sept._oct._nov._déc.'.split(\n '_'\n ),\n monthsParseExact: true,\n weekdays: 'dimanche_lundi_mardi_mercredi_jeudi_vendredi_samedi'.split('_'),\n weekdaysShort: 'dim._lun._mar._mer._jeu._ven._sam.'.split('_'),\n weekdaysMin: 'di_lu_ma_me_je_ve_sa'.split('_'),\n weekdaysParseExact: true,\n longDateFormat: {\n LT: 'HH:mm',\n LTS: 'HH:mm:ss',\n L: 'YYYY-MM-DD',\n LL: 'D MMMM YYYY',\n LLL: 'D MMMM YYYY HH:mm',\n LLLL: 'dddd D MMMM YYYY HH:mm',\n },\n calendar: {\n sameDay: '[Aujourd’hui à] LT',\n nextDay: '[Demain à] LT',\n nextWeek: 'dddd [à] LT',\n lastDay: '[Hier à] LT',\n lastWeek: 'dddd [dernier à] LT',\n sameElse: 'L',\n },\n relativeTime: {\n future: 'dans %s',\n past: 'il y a %s',\n s: 'quelques secondes',\n ss: '%d secondes',\n m: 'une minute',\n mm: '%d minutes',\n h: 'une heure',\n hh: '%d heures',\n d: 'un jour',\n dd: '%d jours',\n M: 'un mois',\n MM: '%d mois',\n y: 'un an',\n yy: '%d ans',\n },\n dayOfMonthOrdinalParse: /\\d{1,2}(er|e)/,\n ordinal: function (number, period) {\n switch (period) {\n // Words with masculine grammatical gender: mois, trimestre, jour\n default:\n case 'M':\n case 'Q':\n case 'D':\n case 'DDD':\n case 'd':\n return number + (number === 1 ? 'er' : 'e');\n\n // Words with feminine grammatical gender: semaine\n case 'w':\n case 'W':\n return number + (number === 1 ? 're' : 'e');\n }\n },\n });\n\n return frCa;\n\n})));\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMjY0MzUuanMiLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9pdGctbmV4dGdlbi1mcm9udGVuZC8uL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL2ZyLWNhLmpzP2Q5ZjgiXSwic291cmNlc0NvbnRlbnQiOlsiLy8hIG1vbWVudC5qcyBsb2NhbGUgY29uZmlndXJhdGlvblxuLy8hIGxvY2FsZSA6IEZyZW5jaCAoQ2FuYWRhKSBbZnItY2FdXG4vLyEgYXV0aG9yIDogSm9uYXRoYW4gQWJvdXJiaWggOiBodHRwczovL2dpdGh1Yi5jb20vam9uYmNhXG5cbjsoZnVuY3Rpb24gKGdsb2JhbCwgZmFjdG9yeSkge1xuICAgdHlwZW9mIGV4cG9ydHMgPT09ICdvYmplY3QnICYmIHR5cGVvZiBtb2R1bGUgIT09ICd1bmRlZmluZWQnXG4gICAgICAgJiYgdHlwZW9mIHJlcXVpcmUgPT09ICdmdW5jdGlvbicgPyBmYWN0b3J5KHJlcXVpcmUoJy4uL21vbWVudCcpKSA6XG4gICB0eXBlb2YgZGVmaW5lID09PSAnZnVuY3Rpb24nICYmIGRlZmluZS5hbWQgPyBkZWZpbmUoWycuLi9tb21lbnQnXSwgZmFjdG9yeSkgOlxuICAgZmFjdG9yeShnbG9iYWwubW9tZW50KVxufSh0aGlzLCAoZnVuY3Rpb24gKG1vbWVudCkgeyAndXNlIHN0cmljdCc7XG5cbiAgICAvLyEgbW9tZW50LmpzIGxvY2FsZSBjb25maWd1cmF0aW9uXG5cbiAgICB2YXIgZnJDYSA9IG1vbWVudC5kZWZpbmVMb2NhbGUoJ2ZyLWNhJywge1xuICAgICAgICBtb250aHM6ICdqYW52aWVyX2bDqXZyaWVyX21hcnNfYXZyaWxfbWFpX2p1aW5fanVpbGxldF9hb8O7dF9zZXB0ZW1icmVfb2N0b2JyZV9ub3ZlbWJyZV9kw6ljZW1icmUnLnNwbGl0KFxuICAgICAgICAgICAgJ18nXG4gICAgICAgICksXG4gICAgICAgIG1vbnRoc1Nob3J0OlxuICAgICAgICAgICAgJ2phbnYuX2bDqXZyLl9tYXJzX2F2ci5fbWFpX2p1aW5fanVpbC5fYW/Du3Rfc2VwdC5fb2N0Ll9ub3YuX2TDqWMuJy5zcGxpdChcbiAgICAgICAgICAgICAgICAnXydcbiAgICAgICAgICAgICksXG4gICAgICAgIG1vbnRoc1BhcnNlRXhhY3Q6IHRydWUsXG4gICAgICAgIHdlZWtkYXlzOiAnZGltYW5jaGVfbHVuZGlfbWFyZGlfbWVyY3JlZGlfamV1ZGlfdmVuZHJlZGlfc2FtZWRpJy5zcGxpdCgnXycpLFxuICAgICAgICB3ZWVrZGF5c1Nob3J0OiAnZGltLl9sdW4uX21hci5fbWVyLl9qZXUuX3Zlbi5fc2FtLicuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXNNaW46ICdkaV9sdV9tYV9tZV9qZV92ZV9zYScuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXNQYXJzZUV4YWN0OiB0cnVlLFxuICAgICAgICBsb25nRGF0ZUZvcm1hdDoge1xuICAgICAgICAgICAgTFQ6ICdISDptbScsXG4gICAgICAgICAgICBMVFM6ICdISDptbTpzcycsXG4gICAgICAgICAgICBMOiAnWVlZWS1NTS1ERCcsXG4gICAgICAgICAgICBMTDogJ0QgTU1NTSBZWVlZJyxcbiAgICAgICAgICAgIExMTDogJ0QgTU1NTSBZWVlZIEhIOm1tJyxcbiAgICAgICAgICAgIExMTEw6ICdkZGRkIEQgTU1NTSBZWVlZIEhIOm1tJyxcbiAgICAgICAgfSxcbiAgICAgICAgY2FsZW5kYXI6IHtcbiAgICAgICAgICAgIHNhbWVEYXk6ICdbQXVqb3VyZOKAmWh1aSDDoF0gTFQnLFxuICAgICAgICAgICAgbmV4dERheTogJ1tEZW1haW4gw6BdIExUJyxcbiAgICAgICAgICAgIG5leHRXZWVrOiAnZGRkZCBbw6BdIExUJyxcbiAgICAgICAgICAgIGxhc3REYXk6ICdbSGllciDDoF0gTFQnLFxuICAgICAgICAgICAgbGFzdFdlZWs6ICdkZGRkIFtkZXJuaWVyIMOgXSBMVCcsXG4gICAgICAgICAgICBzYW1lRWxzZTogJ0wnLFxuICAgICAgICB9LFxuICAgICAgICByZWxhdGl2ZVRpbWU6IHtcbiAgICAgICAgICAgIGZ1dHVyZTogJ2RhbnMgJXMnLFxuICAgICAgICAgICAgcGFzdDogJ2lsIHkgYSAlcycsXG4gICAgICAgICAgICBzOiAncXVlbHF1ZXMgc2Vjb25kZXMnLFxuICAgICAgICAgICAgc3M6ICclZCBzZWNvbmRlcycsXG4gICAgICAgICAgICBtOiAndW5lIG1pbnV0ZScsXG4gICAgICAgICAgICBtbTogJyVkIG1pbnV0ZXMnLFxuICAgICAgICAgICAgaDogJ3VuZSBoZXVyZScsXG4gICAgICAgICAgICBoaDogJyVkIGhldXJlcycsXG4gICAgICAgICAgICBkOiAndW4gam91cicsXG4gICAgICAgICAgICBkZDogJyVkIGpvdXJzJyxcbiAgICAgICAgICAgIE06ICd1biBtb2lzJyxcbiAgICAgICAgICAgIE1NOiAnJWQgbW9pcycsXG4gICAgICAgICAgICB5OiAndW4gYW4nLFxuICAgICAgICAgICAgeXk6ICclZCBhbnMnLFxuICAgICAgICB9LFxuICAgICAgICBkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOiAvXFxkezEsMn0oZXJ8ZSkvLFxuICAgICAgICBvcmRpbmFsOiBmdW5jdGlvbiAobnVtYmVyLCBwZXJpb2QpIHtcbiAgICAgICAgICAgIHN3aXRjaCAocGVyaW9kKSB7XG4gICAgICAgICAgICAgICAgLy8gV29yZHMgd2l0aCBtYXNjdWxpbmUgZ3JhbW1hdGljYWwgZ2VuZGVyOiBtb2lzLCB0cmltZXN0cmUsIGpvdXJcbiAgICAgICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgIGNhc2UgJ00nOlxuICAgICAgICAgICAgICAgIGNhc2UgJ1EnOlxuICAgICAgICAgICAgICAgIGNhc2UgJ0QnOlxuICAgICAgICAgICAgICAgIGNhc2UgJ0RERCc6XG4gICAgICAgICAgICAgICAgY2FzZSAnZCc6XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBudW1iZXIgKyAobnVtYmVyID09PSAxID8gJ2VyJyA6ICdlJyk7XG5cbiAgICAgICAgICAgICAgICAvLyBXb3JkcyB3aXRoIGZlbWluaW5lIGdyYW1tYXRpY2FsIGdlbmRlcjogc2VtYWluZVxuICAgICAgICAgICAgICAgIGNhc2UgJ3cnOlxuICAgICAgICAgICAgICAgIGNhc2UgJ1cnOlxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gbnVtYmVyICsgKG51bWJlciA9PT0gMSA/ICdyZScgOiAnZScpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuICAgIH0pO1xuXG4gICAgcmV0dXJuIGZyQ2E7XG5cbn0pKSk7XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///26435\n")},27088:function(__unused_webpack_module,__unused_webpack_exports,__webpack_require__){eval("//! moment.js locale configuration\n//! locale : Kazakh [kk]\n//! authors : Nurlan Rakhimzhanov : https://github.com/nurlan\n\n;(function (global, factory) {\n true ? factory(__webpack_require__(95093)) :\n 0\n}(this, (function (moment) { 'use strict';\n\n //! moment.js locale configuration\n\n var suffixes = {\n 0: '-ші',\n 1: '-ші',\n 2: '-ші',\n 3: '-ші',\n 4: '-ші',\n 5: '-ші',\n 6: '-шы',\n 7: '-ші',\n 8: '-ші',\n 9: '-шы',\n 10: '-шы',\n 20: '-шы',\n 30: '-шы',\n 40: '-шы',\n 50: '-ші',\n 60: '-шы',\n 70: '-ші',\n 80: '-ші',\n 90: '-шы',\n 100: '-ші',\n };\n\n var kk = moment.defineLocale('kk', {\n months: 'қаңтар_ақпан_наурыз_сәуір_мамыр_маусым_шілде_тамыз_қыркүйек_қазан_қараша_желтоқсан'.split(\n '_'\n ),\n monthsShort: 'қаң_ақп_нау_сәу_мам_мау_шіл_там_қыр_қаз_қар_жел'.split('_'),\n weekdays: 'жексенбі_дүйсенбі_сейсенбі_сәрсенбі_бейсенбі_жұма_сенбі'.split(\n '_'\n ),\n weekdaysShort: 'жек_дүй_сей_сәр_бей_жұм_сен'.split('_'),\n weekdaysMin: 'жк_дй_сй_ср_бй_жм_сн'.split('_'),\n longDateFormat: {\n LT: 'HH:mm',\n LTS: 'HH:mm:ss',\n L: 'DD.MM.YYYY',\n LL: 'D MMMM YYYY',\n LLL: 'D MMMM YYYY HH:mm',\n LLLL: 'dddd, D MMMM YYYY HH:mm',\n },\n calendar: {\n sameDay: '[Бүгін сағат] LT',\n nextDay: '[Ертең сағат] LT',\n nextWeek: 'dddd [сағат] LT',\n lastDay: '[Кеше сағат] LT',\n lastWeek: '[Өткен аптаның] dddd [сағат] LT',\n sameElse: 'L',\n },\n relativeTime: {\n future: '%s ішінде',\n past: '%s бұрын',\n s: 'бірнеше секунд',\n ss: '%d секунд',\n m: 'бір минут',\n mm: '%d минут',\n h: 'бір сағат',\n hh: '%d сағат',\n d: 'бір күн',\n dd: '%d күн',\n M: 'бір ай',\n MM: '%d ай',\n y: 'бір жыл',\n yy: '%d жыл',\n },\n dayOfMonthOrdinalParse: /\\d{1,2}-(ші|шы)/,\n ordinal: function (number) {\n var a = number % 10,\n b = number >= 100 ? 100 : null;\n return number + (suffixes[number] || suffixes[a] || suffixes[b]);\n },\n week: {\n dow: 1, // Monday is the first day of the week.\n doy: 7, // The week that contains Jan 7th is the first week of the year.\n },\n });\n\n return kk;\n\n})));\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMjcwODguanMiLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9pdGctbmV4dGdlbi1mcm9udGVuZC8uL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL2trLmpzPzZkNzkiXSwic291cmNlc0NvbnRlbnQiOlsiLy8hIG1vbWVudC5qcyBsb2NhbGUgY29uZmlndXJhdGlvblxuLy8hIGxvY2FsZSA6IEthemFraCBba2tdXG4vLyEgYXV0aG9ycyA6IE51cmxhbiBSYWtoaW16aGFub3YgOiBodHRwczovL2dpdGh1Yi5jb20vbnVybGFuXG5cbjsoZnVuY3Rpb24gKGdsb2JhbCwgZmFjdG9yeSkge1xuICAgdHlwZW9mIGV4cG9ydHMgPT09ICdvYmplY3QnICYmIHR5cGVvZiBtb2R1bGUgIT09ICd1bmRlZmluZWQnXG4gICAgICAgJiYgdHlwZW9mIHJlcXVpcmUgPT09ICdmdW5jdGlvbicgPyBmYWN0b3J5KHJlcXVpcmUoJy4uL21vbWVudCcpKSA6XG4gICB0eXBlb2YgZGVmaW5lID09PSAnZnVuY3Rpb24nICYmIGRlZmluZS5hbWQgPyBkZWZpbmUoWycuLi9tb21lbnQnXSwgZmFjdG9yeSkgOlxuICAgZmFjdG9yeShnbG9iYWwubW9tZW50KVxufSh0aGlzLCAoZnVuY3Rpb24gKG1vbWVudCkgeyAndXNlIHN0cmljdCc7XG5cbiAgICAvLyEgbW9tZW50LmpzIGxvY2FsZSBjb25maWd1cmF0aW9uXG5cbiAgICB2YXIgc3VmZml4ZXMgPSB7XG4gICAgICAgIDA6ICct0YjRlicsXG4gICAgICAgIDE6ICct0YjRlicsXG4gICAgICAgIDI6ICct0YjRlicsXG4gICAgICAgIDM6ICct0YjRlicsXG4gICAgICAgIDQ6ICct0YjRlicsXG4gICAgICAgIDU6ICct0YjRlicsXG4gICAgICAgIDY6ICct0YjRiycsXG4gICAgICAgIDc6ICct0YjRlicsXG4gICAgICAgIDg6ICct0YjRlicsXG4gICAgICAgIDk6ICct0YjRiycsXG4gICAgICAgIDEwOiAnLdGI0YsnLFxuICAgICAgICAyMDogJy3RiNGLJyxcbiAgICAgICAgMzA6ICct0YjRiycsXG4gICAgICAgIDQwOiAnLdGI0YsnLFxuICAgICAgICA1MDogJy3RiNGWJyxcbiAgICAgICAgNjA6ICct0YjRiycsXG4gICAgICAgIDcwOiAnLdGI0ZYnLFxuICAgICAgICA4MDogJy3RiNGWJyxcbiAgICAgICAgOTA6ICct0YjRiycsXG4gICAgICAgIDEwMDogJy3RiNGWJyxcbiAgICB9O1xuXG4gICAgdmFyIGtrID0gbW9tZW50LmRlZmluZUxvY2FsZSgna2snLCB7XG4gICAgICAgIG1vbnRoczogJ9Kb0LDSo9GC0LDRgF/QsNKb0L/QsNC9X9C90LDRg9GA0YvQt1/RgdOZ0YPRltGAX9C80LDQvNGL0YBf0LzQsNGD0YHRi9C8X9GI0ZbQu9C00LVf0YLQsNC80YvQt1/Sm9GL0YDQutKv0LnQtdC6X9Kb0LDQt9Cw0L1f0pvQsNGA0LDRiNCwX9C20LXQu9GC0L7Sm9GB0LDQvScuc3BsaXQoXG4gICAgICAgICAgICAnXydcbiAgICAgICAgKSxcbiAgICAgICAgbW9udGhzU2hvcnQ6ICfSm9Cw0qNf0LDSm9C/X9C90LDRg1/RgdOZ0YNf0LzQsNC8X9C80LDRg1/RiNGW0Ltf0YLQsNC8X9Kb0YvRgF/Sm9Cw0Ldf0pvQsNGAX9C20LXQuycuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXM6ICfQttC10LrRgdC10L3QsdGWX9C00q/QudGB0LXQvdCx0ZZf0YHQtdC50YHQtdC90LHRll/RgdOZ0YDRgdC10L3QsdGWX9Cx0LXQudGB0LXQvdCx0ZZf0LbSsdC80LBf0YHQtdC90LHRlicuc3BsaXQoXG4gICAgICAgICAgICAnXydcbiAgICAgICAgKSxcbiAgICAgICAgd2Vla2RheXNTaG9ydDogJ9C20LXQul/QtNKv0Llf0YHQtdC5X9GB05nRgF/QsdC10Llf0LbSsdC8X9GB0LXQvScuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXNNaW46ICfQttC6X9C00Llf0YHQuV/RgdGAX9Cx0Llf0LbQvF/RgdC9Jy5zcGxpdCgnXycpLFxuICAgICAgICBsb25nRGF0ZUZvcm1hdDoge1xuICAgICAgICAgICAgTFQ6ICdISDptbScsXG4gICAgICAgICAgICBMVFM6ICdISDptbTpzcycsXG4gICAgICAgICAgICBMOiAnREQuTU0uWVlZWScsXG4gICAgICAgICAgICBMTDogJ0QgTU1NTSBZWVlZJyxcbiAgICAgICAgICAgIExMTDogJ0QgTU1NTSBZWVlZIEhIOm1tJyxcbiAgICAgICAgICAgIExMTEw6ICdkZGRkLCBEIE1NTU0gWVlZWSBISDptbScsXG4gICAgICAgIH0sXG4gICAgICAgIGNhbGVuZGFyOiB7XG4gICAgICAgICAgICBzYW1lRGF5OiAnW9CR0q/Qs9GW0L0g0YHQsNKT0LDRgl0gTFQnLFxuICAgICAgICAgICAgbmV4dERheTogJ1vQldGA0YLQtdKjINGB0LDSk9Cw0YJdIExUJyxcbiAgICAgICAgICAgIG5leHRXZWVrOiAnZGRkZCBb0YHQsNKT0LDRgl0gTFQnLFxuICAgICAgICAgICAgbGFzdERheTogJ1vQmtC10YjQtSDRgdCw0pPQsNGCXSBMVCcsXG4gICAgICAgICAgICBsYXN0V2VlazogJ1vTqNGC0LrQtdC9INCw0L/RgtCw0L3Ri9KjXSBkZGRkIFvRgdCw0pPQsNGCXSBMVCcsXG4gICAgICAgICAgICBzYW1lRWxzZTogJ0wnLFxuICAgICAgICB9LFxuICAgICAgICByZWxhdGl2ZVRpbWU6IHtcbiAgICAgICAgICAgIGZ1dHVyZTogJyVzINGW0YjRltC90LTQtScsXG4gICAgICAgICAgICBwYXN0OiAnJXMg0LHSsdGA0YvQvScsXG4gICAgICAgICAgICBzOiAn0LHRltGA0L3QtdGI0LUg0YHQtdC60YPQvdC0JyxcbiAgICAgICAgICAgIHNzOiAnJWQg0YHQtdC60YPQvdC0JyxcbiAgICAgICAgICAgIG06ICfQsdGW0YAg0LzQuNC90YPRgicsXG4gICAgICAgICAgICBtbTogJyVkINC80LjQvdGD0YInLFxuICAgICAgICAgICAgaDogJ9Cx0ZbRgCDRgdCw0pPQsNGCJyxcbiAgICAgICAgICAgIGhoOiAnJWQg0YHQsNKT0LDRgicsXG4gICAgICAgICAgICBkOiAn0LHRltGAINC60q/QvScsXG4gICAgICAgICAgICBkZDogJyVkINC60q/QvScsXG4gICAgICAgICAgICBNOiAn0LHRltGAINCw0LknLFxuICAgICAgICAgICAgTU06ICclZCDQsNC5JyxcbiAgICAgICAgICAgIHk6ICfQsdGW0YAg0LbRi9C7JyxcbiAgICAgICAgICAgIHl5OiAnJWQg0LbRi9C7JyxcbiAgICAgICAgfSxcbiAgICAgICAgZGF5T2ZNb250aE9yZGluYWxQYXJzZTogL1xcZHsxLDJ9LSjRiNGWfNGI0YspLyxcbiAgICAgICAgb3JkaW5hbDogZnVuY3Rpb24gKG51bWJlcikge1xuICAgICAgICAgICAgdmFyIGEgPSBudW1iZXIgJSAxMCxcbiAgICAgICAgICAgICAgICBiID0gbnVtYmVyID49IDEwMCA/IDEwMCA6IG51bGw7XG4gICAgICAgICAgICByZXR1cm4gbnVtYmVyICsgKHN1ZmZpeGVzW251bWJlcl0gfHwgc3VmZml4ZXNbYV0gfHwgc3VmZml4ZXNbYl0pO1xuICAgICAgICB9LFxuICAgICAgICB3ZWVrOiB7XG4gICAgICAgICAgICBkb3c6IDEsIC8vIE1vbmRheSBpcyB0aGUgZmlyc3QgZGF5IG9mIHRoZSB3ZWVrLlxuICAgICAgICAgICAgZG95OiA3LCAvLyBUaGUgd2VlayB0aGF0IGNvbnRhaW5zIEphbiA3dGggaXMgdGhlIGZpcnN0IHdlZWsgb2YgdGhlIHllYXIuXG4gICAgICAgIH0sXG4gICAgfSk7XG5cbiAgICByZXR1cm4ga2s7XG5cbn0pKSk7XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///27088\n")},27213:(I,g,t)=>{"use strict";I.exports=t.p+"b98aa226493aabf2efd0.png"},27292:(I,g,t)=>{"use strict";I.exports=t.p+"52407e3727b3a7e2c275.png"},27720:(I,g,t)=>{"use strict";I.exports=t.p+"6c2b58f0aa9538938cd7.png"},27779:(I,g,t)=>{"use strict";I.exports=t.p+"65813c1f494504807a5b.png"},28036:(I,g,t)=>{"use strict";I.exports=t.p+"8006172a7f4c87cec6f5.png"},28076:(__unused_webpack___webpack_module__,__webpack_exports__,__webpack_require__)=>{"use strict";eval('// ESM COMPAT FLAG\n__webpack_require__.r(__webpack_exports__);\n\n// EXPORTS\n__webpack_require__.d(__webpack_exports__, {\n AttributeInputCallback: () => (/* reexport */ s),\n Auth: () => (/* reexport */ J),\n CallbackType: () => (/* reexport */ enums_l),\n ChoiceCallback: () => (/* reexport */ choice_callback_h),\n Config: () => (/* reexport */ config_c),\n ConfirmationCallback: () => (/* reexport */ confirmation_callback_i),\n Deferred: () => (/* reexport */ deferred_t),\n DeviceProfileCallback: () => (/* reexport */ device_profile_callback_i),\n ErrorCode: () => (/* reexport */ t),\n FRAuth: () => (/* reexport */ fr_auth_f),\n FRCallback: () => (/* reexport */ callbacks_r),\n FRDevice: () => (/* reexport */ O),\n FRLoginFailure: () => (/* reexport */ i),\n FRLoginSuccess: () => (/* reexport */ fr_login_success_r),\n FRPolicy: () => (/* reexport */ y),\n FRQRCode: () => (/* reexport */ fr_qr_code_i),\n FRRecoveryCodes: () => (/* reexport */ fr_recovery_codes_p),\n FRStep: () => (/* reexport */ fr_step_i),\n FRUser: () => (/* reexport */ k),\n FRWebAuthn: () => (/* reexport */ fr_webauthn_T),\n HiddenValueCallback: () => (/* reexport */ hidden_value_callback_t),\n HttpClient: () => (/* reexport */ D),\n KbaCreateCallback: () => (/* reexport */ kba_create_callback_u),\n LocalStorage: () => (/* reexport */ storage_r),\n MetadataCallback: () => (/* reexport */ metadata_callback_s),\n NameCallback: () => (/* reexport */ name_callback_r),\n OAuth2Client: () => (/* reexport */ b),\n PKCE: () => (/* reexport */ pkce_c),\n PasswordCallback: () => (/* reexport */ password_callback_r),\n PingOneProtectEvaluationCallback: () => (/* reexport */ ping_protect_evaluation_callback_r),\n PingOneProtectInitializeCallback: () => (/* reexport */ ping_protect_initialize_callback_i),\n PolicyKey: () => (/* reexport */ _),\n PollingWaitCallback: () => (/* reexport */ polling_wait_callback_r),\n ReCaptchaCallback: () => (/* reexport */ recaptcha_callback_r),\n ReCaptchaEnterpriseCallback: () => (/* reexport */ recaptcha_enterprise_callback_r),\n RedirectCallback: () => (/* reexport */ c),\n ResponseType: () => (/* reexport */ oauth2_client_enums_r),\n SelectIdPCallback: () => (/* reexport */ d),\n SessionManager: () => (/* reexport */ M),\n StepType: () => (/* reexport */ enums_r),\n SuspendedTextOutputCallback: () => (/* reexport */ a),\n TermsAndConditionsCallback: () => (/* reexport */ terms_and_conditions_callback_a),\n TextInputCallback: () => (/* reexport */ text_input_callback_r),\n TextOutputCallback: () => (/* reexport */ text_output_callback_u),\n TokenManager: () => (/* reexport */ token_manager_f),\n TokenStorage: () => (/* reexport */ token_storage_d),\n UserManager: () => (/* reexport */ user_manager_a),\n ValidatedCreatePasswordCallback: () => (/* reexport */ validated_create_password_callback_i),\n ValidatedCreateUsernameCallback: () => (/* reexport */ validated_create_username_callback_s),\n WebAuthnOutcome: () => (/* reexport */ enums_o),\n WebAuthnStepType: () => (/* reexport */ enums_i),\n defaultMessageCreator: () => (/* reexport */ u),\n deviceClient: () => (/* reexport */ device_store_p)\n});\n\n;// ./node_modules/@forgerock/javascript-sdk/dist/config/constants.js\nconst T = 5e3, E = 3e4, o = "FR-SDK";\n\n\n;// ./node_modules/@forgerock/javascript-sdk/dist/util/middleware.js\nfunction f(t, { type: a, payload: o }) {\n const i = Object.freeze({ type: a, payload: o });\n return (e) => {\n if (!Array.isArray(e))\n return t;\n const c = e.map((r) => r);\n function n() {\n const r = c.shift();\n return r && r(t, i, n), t;\n }\n return n();\n };\n}\n\n\n;// ./node_modules/@forgerock/javascript-sdk/dist/util/timeout.js\n\nfunction timeout_T(t, o = T) {\n const i = o || T, r = new Promise(\n (n, m) => setTimeout(() => m(new Error("Timeout")), i)\n );\n return Promise.race([t, r]);\n}\n\n\n;// ./node_modules/@forgerock/javascript-sdk/dist/config/enums.js\nvar enums_e = /* @__PURE__ */ ((E) => (E.Authenticate = "AUTHENTICATE", E.Authorize = "AUTHORIZE", E.EndSession = "END_SESSION", E.Logout = "LOGOUT", E.ExchangeToken = "EXCHANGE_TOKEN", E.RefreshToken = "REFRESH_TOKEN", E.ResumeAuthenticate = "RESUME_AUTHENTICATE", E.RevokeToken = "REVOKE_TOKEN", E.StartAuthenticate = "START_AUTHENTICATE", E.UserInfo = "USER_INFO", E.WellKnown = "WELL_KNOWN", E))(enums_e || {});\n\n\n;// ./node_modules/@forgerock/javascript-sdk/dist/config/helpers.js\n\n\n\nfunction h(n, r) {\n if (!n.authorization_endpoint)\n throw new Error("Wellknown endpoint did not return `authorization_endpoint`");\n const t = new URL(n.authorization_endpoint).origin;\n let e, i;\n n.issuer.includes("/am/") ? (e = `${n.issuer.replace("oauth2", "json")}/authenticate`, i = `${n.issuer.replace("oauth2", "json")}/sessions`) : n.issuer.includes("/as/");\n const s = {\n ...e ? { authenticate: new URL(e).pathname } : {},\n authorize: new URL(n.authorization_endpoint).pathname,\n accessToken: new URL(n.token_endpoint).pathname,\n endSession: new URL(n.end_session_endpoint).pathname,\n userInfo: new URL(n.userinfo_endpoint).pathname,\n revoke: new URL(n.revocation_endpoint).pathname,\n ...i ? { sessions: new URL(i).pathname } : {}\n };\n return {\n baseUrl: t,\n paths: s\n };\n}\nasync function m(n) {\n if (!n.serverConfig.wellknown)\n throw new Error("wellknown URL is missing in options");\n const o = f(\n {\n url: new URL(n.serverConfig?.wellknown),\n init: { method: "GET" }\n },\n {\n type: enums_e.WellKnown,\n payload: {}\n }\n )(n.middleware);\n return await (await timeout_T(fetch(o.url.toString(), o.init), n.serverConfig.timeout)).json();\n}\n\n\n;// ./node_modules/@forgerock/javascript-sdk/dist/config/index.js\n\n\nfunction w(n) {\n return {\n ...n,\n oauthThreshold: n.oauthThreshold || E,\n logLevel: n.logLevel || "none",\n platformHeader: n.platformHeader || !1,\n prefix: n.prefix || o\n };\n}\nclass config_c {\n /**\n * Sets the default options.\n *\n * @param options The options to use as defaults\n */\n static set(e) {\n if (!this.isValid(e))\n throw new Error("Configuration is invalid");\n e.serverConfig && this.validateServerConfig(e.serverConfig), this.options = { ...w(e) };\n }\n /**\n * @method setAsync - Asynchronously calls the WellKnown endpoint to collect the APIs for OAuth\n * @param {AsyncConfigOptions} options - config options with wellknown endpoint URL\n * @returns {Promise} - Returns a success or failure message object\n */\n static async setAsync(e) {\n if (!e.serverConfig.wellknown)\n throw new Error(\n "Missing well-known property. Use `Config.set` method if not using well-known endpoint."\n );\n e.serverConfig.baseUrl && console.warn(\n "The baseUrl property passed in will be ignored, and replaced with well-known origin."\n );\n const r = await m(e), i = h(r);\n delete e.serverConfig.wellknown;\n const t = e;\n t.serverConfig = i, this.set(t);\n }\n /**\n * Merges the provided options with the default options. Ensures a server configuration exists.\n *\n * @param options The options to merge with defaults\n */\n static get(e) {\n if (!this.options && !e)\n throw new Error("Configuration has not been set");\n const r = { ...this.options, ...e };\n if (!r.serverConfig || !r.serverConfig.baseUrl)\n throw new Error("Server configuration has not been set");\n return r;\n }\n static isValid(e) {\n return !!(e && e.serverConfig);\n }\n static validateServerConfig(e) {\n e.timeout || (e.timeout = T);\n const r = e.baseUrl;\n r && r.charAt(r.length - 1) !== "/" && (e.baseUrl = r + "/");\n }\n}\n\n\n;// ./node_modules/@forgerock/javascript-sdk/dist/shared/constants.js\nconst constants_E = "forgerock-sdk", constants_o = "javascript";\n\n\n;// ./node_modules/@forgerock/javascript-sdk/dist/util/realm.js\nfunction realm_n(o) {\n const r = (o || "").split("/").map((t) => t.trim()).filter((t) => t !== "");\n return r[0] !== "root" && r.unshift("root"), r.map((t) => `realms/${t}`).join("/");\n}\n\n\n;// ./node_modules/@forgerock/javascript-sdk/dist/util/url.js\n\nfunction r(t) {\n const o = t.protocol === "http:" && ["", "80"].indexOf(t.port) === -1 || t.protocol === "https:" && ["", "443"].indexOf(t.port) === -1 ? `:${t.port}` : "";\n return `${t.protocol}//${t.hostname}${o}`;\n}\nfunction url_h(t, e, o) {\n const n = realm_n(e), s = {\n authenticate: `json/${n}/authenticate`,\n authorize: `oauth2/${n}/authorize`,\n accessToken: `oauth2/${n}/access_token`,\n endSession: `oauth2/${n}/connect/endSession`,\n userInfo: `oauth2/${n}/userinfo`,\n revoke: `oauth2/${n}/token/revoke`,\n sessions: `json/${n}/sessions/`\n };\n return o && o[t] ? o[t] : s[t];\n}\nfunction url_f(t, e) {\n const o = new URL(t);\n if (e.startsWith("/"))\n return `${r(o)}${e}`;\n const n = o.pathname.split("/"), s = e.split("/").filter((i) => !!i), a = [...n.slice(0, -1), ...s].join("/");\n return `${r(o)}${a}`;\n}\nfunction p(t) {\n const e = new URL(t), o = {};\n return e.searchParams.forEach((n, s) => o[s] = n), o;\n}\nfunction $(t) {\n const e = [];\n for (const o in t)\n t[o] && e.push(o + "=" + encodeURIComponent(t[o]));\n return e.join("&");\n}\n\n\n;// ./node_modules/@forgerock/javascript-sdk/dist/auth/index.js\n\n\n\n\n\n\nclass J {\n /**\n * Gets the next step in the authentication tree.\n *\n * @param {Step} previousStep The previous step, including any required input.\n * @param {StepOptions} options Configuration default overrides.\n * @return {Step} The next step in the authentication tree.\n */\n static async next(t, e) {\n const { middleware: r, platformHeader: n, realmPath: u, serverConfig: i, tree: o, type: a } = config_c.get(e), d = e ? e.query : {}, p = this.constructUrl(i, u, o, d), s = f(\n {\n url: new URL(p),\n init: this.configureRequest(t)\n },\n {\n type: t ? enums_e.Authenticate : enums_e.StartAuthenticate,\n payload: {\n tree: o,\n type: a || "service"\n }\n }\n )(r);\n n && (s.init.headers instanceof Headers ? s.init.headers.set("X-Requested-Platform", constants_o) : Array.isArray(s.init.headers) ? s.init.headers.push(["X-Requested-Platform", constants_o]) : s.init.headers ? s.init.headers["X-Requested-Platform"] = constants_o : s.init.headers = {\n "X-Requested-Platform": constants_o\n });\n const h = await timeout_T(fetch(s.url.toString(), s.init), i.timeout);\n return await this.getResponseJson(h);\n }\n static constructUrl(t, e, r, n) {\n const i = { ...n, ...r ? { authIndexType: "service", authIndexValue: r } : void 0 }, o = Object.keys(i).length > 0 ? `?${$(i)}` : "", a = url_h("authenticate", e, t.paths);\n return url_f(t.baseUrl, `${a}${o}`);\n }\n static configureRequest(t) {\n return {\n body: t ? JSON.stringify(t) : void 0,\n credentials: "include",\n headers: new Headers({\n Accept: "application/json",\n "Accept-API-Version": "protocol=1.0,resource=2.1",\n "Content-Type": "application/json",\n "X-Requested-With": constants_E\n }),\n method: "POST"\n };\n }\n static async getResponseJson(t) {\n const e = t.headers.get("content-type"), n = e && e.indexOf("application/json") > -1 ? await t.json() : {};\n return n.status = t.status, n.ok = t.ok, n;\n }\n}\n\n\n;// ./node_modules/@forgerock/javascript-sdk/dist/auth/enums.js\nvar t = /* @__PURE__ */ ((a) => (a.BadRequest = "BAD_REQUEST", a.Timeout = "TIMEOUT", a.Unauthorized = "UNAUTHORIZED", a.Unknown = "UNKNOWN", a))(t || {}), enums_l = /* @__PURE__ */ ((a) => (a.BooleanAttributeInputCallback = "BooleanAttributeInputCallback", a.ChoiceCallback = "ChoiceCallback", a.ConfirmationCallback = "ConfirmationCallback", a.DeviceProfileCallback = "DeviceProfileCallback", a.HiddenValueCallback = "HiddenValueCallback", a.KbaCreateCallback = "KbaCreateCallback", a.MetadataCallback = "MetadataCallback", a.NameCallback = "NameCallback", a.NumberAttributeInputCallback = "NumberAttributeInputCallback", a.PasswordCallback = "PasswordCallback", a.PingOneProtectEvaluationCallback = "PingOneProtectEvaluationCallback", a.PingOneProtectInitializeCallback = "PingOneProtectInitializeCallback", a.PollingWaitCallback = "PollingWaitCallback", a.ReCaptchaCallback = "ReCaptchaCallback", a.ReCaptchaEnterpriseCallback = "ReCaptchaEnterpriseCallback", a.RedirectCallback = "RedirectCallback", a.SelectIdPCallback = "SelectIdPCallback", a.StringAttributeInputCallback = "StringAttributeInputCallback", a.SuspendedTextOutputCallback = "SuspendedTextOutputCallback", a.TermsAndConditionsCallback = "TermsAndConditionsCallback", a.TextInputCallback = "TextInputCallback", a.TextOutputCallback = "TextOutputCallback", a.ValidatedCreatePasswordCallback = "ValidatedCreatePasswordCallback", a.ValidatedCreateUsernameCallback = "ValidatedCreateUsernameCallback", a))(enums_l || {});\n\n\n;// ./node_modules/@forgerock/javascript-sdk/dist/fr-policy/enums.js\nvar _ = /* @__PURE__ */ ((A) => (A.CannotContainCharacters = "CANNOT_CONTAIN_CHARACTERS", A.CannotContainDuplicates = "CANNOT_CONTAIN_DUPLICATES", A.CannotContainOthers = "CANNOT_CONTAIN_OTHERS", A.LeastCapitalLetters = "AT_LEAST_X_CAPITAL_LETTERS", A.LeastNumbers = "AT_LEAST_X_NUMBERS", A.MatchRegexp = "MATCH_REGEXP", A.MaximumLength = "MAX_LENGTH", A.MaximumNumber = "MAXIMUM_NUMBER_VALUE", A.MinimumLength = "MIN_LENGTH", A.MinimumNumber = "MINIMUM_NUMBER_VALUE", A.Required = "REQUIRED", A.Unique = "UNIQUE", A.UnknownPolicy = "UNKNOWN_POLICY", A.ValidArrayItems = "VALID_ARRAY_ITEMS", A.ValidDate = "VALID_DATE", A.ValidEmailAddress = "VALID_EMAIL_ADDRESS_FORMAT", A.ValidNameFormat = "VALID_NAME_FORMAT", A.ValidNumber = "VALID_NUMBER", A.ValidPhoneFormat = "VALID_PHONE_FORMAT", A.ValidQueryFilter = "VALID_QUERY_FILTER", A.ValidType = "VALID_TYPE", A))(_ || {});\n\n\n;// ./node_modules/@forgerock/javascript-sdk/dist/util/strings.js\nfunction strings_f(o, r, n) {\n return o === 1 ? r : n !== void 0 ? n : r + "s";\n}\n\n\n;// ./node_modules/@forgerock/javascript-sdk/dist/fr-policy/helpers.js\nfunction helpers_n(r, t, e) {\n return !r || r[t] === void 0 ? e : r[t];\n}\n\n\n;// ./node_modules/@forgerock/javascript-sdk/dist/fr-policy/message-creator.js\n\n\n\nconst u = {\n [_.CannotContainCharacters]: (a, n) => {\n const t = helpers_n(n, "forbiddenChars", "");\n return `${a} must not contain following characters: "${t}"`;\n },\n [_.CannotContainDuplicates]: (a, n) => {\n const t = helpers_n(n, "duplicateValue", "");\n return `${a} must not contain duplicates: "${t}"`;\n },\n [_.CannotContainOthers]: (a, n) => {\n const t = helpers_n(n, "disallowedFields", "");\n return `${a} must not contain: "${t}"`;\n },\n [_.LeastCapitalLetters]: (a, n) => {\n const t = helpers_n(n, "numCaps", 0);\n return `${a} must contain at least ${t} capital ${strings_f(t, "letter")}`;\n },\n [_.LeastNumbers]: (a, n) => {\n const t = helpers_n(n, "numNums", 0);\n return `${a} must contain at least ${t} numeric ${strings_f(t, "value")}`;\n },\n [_.MatchRegexp]: (a) => `${a} has failed the "MATCH_REGEXP" policy`,\n [_.MaximumLength]: (a, n) => {\n const t = helpers_n(n, "maxLength", 0);\n return `${a} must be at most ${t} ${strings_f(t, "character")}`;\n },\n [_.MaximumNumber]: (a) => `${a} has failed the "MAXIMUM_NUMBER_VALUE" policy`,\n [_.MinimumLength]: (a, n) => {\n const t = helpers_n(n, "minLength", 0);\n return `${a} must be at least ${t} ${strings_f(t, "character")}`;\n },\n [_.MinimumNumber]: (a) => `${a} has failed the "MINIMUM_NUMBER_VALUE" policy`,\n [_.Required]: (a) => `${a} is required`,\n [_.Unique]: (a) => `${a} must be unique`,\n [_.UnknownPolicy]: (a, n) => {\n const t = helpers_n(n, "policyRequirement", "Unknown");\n return `${a}: Unknown policy requirement "${t}"`;\n },\n [_.ValidArrayItems]: (a) => `${a} has failed the "VALID_ARRAY_ITEMS" policy`,\n [_.ValidDate]: (a) => `${a} has an invalid date`,\n [_.ValidEmailAddress]: (a) => `${a} has an invalid email address`,\n [_.ValidNameFormat]: (a) => `${a} has an invalid name format`,\n [_.ValidNumber]: (a) => `${a} has an invalid number`,\n [_.ValidPhoneFormat]: (a) => `${a} has an invalid phone number`,\n [_.ValidQueryFilter]: (a) => `${a} has failed the "VALID_QUERY_FILTER" policy`,\n [_.ValidType]: (a) => `${a} has failed the "VALID_TYPE" policy`\n};\n\n\n;// ./node_modules/@forgerock/javascript-sdk/dist/fr-policy/index.js\n\n\nclass y {\n /**\n * Parses policy errors and generates human readable error messages.\n *\n * @param {Step} err The step containing the error.\n * @param {MessageCreator} messageCreator\n * Extensible and overridable custom error messages for policy failures.\n * @return {ProcessedPropertyError[]} Array of objects containing all processed policy errors.\n */\n static parseErrors(e, r) {\n const s = [];\n return e.detail && e.detail.failedPolicyRequirements && e.detail.failedPolicyRequirements.map((t) => {\n s.push.apply(s, [\n {\n detail: t,\n messages: this.parseFailedPolicyRequirement(t, r)\n }\n ]);\n }), s;\n }\n /**\n * Parses a failed policy and returns a string array of error messages.\n *\n * @param {FailedPolicyRequirement} failedPolicy The detail data of the failed policy.\n * @param {MessageCreator} customMessage\n * Extensible and overridable custom error messages for policy failures.\n * @return {string[]} Array of strings with all processed policy errors.\n */\n static parseFailedPolicyRequirement(e, r) {\n const s = [];\n return e.policyRequirements.map((t) => {\n s.push(\n this.parsePolicyRequirement(e.property, t, r)\n );\n }), s;\n }\n /**\n * Parses a policy error into a human readable error message.\n *\n * @param {string} property The property with the policy failure.\n * @param {PolicyRequirement} policy The policy failure data.\n * @param {MessageCreator} customMessage\n * Extensible and overridable custom error messages for policy failures.\n * @return {string} Human readable error message.\n */\n static parsePolicyRequirement(e, r, s = {}) {\n const t = typeof r == "string" ? JSON.parse(r) : { ...r }, a = t.policyRequirement, o = s[a] || u[a] || u[_.UnknownPolicy], c = t.params ? { ...t.params, policyRequirement: a } : { policyRequirement: a };\n return o(e, c);\n }\n}\n\n\n;// ./node_modules/@forgerock/javascript-sdk/dist/fr-auth/enums.js\nvar enums_r = /* @__PURE__ */ ((i) => (i.LoginFailure = "LoginFailure", i.LoginSuccess = "LoginSuccess", i.Step = "Step", i))(enums_r || {});\n\n\n;// ./node_modules/@forgerock/javascript-sdk/dist/fr-auth/fr-login-failure.js\n\n\nclass i {\n /**\n * @param payload The raw payload returned by OpenAM\n */\n constructor(e) {\n this.payload = e, this.type = enums_r.LoginFailure;\n }\n /**\n * Gets the error code.\n */\n getCode() {\n return Number(this.payload.code);\n }\n /**\n * Gets the failure details.\n */\n getDetail() {\n return this.payload.detail;\n }\n /**\n * Gets the failure message.\n */\n getMessage() {\n return this.payload.message;\n }\n /**\n * Gets processed failure message.\n */\n getProcessedMessage(e) {\n return y.parseErrors(this.payload, e);\n }\n /**\n * Gets the failure reason.\n */\n getReason() {\n return this.payload.reason;\n }\n}\n\n\n;// ./node_modules/@forgerock/javascript-sdk/dist/fr-auth/fr-login-success.js\n\nclass fr_login_success_r {\n /**\n * @param payload The raw payload returned by OpenAM\n */\n constructor(e) {\n this.payload = e, this.type = enums_r.LoginSuccess;\n }\n /**\n * Gets the step\'s realm.\n */\n getRealm() {\n return this.payload.realm;\n }\n /**\n * Gets the step\'s session token.\n */\n getSessionToken() {\n return this.payload.tokenId;\n }\n /**\n * Gets the step\'s success URL.\n */\n getSuccessUrl() {\n return this.payload.successUrl;\n }\n}\n\n\n;// ./node_modules/@forgerock/javascript-sdk/dist/fr-auth/callbacks/index.js\nclass callbacks_r {\n /**\n * @param payload The raw payload returned by OpenAM\n */\n constructor(e) {\n this.payload = e;\n }\n /**\n * Gets the name of this callback type.\n */\n getType() {\n return this.payload.type;\n }\n /**\n * Gets the value of the specified input element, or the first element if `selector` is not\n * provided.\n *\n * @param selector The index position or name of the desired element\n */\n getInputValue(e = 0) {\n return this.getArrayElement(this.payload.input, e).value;\n }\n /**\n * Sets the value of the specified input element, or the first element if `selector` is not\n * provided.\n *\n * @param selector The index position or name of the desired element\n */\n setInputValue(e, t = 0) {\n this.getArrayElement(this.payload.input, t).value = e;\n }\n /**\n * Gets the value of the specified output element, or the first element if `selector`\n * is not provided.\n *\n * @param selector The index position or name of the desired element\n */\n getOutputValue(e = 0) {\n return this.getArrayElement(this.payload.output, e).value;\n }\n /**\n * Gets the value of the first output element with the specified name or the\n * specified default value.\n *\n * @param name The name of the desired element\n */\n getOutputByName(e, t) {\n const n = this.payload.output.find((a) => a.name === e);\n return n ? n.value : t;\n }\n getArrayElement(e, t = 0) {\n if (e === void 0)\n throw new Error(`No NameValue array was provided to search (selector ${t})`);\n if (typeof t == "number") {\n if (t < 0 || t > e.length - 1)\n throw new Error(`Selector index ${t} is out of range`);\n return e[t];\n }\n if (typeof t == "string") {\n const n = e.find((a) => a.name === t);\n if (!n)\n throw new Error(`Missing callback input entry "${t}"`);\n return n;\n }\n if (typeof t == "object" && t.test && t.exec) {\n const n = e.find((a) => t.test(a.name));\n if (!n)\n throw new Error(`Missing callback input entry "${t}"`);\n return n;\n }\n throw new Error("Invalid selector value type");\n }\n}\n\n\n;// ./node_modules/@forgerock/javascript-sdk/dist/fr-auth/callbacks/attribute-input-callback.js\n\nclass s extends callbacks_r {\n /**\n * @param payload The raw payload returned by OpenAM\n */\n constructor(e) {\n super(e), this.payload = e;\n }\n /**\n * Gets the attribute name.\n */\n getName() {\n return this.getOutputByName("name", "");\n }\n /**\n * Gets the attribute prompt.\n */\n getPrompt() {\n return this.getOutputByName("prompt", "");\n }\n /**\n * Gets whether the attribute is required.\n */\n isRequired() {\n return this.getOutputByName("required", !1);\n }\n /**\n * Gets the callback\'s failed policies.\n */\n getFailedPolicies() {\n const e = this.getOutputByName(\n "failedPolicies",\n []\n );\n try {\n return e.map((t) => JSON.parse(t));\n } catch {\n throw new Error(\n \'Unable to parse "failed policies" from the ForgeRock server. The JSON within `AttributeInputCallback` was either malformed or missing.\'\n );\n }\n }\n /**\n * Gets the callback\'s applicable policies.\n */\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n getPolicies() {\n return this.getOutputByName("policies", {});\n }\n /**\n * Set if validating value only.\n */\n setValidateOnly(e) {\n this.setInputValue(e, /validateOnly/);\n }\n /**\n * Sets the attribute\'s value.\n */\n setValue(e) {\n this.setInputValue(e);\n }\n}\n\n\n;// ./node_modules/@forgerock/javascript-sdk/dist/fr-auth/callbacks/choice-callback.js\n\nclass choice_callback_h extends callbacks_r {\n /**\n * @param payload The raw payload returned by OpenAM\n */\n constructor(t) {\n super(t), this.payload = t;\n }\n /**\n * Gets the choice\'s prompt.\n */\n getPrompt() {\n return this.getOutputByName("prompt", "");\n }\n /**\n * Gets the choice\'s default answer.\n */\n getDefaultChoice() {\n return this.getOutputByName("defaultChoice", 0);\n }\n /**\n * Gets the choice\'s possible answers.\n */\n getChoices() {\n return this.getOutputByName("choices", []);\n }\n /**\n * Sets the choice\'s answer by index position.\n */\n setChoiceIndex(t) {\n const e = this.getChoices().length;\n if (t < 0 || t > e - 1)\n throw new Error(`${t} is out of bounds`);\n this.setInputValue(t);\n }\n /**\n * Sets the choice\'s answer by value.\n */\n setChoiceValue(t) {\n const e = this.getChoices().indexOf(t);\n if (e === -1)\n throw new Error(`"${t}" is not a valid choice`);\n this.setInputValue(e);\n }\n}\n\n\n;// ./node_modules/@forgerock/javascript-sdk/dist/fr-auth/callbacks/confirmation-callback.js\n\nclass confirmation_callback_i extends callbacks_r {\n /**\n * @param payload The raw payload returned by OpenAM\n */\n constructor(t) {\n super(t), this.payload = t;\n }\n /**\n * Gets the index position of the confirmation\'s default answer.\n */\n getDefaultOption() {\n return Number(this.getOutputByName("defaultOption", 0));\n }\n /**\n * Gets the confirmation\'s message type.\n */\n getMessageType() {\n return Number(this.getOutputByName("messageType", 0));\n }\n /**\n * Gets the confirmation\'s possible answers.\n */\n getOptions() {\n return this.getOutputByName("options", []);\n }\n /**\n * Gets the confirmation\'s option type.\n */\n getOptionType() {\n return Number(this.getOutputByName("optionType", 0));\n }\n /**\n * Gets the confirmation\'s prompt.\n */\n getPrompt() {\n return this.getOutputByName("prompt", "");\n }\n /**\n * Set option index.\n */\n setOptionIndex(t) {\n if (t !== 0 && t !== 1)\n throw new Error(`"${t}" is not a valid choice`);\n this.setInputValue(t);\n }\n /**\n * Set option value.\n */\n setOptionValue(t) {\n const e = this.getOptions().indexOf(t);\n if (e === -1)\n throw new Error(`"${t}" is not a valid choice`);\n this.setInputValue(e);\n }\n}\n\n\n;// ./node_modules/@forgerock/javascript-sdk/dist/fr-auth/callbacks/device-profile-callback.js\n\nclass device_profile_callback_i extends callbacks_r {\n /**\n * @param payload The raw payload returned by OpenAM\n */\n constructor(e) {\n super(e), this.payload = e;\n }\n /**\n * Gets the callback\'s data.\n */\n getMessage() {\n return this.getOutputByName("message", "");\n }\n /**\n * Does callback require metadata?\n */\n isMetadataRequired() {\n return this.getOutputByName("metadata", !1);\n }\n /**\n * Does callback require location data?\n */\n isLocationRequired() {\n return this.getOutputByName("location", !1);\n }\n /**\n * Sets the profile.\n */\n setProfile(e) {\n this.setInputValue(JSON.stringify(e));\n }\n}\n\n\n;// ./node_modules/@forgerock/javascript-sdk/dist/fr-auth/callbacks/hidden-value-callback.js\n\nclass hidden_value_callback_t extends callbacks_r {\n /**\n * @param payload The raw payload returned by OpenAM\n */\n constructor(a) {\n super(a), this.payload = a;\n }\n}\n\n\n;// ./node_modules/@forgerock/javascript-sdk/dist/fr-auth/callbacks/kba-create-callback.js\n\nclass kba_create_callback_u extends callbacks_r {\n /**\n * @param payload The raw payload returned by OpenAM\n */\n constructor(t) {\n super(t), this.payload = t;\n }\n /**\n * Gets the callback prompt.\n */\n getPrompt() {\n return this.getOutputByName("prompt", "");\n }\n /**\n * Gets the callback\'s list of pre-defined security questions.\n */\n getPredefinedQuestions() {\n return this.getOutputByName("predefinedQuestions", []);\n }\n /**\n * Sets the callback\'s security question.\n */\n setQuestion(t) {\n this.setValue("question", t);\n }\n /**\n * Sets the callback\'s security question answer.\n */\n setAnswer(t) {\n this.setValue("answer", t);\n }\n setValue(t, s) {\n if (!this.payload.input)\n throw new Error("KBA payload is missing input");\n const e = this.payload.input.find((i) => i.name.endsWith(t));\n if (!e)\n throw new Error(`No input has name ending in "${t}"`);\n e.value = s;\n }\n}\n\n\n;// ./node_modules/@forgerock/javascript-sdk/dist/fr-auth/callbacks/metadata-callback.js\n\nclass metadata_callback_s extends callbacks_r {\n /**\n * @param payload The raw payload returned by OpenAM\n */\n constructor(t) {\n super(t), this.payload = t;\n }\n /**\n * Gets the callback\'s data.\n */\n getData() {\n return this.getOutputByName("data", {});\n }\n}\n\n\n;// ./node_modules/@forgerock/javascript-sdk/dist/fr-auth/callbacks/name-callback.js\n\nclass name_callback_r extends callbacks_r {\n /**\n * @param payload The raw payload returned by OpenAM\n */\n constructor(t) {\n super(t), this.payload = t;\n }\n /**\n * Gets the callback\'s prompt.\n */\n getPrompt() {\n return this.getOutputByName("prompt", "");\n }\n /**\n * Sets the username.\n */\n setName(t) {\n this.setInputValue(t);\n }\n}\n\n\n;// ./node_modules/@forgerock/javascript-sdk/dist/fr-auth/callbacks/password-callback.js\n\nclass password_callback_r extends callbacks_r {\n /**\n * @param payload The raw payload returned by OpenAM\n */\n constructor(t) {\n super(t), this.payload = t;\n }\n /**\n * Gets the callback\'s failed policies.\n */\n getFailedPolicies() {\n return this.getOutputByName("failedPolicies", []);\n }\n /**\n * Gets the callback\'s applicable policies.\n */\n getPolicies() {\n return this.getOutputByName("policies", []);\n }\n /**\n * Gets the callback\'s prompt.\n */\n getPrompt() {\n return this.getOutputByName("prompt", "");\n }\n /**\n * Sets the password.\n */\n setPassword(t) {\n this.setInputValue(t);\n }\n}\n\n\n;// ./node_modules/@forgerock/javascript-sdk/dist/fr-auth/callbacks/ping-protect-evaluation-callback.js\n\nclass ping_protect_evaluation_callback_r extends callbacks_r {\n /**\n * @param payload The raw payload returned by OpenAM\n */\n constructor(t) {\n super(t), this.payload = t;\n }\n /**\n * Gets the callback\'s pauseBehavioralData value.\n * @returns {boolean}\n */\n getPauseBehavioralData() {\n return this.getOutputByName("pauseBehavioralData", !1);\n }\n /**\n * @method setData - Set the result of data collection\n * @param {string} data - Data from calling pingProtect.get()\n * @returns {void}\n */\n setData(t) {\n this.setInputValue(t, /signals/);\n }\n /**\n * @method setClientError - Set the client error message\n * @param {string} errorMessage - Error message\n * @returns {void}\n */\n setClientError(t) {\n this.setInputValue(t, /clientError/);\n }\n}\n\n\n;// ./node_modules/@forgerock/javascript-sdk/dist/fr-auth/callbacks/ping-protect-initialize-callback.js\n\nclass ping_protect_initialize_callback_i extends callbacks_r {\n /**\n * @param payload The raw payload returned by OpenAM\n */\n constructor(t) {\n super(t), this.payload = t;\n }\n /**\n * Get callback\'s initialization config settings\n */\n getConfig() {\n return {\n envId: this.getOutputByName("envId", ""),\n consoleLogEnabled: this.getOutputByName("consoleLogEnabled", !1),\n deviceAttributesToIgnore: this.getOutputByName("deviceAttributesToIgnore", []),\n customHost: this.getOutputByName("customHost", ""),\n lazyMetadata: this.getOutputByName("lazyMetadata", !1),\n behavioralDataCollection: this.getOutputByName("behavioralDataCollection", !0),\n deviceKeyRsyncIntervals: this.getOutputByName("deviceKeyRsyncIntervals", 14),\n enableTrust: this.getOutputByName("enableTrust", !1),\n disableTags: this.getOutputByName("disableTags", !1),\n disableHub: this.getOutputByName("disableHub", !1)\n };\n }\n setClientError(t) {\n this.setInputValue(t, /clientError/);\n }\n}\n\n\n;// ./node_modules/@forgerock/javascript-sdk/dist/fr-auth/callbacks/polling-wait-callback.js\n\nclass polling_wait_callback_r extends callbacks_r {\n /**\n * @param payload The raw payload returned by OpenAM\n */\n constructor(t) {\n super(t), this.payload = t;\n }\n /**\n * Gets the message to display while polling.\n */\n getMessage() {\n return this.getOutputByName("message", "");\n }\n /**\n * Gets the polling interval in milliseconds.\n */\n getWaitTime() {\n return Number(this.getOutputByName("waitTime", 0));\n }\n}\n\n\n;// ./node_modules/@forgerock/javascript-sdk/dist/fr-auth/callbacks/recaptcha-callback.js\n\nclass recaptcha_callback_r extends callbacks_r {\n /**\n * @param payload The raw payload returned by OpenAM\n */\n constructor(t) {\n super(t), this.payload = t;\n }\n /**\n * Gets the reCAPTCHA site key.\n */\n getSiteKey() {\n return this.getOutputByName("recaptchaSiteKey", "");\n }\n /**\n * Sets the reCAPTCHA result.\n */\n setResult(t) {\n this.setInputValue(t);\n }\n}\n\n\n;// ./node_modules/@forgerock/javascript-sdk/dist/fr-auth/callbacks/recaptcha-enterprise-callback.js\n\nclass recaptcha_enterprise_callback_r extends callbacks_r {\n /**\n * @param payload The raw payload returned by OpenAM\n */\n constructor(t) {\n super(t), this.payload = t;\n }\n /**\n * Gets the reCAPTCHA site key.\n */\n getSiteKey() {\n return this.getOutputByName("recaptchaSiteKey", "");\n }\n /**\n * Get the api url\n */\n getApiUrl() {\n return this.getOutputByName("captchaApiUri", "");\n }\n /**\n * Get the class name\n */\n getElementClass() {\n return this.getOutputByName("captchaDivClass", "");\n }\n /**\n * Sets the reCAPTCHA result.\n */\n setResult(t) {\n this.setInputValue(t);\n }\n /**\n * Set client client error\n */\n setClientError(t) {\n this.setInputValue(t, "IDToken1clientError");\n }\n /**\n * Set the recaptcha payload\n */\n setPayload(t) {\n this.setInputValue(t, "IDToken1payload");\n }\n /**\n * Set the recaptcha action\n */\n setAction(t) {\n this.setInputValue(t, "IDToken1action");\n }\n}\n\n\n;// ./node_modules/@forgerock/javascript-sdk/dist/fr-auth/callbacks/redirect-callback.js\n\nclass c extends callbacks_r {\n /**\n * @param payload The raw payload returned by OpenAM\n */\n constructor(t) {\n super(t), this.payload = t;\n }\n /**\n * Gets the redirect URL.\n */\n getRedirectUrl() {\n return this.getOutputByName("redirectUrl", "");\n }\n}\n\n\n;// ./node_modules/@forgerock/javascript-sdk/dist/fr-auth/callbacks/select-idp-callback.js\n\nclass d extends callbacks_r {\n /**\n * @param payload The raw payload returned by OpenAM\n */\n constructor(r) {\n super(r), this.payload = r;\n }\n /**\n * Gets the available providers.\n */\n getProviders() {\n return this.getOutputByName("providers", []);\n }\n /**\n * Sets the provider by name.\n */\n setProvider(r) {\n const t = this.getProviders().find((e) => e.provider === r);\n if (!t)\n throw new Error(`"${r}" is not a valid choice`);\n this.setInputValue(t.provider);\n }\n}\n\n\n;// ./node_modules/@forgerock/javascript-sdk/dist/fr-auth/callbacks/text-output-callback.js\n\nclass text_output_callback_u extends callbacks_r {\n /**\n * @param payload The raw payload returned by OpenAM\n */\n constructor(e) {\n super(e), this.payload = e;\n }\n /**\n * Gets the message content.\n */\n getMessage() {\n return this.getOutputByName("message", "");\n }\n /**\n * Gets the message type.\n */\n getMessageType() {\n return this.getOutputByName("messageType", "");\n }\n}\n\n\n;// ./node_modules/@forgerock/javascript-sdk/dist/fr-auth/callbacks/suspended-text-output-callback.js\n\nclass a extends text_output_callback_u {\n /**\n * @param payload The raw payload returned by OpenAM\n */\n constructor(t) {\n super(t), this.payload = t;\n }\n}\n\n\n;// ./node_modules/@forgerock/javascript-sdk/dist/fr-auth/callbacks/terms-and-conditions-callback.js\n\nclass terms_and_conditions_callback_a extends callbacks_r {\n /**\n * @param payload The raw payload returned by OpenAM\n */\n constructor(t) {\n super(t), this.payload = t;\n }\n /**\n * Gets the terms and conditions content.\n */\n getTerms() {\n return this.getOutputByName("terms", "");\n }\n /**\n * Gets the version of the terms and conditions.\n */\n getVersion() {\n return this.getOutputByName("version", "");\n }\n /**\n * Gets the date of the terms and conditions.\n */\n getCreateDate() {\n const t = this.getOutputByName("createDate", "");\n return new Date(t);\n }\n /**\n * Sets the callback\'s acceptance.\n */\n setAccepted(t = !0) {\n this.setInputValue(t);\n }\n}\n\n\n;// ./node_modules/@forgerock/javascript-sdk/dist/fr-auth/callbacks/text-input-callback.js\n\nclass text_input_callback_r extends callbacks_r {\n /**\n * @param payload The raw payload returned by OpenAM\n */\n constructor(t) {\n super(t), this.payload = t;\n }\n /**\n * Gets the callback\'s prompt.\n */\n getPrompt() {\n return this.getOutputByName("prompt", "");\n }\n /**\n * Sets the callback\'s input value.\n */\n setInput(t) {\n this.setInputValue(t);\n }\n}\n\n\n;// ./node_modules/@forgerock/javascript-sdk/dist/fr-auth/callbacks/validated-create-password-callback.js\n\nclass validated_create_password_callback_i extends callbacks_r {\n /**\n * @param payload The raw payload returned by OpenAM\n */\n constructor(e) {\n super(e), this.payload = e;\n }\n /**\n * Gets the callback\'s failed policies.\n */\n getFailedPolicies() {\n const e = this.getOutputByName(\n "failedPolicies",\n []\n );\n try {\n return e.map((t) => JSON.parse(t));\n } catch {\n throw new Error(\n \'Unable to parse "failed policies" from the ForgeRock server. The JSON within `ValidatedCreatePasswordCallback` was either malformed or missing.\'\n );\n }\n }\n /**\n * Gets the callback\'s applicable policies.\n */\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n getPolicies() {\n return this.getOutputByName("policies", {});\n }\n /**\n * Gets the callback\'s prompt.\n */\n getPrompt() {\n return this.getOutputByName("prompt", "");\n }\n /**\n * Gets whether the password is required.\n */\n isRequired() {\n return this.getOutputByName("required", !1);\n }\n /**\n * Sets the callback\'s password.\n */\n setPassword(e) {\n this.setInputValue(e);\n }\n /**\n * Set if validating value only.\n */\n setValidateOnly(e) {\n this.setInputValue(e, /validateOnly/);\n }\n}\n\n\n;// ./node_modules/@forgerock/javascript-sdk/dist/fr-auth/callbacks/validated-create-username-callback.js\n\nclass validated_create_username_callback_s extends callbacks_r {\n /**\n * @param payload The raw payload returned by OpenAM\n */\n constructor(e) {\n super(e), this.payload = e;\n }\n /**\n * Gets the callback\'s prompt.\n */\n getPrompt() {\n return this.getOutputByName("prompt", "");\n }\n /**\n * Gets the callback\'s failed policies.\n */\n getFailedPolicies() {\n const e = this.getOutputByName(\n "failedPolicies",\n []\n );\n try {\n return e.map((t) => JSON.parse(t));\n } catch {\n throw new Error(\n \'Unable to parse "failed policies" from the ForgeRock server. The JSON within `ValidatedCreateUsernameCallback` was either malformed or missing.\'\n );\n }\n }\n /**\n * Gets the callback\'s applicable policies.\n */\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n getPolicies() {\n return this.getOutputByName("policies", {});\n }\n /**\n * Gets whether the username is required.\n */\n isRequired() {\n return this.getOutputByName("required", !1);\n }\n /**\n * Sets the callback\'s username.\n */\n setName(e) {\n this.setInputValue(e);\n }\n /**\n * Set if validating value only.\n */\n setValidateOnly(e) {\n this.setInputValue(e, /validateOnly/);\n }\n}\n\n\n;// ./node_modules/@forgerock/javascript-sdk/dist/fr-auth/callbacks/factory.js\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nfunction X(e) {\n switch (e.type) {\n case enums_l.BooleanAttributeInputCallback:\n return new s(e);\n case enums_l.ChoiceCallback:\n return new choice_callback_h(e);\n case enums_l.ConfirmationCallback:\n return new confirmation_callback_i(e);\n case enums_l.DeviceProfileCallback:\n return new device_profile_callback_i(e);\n case enums_l.HiddenValueCallback:\n return new hidden_value_callback_t(e);\n case enums_l.KbaCreateCallback:\n return new kba_create_callback_u(e);\n case enums_l.MetadataCallback:\n return new metadata_callback_s(e);\n case enums_l.NameCallback:\n return new name_callback_r(e);\n case enums_l.NumberAttributeInputCallback:\n return new s(e);\n case enums_l.PasswordCallback:\n return new password_callback_r(e);\n case enums_l.PingOneProtectEvaluationCallback:\n return new ping_protect_evaluation_callback_r(e);\n case enums_l.PingOneProtectInitializeCallback:\n return new ping_protect_initialize_callback_i(e);\n case enums_l.PollingWaitCallback:\n return new polling_wait_callback_r(e);\n case enums_l.ReCaptchaCallback:\n return new recaptcha_callback_r(e);\n case enums_l.ReCaptchaEnterpriseCallback:\n return new recaptcha_enterprise_callback_r(e);\n case enums_l.RedirectCallback:\n return new c(e);\n case enums_l.SelectIdPCallback:\n return new d(e);\n case enums_l.StringAttributeInputCallback:\n return new s(e);\n case enums_l.SuspendedTextOutputCallback:\n return new a(e);\n case enums_l.TermsAndConditionsCallback:\n return new terms_and_conditions_callback_a(e);\n case enums_l.TextInputCallback:\n return new text_input_callback_r(e);\n case enums_l.TextOutputCallback:\n return new text_output_callback_u(e);\n case enums_l.ValidatedCreatePasswordCallback:\n return new validated_create_password_callback_i(e);\n case enums_l.ValidatedCreateUsernameCallback:\n return new validated_create_username_callback_s(e);\n default:\n return new callbacks_r(e);\n }\n}\n\n\n;// ./node_modules/@forgerock/javascript-sdk/dist/fr-auth/fr-step.js\n\n\nclass fr_step_i {\n /**\n * @param payload The raw payload returned by OpenAM\n * @param callbackFactory A function that returns am implementation of FRCallback\n */\n constructor(t, e) {\n this.payload = t, this.type = enums_r.Step, this.callbacks = [], t.callbacks && (this.callbacks = this.convertCallbacks(t.callbacks, e));\n }\n /**\n * Gets the first callback of the specified type in this step.\n *\n * @param type The type of callback to find.\n */\n getCallbackOfType(t) {\n const e = this.getCallbacksOfType(t);\n if (e.length !== 1)\n throw new Error(`Expected 1 callback of type "${t}", but found ${e.length}`);\n return e[0];\n }\n /**\n * Gets all callbacks of the specified type in this step.\n *\n * @param type The type of callback to find.\n */\n getCallbacksOfType(t) {\n return this.callbacks.filter((e) => e.getType() === t);\n }\n /**\n * Sets the value of the first callback of the specified type in this step.\n *\n * @param type The type of callback to find.\n * @param value The value to set for the callback.\n */\n setCallbackValue(t, e) {\n const a = this.getCallbacksOfType(t);\n if (a.length !== 1)\n throw new Error(`Expected 1 callback of type "${t}", but found ${a.length}`);\n a[0].setInputValue(e);\n }\n /**\n * Gets the step\'s description.\n */\n getDescription() {\n return this.payload.description;\n }\n /**\n * Gets the step\'s header.\n */\n getHeader() {\n return this.payload.header;\n }\n /**\n * Gets the step\'s stage.\n */\n getStage() {\n return this.payload.stage;\n }\n convertCallbacks(t, e) {\n return t.map((l) => (e || X)(l) || X(l));\n }\n}\n\n\n;// ./node_modules/@forgerock/javascript-sdk/dist/fr-auth/index.js\n\n\n\n\n\n\nclass fr_auth_f {\n static get previousStepKey() {\n return `${config_c.get().prefix}-PreviousStep`;\n }\n /**\n * Requests the next step in the authentication tree.\n *\n * Call `FRAuth.next()` recursively. At each step, check for session token or error, otherwise\n * populate the step\'s callbacks and call `next()` again.\n *\n * Example:\n *\n * ```js\n * async function nextStep(previousStep) {\n * const thisStep = await FRAuth.next(previousStep);\n *\n * switch (thisStep.type) {\n * case StepType.LoginSuccess:\n * const token = thisStep.getSessionToken();\n * break;\n * case StepType.LoginFailure:\n * const detail = thisStep.getDetail();\n * break;\n * case StepType.Step:\n * // Populate `thisStep` callbacks here, and then continue\n * thisStep.setInputValue(\'foo\');\n * nextStep(thisStep);\n * break;\n * }\n * }\n * ```\n *\n * @param previousStep The previous step with its callback values populated\n * @param options Configuration overrides\n * @return The next step in the authentication tree\n */\n static async next(t, r) {\n const e = await J.next(t ? t.payload : void 0, r);\n if (e.authId) {\n const a = r ? r.callbackFactory : void 0;\n return new fr_step_i(e, a);\n }\n return !e.authId && e.ok ? new fr_login_success_r(e) : new i(e);\n }\n /**\n * Redirects to the URL identified in the RedirectCallback and saves the full\n * step information to localStorage for retrieval when user returns from login.\n *\n * Example:\n * ```js\n * forgerock.FRAuth.redirect(step);\n * ```\n */\n static redirect(t) {\n const e = t.getCallbackOfType(enums_l.RedirectCallback).getRedirectUrl();\n localStorage.setItem(this.previousStepKey, JSON.stringify(t)), location.assign(e);\n }\n /**\n * Resumes a tree after returning from an external client or provider.\n * Requires the full URL of the current window. It will parse URL for\n * key-value pairs as well as, if required, retrieves previous step.\n *\n * Example;\n * ```js\n * forgerock.FRAuth.resume(window.location.href)\n * ```\n */\n static async resume(t, r) {\n const e = new URL(t), a = e.searchParams.get("code"), n = e.searchParams.get("error"), i = e.searchParams.get("errorCode"), m = e.searchParams.get("errorMessage"), s = e.searchParams.get("form_post_entry"), l = e.searchParams.get("nonce"), u = e.searchParams.get("RelayState"), o = e.searchParams.get("responsekey"), d = e.searchParams.get("scope"), c = e.searchParams.get("state"), p = e.searchParams.get("suspendedId"), g = e.searchParams.get("authIndexValue") ?? void 0;\n let h;\n function S() {\n return a && c || s || o;\n }\n if (S()) {\n const y = localStorage.getItem(this.previousStepKey);\n if (!y)\n throw new Error("Error: could not retrieve original redirect information.");\n try {\n h = JSON.parse(y);\n } catch {\n throw new Error("Error: could not parse redirect params or step information");\n }\n localStorage.removeItem(this.previousStepKey);\n }\n const P = {\n ...r,\n query: {\n // Conditionally spread properties into object. Don\'t spread props with undefined/null.\n ...a && { code: a },\n ...n && { error: n },\n ...i && { errorCode: i },\n ...m && { errorMessage: m },\n ...s && { form_post_entry: s },\n ...l && { nonce: l },\n ...u && { RelayState: u },\n ...o && { responsekey: o },\n ...d && { scope: d },\n ...c && { state: c },\n ...p && { suspendedId: p },\n // Allow developer to add or override params with their own.\n ...r && r.query\n },\n ...(r?.tree ?? g) && {\n tree: r?.tree ?? g\n }\n };\n return await this.next(h, P);\n }\n /**\n * Requests the first step in the authentication tree.\n * This is essentially an alias to calling FRAuth.next without a previous step.\n *\n * @param options Configuration overrides\n * @return The next step in the authentication tree\n */\n static async start(t) {\n return await fr_auth_f.next(void 0, t);\n }\n}\n\n\n;// ./node_modules/@forgerock/javascript-sdk/node_modules/redux/dist/redux.mjs\n// src/utils/formatProdErrorMessage.ts\nfunction formatProdErrorMessage(code) {\n return `Minified Redux error #${code}; visit https://redux.js.org/Errors?code=${code} for the full message or use the non-minified dev environment for full errors. `;\n}\n\n// src/utils/symbol-observable.ts\nvar $$observable = /* @__PURE__ */ (() => typeof Symbol === "function" && Symbol.observable || "@@observable")();\nvar symbol_observable_default = $$observable;\n\n// src/utils/actionTypes.ts\nvar randomString = () => Math.random().toString(36).substring(7).split("").join(".");\nvar ActionTypes = {\n INIT: `@@redux/INIT${/* @__PURE__ */ randomString()}`,\n REPLACE: `@@redux/REPLACE${/* @__PURE__ */ randomString()}`,\n PROBE_UNKNOWN_ACTION: () => `@@redux/PROBE_UNKNOWN_ACTION${randomString()}`\n};\nvar actionTypes_default = ActionTypes;\n\n// src/utils/isPlainObject.ts\nfunction redux_isPlainObject(obj) {\n if (typeof obj !== "object" || obj === null)\n return false;\n let proto = obj;\n while (Object.getPrototypeOf(proto) !== null) {\n proto = Object.getPrototypeOf(proto);\n }\n return Object.getPrototypeOf(obj) === proto || Object.getPrototypeOf(obj) === null;\n}\n\n// src/utils/kindOf.ts\nfunction miniKindOf(val) {\n if (val === void 0)\n return "undefined";\n if (val === null)\n return "null";\n const type = typeof val;\n switch (type) {\n case "boolean":\n case "string":\n case "number":\n case "symbol":\n case "function": {\n return type;\n }\n }\n if (Array.isArray(val))\n return "array";\n if (isDate(val))\n return "date";\n if (isError(val))\n return "error";\n const constructorName = ctorName(val);\n switch (constructorName) {\n case "Symbol":\n case "Promise":\n case "WeakMap":\n case "WeakSet":\n case "Map":\n case "Set":\n return constructorName;\n }\n return Object.prototype.toString.call(val).slice(8, -1).toLowerCase().replace(/\\s/g, "");\n}\nfunction ctorName(val) {\n return typeof val.constructor === "function" ? val.constructor.name : null;\n}\nfunction isError(val) {\n return val instanceof Error || typeof val.message === "string" && val.constructor && typeof val.constructor.stackTraceLimit === "number";\n}\nfunction isDate(val) {\n if (val instanceof Date)\n return true;\n return typeof val.toDateString === "function" && typeof val.getDate === "function" && typeof val.setDate === "function";\n}\nfunction kindOf(val) {\n let typeOfVal = typeof val;\n if (false) {}\n return typeOfVal;\n}\n\n// src/createStore.ts\nfunction createStore(reducer, preloadedState, enhancer) {\n if (typeof reducer !== "function") {\n throw new Error( true ? formatProdErrorMessage(2) : 0);\n }\n if (typeof preloadedState === "function" && typeof enhancer === "function" || typeof enhancer === "function" && typeof arguments[3] === "function") {\n throw new Error( true ? formatProdErrorMessage(0) : 0);\n }\n if (typeof preloadedState === "function" && typeof enhancer === "undefined") {\n enhancer = preloadedState;\n preloadedState = void 0;\n }\n if (typeof enhancer !== "undefined") {\n if (typeof enhancer !== "function") {\n throw new Error( true ? formatProdErrorMessage(1) : 0);\n }\n return enhancer(createStore)(reducer, preloadedState);\n }\n let currentReducer = reducer;\n let currentState = preloadedState;\n let currentListeners = /* @__PURE__ */ new Map();\n let nextListeners = currentListeners;\n let listenerIdCounter = 0;\n let isDispatching = false;\n function ensureCanMutateNextListeners() {\n if (nextListeners === currentListeners) {\n nextListeners = /* @__PURE__ */ new Map();\n currentListeners.forEach((listener, key) => {\n nextListeners.set(key, listener);\n });\n }\n }\n function getState() {\n if (isDispatching) {\n throw new Error( true ? formatProdErrorMessage(3) : 0);\n }\n return currentState;\n }\n function subscribe(listener) {\n if (typeof listener !== "function") {\n throw new Error( true ? formatProdErrorMessage(4) : 0);\n }\n if (isDispatching) {\n throw new Error( true ? formatProdErrorMessage(5) : 0);\n }\n let isSubscribed = true;\n ensureCanMutateNextListeners();\n const listenerId = listenerIdCounter++;\n nextListeners.set(listenerId, listener);\n return function unsubscribe() {\n if (!isSubscribed) {\n return;\n }\n if (isDispatching) {\n throw new Error( true ? formatProdErrorMessage(6) : 0);\n }\n isSubscribed = false;\n ensureCanMutateNextListeners();\n nextListeners.delete(listenerId);\n currentListeners = null;\n };\n }\n function dispatch(action) {\n if (!redux_isPlainObject(action)) {\n throw new Error( true ? formatProdErrorMessage(7) : 0);\n }\n if (typeof action.type === "undefined") {\n throw new Error( true ? formatProdErrorMessage(8) : 0);\n }\n if (typeof action.type !== "string") {\n throw new Error( true ? formatProdErrorMessage(17) : 0);\n }\n if (isDispatching) {\n throw new Error( true ? formatProdErrorMessage(9) : 0);\n }\n try {\n isDispatching = true;\n currentState = currentReducer(currentState, action);\n } finally {\n isDispatching = false;\n }\n const listeners = currentListeners = nextListeners;\n listeners.forEach((listener) => {\n listener();\n });\n return action;\n }\n function replaceReducer(nextReducer) {\n if (typeof nextReducer !== "function") {\n throw new Error( true ? formatProdErrorMessage(10) : 0);\n }\n currentReducer = nextReducer;\n dispatch({\n type: actionTypes_default.REPLACE\n });\n }\n function observable() {\n const outerSubscribe = subscribe;\n return {\n /**\n * The minimal observable subscription method.\n * @param observer Any object that can be used as an observer.\n * The observer object should have a `next` method.\n * @returns An object with an `unsubscribe` method that can\n * be used to unsubscribe the observable from the store, and prevent further\n * emission of values from the observable.\n */\n subscribe(observer) {\n if (typeof observer !== "object" || observer === null) {\n throw new Error( true ? formatProdErrorMessage(11) : 0);\n }\n function observeState() {\n const observerAsObserver = observer;\n if (observerAsObserver.next) {\n observerAsObserver.next(getState());\n }\n }\n observeState();\n const unsubscribe = outerSubscribe(observeState);\n return {\n unsubscribe\n };\n },\n [symbol_observable_default]() {\n return this;\n }\n };\n }\n dispatch({\n type: actionTypes_default.INIT\n });\n const store = {\n dispatch,\n subscribe,\n getState,\n replaceReducer,\n [symbol_observable_default]: observable\n };\n return store;\n}\nfunction legacy_createStore(reducer, preloadedState, enhancer) {\n return createStore(reducer, preloadedState, enhancer);\n}\n\n// src/utils/warning.ts\nfunction warning(message) {\n if (typeof console !== "undefined" && typeof console.error === "function") {\n console.error(message);\n }\n try {\n throw new Error(message);\n } catch (e) {\n }\n}\n\n// src/combineReducers.ts\nfunction getUnexpectedStateShapeWarningMessage(inputState, reducers, action, unexpectedKeyCache) {\n const reducerKeys = Object.keys(reducers);\n const argumentName = action && action.type === actionTypes_default.INIT ? "preloadedState argument passed to createStore" : "previous state received by the reducer";\n if (reducerKeys.length === 0) {\n return "Store does not have a valid reducer. Make sure the argument passed to combineReducers is an object whose values are reducers.";\n }\n if (!redux_isPlainObject(inputState)) {\n return `The ${argumentName} has unexpected type of "${kindOf(inputState)}". Expected argument to be an object with the following keys: "${reducerKeys.join(\'", "\')}"`;\n }\n const unexpectedKeys = Object.keys(inputState).filter((key) => !reducers.hasOwnProperty(key) && !unexpectedKeyCache[key]);\n unexpectedKeys.forEach((key) => {\n unexpectedKeyCache[key] = true;\n });\n if (action && action.type === actionTypes_default.REPLACE)\n return;\n if (unexpectedKeys.length > 0) {\n return `Unexpected ${unexpectedKeys.length > 1 ? "keys" : "key"} "${unexpectedKeys.join(\'", "\')}" found in ${argumentName}. Expected to find one of the known reducer keys instead: "${reducerKeys.join(\'", "\')}". Unexpected keys will be ignored.`;\n }\n}\nfunction assertReducerShape(reducers) {\n Object.keys(reducers).forEach((key) => {\n const reducer = reducers[key];\n const initialState = reducer(void 0, {\n type: actionTypes_default.INIT\n });\n if (typeof initialState === "undefined") {\n throw new Error( true ? formatProdErrorMessage(12) : 0);\n }\n if (typeof reducer(void 0, {\n type: actionTypes_default.PROBE_UNKNOWN_ACTION()\n }) === "undefined") {\n throw new Error( true ? formatProdErrorMessage(13) : 0);\n }\n });\n}\nfunction combineReducers(reducers) {\n const reducerKeys = Object.keys(reducers);\n const finalReducers = {};\n for (let i = 0; i < reducerKeys.length; i++) {\n const key = reducerKeys[i];\n if (false) {}\n if (typeof reducers[key] === "function") {\n finalReducers[key] = reducers[key];\n }\n }\n const finalReducerKeys = Object.keys(finalReducers);\n let unexpectedKeyCache;\n if (false) {}\n let shapeAssertionError;\n try {\n assertReducerShape(finalReducers);\n } catch (e) {\n shapeAssertionError = e;\n }\n return function combination(state = {}, action) {\n if (shapeAssertionError) {\n throw shapeAssertionError;\n }\n if (false) {}\n let hasChanged = false;\n const nextState = {};\n for (let i = 0; i < finalReducerKeys.length; i++) {\n const key = finalReducerKeys[i];\n const reducer = finalReducers[key];\n const previousStateForKey = state[key];\n const nextStateForKey = reducer(previousStateForKey, action);\n if (typeof nextStateForKey === "undefined") {\n const actionType = action && action.type;\n throw new Error( true ? formatProdErrorMessage(14) : 0);\n }\n nextState[key] = nextStateForKey;\n hasChanged = hasChanged || nextStateForKey !== previousStateForKey;\n }\n hasChanged = hasChanged || finalReducerKeys.length !== Object.keys(state).length;\n return hasChanged ? nextState : state;\n };\n}\n\n// src/bindActionCreators.ts\nfunction bindActionCreator(actionCreator, dispatch) {\n return function(...args) {\n return dispatch(actionCreator.apply(this, args));\n };\n}\nfunction bindActionCreators(actionCreators, dispatch) {\n if (typeof actionCreators === "function") {\n return bindActionCreator(actionCreators, dispatch);\n }\n if (typeof actionCreators !== "object" || actionCreators === null) {\n throw new Error( true ? formatProdErrorMessage(16) : 0);\n }\n const boundActionCreators = {};\n for (const key in actionCreators) {\n const actionCreator = actionCreators[key];\n if (typeof actionCreator === "function") {\n boundActionCreators[key] = bindActionCreator(actionCreator, dispatch);\n }\n }\n return boundActionCreators;\n}\n\n// src/compose.ts\nfunction compose(...funcs) {\n if (funcs.length === 0) {\n return (arg) => arg;\n }\n if (funcs.length === 1) {\n return funcs[0];\n }\n return funcs.reduce((a, b) => (...args) => a(b(...args)));\n}\n\n// src/applyMiddleware.ts\nfunction applyMiddleware(...middlewares) {\n return (createStore2) => (reducer, preloadedState) => {\n const store = createStore2(reducer, preloadedState);\n let dispatch = () => {\n throw new Error( true ? formatProdErrorMessage(15) : 0);\n };\n const middlewareAPI = {\n getState: store.getState,\n dispatch: (action, ...args) => dispatch(action, ...args)\n };\n const chain = middlewares.map((middleware) => middleware(middlewareAPI));\n dispatch = compose(...chain)(store.dispatch);\n return {\n ...store,\n dispatch\n };\n };\n}\n\n// src/utils/isAction.ts\nfunction redux_isAction(action) {\n return redux_isPlainObject(action) && "type" in action && typeof action.type === "string";\n}\n\n//# sourceMappingURL=redux.mjs.map\n;// ./node_modules/@forgerock/javascript-sdk/node_modules/redux-thunk/dist/redux-thunk.mjs\n// src/index.ts\nfunction createThunkMiddleware(extraArgument) {\n const middleware = ({ dispatch, getState }) => (next) => (action) => {\n if (typeof action === "function") {\n return action(dispatch, getState, extraArgument);\n }\n return next(action);\n };\n return middleware;\n}\nvar redux_thunk_thunk = createThunkMiddleware();\nvar withExtraArgument = createThunkMiddleware;\n\n\n;// ./node_modules/immer/dist/immer.mjs\n// src/utils/env.ts\nvar NOTHING = Symbol.for("immer-nothing");\nvar DRAFTABLE = Symbol.for("immer-draftable");\nvar DRAFT_STATE = Symbol.for("immer-state");\n\n// src/utils/errors.ts\nvar errors = false ? 0 : [];\nfunction die(error, ...args) {\n if (false) {}\n throw new Error(\n `[Immer] minified error nr: ${error}. Full error at: https://bit.ly/3cXEKWf`\n );\n}\n\n// src/utils/common.ts\nvar getPrototypeOf = Object.getPrototypeOf;\nfunction immer_isDraft(value) {\n return !!value && !!value[DRAFT_STATE];\n}\nfunction isDraftable(value) {\n if (!value)\n return false;\n return immer_isPlainObject(value) || Array.isArray(value) || !!value[DRAFTABLE] || !!value.constructor?.[DRAFTABLE] || isMap(value) || isSet(value);\n}\nvar objectCtorString = Object.prototype.constructor.toString();\nfunction immer_isPlainObject(value) {\n if (!value || typeof value !== "object")\n return false;\n const proto = getPrototypeOf(value);\n if (proto === null) {\n return true;\n }\n const Ctor = Object.hasOwnProperty.call(proto, "constructor") && proto.constructor;\n if (Ctor === Object)\n return true;\n return typeof Ctor == "function" && Function.toString.call(Ctor) === objectCtorString;\n}\nfunction original(value) {\n if (!immer_isDraft(value))\n die(15, value);\n return value[DRAFT_STATE].base_;\n}\nfunction each(obj, iter) {\n if (getArchtype(obj) === 0 /* Object */) {\n Reflect.ownKeys(obj).forEach((key) => {\n iter(key, obj[key], obj);\n });\n } else {\n obj.forEach((entry, index) => iter(index, entry, obj));\n }\n}\nfunction getArchtype(thing) {\n const state = thing[DRAFT_STATE];\n return state ? state.type_ : Array.isArray(thing) ? 1 /* Array */ : isMap(thing) ? 2 /* Map */ : isSet(thing) ? 3 /* Set */ : 0 /* Object */;\n}\nfunction has(thing, prop) {\n return getArchtype(thing) === 2 /* Map */ ? thing.has(prop) : Object.prototype.hasOwnProperty.call(thing, prop);\n}\nfunction get(thing, prop) {\n return getArchtype(thing) === 2 /* Map */ ? thing.get(prop) : thing[prop];\n}\nfunction set(thing, propOrOldValue, value) {\n const t = getArchtype(thing);\n if (t === 2 /* Map */)\n thing.set(propOrOldValue, value);\n else if (t === 3 /* Set */) {\n thing.add(value);\n } else\n thing[propOrOldValue] = value;\n}\nfunction is(x, y) {\n if (x === y) {\n return x !== 0 || 1 / x === 1 / y;\n } else {\n return x !== x && y !== y;\n }\n}\nfunction isMap(target) {\n return target instanceof Map;\n}\nfunction isSet(target) {\n return target instanceof Set;\n}\nfunction latest(state) {\n return state.copy_ || state.base_;\n}\nfunction shallowCopy(base, strict) {\n if (isMap(base)) {\n return new Map(base);\n }\n if (isSet(base)) {\n return new Set(base);\n }\n if (Array.isArray(base))\n return Array.prototype.slice.call(base);\n const isPlain = immer_isPlainObject(base);\n if (strict === true || strict === "class_only" && !isPlain) {\n const descriptors = Object.getOwnPropertyDescriptors(base);\n delete descriptors[DRAFT_STATE];\n let keys = Reflect.ownKeys(descriptors);\n for (let i = 0; i < keys.length; i++) {\n const key = keys[i];\n const desc = descriptors[key];\n if (desc.writable === false) {\n desc.writable = true;\n desc.configurable = true;\n }\n if (desc.get || desc.set)\n descriptors[key] = {\n configurable: true,\n writable: true,\n // could live with !!desc.set as well here...\n enumerable: desc.enumerable,\n value: base[key]\n };\n }\n return Object.create(getPrototypeOf(base), descriptors);\n } else {\n const proto = getPrototypeOf(base);\n if (proto !== null && isPlain) {\n return { ...base };\n }\n const obj = Object.create(proto);\n return Object.assign(obj, base);\n }\n}\nfunction freeze(obj, deep = false) {\n if (isFrozen(obj) || immer_isDraft(obj) || !isDraftable(obj))\n return obj;\n if (getArchtype(obj) > 1) {\n obj.set = obj.add = obj.clear = obj.delete = dontMutateFrozenCollections;\n }\n Object.freeze(obj);\n if (deep)\n Object.entries(obj).forEach(([key, value]) => freeze(value, true));\n return obj;\n}\nfunction dontMutateFrozenCollections() {\n die(2);\n}\nfunction isFrozen(obj) {\n return Object.isFrozen(obj);\n}\n\n// src/utils/plugins.ts\nvar plugins = {};\nfunction getPlugin(pluginKey) {\n const plugin = plugins[pluginKey];\n if (!plugin) {\n die(0, pluginKey);\n }\n return plugin;\n}\nfunction loadPlugin(pluginKey, implementation) {\n if (!plugins[pluginKey])\n plugins[pluginKey] = implementation;\n}\n\n// src/core/scope.ts\nvar currentScope;\nfunction getCurrentScope() {\n return currentScope;\n}\nfunction createScope(parent_, immer_) {\n return {\n drafts_: [],\n parent_,\n immer_,\n // Whenever the modified draft contains a draft from another scope, we\n // need to prevent auto-freezing so the unowned draft can be finalized.\n canAutoFreeze_: true,\n unfinalizedDrafts_: 0\n };\n}\nfunction usePatchesInScope(scope, patchListener) {\n if (patchListener) {\n getPlugin("Patches");\n scope.patches_ = [];\n scope.inversePatches_ = [];\n scope.patchListener_ = patchListener;\n }\n}\nfunction revokeScope(scope) {\n leaveScope(scope);\n scope.drafts_.forEach(revokeDraft);\n scope.drafts_ = null;\n}\nfunction leaveScope(scope) {\n if (scope === currentScope) {\n currentScope = scope.parent_;\n }\n}\nfunction enterScope(immer2) {\n return currentScope = createScope(currentScope, immer2);\n}\nfunction revokeDraft(draft) {\n const state = draft[DRAFT_STATE];\n if (state.type_ === 0 /* Object */ || state.type_ === 1 /* Array */)\n state.revoke_();\n else\n state.revoked_ = true;\n}\n\n// src/core/finalize.ts\nfunction processResult(result, scope) {\n scope.unfinalizedDrafts_ = scope.drafts_.length;\n const baseDraft = scope.drafts_[0];\n const isReplaced = result !== void 0 && result !== baseDraft;\n if (isReplaced) {\n if (baseDraft[DRAFT_STATE].modified_) {\n revokeScope(scope);\n die(4);\n }\n if (isDraftable(result)) {\n result = finalize(scope, result);\n if (!scope.parent_)\n maybeFreeze(scope, result);\n }\n if (scope.patches_) {\n getPlugin("Patches").generateReplacementPatches_(\n baseDraft[DRAFT_STATE].base_,\n result,\n scope.patches_,\n scope.inversePatches_\n );\n }\n } else {\n result = finalize(scope, baseDraft, []);\n }\n revokeScope(scope);\n if (scope.patches_) {\n scope.patchListener_(scope.patches_, scope.inversePatches_);\n }\n return result !== NOTHING ? result : void 0;\n}\nfunction finalize(rootScope, value, path) {\n if (isFrozen(value))\n return value;\n const state = value[DRAFT_STATE];\n if (!state) {\n each(\n value,\n (key, childValue) => finalizeProperty(rootScope, state, value, key, childValue, path)\n );\n return value;\n }\n if (state.scope_ !== rootScope)\n return value;\n if (!state.modified_) {\n maybeFreeze(rootScope, state.base_, true);\n return state.base_;\n }\n if (!state.finalized_) {\n state.finalized_ = true;\n state.scope_.unfinalizedDrafts_--;\n const result = state.copy_;\n let resultEach = result;\n let isSet2 = false;\n if (state.type_ === 3 /* Set */) {\n resultEach = new Set(result);\n result.clear();\n isSet2 = true;\n }\n each(\n resultEach,\n (key, childValue) => finalizeProperty(rootScope, state, result, key, childValue, path, isSet2)\n );\n maybeFreeze(rootScope, result, false);\n if (path && rootScope.patches_) {\n getPlugin("Patches").generatePatches_(\n state,\n path,\n rootScope.patches_,\n rootScope.inversePatches_\n );\n }\n }\n return state.copy_;\n}\nfunction finalizeProperty(rootScope, parentState, targetObject, prop, childValue, rootPath, targetIsSet) {\n if (false)\n {}\n if (immer_isDraft(childValue)) {\n const path = rootPath && parentState && parentState.type_ !== 3 /* Set */ && // Set objects are atomic since they have no keys.\n !has(parentState.assigned_, prop) ? rootPath.concat(prop) : void 0;\n const res = finalize(rootScope, childValue, path);\n set(targetObject, prop, res);\n if (immer_isDraft(res)) {\n rootScope.canAutoFreeze_ = false;\n } else\n return;\n } else if (targetIsSet) {\n targetObject.add(childValue);\n }\n if (isDraftable(childValue) && !isFrozen(childValue)) {\n if (!rootScope.immer_.autoFreeze_ && rootScope.unfinalizedDrafts_ < 1) {\n return;\n }\n finalize(rootScope, childValue);\n if ((!parentState || !parentState.scope_.parent_) && typeof prop !== "symbol" && Object.prototype.propertyIsEnumerable.call(targetObject, prop))\n maybeFreeze(rootScope, childValue);\n }\n}\nfunction maybeFreeze(scope, value, deep = false) {\n if (!scope.parent_ && scope.immer_.autoFreeze_ && scope.canAutoFreeze_) {\n freeze(value, deep);\n }\n}\n\n// src/core/proxy.ts\nfunction createProxyProxy(base, parent) {\n const isArray = Array.isArray(base);\n const state = {\n type_: isArray ? 1 /* Array */ : 0 /* Object */,\n // Track which produce call this is associated with.\n scope_: parent ? parent.scope_ : getCurrentScope(),\n // True for both shallow and deep changes.\n modified_: false,\n // Used during finalization.\n finalized_: false,\n // Track which properties have been assigned (true) or deleted (false).\n assigned_: {},\n // The parent draft state.\n parent_: parent,\n // The base state.\n base_: base,\n // The base proxy.\n draft_: null,\n // set below\n // The base copy with any updated values.\n copy_: null,\n // Called by the `produce` function.\n revoke_: null,\n isManual_: false\n };\n let target = state;\n let traps = objectTraps;\n if (isArray) {\n target = [state];\n traps = arrayTraps;\n }\n const { revoke, proxy } = Proxy.revocable(target, traps);\n state.draft_ = proxy;\n state.revoke_ = revoke;\n return proxy;\n}\nvar objectTraps = {\n get(state, prop) {\n if (prop === DRAFT_STATE)\n return state;\n const source = latest(state);\n if (!has(source, prop)) {\n return readPropFromProto(state, source, prop);\n }\n const value = source[prop];\n if (state.finalized_ || !isDraftable(value)) {\n return value;\n }\n if (value === peek(state.base_, prop)) {\n prepareCopy(state);\n return state.copy_[prop] = createProxy(value, state);\n }\n return value;\n },\n has(state, prop) {\n return prop in latest(state);\n },\n ownKeys(state) {\n return Reflect.ownKeys(latest(state));\n },\n set(state, prop, value) {\n const desc = getDescriptorFromProto(latest(state), prop);\n if (desc?.set) {\n desc.set.call(state.draft_, value);\n return true;\n }\n if (!state.modified_) {\n const current2 = peek(latest(state), prop);\n const currentState = current2?.[DRAFT_STATE];\n if (currentState && currentState.base_ === value) {\n state.copy_[prop] = value;\n state.assigned_[prop] = false;\n return true;\n }\n if (is(value, current2) && (value !== void 0 || has(state.base_, prop)))\n return true;\n prepareCopy(state);\n markChanged(state);\n }\n if (state.copy_[prop] === value && // special case: handle new props with value \'undefined\'\n (value !== void 0 || prop in state.copy_) || // special case: NaN\n Number.isNaN(value) && Number.isNaN(state.copy_[prop]))\n return true;\n state.copy_[prop] = value;\n state.assigned_[prop] = true;\n return true;\n },\n deleteProperty(state, prop) {\n if (peek(state.base_, prop) !== void 0 || prop in state.base_) {\n state.assigned_[prop] = false;\n prepareCopy(state);\n markChanged(state);\n } else {\n delete state.assigned_[prop];\n }\n if (state.copy_) {\n delete state.copy_[prop];\n }\n return true;\n },\n // Note: We never coerce `desc.value` into an Immer draft, because we can\'t make\n // the same guarantee in ES5 mode.\n getOwnPropertyDescriptor(state, prop) {\n const owner = latest(state);\n const desc = Reflect.getOwnPropertyDescriptor(owner, prop);\n if (!desc)\n return desc;\n return {\n writable: true,\n configurable: state.type_ !== 1 /* Array */ || prop !== "length",\n enumerable: desc.enumerable,\n value: owner[prop]\n };\n },\n defineProperty() {\n die(11);\n },\n getPrototypeOf(state) {\n return getPrototypeOf(state.base_);\n },\n setPrototypeOf() {\n die(12);\n }\n};\nvar arrayTraps = {};\neach(objectTraps, (key, fn) => {\n arrayTraps[key] = function() {\n arguments[0] = arguments[0][0];\n return fn.apply(this, arguments);\n };\n});\narrayTraps.deleteProperty = function(state, prop) {\n if (false)\n {}\n return arrayTraps.set.call(this, state, prop, void 0);\n};\narrayTraps.set = function(state, prop, value) {\n if (false)\n {}\n return objectTraps.set.call(this, state[0], prop, value, state[0]);\n};\nfunction peek(draft, prop) {\n const state = draft[DRAFT_STATE];\n const source = state ? latest(state) : draft;\n return source[prop];\n}\nfunction readPropFromProto(state, source, prop) {\n const desc = getDescriptorFromProto(source, prop);\n return desc ? `value` in desc ? desc.value : (\n // This is a very special case, if the prop is a getter defined by the\n // prototype, we should invoke it with the draft as context!\n desc.get?.call(state.draft_)\n ) : void 0;\n}\nfunction getDescriptorFromProto(source, prop) {\n if (!(prop in source))\n return void 0;\n let proto = getPrototypeOf(source);\n while (proto) {\n const desc = Object.getOwnPropertyDescriptor(proto, prop);\n if (desc)\n return desc;\n proto = getPrototypeOf(proto);\n }\n return void 0;\n}\nfunction markChanged(state) {\n if (!state.modified_) {\n state.modified_ = true;\n if (state.parent_) {\n markChanged(state.parent_);\n }\n }\n}\nfunction prepareCopy(state) {\n if (!state.copy_) {\n state.copy_ = shallowCopy(\n state.base_,\n state.scope_.immer_.useStrictShallowCopy_\n );\n }\n}\n\n// src/core/immerClass.ts\nvar Immer2 = class {\n constructor(config) {\n this.autoFreeze_ = true;\n this.useStrictShallowCopy_ = false;\n /**\n * The `produce` function takes a value and a "recipe function" (whose\n * return value often depends on the base state). The recipe function is\n * free to mutate its first argument however it wants. All mutations are\n * only ever applied to a __copy__ of the base state.\n *\n * Pass only a function to create a "curried producer" which relieves you\n * from passing the recipe function every time.\n *\n * Only plain objects and arrays are made mutable. All other objects are\n * considered uncopyable.\n *\n * Note: This function is __bound__ to its `Immer` instance.\n *\n * @param {any} base - the initial state\n * @param {Function} recipe - function that receives a proxy of the base state as first argument and which can be freely modified\n * @param {Function} patchListener - optional function that will be called with all the patches produced here\n * @returns {any} a new state, or the initial state if nothing was modified\n */\n this.produce = (base, recipe, patchListener) => {\n if (typeof base === "function" && typeof recipe !== "function") {\n const defaultBase = recipe;\n recipe = base;\n const self = this;\n return function curriedProduce(base2 = defaultBase, ...args) {\n return self.produce(base2, (draft) => recipe.call(this, draft, ...args));\n };\n }\n if (typeof recipe !== "function")\n die(6);\n if (patchListener !== void 0 && typeof patchListener !== "function")\n die(7);\n let result;\n if (isDraftable(base)) {\n const scope = enterScope(this);\n const proxy = createProxy(base, void 0);\n let hasError = true;\n try {\n result = recipe(proxy);\n hasError = false;\n } finally {\n if (hasError)\n revokeScope(scope);\n else\n leaveScope(scope);\n }\n usePatchesInScope(scope, patchListener);\n return processResult(result, scope);\n } else if (!base || typeof base !== "object") {\n result = recipe(base);\n if (result === void 0)\n result = base;\n if (result === NOTHING)\n result = void 0;\n if (this.autoFreeze_)\n freeze(result, true);\n if (patchListener) {\n const p = [];\n const ip = [];\n getPlugin("Patches").generateReplacementPatches_(base, result, p, ip);\n patchListener(p, ip);\n }\n return result;\n } else\n die(1, base);\n };\n this.produceWithPatches = (base, recipe) => {\n if (typeof base === "function") {\n return (state, ...args) => this.produceWithPatches(state, (draft) => base(draft, ...args));\n }\n let patches, inversePatches;\n const result = this.produce(base, recipe, (p, ip) => {\n patches = p;\n inversePatches = ip;\n });\n return [result, patches, inversePatches];\n };\n if (typeof config?.autoFreeze === "boolean")\n this.setAutoFreeze(config.autoFreeze);\n if (typeof config?.useStrictShallowCopy === "boolean")\n this.setUseStrictShallowCopy(config.useStrictShallowCopy);\n }\n createDraft(base) {\n if (!isDraftable(base))\n die(8);\n if (immer_isDraft(base))\n base = immer_current(base);\n const scope = enterScope(this);\n const proxy = createProxy(base, void 0);\n proxy[DRAFT_STATE].isManual_ = true;\n leaveScope(scope);\n return proxy;\n }\n finishDraft(draft, patchListener) {\n const state = draft && draft[DRAFT_STATE];\n if (!state || !state.isManual_)\n die(9);\n const { scope_: scope } = state;\n usePatchesInScope(scope, patchListener);\n return processResult(void 0, scope);\n }\n /**\n * Pass true to automatically freeze all copies created by Immer.\n *\n * By default, auto-freezing is enabled.\n */\n setAutoFreeze(value) {\n this.autoFreeze_ = value;\n }\n /**\n * Pass true to enable strict shallow copy.\n *\n * By default, immer does not copy the object descriptors such as getter, setter and non-enumrable properties.\n */\n setUseStrictShallowCopy(value) {\n this.useStrictShallowCopy_ = value;\n }\n applyPatches(base, patches) {\n let i;\n for (i = patches.length - 1; i >= 0; i--) {\n const patch = patches[i];\n if (patch.path.length === 0 && patch.op === "replace") {\n base = patch.value;\n break;\n }\n }\n if (i > -1) {\n patches = patches.slice(i + 1);\n }\n const applyPatchesImpl = getPlugin("Patches").applyPatches_;\n if (immer_isDraft(base)) {\n return applyPatchesImpl(base, patches);\n }\n return this.produce(\n base,\n (draft) => applyPatchesImpl(draft, patches)\n );\n }\n};\nfunction createProxy(value, parent) {\n const draft = isMap(value) ? getPlugin("MapSet").proxyMap_(value, parent) : isSet(value) ? getPlugin("MapSet").proxySet_(value, parent) : createProxyProxy(value, parent);\n const scope = parent ? parent.scope_ : getCurrentScope();\n scope.drafts_.push(draft);\n return draft;\n}\n\n// src/core/current.ts\nfunction immer_current(value) {\n if (!immer_isDraft(value))\n die(10, value);\n return currentImpl(value);\n}\nfunction currentImpl(value) {\n if (!isDraftable(value) || isFrozen(value))\n return value;\n const state = value[DRAFT_STATE];\n let copy;\n if (state) {\n if (!state.modified_)\n return state.base_;\n state.finalized_ = true;\n copy = shallowCopy(value, state.scope_.immer_.useStrictShallowCopy_);\n } else {\n copy = shallowCopy(value, true);\n }\n each(copy, (key, childValue) => {\n set(copy, key, currentImpl(childValue));\n });\n if (state) {\n state.finalized_ = false;\n }\n return copy;\n}\n\n// src/plugins/patches.ts\nfunction enablePatches() {\n const errorOffset = 16;\n if (false) {}\n const REPLACE = "replace";\n const ADD = "add";\n const REMOVE = "remove";\n function generatePatches_(state, basePath, patches, inversePatches) {\n switch (state.type_) {\n case 0 /* Object */:\n case 2 /* Map */:\n return generatePatchesFromAssigned(\n state,\n basePath,\n patches,\n inversePatches\n );\n case 1 /* Array */:\n return generateArrayPatches(state, basePath, patches, inversePatches);\n case 3 /* Set */:\n return generateSetPatches(\n state,\n basePath,\n patches,\n inversePatches\n );\n }\n }\n function generateArrayPatches(state, basePath, patches, inversePatches) {\n let { base_, assigned_ } = state;\n let copy_ = state.copy_;\n if (copy_.length < base_.length) {\n ;\n [base_, copy_] = [copy_, base_];\n [patches, inversePatches] = [inversePatches, patches];\n }\n for (let i = 0; i < base_.length; i++) {\n if (assigned_[i] && copy_[i] !== base_[i]) {\n const path = basePath.concat([i]);\n patches.push({\n op: REPLACE,\n path,\n // Need to maybe clone it, as it can in fact be the original value\n // due to the base/copy inversion at the start of this function\n value: clonePatchValueIfNeeded(copy_[i])\n });\n inversePatches.push({\n op: REPLACE,\n path,\n value: clonePatchValueIfNeeded(base_[i])\n });\n }\n }\n for (let i = base_.length; i < copy_.length; i++) {\n const path = basePath.concat([i]);\n patches.push({\n op: ADD,\n path,\n // Need to maybe clone it, as it can in fact be the original value\n // due to the base/copy inversion at the start of this function\n value: clonePatchValueIfNeeded(copy_[i])\n });\n }\n for (let i = copy_.length - 1; base_.length <= i; --i) {\n const path = basePath.concat([i]);\n inversePatches.push({\n op: REMOVE,\n path\n });\n }\n }\n function generatePatchesFromAssigned(state, basePath, patches, inversePatches) {\n const { base_, copy_ } = state;\n each(state.assigned_, (key, assignedValue) => {\n const origValue = get(base_, key);\n const value = get(copy_, key);\n const op = !assignedValue ? REMOVE : has(base_, key) ? REPLACE : ADD;\n if (origValue === value && op === REPLACE)\n return;\n const path = basePath.concat(key);\n patches.push(op === REMOVE ? { op, path } : { op, path, value });\n inversePatches.push(\n op === ADD ? { op: REMOVE, path } : op === REMOVE ? { op: ADD, path, value: clonePatchValueIfNeeded(origValue) } : { op: REPLACE, path, value: clonePatchValueIfNeeded(origValue) }\n );\n });\n }\n function generateSetPatches(state, basePath, patches, inversePatches) {\n let { base_, copy_ } = state;\n let i = 0;\n base_.forEach((value) => {\n if (!copy_.has(value)) {\n const path = basePath.concat([i]);\n patches.push({\n op: REMOVE,\n path,\n value\n });\n inversePatches.unshift({\n op: ADD,\n path,\n value\n });\n }\n i++;\n });\n i = 0;\n copy_.forEach((value) => {\n if (!base_.has(value)) {\n const path = basePath.concat([i]);\n patches.push({\n op: ADD,\n path,\n value\n });\n inversePatches.unshift({\n op: REMOVE,\n path,\n value\n });\n }\n i++;\n });\n }\n function generateReplacementPatches_(baseValue, replacement, patches, inversePatches) {\n patches.push({\n op: REPLACE,\n path: [],\n value: replacement === NOTHING ? void 0 : replacement\n });\n inversePatches.push({\n op: REPLACE,\n path: [],\n value: baseValue\n });\n }\n function applyPatches_(draft, patches) {\n patches.forEach((patch) => {\n const { path, op } = patch;\n let base = draft;\n for (let i = 0; i < path.length - 1; i++) {\n const parentType = getArchtype(base);\n let p = path[i];\n if (typeof p !== "string" && typeof p !== "number") {\n p = "" + p;\n }\n if ((parentType === 0 /* Object */ || parentType === 1 /* Array */) && (p === "__proto__" || p === "constructor"))\n die(errorOffset + 3);\n if (typeof base === "function" && p === "prototype")\n die(errorOffset + 3);\n base = get(base, p);\n if (typeof base !== "object")\n die(errorOffset + 2, path.join("/"));\n }\n const type = getArchtype(base);\n const value = deepClonePatchValue(patch.value);\n const key = path[path.length - 1];\n switch (op) {\n case REPLACE:\n switch (type) {\n case 2 /* Map */:\n return base.set(key, value);\n case 3 /* Set */:\n die(errorOffset);\n default:\n return base[key] = value;\n }\n case ADD:\n switch (type) {\n case 1 /* Array */:\n return key === "-" ? base.push(value) : base.splice(key, 0, value);\n case 2 /* Map */:\n return base.set(key, value);\n case 3 /* Set */:\n return base.add(value);\n default:\n return base[key] = value;\n }\n case REMOVE:\n switch (type) {\n case 1 /* Array */:\n return base.splice(key, 1);\n case 2 /* Map */:\n return base.delete(key);\n case 3 /* Set */:\n return base.delete(patch.value);\n default:\n return delete base[key];\n }\n default:\n die(errorOffset + 1, op);\n }\n });\n return draft;\n }\n function deepClonePatchValue(obj) {\n if (!isDraftable(obj))\n return obj;\n if (Array.isArray(obj))\n return obj.map(deepClonePatchValue);\n if (isMap(obj))\n return new Map(\n Array.from(obj.entries()).map(([k, v]) => [k, deepClonePatchValue(v)])\n );\n if (isSet(obj))\n return new Set(Array.from(obj).map(deepClonePatchValue));\n const cloned = Object.create(getPrototypeOf(obj));\n for (const key in obj)\n cloned[key] = deepClonePatchValue(obj[key]);\n if (has(obj, DRAFTABLE))\n cloned[DRAFTABLE] = obj[DRAFTABLE];\n return cloned;\n }\n function clonePatchValueIfNeeded(obj) {\n if (immer_isDraft(obj)) {\n return deepClonePatchValue(obj);\n } else\n return obj;\n }\n loadPlugin("Patches", {\n applyPatches_,\n generatePatches_,\n generateReplacementPatches_\n });\n}\n\n// src/plugins/mapset.ts\nfunction enableMapSet() {\n class DraftMap extends Map {\n constructor(target, parent) {\n super();\n this[DRAFT_STATE] = {\n type_: 2 /* Map */,\n parent_: parent,\n scope_: parent ? parent.scope_ : getCurrentScope(),\n modified_: false,\n finalized_: false,\n copy_: void 0,\n assigned_: void 0,\n base_: target,\n draft_: this,\n isManual_: false,\n revoked_: false\n };\n }\n get size() {\n return latest(this[DRAFT_STATE]).size;\n }\n has(key) {\n return latest(this[DRAFT_STATE]).has(key);\n }\n set(key, value) {\n const state = this[DRAFT_STATE];\n assertUnrevoked(state);\n if (!latest(state).has(key) || latest(state).get(key) !== value) {\n prepareMapCopy(state);\n markChanged(state);\n state.assigned_.set(key, true);\n state.copy_.set(key, value);\n state.assigned_.set(key, true);\n }\n return this;\n }\n delete(key) {\n if (!this.has(key)) {\n return false;\n }\n const state = this[DRAFT_STATE];\n assertUnrevoked(state);\n prepareMapCopy(state);\n markChanged(state);\n if (state.base_.has(key)) {\n state.assigned_.set(key, false);\n } else {\n state.assigned_.delete(key);\n }\n state.copy_.delete(key);\n return true;\n }\n clear() {\n const state = this[DRAFT_STATE];\n assertUnrevoked(state);\n if (latest(state).size) {\n prepareMapCopy(state);\n markChanged(state);\n state.assigned_ = /* @__PURE__ */ new Map();\n each(state.base_, (key) => {\n state.assigned_.set(key, false);\n });\n state.copy_.clear();\n }\n }\n forEach(cb, thisArg) {\n const state = this[DRAFT_STATE];\n latest(state).forEach((_value, key, _map) => {\n cb.call(thisArg, this.get(key), key, this);\n });\n }\n get(key) {\n const state = this[DRAFT_STATE];\n assertUnrevoked(state);\n const value = latest(state).get(key);\n if (state.finalized_ || !isDraftable(value)) {\n return value;\n }\n if (value !== state.base_.get(key)) {\n return value;\n }\n const draft = createProxy(value, state);\n prepareMapCopy(state);\n state.copy_.set(key, draft);\n return draft;\n }\n keys() {\n return latest(this[DRAFT_STATE]).keys();\n }\n values() {\n const iterator = this.keys();\n return {\n [Symbol.iterator]: () => this.values(),\n next: () => {\n const r = iterator.next();\n if (r.done)\n return r;\n const value = this.get(r.value);\n return {\n done: false,\n value\n };\n }\n };\n }\n entries() {\n const iterator = this.keys();\n return {\n [Symbol.iterator]: () => this.entries(),\n next: () => {\n const r = iterator.next();\n if (r.done)\n return r;\n const value = this.get(r.value);\n return {\n done: false,\n value: [r.value, value]\n };\n }\n };\n }\n [(DRAFT_STATE, Symbol.iterator)]() {\n return this.entries();\n }\n }\n function proxyMap_(target, parent) {\n return new DraftMap(target, parent);\n }\n function prepareMapCopy(state) {\n if (!state.copy_) {\n state.assigned_ = /* @__PURE__ */ new Map();\n state.copy_ = new Map(state.base_);\n }\n }\n class DraftSet extends Set {\n constructor(target, parent) {\n super();\n this[DRAFT_STATE] = {\n type_: 3 /* Set */,\n parent_: parent,\n scope_: parent ? parent.scope_ : getCurrentScope(),\n modified_: false,\n finalized_: false,\n copy_: void 0,\n base_: target,\n draft_: this,\n drafts_: /* @__PURE__ */ new Map(),\n revoked_: false,\n isManual_: false\n };\n }\n get size() {\n return latest(this[DRAFT_STATE]).size;\n }\n has(value) {\n const state = this[DRAFT_STATE];\n assertUnrevoked(state);\n if (!state.copy_) {\n return state.base_.has(value);\n }\n if (state.copy_.has(value))\n return true;\n if (state.drafts_.has(value) && state.copy_.has(state.drafts_.get(value)))\n return true;\n return false;\n }\n add(value) {\n const state = this[DRAFT_STATE];\n assertUnrevoked(state);\n if (!this.has(value)) {\n prepareSetCopy(state);\n markChanged(state);\n state.copy_.add(value);\n }\n return this;\n }\n delete(value) {\n if (!this.has(value)) {\n return false;\n }\n const state = this[DRAFT_STATE];\n assertUnrevoked(state);\n prepareSetCopy(state);\n markChanged(state);\n return state.copy_.delete(value) || (state.drafts_.has(value) ? state.copy_.delete(state.drafts_.get(value)) : (\n /* istanbul ignore next */\n false\n ));\n }\n clear() {\n const state = this[DRAFT_STATE];\n assertUnrevoked(state);\n if (latest(state).size) {\n prepareSetCopy(state);\n markChanged(state);\n state.copy_.clear();\n }\n }\n values() {\n const state = this[DRAFT_STATE];\n assertUnrevoked(state);\n prepareSetCopy(state);\n return state.copy_.values();\n }\n entries() {\n const state = this[DRAFT_STATE];\n assertUnrevoked(state);\n prepareSetCopy(state);\n return state.copy_.entries();\n }\n keys() {\n return this.values();\n }\n [(DRAFT_STATE, Symbol.iterator)]() {\n return this.values();\n }\n forEach(cb, thisArg) {\n const iterator = this.values();\n let result = iterator.next();\n while (!result.done) {\n cb.call(thisArg, result.value, result.value, this);\n result = iterator.next();\n }\n }\n }\n function proxySet_(target, parent) {\n return new DraftSet(target, parent);\n }\n function prepareSetCopy(state) {\n if (!state.copy_) {\n state.copy_ = /* @__PURE__ */ new Set();\n state.base_.forEach((value) => {\n if (isDraftable(value)) {\n const draft = createProxy(value, state);\n state.drafts_.set(value, draft);\n state.copy_.add(draft);\n } else {\n state.copy_.add(value);\n }\n });\n }\n }\n function assertUnrevoked(state) {\n if (state.revoked_)\n die(3, JSON.stringify(latest(state)));\n }\n loadPlugin("MapSet", { proxyMap_, proxySet_ });\n}\n\n// src/immer.ts\nvar immer = new Immer2();\nvar produce = immer.produce;\nvar produceWithPatches = immer.produceWithPatches.bind(\n immer\n);\nvar setAutoFreeze = immer.setAutoFreeze.bind(immer);\nvar setUseStrictShallowCopy = immer.setUseStrictShallowCopy.bind(immer);\nvar applyPatches = immer.applyPatches.bind(immer);\nvar createDraft = immer.createDraft.bind(immer);\nvar finishDraft = immer.finishDraft.bind(immer);\nfunction castDraft(value) {\n return value;\n}\nfunction castImmutable(value) {\n return value;\n}\n\n//# sourceMappingURL=immer.mjs.map\n;// ./node_modules/@forgerock/javascript-sdk/node_modules/@reduxjs/toolkit/dist/redux-toolkit.modern.mjs\n// src/index.ts\n\n\n\n\n// src/createDraftSafeSelector.ts\n\n\nvar createDraftSafeSelectorCreator = (...args) => {\n const createSelector2 = createSelectorCreator(...args);\n const createDraftSafeSelector2 = Object.assign((...args2) => {\n const selector = createSelector2(...args2);\n const wrappedSelector = (value, ...rest) => selector(isDraft(value) ? current(value) : value, ...rest);\n Object.assign(wrappedSelector, selector);\n return wrappedSelector;\n }, {\n withTypes: () => createDraftSafeSelector2\n });\n return createDraftSafeSelector2;\n};\nvar createDraftSafeSelector = /* @__PURE__ */ (/* unused pure expression or super */ null && (createDraftSafeSelectorCreator(weakMapMemoize)));\n\n// src/configureStore.ts\n\n\n// src/devtoolsExtension.ts\n\nvar composeWithDevTools = typeof window !== "undefined" && window.__REDUX_DEVTOOLS_EXTENSION_COMPOSE__ ? window.__REDUX_DEVTOOLS_EXTENSION_COMPOSE__ : function() {\n if (arguments.length === 0) return void 0;\n if (typeof arguments[0] === "object") return compose;\n return compose.apply(null, arguments);\n};\nvar devToolsEnhancer = typeof window !== "undefined" && window.__REDUX_DEVTOOLS_EXTENSION__ ? window.__REDUX_DEVTOOLS_EXTENSION__ : function() {\n return function(noop3) {\n return noop3;\n };\n};\n\n// src/getDefaultMiddleware.ts\n\n\n// src/createAction.ts\n\n\n// src/tsHelpers.ts\nvar hasMatchFunction = (v) => {\n return v && typeof v.match === "function";\n};\n\n// src/createAction.ts\nfunction createAction(type, prepareAction) {\n function actionCreator(...args) {\n if (prepareAction) {\n let prepared = prepareAction(...args);\n if (!prepared) {\n throw new Error( true ? redux_toolkit_modern_formatProdErrorMessage(0) : 0);\n }\n return {\n type,\n payload: prepared.payload,\n ..."meta" in prepared && {\n meta: prepared.meta\n },\n ..."error" in prepared && {\n error: prepared.error\n }\n };\n }\n return {\n type,\n payload: args[0]\n };\n }\n actionCreator.toString = () => `${type}`;\n actionCreator.type = type;\n actionCreator.match = (action) => redux_isAction(action) && action.type === type;\n return actionCreator;\n}\nfunction isActionCreator(action) {\n return typeof action === "function" && "type" in action && // hasMatchFunction only wants Matchers but I don\'t see the point in rewriting it\n hasMatchFunction(action);\n}\nfunction isFSA(action) {\n return isAction(action) && Object.keys(action).every(isValidKey);\n}\nfunction isValidKey(key) {\n return ["type", "payload", "error", "meta"].indexOf(key) > -1;\n}\n\n// src/actionCreatorInvariantMiddleware.ts\nfunction getMessage(type) {\n const splitType = type ? `${type}`.split("/") : [];\n const actionName = splitType[splitType.length - 1] || "actionCreator";\n return `Detected an action creator with type "${type || "unknown"}" being dispatched. \nMake sure you\'re calling the action creator before dispatching, i.e. \\`dispatch(${actionName}())\\` instead of \\`dispatch(${actionName})\\`. This is necessary even if the action has no payload.`;\n}\nfunction createActionCreatorInvariantMiddleware(options = {}) {\n if (true) {\n return () => (next) => (action) => next(action);\n }\n const {\n isActionCreator: isActionCreator2 = isActionCreator\n } = options;\n return () => (next) => (action) => {\n if (isActionCreator2(action)) {\n console.warn(getMessage(action.type));\n }\n return next(action);\n };\n}\n\n// src/utils.ts\n\nfunction getTimeMeasureUtils(maxDelay, fnName) {\n let elapsed = 0;\n return {\n measureTime(fn) {\n const started = Date.now();\n try {\n return fn();\n } finally {\n const finished = Date.now();\n elapsed += finished - started;\n }\n },\n warnIfExceeded() {\n if (elapsed > maxDelay) {\n console.warn(`${fnName} took ${elapsed}ms, which is more than the warning threshold of ${maxDelay}ms. \nIf your state or actions are very large, you may want to disable the middleware as it might cause too much of a slowdown in development mode. See https://redux-toolkit.js.org/api/getDefaultMiddleware for instructions.\nIt is disabled in production builds, so you don\'t need to worry about that.`);\n }\n }\n };\n}\nvar Tuple = class _Tuple extends Array {\n constructor(...items) {\n super(...items);\n Object.setPrototypeOf(this, _Tuple.prototype);\n }\n static get [Symbol.species]() {\n return _Tuple;\n }\n concat(...arr) {\n return super.concat.apply(this, arr);\n }\n prepend(...arr) {\n if (arr.length === 1 && Array.isArray(arr[0])) {\n return new _Tuple(...arr[0].concat(this));\n }\n return new _Tuple(...arr.concat(this));\n }\n};\nfunction freezeDraftable(val) {\n return isDraftable(val) ? produce(val, () => {\n }) : val;\n}\nfunction getOrInsertComputed(map, key, compute) {\n if (map.has(key)) return map.get(key);\n return map.set(key, compute(key)).get(key);\n}\n\n// src/immutableStateInvariantMiddleware.ts\nfunction isImmutableDefault(value) {\n return typeof value !== "object" || value == null || Object.isFrozen(value);\n}\nfunction trackForMutations(isImmutable, ignorePaths, obj) {\n const trackedProperties = trackProperties(isImmutable, ignorePaths, obj);\n return {\n detectMutations() {\n return detectMutations(isImmutable, ignorePaths, trackedProperties, obj);\n }\n };\n}\nfunction trackProperties(isImmutable, ignorePaths = [], obj, path = "", checkedObjects = /* @__PURE__ */ new Set()) {\n const tracked = {\n value: obj\n };\n if (!isImmutable(obj) && !checkedObjects.has(obj)) {\n checkedObjects.add(obj);\n tracked.children = {};\n for (const key in obj) {\n const childPath = path ? path + "." + key : key;\n if (ignorePaths.length && ignorePaths.indexOf(childPath) !== -1) {\n continue;\n }\n tracked.children[key] = trackProperties(isImmutable, ignorePaths, obj[key], childPath);\n }\n }\n return tracked;\n}\nfunction detectMutations(isImmutable, ignoredPaths = [], trackedProperty, obj, sameParentRef = false, path = "") {\n const prevObj = trackedProperty ? trackedProperty.value : void 0;\n const sameRef = prevObj === obj;\n if (sameParentRef && !sameRef && !Number.isNaN(obj)) {\n return {\n wasMutated: true,\n path\n };\n }\n if (isImmutable(prevObj) || isImmutable(obj)) {\n return {\n wasMutated: false\n };\n }\n const keysToDetect = {};\n for (let key in trackedProperty.children) {\n keysToDetect[key] = true;\n }\n for (let key in obj) {\n keysToDetect[key] = true;\n }\n const hasIgnoredPaths = ignoredPaths.length > 0;\n for (let key in keysToDetect) {\n const nestedPath = path ? path + "." + key : key;\n if (hasIgnoredPaths) {\n const hasMatches = ignoredPaths.some((ignored) => {\n if (ignored instanceof RegExp) {\n return ignored.test(nestedPath);\n }\n return nestedPath === ignored;\n });\n if (hasMatches) {\n continue;\n }\n }\n const result = detectMutations(isImmutable, ignoredPaths, trackedProperty.children[key], obj[key], sameRef, nestedPath);\n if (result.wasMutated) {\n return result;\n }\n }\n return {\n wasMutated: false\n };\n}\nfunction createImmutableStateInvariantMiddleware(options = {}) {\n if (true) {\n return () => (next) => (action) => next(action);\n } else { var stringify, getSerialize; }\n}\n\n// src/serializableStateInvariantMiddleware.ts\n\nfunction isPlain(val) {\n const type = typeof val;\n return val == null || type === "string" || type === "boolean" || type === "number" || Array.isArray(val) || isPlainObject(val);\n}\nfunction findNonSerializableValue(value, path = "", isSerializable = isPlain, getEntries, ignoredPaths = [], cache) {\n let foundNestedSerializable;\n if (!isSerializable(value)) {\n return {\n keyPath: path || "",\n value\n };\n }\n if (typeof value !== "object" || value === null) {\n return false;\n }\n if (cache?.has(value)) return false;\n const entries = getEntries != null ? getEntries(value) : Object.entries(value);\n const hasIgnoredPaths = ignoredPaths.length > 0;\n for (const [key, nestedValue] of entries) {\n const nestedPath = path ? path + "." + key : key;\n if (hasIgnoredPaths) {\n const hasMatches = ignoredPaths.some((ignored) => {\n if (ignored instanceof RegExp) {\n return ignored.test(nestedPath);\n }\n return nestedPath === ignored;\n });\n if (hasMatches) {\n continue;\n }\n }\n if (!isSerializable(nestedValue)) {\n return {\n keyPath: nestedPath,\n value: nestedValue\n };\n }\n if (typeof nestedValue === "object") {\n foundNestedSerializable = findNonSerializableValue(nestedValue, nestedPath, isSerializable, getEntries, ignoredPaths, cache);\n if (foundNestedSerializable) {\n return foundNestedSerializable;\n }\n }\n }\n if (cache && isNestedFrozen(value)) cache.add(value);\n return false;\n}\nfunction isNestedFrozen(value) {\n if (!Object.isFrozen(value)) return false;\n for (const nestedValue of Object.values(value)) {\n if (typeof nestedValue !== "object" || nestedValue === null) continue;\n if (!isNestedFrozen(nestedValue)) return false;\n }\n return true;\n}\nfunction createSerializableStateInvariantMiddleware(options = {}) {\n if (true) {\n return () => (next) => (action) => next(action);\n } else {}\n}\n\n// src/getDefaultMiddleware.ts\nfunction isBoolean(x) {\n return typeof x === "boolean";\n}\nvar buildGetDefaultMiddleware = () => function getDefaultMiddleware(options) {\n const {\n thunk = true,\n immutableCheck = true,\n serializableCheck = true,\n actionCreatorCheck = true\n } = options ?? {};\n let middlewareArray = new Tuple();\n if (thunk) {\n if (isBoolean(thunk)) {\n middlewareArray.push(redux_thunk_thunk);\n } else {\n middlewareArray.push(withExtraArgument(thunk.extraArgument));\n }\n }\n if (false) {}\n return middlewareArray;\n};\n\n// src/autoBatchEnhancer.ts\nvar SHOULD_AUTOBATCH = "RTK_autoBatch";\nvar prepareAutoBatched = () => (payload) => ({\n payload,\n meta: {\n [SHOULD_AUTOBATCH]: true\n }\n});\nvar createQueueWithTimer = (timeout) => {\n return (notify) => {\n setTimeout(notify, timeout);\n };\n};\nvar autoBatchEnhancer = (options = {\n type: "raf"\n}) => (next) => (...args) => {\n const store = next(...args);\n let notifying = true;\n let shouldNotifyAtEndOfTick = false;\n let notificationQueued = false;\n const listeners = /* @__PURE__ */ new Set();\n const queueCallback = options.type === "tick" ? queueMicrotask : options.type === "raf" ? (\n // requestAnimationFrame won\'t exist in SSR environments. Fall back to a vague approximation just to keep from erroring.\n typeof window !== "undefined" && window.requestAnimationFrame ? window.requestAnimationFrame : createQueueWithTimer(10)\n ) : options.type === "callback" ? options.queueNotification : createQueueWithTimer(options.timeout);\n const notifyListeners = () => {\n notificationQueued = false;\n if (shouldNotifyAtEndOfTick) {\n shouldNotifyAtEndOfTick = false;\n listeners.forEach((l) => l());\n }\n };\n return Object.assign({}, store, {\n // Override the base `store.subscribe` method to keep original listeners\n // from running if we\'re delaying notifications\n subscribe(listener2) {\n const wrappedListener = () => notifying && listener2();\n const unsubscribe = store.subscribe(wrappedListener);\n listeners.add(listener2);\n return () => {\n unsubscribe();\n listeners.delete(listener2);\n };\n },\n // Override the base `store.dispatch` method so that we can check actions\n // for the `shouldAutoBatch` flag and determine if batching is active\n dispatch(action) {\n try {\n notifying = !action?.meta?.[SHOULD_AUTOBATCH];\n shouldNotifyAtEndOfTick = !notifying;\n if (shouldNotifyAtEndOfTick) {\n if (!notificationQueued) {\n notificationQueued = true;\n queueCallback(notifyListeners);\n }\n }\n return store.dispatch(action);\n } finally {\n notifying = true;\n }\n }\n });\n};\n\n// src/getDefaultEnhancers.ts\nvar buildGetDefaultEnhancers = (middlewareEnhancer) => function getDefaultEnhancers(options) {\n const {\n autoBatch = true\n } = options ?? {};\n let enhancerArray = new Tuple(middlewareEnhancer);\n if (autoBatch) {\n enhancerArray.push(autoBatchEnhancer(typeof autoBatch === "object" ? autoBatch : void 0));\n }\n return enhancerArray;\n};\n\n// src/configureStore.ts\nfunction configureStore(options) {\n const getDefaultMiddleware = buildGetDefaultMiddleware();\n const {\n reducer = void 0,\n middleware,\n devTools = true,\n preloadedState = void 0,\n enhancers = void 0\n } = options || {};\n let rootReducer;\n if (typeof reducer === "function") {\n rootReducer = reducer;\n } else if (redux_isPlainObject(reducer)) {\n rootReducer = combineReducers(reducer);\n } else {\n throw new Error( true ? redux_toolkit_modern_formatProdErrorMessage(1) : 0);\n }\n if (false) {}\n let finalMiddleware;\n if (typeof middleware === "function") {\n finalMiddleware = middleware(getDefaultMiddleware);\n if (false) {}\n } else {\n finalMiddleware = getDefaultMiddleware();\n }\n if (false) {}\n let finalCompose = compose;\n if (devTools) {\n finalCompose = composeWithDevTools({\n // Enable capture of stack traces for dispatched Redux actions\n trace: "production" !== "production",\n ...typeof devTools === "object" && devTools\n });\n }\n const middlewareEnhancer = applyMiddleware(...finalMiddleware);\n const getDefaultEnhancers = buildGetDefaultEnhancers(middlewareEnhancer);\n if (false) {}\n let storeEnhancers = typeof enhancers === "function" ? enhancers(getDefaultEnhancers) : getDefaultEnhancers();\n if (false) {}\n if (false) {}\n if (false) {}\n const composedEnhancer = finalCompose(...storeEnhancers);\n return createStore(rootReducer, preloadedState, composedEnhancer);\n}\n\n// src/createReducer.ts\n\n\n// src/mapBuilders.ts\nfunction executeReducerBuilderCallback(builderCallback) {\n const actionsMap = {};\n const actionMatchers = [];\n let defaultCaseReducer;\n const builder = {\n addCase(typeOrActionCreator, reducer) {\n if (false) {}\n const type = typeof typeOrActionCreator === "string" ? typeOrActionCreator : typeOrActionCreator.type;\n if (!type) {\n throw new Error( true ? redux_toolkit_modern_formatProdErrorMessage(28) : 0);\n }\n if (type in actionsMap) {\n throw new Error( true ? redux_toolkit_modern_formatProdErrorMessage(29) : 0);\n }\n actionsMap[type] = reducer;\n return builder;\n },\n addMatcher(matcher, reducer) {\n if (false) {}\n actionMatchers.push({\n matcher,\n reducer\n });\n return builder;\n },\n addDefaultCase(reducer) {\n if (false) {}\n defaultCaseReducer = reducer;\n return builder;\n }\n };\n builderCallback(builder);\n return [actionsMap, actionMatchers, defaultCaseReducer];\n}\n\n// src/createReducer.ts\nfunction isStateFunction(x) {\n return typeof x === "function";\n}\nfunction createReducer(initialState, mapOrBuilderCallback) {\n if (false) {}\n let [actionsMap, finalActionMatchers, finalDefaultCaseReducer] = executeReducerBuilderCallback(mapOrBuilderCallback);\n let getInitialState;\n if (isStateFunction(initialState)) {\n getInitialState = () => freezeDraftable(initialState());\n } else {\n const frozenInitialState = freezeDraftable(initialState);\n getInitialState = () => frozenInitialState;\n }\n function reducer(state = getInitialState(), action) {\n let caseReducers = [actionsMap[action.type], ...finalActionMatchers.filter(({\n matcher\n }) => matcher(action)).map(({\n reducer: reducer2\n }) => reducer2)];\n if (caseReducers.filter((cr) => !!cr).length === 0) {\n caseReducers = [finalDefaultCaseReducer];\n }\n return caseReducers.reduce((previousState, caseReducer) => {\n if (caseReducer) {\n if (immer_isDraft(previousState)) {\n const draft = previousState;\n const result = caseReducer(draft, action);\n if (result === void 0) {\n return previousState;\n }\n return result;\n } else if (!isDraftable(previousState)) {\n const result = caseReducer(previousState, action);\n if (result === void 0) {\n if (previousState === null) {\n return previousState;\n }\n throw Error("A case reducer on a non-draftable value must not return undefined");\n }\n return result;\n } else {\n return produce(previousState, (draft) => {\n return caseReducer(draft, action);\n });\n }\n }\n return previousState;\n }, state);\n }\n reducer.getInitialState = getInitialState;\n return reducer;\n}\n\n// src/matchers.ts\nvar matches = (matcher, action) => {\n if (hasMatchFunction(matcher)) {\n return matcher.match(action);\n } else {\n return matcher(action);\n }\n};\nfunction isAnyOf(...matchers) {\n return (action) => {\n return matchers.some((matcher) => matches(matcher, action));\n };\n}\nfunction isAllOf(...matchers) {\n return (action) => {\n return matchers.every((matcher) => matches(matcher, action));\n };\n}\nfunction hasExpectedRequestMetadata(action, validStatus) {\n if (!action || !action.meta) return false;\n const hasValidRequestId = typeof action.meta.requestId === "string";\n const hasValidRequestStatus = validStatus.indexOf(action.meta.requestStatus) > -1;\n return hasValidRequestId && hasValidRequestStatus;\n}\nfunction isAsyncThunkArray(a) {\n return typeof a[0] === "function" && "pending" in a[0] && "fulfilled" in a[0] && "rejected" in a[0];\n}\nfunction isPending(...asyncThunks) {\n if (asyncThunks.length === 0) {\n return (action) => hasExpectedRequestMetadata(action, ["pending"]);\n }\n if (!isAsyncThunkArray(asyncThunks)) {\n return isPending()(asyncThunks[0]);\n }\n return isAnyOf(...asyncThunks.map((asyncThunk) => asyncThunk.pending));\n}\nfunction isRejected(...asyncThunks) {\n if (asyncThunks.length === 0) {\n return (action) => hasExpectedRequestMetadata(action, ["rejected"]);\n }\n if (!isAsyncThunkArray(asyncThunks)) {\n return isRejected()(asyncThunks[0]);\n }\n return isAnyOf(...asyncThunks.map((asyncThunk) => asyncThunk.rejected));\n}\nfunction isRejectedWithValue(...asyncThunks) {\n const hasFlag = (action) => {\n return action && action.meta && action.meta.rejectedWithValue;\n };\n if (asyncThunks.length === 0) {\n return isAllOf(isRejected(...asyncThunks), hasFlag);\n }\n if (!isAsyncThunkArray(asyncThunks)) {\n return isRejectedWithValue()(asyncThunks[0]);\n }\n return isAllOf(isRejected(...asyncThunks), hasFlag);\n}\nfunction isFulfilled(...asyncThunks) {\n if (asyncThunks.length === 0) {\n return (action) => hasExpectedRequestMetadata(action, ["fulfilled"]);\n }\n if (!isAsyncThunkArray(asyncThunks)) {\n return isFulfilled()(asyncThunks[0]);\n }\n return isAnyOf(...asyncThunks.map((asyncThunk) => asyncThunk.fulfilled));\n}\nfunction isAsyncThunkAction(...asyncThunks) {\n if (asyncThunks.length === 0) {\n return (action) => hasExpectedRequestMetadata(action, ["pending", "fulfilled", "rejected"]);\n }\n if (!isAsyncThunkArray(asyncThunks)) {\n return isAsyncThunkAction()(asyncThunks[0]);\n }\n return isAnyOf(...asyncThunks.flatMap((asyncThunk) => [asyncThunk.pending, asyncThunk.rejected, asyncThunk.fulfilled]));\n}\n\n// src/nanoid.ts\nvar urlAlphabet = "ModuleSymbhasOwnPr-0123456789ABCDEFGHNRVfgctiUvz_KqYTJkLxpZXIjQW";\nvar nanoid = (size = 21) => {\n let id = "";\n let i = size;\n while (i--) {\n id += urlAlphabet[Math.random() * 64 | 0];\n }\n return id;\n};\n\n// src/createAsyncThunk.ts\nvar commonProperties = ["name", "message", "stack", "code"];\nvar RejectWithValue = class {\n constructor(payload, meta) {\n this.payload = payload;\n this.meta = meta;\n }\n /*\n type-only property to distinguish between RejectWithValue and FulfillWithMeta\n does not exist at runtime\n */\n _type;\n};\nvar FulfillWithMeta = class {\n constructor(payload, meta) {\n this.payload = payload;\n this.meta = meta;\n }\n /*\n type-only property to distinguish between RejectWithValue and FulfillWithMeta\n does not exist at runtime\n */\n _type;\n};\nvar miniSerializeError = (value) => {\n if (typeof value === "object" && value !== null) {\n const simpleError = {};\n for (const property of commonProperties) {\n if (typeof value[property] === "string") {\n simpleError[property] = value[property];\n }\n }\n return simpleError;\n }\n return {\n message: String(value)\n };\n};\nvar createAsyncThunk = /* @__PURE__ */ (() => {\n function createAsyncThunk2(typePrefix, payloadCreator, options) {\n const fulfilled = createAction(typePrefix + "/fulfilled", (payload, requestId, arg, meta) => ({\n payload,\n meta: {\n ...meta || {},\n arg,\n requestId,\n requestStatus: "fulfilled"\n }\n }));\n const pending = createAction(typePrefix + "/pending", (requestId, arg, meta) => ({\n payload: void 0,\n meta: {\n ...meta || {},\n arg,\n requestId,\n requestStatus: "pending"\n }\n }));\n const rejected = createAction(typePrefix + "/rejected", (error, requestId, arg, payload, meta) => ({\n payload,\n error: (options && options.serializeError || miniSerializeError)(error || "Rejected"),\n meta: {\n ...meta || {},\n arg,\n requestId,\n rejectedWithValue: !!payload,\n requestStatus: "rejected",\n aborted: error?.name === "AbortError",\n condition: error?.name === "ConditionError"\n }\n }));\n function actionCreator(arg) {\n return (dispatch, getState, extra) => {\n const requestId = options?.idGenerator ? options.idGenerator(arg) : nanoid();\n const abortController = new AbortController();\n let abortHandler;\n let abortReason;\n function abort(reason) {\n abortReason = reason;\n abortController.abort();\n }\n const promise = async function() {\n let finalAction;\n try {\n let conditionResult = options?.condition?.(arg, {\n getState,\n extra\n });\n if (isThenable(conditionResult)) {\n conditionResult = await conditionResult;\n }\n if (conditionResult === false || abortController.signal.aborted) {\n throw {\n name: "ConditionError",\n message: "Aborted due to condition callback returning false."\n };\n }\n const abortedPromise = new Promise((_, reject) => {\n abortHandler = () => {\n reject({\n name: "AbortError",\n message: abortReason || "Aborted"\n });\n };\n abortController.signal.addEventListener("abort", abortHandler);\n });\n dispatch(pending(requestId, arg, options?.getPendingMeta?.({\n requestId,\n arg\n }, {\n getState,\n extra\n })));\n finalAction = await Promise.race([abortedPromise, Promise.resolve(payloadCreator(arg, {\n dispatch,\n getState,\n extra,\n requestId,\n signal: abortController.signal,\n abort,\n rejectWithValue: (value, meta) => {\n return new RejectWithValue(value, meta);\n },\n fulfillWithValue: (value, meta) => {\n return new FulfillWithMeta(value, meta);\n }\n })).then((result) => {\n if (result instanceof RejectWithValue) {\n throw result;\n }\n if (result instanceof FulfillWithMeta) {\n return fulfilled(result.payload, requestId, arg, result.meta);\n }\n return fulfilled(result, requestId, arg);\n })]);\n } catch (err) {\n finalAction = err instanceof RejectWithValue ? rejected(null, requestId, arg, err.payload, err.meta) : rejected(err, requestId, arg);\n } finally {\n if (abortHandler) {\n abortController.signal.removeEventListener("abort", abortHandler);\n }\n }\n const skipDispatch = options && !options.dispatchConditionRejection && rejected.match(finalAction) && finalAction.meta.condition;\n if (!skipDispatch) {\n dispatch(finalAction);\n }\n return finalAction;\n }();\n return Object.assign(promise, {\n abort,\n requestId,\n arg,\n unwrap() {\n return promise.then(unwrapResult);\n }\n });\n };\n }\n return Object.assign(actionCreator, {\n pending,\n rejected,\n fulfilled,\n settled: isAnyOf(rejected, fulfilled),\n typePrefix\n });\n }\n createAsyncThunk2.withTypes = () => createAsyncThunk2;\n return createAsyncThunk2;\n})();\nfunction unwrapResult(action) {\n if (action.meta && action.meta.rejectedWithValue) {\n throw action.payload;\n }\n if (action.error) {\n throw action.error;\n }\n return action.payload;\n}\nfunction isThenable(value) {\n return value !== null && typeof value === "object" && typeof value.then === "function";\n}\n\n// src/createSlice.ts\nvar asyncThunkSymbol = /* @__PURE__ */ Symbol.for("rtk-slice-createasyncthunk");\nvar asyncThunkCreator = {\n [asyncThunkSymbol]: createAsyncThunk\n};\nvar ReducerType = /* @__PURE__ */ ((ReducerType2) => {\n ReducerType2["reducer"] = "reducer";\n ReducerType2["reducerWithPrepare"] = "reducerWithPrepare";\n ReducerType2["asyncThunk"] = "asyncThunk";\n return ReducerType2;\n})(ReducerType || {});\nfunction getType(slice, actionKey) {\n return `${slice}/${actionKey}`;\n}\nfunction buildCreateSlice({\n creators\n} = {}) {\n const cAT = creators?.asyncThunk?.[asyncThunkSymbol];\n return function createSlice2(options) {\n const {\n name,\n reducerPath = name\n } = options;\n if (!name) {\n throw new Error( true ? redux_toolkit_modern_formatProdErrorMessage(11) : 0);\n }\n if (typeof process !== "undefined" && "production" === "development") {}\n const reducers = (typeof options.reducers === "function" ? options.reducers(buildReducerCreators()) : options.reducers) || {};\n const reducerNames = Object.keys(reducers);\n const context = {\n sliceCaseReducersByName: {},\n sliceCaseReducersByType: {},\n actionCreators: {},\n sliceMatchers: []\n };\n const contextMethods = {\n addCase(typeOrActionCreator, reducer2) {\n const type = typeof typeOrActionCreator === "string" ? typeOrActionCreator : typeOrActionCreator.type;\n if (!type) {\n throw new Error( true ? redux_toolkit_modern_formatProdErrorMessage(12) : 0);\n }\n if (type in context.sliceCaseReducersByType) {\n throw new Error( true ? redux_toolkit_modern_formatProdErrorMessage(13) : 0);\n }\n context.sliceCaseReducersByType[type] = reducer2;\n return contextMethods;\n },\n addMatcher(matcher, reducer2) {\n context.sliceMatchers.push({\n matcher,\n reducer: reducer2\n });\n return contextMethods;\n },\n exposeAction(name2, actionCreator) {\n context.actionCreators[name2] = actionCreator;\n return contextMethods;\n },\n exposeCaseReducer(name2, reducer2) {\n context.sliceCaseReducersByName[name2] = reducer2;\n return contextMethods;\n }\n };\n reducerNames.forEach((reducerName) => {\n const reducerDefinition = reducers[reducerName];\n const reducerDetails = {\n reducerName,\n type: getType(name, reducerName),\n createNotation: typeof options.reducers === "function"\n };\n if (isAsyncThunkSliceReducerDefinition(reducerDefinition)) {\n handleThunkCaseReducerDefinition(reducerDetails, reducerDefinition, contextMethods, cAT);\n } else {\n handleNormalReducerDefinition(reducerDetails, reducerDefinition, contextMethods);\n }\n });\n function buildReducer() {\n if (false) {}\n const [extraReducers = {}, actionMatchers = [], defaultCaseReducer = void 0] = typeof options.extraReducers === "function" ? executeReducerBuilderCallback(options.extraReducers) : [options.extraReducers];\n const finalCaseReducers = {\n ...extraReducers,\n ...context.sliceCaseReducersByType\n };\n return createReducer(options.initialState, (builder) => {\n for (let key in finalCaseReducers) {\n builder.addCase(key, finalCaseReducers[key]);\n }\n for (let sM of context.sliceMatchers) {\n builder.addMatcher(sM.matcher, sM.reducer);\n }\n for (let m of actionMatchers) {\n builder.addMatcher(m.matcher, m.reducer);\n }\n if (defaultCaseReducer) {\n builder.addDefaultCase(defaultCaseReducer);\n }\n });\n }\n const selectSelf = (state) => state;\n const injectedSelectorCache = /* @__PURE__ */ new Map();\n let _reducer;\n function reducer(state, action) {\n if (!_reducer) _reducer = buildReducer();\n return _reducer(state, action);\n }\n function getInitialState() {\n if (!_reducer) _reducer = buildReducer();\n return _reducer.getInitialState();\n }\n function makeSelectorProps(reducerPath2, injected = false) {\n function selectSlice(state) {\n let sliceState = state[reducerPath2];\n if (typeof sliceState === "undefined") {\n if (injected) {\n sliceState = getInitialState();\n } else if (false) {}\n }\n return sliceState;\n }\n function getSelectors(selectState = selectSelf) {\n const selectorCache = getOrInsertComputed(injectedSelectorCache, injected, () => /* @__PURE__ */ new WeakMap());\n return getOrInsertComputed(selectorCache, selectState, () => {\n const map = {};\n for (const [name2, selector] of Object.entries(options.selectors ?? {})) {\n map[name2] = wrapSelector(selector, selectState, getInitialState, injected);\n }\n return map;\n });\n }\n return {\n reducerPath: reducerPath2,\n getSelectors,\n get selectors() {\n return getSelectors(selectSlice);\n },\n selectSlice\n };\n }\n const slice = {\n name,\n reducer,\n actions: context.actionCreators,\n caseReducers: context.sliceCaseReducersByName,\n getInitialState,\n ...makeSelectorProps(reducerPath),\n injectInto(injectable, {\n reducerPath: pathOpt,\n ...config\n } = {}) {\n const newReducerPath = pathOpt ?? reducerPath;\n injectable.inject({\n reducerPath: newReducerPath,\n reducer\n }, config);\n return {\n ...slice,\n ...makeSelectorProps(newReducerPath, true)\n };\n }\n };\n return slice;\n };\n}\nfunction wrapSelector(selector, selectState, getInitialState, injected) {\n function wrapper(rootState, ...args) {\n let sliceState = selectState(rootState);\n if (typeof sliceState === "undefined") {\n if (injected) {\n sliceState = getInitialState();\n } else if (false) {}\n }\n return selector(sliceState, ...args);\n }\n wrapper.unwrapped = selector;\n return wrapper;\n}\nvar createSlice = /* @__PURE__ */ buildCreateSlice();\nfunction buildReducerCreators() {\n function asyncThunk(payloadCreator, config) {\n return {\n _reducerDefinitionType: "asyncThunk" /* asyncThunk */,\n payloadCreator,\n ...config\n };\n }\n asyncThunk.withTypes = () => asyncThunk;\n return {\n reducer(caseReducer) {\n return Object.assign({\n // hack so the wrapping function has the same name as the original\n // we need to create a wrapper so the `reducerDefinitionType` is not assigned to the original\n [caseReducer.name](...args) {\n return caseReducer(...args);\n }\n }[caseReducer.name], {\n _reducerDefinitionType: "reducer" /* reducer */\n });\n },\n preparedReducer(prepare, reducer) {\n return {\n _reducerDefinitionType: "reducerWithPrepare" /* reducerWithPrepare */,\n prepare,\n reducer\n };\n },\n asyncThunk\n };\n}\nfunction handleNormalReducerDefinition({\n type,\n reducerName,\n createNotation\n}, maybeReducerWithPrepare, context) {\n let caseReducer;\n let prepareCallback;\n if ("reducer" in maybeReducerWithPrepare) {\n if (createNotation && !isCaseReducerWithPrepareDefinition(maybeReducerWithPrepare)) {\n throw new Error( true ? redux_toolkit_modern_formatProdErrorMessage(17) : 0);\n }\n caseReducer = maybeReducerWithPrepare.reducer;\n prepareCallback = maybeReducerWithPrepare.prepare;\n } else {\n caseReducer = maybeReducerWithPrepare;\n }\n context.addCase(type, caseReducer).exposeCaseReducer(reducerName, caseReducer).exposeAction(reducerName, prepareCallback ? createAction(type, prepareCallback) : createAction(type));\n}\nfunction isAsyncThunkSliceReducerDefinition(reducerDefinition) {\n return reducerDefinition._reducerDefinitionType === "asyncThunk" /* asyncThunk */;\n}\nfunction isCaseReducerWithPrepareDefinition(reducerDefinition) {\n return reducerDefinition._reducerDefinitionType === "reducerWithPrepare" /* reducerWithPrepare */;\n}\nfunction handleThunkCaseReducerDefinition({\n type,\n reducerName\n}, reducerDefinition, context, cAT) {\n if (!cAT) {\n throw new Error( true ? redux_toolkit_modern_formatProdErrorMessage(18) : 0);\n }\n const {\n payloadCreator,\n fulfilled,\n pending,\n rejected,\n settled,\n options\n } = reducerDefinition;\n const thunk = cAT(type, payloadCreator, options);\n context.exposeAction(reducerName, thunk);\n if (fulfilled) {\n context.addCase(thunk.fulfilled, fulfilled);\n }\n if (pending) {\n context.addCase(thunk.pending, pending);\n }\n if (rejected) {\n context.addCase(thunk.rejected, rejected);\n }\n if (settled) {\n context.addMatcher(thunk.settled, settled);\n }\n context.exposeCaseReducer(reducerName, {\n fulfilled: fulfilled || noop,\n pending: pending || noop,\n rejected: rejected || noop,\n settled: settled || noop\n });\n}\nfunction noop() {\n}\n\n// src/entities/entity_state.ts\nfunction getInitialEntityState() {\n return {\n ids: [],\n entities: {}\n };\n}\nfunction createInitialStateFactory(stateAdapter) {\n function getInitialState(additionalState = {}, entities) {\n const state = Object.assign(getInitialEntityState(), additionalState);\n return entities ? stateAdapter.setAll(state, entities) : state;\n }\n return {\n getInitialState\n };\n}\n\n// src/entities/state_selectors.ts\nfunction createSelectorsFactory() {\n function getSelectors(selectState, options = {}) {\n const {\n createSelector: createSelector2 = createDraftSafeSelector\n } = options;\n const selectIds = (state) => state.ids;\n const selectEntities = (state) => state.entities;\n const selectAll = createSelector2(selectIds, selectEntities, (ids, entities) => ids.map((id) => entities[id]));\n const selectId = (_, id) => id;\n const selectById = (entities, id) => entities[id];\n const selectTotal = createSelector2(selectIds, (ids) => ids.length);\n if (!selectState) {\n return {\n selectIds,\n selectEntities,\n selectAll,\n selectTotal,\n selectById: createSelector2(selectEntities, selectId, selectById)\n };\n }\n const selectGlobalizedEntities = createSelector2(selectState, selectEntities);\n return {\n selectIds: createSelector2(selectState, selectIds),\n selectEntities: selectGlobalizedEntities,\n selectAll: createSelector2(selectState, selectAll),\n selectTotal: createSelector2(selectState, selectTotal),\n selectById: createSelector2(selectGlobalizedEntities, selectId, selectById)\n };\n }\n return {\n getSelectors\n };\n}\n\n// src/entities/state_adapter.ts\n\nvar isDraftTyped = (/* unused pure expression or super */ null && (isDraft3));\nfunction createSingleArgumentStateOperator(mutator) {\n const operator = createStateOperator((_, state) => mutator(state));\n return function operation(state) {\n return operator(state, void 0);\n };\n}\nfunction createStateOperator(mutator) {\n return function operation(state, arg) {\n function isPayloadActionArgument(arg2) {\n return isFSA(arg2);\n }\n const runMutator = (draft) => {\n if (isPayloadActionArgument(arg)) {\n mutator(arg.payload, draft);\n } else {\n mutator(arg, draft);\n }\n };\n if (isDraftTyped(state)) {\n runMutator(state);\n return state;\n }\n return createNextState3(state, runMutator);\n };\n}\n\n// src/entities/utils.ts\n\nfunction selectIdValue(entity, selectId) {\n const key = selectId(entity);\n if (false) {}\n return key;\n}\nfunction ensureEntitiesArray(entities) {\n if (!Array.isArray(entities)) {\n entities = Object.values(entities);\n }\n return entities;\n}\nfunction getCurrent(value) {\n return isDraft4(value) ? current2(value) : value;\n}\nfunction splitAddedUpdatedEntities(newEntities, selectId, state) {\n newEntities = ensureEntitiesArray(newEntities);\n const existingIdsArray = getCurrent(state.ids);\n const existingIds = new Set(existingIdsArray);\n const added = [];\n const updated = [];\n for (const entity of newEntities) {\n const id = selectIdValue(entity, selectId);\n if (existingIds.has(id)) {\n updated.push({\n id,\n changes: entity\n });\n } else {\n added.push(entity);\n }\n }\n return [added, updated, existingIdsArray];\n}\n\n// src/entities/unsorted_state_adapter.ts\nfunction createUnsortedStateAdapter(selectId) {\n function addOneMutably(entity, state) {\n const key = selectIdValue(entity, selectId);\n if (key in state.entities) {\n return;\n }\n state.ids.push(key);\n state.entities[key] = entity;\n }\n function addManyMutably(newEntities, state) {\n newEntities = ensureEntitiesArray(newEntities);\n for (const entity of newEntities) {\n addOneMutably(entity, state);\n }\n }\n function setOneMutably(entity, state) {\n const key = selectIdValue(entity, selectId);\n if (!(key in state.entities)) {\n state.ids.push(key);\n }\n ;\n state.entities[key] = entity;\n }\n function setManyMutably(newEntities, state) {\n newEntities = ensureEntitiesArray(newEntities);\n for (const entity of newEntities) {\n setOneMutably(entity, state);\n }\n }\n function setAllMutably(newEntities, state) {\n newEntities = ensureEntitiesArray(newEntities);\n state.ids = [];\n state.entities = {};\n addManyMutably(newEntities, state);\n }\n function removeOneMutably(key, state) {\n return removeManyMutably([key], state);\n }\n function removeManyMutably(keys, state) {\n let didMutate = false;\n keys.forEach((key) => {\n if (key in state.entities) {\n delete state.entities[key];\n didMutate = true;\n }\n });\n if (didMutate) {\n state.ids = state.ids.filter((id) => id in state.entities);\n }\n }\n function removeAllMutably(state) {\n Object.assign(state, {\n ids: [],\n entities: {}\n });\n }\n function takeNewKey(keys, update, state) {\n const original3 = state.entities[update.id];\n if (original3 === void 0) {\n return false;\n }\n const updated = Object.assign({}, original3, update.changes);\n const newKey = selectIdValue(updated, selectId);\n const hasNewKey = newKey !== update.id;\n if (hasNewKey) {\n keys[update.id] = newKey;\n delete state.entities[update.id];\n }\n ;\n state.entities[newKey] = updated;\n return hasNewKey;\n }\n function updateOneMutably(update, state) {\n return updateManyMutably([update], state);\n }\n function updateManyMutably(updates, state) {\n const newKeys = {};\n const updatesPerEntity = {};\n updates.forEach((update) => {\n if (update.id in state.entities) {\n updatesPerEntity[update.id] = {\n id: update.id,\n // Spreads ignore falsy values, so this works even if there isn\'t\n // an existing update already at this key\n changes: {\n ...updatesPerEntity[update.id]?.changes,\n ...update.changes\n }\n };\n }\n });\n updates = Object.values(updatesPerEntity);\n const didMutateEntities = updates.length > 0;\n if (didMutateEntities) {\n const didMutateIds = updates.filter((update) => takeNewKey(newKeys, update, state)).length > 0;\n if (didMutateIds) {\n state.ids = Object.values(state.entities).map((e) => selectIdValue(e, selectId));\n }\n }\n }\n function upsertOneMutably(entity, state) {\n return upsertManyMutably([entity], state);\n }\n function upsertManyMutably(newEntities, state) {\n const [added, updated] = splitAddedUpdatedEntities(newEntities, selectId, state);\n updateManyMutably(updated, state);\n addManyMutably(added, state);\n }\n return {\n removeAll: createSingleArgumentStateOperator(removeAllMutably),\n addOne: createStateOperator(addOneMutably),\n addMany: createStateOperator(addManyMutably),\n setOne: createStateOperator(setOneMutably),\n setMany: createStateOperator(setManyMutably),\n setAll: createStateOperator(setAllMutably),\n updateOne: createStateOperator(updateOneMutably),\n updateMany: createStateOperator(updateManyMutably),\n upsertOne: createStateOperator(upsertOneMutably),\n upsertMany: createStateOperator(upsertManyMutably),\n removeOne: createStateOperator(removeOneMutably),\n removeMany: createStateOperator(removeManyMutably)\n };\n}\n\n// src/entities/sorted_state_adapter.ts\nfunction findInsertIndex(sortedItems, item, comparisonFunction) {\n let lowIndex = 0;\n let highIndex = sortedItems.length;\n while (lowIndex < highIndex) {\n let middleIndex = lowIndex + highIndex >>> 1;\n const currentItem = sortedItems[middleIndex];\n const res = comparisonFunction(item, currentItem);\n if (res >= 0) {\n lowIndex = middleIndex + 1;\n } else {\n highIndex = middleIndex;\n }\n }\n return lowIndex;\n}\nfunction insert(sortedItems, item, comparisonFunction) {\n const insertAtIndex = findInsertIndex(sortedItems, item, comparisonFunction);\n sortedItems.splice(insertAtIndex, 0, item);\n return sortedItems;\n}\nfunction createSortedStateAdapter(selectId, comparer) {\n const {\n removeOne,\n removeMany,\n removeAll\n } = createUnsortedStateAdapter(selectId);\n function addOneMutably(entity, state) {\n return addManyMutably([entity], state);\n }\n function addManyMutably(newEntities, state, existingIds) {\n newEntities = ensureEntitiesArray(newEntities);\n const existingKeys = new Set(existingIds ?? getCurrent(state.ids));\n const models = newEntities.filter((model) => !existingKeys.has(selectIdValue(model, selectId)));\n if (models.length !== 0) {\n mergeFunction(state, models);\n }\n }\n function setOneMutably(entity, state) {\n return setManyMutably([entity], state);\n }\n function setManyMutably(newEntities, state) {\n newEntities = ensureEntitiesArray(newEntities);\n if (newEntities.length !== 0) {\n for (const item of newEntities) {\n delete state.entities[selectId(item)];\n }\n mergeFunction(state, newEntities);\n }\n }\n function setAllMutably(newEntities, state) {\n newEntities = ensureEntitiesArray(newEntities);\n state.entities = {};\n state.ids = [];\n addManyMutably(newEntities, state, []);\n }\n function updateOneMutably(update, state) {\n return updateManyMutably([update], state);\n }\n function updateManyMutably(updates, state) {\n let appliedUpdates = false;\n let replacedIds = false;\n for (let update of updates) {\n const entity = state.entities[update.id];\n if (!entity) {\n continue;\n }\n appliedUpdates = true;\n Object.assign(entity, update.changes);\n const newId = selectId(entity);\n if (update.id !== newId) {\n replacedIds = true;\n delete state.entities[update.id];\n const oldIndex = state.ids.indexOf(update.id);\n state.ids[oldIndex] = newId;\n state.entities[newId] = entity;\n }\n }\n if (appliedUpdates) {\n mergeFunction(state, [], appliedUpdates, replacedIds);\n }\n }\n function upsertOneMutably(entity, state) {\n return upsertManyMutably([entity], state);\n }\n function upsertManyMutably(newEntities, state) {\n const [added, updated, existingIdsArray] = splitAddedUpdatedEntities(newEntities, selectId, state);\n if (updated.length) {\n updateManyMutably(updated, state);\n }\n if (added.length) {\n addManyMutably(added, state, existingIdsArray);\n }\n }\n function areArraysEqual(a, b) {\n if (a.length !== b.length) {\n return false;\n }\n for (let i = 0; i < a.length; i++) {\n if (a[i] === b[i]) {\n continue;\n }\n return false;\n }\n return true;\n }\n const mergeFunction = (state, addedItems, appliedUpdates, replacedIds) => {\n const currentEntities = getCurrent(state.entities);\n const currentIds = getCurrent(state.ids);\n const stateEntities = state.entities;\n let ids = currentIds;\n if (replacedIds) {\n ids = new Set(currentIds);\n }\n let sortedEntities = [];\n for (const id of ids) {\n const entity = currentEntities[id];\n if (entity) {\n sortedEntities.push(entity);\n }\n }\n const wasPreviouslyEmpty = sortedEntities.length === 0;\n for (const item of addedItems) {\n stateEntities[selectId(item)] = item;\n if (!wasPreviouslyEmpty) {\n insert(sortedEntities, item, comparer);\n }\n }\n if (wasPreviouslyEmpty) {\n sortedEntities = addedItems.slice().sort(comparer);\n } else if (appliedUpdates) {\n sortedEntities.sort(comparer);\n }\n const newSortedIds = sortedEntities.map(selectId);\n if (!areArraysEqual(currentIds, newSortedIds)) {\n state.ids = newSortedIds;\n }\n };\n return {\n removeOne,\n removeMany,\n removeAll,\n addOne: createStateOperator(addOneMutably),\n updateOne: createStateOperator(updateOneMutably),\n upsertOne: createStateOperator(upsertOneMutably),\n setOne: createStateOperator(setOneMutably),\n setMany: createStateOperator(setManyMutably),\n setAll: createStateOperator(setAllMutably),\n addMany: createStateOperator(addManyMutably),\n updateMany: createStateOperator(updateManyMutably),\n upsertMany: createStateOperator(upsertManyMutably)\n };\n}\n\n// src/entities/create_adapter.ts\nfunction createEntityAdapter(options = {}) {\n const {\n selectId,\n sortComparer\n } = {\n sortComparer: false,\n selectId: (instance) => instance.id,\n ...options\n };\n const stateAdapter = sortComparer ? createSortedStateAdapter(selectId, sortComparer) : createUnsortedStateAdapter(selectId);\n const stateFactory = createInitialStateFactory(stateAdapter);\n const selectorsFactory = createSelectorsFactory();\n return {\n selectId,\n sortComparer,\n ...stateFactory,\n ...selectorsFactory,\n ...stateAdapter\n };\n}\n\n// src/listenerMiddleware/index.ts\n\n\n// src/listenerMiddleware/exceptions.ts\nvar task = "task";\nvar listener = "listener";\nvar completed = "completed";\nvar cancelled = "cancelled";\nvar taskCancelled = (/* unused pure expression or super */ null && (`task-${cancelled}`));\nvar taskCompleted = (/* unused pure expression or super */ null && (`task-${completed}`));\nvar listenerCancelled = (/* unused pure expression or super */ null && (`${listener}-${cancelled}`));\nvar listenerCompleted = (/* unused pure expression or super */ null && (`${listener}-${completed}`));\nvar TaskAbortError = class {\n constructor(code) {\n this.code = code;\n this.message = `${task} ${cancelled} (reason: ${code})`;\n }\n name = "TaskAbortError";\n message;\n};\n\n// src/listenerMiddleware/utils.ts\nvar assertFunction = (func, expected) => {\n if (typeof func !== "function") {\n throw new TypeError( true ? redux_toolkit_modern_formatProdErrorMessage(32) : 0);\n }\n};\nvar noop2 = () => {\n};\nvar catchRejection = (promise, onError = noop2) => {\n promise.catch(onError);\n return promise;\n};\nvar addAbortSignalListener = (abortSignal, callback) => {\n abortSignal.addEventListener("abort", callback, {\n once: true\n });\n return () => abortSignal.removeEventListener("abort", callback);\n};\nvar abortControllerWithReason = (abortController, reason) => {\n const signal = abortController.signal;\n if (signal.aborted) {\n return;\n }\n if (!("reason" in signal)) {\n Object.defineProperty(signal, "reason", {\n enumerable: true,\n value: reason,\n configurable: true,\n writable: true\n });\n }\n ;\n abortController.abort(reason);\n};\n\n// src/listenerMiddleware/task.ts\nvar validateActive = (signal) => {\n if (signal.aborted) {\n const {\n reason\n } = signal;\n throw new TaskAbortError(reason);\n }\n};\nfunction raceWithSignal(signal, promise) {\n let cleanup = noop2;\n return new Promise((resolve, reject) => {\n const notifyRejection = () => reject(new TaskAbortError(signal.reason));\n if (signal.aborted) {\n notifyRejection();\n return;\n }\n cleanup = addAbortSignalListener(signal, notifyRejection);\n promise.finally(() => cleanup()).then(resolve, reject);\n }).finally(() => {\n cleanup = noop2;\n });\n}\nvar runTask = async (task2, cleanUp) => {\n try {\n await Promise.resolve();\n const value = await task2();\n return {\n status: "ok",\n value\n };\n } catch (error) {\n return {\n status: error instanceof TaskAbortError ? "cancelled" : "rejected",\n error\n };\n } finally {\n cleanUp?.();\n }\n};\nvar createPause = (signal) => {\n return (promise) => {\n return catchRejection(raceWithSignal(signal, promise).then((output) => {\n validateActive(signal);\n return output;\n }));\n };\n};\nvar createDelay = (signal) => {\n const pause = createPause(signal);\n return (timeoutMs) => {\n return pause(new Promise((resolve) => setTimeout(resolve, timeoutMs)));\n };\n};\n\n// src/listenerMiddleware/index.ts\nvar {\n assign: redux_toolkit_modern_assign\n} = Object;\nvar INTERNAL_NIL_TOKEN = {};\nvar alm = "listenerMiddleware";\nvar createFork = (parentAbortSignal, parentBlockingPromises) => {\n const linkControllers = (controller) => addAbortSignalListener(parentAbortSignal, () => abortControllerWithReason(controller, parentAbortSignal.reason));\n return (taskExecutor, opts) => {\n assertFunction(taskExecutor, "taskExecutor");\n const childAbortController = new AbortController();\n linkControllers(childAbortController);\n const result = runTask(async () => {\n validateActive(parentAbortSignal);\n validateActive(childAbortController.signal);\n const result2 = await taskExecutor({\n pause: createPause(childAbortController.signal),\n delay: createDelay(childAbortController.signal),\n signal: childAbortController.signal\n });\n validateActive(childAbortController.signal);\n return result2;\n }, () => abortControllerWithReason(childAbortController, taskCompleted));\n if (opts?.autoJoin) {\n parentBlockingPromises.push(result.catch(noop2));\n }\n return {\n result: createPause(parentAbortSignal)(result),\n cancel() {\n abortControllerWithReason(childAbortController, taskCancelled);\n }\n };\n };\n};\nvar createTakePattern = (startListening, signal) => {\n const take = async (predicate, timeout) => {\n validateActive(signal);\n let unsubscribe = () => {\n };\n const tuplePromise = new Promise((resolve, reject) => {\n let stopListening = startListening({\n predicate,\n effect: (action, listenerApi) => {\n listenerApi.unsubscribe();\n resolve([action, listenerApi.getState(), listenerApi.getOriginalState()]);\n }\n });\n unsubscribe = () => {\n stopListening();\n reject();\n };\n });\n const promises = [tuplePromise];\n if (timeout != null) {\n promises.push(new Promise((resolve) => setTimeout(resolve, timeout, null)));\n }\n try {\n const output = await raceWithSignal(signal, Promise.race(promises));\n validateActive(signal);\n return output;\n } finally {\n unsubscribe();\n }\n };\n return (predicate, timeout) => catchRejection(take(predicate, timeout));\n};\nvar getListenerEntryPropsFrom = (options) => {\n let {\n type,\n actionCreator,\n matcher,\n predicate,\n effect\n } = options;\n if (type) {\n predicate = createAction(type).match;\n } else if (actionCreator) {\n type = actionCreator.type;\n predicate = actionCreator.match;\n } else if (matcher) {\n predicate = matcher;\n } else if (predicate) {\n } else {\n throw new Error( true ? redux_toolkit_modern_formatProdErrorMessage(21) : 0);\n }\n assertFunction(effect, "options.listener");\n return {\n predicate,\n type,\n effect\n };\n};\nvar createListenerEntry = /* @__PURE__ */ redux_toolkit_modern_assign((options) => {\n const {\n type,\n predicate,\n effect\n } = getListenerEntryPropsFrom(options);\n const entry = {\n id: nanoid(),\n effect,\n type,\n predicate,\n pending: /* @__PURE__ */ new Set(),\n unsubscribe: () => {\n throw new Error( true ? redux_toolkit_modern_formatProdErrorMessage(22) : 0);\n }\n };\n return entry;\n}, {\n withTypes: () => createListenerEntry\n});\nvar findListenerEntry = (listenerMap, options) => {\n const {\n type,\n effect,\n predicate\n } = getListenerEntryPropsFrom(options);\n return Array.from(listenerMap.values()).find((entry) => {\n const matchPredicateOrType = typeof type === "string" ? entry.type === type : entry.predicate === predicate;\n return matchPredicateOrType && entry.effect === effect;\n });\n};\nvar cancelActiveListeners = (entry) => {\n entry.pending.forEach((controller) => {\n abortControllerWithReason(controller, listenerCancelled);\n });\n};\nvar createClearListenerMiddleware = (listenerMap) => {\n return () => {\n listenerMap.forEach(cancelActiveListeners);\n listenerMap.clear();\n };\n};\nvar safelyNotifyError = (errorHandler, errorToNotify, errorInfo) => {\n try {\n errorHandler(errorToNotify, errorInfo);\n } catch (errorHandlerError) {\n setTimeout(() => {\n throw errorHandlerError;\n }, 0);\n }\n};\nvar addListener = /* @__PURE__ */ redux_toolkit_modern_assign(/* @__PURE__ */ createAction(`${alm}/add`), {\n withTypes: () => addListener\n});\nvar clearAllListeners = /* @__PURE__ */ (/* unused pure expression or super */ null && (createAction(`${alm}/removeAll`)));\nvar removeListener = /* @__PURE__ */ redux_toolkit_modern_assign(/* @__PURE__ */ createAction(`${alm}/remove`), {\n withTypes: () => removeListener\n});\nvar defaultErrorHandler = (...args) => {\n console.error(`${alm}/error`, ...args);\n};\nvar createListenerMiddleware = (middlewareOptions = {}) => {\n const listenerMap = /* @__PURE__ */ new Map();\n const {\n extra,\n onError = defaultErrorHandler\n } = middlewareOptions;\n assertFunction(onError, "onError");\n const insertEntry = (entry) => {\n entry.unsubscribe = () => listenerMap.delete(entry.id);\n listenerMap.set(entry.id, entry);\n return (cancelOptions) => {\n entry.unsubscribe();\n if (cancelOptions?.cancelActive) {\n cancelActiveListeners(entry);\n }\n };\n };\n const startListening = (options) => {\n const entry = findListenerEntry(listenerMap, options) ?? createListenerEntry(options);\n return insertEntry(entry);\n };\n redux_toolkit_modern_assign(startListening, {\n withTypes: () => startListening\n });\n const stopListening = (options) => {\n const entry = findListenerEntry(listenerMap, options);\n if (entry) {\n entry.unsubscribe();\n if (options.cancelActive) {\n cancelActiveListeners(entry);\n }\n }\n return !!entry;\n };\n redux_toolkit_modern_assign(stopListening, {\n withTypes: () => stopListening\n });\n const notifyListener = async (entry, action, api, getOriginalState) => {\n const internalTaskController = new AbortController();\n const take = createTakePattern(startListening, internalTaskController.signal);\n const autoJoinPromises = [];\n try {\n entry.pending.add(internalTaskController);\n await Promise.resolve(entry.effect(\n action,\n // Use assign() rather than ... to avoid extra helper functions added to bundle\n redux_toolkit_modern_assign({}, api, {\n getOriginalState,\n condition: (predicate, timeout) => take(predicate, timeout).then(Boolean),\n take,\n delay: createDelay(internalTaskController.signal),\n pause: createPause(internalTaskController.signal),\n extra,\n signal: internalTaskController.signal,\n fork: createFork(internalTaskController.signal, autoJoinPromises),\n unsubscribe: entry.unsubscribe,\n subscribe: () => {\n listenerMap.set(entry.id, entry);\n },\n cancelActiveListeners: () => {\n entry.pending.forEach((controller, _, set) => {\n if (controller !== internalTaskController) {\n abortControllerWithReason(controller, listenerCancelled);\n set.delete(controller);\n }\n });\n },\n cancel: () => {\n abortControllerWithReason(internalTaskController, listenerCancelled);\n entry.pending.delete(internalTaskController);\n },\n throwIfCancelled: () => {\n validateActive(internalTaskController.signal);\n }\n })\n ));\n } catch (listenerError) {\n if (!(listenerError instanceof TaskAbortError)) {\n safelyNotifyError(onError, listenerError, {\n raisedBy: "effect"\n });\n }\n } finally {\n await Promise.all(autoJoinPromises);\n abortControllerWithReason(internalTaskController, listenerCompleted);\n entry.pending.delete(internalTaskController);\n }\n };\n const clearListenerMiddleware = createClearListenerMiddleware(listenerMap);\n const middleware = (api) => (next) => (action) => {\n if (!isAction3(action)) {\n return next(action);\n }\n if (addListener.match(action)) {\n return startListening(action.payload);\n }\n if (clearAllListeners.match(action)) {\n clearListenerMiddleware();\n return;\n }\n if (removeListener.match(action)) {\n return stopListening(action.payload);\n }\n let originalState = api.getState();\n const getOriginalState = () => {\n if (originalState === INTERNAL_NIL_TOKEN) {\n throw new Error( true ? redux_toolkit_modern_formatProdErrorMessage(23) : 0);\n }\n return originalState;\n };\n let result;\n try {\n result = next(action);\n if (listenerMap.size > 0) {\n const currentState = api.getState();\n const listenerEntries = Array.from(listenerMap.values());\n for (const entry of listenerEntries) {\n let runListener = false;\n try {\n runListener = entry.predicate(action, currentState, originalState);\n } catch (predicateError) {\n runListener = false;\n safelyNotifyError(onError, predicateError, {\n raisedBy: "predicate"\n });\n }\n if (!runListener) {\n continue;\n }\n notifyListener(entry, action, api, getOriginalState);\n }\n }\n } finally {\n originalState = INTERNAL_NIL_TOKEN;\n }\n return result;\n };\n return {\n middleware,\n startListening,\n stopListening,\n clearListeners: clearListenerMiddleware\n };\n};\n\n// src/dynamicMiddleware/index.ts\n\nvar createMiddlewareEntry = (middleware) => ({\n middleware,\n applied: /* @__PURE__ */ new Map()\n});\nvar matchInstance = (instanceId) => (action) => action?.meta?.instanceId === instanceId;\nvar createDynamicMiddleware = () => {\n const instanceId = nanoid();\n const middlewareMap = /* @__PURE__ */ new Map();\n const withMiddleware = Object.assign(createAction("dynamicMiddleware/add", (...middlewares) => ({\n payload: middlewares,\n meta: {\n instanceId\n }\n })), {\n withTypes: () => withMiddleware\n });\n const addMiddleware = Object.assign(function addMiddleware2(...middlewares) {\n middlewares.forEach((middleware2) => {\n getOrInsertComputed(middlewareMap, middleware2, createMiddlewareEntry);\n });\n }, {\n withTypes: () => addMiddleware\n });\n const getFinalMiddleware = (api) => {\n const appliedMiddleware = Array.from(middlewareMap.values()).map((entry) => getOrInsertComputed(entry.applied, api, entry.middleware));\n return compose3(...appliedMiddleware);\n };\n const isWithMiddleware = isAllOf(withMiddleware, matchInstance(instanceId));\n const middleware = (api) => (next) => (action) => {\n if (isWithMiddleware(action)) {\n addMiddleware(...action.payload);\n return api.dispatch;\n }\n return getFinalMiddleware(api)(next)(action);\n };\n return {\n middleware,\n addMiddleware,\n withMiddleware,\n instanceId\n };\n};\n\n// src/combineSlices.ts\n\nvar isSliceLike = (maybeSliceLike) => "reducerPath" in maybeSliceLike && typeof maybeSliceLike.reducerPath === "string";\nvar getReducers = (slices) => slices.flatMap((sliceOrMap) => isSliceLike(sliceOrMap) ? [[sliceOrMap.reducerPath, sliceOrMap.reducer]] : Object.entries(sliceOrMap));\nvar ORIGINAL_STATE = Symbol.for("rtk-state-proxy-original");\nvar isStateProxy = (value) => !!value && !!value[ORIGINAL_STATE];\nvar stateProxyMap = /* @__PURE__ */ new WeakMap();\nvar createStateProxy = (state, reducerMap) => getOrInsertComputed(stateProxyMap, state, () => new Proxy(state, {\n get: (target, prop, receiver) => {\n if (prop === ORIGINAL_STATE) return target;\n const result = Reflect.get(target, prop, receiver);\n if (typeof result === "undefined") {\n const reducer = reducerMap[prop.toString()];\n if (reducer) {\n const reducerResult = reducer(void 0, {\n type: nanoid()\n });\n if (typeof reducerResult === "undefined") {\n throw new Error( true ? redux_toolkit_modern_formatProdErrorMessage(24) : 0);\n }\n return reducerResult;\n }\n }\n return result;\n }\n}));\nvar redux_toolkit_modern_original = (state) => {\n if (!isStateProxy(state)) {\n throw new Error( true ? redux_toolkit_modern_formatProdErrorMessage(25) : 0);\n }\n return state[ORIGINAL_STATE];\n};\nvar noopReducer = (state = {}) => state;\nfunction combineSlices(...slices) {\n const reducerMap = Object.fromEntries(getReducers(slices));\n const getReducer = () => Object.keys(reducerMap).length ? combineReducers2(reducerMap) : noopReducer;\n let reducer = getReducer();\n function combinedReducer(state, action) {\n return reducer(state, action);\n }\n combinedReducer.withLazyLoadedSlices = () => combinedReducer;\n const inject = (slice, config = {}) => {\n const {\n reducerPath,\n reducer: reducerToInject\n } = slice;\n const currentReducer = reducerMap[reducerPath];\n if (!config.overrideExisting && currentReducer && currentReducer !== reducerToInject) {\n if (typeof process !== "undefined" && "production" === "development") {}\n return combinedReducer;\n }\n reducerMap[reducerPath] = reducerToInject;\n reducer = getReducer();\n return combinedReducer;\n };\n const selector = Object.assign(function makeSelector(selectorFn, selectState) {\n return function selector2(state, ...args) {\n return selectorFn(createStateProxy(selectState ? selectState(state, ...args) : state, reducerMap), ...args);\n };\n }, {\n original: redux_toolkit_modern_original\n });\n return Object.assign(combinedReducer, {\n inject,\n selector\n });\n}\n\n// src/formatProdErrorMessage.ts\nfunction redux_toolkit_modern_formatProdErrorMessage(code) {\n return `Minified Redux Toolkit error #${code}; visit https://redux-toolkit.js.org/Errors?code=${code} for the full message or use the non-minified dev environment for full errors. `;\n}\n\n//# sourceMappingURL=redux-toolkit.modern.mjs.map\n;// ./node_modules/reselect/dist/reselect.mjs\n// src/devModeChecks/identityFunctionCheck.ts\nvar runIdentityFunctionCheck = (resultFunc, inputSelectorsResults, outputSelectorResult) => {\n if (inputSelectorsResults.length === 1 && inputSelectorsResults[0] === outputSelectorResult) {\n let isInputSameAsOutput = false;\n try {\n const emptyObject = {};\n if (resultFunc(emptyObject) === emptyObject)\n isInputSameAsOutput = true;\n } catch {\n }\n if (isInputSameAsOutput) {\n let stack = void 0;\n try {\n throw new Error();\n } catch (e) {\n ;\n ({ stack } = e);\n }\n console.warn(\n "The result function returned its own inputs without modification. e.g\\n`createSelector([state => state.todos], todos => todos)`\\nThis could lead to inefficient memoization and unnecessary re-renders.\\nEnsure transformation logic is in the result function, and extraction logic is in the input selectors.",\n { stack }\n );\n }\n }\n};\n\n// src/devModeChecks/inputStabilityCheck.ts\nvar runInputStabilityCheck = (inputSelectorResultsObject, options, inputSelectorArgs) => {\n const { memoize, memoizeOptions } = options;\n const { inputSelectorResults, inputSelectorResultsCopy } = inputSelectorResultsObject;\n const createAnEmptyObject = memoize(() => ({}), ...memoizeOptions);\n const areInputSelectorResultsEqual = createAnEmptyObject.apply(null, inputSelectorResults) === createAnEmptyObject.apply(null, inputSelectorResultsCopy);\n if (!areInputSelectorResultsEqual) {\n let stack = void 0;\n try {\n throw new Error();\n } catch (e) {\n ;\n ({ stack } = e);\n }\n console.warn(\n "An input selector returned a different result when passed same arguments.\\nThis means your output selector will likely run more frequently than intended.\\nAvoid returning a new reference inside your input selector, e.g.\\n`createSelector([state => state.todos.map(todo => todo.id)], todoIds => todoIds.length)`",\n {\n arguments: inputSelectorArgs,\n firstInputs: inputSelectorResults,\n secondInputs: inputSelectorResultsCopy,\n stack\n }\n );\n }\n};\n\n// src/devModeChecks/setGlobalDevModeChecks.ts\nvar globalDevModeChecks = {\n inputStabilityCheck: "once",\n identityFunctionCheck: "once"\n};\nvar setGlobalDevModeChecks = (devModeChecks) => {\n Object.assign(globalDevModeChecks, devModeChecks);\n};\n\n// src/utils.ts\nvar NOT_FOUND = /* @__PURE__ */ (/* unused pure expression or super */ null && (Symbol("NOT_FOUND")));\nfunction assertIsFunction(func, errorMessage = `expected a function, instead received ${typeof func}`) {\n if (typeof func !== "function") {\n throw new TypeError(errorMessage);\n }\n}\nfunction assertIsObject(object, errorMessage = `expected an object, instead received ${typeof object}`) {\n if (typeof object !== "object") {\n throw new TypeError(errorMessage);\n }\n}\nfunction assertIsArrayOfFunctions(array, errorMessage = `expected all items to be functions, instead received the following types: `) {\n if (!array.every((item) => typeof item === "function")) {\n const itemTypes = array.map(\n (item) => typeof item === "function" ? `function ${item.name || "unnamed"}()` : typeof item\n ).join(", ");\n throw new TypeError(`${errorMessage}[${itemTypes}]`);\n }\n}\nvar ensureIsArray = (item) => {\n return Array.isArray(item) ? item : [item];\n};\nfunction getDependencies(createSelectorArgs) {\n const dependencies = Array.isArray(createSelectorArgs[0]) ? createSelectorArgs[0] : createSelectorArgs;\n assertIsArrayOfFunctions(\n dependencies,\n `createSelector expects all input-selectors to be functions, but received the following types: `\n );\n return dependencies;\n}\nfunction collectInputSelectorResults(dependencies, inputSelectorArgs) {\n const inputSelectorResults = [];\n const { length } = dependencies;\n for (let i = 0; i < length; i++) {\n inputSelectorResults.push(dependencies[i].apply(null, inputSelectorArgs));\n }\n return inputSelectorResults;\n}\nvar getDevModeChecksExecutionInfo = (firstRun, devModeChecks) => {\n const { identityFunctionCheck, inputStabilityCheck } = {\n ...globalDevModeChecks,\n ...devModeChecks\n };\n return {\n identityFunctionCheck: {\n shouldRun: identityFunctionCheck === "always" || identityFunctionCheck === "once" && firstRun,\n run: runIdentityFunctionCheck\n },\n inputStabilityCheck: {\n shouldRun: inputStabilityCheck === "always" || inputStabilityCheck === "once" && firstRun,\n run: runInputStabilityCheck\n }\n };\n};\n\n// src/autotrackMemoize/autotracking.ts\nvar $REVISION = 0;\nvar CURRENT_TRACKER = null;\nvar Cell = class {\n revision = $REVISION;\n _value;\n _lastValue;\n _isEqual = tripleEq;\n constructor(initialValue, isEqual = tripleEq) {\n this._value = this._lastValue = initialValue;\n this._isEqual = isEqual;\n }\n // Whenever a storage value is read, it\'ll add itself to the current tracker if\n // one exists, entangling its state with that cache.\n get value() {\n CURRENT_TRACKER?.add(this);\n return this._value;\n }\n // Whenever a storage value is updated, we bump the global revision clock,\n // assign the revision for this storage to the new value, _and_ we schedule a\n // rerender. This is important, and it\'s what makes autotracking _pull_\n // based. We don\'t actively tell the caches which depend on the storage that\n // anything has happened. Instead, we recompute the caches when needed.\n set value(newValue) {\n if (this.value === newValue)\n return;\n this._value = newValue;\n this.revision = ++$REVISION;\n }\n};\nfunction tripleEq(a, b) {\n return a === b;\n}\nvar TrackingCache = class {\n _cachedValue;\n _cachedRevision = -1;\n _deps = [];\n hits = 0;\n fn;\n constructor(fn) {\n this.fn = fn;\n }\n clear() {\n this._cachedValue = void 0;\n this._cachedRevision = -1;\n this._deps = [];\n this.hits = 0;\n }\n get value() {\n if (this.revision > this._cachedRevision) {\n const { fn } = this;\n const currentTracker = /* @__PURE__ */ new Set();\n const prevTracker = CURRENT_TRACKER;\n CURRENT_TRACKER = currentTracker;\n this._cachedValue = fn();\n CURRENT_TRACKER = prevTracker;\n this.hits++;\n this._deps = Array.from(currentTracker);\n this._cachedRevision = this.revision;\n }\n CURRENT_TRACKER?.add(this);\n return this._cachedValue;\n }\n get revision() {\n return Math.max(...this._deps.map((d) => d.revision), 0);\n }\n};\nfunction getValue(cell) {\n if (!(cell instanceof Cell)) {\n console.warn("Not a valid cell! ", cell);\n }\n return cell.value;\n}\nfunction setValue(storage, value) {\n if (!(storage instanceof Cell)) {\n throw new TypeError(\n "setValue must be passed a tracked store created with `createStorage`."\n );\n }\n storage.value = storage._lastValue = value;\n}\nfunction createCell(initialValue, isEqual = tripleEq) {\n return new Cell(initialValue, isEqual);\n}\nfunction createCache(fn) {\n assertIsFunction(\n fn,\n "the first parameter to `createCache` must be a function"\n );\n return new TrackingCache(fn);\n}\n\n// src/autotrackMemoize/tracking.ts\nvar neverEq = (a, b) => false;\nfunction createTag() {\n return createCell(null, neverEq);\n}\nfunction dirtyTag(tag, value) {\n setValue(tag, value);\n}\nvar consumeCollection = (node) => {\n let tag = node.collectionTag;\n if (tag === null) {\n tag = node.collectionTag = createTag();\n }\n getValue(tag);\n};\nvar dirtyCollection = (node) => {\n const tag = node.collectionTag;\n if (tag !== null) {\n dirtyTag(tag, null);\n }\n};\n\n// src/autotrackMemoize/proxy.ts\nvar REDUX_PROXY_LABEL = Symbol();\nvar nextId = 0;\nvar proto = Object.getPrototypeOf({});\nvar ObjectTreeNode = class {\n constructor(value) {\n this.value = value;\n this.value = value;\n this.tag.value = value;\n }\n proxy = new Proxy(this, objectProxyHandler);\n tag = createTag();\n tags = {};\n children = {};\n collectionTag = null;\n id = nextId++;\n};\nvar objectProxyHandler = {\n get(node, key) {\n function calculateResult() {\n const { value } = node;\n const childValue = Reflect.get(value, key);\n if (typeof key === "symbol") {\n return childValue;\n }\n if (key in proto) {\n return childValue;\n }\n if (typeof childValue === "object" && childValue !== null) {\n let childNode = node.children[key];\n if (childNode === void 0) {\n childNode = node.children[key] = createNode(childValue);\n }\n if (childNode.tag) {\n getValue(childNode.tag);\n }\n return childNode.proxy;\n } else {\n let tag = node.tags[key];\n if (tag === void 0) {\n tag = node.tags[key] = createTag();\n tag.value = childValue;\n }\n getValue(tag);\n return childValue;\n }\n }\n const res = calculateResult();\n return res;\n },\n ownKeys(node) {\n consumeCollection(node);\n return Reflect.ownKeys(node.value);\n },\n getOwnPropertyDescriptor(node, prop) {\n return Reflect.getOwnPropertyDescriptor(node.value, prop);\n },\n has(node, prop) {\n return Reflect.has(node.value, prop);\n }\n};\nvar ArrayTreeNode = class {\n constructor(value) {\n this.value = value;\n this.value = value;\n this.tag.value = value;\n }\n proxy = new Proxy([this], arrayProxyHandler);\n tag = createTag();\n tags = {};\n children = {};\n collectionTag = null;\n id = nextId++;\n};\nvar arrayProxyHandler = {\n get([node], key) {\n if (key === "length") {\n consumeCollection(node);\n }\n return objectProxyHandler.get(node, key);\n },\n ownKeys([node]) {\n return objectProxyHandler.ownKeys(node);\n },\n getOwnPropertyDescriptor([node], prop) {\n return objectProxyHandler.getOwnPropertyDescriptor(node, prop);\n },\n has([node], prop) {\n return objectProxyHandler.has(node, prop);\n }\n};\nfunction createNode(value) {\n if (Array.isArray(value)) {\n return new ArrayTreeNode(value);\n }\n return new ObjectTreeNode(value);\n}\nfunction updateNode(node, newValue) {\n const { value, tags, children } = node;\n node.value = newValue;\n if (Array.isArray(value) && Array.isArray(newValue) && value.length !== newValue.length) {\n dirtyCollection(node);\n } else {\n if (value !== newValue) {\n let oldKeysSize = 0;\n let newKeysSize = 0;\n let anyKeysAdded = false;\n for (const _key in value) {\n oldKeysSize++;\n }\n for (const key in newValue) {\n newKeysSize++;\n if (!(key in value)) {\n anyKeysAdded = true;\n break;\n }\n }\n const isDifferent = anyKeysAdded || oldKeysSize !== newKeysSize;\n if (isDifferent) {\n dirtyCollection(node);\n }\n }\n }\n for (const key in tags) {\n const childValue = value[key];\n const newChildValue = newValue[key];\n if (childValue !== newChildValue) {\n dirtyCollection(node);\n dirtyTag(tags[key], newChildValue);\n }\n if (typeof newChildValue === "object" && newChildValue !== null) {\n delete tags[key];\n }\n }\n for (const key in children) {\n const childNode = children[key];\n const newChildValue = newValue[key];\n const childValue = childNode.value;\n if (childValue === newChildValue) {\n continue;\n } else if (typeof newChildValue === "object" && newChildValue !== null) {\n updateNode(childNode, newChildValue);\n } else {\n deleteNode(childNode);\n delete children[key];\n }\n }\n}\nfunction deleteNode(node) {\n if (node.tag) {\n dirtyTag(node.tag, null);\n }\n dirtyCollection(node);\n for (const key in node.tags) {\n dirtyTag(node.tags[key], null);\n }\n for (const key in node.children) {\n deleteNode(node.children[key]);\n }\n}\n\n// src/lruMemoize.ts\nfunction createSingletonCache(equals) {\n let entry;\n return {\n get(key) {\n if (entry && equals(entry.key, key)) {\n return entry.value;\n }\n return NOT_FOUND;\n },\n put(key, value) {\n entry = { key, value };\n },\n getEntries() {\n return entry ? [entry] : [];\n },\n clear() {\n entry = void 0;\n }\n };\n}\nfunction createLruCache(maxSize, equals) {\n let entries = [];\n function get(key) {\n const cacheIndex = entries.findIndex((entry) => equals(key, entry.key));\n if (cacheIndex > -1) {\n const entry = entries[cacheIndex];\n if (cacheIndex > 0) {\n entries.splice(cacheIndex, 1);\n entries.unshift(entry);\n }\n return entry.value;\n }\n return NOT_FOUND;\n }\n function put(key, value) {\n if (get(key) === NOT_FOUND) {\n entries.unshift({ key, value });\n if (entries.length > maxSize) {\n entries.pop();\n }\n }\n }\n function getEntries() {\n return entries;\n }\n function clear() {\n entries = [];\n }\n return { get, put, getEntries, clear };\n}\nvar referenceEqualityCheck = (a, b) => a === b;\nfunction createCacheKeyComparator(equalityCheck) {\n return function areArgumentsShallowlyEqual(prev, next) {\n if (prev === null || next === null || prev.length !== next.length) {\n return false;\n }\n const { length } = prev;\n for (let i = 0; i < length; i++) {\n if (!equalityCheck(prev[i], next[i])) {\n return false;\n }\n }\n return true;\n };\n}\nfunction lruMemoize(func, equalityCheckOrOptions) {\n const providedOptions = typeof equalityCheckOrOptions === "object" ? equalityCheckOrOptions : { equalityCheck: equalityCheckOrOptions };\n const {\n equalityCheck = referenceEqualityCheck,\n maxSize = 1,\n resultEqualityCheck\n } = providedOptions;\n const comparator = createCacheKeyComparator(equalityCheck);\n let resultsCount = 0;\n const cache = maxSize <= 1 ? createSingletonCache(comparator) : createLruCache(maxSize, comparator);\n function memoized() {\n let value = cache.get(arguments);\n if (value === NOT_FOUND) {\n value = func.apply(null, arguments);\n resultsCount++;\n if (resultEqualityCheck) {\n const entries = cache.getEntries();\n const matchingEntry = entries.find(\n (entry) => resultEqualityCheck(entry.value, value)\n );\n if (matchingEntry) {\n value = matchingEntry.value;\n resultsCount !== 0 && resultsCount--;\n }\n }\n cache.put(arguments, value);\n }\n return value;\n }\n memoized.clearCache = () => {\n cache.clear();\n memoized.resetResultsCount();\n };\n memoized.resultsCount = () => resultsCount;\n memoized.resetResultsCount = () => {\n resultsCount = 0;\n };\n return memoized;\n}\n\n// src/autotrackMemoize/autotrackMemoize.ts\nfunction autotrackMemoize(func) {\n const node = createNode(\n []\n );\n let lastArgs = null;\n const shallowEqual = createCacheKeyComparator(referenceEqualityCheck);\n const cache = createCache(() => {\n const res = func.apply(null, node.proxy);\n return res;\n });\n function memoized() {\n if (!shallowEqual(lastArgs, arguments)) {\n updateNode(node, arguments);\n lastArgs = arguments;\n }\n return cache.value;\n }\n memoized.clearCache = () => {\n return cache.clear();\n };\n return memoized;\n}\n\n// src/weakMapMemoize.ts\nvar StrongRef = class {\n constructor(value) {\n this.value = value;\n }\n deref() {\n return this.value;\n }\n};\nvar Ref = typeof WeakRef !== "undefined" ? WeakRef : StrongRef;\nvar UNTERMINATED = 0;\nvar TERMINATED = 1;\nfunction createCacheNode() {\n return {\n s: UNTERMINATED,\n v: void 0,\n o: null,\n p: null\n };\n}\nfunction reselect_weakMapMemoize(func, options = {}) {\n let fnNode = createCacheNode();\n const { resultEqualityCheck } = options;\n let lastResult;\n let resultsCount = 0;\n function memoized() {\n let cacheNode = fnNode;\n const { length } = arguments;\n for (let i = 0, l = length; i < l; i++) {\n const arg = arguments[i];\n if (typeof arg === "function" || typeof arg === "object" && arg !== null) {\n let objectCache = cacheNode.o;\n if (objectCache === null) {\n cacheNode.o = objectCache = /* @__PURE__ */ new WeakMap();\n }\n const objectNode = objectCache.get(arg);\n if (objectNode === void 0) {\n cacheNode = createCacheNode();\n objectCache.set(arg, cacheNode);\n } else {\n cacheNode = objectNode;\n }\n } else {\n let primitiveCache = cacheNode.p;\n if (primitiveCache === null) {\n cacheNode.p = primitiveCache = /* @__PURE__ */ new Map();\n }\n const primitiveNode = primitiveCache.get(arg);\n if (primitiveNode === void 0) {\n cacheNode = createCacheNode();\n primitiveCache.set(arg, cacheNode);\n } else {\n cacheNode = primitiveNode;\n }\n }\n }\n const terminatedNode = cacheNode;\n let result;\n if (cacheNode.s === TERMINATED) {\n result = cacheNode.v;\n } else {\n result = func.apply(null, arguments);\n resultsCount++;\n if (resultEqualityCheck) {\n const lastResultValue = lastResult?.deref?.() ?? lastResult;\n if (lastResultValue != null && resultEqualityCheck(lastResultValue, result)) {\n result = lastResultValue;\n resultsCount !== 0 && resultsCount--;\n }\n const needsWeakRef = typeof result === "object" && result !== null || typeof result === "function";\n lastResult = needsWeakRef ? new Ref(result) : result;\n }\n }\n terminatedNode.s = TERMINATED;\n terminatedNode.v = result;\n return result;\n }\n memoized.clearCache = () => {\n fnNode = createCacheNode();\n memoized.resetResultsCount();\n };\n memoized.resultsCount = () => resultsCount;\n memoized.resetResultsCount = () => {\n resultsCount = 0;\n };\n return memoized;\n}\n\n// src/createSelectorCreator.ts\nfunction reselect_createSelectorCreator(memoizeOrOptions, ...memoizeOptionsFromArgs) {\n const createSelectorCreatorOptions = typeof memoizeOrOptions === "function" ? {\n memoize: memoizeOrOptions,\n memoizeOptions: memoizeOptionsFromArgs\n } : memoizeOrOptions;\n const createSelector2 = (...createSelectorArgs) => {\n let recomputations = 0;\n let dependencyRecomputations = 0;\n let lastResult;\n let directlyPassedOptions = {};\n let resultFunc = createSelectorArgs.pop();\n if (typeof resultFunc === "object") {\n directlyPassedOptions = resultFunc;\n resultFunc = createSelectorArgs.pop();\n }\n assertIsFunction(\n resultFunc,\n `createSelector expects an output function after the inputs, but received: [${typeof resultFunc}]`\n );\n const combinedOptions = {\n ...createSelectorCreatorOptions,\n ...directlyPassedOptions\n };\n const {\n memoize,\n memoizeOptions = [],\n argsMemoize = reselect_weakMapMemoize,\n argsMemoizeOptions = [],\n devModeChecks = {}\n } = combinedOptions;\n const finalMemoizeOptions = ensureIsArray(memoizeOptions);\n const finalArgsMemoizeOptions = ensureIsArray(argsMemoizeOptions);\n const dependencies = getDependencies(createSelectorArgs);\n const memoizedResultFunc = memoize(function recomputationWrapper() {\n recomputations++;\n return resultFunc.apply(\n null,\n arguments\n );\n }, ...finalMemoizeOptions);\n let firstRun = true;\n const selector = argsMemoize(function dependenciesChecker() {\n dependencyRecomputations++;\n const inputSelectorResults = collectInputSelectorResults(\n dependencies,\n arguments\n );\n lastResult = memoizedResultFunc.apply(null, inputSelectorResults);\n if (false) {}\n return lastResult;\n }, ...finalArgsMemoizeOptions);\n return Object.assign(selector, {\n resultFunc,\n memoizedResultFunc,\n dependencies,\n dependencyRecomputations: () => dependencyRecomputations,\n resetDependencyRecomputations: () => {\n dependencyRecomputations = 0;\n },\n lastResult: () => lastResult,\n recomputations: () => recomputations,\n resetRecomputations: () => {\n recomputations = 0;\n },\n memoize,\n argsMemoize\n });\n };\n Object.assign(createSelector2, {\n withTypes: () => createSelector2\n });\n return createSelector2;\n}\nvar createSelector = /* @__PURE__ */ reselect_createSelectorCreator(reselect_weakMapMemoize);\n\n// src/createStructuredSelector.ts\nvar createStructuredSelector = Object.assign(\n (inputSelectorsObject, selectorCreator = createSelector) => {\n assertIsObject(\n inputSelectorsObject,\n `createStructuredSelector expects first argument to be an object where each property is a selector, instead received a ${typeof inputSelectorsObject}`\n );\n const inputSelectorKeys = Object.keys(inputSelectorsObject);\n const dependencies = inputSelectorKeys.map(\n (key) => inputSelectorsObject[key]\n );\n const structuredSelector = selectorCreator(\n dependencies,\n (...inputSelectorResults) => {\n return inputSelectorResults.reduce((composition, value, index) => {\n composition[inputSelectorKeys[index]] = value;\n return composition;\n }, {});\n }\n );\n return structuredSelector;\n },\n { withTypes: () => createStructuredSelector }\n);\n\n//# sourceMappingURL=reselect.mjs.map\n;// ./node_modules/@forgerock/javascript-sdk/node_modules/@reduxjs/toolkit/dist/query/rtk-query.modern.mjs\n// src/query/core/apiState.ts\nvar QueryStatus = /* @__PURE__ */ ((QueryStatus2) => {\n QueryStatus2["uninitialized"] = "uninitialized";\n QueryStatus2["pending"] = "pending";\n QueryStatus2["fulfilled"] = "fulfilled";\n QueryStatus2["rejected"] = "rejected";\n return QueryStatus2;\n})(QueryStatus || {});\nfunction getRequestStatusFlags(status) {\n return {\n status,\n isUninitialized: status === "uninitialized" /* uninitialized */,\n isLoading: status === "pending" /* pending */,\n isSuccess: status === "fulfilled" /* fulfilled */,\n isError: status === "rejected" /* rejected */\n };\n}\n\n// src/query/core/rtkImports.ts\n\n\n// src/query/utils/copyWithStructuralSharing.ts\nvar isPlainObject2 = redux_isPlainObject;\nfunction copyWithStructuralSharing(oldObj, newObj) {\n if (oldObj === newObj || !(isPlainObject2(oldObj) && isPlainObject2(newObj) || Array.isArray(oldObj) && Array.isArray(newObj))) {\n return newObj;\n }\n const newKeys = Object.keys(newObj);\n const oldKeys = Object.keys(oldObj);\n let isSameObject = newKeys.length === oldKeys.length;\n const mergeObj = Array.isArray(newObj) ? [] : {};\n for (const key of newKeys) {\n mergeObj[key] = copyWithStructuralSharing(oldObj[key], newObj[key]);\n if (isSameObject) isSameObject = oldObj[key] === mergeObj[key];\n }\n return isSameObject ? oldObj : mergeObj;\n}\n\n// src/query/utils/countObjectKeys.ts\nfunction countObjectKeys(obj) {\n let count = 0;\n for (const _key in obj) {\n count++;\n }\n return count;\n}\n\n// src/query/utils/flatten.ts\nvar flatten = (arr) => [].concat(...arr);\n\n// src/query/utils/isAbsoluteUrl.ts\nfunction isAbsoluteUrl(url) {\n return new RegExp(`(^|:)//`).test(url);\n}\n\n// src/query/utils/isDocumentVisible.ts\nfunction isDocumentVisible() {\n if (typeof document === "undefined") {\n return true;\n }\n return document.visibilityState !== "hidden";\n}\n\n// src/query/utils/isNotNullish.ts\nfunction isNotNullish(v) {\n return v != null;\n}\n\n// src/query/utils/isOnline.ts\nfunction isOnline() {\n return typeof navigator === "undefined" ? true : navigator.onLine === void 0 ? true : navigator.onLine;\n}\n\n// src/query/utils/joinUrls.ts\nvar withoutTrailingSlash = (url) => url.replace(/\\/$/, "");\nvar withoutLeadingSlash = (url) => url.replace(/^\\//, "");\nfunction joinUrls(base, url) {\n if (!base) {\n return url;\n }\n if (!url) {\n return base;\n }\n if (isAbsoluteUrl(url)) {\n return url;\n }\n const delimiter = base.endsWith("/") || !url.startsWith("?") ? "/" : "";\n base = withoutTrailingSlash(base);\n url = withoutLeadingSlash(url);\n return `${base}${delimiter}${url}`;\n}\n\n// src/query/utils/getOrInsert.ts\nfunction getOrInsert(map, key, value) {\n if (map.has(key)) return map.get(key);\n return map.set(key, value).get(key);\n}\n\n// src/query/fetchBaseQuery.ts\nvar defaultFetchFn = (...args) => fetch(...args);\nvar defaultValidateStatus = (response) => response.status >= 200 && response.status <= 299;\nvar defaultIsJsonContentType = (headers) => (\n /*applicat*/\n /ion\\/(vnd\\.api\\+)?json/.test(headers.get("content-type") || "")\n);\nfunction stripUndefined(obj) {\n if (!redux_isPlainObject(obj)) {\n return obj;\n }\n const copy = {\n ...obj\n };\n for (const [k, v] of Object.entries(copy)) {\n if (v === void 0) delete copy[k];\n }\n return copy;\n}\nfunction fetchBaseQuery({\n baseUrl,\n prepareHeaders = (x) => x,\n fetchFn = defaultFetchFn,\n paramsSerializer,\n isJsonContentType = defaultIsJsonContentType,\n jsonContentType = "application/json",\n jsonReplacer,\n timeout: defaultTimeout,\n responseHandler: globalResponseHandler,\n validateStatus: globalValidateStatus,\n ...baseFetchOptions\n} = {}) {\n if (typeof fetch === "undefined" && fetchFn === defaultFetchFn) {\n console.warn("Warning: `fetch` is not available. Please supply a custom `fetchFn` property to use `fetchBaseQuery` on SSR environments.");\n }\n return async (arg, api, extraOptions) => {\n const {\n getState,\n extra,\n endpoint,\n forced,\n type\n } = api;\n let meta;\n let {\n url,\n headers = new Headers(baseFetchOptions.headers),\n params = void 0,\n responseHandler = globalResponseHandler ?? "json",\n validateStatus = globalValidateStatus ?? defaultValidateStatus,\n timeout = defaultTimeout,\n ...rest\n } = typeof arg == "string" ? {\n url: arg\n } : arg;\n let abortController, signal = api.signal;\n if (timeout) {\n abortController = new AbortController();\n api.signal.addEventListener("abort", abortController.abort);\n signal = abortController.signal;\n }\n let config = {\n ...baseFetchOptions,\n signal,\n ...rest\n };\n headers = new Headers(stripUndefined(headers));\n config.headers = await prepareHeaders(headers, {\n getState,\n arg,\n extra,\n endpoint,\n forced,\n type,\n extraOptions\n }) || headers;\n const isJsonifiable = (body) => typeof body === "object" && (redux_isPlainObject(body) || Array.isArray(body) || typeof body.toJSON === "function");\n if (!config.headers.has("content-type") && isJsonifiable(config.body)) {\n config.headers.set("content-type", jsonContentType);\n }\n if (isJsonifiable(config.body) && isJsonContentType(config.headers)) {\n config.body = JSON.stringify(config.body, jsonReplacer);\n }\n if (params) {\n const divider = ~url.indexOf("?") ? "&" : "?";\n const query = paramsSerializer ? paramsSerializer(params) : new URLSearchParams(stripUndefined(params));\n url += divider + query;\n }\n url = joinUrls(baseUrl, url);\n const request = new Request(url, config);\n const requestClone = new Request(url, config);\n meta = {\n request: requestClone\n };\n let response, timedOut = false, timeoutId = abortController && setTimeout(() => {\n timedOut = true;\n abortController.abort();\n }, timeout);\n try {\n response = await fetchFn(request);\n } catch (e) {\n return {\n error: {\n status: timedOut ? "TIMEOUT_ERROR" : "FETCH_ERROR",\n error: String(e)\n },\n meta\n };\n } finally {\n if (timeoutId) clearTimeout(timeoutId);\n abortController?.signal.removeEventListener("abort", abortController.abort);\n }\n const responseClone = response.clone();\n meta.response = responseClone;\n let resultData;\n let responseText = "";\n try {\n let handleResponseError;\n await Promise.all([\n handleResponse(response, responseHandler).then((r) => resultData = r, (e) => handleResponseError = e),\n // see https://github.com/node-fetch/node-fetch/issues/665#issuecomment-538995182\n // we *have* to "use up" both streams at the same time or they will stop running in node-fetch scenarios\n responseClone.text().then((r) => responseText = r, () => {\n })\n ]);\n if (handleResponseError) throw handleResponseError;\n } catch (e) {\n return {\n error: {\n status: "PARSING_ERROR",\n originalStatus: response.status,\n data: responseText,\n error: String(e)\n },\n meta\n };\n }\n return validateStatus(response, resultData) ? {\n data: resultData,\n meta\n } : {\n error: {\n status: response.status,\n data: resultData\n },\n meta\n };\n };\n async function handleResponse(response, responseHandler) {\n if (typeof responseHandler === "function") {\n return responseHandler(response);\n }\n if (responseHandler === "content-type") {\n responseHandler = isJsonContentType(response.headers) ? "json" : "text";\n }\n if (responseHandler === "json") {\n const text = await response.text();\n return text.length ? JSON.parse(text) : null;\n }\n return response.text();\n }\n}\n\n// src/query/HandledError.ts\nvar HandledError = class {\n constructor(value, meta = void 0) {\n this.value = value;\n this.meta = meta;\n }\n};\n\n// src/query/retry.ts\nasync function defaultBackoff(attempt = 0, maxRetries = 5) {\n const attempts = Math.min(attempt, maxRetries);\n const timeout = ~~((Math.random() + 0.4) * (300 << attempts));\n await new Promise((resolve) => setTimeout((res) => resolve(res), timeout));\n}\nfunction fail(error, meta) {\n throw Object.assign(new HandledError({\n error,\n meta\n }), {\n throwImmediately: true\n });\n}\nvar EMPTY_OPTIONS = {};\nvar retryWithBackoff = (baseQuery, defaultOptions) => async (args, api, extraOptions) => {\n const possibleMaxRetries = [5, (defaultOptions || EMPTY_OPTIONS).maxRetries, (extraOptions || EMPTY_OPTIONS).maxRetries].filter((x) => x !== void 0);\n const [maxRetries] = possibleMaxRetries.slice(-1);\n const defaultRetryCondition = (_, __, {\n attempt\n }) => attempt <= maxRetries;\n const options = {\n maxRetries,\n backoff: defaultBackoff,\n retryCondition: defaultRetryCondition,\n ...defaultOptions,\n ...extraOptions\n };\n let retry2 = 0;\n while (true) {\n try {\n const result = await baseQuery(args, api, extraOptions);\n if (result.error) {\n throw new HandledError(result);\n }\n return result;\n } catch (e) {\n retry2++;\n if (e.throwImmediately) {\n if (e instanceof HandledError) {\n return e.value;\n }\n throw e;\n }\n if (e instanceof HandledError && !options.retryCondition(e.value.error, args, {\n attempt: retry2,\n baseQueryApi: api,\n extraOptions\n })) {\n return e.value;\n }\n await options.backoff(retry2, options.maxRetries);\n }\n }\n};\nvar retry = /* @__PURE__ */ Object.assign(retryWithBackoff, {\n fail\n});\n\n// src/query/core/setupListeners.ts\nvar onFocus = /* @__PURE__ */ createAction("__rtkq/focused");\nvar onFocusLost = /* @__PURE__ */ createAction("__rtkq/unfocused");\nvar onOnline = /* @__PURE__ */ createAction("__rtkq/online");\nvar onOffline = /* @__PURE__ */ createAction("__rtkq/offline");\nvar initialized = false;\nfunction setupListeners(dispatch, customHandler) {\n function defaultHandler() {\n const handleFocus = () => dispatch(onFocus());\n const handleFocusLost = () => dispatch(onFocusLost());\n const handleOnline = () => dispatch(onOnline());\n const handleOffline = () => dispatch(onOffline());\n const handleVisibilityChange = () => {\n if (window.document.visibilityState === "visible") {\n handleFocus();\n } else {\n handleFocusLost();\n }\n };\n if (!initialized) {\n if (typeof window !== "undefined" && window.addEventListener) {\n window.addEventListener("visibilitychange", handleVisibilityChange, false);\n window.addEventListener("focus", handleFocus, false);\n window.addEventListener("online", handleOnline, false);\n window.addEventListener("offline", handleOffline, false);\n initialized = true;\n }\n }\n const unsubscribe = () => {\n window.removeEventListener("focus", handleFocus);\n window.removeEventListener("visibilitychange", handleVisibilityChange);\n window.removeEventListener("online", handleOnline);\n window.removeEventListener("offline", handleOffline);\n initialized = false;\n };\n return unsubscribe;\n }\n return customHandler ? customHandler(dispatch, {\n onFocus,\n onFocusLost,\n onOffline,\n onOnline\n }) : defaultHandler();\n}\n\n// src/query/endpointDefinitions.ts\nfunction isQueryDefinition(e) {\n return e.type === "query" /* query */;\n}\nfunction isMutationDefinition(e) {\n return e.type === "mutation" /* mutation */;\n}\nfunction isInfiniteQueryDefinition(e) {\n return e.type === "infinitequery" /* infinitequery */;\n}\nfunction calculateProvidedBy(description, result, error, queryArg, meta, assertTagTypes) {\n if (isFunction(description)) {\n return description(result, error, queryArg, meta).filter(isNotNullish).map(expandTagDescription).map(assertTagTypes);\n }\n if (Array.isArray(description)) {\n return description.map(expandTagDescription).map(assertTagTypes);\n }\n return [];\n}\nfunction isFunction(t) {\n return typeof t === "function";\n}\nfunction expandTagDescription(description) {\n return typeof description === "string" ? {\n type: description\n } : description;\n}\n\n// src/query/core/buildThunks.ts\n\n\n// src/query/core/buildInitiate.ts\n\n\n// src/tsHelpers.ts\nfunction asSafePromise(promise, fallback) {\n return promise.catch(fallback);\n}\n\n// src/query/core/buildInitiate.ts\nvar forceQueryFnSymbol = Symbol("forceQueryFn");\nvar isUpsertQuery = (arg) => typeof arg[forceQueryFnSymbol] === "function";\nfunction buildInitiate({\n serializeQueryArgs,\n queryThunk,\n infiniteQueryThunk,\n mutationThunk,\n api,\n context\n}) {\n const runningQueries = /* @__PURE__ */ new Map();\n const runningMutations = /* @__PURE__ */ new Map();\n const {\n unsubscribeQueryResult,\n removeMutationResult,\n updateSubscriptionOptions\n } = api.internalActions;\n return {\n buildInitiateQuery,\n buildInitiateInfiniteQuery,\n buildInitiateMutation,\n getRunningQueryThunk,\n getRunningMutationThunk,\n getRunningQueriesThunk,\n getRunningMutationsThunk\n };\n function getRunningQueryThunk(endpointName, queryArgs) {\n return (dispatch) => {\n const endpointDefinition = context.endpointDefinitions[endpointName];\n const queryCacheKey = serializeQueryArgs({\n queryArgs,\n endpointDefinition,\n endpointName\n });\n return runningQueries.get(dispatch)?.[queryCacheKey];\n };\n }\n function getRunningMutationThunk(_endpointName, fixedCacheKeyOrRequestId) {\n return (dispatch) => {\n return runningMutations.get(dispatch)?.[fixedCacheKeyOrRequestId];\n };\n }\n function getRunningQueriesThunk() {\n return (dispatch) => Object.values(runningQueries.get(dispatch) || {}).filter(isNotNullish);\n }\n function getRunningMutationsThunk() {\n return (dispatch) => Object.values(runningMutations.get(dispatch) || {}).filter(isNotNullish);\n }\n function middlewareWarning(dispatch) {\n if (false) {}\n }\n function buildInitiateAnyQuery(endpointName, endpointDefinition) {\n const queryAction = (arg, {\n subscribe = true,\n forceRefetch,\n subscriptionOptions,\n [forceQueryFnSymbol]: forceQueryFn,\n ...rest\n } = {}) => (dispatch, getState) => {\n const queryCacheKey = serializeQueryArgs({\n queryArgs: arg,\n endpointDefinition,\n endpointName\n });\n let thunk;\n const commonThunkArgs = {\n ...rest,\n type: "query",\n subscribe,\n forceRefetch,\n subscriptionOptions,\n endpointName,\n originalArgs: arg,\n queryCacheKey,\n [forceQueryFnSymbol]: forceQueryFn\n };\n if (isQueryDefinition(endpointDefinition)) {\n thunk = queryThunk(commonThunkArgs);\n } else {\n const {\n direction,\n initialPageParam\n } = rest;\n thunk = infiniteQueryThunk({\n ...commonThunkArgs,\n // Supply these even if undefined. This helps with a field existence\n // check over in `buildSlice.ts`\n direction,\n initialPageParam\n });\n }\n const selector = api.endpoints[endpointName].select(arg);\n const thunkResult = dispatch(thunk);\n const stateAfter = selector(getState());\n middlewareWarning(dispatch);\n const {\n requestId,\n abort\n } = thunkResult;\n const skippedSynchronously = stateAfter.requestId !== requestId;\n const runningQuery = runningQueries.get(dispatch)?.[queryCacheKey];\n const selectFromState = () => selector(getState());\n const statePromise = Object.assign(forceQueryFn ? (\n // a query has been forced (upsertQueryData)\n // -> we want to resolve it once data has been written with the data that will be written\n thunkResult.then(selectFromState)\n ) : skippedSynchronously && !runningQuery ? (\n // a query has been skipped due to a condition and we do not have any currently running query\n // -> we want to resolve it immediately with the current data\n Promise.resolve(stateAfter)\n ) : (\n // query just started or one is already in flight\n // -> wait for the running query, then resolve with data from after that\n Promise.all([runningQuery, thunkResult]).then(selectFromState)\n ), {\n arg,\n requestId,\n subscriptionOptions,\n queryCacheKey,\n abort,\n async unwrap() {\n const result = await statePromise;\n if (result.isError) {\n throw result.error;\n }\n return result.data;\n },\n refetch: () => dispatch(queryAction(arg, {\n subscribe: false,\n forceRefetch: true\n })),\n unsubscribe() {\n if (subscribe) dispatch(unsubscribeQueryResult({\n queryCacheKey,\n requestId\n }));\n },\n updateSubscriptionOptions(options) {\n statePromise.subscriptionOptions = options;\n dispatch(updateSubscriptionOptions({\n endpointName,\n requestId,\n queryCacheKey,\n options\n }));\n }\n });\n if (!runningQuery && !skippedSynchronously && !forceQueryFn) {\n const running = getOrInsert(runningQueries, dispatch, {});\n running[queryCacheKey] = statePromise;\n statePromise.then(() => {\n delete running[queryCacheKey];\n if (!countObjectKeys(running)) {\n runningQueries.delete(dispatch);\n }\n });\n }\n return statePromise;\n };\n return queryAction;\n }\n function buildInitiateQuery(endpointName, endpointDefinition) {\n const queryAction = buildInitiateAnyQuery(endpointName, endpointDefinition);\n return queryAction;\n }\n function buildInitiateInfiniteQuery(endpointName, endpointDefinition) {\n const infiniteQueryAction = buildInitiateAnyQuery(endpointName, endpointDefinition);\n return infiniteQueryAction;\n }\n function buildInitiateMutation(endpointName) {\n return (arg, {\n track = true,\n fixedCacheKey\n } = {}) => (dispatch, getState) => {\n const thunk = mutationThunk({\n type: "mutation",\n endpointName,\n originalArgs: arg,\n track,\n fixedCacheKey\n });\n const thunkResult = dispatch(thunk);\n middlewareWarning(dispatch);\n const {\n requestId,\n abort,\n unwrap\n } = thunkResult;\n const returnValuePromise = asSafePromise(thunkResult.unwrap().then((data) => ({\n data\n })), (error) => ({\n error\n }));\n const reset = () => {\n dispatch(removeMutationResult({\n requestId,\n fixedCacheKey\n }));\n };\n const ret = Object.assign(returnValuePromise, {\n arg: thunkResult.arg,\n requestId,\n abort,\n unwrap,\n reset\n });\n const running = runningMutations.get(dispatch) || {};\n runningMutations.set(dispatch, running);\n running[requestId] = ret;\n ret.then(() => {\n delete running[requestId];\n if (!countObjectKeys(running)) {\n runningMutations.delete(dispatch);\n }\n });\n if (fixedCacheKey) {\n running[fixedCacheKey] = ret;\n ret.then(() => {\n if (running[fixedCacheKey] === ret) {\n delete running[fixedCacheKey];\n if (!countObjectKeys(running)) {\n runningMutations.delete(dispatch);\n }\n }\n });\n }\n return ret;\n };\n }\n}\n\n// src/query/core/buildThunks.ts\nfunction defaultTransformResponse(baseQueryReturnValue) {\n return baseQueryReturnValue;\n}\nvar addShouldAutoBatch = (arg = {}) => {\n return {\n ...arg,\n [SHOULD_AUTOBATCH]: true\n };\n};\nfunction buildThunks({\n reducerPath,\n baseQuery,\n context: {\n endpointDefinitions\n },\n serializeQueryArgs,\n api,\n assertTagType,\n selectors\n}) {\n const patchQueryData = (endpointName, arg, patches, updateProvided) => (dispatch, getState) => {\n const endpointDefinition = endpointDefinitions[endpointName];\n const queryCacheKey = serializeQueryArgs({\n queryArgs: arg,\n endpointDefinition,\n endpointName\n });\n dispatch(api.internalActions.queryResultPatched({\n queryCacheKey,\n patches\n }));\n if (!updateProvided) {\n return;\n }\n const newValue = api.endpoints[endpointName].select(arg)(\n // Work around TS 4.1 mismatch\n getState()\n );\n const providedTags = calculateProvidedBy(endpointDefinition.providesTags, newValue.data, void 0, arg, {}, assertTagType);\n dispatch(api.internalActions.updateProvidedBy({\n queryCacheKey,\n providedTags\n }));\n };\n function addToStart(items, item, max = 0) {\n const newItems = [item, ...items];\n return max && newItems.length > max ? newItems.slice(0, -1) : newItems;\n }\n function addToEnd(items, item, max = 0) {\n const newItems = [...items, item];\n return max && newItems.length > max ? newItems.slice(1) : newItems;\n }\n const updateQueryData = (endpointName, arg, updateRecipe, updateProvided = true) => (dispatch, getState) => {\n const endpointDefinition = api.endpoints[endpointName];\n const currentState = endpointDefinition.select(arg)(\n // Work around TS 4.1 mismatch\n getState()\n );\n const ret = {\n patches: [],\n inversePatches: [],\n undo: () => dispatch(api.util.patchQueryData(endpointName, arg, ret.inversePatches, updateProvided))\n };\n if (currentState.status === "uninitialized" /* uninitialized */) {\n return ret;\n }\n let newValue;\n if ("data" in currentState) {\n if (isDraftable(currentState.data)) {\n const [value, patches, inversePatches] = produceWithPatches(currentState.data, updateRecipe);\n ret.patches.push(...patches);\n ret.inversePatches.push(...inversePatches);\n newValue = value;\n } else {\n newValue = updateRecipe(currentState.data);\n ret.patches.push({\n op: "replace",\n path: [],\n value: newValue\n });\n ret.inversePatches.push({\n op: "replace",\n path: [],\n value: currentState.data\n });\n }\n }\n if (ret.patches.length === 0) {\n return ret;\n }\n dispatch(api.util.patchQueryData(endpointName, arg, ret.patches, updateProvided));\n return ret;\n };\n const upsertQueryData = (endpointName, arg, value) => (dispatch) => {\n const res = dispatch(api.endpoints[endpointName].initiate(arg, {\n subscribe: false,\n forceRefetch: true,\n [forceQueryFnSymbol]: () => ({\n data: value\n })\n }));\n return res;\n };\n const getTransformCallbackForEndpoint = (endpointDefinition, transformFieldName) => {\n return endpointDefinition.query && endpointDefinition[transformFieldName] ? endpointDefinition[transformFieldName] : defaultTransformResponse;\n };\n const executeEndpoint = async (arg, {\n signal,\n abort,\n rejectWithValue,\n fulfillWithValue,\n dispatch,\n getState,\n extra\n }) => {\n const endpointDefinition = endpointDefinitions[arg.endpointName];\n try {\n let transformResponse = getTransformCallbackForEndpoint(endpointDefinition, "transformResponse");\n const baseQueryApi = {\n signal,\n abort,\n dispatch,\n getState,\n extra,\n endpoint: arg.endpointName,\n type: arg.type,\n forced: arg.type === "query" ? isForcedQuery(arg, getState()) : void 0,\n queryCacheKey: arg.type === "query" ? arg.queryCacheKey : void 0\n };\n const forceQueryFn = arg.type === "query" ? arg[forceQueryFnSymbol] : void 0;\n let finalQueryReturnValue;\n const fetchPage = async (data, param, maxPages, previous) => {\n if (param == null && data.pages.length) {\n return Promise.resolve({\n data\n });\n }\n const finalQueryArg = {\n queryArg: arg.originalArgs,\n pageParam: param\n };\n const pageResponse = await executeRequest(finalQueryArg);\n const addTo = previous ? addToStart : addToEnd;\n return {\n data: {\n pages: addTo(data.pages, pageResponse.data, maxPages),\n pageParams: addTo(data.pageParams, param, maxPages)\n }\n };\n };\n async function executeRequest(finalQueryArg) {\n let result;\n const {\n extraOptions\n } = endpointDefinition;\n if (forceQueryFn) {\n result = forceQueryFn();\n } else if (endpointDefinition.query) {\n result = await baseQuery(endpointDefinition.query(finalQueryArg), baseQueryApi, extraOptions);\n } else {\n result = await endpointDefinition.queryFn(finalQueryArg, baseQueryApi, extraOptions, (arg2) => baseQuery(arg2, baseQueryApi, extraOptions));\n }\n if (typeof process !== "undefined" && "production" === "development") {}\n if (result.error) throw new HandledError(result.error, result.meta);\n const transformedResponse = await transformResponse(result.data, result.meta, finalQueryArg);\n return {\n ...result,\n data: transformedResponse\n };\n }\n if (arg.type === "query" && "infiniteQueryOptions" in endpointDefinition) {\n const {\n infiniteQueryOptions\n } = endpointDefinition;\n const {\n maxPages = Infinity\n } = infiniteQueryOptions;\n let result;\n const blankData = {\n pages: [],\n pageParams: []\n };\n const cachedData = selectors.selectQueryEntry(getState(), arg.queryCacheKey)?.data;\n const isForcedQueryNeedingRefetch = (\n // arg.forceRefetch\n isForcedQuery(arg, getState()) && !arg.direction\n );\n const existingData = isForcedQueryNeedingRefetch || !cachedData ? blankData : cachedData;\n if ("direction" in arg && arg.direction && existingData.pages.length) {\n const previous = arg.direction === "backward";\n const pageParamFn = previous ? getPreviousPageParam : getNextPageParam;\n const param = pageParamFn(infiniteQueryOptions, existingData);\n result = await fetchPage(existingData, param, maxPages, previous);\n } else {\n const {\n initialPageParam = infiniteQueryOptions.initialPageParam\n } = arg;\n const cachedPageParams = cachedData?.pageParams ?? [];\n const firstPageParam = cachedPageParams[0] ?? initialPageParam;\n const totalPages = cachedPageParams.length;\n result = await fetchPage(existingData, firstPageParam, maxPages);\n if (forceQueryFn) {\n result = {\n data: result.data.pages[0]\n };\n }\n for (let i = 1; i < totalPages; i++) {\n const param = getNextPageParam(infiniteQueryOptions, result.data);\n result = await fetchPage(result.data, param, maxPages);\n }\n }\n finalQueryReturnValue = result;\n } else {\n finalQueryReturnValue = await executeRequest(arg.originalArgs);\n }\n return fulfillWithValue(finalQueryReturnValue.data, addShouldAutoBatch({\n fulfilledTimeStamp: Date.now(),\n baseQueryMeta: finalQueryReturnValue.meta\n }));\n } catch (error) {\n let catchedError = error;\n if (catchedError instanceof HandledError) {\n let transformErrorResponse = getTransformCallbackForEndpoint(endpointDefinition, "transformErrorResponse");\n try {\n return rejectWithValue(await transformErrorResponse(catchedError.value, catchedError.meta, arg.originalArgs), addShouldAutoBatch({\n baseQueryMeta: catchedError.meta\n }));\n } catch (e) {\n catchedError = e;\n }\n }\n if (typeof process !== "undefined" && "production" !== "production") {} else {\n console.error(catchedError);\n }\n throw catchedError;\n }\n };\n function isForcedQuery(arg, state) {\n const requestState = selectors.selectQueryEntry(state, arg.queryCacheKey);\n const baseFetchOnMountOrArgChange = selectors.selectConfig(state).refetchOnMountOrArgChange;\n const fulfilledVal = requestState?.fulfilledTimeStamp;\n const refetchVal = arg.forceRefetch ?? (arg.subscribe && baseFetchOnMountOrArgChange);\n if (refetchVal) {\n return refetchVal === true || (Number(/* @__PURE__ */ new Date()) - Number(fulfilledVal)) / 1e3 >= refetchVal;\n }\n return false;\n }\n const createQueryThunk = () => {\n const generatedQueryThunk = createAsyncThunk(`${reducerPath}/executeQuery`, executeEndpoint, {\n getPendingMeta({\n arg\n }) {\n const endpointDefinition = endpointDefinitions[arg.endpointName];\n return addShouldAutoBatch({\n startedTimeStamp: Date.now(),\n ...isInfiniteQueryDefinition(endpointDefinition) ? {\n direction: arg.direction\n } : {}\n });\n },\n condition(queryThunkArg, {\n getState\n }) {\n const state = getState();\n const requestState = selectors.selectQueryEntry(state, queryThunkArg.queryCacheKey);\n const fulfilledVal = requestState?.fulfilledTimeStamp;\n const currentArg = queryThunkArg.originalArgs;\n const previousArg = requestState?.originalArgs;\n const endpointDefinition = endpointDefinitions[queryThunkArg.endpointName];\n const direction = queryThunkArg.direction;\n if (isUpsertQuery(queryThunkArg)) {\n return true;\n }\n if (requestState?.status === "pending") {\n return false;\n }\n if (isForcedQuery(queryThunkArg, state)) {\n return true;\n }\n if (isQueryDefinition(endpointDefinition) && endpointDefinition?.forceRefetch?.({\n currentArg,\n previousArg,\n endpointState: requestState,\n state\n })) {\n return true;\n }\n if (fulfilledVal && !direction) {\n return false;\n }\n return true;\n },\n dispatchConditionRejection: true\n });\n return generatedQueryThunk;\n };\n const queryThunk = createQueryThunk();\n const infiniteQueryThunk = createQueryThunk();\n const mutationThunk = createAsyncThunk(`${reducerPath}/executeMutation`, executeEndpoint, {\n getPendingMeta() {\n return addShouldAutoBatch({\n startedTimeStamp: Date.now()\n });\n }\n });\n const hasTheForce = (options) => "force" in options;\n const hasMaxAge = (options) => "ifOlderThan" in options;\n const prefetch = (endpointName, arg, options) => (dispatch, getState) => {\n const force = hasTheForce(options) && options.force;\n const maxAge = hasMaxAge(options) && options.ifOlderThan;\n const queryAction = (force2 = true) => {\n const options2 = {\n forceRefetch: force2,\n isPrefetch: true\n };\n return api.endpoints[endpointName].initiate(arg, options2);\n };\n const latestStateValue = api.endpoints[endpointName].select(arg)(getState());\n if (force) {\n dispatch(queryAction());\n } else if (maxAge) {\n const lastFulfilledTs = latestStateValue?.fulfilledTimeStamp;\n if (!lastFulfilledTs) {\n dispatch(queryAction());\n return;\n }\n const shouldRetrigger = (Number(/* @__PURE__ */ new Date()) - Number(new Date(lastFulfilledTs))) / 1e3 >= maxAge;\n if (shouldRetrigger) {\n dispatch(queryAction());\n }\n } else {\n dispatch(queryAction(false));\n }\n };\n function matchesEndpoint(endpointName) {\n return (action) => action?.meta?.arg?.endpointName === endpointName;\n }\n function buildMatchThunkActions(thunk, endpointName) {\n return {\n matchPending: isAllOf(isPending(thunk), matchesEndpoint(endpointName)),\n matchFulfilled: isAllOf(isFulfilled(thunk), matchesEndpoint(endpointName)),\n matchRejected: isAllOf(isRejected(thunk), matchesEndpoint(endpointName))\n };\n }\n return {\n queryThunk,\n mutationThunk,\n infiniteQueryThunk,\n prefetch,\n updateQueryData,\n upsertQueryData,\n patchQueryData,\n buildMatchThunkActions\n };\n}\nfunction getNextPageParam(options, {\n pages,\n pageParams\n}) {\n const lastIndex = pages.length - 1;\n return options.getNextPageParam(pages[lastIndex], pages, pageParams[lastIndex], pageParams);\n}\nfunction getPreviousPageParam(options, {\n pages,\n pageParams\n}) {\n return options.getPreviousPageParam?.(pages[0], pages, pageParams[0], pageParams);\n}\nfunction calculateProvidedByThunk(action, type, endpointDefinitions, assertTagType) {\n return calculateProvidedBy(endpointDefinitions[action.meta.arg.endpointName][type], isFulfilled(action) ? action.payload : void 0, isRejectedWithValue(action) ? action.payload : void 0, action.meta.arg.originalArgs, "baseQueryMeta" in action.meta ? action.meta.baseQueryMeta : void 0, assertTagType);\n}\n\n// src/query/core/buildSlice.ts\n\n\nfunction updateQuerySubstateIfExists(state, queryCacheKey, update) {\n const substate = state[queryCacheKey];\n if (substate) {\n update(substate);\n }\n}\nfunction getMutationCacheKey(id) {\n return ("arg" in id ? id.arg.fixedCacheKey : id.fixedCacheKey) ?? id.requestId;\n}\nfunction updateMutationSubstateIfExists(state, id, update) {\n const substate = state[getMutationCacheKey(id)];\n if (substate) {\n update(substate);\n }\n}\nvar initialState = {};\nfunction buildSlice({\n reducerPath,\n queryThunk,\n mutationThunk,\n serializeQueryArgs,\n context: {\n endpointDefinitions: definitions,\n apiUid,\n extractRehydrationInfo,\n hasRehydrationInfo\n },\n assertTagType,\n config\n}) {\n const resetApiState = createAction(`${reducerPath}/resetApiState`);\n function writePendingCacheEntry(draft, arg, upserting, meta) {\n draft[arg.queryCacheKey] ??= {\n status: "uninitialized" /* uninitialized */,\n endpointName: arg.endpointName\n };\n updateQuerySubstateIfExists(draft, arg.queryCacheKey, (substate) => {\n substate.status = "pending" /* pending */;\n substate.requestId = upserting && substate.requestId ? (\n // for `upsertQuery` **updates**, keep the current `requestId`\n substate.requestId\n ) : (\n // for normal queries or `upsertQuery` **inserts** always update the `requestId`\n meta.requestId\n );\n if (arg.originalArgs !== void 0) {\n substate.originalArgs = arg.originalArgs;\n }\n substate.startedTimeStamp = meta.startedTimeStamp;\n const endpointDefinition = definitions[meta.arg.endpointName];\n if (isInfiniteQueryDefinition(endpointDefinition) && "direction" in arg) {\n ;\n substate.direction = arg.direction;\n }\n });\n }\n function writeFulfilledCacheEntry(draft, meta, payload, upserting) {\n updateQuerySubstateIfExists(draft, meta.arg.queryCacheKey, (substate) => {\n if (substate.requestId !== meta.requestId && !upserting) return;\n const {\n merge\n } = definitions[meta.arg.endpointName];\n substate.status = "fulfilled" /* fulfilled */;\n if (merge) {\n if (substate.data !== void 0) {\n const {\n fulfilledTimeStamp,\n arg,\n baseQueryMeta,\n requestId\n } = meta;\n let newData = produce(substate.data, (draftSubstateData) => {\n return merge(draftSubstateData, payload, {\n arg: arg.originalArgs,\n baseQueryMeta,\n fulfilledTimeStamp,\n requestId\n });\n });\n substate.data = newData;\n } else {\n substate.data = payload;\n }\n } else {\n substate.data = definitions[meta.arg.endpointName].structuralSharing ?? true ? copyWithStructuralSharing(immer_isDraft(substate.data) ? original(substate.data) : substate.data, payload) : payload;\n }\n delete substate.error;\n substate.fulfilledTimeStamp = meta.fulfilledTimeStamp;\n });\n }\n const querySlice = createSlice({\n name: `${reducerPath}/queries`,\n initialState,\n reducers: {\n removeQueryResult: {\n reducer(draft, {\n payload: {\n queryCacheKey\n }\n }) {\n delete draft[queryCacheKey];\n },\n prepare: prepareAutoBatched()\n },\n cacheEntriesUpserted: {\n reducer(draft, action) {\n for (const entry of action.payload) {\n const {\n queryDescription: arg,\n value\n } = entry;\n writePendingCacheEntry(draft, arg, true, {\n arg,\n requestId: action.meta.requestId,\n startedTimeStamp: action.meta.timestamp\n });\n writeFulfilledCacheEntry(\n draft,\n {\n arg,\n requestId: action.meta.requestId,\n fulfilledTimeStamp: action.meta.timestamp,\n baseQueryMeta: {}\n },\n value,\n // We know we\'re upserting here\n true\n );\n }\n },\n prepare: (payload) => {\n const queryDescriptions = payload.map((entry) => {\n const {\n endpointName,\n arg,\n value\n } = entry;\n const endpointDefinition = definitions[endpointName];\n const queryDescription = {\n type: "query",\n endpointName,\n originalArgs: entry.arg,\n queryCacheKey: serializeQueryArgs({\n queryArgs: arg,\n endpointDefinition,\n endpointName\n })\n };\n return {\n queryDescription,\n value\n };\n });\n const result = {\n payload: queryDescriptions,\n meta: {\n [SHOULD_AUTOBATCH]: true,\n requestId: nanoid(),\n timestamp: Date.now()\n }\n };\n return result;\n }\n },\n queryResultPatched: {\n reducer(draft, {\n payload: {\n queryCacheKey,\n patches\n }\n }) {\n updateQuerySubstateIfExists(draft, queryCacheKey, (substate) => {\n substate.data = applyPatches(substate.data, patches.concat());\n });\n },\n prepare: prepareAutoBatched()\n }\n },\n extraReducers(builder) {\n builder.addCase(queryThunk.pending, (draft, {\n meta,\n meta: {\n arg\n }\n }) => {\n const upserting = isUpsertQuery(arg);\n writePendingCacheEntry(draft, arg, upserting, meta);\n }).addCase(queryThunk.fulfilled, (draft, {\n meta,\n payload\n }) => {\n const upserting = isUpsertQuery(meta.arg);\n writeFulfilledCacheEntry(draft, meta, payload, upserting);\n }).addCase(queryThunk.rejected, (draft, {\n meta: {\n condition,\n arg,\n requestId\n },\n error,\n payload\n }) => {\n updateQuerySubstateIfExists(draft, arg.queryCacheKey, (substate) => {\n if (condition) {\n } else {\n if (substate.requestId !== requestId) return;\n substate.status = "rejected" /* rejected */;\n substate.error = payload ?? error;\n }\n });\n }).addMatcher(hasRehydrationInfo, (draft, action) => {\n const {\n queries\n } = extractRehydrationInfo(action);\n for (const [key, entry] of Object.entries(queries)) {\n if (\n // do not rehydrate entries that were currently in flight.\n entry?.status === "fulfilled" /* fulfilled */ || entry?.status === "rejected" /* rejected */\n ) {\n draft[key] = entry;\n }\n }\n });\n }\n });\n const mutationSlice = createSlice({\n name: `${reducerPath}/mutations`,\n initialState,\n reducers: {\n removeMutationResult: {\n reducer(draft, {\n payload\n }) {\n const cacheKey = getMutationCacheKey(payload);\n if (cacheKey in draft) {\n delete draft[cacheKey];\n }\n },\n prepare: prepareAutoBatched()\n }\n },\n extraReducers(builder) {\n builder.addCase(mutationThunk.pending, (draft, {\n meta,\n meta: {\n requestId,\n arg,\n startedTimeStamp\n }\n }) => {\n if (!arg.track) return;\n draft[getMutationCacheKey(meta)] = {\n requestId,\n status: "pending" /* pending */,\n endpointName: arg.endpointName,\n startedTimeStamp\n };\n }).addCase(mutationThunk.fulfilled, (draft, {\n payload,\n meta\n }) => {\n if (!meta.arg.track) return;\n updateMutationSubstateIfExists(draft, meta, (substate) => {\n if (substate.requestId !== meta.requestId) return;\n substate.status = "fulfilled" /* fulfilled */;\n substate.data = payload;\n substate.fulfilledTimeStamp = meta.fulfilledTimeStamp;\n });\n }).addCase(mutationThunk.rejected, (draft, {\n payload,\n error,\n meta\n }) => {\n if (!meta.arg.track) return;\n updateMutationSubstateIfExists(draft, meta, (substate) => {\n if (substate.requestId !== meta.requestId) return;\n substate.status = "rejected" /* rejected */;\n substate.error = payload ?? error;\n });\n }).addMatcher(hasRehydrationInfo, (draft, action) => {\n const {\n mutations\n } = extractRehydrationInfo(action);\n for (const [key, entry] of Object.entries(mutations)) {\n if (\n // do not rehydrate entries that were currently in flight.\n (entry?.status === "fulfilled" /* fulfilled */ || entry?.status === "rejected" /* rejected */) && // only rehydrate endpoints that were persisted using a `fixedCacheKey`\n key !== entry?.requestId\n ) {\n draft[key] = entry;\n }\n }\n });\n }\n });\n const invalidationSlice = createSlice({\n name: `${reducerPath}/invalidation`,\n initialState,\n reducers: {\n updateProvidedBy: {\n reducer(draft, action) {\n const {\n queryCacheKey,\n providedTags\n } = action.payload;\n for (const tagTypeSubscriptions of Object.values(draft)) {\n for (const idSubscriptions of Object.values(tagTypeSubscriptions)) {\n const foundAt = idSubscriptions.indexOf(queryCacheKey);\n if (foundAt !== -1) {\n idSubscriptions.splice(foundAt, 1);\n }\n }\n }\n for (const {\n type,\n id\n } of providedTags) {\n const subscribedQueries = (draft[type] ??= {})[id || "__internal_without_id"] ??= [];\n const alreadySubscribed = subscribedQueries.includes(queryCacheKey);\n if (!alreadySubscribed) {\n subscribedQueries.push(queryCacheKey);\n }\n }\n },\n prepare: prepareAutoBatched()\n }\n },\n extraReducers(builder) {\n builder.addCase(querySlice.actions.removeQueryResult, (draft, {\n payload: {\n queryCacheKey\n }\n }) => {\n for (const tagTypeSubscriptions of Object.values(draft)) {\n for (const idSubscriptions of Object.values(tagTypeSubscriptions)) {\n const foundAt = idSubscriptions.indexOf(queryCacheKey);\n if (foundAt !== -1) {\n idSubscriptions.splice(foundAt, 1);\n }\n }\n }\n }).addMatcher(hasRehydrationInfo, (draft, action) => {\n const {\n provided\n } = extractRehydrationInfo(action);\n for (const [type, incomingTags] of Object.entries(provided)) {\n for (const [id, cacheKeys] of Object.entries(incomingTags)) {\n const subscribedQueries = (draft[type] ??= {})[id || "__internal_without_id"] ??= [];\n for (const queryCacheKey of cacheKeys) {\n const alreadySubscribed = subscribedQueries.includes(queryCacheKey);\n if (!alreadySubscribed) {\n subscribedQueries.push(queryCacheKey);\n }\n }\n }\n }\n }).addMatcher(isAnyOf(isFulfilled(queryThunk), isRejectedWithValue(queryThunk)), (draft, action) => {\n const providedTags = calculateProvidedByThunk(action, "providesTags", definitions, assertTagType);\n const {\n queryCacheKey\n } = action.meta.arg;\n invalidationSlice.caseReducers.updateProvidedBy(draft, invalidationSlice.actions.updateProvidedBy({\n queryCacheKey,\n providedTags\n }));\n });\n }\n });\n const subscriptionSlice = createSlice({\n name: `${reducerPath}/subscriptions`,\n initialState,\n reducers: {\n updateSubscriptionOptions(d, a) {\n },\n unsubscribeQueryResult(d, a) {\n },\n internal_getRTKQSubscriptions() {\n }\n }\n });\n const internalSubscriptionsSlice = createSlice({\n name: `${reducerPath}/internalSubscriptions`,\n initialState,\n reducers: {\n subscriptionsUpdated: {\n reducer(state, action) {\n return applyPatches(state, action.payload);\n },\n prepare: prepareAutoBatched()\n }\n }\n });\n const configSlice = createSlice({\n name: `${reducerPath}/config`,\n initialState: {\n online: isOnline(),\n focused: isDocumentVisible(),\n middlewareRegistered: false,\n ...config\n },\n reducers: {\n middlewareRegistered(state, {\n payload\n }) {\n state.middlewareRegistered = state.middlewareRegistered === "conflict" || apiUid !== payload ? "conflict" : true;\n }\n },\n extraReducers: (builder) => {\n builder.addCase(onOnline, (state) => {\n state.online = true;\n }).addCase(onOffline, (state) => {\n state.online = false;\n }).addCase(onFocus, (state) => {\n state.focused = true;\n }).addCase(onFocusLost, (state) => {\n state.focused = false;\n }).addMatcher(hasRehydrationInfo, (draft) => ({\n ...draft\n }));\n }\n });\n const combinedReducer = combineReducers({\n queries: querySlice.reducer,\n mutations: mutationSlice.reducer,\n provided: invalidationSlice.reducer,\n subscriptions: internalSubscriptionsSlice.reducer,\n config: configSlice.reducer\n });\n const reducer = (state, action) => combinedReducer(resetApiState.match(action) ? void 0 : state, action);\n const actions = {\n ...configSlice.actions,\n ...querySlice.actions,\n ...subscriptionSlice.actions,\n ...internalSubscriptionsSlice.actions,\n ...mutationSlice.actions,\n ...invalidationSlice.actions,\n resetApiState\n };\n return {\n reducer,\n actions\n };\n}\n\n// src/query/core/buildSelectors.ts\nvar skipToken = /* @__PURE__ */ Symbol.for("RTKQ/skipToken");\nvar initialSubState = {\n status: "uninitialized" /* uninitialized */\n};\nvar defaultQuerySubState = /* @__PURE__ */ produce(initialSubState, () => {\n});\nvar defaultMutationSubState = /* @__PURE__ */ produce(initialSubState, () => {\n});\nfunction buildSelectors({\n serializeQueryArgs,\n reducerPath,\n createSelector: createSelector2\n}) {\n const selectSkippedQuery = (state) => defaultQuerySubState;\n const selectSkippedMutation = (state) => defaultMutationSubState;\n return {\n buildQuerySelector,\n buildInfiniteQuerySelector,\n buildMutationSelector,\n selectInvalidatedBy,\n selectCachedArgsForQuery,\n selectApiState,\n selectQueries,\n selectMutations,\n selectQueryEntry,\n selectConfig\n };\n function withRequestFlags(substate) {\n return {\n ...substate,\n ...getRequestStatusFlags(substate.status)\n };\n }\n function selectApiState(rootState) {\n const state = rootState[reducerPath];\n if (false) {}\n return state;\n }\n function selectQueries(rootState) {\n return selectApiState(rootState)?.queries;\n }\n function selectQueryEntry(rootState, cacheKey) {\n return selectQueries(rootState)?.[cacheKey];\n }\n function selectMutations(rootState) {\n return selectApiState(rootState)?.mutations;\n }\n function selectConfig(rootState) {\n return selectApiState(rootState)?.config;\n }\n function buildAnyQuerySelector(endpointName, endpointDefinition, combiner) {\n return (queryArgs) => {\n if (queryArgs === skipToken) {\n return createSelector2(selectSkippedQuery, combiner);\n }\n const serializedArgs = serializeQueryArgs({\n queryArgs,\n endpointDefinition,\n endpointName\n });\n const selectQuerySubstate = (state) => selectQueryEntry(state, serializedArgs) ?? defaultQuerySubState;\n return createSelector2(selectQuerySubstate, combiner);\n };\n }\n function buildQuerySelector(endpointName, endpointDefinition) {\n return buildAnyQuerySelector(endpointName, endpointDefinition, withRequestFlags);\n }\n function buildInfiniteQuerySelector(endpointName, endpointDefinition) {\n const {\n infiniteQueryOptions\n } = endpointDefinition;\n function withInfiniteQueryResultFlags(substate) {\n const stateWithRequestFlags = {\n ...substate,\n ...getRequestStatusFlags(substate.status)\n };\n const {\n isLoading,\n isError,\n direction\n } = stateWithRequestFlags;\n const isForward = direction === "forward";\n const isBackward = direction === "backward";\n return {\n ...stateWithRequestFlags,\n hasNextPage: getHasNextPage(infiniteQueryOptions, stateWithRequestFlags.data),\n hasPreviousPage: getHasPreviousPage(infiniteQueryOptions, stateWithRequestFlags.data),\n isFetchingNextPage: isLoading && isForward,\n isFetchingPreviousPage: isLoading && isBackward,\n isFetchNextPageError: isError && isForward,\n isFetchPreviousPageError: isError && isBackward\n };\n }\n return buildAnyQuerySelector(endpointName, endpointDefinition, withInfiniteQueryResultFlags);\n }\n function buildMutationSelector() {\n return (id) => {\n let mutationId;\n if (typeof id === "object") {\n mutationId = getMutationCacheKey(id) ?? skipToken;\n } else {\n mutationId = id;\n }\n const selectMutationSubstate = (state) => selectApiState(state)?.mutations?.[mutationId] ?? defaultMutationSubState;\n const finalSelectMutationSubstate = mutationId === skipToken ? selectSkippedMutation : selectMutationSubstate;\n return createSelector2(finalSelectMutationSubstate, withRequestFlags);\n };\n }\n function selectInvalidatedBy(state, tags) {\n const apiState = state[reducerPath];\n const toInvalidate = /* @__PURE__ */ new Set();\n for (const tag of tags.filter(isNotNullish).map(expandTagDescription)) {\n const provided = apiState.provided[tag.type];\n if (!provided) {\n continue;\n }\n let invalidateSubscriptions = (tag.id !== void 0 ? (\n // id given: invalidate all queries that provide this type & id\n provided[tag.id]\n ) : (\n // no id: invalidate all queries that provide this type\n flatten(Object.values(provided))\n )) ?? [];\n for (const invalidate of invalidateSubscriptions) {\n toInvalidate.add(invalidate);\n }\n }\n return flatten(Array.from(toInvalidate.values()).map((queryCacheKey) => {\n const querySubState = apiState.queries[queryCacheKey];\n return querySubState ? [{\n queryCacheKey,\n endpointName: querySubState.endpointName,\n originalArgs: querySubState.originalArgs\n }] : [];\n }));\n }\n function selectCachedArgsForQuery(state, queryName) {\n return Object.values(selectQueries(state)).filter((entry) => entry?.endpointName === queryName && entry.status !== "uninitialized" /* uninitialized */).map((entry) => entry.originalArgs);\n }\n function getHasNextPage(options, data) {\n if (!data) return false;\n return getNextPageParam(options, data) != null;\n }\n function getHasPreviousPage(options, data) {\n if (!data || !options.getPreviousPageParam) return false;\n return getPreviousPageParam(options, data) != null;\n }\n}\n\n// src/query/createApi.ts\n\n\n// src/query/defaultSerializeQueryArgs.ts\nvar cache = WeakMap ? /* @__PURE__ */ new WeakMap() : void 0;\nvar defaultSerializeQueryArgs = ({\n endpointName,\n queryArgs\n}) => {\n let serialized = "";\n const cached = cache?.get(queryArgs);\n if (typeof cached === "string") {\n serialized = cached;\n } else {\n const stringified = JSON.stringify(queryArgs, (key, value) => {\n value = typeof value === "bigint" ? {\n $bigint: value.toString()\n } : value;\n value = redux_isPlainObject(value) ? Object.keys(value).sort().reduce((acc, key2) => {\n acc[key2] = value[key2];\n return acc;\n }, {}) : value;\n return value;\n });\n if (redux_isPlainObject(queryArgs)) {\n cache?.set(queryArgs, stringified);\n }\n serialized = stringified;\n }\n return `${endpointName}(${serialized})`;\n};\n\n// src/query/createApi.ts\n\nfunction buildCreateApi(...modules) {\n return function baseCreateApi(options) {\n const extractRehydrationInfo = reselect_weakMapMemoize((action) => options.extractRehydrationInfo?.(action, {\n reducerPath: options.reducerPath ?? "api"\n }));\n const optionsWithDefaults = {\n reducerPath: "api",\n keepUnusedDataFor: 60,\n refetchOnMountOrArgChange: false,\n refetchOnFocus: false,\n refetchOnReconnect: false,\n invalidationBehavior: "delayed",\n ...options,\n extractRehydrationInfo,\n serializeQueryArgs(queryArgsApi) {\n let finalSerializeQueryArgs = defaultSerializeQueryArgs;\n if ("serializeQueryArgs" in queryArgsApi.endpointDefinition) {\n const endpointSQA = queryArgsApi.endpointDefinition.serializeQueryArgs;\n finalSerializeQueryArgs = (queryArgsApi2) => {\n const initialResult = endpointSQA(queryArgsApi2);\n if (typeof initialResult === "string") {\n return initialResult;\n } else {\n return defaultSerializeQueryArgs({\n ...queryArgsApi2,\n queryArgs: initialResult\n });\n }\n };\n } else if (options.serializeQueryArgs) {\n finalSerializeQueryArgs = options.serializeQueryArgs;\n }\n return finalSerializeQueryArgs(queryArgsApi);\n },\n tagTypes: [...options.tagTypes || []]\n };\n const context = {\n endpointDefinitions: {},\n batch(fn) {\n fn();\n },\n apiUid: nanoid(),\n extractRehydrationInfo,\n hasRehydrationInfo: reselect_weakMapMemoize((action) => extractRehydrationInfo(action) != null)\n };\n const api = {\n injectEndpoints,\n enhanceEndpoints({\n addTagTypes,\n endpoints\n }) {\n if (addTagTypes) {\n for (const eT of addTagTypes) {\n if (!optionsWithDefaults.tagTypes.includes(eT)) {\n ;\n optionsWithDefaults.tagTypes.push(eT);\n }\n }\n }\n if (endpoints) {\n for (const [endpointName, partialDefinition] of Object.entries(endpoints)) {\n if (typeof partialDefinition === "function") {\n partialDefinition(context.endpointDefinitions[endpointName]);\n } else {\n Object.assign(context.endpointDefinitions[endpointName] || {}, partialDefinition);\n }\n }\n }\n return api;\n }\n };\n const initializedModules = modules.map((m) => m.init(api, optionsWithDefaults, context));\n function injectEndpoints(inject) {\n const evaluatedEndpoints = inject.endpoints({\n query: (x) => ({\n ...x,\n type: "query" /* query */\n }),\n mutation: (x) => ({\n ...x,\n type: "mutation" /* mutation */\n }),\n infiniteQuery: (x) => ({\n ...x,\n type: "infinitequery" /* infinitequery */\n })\n });\n for (const [endpointName, definition] of Object.entries(evaluatedEndpoints)) {\n if (inject.overrideExisting !== true && endpointName in context.endpointDefinitions) {\n if (inject.overrideExisting === "throw") {\n throw new Error( true ? redux_toolkit_modern_formatProdErrorMessage(39) : 0);\n } else if (typeof process !== "undefined" && "production" === "development") {}\n continue;\n }\n if (typeof process !== "undefined" && "production" === "development") {}\n context.endpointDefinitions[endpointName] = definition;\n for (const m of initializedModules) {\n m.injectEndpoint(endpointName, definition);\n }\n }\n return api;\n }\n return api.injectEndpoints({\n endpoints: options.endpoints\n });\n };\n}\n\n// src/query/fakeBaseQuery.ts\n\nvar _NEVER = /* @__PURE__ */ (/* unused pure expression or super */ null && (Symbol()));\nfunction fakeBaseQuery() {\n return function() {\n throw new Error( true ? _formatProdErrorMessage4(33) : 0);\n };\n}\n\n// src/query/core/module.ts\n\n\n// src/query/tsHelpers.ts\nfunction assertCast(v) {\n}\nfunction safeAssign(target, ...args) {\n return Object.assign(target, ...args);\n}\n\n// src/query/core/buildMiddleware/batchActions.ts\n\nvar buildBatchedActionsHandler = ({\n api,\n queryThunk,\n internalState\n}) => {\n const subscriptionsPrefix = `${api.reducerPath}/subscriptions`;\n let previousSubscriptions = null;\n let updateSyncTimer = null;\n const {\n updateSubscriptionOptions,\n unsubscribeQueryResult\n } = api.internalActions;\n const actuallyMutateSubscriptions = (mutableState, action) => {\n if (updateSubscriptionOptions.match(action)) {\n const {\n queryCacheKey,\n requestId,\n options\n } = action.payload;\n if (mutableState?.[queryCacheKey]?.[requestId]) {\n mutableState[queryCacheKey][requestId] = options;\n }\n return true;\n }\n if (unsubscribeQueryResult.match(action)) {\n const {\n queryCacheKey,\n requestId\n } = action.payload;\n if (mutableState[queryCacheKey]) {\n delete mutableState[queryCacheKey][requestId];\n }\n return true;\n }\n if (api.internalActions.removeQueryResult.match(action)) {\n delete mutableState[action.payload.queryCacheKey];\n return true;\n }\n if (queryThunk.pending.match(action)) {\n const {\n meta: {\n arg,\n requestId\n }\n } = action;\n const substate = mutableState[arg.queryCacheKey] ??= {};\n substate[`${requestId}_running`] = {};\n if (arg.subscribe) {\n substate[requestId] = arg.subscriptionOptions ?? substate[requestId] ?? {};\n }\n return true;\n }\n let mutated = false;\n if (queryThunk.fulfilled.match(action) || queryThunk.rejected.match(action)) {\n const state = mutableState[action.meta.arg.queryCacheKey] || {};\n const key = `${action.meta.requestId}_running`;\n mutated ||= !!state[key];\n delete state[key];\n }\n if (queryThunk.rejected.match(action)) {\n const {\n meta: {\n condition,\n arg,\n requestId\n }\n } = action;\n if (condition && arg.subscribe) {\n const substate = mutableState[arg.queryCacheKey] ??= {};\n substate[requestId] = arg.subscriptionOptions ?? substate[requestId] ?? {};\n mutated = true;\n }\n }\n return mutated;\n };\n const getSubscriptions = () => internalState.currentSubscriptions;\n const getSubscriptionCount = (queryCacheKey) => {\n const subscriptions = getSubscriptions();\n const subscriptionsForQueryArg = subscriptions[queryCacheKey] ?? {};\n return countObjectKeys(subscriptionsForQueryArg);\n };\n const isRequestSubscribed = (queryCacheKey, requestId) => {\n const subscriptions = getSubscriptions();\n return !!subscriptions?.[queryCacheKey]?.[requestId];\n };\n const subscriptionSelectors = {\n getSubscriptions,\n getSubscriptionCount,\n isRequestSubscribed\n };\n return (action, mwApi) => {\n if (!previousSubscriptions) {\n previousSubscriptions = JSON.parse(JSON.stringify(internalState.currentSubscriptions));\n }\n if (api.util.resetApiState.match(action)) {\n previousSubscriptions = internalState.currentSubscriptions = {};\n updateSyncTimer = null;\n return [true, false];\n }\n if (api.internalActions.internal_getRTKQSubscriptions.match(action)) {\n return [false, subscriptionSelectors];\n }\n const didMutate = actuallyMutateSubscriptions(internalState.currentSubscriptions, action);\n let actionShouldContinue = true;\n if (didMutate) {\n if (!updateSyncTimer) {\n updateSyncTimer = setTimeout(() => {\n const newSubscriptions = JSON.parse(JSON.stringify(internalState.currentSubscriptions));\n const [, patches] = produceWithPatches(previousSubscriptions, () => newSubscriptions);\n mwApi.next(api.internalActions.subscriptionsUpdated(patches));\n previousSubscriptions = newSubscriptions;\n updateSyncTimer = null;\n }, 500);\n }\n const isSubscriptionSliceAction = typeof action.type == "string" && !!action.type.startsWith(subscriptionsPrefix);\n const isAdditionalSubscriptionAction = queryThunk.rejected.match(action) && action.meta.condition && !!action.meta.arg.subscribe;\n actionShouldContinue = !isSubscriptionSliceAction && !isAdditionalSubscriptionAction;\n }\n return [actionShouldContinue, false];\n };\n};\n\n// src/query/core/buildMiddleware/cacheCollection.ts\nfunction isObjectEmpty(obj) {\n for (const k in obj) {\n return false;\n }\n return true;\n}\nvar THIRTY_TWO_BIT_MAX_TIMER_SECONDS = 2147483647 / 1e3 - 1;\nvar buildCacheCollectionHandler = ({\n reducerPath,\n api,\n queryThunk,\n context,\n internalState,\n selectors: {\n selectQueryEntry,\n selectConfig\n }\n}) => {\n const {\n removeQueryResult,\n unsubscribeQueryResult,\n cacheEntriesUpserted\n } = api.internalActions;\n const canTriggerUnsubscribe = isAnyOf(unsubscribeQueryResult.match, queryThunk.fulfilled, queryThunk.rejected, cacheEntriesUpserted.match);\n function anySubscriptionsRemainingForKey(queryCacheKey) {\n const subscriptions = internalState.currentSubscriptions[queryCacheKey];\n return !!subscriptions && !isObjectEmpty(subscriptions);\n }\n const currentRemovalTimeouts = {};\n const handler = (action, mwApi, internalState2) => {\n const state = mwApi.getState();\n const config = selectConfig(state);\n if (canTriggerUnsubscribe(action)) {\n let queryCacheKeys;\n if (cacheEntriesUpserted.match(action)) {\n queryCacheKeys = action.payload.map((entry) => entry.queryDescription.queryCacheKey);\n } else {\n const {\n queryCacheKey\n } = unsubscribeQueryResult.match(action) ? action.payload : action.meta.arg;\n queryCacheKeys = [queryCacheKey];\n }\n handleUnsubscribeMany(queryCacheKeys, mwApi, config);\n }\n if (api.util.resetApiState.match(action)) {\n for (const [key, timeout] of Object.entries(currentRemovalTimeouts)) {\n if (timeout) clearTimeout(timeout);\n delete currentRemovalTimeouts[key];\n }\n }\n if (context.hasRehydrationInfo(action)) {\n const {\n queries\n } = context.extractRehydrationInfo(action);\n handleUnsubscribeMany(Object.keys(queries), mwApi, config);\n }\n };\n function handleUnsubscribeMany(cacheKeys, api2, config) {\n const state = api2.getState();\n for (const queryCacheKey of cacheKeys) {\n const entry = selectQueryEntry(state, queryCacheKey);\n handleUnsubscribe(queryCacheKey, entry?.endpointName, api2, config);\n }\n }\n function handleUnsubscribe(queryCacheKey, endpointName, api2, config) {\n const endpointDefinition = context.endpointDefinitions[endpointName];\n const keepUnusedDataFor = endpointDefinition?.keepUnusedDataFor ?? config.keepUnusedDataFor;\n if (keepUnusedDataFor === Infinity) {\n return;\n }\n const finalKeepUnusedDataFor = Math.max(0, Math.min(keepUnusedDataFor, THIRTY_TWO_BIT_MAX_TIMER_SECONDS));\n if (!anySubscriptionsRemainingForKey(queryCacheKey)) {\n const currentTimeout = currentRemovalTimeouts[queryCacheKey];\n if (currentTimeout) {\n clearTimeout(currentTimeout);\n }\n currentRemovalTimeouts[queryCacheKey] = setTimeout(() => {\n if (!anySubscriptionsRemainingForKey(queryCacheKey)) {\n api2.dispatch(removeQueryResult({\n queryCacheKey\n }));\n }\n delete currentRemovalTimeouts[queryCacheKey];\n }, finalKeepUnusedDataFor * 1e3);\n }\n }\n return handler;\n};\n\n// src/query/core/buildMiddleware/cacheLifecycle.ts\nvar neverResolvedError = new Error("Promise never resolved before cacheEntryRemoved.");\nvar buildCacheLifecycleHandler = ({\n api,\n reducerPath,\n context,\n queryThunk,\n mutationThunk,\n internalState,\n selectors: {\n selectQueryEntry,\n selectApiState\n }\n}) => {\n const isQueryThunk = isAsyncThunkAction(queryThunk);\n const isMutationThunk = isAsyncThunkAction(mutationThunk);\n const isFulfilledThunk = isFulfilled(queryThunk, mutationThunk);\n const lifecycleMap = {};\n function resolveLifecycleEntry(cacheKey, data, meta) {\n const lifecycle = lifecycleMap[cacheKey];\n if (lifecycle?.valueResolved) {\n lifecycle.valueResolved({\n data,\n meta\n });\n delete lifecycle.valueResolved;\n }\n }\n function removeLifecycleEntry(cacheKey) {\n const lifecycle = lifecycleMap[cacheKey];\n if (lifecycle) {\n delete lifecycleMap[cacheKey];\n lifecycle.cacheEntryRemoved();\n }\n }\n const handler = (action, mwApi, stateBefore) => {\n const cacheKey = getCacheKey(action);\n function checkForNewCacheKey(endpointName, cacheKey2, requestId, originalArgs) {\n const oldEntry = selectQueryEntry(stateBefore, cacheKey2);\n const newEntry = selectQueryEntry(mwApi.getState(), cacheKey2);\n if (!oldEntry && newEntry) {\n handleNewKey(endpointName, originalArgs, cacheKey2, mwApi, requestId);\n }\n }\n if (queryThunk.pending.match(action)) {\n checkForNewCacheKey(action.meta.arg.endpointName, cacheKey, action.meta.requestId, action.meta.arg.originalArgs);\n } else if (api.internalActions.cacheEntriesUpserted.match(action)) {\n for (const {\n queryDescription,\n value\n } of action.payload) {\n const {\n endpointName,\n originalArgs,\n queryCacheKey\n } = queryDescription;\n checkForNewCacheKey(endpointName, queryCacheKey, action.meta.requestId, originalArgs);\n resolveLifecycleEntry(queryCacheKey, value, {});\n }\n } else if (mutationThunk.pending.match(action)) {\n const state = mwApi.getState()[reducerPath].mutations[cacheKey];\n if (state) {\n handleNewKey(action.meta.arg.endpointName, action.meta.arg.originalArgs, cacheKey, mwApi, action.meta.requestId);\n }\n } else if (isFulfilledThunk(action)) {\n resolveLifecycleEntry(cacheKey, action.payload, action.meta.baseQueryMeta);\n } else if (api.internalActions.removeQueryResult.match(action) || api.internalActions.removeMutationResult.match(action)) {\n removeLifecycleEntry(cacheKey);\n } else if (api.util.resetApiState.match(action)) {\n for (const cacheKey2 of Object.keys(lifecycleMap)) {\n removeLifecycleEntry(cacheKey2);\n }\n }\n };\n function getCacheKey(action) {\n if (isQueryThunk(action)) return action.meta.arg.queryCacheKey;\n if (isMutationThunk(action)) {\n return action.meta.arg.fixedCacheKey ?? action.meta.requestId;\n }\n if (api.internalActions.removeQueryResult.match(action)) return action.payload.queryCacheKey;\n if (api.internalActions.removeMutationResult.match(action)) return getMutationCacheKey(action.payload);\n return "";\n }\n function handleNewKey(endpointName, originalArgs, queryCacheKey, mwApi, requestId) {\n const endpointDefinition = context.endpointDefinitions[endpointName];\n const onCacheEntryAdded = endpointDefinition?.onCacheEntryAdded;\n if (!onCacheEntryAdded) return;\n const lifecycle = {};\n const cacheEntryRemoved = new Promise((resolve) => {\n lifecycle.cacheEntryRemoved = resolve;\n });\n const cacheDataLoaded = Promise.race([new Promise((resolve) => {\n lifecycle.valueResolved = resolve;\n }), cacheEntryRemoved.then(() => {\n throw neverResolvedError;\n })]);\n cacheDataLoaded.catch(() => {\n });\n lifecycleMap[queryCacheKey] = lifecycle;\n const selector = api.endpoints[endpointName].select(endpointDefinition.type === "query" /* query */ ? originalArgs : queryCacheKey);\n const extra = mwApi.dispatch((_, __, extra2) => extra2);\n const lifecycleApi = {\n ...mwApi,\n getCacheEntry: () => selector(mwApi.getState()),\n requestId,\n extra,\n updateCachedData: endpointDefinition.type === "query" /* query */ ? (updateRecipe) => mwApi.dispatch(api.util.updateQueryData(endpointName, originalArgs, updateRecipe)) : void 0,\n cacheDataLoaded,\n cacheEntryRemoved\n };\n const runningHandler = onCacheEntryAdded(originalArgs, lifecycleApi);\n Promise.resolve(runningHandler).catch((e) => {\n if (e === neverResolvedError) return;\n throw e;\n });\n }\n return handler;\n};\n\n// src/query/core/buildMiddleware/devMiddleware.ts\nvar buildDevCheckHandler = ({\n api,\n context: {\n apiUid\n },\n reducerPath\n}) => {\n return (action, mwApi) => {\n if (api.util.resetApiState.match(action)) {\n mwApi.dispatch(api.internalActions.middlewareRegistered(apiUid));\n }\n if (typeof process !== "undefined" && "production" === "development") {}\n };\n};\n\n// src/query/core/buildMiddleware/invalidationByTags.ts\nvar buildInvalidationByTagsHandler = ({\n reducerPath,\n context,\n context: {\n endpointDefinitions\n },\n mutationThunk,\n queryThunk,\n api,\n assertTagType,\n refetchQuery,\n internalState\n}) => {\n const {\n removeQueryResult\n } = api.internalActions;\n const isThunkActionWithTags = isAnyOf(isFulfilled(mutationThunk), isRejectedWithValue(mutationThunk));\n const isQueryEnd = isAnyOf(isFulfilled(mutationThunk, queryThunk), isRejected(mutationThunk, queryThunk));\n let pendingTagInvalidations = [];\n const handler = (action, mwApi) => {\n if (isThunkActionWithTags(action)) {\n invalidateTags(calculateProvidedByThunk(action, "invalidatesTags", endpointDefinitions, assertTagType), mwApi);\n } else if (isQueryEnd(action)) {\n invalidateTags([], mwApi);\n } else if (api.util.invalidateTags.match(action)) {\n invalidateTags(calculateProvidedBy(action.payload, void 0, void 0, void 0, void 0, assertTagType), mwApi);\n }\n };\n function hasPendingRequests(state) {\n const {\n queries,\n mutations\n } = state;\n for (const cacheRecord of [queries, mutations]) {\n for (const key in cacheRecord) {\n if (cacheRecord[key]?.status === "pending" /* pending */) return true;\n }\n }\n return false;\n }\n function invalidateTags(newTags, mwApi) {\n const rootState = mwApi.getState();\n const state = rootState[reducerPath];\n pendingTagInvalidations.push(...newTags);\n if (state.config.invalidationBehavior === "delayed" && hasPendingRequests(state)) {\n return;\n }\n const tags = pendingTagInvalidations;\n pendingTagInvalidations = [];\n if (tags.length === 0) return;\n const toInvalidate = api.util.selectInvalidatedBy(rootState, tags);\n context.batch(() => {\n const valuesArray = Array.from(toInvalidate.values());\n for (const {\n queryCacheKey\n } of valuesArray) {\n const querySubState = state.queries[queryCacheKey];\n const subscriptionSubState = internalState.currentSubscriptions[queryCacheKey] ?? {};\n if (querySubState) {\n if (countObjectKeys(subscriptionSubState) === 0) {\n mwApi.dispatch(removeQueryResult({\n queryCacheKey\n }));\n } else if (querySubState.status !== "uninitialized" /* uninitialized */) {\n mwApi.dispatch(refetchQuery(querySubState));\n }\n }\n }\n });\n }\n return handler;\n};\n\n// src/query/core/buildMiddleware/polling.ts\nvar buildPollingHandler = ({\n reducerPath,\n queryThunk,\n api,\n refetchQuery,\n internalState\n}) => {\n const currentPolls = {};\n const handler = (action, mwApi) => {\n if (api.internalActions.updateSubscriptionOptions.match(action) || api.internalActions.unsubscribeQueryResult.match(action)) {\n updatePollingInterval(action.payload, mwApi);\n }\n if (queryThunk.pending.match(action) || queryThunk.rejected.match(action) && action.meta.condition) {\n updatePollingInterval(action.meta.arg, mwApi);\n }\n if (queryThunk.fulfilled.match(action) || queryThunk.rejected.match(action) && !action.meta.condition) {\n startNextPoll(action.meta.arg, mwApi);\n }\n if (api.util.resetApiState.match(action)) {\n clearPolls();\n }\n };\n function getCacheEntrySubscriptions(queryCacheKey, api2) {\n const state = api2.getState()[reducerPath];\n const querySubState = state.queries[queryCacheKey];\n const subscriptions = internalState.currentSubscriptions[queryCacheKey];\n if (!querySubState || querySubState.status === "uninitialized" /* uninitialized */) return;\n return subscriptions;\n }\n function startNextPoll({\n queryCacheKey\n }, api2) {\n const state = api2.getState()[reducerPath];\n const querySubState = state.queries[queryCacheKey];\n const subscriptions = internalState.currentSubscriptions[queryCacheKey];\n if (!querySubState || querySubState.status === "uninitialized" /* uninitialized */) return;\n const {\n lowestPollingInterval,\n skipPollingIfUnfocused\n } = findLowestPollingInterval(subscriptions);\n if (!Number.isFinite(lowestPollingInterval)) return;\n const currentPoll = currentPolls[queryCacheKey];\n if (currentPoll?.timeout) {\n clearTimeout(currentPoll.timeout);\n currentPoll.timeout = void 0;\n }\n const nextPollTimestamp = Date.now() + lowestPollingInterval;\n currentPolls[queryCacheKey] = {\n nextPollTimestamp,\n pollingInterval: lowestPollingInterval,\n timeout: setTimeout(() => {\n if (state.config.focused || !skipPollingIfUnfocused) {\n api2.dispatch(refetchQuery(querySubState));\n }\n startNextPoll({\n queryCacheKey\n }, api2);\n }, lowestPollingInterval)\n };\n }\n function updatePollingInterval({\n queryCacheKey\n }, api2) {\n const state = api2.getState()[reducerPath];\n const querySubState = state.queries[queryCacheKey];\n const subscriptions = internalState.currentSubscriptions[queryCacheKey];\n if (!querySubState || querySubState.status === "uninitialized" /* uninitialized */) {\n return;\n }\n const {\n lowestPollingInterval\n } = findLowestPollingInterval(subscriptions);\n if (!Number.isFinite(lowestPollingInterval)) {\n cleanupPollForKey(queryCacheKey);\n return;\n }\n const currentPoll = currentPolls[queryCacheKey];\n const nextPollTimestamp = Date.now() + lowestPollingInterval;\n if (!currentPoll || nextPollTimestamp < currentPoll.nextPollTimestamp) {\n startNextPoll({\n queryCacheKey\n }, api2);\n }\n }\n function cleanupPollForKey(key) {\n const existingPoll = currentPolls[key];\n if (existingPoll?.timeout) {\n clearTimeout(existingPoll.timeout);\n }\n delete currentPolls[key];\n }\n function clearPolls() {\n for (const key of Object.keys(currentPolls)) {\n cleanupPollForKey(key);\n }\n }\n function findLowestPollingInterval(subscribers = {}) {\n let skipPollingIfUnfocused = false;\n let lowestPollingInterval = Number.POSITIVE_INFINITY;\n for (let key in subscribers) {\n if (!!subscribers[key].pollingInterval) {\n lowestPollingInterval = Math.min(subscribers[key].pollingInterval, lowestPollingInterval);\n skipPollingIfUnfocused = subscribers[key].skipPollingIfUnfocused || skipPollingIfUnfocused;\n }\n }\n return {\n lowestPollingInterval,\n skipPollingIfUnfocused\n };\n }\n return handler;\n};\n\n// src/query/core/buildMiddleware/queryLifecycle.ts\nvar buildQueryLifecycleHandler = ({\n api,\n context,\n queryThunk,\n mutationThunk\n}) => {\n const isPendingThunk = isPending(queryThunk, mutationThunk);\n const isRejectedThunk = isRejected(queryThunk, mutationThunk);\n const isFullfilledThunk = isFulfilled(queryThunk, mutationThunk);\n const lifecycleMap = {};\n const handler = (action, mwApi) => {\n if (isPendingThunk(action)) {\n const {\n requestId,\n arg: {\n endpointName,\n originalArgs\n }\n } = action.meta;\n const endpointDefinition = context.endpointDefinitions[endpointName];\n const onQueryStarted = endpointDefinition?.onQueryStarted;\n if (onQueryStarted) {\n const lifecycle = {};\n const queryFulfilled = new Promise((resolve, reject) => {\n lifecycle.resolve = resolve;\n lifecycle.reject = reject;\n });\n queryFulfilled.catch(() => {\n });\n lifecycleMap[requestId] = lifecycle;\n const selector = api.endpoints[endpointName].select(endpointDefinition.type === "query" /* query */ ? originalArgs : requestId);\n const extra = mwApi.dispatch((_, __, extra2) => extra2);\n const lifecycleApi = {\n ...mwApi,\n getCacheEntry: () => selector(mwApi.getState()),\n requestId,\n extra,\n updateCachedData: endpointDefinition.type === "query" /* query */ ? (updateRecipe) => mwApi.dispatch(api.util.updateQueryData(endpointName, originalArgs, updateRecipe)) : void 0,\n queryFulfilled\n };\n onQueryStarted(originalArgs, lifecycleApi);\n }\n } else if (isFullfilledThunk(action)) {\n const {\n requestId,\n baseQueryMeta\n } = action.meta;\n lifecycleMap[requestId]?.resolve({\n data: action.payload,\n meta: baseQueryMeta\n });\n delete lifecycleMap[requestId];\n } else if (isRejectedThunk(action)) {\n const {\n requestId,\n rejectedWithValue,\n baseQueryMeta\n } = action.meta;\n lifecycleMap[requestId]?.reject({\n error: action.payload ?? action.error,\n isUnhandledError: !rejectedWithValue,\n meta: baseQueryMeta\n });\n delete lifecycleMap[requestId];\n }\n };\n return handler;\n};\n\n// src/query/core/buildMiddleware/windowEventHandling.ts\nvar buildWindowEventHandler = ({\n reducerPath,\n context,\n api,\n refetchQuery,\n internalState\n}) => {\n const {\n removeQueryResult\n } = api.internalActions;\n const handler = (action, mwApi) => {\n if (onFocus.match(action)) {\n refetchValidQueries(mwApi, "refetchOnFocus");\n }\n if (onOnline.match(action)) {\n refetchValidQueries(mwApi, "refetchOnReconnect");\n }\n };\n function refetchValidQueries(api2, type) {\n const state = api2.getState()[reducerPath];\n const queries = state.queries;\n const subscriptions = internalState.currentSubscriptions;\n context.batch(() => {\n for (const queryCacheKey of Object.keys(subscriptions)) {\n const querySubState = queries[queryCacheKey];\n const subscriptionSubState = subscriptions[queryCacheKey];\n if (!subscriptionSubState || !querySubState) continue;\n const shouldRefetch = Object.values(subscriptionSubState).some((sub) => sub[type] === true) || Object.values(subscriptionSubState).every((sub) => sub[type] === void 0) && state.config[type];\n if (shouldRefetch) {\n if (countObjectKeys(subscriptionSubState) === 0) {\n api2.dispatch(removeQueryResult({\n queryCacheKey\n }));\n } else if (querySubState.status !== "uninitialized" /* uninitialized */) {\n api2.dispatch(refetchQuery(querySubState));\n }\n }\n }\n });\n }\n return handler;\n};\n\n// src/query/core/buildMiddleware/index.ts\nfunction buildMiddleware(input) {\n const {\n reducerPath,\n queryThunk,\n api,\n context\n } = input;\n const {\n apiUid\n } = context;\n const actions = {\n invalidateTags: createAction(`${reducerPath}/invalidateTags`)\n };\n const isThisApiSliceAction = (action) => action.type.startsWith(`${reducerPath}/`);\n const handlerBuilders = [buildDevCheckHandler, buildCacheCollectionHandler, buildInvalidationByTagsHandler, buildPollingHandler, buildCacheLifecycleHandler, buildQueryLifecycleHandler];\n const middleware = (mwApi) => {\n let initialized2 = false;\n const internalState = {\n currentSubscriptions: {}\n };\n const builderArgs = {\n ...input,\n internalState,\n refetchQuery,\n isThisApiSliceAction\n };\n const handlers = handlerBuilders.map((build) => build(builderArgs));\n const batchedActionsHandler = buildBatchedActionsHandler(builderArgs);\n const windowEventsHandler = buildWindowEventHandler(builderArgs);\n return (next) => {\n return (action) => {\n if (!redux_isAction(action)) {\n return next(action);\n }\n if (!initialized2) {\n initialized2 = true;\n mwApi.dispatch(api.internalActions.middlewareRegistered(apiUid));\n }\n const mwApiWithNext = {\n ...mwApi,\n next\n };\n const stateBefore = mwApi.getState();\n const [actionShouldContinue, internalProbeResult] = batchedActionsHandler(action, mwApiWithNext, stateBefore);\n let res;\n if (actionShouldContinue) {\n res = next(action);\n } else {\n res = internalProbeResult;\n }\n if (!!mwApi.getState()[reducerPath]) {\n windowEventsHandler(action, mwApiWithNext, stateBefore);\n if (isThisApiSliceAction(action) || context.hasRehydrationInfo(action)) {\n for (const handler of handlers) {\n handler(action, mwApiWithNext, stateBefore);\n }\n }\n }\n return res;\n };\n };\n };\n return {\n middleware,\n actions\n };\n function refetchQuery(querySubState) {\n return input.api.endpoints[querySubState.endpointName].initiate(querySubState.originalArgs, {\n subscribe: false,\n forceRefetch: true\n });\n }\n}\n\n// src/query/core/module.ts\nvar coreModuleName = /* @__PURE__ */ Symbol();\nvar coreModule = ({\n createSelector: createSelector2 = createSelector\n} = {}) => ({\n name: coreModuleName,\n init(api, {\n baseQuery,\n tagTypes,\n reducerPath,\n serializeQueryArgs,\n keepUnusedDataFor,\n refetchOnMountOrArgChange,\n refetchOnFocus,\n refetchOnReconnect,\n invalidationBehavior\n }, context) {\n enablePatches();\n assertCast(serializeQueryArgs);\n const assertTagType = (tag) => {\n if (typeof process !== "undefined" && "production" === "development") {}\n return tag;\n };\n Object.assign(api, {\n reducerPath,\n endpoints: {},\n internalActions: {\n onOnline,\n onOffline,\n onFocus,\n onFocusLost\n },\n util: {}\n });\n const selectors = buildSelectors({\n serializeQueryArgs,\n reducerPath,\n createSelector: createSelector2\n });\n const {\n selectInvalidatedBy,\n selectCachedArgsForQuery,\n buildQuerySelector,\n buildInfiniteQuerySelector,\n buildMutationSelector\n } = selectors;\n safeAssign(api.util, {\n selectInvalidatedBy,\n selectCachedArgsForQuery\n });\n const {\n queryThunk,\n infiniteQueryThunk,\n mutationThunk,\n patchQueryData,\n updateQueryData,\n upsertQueryData,\n prefetch,\n buildMatchThunkActions\n } = buildThunks({\n baseQuery,\n reducerPath,\n context,\n api,\n serializeQueryArgs,\n assertTagType,\n selectors\n });\n const {\n reducer,\n actions: sliceActions\n } = buildSlice({\n context,\n queryThunk,\n infiniteQueryThunk,\n mutationThunk,\n serializeQueryArgs,\n reducerPath,\n assertTagType,\n config: {\n refetchOnFocus,\n refetchOnReconnect,\n refetchOnMountOrArgChange,\n keepUnusedDataFor,\n reducerPath,\n invalidationBehavior\n }\n });\n safeAssign(api.util, {\n patchQueryData,\n updateQueryData,\n upsertQueryData,\n prefetch,\n resetApiState: sliceActions.resetApiState,\n upsertQueryEntries: sliceActions.cacheEntriesUpserted\n });\n safeAssign(api.internalActions, sliceActions);\n const {\n middleware,\n actions: middlewareActions\n } = buildMiddleware({\n reducerPath,\n context,\n queryThunk,\n mutationThunk,\n infiniteQueryThunk,\n api,\n assertTagType,\n selectors\n });\n safeAssign(api.util, middlewareActions);\n safeAssign(api, {\n reducer,\n middleware\n });\n const {\n buildInitiateQuery,\n buildInitiateInfiniteQuery,\n buildInitiateMutation,\n getRunningMutationThunk,\n getRunningMutationsThunk,\n getRunningQueriesThunk,\n getRunningQueryThunk\n } = buildInitiate({\n queryThunk,\n mutationThunk,\n infiniteQueryThunk,\n api,\n serializeQueryArgs,\n context\n });\n safeAssign(api.util, {\n getRunningMutationThunk,\n getRunningMutationsThunk,\n getRunningQueryThunk,\n getRunningQueriesThunk\n });\n return {\n name: coreModuleName,\n injectEndpoint(endpointName, definition) {\n const anyApi = api;\n const endpoint = anyApi.endpoints[endpointName] ??= {};\n if (isQueryDefinition(definition)) {\n safeAssign(endpoint, {\n name: endpointName,\n select: buildQuerySelector(endpointName, definition),\n initiate: buildInitiateQuery(endpointName, definition)\n }, buildMatchThunkActions(queryThunk, endpointName));\n }\n if (isMutationDefinition(definition)) {\n safeAssign(endpoint, {\n name: endpointName,\n select: buildMutationSelector(),\n initiate: buildInitiateMutation(endpointName)\n }, buildMatchThunkActions(mutationThunk, endpointName));\n }\n if (isInfiniteQueryDefinition(definition)) {\n safeAssign(endpoint, {\n name: endpointName,\n select: buildInfiniteQuerySelector(endpointName, definition),\n initiate: buildInitiateInfiniteQuery(endpointName, definition)\n }, buildMatchThunkActions(queryThunk, endpointName));\n }\n }\n };\n }\n});\n\n// src/query/core/index.ts\nvar createApi = /* @__PURE__ */ buildCreateApi(coreModule());\n\n//# sourceMappingURL=rtk-query.modern.mjs.map\n;// ./node_modules/@forgerock/javascript-sdk/dist/device-client/services/index.js\n\nconst services_c = ({ baseUrl: o, realmPath: r }) => createApi({\n reducerPath: "deviceClient",\n baseQuery: fetchBaseQuery({\n credentials: "include",\n prepareHeaders: (t) => (t.set("Content-Type", "application/json"), t.set("Accept", "application/json"), t.set("x-requested-with", "forgerock-sdk"), t.set("x-requested-platform", "javascript"), t),\n baseUrl: o\n }),\n endpoints: (t) => ({\n // oath endpoints\n getOAthDevices: t.query({\n query: ({ realm: e = r, userId: s }) => `json/realms/${e}/users/${s}/devices/2fa/oath?_queryFilter=true`\n }),\n deleteOathDevice: t.mutation({\n query: ({ realm: e = r, userId: s, device: u }) => ({\n method: "DELETE",\n url: `json/realms/${e}/users/${s}/devices/2fa/oath/${u.uuid}`,\n body: u\n })\n }),\n // push device\n getPushDevices: t.query({\n query: ({ realm: e = r, userId: s }) => `/json/realms/${e}/users/${s}/devices/2fa/push?_queryFilter=true`\n }),\n deletePushDevice: t.mutation({\n query: ({ realm: e = r, userId: s, device: u }) => ({\n url: `/json/realms/${e}/users/${s}/devices/2fa/push/${u.uuid}`,\n method: "DELETE",\n body: {}\n })\n }),\n // webauthn devices\n getWebAuthnDevices: t.query({\n query: ({ realm: e = r, userId: s }) => `/json/realms/${e}/users/${s}/devices/2fa/webauthn?_queryFilter=true`\n }),\n updateWebAuthnDeviceName: t.mutation({\n query: ({ realm: e = r, userId: s, device: u }) => ({\n url: `/json/realms/${e}/users/${s}/devices/2fa/webauthn/${u.uuid}`,\n method: "PUT",\n body: u\n })\n }),\n deleteWebAuthnDeviceName: t.mutation({\n query: ({ realm: e = r, userId: s, device: u }) => ({\n url: `/json/realms/${e}/users/${s}/devices/2fa/webauthn/${u.uuid}`,\n method: "DELETE",\n body: u\n })\n }),\n getBoundDevices: t.mutation({\n query: ({ realm: e = r, userId: s }) => `/json/realms/${e}/users/${s}/devices/2fa/binding?_queryFilter=true`\n }),\n updateBoundDevice: t.mutation({\n query: ({ realm: e = r, userId: s, device: u }) => ({\n url: `/json/realms/root/realms/${e}/users/${s}/devices/2fa/binding/${u.uuid}`,\n method: "PUT",\n body: u\n })\n }),\n deleteBoundDevice: t.mutation({\n query: ({ realm: e = r, userId: s, device: u }) => ({\n url: `/json/realms/root/realms/${e}/users/${s}/devices/2fa/binding/${u.uuid}`,\n method: "DELETE",\n body: u\n })\n }),\n getDeviceProfiles: t.query({\n query: ({ realm: e = r, userId: s }) => `json/realms/${e}/users/${s}/devices/profile?_queryFilter=true`\n }),\n updateDeviceProfile: t.mutation({\n query: ({ realm: e = r, userId: s, device: u }) => ({\n url: `json/realms/${e}/users/${s}/devices/profile/${u.identifier}`,\n method: "PUT",\n body: u\n })\n }),\n deleteDeviceProfile: t.mutation({\n query: ({ realm: e = r, userId: s, device: u }) => ({\n url: `json/realms/${e}/users/${s}/devices/profile/${u.identifier}`,\n method: "DELETE",\n body: u\n })\n })\n })\n});\n\n\n;// ./node_modules/@forgerock/javascript-sdk/dist/device-client/device.store.js\n\n\nconst device_store_p = (n) => {\n const { middleware: i, reducerPath: o, reducer: s, endpoints: r } = services_c({\n baseUrl: n.serverConfig?.baseUrl ?? "",\n realmPath: n?.realmPath ?? ""\n }), a = configureStore({\n reducer: {\n [o]: s\n },\n middleware: (e) => e().concat(i)\n });\n return {\n /**\n * Oath device management methods.\n *\n * @type {OathManagement}\n */\n oath: {\n /**\n * Retrieves Oath devices based on the specified query.\n *\n * @async\n * @function get\n * @param {RetrieveOathQuery} query - The query used to retrieve Oath devices.\n * @returns {Promise} - A promise that resolves to the retrieved data or an error object if the response is not valid.\n */\n get: async function(e) {\n try {\n const t = await a.dispatch(r.getOAthDevices.initiate(e));\n if (!t || !t.data || !t.data.result)\n throw new Error("response did not contain data");\n return t.data.result;\n } catch (t) {\n return { error: t };\n }\n },\n /**\n * Deletes an Oath device based on the provided query and device information.\n *\n * @async\n * @function delete\n * @param {DeleteOathQuery & OathDevice} query - The query and device information used to delete the Oath device.\n * @returns {Promise} - A promise that resolves to the response data or an error object if the response is not valid.\n */\n delete: async function(e) {\n try {\n const t = await a.dispatch(r.deleteOathDevice.initiate(e));\n if (!t || !t.data)\n throw new Error("response did not contain data");\n return t.data;\n } catch (t) {\n return { error: t };\n }\n }\n },\n /**\n * Push device management methods.\n *\n * @type {PushManagement}\n */\n push: {\n /**\n * Retrieves Push devices based on the specified query.\n *\n * @async\n * @function get\n * @param {PushDeviceQuery} query - The query used to retrieve Push devices.\n * @returns {Promise} - A promise that resolves to the retrieved data or an error object if the response is not valid.\n */\n get: async function(e) {\n try {\n const t = await a.dispatch(r.getPushDevices.initiate(e));\n if (!t || !t.data || !t.data.result)\n throw new Error("response did not contain data");\n return t.data.result;\n } catch (t) {\n return { error: t };\n }\n },\n /**\n * Deletes a Push device based on the provided query.\n *\n * @async\n * @function delete\n * @param {DeleteDeviceQuery} query - The query used to delete the Push device.\n * @returns {Promise} - A promise that resolves to the response data or an error object if the response is not valid.\n */\n delete: async function(e) {\n try {\n const t = await a.dispatch(r.deletePushDevice.initiate(e));\n if (!t || !t.data)\n throw new Error("response did not contain data");\n return t.data;\n } catch (t) {\n return { error: t };\n }\n }\n },\n /**\n * WebAuthn device management methods.\n *\n * @type {WebAuthnManagement}\n */\n webAuthn: {\n /**\n * Retrieves WebAuthn devices based on the specified query.\n *\n * @async\n * @function get\n * @param {WebAuthnQuery} query - The query used to retrieve WebAuthn devices.\n * @returns {Promise} - A promise that resolves to the retrieved data or an error object if the response is not valid.\n */\n get: async function(e) {\n try {\n const t = await a.dispatch(r.getWebAuthnDevices.initiate(e));\n if (!t || !t.data || !t.data.result)\n throw new Error("response did not contain data");\n return t.data.result;\n } catch (t) {\n return { error: t };\n }\n },\n /**\n * Updates the name of a WebAuthn device based on the provided query and body.\n *\n * @async\n * @function update\n * @param {WebAuthnQueryWithUUID & { device: WebAuthnBody } } query - The query and body used to update the WebAuthn device name.\n * @returns {Promise} - A promise that resolves to the response data or an error object if the response is not valid.\n */\n update: async function(e) {\n try {\n const t = await a.dispatch(r.updateWebAuthnDeviceName.initiate(e));\n if (!t || !t.data)\n throw new Error("response did not contain data");\n return t.data;\n } catch (t) {\n return { error: t };\n }\n },\n /**\n * Deletes a WebAuthn device based on the provided query and body.\n *\n * @async\n * @function delete\n * @param {WebAuthnQueryWithUUID & { device: WebAuthnBody } } query - The query and body used to delete the WebAuthn device.\n * @returns {Promise} - A promise that resolves to the response data or an error object if the response is not valid.\n */\n delete: async function(e) {\n try {\n const t = await a.dispatch(r.deleteWebAuthnDeviceName.initiate(e));\n if (!t || !t.data)\n throw new Error("response did not contain data");\n return t.data;\n } catch (t) {\n return { error: t };\n }\n }\n },\n /**\n * Bound devices management methods.\n *\n * @type {BoundDevicesManagement}\n */\n bound: {\n /**\n * Retrieves bound devices based on the specified query.\n *\n * @async\n * @function get\n * @param {BoundDeviceQuery} query - The query used to retrieve bound devices.\n * @returns {Promise} - A promise that resolves to the retrieved data or an error object if the response is not valid.\n */\n get: async function(e) {\n try {\n const t = await a.dispatch(r.getBoundDevices.initiate(e));\n if (!t || !t.data || !t.data.result)\n throw new Error("response did not contain data");\n return t.data.result;\n } catch (t) {\n return { error: t };\n }\n },\n /**\n * Deletes a bound device based on the provided query.\n *\n * @async\n * @function delete\n * @param {BoundDeviceQuery} query - The query used to delete the bound device.\n * @returns {Promise} - A promise that resolves to the response data or an error object if the response is not valid.\n */\n delete: async function(e) {\n try {\n const t = await a.dispatch(r.deleteBoundDevice.initiate(e));\n if (!t || !t.data || !t.data.result)\n throw new Error("response did not contain data");\n return t.data.result;\n } catch (t) {\n return { error: t };\n }\n },\n /**\n * Updates the name of a bound device based on the provided query.\n *\n * @async\n * @function update\n * @param {BoundDeviceQuery} query - The query used to update the bound device name.\n * @returns {Promise} - A promise that resolves to the response data or an error object if the response is not valid.\n */\n update: async function(e) {\n try {\n const t = await a.dispatch(r.updateBoundDevice.initiate(e));\n if (!t || !t.data)\n throw new Error("response did not contain data");\n return t.data;\n } catch (t) {\n return { error: t };\n }\n }\n },\n profile: {\n /**\n * Get profile devices\n *\n * @async\n * @function update\n * @param {GetProfileDevice} query - The query used to get profile devices\n * @returns {Promise} - A promise that resolves to the response data or an error object if the response is not valid.\n */\n get: async function(e) {\n try {\n const t = await a.dispatch(r.getDeviceProfiles.initiate(e));\n if (!t || !t.data || !t.data.result)\n throw new Error("response did not contain data");\n return t.data.result;\n } catch (t) {\n return { error: t };\n }\n },\n /**\n * Get profile devices\n *\n * @async\n * @function update\n * @param {ProfileDevicesQuery} query - The query used to update a profile device\n * @returns {Promise} - A promise that resolves to the response data or or an error object if the response is not valid.\n */\n update: async function(e) {\n try {\n const t = await a.dispatch(r.updateDeviceProfile.initiate(e));\n if (!t || !t.data)\n throw new Error("response did not contain data");\n return t.data;\n } catch (t) {\n return { error: t };\n }\n },\n /**\n * Get profile devices\n *\n * @async\n * @function update\n * @param {ProfileDevicesQuery} query - The query used to update a profile device\n * @returns {Promise} - A promise that resolves to the response data or an error object if the response is not valid.\n */\n delete: async function(e) {\n try {\n const t = await a.dispatch(r.deleteDeviceProfile.initiate(e));\n if (!t || !t.data)\n throw new Error("response did not contain data");\n return t.data;\n } catch (t) {\n return { error: t };\n }\n }\n }\n };\n};\n\n\n;// ./node_modules/@forgerock/javascript-sdk/dist/fr-device/defaults.js\nconst defaults_o = [\n "userAgent",\n "appName",\n "appCodeName",\n "appVersion",\n "appMinorVersion",\n "buildID",\n "product",\n "productSub",\n "vendor",\n "vendorSub",\n "browserLanguage"\n], defaults_a = [\n "fontNames",\n "displayProps",\n "browserProps",\n "hardwareProps",\n "platformProps"\n], e = 3e4, defaults_r = {\n mac: ["Macintosh", "MacIntel", "MacPPC", "Mac68K"],\n windows: ["Win32", "Win64", "Windows", "WinCE"],\n ios: ["iPhone", "iPad", "iPod"]\n}, n = ["width", "height", "pixelDepth", "orientation.angle"], defaults_s = [\n "cursive",\n "monospace",\n "serif",\n "sans-serif",\n "fantasy",\n "Arial",\n "Arial Black",\n "Arial Narrow",\n "Arial Rounded MT Bold",\n "Bookman Old Style",\n "Bradley Hand ITC",\n "Century",\n "Century Gothic",\n "Comic Sans MS",\n "Courier",\n "Courier New",\n "Georgia",\n "Gentium",\n "Impact",\n "King",\n "Lucida Console",\n "Lalit",\n "Modena",\n "Monotype Corsiva",\n "Papyrus",\n "Tahoma",\n "TeX",\n "Times",\n "Times New Roman",\n "Trebuchet MS",\n "Verdana",\n "Verona"\n], defaults_i = [\n "cpuClass",\n "deviceMemory",\n "hardwareConcurrency",\n "maxTouchPoints",\n "oscpu"\n], defaults_t = ["language", "platform", "userLanguage", "systemLanguage"];\n\n\n;// ./node_modules/@forgerock/javascript-sdk/dist/fr-device/collector.js\nclass collector_p {\n /**\n * @method reduceToObject - goes one to two levels into source to collect attribute\n * @param props - array of strings; can use dot notation for two level lookup\n * @param src - source of attributes to check\n */\n // eslint-disable-next-line\n reduceToObject(n, t) {\n return n.reduce((e, o) => {\n if (o.includes(".")) {\n const l = o.split("."), d = l[0], i = l[1], s = t[d] && t[d][i];\n e[i] = s ?? "";\n } else\n e[o] = t[o] != null ? t[o] : null;\n return e;\n }, {});\n }\n /**\n * @method reduceToString - goes one level into source to collect attribute\n * @param props - array of strings\n * @param src - source of attributes to check\n */\n // eslint-disable-next-line\n reduceToString(n, t) {\n return n.reduce((e, o) => (e = `${e}${t[o].filename};`, e), "");\n }\n}\n\n\n;// ./node_modules/@forgerock/javascript-sdk/dist/util/logger.js\n\nclass logger_t {\n static enabled() {\n const { logLevel: o } = config_c.get();\n return {\n none: 0,\n error: 25,\n warn: 50,\n info: 75,\n debug: 100\n }[o];\n }\n static info(...o) {\n const { logger: e } = config_c.get();\n this.enabled() >= 50 && (e && e.info ? e.info(...o) : console.info(...o));\n }\n static warn(...o) {\n const { logger: e } = config_c.get();\n this.enabled() >= 50 && (e && e.warn ? e.warn(...o) : console.warn(...o));\n }\n static error(...o) {\n const { logger: e } = config_c.get();\n this.enabled() >= 25 && (e && e.error ? e.error(...o) : console.error(...o));\n }\n static log(...o) {\n const { logger: e } = config_c.get();\n this.enabled() >= 75 && (e && e.log ? e.log(...o) : console.log(...o));\n }\n}\n\n\n;// ./node_modules/@forgerock/javascript-sdk/dist/fr-device/index.js\n\n\n\n\nclass O extends collector_p {\n constructor(t) {\n super(), this.config = {\n fontNames: defaults_s,\n devicePlatforms: defaults_r,\n displayProps: n,\n browserProps: defaults_o,\n hardwareProps: defaults_i,\n platformProps: defaults_t\n }, t && Object.keys(t).forEach((e) => {\n if (!defaults_a.includes(e))\n throw new Error("Device profile configuration category does not exist.");\n this.config[e] = t[e];\n });\n }\n getBrowserMeta() {\n return typeof navigator > "u" ? (logger_t.warn("Cannot collect browser metadata. navigator is not defined."), {}) : this.reduceToObject(this.config.browserProps, navigator);\n }\n getBrowserPluginsNames() {\n return typeof navigator < "u" && navigator.plugins ? this.reduceToString(Object.keys(navigator.plugins), navigator.plugins) : (logger_t.warn("Cannot collect browser plugin information. navigator.plugins is not defined."), "");\n }\n getDeviceName() {\n if (typeof navigator > "u")\n return logger_t.warn("Cannot collect device name. navigator is not defined."), "";\n const t = navigator.userAgent, e = navigator.platform;\n switch (!0) {\n case this.config.devicePlatforms.mac.includes(e):\n return "Mac (Browser)";\n case this.config.devicePlatforms.ios.includes(e):\n return `${e} (Browser)`;\n case this.config.devicePlatforms.windows.includes(e):\n return "Windows (Browser)";\n case (/Android/.test(e) || /Android/.test(t)):\n return "Android (Browser)";\n case (/CrOS/.test(t) || /Chromebook/.test(t)):\n return "Chrome OS (Browser)";\n case /Linux/.test(e):\n return "Linux (Browser)";\n default:\n return `${e || "Unknown"} (Browser)`;\n }\n }\n getDisplayMeta() {\n return typeof screen > "u" ? (logger_t.warn("Cannot collect screen information. screen is not defined."), {}) : this.reduceToObject(this.config.displayProps, screen);\n }\n getHardwareMeta() {\n return typeof navigator > "u" ? (logger_t.warn("Cannot collect OS metadata. Navigator is not defined."), {}) : this.reduceToObject(this.config.hardwareProps, navigator);\n }\n getIdentifier() {\n const t = `${config_c.get().prefix}-DeviceID`;\n if (!(typeof globalThis.crypto < "u" && globalThis.crypto.getRandomValues))\n return logger_t.warn("Cannot generate profile ID. Crypto and/or getRandomValues is not supported."), "";\n if (!localStorage)\n return logger_t.warn("Cannot store profile ID. localStorage is not supported."), "";\n let e = localStorage.getItem(t);\n return e || (e = globalThis.crypto.getRandomValues(new Uint32Array(3)).join("-"), localStorage.setItem(t, e)), e;\n }\n getInstalledFonts() {\n if (typeof document > "u")\n return logger_t.warn("Cannot collect font data. Global document object is undefined."), "";\n const t = document.createElement("canvas");\n if (!t)\n return logger_t.warn("Cannot collect font data. Browser does not support canvas element"), "";\n const e = t.getContext && t.getContext("2d");\n if (!e)\n return logger_t.warn("Cannot collect font data. Browser does not support 2d canvas context"), "";\n const o = "abcdefghi0123456789";\n e.font = "72px Comic Sans";\n const i = e.measureText(o).width;\n return this.config.fontNames.reduce((r, a) => (e.font = `72px ${a}, Comic Sans`, e.measureText(o).width !== i && (r = `${r}${a};`), r), "");\n }\n async getLocationCoordinates() {\n return typeof navigator < "u" && navigator.geolocation ? new Promise(async (t) => {\n navigator.geolocation.getCurrentPosition(\n (e) => t({\n latitude: e.coords.latitude,\n longitude: e.coords.longitude\n }),\n (e) => {\n logger_t.warn(\n "Cannot collect geolocation information. " + e.code + ": " + e.message\n ), t({});\n },\n {\n enableHighAccuracy: !0,\n timeout: e,\n maximumAge: 0\n }\n );\n }) : (logger_t.warn(\n "Cannot collect geolocation information. navigator.geolocation is not defined."\n ), Promise.resolve({}));\n }\n getOSMeta() {\n return typeof navigator > "u" ? (logger_t.warn("Cannot collect OS metadata. navigator is not defined."), {}) : this.reduceToObject(this.config.platformProps, navigator);\n }\n async getProfile({ location: t, metadata: e }) {\n const o = {\n identifier: this.getIdentifier()\n };\n return e && (o.metadata = {\n hardware: {\n ...this.getHardwareMeta(),\n display: this.getDisplayMeta()\n },\n browser: {\n ...this.getBrowserMeta(),\n plugins: this.getBrowserPluginsNames()\n },\n platform: {\n ...this.getOSMeta(),\n deviceName: this.getDeviceName(),\n fonts: this.getInstalledFonts(),\n timezone: this.getTimezoneOffset()\n }\n }), t && (o.location = await this.getLocationCoordinates()), o;\n }\n getTimezoneOffset() {\n try {\n return (/* @__PURE__ */ new Date()).getTimezoneOffset();\n } catch {\n return logger_t.warn("Cannot collect timezone information. getTimezoneOffset is not defined."), null;\n }\n }\n}\n\n\n;// ./node_modules/@forgerock/javascript-sdk/dist/fr-qr-code/index.js\n\nclass fr_qr_code_i {\n /**\n * @method isQRCodeStep - determines if step contains QR Code callbacks\n * @param {FRStep} step - step object from AM response\n * @returns {boolean}\n */\n static isQRCodeStep(t) {\n const e = t.getCallbacksOfType(enums_l.HiddenValueCallback);\n return e.length === 0 ? !1 : !!this.getQRCodeURICb(e);\n }\n /**\n * @method getQRCodeData - gets the necessary information from the QR Code callbacks\n * @param {FRStep} step - step object from AM response\n * @returns {QRCodeData}\n */\n static getQRCodeData(t) {\n const e = t.getCallbacksOfType(enums_l.HiddenValueCallback);\n if (e.length === 0)\n throw new Error(\n "QR Code step must contain a HiddenValueCallback. Use `FRQRCode.isQRCodeStep` to guard."\n );\n const a = this.getQRCodeURICb(e), s = a ? a.getOutputValue("value") : "", o = typeof s == "string" && s.includes("otpauth://") ? "otp" : "push", l = t.getCallbacksOfType(enums_l.TextOutputCallback).find((n) => n.getMessageType() !== "4");\n return {\n message: l ? l.getMessage() : "",\n use: o,\n uri: typeof s == "string" ? s : ""\n };\n }\n static getQRCodeURICb(t) {\n return t.find((e) => {\n const a = e.getOutputValue("value");\n return typeof a == "string" ? a?.includes("otpauth://") || a?.includes("pushauth://") : !1;\n });\n }\n}\n\n\n;// ./node_modules/@forgerock/javascript-sdk/dist/fr-recovery-codes/script-parser.js\nfunction script_parser_t(e) {\n const r = e.match(/\\s[\\w\\W]"([\\w]*)\\\\/g);\n return Array.isArray(r) && r.map((s) => {\n const a = s.match(/"([\\w]*)\\\\/);\n return Array.isArray(a) ? a[1] : "";\n }) || [];\n}\nfunction script_parser_o(e) {\n return e?.match(/\\s*.*<\\/em>/g)?.[0]?.replace("", "")?.replace("", "") ?? "New Security Key";\n}\n\n\n;// ./node_modules/@forgerock/javascript-sdk/dist/fr-recovery-codes/index.js\n\n\nclass fr_recovery_codes_p {\n static getDeviceName(e) {\n const t = this.getDisplayCallback(e)?.getOutputByName("message", "") ?? "";\n return script_parser_o(t);\n }\n /**\n * Retrieves the recovery codes by parsing the JavaScript message text in callback.\n *\n * @param step The step to evaluate\n * @return Recovery Code values in array\n */\n static getCodes(e) {\n const t = this.getDisplayCallback(e)?.getOutputByName("message", "");\n return script_parser_t(t || "");\n }\n /**\n * Determines if the given step is a Display Recovery Codes step.\n *\n * @param step The step to evaluate\n * @return Is this step a Display Recovery Codes step\n */\n static isDisplayStep(e) {\n return !!this.getDisplayCallback(e);\n }\n /**\n * Gets the recovery codes step.\n *\n * @param step The step to evaluate\n * @return gets the Display Recovery Codes\' callback\n */\n static getDisplayCallback(e) {\n return e.getCallbacksOfType(enums_l.TextOutputCallback).find((t) => {\n const a = t.getOutputByName("message", void 0);\n return a && (a.includes("Recovery Codes") || a.includes("recovery codes"));\n });\n }\n}\n\n\n;// ./node_modules/@forgerock/javascript-sdk/dist/token-storage/local-storage.js\n\nclass local_storage_n {\n /**\n * Retrieve tokens.\n */\n static async get(t) {\n const e = localStorage.getItem(`${config_c.get().prefix}-${t}`);\n if (e)\n try {\n return JSON.parse(e || "");\n } catch {\n throw new Error("Could not parse token object from localStorage");\n }\n }\n /**\n * Saves tokens.\n */\n static async set(t, e) {\n const o = JSON.stringify(e);\n localStorage.setItem(`${config_c.get().prefix}-${t}`, o);\n }\n /**\n * Removes stored tokens.\n */\n static async remove(t) {\n localStorage.removeItem(`${config_c.get().prefix}-${t}`);\n }\n}\n\n\n;// ./node_modules/@forgerock/javascript-sdk/dist/token-storage/session-storage.js\n\nclass session_storage_a {\n /**\n * Retrieve tokens.\n */\n static async get(e) {\n const t = sessionStorage.getItem(`${config_c.get().prefix}-${e}`);\n if (t)\n try {\n return JSON.parse(t || "");\n } catch {\n throw new Error("Could not parse token from sessionStorage");\n }\n }\n /**\n * Saves tokens.\n */\n static async set(e, t) {\n const s = JSON.stringify(t);\n sessionStorage.setItem(`${config_c.get().prefix}-${e}`, s);\n }\n /**\n * Removes stored tokens.\n */\n static async remove(e) {\n sessionStorage.removeItem(`${config_c.get().prefix}-${e}`);\n }\n}\n\n\n;// ./node_modules/@forgerock/javascript-sdk/dist/token-storage/index.js\n\n\n\n\nclass token_storage_d {\n /**\n * Gets stored tokens.\n */\n static async get() {\n const { clientId: t, tokenStore: e } = this.getClientConfig();\n if (e === "sessionStorage")\n return await session_storage_a.get(t);\n if (e === "localStorage")\n return await local_storage_n.get(t);\n if (e === "indexedDB")\n logger_t.warn("IndexedDB is not supported in this version.");\n else if (e && e.get)\n return await e.get(t);\n return await local_storage_n.get(t);\n }\n /**\n * Saves tokens.\n */\n static async set(t) {\n const { clientId: e, tokenStore: r } = this.getClientConfig();\n if (r === "sessionStorage")\n return await session_storage_a.set(e, t);\n if (r === "localStorage")\n return await local_storage_n.set(e, t);\n if (r === "indexedDB")\n logger_t.warn("IndexedDB is not supported in this version.");\n else if (r && r.set)\n return await r.set(e, t);\n return await local_storage_n.set(e, t);\n }\n /**\n * Removes stored tokens.\n */\n static async remove() {\n const { clientId: t, tokenStore: e } = this.getClientConfig();\n if (e === "sessionStorage")\n return await session_storage_a.remove(t);\n if (e === "localStorage")\n return await local_storage_n.remove(t);\n if (e === "indexedDB")\n logger_t.warn("IndexedDB is not supported in this version.");\n else if (e && e.remove)\n return await e.remove(t);\n return await local_storage_n.remove(t);\n }\n static getClientConfig() {\n const { clientId: t = "unconfiguredClient", tokenStore: e = "localStorage" } = config_c.get();\n return { clientId: t, tokenStore: e };\n }\n}\n\n\n;// ./node_modules/@forgerock/javascript-sdk/dist/util/http.js\nfunction http_o(t) {\n return t.ok || Math.floor(t.status / 100) === 4;\n}\n\n\n;// ./node_modules/@forgerock/javascript-sdk/dist/util/pkce.js\nclass pkce_c {\n /**\n * Creates a random state.\n */\n static createState() {\n return this.createRandomString(16);\n }\n /**\n * Creates a random verifier.\n */\n static createVerifier() {\n return this.createRandomString(32);\n }\n /**\n * Creates a SHA-256 hash of the verifier.\n *\n * @param verifier The verifier to hash\n */\n static async createChallenge(e) {\n const t = await this.sha256(e);\n return this.base64UrlEncode(t);\n }\n /**\n * Creates a base64 encoded, URL-friendly version of the specified array.\n *\n * @param array The array of numbers to encode\n */\n static base64UrlEncode(e) {\n const t = Array.prototype.slice.call(e);\n return btoa(String.fromCharCode.apply(null, t)).replace(/\\+/g, "-").replace(/\\//g, "_").replace(/=/g, "");\n }\n /**\n * Creates a SHA-256 hash of the specified string.\n *\n * @param value The string to hash\n */\n static async sha256(e) {\n const t = new TextEncoder().encode(e), a = await crypto.subtle.digest("SHA-256", t);\n return new Uint8Array(a);\n }\n /**\n * Creates a random string.\n *\n * @param size The number for entropy (default: 32)\n */\n static createRandomString(e = 32) {\n const t = new Uint8Array(e);\n return crypto.getRandomValues(t), btoa(t.join("")).replace(/[^a-zA-Z0-9]+/, "");\n }\n}\n\n\n;// ./node_modules/@forgerock/javascript-sdk/dist/oauth2-client/index.js\n\n\n\n\n\n\n\n\nconst A = {\n // AM error for consent requirement\n AuthenticationConsentRequired: "Authentication or consent required",\n // Ping federate consent requirement\n AuthenticationIsRequired: "Authentication is required.",\n // Manual iframe error\n AuthorizationTimeout: "Authorization timed out",\n // Chromium browser error\n FailedToFetch: "Failed to fetch",\n // Mozilla browser error\n NetworkError: "NetworkError when attempting to fetch resource.",\n // Webkit browser error\n CORSError: "Cross-origin redirection",\n // prompt=none errors\n InteractionNotAllowed: "The request requires some interaction that is not allowed.",\n // PingOne login error\n LoginRequired: "User authentication is required",\n RequestRequiresConsent: "The request requires consent."\n};\nclass b {\n static async createAuthorizeUrl(e) {\n const { clientId: r, middleware: s, redirectUri: o, scope: n } = config_c.get(e), t = {\n ...e.query,\n client_id: r,\n redirect_uri: o,\n response_type: e.responseType,\n scope: n,\n state: e.state,\n ...e.prompt ? { prompt: e.prompt } : {}\n };\n if (e.verifier) {\n const a = await pkce_c.createChallenge(e.verifier);\n t.code_challenge = a, t.code_challenge_method = "S256";\n }\n const i = f(\n {\n url: new URL(this.getUrl("authorize", t, e)),\n init: {}\n },\n { type: enums_e.Authorize }\n ), { url: c } = i(s);\n return c.toString();\n }\n /**\n * Calls the authorize URL with an iframe. If successful,\n * it returns the callback URL with authentication code,\n * optionally using PKCE.\n * Method renamed in v3.\n * Original Name: getAuthorizeUrl\n * New Name: getAuthCodeByIframe\n */\n static async getAuthCodeByIframe(e) {\n const r = await this.createAuthorizeUrl({ ...e, prompt: "none" }), { serverConfig: s } = config_c.get(e);\n return new Promise((o, n) => {\n const t = document.createElement("iframe"), i = () => {\n };\n let c = i, a = i, d = 0;\n a = () => {\n clearTimeout(d), t.removeEventListener("load", c), t.remove();\n }, c = () => {\n if (t.contentWindow) {\n const u = t.contentWindow.location.href;\n (this.containsAuthCode(u) || this.containsAuthError(u)) && (a(), o(u));\n }\n }, d = setTimeout(() => {\n a(), n(new Error(A.AuthorizationTimeout));\n }, s.timeout), t.style.display = "none", t.addEventListener("load", c), document.body.appendChild(t), t.src = r;\n });\n }\n /**\n * Exchanges an authorization code for OAuth tokens.\n */\n static async getOAuth2Tokens(e) {\n const { clientId: r, redirectUri: s } = config_c.get(e), o = {\n client_id: r,\n code: e.authorizationCode,\n grant_type: "authorization_code",\n redirect_uri: s\n };\n e.verifier && (o.code_verifier = e.verifier);\n const n = $(o), t = {\n body: n,\n headers: new Headers({\n "Content-Length": n.length.toString(),\n "Content-Type": "application/x-www-form-urlencoded"\n }),\n method: "POST"\n }, i = await this.request("accessToken", void 0, !1, t, e), c = await this.getBody(i);\n if (i.status !== 200) {\n const u = typeof c == "string" ? `Expected 200, received ${i.status}` : this.parseError(c);\n throw new Error(u);\n }\n const a = c;\n if (!a.access_token)\n throw new Error("Access token not found in response");\n let d;\n return a.expires_in && (d = Date.now() + a.expires_in * 1e3), {\n accessToken: a.access_token,\n idToken: a.id_token,\n refreshToken: a.refresh_token,\n tokenExpiry: d\n };\n }\n /**\n * Gets OIDC user information.\n */\n static async getUserInfo(e) {\n const r = await this.request("userInfo", void 0, !0, void 0, e);\n if (r.status !== 200)\n throw new Error(`Failed to get user info; received ${r.status}`);\n return await r.json();\n }\n /**\n * Invokes the OIDC end session endpoint.\n * Can result in a redirect to `/signoff` if using PingOne\n * It\'s best to explicitly provide the logout redirect URL in options\n *\n * @function endSession - call authorization server to end associated session\n * @param options {LogoutOptions} - an extension of ConfigOptions, but with two additional props\n * @param options.logoutRedirectUri {string} - the URL you want the AS to redirect to after signout\n * @param options.redirect {boolean} - to explicitly deactivate redirect, pass `false`\n */\n static async endSession(e) {\n const r = { ...e };\n delete r.redirect, delete r.logoutRedirectUri;\n const s = {}, o = await token_storage_d.get();\n s.id_token_hint = o && o.idToken || (e && "idToken" in e ? e.idToken : "");\n const n = await this.request("endSession", s, !0, void 0, r, {\n redirect: e?.redirect,\n logoutRedirectUri: e?.logoutRedirectUri\n });\n if (!http_o(n))\n throw new Error(`Failed to end session; received ${n.status}`);\n return n;\n }\n /**\n * Immediately revokes the stored access token.\n */\n static async revokeToken(e) {\n const { clientId: r } = config_c.get(e), s = await token_storage_d.get(), o = s && s.accessToken, n = {\n client_id: r\n };\n o && (n.token = o);\n const t = {\n body: $(n),\n credentials: "include",\n headers: new Headers({\n "Content-Type": "application/x-www-form-urlencoded"\n }),\n method: "POST"\n }, i = await this.request("revoke", void 0, !1, t, e);\n if (!http_o(i))\n throw new Error(`Failed to revoke token; received ${i.status}`);\n return i;\n }\n static async request(e, r, s, o, n, t) {\n const { redirectUri: i, middleware: c, serverConfig: a } = config_c.get(n), d = t?.logoutRedirectUri ? t.logoutRedirectUri : i, u = this.getUrl(e, r, n), g = (w) => {\n switch (w) {\n case "accessToken":\n return enums_e.ExchangeToken;\n case "endSession":\n return enums_e.EndSession;\n case "revoke":\n return enums_e.RevokeToken;\n default:\n return enums_e.UserInfo;\n }\n };\n if (o = o || {}, s) {\n const w = await token_storage_d.get(), y = w && w.accessToken;\n o.credentials = "include", o.headers = o.headers || new Headers(), o.headers.set("Authorization", `Bearer ${y}`);\n }\n const h = f(\n { url: new URL(u), init: o },\n { type: g(e) }\n )(c);\n return g(e) === enums_e.EndSession && // endSession action only\n t?.redirect === !0 ? (h.url.searchParams.append("post_logout_redirect_uri", d || ""), window.location.assign(h.url.toString()), new Response()) : g(e) === enums_e.EndSession && // endSession action only\n t?.redirect !== !1 && // Only `false` explicitly disables this behavior for rare edge cases\n // If we explicitly get a logout redirect URL, then that\'s enough of a hint to redirect\n // If we don\'t have that, let\'s see if they are calling the typical PingOne `/signoff` endpoint\n (t?.logoutRedirectUri || this.getUrl("endSession").includes("/as/signoff")) ? (h.url.searchParams.append("post_logout_redirect_uri", d || ""), window.location.assign(h.url.toString()), new Response()) : await timeout_T(fetch(h.url.toString(), h.init), a.timeout);\n }\n static containsAuthCode(e) {\n return !!e && /code=([^&]+)/.test(e);\n }\n static containsAuthError(e) {\n return !!e && /error=([^&]+)/.test(e);\n }\n static async getBody(e) {\n const r = e.headers.get("Content-Type");\n return r && r.indexOf("application/json") > -1 ? await e.json() : await e.text();\n }\n static parseError(e) {\n if (e) {\n if (e.error && e.error_description)\n return `${e.error}: ${e.error_description}`;\n if (e.code && e.message)\n return `${e.code}: ${e.message}`;\n }\n }\n static getUrl(e, r, s) {\n const { realmPath: o, serverConfig: n } = config_c.get(s), t = url_h(e, o, n.paths);\n let i = url_f(n.baseUrl, t);\n return r && (i += `?${$(r)}`), i;\n }\n}\n\n\n;// ./node_modules/@forgerock/javascript-sdk/dist/session-manager/index.js\n\n\n\n\n\n\n\nclass M {\n /**\n * Ends the current session.\n */\n static async logout(i) {\n const { middleware: s, platformHeader: a, realmPath: n, serverConfig: r } = config_c.get(i), d = {\n credentials: "include",\n headers: new Headers({\n "Accept-API-Version": "protocol=1.0,resource=2.0",\n "X-Requested-With": constants_E\n }),\n method: "POST"\n }, l = `${url_h("sessions", n, r.paths)}?_action=logout`, m = url_f(r.baseUrl, l), e = f(\n { url: new URL(m), init: d },\n { type: enums_e.Logout }\n )(s);\n a && (e.init.headers instanceof Headers ? e.init.headers.set("X-Requested-Platform", constants_o) : Array.isArray(e.init.headers) ? e.init.headers.push(["X-Requested-Platform", constants_o]) : e.init.headers ? e.init.headers["X-Requested-Platform"] = constants_o : e.init.headers = {\n "X-Requested-Platform": constants_o\n });\n const o = await timeout_T(fetch(e.url.toString(), e.init), r.timeout);\n if (!http_o(o))\n throw new Error(`Failed to log out; received ${o.status}`);\n return o;\n }\n}\n\n\n;// ./node_modules/@forgerock/javascript-sdk/dist/oauth2-client/state-pkce.js\n\nfunction state_pkce_a(e, t) {\n return `${t || "FR-SDK"}-authflow-${e}`;\n}\nfunction state_pkce_c(e) {\n const t = pkce_c.createVerifier(), r = pkce_c.createState(), o = state_pkce_a(e.clientId, e.prefix), s = {\n ...e,\n state: r,\n verifier: t\n };\n return [\n s,\n () => sessionStorage.setItem(o, JSON.stringify(s))\n ];\n}\nfunction state_pkce_u(e, t) {\n const r = state_pkce_a(e, t), o = sessionStorage.getItem(r);\n sessionStorage.removeItem(r);\n try {\n return JSON.parse(o);\n } catch {\n throw new Error("Stored values for Auth URL could not be parsed");\n }\n}\n\n\n;// ./node_modules/@forgerock/javascript-sdk/dist/token-manager/helpers.js\nfunction helpers_i(e, n) {\n return e && n ? n - e < Date.now() : !1;\n}\n\n\n;// ./node_modules/@forgerock/javascript-sdk/dist/oauth2-client/enums.js\nvar oauth2_client_enums_r = /* @__PURE__ */ ((o) => (o.Code = "code", o.Token = "token", o))(oauth2_client_enums_r || {});\n\n\n;// ./node_modules/@forgerock/javascript-sdk/dist/token-manager/index.js\n\n\n\n\n\n\n\n\nclass token_manager_f {\n /**\n * Token Manager class that provides high-level abstraction for Authorization Code flow,\n * PKCE value generation, token exchange and token storage.\n *\n * Supports both embedded authentication as well as external authentication via redirects\n *\n Example 1:\n \n ```js\n const tokens = forgerock.TokenManager.getTokens({\n forceRenew: true, // If you want to get new tokens, despite existing ones\n login: \'embedded\', // If user authentication is handled in-app\n serverConfig: {\n timeout: 5000,\n },\n });\n ```\n \n Example 2:\n \n ```js\n const tokens = forgerock.TokenManager.getTokens({\n forceRenew: false, // Will immediately return stored tokens, if they exist\n login: \'redirect\', // If user authentication is handled in external Web app\n });\n ```\n \n Example 3:\n \n ```js\n const tokens = forgerock.TokenManager.getTokens({\n query: {\n code: \'lFJQYdoQG1u7nUm8 ... \', // Authorization code from redirect URL\n state: \'MTY2NDkxNTQ2Nde3D ... \', // State from redirect URL\n },\n });\n ```\n */\n static async getTokens(r) {\n const { clientId: a, oauthThreshold: h, prefix: c } = config_c.get(r);\n if (!a)\n throw new Error("Client ID is required");\n const i = await token_storage_d.get();\n if (i && !r?.forceRenew && !r?.query?.code && !helpers_i(h, i.tokenExpiry))\n return i;\n if (i)\n try {\n await b.revokeToken(r), await token_manager_f.deleteTokens();\n } catch (e) {\n logger_t.warn("Existing tokens could not be revoked or deleted", e);\n }\n if (r?.query?.code && r?.query?.state) {\n const { state: e, verifier: n } = state_pkce_u(a, c);\n if (e === void 0 || n === void 0)\n throw new Error(\n "`state` and/or `verifier` not found in sessionStorage. Debugging: sessionStorage is not accessible in separate tabs."\n );\n return await this.tokenExchange(r, { state: e, verifier: n });\n }\n const o = Object.assign({}, r);\n delete o.forceRenew;\n const [s, l] = state_pkce_c({\n ...o,\n clientId: a,\n prefix: c,\n responseType: oauth2_client_enums_r.Code\n });\n try {\n const e = new URL(await b.getAuthCodeByIframe(s));\n if (e.searchParams.get("error"))\n throw Error(`${e.searchParams.get("error_description")}`);\n if (!e.searchParams.get("code"))\n throw Error(A.AuthenticationConsentRequired);\n const n = p(e.toString());\n r || (r = {}), r.query = n;\n } catch (e) {\n if (!(e instanceof Error) || r?.login !== "redirect" || A.AuthenticationIsRequired !== e.message && A.AuthenticationConsentRequired !== e.message && A.AuthorizationTimeout !== e.message && A.FailedToFetch !== e.message && A.NetworkError !== e.message && A.InteractionNotAllowed !== e.message && A.RequestRequiresConsent !== e.message && // Check for Ping Identity Login Required error\n // Long message, so just check substring\n !e.message.includes(A.LoginRequired) && // Safari has a very long error message, so we check for a substring\n !e.message.includes(A.CORSError))\n throw e;\n const n = await b.createAuthorizeUrl(s);\n return l(), location.assign(n);\n }\n return await this.tokenExchange(r, {\n state: s.state,\n verifier: s.verifier\n });\n }\n static async deleteTokens() {\n await token_storage_d.remove();\n }\n static async tokenExchange(r, a) {\n if (r.query?.state !== a.state)\n throw new Error("State mismatch");\n if (!r.query?.code || Array.isArray(r.query?.code))\n throw new Error("Failed to acquire authorization code");\n const h = r.query?.code, c = a.verifier, i = { ...r, authorizationCode: h, verifier: c }, o = await b.getOAuth2Tokens(i);\n if (!o || !o.accessToken)\n throw new Error("Unable to exchange authorization for tokens");\n try {\n await token_storage_d.set(o);\n } catch (s) {\n logger_t.error("Failed to store tokens", s);\n }\n return o;\n }\n}\n\n\n;// ./node_modules/@forgerock/javascript-sdk/dist/fr-user/index.js\n\n\n\n\n\nclass k {\n /**\n * Logs the user in with the specified step handler, acquires OAuth tokens, and retrieves\n * user profile. **Currently not implemented.**\n *\n * @typeparam T The type of user object expected\n * @param handler The function to invoke when handling authentication steps\n * @param options Configuration overrides\n */\n static async login(e, o) {\n throw logger_t.info(e, o), new Error("FRUser.login() not implemented");\n }\n /**\n * Ends the user\'s session and revokes OAuth tokens.\n *\n * @param options Configuration overrides\n */\n static async logout(e) {\n const o = { ...e };\n delete o.redirect;\n try {\n await M.logout(o);\n } catch {\n logger_t.warn("Session logout was not successful");\n }\n try {\n await b.revokeToken(o);\n } catch {\n logger_t.warn("OAuth revokeToken was not successful");\n }\n const n = await token_storage_d.get(), { idToken: a = "" } = n || {};\n await token_manager_f.deleteTokens();\n try {\n await b.endSession({ ...e, idToken: a });\n } catch {\n logger_t.warn("OAuth endSession was not successful");\n }\n }\n}\n\n\n;// ./node_modules/@forgerock/javascript-sdk/dist/fr-webauthn/enums.js\nvar enums_o = /* @__PURE__ */ ((r) => (r.Error = "ERROR", r.Unsupported = "unsupported", r))(enums_o || {}), enums_E = /* @__PURE__ */ ((r) => (r.AbortError = "AbortError", r.DataError = "DataError", r.ConstraintError = "ConstraintError", r.EncodingError = "EncodingError", r.InvalidError = "InvalidError", r.NetworkError = "NetworkError", r.NotAllowedError = "NotAllowedError", r.NotSupportedError = "NotSupportedError", r.SecurityError = "SecurityError", r.TimeoutError = "TimeoutError", r.UnknownError = "UnknownError", r))(enums_E || {}), enums_i = /* @__PURE__ */ ((r) => (r[r.None = 0] = "None", r[r.Authentication = 1] = "Authentication", r[r.Registration = 2] = "Registration", r))(enums_i || {});\n\n\n;// ./node_modules/@forgerock/javascript-sdk/dist/fr-webauthn/helpers.js\n\nfunction helpers_s(r) {\n return r || [];\n}\nfunction helpers_u(r) {\n const n = new Uint8Array(r);\n return new TextDecoder().decode(n);\n}\nfunction helpers_f(r) {\n return r ? r[1] : "";\n}\nfunction helpers_a(r) {\n try {\n return r.split("}").filter((e) => !!e && e !== "]").map((e) => {\n const t = helpers_c(e);\n return {\n id: new Int8Array(t).buffer,\n type: "public-key"\n };\n });\n } catch {\n const e = new Error("Transforming credential object to string failed");\n throw e.name = enums_E.EncodingError, e;\n }\n}\nfunction helpers_c(r) {\n const n = /new Int8Array\\((.+)\\)/.exec(r);\n return n === null || n.length < 2 ? [] : JSON.parse(n[1]);\n}\nfunction helpers_p(r) {\n if (Array.isArray(r))\n return r;\n if (typeof r == "string")\n return r && r[0] === "[" ? JSON.parse(r) : (r = r.replace(/(\\w+):/g, \'"$1":\'), JSON.parse(`[${r}]`));\n}\nfunction helpers_d(r) {\n return r.includes("rpId") ? r.replace(/rpId: "(.+)",/, "$1") : r.replace(/id: "(.+)",/, "$1");\n}\n\n\n;// ./node_modules/@forgerock/javascript-sdk/dist/fr-webauthn/script-parser.js\n\n\nfunction script_parser_T(t) {\n const s = new TextEncoder(), r = helpers_f(t.match(/attestation"{0,}:\\s{0,}"(\\w+)"/)), c = Number(helpers_f(t.match(/timeout"{0,}:\\s{0,}(\\d+)/))), l = helpers_f(\n t.match(/userVerification"{0,}:\\s{0,}"(\\w+)"/)\n ), i = helpers_f(\n t.match(/requireResidentKey"{0,}:\\s{0,}(\\w+)/)\n ), o = helpers_f(\n t.match(/authenticatorAttachment"{0,}:\\s{0,}"([\\w-]+)/)\n ), m = helpers_f(t.match(/rp"{0,}:\\s{0,}{([^}]+)}/)).trim(), a = helpers_f(m.match(/id"{0,}:\\s{0,}"([^"]*)"/)), w = helpers_f(m.match(/name"{0,}:\\s{0,}"([^"]*)"/)), n = helpers_f(t.match(/user"{0,}:\\s{0,}{([^]{0,})},/)).trim(), u = helpers_f(n.match(/id"{0,}:\\s{0,}Uint8Array.from\\("([^"]+)"/)), d = helpers_f(n.match(/name"{0,}:\\s{0,}"([\\d\\w._-]+)"/)), h = helpers_f(n.match(/displayName"{0,}:\\s{0,}"([\\d\\w\\s.@_-]+)"/)), p = helpers_f(\n // Capture the `pubKeyCredParams` without also matching `excludeCredentials` as well.\n // `excludeCredentials` values are very similar to this property, so we need to make sure\n // our last value doesn\'t end with "buffer", so we are only capturing objects that\n // end in a digit and possibly a space.\n t.match(/pubKeyCredParams"*:\\s*\\[([^]+\\d\\s*})\\s*]/)\n ).trim(), A = helpers_p(p);\n if (!A) {\n const b = new Error("Missing pubKeyCredParams property from registration options");\n throw b.name = enums_E.DataError, b;\n }\n const g = helpers_f(\n t.match(/excludeCredentials"{0,}:\\s{0,}\\[([^]+)\\s{0,}]/)\n ).trim(), f = helpers_a(g), C = helpers_s(\n t.match(/challenge"{0,}:\\s{0,}new\\s{0,}(Uint|Int)8Array\\(([^\\)]+)/)\n ), N = JSON.parse(C[2]), I = new Int8Array(N).buffer;\n return {\n attestation: r,\n authenticatorSelection: {\n userVerification: l,\n // Only include authenticatorAttachment prop if the value is truthy\n ...o && { authenticatorAttachment: o },\n // Only include requireResidentKey prop if the value is of string "true"\n ...i === "true" && {\n requireResidentKey: !!i\n }\n },\n challenge: I,\n ...f.length && { excludeCredentials: f },\n pubKeyCredParams: A,\n rp: {\n name: w,\n // only add key-value pair if truthy value is provided\n ...a && { id: a }\n },\n timeout: c,\n user: {\n displayName: h,\n id: s.encode(u),\n name: d\n }\n };\n}\nfunction script_parser_E(t) {\n let s, r;\n t.includes("acceptableCredentials") ? r = helpers_f(\n t.match(/acceptableCredentials"*\\s*=\\s*\\[([^]+)\\s*]/)\n ).trim() : r = helpers_f(\n t.match(/allowCredentials"{0,}:\\s{0,}\\[([^]+)\\s{0,}]/)\n ).trim();\n const c = helpers_f(\n t.match(/userVerification"{0,}:\\s{0,}"(\\w+)"/)\n );\n r && (s = (r.split("},") || [r]).map((n) => {\n const u = helpers_f(n.match(/type"{0,}:\\s{0,}"([\\w-]+)"/)), d = helpers_s(n.match(/id"{0,}:\\s{0,}new\\s{0,}(Uint|Int)8Array\\(([^\\)]+)/)), h = JSON.parse(d[2]), p = new Int8Array(h).buffer;\n return {\n type: u,\n id: p\n };\n }));\n const l = Number(helpers_f(t.match(/timeout"{0,}:\\s{0,}(\\d+)/))), i = helpers_s(\n t.match(/challenge"{0,}:\\s{0,}new\\s{0,}(Uint|Int)8Array\\(([^\\)]+)/)\n ), o = JSON.parse(i[2]), m = new Int8Array(o).buffer, a = helpers_f(t.match(/rpId"{0,}:\\s{0,}\\\\{0,}"([^"\\\\]*)/));\n return {\n challenge: m,\n timeout: l,\n // only add key-value pairs if the truthy values are provided\n ...s && { allowCredentials: s },\n ...c && { userVerification: c },\n ...a && { rpId: a }\n };\n}\n\n\n;// ./node_modules/@forgerock/javascript-sdk/dist/fr-webauthn/index.js\n\n\n\n\nclass fr_webauthn_T {\n /**\n * Determines if the given step is a WebAuthn step.\n *\n * @param step The step to evaluate\n * @return A WebAuthnStepType value\n */\n static getWebAuthnStepType(e) {\n const a = this.getOutcomeCallback(e), t = this.getMetadataCallback(e), i = this.getTextOutputCallback(e);\n return a && t ? t.getOutputValue("data")?.pubKeyCredParams ? enums_i.Registration : enums_i.Authentication : a && i ? i.getMessage().includes("pubKeyCredParams") ? enums_i.Registration : enums_i.Authentication : enums_i.None;\n }\n /**\n * Populates the step with the necessary authentication outcome.\n *\n * @param step The step that contains WebAuthn authentication data\n * @return The populated step\n */\n static async authenticate(e) {\n const { hiddenCallback: a, metadataCallback: t, textOutputCallback: i } = this.getCallbacks(e);\n if (a && (t || i)) {\n let o;\n try {\n let r;\n if (t) {\n const c = t.getOutputValue("data");\n r = this.createAuthenticationPublicKey(c);\n } else i && (r = script_parser_E(i.getMessage()));\n const n = await this.getAuthenticationCredential(r);\n o = this.getAuthenticationOutcome(n);\n } catch (r) {\n throw r instanceof Error ? r.name === enums_E.NotSupportedError ? (a.setInputValue(enums_o.Unsupported), r) : (a.setInputValue(`${enums_o.Error}::${r.name}:${r.message}`), r) : r;\n }\n return a.setInputValue(o), e;\n } else {\n const o = new Error("Incorrect callbacks for WebAuthn authentication");\n throw o.name = enums_E.DataError, a?.setInputValue(`${enums_o.Error}::${o.name}:${o.message}`), o;\n }\n }\n /**\n * Populates the step with the necessary registration outcome.\n *\n * @param step The step that contains WebAuthn registration data\n * @return The populated step\n */\n // Can make this generic const in Typescript 5.0 > and the name itself will\n // be inferred from the type so `typeof deviceName` will not just return string\n // but the actual name of the deviceName passed in as a generic.\n static async register(e, a) {\n const { hiddenCallback: t, metadataCallback: i, textOutputCallback: o } = this.getCallbacks(e);\n if (t && (i || o)) {\n let r;\n try {\n let n;\n if (i) {\n const c = i.getOutputValue("data");\n n = this.createRegistrationPublicKey(c);\n const l = await this.getRegistrationCredential(\n n\n );\n r = this.getRegistrationOutcome(l);\n } else if (o) {\n n = script_parser_T(o.getMessage());\n const c = await this.getRegistrationCredential(\n n\n );\n r = this.getRegistrationOutcome(c);\n } else\n throw new Error("No Credential found from Public Key");\n } catch (n) {\n throw n instanceof Error ? n.name === enums_E.NotSupportedError ? (t.setInputValue(enums_o.Unsupported), n) : (t.setInputValue(`${enums_o.Error}::${n.name}:${n.message}`), n) : n;\n }\n return t.setInputValue(\n a && a.length > 0 ? `${r}::${a}` : r\n ), e;\n } else {\n const r = new Error("Incorrect callbacks for WebAuthn registration");\n throw r.name = enums_E.DataError, t?.setInputValue(`${enums_o.Error}::${r.name}:${r.message}`), r;\n }\n }\n /**\n * Returns an object containing the two WebAuthn callbacks.\n *\n * @param step The step that contains WebAuthn callbacks\n * @return The WebAuthn callbacks\n */\n static getCallbacks(e) {\n const a = this.getOutcomeCallback(e), t = this.getMetadataCallback(e), i = this.getTextOutputCallback(e), o = {\n hiddenCallback: a\n };\n return t ? o.metadataCallback = t : i && (o.textOutputCallback = i), o;\n }\n /**\n * Returns the WebAuthn metadata callback containing data to pass to the browser\n * Web Authentication API.\n *\n * @param step The step that contains WebAuthn callbacks\n * @return The metadata callback\n */\n static getMetadataCallback(e) {\n return e.getCallbacksOfType(enums_l.MetadataCallback).find((a) => {\n const t = a.getOutputByName("data", void 0);\n return t && t.hasOwnProperty("relyingPartyId");\n });\n }\n /**\n * Returns the WebAuthn hidden value callback where the outcome should be populated.\n *\n * @param step The step that contains WebAuthn callbacks\n * @return The hidden value callback\n */\n static getOutcomeCallback(e) {\n return e.getCallbacksOfType(enums_l.HiddenValueCallback).find((a) => a.getOutputByName("id", "") === "webAuthnOutcome");\n }\n /**\n * Returns the WebAuthn metadata callback containing data to pass to the browser\n * Web Authentication API.\n *\n * @param step The step that contains WebAuthn callbacks\n * @return The metadata callback\n */\n static getTextOutputCallback(e) {\n return e.getCallbacksOfType(enums_l.TextOutputCallback).find((a) => {\n const t = a.getOutputByName("message", void 0);\n return t && t.includes("webAuthnOutcome");\n });\n }\n /**\n * Retrieves the credential from the browser Web Authentication API.\n *\n * @param options The public key options associated with the request\n * @return The credential\n */\n static async getAuthenticationCredential(e) {\n if (!window.PublicKeyCredential) {\n const t = new Error("PublicKeyCredential not supported by this browser");\n throw t.name = enums_E.NotSupportedError, t;\n }\n return await navigator.credentials.get({ publicKey: e });\n }\n /**\n * Converts an authentication credential into the outcome expected by OpenAM.\n *\n * @param credential The credential to convert\n * @return The outcome string\n */\n static getAuthenticationOutcome(e) {\n if (e === null) {\n const a = new Error("No credential generated from authentication");\n throw a.name = enums_E.UnknownError, a;\n }\n try {\n const a = helpers_u(e.response.clientDataJSON), t = e.response, i = new Int8Array(\n t.authenticatorData\n ).toString(), o = new Int8Array(t.signature).toString(), r = helpers_u(e.response.userHandle);\n let n = `${a}::${i}::${o}::${e.id}`;\n return r && (n = `${n}::${r}`), n;\n } catch {\n const t = new Error("Transforming credential object to string failed");\n throw t.name = enums_E.EncodingError, t;\n }\n }\n /**\n * Retrieves the credential from the browser Web Authentication API.\n *\n * @param options The public key options associated with the request\n * @return The credential\n */\n static async getRegistrationCredential(e) {\n if (!window.PublicKeyCredential) {\n const t = new Error("PublicKeyCredential not supported by this browser");\n throw t.name = enums_E.NotSupportedError, t;\n }\n return await navigator.credentials.create({\n publicKey: e\n });\n }\n /**\n * Converts a registration credential into the outcome expected by OpenAM.\n *\n * @param credential The credential to convert\n * @return The outcome string\n */\n static getRegistrationOutcome(e) {\n if (e === null) {\n const a = new Error("No credential generated from registration");\n throw a.name = enums_E.UnknownError, a;\n }\n try {\n const a = helpers_u(e.response.clientDataJSON), t = e.response, i = new Int8Array(\n t.attestationObject\n ).toString();\n return `${a}::${i}::${e.id}`;\n } catch {\n const t = new Error("Transforming credential object to string failed");\n throw t.name = enums_E.EncodingError, t;\n }\n }\n /**\n * Converts authentication tree metadata into options required by the browser\n * Web Authentication API.\n *\n * @param metadata The metadata provided in the authentication tree MetadataCallback\n * @return The Web Authentication API request options\n */\n static createAuthenticationPublicKey(e) {\n const {\n acceptableCredentials: a,\n allowCredentials: t,\n challenge: i,\n relyingPartyId: o,\n timeout: r,\n userVerification: n\n } = e, c = helpers_d(o), l = helpers_a(t || a || "");\n return {\n challenge: Uint8Array.from(atob(i), (p) => p.charCodeAt(0)).buffer,\n timeout: r,\n // only add key-value pair if proper value is provided\n ...l && { allowCredentials: l },\n ...n && { userVerification: n },\n ...c && { rpId: c }\n };\n }\n /**\n * Converts authentication tree metadata into options required by the browser\n * Web Authentication API.\n *\n * @param metadata The metadata provided in the authentication tree MetadataCallback\n * @return The Web Authentication API request options\n */\n static createRegistrationPublicKey(e) {\n const { pubKeyCredParams: a } = e, t = helpers_p(a);\n if (!t) {\n const u = new Error("Missing pubKeyCredParams property from registration options");\n throw u.name = enums_E.DataError, u;\n }\n const i = helpers_a(e.excludeCredentials), {\n attestationPreference: o,\n authenticatorSelection: r,\n challenge: n,\n relyingPartyId: c,\n relyingPartyName: l,\n timeout: p,\n userId: O,\n userName: m,\n displayName: y\n } = e, C = helpers_d(c), k = {\n name: l,\n ...C && { id: C }\n };\n return {\n attestation: o,\n authenticatorSelection: JSON.parse(r),\n challenge: Uint8Array.from(atob(n), (u) => u.charCodeAt(0)).buffer,\n ...i.length && { excludeCredentials: i },\n pubKeyCredParams: t,\n rp: k,\n timeout: p,\n user: {\n displayName: y || m,\n id: Int8Array.from(O.split("").map((u) => u.charCodeAt(0))),\n name: y || m\n }\n };\n }\n}\n\n\n;// ./node_modules/@forgerock/javascript-sdk/dist/http-client/helpers.js\n\n\nfunction P(e, t, n) {\n const i = new Headers(e.headers);\n return t.AuthenticateToServiceConditionAdvice ? i.set("X-Tree", t.AuthenticateToServiceConditionAdvice[0]) : t.TransactionConditionAdvice && i.set("X-TxID", t.TransactionConditionAdvice[0]), n && n.idToken && i.set("X-IdToken", n.idToken), i;\n}\nfunction W(e, t, n) {\n const i = new URL(e);\n if (t.TransactionConditionAdvice) {\n const c = t.TransactionConditionAdvice[0];\n i.searchParams.append("_txid", c);\n }\n return n && n.idToken && i.searchParams.append("_idtoken", n.idToken), i.toString();\n}\nfunction helpers_b(e, t, n, i, c) {\n const r = e.advices && e.advices.AuthenticateToServiceConditionAdvice, a = e.advices && e.advices.TransactionConditionAdvice;\n let d = "", s = "";\n r ? (d = r.reduce((o, u) => {\n const l = o && ` ${o}`;\n return o = `${u}${l}`, o;\n }, ""), s = "AuthenticateToServiceConditionAdvice") : a && (d = a.reduce((o, u) => {\n const l = o && ` ${o}`;\n return o = `${u}${l}`, o;\n }, ""), s = "TransactionConditionAdvice");\n const v = "", h = ``, T = `${d}`, f = `${v}${h}${T}`, p = url_h("authenticate", i, c), m = {\n authIndexType: "composite_advice",\n authIndexValue: f\n };\n return {\n init: {\n method: "POST",\n credentials: "include",\n headers: new Headers({\n "Accept-API-Version": "resource=2.0, protocol=1.0"\n })\n },\n timeout: n,\n url: url_f(t, `${p}?${$(m)}`)\n };\n}\nfunction H(e) {\n return (e.headers.get("Content-Type") || "").includes("html") && e.url.includes("composite_advice");\n}\nfunction L(e) {\n return (e.get("WWW-Authenticate") || "").includes("advices");\n}\nasync function helpers_w(e) {\n return !!(await e.clone().json()).advices;\n}\nfunction helpers_A(e) {\n const n = new URL(e).searchParams.get("authIndexValue") || "", i = new DOMParser(), c = decodeURIComponent(n), a = i.parseFromString(c, "application/xml").querySelector("Value");\n return a ? a.innerHTML : "";\n}\nfunction V(e) {\n const n = (e.split(",") || []).find((c) => c.includes("advices")) || "";\n let i;\n try {\n const c = n.match(/"(\\S+)"/), r = c ? c[1] : "", a = atob(r);\n return i = JSON.parse(a), i;\n } catch {\n logger_t.error("Could not parse advices value from WWW-Authenticate header");\n }\n return {};\n}\nfunction z(e) {\n return e.advices && e.advices.AuthenticateToServiceConditionAdvice ? Array.isArray(e.advices.AuthenticateToServiceConditionAdvice) && e.advices.AuthenticateToServiceConditionAdvice.length > 0 : e.advices && e.advices.TransactionConditionAdvice ? Array.isArray(e.advices.TransactionConditionAdvice) && e.advices.TransactionConditionAdvice.length > 0 : !1;\n}\nasync function F(e) {\n return !!(await e.clone().json()).callbacks;\n}\nfunction helpers_O(e, t) {\n return typeof t == "function" ? t(e) : e.status === 401;\n}\nfunction U(e) {\n const t = {};\n return e.url.includes("AuthenticateToServiceConditionAdvice") ? t.AuthenticateToServiceConditionAdvice = [helpers_A(e.url)] : t.TransactionConditionAdvice = [helpers_A(e.url)], {\n resource: "",\n actions: {},\n attributes: {},\n advices: t,\n ttl: 0\n };\n}\nfunction helpers_J(e) {\n const t = e.headers.get("WWW-Authenticate") || "", n = V(t);\n return {\n resource: "",\n actions: {},\n attributes: {},\n advices: n,\n ttl: 0\n };\n}\nasync function N(e) {\n return await e.json();\n}\n\n\n;// ./node_modules/@forgerock/javascript-sdk/dist/http-client/index.js\n\n\n\n\n\n\n\n\n\n\nclass D {\n /**\n * Makes a request using the specified options.\n *\n * @param options The options to use when making the request\n */\n static async request(e) {\n let r = await this._request(e, !1), t, a = !1;\n if (helpers_O(r, e.requiresNewToken) && (r = await this._request(e, !0)), e.authorization && e.authorization.handleStep)\n if (r.status === 401 && L(r.headers) ? (a = !0, t = helpers_J(r)) : r.redirected && H(r) ? (a = !0, t = U(r)) : await helpers_w(r) && (t = await N(r)), t && t.advices) {\n const { middleware: n, realmPath: i, serverConfig: o } = config_c.get(e.authorization.config), s = helpers_b(\n t,\n o.baseUrl,\n e.timeout,\n i,\n o.paths\n ), c = new URL(s.url), u = c.searchParams.get("authIndexType"), m = c.searchParams.get("authIndexValue"), w = f(\n {\n url: new URL(s.url),\n init: s.init\n },\n {\n type: enums_e.StartAuthenticate,\n payload: { type: u, tree: m }\n }\n ), { url: p, init: A } = w(n);\n s.url = p.toString(), s.init = A;\n const h = await this._request(s, !1);\n if (!await F(h))\n throw new Error(\'Error: Initial response from auth server not a "step".\');\n if (!z(t))\n throw new Error("Error: Transactional or Service Advice is empty.");\n await this.stepIterator(h, e.authorization.handleStep);\n const l = await token_storage_d.get();\n a ? e.url = W(e.url, t.advices, l) : e.init.headers = P(\n e.init,\n t.advices,\n l\n ), r = await this._request(e, !1);\n } else\n throw new Error("Error: Unable to process advice");\n return r;\n }\n static async setAuthHeaders(e, r) {\n let t = await token_storage_d.get();\n return t && t.accessToken && (t = await token_manager_f.getTokens({ forceRenew: r }), t && t.accessToken && e.set("Authorization", `Bearer ${t.accessToken}`)), e;\n }\n static async stepIterator(e, r) {\n const t = await e.json(), a = new fr_step_i(t);\n return new Promise(async (n, i) => {\n async function o(s) {\n const c = await r(s), u = await fr_auth_f.next(c, { tree: "", type: "" });\n u.type === enums_r.LoginSuccess ? n() : u.type === enums_r.LoginFailure ? i("Authentication tree failure.") : o(u);\n }\n o(a);\n });\n }\n static async _request(e, r) {\n const { url: t, init: a, timeout: n } = e;\n let i = new Headers(a.headers || {});\n return e.authorization && i.set("x-authenticate-response", "header"), e.bypassAuthentication || (i = await this.setAuthHeaders(i, r)), a.headers = i, timeout_T(fetch(t, a), n);\n }\n}\n\n\n;// ./node_modules/@forgerock/javascript-sdk/dist/user-manager/index.js\n\nclass user_manager_a {\n /**\n * Gets the current user\'s profile.\n */\n static getCurrentUser(e) {\n return b.getUserInfo(e);\n }\n}\n\n\n;// ./node_modules/@forgerock/javascript-sdk/dist/util/deferred.js\nclass deferred_t {\n constructor() {\n this.promise = new Promise((e, s) => {\n this.reject = s, this.resolve = e;\n });\n }\n}\n\n\n;// ./node_modules/@forgerock/javascript-sdk/dist/util/storage.js\nclass storage_r {\n constructor(e = !1) {\n this.storage = e ? localStorage : sessionStorage;\n }\n get(e) {\n const t = this.storage.getItem(e);\n if (t)\n return JSON.parse(t);\n }\n set(e, t) {\n this.storage.setItem(e, JSON.stringify(t));\n }\n remove(e) {\n this.storage.removeItem(e);\n }\n}\n\n\n;// ./node_modules/@forgerock/javascript-sdk/dist/index.js\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMjgwNzYuanMiLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBO0FBS0E7OztBQ0xBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBR0E7OztBQ2ZBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBR0E7OztBQ1RBO0FBR0E7OztBQ0hBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFJQTs7O0FDekNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFHQTs7O0FDaEVBO0FBSUE7OztBQ0pBO0FBQ0E7QUFDQTtBQUNBO0FBR0E7OztBQ05BO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBT0E7OztBQ3hDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBR0E7OztBQzFEQTtBQUlBOzs7QUNKQTtBQUdBOzs7QUNIQTtBQUNBO0FBQ0E7QUFHQTs7O0FDTEE7QUFDQTtBQUNBO0FBR0E7OztBQ0xBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFHQTs7O0FDcERBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBSUE7OztBQ3ZEQTtBQUdBOzs7QUNIQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUdBOzs7QUMxQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBR0E7OztBQzdCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUdBOzs7QUMzRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUdBOzs7QUNoRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBR0E7OztBQy9DQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBR0E7OztBQzFEQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFHQTs7O0FDbkNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUdBOzs7QUNYQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBR0E7OztBQzNDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFHQTs7O0FDakJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUdBOzs7QUN2QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBR0E7OztBQ25DQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBR0E7OztBQ2xDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBR0E7OztBQy9CQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFHQTs7O0FDdkJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUdBOzs7QUN2QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBR0E7OztBQ3JEQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFHQTs7O0FDakJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUdBOzs7QUMxQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBR0E7OztBQ3ZCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFHQTs7O0FDWEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFHQTs7O0FDcENBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUdBOzs7QUN2QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUdBOzs7QUMxREE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUdBOzs7QUMxREE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBR0E7OztBQ2hGQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFHQTs7O0FDakVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFHQTs7O0FDL0hBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBS0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBTUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQVdBO0FBQ0E7O0FDNVlBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUlBOzs7QUNmQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQStCQTtBQUNBO0FBS0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFZQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBcUJBO0FBQ0E7O0FDOXNDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQXdEQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFrREE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUF1QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBR0E7QUFDQTtBQUdBO0FBR0E7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFRQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFLQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBS0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUtBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFLQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFLQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFvREE7QUFDQTs7QUM1c0VBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQXVCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBVUE7QUFDQTs7QUN0dUJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBU0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBMEJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUlBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQU9BO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFHQTtBQUNBO0FBQ0E7QUFtQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBT0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUtBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFlQTtBQUNBOztBQ3RzRkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFHQTs7O0FDdkZBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUdBOzs7QUN6UkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQVVBOzs7QUN2RUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBR0E7OztBQzdCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBR0E7OztBQy9CQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFHQTs7O0FDbklBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUdBOzs7QUN0Q0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFJQTs7O0FDYkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBR0E7OztBQ3pDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUdBOzs7QUM5QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFHQTs7O0FDOUJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBR0E7OztBQ3pEQTtBQUNBO0FBQ0E7QUFHQTs7O0FDTEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUdBOzs7QUNwREE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUlBOzs7QUMxTkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUdBOzs7QUNsQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBSUE7OztBQzNCQTtBQUNBO0FBQ0E7QUFHQTs7O0FDTEE7QUFHQTs7O0FDSEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBR0E7OztBQ3ZIQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBR0E7OztBQzlDQTtBQUtBOzs7QUNMQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBU0E7OztBQzlDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFJQTs7O0FDcEZBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFLQTs7O0FDalJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQWVBOzs7QUM5R0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFHQTs7O0FDM0VBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUdBOzs7QUNYQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUdBOzs7QUNUQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUdBOzs7QUNsQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBdURBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vaXRnLW5leHRnZW4tZnJvbnRlbmQvLi9ub2RlX21vZHVsZXMvQGZvcmdlcm9jay9qYXZhc2NyaXB0LXNkay9kaXN0L2NvbmZpZy9jb25zdGFudHMuanM/NTZlNCIsIndlYnBhY2s6Ly9pdGctbmV4dGdlbi1mcm9udGVuZC8uL25vZGVfbW9kdWxlcy9AZm9yZ2Vyb2NrL2phdmFzY3JpcHQtc2RrL2Rpc3QvdXRpbC9taWRkbGV3YXJlLmpzPzgxNmMiLCJ3ZWJwYWNrOi8vaXRnLW5leHRnZW4tZnJvbnRlbmQvLi9ub2RlX21vZHVsZXMvQGZvcmdlcm9jay9qYXZhc2NyaXB0LXNkay9kaXN0L3V0aWwvdGltZW91dC5qcz8zYzZiIiwid2VicGFjazovL2l0Zy1uZXh0Z2VuLWZyb250ZW5kLy4vbm9kZV9tb2R1bGVzL0Bmb3JnZXJvY2svamF2YXNjcmlwdC1zZGsvZGlzdC9jb25maWcvZW51bXMuanM/YzlkMSIsIndlYnBhY2s6Ly9pdGctbmV4dGdlbi1mcm9udGVuZC8uL25vZGVfbW9kdWxlcy9AZm9yZ2Vyb2NrL2phdmFzY3JpcHQtc2RrL2Rpc3QvY29uZmlnL2hlbHBlcnMuanM/NDhmMyIsIndlYnBhY2s6Ly9pdGctbmV4dGdlbi1mcm9udGVuZC8uL25vZGVfbW9kdWxlcy9AZm9yZ2Vyb2NrL2phdmFzY3JpcHQtc2RrL2Rpc3QvY29uZmlnL2luZGV4LmpzPzYwNGMiLCJ3ZWJwYWNrOi8vaXRnLW5leHRnZW4tZnJvbnRlbmQvLi9ub2RlX21vZHVsZXMvQGZvcmdlcm9jay9qYXZhc2NyaXB0LXNkay9kaXN0L3NoYXJlZC9jb25zdGFudHMuanM/NjhiNCIsIndlYnBhY2s6Ly9pdGctbmV4dGdlbi1mcm9udGVuZC8uL25vZGVfbW9kdWxlcy9AZm9yZ2Vyb2NrL2phdmFzY3JpcHQtc2RrL2Rpc3QvdXRpbC9yZWFsbS5qcz9hN2ZmIiwid2VicGFjazovL2l0Zy1uZXh0Z2VuLWZyb250ZW5kLy4vbm9kZV9tb2R1bGVzL0Bmb3JnZXJvY2svamF2YXNjcmlwdC1zZGsvZGlzdC91dGlsL3VybC5qcz8yNWI2Iiwid2VicGFjazovL2l0Zy1uZXh0Z2VuLWZyb250ZW5kLy4vbm9kZV9tb2R1bGVzL0Bmb3JnZXJvY2svamF2YXNjcmlwdC1zZGsvZGlzdC9hdXRoL2luZGV4LmpzP2U2OTYiLCJ3ZWJwYWNrOi8vaXRnLW5leHRnZW4tZnJvbnRlbmQvLi9ub2RlX21vZHVsZXMvQGZvcmdlcm9jay9qYXZhc2NyaXB0LXNkay9kaXN0L2F1dGgvZW51bXMuanM/Njk1ZSIsIndlYnBhY2s6Ly9pdGctbmV4dGdlbi1mcm9udGVuZC8uL25vZGVfbW9kdWxlcy9AZm9yZ2Vyb2NrL2phdmFzY3JpcHQtc2RrL2Rpc3QvZnItcG9saWN5L2VudW1zLmpzP2U0ODkiLCJ3ZWJwYWNrOi8vaXRnLW5leHRnZW4tZnJvbnRlbmQvLi9ub2RlX21vZHVsZXMvQGZvcmdlcm9jay9qYXZhc2NyaXB0LXNkay9kaXN0L3V0aWwvc3RyaW5ncy5qcz9hMWUxIiwid2VicGFjazovL2l0Zy1uZXh0Z2VuLWZyb250ZW5kLy4vbm9kZV9tb2R1bGVzL0Bmb3JnZXJvY2svamF2YXNjcmlwdC1zZGsvZGlzdC9mci1wb2xpY3kvaGVscGVycy5qcz8wMjllIiwid2VicGFjazovL2l0Zy1uZXh0Z2VuLWZyb250ZW5kLy4vbm9kZV9tb2R1bGVzL0Bmb3JnZXJvY2svamF2YXNjcmlwdC1zZGsvZGlzdC9mci1wb2xpY3kvbWVzc2FnZS1jcmVhdG9yLmpzPzEzNmYiLCJ3ZWJwYWNrOi8vaXRnLW5leHRnZW4tZnJvbnRlbmQvLi9ub2RlX21vZHVsZXMvQGZvcmdlcm9jay9qYXZhc2NyaXB0LXNkay9kaXN0L2ZyLXBvbGljeS9pbmRleC5qcz8xZWVlIiwid2VicGFjazovL2l0Zy1uZXh0Z2VuLWZyb250ZW5kLy4vbm9kZV9tb2R1bGVzL0Bmb3JnZXJvY2svamF2YXNjcmlwdC1zZGsvZGlzdC9mci1hdXRoL2VudW1zLmpzP2VjYWMiLCJ3ZWJwYWNrOi8vaXRnLW5leHRnZW4tZnJvbnRlbmQvLi9ub2RlX21vZHVsZXMvQGZvcmdlcm9jay9qYXZhc2NyaXB0LXNkay9kaXN0L2ZyLWF1dGgvZnItbG9naW4tZmFpbHVyZS5qcz83NmFhIiwid2VicGFjazovL2l0Zy1uZXh0Z2VuLWZyb250ZW5kLy4vbm9kZV9tb2R1bGVzL0Bmb3JnZXJvY2svamF2YXNjcmlwdC1zZGsvZGlzdC9mci1hdXRoL2ZyLWxvZ2luLXN1Y2Nlc3MuanM/M2FkOCIsIndlYnBhY2s6Ly9pdGctbmV4dGdlbi1mcm9udGVuZC8uL25vZGVfbW9kdWxlcy9AZm9yZ2Vyb2NrL2phdmFzY3JpcHQtc2RrL2Rpc3QvZnItYXV0aC9jYWxsYmFja3MvaW5kZXguanM/NTdlYSIsIndlYnBhY2s6Ly9pdGctbmV4dGdlbi1mcm9udGVuZC8uL25vZGVfbW9kdWxlcy9AZm9yZ2Vyb2NrL2phdmFzY3JpcHQtc2RrL2Rpc3QvZnItYXV0aC9jYWxsYmFja3MvYXR0cmlidXRlLWlucHV0LWNhbGxiYWNrLmpzPzM0MGQiLCJ3ZWJwYWNrOi8vaXRnLW5leHRnZW4tZnJvbnRlbmQvLi9ub2RlX21vZHVsZXMvQGZvcmdlcm9jay9qYXZhc2NyaXB0LXNkay9kaXN0L2ZyLWF1dGgvY2FsbGJhY2tzL2Nob2ljZS1jYWxsYmFjay5qcz82YzhhIiwid2VicGFjazovL2l0Zy1uZXh0Z2VuLWZyb250ZW5kLy4vbm9kZV9tb2R1bGVzL0Bmb3JnZXJvY2svamF2YXNjcmlwdC1zZGsvZGlzdC9mci1hdXRoL2NhbGxiYWNrcy9jb25maXJtYXRpb24tY2FsbGJhY2suanM/NTFiYSIsIndlYnBhY2s6Ly9pdGctbmV4dGdlbi1mcm9udGVuZC8uL25vZGVfbW9kdWxlcy9AZm9yZ2Vyb2NrL2phdmFzY3JpcHQtc2RrL2Rpc3QvZnItYXV0aC9jYWxsYmFja3MvZGV2aWNlLXByb2ZpbGUtY2FsbGJhY2suanM/OTYxYSIsIndlYnBhY2s6Ly9pdGctbmV4dGdlbi1mcm9udGVuZC8uL25vZGVfbW9kdWxlcy9AZm9yZ2Vyb2NrL2phdmFzY3JpcHQtc2RrL2Rpc3QvZnItYXV0aC9jYWxsYmFja3MvaGlkZGVuLXZhbHVlLWNhbGxiYWNrLmpzP2E4YmMiLCJ3ZWJwYWNrOi8vaXRnLW5leHRnZW4tZnJvbnRlbmQvLi9ub2RlX21vZHVsZXMvQGZvcmdlcm9jay9qYXZhc2NyaXB0LXNkay9kaXN0L2ZyLWF1dGgvY2FsbGJhY2tzL2tiYS1jcmVhdGUtY2FsbGJhY2suanM/MTJjYiIsIndlYnBhY2s6Ly9pdGctbmV4dGdlbi1mcm9udGVuZC8uL25vZGVfbW9kdWxlcy9AZm9yZ2Vyb2NrL2phdmFzY3JpcHQtc2RrL2Rpc3QvZnItYXV0aC9jYWxsYmFja3MvbWV0YWRhdGEtY2FsbGJhY2suanM/MDBiMSIsIndlYnBhY2s6Ly9pdGctbmV4dGdlbi1mcm9udGVuZC8uL25vZGVfbW9kdWxlcy9AZm9yZ2Vyb2NrL2phdmFzY3JpcHQtc2RrL2Rpc3QvZnItYXV0aC9jYWxsYmFja3MvbmFtZS1jYWxsYmFjay5qcz9lZGZhIiwid2VicGFjazovL2l0Zy1uZXh0Z2VuLWZyb250ZW5kLy4vbm9kZV9tb2R1bGVzL0Bmb3JnZXJvY2svamF2YXNjcmlwdC1zZGsvZGlzdC9mci1hdXRoL2NhbGxiYWNrcy9wYXNzd29yZC1jYWxsYmFjay5qcz85ZjMwIiwid2VicGFjazovL2l0Zy1uZXh0Z2VuLWZyb250ZW5kLy4vbm9kZV9tb2R1bGVzL0Bmb3JnZXJvY2svamF2YXNjcmlwdC1zZGsvZGlzdC9mci1hdXRoL2NhbGxiYWNrcy9waW5nLXByb3RlY3QtZXZhbHVhdGlvbi1jYWxsYmFjay5qcz9lNTVlIiwid2VicGFjazovL2l0Zy1uZXh0Z2VuLWZyb250ZW5kLy4vbm9kZV9tb2R1bGVzL0Bmb3JnZXJvY2svamF2YXNjcmlwdC1zZGsvZGlzdC9mci1hdXRoL2NhbGxiYWNrcy9waW5nLXByb3RlY3QtaW5pdGlhbGl6ZS1jYWxsYmFjay5qcz80ZjJhIiwid2VicGFjazovL2l0Zy1uZXh0Z2VuLWZyb250ZW5kLy4vbm9kZV9tb2R1bGVzL0Bmb3JnZXJvY2svamF2YXNjcmlwdC1zZGsvZGlzdC9mci1hdXRoL2NhbGxiYWNrcy9wb2xsaW5nLXdhaXQtY2FsbGJhY2suanM/NWE0OCIsIndlYnBhY2s6Ly9pdGctbmV4dGdlbi1mcm9udGVuZC8uL25vZGVfbW9kdWxlcy9AZm9yZ2Vyb2NrL2phdmFzY3JpcHQtc2RrL2Rpc3QvZnItYXV0aC9jYWxsYmFja3MvcmVjYXB0Y2hhLWNhbGxiYWNrLmpzP2NjYWEiLCJ3ZWJwYWNrOi8vaXRnLW5leHRnZW4tZnJvbnRlbmQvLi9ub2RlX21vZHVsZXMvQGZvcmdlcm9jay9qYXZhc2NyaXB0LXNkay9kaXN0L2ZyLWF1dGgvY2FsbGJhY2tzL3JlY2FwdGNoYS1lbnRlcnByaXNlLWNhbGxiYWNrLmpzPzllYzkiLCJ3ZWJwYWNrOi8vaXRnLW5leHRnZW4tZnJvbnRlbmQvLi9ub2RlX21vZHVsZXMvQGZvcmdlcm9jay9qYXZhc2NyaXB0LXNkay9kaXN0L2ZyLWF1dGgvY2FsbGJhY2tzL3JlZGlyZWN0LWNhbGxiYWNrLmpzP2ZlYmUiLCJ3ZWJwYWNrOi8vaXRnLW5leHRnZW4tZnJvbnRlbmQvLi9ub2RlX21vZHVsZXMvQGZvcmdlcm9jay9qYXZhc2NyaXB0LXNkay9kaXN0L2ZyLWF1dGgvY2FsbGJhY2tzL3NlbGVjdC1pZHAtY2FsbGJhY2suanM/MmNiYSIsIndlYnBhY2s6Ly9pdGctbmV4dGdlbi1mcm9udGVuZC8uL25vZGVfbW9kdWxlcy9AZm9yZ2Vyb2NrL2phdmFzY3JpcHQtc2RrL2Rpc3QvZnItYXV0aC9jYWxsYmFja3MvdGV4dC1vdXRwdXQtY2FsbGJhY2suanM/NzgzMyIsIndlYnBhY2s6Ly9pdGctbmV4dGdlbi1mcm9udGVuZC8uL25vZGVfbW9kdWxlcy9AZm9yZ2Vyb2NrL2phdmFzY3JpcHQtc2RrL2Rpc3QvZnItYXV0aC9jYWxsYmFja3Mvc3VzcGVuZGVkLXRleHQtb3V0cHV0LWNhbGxiYWNrLmpzP2QwM2UiLCJ3ZWJwYWNrOi8vaXRnLW5leHRnZW4tZnJvbnRlbmQvLi9ub2RlX21vZHVsZXMvQGZvcmdlcm9jay9qYXZhc2NyaXB0LXNkay9kaXN0L2ZyLWF1dGgvY2FsbGJhY2tzL3Rlcm1zLWFuZC1jb25kaXRpb25zLWNhbGxiYWNrLmpzP2I1NjIiLCJ3ZWJwYWNrOi8vaXRnLW5leHRnZW4tZnJvbnRlbmQvLi9ub2RlX21vZHVsZXMvQGZvcmdlcm9jay9qYXZhc2NyaXB0LXNkay9kaXN0L2ZyLWF1dGgvY2FsbGJhY2tzL3RleHQtaW5wdXQtY2FsbGJhY2suanM/ZGY5MyIsIndlYnBhY2s6Ly9pdGctbmV4dGdlbi1mcm9udGVuZC8uL25vZGVfbW9kdWxlcy9AZm9yZ2Vyb2NrL2phdmFzY3JpcHQtc2RrL2Rpc3QvZnItYXV0aC9jYWxsYmFja3MvdmFsaWRhdGVkLWNyZWF0ZS1wYXNzd29yZC1jYWxsYmFjay5qcz82MjM0Iiwid2VicGFjazovL2l0Zy1uZXh0Z2VuLWZyb250ZW5kLy4vbm9kZV9tb2R1bGVzL0Bmb3JnZXJvY2svamF2YXNjcmlwdC1zZGsvZGlzdC9mci1hdXRoL2NhbGxiYWNrcy92YWxpZGF0ZWQtY3JlYXRlLXVzZXJuYW1lLWNhbGxiYWNrLmpzPzcyMjEiLCJ3ZWJwYWNrOi8vaXRnLW5leHRnZW4tZnJvbnRlbmQvLi9ub2RlX21vZHVsZXMvQGZvcmdlcm9jay9qYXZhc2NyaXB0LXNkay9kaXN0L2ZyLWF1dGgvY2FsbGJhY2tzL2ZhY3RvcnkuanM/ZjIwZiIsIndlYnBhY2s6Ly9pdGctbmV4dGdlbi1mcm9udGVuZC8uL25vZGVfbW9kdWxlcy9AZm9yZ2Vyb2NrL2phdmFzY3JpcHQtc2RrL2Rpc3QvZnItYXV0aC9mci1zdGVwLmpzPzA5NmUiLCJ3ZWJwYWNrOi8vaXRnLW5leHRnZW4tZnJvbnRlbmQvLi9ub2RlX21vZHVsZXMvQGZvcmdlcm9jay9qYXZhc2NyaXB0LXNkay9kaXN0L2ZyLWF1dGgvaW5kZXguanM/NWMwYSIsIndlYnBhY2s6Ly9pdGctbmV4dGdlbi1mcm9udGVuZC8uL25vZGVfbW9kdWxlcy9AZm9yZ2Vyb2NrL2phdmFzY3JpcHQtc2RrL25vZGVfbW9kdWxlcy9yZWR1eC9kaXN0L3JlZHV4Lm1qcz9jYmYzIiwid2VicGFjazovL2l0Zy1uZXh0Z2VuLWZyb250ZW5kLy4vbm9kZV9tb2R1bGVzL0Bmb3JnZXJvY2svamF2YXNjcmlwdC1zZGsvbm9kZV9tb2R1bGVzL3JlZHV4LXRodW5rL2Rpc3QvcmVkdXgtdGh1bmsubWpzPzM0NDciLCJ3ZWJwYWNrOi8vaXRnLW5leHRnZW4tZnJvbnRlbmQvLi9ub2RlX21vZHVsZXMvaW1tZXIvZGlzdC9pbW1lci5tanM/NDc3MSIsIndlYnBhY2s6Ly9pdGctbmV4dGdlbi1mcm9udGVuZC8uL25vZGVfbW9kdWxlcy9AZm9yZ2Vyb2NrL2phdmFzY3JpcHQtc2RrL25vZGVfbW9kdWxlcy9AcmVkdXhqcy90b29sa2l0L2Rpc3QvcmVkdXgtdG9vbGtpdC5tb2Rlcm4ubWpzPzRiNjkiLCJ3ZWJwYWNrOi8vaXRnLW5leHRnZW4tZnJvbnRlbmQvLi9ub2RlX21vZHVsZXMvcmVzZWxlY3QvZGlzdC9yZXNlbGVjdC5tanM/Mjc1OSIsIndlYnBhY2s6Ly9pdGctbmV4dGdlbi1mcm9udGVuZC8uL25vZGVfbW9kdWxlcy9AZm9yZ2Vyb2NrL2phdmFzY3JpcHQtc2RrL25vZGVfbW9kdWxlcy9AcmVkdXhqcy90b29sa2l0L2Rpc3QvcXVlcnkvcnRrLXF1ZXJ5Lm1vZGVybi5tanM/ODQ1MyIsIndlYnBhY2s6Ly9pdGctbmV4dGdlbi1mcm9udGVuZC8uL25vZGVfbW9kdWxlcy9AZm9yZ2Vyb2NrL2phdmFzY3JpcHQtc2RrL2Rpc3QvZGV2aWNlLWNsaWVudC9zZXJ2aWNlcy9pbmRleC5qcz9lODhiIiwid2VicGFjazovL2l0Zy1uZXh0Z2VuLWZyb250ZW5kLy4vbm9kZV9tb2R1bGVzL0Bmb3JnZXJvY2svamF2YXNjcmlwdC1zZGsvZGlzdC9kZXZpY2UtY2xpZW50L2RldmljZS5zdG9yZS5qcz84ZjMzIiwid2VicGFjazovL2l0Zy1uZXh0Z2VuLWZyb250ZW5kLy4vbm9kZV9tb2R1bGVzL0Bmb3JnZXJvY2svamF2YXNjcmlwdC1zZGsvZGlzdC9mci1kZXZpY2UvZGVmYXVsdHMuanM/YTA1OCIsIndlYnBhY2s6Ly9pdGctbmV4dGdlbi1mcm9udGVuZC8uL25vZGVfbW9kdWxlcy9AZm9yZ2Vyb2NrL2phdmFzY3JpcHQtc2RrL2Rpc3QvZnItZGV2aWNlL2NvbGxlY3Rvci5qcz83ZTNhIiwid2VicGFjazovL2l0Zy1uZXh0Z2VuLWZyb250ZW5kLy4vbm9kZV9tb2R1bGVzL0Bmb3JnZXJvY2svamF2YXNjcmlwdC1zZGsvZGlzdC91dGlsL2xvZ2dlci5qcz9lN2M5Iiwid2VicGFjazovL2l0Zy1uZXh0Z2VuLWZyb250ZW5kLy4vbm9kZV9tb2R1bGVzL0Bmb3JnZXJvY2svamF2YXNjcmlwdC1zZGsvZGlzdC9mci1kZXZpY2UvaW5kZXguanM/Y2VhYSIsIndlYnBhY2s6Ly9pdGctbmV4dGdlbi1mcm9udGVuZC8uL25vZGVfbW9kdWxlcy9AZm9yZ2Vyb2NrL2phdmFzY3JpcHQtc2RrL2Rpc3QvZnItcXItY29kZS9pbmRleC5qcz9iMWVhIiwid2VicGFjazovL2l0Zy1uZXh0Z2VuLWZyb250ZW5kLy4vbm9kZV9tb2R1bGVzL0Bmb3JnZXJvY2svamF2YXNjcmlwdC1zZGsvZGlzdC9mci1yZWNvdmVyeS1jb2Rlcy9zY3JpcHQtcGFyc2VyLmpzPzkyODgiLCJ3ZWJwYWNrOi8vaXRnLW5leHRnZW4tZnJvbnRlbmQvLi9ub2RlX21vZHVsZXMvQGZvcmdlcm9jay9qYXZhc2NyaXB0LXNkay9kaXN0L2ZyLXJlY292ZXJ5LWNvZGVzL2luZGV4LmpzPzk0N2QiLCJ3ZWJwYWNrOi8vaXRnLW5leHRnZW4tZnJvbnRlbmQvLi9ub2RlX21vZHVsZXMvQGZvcmdlcm9jay9qYXZhc2NyaXB0LXNkay9kaXN0L3Rva2VuLXN0b3JhZ2UvbG9jYWwtc3RvcmFnZS5qcz85ZmIxIiwid2VicGFjazovL2l0Zy1uZXh0Z2VuLWZyb250ZW5kLy4vbm9kZV9tb2R1bGVzL0Bmb3JnZXJvY2svamF2YXNjcmlwdC1zZGsvZGlzdC90b2tlbi1zdG9yYWdlL3Nlc3Npb24tc3RvcmFnZS5qcz85YjczIiwid2VicGFjazovL2l0Zy1uZXh0Z2VuLWZyb250ZW5kLy4vbm9kZV9tb2R1bGVzL0Bmb3JnZXJvY2svamF2YXNjcmlwdC1zZGsvZGlzdC90b2tlbi1zdG9yYWdlL2luZGV4LmpzP2UzYjEiLCJ3ZWJwYWNrOi8vaXRnLW5leHRnZW4tZnJvbnRlbmQvLi9ub2RlX21vZHVsZXMvQGZvcmdlcm9jay9qYXZhc2NyaXB0LXNkay9kaXN0L3V0aWwvaHR0cC5qcz81OTEyIiwid2VicGFjazovL2l0Zy1uZXh0Z2VuLWZyb250ZW5kLy4vbm9kZV9tb2R1bGVzL0Bmb3JnZXJvY2svamF2YXNjcmlwdC1zZGsvZGlzdC91dGlsL3BrY2UuanM/MDEyMSIsIndlYnBhY2s6Ly9pdGctbmV4dGdlbi1mcm9udGVuZC8uL25vZGVfbW9kdWxlcy9AZm9yZ2Vyb2NrL2phdmFzY3JpcHQtc2RrL2Rpc3Qvb2F1dGgyLWNsaWVudC9pbmRleC5qcz9iMjZlIiwid2VicGFjazovL2l0Zy1uZXh0Z2VuLWZyb250ZW5kLy4vbm9kZV9tb2R1bGVzL0Bmb3JnZXJvY2svamF2YXNjcmlwdC1zZGsvZGlzdC9zZXNzaW9uLW1hbmFnZXIvaW5kZXguanM/YTM2OSIsIndlYnBhY2s6Ly9pdGctbmV4dGdlbi1mcm9udGVuZC8uL25vZGVfbW9kdWxlcy9AZm9yZ2Vyb2NrL2phdmFzY3JpcHQtc2RrL2Rpc3Qvb2F1dGgyLWNsaWVudC9zdGF0ZS1wa2NlLmpzPzQ1OGQiLCJ3ZWJwYWNrOi8vaXRnLW5leHRnZW4tZnJvbnRlbmQvLi9ub2RlX21vZHVsZXMvQGZvcmdlcm9jay9qYXZhc2NyaXB0LXNkay9kaXN0L3Rva2VuLW1hbmFnZXIvaGVscGVycy5qcz82YjE3Iiwid2VicGFjazovL2l0Zy1uZXh0Z2VuLWZyb250ZW5kLy4vbm9kZV9tb2R1bGVzL0Bmb3JnZXJvY2svamF2YXNjcmlwdC1zZGsvZGlzdC9vYXV0aDItY2xpZW50L2VudW1zLmpzP2JjYmEiLCJ3ZWJwYWNrOi8vaXRnLW5leHRnZW4tZnJvbnRlbmQvLi9ub2RlX21vZHVsZXMvQGZvcmdlcm9jay9qYXZhc2NyaXB0LXNkay9kaXN0L3Rva2VuLW1hbmFnZXIvaW5kZXguanM/ZDg2YiIsIndlYnBhY2s6Ly9pdGctbmV4dGdlbi1mcm9udGVuZC8uL25vZGVfbW9kdWxlcy9AZm9yZ2Vyb2NrL2phdmFzY3JpcHQtc2RrL2Rpc3QvZnItdXNlci9pbmRleC5qcz9kNzM5Iiwid2VicGFjazovL2l0Zy1uZXh0Z2VuLWZyb250ZW5kLy4vbm9kZV9tb2R1bGVzL0Bmb3JnZXJvY2svamF2YXNjcmlwdC1zZGsvZGlzdC9mci13ZWJhdXRobi9lbnVtcy5qcz8yMzFlIiwid2VicGFjazovL2l0Zy1uZXh0Z2VuLWZyb250ZW5kLy4vbm9kZV9tb2R1bGVzL0Bmb3JnZXJvY2svamF2YXNjcmlwdC1zZGsvZGlzdC9mci13ZWJhdXRobi9oZWxwZXJzLmpzPzY3MjAiLCJ3ZWJwYWNrOi8vaXRnLW5leHRnZW4tZnJvbnRlbmQvLi9ub2RlX21vZHVsZXMvQGZvcmdlcm9jay9qYXZhc2NyaXB0LXNkay9kaXN0L2ZyLXdlYmF1dGhuL3NjcmlwdC1wYXJzZXIuanM/M2I5MyIsIndlYnBhY2s6Ly9pdGctbmV4dGdlbi1mcm9udGVuZC8uL25vZGVfbW9kdWxlcy9AZm9yZ2Vyb2NrL2phdmFzY3JpcHQtc2RrL2Rpc3QvZnItd2ViYXV0aG4vaW5kZXguanM/NGU1ZSIsIndlYnBhY2s6Ly9pdGctbmV4dGdlbi1mcm9udGVuZC8uL25vZGVfbW9kdWxlcy9AZm9yZ2Vyb2NrL2phdmFzY3JpcHQtc2RrL2Rpc3QvaHR0cC1jbGllbnQvaGVscGVycy5qcz8wNWRkIiwid2VicGFjazovL2l0Zy1uZXh0Z2VuLWZyb250ZW5kLy4vbm9kZV9tb2R1bGVzL0Bmb3JnZXJvY2svamF2YXNjcmlwdC1zZGsvZGlzdC9odHRwLWNsaWVudC9pbmRleC5qcz9jOWVmIiwid2VicGFjazovL2l0Zy1uZXh0Z2VuLWZyb250ZW5kLy4vbm9kZV9tb2R1bGVzL0Bmb3JnZXJvY2svamF2YXNjcmlwdC1zZGsvZGlzdC91c2VyLW1hbmFnZXIvaW5kZXguanM/YmIyZiIsIndlYnBhY2s6Ly9pdGctbmV4dGdlbi1mcm9udGVuZC8uL25vZGVfbW9kdWxlcy9AZm9yZ2Vyb2NrL2phdmFzY3JpcHQtc2RrL2Rpc3QvdXRpbC9kZWZlcnJlZC5qcz8zODcwIiwid2VicGFjazovL2l0Zy1uZXh0Z2VuLWZyb250ZW5kLy4vbm9kZV9tb2R1bGVzL0Bmb3JnZXJvY2svamF2YXNjcmlwdC1zZGsvZGlzdC91dGlsL3N0b3JhZ2UuanM/YzM5NCIsIndlYnBhY2s6Ly9pdGctbmV4dGdlbi1mcm9udGVuZC8uL25vZGVfbW9kdWxlcy9AZm9yZ2Vyb2NrL2phdmFzY3JpcHQtc2RrL2Rpc3QvaW5kZXguanM/MzkyMiJdLCJzb3VyY2VzQ29udGVudCI6WyJjb25zdCBUID0gNWUzLCBFID0gM2U0LCBvID0gXCJGUi1TREtcIjtcbmV4cG9ydCB7XG4gIEUgYXMgREVGQVVMVF9PQVVUSF9USFJFU0hPTEQsXG4gIFQgYXMgREVGQVVMVF9USU1FT1VULFxuICBvIGFzIFBSRUZJWFxufTtcbiIsImZ1bmN0aW9uIGYodCwgeyB0eXBlOiBhLCBwYXlsb2FkOiBvIH0pIHtcbiAgY29uc3QgaSA9IE9iamVjdC5mcmVlemUoeyB0eXBlOiBhLCBwYXlsb2FkOiBvIH0pO1xuICByZXR1cm4gKGUpID0+IHtcbiAgICBpZiAoIUFycmF5LmlzQXJyYXkoZSkpXG4gICAgICByZXR1cm4gdDtcbiAgICBjb25zdCBjID0gZS5tYXAoKHIpID0+IHIpO1xuICAgIGZ1bmN0aW9uIG4oKSB7XG4gICAgICBjb25zdCByID0gYy5zaGlmdCgpO1xuICAgICAgcmV0dXJuIHIgJiYgcih0LCBpLCBuKSwgdDtcbiAgICB9XG4gICAgcmV0dXJuIG4oKTtcbiAgfTtcbn1cbmV4cG9ydCB7XG4gIGYgYXMgZGVmYXVsdFxufTtcbiIsImltcG9ydCB7IERFRkFVTFRfVElNRU9VVCBhcyBlIH0gZnJvbSBcIi4uL2NvbmZpZy9jb25zdGFudHMuanNcIjtcbmZ1bmN0aW9uIFQodCwgbyA9IGUpIHtcbiAgY29uc3QgaSA9IG8gfHwgZSwgciA9IG5ldyBQcm9taXNlKFxuICAgIChuLCBtKSA9PiBzZXRUaW1lb3V0KCgpID0+IG0obmV3IEVycm9yKFwiVGltZW91dFwiKSksIGkpXG4gICk7XG4gIHJldHVybiBQcm9taXNlLnJhY2UoW3QsIHJdKTtcbn1cbmV4cG9ydCB7XG4gIFQgYXMgd2l0aFRpbWVvdXRcbn07XG4iLCJ2YXIgZSA9IC8qIEBfX1BVUkVfXyAqLyAoKEUpID0+IChFLkF1dGhlbnRpY2F0ZSA9IFwiQVVUSEVOVElDQVRFXCIsIEUuQXV0aG9yaXplID0gXCJBVVRIT1JJWkVcIiwgRS5FbmRTZXNzaW9uID0gXCJFTkRfU0VTU0lPTlwiLCBFLkxvZ291dCA9IFwiTE9HT1VUXCIsIEUuRXhjaGFuZ2VUb2tlbiA9IFwiRVhDSEFOR0VfVE9LRU5cIiwgRS5SZWZyZXNoVG9rZW4gPSBcIlJFRlJFU0hfVE9LRU5cIiwgRS5SZXN1bWVBdXRoZW50aWNhdGUgPSBcIlJFU1VNRV9BVVRIRU5USUNBVEVcIiwgRS5SZXZva2VUb2tlbiA9IFwiUkVWT0tFX1RPS0VOXCIsIEUuU3RhcnRBdXRoZW50aWNhdGUgPSBcIlNUQVJUX0FVVEhFTlRJQ0FURVwiLCBFLlVzZXJJbmZvID0gXCJVU0VSX0lORk9cIiwgRS5XZWxsS25vd24gPSBcIldFTExfS05PV05cIiwgRSkpKGUgfHwge30pO1xuZXhwb3J0IHtcbiAgZSBhcyBBY3Rpb25UeXBlc1xufTtcbiIsImltcG9ydCBsIGZyb20gXCIuLi91dGlsL21pZGRsZXdhcmUuanNcIjtcbmltcG9ydCB7IHdpdGhUaW1lb3V0IGFzIGEgfSBmcm9tIFwiLi4vdXRpbC90aW1lb3V0LmpzXCI7XG5pbXBvcnQgeyBBY3Rpb25UeXBlcyBhcyB1IH0gZnJvbSBcIi4vZW51bXMuanNcIjtcbmZ1bmN0aW9uIGgobiwgcikge1xuICBpZiAoIW4uYXV0aG9yaXphdGlvbl9lbmRwb2ludClcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCJXZWxsa25vd24gZW5kcG9pbnQgZGlkIG5vdCByZXR1cm4gYGF1dGhvcml6YXRpb25fZW5kcG9pbnRgXCIpO1xuICBjb25zdCB0ID0gbmV3IFVSTChuLmF1dGhvcml6YXRpb25fZW5kcG9pbnQpLm9yaWdpbjtcbiAgbGV0IGUsIGk7XG4gIG4uaXNzdWVyLmluY2x1ZGVzKFwiL2FtL1wiKSA/IChlID0gYCR7bi5pc3N1ZXIucmVwbGFjZShcIm9hdXRoMlwiLCBcImpzb25cIil9L2F1dGhlbnRpY2F0ZWAsIGkgPSBgJHtuLmlzc3Vlci5yZXBsYWNlKFwib2F1dGgyXCIsIFwianNvblwiKX0vc2Vzc2lvbnNgKSA6IG4uaXNzdWVyLmluY2x1ZGVzKFwiL2FzL1wiKTtcbiAgY29uc3QgcyA9IHtcbiAgICAuLi5lID8geyBhdXRoZW50aWNhdGU6IG5ldyBVUkwoZSkucGF0aG5hbWUgfSA6IHt9LFxuICAgIGF1dGhvcml6ZTogbmV3IFVSTChuLmF1dGhvcml6YXRpb25fZW5kcG9pbnQpLnBhdGhuYW1lLFxuICAgIGFjY2Vzc1Rva2VuOiBuZXcgVVJMKG4udG9rZW5fZW5kcG9pbnQpLnBhdGhuYW1lLFxuICAgIGVuZFNlc3Npb246IG5ldyBVUkwobi5lbmRfc2Vzc2lvbl9lbmRwb2ludCkucGF0aG5hbWUsXG4gICAgdXNlckluZm86IG5ldyBVUkwobi51c2VyaW5mb19lbmRwb2ludCkucGF0aG5hbWUsXG4gICAgcmV2b2tlOiBuZXcgVVJMKG4ucmV2b2NhdGlvbl9lbmRwb2ludCkucGF0aG5hbWUsXG4gICAgLi4uaSA/IHsgc2Vzc2lvbnM6IG5ldyBVUkwoaSkucGF0aG5hbWUgfSA6IHt9XG4gIH07XG4gIHJldHVybiB7XG4gICAgYmFzZVVybDogdCxcbiAgICBwYXRoczogc1xuICB9O1xufVxuYXN5bmMgZnVuY3Rpb24gbShuKSB7XG4gIGlmICghbi5zZXJ2ZXJDb25maWcud2VsbGtub3duKVxuICAgIHRocm93IG5ldyBFcnJvcihcIndlbGxrbm93biBVUkwgaXMgbWlzc2luZyBpbiBvcHRpb25zXCIpO1xuICBjb25zdCBvID0gbChcbiAgICB7XG4gICAgICB1cmw6IG5ldyBVUkwobi5zZXJ2ZXJDb25maWc/LndlbGxrbm93biksXG4gICAgICBpbml0OiB7IG1ldGhvZDogXCJHRVRcIiB9XG4gICAgfSxcbiAgICB7XG4gICAgICB0eXBlOiB1LldlbGxLbm93bixcbiAgICAgIHBheWxvYWQ6IHt9XG4gICAgfVxuICApKG4ubWlkZGxld2FyZSk7XG4gIHJldHVybiBhd2FpdCAoYXdhaXQgYShmZXRjaChvLnVybC50b1N0cmluZygpLCBvLmluaXQpLCBuLnNlcnZlckNvbmZpZy50aW1lb3V0KSkuanNvbigpO1xufVxuZXhwb3J0IHtcbiAgaCBhcyBjb252ZXJ0V2VsbEtub3duLFxuICBtIGFzIGZldGNoV2VsbEtub3duXG59O1xuIiwiaW1wb3J0IHsgREVGQVVMVF9USU1FT1VUIGFzIG8sIERFRkFVTFRfT0FVVEhfVEhSRVNIT0xEIGFzIHMsIFBSRUZJWCBhcyBsIH0gZnJvbSBcIi4vY29uc3RhbnRzLmpzXCI7XG5pbXBvcnQgeyBmZXRjaFdlbGxLbm93biBhcyBhLCBjb252ZXJ0V2VsbEtub3duIGFzIGYgfSBmcm9tIFwiLi9oZWxwZXJzLmpzXCI7XG5mdW5jdGlvbiB3KG4pIHtcbiAgcmV0dXJuIHtcbiAgICAuLi5uLFxuICAgIG9hdXRoVGhyZXNob2xkOiBuLm9hdXRoVGhyZXNob2xkIHx8IHMsXG4gICAgbG9nTGV2ZWw6IG4ubG9nTGV2ZWwgfHwgXCJub25lXCIsXG4gICAgcGxhdGZvcm1IZWFkZXI6IG4ucGxhdGZvcm1IZWFkZXIgfHwgITEsXG4gICAgcHJlZml4OiBuLnByZWZpeCB8fCBsXG4gIH07XG59XG5jbGFzcyBjIHtcbiAgLyoqXG4gICAqIFNldHMgdGhlIGRlZmF1bHQgb3B0aW9ucy5cbiAgICpcbiAgICogQHBhcmFtIG9wdGlvbnMgVGhlIG9wdGlvbnMgdG8gdXNlIGFzIGRlZmF1bHRzXG4gICAqL1xuICBzdGF0aWMgc2V0KGUpIHtcbiAgICBpZiAoIXRoaXMuaXNWYWxpZChlKSlcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIkNvbmZpZ3VyYXRpb24gaXMgaW52YWxpZFwiKTtcbiAgICBlLnNlcnZlckNvbmZpZyAmJiB0aGlzLnZhbGlkYXRlU2VydmVyQ29uZmlnKGUuc2VydmVyQ29uZmlnKSwgdGhpcy5vcHRpb25zID0geyAuLi53KGUpIH07XG4gIH1cbiAgLyoqXG4gICAqIEBtZXRob2Qgc2V0QXN5bmMgLSBBc3luY2hyb25vdXNseSBjYWxscyB0aGUgV2VsbEtub3duIGVuZHBvaW50IHRvIGNvbGxlY3QgdGhlIEFQSXMgZm9yIE9BdXRoXG4gICAqIEBwYXJhbSB7QXN5bmNDb25maWdPcHRpb25zfSBvcHRpb25zIC0gY29uZmlnIG9wdGlvbnMgd2l0aCB3ZWxsa25vd24gZW5kcG9pbnQgVVJMXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPHZvaWQ+fSAtIFJldHVybnMgYSBzdWNjZXNzIG9yIGZhaWx1cmUgbWVzc2FnZSBvYmplY3RcbiAgICovXG4gIHN0YXRpYyBhc3luYyBzZXRBc3luYyhlKSB7XG4gICAgaWYgKCFlLnNlcnZlckNvbmZpZy53ZWxsa25vd24pXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgIFwiTWlzc2luZyB3ZWxsLWtub3duIHByb3BlcnR5LiBVc2UgYENvbmZpZy5zZXRgIG1ldGhvZCBpZiBub3QgdXNpbmcgd2VsbC1rbm93biBlbmRwb2ludC5cIlxuICAgICAgKTtcbiAgICBlLnNlcnZlckNvbmZpZy5iYXNlVXJsICYmIGNvbnNvbGUud2FybihcbiAgICAgIFwiVGhlIGJhc2VVcmwgcHJvcGVydHkgcGFzc2VkIGluIHdpbGwgYmUgaWdub3JlZCwgYW5kIHJlcGxhY2VkIHdpdGggd2VsbC1rbm93biBvcmlnaW4uXCJcbiAgICApO1xuICAgIGNvbnN0IHIgPSBhd2FpdCBhKGUpLCBpID0gZihyKTtcbiAgICBkZWxldGUgZS5zZXJ2ZXJDb25maWcud2VsbGtub3duO1xuICAgIGNvbnN0IHQgPSBlO1xuICAgIHQuc2VydmVyQ29uZmlnID0gaSwgdGhpcy5zZXQodCk7XG4gIH1cbiAgLyoqXG4gICAqIE1lcmdlcyB0aGUgcHJvdmlkZWQgb3B0aW9ucyB3aXRoIHRoZSBkZWZhdWx0IG9wdGlvbnMuICBFbnN1cmVzIGEgc2VydmVyIGNvbmZpZ3VyYXRpb24gZXhpc3RzLlxuICAgKlxuICAgKiBAcGFyYW0gb3B0aW9ucyBUaGUgb3B0aW9ucyB0byBtZXJnZSB3aXRoIGRlZmF1bHRzXG4gICAqL1xuICBzdGF0aWMgZ2V0KGUpIHtcbiAgICBpZiAoIXRoaXMub3B0aW9ucyAmJiAhZSlcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIkNvbmZpZ3VyYXRpb24gaGFzIG5vdCBiZWVuIHNldFwiKTtcbiAgICBjb25zdCByID0geyAuLi50aGlzLm9wdGlvbnMsIC4uLmUgfTtcbiAgICBpZiAoIXIuc2VydmVyQ29uZmlnIHx8ICFyLnNlcnZlckNvbmZpZy5iYXNlVXJsKVxuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiU2VydmVyIGNvbmZpZ3VyYXRpb24gaGFzIG5vdCBiZWVuIHNldFwiKTtcbiAgICByZXR1cm4gcjtcbiAgfVxuICBzdGF0aWMgaXNWYWxpZChlKSB7XG4gICAgcmV0dXJuICEhKGUgJiYgZS5zZXJ2ZXJDb25maWcpO1xuICB9XG4gIHN0YXRpYyB2YWxpZGF0ZVNlcnZlckNvbmZpZyhlKSB7XG4gICAgZS50aW1lb3V0IHx8IChlLnRpbWVvdXQgPSBvKTtcbiAgICBjb25zdCByID0gZS5iYXNlVXJsO1xuICAgIHIgJiYgci5jaGFyQXQoci5sZW5ndGggLSAxKSAhPT0gXCIvXCIgJiYgKGUuYmFzZVVybCA9IHIgKyBcIi9cIik7XG4gIH1cbn1cbmV4cG9ydCB7XG4gIGMgYXMgZGVmYXVsdFxufTtcbiIsImNvbnN0IEUgPSBcImZvcmdlcm9jay1zZGtcIiwgbyA9IFwiamF2YXNjcmlwdFwiO1xuZXhwb3J0IHtcbiAgRSBhcyBSRVFVRVNURURfV0lUSCxcbiAgbyBhcyBYX1JFUVVFU1RFRF9QTEFURk9STVxufTtcbiIsImZ1bmN0aW9uIG4obykge1xuICBjb25zdCByID0gKG8gfHwgXCJcIikuc3BsaXQoXCIvXCIpLm1hcCgodCkgPT4gdC50cmltKCkpLmZpbHRlcigodCkgPT4gdCAhPT0gXCJcIik7XG4gIHJldHVybiByWzBdICE9PSBcInJvb3RcIiAmJiByLnVuc2hpZnQoXCJyb290XCIpLCByLm1hcCgodCkgPT4gYHJlYWxtcy8ke3R9YCkuam9pbihcIi9cIik7XG59XG5leHBvcnQge1xuICBuIGFzIGdldFJlYWxtVXJsUGF0aFxufTtcbiIsImltcG9ydCB7IGdldFJlYWxtVXJsUGF0aCBhcyBjIH0gZnJvbSBcIi4vcmVhbG0uanNcIjtcbmZ1bmN0aW9uIHIodCkge1xuICBjb25zdCBvID0gdC5wcm90b2NvbCA9PT0gXCJodHRwOlwiICYmIFtcIlwiLCBcIjgwXCJdLmluZGV4T2YodC5wb3J0KSA9PT0gLTEgfHwgdC5wcm90b2NvbCA9PT0gXCJodHRwczpcIiAmJiBbXCJcIiwgXCI0NDNcIl0uaW5kZXhPZih0LnBvcnQpID09PSAtMSA/IGA6JHt0LnBvcnR9YCA6IFwiXCI7XG4gIHJldHVybiBgJHt0LnByb3RvY29sfS8vJHt0Lmhvc3RuYW1lfSR7b31gO1xufVxuZnVuY3Rpb24gaCh0LCBlLCBvKSB7XG4gIGNvbnN0IG4gPSBjKGUpLCBzID0ge1xuICAgIGF1dGhlbnRpY2F0ZTogYGpzb24vJHtufS9hdXRoZW50aWNhdGVgLFxuICAgIGF1dGhvcml6ZTogYG9hdXRoMi8ke259L2F1dGhvcml6ZWAsXG4gICAgYWNjZXNzVG9rZW46IGBvYXV0aDIvJHtufS9hY2Nlc3NfdG9rZW5gLFxuICAgIGVuZFNlc3Npb246IGBvYXV0aDIvJHtufS9jb25uZWN0L2VuZFNlc3Npb25gLFxuICAgIHVzZXJJbmZvOiBgb2F1dGgyLyR7bn0vdXNlcmluZm9gLFxuICAgIHJldm9rZTogYG9hdXRoMi8ke259L3Rva2VuL3Jldm9rZWAsXG4gICAgc2Vzc2lvbnM6IGBqc29uLyR7bn0vc2Vzc2lvbnMvYFxuICB9O1xuICByZXR1cm4gbyAmJiBvW3RdID8gb1t0XSA6IHNbdF07XG59XG5mdW5jdGlvbiBmKHQsIGUpIHtcbiAgY29uc3QgbyA9IG5ldyBVUkwodCk7XG4gIGlmIChlLnN0YXJ0c1dpdGgoXCIvXCIpKVxuICAgIHJldHVybiBgJHtyKG8pfSR7ZX1gO1xuICBjb25zdCBuID0gby5wYXRobmFtZS5zcGxpdChcIi9cIiksIHMgPSBlLnNwbGl0KFwiL1wiKS5maWx0ZXIoKGkpID0+ICEhaSksIGEgPSBbLi4ubi5zbGljZSgwLCAtMSksIC4uLnNdLmpvaW4oXCIvXCIpO1xuICByZXR1cm4gYCR7cihvKX0ke2F9YDtcbn1cbmZ1bmN0aW9uIHAodCkge1xuICBjb25zdCBlID0gbmV3IFVSTCh0KSwgbyA9IHt9O1xuICByZXR1cm4gZS5zZWFyY2hQYXJhbXMuZm9yRWFjaCgobiwgcykgPT4gb1tzXSA9IG4pLCBvO1xufVxuZnVuY3Rpb24gJCh0KSB7XG4gIGNvbnN0IGUgPSBbXTtcbiAgZm9yIChjb25zdCBvIGluIHQpXG4gICAgdFtvXSAmJiBlLnB1c2gobyArIFwiPVwiICsgZW5jb2RlVVJJQ29tcG9uZW50KHRbb10pKTtcbiAgcmV0dXJuIGUuam9pbihcIiZcIik7XG59XG5leHBvcnQge1xuICByIGFzIGdldEJhc2VVcmwsXG4gIGggYXMgZ2V0RW5kcG9pbnRQYXRoLFxuICBwIGFzIHBhcnNlUXVlcnksXG4gIGYgYXMgcmVzb2x2ZSxcbiAgJCBhcyBzdHJpbmdpZnlcbn07XG4iLCJpbXBvcnQgbSBmcm9tIFwiLi4vY29uZmlnL2luZGV4LmpzXCI7XG5pbXBvcnQgeyBBY3Rpb25UeXBlcyBhcyBsIH0gZnJvbSBcIi4uL2NvbmZpZy9lbnVtcy5qc1wiO1xuaW1wb3J0IHsgWF9SRVFVRVNURURfUExBVEZPUk0gYXMgYywgUkVRVUVTVEVEX1dJVEggYXMgZiB9IGZyb20gXCIuLi9zaGFyZWQvY29uc3RhbnRzLmpzXCI7XG5pbXBvcnQgeyB3aXRoVGltZW91dCBhcyB5IH0gZnJvbSBcIi4uL3V0aWwvdGltZW91dC5qc1wiO1xuaW1wb3J0IHsgc3RyaW5naWZ5IGFzIGcsIGdldEVuZHBvaW50UGF0aCBhcyBSLCByZXNvbHZlIGFzIHEgfSBmcm9tIFwiLi4vdXRpbC91cmwuanNcIjtcbmltcG9ydCBQIGZyb20gXCIuLi91dGlsL21pZGRsZXdhcmUuanNcIjtcbmNsYXNzIEoge1xuICAvKipcbiAgICogR2V0cyB0aGUgbmV4dCBzdGVwIGluIHRoZSBhdXRoZW50aWNhdGlvbiB0cmVlLlxuICAgKlxuICAgKiBAcGFyYW0ge1N0ZXB9IHByZXZpb3VzU3RlcCBUaGUgcHJldmlvdXMgc3RlcCwgaW5jbHVkaW5nIGFueSByZXF1aXJlZCBpbnB1dC5cbiAgICogQHBhcmFtIHtTdGVwT3B0aW9uc30gb3B0aW9ucyBDb25maWd1cmF0aW9uIGRlZmF1bHQgb3ZlcnJpZGVzLlxuICAgKiBAcmV0dXJuIHtTdGVwfSBUaGUgbmV4dCBzdGVwIGluIHRoZSBhdXRoZW50aWNhdGlvbiB0cmVlLlxuICAgKi9cbiAgc3RhdGljIGFzeW5jIG5leHQodCwgZSkge1xuICAgIGNvbnN0IHsgbWlkZGxld2FyZTogciwgcGxhdGZvcm1IZWFkZXI6IG4sIHJlYWxtUGF0aDogdSwgc2VydmVyQ29uZmlnOiBpLCB0cmVlOiBvLCB0eXBlOiBhIH0gPSBtLmdldChlKSwgZCA9IGUgPyBlLnF1ZXJ5IDoge30sIHAgPSB0aGlzLmNvbnN0cnVjdFVybChpLCB1LCBvLCBkKSwgcyA9IFAoXG4gICAgICB7XG4gICAgICAgIHVybDogbmV3IFVSTChwKSxcbiAgICAgICAgaW5pdDogdGhpcy5jb25maWd1cmVSZXF1ZXN0KHQpXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICB0eXBlOiB0ID8gbC5BdXRoZW50aWNhdGUgOiBsLlN0YXJ0QXV0aGVudGljYXRlLFxuICAgICAgICBwYXlsb2FkOiB7XG4gICAgICAgICAgdHJlZTogbyxcbiAgICAgICAgICB0eXBlOiBhIHx8IFwic2VydmljZVwiXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICApKHIpO1xuICAgIG4gJiYgKHMuaW5pdC5oZWFkZXJzIGluc3RhbmNlb2YgSGVhZGVycyA/IHMuaW5pdC5oZWFkZXJzLnNldChcIlgtUmVxdWVzdGVkLVBsYXRmb3JtXCIsIGMpIDogQXJyYXkuaXNBcnJheShzLmluaXQuaGVhZGVycykgPyBzLmluaXQuaGVhZGVycy5wdXNoKFtcIlgtUmVxdWVzdGVkLVBsYXRmb3JtXCIsIGNdKSA6IHMuaW5pdC5oZWFkZXJzID8gcy5pbml0LmhlYWRlcnNbXCJYLVJlcXVlc3RlZC1QbGF0Zm9ybVwiXSA9IGMgOiBzLmluaXQuaGVhZGVycyA9IHtcbiAgICAgIFwiWC1SZXF1ZXN0ZWQtUGxhdGZvcm1cIjogY1xuICAgIH0pO1xuICAgIGNvbnN0IGggPSBhd2FpdCB5KGZldGNoKHMudXJsLnRvU3RyaW5nKCksIHMuaW5pdCksIGkudGltZW91dCk7XG4gICAgcmV0dXJuIGF3YWl0IHRoaXMuZ2V0UmVzcG9uc2VKc29uKGgpO1xuICB9XG4gIHN0YXRpYyBjb25zdHJ1Y3RVcmwodCwgZSwgciwgbikge1xuICAgIGNvbnN0IGkgPSB7IC4uLm4sIC4uLnIgPyB7IGF1dGhJbmRleFR5cGU6IFwic2VydmljZVwiLCBhdXRoSW5kZXhWYWx1ZTogciB9IDogdm9pZCAwIH0sIG8gPSBPYmplY3Qua2V5cyhpKS5sZW5ndGggPiAwID8gYD8ke2coaSl9YCA6IFwiXCIsIGEgPSBSKFwiYXV0aGVudGljYXRlXCIsIGUsIHQucGF0aHMpO1xuICAgIHJldHVybiBxKHQuYmFzZVVybCwgYCR7YX0ke299YCk7XG4gIH1cbiAgc3RhdGljIGNvbmZpZ3VyZVJlcXVlc3QodCkge1xuICAgIHJldHVybiB7XG4gICAgICBib2R5OiB0ID8gSlNPTi5zdHJpbmdpZnkodCkgOiB2b2lkIDAsXG4gICAgICBjcmVkZW50aWFsczogXCJpbmNsdWRlXCIsXG4gICAgICBoZWFkZXJzOiBuZXcgSGVhZGVycyh7XG4gICAgICAgIEFjY2VwdDogXCJhcHBsaWNhdGlvbi9qc29uXCIsXG4gICAgICAgIFwiQWNjZXB0LUFQSS1WZXJzaW9uXCI6IFwicHJvdG9jb2w9MS4wLHJlc291cmNlPTIuMVwiLFxuICAgICAgICBcIkNvbnRlbnQtVHlwZVwiOiBcImFwcGxpY2F0aW9uL2pzb25cIixcbiAgICAgICAgXCJYLVJlcXVlc3RlZC1XaXRoXCI6IGZcbiAgICAgIH0pLFxuICAgICAgbWV0aG9kOiBcIlBPU1RcIlxuICAgIH07XG4gIH1cbiAgc3RhdGljIGFzeW5jIGdldFJlc3BvbnNlSnNvbih0KSB7XG4gICAgY29uc3QgZSA9IHQuaGVhZGVycy5nZXQoXCJjb250ZW50LXR5cGVcIiksIG4gPSBlICYmIGUuaW5kZXhPZihcImFwcGxpY2F0aW9uL2pzb25cIikgPiAtMSA/IGF3YWl0IHQuanNvbigpIDoge307XG4gICAgcmV0dXJuIG4uc3RhdHVzID0gdC5zdGF0dXMsIG4ub2sgPSB0Lm9rLCBuO1xuICB9XG59XG5leHBvcnQge1xuICBKIGFzIGRlZmF1bHRcbn07XG4iLCJ2YXIgdCA9IC8qIEBfX1BVUkVfXyAqLyAoKGEpID0+IChhLkJhZFJlcXVlc3QgPSBcIkJBRF9SRVFVRVNUXCIsIGEuVGltZW91dCA9IFwiVElNRU9VVFwiLCBhLlVuYXV0aG9yaXplZCA9IFwiVU5BVVRIT1JJWkVEXCIsIGEuVW5rbm93biA9IFwiVU5LTk9XTlwiLCBhKSkodCB8fCB7fSksIGwgPSAvKiBAX19QVVJFX18gKi8gKChhKSA9PiAoYS5Cb29sZWFuQXR0cmlidXRlSW5wdXRDYWxsYmFjayA9IFwiQm9vbGVhbkF0dHJpYnV0ZUlucHV0Q2FsbGJhY2tcIiwgYS5DaG9pY2VDYWxsYmFjayA9IFwiQ2hvaWNlQ2FsbGJhY2tcIiwgYS5Db25maXJtYXRpb25DYWxsYmFjayA9IFwiQ29uZmlybWF0aW9uQ2FsbGJhY2tcIiwgYS5EZXZpY2VQcm9maWxlQ2FsbGJhY2sgPSBcIkRldmljZVByb2ZpbGVDYWxsYmFja1wiLCBhLkhpZGRlblZhbHVlQ2FsbGJhY2sgPSBcIkhpZGRlblZhbHVlQ2FsbGJhY2tcIiwgYS5LYmFDcmVhdGVDYWxsYmFjayA9IFwiS2JhQ3JlYXRlQ2FsbGJhY2tcIiwgYS5NZXRhZGF0YUNhbGxiYWNrID0gXCJNZXRhZGF0YUNhbGxiYWNrXCIsIGEuTmFtZUNhbGxiYWNrID0gXCJOYW1lQ2FsbGJhY2tcIiwgYS5OdW1iZXJBdHRyaWJ1dGVJbnB1dENhbGxiYWNrID0gXCJOdW1iZXJBdHRyaWJ1dGVJbnB1dENhbGxiYWNrXCIsIGEuUGFzc3dvcmRDYWxsYmFjayA9IFwiUGFzc3dvcmRDYWxsYmFja1wiLCBhLlBpbmdPbmVQcm90ZWN0RXZhbHVhdGlvbkNhbGxiYWNrID0gXCJQaW5nT25lUHJvdGVjdEV2YWx1YXRpb25DYWxsYmFja1wiLCBhLlBpbmdPbmVQcm90ZWN0SW5pdGlhbGl6ZUNhbGxiYWNrID0gXCJQaW5nT25lUHJvdGVjdEluaXRpYWxpemVDYWxsYmFja1wiLCBhLlBvbGxpbmdXYWl0Q2FsbGJhY2sgPSBcIlBvbGxpbmdXYWl0Q2FsbGJhY2tcIiwgYS5SZUNhcHRjaGFDYWxsYmFjayA9IFwiUmVDYXB0Y2hhQ2FsbGJhY2tcIiwgYS5SZUNhcHRjaGFFbnRlcnByaXNlQ2FsbGJhY2sgPSBcIlJlQ2FwdGNoYUVudGVycHJpc2VDYWxsYmFja1wiLCBhLlJlZGlyZWN0Q2FsbGJhY2sgPSBcIlJlZGlyZWN0Q2FsbGJhY2tcIiwgYS5TZWxlY3RJZFBDYWxsYmFjayA9IFwiU2VsZWN0SWRQQ2FsbGJhY2tcIiwgYS5TdHJpbmdBdHRyaWJ1dGVJbnB1dENhbGxiYWNrID0gXCJTdHJpbmdBdHRyaWJ1dGVJbnB1dENhbGxiYWNrXCIsIGEuU3VzcGVuZGVkVGV4dE91dHB1dENhbGxiYWNrID0gXCJTdXNwZW5kZWRUZXh0T3V0cHV0Q2FsbGJhY2tcIiwgYS5UZXJtc0FuZENvbmRpdGlvbnNDYWxsYmFjayA9IFwiVGVybXNBbmRDb25kaXRpb25zQ2FsbGJhY2tcIiwgYS5UZXh0SW5wdXRDYWxsYmFjayA9IFwiVGV4dElucHV0Q2FsbGJhY2tcIiwgYS5UZXh0T3V0cHV0Q2FsbGJhY2sgPSBcIlRleHRPdXRwdXRDYWxsYmFja1wiLCBhLlZhbGlkYXRlZENyZWF0ZVBhc3N3b3JkQ2FsbGJhY2sgPSBcIlZhbGlkYXRlZENyZWF0ZVBhc3N3b3JkQ2FsbGJhY2tcIiwgYS5WYWxpZGF0ZWRDcmVhdGVVc2VybmFtZUNhbGxiYWNrID0gXCJWYWxpZGF0ZWRDcmVhdGVVc2VybmFtZUNhbGxiYWNrXCIsIGEpKShsIHx8IHt9KTtcbmV4cG9ydCB7XG4gIGwgYXMgQ2FsbGJhY2tUeXBlLFxuICB0IGFzIEVycm9yQ29kZVxufTtcbiIsInZhciBfID0gLyogQF9fUFVSRV9fICovICgoQSkgPT4gKEEuQ2Fubm90Q29udGFpbkNoYXJhY3RlcnMgPSBcIkNBTk5PVF9DT05UQUlOX0NIQVJBQ1RFUlNcIiwgQS5DYW5ub3RDb250YWluRHVwbGljYXRlcyA9IFwiQ0FOTk9UX0NPTlRBSU5fRFVQTElDQVRFU1wiLCBBLkNhbm5vdENvbnRhaW5PdGhlcnMgPSBcIkNBTk5PVF9DT05UQUlOX09USEVSU1wiLCBBLkxlYXN0Q2FwaXRhbExldHRlcnMgPSBcIkFUX0xFQVNUX1hfQ0FQSVRBTF9MRVRURVJTXCIsIEEuTGVhc3ROdW1iZXJzID0gXCJBVF9MRUFTVF9YX05VTUJFUlNcIiwgQS5NYXRjaFJlZ2V4cCA9IFwiTUFUQ0hfUkVHRVhQXCIsIEEuTWF4aW11bUxlbmd0aCA9IFwiTUFYX0xFTkdUSFwiLCBBLk1heGltdW1OdW1iZXIgPSBcIk1BWElNVU1fTlVNQkVSX1ZBTFVFXCIsIEEuTWluaW11bUxlbmd0aCA9IFwiTUlOX0xFTkdUSFwiLCBBLk1pbmltdW1OdW1iZXIgPSBcIk1JTklNVU1fTlVNQkVSX1ZBTFVFXCIsIEEuUmVxdWlyZWQgPSBcIlJFUVVJUkVEXCIsIEEuVW5pcXVlID0gXCJVTklRVUVcIiwgQS5Vbmtub3duUG9saWN5ID0gXCJVTktOT1dOX1BPTElDWVwiLCBBLlZhbGlkQXJyYXlJdGVtcyA9IFwiVkFMSURfQVJSQVlfSVRFTVNcIiwgQS5WYWxpZERhdGUgPSBcIlZBTElEX0RBVEVcIiwgQS5WYWxpZEVtYWlsQWRkcmVzcyA9IFwiVkFMSURfRU1BSUxfQUREUkVTU19GT1JNQVRcIiwgQS5WYWxpZE5hbWVGb3JtYXQgPSBcIlZBTElEX05BTUVfRk9STUFUXCIsIEEuVmFsaWROdW1iZXIgPSBcIlZBTElEX05VTUJFUlwiLCBBLlZhbGlkUGhvbmVGb3JtYXQgPSBcIlZBTElEX1BIT05FX0ZPUk1BVFwiLCBBLlZhbGlkUXVlcnlGaWx0ZXIgPSBcIlZBTElEX1FVRVJZX0ZJTFRFUlwiLCBBLlZhbGlkVHlwZSA9IFwiVkFMSURfVFlQRVwiLCBBKSkoXyB8fCB7fSk7XG5leHBvcnQge1xuICBfIGFzIFBvbGljeUtleVxufTtcbiIsImZ1bmN0aW9uIGYobywgciwgbikge1xuICByZXR1cm4gbyA9PT0gMSA/IHIgOiBuICE9PSB2b2lkIDAgPyBuIDogciArIFwic1wiO1xufVxuZXhwb3J0IHtcbiAgZiBhcyBwbHVyYWxcbn07XG4iLCJmdW5jdGlvbiBuKHIsIHQsIGUpIHtcbiAgcmV0dXJuICFyIHx8IHJbdF0gPT09IHZvaWQgMCA/IGUgOiByW3RdO1xufVxuZXhwb3J0IHtcbiAgbiBhcyBnZXRQcm9wXG59O1xuIiwiaW1wb3J0IHsgcGx1cmFsIGFzIHIgfSBmcm9tIFwiLi4vdXRpbC9zdHJpbmdzLmpzXCI7XG5pbXBvcnQgeyBQb2xpY3lLZXkgYXMgZSB9IGZyb20gXCIuL2VudW1zLmpzXCI7XG5pbXBvcnQgeyBnZXRQcm9wIGFzIGkgfSBmcm9tIFwiLi9oZWxwZXJzLmpzXCI7XG5jb25zdCB1ID0ge1xuICBbZS5DYW5ub3RDb250YWluQ2hhcmFjdGVyc106IChhLCBuKSA9PiB7XG4gICAgY29uc3QgdCA9IGkobiwgXCJmb3JiaWRkZW5DaGFyc1wiLCBcIlwiKTtcbiAgICByZXR1cm4gYCR7YX0gbXVzdCBub3QgY29udGFpbiBmb2xsb3dpbmcgY2hhcmFjdGVyczogXCIke3R9XCJgO1xuICB9LFxuICBbZS5DYW5ub3RDb250YWluRHVwbGljYXRlc106IChhLCBuKSA9PiB7XG4gICAgY29uc3QgdCA9IGkobiwgXCJkdXBsaWNhdGVWYWx1ZVwiLCBcIlwiKTtcbiAgICByZXR1cm4gYCR7YX0gIG11c3Qgbm90IGNvbnRhaW4gZHVwbGljYXRlczogXCIke3R9XCJgO1xuICB9LFxuICBbZS5DYW5ub3RDb250YWluT3RoZXJzXTogKGEsIG4pID0+IHtcbiAgICBjb25zdCB0ID0gaShuLCBcImRpc2FsbG93ZWRGaWVsZHNcIiwgXCJcIik7XG4gICAgcmV0dXJuIGAke2F9IG11c3Qgbm90IGNvbnRhaW46IFwiJHt0fVwiYDtcbiAgfSxcbiAgW2UuTGVhc3RDYXBpdGFsTGV0dGVyc106IChhLCBuKSA9PiB7XG4gICAgY29uc3QgdCA9IGkobiwgXCJudW1DYXBzXCIsIDApO1xuICAgIHJldHVybiBgJHthfSBtdXN0IGNvbnRhaW4gYXQgbGVhc3QgJHt0fSBjYXBpdGFsICR7cih0LCBcImxldHRlclwiKX1gO1xuICB9LFxuICBbZS5MZWFzdE51bWJlcnNdOiAoYSwgbikgPT4ge1xuICAgIGNvbnN0IHQgPSBpKG4sIFwibnVtTnVtc1wiLCAwKTtcbiAgICByZXR1cm4gYCR7YX0gbXVzdCBjb250YWluIGF0IGxlYXN0ICR7dH0gbnVtZXJpYyAke3IodCwgXCJ2YWx1ZVwiKX1gO1xuICB9LFxuICBbZS5NYXRjaFJlZ2V4cF06IChhKSA9PiBgJHthfSBoYXMgZmFpbGVkIHRoZSBcIk1BVENIX1JFR0VYUFwiIHBvbGljeWAsXG4gIFtlLk1heGltdW1MZW5ndGhdOiAoYSwgbikgPT4ge1xuICAgIGNvbnN0IHQgPSBpKG4sIFwibWF4TGVuZ3RoXCIsIDApO1xuICAgIHJldHVybiBgJHthfSBtdXN0IGJlIGF0IG1vc3QgJHt0fSAke3IodCwgXCJjaGFyYWN0ZXJcIil9YDtcbiAgfSxcbiAgW2UuTWF4aW11bU51bWJlcl06IChhKSA9PiBgJHthfSBoYXMgZmFpbGVkIHRoZSBcIk1BWElNVU1fTlVNQkVSX1ZBTFVFXCIgcG9saWN5YCxcbiAgW2UuTWluaW11bUxlbmd0aF06IChhLCBuKSA9PiB7XG4gICAgY29uc3QgdCA9IGkobiwgXCJtaW5MZW5ndGhcIiwgMCk7XG4gICAgcmV0dXJuIGAke2F9IG11c3QgYmUgYXQgbGVhc3QgJHt0fSAke3IodCwgXCJjaGFyYWN0ZXJcIil9YDtcbiAgfSxcbiAgW2UuTWluaW11bU51bWJlcl06IChhKSA9PiBgJHthfSBoYXMgZmFpbGVkIHRoZSBcIk1JTklNVU1fTlVNQkVSX1ZBTFVFXCIgcG9saWN5YCxcbiAgW2UuUmVxdWlyZWRdOiAoYSkgPT4gYCR7YX0gaXMgcmVxdWlyZWRgLFxuICBbZS5VbmlxdWVdOiAoYSkgPT4gYCR7YX0gbXVzdCBiZSB1bmlxdWVgLFxuICBbZS5Vbmtub3duUG9saWN5XTogKGEsIG4pID0+IHtcbiAgICBjb25zdCB0ID0gaShuLCBcInBvbGljeVJlcXVpcmVtZW50XCIsIFwiVW5rbm93blwiKTtcbiAgICByZXR1cm4gYCR7YX06IFVua25vd24gcG9saWN5IHJlcXVpcmVtZW50IFwiJHt0fVwiYDtcbiAgfSxcbiAgW2UuVmFsaWRBcnJheUl0ZW1zXTogKGEpID0+IGAke2F9IGhhcyBmYWlsZWQgdGhlIFwiVkFMSURfQVJSQVlfSVRFTVNcIiBwb2xpY3lgLFxuICBbZS5WYWxpZERhdGVdOiAoYSkgPT4gYCR7YX0gaGFzIGFuIGludmFsaWQgZGF0ZWAsXG4gIFtlLlZhbGlkRW1haWxBZGRyZXNzXTogKGEpID0+IGAke2F9IGhhcyBhbiBpbnZhbGlkIGVtYWlsIGFkZHJlc3NgLFxuICBbZS5WYWxpZE5hbWVGb3JtYXRdOiAoYSkgPT4gYCR7YX0gaGFzIGFuIGludmFsaWQgbmFtZSBmb3JtYXRgLFxuICBbZS5WYWxpZE51bWJlcl06IChhKSA9PiBgJHthfSBoYXMgYW4gaW52YWxpZCBudW1iZXJgLFxuICBbZS5WYWxpZFBob25lRm9ybWF0XTogKGEpID0+IGAke2F9IGhhcyBhbiBpbnZhbGlkIHBob25lIG51bWJlcmAsXG4gIFtlLlZhbGlkUXVlcnlGaWx0ZXJdOiAoYSkgPT4gYCR7YX0gaGFzIGZhaWxlZCB0aGUgXCJWQUxJRF9RVUVSWV9GSUxURVJcIiBwb2xpY3lgLFxuICBbZS5WYWxpZFR5cGVdOiAoYSkgPT4gYCR7YX0gaGFzIGZhaWxlZCB0aGUgXCJWQUxJRF9UWVBFXCIgcG9saWN5YFxufTtcbmV4cG9ydCB7XG4gIHUgYXMgZGVmYXVsdFxufTtcbiIsImltcG9ydCB7IFBvbGljeUtleSBhcyBuIH0gZnJvbSBcIi4vZW51bXMuanNcIjtcbmltcG9ydCBpIGZyb20gXCIuL21lc3NhZ2UtY3JlYXRvci5qc1wiO1xuY2xhc3MgeSB7XG4gIC8qKlxuICAgKiBQYXJzZXMgcG9saWN5IGVycm9ycyBhbmQgZ2VuZXJhdGVzIGh1bWFuIHJlYWRhYmxlIGVycm9yIG1lc3NhZ2VzLlxuICAgKlxuICAgKiBAcGFyYW0ge1N0ZXB9IGVyciBUaGUgc3RlcCBjb250YWluaW5nIHRoZSBlcnJvci5cbiAgICogQHBhcmFtIHtNZXNzYWdlQ3JlYXRvcn0gbWVzc2FnZUNyZWF0b3JcbiAgICogRXh0ZW5zaWJsZSBhbmQgb3ZlcnJpZGFibGUgY3VzdG9tIGVycm9yIG1lc3NhZ2VzIGZvciBwb2xpY3kgZmFpbHVyZXMuXG4gICAqIEByZXR1cm4ge1Byb2Nlc3NlZFByb3BlcnR5RXJyb3JbXX0gQXJyYXkgb2Ygb2JqZWN0cyBjb250YWluaW5nIGFsbCBwcm9jZXNzZWQgcG9saWN5IGVycm9ycy5cbiAgICovXG4gIHN0YXRpYyBwYXJzZUVycm9ycyhlLCByKSB7XG4gICAgY29uc3QgcyA9IFtdO1xuICAgIHJldHVybiBlLmRldGFpbCAmJiBlLmRldGFpbC5mYWlsZWRQb2xpY3lSZXF1aXJlbWVudHMgJiYgZS5kZXRhaWwuZmFpbGVkUG9saWN5UmVxdWlyZW1lbnRzLm1hcCgodCkgPT4ge1xuICAgICAgcy5wdXNoLmFwcGx5KHMsIFtcbiAgICAgICAge1xuICAgICAgICAgIGRldGFpbDogdCxcbiAgICAgICAgICBtZXNzYWdlczogdGhpcy5wYXJzZUZhaWxlZFBvbGljeVJlcXVpcmVtZW50KHQsIHIpXG4gICAgICAgIH1cbiAgICAgIF0pO1xuICAgIH0pLCBzO1xuICB9XG4gIC8qKlxuICAgKiBQYXJzZXMgYSBmYWlsZWQgcG9saWN5IGFuZCByZXR1cm5zIGEgc3RyaW5nIGFycmF5IG9mIGVycm9yIG1lc3NhZ2VzLlxuICAgKlxuICAgKiBAcGFyYW0ge0ZhaWxlZFBvbGljeVJlcXVpcmVtZW50fSBmYWlsZWRQb2xpY3kgVGhlIGRldGFpbCBkYXRhIG9mIHRoZSBmYWlsZWQgcG9saWN5LlxuICAgKiBAcGFyYW0ge01lc3NhZ2VDcmVhdG9yfSBjdXN0b21NZXNzYWdlXG4gICAqIEV4dGVuc2libGUgYW5kIG92ZXJyaWRhYmxlIGN1c3RvbSBlcnJvciBtZXNzYWdlcyBmb3IgcG9saWN5IGZhaWx1cmVzLlxuICAgKiBAcmV0dXJuIHtzdHJpbmdbXX0gQXJyYXkgb2Ygc3RyaW5ncyB3aXRoIGFsbCBwcm9jZXNzZWQgcG9saWN5IGVycm9ycy5cbiAgICovXG4gIHN0YXRpYyBwYXJzZUZhaWxlZFBvbGljeVJlcXVpcmVtZW50KGUsIHIpIHtcbiAgICBjb25zdCBzID0gW107XG4gICAgcmV0dXJuIGUucG9saWN5UmVxdWlyZW1lbnRzLm1hcCgodCkgPT4ge1xuICAgICAgcy5wdXNoKFxuICAgICAgICB0aGlzLnBhcnNlUG9saWN5UmVxdWlyZW1lbnQoZS5wcm9wZXJ0eSwgdCwgcilcbiAgICAgICk7XG4gICAgfSksIHM7XG4gIH1cbiAgLyoqXG4gICAqIFBhcnNlcyBhIHBvbGljeSBlcnJvciBpbnRvIGEgaHVtYW4gcmVhZGFibGUgZXJyb3IgbWVzc2FnZS5cbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IHByb3BlcnR5IFRoZSBwcm9wZXJ0eSB3aXRoIHRoZSBwb2xpY3kgZmFpbHVyZS5cbiAgICogQHBhcmFtIHtQb2xpY3lSZXF1aXJlbWVudH0gcG9saWN5IFRoZSBwb2xpY3kgZmFpbHVyZSBkYXRhLlxuICAgKiBAcGFyYW0ge01lc3NhZ2VDcmVhdG9yfSBjdXN0b21NZXNzYWdlXG4gICAqIEV4dGVuc2libGUgYW5kIG92ZXJyaWRhYmxlIGN1c3RvbSBlcnJvciBtZXNzYWdlcyBmb3IgcG9saWN5IGZhaWx1cmVzLlxuICAgKiBAcmV0dXJuIHtzdHJpbmd9IEh1bWFuIHJlYWRhYmxlIGVycm9yIG1lc3NhZ2UuXG4gICAqL1xuICBzdGF0aWMgcGFyc2VQb2xpY3lSZXF1aXJlbWVudChlLCByLCBzID0ge30pIHtcbiAgICBjb25zdCB0ID0gdHlwZW9mIHIgPT0gXCJzdHJpbmdcIiA/IEpTT04ucGFyc2UocikgOiB7IC4uLnIgfSwgYSA9IHQucG9saWN5UmVxdWlyZW1lbnQsIG8gPSBzW2FdIHx8IGlbYV0gfHwgaVtuLlVua25vd25Qb2xpY3ldLCBjID0gdC5wYXJhbXMgPyB7IC4uLnQucGFyYW1zLCBwb2xpY3lSZXF1aXJlbWVudDogYSB9IDogeyBwb2xpY3lSZXF1aXJlbWVudDogYSB9O1xuICAgIHJldHVybiBvKGUsIGMpO1xuICB9XG59XG5leHBvcnQge1xuICBuIGFzIFBvbGljeUtleSxcbiAgeSBhcyBkZWZhdWx0XG59O1xuIiwidmFyIHIgPSAvKiBAX19QVVJFX18gKi8gKChpKSA9PiAoaS5Mb2dpbkZhaWx1cmUgPSBcIkxvZ2luRmFpbHVyZVwiLCBpLkxvZ2luU3VjY2VzcyA9IFwiTG9naW5TdWNjZXNzXCIsIGkuU3RlcCA9IFwiU3RlcFwiLCBpKSkociB8fCB7fSk7XG5leHBvcnQge1xuICByIGFzIFN0ZXBUeXBlXG59O1xuIiwiaW1wb3J0IHQgZnJvbSBcIi4uL2ZyLXBvbGljeS9pbmRleC5qc1wiO1xuaW1wb3J0IHsgU3RlcFR5cGUgYXMgciB9IGZyb20gXCIuL2VudW1zLmpzXCI7XG5jbGFzcyBpIHtcbiAgLyoqXG4gICAqIEBwYXJhbSBwYXlsb2FkIFRoZSByYXcgcGF5bG9hZCByZXR1cm5lZCBieSBPcGVuQU1cbiAgICovXG4gIGNvbnN0cnVjdG9yKGUpIHtcbiAgICB0aGlzLnBheWxvYWQgPSBlLCB0aGlzLnR5cGUgPSByLkxvZ2luRmFpbHVyZTtcbiAgfVxuICAvKipcbiAgICogR2V0cyB0aGUgZXJyb3IgY29kZS5cbiAgICovXG4gIGdldENvZGUoKSB7XG4gICAgcmV0dXJuIE51bWJlcih0aGlzLnBheWxvYWQuY29kZSk7XG4gIH1cbiAgLyoqXG4gICAqIEdldHMgdGhlIGZhaWx1cmUgZGV0YWlscy5cbiAgICovXG4gIGdldERldGFpbCgpIHtcbiAgICByZXR1cm4gdGhpcy5wYXlsb2FkLmRldGFpbDtcbiAgfVxuICAvKipcbiAgICogR2V0cyB0aGUgZmFpbHVyZSBtZXNzYWdlLlxuICAgKi9cbiAgZ2V0TWVzc2FnZSgpIHtcbiAgICByZXR1cm4gdGhpcy5wYXlsb2FkLm1lc3NhZ2U7XG4gIH1cbiAgLyoqXG4gICAqIEdldHMgcHJvY2Vzc2VkIGZhaWx1cmUgbWVzc2FnZS5cbiAgICovXG4gIGdldFByb2Nlc3NlZE1lc3NhZ2UoZSkge1xuICAgIHJldHVybiB0LnBhcnNlRXJyb3JzKHRoaXMucGF5bG9hZCwgZSk7XG4gIH1cbiAgLyoqXG4gICAqIEdldHMgdGhlIGZhaWx1cmUgcmVhc29uLlxuICAgKi9cbiAgZ2V0UmVhc29uKCkge1xuICAgIHJldHVybiB0aGlzLnBheWxvYWQucmVhc29uO1xuICB9XG59XG5leHBvcnQge1xuICBpIGFzIGRlZmF1bHRcbn07XG4iLCJpbXBvcnQgeyBTdGVwVHlwZSBhcyBzIH0gZnJvbSBcIi4vZW51bXMuanNcIjtcbmNsYXNzIHIge1xuICAvKipcbiAgICogQHBhcmFtIHBheWxvYWQgVGhlIHJhdyBwYXlsb2FkIHJldHVybmVkIGJ5IE9wZW5BTVxuICAgKi9cbiAgY29uc3RydWN0b3IoZSkge1xuICAgIHRoaXMucGF5bG9hZCA9IGUsIHRoaXMudHlwZSA9IHMuTG9naW5TdWNjZXNzO1xuICB9XG4gIC8qKlxuICAgKiBHZXRzIHRoZSBzdGVwJ3MgcmVhbG0uXG4gICAqL1xuICBnZXRSZWFsbSgpIHtcbiAgICByZXR1cm4gdGhpcy5wYXlsb2FkLnJlYWxtO1xuICB9XG4gIC8qKlxuICAgKiBHZXRzIHRoZSBzdGVwJ3Mgc2Vzc2lvbiB0b2tlbi5cbiAgICovXG4gIGdldFNlc3Npb25Ub2tlbigpIHtcbiAgICByZXR1cm4gdGhpcy5wYXlsb2FkLnRva2VuSWQ7XG4gIH1cbiAgLyoqXG4gICAqIEdldHMgdGhlIHN0ZXAncyBzdWNjZXNzIFVSTC5cbiAgICovXG4gIGdldFN1Y2Nlc3NVcmwoKSB7XG4gICAgcmV0dXJuIHRoaXMucGF5bG9hZC5zdWNjZXNzVXJsO1xuICB9XG59XG5leHBvcnQge1xuICByIGFzIGRlZmF1bHRcbn07XG4iLCJjbGFzcyByIHtcbiAgLyoqXG4gICAqIEBwYXJhbSBwYXlsb2FkIFRoZSByYXcgcGF5bG9hZCByZXR1cm5lZCBieSBPcGVuQU1cbiAgICovXG4gIGNvbnN0cnVjdG9yKGUpIHtcbiAgICB0aGlzLnBheWxvYWQgPSBlO1xuICB9XG4gIC8qKlxuICAgKiBHZXRzIHRoZSBuYW1lIG9mIHRoaXMgY2FsbGJhY2sgdHlwZS5cbiAgICovXG4gIGdldFR5cGUoKSB7XG4gICAgcmV0dXJuIHRoaXMucGF5bG9hZC50eXBlO1xuICB9XG4gIC8qKlxuICAgKiBHZXRzIHRoZSB2YWx1ZSBvZiB0aGUgc3BlY2lmaWVkIGlucHV0IGVsZW1lbnQsIG9yIHRoZSBmaXJzdCBlbGVtZW50IGlmIGBzZWxlY3RvcmAgaXMgbm90XG4gICAqIHByb3ZpZGVkLlxuICAgKlxuICAgKiBAcGFyYW0gc2VsZWN0b3IgVGhlIGluZGV4IHBvc2l0aW9uIG9yIG5hbWUgb2YgdGhlIGRlc2lyZWQgZWxlbWVudFxuICAgKi9cbiAgZ2V0SW5wdXRWYWx1ZShlID0gMCkge1xuICAgIHJldHVybiB0aGlzLmdldEFycmF5RWxlbWVudCh0aGlzLnBheWxvYWQuaW5wdXQsIGUpLnZhbHVlO1xuICB9XG4gIC8qKlxuICAgKiBTZXRzIHRoZSB2YWx1ZSBvZiB0aGUgc3BlY2lmaWVkIGlucHV0IGVsZW1lbnQsIG9yIHRoZSBmaXJzdCBlbGVtZW50IGlmIGBzZWxlY3RvcmAgaXMgbm90XG4gICAqIHByb3ZpZGVkLlxuICAgKlxuICAgKiBAcGFyYW0gc2VsZWN0b3IgVGhlIGluZGV4IHBvc2l0aW9uIG9yIG5hbWUgb2YgdGhlIGRlc2lyZWQgZWxlbWVudFxuICAgKi9cbiAgc2V0SW5wdXRWYWx1ZShlLCB0ID0gMCkge1xuICAgIHRoaXMuZ2V0QXJyYXlFbGVtZW50KHRoaXMucGF5bG9hZC5pbnB1dCwgdCkudmFsdWUgPSBlO1xuICB9XG4gIC8qKlxuICAgKiBHZXRzIHRoZSB2YWx1ZSBvZiB0aGUgc3BlY2lmaWVkIG91dHB1dCBlbGVtZW50LCBvciB0aGUgZmlyc3QgZWxlbWVudCBpZiBgc2VsZWN0b3JgXG4gICAqIGlzIG5vdCBwcm92aWRlZC5cbiAgICpcbiAgICogQHBhcmFtIHNlbGVjdG9yIFRoZSBpbmRleCBwb3NpdGlvbiBvciBuYW1lIG9mIHRoZSBkZXNpcmVkIGVsZW1lbnRcbiAgICovXG4gIGdldE91dHB1dFZhbHVlKGUgPSAwKSB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0QXJyYXlFbGVtZW50KHRoaXMucGF5bG9hZC5vdXRwdXQsIGUpLnZhbHVlO1xuICB9XG4gIC8qKlxuICAgKiBHZXRzIHRoZSB2YWx1ZSBvZiB0aGUgZmlyc3Qgb3V0cHV0IGVsZW1lbnQgd2l0aCB0aGUgc3BlY2lmaWVkIG5hbWUgb3IgdGhlXG4gICAqIHNwZWNpZmllZCBkZWZhdWx0IHZhbHVlLlxuICAgKlxuICAgKiBAcGFyYW0gbmFtZSBUaGUgbmFtZSBvZiB0aGUgZGVzaXJlZCBlbGVtZW50XG4gICAqL1xuICBnZXRPdXRwdXRCeU5hbWUoZSwgdCkge1xuICAgIGNvbnN0IG4gPSB0aGlzLnBheWxvYWQub3V0cHV0LmZpbmQoKGEpID0+IGEubmFtZSA9PT0gZSk7XG4gICAgcmV0dXJuIG4gPyBuLnZhbHVlIDogdDtcbiAgfVxuICBnZXRBcnJheUVsZW1lbnQoZSwgdCA9IDApIHtcbiAgICBpZiAoZSA9PT0gdm9pZCAwKVxuICAgICAgdGhyb3cgbmV3IEVycm9yKGBObyBOYW1lVmFsdWUgYXJyYXkgd2FzIHByb3ZpZGVkIHRvIHNlYXJjaCAoc2VsZWN0b3IgJHt0fSlgKTtcbiAgICBpZiAodHlwZW9mIHQgPT0gXCJudW1iZXJcIikge1xuICAgICAgaWYgKHQgPCAwIHx8IHQgPiBlLmxlbmd0aCAtIDEpXG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgU2VsZWN0b3IgaW5kZXggJHt0fSBpcyBvdXQgb2YgcmFuZ2VgKTtcbiAgICAgIHJldHVybiBlW3RdO1xuICAgIH1cbiAgICBpZiAodHlwZW9mIHQgPT0gXCJzdHJpbmdcIikge1xuICAgICAgY29uc3QgbiA9IGUuZmluZCgoYSkgPT4gYS5uYW1lID09PSB0KTtcbiAgICAgIGlmICghbilcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBNaXNzaW5nIGNhbGxiYWNrIGlucHV0IGVudHJ5IFwiJHt0fVwiYCk7XG4gICAgICByZXR1cm4gbjtcbiAgICB9XG4gICAgaWYgKHR5cGVvZiB0ID09IFwib2JqZWN0XCIgJiYgdC50ZXN0ICYmIHQuZXhlYykge1xuICAgICAgY29uc3QgbiA9IGUuZmluZCgoYSkgPT4gdC50ZXN0KGEubmFtZSkpO1xuICAgICAgaWYgKCFuKVxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYE1pc3NpbmcgY2FsbGJhY2sgaW5wdXQgZW50cnkgXCIke3R9XCJgKTtcbiAgICAgIHJldHVybiBuO1xuICAgIH1cbiAgICB0aHJvdyBuZXcgRXJyb3IoXCJJbnZhbGlkIHNlbGVjdG9yIHZhbHVlIHR5cGVcIik7XG4gIH1cbn1cbmV4cG9ydCB7XG4gIHIgYXMgZGVmYXVsdFxufTtcbiIsImltcG9ydCByIGZyb20gXCIuL2luZGV4LmpzXCI7XG5jbGFzcyBzIGV4dGVuZHMgciB7XG4gIC8qKlxuICAgKiBAcGFyYW0gcGF5bG9hZCBUaGUgcmF3IHBheWxvYWQgcmV0dXJuZWQgYnkgT3BlbkFNXG4gICAqL1xuICBjb25zdHJ1Y3RvcihlKSB7XG4gICAgc3VwZXIoZSksIHRoaXMucGF5bG9hZCA9IGU7XG4gIH1cbiAgLyoqXG4gICAqIEdldHMgdGhlIGF0dHJpYnV0ZSBuYW1lLlxuICAgKi9cbiAgZ2V0TmFtZSgpIHtcbiAgICByZXR1cm4gdGhpcy5nZXRPdXRwdXRCeU5hbWUoXCJuYW1lXCIsIFwiXCIpO1xuICB9XG4gIC8qKlxuICAgKiBHZXRzIHRoZSBhdHRyaWJ1dGUgcHJvbXB0LlxuICAgKi9cbiAgZ2V0UHJvbXB0KCkge1xuICAgIHJldHVybiB0aGlzLmdldE91dHB1dEJ5TmFtZShcInByb21wdFwiLCBcIlwiKTtcbiAgfVxuICAvKipcbiAgICogR2V0cyB3aGV0aGVyIHRoZSBhdHRyaWJ1dGUgaXMgcmVxdWlyZWQuXG4gICAqL1xuICBpc1JlcXVpcmVkKCkge1xuICAgIHJldHVybiB0aGlzLmdldE91dHB1dEJ5TmFtZShcInJlcXVpcmVkXCIsICExKTtcbiAgfVxuICAvKipcbiAgICogR2V0cyB0aGUgY2FsbGJhY2sncyBmYWlsZWQgcG9saWNpZXMuXG4gICAqL1xuICBnZXRGYWlsZWRQb2xpY2llcygpIHtcbiAgICBjb25zdCBlID0gdGhpcy5nZXRPdXRwdXRCeU5hbWUoXG4gICAgICBcImZhaWxlZFBvbGljaWVzXCIsXG4gICAgICBbXVxuICAgICk7XG4gICAgdHJ5IHtcbiAgICAgIHJldHVybiBlLm1hcCgodCkgPT4gSlNPTi5wYXJzZSh0KSk7XG4gICAgfSBjYXRjaCB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICdVbmFibGUgdG8gcGFyc2UgXCJmYWlsZWQgcG9saWNpZXNcIiBmcm9tIHRoZSBGb3JnZVJvY2sgc2VydmVyLiBUaGUgSlNPTiB3aXRoaW4gYEF0dHJpYnV0ZUlucHV0Q2FsbGJhY2tgIHdhcyBlaXRoZXIgbWFsZm9ybWVkIG9yIG1pc3NpbmcuJ1xuICAgICAgKTtcbiAgICB9XG4gIH1cbiAgLyoqXG4gICAqIEdldHMgdGhlIGNhbGxiYWNrJ3MgYXBwbGljYWJsZSBwb2xpY2llcy5cbiAgICovXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XG4gIGdldFBvbGljaWVzKCkge1xuICAgIHJldHVybiB0aGlzLmdldE91dHB1dEJ5TmFtZShcInBvbGljaWVzXCIsIHt9KTtcbiAgfVxuICAvKipcbiAgICogU2V0IGlmIHZhbGlkYXRpbmcgdmFsdWUgb25seS5cbiAgICovXG4gIHNldFZhbGlkYXRlT25seShlKSB7XG4gICAgdGhpcy5zZXRJbnB1dFZhbHVlKGUsIC92YWxpZGF0ZU9ubHkvKTtcbiAgfVxuICAvKipcbiAgICogU2V0cyB0aGUgYXR0cmlidXRlJ3MgdmFsdWUuXG4gICAqL1xuICBzZXRWYWx1ZShlKSB7XG4gICAgdGhpcy5zZXRJbnB1dFZhbHVlKGUpO1xuICB9XG59XG5leHBvcnQge1xuICBzIGFzIGRlZmF1bHRcbn07XG4iLCJpbXBvcnQgbyBmcm9tIFwiLi9pbmRleC5qc1wiO1xuY2xhc3MgaCBleHRlbmRzIG8ge1xuICAvKipcbiAgICogQHBhcmFtIHBheWxvYWQgVGhlIHJhdyBwYXlsb2FkIHJldHVybmVkIGJ5IE9wZW5BTVxuICAgKi9cbiAgY29uc3RydWN0b3IodCkge1xuICAgIHN1cGVyKHQpLCB0aGlzLnBheWxvYWQgPSB0O1xuICB9XG4gIC8qKlxuICAgKiBHZXRzIHRoZSBjaG9pY2UncyBwcm9tcHQuXG4gICAqL1xuICBnZXRQcm9tcHQoKSB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0T3V0cHV0QnlOYW1lKFwicHJvbXB0XCIsIFwiXCIpO1xuICB9XG4gIC8qKlxuICAgKiBHZXRzIHRoZSBjaG9pY2UncyBkZWZhdWx0IGFuc3dlci5cbiAgICovXG4gIGdldERlZmF1bHRDaG9pY2UoKSB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0T3V0cHV0QnlOYW1lKFwiZGVmYXVsdENob2ljZVwiLCAwKTtcbiAgfVxuICAvKipcbiAgICogR2V0cyB0aGUgY2hvaWNlJ3MgcG9zc2libGUgYW5zd2Vycy5cbiAgICovXG4gIGdldENob2ljZXMoKSB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0T3V0cHV0QnlOYW1lKFwiY2hvaWNlc1wiLCBbXSk7XG4gIH1cbiAgLyoqXG4gICAqIFNldHMgdGhlIGNob2ljZSdzIGFuc3dlciBieSBpbmRleCBwb3NpdGlvbi5cbiAgICovXG4gIHNldENob2ljZUluZGV4KHQpIHtcbiAgICBjb25zdCBlID0gdGhpcy5nZXRDaG9pY2VzKCkubGVuZ3RoO1xuICAgIGlmICh0IDwgMCB8fCB0ID4gZSAtIDEpXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYCR7dH0gaXMgb3V0IG9mIGJvdW5kc2ApO1xuICAgIHRoaXMuc2V0SW5wdXRWYWx1ZSh0KTtcbiAgfVxuICAvKipcbiAgICogU2V0cyB0aGUgY2hvaWNlJ3MgYW5zd2VyIGJ5IHZhbHVlLlxuICAgKi9cbiAgc2V0Q2hvaWNlVmFsdWUodCkge1xuICAgIGNvbnN0IGUgPSB0aGlzLmdldENob2ljZXMoKS5pbmRleE9mKHQpO1xuICAgIGlmIChlID09PSAtMSlcbiAgICAgIHRocm93IG5ldyBFcnJvcihgXCIke3R9XCIgaXMgbm90IGEgdmFsaWQgY2hvaWNlYCk7XG4gICAgdGhpcy5zZXRJbnB1dFZhbHVlKGUpO1xuICB9XG59XG5leHBvcnQge1xuICBoIGFzIGRlZmF1bHRcbn07XG4iLCJpbXBvcnQgciBmcm9tIFwiLi9pbmRleC5qc1wiO1xuY2xhc3MgaSBleHRlbmRzIHIge1xuICAvKipcbiAgICogQHBhcmFtIHBheWxvYWQgVGhlIHJhdyBwYXlsb2FkIHJldHVybmVkIGJ5IE9wZW5BTVxuICAgKi9cbiAgY29uc3RydWN0b3IodCkge1xuICAgIHN1cGVyKHQpLCB0aGlzLnBheWxvYWQgPSB0O1xuICB9XG4gIC8qKlxuICAgKiBHZXRzIHRoZSBpbmRleCBwb3NpdGlvbiBvZiB0aGUgY29uZmlybWF0aW9uJ3MgZGVmYXVsdCBhbnN3ZXIuXG4gICAqL1xuICBnZXREZWZhdWx0T3B0aW9uKCkge1xuICAgIHJldHVybiBOdW1iZXIodGhpcy5nZXRPdXRwdXRCeU5hbWUoXCJkZWZhdWx0T3B0aW9uXCIsIDApKTtcbiAgfVxuICAvKipcbiAgICogR2V0cyB0aGUgY29uZmlybWF0aW9uJ3MgbWVzc2FnZSB0eXBlLlxuICAgKi9cbiAgZ2V0TWVzc2FnZVR5cGUoKSB7XG4gICAgcmV0dXJuIE51bWJlcih0aGlzLmdldE91dHB1dEJ5TmFtZShcIm1lc3NhZ2VUeXBlXCIsIDApKTtcbiAgfVxuICAvKipcbiAgICogR2V0cyB0aGUgY29uZmlybWF0aW9uJ3MgcG9zc2libGUgYW5zd2Vycy5cbiAgICovXG4gIGdldE9wdGlvbnMoKSB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0T3V0cHV0QnlOYW1lKFwib3B0aW9uc1wiLCBbXSk7XG4gIH1cbiAgLyoqXG4gICAqIEdldHMgdGhlIGNvbmZpcm1hdGlvbidzIG9wdGlvbiB0eXBlLlxuICAgKi9cbiAgZ2V0T3B0aW9uVHlwZSgpIHtcbiAgICByZXR1cm4gTnVtYmVyKHRoaXMuZ2V0T3V0cHV0QnlOYW1lKFwib3B0aW9uVHlwZVwiLCAwKSk7XG4gIH1cbiAgLyoqXG4gICAqIEdldHMgdGhlIGNvbmZpcm1hdGlvbidzIHByb21wdC5cbiAgICovXG4gIGdldFByb21wdCgpIHtcbiAgICByZXR1cm4gdGhpcy5nZXRPdXRwdXRCeU5hbWUoXCJwcm9tcHRcIiwgXCJcIik7XG4gIH1cbiAgLyoqXG4gICAqIFNldCBvcHRpb24gaW5kZXguXG4gICAqL1xuICBzZXRPcHRpb25JbmRleCh0KSB7XG4gICAgaWYgKHQgIT09IDAgJiYgdCAhPT0gMSlcbiAgICAgIHRocm93IG5ldyBFcnJvcihgXCIke3R9XCIgaXMgbm90IGEgdmFsaWQgY2hvaWNlYCk7XG4gICAgdGhpcy5zZXRJbnB1dFZhbHVlKHQpO1xuICB9XG4gIC8qKlxuICAgKiBTZXQgb3B0aW9uIHZhbHVlLlxuICAgKi9cbiAgc2V0T3B0aW9uVmFsdWUodCkge1xuICAgIGNvbnN0IGUgPSB0aGlzLmdldE9wdGlvbnMoKS5pbmRleE9mKHQpO1xuICAgIGlmIChlID09PSAtMSlcbiAgICAgIHRocm93IG5ldyBFcnJvcihgXCIke3R9XCIgaXMgbm90IGEgdmFsaWQgY2hvaWNlYCk7XG4gICAgdGhpcy5zZXRJbnB1dFZhbHVlKGUpO1xuICB9XG59XG5leHBvcnQge1xuICBpIGFzIGRlZmF1bHRcbn07XG4iLCJpbXBvcnQgdCBmcm9tIFwiLi9pbmRleC5qc1wiO1xuY2xhc3MgaSBleHRlbmRzIHQge1xuICAvKipcbiAgICogQHBhcmFtIHBheWxvYWQgVGhlIHJhdyBwYXlsb2FkIHJldHVybmVkIGJ5IE9wZW5BTVxuICAgKi9cbiAgY29uc3RydWN0b3IoZSkge1xuICAgIHN1cGVyKGUpLCB0aGlzLnBheWxvYWQgPSBlO1xuICB9XG4gIC8qKlxuICAgKiBHZXRzIHRoZSBjYWxsYmFjaydzIGRhdGEuXG4gICAqL1xuICBnZXRNZXNzYWdlKCkge1xuICAgIHJldHVybiB0aGlzLmdldE91dHB1dEJ5TmFtZShcIm1lc3NhZ2VcIiwgXCJcIik7XG4gIH1cbiAgLyoqXG4gICAqIERvZXMgY2FsbGJhY2sgcmVxdWlyZSBtZXRhZGF0YT9cbiAgICovXG4gIGlzTWV0YWRhdGFSZXF1aXJlZCgpIHtcbiAgICByZXR1cm4gdGhpcy5nZXRPdXRwdXRCeU5hbWUoXCJtZXRhZGF0YVwiLCAhMSk7XG4gIH1cbiAgLyoqXG4gICAqIERvZXMgY2FsbGJhY2sgcmVxdWlyZSBsb2NhdGlvbiBkYXRhP1xuICAgKi9cbiAgaXNMb2NhdGlvblJlcXVpcmVkKCkge1xuICAgIHJldHVybiB0aGlzLmdldE91dHB1dEJ5TmFtZShcImxvY2F0aW9uXCIsICExKTtcbiAgfVxuICAvKipcbiAgICogU2V0cyB0aGUgcHJvZmlsZS5cbiAgICovXG4gIHNldFByb2ZpbGUoZSkge1xuICAgIHRoaXMuc2V0SW5wdXRWYWx1ZShKU09OLnN0cmluZ2lmeShlKSk7XG4gIH1cbn1cbmV4cG9ydCB7XG4gIGkgYXMgZGVmYXVsdFxufTtcbiIsImltcG9ydCBlIGZyb20gXCIuL2luZGV4LmpzXCI7XG5jbGFzcyB0IGV4dGVuZHMgZSB7XG4gIC8qKlxuICAgKiBAcGFyYW0gcGF5bG9hZCBUaGUgcmF3IHBheWxvYWQgcmV0dXJuZWQgYnkgT3BlbkFNXG4gICAqL1xuICBjb25zdHJ1Y3RvcihhKSB7XG4gICAgc3VwZXIoYSksIHRoaXMucGF5bG9hZCA9IGE7XG4gIH1cbn1cbmV4cG9ydCB7XG4gIHQgYXMgZGVmYXVsdFxufTtcbiIsImltcG9ydCBuIGZyb20gXCIuL2luZGV4LmpzXCI7XG5jbGFzcyB1IGV4dGVuZHMgbiB7XG4gIC8qKlxuICAgKiBAcGFyYW0gcGF5bG9hZCBUaGUgcmF3IHBheWxvYWQgcmV0dXJuZWQgYnkgT3BlbkFNXG4gICAqL1xuICBjb25zdHJ1Y3Rvcih0KSB7XG4gICAgc3VwZXIodCksIHRoaXMucGF5bG9hZCA9IHQ7XG4gIH1cbiAgLyoqXG4gICAqIEdldHMgdGhlIGNhbGxiYWNrIHByb21wdC5cbiAgICovXG4gIGdldFByb21wdCgpIHtcbiAgICByZXR1cm4gdGhpcy5nZXRPdXRwdXRCeU5hbWUoXCJwcm9tcHRcIiwgXCJcIik7XG4gIH1cbiAgLyoqXG4gICAqIEdldHMgdGhlIGNhbGxiYWNrJ3MgbGlzdCBvZiBwcmUtZGVmaW5lZCBzZWN1cml0eSBxdWVzdGlvbnMuXG4gICAqL1xuICBnZXRQcmVkZWZpbmVkUXVlc3Rpb25zKCkge1xuICAgIHJldHVybiB0aGlzLmdldE91dHB1dEJ5TmFtZShcInByZWRlZmluZWRRdWVzdGlvbnNcIiwgW10pO1xuICB9XG4gIC8qKlxuICAgKiBTZXRzIHRoZSBjYWxsYmFjaydzIHNlY3VyaXR5IHF1ZXN0aW9uLlxuICAgKi9cbiAgc2V0UXVlc3Rpb24odCkge1xuICAgIHRoaXMuc2V0VmFsdWUoXCJxdWVzdGlvblwiLCB0KTtcbiAgfVxuICAvKipcbiAgICogU2V0cyB0aGUgY2FsbGJhY2sncyBzZWN1cml0eSBxdWVzdGlvbiBhbnN3ZXIuXG4gICAqL1xuICBzZXRBbnN3ZXIodCkge1xuICAgIHRoaXMuc2V0VmFsdWUoXCJhbnN3ZXJcIiwgdCk7XG4gIH1cbiAgc2V0VmFsdWUodCwgcykge1xuICAgIGlmICghdGhpcy5wYXlsb2FkLmlucHV0KVxuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiS0JBIHBheWxvYWQgaXMgbWlzc2luZyBpbnB1dFwiKTtcbiAgICBjb25zdCBlID0gdGhpcy5wYXlsb2FkLmlucHV0LmZpbmQoKGkpID0+IGkubmFtZS5lbmRzV2l0aCh0KSk7XG4gICAgaWYgKCFlKVxuICAgICAgdGhyb3cgbmV3IEVycm9yKGBObyBpbnB1dCBoYXMgbmFtZSBlbmRpbmcgaW4gXCIke3R9XCJgKTtcbiAgICBlLnZhbHVlID0gcztcbiAgfVxufVxuZXhwb3J0IHtcbiAgdSBhcyBkZWZhdWx0XG59O1xuIiwiaW1wb3J0IGEgZnJvbSBcIi4vaW5kZXguanNcIjtcbmNsYXNzIHMgZXh0ZW5kcyBhIHtcbiAgLyoqXG4gICAqIEBwYXJhbSBwYXlsb2FkIFRoZSByYXcgcGF5bG9hZCByZXR1cm5lZCBieSBPcGVuQU1cbiAgICovXG4gIGNvbnN0cnVjdG9yKHQpIHtcbiAgICBzdXBlcih0KSwgdGhpcy5wYXlsb2FkID0gdDtcbiAgfVxuICAvKipcbiAgICogR2V0cyB0aGUgY2FsbGJhY2sncyBkYXRhLlxuICAgKi9cbiAgZ2V0RGF0YSgpIHtcbiAgICByZXR1cm4gdGhpcy5nZXRPdXRwdXRCeU5hbWUoXCJkYXRhXCIsIHt9KTtcbiAgfVxufVxuZXhwb3J0IHtcbiAgcyBhcyBkZWZhdWx0XG59O1xuIiwiaW1wb3J0IGUgZnJvbSBcIi4vaW5kZXguanNcIjtcbmNsYXNzIHIgZXh0ZW5kcyBlIHtcbiAgLyoqXG4gICAqIEBwYXJhbSBwYXlsb2FkIFRoZSByYXcgcGF5bG9hZCByZXR1cm5lZCBieSBPcGVuQU1cbiAgICovXG4gIGNvbnN0cnVjdG9yKHQpIHtcbiAgICBzdXBlcih0KSwgdGhpcy5wYXlsb2FkID0gdDtcbiAgfVxuICAvKipcbiAgICogR2V0cyB0aGUgY2FsbGJhY2sncyBwcm9tcHQuXG4gICAqL1xuICBnZXRQcm9tcHQoKSB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0T3V0cHV0QnlOYW1lKFwicHJvbXB0XCIsIFwiXCIpO1xuICB9XG4gIC8qKlxuICAgKiBTZXRzIHRoZSB1c2VybmFtZS5cbiAgICovXG4gIHNldE5hbWUodCkge1xuICAgIHRoaXMuc2V0SW5wdXRWYWx1ZSh0KTtcbiAgfVxufVxuZXhwb3J0IHtcbiAgciBhcyBkZWZhdWx0XG59O1xuIiwiaW1wb3J0IGUgZnJvbSBcIi4vaW5kZXguanNcIjtcbmNsYXNzIHIgZXh0ZW5kcyBlIHtcbiAgLyoqXG4gICAqIEBwYXJhbSBwYXlsb2FkIFRoZSByYXcgcGF5bG9hZCByZXR1cm5lZCBieSBPcGVuQU1cbiAgICovXG4gIGNvbnN0cnVjdG9yKHQpIHtcbiAgICBzdXBlcih0KSwgdGhpcy5wYXlsb2FkID0gdDtcbiAgfVxuICAvKipcbiAgICogR2V0cyB0aGUgY2FsbGJhY2sncyBmYWlsZWQgcG9saWNpZXMuXG4gICAqL1xuICBnZXRGYWlsZWRQb2xpY2llcygpIHtcbiAgICByZXR1cm4gdGhpcy5nZXRPdXRwdXRCeU5hbWUoXCJmYWlsZWRQb2xpY2llc1wiLCBbXSk7XG4gIH1cbiAgLyoqXG4gICAqIEdldHMgdGhlIGNhbGxiYWNrJ3MgYXBwbGljYWJsZSBwb2xpY2llcy5cbiAgICovXG4gIGdldFBvbGljaWVzKCkge1xuICAgIHJldHVybiB0aGlzLmdldE91dHB1dEJ5TmFtZShcInBvbGljaWVzXCIsIFtdKTtcbiAgfVxuICAvKipcbiAgICogR2V0cyB0aGUgY2FsbGJhY2sncyBwcm9tcHQuXG4gICAqL1xuICBnZXRQcm9tcHQoKSB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0T3V0cHV0QnlOYW1lKFwicHJvbXB0XCIsIFwiXCIpO1xuICB9XG4gIC8qKlxuICAgKiBTZXRzIHRoZSBwYXNzd29yZC5cbiAgICovXG4gIHNldFBhc3N3b3JkKHQpIHtcbiAgICB0aGlzLnNldElucHV0VmFsdWUodCk7XG4gIH1cbn1cbmV4cG9ydCB7XG4gIHIgYXMgZGVmYXVsdFxufTtcbiIsImltcG9ydCBhIGZyb20gXCIuL2luZGV4LmpzXCI7XG5jbGFzcyByIGV4dGVuZHMgYSB7XG4gIC8qKlxuICAgKiBAcGFyYW0gcGF5bG9hZCBUaGUgcmF3IHBheWxvYWQgcmV0dXJuZWQgYnkgT3BlbkFNXG4gICAqL1xuICBjb25zdHJ1Y3Rvcih0KSB7XG4gICAgc3VwZXIodCksIHRoaXMucGF5bG9hZCA9IHQ7XG4gIH1cbiAgLyoqXG4gICAqIEdldHMgdGhlIGNhbGxiYWNrJ3MgcGF1c2VCZWhhdmlvcmFsRGF0YSB2YWx1ZS5cbiAgICogQHJldHVybnMge2Jvb2xlYW59XG4gICAqL1xuICBnZXRQYXVzZUJlaGF2aW9yYWxEYXRhKCkge1xuICAgIHJldHVybiB0aGlzLmdldE91dHB1dEJ5TmFtZShcInBhdXNlQmVoYXZpb3JhbERhdGFcIiwgITEpO1xuICB9XG4gIC8qKlxuICAgKiBAbWV0aG9kIHNldERhdGEgLSBTZXQgdGhlIHJlc3VsdCBvZiBkYXRhIGNvbGxlY3Rpb25cbiAgICogQHBhcmFtIHtzdHJpbmd9IGRhdGEgLSBEYXRhIGZyb20gY2FsbGluZyBwaW5nUHJvdGVjdC5nZXQoKVxuICAgKiBAcmV0dXJucyB7dm9pZH1cbiAgICovXG4gIHNldERhdGEodCkge1xuICAgIHRoaXMuc2V0SW5wdXRWYWx1ZSh0LCAvc2lnbmFscy8pO1xuICB9XG4gIC8qKlxuICAgKiBAbWV0aG9kIHNldENsaWVudEVycm9yIC0gU2V0IHRoZSBjbGllbnQgZXJyb3IgbWVzc2FnZVxuICAgKiBAcGFyYW0ge3N0cmluZ30gZXJyb3JNZXNzYWdlIC0gRXJyb3IgbWVzc2FnZVxuICAgKiBAcmV0dXJucyB7dm9pZH1cbiAgICovXG4gIHNldENsaWVudEVycm9yKHQpIHtcbiAgICB0aGlzLnNldElucHV0VmFsdWUodCwgL2NsaWVudEVycm9yLyk7XG4gIH1cbn1cbmV4cG9ydCB7XG4gIHIgYXMgZGVmYXVsdFxufTtcbiIsImltcG9ydCBlIGZyb20gXCIuL2luZGV4LmpzXCI7XG5jbGFzcyBpIGV4dGVuZHMgZSB7XG4gIC8qKlxuICAgKiBAcGFyYW0gcGF5bG9hZCBUaGUgcmF3IHBheWxvYWQgcmV0dXJuZWQgYnkgT3BlbkFNXG4gICAqL1xuICBjb25zdHJ1Y3Rvcih0KSB7XG4gICAgc3VwZXIodCksIHRoaXMucGF5bG9hZCA9IHQ7XG4gIH1cbiAgLyoqXG4gICAqIEdldCBjYWxsYmFjaydzIGluaXRpYWxpemF0aW9uIGNvbmZpZyBzZXR0aW5nc1xuICAgKi9cbiAgZ2V0Q29uZmlnKCkge1xuICAgIHJldHVybiB7XG4gICAgICBlbnZJZDogdGhpcy5nZXRPdXRwdXRCeU5hbWUoXCJlbnZJZFwiLCBcIlwiKSxcbiAgICAgIGNvbnNvbGVMb2dFbmFibGVkOiB0aGlzLmdldE91dHB1dEJ5TmFtZShcImNvbnNvbGVMb2dFbmFibGVkXCIsICExKSxcbiAgICAgIGRldmljZUF0dHJpYnV0ZXNUb0lnbm9yZTogdGhpcy5nZXRPdXRwdXRCeU5hbWUoXCJkZXZpY2VBdHRyaWJ1dGVzVG9JZ25vcmVcIiwgW10pLFxuICAgICAgY3VzdG9tSG9zdDogdGhpcy5nZXRPdXRwdXRCeU5hbWUoXCJjdXN0b21Ib3N0XCIsIFwiXCIpLFxuICAgICAgbGF6eU1ldGFkYXRhOiB0aGlzLmdldE91dHB1dEJ5TmFtZShcImxhenlNZXRhZGF0YVwiLCAhMSksXG4gICAgICBiZWhhdmlvcmFsRGF0YUNvbGxlY3Rpb246IHRoaXMuZ2V0T3V0cHV0QnlOYW1lKFwiYmVoYXZpb3JhbERhdGFDb2xsZWN0aW9uXCIsICEwKSxcbiAgICAgIGRldmljZUtleVJzeW5jSW50ZXJ2YWxzOiB0aGlzLmdldE91dHB1dEJ5TmFtZShcImRldmljZUtleVJzeW5jSW50ZXJ2YWxzXCIsIDE0KSxcbiAgICAgIGVuYWJsZVRydXN0OiB0aGlzLmdldE91dHB1dEJ5TmFtZShcImVuYWJsZVRydXN0XCIsICExKSxcbiAgICAgIGRpc2FibGVUYWdzOiB0aGlzLmdldE91dHB1dEJ5TmFtZShcImRpc2FibGVUYWdzXCIsICExKSxcbiAgICAgIGRpc2FibGVIdWI6IHRoaXMuZ2V0T3V0cHV0QnlOYW1lKFwiZGlzYWJsZUh1YlwiLCAhMSlcbiAgICB9O1xuICB9XG4gIHNldENsaWVudEVycm9yKHQpIHtcbiAgICB0aGlzLnNldElucHV0VmFsdWUodCwgL2NsaWVudEVycm9yLyk7XG4gIH1cbn1cbmV4cG9ydCB7XG4gIGkgYXMgZGVmYXVsdFxufTtcbiIsImltcG9ydCBlIGZyb20gXCIuL2luZGV4LmpzXCI7XG5jbGFzcyByIGV4dGVuZHMgZSB7XG4gIC8qKlxuICAgKiBAcGFyYW0gcGF5bG9hZCBUaGUgcmF3IHBheWxvYWQgcmV0dXJuZWQgYnkgT3BlbkFNXG4gICAqL1xuICBjb25zdHJ1Y3Rvcih0KSB7XG4gICAgc3VwZXIodCksIHRoaXMucGF5bG9hZCA9IHQ7XG4gIH1cbiAgLyoqXG4gICAqIEdldHMgdGhlIG1lc3NhZ2UgdG8gZGlzcGxheSB3aGlsZSBwb2xsaW5nLlxuICAgKi9cbiAgZ2V0TWVzc2FnZSgpIHtcbiAgICByZXR1cm4gdGhpcy5nZXRPdXRwdXRCeU5hbWUoXCJtZXNzYWdlXCIsIFwiXCIpO1xuICB9XG4gIC8qKlxuICAgKiBHZXRzIHRoZSBwb2xsaW5nIGludGVydmFsIGluIG1pbGxpc2Vjb25kcy5cbiAgICovXG4gIGdldFdhaXRUaW1lKCkge1xuICAgIHJldHVybiBOdW1iZXIodGhpcy5nZXRPdXRwdXRCeU5hbWUoXCJ3YWl0VGltZVwiLCAwKSk7XG4gIH1cbn1cbmV4cG9ydCB7XG4gIHIgYXMgZGVmYXVsdFxufTtcbiIsImltcG9ydCBlIGZyb20gXCIuL2luZGV4LmpzXCI7XG5jbGFzcyByIGV4dGVuZHMgZSB7XG4gIC8qKlxuICAgKiBAcGFyYW0gcGF5bG9hZCBUaGUgcmF3IHBheWxvYWQgcmV0dXJuZWQgYnkgT3BlbkFNXG4gICAqL1xuICBjb25zdHJ1Y3Rvcih0KSB7XG4gICAgc3VwZXIodCksIHRoaXMucGF5bG9hZCA9IHQ7XG4gIH1cbiAgLyoqXG4gICAqIEdldHMgdGhlIHJlQ0FQVENIQSBzaXRlIGtleS5cbiAgICovXG4gIGdldFNpdGVLZXkoKSB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0T3V0cHV0QnlOYW1lKFwicmVjYXB0Y2hhU2l0ZUtleVwiLCBcIlwiKTtcbiAgfVxuICAvKipcbiAgICogU2V0cyB0aGUgcmVDQVBUQ0hBIHJlc3VsdC5cbiAgICovXG4gIHNldFJlc3VsdCh0KSB7XG4gICAgdGhpcy5zZXRJbnB1dFZhbHVlKHQpO1xuICB9XG59XG5leHBvcnQge1xuICByIGFzIGRlZmF1bHRcbn07XG4iLCJpbXBvcnQgZSBmcm9tIFwiLi9pbmRleC5qc1wiO1xuY2xhc3MgciBleHRlbmRzIGUge1xuICAvKipcbiAgICogQHBhcmFtIHBheWxvYWQgVGhlIHJhdyBwYXlsb2FkIHJldHVybmVkIGJ5IE9wZW5BTVxuICAgKi9cbiAgY29uc3RydWN0b3IodCkge1xuICAgIHN1cGVyKHQpLCB0aGlzLnBheWxvYWQgPSB0O1xuICB9XG4gIC8qKlxuICAgKiBHZXRzIHRoZSByZUNBUFRDSEEgc2l0ZSBrZXkuXG4gICAqL1xuICBnZXRTaXRlS2V5KCkge1xuICAgIHJldHVybiB0aGlzLmdldE91dHB1dEJ5TmFtZShcInJlY2FwdGNoYVNpdGVLZXlcIiwgXCJcIik7XG4gIH1cbiAgLyoqXG4gICAqIEdldCB0aGUgYXBpIHVybFxuICAgKi9cbiAgZ2V0QXBpVXJsKCkge1xuICAgIHJldHVybiB0aGlzLmdldE91dHB1dEJ5TmFtZShcImNhcHRjaGFBcGlVcmlcIiwgXCJcIik7XG4gIH1cbiAgLyoqXG4gICAqIEdldCB0aGUgY2xhc3MgbmFtZVxuICAgKi9cbiAgZ2V0RWxlbWVudENsYXNzKCkge1xuICAgIHJldHVybiB0aGlzLmdldE91dHB1dEJ5TmFtZShcImNhcHRjaGFEaXZDbGFzc1wiLCBcIlwiKTtcbiAgfVxuICAvKipcbiAgICogU2V0cyB0aGUgcmVDQVBUQ0hBIHJlc3VsdC5cbiAgICovXG4gIHNldFJlc3VsdCh0KSB7XG4gICAgdGhpcy5zZXRJbnB1dFZhbHVlKHQpO1xuICB9XG4gIC8qKlxuICAgKiBTZXQgY2xpZW50IGNsaWVudCBlcnJvclxuICAgKi9cbiAgc2V0Q2xpZW50RXJyb3IodCkge1xuICAgIHRoaXMuc2V0SW5wdXRWYWx1ZSh0LCBcIklEVG9rZW4xY2xpZW50RXJyb3JcIik7XG4gIH1cbiAgLyoqXG4gICAqIFNldCB0aGUgcmVjYXB0Y2hhIHBheWxvYWRcbiAgICovXG4gIHNldFBheWxvYWQodCkge1xuICAgIHRoaXMuc2V0SW5wdXRWYWx1ZSh0LCBcIklEVG9rZW4xcGF5bG9hZFwiKTtcbiAgfVxuICAvKipcbiAgICogU2V0IHRoZSByZWNhcHRjaGEgYWN0aW9uXG4gICAqL1xuICBzZXRBY3Rpb24odCkge1xuICAgIHRoaXMuc2V0SW5wdXRWYWx1ZSh0LCBcIklEVG9rZW4xYWN0aW9uXCIpO1xuICB9XG59XG5leHBvcnQge1xuICByIGFzIGRlZmF1bHRcbn07XG4iLCJpbXBvcnQgZSBmcm9tIFwiLi9pbmRleC5qc1wiO1xuY2xhc3MgYyBleHRlbmRzIGUge1xuICAvKipcbiAgICogQHBhcmFtIHBheWxvYWQgVGhlIHJhdyBwYXlsb2FkIHJldHVybmVkIGJ5IE9wZW5BTVxuICAgKi9cbiAgY29uc3RydWN0b3IodCkge1xuICAgIHN1cGVyKHQpLCB0aGlzLnBheWxvYWQgPSB0O1xuICB9XG4gIC8qKlxuICAgKiBHZXRzIHRoZSByZWRpcmVjdCBVUkwuXG4gICAqL1xuICBnZXRSZWRpcmVjdFVybCgpIHtcbiAgICByZXR1cm4gdGhpcy5nZXRPdXRwdXRCeU5hbWUoXCJyZWRpcmVjdFVybFwiLCBcIlwiKTtcbiAgfVxufVxuZXhwb3J0IHtcbiAgYyBhcyBkZWZhdWx0XG59O1xuIiwiaW1wb3J0IGkgZnJvbSBcIi4vaW5kZXguanNcIjtcbmNsYXNzIGQgZXh0ZW5kcyBpIHtcbiAgLyoqXG4gICAqIEBwYXJhbSBwYXlsb2FkIFRoZSByYXcgcGF5bG9hZCByZXR1cm5lZCBieSBPcGVuQU1cbiAgICovXG4gIGNvbnN0cnVjdG9yKHIpIHtcbiAgICBzdXBlcihyKSwgdGhpcy5wYXlsb2FkID0gcjtcbiAgfVxuICAvKipcbiAgICogR2V0cyB0aGUgYXZhaWxhYmxlIHByb3ZpZGVycy5cbiAgICovXG4gIGdldFByb3ZpZGVycygpIHtcbiAgICByZXR1cm4gdGhpcy5nZXRPdXRwdXRCeU5hbWUoXCJwcm92aWRlcnNcIiwgW10pO1xuICB9XG4gIC8qKlxuICAgKiBTZXRzIHRoZSBwcm92aWRlciBieSBuYW1lLlxuICAgKi9cbiAgc2V0UHJvdmlkZXIocikge1xuICAgIGNvbnN0IHQgPSB0aGlzLmdldFByb3ZpZGVycygpLmZpbmQoKGUpID0+IGUucHJvdmlkZXIgPT09IHIpO1xuICAgIGlmICghdClcbiAgICAgIHRocm93IG5ldyBFcnJvcihgXCIke3J9XCIgaXMgbm90IGEgdmFsaWQgY2hvaWNlYCk7XG4gICAgdGhpcy5zZXRJbnB1dFZhbHVlKHQucHJvdmlkZXIpO1xuICB9XG59XG5leHBvcnQge1xuICBkIGFzIGRlZmF1bHRcbn07XG4iLCJpbXBvcnQgdCBmcm9tIFwiLi9pbmRleC5qc1wiO1xuY2xhc3MgdSBleHRlbmRzIHQge1xuICAvKipcbiAgICogQHBhcmFtIHBheWxvYWQgVGhlIHJhdyBwYXlsb2FkIHJldHVybmVkIGJ5IE9wZW5BTVxuICAgKi9cbiAgY29uc3RydWN0b3IoZSkge1xuICAgIHN1cGVyKGUpLCB0aGlzLnBheWxvYWQgPSBlO1xuICB9XG4gIC8qKlxuICAgKiBHZXRzIHRoZSBtZXNzYWdlIGNvbnRlbnQuXG4gICAqL1xuICBnZXRNZXNzYWdlKCkge1xuICAgIHJldHVybiB0aGlzLmdldE91dHB1dEJ5TmFtZShcIm1lc3NhZ2VcIiwgXCJcIik7XG4gIH1cbiAgLyoqXG4gICAqIEdldHMgdGhlIG1lc3NhZ2UgdHlwZS5cbiAgICovXG4gIGdldE1lc3NhZ2VUeXBlKCkge1xuICAgIHJldHVybiB0aGlzLmdldE91dHB1dEJ5TmFtZShcIm1lc3NhZ2VUeXBlXCIsIFwiXCIpO1xuICB9XG59XG5leHBvcnQge1xuICB1IGFzIGRlZmF1bHRcbn07XG4iLCJpbXBvcnQgZSBmcm9tIFwiLi90ZXh0LW91dHB1dC1jYWxsYmFjay5qc1wiO1xuY2xhc3MgYSBleHRlbmRzIGUge1xuICAvKipcbiAgICogQHBhcmFtIHBheWxvYWQgVGhlIHJhdyBwYXlsb2FkIHJldHVybmVkIGJ5IE9wZW5BTVxuICAgKi9cbiAgY29uc3RydWN0b3IodCkge1xuICAgIHN1cGVyKHQpLCB0aGlzLnBheWxvYWQgPSB0O1xuICB9XG59XG5leHBvcnQge1xuICBhIGFzIGRlZmF1bHRcbn07XG4iLCJpbXBvcnQgZSBmcm9tIFwiLi9pbmRleC5qc1wiO1xuY2xhc3MgYSBleHRlbmRzIGUge1xuICAvKipcbiAgICogQHBhcmFtIHBheWxvYWQgVGhlIHJhdyBwYXlsb2FkIHJldHVybmVkIGJ5IE9wZW5BTVxuICAgKi9cbiAgY29uc3RydWN0b3IodCkge1xuICAgIHN1cGVyKHQpLCB0aGlzLnBheWxvYWQgPSB0O1xuICB9XG4gIC8qKlxuICAgKiBHZXRzIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBjb250ZW50LlxuICAgKi9cbiAgZ2V0VGVybXMoKSB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0T3V0cHV0QnlOYW1lKFwidGVybXNcIiwgXCJcIik7XG4gIH1cbiAgLyoqXG4gICAqIEdldHMgdGhlIHZlcnNpb24gb2YgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zLlxuICAgKi9cbiAgZ2V0VmVyc2lvbigpIHtcbiAgICByZXR1cm4gdGhpcy5nZXRPdXRwdXRCeU5hbWUoXCJ2ZXJzaW9uXCIsIFwiXCIpO1xuICB9XG4gIC8qKlxuICAgKiBHZXRzIHRoZSBkYXRlIG9mIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucy5cbiAgICovXG4gIGdldENyZWF0ZURhdGUoKSB7XG4gICAgY29uc3QgdCA9IHRoaXMuZ2V0T3V0cHV0QnlOYW1lKFwiY3JlYXRlRGF0ZVwiLCBcIlwiKTtcbiAgICByZXR1cm4gbmV3IERhdGUodCk7XG4gIH1cbiAgLyoqXG4gICAqIFNldHMgdGhlIGNhbGxiYWNrJ3MgYWNjZXB0YW5jZS5cbiAgICovXG4gIHNldEFjY2VwdGVkKHQgPSAhMCkge1xuICAgIHRoaXMuc2V0SW5wdXRWYWx1ZSh0KTtcbiAgfVxufVxuZXhwb3J0IHtcbiAgYSBhcyBkZWZhdWx0XG59O1xuIiwiaW1wb3J0IGUgZnJvbSBcIi4vaW5kZXguanNcIjtcbmNsYXNzIHIgZXh0ZW5kcyBlIHtcbiAgLyoqXG4gICAqIEBwYXJhbSBwYXlsb2FkIFRoZSByYXcgcGF5bG9hZCByZXR1cm5lZCBieSBPcGVuQU1cbiAgICovXG4gIGNvbnN0cnVjdG9yKHQpIHtcbiAgICBzdXBlcih0KSwgdGhpcy5wYXlsb2FkID0gdDtcbiAgfVxuICAvKipcbiAgICogR2V0cyB0aGUgY2FsbGJhY2sncyBwcm9tcHQuXG4gICAqL1xuICBnZXRQcm9tcHQoKSB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0T3V0cHV0QnlOYW1lKFwicHJvbXB0XCIsIFwiXCIpO1xuICB9XG4gIC8qKlxuICAgKiBTZXRzIHRoZSBjYWxsYmFjaydzIGlucHV0IHZhbHVlLlxuICAgKi9cbiAgc2V0SW5wdXQodCkge1xuICAgIHRoaXMuc2V0SW5wdXRWYWx1ZSh0KTtcbiAgfVxufVxuZXhwb3J0IHtcbiAgciBhcyBkZWZhdWx0XG59O1xuIiwiaW1wb3J0IGEgZnJvbSBcIi4vaW5kZXguanNcIjtcbmNsYXNzIGkgZXh0ZW5kcyBhIHtcbiAgLyoqXG4gICAqIEBwYXJhbSBwYXlsb2FkIFRoZSByYXcgcGF5bG9hZCByZXR1cm5lZCBieSBPcGVuQU1cbiAgICovXG4gIGNvbnN0cnVjdG9yKGUpIHtcbiAgICBzdXBlcihlKSwgdGhpcy5wYXlsb2FkID0gZTtcbiAgfVxuICAvKipcbiAgICogR2V0cyB0aGUgY2FsbGJhY2sncyBmYWlsZWQgcG9saWNpZXMuXG4gICAqL1xuICBnZXRGYWlsZWRQb2xpY2llcygpIHtcbiAgICBjb25zdCBlID0gdGhpcy5nZXRPdXRwdXRCeU5hbWUoXG4gICAgICBcImZhaWxlZFBvbGljaWVzXCIsXG4gICAgICBbXVxuICAgICk7XG4gICAgdHJ5IHtcbiAgICAgIHJldHVybiBlLm1hcCgodCkgPT4gSlNPTi5wYXJzZSh0KSk7XG4gICAgfSBjYXRjaCB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICdVbmFibGUgdG8gcGFyc2UgXCJmYWlsZWQgcG9saWNpZXNcIiBmcm9tIHRoZSBGb3JnZVJvY2sgc2VydmVyLiBUaGUgSlNPTiB3aXRoaW4gYFZhbGlkYXRlZENyZWF0ZVBhc3N3b3JkQ2FsbGJhY2tgIHdhcyBlaXRoZXIgbWFsZm9ybWVkIG9yIG1pc3NpbmcuJ1xuICAgICAgKTtcbiAgICB9XG4gIH1cbiAgLyoqXG4gICAqIEdldHMgdGhlIGNhbGxiYWNrJ3MgYXBwbGljYWJsZSBwb2xpY2llcy5cbiAgICovXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XG4gIGdldFBvbGljaWVzKCkge1xuICAgIHJldHVybiB0aGlzLmdldE91dHB1dEJ5TmFtZShcInBvbGljaWVzXCIsIHt9KTtcbiAgfVxuICAvKipcbiAgICogR2V0cyB0aGUgY2FsbGJhY2sncyBwcm9tcHQuXG4gICAqL1xuICBnZXRQcm9tcHQoKSB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0T3V0cHV0QnlOYW1lKFwicHJvbXB0XCIsIFwiXCIpO1xuICB9XG4gIC8qKlxuICAgKiBHZXRzIHdoZXRoZXIgdGhlIHBhc3N3b3JkIGlzIHJlcXVpcmVkLlxuICAgKi9cbiAgaXNSZXF1aXJlZCgpIHtcbiAgICByZXR1cm4gdGhpcy5nZXRPdXRwdXRCeU5hbWUoXCJyZXF1aXJlZFwiLCAhMSk7XG4gIH1cbiAgLyoqXG4gICAqIFNldHMgdGhlIGNhbGxiYWNrJ3MgcGFzc3dvcmQuXG4gICAqL1xuICBzZXRQYXNzd29yZChlKSB7XG4gICAgdGhpcy5zZXRJbnB1dFZhbHVlKGUpO1xuICB9XG4gIC8qKlxuICAgKiBTZXQgaWYgdmFsaWRhdGluZyB2YWx1ZSBvbmx5LlxuICAgKi9cbiAgc2V0VmFsaWRhdGVPbmx5KGUpIHtcbiAgICB0aGlzLnNldElucHV0VmFsdWUoZSwgL3ZhbGlkYXRlT25seS8pO1xuICB9XG59XG5leHBvcnQge1xuICBpIGFzIGRlZmF1bHRcbn07XG4iLCJpbXBvcnQgYSBmcm9tIFwiLi9pbmRleC5qc1wiO1xuY2xhc3MgcyBleHRlbmRzIGEge1xuICAvKipcbiAgICogQHBhcmFtIHBheWxvYWQgVGhlIHJhdyBwYXlsb2FkIHJldHVybmVkIGJ5IE9wZW5BTVxuICAgKi9cbiAgY29uc3RydWN0b3IoZSkge1xuICAgIHN1cGVyKGUpLCB0aGlzLnBheWxvYWQgPSBlO1xuICB9XG4gIC8qKlxuICAgKiBHZXRzIHRoZSBjYWxsYmFjaydzIHByb21wdC5cbiAgICovXG4gIGdldFByb21wdCgpIHtcbiAgICByZXR1cm4gdGhpcy5nZXRPdXRwdXRCeU5hbWUoXCJwcm9tcHRcIiwgXCJcIik7XG4gIH1cbiAgLyoqXG4gICAqIEdldHMgdGhlIGNhbGxiYWNrJ3MgZmFpbGVkIHBvbGljaWVzLlxuICAgKi9cbiAgZ2V0RmFpbGVkUG9saWNpZXMoKSB7XG4gICAgY29uc3QgZSA9IHRoaXMuZ2V0T3V0cHV0QnlOYW1lKFxuICAgICAgXCJmYWlsZWRQb2xpY2llc1wiLFxuICAgICAgW11cbiAgICApO1xuICAgIHRyeSB7XG4gICAgICByZXR1cm4gZS5tYXAoKHQpID0+IEpTT04ucGFyc2UodCkpO1xuICAgIH0gY2F0Y2gge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAnVW5hYmxlIHRvIHBhcnNlIFwiZmFpbGVkIHBvbGljaWVzXCIgZnJvbSB0aGUgRm9yZ2VSb2NrIHNlcnZlci4gVGhlIEpTT04gd2l0aGluIGBWYWxpZGF0ZWRDcmVhdGVVc2VybmFtZUNhbGxiYWNrYCB3YXMgZWl0aGVyIG1hbGZvcm1lZCBvciBtaXNzaW5nLidcbiAgICAgICk7XG4gICAgfVxuICB9XG4gIC8qKlxuICAgKiBHZXRzIHRoZSBjYWxsYmFjaydzIGFwcGxpY2FibGUgcG9saWNpZXMuXG4gICAqL1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueVxuICBnZXRQb2xpY2llcygpIHtcbiAgICByZXR1cm4gdGhpcy5nZXRPdXRwdXRCeU5hbWUoXCJwb2xpY2llc1wiLCB7fSk7XG4gIH1cbiAgLyoqXG4gICAqIEdldHMgd2hldGhlciB0aGUgdXNlcm5hbWUgaXMgcmVxdWlyZWQuXG4gICAqL1xuICBpc1JlcXVpcmVkKCkge1xuICAgIHJldHVybiB0aGlzLmdldE91dHB1dEJ5TmFtZShcInJlcXVpcmVkXCIsICExKTtcbiAgfVxuICAvKipcbiAgICogU2V0cyB0aGUgY2FsbGJhY2sncyB1c2VybmFtZS5cbiAgICovXG4gIHNldE5hbWUoZSkge1xuICAgIHRoaXMuc2V0SW5wdXRWYWx1ZShlKTtcbiAgfVxuICAvKipcbiAgICogU2V0IGlmIHZhbGlkYXRpbmcgdmFsdWUgb25seS5cbiAgICovXG4gIHNldFZhbGlkYXRlT25seShlKSB7XG4gICAgdGhpcy5zZXRJbnB1dFZhbHVlKGUsIC92YWxpZGF0ZU9ubHkvKTtcbiAgfVxufVxuZXhwb3J0IHtcbiAgcyBhcyBkZWZhdWx0XG59O1xuIiwiaW1wb3J0IGEgZnJvbSBcIi4vaW5kZXguanNcIjtcbmltcG9ydCB7IENhbGxiYWNrVHlwZSBhcyByIH0gZnJvbSBcIi4uLy4uL2F1dGgvZW51bXMuanNcIjtcbmltcG9ydCB0IGZyb20gXCIuL2F0dHJpYnV0ZS1pbnB1dC1jYWxsYmFjay5qc1wiO1xuaW1wb3J0IG4gZnJvbSBcIi4vY2hvaWNlLWNhbGxiYWNrLmpzXCI7XG5pbXBvcnQgbyBmcm9tIFwiLi9jb25maXJtYXRpb24tY2FsbGJhY2suanNcIjtcbmltcG9ydCBpIGZyb20gXCIuL2RldmljZS1wcm9maWxlLWNhbGxiYWNrLmpzXCI7XG5pbXBvcnQgbCBmcm9tIFwiLi9oaWRkZW4tdmFsdWUtY2FsbGJhY2suanNcIjtcbmltcG9ydCBDIGZyb20gXCIuL2tiYS1jcmVhdGUtY2FsbGJhY2suanNcIjtcbmltcG9ydCBtIGZyb20gXCIuL21ldGFkYXRhLWNhbGxiYWNrLmpzXCI7XG5pbXBvcnQgdSBmcm9tIFwiLi9uYW1lLWNhbGxiYWNrLmpzXCI7XG5pbXBvcnQgcCBmcm9tIFwiLi9wYXNzd29yZC1jYWxsYmFjay5qc1wiO1xuaW1wb3J0IHMgZnJvbSBcIi4vcGluZy1wcm90ZWN0LWV2YWx1YXRpb24tY2FsbGJhY2suanNcIjtcbmltcG9ydCBjIGZyb20gXCIuL3BpbmctcHJvdGVjdC1pbml0aWFsaXplLWNhbGxiYWNrLmpzXCI7XG5pbXBvcnQgZCBmcm9tIFwiLi9wb2xsaW5nLXdhaXQtY2FsbGJhY2suanNcIjtcbmltcG9ydCBiIGZyb20gXCIuL3JlY2FwdGNoYS1jYWxsYmFjay5qc1wiO1xuaW1wb3J0IGYgZnJvbSBcIi4vcmVjYXB0Y2hhLWVudGVycHJpc2UtY2FsbGJhY2suanNcIjtcbmltcG9ydCB3IGZyb20gXCIuL3JlZGlyZWN0LWNhbGxiYWNrLmpzXCI7XG5pbXBvcnQgayBmcm9tIFwiLi9zZWxlY3QtaWRwLWNhbGxiYWNrLmpzXCI7XG5pbXBvcnQgUCBmcm9tIFwiLi9zdXNwZW5kZWQtdGV4dC1vdXRwdXQtY2FsbGJhY2suanNcIjtcbmltcG9ydCBJIGZyb20gXCIuL3Rlcm1zLWFuZC1jb25kaXRpb25zLWNhbGxiYWNrLmpzXCI7XG5pbXBvcnQgVCBmcm9tIFwiLi90ZXh0LWlucHV0LWNhbGxiYWNrLmpzXCI7XG5pbXBvcnQgTyBmcm9tIFwiLi90ZXh0LW91dHB1dC1jYWxsYmFjay5qc1wiO1xuaW1wb3J0IGcgZnJvbSBcIi4vdmFsaWRhdGVkLWNyZWF0ZS1wYXNzd29yZC1jYWxsYmFjay5qc1wiO1xuaW1wb3J0IGggZnJvbSBcIi4vdmFsaWRhdGVkLWNyZWF0ZS11c2VybmFtZS1jYWxsYmFjay5qc1wiO1xuZnVuY3Rpb24gWChlKSB7XG4gIHN3aXRjaCAoZS50eXBlKSB7XG4gICAgY2FzZSByLkJvb2xlYW5BdHRyaWJ1dGVJbnB1dENhbGxiYWNrOlxuICAgICAgcmV0dXJuIG5ldyB0KGUpO1xuICAgIGNhc2Ugci5DaG9pY2VDYWxsYmFjazpcbiAgICAgIHJldHVybiBuZXcgbihlKTtcbiAgICBjYXNlIHIuQ29uZmlybWF0aW9uQ2FsbGJhY2s6XG4gICAgICByZXR1cm4gbmV3IG8oZSk7XG4gICAgY2FzZSByLkRldmljZVByb2ZpbGVDYWxsYmFjazpcbiAgICAgIHJldHVybiBuZXcgaShlKTtcbiAgICBjYXNlIHIuSGlkZGVuVmFsdWVDYWxsYmFjazpcbiAgICAgIHJldHVybiBuZXcgbChlKTtcbiAgICBjYXNlIHIuS2JhQ3JlYXRlQ2FsbGJhY2s6XG4gICAgICByZXR1cm4gbmV3IEMoZSk7XG4gICAgY2FzZSByLk1ldGFkYXRhQ2FsbGJhY2s6XG4gICAgICByZXR1cm4gbmV3IG0oZSk7XG4gICAgY2FzZSByLk5hbWVDYWxsYmFjazpcbiAgICAgIHJldHVybiBuZXcgdShlKTtcbiAgICBjYXNlIHIuTnVtYmVyQXR0cmlidXRlSW5wdXRDYWxsYmFjazpcbiAgICAgIHJldHVybiBuZXcgdChlKTtcbiAgICBjYXNlIHIuUGFzc3dvcmRDYWxsYmFjazpcbiAgICAgIHJldHVybiBuZXcgcChlKTtcbiAgICBjYXNlIHIuUGluZ09uZVByb3RlY3RFdmFsdWF0aW9uQ2FsbGJhY2s6XG4gICAgICByZXR1cm4gbmV3IHMoZSk7XG4gICAgY2FzZSByLlBpbmdPbmVQcm90ZWN0SW5pdGlhbGl6ZUNhbGxiYWNrOlxuICAgICAgcmV0dXJuIG5ldyBjKGUpO1xuICAgIGNhc2Ugci5Qb2xsaW5nV2FpdENhbGxiYWNrOlxuICAgICAgcmV0dXJuIG5ldyBkKGUpO1xuICAgIGNhc2Ugci5SZUNhcHRjaGFDYWxsYmFjazpcbiAgICAgIHJldHVybiBuZXcgYihlKTtcbiAgICBjYXNlIHIuUmVDYXB0Y2hhRW50ZXJwcmlzZUNhbGxiYWNrOlxuICAgICAgcmV0dXJuIG5ldyBmKGUpO1xuICAgIGNhc2Ugci5SZWRpcmVjdENhbGxiYWNrOlxuICAgICAgcmV0dXJuIG5ldyB3KGUpO1xuICAgIGNhc2Ugci5TZWxlY3RJZFBDYWxsYmFjazpcbiAgICAgIHJldHVybiBuZXcgayhlKTtcbiAgICBjYXNlIHIuU3RyaW5nQXR0cmlidXRlSW5wdXRDYWxsYmFjazpcbiAgICAgIHJldHVybiBuZXcgdChlKTtcbiAgICBjYXNlIHIuU3VzcGVuZGVkVGV4dE91dHB1dENhbGxiYWNrOlxuICAgICAgcmV0dXJuIG5ldyBQKGUpO1xuICAgIGNhc2Ugci5UZXJtc0FuZENvbmRpdGlvbnNDYWxsYmFjazpcbiAgICAgIHJldHVybiBuZXcgSShlKTtcbiAgICBjYXNlIHIuVGV4dElucHV0Q2FsbGJhY2s6XG4gICAgICByZXR1cm4gbmV3IFQoZSk7XG4gICAgY2FzZSByLlRleHRPdXRwdXRDYWxsYmFjazpcbiAgICAgIHJldHVybiBuZXcgTyhlKTtcbiAgICBjYXNlIHIuVmFsaWRhdGVkQ3JlYXRlUGFzc3dvcmRDYWxsYmFjazpcbiAgICAgIHJldHVybiBuZXcgZyhlKTtcbiAgICBjYXNlIHIuVmFsaWRhdGVkQ3JlYXRlVXNlcm5hbWVDYWxsYmFjazpcbiAgICAgIHJldHVybiBuZXcgaChlKTtcbiAgICBkZWZhdWx0OlxuICAgICAgcmV0dXJuIG5ldyBhKGUpO1xuICB9XG59XG5leHBvcnQge1xuICBYIGFzIGRlZmF1bHRcbn07XG4iLCJpbXBvcnQgYyBmcm9tIFwiLi9jYWxsYmFja3MvZmFjdG9yeS5qc1wiO1xuaW1wb3J0IHsgU3RlcFR5cGUgYXMgciB9IGZyb20gXCIuL2VudW1zLmpzXCI7XG5jbGFzcyBpIHtcbiAgLyoqXG4gICAqIEBwYXJhbSBwYXlsb2FkIFRoZSByYXcgcGF5bG9hZCByZXR1cm5lZCBieSBPcGVuQU1cbiAgICogQHBhcmFtIGNhbGxiYWNrRmFjdG9yeSBBIGZ1bmN0aW9uIHRoYXQgcmV0dXJucyBhbSBpbXBsZW1lbnRhdGlvbiBvZiBGUkNhbGxiYWNrXG4gICAqL1xuICBjb25zdHJ1Y3Rvcih0LCBlKSB7XG4gICAgdGhpcy5wYXlsb2FkID0gdCwgdGhpcy50eXBlID0gci5TdGVwLCB0aGlzLmNhbGxiYWNrcyA9IFtdLCB0LmNhbGxiYWNrcyAmJiAodGhpcy5jYWxsYmFja3MgPSB0aGlzLmNvbnZlcnRDYWxsYmFja3ModC5jYWxsYmFja3MsIGUpKTtcbiAgfVxuICAvKipcbiAgICogR2V0cyB0aGUgZmlyc3QgY2FsbGJhY2sgb2YgdGhlIHNwZWNpZmllZCB0eXBlIGluIHRoaXMgc3RlcC5cbiAgICpcbiAgICogQHBhcmFtIHR5cGUgVGhlIHR5cGUgb2YgY2FsbGJhY2sgdG8gZmluZC5cbiAgICovXG4gIGdldENhbGxiYWNrT2ZUeXBlKHQpIHtcbiAgICBjb25zdCBlID0gdGhpcy5nZXRDYWxsYmFja3NPZlR5cGUodCk7XG4gICAgaWYgKGUubGVuZ3RoICE9PSAxKVxuICAgICAgdGhyb3cgbmV3IEVycm9yKGBFeHBlY3RlZCAxIGNhbGxiYWNrIG9mIHR5cGUgXCIke3R9XCIsIGJ1dCBmb3VuZCAke2UubGVuZ3RofWApO1xuICAgIHJldHVybiBlWzBdO1xuICB9XG4gIC8qKlxuICAgKiBHZXRzIGFsbCBjYWxsYmFja3Mgb2YgdGhlIHNwZWNpZmllZCB0eXBlIGluIHRoaXMgc3RlcC5cbiAgICpcbiAgICogQHBhcmFtIHR5cGUgVGhlIHR5cGUgb2YgY2FsbGJhY2sgdG8gZmluZC5cbiAgICovXG4gIGdldENhbGxiYWNrc09mVHlwZSh0KSB7XG4gICAgcmV0dXJuIHRoaXMuY2FsbGJhY2tzLmZpbHRlcigoZSkgPT4gZS5nZXRUeXBlKCkgPT09IHQpO1xuICB9XG4gIC8qKlxuICAgKiBTZXRzIHRoZSB2YWx1ZSBvZiB0aGUgZmlyc3QgY2FsbGJhY2sgb2YgdGhlIHNwZWNpZmllZCB0eXBlIGluIHRoaXMgc3RlcC5cbiAgICpcbiAgICogQHBhcmFtIHR5cGUgVGhlIHR5cGUgb2YgY2FsbGJhY2sgdG8gZmluZC5cbiAgICogQHBhcmFtIHZhbHVlIFRoZSB2YWx1ZSB0byBzZXQgZm9yIHRoZSBjYWxsYmFjay5cbiAgICovXG4gIHNldENhbGxiYWNrVmFsdWUodCwgZSkge1xuICAgIGNvbnN0IGEgPSB0aGlzLmdldENhbGxiYWNrc09mVHlwZSh0KTtcbiAgICBpZiAoYS5sZW5ndGggIT09IDEpXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYEV4cGVjdGVkIDEgY2FsbGJhY2sgb2YgdHlwZSBcIiR7dH1cIiwgYnV0IGZvdW5kICR7YS5sZW5ndGh9YCk7XG4gICAgYVswXS5zZXRJbnB1dFZhbHVlKGUpO1xuICB9XG4gIC8qKlxuICAgKiBHZXRzIHRoZSBzdGVwJ3MgZGVzY3JpcHRpb24uXG4gICAqL1xuICBnZXREZXNjcmlwdGlvbigpIHtcbiAgICByZXR1cm4gdGhpcy5wYXlsb2FkLmRlc2NyaXB0aW9uO1xuICB9XG4gIC8qKlxuICAgKiBHZXRzIHRoZSBzdGVwJ3MgaGVhZGVyLlxuICAgKi9cbiAgZ2V0SGVhZGVyKCkge1xuICAgIHJldHVybiB0aGlzLnBheWxvYWQuaGVhZGVyO1xuICB9XG4gIC8qKlxuICAgKiBHZXRzIHRoZSBzdGVwJ3Mgc3RhZ2UuXG4gICAqL1xuICBnZXRTdGFnZSgpIHtcbiAgICByZXR1cm4gdGhpcy5wYXlsb2FkLnN0YWdlO1xuICB9XG4gIGNvbnZlcnRDYWxsYmFja3ModCwgZSkge1xuICAgIHJldHVybiB0Lm1hcCgobCkgPT4gKGUgfHwgYykobCkgfHwgYyhsKSk7XG4gIH1cbn1cbmV4cG9ydCB7XG4gIGkgYXMgZGVmYXVsdFxufTtcbiIsImltcG9ydCB2IGZyb20gXCIuLi9jb25maWcvaW5kZXguanNcIjtcbmltcG9ydCB3IGZyb20gXCIuLi9hdXRoL2luZGV4LmpzXCI7XG5pbXBvcnQgeyBDYWxsYmFja1R5cGUgYXMgeCB9IGZyb20gXCIuLi9hdXRoL2VudW1zLmpzXCI7XG5pbXBvcnQgSSBmcm9tIFwiLi9mci1sb2dpbi1mYWlsdXJlLmpzXCI7XG5pbXBvcnQgayBmcm9tIFwiLi9mci1sb2dpbi1zdWNjZXNzLmpzXCI7XG5pbXBvcnQgUiBmcm9tIFwiLi9mci1zdGVwLmpzXCI7XG5jbGFzcyBmIHtcbiAgc3RhdGljIGdldCBwcmV2aW91c1N0ZXBLZXkoKSB7XG4gICAgcmV0dXJuIGAke3YuZ2V0KCkucHJlZml4fS1QcmV2aW91c1N0ZXBgO1xuICB9XG4gIC8qKlxuICAgKiBSZXF1ZXN0cyB0aGUgbmV4dCBzdGVwIGluIHRoZSBhdXRoZW50aWNhdGlvbiB0cmVlLlxuICAgKlxuICAgKiBDYWxsIGBGUkF1dGgubmV4dCgpYCByZWN1cnNpdmVseS4gIEF0IGVhY2ggc3RlcCwgY2hlY2sgZm9yIHNlc3Npb24gdG9rZW4gb3IgZXJyb3IsIG90aGVyd2lzZVxuICAgKiBwb3B1bGF0ZSB0aGUgc3RlcCdzIGNhbGxiYWNrcyBhbmQgY2FsbCBgbmV4dCgpYCBhZ2Fpbi5cbiAgICpcbiAgICogRXhhbXBsZTpcbiAgICpcbiAgICogYGBganNcbiAgICogYXN5bmMgZnVuY3Rpb24gbmV4dFN0ZXAocHJldmlvdXNTdGVwKSB7XG4gICAqICAgY29uc3QgdGhpc1N0ZXAgPSBhd2FpdCBGUkF1dGgubmV4dChwcmV2aW91c1N0ZXApO1xuICAgKlxuICAgKiAgIHN3aXRjaCAodGhpc1N0ZXAudHlwZSkge1xuICAgKiAgICAgY2FzZSBTdGVwVHlwZS5Mb2dpblN1Y2Nlc3M6XG4gICAqICAgICAgIGNvbnN0IHRva2VuID0gdGhpc1N0ZXAuZ2V0U2Vzc2lvblRva2VuKCk7XG4gICAqICAgICAgIGJyZWFrO1xuICAgKiAgICAgY2FzZSBTdGVwVHlwZS5Mb2dpbkZhaWx1cmU6XG4gICAqICAgICAgIGNvbnN0IGRldGFpbCA9IHRoaXNTdGVwLmdldERldGFpbCgpO1xuICAgKiAgICAgICBicmVhaztcbiAgICogICAgIGNhc2UgU3RlcFR5cGUuU3RlcDpcbiAgICogICAgICAgLy8gUG9wdWxhdGUgYHRoaXNTdGVwYCBjYWxsYmFja3MgaGVyZSwgYW5kIHRoZW4gY29udGludWVcbiAgICogICAgICAgdGhpc1N0ZXAuc2V0SW5wdXRWYWx1ZSgnZm9vJyk7XG4gICAqICAgICAgIG5leHRTdGVwKHRoaXNTdGVwKTtcbiAgICogICAgICAgYnJlYWs7XG4gICAqICAgfVxuICAgKiB9XG4gICAqIGBgYFxuICAgKlxuICAgKiBAcGFyYW0gcHJldmlvdXNTdGVwIFRoZSBwcmV2aW91cyBzdGVwIHdpdGggaXRzIGNhbGxiYWNrIHZhbHVlcyBwb3B1bGF0ZWRcbiAgICogQHBhcmFtIG9wdGlvbnMgQ29uZmlndXJhdGlvbiBvdmVycmlkZXNcbiAgICogQHJldHVybiBUaGUgbmV4dCBzdGVwIGluIHRoZSBhdXRoZW50aWNhdGlvbiB0cmVlXG4gICAqL1xuICBzdGF0aWMgYXN5bmMgbmV4dCh0LCByKSB7XG4gICAgY29uc3QgZSA9IGF3YWl0IHcubmV4dCh0ID8gdC5wYXlsb2FkIDogdm9pZCAwLCByKTtcbiAgICBpZiAoZS5hdXRoSWQpIHtcbiAgICAgIGNvbnN0IGEgPSByID8gci5jYWxsYmFja0ZhY3RvcnkgOiB2b2lkIDA7XG4gICAgICByZXR1cm4gbmV3IFIoZSwgYSk7XG4gICAgfVxuICAgIHJldHVybiAhZS5hdXRoSWQgJiYgZS5vayA/IG5ldyBrKGUpIDogbmV3IEkoZSk7XG4gIH1cbiAgLyoqXG4gICAqIFJlZGlyZWN0cyB0byB0aGUgVVJMIGlkZW50aWZpZWQgaW4gdGhlIFJlZGlyZWN0Q2FsbGJhY2sgYW5kIHNhdmVzIHRoZSBmdWxsXG4gICAqIHN0ZXAgaW5mb3JtYXRpb24gdG8gbG9jYWxTdG9yYWdlIGZvciByZXRyaWV2YWwgd2hlbiB1c2VyIHJldHVybnMgZnJvbSBsb2dpbi5cbiAgICpcbiAgICogRXhhbXBsZTpcbiAgICogYGBganNcbiAgICogZm9yZ2Vyb2NrLkZSQXV0aC5yZWRpcmVjdChzdGVwKTtcbiAgICogYGBgXG4gICAqL1xuICBzdGF0aWMgcmVkaXJlY3QodCkge1xuICAgIGNvbnN0IGUgPSB0LmdldENhbGxiYWNrT2ZUeXBlKHguUmVkaXJlY3RDYWxsYmFjaykuZ2V0UmVkaXJlY3RVcmwoKTtcbiAgICBsb2NhbFN0b3JhZ2Uuc2V0SXRlbSh0aGlzLnByZXZpb3VzU3RlcEtleSwgSlNPTi5zdHJpbmdpZnkodCkpLCBsb2NhdGlvbi5hc3NpZ24oZSk7XG4gIH1cbiAgLyoqXG4gICAqIFJlc3VtZXMgYSB0cmVlIGFmdGVyIHJldHVybmluZyBmcm9tIGFuIGV4dGVybmFsIGNsaWVudCBvciBwcm92aWRlci5cbiAgICogUmVxdWlyZXMgdGhlIGZ1bGwgVVJMIG9mIHRoZSBjdXJyZW50IHdpbmRvdy4gSXQgd2lsbCBwYXJzZSBVUkwgZm9yXG4gICAqIGtleS12YWx1ZSBwYWlycyBhcyB3ZWxsIGFzLCBpZiByZXF1aXJlZCwgcmV0cmlldmVzIHByZXZpb3VzIHN0ZXAuXG4gICAqXG4gICAqIEV4YW1wbGU7XG4gICAqIGBgYGpzXG4gICAqIGZvcmdlcm9jay5GUkF1dGgucmVzdW1lKHdpbmRvdy5sb2NhdGlvbi5ocmVmKVxuICAgKiBgYGBcbiAgICovXG4gIHN0YXRpYyBhc3luYyByZXN1bWUodCwgcikge1xuICAgIGNvbnN0IGUgPSBuZXcgVVJMKHQpLCBhID0gZS5zZWFyY2hQYXJhbXMuZ2V0KFwiY29kZVwiKSwgbiA9IGUuc2VhcmNoUGFyYW1zLmdldChcImVycm9yXCIpLCBpID0gZS5zZWFyY2hQYXJhbXMuZ2V0KFwiZXJyb3JDb2RlXCIpLCBtID0gZS5zZWFyY2hQYXJhbXMuZ2V0KFwiZXJyb3JNZXNzYWdlXCIpLCBzID0gZS5zZWFyY2hQYXJhbXMuZ2V0KFwiZm9ybV9wb3N0X2VudHJ5XCIpLCBsID0gZS5zZWFyY2hQYXJhbXMuZ2V0KFwibm9uY2VcIiksIHUgPSBlLnNlYXJjaFBhcmFtcy5nZXQoXCJSZWxheVN0YXRlXCIpLCBvID0gZS5zZWFyY2hQYXJhbXMuZ2V0KFwicmVzcG9uc2VrZXlcIiksIGQgPSBlLnNlYXJjaFBhcmFtcy5nZXQoXCJzY29wZVwiKSwgYyA9IGUuc2VhcmNoUGFyYW1zLmdldChcInN0YXRlXCIpLCBwID0gZS5zZWFyY2hQYXJhbXMuZ2V0KFwic3VzcGVuZGVkSWRcIiksIGcgPSBlLnNlYXJjaFBhcmFtcy5nZXQoXCJhdXRoSW5kZXhWYWx1ZVwiKSA/PyB2b2lkIDA7XG4gICAgbGV0IGg7XG4gICAgZnVuY3Rpb24gUygpIHtcbiAgICAgIHJldHVybiBhICYmIGMgfHwgcyB8fCBvO1xuICAgIH1cbiAgICBpZiAoUygpKSB7XG4gICAgICBjb25zdCB5ID0gbG9jYWxTdG9yYWdlLmdldEl0ZW0odGhpcy5wcmV2aW91c1N0ZXBLZXkpO1xuICAgICAgaWYgKCF5KVxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJFcnJvcjogY291bGQgbm90IHJldHJpZXZlIG9yaWdpbmFsIHJlZGlyZWN0IGluZm9ybWF0aW9uLlwiKTtcbiAgICAgIHRyeSB7XG4gICAgICAgIGggPSBKU09OLnBhcnNlKHkpO1xuICAgICAgfSBjYXRjaCB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIkVycm9yOiBjb3VsZCBub3QgcGFyc2UgcmVkaXJlY3QgcGFyYW1zIG9yIHN0ZXAgaW5mb3JtYXRpb25cIik7XG4gICAgICB9XG4gICAgICBsb2NhbFN0b3JhZ2UucmVtb3ZlSXRlbSh0aGlzLnByZXZpb3VzU3RlcEtleSk7XG4gICAgfVxuICAgIGNvbnN0IFAgPSB7XG4gICAgICAuLi5yLFxuICAgICAgcXVlcnk6IHtcbiAgICAgICAgLy8gQ29uZGl0aW9uYWxseSBzcHJlYWQgcHJvcGVydGllcyBpbnRvIG9iamVjdC4gRG9uJ3Qgc3ByZWFkIHByb3BzIHdpdGggdW5kZWZpbmVkL251bGwuXG4gICAgICAgIC4uLmEgJiYgeyBjb2RlOiBhIH0sXG4gICAgICAgIC4uLm4gJiYgeyBlcnJvcjogbiB9LFxuICAgICAgICAuLi5pICYmIHsgZXJyb3JDb2RlOiBpIH0sXG4gICAgICAgIC4uLm0gJiYgeyBlcnJvck1lc3NhZ2U6IG0gfSxcbiAgICAgICAgLi4ucyAmJiB7IGZvcm1fcG9zdF9lbnRyeTogcyB9LFxuICAgICAgICAuLi5sICYmIHsgbm9uY2U6IGwgfSxcbiAgICAgICAgLi4udSAmJiB7IFJlbGF5U3RhdGU6IHUgfSxcbiAgICAgICAgLi4ubyAmJiB7IHJlc3BvbnNla2V5OiBvIH0sXG4gICAgICAgIC4uLmQgJiYgeyBzY29wZTogZCB9LFxuICAgICAgICAuLi5jICYmIHsgc3RhdGU6IGMgfSxcbiAgICAgICAgLi4ucCAmJiB7IHN1c3BlbmRlZElkOiBwIH0sXG4gICAgICAgIC8vIEFsbG93IGRldmVsb3BlciB0byBhZGQgb3Igb3ZlcnJpZGUgcGFyYW1zIHdpdGggdGhlaXIgb3duLlxuICAgICAgICAuLi5yICYmIHIucXVlcnlcbiAgICAgIH0sXG4gICAgICAuLi4ocj8udHJlZSA/PyBnKSAmJiB7XG4gICAgICAgIHRyZWU6IHI/LnRyZWUgPz8gZ1xuICAgICAgfVxuICAgIH07XG4gICAgcmV0dXJuIGF3YWl0IHRoaXMubmV4dChoLCBQKTtcbiAgfVxuICAvKipcbiAgICogUmVxdWVzdHMgdGhlIGZpcnN0IHN0ZXAgaW4gdGhlIGF1dGhlbnRpY2F0aW9uIHRyZWUuXG4gICAqIFRoaXMgaXMgZXNzZW50aWFsbHkgYW4gYWxpYXMgdG8gY2FsbGluZyBGUkF1dGgubmV4dCB3aXRob3V0IGEgcHJldmlvdXMgc3RlcC5cbiAgICpcbiAgICogQHBhcmFtIG9wdGlvbnMgQ29uZmlndXJhdGlvbiBvdmVycmlkZXNcbiAgICogQHJldHVybiBUaGUgbmV4dCBzdGVwIGluIHRoZSBhdXRoZW50aWNhdGlvbiB0cmVlXG4gICAqL1xuICBzdGF0aWMgYXN5bmMgc3RhcnQodCkge1xuICAgIHJldHVybiBhd2FpdCBmLm5leHQodm9pZCAwLCB0KTtcbiAgfVxufVxuZXhwb3J0IHtcbiAgZiBhcyBkZWZhdWx0XG59O1xuIiwiLy8gc3JjL3V0aWxzL2Zvcm1hdFByb2RFcnJvck1lc3NhZ2UudHNcbmZ1bmN0aW9uIGZvcm1hdFByb2RFcnJvck1lc3NhZ2UoY29kZSkge1xuICByZXR1cm4gYE1pbmlmaWVkIFJlZHV4IGVycm9yICMke2NvZGV9OyB2aXNpdCBodHRwczovL3JlZHV4LmpzLm9yZy9FcnJvcnM/Y29kZT0ke2NvZGV9IGZvciB0aGUgZnVsbCBtZXNzYWdlIG9yIHVzZSB0aGUgbm9uLW1pbmlmaWVkIGRldiBlbnZpcm9ubWVudCBmb3IgZnVsbCBlcnJvcnMuIGA7XG59XG5cbi8vIHNyYy91dGlscy9zeW1ib2wtb2JzZXJ2YWJsZS50c1xudmFyICQkb2JzZXJ2YWJsZSA9IC8qIEBfX1BVUkVfXyAqLyAoKCkgPT4gdHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIFN5bWJvbC5vYnNlcnZhYmxlIHx8IFwiQEBvYnNlcnZhYmxlXCIpKCk7XG52YXIgc3ltYm9sX29ic2VydmFibGVfZGVmYXVsdCA9ICQkb2JzZXJ2YWJsZTtcblxuLy8gc3JjL3V0aWxzL2FjdGlvblR5cGVzLnRzXG52YXIgcmFuZG9tU3RyaW5nID0gKCkgPT4gTWF0aC5yYW5kb20oKS50b1N0cmluZygzNikuc3Vic3RyaW5nKDcpLnNwbGl0KFwiXCIpLmpvaW4oXCIuXCIpO1xudmFyIEFjdGlvblR5cGVzID0ge1xuICBJTklUOiBgQEByZWR1eC9JTklUJHsvKiBAX19QVVJFX18gKi8gcmFuZG9tU3RyaW5nKCl9YCxcbiAgUkVQTEFDRTogYEBAcmVkdXgvUkVQTEFDRSR7LyogQF9fUFVSRV9fICovIHJhbmRvbVN0cmluZygpfWAsXG4gIFBST0JFX1VOS05PV05fQUNUSU9OOiAoKSA9PiBgQEByZWR1eC9QUk9CRV9VTktOT1dOX0FDVElPTiR7cmFuZG9tU3RyaW5nKCl9YFxufTtcbnZhciBhY3Rpb25UeXBlc19kZWZhdWx0ID0gQWN0aW9uVHlwZXM7XG5cbi8vIHNyYy91dGlscy9pc1BsYWluT2JqZWN0LnRzXG5mdW5jdGlvbiBpc1BsYWluT2JqZWN0KG9iaikge1xuICBpZiAodHlwZW9mIG9iaiAhPT0gXCJvYmplY3RcIiB8fCBvYmogPT09IG51bGwpXG4gICAgcmV0dXJuIGZhbHNlO1xuICBsZXQgcHJvdG8gPSBvYmo7XG4gIHdoaWxlIChPYmplY3QuZ2V0UHJvdG90eXBlT2YocHJvdG8pICE9PSBudWxsKSB7XG4gICAgcHJvdG8gPSBPYmplY3QuZ2V0UHJvdG90eXBlT2YocHJvdG8pO1xuICB9XG4gIHJldHVybiBPYmplY3QuZ2V0UHJvdG90eXBlT2Yob2JqKSA9PT0gcHJvdG8gfHwgT2JqZWN0LmdldFByb3RvdHlwZU9mKG9iaikgPT09IG51bGw7XG59XG5cbi8vIHNyYy91dGlscy9raW5kT2YudHNcbmZ1bmN0aW9uIG1pbmlLaW5kT2YodmFsKSB7XG4gIGlmICh2YWwgPT09IHZvaWQgMClcbiAgICByZXR1cm4gXCJ1bmRlZmluZWRcIjtcbiAgaWYgKHZhbCA9PT0gbnVsbClcbiAgICByZXR1cm4gXCJudWxsXCI7XG4gIGNvbnN0IHR5cGUgPSB0eXBlb2YgdmFsO1xuICBzd2l0Y2ggKHR5cGUpIHtcbiAgICBjYXNlIFwiYm9vbGVhblwiOlxuICAgIGNhc2UgXCJzdHJpbmdcIjpcbiAgICBjYXNlIFwibnVtYmVyXCI6XG4gICAgY2FzZSBcInN5bWJvbFwiOlxuICAgIGNhc2UgXCJmdW5jdGlvblwiOiB7XG4gICAgICByZXR1cm4gdHlwZTtcbiAgICB9XG4gIH1cbiAgaWYgKEFycmF5LmlzQXJyYXkodmFsKSlcbiAgICByZXR1cm4gXCJhcnJheVwiO1xuICBpZiAoaXNEYXRlKHZhbCkpXG4gICAgcmV0dXJuIFwiZGF0ZVwiO1xuICBpZiAoaXNFcnJvcih2YWwpKVxuICAgIHJldHVybiBcImVycm9yXCI7XG4gIGNvbnN0IGNvbnN0cnVjdG9yTmFtZSA9IGN0b3JOYW1lKHZhbCk7XG4gIHN3aXRjaCAoY29uc3RydWN0b3JOYW1lKSB7XG4gICAgY2FzZSBcIlN5bWJvbFwiOlxuICAgIGNhc2UgXCJQcm9taXNlXCI6XG4gICAgY2FzZSBcIldlYWtNYXBcIjpcbiAgICBjYXNlIFwiV2Vha1NldFwiOlxuICAgIGNhc2UgXCJNYXBcIjpcbiAgICBjYXNlIFwiU2V0XCI6XG4gICAgICByZXR1cm4gY29uc3RydWN0b3JOYW1lO1xuICB9XG4gIHJldHVybiBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwodmFsKS5zbGljZSg4LCAtMSkudG9Mb3dlckNhc2UoKS5yZXBsYWNlKC9cXHMvZywgXCJcIik7XG59XG5mdW5jdGlvbiBjdG9yTmFtZSh2YWwpIHtcbiAgcmV0dXJuIHR5cGVvZiB2YWwuY29uc3RydWN0b3IgPT09IFwiZnVuY3Rpb25cIiA/IHZhbC5jb25zdHJ1Y3Rvci5uYW1lIDogbnVsbDtcbn1cbmZ1bmN0aW9uIGlzRXJyb3IodmFsKSB7XG4gIHJldHVybiB2YWwgaW5zdGFuY2VvZiBFcnJvciB8fCB0eXBlb2YgdmFsLm1lc3NhZ2UgPT09IFwic3RyaW5nXCIgJiYgdmFsLmNvbnN0cnVjdG9yICYmIHR5cGVvZiB2YWwuY29uc3RydWN0b3Iuc3RhY2tUcmFjZUxpbWl0ID09PSBcIm51bWJlclwiO1xufVxuZnVuY3Rpb24gaXNEYXRlKHZhbCkge1xuICBpZiAodmFsIGluc3RhbmNlb2YgRGF0ZSlcbiAgICByZXR1cm4gdHJ1ZTtcbiAgcmV0dXJuIHR5cGVvZiB2YWwudG9EYXRlU3RyaW5nID09PSBcImZ1bmN0aW9uXCIgJiYgdHlwZW9mIHZhbC5nZXREYXRlID09PSBcImZ1bmN0aW9uXCIgJiYgdHlwZW9mIHZhbC5zZXREYXRlID09PSBcImZ1bmN0aW9uXCI7XG59XG5mdW5jdGlvbiBraW5kT2YodmFsKSB7XG4gIGxldCB0eXBlT2ZWYWwgPSB0eXBlb2YgdmFsO1xuICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiKSB7XG4gICAgdHlwZU9mVmFsID0gbWluaUtpbmRPZih2YWwpO1xuICB9XG4gIHJldHVybiB0eXBlT2ZWYWw7XG59XG5cbi8vIHNyYy9jcmVhdGVTdG9yZS50c1xuZnVuY3Rpb24gY3JlYXRlU3RvcmUocmVkdWNlciwgcHJlbG9hZGVkU3RhdGUsIGVuaGFuY2VyKSB7XG4gIGlmICh0eXBlb2YgcmVkdWNlciAhPT0gXCJmdW5jdGlvblwiKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKHByb2Nlc3MuZW52Lk5PREVfRU5WID09PSBcInByb2R1Y3Rpb25cIiA/IGZvcm1hdFByb2RFcnJvck1lc3NhZ2UoMikgOiBgRXhwZWN0ZWQgdGhlIHJvb3QgcmVkdWNlciB0byBiZSBhIGZ1bmN0aW9uLiBJbnN0ZWFkLCByZWNlaXZlZDogJyR7a2luZE9mKHJlZHVjZXIpfSdgKTtcbiAgfVxuICBpZiAodHlwZW9mIHByZWxvYWRlZFN0YXRlID09PSBcImZ1bmN0aW9uXCIgJiYgdHlwZW9mIGVuaGFuY2VyID09PSBcImZ1bmN0aW9uXCIgfHwgdHlwZW9mIGVuaGFuY2VyID09PSBcImZ1bmN0aW9uXCIgJiYgdHlwZW9mIGFyZ3VtZW50c1szXSA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKHByb2Nlc3MuZW52Lk5PREVfRU5WID09PSBcInByb2R1Y3Rpb25cIiA/IGZvcm1hdFByb2RFcnJvck1lc3NhZ2UoMCkgOiBcIkl0IGxvb2tzIGxpa2UgeW91IGFyZSBwYXNzaW5nIHNldmVyYWwgc3RvcmUgZW5oYW5jZXJzIHRvIGNyZWF0ZVN0b3JlKCkuIFRoaXMgaXMgbm90IHN1cHBvcnRlZC4gSW5zdGVhZCwgY29tcG9zZSB0aGVtIHRvZ2V0aGVyIHRvIGEgc2luZ2xlIGZ1bmN0aW9uLiBTZWUgaHR0cHM6Ly9yZWR1eC5qcy5vcmcvdHV0b3JpYWxzL2Z1bmRhbWVudGFscy9wYXJ0LTQtc3RvcmUjY3JlYXRpbmctYS1zdG9yZS13aXRoLWVuaGFuY2VycyBmb3IgYW4gZXhhbXBsZS5cIik7XG4gIH1cbiAgaWYgKHR5cGVvZiBwcmVsb2FkZWRTdGF0ZSA9PT0gXCJmdW5jdGlvblwiICYmIHR5cGVvZiBlbmhhbmNlciA9PT0gXCJ1bmRlZmluZWRcIikge1xuICAgIGVuaGFuY2VyID0gcHJlbG9hZGVkU3RhdGU7XG4gICAgcHJlbG9hZGVkU3RhdGUgPSB2b2lkIDA7XG4gIH1cbiAgaWYgKHR5cGVvZiBlbmhhbmNlciAhPT0gXCJ1bmRlZmluZWRcIikge1xuICAgIGlmICh0eXBlb2YgZW5oYW5jZXIgIT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKHByb2Nlc3MuZW52Lk5PREVfRU5WID09PSBcInByb2R1Y3Rpb25cIiA/IGZvcm1hdFByb2RFcnJvck1lc3NhZ2UoMSkgOiBgRXhwZWN0ZWQgdGhlIGVuaGFuY2VyIHRvIGJlIGEgZnVuY3Rpb24uIEluc3RlYWQsIHJlY2VpdmVkOiAnJHtraW5kT2YoZW5oYW5jZXIpfSdgKTtcbiAgICB9XG4gICAgcmV0dXJuIGVuaGFuY2VyKGNyZWF0ZVN0b3JlKShyZWR1Y2VyLCBwcmVsb2FkZWRTdGF0ZSk7XG4gIH1cbiAgbGV0IGN1cnJlbnRSZWR1Y2VyID0gcmVkdWNlcjtcbiAgbGV0IGN1cnJlbnRTdGF0ZSA9IHByZWxvYWRlZFN0YXRlO1xuICBsZXQgY3VycmVudExpc3RlbmVycyA9IC8qIEBfX1BVUkVfXyAqLyBuZXcgTWFwKCk7XG4gIGxldCBuZXh0TGlzdGVuZXJzID0gY3VycmVudExpc3RlbmVycztcbiAgbGV0IGxpc3RlbmVySWRDb3VudGVyID0gMDtcbiAgbGV0IGlzRGlzcGF0Y2hpbmcgPSBmYWxzZTtcbiAgZnVuY3Rpb24gZW5zdXJlQ2FuTXV0YXRlTmV4dExpc3RlbmVycygpIHtcbiAgICBpZiAobmV4dExpc3RlbmVycyA9PT0gY3VycmVudExpc3RlbmVycykge1xuICAgICAgbmV4dExpc3RlbmVycyA9IC8qIEBfX1BVUkVfXyAqLyBuZXcgTWFwKCk7XG4gICAgICBjdXJyZW50TGlzdGVuZXJzLmZvckVhY2goKGxpc3RlbmVyLCBrZXkpID0+IHtcbiAgICAgICAgbmV4dExpc3RlbmVycy5zZXQoa2V5LCBsaXN0ZW5lcik7XG4gICAgICB9KTtcbiAgICB9XG4gIH1cbiAgZnVuY3Rpb24gZ2V0U3RhdGUoKSB7XG4gICAgaWYgKGlzRGlzcGF0Y2hpbmcpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihwcm9jZXNzLmVudi5OT0RFX0VOViA9PT0gXCJwcm9kdWN0aW9uXCIgPyBmb3JtYXRQcm9kRXJyb3JNZXNzYWdlKDMpIDogXCJZb3UgbWF5IG5vdCBjYWxsIHN0b3JlLmdldFN0YXRlKCkgd2hpbGUgdGhlIHJlZHVjZXIgaXMgZXhlY3V0aW5nLiBUaGUgcmVkdWNlciBoYXMgYWxyZWFkeSByZWNlaXZlZCB0aGUgc3RhdGUgYXMgYW4gYXJndW1lbnQuIFBhc3MgaXQgZG93biBmcm9tIHRoZSB0b3AgcmVkdWNlciBpbnN0ZWFkIG9mIHJlYWRpbmcgaXQgZnJvbSB0aGUgc3RvcmUuXCIpO1xuICAgIH1cbiAgICByZXR1cm4gY3VycmVudFN0YXRlO1xuICB9XG4gIGZ1bmN0aW9uIHN1YnNjcmliZShsaXN0ZW5lcikge1xuICAgIGlmICh0eXBlb2YgbGlzdGVuZXIgIT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKHByb2Nlc3MuZW52Lk5PREVfRU5WID09PSBcInByb2R1Y3Rpb25cIiA/IGZvcm1hdFByb2RFcnJvck1lc3NhZ2UoNCkgOiBgRXhwZWN0ZWQgdGhlIGxpc3RlbmVyIHRvIGJlIGEgZnVuY3Rpb24uIEluc3RlYWQsIHJlY2VpdmVkOiAnJHtraW5kT2YobGlzdGVuZXIpfSdgKTtcbiAgICB9XG4gICAgaWYgKGlzRGlzcGF0Y2hpbmcpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihwcm9jZXNzLmVudi5OT0RFX0VOViA9PT0gXCJwcm9kdWN0aW9uXCIgPyBmb3JtYXRQcm9kRXJyb3JNZXNzYWdlKDUpIDogXCJZb3UgbWF5IG5vdCBjYWxsIHN0b3JlLnN1YnNjcmliZSgpIHdoaWxlIHRoZSByZWR1Y2VyIGlzIGV4ZWN1dGluZy4gSWYgeW91IHdvdWxkIGxpa2UgdG8gYmUgbm90aWZpZWQgYWZ0ZXIgdGhlIHN0b3JlIGhhcyBiZWVuIHVwZGF0ZWQsIHN1YnNjcmliZSBmcm9tIGEgY29tcG9uZW50IGFuZCBpbnZva2Ugc3RvcmUuZ2V0U3RhdGUoKSBpbiB0aGUgY2FsbGJhY2sgdG8gYWNjZXNzIHRoZSBsYXRlc3Qgc3RhdGUuIFNlZSBodHRwczovL3JlZHV4LmpzLm9yZy9hcGkvc3RvcmUjc3Vic2NyaWJlbGlzdGVuZXIgZm9yIG1vcmUgZGV0YWlscy5cIik7XG4gICAgfVxuICAgIGxldCBpc1N1YnNjcmliZWQgPSB0cnVlO1xuICAgIGVuc3VyZUNhbk11dGF0ZU5leHRMaXN0ZW5lcnMoKTtcbiAgICBjb25zdCBsaXN0ZW5lcklkID0gbGlzdGVuZXJJZENvdW50ZXIrKztcbiAgICBuZXh0TGlzdGVuZXJzLnNldChsaXN0ZW5lcklkLCBsaXN0ZW5lcik7XG4gICAgcmV0dXJuIGZ1bmN0aW9uIHVuc3Vic2NyaWJlKCkge1xuICAgICAgaWYgKCFpc1N1YnNjcmliZWQpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgaWYgKGlzRGlzcGF0Y2hpbmcpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKHByb2Nlc3MuZW52Lk5PREVfRU5WID09PSBcInByb2R1Y3Rpb25cIiA/IGZvcm1hdFByb2RFcnJvck1lc3NhZ2UoNikgOiBcIllvdSBtYXkgbm90IHVuc3Vic2NyaWJlIGZyb20gYSBzdG9yZSBsaXN0ZW5lciB3aGlsZSB0aGUgcmVkdWNlciBpcyBleGVjdXRpbmcuIFNlZSBodHRwczovL3JlZHV4LmpzLm9yZy9hcGkvc3RvcmUjc3Vic2NyaWJlbGlzdGVuZXIgZm9yIG1vcmUgZGV0YWlscy5cIik7XG4gICAgICB9XG4gICAgICBpc1N1YnNjcmliZWQgPSBmYWxzZTtcbiAgICAgIGVuc3VyZUNhbk11dGF0ZU5leHRMaXN0ZW5lcnMoKTtcbiAgICAgIG5leHRMaXN0ZW5lcnMuZGVsZXRlKGxpc3RlbmVySWQpO1xuICAgICAgY3VycmVudExpc3RlbmVycyA9IG51bGw7XG4gICAgfTtcbiAgfVxuICBmdW5jdGlvbiBkaXNwYXRjaChhY3Rpb24pIHtcbiAgICBpZiAoIWlzUGxhaW5PYmplY3QoYWN0aW9uKSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKHByb2Nlc3MuZW52Lk5PREVfRU5WID09PSBcInByb2R1Y3Rpb25cIiA/IGZvcm1hdFByb2RFcnJvck1lc3NhZ2UoNykgOiBgQWN0aW9ucyBtdXN0IGJlIHBsYWluIG9iamVjdHMuIEluc3RlYWQsIHRoZSBhY3R1YWwgdHlwZSB3YXM6ICcke2tpbmRPZihhY3Rpb24pfScuIFlvdSBtYXkgbmVlZCB0byBhZGQgbWlkZGxld2FyZSB0byB5b3VyIHN0b3JlIHNldHVwIHRvIGhhbmRsZSBkaXNwYXRjaGluZyBvdGhlciB2YWx1ZXMsIHN1Y2ggYXMgJ3JlZHV4LXRodW5rJyB0byBoYW5kbGUgZGlzcGF0Y2hpbmcgZnVuY3Rpb25zLiBTZWUgaHR0cHM6Ly9yZWR1eC5qcy5vcmcvdHV0b3JpYWxzL2Z1bmRhbWVudGFscy9wYXJ0LTQtc3RvcmUjbWlkZGxld2FyZSBhbmQgaHR0cHM6Ly9yZWR1eC5qcy5vcmcvdHV0b3JpYWxzL2Z1bmRhbWVudGFscy9wYXJ0LTYtYXN5bmMtbG9naWMjdXNpbmctdGhlLXJlZHV4LXRodW5rLW1pZGRsZXdhcmUgZm9yIGV4YW1wbGVzLmApO1xuICAgIH1cbiAgICBpZiAodHlwZW9mIGFjdGlvbi50eXBlID09PSBcInVuZGVmaW5lZFwiKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IocHJvY2Vzcy5lbnYuTk9ERV9FTlYgPT09IFwicHJvZHVjdGlvblwiID8gZm9ybWF0UHJvZEVycm9yTWVzc2FnZSg4KSA6ICdBY3Rpb25zIG1heSBub3QgaGF2ZSBhbiB1bmRlZmluZWQgXCJ0eXBlXCIgcHJvcGVydHkuIFlvdSBtYXkgaGF2ZSBtaXNzcGVsbGVkIGFuIGFjdGlvbiB0eXBlIHN0cmluZyBjb25zdGFudC4nKTtcbiAgICB9XG4gICAgaWYgKHR5cGVvZiBhY3Rpb24udHlwZSAhPT0gXCJzdHJpbmdcIikge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKHByb2Nlc3MuZW52Lk5PREVfRU5WID09PSBcInByb2R1Y3Rpb25cIiA/IGZvcm1hdFByb2RFcnJvck1lc3NhZ2UoMTcpIDogYEFjdGlvbiBcInR5cGVcIiBwcm9wZXJ0eSBtdXN0IGJlIGEgc3RyaW5nLiBJbnN0ZWFkLCB0aGUgYWN0dWFsIHR5cGUgd2FzOiAnJHtraW5kT2YoYWN0aW9uLnR5cGUpfScuIFZhbHVlIHdhczogJyR7YWN0aW9uLnR5cGV9JyAoc3RyaW5naWZpZWQpYCk7XG4gICAgfVxuICAgIGlmIChpc0Rpc3BhdGNoaW5nKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IocHJvY2Vzcy5lbnYuTk9ERV9FTlYgPT09IFwicHJvZHVjdGlvblwiID8gZm9ybWF0UHJvZEVycm9yTWVzc2FnZSg5KSA6IFwiUmVkdWNlcnMgbWF5IG5vdCBkaXNwYXRjaCBhY3Rpb25zLlwiKTtcbiAgICB9XG4gICAgdHJ5IHtcbiAgICAgIGlzRGlzcGF0Y2hpbmcgPSB0cnVlO1xuICAgICAgY3VycmVudFN0YXRlID0gY3VycmVudFJlZHVjZXIoY3VycmVudFN0YXRlLCBhY3Rpb24pO1xuICAgIH0gZmluYWxseSB7XG4gICAgICBpc0Rpc3BhdGNoaW5nID0gZmFsc2U7XG4gICAgfVxuICAgIGNvbnN0IGxpc3RlbmVycyA9IGN1cnJlbnRMaXN0ZW5lcnMgPSBuZXh0TGlzdGVuZXJzO1xuICAgIGxpc3RlbmVycy5mb3JFYWNoKChsaXN0ZW5lcikgPT4ge1xuICAgICAgbGlzdGVuZXIoKTtcbiAgICB9KTtcbiAgICByZXR1cm4gYWN0aW9uO1xuICB9XG4gIGZ1bmN0aW9uIHJlcGxhY2VSZWR1Y2VyKG5leHRSZWR1Y2VyKSB7XG4gICAgaWYgKHR5cGVvZiBuZXh0UmVkdWNlciAhPT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IocHJvY2Vzcy5lbnYuTk9ERV9FTlYgPT09IFwicHJvZHVjdGlvblwiID8gZm9ybWF0UHJvZEVycm9yTWVzc2FnZSgxMCkgOiBgRXhwZWN0ZWQgdGhlIG5leHRSZWR1Y2VyIHRvIGJlIGEgZnVuY3Rpb24uIEluc3RlYWQsIHJlY2VpdmVkOiAnJHtraW5kT2YobmV4dFJlZHVjZXIpfWApO1xuICAgIH1cbiAgICBjdXJyZW50UmVkdWNlciA9IG5leHRSZWR1Y2VyO1xuICAgIGRpc3BhdGNoKHtcbiAgICAgIHR5cGU6IGFjdGlvblR5cGVzX2RlZmF1bHQuUkVQTEFDRVxuICAgIH0pO1xuICB9XG4gIGZ1bmN0aW9uIG9ic2VydmFibGUoKSB7XG4gICAgY29uc3Qgb3V0ZXJTdWJzY3JpYmUgPSBzdWJzY3JpYmU7XG4gICAgcmV0dXJuIHtcbiAgICAgIC8qKlxuICAgICAgICogVGhlIG1pbmltYWwgb2JzZXJ2YWJsZSBzdWJzY3JpcHRpb24gbWV0aG9kLlxuICAgICAgICogQHBhcmFtIG9ic2VydmVyIEFueSBvYmplY3QgdGhhdCBjYW4gYmUgdXNlZCBhcyBhbiBvYnNlcnZlci5cbiAgICAgICAqIFRoZSBvYnNlcnZlciBvYmplY3Qgc2hvdWxkIGhhdmUgYSBgbmV4dGAgbWV0aG9kLlxuICAgICAgICogQHJldHVybnMgQW4gb2JqZWN0IHdpdGggYW4gYHVuc3Vic2NyaWJlYCBtZXRob2QgdGhhdCBjYW5cbiAgICAgICAqIGJlIHVzZWQgdG8gdW5zdWJzY3JpYmUgdGhlIG9ic2VydmFibGUgZnJvbSB0aGUgc3RvcmUsIGFuZCBwcmV2ZW50IGZ1cnRoZXJcbiAgICAgICAqIGVtaXNzaW9uIG9mIHZhbHVlcyBmcm9tIHRoZSBvYnNlcnZhYmxlLlxuICAgICAgICovXG4gICAgICBzdWJzY3JpYmUob2JzZXJ2ZXIpIHtcbiAgICAgICAgaWYgKHR5cGVvZiBvYnNlcnZlciAhPT0gXCJvYmplY3RcIiB8fCBvYnNlcnZlciA9PT0gbnVsbCkge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihwcm9jZXNzLmVudi5OT0RFX0VOViA9PT0gXCJwcm9kdWN0aW9uXCIgPyBmb3JtYXRQcm9kRXJyb3JNZXNzYWdlKDExKSA6IGBFeHBlY3RlZCB0aGUgb2JzZXJ2ZXIgdG8gYmUgYW4gb2JqZWN0LiBJbnN0ZWFkLCByZWNlaXZlZDogJyR7a2luZE9mKG9ic2VydmVyKX0nYCk7XG4gICAgICAgIH1cbiAgICAgICAgZnVuY3Rpb24gb2JzZXJ2ZVN0YXRlKCkge1xuICAgICAgICAgIGNvbnN0IG9ic2VydmVyQXNPYnNlcnZlciA9IG9ic2VydmVyO1xuICAgICAgICAgIGlmIChvYnNlcnZlckFzT2JzZXJ2ZXIubmV4dCkge1xuICAgICAgICAgICAgb2JzZXJ2ZXJBc09ic2VydmVyLm5leHQoZ2V0U3RhdGUoKSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIG9ic2VydmVTdGF0ZSgpO1xuICAgICAgICBjb25zdCB1bnN1YnNjcmliZSA9IG91dGVyU3Vic2NyaWJlKG9ic2VydmVTdGF0ZSk7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgdW5zdWJzY3JpYmVcbiAgICAgICAgfTtcbiAgICAgIH0sXG4gICAgICBbc3ltYm9sX29ic2VydmFibGVfZGVmYXVsdF0oKSB7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgICAgfVxuICAgIH07XG4gIH1cbiAgZGlzcGF0Y2goe1xuICAgIHR5cGU6IGFjdGlvblR5cGVzX2RlZmF1bHQuSU5JVFxuICB9KTtcbiAgY29uc3Qgc3RvcmUgPSB7XG4gICAgZGlzcGF0Y2gsXG4gICAgc3Vic2NyaWJlLFxuICAgIGdldFN0YXRlLFxuICAgIHJlcGxhY2VSZWR1Y2VyLFxuICAgIFtzeW1ib2xfb2JzZXJ2YWJsZV9kZWZhdWx0XTogb2JzZXJ2YWJsZVxuICB9O1xuICByZXR1cm4gc3RvcmU7XG59XG5mdW5jdGlvbiBsZWdhY3lfY3JlYXRlU3RvcmUocmVkdWNlciwgcHJlbG9hZGVkU3RhdGUsIGVuaGFuY2VyKSB7XG4gIHJldHVybiBjcmVhdGVTdG9yZShyZWR1Y2VyLCBwcmVsb2FkZWRTdGF0ZSwgZW5oYW5jZXIpO1xufVxuXG4vLyBzcmMvdXRpbHMvd2FybmluZy50c1xuZnVuY3Rpb24gd2FybmluZyhtZXNzYWdlKSB7XG4gIGlmICh0eXBlb2YgY29uc29sZSAhPT0gXCJ1bmRlZmluZWRcIiAmJiB0eXBlb2YgY29uc29sZS5lcnJvciA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgY29uc29sZS5lcnJvcihtZXNzYWdlKTtcbiAgfVxuICB0cnkge1xuICAgIHRocm93IG5ldyBFcnJvcihtZXNzYWdlKTtcbiAgfSBjYXRjaCAoZSkge1xuICB9XG59XG5cbi8vIHNyYy9jb21iaW5lUmVkdWNlcnMudHNcbmZ1bmN0aW9uIGdldFVuZXhwZWN0ZWRTdGF0ZVNoYXBlV2FybmluZ01lc3NhZ2UoaW5wdXRTdGF0ZSwgcmVkdWNlcnMsIGFjdGlvbiwgdW5leHBlY3RlZEtleUNhY2hlKSB7XG4gIGNvbnN0IHJlZHVjZXJLZXlzID0gT2JqZWN0LmtleXMocmVkdWNlcnMpO1xuICBjb25zdCBhcmd1bWVudE5hbWUgPSBhY3Rpb24gJiYgYWN0aW9uLnR5cGUgPT09IGFjdGlvblR5cGVzX2RlZmF1bHQuSU5JVCA/IFwicHJlbG9hZGVkU3RhdGUgYXJndW1lbnQgcGFzc2VkIHRvIGNyZWF0ZVN0b3JlXCIgOiBcInByZXZpb3VzIHN0YXRlIHJlY2VpdmVkIGJ5IHRoZSByZWR1Y2VyXCI7XG4gIGlmIChyZWR1Y2VyS2V5cy5sZW5ndGggPT09IDApIHtcbiAgICByZXR1cm4gXCJTdG9yZSBkb2VzIG5vdCBoYXZlIGEgdmFsaWQgcmVkdWNlci4gTWFrZSBzdXJlIHRoZSBhcmd1bWVudCBwYXNzZWQgdG8gY29tYmluZVJlZHVjZXJzIGlzIGFuIG9iamVjdCB3aG9zZSB2YWx1ZXMgYXJlIHJlZHVjZXJzLlwiO1xuICB9XG4gIGlmICghaXNQbGFpbk9iamVjdChpbnB1dFN0YXRlKSkge1xuICAgIHJldHVybiBgVGhlICR7YXJndW1lbnROYW1lfSBoYXMgdW5leHBlY3RlZCB0eXBlIG9mIFwiJHtraW5kT2YoaW5wdXRTdGF0ZSl9XCIuIEV4cGVjdGVkIGFyZ3VtZW50IHRvIGJlIGFuIG9iamVjdCB3aXRoIHRoZSBmb2xsb3dpbmcga2V5czogXCIke3JlZHVjZXJLZXlzLmpvaW4oJ1wiLCBcIicpfVwiYDtcbiAgfVxuICBjb25zdCB1bmV4cGVjdGVkS2V5cyA9IE9iamVjdC5rZXlzKGlucHV0U3RhdGUpLmZpbHRlcigoa2V5KSA9PiAhcmVkdWNlcnMuaGFzT3duUHJvcGVydHkoa2V5KSAmJiAhdW5leHBlY3RlZEtleUNhY2hlW2tleV0pO1xuICB1bmV4cGVjdGVkS2V5cy5mb3JFYWNoKChrZXkpID0+IHtcbiAgICB1bmV4cGVjdGVkS2V5Q2FjaGVba2V5XSA9IHRydWU7XG4gIH0pO1xuICBpZiAoYWN0aW9uICYmIGFjdGlvbi50eXBlID09PSBhY3Rpb25UeXBlc19kZWZhdWx0LlJFUExBQ0UpXG4gICAgcmV0dXJuO1xuICBpZiAodW5leHBlY3RlZEtleXMubGVuZ3RoID4gMCkge1xuICAgIHJldHVybiBgVW5leHBlY3RlZCAke3VuZXhwZWN0ZWRLZXlzLmxlbmd0aCA+IDEgPyBcImtleXNcIiA6IFwia2V5XCJ9IFwiJHt1bmV4cGVjdGVkS2V5cy5qb2luKCdcIiwgXCInKX1cIiBmb3VuZCBpbiAke2FyZ3VtZW50TmFtZX0uIEV4cGVjdGVkIHRvIGZpbmQgb25lIG9mIHRoZSBrbm93biByZWR1Y2VyIGtleXMgaW5zdGVhZDogXCIke3JlZHVjZXJLZXlzLmpvaW4oJ1wiLCBcIicpfVwiLiBVbmV4cGVjdGVkIGtleXMgd2lsbCBiZSBpZ25vcmVkLmA7XG4gIH1cbn1cbmZ1bmN0aW9uIGFzc2VydFJlZHVjZXJTaGFwZShyZWR1Y2Vycykge1xuICBPYmplY3Qua2V5cyhyZWR1Y2VycykuZm9yRWFjaCgoa2V5KSA9PiB7XG4gICAgY29uc3QgcmVkdWNlciA9IHJlZHVjZXJzW2tleV07XG4gICAgY29uc3QgaW5pdGlhbFN0YXRlID0gcmVkdWNlcih2b2lkIDAsIHtcbiAgICAgIHR5cGU6IGFjdGlvblR5cGVzX2RlZmF1bHQuSU5JVFxuICAgIH0pO1xuICAgIGlmICh0eXBlb2YgaW5pdGlhbFN0YXRlID09PSBcInVuZGVmaW5lZFwiKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IocHJvY2Vzcy5lbnYuTk9ERV9FTlYgPT09IFwicHJvZHVjdGlvblwiID8gZm9ybWF0UHJvZEVycm9yTWVzc2FnZSgxMikgOiBgVGhlIHNsaWNlIHJlZHVjZXIgZm9yIGtleSBcIiR7a2V5fVwiIHJldHVybmVkIHVuZGVmaW5lZCBkdXJpbmcgaW5pdGlhbGl6YXRpb24uIElmIHRoZSBzdGF0ZSBwYXNzZWQgdG8gdGhlIHJlZHVjZXIgaXMgdW5kZWZpbmVkLCB5b3UgbXVzdCBleHBsaWNpdGx5IHJldHVybiB0aGUgaW5pdGlhbCBzdGF0ZS4gVGhlIGluaXRpYWwgc3RhdGUgbWF5IG5vdCBiZSB1bmRlZmluZWQuIElmIHlvdSBkb24ndCB3YW50IHRvIHNldCBhIHZhbHVlIGZvciB0aGlzIHJlZHVjZXIsIHlvdSBjYW4gdXNlIG51bGwgaW5zdGVhZCBvZiB1bmRlZmluZWQuYCk7XG4gICAgfVxuICAgIGlmICh0eXBlb2YgcmVkdWNlcih2b2lkIDAsIHtcbiAgICAgIHR5cGU6IGFjdGlvblR5cGVzX2RlZmF1bHQuUFJPQkVfVU5LTk9XTl9BQ1RJT04oKVxuICAgIH0pID09PSBcInVuZGVmaW5lZFwiKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IocHJvY2Vzcy5lbnYuTk9ERV9FTlYgPT09IFwicHJvZHVjdGlvblwiID8gZm9ybWF0UHJvZEVycm9yTWVzc2FnZSgxMykgOiBgVGhlIHNsaWNlIHJlZHVjZXIgZm9yIGtleSBcIiR7a2V5fVwiIHJldHVybmVkIHVuZGVmaW5lZCB3aGVuIHByb2JlZCB3aXRoIGEgcmFuZG9tIHR5cGUuIERvbid0IHRyeSB0byBoYW5kbGUgJyR7YWN0aW9uVHlwZXNfZGVmYXVsdC5JTklUfScgb3Igb3RoZXIgYWN0aW9ucyBpbiBcInJlZHV4LypcIiBuYW1lc3BhY2UuIFRoZXkgYXJlIGNvbnNpZGVyZWQgcHJpdmF0ZS4gSW5zdGVhZCwgeW91IG11c3QgcmV0dXJuIHRoZSBjdXJyZW50IHN0YXRlIGZvciBhbnkgdW5rbm93biBhY3Rpb25zLCB1bmxlc3MgaXQgaXMgdW5kZWZpbmVkLCBpbiB3aGljaCBjYXNlIHlvdSBtdXN0IHJldHVybiB0aGUgaW5pdGlhbCBzdGF0ZSwgcmVnYXJkbGVzcyBvZiB0aGUgYWN0aW9uIHR5cGUuIFRoZSBpbml0aWFsIHN0YXRlIG1heSBub3QgYmUgdW5kZWZpbmVkLCBidXQgY2FuIGJlIG51bGwuYCk7XG4gICAgfVxuICB9KTtcbn1cbmZ1bmN0aW9uIGNvbWJpbmVSZWR1Y2VycyhyZWR1Y2Vycykge1xuICBjb25zdCByZWR1Y2VyS2V5cyA9IE9iamVjdC5rZXlzKHJlZHVjZXJzKTtcbiAgY29uc3QgZmluYWxSZWR1Y2VycyA9IHt9O1xuICBmb3IgKGxldCBpID0gMDsgaSA8IHJlZHVjZXJLZXlzLmxlbmd0aDsgaSsrKSB7XG4gICAgY29uc3Qga2V5ID0gcmVkdWNlcktleXNbaV07XG4gICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIikge1xuICAgICAgaWYgKHR5cGVvZiByZWR1Y2Vyc1trZXldID09PSBcInVuZGVmaW5lZFwiKSB7XG4gICAgICAgIHdhcm5pbmcoYE5vIHJlZHVjZXIgcHJvdmlkZWQgZm9yIGtleSBcIiR7a2V5fVwiYCk7XG4gICAgICB9XG4gICAgfVxuICAgIGlmICh0eXBlb2YgcmVkdWNlcnNba2V5XSA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICBmaW5hbFJlZHVjZXJzW2tleV0gPSByZWR1Y2Vyc1trZXldO1xuICAgIH1cbiAgfVxuICBjb25zdCBmaW5hbFJlZHVjZXJLZXlzID0gT2JqZWN0LmtleXMoZmluYWxSZWR1Y2Vycyk7XG4gIGxldCB1bmV4cGVjdGVkS2V5Q2FjaGU7XG4gIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIpIHtcbiAgICB1bmV4cGVjdGVkS2V5Q2FjaGUgPSB7fTtcbiAgfVxuICBsZXQgc2hhcGVBc3NlcnRpb25FcnJvcjtcbiAgdHJ5IHtcbiAgICBhc3NlcnRSZWR1Y2VyU2hhcGUoZmluYWxSZWR1Y2Vycyk7XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICBzaGFwZUFzc2VydGlvbkVycm9yID0gZTtcbiAgfVxuICByZXR1cm4gZnVuY3Rpb24gY29tYmluYXRpb24oc3RhdGUgPSB7fSwgYWN0aW9uKSB7XG4gICAgaWYgKHNoYXBlQXNzZXJ0aW9uRXJyb3IpIHtcbiAgICAgIHRocm93IHNoYXBlQXNzZXJ0aW9uRXJyb3I7XG4gICAgfVxuICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIpIHtcbiAgICAgIGNvbnN0IHdhcm5pbmdNZXNzYWdlID0gZ2V0VW5leHBlY3RlZFN0YXRlU2hhcGVXYXJuaW5nTWVzc2FnZShzdGF0ZSwgZmluYWxSZWR1Y2VycywgYWN0aW9uLCB1bmV4cGVjdGVkS2V5Q2FjaGUpO1xuICAgICAgaWYgKHdhcm5pbmdNZXNzYWdlKSB7XG4gICAgICAgIHdhcm5pbmcod2FybmluZ01lc3NhZ2UpO1xuICAgICAgfVxuICAgIH1cbiAgICBsZXQgaGFzQ2hhbmdlZCA9IGZhbHNlO1xuICAgIGNvbnN0IG5leHRTdGF0ZSA9IHt9O1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgZmluYWxSZWR1Y2VyS2V5cy5sZW5ndGg7IGkrKykge1xuICAgICAgY29uc3Qga2V5ID0gZmluYWxSZWR1Y2VyS2V5c1tpXTtcbiAgICAgIGNvbnN0IHJlZHVjZXIgPSBmaW5hbFJlZHVjZXJzW2tleV07XG4gICAgICBjb25zdCBwcmV2aW91c1N0YXRlRm9yS2V5ID0gc3RhdGVba2V5XTtcbiAgICAgIGNvbnN0IG5leHRTdGF0ZUZvcktleSA9IHJlZHVjZXIocHJldmlvdXNTdGF0ZUZvcktleSwgYWN0aW9uKTtcbiAgICAgIGlmICh0eXBlb2YgbmV4dFN0YXRlRm9yS2V5ID09PSBcInVuZGVmaW5lZFwiKSB7XG4gICAgICAgIGNvbnN0IGFjdGlvblR5cGUgPSBhY3Rpb24gJiYgYWN0aW9uLnR5cGU7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihwcm9jZXNzLmVudi5OT0RFX0VOViA9PT0gXCJwcm9kdWN0aW9uXCIgPyBmb3JtYXRQcm9kRXJyb3JNZXNzYWdlKDE0KSA6IGBXaGVuIGNhbGxlZCB3aXRoIGFuIGFjdGlvbiBvZiB0eXBlICR7YWN0aW9uVHlwZSA/IGBcIiR7U3RyaW5nKGFjdGlvblR5cGUpfVwiYCA6IFwiKHVua25vd24gdHlwZSlcIn0sIHRoZSBzbGljZSByZWR1Y2VyIGZvciBrZXkgXCIke2tleX1cIiByZXR1cm5lZCB1bmRlZmluZWQuIFRvIGlnbm9yZSBhbiBhY3Rpb24sIHlvdSBtdXN0IGV4cGxpY2l0bHkgcmV0dXJuIHRoZSBwcmV2aW91cyBzdGF0ZS4gSWYgeW91IHdhbnQgdGhpcyByZWR1Y2VyIHRvIGhvbGQgbm8gdmFsdWUsIHlvdSBjYW4gcmV0dXJuIG51bGwgaW5zdGVhZCBvZiB1bmRlZmluZWQuYCk7XG4gICAgICB9XG4gICAgICBuZXh0U3RhdGVba2V5XSA9IG5leHRTdGF0ZUZvcktleTtcbiAgICAgIGhhc0NoYW5nZWQgPSBoYXNDaGFuZ2VkIHx8IG5leHRTdGF0ZUZvcktleSAhPT0gcHJldmlvdXNTdGF0ZUZvcktleTtcbiAgICB9XG4gICAgaGFzQ2hhbmdlZCA9IGhhc0NoYW5nZWQgfHwgZmluYWxSZWR1Y2VyS2V5cy5sZW5ndGggIT09IE9iamVjdC5rZXlzKHN0YXRlKS5sZW5ndGg7XG4gICAgcmV0dXJuIGhhc0NoYW5nZWQgPyBuZXh0U3RhdGUgOiBzdGF0ZTtcbiAgfTtcbn1cblxuLy8gc3JjL2JpbmRBY3Rpb25DcmVhdG9ycy50c1xuZnVuY3Rpb24gYmluZEFjdGlvbkNyZWF0b3IoYWN0aW9uQ3JlYXRvciwgZGlzcGF0Y2gpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uKC4uLmFyZ3MpIHtcbiAgICByZXR1cm4gZGlzcGF0Y2goYWN0aW9uQ3JlYXRvci5hcHBseSh0aGlzLCBhcmdzKSk7XG4gIH07XG59XG5mdW5jdGlvbiBiaW5kQWN0aW9uQ3JlYXRvcnMoYWN0aW9uQ3JlYXRvcnMsIGRpc3BhdGNoKSB7XG4gIGlmICh0eXBlb2YgYWN0aW9uQ3JlYXRvcnMgPT09IFwiZnVuY3Rpb25cIikge1xuICAgIHJldHVybiBiaW5kQWN0aW9uQ3JlYXRvcihhY3Rpb25DcmVhdG9ycywgZGlzcGF0Y2gpO1xuICB9XG4gIGlmICh0eXBlb2YgYWN0aW9uQ3JlYXRvcnMgIT09IFwib2JqZWN0XCIgfHwgYWN0aW9uQ3JlYXRvcnMgPT09IG51bGwpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IocHJvY2Vzcy5lbnYuTk9ERV9FTlYgPT09IFwicHJvZHVjdGlvblwiID8gZm9ybWF0UHJvZEVycm9yTWVzc2FnZSgxNikgOiBgYmluZEFjdGlvbkNyZWF0b3JzIGV4cGVjdGVkIGFuIG9iamVjdCBvciBhIGZ1bmN0aW9uLCBidXQgaW5zdGVhZCByZWNlaXZlZDogJyR7a2luZE9mKGFjdGlvbkNyZWF0b3JzKX0nLiBEaWQgeW91IHdyaXRlIFwiaW1wb3J0IEFjdGlvbkNyZWF0b3JzIGZyb21cIiBpbnN0ZWFkIG9mIFwiaW1wb3J0ICogYXMgQWN0aW9uQ3JlYXRvcnMgZnJvbVwiP2ApO1xuICB9XG4gIGNvbnN0IGJvdW5kQWN0aW9uQ3JlYXRvcnMgPSB7fTtcbiAgZm9yIChjb25zdCBrZXkgaW4gYWN0aW9uQ3JlYXRvcnMpIHtcbiAgICBjb25zdCBhY3Rpb25DcmVhdG9yID0gYWN0aW9uQ3JlYXRvcnNba2V5XTtcbiAgICBpZiAodHlwZW9mIGFjdGlvbkNyZWF0b3IgPT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgYm91bmRBY3Rpb25DcmVhdG9yc1trZXldID0gYmluZEFjdGlvbkNyZWF0b3IoYWN0aW9uQ3JlYXRvciwgZGlzcGF0Y2gpO1xuICAgIH1cbiAgfVxuICByZXR1cm4gYm91bmRBY3Rpb25DcmVhdG9ycztcbn1cblxuLy8gc3JjL2NvbXBvc2UudHNcbmZ1bmN0aW9uIGNvbXBvc2UoLi4uZnVuY3MpIHtcbiAgaWYgKGZ1bmNzLmxlbmd0aCA9PT0gMCkge1xuICAgIHJldHVybiAoYXJnKSA9PiBhcmc7XG4gIH1cbiAgaWYgKGZ1bmNzLmxlbmd0aCA9PT0gMSkge1xuICAgIHJldHVybiBmdW5jc1swXTtcbiAgfVxuICByZXR1cm4gZnVuY3MucmVkdWNlKChhLCBiKSA9PiAoLi4uYXJncykgPT4gYShiKC4uLmFyZ3MpKSk7XG59XG5cbi8vIHNyYy9hcHBseU1pZGRsZXdhcmUudHNcbmZ1bmN0aW9uIGFwcGx5TWlkZGxld2FyZSguLi5taWRkbGV3YXJlcykge1xuICByZXR1cm4gKGNyZWF0ZVN0b3JlMikgPT4gKHJlZHVjZXIsIHByZWxvYWRlZFN0YXRlKSA9PiB7XG4gICAgY29uc3Qgc3RvcmUgPSBjcmVhdGVTdG9yZTIocmVkdWNlciwgcHJlbG9hZGVkU3RhdGUpO1xuICAgIGxldCBkaXNwYXRjaCA9ICgpID0+IHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihwcm9jZXNzLmVudi5OT0RFX0VOViA9PT0gXCJwcm9kdWN0aW9uXCIgPyBmb3JtYXRQcm9kRXJyb3JNZXNzYWdlKDE1KSA6IFwiRGlzcGF0Y2hpbmcgd2hpbGUgY29uc3RydWN0aW5nIHlvdXIgbWlkZGxld2FyZSBpcyBub3QgYWxsb3dlZC4gT3RoZXIgbWlkZGxld2FyZSB3b3VsZCBub3QgYmUgYXBwbGllZCB0byB0aGlzIGRpc3BhdGNoLlwiKTtcbiAgICB9O1xuICAgIGNvbnN0IG1pZGRsZXdhcmVBUEkgPSB7XG4gICAgICBnZXRTdGF0ZTogc3RvcmUuZ2V0U3RhdGUsXG4gICAgICBkaXNwYXRjaDogKGFjdGlvbiwgLi4uYXJncykgPT4gZGlzcGF0Y2goYWN0aW9uLCAuLi5hcmdzKVxuICAgIH07XG4gICAgY29uc3QgY2hhaW4gPSBtaWRkbGV3YXJlcy5tYXAoKG1pZGRsZXdhcmUpID0+IG1pZGRsZXdhcmUobWlkZGxld2FyZUFQSSkpO1xuICAgIGRpc3BhdGNoID0gY29tcG9zZSguLi5jaGFpbikoc3RvcmUuZGlzcGF0Y2gpO1xuICAgIHJldHVybiB7XG4gICAgICAuLi5zdG9yZSxcbiAgICAgIGRpc3BhdGNoXG4gICAgfTtcbiAgfTtcbn1cblxuLy8gc3JjL3V0aWxzL2lzQWN0aW9uLnRzXG5mdW5jdGlvbiBpc0FjdGlvbihhY3Rpb24pIHtcbiAgcmV0dXJuIGlzUGxhaW5PYmplY3QoYWN0aW9uKSAmJiBcInR5cGVcIiBpbiBhY3Rpb24gJiYgdHlwZW9mIGFjdGlvbi50eXBlID09PSBcInN0cmluZ1wiO1xufVxuZXhwb3J0IHtcbiAgYWN0aW9uVHlwZXNfZGVmYXVsdCBhcyBfX0RPX05PVF9VU0VfX0FjdGlvblR5cGVzLFxuICBhcHBseU1pZGRsZXdhcmUsXG4gIGJpbmRBY3Rpb25DcmVhdG9ycyxcbiAgY29tYmluZVJlZHVjZXJzLFxuICBjb21wb3NlLFxuICBjcmVhdGVTdG9yZSxcbiAgaXNBY3Rpb24sXG4gIGlzUGxhaW5PYmplY3QsXG4gIGxlZ2FjeV9jcmVhdGVTdG9yZVxufTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXJlZHV4Lm1qcy5tYXAiLCIvLyBzcmMvaW5kZXgudHNcbmZ1bmN0aW9uIGNyZWF0ZVRodW5rTWlkZGxld2FyZShleHRyYUFyZ3VtZW50KSB7XG4gIGNvbnN0IG1pZGRsZXdhcmUgPSAoeyBkaXNwYXRjaCwgZ2V0U3RhdGUgfSkgPT4gKG5leHQpID0+IChhY3Rpb24pID0+IHtcbiAgICBpZiAodHlwZW9mIGFjdGlvbiA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICByZXR1cm4gYWN0aW9uKGRpc3BhdGNoLCBnZXRTdGF0ZSwgZXh0cmFBcmd1bWVudCk7XG4gICAgfVxuICAgIHJldHVybiBuZXh0KGFjdGlvbik7XG4gIH07XG4gIHJldHVybiBtaWRkbGV3YXJlO1xufVxudmFyIHRodW5rID0gY3JlYXRlVGh1bmtNaWRkbGV3YXJlKCk7XG52YXIgd2l0aEV4dHJhQXJndW1lbnQgPSBjcmVhdGVUaHVua01pZGRsZXdhcmU7XG5leHBvcnQge1xuICB0aHVuayxcbiAgd2l0aEV4dHJhQXJndW1lbnRcbn07XG4iLCIvLyBzcmMvdXRpbHMvZW52LnRzXG52YXIgTk9USElORyA9IFN5bWJvbC5mb3IoXCJpbW1lci1ub3RoaW5nXCIpO1xudmFyIERSQUZUQUJMRSA9IFN5bWJvbC5mb3IoXCJpbW1lci1kcmFmdGFibGVcIik7XG52YXIgRFJBRlRfU1RBVEUgPSBTeW1ib2wuZm9yKFwiaW1tZXItc3RhdGVcIik7XG5cbi8vIHNyYy91dGlscy9lcnJvcnMudHNcbnZhciBlcnJvcnMgPSBwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIgPyBbXG4gIC8vIEFsbCBlcnJvciBjb2Rlcywgc3RhcnRpbmcgYnkgMDpcbiAgZnVuY3Rpb24ocGx1Z2luKSB7XG4gICAgcmV0dXJuIGBUaGUgcGx1Z2luIGZvciAnJHtwbHVnaW59JyBoYXMgbm90IGJlZW4gbG9hZGVkIGludG8gSW1tZXIuIFRvIGVuYWJsZSB0aGUgcGx1Z2luLCBpbXBvcnQgYW5kIGNhbGwgXFxgZW5hYmxlJHtwbHVnaW59KClcXGAgd2hlbiBpbml0aWFsaXppbmcgeW91ciBhcHBsaWNhdGlvbi5gO1xuICB9LFxuICBmdW5jdGlvbih0aGluZykge1xuICAgIHJldHVybiBgcHJvZHVjZSBjYW4gb25seSBiZSBjYWxsZWQgb24gdGhpbmdzIHRoYXQgYXJlIGRyYWZ0YWJsZTogcGxhaW4gb2JqZWN0cywgYXJyYXlzLCBNYXAsIFNldCBvciBjbGFzc2VzIHRoYXQgYXJlIG1hcmtlZCB3aXRoICdbaW1tZXJhYmxlXTogdHJ1ZScuIEdvdCAnJHt0aGluZ30nYDtcbiAgfSxcbiAgXCJUaGlzIG9iamVjdCBoYXMgYmVlbiBmcm96ZW4gYW5kIHNob3VsZCBub3QgYmUgbXV0YXRlZFwiLFxuICBmdW5jdGlvbihkYXRhKSB7XG4gICAgcmV0dXJuIFwiQ2Fubm90IHVzZSBhIHByb3h5IHRoYXQgaGFzIGJlZW4gcmV2b2tlZC4gRGlkIHlvdSBwYXNzIGFuIG9iamVjdCBmcm9tIGluc2lkZSBhbiBpbW1lciBmdW5jdGlvbiB0byBhbiBhc3luYyBwcm9jZXNzPyBcIiArIGRhdGE7XG4gIH0sXG4gIFwiQW4gaW1tZXIgcHJvZHVjZXIgcmV0dXJuZWQgYSBuZXcgdmFsdWUgKmFuZCogbW9kaWZpZWQgaXRzIGRyYWZ0LiBFaXRoZXIgcmV0dXJuIGEgbmV3IHZhbHVlICpvciogbW9kaWZ5IHRoZSBkcmFmdC5cIixcbiAgXCJJbW1lciBmb3JiaWRzIGNpcmN1bGFyIHJlZmVyZW5jZXNcIixcbiAgXCJUaGUgZmlyc3Qgb3Igc2Vjb25kIGFyZ3VtZW50IHRvIGBwcm9kdWNlYCBtdXN0IGJlIGEgZnVuY3Rpb25cIixcbiAgXCJUaGUgdGhpcmQgYXJndW1lbnQgdG8gYHByb2R1Y2VgIG11c3QgYmUgYSBmdW5jdGlvbiBvciB1bmRlZmluZWRcIixcbiAgXCJGaXJzdCBhcmd1bWVudCB0byBgY3JlYXRlRHJhZnRgIG11c3QgYmUgYSBwbGFpbiBvYmplY3QsIGFuIGFycmF5LCBvciBhbiBpbW1lcmFibGUgb2JqZWN0XCIsXG4gIFwiRmlyc3QgYXJndW1lbnQgdG8gYGZpbmlzaERyYWZ0YCBtdXN0IGJlIGEgZHJhZnQgcmV0dXJuZWQgYnkgYGNyZWF0ZURyYWZ0YFwiLFxuICBmdW5jdGlvbih0aGluZykge1xuICAgIHJldHVybiBgJ2N1cnJlbnQnIGV4cGVjdHMgYSBkcmFmdCwgZ290OiAke3RoaW5nfWA7XG4gIH0sXG4gIFwiT2JqZWN0LmRlZmluZVByb3BlcnR5KCkgY2Fubm90IGJlIHVzZWQgb24gYW4gSW1tZXIgZHJhZnRcIixcbiAgXCJPYmplY3Quc2V0UHJvdG90eXBlT2YoKSBjYW5ub3QgYmUgdXNlZCBvbiBhbiBJbW1lciBkcmFmdFwiLFxuICBcIkltbWVyIG9ubHkgc3VwcG9ydHMgZGVsZXRpbmcgYXJyYXkgaW5kaWNlc1wiLFxuICBcIkltbWVyIG9ubHkgc3VwcG9ydHMgc2V0dGluZyBhcnJheSBpbmRpY2VzIGFuZCB0aGUgJ2xlbmd0aCcgcHJvcGVydHlcIixcbiAgZnVuY3Rpb24odGhpbmcpIHtcbiAgICByZXR1cm4gYCdvcmlnaW5hbCcgZXhwZWN0cyBhIGRyYWZ0LCBnb3Q6ICR7dGhpbmd9YDtcbiAgfVxuICAvLyBOb3RlOiBpZiBtb3JlIGVycm9ycyBhcmUgYWRkZWQsIHRoZSBlcnJvck9mZnNldCBpbiBQYXRjaGVzLnRzIHNob3VsZCBiZSBpbmNyZWFzZWRcbiAgLy8gU2VlIFBhdGNoZXMudHMgZm9yIGFkZGl0aW9uYWwgZXJyb3JzXG5dIDogW107XG5mdW5jdGlvbiBkaWUoZXJyb3IsIC4uLmFyZ3MpIHtcbiAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIikge1xuICAgIGNvbnN0IGUgPSBlcnJvcnNbZXJyb3JdO1xuICAgIGNvbnN0IG1zZyA9IHR5cGVvZiBlID09PSBcImZ1bmN0aW9uXCIgPyBlLmFwcGx5KG51bGwsIGFyZ3MpIDogZTtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYFtJbW1lcl0gJHttc2d9YCk7XG4gIH1cbiAgdGhyb3cgbmV3IEVycm9yKFxuICAgIGBbSW1tZXJdIG1pbmlmaWVkIGVycm9yIG5yOiAke2Vycm9yfS4gRnVsbCBlcnJvciBhdDogaHR0cHM6Ly9iaXQubHkvM2NYRUtXZmBcbiAgKTtcbn1cblxuLy8gc3JjL3V0aWxzL2NvbW1vbi50c1xudmFyIGdldFByb3RvdHlwZU9mID0gT2JqZWN0LmdldFByb3RvdHlwZU9mO1xuZnVuY3Rpb24gaXNEcmFmdCh2YWx1ZSkge1xuICByZXR1cm4gISF2YWx1ZSAmJiAhIXZhbHVlW0RSQUZUX1NUQVRFXTtcbn1cbmZ1bmN0aW9uIGlzRHJhZnRhYmxlKHZhbHVlKSB7XG4gIGlmICghdmFsdWUpXG4gICAgcmV0dXJuIGZhbHNlO1xuICByZXR1cm4gaXNQbGFpbk9iamVjdCh2YWx1ZSkgfHwgQXJyYXkuaXNBcnJheSh2YWx1ZSkgfHwgISF2YWx1ZVtEUkFGVEFCTEVdIHx8ICEhdmFsdWUuY29uc3RydWN0b3I/LltEUkFGVEFCTEVdIHx8IGlzTWFwKHZhbHVlKSB8fCBpc1NldCh2YWx1ZSk7XG59XG52YXIgb2JqZWN0Q3RvclN0cmluZyA9IE9iamVjdC5wcm90b3R5cGUuY29uc3RydWN0b3IudG9TdHJpbmcoKTtcbmZ1bmN0aW9uIGlzUGxhaW5PYmplY3QodmFsdWUpIHtcbiAgaWYgKCF2YWx1ZSB8fCB0eXBlb2YgdmFsdWUgIT09IFwib2JqZWN0XCIpXG4gICAgcmV0dXJuIGZhbHNlO1xuICBjb25zdCBwcm90byA9IGdldFByb3RvdHlwZU9mKHZhbHVlKTtcbiAgaWYgKHByb3RvID09PSBudWxsKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbiAgY29uc3QgQ3RvciA9IE9iamVjdC5oYXNPd25Qcm9wZXJ0eS5jYWxsKHByb3RvLCBcImNvbnN0cnVjdG9yXCIpICYmIHByb3RvLmNvbnN0cnVjdG9yO1xuICBpZiAoQ3RvciA9PT0gT2JqZWN0KVxuICAgIHJldHVybiB0cnVlO1xuICByZXR1cm4gdHlwZW9mIEN0b3IgPT0gXCJmdW5jdGlvblwiICYmIEZ1bmN0aW9uLnRvU3RyaW5nLmNhbGwoQ3RvcikgPT09IG9iamVjdEN0b3JTdHJpbmc7XG59XG5mdW5jdGlvbiBvcmlnaW5hbCh2YWx1ZSkge1xuICBpZiAoIWlzRHJhZnQodmFsdWUpKVxuICAgIGRpZSgxNSwgdmFsdWUpO1xuICByZXR1cm4gdmFsdWVbRFJBRlRfU1RBVEVdLmJhc2VfO1xufVxuZnVuY3Rpb24gZWFjaChvYmosIGl0ZXIpIHtcbiAgaWYgKGdldEFyY2h0eXBlKG9iaikgPT09IDAgLyogT2JqZWN0ICovKSB7XG4gICAgUmVmbGVjdC5vd25LZXlzKG9iaikuZm9yRWFjaCgoa2V5KSA9PiB7XG4gICAgICBpdGVyKGtleSwgb2JqW2tleV0sIG9iaik7XG4gICAgfSk7XG4gIH0gZWxzZSB7XG4gICAgb2JqLmZvckVhY2goKGVudHJ5LCBpbmRleCkgPT4gaXRlcihpbmRleCwgZW50cnksIG9iaikpO1xuICB9XG59XG5mdW5jdGlvbiBnZXRBcmNodHlwZSh0aGluZykge1xuICBjb25zdCBzdGF0ZSA9IHRoaW5nW0RSQUZUX1NUQVRFXTtcbiAgcmV0dXJuIHN0YXRlID8gc3RhdGUudHlwZV8gOiBBcnJheS5pc0FycmF5KHRoaW5nKSA/IDEgLyogQXJyYXkgKi8gOiBpc01hcCh0aGluZykgPyAyIC8qIE1hcCAqLyA6IGlzU2V0KHRoaW5nKSA/IDMgLyogU2V0ICovIDogMCAvKiBPYmplY3QgKi87XG59XG5mdW5jdGlvbiBoYXModGhpbmcsIHByb3ApIHtcbiAgcmV0dXJuIGdldEFyY2h0eXBlKHRoaW5nKSA9PT0gMiAvKiBNYXAgKi8gPyB0aGluZy5oYXMocHJvcCkgOiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwodGhpbmcsIHByb3ApO1xufVxuZnVuY3Rpb24gZ2V0KHRoaW5nLCBwcm9wKSB7XG4gIHJldHVybiBnZXRBcmNodHlwZSh0aGluZykgPT09IDIgLyogTWFwICovID8gdGhpbmcuZ2V0KHByb3ApIDogdGhpbmdbcHJvcF07XG59XG5mdW5jdGlvbiBzZXQodGhpbmcsIHByb3BPck9sZFZhbHVlLCB2YWx1ZSkge1xuICBjb25zdCB0ID0gZ2V0QXJjaHR5cGUodGhpbmcpO1xuICBpZiAodCA9PT0gMiAvKiBNYXAgKi8pXG4gICAgdGhpbmcuc2V0KHByb3BPck9sZFZhbHVlLCB2YWx1ZSk7XG4gIGVsc2UgaWYgKHQgPT09IDMgLyogU2V0ICovKSB7XG4gICAgdGhpbmcuYWRkKHZhbHVlKTtcbiAgfSBlbHNlXG4gICAgdGhpbmdbcHJvcE9yT2xkVmFsdWVdID0gdmFsdWU7XG59XG5mdW5jdGlvbiBpcyh4LCB5KSB7XG4gIGlmICh4ID09PSB5KSB7XG4gICAgcmV0dXJuIHggIT09IDAgfHwgMSAvIHggPT09IDEgLyB5O1xuICB9IGVsc2Uge1xuICAgIHJldHVybiB4ICE9PSB4ICYmIHkgIT09IHk7XG4gIH1cbn1cbmZ1bmN0aW9uIGlzTWFwKHRhcmdldCkge1xuICByZXR1cm4gdGFyZ2V0IGluc3RhbmNlb2YgTWFwO1xufVxuZnVuY3Rpb24gaXNTZXQodGFyZ2V0KSB7XG4gIHJldHVybiB0YXJnZXQgaW5zdGFuY2VvZiBTZXQ7XG59XG5mdW5jdGlvbiBsYXRlc3Qoc3RhdGUpIHtcbiAgcmV0dXJuIHN0YXRlLmNvcHlfIHx8IHN0YXRlLmJhc2VfO1xufVxuZnVuY3Rpb24gc2hhbGxvd0NvcHkoYmFzZSwgc3RyaWN0KSB7XG4gIGlmIChpc01hcChiYXNlKSkge1xuICAgIHJldHVybiBuZXcgTWFwKGJhc2UpO1xuICB9XG4gIGlmIChpc1NldChiYXNlKSkge1xuICAgIHJldHVybiBuZXcgU2V0KGJhc2UpO1xuICB9XG4gIGlmIChBcnJheS5pc0FycmF5KGJhc2UpKVxuICAgIHJldHVybiBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChiYXNlKTtcbiAgY29uc3QgaXNQbGFpbiA9IGlzUGxhaW5PYmplY3QoYmFzZSk7XG4gIGlmIChzdHJpY3QgPT09IHRydWUgfHwgc3RyaWN0ID09PSBcImNsYXNzX29ubHlcIiAmJiAhaXNQbGFpbikge1xuICAgIGNvbnN0IGRlc2NyaXB0b3JzID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnMoYmFzZSk7XG4gICAgZGVsZXRlIGRlc2NyaXB0b3JzW0RSQUZUX1NUQVRFXTtcbiAgICBsZXQga2V5cyA9IFJlZmxlY3Qub3duS2V5cyhkZXNjcmlwdG9ycyk7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBrZXlzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBjb25zdCBrZXkgPSBrZXlzW2ldO1xuICAgICAgY29uc3QgZGVzYyA9IGRlc2NyaXB0b3JzW2tleV07XG4gICAgICBpZiAoZGVzYy53cml0YWJsZSA9PT0gZmFsc2UpIHtcbiAgICAgICAgZGVzYy53cml0YWJsZSA9IHRydWU7XG4gICAgICAgIGRlc2MuY29uZmlndXJhYmxlID0gdHJ1ZTtcbiAgICAgIH1cbiAgICAgIGlmIChkZXNjLmdldCB8fCBkZXNjLnNldClcbiAgICAgICAgZGVzY3JpcHRvcnNba2V5XSA9IHtcbiAgICAgICAgICBjb25maWd1cmFibGU6IHRydWUsXG4gICAgICAgICAgd3JpdGFibGU6IHRydWUsXG4gICAgICAgICAgLy8gY291bGQgbGl2ZSB3aXRoICEhZGVzYy5zZXQgYXMgd2VsbCBoZXJlLi4uXG4gICAgICAgICAgZW51bWVyYWJsZTogZGVzYy5lbnVtZXJhYmxlLFxuICAgICAgICAgIHZhbHVlOiBiYXNlW2tleV1cbiAgICAgICAgfTtcbiAgICB9XG4gICAgcmV0dXJuIE9iamVjdC5jcmVhdGUoZ2V0UHJvdG90eXBlT2YoYmFzZSksIGRlc2NyaXB0b3JzKTtcbiAgfSBlbHNlIHtcbiAgICBjb25zdCBwcm90byA9IGdldFByb3RvdHlwZU9mKGJhc2UpO1xuICAgIGlmIChwcm90byAhPT0gbnVsbCAmJiBpc1BsYWluKSB7XG4gICAgICByZXR1cm4geyAuLi5iYXNlIH07XG4gICAgfVxuICAgIGNvbnN0IG9iaiA9IE9iamVjdC5jcmVhdGUocHJvdG8pO1xuICAgIHJldHVybiBPYmplY3QuYXNzaWduKG9iaiwgYmFzZSk7XG4gIH1cbn1cbmZ1bmN0aW9uIGZyZWV6ZShvYmosIGRlZXAgPSBmYWxzZSkge1xuICBpZiAoaXNGcm96ZW4ob2JqKSB8fCBpc0RyYWZ0KG9iaikgfHwgIWlzRHJhZnRhYmxlKG9iaikpXG4gICAgcmV0dXJuIG9iajtcbiAgaWYgKGdldEFyY2h0eXBlKG9iaikgPiAxKSB7XG4gICAgb2JqLnNldCA9IG9iai5hZGQgPSBvYmouY2xlYXIgPSBvYmouZGVsZXRlID0gZG9udE11dGF0ZUZyb3plbkNvbGxlY3Rpb25zO1xuICB9XG4gIE9iamVjdC5mcmVlemUob2JqKTtcbiAgaWYgKGRlZXApXG4gICAgT2JqZWN0LmVudHJpZXMob2JqKS5mb3JFYWNoKChba2V5LCB2YWx1ZV0pID0+IGZyZWV6ZSh2YWx1ZSwgdHJ1ZSkpO1xuICByZXR1cm4gb2JqO1xufVxuZnVuY3Rpb24gZG9udE11dGF0ZUZyb3plbkNvbGxlY3Rpb25zKCkge1xuICBkaWUoMik7XG59XG5mdW5jdGlvbiBpc0Zyb3plbihvYmopIHtcbiAgcmV0dXJuIE9iamVjdC5pc0Zyb3plbihvYmopO1xufVxuXG4vLyBzcmMvdXRpbHMvcGx1Z2lucy50c1xudmFyIHBsdWdpbnMgPSB7fTtcbmZ1bmN0aW9uIGdldFBsdWdpbihwbHVnaW5LZXkpIHtcbiAgY29uc3QgcGx1Z2luID0gcGx1Z2luc1twbHVnaW5LZXldO1xuICBpZiAoIXBsdWdpbikge1xuICAgIGRpZSgwLCBwbHVnaW5LZXkpO1xuICB9XG4gIHJldHVybiBwbHVnaW47XG59XG5mdW5jdGlvbiBsb2FkUGx1Z2luKHBsdWdpbktleSwgaW1wbGVtZW50YXRpb24pIHtcbiAgaWYgKCFwbHVnaW5zW3BsdWdpbktleV0pXG4gICAgcGx1Z2luc1twbHVnaW5LZXldID0gaW1wbGVtZW50YXRpb247XG59XG5cbi8vIHNyYy9jb3JlL3Njb3BlLnRzXG52YXIgY3VycmVudFNjb3BlO1xuZnVuY3Rpb24gZ2V0Q3VycmVudFNjb3BlKCkge1xuICByZXR1cm4gY3VycmVudFNjb3BlO1xufVxuZnVuY3Rpb24gY3JlYXRlU2NvcGUocGFyZW50XywgaW1tZXJfKSB7XG4gIHJldHVybiB7XG4gICAgZHJhZnRzXzogW10sXG4gICAgcGFyZW50XyxcbiAgICBpbW1lcl8sXG4gICAgLy8gV2hlbmV2ZXIgdGhlIG1vZGlmaWVkIGRyYWZ0IGNvbnRhaW5zIGEgZHJhZnQgZnJvbSBhbm90aGVyIHNjb3BlLCB3ZVxuICAgIC8vIG5lZWQgdG8gcHJldmVudCBhdXRvLWZyZWV6aW5nIHNvIHRoZSB1bm93bmVkIGRyYWZ0IGNhbiBiZSBmaW5hbGl6ZWQuXG4gICAgY2FuQXV0b0ZyZWV6ZV86IHRydWUsXG4gICAgdW5maW5hbGl6ZWREcmFmdHNfOiAwXG4gIH07XG59XG5mdW5jdGlvbiB1c2VQYXRjaGVzSW5TY29wZShzY29wZSwgcGF0Y2hMaXN0ZW5lcikge1xuICBpZiAocGF0Y2hMaXN0ZW5lcikge1xuICAgIGdldFBsdWdpbihcIlBhdGNoZXNcIik7XG4gICAgc2NvcGUucGF0Y2hlc18gPSBbXTtcbiAgICBzY29wZS5pbnZlcnNlUGF0Y2hlc18gPSBbXTtcbiAgICBzY29wZS5wYXRjaExpc3RlbmVyXyA9IHBhdGNoTGlzdGVuZXI7XG4gIH1cbn1cbmZ1bmN0aW9uIHJldm9rZVNjb3BlKHNjb3BlKSB7XG4gIGxlYXZlU2NvcGUoc2NvcGUpO1xuICBzY29wZS5kcmFmdHNfLmZvckVhY2gocmV2b2tlRHJhZnQpO1xuICBzY29wZS5kcmFmdHNfID0gbnVsbDtcbn1cbmZ1bmN0aW9uIGxlYXZlU2NvcGUoc2NvcGUpIHtcbiAgaWYgKHNjb3BlID09PSBjdXJyZW50U2NvcGUpIHtcbiAgICBjdXJyZW50U2NvcGUgPSBzY29wZS5wYXJlbnRfO1xuICB9XG59XG5mdW5jdGlvbiBlbnRlclNjb3BlKGltbWVyMikge1xuICByZXR1cm4gY3VycmVudFNjb3BlID0gY3JlYXRlU2NvcGUoY3VycmVudFNjb3BlLCBpbW1lcjIpO1xufVxuZnVuY3Rpb24gcmV2b2tlRHJhZnQoZHJhZnQpIHtcbiAgY29uc3Qgc3RhdGUgPSBkcmFmdFtEUkFGVF9TVEFURV07XG4gIGlmIChzdGF0ZS50eXBlXyA9PT0gMCAvKiBPYmplY3QgKi8gfHwgc3RhdGUudHlwZV8gPT09IDEgLyogQXJyYXkgKi8pXG4gICAgc3RhdGUucmV2b2tlXygpO1xuICBlbHNlXG4gICAgc3RhdGUucmV2b2tlZF8gPSB0cnVlO1xufVxuXG4vLyBzcmMvY29yZS9maW5hbGl6ZS50c1xuZnVuY3Rpb24gcHJvY2Vzc1Jlc3VsdChyZXN1bHQsIHNjb3BlKSB7XG4gIHNjb3BlLnVuZmluYWxpemVkRHJhZnRzXyA9IHNjb3BlLmRyYWZ0c18ubGVuZ3RoO1xuICBjb25zdCBiYXNlRHJhZnQgPSBzY29wZS5kcmFmdHNfWzBdO1xuICBjb25zdCBpc1JlcGxhY2VkID0gcmVzdWx0ICE9PSB2b2lkIDAgJiYgcmVzdWx0ICE9PSBiYXNlRHJhZnQ7XG4gIGlmIChpc1JlcGxhY2VkKSB7XG4gICAgaWYgKGJhc2VEcmFmdFtEUkFGVF9TVEFURV0ubW9kaWZpZWRfKSB7XG4gICAgICByZXZva2VTY29wZShzY29wZSk7XG4gICAgICBkaWUoNCk7XG4gICAgfVxuICAgIGlmIChpc0RyYWZ0YWJsZShyZXN1bHQpKSB7XG4gICAgICByZXN1bHQgPSBmaW5hbGl6ZShzY29wZSwgcmVzdWx0KTtcbiAgICAgIGlmICghc2NvcGUucGFyZW50XylcbiAgICAgICAgbWF5YmVGcmVlemUoc2NvcGUsIHJlc3VsdCk7XG4gICAgfVxuICAgIGlmIChzY29wZS5wYXRjaGVzXykge1xuICAgICAgZ2V0UGx1Z2luKFwiUGF0Y2hlc1wiKS5nZW5lcmF0ZVJlcGxhY2VtZW50UGF0Y2hlc18oXG4gICAgICAgIGJhc2VEcmFmdFtEUkFGVF9TVEFURV0uYmFzZV8sXG4gICAgICAgIHJlc3VsdCxcbiAgICAgICAgc2NvcGUucGF0Y2hlc18sXG4gICAgICAgIHNjb3BlLmludmVyc2VQYXRjaGVzX1xuICAgICAgKTtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgcmVzdWx0ID0gZmluYWxpemUoc2NvcGUsIGJhc2VEcmFmdCwgW10pO1xuICB9XG4gIHJldm9rZVNjb3BlKHNjb3BlKTtcbiAgaWYgKHNjb3BlLnBhdGNoZXNfKSB7XG4gICAgc2NvcGUucGF0Y2hMaXN0ZW5lcl8oc2NvcGUucGF0Y2hlc18sIHNjb3BlLmludmVyc2VQYXRjaGVzXyk7XG4gIH1cbiAgcmV0dXJuIHJlc3VsdCAhPT0gTk9USElORyA/IHJlc3VsdCA6IHZvaWQgMDtcbn1cbmZ1bmN0aW9uIGZpbmFsaXplKHJvb3RTY29wZSwgdmFsdWUsIHBhdGgpIHtcbiAgaWYgKGlzRnJvemVuKHZhbHVlKSlcbiAgICByZXR1cm4gdmFsdWU7XG4gIGNvbnN0IHN0YXRlID0gdmFsdWVbRFJBRlRfU1RBVEVdO1xuICBpZiAoIXN0YXRlKSB7XG4gICAgZWFjaChcbiAgICAgIHZhbHVlLFxuICAgICAgKGtleSwgY2hpbGRWYWx1ZSkgPT4gZmluYWxpemVQcm9wZXJ0eShyb290U2NvcGUsIHN0YXRlLCB2YWx1ZSwga2V5LCBjaGlsZFZhbHVlLCBwYXRoKVxuICAgICk7XG4gICAgcmV0dXJuIHZhbHVlO1xuICB9XG4gIGlmIChzdGF0ZS5zY29wZV8gIT09IHJvb3RTY29wZSlcbiAgICByZXR1cm4gdmFsdWU7XG4gIGlmICghc3RhdGUubW9kaWZpZWRfKSB7XG4gICAgbWF5YmVGcmVlemUocm9vdFNjb3BlLCBzdGF0ZS5iYXNlXywgdHJ1ZSk7XG4gICAgcmV0dXJuIHN0YXRlLmJhc2VfO1xuICB9XG4gIGlmICghc3RhdGUuZmluYWxpemVkXykge1xuICAgIHN0YXRlLmZpbmFsaXplZF8gPSB0cnVlO1xuICAgIHN0YXRlLnNjb3BlXy51bmZpbmFsaXplZERyYWZ0c18tLTtcbiAgICBjb25zdCByZXN1bHQgPSBzdGF0ZS5jb3B5XztcbiAgICBsZXQgcmVzdWx0RWFjaCA9IHJlc3VsdDtcbiAgICBsZXQgaXNTZXQyID0gZmFsc2U7XG4gICAgaWYgKHN0YXRlLnR5cGVfID09PSAzIC8qIFNldCAqLykge1xuICAgICAgcmVzdWx0RWFjaCA9IG5ldyBTZXQocmVzdWx0KTtcbiAgICAgIHJlc3VsdC5jbGVhcigpO1xuICAgICAgaXNTZXQyID0gdHJ1ZTtcbiAgICB9XG4gICAgZWFjaChcbiAgICAgIHJlc3VsdEVhY2gsXG4gICAgICAoa2V5LCBjaGlsZFZhbHVlKSA9PiBmaW5hbGl6ZVByb3BlcnR5KHJvb3RTY29wZSwgc3RhdGUsIHJlc3VsdCwga2V5LCBjaGlsZFZhbHVlLCBwYXRoLCBpc1NldDIpXG4gICAgKTtcbiAgICBtYXliZUZyZWV6ZShyb290U2NvcGUsIHJlc3VsdCwgZmFsc2UpO1xuICAgIGlmIChwYXRoICYmIHJvb3RTY29wZS5wYXRjaGVzXykge1xuICAgICAgZ2V0UGx1Z2luKFwiUGF0Y2hlc1wiKS5nZW5lcmF0ZVBhdGNoZXNfKFxuICAgICAgICBzdGF0ZSxcbiAgICAgICAgcGF0aCxcbiAgICAgICAgcm9vdFNjb3BlLnBhdGNoZXNfLFxuICAgICAgICByb290U2NvcGUuaW52ZXJzZVBhdGNoZXNfXG4gICAgICApO1xuICAgIH1cbiAgfVxuICByZXR1cm4gc3RhdGUuY29weV87XG59XG5mdW5jdGlvbiBmaW5hbGl6ZVByb3BlcnR5KHJvb3RTY29wZSwgcGFyZW50U3RhdGUsIHRhcmdldE9iamVjdCwgcHJvcCwgY2hpbGRWYWx1ZSwgcm9vdFBhdGgsIHRhcmdldElzU2V0KSB7XG4gIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIgJiYgY2hpbGRWYWx1ZSA9PT0gdGFyZ2V0T2JqZWN0KVxuICAgIGRpZSg1KTtcbiAgaWYgKGlzRHJhZnQoY2hpbGRWYWx1ZSkpIHtcbiAgICBjb25zdCBwYXRoID0gcm9vdFBhdGggJiYgcGFyZW50U3RhdGUgJiYgcGFyZW50U3RhdGUudHlwZV8gIT09IDMgLyogU2V0ICovICYmIC8vIFNldCBvYmplY3RzIGFyZSBhdG9taWMgc2luY2UgdGhleSBoYXZlIG5vIGtleXMuXG4gICAgIWhhcyhwYXJlbnRTdGF0ZS5hc3NpZ25lZF8sIHByb3ApID8gcm9vdFBhdGguY29uY2F0KHByb3ApIDogdm9pZCAwO1xuICAgIGNvbnN0IHJlcyA9IGZpbmFsaXplKHJvb3RTY29wZSwgY2hpbGRWYWx1ZSwgcGF0aCk7XG4gICAgc2V0KHRhcmdldE9iamVjdCwgcHJvcCwgcmVzKTtcbiAgICBpZiAoaXNEcmFmdChyZXMpKSB7XG4gICAgICByb290U2NvcGUuY2FuQXV0b0ZyZWV6ZV8gPSBmYWxzZTtcbiAgICB9IGVsc2VcbiAgICAgIHJldHVybjtcbiAgfSBlbHNlIGlmICh0YXJnZXRJc1NldCkge1xuICAgIHRhcmdldE9iamVjdC5hZGQoY2hpbGRWYWx1ZSk7XG4gIH1cbiAgaWYgKGlzRHJhZnRhYmxlKGNoaWxkVmFsdWUpICYmICFpc0Zyb3plbihjaGlsZFZhbHVlKSkge1xuICAgIGlmICghcm9vdFNjb3BlLmltbWVyXy5hdXRvRnJlZXplXyAmJiByb290U2NvcGUudW5maW5hbGl6ZWREcmFmdHNfIDwgMSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBmaW5hbGl6ZShyb290U2NvcGUsIGNoaWxkVmFsdWUpO1xuICAgIGlmICgoIXBhcmVudFN0YXRlIHx8ICFwYXJlbnRTdGF0ZS5zY29wZV8ucGFyZW50XykgJiYgdHlwZW9mIHByb3AgIT09IFwic3ltYm9sXCIgJiYgT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHRhcmdldE9iamVjdCwgcHJvcCkpXG4gICAgICBtYXliZUZyZWV6ZShyb290U2NvcGUsIGNoaWxkVmFsdWUpO1xuICB9XG59XG5mdW5jdGlvbiBtYXliZUZyZWV6ZShzY29wZSwgdmFsdWUsIGRlZXAgPSBmYWxzZSkge1xuICBpZiAoIXNjb3BlLnBhcmVudF8gJiYgc2NvcGUuaW1tZXJfLmF1dG9GcmVlemVfICYmIHNjb3BlLmNhbkF1dG9GcmVlemVfKSB7XG4gICAgZnJlZXplKHZhbHVlLCBkZWVwKTtcbiAgfVxufVxuXG4vLyBzcmMvY29yZS9wcm94eS50c1xuZnVuY3Rpb24gY3JlYXRlUHJveHlQcm94eShiYXNlLCBwYXJlbnQpIHtcbiAgY29uc3QgaXNBcnJheSA9IEFycmF5LmlzQXJyYXkoYmFzZSk7XG4gIGNvbnN0IHN0YXRlID0ge1xuICAgIHR5cGVfOiBpc0FycmF5ID8gMSAvKiBBcnJheSAqLyA6IDAgLyogT2JqZWN0ICovLFxuICAgIC8vIFRyYWNrIHdoaWNoIHByb2R1Y2UgY2FsbCB0aGlzIGlzIGFzc29jaWF0ZWQgd2l0aC5cbiAgICBzY29wZV86IHBhcmVudCA/IHBhcmVudC5zY29wZV8gOiBnZXRDdXJyZW50U2NvcGUoKSxcbiAgICAvLyBUcnVlIGZvciBib3RoIHNoYWxsb3cgYW5kIGRlZXAgY2hhbmdlcy5cbiAgICBtb2RpZmllZF86IGZhbHNlLFxuICAgIC8vIFVzZWQgZHVyaW5nIGZpbmFsaXphdGlvbi5cbiAgICBmaW5hbGl6ZWRfOiBmYWxzZSxcbiAgICAvLyBUcmFjayB3aGljaCBwcm9wZXJ0aWVzIGhhdmUgYmVlbiBhc3NpZ25lZCAodHJ1ZSkgb3IgZGVsZXRlZCAoZmFsc2UpLlxuICAgIGFzc2lnbmVkXzoge30sXG4gICAgLy8gVGhlIHBhcmVudCBkcmFmdCBzdGF0ZS5cbiAgICBwYXJlbnRfOiBwYXJlbnQsXG4gICAgLy8gVGhlIGJhc2Ugc3RhdGUuXG4gICAgYmFzZV86IGJhc2UsXG4gICAgLy8gVGhlIGJhc2UgcHJveHkuXG4gICAgZHJhZnRfOiBudWxsLFxuICAgIC8vIHNldCBiZWxvd1xuICAgIC8vIFRoZSBiYXNlIGNvcHkgd2l0aCBhbnkgdXBkYXRlZCB2YWx1ZXMuXG4gICAgY29weV86IG51bGwsXG4gICAgLy8gQ2FsbGVkIGJ5IHRoZSBgcHJvZHVjZWAgZnVuY3Rpb24uXG4gICAgcmV2b2tlXzogbnVsbCxcbiAgICBpc01hbnVhbF86IGZhbHNlXG4gIH07XG4gIGxldCB0YXJnZXQgPSBzdGF0ZTtcbiAgbGV0IHRyYXBzID0gb2JqZWN0VHJhcHM7XG4gIGlmIChpc0FycmF5KSB7XG4gICAgdGFyZ2V0ID0gW3N0YXRlXTtcbiAgICB0cmFwcyA9IGFycmF5VHJhcHM7XG4gIH1cbiAgY29uc3QgeyByZXZva2UsIHByb3h5IH0gPSBQcm94eS5yZXZvY2FibGUodGFyZ2V0LCB0cmFwcyk7XG4gIHN0YXRlLmRyYWZ0XyA9IHByb3h5O1xuICBzdGF0ZS5yZXZva2VfID0gcmV2b2tlO1xuICByZXR1cm4gcHJveHk7XG59XG52YXIgb2JqZWN0VHJhcHMgPSB7XG4gIGdldChzdGF0ZSwgcHJvcCkge1xuICAgIGlmIChwcm9wID09PSBEUkFGVF9TVEFURSlcbiAgICAgIHJldHVybiBzdGF0ZTtcbiAgICBjb25zdCBzb3VyY2UgPSBsYXRlc3Qoc3RhdGUpO1xuICAgIGlmICghaGFzKHNvdXJjZSwgcHJvcCkpIHtcbiAgICAgIHJldHVybiByZWFkUHJvcEZyb21Qcm90byhzdGF0ZSwgc291cmNlLCBwcm9wKTtcbiAgICB9XG4gICAgY29uc3QgdmFsdWUgPSBzb3VyY2VbcHJvcF07XG4gICAgaWYgKHN0YXRlLmZpbmFsaXplZF8gfHwgIWlzRHJhZnRhYmxlKHZhbHVlKSkge1xuICAgICAgcmV0dXJuIHZhbHVlO1xuICAgIH1cbiAgICBpZiAodmFsdWUgPT09IHBlZWsoc3RhdGUuYmFzZV8sIHByb3ApKSB7XG4gICAgICBwcmVwYXJlQ29weShzdGF0ZSk7XG4gICAgICByZXR1cm4gc3RhdGUuY29weV9bcHJvcF0gPSBjcmVhdGVQcm94eSh2YWx1ZSwgc3RhdGUpO1xuICAgIH1cbiAgICByZXR1cm4gdmFsdWU7XG4gIH0sXG4gIGhhcyhzdGF0ZSwgcHJvcCkge1xuICAgIHJldHVybiBwcm9wIGluIGxhdGVzdChzdGF0ZSk7XG4gIH0sXG4gIG93bktleXMoc3RhdGUpIHtcbiAgICByZXR1cm4gUmVmbGVjdC5vd25LZXlzKGxhdGVzdChzdGF0ZSkpO1xuICB9LFxuICBzZXQoc3RhdGUsIHByb3AsIHZhbHVlKSB7XG4gICAgY29uc3QgZGVzYyA9IGdldERlc2NyaXB0b3JGcm9tUHJvdG8obGF0ZXN0KHN0YXRlKSwgcHJvcCk7XG4gICAgaWYgKGRlc2M/LnNldCkge1xuICAgICAgZGVzYy5zZXQuY2FsbChzdGF0ZS5kcmFmdF8sIHZhbHVlKTtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICBpZiAoIXN0YXRlLm1vZGlmaWVkXykge1xuICAgICAgY29uc3QgY3VycmVudDIgPSBwZWVrKGxhdGVzdChzdGF0ZSksIHByb3ApO1xuICAgICAgY29uc3QgY3VycmVudFN0YXRlID0gY3VycmVudDI/LltEUkFGVF9TVEFURV07XG4gICAgICBpZiAoY3VycmVudFN0YXRlICYmIGN1cnJlbnRTdGF0ZS5iYXNlXyA9PT0gdmFsdWUpIHtcbiAgICAgICAgc3RhdGUuY29weV9bcHJvcF0gPSB2YWx1ZTtcbiAgICAgICAgc3RhdGUuYXNzaWduZWRfW3Byb3BdID0gZmFsc2U7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgICAgaWYgKGlzKHZhbHVlLCBjdXJyZW50MikgJiYgKHZhbHVlICE9PSB2b2lkIDAgfHwgaGFzKHN0YXRlLmJhc2VfLCBwcm9wKSkpXG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgcHJlcGFyZUNvcHkoc3RhdGUpO1xuICAgICAgbWFya0NoYW5nZWQoc3RhdGUpO1xuICAgIH1cbiAgICBpZiAoc3RhdGUuY29weV9bcHJvcF0gPT09IHZhbHVlICYmIC8vIHNwZWNpYWwgY2FzZTogaGFuZGxlIG5ldyBwcm9wcyB3aXRoIHZhbHVlICd1bmRlZmluZWQnXG4gICAgKHZhbHVlICE9PSB2b2lkIDAgfHwgcHJvcCBpbiBzdGF0ZS5jb3B5XykgfHwgLy8gc3BlY2lhbCBjYXNlOiBOYU5cbiAgICBOdW1iZXIuaXNOYU4odmFsdWUpICYmIE51bWJlci5pc05hTihzdGF0ZS5jb3B5X1twcm9wXSkpXG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICBzdGF0ZS5jb3B5X1twcm9wXSA9IHZhbHVlO1xuICAgIHN0YXRlLmFzc2lnbmVkX1twcm9wXSA9IHRydWU7XG4gICAgcmV0dXJuIHRydWU7XG4gIH0sXG4gIGRlbGV0ZVByb3BlcnR5KHN0YXRlLCBwcm9wKSB7XG4gICAgaWYgKHBlZWsoc3RhdGUuYmFzZV8sIHByb3ApICE9PSB2b2lkIDAgfHwgcHJvcCBpbiBzdGF0ZS5iYXNlXykge1xuICAgICAgc3RhdGUuYXNzaWduZWRfW3Byb3BdID0gZmFsc2U7XG4gICAgICBwcmVwYXJlQ29weShzdGF0ZSk7XG4gICAgICBtYXJrQ2hhbmdlZChzdGF0ZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGRlbGV0ZSBzdGF0ZS5hc3NpZ25lZF9bcHJvcF07XG4gICAgfVxuICAgIGlmIChzdGF0ZS5jb3B5Xykge1xuICAgICAgZGVsZXRlIHN0YXRlLmNvcHlfW3Byb3BdO1xuICAgIH1cbiAgICByZXR1cm4gdHJ1ZTtcbiAgfSxcbiAgLy8gTm90ZTogV2UgbmV2ZXIgY29lcmNlIGBkZXNjLnZhbHVlYCBpbnRvIGFuIEltbWVyIGRyYWZ0LCBiZWNhdXNlIHdlIGNhbid0IG1ha2VcbiAgLy8gdGhlIHNhbWUgZ3VhcmFudGVlIGluIEVTNSBtb2RlLlxuICBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Ioc3RhdGUsIHByb3ApIHtcbiAgICBjb25zdCBvd25lciA9IGxhdGVzdChzdGF0ZSk7XG4gICAgY29uc3QgZGVzYyA9IFJlZmxlY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKG93bmVyLCBwcm9wKTtcbiAgICBpZiAoIWRlc2MpXG4gICAgICByZXR1cm4gZGVzYztcbiAgICByZXR1cm4ge1xuICAgICAgd3JpdGFibGU6IHRydWUsXG4gICAgICBjb25maWd1cmFibGU6IHN0YXRlLnR5cGVfICE9PSAxIC8qIEFycmF5ICovIHx8IHByb3AgIT09IFwibGVuZ3RoXCIsXG4gICAgICBlbnVtZXJhYmxlOiBkZXNjLmVudW1lcmFibGUsXG4gICAgICB2YWx1ZTogb3duZXJbcHJvcF1cbiAgICB9O1xuICB9LFxuICBkZWZpbmVQcm9wZXJ0eSgpIHtcbiAgICBkaWUoMTEpO1xuICB9LFxuICBnZXRQcm90b3R5cGVPZihzdGF0ZSkge1xuICAgIHJldHVybiBnZXRQcm90b3R5cGVPZihzdGF0ZS5iYXNlXyk7XG4gIH0sXG4gIHNldFByb3RvdHlwZU9mKCkge1xuICAgIGRpZSgxMik7XG4gIH1cbn07XG52YXIgYXJyYXlUcmFwcyA9IHt9O1xuZWFjaChvYmplY3RUcmFwcywgKGtleSwgZm4pID0+IHtcbiAgYXJyYXlUcmFwc1trZXldID0gZnVuY3Rpb24oKSB7XG4gICAgYXJndW1lbnRzWzBdID0gYXJndW1lbnRzWzBdWzBdO1xuICAgIHJldHVybiBmbi5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICB9O1xufSk7XG5hcnJheVRyYXBzLmRlbGV0ZVByb3BlcnR5ID0gZnVuY3Rpb24oc3RhdGUsIHByb3ApIHtcbiAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIiAmJiBpc05hTihwYXJzZUludChwcm9wKSkpXG4gICAgZGllKDEzKTtcbiAgcmV0dXJuIGFycmF5VHJhcHMuc2V0LmNhbGwodGhpcywgc3RhdGUsIHByb3AsIHZvaWQgMCk7XG59O1xuYXJyYXlUcmFwcy5zZXQgPSBmdW5jdGlvbihzdGF0ZSwgcHJvcCwgdmFsdWUpIHtcbiAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIiAmJiBwcm9wICE9PSBcImxlbmd0aFwiICYmIGlzTmFOKHBhcnNlSW50KHByb3ApKSlcbiAgICBkaWUoMTQpO1xuICByZXR1cm4gb2JqZWN0VHJhcHMuc2V0LmNhbGwodGhpcywgc3RhdGVbMF0sIHByb3AsIHZhbHVlLCBzdGF0ZVswXSk7XG59O1xuZnVuY3Rpb24gcGVlayhkcmFmdCwgcHJvcCkge1xuICBjb25zdCBzdGF0ZSA9IGRyYWZ0W0RSQUZUX1NUQVRFXTtcbiAgY29uc3Qgc291cmNlID0gc3RhdGUgPyBsYXRlc3Qoc3RhdGUpIDogZHJhZnQ7XG4gIHJldHVybiBzb3VyY2VbcHJvcF07XG59XG5mdW5jdGlvbiByZWFkUHJvcEZyb21Qcm90byhzdGF0ZSwgc291cmNlLCBwcm9wKSB7XG4gIGNvbnN0IGRlc2MgPSBnZXREZXNjcmlwdG9yRnJvbVByb3RvKHNvdXJjZSwgcHJvcCk7XG4gIHJldHVybiBkZXNjID8gYHZhbHVlYCBpbiBkZXNjID8gZGVzYy52YWx1ZSA6IChcbiAgICAvLyBUaGlzIGlzIGEgdmVyeSBzcGVjaWFsIGNhc2UsIGlmIHRoZSBwcm9wIGlzIGEgZ2V0dGVyIGRlZmluZWQgYnkgdGhlXG4gICAgLy8gcHJvdG90eXBlLCB3ZSBzaG91bGQgaW52b2tlIGl0IHdpdGggdGhlIGRyYWZ0IGFzIGNvbnRleHQhXG4gICAgZGVzYy5nZXQ/LmNhbGwoc3RhdGUuZHJhZnRfKVxuICApIDogdm9pZCAwO1xufVxuZnVuY3Rpb24gZ2V0RGVzY3JpcHRvckZyb21Qcm90byhzb3VyY2UsIHByb3ApIHtcbiAgaWYgKCEocHJvcCBpbiBzb3VyY2UpKVxuICAgIHJldHVybiB2b2lkIDA7XG4gIGxldCBwcm90byA9IGdldFByb3RvdHlwZU9mKHNvdXJjZSk7XG4gIHdoaWxlIChwcm90bykge1xuICAgIGNvbnN0IGRlc2MgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHByb3RvLCBwcm9wKTtcbiAgICBpZiAoZGVzYylcbiAgICAgIHJldHVybiBkZXNjO1xuICAgIHByb3RvID0gZ2V0UHJvdG90eXBlT2YocHJvdG8pO1xuICB9XG4gIHJldHVybiB2b2lkIDA7XG59XG5mdW5jdGlvbiBtYXJrQ2hhbmdlZChzdGF0ZSkge1xuICBpZiAoIXN0YXRlLm1vZGlmaWVkXykge1xuICAgIHN0YXRlLm1vZGlmaWVkXyA9IHRydWU7XG4gICAgaWYgKHN0YXRlLnBhcmVudF8pIHtcbiAgICAgIG1hcmtDaGFuZ2VkKHN0YXRlLnBhcmVudF8pO1xuICAgIH1cbiAgfVxufVxuZnVuY3Rpb24gcHJlcGFyZUNvcHkoc3RhdGUpIHtcbiAgaWYgKCFzdGF0ZS5jb3B5Xykge1xuICAgIHN0YXRlLmNvcHlfID0gc2hhbGxvd0NvcHkoXG4gICAgICBzdGF0ZS5iYXNlXyxcbiAgICAgIHN0YXRlLnNjb3BlXy5pbW1lcl8udXNlU3RyaWN0U2hhbGxvd0NvcHlfXG4gICAgKTtcbiAgfVxufVxuXG4vLyBzcmMvY29yZS9pbW1lckNsYXNzLnRzXG52YXIgSW1tZXIyID0gY2xhc3Mge1xuICBjb25zdHJ1Y3Rvcihjb25maWcpIHtcbiAgICB0aGlzLmF1dG9GcmVlemVfID0gdHJ1ZTtcbiAgICB0aGlzLnVzZVN0cmljdFNoYWxsb3dDb3B5XyA9IGZhbHNlO1xuICAgIC8qKlxuICAgICAqIFRoZSBgcHJvZHVjZWAgZnVuY3Rpb24gdGFrZXMgYSB2YWx1ZSBhbmQgYSBcInJlY2lwZSBmdW5jdGlvblwiICh3aG9zZVxuICAgICAqIHJldHVybiB2YWx1ZSBvZnRlbiBkZXBlbmRzIG9uIHRoZSBiYXNlIHN0YXRlKS4gVGhlIHJlY2lwZSBmdW5jdGlvbiBpc1xuICAgICAqIGZyZWUgdG8gbXV0YXRlIGl0cyBmaXJzdCBhcmd1bWVudCBob3dldmVyIGl0IHdhbnRzLiBBbGwgbXV0YXRpb25zIGFyZVxuICAgICAqIG9ubHkgZXZlciBhcHBsaWVkIHRvIGEgX19jb3B5X18gb2YgdGhlIGJhc2Ugc3RhdGUuXG4gICAgICpcbiAgICAgKiBQYXNzIG9ubHkgYSBmdW5jdGlvbiB0byBjcmVhdGUgYSBcImN1cnJpZWQgcHJvZHVjZXJcIiB3aGljaCByZWxpZXZlcyB5b3VcbiAgICAgKiBmcm9tIHBhc3NpbmcgdGhlIHJlY2lwZSBmdW5jdGlvbiBldmVyeSB0aW1lLlxuICAgICAqXG4gICAgICogT25seSBwbGFpbiBvYmplY3RzIGFuZCBhcnJheXMgYXJlIG1hZGUgbXV0YWJsZS4gQWxsIG90aGVyIG9iamVjdHMgYXJlXG4gICAgICogY29uc2lkZXJlZCB1bmNvcHlhYmxlLlxuICAgICAqXG4gICAgICogTm90ZTogVGhpcyBmdW5jdGlvbiBpcyBfX2JvdW5kX18gdG8gaXRzIGBJbW1lcmAgaW5zdGFuY2UuXG4gICAgICpcbiAgICAgKiBAcGFyYW0ge2FueX0gYmFzZSAtIHRoZSBpbml0aWFsIHN0YXRlXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gcmVjaXBlIC0gZnVuY3Rpb24gdGhhdCByZWNlaXZlcyBhIHByb3h5IG9mIHRoZSBiYXNlIHN0YXRlIGFzIGZpcnN0IGFyZ3VtZW50IGFuZCB3aGljaCBjYW4gYmUgZnJlZWx5IG1vZGlmaWVkXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gcGF0Y2hMaXN0ZW5lciAtIG9wdGlvbmFsIGZ1bmN0aW9uIHRoYXQgd2lsbCBiZSBjYWxsZWQgd2l0aCBhbGwgdGhlIHBhdGNoZXMgcHJvZHVjZWQgaGVyZVxuICAgICAqIEByZXR1cm5zIHthbnl9IGEgbmV3IHN0YXRlLCBvciB0aGUgaW5pdGlhbCBzdGF0ZSBpZiBub3RoaW5nIHdhcyBtb2RpZmllZFxuICAgICAqL1xuICAgIHRoaXMucHJvZHVjZSA9IChiYXNlLCByZWNpcGUsIHBhdGNoTGlzdGVuZXIpID0+IHtcbiAgICAgIGlmICh0eXBlb2YgYmFzZSA9PT0gXCJmdW5jdGlvblwiICYmIHR5cGVvZiByZWNpcGUgIT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgICBjb25zdCBkZWZhdWx0QmFzZSA9IHJlY2lwZTtcbiAgICAgICAgcmVjaXBlID0gYmFzZTtcbiAgICAgICAgY29uc3Qgc2VsZiA9IHRoaXM7XG4gICAgICAgIHJldHVybiBmdW5jdGlvbiBjdXJyaWVkUHJvZHVjZShiYXNlMiA9IGRlZmF1bHRCYXNlLCAuLi5hcmdzKSB7XG4gICAgICAgICAgcmV0dXJuIHNlbGYucHJvZHVjZShiYXNlMiwgKGRyYWZ0KSA9PiByZWNpcGUuY2FsbCh0aGlzLCBkcmFmdCwgLi4uYXJncykpO1xuICAgICAgICB9O1xuICAgICAgfVxuICAgICAgaWYgKHR5cGVvZiByZWNpcGUgIT09IFwiZnVuY3Rpb25cIilcbiAgICAgICAgZGllKDYpO1xuICAgICAgaWYgKHBhdGNoTGlzdGVuZXIgIT09IHZvaWQgMCAmJiB0eXBlb2YgcGF0Y2hMaXN0ZW5lciAhPT0gXCJmdW5jdGlvblwiKVxuICAgICAgICBkaWUoNyk7XG4gICAgICBsZXQgcmVzdWx0O1xuICAgICAgaWYgKGlzRHJhZnRhYmxlKGJhc2UpKSB7XG4gICAgICAgIGNvbnN0IHNjb3BlID0gZW50ZXJTY29wZSh0aGlzKTtcbiAgICAgICAgY29uc3QgcHJveHkgPSBjcmVhdGVQcm94eShiYXNlLCB2b2lkIDApO1xuICAgICAgICBsZXQgaGFzRXJyb3IgPSB0cnVlO1xuICAgICAgICB0cnkge1xuICAgICAgICAgIHJlc3VsdCA9IHJlY2lwZShwcm94eSk7XG4gICAgICAgICAgaGFzRXJyb3IgPSBmYWxzZTtcbiAgICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgICBpZiAoaGFzRXJyb3IpXG4gICAgICAgICAgICByZXZva2VTY29wZShzY29wZSk7XG4gICAgICAgICAgZWxzZVxuICAgICAgICAgICAgbGVhdmVTY29wZShzY29wZSk7XG4gICAgICAgIH1cbiAgICAgICAgdXNlUGF0Y2hlc0luU2NvcGUoc2NvcGUsIHBhdGNoTGlzdGVuZXIpO1xuICAgICAgICByZXR1cm4gcHJvY2Vzc1Jlc3VsdChyZXN1bHQsIHNjb3BlKTtcbiAgICAgIH0gZWxzZSBpZiAoIWJhc2UgfHwgdHlwZW9mIGJhc2UgIT09IFwib2JqZWN0XCIpIHtcbiAgICAgICAgcmVzdWx0ID0gcmVjaXBlKGJhc2UpO1xuICAgICAgICBpZiAocmVzdWx0ID09PSB2b2lkIDApXG4gICAgICAgICAgcmVzdWx0ID0gYmFzZTtcbiAgICAgICAgaWYgKHJlc3VsdCA9PT0gTk9USElORylcbiAgICAgICAgICByZXN1bHQgPSB2b2lkIDA7XG4gICAgICAgIGlmICh0aGlzLmF1dG9GcmVlemVfKVxuICAgICAgICAgIGZyZWV6ZShyZXN1bHQsIHRydWUpO1xuICAgICAgICBpZiAocGF0Y2hMaXN0ZW5lcikge1xuICAgICAgICAgIGNvbnN0IHAgPSBbXTtcbiAgICAgICAgICBjb25zdCBpcCA9IFtdO1xuICAgICAgICAgIGdldFBsdWdpbihcIlBhdGNoZXNcIikuZ2VuZXJhdGVSZXBsYWNlbWVudFBhdGNoZXNfKGJhc2UsIHJlc3VsdCwgcCwgaXApO1xuICAgICAgICAgIHBhdGNoTGlzdGVuZXIocCwgaXApO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgICB9IGVsc2VcbiAgICAgICAgZGllKDEsIGJhc2UpO1xuICAgIH07XG4gICAgdGhpcy5wcm9kdWNlV2l0aFBhdGNoZXMgPSAoYmFzZSwgcmVjaXBlKSA9PiB7XG4gICAgICBpZiAodHlwZW9mIGJhc2UgPT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgICByZXR1cm4gKHN0YXRlLCAuLi5hcmdzKSA9PiB0aGlzLnByb2R1Y2VXaXRoUGF0Y2hlcyhzdGF0ZSwgKGRyYWZ0KSA9PiBiYXNlKGRyYWZ0LCAuLi5hcmdzKSk7XG4gICAgICB9XG4gICAgICBsZXQgcGF0Y2hlcywgaW52ZXJzZVBhdGNoZXM7XG4gICAgICBjb25zdCByZXN1bHQgPSB0aGlzLnByb2R1Y2UoYmFzZSwgcmVjaXBlLCAocCwgaXApID0+IHtcbiAgICAgICAgcGF0Y2hlcyA9IHA7XG4gICAgICAgIGludmVyc2VQYXRjaGVzID0gaXA7XG4gICAgICB9KTtcbiAgICAgIHJldHVybiBbcmVzdWx0LCBwYXRjaGVzLCBpbnZlcnNlUGF0Y2hlc107XG4gICAgfTtcbiAgICBpZiAodHlwZW9mIGNvbmZpZz8uYXV0b0ZyZWV6ZSA9PT0gXCJib29sZWFuXCIpXG4gICAgICB0aGlzLnNldEF1dG9GcmVlemUoY29uZmlnLmF1dG9GcmVlemUpO1xuICAgIGlmICh0eXBlb2YgY29uZmlnPy51c2VTdHJpY3RTaGFsbG93Q29weSA9PT0gXCJib29sZWFuXCIpXG4gICAgICB0aGlzLnNldFVzZVN0cmljdFNoYWxsb3dDb3B5KGNvbmZpZy51c2VTdHJpY3RTaGFsbG93Q29weSk7XG4gIH1cbiAgY3JlYXRlRHJhZnQoYmFzZSkge1xuICAgIGlmICghaXNEcmFmdGFibGUoYmFzZSkpXG4gICAgICBkaWUoOCk7XG4gICAgaWYgKGlzRHJhZnQoYmFzZSkpXG4gICAgICBiYXNlID0gY3VycmVudChiYXNlKTtcbiAgICBjb25zdCBzY29wZSA9IGVudGVyU2NvcGUodGhpcyk7XG4gICAgY29uc3QgcHJveHkgPSBjcmVhdGVQcm94eShiYXNlLCB2b2lkIDApO1xuICAgIHByb3h5W0RSQUZUX1NUQVRFXS5pc01hbnVhbF8gPSB0cnVlO1xuICAgIGxlYXZlU2NvcGUoc2NvcGUpO1xuICAgIHJldHVybiBwcm94eTtcbiAgfVxuICBmaW5pc2hEcmFmdChkcmFmdCwgcGF0Y2hMaXN0ZW5lcikge1xuICAgIGNvbnN0IHN0YXRlID0gZHJhZnQgJiYgZHJhZnRbRFJBRlRfU1RBVEVdO1xuICAgIGlmICghc3RhdGUgfHwgIXN0YXRlLmlzTWFudWFsXylcbiAgICAgIGRpZSg5KTtcbiAgICBjb25zdCB7IHNjb3BlXzogc2NvcGUgfSA9IHN0YXRlO1xuICAgIHVzZVBhdGNoZXNJblNjb3BlKHNjb3BlLCBwYXRjaExpc3RlbmVyKTtcbiAgICByZXR1cm4gcHJvY2Vzc1Jlc3VsdCh2b2lkIDAsIHNjb3BlKTtcbiAgfVxuICAvKipcbiAgICogUGFzcyB0cnVlIHRvIGF1dG9tYXRpY2FsbHkgZnJlZXplIGFsbCBjb3BpZXMgY3JlYXRlZCBieSBJbW1lci5cbiAgICpcbiAgICogQnkgZGVmYXVsdCwgYXV0by1mcmVlemluZyBpcyBlbmFibGVkLlxuICAgKi9cbiAgc2V0QXV0b0ZyZWV6ZSh2YWx1ZSkge1xuICAgIHRoaXMuYXV0b0ZyZWV6ZV8gPSB2YWx1ZTtcbiAgfVxuICAvKipcbiAgICogUGFzcyB0cnVlIHRvIGVuYWJsZSBzdHJpY3Qgc2hhbGxvdyBjb3B5LlxuICAgKlxuICAgKiBCeSBkZWZhdWx0LCBpbW1lciBkb2VzIG5vdCBjb3B5IHRoZSBvYmplY3QgZGVzY3JpcHRvcnMgc3VjaCBhcyBnZXR0ZXIsIHNldHRlciBhbmQgbm9uLWVudW1yYWJsZSBwcm9wZXJ0aWVzLlxuICAgKi9cbiAgc2V0VXNlU3RyaWN0U2hhbGxvd0NvcHkodmFsdWUpIHtcbiAgICB0aGlzLnVzZVN0cmljdFNoYWxsb3dDb3B5XyA9IHZhbHVlO1xuICB9XG4gIGFwcGx5UGF0Y2hlcyhiYXNlLCBwYXRjaGVzKSB7XG4gICAgbGV0IGk7XG4gICAgZm9yIChpID0gcGF0Y2hlcy5sZW5ndGggLSAxOyBpID49IDA7IGktLSkge1xuICAgICAgY29uc3QgcGF0Y2ggPSBwYXRjaGVzW2ldO1xuICAgICAgaWYgKHBhdGNoLnBhdGgubGVuZ3RoID09PSAwICYmIHBhdGNoLm9wID09PSBcInJlcGxhY2VcIikge1xuICAgICAgICBiYXNlID0gcGF0Y2gudmFsdWU7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH1cbiAgICBpZiAoaSA+IC0xKSB7XG4gICAgICBwYXRjaGVzID0gcGF0Y2hlcy5zbGljZShpICsgMSk7XG4gICAgfVxuICAgIGNvbnN0IGFwcGx5UGF0Y2hlc0ltcGwgPSBnZXRQbHVnaW4oXCJQYXRjaGVzXCIpLmFwcGx5UGF0Y2hlc187XG4gICAgaWYgKGlzRHJhZnQoYmFzZSkpIHtcbiAgICAgIHJldHVybiBhcHBseVBhdGNoZXNJbXBsKGJhc2UsIHBhdGNoZXMpO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5wcm9kdWNlKFxuICAgICAgYmFzZSxcbiAgICAgIChkcmFmdCkgPT4gYXBwbHlQYXRjaGVzSW1wbChkcmFmdCwgcGF0Y2hlcylcbiAgICApO1xuICB9XG59O1xuZnVuY3Rpb24gY3JlYXRlUHJveHkodmFsdWUsIHBhcmVudCkge1xuICBjb25zdCBkcmFmdCA9IGlzTWFwKHZhbHVlKSA/IGdldFBsdWdpbihcIk1hcFNldFwiKS5wcm94eU1hcF8odmFsdWUsIHBhcmVudCkgOiBpc1NldCh2YWx1ZSkgPyBnZXRQbHVnaW4oXCJNYXBTZXRcIikucHJveHlTZXRfKHZhbHVlLCBwYXJlbnQpIDogY3JlYXRlUHJveHlQcm94eSh2YWx1ZSwgcGFyZW50KTtcbiAgY29uc3Qgc2NvcGUgPSBwYXJlbnQgPyBwYXJlbnQuc2NvcGVfIDogZ2V0Q3VycmVudFNjb3BlKCk7XG4gIHNjb3BlLmRyYWZ0c18ucHVzaChkcmFmdCk7XG4gIHJldHVybiBkcmFmdDtcbn1cblxuLy8gc3JjL2NvcmUvY3VycmVudC50c1xuZnVuY3Rpb24gY3VycmVudCh2YWx1ZSkge1xuICBpZiAoIWlzRHJhZnQodmFsdWUpKVxuICAgIGRpZSgxMCwgdmFsdWUpO1xuICByZXR1cm4gY3VycmVudEltcGwodmFsdWUpO1xufVxuZnVuY3Rpb24gY3VycmVudEltcGwodmFsdWUpIHtcbiAgaWYgKCFpc0RyYWZ0YWJsZSh2YWx1ZSkgfHwgaXNGcm96ZW4odmFsdWUpKVxuICAgIHJldHVybiB2YWx1ZTtcbiAgY29uc3Qgc3RhdGUgPSB2YWx1ZVtEUkFGVF9TVEFURV07XG4gIGxldCBjb3B5O1xuICBpZiAoc3RhdGUpIHtcbiAgICBpZiAoIXN0YXRlLm1vZGlmaWVkXylcbiAgICAgIHJldHVybiBzdGF0ZS5iYXNlXztcbiAgICBzdGF0ZS5maW5hbGl6ZWRfID0gdHJ1ZTtcbiAgICBjb3B5ID0gc2hhbGxvd0NvcHkodmFsdWUsIHN0YXRlLnNjb3BlXy5pbW1lcl8udXNlU3RyaWN0U2hhbGxvd0NvcHlfKTtcbiAgfSBlbHNlIHtcbiAgICBjb3B5ID0gc2hhbGxvd0NvcHkodmFsdWUsIHRydWUpO1xuICB9XG4gIGVhY2goY29weSwgKGtleSwgY2hpbGRWYWx1ZSkgPT4ge1xuICAgIHNldChjb3B5LCBrZXksIGN1cnJlbnRJbXBsKGNoaWxkVmFsdWUpKTtcbiAgfSk7XG4gIGlmIChzdGF0ZSkge1xuICAgIHN0YXRlLmZpbmFsaXplZF8gPSBmYWxzZTtcbiAgfVxuICByZXR1cm4gY29weTtcbn1cblxuLy8gc3JjL3BsdWdpbnMvcGF0Y2hlcy50c1xuZnVuY3Rpb24gZW5hYmxlUGF0Y2hlcygpIHtcbiAgY29uc3QgZXJyb3JPZmZzZXQgPSAxNjtcbiAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIikge1xuICAgIGVycm9ycy5wdXNoKFxuICAgICAgJ1NldHMgY2Fubm90IGhhdmUgXCJyZXBsYWNlXCIgcGF0Y2hlcy4nLFxuICAgICAgZnVuY3Rpb24ob3ApIHtcbiAgICAgICAgcmV0dXJuIFwiVW5zdXBwb3J0ZWQgcGF0Y2ggb3BlcmF0aW9uOiBcIiArIG9wO1xuICAgICAgfSxcbiAgICAgIGZ1bmN0aW9uKHBhdGgpIHtcbiAgICAgICAgcmV0dXJuIFwiQ2Fubm90IGFwcGx5IHBhdGNoLCBwYXRoIGRvZXNuJ3QgcmVzb2x2ZTogXCIgKyBwYXRoO1xuICAgICAgfSxcbiAgICAgIFwiUGF0Y2hpbmcgcmVzZXJ2ZWQgYXR0cmlidXRlcyBsaWtlIF9fcHJvdG9fXywgcHJvdG90eXBlIGFuZCBjb25zdHJ1Y3RvciBpcyBub3QgYWxsb3dlZFwiXG4gICAgKTtcbiAgfVxuICBjb25zdCBSRVBMQUNFID0gXCJyZXBsYWNlXCI7XG4gIGNvbnN0IEFERCA9IFwiYWRkXCI7XG4gIGNvbnN0IFJFTU9WRSA9IFwicmVtb3ZlXCI7XG4gIGZ1bmN0aW9uIGdlbmVyYXRlUGF0Y2hlc18oc3RhdGUsIGJhc2VQYXRoLCBwYXRjaGVzLCBpbnZlcnNlUGF0Y2hlcykge1xuICAgIHN3aXRjaCAoc3RhdGUudHlwZV8pIHtcbiAgICAgIGNhc2UgMCAvKiBPYmplY3QgKi86XG4gICAgICBjYXNlIDIgLyogTWFwICovOlxuICAgICAgICByZXR1cm4gZ2VuZXJhdGVQYXRjaGVzRnJvbUFzc2lnbmVkKFxuICAgICAgICAgIHN0YXRlLFxuICAgICAgICAgIGJhc2VQYXRoLFxuICAgICAgICAgIHBhdGNoZXMsXG4gICAgICAgICAgaW52ZXJzZVBhdGNoZXNcbiAgICAgICAgKTtcbiAgICAgIGNhc2UgMSAvKiBBcnJheSAqLzpcbiAgICAgICAgcmV0dXJuIGdlbmVyYXRlQXJyYXlQYXRjaGVzKHN0YXRlLCBiYXNlUGF0aCwgcGF0Y2hlcywgaW52ZXJzZVBhdGNoZXMpO1xuICAgICAgY2FzZSAzIC8qIFNldCAqLzpcbiAgICAgICAgcmV0dXJuIGdlbmVyYXRlU2V0UGF0Y2hlcyhcbiAgICAgICAgICBzdGF0ZSxcbiAgICAgICAgICBiYXNlUGF0aCxcbiAgICAgICAgICBwYXRjaGVzLFxuICAgICAgICAgIGludmVyc2VQYXRjaGVzXG4gICAgICAgICk7XG4gICAgfVxuICB9XG4gIGZ1bmN0aW9uIGdlbmVyYXRlQXJyYXlQYXRjaGVzKHN0YXRlLCBiYXNlUGF0aCwgcGF0Y2hlcywgaW52ZXJzZVBhdGNoZXMpIHtcbiAgICBsZXQgeyBiYXNlXywgYXNzaWduZWRfIH0gPSBzdGF0ZTtcbiAgICBsZXQgY29weV8gPSBzdGF0ZS5jb3B5XztcbiAgICBpZiAoY29weV8ubGVuZ3RoIDwgYmFzZV8ubGVuZ3RoKSB7XG4gICAgICA7XG4gICAgICBbYmFzZV8sIGNvcHlfXSA9IFtjb3B5XywgYmFzZV9dO1xuICAgICAgW3BhdGNoZXMsIGludmVyc2VQYXRjaGVzXSA9IFtpbnZlcnNlUGF0Y2hlcywgcGF0Y2hlc107XG4gICAgfVxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgYmFzZV8ubGVuZ3RoOyBpKyspIHtcbiAgICAgIGlmIChhc3NpZ25lZF9baV0gJiYgY29weV9baV0gIT09IGJhc2VfW2ldKSB7XG4gICAgICAgIGNvbnN0IHBhdGggPSBiYXNlUGF0aC5jb25jYXQoW2ldKTtcbiAgICAgICAgcGF0Y2hlcy5wdXNoKHtcbiAgICAgICAgICBvcDogUkVQTEFDRSxcbiAgICAgICAgICBwYXRoLFxuICAgICAgICAgIC8vIE5lZWQgdG8gbWF5YmUgY2xvbmUgaXQsIGFzIGl0IGNhbiBpbiBmYWN0IGJlIHRoZSBvcmlnaW5hbCB2YWx1ZVxuICAgICAgICAgIC8vIGR1ZSB0byB0aGUgYmFzZS9jb3B5IGludmVyc2lvbiBhdCB0aGUgc3RhcnQgb2YgdGhpcyBmdW5jdGlvblxuICAgICAgICAgIHZhbHVlOiBjbG9uZVBhdGNoVmFsdWVJZk5lZWRlZChjb3B5X1tpXSlcbiAgICAgICAgfSk7XG4gICAgICAgIGludmVyc2VQYXRjaGVzLnB1c2goe1xuICAgICAgICAgIG9wOiBSRVBMQUNFLFxuICAgICAgICAgIHBhdGgsXG4gICAgICAgICAgdmFsdWU6IGNsb25lUGF0Y2hWYWx1ZUlmTmVlZGVkKGJhc2VfW2ldKVxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9XG4gICAgZm9yIChsZXQgaSA9IGJhc2VfLmxlbmd0aDsgaSA8IGNvcHlfLmxlbmd0aDsgaSsrKSB7XG4gICAgICBjb25zdCBwYXRoID0gYmFzZVBhdGguY29uY2F0KFtpXSk7XG4gICAgICBwYXRjaGVzLnB1c2goe1xuICAgICAgICBvcDogQURELFxuICAgICAgICBwYXRoLFxuICAgICAgICAvLyBOZWVkIHRvIG1heWJlIGNsb25lIGl0LCBhcyBpdCBjYW4gaW4gZmFjdCBiZSB0aGUgb3JpZ2luYWwgdmFsdWVcbiAgICAgICAgLy8gZHVlIHRvIHRoZSBiYXNlL2NvcHkgaW52ZXJzaW9uIGF0IHRoZSBzdGFydCBvZiB0aGlzIGZ1bmN0aW9uXG4gICAgICAgIHZhbHVlOiBjbG9uZVBhdGNoVmFsdWVJZk5lZWRlZChjb3B5X1tpXSlcbiAgICAgIH0pO1xuICAgIH1cbiAgICBmb3IgKGxldCBpID0gY29weV8ubGVuZ3RoIC0gMTsgYmFzZV8ubGVuZ3RoIDw9IGk7IC0taSkge1xuICAgICAgY29uc3QgcGF0aCA9IGJhc2VQYXRoLmNvbmNhdChbaV0pO1xuICAgICAgaW52ZXJzZVBhdGNoZXMucHVzaCh7XG4gICAgICAgIG9wOiBSRU1PVkUsXG4gICAgICAgIHBhdGhcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuICBmdW5jdGlvbiBnZW5lcmF0ZVBhdGNoZXNGcm9tQXNzaWduZWQoc3RhdGUsIGJhc2VQYXRoLCBwYXRjaGVzLCBpbnZlcnNlUGF0Y2hlcykge1xuICAgIGNvbnN0IHsgYmFzZV8sIGNvcHlfIH0gPSBzdGF0ZTtcbiAgICBlYWNoKHN0YXRlLmFzc2lnbmVkXywgKGtleSwgYXNzaWduZWRWYWx1ZSkgPT4ge1xuICAgICAgY29uc3Qgb3JpZ1ZhbHVlID0gZ2V0KGJhc2VfLCBrZXkpO1xuICAgICAgY29uc3QgdmFsdWUgPSBnZXQoY29weV8sIGtleSk7XG4gICAgICBjb25zdCBvcCA9ICFhc3NpZ25lZFZhbHVlID8gUkVNT1ZFIDogaGFzKGJhc2VfLCBrZXkpID8gUkVQTEFDRSA6IEFERDtcbiAgICAgIGlmIChvcmlnVmFsdWUgPT09IHZhbHVlICYmIG9wID09PSBSRVBMQUNFKVxuICAgICAgICByZXR1cm47XG4gICAgICBjb25zdCBwYXRoID0gYmFzZVBhdGguY29uY2F0KGtleSk7XG4gICAgICBwYXRjaGVzLnB1c2gob3AgPT09IFJFTU9WRSA/IHsgb3AsIHBhdGggfSA6IHsgb3AsIHBhdGgsIHZhbHVlIH0pO1xuICAgICAgaW52ZXJzZVBhdGNoZXMucHVzaChcbiAgICAgICAgb3AgPT09IEFERCA/IHsgb3A6IFJFTU9WRSwgcGF0aCB9IDogb3AgPT09IFJFTU9WRSA/IHsgb3A6IEFERCwgcGF0aCwgdmFsdWU6IGNsb25lUGF0Y2hWYWx1ZUlmTmVlZGVkKG9yaWdWYWx1ZSkgfSA6IHsgb3A6IFJFUExBQ0UsIHBhdGgsIHZhbHVlOiBjbG9uZVBhdGNoVmFsdWVJZk5lZWRlZChvcmlnVmFsdWUpIH1cbiAgICAgICk7XG4gICAgfSk7XG4gIH1cbiAgZnVuY3Rpb24gZ2VuZXJhdGVTZXRQYXRjaGVzKHN0YXRlLCBiYXNlUGF0aCwgcGF0Y2hlcywgaW52ZXJzZVBhdGNoZXMpIHtcbiAgICBsZXQgeyBiYXNlXywgY29weV8gfSA9IHN0YXRlO1xuICAgIGxldCBpID0gMDtcbiAgICBiYXNlXy5mb3JFYWNoKCh2YWx1ZSkgPT4ge1xuICAgICAgaWYgKCFjb3B5Xy5oYXModmFsdWUpKSB7XG4gICAgICAgIGNvbnN0IHBhdGggPSBiYXNlUGF0aC5jb25jYXQoW2ldKTtcbiAgICAgICAgcGF0Y2hlcy5wdXNoKHtcbiAgICAgICAgICBvcDogUkVNT1ZFLFxuICAgICAgICAgIHBhdGgsXG4gICAgICAgICAgdmFsdWVcbiAgICAgICAgfSk7XG4gICAgICAgIGludmVyc2VQYXRjaGVzLnVuc2hpZnQoe1xuICAgICAgICAgIG9wOiBBREQsXG4gICAgICAgICAgcGF0aCxcbiAgICAgICAgICB2YWx1ZVxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICAgIGkrKztcbiAgICB9KTtcbiAgICBpID0gMDtcbiAgICBjb3B5Xy5mb3JFYWNoKCh2YWx1ZSkgPT4ge1xuICAgICAgaWYgKCFiYXNlXy5oYXModmFsdWUpKSB7XG4gICAgICAgIGNvbnN0IHBhdGggPSBiYXNlUGF0aC5jb25jYXQoW2ldKTtcbiAgICAgICAgcGF0Y2hlcy5wdXNoKHtcbiAgICAgICAgICBvcDogQURELFxuICAgICAgICAgIHBhdGgsXG4gICAgICAgICAgdmFsdWVcbiAgICAgICAgfSk7XG4gICAgICAgIGludmVyc2VQYXRjaGVzLnVuc2hpZnQoe1xuICAgICAgICAgIG9wOiBSRU1PVkUsXG4gICAgICAgICAgcGF0aCxcbiAgICAgICAgICB2YWx1ZVxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICAgIGkrKztcbiAgICB9KTtcbiAgfVxuICBmdW5jdGlvbiBnZW5lcmF0ZVJlcGxhY2VtZW50UGF0Y2hlc18oYmFzZVZhbHVlLCByZXBsYWNlbWVudCwgcGF0Y2hlcywgaW52ZXJzZVBhdGNoZXMpIHtcbiAgICBwYXRjaGVzLnB1c2goe1xuICAgICAgb3A6IFJFUExBQ0UsXG4gICAgICBwYXRoOiBbXSxcbiAgICAgIHZhbHVlOiByZXBsYWNlbWVudCA9PT0gTk9USElORyA/IHZvaWQgMCA6IHJlcGxhY2VtZW50XG4gICAgfSk7XG4gICAgaW52ZXJzZVBhdGNoZXMucHVzaCh7XG4gICAgICBvcDogUkVQTEFDRSxcbiAgICAgIHBhdGg6IFtdLFxuICAgICAgdmFsdWU6IGJhc2VWYWx1ZVxuICAgIH0pO1xuICB9XG4gIGZ1bmN0aW9uIGFwcGx5UGF0Y2hlc18oZHJhZnQsIHBhdGNoZXMpIHtcbiAgICBwYXRjaGVzLmZvckVhY2goKHBhdGNoKSA9PiB7XG4gICAgICBjb25zdCB7IHBhdGgsIG9wIH0gPSBwYXRjaDtcbiAgICAgIGxldCBiYXNlID0gZHJhZnQ7XG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHBhdGgubGVuZ3RoIC0gMTsgaSsrKSB7XG4gICAgICAgIGNvbnN0IHBhcmVudFR5cGUgPSBnZXRBcmNodHlwZShiYXNlKTtcbiAgICAgICAgbGV0IHAgPSBwYXRoW2ldO1xuICAgICAgICBpZiAodHlwZW9mIHAgIT09IFwic3RyaW5nXCIgJiYgdHlwZW9mIHAgIT09IFwibnVtYmVyXCIpIHtcbiAgICAgICAgICBwID0gXCJcIiArIHA7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKChwYXJlbnRUeXBlID09PSAwIC8qIE9iamVjdCAqLyB8fCBwYXJlbnRUeXBlID09PSAxIC8qIEFycmF5ICovKSAmJiAocCA9PT0gXCJfX3Byb3RvX19cIiB8fCBwID09PSBcImNvbnN0cnVjdG9yXCIpKVxuICAgICAgICAgIGRpZShlcnJvck9mZnNldCArIDMpO1xuICAgICAgICBpZiAodHlwZW9mIGJhc2UgPT09IFwiZnVuY3Rpb25cIiAmJiBwID09PSBcInByb3RvdHlwZVwiKVxuICAgICAgICAgIGRpZShlcnJvck9mZnNldCArIDMpO1xuICAgICAgICBiYXNlID0gZ2V0KGJhc2UsIHApO1xuICAgICAgICBpZiAodHlwZW9mIGJhc2UgIT09IFwib2JqZWN0XCIpXG4gICAgICAgICAgZGllKGVycm9yT2Zmc2V0ICsgMiwgcGF0aC5qb2luKFwiL1wiKSk7XG4gICAgICB9XG4gICAgICBjb25zdCB0eXBlID0gZ2V0QXJjaHR5cGUoYmFzZSk7XG4gICAgICBjb25zdCB2YWx1ZSA9IGRlZXBDbG9uZVBhdGNoVmFsdWUocGF0Y2gudmFsdWUpO1xuICAgICAgY29uc3Qga2V5ID0gcGF0aFtwYXRoLmxlbmd0aCAtIDFdO1xuICAgICAgc3dpdGNoIChvcCkge1xuICAgICAgICBjYXNlIFJFUExBQ0U6XG4gICAgICAgICAgc3dpdGNoICh0eXBlKSB7XG4gICAgICAgICAgICBjYXNlIDIgLyogTWFwICovOlxuICAgICAgICAgICAgICByZXR1cm4gYmFzZS5zZXQoa2V5LCB2YWx1ZSk7XG4gICAgICAgICAgICBjYXNlIDMgLyogU2V0ICovOlxuICAgICAgICAgICAgICBkaWUoZXJyb3JPZmZzZXQpO1xuICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgcmV0dXJuIGJhc2Vba2V5XSA9IHZhbHVlO1xuICAgICAgICAgIH1cbiAgICAgICAgY2FzZSBBREQ6XG4gICAgICAgICAgc3dpdGNoICh0eXBlKSB7XG4gICAgICAgICAgICBjYXNlIDEgLyogQXJyYXkgKi86XG4gICAgICAgICAgICAgIHJldHVybiBrZXkgPT09IFwiLVwiID8gYmFzZS5wdXNoKHZhbHVlKSA6IGJhc2Uuc3BsaWNlKGtleSwgMCwgdmFsdWUpO1xuICAgICAgICAgICAgY2FzZSAyIC8qIE1hcCAqLzpcbiAgICAgICAgICAgICAgcmV0dXJuIGJhc2Uuc2V0KGtleSwgdmFsdWUpO1xuICAgICAgICAgICAgY2FzZSAzIC8qIFNldCAqLzpcbiAgICAgICAgICAgICAgcmV0dXJuIGJhc2UuYWRkKHZhbHVlKTtcbiAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgIHJldHVybiBiYXNlW2tleV0gPSB2YWx1ZTtcbiAgICAgICAgICB9XG4gICAgICAgIGNhc2UgUkVNT1ZFOlxuICAgICAgICAgIHN3aXRjaCAodHlwZSkge1xuICAgICAgICAgICAgY2FzZSAxIC8qIEFycmF5ICovOlxuICAgICAgICAgICAgICByZXR1cm4gYmFzZS5zcGxpY2Uoa2V5LCAxKTtcbiAgICAgICAgICAgIGNhc2UgMiAvKiBNYXAgKi86XG4gICAgICAgICAgICAgIHJldHVybiBiYXNlLmRlbGV0ZShrZXkpO1xuICAgICAgICAgICAgY2FzZSAzIC8qIFNldCAqLzpcbiAgICAgICAgICAgICAgcmV0dXJuIGJhc2UuZGVsZXRlKHBhdGNoLnZhbHVlKTtcbiAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgIHJldHVybiBkZWxldGUgYmFzZVtrZXldO1xuICAgICAgICAgIH1cbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICBkaWUoZXJyb3JPZmZzZXQgKyAxLCBvcCk7XG4gICAgICB9XG4gICAgfSk7XG4gICAgcmV0dXJuIGRyYWZ0O1xuICB9XG4gIGZ1bmN0aW9uIGRlZXBDbG9uZVBhdGNoVmFsdWUob2JqKSB7XG4gICAgaWYgKCFpc0RyYWZ0YWJsZShvYmopKVxuICAgICAgcmV0dXJuIG9iajtcbiAgICBpZiAoQXJyYXkuaXNBcnJheShvYmopKVxuICAgICAgcmV0dXJuIG9iai5tYXAoZGVlcENsb25lUGF0Y2hWYWx1ZSk7XG4gICAgaWYgKGlzTWFwKG9iaikpXG4gICAgICByZXR1cm4gbmV3IE1hcChcbiAgICAgICAgQXJyYXkuZnJvbShvYmouZW50cmllcygpKS5tYXAoKFtrLCB2XSkgPT4gW2ssIGRlZXBDbG9uZVBhdGNoVmFsdWUodildKVxuICAgICAgKTtcbiAgICBpZiAoaXNTZXQob2JqKSlcbiAgICAgIHJldHVybiBuZXcgU2V0KEFycmF5LmZyb20ob2JqKS5tYXAoZGVlcENsb25lUGF0Y2hWYWx1ZSkpO1xuICAgIGNvbnN0IGNsb25lZCA9IE9iamVjdC5jcmVhdGUoZ2V0UHJvdG90eXBlT2Yob2JqKSk7XG4gICAgZm9yIChjb25zdCBrZXkgaW4gb2JqKVxuICAgICAgY2xvbmVkW2tleV0gPSBkZWVwQ2xvbmVQYXRjaFZhbHVlKG9ialtrZXldKTtcbiAgICBpZiAoaGFzKG9iaiwgRFJBRlRBQkxFKSlcbiAgICAgIGNsb25lZFtEUkFGVEFCTEVdID0gb2JqW0RSQUZUQUJMRV07XG4gICAgcmV0dXJuIGNsb25lZDtcbiAgfVxuICBmdW5jdGlvbiBjbG9uZVBhdGNoVmFsdWVJZk5lZWRlZChvYmopIHtcbiAgICBpZiAoaXNEcmFmdChvYmopKSB7XG4gICAgICByZXR1cm4gZGVlcENsb25lUGF0Y2hWYWx1ZShvYmopO1xuICAgIH0gZWxzZVxuICAgICAgcmV0dXJuIG9iajtcbiAgfVxuICBsb2FkUGx1Z2luKFwiUGF0Y2hlc1wiLCB7XG4gICAgYXBwbHlQYXRjaGVzXyxcbiAgICBnZW5lcmF0ZVBhdGNoZXNfLFxuICAgIGdlbmVyYXRlUmVwbGFjZW1lbnRQYXRjaGVzX1xuICB9KTtcbn1cblxuLy8gc3JjL3BsdWdpbnMvbWFwc2V0LnRzXG5mdW5jdGlvbiBlbmFibGVNYXBTZXQoKSB7XG4gIGNsYXNzIERyYWZ0TWFwIGV4dGVuZHMgTWFwIHtcbiAgICBjb25zdHJ1Y3Rvcih0YXJnZXQsIHBhcmVudCkge1xuICAgICAgc3VwZXIoKTtcbiAgICAgIHRoaXNbRFJBRlRfU1RBVEVdID0ge1xuICAgICAgICB0eXBlXzogMiAvKiBNYXAgKi8sXG4gICAgICAgIHBhcmVudF86IHBhcmVudCxcbiAgICAgICAgc2NvcGVfOiBwYXJlbnQgPyBwYXJlbnQuc2NvcGVfIDogZ2V0Q3VycmVudFNjb3BlKCksXG4gICAgICAgIG1vZGlmaWVkXzogZmFsc2UsXG4gICAgICAgIGZpbmFsaXplZF86IGZhbHNlLFxuICAgICAgICBjb3B5Xzogdm9pZCAwLFxuICAgICAgICBhc3NpZ25lZF86IHZvaWQgMCxcbiAgICAgICAgYmFzZV86IHRhcmdldCxcbiAgICAgICAgZHJhZnRfOiB0aGlzLFxuICAgICAgICBpc01hbnVhbF86IGZhbHNlLFxuICAgICAgICByZXZva2VkXzogZmFsc2VcbiAgICAgIH07XG4gICAgfVxuICAgIGdldCBzaXplKCkge1xuICAgICAgcmV0dXJuIGxhdGVzdCh0aGlzW0RSQUZUX1NUQVRFXSkuc2l6ZTtcbiAgICB9XG4gICAgaGFzKGtleSkge1xuICAgICAgcmV0dXJuIGxhdGVzdCh0aGlzW0RSQUZUX1NUQVRFXSkuaGFzKGtleSk7XG4gICAgfVxuICAgIHNldChrZXksIHZhbHVlKSB7XG4gICAgICBjb25zdCBzdGF0ZSA9IHRoaXNbRFJBRlRfU1RBVEVdO1xuICAgICAgYXNzZXJ0VW5yZXZva2VkKHN0YXRlKTtcbiAgICAgIGlmICghbGF0ZXN0KHN0YXRlKS5oYXMoa2V5KSB8fCBsYXRlc3Qoc3RhdGUpLmdldChrZXkpICE9PSB2YWx1ZSkge1xuICAgICAgICBwcmVwYXJlTWFwQ29weShzdGF0ZSk7XG4gICAgICAgIG1hcmtDaGFuZ2VkKHN0YXRlKTtcbiAgICAgICAgc3RhdGUuYXNzaWduZWRfLnNldChrZXksIHRydWUpO1xuICAgICAgICBzdGF0ZS5jb3B5Xy5zZXQoa2V5LCB2YWx1ZSk7XG4gICAgICAgIHN0YXRlLmFzc2lnbmVkXy5zZXQoa2V5LCB0cnVlKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cbiAgICBkZWxldGUoa2V5KSB7XG4gICAgICBpZiAoIXRoaXMuaGFzKGtleSkpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgICAgY29uc3Qgc3RhdGUgPSB0aGlzW0RSQUZUX1NUQVRFXTtcbiAgICAgIGFzc2VydFVucmV2b2tlZChzdGF0ZSk7XG4gICAgICBwcmVwYXJlTWFwQ29weShzdGF0ZSk7XG4gICAgICBtYXJrQ2hhbmdlZChzdGF0ZSk7XG4gICAgICBpZiAoc3RhdGUuYmFzZV8uaGFzKGtleSkpIHtcbiAgICAgICAgc3RhdGUuYXNzaWduZWRfLnNldChrZXksIGZhbHNlKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHN0YXRlLmFzc2lnbmVkXy5kZWxldGUoa2V5KTtcbiAgICAgIH1cbiAgICAgIHN0YXRlLmNvcHlfLmRlbGV0ZShrZXkpO1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIGNsZWFyKCkge1xuICAgICAgY29uc3Qgc3RhdGUgPSB0aGlzW0RSQUZUX1NUQVRFXTtcbiAgICAgIGFzc2VydFVucmV2b2tlZChzdGF0ZSk7XG4gICAgICBpZiAobGF0ZXN0KHN0YXRlKS5zaXplKSB7XG4gICAgICAgIHByZXBhcmVNYXBDb3B5KHN0YXRlKTtcbiAgICAgICAgbWFya0NoYW5nZWQoc3RhdGUpO1xuICAgICAgICBzdGF0ZS5hc3NpZ25lZF8gPSAvKiBAX19QVVJFX18gKi8gbmV3IE1hcCgpO1xuICAgICAgICBlYWNoKHN0YXRlLmJhc2VfLCAoa2V5KSA9PiB7XG4gICAgICAgICAgc3RhdGUuYXNzaWduZWRfLnNldChrZXksIGZhbHNlKTtcbiAgICAgICAgfSk7XG4gICAgICAgIHN0YXRlLmNvcHlfLmNsZWFyKCk7XG4gICAgICB9XG4gICAgfVxuICAgIGZvckVhY2goY2IsIHRoaXNBcmcpIHtcbiAgICAgIGNvbnN0IHN0YXRlID0gdGhpc1tEUkFGVF9TVEFURV07XG4gICAgICBsYXRlc3Qoc3RhdGUpLmZvckVhY2goKF92YWx1ZSwga2V5LCBfbWFwKSA9PiB7XG4gICAgICAgIGNiLmNhbGwodGhpc0FyZywgdGhpcy5nZXQoa2V5KSwga2V5LCB0aGlzKTtcbiAgICAgIH0pO1xuICAgIH1cbiAgICBnZXQoa2V5KSB7XG4gICAgICBjb25zdCBzdGF0ZSA9IHRoaXNbRFJBRlRfU1RBVEVdO1xuICAgICAgYXNzZXJ0VW5yZXZva2VkKHN0YXRlKTtcbiAgICAgIGNvbnN0IHZhbHVlID0gbGF0ZXN0KHN0YXRlKS5nZXQoa2V5KTtcbiAgICAgIGlmIChzdGF0ZS5maW5hbGl6ZWRfIHx8ICFpc0RyYWZ0YWJsZSh2YWx1ZSkpIHtcbiAgICAgICAgcmV0dXJuIHZhbHVlO1xuICAgICAgfVxuICAgICAgaWYgKHZhbHVlICE9PSBzdGF0ZS5iYXNlXy5nZXQoa2V5KSkge1xuICAgICAgICByZXR1cm4gdmFsdWU7XG4gICAgICB9XG4gICAgICBjb25zdCBkcmFmdCA9IGNyZWF0ZVByb3h5KHZhbHVlLCBzdGF0ZSk7XG4gICAgICBwcmVwYXJlTWFwQ29weShzdGF0ZSk7XG4gICAgICBzdGF0ZS5jb3B5Xy5zZXQoa2V5LCBkcmFmdCk7XG4gICAgICByZXR1cm4gZHJhZnQ7XG4gICAgfVxuICAgIGtleXMoKSB7XG4gICAgICByZXR1cm4gbGF0ZXN0KHRoaXNbRFJBRlRfU1RBVEVdKS5rZXlzKCk7XG4gICAgfVxuICAgIHZhbHVlcygpIHtcbiAgICAgIGNvbnN0IGl0ZXJhdG9yID0gdGhpcy5rZXlzKCk7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBbU3ltYm9sLml0ZXJhdG9yXTogKCkgPT4gdGhpcy52YWx1ZXMoKSxcbiAgICAgICAgbmV4dDogKCkgPT4ge1xuICAgICAgICAgIGNvbnN0IHIgPSBpdGVyYXRvci5uZXh0KCk7XG4gICAgICAgICAgaWYgKHIuZG9uZSlcbiAgICAgICAgICAgIHJldHVybiByO1xuICAgICAgICAgIGNvbnN0IHZhbHVlID0gdGhpcy5nZXQoci52YWx1ZSk7XG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGRvbmU6IGZhbHNlLFxuICAgICAgICAgICAgdmFsdWVcbiAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICB9O1xuICAgIH1cbiAgICBlbnRyaWVzKCkge1xuICAgICAgY29uc3QgaXRlcmF0b3IgPSB0aGlzLmtleXMoKTtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIFtTeW1ib2wuaXRlcmF0b3JdOiAoKSA9PiB0aGlzLmVudHJpZXMoKSxcbiAgICAgICAgbmV4dDogKCkgPT4ge1xuICAgICAgICAgIGNvbnN0IHIgPSBpdGVyYXRvci5uZXh0KCk7XG4gICAgICAgICAgaWYgKHIuZG9uZSlcbiAgICAgICAgICAgIHJldHVybiByO1xuICAgICAgICAgIGNvbnN0IHZhbHVlID0gdGhpcy5nZXQoci52YWx1ZSk7XG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGRvbmU6IGZhbHNlLFxuICAgICAgICAgICAgdmFsdWU6IFtyLnZhbHVlLCB2YWx1ZV1cbiAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICB9O1xuICAgIH1cbiAgICBbKERSQUZUX1NUQVRFLCBTeW1ib2wuaXRlcmF0b3IpXSgpIHtcbiAgICAgIHJldHVybiB0aGlzLmVudHJpZXMoKTtcbiAgICB9XG4gIH1cbiAgZnVuY3Rpb24gcHJveHlNYXBfKHRhcmdldCwgcGFyZW50KSB7XG4gICAgcmV0dXJuIG5ldyBEcmFmdE1hcCh0YXJnZXQsIHBhcmVudCk7XG4gIH1cbiAgZnVuY3Rpb24gcHJlcGFyZU1hcENvcHkoc3RhdGUpIHtcbiAgICBpZiAoIXN0YXRlLmNvcHlfKSB7XG4gICAgICBzdGF0ZS5hc3NpZ25lZF8gPSAvKiBAX19QVVJFX18gKi8gbmV3IE1hcCgpO1xuICAgICAgc3RhdGUuY29weV8gPSBuZXcgTWFwKHN0YXRlLmJhc2VfKTtcbiAgICB9XG4gIH1cbiAgY2xhc3MgRHJhZnRTZXQgZXh0ZW5kcyBTZXQge1xuICAgIGNvbnN0cnVjdG9yKHRhcmdldCwgcGFyZW50KSB7XG4gICAgICBzdXBlcigpO1xuICAgICAgdGhpc1tEUkFGVF9TVEFURV0gPSB7XG4gICAgICAgIHR5cGVfOiAzIC8qIFNldCAqLyxcbiAgICAgICAgcGFyZW50XzogcGFyZW50LFxuICAgICAgICBzY29wZV86IHBhcmVudCA/IHBhcmVudC5zY29wZV8gOiBnZXRDdXJyZW50U2NvcGUoKSxcbiAgICAgICAgbW9kaWZpZWRfOiBmYWxzZSxcbiAgICAgICAgZmluYWxpemVkXzogZmFsc2UsXG4gICAgICAgIGNvcHlfOiB2b2lkIDAsXG4gICAgICAgIGJhc2VfOiB0YXJnZXQsXG4gICAgICAgIGRyYWZ0XzogdGhpcyxcbiAgICAgICAgZHJhZnRzXzogLyogQF9fUFVSRV9fICovIG5ldyBNYXAoKSxcbiAgICAgICAgcmV2b2tlZF86IGZhbHNlLFxuICAgICAgICBpc01hbnVhbF86IGZhbHNlXG4gICAgICB9O1xuICAgIH1cbiAgICBnZXQgc2l6ZSgpIHtcbiAgICAgIHJldHVybiBsYXRlc3QodGhpc1tEUkFGVF9TVEFURV0pLnNpemU7XG4gICAgfVxuICAgIGhhcyh2YWx1ZSkge1xuICAgICAgY29uc3Qgc3RhdGUgPSB0aGlzW0RSQUZUX1NUQVRFXTtcbiAgICAgIGFzc2VydFVucmV2b2tlZChzdGF0ZSk7XG4gICAgICBpZiAoIXN0YXRlLmNvcHlfKSB7XG4gICAgICAgIHJldHVybiBzdGF0ZS5iYXNlXy5oYXModmFsdWUpO1xuICAgICAgfVxuICAgICAgaWYgKHN0YXRlLmNvcHlfLmhhcyh2YWx1ZSkpXG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgaWYgKHN0YXRlLmRyYWZ0c18uaGFzKHZhbHVlKSAmJiBzdGF0ZS5jb3B5Xy5oYXMoc3RhdGUuZHJhZnRzXy5nZXQodmFsdWUpKSlcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIGFkZCh2YWx1ZSkge1xuICAgICAgY29uc3Qgc3RhdGUgPSB0aGlzW0RSQUZUX1NUQVRFXTtcbiAgICAgIGFzc2VydFVucmV2b2tlZChzdGF0ZSk7XG4gICAgICBpZiAoIXRoaXMuaGFzKHZhbHVlKSkge1xuICAgICAgICBwcmVwYXJlU2V0Q29weShzdGF0ZSk7XG4gICAgICAgIG1hcmtDaGFuZ2VkKHN0YXRlKTtcbiAgICAgICAgc3RhdGUuY29weV8uYWRkKHZhbHVlKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cbiAgICBkZWxldGUodmFsdWUpIHtcbiAgICAgIGlmICghdGhpcy5oYXModmFsdWUpKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IHN0YXRlID0gdGhpc1tEUkFGVF9TVEFURV07XG4gICAgICBhc3NlcnRVbnJldm9rZWQoc3RhdGUpO1xuICAgICAgcHJlcGFyZVNldENvcHkoc3RhdGUpO1xuICAgICAgbWFya0NoYW5nZWQoc3RhdGUpO1xuICAgICAgcmV0dXJuIHN0YXRlLmNvcHlfLmRlbGV0ZSh2YWx1ZSkgfHwgKHN0YXRlLmRyYWZ0c18uaGFzKHZhbHVlKSA/IHN0YXRlLmNvcHlfLmRlbGV0ZShzdGF0ZS5kcmFmdHNfLmdldCh2YWx1ZSkpIDogKFxuICAgICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xuICAgICAgICBmYWxzZVxuICAgICAgKSk7XG4gICAgfVxuICAgIGNsZWFyKCkge1xuICAgICAgY29uc3Qgc3RhdGUgPSB0aGlzW0RSQUZUX1NUQVRFXTtcbiAgICAgIGFzc2VydFVucmV2b2tlZChzdGF0ZSk7XG4gICAgICBpZiAobGF0ZXN0KHN0YXRlKS5zaXplKSB7XG4gICAgICAgIHByZXBhcmVTZXRDb3B5KHN0YXRlKTtcbiAgICAgICAgbWFya0NoYW5nZWQoc3RhdGUpO1xuICAgICAgICBzdGF0ZS5jb3B5Xy5jbGVhcigpO1xuICAgICAgfVxuICAgIH1cbiAgICB2YWx1ZXMoKSB7XG4gICAgICBjb25zdCBzdGF0ZSA9IHRoaXNbRFJBRlRfU1RBVEVdO1xuICAgICAgYXNzZXJ0VW5yZXZva2VkKHN0YXRlKTtcbiAgICAgIHByZXBhcmVTZXRDb3B5KHN0YXRlKTtcbiAgICAgIHJldHVybiBzdGF0ZS5jb3B5Xy52YWx1ZXMoKTtcbiAgICB9XG4gICAgZW50cmllcygpIHtcbiAgICAgIGNvbnN0IHN0YXRlID0gdGhpc1tEUkFGVF9TVEFURV07XG4gICAgICBhc3NlcnRVbnJldm9rZWQoc3RhdGUpO1xuICAgICAgcHJlcGFyZVNldENvcHkoc3RhdGUpO1xuICAgICAgcmV0dXJuIHN0YXRlLmNvcHlfLmVudHJpZXMoKTtcbiAgICB9XG4gICAga2V5cygpIHtcbiAgICAgIHJldHVybiB0aGlzLnZhbHVlcygpO1xuICAgIH1cbiAgICBbKERSQUZUX1NUQVRFLCBTeW1ib2wuaXRlcmF0b3IpXSgpIHtcbiAgICAgIHJldHVybiB0aGlzLnZhbHVlcygpO1xuICAgIH1cbiAgICBmb3JFYWNoKGNiLCB0aGlzQXJnKSB7XG4gICAgICBjb25zdCBpdGVyYXRvciA9IHRoaXMudmFsdWVzKCk7XG4gICAgICBsZXQgcmVzdWx0ID0gaXRlcmF0b3IubmV4dCgpO1xuICAgICAgd2hpbGUgKCFyZXN1bHQuZG9uZSkge1xuICAgICAgICBjYi5jYWxsKHRoaXNBcmcsIHJlc3VsdC52YWx1ZSwgcmVzdWx0LnZhbHVlLCB0aGlzKTtcbiAgICAgICAgcmVzdWx0ID0gaXRlcmF0b3IubmV4dCgpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICBmdW5jdGlvbiBwcm94eVNldF8odGFyZ2V0LCBwYXJlbnQpIHtcbiAgICByZXR1cm4gbmV3IERyYWZ0U2V0KHRhcmdldCwgcGFyZW50KTtcbiAgfVxuICBmdW5jdGlvbiBwcmVwYXJlU2V0Q29weShzdGF0ZSkge1xuICAgIGlmICghc3RhdGUuY29weV8pIHtcbiAgICAgIHN0YXRlLmNvcHlfID0gLyogQF9fUFVSRV9fICovIG5ldyBTZXQoKTtcbiAgICAgIHN0YXRlLmJhc2VfLmZvckVhY2goKHZhbHVlKSA9PiB7XG4gICAgICAgIGlmIChpc0RyYWZ0YWJsZSh2YWx1ZSkpIHtcbiAgICAgICAgICBjb25zdCBkcmFmdCA9IGNyZWF0ZVByb3h5KHZhbHVlLCBzdGF0ZSk7XG4gICAgICAgICAgc3RhdGUuZHJhZnRzXy5zZXQodmFsdWUsIGRyYWZ0KTtcbiAgICAgICAgICBzdGF0ZS5jb3B5Xy5hZGQoZHJhZnQpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHN0YXRlLmNvcHlfLmFkZCh2YWx1ZSk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuICBmdW5jdGlvbiBhc3NlcnRVbnJldm9rZWQoc3RhdGUpIHtcbiAgICBpZiAoc3RhdGUucmV2b2tlZF8pXG4gICAgICBkaWUoMywgSlNPTi5zdHJpbmdpZnkobGF0ZXN0KHN0YXRlKSkpO1xuICB9XG4gIGxvYWRQbHVnaW4oXCJNYXBTZXRcIiwgeyBwcm94eU1hcF8sIHByb3h5U2V0XyB9KTtcbn1cblxuLy8gc3JjL2ltbWVyLnRzXG52YXIgaW1tZXIgPSBuZXcgSW1tZXIyKCk7XG52YXIgcHJvZHVjZSA9IGltbWVyLnByb2R1Y2U7XG52YXIgcHJvZHVjZVdpdGhQYXRjaGVzID0gaW1tZXIucHJvZHVjZVdpdGhQYXRjaGVzLmJpbmQoXG4gIGltbWVyXG4pO1xudmFyIHNldEF1dG9GcmVlemUgPSBpbW1lci5zZXRBdXRvRnJlZXplLmJpbmQoaW1tZXIpO1xudmFyIHNldFVzZVN0cmljdFNoYWxsb3dDb3B5ID0gaW1tZXIuc2V0VXNlU3RyaWN0U2hhbGxvd0NvcHkuYmluZChpbW1lcik7XG52YXIgYXBwbHlQYXRjaGVzID0gaW1tZXIuYXBwbHlQYXRjaGVzLmJpbmQoaW1tZXIpO1xudmFyIGNyZWF0ZURyYWZ0ID0gaW1tZXIuY3JlYXRlRHJhZnQuYmluZChpbW1lcik7XG52YXIgZmluaXNoRHJhZnQgPSBpbW1lci5maW5pc2hEcmFmdC5iaW5kKGltbWVyKTtcbmZ1bmN0aW9uIGNhc3REcmFmdCh2YWx1ZSkge1xuICByZXR1cm4gdmFsdWU7XG59XG5mdW5jdGlvbiBjYXN0SW1tdXRhYmxlKHZhbHVlKSB7XG4gIHJldHVybiB2YWx1ZTtcbn1cbmV4cG9ydCB7XG4gIEltbWVyMiBhcyBJbW1lcixcbiAgYXBwbHlQYXRjaGVzLFxuICBjYXN0RHJhZnQsXG4gIGNhc3RJbW11dGFibGUsXG4gIGNyZWF0ZURyYWZ0LFxuICBjdXJyZW50LFxuICBlbmFibGVNYXBTZXQsXG4gIGVuYWJsZVBhdGNoZXMsXG4gIGZpbmlzaERyYWZ0LFxuICBmcmVlemUsXG4gIERSQUZUQUJMRSBhcyBpbW1lcmFibGUsXG4gIGlzRHJhZnQsXG4gIGlzRHJhZnRhYmxlLFxuICBOT1RISU5HIGFzIG5vdGhpbmcsXG4gIG9yaWdpbmFsLFxuICBwcm9kdWNlLFxuICBwcm9kdWNlV2l0aFBhdGNoZXMsXG4gIHNldEF1dG9GcmVlemUsXG4gIHNldFVzZVN0cmljdFNoYWxsb3dDb3B5XG59O1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9aW1tZXIubWpzLm1hcCIsIi8vIHNyYy9pbmRleC50c1xuZXhwb3J0ICogZnJvbSBcInJlZHV4XCI7XG5pbXBvcnQgeyBwcm9kdWNlLCBjdXJyZW50IGFzIGN1cnJlbnQzLCBmcmVlemUsIG9yaWdpbmFsIGFzIG9yaWdpbmFsMiwgaXNEcmFmdCBhcyBpc0RyYWZ0NSB9IGZyb20gXCJpbW1lclwiO1xuaW1wb3J0IHsgY3JlYXRlU2VsZWN0b3IsIGNyZWF0ZVNlbGVjdG9yQ3JlYXRvciBhcyBjcmVhdGVTZWxlY3RvckNyZWF0b3IyLCBscnVNZW1vaXplLCB3ZWFrTWFwTWVtb2l6ZSBhcyB3ZWFrTWFwTWVtb2l6ZTIgfSBmcm9tIFwicmVzZWxlY3RcIjtcblxuLy8gc3JjL2NyZWF0ZURyYWZ0U2FmZVNlbGVjdG9yLnRzXG5pbXBvcnQgeyBjdXJyZW50LCBpc0RyYWZ0IH0gZnJvbSBcImltbWVyXCI7XG5pbXBvcnQgeyBjcmVhdGVTZWxlY3RvckNyZWF0b3IsIHdlYWtNYXBNZW1vaXplIH0gZnJvbSBcInJlc2VsZWN0XCI7XG52YXIgY3JlYXRlRHJhZnRTYWZlU2VsZWN0b3JDcmVhdG9yID0gKC4uLmFyZ3MpID0+IHtcbiAgY29uc3QgY3JlYXRlU2VsZWN0b3IyID0gY3JlYXRlU2VsZWN0b3JDcmVhdG9yKC4uLmFyZ3MpO1xuICBjb25zdCBjcmVhdGVEcmFmdFNhZmVTZWxlY3RvcjIgPSBPYmplY3QuYXNzaWduKCguLi5hcmdzMikgPT4ge1xuICAgIGNvbnN0IHNlbGVjdG9yID0gY3JlYXRlU2VsZWN0b3IyKC4uLmFyZ3MyKTtcbiAgICBjb25zdCB3cmFwcGVkU2VsZWN0b3IgPSAodmFsdWUsIC4uLnJlc3QpID0+IHNlbGVjdG9yKGlzRHJhZnQodmFsdWUpID8gY3VycmVudCh2YWx1ZSkgOiB2YWx1ZSwgLi4ucmVzdCk7XG4gICAgT2JqZWN0LmFzc2lnbih3cmFwcGVkU2VsZWN0b3IsIHNlbGVjdG9yKTtcbiAgICByZXR1cm4gd3JhcHBlZFNlbGVjdG9yO1xuICB9LCB7XG4gICAgd2l0aFR5cGVzOiAoKSA9PiBjcmVhdGVEcmFmdFNhZmVTZWxlY3RvcjJcbiAgfSk7XG4gIHJldHVybiBjcmVhdGVEcmFmdFNhZmVTZWxlY3RvcjI7XG59O1xudmFyIGNyZWF0ZURyYWZ0U2FmZVNlbGVjdG9yID0gLyogQF9fUFVSRV9fICovIGNyZWF0ZURyYWZ0U2FmZVNlbGVjdG9yQ3JlYXRvcih3ZWFrTWFwTWVtb2l6ZSk7XG5cbi8vIHNyYy9jb25maWd1cmVTdG9yZS50c1xuaW1wb3J0IHsgYXBwbHlNaWRkbGV3YXJlLCBjcmVhdGVTdG9yZSwgY29tcG9zZSBhcyBjb21wb3NlMiwgY29tYmluZVJlZHVjZXJzLCBpc1BsYWluT2JqZWN0IGFzIGlzUGxhaW5PYmplY3QyIH0gZnJvbSBcInJlZHV4XCI7XG5cbi8vIHNyYy9kZXZ0b29sc0V4dGVuc2lvbi50c1xuaW1wb3J0IHsgY29tcG9zZSB9IGZyb20gXCJyZWR1eFwiO1xudmFyIGNvbXBvc2VXaXRoRGV2VG9vbHMgPSB0eXBlb2Ygd2luZG93ICE9PSBcInVuZGVmaW5lZFwiICYmIHdpbmRvdy5fX1JFRFVYX0RFVlRPT0xTX0VYVEVOU0lPTl9DT01QT1NFX18gPyB3aW5kb3cuX19SRURVWF9ERVZUT09MU19FWFRFTlNJT05fQ09NUE9TRV9fIDogZnVuY3Rpb24oKSB7XG4gIGlmIChhcmd1bWVudHMubGVuZ3RoID09PSAwKSByZXR1cm4gdm9pZCAwO1xuICBpZiAodHlwZW9mIGFyZ3VtZW50c1swXSA9PT0gXCJvYmplY3RcIikgcmV0dXJuIGNvbXBvc2U7XG4gIHJldHVybiBjb21wb3NlLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7XG59O1xudmFyIGRldlRvb2xzRW5oYW5jZXIgPSB0eXBlb2Ygd2luZG93ICE9PSBcInVuZGVmaW5lZFwiICYmIHdpbmRvdy5fX1JFRFVYX0RFVlRPT0xTX0VYVEVOU0lPTl9fID8gd2luZG93Ll9fUkVEVVhfREVWVE9PTFNfRVhURU5TSU9OX18gOiBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uKG5vb3AzKSB7XG4gICAgcmV0dXJuIG5vb3AzO1xuICB9O1xufTtcblxuLy8gc3JjL2dldERlZmF1bHRNaWRkbGV3YXJlLnRzXG5pbXBvcnQgeyB0aHVuayBhcyB0aHVua01pZGRsZXdhcmUsIHdpdGhFeHRyYUFyZ3VtZW50IH0gZnJvbSBcInJlZHV4LXRodW5rXCI7XG5cbi8vIHNyYy9jcmVhdGVBY3Rpb24udHNcbmltcG9ydCB7IGlzQWN0aW9uIH0gZnJvbSBcInJlZHV4XCI7XG5cbi8vIHNyYy90c0hlbHBlcnMudHNcbnZhciBoYXNNYXRjaEZ1bmN0aW9uID0gKHYpID0+IHtcbiAgcmV0dXJuIHYgJiYgdHlwZW9mIHYubWF0Y2ggPT09IFwiZnVuY3Rpb25cIjtcbn07XG5cbi8vIHNyYy9jcmVhdGVBY3Rpb24udHNcbmZ1bmN0aW9uIGNyZWF0ZUFjdGlvbih0eXBlLCBwcmVwYXJlQWN0aW9uKSB7XG4gIGZ1bmN0aW9uIGFjdGlvbkNyZWF0b3IoLi4uYXJncykge1xuICAgIGlmIChwcmVwYXJlQWN0aW9uKSB7XG4gICAgICBsZXQgcHJlcGFyZWQgPSBwcmVwYXJlQWN0aW9uKC4uLmFyZ3MpO1xuICAgICAgaWYgKCFwcmVwYXJlZCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IocHJvY2Vzcy5lbnYuTk9ERV9FTlYgPT09IFwicHJvZHVjdGlvblwiID8gZm9ybWF0UHJvZEVycm9yTWVzc2FnZSgwKSA6IFwicHJlcGFyZUFjdGlvbiBkaWQgbm90IHJldHVybiBhbiBvYmplY3RcIik7XG4gICAgICB9XG4gICAgICByZXR1cm4ge1xuICAgICAgICB0eXBlLFxuICAgICAgICBwYXlsb2FkOiBwcmVwYXJlZC5wYXlsb2FkLFxuICAgICAgICAuLi5cIm1ldGFcIiBpbiBwcmVwYXJlZCAmJiB7XG4gICAgICAgICAgbWV0YTogcHJlcGFyZWQubWV0YVxuICAgICAgICB9LFxuICAgICAgICAuLi5cImVycm9yXCIgaW4gcHJlcGFyZWQgJiYge1xuICAgICAgICAgIGVycm9yOiBwcmVwYXJlZC5lcnJvclxuICAgICAgICB9XG4gICAgICB9O1xuICAgIH1cbiAgICByZXR1cm4ge1xuICAgICAgdHlwZSxcbiAgICAgIHBheWxvYWQ6IGFyZ3NbMF1cbiAgICB9O1xuICB9XG4gIGFjdGlvbkNyZWF0b3IudG9TdHJpbmcgPSAoKSA9PiBgJHt0eXBlfWA7XG4gIGFjdGlvbkNyZWF0b3IudHlwZSA9IHR5cGU7XG4gIGFjdGlvbkNyZWF0b3IubWF0Y2ggPSAoYWN0aW9uKSA9PiBpc0FjdGlvbihhY3Rpb24pICYmIGFjdGlvbi50eXBlID09PSB0eXBlO1xuICByZXR1cm4gYWN0aW9uQ3JlYXRvcjtcbn1cbmZ1bmN0aW9uIGlzQWN0aW9uQ3JlYXRvcihhY3Rpb24pIHtcbiAgcmV0dXJuIHR5cGVvZiBhY3Rpb24gPT09IFwiZnVuY3Rpb25cIiAmJiBcInR5cGVcIiBpbiBhY3Rpb24gJiYgLy8gaGFzTWF0Y2hGdW5jdGlvbiBvbmx5IHdhbnRzIE1hdGNoZXJzIGJ1dCBJIGRvbid0IHNlZSB0aGUgcG9pbnQgaW4gcmV3cml0aW5nIGl0XG4gIGhhc01hdGNoRnVuY3Rpb24oYWN0aW9uKTtcbn1cbmZ1bmN0aW9uIGlzRlNBKGFjdGlvbikge1xuICByZXR1cm4gaXNBY3Rpb24oYWN0aW9uKSAmJiBPYmplY3Qua2V5cyhhY3Rpb24pLmV2ZXJ5KGlzVmFsaWRLZXkpO1xufVxuZnVuY3Rpb24gaXNWYWxpZEtleShrZXkpIHtcbiAgcmV0dXJuIFtcInR5cGVcIiwgXCJwYXlsb2FkXCIsIFwiZXJyb3JcIiwgXCJtZXRhXCJdLmluZGV4T2Yoa2V5KSA+IC0xO1xufVxuXG4vLyBzcmMvYWN0aW9uQ3JlYXRvckludmFyaWFudE1pZGRsZXdhcmUudHNcbmZ1bmN0aW9uIGdldE1lc3NhZ2UodHlwZSkge1xuICBjb25zdCBzcGxpdFR5cGUgPSB0eXBlID8gYCR7dHlwZX1gLnNwbGl0KFwiL1wiKSA6IFtdO1xuICBjb25zdCBhY3Rpb25OYW1lID0gc3BsaXRUeXBlW3NwbGl0VHlwZS5sZW5ndGggLSAxXSB8fCBcImFjdGlvbkNyZWF0b3JcIjtcbiAgcmV0dXJuIGBEZXRlY3RlZCBhbiBhY3Rpb24gY3JlYXRvciB3aXRoIHR5cGUgXCIke3R5cGUgfHwgXCJ1bmtub3duXCJ9XCIgYmVpbmcgZGlzcGF0Y2hlZC4gXG5NYWtlIHN1cmUgeW91J3JlIGNhbGxpbmcgdGhlIGFjdGlvbiBjcmVhdG9yIGJlZm9yZSBkaXNwYXRjaGluZywgaS5lLiBcXGBkaXNwYXRjaCgke2FjdGlvbk5hbWV9KCkpXFxgIGluc3RlYWQgb2YgXFxgZGlzcGF0Y2goJHthY3Rpb25OYW1lfSlcXGAuIFRoaXMgaXMgbmVjZXNzYXJ5IGV2ZW4gaWYgdGhlIGFjdGlvbiBoYXMgbm8gcGF5bG9hZC5gO1xufVxuZnVuY3Rpb24gY3JlYXRlQWN0aW9uQ3JlYXRvckludmFyaWFudE1pZGRsZXdhcmUob3B0aW9ucyA9IHt9KSB7XG4gIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViA9PT0gXCJwcm9kdWN0aW9uXCIpIHtcbiAgICByZXR1cm4gKCkgPT4gKG5leHQpID0+IChhY3Rpb24pID0+IG5leHQoYWN0aW9uKTtcbiAgfVxuICBjb25zdCB7XG4gICAgaXNBY3Rpb25DcmVhdG9yOiBpc0FjdGlvbkNyZWF0b3IyID0gaXNBY3Rpb25DcmVhdG9yXG4gIH0gPSBvcHRpb25zO1xuICByZXR1cm4gKCkgPT4gKG5leHQpID0+IChhY3Rpb24pID0+IHtcbiAgICBpZiAoaXNBY3Rpb25DcmVhdG9yMihhY3Rpb24pKSB7XG4gICAgICBjb25zb2xlLndhcm4oZ2V0TWVzc2FnZShhY3Rpb24udHlwZSkpO1xuICAgIH1cbiAgICByZXR1cm4gbmV4dChhY3Rpb24pO1xuICB9O1xufVxuXG4vLyBzcmMvdXRpbHMudHNcbmltcG9ydCB7IHByb2R1Y2UgYXMgY3JlYXRlTmV4dFN0YXRlLCBpc0RyYWZ0YWJsZSB9IGZyb20gXCJpbW1lclwiO1xuZnVuY3Rpb24gZ2V0VGltZU1lYXN1cmVVdGlscyhtYXhEZWxheSwgZm5OYW1lKSB7XG4gIGxldCBlbGFwc2VkID0gMDtcbiAgcmV0dXJuIHtcbiAgICBtZWFzdXJlVGltZShmbikge1xuICAgICAgY29uc3Qgc3RhcnRlZCA9IERhdGUubm93KCk7XG4gICAgICB0cnkge1xuICAgICAgICByZXR1cm4gZm4oKTtcbiAgICAgIH0gZmluYWxseSB7XG4gICAgICAgIGNvbnN0IGZpbmlzaGVkID0gRGF0ZS5ub3coKTtcbiAgICAgICAgZWxhcHNlZCArPSBmaW5pc2hlZCAtIHN0YXJ0ZWQ7XG4gICAgICB9XG4gICAgfSxcbiAgICB3YXJuSWZFeGNlZWRlZCgpIHtcbiAgICAgIGlmIChlbGFwc2VkID4gbWF4RGVsYXkpIHtcbiAgICAgICAgY29uc29sZS53YXJuKGAke2ZuTmFtZX0gdG9vayAke2VsYXBzZWR9bXMsIHdoaWNoIGlzIG1vcmUgdGhhbiB0aGUgd2FybmluZyB0aHJlc2hvbGQgb2YgJHttYXhEZWxheX1tcy4gXG5JZiB5b3VyIHN0YXRlIG9yIGFjdGlvbnMgYXJlIHZlcnkgbGFyZ2UsIHlvdSBtYXkgd2FudCB0byBkaXNhYmxlIHRoZSBtaWRkbGV3YXJlIGFzIGl0IG1pZ2h0IGNhdXNlIHRvbyBtdWNoIG9mIGEgc2xvd2Rvd24gaW4gZGV2ZWxvcG1lbnQgbW9kZS4gU2VlIGh0dHBzOi8vcmVkdXgtdG9vbGtpdC5qcy5vcmcvYXBpL2dldERlZmF1bHRNaWRkbGV3YXJlIGZvciBpbnN0cnVjdGlvbnMuXG5JdCBpcyBkaXNhYmxlZCBpbiBwcm9kdWN0aW9uIGJ1aWxkcywgc28geW91IGRvbid0IG5lZWQgdG8gd29ycnkgYWJvdXQgdGhhdC5gKTtcbiAgICAgIH1cbiAgICB9XG4gIH07XG59XG52YXIgVHVwbGUgPSBjbGFzcyBfVHVwbGUgZXh0ZW5kcyBBcnJheSB7XG4gIGNvbnN0cnVjdG9yKC4uLml0ZW1zKSB7XG4gICAgc3VwZXIoLi4uaXRlbXMpO1xuICAgIE9iamVjdC5zZXRQcm90b3R5cGVPZih0aGlzLCBfVHVwbGUucHJvdG90eXBlKTtcbiAgfVxuICBzdGF0aWMgZ2V0IFtTeW1ib2wuc3BlY2llc10oKSB7XG4gICAgcmV0dXJuIF9UdXBsZTtcbiAgfVxuICBjb25jYXQoLi4uYXJyKSB7XG4gICAgcmV0dXJuIHN1cGVyLmNvbmNhdC5hcHBseSh0aGlzLCBhcnIpO1xuICB9XG4gIHByZXBlbmQoLi4uYXJyKSB7XG4gICAgaWYgKGFyci5sZW5ndGggPT09IDEgJiYgQXJyYXkuaXNBcnJheShhcnJbMF0pKSB7XG4gICAgICByZXR1cm4gbmV3IF9UdXBsZSguLi5hcnJbMF0uY29uY2F0KHRoaXMpKTtcbiAgICB9XG4gICAgcmV0dXJuIG5ldyBfVHVwbGUoLi4uYXJyLmNvbmNhdCh0aGlzKSk7XG4gIH1cbn07XG5mdW5jdGlvbiBmcmVlemVEcmFmdGFibGUodmFsKSB7XG4gIHJldHVybiBpc0RyYWZ0YWJsZSh2YWwpID8gY3JlYXRlTmV4dFN0YXRlKHZhbCwgKCkgPT4ge1xuICB9KSA6IHZhbDtcbn1cbmZ1bmN0aW9uIGdldE9ySW5zZXJ0Q29tcHV0ZWQobWFwLCBrZXksIGNvbXB1dGUpIHtcbiAgaWYgKG1hcC5oYXMoa2V5KSkgcmV0dXJuIG1hcC5nZXQoa2V5KTtcbiAgcmV0dXJuIG1hcC5zZXQoa2V5LCBjb21wdXRlKGtleSkpLmdldChrZXkpO1xufVxuXG4vLyBzcmMvaW1tdXRhYmxlU3RhdGVJbnZhcmlhbnRNaWRkbGV3YXJlLnRzXG5mdW5jdGlvbiBpc0ltbXV0YWJsZURlZmF1bHQodmFsdWUpIHtcbiAgcmV0dXJuIHR5cGVvZiB2YWx1ZSAhPT0gXCJvYmplY3RcIiB8fCB2YWx1ZSA9PSBudWxsIHx8IE9iamVjdC5pc0Zyb3plbih2YWx1ZSk7XG59XG5mdW5jdGlvbiB0cmFja0Zvck11dGF0aW9ucyhpc0ltbXV0YWJsZSwgaWdub3JlUGF0aHMsIG9iaikge1xuICBjb25zdCB0cmFja2VkUHJvcGVydGllcyA9IHRyYWNrUHJvcGVydGllcyhpc0ltbXV0YWJsZSwgaWdub3JlUGF0aHMsIG9iaik7XG4gIHJldHVybiB7XG4gICAgZGV0ZWN0TXV0YXRpb25zKCkge1xuICAgICAgcmV0dXJuIGRldGVjdE11dGF0aW9ucyhpc0ltbXV0YWJsZSwgaWdub3JlUGF0aHMsIHRyYWNrZWRQcm9wZXJ0aWVzLCBvYmopO1xuICAgIH1cbiAgfTtcbn1cbmZ1bmN0aW9uIHRyYWNrUHJvcGVydGllcyhpc0ltbXV0YWJsZSwgaWdub3JlUGF0aHMgPSBbXSwgb2JqLCBwYXRoID0gXCJcIiwgY2hlY2tlZE9iamVjdHMgPSAvKiBAX19QVVJFX18gKi8gbmV3IFNldCgpKSB7XG4gIGNvbnN0IHRyYWNrZWQgPSB7XG4gICAgdmFsdWU6IG9ialxuICB9O1xuICBpZiAoIWlzSW1tdXRhYmxlKG9iaikgJiYgIWNoZWNrZWRPYmplY3RzLmhhcyhvYmopKSB7XG4gICAgY2hlY2tlZE9iamVjdHMuYWRkKG9iaik7XG4gICAgdHJhY2tlZC5jaGlsZHJlbiA9IHt9O1xuICAgIGZvciAoY29uc3Qga2V5IGluIG9iaikge1xuICAgICAgY29uc3QgY2hpbGRQYXRoID0gcGF0aCA/IHBhdGggKyBcIi5cIiArIGtleSA6IGtleTtcbiAgICAgIGlmIChpZ25vcmVQYXRocy5sZW5ndGggJiYgaWdub3JlUGF0aHMuaW5kZXhPZihjaGlsZFBhdGgpICE9PSAtMSkge1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cbiAgICAgIHRyYWNrZWQuY2hpbGRyZW5ba2V5XSA9IHRyYWNrUHJvcGVydGllcyhpc0ltbXV0YWJsZSwgaWdub3JlUGF0aHMsIG9ialtrZXldLCBjaGlsZFBhdGgpO1xuICAgIH1cbiAgfVxuICByZXR1cm4gdHJhY2tlZDtcbn1cbmZ1bmN0aW9uIGRldGVjdE11dGF0aW9ucyhpc0ltbXV0YWJsZSwgaWdub3JlZFBhdGhzID0gW10sIHRyYWNrZWRQcm9wZXJ0eSwgb2JqLCBzYW1lUGFyZW50UmVmID0gZmFsc2UsIHBhdGggPSBcIlwiKSB7XG4gIGNvbnN0IHByZXZPYmogPSB0cmFja2VkUHJvcGVydHkgPyB0cmFja2VkUHJvcGVydHkudmFsdWUgOiB2b2lkIDA7XG4gIGNvbnN0IHNhbWVSZWYgPSBwcmV2T2JqID09PSBvYmo7XG4gIGlmIChzYW1lUGFyZW50UmVmICYmICFzYW1lUmVmICYmICFOdW1iZXIuaXNOYU4ob2JqKSkge1xuICAgIHJldHVybiB7XG4gICAgICB3YXNNdXRhdGVkOiB0cnVlLFxuICAgICAgcGF0aFxuICAgIH07XG4gIH1cbiAgaWYgKGlzSW1tdXRhYmxlKHByZXZPYmopIHx8IGlzSW1tdXRhYmxlKG9iaikpIHtcbiAgICByZXR1cm4ge1xuICAgICAgd2FzTXV0YXRlZDogZmFsc2VcbiAgICB9O1xuICB9XG4gIGNvbnN0IGtleXNUb0RldGVjdCA9IHt9O1xuICBmb3IgKGxldCBrZXkgaW4gdHJhY2tlZFByb3BlcnR5LmNoaWxkcmVuKSB7XG4gICAga2V5c1RvRGV0ZWN0W2tleV0gPSB0cnVlO1xuICB9XG4gIGZvciAobGV0IGtleSBpbiBvYmopIHtcbiAgICBrZXlzVG9EZXRlY3Rba2V5XSA9IHRydWU7XG4gIH1cbiAgY29uc3QgaGFzSWdub3JlZFBhdGhzID0gaWdub3JlZFBhdGhzLmxlbmd0aCA+IDA7XG4gIGZvciAobGV0IGtleSBpbiBrZXlzVG9EZXRlY3QpIHtcbiAgICBjb25zdCBuZXN0ZWRQYXRoID0gcGF0aCA/IHBhdGggKyBcIi5cIiArIGtleSA6IGtleTtcbiAgICBpZiAoaGFzSWdub3JlZFBhdGhzKSB7XG4gICAgICBjb25zdCBoYXNNYXRjaGVzID0gaWdub3JlZFBhdGhzLnNvbWUoKGlnbm9yZWQpID0+IHtcbiAgICAgICAgaWYgKGlnbm9yZWQgaW5zdGFuY2VvZiBSZWdFeHApIHtcbiAgICAgICAgICByZXR1cm4gaWdub3JlZC50ZXN0KG5lc3RlZFBhdGgpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBuZXN0ZWRQYXRoID09PSBpZ25vcmVkO1xuICAgICAgfSk7XG4gICAgICBpZiAoaGFzTWF0Y2hlcykge1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cbiAgICB9XG4gICAgY29uc3QgcmVzdWx0ID0gZGV0ZWN0TXV0YXRpb25zKGlzSW1tdXRhYmxlLCBpZ25vcmVkUGF0aHMsIHRyYWNrZWRQcm9wZXJ0eS5jaGlsZHJlbltrZXldLCBvYmpba2V5XSwgc2FtZVJlZiwgbmVzdGVkUGF0aCk7XG4gICAgaWYgKHJlc3VsdC53YXNNdXRhdGVkKSB7XG4gICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cbiAgfVxuICByZXR1cm4ge1xuICAgIHdhc011dGF0ZWQ6IGZhbHNlXG4gIH07XG59XG5mdW5jdGlvbiBjcmVhdGVJbW11dGFibGVTdGF0ZUludmFyaWFudE1pZGRsZXdhcmUob3B0aW9ucyA9IHt9KSB7XG4gIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViA9PT0gXCJwcm9kdWN0aW9uXCIpIHtcbiAgICByZXR1cm4gKCkgPT4gKG5leHQpID0+IChhY3Rpb24pID0+IG5leHQoYWN0aW9uKTtcbiAgfSBlbHNlIHtcbiAgICBsZXQgc3RyaW5naWZ5MiA9IGZ1bmN0aW9uKG9iaiwgc2VyaWFsaXplciwgaW5kZW50LCBkZWN5Y2xlcikge1xuICAgICAgcmV0dXJuIEpTT04uc3RyaW5naWZ5KG9iaiwgZ2V0U2VyaWFsaXplMihzZXJpYWxpemVyLCBkZWN5Y2xlciksIGluZGVudCk7XG4gICAgfSwgZ2V0U2VyaWFsaXplMiA9IGZ1bmN0aW9uKHNlcmlhbGl6ZXIsIGRlY3ljbGVyKSB7XG4gICAgICBsZXQgc3RhY2sgPSBbXSwga2V5cyA9IFtdO1xuICAgICAgaWYgKCFkZWN5Y2xlcikgZGVjeWNsZXIgPSBmdW5jdGlvbihfLCB2YWx1ZSkge1xuICAgICAgICBpZiAoc3RhY2tbMF0gPT09IHZhbHVlKSByZXR1cm4gXCJbQ2lyY3VsYXIgfl1cIjtcbiAgICAgICAgcmV0dXJuIFwiW0NpcmN1bGFyIH4uXCIgKyBrZXlzLnNsaWNlKDAsIHN0YWNrLmluZGV4T2YodmFsdWUpKS5qb2luKFwiLlwiKSArIFwiXVwiO1xuICAgICAgfTtcbiAgICAgIHJldHVybiBmdW5jdGlvbihrZXksIHZhbHVlKSB7XG4gICAgICAgIGlmIChzdGFjay5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgdmFyIHRoaXNQb3MgPSBzdGFjay5pbmRleE9mKHRoaXMpO1xuICAgICAgICAgIH50aGlzUG9zID8gc3RhY2suc3BsaWNlKHRoaXNQb3MgKyAxKSA6IHN0YWNrLnB1c2godGhpcyk7XG4gICAgICAgICAgfnRoaXNQb3MgPyBrZXlzLnNwbGljZSh0aGlzUG9zLCBJbmZpbml0eSwga2V5KSA6IGtleXMucHVzaChrZXkpO1xuICAgICAgICAgIGlmICh+c3RhY2suaW5kZXhPZih2YWx1ZSkpIHZhbHVlID0gZGVjeWNsZXIuY2FsbCh0aGlzLCBrZXksIHZhbHVlKTtcbiAgICAgICAgfSBlbHNlIHN0YWNrLnB1c2godmFsdWUpO1xuICAgICAgICByZXR1cm4gc2VyaWFsaXplciA9PSBudWxsID8gdmFsdWUgOiBzZXJpYWxpemVyLmNhbGwodGhpcywga2V5LCB2YWx1ZSk7XG4gICAgICB9O1xuICAgIH07XG4gICAgdmFyIHN0cmluZ2lmeSA9IHN0cmluZ2lmeTIsIGdldFNlcmlhbGl6ZSA9IGdldFNlcmlhbGl6ZTI7XG4gICAgbGV0IHtcbiAgICAgIGlzSW1tdXRhYmxlID0gaXNJbW11dGFibGVEZWZhdWx0LFxuICAgICAgaWdub3JlZFBhdGhzLFxuICAgICAgd2FybkFmdGVyID0gMzJcbiAgICB9ID0gb3B0aW9ucztcbiAgICBjb25zdCB0cmFjayA9IHRyYWNrRm9yTXV0YXRpb25zLmJpbmQobnVsbCwgaXNJbW11dGFibGUsIGlnbm9yZWRQYXRocyk7XG4gICAgcmV0dXJuICh7XG4gICAgICBnZXRTdGF0ZVxuICAgIH0pID0+IHtcbiAgICAgIGxldCBzdGF0ZSA9IGdldFN0YXRlKCk7XG4gICAgICBsZXQgdHJhY2tlciA9IHRyYWNrKHN0YXRlKTtcbiAgICAgIGxldCByZXN1bHQ7XG4gICAgICByZXR1cm4gKG5leHQpID0+IChhY3Rpb24pID0+IHtcbiAgICAgICAgY29uc3QgbWVhc3VyZVV0aWxzID0gZ2V0VGltZU1lYXN1cmVVdGlscyh3YXJuQWZ0ZXIsIFwiSW1tdXRhYmxlU3RhdGVJbnZhcmlhbnRNaWRkbGV3YXJlXCIpO1xuICAgICAgICBtZWFzdXJlVXRpbHMubWVhc3VyZVRpbWUoKCkgPT4ge1xuICAgICAgICAgIHN0YXRlID0gZ2V0U3RhdGUoKTtcbiAgICAgICAgICByZXN1bHQgPSB0cmFja2VyLmRldGVjdE11dGF0aW9ucygpO1xuICAgICAgICAgIHRyYWNrZXIgPSB0cmFjayhzdGF0ZSk7XG4gICAgICAgICAgaWYgKHJlc3VsdC53YXNNdXRhdGVkKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IocHJvY2Vzcy5lbnYuTk9ERV9FTlYgPT09IFwicHJvZHVjdGlvblwiID8gZm9ybWF0UHJvZEVycm9yTWVzc2FnZSgxOSkgOiBgQSBzdGF0ZSBtdXRhdGlvbiB3YXMgZGV0ZWN0ZWQgYmV0d2VlbiBkaXNwYXRjaGVzLCBpbiB0aGUgcGF0aCAnJHtyZXN1bHQucGF0aCB8fCBcIlwifScuICBUaGlzIG1heSBjYXVzZSBpbmNvcnJlY3QgYmVoYXZpb3IuIChodHRwczovL3JlZHV4LmpzLm9yZy9zdHlsZS1ndWlkZS9zdHlsZS1ndWlkZSNkby1ub3QtbXV0YXRlLXN0YXRlKWApO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIGNvbnN0IGRpc3BhdGNoZWRBY3Rpb24gPSBuZXh0KGFjdGlvbik7XG4gICAgICAgIG1lYXN1cmVVdGlscy5tZWFzdXJlVGltZSgoKSA9PiB7XG4gICAgICAgICAgc3RhdGUgPSBnZXRTdGF0ZSgpO1xuICAgICAgICAgIHJlc3VsdCA9IHRyYWNrZXIuZGV0ZWN0TXV0YXRpb25zKCk7XG4gICAgICAgICAgdHJhY2tlciA9IHRyYWNrKHN0YXRlKTtcbiAgICAgICAgICBpZiAocmVzdWx0Lndhc011dGF0ZWQpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihwcm9jZXNzLmVudi5OT0RFX0VOViA9PT0gXCJwcm9kdWN0aW9uXCIgPyBmb3JtYXRQcm9kRXJyb3JNZXNzYWdlKDIwKSA6IGBBIHN0YXRlIG11dGF0aW9uIHdhcyBkZXRlY3RlZCBpbnNpZGUgYSBkaXNwYXRjaCwgaW4gdGhlIHBhdGg6ICR7cmVzdWx0LnBhdGggfHwgXCJcIn0uIFRha2UgYSBsb29rIGF0IHRoZSByZWR1Y2VyKHMpIGhhbmRsaW5nIHRoZSBhY3Rpb24gJHtzdHJpbmdpZnkyKGFjdGlvbil9LiAoaHR0cHM6Ly9yZWR1eC5qcy5vcmcvc3R5bGUtZ3VpZGUvc3R5bGUtZ3VpZGUjZG8tbm90LW11dGF0ZS1zdGF0ZSlgKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgICBtZWFzdXJlVXRpbHMud2FybklmRXhjZWVkZWQoKTtcbiAgICAgICAgcmV0dXJuIGRpc3BhdGNoZWRBY3Rpb247XG4gICAgICB9O1xuICAgIH07XG4gIH1cbn1cblxuLy8gc3JjL3NlcmlhbGl6YWJsZVN0YXRlSW52YXJpYW50TWlkZGxld2FyZS50c1xuaW1wb3J0IHsgaXNBY3Rpb24gYXMgaXNBY3Rpb24yLCBpc1BsYWluT2JqZWN0IH0gZnJvbSBcInJlZHV4XCI7XG5mdW5jdGlvbiBpc1BsYWluKHZhbCkge1xuICBjb25zdCB0eXBlID0gdHlwZW9mIHZhbDtcbiAgcmV0dXJuIHZhbCA9PSBudWxsIHx8IHR5cGUgPT09IFwic3RyaW5nXCIgfHwgdHlwZSA9PT0gXCJib29sZWFuXCIgfHwgdHlwZSA9PT0gXCJudW1iZXJcIiB8fCBBcnJheS5pc0FycmF5KHZhbCkgfHwgaXNQbGFpbk9iamVjdCh2YWwpO1xufVxuZnVuY3Rpb24gZmluZE5vblNlcmlhbGl6YWJsZVZhbHVlKHZhbHVlLCBwYXRoID0gXCJcIiwgaXNTZXJpYWxpemFibGUgPSBpc1BsYWluLCBnZXRFbnRyaWVzLCBpZ25vcmVkUGF0aHMgPSBbXSwgY2FjaGUpIHtcbiAgbGV0IGZvdW5kTmVzdGVkU2VyaWFsaXphYmxlO1xuICBpZiAoIWlzU2VyaWFsaXphYmxlKHZhbHVlKSkge1xuICAgIHJldHVybiB7XG4gICAgICBrZXlQYXRoOiBwYXRoIHx8IFwiPHJvb3Q+XCIsXG4gICAgICB2YWx1ZVxuICAgIH07XG4gIH1cbiAgaWYgKHR5cGVvZiB2YWx1ZSAhPT0gXCJvYmplY3RcIiB8fCB2YWx1ZSA9PT0gbnVsbCkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICBpZiAoY2FjaGU/Lmhhcyh2YWx1ZSkpIHJldHVybiBmYWxzZTtcbiAgY29uc3QgZW50cmllcyA9IGdldEVudHJpZXMgIT0gbnVsbCA/IGdldEVudHJpZXModmFsdWUpIDogT2JqZWN0LmVudHJpZXModmFsdWUpO1xuICBjb25zdCBoYXNJZ25vcmVkUGF0aHMgPSBpZ25vcmVkUGF0aHMubGVuZ3RoID4gMDtcbiAgZm9yIChjb25zdCBba2V5LCBuZXN0ZWRWYWx1ZV0gb2YgZW50cmllcykge1xuICAgIGNvbnN0IG5lc3RlZFBhdGggPSBwYXRoID8gcGF0aCArIFwiLlwiICsga2V5IDoga2V5O1xuICAgIGlmIChoYXNJZ25vcmVkUGF0aHMpIHtcbiAgICAgIGNvbnN0IGhhc01hdGNoZXMgPSBpZ25vcmVkUGF0aHMuc29tZSgoaWdub3JlZCkgPT4ge1xuICAgICAgICBpZiAoaWdub3JlZCBpbnN0YW5jZW9mIFJlZ0V4cCkge1xuICAgICAgICAgIHJldHVybiBpZ25vcmVkLnRlc3QobmVzdGVkUGF0aCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG5lc3RlZFBhdGggPT09IGlnbm9yZWQ7XG4gICAgICB9KTtcbiAgICAgIGlmIChoYXNNYXRjaGVzKSB7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuICAgIH1cbiAgICBpZiAoIWlzU2VyaWFsaXphYmxlKG5lc3RlZFZhbHVlKSkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAga2V5UGF0aDogbmVzdGVkUGF0aCxcbiAgICAgICAgdmFsdWU6IG5lc3RlZFZhbHVlXG4gICAgICB9O1xuICAgIH1cbiAgICBpZiAodHlwZW9mIG5lc3RlZFZhbHVlID09PSBcIm9iamVjdFwiKSB7XG4gICAgICBmb3VuZE5lc3RlZFNlcmlhbGl6YWJsZSA9IGZpbmROb25TZXJpYWxpemFibGVWYWx1ZShuZXN0ZWRWYWx1ZSwgbmVzdGVkUGF0aCwgaXNTZXJpYWxpemFibGUsIGdldEVudHJpZXMsIGlnbm9yZWRQYXRocywgY2FjaGUpO1xuICAgICAgaWYgKGZvdW5kTmVzdGVkU2VyaWFsaXphYmxlKSB7XG4gICAgICAgIHJldHVybiBmb3VuZE5lc3RlZFNlcmlhbGl6YWJsZTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgaWYgKGNhY2hlICYmIGlzTmVzdGVkRnJvemVuKHZhbHVlKSkgY2FjaGUuYWRkKHZhbHVlKTtcbiAgcmV0dXJuIGZhbHNlO1xufVxuZnVuY3Rpb24gaXNOZXN0ZWRGcm96ZW4odmFsdWUpIHtcbiAgaWYgKCFPYmplY3QuaXNGcm96ZW4odmFsdWUpKSByZXR1cm4gZmFsc2U7XG4gIGZvciAoY29uc3QgbmVzdGVkVmFsdWUgb2YgT2JqZWN0LnZhbHVlcyh2YWx1ZSkpIHtcbiAgICBpZiAodHlwZW9mIG5lc3RlZFZhbHVlICE9PSBcIm9iamVjdFwiIHx8IG5lc3RlZFZhbHVlID09PSBudWxsKSBjb250aW51ZTtcbiAgICBpZiAoIWlzTmVzdGVkRnJvemVuKG5lc3RlZFZhbHVlKSkgcmV0dXJuIGZhbHNlO1xuICB9XG4gIHJldHVybiB0cnVlO1xufVxuZnVuY3Rpb24gY3JlYXRlU2VyaWFsaXphYmxlU3RhdGVJbnZhcmlhbnRNaWRkbGV3YXJlKG9wdGlvbnMgPSB7fSkge1xuICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgPT09IFwicHJvZHVjdGlvblwiKSB7XG4gICAgcmV0dXJuICgpID0+IChuZXh0KSA9PiAoYWN0aW9uKSA9PiBuZXh0KGFjdGlvbik7XG4gIH0gZWxzZSB7XG4gICAgY29uc3Qge1xuICAgICAgaXNTZXJpYWxpemFibGUgPSBpc1BsYWluLFxuICAgICAgZ2V0RW50cmllcyxcbiAgICAgIGlnbm9yZWRBY3Rpb25zID0gW10sXG4gICAgICBpZ25vcmVkQWN0aW9uUGF0aHMgPSBbXCJtZXRhLmFyZ1wiLCBcIm1ldGEuYmFzZVF1ZXJ5TWV0YVwiXSxcbiAgICAgIGlnbm9yZWRQYXRocyA9IFtdLFxuICAgICAgd2FybkFmdGVyID0gMzIsXG4gICAgICBpZ25vcmVTdGF0ZSA9IGZhbHNlLFxuICAgICAgaWdub3JlQWN0aW9ucyA9IGZhbHNlLFxuICAgICAgZGlzYWJsZUNhY2hlID0gZmFsc2VcbiAgICB9ID0gb3B0aW9ucztcbiAgICBjb25zdCBjYWNoZSA9ICFkaXNhYmxlQ2FjaGUgJiYgV2Vha1NldCA/IC8qIEBfX1BVUkVfXyAqLyBuZXcgV2Vha1NldCgpIDogdm9pZCAwO1xuICAgIHJldHVybiAoc3RvcmVBUEkpID0+IChuZXh0KSA9PiAoYWN0aW9uKSA9PiB7XG4gICAgICBpZiAoIWlzQWN0aW9uMihhY3Rpb24pKSB7XG4gICAgICAgIHJldHVybiBuZXh0KGFjdGlvbik7XG4gICAgICB9XG4gICAgICBjb25zdCByZXN1bHQgPSBuZXh0KGFjdGlvbik7XG4gICAgICBjb25zdCBtZWFzdXJlVXRpbHMgPSBnZXRUaW1lTWVhc3VyZVV0aWxzKHdhcm5BZnRlciwgXCJTZXJpYWxpemFibGVTdGF0ZUludmFyaWFudE1pZGRsZXdhcmVcIik7XG4gICAgICBpZiAoIWlnbm9yZUFjdGlvbnMgJiYgIShpZ25vcmVkQWN0aW9ucy5sZW5ndGggJiYgaWdub3JlZEFjdGlvbnMuaW5kZXhPZihhY3Rpb24udHlwZSkgIT09IC0xKSkge1xuICAgICAgICBtZWFzdXJlVXRpbHMubWVhc3VyZVRpbWUoKCkgPT4ge1xuICAgICAgICAgIGNvbnN0IGZvdW5kQWN0aW9uTm9uU2VyaWFsaXphYmxlVmFsdWUgPSBmaW5kTm9uU2VyaWFsaXphYmxlVmFsdWUoYWN0aW9uLCBcIlwiLCBpc1NlcmlhbGl6YWJsZSwgZ2V0RW50cmllcywgaWdub3JlZEFjdGlvblBhdGhzLCBjYWNoZSk7XG4gICAgICAgICAgaWYgKGZvdW5kQWN0aW9uTm9uU2VyaWFsaXphYmxlVmFsdWUpIHtcbiAgICAgICAgICAgIGNvbnN0IHtcbiAgICAgICAgICAgICAga2V5UGF0aCxcbiAgICAgICAgICAgICAgdmFsdWVcbiAgICAgICAgICAgIH0gPSBmb3VuZEFjdGlvbk5vblNlcmlhbGl6YWJsZVZhbHVlO1xuICAgICAgICAgICAgY29uc29sZS5lcnJvcihgQSBub24tc2VyaWFsaXphYmxlIHZhbHVlIHdhcyBkZXRlY3RlZCBpbiBhbiBhY3Rpb24sIGluIHRoZSBwYXRoOiBcXGAke2tleVBhdGh9XFxgLiBWYWx1ZTpgLCB2YWx1ZSwgXCJcXG5UYWtlIGEgbG9vayBhdCB0aGUgbG9naWMgdGhhdCBkaXNwYXRjaGVkIHRoaXMgYWN0aW9uOiBcIiwgYWN0aW9uLCBcIlxcbihTZWUgaHR0cHM6Ly9yZWR1eC5qcy5vcmcvZmFxL2FjdGlvbnMjd2h5LXNob3VsZC10eXBlLWJlLWEtc3RyaW5nLW9yLWF0LWxlYXN0LXNlcmlhbGl6YWJsZS13aHktc2hvdWxkLW15LWFjdGlvbi10eXBlcy1iZS1jb25zdGFudHMpXCIsIFwiXFxuKFRvIGFsbG93IG5vbi1zZXJpYWxpemFibGUgdmFsdWVzIHNlZTogaHR0cHM6Ly9yZWR1eC10b29sa2l0LmpzLm9yZy91c2FnZS91c2FnZS1ndWlkZSN3b3JraW5nLXdpdGgtbm9uLXNlcmlhbGl6YWJsZS1kYXRhKVwiKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgICAgaWYgKCFpZ25vcmVTdGF0ZSkge1xuICAgICAgICBtZWFzdXJlVXRpbHMubWVhc3VyZVRpbWUoKCkgPT4ge1xuICAgICAgICAgIGNvbnN0IHN0YXRlID0gc3RvcmVBUEkuZ2V0U3RhdGUoKTtcbiAgICAgICAgICBjb25zdCBmb3VuZFN0YXRlTm9uU2VyaWFsaXphYmxlVmFsdWUgPSBmaW5kTm9uU2VyaWFsaXphYmxlVmFsdWUoc3RhdGUsIFwiXCIsIGlzU2VyaWFsaXphYmxlLCBnZXRFbnRyaWVzLCBpZ25vcmVkUGF0aHMsIGNhY2hlKTtcbiAgICAgICAgICBpZiAoZm91bmRTdGF0ZU5vblNlcmlhbGl6YWJsZVZhbHVlKSB7XG4gICAgICAgICAgICBjb25zdCB7XG4gICAgICAgICAgICAgIGtleVBhdGgsXG4gICAgICAgICAgICAgIHZhbHVlXG4gICAgICAgICAgICB9ID0gZm91bmRTdGF0ZU5vblNlcmlhbGl6YWJsZVZhbHVlO1xuICAgICAgICAgICAgY29uc29sZS5lcnJvcihgQSBub24tc2VyaWFsaXphYmxlIHZhbHVlIHdhcyBkZXRlY3RlZCBpbiB0aGUgc3RhdGUsIGluIHRoZSBwYXRoOiBcXGAke2tleVBhdGh9XFxgLiBWYWx1ZTpgLCB2YWx1ZSwgYFxuVGFrZSBhIGxvb2sgYXQgdGhlIHJlZHVjZXIocykgaGFuZGxpbmcgdGhpcyBhY3Rpb24gdHlwZTogJHthY3Rpb24udHlwZX0uXG4oU2VlIGh0dHBzOi8vcmVkdXguanMub3JnL2ZhcS9vcmdhbml6aW5nLXN0YXRlI2Nhbi1pLXB1dC1mdW5jdGlvbnMtcHJvbWlzZXMtb3Itb3RoZXItbm9uLXNlcmlhbGl6YWJsZS1pdGVtcy1pbi1teS1zdG9yZS1zdGF0ZSlgKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgICBtZWFzdXJlVXRpbHMud2FybklmRXhjZWVkZWQoKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfTtcbiAgfVxufVxuXG4vLyBzcmMvZ2V0RGVmYXVsdE1pZGRsZXdhcmUudHNcbmZ1bmN0aW9uIGlzQm9vbGVhbih4KSB7XG4gIHJldHVybiB0eXBlb2YgeCA9PT0gXCJib29sZWFuXCI7XG59XG52YXIgYnVpbGRHZXREZWZhdWx0TWlkZGxld2FyZSA9ICgpID0+IGZ1bmN0aW9uIGdldERlZmF1bHRNaWRkbGV3YXJlKG9wdGlvbnMpIHtcbiAgY29uc3Qge1xuICAgIHRodW5rID0gdHJ1ZSxcbiAgICBpbW11dGFibGVDaGVjayA9IHRydWUsXG4gICAgc2VyaWFsaXphYmxlQ2hlY2sgPSB0cnVlLFxuICAgIGFjdGlvbkNyZWF0b3JDaGVjayA9IHRydWVcbiAgfSA9IG9wdGlvbnMgPz8ge307XG4gIGxldCBtaWRkbGV3YXJlQXJyYXkgPSBuZXcgVHVwbGUoKTtcbiAgaWYgKHRodW5rKSB7XG4gICAgaWYgKGlzQm9vbGVhbih0aHVuaykpIHtcbiAgICAgIG1pZGRsZXdhcmVBcnJheS5wdXNoKHRodW5rTWlkZGxld2FyZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIG1pZGRsZXdhcmVBcnJheS5wdXNoKHdpdGhFeHRyYUFyZ3VtZW50KHRodW5rLmV4dHJhQXJndW1lbnQpKTtcbiAgICB9XG4gIH1cbiAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIikge1xuICAgIGlmIChpbW11dGFibGVDaGVjaykge1xuICAgICAgbGV0IGltbXV0YWJsZU9wdGlvbnMgPSB7fTtcbiAgICAgIGlmICghaXNCb29sZWFuKGltbXV0YWJsZUNoZWNrKSkge1xuICAgICAgICBpbW11dGFibGVPcHRpb25zID0gaW1tdXRhYmxlQ2hlY2s7XG4gICAgICB9XG4gICAgICBtaWRkbGV3YXJlQXJyYXkudW5zaGlmdChjcmVhdGVJbW11dGFibGVTdGF0ZUludmFyaWFudE1pZGRsZXdhcmUoaW1tdXRhYmxlT3B0aW9ucykpO1xuICAgIH1cbiAgICBpZiAoc2VyaWFsaXphYmxlQ2hlY2spIHtcbiAgICAgIGxldCBzZXJpYWxpemFibGVPcHRpb25zID0ge307XG4gICAgICBpZiAoIWlzQm9vbGVhbihzZXJpYWxpemFibGVDaGVjaykpIHtcbiAgICAgICAgc2VyaWFsaXphYmxlT3B0aW9ucyA9IHNlcmlhbGl6YWJsZUNoZWNrO1xuICAgICAgfVxuICAgICAgbWlkZGxld2FyZUFycmF5LnB1c2goY3JlYXRlU2VyaWFsaXphYmxlU3RhdGVJbnZhcmlhbnRNaWRkbGV3YXJlKHNlcmlhbGl6YWJsZU9wdGlvbnMpKTtcbiAgICB9XG4gICAgaWYgKGFjdGlvbkNyZWF0b3JDaGVjaykge1xuICAgICAgbGV0IGFjdGlvbkNyZWF0b3JPcHRpb25zID0ge307XG4gICAgICBpZiAoIWlzQm9vbGVhbihhY3Rpb25DcmVhdG9yQ2hlY2spKSB7XG4gICAgICAgIGFjdGlvbkNyZWF0b3JPcHRpb25zID0gYWN0aW9uQ3JlYXRvckNoZWNrO1xuICAgICAgfVxuICAgICAgbWlkZGxld2FyZUFycmF5LnVuc2hpZnQoY3JlYXRlQWN0aW9uQ3JlYXRvckludmFyaWFudE1pZGRsZXdhcmUoYWN0aW9uQ3JlYXRvck9wdGlvbnMpKTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIG1pZGRsZXdhcmVBcnJheTtcbn07XG5cbi8vIHNyYy9hdXRvQmF0Y2hFbmhhbmNlci50c1xudmFyIFNIT1VMRF9BVVRPQkFUQ0ggPSBcIlJUS19hdXRvQmF0Y2hcIjtcbnZhciBwcmVwYXJlQXV0b0JhdGNoZWQgPSAoKSA9PiAocGF5bG9hZCkgPT4gKHtcbiAgcGF5bG9hZCxcbiAgbWV0YToge1xuICAgIFtTSE9VTERfQVVUT0JBVENIXTogdHJ1ZVxuICB9XG59KTtcbnZhciBjcmVhdGVRdWV1ZVdpdGhUaW1lciA9ICh0aW1lb3V0KSA9PiB7XG4gIHJldHVybiAobm90aWZ5KSA9PiB7XG4gICAgc2V0VGltZW91dChub3RpZnksIHRpbWVvdXQpO1xuICB9O1xufTtcbnZhciBhdXRvQmF0Y2hFbmhhbmNlciA9IChvcHRpb25zID0ge1xuICB0eXBlOiBcInJhZlwiXG59KSA9PiAobmV4dCkgPT4gKC4uLmFyZ3MpID0+IHtcbiAgY29uc3Qgc3RvcmUgPSBuZXh0KC4uLmFyZ3MpO1xuICBsZXQgbm90aWZ5aW5nID0gdHJ1ZTtcbiAgbGV0IHNob3VsZE5vdGlmeUF0RW5kT2ZUaWNrID0gZmFsc2U7XG4gIGxldCBub3RpZmljYXRpb25RdWV1ZWQgPSBmYWxzZTtcbiAgY29uc3QgbGlzdGVuZXJzID0gLyogQF9fUFVSRV9fICovIG5ldyBTZXQoKTtcbiAgY29uc3QgcXVldWVDYWxsYmFjayA9IG9wdGlvbnMudHlwZSA9PT0gXCJ0aWNrXCIgPyBxdWV1ZU1pY3JvdGFzayA6IG9wdGlvbnMudHlwZSA9PT0gXCJyYWZcIiA/IChcbiAgICAvLyByZXF1ZXN0QW5pbWF0aW9uRnJhbWUgd29uJ3QgZXhpc3QgaW4gU1NSIGVudmlyb25tZW50cy4gRmFsbCBiYWNrIHRvIGEgdmFndWUgYXBwcm94aW1hdGlvbiBqdXN0IHRvIGtlZXAgZnJvbSBlcnJvcmluZy5cbiAgICB0eXBlb2Ygd2luZG93ICE9PSBcInVuZGVmaW5lZFwiICYmIHdpbmRvdy5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUgPyB3aW5kb3cucmVxdWVzdEFuaW1hdGlvbkZyYW1lIDogY3JlYXRlUXVldWVXaXRoVGltZXIoMTApXG4gICkgOiBvcHRpb25zLnR5cGUgPT09IFwiY2FsbGJhY2tcIiA/IG9wdGlvbnMucXVldWVOb3RpZmljYXRpb24gOiBjcmVhdGVRdWV1ZVdpdGhUaW1lcihvcHRpb25zLnRpbWVvdXQpO1xuICBjb25zdCBub3RpZnlMaXN0ZW5lcnMgPSAoKSA9PiB7XG4gICAgbm90aWZpY2F0aW9uUXVldWVkID0gZmFsc2U7XG4gICAgaWYgKHNob3VsZE5vdGlmeUF0RW5kT2ZUaWNrKSB7XG4gICAgICBzaG91bGROb3RpZnlBdEVuZE9mVGljayA9IGZhbHNlO1xuICAgICAgbGlzdGVuZXJzLmZvckVhY2goKGwpID0+IGwoKSk7XG4gICAgfVxuICB9O1xuICByZXR1cm4gT2JqZWN0LmFzc2lnbih7fSwgc3RvcmUsIHtcbiAgICAvLyBPdmVycmlkZSB0aGUgYmFzZSBgc3RvcmUuc3Vic2NyaWJlYCBtZXRob2QgdG8ga2VlcCBvcmlnaW5hbCBsaXN0ZW5lcnNcbiAgICAvLyBmcm9tIHJ1bm5pbmcgaWYgd2UncmUgZGVsYXlpbmcgbm90aWZpY2F0aW9uc1xuICAgIHN1YnNjcmliZShsaXN0ZW5lcjIpIHtcbiAgICAgIGNvbnN0IHdyYXBwZWRMaXN0ZW5lciA9ICgpID0+IG5vdGlmeWluZyAmJiBsaXN0ZW5lcjIoKTtcbiAgICAgIGNvbnN0IHVuc3Vic2NyaWJlID0gc3RvcmUuc3Vic2NyaWJlKHdyYXBwZWRMaXN0ZW5lcik7XG4gICAgICBsaXN0ZW5lcnMuYWRkKGxpc3RlbmVyMik7XG4gICAgICByZXR1cm4gKCkgPT4ge1xuICAgICAgICB1bnN1YnNjcmliZSgpO1xuICAgICAgICBsaXN0ZW5lcnMuZGVsZXRlKGxpc3RlbmVyMik7XG4gICAgICB9O1xuICAgIH0sXG4gICAgLy8gT3ZlcnJpZGUgdGhlIGJhc2UgYHN0b3JlLmRpc3BhdGNoYCBtZXRob2Qgc28gdGhhdCB3ZSBjYW4gY2hlY2sgYWN0aW9uc1xuICAgIC8vIGZvciB0aGUgYHNob3VsZEF1dG9CYXRjaGAgZmxhZyBhbmQgZGV0ZXJtaW5lIGlmIGJhdGNoaW5nIGlzIGFjdGl2ZVxuICAgIGRpc3BhdGNoKGFjdGlvbikge1xuICAgICAgdHJ5IHtcbiAgICAgICAgbm90aWZ5aW5nID0gIWFjdGlvbj8ubWV0YT8uW1NIT1VMRF9BVVRPQkFUQ0hdO1xuICAgICAgICBzaG91bGROb3RpZnlBdEVuZE9mVGljayA9ICFub3RpZnlpbmc7XG4gICAgICAgIGlmIChzaG91bGROb3RpZnlBdEVuZE9mVGljaykge1xuICAgICAgICAgIGlmICghbm90aWZpY2F0aW9uUXVldWVkKSB7XG4gICAgICAgICAgICBub3RpZmljYXRpb25RdWV1ZWQgPSB0cnVlO1xuICAgICAgICAgICAgcXVldWVDYWxsYmFjayhub3RpZnlMaXN0ZW5lcnMpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gc3RvcmUuZGlzcGF0Y2goYWN0aW9uKTtcbiAgICAgIH0gZmluYWxseSB7XG4gICAgICAgIG5vdGlmeWluZyA9IHRydWU7XG4gICAgICB9XG4gICAgfVxuICB9KTtcbn07XG5cbi8vIHNyYy9nZXREZWZhdWx0RW5oYW5jZXJzLnRzXG52YXIgYnVpbGRHZXREZWZhdWx0RW5oYW5jZXJzID0gKG1pZGRsZXdhcmVFbmhhbmNlcikgPT4gZnVuY3Rpb24gZ2V0RGVmYXVsdEVuaGFuY2VycyhvcHRpb25zKSB7XG4gIGNvbnN0IHtcbiAgICBhdXRvQmF0Y2ggPSB0cnVlXG4gIH0gPSBvcHRpb25zID8/IHt9O1xuICBsZXQgZW5oYW5jZXJBcnJheSA9IG5ldyBUdXBsZShtaWRkbGV3YXJlRW5oYW5jZXIpO1xuICBpZiAoYXV0b0JhdGNoKSB7XG4gICAgZW5oYW5jZXJBcnJheS5wdXNoKGF1dG9CYXRjaEVuaGFuY2VyKHR5cGVvZiBhdXRvQmF0Y2ggPT09IFwib2JqZWN0XCIgPyBhdXRvQmF0Y2ggOiB2b2lkIDApKTtcbiAgfVxuICByZXR1cm4gZW5oYW5jZXJBcnJheTtcbn07XG5cbi8vIHNyYy9jb25maWd1cmVTdG9yZS50c1xuZnVuY3Rpb24gY29uZmlndXJlU3RvcmUob3B0aW9ucykge1xuICBjb25zdCBnZXREZWZhdWx0TWlkZGxld2FyZSA9IGJ1aWxkR2V0RGVmYXVsdE1pZGRsZXdhcmUoKTtcbiAgY29uc3Qge1xuICAgIHJlZHVjZXIgPSB2b2lkIDAsXG4gICAgbWlkZGxld2FyZSxcbiAgICBkZXZUb29scyA9IHRydWUsXG4gICAgcHJlbG9hZGVkU3RhdGUgPSB2b2lkIDAsXG4gICAgZW5oYW5jZXJzID0gdm9pZCAwXG4gIH0gPSBvcHRpb25zIHx8IHt9O1xuICBsZXQgcm9vdFJlZHVjZXI7XG4gIGlmICh0eXBlb2YgcmVkdWNlciA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgcm9vdFJlZHVjZXIgPSByZWR1Y2VyO1xuICB9IGVsc2UgaWYgKGlzUGxhaW5PYmplY3QyKHJlZHVjZXIpKSB7XG4gICAgcm9vdFJlZHVjZXIgPSBjb21iaW5lUmVkdWNlcnMocmVkdWNlcik7XG4gIH0gZWxzZSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKHByb2Nlc3MuZW52Lk5PREVfRU5WID09PSBcInByb2R1Y3Rpb25cIiA/IGZvcm1hdFByb2RFcnJvck1lc3NhZ2UoMSkgOiBcImByZWR1Y2VyYCBpcyBhIHJlcXVpcmVkIGFyZ3VtZW50LCBhbmQgbXVzdCBiZSBhIGZ1bmN0aW9uIG9yIGFuIG9iamVjdCBvZiBmdW5jdGlvbnMgdGhhdCBjYW4gYmUgcGFzc2VkIHRvIGNvbWJpbmVSZWR1Y2Vyc1wiKTtcbiAgfVxuICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiICYmIG1pZGRsZXdhcmUgJiYgdHlwZW9mIG1pZGRsZXdhcmUgIT09IFwiZnVuY3Rpb25cIikge1xuICAgIHRocm93IG5ldyBFcnJvcihwcm9jZXNzLmVudi5OT0RFX0VOViA9PT0gXCJwcm9kdWN0aW9uXCIgPyBmb3JtYXRQcm9kRXJyb3JNZXNzYWdlKDIpIDogXCJgbWlkZGxld2FyZWAgZmllbGQgbXVzdCBiZSBhIGNhbGxiYWNrXCIpO1xuICB9XG4gIGxldCBmaW5hbE1pZGRsZXdhcmU7XG4gIGlmICh0eXBlb2YgbWlkZGxld2FyZSA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgZmluYWxNaWRkbGV3YXJlID0gbWlkZGxld2FyZShnZXREZWZhdWx0TWlkZGxld2FyZSk7XG4gICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIiAmJiAhQXJyYXkuaXNBcnJheShmaW5hbE1pZGRsZXdhcmUpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IocHJvY2Vzcy5lbnYuTk9ERV9FTlYgPT09IFwicHJvZHVjdGlvblwiID8gZm9ybWF0UHJvZEVycm9yTWVzc2FnZSgzKSA6IFwid2hlbiB1c2luZyBhIG1pZGRsZXdhcmUgYnVpbGRlciBmdW5jdGlvbiwgYW4gYXJyYXkgb2YgbWlkZGxld2FyZSBtdXN0IGJlIHJldHVybmVkXCIpO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICBmaW5hbE1pZGRsZXdhcmUgPSBnZXREZWZhdWx0TWlkZGxld2FyZSgpO1xuICB9XG4gIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIgJiYgZmluYWxNaWRkbGV3YXJlLnNvbWUoKGl0ZW0pID0+IHR5cGVvZiBpdGVtICE9PSBcImZ1bmN0aW9uXCIpKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKHByb2Nlc3MuZW52Lk5PREVfRU5WID09PSBcInByb2R1Y3Rpb25cIiA/IGZvcm1hdFByb2RFcnJvck1lc3NhZ2UoNCkgOiBcImVhY2ggbWlkZGxld2FyZSBwcm92aWRlZCB0byBjb25maWd1cmVTdG9yZSBtdXN0IGJlIGEgZnVuY3Rpb25cIik7XG4gIH1cbiAgbGV0IGZpbmFsQ29tcG9zZSA9IGNvbXBvc2UyO1xuICBpZiAoZGV2VG9vbHMpIHtcbiAgICBmaW5hbENvbXBvc2UgPSBjb21wb3NlV2l0aERldlRvb2xzKHtcbiAgICAgIC8vIEVuYWJsZSBjYXB0dXJlIG9mIHN0YWNrIHRyYWNlcyBmb3IgZGlzcGF0Y2hlZCBSZWR1eCBhY3Rpb25zXG4gICAgICB0cmFjZTogcHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiLFxuICAgICAgLi4udHlwZW9mIGRldlRvb2xzID09PSBcIm9iamVjdFwiICYmIGRldlRvb2xzXG4gICAgfSk7XG4gIH1cbiAgY29uc3QgbWlkZGxld2FyZUVuaGFuY2VyID0gYXBwbHlNaWRkbGV3YXJlKC4uLmZpbmFsTWlkZGxld2FyZSk7XG4gIGNvbnN0IGdldERlZmF1bHRFbmhhbmNlcnMgPSBidWlsZEdldERlZmF1bHRFbmhhbmNlcnMobWlkZGxld2FyZUVuaGFuY2VyKTtcbiAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIiAmJiBlbmhhbmNlcnMgJiYgdHlwZW9mIGVuaGFuY2VycyAhPT0gXCJmdW5jdGlvblwiKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKHByb2Nlc3MuZW52Lk5PREVfRU5WID09PSBcInByb2R1Y3Rpb25cIiA/IGZvcm1hdFByb2RFcnJvck1lc3NhZ2UoNSkgOiBcImBlbmhhbmNlcnNgIGZpZWxkIG11c3QgYmUgYSBjYWxsYmFja1wiKTtcbiAgfVxuICBsZXQgc3RvcmVFbmhhbmNlcnMgPSB0eXBlb2YgZW5oYW5jZXJzID09PSBcImZ1bmN0aW9uXCIgPyBlbmhhbmNlcnMoZ2V0RGVmYXVsdEVuaGFuY2VycykgOiBnZXREZWZhdWx0RW5oYW5jZXJzKCk7XG4gIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIgJiYgIUFycmF5LmlzQXJyYXkoc3RvcmVFbmhhbmNlcnMpKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKHByb2Nlc3MuZW52Lk5PREVfRU5WID09PSBcInByb2R1Y3Rpb25cIiA/IGZvcm1hdFByb2RFcnJvck1lc3NhZ2UoNikgOiBcImBlbmhhbmNlcnNgIGNhbGxiYWNrIG11c3QgcmV0dXJuIGFuIGFycmF5XCIpO1xuICB9XG4gIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIgJiYgc3RvcmVFbmhhbmNlcnMuc29tZSgoaXRlbSkgPT4gdHlwZW9mIGl0ZW0gIT09IFwiZnVuY3Rpb25cIikpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IocHJvY2Vzcy5lbnYuTk9ERV9FTlYgPT09IFwicHJvZHVjdGlvblwiID8gZm9ybWF0UHJvZEVycm9yTWVzc2FnZSg3KSA6IFwiZWFjaCBlbmhhbmNlciBwcm92aWRlZCB0byBjb25maWd1cmVTdG9yZSBtdXN0IGJlIGEgZnVuY3Rpb25cIik7XG4gIH1cbiAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIiAmJiBmaW5hbE1pZGRsZXdhcmUubGVuZ3RoICYmICFzdG9yZUVuaGFuY2Vycy5pbmNsdWRlcyhtaWRkbGV3YXJlRW5oYW5jZXIpKSB7XG4gICAgY29uc29sZS5lcnJvcihcIm1pZGRsZXdhcmVzIHdlcmUgcHJvdmlkZWQsIGJ1dCBtaWRkbGV3YXJlIGVuaGFuY2VyIHdhcyBub3QgaW5jbHVkZWQgaW4gZmluYWwgZW5oYW5jZXJzIC0gbWFrZSBzdXJlIHRvIGNhbGwgYGdldERlZmF1bHRFbmhhbmNlcnNgXCIpO1xuICB9XG4gIGNvbnN0IGNvbXBvc2VkRW5oYW5jZXIgPSBmaW5hbENvbXBvc2UoLi4uc3RvcmVFbmhhbmNlcnMpO1xuICByZXR1cm4gY3JlYXRlU3RvcmUocm9vdFJlZHVjZXIsIHByZWxvYWRlZFN0YXRlLCBjb21wb3NlZEVuaGFuY2VyKTtcbn1cblxuLy8gc3JjL2NyZWF0ZVJlZHVjZXIudHNcbmltcG9ydCB7IHByb2R1Y2UgYXMgY3JlYXRlTmV4dFN0YXRlMiwgaXNEcmFmdCBhcyBpc0RyYWZ0MiwgaXNEcmFmdGFibGUgYXMgaXNEcmFmdGFibGUyIH0gZnJvbSBcImltbWVyXCI7XG5cbi8vIHNyYy9tYXBCdWlsZGVycy50c1xuZnVuY3Rpb24gZXhlY3V0ZVJlZHVjZXJCdWlsZGVyQ2FsbGJhY2soYnVpbGRlckNhbGxiYWNrKSB7XG4gIGNvbnN0IGFjdGlvbnNNYXAgPSB7fTtcbiAgY29uc3QgYWN0aW9uTWF0Y2hlcnMgPSBbXTtcbiAgbGV0IGRlZmF1bHRDYXNlUmVkdWNlcjtcbiAgY29uc3QgYnVpbGRlciA9IHtcbiAgICBhZGRDYXNlKHR5cGVPckFjdGlvbkNyZWF0b3IsIHJlZHVjZXIpIHtcbiAgICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIpIHtcbiAgICAgICAgaWYgKGFjdGlvbk1hdGNoZXJzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IocHJvY2Vzcy5lbnYuTk9ERV9FTlYgPT09IFwicHJvZHVjdGlvblwiID8gZm9ybWF0UHJvZEVycm9yTWVzc2FnZSgyNikgOiBcImBidWlsZGVyLmFkZENhc2VgIHNob3VsZCBvbmx5IGJlIGNhbGxlZCBiZWZvcmUgY2FsbGluZyBgYnVpbGRlci5hZGRNYXRjaGVyYFwiKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoZGVmYXVsdENhc2VSZWR1Y2VyKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKHByb2Nlc3MuZW52Lk5PREVfRU5WID09PSBcInByb2R1Y3Rpb25cIiA/IGZvcm1hdFByb2RFcnJvck1lc3NhZ2UoMjcpIDogXCJgYnVpbGRlci5hZGRDYXNlYCBzaG91bGQgb25seSBiZSBjYWxsZWQgYmVmb3JlIGNhbGxpbmcgYGJ1aWxkZXIuYWRkRGVmYXVsdENhc2VgXCIpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBjb25zdCB0eXBlID0gdHlwZW9mIHR5cGVPckFjdGlvbkNyZWF0b3IgPT09IFwic3RyaW5nXCIgPyB0eXBlT3JBY3Rpb25DcmVhdG9yIDogdHlwZU9yQWN0aW9uQ3JlYXRvci50eXBlO1xuICAgICAgaWYgKCF0eXBlKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihwcm9jZXNzLmVudi5OT0RFX0VOViA9PT0gXCJwcm9kdWN0aW9uXCIgPyBmb3JtYXRQcm9kRXJyb3JNZXNzYWdlKDI4KSA6IFwiYGJ1aWxkZXIuYWRkQ2FzZWAgY2Fubm90IGJlIGNhbGxlZCB3aXRoIGFuIGVtcHR5IGFjdGlvbiB0eXBlXCIpO1xuICAgICAgfVxuICAgICAgaWYgKHR5cGUgaW4gYWN0aW9uc01hcCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IocHJvY2Vzcy5lbnYuTk9ERV9FTlYgPT09IFwicHJvZHVjdGlvblwiID8gZm9ybWF0UHJvZEVycm9yTWVzc2FnZSgyOSkgOiBgXFxgYnVpbGRlci5hZGRDYXNlXFxgIGNhbm5vdCBiZSBjYWxsZWQgd2l0aCB0d28gcmVkdWNlcnMgZm9yIHRoZSBzYW1lIGFjdGlvbiB0eXBlICcke3R5cGV9J2ApO1xuICAgICAgfVxuICAgICAgYWN0aW9uc01hcFt0eXBlXSA9IHJlZHVjZXI7XG4gICAgICByZXR1cm4gYnVpbGRlcjtcbiAgICB9LFxuICAgIGFkZE1hdGNoZXIobWF0Y2hlciwgcmVkdWNlcikge1xuICAgICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIikge1xuICAgICAgICBpZiAoZGVmYXVsdENhc2VSZWR1Y2VyKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKHByb2Nlc3MuZW52Lk5PREVfRU5WID09PSBcInByb2R1Y3Rpb25cIiA/IGZvcm1hdFByb2RFcnJvck1lc3NhZ2UoMzApIDogXCJgYnVpbGRlci5hZGRNYXRjaGVyYCBzaG91bGQgb25seSBiZSBjYWxsZWQgYmVmb3JlIGNhbGxpbmcgYGJ1aWxkZXIuYWRkRGVmYXVsdENhc2VgXCIpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBhY3Rpb25NYXRjaGVycy5wdXNoKHtcbiAgICAgICAgbWF0Y2hlcixcbiAgICAgICAgcmVkdWNlclxuICAgICAgfSk7XG4gICAgICByZXR1cm4gYnVpbGRlcjtcbiAgICB9LFxuICAgIGFkZERlZmF1bHRDYXNlKHJlZHVjZXIpIHtcbiAgICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIpIHtcbiAgICAgICAgaWYgKGRlZmF1bHRDYXNlUmVkdWNlcikge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihwcm9jZXNzLmVudi5OT0RFX0VOViA9PT0gXCJwcm9kdWN0aW9uXCIgPyBmb3JtYXRQcm9kRXJyb3JNZXNzYWdlKDMxKSA6IFwiYGJ1aWxkZXIuYWRkRGVmYXVsdENhc2VgIGNhbiBvbmx5IGJlIGNhbGxlZCBvbmNlXCIpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBkZWZhdWx0Q2FzZVJlZHVjZXIgPSByZWR1Y2VyO1xuICAgICAgcmV0dXJuIGJ1aWxkZXI7XG4gICAgfVxuICB9O1xuICBidWlsZGVyQ2FsbGJhY2soYnVpbGRlcik7XG4gIHJldHVybiBbYWN0aW9uc01hcCwgYWN0aW9uTWF0Y2hlcnMsIGRlZmF1bHRDYXNlUmVkdWNlcl07XG59XG5cbi8vIHNyYy9jcmVhdGVSZWR1Y2VyLnRzXG5mdW5jdGlvbiBpc1N0YXRlRnVuY3Rpb24oeCkge1xuICByZXR1cm4gdHlwZW9mIHggPT09IFwiZnVuY3Rpb25cIjtcbn1cbmZ1bmN0aW9uIGNyZWF0ZVJlZHVjZXIoaW5pdGlhbFN0YXRlLCBtYXBPckJ1aWxkZXJDYWxsYmFjaykge1xuICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiKSB7XG4gICAgaWYgKHR5cGVvZiBtYXBPckJ1aWxkZXJDYWxsYmFjayA9PT0gXCJvYmplY3RcIikge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKHByb2Nlc3MuZW52Lk5PREVfRU5WID09PSBcInByb2R1Y3Rpb25cIiA/IGZvcm1hdFByb2RFcnJvck1lc3NhZ2UoOCkgOiBcIlRoZSBvYmplY3Qgbm90YXRpb24gZm9yIGBjcmVhdGVSZWR1Y2VyYCBoYXMgYmVlbiByZW1vdmVkLiBQbGVhc2UgdXNlIHRoZSAnYnVpbGRlciBjYWxsYmFjaycgbm90YXRpb24gaW5zdGVhZDogaHR0cHM6Ly9yZWR1eC10b29sa2l0LmpzLm9yZy9hcGkvY3JlYXRlUmVkdWNlclwiKTtcbiAgICB9XG4gIH1cbiAgbGV0IFthY3Rpb25zTWFwLCBmaW5hbEFjdGlvbk1hdGNoZXJzLCBmaW5hbERlZmF1bHRDYXNlUmVkdWNlcl0gPSBleGVjdXRlUmVkdWNlckJ1aWxkZXJDYWxsYmFjayhtYXBPckJ1aWxkZXJDYWxsYmFjayk7XG4gIGxldCBnZXRJbml0aWFsU3RhdGU7XG4gIGlmIChpc1N0YXRlRnVuY3Rpb24oaW5pdGlhbFN0YXRlKSkge1xuICAgIGdldEluaXRpYWxTdGF0ZSA9ICgpID0+IGZyZWV6ZURyYWZ0YWJsZShpbml0aWFsU3RhdGUoKSk7XG4gIH0gZWxzZSB7XG4gICAgY29uc3QgZnJvemVuSW5pdGlhbFN0YXRlID0gZnJlZXplRHJhZnRhYmxlKGluaXRpYWxTdGF0ZSk7XG4gICAgZ2V0SW5pdGlhbFN0YXRlID0gKCkgPT4gZnJvemVuSW5pdGlhbFN0YXRlO1xuICB9XG4gIGZ1bmN0aW9uIHJlZHVjZXIoc3RhdGUgPSBnZXRJbml0aWFsU3RhdGUoKSwgYWN0aW9uKSB7XG4gICAgbGV0IGNhc2VSZWR1Y2VycyA9IFthY3Rpb25zTWFwW2FjdGlvbi50eXBlXSwgLi4uZmluYWxBY3Rpb25NYXRjaGVycy5maWx0ZXIoKHtcbiAgICAgIG1hdGNoZXJcbiAgICB9KSA9PiBtYXRjaGVyKGFjdGlvbikpLm1hcCgoe1xuICAgICAgcmVkdWNlcjogcmVkdWNlcjJcbiAgICB9KSA9PiByZWR1Y2VyMildO1xuICAgIGlmIChjYXNlUmVkdWNlcnMuZmlsdGVyKChjcikgPT4gISFjcikubGVuZ3RoID09PSAwKSB7XG4gICAgICBjYXNlUmVkdWNlcnMgPSBbZmluYWxEZWZhdWx0Q2FzZVJlZHVjZXJdO1xuICAgIH1cbiAgICByZXR1cm4gY2FzZVJlZHVjZXJzLnJlZHVjZSgocHJldmlvdXNTdGF0ZSwgY2FzZVJlZHVjZXIpID0+IHtcbiAgICAgIGlmIChjYXNlUmVkdWNlcikge1xuICAgICAgICBpZiAoaXNEcmFmdDIocHJldmlvdXNTdGF0ZSkpIHtcbiAgICAgICAgICBjb25zdCBkcmFmdCA9IHByZXZpb3VzU3RhdGU7XG4gICAgICAgICAgY29uc3QgcmVzdWx0ID0gY2FzZVJlZHVjZXIoZHJhZnQsIGFjdGlvbik7XG4gICAgICAgICAgaWYgKHJlc3VsdCA9PT0gdm9pZCAwKSB7XG4gICAgICAgICAgICByZXR1cm4gcHJldmlvdXNTdGF0ZTtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICAgICAgfSBlbHNlIGlmICghaXNEcmFmdGFibGUyKHByZXZpb3VzU3RhdGUpKSB7XG4gICAgICAgICAgY29uc3QgcmVzdWx0ID0gY2FzZVJlZHVjZXIocHJldmlvdXNTdGF0ZSwgYWN0aW9uKTtcbiAgICAgICAgICBpZiAocmVzdWx0ID09PSB2b2lkIDApIHtcbiAgICAgICAgICAgIGlmIChwcmV2aW91c1N0YXRlID09PSBudWxsKSB7XG4gICAgICAgICAgICAgIHJldHVybiBwcmV2aW91c1N0YXRlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhyb3cgRXJyb3IoXCJBIGNhc2UgcmVkdWNlciBvbiBhIG5vbi1kcmFmdGFibGUgdmFsdWUgbXVzdCBub3QgcmV0dXJuIHVuZGVmaW5lZFwiKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXR1cm4gY3JlYXRlTmV4dFN0YXRlMihwcmV2aW91c1N0YXRlLCAoZHJhZnQpID0+IHtcbiAgICAgICAgICAgIHJldHVybiBjYXNlUmVkdWNlcihkcmFmdCwgYWN0aW9uKTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIHByZXZpb3VzU3RhdGU7XG4gICAgfSwgc3RhdGUpO1xuICB9XG4gIHJlZHVjZXIuZ2V0SW5pdGlhbFN0YXRlID0gZ2V0SW5pdGlhbFN0YXRlO1xuICByZXR1cm4gcmVkdWNlcjtcbn1cblxuLy8gc3JjL21hdGNoZXJzLnRzXG52YXIgbWF0Y2hlcyA9IChtYXRjaGVyLCBhY3Rpb24pID0+IHtcbiAgaWYgKGhhc01hdGNoRnVuY3Rpb24obWF0Y2hlcikpIHtcbiAgICByZXR1cm4gbWF0Y2hlci5tYXRjaChhY3Rpb24pO1xuICB9IGVsc2Uge1xuICAgIHJldHVybiBtYXRjaGVyKGFjdGlvbik7XG4gIH1cbn07XG5mdW5jdGlvbiBpc0FueU9mKC4uLm1hdGNoZXJzKSB7XG4gIHJldHVybiAoYWN0aW9uKSA9PiB7XG4gICAgcmV0dXJuIG1hdGNoZXJzLnNvbWUoKG1hdGNoZXIpID0+IG1hdGNoZXMobWF0Y2hlciwgYWN0aW9uKSk7XG4gIH07XG59XG5mdW5jdGlvbiBpc0FsbE9mKC4uLm1hdGNoZXJzKSB7XG4gIHJldHVybiAoYWN0aW9uKSA9PiB7XG4gICAgcmV0dXJuIG1hdGNoZXJzLmV2ZXJ5KChtYXRjaGVyKSA9PiBtYXRjaGVzKG1hdGNoZXIsIGFjdGlvbikpO1xuICB9O1xufVxuZnVuY3Rpb24gaGFzRXhwZWN0ZWRSZXF1ZXN0TWV0YWRhdGEoYWN0aW9uLCB2YWxpZFN0YXR1cykge1xuICBpZiAoIWFjdGlvbiB8fCAhYWN0aW9uLm1ldGEpIHJldHVybiBmYWxzZTtcbiAgY29uc3QgaGFzVmFsaWRSZXF1ZXN0SWQgPSB0eXBlb2YgYWN0aW9uLm1ldGEucmVxdWVzdElkID09PSBcInN0cmluZ1wiO1xuICBjb25zdCBoYXNWYWxpZFJlcXVlc3RTdGF0dXMgPSB2YWxpZFN0YXR1cy5pbmRleE9mKGFjdGlvbi5tZXRhLnJlcXVlc3RTdGF0dXMpID4gLTE7XG4gIHJldHVybiBoYXNWYWxpZFJlcXVlc3RJZCAmJiBoYXNWYWxpZFJlcXVlc3RTdGF0dXM7XG59XG5mdW5jdGlvbiBpc0FzeW5jVGh1bmtBcnJheShhKSB7XG4gIHJldHVybiB0eXBlb2YgYVswXSA9PT0gXCJmdW5jdGlvblwiICYmIFwicGVuZGluZ1wiIGluIGFbMF0gJiYgXCJmdWxmaWxsZWRcIiBpbiBhWzBdICYmIFwicmVqZWN0ZWRcIiBpbiBhWzBdO1xufVxuZnVuY3Rpb24gaXNQZW5kaW5nKC4uLmFzeW5jVGh1bmtzKSB7XG4gIGlmIChhc3luY1RodW5rcy5sZW5ndGggPT09IDApIHtcbiAgICByZXR1cm4gKGFjdGlvbikgPT4gaGFzRXhwZWN0ZWRSZXF1ZXN0TWV0YWRhdGEoYWN0aW9uLCBbXCJwZW5kaW5nXCJdKTtcbiAgfVxuICBpZiAoIWlzQXN5bmNUaHVua0FycmF5KGFzeW5jVGh1bmtzKSkge1xuICAgIHJldHVybiBpc1BlbmRpbmcoKShhc3luY1RodW5rc1swXSk7XG4gIH1cbiAgcmV0dXJuIGlzQW55T2YoLi4uYXN5bmNUaHVua3MubWFwKChhc3luY1RodW5rKSA9PiBhc3luY1RodW5rLnBlbmRpbmcpKTtcbn1cbmZ1bmN0aW9uIGlzUmVqZWN0ZWQoLi4uYXN5bmNUaHVua3MpIHtcbiAgaWYgKGFzeW5jVGh1bmtzLmxlbmd0aCA9PT0gMCkge1xuICAgIHJldHVybiAoYWN0aW9uKSA9PiBoYXNFeHBlY3RlZFJlcXVlc3RNZXRhZGF0YShhY3Rpb24sIFtcInJlamVjdGVkXCJdKTtcbiAgfVxuICBpZiAoIWlzQXN5bmNUaHVua0FycmF5KGFzeW5jVGh1bmtzKSkge1xuICAgIHJldHVybiBpc1JlamVjdGVkKCkoYXN5bmNUaHVua3NbMF0pO1xuICB9XG4gIHJldHVybiBpc0FueU9mKC4uLmFzeW5jVGh1bmtzLm1hcCgoYXN5bmNUaHVuaykgPT4gYXN5bmNUaHVuay5yZWplY3RlZCkpO1xufVxuZnVuY3Rpb24gaXNSZWplY3RlZFdpdGhWYWx1ZSguLi5hc3luY1RodW5rcykge1xuICBjb25zdCBoYXNGbGFnID0gKGFjdGlvbikgPT4ge1xuICAgIHJldHVybiBhY3Rpb24gJiYgYWN0aW9uLm1ldGEgJiYgYWN0aW9uLm1ldGEucmVqZWN0ZWRXaXRoVmFsdWU7XG4gIH07XG4gIGlmIChhc3luY1RodW5rcy5sZW5ndGggPT09IDApIHtcbiAgICByZXR1cm4gaXNBbGxPZihpc1JlamVjdGVkKC4uLmFzeW5jVGh1bmtzKSwgaGFzRmxhZyk7XG4gIH1cbiAgaWYgKCFpc0FzeW5jVGh1bmtBcnJheShhc3luY1RodW5rcykpIHtcbiAgICByZXR1cm4gaXNSZWplY3RlZFdpdGhWYWx1ZSgpKGFzeW5jVGh1bmtzWzBdKTtcbiAgfVxuICByZXR1cm4gaXNBbGxPZihpc1JlamVjdGVkKC4uLmFzeW5jVGh1bmtzKSwgaGFzRmxhZyk7XG59XG5mdW5jdGlvbiBpc0Z1bGZpbGxlZCguLi5hc3luY1RodW5rcykge1xuICBpZiAoYXN5bmNUaHVua3MubGVuZ3RoID09PSAwKSB7XG4gICAgcmV0dXJuIChhY3Rpb24pID0+IGhhc0V4cGVjdGVkUmVxdWVzdE1ldGFkYXRhKGFjdGlvbiwgW1wiZnVsZmlsbGVkXCJdKTtcbiAgfVxuICBpZiAoIWlzQXN5bmNUaHVua0FycmF5KGFzeW5jVGh1bmtzKSkge1xuICAgIHJldHVybiBpc0Z1bGZpbGxlZCgpKGFzeW5jVGh1bmtzWzBdKTtcbiAgfVxuICByZXR1cm4gaXNBbnlPZiguLi5hc3luY1RodW5rcy5tYXAoKGFzeW5jVGh1bmspID0+IGFzeW5jVGh1bmsuZnVsZmlsbGVkKSk7XG59XG5mdW5jdGlvbiBpc0FzeW5jVGh1bmtBY3Rpb24oLi4uYXN5bmNUaHVua3MpIHtcbiAgaWYgKGFzeW5jVGh1bmtzLmxlbmd0aCA9PT0gMCkge1xuICAgIHJldHVybiAoYWN0aW9uKSA9PiBoYXNFeHBlY3RlZFJlcXVlc3RNZXRhZGF0YShhY3Rpb24sIFtcInBlbmRpbmdcIiwgXCJmdWxmaWxsZWRcIiwgXCJyZWplY3RlZFwiXSk7XG4gIH1cbiAgaWYgKCFpc0FzeW5jVGh1bmtBcnJheShhc3luY1RodW5rcykpIHtcbiAgICByZXR1cm4gaXNBc3luY1RodW5rQWN0aW9uKCkoYXN5bmNUaHVua3NbMF0pO1xuICB9XG4gIHJldHVybiBpc0FueU9mKC4uLmFzeW5jVGh1bmtzLmZsYXRNYXAoKGFzeW5jVGh1bmspID0+IFthc3luY1RodW5rLnBlbmRpbmcsIGFzeW5jVGh1bmsucmVqZWN0ZWQsIGFzeW5jVGh1bmsuZnVsZmlsbGVkXSkpO1xufVxuXG4vLyBzcmMvbmFub2lkLnRzXG52YXIgdXJsQWxwaGFiZXQgPSBcIk1vZHVsZVN5bWJoYXNPd25Qci0wMTIzNDU2Nzg5QUJDREVGR0hOUlZmZ2N0aVV2el9LcVlUSmtMeHBaWElqUVdcIjtcbnZhciBuYW5vaWQgPSAoc2l6ZSA9IDIxKSA9PiB7XG4gIGxldCBpZCA9IFwiXCI7XG4gIGxldCBpID0gc2l6ZTtcbiAgd2hpbGUgKGktLSkge1xuICAgIGlkICs9IHVybEFscGhhYmV0W01hdGgucmFuZG9tKCkgKiA2NCB8IDBdO1xuICB9XG4gIHJldHVybiBpZDtcbn07XG5cbi8vIHNyYy9jcmVhdGVBc3luY1RodW5rLnRzXG52YXIgY29tbW9uUHJvcGVydGllcyA9IFtcIm5hbWVcIiwgXCJtZXNzYWdlXCIsIFwic3RhY2tcIiwgXCJjb2RlXCJdO1xudmFyIFJlamVjdFdpdGhWYWx1ZSA9IGNsYXNzIHtcbiAgY29uc3RydWN0b3IocGF5bG9hZCwgbWV0YSkge1xuICAgIHRoaXMucGF5bG9hZCA9IHBheWxvYWQ7XG4gICAgdGhpcy5tZXRhID0gbWV0YTtcbiAgfVxuICAvKlxuICB0eXBlLW9ubHkgcHJvcGVydHkgdG8gZGlzdGluZ3Vpc2ggYmV0d2VlbiBSZWplY3RXaXRoVmFsdWUgYW5kIEZ1bGZpbGxXaXRoTWV0YVxuICBkb2VzIG5vdCBleGlzdCBhdCBydW50aW1lXG4gICovXG4gIF90eXBlO1xufTtcbnZhciBGdWxmaWxsV2l0aE1ldGEgPSBjbGFzcyB7XG4gIGNvbnN0cnVjdG9yKHBheWxvYWQsIG1ldGEpIHtcbiAgICB0aGlzLnBheWxvYWQgPSBwYXlsb2FkO1xuICAgIHRoaXMubWV0YSA9IG1ldGE7XG4gIH1cbiAgLypcbiAgdHlwZS1vbmx5IHByb3BlcnR5IHRvIGRpc3Rpbmd1aXNoIGJldHdlZW4gUmVqZWN0V2l0aFZhbHVlIGFuZCBGdWxmaWxsV2l0aE1ldGFcbiAgZG9lcyBub3QgZXhpc3QgYXQgcnVudGltZVxuICAqL1xuICBfdHlwZTtcbn07XG52YXIgbWluaVNlcmlhbGl6ZUVycm9yID0gKHZhbHVlKSA9PiB7XG4gIGlmICh0eXBlb2YgdmFsdWUgPT09IFwib2JqZWN0XCIgJiYgdmFsdWUgIT09IG51bGwpIHtcbiAgICBjb25zdCBzaW1wbGVFcnJvciA9IHt9O1xuICAgIGZvciAoY29uc3QgcHJvcGVydHkgb2YgY29tbW9uUHJvcGVydGllcykge1xuICAgICAgaWYgKHR5cGVvZiB2YWx1ZVtwcm9wZXJ0eV0gPT09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgc2ltcGxlRXJyb3JbcHJvcGVydHldID0gdmFsdWVbcHJvcGVydHldO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gc2ltcGxlRXJyb3I7XG4gIH1cbiAgcmV0dXJuIHtcbiAgICBtZXNzYWdlOiBTdHJpbmcodmFsdWUpXG4gIH07XG59O1xudmFyIGNyZWF0ZUFzeW5jVGh1bmsgPSAvKiBAX19QVVJFX18gKi8gKCgpID0+IHtcbiAgZnVuY3Rpb24gY3JlYXRlQXN5bmNUaHVuazIodHlwZVByZWZpeCwgcGF5bG9hZENyZWF0b3IsIG9wdGlvbnMpIHtcbiAgICBjb25zdCBmdWxmaWxsZWQgPSBjcmVhdGVBY3Rpb24odHlwZVByZWZpeCArIFwiL2Z1bGZpbGxlZFwiLCAocGF5bG9hZCwgcmVxdWVzdElkLCBhcmcsIG1ldGEpID0+ICh7XG4gICAgICBwYXlsb2FkLFxuICAgICAgbWV0YToge1xuICAgICAgICAuLi5tZXRhIHx8IHt9LFxuICAgICAgICBhcmcsXG4gICAgICAgIHJlcXVlc3RJZCxcbiAgICAgICAgcmVxdWVzdFN0YXR1czogXCJmdWxmaWxsZWRcIlxuICAgICAgfVxuICAgIH0pKTtcbiAgICBjb25zdCBwZW5kaW5nID0gY3JlYXRlQWN0aW9uKHR5cGVQcmVmaXggKyBcIi9wZW5kaW5nXCIsIChyZXF1ZXN0SWQsIGFyZywgbWV0YSkgPT4gKHtcbiAgICAgIHBheWxvYWQ6IHZvaWQgMCxcbiAgICAgIG1ldGE6IHtcbiAgICAgICAgLi4ubWV0YSB8fCB7fSxcbiAgICAgICAgYXJnLFxuICAgICAgICByZXF1ZXN0SWQsXG4gICAgICAgIHJlcXVlc3RTdGF0dXM6IFwicGVuZGluZ1wiXG4gICAgICB9XG4gICAgfSkpO1xuICAgIGNvbnN0IHJlamVjdGVkID0gY3JlYXRlQWN0aW9uKHR5cGVQcmVmaXggKyBcIi9yZWplY3RlZFwiLCAoZXJyb3IsIHJlcXVlc3RJZCwgYXJnLCBwYXlsb2FkLCBtZXRhKSA9PiAoe1xuICAgICAgcGF5bG9hZCxcbiAgICAgIGVycm9yOiAob3B0aW9ucyAmJiBvcHRpb25zLnNlcmlhbGl6ZUVycm9yIHx8IG1pbmlTZXJpYWxpemVFcnJvcikoZXJyb3IgfHwgXCJSZWplY3RlZFwiKSxcbiAgICAgIG1ldGE6IHtcbiAgICAgICAgLi4ubWV0YSB8fCB7fSxcbiAgICAgICAgYXJnLFxuICAgICAgICByZXF1ZXN0SWQsXG4gICAgICAgIHJlamVjdGVkV2l0aFZhbHVlOiAhIXBheWxvYWQsXG4gICAgICAgIHJlcXVlc3RTdGF0dXM6IFwicmVqZWN0ZWRcIixcbiAgICAgICAgYWJvcnRlZDogZXJyb3I/Lm5hbWUgPT09IFwiQWJvcnRFcnJvclwiLFxuICAgICAgICBjb25kaXRpb246IGVycm9yPy5uYW1lID09PSBcIkNvbmRpdGlvbkVycm9yXCJcbiAgICAgIH1cbiAgICB9KSk7XG4gICAgZnVuY3Rpb24gYWN0aW9uQ3JlYXRvcihhcmcpIHtcbiAgICAgIHJldHVybiAoZGlzcGF0Y2gsIGdldFN0YXRlLCBleHRyYSkgPT4ge1xuICAgICAgICBjb25zdCByZXF1ZXN0SWQgPSBvcHRpb25zPy5pZEdlbmVyYXRvciA/IG9wdGlvbnMuaWRHZW5lcmF0b3IoYXJnKSA6IG5hbm9pZCgpO1xuICAgICAgICBjb25zdCBhYm9ydENvbnRyb2xsZXIgPSBuZXcgQWJvcnRDb250cm9sbGVyKCk7XG4gICAgICAgIGxldCBhYm9ydEhhbmRsZXI7XG4gICAgICAgIGxldCBhYm9ydFJlYXNvbjtcbiAgICAgICAgZnVuY3Rpb24gYWJvcnQocmVhc29uKSB7XG4gICAgICAgICAgYWJvcnRSZWFzb24gPSByZWFzb247XG4gICAgICAgICAgYWJvcnRDb250cm9sbGVyLmFib3J0KCk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgcHJvbWlzZSA9IGFzeW5jIGZ1bmN0aW9uKCkge1xuICAgICAgICAgIGxldCBmaW5hbEFjdGlvbjtcbiAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgbGV0IGNvbmRpdGlvblJlc3VsdCA9IG9wdGlvbnM/LmNvbmRpdGlvbj8uKGFyZywge1xuICAgICAgICAgICAgICBnZXRTdGF0ZSxcbiAgICAgICAgICAgICAgZXh0cmFcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgaWYgKGlzVGhlbmFibGUoY29uZGl0aW9uUmVzdWx0KSkge1xuICAgICAgICAgICAgICBjb25kaXRpb25SZXN1bHQgPSBhd2FpdCBjb25kaXRpb25SZXN1bHQ7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoY29uZGl0aW9uUmVzdWx0ID09PSBmYWxzZSB8fCBhYm9ydENvbnRyb2xsZXIuc2lnbmFsLmFib3J0ZWQpIHtcbiAgICAgICAgICAgICAgdGhyb3cge1xuICAgICAgICAgICAgICAgIG5hbWU6IFwiQ29uZGl0aW9uRXJyb3JcIixcbiAgICAgICAgICAgICAgICBtZXNzYWdlOiBcIkFib3J0ZWQgZHVlIHRvIGNvbmRpdGlvbiBjYWxsYmFjayByZXR1cm5pbmcgZmFsc2UuXCJcbiAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IGFib3J0ZWRQcm9taXNlID0gbmV3IFByb21pc2UoKF8sIHJlamVjdCkgPT4ge1xuICAgICAgICAgICAgICBhYm9ydEhhbmRsZXIgPSAoKSA9PiB7XG4gICAgICAgICAgICAgICAgcmVqZWN0KHtcbiAgICAgICAgICAgICAgICAgIG5hbWU6IFwiQWJvcnRFcnJvclwiLFxuICAgICAgICAgICAgICAgICAgbWVzc2FnZTogYWJvcnRSZWFzb24gfHwgXCJBYm9ydGVkXCJcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgYWJvcnRDb250cm9sbGVyLnNpZ25hbC5hZGRFdmVudExpc3RlbmVyKFwiYWJvcnRcIiwgYWJvcnRIYW5kbGVyKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgZGlzcGF0Y2gocGVuZGluZyhyZXF1ZXN0SWQsIGFyZywgb3B0aW9ucz8uZ2V0UGVuZGluZ01ldGE/Lih7XG4gICAgICAgICAgICAgIHJlcXVlc3RJZCxcbiAgICAgICAgICAgICAgYXJnXG4gICAgICAgICAgICB9LCB7XG4gICAgICAgICAgICAgIGdldFN0YXRlLFxuICAgICAgICAgICAgICBleHRyYVxuICAgICAgICAgICAgfSkpKTtcbiAgICAgICAgICAgIGZpbmFsQWN0aW9uID0gYXdhaXQgUHJvbWlzZS5yYWNlKFthYm9ydGVkUHJvbWlzZSwgUHJvbWlzZS5yZXNvbHZlKHBheWxvYWRDcmVhdG9yKGFyZywge1xuICAgICAgICAgICAgICBkaXNwYXRjaCxcbiAgICAgICAgICAgICAgZ2V0U3RhdGUsXG4gICAgICAgICAgICAgIGV4dHJhLFxuICAgICAgICAgICAgICByZXF1ZXN0SWQsXG4gICAgICAgICAgICAgIHNpZ25hbDogYWJvcnRDb250cm9sbGVyLnNpZ25hbCxcbiAgICAgICAgICAgICAgYWJvcnQsXG4gICAgICAgICAgICAgIHJlamVjdFdpdGhWYWx1ZTogKHZhbHVlLCBtZXRhKSA9PiB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBSZWplY3RXaXRoVmFsdWUodmFsdWUsIG1ldGEpO1xuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICBmdWxmaWxsV2l0aFZhbHVlOiAodmFsdWUsIG1ldGEpID0+IHtcbiAgICAgICAgICAgICAgICByZXR1cm4gbmV3IEZ1bGZpbGxXaXRoTWV0YSh2YWx1ZSwgbWV0YSk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pKS50aGVuKChyZXN1bHQpID0+IHtcbiAgICAgICAgICAgICAgaWYgKHJlc3VsdCBpbnN0YW5jZW9mIFJlamVjdFdpdGhWYWx1ZSkge1xuICAgICAgICAgICAgICAgIHRocm93IHJlc3VsdDtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBpZiAocmVzdWx0IGluc3RhbmNlb2YgRnVsZmlsbFdpdGhNZXRhKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZ1bGZpbGxlZChyZXN1bHQucGF5bG9hZCwgcmVxdWVzdElkLCBhcmcsIHJlc3VsdC5tZXRhKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICByZXR1cm4gZnVsZmlsbGVkKHJlc3VsdCwgcmVxdWVzdElkLCBhcmcpO1xuICAgICAgICAgICAgfSldKTtcbiAgICAgICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgICAgIGZpbmFsQWN0aW9uID0gZXJyIGluc3RhbmNlb2YgUmVqZWN0V2l0aFZhbHVlID8gcmVqZWN0ZWQobnVsbCwgcmVxdWVzdElkLCBhcmcsIGVyci5wYXlsb2FkLCBlcnIubWV0YSkgOiByZWplY3RlZChlcnIsIHJlcXVlc3RJZCwgYXJnKTtcbiAgICAgICAgICB9IGZpbmFsbHkge1xuICAgICAgICAgICAgaWYgKGFib3J0SGFuZGxlcikge1xuICAgICAgICAgICAgICBhYm9ydENvbnRyb2xsZXIuc2lnbmFsLnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJhYm9ydFwiLCBhYm9ydEhhbmRsZXIpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICBjb25zdCBza2lwRGlzcGF0Y2ggPSBvcHRpb25zICYmICFvcHRpb25zLmRpc3BhdGNoQ29uZGl0aW9uUmVqZWN0aW9uICYmIHJlamVjdGVkLm1hdGNoKGZpbmFsQWN0aW9uKSAmJiBmaW5hbEFjdGlvbi5tZXRhLmNvbmRpdGlvbjtcbiAgICAgICAgICBpZiAoIXNraXBEaXNwYXRjaCkge1xuICAgICAgICAgICAgZGlzcGF0Y2goZmluYWxBY3Rpb24pO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gZmluYWxBY3Rpb247XG4gICAgICAgIH0oKTtcbiAgICAgICAgcmV0dXJuIE9iamVjdC5hc3NpZ24ocHJvbWlzZSwge1xuICAgICAgICAgIGFib3J0LFxuICAgICAgICAgIHJlcXVlc3RJZCxcbiAgICAgICAgICBhcmcsXG4gICAgICAgICAgdW53cmFwKCkge1xuICAgICAgICAgICAgcmV0dXJuIHByb21pc2UudGhlbih1bndyYXBSZXN1bHQpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9O1xuICAgIH1cbiAgICByZXR1cm4gT2JqZWN0LmFzc2lnbihhY3Rpb25DcmVhdG9yLCB7XG4gICAgICBwZW5kaW5nLFxuICAgICAgcmVqZWN0ZWQsXG4gICAgICBmdWxmaWxsZWQsXG4gICAgICBzZXR0bGVkOiBpc0FueU9mKHJlamVjdGVkLCBmdWxmaWxsZWQpLFxuICAgICAgdHlwZVByZWZpeFxuICAgIH0pO1xuICB9XG4gIGNyZWF0ZUFzeW5jVGh1bmsyLndpdGhUeXBlcyA9ICgpID0+IGNyZWF0ZUFzeW5jVGh1bmsyO1xuICByZXR1cm4gY3JlYXRlQXN5bmNUaHVuazI7XG59KSgpO1xuZnVuY3Rpb24gdW53cmFwUmVzdWx0KGFjdGlvbikge1xuICBpZiAoYWN0aW9uLm1ldGEgJiYgYWN0aW9uLm1ldGEucmVqZWN0ZWRXaXRoVmFsdWUpIHtcbiAgICB0aHJvdyBhY3Rpb24ucGF5bG9hZDtcbiAgfVxuICBpZiAoYWN0aW9uLmVycm9yKSB7XG4gICAgdGhyb3cgYWN0aW9uLmVycm9yO1xuICB9XG4gIHJldHVybiBhY3Rpb24ucGF5bG9hZDtcbn1cbmZ1bmN0aW9uIGlzVGhlbmFibGUodmFsdWUpIHtcbiAgcmV0dXJuIHZhbHVlICE9PSBudWxsICYmIHR5cGVvZiB2YWx1ZSA9PT0gXCJvYmplY3RcIiAmJiB0eXBlb2YgdmFsdWUudGhlbiA9PT0gXCJmdW5jdGlvblwiO1xufVxuXG4vLyBzcmMvY3JlYXRlU2xpY2UudHNcbnZhciBhc3luY1RodW5rU3ltYm9sID0gLyogQF9fUFVSRV9fICovIFN5bWJvbC5mb3IoXCJydGstc2xpY2UtY3JlYXRlYXN5bmN0aHVua1wiKTtcbnZhciBhc3luY1RodW5rQ3JlYXRvciA9IHtcbiAgW2FzeW5jVGh1bmtTeW1ib2xdOiBjcmVhdGVBc3luY1RodW5rXG59O1xudmFyIFJlZHVjZXJUeXBlID0gLyogQF9fUFVSRV9fICovICgoUmVkdWNlclR5cGUyKSA9PiB7XG4gIFJlZHVjZXJUeXBlMltcInJlZHVjZXJcIl0gPSBcInJlZHVjZXJcIjtcbiAgUmVkdWNlclR5cGUyW1wicmVkdWNlcldpdGhQcmVwYXJlXCJdID0gXCJyZWR1Y2VyV2l0aFByZXBhcmVcIjtcbiAgUmVkdWNlclR5cGUyW1wiYXN5bmNUaHVua1wiXSA9IFwiYXN5bmNUaHVua1wiO1xuICByZXR1cm4gUmVkdWNlclR5cGUyO1xufSkoUmVkdWNlclR5cGUgfHwge30pO1xuZnVuY3Rpb24gZ2V0VHlwZShzbGljZSwgYWN0aW9uS2V5KSB7XG4gIHJldHVybiBgJHtzbGljZX0vJHthY3Rpb25LZXl9YDtcbn1cbmZ1bmN0aW9uIGJ1aWxkQ3JlYXRlU2xpY2Uoe1xuICBjcmVhdG9yc1xufSA9IHt9KSB7XG4gIGNvbnN0IGNBVCA9IGNyZWF0b3JzPy5hc3luY1RodW5rPy5bYXN5bmNUaHVua1N5bWJvbF07XG4gIHJldHVybiBmdW5jdGlvbiBjcmVhdGVTbGljZTIob3B0aW9ucykge1xuICAgIGNvbnN0IHtcbiAgICAgIG5hbWUsXG4gICAgICByZWR1Y2VyUGF0aCA9IG5hbWVcbiAgICB9ID0gb3B0aW9ucztcbiAgICBpZiAoIW5hbWUpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihwcm9jZXNzLmVudi5OT0RFX0VOViA9PT0gXCJwcm9kdWN0aW9uXCIgPyBmb3JtYXRQcm9kRXJyb3JNZXNzYWdlKDExKSA6IFwiYG5hbWVgIGlzIGEgcmVxdWlyZWQgb3B0aW9uIGZvciBjcmVhdGVTbGljZVwiKTtcbiAgICB9XG4gICAgaWYgKHR5cGVvZiBwcm9jZXNzICE9PSBcInVuZGVmaW5lZFwiICYmIHByb2Nlc3MuZW52Lk5PREVfRU5WID09PSBcImRldmVsb3BtZW50XCIpIHtcbiAgICAgIGlmIChvcHRpb25zLmluaXRpYWxTdGF0ZSA9PT0gdm9pZCAwKSB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoXCJZb3UgbXVzdCBwcm92aWRlIGFuIGBpbml0aWFsU3RhdGVgIHZhbHVlIHRoYXQgaXMgbm90IGB1bmRlZmluZWRgLiBZb3UgbWF5IGhhdmUgbWlzc3BlbGxlZCBgaW5pdGlhbFN0YXRlYFwiKTtcbiAgICAgIH1cbiAgICB9XG4gICAgY29uc3QgcmVkdWNlcnMgPSAodHlwZW9mIG9wdGlvbnMucmVkdWNlcnMgPT09IFwiZnVuY3Rpb25cIiA/IG9wdGlvbnMucmVkdWNlcnMoYnVpbGRSZWR1Y2VyQ3JlYXRvcnMoKSkgOiBvcHRpb25zLnJlZHVjZXJzKSB8fCB7fTtcbiAgICBjb25zdCByZWR1Y2VyTmFtZXMgPSBPYmplY3Qua2V5cyhyZWR1Y2Vycyk7XG4gICAgY29uc3QgY29udGV4dCA9IHtcbiAgICAgIHNsaWNlQ2FzZVJlZHVjZXJzQnlOYW1lOiB7fSxcbiAgICAgIHNsaWNlQ2FzZVJlZHVjZXJzQnlUeXBlOiB7fSxcbiAgICAgIGFjdGlvbkNyZWF0b3JzOiB7fSxcbiAgICAgIHNsaWNlTWF0Y2hlcnM6IFtdXG4gICAgfTtcbiAgICBjb25zdCBjb250ZXh0TWV0aG9kcyA9IHtcbiAgICAgIGFkZENhc2UodHlwZU9yQWN0aW9uQ3JlYXRvciwgcmVkdWNlcjIpIHtcbiAgICAgICAgY29uc3QgdHlwZSA9IHR5cGVvZiB0eXBlT3JBY3Rpb25DcmVhdG9yID09PSBcInN0cmluZ1wiID8gdHlwZU9yQWN0aW9uQ3JlYXRvciA6IHR5cGVPckFjdGlvbkNyZWF0b3IudHlwZTtcbiAgICAgICAgaWYgKCF0eXBlKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKHByb2Nlc3MuZW52Lk5PREVfRU5WID09PSBcInByb2R1Y3Rpb25cIiA/IGZvcm1hdFByb2RFcnJvck1lc3NhZ2UoMTIpIDogXCJgY29udGV4dC5hZGRDYXNlYCBjYW5ub3QgYmUgY2FsbGVkIHdpdGggYW4gZW1wdHkgYWN0aW9uIHR5cGVcIik7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHR5cGUgaW4gY29udGV4dC5zbGljZUNhc2VSZWR1Y2Vyc0J5VHlwZSkge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihwcm9jZXNzLmVudi5OT0RFX0VOViA9PT0gXCJwcm9kdWN0aW9uXCIgPyBmb3JtYXRQcm9kRXJyb3JNZXNzYWdlKDEzKSA6IFwiYGNvbnRleHQuYWRkQ2FzZWAgY2Fubm90IGJlIGNhbGxlZCB3aXRoIHR3byByZWR1Y2VycyBmb3IgdGhlIHNhbWUgYWN0aW9uIHR5cGU6IFwiICsgdHlwZSk7XG4gICAgICAgIH1cbiAgICAgICAgY29udGV4dC5zbGljZUNhc2VSZWR1Y2Vyc0J5VHlwZVt0eXBlXSA9IHJlZHVjZXIyO1xuICAgICAgICByZXR1cm4gY29udGV4dE1ldGhvZHM7XG4gICAgICB9LFxuICAgICAgYWRkTWF0Y2hlcihtYXRjaGVyLCByZWR1Y2VyMikge1xuICAgICAgICBjb250ZXh0LnNsaWNlTWF0Y2hlcnMucHVzaCh7XG4gICAgICAgICAgbWF0Y2hlcixcbiAgICAgICAgICByZWR1Y2VyOiByZWR1Y2VyMlxuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIGNvbnRleHRNZXRob2RzO1xuICAgICAgfSxcbiAgICAgIGV4cG9zZUFjdGlvbihuYW1lMiwgYWN0aW9uQ3JlYXRvcikge1xuICAgICAgICBjb250ZXh0LmFjdGlvbkNyZWF0b3JzW25hbWUyXSA9IGFjdGlvbkNyZWF0b3I7XG4gICAgICAgIHJldHVybiBjb250ZXh0TWV0aG9kcztcbiAgICAgIH0sXG4gICAgICBleHBvc2VDYXNlUmVkdWNlcihuYW1lMiwgcmVkdWNlcjIpIHtcbiAgICAgICAgY29udGV4dC5zbGljZUNhc2VSZWR1Y2Vyc0J5TmFtZVtuYW1lMl0gPSByZWR1Y2VyMjtcbiAgICAgICAgcmV0dXJuIGNvbnRleHRNZXRob2RzO1xuICAgICAgfVxuICAgIH07XG4gICAgcmVkdWNlck5hbWVzLmZvckVhY2goKHJlZHVjZXJOYW1lKSA9PiB7XG4gICAgICBjb25zdCByZWR1Y2VyRGVmaW5pdGlvbiA9IHJlZHVjZXJzW3JlZHVjZXJOYW1lXTtcbiAgICAgIGNvbnN0IHJlZHVjZXJEZXRhaWxzID0ge1xuICAgICAgICByZWR1Y2VyTmFtZSxcbiAgICAgICAgdHlwZTogZ2V0VHlwZShuYW1lLCByZWR1Y2VyTmFtZSksXG4gICAgICAgIGNyZWF0ZU5vdGF0aW9uOiB0eXBlb2Ygb3B0aW9ucy5yZWR1Y2VycyA9PT0gXCJmdW5jdGlvblwiXG4gICAgICB9O1xuICAgICAgaWYgKGlzQXN5bmNUaHVua1NsaWNlUmVkdWNlckRlZmluaXRpb24ocmVkdWNlckRlZmluaXRpb24pKSB7XG4gICAgICAgIGhhbmRsZVRodW5rQ2FzZVJlZHVjZXJEZWZpbml0aW9uKHJlZHVjZXJEZXRhaWxzLCByZWR1Y2VyRGVmaW5pdGlvbiwgY29udGV4dE1ldGhvZHMsIGNBVCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBoYW5kbGVOb3JtYWxSZWR1Y2VyRGVmaW5pdGlvbihyZWR1Y2VyRGV0YWlscywgcmVkdWNlckRlZmluaXRpb24sIGNvbnRleHRNZXRob2RzKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICBmdW5jdGlvbiBidWlsZFJlZHVjZXIoKSB7XG4gICAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiKSB7XG4gICAgICAgIGlmICh0eXBlb2Ygb3B0aW9ucy5leHRyYVJlZHVjZXJzID09PSBcIm9iamVjdFwiKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKHByb2Nlc3MuZW52Lk5PREVfRU5WID09PSBcInByb2R1Y3Rpb25cIiA/IGZvcm1hdFByb2RFcnJvck1lc3NhZ2UoMTQpIDogXCJUaGUgb2JqZWN0IG5vdGF0aW9uIGZvciBgY3JlYXRlU2xpY2UuZXh0cmFSZWR1Y2Vyc2AgaGFzIGJlZW4gcmVtb3ZlZC4gUGxlYXNlIHVzZSB0aGUgJ2J1aWxkZXIgY2FsbGJhY2snIG5vdGF0aW9uIGluc3RlYWQ6IGh0dHBzOi8vcmVkdXgtdG9vbGtpdC5qcy5vcmcvYXBpL2NyZWF0ZVNsaWNlXCIpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBjb25zdCBbZXh0cmFSZWR1Y2VycyA9IHt9LCBhY3Rpb25NYXRjaGVycyA9IFtdLCBkZWZhdWx0Q2FzZVJlZHVjZXIgPSB2b2lkIDBdID0gdHlwZW9mIG9wdGlvbnMuZXh0cmFSZWR1Y2VycyA9PT0gXCJmdW5jdGlvblwiID8gZXhlY3V0ZVJlZHVjZXJCdWlsZGVyQ2FsbGJhY2sob3B0aW9ucy5leHRyYVJlZHVjZXJzKSA6IFtvcHRpb25zLmV4dHJhUmVkdWNlcnNdO1xuICAgICAgY29uc3QgZmluYWxDYXNlUmVkdWNlcnMgPSB7XG4gICAgICAgIC4uLmV4dHJhUmVkdWNlcnMsXG4gICAgICAgIC4uLmNvbnRleHQuc2xpY2VDYXNlUmVkdWNlcnNCeVR5cGVcbiAgICAgIH07XG4gICAgICByZXR1cm4gY3JlYXRlUmVkdWNlcihvcHRpb25zLmluaXRpYWxTdGF0ZSwgKGJ1aWxkZXIpID0+IHtcbiAgICAgICAgZm9yIChsZXQga2V5IGluIGZpbmFsQ2FzZVJlZHVjZXJzKSB7XG4gICAgICAgICAgYnVpbGRlci5hZGRDYXNlKGtleSwgZmluYWxDYXNlUmVkdWNlcnNba2V5XSk7XG4gICAgICAgIH1cbiAgICAgICAgZm9yIChsZXQgc00gb2YgY29udGV4dC5zbGljZU1hdGNoZXJzKSB7XG4gICAgICAgICAgYnVpbGRlci5hZGRNYXRjaGVyKHNNLm1hdGNoZXIsIHNNLnJlZHVjZXIpO1xuICAgICAgICB9XG4gICAgICAgIGZvciAobGV0IG0gb2YgYWN0aW9uTWF0Y2hlcnMpIHtcbiAgICAgICAgICBidWlsZGVyLmFkZE1hdGNoZXIobS5tYXRjaGVyLCBtLnJlZHVjZXIpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChkZWZhdWx0Q2FzZVJlZHVjZXIpIHtcbiAgICAgICAgICBidWlsZGVyLmFkZERlZmF1bHRDYXNlKGRlZmF1bHRDYXNlUmVkdWNlcik7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cbiAgICBjb25zdCBzZWxlY3RTZWxmID0gKHN0YXRlKSA9PiBzdGF0ZTtcbiAgICBjb25zdCBpbmplY3RlZFNlbGVjdG9yQ2FjaGUgPSAvKiBAX19QVVJFX18gKi8gbmV3IE1hcCgpO1xuICAgIGxldCBfcmVkdWNlcjtcbiAgICBmdW5jdGlvbiByZWR1Y2VyKHN0YXRlLCBhY3Rpb24pIHtcbiAgICAgIGlmICghX3JlZHVjZXIpIF9yZWR1Y2VyID0gYnVpbGRSZWR1Y2VyKCk7XG4gICAgICByZXR1cm4gX3JlZHVjZXIoc3RhdGUsIGFjdGlvbik7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGdldEluaXRpYWxTdGF0ZSgpIHtcbiAgICAgIGlmICghX3JlZHVjZXIpIF9yZWR1Y2VyID0gYnVpbGRSZWR1Y2VyKCk7XG4gICAgICByZXR1cm4gX3JlZHVjZXIuZ2V0SW5pdGlhbFN0YXRlKCk7XG4gICAgfVxuICAgIGZ1bmN0aW9uIG1ha2VTZWxlY3RvclByb3BzKHJlZHVjZXJQYXRoMiwgaW5qZWN0ZWQgPSBmYWxzZSkge1xuICAgICAgZnVuY3Rpb24gc2VsZWN0U2xpY2Uoc3RhdGUpIHtcbiAgICAgICAgbGV0IHNsaWNlU3RhdGUgPSBzdGF0ZVtyZWR1Y2VyUGF0aDJdO1xuICAgICAgICBpZiAodHlwZW9mIHNsaWNlU3RhdGUgPT09IFwidW5kZWZpbmVkXCIpIHtcbiAgICAgICAgICBpZiAoaW5qZWN0ZWQpIHtcbiAgICAgICAgICAgIHNsaWNlU3RhdGUgPSBnZXRJbml0aWFsU3RhdGUoKTtcbiAgICAgICAgICB9IGVsc2UgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIikge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKHByb2Nlc3MuZW52Lk5PREVfRU5WID09PSBcInByb2R1Y3Rpb25cIiA/IGZvcm1hdFByb2RFcnJvck1lc3NhZ2UoMTUpIDogXCJzZWxlY3RTbGljZSByZXR1cm5lZCB1bmRlZmluZWQgZm9yIGFuIHVuaW5qZWN0ZWQgc2xpY2UgcmVkdWNlclwiKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHNsaWNlU3RhdGU7XG4gICAgICB9XG4gICAgICBmdW5jdGlvbiBnZXRTZWxlY3RvcnMoc2VsZWN0U3RhdGUgPSBzZWxlY3RTZWxmKSB7XG4gICAgICAgIGNvbnN0IHNlbGVjdG9yQ2FjaGUgPSBnZXRPckluc2VydENvbXB1dGVkKGluamVjdGVkU2VsZWN0b3JDYWNoZSwgaW5qZWN0ZWQsICgpID0+IC8qIEBfX1BVUkVfXyAqLyBuZXcgV2Vha01hcCgpKTtcbiAgICAgICAgcmV0dXJuIGdldE9ySW5zZXJ0Q29tcHV0ZWQoc2VsZWN0b3JDYWNoZSwgc2VsZWN0U3RhdGUsICgpID0+IHtcbiAgICAgICAgICBjb25zdCBtYXAgPSB7fTtcbiAgICAgICAgICBmb3IgKGNvbnN0IFtuYW1lMiwgc2VsZWN0b3JdIG9mIE9iamVjdC5lbnRyaWVzKG9wdGlvbnMuc2VsZWN0b3JzID8/IHt9KSkge1xuICAgICAgICAgICAgbWFwW25hbWUyXSA9IHdyYXBTZWxlY3RvcihzZWxlY3Rvciwgc2VsZWN0U3RhdGUsIGdldEluaXRpYWxTdGF0ZSwgaW5qZWN0ZWQpO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gbWFwO1xuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICAgIHJldHVybiB7XG4gICAgICAgIHJlZHVjZXJQYXRoOiByZWR1Y2VyUGF0aDIsXG4gICAgICAgIGdldFNlbGVjdG9ycyxcbiAgICAgICAgZ2V0IHNlbGVjdG9ycygpIHtcbiAgICAgICAgICByZXR1cm4gZ2V0U2VsZWN0b3JzKHNlbGVjdFNsaWNlKTtcbiAgICAgICAgfSxcbiAgICAgICAgc2VsZWN0U2xpY2VcbiAgICAgIH07XG4gICAgfVxuICAgIGNvbnN0IHNsaWNlID0ge1xuICAgICAgbmFtZSxcbiAgICAgIHJlZHVjZXIsXG4gICAgICBhY3Rpb25zOiBjb250ZXh0LmFjdGlvbkNyZWF0b3JzLFxuICAgICAgY2FzZVJlZHVjZXJzOiBjb250ZXh0LnNsaWNlQ2FzZVJlZHVjZXJzQnlOYW1lLFxuICAgICAgZ2V0SW5pdGlhbFN0YXRlLFxuICAgICAgLi4ubWFrZVNlbGVjdG9yUHJvcHMocmVkdWNlclBhdGgpLFxuICAgICAgaW5qZWN0SW50byhpbmplY3RhYmxlLCB7XG4gICAgICAgIHJlZHVjZXJQYXRoOiBwYXRoT3B0LFxuICAgICAgICAuLi5jb25maWdcbiAgICAgIH0gPSB7fSkge1xuICAgICAgICBjb25zdCBuZXdSZWR1Y2VyUGF0aCA9IHBhdGhPcHQgPz8gcmVkdWNlclBhdGg7XG4gICAgICAgIGluamVjdGFibGUuaW5qZWN0KHtcbiAgICAgICAgICByZWR1Y2VyUGF0aDogbmV3UmVkdWNlclBhdGgsXG4gICAgICAgICAgcmVkdWNlclxuICAgICAgICB9LCBjb25maWcpO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIC4uLnNsaWNlLFxuICAgICAgICAgIC4uLm1ha2VTZWxlY3RvclByb3BzKG5ld1JlZHVjZXJQYXRoLCB0cnVlKVxuICAgICAgICB9O1xuICAgICAgfVxuICAgIH07XG4gICAgcmV0dXJuIHNsaWNlO1xuICB9O1xufVxuZnVuY3Rpb24gd3JhcFNlbGVjdG9yKHNlbGVjdG9yLCBzZWxlY3RTdGF0ZSwgZ2V0SW5pdGlhbFN0YXRlLCBpbmplY3RlZCkge1xuICBmdW5jdGlvbiB3cmFwcGVyKHJvb3RTdGF0ZSwgLi4uYXJncykge1xuICAgIGxldCBzbGljZVN0YXRlID0gc2VsZWN0U3RhdGUocm9vdFN0YXRlKTtcbiAgICBpZiAodHlwZW9mIHNsaWNlU3RhdGUgPT09IFwidW5kZWZpbmVkXCIpIHtcbiAgICAgIGlmIChpbmplY3RlZCkge1xuICAgICAgICBzbGljZVN0YXRlID0gZ2V0SW5pdGlhbFN0YXRlKCk7XG4gICAgICB9IGVsc2UgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIikge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IocHJvY2Vzcy5lbnYuTk9ERV9FTlYgPT09IFwicHJvZHVjdGlvblwiID8gZm9ybWF0UHJvZEVycm9yTWVzc2FnZSgxNikgOiBcInNlbGVjdFN0YXRlIHJldHVybmVkIHVuZGVmaW5lZCBmb3IgYW4gdW5pbmplY3RlZCBzbGljZSByZWR1Y2VyXCIpO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gc2VsZWN0b3Ioc2xpY2VTdGF0ZSwgLi4uYXJncyk7XG4gIH1cbiAgd3JhcHBlci51bndyYXBwZWQgPSBzZWxlY3RvcjtcbiAgcmV0dXJuIHdyYXBwZXI7XG59XG52YXIgY3JlYXRlU2xpY2UgPSAvKiBAX19QVVJFX18gKi8gYnVpbGRDcmVhdGVTbGljZSgpO1xuZnVuY3Rpb24gYnVpbGRSZWR1Y2VyQ3JlYXRvcnMoKSB7XG4gIGZ1bmN0aW9uIGFzeW5jVGh1bmsocGF5bG9hZENyZWF0b3IsIGNvbmZpZykge1xuICAgIHJldHVybiB7XG4gICAgICBfcmVkdWNlckRlZmluaXRpb25UeXBlOiBcImFzeW5jVGh1bmtcIiAvKiBhc3luY1RodW5rICovLFxuICAgICAgcGF5bG9hZENyZWF0b3IsXG4gICAgICAuLi5jb25maWdcbiAgICB9O1xuICB9XG4gIGFzeW5jVGh1bmsud2l0aFR5cGVzID0gKCkgPT4gYXN5bmNUaHVuaztcbiAgcmV0dXJuIHtcbiAgICByZWR1Y2VyKGNhc2VSZWR1Y2VyKSB7XG4gICAgICByZXR1cm4gT2JqZWN0LmFzc2lnbih7XG4gICAgICAgIC8vIGhhY2sgc28gdGhlIHdyYXBwaW5nIGZ1bmN0aW9uIGhhcyB0aGUgc2FtZSBuYW1lIGFzIHRoZSBvcmlnaW5hbFxuICAgICAgICAvLyB3ZSBuZWVkIHRvIGNyZWF0ZSBhIHdyYXBwZXIgc28gdGhlIGByZWR1Y2VyRGVmaW5pdGlvblR5cGVgIGlzIG5vdCBhc3NpZ25lZCB0byB0aGUgb3JpZ2luYWxcbiAgICAgICAgW2Nhc2VSZWR1Y2VyLm5hbWVdKC4uLmFyZ3MpIHtcbiAgICAgICAgICByZXR1cm4gY2FzZVJlZHVjZXIoLi4uYXJncyk7XG4gICAgICAgIH1cbiAgICAgIH1bY2FzZVJlZHVjZXIubmFtZV0sIHtcbiAgICAgICAgX3JlZHVjZXJEZWZpbml0aW9uVHlwZTogXCJyZWR1Y2VyXCIgLyogcmVkdWNlciAqL1xuICAgICAgfSk7XG4gICAgfSxcbiAgICBwcmVwYXJlZFJlZHVjZXIocHJlcGFyZSwgcmVkdWNlcikge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgX3JlZHVjZXJEZWZpbml0aW9uVHlwZTogXCJyZWR1Y2VyV2l0aFByZXBhcmVcIiAvKiByZWR1Y2VyV2l0aFByZXBhcmUgKi8sXG4gICAgICAgIHByZXBhcmUsXG4gICAgICAgIHJlZHVjZXJcbiAgICAgIH07XG4gICAgfSxcbiAgICBhc3luY1RodW5rXG4gIH07XG59XG5mdW5jdGlvbiBoYW5kbGVOb3JtYWxSZWR1Y2VyRGVmaW5pdGlvbih7XG4gIHR5cGUsXG4gIHJlZHVjZXJOYW1lLFxuICBjcmVhdGVOb3RhdGlvblxufSwgbWF5YmVSZWR1Y2VyV2l0aFByZXBhcmUsIGNvbnRleHQpIHtcbiAgbGV0IGNhc2VSZWR1Y2VyO1xuICBsZXQgcHJlcGFyZUNhbGxiYWNrO1xuICBpZiAoXCJyZWR1Y2VyXCIgaW4gbWF5YmVSZWR1Y2VyV2l0aFByZXBhcmUpIHtcbiAgICBpZiAoY3JlYXRlTm90YXRpb24gJiYgIWlzQ2FzZVJlZHVjZXJXaXRoUHJlcGFyZURlZmluaXRpb24obWF5YmVSZWR1Y2VyV2l0aFByZXBhcmUpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IocHJvY2Vzcy5lbnYuTk9ERV9FTlYgPT09IFwicHJvZHVjdGlvblwiID8gZm9ybWF0UHJvZEVycm9yTWVzc2FnZSgxNykgOiBcIlBsZWFzZSB1c2UgdGhlIGBjcmVhdGUucHJlcGFyZWRSZWR1Y2VyYCBub3RhdGlvbiBmb3IgcHJlcGFyZWQgYWN0aW9uIGNyZWF0b3JzIHdpdGggdGhlIGBjcmVhdGVgIG5vdGF0aW9uLlwiKTtcbiAgICB9XG4gICAgY2FzZVJlZHVjZXIgPSBtYXliZVJlZHVjZXJXaXRoUHJlcGFyZS5yZWR1Y2VyO1xuICAgIHByZXBhcmVDYWxsYmFjayA9IG1heWJlUmVkdWNlcldpdGhQcmVwYXJlLnByZXBhcmU7XG4gIH0gZWxzZSB7XG4gICAgY2FzZVJlZHVjZXIgPSBtYXliZVJlZHVjZXJXaXRoUHJlcGFyZTtcbiAgfVxuICBjb250ZXh0LmFkZENhc2UodHlwZSwgY2FzZVJlZHVjZXIpLmV4cG9zZUNhc2VSZWR1Y2VyKHJlZHVjZXJOYW1lLCBjYXNlUmVkdWNlcikuZXhwb3NlQWN0aW9uKHJlZHVjZXJOYW1lLCBwcmVwYXJlQ2FsbGJhY2sgPyBjcmVhdGVBY3Rpb24odHlwZSwgcHJlcGFyZUNhbGxiYWNrKSA6IGNyZWF0ZUFjdGlvbih0eXBlKSk7XG59XG5mdW5jdGlvbiBpc0FzeW5jVGh1bmtTbGljZVJlZHVjZXJEZWZpbml0aW9uKHJlZHVjZXJEZWZpbml0aW9uKSB7XG4gIHJldHVybiByZWR1Y2VyRGVmaW5pdGlvbi5fcmVkdWNlckRlZmluaXRpb25UeXBlID09PSBcImFzeW5jVGh1bmtcIiAvKiBhc3luY1RodW5rICovO1xufVxuZnVuY3Rpb24gaXNDYXNlUmVkdWNlcldpdGhQcmVwYXJlRGVmaW5pdGlvbihyZWR1Y2VyRGVmaW5pdGlvbikge1xuICByZXR1cm4gcmVkdWNlckRlZmluaXRpb24uX3JlZHVjZXJEZWZpbml0aW9uVHlwZSA9PT0gXCJyZWR1Y2VyV2l0aFByZXBhcmVcIiAvKiByZWR1Y2VyV2l0aFByZXBhcmUgKi87XG59XG5mdW5jdGlvbiBoYW5kbGVUaHVua0Nhc2VSZWR1Y2VyRGVmaW5pdGlvbih7XG4gIHR5cGUsXG4gIHJlZHVjZXJOYW1lXG59LCByZWR1Y2VyRGVmaW5pdGlvbiwgY29udGV4dCwgY0FUKSB7XG4gIGlmICghY0FUKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKHByb2Nlc3MuZW52Lk5PREVfRU5WID09PSBcInByb2R1Y3Rpb25cIiA/IGZvcm1hdFByb2RFcnJvck1lc3NhZ2UoMTgpIDogXCJDYW5ub3QgdXNlIGBjcmVhdGUuYXN5bmNUaHVua2AgaW4gdGhlIGJ1aWx0LWluIGBjcmVhdGVTbGljZWAuIFVzZSBgYnVpbGRDcmVhdGVTbGljZSh7IGNyZWF0b3JzOiB7IGFzeW5jVGh1bms6IGFzeW5jVGh1bmtDcmVhdG9yIH0gfSlgIHRvIGNyZWF0ZSBhIGN1c3RvbWlzZWQgdmVyc2lvbiBvZiBgY3JlYXRlU2xpY2VgLlwiKTtcbiAgfVxuICBjb25zdCB7XG4gICAgcGF5bG9hZENyZWF0b3IsXG4gICAgZnVsZmlsbGVkLFxuICAgIHBlbmRpbmcsXG4gICAgcmVqZWN0ZWQsXG4gICAgc2V0dGxlZCxcbiAgICBvcHRpb25zXG4gIH0gPSByZWR1Y2VyRGVmaW5pdGlvbjtcbiAgY29uc3QgdGh1bmsgPSBjQVQodHlwZSwgcGF5bG9hZENyZWF0b3IsIG9wdGlvbnMpO1xuICBjb250ZXh0LmV4cG9zZUFjdGlvbihyZWR1Y2VyTmFtZSwgdGh1bmspO1xuICBpZiAoZnVsZmlsbGVkKSB7XG4gICAgY29udGV4dC5hZGRDYXNlKHRodW5rLmZ1bGZpbGxlZCwgZnVsZmlsbGVkKTtcbiAgfVxuICBpZiAocGVuZGluZykge1xuICAgIGNvbnRleHQuYWRkQ2FzZSh0aHVuay5wZW5kaW5nLCBwZW5kaW5nKTtcbiAgfVxuICBpZiAocmVqZWN0ZWQpIHtcbiAgICBjb250ZXh0LmFkZENhc2UodGh1bmsucmVqZWN0ZWQsIHJlamVjdGVkKTtcbiAgfVxuICBpZiAoc2V0dGxlZCkge1xuICAgIGNvbnRleHQuYWRkTWF0Y2hlcih0aHVuay5zZXR0bGVkLCBzZXR0bGVkKTtcbiAgfVxuICBjb250ZXh0LmV4cG9zZUNhc2VSZWR1Y2VyKHJlZHVjZXJOYW1lLCB7XG4gICAgZnVsZmlsbGVkOiBmdWxmaWxsZWQgfHwgbm9vcCxcbiAgICBwZW5kaW5nOiBwZW5kaW5nIHx8IG5vb3AsXG4gICAgcmVqZWN0ZWQ6IHJlamVjdGVkIHx8IG5vb3AsXG4gICAgc2V0dGxlZDogc2V0dGxlZCB8fCBub29wXG4gIH0pO1xufVxuZnVuY3Rpb24gbm9vcCgpIHtcbn1cblxuLy8gc3JjL2VudGl0aWVzL2VudGl0eV9zdGF0ZS50c1xuZnVuY3Rpb24gZ2V0SW5pdGlhbEVudGl0eVN0YXRlKCkge1xuICByZXR1cm4ge1xuICAgIGlkczogW10sXG4gICAgZW50aXRpZXM6IHt9XG4gIH07XG59XG5mdW5jdGlvbiBjcmVhdGVJbml0aWFsU3RhdGVGYWN0b3J5KHN0YXRlQWRhcHRlcikge1xuICBmdW5jdGlvbiBnZXRJbml0aWFsU3RhdGUoYWRkaXRpb25hbFN0YXRlID0ge30sIGVudGl0aWVzKSB7XG4gICAgY29uc3Qgc3RhdGUgPSBPYmplY3QuYXNzaWduKGdldEluaXRpYWxFbnRpdHlTdGF0ZSgpLCBhZGRpdGlvbmFsU3RhdGUpO1xuICAgIHJldHVybiBlbnRpdGllcyA/IHN0YXRlQWRhcHRlci5zZXRBbGwoc3RhdGUsIGVudGl0aWVzKSA6IHN0YXRlO1xuICB9XG4gIHJldHVybiB7XG4gICAgZ2V0SW5pdGlhbFN0YXRlXG4gIH07XG59XG5cbi8vIHNyYy9lbnRpdGllcy9zdGF0ZV9zZWxlY3RvcnMudHNcbmZ1bmN0aW9uIGNyZWF0ZVNlbGVjdG9yc0ZhY3RvcnkoKSB7XG4gIGZ1bmN0aW9uIGdldFNlbGVjdG9ycyhzZWxlY3RTdGF0ZSwgb3B0aW9ucyA9IHt9KSB7XG4gICAgY29uc3Qge1xuICAgICAgY3JlYXRlU2VsZWN0b3I6IGNyZWF0ZVNlbGVjdG9yMiA9IGNyZWF0ZURyYWZ0U2FmZVNlbGVjdG9yXG4gICAgfSA9IG9wdGlvbnM7XG4gICAgY29uc3Qgc2VsZWN0SWRzID0gKHN0YXRlKSA9PiBzdGF0ZS5pZHM7XG4gICAgY29uc3Qgc2VsZWN0RW50aXRpZXMgPSAoc3RhdGUpID0+IHN0YXRlLmVudGl0aWVzO1xuICAgIGNvbnN0IHNlbGVjdEFsbCA9IGNyZWF0ZVNlbGVjdG9yMihzZWxlY3RJZHMsIHNlbGVjdEVudGl0aWVzLCAoaWRzLCBlbnRpdGllcykgPT4gaWRzLm1hcCgoaWQpID0+IGVudGl0aWVzW2lkXSkpO1xuICAgIGNvbnN0IHNlbGVjdElkID0gKF8sIGlkKSA9PiBpZDtcbiAgICBjb25zdCBzZWxlY3RCeUlkID0gKGVudGl0aWVzLCBpZCkgPT4gZW50aXRpZXNbaWRdO1xuICAgIGNvbnN0IHNlbGVjdFRvdGFsID0gY3JlYXRlU2VsZWN0b3IyKHNlbGVjdElkcywgKGlkcykgPT4gaWRzLmxlbmd0aCk7XG4gICAgaWYgKCFzZWxlY3RTdGF0ZSkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgc2VsZWN0SWRzLFxuICAgICAgICBzZWxlY3RFbnRpdGllcyxcbiAgICAgICAgc2VsZWN0QWxsLFxuICAgICAgICBzZWxlY3RUb3RhbCxcbiAgICAgICAgc2VsZWN0QnlJZDogY3JlYXRlU2VsZWN0b3IyKHNlbGVjdEVudGl0aWVzLCBzZWxlY3RJZCwgc2VsZWN0QnlJZClcbiAgICAgIH07XG4gICAgfVxuICAgIGNvbnN0IHNlbGVjdEdsb2JhbGl6ZWRFbnRpdGllcyA9IGNyZWF0ZVNlbGVjdG9yMihzZWxlY3RTdGF0ZSwgc2VsZWN0RW50aXRpZXMpO1xuICAgIHJldHVybiB7XG4gICAgICBzZWxlY3RJZHM6IGNyZWF0ZVNlbGVjdG9yMihzZWxlY3RTdGF0ZSwgc2VsZWN0SWRzKSxcbiAgICAgIHNlbGVjdEVudGl0aWVzOiBzZWxlY3RHbG9iYWxpemVkRW50aXRpZXMsXG4gICAgICBzZWxlY3RBbGw6IGNyZWF0ZVNlbGVjdG9yMihzZWxlY3RTdGF0ZSwgc2VsZWN0QWxsKSxcbiAgICAgIHNlbGVjdFRvdGFsOiBjcmVhdGVTZWxlY3RvcjIoc2VsZWN0U3RhdGUsIHNlbGVjdFRvdGFsKSxcbiAgICAgIHNlbGVjdEJ5SWQ6IGNyZWF0ZVNlbGVjdG9yMihzZWxlY3RHbG9iYWxpemVkRW50aXRpZXMsIHNlbGVjdElkLCBzZWxlY3RCeUlkKVxuICAgIH07XG4gIH1cbiAgcmV0dXJuIHtcbiAgICBnZXRTZWxlY3RvcnNcbiAgfTtcbn1cblxuLy8gc3JjL2VudGl0aWVzL3N0YXRlX2FkYXB0ZXIudHNcbmltcG9ydCB7IHByb2R1Y2UgYXMgY3JlYXRlTmV4dFN0YXRlMywgaXNEcmFmdCBhcyBpc0RyYWZ0MyB9IGZyb20gXCJpbW1lclwiO1xudmFyIGlzRHJhZnRUeXBlZCA9IGlzRHJhZnQzO1xuZnVuY3Rpb24gY3JlYXRlU2luZ2xlQXJndW1lbnRTdGF0ZU9wZXJhdG9yKG11dGF0b3IpIHtcbiAgY29uc3Qgb3BlcmF0b3IgPSBjcmVhdGVTdGF0ZU9wZXJhdG9yKChfLCBzdGF0ZSkgPT4gbXV0YXRvcihzdGF0ZSkpO1xuICByZXR1cm4gZnVuY3Rpb24gb3BlcmF0aW9uKHN0YXRlKSB7XG4gICAgcmV0dXJuIG9wZXJhdG9yKHN0YXRlLCB2b2lkIDApO1xuICB9O1xufVxuZnVuY3Rpb24gY3JlYXRlU3RhdGVPcGVyYXRvcihtdXRhdG9yKSB7XG4gIHJldHVybiBmdW5jdGlvbiBvcGVyYXRpb24oc3RhdGUsIGFyZykge1xuICAgIGZ1bmN0aW9uIGlzUGF5bG9hZEFjdGlvbkFyZ3VtZW50KGFyZzIpIHtcbiAgICAgIHJldHVybiBpc0ZTQShhcmcyKTtcbiAgICB9XG4gICAgY29uc3QgcnVuTXV0YXRvciA9IChkcmFmdCkgPT4ge1xuICAgICAgaWYgKGlzUGF5bG9hZEFjdGlvbkFyZ3VtZW50KGFyZykpIHtcbiAgICAgICAgbXV0YXRvcihhcmcucGF5bG9hZCwgZHJhZnQpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgbXV0YXRvcihhcmcsIGRyYWZ0KTtcbiAgICAgIH1cbiAgICB9O1xuICAgIGlmIChpc0RyYWZ0VHlwZWQoc3RhdGUpKSB7XG4gICAgICBydW5NdXRhdG9yKHN0YXRlKTtcbiAgICAgIHJldHVybiBzdGF0ZTtcbiAgICB9XG4gICAgcmV0dXJuIGNyZWF0ZU5leHRTdGF0ZTMoc3RhdGUsIHJ1bk11dGF0b3IpO1xuICB9O1xufVxuXG4vLyBzcmMvZW50aXRpZXMvdXRpbHMudHNcbmltcG9ydCB7IGN1cnJlbnQgYXMgY3VycmVudDIsIGlzRHJhZnQgYXMgaXNEcmFmdDQgfSBmcm9tIFwiaW1tZXJcIjtcbmZ1bmN0aW9uIHNlbGVjdElkVmFsdWUoZW50aXR5LCBzZWxlY3RJZCkge1xuICBjb25zdCBrZXkgPSBzZWxlY3RJZChlbnRpdHkpO1xuICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiICYmIGtleSA9PT0gdm9pZCAwKSB7XG4gICAgY29uc29sZS53YXJuKFwiVGhlIGVudGl0eSBwYXNzZWQgdG8gdGhlIGBzZWxlY3RJZGAgaW1wbGVtZW50YXRpb24gcmV0dXJuZWQgdW5kZWZpbmVkLlwiLCBcIllvdSBzaG91bGQgcHJvYmFibHkgcHJvdmlkZSB5b3VyIG93biBgc2VsZWN0SWRgIGltcGxlbWVudGF0aW9uLlwiLCBcIlRoZSBlbnRpdHkgdGhhdCB3YXMgcGFzc2VkOlwiLCBlbnRpdHksIFwiVGhlIGBzZWxlY3RJZGAgaW1wbGVtZW50YXRpb246XCIsIHNlbGVjdElkLnRvU3RyaW5nKCkpO1xuICB9XG4gIHJldHVybiBrZXk7XG59XG5mdW5jdGlvbiBlbnN1cmVFbnRpdGllc0FycmF5KGVudGl0aWVzKSB7XG4gIGlmICghQXJyYXkuaXNBcnJheShlbnRpdGllcykpIHtcbiAgICBlbnRpdGllcyA9IE9iamVjdC52YWx1ZXMoZW50aXRpZXMpO1xuICB9XG4gIHJldHVybiBlbnRpdGllcztcbn1cbmZ1bmN0aW9uIGdldEN1cnJlbnQodmFsdWUpIHtcbiAgcmV0dXJuIGlzRHJhZnQ0KHZhbHVlKSA/IGN1cnJlbnQyKHZhbHVlKSA6IHZhbHVlO1xufVxuZnVuY3Rpb24gc3BsaXRBZGRlZFVwZGF0ZWRFbnRpdGllcyhuZXdFbnRpdGllcywgc2VsZWN0SWQsIHN0YXRlKSB7XG4gIG5ld0VudGl0aWVzID0gZW5zdXJlRW50aXRpZXNBcnJheShuZXdFbnRpdGllcyk7XG4gIGNvbnN0IGV4aXN0aW5nSWRzQXJyYXkgPSBnZXRDdXJyZW50KHN0YXRlLmlkcyk7XG4gIGNvbnN0IGV4aXN0aW5nSWRzID0gbmV3IFNldChleGlzdGluZ0lkc0FycmF5KTtcbiAgY29uc3QgYWRkZWQgPSBbXTtcbiAgY29uc3QgdXBkYXRlZCA9IFtdO1xuICBmb3IgKGNvbnN0IGVudGl0eSBvZiBuZXdFbnRpdGllcykge1xuICAgIGNvbnN0IGlkID0gc2VsZWN0SWRWYWx1ZShlbnRpdHksIHNlbGVjdElkKTtcbiAgICBpZiAoZXhpc3RpbmdJZHMuaGFzKGlkKSkge1xuICAgICAgdXBkYXRlZC5wdXNoKHtcbiAgICAgICAgaWQsXG4gICAgICAgIGNoYW5nZXM6IGVudGl0eVxuICAgICAgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGFkZGVkLnB1c2goZW50aXR5KTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIFthZGRlZCwgdXBkYXRlZCwgZXhpc3RpbmdJZHNBcnJheV07XG59XG5cbi8vIHNyYy9lbnRpdGllcy91bnNvcnRlZF9zdGF0ZV9hZGFwdGVyLnRzXG5mdW5jdGlvbiBjcmVhdGVVbnNvcnRlZFN0YXRlQWRhcHRlcihzZWxlY3RJZCkge1xuICBmdW5jdGlvbiBhZGRPbmVNdXRhYmx5KGVudGl0eSwgc3RhdGUpIHtcbiAgICBjb25zdCBrZXkgPSBzZWxlY3RJZFZhbHVlKGVudGl0eSwgc2VsZWN0SWQpO1xuICAgIGlmIChrZXkgaW4gc3RhdGUuZW50aXRpZXMpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgc3RhdGUuaWRzLnB1c2goa2V5KTtcbiAgICBzdGF0ZS5lbnRpdGllc1trZXldID0gZW50aXR5O1xuICB9XG4gIGZ1bmN0aW9uIGFkZE1hbnlNdXRhYmx5KG5ld0VudGl0aWVzLCBzdGF0ZSkge1xuICAgIG5ld0VudGl0aWVzID0gZW5zdXJlRW50aXRpZXNBcnJheShuZXdFbnRpdGllcyk7XG4gICAgZm9yIChjb25zdCBlbnRpdHkgb2YgbmV3RW50aXRpZXMpIHtcbiAgICAgIGFkZE9uZU11dGFibHkoZW50aXR5LCBzdGF0ZSk7XG4gICAgfVxuICB9XG4gIGZ1bmN0aW9uIHNldE9uZU11dGFibHkoZW50aXR5LCBzdGF0ZSkge1xuICAgIGNvbnN0IGtleSA9IHNlbGVjdElkVmFsdWUoZW50aXR5LCBzZWxlY3RJZCk7XG4gICAgaWYgKCEoa2V5IGluIHN0YXRlLmVudGl0aWVzKSkge1xuICAgICAgc3RhdGUuaWRzLnB1c2goa2V5KTtcbiAgICB9XG4gICAgO1xuICAgIHN0YXRlLmVudGl0aWVzW2tleV0gPSBlbnRpdHk7XG4gIH1cbiAgZnVuY3Rpb24gc2V0TWFueU11dGFibHkobmV3RW50aXRpZXMsIHN0YXRlKSB7XG4gICAgbmV3RW50aXRpZXMgPSBlbnN1cmVFbnRpdGllc0FycmF5KG5ld0VudGl0aWVzKTtcbiAgICBmb3IgKGNvbnN0IGVudGl0eSBvZiBuZXdFbnRpdGllcykge1xuICAgICAgc2V0T25lTXV0YWJseShlbnRpdHksIHN0YXRlKTtcbiAgICB9XG4gIH1cbiAgZnVuY3Rpb24gc2V0QWxsTXV0YWJseShuZXdFbnRpdGllcywgc3RhdGUpIHtcbiAgICBuZXdFbnRpdGllcyA9IGVuc3VyZUVudGl0aWVzQXJyYXkobmV3RW50aXRpZXMpO1xuICAgIHN0YXRlLmlkcyA9IFtdO1xuICAgIHN0YXRlLmVudGl0aWVzID0ge307XG4gICAgYWRkTWFueU11dGFibHkobmV3RW50aXRpZXMsIHN0YXRlKTtcbiAgfVxuICBmdW5jdGlvbiByZW1vdmVPbmVNdXRhYmx5KGtleSwgc3RhdGUpIHtcbiAgICByZXR1cm4gcmVtb3ZlTWFueU11dGFibHkoW2tleV0sIHN0YXRlKTtcbiAgfVxuICBmdW5jdGlvbiByZW1vdmVNYW55TXV0YWJseShrZXlzLCBzdGF0ZSkge1xuICAgIGxldCBkaWRNdXRhdGUgPSBmYWxzZTtcbiAgICBrZXlzLmZvckVhY2goKGtleSkgPT4ge1xuICAgICAgaWYgKGtleSBpbiBzdGF0ZS5lbnRpdGllcykge1xuICAgICAgICBkZWxldGUgc3RhdGUuZW50aXRpZXNba2V5XTtcbiAgICAgICAgZGlkTXV0YXRlID0gdHJ1ZTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICBpZiAoZGlkTXV0YXRlKSB7XG4gICAgICBzdGF0ZS5pZHMgPSBzdGF0ZS5pZHMuZmlsdGVyKChpZCkgPT4gaWQgaW4gc3RhdGUuZW50aXRpZXMpO1xuICAgIH1cbiAgfVxuICBmdW5jdGlvbiByZW1vdmVBbGxNdXRhYmx5KHN0YXRlKSB7XG4gICAgT2JqZWN0LmFzc2lnbihzdGF0ZSwge1xuICAgICAgaWRzOiBbXSxcbiAgICAgIGVudGl0aWVzOiB7fVxuICAgIH0pO1xuICB9XG4gIGZ1bmN0aW9uIHRha2VOZXdLZXkoa2V5cywgdXBkYXRlLCBzdGF0ZSkge1xuICAgIGNvbnN0IG9yaWdpbmFsMyA9IHN0YXRlLmVudGl0aWVzW3VwZGF0ZS5pZF07XG4gICAgaWYgKG9yaWdpbmFsMyA9PT0gdm9pZCAwKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIGNvbnN0IHVwZGF0ZWQgPSBPYmplY3QuYXNzaWduKHt9LCBvcmlnaW5hbDMsIHVwZGF0ZS5jaGFuZ2VzKTtcbiAgICBjb25zdCBuZXdLZXkgPSBzZWxlY3RJZFZhbHVlKHVwZGF0ZWQsIHNlbGVjdElkKTtcbiAgICBjb25zdCBoYXNOZXdLZXkgPSBuZXdLZXkgIT09IHVwZGF0ZS5pZDtcbiAgICBpZiAoaGFzTmV3S2V5KSB7XG4gICAgICBrZXlzW3VwZGF0ZS5pZF0gPSBuZXdLZXk7XG4gICAgICBkZWxldGUgc3RhdGUuZW50aXRpZXNbdXBkYXRlLmlkXTtcbiAgICB9XG4gICAgO1xuICAgIHN0YXRlLmVudGl0aWVzW25ld0tleV0gPSB1cGRhdGVkO1xuICAgIHJldHVybiBoYXNOZXdLZXk7XG4gIH1cbiAgZnVuY3Rpb24gdXBkYXRlT25lTXV0YWJseSh1cGRhdGUsIHN0YXRlKSB7XG4gICAgcmV0dXJuIHVwZGF0ZU1hbnlNdXRhYmx5KFt1cGRhdGVdLCBzdGF0ZSk7XG4gIH1cbiAgZnVuY3Rpb24gdXBkYXRlTWFueU11dGFibHkodXBkYXRlcywgc3RhdGUpIHtcbiAgICBjb25zdCBuZXdLZXlzID0ge307XG4gICAgY29uc3QgdXBkYXRlc1BlckVudGl0eSA9IHt9O1xuICAgIHVwZGF0ZXMuZm9yRWFjaCgodXBkYXRlKSA9PiB7XG4gICAgICBpZiAodXBkYXRlLmlkIGluIHN0YXRlLmVudGl0aWVzKSB7XG4gICAgICAgIHVwZGF0ZXNQZXJFbnRpdHlbdXBkYXRlLmlkXSA9IHtcbiAgICAgICAgICBpZDogdXBkYXRlLmlkLFxuICAgICAgICAgIC8vIFNwcmVhZHMgaWdub3JlIGZhbHN5IHZhbHVlcywgc28gdGhpcyB3b3JrcyBldmVuIGlmIHRoZXJlIGlzbid0XG4gICAgICAgICAgLy8gYW4gZXhpc3RpbmcgdXBkYXRlIGFscmVhZHkgYXQgdGhpcyBrZXlcbiAgICAgICAgICBjaGFuZ2VzOiB7XG4gICAgICAgICAgICAuLi51cGRhdGVzUGVyRW50aXR5W3VwZGF0ZS5pZF0/LmNoYW5nZXMsXG4gICAgICAgICAgICAuLi51cGRhdGUuY2hhbmdlc1xuICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICB1cGRhdGVzID0gT2JqZWN0LnZhbHVlcyh1cGRhdGVzUGVyRW50aXR5KTtcbiAgICBjb25zdCBkaWRNdXRhdGVFbnRpdGllcyA9IHVwZGF0ZXMubGVuZ3RoID4gMDtcbiAgICBpZiAoZGlkTXV0YXRlRW50aXRpZXMpIHtcbiAgICAgIGNvbnN0IGRpZE11dGF0ZUlkcyA9IHVwZGF0ZXMuZmlsdGVyKCh1cGRhdGUpID0+IHRha2VOZXdLZXkobmV3S2V5cywgdXBkYXRlLCBzdGF0ZSkpLmxlbmd0aCA+IDA7XG4gICAgICBpZiAoZGlkTXV0YXRlSWRzKSB7XG4gICAgICAgIHN0YXRlLmlkcyA9IE9iamVjdC52YWx1ZXMoc3RhdGUuZW50aXRpZXMpLm1hcCgoZSkgPT4gc2VsZWN0SWRWYWx1ZShlLCBzZWxlY3RJZCkpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICBmdW5jdGlvbiB1cHNlcnRPbmVNdXRhYmx5KGVudGl0eSwgc3RhdGUpIHtcbiAgICByZXR1cm4gdXBzZXJ0TWFueU11dGFibHkoW2VudGl0eV0sIHN0YXRlKTtcbiAgfVxuICBmdW5jdGlvbiB1cHNlcnRNYW55TXV0YWJseShuZXdFbnRpdGllcywgc3RhdGUpIHtcbiAgICBjb25zdCBbYWRkZWQsIHVwZGF0ZWRdID0gc3BsaXRBZGRlZFVwZGF0ZWRFbnRpdGllcyhuZXdFbnRpdGllcywgc2VsZWN0SWQsIHN0YXRlKTtcbiAgICB1cGRhdGVNYW55TXV0YWJseSh1cGRhdGVkLCBzdGF0ZSk7XG4gICAgYWRkTWFueU11dGFibHkoYWRkZWQsIHN0YXRlKTtcbiAgfVxuICByZXR1cm4ge1xuICAgIHJlbW92ZUFsbDogY3JlYXRlU2luZ2xlQXJndW1lbnRTdGF0ZU9wZXJhdG9yKHJlbW92ZUFsbE11dGFibHkpLFxuICAgIGFkZE9uZTogY3JlYXRlU3RhdGVPcGVyYXRvcihhZGRPbmVNdXRhYmx5KSxcbiAgICBhZGRNYW55OiBjcmVhdGVTdGF0ZU9wZXJhdG9yKGFkZE1hbnlNdXRhYmx5KSxcbiAgICBzZXRPbmU6IGNyZWF0ZVN0YXRlT3BlcmF0b3Ioc2V0T25lTXV0YWJseSksXG4gICAgc2V0TWFueTogY3JlYXRlU3RhdGVPcGVyYXRvcihzZXRNYW55TXV0YWJseSksXG4gICAgc2V0QWxsOiBjcmVhdGVTdGF0ZU9wZXJhdG9yKHNldEFsbE11dGFibHkpLFxuICAgIHVwZGF0ZU9uZTogY3JlYXRlU3RhdGVPcGVyYXRvcih1cGRhdGVPbmVNdXRhYmx5KSxcbiAgICB1cGRhdGVNYW55OiBjcmVhdGVTdGF0ZU9wZXJhdG9yKHVwZGF0ZU1hbnlNdXRhYmx5KSxcbiAgICB1cHNlcnRPbmU6IGNyZWF0ZVN0YXRlT3BlcmF0b3IodXBzZXJ0T25lTXV0YWJseSksXG4gICAgdXBzZXJ0TWFueTogY3JlYXRlU3RhdGVPcGVyYXRvcih1cHNlcnRNYW55TXV0YWJseSksXG4gICAgcmVtb3ZlT25lOiBjcmVhdGVTdGF0ZU9wZXJhdG9yKHJlbW92ZU9uZU11dGFibHkpLFxuICAgIHJlbW92ZU1hbnk6IGNyZWF0ZVN0YXRlT3BlcmF0b3IocmVtb3ZlTWFueU11dGFibHkpXG4gIH07XG59XG5cbi8vIHNyYy9lbnRpdGllcy9zb3J0ZWRfc3RhdGVfYWRhcHRlci50c1xuZnVuY3Rpb24gZmluZEluc2VydEluZGV4KHNvcnRlZEl0ZW1zLCBpdGVtLCBjb21wYXJpc29uRnVuY3Rpb24pIHtcbiAgbGV0IGxvd0luZGV4ID0gMDtcbiAgbGV0IGhpZ2hJbmRleCA9IHNvcnRlZEl0ZW1zLmxlbmd0aDtcbiAgd2hpbGUgKGxvd0luZGV4IDwgaGlnaEluZGV4KSB7XG4gICAgbGV0IG1pZGRsZUluZGV4ID0gbG93SW5kZXggKyBoaWdoSW5kZXggPj4+IDE7XG4gICAgY29uc3QgY3VycmVudEl0ZW0gPSBzb3J0ZWRJdGVtc1ttaWRkbGVJbmRleF07XG4gICAgY29uc3QgcmVzID0gY29tcGFyaXNvbkZ1bmN0aW9uKGl0ZW0sIGN1cnJlbnRJdGVtKTtcbiAgICBpZiAocmVzID49IDApIHtcbiAgICAgIGxvd0luZGV4ID0gbWlkZGxlSW5kZXggKyAxO1xuICAgIH0gZWxzZSB7XG4gICAgICBoaWdoSW5kZXggPSBtaWRkbGVJbmRleDtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIGxvd0luZGV4O1xufVxuZnVuY3Rpb24gaW5zZXJ0KHNvcnRlZEl0ZW1zLCBpdGVtLCBjb21wYXJpc29uRnVuY3Rpb24pIHtcbiAgY29uc3QgaW5zZXJ0QXRJbmRleCA9IGZpbmRJbnNlcnRJbmRleChzb3J0ZWRJdGVtcywgaXRlbSwgY29tcGFyaXNvbkZ1bmN0aW9uKTtcbiAgc29ydGVkSXRlbXMuc3BsaWNlKGluc2VydEF0SW5kZXgsIDAsIGl0ZW0pO1xuICByZXR1cm4gc29ydGVkSXRlbXM7XG59XG5mdW5jdGlvbiBjcmVhdGVTb3J0ZWRTdGF0ZUFkYXB0ZXIoc2VsZWN0SWQsIGNvbXBhcmVyKSB7XG4gIGNvbnN0IHtcbiAgICByZW1vdmVPbmUsXG4gICAgcmVtb3ZlTWFueSxcbiAgICByZW1vdmVBbGxcbiAgfSA9IGNyZWF0ZVVuc29ydGVkU3RhdGVBZGFwdGVyKHNlbGVjdElkKTtcbiAgZnVuY3Rpb24gYWRkT25lTXV0YWJseShlbnRpdHksIHN0YXRlKSB7XG4gICAgcmV0dXJuIGFkZE1hbnlNdXRhYmx5KFtlbnRpdHldLCBzdGF0ZSk7XG4gIH1cbiAgZnVuY3Rpb24gYWRkTWFueU11dGFibHkobmV3RW50aXRpZXMsIHN0YXRlLCBleGlzdGluZ0lkcykge1xuICAgIG5ld0VudGl0aWVzID0gZW5zdXJlRW50aXRpZXNBcnJheShuZXdFbnRpdGllcyk7XG4gICAgY29uc3QgZXhpc3RpbmdLZXlzID0gbmV3IFNldChleGlzdGluZ0lkcyA/PyBnZXRDdXJyZW50KHN0YXRlLmlkcykpO1xuICAgIGNvbnN0IG1vZGVscyA9IG5ld0VudGl0aWVzLmZpbHRlcigobW9kZWwpID0+ICFleGlzdGluZ0tleXMuaGFzKHNlbGVjdElkVmFsdWUobW9kZWwsIHNlbGVjdElkKSkpO1xuICAgIGlmIChtb2RlbHMubGVuZ3RoICE9PSAwKSB7XG4gICAgICBtZXJnZUZ1bmN0aW9uKHN0YXRlLCBtb2RlbHMpO1xuICAgIH1cbiAgfVxuICBmdW5jdGlvbiBzZXRPbmVNdXRhYmx5KGVudGl0eSwgc3RhdGUpIHtcbiAgICByZXR1cm4gc2V0TWFueU11dGFibHkoW2VudGl0eV0sIHN0YXRlKTtcbiAgfVxuICBmdW5jdGlvbiBzZXRNYW55TXV0YWJseShuZXdFbnRpdGllcywgc3RhdGUpIHtcbiAgICBuZXdFbnRpdGllcyA9IGVuc3VyZUVudGl0aWVzQXJyYXkobmV3RW50aXRpZXMpO1xuICAgIGlmIChuZXdFbnRpdGllcy5sZW5ndGggIT09IDApIHtcbiAgICAgIGZvciAoY29uc3QgaXRlbSBvZiBuZXdFbnRpdGllcykge1xuICAgICAgICBkZWxldGUgc3RhdGUuZW50aXRpZXNbc2VsZWN0SWQoaXRlbSldO1xuICAgICAgfVxuICAgICAgbWVyZ2VGdW5jdGlvbihzdGF0ZSwgbmV3RW50aXRpZXMpO1xuICAgIH1cbiAgfVxuICBmdW5jdGlvbiBzZXRBbGxNdXRhYmx5KG5ld0VudGl0aWVzLCBzdGF0ZSkge1xuICAgIG5ld0VudGl0aWVzID0gZW5zdXJlRW50aXRpZXNBcnJheShuZXdFbnRpdGllcyk7XG4gICAgc3RhdGUuZW50aXRpZXMgPSB7fTtcbiAgICBzdGF0ZS5pZHMgPSBbXTtcbiAgICBhZGRNYW55TXV0YWJseShuZXdFbnRpdGllcywgc3RhdGUsIFtdKTtcbiAgfVxuICBmdW5jdGlvbiB1cGRhdGVPbmVNdXRhYmx5KHVwZGF0ZSwgc3RhdGUpIHtcbiAgICByZXR1cm4gdXBkYXRlTWFueU11dGFibHkoW3VwZGF0ZV0sIHN0YXRlKTtcbiAgfVxuICBmdW5jdGlvbiB1cGRhdGVNYW55TXV0YWJseSh1cGRhdGVzLCBzdGF0ZSkge1xuICAgIGxldCBhcHBsaWVkVXBkYXRlcyA9IGZhbHNlO1xuICAgIGxldCByZXBsYWNlZElkcyA9IGZhbHNlO1xuICAgIGZvciAobGV0IHVwZGF0ZSBvZiB1cGRhdGVzKSB7XG4gICAgICBjb25zdCBlbnRpdHkgPSBzdGF0ZS5lbnRpdGllc1t1cGRhdGUuaWRdO1xuICAgICAgaWYgKCFlbnRpdHkpIHtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG4gICAgICBhcHBsaWVkVXBkYXRlcyA9IHRydWU7XG4gICAgICBPYmplY3QuYXNzaWduKGVudGl0eSwgdXBkYXRlLmNoYW5nZXMpO1xuICAgICAgY29uc3QgbmV3SWQgPSBzZWxlY3RJZChlbnRpdHkpO1xuICAgICAgaWYgKHVwZGF0ZS5pZCAhPT0gbmV3SWQpIHtcbiAgICAgICAgcmVwbGFjZWRJZHMgPSB0cnVlO1xuICAgICAgICBkZWxldGUgc3RhdGUuZW50aXRpZXNbdXBkYXRlLmlkXTtcbiAgICAgICAgY29uc3Qgb2xkSW5kZXggPSBzdGF0ZS5pZHMuaW5kZXhPZih1cGRhdGUuaWQpO1xuICAgICAgICBzdGF0ZS5pZHNbb2xkSW5kZXhdID0gbmV3SWQ7XG4gICAgICAgIHN0YXRlLmVudGl0aWVzW25ld0lkXSA9IGVudGl0eTtcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKGFwcGxpZWRVcGRhdGVzKSB7XG4gICAgICBtZXJnZUZ1bmN0aW9uKHN0YXRlLCBbXSwgYXBwbGllZFVwZGF0ZXMsIHJlcGxhY2VkSWRzKTtcbiAgICB9XG4gIH1cbiAgZnVuY3Rpb24gdXBzZXJ0T25lTXV0YWJseShlbnRpdHksIHN0YXRlKSB7XG4gICAgcmV0dXJuIHVwc2VydE1hbnlNdXRhYmx5KFtlbnRpdHldLCBzdGF0ZSk7XG4gIH1cbiAgZnVuY3Rpb24gdXBzZXJ0TWFueU11dGFibHkobmV3RW50aXRpZXMsIHN0YXRlKSB7XG4gICAgY29uc3QgW2FkZGVkLCB1cGRhdGVkLCBleGlzdGluZ0lkc0FycmF5XSA9IHNwbGl0QWRkZWRVcGRhdGVkRW50aXRpZXMobmV3RW50aXRpZXMsIHNlbGVjdElkLCBzdGF0ZSk7XG4gICAgaWYgKHVwZGF0ZWQubGVuZ3RoKSB7XG4gICAgICB1cGRhdGVNYW55TXV0YWJseSh1cGRhdGVkLCBzdGF0ZSk7XG4gICAgfVxuICAgIGlmIChhZGRlZC5sZW5ndGgpIHtcbiAgICAgIGFkZE1hbnlNdXRhYmx5KGFkZGVkLCBzdGF0ZSwgZXhpc3RpbmdJZHNBcnJheSk7XG4gICAgfVxuICB9XG4gIGZ1bmN0aW9uIGFyZUFycmF5c0VxdWFsKGEsIGIpIHtcbiAgICBpZiAoYS5sZW5ndGggIT09IGIubGVuZ3RoKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgYS5sZW5ndGg7IGkrKykge1xuICAgICAgaWYgKGFbaV0gPT09IGJbaV0pIHtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIHJldHVybiB0cnVlO1xuICB9XG4gIGNvbnN0IG1lcmdlRnVuY3Rpb24gPSAoc3RhdGUsIGFkZGVkSXRlbXMsIGFwcGxpZWRVcGRhdGVzLCByZXBsYWNlZElkcykgPT4ge1xuICAgIGNvbnN0IGN1cnJlbnRFbnRpdGllcyA9IGdldEN1cnJlbnQoc3RhdGUuZW50aXRpZXMpO1xuICAgIGNvbnN0IGN1cnJlbnRJZHMgPSBnZXRDdXJyZW50KHN0YXRlLmlkcyk7XG4gICAgY29uc3Qgc3RhdGVFbnRpdGllcyA9IHN0YXRlLmVudGl0aWVzO1xuICAgIGxldCBpZHMgPSBjdXJyZW50SWRzO1xuICAgIGlmIChyZXBsYWNlZElkcykge1xuICAgICAgaWRzID0gbmV3IFNldChjdXJyZW50SWRzKTtcbiAgICB9XG4gICAgbGV0IHNvcnRlZEVudGl0aWVzID0gW107XG4gICAgZm9yIChjb25zdCBpZCBvZiBpZHMpIHtcbiAgICAgIGNvbnN0IGVudGl0eSA9IGN1cnJlbnRFbnRpdGllc1tpZF07XG4gICAgICBpZiAoZW50aXR5KSB7XG4gICAgICAgIHNvcnRlZEVudGl0aWVzLnB1c2goZW50aXR5KTtcbiAgICAgIH1cbiAgICB9XG4gICAgY29uc3Qgd2FzUHJldmlvdXNseUVtcHR5ID0gc29ydGVkRW50aXRpZXMubGVuZ3RoID09PSAwO1xuICAgIGZvciAoY29uc3QgaXRlbSBvZiBhZGRlZEl0ZW1zKSB7XG4gICAgICBzdGF0ZUVudGl0aWVzW3NlbGVjdElkKGl0ZW0pXSA9IGl0ZW07XG4gICAgICBpZiAoIXdhc1ByZXZpb3VzbHlFbXB0eSkge1xuICAgICAgICBpbnNlcnQoc29ydGVkRW50aXRpZXMsIGl0ZW0sIGNvbXBhcmVyKTtcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKHdhc1ByZXZpb3VzbHlFbXB0eSkge1xuICAgICAgc29ydGVkRW50aXRpZXMgPSBhZGRlZEl0ZW1zLnNsaWNlKCkuc29ydChjb21wYXJlcik7XG4gICAgfSBlbHNlIGlmIChhcHBsaWVkVXBkYXRlcykge1xuICAgICAgc29ydGVkRW50aXRpZXMuc29ydChjb21wYXJlcik7XG4gICAgfVxuICAgIGNvbnN0IG5ld1NvcnRlZElkcyA9IHNvcnRlZEVudGl0aWVzLm1hcChzZWxlY3RJZCk7XG4gICAgaWYgKCFhcmVBcnJheXNFcXVhbChjdXJyZW50SWRzLCBuZXdTb3J0ZWRJZHMpKSB7XG4gICAgICBzdGF0ZS5pZHMgPSBuZXdTb3J0ZWRJZHM7XG4gICAgfVxuICB9O1xuICByZXR1cm4ge1xuICAgIHJlbW92ZU9uZSxcbiAgICByZW1vdmVNYW55LFxuICAgIHJlbW92ZUFsbCxcbiAgICBhZGRPbmU6IGNyZWF0ZVN0YXRlT3BlcmF0b3IoYWRkT25lTXV0YWJseSksXG4gICAgdXBkYXRlT25lOiBjcmVhdGVTdGF0ZU9wZXJhdG9yKHVwZGF0ZU9uZU11dGFibHkpLFxuICAgIHVwc2VydE9uZTogY3JlYXRlU3RhdGVPcGVyYXRvcih1cHNlcnRPbmVNdXRhYmx5KSxcbiAgICBzZXRPbmU6IGNyZWF0ZVN0YXRlT3BlcmF0b3Ioc2V0T25lTXV0YWJseSksXG4gICAgc2V0TWFueTogY3JlYXRlU3RhdGVPcGVyYXRvcihzZXRNYW55TXV0YWJseSksXG4gICAgc2V0QWxsOiBjcmVhdGVTdGF0ZU9wZXJhdG9yKHNldEFsbE11dGFibHkpLFxuICAgIGFkZE1hbnk6IGNyZWF0ZVN0YXRlT3BlcmF0b3IoYWRkTWFueU11dGFibHkpLFxuICAgIHVwZGF0ZU1hbnk6IGNyZWF0ZVN0YXRlT3BlcmF0b3IodXBkYXRlTWFueU11dGFibHkpLFxuICAgIHVwc2VydE1hbnk6IGNyZWF0ZVN0YXRlT3BlcmF0b3IodXBzZXJ0TWFueU11dGFibHkpXG4gIH07XG59XG5cbi8vIHNyYy9lbnRpdGllcy9jcmVhdGVfYWRhcHRlci50c1xuZnVuY3Rpb24gY3JlYXRlRW50aXR5QWRhcHRlcihvcHRpb25zID0ge30pIHtcbiAgY29uc3Qge1xuICAgIHNlbGVjdElkLFxuICAgIHNvcnRDb21wYXJlclxuICB9ID0ge1xuICAgIHNvcnRDb21wYXJlcjogZmFsc2UsXG4gICAgc2VsZWN0SWQ6IChpbnN0YW5jZSkgPT4gaW5zdGFuY2UuaWQsXG4gICAgLi4ub3B0aW9uc1xuICB9O1xuICBjb25zdCBzdGF0ZUFkYXB0ZXIgPSBzb3J0Q29tcGFyZXIgPyBjcmVhdGVTb3J0ZWRTdGF0ZUFkYXB0ZXIoc2VsZWN0SWQsIHNvcnRDb21wYXJlcikgOiBjcmVhdGVVbnNvcnRlZFN0YXRlQWRhcHRlcihzZWxlY3RJZCk7XG4gIGNvbnN0IHN0YXRlRmFjdG9yeSA9IGNyZWF0ZUluaXRpYWxTdGF0ZUZhY3Rvcnkoc3RhdGVBZGFwdGVyKTtcbiAgY29uc3Qgc2VsZWN0b3JzRmFjdG9yeSA9IGNyZWF0ZVNlbGVjdG9yc0ZhY3RvcnkoKTtcbiAgcmV0dXJuIHtcbiAgICBzZWxlY3RJZCxcbiAgICBzb3J0Q29tcGFyZXIsXG4gICAgLi4uc3RhdGVGYWN0b3J5LFxuICAgIC4uLnNlbGVjdG9yc0ZhY3RvcnksXG4gICAgLi4uc3RhdGVBZGFwdGVyXG4gIH07XG59XG5cbi8vIHNyYy9saXN0ZW5lck1pZGRsZXdhcmUvaW5kZXgudHNcbmltcG9ydCB7IGlzQWN0aW9uIGFzIGlzQWN0aW9uMyB9IGZyb20gXCJyZWR1eFwiO1xuXG4vLyBzcmMvbGlzdGVuZXJNaWRkbGV3YXJlL2V4Y2VwdGlvbnMudHNcbnZhciB0YXNrID0gXCJ0YXNrXCI7XG52YXIgbGlzdGVuZXIgPSBcImxpc3RlbmVyXCI7XG52YXIgY29tcGxldGVkID0gXCJjb21wbGV0ZWRcIjtcbnZhciBjYW5jZWxsZWQgPSBcImNhbmNlbGxlZFwiO1xudmFyIHRhc2tDYW5jZWxsZWQgPSBgdGFzay0ke2NhbmNlbGxlZH1gO1xudmFyIHRhc2tDb21wbGV0ZWQgPSBgdGFzay0ke2NvbXBsZXRlZH1gO1xudmFyIGxpc3RlbmVyQ2FuY2VsbGVkID0gYCR7bGlzdGVuZXJ9LSR7Y2FuY2VsbGVkfWA7XG52YXIgbGlzdGVuZXJDb21wbGV0ZWQgPSBgJHtsaXN0ZW5lcn0tJHtjb21wbGV0ZWR9YDtcbnZhciBUYXNrQWJvcnRFcnJvciA9IGNsYXNzIHtcbiAgY29uc3RydWN0b3IoY29kZSkge1xuICAgIHRoaXMuY29kZSA9IGNvZGU7XG4gICAgdGhpcy5tZXNzYWdlID0gYCR7dGFza30gJHtjYW5jZWxsZWR9IChyZWFzb246ICR7Y29kZX0pYDtcbiAgfVxuICBuYW1lID0gXCJUYXNrQWJvcnRFcnJvclwiO1xuICBtZXNzYWdlO1xufTtcblxuLy8gc3JjL2xpc3RlbmVyTWlkZGxld2FyZS91dGlscy50c1xudmFyIGFzc2VydEZ1bmN0aW9uID0gKGZ1bmMsIGV4cGVjdGVkKSA9PiB7XG4gIGlmICh0eXBlb2YgZnVuYyAhPT0gXCJmdW5jdGlvblwiKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcihwcm9jZXNzLmVudi5OT0RFX0VOViA9PT0gXCJwcm9kdWN0aW9uXCIgPyBmb3JtYXRQcm9kRXJyb3JNZXNzYWdlKDMyKSA6IGAke2V4cGVjdGVkfSBpcyBub3QgYSBmdW5jdGlvbmApO1xuICB9XG59O1xudmFyIG5vb3AyID0gKCkgPT4ge1xufTtcbnZhciBjYXRjaFJlamVjdGlvbiA9IChwcm9taXNlLCBvbkVycm9yID0gbm9vcDIpID0+IHtcbiAgcHJvbWlzZS5jYXRjaChvbkVycm9yKTtcbiAgcmV0dXJuIHByb21pc2U7XG59O1xudmFyIGFkZEFib3J0U2lnbmFsTGlzdGVuZXIgPSAoYWJvcnRTaWduYWwsIGNhbGxiYWNrKSA9PiB7XG4gIGFib3J0U2lnbmFsLmFkZEV2ZW50TGlzdGVuZXIoXCJhYm9ydFwiLCBjYWxsYmFjaywge1xuICAgIG9uY2U6IHRydWVcbiAgfSk7XG4gIHJldHVybiAoKSA9PiBhYm9ydFNpZ25hbC5yZW1vdmVFdmVudExpc3RlbmVyKFwiYWJvcnRcIiwgY2FsbGJhY2spO1xufTtcbnZhciBhYm9ydENvbnRyb2xsZXJXaXRoUmVhc29uID0gKGFib3J0Q29udHJvbGxlciwgcmVhc29uKSA9PiB7XG4gIGNvbnN0IHNpZ25hbCA9IGFib3J0Q29udHJvbGxlci5zaWduYWw7XG4gIGlmIChzaWduYWwuYWJvcnRlZCkge1xuICAgIHJldHVybjtcbiAgfVxuICBpZiAoIShcInJlYXNvblwiIGluIHNpZ25hbCkpIHtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoc2lnbmFsLCBcInJlYXNvblwiLCB7XG4gICAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgICAgdmFsdWU6IHJlYXNvbixcbiAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcbiAgICAgIHdyaXRhYmxlOiB0cnVlXG4gICAgfSk7XG4gIH1cbiAgO1xuICBhYm9ydENvbnRyb2xsZXIuYWJvcnQocmVhc29uKTtcbn07XG5cbi8vIHNyYy9saXN0ZW5lck1pZGRsZXdhcmUvdGFzay50c1xudmFyIHZhbGlkYXRlQWN0aXZlID0gKHNpZ25hbCkgPT4ge1xuICBpZiAoc2lnbmFsLmFib3J0ZWQpIHtcbiAgICBjb25zdCB7XG4gICAgICByZWFzb25cbiAgICB9ID0gc2lnbmFsO1xuICAgIHRocm93IG5ldyBUYXNrQWJvcnRFcnJvcihyZWFzb24pO1xuICB9XG59O1xuZnVuY3Rpb24gcmFjZVdpdGhTaWduYWwoc2lnbmFsLCBwcm9taXNlKSB7XG4gIGxldCBjbGVhbnVwID0gbm9vcDI7XG4gIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgY29uc3Qgbm90aWZ5UmVqZWN0aW9uID0gKCkgPT4gcmVqZWN0KG5ldyBUYXNrQWJvcnRFcnJvcihzaWduYWwucmVhc29uKSk7XG4gICAgaWYgKHNpZ25hbC5hYm9ydGVkKSB7XG4gICAgICBub3RpZnlSZWplY3Rpb24oKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY2xlYW51cCA9IGFkZEFib3J0U2lnbmFsTGlzdGVuZXIoc2lnbmFsLCBub3RpZnlSZWplY3Rpb24pO1xuICAgIHByb21pc2UuZmluYWxseSgoKSA9PiBjbGVhbnVwKCkpLnRoZW4ocmVzb2x2ZSwgcmVqZWN0KTtcbiAgfSkuZmluYWxseSgoKSA9PiB7XG4gICAgY2xlYW51cCA9IG5vb3AyO1xuICB9KTtcbn1cbnZhciBydW5UYXNrID0gYXN5bmMgKHRhc2syLCBjbGVhblVwKSA9PiB7XG4gIHRyeSB7XG4gICAgYXdhaXQgUHJvbWlzZS5yZXNvbHZlKCk7XG4gICAgY29uc3QgdmFsdWUgPSBhd2FpdCB0YXNrMigpO1xuICAgIHJldHVybiB7XG4gICAgICBzdGF0dXM6IFwib2tcIixcbiAgICAgIHZhbHVlXG4gICAgfTtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICByZXR1cm4ge1xuICAgICAgc3RhdHVzOiBlcnJvciBpbnN0YW5jZW9mIFRhc2tBYm9ydEVycm9yID8gXCJjYW5jZWxsZWRcIiA6IFwicmVqZWN0ZWRcIixcbiAgICAgIGVycm9yXG4gICAgfTtcbiAgfSBmaW5hbGx5IHtcbiAgICBjbGVhblVwPy4oKTtcbiAgfVxufTtcbnZhciBjcmVhdGVQYXVzZSA9IChzaWduYWwpID0+IHtcbiAgcmV0dXJuIChwcm9taXNlKSA9PiB7XG4gICAgcmV0dXJuIGNhdGNoUmVqZWN0aW9uKHJhY2VXaXRoU2lnbmFsKHNpZ25hbCwgcHJvbWlzZSkudGhlbigob3V0cHV0KSA9PiB7XG4gICAgICB2YWxpZGF0ZUFjdGl2ZShzaWduYWwpO1xuICAgICAgcmV0dXJuIG91dHB1dDtcbiAgICB9KSk7XG4gIH07XG59O1xudmFyIGNyZWF0ZURlbGF5ID0gKHNpZ25hbCkgPT4ge1xuICBjb25zdCBwYXVzZSA9IGNyZWF0ZVBhdXNlKHNpZ25hbCk7XG4gIHJldHVybiAodGltZW91dE1zKSA9PiB7XG4gICAgcmV0dXJuIHBhdXNlKG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiBzZXRUaW1lb3V0KHJlc29sdmUsIHRpbWVvdXRNcykpKTtcbiAgfTtcbn07XG5cbi8vIHNyYy9saXN0ZW5lck1pZGRsZXdhcmUvaW5kZXgudHNcbnZhciB7XG4gIGFzc2lnblxufSA9IE9iamVjdDtcbnZhciBJTlRFUk5BTF9OSUxfVE9LRU4gPSB7fTtcbnZhciBhbG0gPSBcImxpc3RlbmVyTWlkZGxld2FyZVwiO1xudmFyIGNyZWF0ZUZvcmsgPSAocGFyZW50QWJvcnRTaWduYWwsIHBhcmVudEJsb2NraW5nUHJvbWlzZXMpID0+IHtcbiAgY29uc3QgbGlua0NvbnRyb2xsZXJzID0gKGNvbnRyb2xsZXIpID0+IGFkZEFib3J0U2lnbmFsTGlzdGVuZXIocGFyZW50QWJvcnRTaWduYWwsICgpID0+IGFib3J0Q29udHJvbGxlcldpdGhSZWFzb24oY29udHJvbGxlciwgcGFyZW50QWJvcnRTaWduYWwucmVhc29uKSk7XG4gIHJldHVybiAodGFza0V4ZWN1dG9yLCBvcHRzKSA9PiB7XG4gICAgYXNzZXJ0RnVuY3Rpb24odGFza0V4ZWN1dG9yLCBcInRhc2tFeGVjdXRvclwiKTtcbiAgICBjb25zdCBjaGlsZEFib3J0Q29udHJvbGxlciA9IG5ldyBBYm9ydENvbnRyb2xsZXIoKTtcbiAgICBsaW5rQ29udHJvbGxlcnMoY2hpbGRBYm9ydENvbnRyb2xsZXIpO1xuICAgIGNvbnN0IHJlc3VsdCA9IHJ1blRhc2soYXN5bmMgKCkgPT4ge1xuICAgICAgdmFsaWRhdGVBY3RpdmUocGFyZW50QWJvcnRTaWduYWwpO1xuICAgICAgdmFsaWRhdGVBY3RpdmUoY2hpbGRBYm9ydENvbnRyb2xsZXIuc2lnbmFsKTtcbiAgICAgIGNvbnN0IHJlc3VsdDIgPSBhd2FpdCB0YXNrRXhlY3V0b3Ioe1xuICAgICAgICBwYXVzZTogY3JlYXRlUGF1c2UoY2hpbGRBYm9ydENvbnRyb2xsZXIuc2lnbmFsKSxcbiAgICAgICAgZGVsYXk6IGNyZWF0ZURlbGF5KGNoaWxkQWJvcnRDb250cm9sbGVyLnNpZ25hbCksXG4gICAgICAgIHNpZ25hbDogY2hpbGRBYm9ydENvbnRyb2xsZXIuc2lnbmFsXG4gICAgICB9KTtcbiAgICAgIHZhbGlkYXRlQWN0aXZlKGNoaWxkQWJvcnRDb250cm9sbGVyLnNpZ25hbCk7XG4gICAgICByZXR1cm4gcmVzdWx0MjtcbiAgICB9LCAoKSA9PiBhYm9ydENvbnRyb2xsZXJXaXRoUmVhc29uKGNoaWxkQWJvcnRDb250cm9sbGVyLCB0YXNrQ29tcGxldGVkKSk7XG4gICAgaWYgKG9wdHM/LmF1dG9Kb2luKSB7XG4gICAgICBwYXJlbnRCbG9ja2luZ1Byb21pc2VzLnB1c2gocmVzdWx0LmNhdGNoKG5vb3AyKSk7XG4gICAgfVxuICAgIHJldHVybiB7XG4gICAgICByZXN1bHQ6IGNyZWF0ZVBhdXNlKHBhcmVudEFib3J0U2lnbmFsKShyZXN1bHQpLFxuICAgICAgY2FuY2VsKCkge1xuICAgICAgICBhYm9ydENvbnRyb2xsZXJXaXRoUmVhc29uKGNoaWxkQWJvcnRDb250cm9sbGVyLCB0YXNrQ2FuY2VsbGVkKTtcbiAgICAgIH1cbiAgICB9O1xuICB9O1xufTtcbnZhciBjcmVhdGVUYWtlUGF0dGVybiA9IChzdGFydExpc3RlbmluZywgc2lnbmFsKSA9PiB7XG4gIGNvbnN0IHRha2UgPSBhc3luYyAocHJlZGljYXRlLCB0aW1lb3V0KSA9PiB7XG4gICAgdmFsaWRhdGVBY3RpdmUoc2lnbmFsKTtcbiAgICBsZXQgdW5zdWJzY3JpYmUgPSAoKSA9PiB7XG4gICAgfTtcbiAgICBjb25zdCB0dXBsZVByb21pc2UgPSBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICBsZXQgc3RvcExpc3RlbmluZyA9IHN0YXJ0TGlzdGVuaW5nKHtcbiAgICAgICAgcHJlZGljYXRlLFxuICAgICAgICBlZmZlY3Q6IChhY3Rpb24sIGxpc3RlbmVyQXBpKSA9PiB7XG4gICAgICAgICAgbGlzdGVuZXJBcGkudW5zdWJzY3JpYmUoKTtcbiAgICAgICAgICByZXNvbHZlKFthY3Rpb24sIGxpc3RlbmVyQXBpLmdldFN0YXRlKCksIGxpc3RlbmVyQXBpLmdldE9yaWdpbmFsU3RhdGUoKV0pO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICAgIHVuc3Vic2NyaWJlID0gKCkgPT4ge1xuICAgICAgICBzdG9wTGlzdGVuaW5nKCk7XG4gICAgICAgIHJlamVjdCgpO1xuICAgICAgfTtcbiAgICB9KTtcbiAgICBjb25zdCBwcm9taXNlcyA9IFt0dXBsZVByb21pc2VdO1xuICAgIGlmICh0aW1lb3V0ICE9IG51bGwpIHtcbiAgICAgIHByb21pc2VzLnB1c2gobmV3IFByb21pc2UoKHJlc29sdmUpID0+IHNldFRpbWVvdXQocmVzb2x2ZSwgdGltZW91dCwgbnVsbCkpKTtcbiAgICB9XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IG91dHB1dCA9IGF3YWl0IHJhY2VXaXRoU2lnbmFsKHNpZ25hbCwgUHJvbWlzZS5yYWNlKHByb21pc2VzKSk7XG4gICAgICB2YWxpZGF0ZUFjdGl2ZShzaWduYWwpO1xuICAgICAgcmV0dXJuIG91dHB1dDtcbiAgICB9IGZpbmFsbHkge1xuICAgICAgdW5zdWJzY3JpYmUoKTtcbiAgICB9XG4gIH07XG4gIHJldHVybiAocHJlZGljYXRlLCB0aW1lb3V0KSA9PiBjYXRjaFJlamVjdGlvbih0YWtlKHByZWRpY2F0ZSwgdGltZW91dCkpO1xufTtcbnZhciBnZXRMaXN0ZW5lckVudHJ5UHJvcHNGcm9tID0gKG9wdGlvbnMpID0+IHtcbiAgbGV0IHtcbiAgICB0eXBlLFxuICAgIGFjdGlvbkNyZWF0b3IsXG4gICAgbWF0Y2hlcixcbiAgICBwcmVkaWNhdGUsXG4gICAgZWZmZWN0XG4gIH0gPSBvcHRpb25zO1xuICBpZiAodHlwZSkge1xuICAgIHByZWRpY2F0ZSA9IGNyZWF0ZUFjdGlvbih0eXBlKS5tYXRjaDtcbiAgfSBlbHNlIGlmIChhY3Rpb25DcmVhdG9yKSB7XG4gICAgdHlwZSA9IGFjdGlvbkNyZWF0b3IudHlwZTtcbiAgICBwcmVkaWNhdGUgPSBhY3Rpb25DcmVhdG9yLm1hdGNoO1xuICB9IGVsc2UgaWYgKG1hdGNoZXIpIHtcbiAgICBwcmVkaWNhdGUgPSBtYXRjaGVyO1xuICB9IGVsc2UgaWYgKHByZWRpY2F0ZSkge1xuICB9IGVsc2Uge1xuICAgIHRocm93IG5ldyBFcnJvcihwcm9jZXNzLmVudi5OT0RFX0VOViA9PT0gXCJwcm9kdWN0aW9uXCIgPyBmb3JtYXRQcm9kRXJyb3JNZXNzYWdlKDIxKSA6IFwiQ3JlYXRpbmcgb3IgcmVtb3ZpbmcgYSBsaXN0ZW5lciByZXF1aXJlcyBvbmUgb2YgdGhlIGtub3duIGZpZWxkcyBmb3IgbWF0Y2hpbmcgYW4gYWN0aW9uXCIpO1xuICB9XG4gIGFzc2VydEZ1bmN0aW9uKGVmZmVjdCwgXCJvcHRpb25zLmxpc3RlbmVyXCIpO1xuICByZXR1cm4ge1xuICAgIHByZWRpY2F0ZSxcbiAgICB0eXBlLFxuICAgIGVmZmVjdFxuICB9O1xufTtcbnZhciBjcmVhdGVMaXN0ZW5lckVudHJ5ID0gLyogQF9fUFVSRV9fICovIGFzc2lnbigob3B0aW9ucykgPT4ge1xuICBjb25zdCB7XG4gICAgdHlwZSxcbiAgICBwcmVkaWNhdGUsXG4gICAgZWZmZWN0XG4gIH0gPSBnZXRMaXN0ZW5lckVudHJ5UHJvcHNGcm9tKG9wdGlvbnMpO1xuICBjb25zdCBlbnRyeSA9IHtcbiAgICBpZDogbmFub2lkKCksXG4gICAgZWZmZWN0LFxuICAgIHR5cGUsXG4gICAgcHJlZGljYXRlLFxuICAgIHBlbmRpbmc6IC8qIEBfX1BVUkVfXyAqLyBuZXcgU2V0KCksXG4gICAgdW5zdWJzY3JpYmU6ICgpID0+IHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihwcm9jZXNzLmVudi5OT0RFX0VOViA9PT0gXCJwcm9kdWN0aW9uXCIgPyBmb3JtYXRQcm9kRXJyb3JNZXNzYWdlKDIyKSA6IFwiVW5zdWJzY3JpYmUgbm90IGluaXRpYWxpemVkXCIpO1xuICAgIH1cbiAgfTtcbiAgcmV0dXJuIGVudHJ5O1xufSwge1xuICB3aXRoVHlwZXM6ICgpID0+IGNyZWF0ZUxpc3RlbmVyRW50cnlcbn0pO1xudmFyIGZpbmRMaXN0ZW5lckVudHJ5ID0gKGxpc3RlbmVyTWFwLCBvcHRpb25zKSA9PiB7XG4gIGNvbnN0IHtcbiAgICB0eXBlLFxuICAgIGVmZmVjdCxcbiAgICBwcmVkaWNhdGVcbiAgfSA9IGdldExpc3RlbmVyRW50cnlQcm9wc0Zyb20ob3B0aW9ucyk7XG4gIHJldHVybiBBcnJheS5mcm9tKGxpc3RlbmVyTWFwLnZhbHVlcygpKS5maW5kKChlbnRyeSkgPT4ge1xuICAgIGNvbnN0IG1hdGNoUHJlZGljYXRlT3JUeXBlID0gdHlwZW9mIHR5cGUgPT09IFwic3RyaW5nXCIgPyBlbnRyeS50eXBlID09PSB0eXBlIDogZW50cnkucHJlZGljYXRlID09PSBwcmVkaWNhdGU7XG4gICAgcmV0dXJuIG1hdGNoUHJlZGljYXRlT3JUeXBlICYmIGVudHJ5LmVmZmVjdCA9PT0gZWZmZWN0O1xuICB9KTtcbn07XG52YXIgY2FuY2VsQWN0aXZlTGlzdGVuZXJzID0gKGVudHJ5KSA9PiB7XG4gIGVudHJ5LnBlbmRpbmcuZm9yRWFjaCgoY29udHJvbGxlcikgPT4ge1xuICAgIGFib3J0Q29udHJvbGxlcldpdGhSZWFzb24oY29udHJvbGxlciwgbGlzdGVuZXJDYW5jZWxsZWQpO1xuICB9KTtcbn07XG52YXIgY3JlYXRlQ2xlYXJMaXN0ZW5lck1pZGRsZXdhcmUgPSAobGlzdGVuZXJNYXApID0+IHtcbiAgcmV0dXJuICgpID0+IHtcbiAgICBsaXN0ZW5lck1hcC5mb3JFYWNoKGNhbmNlbEFjdGl2ZUxpc3RlbmVycyk7XG4gICAgbGlzdGVuZXJNYXAuY2xlYXIoKTtcbiAgfTtcbn07XG52YXIgc2FmZWx5Tm90aWZ5RXJyb3IgPSAoZXJyb3JIYW5kbGVyLCBlcnJvclRvTm90aWZ5LCBlcnJvckluZm8pID0+IHtcbiAgdHJ5IHtcbiAgICBlcnJvckhhbmRsZXIoZXJyb3JUb05vdGlmeSwgZXJyb3JJbmZvKTtcbiAgfSBjYXRjaCAoZXJyb3JIYW5kbGVyRXJyb3IpIHtcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIHRocm93IGVycm9ySGFuZGxlckVycm9yO1xuICAgIH0sIDApO1xuICB9XG59O1xudmFyIGFkZExpc3RlbmVyID0gLyogQF9fUFVSRV9fICovIGFzc2lnbigvKiBAX19QVVJFX18gKi8gY3JlYXRlQWN0aW9uKGAke2FsbX0vYWRkYCksIHtcbiAgd2l0aFR5cGVzOiAoKSA9PiBhZGRMaXN0ZW5lclxufSk7XG52YXIgY2xlYXJBbGxMaXN0ZW5lcnMgPSAvKiBAX19QVVJFX18gKi8gY3JlYXRlQWN0aW9uKGAke2FsbX0vcmVtb3ZlQWxsYCk7XG52YXIgcmVtb3ZlTGlzdGVuZXIgPSAvKiBAX19QVVJFX18gKi8gYXNzaWduKC8qIEBfX1BVUkVfXyAqLyBjcmVhdGVBY3Rpb24oYCR7YWxtfS9yZW1vdmVgKSwge1xuICB3aXRoVHlwZXM6ICgpID0+IHJlbW92ZUxpc3RlbmVyXG59KTtcbnZhciBkZWZhdWx0RXJyb3JIYW5kbGVyID0gKC4uLmFyZ3MpID0+IHtcbiAgY29uc29sZS5lcnJvcihgJHthbG19L2Vycm9yYCwgLi4uYXJncyk7XG59O1xudmFyIGNyZWF0ZUxpc3RlbmVyTWlkZGxld2FyZSA9IChtaWRkbGV3YXJlT3B0aW9ucyA9IHt9KSA9PiB7XG4gIGNvbnN0IGxpc3RlbmVyTWFwID0gLyogQF9fUFVSRV9fICovIG5ldyBNYXAoKTtcbiAgY29uc3Qge1xuICAgIGV4dHJhLFxuICAgIG9uRXJyb3IgPSBkZWZhdWx0RXJyb3JIYW5kbGVyXG4gIH0gPSBtaWRkbGV3YXJlT3B0aW9ucztcbiAgYXNzZXJ0RnVuY3Rpb24ob25FcnJvciwgXCJvbkVycm9yXCIpO1xuICBjb25zdCBpbnNlcnRFbnRyeSA9IChlbnRyeSkgPT4ge1xuICAgIGVudHJ5LnVuc3Vic2NyaWJlID0gKCkgPT4gbGlzdGVuZXJNYXAuZGVsZXRlKGVudHJ5LmlkKTtcbiAgICBsaXN0ZW5lck1hcC5zZXQoZW50cnkuaWQsIGVudHJ5KTtcbiAgICByZXR1cm4gKGNhbmNlbE9wdGlvbnMpID0+IHtcbiAgICAgIGVudHJ5LnVuc3Vic2NyaWJlKCk7XG4gICAgICBpZiAoY2FuY2VsT3B0aW9ucz8uY2FuY2VsQWN0aXZlKSB7XG4gICAgICAgIGNhbmNlbEFjdGl2ZUxpc3RlbmVycyhlbnRyeSk7XG4gICAgICB9XG4gICAgfTtcbiAgfTtcbiAgY29uc3Qgc3RhcnRMaXN0ZW5pbmcgPSAob3B0aW9ucykgPT4ge1xuICAgIGNvbnN0IGVudHJ5ID0gZmluZExpc3RlbmVyRW50cnkobGlzdGVuZXJNYXAsIG9wdGlvbnMpID8/IGNyZWF0ZUxpc3RlbmVyRW50cnkob3B0aW9ucyk7XG4gICAgcmV0dXJuIGluc2VydEVudHJ5KGVudHJ5KTtcbiAgfTtcbiAgYXNzaWduKHN0YXJ0TGlzdGVuaW5nLCB7XG4gICAgd2l0aFR5cGVzOiAoKSA9PiBzdGFydExpc3RlbmluZ1xuICB9KTtcbiAgY29uc3Qgc3RvcExpc3RlbmluZyA9IChvcHRpb25zKSA9PiB7XG4gICAgY29uc3QgZW50cnkgPSBmaW5kTGlzdGVuZXJFbnRyeShsaXN0ZW5lck1hcCwgb3B0aW9ucyk7XG4gICAgaWYgKGVudHJ5KSB7XG4gICAgICBlbnRyeS51bnN1YnNjcmliZSgpO1xuICAgICAgaWYgKG9wdGlvbnMuY2FuY2VsQWN0aXZlKSB7XG4gICAgICAgIGNhbmNlbEFjdGl2ZUxpc3RlbmVycyhlbnRyeSk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiAhIWVudHJ5O1xuICB9O1xuICBhc3NpZ24oc3RvcExpc3RlbmluZywge1xuICAgIHdpdGhUeXBlczogKCkgPT4gc3RvcExpc3RlbmluZ1xuICB9KTtcbiAgY29uc3Qgbm90aWZ5TGlzdGVuZXIgPSBhc3luYyAoZW50cnksIGFjdGlvbiwgYXBpLCBnZXRPcmlnaW5hbFN0YXRlKSA9PiB7XG4gICAgY29uc3QgaW50ZXJuYWxUYXNrQ29udHJvbGxlciA9IG5ldyBBYm9ydENvbnRyb2xsZXIoKTtcbiAgICBjb25zdCB0YWtlID0gY3JlYXRlVGFrZVBhdHRlcm4oc3RhcnRMaXN0ZW5pbmcsIGludGVybmFsVGFza0NvbnRyb2xsZXIuc2lnbmFsKTtcbiAgICBjb25zdCBhdXRvSm9pblByb21pc2VzID0gW107XG4gICAgdHJ5IHtcbiAgICAgIGVudHJ5LnBlbmRpbmcuYWRkKGludGVybmFsVGFza0NvbnRyb2xsZXIpO1xuICAgICAgYXdhaXQgUHJvbWlzZS5yZXNvbHZlKGVudHJ5LmVmZmVjdChcbiAgICAgICAgYWN0aW9uLFxuICAgICAgICAvLyBVc2UgYXNzaWduKCkgcmF0aGVyIHRoYW4gLi4uIHRvIGF2b2lkIGV4dHJhIGhlbHBlciBmdW5jdGlvbnMgYWRkZWQgdG8gYnVuZGxlXG4gICAgICAgIGFzc2lnbih7fSwgYXBpLCB7XG4gICAgICAgICAgZ2V0T3JpZ2luYWxTdGF0ZSxcbiAgICAgICAgICBjb25kaXRpb246IChwcmVkaWNhdGUsIHRpbWVvdXQpID0+IHRha2UocHJlZGljYXRlLCB0aW1lb3V0KS50aGVuKEJvb2xlYW4pLFxuICAgICAgICAgIHRha2UsXG4gICAgICAgICAgZGVsYXk6IGNyZWF0ZURlbGF5KGludGVybmFsVGFza0NvbnRyb2xsZXIuc2lnbmFsKSxcbiAgICAgICAgICBwYXVzZTogY3JlYXRlUGF1c2UoaW50ZXJuYWxUYXNrQ29udHJvbGxlci5zaWduYWwpLFxuICAgICAgICAgIGV4dHJhLFxuICAgICAgICAgIHNpZ25hbDogaW50ZXJuYWxUYXNrQ29udHJvbGxlci5zaWduYWwsXG4gICAgICAgICAgZm9yazogY3JlYXRlRm9yayhpbnRlcm5hbFRhc2tDb250cm9sbGVyLnNpZ25hbCwgYXV0b0pvaW5Qcm9taXNlcyksXG4gICAgICAgICAgdW5zdWJzY3JpYmU6IGVudHJ5LnVuc3Vic2NyaWJlLFxuICAgICAgICAgIHN1YnNjcmliZTogKCkgPT4ge1xuICAgICAgICAgICAgbGlzdGVuZXJNYXAuc2V0KGVudHJ5LmlkLCBlbnRyeSk7XG4gICAgICAgICAgfSxcbiAgICAgICAgICBjYW5jZWxBY3RpdmVMaXN0ZW5lcnM6ICgpID0+IHtcbiAgICAgICAgICAgIGVudHJ5LnBlbmRpbmcuZm9yRWFjaCgoY29udHJvbGxlciwgXywgc2V0KSA9PiB7XG4gICAgICAgICAgICAgIGlmIChjb250cm9sbGVyICE9PSBpbnRlcm5hbFRhc2tDb250cm9sbGVyKSB7XG4gICAgICAgICAgICAgICAgYWJvcnRDb250cm9sbGVyV2l0aFJlYXNvbihjb250cm9sbGVyLCBsaXN0ZW5lckNhbmNlbGxlZCk7XG4gICAgICAgICAgICAgICAgc2V0LmRlbGV0ZShjb250cm9sbGVyKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfSxcbiAgICAgICAgICBjYW5jZWw6ICgpID0+IHtcbiAgICAgICAgICAgIGFib3J0Q29udHJvbGxlcldpdGhSZWFzb24oaW50ZXJuYWxUYXNrQ29udHJvbGxlciwgbGlzdGVuZXJDYW5jZWxsZWQpO1xuICAgICAgICAgICAgZW50cnkucGVuZGluZy5kZWxldGUoaW50ZXJuYWxUYXNrQ29udHJvbGxlcik7XG4gICAgICAgICAgfSxcbiAgICAgICAgICB0aHJvd0lmQ2FuY2VsbGVkOiAoKSA9PiB7XG4gICAgICAgICAgICB2YWxpZGF0ZUFjdGl2ZShpbnRlcm5hbFRhc2tDb250cm9sbGVyLnNpZ25hbCk7XG4gICAgICAgICAgfVxuICAgICAgICB9KVxuICAgICAgKSk7XG4gICAgfSBjYXRjaCAobGlzdGVuZXJFcnJvcikge1xuICAgICAgaWYgKCEobGlzdGVuZXJFcnJvciBpbnN0YW5jZW9mIFRhc2tBYm9ydEVycm9yKSkge1xuICAgICAgICBzYWZlbHlOb3RpZnlFcnJvcihvbkVycm9yLCBsaXN0ZW5lckVycm9yLCB7XG4gICAgICAgICAgcmFpc2VkQnk6IFwiZWZmZWN0XCJcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIGF3YWl0IFByb21pc2UuYWxsKGF1dG9Kb2luUHJvbWlzZXMpO1xuICAgICAgYWJvcnRDb250cm9sbGVyV2l0aFJlYXNvbihpbnRlcm5hbFRhc2tDb250cm9sbGVyLCBsaXN0ZW5lckNvbXBsZXRlZCk7XG4gICAgICBlbnRyeS5wZW5kaW5nLmRlbGV0ZShpbnRlcm5hbFRhc2tDb250cm9sbGVyKTtcbiAgICB9XG4gIH07XG4gIGNvbnN0IGNsZWFyTGlzdGVuZXJNaWRkbGV3YXJlID0gY3JlYXRlQ2xlYXJMaXN0ZW5lck1pZGRsZXdhcmUobGlzdGVuZXJNYXApO1xuICBjb25zdCBtaWRkbGV3YXJlID0gKGFwaSkgPT4gKG5leHQpID0+IChhY3Rpb24pID0+IHtcbiAgICBpZiAoIWlzQWN0aW9uMyhhY3Rpb24pKSB7XG4gICAgICByZXR1cm4gbmV4dChhY3Rpb24pO1xuICAgIH1cbiAgICBpZiAoYWRkTGlzdGVuZXIubWF0Y2goYWN0aW9uKSkge1xuICAgICAgcmV0dXJuIHN0YXJ0TGlzdGVuaW5nKGFjdGlvbi5wYXlsb2FkKTtcbiAgICB9XG4gICAgaWYgKGNsZWFyQWxsTGlzdGVuZXJzLm1hdGNoKGFjdGlvbikpIHtcbiAgICAgIGNsZWFyTGlzdGVuZXJNaWRkbGV3YXJlKCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmIChyZW1vdmVMaXN0ZW5lci5tYXRjaChhY3Rpb24pKSB7XG4gICAgICByZXR1cm4gc3RvcExpc3RlbmluZyhhY3Rpb24ucGF5bG9hZCk7XG4gICAgfVxuICAgIGxldCBvcmlnaW5hbFN0YXRlID0gYXBpLmdldFN0YXRlKCk7XG4gICAgY29uc3QgZ2V0T3JpZ2luYWxTdGF0ZSA9ICgpID0+IHtcbiAgICAgIGlmIChvcmlnaW5hbFN0YXRlID09PSBJTlRFUk5BTF9OSUxfVE9LRU4pIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKHByb2Nlc3MuZW52Lk5PREVfRU5WID09PSBcInByb2R1Y3Rpb25cIiA/IGZvcm1hdFByb2RFcnJvck1lc3NhZ2UoMjMpIDogYCR7YWxtfTogZ2V0T3JpZ2luYWxTdGF0ZSBjYW4gb25seSBiZSBjYWxsZWQgc3luY2hyb25vdXNseWApO1xuICAgICAgfVxuICAgICAgcmV0dXJuIG9yaWdpbmFsU3RhdGU7XG4gICAgfTtcbiAgICBsZXQgcmVzdWx0O1xuICAgIHRyeSB7XG4gICAgICByZXN1bHQgPSBuZXh0KGFjdGlvbik7XG4gICAgICBpZiAobGlzdGVuZXJNYXAuc2l6ZSA+IDApIHtcbiAgICAgICAgY29uc3QgY3VycmVudFN0YXRlID0gYXBpLmdldFN0YXRlKCk7XG4gICAgICAgIGNvbnN0IGxpc3RlbmVyRW50cmllcyA9IEFycmF5LmZyb20obGlzdGVuZXJNYXAudmFsdWVzKCkpO1xuICAgICAgICBmb3IgKGNvbnN0IGVudHJ5IG9mIGxpc3RlbmVyRW50cmllcykge1xuICAgICAgICAgIGxldCBydW5MaXN0ZW5lciA9IGZhbHNlO1xuICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICBydW5MaXN0ZW5lciA9IGVudHJ5LnByZWRpY2F0ZShhY3Rpb24sIGN1cnJlbnRTdGF0ZSwgb3JpZ2luYWxTdGF0ZSk7XG4gICAgICAgICAgfSBjYXRjaCAocHJlZGljYXRlRXJyb3IpIHtcbiAgICAgICAgICAgIHJ1bkxpc3RlbmVyID0gZmFsc2U7XG4gICAgICAgICAgICBzYWZlbHlOb3RpZnlFcnJvcihvbkVycm9yLCBwcmVkaWNhdGVFcnJvciwge1xuICAgICAgICAgICAgICByYWlzZWRCeTogXCJwcmVkaWNhdGVcIlxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmICghcnVuTGlzdGVuZXIpIHtcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgIH1cbiAgICAgICAgICBub3RpZnlMaXN0ZW5lcihlbnRyeSwgYWN0aW9uLCBhcGksIGdldE9yaWdpbmFsU3RhdGUpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIG9yaWdpbmFsU3RhdGUgPSBJTlRFUk5BTF9OSUxfVE9LRU47XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG4gIH07XG4gIHJldHVybiB7XG4gICAgbWlkZGxld2FyZSxcbiAgICBzdGFydExpc3RlbmluZyxcbiAgICBzdG9wTGlzdGVuaW5nLFxuICAgIGNsZWFyTGlzdGVuZXJzOiBjbGVhckxpc3RlbmVyTWlkZGxld2FyZVxuICB9O1xufTtcblxuLy8gc3JjL2R5bmFtaWNNaWRkbGV3YXJlL2luZGV4LnRzXG5pbXBvcnQgeyBjb21wb3NlIGFzIGNvbXBvc2UzIH0gZnJvbSBcInJlZHV4XCI7XG52YXIgY3JlYXRlTWlkZGxld2FyZUVudHJ5ID0gKG1pZGRsZXdhcmUpID0+ICh7XG4gIG1pZGRsZXdhcmUsXG4gIGFwcGxpZWQ6IC8qIEBfX1BVUkVfXyAqLyBuZXcgTWFwKClcbn0pO1xudmFyIG1hdGNoSW5zdGFuY2UgPSAoaW5zdGFuY2VJZCkgPT4gKGFjdGlvbikgPT4gYWN0aW9uPy5tZXRhPy5pbnN0YW5jZUlkID09PSBpbnN0YW5jZUlkO1xudmFyIGNyZWF0ZUR5bmFtaWNNaWRkbGV3YXJlID0gKCkgPT4ge1xuICBjb25zdCBpbnN0YW5jZUlkID0gbmFub2lkKCk7XG4gIGNvbnN0IG1pZGRsZXdhcmVNYXAgPSAvKiBAX19QVVJFX18gKi8gbmV3IE1hcCgpO1xuICBjb25zdCB3aXRoTWlkZGxld2FyZSA9IE9iamVjdC5hc3NpZ24oY3JlYXRlQWN0aW9uKFwiZHluYW1pY01pZGRsZXdhcmUvYWRkXCIsICguLi5taWRkbGV3YXJlcykgPT4gKHtcbiAgICBwYXlsb2FkOiBtaWRkbGV3YXJlcyxcbiAgICBtZXRhOiB7XG4gICAgICBpbnN0YW5jZUlkXG4gICAgfVxuICB9KSksIHtcbiAgICB3aXRoVHlwZXM6ICgpID0+IHdpdGhNaWRkbGV3YXJlXG4gIH0pO1xuICBjb25zdCBhZGRNaWRkbGV3YXJlID0gT2JqZWN0LmFzc2lnbihmdW5jdGlvbiBhZGRNaWRkbGV3YXJlMiguLi5taWRkbGV3YXJlcykge1xuICAgIG1pZGRsZXdhcmVzLmZvckVhY2goKG1pZGRsZXdhcmUyKSA9PiB7XG4gICAgICBnZXRPckluc2VydENvbXB1dGVkKG1pZGRsZXdhcmVNYXAsIG1pZGRsZXdhcmUyLCBjcmVhdGVNaWRkbGV3YXJlRW50cnkpO1xuICAgIH0pO1xuICB9LCB7XG4gICAgd2l0aFR5cGVzOiAoKSA9PiBhZGRNaWRkbGV3YXJlXG4gIH0pO1xuICBjb25zdCBnZXRGaW5hbE1pZGRsZXdhcmUgPSAoYXBpKSA9PiB7XG4gICAgY29uc3QgYXBwbGllZE1pZGRsZXdhcmUgPSBBcnJheS5mcm9tKG1pZGRsZXdhcmVNYXAudmFsdWVzKCkpLm1hcCgoZW50cnkpID0+IGdldE9ySW5zZXJ0Q29tcHV0ZWQoZW50cnkuYXBwbGllZCwgYXBpLCBlbnRyeS5taWRkbGV3YXJlKSk7XG4gICAgcmV0dXJuIGNvbXBvc2UzKC4uLmFwcGxpZWRNaWRkbGV3YXJlKTtcbiAgfTtcbiAgY29uc3QgaXNXaXRoTWlkZGxld2FyZSA9IGlzQWxsT2Yod2l0aE1pZGRsZXdhcmUsIG1hdGNoSW5zdGFuY2UoaW5zdGFuY2VJZCkpO1xuICBjb25zdCBtaWRkbGV3YXJlID0gKGFwaSkgPT4gKG5leHQpID0+IChhY3Rpb24pID0+IHtcbiAgICBpZiAoaXNXaXRoTWlkZGxld2FyZShhY3Rpb24pKSB7XG4gICAgICBhZGRNaWRkbGV3YXJlKC4uLmFjdGlvbi5wYXlsb2FkKTtcbiAgICAgIHJldHVybiBhcGkuZGlzcGF0Y2g7XG4gICAgfVxuICAgIHJldHVybiBnZXRGaW5hbE1pZGRsZXdhcmUoYXBpKShuZXh0KShhY3Rpb24pO1xuICB9O1xuICByZXR1cm4ge1xuICAgIG1pZGRsZXdhcmUsXG4gICAgYWRkTWlkZGxld2FyZSxcbiAgICB3aXRoTWlkZGxld2FyZSxcbiAgICBpbnN0YW5jZUlkXG4gIH07XG59O1xuXG4vLyBzcmMvY29tYmluZVNsaWNlcy50c1xuaW1wb3J0IHsgY29tYmluZVJlZHVjZXJzIGFzIGNvbWJpbmVSZWR1Y2VyczIgfSBmcm9tIFwicmVkdXhcIjtcbnZhciBpc1NsaWNlTGlrZSA9IChtYXliZVNsaWNlTGlrZSkgPT4gXCJyZWR1Y2VyUGF0aFwiIGluIG1heWJlU2xpY2VMaWtlICYmIHR5cGVvZiBtYXliZVNsaWNlTGlrZS5yZWR1Y2VyUGF0aCA9PT0gXCJzdHJpbmdcIjtcbnZhciBnZXRSZWR1Y2VycyA9IChzbGljZXMpID0+IHNsaWNlcy5mbGF0TWFwKChzbGljZU9yTWFwKSA9PiBpc1NsaWNlTGlrZShzbGljZU9yTWFwKSA/IFtbc2xpY2VPck1hcC5yZWR1Y2VyUGF0aCwgc2xpY2VPck1hcC5yZWR1Y2VyXV0gOiBPYmplY3QuZW50cmllcyhzbGljZU9yTWFwKSk7XG52YXIgT1JJR0lOQUxfU1RBVEUgPSBTeW1ib2wuZm9yKFwicnRrLXN0YXRlLXByb3h5LW9yaWdpbmFsXCIpO1xudmFyIGlzU3RhdGVQcm94eSA9ICh2YWx1ZSkgPT4gISF2YWx1ZSAmJiAhIXZhbHVlW09SSUdJTkFMX1NUQVRFXTtcbnZhciBzdGF0ZVByb3h5TWFwID0gLyogQF9fUFVSRV9fICovIG5ldyBXZWFrTWFwKCk7XG52YXIgY3JlYXRlU3RhdGVQcm94eSA9IChzdGF0ZSwgcmVkdWNlck1hcCkgPT4gZ2V0T3JJbnNlcnRDb21wdXRlZChzdGF0ZVByb3h5TWFwLCBzdGF0ZSwgKCkgPT4gbmV3IFByb3h5KHN0YXRlLCB7XG4gIGdldDogKHRhcmdldCwgcHJvcCwgcmVjZWl2ZXIpID0+IHtcbiAgICBpZiAocHJvcCA9PT0gT1JJR0lOQUxfU1RBVEUpIHJldHVybiB0YXJnZXQ7XG4gICAgY29uc3QgcmVzdWx0ID0gUmVmbGVjdC5nZXQodGFyZ2V0LCBwcm9wLCByZWNlaXZlcik7XG4gICAgaWYgKHR5cGVvZiByZXN1bHQgPT09IFwidW5kZWZpbmVkXCIpIHtcbiAgICAgIGNvbnN0IHJlZHVjZXIgPSByZWR1Y2VyTWFwW3Byb3AudG9TdHJpbmcoKV07XG4gICAgICBpZiAocmVkdWNlcikge1xuICAgICAgICBjb25zdCByZWR1Y2VyUmVzdWx0ID0gcmVkdWNlcih2b2lkIDAsIHtcbiAgICAgICAgICB0eXBlOiBuYW5vaWQoKVxuICAgICAgICB9KTtcbiAgICAgICAgaWYgKHR5cGVvZiByZWR1Y2VyUmVzdWx0ID09PSBcInVuZGVmaW5lZFwiKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKHByb2Nlc3MuZW52Lk5PREVfRU5WID09PSBcInByb2R1Y3Rpb25cIiA/IGZvcm1hdFByb2RFcnJvck1lc3NhZ2UoMjQpIDogYFRoZSBzbGljZSByZWR1Y2VyIGZvciBrZXkgXCIke3Byb3AudG9TdHJpbmcoKX1cIiByZXR1cm5lZCB1bmRlZmluZWQgd2hlbiBjYWxsZWQgZm9yIHNlbGVjdG9yKCkuIElmIHRoZSBzdGF0ZSBwYXNzZWQgdG8gdGhlIHJlZHVjZXIgaXMgdW5kZWZpbmVkLCB5b3UgbXVzdCBleHBsaWNpdGx5IHJldHVybiB0aGUgaW5pdGlhbCBzdGF0ZS4gVGhlIGluaXRpYWwgc3RhdGUgbWF5IG5vdCBiZSB1bmRlZmluZWQuIElmIHlvdSBkb24ndCB3YW50IHRvIHNldCBhIHZhbHVlIGZvciB0aGlzIHJlZHVjZXIsIHlvdSBjYW4gdXNlIG51bGwgaW5zdGVhZCBvZiB1bmRlZmluZWQuYCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlZHVjZXJSZXN1bHQ7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cbn0pKTtcbnZhciBvcmlnaW5hbCA9IChzdGF0ZSkgPT4ge1xuICBpZiAoIWlzU3RhdGVQcm94eShzdGF0ZSkpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IocHJvY2Vzcy5lbnYuTk9ERV9FTlYgPT09IFwicHJvZHVjdGlvblwiID8gZm9ybWF0UHJvZEVycm9yTWVzc2FnZSgyNSkgOiBcIm9yaWdpbmFsIG11c3QgYmUgdXNlZCBvbiBzdGF0ZSBQcm94eVwiKTtcbiAgfVxuICByZXR1cm4gc3RhdGVbT1JJR0lOQUxfU1RBVEVdO1xufTtcbnZhciBub29wUmVkdWNlciA9IChzdGF0ZSA9IHt9KSA9PiBzdGF0ZTtcbmZ1bmN0aW9uIGNvbWJpbmVTbGljZXMoLi4uc2xpY2VzKSB7XG4gIGNvbnN0IHJlZHVjZXJNYXAgPSBPYmplY3QuZnJvbUVudHJpZXMoZ2V0UmVkdWNlcnMoc2xpY2VzKSk7XG4gIGNvbnN0IGdldFJlZHVjZXIgPSAoKSA9PiBPYmplY3Qua2V5cyhyZWR1Y2VyTWFwKS5sZW5ndGggPyBjb21iaW5lUmVkdWNlcnMyKHJlZHVjZXJNYXApIDogbm9vcFJlZHVjZXI7XG4gIGxldCByZWR1Y2VyID0gZ2V0UmVkdWNlcigpO1xuICBmdW5jdGlvbiBjb21iaW5lZFJlZHVjZXIoc3RhdGUsIGFjdGlvbikge1xuICAgIHJldHVybiByZWR1Y2VyKHN0YXRlLCBhY3Rpb24pO1xuICB9XG4gIGNvbWJpbmVkUmVkdWNlci53aXRoTGF6eUxvYWRlZFNsaWNlcyA9ICgpID0+IGNvbWJpbmVkUmVkdWNlcjtcbiAgY29uc3QgaW5qZWN0ID0gKHNsaWNlLCBjb25maWcgPSB7fSkgPT4ge1xuICAgIGNvbnN0IHtcbiAgICAgIHJlZHVjZXJQYXRoLFxuICAgICAgcmVkdWNlcjogcmVkdWNlclRvSW5qZWN0XG4gICAgfSA9IHNsaWNlO1xuICAgIGNvbnN0IGN1cnJlbnRSZWR1Y2VyID0gcmVkdWNlck1hcFtyZWR1Y2VyUGF0aF07XG4gICAgaWYgKCFjb25maWcub3ZlcnJpZGVFeGlzdGluZyAmJiBjdXJyZW50UmVkdWNlciAmJiBjdXJyZW50UmVkdWNlciAhPT0gcmVkdWNlclRvSW5qZWN0KSB7XG4gICAgICBpZiAodHlwZW9mIHByb2Nlc3MgIT09IFwidW5kZWZpbmVkXCIgJiYgcHJvY2Vzcy5lbnYuTk9ERV9FTlYgPT09IFwiZGV2ZWxvcG1lbnRcIikge1xuICAgICAgICBjb25zb2xlLmVycm9yKGBjYWxsZWQgXFxgaW5qZWN0XFxgIHRvIG92ZXJyaWRlIGFscmVhZHktZXhpc3RpbmcgcmVkdWNlciAke3JlZHVjZXJQYXRofSB3aXRob3V0IHNwZWNpZnlpbmcgXFxgb3ZlcnJpZGVFeGlzdGluZzogdHJ1ZVxcYGApO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGNvbWJpbmVkUmVkdWNlcjtcbiAgICB9XG4gICAgcmVkdWNlck1hcFtyZWR1Y2VyUGF0aF0gPSByZWR1Y2VyVG9JbmplY3Q7XG4gICAgcmVkdWNlciA9IGdldFJlZHVjZXIoKTtcbiAgICByZXR1cm4gY29tYmluZWRSZWR1Y2VyO1xuICB9O1xuICBjb25zdCBzZWxlY3RvciA9IE9iamVjdC5hc3NpZ24oZnVuY3Rpb24gbWFrZVNlbGVjdG9yKHNlbGVjdG9yRm4sIHNlbGVjdFN0YXRlKSB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uIHNlbGVjdG9yMihzdGF0ZSwgLi4uYXJncykge1xuICAgICAgcmV0dXJuIHNlbGVjdG9yRm4oY3JlYXRlU3RhdGVQcm94eShzZWxlY3RTdGF0ZSA/IHNlbGVjdFN0YXRlKHN0YXRlLCAuLi5hcmdzKSA6IHN0YXRlLCByZWR1Y2VyTWFwKSwgLi4uYXJncyk7XG4gICAgfTtcbiAgfSwge1xuICAgIG9yaWdpbmFsXG4gIH0pO1xuICByZXR1cm4gT2JqZWN0LmFzc2lnbihjb21iaW5lZFJlZHVjZXIsIHtcbiAgICBpbmplY3QsXG4gICAgc2VsZWN0b3JcbiAgfSk7XG59XG5cbi8vIHNyYy9mb3JtYXRQcm9kRXJyb3JNZXNzYWdlLnRzXG5mdW5jdGlvbiBmb3JtYXRQcm9kRXJyb3JNZXNzYWdlKGNvZGUpIHtcbiAgcmV0dXJuIGBNaW5pZmllZCBSZWR1eCBUb29sa2l0IGVycm9yICMke2NvZGV9OyB2aXNpdCBodHRwczovL3JlZHV4LXRvb2xraXQuanMub3JnL0Vycm9ycz9jb2RlPSR7Y29kZX0gZm9yIHRoZSBmdWxsIG1lc3NhZ2Ugb3IgdXNlIHRoZSBub24tbWluaWZpZWQgZGV2IGVudmlyb25tZW50IGZvciBmdWxsIGVycm9ycy4gYDtcbn1cbmV4cG9ydCB7XG4gIFJlZHVjZXJUeXBlLFxuICBTSE9VTERfQVVUT0JBVENILFxuICBUYXNrQWJvcnRFcnJvcixcbiAgVHVwbGUsXG4gIGFkZExpc3RlbmVyLFxuICBhc3luY1RodW5rQ3JlYXRvcixcbiAgYXV0b0JhdGNoRW5oYW5jZXIsXG4gIGJ1aWxkQ3JlYXRlU2xpY2UsXG4gIGNsZWFyQWxsTGlzdGVuZXJzLFxuICBjb21iaW5lU2xpY2VzLFxuICBjb25maWd1cmVTdG9yZSxcbiAgY3JlYXRlQWN0aW9uLFxuICBjcmVhdGVBY3Rpb25DcmVhdG9ySW52YXJpYW50TWlkZGxld2FyZSxcbiAgY3JlYXRlQXN5bmNUaHVuayxcbiAgY3JlYXRlRHJhZnRTYWZlU2VsZWN0b3IsXG4gIGNyZWF0ZURyYWZ0U2FmZVNlbGVjdG9yQ3JlYXRvcixcbiAgY3JlYXRlRHluYW1pY01pZGRsZXdhcmUsXG4gIGNyZWF0ZUVudGl0eUFkYXB0ZXIsXG4gIGNyZWF0ZUltbXV0YWJsZVN0YXRlSW52YXJpYW50TWlkZGxld2FyZSxcbiAgY3JlYXRlTGlzdGVuZXJNaWRkbGV3YXJlLFxuICBwcm9kdWNlIGFzIGNyZWF0ZU5leHRTdGF0ZSxcbiAgY3JlYXRlUmVkdWNlcixcbiAgY3JlYXRlU2VsZWN0b3IsXG4gIGNyZWF0ZVNlbGVjdG9yQ3JlYXRvcjIgYXMgY3JlYXRlU2VsZWN0b3JDcmVhdG9yLFxuICBjcmVhdGVTZXJpYWxpemFibGVTdGF0ZUludmFyaWFudE1pZGRsZXdhcmUsXG4gIGNyZWF0ZVNsaWNlLFxuICBjdXJyZW50MyBhcyBjdXJyZW50LFxuICBmaW5kTm9uU2VyaWFsaXphYmxlVmFsdWUsXG4gIGZvcm1hdFByb2RFcnJvck1lc3NhZ2UsXG4gIGZyZWV6ZSxcbiAgaXNBY3Rpb25DcmVhdG9yLFxuICBpc0FsbE9mLFxuICBpc0FueU9mLFxuICBpc0FzeW5jVGh1bmtBY3Rpb24sXG4gIGlzRHJhZnQ1IGFzIGlzRHJhZnQsXG4gIGlzRlNBIGFzIGlzRmx1eFN0YW5kYXJkQWN0aW9uLFxuICBpc0Z1bGZpbGxlZCxcbiAgaXNJbW11dGFibGVEZWZhdWx0LFxuICBpc1BlbmRpbmcsXG4gIGlzUGxhaW4sXG4gIGlzUmVqZWN0ZWQsXG4gIGlzUmVqZWN0ZWRXaXRoVmFsdWUsXG4gIGxydU1lbW9pemUsXG4gIG1pbmlTZXJpYWxpemVFcnJvcixcbiAgbmFub2lkLFxuICBvcmlnaW5hbDIgYXMgb3JpZ2luYWwsXG4gIHByZXBhcmVBdXRvQmF0Y2hlZCxcbiAgcmVtb3ZlTGlzdGVuZXIsXG4gIHVud3JhcFJlc3VsdCxcbiAgd2Vha01hcE1lbW9pemUyIGFzIHdlYWtNYXBNZW1vaXplXG59O1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9cmVkdXgtdG9vbGtpdC5tb2Rlcm4ubWpzLm1hcCIsIi8vIHNyYy9kZXZNb2RlQ2hlY2tzL2lkZW50aXR5RnVuY3Rpb25DaGVjay50c1xudmFyIHJ1bklkZW50aXR5RnVuY3Rpb25DaGVjayA9IChyZXN1bHRGdW5jLCBpbnB1dFNlbGVjdG9yc1Jlc3VsdHMsIG91dHB1dFNlbGVjdG9yUmVzdWx0KSA9PiB7XG4gIGlmIChpbnB1dFNlbGVjdG9yc1Jlc3VsdHMubGVuZ3RoID09PSAxICYmIGlucHV0U2VsZWN0b3JzUmVzdWx0c1swXSA9PT0gb3V0cHV0U2VsZWN0b3JSZXN1bHQpIHtcbiAgICBsZXQgaXNJbnB1dFNhbWVBc091dHB1dCA9IGZhbHNlO1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBlbXB0eU9iamVjdCA9IHt9O1xuICAgICAgaWYgKHJlc3VsdEZ1bmMoZW1wdHlPYmplY3QpID09PSBlbXB0eU9iamVjdClcbiAgICAgICAgaXNJbnB1dFNhbWVBc091dHB1dCA9IHRydWU7XG4gICAgfSBjYXRjaCB7XG4gICAgfVxuICAgIGlmIChpc0lucHV0U2FtZUFzT3V0cHV0KSB7XG4gICAgICBsZXQgc3RhY2sgPSB2b2lkIDA7XG4gICAgICB0cnkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoKTtcbiAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgO1xuICAgICAgICAoeyBzdGFjayB9ID0gZSk7XG4gICAgICB9XG4gICAgICBjb25zb2xlLndhcm4oXG4gICAgICAgIFwiVGhlIHJlc3VsdCBmdW5jdGlvbiByZXR1cm5lZCBpdHMgb3duIGlucHV0cyB3aXRob3V0IG1vZGlmaWNhdGlvbi4gZS5nXFxuYGNyZWF0ZVNlbGVjdG9yKFtzdGF0ZSA9PiBzdGF0ZS50b2Rvc10sIHRvZG9zID0+IHRvZG9zKWBcXG5UaGlzIGNvdWxkIGxlYWQgdG8gaW5lZmZpY2llbnQgbWVtb2l6YXRpb24gYW5kIHVubmVjZXNzYXJ5IHJlLXJlbmRlcnMuXFxuRW5zdXJlIHRyYW5zZm9ybWF0aW9uIGxvZ2ljIGlzIGluIHRoZSByZXN1bHQgZnVuY3Rpb24sIGFuZCBleHRyYWN0aW9uIGxvZ2ljIGlzIGluIHRoZSBpbnB1dCBzZWxlY3RvcnMuXCIsXG4gICAgICAgIHsgc3RhY2sgfVxuICAgICAgKTtcbiAgICB9XG4gIH1cbn07XG5cbi8vIHNyYy9kZXZNb2RlQ2hlY2tzL2lucHV0U3RhYmlsaXR5Q2hlY2sudHNcbnZhciBydW5JbnB1dFN0YWJpbGl0eUNoZWNrID0gKGlucHV0U2VsZWN0b3JSZXN1bHRzT2JqZWN0LCBvcHRpb25zLCBpbnB1dFNlbGVjdG9yQXJncykgPT4ge1xuICBjb25zdCB7IG1lbW9pemUsIG1lbW9pemVPcHRpb25zIH0gPSBvcHRpb25zO1xuICBjb25zdCB7IGlucHV0U2VsZWN0b3JSZXN1bHRzLCBpbnB1dFNlbGVjdG9yUmVzdWx0c0NvcHkgfSA9IGlucHV0U2VsZWN0b3JSZXN1bHRzT2JqZWN0O1xuICBjb25zdCBjcmVhdGVBbkVtcHR5T2JqZWN0ID0gbWVtb2l6ZSgoKSA9PiAoe30pLCAuLi5tZW1vaXplT3B0aW9ucyk7XG4gIGNvbnN0IGFyZUlucHV0U2VsZWN0b3JSZXN1bHRzRXF1YWwgPSBjcmVhdGVBbkVtcHR5T2JqZWN0LmFwcGx5KG51bGwsIGlucHV0U2VsZWN0b3JSZXN1bHRzKSA9PT0gY3JlYXRlQW5FbXB0eU9iamVjdC5hcHBseShudWxsLCBpbnB1dFNlbGVjdG9yUmVzdWx0c0NvcHkpO1xuICBpZiAoIWFyZUlucHV0U2VsZWN0b3JSZXN1bHRzRXF1YWwpIHtcbiAgICBsZXQgc3RhY2sgPSB2b2lkIDA7XG4gICAgdHJ5IHtcbiAgICAgIHRocm93IG5ldyBFcnJvcigpO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIDtcbiAgICAgICh7IHN0YWNrIH0gPSBlKTtcbiAgICB9XG4gICAgY29uc29sZS53YXJuKFxuICAgICAgXCJBbiBpbnB1dCBzZWxlY3RvciByZXR1cm5lZCBhIGRpZmZlcmVudCByZXN1bHQgd2hlbiBwYXNzZWQgc2FtZSBhcmd1bWVudHMuXFxuVGhpcyBtZWFucyB5b3VyIG91dHB1dCBzZWxlY3RvciB3aWxsIGxpa2VseSBydW4gbW9yZSBmcmVxdWVudGx5IHRoYW4gaW50ZW5kZWQuXFxuQXZvaWQgcmV0dXJuaW5nIGEgbmV3IHJlZmVyZW5jZSBpbnNpZGUgeW91ciBpbnB1dCBzZWxlY3RvciwgZS5nLlxcbmBjcmVhdGVTZWxlY3Rvcihbc3RhdGUgPT4gc3RhdGUudG9kb3MubWFwKHRvZG8gPT4gdG9kby5pZCldLCB0b2RvSWRzID0+IHRvZG9JZHMubGVuZ3RoKWBcIixcbiAgICAgIHtcbiAgICAgICAgYXJndW1lbnRzOiBpbnB1dFNlbGVjdG9yQXJncyxcbiAgICAgICAgZmlyc3RJbnB1dHM6IGlucHV0U2VsZWN0b3JSZXN1bHRzLFxuICAgICAgICBzZWNvbmRJbnB1dHM6IGlucHV0U2VsZWN0b3JSZXN1bHRzQ29weSxcbiAgICAgICAgc3RhY2tcbiAgICAgIH1cbiAgICApO1xuICB9XG59O1xuXG4vLyBzcmMvZGV2TW9kZUNoZWNrcy9zZXRHbG9iYWxEZXZNb2RlQ2hlY2tzLnRzXG52YXIgZ2xvYmFsRGV2TW9kZUNoZWNrcyA9IHtcbiAgaW5wdXRTdGFiaWxpdHlDaGVjazogXCJvbmNlXCIsXG4gIGlkZW50aXR5RnVuY3Rpb25DaGVjazogXCJvbmNlXCJcbn07XG52YXIgc2V0R2xvYmFsRGV2TW9kZUNoZWNrcyA9IChkZXZNb2RlQ2hlY2tzKSA9PiB7XG4gIE9iamVjdC5hc3NpZ24oZ2xvYmFsRGV2TW9kZUNoZWNrcywgZGV2TW9kZUNoZWNrcyk7XG59O1xuXG4vLyBzcmMvdXRpbHMudHNcbnZhciBOT1RfRk9VTkQgPSAvKiBAX19QVVJFX18gKi8gU3ltYm9sKFwiTk9UX0ZPVU5EXCIpO1xuZnVuY3Rpb24gYXNzZXJ0SXNGdW5jdGlvbihmdW5jLCBlcnJvck1lc3NhZ2UgPSBgZXhwZWN0ZWQgYSBmdW5jdGlvbiwgaW5zdGVhZCByZWNlaXZlZCAke3R5cGVvZiBmdW5jfWApIHtcbiAgaWYgKHR5cGVvZiBmdW5jICE9PSBcImZ1bmN0aW9uXCIpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKGVycm9yTWVzc2FnZSk7XG4gIH1cbn1cbmZ1bmN0aW9uIGFzc2VydElzT2JqZWN0KG9iamVjdCwgZXJyb3JNZXNzYWdlID0gYGV4cGVjdGVkIGFuIG9iamVjdCwgaW5zdGVhZCByZWNlaXZlZCAke3R5cGVvZiBvYmplY3R9YCkge1xuICBpZiAodHlwZW9mIG9iamVjdCAhPT0gXCJvYmplY3RcIikge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoZXJyb3JNZXNzYWdlKTtcbiAgfVxufVxuZnVuY3Rpb24gYXNzZXJ0SXNBcnJheU9mRnVuY3Rpb25zKGFycmF5LCBlcnJvck1lc3NhZ2UgPSBgZXhwZWN0ZWQgYWxsIGl0ZW1zIHRvIGJlIGZ1bmN0aW9ucywgaW5zdGVhZCByZWNlaXZlZCB0aGUgZm9sbG93aW5nIHR5cGVzOiBgKSB7XG4gIGlmICghYXJyYXkuZXZlcnkoKGl0ZW0pID0+IHR5cGVvZiBpdGVtID09PSBcImZ1bmN0aW9uXCIpKSB7XG4gICAgY29uc3QgaXRlbVR5cGVzID0gYXJyYXkubWFwKFxuICAgICAgKGl0ZW0pID0+IHR5cGVvZiBpdGVtID09PSBcImZ1bmN0aW9uXCIgPyBgZnVuY3Rpb24gJHtpdGVtLm5hbWUgfHwgXCJ1bm5hbWVkXCJ9KClgIDogdHlwZW9mIGl0ZW1cbiAgICApLmpvaW4oXCIsIFwiKTtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKGAke2Vycm9yTWVzc2FnZX1bJHtpdGVtVHlwZXN9XWApO1xuICB9XG59XG52YXIgZW5zdXJlSXNBcnJheSA9IChpdGVtKSA9PiB7XG4gIHJldHVybiBBcnJheS5pc0FycmF5KGl0ZW0pID8gaXRlbSA6IFtpdGVtXTtcbn07XG5mdW5jdGlvbiBnZXREZXBlbmRlbmNpZXMoY3JlYXRlU2VsZWN0b3JBcmdzKSB7XG4gIGNvbnN0IGRlcGVuZGVuY2llcyA9IEFycmF5LmlzQXJyYXkoY3JlYXRlU2VsZWN0b3JBcmdzWzBdKSA/IGNyZWF0ZVNlbGVjdG9yQXJnc1swXSA6IGNyZWF0ZVNlbGVjdG9yQXJncztcbiAgYXNzZXJ0SXNBcnJheU9mRnVuY3Rpb25zKFxuICAgIGRlcGVuZGVuY2llcyxcbiAgICBgY3JlYXRlU2VsZWN0b3IgZXhwZWN0cyBhbGwgaW5wdXQtc2VsZWN0b3JzIHRvIGJlIGZ1bmN0aW9ucywgYnV0IHJlY2VpdmVkIHRoZSBmb2xsb3dpbmcgdHlwZXM6IGBcbiAgKTtcbiAgcmV0dXJuIGRlcGVuZGVuY2llcztcbn1cbmZ1bmN0aW9uIGNvbGxlY3RJbnB1dFNlbGVjdG9yUmVzdWx0cyhkZXBlbmRlbmNpZXMsIGlucHV0U2VsZWN0b3JBcmdzKSB7XG4gIGNvbnN0IGlucHV0U2VsZWN0b3JSZXN1bHRzID0gW107XG4gIGNvbnN0IHsgbGVuZ3RoIH0gPSBkZXBlbmRlbmNpZXM7XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHtcbiAgICBpbnB1dFNlbGVjdG9yUmVzdWx0cy5wdXNoKGRlcGVuZGVuY2llc1tpXS5hcHBseShudWxsLCBpbnB1dFNlbGVjdG9yQXJncykpO1xuICB9XG4gIHJldHVybiBpbnB1dFNlbGVjdG9yUmVzdWx0cztcbn1cbnZhciBnZXREZXZNb2RlQ2hlY2tzRXhlY3V0aW9uSW5mbyA9IChmaXJzdFJ1biwgZGV2TW9kZUNoZWNrcykgPT4ge1xuICBjb25zdCB7IGlkZW50aXR5RnVuY3Rpb25DaGVjaywgaW5wdXRTdGFiaWxpdHlDaGVjayB9ID0ge1xuICAgIC4uLmdsb2JhbERldk1vZGVDaGVja3MsXG4gICAgLi4uZGV2TW9kZUNoZWNrc1xuICB9O1xuICByZXR1cm4ge1xuICAgIGlkZW50aXR5RnVuY3Rpb25DaGVjazoge1xuICAgICAgc2hvdWxkUnVuOiBpZGVudGl0eUZ1bmN0aW9uQ2hlY2sgPT09IFwiYWx3YXlzXCIgfHwgaWRlbnRpdHlGdW5jdGlvbkNoZWNrID09PSBcIm9uY2VcIiAmJiBmaXJzdFJ1bixcbiAgICAgIHJ1bjogcnVuSWRlbnRpdHlGdW5jdGlvbkNoZWNrXG4gICAgfSxcbiAgICBpbnB1dFN0YWJpbGl0eUNoZWNrOiB7XG4gICAgICBzaG91bGRSdW46IGlucHV0U3RhYmlsaXR5Q2hlY2sgPT09IFwiYWx3YXlzXCIgfHwgaW5wdXRTdGFiaWxpdHlDaGVjayA9PT0gXCJvbmNlXCIgJiYgZmlyc3RSdW4sXG4gICAgICBydW46IHJ1bklucHV0U3RhYmlsaXR5Q2hlY2tcbiAgICB9XG4gIH07XG59O1xuXG4vLyBzcmMvYXV0b3RyYWNrTWVtb2l6ZS9hdXRvdHJhY2tpbmcudHNcbnZhciAkUkVWSVNJT04gPSAwO1xudmFyIENVUlJFTlRfVFJBQ0tFUiA9IG51bGw7XG52YXIgQ2VsbCA9IGNsYXNzIHtcbiAgcmV2aXNpb24gPSAkUkVWSVNJT047XG4gIF92YWx1ZTtcbiAgX2xhc3RWYWx1ZTtcbiAgX2lzRXF1YWwgPSB0cmlwbGVFcTtcbiAgY29uc3RydWN0b3IoaW5pdGlhbFZhbHVlLCBpc0VxdWFsID0gdHJpcGxlRXEpIHtcbiAgICB0aGlzLl92YWx1ZSA9IHRoaXMuX2xhc3RWYWx1ZSA9IGluaXRpYWxWYWx1ZTtcbiAgICB0aGlzLl9pc0VxdWFsID0gaXNFcXVhbDtcbiAgfVxuICAvLyBXaGVuZXZlciBhIHN0b3JhZ2UgdmFsdWUgaXMgcmVhZCwgaXQnbGwgYWRkIGl0c2VsZiB0byB0aGUgY3VycmVudCB0cmFja2VyIGlmXG4gIC8vIG9uZSBleGlzdHMsIGVudGFuZ2xpbmcgaXRzIHN0YXRlIHdpdGggdGhhdCBjYWNoZS5cbiAgZ2V0IHZhbHVlKCkge1xuICAgIENVUlJFTlRfVFJBQ0tFUj8uYWRkKHRoaXMpO1xuICAgIHJldHVybiB0aGlzLl92YWx1ZTtcbiAgfVxuICAvLyBXaGVuZXZlciBhIHN0b3JhZ2UgdmFsdWUgaXMgdXBkYXRlZCwgd2UgYnVtcCB0aGUgZ2xvYmFsIHJldmlzaW9uIGNsb2NrLFxuICAvLyBhc3NpZ24gdGhlIHJldmlzaW9uIGZvciB0aGlzIHN0b3JhZ2UgdG8gdGhlIG5ldyB2YWx1ZSwgX2FuZF8gd2Ugc2NoZWR1bGUgYVxuICAvLyByZXJlbmRlci4gVGhpcyBpcyBpbXBvcnRhbnQsIGFuZCBpdCdzIHdoYXQgbWFrZXMgYXV0b3RyYWNraW5nICBfcHVsbF9cbiAgLy8gYmFzZWQuIFdlIGRvbid0IGFjdGl2ZWx5IHRlbGwgdGhlIGNhY2hlcyB3aGljaCBkZXBlbmQgb24gdGhlIHN0b3JhZ2UgdGhhdFxuICAvLyBhbnl0aGluZyBoYXMgaGFwcGVuZWQuIEluc3RlYWQsIHdlIHJlY29tcHV0ZSB0aGUgY2FjaGVzIHdoZW4gbmVlZGVkLlxuICBzZXQgdmFsdWUobmV3VmFsdWUpIHtcbiAgICBpZiAodGhpcy52YWx1ZSA9PT0gbmV3VmFsdWUpXG4gICAgICByZXR1cm47XG4gICAgdGhpcy5fdmFsdWUgPSBuZXdWYWx1ZTtcbiAgICB0aGlzLnJldmlzaW9uID0gKyskUkVWSVNJT047XG4gIH1cbn07XG5mdW5jdGlvbiB0cmlwbGVFcShhLCBiKSB7XG4gIHJldHVybiBhID09PSBiO1xufVxudmFyIFRyYWNraW5nQ2FjaGUgPSBjbGFzcyB7XG4gIF9jYWNoZWRWYWx1ZTtcbiAgX2NhY2hlZFJldmlzaW9uID0gLTE7XG4gIF9kZXBzID0gW107XG4gIGhpdHMgPSAwO1xuICBmbjtcbiAgY29uc3RydWN0b3IoZm4pIHtcbiAgICB0aGlzLmZuID0gZm47XG4gIH1cbiAgY2xlYXIoKSB7XG4gICAgdGhpcy5fY2FjaGVkVmFsdWUgPSB2b2lkIDA7XG4gICAgdGhpcy5fY2FjaGVkUmV2aXNpb24gPSAtMTtcbiAgICB0aGlzLl9kZXBzID0gW107XG4gICAgdGhpcy5oaXRzID0gMDtcbiAgfVxuICBnZXQgdmFsdWUoKSB7XG4gICAgaWYgKHRoaXMucmV2aXNpb24gPiB0aGlzLl9jYWNoZWRSZXZpc2lvbikge1xuICAgICAgY29uc3QgeyBmbiB9ID0gdGhpcztcbiAgICAgIGNvbnN0IGN1cnJlbnRUcmFja2VyID0gLyogQF9fUFVSRV9fICovIG5ldyBTZXQoKTtcbiAgICAgIGNvbnN0IHByZXZUcmFja2VyID0gQ1VSUkVOVF9UUkFDS0VSO1xuICAgICAgQ1VSUkVOVF9UUkFDS0VSID0gY3VycmVudFRyYWNrZXI7XG4gICAgICB0aGlzLl9jYWNoZWRWYWx1ZSA9IGZuKCk7XG4gICAgICBDVVJSRU5UX1RSQUNLRVIgPSBwcmV2VHJhY2tlcjtcbiAgICAgIHRoaXMuaGl0cysrO1xuICAgICAgdGhpcy5fZGVwcyA9IEFycmF5LmZyb20oY3VycmVudFRyYWNrZXIpO1xuICAgICAgdGhpcy5fY2FjaGVkUmV2aXNpb24gPSB0aGlzLnJldmlzaW9uO1xuICAgIH1cbiAgICBDVVJSRU5UX1RSQUNLRVI/LmFkZCh0aGlzKTtcbiAgICByZXR1cm4gdGhpcy5fY2FjaGVkVmFsdWU7XG4gIH1cbiAgZ2V0IHJldmlzaW9uKCkge1xuICAgIHJldHVybiBNYXRoLm1heCguLi50aGlzLl9kZXBzLm1hcCgoZCkgPT4gZC5yZXZpc2lvbiksIDApO1xuICB9XG59O1xuZnVuY3Rpb24gZ2V0VmFsdWUoY2VsbCkge1xuICBpZiAoIShjZWxsIGluc3RhbmNlb2YgQ2VsbCkpIHtcbiAgICBjb25zb2xlLndhcm4oXCJOb3QgYSB2YWxpZCBjZWxsISBcIiwgY2VsbCk7XG4gIH1cbiAgcmV0dXJuIGNlbGwudmFsdWU7XG59XG5mdW5jdGlvbiBzZXRWYWx1ZShzdG9yYWdlLCB2YWx1ZSkge1xuICBpZiAoIShzdG9yYWdlIGluc3RhbmNlb2YgQ2VsbCkpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFxuICAgICAgXCJzZXRWYWx1ZSBtdXN0IGJlIHBhc3NlZCBhIHRyYWNrZWQgc3RvcmUgY3JlYXRlZCB3aXRoIGBjcmVhdGVTdG9yYWdlYC5cIlxuICAgICk7XG4gIH1cbiAgc3RvcmFnZS52YWx1ZSA9IHN0b3JhZ2UuX2xhc3RWYWx1ZSA9IHZhbHVlO1xufVxuZnVuY3Rpb24gY3JlYXRlQ2VsbChpbml0aWFsVmFsdWUsIGlzRXF1YWwgPSB0cmlwbGVFcSkge1xuICByZXR1cm4gbmV3IENlbGwoaW5pdGlhbFZhbHVlLCBpc0VxdWFsKTtcbn1cbmZ1bmN0aW9uIGNyZWF0ZUNhY2hlKGZuKSB7XG4gIGFzc2VydElzRnVuY3Rpb24oXG4gICAgZm4sXG4gICAgXCJ0aGUgZmlyc3QgcGFyYW1ldGVyIHRvIGBjcmVhdGVDYWNoZWAgbXVzdCBiZSBhIGZ1bmN0aW9uXCJcbiAgKTtcbiAgcmV0dXJuIG5ldyBUcmFja2luZ0NhY2hlKGZuKTtcbn1cblxuLy8gc3JjL2F1dG90cmFja01lbW9pemUvdHJhY2tpbmcudHNcbnZhciBuZXZlckVxID0gKGEsIGIpID0+IGZhbHNlO1xuZnVuY3Rpb24gY3JlYXRlVGFnKCkge1xuICByZXR1cm4gY3JlYXRlQ2VsbChudWxsLCBuZXZlckVxKTtcbn1cbmZ1bmN0aW9uIGRpcnR5VGFnKHRhZywgdmFsdWUpIHtcbiAgc2V0VmFsdWUodGFnLCB2YWx1ZSk7XG59XG52YXIgY29uc3VtZUNvbGxlY3Rpb24gPSAobm9kZSkgPT4ge1xuICBsZXQgdGFnID0gbm9kZS5jb2xsZWN0aW9uVGFnO1xuICBpZiAodGFnID09PSBudWxsKSB7XG4gICAgdGFnID0gbm9kZS5jb2xsZWN0aW9uVGFnID0gY3JlYXRlVGFnKCk7XG4gIH1cbiAgZ2V0VmFsdWUodGFnKTtcbn07XG52YXIgZGlydHlDb2xsZWN0aW9uID0gKG5vZGUpID0+IHtcbiAgY29uc3QgdGFnID0gbm9kZS5jb2xsZWN0aW9uVGFnO1xuICBpZiAodGFnICE9PSBudWxsKSB7XG4gICAgZGlydHlUYWcodGFnLCBudWxsKTtcbiAgfVxufTtcblxuLy8gc3JjL2F1dG90cmFja01lbW9pemUvcHJveHkudHNcbnZhciBSRURVWF9QUk9YWV9MQUJFTCA9IFN5bWJvbCgpO1xudmFyIG5leHRJZCA9IDA7XG52YXIgcHJvdG8gPSBPYmplY3QuZ2V0UHJvdG90eXBlT2Yoe30pO1xudmFyIE9iamVjdFRyZWVOb2RlID0gY2xhc3Mge1xuICBjb25zdHJ1Y3Rvcih2YWx1ZSkge1xuICAgIHRoaXMudmFsdWUgPSB2YWx1ZTtcbiAgICB0aGlzLnZhbHVlID0gdmFsdWU7XG4gICAgdGhpcy50YWcudmFsdWUgPSB2YWx1ZTtcbiAgfVxuICBwcm94eSA9IG5ldyBQcm94eSh0aGlzLCBvYmplY3RQcm94eUhhbmRsZXIpO1xuICB0YWcgPSBjcmVhdGVUYWcoKTtcbiAgdGFncyA9IHt9O1xuICBjaGlsZHJlbiA9IHt9O1xuICBjb2xsZWN0aW9uVGFnID0gbnVsbDtcbiAgaWQgPSBuZXh0SWQrKztcbn07XG52YXIgb2JqZWN0UHJveHlIYW5kbGVyID0ge1xuICBnZXQobm9kZSwga2V5KSB7XG4gICAgZnVuY3Rpb24gY2FsY3VsYXRlUmVzdWx0KCkge1xuICAgICAgY29uc3QgeyB2YWx1ZSB9ID0gbm9kZTtcbiAgICAgIGNvbnN0IGNoaWxkVmFsdWUgPSBSZWZsZWN0LmdldCh2YWx1ZSwga2V5KTtcbiAgICAgIGlmICh0eXBlb2Yga2V5ID09PSBcInN5bWJvbFwiKSB7XG4gICAgICAgIHJldHVybiBjaGlsZFZhbHVlO1xuICAgICAgfVxuICAgICAgaWYgKGtleSBpbiBwcm90bykge1xuICAgICAgICByZXR1cm4gY2hpbGRWYWx1ZTtcbiAgICAgIH1cbiAgICAgIGlmICh0eXBlb2YgY2hpbGRWYWx1ZSA9PT0gXCJvYmplY3RcIiAmJiBjaGlsZFZhbHVlICE9PSBudWxsKSB7XG4gICAgICAgIGxldCBjaGlsZE5vZGUgPSBub2RlLmNoaWxkcmVuW2tleV07XG4gICAgICAgIGlmIChjaGlsZE5vZGUgPT09IHZvaWQgMCkge1xuICAgICAgICAgIGNoaWxkTm9kZSA9IG5vZGUuY2hpbGRyZW5ba2V5XSA9IGNyZWF0ZU5vZGUoY2hpbGRWYWx1ZSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGNoaWxkTm9kZS50YWcpIHtcbiAgICAgICAgICBnZXRWYWx1ZShjaGlsZE5vZGUudGFnKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gY2hpbGROb2RlLnByb3h5O1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgbGV0IHRhZyA9IG5vZGUudGFnc1trZXldO1xuICAgICAgICBpZiAodGFnID09PSB2b2lkIDApIHtcbiAgICAgICAgICB0YWcgPSBub2RlLnRhZ3Nba2V5XSA9IGNyZWF0ZVRhZygpO1xuICAgICAgICAgIHRhZy52YWx1ZSA9IGNoaWxkVmFsdWU7XG4gICAgICAgIH1cbiAgICAgICAgZ2V0VmFsdWUodGFnKTtcbiAgICAgICAgcmV0dXJuIGNoaWxkVmFsdWU7XG4gICAgICB9XG4gICAgfVxuICAgIGNvbnN0IHJlcyA9IGNhbGN1bGF0ZVJlc3VsdCgpO1xuICAgIHJldHVybiByZXM7XG4gIH0sXG4gIG93bktleXMobm9kZSkge1xuICAgIGNvbnN1bWVDb2xsZWN0aW9uKG5vZGUpO1xuICAgIHJldHVybiBSZWZsZWN0Lm93bktleXMobm9kZS52YWx1ZSk7XG4gIH0sXG4gIGdldE93blByb3BlcnR5RGVzY3JpcHRvcihub2RlLCBwcm9wKSB7XG4gICAgcmV0dXJuIFJlZmxlY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKG5vZGUudmFsdWUsIHByb3ApO1xuICB9LFxuICBoYXMobm9kZSwgcHJvcCkge1xuICAgIHJldHVybiBSZWZsZWN0Lmhhcyhub2RlLnZhbHVlLCBwcm9wKTtcbiAgfVxufTtcbnZhciBBcnJheVRyZWVOb2RlID0gY2xhc3Mge1xuICBjb25zdHJ1Y3Rvcih2YWx1ZSkge1xuICAgIHRoaXMudmFsdWUgPSB2YWx1ZTtcbiAgICB0aGlzLnZhbHVlID0gdmFsdWU7XG4gICAgdGhpcy50YWcudmFsdWUgPSB2YWx1ZTtcbiAgfVxuICBwcm94eSA9IG5ldyBQcm94eShbdGhpc10sIGFycmF5UHJveHlIYW5kbGVyKTtcbiAgdGFnID0gY3JlYXRlVGFnKCk7XG4gIHRhZ3MgPSB7fTtcbiAgY2hpbGRyZW4gPSB7fTtcbiAgY29sbGVjdGlvblRhZyA9IG51bGw7XG4gIGlkID0gbmV4dElkKys7XG59O1xudmFyIGFycmF5UHJveHlIYW5kbGVyID0ge1xuICBnZXQoW25vZGVdLCBrZXkpIHtcbiAgICBpZiAoa2V5ID09PSBcImxlbmd0aFwiKSB7XG4gICAgICBjb25zdW1lQ29sbGVjdGlvbihub2RlKTtcbiAgICB9XG4gICAgcmV0dXJuIG9iamVjdFByb3h5SGFuZGxlci5nZXQobm9kZSwga2V5KTtcbiAgfSxcbiAgb3duS2V5cyhbbm9kZV0pIHtcbiAgICByZXR1cm4gb2JqZWN0UHJveHlIYW5kbGVyLm93bktleXMobm9kZSk7XG4gIH0sXG4gIGdldE93blByb3BlcnR5RGVzY3JpcHRvcihbbm9kZV0sIHByb3ApIHtcbiAgICByZXR1cm4gb2JqZWN0UHJveHlIYW5kbGVyLmdldE93blByb3BlcnR5RGVzY3JpcHRvcihub2RlLCBwcm9wKTtcbiAgfSxcbiAgaGFzKFtub2RlXSwgcHJvcCkge1xuICAgIHJldHVybiBvYmplY3RQcm94eUhhbmRsZXIuaGFzKG5vZGUsIHByb3ApO1xuICB9XG59O1xuZnVuY3Rpb24gY3JlYXRlTm9kZSh2YWx1ZSkge1xuICBpZiAoQXJyYXkuaXNBcnJheSh2YWx1ZSkpIHtcbiAgICByZXR1cm4gbmV3IEFycmF5VHJlZU5vZGUodmFsdWUpO1xuICB9XG4gIHJldHVybiBuZXcgT2JqZWN0VHJlZU5vZGUodmFsdWUpO1xufVxuZnVuY3Rpb24gdXBkYXRlTm9kZShub2RlLCBuZXdWYWx1ZSkge1xuICBjb25zdCB7IHZhbHVlLCB0YWdzLCBjaGlsZHJlbiB9ID0gbm9kZTtcbiAgbm9kZS52YWx1ZSA9IG5ld1ZhbHVlO1xuICBpZiAoQXJyYXkuaXNBcnJheSh2YWx1ZSkgJiYgQXJyYXkuaXNBcnJheShuZXdWYWx1ZSkgJiYgdmFsdWUubGVuZ3RoICE9PSBuZXdWYWx1ZS5sZW5ndGgpIHtcbiAgICBkaXJ0eUNvbGxlY3Rpb24obm9kZSk7XG4gIH0gZWxzZSB7XG4gICAgaWYgKHZhbHVlICE9PSBuZXdWYWx1ZSkge1xuICAgICAgbGV0IG9sZEtleXNTaXplID0gMDtcbiAgICAgIGxldCBuZXdLZXlzU2l6ZSA9IDA7XG4gICAgICBsZXQgYW55S2V5c0FkZGVkID0gZmFsc2U7XG4gICAgICBmb3IgKGNvbnN0IF9rZXkgaW4gdmFsdWUpIHtcbiAgICAgICAgb2xkS2V5c1NpemUrKztcbiAgICAgIH1cbiAgICAgIGZvciAoY29uc3Qga2V5IGluIG5ld1ZhbHVlKSB7XG4gICAgICAgIG5ld0tleXNTaXplKys7XG4gICAgICAgIGlmICghKGtleSBpbiB2YWx1ZSkpIHtcbiAgICAgICAgICBhbnlLZXlzQWRkZWQgPSB0cnVlO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBjb25zdCBpc0RpZmZlcmVudCA9IGFueUtleXNBZGRlZCB8fCBvbGRLZXlzU2l6ZSAhPT0gbmV3S2V5c1NpemU7XG4gICAgICBpZiAoaXNEaWZmZXJlbnQpIHtcbiAgICAgICAgZGlydHlDb2xsZWN0aW9uKG5vZGUpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICBmb3IgKGNvbnN0IGtleSBpbiB0YWdzKSB7XG4gICAgY29uc3QgY2hpbGRWYWx1ZSA9IHZhbHVlW2tleV07XG4gICAgY29uc3QgbmV3Q2hpbGRWYWx1ZSA9IG5ld1ZhbHVlW2tleV07XG4gICAgaWYgKGNoaWxkVmFsdWUgIT09IG5ld0NoaWxkVmFsdWUpIHtcbiAgICAgIGRpcnR5Q29sbGVjdGlvbihub2RlKTtcbiAgICAgIGRpcnR5VGFnKHRhZ3Nba2V5XSwgbmV3Q2hpbGRWYWx1ZSk7XG4gICAgfVxuICAgIGlmICh0eXBlb2YgbmV3Q2hpbGRWYWx1ZSA9PT0gXCJvYmplY3RcIiAmJiBuZXdDaGlsZFZhbHVlICE9PSBudWxsKSB7XG4gICAgICBkZWxldGUgdGFnc1trZXldO1xuICAgIH1cbiAgfVxuICBmb3IgKGNvbnN0IGtleSBpbiBjaGlsZHJlbikge1xuICAgIGNvbnN0IGNoaWxkTm9kZSA9IGNoaWxkcmVuW2tleV07XG4gICAgY29uc3QgbmV3Q2hpbGRWYWx1ZSA9IG5ld1ZhbHVlW2tleV07XG4gICAgY29uc3QgY2hpbGRWYWx1ZSA9IGNoaWxkTm9kZS52YWx1ZTtcbiAgICBpZiAoY2hpbGRWYWx1ZSA9PT0gbmV3Q2hpbGRWYWx1ZSkge1xuICAgICAgY29udGludWU7XG4gICAgfSBlbHNlIGlmICh0eXBlb2YgbmV3Q2hpbGRWYWx1ZSA9PT0gXCJvYmplY3RcIiAmJiBuZXdDaGlsZFZhbHVlICE9PSBudWxsKSB7XG4gICAgICB1cGRhdGVOb2RlKGNoaWxkTm9kZSwgbmV3Q2hpbGRWYWx1ZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGRlbGV0ZU5vZGUoY2hpbGROb2RlKTtcbiAgICAgIGRlbGV0ZSBjaGlsZHJlbltrZXldO1xuICAgIH1cbiAgfVxufVxuZnVuY3Rpb24gZGVsZXRlTm9kZShub2RlKSB7XG4gIGlmIChub2RlLnRhZykge1xuICAgIGRpcnR5VGFnKG5vZGUudGFnLCBudWxsKTtcbiAgfVxuICBkaXJ0eUNvbGxlY3Rpb24obm9kZSk7XG4gIGZvciAoY29uc3Qga2V5IGluIG5vZGUudGFncykge1xuICAgIGRpcnR5VGFnKG5vZGUudGFnc1trZXldLCBudWxsKTtcbiAgfVxuICBmb3IgKGNvbnN0IGtleSBpbiBub2RlLmNoaWxkcmVuKSB7XG4gICAgZGVsZXRlTm9kZShub2RlLmNoaWxkcmVuW2tleV0pO1xuICB9XG59XG5cbi8vIHNyYy9scnVNZW1vaXplLnRzXG5mdW5jdGlvbiBjcmVhdGVTaW5nbGV0b25DYWNoZShlcXVhbHMpIHtcbiAgbGV0IGVudHJ5O1xuICByZXR1cm4ge1xuICAgIGdldChrZXkpIHtcbiAgICAgIGlmIChlbnRyeSAmJiBlcXVhbHMoZW50cnkua2V5LCBrZXkpKSB7XG4gICAgICAgIHJldHVybiBlbnRyeS52YWx1ZTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBOT1RfRk9VTkQ7XG4gICAgfSxcbiAgICBwdXQoa2V5LCB2YWx1ZSkge1xuICAgICAgZW50cnkgPSB7IGtleSwgdmFsdWUgfTtcbiAgICB9LFxuICAgIGdldEVudHJpZXMoKSB7XG4gICAgICByZXR1cm4gZW50cnkgPyBbZW50cnldIDogW107XG4gICAgfSxcbiAgICBjbGVhcigpIHtcbiAgICAgIGVudHJ5ID0gdm9pZCAwO1xuICAgIH1cbiAgfTtcbn1cbmZ1bmN0aW9uIGNyZWF0ZUxydUNhY2hlKG1heFNpemUsIGVxdWFscykge1xuICBsZXQgZW50cmllcyA9IFtdO1xuICBmdW5jdGlvbiBnZXQoa2V5KSB7XG4gICAgY29uc3QgY2FjaGVJbmRleCA9IGVudHJpZXMuZmluZEluZGV4KChlbnRyeSkgPT4gZXF1YWxzKGtleSwgZW50cnkua2V5KSk7XG4gICAgaWYgKGNhY2hlSW5kZXggPiAtMSkge1xuICAgICAgY29uc3QgZW50cnkgPSBlbnRyaWVzW2NhY2hlSW5kZXhdO1xuICAgICAgaWYgKGNhY2hlSW5kZXggPiAwKSB7XG4gICAgICAgIGVudHJpZXMuc3BsaWNlKGNhY2hlSW5kZXgsIDEpO1xuICAgICAgICBlbnRyaWVzLnVuc2hpZnQoZW50cnkpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGVudHJ5LnZhbHVlO1xuICAgIH1cbiAgICByZXR1cm4gTk9UX0ZPVU5EO1xuICB9XG4gIGZ1bmN0aW9uIHB1dChrZXksIHZhbHVlKSB7XG4gICAgaWYgKGdldChrZXkpID09PSBOT1RfRk9VTkQpIHtcbiAgICAgIGVudHJpZXMudW5zaGlmdCh7IGtleSwgdmFsdWUgfSk7XG4gICAgICBpZiAoZW50cmllcy5sZW5ndGggPiBtYXhTaXplKSB7XG4gICAgICAgIGVudHJpZXMucG9wKCk7XG4gICAgICB9XG4gICAgfVxuICB9XG4gIGZ1bmN0aW9uIGdldEVudHJpZXMoKSB7XG4gICAgcmV0dXJuIGVudHJpZXM7XG4gIH1cbiAgZnVuY3Rpb24gY2xlYXIoKSB7XG4gICAgZW50cmllcyA9IFtdO1xuICB9XG4gIHJldHVybiB7IGdldCwgcHV0LCBnZXRFbnRyaWVzLCBjbGVhciB9O1xufVxudmFyIHJlZmVyZW5jZUVxdWFsaXR5Q2hlY2sgPSAoYSwgYikgPT4gYSA9PT0gYjtcbmZ1bmN0aW9uIGNyZWF0ZUNhY2hlS2V5Q29tcGFyYXRvcihlcXVhbGl0eUNoZWNrKSB7XG4gIHJldHVybiBmdW5jdGlvbiBhcmVBcmd1bWVudHNTaGFsbG93bHlFcXVhbChwcmV2LCBuZXh0KSB7XG4gICAgaWYgKHByZXYgPT09IG51bGwgfHwgbmV4dCA9PT0gbnVsbCB8fCBwcmV2Lmxlbmd0aCAhPT0gbmV4dC5sZW5ndGgpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgY29uc3QgeyBsZW5ndGggfSA9IHByZXY7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykge1xuICAgICAgaWYgKCFlcXVhbGl0eUNoZWNrKHByZXZbaV0sIG5leHRbaV0pKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHRydWU7XG4gIH07XG59XG5mdW5jdGlvbiBscnVNZW1vaXplKGZ1bmMsIGVxdWFsaXR5Q2hlY2tPck9wdGlvbnMpIHtcbiAgY29uc3QgcHJvdmlkZWRPcHRpb25zID0gdHlwZW9mIGVxdWFsaXR5Q2hlY2tPck9wdGlvbnMgPT09IFwib2JqZWN0XCIgPyBlcXVhbGl0eUNoZWNrT3JPcHRpb25zIDogeyBlcXVhbGl0eUNoZWNrOiBlcXVhbGl0eUNoZWNrT3JPcHRpb25zIH07XG4gIGNvbnN0IHtcbiAgICBlcXVhbGl0eUNoZWNrID0gcmVmZXJlbmNlRXF1YWxpdHlDaGVjayxcbiAgICBtYXhTaXplID0gMSxcbiAgICByZXN1bHRFcXVhbGl0eUNoZWNrXG4gIH0gPSBwcm92aWRlZE9wdGlvbnM7XG4gIGNvbnN0IGNvbXBhcmF0b3IgPSBjcmVhdGVDYWNoZUtleUNvbXBhcmF0b3IoZXF1YWxpdHlDaGVjayk7XG4gIGxldCByZXN1bHRzQ291bnQgPSAwO1xuICBjb25zdCBjYWNoZSA9IG1heFNpemUgPD0gMSA/IGNyZWF0ZVNpbmdsZXRvbkNhY2hlKGNvbXBhcmF0b3IpIDogY3JlYXRlTHJ1Q2FjaGUobWF4U2l6ZSwgY29tcGFyYXRvcik7XG4gIGZ1bmN0aW9uIG1lbW9pemVkKCkge1xuICAgIGxldCB2YWx1ZSA9IGNhY2hlLmdldChhcmd1bWVudHMpO1xuICAgIGlmICh2YWx1ZSA9PT0gTk9UX0ZPVU5EKSB7XG4gICAgICB2YWx1ZSA9IGZ1bmMuYXBwbHkobnVsbCwgYXJndW1lbnRzKTtcbiAgICAgIHJlc3VsdHNDb3VudCsrO1xuICAgICAgaWYgKHJlc3VsdEVxdWFsaXR5Q2hlY2spIHtcbiAgICAgICAgY29uc3QgZW50cmllcyA9IGNhY2hlLmdldEVudHJpZXMoKTtcbiAgICAgICAgY29uc3QgbWF0Y2hpbmdFbnRyeSA9IGVudHJpZXMuZmluZChcbiAgICAgICAgICAoZW50cnkpID0+IHJlc3VsdEVxdWFsaXR5Q2hlY2soZW50cnkudmFsdWUsIHZhbHVlKVxuICAgICAgICApO1xuICAgICAgICBpZiAobWF0Y2hpbmdFbnRyeSkge1xuICAgICAgICAgIHZhbHVlID0gbWF0Y2hpbmdFbnRyeS52YWx1ZTtcbiAgICAgICAgICByZXN1bHRzQ291bnQgIT09IDAgJiYgcmVzdWx0c0NvdW50LS07XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGNhY2hlLnB1dChhcmd1bWVudHMsIHZhbHVlKTtcbiAgICB9XG4gICAgcmV0dXJuIHZhbHVlO1xuICB9XG4gIG1lbW9pemVkLmNsZWFyQ2FjaGUgPSAoKSA9PiB7XG4gICAgY2FjaGUuY2xlYXIoKTtcbiAgICBtZW1vaXplZC5yZXNldFJlc3VsdHNDb3VudCgpO1xuICB9O1xuICBtZW1vaXplZC5yZXN1bHRzQ291bnQgPSAoKSA9PiByZXN1bHRzQ291bnQ7XG4gIG1lbW9pemVkLnJlc2V0UmVzdWx0c0NvdW50ID0gKCkgPT4ge1xuICAgIHJlc3VsdHNDb3VudCA9IDA7XG4gIH07XG4gIHJldHVybiBtZW1vaXplZDtcbn1cblxuLy8gc3JjL2F1dG90cmFja01lbW9pemUvYXV0b3RyYWNrTWVtb2l6ZS50c1xuZnVuY3Rpb24gYXV0b3RyYWNrTWVtb2l6ZShmdW5jKSB7XG4gIGNvbnN0IG5vZGUgPSBjcmVhdGVOb2RlKFxuICAgIFtdXG4gICk7XG4gIGxldCBsYXN0QXJncyA9IG51bGw7XG4gIGNvbnN0IHNoYWxsb3dFcXVhbCA9IGNyZWF0ZUNhY2hlS2V5Q29tcGFyYXRvcihyZWZlcmVuY2VFcXVhbGl0eUNoZWNrKTtcbiAgY29uc3QgY2FjaGUgPSBjcmVhdGVDYWNoZSgoKSA9PiB7XG4gICAgY29uc3QgcmVzID0gZnVuYy5hcHBseShudWxsLCBub2RlLnByb3h5KTtcbiAgICByZXR1cm4gcmVzO1xuICB9KTtcbiAgZnVuY3Rpb24gbWVtb2l6ZWQoKSB7XG4gICAgaWYgKCFzaGFsbG93RXF1YWwobGFzdEFyZ3MsIGFyZ3VtZW50cykpIHtcbiAgICAgIHVwZGF0ZU5vZGUobm9kZSwgYXJndW1lbnRzKTtcbiAgICAgIGxhc3RBcmdzID0gYXJndW1lbnRzO1xuICAgIH1cbiAgICByZXR1cm4gY2FjaGUudmFsdWU7XG4gIH1cbiAgbWVtb2l6ZWQuY2xlYXJDYWNoZSA9ICgpID0+IHtcbiAgICByZXR1cm4gY2FjaGUuY2xlYXIoKTtcbiAgfTtcbiAgcmV0dXJuIG1lbW9pemVkO1xufVxuXG4vLyBzcmMvd2Vha01hcE1lbW9pemUudHNcbnZhciBTdHJvbmdSZWYgPSBjbGFzcyB7XG4gIGNvbnN0cnVjdG9yKHZhbHVlKSB7XG4gICAgdGhpcy52YWx1ZSA9IHZhbHVlO1xuICB9XG4gIGRlcmVmKCkge1xuICAgIHJldHVybiB0aGlzLnZhbHVlO1xuICB9XG59O1xudmFyIFJlZiA9IHR5cGVvZiBXZWFrUmVmICE9PSBcInVuZGVmaW5lZFwiID8gV2Vha1JlZiA6IFN0cm9uZ1JlZjtcbnZhciBVTlRFUk1JTkFURUQgPSAwO1xudmFyIFRFUk1JTkFURUQgPSAxO1xuZnVuY3Rpb24gY3JlYXRlQ2FjaGVOb2RlKCkge1xuICByZXR1cm4ge1xuICAgIHM6IFVOVEVSTUlOQVRFRCxcbiAgICB2OiB2b2lkIDAsXG4gICAgbzogbnVsbCxcbiAgICBwOiBudWxsXG4gIH07XG59XG5mdW5jdGlvbiB3ZWFrTWFwTWVtb2l6ZShmdW5jLCBvcHRpb25zID0ge30pIHtcbiAgbGV0IGZuTm9kZSA9IGNyZWF0ZUNhY2hlTm9kZSgpO1xuICBjb25zdCB7IHJlc3VsdEVxdWFsaXR5Q2hlY2sgfSA9IG9wdGlvbnM7XG4gIGxldCBsYXN0UmVzdWx0O1xuICBsZXQgcmVzdWx0c0NvdW50ID0gMDtcbiAgZnVuY3Rpb24gbWVtb2l6ZWQoKSB7XG4gICAgbGV0IGNhY2hlTm9kZSA9IGZuTm9kZTtcbiAgICBjb25zdCB7IGxlbmd0aCB9ID0gYXJndW1lbnRzO1xuICAgIGZvciAobGV0IGkgPSAwLCBsID0gbGVuZ3RoOyBpIDwgbDsgaSsrKSB7XG4gICAgICBjb25zdCBhcmcgPSBhcmd1bWVudHNbaV07XG4gICAgICBpZiAodHlwZW9mIGFyZyA9PT0gXCJmdW5jdGlvblwiIHx8IHR5cGVvZiBhcmcgPT09IFwib2JqZWN0XCIgJiYgYXJnICE9PSBudWxsKSB7XG4gICAgICAgIGxldCBvYmplY3RDYWNoZSA9IGNhY2hlTm9kZS5vO1xuICAgICAgICBpZiAob2JqZWN0Q2FjaGUgPT09IG51bGwpIHtcbiAgICAgICAgICBjYWNoZU5vZGUubyA9IG9iamVjdENhY2hlID0gLyogQF9fUFVSRV9fICovIG5ldyBXZWFrTWFwKCk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3Qgb2JqZWN0Tm9kZSA9IG9iamVjdENhY2hlLmdldChhcmcpO1xuICAgICAgICBpZiAob2JqZWN0Tm9kZSA9PT0gdm9pZCAwKSB7XG4gICAgICAgICAgY2FjaGVOb2RlID0gY3JlYXRlQ2FjaGVOb2RlKCk7XG4gICAgICAgICAgb2JqZWN0Q2FjaGUuc2V0KGFyZywgY2FjaGVOb2RlKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBjYWNoZU5vZGUgPSBvYmplY3ROb2RlO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBsZXQgcHJpbWl0aXZlQ2FjaGUgPSBjYWNoZU5vZGUucDtcbiAgICAgICAgaWYgKHByaW1pdGl2ZUNhY2hlID09PSBudWxsKSB7XG4gICAgICAgICAgY2FjaGVOb2RlLnAgPSBwcmltaXRpdmVDYWNoZSA9IC8qIEBfX1BVUkVfXyAqLyBuZXcgTWFwKCk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgcHJpbWl0aXZlTm9kZSA9IHByaW1pdGl2ZUNhY2hlLmdldChhcmcpO1xuICAgICAgICBpZiAocHJpbWl0aXZlTm9kZSA9PT0gdm9pZCAwKSB7XG4gICAgICAgICAgY2FjaGVOb2RlID0gY3JlYXRlQ2FjaGVOb2RlKCk7XG4gICAgICAgICAgcHJpbWl0aXZlQ2FjaGUuc2V0KGFyZywgY2FjaGVOb2RlKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBjYWNoZU5vZGUgPSBwcmltaXRpdmVOb2RlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIGNvbnN0IHRlcm1pbmF0ZWROb2RlID0gY2FjaGVOb2RlO1xuICAgIGxldCByZXN1bHQ7XG4gICAgaWYgKGNhY2hlTm9kZS5zID09PSBURVJNSU5BVEVEKSB7XG4gICAgICByZXN1bHQgPSBjYWNoZU5vZGUudjtcbiAgICB9IGVsc2Uge1xuICAgICAgcmVzdWx0ID0gZnVuYy5hcHBseShudWxsLCBhcmd1bWVudHMpO1xuICAgICAgcmVzdWx0c0NvdW50Kys7XG4gICAgICBpZiAocmVzdWx0RXF1YWxpdHlDaGVjaykge1xuICAgICAgICBjb25zdCBsYXN0UmVzdWx0VmFsdWUgPSBsYXN0UmVzdWx0Py5kZXJlZj8uKCkgPz8gbGFzdFJlc3VsdDtcbiAgICAgICAgaWYgKGxhc3RSZXN1bHRWYWx1ZSAhPSBudWxsICYmIHJlc3VsdEVxdWFsaXR5Q2hlY2sobGFzdFJlc3VsdFZhbHVlLCByZXN1bHQpKSB7XG4gICAgICAgICAgcmVzdWx0ID0gbGFzdFJlc3VsdFZhbHVlO1xuICAgICAgICAgIHJlc3VsdHNDb3VudCAhPT0gMCAmJiByZXN1bHRzQ291bnQtLTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBuZWVkc1dlYWtSZWYgPSB0eXBlb2YgcmVzdWx0ID09PSBcIm9iamVjdFwiICYmIHJlc3VsdCAhPT0gbnVsbCB8fCB0eXBlb2YgcmVzdWx0ID09PSBcImZ1bmN0aW9uXCI7XG4gICAgICAgIGxhc3RSZXN1bHQgPSBuZWVkc1dlYWtSZWYgPyBuZXcgUmVmKHJlc3VsdCkgOiByZXN1bHQ7XG4gICAgICB9XG4gICAgfVxuICAgIHRlcm1pbmF0ZWROb2RlLnMgPSBURVJNSU5BVEVEO1xuICAgIHRlcm1pbmF0ZWROb2RlLnYgPSByZXN1bHQ7XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuICBtZW1vaXplZC5jbGVhckNhY2hlID0gKCkgPT4ge1xuICAgIGZuTm9kZSA9IGNyZWF0ZUNhY2hlTm9kZSgpO1xuICAgIG1lbW9pemVkLnJlc2V0UmVzdWx0c0NvdW50KCk7XG4gIH07XG4gIG1lbW9pemVkLnJlc3VsdHNDb3VudCA9ICgpID0+IHJlc3VsdHNDb3VudDtcbiAgbWVtb2l6ZWQucmVzZXRSZXN1bHRzQ291bnQgPSAoKSA9PiB7XG4gICAgcmVzdWx0c0NvdW50ID0gMDtcbiAgfTtcbiAgcmV0dXJuIG1lbW9pemVkO1xufVxuXG4vLyBzcmMvY3JlYXRlU2VsZWN0b3JDcmVhdG9yLnRzXG5mdW5jdGlvbiBjcmVhdGVTZWxlY3RvckNyZWF0b3IobWVtb2l6ZU9yT3B0aW9ucywgLi4ubWVtb2l6ZU9wdGlvbnNGcm9tQXJncykge1xuICBjb25zdCBjcmVhdGVTZWxlY3RvckNyZWF0b3JPcHRpb25zID0gdHlwZW9mIG1lbW9pemVPck9wdGlvbnMgPT09IFwiZnVuY3Rpb25cIiA/IHtcbiAgICBtZW1vaXplOiBtZW1vaXplT3JPcHRpb25zLFxuICAgIG1lbW9pemVPcHRpb25zOiBtZW1vaXplT3B0aW9uc0Zyb21BcmdzXG4gIH0gOiBtZW1vaXplT3JPcHRpb25zO1xuICBjb25zdCBjcmVhdGVTZWxlY3RvcjIgPSAoLi4uY3JlYXRlU2VsZWN0b3JBcmdzKSA9PiB7XG4gICAgbGV0IHJlY29tcHV0YXRpb25zID0gMDtcbiAgICBsZXQgZGVwZW5kZW5jeVJlY29tcHV0YXRpb25zID0gMDtcbiAgICBsZXQgbGFzdFJlc3VsdDtcbiAgICBsZXQgZGlyZWN0bHlQYXNzZWRPcHRpb25zID0ge307XG4gICAgbGV0IHJlc3VsdEZ1bmMgPSBjcmVhdGVTZWxlY3RvckFyZ3MucG9wKCk7XG4gICAgaWYgKHR5cGVvZiByZXN1bHRGdW5jID09PSBcIm9iamVjdFwiKSB7XG4gICAgICBkaXJlY3RseVBhc3NlZE9wdGlvbnMgPSByZXN1bHRGdW5jO1xuICAgICAgcmVzdWx0RnVuYyA9IGNyZWF0ZVNlbGVjdG9yQXJncy5wb3AoKTtcbiAgICB9XG4gICAgYXNzZXJ0SXNGdW5jdGlvbihcbiAgICAgIHJlc3VsdEZ1bmMsXG4gICAgICBgY3JlYXRlU2VsZWN0b3IgZXhwZWN0cyBhbiBvdXRwdXQgZnVuY3Rpb24gYWZ0ZXIgdGhlIGlucHV0cywgYnV0IHJlY2VpdmVkOiBbJHt0eXBlb2YgcmVzdWx0RnVuY31dYFxuICAgICk7XG4gICAgY29uc3QgY29tYmluZWRPcHRpb25zID0ge1xuICAgICAgLi4uY3JlYXRlU2VsZWN0b3JDcmVhdG9yT3B0aW9ucyxcbiAgICAgIC4uLmRpcmVjdGx5UGFzc2VkT3B0aW9uc1xuICAgIH07XG4gICAgY29uc3Qge1xuICAgICAgbWVtb2l6ZSxcbiAgICAgIG1lbW9pemVPcHRpb25zID0gW10sXG4gICAgICBhcmdzTWVtb2l6ZSA9IHdlYWtNYXBNZW1vaXplLFxuICAgICAgYXJnc01lbW9pemVPcHRpb25zID0gW10sXG4gICAgICBkZXZNb2RlQ2hlY2tzID0ge31cbiAgICB9ID0gY29tYmluZWRPcHRpb25zO1xuICAgIGNvbnN0IGZpbmFsTWVtb2l6ZU9wdGlvbnMgPSBlbnN1cmVJc0FycmF5KG1lbW9pemVPcHRpb25zKTtcbiAgICBjb25zdCBmaW5hbEFyZ3NNZW1vaXplT3B0aW9ucyA9IGVuc3VyZUlzQXJyYXkoYXJnc01lbW9pemVPcHRpb25zKTtcbiAgICBjb25zdCBkZXBlbmRlbmNpZXMgPSBnZXREZXBlbmRlbmNpZXMoY3JlYXRlU2VsZWN0b3JBcmdzKTtcbiAgICBjb25zdCBtZW1vaXplZFJlc3VsdEZ1bmMgPSBtZW1vaXplKGZ1bmN0aW9uIHJlY29tcHV0YXRpb25XcmFwcGVyKCkge1xuICAgICAgcmVjb21wdXRhdGlvbnMrKztcbiAgICAgIHJldHVybiByZXN1bHRGdW5jLmFwcGx5KFxuICAgICAgICBudWxsLFxuICAgICAgICBhcmd1bWVudHNcbiAgICAgICk7XG4gICAgfSwgLi4uZmluYWxNZW1vaXplT3B0aW9ucyk7XG4gICAgbGV0IGZpcnN0UnVuID0gdHJ1ZTtcbiAgICBjb25zdCBzZWxlY3RvciA9IGFyZ3NNZW1vaXplKGZ1bmN0aW9uIGRlcGVuZGVuY2llc0NoZWNrZXIoKSB7XG4gICAgICBkZXBlbmRlbmN5UmVjb21wdXRhdGlvbnMrKztcbiAgICAgIGNvbnN0IGlucHV0U2VsZWN0b3JSZXN1bHRzID0gY29sbGVjdElucHV0U2VsZWN0b3JSZXN1bHRzKFxuICAgICAgICBkZXBlbmRlbmNpZXMsXG4gICAgICAgIGFyZ3VtZW50c1xuICAgICAgKTtcbiAgICAgIGxhc3RSZXN1bHQgPSBtZW1vaXplZFJlc3VsdEZ1bmMuYXBwbHkobnVsbCwgaW5wdXRTZWxlY3RvclJlc3VsdHMpO1xuICAgICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIikge1xuICAgICAgICBjb25zdCB7IGlkZW50aXR5RnVuY3Rpb25DaGVjaywgaW5wdXRTdGFiaWxpdHlDaGVjayB9ID0gZ2V0RGV2TW9kZUNoZWNrc0V4ZWN1dGlvbkluZm8oZmlyc3RSdW4sIGRldk1vZGVDaGVja3MpO1xuICAgICAgICBpZiAoaWRlbnRpdHlGdW5jdGlvbkNoZWNrLnNob3VsZFJ1bikge1xuICAgICAgICAgIGlkZW50aXR5RnVuY3Rpb25DaGVjay5ydW4oXG4gICAgICAgICAgICByZXN1bHRGdW5jLFxuICAgICAgICAgICAgaW5wdXRTZWxlY3RvclJlc3VsdHMsXG4gICAgICAgICAgICBsYXN0UmVzdWx0XG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoaW5wdXRTdGFiaWxpdHlDaGVjay5zaG91bGRSdW4pIHtcbiAgICAgICAgICBjb25zdCBpbnB1dFNlbGVjdG9yUmVzdWx0c0NvcHkgPSBjb2xsZWN0SW5wdXRTZWxlY3RvclJlc3VsdHMoXG4gICAgICAgICAgICBkZXBlbmRlbmNpZXMsXG4gICAgICAgICAgICBhcmd1bWVudHNcbiAgICAgICAgICApO1xuICAgICAgICAgIGlucHV0U3RhYmlsaXR5Q2hlY2sucnVuKFxuICAgICAgICAgICAgeyBpbnB1dFNlbGVjdG9yUmVzdWx0cywgaW5wdXRTZWxlY3RvclJlc3VsdHNDb3B5IH0sXG4gICAgICAgICAgICB7IG1lbW9pemUsIG1lbW9pemVPcHRpb25zOiBmaW5hbE1lbW9pemVPcHRpb25zIH0sXG4gICAgICAgICAgICBhcmd1bWVudHNcbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICAgIGlmIChmaXJzdFJ1bilcbiAgICAgICAgICBmaXJzdFJ1biA9IGZhbHNlO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGxhc3RSZXN1bHQ7XG4gICAgfSwgLi4uZmluYWxBcmdzTWVtb2l6ZU9wdGlvbnMpO1xuICAgIHJldHVybiBPYmplY3QuYXNzaWduKHNlbGVjdG9yLCB7XG4gICAgICByZXN1bHRGdW5jLFxuICAgICAgbWVtb2l6ZWRSZXN1bHRGdW5jLFxuICAgICAgZGVwZW5kZW5jaWVzLFxuICAgICAgZGVwZW5kZW5jeVJlY29tcHV0YXRpb25zOiAoKSA9PiBkZXBlbmRlbmN5UmVjb21wdXRhdGlvbnMsXG4gICAgICByZXNldERlcGVuZGVuY3lSZWNvbXB1dGF0aW9uczogKCkgPT4ge1xuICAgICAgICBkZXBlbmRlbmN5UmVjb21wdXRhdGlvbnMgPSAwO1xuICAgICAgfSxcbiAgICAgIGxhc3RSZXN1bHQ6ICgpID0+IGxhc3RSZXN1bHQsXG4gICAgICByZWNvbXB1dGF0aW9uczogKCkgPT4gcmVjb21wdXRhdGlvbnMsXG4gICAgICByZXNldFJlY29tcHV0YXRpb25zOiAoKSA9PiB7XG4gICAgICAgIHJlY29tcHV0YXRpb25zID0gMDtcbiAgICAgIH0sXG4gICAgICBtZW1vaXplLFxuICAgICAgYXJnc01lbW9pemVcbiAgICB9KTtcbiAgfTtcbiAgT2JqZWN0LmFzc2lnbihjcmVhdGVTZWxlY3RvcjIsIHtcbiAgICB3aXRoVHlwZXM6ICgpID0+IGNyZWF0ZVNlbGVjdG9yMlxuICB9KTtcbiAgcmV0dXJuIGNyZWF0ZVNlbGVjdG9yMjtcbn1cbnZhciBjcmVhdGVTZWxlY3RvciA9IC8qIEBfX1BVUkVfXyAqLyBjcmVhdGVTZWxlY3RvckNyZWF0b3Iod2Vha01hcE1lbW9pemUpO1xuXG4vLyBzcmMvY3JlYXRlU3RydWN0dXJlZFNlbGVjdG9yLnRzXG52YXIgY3JlYXRlU3RydWN0dXJlZFNlbGVjdG9yID0gT2JqZWN0LmFzc2lnbihcbiAgKGlucHV0U2VsZWN0b3JzT2JqZWN0LCBzZWxlY3RvckNyZWF0b3IgPSBjcmVhdGVTZWxlY3RvcikgPT4ge1xuICAgIGFzc2VydElzT2JqZWN0KFxuICAgICAgaW5wdXRTZWxlY3RvcnNPYmplY3QsXG4gICAgICBgY3JlYXRlU3RydWN0dXJlZFNlbGVjdG9yIGV4cGVjdHMgZmlyc3QgYXJndW1lbnQgdG8gYmUgYW4gb2JqZWN0IHdoZXJlIGVhY2ggcHJvcGVydHkgaXMgYSBzZWxlY3RvciwgaW5zdGVhZCByZWNlaXZlZCBhICR7dHlwZW9mIGlucHV0U2VsZWN0b3JzT2JqZWN0fWBcbiAgICApO1xuICAgIGNvbnN0IGlucHV0U2VsZWN0b3JLZXlzID0gT2JqZWN0LmtleXMoaW5wdXRTZWxlY3RvcnNPYmplY3QpO1xuICAgIGNvbnN0IGRlcGVuZGVuY2llcyA9IGlucHV0U2VsZWN0b3JLZXlzLm1hcChcbiAgICAgIChrZXkpID0+IGlucHV0U2VsZWN0b3JzT2JqZWN0W2tleV1cbiAgICApO1xuICAgIGNvbnN0IHN0cnVjdHVyZWRTZWxlY3RvciA9IHNlbGVjdG9yQ3JlYXRvcihcbiAgICAgIGRlcGVuZGVuY2llcyxcbiAgICAgICguLi5pbnB1dFNlbGVjdG9yUmVzdWx0cykgPT4ge1xuICAgICAgICByZXR1cm4gaW5wdXRTZWxlY3RvclJlc3VsdHMucmVkdWNlKChjb21wb3NpdGlvbiwgdmFsdWUsIGluZGV4KSA9PiB7XG4gICAgICAgICAgY29tcG9zaXRpb25baW5wdXRTZWxlY3RvcktleXNbaW5kZXhdXSA9IHZhbHVlO1xuICAgICAgICAgIHJldHVybiBjb21wb3NpdGlvbjtcbiAgICAgICAgfSwge30pO1xuICAgICAgfVxuICAgICk7XG4gICAgcmV0dXJuIHN0cnVjdHVyZWRTZWxlY3RvcjtcbiAgfSxcbiAgeyB3aXRoVHlwZXM6ICgpID0+IGNyZWF0ZVN0cnVjdHVyZWRTZWxlY3RvciB9XG4pO1xuZXhwb3J0IHtcbiAgY3JlYXRlU2VsZWN0b3IsXG4gIGNyZWF0ZVNlbGVjdG9yQ3JlYXRvcixcbiAgY3JlYXRlU3RydWN0dXJlZFNlbGVjdG9yLFxuICBscnVNZW1vaXplLFxuICByZWZlcmVuY2VFcXVhbGl0eUNoZWNrLFxuICBzZXRHbG9iYWxEZXZNb2RlQ2hlY2tzLFxuICBhdXRvdHJhY2tNZW1vaXplIGFzIHVuc3RhYmxlX2F1dG90cmFja01lbW9pemUsXG4gIHdlYWtNYXBNZW1vaXplXG59O1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9cmVzZWxlY3QubWpzLm1hcCIsIi8vIHNyYy9xdWVyeS9jb3JlL2FwaVN0YXRlLnRzXG52YXIgUXVlcnlTdGF0dXMgPSAvKiBAX19QVVJFX18gKi8gKChRdWVyeVN0YXR1czIpID0+IHtcbiAgUXVlcnlTdGF0dXMyW1widW5pbml0aWFsaXplZFwiXSA9IFwidW5pbml0aWFsaXplZFwiO1xuICBRdWVyeVN0YXR1czJbXCJwZW5kaW5nXCJdID0gXCJwZW5kaW5nXCI7XG4gIFF1ZXJ5U3RhdHVzMltcImZ1bGZpbGxlZFwiXSA9IFwiZnVsZmlsbGVkXCI7XG4gIFF1ZXJ5U3RhdHVzMltcInJlamVjdGVkXCJdID0gXCJyZWplY3RlZFwiO1xuICByZXR1cm4gUXVlcnlTdGF0dXMyO1xufSkoUXVlcnlTdGF0dXMgfHwge30pO1xuZnVuY3Rpb24gZ2V0UmVxdWVzdFN0YXR1c0ZsYWdzKHN0YXR1cykge1xuICByZXR1cm4ge1xuICAgIHN0YXR1cyxcbiAgICBpc1VuaW5pdGlhbGl6ZWQ6IHN0YXR1cyA9PT0gXCJ1bmluaXRpYWxpemVkXCIgLyogdW5pbml0aWFsaXplZCAqLyxcbiAgICBpc0xvYWRpbmc6IHN0YXR1cyA9PT0gXCJwZW5kaW5nXCIgLyogcGVuZGluZyAqLyxcbiAgICBpc1N1Y2Nlc3M6IHN0YXR1cyA9PT0gXCJmdWxmaWxsZWRcIiAvKiBmdWxmaWxsZWQgKi8sXG4gICAgaXNFcnJvcjogc3RhdHVzID09PSBcInJlamVjdGVkXCIgLyogcmVqZWN0ZWQgKi9cbiAgfTtcbn1cblxuLy8gc3JjL3F1ZXJ5L2NvcmUvcnRrSW1wb3J0cy50c1xuaW1wb3J0IHsgY3JlYXRlQWN0aW9uLCBjcmVhdGVTbGljZSwgY3JlYXRlU2VsZWN0b3IsIGNyZWF0ZUFzeW5jVGh1bmssIGNvbWJpbmVSZWR1Y2VycywgY3JlYXRlTmV4dFN0YXRlLCBpc0FueU9mLCBpc0FsbE9mLCBpc0FjdGlvbiwgaXNQZW5kaW5nLCBpc1JlamVjdGVkLCBpc0Z1bGZpbGxlZCwgaXNSZWplY3RlZFdpdGhWYWx1ZSwgaXNBc3luY1RodW5rQWN0aW9uLCBwcmVwYXJlQXV0b0JhdGNoZWQsIFNIT1VMRF9BVVRPQkFUQ0gsIGlzUGxhaW5PYmplY3QsIG5hbm9pZCB9IGZyb20gXCJAcmVkdXhqcy90b29sa2l0XCI7XG5cbi8vIHNyYy9xdWVyeS91dGlscy9jb3B5V2l0aFN0cnVjdHVyYWxTaGFyaW5nLnRzXG52YXIgaXNQbGFpbk9iamVjdDIgPSBpc1BsYWluT2JqZWN0O1xuZnVuY3Rpb24gY29weVdpdGhTdHJ1Y3R1cmFsU2hhcmluZyhvbGRPYmosIG5ld09iaikge1xuICBpZiAob2xkT2JqID09PSBuZXdPYmogfHwgIShpc1BsYWluT2JqZWN0MihvbGRPYmopICYmIGlzUGxhaW5PYmplY3QyKG5ld09iaikgfHwgQXJyYXkuaXNBcnJheShvbGRPYmopICYmIEFycmF5LmlzQXJyYXkobmV3T2JqKSkpIHtcbiAgICByZXR1cm4gbmV3T2JqO1xuICB9XG4gIGNvbnN0IG5ld0tleXMgPSBPYmplY3Qua2V5cyhuZXdPYmopO1xuICBjb25zdCBvbGRLZXlzID0gT2JqZWN0LmtleXMob2xkT2JqKTtcbiAgbGV0IGlzU2FtZU9iamVjdCA9IG5ld0tleXMubGVuZ3RoID09PSBvbGRLZXlzLmxlbmd0aDtcbiAgY29uc3QgbWVyZ2VPYmogPSBBcnJheS5pc0FycmF5KG5ld09iaikgPyBbXSA6IHt9O1xuICBmb3IgKGNvbnN0IGtleSBvZiBuZXdLZXlzKSB7XG4gICAgbWVyZ2VPYmpba2V5XSA9IGNvcHlXaXRoU3RydWN0dXJhbFNoYXJpbmcob2xkT2JqW2tleV0sIG5ld09ialtrZXldKTtcbiAgICBpZiAoaXNTYW1lT2JqZWN0KSBpc1NhbWVPYmplY3QgPSBvbGRPYmpba2V5XSA9PT0gbWVyZ2VPYmpba2V5XTtcbiAgfVxuICByZXR1cm4gaXNTYW1lT2JqZWN0ID8gb2xkT2JqIDogbWVyZ2VPYmo7XG59XG5cbi8vIHNyYy9xdWVyeS91dGlscy9jb3VudE9iamVjdEtleXMudHNcbmZ1bmN0aW9uIGNvdW50T2JqZWN0S2V5cyhvYmopIHtcbiAgbGV0IGNvdW50ID0gMDtcbiAgZm9yIChjb25zdCBfa2V5IGluIG9iaikge1xuICAgIGNvdW50Kys7XG4gIH1cbiAgcmV0dXJuIGNvdW50O1xufVxuXG4vLyBzcmMvcXVlcnkvdXRpbHMvZmxhdHRlbi50c1xudmFyIGZsYXR0ZW4gPSAoYXJyKSA9PiBbXS5jb25jYXQoLi4uYXJyKTtcblxuLy8gc3JjL3F1ZXJ5L3V0aWxzL2lzQWJzb2x1dGVVcmwudHNcbmZ1bmN0aW9uIGlzQWJzb2x1dGVVcmwodXJsKSB7XG4gIHJldHVybiBuZXcgUmVnRXhwKGAoXnw6KS8vYCkudGVzdCh1cmwpO1xufVxuXG4vLyBzcmMvcXVlcnkvdXRpbHMvaXNEb2N1bWVudFZpc2libGUudHNcbmZ1bmN0aW9uIGlzRG9jdW1lbnRWaXNpYmxlKCkge1xuICBpZiAodHlwZW9mIGRvY3VtZW50ID09PSBcInVuZGVmaW5lZFwiKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbiAgcmV0dXJuIGRvY3VtZW50LnZpc2liaWxpdHlTdGF0ZSAhPT0gXCJoaWRkZW5cIjtcbn1cblxuLy8gc3JjL3F1ZXJ5L3V0aWxzL2lzTm90TnVsbGlzaC50c1xuZnVuY3Rpb24gaXNOb3ROdWxsaXNoKHYpIHtcbiAgcmV0dXJuIHYgIT0gbnVsbDtcbn1cblxuLy8gc3JjL3F1ZXJ5L3V0aWxzL2lzT25saW5lLnRzXG5mdW5jdGlvbiBpc09ubGluZSgpIHtcbiAgcmV0dXJuIHR5cGVvZiBuYXZpZ2F0b3IgPT09IFwidW5kZWZpbmVkXCIgPyB0cnVlIDogbmF2aWdhdG9yLm9uTGluZSA9PT0gdm9pZCAwID8gdHJ1ZSA6IG5hdmlnYXRvci5vbkxpbmU7XG59XG5cbi8vIHNyYy9xdWVyeS91dGlscy9qb2luVXJscy50c1xudmFyIHdpdGhvdXRUcmFpbGluZ1NsYXNoID0gKHVybCkgPT4gdXJsLnJlcGxhY2UoL1xcLyQvLCBcIlwiKTtcbnZhciB3aXRob3V0TGVhZGluZ1NsYXNoID0gKHVybCkgPT4gdXJsLnJlcGxhY2UoL15cXC8vLCBcIlwiKTtcbmZ1bmN0aW9uIGpvaW5VcmxzKGJhc2UsIHVybCkge1xuICBpZiAoIWJhc2UpIHtcbiAgICByZXR1cm4gdXJsO1xuICB9XG4gIGlmICghdXJsKSB7XG4gICAgcmV0dXJuIGJhc2U7XG4gIH1cbiAgaWYgKGlzQWJzb2x1dGVVcmwodXJsKSkge1xuICAgIHJldHVybiB1cmw7XG4gIH1cbiAgY29uc3QgZGVsaW1pdGVyID0gYmFzZS5lbmRzV2l0aChcIi9cIikgfHwgIXVybC5zdGFydHNXaXRoKFwiP1wiKSA/IFwiL1wiIDogXCJcIjtcbiAgYmFzZSA9IHdpdGhvdXRUcmFpbGluZ1NsYXNoKGJhc2UpO1xuICB1cmwgPSB3aXRob3V0TGVhZGluZ1NsYXNoKHVybCk7XG4gIHJldHVybiBgJHtiYXNlfSR7ZGVsaW1pdGVyfSR7dXJsfWA7XG59XG5cbi8vIHNyYy9xdWVyeS91dGlscy9nZXRPckluc2VydC50c1xuZnVuY3Rpb24gZ2V0T3JJbnNlcnQobWFwLCBrZXksIHZhbHVlKSB7XG4gIGlmIChtYXAuaGFzKGtleSkpIHJldHVybiBtYXAuZ2V0KGtleSk7XG4gIHJldHVybiBtYXAuc2V0KGtleSwgdmFsdWUpLmdldChrZXkpO1xufVxuXG4vLyBzcmMvcXVlcnkvZmV0Y2hCYXNlUXVlcnkudHNcbnZhciBkZWZhdWx0RmV0Y2hGbiA9ICguLi5hcmdzKSA9PiBmZXRjaCguLi5hcmdzKTtcbnZhciBkZWZhdWx0VmFsaWRhdGVTdGF0dXMgPSAocmVzcG9uc2UpID0+IHJlc3BvbnNlLnN0YXR1cyA+PSAyMDAgJiYgcmVzcG9uc2Uuc3RhdHVzIDw9IDI5OTtcbnZhciBkZWZhdWx0SXNKc29uQ29udGVudFR5cGUgPSAoaGVhZGVycykgPT4gKFxuICAvKmFwcGxpY2F0Ki9cbiAgL2lvblxcLyh2bmRcXC5hcGlcXCspP2pzb24vLnRlc3QoaGVhZGVycy5nZXQoXCJjb250ZW50LXR5cGVcIikgfHwgXCJcIilcbik7XG5mdW5jdGlvbiBzdHJpcFVuZGVmaW5lZChvYmopIHtcbiAgaWYgKCFpc1BsYWluT2JqZWN0KG9iaikpIHtcbiAgICByZXR1cm4gb2JqO1xuICB9XG4gIGNvbnN0IGNvcHkgPSB7XG4gICAgLi4ub2JqXG4gIH07XG4gIGZvciAoY29uc3QgW2ssIHZdIG9mIE9iamVjdC5lbnRyaWVzKGNvcHkpKSB7XG4gICAgaWYgKHYgPT09IHZvaWQgMCkgZGVsZXRlIGNvcHlba107XG4gIH1cbiAgcmV0dXJuIGNvcHk7XG59XG5mdW5jdGlvbiBmZXRjaEJhc2VRdWVyeSh7XG4gIGJhc2VVcmwsXG4gIHByZXBhcmVIZWFkZXJzID0gKHgpID0+IHgsXG4gIGZldGNoRm4gPSBkZWZhdWx0RmV0Y2hGbixcbiAgcGFyYW1zU2VyaWFsaXplcixcbiAgaXNKc29uQ29udGVudFR5cGUgPSBkZWZhdWx0SXNKc29uQ29udGVudFR5cGUsXG4gIGpzb25Db250ZW50VHlwZSA9IFwiYXBwbGljYXRpb24vanNvblwiLFxuICBqc29uUmVwbGFjZXIsXG4gIHRpbWVvdXQ6IGRlZmF1bHRUaW1lb3V0LFxuICByZXNwb25zZUhhbmRsZXI6IGdsb2JhbFJlc3BvbnNlSGFuZGxlcixcbiAgdmFsaWRhdGVTdGF0dXM6IGdsb2JhbFZhbGlkYXRlU3RhdHVzLFxuICAuLi5iYXNlRmV0Y2hPcHRpb25zXG59ID0ge30pIHtcbiAgaWYgKHR5cGVvZiBmZXRjaCA9PT0gXCJ1bmRlZmluZWRcIiAmJiBmZXRjaEZuID09PSBkZWZhdWx0RmV0Y2hGbikge1xuICAgIGNvbnNvbGUud2FybihcIldhcm5pbmc6IGBmZXRjaGAgaXMgbm90IGF2YWlsYWJsZS4gUGxlYXNlIHN1cHBseSBhIGN1c3RvbSBgZmV0Y2hGbmAgcHJvcGVydHkgdG8gdXNlIGBmZXRjaEJhc2VRdWVyeWAgb24gU1NSIGVudmlyb25tZW50cy5cIik7XG4gIH1cbiAgcmV0dXJuIGFzeW5jIChhcmcsIGFwaSwgZXh0cmFPcHRpb25zKSA9PiB7XG4gICAgY29uc3Qge1xuICAgICAgZ2V0U3RhdGUsXG4gICAgICBleHRyYSxcbiAgICAgIGVuZHBvaW50LFxuICAgICAgZm9yY2VkLFxuICAgICAgdHlwZVxuICAgIH0gPSBhcGk7XG4gICAgbGV0IG1ldGE7XG4gICAgbGV0IHtcbiAgICAgIHVybCxcbiAgICAgIGhlYWRlcnMgPSBuZXcgSGVhZGVycyhiYXNlRmV0Y2hPcHRpb25zLmhlYWRlcnMpLFxuICAgICAgcGFyYW1zID0gdm9pZCAwLFxuICAgICAgcmVzcG9uc2VIYW5kbGVyID0gZ2xvYmFsUmVzcG9uc2VIYW5kbGVyID8/IFwianNvblwiLFxuICAgICAgdmFsaWRhdGVTdGF0dXMgPSBnbG9iYWxWYWxpZGF0ZVN0YXR1cyA/PyBkZWZhdWx0VmFsaWRhdGVTdGF0dXMsXG4gICAgICB0aW1lb3V0ID0gZGVmYXVsdFRpbWVvdXQsXG4gICAgICAuLi5yZXN0XG4gICAgfSA9IHR5cGVvZiBhcmcgPT0gXCJzdHJpbmdcIiA/IHtcbiAgICAgIHVybDogYXJnXG4gICAgfSA6IGFyZztcbiAgICBsZXQgYWJvcnRDb250cm9sbGVyLCBzaWduYWwgPSBhcGkuc2lnbmFsO1xuICAgIGlmICh0aW1lb3V0KSB7XG4gICAgICBhYm9ydENvbnRyb2xsZXIgPSBuZXcgQWJvcnRDb250cm9sbGVyKCk7XG4gICAgICBhcGkuc2lnbmFsLmFkZEV2ZW50TGlzdGVuZXIoXCJhYm9ydFwiLCBhYm9ydENvbnRyb2xsZXIuYWJvcnQpO1xuICAgICAgc2lnbmFsID0gYWJvcnRDb250cm9sbGVyLnNpZ25hbDtcbiAgICB9XG4gICAgbGV0IGNvbmZpZyA9IHtcbiAgICAgIC4uLmJhc2VGZXRjaE9wdGlvbnMsXG4gICAgICBzaWduYWwsXG4gICAgICAuLi5yZXN0XG4gICAgfTtcbiAgICBoZWFkZXJzID0gbmV3IEhlYWRlcnMoc3RyaXBVbmRlZmluZWQoaGVhZGVycykpO1xuICAgIGNvbmZpZy5oZWFkZXJzID0gYXdhaXQgcHJlcGFyZUhlYWRlcnMoaGVhZGVycywge1xuICAgICAgZ2V0U3RhdGUsXG4gICAgICBhcmcsXG4gICAgICBleHRyYSxcbiAgICAgIGVuZHBvaW50LFxuICAgICAgZm9yY2VkLFxuICAgICAgdHlwZSxcbiAgICAgIGV4dHJhT3B0aW9uc1xuICAgIH0pIHx8IGhlYWRlcnM7XG4gICAgY29uc3QgaXNKc29uaWZpYWJsZSA9IChib2R5KSA9PiB0eXBlb2YgYm9keSA9PT0gXCJvYmplY3RcIiAmJiAoaXNQbGFpbk9iamVjdChib2R5KSB8fCBBcnJheS5pc0FycmF5KGJvZHkpIHx8IHR5cGVvZiBib2R5LnRvSlNPTiA9PT0gXCJmdW5jdGlvblwiKTtcbiAgICBpZiAoIWNvbmZpZy5oZWFkZXJzLmhhcyhcImNvbnRlbnQtdHlwZVwiKSAmJiBpc0pzb25pZmlhYmxlKGNvbmZpZy5ib2R5KSkge1xuICAgICAgY29uZmlnLmhlYWRlcnMuc2V0KFwiY29udGVudC10eXBlXCIsIGpzb25Db250ZW50VHlwZSk7XG4gICAgfVxuICAgIGlmIChpc0pzb25pZmlhYmxlKGNvbmZpZy5ib2R5KSAmJiBpc0pzb25Db250ZW50VHlwZShjb25maWcuaGVhZGVycykpIHtcbiAgICAgIGNvbmZpZy5ib2R5ID0gSlNPTi5zdHJpbmdpZnkoY29uZmlnLmJvZHksIGpzb25SZXBsYWNlcik7XG4gICAgfVxuICAgIGlmIChwYXJhbXMpIHtcbiAgICAgIGNvbnN0IGRpdmlkZXIgPSB+dXJsLmluZGV4T2YoXCI/XCIpID8gXCImXCIgOiBcIj9cIjtcbiAgICAgIGNvbnN0IHF1ZXJ5ID0gcGFyYW1zU2VyaWFsaXplciA/IHBhcmFtc1NlcmlhbGl6ZXIocGFyYW1zKSA6IG5ldyBVUkxTZWFyY2hQYXJhbXMoc3RyaXBVbmRlZmluZWQocGFyYW1zKSk7XG4gICAgICB1cmwgKz0gZGl2aWRlciArIHF1ZXJ5O1xuICAgIH1cbiAgICB1cmwgPSBqb2luVXJscyhiYXNlVXJsLCB1cmwpO1xuICAgIGNvbnN0IHJlcXVlc3QgPSBuZXcgUmVxdWVzdCh1cmwsIGNvbmZpZyk7XG4gICAgY29uc3QgcmVxdWVzdENsb25lID0gbmV3IFJlcXVlc3QodXJsLCBjb25maWcpO1xuICAgIG1ldGEgPSB7XG4gICAgICByZXF1ZXN0OiByZXF1ZXN0Q2xvbmVcbiAgICB9O1xuICAgIGxldCByZXNwb25zZSwgdGltZWRPdXQgPSBmYWxzZSwgdGltZW91dElkID0gYWJvcnRDb250cm9sbGVyICYmIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgdGltZWRPdXQgPSB0cnVlO1xuICAgICAgYWJvcnRDb250cm9sbGVyLmFib3J0KCk7XG4gICAgfSwgdGltZW91dCk7XG4gICAgdHJ5IHtcbiAgICAgIHJlc3BvbnNlID0gYXdhaXQgZmV0Y2hGbihyZXF1ZXN0KTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBlcnJvcjoge1xuICAgICAgICAgIHN0YXR1czogdGltZWRPdXQgPyBcIlRJTUVPVVRfRVJST1JcIiA6IFwiRkVUQ0hfRVJST1JcIixcbiAgICAgICAgICBlcnJvcjogU3RyaW5nKGUpXG4gICAgICAgIH0sXG4gICAgICAgIG1ldGFcbiAgICAgIH07XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIGlmICh0aW1lb3V0SWQpIGNsZWFyVGltZW91dCh0aW1lb3V0SWQpO1xuICAgICAgYWJvcnRDb250cm9sbGVyPy5zaWduYWwucmVtb3ZlRXZlbnRMaXN0ZW5lcihcImFib3J0XCIsIGFib3J0Q29udHJvbGxlci5hYm9ydCk7XG4gICAgfVxuICAgIGNvbnN0IHJlc3BvbnNlQ2xvbmUgPSByZXNwb25zZS5jbG9uZSgpO1xuICAgIG1ldGEucmVzcG9uc2UgPSByZXNwb25zZUNsb25lO1xuICAgIGxldCByZXN1bHREYXRhO1xuICAgIGxldCByZXNwb25zZVRleHQgPSBcIlwiO1xuICAgIHRyeSB7XG4gICAgICBsZXQgaGFuZGxlUmVzcG9uc2VFcnJvcjtcbiAgICAgIGF3YWl0IFByb21pc2UuYWxsKFtcbiAgICAgICAgaGFuZGxlUmVzcG9uc2UocmVzcG9uc2UsIHJlc3BvbnNlSGFuZGxlcikudGhlbigocikgPT4gcmVzdWx0RGF0YSA9IHIsIChlKSA9PiBoYW5kbGVSZXNwb25zZUVycm9yID0gZSksXG4gICAgICAgIC8vIHNlZSBodHRwczovL2dpdGh1Yi5jb20vbm9kZS1mZXRjaC9ub2RlLWZldGNoL2lzc3Vlcy82NjUjaXNzdWVjb21tZW50LTUzODk5NTE4MlxuICAgICAgICAvLyB3ZSAqaGF2ZSogdG8gXCJ1c2UgdXBcIiBib3RoIHN0cmVhbXMgYXQgdGhlIHNhbWUgdGltZSBvciB0aGV5IHdpbGwgc3RvcCBydW5uaW5nIGluIG5vZGUtZmV0Y2ggc2NlbmFyaW9zXG4gICAgICAgIHJlc3BvbnNlQ2xvbmUudGV4dCgpLnRoZW4oKHIpID0+IHJlc3BvbnNlVGV4dCA9IHIsICgpID0+IHtcbiAgICAgICAgfSlcbiAgICAgIF0pO1xuICAgICAgaWYgKGhhbmRsZVJlc3BvbnNlRXJyb3IpIHRocm93IGhhbmRsZVJlc3BvbnNlRXJyb3I7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgZXJyb3I6IHtcbiAgICAgICAgICBzdGF0dXM6IFwiUEFSU0lOR19FUlJPUlwiLFxuICAgICAgICAgIG9yaWdpbmFsU3RhdHVzOiByZXNwb25zZS5zdGF0dXMsXG4gICAgICAgICAgZGF0YTogcmVzcG9uc2VUZXh0LFxuICAgICAgICAgIGVycm9yOiBTdHJpbmcoZSlcbiAgICAgICAgfSxcbiAgICAgICAgbWV0YVxuICAgICAgfTtcbiAgICB9XG4gICAgcmV0dXJuIHZhbGlkYXRlU3RhdHVzKHJlc3BvbnNlLCByZXN1bHREYXRhKSA/IHtcbiAgICAgIGRhdGE6IHJlc3VsdERhdGEsXG4gICAgICBtZXRhXG4gICAgfSA6IHtcbiAgICAgIGVycm9yOiB7XG4gICAgICAgIHN0YXR1czogcmVzcG9uc2Uuc3RhdHVzLFxuICAgICAgICBkYXRhOiByZXN1bHREYXRhXG4gICAgICB9LFxuICAgICAgbWV0YVxuICAgIH07XG4gIH07XG4gIGFzeW5jIGZ1bmN0aW9uIGhhbmRsZVJlc3BvbnNlKHJlc3BvbnNlLCByZXNwb25zZUhhbmRsZXIpIHtcbiAgICBpZiAodHlwZW9mIHJlc3BvbnNlSGFuZGxlciA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICByZXR1cm4gcmVzcG9uc2VIYW5kbGVyKHJlc3BvbnNlKTtcbiAgICB9XG4gICAgaWYgKHJlc3BvbnNlSGFuZGxlciA9PT0gXCJjb250ZW50LXR5cGVcIikge1xuICAgICAgcmVzcG9uc2VIYW5kbGVyID0gaXNKc29uQ29udGVudFR5cGUocmVzcG9uc2UuaGVhZGVycykgPyBcImpzb25cIiA6IFwidGV4dFwiO1xuICAgIH1cbiAgICBpZiAocmVzcG9uc2VIYW5kbGVyID09PSBcImpzb25cIikge1xuICAgICAgY29uc3QgdGV4dCA9IGF3YWl0IHJlc3BvbnNlLnRleHQoKTtcbiAgICAgIHJldHVybiB0ZXh0Lmxlbmd0aCA/IEpTT04ucGFyc2UodGV4dCkgOiBudWxsO1xuICAgIH1cbiAgICByZXR1cm4gcmVzcG9uc2UudGV4dCgpO1xuICB9XG59XG5cbi8vIHNyYy9xdWVyeS9IYW5kbGVkRXJyb3IudHNcbnZhciBIYW5kbGVkRXJyb3IgPSBjbGFzcyB7XG4gIGNvbnN0cnVjdG9yKHZhbHVlLCBtZXRhID0gdm9pZCAwKSB7XG4gICAgdGhpcy52YWx1ZSA9IHZhbHVlO1xuICAgIHRoaXMubWV0YSA9IG1ldGE7XG4gIH1cbn07XG5cbi8vIHNyYy9xdWVyeS9yZXRyeS50c1xuYXN5bmMgZnVuY3Rpb24gZGVmYXVsdEJhY2tvZmYoYXR0ZW1wdCA9IDAsIG1heFJldHJpZXMgPSA1KSB7XG4gIGNvbnN0IGF0dGVtcHRzID0gTWF0aC5taW4oYXR0ZW1wdCwgbWF4UmV0cmllcyk7XG4gIGNvbnN0IHRpbWVvdXQgPSB+figoTWF0aC5yYW5kb20oKSArIDAuNCkgKiAoMzAwIDw8IGF0dGVtcHRzKSk7XG4gIGF3YWl0IG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiBzZXRUaW1lb3V0KChyZXMpID0+IHJlc29sdmUocmVzKSwgdGltZW91dCkpO1xufVxuZnVuY3Rpb24gZmFpbChlcnJvciwgbWV0YSkge1xuICB0aHJvdyBPYmplY3QuYXNzaWduKG5ldyBIYW5kbGVkRXJyb3Ioe1xuICAgIGVycm9yLFxuICAgIG1ldGFcbiAgfSksIHtcbiAgICB0aHJvd0ltbWVkaWF0ZWx5OiB0cnVlXG4gIH0pO1xufVxudmFyIEVNUFRZX09QVElPTlMgPSB7fTtcbnZhciByZXRyeVdpdGhCYWNrb2ZmID0gKGJhc2VRdWVyeSwgZGVmYXVsdE9wdGlvbnMpID0+IGFzeW5jIChhcmdzLCBhcGksIGV4dHJhT3B0aW9ucykgPT4ge1xuICBjb25zdCBwb3NzaWJsZU1heFJldHJpZXMgPSBbNSwgKGRlZmF1bHRPcHRpb25zIHx8IEVNUFRZX09QVElPTlMpLm1heFJldHJpZXMsIChleHRyYU9wdGlvbnMgfHwgRU1QVFlfT1BUSU9OUykubWF4UmV0cmllc10uZmlsdGVyKCh4KSA9PiB4ICE9PSB2b2lkIDApO1xuICBjb25zdCBbbWF4UmV0cmllc10gPSBwb3NzaWJsZU1heFJldHJpZXMuc2xpY2UoLTEpO1xuICBjb25zdCBkZWZhdWx0UmV0cnlDb25kaXRpb24gPSAoXywgX18sIHtcbiAgICBhdHRlbXB0XG4gIH0pID0+IGF0dGVtcHQgPD0gbWF4UmV0cmllcztcbiAgY29uc3Qgb3B0aW9ucyA9IHtcbiAgICBtYXhSZXRyaWVzLFxuICAgIGJhY2tvZmY6IGRlZmF1bHRCYWNrb2ZmLFxuICAgIHJldHJ5Q29uZGl0aW9uOiBkZWZhdWx0UmV0cnlDb25kaXRpb24sXG4gICAgLi4uZGVmYXVsdE9wdGlvbnMsXG4gICAgLi4uZXh0cmFPcHRpb25zXG4gIH07XG4gIGxldCByZXRyeTIgPSAwO1xuICB3aGlsZSAodHJ1ZSkge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBiYXNlUXVlcnkoYXJncywgYXBpLCBleHRyYU9wdGlvbnMpO1xuICAgICAgaWYgKHJlc3VsdC5lcnJvcikge1xuICAgICAgICB0aHJvdyBuZXcgSGFuZGxlZEVycm9yKHJlc3VsdCk7XG4gICAgICB9XG4gICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIHJldHJ5MisrO1xuICAgICAgaWYgKGUudGhyb3dJbW1lZGlhdGVseSkge1xuICAgICAgICBpZiAoZSBpbnN0YW5jZW9mIEhhbmRsZWRFcnJvcikge1xuICAgICAgICAgIHJldHVybiBlLnZhbHVlO1xuICAgICAgICB9XG4gICAgICAgIHRocm93IGU7XG4gICAgICB9XG4gICAgICBpZiAoZSBpbnN0YW5jZW9mIEhhbmRsZWRFcnJvciAmJiAhb3B0aW9ucy5yZXRyeUNvbmRpdGlvbihlLnZhbHVlLmVycm9yLCBhcmdzLCB7XG4gICAgICAgIGF0dGVtcHQ6IHJldHJ5MixcbiAgICAgICAgYmFzZVF1ZXJ5QXBpOiBhcGksXG4gICAgICAgIGV4dHJhT3B0aW9uc1xuICAgICAgfSkpIHtcbiAgICAgICAgcmV0dXJuIGUudmFsdWU7XG4gICAgICB9XG4gICAgICBhd2FpdCBvcHRpb25zLmJhY2tvZmYocmV0cnkyLCBvcHRpb25zLm1heFJldHJpZXMpO1xuICAgIH1cbiAgfVxufTtcbnZhciByZXRyeSA9IC8qIEBfX1BVUkVfXyAqLyBPYmplY3QuYXNzaWduKHJldHJ5V2l0aEJhY2tvZmYsIHtcbiAgZmFpbFxufSk7XG5cbi8vIHNyYy9xdWVyeS9jb3JlL3NldHVwTGlzdGVuZXJzLnRzXG52YXIgb25Gb2N1cyA9IC8qIEBfX1BVUkVfXyAqLyBjcmVhdGVBY3Rpb24oXCJfX3J0a3EvZm9jdXNlZFwiKTtcbnZhciBvbkZvY3VzTG9zdCA9IC8qIEBfX1BVUkVfXyAqLyBjcmVhdGVBY3Rpb24oXCJfX3J0a3EvdW5mb2N1c2VkXCIpO1xudmFyIG9uT25saW5lID0gLyogQF9fUFVSRV9fICovIGNyZWF0ZUFjdGlvbihcIl9fcnRrcS9vbmxpbmVcIik7XG52YXIgb25PZmZsaW5lID0gLyogQF9fUFVSRV9fICovIGNyZWF0ZUFjdGlvbihcIl9fcnRrcS9vZmZsaW5lXCIpO1xudmFyIGluaXRpYWxpemVkID0gZmFsc2U7XG5mdW5jdGlvbiBzZXR1cExpc3RlbmVycyhkaXNwYXRjaCwgY3VzdG9tSGFuZGxlcikge1xuICBmdW5jdGlvbiBkZWZhdWx0SGFuZGxlcigpIHtcbiAgICBjb25zdCBoYW5kbGVGb2N1cyA9ICgpID0+IGRpc3BhdGNoKG9uRm9jdXMoKSk7XG4gICAgY29uc3QgaGFuZGxlRm9jdXNMb3N0ID0gKCkgPT4gZGlzcGF0Y2gob25Gb2N1c0xvc3QoKSk7XG4gICAgY29uc3QgaGFuZGxlT25saW5lID0gKCkgPT4gZGlzcGF0Y2gob25PbmxpbmUoKSk7XG4gICAgY29uc3QgaGFuZGxlT2ZmbGluZSA9ICgpID0+IGRpc3BhdGNoKG9uT2ZmbGluZSgpKTtcbiAgICBjb25zdCBoYW5kbGVWaXNpYmlsaXR5Q2hhbmdlID0gKCkgPT4ge1xuICAgICAgaWYgKHdpbmRvdy5kb2N1bWVudC52aXNpYmlsaXR5U3RhdGUgPT09IFwidmlzaWJsZVwiKSB7XG4gICAgICAgIGhhbmRsZUZvY3VzKCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBoYW5kbGVGb2N1c0xvc3QoKTtcbiAgICAgIH1cbiAgICB9O1xuICAgIGlmICghaW5pdGlhbGl6ZWQpIHtcbiAgICAgIGlmICh0eXBlb2Ygd2luZG93ICE9PSBcInVuZGVmaW5lZFwiICYmIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKSB7XG4gICAgICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKFwidmlzaWJpbGl0eWNoYW5nZVwiLCBoYW5kbGVWaXNpYmlsaXR5Q2hhbmdlLCBmYWxzZSk7XG4gICAgICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKFwiZm9jdXNcIiwgaGFuZGxlRm9jdXMsIGZhbHNlKTtcbiAgICAgICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoXCJvbmxpbmVcIiwgaGFuZGxlT25saW5lLCBmYWxzZSk7XG4gICAgICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKFwib2ZmbGluZVwiLCBoYW5kbGVPZmZsaW5lLCBmYWxzZSk7XG4gICAgICAgIGluaXRpYWxpemVkID0gdHJ1ZTtcbiAgICAgIH1cbiAgICB9XG4gICAgY29uc3QgdW5zdWJzY3JpYmUgPSAoKSA9PiB7XG4gICAgICB3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcihcImZvY3VzXCIsIGhhbmRsZUZvY3VzKTtcbiAgICAgIHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKFwidmlzaWJpbGl0eWNoYW5nZVwiLCBoYW5kbGVWaXNpYmlsaXR5Q2hhbmdlKTtcbiAgICAgIHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKFwib25saW5lXCIsIGhhbmRsZU9ubGluZSk7XG4gICAgICB3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcihcIm9mZmxpbmVcIiwgaGFuZGxlT2ZmbGluZSk7XG4gICAgICBpbml0aWFsaXplZCA9IGZhbHNlO1xuICAgIH07XG4gICAgcmV0dXJuIHVuc3Vic2NyaWJlO1xuICB9XG4gIHJldHVybiBjdXN0b21IYW5kbGVyID8gY3VzdG9tSGFuZGxlcihkaXNwYXRjaCwge1xuICAgIG9uRm9jdXMsXG4gICAgb25Gb2N1c0xvc3QsXG4gICAgb25PZmZsaW5lLFxuICAgIG9uT25saW5lXG4gIH0pIDogZGVmYXVsdEhhbmRsZXIoKTtcbn1cblxuLy8gc3JjL3F1ZXJ5L2VuZHBvaW50RGVmaW5pdGlvbnMudHNcbmZ1bmN0aW9uIGlzUXVlcnlEZWZpbml0aW9uKGUpIHtcbiAgcmV0dXJuIGUudHlwZSA9PT0gXCJxdWVyeVwiIC8qIHF1ZXJ5ICovO1xufVxuZnVuY3Rpb24gaXNNdXRhdGlvbkRlZmluaXRpb24oZSkge1xuICByZXR1cm4gZS50eXBlID09PSBcIm11dGF0aW9uXCIgLyogbXV0YXRpb24gKi87XG59XG5mdW5jdGlvbiBpc0luZmluaXRlUXVlcnlEZWZpbml0aW9uKGUpIHtcbiAgcmV0dXJuIGUudHlwZSA9PT0gXCJpbmZpbml0ZXF1ZXJ5XCIgLyogaW5maW5pdGVxdWVyeSAqLztcbn1cbmZ1bmN0aW9uIGNhbGN1bGF0ZVByb3ZpZGVkQnkoZGVzY3JpcHRpb24sIHJlc3VsdCwgZXJyb3IsIHF1ZXJ5QXJnLCBtZXRhLCBhc3NlcnRUYWdUeXBlcykge1xuICBpZiAoaXNGdW5jdGlvbihkZXNjcmlwdGlvbikpIHtcbiAgICByZXR1cm4gZGVzY3JpcHRpb24ocmVzdWx0LCBlcnJvciwgcXVlcnlBcmcsIG1ldGEpLmZpbHRlcihpc05vdE51bGxpc2gpLm1hcChleHBhbmRUYWdEZXNjcmlwdGlvbikubWFwKGFzc2VydFRhZ1R5cGVzKTtcbiAgfVxuICBpZiAoQXJyYXkuaXNBcnJheShkZXNjcmlwdGlvbikpIHtcbiAgICByZXR1cm4gZGVzY3JpcHRpb24ubWFwKGV4cGFuZFRhZ0Rlc2NyaXB0aW9uKS5tYXAoYXNzZXJ0VGFnVHlwZXMpO1xuICB9XG4gIHJldHVybiBbXTtcbn1cbmZ1bmN0aW9uIGlzRnVuY3Rpb24odCkge1xuICByZXR1cm4gdHlwZW9mIHQgPT09IFwiZnVuY3Rpb25cIjtcbn1cbmZ1bmN0aW9uIGV4cGFuZFRhZ0Rlc2NyaXB0aW9uKGRlc2NyaXB0aW9uKSB7XG4gIHJldHVybiB0eXBlb2YgZGVzY3JpcHRpb24gPT09IFwic3RyaW5nXCIgPyB7XG4gICAgdHlwZTogZGVzY3JpcHRpb25cbiAgfSA6IGRlc2NyaXB0aW9uO1xufVxuXG4vLyBzcmMvcXVlcnkvY29yZS9idWlsZFRodW5rcy50c1xuaW1wb3J0IHsgaXNEcmFmdGFibGUsIHByb2R1Y2VXaXRoUGF0Y2hlcyB9IGZyb20gXCJpbW1lclwiO1xuXG4vLyBzcmMvcXVlcnkvY29yZS9idWlsZEluaXRpYXRlLnRzXG5pbXBvcnQgeyBmb3JtYXRQcm9kRXJyb3JNZXNzYWdlIGFzIF9mb3JtYXRQcm9kRXJyb3JNZXNzYWdlIH0gZnJvbSBcIkByZWR1eGpzL3Rvb2xraXRcIjtcblxuLy8gc3JjL3RzSGVscGVycy50c1xuZnVuY3Rpb24gYXNTYWZlUHJvbWlzZShwcm9taXNlLCBmYWxsYmFjaykge1xuICByZXR1cm4gcHJvbWlzZS5jYXRjaChmYWxsYmFjayk7XG59XG5cbi8vIHNyYy9xdWVyeS9jb3JlL2J1aWxkSW5pdGlhdGUudHNcbnZhciBmb3JjZVF1ZXJ5Rm5TeW1ib2wgPSBTeW1ib2woXCJmb3JjZVF1ZXJ5Rm5cIik7XG52YXIgaXNVcHNlcnRRdWVyeSA9IChhcmcpID0+IHR5cGVvZiBhcmdbZm9yY2VRdWVyeUZuU3ltYm9sXSA9PT0gXCJmdW5jdGlvblwiO1xuZnVuY3Rpb24gYnVpbGRJbml0aWF0ZSh7XG4gIHNlcmlhbGl6ZVF1ZXJ5QXJncyxcbiAgcXVlcnlUaHVuayxcbiAgaW5maW5pdGVRdWVyeVRodW5rLFxuICBtdXRhdGlvblRodW5rLFxuICBhcGksXG4gIGNvbnRleHRcbn0pIHtcbiAgY29uc3QgcnVubmluZ1F1ZXJpZXMgPSAvKiBAX19QVVJFX18gKi8gbmV3IE1hcCgpO1xuICBjb25zdCBydW5uaW5nTXV0YXRpb25zID0gLyogQF9fUFVSRV9fICovIG5ldyBNYXAoKTtcbiAgY29uc3Qge1xuICAgIHVuc3Vic2NyaWJlUXVlcnlSZXN1bHQsXG4gICAgcmVtb3ZlTXV0YXRpb25SZXN1bHQsXG4gICAgdXBkYXRlU3Vic2NyaXB0aW9uT3B0aW9uc1xuICB9ID0gYXBpLmludGVybmFsQWN0aW9ucztcbiAgcmV0dXJuIHtcbiAgICBidWlsZEluaXRpYXRlUXVlcnksXG4gICAgYnVpbGRJbml0aWF0ZUluZmluaXRlUXVlcnksXG4gICAgYnVpbGRJbml0aWF0ZU11dGF0aW9uLFxuICAgIGdldFJ1bm5pbmdRdWVyeVRodW5rLFxuICAgIGdldFJ1bm5pbmdNdXRhdGlvblRodW5rLFxuICAgIGdldFJ1bm5pbmdRdWVyaWVzVGh1bmssXG4gICAgZ2V0UnVubmluZ011dGF0aW9uc1RodW5rXG4gIH07XG4gIGZ1bmN0aW9uIGdldFJ1bm5pbmdRdWVyeVRodW5rKGVuZHBvaW50TmFtZSwgcXVlcnlBcmdzKSB7XG4gICAgcmV0dXJuIChkaXNwYXRjaCkgPT4ge1xuICAgICAgY29uc3QgZW5kcG9pbnREZWZpbml0aW9uID0gY29udGV4dC5lbmRwb2ludERlZmluaXRpb25zW2VuZHBvaW50TmFtZV07XG4gICAgICBjb25zdCBxdWVyeUNhY2hlS2V5ID0gc2VyaWFsaXplUXVlcnlBcmdzKHtcbiAgICAgICAgcXVlcnlBcmdzLFxuICAgICAgICBlbmRwb2ludERlZmluaXRpb24sXG4gICAgICAgIGVuZHBvaW50TmFtZVxuICAgICAgfSk7XG4gICAgICByZXR1cm4gcnVubmluZ1F1ZXJpZXMuZ2V0KGRpc3BhdGNoKT8uW3F1ZXJ5Q2FjaGVLZXldO1xuICAgIH07XG4gIH1cbiAgZnVuY3Rpb24gZ2V0UnVubmluZ011dGF0aW9uVGh1bmsoX2VuZHBvaW50TmFtZSwgZml4ZWRDYWNoZUtleU9yUmVxdWVzdElkKSB7XG4gICAgcmV0dXJuIChkaXNwYXRjaCkgPT4ge1xuICAgICAgcmV0dXJuIHJ1bm5pbmdNdXRhdGlvbnMuZ2V0KGRpc3BhdGNoKT8uW2ZpeGVkQ2FjaGVLZXlPclJlcXVlc3RJZF07XG4gICAgfTtcbiAgfVxuICBmdW5jdGlvbiBnZXRSdW5uaW5nUXVlcmllc1RodW5rKCkge1xuICAgIHJldHVybiAoZGlzcGF0Y2gpID0+IE9iamVjdC52YWx1ZXMocnVubmluZ1F1ZXJpZXMuZ2V0KGRpc3BhdGNoKSB8fCB7fSkuZmlsdGVyKGlzTm90TnVsbGlzaCk7XG4gIH1cbiAgZnVuY3Rpb24gZ2V0UnVubmluZ011dGF0aW9uc1RodW5rKCkge1xuICAgIHJldHVybiAoZGlzcGF0Y2gpID0+IE9iamVjdC52YWx1ZXMocnVubmluZ011dGF0aW9ucy5nZXQoZGlzcGF0Y2gpIHx8IHt9KS5maWx0ZXIoaXNOb3ROdWxsaXNoKTtcbiAgfVxuICBmdW5jdGlvbiBtaWRkbGV3YXJlV2FybmluZyhkaXNwYXRjaCkge1xuICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIpIHtcbiAgICAgIGlmIChtaWRkbGV3YXJlV2FybmluZy50cmlnZ2VyZWQpIHJldHVybjtcbiAgICAgIGNvbnN0IHJldHVybmVkVmFsdWUgPSBkaXNwYXRjaChhcGkuaW50ZXJuYWxBY3Rpb25zLmludGVybmFsX2dldFJUS1FTdWJzY3JpcHRpb25zKCkpO1xuICAgICAgbWlkZGxld2FyZVdhcm5pbmcudHJpZ2dlcmVkID0gdHJ1ZTtcbiAgICAgIGlmICh0eXBlb2YgcmV0dXJuZWRWYWx1ZSAhPT0gXCJvYmplY3RcIiB8fCB0eXBlb2YgcmV0dXJuZWRWYWx1ZT8udHlwZSA9PT0gXCJzdHJpbmdcIikge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IocHJvY2Vzcy5lbnYuTk9ERV9FTlYgPT09IFwicHJvZHVjdGlvblwiID8gX2Zvcm1hdFByb2RFcnJvck1lc3NhZ2UoMzQpIDogYFdhcm5pbmc6IE1pZGRsZXdhcmUgZm9yIFJUSy1RdWVyeSBBUEkgYXQgcmVkdWNlclBhdGggXCIke2FwaS5yZWR1Y2VyUGF0aH1cIiBoYXMgbm90IGJlZW4gYWRkZWQgdG8gdGhlIHN0b3JlLlxuWW91IG11c3QgYWRkIHRoZSBtaWRkbGV3YXJlIGZvciBSVEstUXVlcnkgdG8gZnVuY3Rpb24gY29ycmVjdGx5IWApO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICBmdW5jdGlvbiBidWlsZEluaXRpYXRlQW55UXVlcnkoZW5kcG9pbnROYW1lLCBlbmRwb2ludERlZmluaXRpb24pIHtcbiAgICBjb25zdCBxdWVyeUFjdGlvbiA9IChhcmcsIHtcbiAgICAgIHN1YnNjcmliZSA9IHRydWUsXG4gICAgICBmb3JjZVJlZmV0Y2gsXG4gICAgICBzdWJzY3JpcHRpb25PcHRpb25zLFxuICAgICAgW2ZvcmNlUXVlcnlGblN5bWJvbF06IGZvcmNlUXVlcnlGbixcbiAgICAgIC4uLnJlc3RcbiAgICB9ID0ge30pID0+IChkaXNwYXRjaCwgZ2V0U3RhdGUpID0+IHtcbiAgICAgIGNvbnN0IHF1ZXJ5Q2FjaGVLZXkgPSBzZXJpYWxpemVRdWVyeUFyZ3Moe1xuICAgICAgICBxdWVyeUFyZ3M6IGFyZyxcbiAgICAgICAgZW5kcG9pbnREZWZpbml0aW9uLFxuICAgICAgICBlbmRwb2ludE5hbWVcbiAgICAgIH0pO1xuICAgICAgbGV0IHRodW5rO1xuICAgICAgY29uc3QgY29tbW9uVGh1bmtBcmdzID0ge1xuICAgICAgICAuLi5yZXN0LFxuICAgICAgICB0eXBlOiBcInF1ZXJ5XCIsXG4gICAgICAgIHN1YnNjcmliZSxcbiAgICAgICAgZm9yY2VSZWZldGNoLFxuICAgICAgICBzdWJzY3JpcHRpb25PcHRpb25zLFxuICAgICAgICBlbmRwb2ludE5hbWUsXG4gICAgICAgIG9yaWdpbmFsQXJnczogYXJnLFxuICAgICAgICBxdWVyeUNhY2hlS2V5LFxuICAgICAgICBbZm9yY2VRdWVyeUZuU3ltYm9sXTogZm9yY2VRdWVyeUZuXG4gICAgICB9O1xuICAgICAgaWYgKGlzUXVlcnlEZWZpbml0aW9uKGVuZHBvaW50RGVmaW5pdGlvbikpIHtcbiAgICAgICAgdGh1bmsgPSBxdWVyeVRodW5rKGNvbW1vblRodW5rQXJncyk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zdCB7XG4gICAgICAgICAgZGlyZWN0aW9uLFxuICAgICAgICAgIGluaXRpYWxQYWdlUGFyYW1cbiAgICAgICAgfSA9IHJlc3Q7XG4gICAgICAgIHRodW5rID0gaW5maW5pdGVRdWVyeVRodW5rKHtcbiAgICAgICAgICAuLi5jb21tb25UaHVua0FyZ3MsXG4gICAgICAgICAgLy8gU3VwcGx5IHRoZXNlIGV2ZW4gaWYgdW5kZWZpbmVkLiBUaGlzIGhlbHBzIHdpdGggYSBmaWVsZCBleGlzdGVuY2VcbiAgICAgICAgICAvLyBjaGVjayBvdmVyIGluIGBidWlsZFNsaWNlLnRzYFxuICAgICAgICAgIGRpcmVjdGlvbixcbiAgICAgICAgICBpbml0aWFsUGFnZVBhcmFtXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgICAgY29uc3Qgc2VsZWN0b3IgPSBhcGkuZW5kcG9pbnRzW2VuZHBvaW50TmFtZV0uc2VsZWN0KGFyZyk7XG4gICAgICBjb25zdCB0aHVua1Jlc3VsdCA9IGRpc3BhdGNoKHRodW5rKTtcbiAgICAgIGNvbnN0IHN0YXRlQWZ0ZXIgPSBzZWxlY3RvcihnZXRTdGF0ZSgpKTtcbiAgICAgIG1pZGRsZXdhcmVXYXJuaW5nKGRpc3BhdGNoKTtcbiAgICAgIGNvbnN0IHtcbiAgICAgICAgcmVxdWVzdElkLFxuICAgICAgICBhYm9ydFxuICAgICAgfSA9IHRodW5rUmVzdWx0O1xuICAgICAgY29uc3Qgc2tpcHBlZFN5bmNocm9ub3VzbHkgPSBzdGF0ZUFmdGVyLnJlcXVlc3RJZCAhPT0gcmVxdWVzdElkO1xuICAgICAgY29uc3QgcnVubmluZ1F1ZXJ5ID0gcnVubmluZ1F1ZXJpZXMuZ2V0KGRpc3BhdGNoKT8uW3F1ZXJ5Q2FjaGVLZXldO1xuICAgICAgY29uc3Qgc2VsZWN0RnJvbVN0YXRlID0gKCkgPT4gc2VsZWN0b3IoZ2V0U3RhdGUoKSk7XG4gICAgICBjb25zdCBzdGF0ZVByb21pc2UgPSBPYmplY3QuYXNzaWduKGZvcmNlUXVlcnlGbiA/IChcbiAgICAgICAgLy8gYSBxdWVyeSBoYXMgYmVlbiBmb3JjZWQgKHVwc2VydFF1ZXJ5RGF0YSlcbiAgICAgICAgLy8gLT4gd2Ugd2FudCB0byByZXNvbHZlIGl0IG9uY2UgZGF0YSBoYXMgYmVlbiB3cml0dGVuIHdpdGggdGhlIGRhdGEgdGhhdCB3aWxsIGJlIHdyaXR0ZW5cbiAgICAgICAgdGh1bmtSZXN1bHQudGhlbihzZWxlY3RGcm9tU3RhdGUpXG4gICAgICApIDogc2tpcHBlZFN5bmNocm9ub3VzbHkgJiYgIXJ1bm5pbmdRdWVyeSA/IChcbiAgICAgICAgLy8gYSBxdWVyeSBoYXMgYmVlbiBza2lwcGVkIGR1ZSB0byBhIGNvbmRpdGlvbiBhbmQgd2UgZG8gbm90IGhhdmUgYW55IGN1cnJlbnRseSBydW5uaW5nIHF1ZXJ5XG4gICAgICAgIC8vIC0+IHdlIHdhbnQgdG8gcmVzb2x2ZSBpdCBpbW1lZGlhdGVseSB3aXRoIHRoZSBjdXJyZW50IGRhdGFcbiAgICAgICAgUHJvbWlzZS5yZXNvbHZlKHN0YXRlQWZ0ZXIpXG4gICAgICApIDogKFxuICAgICAgICAvLyBxdWVyeSBqdXN0IHN0YXJ0ZWQgb3Igb25lIGlzIGFscmVhZHkgaW4gZmxpZ2h0XG4gICAgICAgIC8vIC0+IHdhaXQgZm9yIHRoZSBydW5uaW5nIHF1ZXJ5LCB0aGVuIHJlc29sdmUgd2l0aCBkYXRhIGZyb20gYWZ0ZXIgdGhhdFxuICAgICAgICBQcm9taXNlLmFsbChbcnVubmluZ1F1ZXJ5LCB0aHVua1Jlc3VsdF0pLnRoZW4oc2VsZWN0RnJvbVN0YXRlKVxuICAgICAgKSwge1xuICAgICAgICBhcmcsXG4gICAgICAgIHJlcXVlc3RJZCxcbiAgICAgICAgc3Vic2NyaXB0aW9uT3B0aW9ucyxcbiAgICAgICAgcXVlcnlDYWNoZUtleSxcbiAgICAgICAgYWJvcnQsXG4gICAgICAgIGFzeW5jIHVud3JhcCgpIHtcbiAgICAgICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBzdGF0ZVByb21pc2U7XG4gICAgICAgICAgaWYgKHJlc3VsdC5pc0Vycm9yKSB7XG4gICAgICAgICAgICB0aHJvdyByZXN1bHQuZXJyb3I7XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiByZXN1bHQuZGF0YTtcbiAgICAgICAgfSxcbiAgICAgICAgcmVmZXRjaDogKCkgPT4gZGlzcGF0Y2gocXVlcnlBY3Rpb24oYXJnLCB7XG4gICAgICAgICAgc3Vic2NyaWJlOiBmYWxzZSxcbiAgICAgICAgICBmb3JjZVJlZmV0Y2g6IHRydWVcbiAgICAgICAgfSkpLFxuICAgICAgICB1bnN1YnNjcmliZSgpIHtcbiAgICAgICAgICBpZiAoc3Vic2NyaWJlKSBkaXNwYXRjaCh1bnN1YnNjcmliZVF1ZXJ5UmVzdWx0KHtcbiAgICAgICAgICAgIHF1ZXJ5Q2FjaGVLZXksXG4gICAgICAgICAgICByZXF1ZXN0SWRcbiAgICAgICAgICB9KSk7XG4gICAgICAgIH0sXG4gICAgICAgIHVwZGF0ZVN1YnNjcmlwdGlvbk9wdGlvbnMob3B0aW9ucykge1xuICAgICAgICAgIHN0YXRlUHJvbWlzZS5zdWJzY3JpcHRpb25PcHRpb25zID0gb3B0aW9ucztcbiAgICAgICAgICBkaXNwYXRjaCh1cGRhdGVTdWJzY3JpcHRpb25PcHRpb25zKHtcbiAgICAgICAgICAgIGVuZHBvaW50TmFtZSxcbiAgICAgICAgICAgIHJlcXVlc3RJZCxcbiAgICAgICAgICAgIHF1ZXJ5Q2FjaGVLZXksXG4gICAgICAgICAgICBvcHRpb25zXG4gICAgICAgICAgfSkpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICAgIGlmICghcnVubmluZ1F1ZXJ5ICYmICFza2lwcGVkU3luY2hyb25vdXNseSAmJiAhZm9yY2VRdWVyeUZuKSB7XG4gICAgICAgIGNvbnN0IHJ1bm5pbmcgPSBnZXRPckluc2VydChydW5uaW5nUXVlcmllcywgZGlzcGF0Y2gsIHt9KTtcbiAgICAgICAgcnVubmluZ1txdWVyeUNhY2hlS2V5XSA9IHN0YXRlUHJvbWlzZTtcbiAgICAgICAgc3RhdGVQcm9taXNlLnRoZW4oKCkgPT4ge1xuICAgICAgICAgIGRlbGV0ZSBydW5uaW5nW3F1ZXJ5Q2FjaGVLZXldO1xuICAgICAgICAgIGlmICghY291bnRPYmplY3RLZXlzKHJ1bm5pbmcpKSB7XG4gICAgICAgICAgICBydW5uaW5nUXVlcmllcy5kZWxldGUoZGlzcGF0Y2gpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgICByZXR1cm4gc3RhdGVQcm9taXNlO1xuICAgIH07XG4gICAgcmV0dXJuIHF1ZXJ5QWN0aW9uO1xuICB9XG4gIGZ1bmN0aW9uIGJ1aWxkSW5pdGlhdGVRdWVyeShlbmRwb2ludE5hbWUsIGVuZHBvaW50RGVmaW5pdGlvbikge1xuICAgIGNvbnN0IHF1ZXJ5QWN0aW9uID0gYnVpbGRJbml0aWF0ZUFueVF1ZXJ5KGVuZHBvaW50TmFtZSwgZW5kcG9pbnREZWZpbml0aW9uKTtcbiAgICByZXR1cm4gcXVlcnlBY3Rpb247XG4gIH1cbiAgZnVuY3Rpb24gYnVpbGRJbml0aWF0ZUluZmluaXRlUXVlcnkoZW5kcG9pbnROYW1lLCBlbmRwb2ludERlZmluaXRpb24pIHtcbiAgICBjb25zdCBpbmZpbml0ZVF1ZXJ5QWN0aW9uID0gYnVpbGRJbml0aWF0ZUFueVF1ZXJ5KGVuZHBvaW50TmFtZSwgZW5kcG9pbnREZWZpbml0aW9uKTtcbiAgICByZXR1cm4gaW5maW5pdGVRdWVyeUFjdGlvbjtcbiAgfVxuICBmdW5jdGlvbiBidWlsZEluaXRpYXRlTXV0YXRpb24oZW5kcG9pbnROYW1lKSB7XG4gICAgcmV0dXJuIChhcmcsIHtcbiAgICAgIHRyYWNrID0gdHJ1ZSxcbiAgICAgIGZpeGVkQ2FjaGVLZXlcbiAgICB9ID0ge30pID0+IChkaXNwYXRjaCwgZ2V0U3RhdGUpID0+IHtcbiAgICAgIGNvbnN0IHRodW5rID0gbXV0YXRpb25UaHVuayh7XG4gICAgICAgIHR5cGU6IFwibXV0YXRpb25cIixcbiAgICAgICAgZW5kcG9pbnROYW1lLFxuICAgICAgICBvcmlnaW5hbEFyZ3M6IGFyZyxcbiAgICAgICAgdHJhY2ssXG4gICAgICAgIGZpeGVkQ2FjaGVLZXlcbiAgICAgIH0pO1xuICAgICAgY29uc3QgdGh1bmtSZXN1bHQgPSBkaXNwYXRjaCh0aHVuayk7XG4gICAgICBtaWRkbGV3YXJlV2FybmluZyhkaXNwYXRjaCk7XG4gICAgICBjb25zdCB7XG4gICAgICAgIHJlcXVlc3RJZCxcbiAgICAgICAgYWJvcnQsXG4gICAgICAgIHVud3JhcFxuICAgICAgfSA9IHRodW5rUmVzdWx0O1xuICAgICAgY29uc3QgcmV0dXJuVmFsdWVQcm9taXNlID0gYXNTYWZlUHJvbWlzZSh0aHVua1Jlc3VsdC51bndyYXAoKS50aGVuKChkYXRhKSA9PiAoe1xuICAgICAgICBkYXRhXG4gICAgICB9KSksIChlcnJvcikgPT4gKHtcbiAgICAgICAgZXJyb3JcbiAgICAgIH0pKTtcbiAgICAgIGNvbnN0IHJlc2V0ID0gKCkgPT4ge1xuICAgICAgICBkaXNwYXRjaChyZW1vdmVNdXRhdGlvblJlc3VsdCh7XG4gICAgICAgICAgcmVxdWVzdElkLFxuICAgICAgICAgIGZpeGVkQ2FjaGVLZXlcbiAgICAgICAgfSkpO1xuICAgICAgfTtcbiAgICAgIGNvbnN0IHJldCA9IE9iamVjdC5hc3NpZ24ocmV0dXJuVmFsdWVQcm9taXNlLCB7XG4gICAgICAgIGFyZzogdGh1bmtSZXN1bHQuYXJnLFxuICAgICAgICByZXF1ZXN0SWQsXG4gICAgICAgIGFib3J0LFxuICAgICAgICB1bndyYXAsXG4gICAgICAgIHJlc2V0XG4gICAgICB9KTtcbiAgICAgIGNvbnN0IHJ1bm5pbmcgPSBydW5uaW5nTXV0YXRpb25zLmdldChkaXNwYXRjaCkgfHwge307XG4gICAgICBydW5uaW5nTXV0YXRpb25zLnNldChkaXNwYXRjaCwgcnVubmluZyk7XG4gICAgICBydW5uaW5nW3JlcXVlc3RJZF0gPSByZXQ7XG4gICAgICByZXQudGhlbigoKSA9PiB7XG4gICAgICAgIGRlbGV0ZSBydW5uaW5nW3JlcXVlc3RJZF07XG4gICAgICAgIGlmICghY291bnRPYmplY3RLZXlzKHJ1bm5pbmcpKSB7XG4gICAgICAgICAgcnVubmluZ011dGF0aW9ucy5kZWxldGUoZGlzcGF0Y2gpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICAgIGlmIChmaXhlZENhY2hlS2V5KSB7XG4gICAgICAgIHJ1bm5pbmdbZml4ZWRDYWNoZUtleV0gPSByZXQ7XG4gICAgICAgIHJldC50aGVuKCgpID0+IHtcbiAgICAgICAgICBpZiAocnVubmluZ1tmaXhlZENhY2hlS2V5XSA9PT0gcmV0KSB7XG4gICAgICAgICAgICBkZWxldGUgcnVubmluZ1tmaXhlZENhY2hlS2V5XTtcbiAgICAgICAgICAgIGlmICghY291bnRPYmplY3RLZXlzKHJ1bm5pbmcpKSB7XG4gICAgICAgICAgICAgIHJ1bm5pbmdNdXRhdGlvbnMuZGVsZXRlKGRpc3BhdGNoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHJldDtcbiAgICB9O1xuICB9XG59XG5cbi8vIHNyYy9xdWVyeS9jb3JlL2J1aWxkVGh1bmtzLnRzXG5mdW5jdGlvbiBkZWZhdWx0VHJhbnNmb3JtUmVzcG9uc2UoYmFzZVF1ZXJ5UmV0dXJuVmFsdWUpIHtcbiAgcmV0dXJuIGJhc2VRdWVyeVJldHVyblZhbHVlO1xufVxudmFyIGFkZFNob3VsZEF1dG9CYXRjaCA9IChhcmcgPSB7fSkgPT4ge1xuICByZXR1cm4ge1xuICAgIC4uLmFyZyxcbiAgICBbU0hPVUxEX0FVVE9CQVRDSF06IHRydWVcbiAgfTtcbn07XG5mdW5jdGlvbiBidWlsZFRodW5rcyh7XG4gIHJlZHVjZXJQYXRoLFxuICBiYXNlUXVlcnksXG4gIGNvbnRleHQ6IHtcbiAgICBlbmRwb2ludERlZmluaXRpb25zXG4gIH0sXG4gIHNlcmlhbGl6ZVF1ZXJ5QXJncyxcbiAgYXBpLFxuICBhc3NlcnRUYWdUeXBlLFxuICBzZWxlY3RvcnNcbn0pIHtcbiAgY29uc3QgcGF0Y2hRdWVyeURhdGEgPSAoZW5kcG9pbnROYW1lLCBhcmcsIHBhdGNoZXMsIHVwZGF0ZVByb3ZpZGVkKSA9PiAoZGlzcGF0Y2gsIGdldFN0YXRlKSA9PiB7XG4gICAgY29uc3QgZW5kcG9pbnREZWZpbml0aW9uID0gZW5kcG9pbnREZWZpbml0aW9uc1tlbmRwb2ludE5hbWVdO1xuICAgIGNvbnN0IHF1ZXJ5Q2FjaGVLZXkgPSBzZXJpYWxpemVRdWVyeUFyZ3Moe1xuICAgICAgcXVlcnlBcmdzOiBhcmcsXG4gICAgICBlbmRwb2ludERlZmluaXRpb24sXG4gICAgICBlbmRwb2ludE5hbWVcbiAgICB9KTtcbiAgICBkaXNwYXRjaChhcGkuaW50ZXJuYWxBY3Rpb25zLnF1ZXJ5UmVzdWx0UGF0Y2hlZCh7XG4gICAgICBxdWVyeUNhY2hlS2V5LFxuICAgICAgcGF0Y2hlc1xuICAgIH0pKTtcbiAgICBpZiAoIXVwZGF0ZVByb3ZpZGVkKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IG5ld1ZhbHVlID0gYXBpLmVuZHBvaW50c1tlbmRwb2ludE5hbWVdLnNlbGVjdChhcmcpKFxuICAgICAgLy8gV29yayBhcm91bmQgVFMgNC4xIG1pc21hdGNoXG4gICAgICBnZXRTdGF0ZSgpXG4gICAgKTtcbiAgICBjb25zdCBwcm92aWRlZFRhZ3MgPSBjYWxjdWxhdGVQcm92aWRlZEJ5KGVuZHBvaW50RGVmaW5pdGlvbi5wcm92aWRlc1RhZ3MsIG5ld1ZhbHVlLmRhdGEsIHZvaWQgMCwgYXJnLCB7fSwgYXNzZXJ0VGFnVHlwZSk7XG4gICAgZGlzcGF0Y2goYXBpLmludGVybmFsQWN0aW9ucy51cGRhdGVQcm92aWRlZEJ5KHtcbiAgICAgIHF1ZXJ5Q2FjaGVLZXksXG4gICAgICBwcm92aWRlZFRhZ3NcbiAgICB9KSk7XG4gIH07XG4gIGZ1bmN0aW9uIGFkZFRvU3RhcnQoaXRlbXMsIGl0ZW0sIG1heCA9IDApIHtcbiAgICBjb25zdCBuZXdJdGVtcyA9IFtpdGVtLCAuLi5pdGVtc107XG4gICAgcmV0dXJuIG1heCAmJiBuZXdJdGVtcy5sZW5ndGggPiBtYXggPyBuZXdJdGVtcy5zbGljZSgwLCAtMSkgOiBuZXdJdGVtcztcbiAgfVxuICBmdW5jdGlvbiBhZGRUb0VuZChpdGVtcywgaXRlbSwgbWF4ID0gMCkge1xuICAgIGNvbnN0IG5ld0l0ZW1zID0gWy4uLml0ZW1zLCBpdGVtXTtcbiAgICByZXR1cm4gbWF4ICYmIG5ld0l0ZW1zLmxlbmd0aCA+IG1heCA/IG5ld0l0ZW1zLnNsaWNlKDEpIDogbmV3SXRlbXM7XG4gIH1cbiAgY29uc3QgdXBkYXRlUXVlcnlEYXRhID0gKGVuZHBvaW50TmFtZSwgYXJnLCB1cGRhdGVSZWNpcGUsIHVwZGF0ZVByb3ZpZGVkID0gdHJ1ZSkgPT4gKGRpc3BhdGNoLCBnZXRTdGF0ZSkgPT4ge1xuICAgIGNvbnN0IGVuZHBvaW50RGVmaW5pdGlvbiA9IGFwaS5lbmRwb2ludHNbZW5kcG9pbnROYW1lXTtcbiAgICBjb25zdCBjdXJyZW50U3RhdGUgPSBlbmRwb2ludERlZmluaXRpb24uc2VsZWN0KGFyZykoXG4gICAgICAvLyBXb3JrIGFyb3VuZCBUUyA0LjEgbWlzbWF0Y2hcbiAgICAgIGdldFN0YXRlKClcbiAgICApO1xuICAgIGNvbnN0IHJldCA9IHtcbiAgICAgIHBhdGNoZXM6IFtdLFxuICAgICAgaW52ZXJzZVBhdGNoZXM6IFtdLFxuICAgICAgdW5kbzogKCkgPT4gZGlzcGF0Y2goYXBpLnV0aWwucGF0Y2hRdWVyeURhdGEoZW5kcG9pbnROYW1lLCBhcmcsIHJldC5pbnZlcnNlUGF0Y2hlcywgdXBkYXRlUHJvdmlkZWQpKVxuICAgIH07XG4gICAgaWYgKGN1cnJlbnRTdGF0ZS5zdGF0dXMgPT09IFwidW5pbml0aWFsaXplZFwiIC8qIHVuaW5pdGlhbGl6ZWQgKi8pIHtcbiAgICAgIHJldHVybiByZXQ7XG4gICAgfVxuICAgIGxldCBuZXdWYWx1ZTtcbiAgICBpZiAoXCJkYXRhXCIgaW4gY3VycmVudFN0YXRlKSB7XG4gICAgICBpZiAoaXNEcmFmdGFibGUoY3VycmVudFN0YXRlLmRhdGEpKSB7XG4gICAgICAgIGNvbnN0IFt2YWx1ZSwgcGF0Y2hlcywgaW52ZXJzZVBhdGNoZXNdID0gcHJvZHVjZVdpdGhQYXRjaGVzKGN1cnJlbnRTdGF0ZS5kYXRhLCB1cGRhdGVSZWNpcGUpO1xuICAgICAgICByZXQucGF0Y2hlcy5wdXNoKC4uLnBhdGNoZXMpO1xuICAgICAgICByZXQuaW52ZXJzZVBhdGNoZXMucHVzaCguLi5pbnZlcnNlUGF0Y2hlcyk7XG4gICAgICAgIG5ld1ZhbHVlID0gdmFsdWU7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBuZXdWYWx1ZSA9IHVwZGF0ZVJlY2lwZShjdXJyZW50U3RhdGUuZGF0YSk7XG4gICAgICAgIHJldC5wYXRjaGVzLnB1c2goe1xuICAgICAgICAgIG9wOiBcInJlcGxhY2VcIixcbiAgICAgICAgICBwYXRoOiBbXSxcbiAgICAgICAgICB2YWx1ZTogbmV3VmFsdWVcbiAgICAgICAgfSk7XG4gICAgICAgIHJldC5pbnZlcnNlUGF0Y2hlcy5wdXNoKHtcbiAgICAgICAgICBvcDogXCJyZXBsYWNlXCIsXG4gICAgICAgICAgcGF0aDogW10sXG4gICAgICAgICAgdmFsdWU6IGN1cnJlbnRTdGF0ZS5kYXRhXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH1cbiAgICBpZiAocmV0LnBhdGNoZXMubGVuZ3RoID09PSAwKSB7XG4gICAgICByZXR1cm4gcmV0O1xuICAgIH1cbiAgICBkaXNwYXRjaChhcGkudXRpbC5wYXRjaFF1ZXJ5RGF0YShlbmRwb2ludE5hbWUsIGFyZywgcmV0LnBhdGNoZXMsIHVwZGF0ZVByb3ZpZGVkKSk7XG4gICAgcmV0dXJuIHJldDtcbiAgfTtcbiAgY29uc3QgdXBzZXJ0UXVlcnlEYXRhID0gKGVuZHBvaW50TmFtZSwgYXJnLCB2YWx1ZSkgPT4gKGRpc3BhdGNoKSA9PiB7XG4gICAgY29uc3QgcmVzID0gZGlzcGF0Y2goYXBpLmVuZHBvaW50c1tlbmRwb2ludE5hbWVdLmluaXRpYXRlKGFyZywge1xuICAgICAgc3Vic2NyaWJlOiBmYWxzZSxcbiAgICAgIGZvcmNlUmVmZXRjaDogdHJ1ZSxcbiAgICAgIFtmb3JjZVF1ZXJ5Rm5TeW1ib2xdOiAoKSA9PiAoe1xuICAgICAgICBkYXRhOiB2YWx1ZVxuICAgICAgfSlcbiAgICB9KSk7XG4gICAgcmV0dXJuIHJlcztcbiAgfTtcbiAgY29uc3QgZ2V0VHJhbnNmb3JtQ2FsbGJhY2tGb3JFbmRwb2ludCA9IChlbmRwb2ludERlZmluaXRpb24sIHRyYW5zZm9ybUZpZWxkTmFtZSkgPT4ge1xuICAgIHJldHVybiBlbmRwb2ludERlZmluaXRpb24ucXVlcnkgJiYgZW5kcG9pbnREZWZpbml0aW9uW3RyYW5zZm9ybUZpZWxkTmFtZV0gPyBlbmRwb2ludERlZmluaXRpb25bdHJhbnNmb3JtRmllbGROYW1lXSA6IGRlZmF1bHRUcmFuc2Zvcm1SZXNwb25zZTtcbiAgfTtcbiAgY29uc3QgZXhlY3V0ZUVuZHBvaW50ID0gYXN5bmMgKGFyZywge1xuICAgIHNpZ25hbCxcbiAgICBhYm9ydCxcbiAgICByZWplY3RXaXRoVmFsdWUsXG4gICAgZnVsZmlsbFdpdGhWYWx1ZSxcbiAgICBkaXNwYXRjaCxcbiAgICBnZXRTdGF0ZSxcbiAgICBleHRyYVxuICB9KSA9PiB7XG4gICAgY29uc3QgZW5kcG9pbnREZWZpbml0aW9uID0gZW5kcG9pbnREZWZpbml0aW9uc1thcmcuZW5kcG9pbnROYW1lXTtcbiAgICB0cnkge1xuICAgICAgbGV0IHRyYW5zZm9ybVJlc3BvbnNlID0gZ2V0VHJhbnNmb3JtQ2FsbGJhY2tGb3JFbmRwb2ludChlbmRwb2ludERlZmluaXRpb24sIFwidHJhbnNmb3JtUmVzcG9uc2VcIik7XG4gICAgICBjb25zdCBiYXNlUXVlcnlBcGkgPSB7XG4gICAgICAgIHNpZ25hbCxcbiAgICAgICAgYWJvcnQsXG4gICAgICAgIGRpc3BhdGNoLFxuICAgICAgICBnZXRTdGF0ZSxcbiAgICAgICAgZXh0cmEsXG4gICAgICAgIGVuZHBvaW50OiBhcmcuZW5kcG9pbnROYW1lLFxuICAgICAgICB0eXBlOiBhcmcudHlwZSxcbiAgICAgICAgZm9yY2VkOiBhcmcudHlwZSA9PT0gXCJxdWVyeVwiID8gaXNGb3JjZWRRdWVyeShhcmcsIGdldFN0YXRlKCkpIDogdm9pZCAwLFxuICAgICAgICBxdWVyeUNhY2hlS2V5OiBhcmcudHlwZSA9PT0gXCJxdWVyeVwiID8gYXJnLnF1ZXJ5Q2FjaGVLZXkgOiB2b2lkIDBcbiAgICAgIH07XG4gICAgICBjb25zdCBmb3JjZVF1ZXJ5Rm4gPSBhcmcudHlwZSA9PT0gXCJxdWVyeVwiID8gYXJnW2ZvcmNlUXVlcnlGblN5bWJvbF0gOiB2b2lkIDA7XG4gICAgICBsZXQgZmluYWxRdWVyeVJldHVyblZhbHVlO1xuICAgICAgY29uc3QgZmV0Y2hQYWdlID0gYXN5bmMgKGRhdGEsIHBhcmFtLCBtYXhQYWdlcywgcHJldmlvdXMpID0+IHtcbiAgICAgICAgaWYgKHBhcmFtID09IG51bGwgJiYgZGF0YS5wYWdlcy5sZW5ndGgpIHtcbiAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHtcbiAgICAgICAgICAgIGRhdGFcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBmaW5hbFF1ZXJ5QXJnID0ge1xuICAgICAgICAgIHF1ZXJ5QXJnOiBhcmcub3JpZ2luYWxBcmdzLFxuICAgICAgICAgIHBhZ2VQYXJhbTogcGFyYW1cbiAgICAgICAgfTtcbiAgICAgICAgY29uc3QgcGFnZVJlc3BvbnNlID0gYXdhaXQgZXhlY3V0ZVJlcXVlc3QoZmluYWxRdWVyeUFyZyk7XG4gICAgICAgIGNvbnN0IGFkZFRvID0gcHJldmlvdXMgPyBhZGRUb1N0YXJ0IDogYWRkVG9FbmQ7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgZGF0YToge1xuICAgICAgICAgICAgcGFnZXM6IGFkZFRvKGRhdGEucGFnZXMsIHBhZ2VSZXNwb25zZS5kYXRhLCBtYXhQYWdlcyksXG4gICAgICAgICAgICBwYWdlUGFyYW1zOiBhZGRUbyhkYXRhLnBhZ2VQYXJhbXMsIHBhcmFtLCBtYXhQYWdlcylcbiAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgICB9O1xuICAgICAgYXN5bmMgZnVuY3Rpb24gZXhlY3V0ZVJlcXVlc3QoZmluYWxRdWVyeUFyZykge1xuICAgICAgICBsZXQgcmVzdWx0O1xuICAgICAgICBjb25zdCB7XG4gICAgICAgICAgZXh0cmFPcHRpb25zXG4gICAgICAgIH0gPSBlbmRwb2ludERlZmluaXRpb247XG4gICAgICAgIGlmIChmb3JjZVF1ZXJ5Rm4pIHtcbiAgICAgICAgICByZXN1bHQgPSBmb3JjZVF1ZXJ5Rm4oKTtcbiAgICAgICAgfSBlbHNlIGlmIChlbmRwb2ludERlZmluaXRpb24ucXVlcnkpIHtcbiAgICAgICAgICByZXN1bHQgPSBhd2FpdCBiYXNlUXVlcnkoZW5kcG9pbnREZWZpbml0aW9uLnF1ZXJ5KGZpbmFsUXVlcnlBcmcpLCBiYXNlUXVlcnlBcGksIGV4dHJhT3B0aW9ucyk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmVzdWx0ID0gYXdhaXQgZW5kcG9pbnREZWZpbml0aW9uLnF1ZXJ5Rm4oZmluYWxRdWVyeUFyZywgYmFzZVF1ZXJ5QXBpLCBleHRyYU9wdGlvbnMsIChhcmcyKSA9PiBiYXNlUXVlcnkoYXJnMiwgYmFzZVF1ZXJ5QXBpLCBleHRyYU9wdGlvbnMpKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodHlwZW9mIHByb2Nlc3MgIT09IFwidW5kZWZpbmVkXCIgJiYgcHJvY2Vzcy5lbnYuTk9ERV9FTlYgPT09IFwiZGV2ZWxvcG1lbnRcIikge1xuICAgICAgICAgIGNvbnN0IHdoYXQgPSBlbmRwb2ludERlZmluaXRpb24ucXVlcnkgPyBcImBiYXNlUXVlcnlgXCIgOiBcImBxdWVyeUZuYFwiO1xuICAgICAgICAgIGxldCBlcnI7XG4gICAgICAgICAgaWYgKCFyZXN1bHQpIHtcbiAgICAgICAgICAgIGVyciA9IGAke3doYXR9IGRpZCBub3QgcmV0dXJuIGFueXRoaW5nLmA7XG4gICAgICAgICAgfSBlbHNlIGlmICh0eXBlb2YgcmVzdWx0ICE9PSBcIm9iamVjdFwiKSB7XG4gICAgICAgICAgICBlcnIgPSBgJHt3aGF0fSBkaWQgbm90IHJldHVybiBhbiBvYmplY3QuYDtcbiAgICAgICAgICB9IGVsc2UgaWYgKHJlc3VsdC5lcnJvciAmJiByZXN1bHQuZGF0YSkge1xuICAgICAgICAgICAgZXJyID0gYCR7d2hhdH0gcmV0dXJuZWQgYW4gb2JqZWN0IGNvbnRhaW5pbmcgYm90aCBcXGBlcnJvclxcYCBhbmQgXFxgcmVzdWx0XFxgLmA7XG4gICAgICAgICAgfSBlbHNlIGlmIChyZXN1bHQuZXJyb3IgPT09IHZvaWQgMCAmJiByZXN1bHQuZGF0YSA9PT0gdm9pZCAwKSB7XG4gICAgICAgICAgICBlcnIgPSBgJHt3aGF0fSByZXR1cm5lZCBhbiBvYmplY3QgY29udGFpbmluZyBuZWl0aGVyIGEgdmFsaWQgXFxgZXJyb3JcXGAgYW5kIFxcYHJlc3VsdFxcYC4gQXQgbGVhc3Qgb25lIG9mIHRoZW0gc2hvdWxkIG5vdCBiZSBcXGB1bmRlZmluZWRcXGBgO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IGtleSBvZiBPYmplY3Qua2V5cyhyZXN1bHQpKSB7XG4gICAgICAgICAgICAgIGlmIChrZXkgIT09IFwiZXJyb3JcIiAmJiBrZXkgIT09IFwiZGF0YVwiICYmIGtleSAhPT0gXCJtZXRhXCIpIHtcbiAgICAgICAgICAgICAgICBlcnIgPSBgVGhlIG9iamVjdCByZXR1cm5lZCBieSAke3doYXR9IGhhcyB0aGUgdW5rbm93biBwcm9wZXJ0eSAke2tleX0uYDtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoZXJyKSB7XG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKGBFcnJvciBlbmNvdW50ZXJlZCBoYW5kbGluZyB0aGUgZW5kcG9pbnQgJHthcmcuZW5kcG9pbnROYW1lfS5cbiAgICAgICAgICAgICAgICAgICR7ZXJyfVxuICAgICAgICAgICAgICAgICAgSXQgbmVlZHMgdG8gcmV0dXJuIGFuIG9iamVjdCB3aXRoIGVpdGhlciB0aGUgc2hhcGUgXFxgeyBkYXRhOiA8dmFsdWU+IH1cXGAgb3IgXFxgeyBlcnJvcjogPHZhbHVlPiB9XFxgIHRoYXQgbWF5IGNvbnRhaW4gYW4gb3B0aW9uYWwgXFxgbWV0YVxcYCBwcm9wZXJ0eS5cbiAgICAgICAgICAgICAgICAgIE9iamVjdCByZXR1cm5lZCB3YXM6YCwgcmVzdWx0KTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHJlc3VsdC5lcnJvcikgdGhyb3cgbmV3IEhhbmRsZWRFcnJvcihyZXN1bHQuZXJyb3IsIHJlc3VsdC5tZXRhKTtcbiAgICAgICAgY29uc3QgdHJhbnNmb3JtZWRSZXNwb25zZSA9IGF3YWl0IHRyYW5zZm9ybVJlc3BvbnNlKHJlc3VsdC5kYXRhLCByZXN1bHQubWV0YSwgZmluYWxRdWVyeUFyZyk7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgLi4ucmVzdWx0LFxuICAgICAgICAgIGRhdGE6IHRyYW5zZm9ybWVkUmVzcG9uc2VcbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICAgIGlmIChhcmcudHlwZSA9PT0gXCJxdWVyeVwiICYmIFwiaW5maW5pdGVRdWVyeU9wdGlvbnNcIiBpbiBlbmRwb2ludERlZmluaXRpb24pIHtcbiAgICAgICAgY29uc3Qge1xuICAgICAgICAgIGluZmluaXRlUXVlcnlPcHRpb25zXG4gICAgICAgIH0gPSBlbmRwb2ludERlZmluaXRpb247XG4gICAgICAgIGNvbnN0IHtcbiAgICAgICAgICBtYXhQYWdlcyA9IEluZmluaXR5XG4gICAgICAgIH0gPSBpbmZpbml0ZVF1ZXJ5T3B0aW9ucztcbiAgICAgICAgbGV0IHJlc3VsdDtcbiAgICAgICAgY29uc3QgYmxhbmtEYXRhID0ge1xuICAgICAgICAgIHBhZ2VzOiBbXSxcbiAgICAgICAgICBwYWdlUGFyYW1zOiBbXVxuICAgICAgICB9O1xuICAgICAgICBjb25zdCBjYWNoZWREYXRhID0gc2VsZWN0b3JzLnNlbGVjdFF1ZXJ5RW50cnkoZ2V0U3RhdGUoKSwgYXJnLnF1ZXJ5Q2FjaGVLZXkpPy5kYXRhO1xuICAgICAgICBjb25zdCBpc0ZvcmNlZFF1ZXJ5TmVlZGluZ1JlZmV0Y2ggPSAoXG4gICAgICAgICAgLy8gYXJnLmZvcmNlUmVmZXRjaFxuICAgICAgICAgIGlzRm9yY2VkUXVlcnkoYXJnLCBnZXRTdGF0ZSgpKSAmJiAhYXJnLmRpcmVjdGlvblxuICAgICAgICApO1xuICAgICAgICBjb25zdCBleGlzdGluZ0RhdGEgPSBpc0ZvcmNlZFF1ZXJ5TmVlZGluZ1JlZmV0Y2ggfHwgIWNhY2hlZERhdGEgPyBibGFua0RhdGEgOiBjYWNoZWREYXRhO1xuICAgICAgICBpZiAoXCJkaXJlY3Rpb25cIiBpbiBhcmcgJiYgYXJnLmRpcmVjdGlvbiAmJiBleGlzdGluZ0RhdGEucGFnZXMubGVuZ3RoKSB7XG4gICAgICAgICAgY29uc3QgcHJldmlvdXMgPSBhcmcuZGlyZWN0aW9uID09PSBcImJhY2t3YXJkXCI7XG4gICAgICAgICAgY29uc3QgcGFnZVBhcmFtRm4gPSBwcmV2aW91cyA/IGdldFByZXZpb3VzUGFnZVBhcmFtIDogZ2V0TmV4dFBhZ2VQYXJhbTtcbiAgICAgICAgICBjb25zdCBwYXJhbSA9IHBhZ2VQYXJhbUZuKGluZmluaXRlUXVlcnlPcHRpb25zLCBleGlzdGluZ0RhdGEpO1xuICAgICAgICAgIHJlc3VsdCA9IGF3YWl0IGZldGNoUGFnZShleGlzdGluZ0RhdGEsIHBhcmFtLCBtYXhQYWdlcywgcHJldmlvdXMpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGNvbnN0IHtcbiAgICAgICAgICAgIGluaXRpYWxQYWdlUGFyYW0gPSBpbmZpbml0ZVF1ZXJ5T3B0aW9ucy5pbml0aWFsUGFnZVBhcmFtXG4gICAgICAgICAgfSA9IGFyZztcbiAgICAgICAgICBjb25zdCBjYWNoZWRQYWdlUGFyYW1zID0gY2FjaGVkRGF0YT8ucGFnZVBhcmFtcyA/PyBbXTtcbiAgICAgICAgICBjb25zdCBmaXJzdFBhZ2VQYXJhbSA9IGNhY2hlZFBhZ2VQYXJhbXNbMF0gPz8gaW5pdGlhbFBhZ2VQYXJhbTtcbiAgICAgICAgICBjb25zdCB0b3RhbFBhZ2VzID0gY2FjaGVkUGFnZVBhcmFtcy5sZW5ndGg7XG4gICAgICAgICAgcmVzdWx0ID0gYXdhaXQgZmV0Y2hQYWdlKGV4aXN0aW5nRGF0YSwgZmlyc3RQYWdlUGFyYW0sIG1heFBhZ2VzKTtcbiAgICAgICAgICBpZiAoZm9yY2VRdWVyeUZuKSB7XG4gICAgICAgICAgICByZXN1bHQgPSB7XG4gICAgICAgICAgICAgIGRhdGE6IHJlc3VsdC5kYXRhLnBhZ2VzWzBdXG4gICAgICAgICAgICB9O1xuICAgICAgICAgIH1cbiAgICAgICAgICBmb3IgKGxldCBpID0gMTsgaSA8IHRvdGFsUGFnZXM7IGkrKykge1xuICAgICAgICAgICAgY29uc3QgcGFyYW0gPSBnZXROZXh0UGFnZVBhcmFtKGluZmluaXRlUXVlcnlPcHRpb25zLCByZXN1bHQuZGF0YSk7XG4gICAgICAgICAgICByZXN1bHQgPSBhd2FpdCBmZXRjaFBhZ2UocmVzdWx0LmRhdGEsIHBhcmFtLCBtYXhQYWdlcyk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGZpbmFsUXVlcnlSZXR1cm5WYWx1ZSA9IHJlc3VsdDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGZpbmFsUXVlcnlSZXR1cm5WYWx1ZSA9IGF3YWl0IGV4ZWN1dGVSZXF1ZXN0KGFyZy5vcmlnaW5hbEFyZ3MpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGZ1bGZpbGxXaXRoVmFsdWUoZmluYWxRdWVyeVJldHVyblZhbHVlLmRhdGEsIGFkZFNob3VsZEF1dG9CYXRjaCh7XG4gICAgICAgIGZ1bGZpbGxlZFRpbWVTdGFtcDogRGF0ZS5ub3coKSxcbiAgICAgICAgYmFzZVF1ZXJ5TWV0YTogZmluYWxRdWVyeVJldHVyblZhbHVlLm1ldGFcbiAgICAgIH0pKTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgbGV0IGNhdGNoZWRFcnJvciA9IGVycm9yO1xuICAgICAgaWYgKGNhdGNoZWRFcnJvciBpbnN0YW5jZW9mIEhhbmRsZWRFcnJvcikge1xuICAgICAgICBsZXQgdHJhbnNmb3JtRXJyb3JSZXNwb25zZSA9IGdldFRyYW5zZm9ybUNhbGxiYWNrRm9yRW5kcG9pbnQoZW5kcG9pbnREZWZpbml0aW9uLCBcInRyYW5zZm9ybUVycm9yUmVzcG9uc2VcIik7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgcmV0dXJuIHJlamVjdFdpdGhWYWx1ZShhd2FpdCB0cmFuc2Zvcm1FcnJvclJlc3BvbnNlKGNhdGNoZWRFcnJvci52YWx1ZSwgY2F0Y2hlZEVycm9yLm1ldGEsIGFyZy5vcmlnaW5hbEFyZ3MpLCBhZGRTaG91bGRBdXRvQmF0Y2goe1xuICAgICAgICAgICAgYmFzZVF1ZXJ5TWV0YTogY2F0Y2hlZEVycm9yLm1ldGFcbiAgICAgICAgICB9KSk7XG4gICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICBjYXRjaGVkRXJyb3IgPSBlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAodHlwZW9mIHByb2Nlc3MgIT09IFwidW5kZWZpbmVkXCIgJiYgcHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiKSB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoYEFuIHVuaGFuZGxlZCBlcnJvciBvY2N1cnJlZCBwcm9jZXNzaW5nIGEgcmVxdWVzdCBmb3IgdGhlIGVuZHBvaW50IFwiJHthcmcuZW5kcG9pbnROYW1lfVwiLlxuSW4gdGhlIGNhc2Ugb2YgYW4gdW5oYW5kbGVkIGVycm9yLCBubyB0YWdzIHdpbGwgYmUgXCJwcm92aWRlZFwiIG9yIFwiaW52YWxpZGF0ZWRcIi5gLCBjYXRjaGVkRXJyb3IpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uc29sZS5lcnJvcihjYXRjaGVkRXJyb3IpO1xuICAgICAgfVxuICAgICAgdGhyb3cgY2F0Y2hlZEVycm9yO1xuICAgIH1cbiAgfTtcbiAgZnVuY3Rpb24gaXNGb3JjZWRRdWVyeShhcmcsIHN0YXRlKSB7XG4gICAgY29uc3QgcmVxdWVzdFN0YXRlID0gc2VsZWN0b3JzLnNlbGVjdFF1ZXJ5RW50cnkoc3RhdGUsIGFyZy5xdWVyeUNhY2hlS2V5KTtcbiAgICBjb25zdCBiYXNlRmV0Y2hPbk1vdW50T3JBcmdDaGFuZ2UgPSBzZWxlY3RvcnMuc2VsZWN0Q29uZmlnKHN0YXRlKS5yZWZldGNoT25Nb3VudE9yQXJnQ2hhbmdlO1xuICAgIGNvbnN0IGZ1bGZpbGxlZFZhbCA9IHJlcXVlc3RTdGF0ZT8uZnVsZmlsbGVkVGltZVN0YW1wO1xuICAgIGNvbnN0IHJlZmV0Y2hWYWwgPSBhcmcuZm9yY2VSZWZldGNoID8/IChhcmcuc3Vic2NyaWJlICYmIGJhc2VGZXRjaE9uTW91bnRPckFyZ0NoYW5nZSk7XG4gICAgaWYgKHJlZmV0Y2hWYWwpIHtcbiAgICAgIHJldHVybiByZWZldGNoVmFsID09PSB0cnVlIHx8IChOdW1iZXIoLyogQF9fUFVSRV9fICovIG5ldyBEYXRlKCkpIC0gTnVtYmVyKGZ1bGZpbGxlZFZhbCkpIC8gMWUzID49IHJlZmV0Y2hWYWw7XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICBjb25zdCBjcmVhdGVRdWVyeVRodW5rID0gKCkgPT4ge1xuICAgIGNvbnN0IGdlbmVyYXRlZFF1ZXJ5VGh1bmsgPSBjcmVhdGVBc3luY1RodW5rKGAke3JlZHVjZXJQYXRofS9leGVjdXRlUXVlcnlgLCBleGVjdXRlRW5kcG9pbnQsIHtcbiAgICAgIGdldFBlbmRpbmdNZXRhKHtcbiAgICAgICAgYXJnXG4gICAgICB9KSB7XG4gICAgICAgIGNvbnN0IGVuZHBvaW50RGVmaW5pdGlvbiA9IGVuZHBvaW50RGVmaW5pdGlvbnNbYXJnLmVuZHBvaW50TmFtZV07XG4gICAgICAgIHJldHVybiBhZGRTaG91bGRBdXRvQmF0Y2goe1xuICAgICAgICAgIHN0YXJ0ZWRUaW1lU3RhbXA6IERhdGUubm93KCksXG4gICAgICAgICAgLi4uaXNJbmZpbml0ZVF1ZXJ5RGVmaW5pdGlvbihlbmRwb2ludERlZmluaXRpb24pID8ge1xuICAgICAgICAgICAgZGlyZWN0aW9uOiBhcmcuZGlyZWN0aW9uXG4gICAgICAgICAgfSA6IHt9XG4gICAgICAgIH0pO1xuICAgICAgfSxcbiAgICAgIGNvbmRpdGlvbihxdWVyeVRodW5rQXJnLCB7XG4gICAgICAgIGdldFN0YXRlXG4gICAgICB9KSB7XG4gICAgICAgIGNvbnN0IHN0YXRlID0gZ2V0U3RhdGUoKTtcbiAgICAgICAgY29uc3QgcmVxdWVzdFN0YXRlID0gc2VsZWN0b3JzLnNlbGVjdFF1ZXJ5RW50cnkoc3RhdGUsIHF1ZXJ5VGh1bmtBcmcucXVlcnlDYWNoZUtleSk7XG4gICAgICAgIGNvbnN0IGZ1bGZpbGxlZFZhbCA9IHJlcXVlc3RTdGF0ZT8uZnVsZmlsbGVkVGltZVN0YW1wO1xuICAgICAgICBjb25zdCBjdXJyZW50QXJnID0gcXVlcnlUaHVua0FyZy5vcmlnaW5hbEFyZ3M7XG4gICAgICAgIGNvbnN0IHByZXZpb3VzQXJnID0gcmVxdWVzdFN0YXRlPy5vcmlnaW5hbEFyZ3M7XG4gICAgICAgIGNvbnN0IGVuZHBvaW50RGVmaW5pdGlvbiA9IGVuZHBvaW50RGVmaW5pdGlvbnNbcXVlcnlUaHVua0FyZy5lbmRwb2ludE5hbWVdO1xuICAgICAgICBjb25zdCBkaXJlY3Rpb24gPSBxdWVyeVRodW5rQXJnLmRpcmVjdGlvbjtcbiAgICAgICAgaWYgKGlzVXBzZXJ0UXVlcnkocXVlcnlUaHVua0FyZykpIHtcbiAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAocmVxdWVzdFN0YXRlPy5zdGF0dXMgPT09IFwicGVuZGluZ1wiKSB7XG4gICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIGlmIChpc0ZvcmNlZFF1ZXJ5KHF1ZXJ5VGh1bmtBcmcsIHN0YXRlKSkge1xuICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIGlmIChpc1F1ZXJ5RGVmaW5pdGlvbihlbmRwb2ludERlZmluaXRpb24pICYmIGVuZHBvaW50RGVmaW5pdGlvbj8uZm9yY2VSZWZldGNoPy4oe1xuICAgICAgICAgIGN1cnJlbnRBcmcsXG4gICAgICAgICAgcHJldmlvdXNBcmcsXG4gICAgICAgICAgZW5kcG9pbnRTdGF0ZTogcmVxdWVzdFN0YXRlLFxuICAgICAgICAgIHN0YXRlXG4gICAgICAgIH0pKSB7XG4gICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGZ1bGZpbGxlZFZhbCAmJiAhZGlyZWN0aW9uKSB7XG4gICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfSxcbiAgICAgIGRpc3BhdGNoQ29uZGl0aW9uUmVqZWN0aW9uOiB0cnVlXG4gICAgfSk7XG4gICAgcmV0dXJuIGdlbmVyYXRlZFF1ZXJ5VGh1bms7XG4gIH07XG4gIGNvbnN0IHF1ZXJ5VGh1bmsgPSBjcmVhdGVRdWVyeVRodW5rKCk7XG4gIGNvbnN0IGluZmluaXRlUXVlcnlUaHVuayA9IGNyZWF0ZVF1ZXJ5VGh1bmsoKTtcbiAgY29uc3QgbXV0YXRpb25UaHVuayA9IGNyZWF0ZUFzeW5jVGh1bmsoYCR7cmVkdWNlclBhdGh9L2V4ZWN1dGVNdXRhdGlvbmAsIGV4ZWN1dGVFbmRwb2ludCwge1xuICAgIGdldFBlbmRpbmdNZXRhKCkge1xuICAgICAgcmV0dXJuIGFkZFNob3VsZEF1dG9CYXRjaCh7XG4gICAgICAgIHN0YXJ0ZWRUaW1lU3RhbXA6IERhdGUubm93KClcbiAgICAgIH0pO1xuICAgIH1cbiAgfSk7XG4gIGNvbnN0IGhhc1RoZUZvcmNlID0gKG9wdGlvbnMpID0+IFwiZm9yY2VcIiBpbiBvcHRpb25zO1xuICBjb25zdCBoYXNNYXhBZ2UgPSAob3B0aW9ucykgPT4gXCJpZk9sZGVyVGhhblwiIGluIG9wdGlvbnM7XG4gIGNvbnN0IHByZWZldGNoID0gKGVuZHBvaW50TmFtZSwgYXJnLCBvcHRpb25zKSA9PiAoZGlzcGF0Y2gsIGdldFN0YXRlKSA9PiB7XG4gICAgY29uc3QgZm9yY2UgPSBoYXNUaGVGb3JjZShvcHRpb25zKSAmJiBvcHRpb25zLmZvcmNlO1xuICAgIGNvbnN0IG1heEFnZSA9IGhhc01heEFnZShvcHRpb25zKSAmJiBvcHRpb25zLmlmT2xkZXJUaGFuO1xuICAgIGNvbnN0IHF1ZXJ5QWN0aW9uID0gKGZvcmNlMiA9IHRydWUpID0+IHtcbiAgICAgIGNvbnN0IG9wdGlvbnMyID0ge1xuICAgICAgICBmb3JjZVJlZmV0Y2g6IGZvcmNlMixcbiAgICAgICAgaXNQcmVmZXRjaDogdHJ1ZVxuICAgICAgfTtcbiAgICAgIHJldHVybiBhcGkuZW5kcG9pbnRzW2VuZHBvaW50TmFtZV0uaW5pdGlhdGUoYXJnLCBvcHRpb25zMik7XG4gICAgfTtcbiAgICBjb25zdCBsYXRlc3RTdGF0ZVZhbHVlID0gYXBpLmVuZHBvaW50c1tlbmRwb2ludE5hbWVdLnNlbGVjdChhcmcpKGdldFN0YXRlKCkpO1xuICAgIGlmIChmb3JjZSkge1xuICAgICAgZGlzcGF0Y2gocXVlcnlBY3Rpb24oKSk7XG4gICAgfSBlbHNlIGlmIChtYXhBZ2UpIHtcbiAgICAgIGNvbnN0IGxhc3RGdWxmaWxsZWRUcyA9IGxhdGVzdFN0YXRlVmFsdWU/LmZ1bGZpbGxlZFRpbWVTdGFtcDtcbiAgICAgIGlmICghbGFzdEZ1bGZpbGxlZFRzKSB7XG4gICAgICAgIGRpc3BhdGNoKHF1ZXJ5QWN0aW9uKCkpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBjb25zdCBzaG91bGRSZXRyaWdnZXIgPSAoTnVtYmVyKC8qIEBfX1BVUkVfXyAqLyBuZXcgRGF0ZSgpKSAtIE51bWJlcihuZXcgRGF0ZShsYXN0RnVsZmlsbGVkVHMpKSkgLyAxZTMgPj0gbWF4QWdlO1xuICAgICAgaWYgKHNob3VsZFJldHJpZ2dlcikge1xuICAgICAgICBkaXNwYXRjaChxdWVyeUFjdGlvbigpKTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgZGlzcGF0Y2gocXVlcnlBY3Rpb24oZmFsc2UpKTtcbiAgICB9XG4gIH07XG4gIGZ1bmN0aW9uIG1hdGNoZXNFbmRwb2ludChlbmRwb2ludE5hbWUpIHtcbiAgICByZXR1cm4gKGFjdGlvbikgPT4gYWN0aW9uPy5tZXRhPy5hcmc/LmVuZHBvaW50TmFtZSA9PT0gZW5kcG9pbnROYW1lO1xuICB9XG4gIGZ1bmN0aW9uIGJ1aWxkTWF0Y2hUaHVua0FjdGlvbnModGh1bmssIGVuZHBvaW50TmFtZSkge1xuICAgIHJldHVybiB7XG4gICAgICBtYXRjaFBlbmRpbmc6IGlzQWxsT2YoaXNQZW5kaW5nKHRodW5rKSwgbWF0Y2hlc0VuZHBvaW50KGVuZHBvaW50TmFtZSkpLFxuICAgICAgbWF0Y2hGdWxmaWxsZWQ6IGlzQWxsT2YoaXNGdWxmaWxsZWQodGh1bmspLCBtYXRjaGVzRW5kcG9pbnQoZW5kcG9pbnROYW1lKSksXG4gICAgICBtYXRjaFJlamVjdGVkOiBpc0FsbE9mKGlzUmVqZWN0ZWQodGh1bmspLCBtYXRjaGVzRW5kcG9pbnQoZW5kcG9pbnROYW1lKSlcbiAgICB9O1xuICB9XG4gIHJldHVybiB7XG4gICAgcXVlcnlUaHVuayxcbiAgICBtdXRhdGlvblRodW5rLFxuICAgIGluZmluaXRlUXVlcnlUaHVuayxcbiAgICBwcmVmZXRjaCxcbiAgICB1cGRhdGVRdWVyeURhdGEsXG4gICAgdXBzZXJ0UXVlcnlEYXRhLFxuICAgIHBhdGNoUXVlcnlEYXRhLFxuICAgIGJ1aWxkTWF0Y2hUaHVua0FjdGlvbnNcbiAgfTtcbn1cbmZ1bmN0aW9uIGdldE5leHRQYWdlUGFyYW0ob3B0aW9ucywge1xuICBwYWdlcyxcbiAgcGFnZVBhcmFtc1xufSkge1xuICBjb25zdCBsYXN0SW5kZXggPSBwYWdlcy5sZW5ndGggLSAxO1xuICByZXR1cm4gb3B0aW9ucy5nZXROZXh0UGFnZVBhcmFtKHBhZ2VzW2xhc3RJbmRleF0sIHBhZ2VzLCBwYWdlUGFyYW1zW2xhc3RJbmRleF0sIHBhZ2VQYXJhbXMpO1xufVxuZnVuY3Rpb24gZ2V0UHJldmlvdXNQYWdlUGFyYW0ob3B0aW9ucywge1xuICBwYWdlcyxcbiAgcGFnZVBhcmFtc1xufSkge1xuICByZXR1cm4gb3B0aW9ucy5nZXRQcmV2aW91c1BhZ2VQYXJhbT8uKHBhZ2VzWzBdLCBwYWdlcywgcGFnZVBhcmFtc1swXSwgcGFnZVBhcmFtcyk7XG59XG5mdW5jdGlvbiBjYWxjdWxhdGVQcm92aWRlZEJ5VGh1bmsoYWN0aW9uLCB0eXBlLCBlbmRwb2ludERlZmluaXRpb25zLCBhc3NlcnRUYWdUeXBlKSB7XG4gIHJldHVybiBjYWxjdWxhdGVQcm92aWRlZEJ5KGVuZHBvaW50RGVmaW5pdGlvbnNbYWN0aW9uLm1ldGEuYXJnLmVuZHBvaW50TmFtZV1bdHlwZV0sIGlzRnVsZmlsbGVkKGFjdGlvbikgPyBhY3Rpb24ucGF5bG9hZCA6IHZvaWQgMCwgaXNSZWplY3RlZFdpdGhWYWx1ZShhY3Rpb24pID8gYWN0aW9uLnBheWxvYWQgOiB2b2lkIDAsIGFjdGlvbi5tZXRhLmFyZy5vcmlnaW5hbEFyZ3MsIFwiYmFzZVF1ZXJ5TWV0YVwiIGluIGFjdGlvbi5tZXRhID8gYWN0aW9uLm1ldGEuYmFzZVF1ZXJ5TWV0YSA6IHZvaWQgMCwgYXNzZXJ0VGFnVHlwZSk7XG59XG5cbi8vIHNyYy9xdWVyeS9jb3JlL2J1aWxkU2xpY2UudHNcbmltcG9ydCB7IGlzRHJhZnQgfSBmcm9tIFwiaW1tZXJcIjtcbmltcG9ydCB7IGFwcGx5UGF0Y2hlcywgb3JpZ2luYWwgfSBmcm9tIFwiaW1tZXJcIjtcbmZ1bmN0aW9uIHVwZGF0ZVF1ZXJ5U3Vic3RhdGVJZkV4aXN0cyhzdGF0ZSwgcXVlcnlDYWNoZUtleSwgdXBkYXRlKSB7XG4gIGNvbnN0IHN1YnN0YXRlID0gc3RhdGVbcXVlcnlDYWNoZUtleV07XG4gIGlmIChzdWJzdGF0ZSkge1xuICAgIHVwZGF0ZShzdWJzdGF0ZSk7XG4gIH1cbn1cbmZ1bmN0aW9uIGdldE11dGF0aW9uQ2FjaGVLZXkoaWQpIHtcbiAgcmV0dXJuIChcImFyZ1wiIGluIGlkID8gaWQuYXJnLmZpeGVkQ2FjaGVLZXkgOiBpZC5maXhlZENhY2hlS2V5KSA/PyBpZC5yZXF1ZXN0SWQ7XG59XG5mdW5jdGlvbiB1cGRhdGVNdXRhdGlvblN1YnN0YXRlSWZFeGlzdHMoc3RhdGUsIGlkLCB1cGRhdGUpIHtcbiAgY29uc3Qgc3Vic3RhdGUgPSBzdGF0ZVtnZXRNdXRhdGlvbkNhY2hlS2V5KGlkKV07XG4gIGlmIChzdWJzdGF0ZSkge1xuICAgIHVwZGF0ZShzdWJzdGF0ZSk7XG4gIH1cbn1cbnZhciBpbml0aWFsU3RhdGUgPSB7fTtcbmZ1bmN0aW9uIGJ1aWxkU2xpY2Uoe1xuICByZWR1Y2VyUGF0aCxcbiAgcXVlcnlUaHVuayxcbiAgbXV0YXRpb25UaHVuayxcbiAgc2VyaWFsaXplUXVlcnlBcmdzLFxuICBjb250ZXh0OiB7XG4gICAgZW5kcG9pbnREZWZpbml0aW9uczogZGVmaW5pdGlvbnMsXG4gICAgYXBpVWlkLFxuICAgIGV4dHJhY3RSZWh5ZHJhdGlvbkluZm8sXG4gICAgaGFzUmVoeWRyYXRpb25JbmZvXG4gIH0sXG4gIGFzc2VydFRhZ1R5cGUsXG4gIGNvbmZpZ1xufSkge1xuICBjb25zdCByZXNldEFwaVN0YXRlID0gY3JlYXRlQWN0aW9uKGAke3JlZHVjZXJQYXRofS9yZXNldEFwaVN0YXRlYCk7XG4gIGZ1bmN0aW9uIHdyaXRlUGVuZGluZ0NhY2hlRW50cnkoZHJhZnQsIGFyZywgdXBzZXJ0aW5nLCBtZXRhKSB7XG4gICAgZHJhZnRbYXJnLnF1ZXJ5Q2FjaGVLZXldID8/PSB7XG4gICAgICBzdGF0dXM6IFwidW5pbml0aWFsaXplZFwiIC8qIHVuaW5pdGlhbGl6ZWQgKi8sXG4gICAgICBlbmRwb2ludE5hbWU6IGFyZy5lbmRwb2ludE5hbWVcbiAgICB9O1xuICAgIHVwZGF0ZVF1ZXJ5U3Vic3RhdGVJZkV4aXN0cyhkcmFmdCwgYXJnLnF1ZXJ5Q2FjaGVLZXksIChzdWJzdGF0ZSkgPT4ge1xuICAgICAgc3Vic3RhdGUuc3RhdHVzID0gXCJwZW5kaW5nXCIgLyogcGVuZGluZyAqLztcbiAgICAgIHN1YnN0YXRlLnJlcXVlc3RJZCA9IHVwc2VydGluZyAmJiBzdWJzdGF0ZS5yZXF1ZXN0SWQgPyAoXG4gICAgICAgIC8vIGZvciBgdXBzZXJ0UXVlcnlgICoqdXBkYXRlcyoqLCBrZWVwIHRoZSBjdXJyZW50IGByZXF1ZXN0SWRgXG4gICAgICAgIHN1YnN0YXRlLnJlcXVlc3RJZFxuICAgICAgKSA6IChcbiAgICAgICAgLy8gZm9yIG5vcm1hbCBxdWVyaWVzIG9yIGB1cHNlcnRRdWVyeWAgKippbnNlcnRzKiogYWx3YXlzIHVwZGF0ZSB0aGUgYHJlcXVlc3RJZGBcbiAgICAgICAgbWV0YS5yZXF1ZXN0SWRcbiAgICAgICk7XG4gICAgICBpZiAoYXJnLm9yaWdpbmFsQXJncyAhPT0gdm9pZCAwKSB7XG4gICAgICAgIHN1YnN0YXRlLm9yaWdpbmFsQXJncyA9IGFyZy5vcmlnaW5hbEFyZ3M7XG4gICAgICB9XG4gICAgICBzdWJzdGF0ZS5zdGFydGVkVGltZVN0YW1wID0gbWV0YS5zdGFydGVkVGltZVN0YW1wO1xuICAgICAgY29uc3QgZW5kcG9pbnREZWZpbml0aW9uID0gZGVmaW5pdGlvbnNbbWV0YS5hcmcuZW5kcG9pbnROYW1lXTtcbiAgICAgIGlmIChpc0luZmluaXRlUXVlcnlEZWZpbml0aW9uKGVuZHBvaW50RGVmaW5pdGlvbikgJiYgXCJkaXJlY3Rpb25cIiBpbiBhcmcpIHtcbiAgICAgICAgO1xuICAgICAgICBzdWJzdGF0ZS5kaXJlY3Rpb24gPSBhcmcuZGlyZWN0aW9uO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG4gIGZ1bmN0aW9uIHdyaXRlRnVsZmlsbGVkQ2FjaGVFbnRyeShkcmFmdCwgbWV0YSwgcGF5bG9hZCwgdXBzZXJ0aW5nKSB7XG4gICAgdXBkYXRlUXVlcnlTdWJzdGF0ZUlmRXhpc3RzKGRyYWZ0LCBtZXRhLmFyZy5xdWVyeUNhY2hlS2V5LCAoc3Vic3RhdGUpID0+IHtcbiAgICAgIGlmIChzdWJzdGF0ZS5yZXF1ZXN0SWQgIT09IG1ldGEucmVxdWVzdElkICYmICF1cHNlcnRpbmcpIHJldHVybjtcbiAgICAgIGNvbnN0IHtcbiAgICAgICAgbWVyZ2VcbiAgICAgIH0gPSBkZWZpbml0aW9uc1ttZXRhLmFyZy5lbmRwb2ludE5hbWVdO1xuICAgICAgc3Vic3RhdGUuc3RhdHVzID0gXCJmdWxmaWxsZWRcIiAvKiBmdWxmaWxsZWQgKi87XG4gICAgICBpZiAobWVyZ2UpIHtcbiAgICAgICAgaWYgKHN1YnN0YXRlLmRhdGEgIT09IHZvaWQgMCkge1xuICAgICAgICAgIGNvbnN0IHtcbiAgICAgICAgICAgIGZ1bGZpbGxlZFRpbWVTdGFtcCxcbiAgICAgICAgICAgIGFyZyxcbiAgICAgICAgICAgIGJhc2VRdWVyeU1ldGEsXG4gICAgICAgICAgICByZXF1ZXN0SWRcbiAgICAgICAgICB9ID0gbWV0YTtcbiAgICAgICAgICBsZXQgbmV3RGF0YSA9IGNyZWF0ZU5leHRTdGF0ZShzdWJzdGF0ZS5kYXRhLCAoZHJhZnRTdWJzdGF0ZURhdGEpID0+IHtcbiAgICAgICAgICAgIHJldHVybiBtZXJnZShkcmFmdFN1YnN0YXRlRGF0YSwgcGF5bG9hZCwge1xuICAgICAgICAgICAgICBhcmc6IGFyZy5vcmlnaW5hbEFyZ3MsXG4gICAgICAgICAgICAgIGJhc2VRdWVyeU1ldGEsXG4gICAgICAgICAgICAgIGZ1bGZpbGxlZFRpbWVTdGFtcCxcbiAgICAgICAgICAgICAgcmVxdWVzdElkXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgICBzdWJzdGF0ZS5kYXRhID0gbmV3RGF0YTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBzdWJzdGF0ZS5kYXRhID0gcGF5bG9hZDtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgc3Vic3RhdGUuZGF0YSA9IGRlZmluaXRpb25zW21ldGEuYXJnLmVuZHBvaW50TmFtZV0uc3RydWN0dXJhbFNoYXJpbmcgPz8gdHJ1ZSA/IGNvcHlXaXRoU3RydWN0dXJhbFNoYXJpbmcoaXNEcmFmdChzdWJzdGF0ZS5kYXRhKSA/IG9yaWdpbmFsKHN1YnN0YXRlLmRhdGEpIDogc3Vic3RhdGUuZGF0YSwgcGF5bG9hZCkgOiBwYXlsb2FkO1xuICAgICAgfVxuICAgICAgZGVsZXRlIHN1YnN0YXRlLmVycm9yO1xuICAgICAgc3Vic3RhdGUuZnVsZmlsbGVkVGltZVN0YW1wID0gbWV0YS5mdWxmaWxsZWRUaW1lU3RhbXA7XG4gICAgfSk7XG4gIH1cbiAgY29uc3QgcXVlcnlTbGljZSA9IGNyZWF0ZVNsaWNlKHtcbiAgICBuYW1lOiBgJHtyZWR1Y2VyUGF0aH0vcXVlcmllc2AsXG4gICAgaW5pdGlhbFN0YXRlLFxuICAgIHJlZHVjZXJzOiB7XG4gICAgICByZW1vdmVRdWVyeVJlc3VsdDoge1xuICAgICAgICByZWR1Y2VyKGRyYWZ0LCB7XG4gICAgICAgICAgcGF5bG9hZDoge1xuICAgICAgICAgICAgcXVlcnlDYWNoZUtleVxuICAgICAgICAgIH1cbiAgICAgICAgfSkge1xuICAgICAgICAgIGRlbGV0ZSBkcmFmdFtxdWVyeUNhY2hlS2V5XTtcbiAgICAgICAgfSxcbiAgICAgICAgcHJlcGFyZTogcHJlcGFyZUF1dG9CYXRjaGVkKClcbiAgICAgIH0sXG4gICAgICBjYWNoZUVudHJpZXNVcHNlcnRlZDoge1xuICAgICAgICByZWR1Y2VyKGRyYWZ0LCBhY3Rpb24pIHtcbiAgICAgICAgICBmb3IgKGNvbnN0IGVudHJ5IG9mIGFjdGlvbi5wYXlsb2FkKSB7XG4gICAgICAgICAgICBjb25zdCB7XG4gICAgICAgICAgICAgIHF1ZXJ5RGVzY3JpcHRpb246IGFyZyxcbiAgICAgICAgICAgICAgdmFsdWVcbiAgICAgICAgICAgIH0gPSBlbnRyeTtcbiAgICAgICAgICAgIHdyaXRlUGVuZGluZ0NhY2hlRW50cnkoZHJhZnQsIGFyZywgdHJ1ZSwge1xuICAgICAgICAgICAgICBhcmcsXG4gICAgICAgICAgICAgIHJlcXVlc3RJZDogYWN0aW9uLm1ldGEucmVxdWVzdElkLFxuICAgICAgICAgICAgICBzdGFydGVkVGltZVN0YW1wOiBhY3Rpb24ubWV0YS50aW1lc3RhbXBcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgd3JpdGVGdWxmaWxsZWRDYWNoZUVudHJ5KFxuICAgICAgICAgICAgICBkcmFmdCxcbiAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGFyZyxcbiAgICAgICAgICAgICAgICByZXF1ZXN0SWQ6IGFjdGlvbi5tZXRhLnJlcXVlc3RJZCxcbiAgICAgICAgICAgICAgICBmdWxmaWxsZWRUaW1lU3RhbXA6IGFjdGlvbi5tZXRhLnRpbWVzdGFtcCxcbiAgICAgICAgICAgICAgICBiYXNlUXVlcnlNZXRhOiB7fVxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICB2YWx1ZSxcbiAgICAgICAgICAgICAgLy8gV2Uga25vdyB3ZSdyZSB1cHNlcnRpbmcgaGVyZVxuICAgICAgICAgICAgICB0cnVlXG4gICAgICAgICAgICApO1xuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgcHJlcGFyZTogKHBheWxvYWQpID0+IHtcbiAgICAgICAgICBjb25zdCBxdWVyeURlc2NyaXB0aW9ucyA9IHBheWxvYWQubWFwKChlbnRyeSkgPT4ge1xuICAgICAgICAgICAgY29uc3Qge1xuICAgICAgICAgICAgICBlbmRwb2ludE5hbWUsXG4gICAgICAgICAgICAgIGFyZyxcbiAgICAgICAgICAgICAgdmFsdWVcbiAgICAgICAgICAgIH0gPSBlbnRyeTtcbiAgICAgICAgICAgIGNvbnN0IGVuZHBvaW50RGVmaW5pdGlvbiA9IGRlZmluaXRpb25zW2VuZHBvaW50TmFtZV07XG4gICAgICAgICAgICBjb25zdCBxdWVyeURlc2NyaXB0aW9uID0ge1xuICAgICAgICAgICAgICB0eXBlOiBcInF1ZXJ5XCIsXG4gICAgICAgICAgICAgIGVuZHBvaW50TmFtZSxcbiAgICAgICAgICAgICAgb3JpZ2luYWxBcmdzOiBlbnRyeS5hcmcsXG4gICAgICAgICAgICAgIHF1ZXJ5Q2FjaGVLZXk6IHNlcmlhbGl6ZVF1ZXJ5QXJncyh7XG4gICAgICAgICAgICAgICAgcXVlcnlBcmdzOiBhcmcsXG4gICAgICAgICAgICAgICAgZW5kcG9pbnREZWZpbml0aW9uLFxuICAgICAgICAgICAgICAgIGVuZHBvaW50TmFtZVxuICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgIHF1ZXJ5RGVzY3JpcHRpb24sXG4gICAgICAgICAgICAgIHZhbHVlXG4gICAgICAgICAgICB9O1xuICAgICAgICAgIH0pO1xuICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IHtcbiAgICAgICAgICAgIHBheWxvYWQ6IHF1ZXJ5RGVzY3JpcHRpb25zLFxuICAgICAgICAgICAgbWV0YToge1xuICAgICAgICAgICAgICBbU0hPVUxEX0FVVE9CQVRDSF06IHRydWUsXG4gICAgICAgICAgICAgIHJlcXVlc3RJZDogbmFub2lkKCksXG4gICAgICAgICAgICAgIHRpbWVzdGFtcDogRGF0ZS5ub3coKVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH07XG4gICAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIHF1ZXJ5UmVzdWx0UGF0Y2hlZDoge1xuICAgICAgICByZWR1Y2VyKGRyYWZ0LCB7XG4gICAgICAgICAgcGF5bG9hZDoge1xuICAgICAgICAgICAgcXVlcnlDYWNoZUtleSxcbiAgICAgICAgICAgIHBhdGNoZXNcbiAgICAgICAgICB9XG4gICAgICAgIH0pIHtcbiAgICAgICAgICB1cGRhdGVRdWVyeVN1YnN0YXRlSWZFeGlzdHMoZHJhZnQsIHF1ZXJ5Q2FjaGVLZXksIChzdWJzdGF0ZSkgPT4ge1xuICAgICAgICAgICAgc3Vic3RhdGUuZGF0YSA9IGFwcGx5UGF0Y2hlcyhzdWJzdGF0ZS5kYXRhLCBwYXRjaGVzLmNvbmNhdCgpKTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfSxcbiAgICAgICAgcHJlcGFyZTogcHJlcGFyZUF1dG9CYXRjaGVkKClcbiAgICAgIH1cbiAgICB9LFxuICAgIGV4dHJhUmVkdWNlcnMoYnVpbGRlcikge1xuICAgICAgYnVpbGRlci5hZGRDYXNlKHF1ZXJ5VGh1bmsucGVuZGluZywgKGRyYWZ0LCB7XG4gICAgICAgIG1ldGEsXG4gICAgICAgIG1ldGE6IHtcbiAgICAgICAgICBhcmdcbiAgICAgICAgfVxuICAgICAgfSkgPT4ge1xuICAgICAgICBjb25zdCB1cHNlcnRpbmcgPSBpc1Vwc2VydFF1ZXJ5KGFyZyk7XG4gICAgICAgIHdyaXRlUGVuZGluZ0NhY2hlRW50cnkoZHJhZnQsIGFyZywgdXBzZXJ0aW5nLCBtZXRhKTtcbiAgICAgIH0pLmFkZENhc2UocXVlcnlUaHVuay5mdWxmaWxsZWQsIChkcmFmdCwge1xuICAgICAgICBtZXRhLFxuICAgICAgICBwYXlsb2FkXG4gICAgICB9KSA9PiB7XG4gICAgICAgIGNvbnN0IHVwc2VydGluZyA9IGlzVXBzZXJ0UXVlcnkobWV0YS5hcmcpO1xuICAgICAgICB3cml0ZUZ1bGZpbGxlZENhY2hlRW50cnkoZHJhZnQsIG1ldGEsIHBheWxvYWQsIHVwc2VydGluZyk7XG4gICAgICB9KS5hZGRDYXNlKHF1ZXJ5VGh1bmsucmVqZWN0ZWQsIChkcmFmdCwge1xuICAgICAgICBtZXRhOiB7XG4gICAgICAgICAgY29uZGl0aW9uLFxuICAgICAgICAgIGFyZyxcbiAgICAgICAgICByZXF1ZXN0SWRcbiAgICAgICAgfSxcbiAgICAgICAgZXJyb3IsXG4gICAgICAgIHBheWxvYWRcbiAgICAgIH0pID0+IHtcbiAgICAgICAgdXBkYXRlUXVlcnlTdWJzdGF0ZUlmRXhpc3RzKGRyYWZ0LCBhcmcucXVlcnlDYWNoZUtleSwgKHN1YnN0YXRlKSA9PiB7XG4gICAgICAgICAgaWYgKGNvbmRpdGlvbikge1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBpZiAoc3Vic3RhdGUucmVxdWVzdElkICE9PSByZXF1ZXN0SWQpIHJldHVybjtcbiAgICAgICAgICAgIHN1YnN0YXRlLnN0YXR1cyA9IFwicmVqZWN0ZWRcIiAvKiByZWplY3RlZCAqLztcbiAgICAgICAgICAgIHN1YnN0YXRlLmVycm9yID0gcGF5bG9hZCA/PyBlcnJvcjtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfSkuYWRkTWF0Y2hlcihoYXNSZWh5ZHJhdGlvbkluZm8sIChkcmFmdCwgYWN0aW9uKSA9PiB7XG4gICAgICAgIGNvbnN0IHtcbiAgICAgICAgICBxdWVyaWVzXG4gICAgICAgIH0gPSBleHRyYWN0UmVoeWRyYXRpb25JbmZvKGFjdGlvbik7XG4gICAgICAgIGZvciAoY29uc3QgW2tleSwgZW50cnldIG9mIE9iamVjdC5lbnRyaWVzKHF1ZXJpZXMpKSB7XG4gICAgICAgICAgaWYgKFxuICAgICAgICAgICAgLy8gZG8gbm90IHJlaHlkcmF0ZSBlbnRyaWVzIHRoYXQgd2VyZSBjdXJyZW50bHkgaW4gZmxpZ2h0LlxuICAgICAgICAgICAgZW50cnk/LnN0YXR1cyA9PT0gXCJmdWxmaWxsZWRcIiAvKiBmdWxmaWxsZWQgKi8gfHwgZW50cnk/LnN0YXR1cyA9PT0gXCJyZWplY3RlZFwiIC8qIHJlamVjdGVkICovXG4gICAgICAgICAgKSB7XG4gICAgICAgICAgICBkcmFmdFtrZXldID0gZW50cnk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG4gIH0pO1xuICBjb25zdCBtdXRhdGlvblNsaWNlID0gY3JlYXRlU2xpY2Uoe1xuICAgIG5hbWU6IGAke3JlZHVjZXJQYXRofS9tdXRhdGlvbnNgLFxuICAgIGluaXRpYWxTdGF0ZSxcbiAgICByZWR1Y2Vyczoge1xuICAgICAgcmVtb3ZlTXV0YXRpb25SZXN1bHQ6IHtcbiAgICAgICAgcmVkdWNlcihkcmFmdCwge1xuICAgICAgICAgIHBheWxvYWRcbiAgICAgICAgfSkge1xuICAgICAgICAgIGNvbnN0IGNhY2hlS2V5ID0gZ2V0TXV0YXRpb25DYWNoZUtleShwYXlsb2FkKTtcbiAgICAgICAgICBpZiAoY2FjaGVLZXkgaW4gZHJhZnQpIHtcbiAgICAgICAgICAgIGRlbGV0ZSBkcmFmdFtjYWNoZUtleV07XG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBwcmVwYXJlOiBwcmVwYXJlQXV0b0JhdGNoZWQoKVxuICAgICAgfVxuICAgIH0sXG4gICAgZXh0cmFSZWR1Y2VycyhidWlsZGVyKSB7XG4gICAgICBidWlsZGVyLmFkZENhc2UobXV0YXRpb25UaHVuay5wZW5kaW5nLCAoZHJhZnQsIHtcbiAgICAgICAgbWV0YSxcbiAgICAgICAgbWV0YToge1xuICAgICAgICAgIHJlcXVlc3RJZCxcbiAgICAgICAgICBhcmcsXG4gICAgICAgICAgc3RhcnRlZFRpbWVTdGFtcFxuICAgICAgICB9XG4gICAgICB9KSA9PiB7XG4gICAgICAgIGlmICghYXJnLnRyYWNrKSByZXR1cm47XG4gICAgICAgIGRyYWZ0W2dldE11dGF0aW9uQ2FjaGVLZXkobWV0YSldID0ge1xuICAgICAgICAgIHJlcXVlc3RJZCxcbiAgICAgICAgICBzdGF0dXM6IFwicGVuZGluZ1wiIC8qIHBlbmRpbmcgKi8sXG4gICAgICAgICAgZW5kcG9pbnROYW1lOiBhcmcuZW5kcG9pbnROYW1lLFxuICAgICAgICAgIHN0YXJ0ZWRUaW1lU3RhbXBcbiAgICAgICAgfTtcbiAgICAgIH0pLmFkZENhc2UobXV0YXRpb25UaHVuay5mdWxmaWxsZWQsIChkcmFmdCwge1xuICAgICAgICBwYXlsb2FkLFxuICAgICAgICBtZXRhXG4gICAgICB9KSA9PiB7XG4gICAgICAgIGlmICghbWV0YS5hcmcudHJhY2spIHJldHVybjtcbiAgICAgICAgdXBkYXRlTXV0YXRpb25TdWJzdGF0ZUlmRXhpc3RzKGRyYWZ0LCBtZXRhLCAoc3Vic3RhdGUpID0+IHtcbiAgICAgICAgICBpZiAoc3Vic3RhdGUucmVxdWVzdElkICE9PSBtZXRhLnJlcXVlc3RJZCkgcmV0dXJuO1xuICAgICAgICAgIHN1YnN0YXRlLnN0YXR1cyA9IFwiZnVsZmlsbGVkXCIgLyogZnVsZmlsbGVkICovO1xuICAgICAgICAgIHN1YnN0YXRlLmRhdGEgPSBwYXlsb2FkO1xuICAgICAgICAgIHN1YnN0YXRlLmZ1bGZpbGxlZFRpbWVTdGFtcCA9IG1ldGEuZnVsZmlsbGVkVGltZVN0YW1wO1xuICAgICAgICB9KTtcbiAgICAgIH0pLmFkZENhc2UobXV0YXRpb25UaHVuay5yZWplY3RlZCwgKGRyYWZ0LCB7XG4gICAgICAgIHBheWxvYWQsXG4gICAgICAgIGVycm9yLFxuICAgICAgICBtZXRhXG4gICAgICB9KSA9PiB7XG4gICAgICAgIGlmICghbWV0YS5hcmcudHJhY2spIHJldHVybjtcbiAgICAgICAgdXBkYXRlTXV0YXRpb25TdWJzdGF0ZUlmRXhpc3RzKGRyYWZ0LCBtZXRhLCAoc3Vic3RhdGUpID0+IHtcbiAgICAgICAgICBpZiAoc3Vic3RhdGUucmVxdWVzdElkICE9PSBtZXRhLnJlcXVlc3RJZCkgcmV0dXJuO1xuICAgICAgICAgIHN1YnN0YXRlLnN0YXR1cyA9IFwicmVqZWN0ZWRcIiAvKiByZWplY3RlZCAqLztcbiAgICAgICAgICBzdWJzdGF0ZS5lcnJvciA9IHBheWxvYWQgPz8gZXJyb3I7XG4gICAgICAgIH0pO1xuICAgICAgfSkuYWRkTWF0Y2hlcihoYXNSZWh5ZHJhdGlvbkluZm8sIChkcmFmdCwgYWN0aW9uKSA9PiB7XG4gICAgICAgIGNvbnN0IHtcbiAgICAgICAgICBtdXRhdGlvbnNcbiAgICAgICAgfSA9IGV4dHJhY3RSZWh5ZHJhdGlvbkluZm8oYWN0aW9uKTtcbiAgICAgICAgZm9yIChjb25zdCBba2V5LCBlbnRyeV0gb2YgT2JqZWN0LmVudHJpZXMobXV0YXRpb25zKSkge1xuICAgICAgICAgIGlmIChcbiAgICAgICAgICAgIC8vIGRvIG5vdCByZWh5ZHJhdGUgZW50cmllcyB0aGF0IHdlcmUgY3VycmVudGx5IGluIGZsaWdodC5cbiAgICAgICAgICAgIChlbnRyeT8uc3RhdHVzID09PSBcImZ1bGZpbGxlZFwiIC8qIGZ1bGZpbGxlZCAqLyB8fCBlbnRyeT8uc3RhdHVzID09PSBcInJlamVjdGVkXCIgLyogcmVqZWN0ZWQgKi8pICYmIC8vIG9ubHkgcmVoeWRyYXRlIGVuZHBvaW50cyB0aGF0IHdlcmUgcGVyc2lzdGVkIHVzaW5nIGEgYGZpeGVkQ2FjaGVLZXlgXG4gICAgICAgICAgICBrZXkgIT09IGVudHJ5Py5yZXF1ZXN0SWRcbiAgICAgICAgICApIHtcbiAgICAgICAgICAgIGRyYWZ0W2tleV0gPSBlbnRyeTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cbiAgfSk7XG4gIGNvbnN0IGludmFsaWRhdGlvblNsaWNlID0gY3JlYXRlU2xpY2Uoe1xuICAgIG5hbWU6IGAke3JlZHVjZXJQYXRofS9pbnZhbGlkYXRpb25gLFxuICAgIGluaXRpYWxTdGF0ZSxcbiAgICByZWR1Y2Vyczoge1xuICAgICAgdXBkYXRlUHJvdmlkZWRCeToge1xuICAgICAgICByZWR1Y2VyKGRyYWZ0LCBhY3Rpb24pIHtcbiAgICAgICAgICBjb25zdCB7XG4gICAgICAgICAgICBxdWVyeUNhY2hlS2V5LFxuICAgICAgICAgICAgcHJvdmlkZWRUYWdzXG4gICAgICAgICAgfSA9IGFjdGlvbi5wYXlsb2FkO1xuICAgICAgICAgIGZvciAoY29uc3QgdGFnVHlwZVN1YnNjcmlwdGlvbnMgb2YgT2JqZWN0LnZhbHVlcyhkcmFmdCkpIHtcbiAgICAgICAgICAgIGZvciAoY29uc3QgaWRTdWJzY3JpcHRpb25zIG9mIE9iamVjdC52YWx1ZXModGFnVHlwZVN1YnNjcmlwdGlvbnMpKSB7XG4gICAgICAgICAgICAgIGNvbnN0IGZvdW5kQXQgPSBpZFN1YnNjcmlwdGlvbnMuaW5kZXhPZihxdWVyeUNhY2hlS2V5KTtcbiAgICAgICAgICAgICAgaWYgKGZvdW5kQXQgIT09IC0xKSB7XG4gICAgICAgICAgICAgICAgaWRTdWJzY3JpcHRpb25zLnNwbGljZShmb3VuZEF0LCAxKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICBmb3IgKGNvbnN0IHtcbiAgICAgICAgICAgIHR5cGUsXG4gICAgICAgICAgICBpZFxuICAgICAgICAgIH0gb2YgcHJvdmlkZWRUYWdzKSB7XG4gICAgICAgICAgICBjb25zdCBzdWJzY3JpYmVkUXVlcmllcyA9IChkcmFmdFt0eXBlXSA/Pz0ge30pW2lkIHx8IFwiX19pbnRlcm5hbF93aXRob3V0X2lkXCJdID8/PSBbXTtcbiAgICAgICAgICAgIGNvbnN0IGFscmVhZHlTdWJzY3JpYmVkID0gc3Vic2NyaWJlZFF1ZXJpZXMuaW5jbHVkZXMocXVlcnlDYWNoZUtleSk7XG4gICAgICAgICAgICBpZiAoIWFscmVhZHlTdWJzY3JpYmVkKSB7XG4gICAgICAgICAgICAgIHN1YnNjcmliZWRRdWVyaWVzLnB1c2gocXVlcnlDYWNoZUtleSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBwcmVwYXJlOiBwcmVwYXJlQXV0b0JhdGNoZWQoKVxuICAgICAgfVxuICAgIH0sXG4gICAgZXh0cmFSZWR1Y2VycyhidWlsZGVyKSB7XG4gICAgICBidWlsZGVyLmFkZENhc2UocXVlcnlTbGljZS5hY3Rpb25zLnJlbW92ZVF1ZXJ5UmVzdWx0LCAoZHJhZnQsIHtcbiAgICAgICAgcGF5bG9hZDoge1xuICAgICAgICAgIHF1ZXJ5Q2FjaGVLZXlcbiAgICAgICAgfVxuICAgICAgfSkgPT4ge1xuICAgICAgICBmb3IgKGNvbnN0IHRhZ1R5cGVTdWJzY3JpcHRpb25zIG9mIE9iamVjdC52YWx1ZXMoZHJhZnQpKSB7XG4gICAgICAgICAgZm9yIChjb25zdCBpZFN1YnNjcmlwdGlvbnMgb2YgT2JqZWN0LnZhbHVlcyh0YWdUeXBlU3Vic2NyaXB0aW9ucykpIHtcbiAgICAgICAgICAgIGNvbnN0IGZvdW5kQXQgPSBpZFN1YnNjcmlwdGlvbnMuaW5kZXhPZihxdWVyeUNhY2hlS2V5KTtcbiAgICAgICAgICAgIGlmIChmb3VuZEF0ICE9PSAtMSkge1xuICAgICAgICAgICAgICBpZFN1YnNjcmlwdGlvbnMuc3BsaWNlKGZvdW5kQXQsIDEpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSkuYWRkTWF0Y2hlcihoYXNSZWh5ZHJhdGlvbkluZm8sIChkcmFmdCwgYWN0aW9uKSA9PiB7XG4gICAgICAgIGNvbnN0IHtcbiAgICAgICAgICBwcm92aWRlZFxuICAgICAgICB9ID0gZXh0cmFjdFJlaHlkcmF0aW9uSW5mbyhhY3Rpb24pO1xuICAgICAgICBmb3IgKGNvbnN0IFt0eXBlLCBpbmNvbWluZ1RhZ3NdIG9mIE9iamVjdC5lbnRyaWVzKHByb3ZpZGVkKSkge1xuICAgICAgICAgIGZvciAoY29uc3QgW2lkLCBjYWNoZUtleXNdIG9mIE9iamVjdC5lbnRyaWVzKGluY29taW5nVGFncykpIHtcbiAgICAgICAgICAgIGNvbnN0IHN1YnNjcmliZWRRdWVyaWVzID0gKGRyYWZ0W3R5cGVdID8/PSB7fSlbaWQgfHwgXCJfX2ludGVybmFsX3dpdGhvdXRfaWRcIl0gPz89IFtdO1xuICAgICAgICAgICAgZm9yIChjb25zdCBxdWVyeUNhY2hlS2V5IG9mIGNhY2hlS2V5cykge1xuICAgICAgICAgICAgICBjb25zdCBhbHJlYWR5U3Vic2NyaWJlZCA9IHN1YnNjcmliZWRRdWVyaWVzLmluY2x1ZGVzKHF1ZXJ5Q2FjaGVLZXkpO1xuICAgICAgICAgICAgICBpZiAoIWFscmVhZHlTdWJzY3JpYmVkKSB7XG4gICAgICAgICAgICAgICAgc3Vic2NyaWJlZFF1ZXJpZXMucHVzaChxdWVyeUNhY2hlS2V5KTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSkuYWRkTWF0Y2hlcihpc0FueU9mKGlzRnVsZmlsbGVkKHF1ZXJ5VGh1bmspLCBpc1JlamVjdGVkV2l0aFZhbHVlKHF1ZXJ5VGh1bmspKSwgKGRyYWZ0LCBhY3Rpb24pID0+IHtcbiAgICAgICAgY29uc3QgcHJvdmlkZWRUYWdzID0gY2FsY3VsYXRlUHJvdmlkZWRCeVRodW5rKGFjdGlvbiwgXCJwcm92aWRlc1RhZ3NcIiwgZGVmaW5pdGlvbnMsIGFzc2VydFRhZ1R5cGUpO1xuICAgICAgICBjb25zdCB7XG4gICAgICAgICAgcXVlcnlDYWNoZUtleVxuICAgICAgICB9ID0gYWN0aW9uLm1ldGEuYXJnO1xuICAgICAgICBpbnZhbGlkYXRpb25TbGljZS5jYXNlUmVkdWNlcnMudXBkYXRlUHJvdmlkZWRCeShkcmFmdCwgaW52YWxpZGF0aW9uU2xpY2UuYWN0aW9ucy51cGRhdGVQcm92aWRlZEJ5KHtcbiAgICAgICAgICBxdWVyeUNhY2hlS2V5LFxuICAgICAgICAgIHByb3ZpZGVkVGFnc1xuICAgICAgICB9KSk7XG4gICAgICB9KTtcbiAgICB9XG4gIH0pO1xuICBjb25zdCBzdWJzY3JpcHRpb25TbGljZSA9IGNyZWF0ZVNsaWNlKHtcbiAgICBuYW1lOiBgJHtyZWR1Y2VyUGF0aH0vc3Vic2NyaXB0aW9uc2AsXG4gICAgaW5pdGlhbFN0YXRlLFxuICAgIHJlZHVjZXJzOiB7XG4gICAgICB1cGRhdGVTdWJzY3JpcHRpb25PcHRpb25zKGQsIGEpIHtcbiAgICAgIH0sXG4gICAgICB1bnN1YnNjcmliZVF1ZXJ5UmVzdWx0KGQsIGEpIHtcbiAgICAgIH0sXG4gICAgICBpbnRlcm5hbF9nZXRSVEtRU3Vic2NyaXB0aW9ucygpIHtcbiAgICAgIH1cbiAgICB9XG4gIH0pO1xuICBjb25zdCBpbnRlcm5hbFN1YnNjcmlwdGlvbnNTbGljZSA9IGNyZWF0ZVNsaWNlKHtcbiAgICBuYW1lOiBgJHtyZWR1Y2VyUGF0aH0vaW50ZXJuYWxTdWJzY3JpcHRpb25zYCxcbiAgICBpbml0aWFsU3RhdGUsXG4gICAgcmVkdWNlcnM6IHtcbiAgICAgIHN1YnNjcmlwdGlvbnNVcGRhdGVkOiB7XG4gICAgICAgIHJlZHVjZXIoc3RhdGUsIGFjdGlvbikge1xuICAgICAgICAgIHJldHVybiBhcHBseVBhdGNoZXMoc3RhdGUsIGFjdGlvbi5wYXlsb2FkKTtcbiAgICAgICAgfSxcbiAgICAgICAgcHJlcGFyZTogcHJlcGFyZUF1dG9CYXRjaGVkKClcbiAgICAgIH1cbiAgICB9XG4gIH0pO1xuICBjb25zdCBjb25maWdTbGljZSA9IGNyZWF0ZVNsaWNlKHtcbiAgICBuYW1lOiBgJHtyZWR1Y2VyUGF0aH0vY29uZmlnYCxcbiAgICBpbml0aWFsU3RhdGU6IHtcbiAgICAgIG9ubGluZTogaXNPbmxpbmUoKSxcbiAgICAgIGZvY3VzZWQ6IGlzRG9jdW1lbnRWaXNpYmxlKCksXG4gICAgICBtaWRkbGV3YXJlUmVnaXN0ZXJlZDogZmFsc2UsXG4gICAgICAuLi5jb25maWdcbiAgICB9LFxuICAgIHJlZHVjZXJzOiB7XG4gICAgICBtaWRkbGV3YXJlUmVnaXN0ZXJlZChzdGF0ZSwge1xuICAgICAgICBwYXlsb2FkXG4gICAgICB9KSB7XG4gICAgICAgIHN0YXRlLm1pZGRsZXdhcmVSZWdpc3RlcmVkID0gc3RhdGUubWlkZGxld2FyZVJlZ2lzdGVyZWQgPT09IFwiY29uZmxpY3RcIiB8fCBhcGlVaWQgIT09IHBheWxvYWQgPyBcImNvbmZsaWN0XCIgOiB0cnVlO1xuICAgICAgfVxuICAgIH0sXG4gICAgZXh0cmFSZWR1Y2VyczogKGJ1aWxkZXIpID0+IHtcbiAgICAgIGJ1aWxkZXIuYWRkQ2FzZShvbk9ubGluZSwgKHN0YXRlKSA9PiB7XG4gICAgICAgIHN0YXRlLm9ubGluZSA9IHRydWU7XG4gICAgICB9KS5hZGRDYXNlKG9uT2ZmbGluZSwgKHN0YXRlKSA9PiB7XG4gICAgICAgIHN0YXRlLm9ubGluZSA9IGZhbHNlO1xuICAgICAgfSkuYWRkQ2FzZShvbkZvY3VzLCAoc3RhdGUpID0+IHtcbiAgICAgICAgc3RhdGUuZm9jdXNlZCA9IHRydWU7XG4gICAgICB9KS5hZGRDYXNlKG9uRm9jdXNMb3N0LCAoc3RhdGUpID0+IHtcbiAgICAgICAgc3RhdGUuZm9jdXNlZCA9IGZhbHNlO1xuICAgICAgfSkuYWRkTWF0Y2hlcihoYXNSZWh5ZHJhdGlvbkluZm8sIChkcmFmdCkgPT4gKHtcbiAgICAgICAgLi4uZHJhZnRcbiAgICAgIH0pKTtcbiAgICB9XG4gIH0pO1xuICBjb25zdCBjb21iaW5lZFJlZHVjZXIgPSBjb21iaW5lUmVkdWNlcnMoe1xuICAgIHF1ZXJpZXM6IHF1ZXJ5U2xpY2UucmVkdWNlcixcbiAgICBtdXRhdGlvbnM6IG11dGF0aW9uU2xpY2UucmVkdWNlcixcbiAgICBwcm92aWRlZDogaW52YWxpZGF0aW9uU2xpY2UucmVkdWNlcixcbiAgICBzdWJzY3JpcHRpb25zOiBpbnRlcm5hbFN1YnNjcmlwdGlvbnNTbGljZS5yZWR1Y2VyLFxuICAgIGNvbmZpZzogY29uZmlnU2xpY2UucmVkdWNlclxuICB9KTtcbiAgY29uc3QgcmVkdWNlciA9IChzdGF0ZSwgYWN0aW9uKSA9PiBjb21iaW5lZFJlZHVjZXIocmVzZXRBcGlTdGF0ZS5tYXRjaChhY3Rpb24pID8gdm9pZCAwIDogc3RhdGUsIGFjdGlvbik7XG4gIGNvbnN0IGFjdGlvbnMgPSB7XG4gICAgLi4uY29uZmlnU2xpY2UuYWN0aW9ucyxcbiAgICAuLi5xdWVyeVNsaWNlLmFjdGlvbnMsXG4gICAgLi4uc3Vic2NyaXB0aW9uU2xpY2UuYWN0aW9ucyxcbiAgICAuLi5pbnRlcm5hbFN1YnNjcmlwdGlvbnNTbGljZS5hY3Rpb25zLFxuICAgIC4uLm11dGF0aW9uU2xpY2UuYWN0aW9ucyxcbiAgICAuLi5pbnZhbGlkYXRpb25TbGljZS5hY3Rpb25zLFxuICAgIHJlc2V0QXBpU3RhdGVcbiAgfTtcbiAgcmV0dXJuIHtcbiAgICByZWR1Y2VyLFxuICAgIGFjdGlvbnNcbiAgfTtcbn1cblxuLy8gc3JjL3F1ZXJ5L2NvcmUvYnVpbGRTZWxlY3RvcnMudHNcbnZhciBza2lwVG9rZW4gPSAvKiBAX19QVVJFX18gKi8gU3ltYm9sLmZvcihcIlJUS1Evc2tpcFRva2VuXCIpO1xudmFyIGluaXRpYWxTdWJTdGF0ZSA9IHtcbiAgc3RhdHVzOiBcInVuaW5pdGlhbGl6ZWRcIiAvKiB1bmluaXRpYWxpemVkICovXG59O1xudmFyIGRlZmF1bHRRdWVyeVN1YlN0YXRlID0gLyogQF9fUFVSRV9fICovIGNyZWF0ZU5leHRTdGF0ZShpbml0aWFsU3ViU3RhdGUsICgpID0+IHtcbn0pO1xudmFyIGRlZmF1bHRNdXRhdGlvblN1YlN0YXRlID0gLyogQF9fUFVSRV9fICovIGNyZWF0ZU5leHRTdGF0ZShpbml0aWFsU3ViU3RhdGUsICgpID0+IHtcbn0pO1xuZnVuY3Rpb24gYnVpbGRTZWxlY3RvcnMoe1xuICBzZXJpYWxpemVRdWVyeUFyZ3MsXG4gIHJlZHVjZXJQYXRoLFxuICBjcmVhdGVTZWxlY3RvcjogY3JlYXRlU2VsZWN0b3IyXG59KSB7XG4gIGNvbnN0IHNlbGVjdFNraXBwZWRRdWVyeSA9IChzdGF0ZSkgPT4gZGVmYXVsdFF1ZXJ5U3ViU3RhdGU7XG4gIGNvbnN0IHNlbGVjdFNraXBwZWRNdXRhdGlvbiA9IChzdGF0ZSkgPT4gZGVmYXVsdE11dGF0aW9uU3ViU3RhdGU7XG4gIHJldHVybiB7XG4gICAgYnVpbGRRdWVyeVNlbGVjdG9yLFxuICAgIGJ1aWxkSW5maW5pdGVRdWVyeVNlbGVjdG9yLFxuICAgIGJ1aWxkTXV0YXRpb25TZWxlY3RvcixcbiAgICBzZWxlY3RJbnZhbGlkYXRlZEJ5LFxuICAgIHNlbGVjdENhY2hlZEFyZ3NGb3JRdWVyeSxcbiAgICBzZWxlY3RBcGlTdGF0ZSxcbiAgICBzZWxlY3RRdWVyaWVzLFxuICAgIHNlbGVjdE11dGF0aW9ucyxcbiAgICBzZWxlY3RRdWVyeUVudHJ5LFxuICAgIHNlbGVjdENvbmZpZ1xuICB9O1xuICBmdW5jdGlvbiB3aXRoUmVxdWVzdEZsYWdzKHN1YnN0YXRlKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIC4uLnN1YnN0YXRlLFxuICAgICAgLi4uZ2V0UmVxdWVzdFN0YXR1c0ZsYWdzKHN1YnN0YXRlLnN0YXR1cylcbiAgICB9O1xuICB9XG4gIGZ1bmN0aW9uIHNlbGVjdEFwaVN0YXRlKHJvb3RTdGF0ZSkge1xuICAgIGNvbnN0IHN0YXRlID0gcm9vdFN0YXRlW3JlZHVjZXJQYXRoXTtcbiAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiKSB7XG4gICAgICBpZiAoIXN0YXRlKSB7XG4gICAgICAgIGlmIChzZWxlY3RBcGlTdGF0ZS50cmlnZ2VyZWQpIHJldHVybiBzdGF0ZTtcbiAgICAgICAgc2VsZWN0QXBpU3RhdGUudHJpZ2dlcmVkID0gdHJ1ZTtcbiAgICAgICAgY29uc29sZS5lcnJvcihgRXJyb3I6IE5vIGRhdGEgZm91bmQgYXQgXFxgc3RhdGUuJHtyZWR1Y2VyUGF0aH1cXGAuIERpZCB5b3UgZm9yZ2V0IHRvIGFkZCB0aGUgcmVkdWNlciB0byB0aGUgc3RvcmU/YCk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuICBmdW5jdGlvbiBzZWxlY3RRdWVyaWVzKHJvb3RTdGF0ZSkge1xuICAgIHJldHVybiBzZWxlY3RBcGlTdGF0ZShyb290U3RhdGUpPy5xdWVyaWVzO1xuICB9XG4gIGZ1bmN0aW9uIHNlbGVjdFF1ZXJ5RW50cnkocm9vdFN0YXRlLCBjYWNoZUtleSkge1xuICAgIHJldHVybiBzZWxlY3RRdWVyaWVzKHJvb3RTdGF0ZSk/LltjYWNoZUtleV07XG4gIH1cbiAgZnVuY3Rpb24gc2VsZWN0TXV0YXRpb25zKHJvb3RTdGF0ZSkge1xuICAgIHJldHVybiBzZWxlY3RBcGlTdGF0ZShyb290U3RhdGUpPy5tdXRhdGlvbnM7XG4gIH1cbiAgZnVuY3Rpb24gc2VsZWN0Q29uZmlnKHJvb3RTdGF0ZSkge1xuICAgIHJldHVybiBzZWxlY3RBcGlTdGF0ZShyb290U3RhdGUpPy5jb25maWc7XG4gIH1cbiAgZnVuY3Rpb24gYnVpbGRBbnlRdWVyeVNlbGVjdG9yKGVuZHBvaW50TmFtZSwgZW5kcG9pbnREZWZpbml0aW9uLCBjb21iaW5lcikge1xuICAgIHJldHVybiAocXVlcnlBcmdzKSA9PiB7XG4gICAgICBpZiAocXVlcnlBcmdzID09PSBza2lwVG9rZW4pIHtcbiAgICAgICAgcmV0dXJuIGNyZWF0ZVNlbGVjdG9yMihzZWxlY3RTa2lwcGVkUXVlcnksIGNvbWJpbmVyKTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IHNlcmlhbGl6ZWRBcmdzID0gc2VyaWFsaXplUXVlcnlBcmdzKHtcbiAgICAgICAgcXVlcnlBcmdzLFxuICAgICAgICBlbmRwb2ludERlZmluaXRpb24sXG4gICAgICAgIGVuZHBvaW50TmFtZVxuICAgICAgfSk7XG4gICAgICBjb25zdCBzZWxlY3RRdWVyeVN1YnN0YXRlID0gKHN0YXRlKSA9PiBzZWxlY3RRdWVyeUVudHJ5KHN0YXRlLCBzZXJpYWxpemVkQXJncykgPz8gZGVmYXVsdFF1ZXJ5U3ViU3RhdGU7XG4gICAgICByZXR1cm4gY3JlYXRlU2VsZWN0b3IyKHNlbGVjdFF1ZXJ5U3Vic3RhdGUsIGNvbWJpbmVyKTtcbiAgICB9O1xuICB9XG4gIGZ1bmN0aW9uIGJ1aWxkUXVlcnlTZWxlY3RvcihlbmRwb2ludE5hbWUsIGVuZHBvaW50RGVmaW5pdGlvbikge1xuICAgIHJldHVybiBidWlsZEFueVF1ZXJ5U2VsZWN0b3IoZW5kcG9pbnROYW1lLCBlbmRwb2ludERlZmluaXRpb24sIHdpdGhSZXF1ZXN0RmxhZ3MpO1xuICB9XG4gIGZ1bmN0aW9uIGJ1aWxkSW5maW5pdGVRdWVyeVNlbGVjdG9yKGVuZHBvaW50TmFtZSwgZW5kcG9pbnREZWZpbml0aW9uKSB7XG4gICAgY29uc3Qge1xuICAgICAgaW5maW5pdGVRdWVyeU9wdGlvbnNcbiAgICB9ID0gZW5kcG9pbnREZWZpbml0aW9uO1xuICAgIGZ1bmN0aW9uIHdpdGhJbmZpbml0ZVF1ZXJ5UmVzdWx0RmxhZ3Moc3Vic3RhdGUpIHtcbiAgICAgIGNvbnN0IHN0YXRlV2l0aFJlcXVlc3RGbGFncyA9IHtcbiAgICAgICAgLi4uc3Vic3RhdGUsXG4gICAgICAgIC4uLmdldFJlcXVlc3RTdGF0dXNGbGFncyhzdWJzdGF0ZS5zdGF0dXMpXG4gICAgICB9O1xuICAgICAgY29uc3Qge1xuICAgICAgICBpc0xvYWRpbmcsXG4gICAgICAgIGlzRXJyb3IsXG4gICAgICAgIGRpcmVjdGlvblxuICAgICAgfSA9IHN0YXRlV2l0aFJlcXVlc3RGbGFncztcbiAgICAgIGNvbnN0IGlzRm9yd2FyZCA9IGRpcmVjdGlvbiA9PT0gXCJmb3J3YXJkXCI7XG4gICAgICBjb25zdCBpc0JhY2t3YXJkID0gZGlyZWN0aW9uID09PSBcImJhY2t3YXJkXCI7XG4gICAgICByZXR1cm4ge1xuICAgICAgICAuLi5zdGF0ZVdpdGhSZXF1ZXN0RmxhZ3MsXG4gICAgICAgIGhhc05leHRQYWdlOiBnZXRIYXNOZXh0UGFnZShpbmZpbml0ZVF1ZXJ5T3B0aW9ucywgc3RhdGVXaXRoUmVxdWVzdEZsYWdzLmRhdGEpLFxuICAgICAgICBoYXNQcmV2aW91c1BhZ2U6IGdldEhhc1ByZXZpb3VzUGFnZShpbmZpbml0ZVF1ZXJ5T3B0aW9ucywgc3RhdGVXaXRoUmVxdWVzdEZsYWdzLmRhdGEpLFxuICAgICAgICBpc0ZldGNoaW5nTmV4dFBhZ2U6IGlzTG9hZGluZyAmJiBpc0ZvcndhcmQsXG4gICAgICAgIGlzRmV0Y2hpbmdQcmV2aW91c1BhZ2U6IGlzTG9hZGluZyAmJiBpc0JhY2t3YXJkLFxuICAgICAgICBpc0ZldGNoTmV4dFBhZ2VFcnJvcjogaXNFcnJvciAmJiBpc0ZvcndhcmQsXG4gICAgICAgIGlzRmV0Y2hQcmV2aW91c1BhZ2VFcnJvcjogaXNFcnJvciAmJiBpc0JhY2t3YXJkXG4gICAgICB9O1xuICAgIH1cbiAgICByZXR1cm4gYnVpbGRBbnlRdWVyeVNlbGVjdG9yKGVuZHBvaW50TmFtZSwgZW5kcG9pbnREZWZpbml0aW9uLCB3aXRoSW5maW5pdGVRdWVyeVJlc3VsdEZsYWdzKTtcbiAgfVxuICBmdW5jdGlvbiBidWlsZE11dGF0aW9uU2VsZWN0b3IoKSB7XG4gICAgcmV0dXJuIChpZCkgPT4ge1xuICAgICAgbGV0IG11dGF0aW9uSWQ7XG4gICAgICBpZiAodHlwZW9mIGlkID09PSBcIm9iamVjdFwiKSB7XG4gICAgICAgIG11dGF0aW9uSWQgPSBnZXRNdXRhdGlvbkNhY2hlS2V5KGlkKSA/PyBza2lwVG9rZW47XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBtdXRhdGlvbklkID0gaWQ7XG4gICAgICB9XG4gICAgICBjb25zdCBzZWxlY3RNdXRhdGlvblN1YnN0YXRlID0gKHN0YXRlKSA9PiBzZWxlY3RBcGlTdGF0ZShzdGF0ZSk/Lm11dGF0aW9ucz8uW211dGF0aW9uSWRdID8/IGRlZmF1bHRNdXRhdGlvblN1YlN0YXRlO1xuICAgICAgY29uc3QgZmluYWxTZWxlY3RNdXRhdGlvblN1YnN0YXRlID0gbXV0YXRpb25JZCA9PT0gc2tpcFRva2VuID8gc2VsZWN0U2tpcHBlZE11dGF0aW9uIDogc2VsZWN0TXV0YXRpb25TdWJzdGF0ZTtcbiAgICAgIHJldHVybiBjcmVhdGVTZWxlY3RvcjIoZmluYWxTZWxlY3RNdXRhdGlvblN1YnN0YXRlLCB3aXRoUmVxdWVzdEZsYWdzKTtcbiAgICB9O1xuICB9XG4gIGZ1bmN0aW9uIHNlbGVjdEludmFsaWRhdGVkQnkoc3RhdGUsIHRhZ3MpIHtcbiAgICBjb25zdCBhcGlTdGF0ZSA9IHN0YXRlW3JlZHVjZXJQYXRoXTtcbiAgICBjb25zdCB0b0ludmFsaWRhdGUgPSAvKiBAX19QVVJFX18gKi8gbmV3IFNldCgpO1xuICAgIGZvciAoY29uc3QgdGFnIG9mIHRhZ3MuZmlsdGVyKGlzTm90TnVsbGlzaCkubWFwKGV4cGFuZFRhZ0Rlc2NyaXB0aW9uKSkge1xuICAgICAgY29uc3QgcHJvdmlkZWQgPSBhcGlTdGF0ZS5wcm92aWRlZFt0YWcudHlwZV07XG4gICAgICBpZiAoIXByb3ZpZGVkKSB7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuICAgICAgbGV0IGludmFsaWRhdGVTdWJzY3JpcHRpb25zID0gKHRhZy5pZCAhPT0gdm9pZCAwID8gKFxuICAgICAgICAvLyBpZCBnaXZlbjogaW52YWxpZGF0ZSBhbGwgcXVlcmllcyB0aGF0IHByb3ZpZGUgdGhpcyB0eXBlICYgaWRcbiAgICAgICAgcHJvdmlkZWRbdGFnLmlkXVxuICAgICAgKSA6IChcbiAgICAgICAgLy8gbm8gaWQ6IGludmFsaWRhdGUgYWxsIHF1ZXJpZXMgdGhhdCBwcm92aWRlIHRoaXMgdHlwZVxuICAgICAgICBmbGF0dGVuKE9iamVjdC52YWx1ZXMocHJvdmlkZWQpKVxuICAgICAgKSkgPz8gW107XG4gICAgICBmb3IgKGNvbnN0IGludmFsaWRhdGUgb2YgaW52YWxpZGF0ZVN1YnNjcmlwdGlvbnMpIHtcbiAgICAgICAgdG9JbnZhbGlkYXRlLmFkZChpbnZhbGlkYXRlKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGZsYXR0ZW4oQXJyYXkuZnJvbSh0b0ludmFsaWRhdGUudmFsdWVzKCkpLm1hcCgocXVlcnlDYWNoZUtleSkgPT4ge1xuICAgICAgY29uc3QgcXVlcnlTdWJTdGF0ZSA9IGFwaVN0YXRlLnF1ZXJpZXNbcXVlcnlDYWNoZUtleV07XG4gICAgICByZXR1cm4gcXVlcnlTdWJTdGF0ZSA/IFt7XG4gICAgICAgIHF1ZXJ5Q2FjaGVLZXksXG4gICAgICAgIGVuZHBvaW50TmFtZTogcXVlcnlTdWJTdGF0ZS5lbmRwb2ludE5hbWUsXG4gICAgICAgIG9yaWdpbmFsQXJnczogcXVlcnlTdWJTdGF0ZS5vcmlnaW5hbEFyZ3NcbiAgICAgIH1dIDogW107XG4gICAgfSkpO1xuICB9XG4gIGZ1bmN0aW9uIHNlbGVjdENhY2hlZEFyZ3NGb3JRdWVyeShzdGF0ZSwgcXVlcnlOYW1lKSB7XG4gICAgcmV0dXJuIE9iamVjdC52YWx1ZXMoc2VsZWN0UXVlcmllcyhzdGF0ZSkpLmZpbHRlcigoZW50cnkpID0+IGVudHJ5Py5lbmRwb2ludE5hbWUgPT09IHF1ZXJ5TmFtZSAmJiBlbnRyeS5zdGF0dXMgIT09IFwidW5pbml0aWFsaXplZFwiIC8qIHVuaW5pdGlhbGl6ZWQgKi8pLm1hcCgoZW50cnkpID0+IGVudHJ5Lm9yaWdpbmFsQXJncyk7XG4gIH1cbiAgZnVuY3Rpb24gZ2V0SGFzTmV4dFBhZ2Uob3B0aW9ucywgZGF0YSkge1xuICAgIGlmICghZGF0YSkgcmV0dXJuIGZhbHNlO1xuICAgIHJldHVybiBnZXROZXh0UGFnZVBhcmFtKG9wdGlvbnMsIGRhdGEpICE9IG51bGw7XG4gIH1cbiAgZnVuY3Rpb24gZ2V0SGFzUHJldmlvdXNQYWdlKG9wdGlvbnMsIGRhdGEpIHtcbiAgICBpZiAoIWRhdGEgfHwgIW9wdGlvbnMuZ2V0UHJldmlvdXNQYWdlUGFyYW0pIHJldHVybiBmYWxzZTtcbiAgICByZXR1cm4gZ2V0UHJldmlvdXNQYWdlUGFyYW0ob3B0aW9ucywgZGF0YSkgIT0gbnVsbDtcbiAgfVxufVxuXG4vLyBzcmMvcXVlcnkvY3JlYXRlQXBpLnRzXG5pbXBvcnQgeyBmb3JtYXRQcm9kRXJyb3JNZXNzYWdlIGFzIF9mb3JtYXRQcm9kRXJyb3JNZXNzYWdlMiwgZm9ybWF0UHJvZEVycm9yTWVzc2FnZSBhcyBfZm9ybWF0UHJvZEVycm9yTWVzc2FnZTIyLCBmb3JtYXRQcm9kRXJyb3JNZXNzYWdlIGFzIF9mb3JtYXRQcm9kRXJyb3JNZXNzYWdlMyB9IGZyb20gXCJAcmVkdXhqcy90b29sa2l0XCI7XG5cbi8vIHNyYy9xdWVyeS9kZWZhdWx0U2VyaWFsaXplUXVlcnlBcmdzLnRzXG52YXIgY2FjaGUgPSBXZWFrTWFwID8gLyogQF9fUFVSRV9fICovIG5ldyBXZWFrTWFwKCkgOiB2b2lkIDA7XG52YXIgZGVmYXVsdFNlcmlhbGl6ZVF1ZXJ5QXJncyA9ICh7XG4gIGVuZHBvaW50TmFtZSxcbiAgcXVlcnlBcmdzXG59KSA9PiB7XG4gIGxldCBzZXJpYWxpemVkID0gXCJcIjtcbiAgY29uc3QgY2FjaGVkID0gY2FjaGU/LmdldChxdWVyeUFyZ3MpO1xuICBpZiAodHlwZW9mIGNhY2hlZCA9PT0gXCJzdHJpbmdcIikge1xuICAgIHNlcmlhbGl6ZWQgPSBjYWNoZWQ7XG4gIH0gZWxzZSB7XG4gICAgY29uc3Qgc3RyaW5naWZpZWQgPSBKU09OLnN0cmluZ2lmeShxdWVyeUFyZ3MsIChrZXksIHZhbHVlKSA9PiB7XG4gICAgICB2YWx1ZSA9IHR5cGVvZiB2YWx1ZSA9PT0gXCJiaWdpbnRcIiA/IHtcbiAgICAgICAgJGJpZ2ludDogdmFsdWUudG9TdHJpbmcoKVxuICAgICAgfSA6IHZhbHVlO1xuICAgICAgdmFsdWUgPSBpc1BsYWluT2JqZWN0KHZhbHVlKSA/IE9iamVjdC5rZXlzKHZhbHVlKS5zb3J0KCkucmVkdWNlKChhY2MsIGtleTIpID0+IHtcbiAgICAgICAgYWNjW2tleTJdID0gdmFsdWVba2V5Ml07XG4gICAgICAgIHJldHVybiBhY2M7XG4gICAgICB9LCB7fSkgOiB2YWx1ZTtcbiAgICAgIHJldHVybiB2YWx1ZTtcbiAgICB9KTtcbiAgICBpZiAoaXNQbGFpbk9iamVjdChxdWVyeUFyZ3MpKSB7XG4gICAgICBjYWNoZT8uc2V0KHF1ZXJ5QXJncywgc3RyaW5naWZpZWQpO1xuICAgIH1cbiAgICBzZXJpYWxpemVkID0gc3RyaW5naWZpZWQ7XG4gIH1cbiAgcmV0dXJuIGAke2VuZHBvaW50TmFtZX0oJHtzZXJpYWxpemVkfSlgO1xufTtcblxuLy8gc3JjL3F1ZXJ5L2NyZWF0ZUFwaS50c1xuaW1wb3J0IHsgd2Vha01hcE1lbW9pemUgfSBmcm9tIFwicmVzZWxlY3RcIjtcbmZ1bmN0aW9uIGJ1aWxkQ3JlYXRlQXBpKC4uLm1vZHVsZXMpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIGJhc2VDcmVhdGVBcGkob3B0aW9ucykge1xuICAgIGNvbnN0IGV4dHJhY3RSZWh5ZHJhdGlvbkluZm8gPSB3ZWFrTWFwTWVtb2l6ZSgoYWN0aW9uKSA9PiBvcHRpb25zLmV4dHJhY3RSZWh5ZHJhdGlvbkluZm8/LihhY3Rpb24sIHtcbiAgICAgIHJlZHVjZXJQYXRoOiBvcHRpb25zLnJlZHVjZXJQYXRoID8/IFwiYXBpXCJcbiAgICB9KSk7XG4gICAgY29uc3Qgb3B0aW9uc1dpdGhEZWZhdWx0cyA9IHtcbiAgICAgIHJlZHVjZXJQYXRoOiBcImFwaVwiLFxuICAgICAga2VlcFVudXNlZERhdGFGb3I6IDYwLFxuICAgICAgcmVmZXRjaE9uTW91bnRPckFyZ0NoYW5nZTogZmFsc2UsXG4gICAgICByZWZldGNoT25Gb2N1czogZmFsc2UsXG4gICAgICByZWZldGNoT25SZWNvbm5lY3Q6IGZhbHNlLFxuICAgICAgaW52YWxpZGF0aW9uQmVoYXZpb3I6IFwiZGVsYXllZFwiLFxuICAgICAgLi4ub3B0aW9ucyxcbiAgICAgIGV4dHJhY3RSZWh5ZHJhdGlvbkluZm8sXG4gICAgICBzZXJpYWxpemVRdWVyeUFyZ3MocXVlcnlBcmdzQXBpKSB7XG4gICAgICAgIGxldCBmaW5hbFNlcmlhbGl6ZVF1ZXJ5QXJncyA9IGRlZmF1bHRTZXJpYWxpemVRdWVyeUFyZ3M7XG4gICAgICAgIGlmIChcInNlcmlhbGl6ZVF1ZXJ5QXJnc1wiIGluIHF1ZXJ5QXJnc0FwaS5lbmRwb2ludERlZmluaXRpb24pIHtcbiAgICAgICAgICBjb25zdCBlbmRwb2ludFNRQSA9IHF1ZXJ5QXJnc0FwaS5lbmRwb2ludERlZmluaXRpb24uc2VyaWFsaXplUXVlcnlBcmdzO1xuICAgICAgICAgIGZpbmFsU2VyaWFsaXplUXVlcnlBcmdzID0gKHF1ZXJ5QXJnc0FwaTIpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGluaXRpYWxSZXN1bHQgPSBlbmRwb2ludFNRQShxdWVyeUFyZ3NBcGkyKTtcbiAgICAgICAgICAgIGlmICh0eXBlb2YgaW5pdGlhbFJlc3VsdCA9PT0gXCJzdHJpbmdcIikge1xuICAgICAgICAgICAgICByZXR1cm4gaW5pdGlhbFJlc3VsdDtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIHJldHVybiBkZWZhdWx0U2VyaWFsaXplUXVlcnlBcmdzKHtcbiAgICAgICAgICAgICAgICAuLi5xdWVyeUFyZ3NBcGkyLFxuICAgICAgICAgICAgICAgIHF1ZXJ5QXJnczogaW5pdGlhbFJlc3VsdFxuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9O1xuICAgICAgICB9IGVsc2UgaWYgKG9wdGlvbnMuc2VyaWFsaXplUXVlcnlBcmdzKSB7XG4gICAgICAgICAgZmluYWxTZXJpYWxpemVRdWVyeUFyZ3MgPSBvcHRpb25zLnNlcmlhbGl6ZVF1ZXJ5QXJncztcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZmluYWxTZXJpYWxpemVRdWVyeUFyZ3MocXVlcnlBcmdzQXBpKTtcbiAgICAgIH0sXG4gICAgICB0YWdUeXBlczogWy4uLm9wdGlvbnMudGFnVHlwZXMgfHwgW11dXG4gICAgfTtcbiAgICBjb25zdCBjb250ZXh0ID0ge1xuICAgICAgZW5kcG9pbnREZWZpbml0aW9uczoge30sXG4gICAgICBiYXRjaChmbikge1xuICAgICAgICBmbigpO1xuICAgICAgfSxcbiAgICAgIGFwaVVpZDogbmFub2lkKCksXG4gICAgICBleHRyYWN0UmVoeWRyYXRpb25JbmZvLFxuICAgICAgaGFzUmVoeWRyYXRpb25JbmZvOiB3ZWFrTWFwTWVtb2l6ZSgoYWN0aW9uKSA9PiBleHRyYWN0UmVoeWRyYXRpb25JbmZvKGFjdGlvbikgIT0gbnVsbClcbiAgICB9O1xuICAgIGNvbnN0IGFwaSA9IHtcbiAgICAgIGluamVjdEVuZHBvaW50cyxcbiAgICAgIGVuaGFuY2VFbmRwb2ludHMoe1xuICAgICAgICBhZGRUYWdUeXBlcyxcbiAgICAgICAgZW5kcG9pbnRzXG4gICAgICB9KSB7XG4gICAgICAgIGlmIChhZGRUYWdUeXBlcykge1xuICAgICAgICAgIGZvciAoY29uc3QgZVQgb2YgYWRkVGFnVHlwZXMpIHtcbiAgICAgICAgICAgIGlmICghb3B0aW9uc1dpdGhEZWZhdWx0cy50YWdUeXBlcy5pbmNsdWRlcyhlVCkpIHtcbiAgICAgICAgICAgICAgO1xuICAgICAgICAgICAgICBvcHRpb25zV2l0aERlZmF1bHRzLnRhZ1R5cGVzLnB1c2goZVQpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAoZW5kcG9pbnRzKSB7XG4gICAgICAgICAgZm9yIChjb25zdCBbZW5kcG9pbnROYW1lLCBwYXJ0aWFsRGVmaW5pdGlvbl0gb2YgT2JqZWN0LmVudHJpZXMoZW5kcG9pbnRzKSkge1xuICAgICAgICAgICAgaWYgKHR5cGVvZiBwYXJ0aWFsRGVmaW5pdGlvbiA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICAgICAgICAgIHBhcnRpYWxEZWZpbml0aW9uKGNvbnRleHQuZW5kcG9pbnREZWZpbml0aW9uc1tlbmRwb2ludE5hbWVdKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIE9iamVjdC5hc3NpZ24oY29udGV4dC5lbmRwb2ludERlZmluaXRpb25zW2VuZHBvaW50TmFtZV0gfHwge30sIHBhcnRpYWxEZWZpbml0aW9uKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGFwaTtcbiAgICAgIH1cbiAgICB9O1xuICAgIGNvbnN0IGluaXRpYWxpemVkTW9kdWxlcyA9IG1vZHVsZXMubWFwKChtKSA9PiBtLmluaXQoYXBpLCBvcHRpb25zV2l0aERlZmF1bHRzLCBjb250ZXh0KSk7XG4gICAgZnVuY3Rpb24gaW5qZWN0RW5kcG9pbnRzKGluamVjdCkge1xuICAgICAgY29uc3QgZXZhbHVhdGVkRW5kcG9pbnRzID0gaW5qZWN0LmVuZHBvaW50cyh7XG4gICAgICAgIHF1ZXJ5OiAoeCkgPT4gKHtcbiAgICAgICAgICAuLi54LFxuICAgICAgICAgIHR5cGU6IFwicXVlcnlcIiAvKiBxdWVyeSAqL1xuICAgICAgICB9KSxcbiAgICAgICAgbXV0YXRpb246ICh4KSA9PiAoe1xuICAgICAgICAgIC4uLngsXG4gICAgICAgICAgdHlwZTogXCJtdXRhdGlvblwiIC8qIG11dGF0aW9uICovXG4gICAgICAgIH0pLFxuICAgICAgICBpbmZpbml0ZVF1ZXJ5OiAoeCkgPT4gKHtcbiAgICAgICAgICAuLi54LFxuICAgICAgICAgIHR5cGU6IFwiaW5maW5pdGVxdWVyeVwiIC8qIGluZmluaXRlcXVlcnkgKi9cbiAgICAgICAgfSlcbiAgICAgIH0pO1xuICAgICAgZm9yIChjb25zdCBbZW5kcG9pbnROYW1lLCBkZWZpbml0aW9uXSBvZiBPYmplY3QuZW50cmllcyhldmFsdWF0ZWRFbmRwb2ludHMpKSB7XG4gICAgICAgIGlmIChpbmplY3Qub3ZlcnJpZGVFeGlzdGluZyAhPT0gdHJ1ZSAmJiBlbmRwb2ludE5hbWUgaW4gY29udGV4dC5lbmRwb2ludERlZmluaXRpb25zKSB7XG4gICAgICAgICAgaWYgKGluamVjdC5vdmVycmlkZUV4aXN0aW5nID09PSBcInRocm93XCIpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihwcm9jZXNzLmVudi5OT0RFX0VOViA9PT0gXCJwcm9kdWN0aW9uXCIgPyBfZm9ybWF0UHJvZEVycm9yTWVzc2FnZTIoMzkpIDogYGNhbGxlZCBcXGBpbmplY3RFbmRwb2ludHNcXGAgdG8gb3ZlcnJpZGUgYWxyZWFkeS1leGlzdGluZyBlbmRwb2ludE5hbWUgJHtlbmRwb2ludE5hbWV9IHdpdGhvdXQgc3BlY2lmeWluZyBcXGBvdmVycmlkZUV4aXN0aW5nOiB0cnVlXFxgYCk7XG4gICAgICAgICAgfSBlbHNlIGlmICh0eXBlb2YgcHJvY2VzcyAhPT0gXCJ1bmRlZmluZWRcIiAmJiBwcm9jZXNzLmVudi5OT0RFX0VOViA9PT0gXCJkZXZlbG9wbWVudFwiKSB7XG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKGBjYWxsZWQgXFxgaW5qZWN0RW5kcG9pbnRzXFxgIHRvIG92ZXJyaWRlIGFscmVhZHktZXhpc3RpbmcgZW5kcG9pbnROYW1lICR7ZW5kcG9pbnROYW1lfSB3aXRob3V0IHNwZWNpZnlpbmcgXFxgb3ZlcnJpZGVFeGlzdGluZzogdHJ1ZVxcYGApO1xuICAgICAgICAgIH1cbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodHlwZW9mIHByb2Nlc3MgIT09IFwidW5kZWZpbmVkXCIgJiYgcHJvY2Vzcy5lbnYuTk9ERV9FTlYgPT09IFwiZGV2ZWxvcG1lbnRcIikge1xuICAgICAgICAgIGlmIChpc0luZmluaXRlUXVlcnlEZWZpbml0aW9uKGRlZmluaXRpb24pKSB7XG4gICAgICAgICAgICBjb25zdCB7XG4gICAgICAgICAgICAgIGluZmluaXRlUXVlcnlPcHRpb25zXG4gICAgICAgICAgICB9ID0gZGVmaW5pdGlvbjtcbiAgICAgICAgICAgIGNvbnN0IHtcbiAgICAgICAgICAgICAgbWF4UGFnZXMsXG4gICAgICAgICAgICAgIGdldFByZXZpb3VzUGFnZVBhcmFtOiBnZXRQcmV2aW91c1BhZ2VQYXJhbTJcbiAgICAgICAgICAgIH0gPSBpbmZpbml0ZVF1ZXJ5T3B0aW9ucztcbiAgICAgICAgICAgIGlmICh0eXBlb2YgbWF4UGFnZXMgPT09IFwibnVtYmVyXCIpIHtcbiAgICAgICAgICAgICAgaWYgKG1heFBhZ2VzIDwgMSkge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihwcm9jZXNzLmVudi5OT0RFX0VOViA9PT0gXCJwcm9kdWN0aW9uXCIgPyBfZm9ybWF0UHJvZEVycm9yTWVzc2FnZTIyKDQwKSA6IGBtYXhQYWdlcyBmb3IgZW5kcG9pbnQgJyR7ZW5kcG9pbnROYW1lfScgbXVzdCBiZSBhIG51bWJlciBncmVhdGVyIHRoYW4gMGApO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGlmICh0eXBlb2YgZ2V0UHJldmlvdXNQYWdlUGFyYW0yICE9PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IocHJvY2Vzcy5lbnYuTk9ERV9FTlYgPT09IFwicHJvZHVjdGlvblwiID8gX2Zvcm1hdFByb2RFcnJvck1lc3NhZ2UzKDQxKSA6IGBnZXRQcmV2aW91c1BhZ2VQYXJhbSBmb3IgZW5kcG9pbnQgJyR7ZW5kcG9pbnROYW1lfScgbXVzdCBiZSBhIGZ1bmN0aW9uIGlmIG1heFBhZ2VzIGlzIHVzZWRgKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBjb250ZXh0LmVuZHBvaW50RGVmaW5pdGlvbnNbZW5kcG9pbnROYW1lXSA9IGRlZmluaXRpb247XG4gICAgICAgIGZvciAoY29uc3QgbSBvZiBpbml0aWFsaXplZE1vZHVsZXMpIHtcbiAgICAgICAgICBtLmluamVjdEVuZHBvaW50KGVuZHBvaW50TmFtZSwgZGVmaW5pdGlvbik7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiBhcGk7XG4gICAgfVxuICAgIHJldHVybiBhcGkuaW5qZWN0RW5kcG9pbnRzKHtcbiAgICAgIGVuZHBvaW50czogb3B0aW9ucy5lbmRwb2ludHNcbiAgICB9KTtcbiAgfTtcbn1cblxuLy8gc3JjL3F1ZXJ5L2Zha2VCYXNlUXVlcnkudHNcbmltcG9ydCB7IGZvcm1hdFByb2RFcnJvck1lc3NhZ2UgYXMgX2Zvcm1hdFByb2RFcnJvck1lc3NhZ2U0IH0gZnJvbSBcIkByZWR1eGpzL3Rvb2xraXRcIjtcbnZhciBfTkVWRVIgPSAvKiBAX19QVVJFX18gKi8gU3ltYm9sKCk7XG5mdW5jdGlvbiBmYWtlQmFzZVF1ZXJ5KCkge1xuICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKHByb2Nlc3MuZW52Lk5PREVfRU5WID09PSBcInByb2R1Y3Rpb25cIiA/IF9mb3JtYXRQcm9kRXJyb3JNZXNzYWdlNCgzMykgOiBcIldoZW4gdXNpbmcgYGZha2VCYXNlUXVlcnlgLCBhbGwgcXVlcmllcyAmIG11dGF0aW9ucyBtdXN0IHVzZSB0aGUgYHF1ZXJ5Rm5gIGRlZmluaXRpb24gc3ludGF4LlwiKTtcbiAgfTtcbn1cblxuLy8gc3JjL3F1ZXJ5L2NvcmUvbW9kdWxlLnRzXG5pbXBvcnQgeyBlbmFibGVQYXRjaGVzIH0gZnJvbSBcImltbWVyXCI7XG5cbi8vIHNyYy9xdWVyeS90c0hlbHBlcnMudHNcbmZ1bmN0aW9uIGFzc2VydENhc3Qodikge1xufVxuZnVuY3Rpb24gc2FmZUFzc2lnbih0YXJnZXQsIC4uLmFyZ3MpIHtcbiAgcmV0dXJuIE9iamVjdC5hc3NpZ24odGFyZ2V0LCAuLi5hcmdzKTtcbn1cblxuLy8gc3JjL3F1ZXJ5L2NvcmUvYnVpbGRNaWRkbGV3YXJlL2JhdGNoQWN0aW9ucy50c1xuaW1wb3J0IHsgcHJvZHVjZVdpdGhQYXRjaGVzIGFzIHByb2R1Y2VXaXRoUGF0Y2hlczIgfSBmcm9tIFwiaW1tZXJcIjtcbnZhciBidWlsZEJhdGNoZWRBY3Rpb25zSGFuZGxlciA9ICh7XG4gIGFwaSxcbiAgcXVlcnlUaHVuayxcbiAgaW50ZXJuYWxTdGF0ZVxufSkgPT4ge1xuICBjb25zdCBzdWJzY3JpcHRpb25zUHJlZml4ID0gYCR7YXBpLnJlZHVjZXJQYXRofS9zdWJzY3JpcHRpb25zYDtcbiAgbGV0IHByZXZpb3VzU3Vic2NyaXB0aW9ucyA9IG51bGw7XG4gIGxldCB1cGRhdGVTeW5jVGltZXIgPSBudWxsO1xuICBjb25zdCB7XG4gICAgdXBkYXRlU3Vic2NyaXB0aW9uT3B0aW9ucyxcbiAgICB1bnN1YnNjcmliZVF1ZXJ5UmVzdWx0XG4gIH0gPSBhcGkuaW50ZXJuYWxBY3Rpb25zO1xuICBjb25zdCBhY3R1YWxseU11dGF0ZVN1YnNjcmlwdGlvbnMgPSAobXV0YWJsZVN0YXRlLCBhY3Rpb24pID0+IHtcbiAgICBpZiAodXBkYXRlU3Vic2NyaXB0aW9uT3B0aW9ucy5tYXRjaChhY3Rpb24pKSB7XG4gICAgICBjb25zdCB7XG4gICAgICAgIHF1ZXJ5Q2FjaGVLZXksXG4gICAgICAgIHJlcXVlc3RJZCxcbiAgICAgICAgb3B0aW9uc1xuICAgICAgfSA9IGFjdGlvbi5wYXlsb2FkO1xuICAgICAgaWYgKG11dGFibGVTdGF0ZT8uW3F1ZXJ5Q2FjaGVLZXldPy5bcmVxdWVzdElkXSkge1xuICAgICAgICBtdXRhYmxlU3RhdGVbcXVlcnlDYWNoZUtleV1bcmVxdWVzdElkXSA9IG9wdGlvbnM7XG4gICAgICB9XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgaWYgKHVuc3Vic2NyaWJlUXVlcnlSZXN1bHQubWF0Y2goYWN0aW9uKSkge1xuICAgICAgY29uc3Qge1xuICAgICAgICBxdWVyeUNhY2hlS2V5LFxuICAgICAgICByZXF1ZXN0SWRcbiAgICAgIH0gPSBhY3Rpb24ucGF5bG9hZDtcbiAgICAgIGlmIChtdXRhYmxlU3RhdGVbcXVlcnlDYWNoZUtleV0pIHtcbiAgICAgICAgZGVsZXRlIG11dGFibGVTdGF0ZVtxdWVyeUNhY2hlS2V5XVtyZXF1ZXN0SWRdO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIGlmIChhcGkuaW50ZXJuYWxBY3Rpb25zLnJlbW92ZVF1ZXJ5UmVzdWx0Lm1hdGNoKGFjdGlvbikpIHtcbiAgICAgIGRlbGV0ZSBtdXRhYmxlU3RhdGVbYWN0aW9uLnBheWxvYWQucXVlcnlDYWNoZUtleV07XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgaWYgKHF1ZXJ5VGh1bmsucGVuZGluZy5tYXRjaChhY3Rpb24pKSB7XG4gICAgICBjb25zdCB7XG4gICAgICAgIG1ldGE6IHtcbiAgICAgICAgICBhcmcsXG4gICAgICAgICAgcmVxdWVzdElkXG4gICAgICAgIH1cbiAgICAgIH0gPSBhY3Rpb247XG4gICAgICBjb25zdCBzdWJzdGF0ZSA9IG11dGFibGVTdGF0ZVthcmcucXVlcnlDYWNoZUtleV0gPz89IHt9O1xuICAgICAgc3Vic3RhdGVbYCR7cmVxdWVzdElkfV9ydW5uaW5nYF0gPSB7fTtcbiAgICAgIGlmIChhcmcuc3Vic2NyaWJlKSB7XG4gICAgICAgIHN1YnN0YXRlW3JlcXVlc3RJZF0gPSBhcmcuc3Vic2NyaXB0aW9uT3B0aW9ucyA/PyBzdWJzdGF0ZVtyZXF1ZXN0SWRdID8/IHt9O1xuICAgICAgfVxuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIGxldCBtdXRhdGVkID0gZmFsc2U7XG4gICAgaWYgKHF1ZXJ5VGh1bmsuZnVsZmlsbGVkLm1hdGNoKGFjdGlvbikgfHwgcXVlcnlUaHVuay5yZWplY3RlZC5tYXRjaChhY3Rpb24pKSB7XG4gICAgICBjb25zdCBzdGF0ZSA9IG11dGFibGVTdGF0ZVthY3Rpb24ubWV0YS5hcmcucXVlcnlDYWNoZUtleV0gfHwge307XG4gICAgICBjb25zdCBrZXkgPSBgJHthY3Rpb24ubWV0YS5yZXF1ZXN0SWR9X3J1bm5pbmdgO1xuICAgICAgbXV0YXRlZCB8fD0gISFzdGF0ZVtrZXldO1xuICAgICAgZGVsZXRlIHN0YXRlW2tleV07XG4gICAgfVxuICAgIGlmIChxdWVyeVRodW5rLnJlamVjdGVkLm1hdGNoKGFjdGlvbikpIHtcbiAgICAgIGNvbnN0IHtcbiAgICAgICAgbWV0YToge1xuICAgICAgICAgIGNvbmRpdGlvbixcbiAgICAgICAgICBhcmcsXG4gICAgICAgICAgcmVxdWVzdElkXG4gICAgICAgIH1cbiAgICAgIH0gPSBhY3Rpb247XG4gICAgICBpZiAoY29uZGl0aW9uICYmIGFyZy5zdWJzY3JpYmUpIHtcbiAgICAgICAgY29uc3Qgc3Vic3RhdGUgPSBtdXRhYmxlU3RhdGVbYXJnLnF1ZXJ5Q2FjaGVLZXldID8/PSB7fTtcbiAgICAgICAgc3Vic3RhdGVbcmVxdWVzdElkXSA9IGFyZy5zdWJzY3JpcHRpb25PcHRpb25zID8/IHN1YnN0YXRlW3JlcXVlc3RJZF0gPz8ge307XG4gICAgICAgIG11dGF0ZWQgPSB0cnVlO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gbXV0YXRlZDtcbiAgfTtcbiAgY29uc3QgZ2V0U3Vic2NyaXB0aW9ucyA9ICgpID0+IGludGVybmFsU3RhdGUuY3VycmVudFN1YnNjcmlwdGlvbnM7XG4gIGNvbnN0IGdldFN1YnNjcmlwdGlvbkNvdW50ID0gKHF1ZXJ5Q2FjaGVLZXkpID0+IHtcbiAgICBjb25zdCBzdWJzY3JpcHRpb25zID0gZ2V0U3Vic2NyaXB0aW9ucygpO1xuICAgIGNvbnN0IHN1YnNjcmlwdGlvbnNGb3JRdWVyeUFyZyA9IHN1YnNjcmlwdGlvbnNbcXVlcnlDYWNoZUtleV0gPz8ge307XG4gICAgcmV0dXJuIGNvdW50T2JqZWN0S2V5cyhzdWJzY3JpcHRpb25zRm9yUXVlcnlBcmcpO1xuICB9O1xuICBjb25zdCBpc1JlcXVlc3RTdWJzY3JpYmVkID0gKHF1ZXJ5Q2FjaGVLZXksIHJlcXVlc3RJZCkgPT4ge1xuICAgIGNvbnN0IHN1YnNjcmlwdGlvbnMgPSBnZXRTdWJzY3JpcHRpb25zKCk7XG4gICAgcmV0dXJuICEhc3Vic2NyaXB0aW9ucz8uW3F1ZXJ5Q2FjaGVLZXldPy5bcmVxdWVzdElkXTtcbiAgfTtcbiAgY29uc3Qgc3Vic2NyaXB0aW9uU2VsZWN0b3JzID0ge1xuICAgIGdldFN1YnNjcmlwdGlvbnMsXG4gICAgZ2V0U3Vic2NyaXB0aW9uQ291bnQsXG4gICAgaXNSZXF1ZXN0U3Vic2NyaWJlZFxuICB9O1xuICByZXR1cm4gKGFjdGlvbiwgbXdBcGkpID0+IHtcbiAgICBpZiAoIXByZXZpb3VzU3Vic2NyaXB0aW9ucykge1xuICAgICAgcHJldmlvdXNTdWJzY3JpcHRpb25zID0gSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeShpbnRlcm5hbFN0YXRlLmN1cnJlbnRTdWJzY3JpcHRpb25zKSk7XG4gICAgfVxuICAgIGlmIChhcGkudXRpbC5yZXNldEFwaVN0YXRlLm1hdGNoKGFjdGlvbikpIHtcbiAgICAgIHByZXZpb3VzU3Vic2NyaXB0aW9ucyA9IGludGVybmFsU3RhdGUuY3VycmVudFN1YnNjcmlwdGlvbnMgPSB7fTtcbiAgICAgIHVwZGF0ZVN5bmNUaW1lciA9IG51bGw7XG4gICAgICByZXR1cm4gW3RydWUsIGZhbHNlXTtcbiAgICB9XG4gICAgaWYgKGFwaS5pbnRlcm5hbEFjdGlvbnMuaW50ZXJuYWxfZ2V0UlRLUVN1YnNjcmlwdGlvbnMubWF0Y2goYWN0aW9uKSkge1xuICAgICAgcmV0dXJuIFtmYWxzZSwgc3Vic2NyaXB0aW9uU2VsZWN0b3JzXTtcbiAgICB9XG4gICAgY29uc3QgZGlkTXV0YXRlID0gYWN0dWFsbHlNdXRhdGVTdWJzY3JpcHRpb25zKGludGVybmFsU3RhdGUuY3VycmVudFN1YnNjcmlwdGlvbnMsIGFjdGlvbik7XG4gICAgbGV0IGFjdGlvblNob3VsZENvbnRpbnVlID0gdHJ1ZTtcbiAgICBpZiAoZGlkTXV0YXRlKSB7XG4gICAgICBpZiAoIXVwZGF0ZVN5bmNUaW1lcikge1xuICAgICAgICB1cGRhdGVTeW5jVGltZXIgPSBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICBjb25zdCBuZXdTdWJzY3JpcHRpb25zID0gSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeShpbnRlcm5hbFN0YXRlLmN1cnJlbnRTdWJzY3JpcHRpb25zKSk7XG4gICAgICAgICAgY29uc3QgWywgcGF0Y2hlc10gPSBwcm9kdWNlV2l0aFBhdGNoZXMyKHByZXZpb3VzU3Vic2NyaXB0aW9ucywgKCkgPT4gbmV3U3Vic2NyaXB0aW9ucyk7XG4gICAgICAgICAgbXdBcGkubmV4dChhcGkuaW50ZXJuYWxBY3Rpb25zLnN1YnNjcmlwdGlvbnNVcGRhdGVkKHBhdGNoZXMpKTtcbiAgICAgICAgICBwcmV2aW91c1N1YnNjcmlwdGlvbnMgPSBuZXdTdWJzY3JpcHRpb25zO1xuICAgICAgICAgIHVwZGF0ZVN5bmNUaW1lciA9IG51bGw7XG4gICAgICAgIH0sIDUwMCk7XG4gICAgICB9XG4gICAgICBjb25zdCBpc1N1YnNjcmlwdGlvblNsaWNlQWN0aW9uID0gdHlwZW9mIGFjdGlvbi50eXBlID09IFwic3RyaW5nXCIgJiYgISFhY3Rpb24udHlwZS5zdGFydHNXaXRoKHN1YnNjcmlwdGlvbnNQcmVmaXgpO1xuICAgICAgY29uc3QgaXNBZGRpdGlvbmFsU3Vic2NyaXB0aW9uQWN0aW9uID0gcXVlcnlUaHVuay5yZWplY3RlZC5tYXRjaChhY3Rpb24pICYmIGFjdGlvbi5tZXRhLmNvbmRpdGlvbiAmJiAhIWFjdGlvbi5tZXRhLmFyZy5zdWJzY3JpYmU7XG4gICAgICBhY3Rpb25TaG91bGRDb250aW51ZSA9ICFpc1N1YnNjcmlwdGlvblNsaWNlQWN0aW9uICYmICFpc0FkZGl0aW9uYWxTdWJzY3JpcHRpb25BY3Rpb247XG4gICAgfVxuICAgIHJldHVybiBbYWN0aW9uU2hvdWxkQ29udGludWUsIGZhbHNlXTtcbiAgfTtcbn07XG5cbi8vIHNyYy9xdWVyeS9jb3JlL2J1aWxkTWlkZGxld2FyZS9jYWNoZUNvbGxlY3Rpb24udHNcbmZ1bmN0aW9uIGlzT2JqZWN0RW1wdHkob2JqKSB7XG4gIGZvciAoY29uc3QgayBpbiBvYmopIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgcmV0dXJuIHRydWU7XG59XG52YXIgVEhJUlRZX1RXT19CSVRfTUFYX1RJTUVSX1NFQ09ORFMgPSAyMTQ3NDgzNjQ3IC8gMWUzIC0gMTtcbnZhciBidWlsZENhY2hlQ29sbGVjdGlvbkhhbmRsZXIgPSAoe1xuICByZWR1Y2VyUGF0aCxcbiAgYXBpLFxuICBxdWVyeVRodW5rLFxuICBjb250ZXh0LFxuICBpbnRlcm5hbFN0YXRlLFxuICBzZWxlY3RvcnM6IHtcbiAgICBzZWxlY3RRdWVyeUVudHJ5LFxuICAgIHNlbGVjdENvbmZpZ1xuICB9XG59KSA9PiB7XG4gIGNvbnN0IHtcbiAgICByZW1vdmVRdWVyeVJlc3VsdCxcbiAgICB1bnN1YnNjcmliZVF1ZXJ5UmVzdWx0LFxuICAgIGNhY2hlRW50cmllc1Vwc2VydGVkXG4gIH0gPSBhcGkuaW50ZXJuYWxBY3Rpb25zO1xuICBjb25zdCBjYW5UcmlnZ2VyVW5zdWJzY3JpYmUgPSBpc0FueU9mKHVuc3Vic2NyaWJlUXVlcnlSZXN1bHQubWF0Y2gsIHF1ZXJ5VGh1bmsuZnVsZmlsbGVkLCBxdWVyeVRodW5rLnJlamVjdGVkLCBjYWNoZUVudHJpZXNVcHNlcnRlZC5tYXRjaCk7XG4gIGZ1bmN0aW9uIGFueVN1YnNjcmlwdGlvbnNSZW1haW5pbmdGb3JLZXkocXVlcnlDYWNoZUtleSkge1xuICAgIGNvbnN0IHN1YnNjcmlwdGlvbnMgPSBpbnRlcm5hbFN0YXRlLmN1cnJlbnRTdWJzY3JpcHRpb25zW3F1ZXJ5Q2FjaGVLZXldO1xuICAgIHJldHVybiAhIXN1YnNjcmlwdGlvbnMgJiYgIWlzT2JqZWN0RW1wdHkoc3Vic2NyaXB0aW9ucyk7XG4gIH1cbiAgY29uc3QgY3VycmVudFJlbW92YWxUaW1lb3V0cyA9IHt9O1xuICBjb25zdCBoYW5kbGVyID0gKGFjdGlvbiwgbXdBcGksIGludGVybmFsU3RhdGUyKSA9PiB7XG4gICAgY29uc3Qgc3RhdGUgPSBtd0FwaS5nZXRTdGF0ZSgpO1xuICAgIGNvbnN0IGNvbmZpZyA9IHNlbGVjdENvbmZpZyhzdGF0ZSk7XG4gICAgaWYgKGNhblRyaWdnZXJVbnN1YnNjcmliZShhY3Rpb24pKSB7XG4gICAgICBsZXQgcXVlcnlDYWNoZUtleXM7XG4gICAgICBpZiAoY2FjaGVFbnRyaWVzVXBzZXJ0ZWQubWF0Y2goYWN0aW9uKSkge1xuICAgICAgICBxdWVyeUNhY2hlS2V5cyA9IGFjdGlvbi5wYXlsb2FkLm1hcCgoZW50cnkpID0+IGVudHJ5LnF1ZXJ5RGVzY3JpcHRpb24ucXVlcnlDYWNoZUtleSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zdCB7XG4gICAgICAgICAgcXVlcnlDYWNoZUtleVxuICAgICAgICB9ID0gdW5zdWJzY3JpYmVRdWVyeVJlc3VsdC5tYXRjaChhY3Rpb24pID8gYWN0aW9uLnBheWxvYWQgOiBhY3Rpb24ubWV0YS5hcmc7XG4gICAgICAgIHF1ZXJ5Q2FjaGVLZXlzID0gW3F1ZXJ5Q2FjaGVLZXldO1xuICAgICAgfVxuICAgICAgaGFuZGxlVW5zdWJzY3JpYmVNYW55KHF1ZXJ5Q2FjaGVLZXlzLCBtd0FwaSwgY29uZmlnKTtcbiAgICB9XG4gICAgaWYgKGFwaS51dGlsLnJlc2V0QXBpU3RhdGUubWF0Y2goYWN0aW9uKSkge1xuICAgICAgZm9yIChjb25zdCBba2V5LCB0aW1lb3V0XSBvZiBPYmplY3QuZW50cmllcyhjdXJyZW50UmVtb3ZhbFRpbWVvdXRzKSkge1xuICAgICAgICBpZiAodGltZW91dCkgY2xlYXJUaW1lb3V0KHRpbWVvdXQpO1xuICAgICAgICBkZWxldGUgY3VycmVudFJlbW92YWxUaW1lb3V0c1trZXldO1xuICAgICAgfVxuICAgIH1cbiAgICBpZiAoY29udGV4dC5oYXNSZWh5ZHJhdGlvbkluZm8oYWN0aW9uKSkge1xuICAgICAgY29uc3Qge1xuICAgICAgICBxdWVyaWVzXG4gICAgICB9ID0gY29udGV4dC5leHRyYWN0UmVoeWRyYXRpb25JbmZvKGFjdGlvbik7XG4gICAgICBoYW5kbGVVbnN1YnNjcmliZU1hbnkoT2JqZWN0LmtleXMocXVlcmllcyksIG13QXBpLCBjb25maWcpO1xuICAgIH1cbiAgfTtcbiAgZnVuY3Rpb24gaGFuZGxlVW5zdWJzY3JpYmVNYW55KGNhY2hlS2V5cywgYXBpMiwgY29uZmlnKSB7XG4gICAgY29uc3Qgc3RhdGUgPSBhcGkyLmdldFN0YXRlKCk7XG4gICAgZm9yIChjb25zdCBxdWVyeUNhY2hlS2V5IG9mIGNhY2hlS2V5cykge1xuICAgICAgY29uc3QgZW50cnkgPSBzZWxlY3RRdWVyeUVudHJ5KHN0YXRlLCBxdWVyeUNhY2hlS2V5KTtcbiAgICAgIGhhbmRsZVVuc3Vic2NyaWJlKHF1ZXJ5Q2FjaGVLZXksIGVudHJ5Py5lbmRwb2ludE5hbWUsIGFwaTIsIGNvbmZpZyk7XG4gICAgfVxuICB9XG4gIGZ1bmN0aW9uIGhhbmRsZVVuc3Vic2NyaWJlKHF1ZXJ5Q2FjaGVLZXksIGVuZHBvaW50TmFtZSwgYXBpMiwgY29uZmlnKSB7XG4gICAgY29uc3QgZW5kcG9pbnREZWZpbml0aW9uID0gY29udGV4dC5lbmRwb2ludERlZmluaXRpb25zW2VuZHBvaW50TmFtZV07XG4gICAgY29uc3Qga2VlcFVudXNlZERhdGFGb3IgPSBlbmRwb2ludERlZmluaXRpb24/LmtlZXBVbnVzZWREYXRhRm9yID8/IGNvbmZpZy5rZWVwVW51c2VkRGF0YUZvcjtcbiAgICBpZiAoa2VlcFVudXNlZERhdGFGb3IgPT09IEluZmluaXR5KSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IGZpbmFsS2VlcFVudXNlZERhdGFGb3IgPSBNYXRoLm1heCgwLCBNYXRoLm1pbihrZWVwVW51c2VkRGF0YUZvciwgVEhJUlRZX1RXT19CSVRfTUFYX1RJTUVSX1NFQ09ORFMpKTtcbiAgICBpZiAoIWFueVN1YnNjcmlwdGlvbnNSZW1haW5pbmdGb3JLZXkocXVlcnlDYWNoZUtleSkpIHtcbiAgICAgIGNvbnN0IGN1cnJlbnRUaW1lb3V0ID0gY3VycmVudFJlbW92YWxUaW1lb3V0c1txdWVyeUNhY2hlS2V5XTtcbiAgICAgIGlmIChjdXJyZW50VGltZW91dCkge1xuICAgICAgICBjbGVhclRpbWVvdXQoY3VycmVudFRpbWVvdXQpO1xuICAgICAgfVxuICAgICAgY3VycmVudFJlbW92YWxUaW1lb3V0c1txdWVyeUNhY2hlS2V5XSA9IHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICBpZiAoIWFueVN1YnNjcmlwdGlvbnNSZW1haW5pbmdGb3JLZXkocXVlcnlDYWNoZUtleSkpIHtcbiAgICAgICAgICBhcGkyLmRpc3BhdGNoKHJlbW92ZVF1ZXJ5UmVzdWx0KHtcbiAgICAgICAgICAgIHF1ZXJ5Q2FjaGVLZXlcbiAgICAgICAgICB9KSk7XG4gICAgICAgIH1cbiAgICAgICAgZGVsZXRlIGN1cnJlbnRSZW1vdmFsVGltZW91dHNbcXVlcnlDYWNoZUtleV07XG4gICAgICB9LCBmaW5hbEtlZXBVbnVzZWREYXRhRm9yICogMWUzKTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIGhhbmRsZXI7XG59O1xuXG4vLyBzcmMvcXVlcnkvY29yZS9idWlsZE1pZGRsZXdhcmUvY2FjaGVMaWZlY3ljbGUudHNcbnZhciBuZXZlclJlc29sdmVkRXJyb3IgPSBuZXcgRXJyb3IoXCJQcm9taXNlIG5ldmVyIHJlc29sdmVkIGJlZm9yZSBjYWNoZUVudHJ5UmVtb3ZlZC5cIik7XG52YXIgYnVpbGRDYWNoZUxpZmVjeWNsZUhhbmRsZXIgPSAoe1xuICBhcGksXG4gIHJlZHVjZXJQYXRoLFxuICBjb250ZXh0LFxuICBxdWVyeVRodW5rLFxuICBtdXRhdGlvblRodW5rLFxuICBpbnRlcm5hbFN0YXRlLFxuICBzZWxlY3RvcnM6IHtcbiAgICBzZWxlY3RRdWVyeUVudHJ5LFxuICAgIHNlbGVjdEFwaVN0YXRlXG4gIH1cbn0pID0+IHtcbiAgY29uc3QgaXNRdWVyeVRodW5rID0gaXNBc3luY1RodW5rQWN0aW9uKHF1ZXJ5VGh1bmspO1xuICBjb25zdCBpc011dGF0aW9uVGh1bmsgPSBpc0FzeW5jVGh1bmtBY3Rpb24obXV0YXRpb25UaHVuayk7XG4gIGNvbnN0IGlzRnVsZmlsbGVkVGh1bmsgPSBpc0Z1bGZpbGxlZChxdWVyeVRodW5rLCBtdXRhdGlvblRodW5rKTtcbiAgY29uc3QgbGlmZWN5Y2xlTWFwID0ge307XG4gIGZ1bmN0aW9uIHJlc29sdmVMaWZlY3ljbGVFbnRyeShjYWNoZUtleSwgZGF0YSwgbWV0YSkge1xuICAgIGNvbnN0IGxpZmVjeWNsZSA9IGxpZmVjeWNsZU1hcFtjYWNoZUtleV07XG4gICAgaWYgKGxpZmVjeWNsZT8udmFsdWVSZXNvbHZlZCkge1xuICAgICAgbGlmZWN5Y2xlLnZhbHVlUmVzb2x2ZWQoe1xuICAgICAgICBkYXRhLFxuICAgICAgICBtZXRhXG4gICAgICB9KTtcbiAgICAgIGRlbGV0ZSBsaWZlY3ljbGUudmFsdWVSZXNvbHZlZDtcbiAgICB9XG4gIH1cbiAgZnVuY3Rpb24gcmVtb3ZlTGlmZWN5Y2xlRW50cnkoY2FjaGVLZXkpIHtcbiAgICBjb25zdCBsaWZlY3ljbGUgPSBsaWZlY3ljbGVNYXBbY2FjaGVLZXldO1xuICAgIGlmIChsaWZlY3ljbGUpIHtcbiAgICAgIGRlbGV0ZSBsaWZlY3ljbGVNYXBbY2FjaGVLZXldO1xuICAgICAgbGlmZWN5Y2xlLmNhY2hlRW50cnlSZW1vdmVkKCk7XG4gICAgfVxuICB9XG4gIGNvbnN0IGhhbmRsZXIgPSAoYWN0aW9uLCBtd0FwaSwgc3RhdGVCZWZvcmUpID0+IHtcbiAgICBjb25zdCBjYWNoZUtleSA9IGdldENhY2hlS2V5KGFjdGlvbik7XG4gICAgZnVuY3Rpb24gY2hlY2tGb3JOZXdDYWNoZUtleShlbmRwb2ludE5hbWUsIGNhY2hlS2V5MiwgcmVxdWVzdElkLCBvcmlnaW5hbEFyZ3MpIHtcbiAgICAgIGNvbnN0IG9sZEVudHJ5ID0gc2VsZWN0UXVlcnlFbnRyeShzdGF0ZUJlZm9yZSwgY2FjaGVLZXkyKTtcbiAgICAgIGNvbnN0IG5ld0VudHJ5ID0gc2VsZWN0UXVlcnlFbnRyeShtd0FwaS5nZXRTdGF0ZSgpLCBjYWNoZUtleTIpO1xuICAgICAgaWYgKCFvbGRFbnRyeSAmJiBuZXdFbnRyeSkge1xuICAgICAgICBoYW5kbGVOZXdLZXkoZW5kcG9pbnROYW1lLCBvcmlnaW5hbEFyZ3MsIGNhY2hlS2V5MiwgbXdBcGksIHJlcXVlc3RJZCk7XG4gICAgICB9XG4gICAgfVxuICAgIGlmIChxdWVyeVRodW5rLnBlbmRpbmcubWF0Y2goYWN0aW9uKSkge1xuICAgICAgY2hlY2tGb3JOZXdDYWNoZUtleShhY3Rpb24ubWV0YS5hcmcuZW5kcG9pbnROYW1lLCBjYWNoZUtleSwgYWN0aW9uLm1ldGEucmVxdWVzdElkLCBhY3Rpb24ubWV0YS5hcmcub3JpZ2luYWxBcmdzKTtcbiAgICB9IGVsc2UgaWYgKGFwaS5pbnRlcm5hbEFjdGlvbnMuY2FjaGVFbnRyaWVzVXBzZXJ0ZWQubWF0Y2goYWN0aW9uKSkge1xuICAgICAgZm9yIChjb25zdCB7XG4gICAgICAgIHF1ZXJ5RGVzY3JpcHRpb24sXG4gICAgICAgIHZhbHVlXG4gICAgICB9IG9mIGFjdGlvbi5wYXlsb2FkKSB7XG4gICAgICAgIGNvbnN0IHtcbiAgICAgICAgICBlbmRwb2ludE5hbWUsXG4gICAgICAgICAgb3JpZ2luYWxBcmdzLFxuICAgICAgICAgIHF1ZXJ5Q2FjaGVLZXlcbiAgICAgICAgfSA9IHF1ZXJ5RGVzY3JpcHRpb247XG4gICAgICAgIGNoZWNrRm9yTmV3Q2FjaGVLZXkoZW5kcG9pbnROYW1lLCBxdWVyeUNhY2hlS2V5LCBhY3Rpb24ubWV0YS5yZXF1ZXN0SWQsIG9yaWdpbmFsQXJncyk7XG4gICAgICAgIHJlc29sdmVMaWZlY3ljbGVFbnRyeShxdWVyeUNhY2hlS2V5LCB2YWx1ZSwge30pO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAobXV0YXRpb25UaHVuay5wZW5kaW5nLm1hdGNoKGFjdGlvbikpIHtcbiAgICAgIGNvbnN0IHN0YXRlID0gbXdBcGkuZ2V0U3RhdGUoKVtyZWR1Y2VyUGF0aF0ubXV0YXRpb25zW2NhY2hlS2V5XTtcbiAgICAgIGlmIChzdGF0ZSkge1xuICAgICAgICBoYW5kbGVOZXdLZXkoYWN0aW9uLm1ldGEuYXJnLmVuZHBvaW50TmFtZSwgYWN0aW9uLm1ldGEuYXJnLm9yaWdpbmFsQXJncywgY2FjaGVLZXksIG13QXBpLCBhY3Rpb24ubWV0YS5yZXF1ZXN0SWQpO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoaXNGdWxmaWxsZWRUaHVuayhhY3Rpb24pKSB7XG4gICAgICByZXNvbHZlTGlmZWN5Y2xlRW50cnkoY2FjaGVLZXksIGFjdGlvbi5wYXlsb2FkLCBhY3Rpb24ubWV0YS5iYXNlUXVlcnlNZXRhKTtcbiAgICB9IGVsc2UgaWYgKGFwaS5pbnRlcm5hbEFjdGlvbnMucmVtb3ZlUXVlcnlSZXN1bHQubWF0Y2goYWN0aW9uKSB8fCBhcGkuaW50ZXJuYWxBY3Rpb25zLnJlbW92ZU11dGF0aW9uUmVzdWx0Lm1hdGNoKGFjdGlvbikpIHtcbiAgICAgIHJlbW92ZUxpZmVjeWNsZUVudHJ5KGNhY2hlS2V5KTtcbiAgICB9IGVsc2UgaWYgKGFwaS51dGlsLnJlc2V0QXBpU3RhdGUubWF0Y2goYWN0aW9uKSkge1xuICAgICAgZm9yIChjb25zdCBjYWNoZUtleTIgb2YgT2JqZWN0LmtleXMobGlmZWN5Y2xlTWFwKSkge1xuICAgICAgICByZW1vdmVMaWZlY3ljbGVFbnRyeShjYWNoZUtleTIpO1xuICAgICAgfVxuICAgIH1cbiAgfTtcbiAgZnVuY3Rpb24gZ2V0Q2FjaGVLZXkoYWN0aW9uKSB7XG4gICAgaWYgKGlzUXVlcnlUaHVuayhhY3Rpb24pKSByZXR1cm4gYWN0aW9uLm1ldGEuYXJnLnF1ZXJ5Q2FjaGVLZXk7XG4gICAgaWYgKGlzTXV0YXRpb25UaHVuayhhY3Rpb24pKSB7XG4gICAgICByZXR1cm4gYWN0aW9uLm1ldGEuYXJnLmZpeGVkQ2FjaGVLZXkgPz8gYWN0aW9uLm1ldGEucmVxdWVzdElkO1xuICAgIH1cbiAgICBpZiAoYXBpLmludGVybmFsQWN0aW9ucy5yZW1vdmVRdWVyeVJlc3VsdC5tYXRjaChhY3Rpb24pKSByZXR1cm4gYWN0aW9uLnBheWxvYWQucXVlcnlDYWNoZUtleTtcbiAgICBpZiAoYXBpLmludGVybmFsQWN0aW9ucy5yZW1vdmVNdXRhdGlvblJlc3VsdC5tYXRjaChhY3Rpb24pKSByZXR1cm4gZ2V0TXV0YXRpb25DYWNoZUtleShhY3Rpb24ucGF5bG9hZCk7XG4gICAgcmV0dXJuIFwiXCI7XG4gIH1cbiAgZnVuY3Rpb24gaGFuZGxlTmV3S2V5KGVuZHBvaW50TmFtZSwgb3JpZ2luYWxBcmdzLCBxdWVyeUNhY2hlS2V5LCBtd0FwaSwgcmVxdWVzdElkKSB7XG4gICAgY29uc3QgZW5kcG9pbnREZWZpbml0aW9uID0gY29udGV4dC5lbmRwb2ludERlZmluaXRpb25zW2VuZHBvaW50TmFtZV07XG4gICAgY29uc3Qgb25DYWNoZUVudHJ5QWRkZWQgPSBlbmRwb2ludERlZmluaXRpb24/Lm9uQ2FjaGVFbnRyeUFkZGVkO1xuICAgIGlmICghb25DYWNoZUVudHJ5QWRkZWQpIHJldHVybjtcbiAgICBjb25zdCBsaWZlY3ljbGUgPSB7fTtcbiAgICBjb25zdCBjYWNoZUVudHJ5UmVtb3ZlZCA9IG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiB7XG4gICAgICBsaWZlY3ljbGUuY2FjaGVFbnRyeVJlbW92ZWQgPSByZXNvbHZlO1xuICAgIH0pO1xuICAgIGNvbnN0IGNhY2hlRGF0YUxvYWRlZCA9IFByb21pc2UucmFjZShbbmV3IFByb21pc2UoKHJlc29sdmUpID0+IHtcbiAgICAgIGxpZmVjeWNsZS52YWx1ZVJlc29sdmVkID0gcmVzb2x2ZTtcbiAgICB9KSwgY2FjaGVFbnRyeVJlbW92ZWQudGhlbigoKSA9PiB7XG4gICAgICB0aHJvdyBuZXZlclJlc29sdmVkRXJyb3I7XG4gICAgfSldKTtcbiAgICBjYWNoZURhdGFMb2FkZWQuY2F0Y2goKCkgPT4ge1xuICAgIH0pO1xuICAgIGxpZmVjeWNsZU1hcFtxdWVyeUNhY2hlS2V5XSA9IGxpZmVjeWNsZTtcbiAgICBjb25zdCBzZWxlY3RvciA9IGFwaS5lbmRwb2ludHNbZW5kcG9pbnROYW1lXS5zZWxlY3QoZW5kcG9pbnREZWZpbml0aW9uLnR5cGUgPT09IFwicXVlcnlcIiAvKiBxdWVyeSAqLyA/IG9yaWdpbmFsQXJncyA6IHF1ZXJ5Q2FjaGVLZXkpO1xuICAgIGNvbnN0IGV4dHJhID0gbXdBcGkuZGlzcGF0Y2goKF8sIF9fLCBleHRyYTIpID0+IGV4dHJhMik7XG4gICAgY29uc3QgbGlmZWN5Y2xlQXBpID0ge1xuICAgICAgLi4ubXdBcGksXG4gICAgICBnZXRDYWNoZUVudHJ5OiAoKSA9PiBzZWxlY3Rvcihtd0FwaS5nZXRTdGF0ZSgpKSxcbiAgICAgIHJlcXVlc3RJZCxcbiAgICAgIGV4dHJhLFxuICAgICAgdXBkYXRlQ2FjaGVkRGF0YTogZW5kcG9pbnREZWZpbml0aW9uLnR5cGUgPT09IFwicXVlcnlcIiAvKiBxdWVyeSAqLyA/ICh1cGRhdGVSZWNpcGUpID0+IG13QXBpLmRpc3BhdGNoKGFwaS51dGlsLnVwZGF0ZVF1ZXJ5RGF0YShlbmRwb2ludE5hbWUsIG9yaWdpbmFsQXJncywgdXBkYXRlUmVjaXBlKSkgOiB2b2lkIDAsXG4gICAgICBjYWNoZURhdGFMb2FkZWQsXG4gICAgICBjYWNoZUVudHJ5UmVtb3ZlZFxuICAgIH07XG4gICAgY29uc3QgcnVubmluZ0hhbmRsZXIgPSBvbkNhY2hlRW50cnlBZGRlZChvcmlnaW5hbEFyZ3MsIGxpZmVjeWNsZUFwaSk7XG4gICAgUHJvbWlzZS5yZXNvbHZlKHJ1bm5pbmdIYW5kbGVyKS5jYXRjaCgoZSkgPT4ge1xuICAgICAgaWYgKGUgPT09IG5ldmVyUmVzb2x2ZWRFcnJvcikgcmV0dXJuO1xuICAgICAgdGhyb3cgZTtcbiAgICB9KTtcbiAgfVxuICByZXR1cm4gaGFuZGxlcjtcbn07XG5cbi8vIHNyYy9xdWVyeS9jb3JlL2J1aWxkTWlkZGxld2FyZS9kZXZNaWRkbGV3YXJlLnRzXG52YXIgYnVpbGREZXZDaGVja0hhbmRsZXIgPSAoe1xuICBhcGksXG4gIGNvbnRleHQ6IHtcbiAgICBhcGlVaWRcbiAgfSxcbiAgcmVkdWNlclBhdGhcbn0pID0+IHtcbiAgcmV0dXJuIChhY3Rpb24sIG13QXBpKSA9PiB7XG4gICAgaWYgKGFwaS51dGlsLnJlc2V0QXBpU3RhdGUubWF0Y2goYWN0aW9uKSkge1xuICAgICAgbXdBcGkuZGlzcGF0Y2goYXBpLmludGVybmFsQWN0aW9ucy5taWRkbGV3YXJlUmVnaXN0ZXJlZChhcGlVaWQpKTtcbiAgICB9XG4gICAgaWYgKHR5cGVvZiBwcm9jZXNzICE9PSBcInVuZGVmaW5lZFwiICYmIHByb2Nlc3MuZW52Lk5PREVfRU5WID09PSBcImRldmVsb3BtZW50XCIpIHtcbiAgICAgIGlmIChhcGkuaW50ZXJuYWxBY3Rpb25zLm1pZGRsZXdhcmVSZWdpc3RlcmVkLm1hdGNoKGFjdGlvbikgJiYgYWN0aW9uLnBheWxvYWQgPT09IGFwaVVpZCAmJiBtd0FwaS5nZXRTdGF0ZSgpW3JlZHVjZXJQYXRoXT8uY29uZmlnPy5taWRkbGV3YXJlUmVnaXN0ZXJlZCA9PT0gXCJjb25mbGljdFwiKSB7XG4gICAgICAgIGNvbnNvbGUud2FybihgVGhlcmUgaXMgYSBtaXNtYXRjaCBiZXR3ZWVuIHNsaWNlIGFuZCBtaWRkbGV3YXJlIGZvciB0aGUgcmVkdWNlclBhdGggXCIke3JlZHVjZXJQYXRofVwiLlxuWW91IGNhbiBvbmx5IGhhdmUgb25lIGFwaSBwZXIgcmVkdWNlciBwYXRoLCB0aGlzIHdpbGwgbGVhZCB0byBjcmFzaGVzIGluIHZhcmlvdXMgc2l0dWF0aW9ucyEke3JlZHVjZXJQYXRoID09PSBcImFwaVwiID8gYFxuSWYgeW91IGhhdmUgbXVsdGlwbGUgYXBpcywgeW91ICpoYXZlKiB0byBzcGVjaWZ5IHRoZSByZWR1Y2VyUGF0aCBvcHRpb24gd2hlbiB1c2luZyBjcmVhdGVBcGkhYCA6IFwiXCJ9YCk7XG4gICAgICB9XG4gICAgfVxuICB9O1xufTtcblxuLy8gc3JjL3F1ZXJ5L2NvcmUvYnVpbGRNaWRkbGV3YXJlL2ludmFsaWRhdGlvbkJ5VGFncy50c1xudmFyIGJ1aWxkSW52YWxpZGF0aW9uQnlUYWdzSGFuZGxlciA9ICh7XG4gIHJlZHVjZXJQYXRoLFxuICBjb250ZXh0LFxuICBjb250ZXh0OiB7XG4gICAgZW5kcG9pbnREZWZpbml0aW9uc1xuICB9LFxuICBtdXRhdGlvblRodW5rLFxuICBxdWVyeVRodW5rLFxuICBhcGksXG4gIGFzc2VydFRhZ1R5cGUsXG4gIHJlZmV0Y2hRdWVyeSxcbiAgaW50ZXJuYWxTdGF0ZVxufSkgPT4ge1xuICBjb25zdCB7XG4gICAgcmVtb3ZlUXVlcnlSZXN1bHRcbiAgfSA9IGFwaS5pbnRlcm5hbEFjdGlvbnM7XG4gIGNvbnN0IGlzVGh1bmtBY3Rpb25XaXRoVGFncyA9IGlzQW55T2YoaXNGdWxmaWxsZWQobXV0YXRpb25UaHVuayksIGlzUmVqZWN0ZWRXaXRoVmFsdWUobXV0YXRpb25UaHVuaykpO1xuICBjb25zdCBpc1F1ZXJ5RW5kID0gaXNBbnlPZihpc0Z1bGZpbGxlZChtdXRhdGlvblRodW5rLCBxdWVyeVRodW5rKSwgaXNSZWplY3RlZChtdXRhdGlvblRodW5rLCBxdWVyeVRodW5rKSk7XG4gIGxldCBwZW5kaW5nVGFnSW52YWxpZGF0aW9ucyA9IFtdO1xuICBjb25zdCBoYW5kbGVyID0gKGFjdGlvbiwgbXdBcGkpID0+IHtcbiAgICBpZiAoaXNUaHVua0FjdGlvbldpdGhUYWdzKGFjdGlvbikpIHtcbiAgICAgIGludmFsaWRhdGVUYWdzKGNhbGN1bGF0ZVByb3ZpZGVkQnlUaHVuayhhY3Rpb24sIFwiaW52YWxpZGF0ZXNUYWdzXCIsIGVuZHBvaW50RGVmaW5pdGlvbnMsIGFzc2VydFRhZ1R5cGUpLCBtd0FwaSk7XG4gICAgfSBlbHNlIGlmIChpc1F1ZXJ5RW5kKGFjdGlvbikpIHtcbiAgICAgIGludmFsaWRhdGVUYWdzKFtdLCBtd0FwaSk7XG4gICAgfSBlbHNlIGlmIChhcGkudXRpbC5pbnZhbGlkYXRlVGFncy5tYXRjaChhY3Rpb24pKSB7XG4gICAgICBpbnZhbGlkYXRlVGFncyhjYWxjdWxhdGVQcm92aWRlZEJ5KGFjdGlvbi5wYXlsb2FkLCB2b2lkIDAsIHZvaWQgMCwgdm9pZCAwLCB2b2lkIDAsIGFzc2VydFRhZ1R5cGUpLCBtd0FwaSk7XG4gICAgfVxuICB9O1xuICBmdW5jdGlvbiBoYXNQZW5kaW5nUmVxdWVzdHMoc3RhdGUpIHtcbiAgICBjb25zdCB7XG4gICAgICBxdWVyaWVzLFxuICAgICAgbXV0YXRpb25zXG4gICAgfSA9IHN0YXRlO1xuICAgIGZvciAoY29uc3QgY2FjaGVSZWNvcmQgb2YgW3F1ZXJpZXMsIG11dGF0aW9uc10pIHtcbiAgICAgIGZvciAoY29uc3Qga2V5IGluIGNhY2hlUmVjb3JkKSB7XG4gICAgICAgIGlmIChjYWNoZVJlY29yZFtrZXldPy5zdGF0dXMgPT09IFwicGVuZGluZ1wiIC8qIHBlbmRpbmcgKi8pIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgZnVuY3Rpb24gaW52YWxpZGF0ZVRhZ3MobmV3VGFncywgbXdBcGkpIHtcbiAgICBjb25zdCByb290U3RhdGUgPSBtd0FwaS5nZXRTdGF0ZSgpO1xuICAgIGNvbnN0IHN0YXRlID0gcm9vdFN0YXRlW3JlZHVjZXJQYXRoXTtcbiAgICBwZW5kaW5nVGFnSW52YWxpZGF0aW9ucy5wdXNoKC4uLm5ld1RhZ3MpO1xuICAgIGlmIChzdGF0ZS5jb25maWcuaW52YWxpZGF0aW9uQmVoYXZpb3IgPT09IFwiZGVsYXllZFwiICYmIGhhc1BlbmRpbmdSZXF1ZXN0cyhzdGF0ZSkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3QgdGFncyA9IHBlbmRpbmdUYWdJbnZhbGlkYXRpb25zO1xuICAgIHBlbmRpbmdUYWdJbnZhbGlkYXRpb25zID0gW107XG4gICAgaWYgKHRhZ3MubGVuZ3RoID09PSAwKSByZXR1cm47XG4gICAgY29uc3QgdG9JbnZhbGlkYXRlID0gYXBpLnV0aWwuc2VsZWN0SW52YWxpZGF0ZWRCeShyb290U3RhdGUsIHRhZ3MpO1xuICAgIGNvbnRleHQuYmF0Y2goKCkgPT4ge1xuICAgICAgY29uc3QgdmFsdWVzQXJyYXkgPSBBcnJheS5mcm9tKHRvSW52YWxpZGF0ZS52YWx1ZXMoKSk7XG4gICAgICBmb3IgKGNvbnN0IHtcbiAgICAgICAgcXVlcnlDYWNoZUtleVxuICAgICAgfSBvZiB2YWx1ZXNBcnJheSkge1xuICAgICAgICBjb25zdCBxdWVyeVN1YlN0YXRlID0gc3RhdGUucXVlcmllc1txdWVyeUNhY2hlS2V5XTtcbiAgICAgICAgY29uc3Qgc3Vic2NyaXB0aW9uU3ViU3RhdGUgPSBpbnRlcm5hbFN0YXRlLmN1cnJlbnRTdWJzY3JpcHRpb25zW3F1ZXJ5Q2FjaGVLZXldID8/IHt9O1xuICAgICAgICBpZiAocXVlcnlTdWJTdGF0ZSkge1xuICAgICAgICAgIGlmIChjb3VudE9iamVjdEtleXMoc3Vic2NyaXB0aW9uU3ViU3RhdGUpID09PSAwKSB7XG4gICAgICAgICAgICBtd0FwaS5kaXNwYXRjaChyZW1vdmVRdWVyeVJlc3VsdCh7XG4gICAgICAgICAgICAgIHF1ZXJ5Q2FjaGVLZXlcbiAgICAgICAgICAgIH0pKTtcbiAgICAgICAgICB9IGVsc2UgaWYgKHF1ZXJ5U3ViU3RhdGUuc3RhdHVzICE9PSBcInVuaW5pdGlhbGl6ZWRcIiAvKiB1bmluaXRpYWxpemVkICovKSB7XG4gICAgICAgICAgICBtd0FwaS5kaXNwYXRjaChyZWZldGNoUXVlcnkocXVlcnlTdWJTdGF0ZSkpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pO1xuICB9XG4gIHJldHVybiBoYW5kbGVyO1xufTtcblxuLy8gc3JjL3F1ZXJ5L2NvcmUvYnVpbGRNaWRkbGV3YXJlL3BvbGxpbmcudHNcbnZhciBidWlsZFBvbGxpbmdIYW5kbGVyID0gKHtcbiAgcmVkdWNlclBhdGgsXG4gIHF1ZXJ5VGh1bmssXG4gIGFwaSxcbiAgcmVmZXRjaFF1ZXJ5LFxuICBpbnRlcm5hbFN0YXRlXG59KSA9PiB7XG4gIGNvbnN0IGN1cnJlbnRQb2xscyA9IHt9O1xuICBjb25zdCBoYW5kbGVyID0gKGFjdGlvbiwgbXdBcGkpID0+IHtcbiAgICBpZiAoYXBpLmludGVybmFsQWN0aW9ucy51cGRhdGVTdWJzY3JpcHRpb25PcHRpb25zLm1hdGNoKGFjdGlvbikgfHwgYXBpLmludGVybmFsQWN0aW9ucy51bnN1YnNjcmliZVF1ZXJ5UmVzdWx0Lm1hdGNoKGFjdGlvbikpIHtcbiAgICAgIHVwZGF0ZVBvbGxpbmdJbnRlcnZhbChhY3Rpb24ucGF5bG9hZCwgbXdBcGkpO1xuICAgIH1cbiAgICBpZiAocXVlcnlUaHVuay5wZW5kaW5nLm1hdGNoKGFjdGlvbikgfHwgcXVlcnlUaHVuay5yZWplY3RlZC5tYXRjaChhY3Rpb24pICYmIGFjdGlvbi5tZXRhLmNvbmRpdGlvbikge1xuICAgICAgdXBkYXRlUG9sbGluZ0ludGVydmFsKGFjdGlvbi5tZXRhLmFyZywgbXdBcGkpO1xuICAgIH1cbiAgICBpZiAocXVlcnlUaHVuay5mdWxmaWxsZWQubWF0Y2goYWN0aW9uKSB8fCBxdWVyeVRodW5rLnJlamVjdGVkLm1hdGNoKGFjdGlvbikgJiYgIWFjdGlvbi5tZXRhLmNvbmRpdGlvbikge1xuICAgICAgc3RhcnROZXh0UG9sbChhY3Rpb24ubWV0YS5hcmcsIG13QXBpKTtcbiAgICB9XG4gICAgaWYgKGFwaS51dGlsLnJlc2V0QXBpU3RhdGUubWF0Y2goYWN0aW9uKSkge1xuICAgICAgY2xlYXJQb2xscygpO1xuICAgIH1cbiAgfTtcbiAgZnVuY3Rpb24gZ2V0Q2FjaGVFbnRyeVN1YnNjcmlwdGlvbnMocXVlcnlDYWNoZUtleSwgYXBpMikge1xuICAgIGNvbnN0IHN0YXRlID0gYXBpMi5nZXRTdGF0ZSgpW3JlZHVjZXJQYXRoXTtcbiAgICBjb25zdCBxdWVyeVN1YlN0YXRlID0gc3RhdGUucXVlcmllc1txdWVyeUNhY2hlS2V5XTtcbiAgICBjb25zdCBzdWJzY3JpcHRpb25zID0gaW50ZXJuYWxTdGF0ZS5jdXJyZW50U3Vic2NyaXB0aW9uc1txdWVyeUNhY2hlS2V5XTtcbiAgICBpZiAoIXF1ZXJ5U3ViU3RhdGUgfHwgcXVlcnlTdWJTdGF0ZS5zdGF0dXMgPT09IFwidW5pbml0aWFsaXplZFwiIC8qIHVuaW5pdGlhbGl6ZWQgKi8pIHJldHVybjtcbiAgICByZXR1cm4gc3Vic2NyaXB0aW9ucztcbiAgfVxuICBmdW5jdGlvbiBzdGFydE5leHRQb2xsKHtcbiAgICBxdWVyeUNhY2hlS2V5XG4gIH0sIGFwaTIpIHtcbiAgICBjb25zdCBzdGF0ZSA9IGFwaTIuZ2V0U3RhdGUoKVtyZWR1Y2VyUGF0aF07XG4gICAgY29uc3QgcXVlcnlTdWJTdGF0ZSA9IHN0YXRlLnF1ZXJpZXNbcXVlcnlDYWNoZUtleV07XG4gICAgY29uc3Qgc3Vic2NyaXB0aW9ucyA9IGludGVybmFsU3RhdGUuY3VycmVudFN1YnNjcmlwdGlvbnNbcXVlcnlDYWNoZUtleV07XG4gICAgaWYgKCFxdWVyeVN1YlN0YXRlIHx8IHF1ZXJ5U3ViU3RhdGUuc3RhdHVzID09PSBcInVuaW5pdGlhbGl6ZWRcIiAvKiB1bmluaXRpYWxpemVkICovKSByZXR1cm47XG4gICAgY29uc3Qge1xuICAgICAgbG93ZXN0UG9sbGluZ0ludGVydmFsLFxuICAgICAgc2tpcFBvbGxpbmdJZlVuZm9jdXNlZFxuICAgIH0gPSBmaW5kTG93ZXN0UG9sbGluZ0ludGVydmFsKHN1YnNjcmlwdGlvbnMpO1xuICAgIGlmICghTnVtYmVyLmlzRmluaXRlKGxvd2VzdFBvbGxpbmdJbnRlcnZhbCkpIHJldHVybjtcbiAgICBjb25zdCBjdXJyZW50UG9sbCA9IGN1cnJlbnRQb2xsc1txdWVyeUNhY2hlS2V5XTtcbiAgICBpZiAoY3VycmVudFBvbGw/LnRpbWVvdXQpIHtcbiAgICAgIGNsZWFyVGltZW91dChjdXJyZW50UG9sbC50aW1lb3V0KTtcbiAgICAgIGN1cnJlbnRQb2xsLnRpbWVvdXQgPSB2b2lkIDA7XG4gICAgfVxuICAgIGNvbnN0IG5leHRQb2xsVGltZXN0YW1wID0gRGF0ZS5ub3coKSArIGxvd2VzdFBvbGxpbmdJbnRlcnZhbDtcbiAgICBjdXJyZW50UG9sbHNbcXVlcnlDYWNoZUtleV0gPSB7XG4gICAgICBuZXh0UG9sbFRpbWVzdGFtcCxcbiAgICAgIHBvbGxpbmdJbnRlcnZhbDogbG93ZXN0UG9sbGluZ0ludGVydmFsLFxuICAgICAgdGltZW91dDogc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgIGlmIChzdGF0ZS5jb25maWcuZm9jdXNlZCB8fCAhc2tpcFBvbGxpbmdJZlVuZm9jdXNlZCkge1xuICAgICAgICAgIGFwaTIuZGlzcGF0Y2gocmVmZXRjaFF1ZXJ5KHF1ZXJ5U3ViU3RhdGUpKTtcbiAgICAgICAgfVxuICAgICAgICBzdGFydE5leHRQb2xsKHtcbiAgICAgICAgICBxdWVyeUNhY2hlS2V5XG4gICAgICAgIH0sIGFwaTIpO1xuICAgICAgfSwgbG93ZXN0UG9sbGluZ0ludGVydmFsKVxuICAgIH07XG4gIH1cbiAgZnVuY3Rpb24gdXBkYXRlUG9sbGluZ0ludGVydmFsKHtcbiAgICBxdWVyeUNhY2hlS2V5XG4gIH0sIGFwaTIpIHtcbiAgICBjb25zdCBzdGF0ZSA9IGFwaTIuZ2V0U3RhdGUoKVtyZWR1Y2VyUGF0aF07XG4gICAgY29uc3QgcXVlcnlTdWJTdGF0ZSA9IHN0YXRlLnF1ZXJpZXNbcXVlcnlDYWNoZUtleV07XG4gICAgY29uc3Qgc3Vic2NyaXB0aW9ucyA9IGludGVybmFsU3RhdGUuY3VycmVudFN1YnNjcmlwdGlvbnNbcXVlcnlDYWNoZUtleV07XG4gICAgaWYgKCFxdWVyeVN1YlN0YXRlIHx8IHF1ZXJ5U3ViU3RhdGUuc3RhdHVzID09PSBcInVuaW5pdGlhbGl6ZWRcIiAvKiB1bmluaXRpYWxpemVkICovKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IHtcbiAgICAgIGxvd2VzdFBvbGxpbmdJbnRlcnZhbFxuICAgIH0gPSBmaW5kTG93ZXN0UG9sbGluZ0ludGVydmFsKHN1YnNjcmlwdGlvbnMpO1xuICAgIGlmICghTnVtYmVyLmlzRmluaXRlKGxvd2VzdFBvbGxpbmdJbnRlcnZhbCkpIHtcbiAgICAgIGNsZWFudXBQb2xsRm9yS2V5KHF1ZXJ5Q2FjaGVLZXkpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCBjdXJyZW50UG9sbCA9IGN1cnJlbnRQb2xsc1txdWVyeUNhY2hlS2V5XTtcbiAgICBjb25zdCBuZXh0UG9sbFRpbWVzdGFtcCA9IERhdGUubm93KCkgKyBsb3dlc3RQb2xsaW5nSW50ZXJ2YWw7XG4gICAgaWYgKCFjdXJyZW50UG9sbCB8fCBuZXh0UG9sbFRpbWVzdGFtcCA8IGN1cnJlbnRQb2xsLm5leHRQb2xsVGltZXN0YW1wKSB7XG4gICAgICBzdGFydE5leHRQb2xsKHtcbiAgICAgICAgcXVlcnlDYWNoZUtleVxuICAgICAgfSwgYXBpMik7XG4gICAgfVxuICB9XG4gIGZ1bmN0aW9uIGNsZWFudXBQb2xsRm9yS2V5KGtleSkge1xuICAgIGNvbnN0IGV4aXN0aW5nUG9sbCA9IGN1cnJlbnRQb2xsc1trZXldO1xuICAgIGlmIChleGlzdGluZ1BvbGw/LnRpbWVvdXQpIHtcbiAgICAgIGNsZWFyVGltZW91dChleGlzdGluZ1BvbGwudGltZW91dCk7XG4gICAgfVxuICAgIGRlbGV0ZSBjdXJyZW50UG9sbHNba2V5XTtcbiAgfVxuICBmdW5jdGlvbiBjbGVhclBvbGxzKCkge1xuICAgIGZvciAoY29uc3Qga2V5IG9mIE9iamVjdC5rZXlzKGN1cnJlbnRQb2xscykpIHtcbiAgICAgIGNsZWFudXBQb2xsRm9yS2V5KGtleSk7XG4gICAgfVxuICB9XG4gIGZ1bmN0aW9uIGZpbmRMb3dlc3RQb2xsaW5nSW50ZXJ2YWwoc3Vic2NyaWJlcnMgPSB7fSkge1xuICAgIGxldCBza2lwUG9sbGluZ0lmVW5mb2N1c2VkID0gZmFsc2U7XG4gICAgbGV0IGxvd2VzdFBvbGxpbmdJbnRlcnZhbCA9IE51bWJlci5QT1NJVElWRV9JTkZJTklUWTtcbiAgICBmb3IgKGxldCBrZXkgaW4gc3Vic2NyaWJlcnMpIHtcbiAgICAgIGlmICghIXN1YnNjcmliZXJzW2tleV0ucG9sbGluZ0ludGVydmFsKSB7XG4gICAgICAgIGxvd2VzdFBvbGxpbmdJbnRlcnZhbCA9IE1hdGgubWluKHN1YnNjcmliZXJzW2tleV0ucG9sbGluZ0ludGVydmFsLCBsb3dlc3RQb2xsaW5nSW50ZXJ2YWwpO1xuICAgICAgICBza2lwUG9sbGluZ0lmVW5mb2N1c2VkID0gc3Vic2NyaWJlcnNba2V5XS5za2lwUG9sbGluZ0lmVW5mb2N1c2VkIHx8IHNraXBQb2xsaW5nSWZVbmZvY3VzZWQ7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiB7XG4gICAgICBsb3dlc3RQb2xsaW5nSW50ZXJ2YWwsXG4gICAgICBza2lwUG9sbGluZ0lmVW5mb2N1c2VkXG4gICAgfTtcbiAgfVxuICByZXR1cm4gaGFuZGxlcjtcbn07XG5cbi8vIHNyYy9xdWVyeS9jb3JlL2J1aWxkTWlkZGxld2FyZS9xdWVyeUxpZmVjeWNsZS50c1xudmFyIGJ1aWxkUXVlcnlMaWZlY3ljbGVIYW5kbGVyID0gKHtcbiAgYXBpLFxuICBjb250ZXh0LFxuICBxdWVyeVRodW5rLFxuICBtdXRhdGlvblRodW5rXG59KSA9PiB7XG4gIGNvbnN0IGlzUGVuZGluZ1RodW5rID0gaXNQZW5kaW5nKHF1ZXJ5VGh1bmssIG11dGF0aW9uVGh1bmspO1xuICBjb25zdCBpc1JlamVjdGVkVGh1bmsgPSBpc1JlamVjdGVkKHF1ZXJ5VGh1bmssIG11dGF0aW9uVGh1bmspO1xuICBjb25zdCBpc0Z1bGxmaWxsZWRUaHVuayA9IGlzRnVsZmlsbGVkKHF1ZXJ5VGh1bmssIG11dGF0aW9uVGh1bmspO1xuICBjb25zdCBsaWZlY3ljbGVNYXAgPSB7fTtcbiAgY29uc3QgaGFuZGxlciA9IChhY3Rpb24sIG13QXBpKSA9PiB7XG4gICAgaWYgKGlzUGVuZGluZ1RodW5rKGFjdGlvbikpIHtcbiAgICAgIGNvbnN0IHtcbiAgICAgICAgcmVxdWVzdElkLFxuICAgICAgICBhcmc6IHtcbiAgICAgICAgICBlbmRwb2ludE5hbWUsXG4gICAgICAgICAgb3JpZ2luYWxBcmdzXG4gICAgICAgIH1cbiAgICAgIH0gPSBhY3Rpb24ubWV0YTtcbiAgICAgIGNvbnN0IGVuZHBvaW50RGVmaW5pdGlvbiA9IGNvbnRleHQuZW5kcG9pbnREZWZpbml0aW9uc1tlbmRwb2ludE5hbWVdO1xuICAgICAgY29uc3Qgb25RdWVyeVN0YXJ0ZWQgPSBlbmRwb2ludERlZmluaXRpb24/Lm9uUXVlcnlTdGFydGVkO1xuICAgICAgaWYgKG9uUXVlcnlTdGFydGVkKSB7XG4gICAgICAgIGNvbnN0IGxpZmVjeWNsZSA9IHt9O1xuICAgICAgICBjb25zdCBxdWVyeUZ1bGZpbGxlZCA9IG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgICAgICBsaWZlY3ljbGUucmVzb2x2ZSA9IHJlc29sdmU7XG4gICAgICAgICAgbGlmZWN5Y2xlLnJlamVjdCA9IHJlamVjdDtcbiAgICAgICAgfSk7XG4gICAgICAgIHF1ZXJ5RnVsZmlsbGVkLmNhdGNoKCgpID0+IHtcbiAgICAgICAgfSk7XG4gICAgICAgIGxpZmVjeWNsZU1hcFtyZXF1ZXN0SWRdID0gbGlmZWN5Y2xlO1xuICAgICAgICBjb25zdCBzZWxlY3RvciA9IGFwaS5lbmRwb2ludHNbZW5kcG9pbnROYW1lXS5zZWxlY3QoZW5kcG9pbnREZWZpbml0aW9uLnR5cGUgPT09IFwicXVlcnlcIiAvKiBxdWVyeSAqLyA/IG9yaWdpbmFsQXJncyA6IHJlcXVlc3RJZCk7XG4gICAgICAgIGNvbnN0IGV4dHJhID0gbXdBcGkuZGlzcGF0Y2goKF8sIF9fLCBleHRyYTIpID0+IGV4dHJhMik7XG4gICAgICAgIGNvbnN0IGxpZmVjeWNsZUFwaSA9IHtcbiAgICAgICAgICAuLi5td0FwaSxcbiAgICAgICAgICBnZXRDYWNoZUVudHJ5OiAoKSA9PiBzZWxlY3Rvcihtd0FwaS5nZXRTdGF0ZSgpKSxcbiAgICAgICAgICByZXF1ZXN0SWQsXG4gICAgICAgICAgZXh0cmEsXG4gICAgICAgICAgdXBkYXRlQ2FjaGVkRGF0YTogZW5kcG9pbnREZWZpbml0aW9uLnR5cGUgPT09IFwicXVlcnlcIiAvKiBxdWVyeSAqLyA/ICh1cGRhdGVSZWNpcGUpID0+IG13QXBpLmRpc3BhdGNoKGFwaS51dGlsLnVwZGF0ZVF1ZXJ5RGF0YShlbmRwb2ludE5hbWUsIG9yaWdpbmFsQXJncywgdXBkYXRlUmVjaXBlKSkgOiB2b2lkIDAsXG4gICAgICAgICAgcXVlcnlGdWxmaWxsZWRcbiAgICAgICAgfTtcbiAgICAgICAgb25RdWVyeVN0YXJ0ZWQob3JpZ2luYWxBcmdzLCBsaWZlY3ljbGVBcGkpO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoaXNGdWxsZmlsbGVkVGh1bmsoYWN0aW9uKSkge1xuICAgICAgY29uc3Qge1xuICAgICAgICByZXF1ZXN0SWQsXG4gICAgICAgIGJhc2VRdWVyeU1ldGFcbiAgICAgIH0gPSBhY3Rpb24ubWV0YTtcbiAgICAgIGxpZmVjeWNsZU1hcFtyZXF1ZXN0SWRdPy5yZXNvbHZlKHtcbiAgICAgICAgZGF0YTogYWN0aW9uLnBheWxvYWQsXG4gICAgICAgIG1ldGE6IGJhc2VRdWVyeU1ldGFcbiAgICAgIH0pO1xuICAgICAgZGVsZXRlIGxpZmVjeWNsZU1hcFtyZXF1ZXN0SWRdO1xuICAgIH0gZWxzZSBpZiAoaXNSZWplY3RlZFRodW5rKGFjdGlvbikpIHtcbiAgICAgIGNvbnN0IHtcbiAgICAgICAgcmVxdWVzdElkLFxuICAgICAgICByZWplY3RlZFdpdGhWYWx1ZSxcbiAgICAgICAgYmFzZVF1ZXJ5TWV0YVxuICAgICAgfSA9IGFjdGlvbi5tZXRhO1xuICAgICAgbGlmZWN5Y2xlTWFwW3JlcXVlc3RJZF0/LnJlamVjdCh7XG4gICAgICAgIGVycm9yOiBhY3Rpb24ucGF5bG9hZCA/PyBhY3Rpb24uZXJyb3IsXG4gICAgICAgIGlzVW5oYW5kbGVkRXJyb3I6ICFyZWplY3RlZFdpdGhWYWx1ZSxcbiAgICAgICAgbWV0YTogYmFzZVF1ZXJ5TWV0YVxuICAgICAgfSk7XG4gICAgICBkZWxldGUgbGlmZWN5Y2xlTWFwW3JlcXVlc3RJZF07XG4gICAgfVxuICB9O1xuICByZXR1cm4gaGFuZGxlcjtcbn07XG5cbi8vIHNyYy9xdWVyeS9jb3JlL2J1aWxkTWlkZGxld2FyZS93aW5kb3dFdmVudEhhbmRsaW5nLnRzXG52YXIgYnVpbGRXaW5kb3dFdmVudEhhbmRsZXIgPSAoe1xuICByZWR1Y2VyUGF0aCxcbiAgY29udGV4dCxcbiAgYXBpLFxuICByZWZldGNoUXVlcnksXG4gIGludGVybmFsU3RhdGVcbn0pID0+IHtcbiAgY29uc3Qge1xuICAgIHJlbW92ZVF1ZXJ5UmVzdWx0XG4gIH0gPSBhcGkuaW50ZXJuYWxBY3Rpb25zO1xuICBjb25zdCBoYW5kbGVyID0gKGFjdGlvbiwgbXdBcGkpID0+IHtcbiAgICBpZiAob25Gb2N1cy5tYXRjaChhY3Rpb24pKSB7XG4gICAgICByZWZldGNoVmFsaWRRdWVyaWVzKG13QXBpLCBcInJlZmV0Y2hPbkZvY3VzXCIpO1xuICAgIH1cbiAgICBpZiAob25PbmxpbmUubWF0Y2goYWN0aW9uKSkge1xuICAgICAgcmVmZXRjaFZhbGlkUXVlcmllcyhtd0FwaSwgXCJyZWZldGNoT25SZWNvbm5lY3RcIik7XG4gICAgfVxuICB9O1xuICBmdW5jdGlvbiByZWZldGNoVmFsaWRRdWVyaWVzKGFwaTIsIHR5cGUpIHtcbiAgICBjb25zdCBzdGF0ZSA9IGFwaTIuZ2V0U3RhdGUoKVtyZWR1Y2VyUGF0aF07XG4gICAgY29uc3QgcXVlcmllcyA9IHN0YXRlLnF1ZXJpZXM7XG4gICAgY29uc3Qgc3Vic2NyaXB0aW9ucyA9IGludGVybmFsU3RhdGUuY3VycmVudFN1YnNjcmlwdGlvbnM7XG4gICAgY29udGV4dC5iYXRjaCgoKSA9PiB7XG4gICAgICBmb3IgKGNvbnN0IHF1ZXJ5Q2FjaGVLZXkgb2YgT2JqZWN0LmtleXMoc3Vic2NyaXB0aW9ucykpIHtcbiAgICAgICAgY29uc3QgcXVlcnlTdWJTdGF0ZSA9IHF1ZXJpZXNbcXVlcnlDYWNoZUtleV07XG4gICAgICAgIGNvbnN0IHN1YnNjcmlwdGlvblN1YlN0YXRlID0gc3Vic2NyaXB0aW9uc1txdWVyeUNhY2hlS2V5XTtcbiAgICAgICAgaWYgKCFzdWJzY3JpcHRpb25TdWJTdGF0ZSB8fCAhcXVlcnlTdWJTdGF0ZSkgY29udGludWU7XG4gICAgICAgIGNvbnN0IHNob3VsZFJlZmV0Y2ggPSBPYmplY3QudmFsdWVzKHN1YnNjcmlwdGlvblN1YlN0YXRlKS5zb21lKChzdWIpID0+IHN1Ylt0eXBlXSA9PT0gdHJ1ZSkgfHwgT2JqZWN0LnZhbHVlcyhzdWJzY3JpcHRpb25TdWJTdGF0ZSkuZXZlcnkoKHN1YikgPT4gc3ViW3R5cGVdID09PSB2b2lkIDApICYmIHN0YXRlLmNvbmZpZ1t0eXBlXTtcbiAgICAgICAgaWYgKHNob3VsZFJlZmV0Y2gpIHtcbiAgICAgICAgICBpZiAoY291bnRPYmplY3RLZXlzKHN1YnNjcmlwdGlvblN1YlN0YXRlKSA9PT0gMCkge1xuICAgICAgICAgICAgYXBpMi5kaXNwYXRjaChyZW1vdmVRdWVyeVJlc3VsdCh7XG4gICAgICAgICAgICAgIHF1ZXJ5Q2FjaGVLZXlcbiAgICAgICAgICAgIH0pKTtcbiAgICAgICAgICB9IGVsc2UgaWYgKHF1ZXJ5U3ViU3RhdGUuc3RhdHVzICE9PSBcInVuaW5pdGlhbGl6ZWRcIiAvKiB1bmluaXRpYWxpemVkICovKSB7XG4gICAgICAgICAgICBhcGkyLmRpc3BhdGNoKHJlZmV0Y2hRdWVyeShxdWVyeVN1YlN0YXRlKSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSk7XG4gIH1cbiAgcmV0dXJuIGhhbmRsZXI7XG59O1xuXG4vLyBzcmMvcXVlcnkvY29yZS9idWlsZE1pZGRsZXdhcmUvaW5kZXgudHNcbmZ1bmN0aW9uIGJ1aWxkTWlkZGxld2FyZShpbnB1dCkge1xuICBjb25zdCB7XG4gICAgcmVkdWNlclBhdGgsXG4gICAgcXVlcnlUaHVuayxcbiAgICBhcGksXG4gICAgY29udGV4dFxuICB9ID0gaW5wdXQ7XG4gIGNvbnN0IHtcbiAgICBhcGlVaWRcbiAgfSA9IGNvbnRleHQ7XG4gIGNvbnN0IGFjdGlvbnMgPSB7XG4gICAgaW52YWxpZGF0ZVRhZ3M6IGNyZWF0ZUFjdGlvbihgJHtyZWR1Y2VyUGF0aH0vaW52YWxpZGF0ZVRhZ3NgKVxuICB9O1xuICBjb25zdCBpc1RoaXNBcGlTbGljZUFjdGlvbiA9IChhY3Rpb24pID0+IGFjdGlvbi50eXBlLnN0YXJ0c1dpdGgoYCR7cmVkdWNlclBhdGh9L2ApO1xuICBjb25zdCBoYW5kbGVyQnVpbGRlcnMgPSBbYnVpbGREZXZDaGVja0hhbmRsZXIsIGJ1aWxkQ2FjaGVDb2xsZWN0aW9uSGFuZGxlciwgYnVpbGRJbnZhbGlkYXRpb25CeVRhZ3NIYW5kbGVyLCBidWlsZFBvbGxpbmdIYW5kbGVyLCBidWlsZENhY2hlTGlmZWN5Y2xlSGFuZGxlciwgYnVpbGRRdWVyeUxpZmVjeWNsZUhhbmRsZXJdO1xuICBjb25zdCBtaWRkbGV3YXJlID0gKG13QXBpKSA9PiB7XG4gICAgbGV0IGluaXRpYWxpemVkMiA9IGZhbHNlO1xuICAgIGNvbnN0IGludGVybmFsU3RhdGUgPSB7XG4gICAgICBjdXJyZW50U3Vic2NyaXB0aW9uczoge31cbiAgICB9O1xuICAgIGNvbnN0IGJ1aWxkZXJBcmdzID0ge1xuICAgICAgLi4uaW5wdXQsXG4gICAgICBpbnRlcm5hbFN0YXRlLFxuICAgICAgcmVmZXRjaFF1ZXJ5LFxuICAgICAgaXNUaGlzQXBpU2xpY2VBY3Rpb25cbiAgICB9O1xuICAgIGNvbnN0IGhhbmRsZXJzID0gaGFuZGxlckJ1aWxkZXJzLm1hcCgoYnVpbGQpID0+IGJ1aWxkKGJ1aWxkZXJBcmdzKSk7XG4gICAgY29uc3QgYmF0Y2hlZEFjdGlvbnNIYW5kbGVyID0gYnVpbGRCYXRjaGVkQWN0aW9uc0hhbmRsZXIoYnVpbGRlckFyZ3MpO1xuICAgIGNvbnN0IHdpbmRvd0V2ZW50c0hhbmRsZXIgPSBidWlsZFdpbmRvd0V2ZW50SGFuZGxlcihidWlsZGVyQXJncyk7XG4gICAgcmV0dXJuIChuZXh0KSA9PiB7XG4gICAgICByZXR1cm4gKGFjdGlvbikgPT4ge1xuICAgICAgICBpZiAoIWlzQWN0aW9uKGFjdGlvbikpIHtcbiAgICAgICAgICByZXR1cm4gbmV4dChhY3Rpb24pO1xuICAgICAgICB9XG4gICAgICAgIGlmICghaW5pdGlhbGl6ZWQyKSB7XG4gICAgICAgICAgaW5pdGlhbGl6ZWQyID0gdHJ1ZTtcbiAgICAgICAgICBtd0FwaS5kaXNwYXRjaChhcGkuaW50ZXJuYWxBY3Rpb25zLm1pZGRsZXdhcmVSZWdpc3RlcmVkKGFwaVVpZCkpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IG13QXBpV2l0aE5leHQgPSB7XG4gICAgICAgICAgLi4ubXdBcGksXG4gICAgICAgICAgbmV4dFxuICAgICAgICB9O1xuICAgICAgICBjb25zdCBzdGF0ZUJlZm9yZSA9IG13QXBpLmdldFN0YXRlKCk7XG4gICAgICAgIGNvbnN0IFthY3Rpb25TaG91bGRDb250aW51ZSwgaW50ZXJuYWxQcm9iZVJlc3VsdF0gPSBiYXRjaGVkQWN0aW9uc0hhbmRsZXIoYWN0aW9uLCBtd0FwaVdpdGhOZXh0LCBzdGF0ZUJlZm9yZSk7XG4gICAgICAgIGxldCByZXM7XG4gICAgICAgIGlmIChhY3Rpb25TaG91bGRDb250aW51ZSkge1xuICAgICAgICAgIHJlcyA9IG5leHQoYWN0aW9uKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXMgPSBpbnRlcm5hbFByb2JlUmVzdWx0O1xuICAgICAgICB9XG4gICAgICAgIGlmICghIW13QXBpLmdldFN0YXRlKClbcmVkdWNlclBhdGhdKSB7XG4gICAgICAgICAgd2luZG93RXZlbnRzSGFuZGxlcihhY3Rpb24sIG13QXBpV2l0aE5leHQsIHN0YXRlQmVmb3JlKTtcbiAgICAgICAgICBpZiAoaXNUaGlzQXBpU2xpY2VBY3Rpb24oYWN0aW9uKSB8fCBjb250ZXh0Lmhhc1JlaHlkcmF0aW9uSW5mbyhhY3Rpb24pKSB7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IGhhbmRsZXIgb2YgaGFuZGxlcnMpIHtcbiAgICAgICAgICAgICAgaGFuZGxlcihhY3Rpb24sIG13QXBpV2l0aE5leHQsIHN0YXRlQmVmb3JlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlcztcbiAgICAgIH07XG4gICAgfTtcbiAgfTtcbiAgcmV0dXJuIHtcbiAgICBtaWRkbGV3YXJlLFxuICAgIGFjdGlvbnNcbiAgfTtcbiAgZnVuY3Rpb24gcmVmZXRjaFF1ZXJ5KHF1ZXJ5U3ViU3RhdGUpIHtcbiAgICByZXR1cm4gaW5wdXQuYXBpLmVuZHBvaW50c1txdWVyeVN1YlN0YXRlLmVuZHBvaW50TmFtZV0uaW5pdGlhdGUocXVlcnlTdWJTdGF0ZS5vcmlnaW5hbEFyZ3MsIHtcbiAgICAgIHN1YnNjcmliZTogZmFsc2UsXG4gICAgICBmb3JjZVJlZmV0Y2g6IHRydWVcbiAgICB9KTtcbiAgfVxufVxuXG4vLyBzcmMvcXVlcnkvY29yZS9tb2R1bGUudHNcbnZhciBjb3JlTW9kdWxlTmFtZSA9IC8qIEBfX1BVUkVfXyAqLyBTeW1ib2woKTtcbnZhciBjb3JlTW9kdWxlID0gKHtcbiAgY3JlYXRlU2VsZWN0b3I6IGNyZWF0ZVNlbGVjdG9yMiA9IGNyZWF0ZVNlbGVjdG9yXG59ID0ge30pID0+ICh7XG4gIG5hbWU6IGNvcmVNb2R1bGVOYW1lLFxuICBpbml0KGFwaSwge1xuICAgIGJhc2VRdWVyeSxcbiAgICB0YWdUeXBlcyxcbiAgICByZWR1Y2VyUGF0aCxcbiAgICBzZXJpYWxpemVRdWVyeUFyZ3MsXG4gICAga2VlcFVudXNlZERhdGFGb3IsXG4gICAgcmVmZXRjaE9uTW91bnRPckFyZ0NoYW5nZSxcbiAgICByZWZldGNoT25Gb2N1cyxcbiAgICByZWZldGNoT25SZWNvbm5lY3QsXG4gICAgaW52YWxpZGF0aW9uQmVoYXZpb3JcbiAgfSwgY29udGV4dCkge1xuICAgIGVuYWJsZVBhdGNoZXMoKTtcbiAgICBhc3NlcnRDYXN0KHNlcmlhbGl6ZVF1ZXJ5QXJncyk7XG4gICAgY29uc3QgYXNzZXJ0VGFnVHlwZSA9ICh0YWcpID0+IHtcbiAgICAgIGlmICh0eXBlb2YgcHJvY2VzcyAhPT0gXCJ1bmRlZmluZWRcIiAmJiBwcm9jZXNzLmVudi5OT0RFX0VOViA9PT0gXCJkZXZlbG9wbWVudFwiKSB7XG4gICAgICAgIGlmICghdGFnVHlwZXMuaW5jbHVkZXModGFnLnR5cGUpKSB7XG4gICAgICAgICAgY29uc29sZS5lcnJvcihgVGFnIHR5cGUgJyR7dGFnLnR5cGV9JyB3YXMgdXNlZCwgYnV0IG5vdCBzcGVjaWZpZWQgaW4gXFxgdGFnVHlwZXNcXGAhYCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiB0YWc7XG4gICAgfTtcbiAgICBPYmplY3QuYXNzaWduKGFwaSwge1xuICAgICAgcmVkdWNlclBhdGgsXG4gICAgICBlbmRwb2ludHM6IHt9LFxuICAgICAgaW50ZXJuYWxBY3Rpb25zOiB7XG4gICAgICAgIG9uT25saW5lLFxuICAgICAgICBvbk9mZmxpbmUsXG4gICAgICAgIG9uRm9jdXMsXG4gICAgICAgIG9uRm9jdXNMb3N0XG4gICAgICB9LFxuICAgICAgdXRpbDoge31cbiAgICB9KTtcbiAgICBjb25zdCBzZWxlY3RvcnMgPSBidWlsZFNlbGVjdG9ycyh7XG4gICAgICBzZXJpYWxpemVRdWVyeUFyZ3MsXG4gICAgICByZWR1Y2VyUGF0aCxcbiAgICAgIGNyZWF0ZVNlbGVjdG9yOiBjcmVhdGVTZWxlY3RvcjJcbiAgICB9KTtcbiAgICBjb25zdCB7XG4gICAgICBzZWxlY3RJbnZhbGlkYXRlZEJ5LFxuICAgICAgc2VsZWN0Q2FjaGVkQXJnc0ZvclF1ZXJ5LFxuICAgICAgYnVpbGRRdWVyeVNlbGVjdG9yLFxuICAgICAgYnVpbGRJbmZpbml0ZVF1ZXJ5U2VsZWN0b3IsXG4gICAgICBidWlsZE11dGF0aW9uU2VsZWN0b3JcbiAgICB9ID0gc2VsZWN0b3JzO1xuICAgIHNhZmVBc3NpZ24oYXBpLnV0aWwsIHtcbiAgICAgIHNlbGVjdEludmFsaWRhdGVkQnksXG4gICAgICBzZWxlY3RDYWNoZWRBcmdzRm9yUXVlcnlcbiAgICB9KTtcbiAgICBjb25zdCB7XG4gICAgICBxdWVyeVRodW5rLFxuICAgICAgaW5maW5pdGVRdWVyeVRodW5rLFxuICAgICAgbXV0YXRpb25UaHVuayxcbiAgICAgIHBhdGNoUXVlcnlEYXRhLFxuICAgICAgdXBkYXRlUXVlcnlEYXRhLFxuICAgICAgdXBzZXJ0UXVlcnlEYXRhLFxuICAgICAgcHJlZmV0Y2gsXG4gICAgICBidWlsZE1hdGNoVGh1bmtBY3Rpb25zXG4gICAgfSA9IGJ1aWxkVGh1bmtzKHtcbiAgICAgIGJhc2VRdWVyeSxcbiAgICAgIHJlZHVjZXJQYXRoLFxuICAgICAgY29udGV4dCxcbiAgICAgIGFwaSxcbiAgICAgIHNlcmlhbGl6ZVF1ZXJ5QXJncyxcbiAgICAgIGFzc2VydFRhZ1R5cGUsXG4gICAgICBzZWxlY3RvcnNcbiAgICB9KTtcbiAgICBjb25zdCB7XG4gICAgICByZWR1Y2VyLFxuICAgICAgYWN0aW9uczogc2xpY2VBY3Rpb25zXG4gICAgfSA9IGJ1aWxkU2xpY2Uoe1xuICAgICAgY29udGV4dCxcbiAgICAgIHF1ZXJ5VGh1bmssXG4gICAgICBpbmZpbml0ZVF1ZXJ5VGh1bmssXG4gICAgICBtdXRhdGlvblRodW5rLFxuICAgICAgc2VyaWFsaXplUXVlcnlBcmdzLFxuICAgICAgcmVkdWNlclBhdGgsXG4gICAgICBhc3NlcnRUYWdUeXBlLFxuICAgICAgY29uZmlnOiB7XG4gICAgICAgIHJlZmV0Y2hPbkZvY3VzLFxuICAgICAgICByZWZldGNoT25SZWNvbm5lY3QsXG4gICAgICAgIHJlZmV0Y2hPbk1vdW50T3JBcmdDaGFuZ2UsXG4gICAgICAgIGtlZXBVbnVzZWREYXRhRm9yLFxuICAgICAgICByZWR1Y2VyUGF0aCxcbiAgICAgICAgaW52YWxpZGF0aW9uQmVoYXZpb3JcbiAgICAgIH1cbiAgICB9KTtcbiAgICBzYWZlQXNzaWduKGFwaS51dGlsLCB7XG4gICAgICBwYXRjaFF1ZXJ5RGF0YSxcbiAgICAgIHVwZGF0ZVF1ZXJ5RGF0YSxcbiAgICAgIHVwc2VydFF1ZXJ5RGF0YSxcbiAgICAgIHByZWZldGNoLFxuICAgICAgcmVzZXRBcGlTdGF0ZTogc2xpY2VBY3Rpb25zLnJlc2V0QXBpU3RhdGUsXG4gICAgICB1cHNlcnRRdWVyeUVudHJpZXM6IHNsaWNlQWN0aW9ucy5jYWNoZUVudHJpZXNVcHNlcnRlZFxuICAgIH0pO1xuICAgIHNhZmVBc3NpZ24oYXBpLmludGVybmFsQWN0aW9ucywgc2xpY2VBY3Rpb25zKTtcbiAgICBjb25zdCB7XG4gICAgICBtaWRkbGV3YXJlLFxuICAgICAgYWN0aW9uczogbWlkZGxld2FyZUFjdGlvbnNcbiAgICB9ID0gYnVpbGRNaWRkbGV3YXJlKHtcbiAgICAgIHJlZHVjZXJQYXRoLFxuICAgICAgY29udGV4dCxcbiAgICAgIHF1ZXJ5VGh1bmssXG4gICAgICBtdXRhdGlvblRodW5rLFxuICAgICAgaW5maW5pdGVRdWVyeVRodW5rLFxuICAgICAgYXBpLFxuICAgICAgYXNzZXJ0VGFnVHlwZSxcbiAgICAgIHNlbGVjdG9yc1xuICAgIH0pO1xuICAgIHNhZmVBc3NpZ24oYXBpLnV0aWwsIG1pZGRsZXdhcmVBY3Rpb25zKTtcbiAgICBzYWZlQXNzaWduKGFwaSwge1xuICAgICAgcmVkdWNlcixcbiAgICAgIG1pZGRsZXdhcmVcbiAgICB9KTtcbiAgICBjb25zdCB7XG4gICAgICBidWlsZEluaXRpYXRlUXVlcnksXG4gICAgICBidWlsZEluaXRpYXRlSW5maW5pdGVRdWVyeSxcbiAgICAgIGJ1aWxkSW5pdGlhdGVNdXRhdGlvbixcbiAgICAgIGdldFJ1bm5pbmdNdXRhdGlvblRodW5rLFxuICAgICAgZ2V0UnVubmluZ011dGF0aW9uc1RodW5rLFxuICAgICAgZ2V0UnVubmluZ1F1ZXJpZXNUaHVuayxcbiAgICAgIGdldFJ1bm5pbmdRdWVyeVRodW5rXG4gICAgfSA9IGJ1aWxkSW5pdGlhdGUoe1xuICAgICAgcXVlcnlUaHVuayxcbiAgICAgIG11dGF0aW9uVGh1bmssXG4gICAgICBpbmZpbml0ZVF1ZXJ5VGh1bmssXG4gICAgICBhcGksXG4gICAgICBzZXJpYWxpemVRdWVyeUFyZ3MsXG4gICAgICBjb250ZXh0XG4gICAgfSk7XG4gICAgc2FmZUFzc2lnbihhcGkudXRpbCwge1xuICAgICAgZ2V0UnVubmluZ011dGF0aW9uVGh1bmssXG4gICAgICBnZXRSdW5uaW5nTXV0YXRpb25zVGh1bmssXG4gICAgICBnZXRSdW5uaW5nUXVlcnlUaHVuayxcbiAgICAgIGdldFJ1bm5pbmdRdWVyaWVzVGh1bmtcbiAgICB9KTtcbiAgICByZXR1cm4ge1xuICAgICAgbmFtZTogY29yZU1vZHVsZU5hbWUsXG4gICAgICBpbmplY3RFbmRwb2ludChlbmRwb2ludE5hbWUsIGRlZmluaXRpb24pIHtcbiAgICAgICAgY29uc3QgYW55QXBpID0gYXBpO1xuICAgICAgICBjb25zdCBlbmRwb2ludCA9IGFueUFwaS5lbmRwb2ludHNbZW5kcG9pbnROYW1lXSA/Pz0ge307XG4gICAgICAgIGlmIChpc1F1ZXJ5RGVmaW5pdGlvbihkZWZpbml0aW9uKSkge1xuICAgICAgICAgIHNhZmVBc3NpZ24oZW5kcG9pbnQsIHtcbiAgICAgICAgICAgIG5hbWU6IGVuZHBvaW50TmFtZSxcbiAgICAgICAgICAgIHNlbGVjdDogYnVpbGRRdWVyeVNlbGVjdG9yKGVuZHBvaW50TmFtZSwgZGVmaW5pdGlvbiksXG4gICAgICAgICAgICBpbml0aWF0ZTogYnVpbGRJbml0aWF0ZVF1ZXJ5KGVuZHBvaW50TmFtZSwgZGVmaW5pdGlvbilcbiAgICAgICAgICB9LCBidWlsZE1hdGNoVGh1bmtBY3Rpb25zKHF1ZXJ5VGh1bmssIGVuZHBvaW50TmFtZSkpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChpc011dGF0aW9uRGVmaW5pdGlvbihkZWZpbml0aW9uKSkge1xuICAgICAgICAgIHNhZmVBc3NpZ24oZW5kcG9pbnQsIHtcbiAgICAgICAgICAgIG5hbWU6IGVuZHBvaW50TmFtZSxcbiAgICAgICAgICAgIHNlbGVjdDogYnVpbGRNdXRhdGlvblNlbGVjdG9yKCksXG4gICAgICAgICAgICBpbml0aWF0ZTogYnVpbGRJbml0aWF0ZU11dGF0aW9uKGVuZHBvaW50TmFtZSlcbiAgICAgICAgICB9LCBidWlsZE1hdGNoVGh1bmtBY3Rpb25zKG11dGF0aW9uVGh1bmssIGVuZHBvaW50TmFtZSkpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChpc0luZmluaXRlUXVlcnlEZWZpbml0aW9uKGRlZmluaXRpb24pKSB7XG4gICAgICAgICAgc2FmZUFzc2lnbihlbmRwb2ludCwge1xuICAgICAgICAgICAgbmFtZTogZW5kcG9pbnROYW1lLFxuICAgICAgICAgICAgc2VsZWN0OiBidWlsZEluZmluaXRlUXVlcnlTZWxlY3RvcihlbmRwb2ludE5hbWUsIGRlZmluaXRpb24pLFxuICAgICAgICAgICAgaW5pdGlhdGU6IGJ1aWxkSW5pdGlhdGVJbmZpbml0ZVF1ZXJ5KGVuZHBvaW50TmFtZSwgZGVmaW5pdGlvbilcbiAgICAgICAgICB9LCBidWlsZE1hdGNoVGh1bmtBY3Rpb25zKHF1ZXJ5VGh1bmssIGVuZHBvaW50TmFtZSkpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfTtcbiAgfVxufSk7XG5cbi8vIHNyYy9xdWVyeS9jb3JlL2luZGV4LnRzXG52YXIgY3JlYXRlQXBpID0gLyogQF9fUFVSRV9fICovIGJ1aWxkQ3JlYXRlQXBpKGNvcmVNb2R1bGUoKSk7XG5leHBvcnQge1xuICBRdWVyeVN0YXR1cyxcbiAgX05FVkVSLFxuICBidWlsZENyZWF0ZUFwaSxcbiAgY29weVdpdGhTdHJ1Y3R1cmFsU2hhcmluZyxcbiAgY29yZU1vZHVsZSxcbiAgY29yZU1vZHVsZU5hbWUsXG4gIGNyZWF0ZUFwaSxcbiAgZGVmYXVsdFNlcmlhbGl6ZVF1ZXJ5QXJncyxcbiAgZmFrZUJhc2VRdWVyeSxcbiAgZmV0Y2hCYXNlUXVlcnksXG4gIHJldHJ5LFxuICBzZXR1cExpc3RlbmVycyxcbiAgc2tpcFRva2VuXG59O1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9cnRrLXF1ZXJ5Lm1vZGVybi5tanMubWFwIiwiaW1wb3J0IHsgY3JlYXRlQXBpIGFzIGksIGZldGNoQmFzZVF1ZXJ5IGFzIG4gfSBmcm9tIFwiQHJlZHV4anMvdG9vbGtpdC9xdWVyeVwiO1xuY29uc3QgYyA9ICh7IGJhc2VVcmw6IG8sIHJlYWxtUGF0aDogciB9KSA9PiBpKHtcbiAgcmVkdWNlclBhdGg6IFwiZGV2aWNlQ2xpZW50XCIsXG4gIGJhc2VRdWVyeTogbih7XG4gICAgY3JlZGVudGlhbHM6IFwiaW5jbHVkZVwiLFxuICAgIHByZXBhcmVIZWFkZXJzOiAodCkgPT4gKHQuc2V0KFwiQ29udGVudC1UeXBlXCIsIFwiYXBwbGljYXRpb24vanNvblwiKSwgdC5zZXQoXCJBY2NlcHRcIiwgXCJhcHBsaWNhdGlvbi9qc29uXCIpLCB0LnNldChcIngtcmVxdWVzdGVkLXdpdGhcIiwgXCJmb3JnZXJvY2stc2RrXCIpLCB0LnNldChcIngtcmVxdWVzdGVkLXBsYXRmb3JtXCIsIFwiamF2YXNjcmlwdFwiKSwgdCksXG4gICAgYmFzZVVybDogb1xuICB9KSxcbiAgZW5kcG9pbnRzOiAodCkgPT4gKHtcbiAgICAvLyBvYXRoIGVuZHBvaW50c1xuICAgIGdldE9BdGhEZXZpY2VzOiB0LnF1ZXJ5KHtcbiAgICAgIHF1ZXJ5OiAoeyByZWFsbTogZSA9IHIsIHVzZXJJZDogcyB9KSA9PiBganNvbi9yZWFsbXMvJHtlfS91c2Vycy8ke3N9L2RldmljZXMvMmZhL29hdGg/X3F1ZXJ5RmlsdGVyPXRydWVgXG4gICAgfSksXG4gICAgZGVsZXRlT2F0aERldmljZTogdC5tdXRhdGlvbih7XG4gICAgICBxdWVyeTogKHsgcmVhbG06IGUgPSByLCB1c2VySWQ6IHMsIGRldmljZTogdSB9KSA9PiAoe1xuICAgICAgICBtZXRob2Q6IFwiREVMRVRFXCIsXG4gICAgICAgIHVybDogYGpzb24vcmVhbG1zLyR7ZX0vdXNlcnMvJHtzfS9kZXZpY2VzLzJmYS9vYXRoLyR7dS51dWlkfWAsXG4gICAgICAgIGJvZHk6IHVcbiAgICAgIH0pXG4gICAgfSksXG4gICAgLy8gcHVzaCBkZXZpY2VcbiAgICBnZXRQdXNoRGV2aWNlczogdC5xdWVyeSh7XG4gICAgICBxdWVyeTogKHsgcmVhbG06IGUgPSByLCB1c2VySWQ6IHMgfSkgPT4gYC9qc29uL3JlYWxtcy8ke2V9L3VzZXJzLyR7c30vZGV2aWNlcy8yZmEvcHVzaD9fcXVlcnlGaWx0ZXI9dHJ1ZWBcbiAgICB9KSxcbiAgICBkZWxldGVQdXNoRGV2aWNlOiB0Lm11dGF0aW9uKHtcbiAgICAgIHF1ZXJ5OiAoeyByZWFsbTogZSA9IHIsIHVzZXJJZDogcywgZGV2aWNlOiB1IH0pID0+ICh7XG4gICAgICAgIHVybDogYC9qc29uL3JlYWxtcy8ke2V9L3VzZXJzLyR7c30vZGV2aWNlcy8yZmEvcHVzaC8ke3UudXVpZH1gLFxuICAgICAgICBtZXRob2Q6IFwiREVMRVRFXCIsXG4gICAgICAgIGJvZHk6IHt9XG4gICAgICB9KVxuICAgIH0pLFxuICAgIC8vIHdlYmF1dGhuIGRldmljZXNcbiAgICBnZXRXZWJBdXRobkRldmljZXM6IHQucXVlcnkoe1xuICAgICAgcXVlcnk6ICh7IHJlYWxtOiBlID0gciwgdXNlcklkOiBzIH0pID0+IGAvanNvbi9yZWFsbXMvJHtlfS91c2Vycy8ke3N9L2RldmljZXMvMmZhL3dlYmF1dGhuP19xdWVyeUZpbHRlcj10cnVlYFxuICAgIH0pLFxuICAgIHVwZGF0ZVdlYkF1dGhuRGV2aWNlTmFtZTogdC5tdXRhdGlvbih7XG4gICAgICBxdWVyeTogKHsgcmVhbG06IGUgPSByLCB1c2VySWQ6IHMsIGRldmljZTogdSB9KSA9PiAoe1xuICAgICAgICB1cmw6IGAvanNvbi9yZWFsbXMvJHtlfS91c2Vycy8ke3N9L2RldmljZXMvMmZhL3dlYmF1dGhuLyR7dS51dWlkfWAsXG4gICAgICAgIG1ldGhvZDogXCJQVVRcIixcbiAgICAgICAgYm9keTogdVxuICAgICAgfSlcbiAgICB9KSxcbiAgICBkZWxldGVXZWJBdXRobkRldmljZU5hbWU6IHQubXV0YXRpb24oe1xuICAgICAgcXVlcnk6ICh7IHJlYWxtOiBlID0gciwgdXNlcklkOiBzLCBkZXZpY2U6IHUgfSkgPT4gKHtcbiAgICAgICAgdXJsOiBgL2pzb24vcmVhbG1zLyR7ZX0vdXNlcnMvJHtzfS9kZXZpY2VzLzJmYS93ZWJhdXRobi8ke3UudXVpZH1gLFxuICAgICAgICBtZXRob2Q6IFwiREVMRVRFXCIsXG4gICAgICAgIGJvZHk6IHVcbiAgICAgIH0pXG4gICAgfSksXG4gICAgZ2V0Qm91bmREZXZpY2VzOiB0Lm11dGF0aW9uKHtcbiAgICAgIHF1ZXJ5OiAoeyByZWFsbTogZSA9IHIsIHVzZXJJZDogcyB9KSA9PiBgL2pzb24vcmVhbG1zLyR7ZX0vdXNlcnMvJHtzfS9kZXZpY2VzLzJmYS9iaW5kaW5nP19xdWVyeUZpbHRlcj10cnVlYFxuICAgIH0pLFxuICAgIHVwZGF0ZUJvdW5kRGV2aWNlOiB0Lm11dGF0aW9uKHtcbiAgICAgIHF1ZXJ5OiAoeyByZWFsbTogZSA9IHIsIHVzZXJJZDogcywgZGV2aWNlOiB1IH0pID0+ICh7XG4gICAgICAgIHVybDogYC9qc29uL3JlYWxtcy9yb290L3JlYWxtcy8ke2V9L3VzZXJzLyR7c30vZGV2aWNlcy8yZmEvYmluZGluZy8ke3UudXVpZH1gLFxuICAgICAgICBtZXRob2Q6IFwiUFVUXCIsXG4gICAgICAgIGJvZHk6IHVcbiAgICAgIH0pXG4gICAgfSksXG4gICAgZGVsZXRlQm91bmREZXZpY2U6IHQubXV0YXRpb24oe1xuICAgICAgcXVlcnk6ICh7IHJlYWxtOiBlID0gciwgdXNlcklkOiBzLCBkZXZpY2U6IHUgfSkgPT4gKHtcbiAgICAgICAgdXJsOiBgL2pzb24vcmVhbG1zL3Jvb3QvcmVhbG1zLyR7ZX0vdXNlcnMvJHtzfS9kZXZpY2VzLzJmYS9iaW5kaW5nLyR7dS51dWlkfWAsXG4gICAgICAgIG1ldGhvZDogXCJERUxFVEVcIixcbiAgICAgICAgYm9keTogdVxuICAgICAgfSlcbiAgICB9KSxcbiAgICBnZXREZXZpY2VQcm9maWxlczogdC5xdWVyeSh7XG4gICAgICBxdWVyeTogKHsgcmVhbG06IGUgPSByLCB1c2VySWQ6IHMgfSkgPT4gYGpzb24vcmVhbG1zLyR7ZX0vdXNlcnMvJHtzfS9kZXZpY2VzL3Byb2ZpbGU/X3F1ZXJ5RmlsdGVyPXRydWVgXG4gICAgfSksXG4gICAgdXBkYXRlRGV2aWNlUHJvZmlsZTogdC5tdXRhdGlvbih7XG4gICAgICBxdWVyeTogKHsgcmVhbG06IGUgPSByLCB1c2VySWQ6IHMsIGRldmljZTogdSB9KSA9PiAoe1xuICAgICAgICB1cmw6IGBqc29uL3JlYWxtcy8ke2V9L3VzZXJzLyR7c30vZGV2aWNlcy9wcm9maWxlLyR7dS5pZGVudGlmaWVyfWAsXG4gICAgICAgIG1ldGhvZDogXCJQVVRcIixcbiAgICAgICAgYm9keTogdVxuICAgICAgfSlcbiAgICB9KSxcbiAgICBkZWxldGVEZXZpY2VQcm9maWxlOiB0Lm11dGF0aW9uKHtcbiAgICAgIHF1ZXJ5OiAoeyByZWFsbTogZSA9IHIsIHVzZXJJZDogcywgZGV2aWNlOiB1IH0pID0+ICh7XG4gICAgICAgIHVybDogYGpzb24vcmVhbG1zLyR7ZX0vdXNlcnMvJHtzfS9kZXZpY2VzL3Byb2ZpbGUvJHt1LmlkZW50aWZpZXJ9YCxcbiAgICAgICAgbWV0aG9kOiBcIkRFTEVURVwiLFxuICAgICAgICBib2R5OiB1XG4gICAgICB9KVxuICAgIH0pXG4gIH0pXG59KTtcbmV4cG9ydCB7XG4gIGMgYXMgZGV2aWNlU2VydmljZVxufTtcbiIsImltcG9ydCB7IGNvbmZpZ3VyZVN0b3JlIGFzIGMgfSBmcm9tIFwiQHJlZHV4anMvdG9vbGtpdFwiO1xuaW1wb3J0IHsgZGV2aWNlU2VydmljZSBhcyBkIH0gZnJvbSBcIi4vc2VydmljZXMvaW5kZXguanNcIjtcbmNvbnN0IHAgPSAobikgPT4ge1xuICBjb25zdCB7IG1pZGRsZXdhcmU6IGksIHJlZHVjZXJQYXRoOiBvLCByZWR1Y2VyOiBzLCBlbmRwb2ludHM6IHIgfSA9IGQoe1xuICAgIGJhc2VVcmw6IG4uc2VydmVyQ29uZmlnPy5iYXNlVXJsID8/IFwiXCIsXG4gICAgcmVhbG1QYXRoOiBuPy5yZWFsbVBhdGggPz8gXCJcIlxuICB9KSwgYSA9IGMoe1xuICAgIHJlZHVjZXI6IHtcbiAgICAgIFtvXTogc1xuICAgIH0sXG4gICAgbWlkZGxld2FyZTogKGUpID0+IGUoKS5jb25jYXQoaSlcbiAgfSk7XG4gIHJldHVybiB7XG4gICAgLyoqXG4gICAgICogT2F0aCBkZXZpY2UgbWFuYWdlbWVudCBtZXRob2RzLlxuICAgICAqXG4gICAgICogQHR5cGUge09hdGhNYW5hZ2VtZW50fVxuICAgICAqL1xuICAgIG9hdGg6IHtcbiAgICAgIC8qKlxuICAgICAgICogUmV0cmlldmVzIE9hdGggZGV2aWNlcyBiYXNlZCBvbiB0aGUgc3BlY2lmaWVkIHF1ZXJ5LlxuICAgICAgICpcbiAgICAgICAqIEBhc3luY1xuICAgICAgICogQGZ1bmN0aW9uIGdldFxuICAgICAgICogQHBhcmFtIHtSZXRyaWV2ZU9hdGhRdWVyeX0gcXVlcnkgLSBUaGUgcXVlcnkgdXNlZCB0byByZXRyaWV2ZSBPYXRoIGRldmljZXMuXG4gICAgICAgKiBAcmV0dXJucyB7UHJvbWlzZTxPQXRoUmVzcG9uc2UgfCB7IGVycm9yOiB1bmtub3duIH0+fSAtIEEgcHJvbWlzZSB0aGF0IHJlc29sdmVzIHRvIHRoZSByZXRyaWV2ZWQgZGF0YSBvciBhbiBlcnJvciBvYmplY3QgaWYgdGhlIHJlc3BvbnNlIGlzIG5vdCB2YWxpZC5cbiAgICAgICAqL1xuICAgICAgZ2V0OiBhc3luYyBmdW5jdGlvbihlKSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgY29uc3QgdCA9IGF3YWl0IGEuZGlzcGF0Y2goci5nZXRPQXRoRGV2aWNlcy5pbml0aWF0ZShlKSk7XG4gICAgICAgICAgaWYgKCF0IHx8ICF0LmRhdGEgfHwgIXQuZGF0YS5yZXN1bHQpXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJyZXNwb25zZSBkaWQgbm90IGNvbnRhaW4gZGF0YVwiKTtcbiAgICAgICAgICByZXR1cm4gdC5kYXRhLnJlc3VsdDtcbiAgICAgICAgfSBjYXRjaCAodCkge1xuICAgICAgICAgIHJldHVybiB7IGVycm9yOiB0IH07XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICAvKipcbiAgICAgICAqIERlbGV0ZXMgYW4gT2F0aCBkZXZpY2UgYmFzZWQgb24gdGhlIHByb3ZpZGVkIHF1ZXJ5IGFuZCBkZXZpY2UgaW5mb3JtYXRpb24uXG4gICAgICAgKlxuICAgICAgICogQGFzeW5jXG4gICAgICAgKiBAZnVuY3Rpb24gZGVsZXRlXG4gICAgICAgKiBAcGFyYW0ge0RlbGV0ZU9hdGhRdWVyeSAmIE9hdGhEZXZpY2V9IHF1ZXJ5IC0gVGhlIHF1ZXJ5IGFuZCBkZXZpY2UgaW5mb3JtYXRpb24gdXNlZCB0byBkZWxldGUgdGhlIE9hdGggZGV2aWNlLlxuICAgICAgICogQHJldHVybnMge1Byb21pc2U8RGVsZXRlZE9hdGhEZXZpY2UgfCB7IGVycm9yOiB1bmtub3duIH0+fSAtIEEgcHJvbWlzZSB0aGF0IHJlc29sdmVzIHRvIHRoZSByZXNwb25zZSBkYXRhIG9yIGFuIGVycm9yIG9iamVjdCBpZiB0aGUgcmVzcG9uc2UgaXMgbm90IHZhbGlkLlxuICAgICAgICovXG4gICAgICBkZWxldGU6IGFzeW5jIGZ1bmN0aW9uKGUpIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBjb25zdCB0ID0gYXdhaXQgYS5kaXNwYXRjaChyLmRlbGV0ZU9hdGhEZXZpY2UuaW5pdGlhdGUoZSkpO1xuICAgICAgICAgIGlmICghdCB8fCAhdC5kYXRhKVxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwicmVzcG9uc2UgZGlkIG5vdCBjb250YWluIGRhdGFcIik7XG4gICAgICAgICAgcmV0dXJuIHQuZGF0YTtcbiAgICAgICAgfSBjYXRjaCAodCkge1xuICAgICAgICAgIHJldHVybiB7IGVycm9yOiB0IH07XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9LFxuICAgIC8qKlxuICAgICAqIFB1c2ggZGV2aWNlIG1hbmFnZW1lbnQgbWV0aG9kcy5cbiAgICAgKlxuICAgICAqIEB0eXBlIHtQdXNoTWFuYWdlbWVudH1cbiAgICAgKi9cbiAgICBwdXNoOiB7XG4gICAgICAvKipcbiAgICAgICAqIFJldHJpZXZlcyBQdXNoIGRldmljZXMgYmFzZWQgb24gdGhlIHNwZWNpZmllZCBxdWVyeS5cbiAgICAgICAqXG4gICAgICAgKiBAYXN5bmNcbiAgICAgICAqIEBmdW5jdGlvbiBnZXRcbiAgICAgICAqIEBwYXJhbSB7UHVzaERldmljZVF1ZXJ5fSBxdWVyeSAtIFRoZSBxdWVyeSB1c2VkIHRvIHJldHJpZXZlIFB1c2ggZGV2aWNlcy5cbiAgICAgICAqIEByZXR1cm5zIHtQcm9taXNlPFB1c2hEZXZpY2VbXSB8IHsgZXJyb3I6IHVua25vd24gfT59IC0gQSBwcm9taXNlIHRoYXQgcmVzb2x2ZXMgdG8gdGhlIHJldHJpZXZlZCBkYXRhIG9yIGFuIGVycm9yIG9iamVjdCBpZiB0aGUgcmVzcG9uc2UgaXMgbm90IHZhbGlkLlxuICAgICAgICovXG4gICAgICBnZXQ6IGFzeW5jIGZ1bmN0aW9uKGUpIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBjb25zdCB0ID0gYXdhaXQgYS5kaXNwYXRjaChyLmdldFB1c2hEZXZpY2VzLmluaXRpYXRlKGUpKTtcbiAgICAgICAgICBpZiAoIXQgfHwgIXQuZGF0YSB8fCAhdC5kYXRhLnJlc3VsdClcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcInJlc3BvbnNlIGRpZCBub3QgY29udGFpbiBkYXRhXCIpO1xuICAgICAgICAgIHJldHVybiB0LmRhdGEucmVzdWx0O1xuICAgICAgICB9IGNhdGNoICh0KSB7XG4gICAgICAgICAgcmV0dXJuIHsgZXJyb3I6IHQgfTtcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIC8qKlxuICAgICAgICogRGVsZXRlcyBhIFB1c2ggZGV2aWNlIGJhc2VkIG9uIHRoZSBwcm92aWRlZCBxdWVyeS5cbiAgICAgICAqXG4gICAgICAgKiBAYXN5bmNcbiAgICAgICAqIEBmdW5jdGlvbiBkZWxldGVcbiAgICAgICAqIEBwYXJhbSB7RGVsZXRlRGV2aWNlUXVlcnl9IHF1ZXJ5IC0gVGhlIHF1ZXJ5IHVzZWQgdG8gZGVsZXRlIHRoZSBQdXNoIGRldmljZS5cbiAgICAgICAqIEByZXR1cm5zIHtQcm9taXNlPFB1c2hEZXZpY2UgfCB7IGVycm9yOiB1bmtub3duIH0+fSAtIEEgcHJvbWlzZSB0aGF0IHJlc29sdmVzIHRvIHRoZSByZXNwb25zZSBkYXRhIG9yIGFuIGVycm9yIG9iamVjdCBpZiB0aGUgcmVzcG9uc2UgaXMgbm90IHZhbGlkLlxuICAgICAgICovXG4gICAgICBkZWxldGU6IGFzeW5jIGZ1bmN0aW9uKGUpIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBjb25zdCB0ID0gYXdhaXQgYS5kaXNwYXRjaChyLmRlbGV0ZVB1c2hEZXZpY2UuaW5pdGlhdGUoZSkpO1xuICAgICAgICAgIGlmICghdCB8fCAhdC5kYXRhKVxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwicmVzcG9uc2UgZGlkIG5vdCBjb250YWluIGRhdGFcIik7XG4gICAgICAgICAgcmV0dXJuIHQuZGF0YTtcbiAgICAgICAgfSBjYXRjaCAodCkge1xuICAgICAgICAgIHJldHVybiB7IGVycm9yOiB0IH07XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9LFxuICAgIC8qKlxuICAgICAqIFdlYkF1dGhuIGRldmljZSBtYW5hZ2VtZW50IG1ldGhvZHMuXG4gICAgICpcbiAgICAgKiBAdHlwZSB7V2ViQXV0aG5NYW5hZ2VtZW50fVxuICAgICAqL1xuICAgIHdlYkF1dGhuOiB7XG4gICAgICAvKipcbiAgICAgICAqIFJldHJpZXZlcyBXZWJBdXRobiBkZXZpY2VzIGJhc2VkIG9uIHRoZSBzcGVjaWZpZWQgcXVlcnkuXG4gICAgICAgKlxuICAgICAgICogQGFzeW5jXG4gICAgICAgKiBAZnVuY3Rpb24gZ2V0XG4gICAgICAgKiBAcGFyYW0ge1dlYkF1dGhuUXVlcnl9IHF1ZXJ5IC0gVGhlIHF1ZXJ5IHVzZWQgdG8gcmV0cmlldmUgV2ViQXV0aG4gZGV2aWNlcy5cbiAgICAgICAqIEByZXR1cm5zIHtQcm9taXNlPFdlYkF1dGhuRGV2aWNlc1Jlc3BvbnNlIHwgeyBlcnJvcjogdW5rbm93biB9Pn0gLSBBIHByb21pc2UgdGhhdCByZXNvbHZlcyB0byB0aGUgcmV0cmlldmVkIGRhdGEgb3IgYW4gZXJyb3Igb2JqZWN0IGlmIHRoZSByZXNwb25zZSBpcyBub3QgdmFsaWQuXG4gICAgICAgKi9cbiAgICAgIGdldDogYXN5bmMgZnVuY3Rpb24oZSkge1xuICAgICAgICB0cnkge1xuICAgICAgICAgIGNvbnN0IHQgPSBhd2FpdCBhLmRpc3BhdGNoKHIuZ2V0V2ViQXV0aG5EZXZpY2VzLmluaXRpYXRlKGUpKTtcbiAgICAgICAgICBpZiAoIXQgfHwgIXQuZGF0YSB8fCAhdC5kYXRhLnJlc3VsdClcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcInJlc3BvbnNlIGRpZCBub3QgY29udGFpbiBkYXRhXCIpO1xuICAgICAgICAgIHJldHVybiB0LmRhdGEucmVzdWx0O1xuICAgICAgICB9IGNhdGNoICh0KSB7XG4gICAgICAgICAgcmV0dXJuIHsgZXJyb3I6IHQgfTtcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIC8qKlxuICAgICAgICogVXBkYXRlcyB0aGUgbmFtZSBvZiBhIFdlYkF1dGhuIGRldmljZSBiYXNlZCBvbiB0aGUgcHJvdmlkZWQgcXVlcnkgYW5kIGJvZHkuXG4gICAgICAgKlxuICAgICAgICogQGFzeW5jXG4gICAgICAgKiBAZnVuY3Rpb24gdXBkYXRlXG4gICAgICAgKiBAcGFyYW0ge1dlYkF1dGhuUXVlcnlXaXRoVVVJRCAmIHsgZGV2aWNlOiBXZWJBdXRobkJvZHkgfSB9IHF1ZXJ5IC0gVGhlIHF1ZXJ5IGFuZCBib2R5IHVzZWQgdG8gdXBkYXRlIHRoZSBXZWJBdXRobiBkZXZpY2UgbmFtZS5cbiAgICAgICAqIEByZXR1cm5zIHtQcm9taXNlPFVwZGF0ZWRXZWJBdXRobkRldmljZSB8IHsgZXJyb3I6IHVua25vd24gfT59IC0gQSBwcm9taXNlIHRoYXQgcmVzb2x2ZXMgdG8gdGhlIHJlc3BvbnNlIGRhdGEgb3IgYW4gZXJyb3Igb2JqZWN0IGlmIHRoZSByZXNwb25zZSBpcyBub3QgdmFsaWQuXG4gICAgICAgKi9cbiAgICAgIHVwZGF0ZTogYXN5bmMgZnVuY3Rpb24oZSkge1xuICAgICAgICB0cnkge1xuICAgICAgICAgIGNvbnN0IHQgPSBhd2FpdCBhLmRpc3BhdGNoKHIudXBkYXRlV2ViQXV0aG5EZXZpY2VOYW1lLmluaXRpYXRlKGUpKTtcbiAgICAgICAgICBpZiAoIXQgfHwgIXQuZGF0YSlcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcInJlc3BvbnNlIGRpZCBub3QgY29udGFpbiBkYXRhXCIpO1xuICAgICAgICAgIHJldHVybiB0LmRhdGE7XG4gICAgICAgIH0gY2F0Y2ggKHQpIHtcbiAgICAgICAgICByZXR1cm4geyBlcnJvcjogdCB9O1xuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgLyoqXG4gICAgICAgKiBEZWxldGVzIGEgV2ViQXV0aG4gZGV2aWNlIGJhc2VkIG9uIHRoZSBwcm92aWRlZCBxdWVyeSBhbmQgYm9keS5cbiAgICAgICAqXG4gICAgICAgKiBAYXN5bmNcbiAgICAgICAqIEBmdW5jdGlvbiBkZWxldGVcbiAgICAgICAqIEBwYXJhbSB7V2ViQXV0aG5RdWVyeVdpdGhVVUlEICYgeyBkZXZpY2U6IFdlYkF1dGhuQm9keSB9IH0gcXVlcnkgLSBUaGUgcXVlcnkgYW5kIGJvZHkgdXNlZCB0byBkZWxldGUgdGhlIFdlYkF1dGhuIGRldmljZS5cbiAgICAgICAqIEByZXR1cm5zIHtQcm9taXNlPFdlYkF1dGhuRGV2aWNlIHwgeyBlcnJvcjogdW5rbm93biB9Pn0gLSBBIHByb21pc2UgdGhhdCByZXNvbHZlcyB0byB0aGUgcmVzcG9uc2UgZGF0YSBvciBhbiBlcnJvciBvYmplY3QgaWYgdGhlIHJlc3BvbnNlIGlzIG5vdCB2YWxpZC5cbiAgICAgICAqL1xuICAgICAgZGVsZXRlOiBhc3luYyBmdW5jdGlvbihlKSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgY29uc3QgdCA9IGF3YWl0IGEuZGlzcGF0Y2goci5kZWxldGVXZWJBdXRobkRldmljZU5hbWUuaW5pdGlhdGUoZSkpO1xuICAgICAgICAgIGlmICghdCB8fCAhdC5kYXRhKVxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwicmVzcG9uc2UgZGlkIG5vdCBjb250YWluIGRhdGFcIik7XG4gICAgICAgICAgcmV0dXJuIHQuZGF0YTtcbiAgICAgICAgfSBjYXRjaCAodCkge1xuICAgICAgICAgIHJldHVybiB7IGVycm9yOiB0IH07XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9LFxuICAgIC8qKlxuICAgICAqIEJvdW5kIGRldmljZXMgbWFuYWdlbWVudCBtZXRob2RzLlxuICAgICAqXG4gICAgICogQHR5cGUge0JvdW5kRGV2aWNlc01hbmFnZW1lbnR9XG4gICAgICovXG4gICAgYm91bmQ6IHtcbiAgICAgIC8qKlxuICAgICAgICogUmV0cmlldmVzIGJvdW5kIGRldmljZXMgYmFzZWQgb24gdGhlIHNwZWNpZmllZCBxdWVyeS5cbiAgICAgICAqXG4gICAgICAgKiBAYXN5bmNcbiAgICAgICAqIEBmdW5jdGlvbiBnZXRcbiAgICAgICAqIEBwYXJhbSB7Qm91bmREZXZpY2VRdWVyeX0gcXVlcnkgLSBUaGUgcXVlcnkgdXNlZCB0byByZXRyaWV2ZSBib3VuZCBkZXZpY2VzLlxuICAgICAgICogQHJldHVybnMge1Byb21pc2U8RGV2aWNlW10gfCB7IGVycm9yOiB1bmtub3duIH0+fSAtIEEgcHJvbWlzZSB0aGF0IHJlc29sdmVzIHRvIHRoZSByZXRyaWV2ZWQgZGF0YSBvciBhbiBlcnJvciBvYmplY3QgaWYgdGhlIHJlc3BvbnNlIGlzIG5vdCB2YWxpZC5cbiAgICAgICAqL1xuICAgICAgZ2V0OiBhc3luYyBmdW5jdGlvbihlKSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgY29uc3QgdCA9IGF3YWl0IGEuZGlzcGF0Y2goci5nZXRCb3VuZERldmljZXMuaW5pdGlhdGUoZSkpO1xuICAgICAgICAgIGlmICghdCB8fCAhdC5kYXRhIHx8ICF0LmRhdGEucmVzdWx0KVxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwicmVzcG9uc2UgZGlkIG5vdCBjb250YWluIGRhdGFcIik7XG4gICAgICAgICAgcmV0dXJuIHQuZGF0YS5yZXN1bHQ7XG4gICAgICAgIH0gY2F0Y2ggKHQpIHtcbiAgICAgICAgICByZXR1cm4geyBlcnJvcjogdCB9O1xuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgLyoqXG4gICAgICAgKiBEZWxldGVzIGEgYm91bmQgZGV2aWNlIGJhc2VkIG9uIHRoZSBwcm92aWRlZCBxdWVyeS5cbiAgICAgICAqXG4gICAgICAgKiBAYXN5bmNcbiAgICAgICAqIEBmdW5jdGlvbiBkZWxldGVcbiAgICAgICAqIEBwYXJhbSB7Qm91bmREZXZpY2VRdWVyeX0gcXVlcnkgLSBUaGUgcXVlcnkgdXNlZCB0byBkZWxldGUgdGhlIGJvdW5kIGRldmljZS5cbiAgICAgICAqIEByZXR1cm5zIHtQcm9taXNlPERldmljZSB8IHsgZXJyb3I6IHVua25vd24gfT59IC0gQSBwcm9taXNlIHRoYXQgcmVzb2x2ZXMgdG8gdGhlIHJlc3BvbnNlIGRhdGEgb3IgYW4gZXJyb3Igb2JqZWN0IGlmIHRoZSByZXNwb25zZSBpcyBub3QgdmFsaWQuXG4gICAgICAgKi9cbiAgICAgIGRlbGV0ZTogYXN5bmMgZnVuY3Rpb24oZSkge1xuICAgICAgICB0cnkge1xuICAgICAgICAgIGNvbnN0IHQgPSBhd2FpdCBhLmRpc3BhdGNoKHIuZGVsZXRlQm91bmREZXZpY2UuaW5pdGlhdGUoZSkpO1xuICAgICAgICAgIGlmICghdCB8fCAhdC5kYXRhIHx8ICF0LmRhdGEucmVzdWx0KVxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwicmVzcG9uc2UgZGlkIG5vdCBjb250YWluIGRhdGFcIik7XG4gICAgICAgICAgcmV0dXJuIHQuZGF0YS5yZXN1bHQ7XG4gICAgICAgIH0gY2F0Y2ggKHQpIHtcbiAgICAgICAgICByZXR1cm4geyBlcnJvcjogdCB9O1xuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgLyoqXG4gICAgICAgKiBVcGRhdGVzIHRoZSBuYW1lIG9mIGEgYm91bmQgZGV2aWNlIGJhc2VkIG9uIHRoZSBwcm92aWRlZCBxdWVyeS5cbiAgICAgICAqXG4gICAgICAgKiBAYXN5bmNcbiAgICAgICAqIEBmdW5jdGlvbiB1cGRhdGVcbiAgICAgICAqIEBwYXJhbSB7Qm91bmREZXZpY2VRdWVyeX0gcXVlcnkgLSBUaGUgcXVlcnkgdXNlZCB0byB1cGRhdGUgdGhlIGJvdW5kIGRldmljZSBuYW1lLlxuICAgICAgICogQHJldHVybnMge1Byb21pc2U8RGV2aWNlIHwgeyBlcnJvcjogdW5rbm93biB9Pn0gLSBBIHByb21pc2UgdGhhdCByZXNvbHZlcyB0byB0aGUgcmVzcG9uc2UgZGF0YSBvciBhbiBlcnJvciBvYmplY3QgaWYgdGhlIHJlc3BvbnNlIGlzIG5vdCB2YWxpZC5cbiAgICAgICAqL1xuICAgICAgdXBkYXRlOiBhc3luYyBmdW5jdGlvbihlKSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgY29uc3QgdCA9IGF3YWl0IGEuZGlzcGF0Y2goci51cGRhdGVCb3VuZERldmljZS5pbml0aWF0ZShlKSk7XG4gICAgICAgICAgaWYgKCF0IHx8ICF0LmRhdGEpXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJyZXNwb25zZSBkaWQgbm90IGNvbnRhaW4gZGF0YVwiKTtcbiAgICAgICAgICByZXR1cm4gdC5kYXRhO1xuICAgICAgICB9IGNhdGNoICh0KSB7XG4gICAgICAgICAgcmV0dXJuIHsgZXJyb3I6IHQgfTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0sXG4gICAgcHJvZmlsZToge1xuICAgICAgLyoqXG4gICAgICAgKiBHZXQgcHJvZmlsZSBkZXZpY2VzXG4gICAgICAgKlxuICAgICAgICogQGFzeW5jXG4gICAgICAgKiBAZnVuY3Rpb24gdXBkYXRlXG4gICAgICAgKiBAcGFyYW0ge0dldFByb2ZpbGVEZXZpY2V9IHF1ZXJ5IC0gVGhlIHF1ZXJ5IHVzZWQgdG8gZ2V0IHByb2ZpbGUgZGV2aWNlc1xuICAgICAgICogQHJldHVybnMge1Byb21pc2U8RGV2aWNlW10gfCB7IGVycm9yOiB1bmtub3duIH0+fSAtIEEgcHJvbWlzZSB0aGF0IHJlc29sdmVzIHRvIHRoZSByZXNwb25zZSBkYXRhIG9yIGFuIGVycm9yIG9iamVjdCBpZiB0aGUgcmVzcG9uc2UgaXMgbm90IHZhbGlkLlxuICAgICAgICovXG4gICAgICBnZXQ6IGFzeW5jIGZ1bmN0aW9uKGUpIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBjb25zdCB0ID0gYXdhaXQgYS5kaXNwYXRjaChyLmdldERldmljZVByb2ZpbGVzLmluaXRpYXRlKGUpKTtcbiAgICAgICAgICBpZiAoIXQgfHwgIXQuZGF0YSB8fCAhdC5kYXRhLnJlc3VsdClcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcInJlc3BvbnNlIGRpZCBub3QgY29udGFpbiBkYXRhXCIpO1xuICAgICAgICAgIHJldHVybiB0LmRhdGEucmVzdWx0O1xuICAgICAgICB9IGNhdGNoICh0KSB7XG4gICAgICAgICAgcmV0dXJuIHsgZXJyb3I6IHQgfTtcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIC8qKlxuICAgICAgICogR2V0IHByb2ZpbGUgZGV2aWNlc1xuICAgICAgICpcbiAgICAgICAqIEBhc3luY1xuICAgICAgICogQGZ1bmN0aW9uIHVwZGF0ZVxuICAgICAgICogQHBhcmFtIHtQcm9maWxlRGV2aWNlc1F1ZXJ5fSBxdWVyeSAtIFRoZSBxdWVyeSB1c2VkIHRvIHVwZGF0ZSBhIHByb2ZpbGUgZGV2aWNlXG4gICAgICAgKiBAcmV0dXJucyB7UHJvbWlzZTxQcm9maWxlRGV2aWNlIHwgeyBlcnJvcjogdW5rbm93biB9Pn0gLSBBIHByb21pc2UgdGhhdCByZXNvbHZlcyB0byB0aGUgcmVzcG9uc2UgZGF0YSBvciBvciBhbiBlcnJvciBvYmplY3QgaWYgdGhlIHJlc3BvbnNlIGlzIG5vdCB2YWxpZC5cbiAgICAgICAqL1xuICAgICAgdXBkYXRlOiBhc3luYyBmdW5jdGlvbihlKSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgY29uc3QgdCA9IGF3YWl0IGEuZGlzcGF0Y2goci51cGRhdGVEZXZpY2VQcm9maWxlLmluaXRpYXRlKGUpKTtcbiAgICAgICAgICBpZiAoIXQgfHwgIXQuZGF0YSlcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcInJlc3BvbnNlIGRpZCBub3QgY29udGFpbiBkYXRhXCIpO1xuICAgICAgICAgIHJldHVybiB0LmRhdGE7XG4gICAgICAgIH0gY2F0Y2ggKHQpIHtcbiAgICAgICAgICByZXR1cm4geyBlcnJvcjogdCB9O1xuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgLyoqXG4gICAgICAgKiBHZXQgcHJvZmlsZSBkZXZpY2VzXG4gICAgICAgKlxuICAgICAgICogQGFzeW5jXG4gICAgICAgKiBAZnVuY3Rpb24gdXBkYXRlXG4gICAgICAgKiBAcGFyYW0ge1Byb2ZpbGVEZXZpY2VzUXVlcnl9IHF1ZXJ5IC0gVGhlIHF1ZXJ5IHVzZWQgdG8gdXBkYXRlIGEgcHJvZmlsZSBkZXZpY2VcbiAgICAgICAqIEByZXR1cm5zIHtQcm9taXNlPFByb2ZpbGVEZXZpY2UgfCB7IGVycm9yOiB1bmtub3duIH0+fSAtIEEgcHJvbWlzZSB0aGF0IHJlc29sdmVzIHRvIHRoZSByZXNwb25zZSBkYXRhIG9yIGFuIGVycm9yIG9iamVjdCBpZiB0aGUgcmVzcG9uc2UgaXMgbm90IHZhbGlkLlxuICAgICAgICovXG4gICAgICBkZWxldGU6IGFzeW5jIGZ1bmN0aW9uKGUpIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBjb25zdCB0ID0gYXdhaXQgYS5kaXNwYXRjaChyLmRlbGV0ZURldmljZVByb2ZpbGUuaW5pdGlhdGUoZSkpO1xuICAgICAgICAgIGlmICghdCB8fCAhdC5kYXRhKVxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwicmVzcG9uc2UgZGlkIG5vdCBjb250YWluIGRhdGFcIik7XG4gICAgICAgICAgcmV0dXJuIHQuZGF0YTtcbiAgICAgICAgfSBjYXRjaCAodCkge1xuICAgICAgICAgIHJldHVybiB7IGVycm9yOiB0IH07XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH07XG59O1xuZXhwb3J0IHtcbiAgcCBhcyBkZXZpY2VDbGllbnRcbn07XG4iLCJjb25zdCBvID0gW1xuICBcInVzZXJBZ2VudFwiLFxuICBcImFwcE5hbWVcIixcbiAgXCJhcHBDb2RlTmFtZVwiLFxuICBcImFwcFZlcnNpb25cIixcbiAgXCJhcHBNaW5vclZlcnNpb25cIixcbiAgXCJidWlsZElEXCIsXG4gIFwicHJvZHVjdFwiLFxuICBcInByb2R1Y3RTdWJcIixcbiAgXCJ2ZW5kb3JcIixcbiAgXCJ2ZW5kb3JTdWJcIixcbiAgXCJicm93c2VyTGFuZ3VhZ2VcIlxuXSwgYSA9IFtcbiAgXCJmb250TmFtZXNcIixcbiAgXCJkaXNwbGF5UHJvcHNcIixcbiAgXCJicm93c2VyUHJvcHNcIixcbiAgXCJoYXJkd2FyZVByb3BzXCIsXG4gIFwicGxhdGZvcm1Qcm9wc1wiXG5dLCBlID0gM2U0LCByID0ge1xuICBtYWM6IFtcIk1hY2ludG9zaFwiLCBcIk1hY0ludGVsXCIsIFwiTWFjUFBDXCIsIFwiTWFjNjhLXCJdLFxuICB3aW5kb3dzOiBbXCJXaW4zMlwiLCBcIldpbjY0XCIsIFwiV2luZG93c1wiLCBcIldpbkNFXCJdLFxuICBpb3M6IFtcImlQaG9uZVwiLCBcImlQYWRcIiwgXCJpUG9kXCJdXG59LCBuID0gW1wid2lkdGhcIiwgXCJoZWlnaHRcIiwgXCJwaXhlbERlcHRoXCIsIFwib3JpZW50YXRpb24uYW5nbGVcIl0sIHMgPSBbXG4gIFwiY3Vyc2l2ZVwiLFxuICBcIm1vbm9zcGFjZVwiLFxuICBcInNlcmlmXCIsXG4gIFwic2Fucy1zZXJpZlwiLFxuICBcImZhbnRhc3lcIixcbiAgXCJBcmlhbFwiLFxuICBcIkFyaWFsIEJsYWNrXCIsXG4gIFwiQXJpYWwgTmFycm93XCIsXG4gIFwiQXJpYWwgUm91bmRlZCBNVCBCb2xkXCIsXG4gIFwiQm9va21hbiBPbGQgU3R5bGVcIixcbiAgXCJCcmFkbGV5IEhhbmQgSVRDXCIsXG4gIFwiQ2VudHVyeVwiLFxuICBcIkNlbnR1cnkgR290aGljXCIsXG4gIFwiQ29taWMgU2FucyBNU1wiLFxuICBcIkNvdXJpZXJcIixcbiAgXCJDb3VyaWVyIE5ld1wiLFxuICBcIkdlb3JnaWFcIixcbiAgXCJHZW50aXVtXCIsXG4gIFwiSW1wYWN0XCIsXG4gIFwiS2luZ1wiLFxuICBcIkx1Y2lkYSBDb25zb2xlXCIsXG4gIFwiTGFsaXRcIixcbiAgXCJNb2RlbmFcIixcbiAgXCJNb25vdHlwZSBDb3JzaXZhXCIsXG4gIFwiUGFweXJ1c1wiLFxuICBcIlRhaG9tYVwiLFxuICBcIlRlWFwiLFxuICBcIlRpbWVzXCIsXG4gIFwiVGltZXMgTmV3IFJvbWFuXCIsXG4gIFwiVHJlYnVjaGV0IE1TXCIsXG4gIFwiVmVyZGFuYVwiLFxuICBcIlZlcm9uYVwiXG5dLCBpID0gW1xuICBcImNwdUNsYXNzXCIsXG4gIFwiZGV2aWNlTWVtb3J5XCIsXG4gIFwiaGFyZHdhcmVDb25jdXJyZW5jeVwiLFxuICBcIm1heFRvdWNoUG9pbnRzXCIsXG4gIFwib3NjcHVcIlxuXSwgdCA9IFtcImxhbmd1YWdlXCIsIFwicGxhdGZvcm1cIiwgXCJ1c2VyTGFuZ3VhZ2VcIiwgXCJzeXN0ZW1MYW5ndWFnZVwiXTtcbmV4cG9ydCB7XG4gIG8gYXMgYnJvd3NlclByb3BzLFxuICBhIGFzIGNvbmZpZ3VyYWJsZUNhdGVnb3JpZXMsXG4gIGUgYXMgZGVsYXksXG4gIHIgYXMgZGV2aWNlUGxhdGZvcm1zLFxuICBuIGFzIGRpc3BsYXlQcm9wcyxcbiAgcyBhcyBmb250TmFtZXMsXG4gIGkgYXMgaGFyZHdhcmVQcm9wcyxcbiAgdCBhcyBwbGF0Zm9ybVByb3BzXG59O1xuIiwiY2xhc3MgcCB7XG4gIC8qKlxuICAgKiBAbWV0aG9kIHJlZHVjZVRvT2JqZWN0IC0gZ29lcyBvbmUgdG8gdHdvIGxldmVscyBpbnRvIHNvdXJjZSB0byBjb2xsZWN0IGF0dHJpYnV0ZVxuICAgKiBAcGFyYW0gcHJvcHMgLSBhcnJheSBvZiBzdHJpbmdzOyBjYW4gdXNlIGRvdCBub3RhdGlvbiBmb3IgdHdvIGxldmVsIGxvb2t1cFxuICAgKiBAcGFyYW0gc3JjIC0gc291cmNlIG9mIGF0dHJpYnV0ZXMgdG8gY2hlY2tcbiAgICovXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZVxuICByZWR1Y2VUb09iamVjdChuLCB0KSB7XG4gICAgcmV0dXJuIG4ucmVkdWNlKChlLCBvKSA9PiB7XG4gICAgICBpZiAoby5pbmNsdWRlcyhcIi5cIikpIHtcbiAgICAgICAgY29uc3QgbCA9IG8uc3BsaXQoXCIuXCIpLCBkID0gbFswXSwgaSA9IGxbMV0sIHMgPSB0W2RdICYmIHRbZF1baV07XG4gICAgICAgIGVbaV0gPSBzID8/IFwiXCI7XG4gICAgICB9IGVsc2VcbiAgICAgICAgZVtvXSA9IHRbb10gIT0gbnVsbCA/IHRbb10gOiBudWxsO1xuICAgICAgcmV0dXJuIGU7XG4gICAgfSwge30pO1xuICB9XG4gIC8qKlxuICAgKiBAbWV0aG9kIHJlZHVjZVRvU3RyaW5nIC0gZ29lcyBvbmUgbGV2ZWwgaW50byBzb3VyY2UgdG8gY29sbGVjdCBhdHRyaWJ1dGVcbiAgICogQHBhcmFtIHByb3BzIC0gYXJyYXkgb2Ygc3RyaW5nc1xuICAgKiBAcGFyYW0gc3JjIC0gc291cmNlIG9mIGF0dHJpYnV0ZXMgdG8gY2hlY2tcbiAgICovXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZVxuICByZWR1Y2VUb1N0cmluZyhuLCB0KSB7XG4gICAgcmV0dXJuIG4ucmVkdWNlKChlLCBvKSA9PiAoZSA9IGAke2V9JHt0W29dLmZpbGVuYW1lfTtgLCBlKSwgXCJcIik7XG4gIH1cbn1cbmV4cG9ydCB7XG4gIHAgYXMgZGVmYXVsdFxufTtcbiIsImltcG9ydCByIGZyb20gXCIuLi9jb25maWcvaW5kZXguanNcIjtcbmNsYXNzIHQge1xuICBzdGF0aWMgZW5hYmxlZCgpIHtcbiAgICBjb25zdCB7IGxvZ0xldmVsOiBvIH0gPSByLmdldCgpO1xuICAgIHJldHVybiB7XG4gICAgICBub25lOiAwLFxuICAgICAgZXJyb3I6IDI1LFxuICAgICAgd2FybjogNTAsXG4gICAgICBpbmZvOiA3NSxcbiAgICAgIGRlYnVnOiAxMDBcbiAgICB9W29dO1xuICB9XG4gIHN0YXRpYyBpbmZvKC4uLm8pIHtcbiAgICBjb25zdCB7IGxvZ2dlcjogZSB9ID0gci5nZXQoKTtcbiAgICB0aGlzLmVuYWJsZWQoKSA+PSA1MCAmJiAoZSAmJiBlLmluZm8gPyBlLmluZm8oLi4ubykgOiBjb25zb2xlLmluZm8oLi4ubykpO1xuICB9XG4gIHN0YXRpYyB3YXJuKC4uLm8pIHtcbiAgICBjb25zdCB7IGxvZ2dlcjogZSB9ID0gci5nZXQoKTtcbiAgICB0aGlzLmVuYWJsZWQoKSA+PSA1MCAmJiAoZSAmJiBlLndhcm4gPyBlLndhcm4oLi4ubykgOiBjb25zb2xlLndhcm4oLi4ubykpO1xuICB9XG4gIHN0YXRpYyBlcnJvciguLi5vKSB7XG4gICAgY29uc3QgeyBsb2dnZXI6IGUgfSA9IHIuZ2V0KCk7XG4gICAgdGhpcy5lbmFibGVkKCkgPj0gMjUgJiYgKGUgJiYgZS5lcnJvciA/IGUuZXJyb3IoLi4ubykgOiBjb25zb2xlLmVycm9yKC4uLm8pKTtcbiAgfVxuICBzdGF0aWMgbG9nKC4uLm8pIHtcbiAgICBjb25zdCB7IGxvZ2dlcjogZSB9ID0gci5nZXQoKTtcbiAgICB0aGlzLmVuYWJsZWQoKSA+PSA3NSAmJiAoZSAmJiBlLmxvZyA/IGUubG9nKC4uLm8pIDogY29uc29sZS5sb2coLi4ubykpO1xuICB9XG59XG5leHBvcnQge1xuICB0IGFzIEZSTG9nZ2VyXG59O1xuIiwiaW1wb3J0IHsgZm9udE5hbWVzIGFzIHMsIGRldmljZVBsYXRmb3JtcyBhcyBjLCBkaXNwbGF5UHJvcHMgYXMgZCwgYnJvd3NlclByb3BzIGFzIGwsIGhhcmR3YXJlUHJvcHMgYXMgZiwgcGxhdGZvcm1Qcm9wcyBhcyBnLCBjb25maWd1cmFibGVDYXRlZ29yaWVzIGFzIHUsIGRlbGF5IGFzIG0gfSBmcm9tIFwiLi9kZWZhdWx0cy5qc1wiO1xuaW1wb3J0IHAgZnJvbSBcIi4vY29sbGVjdG9yLmpzXCI7XG5pbXBvcnQgeyBGUkxvZ2dlciBhcyBuIH0gZnJvbSBcIi4uL3V0aWwvbG9nZ2VyLmpzXCI7XG5pbXBvcnQgdyBmcm9tIFwiLi4vY29uZmlnL2luZGV4LmpzXCI7XG5jbGFzcyBPIGV4dGVuZHMgcCB7XG4gIGNvbnN0cnVjdG9yKHQpIHtcbiAgICBzdXBlcigpLCB0aGlzLmNvbmZpZyA9IHtcbiAgICAgIGZvbnROYW1lczogcyxcbiAgICAgIGRldmljZVBsYXRmb3JtczogYyxcbiAgICAgIGRpc3BsYXlQcm9wczogZCxcbiAgICAgIGJyb3dzZXJQcm9wczogbCxcbiAgICAgIGhhcmR3YXJlUHJvcHM6IGYsXG4gICAgICBwbGF0Zm9ybVByb3BzOiBnXG4gICAgfSwgdCAmJiBPYmplY3Qua2V5cyh0KS5mb3JFYWNoKChlKSA9PiB7XG4gICAgICBpZiAoIXUuaW5jbHVkZXMoZSkpXG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIkRldmljZSBwcm9maWxlIGNvbmZpZ3VyYXRpb24gY2F0ZWdvcnkgZG9lcyBub3QgZXhpc3QuXCIpO1xuICAgICAgdGhpcy5jb25maWdbZV0gPSB0W2VdO1xuICAgIH0pO1xuICB9XG4gIGdldEJyb3dzZXJNZXRhKCkge1xuICAgIHJldHVybiB0eXBlb2YgbmF2aWdhdG9yID4gXCJ1XCIgPyAobi53YXJuKFwiQ2Fubm90IGNvbGxlY3QgYnJvd3NlciBtZXRhZGF0YS4gbmF2aWdhdG9yIGlzIG5vdCBkZWZpbmVkLlwiKSwge30pIDogdGhpcy5yZWR1Y2VUb09iamVjdCh0aGlzLmNvbmZpZy5icm93c2VyUHJvcHMsIG5hdmlnYXRvcik7XG4gIH1cbiAgZ2V0QnJvd3NlclBsdWdpbnNOYW1lcygpIHtcbiAgICByZXR1cm4gdHlwZW9mIG5hdmlnYXRvciA8IFwidVwiICYmIG5hdmlnYXRvci5wbHVnaW5zID8gdGhpcy5yZWR1Y2VUb1N0cmluZyhPYmplY3Qua2V5cyhuYXZpZ2F0b3IucGx1Z2lucyksIG5hdmlnYXRvci5wbHVnaW5zKSA6IChuLndhcm4oXCJDYW5ub3QgY29sbGVjdCBicm93c2VyIHBsdWdpbiBpbmZvcm1hdGlvbi4gbmF2aWdhdG9yLnBsdWdpbnMgaXMgbm90IGRlZmluZWQuXCIpLCBcIlwiKTtcbiAgfVxuICBnZXREZXZpY2VOYW1lKCkge1xuICAgIGlmICh0eXBlb2YgbmF2aWdhdG9yID4gXCJ1XCIpXG4gICAgICByZXR1cm4gbi53YXJuKFwiQ2Fubm90IGNvbGxlY3QgZGV2aWNlIG5hbWUuIG5hdmlnYXRvciBpcyBub3QgZGVmaW5lZC5cIiksIFwiXCI7XG4gICAgY29uc3QgdCA9IG5hdmlnYXRvci51c2VyQWdlbnQsIGUgPSBuYXZpZ2F0b3IucGxhdGZvcm07XG4gICAgc3dpdGNoICghMCkge1xuICAgICAgY2FzZSB0aGlzLmNvbmZpZy5kZXZpY2VQbGF0Zm9ybXMubWFjLmluY2x1ZGVzKGUpOlxuICAgICAgICByZXR1cm4gXCJNYWMgKEJyb3dzZXIpXCI7XG4gICAgICBjYXNlIHRoaXMuY29uZmlnLmRldmljZVBsYXRmb3Jtcy5pb3MuaW5jbHVkZXMoZSk6XG4gICAgICAgIHJldHVybiBgJHtlfSAoQnJvd3NlcilgO1xuICAgICAgY2FzZSB0aGlzLmNvbmZpZy5kZXZpY2VQbGF0Zm9ybXMud2luZG93cy5pbmNsdWRlcyhlKTpcbiAgICAgICAgcmV0dXJuIFwiV2luZG93cyAoQnJvd3NlcilcIjtcbiAgICAgIGNhc2UgKC9BbmRyb2lkLy50ZXN0KGUpIHx8IC9BbmRyb2lkLy50ZXN0KHQpKTpcbiAgICAgICAgcmV0dXJuIFwiQW5kcm9pZCAoQnJvd3NlcilcIjtcbiAgICAgIGNhc2UgKC9Dck9TLy50ZXN0KHQpIHx8IC9DaHJvbWVib29rLy50ZXN0KHQpKTpcbiAgICAgICAgcmV0dXJuIFwiQ2hyb21lIE9TIChCcm93c2VyKVwiO1xuICAgICAgY2FzZSAvTGludXgvLnRlc3QoZSk6XG4gICAgICAgIHJldHVybiBcIkxpbnV4IChCcm93c2VyKVwiO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuIGAke2UgfHwgXCJVbmtub3duXCJ9IChCcm93c2VyKWA7XG4gICAgfVxuICB9XG4gIGdldERpc3BsYXlNZXRhKCkge1xuICAgIHJldHVybiB0eXBlb2Ygc2NyZWVuID4gXCJ1XCIgPyAobi53YXJuKFwiQ2Fubm90IGNvbGxlY3Qgc2NyZWVuIGluZm9ybWF0aW9uLiBzY3JlZW4gaXMgbm90IGRlZmluZWQuXCIpLCB7fSkgOiB0aGlzLnJlZHVjZVRvT2JqZWN0KHRoaXMuY29uZmlnLmRpc3BsYXlQcm9wcywgc2NyZWVuKTtcbiAgfVxuICBnZXRIYXJkd2FyZU1ldGEoKSB7XG4gICAgcmV0dXJuIHR5cGVvZiBuYXZpZ2F0b3IgPiBcInVcIiA/IChuLndhcm4oXCJDYW5ub3QgY29sbGVjdCBPUyBtZXRhZGF0YS4gTmF2aWdhdG9yIGlzIG5vdCBkZWZpbmVkLlwiKSwge30pIDogdGhpcy5yZWR1Y2VUb09iamVjdCh0aGlzLmNvbmZpZy5oYXJkd2FyZVByb3BzLCBuYXZpZ2F0b3IpO1xuICB9XG4gIGdldElkZW50aWZpZXIoKSB7XG4gICAgY29uc3QgdCA9IGAke3cuZ2V0KCkucHJlZml4fS1EZXZpY2VJRGA7XG4gICAgaWYgKCEodHlwZW9mIGdsb2JhbFRoaXMuY3J5cHRvIDwgXCJ1XCIgJiYgZ2xvYmFsVGhpcy5jcnlwdG8uZ2V0UmFuZG9tVmFsdWVzKSlcbiAgICAgIHJldHVybiBuLndhcm4oXCJDYW5ub3QgZ2VuZXJhdGUgcHJvZmlsZSBJRC4gQ3J5cHRvIGFuZC9vciBnZXRSYW5kb21WYWx1ZXMgaXMgbm90IHN1cHBvcnRlZC5cIiksIFwiXCI7XG4gICAgaWYgKCFsb2NhbFN0b3JhZ2UpXG4gICAgICByZXR1cm4gbi53YXJuKFwiQ2Fubm90IHN0b3JlIHByb2ZpbGUgSUQuIGxvY2FsU3RvcmFnZSBpcyBub3Qgc3VwcG9ydGVkLlwiKSwgXCJcIjtcbiAgICBsZXQgZSA9IGxvY2FsU3RvcmFnZS5nZXRJdGVtKHQpO1xuICAgIHJldHVybiBlIHx8IChlID0gZ2xvYmFsVGhpcy5jcnlwdG8uZ2V0UmFuZG9tVmFsdWVzKG5ldyBVaW50MzJBcnJheSgzKSkuam9pbihcIi1cIiksIGxvY2FsU3RvcmFnZS5zZXRJdGVtKHQsIGUpKSwgZTtcbiAgfVxuICBnZXRJbnN0YWxsZWRGb250cygpIHtcbiAgICBpZiAodHlwZW9mIGRvY3VtZW50ID4gXCJ1XCIpXG4gICAgICByZXR1cm4gbi53YXJuKFwiQ2Fubm90IGNvbGxlY3QgZm9udCBkYXRhLiBHbG9iYWwgZG9jdW1lbnQgb2JqZWN0IGlzIHVuZGVmaW5lZC5cIiksIFwiXCI7XG4gICAgY29uc3QgdCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJjYW52YXNcIik7XG4gICAgaWYgKCF0KVxuICAgICAgcmV0dXJuIG4ud2FybihcIkNhbm5vdCBjb2xsZWN0IGZvbnQgZGF0YS4gQnJvd3NlciBkb2VzIG5vdCBzdXBwb3J0IGNhbnZhcyBlbGVtZW50XCIpLCBcIlwiO1xuICAgIGNvbnN0IGUgPSB0LmdldENvbnRleHQgJiYgdC5nZXRDb250ZXh0KFwiMmRcIik7XG4gICAgaWYgKCFlKVxuICAgICAgcmV0dXJuIG4ud2FybihcIkNhbm5vdCBjb2xsZWN0IGZvbnQgZGF0YS4gQnJvd3NlciBkb2VzIG5vdCBzdXBwb3J0IDJkIGNhbnZhcyBjb250ZXh0XCIpLCBcIlwiO1xuICAgIGNvbnN0IG8gPSBcImFiY2RlZmdoaTAxMjM0NTY3ODlcIjtcbiAgICBlLmZvbnQgPSBcIjcycHggQ29taWMgU2Fuc1wiO1xuICAgIGNvbnN0IGkgPSBlLm1lYXN1cmVUZXh0KG8pLndpZHRoO1xuICAgIHJldHVybiB0aGlzLmNvbmZpZy5mb250TmFtZXMucmVkdWNlKChyLCBhKSA9PiAoZS5mb250ID0gYDcycHggJHthfSwgQ29taWMgU2Fuc2AsIGUubWVhc3VyZVRleHQobykud2lkdGggIT09IGkgJiYgKHIgPSBgJHtyfSR7YX07YCksIHIpLCBcIlwiKTtcbiAgfVxuICBhc3luYyBnZXRMb2NhdGlvbkNvb3JkaW5hdGVzKCkge1xuICAgIHJldHVybiB0eXBlb2YgbmF2aWdhdG9yIDwgXCJ1XCIgJiYgbmF2aWdhdG9yLmdlb2xvY2F0aW9uID8gbmV3IFByb21pc2UoYXN5bmMgKHQpID0+IHtcbiAgICAgIG5hdmlnYXRvci5nZW9sb2NhdGlvbi5nZXRDdXJyZW50UG9zaXRpb24oXG4gICAgICAgIChlKSA9PiB0KHtcbiAgICAgICAgICBsYXRpdHVkZTogZS5jb29yZHMubGF0aXR1ZGUsXG4gICAgICAgICAgbG9uZ2l0dWRlOiBlLmNvb3Jkcy5sb25naXR1ZGVcbiAgICAgICAgfSksXG4gICAgICAgIChlKSA9PiB7XG4gICAgICAgICAgbi53YXJuKFxuICAgICAgICAgICAgXCJDYW5ub3QgY29sbGVjdCBnZW9sb2NhdGlvbiBpbmZvcm1hdGlvbi4gXCIgKyBlLmNvZGUgKyBcIjogXCIgKyBlLm1lc3NhZ2VcbiAgICAgICAgICApLCB0KHt9KTtcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIGVuYWJsZUhpZ2hBY2N1cmFjeTogITAsXG4gICAgICAgICAgdGltZW91dDogbSxcbiAgICAgICAgICBtYXhpbXVtQWdlOiAwXG4gICAgICAgIH1cbiAgICAgICk7XG4gICAgfSkgOiAobi53YXJuKFxuICAgICAgXCJDYW5ub3QgY29sbGVjdCBnZW9sb2NhdGlvbiBpbmZvcm1hdGlvbi4gbmF2aWdhdG9yLmdlb2xvY2F0aW9uIGlzIG5vdCBkZWZpbmVkLlwiXG4gICAgKSwgUHJvbWlzZS5yZXNvbHZlKHt9KSk7XG4gIH1cbiAgZ2V0T1NNZXRhKCkge1xuICAgIHJldHVybiB0eXBlb2YgbmF2aWdhdG9yID4gXCJ1XCIgPyAobi53YXJuKFwiQ2Fubm90IGNvbGxlY3QgT1MgbWV0YWRhdGEuIG5hdmlnYXRvciBpcyBub3QgZGVmaW5lZC5cIiksIHt9KSA6IHRoaXMucmVkdWNlVG9PYmplY3QodGhpcy5jb25maWcucGxhdGZvcm1Qcm9wcywgbmF2aWdhdG9yKTtcbiAgfVxuICBhc3luYyBnZXRQcm9maWxlKHsgbG9jYXRpb246IHQsIG1ldGFkYXRhOiBlIH0pIHtcbiAgICBjb25zdCBvID0ge1xuICAgICAgaWRlbnRpZmllcjogdGhpcy5nZXRJZGVudGlmaWVyKClcbiAgICB9O1xuICAgIHJldHVybiBlICYmIChvLm1ldGFkYXRhID0ge1xuICAgICAgaGFyZHdhcmU6IHtcbiAgICAgICAgLi4udGhpcy5nZXRIYXJkd2FyZU1ldGEoKSxcbiAgICAgICAgZGlzcGxheTogdGhpcy5nZXREaXNwbGF5TWV0YSgpXG4gICAgICB9LFxuICAgICAgYnJvd3Nlcjoge1xuICAgICAgICAuLi50aGlzLmdldEJyb3dzZXJNZXRhKCksXG4gICAgICAgIHBsdWdpbnM6IHRoaXMuZ2V0QnJvd3NlclBsdWdpbnNOYW1lcygpXG4gICAgICB9LFxuICAgICAgcGxhdGZvcm06IHtcbiAgICAgICAgLi4udGhpcy5nZXRPU01ldGEoKSxcbiAgICAgICAgZGV2aWNlTmFtZTogdGhpcy5nZXREZXZpY2VOYW1lKCksXG4gICAgICAgIGZvbnRzOiB0aGlzLmdldEluc3RhbGxlZEZvbnRzKCksXG4gICAgICAgIHRpbWV6b25lOiB0aGlzLmdldFRpbWV6b25lT2Zmc2V0KClcbiAgICAgIH1cbiAgICB9KSwgdCAmJiAoby5sb2NhdGlvbiA9IGF3YWl0IHRoaXMuZ2V0TG9jYXRpb25Db29yZGluYXRlcygpKSwgbztcbiAgfVxuICBnZXRUaW1lem9uZU9mZnNldCgpIHtcbiAgICB0cnkge1xuICAgICAgcmV0dXJuICgvKiBAX19QVVJFX18gKi8gbmV3IERhdGUoKSkuZ2V0VGltZXpvbmVPZmZzZXQoKTtcbiAgICB9IGNhdGNoIHtcbiAgICAgIHJldHVybiBuLndhcm4oXCJDYW5ub3QgY29sbGVjdCB0aW1lem9uZSBpbmZvcm1hdGlvbi4gZ2V0VGltZXpvbmVPZmZzZXQgaXMgbm90IGRlZmluZWQuXCIpLCBudWxsO1xuICAgIH1cbiAgfVxufVxuZXhwb3J0IHtcbiAgTyBhcyBkZWZhdWx0XG59O1xuIiwiaW1wb3J0IHsgQ2FsbGJhY2tUeXBlIGFzIHUgfSBmcm9tIFwiLi4vYXV0aC9lbnVtcy5qc1wiO1xuY2xhc3MgaSB7XG4gIC8qKlxuICAgKiBAbWV0aG9kIGlzUVJDb2RlU3RlcCAtIGRldGVybWluZXMgaWYgc3RlcCBjb250YWlucyBRUiBDb2RlIGNhbGxiYWNrc1xuICAgKiBAcGFyYW0ge0ZSU3RlcH0gc3RlcCAtIHN0ZXAgb2JqZWN0IGZyb20gQU0gcmVzcG9uc2VcbiAgICogQHJldHVybnMge2Jvb2xlYW59XG4gICAqL1xuICBzdGF0aWMgaXNRUkNvZGVTdGVwKHQpIHtcbiAgICBjb25zdCBlID0gdC5nZXRDYWxsYmFja3NPZlR5cGUodS5IaWRkZW5WYWx1ZUNhbGxiYWNrKTtcbiAgICByZXR1cm4gZS5sZW5ndGggPT09IDAgPyAhMSA6ICEhdGhpcy5nZXRRUkNvZGVVUklDYihlKTtcbiAgfVxuICAvKipcbiAgICogQG1ldGhvZCBnZXRRUkNvZGVEYXRhIC0gZ2V0cyB0aGUgbmVjZXNzYXJ5IGluZm9ybWF0aW9uIGZyb20gdGhlIFFSIENvZGUgY2FsbGJhY2tzXG4gICAqIEBwYXJhbSB7RlJTdGVwfSBzdGVwIC0gc3RlcCBvYmplY3QgZnJvbSBBTSByZXNwb25zZVxuICAgKiBAcmV0dXJucyB7UVJDb2RlRGF0YX1cbiAgICovXG4gIHN0YXRpYyBnZXRRUkNvZGVEYXRhKHQpIHtcbiAgICBjb25zdCBlID0gdC5nZXRDYWxsYmFja3NPZlR5cGUodS5IaWRkZW5WYWx1ZUNhbGxiYWNrKTtcbiAgICBpZiAoZS5sZW5ndGggPT09IDApXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgIFwiUVIgQ29kZSBzdGVwIG11c3QgY29udGFpbiBhIEhpZGRlblZhbHVlQ2FsbGJhY2suIFVzZSBgRlJRUkNvZGUuaXNRUkNvZGVTdGVwYCB0byBndWFyZC5cIlxuICAgICAgKTtcbiAgICBjb25zdCBhID0gdGhpcy5nZXRRUkNvZGVVUklDYihlKSwgcyA9IGEgPyBhLmdldE91dHB1dFZhbHVlKFwidmFsdWVcIikgOiBcIlwiLCBvID0gdHlwZW9mIHMgPT0gXCJzdHJpbmdcIiAmJiBzLmluY2x1ZGVzKFwib3RwYXV0aDovL1wiKSA/IFwib3RwXCIgOiBcInB1c2hcIiwgbCA9IHQuZ2V0Q2FsbGJhY2tzT2ZUeXBlKHUuVGV4dE91dHB1dENhbGxiYWNrKS5maW5kKChuKSA9PiBuLmdldE1lc3NhZ2VUeXBlKCkgIT09IFwiNFwiKTtcbiAgICByZXR1cm4ge1xuICAgICAgbWVzc2FnZTogbCA/IGwuZ2V0TWVzc2FnZSgpIDogXCJcIixcbiAgICAgIHVzZTogbyxcbiAgICAgIHVyaTogdHlwZW9mIHMgPT0gXCJzdHJpbmdcIiA/IHMgOiBcIlwiXG4gICAgfTtcbiAgfVxuICBzdGF0aWMgZ2V0UVJDb2RlVVJJQ2IodCkge1xuICAgIHJldHVybiB0LmZpbmQoKGUpID0+IHtcbiAgICAgIGNvbnN0IGEgPSBlLmdldE91dHB1dFZhbHVlKFwidmFsdWVcIik7XG4gICAgICByZXR1cm4gdHlwZW9mIGEgPT0gXCJzdHJpbmdcIiA/IGE/LmluY2x1ZGVzKFwib3RwYXV0aDovL1wiKSB8fCBhPy5pbmNsdWRlcyhcInB1c2hhdXRoOi8vXCIpIDogITE7XG4gICAgfSk7XG4gIH1cbn1cbmV4cG9ydCB7XG4gIGkgYXMgZGVmYXVsdFxufTtcbiIsImZ1bmN0aW9uIHQoZSkge1xuICBjb25zdCByID0gZS5tYXRjaCgvXFxzW1xcd1xcV11cIihbXFx3XSopXFxcXC9nKTtcbiAgcmV0dXJuIEFycmF5LmlzQXJyYXkocikgJiYgci5tYXAoKHMpID0+IHtcbiAgICBjb25zdCBhID0gcy5tYXRjaCgvXCIoW1xcd10qKVxcXFwvKTtcbiAgICByZXR1cm4gQXJyYXkuaXNBcnJheShhKSA/IGFbMV0gOiBcIlwiO1xuICB9KSB8fCBbXTtcbn1cbmZ1bmN0aW9uIG8oZSkge1xuICByZXR1cm4gZT8ubWF0Y2goLzxlbVxccyouKj5cXHMqLio8XFwvZW0+L2cpPy5bMF0/LnJlcGxhY2UoXCI8ZW0+XCIsIFwiXCIpPy5yZXBsYWNlKFwiPC9lbT5cIiwgXCJcIikgPz8gXCJOZXcgU2VjdXJpdHkgS2V5XCI7XG59XG5leHBvcnQge1xuICBvIGFzIHBhcnNlRGV2aWNlTmFtZVRleHQsXG4gIHQgYXMgcGFyc2VEaXNwbGF5UmVjb3ZlcnlDb2Rlc1RleHRcbn07XG4iLCJpbXBvcnQgeyBDYWxsYmFja1R5cGUgYXMgcyB9IGZyb20gXCIuLi9hdXRoL2VudW1zLmpzXCI7XG5pbXBvcnQgeyBwYXJzZURldmljZU5hbWVUZXh0IGFzIGMsIHBhcnNlRGlzcGxheVJlY292ZXJ5Q29kZXNUZXh0IGFzIGwgfSBmcm9tIFwiLi9zY3JpcHQtcGFyc2VyLmpzXCI7XG5jbGFzcyBwIHtcbiAgc3RhdGljIGdldERldmljZU5hbWUoZSkge1xuICAgIGNvbnN0IHQgPSB0aGlzLmdldERpc3BsYXlDYWxsYmFjayhlKT8uZ2V0T3V0cHV0QnlOYW1lKFwibWVzc2FnZVwiLCBcIlwiKSA/PyBcIlwiO1xuICAgIHJldHVybiBjKHQpO1xuICB9XG4gIC8qKlxuICAgKiBSZXRyaWV2ZXMgdGhlIHJlY292ZXJ5IGNvZGVzIGJ5IHBhcnNpbmcgdGhlIEphdmFTY3JpcHQgbWVzc2FnZSB0ZXh0IGluIGNhbGxiYWNrLlxuICAgKlxuICAgKiBAcGFyYW0gc3RlcCBUaGUgc3RlcCB0byBldmFsdWF0ZVxuICAgKiBAcmV0dXJuIFJlY292ZXJ5IENvZGUgdmFsdWVzIGluIGFycmF5XG4gICAqL1xuICBzdGF0aWMgZ2V0Q29kZXMoZSkge1xuICAgIGNvbnN0IHQgPSB0aGlzLmdldERpc3BsYXlDYWxsYmFjayhlKT8uZ2V0T3V0cHV0QnlOYW1lKFwibWVzc2FnZVwiLCBcIlwiKTtcbiAgICByZXR1cm4gbCh0IHx8IFwiXCIpO1xuICB9XG4gIC8qKlxuICAgKiBEZXRlcm1pbmVzIGlmIHRoZSBnaXZlbiBzdGVwIGlzIGEgRGlzcGxheSBSZWNvdmVyeSBDb2RlcyBzdGVwLlxuICAgKlxuICAgKiBAcGFyYW0gc3RlcCBUaGUgc3RlcCB0byBldmFsdWF0ZVxuICAgKiBAcmV0dXJuIElzIHRoaXMgc3RlcCBhIERpc3BsYXkgUmVjb3ZlcnkgQ29kZXMgc3RlcFxuICAgKi9cbiAgc3RhdGljIGlzRGlzcGxheVN0ZXAoZSkge1xuICAgIHJldHVybiAhIXRoaXMuZ2V0RGlzcGxheUNhbGxiYWNrKGUpO1xuICB9XG4gIC8qKlxuICAgKiBHZXRzIHRoZSByZWNvdmVyeSBjb2RlcyBzdGVwLlxuICAgKlxuICAgKiBAcGFyYW0gc3RlcCBUaGUgc3RlcCB0byBldmFsdWF0ZVxuICAgKiBAcmV0dXJuIGdldHMgdGhlIERpc3BsYXkgUmVjb3ZlcnkgQ29kZXMnIGNhbGxiYWNrXG4gICAqL1xuICBzdGF0aWMgZ2V0RGlzcGxheUNhbGxiYWNrKGUpIHtcbiAgICByZXR1cm4gZS5nZXRDYWxsYmFja3NPZlR5cGUocy5UZXh0T3V0cHV0Q2FsbGJhY2spLmZpbmQoKHQpID0+IHtcbiAgICAgIGNvbnN0IGEgPSB0LmdldE91dHB1dEJ5TmFtZShcIm1lc3NhZ2VcIiwgdm9pZCAwKTtcbiAgICAgIHJldHVybiBhICYmIChhLmluY2x1ZGVzKFwiUmVjb3ZlcnkgQ29kZXNcIikgfHwgYS5pbmNsdWRlcyhcInJlY292ZXJ5IGNvZGVzXCIpKTtcbiAgICB9KTtcbiAgfVxufVxuZXhwb3J0IHtcbiAgcCBhcyBkZWZhdWx0XG59O1xuIiwiaW1wb3J0IHIgZnJvbSBcIi4uL2NvbmZpZy9pbmRleC5qc1wiO1xuY2xhc3MgbiB7XG4gIC8qKlxuICAgKiBSZXRyaWV2ZSB0b2tlbnMuXG4gICAqL1xuICBzdGF0aWMgYXN5bmMgZ2V0KHQpIHtcbiAgICBjb25zdCBlID0gbG9jYWxTdG9yYWdlLmdldEl0ZW0oYCR7ci5nZXQoKS5wcmVmaXh9LSR7dH1gKTtcbiAgICBpZiAoZSlcbiAgICAgIHRyeSB7XG4gICAgICAgIHJldHVybiBKU09OLnBhcnNlKGUgfHwgXCJcIik7XG4gICAgICB9IGNhdGNoIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiQ291bGQgbm90IHBhcnNlIHRva2VuIG9iamVjdCBmcm9tIGxvY2FsU3RvcmFnZVwiKTtcbiAgICAgIH1cbiAgfVxuICAvKipcbiAgICogU2F2ZXMgdG9rZW5zLlxuICAgKi9cbiAgc3RhdGljIGFzeW5jIHNldCh0LCBlKSB7XG4gICAgY29uc3QgbyA9IEpTT04uc3RyaW5naWZ5KGUpO1xuICAgIGxvY2FsU3RvcmFnZS5zZXRJdGVtKGAke3IuZ2V0KCkucHJlZml4fS0ke3R9YCwgbyk7XG4gIH1cbiAgLyoqXG4gICAqIFJlbW92ZXMgc3RvcmVkIHRva2Vucy5cbiAgICovXG4gIHN0YXRpYyBhc3luYyByZW1vdmUodCkge1xuICAgIGxvY2FsU3RvcmFnZS5yZW1vdmVJdGVtKGAke3IuZ2V0KCkucHJlZml4fS0ke3R9YCk7XG4gIH1cbn1cbmV4cG9ydCB7XG4gIG4gYXMgZGVmYXVsdFxufTtcbiIsImltcG9ydCByIGZyb20gXCIuLi9jb25maWcvaW5kZXguanNcIjtcbmNsYXNzIGEge1xuICAvKipcbiAgICogUmV0cmlldmUgdG9rZW5zLlxuICAgKi9cbiAgc3RhdGljIGFzeW5jIGdldChlKSB7XG4gICAgY29uc3QgdCA9IHNlc3Npb25TdG9yYWdlLmdldEl0ZW0oYCR7ci5nZXQoKS5wcmVmaXh9LSR7ZX1gKTtcbiAgICBpZiAodClcbiAgICAgIHRyeSB7XG4gICAgICAgIHJldHVybiBKU09OLnBhcnNlKHQgfHwgXCJcIik7XG4gICAgICB9IGNhdGNoIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiQ291bGQgbm90IHBhcnNlIHRva2VuIGZyb20gc2Vzc2lvblN0b3JhZ2VcIik7XG4gICAgICB9XG4gIH1cbiAgLyoqXG4gICAqIFNhdmVzIHRva2Vucy5cbiAgICovXG4gIHN0YXRpYyBhc3luYyBzZXQoZSwgdCkge1xuICAgIGNvbnN0IHMgPSBKU09OLnN0cmluZ2lmeSh0KTtcbiAgICBzZXNzaW9uU3RvcmFnZS5zZXRJdGVtKGAke3IuZ2V0KCkucHJlZml4fS0ke2V9YCwgcyk7XG4gIH1cbiAgLyoqXG4gICAqIFJlbW92ZXMgc3RvcmVkIHRva2Vucy5cbiAgICovXG4gIHN0YXRpYyBhc3luYyByZW1vdmUoZSkge1xuICAgIHNlc3Npb25TdG9yYWdlLnJlbW92ZUl0ZW0oYCR7ci5nZXQoKS5wcmVmaXh9LSR7ZX1gKTtcbiAgfVxufVxuZXhwb3J0IHtcbiAgYSBhcyBkZWZhdWx0XG59O1xuIiwiaW1wb3J0IGEgZnJvbSBcIi4uL2NvbmZpZy9pbmRleC5qc1wiO1xuaW1wb3J0IHsgRlJMb2dnZXIgYXMgbiB9IGZyb20gXCIuLi91dGlsL2xvZ2dlci5qc1wiO1xuaW1wb3J0IGkgZnJvbSBcIi4vbG9jYWwtc3RvcmFnZS5qc1wiO1xuaW1wb3J0IG8gZnJvbSBcIi4vc2Vzc2lvbi1zdG9yYWdlLmpzXCI7XG5jbGFzcyBkIHtcbiAgLyoqXG4gICAqIEdldHMgc3RvcmVkIHRva2Vucy5cbiAgICovXG4gIHN0YXRpYyBhc3luYyBnZXQoKSB7XG4gICAgY29uc3QgeyBjbGllbnRJZDogdCwgdG9rZW5TdG9yZTogZSB9ID0gdGhpcy5nZXRDbGllbnRDb25maWcoKTtcbiAgICBpZiAoZSA9PT0gXCJzZXNzaW9uU3RvcmFnZVwiKVxuICAgICAgcmV0dXJuIGF3YWl0IG8uZ2V0KHQpO1xuICAgIGlmIChlID09PSBcImxvY2FsU3RvcmFnZVwiKVxuICAgICAgcmV0dXJuIGF3YWl0IGkuZ2V0KHQpO1xuICAgIGlmIChlID09PSBcImluZGV4ZWREQlwiKVxuICAgICAgbi53YXJuKFwiSW5kZXhlZERCIGlzIG5vdCBzdXBwb3J0ZWQgaW4gdGhpcyB2ZXJzaW9uLlwiKTtcbiAgICBlbHNlIGlmIChlICYmIGUuZ2V0KVxuICAgICAgcmV0dXJuIGF3YWl0IGUuZ2V0KHQpO1xuICAgIHJldHVybiBhd2FpdCBpLmdldCh0KTtcbiAgfVxuICAvKipcbiAgICogU2F2ZXMgdG9rZW5zLlxuICAgKi9cbiAgc3RhdGljIGFzeW5jIHNldCh0KSB7XG4gICAgY29uc3QgeyBjbGllbnRJZDogZSwgdG9rZW5TdG9yZTogciB9ID0gdGhpcy5nZXRDbGllbnRDb25maWcoKTtcbiAgICBpZiAociA9PT0gXCJzZXNzaW9uU3RvcmFnZVwiKVxuICAgICAgcmV0dXJuIGF3YWl0IG8uc2V0KGUsIHQpO1xuICAgIGlmIChyID09PSBcImxvY2FsU3RvcmFnZVwiKVxuICAgICAgcmV0dXJuIGF3YWl0IGkuc2V0KGUsIHQpO1xuICAgIGlmIChyID09PSBcImluZGV4ZWREQlwiKVxuICAgICAgbi53YXJuKFwiSW5kZXhlZERCIGlzIG5vdCBzdXBwb3J0ZWQgaW4gdGhpcyB2ZXJzaW9uLlwiKTtcbiAgICBlbHNlIGlmIChyICYmIHIuc2V0KVxuICAgICAgcmV0dXJuIGF3YWl0IHIuc2V0KGUsIHQpO1xuICAgIHJldHVybiBhd2FpdCBpLnNldChlLCB0KTtcbiAgfVxuICAvKipcbiAgICogUmVtb3ZlcyBzdG9yZWQgdG9rZW5zLlxuICAgKi9cbiAgc3RhdGljIGFzeW5jIHJlbW92ZSgpIHtcbiAgICBjb25zdCB7IGNsaWVudElkOiB0LCB0b2tlblN0b3JlOiBlIH0gPSB0aGlzLmdldENsaWVudENvbmZpZygpO1xuICAgIGlmIChlID09PSBcInNlc3Npb25TdG9yYWdlXCIpXG4gICAgICByZXR1cm4gYXdhaXQgby5yZW1vdmUodCk7XG4gICAgaWYgKGUgPT09IFwibG9jYWxTdG9yYWdlXCIpXG4gICAgICByZXR1cm4gYXdhaXQgaS5yZW1vdmUodCk7XG4gICAgaWYgKGUgPT09IFwiaW5kZXhlZERCXCIpXG4gICAgICBuLndhcm4oXCJJbmRleGVkREIgaXMgbm90IHN1cHBvcnRlZCBpbiB0aGlzIHZlcnNpb24uXCIpO1xuICAgIGVsc2UgaWYgKGUgJiYgZS5yZW1vdmUpXG4gICAgICByZXR1cm4gYXdhaXQgZS5yZW1vdmUodCk7XG4gICAgcmV0dXJuIGF3YWl0IGkucmVtb3ZlKHQpO1xuICB9XG4gIHN0YXRpYyBnZXRDbGllbnRDb25maWcoKSB7XG4gICAgY29uc3QgeyBjbGllbnRJZDogdCA9IFwidW5jb25maWd1cmVkQ2xpZW50XCIsIHRva2VuU3RvcmU6IGUgPSBcImxvY2FsU3RvcmFnZVwiIH0gPSBhLmdldCgpO1xuICAgIHJldHVybiB7IGNsaWVudElkOiB0LCB0b2tlblN0b3JlOiBlIH07XG4gIH1cbn1cbmV4cG9ydCB7XG4gIGQgYXMgZGVmYXVsdFxufTtcbiIsImZ1bmN0aW9uIG8odCkge1xuICByZXR1cm4gdC5vayB8fCBNYXRoLmZsb29yKHQuc3RhdHVzIC8gMTAwKSA9PT0gNDtcbn1cbmV4cG9ydCB7XG4gIG8gYXMgaXNPa09yNHh4XG59O1xuIiwiY2xhc3MgYyB7XG4gIC8qKlxuICAgKiBDcmVhdGVzIGEgcmFuZG9tIHN0YXRlLlxuICAgKi9cbiAgc3RhdGljIGNyZWF0ZVN0YXRlKCkge1xuICAgIHJldHVybiB0aGlzLmNyZWF0ZVJhbmRvbVN0cmluZygxNik7XG4gIH1cbiAgLyoqXG4gICAqIENyZWF0ZXMgYSByYW5kb20gdmVyaWZpZXIuXG4gICAqL1xuICBzdGF0aWMgY3JlYXRlVmVyaWZpZXIoKSB7XG4gICAgcmV0dXJuIHRoaXMuY3JlYXRlUmFuZG9tU3RyaW5nKDMyKTtcbiAgfVxuICAvKipcbiAgICogQ3JlYXRlcyBhIFNIQS0yNTYgaGFzaCBvZiB0aGUgdmVyaWZpZXIuXG4gICAqXG4gICAqIEBwYXJhbSB2ZXJpZmllciBUaGUgdmVyaWZpZXIgdG8gaGFzaFxuICAgKi9cbiAgc3RhdGljIGFzeW5jIGNyZWF0ZUNoYWxsZW5nZShlKSB7XG4gICAgY29uc3QgdCA9IGF3YWl0IHRoaXMuc2hhMjU2KGUpO1xuICAgIHJldHVybiB0aGlzLmJhc2U2NFVybEVuY29kZSh0KTtcbiAgfVxuICAvKipcbiAgICogQ3JlYXRlcyBhIGJhc2U2NCBlbmNvZGVkLCBVUkwtZnJpZW5kbHkgdmVyc2lvbiBvZiB0aGUgc3BlY2lmaWVkIGFycmF5LlxuICAgKlxuICAgKiBAcGFyYW0gYXJyYXkgVGhlIGFycmF5IG9mIG51bWJlcnMgdG8gZW5jb2RlXG4gICAqL1xuICBzdGF0aWMgYmFzZTY0VXJsRW5jb2RlKGUpIHtcbiAgICBjb25zdCB0ID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoZSk7XG4gICAgcmV0dXJuIGJ0b2EoU3RyaW5nLmZyb21DaGFyQ29kZS5hcHBseShudWxsLCB0KSkucmVwbGFjZSgvXFwrL2csIFwiLVwiKS5yZXBsYWNlKC9cXC8vZywgXCJfXCIpLnJlcGxhY2UoLz0vZywgXCJcIik7XG4gIH1cbiAgLyoqXG4gICAqIENyZWF0ZXMgYSBTSEEtMjU2IGhhc2ggb2YgdGhlIHNwZWNpZmllZCBzdHJpbmcuXG4gICAqXG4gICAqIEBwYXJhbSB2YWx1ZSBUaGUgc3RyaW5nIHRvIGhhc2hcbiAgICovXG4gIHN0YXRpYyBhc3luYyBzaGEyNTYoZSkge1xuICAgIGNvbnN0IHQgPSBuZXcgVGV4dEVuY29kZXIoKS5lbmNvZGUoZSksIGEgPSBhd2FpdCBjcnlwdG8uc3VidGxlLmRpZ2VzdChcIlNIQS0yNTZcIiwgdCk7XG4gICAgcmV0dXJuIG5ldyBVaW50OEFycmF5KGEpO1xuICB9XG4gIC8qKlxuICAgKiBDcmVhdGVzIGEgcmFuZG9tIHN0cmluZy5cbiAgICpcbiAgICogQHBhcmFtIHNpemUgVGhlIG51bWJlciBmb3IgZW50cm9weSAoZGVmYXVsdDogMzIpXG4gICAqL1xuICBzdGF0aWMgY3JlYXRlUmFuZG9tU3RyaW5nKGUgPSAzMikge1xuICAgIGNvbnN0IHQgPSBuZXcgVWludDhBcnJheShlKTtcbiAgICByZXR1cm4gY3J5cHRvLmdldFJhbmRvbVZhbHVlcyh0KSwgYnRvYSh0LmpvaW4oXCJcIikpLnJlcGxhY2UoL1teYS16QS1aMC05XSsvLCBcIlwiKTtcbiAgfVxufVxuZXhwb3J0IHtcbiAgYyBhcyBkZWZhdWx0XG59O1xuIiwiaW1wb3J0IHsgQWN0aW9uVHlwZXMgYXMgbCB9IGZyb20gXCIuLi9jb25maWcvZW51bXMuanNcIjtcbmltcG9ydCBmIGZyb20gXCIuLi9jb25maWcvaW5kZXguanNcIjtcbmltcG9ydCBtIGZyb20gXCIuLi90b2tlbi1zdG9yYWdlL2luZGV4LmpzXCI7XG5pbXBvcnQgeyBpc09rT3I0eHggYXMgayB9IGZyb20gXCIuLi91dGlsL2h0dHAuanNcIjtcbmltcG9ydCB2IGZyb20gXCIuLi91dGlsL3BrY2UuanNcIjtcbmltcG9ydCB7IHdpdGhUaW1lb3V0IGFzIF8gfSBmcm9tIFwiLi4vdXRpbC90aW1lb3V0LmpzXCI7XG5pbXBvcnQgeyBzdHJpbmdpZnkgYXMgcCwgZ2V0RW5kcG9pbnRQYXRoIGFzIEUsIHJlc29sdmUgYXMgVSB9IGZyb20gXCIuLi91dGlsL3VybC5qc1wiO1xuaW1wb3J0IFQgZnJvbSBcIi4uL3V0aWwvbWlkZGxld2FyZS5qc1wiO1xuY29uc3QgQSA9IHtcbiAgLy8gQU0gZXJyb3IgZm9yIGNvbnNlbnQgcmVxdWlyZW1lbnRcbiAgQXV0aGVudGljYXRpb25Db25zZW50UmVxdWlyZWQ6IFwiQXV0aGVudGljYXRpb24gb3IgY29uc2VudCByZXF1aXJlZFwiLFxuICAvLyBQaW5nIGZlZGVyYXRlIGNvbnNlbnQgcmVxdWlyZW1lbnRcbiAgQXV0aGVudGljYXRpb25Jc1JlcXVpcmVkOiBcIkF1dGhlbnRpY2F0aW9uIGlzIHJlcXVpcmVkLlwiLFxuICAvLyBNYW51YWwgaWZyYW1lIGVycm9yXG4gIEF1dGhvcml6YXRpb25UaW1lb3V0OiBcIkF1dGhvcml6YXRpb24gdGltZWQgb3V0XCIsXG4gIC8vIENocm9taXVtIGJyb3dzZXIgZXJyb3JcbiAgRmFpbGVkVG9GZXRjaDogXCJGYWlsZWQgdG8gZmV0Y2hcIixcbiAgLy8gTW96aWxsYSBicm93c2VyIGVycm9yXG4gIE5ldHdvcmtFcnJvcjogXCJOZXR3b3JrRXJyb3Igd2hlbiBhdHRlbXB0aW5nIHRvIGZldGNoIHJlc291cmNlLlwiLFxuICAvLyBXZWJraXQgYnJvd3NlciBlcnJvclxuICBDT1JTRXJyb3I6IFwiQ3Jvc3Mtb3JpZ2luIHJlZGlyZWN0aW9uXCIsXG4gIC8vIHByb21wdD1ub25lIGVycm9yc1xuICBJbnRlcmFjdGlvbk5vdEFsbG93ZWQ6IFwiVGhlIHJlcXVlc3QgcmVxdWlyZXMgc29tZSBpbnRlcmFjdGlvbiB0aGF0IGlzIG5vdCBhbGxvd2VkLlwiLFxuICAvLyBQaW5nT25lIGxvZ2luIGVycm9yXG4gIExvZ2luUmVxdWlyZWQ6IFwiVXNlciBhdXRoZW50aWNhdGlvbiBpcyByZXF1aXJlZFwiLFxuICBSZXF1ZXN0UmVxdWlyZXNDb25zZW50OiBcIlRoZSByZXF1ZXN0IHJlcXVpcmVzIGNvbnNlbnQuXCJcbn07XG5jbGFzcyBiIHtcbiAgc3RhdGljIGFzeW5jIGNyZWF0ZUF1dGhvcml6ZVVybChlKSB7XG4gICAgY29uc3QgeyBjbGllbnRJZDogciwgbWlkZGxld2FyZTogcywgcmVkaXJlY3RVcmk6IG8sIHNjb3BlOiBuIH0gPSBmLmdldChlKSwgdCA9IHtcbiAgICAgIC4uLmUucXVlcnksXG4gICAgICBjbGllbnRfaWQ6IHIsXG4gICAgICByZWRpcmVjdF91cmk6IG8sXG4gICAgICByZXNwb25zZV90eXBlOiBlLnJlc3BvbnNlVHlwZSxcbiAgICAgIHNjb3BlOiBuLFxuICAgICAgc3RhdGU6IGUuc3RhdGUsXG4gICAgICAuLi5lLnByb21wdCA/IHsgcHJvbXB0OiBlLnByb21wdCB9IDoge31cbiAgICB9O1xuICAgIGlmIChlLnZlcmlmaWVyKSB7XG4gICAgICBjb25zdCBhID0gYXdhaXQgdi5jcmVhdGVDaGFsbGVuZ2UoZS52ZXJpZmllcik7XG4gICAgICB0LmNvZGVfY2hhbGxlbmdlID0gYSwgdC5jb2RlX2NoYWxsZW5nZV9tZXRob2QgPSBcIlMyNTZcIjtcbiAgICB9XG4gICAgY29uc3QgaSA9IFQoXG4gICAgICB7XG4gICAgICAgIHVybDogbmV3IFVSTCh0aGlzLmdldFVybChcImF1dGhvcml6ZVwiLCB0LCBlKSksXG4gICAgICAgIGluaXQ6IHt9XG4gICAgICB9LFxuICAgICAgeyB0eXBlOiBsLkF1dGhvcml6ZSB9XG4gICAgKSwgeyB1cmw6IGMgfSA9IGkocyk7XG4gICAgcmV0dXJuIGMudG9TdHJpbmcoKTtcbiAgfVxuICAvKipcbiAgICogQ2FsbHMgdGhlIGF1dGhvcml6ZSBVUkwgd2l0aCBhbiBpZnJhbWUuIElmIHN1Y2Nlc3NmdWwsXG4gICAqIGl0IHJldHVybnMgdGhlIGNhbGxiYWNrIFVSTCB3aXRoIGF1dGhlbnRpY2F0aW9uIGNvZGUsXG4gICAqIG9wdGlvbmFsbHkgdXNpbmcgUEtDRS5cbiAgICogTWV0aG9kIHJlbmFtZWQgaW4gdjMuXG4gICAqIE9yaWdpbmFsIE5hbWU6IGdldEF1dGhvcml6ZVVybFxuICAgKiBOZXcgTmFtZTogZ2V0QXV0aENvZGVCeUlmcmFtZVxuICAgKi9cbiAgc3RhdGljIGFzeW5jIGdldEF1dGhDb2RlQnlJZnJhbWUoZSkge1xuICAgIGNvbnN0IHIgPSBhd2FpdCB0aGlzLmNyZWF0ZUF1dGhvcml6ZVVybCh7IC4uLmUsIHByb21wdDogXCJub25lXCIgfSksIHsgc2VydmVyQ29uZmlnOiBzIH0gPSBmLmdldChlKTtcbiAgICByZXR1cm4gbmV3IFByb21pc2UoKG8sIG4pID0+IHtcbiAgICAgIGNvbnN0IHQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiaWZyYW1lXCIpLCBpID0gKCkgPT4ge1xuICAgICAgfTtcbiAgICAgIGxldCBjID0gaSwgYSA9IGksIGQgPSAwO1xuICAgICAgYSA9ICgpID0+IHtcbiAgICAgICAgY2xlYXJUaW1lb3V0KGQpLCB0LnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJsb2FkXCIsIGMpLCB0LnJlbW92ZSgpO1xuICAgICAgfSwgYyA9ICgpID0+IHtcbiAgICAgICAgaWYgKHQuY29udGVudFdpbmRvdykge1xuICAgICAgICAgIGNvbnN0IHUgPSB0LmNvbnRlbnRXaW5kb3cubG9jYXRpb24uaHJlZjtcbiAgICAgICAgICAodGhpcy5jb250YWluc0F1dGhDb2RlKHUpIHx8IHRoaXMuY29udGFpbnNBdXRoRXJyb3IodSkpICYmIChhKCksIG8odSkpO1xuICAgICAgICB9XG4gICAgICB9LCBkID0gc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgIGEoKSwgbihuZXcgRXJyb3IoQS5BdXRob3JpemF0aW9uVGltZW91dCkpO1xuICAgICAgfSwgcy50aW1lb3V0KSwgdC5zdHlsZS5kaXNwbGF5ID0gXCJub25lXCIsIHQuYWRkRXZlbnRMaXN0ZW5lcihcImxvYWRcIiwgYyksIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQodCksIHQuc3JjID0gcjtcbiAgICB9KTtcbiAgfVxuICAvKipcbiAgICogRXhjaGFuZ2VzIGFuIGF1dGhvcml6YXRpb24gY29kZSBmb3IgT0F1dGggdG9rZW5zLlxuICAgKi9cbiAgc3RhdGljIGFzeW5jIGdldE9BdXRoMlRva2VucyhlKSB7XG4gICAgY29uc3QgeyBjbGllbnRJZDogciwgcmVkaXJlY3RVcmk6IHMgfSA9IGYuZ2V0KGUpLCBvID0ge1xuICAgICAgY2xpZW50X2lkOiByLFxuICAgICAgY29kZTogZS5hdXRob3JpemF0aW9uQ29kZSxcbiAgICAgIGdyYW50X3R5cGU6IFwiYXV0aG9yaXphdGlvbl9jb2RlXCIsXG4gICAgICByZWRpcmVjdF91cmk6IHNcbiAgICB9O1xuICAgIGUudmVyaWZpZXIgJiYgKG8uY29kZV92ZXJpZmllciA9IGUudmVyaWZpZXIpO1xuICAgIGNvbnN0IG4gPSBwKG8pLCB0ID0ge1xuICAgICAgYm9keTogbixcbiAgICAgIGhlYWRlcnM6IG5ldyBIZWFkZXJzKHtcbiAgICAgICAgXCJDb250ZW50LUxlbmd0aFwiOiBuLmxlbmd0aC50b1N0cmluZygpLFxuICAgICAgICBcIkNvbnRlbnQtVHlwZVwiOiBcImFwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZFwiXG4gICAgICB9KSxcbiAgICAgIG1ldGhvZDogXCJQT1NUXCJcbiAgICB9LCBpID0gYXdhaXQgdGhpcy5yZXF1ZXN0KFwiYWNjZXNzVG9rZW5cIiwgdm9pZCAwLCAhMSwgdCwgZSksIGMgPSBhd2FpdCB0aGlzLmdldEJvZHkoaSk7XG4gICAgaWYgKGkuc3RhdHVzICE9PSAyMDApIHtcbiAgICAgIGNvbnN0IHUgPSB0eXBlb2YgYyA9PSBcInN0cmluZ1wiID8gYEV4cGVjdGVkIDIwMCwgcmVjZWl2ZWQgJHtpLnN0YXR1c31gIDogdGhpcy5wYXJzZUVycm9yKGMpO1xuICAgICAgdGhyb3cgbmV3IEVycm9yKHUpO1xuICAgIH1cbiAgICBjb25zdCBhID0gYztcbiAgICBpZiAoIWEuYWNjZXNzX3Rva2VuKVxuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiQWNjZXNzIHRva2VuIG5vdCBmb3VuZCBpbiByZXNwb25zZVwiKTtcbiAgICBsZXQgZDtcbiAgICByZXR1cm4gYS5leHBpcmVzX2luICYmIChkID0gRGF0ZS5ub3coKSArIGEuZXhwaXJlc19pbiAqIDFlMyksIHtcbiAgICAgIGFjY2Vzc1Rva2VuOiBhLmFjY2Vzc190b2tlbixcbiAgICAgIGlkVG9rZW46IGEuaWRfdG9rZW4sXG4gICAgICByZWZyZXNoVG9rZW46IGEucmVmcmVzaF90b2tlbixcbiAgICAgIHRva2VuRXhwaXJ5OiBkXG4gICAgfTtcbiAgfVxuICAvKipcbiAgICogR2V0cyBPSURDIHVzZXIgaW5mb3JtYXRpb24uXG4gICAqL1xuICBzdGF0aWMgYXN5bmMgZ2V0VXNlckluZm8oZSkge1xuICAgIGNvbnN0IHIgPSBhd2FpdCB0aGlzLnJlcXVlc3QoXCJ1c2VySW5mb1wiLCB2b2lkIDAsICEwLCB2b2lkIDAsIGUpO1xuICAgIGlmIChyLnN0YXR1cyAhPT0gMjAwKVxuICAgICAgdGhyb3cgbmV3IEVycm9yKGBGYWlsZWQgdG8gZ2V0IHVzZXIgaW5mbzsgcmVjZWl2ZWQgJHtyLnN0YXR1c31gKTtcbiAgICByZXR1cm4gYXdhaXQgci5qc29uKCk7XG4gIH1cbiAgLyoqXG4gICAqIEludm9rZXMgdGhlIE9JREMgZW5kIHNlc3Npb24gZW5kcG9pbnQuXG4gICAqIENhbiByZXN1bHQgaW4gYSByZWRpcmVjdCB0byBgL3NpZ25vZmZgIGlmIHVzaW5nIFBpbmdPbmVcbiAgICogSXQncyBiZXN0IHRvIGV4cGxpY2l0bHkgcHJvdmlkZSB0aGUgbG9nb3V0IHJlZGlyZWN0IFVSTCBpbiBvcHRpb25zXG4gICAqXG4gICAqIEBmdW5jdGlvbiBlbmRTZXNzaW9uIC0gY2FsbCBhdXRob3JpemF0aW9uIHNlcnZlciB0byBlbmQgYXNzb2NpYXRlZCBzZXNzaW9uXG4gICAqIEBwYXJhbSBvcHRpb25zIHtMb2dvdXRPcHRpb25zfSAtIGFuIGV4dGVuc2lvbiBvZiBDb25maWdPcHRpb25zLCBidXQgd2l0aCB0d28gYWRkaXRpb25hbCBwcm9wc1xuICAgKiBAcGFyYW0gb3B0aW9ucy5sb2dvdXRSZWRpcmVjdFVyaSB7c3RyaW5nfSAtIHRoZSBVUkwgeW91IHdhbnQgdGhlIEFTIHRvIHJlZGlyZWN0IHRvIGFmdGVyIHNpZ25vdXRcbiAgICogQHBhcmFtIG9wdGlvbnMucmVkaXJlY3Qge2Jvb2xlYW59IC0gdG8gZXhwbGljaXRseSBkZWFjdGl2YXRlIHJlZGlyZWN0LCBwYXNzIGBmYWxzZWBcbiAgICovXG4gIHN0YXRpYyBhc3luYyBlbmRTZXNzaW9uKGUpIHtcbiAgICBjb25zdCByID0geyAuLi5lIH07XG4gICAgZGVsZXRlIHIucmVkaXJlY3QsIGRlbGV0ZSByLmxvZ291dFJlZGlyZWN0VXJpO1xuICAgIGNvbnN0IHMgPSB7fSwgbyA9IGF3YWl0IG0uZ2V0KCk7XG4gICAgcy5pZF90b2tlbl9oaW50ID0gbyAmJiBvLmlkVG9rZW4gfHwgKGUgJiYgXCJpZFRva2VuXCIgaW4gZSA/IGUuaWRUb2tlbiA6IFwiXCIpO1xuICAgIGNvbnN0IG4gPSBhd2FpdCB0aGlzLnJlcXVlc3QoXCJlbmRTZXNzaW9uXCIsIHMsICEwLCB2b2lkIDAsIHIsIHtcbiAgICAgIHJlZGlyZWN0OiBlPy5yZWRpcmVjdCxcbiAgICAgIGxvZ291dFJlZGlyZWN0VXJpOiBlPy5sb2dvdXRSZWRpcmVjdFVyaVxuICAgIH0pO1xuICAgIGlmICghayhuKSlcbiAgICAgIHRocm93IG5ldyBFcnJvcihgRmFpbGVkIHRvIGVuZCBzZXNzaW9uOyByZWNlaXZlZCAke24uc3RhdHVzfWApO1xuICAgIHJldHVybiBuO1xuICB9XG4gIC8qKlxuICAgKiBJbW1lZGlhdGVseSByZXZva2VzIHRoZSBzdG9yZWQgYWNjZXNzIHRva2VuLlxuICAgKi9cbiAgc3RhdGljIGFzeW5jIHJldm9rZVRva2VuKGUpIHtcbiAgICBjb25zdCB7IGNsaWVudElkOiByIH0gPSBmLmdldChlKSwgcyA9IGF3YWl0IG0uZ2V0KCksIG8gPSBzICYmIHMuYWNjZXNzVG9rZW4sIG4gPSB7XG4gICAgICBjbGllbnRfaWQ6IHJcbiAgICB9O1xuICAgIG8gJiYgKG4udG9rZW4gPSBvKTtcbiAgICBjb25zdCB0ID0ge1xuICAgICAgYm9keTogcChuKSxcbiAgICAgIGNyZWRlbnRpYWxzOiBcImluY2x1ZGVcIixcbiAgICAgIGhlYWRlcnM6IG5ldyBIZWFkZXJzKHtcbiAgICAgICAgXCJDb250ZW50LVR5cGVcIjogXCJhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWRcIlxuICAgICAgfSksXG4gICAgICBtZXRob2Q6IFwiUE9TVFwiXG4gICAgfSwgaSA9IGF3YWl0IHRoaXMucmVxdWVzdChcInJldm9rZVwiLCB2b2lkIDAsICExLCB0LCBlKTtcbiAgICBpZiAoIWsoaSkpXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYEZhaWxlZCB0byByZXZva2UgdG9rZW47IHJlY2VpdmVkICR7aS5zdGF0dXN9YCk7XG4gICAgcmV0dXJuIGk7XG4gIH1cbiAgc3RhdGljIGFzeW5jIHJlcXVlc3QoZSwgciwgcywgbywgbiwgdCkge1xuICAgIGNvbnN0IHsgcmVkaXJlY3RVcmk6IGksIG1pZGRsZXdhcmU6IGMsIHNlcnZlckNvbmZpZzogYSB9ID0gZi5nZXQobiksIGQgPSB0Py5sb2dvdXRSZWRpcmVjdFVyaSA/IHQubG9nb3V0UmVkaXJlY3RVcmkgOiBpLCB1ID0gdGhpcy5nZXRVcmwoZSwgciwgbiksIGcgPSAodykgPT4ge1xuICAgICAgc3dpdGNoICh3KSB7XG4gICAgICAgIGNhc2UgXCJhY2Nlc3NUb2tlblwiOlxuICAgICAgICAgIHJldHVybiBsLkV4Y2hhbmdlVG9rZW47XG4gICAgICAgIGNhc2UgXCJlbmRTZXNzaW9uXCI6XG4gICAgICAgICAgcmV0dXJuIGwuRW5kU2Vzc2lvbjtcbiAgICAgICAgY2FzZSBcInJldm9rZVwiOlxuICAgICAgICAgIHJldHVybiBsLlJldm9rZVRva2VuO1xuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIHJldHVybiBsLlVzZXJJbmZvO1xuICAgICAgfVxuICAgIH07XG4gICAgaWYgKG8gPSBvIHx8IHt9LCBzKSB7XG4gICAgICBjb25zdCB3ID0gYXdhaXQgbS5nZXQoKSwgeSA9IHcgJiYgdy5hY2Nlc3NUb2tlbjtcbiAgICAgIG8uY3JlZGVudGlhbHMgPSBcImluY2x1ZGVcIiwgby5oZWFkZXJzID0gby5oZWFkZXJzIHx8IG5ldyBIZWFkZXJzKCksIG8uaGVhZGVycy5zZXQoXCJBdXRob3JpemF0aW9uXCIsIGBCZWFyZXIgJHt5fWApO1xuICAgIH1cbiAgICBjb25zdCBoID0gVChcbiAgICAgIHsgdXJsOiBuZXcgVVJMKHUpLCBpbml0OiBvIH0sXG4gICAgICB7IHR5cGU6IGcoZSkgfVxuICAgICkoYyk7XG4gICAgcmV0dXJuIGcoZSkgPT09IGwuRW5kU2Vzc2lvbiAmJiAvLyBlbmRTZXNzaW9uIGFjdGlvbiBvbmx5XG4gICAgdD8ucmVkaXJlY3QgPT09ICEwID8gKGgudXJsLnNlYXJjaFBhcmFtcy5hcHBlbmQoXCJwb3N0X2xvZ291dF9yZWRpcmVjdF91cmlcIiwgZCB8fCBcIlwiKSwgd2luZG93LmxvY2F0aW9uLmFzc2lnbihoLnVybC50b1N0cmluZygpKSwgbmV3IFJlc3BvbnNlKCkpIDogZyhlKSA9PT0gbC5FbmRTZXNzaW9uICYmIC8vIGVuZFNlc3Npb24gYWN0aW9uIG9ubHlcbiAgICB0Py5yZWRpcmVjdCAhPT0gITEgJiYgLy8gT25seSBgZmFsc2VgIGV4cGxpY2l0bHkgZGlzYWJsZXMgdGhpcyBiZWhhdmlvciBmb3IgcmFyZSBlZGdlIGNhc2VzXG4gICAgLy8gSWYgd2UgZXhwbGljaXRseSBnZXQgYSBsb2dvdXQgcmVkaXJlY3QgVVJMLCB0aGVuIHRoYXQncyBlbm91Z2ggb2YgYSBoaW50IHRvIHJlZGlyZWN0XG4gICAgLy8gSWYgd2UgZG9uJ3QgaGF2ZSB0aGF0LCBsZXQncyBzZWUgaWYgdGhleSBhcmUgY2FsbGluZyB0aGUgdHlwaWNhbCBQaW5nT25lIGAvc2lnbm9mZmAgZW5kcG9pbnRcbiAgICAodD8ubG9nb3V0UmVkaXJlY3RVcmkgfHwgdGhpcy5nZXRVcmwoXCJlbmRTZXNzaW9uXCIpLmluY2x1ZGVzKFwiL2FzL3NpZ25vZmZcIikpID8gKGgudXJsLnNlYXJjaFBhcmFtcy5hcHBlbmQoXCJwb3N0X2xvZ291dF9yZWRpcmVjdF91cmlcIiwgZCB8fCBcIlwiKSwgd2luZG93LmxvY2F0aW9uLmFzc2lnbihoLnVybC50b1N0cmluZygpKSwgbmV3IFJlc3BvbnNlKCkpIDogYXdhaXQgXyhmZXRjaChoLnVybC50b1N0cmluZygpLCBoLmluaXQpLCBhLnRpbWVvdXQpO1xuICB9XG4gIHN0YXRpYyBjb250YWluc0F1dGhDb2RlKGUpIHtcbiAgICByZXR1cm4gISFlICYmIC9jb2RlPShbXiZdKykvLnRlc3QoZSk7XG4gIH1cbiAgc3RhdGljIGNvbnRhaW5zQXV0aEVycm9yKGUpIHtcbiAgICByZXR1cm4gISFlICYmIC9lcnJvcj0oW14mXSspLy50ZXN0KGUpO1xuICB9XG4gIHN0YXRpYyBhc3luYyBnZXRCb2R5KGUpIHtcbiAgICBjb25zdCByID0gZS5oZWFkZXJzLmdldChcIkNvbnRlbnQtVHlwZVwiKTtcbiAgICByZXR1cm4gciAmJiByLmluZGV4T2YoXCJhcHBsaWNhdGlvbi9qc29uXCIpID4gLTEgPyBhd2FpdCBlLmpzb24oKSA6IGF3YWl0IGUudGV4dCgpO1xuICB9XG4gIHN0YXRpYyBwYXJzZUVycm9yKGUpIHtcbiAgICBpZiAoZSkge1xuICAgICAgaWYgKGUuZXJyb3IgJiYgZS5lcnJvcl9kZXNjcmlwdGlvbilcbiAgICAgICAgcmV0dXJuIGAke2UuZXJyb3J9OiAke2UuZXJyb3JfZGVzY3JpcHRpb259YDtcbiAgICAgIGlmIChlLmNvZGUgJiYgZS5tZXNzYWdlKVxuICAgICAgICByZXR1cm4gYCR7ZS5jb2RlfTogJHtlLm1lc3NhZ2V9YDtcbiAgICB9XG4gIH1cbiAgc3RhdGljIGdldFVybChlLCByLCBzKSB7XG4gICAgY29uc3QgeyByZWFsbVBhdGg6IG8sIHNlcnZlckNvbmZpZzogbiB9ID0gZi5nZXQocyksIHQgPSBFKGUsIG8sIG4ucGF0aHMpO1xuICAgIGxldCBpID0gVShuLmJhc2VVcmwsIHQpO1xuICAgIHJldHVybiByICYmIChpICs9IGA/JHtwKHIpfWApLCBpO1xuICB9XG59XG5leHBvcnQge1xuICBBIGFzIGFsbG93ZWRFcnJvcnMsXG4gIGIgYXMgZGVmYXVsdFxufTtcbiIsImltcG9ydCBmIGZyb20gXCIuLi9jb25maWcvaW5kZXguanNcIjtcbmltcG9ydCB7IFJFUVVFU1RFRF9XSVRIIGFzIHUsIFhfUkVRVUVTVEVEX1BMQVRGT1JNIGFzIHQgfSBmcm9tIFwiLi4vc2hhcmVkL2NvbnN0YW50cy5qc1wiO1xuaW1wb3J0IHsgaXNPa09yNHh4IGFzIGMgfSBmcm9tIFwiLi4vdXRpbC9odHRwLmpzXCI7XG5pbXBvcnQgeyB3aXRoVGltZW91dCBhcyBwIH0gZnJvbSBcIi4uL3V0aWwvdGltZW91dC5qc1wiO1xuaW1wb3J0IHsgQWN0aW9uVHlwZXMgYXMgaCB9IGZyb20gXCIuLi9jb25maWcvZW51bXMuanNcIjtcbmltcG9ydCBnIGZyb20gXCIuLi91dGlsL21pZGRsZXdhcmUuanNcIjtcbmltcG9ydCB7IGdldEVuZHBvaW50UGF0aCBhcyB3LCByZXNvbHZlIGFzIFAgfSBmcm9tIFwiLi4vdXRpbC91cmwuanNcIjtcbmNsYXNzIE0ge1xuICAvKipcbiAgICogRW5kcyB0aGUgY3VycmVudCBzZXNzaW9uLlxuICAgKi9cbiAgc3RhdGljIGFzeW5jIGxvZ291dChpKSB7XG4gICAgY29uc3QgeyBtaWRkbGV3YXJlOiBzLCBwbGF0Zm9ybUhlYWRlcjogYSwgcmVhbG1QYXRoOiBuLCBzZXJ2ZXJDb25maWc6IHIgfSA9IGYuZ2V0KGkpLCBkID0ge1xuICAgICAgY3JlZGVudGlhbHM6IFwiaW5jbHVkZVwiLFxuICAgICAgaGVhZGVyczogbmV3IEhlYWRlcnMoe1xuICAgICAgICBcIkFjY2VwdC1BUEktVmVyc2lvblwiOiBcInByb3RvY29sPTEuMCxyZXNvdXJjZT0yLjBcIixcbiAgICAgICAgXCJYLVJlcXVlc3RlZC1XaXRoXCI6IHVcbiAgICAgIH0pLFxuICAgICAgbWV0aG9kOiBcIlBPU1RcIlxuICAgIH0sIGwgPSBgJHt3KFwic2Vzc2lvbnNcIiwgbiwgci5wYXRocyl9P19hY3Rpb249bG9nb3V0YCwgbSA9IFAoci5iYXNlVXJsLCBsKSwgZSA9IGcoXG4gICAgICB7IHVybDogbmV3IFVSTChtKSwgaW5pdDogZCB9LFxuICAgICAgeyB0eXBlOiBoLkxvZ291dCB9XG4gICAgKShzKTtcbiAgICBhICYmIChlLmluaXQuaGVhZGVycyBpbnN0YW5jZW9mIEhlYWRlcnMgPyBlLmluaXQuaGVhZGVycy5zZXQoXCJYLVJlcXVlc3RlZC1QbGF0Zm9ybVwiLCB0KSA6IEFycmF5LmlzQXJyYXkoZS5pbml0LmhlYWRlcnMpID8gZS5pbml0LmhlYWRlcnMucHVzaChbXCJYLVJlcXVlc3RlZC1QbGF0Zm9ybVwiLCB0XSkgOiBlLmluaXQuaGVhZGVycyA/IGUuaW5pdC5oZWFkZXJzW1wiWC1SZXF1ZXN0ZWQtUGxhdGZvcm1cIl0gPSB0IDogZS5pbml0LmhlYWRlcnMgPSB7XG4gICAgICBcIlgtUmVxdWVzdGVkLVBsYXRmb3JtXCI6IHRcbiAgICB9KTtcbiAgICBjb25zdCBvID0gYXdhaXQgcChmZXRjaChlLnVybC50b1N0cmluZygpLCBlLmluaXQpLCByLnRpbWVvdXQpO1xuICAgIGlmICghYyhvKSlcbiAgICAgIHRocm93IG5ldyBFcnJvcihgRmFpbGVkIHRvIGxvZyBvdXQ7IHJlY2VpdmVkICR7by5zdGF0dXN9YCk7XG4gICAgcmV0dXJuIG87XG4gIH1cbn1cbmV4cG9ydCB7XG4gIE0gYXMgZGVmYXVsdFxufTtcbiIsImltcG9ydCBuIGZyb20gXCIuLi91dGlsL3BrY2UuanNcIjtcbmZ1bmN0aW9uIGEoZSwgdCkge1xuICByZXR1cm4gYCR7dCB8fCBcIkZSLVNES1wifS1hdXRoZmxvdy0ke2V9YDtcbn1cbmZ1bmN0aW9uIGMoZSkge1xuICBjb25zdCB0ID0gbi5jcmVhdGVWZXJpZmllcigpLCByID0gbi5jcmVhdGVTdGF0ZSgpLCBvID0gYShlLmNsaWVudElkLCBlLnByZWZpeCksIHMgPSB7XG4gICAgLi4uZSxcbiAgICBzdGF0ZTogcixcbiAgICB2ZXJpZmllcjogdFxuICB9O1xuICByZXR1cm4gW1xuICAgIHMsXG4gICAgKCkgPT4gc2Vzc2lvblN0b3JhZ2Uuc2V0SXRlbShvLCBKU09OLnN0cmluZ2lmeShzKSlcbiAgXTtcbn1cbmZ1bmN0aW9uIHUoZSwgdCkge1xuICBjb25zdCByID0gYShlLCB0KSwgbyA9IHNlc3Npb25TdG9yYWdlLmdldEl0ZW0ocik7XG4gIHNlc3Npb25TdG9yYWdlLnJlbW92ZUl0ZW0ocik7XG4gIHRyeSB7XG4gICAgcmV0dXJuIEpTT04ucGFyc2Uobyk7XG4gIH0gY2F0Y2gge1xuICAgIHRocm93IG5ldyBFcnJvcihcIlN0b3JlZCB2YWx1ZXMgZm9yIEF1dGggVVJMIGNvdWxkIG5vdCBiZSBwYXJzZWRcIik7XG4gIH1cbn1cbmV4cG9ydCB7XG4gIGMgYXMgZ2VuZXJhdGVBbmRTdG9yZUF1dGhVcmxWYWx1ZXMsXG4gIHUgYXMgZ2V0U3RvcmVkQXV0aFVybFZhbHVlc1xufTtcbiIsImZ1bmN0aW9uIGkoZSwgbikge1xuICByZXR1cm4gZSAmJiBuID8gbiAtIGUgPCBEYXRlLm5vdygpIDogITE7XG59XG5leHBvcnQge1xuICBpIGFzIHRva2Vuc1dpbGxFeHBpcmVXaXRoaW5UaHJlc2hvbGRcbn07XG4iLCJ2YXIgciA9IC8qIEBfX1BVUkVfXyAqLyAoKG8pID0+IChvLkNvZGUgPSBcImNvZGVcIiwgby5Ub2tlbiA9IFwidG9rZW5cIiwgbykpKHIgfHwge30pO1xuZXhwb3J0IHtcbiAgciBhcyBSZXNwb25zZVR5cGVcbn07XG4iLCJpbXBvcnQgbSBmcm9tIFwiLi4vY29uZmlnL2luZGV4LmpzXCI7XG5pbXBvcnQgeyBGUkxvZ2dlciBhcyBnIH0gZnJvbSBcIi4uL3V0aWwvbG9nZ2VyLmpzXCI7XG5pbXBvcnQgdSwgeyBhbGxvd2VkRXJyb3JzIGFzIHQgfSBmcm9tIFwiLi4vb2F1dGgyLWNsaWVudC9pbmRleC5qc1wiO1xuaW1wb3J0IGQgZnJvbSBcIi4uL3Rva2VuLXN0b3JhZ2UvaW5kZXguanNcIjtcbmltcG9ydCB7IGdldFN0b3JlZEF1dGhVcmxWYWx1ZXMgYXMgdywgZ2VuZXJhdGVBbmRTdG9yZUF1dGhVcmxWYWx1ZXMgYXMgayB9IGZyb20gXCIuLi9vYXV0aDItY2xpZW50L3N0YXRlLXBrY2UuanNcIjtcbmltcG9ydCB7IHBhcnNlUXVlcnkgYXMgeSB9IGZyb20gXCIuLi91dGlsL3VybC5qc1wiO1xuaW1wb3J0IHsgdG9rZW5zV2lsbEV4cGlyZVdpdGhpblRocmVzaG9sZCBhcyBFIH0gZnJvbSBcIi4vaGVscGVycy5qc1wiO1xuaW1wb3J0IHsgUmVzcG9uc2VUeXBlIGFzIHEgfSBmcm9tIFwiLi4vb2F1dGgyLWNsaWVudC9lbnVtcy5qc1wiO1xuY2xhc3MgZiB7XG4gIC8qKlxuICAgICAqIFRva2VuIE1hbmFnZXIgY2xhc3MgdGhhdCBwcm92aWRlcyBoaWdoLWxldmVsIGFic3RyYWN0aW9uIGZvciBBdXRob3JpemF0aW9uIENvZGUgZmxvdyxcbiAgICAgKiBQS0NFIHZhbHVlIGdlbmVyYXRpb24sIHRva2VuIGV4Y2hhbmdlIGFuZCB0b2tlbiBzdG9yYWdlLlxuICAgICAqXG4gICAgICogU3VwcG9ydHMgYm90aCBlbWJlZGRlZCBhdXRoZW50aWNhdGlvbiBhcyB3ZWxsIGFzIGV4dGVybmFsIGF1dGhlbnRpY2F0aW9uIHZpYSByZWRpcmVjdHNcbiAgICAgKlxuICAgICBFeGFtcGxlIDE6XG4gIFxuICAgICBgYGBqc1xuICAgICBjb25zdCB0b2tlbnMgPSBmb3JnZXJvY2suVG9rZW5NYW5hZ2VyLmdldFRva2Vucyh7XG4gICAgICAgZm9yY2VSZW5ldzogdHJ1ZSwgLy8gSWYgeW91IHdhbnQgdG8gZ2V0IG5ldyB0b2tlbnMsIGRlc3BpdGUgZXhpc3Rpbmcgb25lc1xuICAgICAgIGxvZ2luOiAnZW1iZWRkZWQnLCAvLyBJZiB1c2VyIGF1dGhlbnRpY2F0aW9uIGlzIGhhbmRsZWQgaW4tYXBwXG4gICAgICAgc2VydmVyQ29uZmlnOiB7XG4gICAgICAgICB0aW1lb3V0OiA1MDAwLFxuICAgICAgIH0sXG4gICAgIH0pO1xuICAgICBgYGBcbiAgXG4gICAgIEV4YW1wbGUgMjpcbiAgXG4gICAgIGBgYGpzXG4gICAgIGNvbnN0IHRva2VucyA9IGZvcmdlcm9jay5Ub2tlbk1hbmFnZXIuZ2V0VG9rZW5zKHtcbiAgICAgICBmb3JjZVJlbmV3OiBmYWxzZSwgLy8gV2lsbCBpbW1lZGlhdGVseSByZXR1cm4gc3RvcmVkIHRva2VucywgaWYgdGhleSBleGlzdFxuICAgICAgIGxvZ2luOiAncmVkaXJlY3QnLCAvLyBJZiB1c2VyIGF1dGhlbnRpY2F0aW9uIGlzIGhhbmRsZWQgaW4gZXh0ZXJuYWwgV2ViIGFwcFxuICAgICB9KTtcbiAgICAgYGBgXG4gIFxuICAgICBFeGFtcGxlIDM6XG4gIFxuICAgICBgYGBqc1xuICAgICBjb25zdCB0b2tlbnMgPSBmb3JnZXJvY2suVG9rZW5NYW5hZ2VyLmdldFRva2Vucyh7XG4gICAgICAgcXVlcnk6IHtcbiAgICAgICAgIGNvZGU6ICdsRkpRWWRvUUcxdTduVW04IC4uLiAnLCAvLyBBdXRob3JpemF0aW9uIGNvZGUgZnJvbSByZWRpcmVjdCBVUkxcbiAgICAgICAgIHN0YXRlOiAnTVRZMk5Ea3hOVFEyTmRlM0QgLi4uICcsIC8vIFN0YXRlIGZyb20gcmVkaXJlY3QgVVJMXG4gICAgICAgfSxcbiAgICAgfSk7XG4gICAgIGBgYFxuICAgICAqL1xuICBzdGF0aWMgYXN5bmMgZ2V0VG9rZW5zKHIpIHtcbiAgICBjb25zdCB7IGNsaWVudElkOiBhLCBvYXV0aFRocmVzaG9sZDogaCwgcHJlZml4OiBjIH0gPSBtLmdldChyKTtcbiAgICBpZiAoIWEpXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJDbGllbnQgSUQgaXMgcmVxdWlyZWRcIik7XG4gICAgY29uc3QgaSA9IGF3YWl0IGQuZ2V0KCk7XG4gICAgaWYgKGkgJiYgIXI/LmZvcmNlUmVuZXcgJiYgIXI/LnF1ZXJ5Py5jb2RlICYmICFFKGgsIGkudG9rZW5FeHBpcnkpKVxuICAgICAgcmV0dXJuIGk7XG4gICAgaWYgKGkpXG4gICAgICB0cnkge1xuICAgICAgICBhd2FpdCB1LnJldm9rZVRva2VuKHIpLCBhd2FpdCBmLmRlbGV0ZVRva2VucygpO1xuICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICBnLndhcm4oXCJFeGlzdGluZyB0b2tlbnMgY291bGQgbm90IGJlIHJldm9rZWQgb3IgZGVsZXRlZFwiLCBlKTtcbiAgICAgIH1cbiAgICBpZiAocj8ucXVlcnk/LmNvZGUgJiYgcj8ucXVlcnk/LnN0YXRlKSB7XG4gICAgICBjb25zdCB7IHN0YXRlOiBlLCB2ZXJpZmllcjogbiB9ID0gdyhhLCBjKTtcbiAgICAgIGlmIChlID09PSB2b2lkIDAgfHwgbiA9PT0gdm9pZCAwKVxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgXCJgc3RhdGVgIGFuZC9vciBgdmVyaWZpZXJgIG5vdCBmb3VuZCBpbiBzZXNzaW9uU3RvcmFnZS4gRGVidWdnaW5nOiBzZXNzaW9uU3RvcmFnZSBpcyBub3QgYWNjZXNzaWJsZSBpbiBzZXBhcmF0ZSB0YWJzLlwiXG4gICAgICAgICk7XG4gICAgICByZXR1cm4gYXdhaXQgdGhpcy50b2tlbkV4Y2hhbmdlKHIsIHsgc3RhdGU6IGUsIHZlcmlmaWVyOiBuIH0pO1xuICAgIH1cbiAgICBjb25zdCBvID0gT2JqZWN0LmFzc2lnbih7fSwgcik7XG4gICAgZGVsZXRlIG8uZm9yY2VSZW5ldztcbiAgICBjb25zdCBbcywgbF0gPSBrKHtcbiAgICAgIC4uLm8sXG4gICAgICBjbGllbnRJZDogYSxcbiAgICAgIHByZWZpeDogYyxcbiAgICAgIHJlc3BvbnNlVHlwZTogcS5Db2RlXG4gICAgfSk7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IGUgPSBuZXcgVVJMKGF3YWl0IHUuZ2V0QXV0aENvZGVCeUlmcmFtZShzKSk7XG4gICAgICBpZiAoZS5zZWFyY2hQYXJhbXMuZ2V0KFwiZXJyb3JcIikpXG4gICAgICAgIHRocm93IEVycm9yKGAke2Uuc2VhcmNoUGFyYW1zLmdldChcImVycm9yX2Rlc2NyaXB0aW9uXCIpfWApO1xuICAgICAgaWYgKCFlLnNlYXJjaFBhcmFtcy5nZXQoXCJjb2RlXCIpKVxuICAgICAgICB0aHJvdyBFcnJvcih0LkF1dGhlbnRpY2F0aW9uQ29uc2VudFJlcXVpcmVkKTtcbiAgICAgIGNvbnN0IG4gPSB5KGUudG9TdHJpbmcoKSk7XG4gICAgICByIHx8IChyID0ge30pLCByLnF1ZXJ5ID0gbjtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICBpZiAoIShlIGluc3RhbmNlb2YgRXJyb3IpIHx8IHI/LmxvZ2luICE9PSBcInJlZGlyZWN0XCIgfHwgdC5BdXRoZW50aWNhdGlvbklzUmVxdWlyZWQgIT09IGUubWVzc2FnZSAmJiB0LkF1dGhlbnRpY2F0aW9uQ29uc2VudFJlcXVpcmVkICE9PSBlLm1lc3NhZ2UgJiYgdC5BdXRob3JpemF0aW9uVGltZW91dCAhPT0gZS5tZXNzYWdlICYmIHQuRmFpbGVkVG9GZXRjaCAhPT0gZS5tZXNzYWdlICYmIHQuTmV0d29ya0Vycm9yICE9PSBlLm1lc3NhZ2UgJiYgdC5JbnRlcmFjdGlvbk5vdEFsbG93ZWQgIT09IGUubWVzc2FnZSAmJiB0LlJlcXVlc3RSZXF1aXJlc0NvbnNlbnQgIT09IGUubWVzc2FnZSAmJiAvLyBDaGVjayBmb3IgUGluZyBJZGVudGl0eSBMb2dpbiBSZXF1aXJlZCBlcnJvclxuICAgICAgLy8gTG9uZyBtZXNzYWdlLCBzbyBqdXN0IGNoZWNrIHN1YnN0cmluZ1xuICAgICAgIWUubWVzc2FnZS5pbmNsdWRlcyh0LkxvZ2luUmVxdWlyZWQpICYmIC8vIFNhZmFyaSBoYXMgYSB2ZXJ5IGxvbmcgZXJyb3IgbWVzc2FnZSwgc28gd2UgY2hlY2sgZm9yIGEgc3Vic3RyaW5nXG4gICAgICAhZS5tZXNzYWdlLmluY2x1ZGVzKHQuQ09SU0Vycm9yKSlcbiAgICAgICAgdGhyb3cgZTtcbiAgICAgIGNvbnN0IG4gPSBhd2FpdCB1LmNyZWF0ZUF1dGhvcml6ZVVybChzKTtcbiAgICAgIHJldHVybiBsKCksIGxvY2F0aW9uLmFzc2lnbihuKTtcbiAgICB9XG4gICAgcmV0dXJuIGF3YWl0IHRoaXMudG9rZW5FeGNoYW5nZShyLCB7XG4gICAgICBzdGF0ZTogcy5zdGF0ZSxcbiAgICAgIHZlcmlmaWVyOiBzLnZlcmlmaWVyXG4gICAgfSk7XG4gIH1cbiAgc3RhdGljIGFzeW5jIGRlbGV0ZVRva2VucygpIHtcbiAgICBhd2FpdCBkLnJlbW92ZSgpO1xuICB9XG4gIHN0YXRpYyBhc3luYyB0b2tlbkV4Y2hhbmdlKHIsIGEpIHtcbiAgICBpZiAoci5xdWVyeT8uc3RhdGUgIT09IGEuc3RhdGUpXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJTdGF0ZSBtaXNtYXRjaFwiKTtcbiAgICBpZiAoIXIucXVlcnk/LmNvZGUgfHwgQXJyYXkuaXNBcnJheShyLnF1ZXJ5Py5jb2RlKSlcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIkZhaWxlZCB0byBhY3F1aXJlIGF1dGhvcml6YXRpb24gY29kZVwiKTtcbiAgICBjb25zdCBoID0gci5xdWVyeT8uY29kZSwgYyA9IGEudmVyaWZpZXIsIGkgPSB7IC4uLnIsIGF1dGhvcml6YXRpb25Db2RlOiBoLCB2ZXJpZmllcjogYyB9LCBvID0gYXdhaXQgdS5nZXRPQXV0aDJUb2tlbnMoaSk7XG4gICAgaWYgKCFvIHx8ICFvLmFjY2Vzc1Rva2VuKVxuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiVW5hYmxlIHRvIGV4Y2hhbmdlIGF1dGhvcml6YXRpb24gZm9yIHRva2Vuc1wiKTtcbiAgICB0cnkge1xuICAgICAgYXdhaXQgZC5zZXQobyk7XG4gICAgfSBjYXRjaCAocykge1xuICAgICAgZy5lcnJvcihcIkZhaWxlZCB0byBzdG9yZSB0b2tlbnNcIiwgcyk7XG4gICAgfVxuICAgIHJldHVybiBvO1xuICB9XG59XG5leHBvcnQge1xuICBmIGFzIGRlZmF1bHRcbn07XG4iLCJpbXBvcnQgeyBGUkxvZ2dlciBhcyB0IH0gZnJvbSBcIi4uL3V0aWwvbG9nZ2VyLmpzXCI7XG5pbXBvcnQgcyBmcm9tIFwiLi4vb2F1dGgyLWNsaWVudC9pbmRleC5qc1wiO1xuaW1wb3J0IGkgZnJvbSBcIi4uL3Nlc3Npb24tbWFuYWdlci9pbmRleC5qc1wiO1xuaW1wb3J0IGMgZnJvbSBcIi4uL3Rva2VuLW1hbmFnZXIvaW5kZXguanNcIjtcbmltcG9ydCBsIGZyb20gXCIuLi90b2tlbi1zdG9yYWdlL2luZGV4LmpzXCI7XG5jbGFzcyBrIHtcbiAgLyoqXG4gICAqIExvZ3MgdGhlIHVzZXIgaW4gd2l0aCB0aGUgc3BlY2lmaWVkIHN0ZXAgaGFuZGxlciwgYWNxdWlyZXMgT0F1dGggdG9rZW5zLCBhbmQgcmV0cmlldmVzXG4gICAqIHVzZXIgcHJvZmlsZS4gICoqQ3VycmVudGx5IG5vdCBpbXBsZW1lbnRlZC4qKlxuICAgKlxuICAgKiBAdHlwZXBhcmFtIFQgVGhlIHR5cGUgb2YgdXNlciBvYmplY3QgZXhwZWN0ZWRcbiAgICogQHBhcmFtIGhhbmRsZXIgVGhlIGZ1bmN0aW9uIHRvIGludm9rZSB3aGVuIGhhbmRsaW5nIGF1dGhlbnRpY2F0aW9uIHN0ZXBzXG4gICAqIEBwYXJhbSBvcHRpb25zIENvbmZpZ3VyYXRpb24gb3ZlcnJpZGVzXG4gICAqL1xuICBzdGF0aWMgYXN5bmMgbG9naW4oZSwgbykge1xuICAgIHRocm93IHQuaW5mbyhlLCBvKSwgbmV3IEVycm9yKFwiRlJVc2VyLmxvZ2luKCkgbm90IGltcGxlbWVudGVkXCIpO1xuICB9XG4gIC8qKlxuICAgKiBFbmRzIHRoZSB1c2VyJ3Mgc2Vzc2lvbiBhbmQgcmV2b2tlcyBPQXV0aCB0b2tlbnMuXG4gICAqXG4gICAqIEBwYXJhbSBvcHRpb25zIENvbmZpZ3VyYXRpb24gb3ZlcnJpZGVzXG4gICAqL1xuICBzdGF0aWMgYXN5bmMgbG9nb3V0KGUpIHtcbiAgICBjb25zdCBvID0geyAuLi5lIH07XG4gICAgZGVsZXRlIG8ucmVkaXJlY3Q7XG4gICAgdHJ5IHtcbiAgICAgIGF3YWl0IGkubG9nb3V0KG8pO1xuICAgIH0gY2F0Y2gge1xuICAgICAgdC53YXJuKFwiU2Vzc2lvbiBsb2dvdXQgd2FzIG5vdCBzdWNjZXNzZnVsXCIpO1xuICAgIH1cbiAgICB0cnkge1xuICAgICAgYXdhaXQgcy5yZXZva2VUb2tlbihvKTtcbiAgICB9IGNhdGNoIHtcbiAgICAgIHQud2FybihcIk9BdXRoIHJldm9rZVRva2VuIHdhcyBub3Qgc3VjY2Vzc2Z1bFwiKTtcbiAgICB9XG4gICAgY29uc3QgbiA9IGF3YWl0IGwuZ2V0KCksIHsgaWRUb2tlbjogYSA9IFwiXCIgfSA9IG4gfHwge307XG4gICAgYXdhaXQgYy5kZWxldGVUb2tlbnMoKTtcbiAgICB0cnkge1xuICAgICAgYXdhaXQgcy5lbmRTZXNzaW9uKHsgLi4uZSwgaWRUb2tlbjogYSB9KTtcbiAgICB9IGNhdGNoIHtcbiAgICAgIHQud2FybihcIk9BdXRoIGVuZFNlc3Npb24gd2FzIG5vdCBzdWNjZXNzZnVsXCIpO1xuICAgIH1cbiAgfVxufVxuZXhwb3J0IHtcbiAgayBhcyBkZWZhdWx0XG59O1xuIiwidmFyIG8gPSAvKiBAX19QVVJFX18gKi8gKChyKSA9PiAoci5FcnJvciA9IFwiRVJST1JcIiwgci5VbnN1cHBvcnRlZCA9IFwidW5zdXBwb3J0ZWRcIiwgcikpKG8gfHwge30pLCBFID0gLyogQF9fUFVSRV9fICovICgocikgPT4gKHIuQWJvcnRFcnJvciA9IFwiQWJvcnRFcnJvclwiLCByLkRhdGFFcnJvciA9IFwiRGF0YUVycm9yXCIsIHIuQ29uc3RyYWludEVycm9yID0gXCJDb25zdHJhaW50RXJyb3JcIiwgci5FbmNvZGluZ0Vycm9yID0gXCJFbmNvZGluZ0Vycm9yXCIsIHIuSW52YWxpZEVycm9yID0gXCJJbnZhbGlkRXJyb3JcIiwgci5OZXR3b3JrRXJyb3IgPSBcIk5ldHdvcmtFcnJvclwiLCByLk5vdEFsbG93ZWRFcnJvciA9IFwiTm90QWxsb3dlZEVycm9yXCIsIHIuTm90U3VwcG9ydGVkRXJyb3IgPSBcIk5vdFN1cHBvcnRlZEVycm9yXCIsIHIuU2VjdXJpdHlFcnJvciA9IFwiU2VjdXJpdHlFcnJvclwiLCByLlRpbWVvdXRFcnJvciA9IFwiVGltZW91dEVycm9yXCIsIHIuVW5rbm93bkVycm9yID0gXCJVbmtub3duRXJyb3JcIiwgcikpKEUgfHwge30pLCBpID0gLyogQF9fUFVSRV9fICovICgocikgPT4gKHJbci5Ob25lID0gMF0gPSBcIk5vbmVcIiwgcltyLkF1dGhlbnRpY2F0aW9uID0gMV0gPSBcIkF1dGhlbnRpY2F0aW9uXCIsIHJbci5SZWdpc3RyYXRpb24gPSAyXSA9IFwiUmVnaXN0cmF0aW9uXCIsIHIpKShpIHx8IHt9KTtcbmV4cG9ydCB7XG4gIG8gYXMgV2ViQXV0aG5PdXRjb21lLFxuICBFIGFzIFdlYkF1dGhuT3V0Y29tZVR5cGUsXG4gIGkgYXMgV2ViQXV0aG5TdGVwVHlwZVxufTtcbiIsImltcG9ydCB7IFdlYkF1dGhuT3V0Y29tZVR5cGUgYXMgbyB9IGZyb20gXCIuL2VudW1zLmpzXCI7XG5mdW5jdGlvbiBzKHIpIHtcbiAgcmV0dXJuIHIgfHwgW107XG59XG5mdW5jdGlvbiB1KHIpIHtcbiAgY29uc3QgbiA9IG5ldyBVaW50OEFycmF5KHIpO1xuICByZXR1cm4gbmV3IFRleHREZWNvZGVyKCkuZGVjb2RlKG4pO1xufVxuZnVuY3Rpb24gZihyKSB7XG4gIHJldHVybiByID8gclsxXSA6IFwiXCI7XG59XG5mdW5jdGlvbiBhKHIpIHtcbiAgdHJ5IHtcbiAgICByZXR1cm4gci5zcGxpdChcIn1cIikuZmlsdGVyKChlKSA9PiAhIWUgJiYgZSAhPT0gXCJdXCIpLm1hcCgoZSkgPT4ge1xuICAgICAgY29uc3QgdCA9IGMoZSk7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBpZDogbmV3IEludDhBcnJheSh0KS5idWZmZXIsXG4gICAgICAgIHR5cGU6IFwicHVibGljLWtleVwiXG4gICAgICB9O1xuICAgIH0pO1xuICB9IGNhdGNoIHtcbiAgICBjb25zdCBlID0gbmV3IEVycm9yKFwiVHJhbnNmb3JtaW5nIGNyZWRlbnRpYWwgb2JqZWN0IHRvIHN0cmluZyBmYWlsZWRcIik7XG4gICAgdGhyb3cgZS5uYW1lID0gby5FbmNvZGluZ0Vycm9yLCBlO1xuICB9XG59XG5mdW5jdGlvbiBjKHIpIHtcbiAgY29uc3QgbiA9IC9uZXcgSW50OEFycmF5XFwoKC4rKVxcKS8uZXhlYyhyKTtcbiAgcmV0dXJuIG4gPT09IG51bGwgfHwgbi5sZW5ndGggPCAyID8gW10gOiBKU09OLnBhcnNlKG5bMV0pO1xufVxuZnVuY3Rpb24gcChyKSB7XG4gIGlmIChBcnJheS5pc0FycmF5KHIpKVxuICAgIHJldHVybiByO1xuICBpZiAodHlwZW9mIHIgPT0gXCJzdHJpbmdcIilcbiAgICByZXR1cm4gciAmJiByWzBdID09PSBcIltcIiA/IEpTT04ucGFyc2UocikgOiAociA9IHIucmVwbGFjZSgvKFxcdyspOi9nLCAnXCIkMVwiOicpLCBKU09OLnBhcnNlKGBbJHtyfV1gKSk7XG59XG5mdW5jdGlvbiBkKHIpIHtcbiAgcmV0dXJuIHIuaW5jbHVkZXMoXCJycElkXCIpID8gci5yZXBsYWNlKC9ycElkOiBcIiguKylcIiwvLCBcIiQxXCIpIDogci5yZXBsYWNlKC9pZDogXCIoLispXCIsLywgXCIkMVwiKTtcbn1cbmV4cG9ydCB7XG4gIHUgYXMgYXJyYXlCdWZmZXJUb1N0cmluZyxcbiAgcyBhcyBlbnN1cmVBcnJheSxcbiAgZiBhcyBnZXRJbmRleE9uZSxcbiAgYSBhcyBwYXJzZUNyZWRlbnRpYWxzLFxuICBjIGFzIHBhcnNlTnVtYmVyQXJyYXksXG4gIHAgYXMgcGFyc2VQdWJLZXlBcnJheSxcbiAgZCBhcyBwYXJzZVJlbHlpbmdQYXJ0eUlkXG59O1xuIiwiaW1wb3J0IHsgV2ViQXV0aG5PdXRjb21lVHlwZSBhcyBTIH0gZnJvbSBcIi4vZW51bXMuanNcIjtcbmltcG9ydCB7IGdldEluZGV4T25lIGFzIGUsIHBhcnNlUHViS2V5QXJyYXkgYXMgSywgcGFyc2VDcmVkZW50aWFscyBhcyBPLCBlbnN1cmVBcnJheSBhcyB5IH0gZnJvbSBcIi4vaGVscGVycy5qc1wiO1xuZnVuY3Rpb24gVCh0KSB7XG4gIGNvbnN0IHMgPSBuZXcgVGV4dEVuY29kZXIoKSwgciA9IGUodC5tYXRjaCgvYXR0ZXN0YXRpb25cInswLH06XFxzezAsfVwiKFxcdyspXCIvKSksIGMgPSBOdW1iZXIoZSh0Lm1hdGNoKC90aW1lb3V0XCJ7MCx9Olxcc3swLH0oXFxkKykvKSkpLCBsID0gZShcbiAgICB0Lm1hdGNoKC91c2VyVmVyaWZpY2F0aW9uXCJ7MCx9Olxcc3swLH1cIihcXHcrKVwiLylcbiAgKSwgaSA9IGUoXG4gICAgdC5tYXRjaCgvcmVxdWlyZVJlc2lkZW50S2V5XCJ7MCx9Olxcc3swLH0oXFx3KykvKVxuICApLCBvID0gZShcbiAgICB0Lm1hdGNoKC9hdXRoZW50aWNhdG9yQXR0YWNobWVudFwiezAsfTpcXHN7MCx9XCIoW1xcdy1dKykvKVxuICApLCBtID0gZSh0Lm1hdGNoKC9ycFwiezAsfTpcXHN7MCx9eyhbXn1dKyl9LykpLnRyaW0oKSwgYSA9IGUobS5tYXRjaCgvaWRcInswLH06XFxzezAsfVwiKFteXCJdKilcIi8pKSwgdyA9IGUobS5tYXRjaCgvbmFtZVwiezAsfTpcXHN7MCx9XCIoW15cIl0qKVwiLykpLCBuID0gZSh0Lm1hdGNoKC91c2VyXCJ7MCx9Olxcc3swLH17KFteXXswLH0pfSwvKSkudHJpbSgpLCB1ID0gZShuLm1hdGNoKC9pZFwiezAsfTpcXHN7MCx9VWludDhBcnJheS5mcm9tXFwoXCIoW15cIl0rKVwiLykpLCBkID0gZShuLm1hdGNoKC9uYW1lXCJ7MCx9Olxcc3swLH1cIihbXFxkXFx3Ll8tXSspXCIvKSksIGggPSBlKG4ubWF0Y2goL2Rpc3BsYXlOYW1lXCJ7MCx9Olxcc3swLH1cIihbXFxkXFx3XFxzLkBfLV0rKVwiLykpLCBwID0gZShcbiAgICAvLyBDYXB0dXJlIHRoZSBgcHViS2V5Q3JlZFBhcmFtc2Agd2l0aG91dCBhbHNvIG1hdGNoaW5nIGBleGNsdWRlQ3JlZGVudGlhbHNgIGFzIHdlbGwuXG4gICAgLy8gYGV4Y2x1ZGVDcmVkZW50aWFsc2AgdmFsdWVzIGFyZSB2ZXJ5IHNpbWlsYXIgdG8gdGhpcyBwcm9wZXJ0eSwgc28gd2UgbmVlZCB0byBtYWtlIHN1cmVcbiAgICAvLyBvdXIgbGFzdCB2YWx1ZSBkb2Vzbid0IGVuZCB3aXRoIFwiYnVmZmVyXCIsIHNvIHdlIGFyZSBvbmx5IGNhcHR1cmluZyBvYmplY3RzIHRoYXRcbiAgICAvLyBlbmQgaW4gYSBkaWdpdCBhbmQgcG9zc2libHkgYSBzcGFjZS5cbiAgICB0Lm1hdGNoKC9wdWJLZXlDcmVkUGFyYW1zXCIqOlxccypcXFsoW15dK1xcZFxccyp9KVxccypdLylcbiAgKS50cmltKCksIEEgPSBLKHApO1xuICBpZiAoIUEpIHtcbiAgICBjb25zdCBiID0gbmV3IEVycm9yKFwiTWlzc2luZyBwdWJLZXlDcmVkUGFyYW1zIHByb3BlcnR5IGZyb20gcmVnaXN0cmF0aW9uIG9wdGlvbnNcIik7XG4gICAgdGhyb3cgYi5uYW1lID0gUy5EYXRhRXJyb3IsIGI7XG4gIH1cbiAgY29uc3QgZyA9IGUoXG4gICAgdC5tYXRjaCgvZXhjbHVkZUNyZWRlbnRpYWxzXCJ7MCx9Olxcc3swLH1cXFsoW15dKylcXHN7MCx9XS8pXG4gICkudHJpbSgpLCBmID0gTyhnKSwgQyA9IHkoXG4gICAgdC5tYXRjaCgvY2hhbGxlbmdlXCJ7MCx9Olxcc3swLH1uZXdcXHN7MCx9KFVpbnR8SW50KThBcnJheVxcKChbXlxcKV0rKS8pXG4gICksIE4gPSBKU09OLnBhcnNlKENbMl0pLCBJID0gbmV3IEludDhBcnJheShOKS5idWZmZXI7XG4gIHJldHVybiB7XG4gICAgYXR0ZXN0YXRpb246IHIsXG4gICAgYXV0aGVudGljYXRvclNlbGVjdGlvbjoge1xuICAgICAgdXNlclZlcmlmaWNhdGlvbjogbCxcbiAgICAgIC8vIE9ubHkgaW5jbHVkZSBhdXRoZW50aWNhdG9yQXR0YWNobWVudCBwcm9wIGlmIHRoZSB2YWx1ZSBpcyB0cnV0aHlcbiAgICAgIC4uLm8gJiYgeyBhdXRoZW50aWNhdG9yQXR0YWNobWVudDogbyB9LFxuICAgICAgLy8gT25seSBpbmNsdWRlIHJlcXVpcmVSZXNpZGVudEtleSBwcm9wIGlmIHRoZSB2YWx1ZSBpcyBvZiBzdHJpbmcgXCJ0cnVlXCJcbiAgICAgIC4uLmkgPT09IFwidHJ1ZVwiICYmIHtcbiAgICAgICAgcmVxdWlyZVJlc2lkZW50S2V5OiAhIWlcbiAgICAgIH1cbiAgICB9LFxuICAgIGNoYWxsZW5nZTogSSxcbiAgICAuLi5mLmxlbmd0aCAmJiB7IGV4Y2x1ZGVDcmVkZW50aWFsczogZiB9LFxuICAgIHB1YktleUNyZWRQYXJhbXM6IEEsXG4gICAgcnA6IHtcbiAgICAgIG5hbWU6IHcsXG4gICAgICAvLyBvbmx5IGFkZCBrZXktdmFsdWUgcGFpciBpZiB0cnV0aHkgdmFsdWUgaXMgcHJvdmlkZWRcbiAgICAgIC4uLmEgJiYgeyBpZDogYSB9XG4gICAgfSxcbiAgICB0aW1lb3V0OiBjLFxuICAgIHVzZXI6IHtcbiAgICAgIGRpc3BsYXlOYW1lOiBoLFxuICAgICAgaWQ6IHMuZW5jb2RlKHUpLFxuICAgICAgbmFtZTogZFxuICAgIH1cbiAgfTtcbn1cbmZ1bmN0aW9uIEUodCkge1xuICBsZXQgcywgcjtcbiAgdC5pbmNsdWRlcyhcImFjY2VwdGFibGVDcmVkZW50aWFsc1wiKSA/IHIgPSBlKFxuICAgIHQubWF0Y2goL2FjY2VwdGFibGVDcmVkZW50aWFsc1wiKlxccyo9XFxzKlxcWyhbXl0rKVxccypdLylcbiAgKS50cmltKCkgOiByID0gZShcbiAgICB0Lm1hdGNoKC9hbGxvd0NyZWRlbnRpYWxzXCJ7MCx9Olxcc3swLH1cXFsoW15dKylcXHN7MCx9XS8pXG4gICkudHJpbSgpO1xuICBjb25zdCBjID0gZShcbiAgICB0Lm1hdGNoKC91c2VyVmVyaWZpY2F0aW9uXCJ7MCx9Olxcc3swLH1cIihcXHcrKVwiLylcbiAgKTtcbiAgciAmJiAocyA9IChyLnNwbGl0KFwifSxcIikgfHwgW3JdKS5tYXAoKG4pID0+IHtcbiAgICBjb25zdCB1ID0gZShuLm1hdGNoKC90eXBlXCJ7MCx9Olxcc3swLH1cIihbXFx3LV0rKVwiLykpLCBkID0geShuLm1hdGNoKC9pZFwiezAsfTpcXHN7MCx9bmV3XFxzezAsfShVaW50fEludCk4QXJyYXlcXCgoW15cXCldKykvKSksIGggPSBKU09OLnBhcnNlKGRbMl0pLCBwID0gbmV3IEludDhBcnJheShoKS5idWZmZXI7XG4gICAgcmV0dXJuIHtcbiAgICAgIHR5cGU6IHUsXG4gICAgICBpZDogcFxuICAgIH07XG4gIH0pKTtcbiAgY29uc3QgbCA9IE51bWJlcihlKHQubWF0Y2goL3RpbWVvdXRcInswLH06XFxzezAsfShcXGQrKS8pKSksIGkgPSB5KFxuICAgIHQubWF0Y2goL2NoYWxsZW5nZVwiezAsfTpcXHN7MCx9bmV3XFxzezAsfShVaW50fEludCk4QXJyYXlcXCgoW15cXCldKykvKVxuICApLCBvID0gSlNPTi5wYXJzZShpWzJdKSwgbSA9IG5ldyBJbnQ4QXJyYXkobykuYnVmZmVyLCBhID0gZSh0Lm1hdGNoKC9ycElkXCJ7MCx9Olxcc3swLH1cXFxcezAsfVwiKFteXCJcXFxcXSopLykpO1xuICByZXR1cm4ge1xuICAgIGNoYWxsZW5nZTogbSxcbiAgICB0aW1lb3V0OiBsLFxuICAgIC8vIG9ubHkgYWRkIGtleS12YWx1ZSBwYWlycyBpZiB0aGUgdHJ1dGh5IHZhbHVlcyBhcmUgcHJvdmlkZWRcbiAgICAuLi5zICYmIHsgYWxsb3dDcmVkZW50aWFsczogcyB9LFxuICAgIC4uLmMgJiYgeyB1c2VyVmVyaWZpY2F0aW9uOiBjIH0sXG4gICAgLi4uYSAmJiB7IHJwSWQ6IGEgfVxuICB9O1xufVxuZXhwb3J0IHtcbiAgRSBhcyBwYXJzZVdlYkF1dGhuQXV0aGVudGljYXRlVGV4dCxcbiAgVCBhcyBwYXJzZVdlYkF1dGhuUmVnaXN0ZXJUZXh0XG59O1xuIiwiaW1wb3J0IHsgQ2FsbGJhY2tUeXBlIGFzIGIgfSBmcm9tIFwiLi4vYXV0aC9lbnVtcy5qc1wiO1xuaW1wb3J0IHsgV2ViQXV0aG5TdGVwVHlwZSBhcyBnLCBXZWJBdXRobk91dGNvbWVUeXBlIGFzIHMsIFdlYkF1dGhuT3V0Y29tZSBhcyBkIH0gZnJvbSBcIi4vZW51bXMuanNcIjtcbmltcG9ydCB7IGFycmF5QnVmZmVyVG9TdHJpbmcgYXMgaCwgcGFyc2VSZWx5aW5nUGFydHlJZCBhcyBmLCBwYXJzZUNyZWRlbnRpYWxzIGFzIHcsIHBhcnNlUHViS2V5QXJyYXkgYXMgQSB9IGZyb20gXCIuL2hlbHBlcnMuanNcIjtcbmltcG9ydCB7IHBhcnNlV2ViQXV0aG5BdXRoZW50aWNhdGVUZXh0IGFzIEUsIHBhcnNlV2ViQXV0aG5SZWdpc3RlclRleHQgYXMgUCB9IGZyb20gXCIuL3NjcmlwdC1wYXJzZXIuanNcIjtcbmNsYXNzIFQge1xuICAvKipcbiAgICogRGV0ZXJtaW5lcyBpZiB0aGUgZ2l2ZW4gc3RlcCBpcyBhIFdlYkF1dGhuIHN0ZXAuXG4gICAqXG4gICAqIEBwYXJhbSBzdGVwIFRoZSBzdGVwIHRvIGV2YWx1YXRlXG4gICAqIEByZXR1cm4gQSBXZWJBdXRoblN0ZXBUeXBlIHZhbHVlXG4gICAqL1xuICBzdGF0aWMgZ2V0V2ViQXV0aG5TdGVwVHlwZShlKSB7XG4gICAgY29uc3QgYSA9IHRoaXMuZ2V0T3V0Y29tZUNhbGxiYWNrKGUpLCB0ID0gdGhpcy5nZXRNZXRhZGF0YUNhbGxiYWNrKGUpLCBpID0gdGhpcy5nZXRUZXh0T3V0cHV0Q2FsbGJhY2soZSk7XG4gICAgcmV0dXJuIGEgJiYgdCA/IHQuZ2V0T3V0cHV0VmFsdWUoXCJkYXRhXCIpPy5wdWJLZXlDcmVkUGFyYW1zID8gZy5SZWdpc3RyYXRpb24gOiBnLkF1dGhlbnRpY2F0aW9uIDogYSAmJiBpID8gaS5nZXRNZXNzYWdlKCkuaW5jbHVkZXMoXCJwdWJLZXlDcmVkUGFyYW1zXCIpID8gZy5SZWdpc3RyYXRpb24gOiBnLkF1dGhlbnRpY2F0aW9uIDogZy5Ob25lO1xuICB9XG4gIC8qKlxuICAgKiBQb3B1bGF0ZXMgdGhlIHN0ZXAgd2l0aCB0aGUgbmVjZXNzYXJ5IGF1dGhlbnRpY2F0aW9uIG91dGNvbWUuXG4gICAqXG4gICAqIEBwYXJhbSBzdGVwIFRoZSBzdGVwIHRoYXQgY29udGFpbnMgV2ViQXV0aG4gYXV0aGVudGljYXRpb24gZGF0YVxuICAgKiBAcmV0dXJuIFRoZSBwb3B1bGF0ZWQgc3RlcFxuICAgKi9cbiAgc3RhdGljIGFzeW5jIGF1dGhlbnRpY2F0ZShlKSB7XG4gICAgY29uc3QgeyBoaWRkZW5DYWxsYmFjazogYSwgbWV0YWRhdGFDYWxsYmFjazogdCwgdGV4dE91dHB1dENhbGxiYWNrOiBpIH0gPSB0aGlzLmdldENhbGxiYWNrcyhlKTtcbiAgICBpZiAoYSAmJiAodCB8fCBpKSkge1xuICAgICAgbGV0IG87XG4gICAgICB0cnkge1xuICAgICAgICBsZXQgcjtcbiAgICAgICAgaWYgKHQpIHtcbiAgICAgICAgICBjb25zdCBjID0gdC5nZXRPdXRwdXRWYWx1ZShcImRhdGFcIik7XG4gICAgICAgICAgciA9IHRoaXMuY3JlYXRlQXV0aGVudGljYXRpb25QdWJsaWNLZXkoYyk7XG4gICAgICAgIH0gZWxzZSBpICYmIChyID0gRShpLmdldE1lc3NhZ2UoKSkpO1xuICAgICAgICBjb25zdCBuID0gYXdhaXQgdGhpcy5nZXRBdXRoZW50aWNhdGlvbkNyZWRlbnRpYWwocik7XG4gICAgICAgIG8gPSB0aGlzLmdldEF1dGhlbnRpY2F0aW9uT3V0Y29tZShuKTtcbiAgICAgIH0gY2F0Y2ggKHIpIHtcbiAgICAgICAgdGhyb3cgciBpbnN0YW5jZW9mIEVycm9yID8gci5uYW1lID09PSBzLk5vdFN1cHBvcnRlZEVycm9yID8gKGEuc2V0SW5wdXRWYWx1ZShkLlVuc3VwcG9ydGVkKSwgcikgOiAoYS5zZXRJbnB1dFZhbHVlKGAke2QuRXJyb3J9Ojoke3IubmFtZX06JHtyLm1lc3NhZ2V9YCksIHIpIDogcjtcbiAgICAgIH1cbiAgICAgIHJldHVybiBhLnNldElucHV0VmFsdWUobyksIGU7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IG8gPSBuZXcgRXJyb3IoXCJJbmNvcnJlY3QgY2FsbGJhY2tzIGZvciBXZWJBdXRobiBhdXRoZW50aWNhdGlvblwiKTtcbiAgICAgIHRocm93IG8ubmFtZSA9IHMuRGF0YUVycm9yLCBhPy5zZXRJbnB1dFZhbHVlKGAke2QuRXJyb3J9Ojoke28ubmFtZX06JHtvLm1lc3NhZ2V9YCksIG87XG4gICAgfVxuICB9XG4gIC8qKlxuICAgKiBQb3B1bGF0ZXMgdGhlIHN0ZXAgd2l0aCB0aGUgbmVjZXNzYXJ5IHJlZ2lzdHJhdGlvbiBvdXRjb21lLlxuICAgKlxuICAgKiBAcGFyYW0gc3RlcCBUaGUgc3RlcCB0aGF0IGNvbnRhaW5zIFdlYkF1dGhuIHJlZ2lzdHJhdGlvbiBkYXRhXG4gICAqIEByZXR1cm4gVGhlIHBvcHVsYXRlZCBzdGVwXG4gICAqL1xuICAvLyBDYW4gbWFrZSB0aGlzIGdlbmVyaWMgY29uc3QgaW4gVHlwZXNjcmlwdCA1LjAgPiBhbmQgdGhlIG5hbWUgaXRzZWxmIHdpbGxcbiAgLy8gYmUgaW5mZXJyZWQgZnJvbSB0aGUgdHlwZSBzbyBgdHlwZW9mIGRldmljZU5hbWVgIHdpbGwgbm90IGp1c3QgcmV0dXJuIHN0cmluZ1xuICAvLyBidXQgdGhlIGFjdHVhbCBuYW1lIG9mIHRoZSBkZXZpY2VOYW1lIHBhc3NlZCBpbiBhcyBhIGdlbmVyaWMuXG4gIHN0YXRpYyBhc3luYyByZWdpc3RlcihlLCBhKSB7XG4gICAgY29uc3QgeyBoaWRkZW5DYWxsYmFjazogdCwgbWV0YWRhdGFDYWxsYmFjazogaSwgdGV4dE91dHB1dENhbGxiYWNrOiBvIH0gPSB0aGlzLmdldENhbGxiYWNrcyhlKTtcbiAgICBpZiAodCAmJiAoaSB8fCBvKSkge1xuICAgICAgbGV0IHI7XG4gICAgICB0cnkge1xuICAgICAgICBsZXQgbjtcbiAgICAgICAgaWYgKGkpIHtcbiAgICAgICAgICBjb25zdCBjID0gaS5nZXRPdXRwdXRWYWx1ZShcImRhdGFcIik7XG4gICAgICAgICAgbiA9IHRoaXMuY3JlYXRlUmVnaXN0cmF0aW9uUHVibGljS2V5KGMpO1xuICAgICAgICAgIGNvbnN0IGwgPSBhd2FpdCB0aGlzLmdldFJlZ2lzdHJhdGlvbkNyZWRlbnRpYWwoXG4gICAgICAgICAgICBuXG4gICAgICAgICAgKTtcbiAgICAgICAgICByID0gdGhpcy5nZXRSZWdpc3RyYXRpb25PdXRjb21lKGwpO1xuICAgICAgICB9IGVsc2UgaWYgKG8pIHtcbiAgICAgICAgICBuID0gUChvLmdldE1lc3NhZ2UoKSk7XG4gICAgICAgICAgY29uc3QgYyA9IGF3YWl0IHRoaXMuZ2V0UmVnaXN0cmF0aW9uQ3JlZGVudGlhbChcbiAgICAgICAgICAgIG5cbiAgICAgICAgICApO1xuICAgICAgICAgIHIgPSB0aGlzLmdldFJlZ2lzdHJhdGlvbk91dGNvbWUoYyk7XG4gICAgICAgIH0gZWxzZVxuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIk5vIENyZWRlbnRpYWwgZm91bmQgZnJvbSBQdWJsaWMgS2V5XCIpO1xuICAgICAgfSBjYXRjaCAobikge1xuICAgICAgICB0aHJvdyBuIGluc3RhbmNlb2YgRXJyb3IgPyBuLm5hbWUgPT09IHMuTm90U3VwcG9ydGVkRXJyb3IgPyAodC5zZXRJbnB1dFZhbHVlKGQuVW5zdXBwb3J0ZWQpLCBuKSA6ICh0LnNldElucHV0VmFsdWUoYCR7ZC5FcnJvcn06OiR7bi5uYW1lfToke24ubWVzc2FnZX1gKSwgbikgOiBuO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHQuc2V0SW5wdXRWYWx1ZShcbiAgICAgICAgYSAmJiBhLmxlbmd0aCA+IDAgPyBgJHtyfTo6JHthfWAgOiByXG4gICAgICApLCBlO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCByID0gbmV3IEVycm9yKFwiSW5jb3JyZWN0IGNhbGxiYWNrcyBmb3IgV2ViQXV0aG4gcmVnaXN0cmF0aW9uXCIpO1xuICAgICAgdGhyb3cgci5uYW1lID0gcy5EYXRhRXJyb3IsIHQ/LnNldElucHV0VmFsdWUoYCR7ZC5FcnJvcn06OiR7ci5uYW1lfToke3IubWVzc2FnZX1gKSwgcjtcbiAgICB9XG4gIH1cbiAgLyoqXG4gICAqIFJldHVybnMgYW4gb2JqZWN0IGNvbnRhaW5pbmcgdGhlIHR3byBXZWJBdXRobiBjYWxsYmFja3MuXG4gICAqXG4gICAqIEBwYXJhbSBzdGVwIFRoZSBzdGVwIHRoYXQgY29udGFpbnMgV2ViQXV0aG4gY2FsbGJhY2tzXG4gICAqIEByZXR1cm4gVGhlIFdlYkF1dGhuIGNhbGxiYWNrc1xuICAgKi9cbiAgc3RhdGljIGdldENhbGxiYWNrcyhlKSB7XG4gICAgY29uc3QgYSA9IHRoaXMuZ2V0T3V0Y29tZUNhbGxiYWNrKGUpLCB0ID0gdGhpcy5nZXRNZXRhZGF0YUNhbGxiYWNrKGUpLCBpID0gdGhpcy5nZXRUZXh0T3V0cHV0Q2FsbGJhY2soZSksIG8gPSB7XG4gICAgICBoaWRkZW5DYWxsYmFjazogYVxuICAgIH07XG4gICAgcmV0dXJuIHQgPyBvLm1ldGFkYXRhQ2FsbGJhY2sgPSB0IDogaSAmJiAoby50ZXh0T3V0cHV0Q2FsbGJhY2sgPSBpKSwgbztcbiAgfVxuICAvKipcbiAgICogUmV0dXJucyB0aGUgV2ViQXV0aG4gbWV0YWRhdGEgY2FsbGJhY2sgY29udGFpbmluZyBkYXRhIHRvIHBhc3MgdG8gdGhlIGJyb3dzZXJcbiAgICogV2ViIEF1dGhlbnRpY2F0aW9uIEFQSS5cbiAgICpcbiAgICogQHBhcmFtIHN0ZXAgVGhlIHN0ZXAgdGhhdCBjb250YWlucyBXZWJBdXRobiBjYWxsYmFja3NcbiAgICogQHJldHVybiBUaGUgbWV0YWRhdGEgY2FsbGJhY2tcbiAgICovXG4gIHN0YXRpYyBnZXRNZXRhZGF0YUNhbGxiYWNrKGUpIHtcbiAgICByZXR1cm4gZS5nZXRDYWxsYmFja3NPZlR5cGUoYi5NZXRhZGF0YUNhbGxiYWNrKS5maW5kKChhKSA9PiB7XG4gICAgICBjb25zdCB0ID0gYS5nZXRPdXRwdXRCeU5hbWUoXCJkYXRhXCIsIHZvaWQgMCk7XG4gICAgICByZXR1cm4gdCAmJiB0Lmhhc093blByb3BlcnR5KFwicmVseWluZ1BhcnR5SWRcIik7XG4gICAgfSk7XG4gIH1cbiAgLyoqXG4gICAqIFJldHVybnMgdGhlIFdlYkF1dGhuIGhpZGRlbiB2YWx1ZSBjYWxsYmFjayB3aGVyZSB0aGUgb3V0Y29tZSBzaG91bGQgYmUgcG9wdWxhdGVkLlxuICAgKlxuICAgKiBAcGFyYW0gc3RlcCBUaGUgc3RlcCB0aGF0IGNvbnRhaW5zIFdlYkF1dGhuIGNhbGxiYWNrc1xuICAgKiBAcmV0dXJuIFRoZSBoaWRkZW4gdmFsdWUgY2FsbGJhY2tcbiAgICovXG4gIHN0YXRpYyBnZXRPdXRjb21lQ2FsbGJhY2soZSkge1xuICAgIHJldHVybiBlLmdldENhbGxiYWNrc09mVHlwZShiLkhpZGRlblZhbHVlQ2FsbGJhY2spLmZpbmQoKGEpID0+IGEuZ2V0T3V0cHV0QnlOYW1lKFwiaWRcIiwgXCJcIikgPT09IFwid2ViQXV0aG5PdXRjb21lXCIpO1xuICB9XG4gIC8qKlxuICAgKiBSZXR1cm5zIHRoZSBXZWJBdXRobiBtZXRhZGF0YSBjYWxsYmFjayBjb250YWluaW5nIGRhdGEgdG8gcGFzcyB0byB0aGUgYnJvd3NlclxuICAgKiBXZWIgQXV0aGVudGljYXRpb24gQVBJLlxuICAgKlxuICAgKiBAcGFyYW0gc3RlcCBUaGUgc3RlcCB0aGF0IGNvbnRhaW5zIFdlYkF1dGhuIGNhbGxiYWNrc1xuICAgKiBAcmV0dXJuIFRoZSBtZXRhZGF0YSBjYWxsYmFja1xuICAgKi9cbiAgc3RhdGljIGdldFRleHRPdXRwdXRDYWxsYmFjayhlKSB7XG4gICAgcmV0dXJuIGUuZ2V0Q2FsbGJhY2tzT2ZUeXBlKGIuVGV4dE91dHB1dENhbGxiYWNrKS5maW5kKChhKSA9PiB7XG4gICAgICBjb25zdCB0ID0gYS5nZXRPdXRwdXRCeU5hbWUoXCJtZXNzYWdlXCIsIHZvaWQgMCk7XG4gICAgICByZXR1cm4gdCAmJiB0LmluY2x1ZGVzKFwid2ViQXV0aG5PdXRjb21lXCIpO1xuICAgIH0pO1xuICB9XG4gIC8qKlxuICAgKiBSZXRyaWV2ZXMgdGhlIGNyZWRlbnRpYWwgZnJvbSB0aGUgYnJvd3NlciBXZWIgQXV0aGVudGljYXRpb24gQVBJLlxuICAgKlxuICAgKiBAcGFyYW0gb3B0aW9ucyBUaGUgcHVibGljIGtleSBvcHRpb25zIGFzc29jaWF0ZWQgd2l0aCB0aGUgcmVxdWVzdFxuICAgKiBAcmV0dXJuIFRoZSBjcmVkZW50aWFsXG4gICAqL1xuICBzdGF0aWMgYXN5bmMgZ2V0QXV0aGVudGljYXRpb25DcmVkZW50aWFsKGUpIHtcbiAgICBpZiAoIXdpbmRvdy5QdWJsaWNLZXlDcmVkZW50aWFsKSB7XG4gICAgICBjb25zdCB0ID0gbmV3IEVycm9yKFwiUHVibGljS2V5Q3JlZGVudGlhbCBub3Qgc3VwcG9ydGVkIGJ5IHRoaXMgYnJvd3NlclwiKTtcbiAgICAgIHRocm93IHQubmFtZSA9IHMuTm90U3VwcG9ydGVkRXJyb3IsIHQ7XG4gICAgfVxuICAgIHJldHVybiBhd2FpdCBuYXZpZ2F0b3IuY3JlZGVudGlhbHMuZ2V0KHsgcHVibGljS2V5OiBlIH0pO1xuICB9XG4gIC8qKlxuICAgKiBDb252ZXJ0cyBhbiBhdXRoZW50aWNhdGlvbiBjcmVkZW50aWFsIGludG8gdGhlIG91dGNvbWUgZXhwZWN0ZWQgYnkgT3BlbkFNLlxuICAgKlxuICAgKiBAcGFyYW0gY3JlZGVudGlhbCBUaGUgY3JlZGVudGlhbCB0byBjb252ZXJ0XG4gICAqIEByZXR1cm4gVGhlIG91dGNvbWUgc3RyaW5nXG4gICAqL1xuICBzdGF0aWMgZ2V0QXV0aGVudGljYXRpb25PdXRjb21lKGUpIHtcbiAgICBpZiAoZSA9PT0gbnVsbCkge1xuICAgICAgY29uc3QgYSA9IG5ldyBFcnJvcihcIk5vIGNyZWRlbnRpYWwgZ2VuZXJhdGVkIGZyb20gYXV0aGVudGljYXRpb25cIik7XG4gICAgICB0aHJvdyBhLm5hbWUgPSBzLlVua25vd25FcnJvciwgYTtcbiAgICB9XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IGEgPSBoKGUucmVzcG9uc2UuY2xpZW50RGF0YUpTT04pLCB0ID0gZS5yZXNwb25zZSwgaSA9IG5ldyBJbnQ4QXJyYXkoXG4gICAgICAgIHQuYXV0aGVudGljYXRvckRhdGFcbiAgICAgICkudG9TdHJpbmcoKSwgbyA9IG5ldyBJbnQ4QXJyYXkodC5zaWduYXR1cmUpLnRvU3RyaW5nKCksIHIgPSBoKGUucmVzcG9uc2UudXNlckhhbmRsZSk7XG4gICAgICBsZXQgbiA9IGAke2F9Ojoke2l9Ojoke299Ojoke2UuaWR9YDtcbiAgICAgIHJldHVybiByICYmIChuID0gYCR7bn06OiR7cn1gKSwgbjtcbiAgICB9IGNhdGNoIHtcbiAgICAgIGNvbnN0IHQgPSBuZXcgRXJyb3IoXCJUcmFuc2Zvcm1pbmcgY3JlZGVudGlhbCBvYmplY3QgdG8gc3RyaW5nIGZhaWxlZFwiKTtcbiAgICAgIHRocm93IHQubmFtZSA9IHMuRW5jb2RpbmdFcnJvciwgdDtcbiAgICB9XG4gIH1cbiAgLyoqXG4gICAqIFJldHJpZXZlcyB0aGUgY3JlZGVudGlhbCBmcm9tIHRoZSBicm93c2VyIFdlYiBBdXRoZW50aWNhdGlvbiBBUEkuXG4gICAqXG4gICAqIEBwYXJhbSBvcHRpb25zIFRoZSBwdWJsaWMga2V5IG9wdGlvbnMgYXNzb2NpYXRlZCB3aXRoIHRoZSByZXF1ZXN0XG4gICAqIEByZXR1cm4gVGhlIGNyZWRlbnRpYWxcbiAgICovXG4gIHN0YXRpYyBhc3luYyBnZXRSZWdpc3RyYXRpb25DcmVkZW50aWFsKGUpIHtcbiAgICBpZiAoIXdpbmRvdy5QdWJsaWNLZXlDcmVkZW50aWFsKSB7XG4gICAgICBjb25zdCB0ID0gbmV3IEVycm9yKFwiUHVibGljS2V5Q3JlZGVudGlhbCBub3Qgc3VwcG9ydGVkIGJ5IHRoaXMgYnJvd3NlclwiKTtcbiAgICAgIHRocm93IHQubmFtZSA9IHMuTm90U3VwcG9ydGVkRXJyb3IsIHQ7XG4gICAgfVxuICAgIHJldHVybiBhd2FpdCBuYXZpZ2F0b3IuY3JlZGVudGlhbHMuY3JlYXRlKHtcbiAgICAgIHB1YmxpY0tleTogZVxuICAgIH0pO1xuICB9XG4gIC8qKlxuICAgKiBDb252ZXJ0cyBhIHJlZ2lzdHJhdGlvbiBjcmVkZW50aWFsIGludG8gdGhlIG91dGNvbWUgZXhwZWN0ZWQgYnkgT3BlbkFNLlxuICAgKlxuICAgKiBAcGFyYW0gY3JlZGVudGlhbCBUaGUgY3JlZGVudGlhbCB0byBjb252ZXJ0XG4gICAqIEByZXR1cm4gVGhlIG91dGNvbWUgc3RyaW5nXG4gICAqL1xuICBzdGF0aWMgZ2V0UmVnaXN0cmF0aW9uT3V0Y29tZShlKSB7XG4gICAgaWYgKGUgPT09IG51bGwpIHtcbiAgICAgIGNvbnN0IGEgPSBuZXcgRXJyb3IoXCJObyBjcmVkZW50aWFsIGdlbmVyYXRlZCBmcm9tIHJlZ2lzdHJhdGlvblwiKTtcbiAgICAgIHRocm93IGEubmFtZSA9IHMuVW5rbm93bkVycm9yLCBhO1xuICAgIH1cbiAgICB0cnkge1xuICAgICAgY29uc3QgYSA9IGgoZS5yZXNwb25zZS5jbGllbnREYXRhSlNPTiksIHQgPSBlLnJlc3BvbnNlLCBpID0gbmV3IEludDhBcnJheShcbiAgICAgICAgdC5hdHRlc3RhdGlvbk9iamVjdFxuICAgICAgKS50b1N0cmluZygpO1xuICAgICAgcmV0dXJuIGAke2F9Ojoke2l9Ojoke2UuaWR9YDtcbiAgICB9IGNhdGNoIHtcbiAgICAgIGNvbnN0IHQgPSBuZXcgRXJyb3IoXCJUcmFuc2Zvcm1pbmcgY3JlZGVudGlhbCBvYmplY3QgdG8gc3RyaW5nIGZhaWxlZFwiKTtcbiAgICAgIHRocm93IHQubmFtZSA9IHMuRW5jb2RpbmdFcnJvciwgdDtcbiAgICB9XG4gIH1cbiAgLyoqXG4gICAqIENvbnZlcnRzIGF1dGhlbnRpY2F0aW9uIHRyZWUgbWV0YWRhdGEgaW50byBvcHRpb25zIHJlcXVpcmVkIGJ5IHRoZSBicm93c2VyXG4gICAqIFdlYiBBdXRoZW50aWNhdGlvbiBBUEkuXG4gICAqXG4gICAqIEBwYXJhbSBtZXRhZGF0YSBUaGUgbWV0YWRhdGEgcHJvdmlkZWQgaW4gdGhlIGF1dGhlbnRpY2F0aW9uIHRyZWUgTWV0YWRhdGFDYWxsYmFja1xuICAgKiBAcmV0dXJuIFRoZSBXZWIgQXV0aGVudGljYXRpb24gQVBJIHJlcXVlc3Qgb3B0aW9uc1xuICAgKi9cbiAgc3RhdGljIGNyZWF0ZUF1dGhlbnRpY2F0aW9uUHVibGljS2V5KGUpIHtcbiAgICBjb25zdCB7XG4gICAgICBhY2NlcHRhYmxlQ3JlZGVudGlhbHM6IGEsXG4gICAgICBhbGxvd0NyZWRlbnRpYWxzOiB0LFxuICAgICAgY2hhbGxlbmdlOiBpLFxuICAgICAgcmVseWluZ1BhcnR5SWQ6IG8sXG4gICAgICB0aW1lb3V0OiByLFxuICAgICAgdXNlclZlcmlmaWNhdGlvbjogblxuICAgIH0gPSBlLCBjID0gZihvKSwgbCA9IHcodCB8fCBhIHx8IFwiXCIpO1xuICAgIHJldHVybiB7XG4gICAgICBjaGFsbGVuZ2U6IFVpbnQ4QXJyYXkuZnJvbShhdG9iKGkpLCAocCkgPT4gcC5jaGFyQ29kZUF0KDApKS5idWZmZXIsXG4gICAgICB0aW1lb3V0OiByLFxuICAgICAgLy8gb25seSBhZGQga2V5LXZhbHVlIHBhaXIgaWYgcHJvcGVyIHZhbHVlIGlzIHByb3ZpZGVkXG4gICAgICAuLi5sICYmIHsgYWxsb3dDcmVkZW50aWFsczogbCB9LFxuICAgICAgLi4ubiAmJiB7IHVzZXJWZXJpZmljYXRpb246IG4gfSxcbiAgICAgIC4uLmMgJiYgeyBycElkOiBjIH1cbiAgICB9O1xuICB9XG4gIC8qKlxuICAgKiBDb252ZXJ0cyBhdXRoZW50aWNhdGlvbiB0cmVlIG1ldGFkYXRhIGludG8gb3B0aW9ucyByZXF1aXJlZCBieSB0aGUgYnJvd3NlclxuICAgKiBXZWIgQXV0aGVudGljYXRpb24gQVBJLlxuICAgKlxuICAgKiBAcGFyYW0gbWV0YWRhdGEgVGhlIG1ldGFkYXRhIHByb3ZpZGVkIGluIHRoZSBhdXRoZW50aWNhdGlvbiB0cmVlIE1ldGFkYXRhQ2FsbGJhY2tcbiAgICogQHJldHVybiBUaGUgV2ViIEF1dGhlbnRpY2F0aW9uIEFQSSByZXF1ZXN0IG9wdGlvbnNcbiAgICovXG4gIHN0YXRpYyBjcmVhdGVSZWdpc3RyYXRpb25QdWJsaWNLZXkoZSkge1xuICAgIGNvbnN0IHsgcHViS2V5Q3JlZFBhcmFtczogYSB9ID0gZSwgdCA9IEEoYSk7XG4gICAgaWYgKCF0KSB7XG4gICAgICBjb25zdCB1ID0gbmV3IEVycm9yKFwiTWlzc2luZyBwdWJLZXlDcmVkUGFyYW1zIHByb3BlcnR5IGZyb20gcmVnaXN0cmF0aW9uIG9wdGlvbnNcIik7XG4gICAgICB0aHJvdyB1Lm5hbWUgPSBzLkRhdGFFcnJvciwgdTtcbiAgICB9XG4gICAgY29uc3QgaSA9IHcoZS5leGNsdWRlQ3JlZGVudGlhbHMpLCB7XG4gICAgICBhdHRlc3RhdGlvblByZWZlcmVuY2U6IG8sXG4gICAgICBhdXRoZW50aWNhdG9yU2VsZWN0aW9uOiByLFxuICAgICAgY2hhbGxlbmdlOiBuLFxuICAgICAgcmVseWluZ1BhcnR5SWQ6IGMsXG4gICAgICByZWx5aW5nUGFydHlOYW1lOiBsLFxuICAgICAgdGltZW91dDogcCxcbiAgICAgIHVzZXJJZDogTyxcbiAgICAgIHVzZXJOYW1lOiBtLFxuICAgICAgZGlzcGxheU5hbWU6IHlcbiAgICB9ID0gZSwgQyA9IGYoYyksIGsgPSB7XG4gICAgICBuYW1lOiBsLFxuICAgICAgLi4uQyAmJiB7IGlkOiBDIH1cbiAgICB9O1xuICAgIHJldHVybiB7XG4gICAgICBhdHRlc3RhdGlvbjogbyxcbiAgICAgIGF1dGhlbnRpY2F0b3JTZWxlY3Rpb246IEpTT04ucGFyc2UociksXG4gICAgICBjaGFsbGVuZ2U6IFVpbnQ4QXJyYXkuZnJvbShhdG9iKG4pLCAodSkgPT4gdS5jaGFyQ29kZUF0KDApKS5idWZmZXIsXG4gICAgICAuLi5pLmxlbmd0aCAmJiB7IGV4Y2x1ZGVDcmVkZW50aWFsczogaSB9LFxuICAgICAgcHViS2V5Q3JlZFBhcmFtczogdCxcbiAgICAgIHJwOiBrLFxuICAgICAgdGltZW91dDogcCxcbiAgICAgIHVzZXI6IHtcbiAgICAgICAgZGlzcGxheU5hbWU6IHkgfHwgbSxcbiAgICAgICAgaWQ6IEludDhBcnJheS5mcm9tKE8uc3BsaXQoXCJcIikubWFwKCh1KSA9PiB1LmNoYXJDb2RlQXQoMCkpKSxcbiAgICAgICAgbmFtZTogeSB8fCBtXG4gICAgICB9XG4gICAgfTtcbiAgfVxufVxuZXhwb3J0IHtcbiAgZCBhcyBXZWJBdXRobk91dGNvbWUsXG4gIGcgYXMgV2ViQXV0aG5TdGVwVHlwZSxcbiAgVCBhcyBkZWZhdWx0XG59O1xuIiwiaW1wb3J0IHsgZ2V0RW5kcG9pbnRQYXRoIGFzIFMsIHJlc29sdmUgYXMgQywgc3RyaW5naWZ5IGFzIGcgfSBmcm9tIFwiLi4vdXRpbC91cmwuanNcIjtcbmltcG9ydCB7IEZSTG9nZ2VyIGFzIHkgfSBmcm9tIFwiLi4vdXRpbC9sb2dnZXIuanNcIjtcbmZ1bmN0aW9uIFAoZSwgdCwgbikge1xuICBjb25zdCBpID0gbmV3IEhlYWRlcnMoZS5oZWFkZXJzKTtcbiAgcmV0dXJuIHQuQXV0aGVudGljYXRlVG9TZXJ2aWNlQ29uZGl0aW9uQWR2aWNlID8gaS5zZXQoXCJYLVRyZWVcIiwgdC5BdXRoZW50aWNhdGVUb1NlcnZpY2VDb25kaXRpb25BZHZpY2VbMF0pIDogdC5UcmFuc2FjdGlvbkNvbmRpdGlvbkFkdmljZSAmJiBpLnNldChcIlgtVHhJRFwiLCB0LlRyYW5zYWN0aW9uQ29uZGl0aW9uQWR2aWNlWzBdKSwgbiAmJiBuLmlkVG9rZW4gJiYgaS5zZXQoXCJYLUlkVG9rZW5cIiwgbi5pZFRva2VuKSwgaTtcbn1cbmZ1bmN0aW9uIFcoZSwgdCwgbikge1xuICBjb25zdCBpID0gbmV3IFVSTChlKTtcbiAgaWYgKHQuVHJhbnNhY3Rpb25Db25kaXRpb25BZHZpY2UpIHtcbiAgICBjb25zdCBjID0gdC5UcmFuc2FjdGlvbkNvbmRpdGlvbkFkdmljZVswXTtcbiAgICBpLnNlYXJjaFBhcmFtcy5hcHBlbmQoXCJfdHhpZFwiLCBjKTtcbiAgfVxuICByZXR1cm4gbiAmJiBuLmlkVG9rZW4gJiYgaS5zZWFyY2hQYXJhbXMuYXBwZW5kKFwiX2lkdG9rZW5cIiwgbi5pZFRva2VuKSwgaS50b1N0cmluZygpO1xufVxuZnVuY3Rpb24gYihlLCB0LCBuLCBpLCBjKSB7XG4gIGNvbnN0IHIgPSBlLmFkdmljZXMgJiYgZS5hZHZpY2VzLkF1dGhlbnRpY2F0ZVRvU2VydmljZUNvbmRpdGlvbkFkdmljZSwgYSA9IGUuYWR2aWNlcyAmJiBlLmFkdmljZXMuVHJhbnNhY3Rpb25Db25kaXRpb25BZHZpY2U7XG4gIGxldCBkID0gXCJcIiwgcyA9IFwiXCI7XG4gIHIgPyAoZCA9IHIucmVkdWNlKChvLCB1KSA9PiB7XG4gICAgY29uc3QgbCA9IG8gJiYgYCAke299YDtcbiAgICByZXR1cm4gbyA9IGAke3V9JHtsfWAsIG87XG4gIH0sIFwiXCIpLCBzID0gXCJBdXRoZW50aWNhdGVUb1NlcnZpY2VDb25kaXRpb25BZHZpY2VcIikgOiBhICYmIChkID0gYS5yZWR1Y2UoKG8sIHUpID0+IHtcbiAgICBjb25zdCBsID0gbyAmJiBgICR7b31gO1xuICAgIHJldHVybiBvID0gYCR7dX0ke2x9YCwgbztcbiAgfSwgXCJcIiksIHMgPSBcIlRyYW5zYWN0aW9uQ29uZGl0aW9uQWR2aWNlXCIpO1xuICBjb25zdCB2ID0gXCI8QWR2aWNlcz48QXR0cmlidXRlVmFsdWVQYWlyPlwiLCBoID0gYDxBdHRyaWJ1dGUgbmFtZT1cIiR7c31cIi8+YCwgVCA9IGA8VmFsdWU+JHtkfTwvVmFsdWU+YCwgZiA9IGAke3Z9JHtofSR7VH08L0F0dHJpYnV0ZVZhbHVlUGFpcj48L0FkdmljZXM+YCwgcCA9IFMoXCJhdXRoZW50aWNhdGVcIiwgaSwgYyksIG0gPSB7XG4gICAgYXV0aEluZGV4VHlwZTogXCJjb21wb3NpdGVfYWR2aWNlXCIsXG4gICAgYXV0aEluZGV4VmFsdWU6IGZcbiAgfTtcbiAgcmV0dXJuIHtcbiAgICBpbml0OiB7XG4gICAgICBtZXRob2Q6IFwiUE9TVFwiLFxuICAgICAgY3JlZGVudGlhbHM6IFwiaW5jbHVkZVwiLFxuICAgICAgaGVhZGVyczogbmV3IEhlYWRlcnMoe1xuICAgICAgICBcIkFjY2VwdC1BUEktVmVyc2lvblwiOiBcInJlc291cmNlPTIuMCwgcHJvdG9jb2w9MS4wXCJcbiAgICAgIH0pXG4gICAgfSxcbiAgICB0aW1lb3V0OiBuLFxuICAgIHVybDogQyh0LCBgJHtwfT8ke2cobSl9YClcbiAgfTtcbn1cbmZ1bmN0aW9uIEgoZSkge1xuICByZXR1cm4gKGUuaGVhZGVycy5nZXQoXCJDb250ZW50LVR5cGVcIikgfHwgXCJcIikuaW5jbHVkZXMoXCJodG1sXCIpICYmIGUudXJsLmluY2x1ZGVzKFwiY29tcG9zaXRlX2FkdmljZVwiKTtcbn1cbmZ1bmN0aW9uIEwoZSkge1xuICByZXR1cm4gKGUuZ2V0KFwiV1dXLUF1dGhlbnRpY2F0ZVwiKSB8fCBcIlwiKS5pbmNsdWRlcyhcImFkdmljZXNcIik7XG59XG5hc3luYyBmdW5jdGlvbiB3KGUpIHtcbiAgcmV0dXJuICEhKGF3YWl0IGUuY2xvbmUoKS5qc29uKCkpLmFkdmljZXM7XG59XG5mdW5jdGlvbiBBKGUpIHtcbiAgY29uc3QgbiA9IG5ldyBVUkwoZSkuc2VhcmNoUGFyYW1zLmdldChcImF1dGhJbmRleFZhbHVlXCIpIHx8IFwiXCIsIGkgPSBuZXcgRE9NUGFyc2VyKCksIGMgPSBkZWNvZGVVUklDb21wb25lbnQobiksIGEgPSBpLnBhcnNlRnJvbVN0cmluZyhjLCBcImFwcGxpY2F0aW9uL3htbFwiKS5xdWVyeVNlbGVjdG9yKFwiVmFsdWVcIik7XG4gIHJldHVybiBhID8gYS5pbm5lckhUTUwgOiBcIlwiO1xufVxuZnVuY3Rpb24gVihlKSB7XG4gIGNvbnN0IG4gPSAoZS5zcGxpdChcIixcIikgfHwgW10pLmZpbmQoKGMpID0+IGMuaW5jbHVkZXMoXCJhZHZpY2VzXCIpKSB8fCBcIlwiO1xuICBsZXQgaTtcbiAgdHJ5IHtcbiAgICBjb25zdCBjID0gbi5tYXRjaCgvXCIoXFxTKylcIi8pLCByID0gYyA/IGNbMV0gOiBcIlwiLCBhID0gYXRvYihyKTtcbiAgICByZXR1cm4gaSA9IEpTT04ucGFyc2UoYSksIGk7XG4gIH0gY2F0Y2gge1xuICAgIHkuZXJyb3IoXCJDb3VsZCBub3QgcGFyc2UgYWR2aWNlcyB2YWx1ZSBmcm9tIFdXVy1BdXRoZW50aWNhdGUgaGVhZGVyXCIpO1xuICB9XG4gIHJldHVybiB7fTtcbn1cbmZ1bmN0aW9uIHooZSkge1xuICByZXR1cm4gZS5hZHZpY2VzICYmIGUuYWR2aWNlcy5BdXRoZW50aWNhdGVUb1NlcnZpY2VDb25kaXRpb25BZHZpY2UgPyBBcnJheS5pc0FycmF5KGUuYWR2aWNlcy5BdXRoZW50aWNhdGVUb1NlcnZpY2VDb25kaXRpb25BZHZpY2UpICYmIGUuYWR2aWNlcy5BdXRoZW50aWNhdGVUb1NlcnZpY2VDb25kaXRpb25BZHZpY2UubGVuZ3RoID4gMCA6IGUuYWR2aWNlcyAmJiBlLmFkdmljZXMuVHJhbnNhY3Rpb25Db25kaXRpb25BZHZpY2UgPyBBcnJheS5pc0FycmF5KGUuYWR2aWNlcy5UcmFuc2FjdGlvbkNvbmRpdGlvbkFkdmljZSkgJiYgZS5hZHZpY2VzLlRyYW5zYWN0aW9uQ29uZGl0aW9uQWR2aWNlLmxlbmd0aCA+IDAgOiAhMTtcbn1cbmFzeW5jIGZ1bmN0aW9uIEYoZSkge1xuICByZXR1cm4gISEoYXdhaXQgZS5jbG9uZSgpLmpzb24oKSkuY2FsbGJhY2tzO1xufVxuZnVuY3Rpb24gTyhlLCB0KSB7XG4gIHJldHVybiB0eXBlb2YgdCA9PSBcImZ1bmN0aW9uXCIgPyB0KGUpIDogZS5zdGF0dXMgPT09IDQwMTtcbn1cbmZ1bmN0aW9uIFUoZSkge1xuICBjb25zdCB0ID0ge307XG4gIHJldHVybiBlLnVybC5pbmNsdWRlcyhcIkF1dGhlbnRpY2F0ZVRvU2VydmljZUNvbmRpdGlvbkFkdmljZVwiKSA/IHQuQXV0aGVudGljYXRlVG9TZXJ2aWNlQ29uZGl0aW9uQWR2aWNlID0gW0EoZS51cmwpXSA6IHQuVHJhbnNhY3Rpb25Db25kaXRpb25BZHZpY2UgPSBbQShlLnVybCldLCB7XG4gICAgcmVzb3VyY2U6IFwiXCIsXG4gICAgYWN0aW9uczoge30sXG4gICAgYXR0cmlidXRlczoge30sXG4gICAgYWR2aWNlczogdCxcbiAgICB0dGw6IDBcbiAgfTtcbn1cbmZ1bmN0aW9uIEooZSkge1xuICBjb25zdCB0ID0gZS5oZWFkZXJzLmdldChcIldXVy1BdXRoZW50aWNhdGVcIikgfHwgXCJcIiwgbiA9IFYodCk7XG4gIHJldHVybiB7XG4gICAgcmVzb3VyY2U6IFwiXCIsXG4gICAgYWN0aW9uczoge30sXG4gICAgYXR0cmlidXRlczoge30sXG4gICAgYWR2aWNlczogbixcbiAgICB0dGw6IDBcbiAgfTtcbn1cbmFzeW5jIGZ1bmN0aW9uIE4oZSkge1xuICByZXR1cm4gYXdhaXQgZS5qc29uKCk7XG59XG5leHBvcnQge1xuICBQIGFzIGFkZEF1dGh6SW5mb1RvSGVhZGVycyxcbiAgVyBhcyBhZGRBdXRoekluZm9Ub1VSTCxcbiAgYiBhcyBidWlsZEF1dGh6T3B0aW9ucyxcbiAgSCBhcyBleGFtaW5lRm9ySUdBdXRoeixcbiAgTCBhcyBleGFtaW5lRm9ySUdBdXRoekhlYWRlcixcbiAgdyBhcyBleGFtaW5lRm9yUkVTVEF1dGh6LFxuICBWIGFzIGdldEFkdmljZXNGcm9tSGVhZGVyLFxuICB6IGFzIGhhc0F1dGh6QWR2aWNlLFxuICBGIGFzIGlzQXV0aHpTdGVwLFxuICBPIGFzIG5ld1Rva2VuUmVxdWlyZWQsXG4gIEogYXMgbm9ybWFsaXplSUdKU09OUmVzcG9uc2VUb0FkdmljZUpTT04sXG4gIFUgYXMgbm9ybWFsaXplSUdSZWRpcmVjdFJlc3BvbnNlVG9BZHZpY2VKU09OLFxuICBOIGFzIG5vcm1hbGl6ZVJFU1RKU09OXG59O1xuIiwiaW1wb3J0IHogZnJvbSBcIi4uL2NvbmZpZy9pbmRleC5qc1wiO1xuaW1wb3J0IHsgQWN0aW9uVHlwZXMgYXMgUyB9IGZyb20gXCIuLi9jb25maWcvZW51bXMuanNcIjtcbmltcG9ydCBUIGZyb20gXCIuLi9mci1hdXRoL2luZGV4LmpzXCI7XG5pbXBvcnQgeyBTdGVwVHlwZSBhcyBkIH0gZnJvbSBcIi4uL2ZyLWF1dGgvZW51bXMuanNcIjtcbmltcG9ydCB5IGZyb20gXCIuLi9mci1hdXRoL2ZyLXN0ZXAuanNcIjtcbmltcG9ydCBnIGZyb20gXCIuLi90b2tlbi1tYW5hZ2VyL2luZGV4LmpzXCI7XG5pbXBvcnQgZiBmcm9tIFwiLi4vdG9rZW4tc3RvcmFnZS9pbmRleC5qc1wiO1xuaW1wb3J0IHsgd2l0aFRpbWVvdXQgYXMgSSB9IGZyb20gXCIuLi91dGlsL3RpbWVvdXQuanNcIjtcbmltcG9ydCB7IG5ld1Rva2VuUmVxdWlyZWQgYXMgUiwgZXhhbWluZUZvcklHQXV0aHpIZWFkZXIgYXMgdiwgbm9ybWFsaXplSUdKU09OUmVzcG9uc2VUb0FkdmljZUpTT04gYXMgaywgZXhhbWluZUZvcklHQXV0aHogYXMgeCwgbm9ybWFsaXplSUdSZWRpcmVjdFJlc3BvbnNlVG9BZHZpY2VKU09OIGFzIHEsIGV4YW1pbmVGb3JSRVNUQXV0aHogYXMgRSwgbm9ybWFsaXplUkVTVEpTT04gYXMgTiwgYnVpbGRBdXRoek9wdGlvbnMgYXMgTywgaXNBdXRoelN0ZXAgYXMgRiwgaGFzQXV0aHpBZHZpY2UgYXMgSCwgYWRkQXV0aHpJbmZvVG9VUkwgYXMgVSwgYWRkQXV0aHpJbmZvVG9IZWFkZXJzIGFzIEcgfSBmcm9tIFwiLi9oZWxwZXJzLmpzXCI7XG5pbXBvcnQgSiBmcm9tIFwiLi4vdXRpbC9taWRkbGV3YXJlLmpzXCI7XG5jbGFzcyBEIHtcbiAgLyoqXG4gICAqIE1ha2VzIGEgcmVxdWVzdCB1c2luZyB0aGUgc3BlY2lmaWVkIG9wdGlvbnMuXG4gICAqXG4gICAqIEBwYXJhbSBvcHRpb25zIFRoZSBvcHRpb25zIHRvIHVzZSB3aGVuIG1ha2luZyB0aGUgcmVxdWVzdFxuICAgKi9cbiAgc3RhdGljIGFzeW5jIHJlcXVlc3QoZSkge1xuICAgIGxldCByID0gYXdhaXQgdGhpcy5fcmVxdWVzdChlLCAhMSksIHQsIGEgPSAhMTtcbiAgICBpZiAoUihyLCBlLnJlcXVpcmVzTmV3VG9rZW4pICYmIChyID0gYXdhaXQgdGhpcy5fcmVxdWVzdChlLCAhMCkpLCBlLmF1dGhvcml6YXRpb24gJiYgZS5hdXRob3JpemF0aW9uLmhhbmRsZVN0ZXApXG4gICAgICBpZiAoci5zdGF0dXMgPT09IDQwMSAmJiB2KHIuaGVhZGVycykgPyAoYSA9ICEwLCB0ID0gayhyKSkgOiByLnJlZGlyZWN0ZWQgJiYgeChyKSA/IChhID0gITAsIHQgPSBxKHIpKSA6IGF3YWl0IEUocikgJiYgKHQgPSBhd2FpdCBOKHIpKSwgdCAmJiB0LmFkdmljZXMpIHtcbiAgICAgICAgY29uc3QgeyBtaWRkbGV3YXJlOiBuLCByZWFsbVBhdGg6IGksIHNlcnZlckNvbmZpZzogbyB9ID0gei5nZXQoZS5hdXRob3JpemF0aW9uLmNvbmZpZyksIHMgPSBPKFxuICAgICAgICAgIHQsXG4gICAgICAgICAgby5iYXNlVXJsLFxuICAgICAgICAgIGUudGltZW91dCxcbiAgICAgICAgICBpLFxuICAgICAgICAgIG8ucGF0aHNcbiAgICAgICAgKSwgYyA9IG5ldyBVUkwocy51cmwpLCB1ID0gYy5zZWFyY2hQYXJhbXMuZ2V0KFwiYXV0aEluZGV4VHlwZVwiKSwgbSA9IGMuc2VhcmNoUGFyYW1zLmdldChcImF1dGhJbmRleFZhbHVlXCIpLCB3ID0gSihcbiAgICAgICAgICB7XG4gICAgICAgICAgICB1cmw6IG5ldyBVUkwocy51cmwpLFxuICAgICAgICAgICAgaW5pdDogcy5pbml0XG4gICAgICAgICAgfSxcbiAgICAgICAgICB7XG4gICAgICAgICAgICB0eXBlOiBTLlN0YXJ0QXV0aGVudGljYXRlLFxuICAgICAgICAgICAgcGF5bG9hZDogeyB0eXBlOiB1LCB0cmVlOiBtIH1cbiAgICAgICAgICB9XG4gICAgICAgICksIHsgdXJsOiBwLCBpbml0OiBBIH0gPSB3KG4pO1xuICAgICAgICBzLnVybCA9IHAudG9TdHJpbmcoKSwgcy5pbml0ID0gQTtcbiAgICAgICAgY29uc3QgaCA9IGF3YWl0IHRoaXMuX3JlcXVlc3QocywgITEpO1xuICAgICAgICBpZiAoIWF3YWl0IEYoaCkpXG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdFcnJvcjogSW5pdGlhbCByZXNwb25zZSBmcm9tIGF1dGggc2VydmVyIG5vdCBhIFwic3RlcFwiLicpO1xuICAgICAgICBpZiAoIUgodCkpXG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiRXJyb3I6IFRyYW5zYWN0aW9uYWwgb3IgU2VydmljZSBBZHZpY2UgaXMgZW1wdHkuXCIpO1xuICAgICAgICBhd2FpdCB0aGlzLnN0ZXBJdGVyYXRvcihoLCBlLmF1dGhvcml6YXRpb24uaGFuZGxlU3RlcCk7XG4gICAgICAgIGNvbnN0IGwgPSBhd2FpdCBmLmdldCgpO1xuICAgICAgICBhID8gZS51cmwgPSBVKGUudXJsLCB0LmFkdmljZXMsIGwpIDogZS5pbml0LmhlYWRlcnMgPSBHKFxuICAgICAgICAgIGUuaW5pdCxcbiAgICAgICAgICB0LmFkdmljZXMsXG4gICAgICAgICAgbFxuICAgICAgICApLCByID0gYXdhaXQgdGhpcy5fcmVxdWVzdChlLCAhMSk7XG4gICAgICB9IGVsc2VcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiRXJyb3I6IFVuYWJsZSB0byBwcm9jZXNzIGFkdmljZVwiKTtcbiAgICByZXR1cm4gcjtcbiAgfVxuICBzdGF0aWMgYXN5bmMgc2V0QXV0aEhlYWRlcnMoZSwgcikge1xuICAgIGxldCB0ID0gYXdhaXQgZi5nZXQoKTtcbiAgICByZXR1cm4gdCAmJiB0LmFjY2Vzc1Rva2VuICYmICh0ID0gYXdhaXQgZy5nZXRUb2tlbnMoeyBmb3JjZVJlbmV3OiByIH0pLCB0ICYmIHQuYWNjZXNzVG9rZW4gJiYgZS5zZXQoXCJBdXRob3JpemF0aW9uXCIsIGBCZWFyZXIgJHt0LmFjY2Vzc1Rva2VufWApKSwgZTtcbiAgfVxuICBzdGF0aWMgYXN5bmMgc3RlcEl0ZXJhdG9yKGUsIHIpIHtcbiAgICBjb25zdCB0ID0gYXdhaXQgZS5qc29uKCksIGEgPSBuZXcgeSh0KTtcbiAgICByZXR1cm4gbmV3IFByb21pc2UoYXN5bmMgKG4sIGkpID0+IHtcbiAgICAgIGFzeW5jIGZ1bmN0aW9uIG8ocykge1xuICAgICAgICBjb25zdCBjID0gYXdhaXQgcihzKSwgdSA9IGF3YWl0IFQubmV4dChjLCB7IHRyZWU6IFwiXCIsIHR5cGU6IFwiXCIgfSk7XG4gICAgICAgIHUudHlwZSA9PT0gZC5Mb2dpblN1Y2Nlc3MgPyBuKCkgOiB1LnR5cGUgPT09IGQuTG9naW5GYWlsdXJlID8gaShcIkF1dGhlbnRpY2F0aW9uIHRyZWUgZmFpbHVyZS5cIikgOiBvKHUpO1xuICAgICAgfVxuICAgICAgbyhhKTtcbiAgICB9KTtcbiAgfVxuICBzdGF0aWMgYXN5bmMgX3JlcXVlc3QoZSwgcikge1xuICAgIGNvbnN0IHsgdXJsOiB0LCBpbml0OiBhLCB0aW1lb3V0OiBuIH0gPSBlO1xuICAgIGxldCBpID0gbmV3IEhlYWRlcnMoYS5oZWFkZXJzIHx8IHt9KTtcbiAgICByZXR1cm4gZS5hdXRob3JpemF0aW9uICYmIGkuc2V0KFwieC1hdXRoZW50aWNhdGUtcmVzcG9uc2VcIiwgXCJoZWFkZXJcIiksIGUuYnlwYXNzQXV0aGVudGljYXRpb24gfHwgKGkgPSBhd2FpdCB0aGlzLnNldEF1dGhIZWFkZXJzKGksIHIpKSwgYS5oZWFkZXJzID0gaSwgSShmZXRjaCh0LCBhKSwgbik7XG4gIH1cbn1cbmV4cG9ydCB7XG4gIEQgYXMgZGVmYXVsdFxufTtcbiIsImltcG9ydCByIGZyb20gXCIuLi9vYXV0aDItY2xpZW50L2luZGV4LmpzXCI7XG5jbGFzcyBhIHtcbiAgLyoqXG4gICAqIEdldHMgdGhlIGN1cnJlbnQgdXNlcidzIHByb2ZpbGUuXG4gICAqL1xuICBzdGF0aWMgZ2V0Q3VycmVudFVzZXIoZSkge1xuICAgIHJldHVybiByLmdldFVzZXJJbmZvKGUpO1xuICB9XG59XG5leHBvcnQge1xuICBhIGFzIGRlZmF1bHRcbn07XG4iLCJjbGFzcyB0IHtcbiAgY29uc3RydWN0b3IoKSB7XG4gICAgdGhpcy5wcm9taXNlID0gbmV3IFByb21pc2UoKGUsIHMpID0+IHtcbiAgICAgIHRoaXMucmVqZWN0ID0gcywgdGhpcy5yZXNvbHZlID0gZTtcbiAgICB9KTtcbiAgfVxufVxuZXhwb3J0IHtcbiAgdCBhcyBkZWZhdWx0XG59O1xuIiwiY2xhc3MgciB7XG4gIGNvbnN0cnVjdG9yKGUgPSAhMSkge1xuICAgIHRoaXMuc3RvcmFnZSA9IGUgPyBsb2NhbFN0b3JhZ2UgOiBzZXNzaW9uU3RvcmFnZTtcbiAgfVxuICBnZXQoZSkge1xuICAgIGNvbnN0IHQgPSB0aGlzLnN0b3JhZ2UuZ2V0SXRlbShlKTtcbiAgICBpZiAodClcbiAgICAgIHJldHVybiBKU09OLnBhcnNlKHQpO1xuICB9XG4gIHNldChlLCB0KSB7XG4gICAgdGhpcy5zdG9yYWdlLnNldEl0ZW0oZSwgSlNPTi5zdHJpbmdpZnkodCkpO1xuICB9XG4gIHJlbW92ZShlKSB7XG4gICAgdGhpcy5zdG9yYWdlLnJlbW92ZUl0ZW0oZSk7XG4gIH1cbn1cbmV4cG9ydCB7XG4gIHIgYXMgZGVmYXVsdFxufTtcbiIsImltcG9ydCB7IGRlZmF1bHQgYXMgdCB9IGZyb20gXCIuL2F1dGgvaW5kZXguanNcIjtcbmltcG9ydCB7IENhbGxiYWNrVHlwZSBhcyByLCBFcnJvckNvZGUgYXMgbCB9IGZyb20gXCIuL2F1dGgvZW51bXMuanNcIjtcbmltcG9ydCB7IGRlZmF1bHQgYXMgcCB9IGZyb20gXCIuL2NvbmZpZy9pbmRleC5qc1wiO1xuaW1wb3J0IHsgZGVmYXVsdCBhcyBzIH0gZnJvbSBcIi4vZnItYXV0aC9pbmRleC5qc1wiO1xuaW1wb3J0IHsgZGVmYXVsdCBhcyBtIH0gZnJvbSBcIi4vZnItYXV0aC9jYWxsYmFja3MvaW5kZXguanNcIjtcbmltcG9ydCB7IGRlZmF1bHQgYXMgYyB9IGZyb20gXCIuL2ZyLWF1dGgvY2FsbGJhY2tzL2F0dHJpYnV0ZS1pbnB1dC1jYWxsYmFjay5qc1wiO1xuaW1wb3J0IHsgZGVmYXVsdCBhcyBuIH0gZnJvbSBcIi4vZnItYXV0aC9jYWxsYmFja3MvY2hvaWNlLWNhbGxiYWNrLmpzXCI7XG5pbXBvcnQgeyBkZWZhdWx0IGFzIGIgfSBmcm9tIFwiLi9mci1hdXRoL2NhbGxiYWNrcy9jb25maXJtYXRpb24tY2FsbGJhY2suanNcIjtcbmltcG9ydCB7IGRlZmF1bHQgYXMgUiB9IGZyb20gXCIuL2ZyLWF1dGgvY2FsbGJhY2tzL2RldmljZS1wcm9maWxlLWNhbGxiYWNrLmpzXCI7XG5pbXBvcnQgeyBkZXZpY2VDbGllbnQgYXMgRiB9IGZyb20gXCIuL2RldmljZS1jbGllbnQvZGV2aWNlLnN0b3JlLmpzXCI7XG5pbXBvcnQgeyBkZWZhdWx0IGFzIFQgfSBmcm9tIFwiLi9mci1hdXRoL2NhbGxiYWNrcy9oaWRkZW4tdmFsdWUtY2FsbGJhY2suanNcIjtcbmltcG9ydCB7IGRlZmF1bHQgYXMgUyB9IGZyb20gXCIuL2ZyLWF1dGgvY2FsbGJhY2tzL2tiYS1jcmVhdGUtY2FsbGJhY2suanNcIjtcbmltcG9ydCB7IGRlZmF1bHQgYXMgQSB9IGZyb20gXCIuL2ZyLWF1dGgvY2FsbGJhY2tzL21ldGFkYXRhLWNhbGxiYWNrLmpzXCI7XG5pbXBvcnQgeyBkZWZhdWx0IGFzIHYgfSBmcm9tIFwiLi9mci1hdXRoL2NhbGxiYWNrcy9uYW1lLWNhbGxiYWNrLmpzXCI7XG5pbXBvcnQgeyBkZWZhdWx0IGFzIEUgfSBmcm9tIFwiLi9mci1hdXRoL2NhbGxiYWNrcy9wYXNzd29yZC1jYWxsYmFjay5qc1wiO1xuaW1wb3J0IHsgZGVmYXVsdCBhcyBXIH0gZnJvbSBcIi4vZnItYXV0aC9jYWxsYmFja3MvcG9sbGluZy13YWl0LWNhbGxiYWNrLmpzXCI7XG5pbXBvcnQgeyBkZWZhdWx0IGFzIEsgfSBmcm9tIFwiLi9mci1hdXRoL2NhbGxiYWNrcy9yZWNhcHRjaGEtY2FsbGJhY2suanNcIjtcbmltcG9ydCB7IGRlZmF1bHQgYXMgVSB9IGZyb20gXCIuL2ZyLWF1dGgvY2FsbGJhY2tzL3JlZGlyZWN0LWNhbGxiYWNrLmpzXCI7XG5pbXBvcnQgeyBkZWZhdWx0IGFzIHcgfSBmcm9tIFwiLi9mci1hdXRoL2NhbGxiYWNrcy9zZWxlY3QtaWRwLWNhbGxiYWNrLmpzXCI7XG5pbXBvcnQgeyBkZWZhdWx0IGFzIHogfSBmcm9tIFwiLi9mci1hdXRoL2NhbGxiYWNrcy9zdXNwZW5kZWQtdGV4dC1vdXRwdXQtY2FsbGJhY2suanNcIjtcbmltcG9ydCB7IGRlZmF1bHQgYXMgUSB9IGZyb20gXCIuL2ZyLWF1dGgvY2FsbGJhY2tzL3Rlcm1zLWFuZC1jb25kaXRpb25zLWNhbGxiYWNrLmpzXCI7XG5pbXBvcnQgeyBkZWZhdWx0IGFzIHEgfSBmcm9tIFwiLi9mci1hdXRoL2NhbGxiYWNrcy90ZXh0LWlucHV0LWNhbGxiYWNrLmpzXCI7XG5pbXBvcnQgeyBkZWZhdWx0IGFzIEcgfSBmcm9tIFwiLi9mci1hdXRoL2NhbGxiYWNrcy90ZXh0LW91dHB1dC1jYWxsYmFjay5qc1wiO1xuaW1wb3J0IHsgZGVmYXVsdCBhcyBYIH0gZnJvbSBcIi4vZnItYXV0aC9jYWxsYmFja3MvdmFsaWRhdGVkLWNyZWF0ZS1wYXNzd29yZC1jYWxsYmFjay5qc1wiO1xuaW1wb3J0IHsgZGVmYXVsdCBhcyBaIH0gZnJvbSBcIi4vZnItYXV0aC9jYWxsYmFja3MvdmFsaWRhdGVkLWNyZWF0ZS11c2VybmFtZS1jYWxsYmFjay5qc1wiO1xuaW1wb3J0IHsgU3RlcFR5cGUgYXMgJCB9IGZyb20gXCIuL2ZyLWF1dGgvZW51bXMuanNcIjtcbmltcG9ydCB7IGRlZmF1bHQgYXMgYWUgfSBmcm9tIFwiLi9mci1hdXRoL2ZyLWxvZ2luLWZhaWx1cmUuanNcIjtcbmltcG9ydCB7IGRlZmF1bHQgYXMgb2UgfSBmcm9tIFwiLi9mci1hdXRoL2NhbGxiYWNrcy9waW5nLXByb3RlY3QtZXZhbHVhdGlvbi1jYWxsYmFjay5qc1wiO1xuaW1wb3J0IHsgZGVmYXVsdCBhcyBsZSB9IGZyb20gXCIuL2ZyLWF1dGgvY2FsbGJhY2tzL3BpbmctcHJvdGVjdC1pbml0aWFsaXplLWNhbGxiYWNrLmpzXCI7XG5pbXBvcnQgeyBkZWZhdWx0IGFzIHBlIH0gZnJvbSBcIi4vZnItYXV0aC9jYWxsYmFja3MvcmVjYXB0Y2hhLWVudGVycHJpc2UtY2FsbGJhY2suanNcIjtcbmltcG9ydCB7IGRlZmF1bHQgYXMgc2UgfSBmcm9tIFwiLi9mci1hdXRoL2ZyLWxvZ2luLXN1Y2Nlc3MuanNcIjtcbmltcG9ydCB7IGRlZmF1bHQgYXMgbWUgfSBmcm9tIFwiLi9mci1hdXRoL2ZyLXN0ZXAuanNcIjtcbmltcG9ydCB7IGRlZmF1bHQgYXMgY2UgfSBmcm9tIFwiLi9mci1kZXZpY2UvaW5kZXguanNcIjtcbmltcG9ydCB7IGRlZmF1bHQgYXMgbmUgfSBmcm9tIFwiLi9mci1wb2xpY3kvaW5kZXguanNcIjtcbmltcG9ydCB7IGRlZmF1bHQgYXMgYmUgfSBmcm9tIFwiLi9mci1xci1jb2RlL2luZGV4LmpzXCI7XG5pbXBvcnQgeyBkZWZhdWx0IGFzIFJlIH0gZnJvbSBcIi4vZnItcG9saWN5L21lc3NhZ2UtY3JlYXRvci5qc1wiO1xuaW1wb3J0IHsgZGVmYXVsdCBhcyBGZSB9IGZyb20gXCIuL2ZyLXJlY292ZXJ5LWNvZGVzL2luZGV4LmpzXCI7XG5pbXBvcnQgeyBkZWZhdWx0IGFzIFRlIH0gZnJvbSBcIi4vZnItdXNlci9pbmRleC5qc1wiO1xuaW1wb3J0IHsgZGVmYXVsdCBhcyBTZSB9IGZyb20gXCIuL2ZyLXdlYmF1dGhuL2luZGV4LmpzXCI7XG5pbXBvcnQgeyBkZWZhdWx0IGFzIEFlIH0gZnJvbSBcIi4vaHR0cC1jbGllbnQvaW5kZXguanNcIjtcbmltcG9ydCB7IGRlZmF1bHQgYXMgdmUgfSBmcm9tIFwiLi9vYXV0aDItY2xpZW50L2luZGV4LmpzXCI7XG5pbXBvcnQgeyBkZWZhdWx0IGFzIEVlIH0gZnJvbSBcIi4vc2Vzc2lvbi1tYW5hZ2VyL2luZGV4LmpzXCI7XG5pbXBvcnQgeyBkZWZhdWx0IGFzIFdlIH0gZnJvbSBcIi4vdG9rZW4tbWFuYWdlci9pbmRleC5qc1wiO1xuaW1wb3J0IHsgZGVmYXVsdCBhcyBLZSB9IGZyb20gXCIuL3Rva2VuLXN0b3JhZ2UvaW5kZXguanNcIjtcbmltcG9ydCB7IGRlZmF1bHQgYXMgVWUgfSBmcm9tIFwiLi91c2VyLW1hbmFnZXIvaW5kZXguanNcIjtcbmltcG9ydCB7IGRlZmF1bHQgYXMgd2UgfSBmcm9tIFwiLi91dGlsL2RlZmVycmVkLmpzXCI7XG5pbXBvcnQgeyBkZWZhdWx0IGFzIHplIH0gZnJvbSBcIi4vdXRpbC9wa2NlLmpzXCI7XG5pbXBvcnQgeyBkZWZhdWx0IGFzIFFlIH0gZnJvbSBcIi4vdXRpbC9zdG9yYWdlLmpzXCI7XG5pbXBvcnQgeyBQb2xpY3lLZXkgYXMgcWUgfSBmcm9tIFwiLi9mci1wb2xpY3kvZW51bXMuanNcIjtcbmltcG9ydCB7IFJlc3BvbnNlVHlwZSBhcyBHZSB9IGZyb20gXCIuL29hdXRoMi1jbGllbnQvZW51bXMuanNcIjtcbmltcG9ydCB7IFdlYkF1dGhuT3V0Y29tZSBhcyBYZSwgV2ViQXV0aG5TdGVwVHlwZSBhcyBZZSB9IGZyb20gXCIuL2ZyLXdlYmF1dGhuL2VudW1zLmpzXCI7XG5leHBvcnQge1xuICBjIGFzIEF0dHJpYnV0ZUlucHV0Q2FsbGJhY2ssXG4gIHQgYXMgQXV0aCxcbiAgciBhcyBDYWxsYmFja1R5cGUsXG4gIG4gYXMgQ2hvaWNlQ2FsbGJhY2ssXG4gIHAgYXMgQ29uZmlnLFxuICBiIGFzIENvbmZpcm1hdGlvbkNhbGxiYWNrLFxuICB3ZSBhcyBEZWZlcnJlZCxcbiAgUiBhcyBEZXZpY2VQcm9maWxlQ2FsbGJhY2ssXG4gIGwgYXMgRXJyb3JDb2RlLFxuICBzIGFzIEZSQXV0aCxcbiAgbSBhcyBGUkNhbGxiYWNrLFxuICBjZSBhcyBGUkRldmljZSxcbiAgYWUgYXMgRlJMb2dpbkZhaWx1cmUsXG4gIHNlIGFzIEZSTG9naW5TdWNjZXNzLFxuICBuZSBhcyBGUlBvbGljeSxcbiAgYmUgYXMgRlJRUkNvZGUsXG4gIEZlIGFzIEZSUmVjb3ZlcnlDb2RlcyxcbiAgbWUgYXMgRlJTdGVwLFxuICBUZSBhcyBGUlVzZXIsXG4gIFNlIGFzIEZSV2ViQXV0aG4sXG4gIFQgYXMgSGlkZGVuVmFsdWVDYWxsYmFjayxcbiAgQWUgYXMgSHR0cENsaWVudCxcbiAgUyBhcyBLYmFDcmVhdGVDYWxsYmFjayxcbiAgUWUgYXMgTG9jYWxTdG9yYWdlLFxuICBBIGFzIE1ldGFkYXRhQ2FsbGJhY2ssXG4gIHYgYXMgTmFtZUNhbGxiYWNrLFxuICB2ZSBhcyBPQXV0aDJDbGllbnQsXG4gIHplIGFzIFBLQ0UsXG4gIEUgYXMgUGFzc3dvcmRDYWxsYmFjayxcbiAgb2UgYXMgUGluZ09uZVByb3RlY3RFdmFsdWF0aW9uQ2FsbGJhY2ssXG4gIGxlIGFzIFBpbmdPbmVQcm90ZWN0SW5pdGlhbGl6ZUNhbGxiYWNrLFxuICBxZSBhcyBQb2xpY3lLZXksXG4gIFcgYXMgUG9sbGluZ1dhaXRDYWxsYmFjayxcbiAgSyBhcyBSZUNhcHRjaGFDYWxsYmFjayxcbiAgcGUgYXMgUmVDYXB0Y2hhRW50ZXJwcmlzZUNhbGxiYWNrLFxuICBVIGFzIFJlZGlyZWN0Q2FsbGJhY2ssXG4gIEdlIGFzIFJlc3BvbnNlVHlwZSxcbiAgdyBhcyBTZWxlY3RJZFBDYWxsYmFjayxcbiAgRWUgYXMgU2Vzc2lvbk1hbmFnZXIsXG4gICQgYXMgU3RlcFR5cGUsXG4gIHogYXMgU3VzcGVuZGVkVGV4dE91dHB1dENhbGxiYWNrLFxuICBRIGFzIFRlcm1zQW5kQ29uZGl0aW9uc0NhbGxiYWNrLFxuICBxIGFzIFRleHRJbnB1dENhbGxiYWNrLFxuICBHIGFzIFRleHRPdXRwdXRDYWxsYmFjayxcbiAgV2UgYXMgVG9rZW5NYW5hZ2VyLFxuICBLZSBhcyBUb2tlblN0b3JhZ2UsXG4gIFVlIGFzIFVzZXJNYW5hZ2VyLFxuICBYIGFzIFZhbGlkYXRlZENyZWF0ZVBhc3N3b3JkQ2FsbGJhY2ssXG4gIFogYXMgVmFsaWRhdGVkQ3JlYXRlVXNlcm5hbWVDYWxsYmFjayxcbiAgWGUgYXMgV2ViQXV0aG5PdXRjb21lLFxuICBZZSBhcyBXZWJBdXRoblN0ZXBUeXBlLFxuICBSZSBhcyBkZWZhdWx0TWVzc2FnZUNyZWF0b3IsXG4gIEYgYXMgZGV2aWNlQ2xpZW50XG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///28076\n')},28089:(I,g,t)=>{"use strict";I.exports=t.p+"d4ce16ccc21409ed14a7.png"},28293:(I,g,t)=>{"use strict";I.exports=t.p+"d61afd7a4b4c6674495f.png"},28298:function(__unused_webpack_module,__unused_webpack_exports,__webpack_require__){eval("//! moment.js locale configuration\n//! locale : English (Canada) [en-ca]\n//! author : Jonathan Abourbih : https://github.com/jonbca\n\n;(function (global, factory) {\n true ? factory(__webpack_require__(95093)) :\n 0\n}(this, (function (moment) { 'use strict';\n\n //! moment.js locale configuration\n\n var enCa = moment.defineLocale('en-ca', {\n months: 'January_February_March_April_May_June_July_August_September_October_November_December'.split(\n '_'\n ),\n monthsShort: 'Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec'.split('_'),\n weekdays: 'Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday'.split(\n '_'\n ),\n weekdaysShort: 'Sun_Mon_Tue_Wed_Thu_Fri_Sat'.split('_'),\n weekdaysMin: 'Su_Mo_Tu_We_Th_Fr_Sa'.split('_'),\n longDateFormat: {\n LT: 'h:mm A',\n LTS: 'h:mm:ss A',\n L: 'YYYY-MM-DD',\n LL: 'MMMM D, YYYY',\n LLL: 'MMMM D, YYYY h:mm A',\n LLLL: 'dddd, MMMM D, YYYY h:mm A',\n },\n calendar: {\n sameDay: '[Today at] LT',\n nextDay: '[Tomorrow at] LT',\n nextWeek: 'dddd [at] LT',\n lastDay: '[Yesterday at] LT',\n lastWeek: '[Last] dddd [at] LT',\n sameElse: 'L',\n },\n relativeTime: {\n future: 'in %s',\n past: '%s ago',\n s: 'a few seconds',\n ss: '%d seconds',\n m: 'a minute',\n mm: '%d minutes',\n h: 'an hour',\n hh: '%d hours',\n d: 'a day',\n dd: '%d days',\n M: 'a month',\n MM: '%d months',\n y: 'a year',\n yy: '%d years',\n },\n dayOfMonthOrdinalParse: /\\d{1,2}(st|nd|rd|th)/,\n ordinal: function (number) {\n var b = number % 10,\n output =\n ~~((number % 100) / 10) === 1\n ? 'th'\n : b === 1\n ? 'st'\n : b === 2\n ? 'nd'\n : b === 3\n ? 'rd'\n : 'th';\n return number + output;\n },\n });\n\n return enCa;\n\n})));\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMjgyOTguanMiLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9pdGctbmV4dGdlbi1mcm9udGVuZC8uL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL2VuLWNhLmpzPzM4ODYiXSwic291cmNlc0NvbnRlbnQiOlsiLy8hIG1vbWVudC5qcyBsb2NhbGUgY29uZmlndXJhdGlvblxuLy8hIGxvY2FsZSA6IEVuZ2xpc2ggKENhbmFkYSkgW2VuLWNhXVxuLy8hIGF1dGhvciA6IEpvbmF0aGFuIEFib3VyYmloIDogaHR0cHM6Ly9naXRodWIuY29tL2pvbmJjYVxuXG47KGZ1bmN0aW9uIChnbG9iYWwsIGZhY3RvcnkpIHtcbiAgIHR5cGVvZiBleHBvcnRzID09PSAnb2JqZWN0JyAmJiB0eXBlb2YgbW9kdWxlICE9PSAndW5kZWZpbmVkJ1xuICAgICAgICYmIHR5cGVvZiByZXF1aXJlID09PSAnZnVuY3Rpb24nID8gZmFjdG9yeShyZXF1aXJlKCcuLi9tb21lbnQnKSkgOlxuICAgdHlwZW9mIGRlZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiBkZWZpbmUuYW1kID8gZGVmaW5lKFsnLi4vbW9tZW50J10sIGZhY3RvcnkpIDpcbiAgIGZhY3RvcnkoZ2xvYmFsLm1vbWVudClcbn0odGhpcywgKGZ1bmN0aW9uIChtb21lbnQpIHsgJ3VzZSBzdHJpY3QnO1xuXG4gICAgLy8hIG1vbWVudC5qcyBsb2NhbGUgY29uZmlndXJhdGlvblxuXG4gICAgdmFyIGVuQ2EgPSBtb21lbnQuZGVmaW5lTG9jYWxlKCdlbi1jYScsIHtcbiAgICAgICAgbW9udGhzOiAnSmFudWFyeV9GZWJydWFyeV9NYXJjaF9BcHJpbF9NYXlfSnVuZV9KdWx5X0F1Z3VzdF9TZXB0ZW1iZXJfT2N0b2Jlcl9Ob3ZlbWJlcl9EZWNlbWJlcicuc3BsaXQoXG4gICAgICAgICAgICAnXydcbiAgICAgICAgKSxcbiAgICAgICAgbW9udGhzU2hvcnQ6ICdKYW5fRmViX01hcl9BcHJfTWF5X0p1bl9KdWxfQXVnX1NlcF9PY3RfTm92X0RlYycuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXM6ICdTdW5kYXlfTW9uZGF5X1R1ZXNkYXlfV2VkbmVzZGF5X1RodXJzZGF5X0ZyaWRheV9TYXR1cmRheScuc3BsaXQoXG4gICAgICAgICAgICAnXydcbiAgICAgICAgKSxcbiAgICAgICAgd2Vla2RheXNTaG9ydDogJ1N1bl9Nb25fVHVlX1dlZF9UaHVfRnJpX1NhdCcuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXNNaW46ICdTdV9Nb19UdV9XZV9UaF9Gcl9TYScuc3BsaXQoJ18nKSxcbiAgICAgICAgbG9uZ0RhdGVGb3JtYXQ6IHtcbiAgICAgICAgICAgIExUOiAnaDptbSBBJyxcbiAgICAgICAgICAgIExUUzogJ2g6bW06c3MgQScsXG4gICAgICAgICAgICBMOiAnWVlZWS1NTS1ERCcsXG4gICAgICAgICAgICBMTDogJ01NTU0gRCwgWVlZWScsXG4gICAgICAgICAgICBMTEw6ICdNTU1NIEQsIFlZWVkgaDptbSBBJyxcbiAgICAgICAgICAgIExMTEw6ICdkZGRkLCBNTU1NIEQsIFlZWVkgaDptbSBBJyxcbiAgICAgICAgfSxcbiAgICAgICAgY2FsZW5kYXI6IHtcbiAgICAgICAgICAgIHNhbWVEYXk6ICdbVG9kYXkgYXRdIExUJyxcbiAgICAgICAgICAgIG5leHREYXk6ICdbVG9tb3Jyb3cgYXRdIExUJyxcbiAgICAgICAgICAgIG5leHRXZWVrOiAnZGRkZCBbYXRdIExUJyxcbiAgICAgICAgICAgIGxhc3REYXk6ICdbWWVzdGVyZGF5IGF0XSBMVCcsXG4gICAgICAgICAgICBsYXN0V2VlazogJ1tMYXN0XSBkZGRkIFthdF0gTFQnLFxuICAgICAgICAgICAgc2FtZUVsc2U6ICdMJyxcbiAgICAgICAgfSxcbiAgICAgICAgcmVsYXRpdmVUaW1lOiB7XG4gICAgICAgICAgICBmdXR1cmU6ICdpbiAlcycsXG4gICAgICAgICAgICBwYXN0OiAnJXMgYWdvJyxcbiAgICAgICAgICAgIHM6ICdhIGZldyBzZWNvbmRzJyxcbiAgICAgICAgICAgIHNzOiAnJWQgc2Vjb25kcycsXG4gICAgICAgICAgICBtOiAnYSBtaW51dGUnLFxuICAgICAgICAgICAgbW06ICclZCBtaW51dGVzJyxcbiAgICAgICAgICAgIGg6ICdhbiBob3VyJyxcbiAgICAgICAgICAgIGhoOiAnJWQgaG91cnMnLFxuICAgICAgICAgICAgZDogJ2EgZGF5JyxcbiAgICAgICAgICAgIGRkOiAnJWQgZGF5cycsXG4gICAgICAgICAgICBNOiAnYSBtb250aCcsXG4gICAgICAgICAgICBNTTogJyVkIG1vbnRocycsXG4gICAgICAgICAgICB5OiAnYSB5ZWFyJyxcbiAgICAgICAgICAgIHl5OiAnJWQgeWVhcnMnLFxuICAgICAgICB9LFxuICAgICAgICBkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOiAvXFxkezEsMn0oc3R8bmR8cmR8dGgpLyxcbiAgICAgICAgb3JkaW5hbDogZnVuY3Rpb24gKG51bWJlcikge1xuICAgICAgICAgICAgdmFyIGIgPSBudW1iZXIgJSAxMCxcbiAgICAgICAgICAgICAgICBvdXRwdXQgPVxuICAgICAgICAgICAgICAgICAgICB+figobnVtYmVyICUgMTAwKSAvIDEwKSA9PT0gMVxuICAgICAgICAgICAgICAgICAgICAgICAgPyAndGgnXG4gICAgICAgICAgICAgICAgICAgICAgICA6IGIgPT09IDFcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPyAnc3QnXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDogYiA9PT0gMlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gJ25kJ1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogYiA9PT0gM1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPyAncmQnXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6ICd0aCc7XG4gICAgICAgICAgICByZXR1cm4gbnVtYmVyICsgb3V0cHV0O1xuICAgICAgICB9LFxuICAgIH0pO1xuXG4gICAgcmV0dXJuIGVuQ2E7XG5cbn0pKSk7XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///28298\n")},28328:(I,g,t)=>{"use strict";I.exports=t.p+"38e0051eca6ee94d05f3.png"},28633:(I,g,t)=>{"use strict";I.exports=t.p+"8c6c1458f9c6b07d7ae8.png"},28959:function(__unused_webpack_module,__unused_webpack_exports,__webpack_require__){eval("//! moment.js locale configuration\n//! locale : Belarusian [be]\n//! author : Dmitry Demidov : https://github.com/demidov91\n//! author: Praleska: http://praleska.pro/\n//! Author : Menelion Elensúle : https://github.com/Oire\n\n;(function (global, factory) {\n true ? factory(__webpack_require__(95093)) :\n 0\n}(this, (function (moment) { 'use strict';\n\n //! moment.js locale configuration\n\n function plural(word, num) {\n var forms = word.split('_');\n return num % 10 === 1 && num % 100 !== 11\n ? forms[0]\n : num % 10 >= 2 && num % 10 <= 4 && (num % 100 < 10 || num % 100 >= 20)\n ? forms[1]\n : forms[2];\n }\n function relativeTimeWithPlural(number, withoutSuffix, key) {\n var format = {\n ss: withoutSuffix ? 'секунда_секунды_секунд' : 'секунду_секунды_секунд',\n mm: withoutSuffix ? 'хвіліна_хвіліны_хвілін' : 'хвіліну_хвіліны_хвілін',\n hh: withoutSuffix ? 'гадзіна_гадзіны_гадзін' : 'гадзіну_гадзіны_гадзін',\n dd: 'дзень_дні_дзён',\n MM: 'месяц_месяцы_месяцаў',\n yy: 'год_гады_гадоў',\n };\n if (key === 'm') {\n return withoutSuffix ? 'хвіліна' : 'хвіліну';\n } else if (key === 'h') {\n return withoutSuffix ? 'гадзіна' : 'гадзіну';\n } else {\n return number + ' ' + plural(format[key], +number);\n }\n }\n\n var be = moment.defineLocale('be', {\n months: {\n format: 'студзеня_лютага_сакавіка_красавіка_траўня_чэрвеня_ліпеня_жніўня_верасня_кастрычніка_лістапада_снежня'.split(\n '_'\n ),\n standalone:\n 'студзень_люты_сакавік_красавік_травень_чэрвень_ліпень_жнівень_верасень_кастрычнік_лістапад_снежань'.split(\n '_'\n ),\n },\n monthsShort:\n 'студ_лют_сак_крас_трав_чэрв_ліп_жнів_вер_каст_ліст_снеж'.split('_'),\n weekdays: {\n format: 'нядзелю_панядзелак_аўторак_сераду_чацвер_пятніцу_суботу'.split(\n '_'\n ),\n standalone:\n 'нядзеля_панядзелак_аўторак_серада_чацвер_пятніца_субота'.split(\n '_'\n ),\n isFormat: /\\[ ?[Ууў] ?(?:мінулую|наступную)? ?\\] ?dddd/,\n },\n weekdaysShort: 'нд_пн_ат_ср_чц_пт_сб'.split('_'),\n weekdaysMin: 'нд_пн_ат_ср_чц_пт_сб'.split('_'),\n longDateFormat: {\n LT: 'HH:mm',\n LTS: 'HH:mm:ss',\n L: 'DD.MM.YYYY',\n LL: 'D MMMM YYYY г.',\n LLL: 'D MMMM YYYY г., HH:mm',\n LLLL: 'dddd, D MMMM YYYY г., HH:mm',\n },\n calendar: {\n sameDay: '[Сёння ў] LT',\n nextDay: '[Заўтра ў] LT',\n lastDay: '[Учора ў] LT',\n nextWeek: function () {\n return '[У] dddd [ў] LT';\n },\n lastWeek: function () {\n switch (this.day()) {\n case 0:\n case 3:\n case 5:\n case 6:\n return '[У мінулую] dddd [ў] LT';\n case 1:\n case 2:\n case 4:\n return '[У мінулы] dddd [ў] LT';\n }\n },\n sameElse: 'L',\n },\n relativeTime: {\n future: 'праз %s',\n past: '%s таму',\n s: 'некалькі секунд',\n m: relativeTimeWithPlural,\n mm: relativeTimeWithPlural,\n h: relativeTimeWithPlural,\n hh: relativeTimeWithPlural,\n d: 'дзень',\n dd: relativeTimeWithPlural,\n M: 'месяц',\n MM: relativeTimeWithPlural,\n y: 'год',\n yy: relativeTimeWithPlural,\n },\n meridiemParse: /ночы|раніцы|дня|вечара/,\n isPM: function (input) {\n return /^(дня|вечара)$/.test(input);\n },\n meridiem: function (hour, minute, isLower) {\n if (hour < 4) {\n return 'ночы';\n } else if (hour < 12) {\n return 'раніцы';\n } else if (hour < 17) {\n return 'дня';\n } else {\n return 'вечара';\n }\n },\n dayOfMonthOrdinalParse: /\\d{1,2}-(і|ы|га)/,\n ordinal: function (number, period) {\n switch (period) {\n case 'M':\n case 'd':\n case 'DDD':\n case 'w':\n case 'W':\n return (number % 10 === 2 || number % 10 === 3) &&\n number % 100 !== 12 &&\n number % 100 !== 13\n ? number + '-і'\n : number + '-ы';\n case 'D':\n return number + '-га';\n default:\n return number;\n }\n },\n week: {\n dow: 1, // Monday is the first day of the week.\n doy: 7, // The week that contains Jan 7th is the first week of the year.\n },\n });\n\n return be;\n\n})));\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMjg5NTkuanMiLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9pdGctbmV4dGdlbi1mcm9udGVuZC8uL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL2JlLmpzPzFmYzEiXSwic291cmNlc0NvbnRlbnQiOlsiLy8hIG1vbWVudC5qcyBsb2NhbGUgY29uZmlndXJhdGlvblxuLy8hIGxvY2FsZSA6IEJlbGFydXNpYW4gW2JlXVxuLy8hIGF1dGhvciA6IERtaXRyeSBEZW1pZG92IDogaHR0cHM6Ly9naXRodWIuY29tL2RlbWlkb3Y5MVxuLy8hIGF1dGhvcjogUHJhbGVza2E6IGh0dHA6Ly9wcmFsZXNrYS5wcm8vXG4vLyEgQXV0aG9yIDogTWVuZWxpb24gRWxlbnPDumxlIDogaHR0cHM6Ly9naXRodWIuY29tL09pcmVcblxuOyhmdW5jdGlvbiAoZ2xvYmFsLCBmYWN0b3J5KSB7XG4gICB0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcgJiYgdHlwZW9mIG1vZHVsZSAhPT0gJ3VuZGVmaW5lZCdcbiAgICAgICAmJiB0eXBlb2YgcmVxdWlyZSA9PT0gJ2Z1bmN0aW9uJyA/IGZhY3RvcnkocmVxdWlyZSgnLi4vbW9tZW50JykpIDpcbiAgIHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgZGVmaW5lLmFtZCA/IGRlZmluZShbJy4uL21vbWVudCddLCBmYWN0b3J5KSA6XG4gICBmYWN0b3J5KGdsb2JhbC5tb21lbnQpXG59KHRoaXMsIChmdW5jdGlvbiAobW9tZW50KSB7ICd1c2Ugc3RyaWN0JztcblxuICAgIC8vISBtb21lbnQuanMgbG9jYWxlIGNvbmZpZ3VyYXRpb25cblxuICAgIGZ1bmN0aW9uIHBsdXJhbCh3b3JkLCBudW0pIHtcbiAgICAgICAgdmFyIGZvcm1zID0gd29yZC5zcGxpdCgnXycpO1xuICAgICAgICByZXR1cm4gbnVtICUgMTAgPT09IDEgJiYgbnVtICUgMTAwICE9PSAxMVxuICAgICAgICAgICAgPyBmb3Jtc1swXVxuICAgICAgICAgICAgOiBudW0gJSAxMCA+PSAyICYmIG51bSAlIDEwIDw9IDQgJiYgKG51bSAlIDEwMCA8IDEwIHx8IG51bSAlIDEwMCA+PSAyMClcbiAgICAgICAgICAgICAgPyBmb3Jtc1sxXVxuICAgICAgICAgICAgICA6IGZvcm1zWzJdO1xuICAgIH1cbiAgICBmdW5jdGlvbiByZWxhdGl2ZVRpbWVXaXRoUGx1cmFsKG51bWJlciwgd2l0aG91dFN1ZmZpeCwga2V5KSB7XG4gICAgICAgIHZhciBmb3JtYXQgPSB7XG4gICAgICAgICAgICBzczogd2l0aG91dFN1ZmZpeCA/ICfRgdC10LrRg9C90LTQsF/RgdC10LrRg9C90LTRi1/RgdC10LrRg9C90LQnIDogJ9GB0LXQutGD0L3QtNGDX9GB0LXQutGD0L3QtNGLX9GB0LXQutGD0L3QtCcsXG4gICAgICAgICAgICBtbTogd2l0aG91dFN1ZmZpeCA/ICfRhdCy0ZbQu9GW0L3QsF/RhdCy0ZbQu9GW0L3Ri1/RhdCy0ZbQu9GW0L0nIDogJ9GF0LLRltC70ZbQvdGDX9GF0LLRltC70ZbQvdGLX9GF0LLRltC70ZbQvScsXG4gICAgICAgICAgICBoaDogd2l0aG91dFN1ZmZpeCA/ICfQs9Cw0LTQt9GW0L3QsF/Qs9Cw0LTQt9GW0L3Ri1/Qs9Cw0LTQt9GW0L0nIDogJ9Cz0LDQtNC30ZbQvdGDX9Cz0LDQtNC30ZbQvdGLX9Cz0LDQtNC30ZbQvScsXG4gICAgICAgICAgICBkZDogJ9C00LfQtdC90Yxf0LTQvdGWX9C00LfRkdC9JyxcbiAgICAgICAgICAgIE1NOiAn0LzQtdGB0Y/Rhl/QvNC10YHRj9GG0Ytf0LzQtdGB0Y/RhtCw0Z4nLFxuICAgICAgICAgICAgeXk6ICfQs9C+0LRf0LPQsNC00Ytf0LPQsNC00L7RnicsXG4gICAgICAgIH07XG4gICAgICAgIGlmIChrZXkgPT09ICdtJykge1xuICAgICAgICAgICAgcmV0dXJuIHdpdGhvdXRTdWZmaXggPyAn0YXQstGW0LvRltC90LAnIDogJ9GF0LLRltC70ZbQvdGDJztcbiAgICAgICAgfSBlbHNlIGlmIChrZXkgPT09ICdoJykge1xuICAgICAgICAgICAgcmV0dXJuIHdpdGhvdXRTdWZmaXggPyAn0LPQsNC00LfRltC90LAnIDogJ9Cz0LDQtNC30ZbQvdGDJztcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBudW1iZXIgKyAnICcgKyBwbHVyYWwoZm9ybWF0W2tleV0sICtudW1iZXIpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgdmFyIGJlID0gbW9tZW50LmRlZmluZUxvY2FsZSgnYmUnLCB7XG4gICAgICAgIG1vbnRoczoge1xuICAgICAgICAgICAgZm9ybWF0OiAn0YHRgtGD0LTQt9C10L3Rj1/Qu9GO0YLQsNCz0LBf0YHQsNC60LDQstGW0LrQsF/QutGA0LDRgdCw0LLRltC60LBf0YLRgNCw0Z7QvdGPX9GH0Y3RgNCy0LXQvdGPX9C70ZbQv9C10L3Rj1/QttC90ZbRntC90Y9f0LLQtdGA0LDRgdC90Y9f0LrQsNGB0YLRgNGL0YfQvdGW0LrQsF/Qu9GW0YHRgtCw0L/QsNC00LBf0YHQvdC10LbQvdGPJy5zcGxpdChcbiAgICAgICAgICAgICAgICAnXydcbiAgICAgICAgICAgICksXG4gICAgICAgICAgICBzdGFuZGFsb25lOlxuICAgICAgICAgICAgICAgICfRgdGC0YPQtNC30LXQvdGMX9C70Y7RgtGLX9GB0LDQutCw0LLRltC6X9C60YDQsNGB0LDQstGW0Lpf0YLRgNCw0LLQtdC90Yxf0YfRjdGA0LLQtdC90Yxf0LvRltC/0LXQvdGMX9C20L3RltCy0LXQvdGMX9Cy0LXRgNCw0YHQtdC90Yxf0LrQsNGB0YLRgNGL0YfQvdGW0Lpf0LvRltGB0YLQsNC/0LDQtF/RgdC90LXQttCw0L3RjCcuc3BsaXQoXG4gICAgICAgICAgICAgICAgICAgICdfJ1xuICAgICAgICAgICAgICAgICksXG4gICAgICAgIH0sXG4gICAgICAgIG1vbnRoc1Nob3J0OlxuICAgICAgICAgICAgJ9GB0YLRg9C0X9C70Y7Rgl/RgdCw0Lpf0LrRgNCw0YFf0YLRgNCw0LJf0YfRjdGA0LJf0LvRltC/X9C20L3RltCyX9Cy0LXRgF/QutCw0YHRgl/Qu9GW0YHRgl/RgdC90LXQticuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXM6IHtcbiAgICAgICAgICAgIGZvcm1hdDogJ9C90Y/QtNC30LXQu9GOX9C/0LDQvdGP0LTQt9C10LvQsNC6X9Cw0Z7RgtC+0YDQsNC6X9GB0LXRgNCw0LTRg1/Rh9Cw0YbQstC10YBf0L/Rj9GC0L3RltGG0YNf0YHRg9Cx0L7RgtGDJy5zcGxpdChcbiAgICAgICAgICAgICAgICAnXydcbiAgICAgICAgICAgICksXG4gICAgICAgICAgICBzdGFuZGFsb25lOlxuICAgICAgICAgICAgICAgICfQvdGP0LTQt9C10LvRj1/Qv9Cw0L3Rj9C00LfQtdC70LDQul/QsNGe0YLQvtGA0LDQul/RgdC10YDQsNC00LBf0YfQsNGG0LLQtdGAX9C/0Y/RgtC90ZbRhtCwX9GB0YPQsdC+0YLQsCcuc3BsaXQoXG4gICAgICAgICAgICAgICAgICAgICdfJ1xuICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICBpc0Zvcm1hdDogL1xcWyA/W9Cj0YPRnl0gPyg/OtC80ZbQvdGD0LvRg9GOfNC90LDRgdGC0YPQv9C90YPRjik/ID9cXF0gP2RkZGQvLFxuICAgICAgICB9LFxuICAgICAgICB3ZWVrZGF5c1Nob3J0OiAn0L3QtF/Qv9C9X9Cw0YJf0YHRgF/Rh9GGX9C/0YJf0YHQsScuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXNNaW46ICfQvdC0X9C/0L1f0LDRgl/RgdGAX9GH0YZf0L/Rgl/RgdCxJy5zcGxpdCgnXycpLFxuICAgICAgICBsb25nRGF0ZUZvcm1hdDoge1xuICAgICAgICAgICAgTFQ6ICdISDptbScsXG4gICAgICAgICAgICBMVFM6ICdISDptbTpzcycsXG4gICAgICAgICAgICBMOiAnREQuTU0uWVlZWScsXG4gICAgICAgICAgICBMTDogJ0QgTU1NTSBZWVlZINCzLicsXG4gICAgICAgICAgICBMTEw6ICdEIE1NTU0gWVlZWSDQsy4sIEhIOm1tJyxcbiAgICAgICAgICAgIExMTEw6ICdkZGRkLCBEIE1NTU0gWVlZWSDQsy4sIEhIOm1tJyxcbiAgICAgICAgfSxcbiAgICAgICAgY2FsZW5kYXI6IHtcbiAgICAgICAgICAgIHNhbWVEYXk6ICdb0KHRkdC90L3RjyDRnl0gTFQnLFxuICAgICAgICAgICAgbmV4dERheTogJ1vQl9Cw0Z7RgtGA0LAg0Z5dIExUJyxcbiAgICAgICAgICAgIGxhc3REYXk6ICdb0KPRh9C+0YDQsCDRnl0gTFQnLFxuICAgICAgICAgICAgbmV4dFdlZWs6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gJ1vQo10gZGRkZCBb0Z5dIExUJztcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBsYXN0V2VlazogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIHN3aXRjaCAodGhpcy5kYXkoKSkge1xuICAgICAgICAgICAgICAgICAgICBjYXNlIDA6XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgMzpcbiAgICAgICAgICAgICAgICAgICAgY2FzZSA1OlxuICAgICAgICAgICAgICAgICAgICBjYXNlIDY6XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gJ1vQoyDQvNGW0L3Rg9C70YPRjl0gZGRkZCBb0Z5dIExUJztcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAxOlxuICAgICAgICAgICAgICAgICAgICBjYXNlIDI6XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgNDpcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAnW9CjINC80ZbQvdGD0LvRi10gZGRkZCBb0Z5dIExUJztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgc2FtZUVsc2U6ICdMJyxcbiAgICAgICAgfSxcbiAgICAgICAgcmVsYXRpdmVUaW1lOiB7XG4gICAgICAgICAgICBmdXR1cmU6ICfQv9GA0LDQtyAlcycsXG4gICAgICAgICAgICBwYXN0OiAnJXMg0YLQsNC80YMnLFxuICAgICAgICAgICAgczogJ9C90LXQutCw0LvRjNC60ZYg0YHQtdC60YPQvdC0JyxcbiAgICAgICAgICAgIG06IHJlbGF0aXZlVGltZVdpdGhQbHVyYWwsXG4gICAgICAgICAgICBtbTogcmVsYXRpdmVUaW1lV2l0aFBsdXJhbCxcbiAgICAgICAgICAgIGg6IHJlbGF0aXZlVGltZVdpdGhQbHVyYWwsXG4gICAgICAgICAgICBoaDogcmVsYXRpdmVUaW1lV2l0aFBsdXJhbCxcbiAgICAgICAgICAgIGQ6ICfQtNC30LXQvdGMJyxcbiAgICAgICAgICAgIGRkOiByZWxhdGl2ZVRpbWVXaXRoUGx1cmFsLFxuICAgICAgICAgICAgTTogJ9C80LXRgdGP0YYnLFxuICAgICAgICAgICAgTU06IHJlbGF0aXZlVGltZVdpdGhQbHVyYWwsXG4gICAgICAgICAgICB5OiAn0LPQvtC0JyxcbiAgICAgICAgICAgIHl5OiByZWxhdGl2ZVRpbWVXaXRoUGx1cmFsLFxuICAgICAgICB9LFxuICAgICAgICBtZXJpZGllbVBhcnNlOiAv0L3QvtGH0Yt80YDQsNC90ZbRhtGLfNC00L3Rj3zQstC10YfQsNGA0LAvLFxuICAgICAgICBpc1BNOiBmdW5jdGlvbiAoaW5wdXQpIHtcbiAgICAgICAgICAgIHJldHVybiAvXijQtNC90Y980LLQtdGH0LDRgNCwKSQvLnRlc3QoaW5wdXQpO1xuICAgICAgICB9LFxuICAgICAgICBtZXJpZGllbTogZnVuY3Rpb24gKGhvdXIsIG1pbnV0ZSwgaXNMb3dlcikge1xuICAgICAgICAgICAgaWYgKGhvdXIgPCA0KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuICfQvdC+0YfRiyc7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGhvdXIgPCAxMikge1xuICAgICAgICAgICAgICAgIHJldHVybiAn0YDQsNC90ZbRhtGLJztcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoaG91ciA8IDE3KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuICfQtNC90Y8nO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gJ9Cy0LXRh9Cw0YDQsCc7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIGRheU9mTW9udGhPcmRpbmFsUGFyc2U6IC9cXGR7MSwyfS0o0ZZ80Yt80LPQsCkvLFxuICAgICAgICBvcmRpbmFsOiBmdW5jdGlvbiAobnVtYmVyLCBwZXJpb2QpIHtcbiAgICAgICAgICAgIHN3aXRjaCAocGVyaW9kKSB7XG4gICAgICAgICAgICAgICAgY2FzZSAnTSc6XG4gICAgICAgICAgICAgICAgY2FzZSAnZCc6XG4gICAgICAgICAgICAgICAgY2FzZSAnREREJzpcbiAgICAgICAgICAgICAgICBjYXNlICd3JzpcbiAgICAgICAgICAgICAgICBjYXNlICdXJzpcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIChudW1iZXIgJSAxMCA9PT0gMiB8fCBudW1iZXIgJSAxMCA9PT0gMykgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgIG51bWJlciAlIDEwMCAhPT0gMTIgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgIG51bWJlciAlIDEwMCAhPT0gMTNcbiAgICAgICAgICAgICAgICAgICAgICAgID8gbnVtYmVyICsgJy3RlidcbiAgICAgICAgICAgICAgICAgICAgICAgIDogbnVtYmVyICsgJy3Riyc7XG4gICAgICAgICAgICAgICAgY2FzZSAnRCc6XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBudW1iZXIgKyAnLdCz0LAnO1xuICAgICAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBudW1iZXI7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIHdlZWs6IHtcbiAgICAgICAgICAgIGRvdzogMSwgLy8gTW9uZGF5IGlzIHRoZSBmaXJzdCBkYXkgb2YgdGhlIHdlZWsuXG4gICAgICAgICAgICBkb3k6IDcsIC8vIFRoZSB3ZWVrIHRoYXQgY29udGFpbnMgSmFuIDd0aCBpcyB0aGUgZmlyc3Qgd2VlayBvZiB0aGUgeWVhci5cbiAgICAgICAgfSxcbiAgICB9KTtcblxuICAgIHJldHVybiBiZTtcblxufSkpKTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///28959\n")},29137:module=>{"use strict";eval('\n\n/**\n * Determines whether the specified URL is absolute\n *\n * @param {string} url The URL to test\n * @returns {boolean} True if the specified URL is absolute, otherwise false\n */\nmodule.exports = function isAbsoluteURL(url) {\n // A URL is considered absolute if it begins with "://" or "//" (protocol-relative URL).\n // RFC 3986 defines scheme name as a sequence of characters beginning with a letter and followed\n // by any combination of letters, digits, plus, period, or hyphen.\n return /^([a-z][a-z\\d+\\-.]*:)?\\/\\//i.test(url);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMjkxMzcuanMiLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL2l0Zy1uZXh0Z2VuLWZyb250ZW5kLy4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9oZWxwZXJzL2lzQWJzb2x1dGVVUkwuanM/ZDkyNSJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbi8qKlxuICogRGV0ZXJtaW5lcyB3aGV0aGVyIHRoZSBzcGVjaWZpZWQgVVJMIGlzIGFic29sdXRlXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IHVybCBUaGUgVVJMIHRvIHRlc3RcbiAqIEByZXR1cm5zIHtib29sZWFufSBUcnVlIGlmIHRoZSBzcGVjaWZpZWQgVVJMIGlzIGFic29sdXRlLCBvdGhlcndpc2UgZmFsc2VcbiAqL1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBpc0Fic29sdXRlVVJMKHVybCkge1xuICAvLyBBIFVSTCBpcyBjb25zaWRlcmVkIGFic29sdXRlIGlmIGl0IGJlZ2lucyB3aXRoIFwiPHNjaGVtZT46Ly9cIiBvciBcIi8vXCIgKHByb3RvY29sLXJlbGF0aXZlIFVSTCkuXG4gIC8vIFJGQyAzOTg2IGRlZmluZXMgc2NoZW1lIG5hbWUgYXMgYSBzZXF1ZW5jZSBvZiBjaGFyYWN0ZXJzIGJlZ2lubmluZyB3aXRoIGEgbGV0dGVyIGFuZCBmb2xsb3dlZFxuICAvLyBieSBhbnkgY29tYmluYXRpb24gb2YgbGV0dGVycywgZGlnaXRzLCBwbHVzLCBwZXJpb2QsIG9yIGh5cGhlbi5cbiAgcmV0dXJuIC9eKFthLXpdW2EtelxcZCtcXC0uXSo6KT9cXC9cXC8vaS50ZXN0KHVybCk7XG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///29137\n')},29231:function(__unused_webpack_module,__unused_webpack_exports,__webpack_require__){eval("//! moment.js locale configuration\n//! locale : Tagalog (Philippines) [tl-ph]\n//! author : Dan Hagman : https://github.com/hagmandan\n\n;(function (global, factory) {\n true ? factory(__webpack_require__(95093)) :\n 0\n}(this, (function (moment) { 'use strict';\n\n //! moment.js locale configuration\n\n var tlPh = moment.defineLocale('tl-ph', {\n months: 'Enero_Pebrero_Marso_Abril_Mayo_Hunyo_Hulyo_Agosto_Setyembre_Oktubre_Nobyembre_Disyembre'.split(\n '_'\n ),\n monthsShort: 'Ene_Peb_Mar_Abr_May_Hun_Hul_Ago_Set_Okt_Nob_Dis'.split('_'),\n weekdays: 'Linggo_Lunes_Martes_Miyerkules_Huwebes_Biyernes_Sabado'.split(\n '_'\n ),\n weekdaysShort: 'Lin_Lun_Mar_Miy_Huw_Biy_Sab'.split('_'),\n weekdaysMin: 'Li_Lu_Ma_Mi_Hu_Bi_Sab'.split('_'),\n longDateFormat: {\n LT: 'HH:mm',\n LTS: 'HH:mm:ss',\n L: 'MM/D/YYYY',\n LL: 'MMMM D, YYYY',\n LLL: 'MMMM D, YYYY HH:mm',\n LLLL: 'dddd, MMMM DD, YYYY HH:mm',\n },\n calendar: {\n sameDay: 'LT [ngayong araw]',\n nextDay: '[Bukas ng] LT',\n nextWeek: 'LT [sa susunod na] dddd',\n lastDay: 'LT [kahapon]',\n lastWeek: 'LT [noong nakaraang] dddd',\n sameElse: 'L',\n },\n relativeTime: {\n future: 'sa loob ng %s',\n past: '%s ang nakalipas',\n s: 'ilang segundo',\n ss: '%d segundo',\n m: 'isang minuto',\n mm: '%d minuto',\n h: 'isang oras',\n hh: '%d oras',\n d: 'isang araw',\n dd: '%d araw',\n M: 'isang buwan',\n MM: '%d buwan',\n y: 'isang taon',\n yy: '%d taon',\n },\n dayOfMonthOrdinalParse: /\\d{1,2}/,\n ordinal: function (number) {\n return number;\n },\n week: {\n dow: 1, // Monday is the first day of the week.\n doy: 4, // The week that contains Jan 4th is the first week of the year.\n },\n });\n\n return tlPh;\n\n})));\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMjkyMzEuanMiLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vaXRnLW5leHRnZW4tZnJvbnRlbmQvLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS90bC1waC5qcz8wZjM4Il0sInNvdXJjZXNDb250ZW50IjpbIi8vISBtb21lbnQuanMgbG9jYWxlIGNvbmZpZ3VyYXRpb25cbi8vISBsb2NhbGUgOiBUYWdhbG9nIChQaGlsaXBwaW5lcykgW3RsLXBoXVxuLy8hIGF1dGhvciA6IERhbiBIYWdtYW4gOiBodHRwczovL2dpdGh1Yi5jb20vaGFnbWFuZGFuXG5cbjsoZnVuY3Rpb24gKGdsb2JhbCwgZmFjdG9yeSkge1xuICAgdHlwZW9mIGV4cG9ydHMgPT09ICdvYmplY3QnICYmIHR5cGVvZiBtb2R1bGUgIT09ICd1bmRlZmluZWQnXG4gICAgICAgJiYgdHlwZW9mIHJlcXVpcmUgPT09ICdmdW5jdGlvbicgPyBmYWN0b3J5KHJlcXVpcmUoJy4uL21vbWVudCcpKSA6XG4gICB0eXBlb2YgZGVmaW5lID09PSAnZnVuY3Rpb24nICYmIGRlZmluZS5hbWQgPyBkZWZpbmUoWycuLi9tb21lbnQnXSwgZmFjdG9yeSkgOlxuICAgZmFjdG9yeShnbG9iYWwubW9tZW50KVxufSh0aGlzLCAoZnVuY3Rpb24gKG1vbWVudCkgeyAndXNlIHN0cmljdCc7XG5cbiAgICAvLyEgbW9tZW50LmpzIGxvY2FsZSBjb25maWd1cmF0aW9uXG5cbiAgICB2YXIgdGxQaCA9IG1vbWVudC5kZWZpbmVMb2NhbGUoJ3RsLXBoJywge1xuICAgICAgICBtb250aHM6ICdFbmVyb19QZWJyZXJvX01hcnNvX0FicmlsX01heW9fSHVueW9fSHVseW9fQWdvc3RvX1NldHllbWJyZV9Pa3R1YnJlX05vYnllbWJyZV9EaXN5ZW1icmUnLnNwbGl0KFxuICAgICAgICAgICAgJ18nXG4gICAgICAgICksXG4gICAgICAgIG1vbnRoc1Nob3J0OiAnRW5lX1BlYl9NYXJfQWJyX01heV9IdW5fSHVsX0Fnb19TZXRfT2t0X05vYl9EaXMnLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzOiAnTGluZ2dvX0x1bmVzX01hcnRlc19NaXllcmt1bGVzX0h1d2ViZXNfQml5ZXJuZXNfU2FiYWRvJy5zcGxpdChcbiAgICAgICAgICAgICdfJ1xuICAgICAgICApLFxuICAgICAgICB3ZWVrZGF5c1Nob3J0OiAnTGluX0x1bl9NYXJfTWl5X0h1d19CaXlfU2FiJy5zcGxpdCgnXycpLFxuICAgICAgICB3ZWVrZGF5c01pbjogJ0xpX0x1X01hX01pX0h1X0JpX1NhYicuc3BsaXQoJ18nKSxcbiAgICAgICAgbG9uZ0RhdGVGb3JtYXQ6IHtcbiAgICAgICAgICAgIExUOiAnSEg6bW0nLFxuICAgICAgICAgICAgTFRTOiAnSEg6bW06c3MnLFxuICAgICAgICAgICAgTDogJ01NL0QvWVlZWScsXG4gICAgICAgICAgICBMTDogJ01NTU0gRCwgWVlZWScsXG4gICAgICAgICAgICBMTEw6ICdNTU1NIEQsIFlZWVkgSEg6bW0nLFxuICAgICAgICAgICAgTExMTDogJ2RkZGQsIE1NTU0gREQsIFlZWVkgSEg6bW0nLFxuICAgICAgICB9LFxuICAgICAgICBjYWxlbmRhcjoge1xuICAgICAgICAgICAgc2FtZURheTogJ0xUIFtuZ2F5b25nIGFyYXddJyxcbiAgICAgICAgICAgIG5leHREYXk6ICdbQnVrYXMgbmddIExUJyxcbiAgICAgICAgICAgIG5leHRXZWVrOiAnTFQgW3NhIHN1c3Vub2QgbmFdIGRkZGQnLFxuICAgICAgICAgICAgbGFzdERheTogJ0xUIFtrYWhhcG9uXScsXG4gICAgICAgICAgICBsYXN0V2VlazogJ0xUIFtub29uZyBuYWthcmFhbmddIGRkZGQnLFxuICAgICAgICAgICAgc2FtZUVsc2U6ICdMJyxcbiAgICAgICAgfSxcbiAgICAgICAgcmVsYXRpdmVUaW1lOiB7XG4gICAgICAgICAgICBmdXR1cmU6ICdzYSBsb29iIG5nICVzJyxcbiAgICAgICAgICAgIHBhc3Q6ICclcyBhbmcgbmFrYWxpcGFzJyxcbiAgICAgICAgICAgIHM6ICdpbGFuZyBzZWd1bmRvJyxcbiAgICAgICAgICAgIHNzOiAnJWQgc2VndW5kbycsXG4gICAgICAgICAgICBtOiAnaXNhbmcgbWludXRvJyxcbiAgICAgICAgICAgIG1tOiAnJWQgbWludXRvJyxcbiAgICAgICAgICAgIGg6ICdpc2FuZyBvcmFzJyxcbiAgICAgICAgICAgIGhoOiAnJWQgb3JhcycsXG4gICAgICAgICAgICBkOiAnaXNhbmcgYXJhdycsXG4gICAgICAgICAgICBkZDogJyVkIGFyYXcnLFxuICAgICAgICAgICAgTTogJ2lzYW5nIGJ1d2FuJyxcbiAgICAgICAgICAgIE1NOiAnJWQgYnV3YW4nLFxuICAgICAgICAgICAgeTogJ2lzYW5nIHRhb24nLFxuICAgICAgICAgICAgeXk6ICclZCB0YW9uJyxcbiAgICAgICAgfSxcbiAgICAgICAgZGF5T2ZNb250aE9yZGluYWxQYXJzZTogL1xcZHsxLDJ9LyxcbiAgICAgICAgb3JkaW5hbDogZnVuY3Rpb24gKG51bWJlcikge1xuICAgICAgICAgICAgcmV0dXJuIG51bWJlcjtcbiAgICAgICAgfSxcbiAgICAgICAgd2Vlazoge1xuICAgICAgICAgICAgZG93OiAxLCAvLyBNb25kYXkgaXMgdGhlIGZpcnN0IGRheSBvZiB0aGUgd2Vlay5cbiAgICAgICAgICAgIGRveTogNCwgLy8gVGhlIHdlZWsgdGhhdCBjb250YWlucyBKYW4gNHRoIGlzIHRoZSBmaXJzdCB3ZWVrIG9mIHRoZSB5ZWFyLlxuICAgICAgICB9LFxuICAgIH0pO1xuXG4gICAgcmV0dXJuIHRsUGg7XG5cbn0pKSk7XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///29231\n")},29347:(I,g,t)=>{"use strict";I.exports=t.p+"20bdec0003717470bf4d.png"},29849:function(__unused_webpack_module,__unused_webpack_exports,__webpack_require__){eval("//! moment.js locale configuration\n//! locale : Punjabi (India) [pa-in]\n//! author : Harpreet Singh : https://github.com/harpreetkhalsagtbit\n\n;(function (global, factory) {\n true ? factory(__webpack_require__(95093)) :\n 0\n}(this, (function (moment) { 'use strict';\n\n //! moment.js locale configuration\n\n var symbolMap = {\n 1: '੧',\n 2: '੨',\n 3: '੩',\n 4: '੪',\n 5: '੫',\n 6: '੬',\n 7: '੭',\n 8: '੮',\n 9: '੯',\n 0: '੦',\n },\n numberMap = {\n '੧': '1',\n '੨': '2',\n '੩': '3',\n '੪': '4',\n '੫': '5',\n '੬': '6',\n '੭': '7',\n '੮': '8',\n '੯': '9',\n '੦': '0',\n };\n\n var paIn = moment.defineLocale('pa-in', {\n // There are months name as per Nanakshahi Calendar but they are not used as rigidly in modern Punjabi.\n months: 'ਜਨਵਰੀ_ਫ਼ਰਵਰੀ_ਮਾਰਚ_ਅਪ੍ਰੈਲ_ਮਈ_ਜੂਨ_ਜੁਲਾਈ_ਅਗਸਤ_ਸਤੰਬਰ_ਅਕਤੂਬਰ_ਨਵੰਬਰ_ਦਸੰਬਰ'.split(\n '_'\n ),\n monthsShort:\n 'ਜਨਵਰੀ_ਫ਼ਰਵਰੀ_ਮਾਰਚ_ਅਪ੍ਰੈਲ_ਮਈ_ਜੂਨ_ਜੁਲਾਈ_ਅਗਸਤ_ਸਤੰਬਰ_ਅਕਤੂਬਰ_ਨਵੰਬਰ_ਦਸੰਬਰ'.split(\n '_'\n ),\n weekdays: 'ਐਤਵਾਰ_ਸੋਮਵਾਰ_ਮੰਗਲਵਾਰ_ਬੁਧਵਾਰ_ਵੀਰਵਾਰ_ਸ਼ੁੱਕਰਵਾਰ_ਸ਼ਨੀਚਰਵਾਰ'.split(\n '_'\n ),\n weekdaysShort: 'ਐਤ_ਸੋਮ_ਮੰਗਲ_ਬੁਧ_ਵੀਰ_ਸ਼ੁਕਰ_ਸ਼ਨੀ'.split('_'),\n weekdaysMin: 'ਐਤ_ਸੋਮ_ਮੰਗਲ_ਬੁਧ_ਵੀਰ_ਸ਼ੁਕਰ_ਸ਼ਨੀ'.split('_'),\n longDateFormat: {\n LT: 'A h:mm ਵਜੇ',\n LTS: 'A h:mm:ss ਵਜੇ',\n L: 'DD/MM/YYYY',\n LL: 'D MMMM YYYY',\n LLL: 'D MMMM YYYY, A h:mm ਵਜੇ',\n LLLL: 'dddd, D MMMM YYYY, A h:mm ਵਜੇ',\n },\n calendar: {\n sameDay: '[ਅਜ] LT',\n nextDay: '[ਕਲ] LT',\n nextWeek: '[ਅਗਲਾ] dddd, LT',\n lastDay: '[ਕਲ] LT',\n lastWeek: '[ਪਿਛਲੇ] dddd, LT',\n sameElse: 'L',\n },\n relativeTime: {\n future: '%s ਵਿੱਚ',\n past: '%s ਪਿਛਲੇ',\n s: 'ਕੁਝ ਸਕਿੰਟ',\n ss: '%d ਸਕਿੰਟ',\n m: 'ਇਕ ਮਿੰਟ',\n mm: '%d ਮਿੰਟ',\n h: 'ਇੱਕ ਘੰਟਾ',\n hh: '%d ਘੰਟੇ',\n d: 'ਇੱਕ ਦਿਨ',\n dd: '%d ਦਿਨ',\n M: 'ਇੱਕ ਮਹੀਨਾ',\n MM: '%d ਮਹੀਨੇ',\n y: 'ਇੱਕ ਸਾਲ',\n yy: '%d ਸਾਲ',\n },\n preparse: function (string) {\n return string.replace(/[੧੨੩੪੫੬੭੮੯੦]/g, function (match) {\n return numberMap[match];\n });\n },\n postformat: function (string) {\n return string.replace(/\\d/g, function (match) {\n return symbolMap[match];\n });\n },\n // Punjabi notation for meridiems are quite fuzzy in practice. While there exists\n // a rigid notion of a 'Pahar' it is not used as rigidly in modern Punjabi.\n meridiemParse: /ਰਾਤ|ਸਵੇਰ|ਦੁਪਹਿਰ|ਸ਼ਾਮ/,\n meridiemHour: function (hour, meridiem) {\n if (hour === 12) {\n hour = 0;\n }\n if (meridiem === 'ਰਾਤ') {\n return hour < 4 ? hour : hour + 12;\n } else if (meridiem === 'ਸਵੇਰ') {\n return hour;\n } else if (meridiem === 'ਦੁਪਹਿਰ') {\n return hour >= 10 ? hour : hour + 12;\n } else if (meridiem === 'ਸ਼ਾਮ') {\n return hour + 12;\n }\n },\n meridiem: function (hour, minute, isLower) {\n if (hour < 4) {\n return 'ਰਾਤ';\n } else if (hour < 10) {\n return 'ਸਵੇਰ';\n } else if (hour < 17) {\n return 'ਦੁਪਹਿਰ';\n } else if (hour < 20) {\n return 'ਸ਼ਾਮ';\n } else {\n return 'ਰਾਤ';\n }\n },\n week: {\n dow: 0, // Sunday is the first day of the week.\n doy: 6, // The week that contains Jan 6th is the first week of the year.\n },\n });\n\n return paIn;\n\n})));\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMjk4NDkuanMiLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL2l0Zy1uZXh0Z2VuLWZyb250ZW5kLy4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvcGEtaW4uanM/ZjNmZiJdLCJzb3VyY2VzQ29udGVudCI6WyIvLyEgbW9tZW50LmpzIGxvY2FsZSBjb25maWd1cmF0aW9uXG4vLyEgbG9jYWxlIDogUHVuamFiaSAoSW5kaWEpIFtwYS1pbl1cbi8vISBhdXRob3IgOiBIYXJwcmVldCBTaW5naCA6IGh0dHBzOi8vZ2l0aHViLmNvbS9oYXJwcmVldGtoYWxzYWd0Yml0XG5cbjsoZnVuY3Rpb24gKGdsb2JhbCwgZmFjdG9yeSkge1xuICAgdHlwZW9mIGV4cG9ydHMgPT09ICdvYmplY3QnICYmIHR5cGVvZiBtb2R1bGUgIT09ICd1bmRlZmluZWQnXG4gICAgICAgJiYgdHlwZW9mIHJlcXVpcmUgPT09ICdmdW5jdGlvbicgPyBmYWN0b3J5KHJlcXVpcmUoJy4uL21vbWVudCcpKSA6XG4gICB0eXBlb2YgZGVmaW5lID09PSAnZnVuY3Rpb24nICYmIGRlZmluZS5hbWQgPyBkZWZpbmUoWycuLi9tb21lbnQnXSwgZmFjdG9yeSkgOlxuICAgZmFjdG9yeShnbG9iYWwubW9tZW50KVxufSh0aGlzLCAoZnVuY3Rpb24gKG1vbWVudCkgeyAndXNlIHN0cmljdCc7XG5cbiAgICAvLyEgbW9tZW50LmpzIGxvY2FsZSBjb25maWd1cmF0aW9uXG5cbiAgICB2YXIgc3ltYm9sTWFwID0ge1xuICAgICAgICAgICAgMTogJ+CppycsXG4gICAgICAgICAgICAyOiAn4KmoJyxcbiAgICAgICAgICAgIDM6ICfgqaknLFxuICAgICAgICAgICAgNDogJ+CpqicsXG4gICAgICAgICAgICA1OiAn4KmrJyxcbiAgICAgICAgICAgIDY6ICfgqawnLFxuICAgICAgICAgICAgNzogJ+CprScsXG4gICAgICAgICAgICA4OiAn4KmuJyxcbiAgICAgICAgICAgIDk6ICfgqa8nLFxuICAgICAgICAgICAgMDogJ+CppicsXG4gICAgICAgIH0sXG4gICAgICAgIG51bWJlck1hcCA9IHtcbiAgICAgICAgICAgICfgqacnOiAnMScsXG4gICAgICAgICAgICAn4KmoJzogJzInLFxuICAgICAgICAgICAgJ+CpqSc6ICczJyxcbiAgICAgICAgICAgICfgqaonOiAnNCcsXG4gICAgICAgICAgICAn4KmrJzogJzUnLFxuICAgICAgICAgICAgJ+CprCc6ICc2JyxcbiAgICAgICAgICAgICfgqa0nOiAnNycsXG4gICAgICAgICAgICAn4KmuJzogJzgnLFxuICAgICAgICAgICAgJ+Cpryc6ICc5JyxcbiAgICAgICAgICAgICfgqaYnOiAnMCcsXG4gICAgICAgIH07XG5cbiAgICB2YXIgcGFJbiA9IG1vbWVudC5kZWZpbmVMb2NhbGUoJ3BhLWluJywge1xuICAgICAgICAvLyBUaGVyZSBhcmUgbW9udGhzIG5hbWUgYXMgcGVyIE5hbmFrc2hhaGkgQ2FsZW5kYXIgYnV0IHRoZXkgYXJlIG5vdCB1c2VkIGFzIHJpZ2lkbHkgaW4gbW9kZXJuIFB1bmphYmkuXG4gICAgICAgIG1vbnRoczogJ+ConOCoqOCoteCosOCpgF/gqKvgqLzgqLDgqLXgqLDgqYBf4Kiu4Ki+4Kiw4KiaX+CoheCoquCpjeCosOCpiOCosl/gqK7gqIhf4Kic4KmC4KioX+ConOCpgeCosuCovuCoiF/gqIXgqJfgqLjgqKRf4Ki44Kik4Kmw4Kis4KiwX+CoheColeCopOCpguCorOCosF/gqKjgqLXgqbDgqKzgqLBf4Kim4Ki44Kmw4Kis4KiwJy5zcGxpdChcbiAgICAgICAgICAgICdfJ1xuICAgICAgICApLFxuICAgICAgICBtb250aHNTaG9ydDpcbiAgICAgICAgICAgICfgqJzgqKjgqLXgqLDgqYBf4Kir4Ki84Kiw4Ki14Kiw4KmAX+CoruCovuCosOComl/gqIXgqKrgqY3gqLDgqYjgqLJf4Kiu4KiIX+ConOCpguCoqF/gqJzgqYHgqLLgqL7gqIhf4KiF4KiX4Ki44KikX+CouOCopOCpsOCorOCosF/gqIXgqJXgqKTgqYLgqKzgqLBf4Kio4Ki14Kmw4Kis4KiwX+CopuCouOCpsOCorOCosCcuc3BsaXQoXG4gICAgICAgICAgICAgICAgJ18nXG4gICAgICAgICAgICApLFxuICAgICAgICB3ZWVrZGF5czogJ+CokOCopOCoteCovuCosF/gqLjgqYvgqK7gqLXgqL7gqLBf4Kiu4Kmw4KiX4Kiy4Ki14Ki+4KiwX+CorOCpgeCop+CoteCovuCosF/gqLXgqYDgqLDgqLXgqL7gqLBf4Ki44Ki84KmB4Kmx4KiV4Kiw4Ki14Ki+4KiwX+CouOCovOCoqOCpgOComuCosOCoteCovuCosCcuc3BsaXQoXG4gICAgICAgICAgICAnXydcbiAgICAgICAgKSxcbiAgICAgICAgd2Vla2RheXNTaG9ydDogJ+CokOCopF/gqLjgqYvgqK5f4Kiu4Kmw4KiX4KiyX+CorOCpgeCop1/gqLXgqYDgqLBf4Ki44Ki84KmB4KiV4KiwX+CouOCovOCoqOCpgCcuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXNNaW46ICfgqJDgqKRf4Ki44KmL4KiuX+CoruCpsOCol+Cosl/gqKzgqYHgqKdf4Ki14KmA4KiwX+CouOCovOCpgeColeCosF/gqLjgqLzgqKjgqYAnLnNwbGl0KCdfJyksXG4gICAgICAgIGxvbmdEYXRlRm9ybWF0OiB7XG4gICAgICAgICAgICBMVDogJ0EgaDptbSDgqLXgqJzgqYcnLFxuICAgICAgICAgICAgTFRTOiAnQSBoOm1tOnNzIOCoteConOCphycsXG4gICAgICAgICAgICBMOiAnREQvTU0vWVlZWScsXG4gICAgICAgICAgICBMTDogJ0QgTU1NTSBZWVlZJyxcbiAgICAgICAgICAgIExMTDogJ0QgTU1NTSBZWVlZLCBBIGg6bW0g4Ki14Kic4KmHJyxcbiAgICAgICAgICAgIExMTEw6ICdkZGRkLCBEIE1NTU0gWVlZWSwgQSBoOm1tIOCoteConOCphycsXG4gICAgICAgIH0sXG4gICAgICAgIGNhbGVuZGFyOiB7XG4gICAgICAgICAgICBzYW1lRGF5OiAnW+CoheConF0gTFQnLFxuICAgICAgICAgICAgbmV4dERheTogJ1vgqJXgqLJdIExUJyxcbiAgICAgICAgICAgIG5leHRXZWVrOiAnW+CoheCol+CosuCovl0gZGRkZCwgTFQnLFxuICAgICAgICAgICAgbGFzdERheTogJ1vgqJXgqLJdIExUJyxcbiAgICAgICAgICAgIGxhc3RXZWVrOiAnW+CoquCov+Com+CosuCph10gZGRkZCwgTFQnLFxuICAgICAgICAgICAgc2FtZUVsc2U6ICdMJyxcbiAgICAgICAgfSxcbiAgICAgICAgcmVsYXRpdmVUaW1lOiB7XG4gICAgICAgICAgICBmdXR1cmU6ICclcyDgqLXgqL/gqbHgqJonLFxuICAgICAgICAgICAgcGFzdDogJyVzIOCoquCov+Com+CosuCphycsXG4gICAgICAgICAgICBzOiAn4KiV4KmB4KidIOCouOColeCov+CpsOConycsXG4gICAgICAgICAgICBzczogJyVkIOCouOColeCov+CpsOConycsXG4gICAgICAgICAgICBtOiAn4KiH4KiVIOCoruCov+CpsOConycsXG4gICAgICAgICAgICBtbTogJyVkIOCoruCov+CpsOConycsXG4gICAgICAgICAgICBoOiAn4KiH4Kmx4KiVIOComOCpsOCon+CovicsXG4gICAgICAgICAgICBoaDogJyVkIOComOCpsOCon+CphycsXG4gICAgICAgICAgICBkOiAn4KiH4Kmx4KiVIOCopuCov+CoqCcsXG4gICAgICAgICAgICBkZDogJyVkIOCopuCov+CoqCcsXG4gICAgICAgICAgICBNOiAn4KiH4Kmx4KiVIOCoruCoueCpgOCoqOCovicsXG4gICAgICAgICAgICBNTTogJyVkIOCoruCoueCpgOCoqOCphycsXG4gICAgICAgICAgICB5OiAn4KiH4Kmx4KiVIOCouOCovuCosicsXG4gICAgICAgICAgICB5eTogJyVkIOCouOCovuCosicsXG4gICAgICAgIH0sXG4gICAgICAgIHByZXBhcnNlOiBmdW5jdGlvbiAoc3RyaW5nKSB7XG4gICAgICAgICAgICByZXR1cm4gc3RyaW5nLnJlcGxhY2UoL1vgqafgqajgqangqargqavgqazgqa3gqa7gqa/gqaZdL2csIGZ1bmN0aW9uIChtYXRjaCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBudW1iZXJNYXBbbWF0Y2hdO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0sXG4gICAgICAgIHBvc3Rmb3JtYXQ6IGZ1bmN0aW9uIChzdHJpbmcpIHtcbiAgICAgICAgICAgIHJldHVybiBzdHJpbmcucmVwbGFjZSgvXFxkL2csIGZ1bmN0aW9uIChtYXRjaCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBzeW1ib2xNYXBbbWF0Y2hdO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0sXG4gICAgICAgIC8vIFB1bmphYmkgbm90YXRpb24gZm9yIG1lcmlkaWVtcyBhcmUgcXVpdGUgZnV6enkgaW4gcHJhY3RpY2UuIFdoaWxlIHRoZXJlIGV4aXN0c1xuICAgICAgICAvLyBhIHJpZ2lkIG5vdGlvbiBvZiBhICdQYWhhcicgaXQgaXMgbm90IHVzZWQgYXMgcmlnaWRseSBpbiBtb2Rlcm4gUHVuamFiaS5cbiAgICAgICAgbWVyaWRpZW1QYXJzZTogL+CosOCovuCopHzgqLjgqLXgqYfgqLB84Kim4KmB4Kiq4Ki54Ki/4KiwfOCouOCovOCovuCori8sXG4gICAgICAgIG1lcmlkaWVtSG91cjogZnVuY3Rpb24gKGhvdXIsIG1lcmlkaWVtKSB7XG4gICAgICAgICAgICBpZiAoaG91ciA9PT0gMTIpIHtcbiAgICAgICAgICAgICAgICBob3VyID0gMDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChtZXJpZGllbSA9PT0gJ+CosOCovuCopCcpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gaG91ciA8IDQgPyBob3VyIDogaG91ciArIDEyO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChtZXJpZGllbSA9PT0gJ+CouOCoteCph+CosCcpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gaG91cjtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAobWVyaWRpZW0gPT09ICfgqKbgqYHgqKrgqLngqL/gqLAnKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGhvdXIgPj0gMTAgPyBob3VyIDogaG91ciArIDEyO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChtZXJpZGllbSA9PT0gJ+CouOCovOCovuCoricpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gaG91ciArIDEyO1xuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBtZXJpZGllbTogZnVuY3Rpb24gKGhvdXIsIG1pbnV0ZSwgaXNMb3dlcikge1xuICAgICAgICAgICAgaWYgKGhvdXIgPCA0KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuICfgqLDgqL7gqKQnO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChob3VyIDwgMTApIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gJ+CouOCoteCph+CosCc7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGhvdXIgPCAxNykge1xuICAgICAgICAgICAgICAgIHJldHVybiAn4Kim4KmB4Kiq4Ki54Ki/4KiwJztcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoaG91ciA8IDIwKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuICfgqLjgqLzgqL7gqK4nO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gJ+CosOCovuCopCc7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIHdlZWs6IHtcbiAgICAgICAgICAgIGRvdzogMCwgLy8gU3VuZGF5IGlzIHRoZSBmaXJzdCBkYXkgb2YgdGhlIHdlZWsuXG4gICAgICAgICAgICBkb3k6IDYsIC8vIFRoZSB3ZWVrIHRoYXQgY29udGFpbnMgSmFuIDZ0aCBpcyB0aGUgZmlyc3Qgd2VlayBvZiB0aGUgeWVhci5cbiAgICAgICAgfSxcbiAgICB9KTtcblxuICAgIHJldHVybiBwYUluO1xuXG59KSkpO1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///29849\n")},30117:(I,g,t)=>{"use strict";I.exports=t.p+"41a066cd6f823dddff87.png"},30306:function(__unused_webpack_module,__unused_webpack_exports,__webpack_require__){eval("//! moment.js locale configuration\n//! locale : Macedonian [mk]\n//! author : Borislav Mickov : https://github.com/B0k0\n//! author : Sashko Todorov : https://github.com/bkyceh\n\n;(function (global, factory) {\n true ? factory(__webpack_require__(95093)) :\n 0\n}(this, (function (moment) { 'use strict';\n\n //! moment.js locale configuration\n\n var mk = moment.defineLocale('mk', {\n months: 'јануари_февруари_март_април_мај_јуни_јули_август_септември_октомври_ноември_декември'.split(\n '_'\n ),\n monthsShort: 'јан_фев_мар_апр_мај_јун_јул_авг_сеп_окт_ное_дек'.split('_'),\n weekdays: 'недела_понеделник_вторник_среда_четврток_петок_сабота'.split(\n '_'\n ),\n weekdaysShort: 'нед_пон_вто_сре_чет_пет_саб'.split('_'),\n weekdaysMin: 'нe_пo_вт_ср_че_пе_сa'.split('_'),\n longDateFormat: {\n LT: 'H:mm',\n LTS: 'H:mm:ss',\n L: 'D.MM.YYYY',\n LL: 'D MMMM YYYY',\n LLL: 'D MMMM YYYY H:mm',\n LLLL: 'dddd, D MMMM YYYY H:mm',\n },\n calendar: {\n sameDay: '[Денес во] LT',\n nextDay: '[Утре во] LT',\n nextWeek: '[Во] dddd [во] LT',\n lastDay: '[Вчера во] LT',\n lastWeek: function () {\n switch (this.day()) {\n case 0:\n case 3:\n case 6:\n return '[Изминатата] dddd [во] LT';\n case 1:\n case 2:\n case 4:\n case 5:\n return '[Изминатиот] dddd [во] LT';\n }\n },\n sameElse: 'L',\n },\n relativeTime: {\n future: 'за %s',\n past: 'пред %s',\n s: 'неколку секунди',\n ss: '%d секунди',\n m: 'една минута',\n mm: '%d минути',\n h: 'еден час',\n hh: '%d часа',\n d: 'еден ден',\n dd: '%d дена',\n M: 'еден месец',\n MM: '%d месеци',\n y: 'една година',\n yy: '%d години',\n },\n dayOfMonthOrdinalParse: /\\d{1,2}-(ев|ен|ти|ви|ри|ми)/,\n ordinal: function (number) {\n var lastDigit = number % 10,\n last2Digits = number % 100;\n if (number === 0) {\n return number + '-ев';\n } else if (last2Digits === 0) {\n return number + '-ен';\n } else if (last2Digits > 10 && last2Digits < 20) {\n return number + '-ти';\n } else if (lastDigit === 1) {\n return number + '-ви';\n } else if (lastDigit === 2) {\n return number + '-ри';\n } else if (lastDigit === 7 || lastDigit === 8) {\n return number + '-ми';\n } else {\n return number + '-ти';\n }\n },\n week: {\n dow: 1, // Monday is the first day of the week.\n doy: 7, // The week that contains Jan 7th is the first week of the year.\n },\n });\n\n return mk;\n\n})));\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMzAzMDYuanMiLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL2l0Zy1uZXh0Z2VuLWZyb250ZW5kLy4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvbWsuanM/NjkwOSJdLCJzb3VyY2VzQ29udGVudCI6WyIvLyEgbW9tZW50LmpzIGxvY2FsZSBjb25maWd1cmF0aW9uXG4vLyEgbG9jYWxlIDogTWFjZWRvbmlhbiBbbWtdXG4vLyEgYXV0aG9yIDogQm9yaXNsYXYgTWlja292IDogaHR0cHM6Ly9naXRodWIuY29tL0IwazBcbi8vISBhdXRob3IgOiBTYXNoa28gVG9kb3JvdiA6IGh0dHBzOi8vZ2l0aHViLmNvbS9ia3ljZWhcblxuOyhmdW5jdGlvbiAoZ2xvYmFsLCBmYWN0b3J5KSB7XG4gICB0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcgJiYgdHlwZW9mIG1vZHVsZSAhPT0gJ3VuZGVmaW5lZCdcbiAgICAgICAmJiB0eXBlb2YgcmVxdWlyZSA9PT0gJ2Z1bmN0aW9uJyA/IGZhY3RvcnkocmVxdWlyZSgnLi4vbW9tZW50JykpIDpcbiAgIHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgZGVmaW5lLmFtZCA/IGRlZmluZShbJy4uL21vbWVudCddLCBmYWN0b3J5KSA6XG4gICBmYWN0b3J5KGdsb2JhbC5tb21lbnQpXG59KHRoaXMsIChmdW5jdGlvbiAobW9tZW50KSB7ICd1c2Ugc3RyaWN0JztcblxuICAgIC8vISBtb21lbnQuanMgbG9jYWxlIGNvbmZpZ3VyYXRpb25cblxuICAgIHZhciBtayA9IG1vbWVudC5kZWZpbmVMb2NhbGUoJ21rJywge1xuICAgICAgICBtb250aHM6ICfRmNCw0L3Rg9Cw0YDQuF/RhNC10LLRgNGD0LDRgNC4X9C80LDRgNGCX9Cw0L/RgNC40Ltf0LzQsNGYX9GY0YPQvdC4X9GY0YPQu9C4X9Cw0LLQs9GD0YHRgl/RgdC10L/RgtC10LzQstGA0Lhf0L7QutGC0L7QvNCy0YDQuF/QvdC+0LXQvNCy0YDQuF/QtNC10LrQtdC80LLRgNC4Jy5zcGxpdChcbiAgICAgICAgICAgICdfJ1xuICAgICAgICApLFxuICAgICAgICBtb250aHNTaG9ydDogJ9GY0LDQvV/RhNC10LJf0LzQsNGAX9Cw0L/RgF/QvNCw0Zhf0ZjRg9C9X9GY0YPQu1/QsNCy0LNf0YHQtdC/X9C+0LrRgl/QvdC+0LVf0LTQtdC6Jy5zcGxpdCgnXycpLFxuICAgICAgICB3ZWVrZGF5czogJ9C90LXQtNC10LvQsF/Qv9C+0L3QtdC00LXQu9C90LjQul/QstGC0L7RgNC90LjQul/RgdGA0LXQtNCwX9GH0LXRgtCy0YDRgtC+0Lpf0L/QtdGC0L7Qul/RgdCw0LHQvtGC0LAnLnNwbGl0KFxuICAgICAgICAgICAgJ18nXG4gICAgICAgICksXG4gICAgICAgIHdlZWtkYXlzU2hvcnQ6ICfQvdC10LRf0L/QvtC9X9Cy0YLQvl/RgdGA0LVf0YfQtdGCX9C/0LXRgl/RgdCw0LEnLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzTWluOiAn0L1lX9C/b1/QstGCX9GB0YBf0YfQtV/Qv9C1X9GBYScuc3BsaXQoJ18nKSxcbiAgICAgICAgbG9uZ0RhdGVGb3JtYXQ6IHtcbiAgICAgICAgICAgIExUOiAnSDptbScsXG4gICAgICAgICAgICBMVFM6ICdIOm1tOnNzJyxcbiAgICAgICAgICAgIEw6ICdELk1NLllZWVknLFxuICAgICAgICAgICAgTEw6ICdEIE1NTU0gWVlZWScsXG4gICAgICAgICAgICBMTEw6ICdEIE1NTU0gWVlZWSBIOm1tJyxcbiAgICAgICAgICAgIExMTEw6ICdkZGRkLCBEIE1NTU0gWVlZWSBIOm1tJyxcbiAgICAgICAgfSxcbiAgICAgICAgY2FsZW5kYXI6IHtcbiAgICAgICAgICAgIHNhbWVEYXk6ICdb0JTQtdC90LXRgSDQstC+XSBMVCcsXG4gICAgICAgICAgICBuZXh0RGF5OiAnW9Cj0YLRgNC1INCy0L5dIExUJyxcbiAgICAgICAgICAgIG5leHRXZWVrOiAnW9CS0L5dIGRkZGQgW9Cy0L5dIExUJyxcbiAgICAgICAgICAgIGxhc3REYXk6ICdb0JLRh9C10YDQsCDQstC+XSBMVCcsXG4gICAgICAgICAgICBsYXN0V2VlazogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIHN3aXRjaCAodGhpcy5kYXkoKSkge1xuICAgICAgICAgICAgICAgICAgICBjYXNlIDA6XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgMzpcbiAgICAgICAgICAgICAgICAgICAgY2FzZSA2OlxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICdb0JjQt9C80LjQvdCw0YLQsNGC0LBdIGRkZGQgW9Cy0L5dIExUJztcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAxOlxuICAgICAgICAgICAgICAgICAgICBjYXNlIDI6XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgNDpcbiAgICAgICAgICAgICAgICAgICAgY2FzZSA1OlxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICdb0JjQt9C80LjQvdCw0YLQuNC+0YJdIGRkZGQgW9Cy0L5dIExUJztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgc2FtZUVsc2U6ICdMJyxcbiAgICAgICAgfSxcbiAgICAgICAgcmVsYXRpdmVUaW1lOiB7XG4gICAgICAgICAgICBmdXR1cmU6ICfQt9CwICVzJyxcbiAgICAgICAgICAgIHBhc3Q6ICfQv9GA0LXQtCAlcycsXG4gICAgICAgICAgICBzOiAn0L3QtdC60L7Qu9C60YMg0YHQtdC60YPQvdC00LgnLFxuICAgICAgICAgICAgc3M6ICclZCDRgdC10LrRg9C90LTQuCcsXG4gICAgICAgICAgICBtOiAn0LXQtNC90LAg0LzQuNC90YPRgtCwJyxcbiAgICAgICAgICAgIG1tOiAnJWQg0LzQuNC90YPRgtC4JyxcbiAgICAgICAgICAgIGg6ICfQtdC00LXQvSDRh9Cw0YEnLFxuICAgICAgICAgICAgaGg6ICclZCDRh9Cw0YHQsCcsXG4gICAgICAgICAgICBkOiAn0LXQtNC10L0g0LTQtdC9JyxcbiAgICAgICAgICAgIGRkOiAnJWQg0LTQtdC90LAnLFxuICAgICAgICAgICAgTTogJ9C10LTQtdC9INC80LXRgdC10YYnLFxuICAgICAgICAgICAgTU06ICclZCDQvNC10YHQtdGG0LgnLFxuICAgICAgICAgICAgeTogJ9C10LTQvdCwINCz0L7QtNC40L3QsCcsXG4gICAgICAgICAgICB5eTogJyVkINCz0L7QtNC40L3QuCcsXG4gICAgICAgIH0sXG4gICAgICAgIGRheU9mTW9udGhPcmRpbmFsUGFyc2U6IC9cXGR7MSwyfS0o0LXQsnzQtdC9fNGC0Lh80LLQuHzRgNC4fNC80LgpLyxcbiAgICAgICAgb3JkaW5hbDogZnVuY3Rpb24gKG51bWJlcikge1xuICAgICAgICAgICAgdmFyIGxhc3REaWdpdCA9IG51bWJlciAlIDEwLFxuICAgICAgICAgICAgICAgIGxhc3QyRGlnaXRzID0gbnVtYmVyICUgMTAwO1xuICAgICAgICAgICAgaWYgKG51bWJlciA9PT0gMCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBudW1iZXIgKyAnLdC10LInO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChsYXN0MkRpZ2l0cyA9PT0gMCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBudW1iZXIgKyAnLdC10L0nO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChsYXN0MkRpZ2l0cyA+IDEwICYmIGxhc3QyRGlnaXRzIDwgMjApIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gbnVtYmVyICsgJy3RgtC4JztcbiAgICAgICAgICAgIH0gZWxzZSBpZiAobGFzdERpZ2l0ID09PSAxKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG51bWJlciArICct0LLQuCc7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGxhc3REaWdpdCA9PT0gMikge1xuICAgICAgICAgICAgICAgIHJldHVybiBudW1iZXIgKyAnLdGA0LgnO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChsYXN0RGlnaXQgPT09IDcgfHwgbGFzdERpZ2l0ID09PSA4KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG51bWJlciArICct0LzQuCc7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHJldHVybiBudW1iZXIgKyAnLdGC0LgnO1xuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICB3ZWVrOiB7XG4gICAgICAgICAgICBkb3c6IDEsIC8vIE1vbmRheSBpcyB0aGUgZmlyc3QgZGF5IG9mIHRoZSB3ZWVrLlxuICAgICAgICAgICAgZG95OiA3LCAvLyBUaGUgd2VlayB0aGF0IGNvbnRhaW5zIEphbiA3dGggaXMgdGhlIGZpcnN0IHdlZWsgb2YgdGhlIHllYXIuXG4gICAgICAgIH0sXG4gICAgfSk7XG5cbiAgICByZXR1cm4gbWs7XG5cbn0pKSk7XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///30306\n")},30448:(I,g,t)=>{"use strict";I.exports=t.p+"a1201a1462fed15d2375.png"},30753:(I,g,t)=>{"use strict";I.exports=t.p+"0cd7e0af2d6d9d57613a.png"},30876:(__unused_webpack_module,__webpack_exports__,__webpack_require__)=>{"use strict";eval("// ESM COMPAT FLAG\n__webpack_require__.r(__webpack_exports__);\n\n// EXPORTS\n__webpack_require__.d(__webpack_exports__, {\n BrowserRouter: () => (/* binding */ BrowserRouter),\n HashRouter: () => (/* binding */ HashRouter),\n Link: () => (/* binding */ Link),\n MemoryRouter: () => (/* reexport */ MemoryRouter),\n NavLink: () => (/* binding */ NavLink),\n Prompt: () => (/* reexport */ Prompt),\n Redirect: () => (/* reexport */ Redirect),\n Route: () => (/* reexport */ Route),\n Router: () => (/* reexport */ Router),\n StaticRouter: () => (/* reexport */ StaticRouter),\n Switch: () => (/* reexport */ Switch),\n generatePath: () => (/* reexport */ generatePath),\n matchPath: () => (/* reexport */ matchPath),\n useHistory: () => (/* reexport */ useHistory),\n useLocation: () => (/* reexport */ useLocation),\n useParams: () => (/* reexport */ useParams),\n useRouteMatch: () => (/* reexport */ useRouteMatch),\n withRouter: () => (/* reexport */ withRouter)\n});\n\n// EXTERNAL MODULE: ./node_modules/@babel/runtime/helpers/esm/inheritsLoose.js + 1 modules\nvar inheritsLoose = __webpack_require__(25540);\n// EXTERNAL MODULE: consume shared module (default) react@^17.0.2 (singleton) (fallback: ./node_modules/react/index.js) (eager)\nvar index_js_eager_ = __webpack_require__(24002);\nvar index_js_eager_default = /*#__PURE__*/__webpack_require__.n(index_js_eager_);\n// EXTERNAL MODULE: ./node_modules/prop-types/index.js\nvar prop_types = __webpack_require__(5556);\nvar prop_types_default = /*#__PURE__*/__webpack_require__.n(prop_types);\n// EXTERNAL MODULE: ./node_modules/@babel/runtime/helpers/esm/extends.js\nvar esm_extends = __webpack_require__(58168);\n;// ./node_modules/resolve-pathname/esm/resolve-pathname.js\nfunction isAbsolute(pathname) {\n return pathname.charAt(0) === '/';\n}\n\n// About 1.5x faster than the two-arg version of Array#splice()\nfunction spliceOne(list, index) {\n for (var i = index, k = i + 1, n = list.length; k < n; i += 1, k += 1) {\n list[i] = list[k];\n }\n\n list.pop();\n}\n\n// This implementation is based heavily on node's url.parse\nfunction resolvePathname(to, from) {\n if (from === undefined) from = '';\n\n var toParts = (to && to.split('/')) || [];\n var fromParts = (from && from.split('/')) || [];\n\n var isToAbs = to && isAbsolute(to);\n var isFromAbs = from && isAbsolute(from);\n var mustEndAbs = isToAbs || isFromAbs;\n\n if (to && isAbsolute(to)) {\n // to is absolute\n fromParts = toParts;\n } else if (toParts.length) {\n // to is relative, drop the filename\n fromParts.pop();\n fromParts = fromParts.concat(toParts);\n }\n\n if (!fromParts.length) return '/';\n\n var hasTrailingSlash;\n if (fromParts.length) {\n var last = fromParts[fromParts.length - 1];\n hasTrailingSlash = last === '.' || last === '..' || last === '';\n } else {\n hasTrailingSlash = false;\n }\n\n var up = 0;\n for (var i = fromParts.length; i >= 0; i--) {\n var part = fromParts[i];\n\n if (part === '.') {\n spliceOne(fromParts, i);\n } else if (part === '..') {\n spliceOne(fromParts, i);\n up++;\n } else if (up) {\n spliceOne(fromParts, i);\n up--;\n }\n }\n\n if (!mustEndAbs) for (; up--; up) fromParts.unshift('..');\n\n if (\n mustEndAbs &&\n fromParts[0] !== '' &&\n (!fromParts[0] || !isAbsolute(fromParts[0]))\n )\n fromParts.unshift('');\n\n var result = fromParts.join('/');\n\n if (hasTrailingSlash && result.substr(-1) !== '/') result += '/';\n\n return result;\n}\n\n/* harmony default export */ const resolve_pathname = (resolvePathname);\n\n;// ./node_modules/value-equal/esm/value-equal.js\nfunction value_equal_valueOf(obj) {\n return obj.valueOf ? obj.valueOf() : Object.prototype.valueOf.call(obj);\n}\n\nfunction valueEqual(a, b) {\n // Test for strict equality first.\n if (a === b) return true;\n\n // Otherwise, if either of them == null they are not equal.\n if (a == null || b == null) return false;\n\n if (Array.isArray(a)) {\n return (\n Array.isArray(b) &&\n a.length === b.length &&\n a.every(function(item, index) {\n return valueEqual(item, b[index]);\n })\n );\n }\n\n if (typeof a === 'object' || typeof b === 'object') {\n var aValue = value_equal_valueOf(a);\n var bValue = value_equal_valueOf(b);\n\n if (aValue !== a || bValue !== b) return valueEqual(aValue, bValue);\n\n return Object.keys(Object.assign({}, a, b)).every(function(key) {\n return valueEqual(a[key], b[key]);\n });\n }\n\n return false;\n}\n\n/* harmony default export */ const value_equal = (valueEqual);\n\n;// ./node_modules/tiny-invariant/dist/esm/tiny-invariant.js\nvar isProduction = \"production\" === 'production';\nvar prefix = 'Invariant failed';\nfunction invariant(condition, message) {\n if (condition) {\n return;\n }\n if (isProduction) {\n throw new Error(prefix);\n }\n var provided = typeof message === 'function' ? message() : message;\n var value = provided ? \"\".concat(prefix, \": \").concat(provided) : prefix;\n throw new Error(value);\n}\n\n\n\n;// ./node_modules/history/esm/history.js\n\n\n\n\n\n\nfunction addLeadingSlash(path) {\n return path.charAt(0) === '/' ? path : '/' + path;\n}\nfunction stripLeadingSlash(path) {\n return path.charAt(0) === '/' ? path.substr(1) : path;\n}\nfunction hasBasename(path, prefix) {\n return path.toLowerCase().indexOf(prefix.toLowerCase()) === 0 && '/?#'.indexOf(path.charAt(prefix.length)) !== -1;\n}\nfunction stripBasename(path, prefix) {\n return hasBasename(path, prefix) ? path.substr(prefix.length) : path;\n}\nfunction stripTrailingSlash(path) {\n return path.charAt(path.length - 1) === '/' ? path.slice(0, -1) : path;\n}\nfunction parsePath(path) {\n var pathname = path || '/';\n var search = '';\n var hash = '';\n var hashIndex = pathname.indexOf('#');\n\n if (hashIndex !== -1) {\n hash = pathname.substr(hashIndex);\n pathname = pathname.substr(0, hashIndex);\n }\n\n var searchIndex = pathname.indexOf('?');\n\n if (searchIndex !== -1) {\n search = pathname.substr(searchIndex);\n pathname = pathname.substr(0, searchIndex);\n }\n\n return {\n pathname: pathname,\n search: search === '?' ? '' : search,\n hash: hash === '#' ? '' : hash\n };\n}\nfunction createPath(location) {\n var pathname = location.pathname,\n search = location.search,\n hash = location.hash;\n var path = pathname || '/';\n if (search && search !== '?') path += search.charAt(0) === '?' ? search : \"?\" + search;\n if (hash && hash !== '#') path += hash.charAt(0) === '#' ? hash : \"#\" + hash;\n return path;\n}\n\nfunction createLocation(path, state, key, currentLocation) {\n var location;\n\n if (typeof path === 'string') {\n // Two-arg form: push(path, state)\n location = parsePath(path);\n location.state = state;\n } else {\n // One-arg form: push(location)\n location = (0,esm_extends/* default */.A)({}, path);\n if (location.pathname === undefined) location.pathname = '';\n\n if (location.search) {\n if (location.search.charAt(0) !== '?') location.search = '?' + location.search;\n } else {\n location.search = '';\n }\n\n if (location.hash) {\n if (location.hash.charAt(0) !== '#') location.hash = '#' + location.hash;\n } else {\n location.hash = '';\n }\n\n if (state !== undefined && location.state === undefined) location.state = state;\n }\n\n try {\n location.pathname = decodeURI(location.pathname);\n } catch (e) {\n if (e instanceof URIError) {\n throw new URIError('Pathname \"' + location.pathname + '\" could not be decoded. ' + 'This is likely caused by an invalid percent-encoding.');\n } else {\n throw e;\n }\n }\n\n if (key) location.key = key;\n\n if (currentLocation) {\n // Resolve incomplete/relative pathname relative to current location.\n if (!location.pathname) {\n location.pathname = currentLocation.pathname;\n } else if (location.pathname.charAt(0) !== '/') {\n location.pathname = resolve_pathname(location.pathname, currentLocation.pathname);\n }\n } else {\n // When there is no prior location and pathname is empty, set it to /\n if (!location.pathname) {\n location.pathname = '/';\n }\n }\n\n return location;\n}\nfunction locationsAreEqual(a, b) {\n return a.pathname === b.pathname && a.search === b.search && a.hash === b.hash && a.key === b.key && value_equal(a.state, b.state);\n}\n\nfunction createTransitionManager() {\n var prompt = null;\n\n function setPrompt(nextPrompt) {\n false ? 0 : void 0;\n prompt = nextPrompt;\n return function () {\n if (prompt === nextPrompt) prompt = null;\n };\n }\n\n function confirmTransitionTo(location, action, getUserConfirmation, callback) {\n // TODO: If another transition starts while we're still confirming\n // the previous one, we may end up in a weird state. Figure out the\n // best way to handle this.\n if (prompt != null) {\n var result = typeof prompt === 'function' ? prompt(location, action) : prompt;\n\n if (typeof result === 'string') {\n if (typeof getUserConfirmation === 'function') {\n getUserConfirmation(result, callback);\n } else {\n false ? 0 : void 0;\n callback(true);\n }\n } else {\n // Return false from a transition hook to cancel the transition.\n callback(result !== false);\n }\n } else {\n callback(true);\n }\n }\n\n var listeners = [];\n\n function appendListener(fn) {\n var isActive = true;\n\n function listener() {\n if (isActive) fn.apply(void 0, arguments);\n }\n\n listeners.push(listener);\n return function () {\n isActive = false;\n listeners = listeners.filter(function (item) {\n return item !== listener;\n });\n };\n }\n\n function notifyListeners() {\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n listeners.forEach(function (listener) {\n return listener.apply(void 0, args);\n });\n }\n\n return {\n setPrompt: setPrompt,\n confirmTransitionTo: confirmTransitionTo,\n appendListener: appendListener,\n notifyListeners: notifyListeners\n };\n}\n\nvar canUseDOM = !!(typeof window !== 'undefined' && window.document && window.document.createElement);\nfunction getConfirmation(message, callback) {\n callback(window.confirm(message)); // eslint-disable-line no-alert\n}\n/**\n * Returns true if the HTML5 history API is supported. Taken from Modernizr.\n *\n * https://github.com/Modernizr/Modernizr/blob/master/LICENSE\n * https://github.com/Modernizr/Modernizr/blob/master/feature-detects/history.js\n * changed to avoid false negatives for Windows Phones: https://github.com/reactjs/react-router/issues/586\n */\n\nfunction supportsHistory() {\n var ua = window.navigator.userAgent;\n if ((ua.indexOf('Android 2.') !== -1 || ua.indexOf('Android 4.0') !== -1) && ua.indexOf('Mobile Safari') !== -1 && ua.indexOf('Chrome') === -1 && ua.indexOf('Windows Phone') === -1) return false;\n return window.history && 'pushState' in window.history;\n}\n/**\n * Returns true if browser fires popstate on hash change.\n * IE10 and IE11 do not.\n */\n\nfunction supportsPopStateOnHashChange() {\n return window.navigator.userAgent.indexOf('Trident') === -1;\n}\n/**\n * Returns false if using go(n) with hash history causes a full page reload.\n */\n\nfunction supportsGoWithoutReloadUsingHash() {\n return window.navigator.userAgent.indexOf('Firefox') === -1;\n}\n/**\n * Returns true if a given popstate event is an extraneous WebKit event.\n * Accounts for the fact that Chrome on iOS fires real popstate events\n * containing undefined state when pressing the back button.\n */\n\nfunction isExtraneousPopstateEvent(event) {\n return event.state === undefined && navigator.userAgent.indexOf('CriOS') === -1;\n}\n\nvar PopStateEvent = 'popstate';\nvar HashChangeEvent = 'hashchange';\n\nfunction getHistoryState() {\n try {\n return window.history.state || {};\n } catch (e) {\n // IE 11 sometimes throws when accessing window.history.state\n // See https://github.com/ReactTraining/history/pull/289\n return {};\n }\n}\n/**\n * Creates a history object that uses the HTML5 history API including\n * pushState, replaceState, and the popstate event.\n */\n\n\nfunction createBrowserHistory(props) {\n if (props === void 0) {\n props = {};\n }\n\n !canUseDOM ? false ? 0 : invariant(false) : void 0;\n var globalHistory = window.history;\n var canUseHistory = supportsHistory();\n var needsHashChangeListener = !supportsPopStateOnHashChange();\n var _props = props,\n _props$forceRefresh = _props.forceRefresh,\n forceRefresh = _props$forceRefresh === void 0 ? false : _props$forceRefresh,\n _props$getUserConfirm = _props.getUserConfirmation,\n getUserConfirmation = _props$getUserConfirm === void 0 ? getConfirmation : _props$getUserConfirm,\n _props$keyLength = _props.keyLength,\n keyLength = _props$keyLength === void 0 ? 6 : _props$keyLength;\n var basename = props.basename ? stripTrailingSlash(addLeadingSlash(props.basename)) : '';\n\n function getDOMLocation(historyState) {\n var _ref = historyState || {},\n key = _ref.key,\n state = _ref.state;\n\n var _window$location = window.location,\n pathname = _window$location.pathname,\n search = _window$location.search,\n hash = _window$location.hash;\n var path = pathname + search + hash;\n false ? 0 : void 0;\n if (basename) path = stripBasename(path, basename);\n return createLocation(path, state, key);\n }\n\n function createKey() {\n return Math.random().toString(36).substr(2, keyLength);\n }\n\n var transitionManager = createTransitionManager();\n\n function setState(nextState) {\n (0,esm_extends/* default */.A)(history, nextState);\n\n history.length = globalHistory.length;\n transitionManager.notifyListeners(history.location, history.action);\n }\n\n function handlePopState(event) {\n // Ignore extraneous popstate events in WebKit.\n if (isExtraneousPopstateEvent(event)) return;\n handlePop(getDOMLocation(event.state));\n }\n\n function handleHashChange() {\n handlePop(getDOMLocation(getHistoryState()));\n }\n\n var forceNextPop = false;\n\n function handlePop(location) {\n if (forceNextPop) {\n forceNextPop = false;\n setState();\n } else {\n var action = 'POP';\n transitionManager.confirmTransitionTo(location, action, getUserConfirmation, function (ok) {\n if (ok) {\n setState({\n action: action,\n location: location\n });\n } else {\n revertPop(location);\n }\n });\n }\n }\n\n function revertPop(fromLocation) {\n var toLocation = history.location; // TODO: We could probably make this more reliable by\n // keeping a list of keys we've seen in sessionStorage.\n // Instead, we just default to 0 for keys we don't know.\n\n var toIndex = allKeys.indexOf(toLocation.key);\n if (toIndex === -1) toIndex = 0;\n var fromIndex = allKeys.indexOf(fromLocation.key);\n if (fromIndex === -1) fromIndex = 0;\n var delta = toIndex - fromIndex;\n\n if (delta) {\n forceNextPop = true;\n go(delta);\n }\n }\n\n var initialLocation = getDOMLocation(getHistoryState());\n var allKeys = [initialLocation.key]; // Public interface\n\n function createHref(location) {\n return basename + createPath(location);\n }\n\n function push(path, state) {\n false ? 0 : void 0;\n var action = 'PUSH';\n var location = createLocation(path, state, createKey(), history.location);\n transitionManager.confirmTransitionTo(location, action, getUserConfirmation, function (ok) {\n if (!ok) return;\n var href = createHref(location);\n var key = location.key,\n state = location.state;\n\n if (canUseHistory) {\n globalHistory.pushState({\n key: key,\n state: state\n }, null, href);\n\n if (forceRefresh) {\n window.location.href = href;\n } else {\n var prevIndex = allKeys.indexOf(history.location.key);\n var nextKeys = allKeys.slice(0, prevIndex + 1);\n nextKeys.push(location.key);\n allKeys = nextKeys;\n setState({\n action: action,\n location: location\n });\n }\n } else {\n false ? 0 : void 0;\n window.location.href = href;\n }\n });\n }\n\n function replace(path, state) {\n false ? 0 : void 0;\n var action = 'REPLACE';\n var location = createLocation(path, state, createKey(), history.location);\n transitionManager.confirmTransitionTo(location, action, getUserConfirmation, function (ok) {\n if (!ok) return;\n var href = createHref(location);\n var key = location.key,\n state = location.state;\n\n if (canUseHistory) {\n globalHistory.replaceState({\n key: key,\n state: state\n }, null, href);\n\n if (forceRefresh) {\n window.location.replace(href);\n } else {\n var prevIndex = allKeys.indexOf(history.location.key);\n if (prevIndex !== -1) allKeys[prevIndex] = location.key;\n setState({\n action: action,\n location: location\n });\n }\n } else {\n false ? 0 : void 0;\n window.location.replace(href);\n }\n });\n }\n\n function go(n) {\n globalHistory.go(n);\n }\n\n function goBack() {\n go(-1);\n }\n\n function goForward() {\n go(1);\n }\n\n var listenerCount = 0;\n\n function checkDOMListeners(delta) {\n listenerCount += delta;\n\n if (listenerCount === 1 && delta === 1) {\n window.addEventListener(PopStateEvent, handlePopState);\n if (needsHashChangeListener) window.addEventListener(HashChangeEvent, handleHashChange);\n } else if (listenerCount === 0) {\n window.removeEventListener(PopStateEvent, handlePopState);\n if (needsHashChangeListener) window.removeEventListener(HashChangeEvent, handleHashChange);\n }\n }\n\n var isBlocked = false;\n\n function block(prompt) {\n if (prompt === void 0) {\n prompt = false;\n }\n\n var unblock = transitionManager.setPrompt(prompt);\n\n if (!isBlocked) {\n checkDOMListeners(1);\n isBlocked = true;\n }\n\n return function () {\n if (isBlocked) {\n isBlocked = false;\n checkDOMListeners(-1);\n }\n\n return unblock();\n };\n }\n\n function listen(listener) {\n var unlisten = transitionManager.appendListener(listener);\n checkDOMListeners(1);\n return function () {\n checkDOMListeners(-1);\n unlisten();\n };\n }\n\n var history = {\n length: globalHistory.length,\n action: 'POP',\n location: initialLocation,\n createHref: createHref,\n push: push,\n replace: replace,\n go: go,\n goBack: goBack,\n goForward: goForward,\n block: block,\n listen: listen\n };\n return history;\n}\n\nvar HashChangeEvent$1 = 'hashchange';\nvar HashPathCoders = {\n hashbang: {\n encodePath: function encodePath(path) {\n return path.charAt(0) === '!' ? path : '!/' + stripLeadingSlash(path);\n },\n decodePath: function decodePath(path) {\n return path.charAt(0) === '!' ? path.substr(1) : path;\n }\n },\n noslash: {\n encodePath: stripLeadingSlash,\n decodePath: addLeadingSlash\n },\n slash: {\n encodePath: addLeadingSlash,\n decodePath: addLeadingSlash\n }\n};\n\nfunction stripHash(url) {\n var hashIndex = url.indexOf('#');\n return hashIndex === -1 ? url : url.slice(0, hashIndex);\n}\n\nfunction getHashPath() {\n // We can't use window.location.hash here because it's not\n // consistent across browsers - Firefox will pre-decode it!\n var href = window.location.href;\n var hashIndex = href.indexOf('#');\n return hashIndex === -1 ? '' : href.substring(hashIndex + 1);\n}\n\nfunction pushHashPath(path) {\n window.location.hash = path;\n}\n\nfunction replaceHashPath(path) {\n window.location.replace(stripHash(window.location.href) + '#' + path);\n}\n\nfunction createHashHistory(props) {\n if (props === void 0) {\n props = {};\n }\n\n !canUseDOM ? false ? 0 : invariant(false) : void 0;\n var globalHistory = window.history;\n var canGoWithoutReload = supportsGoWithoutReloadUsingHash();\n var _props = props,\n _props$getUserConfirm = _props.getUserConfirmation,\n getUserConfirmation = _props$getUserConfirm === void 0 ? getConfirmation : _props$getUserConfirm,\n _props$hashType = _props.hashType,\n hashType = _props$hashType === void 0 ? 'slash' : _props$hashType;\n var basename = props.basename ? stripTrailingSlash(addLeadingSlash(props.basename)) : '';\n var _HashPathCoders$hashT = HashPathCoders[hashType],\n encodePath = _HashPathCoders$hashT.encodePath,\n decodePath = _HashPathCoders$hashT.decodePath;\n\n function getDOMLocation() {\n var path = decodePath(getHashPath());\n false ? 0 : void 0;\n if (basename) path = stripBasename(path, basename);\n return createLocation(path);\n }\n\n var transitionManager = createTransitionManager();\n\n function setState(nextState) {\n (0,esm_extends/* default */.A)(history, nextState);\n\n history.length = globalHistory.length;\n transitionManager.notifyListeners(history.location, history.action);\n }\n\n var forceNextPop = false;\n var ignorePath = null;\n\n function locationsAreEqual$$1(a, b) {\n return a.pathname === b.pathname && a.search === b.search && a.hash === b.hash;\n }\n\n function handleHashChange() {\n var path = getHashPath();\n var encodedPath = encodePath(path);\n\n if (path !== encodedPath) {\n // Ensure we always have a properly-encoded hash.\n replaceHashPath(encodedPath);\n } else {\n var location = getDOMLocation();\n var prevLocation = history.location;\n if (!forceNextPop && locationsAreEqual$$1(prevLocation, location)) return; // A hashchange doesn't always == location change.\n\n if (ignorePath === createPath(location)) return; // Ignore this change; we already setState in push/replace.\n\n ignorePath = null;\n handlePop(location);\n }\n }\n\n function handlePop(location) {\n if (forceNextPop) {\n forceNextPop = false;\n setState();\n } else {\n var action = 'POP';\n transitionManager.confirmTransitionTo(location, action, getUserConfirmation, function (ok) {\n if (ok) {\n setState({\n action: action,\n location: location\n });\n } else {\n revertPop(location);\n }\n });\n }\n }\n\n function revertPop(fromLocation) {\n var toLocation = history.location; // TODO: We could probably make this more reliable by\n // keeping a list of paths we've seen in sessionStorage.\n // Instead, we just default to 0 for paths we don't know.\n\n var toIndex = allPaths.lastIndexOf(createPath(toLocation));\n if (toIndex === -1) toIndex = 0;\n var fromIndex = allPaths.lastIndexOf(createPath(fromLocation));\n if (fromIndex === -1) fromIndex = 0;\n var delta = toIndex - fromIndex;\n\n if (delta) {\n forceNextPop = true;\n go(delta);\n }\n } // Ensure the hash is encoded properly before doing anything else.\n\n\n var path = getHashPath();\n var encodedPath = encodePath(path);\n if (path !== encodedPath) replaceHashPath(encodedPath);\n var initialLocation = getDOMLocation();\n var allPaths = [createPath(initialLocation)]; // Public interface\n\n function createHref(location) {\n var baseTag = document.querySelector('base');\n var href = '';\n\n if (baseTag && baseTag.getAttribute('href')) {\n href = stripHash(window.location.href);\n }\n\n return href + '#' + encodePath(basename + createPath(location));\n }\n\n function push(path, state) {\n false ? 0 : void 0;\n var action = 'PUSH';\n var location = createLocation(path, undefined, undefined, history.location);\n transitionManager.confirmTransitionTo(location, action, getUserConfirmation, function (ok) {\n if (!ok) return;\n var path = createPath(location);\n var encodedPath = encodePath(basename + path);\n var hashChanged = getHashPath() !== encodedPath;\n\n if (hashChanged) {\n // We cannot tell if a hashchange was caused by a PUSH, so we'd\n // rather setState here and ignore the hashchange. The caveat here\n // is that other hash histories in the page will consider it a POP.\n ignorePath = path;\n pushHashPath(encodedPath);\n var prevIndex = allPaths.lastIndexOf(createPath(history.location));\n var nextPaths = allPaths.slice(0, prevIndex + 1);\n nextPaths.push(path);\n allPaths = nextPaths;\n setState({\n action: action,\n location: location\n });\n } else {\n false ? 0 : void 0;\n setState();\n }\n });\n }\n\n function replace(path, state) {\n false ? 0 : void 0;\n var action = 'REPLACE';\n var location = createLocation(path, undefined, undefined, history.location);\n transitionManager.confirmTransitionTo(location, action, getUserConfirmation, function (ok) {\n if (!ok) return;\n var path = createPath(location);\n var encodedPath = encodePath(basename + path);\n var hashChanged = getHashPath() !== encodedPath;\n\n if (hashChanged) {\n // We cannot tell if a hashchange was caused by a REPLACE, so we'd\n // rather setState here and ignore the hashchange. The caveat here\n // is that other hash histories in the page will consider it a POP.\n ignorePath = path;\n replaceHashPath(encodedPath);\n }\n\n var prevIndex = allPaths.indexOf(createPath(history.location));\n if (prevIndex !== -1) allPaths[prevIndex] = path;\n setState({\n action: action,\n location: location\n });\n });\n }\n\n function go(n) {\n false ? 0 : void 0;\n globalHistory.go(n);\n }\n\n function goBack() {\n go(-1);\n }\n\n function goForward() {\n go(1);\n }\n\n var listenerCount = 0;\n\n function checkDOMListeners(delta) {\n listenerCount += delta;\n\n if (listenerCount === 1 && delta === 1) {\n window.addEventListener(HashChangeEvent$1, handleHashChange);\n } else if (listenerCount === 0) {\n window.removeEventListener(HashChangeEvent$1, handleHashChange);\n }\n }\n\n var isBlocked = false;\n\n function block(prompt) {\n if (prompt === void 0) {\n prompt = false;\n }\n\n var unblock = transitionManager.setPrompt(prompt);\n\n if (!isBlocked) {\n checkDOMListeners(1);\n isBlocked = true;\n }\n\n return function () {\n if (isBlocked) {\n isBlocked = false;\n checkDOMListeners(-1);\n }\n\n return unblock();\n };\n }\n\n function listen(listener) {\n var unlisten = transitionManager.appendListener(listener);\n checkDOMListeners(1);\n return function () {\n checkDOMListeners(-1);\n unlisten();\n };\n }\n\n var history = {\n length: globalHistory.length,\n action: 'POP',\n location: initialLocation,\n createHref: createHref,\n push: push,\n replace: replace,\n go: go,\n goBack: goBack,\n goForward: goForward,\n block: block,\n listen: listen\n };\n return history;\n}\n\nfunction clamp(n, lowerBound, upperBound) {\n return Math.min(Math.max(n, lowerBound), upperBound);\n}\n/**\n * Creates a history object that stores locations in memory.\n */\n\n\nfunction createMemoryHistory(props) {\n if (props === void 0) {\n props = {};\n }\n\n var _props = props,\n getUserConfirmation = _props.getUserConfirmation,\n _props$initialEntries = _props.initialEntries,\n initialEntries = _props$initialEntries === void 0 ? ['/'] : _props$initialEntries,\n _props$initialIndex = _props.initialIndex,\n initialIndex = _props$initialIndex === void 0 ? 0 : _props$initialIndex,\n _props$keyLength = _props.keyLength,\n keyLength = _props$keyLength === void 0 ? 6 : _props$keyLength;\n var transitionManager = createTransitionManager();\n\n function setState(nextState) {\n (0,esm_extends/* default */.A)(history, nextState);\n\n history.length = history.entries.length;\n transitionManager.notifyListeners(history.location, history.action);\n }\n\n function createKey() {\n return Math.random().toString(36).substr(2, keyLength);\n }\n\n var index = clamp(initialIndex, 0, initialEntries.length - 1);\n var entries = initialEntries.map(function (entry) {\n return typeof entry === 'string' ? createLocation(entry, undefined, createKey()) : createLocation(entry, undefined, entry.key || createKey());\n }); // Public interface\n\n var createHref = createPath;\n\n function push(path, state) {\n false ? 0 : void 0;\n var action = 'PUSH';\n var location = createLocation(path, state, createKey(), history.location);\n transitionManager.confirmTransitionTo(location, action, getUserConfirmation, function (ok) {\n if (!ok) return;\n var prevIndex = history.index;\n var nextIndex = prevIndex + 1;\n var nextEntries = history.entries.slice(0);\n\n if (nextEntries.length > nextIndex) {\n nextEntries.splice(nextIndex, nextEntries.length - nextIndex, location);\n } else {\n nextEntries.push(location);\n }\n\n setState({\n action: action,\n location: location,\n index: nextIndex,\n entries: nextEntries\n });\n });\n }\n\n function replace(path, state) {\n false ? 0 : void 0;\n var action = 'REPLACE';\n var location = createLocation(path, state, createKey(), history.location);\n transitionManager.confirmTransitionTo(location, action, getUserConfirmation, function (ok) {\n if (!ok) return;\n history.entries[history.index] = location;\n setState({\n action: action,\n location: location\n });\n });\n }\n\n function go(n) {\n var nextIndex = clamp(history.index + n, 0, history.entries.length - 1);\n var action = 'POP';\n var location = history.entries[nextIndex];\n transitionManager.confirmTransitionTo(location, action, getUserConfirmation, function (ok) {\n if (ok) {\n setState({\n action: action,\n location: location,\n index: nextIndex\n });\n } else {\n // Mimic the behavior of DOM histories by\n // causing a render after a cancelled POP.\n setState();\n }\n });\n }\n\n function goBack() {\n go(-1);\n }\n\n function goForward() {\n go(1);\n }\n\n function canGo(n) {\n var nextIndex = history.index + n;\n return nextIndex >= 0 && nextIndex < history.entries.length;\n }\n\n function block(prompt) {\n if (prompt === void 0) {\n prompt = false;\n }\n\n return transitionManager.setPrompt(prompt);\n }\n\n function listen(listener) {\n return transitionManager.appendListener(listener);\n }\n\n var history = {\n length: entries.length,\n action: 'POP',\n location: entries[index],\n index: index,\n entries: entries,\n createHref: createHref,\n push: push,\n replace: replace,\n go: go,\n goBack: goBack,\n goForward: goForward,\n canGo: canGo,\n block: block,\n listen: listen\n };\n return history;\n}\n\n\n\n// EXTERNAL MODULE: ./node_modules/path-to-regexp/index.js\nvar path_to_regexp = __webpack_require__(35302);\nvar path_to_regexp_default = /*#__PURE__*/__webpack_require__.n(path_to_regexp);\n// EXTERNAL MODULE: ./node_modules/react-router/node_modules/react-is/index.js\nvar react_is = __webpack_require__(37564);\n// EXTERNAL MODULE: ./node_modules/@babel/runtime/helpers/esm/objectWithoutPropertiesLoose.js\nvar objectWithoutPropertiesLoose = __webpack_require__(98587);\n// EXTERNAL MODULE: ./node_modules/hoist-non-react-statics/dist/hoist-non-react-statics.cjs.js\nvar hoist_non_react_statics_cjs = __webpack_require__(4146);\nvar hoist_non_react_statics_cjs_default = /*#__PURE__*/__webpack_require__.n(hoist_non_react_statics_cjs);\n;// ./node_modules/react-router/esm/react-router.js\n\n\n\n\n\n\n\n\n\n\n\n\nvar MAX_SIGNED_31_BIT_INT = 1073741823;\nvar commonjsGlobal = typeof globalThis !== \"undefined\" // 'global proper'\n? // eslint-disable-next-line no-undef\nglobalThis : typeof window !== \"undefined\" ? window // Browser\n: typeof __webpack_require__.g !== \"undefined\" ? __webpack_require__.g // node.js\n: {};\n\nfunction getUniqueId() {\n var key = \"__global_unique_id__\";\n return commonjsGlobal[key] = (commonjsGlobal[key] || 0) + 1;\n} // Inlined Object.is polyfill.\n// https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/is\n\n\nfunction objectIs(x, y) {\n if (x === y) {\n return x !== 0 || 1 / x === 1 / y;\n } else {\n // eslint-disable-next-line no-self-compare\n return x !== x && y !== y;\n }\n}\n\nfunction createEventEmitter(value) {\n var handlers = [];\n return {\n on: function on(handler) {\n handlers.push(handler);\n },\n off: function off(handler) {\n handlers = handlers.filter(function (h) {\n return h !== handler;\n });\n },\n get: function get() {\n return value;\n },\n set: function set(newValue, changedBits) {\n value = newValue;\n handlers.forEach(function (handler) {\n return handler(value, changedBits);\n });\n }\n };\n}\n\nfunction onlyChild(children) {\n return Array.isArray(children) ? children[0] : children;\n}\n\nfunction createReactContext(defaultValue, calculateChangedBits) {\n var _Provider$childContex, _Consumer$contextType;\n\n var contextProp = \"__create-react-context-\" + getUniqueId() + \"__\";\n\n var Provider = /*#__PURE__*/function (_React$Component) {\n (0,inheritsLoose/* default */.A)(Provider, _React$Component);\n\n function Provider() {\n var _this;\n\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n _this = _React$Component.call.apply(_React$Component, [this].concat(args)) || this;\n _this.emitter = createEventEmitter(_this.props.value);\n return _this;\n }\n\n var _proto = Provider.prototype;\n\n _proto.getChildContext = function getChildContext() {\n var _ref;\n\n return _ref = {}, _ref[contextProp] = this.emitter, _ref;\n };\n\n _proto.componentWillReceiveProps = function componentWillReceiveProps(nextProps) {\n if (this.props.value !== nextProps.value) {\n var oldValue = this.props.value;\n var newValue = nextProps.value;\n var changedBits;\n\n if (objectIs(oldValue, newValue)) {\n changedBits = 0; // No change\n } else {\n changedBits = typeof calculateChangedBits === \"function\" ? calculateChangedBits(oldValue, newValue) : MAX_SIGNED_31_BIT_INT;\n\n if (false) {}\n\n changedBits |= 0;\n\n if (changedBits !== 0) {\n this.emitter.set(nextProps.value, changedBits);\n }\n }\n }\n };\n\n _proto.render = function render() {\n return this.props.children;\n };\n\n return Provider;\n }((index_js_eager_default()).Component);\n\n Provider.childContextTypes = (_Provider$childContex = {}, _Provider$childContex[contextProp] = (prop_types_default()).object.isRequired, _Provider$childContex);\n\n var Consumer = /*#__PURE__*/function (_React$Component2) {\n (0,inheritsLoose/* default */.A)(Consumer, _React$Component2);\n\n function Consumer() {\n var _this2;\n\n for (var _len2 = arguments.length, args = new Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {\n args[_key2] = arguments[_key2];\n }\n\n _this2 = _React$Component2.call.apply(_React$Component2, [this].concat(args)) || this;\n _this2.observedBits = void 0;\n _this2.state = {\n value: _this2.getValue()\n };\n\n _this2.onUpdate = function (newValue, changedBits) {\n var observedBits = _this2.observedBits | 0;\n\n if ((observedBits & changedBits) !== 0) {\n _this2.setState({\n value: _this2.getValue()\n });\n }\n };\n\n return _this2;\n }\n\n var _proto2 = Consumer.prototype;\n\n _proto2.componentWillReceiveProps = function componentWillReceiveProps(nextProps) {\n var observedBits = nextProps.observedBits;\n this.observedBits = observedBits === undefined || observedBits === null ? MAX_SIGNED_31_BIT_INT // Subscribe to all changes by default\n : observedBits;\n };\n\n _proto2.componentDidMount = function componentDidMount() {\n if (this.context[contextProp]) {\n this.context[contextProp].on(this.onUpdate);\n }\n\n var observedBits = this.props.observedBits;\n this.observedBits = observedBits === undefined || observedBits === null ? MAX_SIGNED_31_BIT_INT // Subscribe to all changes by default\n : observedBits;\n };\n\n _proto2.componentWillUnmount = function componentWillUnmount() {\n if (this.context[contextProp]) {\n this.context[contextProp].off(this.onUpdate);\n }\n };\n\n _proto2.getValue = function getValue() {\n if (this.context[contextProp]) {\n return this.context[contextProp].get();\n } else {\n return defaultValue;\n }\n };\n\n _proto2.render = function render() {\n return onlyChild(this.props.children)(this.state.value);\n };\n\n return Consumer;\n }((index_js_eager_default()).Component);\n\n Consumer.contextTypes = (_Consumer$contextType = {}, _Consumer$contextType[contextProp] = (prop_types_default()).object, _Consumer$contextType);\n return {\n Provider: Provider,\n Consumer: Consumer\n };\n}\n\n// MIT License\nvar createContext = (index_js_eager_default()).createContext || createReactContext;\n\n// TODO: Replace with React.createContext once we can assume React 16+\n\nvar createNamedContext = function createNamedContext(name) {\n var context = createContext();\n context.displayName = name;\n return context;\n};\n\nvar historyContext = /*#__PURE__*/createNamedContext(\"Router-History\");\n\nvar context = /*#__PURE__*/createNamedContext(\"Router\");\n\n/**\n * The public API for putting history on context.\n */\n\nvar Router = /*#__PURE__*/function (_React$Component) {\n (0,inheritsLoose/* default */.A)(Router, _React$Component);\n\n Router.computeRootMatch = function computeRootMatch(pathname) {\n return {\n path: \"/\",\n url: \"/\",\n params: {},\n isExact: pathname === \"/\"\n };\n };\n\n function Router(props) {\n var _this;\n\n _this = _React$Component.call(this, props) || this;\n _this.state = {\n location: props.history.location\n }; // This is a bit of a hack. We have to start listening for location\n // changes here in the constructor in case there are any s\n // on the initial render. If there are, they will replace/push when\n // they mount and since cDM fires in children before parents, we may\n // get a new location before the is mounted.\n\n _this._isMounted = false;\n _this._pendingLocation = null;\n\n if (!props.staticContext) {\n _this.unlisten = props.history.listen(function (location) {\n _this._pendingLocation = location;\n });\n }\n\n return _this;\n }\n\n var _proto = Router.prototype;\n\n _proto.componentDidMount = function componentDidMount() {\n var _this2 = this;\n\n this._isMounted = true;\n\n if (this.unlisten) {\n // Any pre-mount location changes have been captured at\n // this point, so unregister the listener.\n this.unlisten();\n }\n\n if (!this.props.staticContext) {\n this.unlisten = this.props.history.listen(function (location) {\n if (_this2._isMounted) {\n _this2.setState({\n location: location\n });\n }\n });\n }\n\n if (this._pendingLocation) {\n this.setState({\n location: this._pendingLocation\n });\n }\n };\n\n _proto.componentWillUnmount = function componentWillUnmount() {\n if (this.unlisten) {\n this.unlisten();\n this._isMounted = false;\n this._pendingLocation = null;\n }\n };\n\n _proto.render = function render() {\n return /*#__PURE__*/index_js_eager_default().createElement(context.Provider, {\n value: {\n history: this.props.history,\n location: this.state.location,\n match: Router.computeRootMatch(this.state.location.pathname),\n staticContext: this.props.staticContext\n }\n }, /*#__PURE__*/index_js_eager_default().createElement(historyContext.Provider, {\n children: this.props.children || null,\n value: this.props.history\n }));\n };\n\n return Router;\n}((index_js_eager_default()).Component);\n\nif (false) {}\n\n/**\n * The public API for a that stores location in memory.\n */\n\nvar MemoryRouter = /*#__PURE__*/function (_React$Component) {\n (0,inheritsLoose/* default */.A)(MemoryRouter, _React$Component);\n\n function MemoryRouter() {\n var _this;\n\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n _this = _React$Component.call.apply(_React$Component, [this].concat(args)) || this;\n _this.history = createMemoryHistory(_this.props);\n return _this;\n }\n\n var _proto = MemoryRouter.prototype;\n\n _proto.render = function render() {\n return /*#__PURE__*/index_js_eager_default().createElement(Router, {\n history: this.history,\n children: this.props.children\n });\n };\n\n return MemoryRouter;\n}((index_js_eager_default()).Component);\n\nif (false) {}\n\nvar Lifecycle = /*#__PURE__*/function (_React$Component) {\n (0,inheritsLoose/* default */.A)(Lifecycle, _React$Component);\n\n function Lifecycle() {\n return _React$Component.apply(this, arguments) || this;\n }\n\n var _proto = Lifecycle.prototype;\n\n _proto.componentDidMount = function componentDidMount() {\n if (this.props.onMount) this.props.onMount.call(this, this);\n };\n\n _proto.componentDidUpdate = function componentDidUpdate(prevProps) {\n if (this.props.onUpdate) this.props.onUpdate.call(this, this, prevProps);\n };\n\n _proto.componentWillUnmount = function componentWillUnmount() {\n if (this.props.onUnmount) this.props.onUnmount.call(this, this);\n };\n\n _proto.render = function render() {\n return null;\n };\n\n return Lifecycle;\n}((index_js_eager_default()).Component);\n\n/**\n * The public API for prompting the user before navigating away from a screen.\n */\n\nfunction Prompt(_ref) {\n var message = _ref.message,\n _ref$when = _ref.when,\n when = _ref$when === void 0 ? true : _ref$when;\n return /*#__PURE__*/index_js_eager_default().createElement(context.Consumer, null, function (context) {\n !context ? false ? 0 : invariant(false) : void 0;\n if (!when || context.staticContext) return null;\n var method = context.history.block;\n return /*#__PURE__*/index_js_eager_default().createElement(Lifecycle, {\n onMount: function onMount(self) {\n self.release = method(message);\n },\n onUpdate: function onUpdate(self, prevProps) {\n if (prevProps.message !== message) {\n self.release();\n self.release = method(message);\n }\n },\n onUnmount: function onUnmount(self) {\n self.release();\n },\n message: message\n });\n });\n}\n\nif (false) { var messageType; }\n\nvar cache = {};\nvar cacheLimit = 10000;\nvar cacheCount = 0;\n\nfunction compilePath(path) {\n if (cache[path]) return cache[path];\n var generator = path_to_regexp_default().compile(path);\n\n if (cacheCount < cacheLimit) {\n cache[path] = generator;\n cacheCount++;\n }\n\n return generator;\n}\n/**\n * Public API for generating a URL pathname from a path and parameters.\n */\n\n\nfunction generatePath(path, params) {\n if (path === void 0) {\n path = \"/\";\n }\n\n if (params === void 0) {\n params = {};\n }\n\n return path === \"/\" ? path : compilePath(path)(params, {\n pretty: true\n });\n}\n\n/**\n * The public API for navigating programmatically with a component.\n */\n\nfunction Redirect(_ref) {\n var computedMatch = _ref.computedMatch,\n to = _ref.to,\n _ref$push = _ref.push,\n push = _ref$push === void 0 ? false : _ref$push;\n return /*#__PURE__*/index_js_eager_default().createElement(context.Consumer, null, function (context) {\n !context ? false ? 0 : invariant(false) : void 0;\n var history = context.history,\n staticContext = context.staticContext;\n var method = push ? history.push : history.replace;\n var location = createLocation(computedMatch ? typeof to === \"string\" ? generatePath(to, computedMatch.params) : (0,esm_extends/* default */.A)({}, to, {\n pathname: generatePath(to.pathname, computedMatch.params)\n }) : to); // When rendering in a static context,\n // set the new location immediately.\n\n if (staticContext) {\n method(location);\n return null;\n }\n\n return /*#__PURE__*/index_js_eager_default().createElement(Lifecycle, {\n onMount: function onMount() {\n method(location);\n },\n onUpdate: function onUpdate(self, prevProps) {\n var prevLocation = createLocation(prevProps.to);\n\n if (!locationsAreEqual(prevLocation, (0,esm_extends/* default */.A)({}, location, {\n key: prevLocation.key\n }))) {\n method(location);\n }\n },\n to: to\n });\n });\n}\n\nif (false) {}\n\nvar cache$1 = {};\nvar cacheLimit$1 = 10000;\nvar cacheCount$1 = 0;\n\nfunction compilePath$1(path, options) {\n var cacheKey = \"\" + options.end + options.strict + options.sensitive;\n var pathCache = cache$1[cacheKey] || (cache$1[cacheKey] = {});\n if (pathCache[path]) return pathCache[path];\n var keys = [];\n var regexp = path_to_regexp_default()(path, keys, options);\n var result = {\n regexp: regexp,\n keys: keys\n };\n\n if (cacheCount$1 < cacheLimit$1) {\n pathCache[path] = result;\n cacheCount$1++;\n }\n\n return result;\n}\n/**\n * Public API for matching a URL pathname to a path.\n */\n\n\nfunction matchPath(pathname, options) {\n if (options === void 0) {\n options = {};\n }\n\n if (typeof options === \"string\" || Array.isArray(options)) {\n options = {\n path: options\n };\n }\n\n var _options = options,\n path = _options.path,\n _options$exact = _options.exact,\n exact = _options$exact === void 0 ? false : _options$exact,\n _options$strict = _options.strict,\n strict = _options$strict === void 0 ? false : _options$strict,\n _options$sensitive = _options.sensitive,\n sensitive = _options$sensitive === void 0 ? false : _options$sensitive;\n var paths = [].concat(path);\n return paths.reduce(function (matched, path) {\n if (!path && path !== \"\") return null;\n if (matched) return matched;\n\n var _compilePath = compilePath$1(path, {\n end: exact,\n strict: strict,\n sensitive: sensitive\n }),\n regexp = _compilePath.regexp,\n keys = _compilePath.keys;\n\n var match = regexp.exec(pathname);\n if (!match) return null;\n var url = match[0],\n values = match.slice(1);\n var isExact = pathname === url;\n if (exact && !isExact) return null;\n return {\n path: path,\n // the path used to match\n url: path === \"/\" && url === \"\" ? \"/\" : url,\n // the matched portion of the URL\n isExact: isExact,\n // whether or not we matched exactly\n params: keys.reduce(function (memo, key, index) {\n memo[key.name] = values[index];\n return memo;\n }, {})\n };\n }, null);\n}\n\nfunction isEmptyChildren(children) {\n return index_js_eager_default().Children.count(children) === 0;\n}\n\nfunction evalChildrenDev(children, props, path) {\n var value = children(props);\n false ? 0 : void 0;\n return value || null;\n}\n/**\n * The public API for matching a single path and rendering.\n */\n\n\nvar Route = /*#__PURE__*/function (_React$Component) {\n (0,inheritsLoose/* default */.A)(Route, _React$Component);\n\n function Route() {\n return _React$Component.apply(this, arguments) || this;\n }\n\n var _proto = Route.prototype;\n\n _proto.render = function render() {\n var _this = this;\n\n return /*#__PURE__*/index_js_eager_default().createElement(context.Consumer, null, function (context$1) {\n !context$1 ? false ? 0 : invariant(false) : void 0;\n var location = _this.props.location || context$1.location;\n var match = _this.props.computedMatch ? _this.props.computedMatch // already computed the match for us\n : _this.props.path ? matchPath(location.pathname, _this.props) : context$1.match;\n\n var props = (0,esm_extends/* default */.A)({}, context$1, {\n location: location,\n match: match\n });\n\n var _this$props = _this.props,\n children = _this$props.children,\n component = _this$props.component,\n render = _this$props.render; // Preact uses an empty array as children by\n // default, so use null if that's the case.\n\n if (Array.isArray(children) && isEmptyChildren(children)) {\n children = null;\n }\n\n return /*#__PURE__*/index_js_eager_default().createElement(context.Provider, {\n value: props\n }, props.match ? children ? typeof children === \"function\" ? false ? 0 : children(props) : children : component ? /*#__PURE__*/index_js_eager_default().createElement(component, props) : render ? render(props) : null : typeof children === \"function\" ? false ? 0 : children(props) : null);\n });\n };\n\n return Route;\n}((index_js_eager_default()).Component);\n\nif (false) {}\n\nfunction react_router_addLeadingSlash(path) {\n return path.charAt(0) === \"/\" ? path : \"/\" + path;\n}\n\nfunction addBasename(basename, location) {\n if (!basename) return location;\n return (0,esm_extends/* default */.A)({}, location, {\n pathname: react_router_addLeadingSlash(basename) + location.pathname\n });\n}\n\nfunction react_router_stripBasename(basename, location) {\n if (!basename) return location;\n var base = react_router_addLeadingSlash(basename);\n if (location.pathname.indexOf(base) !== 0) return location;\n return (0,esm_extends/* default */.A)({}, location, {\n pathname: location.pathname.substr(base.length)\n });\n}\n\nfunction createURL(location) {\n return typeof location === \"string\" ? location : createPath(location);\n}\n\nfunction staticHandler(methodName) {\n return function () {\n false ? 0 : invariant(false) ;\n };\n}\n\nfunction noop() {}\n/**\n * The public top-level API for a \"static\" , so-called because it\n * can't actually change the current location. Instead, it just records\n * location changes in a context object. Useful mainly in testing and\n * server-rendering scenarios.\n */\n\n\nvar StaticRouter = /*#__PURE__*/function (_React$Component) {\n (0,inheritsLoose/* default */.A)(StaticRouter, _React$Component);\n\n function StaticRouter() {\n var _this;\n\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n _this = _React$Component.call.apply(_React$Component, [this].concat(args)) || this;\n\n _this.handlePush = function (location) {\n return _this.navigateTo(location, \"PUSH\");\n };\n\n _this.handleReplace = function (location) {\n return _this.navigateTo(location, \"REPLACE\");\n };\n\n _this.handleListen = function () {\n return noop;\n };\n\n _this.handleBlock = function () {\n return noop;\n };\n\n return _this;\n }\n\n var _proto = StaticRouter.prototype;\n\n _proto.navigateTo = function navigateTo(location, action) {\n var _this$props = this.props,\n _this$props$basename = _this$props.basename,\n basename = _this$props$basename === void 0 ? \"\" : _this$props$basename,\n _this$props$context = _this$props.context,\n context = _this$props$context === void 0 ? {} : _this$props$context;\n context.action = action;\n context.location = addBasename(basename, createLocation(location));\n context.url = createURL(context.location);\n };\n\n _proto.render = function render() {\n var _this$props2 = this.props,\n _this$props2$basename = _this$props2.basename,\n basename = _this$props2$basename === void 0 ? \"\" : _this$props2$basename,\n _this$props2$context = _this$props2.context,\n context = _this$props2$context === void 0 ? {} : _this$props2$context,\n _this$props2$location = _this$props2.location,\n location = _this$props2$location === void 0 ? \"/\" : _this$props2$location,\n rest = (0,objectWithoutPropertiesLoose/* default */.A)(_this$props2, [\"basename\", \"context\", \"location\"]);\n\n var history = {\n createHref: function createHref(path) {\n return react_router_addLeadingSlash(basename + createURL(path));\n },\n action: \"POP\",\n location: react_router_stripBasename(basename, createLocation(location)),\n push: this.handlePush,\n replace: this.handleReplace,\n go: staticHandler(\"go\"),\n goBack: staticHandler(\"goBack\"),\n goForward: staticHandler(\"goForward\"),\n listen: this.handleListen,\n block: this.handleBlock\n };\n return /*#__PURE__*/index_js_eager_default().createElement(Router, (0,esm_extends/* default */.A)({}, rest, {\n history: history,\n staticContext: context\n }));\n };\n\n return StaticRouter;\n}((index_js_eager_default()).Component);\n\nif (false) {}\n\n/**\n * The public API for rendering the first that matches.\n */\n\nvar Switch = /*#__PURE__*/function (_React$Component) {\n (0,inheritsLoose/* default */.A)(Switch, _React$Component);\n\n function Switch() {\n return _React$Component.apply(this, arguments) || this;\n }\n\n var _proto = Switch.prototype;\n\n _proto.render = function render() {\n var _this = this;\n\n return /*#__PURE__*/index_js_eager_default().createElement(context.Consumer, null, function (context) {\n !context ? false ? 0 : invariant(false) : void 0;\n var location = _this.props.location || context.location;\n var element, match; // We use React.Children.forEach instead of React.Children.toArray().find()\n // here because toArray adds keys to all child elements and we do not want\n // to trigger an unmount/remount for two s that render the same\n // component at different URLs.\n\n index_js_eager_default().Children.forEach(_this.props.children, function (child) {\n if (match == null && /*#__PURE__*/index_js_eager_default().isValidElement(child)) {\n element = child;\n var path = child.props.path || child.props.from;\n match = path ? matchPath(location.pathname, (0,esm_extends/* default */.A)({}, child.props, {\n path: path\n })) : context.match;\n }\n });\n return match ? /*#__PURE__*/index_js_eager_default().cloneElement(element, {\n location: location,\n computedMatch: match\n }) : null;\n });\n };\n\n return Switch;\n}((index_js_eager_default()).Component);\n\nif (false) {}\n\n/**\n * A public higher-order component to access the imperative API\n */\n\nfunction withRouter(Component) {\n var displayName = \"withRouter(\" + (Component.displayName || Component.name) + \")\";\n\n var C = function C(props) {\n var wrappedComponentRef = props.wrappedComponentRef,\n remainingProps = (0,objectWithoutPropertiesLoose/* default */.A)(props, [\"wrappedComponentRef\"]);\n\n return /*#__PURE__*/index_js_eager_default().createElement(context.Consumer, null, function (context) {\n !context ? false ? 0 : invariant(false) : void 0;\n return /*#__PURE__*/index_js_eager_default().createElement(Component, (0,esm_extends/* default */.A)({}, remainingProps, context, {\n ref: wrappedComponentRef\n }));\n });\n };\n\n C.displayName = displayName;\n C.WrappedComponent = Component;\n\n if (false) {}\n\n return hoist_non_react_statics_cjs_default()(C, Component);\n}\n\nvar useContext = (index_js_eager_default()).useContext;\nfunction useHistory() {\n if (false) {}\n\n return useContext(historyContext);\n}\nfunction useLocation() {\n if (false) {}\n\n return useContext(context).location;\n}\nfunction useParams() {\n if (false) {}\n\n var match = useContext(context).match;\n return match ? match.params : {};\n}\nfunction useRouteMatch(path) {\n if (false) {}\n\n var location = useLocation();\n var match = useContext(context).match;\n return path ? matchPath(location.pathname, path) : match;\n}\n\nif (false) { var secondaryBuildName, initialBuildName, buildNames, key, global$1; }\n\n\n//# sourceMappingURL=react-router.js.map\n\n;// ./node_modules/react-router-dom/esm/react-router-dom.js\n\n\n\n\n\n\n\n\n\n\n\n/**\n * The public API for a that uses HTML5 history.\n */\n\nvar BrowserRouter = /*#__PURE__*/function (_React$Component) {\n (0,inheritsLoose/* default */.A)(BrowserRouter, _React$Component);\n\n function BrowserRouter() {\n var _this;\n\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n _this = _React$Component.call.apply(_React$Component, [this].concat(args)) || this;\n _this.history = createBrowserHistory(_this.props);\n return _this;\n }\n\n var _proto = BrowserRouter.prototype;\n\n _proto.render = function render() {\n return /*#__PURE__*/index_js_eager_default().createElement(Router, {\n history: this.history,\n children: this.props.children\n });\n };\n\n return BrowserRouter;\n}((index_js_eager_default()).Component);\n\nif (false) {}\n\n/**\n * The public API for a that uses window.location.hash.\n */\n\nvar HashRouter = /*#__PURE__*/function (_React$Component) {\n (0,inheritsLoose/* default */.A)(HashRouter, _React$Component);\n\n function HashRouter() {\n var _this;\n\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n _this = _React$Component.call.apply(_React$Component, [this].concat(args)) || this;\n _this.history = createHashHistory(_this.props);\n return _this;\n }\n\n var _proto = HashRouter.prototype;\n\n _proto.render = function render() {\n return /*#__PURE__*/index_js_eager_default().createElement(Router, {\n history: this.history,\n children: this.props.children\n });\n };\n\n return HashRouter;\n}((index_js_eager_default()).Component);\n\nif (false) {}\n\nvar resolveToLocation = function resolveToLocation(to, currentLocation) {\n return typeof to === \"function\" ? to(currentLocation) : to;\n};\nvar normalizeToLocation = function normalizeToLocation(to, currentLocation) {\n return typeof to === \"string\" ? createLocation(to, null, null, currentLocation) : to;\n};\n\nvar forwardRefShim = function forwardRefShim(C) {\n return C;\n};\n\nvar forwardRef = (index_js_eager_default()).forwardRef;\n\nif (typeof forwardRef === \"undefined\") {\n forwardRef = forwardRefShim;\n}\n\nfunction isModifiedEvent(event) {\n return !!(event.metaKey || event.altKey || event.ctrlKey || event.shiftKey);\n}\n\nvar LinkAnchor = forwardRef(function (_ref, forwardedRef) {\n var innerRef = _ref.innerRef,\n navigate = _ref.navigate,\n _onClick = _ref.onClick,\n rest = (0,objectWithoutPropertiesLoose/* default */.A)(_ref, [\"innerRef\", \"navigate\", \"onClick\"]);\n\n var target = rest.target;\n\n var props = (0,esm_extends/* default */.A)({}, rest, {\n onClick: function onClick(event) {\n try {\n if (_onClick) _onClick(event);\n } catch (ex) {\n event.preventDefault();\n throw ex;\n }\n\n if (!event.defaultPrevented && // onClick prevented default\n event.button === 0 && ( // ignore everything but left clicks\n !target || target === \"_self\") && // let browser handle \"target=_blank\" etc.\n !isModifiedEvent(event) // ignore clicks with modifier keys\n ) {\n event.preventDefault();\n navigate();\n }\n }\n }); // React 15 compat\n\n\n if (forwardRefShim !== forwardRef) {\n props.ref = forwardedRef || innerRef;\n } else {\n props.ref = innerRef;\n }\n /* eslint-disable-next-line jsx-a11y/anchor-has-content */\n\n\n return /*#__PURE__*/index_js_eager_default().createElement(\"a\", props);\n});\n\nif (false) {}\n/**\n * The public API for rendering a history-aware .\n */\n\n\nvar Link = forwardRef(function (_ref2, forwardedRef) {\n var _ref2$component = _ref2.component,\n component = _ref2$component === void 0 ? LinkAnchor : _ref2$component,\n replace = _ref2.replace,\n to = _ref2.to,\n innerRef = _ref2.innerRef,\n rest = (0,objectWithoutPropertiesLoose/* default */.A)(_ref2, [\"component\", \"replace\", \"to\", \"innerRef\"]);\n\n return /*#__PURE__*/index_js_eager_default().createElement(context.Consumer, null, function (context) {\n !context ? false ? 0 : invariant(false) : void 0;\n var history = context.history;\n var location = normalizeToLocation(resolveToLocation(to, context.location), context.location);\n var href = location ? history.createHref(location) : \"\";\n\n var props = (0,esm_extends/* default */.A)({}, rest, {\n href: href,\n navigate: function navigate() {\n var location = resolveToLocation(to, context.location);\n var isDuplicateNavigation = createPath(context.location) === createPath(normalizeToLocation(location));\n var method = replace || isDuplicateNavigation ? history.replace : history.push;\n method(location);\n }\n }); // React 15 compat\n\n\n if (forwardRefShim !== forwardRef) {\n props.ref = forwardedRef || innerRef;\n } else {\n props.innerRef = innerRef;\n }\n\n return /*#__PURE__*/index_js_eager_default().createElement(component, props);\n });\n});\n\nif (false) { var refType, toType; }\n\nvar forwardRefShim$1 = function forwardRefShim(C) {\n return C;\n};\n\nvar forwardRef$1 = (index_js_eager_default()).forwardRef;\n\nif (typeof forwardRef$1 === \"undefined\") {\n forwardRef$1 = forwardRefShim$1;\n}\n\nfunction joinClassnames() {\n for (var _len = arguments.length, classnames = new Array(_len), _key = 0; _key < _len; _key++) {\n classnames[_key] = arguments[_key];\n }\n\n return classnames.filter(function (i) {\n return i;\n }).join(\" \");\n}\n/**\n * A wrapper that knows if it's \"active\" or not.\n */\n\n\nvar NavLink = forwardRef$1(function (_ref, forwardedRef) {\n var _ref$ariaCurrent = _ref[\"aria-current\"],\n ariaCurrent = _ref$ariaCurrent === void 0 ? \"page\" : _ref$ariaCurrent,\n _ref$activeClassName = _ref.activeClassName,\n activeClassName = _ref$activeClassName === void 0 ? \"active\" : _ref$activeClassName,\n activeStyle = _ref.activeStyle,\n classNameProp = _ref.className,\n exact = _ref.exact,\n isActiveProp = _ref.isActive,\n locationProp = _ref.location,\n sensitive = _ref.sensitive,\n strict = _ref.strict,\n styleProp = _ref.style,\n to = _ref.to,\n innerRef = _ref.innerRef,\n rest = (0,objectWithoutPropertiesLoose/* default */.A)(_ref, [\"aria-current\", \"activeClassName\", \"activeStyle\", \"className\", \"exact\", \"isActive\", \"location\", \"sensitive\", \"strict\", \"style\", \"to\", \"innerRef\"]);\n\n return /*#__PURE__*/index_js_eager_default().createElement(context.Consumer, null, function (context) {\n !context ? false ? 0 : invariant(false) : void 0;\n var currentLocation = locationProp || context.location;\n var toLocation = normalizeToLocation(resolveToLocation(to, currentLocation), currentLocation);\n var path = toLocation.pathname; // Regex taken from: https://github.com/pillarjs/path-to-regexp/blob/master/index.js#L202\n\n var escapedPath = path && path.replace(/([.+*?=^!:${}()[\\]|/\\\\])/g, \"\\\\$1\");\n var match = escapedPath ? matchPath(currentLocation.pathname, {\n path: escapedPath,\n exact: exact,\n sensitive: sensitive,\n strict: strict\n }) : null;\n var isActive = !!(isActiveProp ? isActiveProp(match, currentLocation) : match);\n var className = typeof classNameProp === \"function\" ? classNameProp(isActive) : classNameProp;\n var style = typeof styleProp === \"function\" ? styleProp(isActive) : styleProp;\n\n if (isActive) {\n className = joinClassnames(className, activeClassName);\n style = (0,esm_extends/* default */.A)({}, style, activeStyle);\n }\n\n var props = (0,esm_extends/* default */.A)({\n \"aria-current\": isActive && ariaCurrent || null,\n className: className,\n style: style,\n to: toLocation\n }, rest); // React 15 compat\n\n\n if (forwardRefShim$1 !== forwardRef$1) {\n props.ref = forwardedRef || innerRef;\n } else {\n props.innerRef = innerRef;\n }\n\n return /*#__PURE__*/index_js_eager_default().createElement(Link, props);\n });\n});\n\nif (false) { var ariaCurrentType; }\n\n\n//# sourceMappingURL=react-router-dom.js.map\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMzA4NzYuanMiLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUMxRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUNuQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUNkQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7Ozs7Ozs7Ozs7OztBQ3Q1QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFXQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFhQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFPQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFPQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUEyQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFXQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFXQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFLQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFxQkE7QUFDQTtBQUNBOzs7QUNyN0JBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBYUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBWUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQWNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFnQkE7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vaXRnLW5leHRnZW4tZnJvbnRlbmQvLi9ub2RlX21vZHVsZXMvcmVzb2x2ZS1wYXRobmFtZS9lc20vcmVzb2x2ZS1wYXRobmFtZS5qcz85NDIxIiwid2VicGFjazovL2l0Zy1uZXh0Z2VuLWZyb250ZW5kLy4vbm9kZV9tb2R1bGVzL3ZhbHVlLWVxdWFsL2VzbS92YWx1ZS1lcXVhbC5qcz9jNjE5Iiwid2VicGFjazovL2l0Zy1uZXh0Z2VuLWZyb250ZW5kLy4vbm9kZV9tb2R1bGVzL3RpbnktaW52YXJpYW50L2Rpc3QvZXNtL3RpbnktaW52YXJpYW50LmpzPzU0MWUiLCJ3ZWJwYWNrOi8vaXRnLW5leHRnZW4tZnJvbnRlbmQvLi9ub2RlX21vZHVsZXMvaGlzdG9yeS9lc20vaGlzdG9yeS5qcz8yZTEwIiwid2VicGFjazovL2l0Zy1uZXh0Z2VuLWZyb250ZW5kLy4vbm9kZV9tb2R1bGVzL3JlYWN0LXJvdXRlci9lc20vcmVhY3Qtcm91dGVyLmpzPzRmMmUiLCJ3ZWJwYWNrOi8vaXRnLW5leHRnZW4tZnJvbnRlbmQvLi9ub2RlX21vZHVsZXMvcmVhY3Qtcm91dGVyLWRvbS9lc20vcmVhY3Qtcm91dGVyLWRvbS5qcz9lNzkyIl0sInNvdXJjZXNDb250ZW50IjpbImZ1bmN0aW9uIGlzQWJzb2x1dGUocGF0aG5hbWUpIHtcbiAgcmV0dXJuIHBhdGhuYW1lLmNoYXJBdCgwKSA9PT0gJy8nO1xufVxuXG4vLyBBYm91dCAxLjV4IGZhc3RlciB0aGFuIHRoZSB0d28tYXJnIHZlcnNpb24gb2YgQXJyYXkjc3BsaWNlKClcbmZ1bmN0aW9uIHNwbGljZU9uZShsaXN0LCBpbmRleCkge1xuICBmb3IgKHZhciBpID0gaW5kZXgsIGsgPSBpICsgMSwgbiA9IGxpc3QubGVuZ3RoOyBrIDwgbjsgaSArPSAxLCBrICs9IDEpIHtcbiAgICBsaXN0W2ldID0gbGlzdFtrXTtcbiAgfVxuXG4gIGxpc3QucG9wKCk7XG59XG5cbi8vIFRoaXMgaW1wbGVtZW50YXRpb24gaXMgYmFzZWQgaGVhdmlseSBvbiBub2RlJ3MgdXJsLnBhcnNlXG5mdW5jdGlvbiByZXNvbHZlUGF0aG5hbWUodG8sIGZyb20pIHtcbiAgaWYgKGZyb20gPT09IHVuZGVmaW5lZCkgZnJvbSA9ICcnO1xuXG4gIHZhciB0b1BhcnRzID0gKHRvICYmIHRvLnNwbGl0KCcvJykpIHx8IFtdO1xuICB2YXIgZnJvbVBhcnRzID0gKGZyb20gJiYgZnJvbS5zcGxpdCgnLycpKSB8fCBbXTtcblxuICB2YXIgaXNUb0FicyA9IHRvICYmIGlzQWJzb2x1dGUodG8pO1xuICB2YXIgaXNGcm9tQWJzID0gZnJvbSAmJiBpc0Fic29sdXRlKGZyb20pO1xuICB2YXIgbXVzdEVuZEFicyA9IGlzVG9BYnMgfHwgaXNGcm9tQWJzO1xuXG4gIGlmICh0byAmJiBpc0Fic29sdXRlKHRvKSkge1xuICAgIC8vIHRvIGlzIGFic29sdXRlXG4gICAgZnJvbVBhcnRzID0gdG9QYXJ0cztcbiAgfSBlbHNlIGlmICh0b1BhcnRzLmxlbmd0aCkge1xuICAgIC8vIHRvIGlzIHJlbGF0aXZlLCBkcm9wIHRoZSBmaWxlbmFtZVxuICAgIGZyb21QYXJ0cy5wb3AoKTtcbiAgICBmcm9tUGFydHMgPSBmcm9tUGFydHMuY29uY2F0KHRvUGFydHMpO1xuICB9XG5cbiAgaWYgKCFmcm9tUGFydHMubGVuZ3RoKSByZXR1cm4gJy8nO1xuXG4gIHZhciBoYXNUcmFpbGluZ1NsYXNoO1xuICBpZiAoZnJvbVBhcnRzLmxlbmd0aCkge1xuICAgIHZhciBsYXN0ID0gZnJvbVBhcnRzW2Zyb21QYXJ0cy5sZW5ndGggLSAxXTtcbiAgICBoYXNUcmFpbGluZ1NsYXNoID0gbGFzdCA9PT0gJy4nIHx8IGxhc3QgPT09ICcuLicgfHwgbGFzdCA9PT0gJyc7XG4gIH0gZWxzZSB7XG4gICAgaGFzVHJhaWxpbmdTbGFzaCA9IGZhbHNlO1xuICB9XG5cbiAgdmFyIHVwID0gMDtcbiAgZm9yICh2YXIgaSA9IGZyb21QYXJ0cy5sZW5ndGg7IGkgPj0gMDsgaS0tKSB7XG4gICAgdmFyIHBhcnQgPSBmcm9tUGFydHNbaV07XG5cbiAgICBpZiAocGFydCA9PT0gJy4nKSB7XG4gICAgICBzcGxpY2VPbmUoZnJvbVBhcnRzLCBpKTtcbiAgICB9IGVsc2UgaWYgKHBhcnQgPT09ICcuLicpIHtcbiAgICAgIHNwbGljZU9uZShmcm9tUGFydHMsIGkpO1xuICAgICAgdXArKztcbiAgICB9IGVsc2UgaWYgKHVwKSB7XG4gICAgICBzcGxpY2VPbmUoZnJvbVBhcnRzLCBpKTtcbiAgICAgIHVwLS07XG4gICAgfVxuICB9XG5cbiAgaWYgKCFtdXN0RW5kQWJzKSBmb3IgKDsgdXAtLTsgdXApIGZyb21QYXJ0cy51bnNoaWZ0KCcuLicpO1xuXG4gIGlmIChcbiAgICBtdXN0RW5kQWJzICYmXG4gICAgZnJvbVBhcnRzWzBdICE9PSAnJyAmJlxuICAgICghZnJvbVBhcnRzWzBdIHx8ICFpc0Fic29sdXRlKGZyb21QYXJ0c1swXSkpXG4gIClcbiAgICBmcm9tUGFydHMudW5zaGlmdCgnJyk7XG5cbiAgdmFyIHJlc3VsdCA9IGZyb21QYXJ0cy5qb2luKCcvJyk7XG5cbiAgaWYgKGhhc1RyYWlsaW5nU2xhc2ggJiYgcmVzdWx0LnN1YnN0cigtMSkgIT09ICcvJykgcmVzdWx0ICs9ICcvJztcblxuICByZXR1cm4gcmVzdWx0O1xufVxuXG5leHBvcnQgZGVmYXVsdCByZXNvbHZlUGF0aG5hbWU7XG4iLCJmdW5jdGlvbiB2YWx1ZU9mKG9iaikge1xuICByZXR1cm4gb2JqLnZhbHVlT2YgPyBvYmoudmFsdWVPZigpIDogT2JqZWN0LnByb3RvdHlwZS52YWx1ZU9mLmNhbGwob2JqKTtcbn1cblxuZnVuY3Rpb24gdmFsdWVFcXVhbChhLCBiKSB7XG4gIC8vIFRlc3QgZm9yIHN0cmljdCBlcXVhbGl0eSBmaXJzdC5cbiAgaWYgKGEgPT09IGIpIHJldHVybiB0cnVlO1xuXG4gIC8vIE90aGVyd2lzZSwgaWYgZWl0aGVyIG9mIHRoZW0gPT0gbnVsbCB0aGV5IGFyZSBub3QgZXF1YWwuXG4gIGlmIChhID09IG51bGwgfHwgYiA9PSBudWxsKSByZXR1cm4gZmFsc2U7XG5cbiAgaWYgKEFycmF5LmlzQXJyYXkoYSkpIHtcbiAgICByZXR1cm4gKFxuICAgICAgQXJyYXkuaXNBcnJheShiKSAmJlxuICAgICAgYS5sZW5ndGggPT09IGIubGVuZ3RoICYmXG4gICAgICBhLmV2ZXJ5KGZ1bmN0aW9uKGl0ZW0sIGluZGV4KSB7XG4gICAgICAgIHJldHVybiB2YWx1ZUVxdWFsKGl0ZW0sIGJbaW5kZXhdKTtcbiAgICAgIH0pXG4gICAgKTtcbiAgfVxuXG4gIGlmICh0eXBlb2YgYSA9PT0gJ29iamVjdCcgfHwgdHlwZW9mIGIgPT09ICdvYmplY3QnKSB7XG4gICAgdmFyIGFWYWx1ZSA9IHZhbHVlT2YoYSk7XG4gICAgdmFyIGJWYWx1ZSA9IHZhbHVlT2YoYik7XG5cbiAgICBpZiAoYVZhbHVlICE9PSBhIHx8IGJWYWx1ZSAhPT0gYikgcmV0dXJuIHZhbHVlRXF1YWwoYVZhbHVlLCBiVmFsdWUpO1xuXG4gICAgcmV0dXJuIE9iamVjdC5rZXlzKE9iamVjdC5hc3NpZ24oe30sIGEsIGIpKS5ldmVyeShmdW5jdGlvbihrZXkpIHtcbiAgICAgIHJldHVybiB2YWx1ZUVxdWFsKGFba2V5XSwgYltrZXldKTtcbiAgICB9KTtcbiAgfVxuXG4gIHJldHVybiBmYWxzZTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgdmFsdWVFcXVhbDtcbiIsInZhciBpc1Byb2R1Y3Rpb24gPSBwcm9jZXNzLmVudi5OT0RFX0VOViA9PT0gJ3Byb2R1Y3Rpb24nO1xudmFyIHByZWZpeCA9ICdJbnZhcmlhbnQgZmFpbGVkJztcbmZ1bmN0aW9uIGludmFyaWFudChjb25kaXRpb24sIG1lc3NhZ2UpIHtcbiAgICBpZiAoY29uZGl0aW9uKSB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaWYgKGlzUHJvZHVjdGlvbikge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IocHJlZml4KTtcbiAgICB9XG4gICAgdmFyIHByb3ZpZGVkID0gdHlwZW9mIG1lc3NhZ2UgPT09ICdmdW5jdGlvbicgPyBtZXNzYWdlKCkgOiBtZXNzYWdlO1xuICAgIHZhciB2YWx1ZSA9IHByb3ZpZGVkID8gXCJcIi5jb25jYXQocHJlZml4LCBcIjogXCIpLmNvbmNhdChwcm92aWRlZCkgOiBwcmVmaXg7XG4gICAgdGhyb3cgbmV3IEVycm9yKHZhbHVlKTtcbn1cblxuZXhwb3J0IHsgaW52YXJpYW50IGFzIGRlZmF1bHQgfTtcbiIsImltcG9ydCBfZXh0ZW5kcyBmcm9tICdAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9leHRlbmRzJztcbmltcG9ydCByZXNvbHZlUGF0aG5hbWUgZnJvbSAncmVzb2x2ZS1wYXRobmFtZSc7XG5pbXBvcnQgdmFsdWVFcXVhbCBmcm9tICd2YWx1ZS1lcXVhbCc7XG5pbXBvcnQgd2FybmluZyBmcm9tICd0aW55LXdhcm5pbmcnO1xuaW1wb3J0IGludmFyaWFudCBmcm9tICd0aW55LWludmFyaWFudCc7XG5cbmZ1bmN0aW9uIGFkZExlYWRpbmdTbGFzaChwYXRoKSB7XG4gIHJldHVybiBwYXRoLmNoYXJBdCgwKSA9PT0gJy8nID8gcGF0aCA6ICcvJyArIHBhdGg7XG59XG5mdW5jdGlvbiBzdHJpcExlYWRpbmdTbGFzaChwYXRoKSB7XG4gIHJldHVybiBwYXRoLmNoYXJBdCgwKSA9PT0gJy8nID8gcGF0aC5zdWJzdHIoMSkgOiBwYXRoO1xufVxuZnVuY3Rpb24gaGFzQmFzZW5hbWUocGF0aCwgcHJlZml4KSB7XG4gIHJldHVybiBwYXRoLnRvTG93ZXJDYXNlKCkuaW5kZXhPZihwcmVmaXgudG9Mb3dlckNhc2UoKSkgPT09IDAgJiYgJy8/IycuaW5kZXhPZihwYXRoLmNoYXJBdChwcmVmaXgubGVuZ3RoKSkgIT09IC0xO1xufVxuZnVuY3Rpb24gc3RyaXBCYXNlbmFtZShwYXRoLCBwcmVmaXgpIHtcbiAgcmV0dXJuIGhhc0Jhc2VuYW1lKHBhdGgsIHByZWZpeCkgPyBwYXRoLnN1YnN0cihwcmVmaXgubGVuZ3RoKSA6IHBhdGg7XG59XG5mdW5jdGlvbiBzdHJpcFRyYWlsaW5nU2xhc2gocGF0aCkge1xuICByZXR1cm4gcGF0aC5jaGFyQXQocGF0aC5sZW5ndGggLSAxKSA9PT0gJy8nID8gcGF0aC5zbGljZSgwLCAtMSkgOiBwYXRoO1xufVxuZnVuY3Rpb24gcGFyc2VQYXRoKHBhdGgpIHtcbiAgdmFyIHBhdGhuYW1lID0gcGF0aCB8fCAnLyc7XG4gIHZhciBzZWFyY2ggPSAnJztcbiAgdmFyIGhhc2ggPSAnJztcbiAgdmFyIGhhc2hJbmRleCA9IHBhdGhuYW1lLmluZGV4T2YoJyMnKTtcblxuICBpZiAoaGFzaEluZGV4ICE9PSAtMSkge1xuICAgIGhhc2ggPSBwYXRobmFtZS5zdWJzdHIoaGFzaEluZGV4KTtcbiAgICBwYXRobmFtZSA9IHBhdGhuYW1lLnN1YnN0cigwLCBoYXNoSW5kZXgpO1xuICB9XG5cbiAgdmFyIHNlYXJjaEluZGV4ID0gcGF0aG5hbWUuaW5kZXhPZignPycpO1xuXG4gIGlmIChzZWFyY2hJbmRleCAhPT0gLTEpIHtcbiAgICBzZWFyY2ggPSBwYXRobmFtZS5zdWJzdHIoc2VhcmNoSW5kZXgpO1xuICAgIHBhdGhuYW1lID0gcGF0aG5hbWUuc3Vic3RyKDAsIHNlYXJjaEluZGV4KTtcbiAgfVxuXG4gIHJldHVybiB7XG4gICAgcGF0aG5hbWU6IHBhdGhuYW1lLFxuICAgIHNlYXJjaDogc2VhcmNoID09PSAnPycgPyAnJyA6IHNlYXJjaCxcbiAgICBoYXNoOiBoYXNoID09PSAnIycgPyAnJyA6IGhhc2hcbiAgfTtcbn1cbmZ1bmN0aW9uIGNyZWF0ZVBhdGgobG9jYXRpb24pIHtcbiAgdmFyIHBhdGhuYW1lID0gbG9jYXRpb24ucGF0aG5hbWUsXG4gICAgICBzZWFyY2ggPSBsb2NhdGlvbi5zZWFyY2gsXG4gICAgICBoYXNoID0gbG9jYXRpb24uaGFzaDtcbiAgdmFyIHBhdGggPSBwYXRobmFtZSB8fCAnLyc7XG4gIGlmIChzZWFyY2ggJiYgc2VhcmNoICE9PSAnPycpIHBhdGggKz0gc2VhcmNoLmNoYXJBdCgwKSA9PT0gJz8nID8gc2VhcmNoIDogXCI/XCIgKyBzZWFyY2g7XG4gIGlmIChoYXNoICYmIGhhc2ggIT09ICcjJykgcGF0aCArPSBoYXNoLmNoYXJBdCgwKSA9PT0gJyMnID8gaGFzaCA6IFwiI1wiICsgaGFzaDtcbiAgcmV0dXJuIHBhdGg7XG59XG5cbmZ1bmN0aW9uIGNyZWF0ZUxvY2F0aW9uKHBhdGgsIHN0YXRlLCBrZXksIGN1cnJlbnRMb2NhdGlvbikge1xuICB2YXIgbG9jYXRpb247XG5cbiAgaWYgKHR5cGVvZiBwYXRoID09PSAnc3RyaW5nJykge1xuICAgIC8vIFR3by1hcmcgZm9ybTogcHVzaChwYXRoLCBzdGF0ZSlcbiAgICBsb2NhdGlvbiA9IHBhcnNlUGF0aChwYXRoKTtcbiAgICBsb2NhdGlvbi5zdGF0ZSA9IHN0YXRlO1xuICB9IGVsc2Uge1xuICAgIC8vIE9uZS1hcmcgZm9ybTogcHVzaChsb2NhdGlvbilcbiAgICBsb2NhdGlvbiA9IF9leHRlbmRzKHt9LCBwYXRoKTtcbiAgICBpZiAobG9jYXRpb24ucGF0aG5hbWUgPT09IHVuZGVmaW5lZCkgbG9jYXRpb24ucGF0aG5hbWUgPSAnJztcblxuICAgIGlmIChsb2NhdGlvbi5zZWFyY2gpIHtcbiAgICAgIGlmIChsb2NhdGlvbi5zZWFyY2guY2hhckF0KDApICE9PSAnPycpIGxvY2F0aW9uLnNlYXJjaCA9ICc/JyArIGxvY2F0aW9uLnNlYXJjaDtcbiAgICB9IGVsc2Uge1xuICAgICAgbG9jYXRpb24uc2VhcmNoID0gJyc7XG4gICAgfVxuXG4gICAgaWYgKGxvY2F0aW9uLmhhc2gpIHtcbiAgICAgIGlmIChsb2NhdGlvbi5oYXNoLmNoYXJBdCgwKSAhPT0gJyMnKSBsb2NhdGlvbi5oYXNoID0gJyMnICsgbG9jYXRpb24uaGFzaDtcbiAgICB9IGVsc2Uge1xuICAgICAgbG9jYXRpb24uaGFzaCA9ICcnO1xuICAgIH1cblxuICAgIGlmIChzdGF0ZSAhPT0gdW5kZWZpbmVkICYmIGxvY2F0aW9uLnN0YXRlID09PSB1bmRlZmluZWQpIGxvY2F0aW9uLnN0YXRlID0gc3RhdGU7XG4gIH1cblxuICB0cnkge1xuICAgIGxvY2F0aW9uLnBhdGhuYW1lID0gZGVjb2RlVVJJKGxvY2F0aW9uLnBhdGhuYW1lKTtcbiAgfSBjYXRjaCAoZSkge1xuICAgIGlmIChlIGluc3RhbmNlb2YgVVJJRXJyb3IpIHtcbiAgICAgIHRocm93IG5ldyBVUklFcnJvcignUGF0aG5hbWUgXCInICsgbG9jYXRpb24ucGF0aG5hbWUgKyAnXCIgY291bGQgbm90IGJlIGRlY29kZWQuICcgKyAnVGhpcyBpcyBsaWtlbHkgY2F1c2VkIGJ5IGFuIGludmFsaWQgcGVyY2VudC1lbmNvZGluZy4nKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhyb3cgZTtcbiAgICB9XG4gIH1cblxuICBpZiAoa2V5KSBsb2NhdGlvbi5rZXkgPSBrZXk7XG5cbiAgaWYgKGN1cnJlbnRMb2NhdGlvbikge1xuICAgIC8vIFJlc29sdmUgaW5jb21wbGV0ZS9yZWxhdGl2ZSBwYXRobmFtZSByZWxhdGl2ZSB0byBjdXJyZW50IGxvY2F0aW9uLlxuICAgIGlmICghbG9jYXRpb24ucGF0aG5hbWUpIHtcbiAgICAgIGxvY2F0aW9uLnBhdGhuYW1lID0gY3VycmVudExvY2F0aW9uLnBhdGhuYW1lO1xuICAgIH0gZWxzZSBpZiAobG9jYXRpb24ucGF0aG5hbWUuY2hhckF0KDApICE9PSAnLycpIHtcbiAgICAgIGxvY2F0aW9uLnBhdGhuYW1lID0gcmVzb2x2ZVBhdGhuYW1lKGxvY2F0aW9uLnBhdGhuYW1lLCBjdXJyZW50TG9jYXRpb24ucGF0aG5hbWUpO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICAvLyBXaGVuIHRoZXJlIGlzIG5vIHByaW9yIGxvY2F0aW9uIGFuZCBwYXRobmFtZSBpcyBlbXB0eSwgc2V0IGl0IHRvIC9cbiAgICBpZiAoIWxvY2F0aW9uLnBhdGhuYW1lKSB7XG4gICAgICBsb2NhdGlvbi5wYXRobmFtZSA9ICcvJztcbiAgICB9XG4gIH1cblxuICByZXR1cm4gbG9jYXRpb247XG59XG5mdW5jdGlvbiBsb2NhdGlvbnNBcmVFcXVhbChhLCBiKSB7XG4gIHJldHVybiBhLnBhdGhuYW1lID09PSBiLnBhdGhuYW1lICYmIGEuc2VhcmNoID09PSBiLnNlYXJjaCAmJiBhLmhhc2ggPT09IGIuaGFzaCAmJiBhLmtleSA9PT0gYi5rZXkgJiYgdmFsdWVFcXVhbChhLnN0YXRlLCBiLnN0YXRlKTtcbn1cblxuZnVuY3Rpb24gY3JlYXRlVHJhbnNpdGlvbk1hbmFnZXIoKSB7XG4gIHZhciBwcm9tcHQgPSBudWxsO1xuXG4gIGZ1bmN0aW9uIHNldFByb21wdChuZXh0UHJvbXB0KSB7XG4gICAgcHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiID8gd2FybmluZyhwcm9tcHQgPT0gbnVsbCwgJ0EgaGlzdG9yeSBzdXBwb3J0cyBvbmx5IG9uZSBwcm9tcHQgYXQgYSB0aW1lJykgOiB2b2lkIDA7XG4gICAgcHJvbXB0ID0gbmV4dFByb21wdDtcbiAgICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgICAgaWYgKHByb21wdCA9PT0gbmV4dFByb21wdCkgcHJvbXB0ID0gbnVsbDtcbiAgICB9O1xuICB9XG5cbiAgZnVuY3Rpb24gY29uZmlybVRyYW5zaXRpb25Ubyhsb2NhdGlvbiwgYWN0aW9uLCBnZXRVc2VyQ29uZmlybWF0aW9uLCBjYWxsYmFjaykge1xuICAgIC8vIFRPRE86IElmIGFub3RoZXIgdHJhbnNpdGlvbiBzdGFydHMgd2hpbGUgd2UncmUgc3RpbGwgY29uZmlybWluZ1xuICAgIC8vIHRoZSBwcmV2aW91cyBvbmUsIHdlIG1heSBlbmQgdXAgaW4gYSB3ZWlyZCBzdGF0ZS4gRmlndXJlIG91dCB0aGVcbiAgICAvLyBiZXN0IHdheSB0byBoYW5kbGUgdGhpcy5cbiAgICBpZiAocHJvbXB0ICE9IG51bGwpIHtcbiAgICAgIHZhciByZXN1bHQgPSB0eXBlb2YgcHJvbXB0ID09PSAnZnVuY3Rpb24nID8gcHJvbXB0KGxvY2F0aW9uLCBhY3Rpb24pIDogcHJvbXB0O1xuXG4gICAgICBpZiAodHlwZW9mIHJlc3VsdCA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgaWYgKHR5cGVvZiBnZXRVc2VyQ29uZmlybWF0aW9uID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgZ2V0VXNlckNvbmZpcm1hdGlvbihyZXN1bHQsIGNhbGxiYWNrKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIgPyB3YXJuaW5nKGZhbHNlLCAnQSBoaXN0b3J5IG5lZWRzIGEgZ2V0VXNlckNvbmZpcm1hdGlvbiBmdW5jdGlvbiBpbiBvcmRlciB0byB1c2UgYSBwcm9tcHQgbWVzc2FnZScpIDogdm9pZCAwO1xuICAgICAgICAgIGNhbGxiYWNrKHRydWUpO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBSZXR1cm4gZmFsc2UgZnJvbSBhIHRyYW5zaXRpb24gaG9vayB0byBjYW5jZWwgdGhlIHRyYW5zaXRpb24uXG4gICAgICAgIGNhbGxiYWNrKHJlc3VsdCAhPT0gZmFsc2UpO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBjYWxsYmFjayh0cnVlKTtcbiAgICB9XG4gIH1cblxuICB2YXIgbGlzdGVuZXJzID0gW107XG5cbiAgZnVuY3Rpb24gYXBwZW5kTGlzdGVuZXIoZm4pIHtcbiAgICB2YXIgaXNBY3RpdmUgPSB0cnVlO1xuXG4gICAgZnVuY3Rpb24gbGlzdGVuZXIoKSB7XG4gICAgICBpZiAoaXNBY3RpdmUpIGZuLmFwcGx5KHZvaWQgMCwgYXJndW1lbnRzKTtcbiAgICB9XG5cbiAgICBsaXN0ZW5lcnMucHVzaChsaXN0ZW5lcik7XG4gICAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICAgIGlzQWN0aXZlID0gZmFsc2U7XG4gICAgICBsaXN0ZW5lcnMgPSBsaXN0ZW5lcnMuZmlsdGVyKGZ1bmN0aW9uIChpdGVtKSB7XG4gICAgICAgIHJldHVybiBpdGVtICE9PSBsaXN0ZW5lcjtcbiAgICAgIH0pO1xuICAgIH07XG4gIH1cblxuICBmdW5jdGlvbiBub3RpZnlMaXN0ZW5lcnMoKSB7XG4gICAgZm9yICh2YXIgX2xlbiA9IGFyZ3VtZW50cy5sZW5ndGgsIGFyZ3MgPSBuZXcgQXJyYXkoX2xlbiksIF9rZXkgPSAwOyBfa2V5IDwgX2xlbjsgX2tleSsrKSB7XG4gICAgICBhcmdzW19rZXldID0gYXJndW1lbnRzW19rZXldO1xuICAgIH1cblxuICAgIGxpc3RlbmVycy5mb3JFYWNoKGZ1bmN0aW9uIChsaXN0ZW5lcikge1xuICAgICAgcmV0dXJuIGxpc3RlbmVyLmFwcGx5KHZvaWQgMCwgYXJncyk7XG4gICAgfSk7XG4gIH1cblxuICByZXR1cm4ge1xuICAgIHNldFByb21wdDogc2V0UHJvbXB0LFxuICAgIGNvbmZpcm1UcmFuc2l0aW9uVG86IGNvbmZpcm1UcmFuc2l0aW9uVG8sXG4gICAgYXBwZW5kTGlzdGVuZXI6IGFwcGVuZExpc3RlbmVyLFxuICAgIG5vdGlmeUxpc3RlbmVyczogbm90aWZ5TGlzdGVuZXJzXG4gIH07XG59XG5cbnZhciBjYW5Vc2VET00gPSAhISh0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJyAmJiB3aW5kb3cuZG9jdW1lbnQgJiYgd2luZG93LmRvY3VtZW50LmNyZWF0ZUVsZW1lbnQpO1xuZnVuY3Rpb24gZ2V0Q29uZmlybWF0aW9uKG1lc3NhZ2UsIGNhbGxiYWNrKSB7XG4gIGNhbGxiYWNrKHdpbmRvdy5jb25maXJtKG1lc3NhZ2UpKTsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1hbGVydFxufVxuLyoqXG4gKiBSZXR1cm5zIHRydWUgaWYgdGhlIEhUTUw1IGhpc3RvcnkgQVBJIGlzIHN1cHBvcnRlZC4gVGFrZW4gZnJvbSBNb2Rlcm5penIuXG4gKlxuICogaHR0cHM6Ly9naXRodWIuY29tL01vZGVybml6ci9Nb2Rlcm5penIvYmxvYi9tYXN0ZXIvTElDRU5TRVxuICogaHR0cHM6Ly9naXRodWIuY29tL01vZGVybml6ci9Nb2Rlcm5penIvYmxvYi9tYXN0ZXIvZmVhdHVyZS1kZXRlY3RzL2hpc3RvcnkuanNcbiAqIGNoYW5nZWQgdG8gYXZvaWQgZmFsc2UgbmVnYXRpdmVzIGZvciBXaW5kb3dzIFBob25lczogaHR0cHM6Ly9naXRodWIuY29tL3JlYWN0anMvcmVhY3Qtcm91dGVyL2lzc3Vlcy81ODZcbiAqL1xuXG5mdW5jdGlvbiBzdXBwb3J0c0hpc3RvcnkoKSB7XG4gIHZhciB1YSA9IHdpbmRvdy5uYXZpZ2F0b3IudXNlckFnZW50O1xuICBpZiAoKHVhLmluZGV4T2YoJ0FuZHJvaWQgMi4nKSAhPT0gLTEgfHwgdWEuaW5kZXhPZignQW5kcm9pZCA0LjAnKSAhPT0gLTEpICYmIHVhLmluZGV4T2YoJ01vYmlsZSBTYWZhcmknKSAhPT0gLTEgJiYgdWEuaW5kZXhPZignQ2hyb21lJykgPT09IC0xICYmIHVhLmluZGV4T2YoJ1dpbmRvd3MgUGhvbmUnKSA9PT0gLTEpIHJldHVybiBmYWxzZTtcbiAgcmV0dXJuIHdpbmRvdy5oaXN0b3J5ICYmICdwdXNoU3RhdGUnIGluIHdpbmRvdy5oaXN0b3J5O1xufVxuLyoqXG4gKiBSZXR1cm5zIHRydWUgaWYgYnJvd3NlciBmaXJlcyBwb3BzdGF0ZSBvbiBoYXNoIGNoYW5nZS5cbiAqIElFMTAgYW5kIElFMTEgZG8gbm90LlxuICovXG5cbmZ1bmN0aW9uIHN1cHBvcnRzUG9wU3RhdGVPbkhhc2hDaGFuZ2UoKSB7XG4gIHJldHVybiB3aW5kb3cubmF2aWdhdG9yLnVzZXJBZ2VudC5pbmRleE9mKCdUcmlkZW50JykgPT09IC0xO1xufVxuLyoqXG4gKiBSZXR1cm5zIGZhbHNlIGlmIHVzaW5nIGdvKG4pIHdpdGggaGFzaCBoaXN0b3J5IGNhdXNlcyBhIGZ1bGwgcGFnZSByZWxvYWQuXG4gKi9cblxuZnVuY3Rpb24gc3VwcG9ydHNHb1dpdGhvdXRSZWxvYWRVc2luZ0hhc2goKSB7XG4gIHJldHVybiB3aW5kb3cubmF2aWdhdG9yLnVzZXJBZ2VudC5pbmRleE9mKCdGaXJlZm94JykgPT09IC0xO1xufVxuLyoqXG4gKiBSZXR1cm5zIHRydWUgaWYgYSBnaXZlbiBwb3BzdGF0ZSBldmVudCBpcyBhbiBleHRyYW5lb3VzIFdlYktpdCBldmVudC5cbiAqIEFjY291bnRzIGZvciB0aGUgZmFjdCB0aGF0IENocm9tZSBvbiBpT1MgZmlyZXMgcmVhbCBwb3BzdGF0ZSBldmVudHNcbiAqIGNvbnRhaW5pbmcgdW5kZWZpbmVkIHN0YXRlIHdoZW4gcHJlc3NpbmcgdGhlIGJhY2sgYnV0dG9uLlxuICovXG5cbmZ1bmN0aW9uIGlzRXh0cmFuZW91c1BvcHN0YXRlRXZlbnQoZXZlbnQpIHtcbiAgcmV0dXJuIGV2ZW50LnN0YXRlID09PSB1bmRlZmluZWQgJiYgbmF2aWdhdG9yLnVzZXJBZ2VudC5pbmRleE9mKCdDcmlPUycpID09PSAtMTtcbn1cblxudmFyIFBvcFN0YXRlRXZlbnQgPSAncG9wc3RhdGUnO1xudmFyIEhhc2hDaGFuZ2VFdmVudCA9ICdoYXNoY2hhbmdlJztcblxuZnVuY3Rpb24gZ2V0SGlzdG9yeVN0YXRlKCkge1xuICB0cnkge1xuICAgIHJldHVybiB3aW5kb3cuaGlzdG9yeS5zdGF0ZSB8fCB7fTtcbiAgfSBjYXRjaCAoZSkge1xuICAgIC8vIElFIDExIHNvbWV0aW1lcyB0aHJvd3Mgd2hlbiBhY2Nlc3Npbmcgd2luZG93Lmhpc3Rvcnkuc3RhdGVcbiAgICAvLyBTZWUgaHR0cHM6Ly9naXRodWIuY29tL1JlYWN0VHJhaW5pbmcvaGlzdG9yeS9wdWxsLzI4OVxuICAgIHJldHVybiB7fTtcbiAgfVxufVxuLyoqXG4gKiBDcmVhdGVzIGEgaGlzdG9yeSBvYmplY3QgdGhhdCB1c2VzIHRoZSBIVE1MNSBoaXN0b3J5IEFQSSBpbmNsdWRpbmdcbiAqIHB1c2hTdGF0ZSwgcmVwbGFjZVN0YXRlLCBhbmQgdGhlIHBvcHN0YXRlIGV2ZW50LlxuICovXG5cblxuZnVuY3Rpb24gY3JlYXRlQnJvd3Nlckhpc3RvcnkocHJvcHMpIHtcbiAgaWYgKHByb3BzID09PSB2b2lkIDApIHtcbiAgICBwcm9wcyA9IHt9O1xuICB9XG5cbiAgIWNhblVzZURPTSA/IHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIiA/IGludmFyaWFudChmYWxzZSwgJ0Jyb3dzZXIgaGlzdG9yeSBuZWVkcyBhIERPTScpIDogaW52YXJpYW50KGZhbHNlKSA6IHZvaWQgMDtcbiAgdmFyIGdsb2JhbEhpc3RvcnkgPSB3aW5kb3cuaGlzdG9yeTtcbiAgdmFyIGNhblVzZUhpc3RvcnkgPSBzdXBwb3J0c0hpc3RvcnkoKTtcbiAgdmFyIG5lZWRzSGFzaENoYW5nZUxpc3RlbmVyID0gIXN1cHBvcnRzUG9wU3RhdGVPbkhhc2hDaGFuZ2UoKTtcbiAgdmFyIF9wcm9wcyA9IHByb3BzLFxuICAgICAgX3Byb3BzJGZvcmNlUmVmcmVzaCA9IF9wcm9wcy5mb3JjZVJlZnJlc2gsXG4gICAgICBmb3JjZVJlZnJlc2ggPSBfcHJvcHMkZm9yY2VSZWZyZXNoID09PSB2b2lkIDAgPyBmYWxzZSA6IF9wcm9wcyRmb3JjZVJlZnJlc2gsXG4gICAgICBfcHJvcHMkZ2V0VXNlckNvbmZpcm0gPSBfcHJvcHMuZ2V0VXNlckNvbmZpcm1hdGlvbixcbiAgICAgIGdldFVzZXJDb25maXJtYXRpb24gPSBfcHJvcHMkZ2V0VXNlckNvbmZpcm0gPT09IHZvaWQgMCA/IGdldENvbmZpcm1hdGlvbiA6IF9wcm9wcyRnZXRVc2VyQ29uZmlybSxcbiAgICAgIF9wcm9wcyRrZXlMZW5ndGggPSBfcHJvcHMua2V5TGVuZ3RoLFxuICAgICAga2V5TGVuZ3RoID0gX3Byb3BzJGtleUxlbmd0aCA9PT0gdm9pZCAwID8gNiA6IF9wcm9wcyRrZXlMZW5ndGg7XG4gIHZhciBiYXNlbmFtZSA9IHByb3BzLmJhc2VuYW1lID8gc3RyaXBUcmFpbGluZ1NsYXNoKGFkZExlYWRpbmdTbGFzaChwcm9wcy5iYXNlbmFtZSkpIDogJyc7XG5cbiAgZnVuY3Rpb24gZ2V0RE9NTG9jYXRpb24oaGlzdG9yeVN0YXRlKSB7XG4gICAgdmFyIF9yZWYgPSBoaXN0b3J5U3RhdGUgfHwge30sXG4gICAgICAgIGtleSA9IF9yZWYua2V5LFxuICAgICAgICBzdGF0ZSA9IF9yZWYuc3RhdGU7XG5cbiAgICB2YXIgX3dpbmRvdyRsb2NhdGlvbiA9IHdpbmRvdy5sb2NhdGlvbixcbiAgICAgICAgcGF0aG5hbWUgPSBfd2luZG93JGxvY2F0aW9uLnBhdGhuYW1lLFxuICAgICAgICBzZWFyY2ggPSBfd2luZG93JGxvY2F0aW9uLnNlYXJjaCxcbiAgICAgICAgaGFzaCA9IF93aW5kb3ckbG9jYXRpb24uaGFzaDtcbiAgICB2YXIgcGF0aCA9IHBhdGhuYW1lICsgc2VhcmNoICsgaGFzaDtcbiAgICBwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIgPyB3YXJuaW5nKCFiYXNlbmFtZSB8fCBoYXNCYXNlbmFtZShwYXRoLCBiYXNlbmFtZSksICdZb3UgYXJlIGF0dGVtcHRpbmcgdG8gdXNlIGEgYmFzZW5hbWUgb24gYSBwYWdlIHdob3NlIFVSTCBwYXRoIGRvZXMgbm90IGJlZ2luICcgKyAnd2l0aCB0aGUgYmFzZW5hbWUuIEV4cGVjdGVkIHBhdGggXCInICsgcGF0aCArICdcIiB0byBiZWdpbiB3aXRoIFwiJyArIGJhc2VuYW1lICsgJ1wiLicpIDogdm9pZCAwO1xuICAgIGlmIChiYXNlbmFtZSkgcGF0aCA9IHN0cmlwQmFzZW5hbWUocGF0aCwgYmFzZW5hbWUpO1xuICAgIHJldHVybiBjcmVhdGVMb2NhdGlvbihwYXRoLCBzdGF0ZSwga2V5KTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGNyZWF0ZUtleSgpIHtcbiAgICByZXR1cm4gTWF0aC5yYW5kb20oKS50b1N0cmluZygzNikuc3Vic3RyKDIsIGtleUxlbmd0aCk7XG4gIH1cblxuICB2YXIgdHJhbnNpdGlvbk1hbmFnZXIgPSBjcmVhdGVUcmFuc2l0aW9uTWFuYWdlcigpO1xuXG4gIGZ1bmN0aW9uIHNldFN0YXRlKG5leHRTdGF0ZSkge1xuICAgIF9leHRlbmRzKGhpc3RvcnksIG5leHRTdGF0ZSk7XG5cbiAgICBoaXN0b3J5Lmxlbmd0aCA9IGdsb2JhbEhpc3RvcnkubGVuZ3RoO1xuICAgIHRyYW5zaXRpb25NYW5hZ2VyLm5vdGlmeUxpc3RlbmVycyhoaXN0b3J5LmxvY2F0aW9uLCBoaXN0b3J5LmFjdGlvbik7XG4gIH1cblxuICBmdW5jdGlvbiBoYW5kbGVQb3BTdGF0ZShldmVudCkge1xuICAgIC8vIElnbm9yZSBleHRyYW5lb3VzIHBvcHN0YXRlIGV2ZW50cyBpbiBXZWJLaXQuXG4gICAgaWYgKGlzRXh0cmFuZW91c1BvcHN0YXRlRXZlbnQoZXZlbnQpKSByZXR1cm47XG4gICAgaGFuZGxlUG9wKGdldERPTUxvY2F0aW9uKGV2ZW50LnN0YXRlKSk7XG4gIH1cblxuICBmdW5jdGlvbiBoYW5kbGVIYXNoQ2hhbmdlKCkge1xuICAgIGhhbmRsZVBvcChnZXRET01Mb2NhdGlvbihnZXRIaXN0b3J5U3RhdGUoKSkpO1xuICB9XG5cbiAgdmFyIGZvcmNlTmV4dFBvcCA9IGZhbHNlO1xuXG4gIGZ1bmN0aW9uIGhhbmRsZVBvcChsb2NhdGlvbikge1xuICAgIGlmIChmb3JjZU5leHRQb3ApIHtcbiAgICAgIGZvcmNlTmV4dFBvcCA9IGZhbHNlO1xuICAgICAgc2V0U3RhdGUoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdmFyIGFjdGlvbiA9ICdQT1AnO1xuICAgICAgdHJhbnNpdGlvbk1hbmFnZXIuY29uZmlybVRyYW5zaXRpb25Ubyhsb2NhdGlvbiwgYWN0aW9uLCBnZXRVc2VyQ29uZmlybWF0aW9uLCBmdW5jdGlvbiAob2spIHtcbiAgICAgICAgaWYgKG9rKSB7XG4gICAgICAgICAgc2V0U3RhdGUoe1xuICAgICAgICAgICAgYWN0aW9uOiBhY3Rpb24sXG4gICAgICAgICAgICBsb2NhdGlvbjogbG9jYXRpb25cbiAgICAgICAgICB9KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXZlcnRQb3AobG9jYXRpb24pO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiByZXZlcnRQb3AoZnJvbUxvY2F0aW9uKSB7XG4gICAgdmFyIHRvTG9jYXRpb24gPSBoaXN0b3J5LmxvY2F0aW9uOyAvLyBUT0RPOiBXZSBjb3VsZCBwcm9iYWJseSBtYWtlIHRoaXMgbW9yZSByZWxpYWJsZSBieVxuICAgIC8vIGtlZXBpbmcgYSBsaXN0IG9mIGtleXMgd2UndmUgc2VlbiBpbiBzZXNzaW9uU3RvcmFnZS5cbiAgICAvLyBJbnN0ZWFkLCB3ZSBqdXN0IGRlZmF1bHQgdG8gMCBmb3Iga2V5cyB3ZSBkb24ndCBrbm93LlxuXG4gICAgdmFyIHRvSW5kZXggPSBhbGxLZXlzLmluZGV4T2YodG9Mb2NhdGlvbi5rZXkpO1xuICAgIGlmICh0b0luZGV4ID09PSAtMSkgdG9JbmRleCA9IDA7XG4gICAgdmFyIGZyb21JbmRleCA9IGFsbEtleXMuaW5kZXhPZihmcm9tTG9jYXRpb24ua2V5KTtcbiAgICBpZiAoZnJvbUluZGV4ID09PSAtMSkgZnJvbUluZGV4ID0gMDtcbiAgICB2YXIgZGVsdGEgPSB0b0luZGV4IC0gZnJvbUluZGV4O1xuXG4gICAgaWYgKGRlbHRhKSB7XG4gICAgICBmb3JjZU5leHRQb3AgPSB0cnVlO1xuICAgICAgZ28oZGVsdGEpO1xuICAgIH1cbiAgfVxuXG4gIHZhciBpbml0aWFsTG9jYXRpb24gPSBnZXRET01Mb2NhdGlvbihnZXRIaXN0b3J5U3RhdGUoKSk7XG4gIHZhciBhbGxLZXlzID0gW2luaXRpYWxMb2NhdGlvbi5rZXldOyAvLyBQdWJsaWMgaW50ZXJmYWNlXG5cbiAgZnVuY3Rpb24gY3JlYXRlSHJlZihsb2NhdGlvbikge1xuICAgIHJldHVybiBiYXNlbmFtZSArIGNyZWF0ZVBhdGgobG9jYXRpb24pO1xuICB9XG5cbiAgZnVuY3Rpb24gcHVzaChwYXRoLCBzdGF0ZSkge1xuICAgIHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIiA/IHdhcm5pbmcoISh0eXBlb2YgcGF0aCA9PT0gJ29iamVjdCcgJiYgcGF0aC5zdGF0ZSAhPT0gdW5kZWZpbmVkICYmIHN0YXRlICE9PSB1bmRlZmluZWQpLCAnWW91IHNob3VsZCBhdm9pZCBwcm92aWRpbmcgYSAybmQgc3RhdGUgYXJndW1lbnQgdG8gcHVzaCB3aGVuIHRoZSAxc3QgJyArICdhcmd1bWVudCBpcyBhIGxvY2F0aW9uLWxpa2Ugb2JqZWN0IHRoYXQgYWxyZWFkeSBoYXMgc3RhdGU7IGl0IGlzIGlnbm9yZWQnKSA6IHZvaWQgMDtcbiAgICB2YXIgYWN0aW9uID0gJ1BVU0gnO1xuICAgIHZhciBsb2NhdGlvbiA9IGNyZWF0ZUxvY2F0aW9uKHBhdGgsIHN0YXRlLCBjcmVhdGVLZXkoKSwgaGlzdG9yeS5sb2NhdGlvbik7XG4gICAgdHJhbnNpdGlvbk1hbmFnZXIuY29uZmlybVRyYW5zaXRpb25Ubyhsb2NhdGlvbiwgYWN0aW9uLCBnZXRVc2VyQ29uZmlybWF0aW9uLCBmdW5jdGlvbiAob2spIHtcbiAgICAgIGlmICghb2spIHJldHVybjtcbiAgICAgIHZhciBocmVmID0gY3JlYXRlSHJlZihsb2NhdGlvbik7XG4gICAgICB2YXIga2V5ID0gbG9jYXRpb24ua2V5LFxuICAgICAgICAgIHN0YXRlID0gbG9jYXRpb24uc3RhdGU7XG5cbiAgICAgIGlmIChjYW5Vc2VIaXN0b3J5KSB7XG4gICAgICAgIGdsb2JhbEhpc3RvcnkucHVzaFN0YXRlKHtcbiAgICAgICAgICBrZXk6IGtleSxcbiAgICAgICAgICBzdGF0ZTogc3RhdGVcbiAgICAgICAgfSwgbnVsbCwgaHJlZik7XG5cbiAgICAgICAgaWYgKGZvcmNlUmVmcmVzaCkge1xuICAgICAgICAgIHdpbmRvdy5sb2NhdGlvbi5ocmVmID0gaHJlZjtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB2YXIgcHJldkluZGV4ID0gYWxsS2V5cy5pbmRleE9mKGhpc3RvcnkubG9jYXRpb24ua2V5KTtcbiAgICAgICAgICB2YXIgbmV4dEtleXMgPSBhbGxLZXlzLnNsaWNlKDAsIHByZXZJbmRleCArIDEpO1xuICAgICAgICAgIG5leHRLZXlzLnB1c2gobG9jYXRpb24ua2V5KTtcbiAgICAgICAgICBhbGxLZXlzID0gbmV4dEtleXM7XG4gICAgICAgICAgc2V0U3RhdGUoe1xuICAgICAgICAgICAgYWN0aW9uOiBhY3Rpb24sXG4gICAgICAgICAgICBsb2NhdGlvbjogbG9jYXRpb25cbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiID8gd2FybmluZyhzdGF0ZSA9PT0gdW5kZWZpbmVkLCAnQnJvd3NlciBoaXN0b3J5IGNhbm5vdCBwdXNoIHN0YXRlIGluIGJyb3dzZXJzIHRoYXQgZG8gbm90IHN1cHBvcnQgSFRNTDUgaGlzdG9yeScpIDogdm9pZCAwO1xuICAgICAgICB3aW5kb3cubG9jYXRpb24uaHJlZiA9IGhyZWY7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBmdW5jdGlvbiByZXBsYWNlKHBhdGgsIHN0YXRlKSB7XG4gICAgcHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiID8gd2FybmluZyghKHR5cGVvZiBwYXRoID09PSAnb2JqZWN0JyAmJiBwYXRoLnN0YXRlICE9PSB1bmRlZmluZWQgJiYgc3RhdGUgIT09IHVuZGVmaW5lZCksICdZb3Ugc2hvdWxkIGF2b2lkIHByb3ZpZGluZyBhIDJuZCBzdGF0ZSBhcmd1bWVudCB0byByZXBsYWNlIHdoZW4gdGhlIDFzdCAnICsgJ2FyZ3VtZW50IGlzIGEgbG9jYXRpb24tbGlrZSBvYmplY3QgdGhhdCBhbHJlYWR5IGhhcyBzdGF0ZTsgaXQgaXMgaWdub3JlZCcpIDogdm9pZCAwO1xuICAgIHZhciBhY3Rpb24gPSAnUkVQTEFDRSc7XG4gICAgdmFyIGxvY2F0aW9uID0gY3JlYXRlTG9jYXRpb24ocGF0aCwgc3RhdGUsIGNyZWF0ZUtleSgpLCBoaXN0b3J5LmxvY2F0aW9uKTtcbiAgICB0cmFuc2l0aW9uTWFuYWdlci5jb25maXJtVHJhbnNpdGlvblRvKGxvY2F0aW9uLCBhY3Rpb24sIGdldFVzZXJDb25maXJtYXRpb24sIGZ1bmN0aW9uIChvaykge1xuICAgICAgaWYgKCFvaykgcmV0dXJuO1xuICAgICAgdmFyIGhyZWYgPSBjcmVhdGVIcmVmKGxvY2F0aW9uKTtcbiAgICAgIHZhciBrZXkgPSBsb2NhdGlvbi5rZXksXG4gICAgICAgICAgc3RhdGUgPSBsb2NhdGlvbi5zdGF0ZTtcblxuICAgICAgaWYgKGNhblVzZUhpc3RvcnkpIHtcbiAgICAgICAgZ2xvYmFsSGlzdG9yeS5yZXBsYWNlU3RhdGUoe1xuICAgICAgICAgIGtleToga2V5LFxuICAgICAgICAgIHN0YXRlOiBzdGF0ZVxuICAgICAgICB9LCBudWxsLCBocmVmKTtcblxuICAgICAgICBpZiAoZm9yY2VSZWZyZXNoKSB7XG4gICAgICAgICAgd2luZG93LmxvY2F0aW9uLnJlcGxhY2UoaHJlZik7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdmFyIHByZXZJbmRleCA9IGFsbEtleXMuaW5kZXhPZihoaXN0b3J5LmxvY2F0aW9uLmtleSk7XG4gICAgICAgICAgaWYgKHByZXZJbmRleCAhPT0gLTEpIGFsbEtleXNbcHJldkluZGV4XSA9IGxvY2F0aW9uLmtleTtcbiAgICAgICAgICBzZXRTdGF0ZSh7XG4gICAgICAgICAgICBhY3Rpb246IGFjdGlvbixcbiAgICAgICAgICAgIGxvY2F0aW9uOiBsb2NhdGlvblxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIgPyB3YXJuaW5nKHN0YXRlID09PSB1bmRlZmluZWQsICdCcm93c2VyIGhpc3RvcnkgY2Fubm90IHJlcGxhY2Ugc3RhdGUgaW4gYnJvd3NlcnMgdGhhdCBkbyBub3Qgc3VwcG9ydCBIVE1MNSBoaXN0b3J5JykgOiB2b2lkIDA7XG4gICAgICAgIHdpbmRvdy5sb2NhdGlvbi5yZXBsYWNlKGhyZWYpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgZnVuY3Rpb24gZ28obikge1xuICAgIGdsb2JhbEhpc3RvcnkuZ28obik7XG4gIH1cblxuICBmdW5jdGlvbiBnb0JhY2soKSB7XG4gICAgZ28oLTEpO1xuICB9XG5cbiAgZnVuY3Rpb24gZ29Gb3J3YXJkKCkge1xuICAgIGdvKDEpO1xuICB9XG5cbiAgdmFyIGxpc3RlbmVyQ291bnQgPSAwO1xuXG4gIGZ1bmN0aW9uIGNoZWNrRE9NTGlzdGVuZXJzKGRlbHRhKSB7XG4gICAgbGlzdGVuZXJDb3VudCArPSBkZWx0YTtcblxuICAgIGlmIChsaXN0ZW5lckNvdW50ID09PSAxICYmIGRlbHRhID09PSAxKSB7XG4gICAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcihQb3BTdGF0ZUV2ZW50LCBoYW5kbGVQb3BTdGF0ZSk7XG4gICAgICBpZiAobmVlZHNIYXNoQ2hhbmdlTGlzdGVuZXIpIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKEhhc2hDaGFuZ2VFdmVudCwgaGFuZGxlSGFzaENoYW5nZSk7XG4gICAgfSBlbHNlIGlmIChsaXN0ZW5lckNvdW50ID09PSAwKSB7XG4gICAgICB3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcihQb3BTdGF0ZUV2ZW50LCBoYW5kbGVQb3BTdGF0ZSk7XG4gICAgICBpZiAobmVlZHNIYXNoQ2hhbmdlTGlzdGVuZXIpIHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKEhhc2hDaGFuZ2VFdmVudCwgaGFuZGxlSGFzaENoYW5nZSk7XG4gICAgfVxuICB9XG5cbiAgdmFyIGlzQmxvY2tlZCA9IGZhbHNlO1xuXG4gIGZ1bmN0aW9uIGJsb2NrKHByb21wdCkge1xuICAgIGlmIChwcm9tcHQgPT09IHZvaWQgMCkge1xuICAgICAgcHJvbXB0ID0gZmFsc2U7XG4gICAgfVxuXG4gICAgdmFyIHVuYmxvY2sgPSB0cmFuc2l0aW9uTWFuYWdlci5zZXRQcm9tcHQocHJvbXB0KTtcblxuICAgIGlmICghaXNCbG9ja2VkKSB7XG4gICAgICBjaGVja0RPTUxpc3RlbmVycygxKTtcbiAgICAgIGlzQmxvY2tlZCA9IHRydWU7XG4gICAgfVxuXG4gICAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICAgIGlmIChpc0Jsb2NrZWQpIHtcbiAgICAgICAgaXNCbG9ja2VkID0gZmFsc2U7XG4gICAgICAgIGNoZWNrRE9NTGlzdGVuZXJzKC0xKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHVuYmxvY2soKTtcbiAgICB9O1xuICB9XG5cbiAgZnVuY3Rpb24gbGlzdGVuKGxpc3RlbmVyKSB7XG4gICAgdmFyIHVubGlzdGVuID0gdHJhbnNpdGlvbk1hbmFnZXIuYXBwZW5kTGlzdGVuZXIobGlzdGVuZXIpO1xuICAgIGNoZWNrRE9NTGlzdGVuZXJzKDEpO1xuICAgIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgICBjaGVja0RPTUxpc3RlbmVycygtMSk7XG4gICAgICB1bmxpc3RlbigpO1xuICAgIH07XG4gIH1cblxuICB2YXIgaGlzdG9yeSA9IHtcbiAgICBsZW5ndGg6IGdsb2JhbEhpc3RvcnkubGVuZ3RoLFxuICAgIGFjdGlvbjogJ1BPUCcsXG4gICAgbG9jYXRpb246IGluaXRpYWxMb2NhdGlvbixcbiAgICBjcmVhdGVIcmVmOiBjcmVhdGVIcmVmLFxuICAgIHB1c2g6IHB1c2gsXG4gICAgcmVwbGFjZTogcmVwbGFjZSxcbiAgICBnbzogZ28sXG4gICAgZ29CYWNrOiBnb0JhY2ssXG4gICAgZ29Gb3J3YXJkOiBnb0ZvcndhcmQsXG4gICAgYmxvY2s6IGJsb2NrLFxuICAgIGxpc3RlbjogbGlzdGVuXG4gIH07XG4gIHJldHVybiBoaXN0b3J5O1xufVxuXG52YXIgSGFzaENoYW5nZUV2ZW50JDEgPSAnaGFzaGNoYW5nZSc7XG52YXIgSGFzaFBhdGhDb2RlcnMgPSB7XG4gIGhhc2hiYW5nOiB7XG4gICAgZW5jb2RlUGF0aDogZnVuY3Rpb24gZW5jb2RlUGF0aChwYXRoKSB7XG4gICAgICByZXR1cm4gcGF0aC5jaGFyQXQoMCkgPT09ICchJyA/IHBhdGggOiAnIS8nICsgc3RyaXBMZWFkaW5nU2xhc2gocGF0aCk7XG4gICAgfSxcbiAgICBkZWNvZGVQYXRoOiBmdW5jdGlvbiBkZWNvZGVQYXRoKHBhdGgpIHtcbiAgICAgIHJldHVybiBwYXRoLmNoYXJBdCgwKSA9PT0gJyEnID8gcGF0aC5zdWJzdHIoMSkgOiBwYXRoO1xuICAgIH1cbiAgfSxcbiAgbm9zbGFzaDoge1xuICAgIGVuY29kZVBhdGg6IHN0cmlwTGVhZGluZ1NsYXNoLFxuICAgIGRlY29kZVBhdGg6IGFkZExlYWRpbmdTbGFzaFxuICB9LFxuICBzbGFzaDoge1xuICAgIGVuY29kZVBhdGg6IGFkZExlYWRpbmdTbGFzaCxcbiAgICBkZWNvZGVQYXRoOiBhZGRMZWFkaW5nU2xhc2hcbiAgfVxufTtcblxuZnVuY3Rpb24gc3RyaXBIYXNoKHVybCkge1xuICB2YXIgaGFzaEluZGV4ID0gdXJsLmluZGV4T2YoJyMnKTtcbiAgcmV0dXJuIGhhc2hJbmRleCA9PT0gLTEgPyB1cmwgOiB1cmwuc2xpY2UoMCwgaGFzaEluZGV4KTtcbn1cblxuZnVuY3Rpb24gZ2V0SGFzaFBhdGgoKSB7XG4gIC8vIFdlIGNhbid0IHVzZSB3aW5kb3cubG9jYXRpb24uaGFzaCBoZXJlIGJlY2F1c2UgaXQncyBub3RcbiAgLy8gY29uc2lzdGVudCBhY3Jvc3MgYnJvd3NlcnMgLSBGaXJlZm94IHdpbGwgcHJlLWRlY29kZSBpdCFcbiAgdmFyIGhyZWYgPSB3aW5kb3cubG9jYXRpb24uaHJlZjtcbiAgdmFyIGhhc2hJbmRleCA9IGhyZWYuaW5kZXhPZignIycpO1xuICByZXR1cm4gaGFzaEluZGV4ID09PSAtMSA/ICcnIDogaHJlZi5zdWJzdHJpbmcoaGFzaEluZGV4ICsgMSk7XG59XG5cbmZ1bmN0aW9uIHB1c2hIYXNoUGF0aChwYXRoKSB7XG4gIHdpbmRvdy5sb2NhdGlvbi5oYXNoID0gcGF0aDtcbn1cblxuZnVuY3Rpb24gcmVwbGFjZUhhc2hQYXRoKHBhdGgpIHtcbiAgd2luZG93LmxvY2F0aW9uLnJlcGxhY2Uoc3RyaXBIYXNoKHdpbmRvdy5sb2NhdGlvbi5ocmVmKSArICcjJyArIHBhdGgpO1xufVxuXG5mdW5jdGlvbiBjcmVhdGVIYXNoSGlzdG9yeShwcm9wcykge1xuICBpZiAocHJvcHMgPT09IHZvaWQgMCkge1xuICAgIHByb3BzID0ge307XG4gIH1cblxuICAhY2FuVXNlRE9NID8gcHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiID8gaW52YXJpYW50KGZhbHNlLCAnSGFzaCBoaXN0b3J5IG5lZWRzIGEgRE9NJykgOiBpbnZhcmlhbnQoZmFsc2UpIDogdm9pZCAwO1xuICB2YXIgZ2xvYmFsSGlzdG9yeSA9IHdpbmRvdy5oaXN0b3J5O1xuICB2YXIgY2FuR29XaXRob3V0UmVsb2FkID0gc3VwcG9ydHNHb1dpdGhvdXRSZWxvYWRVc2luZ0hhc2goKTtcbiAgdmFyIF9wcm9wcyA9IHByb3BzLFxuICAgICAgX3Byb3BzJGdldFVzZXJDb25maXJtID0gX3Byb3BzLmdldFVzZXJDb25maXJtYXRpb24sXG4gICAgICBnZXRVc2VyQ29uZmlybWF0aW9uID0gX3Byb3BzJGdldFVzZXJDb25maXJtID09PSB2b2lkIDAgPyBnZXRDb25maXJtYXRpb24gOiBfcHJvcHMkZ2V0VXNlckNvbmZpcm0sXG4gICAgICBfcHJvcHMkaGFzaFR5cGUgPSBfcHJvcHMuaGFzaFR5cGUsXG4gICAgICBoYXNoVHlwZSA9IF9wcm9wcyRoYXNoVHlwZSA9PT0gdm9pZCAwID8gJ3NsYXNoJyA6IF9wcm9wcyRoYXNoVHlwZTtcbiAgdmFyIGJhc2VuYW1lID0gcHJvcHMuYmFzZW5hbWUgPyBzdHJpcFRyYWlsaW5nU2xhc2goYWRkTGVhZGluZ1NsYXNoKHByb3BzLmJhc2VuYW1lKSkgOiAnJztcbiAgdmFyIF9IYXNoUGF0aENvZGVycyRoYXNoVCA9IEhhc2hQYXRoQ29kZXJzW2hhc2hUeXBlXSxcbiAgICAgIGVuY29kZVBhdGggPSBfSGFzaFBhdGhDb2RlcnMkaGFzaFQuZW5jb2RlUGF0aCxcbiAgICAgIGRlY29kZVBhdGggPSBfSGFzaFBhdGhDb2RlcnMkaGFzaFQuZGVjb2RlUGF0aDtcblxuICBmdW5jdGlvbiBnZXRET01Mb2NhdGlvbigpIHtcbiAgICB2YXIgcGF0aCA9IGRlY29kZVBhdGgoZ2V0SGFzaFBhdGgoKSk7XG4gICAgcHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiID8gd2FybmluZyghYmFzZW5hbWUgfHwgaGFzQmFzZW5hbWUocGF0aCwgYmFzZW5hbWUpLCAnWW91IGFyZSBhdHRlbXB0aW5nIHRvIHVzZSBhIGJhc2VuYW1lIG9uIGEgcGFnZSB3aG9zZSBVUkwgcGF0aCBkb2VzIG5vdCBiZWdpbiAnICsgJ3dpdGggdGhlIGJhc2VuYW1lLiBFeHBlY3RlZCBwYXRoIFwiJyArIHBhdGggKyAnXCIgdG8gYmVnaW4gd2l0aCBcIicgKyBiYXNlbmFtZSArICdcIi4nKSA6IHZvaWQgMDtcbiAgICBpZiAoYmFzZW5hbWUpIHBhdGggPSBzdHJpcEJhc2VuYW1lKHBhdGgsIGJhc2VuYW1lKTtcbiAgICByZXR1cm4gY3JlYXRlTG9jYXRpb24ocGF0aCk7XG4gIH1cblxuICB2YXIgdHJhbnNpdGlvbk1hbmFnZXIgPSBjcmVhdGVUcmFuc2l0aW9uTWFuYWdlcigpO1xuXG4gIGZ1bmN0aW9uIHNldFN0YXRlKG5leHRTdGF0ZSkge1xuICAgIF9leHRlbmRzKGhpc3RvcnksIG5leHRTdGF0ZSk7XG5cbiAgICBoaXN0b3J5Lmxlbmd0aCA9IGdsb2JhbEhpc3RvcnkubGVuZ3RoO1xuICAgIHRyYW5zaXRpb25NYW5hZ2VyLm5vdGlmeUxpc3RlbmVycyhoaXN0b3J5LmxvY2F0aW9uLCBoaXN0b3J5LmFjdGlvbik7XG4gIH1cblxuICB2YXIgZm9yY2VOZXh0UG9wID0gZmFsc2U7XG4gIHZhciBpZ25vcmVQYXRoID0gbnVsbDtcblxuICBmdW5jdGlvbiBsb2NhdGlvbnNBcmVFcXVhbCQkMShhLCBiKSB7XG4gICAgcmV0dXJuIGEucGF0aG5hbWUgPT09IGIucGF0aG5hbWUgJiYgYS5zZWFyY2ggPT09IGIuc2VhcmNoICYmIGEuaGFzaCA9PT0gYi5oYXNoO1xuICB9XG5cbiAgZnVuY3Rpb24gaGFuZGxlSGFzaENoYW5nZSgpIHtcbiAgICB2YXIgcGF0aCA9IGdldEhhc2hQYXRoKCk7XG4gICAgdmFyIGVuY29kZWRQYXRoID0gZW5jb2RlUGF0aChwYXRoKTtcblxuICAgIGlmIChwYXRoICE9PSBlbmNvZGVkUGF0aCkge1xuICAgICAgLy8gRW5zdXJlIHdlIGFsd2F5cyBoYXZlIGEgcHJvcGVybHktZW5jb2RlZCBoYXNoLlxuICAgICAgcmVwbGFjZUhhc2hQYXRoKGVuY29kZWRQYXRoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdmFyIGxvY2F0aW9uID0gZ2V0RE9NTG9jYXRpb24oKTtcbiAgICAgIHZhciBwcmV2TG9jYXRpb24gPSBoaXN0b3J5LmxvY2F0aW9uO1xuICAgICAgaWYgKCFmb3JjZU5leHRQb3AgJiYgbG9jYXRpb25zQXJlRXF1YWwkJDEocHJldkxvY2F0aW9uLCBsb2NhdGlvbikpIHJldHVybjsgLy8gQSBoYXNoY2hhbmdlIGRvZXNuJ3QgYWx3YXlzID09IGxvY2F0aW9uIGNoYW5nZS5cblxuICAgICAgaWYgKGlnbm9yZVBhdGggPT09IGNyZWF0ZVBhdGgobG9jYXRpb24pKSByZXR1cm47IC8vIElnbm9yZSB0aGlzIGNoYW5nZTsgd2UgYWxyZWFkeSBzZXRTdGF0ZSBpbiBwdXNoL3JlcGxhY2UuXG5cbiAgICAgIGlnbm9yZVBhdGggPSBudWxsO1xuICAgICAgaGFuZGxlUG9wKGxvY2F0aW9uKTtcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiBoYW5kbGVQb3AobG9jYXRpb24pIHtcbiAgICBpZiAoZm9yY2VOZXh0UG9wKSB7XG4gICAgICBmb3JjZU5leHRQb3AgPSBmYWxzZTtcbiAgICAgIHNldFN0YXRlKCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHZhciBhY3Rpb24gPSAnUE9QJztcbiAgICAgIHRyYW5zaXRpb25NYW5hZ2VyLmNvbmZpcm1UcmFuc2l0aW9uVG8obG9jYXRpb24sIGFjdGlvbiwgZ2V0VXNlckNvbmZpcm1hdGlvbiwgZnVuY3Rpb24gKG9rKSB7XG4gICAgICAgIGlmIChvaykge1xuICAgICAgICAgIHNldFN0YXRlKHtcbiAgICAgICAgICAgIGFjdGlvbjogYWN0aW9uLFxuICAgICAgICAgICAgbG9jYXRpb246IGxvY2F0aW9uXG4gICAgICAgICAgfSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmV2ZXJ0UG9wKGxvY2F0aW9uKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gcmV2ZXJ0UG9wKGZyb21Mb2NhdGlvbikge1xuICAgIHZhciB0b0xvY2F0aW9uID0gaGlzdG9yeS5sb2NhdGlvbjsgLy8gVE9ETzogV2UgY291bGQgcHJvYmFibHkgbWFrZSB0aGlzIG1vcmUgcmVsaWFibGUgYnlcbiAgICAvLyBrZWVwaW5nIGEgbGlzdCBvZiBwYXRocyB3ZSd2ZSBzZWVuIGluIHNlc3Npb25TdG9yYWdlLlxuICAgIC8vIEluc3RlYWQsIHdlIGp1c3QgZGVmYXVsdCB0byAwIGZvciBwYXRocyB3ZSBkb24ndCBrbm93LlxuXG4gICAgdmFyIHRvSW5kZXggPSBhbGxQYXRocy5sYXN0SW5kZXhPZihjcmVhdGVQYXRoKHRvTG9jYXRpb24pKTtcbiAgICBpZiAodG9JbmRleCA9PT0gLTEpIHRvSW5kZXggPSAwO1xuICAgIHZhciBmcm9tSW5kZXggPSBhbGxQYXRocy5sYXN0SW5kZXhPZihjcmVhdGVQYXRoKGZyb21Mb2NhdGlvbikpO1xuICAgIGlmIChmcm9tSW5kZXggPT09IC0xKSBmcm9tSW5kZXggPSAwO1xuICAgIHZhciBkZWx0YSA9IHRvSW5kZXggLSBmcm9tSW5kZXg7XG5cbiAgICBpZiAoZGVsdGEpIHtcbiAgICAgIGZvcmNlTmV4dFBvcCA9IHRydWU7XG4gICAgICBnbyhkZWx0YSk7XG4gICAgfVxuICB9IC8vIEVuc3VyZSB0aGUgaGFzaCBpcyBlbmNvZGVkIHByb3Blcmx5IGJlZm9yZSBkb2luZyBhbnl0aGluZyBlbHNlLlxuXG5cbiAgdmFyIHBhdGggPSBnZXRIYXNoUGF0aCgpO1xuICB2YXIgZW5jb2RlZFBhdGggPSBlbmNvZGVQYXRoKHBhdGgpO1xuICBpZiAocGF0aCAhPT0gZW5jb2RlZFBhdGgpIHJlcGxhY2VIYXNoUGF0aChlbmNvZGVkUGF0aCk7XG4gIHZhciBpbml0aWFsTG9jYXRpb24gPSBnZXRET01Mb2NhdGlvbigpO1xuICB2YXIgYWxsUGF0aHMgPSBbY3JlYXRlUGF0aChpbml0aWFsTG9jYXRpb24pXTsgLy8gUHVibGljIGludGVyZmFjZVxuXG4gIGZ1bmN0aW9uIGNyZWF0ZUhyZWYobG9jYXRpb24pIHtcbiAgICB2YXIgYmFzZVRhZyA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJ2Jhc2UnKTtcbiAgICB2YXIgaHJlZiA9ICcnO1xuXG4gICAgaWYgKGJhc2VUYWcgJiYgYmFzZVRhZy5nZXRBdHRyaWJ1dGUoJ2hyZWYnKSkge1xuICAgICAgaHJlZiA9IHN0cmlwSGFzaCh3aW5kb3cubG9jYXRpb24uaHJlZik7XG4gICAgfVxuXG4gICAgcmV0dXJuIGhyZWYgKyAnIycgKyBlbmNvZGVQYXRoKGJhc2VuYW1lICsgY3JlYXRlUGF0aChsb2NhdGlvbikpO1xuICB9XG5cbiAgZnVuY3Rpb24gcHVzaChwYXRoLCBzdGF0ZSkge1xuICAgIHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIiA/IHdhcm5pbmcoc3RhdGUgPT09IHVuZGVmaW5lZCwgJ0hhc2ggaGlzdG9yeSBjYW5ub3QgcHVzaCBzdGF0ZTsgaXQgaXMgaWdub3JlZCcpIDogdm9pZCAwO1xuICAgIHZhciBhY3Rpb24gPSAnUFVTSCc7XG4gICAgdmFyIGxvY2F0aW9uID0gY3JlYXRlTG9jYXRpb24ocGF0aCwgdW5kZWZpbmVkLCB1bmRlZmluZWQsIGhpc3RvcnkubG9jYXRpb24pO1xuICAgIHRyYW5zaXRpb25NYW5hZ2VyLmNvbmZpcm1UcmFuc2l0aW9uVG8obG9jYXRpb24sIGFjdGlvbiwgZ2V0VXNlckNvbmZpcm1hdGlvbiwgZnVuY3Rpb24gKG9rKSB7XG4gICAgICBpZiAoIW9rKSByZXR1cm47XG4gICAgICB2YXIgcGF0aCA9IGNyZWF0ZVBhdGgobG9jYXRpb24pO1xuICAgICAgdmFyIGVuY29kZWRQYXRoID0gZW5jb2RlUGF0aChiYXNlbmFtZSArIHBhdGgpO1xuICAgICAgdmFyIGhhc2hDaGFuZ2VkID0gZ2V0SGFzaFBhdGgoKSAhPT0gZW5jb2RlZFBhdGg7XG5cbiAgICAgIGlmIChoYXNoQ2hhbmdlZCkge1xuICAgICAgICAvLyBXZSBjYW5ub3QgdGVsbCBpZiBhIGhhc2hjaGFuZ2Ugd2FzIGNhdXNlZCBieSBhIFBVU0gsIHNvIHdlJ2RcbiAgICAgICAgLy8gcmF0aGVyIHNldFN0YXRlIGhlcmUgYW5kIGlnbm9yZSB0aGUgaGFzaGNoYW5nZS4gVGhlIGNhdmVhdCBoZXJlXG4gICAgICAgIC8vIGlzIHRoYXQgb3RoZXIgaGFzaCBoaXN0b3JpZXMgaW4gdGhlIHBhZ2Ugd2lsbCBjb25zaWRlciBpdCBhIFBPUC5cbiAgICAgICAgaWdub3JlUGF0aCA9IHBhdGg7XG4gICAgICAgIHB1c2hIYXNoUGF0aChlbmNvZGVkUGF0aCk7XG4gICAgICAgIHZhciBwcmV2SW5kZXggPSBhbGxQYXRocy5sYXN0SW5kZXhPZihjcmVhdGVQYXRoKGhpc3RvcnkubG9jYXRpb24pKTtcbiAgICAgICAgdmFyIG5leHRQYXRocyA9IGFsbFBhdGhzLnNsaWNlKDAsIHByZXZJbmRleCArIDEpO1xuICAgICAgICBuZXh0UGF0aHMucHVzaChwYXRoKTtcbiAgICAgICAgYWxsUGF0aHMgPSBuZXh0UGF0aHM7XG4gICAgICAgIHNldFN0YXRlKHtcbiAgICAgICAgICBhY3Rpb246IGFjdGlvbixcbiAgICAgICAgICBsb2NhdGlvbjogbG9jYXRpb25cbiAgICAgICAgfSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIgPyB3YXJuaW5nKGZhbHNlLCAnSGFzaCBoaXN0b3J5IGNhbm5vdCBQVVNIIHRoZSBzYW1lIHBhdGg7IGEgbmV3IGVudHJ5IHdpbGwgbm90IGJlIGFkZGVkIHRvIHRoZSBoaXN0b3J5IHN0YWNrJykgOiB2b2lkIDA7XG4gICAgICAgIHNldFN0YXRlKCk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBmdW5jdGlvbiByZXBsYWNlKHBhdGgsIHN0YXRlKSB7XG4gICAgcHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiID8gd2FybmluZyhzdGF0ZSA9PT0gdW5kZWZpbmVkLCAnSGFzaCBoaXN0b3J5IGNhbm5vdCByZXBsYWNlIHN0YXRlOyBpdCBpcyBpZ25vcmVkJykgOiB2b2lkIDA7XG4gICAgdmFyIGFjdGlvbiA9ICdSRVBMQUNFJztcbiAgICB2YXIgbG9jYXRpb24gPSBjcmVhdGVMb2NhdGlvbihwYXRoLCB1bmRlZmluZWQsIHVuZGVmaW5lZCwgaGlzdG9yeS5sb2NhdGlvbik7XG4gICAgdHJhbnNpdGlvbk1hbmFnZXIuY29uZmlybVRyYW5zaXRpb25Ubyhsb2NhdGlvbiwgYWN0aW9uLCBnZXRVc2VyQ29uZmlybWF0aW9uLCBmdW5jdGlvbiAob2spIHtcbiAgICAgIGlmICghb2spIHJldHVybjtcbiAgICAgIHZhciBwYXRoID0gY3JlYXRlUGF0aChsb2NhdGlvbik7XG4gICAgICB2YXIgZW5jb2RlZFBhdGggPSBlbmNvZGVQYXRoKGJhc2VuYW1lICsgcGF0aCk7XG4gICAgICB2YXIgaGFzaENoYW5nZWQgPSBnZXRIYXNoUGF0aCgpICE9PSBlbmNvZGVkUGF0aDtcblxuICAgICAgaWYgKGhhc2hDaGFuZ2VkKSB7XG4gICAgICAgIC8vIFdlIGNhbm5vdCB0ZWxsIGlmIGEgaGFzaGNoYW5nZSB3YXMgY2F1c2VkIGJ5IGEgUkVQTEFDRSwgc28gd2UnZFxuICAgICAgICAvLyByYXRoZXIgc2V0U3RhdGUgaGVyZSBhbmQgaWdub3JlIHRoZSBoYXNoY2hhbmdlLiBUaGUgY2F2ZWF0IGhlcmVcbiAgICAgICAgLy8gaXMgdGhhdCBvdGhlciBoYXNoIGhpc3RvcmllcyBpbiB0aGUgcGFnZSB3aWxsIGNvbnNpZGVyIGl0IGEgUE9QLlxuICAgICAgICBpZ25vcmVQYXRoID0gcGF0aDtcbiAgICAgICAgcmVwbGFjZUhhc2hQYXRoKGVuY29kZWRQYXRoKTtcbiAgICAgIH1cblxuICAgICAgdmFyIHByZXZJbmRleCA9IGFsbFBhdGhzLmluZGV4T2YoY3JlYXRlUGF0aChoaXN0b3J5LmxvY2F0aW9uKSk7XG4gICAgICBpZiAocHJldkluZGV4ICE9PSAtMSkgYWxsUGF0aHNbcHJldkluZGV4XSA9IHBhdGg7XG4gICAgICBzZXRTdGF0ZSh7XG4gICAgICAgIGFjdGlvbjogYWN0aW9uLFxuICAgICAgICBsb2NhdGlvbjogbG9jYXRpb25cbiAgICAgIH0pO1xuICAgIH0pO1xuICB9XG5cbiAgZnVuY3Rpb24gZ28obikge1xuICAgIHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIiA/IHdhcm5pbmcoY2FuR29XaXRob3V0UmVsb2FkLCAnSGFzaCBoaXN0b3J5IGdvKG4pIGNhdXNlcyBhIGZ1bGwgcGFnZSByZWxvYWQgaW4gdGhpcyBicm93c2VyJykgOiB2b2lkIDA7XG4gICAgZ2xvYmFsSGlzdG9yeS5nbyhuKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGdvQmFjaygpIHtcbiAgICBnbygtMSk7XG4gIH1cblxuICBmdW5jdGlvbiBnb0ZvcndhcmQoKSB7XG4gICAgZ28oMSk7XG4gIH1cblxuICB2YXIgbGlzdGVuZXJDb3VudCA9IDA7XG5cbiAgZnVuY3Rpb24gY2hlY2tET01MaXN0ZW5lcnMoZGVsdGEpIHtcbiAgICBsaXN0ZW5lckNvdW50ICs9IGRlbHRhO1xuXG4gICAgaWYgKGxpc3RlbmVyQ291bnQgPT09IDEgJiYgZGVsdGEgPT09IDEpIHtcbiAgICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKEhhc2hDaGFuZ2VFdmVudCQxLCBoYW5kbGVIYXNoQ2hhbmdlKTtcbiAgICB9IGVsc2UgaWYgKGxpc3RlbmVyQ291bnQgPT09IDApIHtcbiAgICAgIHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKEhhc2hDaGFuZ2VFdmVudCQxLCBoYW5kbGVIYXNoQ2hhbmdlKTtcbiAgICB9XG4gIH1cblxuICB2YXIgaXNCbG9ja2VkID0gZmFsc2U7XG5cbiAgZnVuY3Rpb24gYmxvY2socHJvbXB0KSB7XG4gICAgaWYgKHByb21wdCA9PT0gdm9pZCAwKSB7XG4gICAgICBwcm9tcHQgPSBmYWxzZTtcbiAgICB9XG5cbiAgICB2YXIgdW5ibG9jayA9IHRyYW5zaXRpb25NYW5hZ2VyLnNldFByb21wdChwcm9tcHQpO1xuXG4gICAgaWYgKCFpc0Jsb2NrZWQpIHtcbiAgICAgIGNoZWNrRE9NTGlzdGVuZXJzKDEpO1xuICAgICAgaXNCbG9ja2VkID0gdHJ1ZTtcbiAgICB9XG5cbiAgICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgICAgaWYgKGlzQmxvY2tlZCkge1xuICAgICAgICBpc0Jsb2NrZWQgPSBmYWxzZTtcbiAgICAgICAgY2hlY2tET01MaXN0ZW5lcnMoLTEpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gdW5ibG9jaygpO1xuICAgIH07XG4gIH1cblxuICBmdW5jdGlvbiBsaXN0ZW4obGlzdGVuZXIpIHtcbiAgICB2YXIgdW5saXN0ZW4gPSB0cmFuc2l0aW9uTWFuYWdlci5hcHBlbmRMaXN0ZW5lcihsaXN0ZW5lcik7XG4gICAgY2hlY2tET01MaXN0ZW5lcnMoMSk7XG4gICAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNoZWNrRE9NTGlzdGVuZXJzKC0xKTtcbiAgICAgIHVubGlzdGVuKCk7XG4gICAgfTtcbiAgfVxuXG4gIHZhciBoaXN0b3J5ID0ge1xuICAgIGxlbmd0aDogZ2xvYmFsSGlzdG9yeS5sZW5ndGgsXG4gICAgYWN0aW9uOiAnUE9QJyxcbiAgICBsb2NhdGlvbjogaW5pdGlhbExvY2F0aW9uLFxuICAgIGNyZWF0ZUhyZWY6IGNyZWF0ZUhyZWYsXG4gICAgcHVzaDogcHVzaCxcbiAgICByZXBsYWNlOiByZXBsYWNlLFxuICAgIGdvOiBnbyxcbiAgICBnb0JhY2s6IGdvQmFjayxcbiAgICBnb0ZvcndhcmQ6IGdvRm9yd2FyZCxcbiAgICBibG9jazogYmxvY2ssXG4gICAgbGlzdGVuOiBsaXN0ZW5cbiAgfTtcbiAgcmV0dXJuIGhpc3Rvcnk7XG59XG5cbmZ1bmN0aW9uIGNsYW1wKG4sIGxvd2VyQm91bmQsIHVwcGVyQm91bmQpIHtcbiAgcmV0dXJuIE1hdGgubWluKE1hdGgubWF4KG4sIGxvd2VyQm91bmQpLCB1cHBlckJvdW5kKTtcbn1cbi8qKlxuICogQ3JlYXRlcyBhIGhpc3Rvcnkgb2JqZWN0IHRoYXQgc3RvcmVzIGxvY2F0aW9ucyBpbiBtZW1vcnkuXG4gKi9cblxuXG5mdW5jdGlvbiBjcmVhdGVNZW1vcnlIaXN0b3J5KHByb3BzKSB7XG4gIGlmIChwcm9wcyA9PT0gdm9pZCAwKSB7XG4gICAgcHJvcHMgPSB7fTtcbiAgfVxuXG4gIHZhciBfcHJvcHMgPSBwcm9wcyxcbiAgICAgIGdldFVzZXJDb25maXJtYXRpb24gPSBfcHJvcHMuZ2V0VXNlckNvbmZpcm1hdGlvbixcbiAgICAgIF9wcm9wcyRpbml0aWFsRW50cmllcyA9IF9wcm9wcy5pbml0aWFsRW50cmllcyxcbiAgICAgIGluaXRpYWxFbnRyaWVzID0gX3Byb3BzJGluaXRpYWxFbnRyaWVzID09PSB2b2lkIDAgPyBbJy8nXSA6IF9wcm9wcyRpbml0aWFsRW50cmllcyxcbiAgICAgIF9wcm9wcyRpbml0aWFsSW5kZXggPSBfcHJvcHMuaW5pdGlhbEluZGV4LFxuICAgICAgaW5pdGlhbEluZGV4ID0gX3Byb3BzJGluaXRpYWxJbmRleCA9PT0gdm9pZCAwID8gMCA6IF9wcm9wcyRpbml0aWFsSW5kZXgsXG4gICAgICBfcHJvcHMka2V5TGVuZ3RoID0gX3Byb3BzLmtleUxlbmd0aCxcbiAgICAgIGtleUxlbmd0aCA9IF9wcm9wcyRrZXlMZW5ndGggPT09IHZvaWQgMCA/IDYgOiBfcHJvcHMka2V5TGVuZ3RoO1xuICB2YXIgdHJhbnNpdGlvbk1hbmFnZXIgPSBjcmVhdGVUcmFuc2l0aW9uTWFuYWdlcigpO1xuXG4gIGZ1bmN0aW9uIHNldFN0YXRlKG5leHRTdGF0ZSkge1xuICAgIF9leHRlbmRzKGhpc3RvcnksIG5leHRTdGF0ZSk7XG5cbiAgICBoaXN0b3J5Lmxlbmd0aCA9IGhpc3RvcnkuZW50cmllcy5sZW5ndGg7XG4gICAgdHJhbnNpdGlvbk1hbmFnZXIubm90aWZ5TGlzdGVuZXJzKGhpc3RvcnkubG9jYXRpb24sIGhpc3RvcnkuYWN0aW9uKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGNyZWF0ZUtleSgpIHtcbiAgICByZXR1cm4gTWF0aC5yYW5kb20oKS50b1N0cmluZygzNikuc3Vic3RyKDIsIGtleUxlbmd0aCk7XG4gIH1cblxuICB2YXIgaW5kZXggPSBjbGFtcChpbml0aWFsSW5kZXgsIDAsIGluaXRpYWxFbnRyaWVzLmxlbmd0aCAtIDEpO1xuICB2YXIgZW50cmllcyA9IGluaXRpYWxFbnRyaWVzLm1hcChmdW5jdGlvbiAoZW50cnkpIHtcbiAgICByZXR1cm4gdHlwZW9mIGVudHJ5ID09PSAnc3RyaW5nJyA/IGNyZWF0ZUxvY2F0aW9uKGVudHJ5LCB1bmRlZmluZWQsIGNyZWF0ZUtleSgpKSA6IGNyZWF0ZUxvY2F0aW9uKGVudHJ5LCB1bmRlZmluZWQsIGVudHJ5LmtleSB8fCBjcmVhdGVLZXkoKSk7XG4gIH0pOyAvLyBQdWJsaWMgaW50ZXJmYWNlXG5cbiAgdmFyIGNyZWF0ZUhyZWYgPSBjcmVhdGVQYXRoO1xuXG4gIGZ1bmN0aW9uIHB1c2gocGF0aCwgc3RhdGUpIHtcbiAgICBwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIgPyB3YXJuaW5nKCEodHlwZW9mIHBhdGggPT09ICdvYmplY3QnICYmIHBhdGguc3RhdGUgIT09IHVuZGVmaW5lZCAmJiBzdGF0ZSAhPT0gdW5kZWZpbmVkKSwgJ1lvdSBzaG91bGQgYXZvaWQgcHJvdmlkaW5nIGEgMm5kIHN0YXRlIGFyZ3VtZW50IHRvIHB1c2ggd2hlbiB0aGUgMXN0ICcgKyAnYXJndW1lbnQgaXMgYSBsb2NhdGlvbi1saWtlIG9iamVjdCB0aGF0IGFscmVhZHkgaGFzIHN0YXRlOyBpdCBpcyBpZ25vcmVkJykgOiB2b2lkIDA7XG4gICAgdmFyIGFjdGlvbiA9ICdQVVNIJztcbiAgICB2YXIgbG9jYXRpb24gPSBjcmVhdGVMb2NhdGlvbihwYXRoLCBzdGF0ZSwgY3JlYXRlS2V5KCksIGhpc3RvcnkubG9jYXRpb24pO1xuICAgIHRyYW5zaXRpb25NYW5hZ2VyLmNvbmZpcm1UcmFuc2l0aW9uVG8obG9jYXRpb24sIGFjdGlvbiwgZ2V0VXNlckNvbmZpcm1hdGlvbiwgZnVuY3Rpb24gKG9rKSB7XG4gICAgICBpZiAoIW9rKSByZXR1cm47XG4gICAgICB2YXIgcHJldkluZGV4ID0gaGlzdG9yeS5pbmRleDtcbiAgICAgIHZhciBuZXh0SW5kZXggPSBwcmV2SW5kZXggKyAxO1xuICAgICAgdmFyIG5leHRFbnRyaWVzID0gaGlzdG9yeS5lbnRyaWVzLnNsaWNlKDApO1xuXG4gICAgICBpZiAobmV4dEVudHJpZXMubGVuZ3RoID4gbmV4dEluZGV4KSB7XG4gICAgICAgIG5leHRFbnRyaWVzLnNwbGljZShuZXh0SW5kZXgsIG5leHRFbnRyaWVzLmxlbmd0aCAtIG5leHRJbmRleCwgbG9jYXRpb24pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgbmV4dEVudHJpZXMucHVzaChsb2NhdGlvbik7XG4gICAgICB9XG5cbiAgICAgIHNldFN0YXRlKHtcbiAgICAgICAgYWN0aW9uOiBhY3Rpb24sXG4gICAgICAgIGxvY2F0aW9uOiBsb2NhdGlvbixcbiAgICAgICAgaW5kZXg6IG5leHRJbmRleCxcbiAgICAgICAgZW50cmllczogbmV4dEVudHJpZXNcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9XG5cbiAgZnVuY3Rpb24gcmVwbGFjZShwYXRoLCBzdGF0ZSkge1xuICAgIHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIiA/IHdhcm5pbmcoISh0eXBlb2YgcGF0aCA9PT0gJ29iamVjdCcgJiYgcGF0aC5zdGF0ZSAhPT0gdW5kZWZpbmVkICYmIHN0YXRlICE9PSB1bmRlZmluZWQpLCAnWW91IHNob3VsZCBhdm9pZCBwcm92aWRpbmcgYSAybmQgc3RhdGUgYXJndW1lbnQgdG8gcmVwbGFjZSB3aGVuIHRoZSAxc3QgJyArICdhcmd1bWVudCBpcyBhIGxvY2F0aW9uLWxpa2Ugb2JqZWN0IHRoYXQgYWxyZWFkeSBoYXMgc3RhdGU7IGl0IGlzIGlnbm9yZWQnKSA6IHZvaWQgMDtcbiAgICB2YXIgYWN0aW9uID0gJ1JFUExBQ0UnO1xuICAgIHZhciBsb2NhdGlvbiA9IGNyZWF0ZUxvY2F0aW9uKHBhdGgsIHN0YXRlLCBjcmVhdGVLZXkoKSwgaGlzdG9yeS5sb2NhdGlvbik7XG4gICAgdHJhbnNpdGlvbk1hbmFnZXIuY29uZmlybVRyYW5zaXRpb25Ubyhsb2NhdGlvbiwgYWN0aW9uLCBnZXRVc2VyQ29uZmlybWF0aW9uLCBmdW5jdGlvbiAob2spIHtcbiAgICAgIGlmICghb2spIHJldHVybjtcbiAgICAgIGhpc3RvcnkuZW50cmllc1toaXN0b3J5LmluZGV4XSA9IGxvY2F0aW9uO1xuICAgICAgc2V0U3RhdGUoe1xuICAgICAgICBhY3Rpb246IGFjdGlvbixcbiAgICAgICAgbG9jYXRpb246IGxvY2F0aW9uXG4gICAgICB9KTtcbiAgICB9KTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGdvKG4pIHtcbiAgICB2YXIgbmV4dEluZGV4ID0gY2xhbXAoaGlzdG9yeS5pbmRleCArIG4sIDAsIGhpc3RvcnkuZW50cmllcy5sZW5ndGggLSAxKTtcbiAgICB2YXIgYWN0aW9uID0gJ1BPUCc7XG4gICAgdmFyIGxvY2F0aW9uID0gaGlzdG9yeS5lbnRyaWVzW25leHRJbmRleF07XG4gICAgdHJhbnNpdGlvbk1hbmFnZXIuY29uZmlybVRyYW5zaXRpb25Ubyhsb2NhdGlvbiwgYWN0aW9uLCBnZXRVc2VyQ29uZmlybWF0aW9uLCBmdW5jdGlvbiAob2spIHtcbiAgICAgIGlmIChvaykge1xuICAgICAgICBzZXRTdGF0ZSh7XG4gICAgICAgICAgYWN0aW9uOiBhY3Rpb24sXG4gICAgICAgICAgbG9jYXRpb246IGxvY2F0aW9uLFxuICAgICAgICAgIGluZGV4OiBuZXh0SW5kZXhcbiAgICAgICAgfSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBNaW1pYyB0aGUgYmVoYXZpb3Igb2YgRE9NIGhpc3RvcmllcyBieVxuICAgICAgICAvLyBjYXVzaW5nIGEgcmVuZGVyIGFmdGVyIGEgY2FuY2VsbGVkIFBPUC5cbiAgICAgICAgc2V0U3RhdGUoKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGdvQmFjaygpIHtcbiAgICBnbygtMSk7XG4gIH1cblxuICBmdW5jdGlvbiBnb0ZvcndhcmQoKSB7XG4gICAgZ28oMSk7XG4gIH1cblxuICBmdW5jdGlvbiBjYW5HbyhuKSB7XG4gICAgdmFyIG5leHRJbmRleCA9IGhpc3RvcnkuaW5kZXggKyBuO1xuICAgIHJldHVybiBuZXh0SW5kZXggPj0gMCAmJiBuZXh0SW5kZXggPCBoaXN0b3J5LmVudHJpZXMubGVuZ3RoO1xuICB9XG5cbiAgZnVuY3Rpb24gYmxvY2socHJvbXB0KSB7XG4gICAgaWYgKHByb21wdCA9PT0gdm9pZCAwKSB7XG4gICAgICBwcm9tcHQgPSBmYWxzZTtcbiAgICB9XG5cbiAgICByZXR1cm4gdHJhbnNpdGlvbk1hbmFnZXIuc2V0UHJvbXB0KHByb21wdCk7XG4gIH1cblxuICBmdW5jdGlvbiBsaXN0ZW4obGlzdGVuZXIpIHtcbiAgICByZXR1cm4gdHJhbnNpdGlvbk1hbmFnZXIuYXBwZW5kTGlzdGVuZXIobGlzdGVuZXIpO1xuICB9XG5cbiAgdmFyIGhpc3RvcnkgPSB7XG4gICAgbGVuZ3RoOiBlbnRyaWVzLmxlbmd0aCxcbiAgICBhY3Rpb246ICdQT1AnLFxuICAgIGxvY2F0aW9uOiBlbnRyaWVzW2luZGV4XSxcbiAgICBpbmRleDogaW5kZXgsXG4gICAgZW50cmllczogZW50cmllcyxcbiAgICBjcmVhdGVIcmVmOiBjcmVhdGVIcmVmLFxuICAgIHB1c2g6IHB1c2gsXG4gICAgcmVwbGFjZTogcmVwbGFjZSxcbiAgICBnbzogZ28sXG4gICAgZ29CYWNrOiBnb0JhY2ssXG4gICAgZ29Gb3J3YXJkOiBnb0ZvcndhcmQsXG4gICAgY2FuR286IGNhbkdvLFxuICAgIGJsb2NrOiBibG9jayxcbiAgICBsaXN0ZW46IGxpc3RlblxuICB9O1xuICByZXR1cm4gaGlzdG9yeTtcbn1cblxuZXhwb3J0IHsgY3JlYXRlQnJvd3Nlckhpc3RvcnksIGNyZWF0ZUhhc2hIaXN0b3J5LCBjcmVhdGVNZW1vcnlIaXN0b3J5LCBjcmVhdGVMb2NhdGlvbiwgbG9jYXRpb25zQXJlRXF1YWwsIHBhcnNlUGF0aCwgY3JlYXRlUGF0aCB9O1xuIiwiaW1wb3J0IF9pbmhlcml0c0xvb3NlIGZyb20gJ0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2luaGVyaXRzTG9vc2UnO1xuaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG5pbXBvcnQgeyBjcmVhdGVNZW1vcnlIaXN0b3J5LCBjcmVhdGVMb2NhdGlvbiwgbG9jYXRpb25zQXJlRXF1YWwsIGNyZWF0ZVBhdGggfSBmcm9tICdoaXN0b3J5JztcbmltcG9ydCB3YXJuaW5nIGZyb20gJ3Rpbnktd2FybmluZyc7XG5pbXBvcnQgaW52YXJpYW50IGZyb20gJ3RpbnktaW52YXJpYW50JztcbmltcG9ydCBfZXh0ZW5kcyBmcm9tICdAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9leHRlbmRzJztcbmltcG9ydCBwYXRoVG9SZWdleHAgZnJvbSAncGF0aC10by1yZWdleHAnO1xuaW1wb3J0IHsgaXNWYWxpZEVsZW1lbnRUeXBlIH0gZnJvbSAncmVhY3QtaXMnO1xuaW1wb3J0IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIGZyb20gJ0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UnO1xuaW1wb3J0IGhvaXN0U3RhdGljcyBmcm9tICdob2lzdC1ub24tcmVhY3Qtc3RhdGljcyc7XG5cbnZhciBNQVhfU0lHTkVEXzMxX0JJVF9JTlQgPSAxMDczNzQxODIzO1xudmFyIGNvbW1vbmpzR2xvYmFsID0gdHlwZW9mIGdsb2JhbFRoaXMgIT09IFwidW5kZWZpbmVkXCIgLy8gJ2dsb2JhbCBwcm9wZXInXG4/IC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11bmRlZlxuZ2xvYmFsVGhpcyA6IHR5cGVvZiB3aW5kb3cgIT09IFwidW5kZWZpbmVkXCIgPyB3aW5kb3cgLy8gQnJvd3NlclxuOiB0eXBlb2YgZ2xvYmFsICE9PSBcInVuZGVmaW5lZFwiID8gZ2xvYmFsIC8vIG5vZGUuanNcbjoge307XG5cbmZ1bmN0aW9uIGdldFVuaXF1ZUlkKCkge1xuICB2YXIga2V5ID0gXCJfX2dsb2JhbF91bmlxdWVfaWRfX1wiO1xuICByZXR1cm4gY29tbW9uanNHbG9iYWxba2V5XSA9IChjb21tb25qc0dsb2JhbFtrZXldIHx8IDApICsgMTtcbn0gLy8gSW5saW5lZCBPYmplY3QuaXMgcG9seWZpbGwuXG4vLyBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9KYXZhU2NyaXB0L1JlZmVyZW5jZS9HbG9iYWxfT2JqZWN0cy9PYmplY3QvaXNcblxuXG5mdW5jdGlvbiBvYmplY3RJcyh4LCB5KSB7XG4gIGlmICh4ID09PSB5KSB7XG4gICAgcmV0dXJuIHggIT09IDAgfHwgMSAvIHggPT09IDEgLyB5O1xuICB9IGVsc2Uge1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1zZWxmLWNvbXBhcmVcbiAgICByZXR1cm4geCAhPT0geCAmJiB5ICE9PSB5O1xuICB9XG59XG5cbmZ1bmN0aW9uIGNyZWF0ZUV2ZW50RW1pdHRlcih2YWx1ZSkge1xuICB2YXIgaGFuZGxlcnMgPSBbXTtcbiAgcmV0dXJuIHtcbiAgICBvbjogZnVuY3Rpb24gb24oaGFuZGxlcikge1xuICAgICAgaGFuZGxlcnMucHVzaChoYW5kbGVyKTtcbiAgICB9LFxuICAgIG9mZjogZnVuY3Rpb24gb2ZmKGhhbmRsZXIpIHtcbiAgICAgIGhhbmRsZXJzID0gaGFuZGxlcnMuZmlsdGVyKGZ1bmN0aW9uIChoKSB7XG4gICAgICAgIHJldHVybiBoICE9PSBoYW5kbGVyO1xuICAgICAgfSk7XG4gICAgfSxcbiAgICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICAgIHJldHVybiB2YWx1ZTtcbiAgICB9LFxuICAgIHNldDogZnVuY3Rpb24gc2V0KG5ld1ZhbHVlLCBjaGFuZ2VkQml0cykge1xuICAgICAgdmFsdWUgPSBuZXdWYWx1ZTtcbiAgICAgIGhhbmRsZXJzLmZvckVhY2goZnVuY3Rpb24gKGhhbmRsZXIpIHtcbiAgICAgICAgcmV0dXJuIGhhbmRsZXIodmFsdWUsIGNoYW5nZWRCaXRzKTtcbiAgICAgIH0pO1xuICAgIH1cbiAgfTtcbn1cblxuZnVuY3Rpb24gb25seUNoaWxkKGNoaWxkcmVuKSB7XG4gIHJldHVybiBBcnJheS5pc0FycmF5KGNoaWxkcmVuKSA/IGNoaWxkcmVuWzBdIDogY2hpbGRyZW47XG59XG5cbmZ1bmN0aW9uIGNyZWF0ZVJlYWN0Q29udGV4dChkZWZhdWx0VmFsdWUsIGNhbGN1bGF0ZUNoYW5nZWRCaXRzKSB7XG4gIHZhciBfUHJvdmlkZXIkY2hpbGRDb250ZXgsIF9Db25zdW1lciRjb250ZXh0VHlwZTtcblxuICB2YXIgY29udGV4dFByb3AgPSBcIl9fY3JlYXRlLXJlYWN0LWNvbnRleHQtXCIgKyBnZXRVbmlxdWVJZCgpICsgXCJfX1wiO1xuXG4gIHZhciBQcm92aWRlciA9IC8qI19fUFVSRV9fKi9mdW5jdGlvbiAoX1JlYWN0JENvbXBvbmVudCkge1xuICAgIF9pbmhlcml0c0xvb3NlKFByb3ZpZGVyLCBfUmVhY3QkQ29tcG9uZW50KTtcblxuICAgIGZ1bmN0aW9uIFByb3ZpZGVyKCkge1xuICAgICAgdmFyIF90aGlzO1xuXG4gICAgICBmb3IgKHZhciBfbGVuID0gYXJndW1lbnRzLmxlbmd0aCwgYXJncyA9IG5ldyBBcnJheShfbGVuKSwgX2tleSA9IDA7IF9rZXkgPCBfbGVuOyBfa2V5KyspIHtcbiAgICAgICAgYXJnc1tfa2V5XSA9IGFyZ3VtZW50c1tfa2V5XTtcbiAgICAgIH1cblxuICAgICAgX3RoaXMgPSBfUmVhY3QkQ29tcG9uZW50LmNhbGwuYXBwbHkoX1JlYWN0JENvbXBvbmVudCwgW3RoaXNdLmNvbmNhdChhcmdzKSkgfHwgdGhpcztcbiAgICAgIF90aGlzLmVtaXR0ZXIgPSBjcmVhdGVFdmVudEVtaXR0ZXIoX3RoaXMucHJvcHMudmFsdWUpO1xuICAgICAgcmV0dXJuIF90aGlzO1xuICAgIH1cblxuICAgIHZhciBfcHJvdG8gPSBQcm92aWRlci5wcm90b3R5cGU7XG5cbiAgICBfcHJvdG8uZ2V0Q2hpbGRDb250ZXh0ID0gZnVuY3Rpb24gZ2V0Q2hpbGRDb250ZXh0KCkge1xuICAgICAgdmFyIF9yZWY7XG5cbiAgICAgIHJldHVybiBfcmVmID0ge30sIF9yZWZbY29udGV4dFByb3BdID0gdGhpcy5lbWl0dGVyLCBfcmVmO1xuICAgIH07XG5cbiAgICBfcHJvdG8uY29tcG9uZW50V2lsbFJlY2VpdmVQcm9wcyA9IGZ1bmN0aW9uIGNvbXBvbmVudFdpbGxSZWNlaXZlUHJvcHMobmV4dFByb3BzKSB7XG4gICAgICBpZiAodGhpcy5wcm9wcy52YWx1ZSAhPT0gbmV4dFByb3BzLnZhbHVlKSB7XG4gICAgICAgIHZhciBvbGRWYWx1ZSA9IHRoaXMucHJvcHMudmFsdWU7XG4gICAgICAgIHZhciBuZXdWYWx1ZSA9IG5leHRQcm9wcy52YWx1ZTtcbiAgICAgICAgdmFyIGNoYW5nZWRCaXRzO1xuXG4gICAgICAgIGlmIChvYmplY3RJcyhvbGRWYWx1ZSwgbmV3VmFsdWUpKSB7XG4gICAgICAgICAgY2hhbmdlZEJpdHMgPSAwOyAvLyBObyBjaGFuZ2VcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBjaGFuZ2VkQml0cyA9IHR5cGVvZiBjYWxjdWxhdGVDaGFuZ2VkQml0cyA9PT0gXCJmdW5jdGlvblwiID8gY2FsY3VsYXRlQ2hhbmdlZEJpdHMob2xkVmFsdWUsIG5ld1ZhbHVlKSA6IE1BWF9TSUdORURfMzFfQklUX0lOVDtcblxuICAgICAgICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIpIHtcbiAgICAgICAgICAgIHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIiA/IHdhcm5pbmcoKGNoYW5nZWRCaXRzICYgTUFYX1NJR05FRF8zMV9CSVRfSU5UKSA9PT0gY2hhbmdlZEJpdHMsIFwiY2FsY3VsYXRlQ2hhbmdlZEJpdHM6IEV4cGVjdGVkIHRoZSByZXR1cm4gdmFsdWUgdG8gYmUgYSBcIiArIFwiMzEtYml0IGludGVnZXIuIEluc3RlYWQgcmVjZWl2ZWQ6IFwiICsgY2hhbmdlZEJpdHMpIDogdm9pZCAwO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGNoYW5nZWRCaXRzIHw9IDA7XG5cbiAgICAgICAgICBpZiAoY2hhbmdlZEJpdHMgIT09IDApIHtcbiAgICAgICAgICAgIHRoaXMuZW1pdHRlci5zZXQobmV4dFByb3BzLnZhbHVlLCBjaGFuZ2VkQml0cyk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfTtcblxuICAgIF9wcm90by5yZW5kZXIgPSBmdW5jdGlvbiByZW5kZXIoKSB7XG4gICAgICByZXR1cm4gdGhpcy5wcm9wcy5jaGlsZHJlbjtcbiAgICB9O1xuXG4gICAgcmV0dXJuIFByb3ZpZGVyO1xuICB9KFJlYWN0LkNvbXBvbmVudCk7XG5cbiAgUHJvdmlkZXIuY2hpbGRDb250ZXh0VHlwZXMgPSAoX1Byb3ZpZGVyJGNoaWxkQ29udGV4ID0ge30sIF9Qcm92aWRlciRjaGlsZENvbnRleFtjb250ZXh0UHJvcF0gPSBQcm9wVHlwZXMub2JqZWN0LmlzUmVxdWlyZWQsIF9Qcm92aWRlciRjaGlsZENvbnRleCk7XG5cbiAgdmFyIENvbnN1bWVyID0gLyojX19QVVJFX18qL2Z1bmN0aW9uIChfUmVhY3QkQ29tcG9uZW50Mikge1xuICAgIF9pbmhlcml0c0xvb3NlKENvbnN1bWVyLCBfUmVhY3QkQ29tcG9uZW50Mik7XG5cbiAgICBmdW5jdGlvbiBDb25zdW1lcigpIHtcbiAgICAgIHZhciBfdGhpczI7XG5cbiAgICAgIGZvciAodmFyIF9sZW4yID0gYXJndW1lbnRzLmxlbmd0aCwgYXJncyA9IG5ldyBBcnJheShfbGVuMiksIF9rZXkyID0gMDsgX2tleTIgPCBfbGVuMjsgX2tleTIrKykge1xuICAgICAgICBhcmdzW19rZXkyXSA9IGFyZ3VtZW50c1tfa2V5Ml07XG4gICAgICB9XG5cbiAgICAgIF90aGlzMiA9IF9SZWFjdCRDb21wb25lbnQyLmNhbGwuYXBwbHkoX1JlYWN0JENvbXBvbmVudDIsIFt0aGlzXS5jb25jYXQoYXJncykpIHx8IHRoaXM7XG4gICAgICBfdGhpczIub2JzZXJ2ZWRCaXRzID0gdm9pZCAwO1xuICAgICAgX3RoaXMyLnN0YXRlID0ge1xuICAgICAgICB2YWx1ZTogX3RoaXMyLmdldFZhbHVlKClcbiAgICAgIH07XG5cbiAgICAgIF90aGlzMi5vblVwZGF0ZSA9IGZ1bmN0aW9uIChuZXdWYWx1ZSwgY2hhbmdlZEJpdHMpIHtcbiAgICAgICAgdmFyIG9ic2VydmVkQml0cyA9IF90aGlzMi5vYnNlcnZlZEJpdHMgfCAwO1xuXG4gICAgICAgIGlmICgob2JzZXJ2ZWRCaXRzICYgY2hhbmdlZEJpdHMpICE9PSAwKSB7XG4gICAgICAgICAgX3RoaXMyLnNldFN0YXRlKHtcbiAgICAgICAgICAgIHZhbHVlOiBfdGhpczIuZ2V0VmFsdWUoKVxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9O1xuXG4gICAgICByZXR1cm4gX3RoaXMyO1xuICAgIH1cblxuICAgIHZhciBfcHJvdG8yID0gQ29uc3VtZXIucHJvdG90eXBlO1xuXG4gICAgX3Byb3RvMi5jb21wb25lbnRXaWxsUmVjZWl2ZVByb3BzID0gZnVuY3Rpb24gY29tcG9uZW50V2lsbFJlY2VpdmVQcm9wcyhuZXh0UHJvcHMpIHtcbiAgICAgIHZhciBvYnNlcnZlZEJpdHMgPSBuZXh0UHJvcHMub2JzZXJ2ZWRCaXRzO1xuICAgICAgdGhpcy5vYnNlcnZlZEJpdHMgPSBvYnNlcnZlZEJpdHMgPT09IHVuZGVmaW5lZCB8fCBvYnNlcnZlZEJpdHMgPT09IG51bGwgPyBNQVhfU0lHTkVEXzMxX0JJVF9JTlQgLy8gU3Vic2NyaWJlIHRvIGFsbCBjaGFuZ2VzIGJ5IGRlZmF1bHRcbiAgICAgIDogb2JzZXJ2ZWRCaXRzO1xuICAgIH07XG5cbiAgICBfcHJvdG8yLmNvbXBvbmVudERpZE1vdW50ID0gZnVuY3Rpb24gY29tcG9uZW50RGlkTW91bnQoKSB7XG4gICAgICBpZiAodGhpcy5jb250ZXh0W2NvbnRleHRQcm9wXSkge1xuICAgICAgICB0aGlzLmNvbnRleHRbY29udGV4dFByb3BdLm9uKHRoaXMub25VcGRhdGUpO1xuICAgICAgfVxuXG4gICAgICB2YXIgb2JzZXJ2ZWRCaXRzID0gdGhpcy5wcm9wcy5vYnNlcnZlZEJpdHM7XG4gICAgICB0aGlzLm9ic2VydmVkQml0cyA9IG9ic2VydmVkQml0cyA9PT0gdW5kZWZpbmVkIHx8IG9ic2VydmVkQml0cyA9PT0gbnVsbCA/IE1BWF9TSUdORURfMzFfQklUX0lOVCAvLyBTdWJzY3JpYmUgdG8gYWxsIGNoYW5nZXMgYnkgZGVmYXVsdFxuICAgICAgOiBvYnNlcnZlZEJpdHM7XG4gICAgfTtcblxuICAgIF9wcm90bzIuY29tcG9uZW50V2lsbFVubW91bnQgPSBmdW5jdGlvbiBjb21wb25lbnRXaWxsVW5tb3VudCgpIHtcbiAgICAgIGlmICh0aGlzLmNvbnRleHRbY29udGV4dFByb3BdKSB7XG4gICAgICAgIHRoaXMuY29udGV4dFtjb250ZXh0UHJvcF0ub2ZmKHRoaXMub25VcGRhdGUpO1xuICAgICAgfVxuICAgIH07XG5cbiAgICBfcHJvdG8yLmdldFZhbHVlID0gZnVuY3Rpb24gZ2V0VmFsdWUoKSB7XG4gICAgICBpZiAodGhpcy5jb250ZXh0W2NvbnRleHRQcm9wXSkge1xuICAgICAgICByZXR1cm4gdGhpcy5jb250ZXh0W2NvbnRleHRQcm9wXS5nZXQoKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBkZWZhdWx0VmFsdWU7XG4gICAgICB9XG4gICAgfTtcblxuICAgIF9wcm90bzIucmVuZGVyID0gZnVuY3Rpb24gcmVuZGVyKCkge1xuICAgICAgcmV0dXJuIG9ubHlDaGlsZCh0aGlzLnByb3BzLmNoaWxkcmVuKSh0aGlzLnN0YXRlLnZhbHVlKTtcbiAgICB9O1xuXG4gICAgcmV0dXJuIENvbnN1bWVyO1xuICB9KFJlYWN0LkNvbXBvbmVudCk7XG5cbiAgQ29uc3VtZXIuY29udGV4dFR5cGVzID0gKF9Db25zdW1lciRjb250ZXh0VHlwZSA9IHt9LCBfQ29uc3VtZXIkY29udGV4dFR5cGVbY29udGV4dFByb3BdID0gUHJvcFR5cGVzLm9iamVjdCwgX0NvbnN1bWVyJGNvbnRleHRUeXBlKTtcbiAgcmV0dXJuIHtcbiAgICBQcm92aWRlcjogUHJvdmlkZXIsXG4gICAgQ29uc3VtZXI6IENvbnN1bWVyXG4gIH07XG59XG5cbi8vIE1JVCBMaWNlbnNlXG52YXIgY3JlYXRlQ29udGV4dCA9IFJlYWN0LmNyZWF0ZUNvbnRleHQgfHwgY3JlYXRlUmVhY3RDb250ZXh0O1xuXG4vLyBUT0RPOiBSZXBsYWNlIHdpdGggUmVhY3QuY3JlYXRlQ29udGV4dCBvbmNlIHdlIGNhbiBhc3N1bWUgUmVhY3QgMTYrXG5cbnZhciBjcmVhdGVOYW1lZENvbnRleHQgPSBmdW5jdGlvbiBjcmVhdGVOYW1lZENvbnRleHQobmFtZSkge1xuICB2YXIgY29udGV4dCA9IGNyZWF0ZUNvbnRleHQoKTtcbiAgY29udGV4dC5kaXNwbGF5TmFtZSA9IG5hbWU7XG4gIHJldHVybiBjb250ZXh0O1xufTtcblxudmFyIGhpc3RvcnlDb250ZXh0ID0gLyojX19QVVJFX18qL2NyZWF0ZU5hbWVkQ29udGV4dChcIlJvdXRlci1IaXN0b3J5XCIpO1xuXG52YXIgY29udGV4dCA9IC8qI19fUFVSRV9fKi9jcmVhdGVOYW1lZENvbnRleHQoXCJSb3V0ZXJcIik7XG5cbi8qKlxuICogVGhlIHB1YmxpYyBBUEkgZm9yIHB1dHRpbmcgaGlzdG9yeSBvbiBjb250ZXh0LlxuICovXG5cbnZhciBSb3V0ZXIgPSAvKiNfX1BVUkVfXyovZnVuY3Rpb24gKF9SZWFjdCRDb21wb25lbnQpIHtcbiAgX2luaGVyaXRzTG9vc2UoUm91dGVyLCBfUmVhY3QkQ29tcG9uZW50KTtcblxuICBSb3V0ZXIuY29tcHV0ZVJvb3RNYXRjaCA9IGZ1bmN0aW9uIGNvbXB1dGVSb290TWF0Y2gocGF0aG5hbWUpIHtcbiAgICByZXR1cm4ge1xuICAgICAgcGF0aDogXCIvXCIsXG4gICAgICB1cmw6IFwiL1wiLFxuICAgICAgcGFyYW1zOiB7fSxcbiAgICAgIGlzRXhhY3Q6IHBhdGhuYW1lID09PSBcIi9cIlxuICAgIH07XG4gIH07XG5cbiAgZnVuY3Rpb24gUm91dGVyKHByb3BzKSB7XG4gICAgdmFyIF90aGlzO1xuXG4gICAgX3RoaXMgPSBfUmVhY3QkQ29tcG9uZW50LmNhbGwodGhpcywgcHJvcHMpIHx8IHRoaXM7XG4gICAgX3RoaXMuc3RhdGUgPSB7XG4gICAgICBsb2NhdGlvbjogcHJvcHMuaGlzdG9yeS5sb2NhdGlvblxuICAgIH07IC8vIFRoaXMgaXMgYSBiaXQgb2YgYSBoYWNrLiBXZSBoYXZlIHRvIHN0YXJ0IGxpc3RlbmluZyBmb3IgbG9jYXRpb25cbiAgICAvLyBjaGFuZ2VzIGhlcmUgaW4gdGhlIGNvbnN0cnVjdG9yIGluIGNhc2UgdGhlcmUgYXJlIGFueSA8UmVkaXJlY3Q+c1xuICAgIC8vIG9uIHRoZSBpbml0aWFsIHJlbmRlci4gSWYgdGhlcmUgYXJlLCB0aGV5IHdpbGwgcmVwbGFjZS9wdXNoIHdoZW5cbiAgICAvLyB0aGV5IG1vdW50IGFuZCBzaW5jZSBjRE0gZmlyZXMgaW4gY2hpbGRyZW4gYmVmb3JlIHBhcmVudHMsIHdlIG1heVxuICAgIC8vIGdldCBhIG5ldyBsb2NhdGlvbiBiZWZvcmUgdGhlIDxSb3V0ZXI+IGlzIG1vdW50ZWQuXG5cbiAgICBfdGhpcy5faXNNb3VudGVkID0gZmFsc2U7XG4gICAgX3RoaXMuX3BlbmRpbmdMb2NhdGlvbiA9IG51bGw7XG5cbiAgICBpZiAoIXByb3BzLnN0YXRpY0NvbnRleHQpIHtcbiAgICAgIF90aGlzLnVubGlzdGVuID0gcHJvcHMuaGlzdG9yeS5saXN0ZW4oZnVuY3Rpb24gKGxvY2F0aW9uKSB7XG4gICAgICAgIF90aGlzLl9wZW5kaW5nTG9jYXRpb24gPSBsb2NhdGlvbjtcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIHJldHVybiBfdGhpcztcbiAgfVxuXG4gIHZhciBfcHJvdG8gPSBSb3V0ZXIucHJvdG90eXBlO1xuXG4gIF9wcm90by5jb21wb25lbnREaWRNb3VudCA9IGZ1bmN0aW9uIGNvbXBvbmVudERpZE1vdW50KCkge1xuICAgIHZhciBfdGhpczIgPSB0aGlzO1xuXG4gICAgdGhpcy5faXNNb3VudGVkID0gdHJ1ZTtcblxuICAgIGlmICh0aGlzLnVubGlzdGVuKSB7XG4gICAgICAvLyBBbnkgcHJlLW1vdW50IGxvY2F0aW9uIGNoYW5nZXMgaGF2ZSBiZWVuIGNhcHR1cmVkIGF0XG4gICAgICAvLyB0aGlzIHBvaW50LCBzbyB1bnJlZ2lzdGVyIHRoZSBsaXN0ZW5lci5cbiAgICAgIHRoaXMudW5saXN0ZW4oKTtcbiAgICB9XG5cbiAgICBpZiAoIXRoaXMucHJvcHMuc3RhdGljQ29udGV4dCkge1xuICAgICAgdGhpcy51bmxpc3RlbiA9IHRoaXMucHJvcHMuaGlzdG9yeS5saXN0ZW4oZnVuY3Rpb24gKGxvY2F0aW9uKSB7XG4gICAgICAgIGlmIChfdGhpczIuX2lzTW91bnRlZCkge1xuICAgICAgICAgIF90aGlzMi5zZXRTdGF0ZSh7XG4gICAgICAgICAgICBsb2NhdGlvbjogbG9jYXRpb25cbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuX3BlbmRpbmdMb2NhdGlvbikge1xuICAgICAgdGhpcy5zZXRTdGF0ZSh7XG4gICAgICAgIGxvY2F0aW9uOiB0aGlzLl9wZW5kaW5nTG9jYXRpb25cbiAgICAgIH0pO1xuICAgIH1cbiAgfTtcblxuICBfcHJvdG8uY29tcG9uZW50V2lsbFVubW91bnQgPSBmdW5jdGlvbiBjb21wb25lbnRXaWxsVW5tb3VudCgpIHtcbiAgICBpZiAodGhpcy51bmxpc3Rlbikge1xuICAgICAgdGhpcy51bmxpc3RlbigpO1xuICAgICAgdGhpcy5faXNNb3VudGVkID0gZmFsc2U7XG4gICAgICB0aGlzLl9wZW5kaW5nTG9jYXRpb24gPSBudWxsO1xuICAgIH1cbiAgfTtcblxuICBfcHJvdG8ucmVuZGVyID0gZnVuY3Rpb24gcmVuZGVyKCkge1xuICAgIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChjb250ZXh0LlByb3ZpZGVyLCB7XG4gICAgICB2YWx1ZToge1xuICAgICAgICBoaXN0b3J5OiB0aGlzLnByb3BzLmhpc3RvcnksXG4gICAgICAgIGxvY2F0aW9uOiB0aGlzLnN0YXRlLmxvY2F0aW9uLFxuICAgICAgICBtYXRjaDogUm91dGVyLmNvbXB1dGVSb290TWF0Y2godGhpcy5zdGF0ZS5sb2NhdGlvbi5wYXRobmFtZSksXG4gICAgICAgIHN0YXRpY0NvbnRleHQ6IHRoaXMucHJvcHMuc3RhdGljQ29udGV4dFxuICAgICAgfVxuICAgIH0sIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KGhpc3RvcnlDb250ZXh0LlByb3ZpZGVyLCB7XG4gICAgICBjaGlsZHJlbjogdGhpcy5wcm9wcy5jaGlsZHJlbiB8fCBudWxsLFxuICAgICAgdmFsdWU6IHRoaXMucHJvcHMuaGlzdG9yeVxuICAgIH0pKTtcbiAgfTtcblxuICByZXR1cm4gUm91dGVyO1xufShSZWFjdC5Db21wb25lbnQpO1xuXG5pZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiKSB7XG4gIFJvdXRlci5wcm9wVHlwZXMgPSB7XG4gICAgY2hpbGRyZW46IFByb3BUeXBlcy5ub2RlLFxuICAgIGhpc3Rvcnk6IFByb3BUeXBlcy5vYmplY3QuaXNSZXF1aXJlZCxcbiAgICBzdGF0aWNDb250ZXh0OiBQcm9wVHlwZXMub2JqZWN0XG4gIH07XG5cbiAgUm91dGVyLnByb3RvdHlwZS5jb21wb25lbnREaWRVcGRhdGUgPSBmdW5jdGlvbiAocHJldlByb3BzKSB7XG4gICAgcHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiID8gd2FybmluZyhwcmV2UHJvcHMuaGlzdG9yeSA9PT0gdGhpcy5wcm9wcy5oaXN0b3J5LCBcIllvdSBjYW5ub3QgY2hhbmdlIDxSb3V0ZXIgaGlzdG9yeT5cIikgOiB2b2lkIDA7XG4gIH07XG59XG5cbi8qKlxuICogVGhlIHB1YmxpYyBBUEkgZm9yIGEgPFJvdXRlcj4gdGhhdCBzdG9yZXMgbG9jYXRpb24gaW4gbWVtb3J5LlxuICovXG5cbnZhciBNZW1vcnlSb3V0ZXIgPSAvKiNfX1BVUkVfXyovZnVuY3Rpb24gKF9SZWFjdCRDb21wb25lbnQpIHtcbiAgX2luaGVyaXRzTG9vc2UoTWVtb3J5Um91dGVyLCBfUmVhY3QkQ29tcG9uZW50KTtcblxuICBmdW5jdGlvbiBNZW1vcnlSb3V0ZXIoKSB7XG4gICAgdmFyIF90aGlzO1xuXG4gICAgZm9yICh2YXIgX2xlbiA9IGFyZ3VtZW50cy5sZW5ndGgsIGFyZ3MgPSBuZXcgQXJyYXkoX2xlbiksIF9rZXkgPSAwOyBfa2V5IDwgX2xlbjsgX2tleSsrKSB7XG4gICAgICBhcmdzW19rZXldID0gYXJndW1lbnRzW19rZXldO1xuICAgIH1cblxuICAgIF90aGlzID0gX1JlYWN0JENvbXBvbmVudC5jYWxsLmFwcGx5KF9SZWFjdCRDb21wb25lbnQsIFt0aGlzXS5jb25jYXQoYXJncykpIHx8IHRoaXM7XG4gICAgX3RoaXMuaGlzdG9yeSA9IGNyZWF0ZU1lbW9yeUhpc3RvcnkoX3RoaXMucHJvcHMpO1xuICAgIHJldHVybiBfdGhpcztcbiAgfVxuXG4gIHZhciBfcHJvdG8gPSBNZW1vcnlSb3V0ZXIucHJvdG90eXBlO1xuXG4gIF9wcm90by5yZW5kZXIgPSBmdW5jdGlvbiByZW5kZXIoKSB7XG4gICAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFJvdXRlciwge1xuICAgICAgaGlzdG9yeTogdGhpcy5oaXN0b3J5LFxuICAgICAgY2hpbGRyZW46IHRoaXMucHJvcHMuY2hpbGRyZW5cbiAgICB9KTtcbiAgfTtcblxuICByZXR1cm4gTWVtb3J5Um91dGVyO1xufShSZWFjdC5Db21wb25lbnQpO1xuXG5pZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiKSB7XG4gIE1lbW9yeVJvdXRlci5wcm9wVHlwZXMgPSB7XG4gICAgaW5pdGlhbEVudHJpZXM6IFByb3BUeXBlcy5hcnJheSxcbiAgICBpbml0aWFsSW5kZXg6IFByb3BUeXBlcy5udW1iZXIsXG4gICAgZ2V0VXNlckNvbmZpcm1hdGlvbjogUHJvcFR5cGVzLmZ1bmMsXG4gICAga2V5TGVuZ3RoOiBQcm9wVHlwZXMubnVtYmVyLFxuICAgIGNoaWxkcmVuOiBQcm9wVHlwZXMubm9kZVxuICB9O1xuXG4gIE1lbW9yeVJvdXRlci5wcm90b3R5cGUuY29tcG9uZW50RGlkTW91bnQgPSBmdW5jdGlvbiAoKSB7XG4gICAgcHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiID8gd2FybmluZyghdGhpcy5wcm9wcy5oaXN0b3J5LCBcIjxNZW1vcnlSb3V0ZXI+IGlnbm9yZXMgdGhlIGhpc3RvcnkgcHJvcC4gVG8gdXNlIGEgY3VzdG9tIGhpc3RvcnksIFwiICsgXCJ1c2UgYGltcG9ydCB7IFJvdXRlciB9YCBpbnN0ZWFkIG9mIGBpbXBvcnQgeyBNZW1vcnlSb3V0ZXIgYXMgUm91dGVyIH1gLlwiKSA6IHZvaWQgMDtcbiAgfTtcbn1cblxudmFyIExpZmVjeWNsZSA9IC8qI19fUFVSRV9fKi9mdW5jdGlvbiAoX1JlYWN0JENvbXBvbmVudCkge1xuICBfaW5oZXJpdHNMb29zZShMaWZlY3ljbGUsIF9SZWFjdCRDb21wb25lbnQpO1xuXG4gIGZ1bmN0aW9uIExpZmVjeWNsZSgpIHtcbiAgICByZXR1cm4gX1JlYWN0JENvbXBvbmVudC5hcHBseSh0aGlzLCBhcmd1bWVudHMpIHx8IHRoaXM7XG4gIH1cblxuICB2YXIgX3Byb3RvID0gTGlmZWN5Y2xlLnByb3RvdHlwZTtcblxuICBfcHJvdG8uY29tcG9uZW50RGlkTW91bnQgPSBmdW5jdGlvbiBjb21wb25lbnREaWRNb3VudCgpIHtcbiAgICBpZiAodGhpcy5wcm9wcy5vbk1vdW50KSB0aGlzLnByb3BzLm9uTW91bnQuY2FsbCh0aGlzLCB0aGlzKTtcbiAgfTtcblxuICBfcHJvdG8uY29tcG9uZW50RGlkVXBkYXRlID0gZnVuY3Rpb24gY29tcG9uZW50RGlkVXBkYXRlKHByZXZQcm9wcykge1xuICAgIGlmICh0aGlzLnByb3BzLm9uVXBkYXRlKSB0aGlzLnByb3BzLm9uVXBkYXRlLmNhbGwodGhpcywgdGhpcywgcHJldlByb3BzKTtcbiAgfTtcblxuICBfcHJvdG8uY29tcG9uZW50V2lsbFVubW91bnQgPSBmdW5jdGlvbiBjb21wb25lbnRXaWxsVW5tb3VudCgpIHtcbiAgICBpZiAodGhpcy5wcm9wcy5vblVubW91bnQpIHRoaXMucHJvcHMub25Vbm1vdW50LmNhbGwodGhpcywgdGhpcyk7XG4gIH07XG5cbiAgX3Byb3RvLnJlbmRlciA9IGZ1bmN0aW9uIHJlbmRlcigpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfTtcblxuICByZXR1cm4gTGlmZWN5Y2xlO1xufShSZWFjdC5Db21wb25lbnQpO1xuXG4vKipcbiAqIFRoZSBwdWJsaWMgQVBJIGZvciBwcm9tcHRpbmcgdGhlIHVzZXIgYmVmb3JlIG5hdmlnYXRpbmcgYXdheSBmcm9tIGEgc2NyZWVuLlxuICovXG5cbmZ1bmN0aW9uIFByb21wdChfcmVmKSB7XG4gIHZhciBtZXNzYWdlID0gX3JlZi5tZXNzYWdlLFxuICAgICAgX3JlZiR3aGVuID0gX3JlZi53aGVuLFxuICAgICAgd2hlbiA9IF9yZWYkd2hlbiA9PT0gdm9pZCAwID8gdHJ1ZSA6IF9yZWYkd2hlbjtcbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KGNvbnRleHQuQ29uc3VtZXIsIG51bGwsIGZ1bmN0aW9uIChjb250ZXh0KSB7XG4gICAgIWNvbnRleHQgPyBwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIgPyBpbnZhcmlhbnQoZmFsc2UsIFwiWW91IHNob3VsZCBub3QgdXNlIDxQcm9tcHQ+IG91dHNpZGUgYSA8Um91dGVyPlwiKSA6IGludmFyaWFudChmYWxzZSkgOiB2b2lkIDA7XG4gICAgaWYgKCF3aGVuIHx8IGNvbnRleHQuc3RhdGljQ29udGV4dCkgcmV0dXJuIG51bGw7XG4gICAgdmFyIG1ldGhvZCA9IGNvbnRleHQuaGlzdG9yeS5ibG9jaztcbiAgICByZXR1cm4gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoTGlmZWN5Y2xlLCB7XG4gICAgICBvbk1vdW50OiBmdW5jdGlvbiBvbk1vdW50KHNlbGYpIHtcbiAgICAgICAgc2VsZi5yZWxlYXNlID0gbWV0aG9kKG1lc3NhZ2UpO1xuICAgICAgfSxcbiAgICAgIG9uVXBkYXRlOiBmdW5jdGlvbiBvblVwZGF0ZShzZWxmLCBwcmV2UHJvcHMpIHtcbiAgICAgICAgaWYgKHByZXZQcm9wcy5tZXNzYWdlICE9PSBtZXNzYWdlKSB7XG4gICAgICAgICAgc2VsZi5yZWxlYXNlKCk7XG4gICAgICAgICAgc2VsZi5yZWxlYXNlID0gbWV0aG9kKG1lc3NhZ2UpO1xuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgb25Vbm1vdW50OiBmdW5jdGlvbiBvblVubW91bnQoc2VsZikge1xuICAgICAgICBzZWxmLnJlbGVhc2UoKTtcbiAgICAgIH0sXG4gICAgICBtZXNzYWdlOiBtZXNzYWdlXG4gICAgfSk7XG4gIH0pO1xufVxuXG5pZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiKSB7XG4gIHZhciBtZXNzYWdlVHlwZSA9IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5mdW5jLCBQcm9wVHlwZXMuc3RyaW5nXSk7XG4gIFByb21wdC5wcm9wVHlwZXMgPSB7XG4gICAgd2hlbjogUHJvcFR5cGVzLmJvb2wsXG4gICAgbWVzc2FnZTogbWVzc2FnZVR5cGUuaXNSZXF1aXJlZFxuICB9O1xufVxuXG52YXIgY2FjaGUgPSB7fTtcbnZhciBjYWNoZUxpbWl0ID0gMTAwMDA7XG52YXIgY2FjaGVDb3VudCA9IDA7XG5cbmZ1bmN0aW9uIGNvbXBpbGVQYXRoKHBhdGgpIHtcbiAgaWYgKGNhY2hlW3BhdGhdKSByZXR1cm4gY2FjaGVbcGF0aF07XG4gIHZhciBnZW5lcmF0b3IgPSBwYXRoVG9SZWdleHAuY29tcGlsZShwYXRoKTtcblxuICBpZiAoY2FjaGVDb3VudCA8IGNhY2hlTGltaXQpIHtcbiAgICBjYWNoZVtwYXRoXSA9IGdlbmVyYXRvcjtcbiAgICBjYWNoZUNvdW50Kys7XG4gIH1cblxuICByZXR1cm4gZ2VuZXJhdG9yO1xufVxuLyoqXG4gKiBQdWJsaWMgQVBJIGZvciBnZW5lcmF0aW5nIGEgVVJMIHBhdGhuYW1lIGZyb20gYSBwYXRoIGFuZCBwYXJhbWV0ZXJzLlxuICovXG5cblxuZnVuY3Rpb24gZ2VuZXJhdGVQYXRoKHBhdGgsIHBhcmFtcykge1xuICBpZiAocGF0aCA9PT0gdm9pZCAwKSB7XG4gICAgcGF0aCA9IFwiL1wiO1xuICB9XG5cbiAgaWYgKHBhcmFtcyA9PT0gdm9pZCAwKSB7XG4gICAgcGFyYW1zID0ge307XG4gIH1cblxuICByZXR1cm4gcGF0aCA9PT0gXCIvXCIgPyBwYXRoIDogY29tcGlsZVBhdGgocGF0aCkocGFyYW1zLCB7XG4gICAgcHJldHR5OiB0cnVlXG4gIH0pO1xufVxuXG4vKipcbiAqIFRoZSBwdWJsaWMgQVBJIGZvciBuYXZpZ2F0aW5nIHByb2dyYW1tYXRpY2FsbHkgd2l0aCBhIGNvbXBvbmVudC5cbiAqL1xuXG5mdW5jdGlvbiBSZWRpcmVjdChfcmVmKSB7XG4gIHZhciBjb21wdXRlZE1hdGNoID0gX3JlZi5jb21wdXRlZE1hdGNoLFxuICAgICAgdG8gPSBfcmVmLnRvLFxuICAgICAgX3JlZiRwdXNoID0gX3JlZi5wdXNoLFxuICAgICAgcHVzaCA9IF9yZWYkcHVzaCA9PT0gdm9pZCAwID8gZmFsc2UgOiBfcmVmJHB1c2g7XG4gIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChjb250ZXh0LkNvbnN1bWVyLCBudWxsLCBmdW5jdGlvbiAoY29udGV4dCkge1xuICAgICFjb250ZXh0ID8gcHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiID8gaW52YXJpYW50KGZhbHNlLCBcIllvdSBzaG91bGQgbm90IHVzZSA8UmVkaXJlY3Q+IG91dHNpZGUgYSA8Um91dGVyPlwiKSA6IGludmFyaWFudChmYWxzZSkgOiB2b2lkIDA7XG4gICAgdmFyIGhpc3RvcnkgPSBjb250ZXh0Lmhpc3RvcnksXG4gICAgICAgIHN0YXRpY0NvbnRleHQgPSBjb250ZXh0LnN0YXRpY0NvbnRleHQ7XG4gICAgdmFyIG1ldGhvZCA9IHB1c2ggPyBoaXN0b3J5LnB1c2ggOiBoaXN0b3J5LnJlcGxhY2U7XG4gICAgdmFyIGxvY2F0aW9uID0gY3JlYXRlTG9jYXRpb24oY29tcHV0ZWRNYXRjaCA/IHR5cGVvZiB0byA9PT0gXCJzdHJpbmdcIiA/IGdlbmVyYXRlUGF0aCh0bywgY29tcHV0ZWRNYXRjaC5wYXJhbXMpIDogX2V4dGVuZHMoe30sIHRvLCB7XG4gICAgICBwYXRobmFtZTogZ2VuZXJhdGVQYXRoKHRvLnBhdGhuYW1lLCBjb21wdXRlZE1hdGNoLnBhcmFtcylcbiAgICB9KSA6IHRvKTsgLy8gV2hlbiByZW5kZXJpbmcgaW4gYSBzdGF0aWMgY29udGV4dCxcbiAgICAvLyBzZXQgdGhlIG5ldyBsb2NhdGlvbiBpbW1lZGlhdGVseS5cblxuICAgIGlmIChzdGF0aWNDb250ZXh0KSB7XG4gICAgICBtZXRob2QobG9jYXRpb24pO1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KExpZmVjeWNsZSwge1xuICAgICAgb25Nb3VudDogZnVuY3Rpb24gb25Nb3VudCgpIHtcbiAgICAgICAgbWV0aG9kKGxvY2F0aW9uKTtcbiAgICAgIH0sXG4gICAgICBvblVwZGF0ZTogZnVuY3Rpb24gb25VcGRhdGUoc2VsZiwgcHJldlByb3BzKSB7XG4gICAgICAgIHZhciBwcmV2TG9jYXRpb24gPSBjcmVhdGVMb2NhdGlvbihwcmV2UHJvcHMudG8pO1xuXG4gICAgICAgIGlmICghbG9jYXRpb25zQXJlRXF1YWwocHJldkxvY2F0aW9uLCBfZXh0ZW5kcyh7fSwgbG9jYXRpb24sIHtcbiAgICAgICAgICBrZXk6IHByZXZMb2NhdGlvbi5rZXlcbiAgICAgICAgfSkpKSB7XG4gICAgICAgICAgbWV0aG9kKGxvY2F0aW9uKTtcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIHRvOiB0b1xuICAgIH0pO1xuICB9KTtcbn1cblxuaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIikge1xuICBSZWRpcmVjdC5wcm9wVHlwZXMgPSB7XG4gICAgcHVzaDogUHJvcFR5cGVzLmJvb2wsXG4gICAgZnJvbTogUHJvcFR5cGVzLnN0cmluZyxcbiAgICB0bzogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLnN0cmluZywgUHJvcFR5cGVzLm9iamVjdF0pLmlzUmVxdWlyZWRcbiAgfTtcbn1cblxudmFyIGNhY2hlJDEgPSB7fTtcbnZhciBjYWNoZUxpbWl0JDEgPSAxMDAwMDtcbnZhciBjYWNoZUNvdW50JDEgPSAwO1xuXG5mdW5jdGlvbiBjb21waWxlUGF0aCQxKHBhdGgsIG9wdGlvbnMpIHtcbiAgdmFyIGNhY2hlS2V5ID0gXCJcIiArIG9wdGlvbnMuZW5kICsgb3B0aW9ucy5zdHJpY3QgKyBvcHRpb25zLnNlbnNpdGl2ZTtcbiAgdmFyIHBhdGhDYWNoZSA9IGNhY2hlJDFbY2FjaGVLZXldIHx8IChjYWNoZSQxW2NhY2hlS2V5XSA9IHt9KTtcbiAgaWYgKHBhdGhDYWNoZVtwYXRoXSkgcmV0dXJuIHBhdGhDYWNoZVtwYXRoXTtcbiAgdmFyIGtleXMgPSBbXTtcbiAgdmFyIHJlZ2V4cCA9IHBhdGhUb1JlZ2V4cChwYXRoLCBrZXlzLCBvcHRpb25zKTtcbiAgdmFyIHJlc3VsdCA9IHtcbiAgICByZWdleHA6IHJlZ2V4cCxcbiAgICBrZXlzOiBrZXlzXG4gIH07XG5cbiAgaWYgKGNhY2hlQ291bnQkMSA8IGNhY2hlTGltaXQkMSkge1xuICAgIHBhdGhDYWNoZVtwYXRoXSA9IHJlc3VsdDtcbiAgICBjYWNoZUNvdW50JDErKztcbiAgfVxuXG4gIHJldHVybiByZXN1bHQ7XG59XG4vKipcbiAqIFB1YmxpYyBBUEkgZm9yIG1hdGNoaW5nIGEgVVJMIHBhdGhuYW1lIHRvIGEgcGF0aC5cbiAqL1xuXG5cbmZ1bmN0aW9uIG1hdGNoUGF0aChwYXRobmFtZSwgb3B0aW9ucykge1xuICBpZiAob3B0aW9ucyA9PT0gdm9pZCAwKSB7XG4gICAgb3B0aW9ucyA9IHt9O1xuICB9XG5cbiAgaWYgKHR5cGVvZiBvcHRpb25zID09PSBcInN0cmluZ1wiIHx8IEFycmF5LmlzQXJyYXkob3B0aW9ucykpIHtcbiAgICBvcHRpb25zID0ge1xuICAgICAgcGF0aDogb3B0aW9uc1xuICAgIH07XG4gIH1cblxuICB2YXIgX29wdGlvbnMgPSBvcHRpb25zLFxuICAgICAgcGF0aCA9IF9vcHRpb25zLnBhdGgsXG4gICAgICBfb3B0aW9ucyRleGFjdCA9IF9vcHRpb25zLmV4YWN0LFxuICAgICAgZXhhY3QgPSBfb3B0aW9ucyRleGFjdCA9PT0gdm9pZCAwID8gZmFsc2UgOiBfb3B0aW9ucyRleGFjdCxcbiAgICAgIF9vcHRpb25zJHN0cmljdCA9IF9vcHRpb25zLnN0cmljdCxcbiAgICAgIHN0cmljdCA9IF9vcHRpb25zJHN0cmljdCA9PT0gdm9pZCAwID8gZmFsc2UgOiBfb3B0aW9ucyRzdHJpY3QsXG4gICAgICBfb3B0aW9ucyRzZW5zaXRpdmUgPSBfb3B0aW9ucy5zZW5zaXRpdmUsXG4gICAgICBzZW5zaXRpdmUgPSBfb3B0aW9ucyRzZW5zaXRpdmUgPT09IHZvaWQgMCA/IGZhbHNlIDogX29wdGlvbnMkc2Vuc2l0aXZlO1xuICB2YXIgcGF0aHMgPSBbXS5jb25jYXQocGF0aCk7XG4gIHJldHVybiBwYXRocy5yZWR1Y2UoZnVuY3Rpb24gKG1hdGNoZWQsIHBhdGgpIHtcbiAgICBpZiAoIXBhdGggJiYgcGF0aCAhPT0gXCJcIikgcmV0dXJuIG51bGw7XG4gICAgaWYgKG1hdGNoZWQpIHJldHVybiBtYXRjaGVkO1xuXG4gICAgdmFyIF9jb21waWxlUGF0aCA9IGNvbXBpbGVQYXRoJDEocGF0aCwge1xuICAgICAgZW5kOiBleGFjdCxcbiAgICAgIHN0cmljdDogc3RyaWN0LFxuICAgICAgc2Vuc2l0aXZlOiBzZW5zaXRpdmVcbiAgICB9KSxcbiAgICAgICAgcmVnZXhwID0gX2NvbXBpbGVQYXRoLnJlZ2V4cCxcbiAgICAgICAga2V5cyA9IF9jb21waWxlUGF0aC5rZXlzO1xuXG4gICAgdmFyIG1hdGNoID0gcmVnZXhwLmV4ZWMocGF0aG5hbWUpO1xuICAgIGlmICghbWF0Y2gpIHJldHVybiBudWxsO1xuICAgIHZhciB1cmwgPSBtYXRjaFswXSxcbiAgICAgICAgdmFsdWVzID0gbWF0Y2guc2xpY2UoMSk7XG4gICAgdmFyIGlzRXhhY3QgPSBwYXRobmFtZSA9PT0gdXJsO1xuICAgIGlmIChleGFjdCAmJiAhaXNFeGFjdCkgcmV0dXJuIG51bGw7XG4gICAgcmV0dXJuIHtcbiAgICAgIHBhdGg6IHBhdGgsXG4gICAgICAvLyB0aGUgcGF0aCB1c2VkIHRvIG1hdGNoXG4gICAgICB1cmw6IHBhdGggPT09IFwiL1wiICYmIHVybCA9PT0gXCJcIiA/IFwiL1wiIDogdXJsLFxuICAgICAgLy8gdGhlIG1hdGNoZWQgcG9ydGlvbiBvZiB0aGUgVVJMXG4gICAgICBpc0V4YWN0OiBpc0V4YWN0LFxuICAgICAgLy8gd2hldGhlciBvciBub3Qgd2UgbWF0Y2hlZCBleGFjdGx5XG4gICAgICBwYXJhbXM6IGtleXMucmVkdWNlKGZ1bmN0aW9uIChtZW1vLCBrZXksIGluZGV4KSB7XG4gICAgICAgIG1lbW9ba2V5Lm5hbWVdID0gdmFsdWVzW2luZGV4XTtcbiAgICAgICAgcmV0dXJuIG1lbW87XG4gICAgICB9LCB7fSlcbiAgICB9O1xuICB9LCBudWxsKTtcbn1cblxuZnVuY3Rpb24gaXNFbXB0eUNoaWxkcmVuKGNoaWxkcmVuKSB7XG4gIHJldHVybiBSZWFjdC5DaGlsZHJlbi5jb3VudChjaGlsZHJlbikgPT09IDA7XG59XG5cbmZ1bmN0aW9uIGV2YWxDaGlsZHJlbkRldihjaGlsZHJlbiwgcHJvcHMsIHBhdGgpIHtcbiAgdmFyIHZhbHVlID0gY2hpbGRyZW4ocHJvcHMpO1xuICBwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIgPyB3YXJuaW5nKHZhbHVlICE9PSB1bmRlZmluZWQsIFwiWW91IHJldHVybmVkIGB1bmRlZmluZWRgIGZyb20gdGhlIGBjaGlsZHJlbmAgZnVuY3Rpb24gb2YgXCIgKyAoXCI8Um91dGVcIiArIChwYXRoID8gXCIgcGF0aD1cXFwiXCIgKyBwYXRoICsgXCJcXFwiXCIgOiBcIlwiKSArIFwiPiwgYnV0IHlvdSBcIikgKyBcInNob3VsZCBoYXZlIHJldHVybmVkIGEgUmVhY3QgZWxlbWVudCBvciBgbnVsbGBcIikgOiB2b2lkIDA7XG4gIHJldHVybiB2YWx1ZSB8fCBudWxsO1xufVxuLyoqXG4gKiBUaGUgcHVibGljIEFQSSBmb3IgbWF0Y2hpbmcgYSBzaW5nbGUgcGF0aCBhbmQgcmVuZGVyaW5nLlxuICovXG5cblxudmFyIFJvdXRlID0gLyojX19QVVJFX18qL2Z1bmN0aW9uIChfUmVhY3QkQ29tcG9uZW50KSB7XG4gIF9pbmhlcml0c0xvb3NlKFJvdXRlLCBfUmVhY3QkQ29tcG9uZW50KTtcblxuICBmdW5jdGlvbiBSb3V0ZSgpIHtcbiAgICByZXR1cm4gX1JlYWN0JENvbXBvbmVudC5hcHBseSh0aGlzLCBhcmd1bWVudHMpIHx8IHRoaXM7XG4gIH1cblxuICB2YXIgX3Byb3RvID0gUm91dGUucHJvdG90eXBlO1xuXG4gIF9wcm90by5yZW5kZXIgPSBmdW5jdGlvbiByZW5kZXIoKSB7XG4gICAgdmFyIF90aGlzID0gdGhpcztcblxuICAgIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChjb250ZXh0LkNvbnN1bWVyLCBudWxsLCBmdW5jdGlvbiAoY29udGV4dCQxKSB7XG4gICAgICAhY29udGV4dCQxID8gcHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiID8gaW52YXJpYW50KGZhbHNlLCBcIllvdSBzaG91bGQgbm90IHVzZSA8Um91dGU+IG91dHNpZGUgYSA8Um91dGVyPlwiKSA6IGludmFyaWFudChmYWxzZSkgOiB2b2lkIDA7XG4gICAgICB2YXIgbG9jYXRpb24gPSBfdGhpcy5wcm9wcy5sb2NhdGlvbiB8fCBjb250ZXh0JDEubG9jYXRpb247XG4gICAgICB2YXIgbWF0Y2ggPSBfdGhpcy5wcm9wcy5jb21wdXRlZE1hdGNoID8gX3RoaXMucHJvcHMuY29tcHV0ZWRNYXRjaCAvLyA8U3dpdGNoPiBhbHJlYWR5IGNvbXB1dGVkIHRoZSBtYXRjaCBmb3IgdXNcbiAgICAgIDogX3RoaXMucHJvcHMucGF0aCA/IG1hdGNoUGF0aChsb2NhdGlvbi5wYXRobmFtZSwgX3RoaXMucHJvcHMpIDogY29udGV4dCQxLm1hdGNoO1xuXG4gICAgICB2YXIgcHJvcHMgPSBfZXh0ZW5kcyh7fSwgY29udGV4dCQxLCB7XG4gICAgICAgIGxvY2F0aW9uOiBsb2NhdGlvbixcbiAgICAgICAgbWF0Y2g6IG1hdGNoXG4gICAgICB9KTtcblxuICAgICAgdmFyIF90aGlzJHByb3BzID0gX3RoaXMucHJvcHMsXG4gICAgICAgICAgY2hpbGRyZW4gPSBfdGhpcyRwcm9wcy5jaGlsZHJlbixcbiAgICAgICAgICBjb21wb25lbnQgPSBfdGhpcyRwcm9wcy5jb21wb25lbnQsXG4gICAgICAgICAgcmVuZGVyID0gX3RoaXMkcHJvcHMucmVuZGVyOyAvLyBQcmVhY3QgdXNlcyBhbiBlbXB0eSBhcnJheSBhcyBjaGlsZHJlbiBieVxuICAgICAgLy8gZGVmYXVsdCwgc28gdXNlIG51bGwgaWYgdGhhdCdzIHRoZSBjYXNlLlxuXG4gICAgICBpZiAoQXJyYXkuaXNBcnJheShjaGlsZHJlbikgJiYgaXNFbXB0eUNoaWxkcmVuKGNoaWxkcmVuKSkge1xuICAgICAgICBjaGlsZHJlbiA9IG51bGw7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChjb250ZXh0LlByb3ZpZGVyLCB7XG4gICAgICAgIHZhbHVlOiBwcm9wc1xuICAgICAgfSwgcHJvcHMubWF0Y2ggPyBjaGlsZHJlbiA/IHR5cGVvZiBjaGlsZHJlbiA9PT0gXCJmdW5jdGlvblwiID8gcHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiID8gZXZhbENoaWxkcmVuRGV2KGNoaWxkcmVuLCBwcm9wcywgX3RoaXMucHJvcHMucGF0aCkgOiBjaGlsZHJlbihwcm9wcykgOiBjaGlsZHJlbiA6IGNvbXBvbmVudCA/IC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KGNvbXBvbmVudCwgcHJvcHMpIDogcmVuZGVyID8gcmVuZGVyKHByb3BzKSA6IG51bGwgOiB0eXBlb2YgY2hpbGRyZW4gPT09IFwiZnVuY3Rpb25cIiA/IHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIiA/IGV2YWxDaGlsZHJlbkRldihjaGlsZHJlbiwgcHJvcHMsIF90aGlzLnByb3BzLnBhdGgpIDogY2hpbGRyZW4ocHJvcHMpIDogbnVsbCk7XG4gICAgfSk7XG4gIH07XG5cbiAgcmV0dXJuIFJvdXRlO1xufShSZWFjdC5Db21wb25lbnQpO1xuXG5pZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiKSB7XG4gIFJvdXRlLnByb3BUeXBlcyA9IHtcbiAgICBjaGlsZHJlbjogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLmZ1bmMsIFByb3BUeXBlcy5ub2RlXSksXG4gICAgY29tcG9uZW50OiBmdW5jdGlvbiBjb21wb25lbnQocHJvcHMsIHByb3BOYW1lKSB7XG4gICAgICBpZiAocHJvcHNbcHJvcE5hbWVdICYmICFpc1ZhbGlkRWxlbWVudFR5cGUocHJvcHNbcHJvcE5hbWVdKSkge1xuICAgICAgICByZXR1cm4gbmV3IEVycm9yKFwiSW52YWxpZCBwcm9wICdjb21wb25lbnQnIHN1cHBsaWVkIHRvICdSb3V0ZSc6IHRoZSBwcm9wIGlzIG5vdCBhIHZhbGlkIFJlYWN0IGNvbXBvbmVudFwiKTtcbiAgICAgIH1cbiAgICB9LFxuICAgIGV4YWN0OiBQcm9wVHlwZXMuYm9vbCxcbiAgICBsb2NhdGlvbjogUHJvcFR5cGVzLm9iamVjdCxcbiAgICBwYXRoOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuc3RyaW5nLCBQcm9wVHlwZXMuYXJyYXlPZihQcm9wVHlwZXMuc3RyaW5nKV0pLFxuICAgIHJlbmRlcjogUHJvcFR5cGVzLmZ1bmMsXG4gICAgc2Vuc2l0aXZlOiBQcm9wVHlwZXMuYm9vbCxcbiAgICBzdHJpY3Q6IFByb3BUeXBlcy5ib29sXG4gIH07XG5cbiAgUm91dGUucHJvdG90eXBlLmNvbXBvbmVudERpZE1vdW50ID0gZnVuY3Rpb24gKCkge1xuICAgIHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIiA/IHdhcm5pbmcoISh0aGlzLnByb3BzLmNoaWxkcmVuICYmICFpc0VtcHR5Q2hpbGRyZW4odGhpcy5wcm9wcy5jaGlsZHJlbikgJiYgdGhpcy5wcm9wcy5jb21wb25lbnQpLCBcIllvdSBzaG91bGQgbm90IHVzZSA8Um91dGUgY29tcG9uZW50PiBhbmQgPFJvdXRlIGNoaWxkcmVuPiBpbiB0aGUgc2FtZSByb3V0ZTsgPFJvdXRlIGNvbXBvbmVudD4gd2lsbCBiZSBpZ25vcmVkXCIpIDogdm9pZCAwO1xuICAgIHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIiA/IHdhcm5pbmcoISh0aGlzLnByb3BzLmNoaWxkcmVuICYmICFpc0VtcHR5Q2hpbGRyZW4odGhpcy5wcm9wcy5jaGlsZHJlbikgJiYgdGhpcy5wcm9wcy5yZW5kZXIpLCBcIllvdSBzaG91bGQgbm90IHVzZSA8Um91dGUgcmVuZGVyPiBhbmQgPFJvdXRlIGNoaWxkcmVuPiBpbiB0aGUgc2FtZSByb3V0ZTsgPFJvdXRlIHJlbmRlcj4gd2lsbCBiZSBpZ25vcmVkXCIpIDogdm9pZCAwO1xuICAgIHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIiA/IHdhcm5pbmcoISh0aGlzLnByb3BzLmNvbXBvbmVudCAmJiB0aGlzLnByb3BzLnJlbmRlciksIFwiWW91IHNob3VsZCBub3QgdXNlIDxSb3V0ZSBjb21wb25lbnQ+IGFuZCA8Um91dGUgcmVuZGVyPiBpbiB0aGUgc2FtZSByb3V0ZTsgPFJvdXRlIHJlbmRlcj4gd2lsbCBiZSBpZ25vcmVkXCIpIDogdm9pZCAwO1xuICB9O1xuXG4gIFJvdXRlLnByb3RvdHlwZS5jb21wb25lbnREaWRVcGRhdGUgPSBmdW5jdGlvbiAocHJldlByb3BzKSB7XG4gICAgcHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiID8gd2FybmluZyghKHRoaXMucHJvcHMubG9jYXRpb24gJiYgIXByZXZQcm9wcy5sb2NhdGlvbiksICc8Um91dGU+IGVsZW1lbnRzIHNob3VsZCBub3QgY2hhbmdlIGZyb20gdW5jb250cm9sbGVkIHRvIGNvbnRyb2xsZWQgKG9yIHZpY2UgdmVyc2EpLiBZb3UgaW5pdGlhbGx5IHVzZWQgbm8gXCJsb2NhdGlvblwiIHByb3AgYW5kIHRoZW4gcHJvdmlkZWQgb25lIG9uIGEgc3Vic2VxdWVudCByZW5kZXIuJykgOiB2b2lkIDA7XG4gICAgcHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiID8gd2FybmluZyghKCF0aGlzLnByb3BzLmxvY2F0aW9uICYmIHByZXZQcm9wcy5sb2NhdGlvbiksICc8Um91dGU+IGVsZW1lbnRzIHNob3VsZCBub3QgY2hhbmdlIGZyb20gY29udHJvbGxlZCB0byB1bmNvbnRyb2xsZWQgKG9yIHZpY2UgdmVyc2EpLiBZb3UgcHJvdmlkZWQgYSBcImxvY2F0aW9uXCIgcHJvcCBpbml0aWFsbHkgYnV0IG9taXR0ZWQgaXQgb24gYSBzdWJzZXF1ZW50IHJlbmRlci4nKSA6IHZvaWQgMDtcbiAgfTtcbn1cblxuZnVuY3Rpb24gYWRkTGVhZGluZ1NsYXNoKHBhdGgpIHtcbiAgcmV0dXJuIHBhdGguY2hhckF0KDApID09PSBcIi9cIiA/IHBhdGggOiBcIi9cIiArIHBhdGg7XG59XG5cbmZ1bmN0aW9uIGFkZEJhc2VuYW1lKGJhc2VuYW1lLCBsb2NhdGlvbikge1xuICBpZiAoIWJhc2VuYW1lKSByZXR1cm4gbG9jYXRpb247XG4gIHJldHVybiBfZXh0ZW5kcyh7fSwgbG9jYXRpb24sIHtcbiAgICBwYXRobmFtZTogYWRkTGVhZGluZ1NsYXNoKGJhc2VuYW1lKSArIGxvY2F0aW9uLnBhdGhuYW1lXG4gIH0pO1xufVxuXG5mdW5jdGlvbiBzdHJpcEJhc2VuYW1lKGJhc2VuYW1lLCBsb2NhdGlvbikge1xuICBpZiAoIWJhc2VuYW1lKSByZXR1cm4gbG9jYXRpb247XG4gIHZhciBiYXNlID0gYWRkTGVhZGluZ1NsYXNoKGJhc2VuYW1lKTtcbiAgaWYgKGxvY2F0aW9uLnBhdGhuYW1lLmluZGV4T2YoYmFzZSkgIT09IDApIHJldHVybiBsb2NhdGlvbjtcbiAgcmV0dXJuIF9leHRlbmRzKHt9LCBsb2NhdGlvbiwge1xuICAgIHBhdGhuYW1lOiBsb2NhdGlvbi5wYXRobmFtZS5zdWJzdHIoYmFzZS5sZW5ndGgpXG4gIH0pO1xufVxuXG5mdW5jdGlvbiBjcmVhdGVVUkwobG9jYXRpb24pIHtcbiAgcmV0dXJuIHR5cGVvZiBsb2NhdGlvbiA9PT0gXCJzdHJpbmdcIiA/IGxvY2F0aW9uIDogY3JlYXRlUGF0aChsb2NhdGlvbik7XG59XG5cbmZ1bmN0aW9uIHN0YXRpY0hhbmRsZXIobWV0aG9kTmFtZSkge1xuICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgICBwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIgPyBpbnZhcmlhbnQoZmFsc2UsIFwiWW91IGNhbm5vdCAlcyB3aXRoIDxTdGF0aWNSb3V0ZXI+XCIsIG1ldGhvZE5hbWUpIDogaW52YXJpYW50KGZhbHNlKSA7XG4gIH07XG59XG5cbmZ1bmN0aW9uIG5vb3AoKSB7fVxuLyoqXG4gKiBUaGUgcHVibGljIHRvcC1sZXZlbCBBUEkgZm9yIGEgXCJzdGF0aWNcIiA8Um91dGVyPiwgc28tY2FsbGVkIGJlY2F1c2UgaXRcbiAqIGNhbid0IGFjdHVhbGx5IGNoYW5nZSB0aGUgY3VycmVudCBsb2NhdGlvbi4gSW5zdGVhZCwgaXQganVzdCByZWNvcmRzXG4gKiBsb2NhdGlvbiBjaGFuZ2VzIGluIGEgY29udGV4dCBvYmplY3QuIFVzZWZ1bCBtYWlubHkgaW4gdGVzdGluZyBhbmRcbiAqIHNlcnZlci1yZW5kZXJpbmcgc2NlbmFyaW9zLlxuICovXG5cblxudmFyIFN0YXRpY1JvdXRlciA9IC8qI19fUFVSRV9fKi9mdW5jdGlvbiAoX1JlYWN0JENvbXBvbmVudCkge1xuICBfaW5oZXJpdHNMb29zZShTdGF0aWNSb3V0ZXIsIF9SZWFjdCRDb21wb25lbnQpO1xuXG4gIGZ1bmN0aW9uIFN0YXRpY1JvdXRlcigpIHtcbiAgICB2YXIgX3RoaXM7XG5cbiAgICBmb3IgKHZhciBfbGVuID0gYXJndW1lbnRzLmxlbmd0aCwgYXJncyA9IG5ldyBBcnJheShfbGVuKSwgX2tleSA9IDA7IF9rZXkgPCBfbGVuOyBfa2V5KyspIHtcbiAgICAgIGFyZ3NbX2tleV0gPSBhcmd1bWVudHNbX2tleV07XG4gICAgfVxuXG4gICAgX3RoaXMgPSBfUmVhY3QkQ29tcG9uZW50LmNhbGwuYXBwbHkoX1JlYWN0JENvbXBvbmVudCwgW3RoaXNdLmNvbmNhdChhcmdzKSkgfHwgdGhpcztcblxuICAgIF90aGlzLmhhbmRsZVB1c2ggPSBmdW5jdGlvbiAobG9jYXRpb24pIHtcbiAgICAgIHJldHVybiBfdGhpcy5uYXZpZ2F0ZVRvKGxvY2F0aW9uLCBcIlBVU0hcIik7XG4gICAgfTtcblxuICAgIF90aGlzLmhhbmRsZVJlcGxhY2UgPSBmdW5jdGlvbiAobG9jYXRpb24pIHtcbiAgICAgIHJldHVybiBfdGhpcy5uYXZpZ2F0ZVRvKGxvY2F0aW9uLCBcIlJFUExBQ0VcIik7XG4gICAgfTtcblxuICAgIF90aGlzLmhhbmRsZUxpc3RlbiA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIHJldHVybiBub29wO1xuICAgIH07XG5cbiAgICBfdGhpcy5oYW5kbGVCbG9jayA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIHJldHVybiBub29wO1xuICAgIH07XG5cbiAgICByZXR1cm4gX3RoaXM7XG4gIH1cblxuICB2YXIgX3Byb3RvID0gU3RhdGljUm91dGVyLnByb3RvdHlwZTtcblxuICBfcHJvdG8ubmF2aWdhdGVUbyA9IGZ1bmN0aW9uIG5hdmlnYXRlVG8obG9jYXRpb24sIGFjdGlvbikge1xuICAgIHZhciBfdGhpcyRwcm9wcyA9IHRoaXMucHJvcHMsXG4gICAgICAgIF90aGlzJHByb3BzJGJhc2VuYW1lID0gX3RoaXMkcHJvcHMuYmFzZW5hbWUsXG4gICAgICAgIGJhc2VuYW1lID0gX3RoaXMkcHJvcHMkYmFzZW5hbWUgPT09IHZvaWQgMCA/IFwiXCIgOiBfdGhpcyRwcm9wcyRiYXNlbmFtZSxcbiAgICAgICAgX3RoaXMkcHJvcHMkY29udGV4dCA9IF90aGlzJHByb3BzLmNvbnRleHQsXG4gICAgICAgIGNvbnRleHQgPSBfdGhpcyRwcm9wcyRjb250ZXh0ID09PSB2b2lkIDAgPyB7fSA6IF90aGlzJHByb3BzJGNvbnRleHQ7XG4gICAgY29udGV4dC5hY3Rpb24gPSBhY3Rpb247XG4gICAgY29udGV4dC5sb2NhdGlvbiA9IGFkZEJhc2VuYW1lKGJhc2VuYW1lLCBjcmVhdGVMb2NhdGlvbihsb2NhdGlvbikpO1xuICAgIGNvbnRleHQudXJsID0gY3JlYXRlVVJMKGNvbnRleHQubG9jYXRpb24pO1xuICB9O1xuXG4gIF9wcm90by5yZW5kZXIgPSBmdW5jdGlvbiByZW5kZXIoKSB7XG4gICAgdmFyIF90aGlzJHByb3BzMiA9IHRoaXMucHJvcHMsXG4gICAgICAgIF90aGlzJHByb3BzMiRiYXNlbmFtZSA9IF90aGlzJHByb3BzMi5iYXNlbmFtZSxcbiAgICAgICAgYmFzZW5hbWUgPSBfdGhpcyRwcm9wczIkYmFzZW5hbWUgPT09IHZvaWQgMCA/IFwiXCIgOiBfdGhpcyRwcm9wczIkYmFzZW5hbWUsXG4gICAgICAgIF90aGlzJHByb3BzMiRjb250ZXh0ID0gX3RoaXMkcHJvcHMyLmNvbnRleHQsXG4gICAgICAgIGNvbnRleHQgPSBfdGhpcyRwcm9wczIkY29udGV4dCA9PT0gdm9pZCAwID8ge30gOiBfdGhpcyRwcm9wczIkY29udGV4dCxcbiAgICAgICAgX3RoaXMkcHJvcHMyJGxvY2F0aW9uID0gX3RoaXMkcHJvcHMyLmxvY2F0aW9uLFxuICAgICAgICBsb2NhdGlvbiA9IF90aGlzJHByb3BzMiRsb2NhdGlvbiA9PT0gdm9pZCAwID8gXCIvXCIgOiBfdGhpcyRwcm9wczIkbG9jYXRpb24sXG4gICAgICAgIHJlc3QgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShfdGhpcyRwcm9wczIsIFtcImJhc2VuYW1lXCIsIFwiY29udGV4dFwiLCBcImxvY2F0aW9uXCJdKTtcblxuICAgIHZhciBoaXN0b3J5ID0ge1xuICAgICAgY3JlYXRlSHJlZjogZnVuY3Rpb24gY3JlYXRlSHJlZihwYXRoKSB7XG4gICAgICAgIHJldHVybiBhZGRMZWFkaW5nU2xhc2goYmFzZW5hbWUgKyBjcmVhdGVVUkwocGF0aCkpO1xuICAgICAgfSxcbiAgICAgIGFjdGlvbjogXCJQT1BcIixcbiAgICAgIGxvY2F0aW9uOiBzdHJpcEJhc2VuYW1lKGJhc2VuYW1lLCBjcmVhdGVMb2NhdGlvbihsb2NhdGlvbikpLFxuICAgICAgcHVzaDogdGhpcy5oYW5kbGVQdXNoLFxuICAgICAgcmVwbGFjZTogdGhpcy5oYW5kbGVSZXBsYWNlLFxuICAgICAgZ286IHN0YXRpY0hhbmRsZXIoXCJnb1wiKSxcbiAgICAgIGdvQmFjazogc3RhdGljSGFuZGxlcihcImdvQmFja1wiKSxcbiAgICAgIGdvRm9yd2FyZDogc3RhdGljSGFuZGxlcihcImdvRm9yd2FyZFwiKSxcbiAgICAgIGxpc3RlbjogdGhpcy5oYW5kbGVMaXN0ZW4sXG4gICAgICBibG9jazogdGhpcy5oYW5kbGVCbG9ja1xuICAgIH07XG4gICAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFJvdXRlciwgX2V4dGVuZHMoe30sIHJlc3QsIHtcbiAgICAgIGhpc3Rvcnk6IGhpc3RvcnksXG4gICAgICBzdGF0aWNDb250ZXh0OiBjb250ZXh0XG4gICAgfSkpO1xuICB9O1xuXG4gIHJldHVybiBTdGF0aWNSb3V0ZXI7XG59KFJlYWN0LkNvbXBvbmVudCk7XG5cbmlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIpIHtcbiAgU3RhdGljUm91dGVyLnByb3BUeXBlcyA9IHtcbiAgICBiYXNlbmFtZTogUHJvcFR5cGVzLnN0cmluZyxcbiAgICBjb250ZXh0OiBQcm9wVHlwZXMub2JqZWN0LFxuICAgIGxvY2F0aW9uOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuc3RyaW5nLCBQcm9wVHlwZXMub2JqZWN0XSlcbiAgfTtcblxuICBTdGF0aWNSb3V0ZXIucHJvdG90eXBlLmNvbXBvbmVudERpZE1vdW50ID0gZnVuY3Rpb24gKCkge1xuICAgIHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIiA/IHdhcm5pbmcoIXRoaXMucHJvcHMuaGlzdG9yeSwgXCI8U3RhdGljUm91dGVyPiBpZ25vcmVzIHRoZSBoaXN0b3J5IHByb3AuIFRvIHVzZSBhIGN1c3RvbSBoaXN0b3J5LCBcIiArIFwidXNlIGBpbXBvcnQgeyBSb3V0ZXIgfWAgaW5zdGVhZCBvZiBgaW1wb3J0IHsgU3RhdGljUm91dGVyIGFzIFJvdXRlciB9YC5cIikgOiB2b2lkIDA7XG4gIH07XG59XG5cbi8qKlxuICogVGhlIHB1YmxpYyBBUEkgZm9yIHJlbmRlcmluZyB0aGUgZmlyc3QgPFJvdXRlPiB0aGF0IG1hdGNoZXMuXG4gKi9cblxudmFyIFN3aXRjaCA9IC8qI19fUFVSRV9fKi9mdW5jdGlvbiAoX1JlYWN0JENvbXBvbmVudCkge1xuICBfaW5oZXJpdHNMb29zZShTd2l0Y2gsIF9SZWFjdCRDb21wb25lbnQpO1xuXG4gIGZ1bmN0aW9uIFN3aXRjaCgpIHtcbiAgICByZXR1cm4gX1JlYWN0JENvbXBvbmVudC5hcHBseSh0aGlzLCBhcmd1bWVudHMpIHx8IHRoaXM7XG4gIH1cblxuICB2YXIgX3Byb3RvID0gU3dpdGNoLnByb3RvdHlwZTtcblxuICBfcHJvdG8ucmVuZGVyID0gZnVuY3Rpb24gcmVuZGVyKCkge1xuICAgIHZhciBfdGhpcyA9IHRoaXM7XG5cbiAgICByZXR1cm4gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoY29udGV4dC5Db25zdW1lciwgbnVsbCwgZnVuY3Rpb24gKGNvbnRleHQpIHtcbiAgICAgICFjb250ZXh0ID8gcHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiID8gaW52YXJpYW50KGZhbHNlLCBcIllvdSBzaG91bGQgbm90IHVzZSA8U3dpdGNoPiBvdXRzaWRlIGEgPFJvdXRlcj5cIikgOiBpbnZhcmlhbnQoZmFsc2UpIDogdm9pZCAwO1xuICAgICAgdmFyIGxvY2F0aW9uID0gX3RoaXMucHJvcHMubG9jYXRpb24gfHwgY29udGV4dC5sb2NhdGlvbjtcbiAgICAgIHZhciBlbGVtZW50LCBtYXRjaDsgLy8gV2UgdXNlIFJlYWN0LkNoaWxkcmVuLmZvckVhY2ggaW5zdGVhZCBvZiBSZWFjdC5DaGlsZHJlbi50b0FycmF5KCkuZmluZCgpXG4gICAgICAvLyBoZXJlIGJlY2F1c2UgdG9BcnJheSBhZGRzIGtleXMgdG8gYWxsIGNoaWxkIGVsZW1lbnRzIGFuZCB3ZSBkbyBub3Qgd2FudFxuICAgICAgLy8gdG8gdHJpZ2dlciBhbiB1bm1vdW50L3JlbW91bnQgZm9yIHR3byA8Um91dGU+cyB0aGF0IHJlbmRlciB0aGUgc2FtZVxuICAgICAgLy8gY29tcG9uZW50IGF0IGRpZmZlcmVudCBVUkxzLlxuXG4gICAgICBSZWFjdC5DaGlsZHJlbi5mb3JFYWNoKF90aGlzLnByb3BzLmNoaWxkcmVuLCBmdW5jdGlvbiAoY2hpbGQpIHtcbiAgICAgICAgaWYgKG1hdGNoID09IG51bGwgJiYgLyojX19QVVJFX18qL1JlYWN0LmlzVmFsaWRFbGVtZW50KGNoaWxkKSkge1xuICAgICAgICAgIGVsZW1lbnQgPSBjaGlsZDtcbiAgICAgICAgICB2YXIgcGF0aCA9IGNoaWxkLnByb3BzLnBhdGggfHwgY2hpbGQucHJvcHMuZnJvbTtcbiAgICAgICAgICBtYXRjaCA9IHBhdGggPyBtYXRjaFBhdGgobG9jYXRpb24ucGF0aG5hbWUsIF9leHRlbmRzKHt9LCBjaGlsZC5wcm9wcywge1xuICAgICAgICAgICAgcGF0aDogcGF0aFxuICAgICAgICAgIH0pKSA6IGNvbnRleHQubWF0Y2g7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIG1hdGNoID8gLyojX19QVVJFX18qL1JlYWN0LmNsb25lRWxlbWVudChlbGVtZW50LCB7XG4gICAgICAgIGxvY2F0aW9uOiBsb2NhdGlvbixcbiAgICAgICAgY29tcHV0ZWRNYXRjaDogbWF0Y2hcbiAgICAgIH0pIDogbnVsbDtcbiAgICB9KTtcbiAgfTtcblxuICByZXR1cm4gU3dpdGNoO1xufShSZWFjdC5Db21wb25lbnQpO1xuXG5pZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiKSB7XG4gIFN3aXRjaC5wcm9wVHlwZXMgPSB7XG4gICAgY2hpbGRyZW46IFByb3BUeXBlcy5ub2RlLFxuICAgIGxvY2F0aW9uOiBQcm9wVHlwZXMub2JqZWN0XG4gIH07XG5cbiAgU3dpdGNoLnByb3RvdHlwZS5jb21wb25lbnREaWRVcGRhdGUgPSBmdW5jdGlvbiAocHJldlByb3BzKSB7XG4gICAgcHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiID8gd2FybmluZyghKHRoaXMucHJvcHMubG9jYXRpb24gJiYgIXByZXZQcm9wcy5sb2NhdGlvbiksICc8U3dpdGNoPiBlbGVtZW50cyBzaG91bGQgbm90IGNoYW5nZSBmcm9tIHVuY29udHJvbGxlZCB0byBjb250cm9sbGVkIChvciB2aWNlIHZlcnNhKS4gWW91IGluaXRpYWxseSB1c2VkIG5vIFwibG9jYXRpb25cIiBwcm9wIGFuZCB0aGVuIHByb3ZpZGVkIG9uZSBvbiBhIHN1YnNlcXVlbnQgcmVuZGVyLicpIDogdm9pZCAwO1xuICAgIHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIiA/IHdhcm5pbmcoISghdGhpcy5wcm9wcy5sb2NhdGlvbiAmJiBwcmV2UHJvcHMubG9jYXRpb24pLCAnPFN3aXRjaD4gZWxlbWVudHMgc2hvdWxkIG5vdCBjaGFuZ2UgZnJvbSBjb250cm9sbGVkIHRvIHVuY29udHJvbGxlZCAob3IgdmljZSB2ZXJzYSkuIFlvdSBwcm92aWRlZCBhIFwibG9jYXRpb25cIiBwcm9wIGluaXRpYWxseSBidXQgb21pdHRlZCBpdCBvbiBhIHN1YnNlcXVlbnQgcmVuZGVyLicpIDogdm9pZCAwO1xuICB9O1xufVxuXG4vKipcbiAqIEEgcHVibGljIGhpZ2hlci1vcmRlciBjb21wb25lbnQgdG8gYWNjZXNzIHRoZSBpbXBlcmF0aXZlIEFQSVxuICovXG5cbmZ1bmN0aW9uIHdpdGhSb3V0ZXIoQ29tcG9uZW50KSB7XG4gIHZhciBkaXNwbGF5TmFtZSA9IFwid2l0aFJvdXRlcihcIiArIChDb21wb25lbnQuZGlzcGxheU5hbWUgfHwgQ29tcG9uZW50Lm5hbWUpICsgXCIpXCI7XG5cbiAgdmFyIEMgPSBmdW5jdGlvbiBDKHByb3BzKSB7XG4gICAgdmFyIHdyYXBwZWRDb21wb25lbnRSZWYgPSBwcm9wcy53cmFwcGVkQ29tcG9uZW50UmVmLFxuICAgICAgICByZW1haW5pbmdQcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHByb3BzLCBbXCJ3cmFwcGVkQ29tcG9uZW50UmVmXCJdKTtcblxuICAgIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChjb250ZXh0LkNvbnN1bWVyLCBudWxsLCBmdW5jdGlvbiAoY29udGV4dCkge1xuICAgICAgIWNvbnRleHQgPyBwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIgPyBpbnZhcmlhbnQoZmFsc2UsIFwiWW91IHNob3VsZCBub3QgdXNlIDxcIiArIGRpc3BsYXlOYW1lICsgXCIgLz4gb3V0c2lkZSBhIDxSb3V0ZXI+XCIpIDogaW52YXJpYW50KGZhbHNlKSA6IHZvaWQgMDtcbiAgICAgIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChDb21wb25lbnQsIF9leHRlbmRzKHt9LCByZW1haW5pbmdQcm9wcywgY29udGV4dCwge1xuICAgICAgICByZWY6IHdyYXBwZWRDb21wb25lbnRSZWZcbiAgICAgIH0pKTtcbiAgICB9KTtcbiAgfTtcblxuICBDLmRpc3BsYXlOYW1lID0gZGlzcGxheU5hbWU7XG4gIEMuV3JhcHBlZENvbXBvbmVudCA9IENvbXBvbmVudDtcblxuICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiKSB7XG4gICAgQy5wcm9wVHlwZXMgPSB7XG4gICAgICB3cmFwcGVkQ29tcG9uZW50UmVmOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuc3RyaW5nLCBQcm9wVHlwZXMuZnVuYywgUHJvcFR5cGVzLm9iamVjdF0pXG4gICAgfTtcbiAgfVxuXG4gIHJldHVybiBob2lzdFN0YXRpY3MoQywgQ29tcG9uZW50KTtcbn1cblxudmFyIHVzZUNvbnRleHQgPSBSZWFjdC51c2VDb250ZXh0O1xuZnVuY3Rpb24gdXNlSGlzdG9yeSgpIHtcbiAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIikge1xuICAgICEodHlwZW9mIHVzZUNvbnRleHQgPT09IFwiZnVuY3Rpb25cIikgPyBwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIgPyBpbnZhcmlhbnQoZmFsc2UsIFwiWW91IG11c3QgdXNlIFJlYWN0ID49IDE2LjggaW4gb3JkZXIgdG8gdXNlIHVzZUhpc3RvcnkoKVwiKSA6IGludmFyaWFudChmYWxzZSkgOiB2b2lkIDA7XG4gIH1cblxuICByZXR1cm4gdXNlQ29udGV4dChoaXN0b3J5Q29udGV4dCk7XG59XG5mdW5jdGlvbiB1c2VMb2NhdGlvbigpIHtcbiAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIikge1xuICAgICEodHlwZW9mIHVzZUNvbnRleHQgPT09IFwiZnVuY3Rpb25cIikgPyBwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIgPyBpbnZhcmlhbnQoZmFsc2UsIFwiWW91IG11c3QgdXNlIFJlYWN0ID49IDE2LjggaW4gb3JkZXIgdG8gdXNlIHVzZUxvY2F0aW9uKClcIikgOiBpbnZhcmlhbnQoZmFsc2UpIDogdm9pZCAwO1xuICB9XG5cbiAgcmV0dXJuIHVzZUNvbnRleHQoY29udGV4dCkubG9jYXRpb247XG59XG5mdW5jdGlvbiB1c2VQYXJhbXMoKSB7XG4gIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIpIHtcbiAgICAhKHR5cGVvZiB1c2VDb250ZXh0ID09PSBcImZ1bmN0aW9uXCIpID8gcHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiID8gaW52YXJpYW50KGZhbHNlLCBcIllvdSBtdXN0IHVzZSBSZWFjdCA+PSAxNi44IGluIG9yZGVyIHRvIHVzZSB1c2VQYXJhbXMoKVwiKSA6IGludmFyaWFudChmYWxzZSkgOiB2b2lkIDA7XG4gIH1cblxuICB2YXIgbWF0Y2ggPSB1c2VDb250ZXh0KGNvbnRleHQpLm1hdGNoO1xuICByZXR1cm4gbWF0Y2ggPyBtYXRjaC5wYXJhbXMgOiB7fTtcbn1cbmZ1bmN0aW9uIHVzZVJvdXRlTWF0Y2gocGF0aCkge1xuICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiKSB7XG4gICAgISh0eXBlb2YgdXNlQ29udGV4dCA9PT0gXCJmdW5jdGlvblwiKSA/IHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIiA/IGludmFyaWFudChmYWxzZSwgXCJZb3UgbXVzdCB1c2UgUmVhY3QgPj0gMTYuOCBpbiBvcmRlciB0byB1c2UgdXNlUm91dGVNYXRjaCgpXCIpIDogaW52YXJpYW50KGZhbHNlKSA6IHZvaWQgMDtcbiAgfVxuXG4gIHZhciBsb2NhdGlvbiA9IHVzZUxvY2F0aW9uKCk7XG4gIHZhciBtYXRjaCA9IHVzZUNvbnRleHQoY29udGV4dCkubWF0Y2g7XG4gIHJldHVybiBwYXRoID8gbWF0Y2hQYXRoKGxvY2F0aW9uLnBhdGhuYW1lLCBwYXRoKSA6IG1hdGNoO1xufVxuXG5pZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiKSB7XG4gIGlmICh0eXBlb2Ygd2luZG93ICE9PSBcInVuZGVmaW5lZFwiKSB7XG4gICAgdmFyIGdsb2JhbCQxID0gd2luZG93O1xuICAgIHZhciBrZXkgPSBcIl9fcmVhY3Rfcm91dGVyX2J1aWxkX19cIjtcbiAgICB2YXIgYnVpbGROYW1lcyA9IHtcbiAgICAgIGNqczogXCJDb21tb25KU1wiLFxuICAgICAgZXNtOiBcIkVTIG1vZHVsZXNcIixcbiAgICAgIHVtZDogXCJVTURcIlxuICAgIH07XG5cbiAgICBpZiAoZ2xvYmFsJDFba2V5XSAmJiBnbG9iYWwkMVtrZXldICE9PSBcImVzbVwiKSB7XG4gICAgICB2YXIgaW5pdGlhbEJ1aWxkTmFtZSA9IGJ1aWxkTmFtZXNbZ2xvYmFsJDFba2V5XV07XG4gICAgICB2YXIgc2Vjb25kYXJ5QnVpbGROYW1lID0gYnVpbGROYW1lc1tcImVzbVwiXTsgLy8gVE9ETzogQWRkIGxpbmsgdG8gYXJ0aWNsZSB0aGF0IGV4cGxhaW5zIGluIGRldGFpbCBob3cgdG8gYXZvaWRcbiAgICAgIC8vIGxvYWRpbmcgMiBkaWZmZXJlbnQgYnVpbGRzLlxuXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJZb3UgYXJlIGxvYWRpbmcgdGhlIFwiICsgc2Vjb25kYXJ5QnVpbGROYW1lICsgXCIgYnVpbGQgb2YgUmVhY3QgUm91dGVyIFwiICsgKFwib24gYSBwYWdlIHRoYXQgaXMgYWxyZWFkeSBydW5uaW5nIHRoZSBcIiArIGluaXRpYWxCdWlsZE5hbWUgKyBcIiBcIikgKyBcImJ1aWxkLCBzbyB0aGluZ3Mgd29uJ3Qgd29yayByaWdodC5cIik7XG4gICAgfVxuXG4gICAgZ2xvYmFsJDFba2V5XSA9IFwiZXNtXCI7XG4gIH1cbn1cblxuZXhwb3J0IHsgTWVtb3J5Um91dGVyLCBQcm9tcHQsIFJlZGlyZWN0LCBSb3V0ZSwgUm91dGVyLCBTdGF0aWNSb3V0ZXIsIFN3aXRjaCwgaGlzdG9yeUNvbnRleHQgYXMgX19IaXN0b3J5Q29udGV4dCwgY29udGV4dCBhcyBfX1JvdXRlckNvbnRleHQsIGdlbmVyYXRlUGF0aCwgbWF0Y2hQYXRoLCB1c2VIaXN0b3J5LCB1c2VMb2NhdGlvbiwgdXNlUGFyYW1zLCB1c2VSb3V0ZU1hdGNoLCB3aXRoUm91dGVyIH07XG4vLyMgc291cmNlTWFwcGluZ1VSTD1yZWFjdC1yb3V0ZXIuanMubWFwXG4iLCJpbXBvcnQgeyBSb3V0ZXIsIF9fUm91dGVyQ29udGV4dCwgbWF0Y2hQYXRoIH0gZnJvbSAncmVhY3Qtcm91dGVyJztcbmV4cG9ydCB7IE1lbW9yeVJvdXRlciwgUHJvbXB0LCBSZWRpcmVjdCwgUm91dGUsIFJvdXRlciwgU3RhdGljUm91dGVyLCBTd2l0Y2gsIGdlbmVyYXRlUGF0aCwgbWF0Y2hQYXRoLCB1c2VIaXN0b3J5LCB1c2VMb2NhdGlvbiwgdXNlUGFyYW1zLCB1c2VSb3V0ZU1hdGNoLCB3aXRoUm91dGVyIH0gZnJvbSAncmVhY3Qtcm91dGVyJztcbmltcG9ydCBfaW5oZXJpdHNMb29zZSBmcm9tICdAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9pbmhlcml0c0xvb3NlJztcbmltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBjcmVhdGVCcm93c2VySGlzdG9yeSwgY3JlYXRlSGFzaEhpc3RvcnksIGNyZWF0ZUxvY2F0aW9uLCBjcmVhdGVQYXRoIH0gZnJvbSAnaGlzdG9yeSc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xuaW1wb3J0IHdhcm5pbmcgZnJvbSAndGlueS13YXJuaW5nJztcbmltcG9ydCBfZXh0ZW5kcyBmcm9tICdAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9leHRlbmRzJztcbmltcG9ydCBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSBmcm9tICdAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlJztcbmltcG9ydCBpbnZhcmlhbnQgZnJvbSAndGlueS1pbnZhcmlhbnQnO1xuXG4vKipcbiAqIFRoZSBwdWJsaWMgQVBJIGZvciBhIDxSb3V0ZXI+IHRoYXQgdXNlcyBIVE1MNSBoaXN0b3J5LlxuICovXG5cbnZhciBCcm93c2VyUm91dGVyID0gLyojX19QVVJFX18qL2Z1bmN0aW9uIChfUmVhY3QkQ29tcG9uZW50KSB7XG4gIF9pbmhlcml0c0xvb3NlKEJyb3dzZXJSb3V0ZXIsIF9SZWFjdCRDb21wb25lbnQpO1xuXG4gIGZ1bmN0aW9uIEJyb3dzZXJSb3V0ZXIoKSB7XG4gICAgdmFyIF90aGlzO1xuXG4gICAgZm9yICh2YXIgX2xlbiA9IGFyZ3VtZW50cy5sZW5ndGgsIGFyZ3MgPSBuZXcgQXJyYXkoX2xlbiksIF9rZXkgPSAwOyBfa2V5IDwgX2xlbjsgX2tleSsrKSB7XG4gICAgICBhcmdzW19rZXldID0gYXJndW1lbnRzW19rZXldO1xuICAgIH1cblxuICAgIF90aGlzID0gX1JlYWN0JENvbXBvbmVudC5jYWxsLmFwcGx5KF9SZWFjdCRDb21wb25lbnQsIFt0aGlzXS5jb25jYXQoYXJncykpIHx8IHRoaXM7XG4gICAgX3RoaXMuaGlzdG9yeSA9IGNyZWF0ZUJyb3dzZXJIaXN0b3J5KF90aGlzLnByb3BzKTtcbiAgICByZXR1cm4gX3RoaXM7XG4gIH1cblxuICB2YXIgX3Byb3RvID0gQnJvd3NlclJvdXRlci5wcm90b3R5cGU7XG5cbiAgX3Byb3RvLnJlbmRlciA9IGZ1bmN0aW9uIHJlbmRlcigpIHtcbiAgICByZXR1cm4gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoUm91dGVyLCB7XG4gICAgICBoaXN0b3J5OiB0aGlzLmhpc3RvcnksXG4gICAgICBjaGlsZHJlbjogdGhpcy5wcm9wcy5jaGlsZHJlblxuICAgIH0pO1xuICB9O1xuXG4gIHJldHVybiBCcm93c2VyUm91dGVyO1xufShSZWFjdC5Db21wb25lbnQpO1xuXG5pZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiKSB7XG4gIEJyb3dzZXJSb3V0ZXIucHJvcFR5cGVzID0ge1xuICAgIGJhc2VuYW1lOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAgIGNoaWxkcmVuOiBQcm9wVHlwZXMubm9kZSxcbiAgICBmb3JjZVJlZnJlc2g6IFByb3BUeXBlcy5ib29sLFxuICAgIGdldFVzZXJDb25maXJtYXRpb246IFByb3BUeXBlcy5mdW5jLFxuICAgIGtleUxlbmd0aDogUHJvcFR5cGVzLm51bWJlclxuICB9O1xuXG4gIEJyb3dzZXJSb3V0ZXIucHJvdG90eXBlLmNvbXBvbmVudERpZE1vdW50ID0gZnVuY3Rpb24gKCkge1xuICAgIHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIiA/IHdhcm5pbmcoIXRoaXMucHJvcHMuaGlzdG9yeSwgXCI8QnJvd3NlclJvdXRlcj4gaWdub3JlcyB0aGUgaGlzdG9yeSBwcm9wLiBUbyB1c2UgYSBjdXN0b20gaGlzdG9yeSwgXCIgKyBcInVzZSBgaW1wb3J0IHsgUm91dGVyIH1gIGluc3RlYWQgb2YgYGltcG9ydCB7IEJyb3dzZXJSb3V0ZXIgYXMgUm91dGVyIH1gLlwiKSA6IHZvaWQgMDtcbiAgfTtcbn1cblxuLyoqXG4gKiBUaGUgcHVibGljIEFQSSBmb3IgYSA8Um91dGVyPiB0aGF0IHVzZXMgd2luZG93LmxvY2F0aW9uLmhhc2guXG4gKi9cblxudmFyIEhhc2hSb3V0ZXIgPSAvKiNfX1BVUkVfXyovZnVuY3Rpb24gKF9SZWFjdCRDb21wb25lbnQpIHtcbiAgX2luaGVyaXRzTG9vc2UoSGFzaFJvdXRlciwgX1JlYWN0JENvbXBvbmVudCk7XG5cbiAgZnVuY3Rpb24gSGFzaFJvdXRlcigpIHtcbiAgICB2YXIgX3RoaXM7XG5cbiAgICBmb3IgKHZhciBfbGVuID0gYXJndW1lbnRzLmxlbmd0aCwgYXJncyA9IG5ldyBBcnJheShfbGVuKSwgX2tleSA9IDA7IF9rZXkgPCBfbGVuOyBfa2V5KyspIHtcbiAgICAgIGFyZ3NbX2tleV0gPSBhcmd1bWVudHNbX2tleV07XG4gICAgfVxuXG4gICAgX3RoaXMgPSBfUmVhY3QkQ29tcG9uZW50LmNhbGwuYXBwbHkoX1JlYWN0JENvbXBvbmVudCwgW3RoaXNdLmNvbmNhdChhcmdzKSkgfHwgdGhpcztcbiAgICBfdGhpcy5oaXN0b3J5ID0gY3JlYXRlSGFzaEhpc3RvcnkoX3RoaXMucHJvcHMpO1xuICAgIHJldHVybiBfdGhpcztcbiAgfVxuXG4gIHZhciBfcHJvdG8gPSBIYXNoUm91dGVyLnByb3RvdHlwZTtcblxuICBfcHJvdG8ucmVuZGVyID0gZnVuY3Rpb24gcmVuZGVyKCkge1xuICAgIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChSb3V0ZXIsIHtcbiAgICAgIGhpc3Rvcnk6IHRoaXMuaGlzdG9yeSxcbiAgICAgIGNoaWxkcmVuOiB0aGlzLnByb3BzLmNoaWxkcmVuXG4gICAgfSk7XG4gIH07XG5cbiAgcmV0dXJuIEhhc2hSb3V0ZXI7XG59KFJlYWN0LkNvbXBvbmVudCk7XG5cbmlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIpIHtcbiAgSGFzaFJvdXRlci5wcm9wVHlwZXMgPSB7XG4gICAgYmFzZW5hbWU6IFByb3BUeXBlcy5zdHJpbmcsXG4gICAgY2hpbGRyZW46IFByb3BUeXBlcy5ub2RlLFxuICAgIGdldFVzZXJDb25maXJtYXRpb246IFByb3BUeXBlcy5mdW5jLFxuICAgIGhhc2hUeXBlOiBQcm9wVHlwZXMub25lT2YoW1wiaGFzaGJhbmdcIiwgXCJub3NsYXNoXCIsIFwic2xhc2hcIl0pXG4gIH07XG5cbiAgSGFzaFJvdXRlci5wcm90b3R5cGUuY29tcG9uZW50RGlkTW91bnQgPSBmdW5jdGlvbiAoKSB7XG4gICAgcHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiID8gd2FybmluZyghdGhpcy5wcm9wcy5oaXN0b3J5LCBcIjxIYXNoUm91dGVyPiBpZ25vcmVzIHRoZSBoaXN0b3J5IHByb3AuIFRvIHVzZSBhIGN1c3RvbSBoaXN0b3J5LCBcIiArIFwidXNlIGBpbXBvcnQgeyBSb3V0ZXIgfWAgaW5zdGVhZCBvZiBgaW1wb3J0IHsgSGFzaFJvdXRlciBhcyBSb3V0ZXIgfWAuXCIpIDogdm9pZCAwO1xuICB9O1xufVxuXG52YXIgcmVzb2x2ZVRvTG9jYXRpb24gPSBmdW5jdGlvbiByZXNvbHZlVG9Mb2NhdGlvbih0bywgY3VycmVudExvY2F0aW9uKSB7XG4gIHJldHVybiB0eXBlb2YgdG8gPT09IFwiZnVuY3Rpb25cIiA/IHRvKGN1cnJlbnRMb2NhdGlvbikgOiB0bztcbn07XG52YXIgbm9ybWFsaXplVG9Mb2NhdGlvbiA9IGZ1bmN0aW9uIG5vcm1hbGl6ZVRvTG9jYXRpb24odG8sIGN1cnJlbnRMb2NhdGlvbikge1xuICByZXR1cm4gdHlwZW9mIHRvID09PSBcInN0cmluZ1wiID8gY3JlYXRlTG9jYXRpb24odG8sIG51bGwsIG51bGwsIGN1cnJlbnRMb2NhdGlvbikgOiB0bztcbn07XG5cbnZhciBmb3J3YXJkUmVmU2hpbSA9IGZ1bmN0aW9uIGZvcndhcmRSZWZTaGltKEMpIHtcbiAgcmV0dXJuIEM7XG59O1xuXG52YXIgZm9yd2FyZFJlZiA9IFJlYWN0LmZvcndhcmRSZWY7XG5cbmlmICh0eXBlb2YgZm9yd2FyZFJlZiA9PT0gXCJ1bmRlZmluZWRcIikge1xuICBmb3J3YXJkUmVmID0gZm9yd2FyZFJlZlNoaW07XG59XG5cbmZ1bmN0aW9uIGlzTW9kaWZpZWRFdmVudChldmVudCkge1xuICByZXR1cm4gISEoZXZlbnQubWV0YUtleSB8fCBldmVudC5hbHRLZXkgfHwgZXZlbnQuY3RybEtleSB8fCBldmVudC5zaGlmdEtleSk7XG59XG5cbnZhciBMaW5rQW5jaG9yID0gZm9yd2FyZFJlZihmdW5jdGlvbiAoX3JlZiwgZm9yd2FyZGVkUmVmKSB7XG4gIHZhciBpbm5lclJlZiA9IF9yZWYuaW5uZXJSZWYsXG4gICAgICBuYXZpZ2F0ZSA9IF9yZWYubmF2aWdhdGUsXG4gICAgICBfb25DbGljayA9IF9yZWYub25DbGljayxcbiAgICAgIHJlc3QgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShfcmVmLCBbXCJpbm5lclJlZlwiLCBcIm5hdmlnYXRlXCIsIFwib25DbGlja1wiXSk7XG5cbiAgdmFyIHRhcmdldCA9IHJlc3QudGFyZ2V0O1xuXG4gIHZhciBwcm9wcyA9IF9leHRlbmRzKHt9LCByZXN0LCB7XG4gICAgb25DbGljazogZnVuY3Rpb24gb25DbGljayhldmVudCkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgaWYgKF9vbkNsaWNrKSBfb25DbGljayhldmVudCk7XG4gICAgICB9IGNhdGNoIChleCkge1xuICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICB0aHJvdyBleDtcbiAgICAgIH1cblxuICAgICAgaWYgKCFldmVudC5kZWZhdWx0UHJldmVudGVkICYmIC8vIG9uQ2xpY2sgcHJldmVudGVkIGRlZmF1bHRcbiAgICAgIGV2ZW50LmJ1dHRvbiA9PT0gMCAmJiAoIC8vIGlnbm9yZSBldmVyeXRoaW5nIGJ1dCBsZWZ0IGNsaWNrc1xuICAgICAgIXRhcmdldCB8fCB0YXJnZXQgPT09IFwiX3NlbGZcIikgJiYgLy8gbGV0IGJyb3dzZXIgaGFuZGxlIFwidGFyZ2V0PV9ibGFua1wiIGV0Yy5cbiAgICAgICFpc01vZGlmaWVkRXZlbnQoZXZlbnQpIC8vIGlnbm9yZSBjbGlja3Mgd2l0aCBtb2RpZmllciBrZXlzXG4gICAgICApIHtcbiAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgIG5hdmlnYXRlKCk7XG4gICAgICAgIH1cbiAgICB9XG4gIH0pOyAvLyBSZWFjdCAxNSBjb21wYXRcblxuXG4gIGlmIChmb3J3YXJkUmVmU2hpbSAhPT0gZm9yd2FyZFJlZikge1xuICAgIHByb3BzLnJlZiA9IGZvcndhcmRlZFJlZiB8fCBpbm5lclJlZjtcbiAgfSBlbHNlIHtcbiAgICBwcm9wcy5yZWYgPSBpbm5lclJlZjtcbiAgfVxuICAvKiBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUganN4LWExMXkvYW5jaG9yLWhhcy1jb250ZW50ICovXG5cblxuICByZXR1cm4gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJhXCIsIHByb3BzKTtcbn0pO1xuXG5pZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiKSB7XG4gIExpbmtBbmNob3IuZGlzcGxheU5hbWUgPSBcIkxpbmtBbmNob3JcIjtcbn1cbi8qKlxuICogVGhlIHB1YmxpYyBBUEkgZm9yIHJlbmRlcmluZyBhIGhpc3RvcnktYXdhcmUgPGE+LlxuICovXG5cblxudmFyIExpbmsgPSBmb3J3YXJkUmVmKGZ1bmN0aW9uIChfcmVmMiwgZm9yd2FyZGVkUmVmKSB7XG4gIHZhciBfcmVmMiRjb21wb25lbnQgPSBfcmVmMi5jb21wb25lbnQsXG4gICAgICBjb21wb25lbnQgPSBfcmVmMiRjb21wb25lbnQgPT09IHZvaWQgMCA/IExpbmtBbmNob3IgOiBfcmVmMiRjb21wb25lbnQsXG4gICAgICByZXBsYWNlID0gX3JlZjIucmVwbGFjZSxcbiAgICAgIHRvID0gX3JlZjIudG8sXG4gICAgICBpbm5lclJlZiA9IF9yZWYyLmlubmVyUmVmLFxuICAgICAgcmVzdCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKF9yZWYyLCBbXCJjb21wb25lbnRcIiwgXCJyZXBsYWNlXCIsIFwidG9cIiwgXCJpbm5lclJlZlwiXSk7XG5cbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KF9fUm91dGVyQ29udGV4dC5Db25zdW1lciwgbnVsbCwgZnVuY3Rpb24gKGNvbnRleHQpIHtcbiAgICAhY29udGV4dCA/IHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIiA/IGludmFyaWFudChmYWxzZSwgXCJZb3Ugc2hvdWxkIG5vdCB1c2UgPExpbms+IG91dHNpZGUgYSA8Um91dGVyPlwiKSA6IGludmFyaWFudChmYWxzZSkgOiB2b2lkIDA7XG4gICAgdmFyIGhpc3RvcnkgPSBjb250ZXh0Lmhpc3Rvcnk7XG4gICAgdmFyIGxvY2F0aW9uID0gbm9ybWFsaXplVG9Mb2NhdGlvbihyZXNvbHZlVG9Mb2NhdGlvbih0bywgY29udGV4dC5sb2NhdGlvbiksIGNvbnRleHQubG9jYXRpb24pO1xuICAgIHZhciBocmVmID0gbG9jYXRpb24gPyBoaXN0b3J5LmNyZWF0ZUhyZWYobG9jYXRpb24pIDogXCJcIjtcblxuICAgIHZhciBwcm9wcyA9IF9leHRlbmRzKHt9LCByZXN0LCB7XG4gICAgICBocmVmOiBocmVmLFxuICAgICAgbmF2aWdhdGU6IGZ1bmN0aW9uIG5hdmlnYXRlKCkge1xuICAgICAgICB2YXIgbG9jYXRpb24gPSByZXNvbHZlVG9Mb2NhdGlvbih0bywgY29udGV4dC5sb2NhdGlvbik7XG4gICAgICAgIHZhciBpc0R1cGxpY2F0ZU5hdmlnYXRpb24gPSBjcmVhdGVQYXRoKGNvbnRleHQubG9jYXRpb24pID09PSBjcmVhdGVQYXRoKG5vcm1hbGl6ZVRvTG9jYXRpb24obG9jYXRpb24pKTtcbiAgICAgICAgdmFyIG1ldGhvZCA9IHJlcGxhY2UgfHwgaXNEdXBsaWNhdGVOYXZpZ2F0aW9uID8gaGlzdG9yeS5yZXBsYWNlIDogaGlzdG9yeS5wdXNoO1xuICAgICAgICBtZXRob2QobG9jYXRpb24pO1xuICAgICAgfVxuICAgIH0pOyAvLyBSZWFjdCAxNSBjb21wYXRcblxuXG4gICAgaWYgKGZvcndhcmRSZWZTaGltICE9PSBmb3J3YXJkUmVmKSB7XG4gICAgICBwcm9wcy5yZWYgPSBmb3J3YXJkZWRSZWYgfHwgaW5uZXJSZWY7XG4gICAgfSBlbHNlIHtcbiAgICAgIHByb3BzLmlubmVyUmVmID0gaW5uZXJSZWY7XG4gICAgfVxuXG4gICAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KGNvbXBvbmVudCwgcHJvcHMpO1xuICB9KTtcbn0pO1xuXG5pZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiKSB7XG4gIHZhciB0b1R5cGUgPSBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuc3RyaW5nLCBQcm9wVHlwZXMub2JqZWN0LCBQcm9wVHlwZXMuZnVuY10pO1xuICB2YXIgcmVmVHlwZSA9IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5zdHJpbmcsIFByb3BUeXBlcy5mdW5jLCBQcm9wVHlwZXMuc2hhcGUoe1xuICAgIGN1cnJlbnQ6IFByb3BUeXBlcy5hbnlcbiAgfSldKTtcbiAgTGluay5kaXNwbGF5TmFtZSA9IFwiTGlua1wiO1xuICBMaW5rLnByb3BUeXBlcyA9IHtcbiAgICBpbm5lclJlZjogcmVmVHlwZSxcbiAgICBvbkNsaWNrOiBQcm9wVHlwZXMuZnVuYyxcbiAgICByZXBsYWNlOiBQcm9wVHlwZXMuYm9vbCxcbiAgICB0YXJnZXQ6IFByb3BUeXBlcy5zdHJpbmcsXG4gICAgdG86IHRvVHlwZS5pc1JlcXVpcmVkXG4gIH07XG59XG5cbnZhciBmb3J3YXJkUmVmU2hpbSQxID0gZnVuY3Rpb24gZm9yd2FyZFJlZlNoaW0oQykge1xuICByZXR1cm4gQztcbn07XG5cbnZhciBmb3J3YXJkUmVmJDEgPSBSZWFjdC5mb3J3YXJkUmVmO1xuXG5pZiAodHlwZW9mIGZvcndhcmRSZWYkMSA9PT0gXCJ1bmRlZmluZWRcIikge1xuICBmb3J3YXJkUmVmJDEgPSBmb3J3YXJkUmVmU2hpbSQxO1xufVxuXG5mdW5jdGlvbiBqb2luQ2xhc3NuYW1lcygpIHtcbiAgZm9yICh2YXIgX2xlbiA9IGFyZ3VtZW50cy5sZW5ndGgsIGNsYXNzbmFtZXMgPSBuZXcgQXJyYXkoX2xlbiksIF9rZXkgPSAwOyBfa2V5IDwgX2xlbjsgX2tleSsrKSB7XG4gICAgY2xhc3NuYW1lc1tfa2V5XSA9IGFyZ3VtZW50c1tfa2V5XTtcbiAgfVxuXG4gIHJldHVybiBjbGFzc25hbWVzLmZpbHRlcihmdW5jdGlvbiAoaSkge1xuICAgIHJldHVybiBpO1xuICB9KS5qb2luKFwiIFwiKTtcbn1cbi8qKlxuICogQSA8TGluaz4gd3JhcHBlciB0aGF0IGtub3dzIGlmIGl0J3MgXCJhY3RpdmVcIiBvciBub3QuXG4gKi9cblxuXG52YXIgTmF2TGluayA9IGZvcndhcmRSZWYkMShmdW5jdGlvbiAoX3JlZiwgZm9yd2FyZGVkUmVmKSB7XG4gIHZhciBfcmVmJGFyaWFDdXJyZW50ID0gX3JlZltcImFyaWEtY3VycmVudFwiXSxcbiAgICAgIGFyaWFDdXJyZW50ID0gX3JlZiRhcmlhQ3VycmVudCA9PT0gdm9pZCAwID8gXCJwYWdlXCIgOiBfcmVmJGFyaWFDdXJyZW50LFxuICAgICAgX3JlZiRhY3RpdmVDbGFzc05hbWUgPSBfcmVmLmFjdGl2ZUNsYXNzTmFtZSxcbiAgICAgIGFjdGl2ZUNsYXNzTmFtZSA9IF9yZWYkYWN0aXZlQ2xhc3NOYW1lID09PSB2b2lkIDAgPyBcImFjdGl2ZVwiIDogX3JlZiRhY3RpdmVDbGFzc05hbWUsXG4gICAgICBhY3RpdmVTdHlsZSA9IF9yZWYuYWN0aXZlU3R5bGUsXG4gICAgICBjbGFzc05hbWVQcm9wID0gX3JlZi5jbGFzc05hbWUsXG4gICAgICBleGFjdCA9IF9yZWYuZXhhY3QsXG4gICAgICBpc0FjdGl2ZVByb3AgPSBfcmVmLmlzQWN0aXZlLFxuICAgICAgbG9jYXRpb25Qcm9wID0gX3JlZi5sb2NhdGlvbixcbiAgICAgIHNlbnNpdGl2ZSA9IF9yZWYuc2Vuc2l0aXZlLFxuICAgICAgc3RyaWN0ID0gX3JlZi5zdHJpY3QsXG4gICAgICBzdHlsZVByb3AgPSBfcmVmLnN0eWxlLFxuICAgICAgdG8gPSBfcmVmLnRvLFxuICAgICAgaW5uZXJSZWYgPSBfcmVmLmlubmVyUmVmLFxuICAgICAgcmVzdCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKF9yZWYsIFtcImFyaWEtY3VycmVudFwiLCBcImFjdGl2ZUNsYXNzTmFtZVwiLCBcImFjdGl2ZVN0eWxlXCIsIFwiY2xhc3NOYW1lXCIsIFwiZXhhY3RcIiwgXCJpc0FjdGl2ZVwiLCBcImxvY2F0aW9uXCIsIFwic2Vuc2l0aXZlXCIsIFwic3RyaWN0XCIsIFwic3R5bGVcIiwgXCJ0b1wiLCBcImlubmVyUmVmXCJdKTtcblxuICByZXR1cm4gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoX19Sb3V0ZXJDb250ZXh0LkNvbnN1bWVyLCBudWxsLCBmdW5jdGlvbiAoY29udGV4dCkge1xuICAgICFjb250ZXh0ID8gcHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiID8gaW52YXJpYW50KGZhbHNlLCBcIllvdSBzaG91bGQgbm90IHVzZSA8TmF2TGluaz4gb3V0c2lkZSBhIDxSb3V0ZXI+XCIpIDogaW52YXJpYW50KGZhbHNlKSA6IHZvaWQgMDtcbiAgICB2YXIgY3VycmVudExvY2F0aW9uID0gbG9jYXRpb25Qcm9wIHx8IGNvbnRleHQubG9jYXRpb247XG4gICAgdmFyIHRvTG9jYXRpb24gPSBub3JtYWxpemVUb0xvY2F0aW9uKHJlc29sdmVUb0xvY2F0aW9uKHRvLCBjdXJyZW50TG9jYXRpb24pLCBjdXJyZW50TG9jYXRpb24pO1xuICAgIHZhciBwYXRoID0gdG9Mb2NhdGlvbi5wYXRobmFtZTsgLy8gUmVnZXggdGFrZW4gZnJvbTogaHR0cHM6Ly9naXRodWIuY29tL3BpbGxhcmpzL3BhdGgtdG8tcmVnZXhwL2Jsb2IvbWFzdGVyL2luZGV4LmpzI0wyMDJcblxuICAgIHZhciBlc2NhcGVkUGF0aCA9IHBhdGggJiYgcGF0aC5yZXBsYWNlKC8oWy4rKj89XiE6JHt9KClbXFxdfC9cXFxcXSkvZywgXCJcXFxcJDFcIik7XG4gICAgdmFyIG1hdGNoID0gZXNjYXBlZFBhdGggPyBtYXRjaFBhdGgoY3VycmVudExvY2F0aW9uLnBhdGhuYW1lLCB7XG4gICAgICBwYXRoOiBlc2NhcGVkUGF0aCxcbiAgICAgIGV4YWN0OiBleGFjdCxcbiAgICAgIHNlbnNpdGl2ZTogc2Vuc2l0aXZlLFxuICAgICAgc3RyaWN0OiBzdHJpY3RcbiAgICB9KSA6IG51bGw7XG4gICAgdmFyIGlzQWN0aXZlID0gISEoaXNBY3RpdmVQcm9wID8gaXNBY3RpdmVQcm9wKG1hdGNoLCBjdXJyZW50TG9jYXRpb24pIDogbWF0Y2gpO1xuICAgIHZhciBjbGFzc05hbWUgPSB0eXBlb2YgY2xhc3NOYW1lUHJvcCA9PT0gXCJmdW5jdGlvblwiID8gY2xhc3NOYW1lUHJvcChpc0FjdGl2ZSkgOiBjbGFzc05hbWVQcm9wO1xuICAgIHZhciBzdHlsZSA9IHR5cGVvZiBzdHlsZVByb3AgPT09IFwiZnVuY3Rpb25cIiA/IHN0eWxlUHJvcChpc0FjdGl2ZSkgOiBzdHlsZVByb3A7XG5cbiAgICBpZiAoaXNBY3RpdmUpIHtcbiAgICAgIGNsYXNzTmFtZSA9IGpvaW5DbGFzc25hbWVzKGNsYXNzTmFtZSwgYWN0aXZlQ2xhc3NOYW1lKTtcbiAgICAgIHN0eWxlID0gX2V4dGVuZHMoe30sIHN0eWxlLCBhY3RpdmVTdHlsZSk7XG4gICAgfVxuXG4gICAgdmFyIHByb3BzID0gX2V4dGVuZHMoe1xuICAgICAgXCJhcmlhLWN1cnJlbnRcIjogaXNBY3RpdmUgJiYgYXJpYUN1cnJlbnQgfHwgbnVsbCxcbiAgICAgIGNsYXNzTmFtZTogY2xhc3NOYW1lLFxuICAgICAgc3R5bGU6IHN0eWxlLFxuICAgICAgdG86IHRvTG9jYXRpb25cbiAgICB9LCByZXN0KTsgLy8gUmVhY3QgMTUgY29tcGF0XG5cblxuICAgIGlmIChmb3J3YXJkUmVmU2hpbSQxICE9PSBmb3J3YXJkUmVmJDEpIHtcbiAgICAgIHByb3BzLnJlZiA9IGZvcndhcmRlZFJlZiB8fCBpbm5lclJlZjtcbiAgICB9IGVsc2Uge1xuICAgICAgcHJvcHMuaW5uZXJSZWYgPSBpbm5lclJlZjtcbiAgICB9XG5cbiAgICByZXR1cm4gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoTGluaywgcHJvcHMpO1xuICB9KTtcbn0pO1xuXG5pZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiKSB7XG4gIE5hdkxpbmsuZGlzcGxheU5hbWUgPSBcIk5hdkxpbmtcIjtcbiAgdmFyIGFyaWFDdXJyZW50VHlwZSA9IFByb3BUeXBlcy5vbmVPZihbXCJwYWdlXCIsIFwic3RlcFwiLCBcImxvY2F0aW9uXCIsIFwiZGF0ZVwiLCBcInRpbWVcIiwgXCJ0cnVlXCIsIFwiZmFsc2VcIl0pO1xuICBOYXZMaW5rLnByb3BUeXBlcyA9IF9leHRlbmRzKHt9LCBMaW5rLnByb3BUeXBlcywge1xuICAgIFwiYXJpYS1jdXJyZW50XCI6IGFyaWFDdXJyZW50VHlwZSxcbiAgICBhY3RpdmVDbGFzc05hbWU6IFByb3BUeXBlcy5zdHJpbmcsXG4gICAgYWN0aXZlU3R5bGU6IFByb3BUeXBlcy5vYmplY3QsXG4gICAgY2xhc3NOYW1lOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuc3RyaW5nLCBQcm9wVHlwZXMuZnVuY10pLFxuICAgIGV4YWN0OiBQcm9wVHlwZXMuYm9vbCxcbiAgICBpc0FjdGl2ZTogUHJvcFR5cGVzLmZ1bmMsXG4gICAgbG9jYXRpb246IFByb3BUeXBlcy5vYmplY3QsXG4gICAgc2Vuc2l0aXZlOiBQcm9wVHlwZXMuYm9vbCxcbiAgICBzdHJpY3Q6IFByb3BUeXBlcy5ib29sLFxuICAgIHN0eWxlOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMub2JqZWN0LCBQcm9wVHlwZXMuZnVuY10pXG4gIH0pO1xufVxuXG5leHBvcnQgeyBCcm93c2VyUm91dGVyLCBIYXNoUm91dGVyLCBMaW5rLCBOYXZMaW5rIH07XG4vLyMgc291cmNlTWFwcGluZ1VSTD1yZWFjdC1yb3V0ZXItZG9tLmpzLm1hcFxuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///30876\n")},31052:function(__unused_webpack_module,__unused_webpack_exports,__webpack_require__){eval("//! moment.js locale configuration\n//! locale : Klingon [tlh]\n//! author : Dominika Kruk : https://github.com/amaranthrose\n\n;(function (global, factory) {\n true ? factory(__webpack_require__(95093)) :\n 0\n}(this, (function (moment) { 'use strict';\n\n //! moment.js locale configuration\n\n var numbersNouns = 'pagh_wa’_cha’_wej_loS_vagh_jav_Soch_chorgh_Hut'.split('_');\n\n function translateFuture(output) {\n var time = output;\n time =\n output.indexOf('jaj') !== -1\n ? time.slice(0, -3) + 'leS'\n : output.indexOf('jar') !== -1\n ? time.slice(0, -3) + 'waQ'\n : output.indexOf('DIS') !== -1\n ? time.slice(0, -3) + 'nem'\n : time + ' pIq';\n return time;\n }\n\n function translatePast(output) {\n var time = output;\n time =\n output.indexOf('jaj') !== -1\n ? time.slice(0, -3) + 'Hu’'\n : output.indexOf('jar') !== -1\n ? time.slice(0, -3) + 'wen'\n : output.indexOf('DIS') !== -1\n ? time.slice(0, -3) + 'ben'\n : time + ' ret';\n return time;\n }\n\n function translate(number, withoutSuffix, string, isFuture) {\n var numberNoun = numberAsNoun(number);\n switch (string) {\n case 'ss':\n return numberNoun + ' lup';\n case 'mm':\n return numberNoun + ' tup';\n case 'hh':\n return numberNoun + ' rep';\n case 'dd':\n return numberNoun + ' jaj';\n case 'MM':\n return numberNoun + ' jar';\n case 'yy':\n return numberNoun + ' DIS';\n }\n }\n\n function numberAsNoun(number) {\n var hundred = Math.floor((number % 1000) / 100),\n ten = Math.floor((number % 100) / 10),\n one = number % 10,\n word = '';\n if (hundred > 0) {\n word += numbersNouns[hundred] + 'vatlh';\n }\n if (ten > 0) {\n word += (word !== '' ? ' ' : '') + numbersNouns[ten] + 'maH';\n }\n if (one > 0) {\n word += (word !== '' ? ' ' : '') + numbersNouns[one];\n }\n return word === '' ? 'pagh' : word;\n }\n\n var tlh = moment.defineLocale('tlh', {\n months: 'tera’ jar wa’_tera’ jar cha’_tera’ jar wej_tera’ jar loS_tera’ jar vagh_tera’ jar jav_tera’ jar Soch_tera’ jar chorgh_tera’ jar Hut_tera’ jar wa’maH_tera’ jar wa’maH wa’_tera’ jar wa’maH cha’'.split(\n '_'\n ),\n monthsShort:\n 'jar wa’_jar cha’_jar wej_jar loS_jar vagh_jar jav_jar Soch_jar chorgh_jar Hut_jar wa’maH_jar wa’maH wa’_jar wa’maH cha’'.split(\n '_'\n ),\n monthsParseExact: true,\n weekdays: 'lojmItjaj_DaSjaj_povjaj_ghItlhjaj_loghjaj_buqjaj_ghInjaj'.split(\n '_'\n ),\n weekdaysShort:\n 'lojmItjaj_DaSjaj_povjaj_ghItlhjaj_loghjaj_buqjaj_ghInjaj'.split('_'),\n weekdaysMin:\n 'lojmItjaj_DaSjaj_povjaj_ghItlhjaj_loghjaj_buqjaj_ghInjaj'.split('_'),\n longDateFormat: {\n LT: 'HH:mm',\n LTS: 'HH:mm:ss',\n L: 'DD.MM.YYYY',\n LL: 'D MMMM YYYY',\n LLL: 'D MMMM YYYY HH:mm',\n LLLL: 'dddd, D MMMM YYYY HH:mm',\n },\n calendar: {\n sameDay: '[DaHjaj] LT',\n nextDay: '[wa’leS] LT',\n nextWeek: 'LLL',\n lastDay: '[wa’Hu’] LT',\n lastWeek: 'LLL',\n sameElse: 'L',\n },\n relativeTime: {\n future: translateFuture,\n past: translatePast,\n s: 'puS lup',\n ss: translate,\n m: 'wa’ tup',\n mm: translate,\n h: 'wa’ rep',\n hh: translate,\n d: 'wa’ jaj',\n dd: translate,\n M: 'wa’ jar',\n MM: translate,\n y: 'wa’ DIS',\n yy: translate,\n },\n dayOfMonthOrdinalParse: /\\d{1,2}\\./,\n ordinal: '%d.',\n week: {\n dow: 1, // Monday is the first day of the week.\n doy: 4, // The week that contains Jan 4th is the first week of the year.\n },\n });\n\n return tlh;\n\n})));\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMzEwNTIuanMiLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9pdGctbmV4dGdlbi1mcm9udGVuZC8uL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL3RsaC5qcz9jZjc1Il0sInNvdXJjZXNDb250ZW50IjpbIi8vISBtb21lbnQuanMgbG9jYWxlIGNvbmZpZ3VyYXRpb25cbi8vISBsb2NhbGUgOiBLbGluZ29uIFt0bGhdXG4vLyEgYXV0aG9yIDogRG9taW5pa2EgS3J1ayA6IGh0dHBzOi8vZ2l0aHViLmNvbS9hbWFyYW50aHJvc2VcblxuOyhmdW5jdGlvbiAoZ2xvYmFsLCBmYWN0b3J5KSB7XG4gICB0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcgJiYgdHlwZW9mIG1vZHVsZSAhPT0gJ3VuZGVmaW5lZCdcbiAgICAgICAmJiB0eXBlb2YgcmVxdWlyZSA9PT0gJ2Z1bmN0aW9uJyA/IGZhY3RvcnkocmVxdWlyZSgnLi4vbW9tZW50JykpIDpcbiAgIHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgZGVmaW5lLmFtZCA/IGRlZmluZShbJy4uL21vbWVudCddLCBmYWN0b3J5KSA6XG4gICBmYWN0b3J5KGdsb2JhbC5tb21lbnQpXG59KHRoaXMsIChmdW5jdGlvbiAobW9tZW50KSB7ICd1c2Ugc3RyaWN0JztcblxuICAgIC8vISBtb21lbnQuanMgbG9jYWxlIGNvbmZpZ3VyYXRpb25cblxuICAgIHZhciBudW1iZXJzTm91bnMgPSAncGFnaF93YeKAmV9jaGHigJlfd2VqX2xvU192YWdoX2phdl9Tb2NoX2Nob3JnaF9IdXQnLnNwbGl0KCdfJyk7XG5cbiAgICBmdW5jdGlvbiB0cmFuc2xhdGVGdXR1cmUob3V0cHV0KSB7XG4gICAgICAgIHZhciB0aW1lID0gb3V0cHV0O1xuICAgICAgICB0aW1lID1cbiAgICAgICAgICAgIG91dHB1dC5pbmRleE9mKCdqYWonKSAhPT0gLTFcbiAgICAgICAgICAgICAgICA/IHRpbWUuc2xpY2UoMCwgLTMpICsgJ2xlUydcbiAgICAgICAgICAgICAgICA6IG91dHB1dC5pbmRleE9mKCdqYXInKSAhPT0gLTFcbiAgICAgICAgICAgICAgICAgID8gdGltZS5zbGljZSgwLCAtMykgKyAnd2FRJ1xuICAgICAgICAgICAgICAgICAgOiBvdXRwdXQuaW5kZXhPZignRElTJykgIT09IC0xXG4gICAgICAgICAgICAgICAgICAgID8gdGltZS5zbGljZSgwLCAtMykgKyAnbmVtJ1xuICAgICAgICAgICAgICAgICAgICA6IHRpbWUgKyAnIHBJcSc7XG4gICAgICAgIHJldHVybiB0aW1lO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHRyYW5zbGF0ZVBhc3Qob3V0cHV0KSB7XG4gICAgICAgIHZhciB0aW1lID0gb3V0cHV0O1xuICAgICAgICB0aW1lID1cbiAgICAgICAgICAgIG91dHB1dC5pbmRleE9mKCdqYWonKSAhPT0gLTFcbiAgICAgICAgICAgICAgICA/IHRpbWUuc2xpY2UoMCwgLTMpICsgJ0h14oCZJ1xuICAgICAgICAgICAgICAgIDogb3V0cHV0LmluZGV4T2YoJ2phcicpICE9PSAtMVxuICAgICAgICAgICAgICAgICAgPyB0aW1lLnNsaWNlKDAsIC0zKSArICd3ZW4nXG4gICAgICAgICAgICAgICAgICA6IG91dHB1dC5pbmRleE9mKCdESVMnKSAhPT0gLTFcbiAgICAgICAgICAgICAgICAgICAgPyB0aW1lLnNsaWNlKDAsIC0zKSArICdiZW4nXG4gICAgICAgICAgICAgICAgICAgIDogdGltZSArICcgcmV0JztcbiAgICAgICAgcmV0dXJuIHRpbWU7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gdHJhbnNsYXRlKG51bWJlciwgd2l0aG91dFN1ZmZpeCwgc3RyaW5nLCBpc0Z1dHVyZSkge1xuICAgICAgICB2YXIgbnVtYmVyTm91biA9IG51bWJlckFzTm91bihudW1iZXIpO1xuICAgICAgICBzd2l0Y2ggKHN0cmluZykge1xuICAgICAgICAgICAgY2FzZSAnc3MnOlxuICAgICAgICAgICAgICAgIHJldHVybiBudW1iZXJOb3VuICsgJyBsdXAnO1xuICAgICAgICAgICAgY2FzZSAnbW0nOlxuICAgICAgICAgICAgICAgIHJldHVybiBudW1iZXJOb3VuICsgJyB0dXAnO1xuICAgICAgICAgICAgY2FzZSAnaGgnOlxuICAgICAgICAgICAgICAgIHJldHVybiBudW1iZXJOb3VuICsgJyByZXAnO1xuICAgICAgICAgICAgY2FzZSAnZGQnOlxuICAgICAgICAgICAgICAgIHJldHVybiBudW1iZXJOb3VuICsgJyBqYWonO1xuICAgICAgICAgICAgY2FzZSAnTU0nOlxuICAgICAgICAgICAgICAgIHJldHVybiBudW1iZXJOb3VuICsgJyBqYXInO1xuICAgICAgICAgICAgY2FzZSAneXknOlxuICAgICAgICAgICAgICAgIHJldHVybiBudW1iZXJOb3VuICsgJyBESVMnO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gbnVtYmVyQXNOb3VuKG51bWJlcikge1xuICAgICAgICB2YXIgaHVuZHJlZCA9IE1hdGguZmxvb3IoKG51bWJlciAlIDEwMDApIC8gMTAwKSxcbiAgICAgICAgICAgIHRlbiA9IE1hdGguZmxvb3IoKG51bWJlciAlIDEwMCkgLyAxMCksXG4gICAgICAgICAgICBvbmUgPSBudW1iZXIgJSAxMCxcbiAgICAgICAgICAgIHdvcmQgPSAnJztcbiAgICAgICAgaWYgKGh1bmRyZWQgPiAwKSB7XG4gICAgICAgICAgICB3b3JkICs9IG51bWJlcnNOb3Vuc1todW5kcmVkXSArICd2YXRsaCc7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRlbiA+IDApIHtcbiAgICAgICAgICAgIHdvcmQgKz0gKHdvcmQgIT09ICcnID8gJyAnIDogJycpICsgbnVtYmVyc05vdW5zW3Rlbl0gKyAnbWFIJztcbiAgICAgICAgfVxuICAgICAgICBpZiAob25lID4gMCkge1xuICAgICAgICAgICAgd29yZCArPSAod29yZCAhPT0gJycgPyAnICcgOiAnJykgKyBudW1iZXJzTm91bnNbb25lXTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gd29yZCA9PT0gJycgPyAncGFnaCcgOiB3b3JkO1xuICAgIH1cblxuICAgIHZhciB0bGggPSBtb21lbnQuZGVmaW5lTG9jYWxlKCd0bGgnLCB7XG4gICAgICAgIG1vbnRoczogJ3RlcmHigJkgamFyIHdh4oCZX3RlcmHigJkgamFyIGNoYeKAmV90ZXJh4oCZIGphciB3ZWpfdGVyYeKAmSBqYXIgbG9TX3RlcmHigJkgamFyIHZhZ2hfdGVyYeKAmSBqYXIgamF2X3RlcmHigJkgamFyIFNvY2hfdGVyYeKAmSBqYXIgY2hvcmdoX3RlcmHigJkgamFyIEh1dF90ZXJh4oCZIGphciB3YeKAmW1hSF90ZXJh4oCZIGphciB3YeKAmW1hSCB3YeKAmV90ZXJh4oCZIGphciB3YeKAmW1hSCBjaGHigJknLnNwbGl0KFxuICAgICAgICAgICAgJ18nXG4gICAgICAgICksXG4gICAgICAgIG1vbnRoc1Nob3J0OlxuICAgICAgICAgICAgJ2phciB3YeKAmV9qYXIgY2hh4oCZX2phciB3ZWpfamFyIGxvU19qYXIgdmFnaF9qYXIgamF2X2phciBTb2NoX2phciBjaG9yZ2hfamFyIEh1dF9qYXIgd2HigJltYUhfamFyIHdh4oCZbWFIIHdh4oCZX2phciB3YeKAmW1hSCBjaGHigJknLnNwbGl0KFxuICAgICAgICAgICAgICAgICdfJ1xuICAgICAgICAgICAgKSxcbiAgICAgICAgbW9udGhzUGFyc2VFeGFjdDogdHJ1ZSxcbiAgICAgICAgd2Vla2RheXM6ICdsb2ptSXRqYWpfRGFTamFqX3Bvdmphal9naEl0bGhqYWpfbG9naGphal9idXFqYWpfZ2hJbmphaicuc3BsaXQoXG4gICAgICAgICAgICAnXydcbiAgICAgICAgKSxcbiAgICAgICAgd2Vla2RheXNTaG9ydDpcbiAgICAgICAgICAgICdsb2ptSXRqYWpfRGFTamFqX3Bvdmphal9naEl0bGhqYWpfbG9naGphal9idXFqYWpfZ2hJbmphaicuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXNNaW46XG4gICAgICAgICAgICAnbG9qbUl0amFqX0RhU2phal9wb3ZqYWpfZ2hJdGxoamFqX2xvZ2hqYWpfYnVxamFqX2doSW5qYWonLnNwbGl0KCdfJyksXG4gICAgICAgIGxvbmdEYXRlRm9ybWF0OiB7XG4gICAgICAgICAgICBMVDogJ0hIOm1tJyxcbiAgICAgICAgICAgIExUUzogJ0hIOm1tOnNzJyxcbiAgICAgICAgICAgIEw6ICdERC5NTS5ZWVlZJyxcbiAgICAgICAgICAgIExMOiAnRCBNTU1NIFlZWVknLFxuICAgICAgICAgICAgTExMOiAnRCBNTU1NIFlZWVkgSEg6bW0nLFxuICAgICAgICAgICAgTExMTDogJ2RkZGQsIEQgTU1NTSBZWVlZIEhIOm1tJyxcbiAgICAgICAgfSxcbiAgICAgICAgY2FsZW5kYXI6IHtcbiAgICAgICAgICAgIHNhbWVEYXk6ICdbRGFIamFqXSBMVCcsXG4gICAgICAgICAgICBuZXh0RGF5OiAnW3dh4oCZbGVTXSBMVCcsXG4gICAgICAgICAgICBuZXh0V2VlazogJ0xMTCcsXG4gICAgICAgICAgICBsYXN0RGF5OiAnW3dh4oCZSHXigJldIExUJyxcbiAgICAgICAgICAgIGxhc3RXZWVrOiAnTExMJyxcbiAgICAgICAgICAgIHNhbWVFbHNlOiAnTCcsXG4gICAgICAgIH0sXG4gICAgICAgIHJlbGF0aXZlVGltZToge1xuICAgICAgICAgICAgZnV0dXJlOiB0cmFuc2xhdGVGdXR1cmUsXG4gICAgICAgICAgICBwYXN0OiB0cmFuc2xhdGVQYXN0LFxuICAgICAgICAgICAgczogJ3B1UyBsdXAnLFxuICAgICAgICAgICAgc3M6IHRyYW5zbGF0ZSxcbiAgICAgICAgICAgIG06ICd3YeKAmSB0dXAnLFxuICAgICAgICAgICAgbW06IHRyYW5zbGF0ZSxcbiAgICAgICAgICAgIGg6ICd3YeKAmSByZXAnLFxuICAgICAgICAgICAgaGg6IHRyYW5zbGF0ZSxcbiAgICAgICAgICAgIGQ6ICd3YeKAmSBqYWonLFxuICAgICAgICAgICAgZGQ6IHRyYW5zbGF0ZSxcbiAgICAgICAgICAgIE06ICd3YeKAmSBqYXInLFxuICAgICAgICAgICAgTU06IHRyYW5zbGF0ZSxcbiAgICAgICAgICAgIHk6ICd3YeKAmSBESVMnLFxuICAgICAgICAgICAgeXk6IHRyYW5zbGF0ZSxcbiAgICAgICAgfSxcbiAgICAgICAgZGF5T2ZNb250aE9yZGluYWxQYXJzZTogL1xcZHsxLDJ9XFwuLyxcbiAgICAgICAgb3JkaW5hbDogJyVkLicsXG4gICAgICAgIHdlZWs6IHtcbiAgICAgICAgICAgIGRvdzogMSwgLy8gTW9uZGF5IGlzIHRoZSBmaXJzdCBkYXkgb2YgdGhlIHdlZWsuXG4gICAgICAgICAgICBkb3k6IDQsIC8vIFRoZSB3ZWVrIHRoYXQgY29udGFpbnMgSmFuIDR0aCBpcyB0aGUgZmlyc3Qgd2VlayBvZiB0aGUgeWVhci5cbiAgICAgICAgfSxcbiAgICB9KTtcblxuICAgIHJldHVybiB0bGg7XG5cbn0pKSk7XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///31052\n")},31067:(I,g,t)=>{"use strict";I.exports=t.p+"39fd5179a9c43d00f56a.png"},31081:(I,g,t)=>{"use strict";I.exports=t.p+"74b674c0bb1fd8a972cd.png"},31415:(I,g,t)=>{"use strict";I.exports=t.p+"9dd9d8787cda429aa9f2.png"},31541:function(__unused_webpack_module,__unused_webpack_exports,__webpack_require__){eval("//! moment.js locale configuration\n//! locale : Chinese (Macau) [zh-mo]\n//! author : Ben : https://github.com/ben-lin\n//! author : Chris Lam : https://github.com/hehachris\n//! author : Tan Yuanhong : https://github.com/le0tan\n\n;(function (global, factory) {\n true ? factory(__webpack_require__(95093)) :\n 0\n}(this, (function (moment) { 'use strict';\n\n //! moment.js locale configuration\n\n var zhMo = moment.defineLocale('zh-mo', {\n months: '一月_二月_三月_四月_五月_六月_七月_八月_九月_十月_十一月_十二月'.split(\n '_'\n ),\n monthsShort: '1月_2月_3月_4月_5月_6月_7月_8月_9月_10月_11月_12月'.split(\n '_'\n ),\n weekdays: '星期日_星期一_星期二_星期三_星期四_星期五_星期六'.split('_'),\n weekdaysShort: '週日_週一_週二_週三_週四_週五_週六'.split('_'),\n weekdaysMin: '日_一_二_三_四_五_六'.split('_'),\n longDateFormat: {\n LT: 'HH:mm',\n LTS: 'HH:mm:ss',\n L: 'DD/MM/YYYY',\n LL: 'YYYY年M月D日',\n LLL: 'YYYY年M月D日 HH:mm',\n LLLL: 'YYYY年M月D日dddd HH:mm',\n l: 'D/M/YYYY',\n ll: 'YYYY年M月D日',\n lll: 'YYYY年M月D日 HH:mm',\n llll: 'YYYY年M月D日dddd HH:mm',\n },\n meridiemParse: /凌晨|早上|上午|中午|下午|晚上/,\n meridiemHour: function (hour, meridiem) {\n if (hour === 12) {\n hour = 0;\n }\n if (meridiem === '凌晨' || meridiem === '早上' || meridiem === '上午') {\n return hour;\n } else if (meridiem === '中午') {\n return hour >= 11 ? hour : hour + 12;\n } else if (meridiem === '下午' || meridiem === '晚上') {\n return hour + 12;\n }\n },\n meridiem: function (hour, minute, isLower) {\n var hm = hour * 100 + minute;\n if (hm < 600) {\n return '凌晨';\n } else if (hm < 900) {\n return '早上';\n } else if (hm < 1130) {\n return '上午';\n } else if (hm < 1230) {\n return '中午';\n } else if (hm < 1800) {\n return '下午';\n } else {\n return '晚上';\n }\n },\n calendar: {\n sameDay: '[今天] LT',\n nextDay: '[明天] LT',\n nextWeek: '[下]dddd LT',\n lastDay: '[昨天] LT',\n lastWeek: '[上]dddd LT',\n sameElse: 'L',\n },\n dayOfMonthOrdinalParse: /\\d{1,2}(日|月|週)/,\n ordinal: function (number, period) {\n switch (period) {\n case 'd':\n case 'D':\n case 'DDD':\n return number + '日';\n case 'M':\n return number + '月';\n case 'w':\n case 'W':\n return number + '週';\n default:\n return number;\n }\n },\n relativeTime: {\n future: '%s內',\n past: '%s前',\n s: '幾秒',\n ss: '%d 秒',\n m: '1 分鐘',\n mm: '%d 分鐘',\n h: '1 小時',\n hh: '%d 小時',\n d: '1 天',\n dd: '%d 天',\n M: '1 個月',\n MM: '%d 個月',\n y: '1 年',\n yy: '%d 年',\n },\n });\n\n return zhMo;\n\n})));\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMzE1NDEuanMiLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9pdGctbmV4dGdlbi1mcm9udGVuZC8uL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL3poLW1vLmpzPzNhNmMiXSwic291cmNlc0NvbnRlbnQiOlsiLy8hIG1vbWVudC5qcyBsb2NhbGUgY29uZmlndXJhdGlvblxuLy8hIGxvY2FsZSA6IENoaW5lc2UgKE1hY2F1KSBbemgtbW9dXG4vLyEgYXV0aG9yIDogQmVuIDogaHR0cHM6Ly9naXRodWIuY29tL2Jlbi1saW5cbi8vISBhdXRob3IgOiBDaHJpcyBMYW0gOiBodHRwczovL2dpdGh1Yi5jb20vaGVoYWNocmlzXG4vLyEgYXV0aG9yIDogVGFuIFl1YW5ob25nIDogaHR0cHM6Ly9naXRodWIuY29tL2xlMHRhblxuXG47KGZ1bmN0aW9uIChnbG9iYWwsIGZhY3RvcnkpIHtcbiAgIHR5cGVvZiBleHBvcnRzID09PSAnb2JqZWN0JyAmJiB0eXBlb2YgbW9kdWxlICE9PSAndW5kZWZpbmVkJ1xuICAgICAgICYmIHR5cGVvZiByZXF1aXJlID09PSAnZnVuY3Rpb24nID8gZmFjdG9yeShyZXF1aXJlKCcuLi9tb21lbnQnKSkgOlxuICAgdHlwZW9mIGRlZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiBkZWZpbmUuYW1kID8gZGVmaW5lKFsnLi4vbW9tZW50J10sIGZhY3RvcnkpIDpcbiAgIGZhY3RvcnkoZ2xvYmFsLm1vbWVudClcbn0odGhpcywgKGZ1bmN0aW9uIChtb21lbnQpIHsgJ3VzZSBzdHJpY3QnO1xuXG4gICAgLy8hIG1vbWVudC5qcyBsb2NhbGUgY29uZmlndXJhdGlvblxuXG4gICAgdmFyIHpoTW8gPSBtb21lbnQuZGVmaW5lTG9jYWxlKCd6aC1tbycsIHtcbiAgICAgICAgbW9udGhzOiAn5LiA5pyIX+S6jOaciF/kuInmnIhf5Zub5pyIX+S6lOaciF/lha3mnIhf5LiD5pyIX+WFq+aciF/kuZ3mnIhf5Y2B5pyIX+WNgeS4gOaciF/ljYHkuozmnIgnLnNwbGl0KFxuICAgICAgICAgICAgJ18nXG4gICAgICAgICksXG4gICAgICAgIG1vbnRoc1Nob3J0OiAnMeaciF8y5pyIXzPmnIhfNOaciF815pyIXzbmnIhfN+aciF845pyIXznmnIhfMTDmnIhfMTHmnIhfMTLmnIgnLnNwbGl0KFxuICAgICAgICAgICAgJ18nXG4gICAgICAgICksXG4gICAgICAgIHdlZWtkYXlzOiAn5pif5pyf5pelX+aYn+acn+S4gF/mmJ/mnJ/kuoxf5pif5pyf5LiJX+aYn+acn+Wbm1/mmJ/mnJ/kupRf5pif5pyf5YWtJy5zcGxpdCgnXycpLFxuICAgICAgICB3ZWVrZGF5c1Nob3J0OiAn6YCx5pelX+mAseS4gF/pgLHkuoxf6YCx5LiJX+mAseWbm1/pgLHkupRf6YCx5YWtJy5zcGxpdCgnXycpLFxuICAgICAgICB3ZWVrZGF5c01pbjogJ+aXpV/kuIBf5LqMX+S4iV/lm5tf5LqUX+WFrScuc3BsaXQoJ18nKSxcbiAgICAgICAgbG9uZ0RhdGVGb3JtYXQ6IHtcbiAgICAgICAgICAgIExUOiAnSEg6bW0nLFxuICAgICAgICAgICAgTFRTOiAnSEg6bW06c3MnLFxuICAgICAgICAgICAgTDogJ0REL01NL1lZWVknLFxuICAgICAgICAgICAgTEw6ICdZWVlZ5bm0TeaciETml6UnLFxuICAgICAgICAgICAgTExMOiAnWVlZWeW5tE3mnIhE5pelIEhIOm1tJyxcbiAgICAgICAgICAgIExMTEw6ICdZWVlZ5bm0TeaciETml6VkZGRkIEhIOm1tJyxcbiAgICAgICAgICAgIGw6ICdEL00vWVlZWScsXG4gICAgICAgICAgICBsbDogJ1lZWVnlubRN5pyIROaXpScsXG4gICAgICAgICAgICBsbGw6ICdZWVlZ5bm0TeaciETml6UgSEg6bW0nLFxuICAgICAgICAgICAgbGxsbDogJ1lZWVnlubRN5pyIROaXpWRkZGQgSEg6bW0nLFxuICAgICAgICB9LFxuICAgICAgICBtZXJpZGllbVBhcnNlOiAv5YeM5pmofOaXqeS4inzkuIrljYh85Lit5Y2IfOS4i+WNiHzmmZrkuIovLFxuICAgICAgICBtZXJpZGllbUhvdXI6IGZ1bmN0aW9uIChob3VyLCBtZXJpZGllbSkge1xuICAgICAgICAgICAgaWYgKGhvdXIgPT09IDEyKSB7XG4gICAgICAgICAgICAgICAgaG91ciA9IDA7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAobWVyaWRpZW0gPT09ICflh4zmmagnIHx8IG1lcmlkaWVtID09PSAn5pep5LiKJyB8fCBtZXJpZGllbSA9PT0gJ+S4iuWNiCcpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gaG91cjtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAobWVyaWRpZW0gPT09ICfkuK3ljYgnKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGhvdXIgPj0gMTEgPyBob3VyIDogaG91ciArIDEyO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChtZXJpZGllbSA9PT0gJ+S4i+WNiCcgfHwgbWVyaWRpZW0gPT09ICfmmZrkuIonKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGhvdXIgKyAxMjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgbWVyaWRpZW06IGZ1bmN0aW9uIChob3VyLCBtaW51dGUsIGlzTG93ZXIpIHtcbiAgICAgICAgICAgIHZhciBobSA9IGhvdXIgKiAxMDAgKyBtaW51dGU7XG4gICAgICAgICAgICBpZiAoaG0gPCA2MDApIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gJ+WHjOaZqCc7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGhtIDwgOTAwKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuICfml6nkuIonO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChobSA8IDExMzApIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gJ+S4iuWNiCc7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGhtIDwgMTIzMCkge1xuICAgICAgICAgICAgICAgIHJldHVybiAn5Lit5Y2IJztcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoaG0gPCAxODAwKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuICfkuIvljYgnO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gJ+aZmuS4iic7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIGNhbGVuZGFyOiB7XG4gICAgICAgICAgICBzYW1lRGF5OiAnW+S7iuWkqV0gTFQnLFxuICAgICAgICAgICAgbmV4dERheTogJ1vmmI7lpKldIExUJyxcbiAgICAgICAgICAgIG5leHRXZWVrOiAnW+S4i11kZGRkIExUJyxcbiAgICAgICAgICAgIGxhc3REYXk6ICdb5pio5aSpXSBMVCcsXG4gICAgICAgICAgICBsYXN0V2VlazogJ1vkuIpdZGRkZCBMVCcsXG4gICAgICAgICAgICBzYW1lRWxzZTogJ0wnLFxuICAgICAgICB9LFxuICAgICAgICBkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOiAvXFxkezEsMn0o5pelfOaciHzpgLEpLyxcbiAgICAgICAgb3JkaW5hbDogZnVuY3Rpb24gKG51bWJlciwgcGVyaW9kKSB7XG4gICAgICAgICAgICBzd2l0Y2ggKHBlcmlvZCkge1xuICAgICAgICAgICAgICAgIGNhc2UgJ2QnOlxuICAgICAgICAgICAgICAgIGNhc2UgJ0QnOlxuICAgICAgICAgICAgICAgIGNhc2UgJ0RERCc6XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBudW1iZXIgKyAn5pelJztcbiAgICAgICAgICAgICAgICBjYXNlICdNJzpcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG51bWJlciArICfmnIgnO1xuICAgICAgICAgICAgICAgIGNhc2UgJ3cnOlxuICAgICAgICAgICAgICAgIGNhc2UgJ1cnOlxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gbnVtYmVyICsgJ+mAsSc7XG4gICAgICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG51bWJlcjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgcmVsYXRpdmVUaW1lOiB7XG4gICAgICAgICAgICBmdXR1cmU6ICclc+WFpycsXG4gICAgICAgICAgICBwYXN0OiAnJXPliY0nLFxuICAgICAgICAgICAgczogJ+W5vuenkicsXG4gICAgICAgICAgICBzczogJyVkIOenkicsXG4gICAgICAgICAgICBtOiAnMSDliIbpkJgnLFxuICAgICAgICAgICAgbW06ICclZCDliIbpkJgnLFxuICAgICAgICAgICAgaDogJzEg5bCP5pmCJyxcbiAgICAgICAgICAgIGhoOiAnJWQg5bCP5pmCJyxcbiAgICAgICAgICAgIGQ6ICcxIOWkqScsXG4gICAgICAgICAgICBkZDogJyVkIOWkqScsXG4gICAgICAgICAgICBNOiAnMSDlgIvmnIgnLFxuICAgICAgICAgICAgTU06ICclZCDlgIvmnIgnLFxuICAgICAgICAgICAgeTogJzEg5bm0JyxcbiAgICAgICAgICAgIHl5OiAnJWQg5bm0JyxcbiAgICAgICAgfSxcbiAgICB9KTtcblxuICAgIHJldHVybiB6aE1vO1xuXG59KSkpO1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///31541\n")},31545:function(__unused_webpack_module,__unused_webpack_exports,__webpack_require__){eval("//! moment.js locale configuration\n//! locale : Tibetan [bo]\n//! author : Thupten N. Chakrishar : https://github.com/vajradog\n\n;(function (global, factory) {\n true ? factory(__webpack_require__(95093)) :\n 0\n}(this, (function (moment) { 'use strict';\n\n //! moment.js locale configuration\n\n var symbolMap = {\n 1: '༡',\n 2: '༢',\n 3: '༣',\n 4: '༤',\n 5: '༥',\n 6: '༦',\n 7: '༧',\n 8: '༨',\n 9: '༩',\n 0: '༠',\n },\n numberMap = {\n '༡': '1',\n '༢': '2',\n '༣': '3',\n '༤': '4',\n '༥': '5',\n '༦': '6',\n '༧': '7',\n '༨': '8',\n '༩': '9',\n '༠': '0',\n };\n\n var bo = moment.defineLocale('bo', {\n months: 'ཟླ་བ་དང་པོ_ཟླ་བ་གཉིས་པ_ཟླ་བ་གསུམ་པ_ཟླ་བ་བཞི་པ_ཟླ་བ་ལྔ་པ_ཟླ་བ་དྲུག་པ_ཟླ་བ་བདུན་པ_ཟླ་བ་བརྒྱད་པ_ཟླ་བ་དགུ་པ_ཟླ་བ་བཅུ་པ_ཟླ་བ་བཅུ་གཅིག་པ_ཟླ་བ་བཅུ་གཉིས་པ'.split(\n '_'\n ),\n monthsShort:\n 'ཟླ་1_ཟླ་2_ཟླ་3_ཟླ་4_ཟླ་5_ཟླ་6_ཟླ་7_ཟླ་8_ཟླ་9_ཟླ་10_ཟླ་11_ཟླ་12'.split(\n '_'\n ),\n monthsShortRegex: /^(ཟླ་\\d{1,2})/,\n monthsParseExact: true,\n weekdays:\n 'གཟའ་ཉི་མ་_གཟའ་ཟླ་བ་_གཟའ་མིག་དམར་_གཟའ་ལྷག་པ་_གཟའ་ཕུར་བུ_གཟའ་པ་སངས་_གཟའ་སྤེན་པ་'.split(\n '_'\n ),\n weekdaysShort: 'ཉི་མ་_ཟླ་བ་_མིག་དམར་_ལྷག་པ་_ཕུར་བུ_པ་སངས་_སྤེན་པ་'.split(\n '_'\n ),\n weekdaysMin: 'ཉི_ཟླ_མིག_ལྷག_ཕུར_སངས_སྤེན'.split('_'),\n longDateFormat: {\n LT: 'A h:mm',\n LTS: 'A h:mm:ss',\n L: 'DD/MM/YYYY',\n LL: 'D MMMM YYYY',\n LLL: 'D MMMM YYYY, A h:mm',\n LLLL: 'dddd, D MMMM YYYY, A h:mm',\n },\n calendar: {\n sameDay: '[དི་རིང] LT',\n nextDay: '[སང་ཉིན] LT',\n nextWeek: '[བདུན་ཕྲག་རྗེས་མ], LT',\n lastDay: '[ཁ་སང] LT',\n lastWeek: '[བདུན་ཕྲག་མཐའ་མ] dddd, LT',\n sameElse: 'L',\n },\n relativeTime: {\n future: '%s ལ་',\n past: '%s སྔན་ལ',\n s: 'ལམ་སང',\n ss: '%d སྐར་ཆ།',\n m: 'སྐར་མ་གཅིག',\n mm: '%d སྐར་མ',\n h: 'ཆུ་ཚོད་གཅིག',\n hh: '%d ཆུ་ཚོད',\n d: 'ཉིན་གཅིག',\n dd: '%d ཉིན་',\n M: 'ཟླ་བ་གཅིག',\n MM: '%d ཟླ་བ',\n y: 'ལོ་གཅིག',\n yy: '%d ལོ',\n },\n preparse: function (string) {\n return string.replace(/[༡༢༣༤༥༦༧༨༩༠]/g, function (match) {\n return numberMap[match];\n });\n },\n postformat: function (string) {\n return string.replace(/\\d/g, function (match) {\n return symbolMap[match];\n });\n },\n meridiemParse: /མཚན་མོ|ཞོགས་ཀས|ཉིན་གུང|དགོང་དག|མཚན་མོ/,\n meridiemHour: function (hour, meridiem) {\n if (hour === 12) {\n hour = 0;\n }\n if (\n (meridiem === 'མཚན་མོ' && hour >= 4) ||\n (meridiem === 'ཉིན་གུང' && hour < 5) ||\n meridiem === 'དགོང་དག'\n ) {\n return hour + 12;\n } else {\n return hour;\n }\n },\n meridiem: function (hour, minute, isLower) {\n if (hour < 4) {\n return 'མཚན་མོ';\n } else if (hour < 10) {\n return 'ཞོགས་ཀས';\n } else if (hour < 17) {\n return 'ཉིན་གུང';\n } else if (hour < 20) {\n return 'དགོང་དག';\n } else {\n return 'མཚན་མོ';\n }\n },\n week: {\n dow: 0, // Sunday is the first day of the week.\n doy: 6, // The week that contains Jan 6th is the first week of the year.\n },\n });\n\n return bo;\n\n})));\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMzE1NDUuanMiLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9pdGctbmV4dGdlbi1mcm9udGVuZC8uL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL2JvLmpzP2QyNmEiXSwic291cmNlc0NvbnRlbnQiOlsiLy8hIG1vbWVudC5qcyBsb2NhbGUgY29uZmlndXJhdGlvblxuLy8hIGxvY2FsZSA6IFRpYmV0YW4gW2JvXVxuLy8hIGF1dGhvciA6IFRodXB0ZW4gTi4gQ2hha3Jpc2hhciA6IGh0dHBzOi8vZ2l0aHViLmNvbS92YWpyYWRvZ1xuXG47KGZ1bmN0aW9uIChnbG9iYWwsIGZhY3RvcnkpIHtcbiAgIHR5cGVvZiBleHBvcnRzID09PSAnb2JqZWN0JyAmJiB0eXBlb2YgbW9kdWxlICE9PSAndW5kZWZpbmVkJ1xuICAgICAgICYmIHR5cGVvZiByZXF1aXJlID09PSAnZnVuY3Rpb24nID8gZmFjdG9yeShyZXF1aXJlKCcuLi9tb21lbnQnKSkgOlxuICAgdHlwZW9mIGRlZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiBkZWZpbmUuYW1kID8gZGVmaW5lKFsnLi4vbW9tZW50J10sIGZhY3RvcnkpIDpcbiAgIGZhY3RvcnkoZ2xvYmFsLm1vbWVudClcbn0odGhpcywgKGZ1bmN0aW9uIChtb21lbnQpIHsgJ3VzZSBzdHJpY3QnO1xuXG4gICAgLy8hIG1vbWVudC5qcyBsb2NhbGUgY29uZmlndXJhdGlvblxuXG4gICAgdmFyIHN5bWJvbE1hcCA9IHtcbiAgICAgICAgICAgIDE6ICfgvKEnLFxuICAgICAgICAgICAgMjogJ+C8oicsXG4gICAgICAgICAgICAzOiAn4LyjJyxcbiAgICAgICAgICAgIDQ6ICfgvKQnLFxuICAgICAgICAgICAgNTogJ+C8pScsXG4gICAgICAgICAgICA2OiAn4LymJyxcbiAgICAgICAgICAgIDc6ICfgvKcnLFxuICAgICAgICAgICAgODogJ+C8qCcsXG4gICAgICAgICAgICA5OiAn4LypJyxcbiAgICAgICAgICAgIDA6ICfgvKAnLFxuICAgICAgICB9LFxuICAgICAgICBudW1iZXJNYXAgPSB7XG4gICAgICAgICAgICAn4LyhJzogJzEnLFxuICAgICAgICAgICAgJ+C8oic6ICcyJyxcbiAgICAgICAgICAgICfgvKMnOiAnMycsXG4gICAgICAgICAgICAn4LykJzogJzQnLFxuICAgICAgICAgICAgJ+C8pSc6ICc1JyxcbiAgICAgICAgICAgICfgvKYnOiAnNicsXG4gICAgICAgICAgICAn4LynJzogJzcnLFxuICAgICAgICAgICAgJ+C8qCc6ICc4JyxcbiAgICAgICAgICAgICfgvKknOiAnOScsXG4gICAgICAgICAgICAn4LygJzogJzAnLFxuICAgICAgICB9O1xuXG4gICAgdmFyIGJvID0gbW9tZW50LmRlZmluZUxvY2FsZSgnYm8nLCB7XG4gICAgICAgIG1vbnRoczogJ+C9n+C+s+C8i+C9luC8i+C9keC9hOC8i+C9lOC9vF/gvZ/gvrPgvIvgvZbgvIvgvYLgvYngvbLgvabgvIvgvZRf4L2f4L6z4LyL4L2W4LyL4L2C4L2m4L204L2Y4LyL4L2UX+C9n+C+s+C8i+C9luC8i+C9luC9nuC9suC8i+C9lF/gvZ/gvrPgvIvgvZbgvIvgvaPgvpTgvIvgvZRf4L2f4L6z4LyL4L2W4LyL4L2R4L6y4L204L2C4LyL4L2UX+C9n+C+s+C8i+C9luC8i+C9luC9keC9tOC9k+C8i+C9lF/gvZ/gvrPgvIvgvZbgvIvgvZbgvaLgvpLgvrHgvZHgvIvgvZRf4L2f4L6z4LyL4L2W4LyL4L2R4L2C4L204LyL4L2UX+C9n+C+s+C8i+C9luC8i+C9luC9heC9tOC8i+C9lF/gvZ/gvrPgvIvgvZbgvIvgvZbgvYXgvbTgvIvgvYLgvYXgvbLgvYLgvIvgvZRf4L2f4L6z4LyL4L2W4LyL4L2W4L2F4L204LyL4L2C4L2J4L2y4L2m4LyL4L2UJy5zcGxpdChcbiAgICAgICAgICAgICdfJ1xuICAgICAgICApLFxuICAgICAgICBtb250aHNTaG9ydDpcbiAgICAgICAgICAgICfgvZ/gvrPgvIsxX+C9n+C+s+C8izJf4L2f4L6z4LyLM1/gvZ/gvrPgvIs0X+C9n+C+s+C8izVf4L2f4L6z4LyLNl/gvZ/gvrPgvIs3X+C9n+C+s+C8izhf4L2f4L6z4LyLOV/gvZ/gvrPgvIsxMF/gvZ/gvrPgvIsxMV/gvZ/gvrPgvIsxMicuc3BsaXQoXG4gICAgICAgICAgICAgICAgJ18nXG4gICAgICAgICAgICApLFxuICAgICAgICBtb250aHNTaG9ydFJlZ2V4OiAvXijgvZ/gvrPgvItcXGR7MSwyfSkvLFxuICAgICAgICBtb250aHNQYXJzZUV4YWN0OiB0cnVlLFxuICAgICAgICB3ZWVrZGF5czpcbiAgICAgICAgICAgICfgvYLgvZ/gvaDgvIvgvYngvbLgvIvgvZjgvItf4L2C4L2f4L2g4LyL4L2f4L6z4LyL4L2W4LyLX+C9guC9n+C9oOC8i+C9mOC9suC9guC8i+C9keC9mOC9ouC8i1/gvYLgvZ/gvaDgvIvgvaPgvrfgvYLgvIvgvZTgvItf4L2C4L2f4L2g4LyL4L2V4L204L2i4LyL4L2W4L20X+C9guC9n+C9oOC8i+C9lOC8i+C9puC9hOC9puC8i1/gvYLgvZ/gvaDgvIvgvabgvqTgvbrgvZPgvIvgvZTgvIsnLnNwbGl0KFxuICAgICAgICAgICAgICAgICdfJ1xuICAgICAgICAgICAgKSxcbiAgICAgICAgd2Vla2RheXNTaG9ydDogJ+C9ieC9suC8i+C9mOC8i1/gvZ/gvrPgvIvgvZbgvItf4L2Y4L2y4L2C4LyL4L2R4L2Y4L2i4LyLX+C9o+C+t+C9guC8i+C9lOC8i1/gvZXgvbTgvaLgvIvgvZbgvbRf4L2U4LyL4L2m4L2E4L2m4LyLX+C9puC+pOC9uuC9k+C8i+C9lOC8iycuc3BsaXQoXG4gICAgICAgICAgICAnXydcbiAgICAgICAgKSxcbiAgICAgICAgd2Vla2RheXNNaW46ICfgvYngvbJf4L2f4L6zX+C9mOC9suC9gl/gvaPgvrfgvYJf4L2V4L204L2iX+C9puC9hOC9pl/gvabgvqTgvbrgvZMnLnNwbGl0KCdfJyksXG4gICAgICAgIGxvbmdEYXRlRm9ybWF0OiB7XG4gICAgICAgICAgICBMVDogJ0EgaDptbScsXG4gICAgICAgICAgICBMVFM6ICdBIGg6bW06c3MnLFxuICAgICAgICAgICAgTDogJ0REL01NL1lZWVknLFxuICAgICAgICAgICAgTEw6ICdEIE1NTU0gWVlZWScsXG4gICAgICAgICAgICBMTEw6ICdEIE1NTU0gWVlZWSwgQSBoOm1tJyxcbiAgICAgICAgICAgIExMTEw6ICdkZGRkLCBEIE1NTU0gWVlZWSwgQSBoOm1tJyxcbiAgICAgICAgfSxcbiAgICAgICAgY2FsZW5kYXI6IHtcbiAgICAgICAgICAgIHNhbWVEYXk6ICdb4L2R4L2y4LyL4L2i4L2y4L2EXSBMVCcsXG4gICAgICAgICAgICBuZXh0RGF5OiAnW+C9puC9hOC8i+C9ieC9suC9k10gTFQnLFxuICAgICAgICAgICAgbmV4dFdlZWs6ICdb4L2W4L2R4L204L2T4LyL4L2V4L6y4L2C4LyL4L2i4L6X4L264L2m4LyL4L2YXSwgTFQnLFxuICAgICAgICAgICAgbGFzdERheTogJ1vgvYHgvIvgvabgvYRdIExUJyxcbiAgICAgICAgICAgIGxhc3RXZWVrOiAnW+C9luC9keC9tOC9k+C8i+C9leC+suC9guC8i+C9mOC9kOC9oOC8i+C9mF0gZGRkZCwgTFQnLFxuICAgICAgICAgICAgc2FtZUVsc2U6ICdMJyxcbiAgICAgICAgfSxcbiAgICAgICAgcmVsYXRpdmVUaW1lOiB7XG4gICAgICAgICAgICBmdXR1cmU6ICclcyDgvaPgvIsnLFxuICAgICAgICAgICAgcGFzdDogJyVzIOC9puC+lOC9k+C8i+C9oycsXG4gICAgICAgICAgICBzOiAn4L2j4L2Y4LyL4L2m4L2EJyxcbiAgICAgICAgICAgIHNzOiAnJWQg4L2m4L6Q4L2i4LyL4L2G4LyNJyxcbiAgICAgICAgICAgIG06ICfgvabgvpDgvaLgvIvgvZjgvIvgvYLgvYXgvbLgvYInLFxuICAgICAgICAgICAgbW06ICclZCDgvabgvpDgvaLgvIvgvZgnLFxuICAgICAgICAgICAgaDogJ+C9huC9tOC8i+C9muC9vOC9keC8i+C9guC9heC9suC9gicsXG4gICAgICAgICAgICBoaDogJyVkIOC9huC9tOC8i+C9muC9vOC9kScsXG4gICAgICAgICAgICBkOiAn4L2J4L2y4L2T4LyL4L2C4L2F4L2y4L2CJyxcbiAgICAgICAgICAgIGRkOiAnJWQg4L2J4L2y4L2T4LyLJyxcbiAgICAgICAgICAgIE06ICfgvZ/gvrPgvIvgvZbgvIvgvYLgvYXgvbLgvYInLFxuICAgICAgICAgICAgTU06ICclZCDgvZ/gvrPgvIvgvZYnLFxuICAgICAgICAgICAgeTogJ+C9o+C9vOC8i+C9guC9heC9suC9gicsXG4gICAgICAgICAgICB5eTogJyVkIOC9o+C9vCcsXG4gICAgICAgIH0sXG4gICAgICAgIHByZXBhcnNlOiBmdW5jdGlvbiAoc3RyaW5nKSB7XG4gICAgICAgICAgICByZXR1cm4gc3RyaW5nLnJlcGxhY2UoL1vgvKHgvKLgvKPgvKTgvKXgvKbgvKfgvKjgvKngvKBdL2csIGZ1bmN0aW9uIChtYXRjaCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBudW1iZXJNYXBbbWF0Y2hdO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0sXG4gICAgICAgIHBvc3Rmb3JtYXQ6IGZ1bmN0aW9uIChzdHJpbmcpIHtcbiAgICAgICAgICAgIHJldHVybiBzdHJpbmcucmVwbGFjZSgvXFxkL2csIGZ1bmN0aW9uIChtYXRjaCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBzeW1ib2xNYXBbbWF0Y2hdO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0sXG4gICAgICAgIG1lcmlkaWVtUGFyc2U6IC/gvZjgvZrgvZPgvIvgvZjgvbx84L2e4L284L2C4L2m4LyL4L2A4L2mfOC9ieC9suC9k+C8i+C9guC9tOC9hHzgvZHgvYLgvbzgvYTgvIvgvZHgvYJ84L2Y4L2a4L2T4LyL4L2Y4L28LyxcbiAgICAgICAgbWVyaWRpZW1Ib3VyOiBmdW5jdGlvbiAoaG91ciwgbWVyaWRpZW0pIHtcbiAgICAgICAgICAgIGlmIChob3VyID09PSAxMikge1xuICAgICAgICAgICAgICAgIGhvdXIgPSAwO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgIChtZXJpZGllbSA9PT0gJ+C9mOC9muC9k+C8i+C9mOC9vCcgJiYgaG91ciA+PSA0KSB8fFxuICAgICAgICAgICAgICAgIChtZXJpZGllbSA9PT0gJ+C9ieC9suC9k+C8i+C9guC9tOC9hCcgJiYgaG91ciA8IDUpIHx8XG4gICAgICAgICAgICAgICAgbWVyaWRpZW0gPT09ICfgvZHgvYLgvbzgvYTgvIvgvZHgvYInXG4gICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gaG91ciArIDEyO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gaG91cjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgbWVyaWRpZW06IGZ1bmN0aW9uIChob3VyLCBtaW51dGUsIGlzTG93ZXIpIHtcbiAgICAgICAgICAgIGlmIChob3VyIDwgNCkge1xuICAgICAgICAgICAgICAgIHJldHVybiAn4L2Y4L2a4L2T4LyL4L2Y4L28JztcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoaG91ciA8IDEwKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuICfgvZ7gvbzgvYLgvabgvIvgvYDgvaYnO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChob3VyIDwgMTcpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gJ+C9ieC9suC9k+C8i+C9guC9tOC9hCc7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGhvdXIgPCAyMCkge1xuICAgICAgICAgICAgICAgIHJldHVybiAn4L2R4L2C4L284L2E4LyL4L2R4L2CJztcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuICfgvZjgvZrgvZPgvIvgvZjgvbwnO1xuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICB3ZWVrOiB7XG4gICAgICAgICAgICBkb3c6IDAsIC8vIFN1bmRheSBpcyB0aGUgZmlyc3QgZGF5IG9mIHRoZSB3ZWVrLlxuICAgICAgICAgICAgZG95OiA2LCAvLyBUaGUgd2VlayB0aGF0IGNvbnRhaW5zIEphbiA2dGggaXMgdGhlIGZpcnN0IHdlZWsgb2YgdGhlIHllYXIuXG4gICAgICAgIH0sXG4gICAgfSk7XG5cbiAgICByZXR1cm4gYm87XG5cbn0pKSk7XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///31545\n")},31928:module=>{"use strict";eval("\n\n/**\n * A `Cancel` is an object that is thrown when an operation is canceled.\n *\n * @class\n * @param {string=} message The message.\n */\nfunction Cancel(message) {\n this.message = message;\n}\n\nCancel.prototype.toString = function toString() {\n return 'Cancel' + (this.message ? ': ' + this.message : '');\n};\n\nCancel.prototype.__CANCEL__ = true;\n\nmodule.exports = Cancel;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMzE5MjguanMiLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9pdGctbmV4dGdlbi1mcm9udGVuZC8uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvY2FuY2VsL0NhbmNlbC5qcz83YTc3Il0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxuLyoqXG4gKiBBIGBDYW5jZWxgIGlzIGFuIG9iamVjdCB0aGF0IGlzIHRocm93biB3aGVuIGFuIG9wZXJhdGlvbiBpcyBjYW5jZWxlZC5cbiAqXG4gKiBAY2xhc3NcbiAqIEBwYXJhbSB7c3RyaW5nPX0gbWVzc2FnZSBUaGUgbWVzc2FnZS5cbiAqL1xuZnVuY3Rpb24gQ2FuY2VsKG1lc3NhZ2UpIHtcbiAgdGhpcy5tZXNzYWdlID0gbWVzc2FnZTtcbn1cblxuQ2FuY2VsLnByb3RvdHlwZS50b1N0cmluZyA9IGZ1bmN0aW9uIHRvU3RyaW5nKCkge1xuICByZXR1cm4gJ0NhbmNlbCcgKyAodGhpcy5tZXNzYWdlID8gJzogJyArIHRoaXMubWVzc2FnZSA6ICcnKTtcbn07XG5cbkNhbmNlbC5wcm90b3R5cGUuX19DQU5DRUxfXyA9IHRydWU7XG5cbm1vZHVsZS5leHBvcnRzID0gQ2FuY2VsO1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///31928\n")},32124:(I,g,t)=>{"use strict";I.exports=t.p+"d19ed8d866caa5f82471.png"},32591:(I,g,t)=>{"use strict";I.exports=t.p+"29383785ea58842c83f9.png"},32934:function(__unused_webpack_module,__unused_webpack_exports,__webpack_require__){eval("//! moment.js locale configuration\n//! locale : Esperanto [eo]\n//! author : Colin Dean : https://github.com/colindean\n//! author : Mia Nordentoft Imperatori : https://github.com/miestasmia\n//! comment : miestasmia corrected the translation by colindean\n//! comment : Vivakvo corrected the translation by colindean and miestasmia\n\n;(function (global, factory) {\n true ? factory(__webpack_require__(95093)) :\n 0\n}(this, (function (moment) { 'use strict';\n\n //! moment.js locale configuration\n\n var eo = moment.defineLocale('eo', {\n months: 'januaro_februaro_marto_aprilo_majo_junio_julio_aŭgusto_septembro_oktobro_novembro_decembro'.split(\n '_'\n ),\n monthsShort: 'jan_feb_mart_apr_maj_jun_jul_aŭg_sept_okt_nov_dec'.split('_'),\n weekdays: 'dimanĉo_lundo_mardo_merkredo_ĵaŭdo_vendredo_sabato'.split('_'),\n weekdaysShort: 'dim_lun_mard_merk_ĵaŭ_ven_sab'.split('_'),\n weekdaysMin: 'di_lu_ma_me_ĵa_ve_sa'.split('_'),\n longDateFormat: {\n LT: 'HH:mm',\n LTS: 'HH:mm:ss',\n L: 'YYYY-MM-DD',\n LL: '[la] D[-an de] MMMM, YYYY',\n LLL: '[la] D[-an de] MMMM, YYYY HH:mm',\n LLLL: 'dddd[n], [la] D[-an de] MMMM, YYYY HH:mm',\n llll: 'ddd, [la] D[-an de] MMM, YYYY HH:mm',\n },\n meridiemParse: /[ap]\\.t\\.m/i,\n isPM: function (input) {\n return input.charAt(0).toLowerCase() === 'p';\n },\n meridiem: function (hours, minutes, isLower) {\n if (hours > 11) {\n return isLower ? 'p.t.m.' : 'P.T.M.';\n } else {\n return isLower ? 'a.t.m.' : 'A.T.M.';\n }\n },\n calendar: {\n sameDay: '[Hodiaŭ je] LT',\n nextDay: '[Morgaŭ je] LT',\n nextWeek: 'dddd[n je] LT',\n lastDay: '[Hieraŭ je] LT',\n lastWeek: '[pasintan] dddd[n je] LT',\n sameElse: 'L',\n },\n relativeTime: {\n future: 'post %s',\n past: 'antaŭ %s',\n s: 'kelkaj sekundoj',\n ss: '%d sekundoj',\n m: 'unu minuto',\n mm: '%d minutoj',\n h: 'unu horo',\n hh: '%d horoj',\n d: 'unu tago', //ne 'diurno', ĉar estas uzita por proksimumo\n dd: '%d tagoj',\n M: 'unu monato',\n MM: '%d monatoj',\n y: 'unu jaro',\n yy: '%d jaroj',\n },\n dayOfMonthOrdinalParse: /\\d{1,2}a/,\n ordinal: '%da',\n week: {\n dow: 1, // Monday is the first day of the week.\n doy: 7, // The week that contains Jan 7th is the first week of the year.\n },\n });\n\n return eo;\n\n})));\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMzI5MzQuanMiLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL2l0Zy1uZXh0Z2VuLWZyb250ZW5kLy4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvZW8uanM/NjVkYiJdLCJzb3VyY2VzQ29udGVudCI6WyIvLyEgbW9tZW50LmpzIGxvY2FsZSBjb25maWd1cmF0aW9uXG4vLyEgbG9jYWxlIDogRXNwZXJhbnRvIFtlb11cbi8vISBhdXRob3IgOiBDb2xpbiBEZWFuIDogaHR0cHM6Ly9naXRodWIuY29tL2NvbGluZGVhblxuLy8hIGF1dGhvciA6IE1pYSBOb3JkZW50b2Z0IEltcGVyYXRvcmkgOiBodHRwczovL2dpdGh1Yi5jb20vbWllc3Rhc21pYVxuLy8hIGNvbW1lbnQgOiBtaWVzdGFzbWlhIGNvcnJlY3RlZCB0aGUgdHJhbnNsYXRpb24gYnkgY29saW5kZWFuXG4vLyEgY29tbWVudCA6IFZpdmFrdm8gY29ycmVjdGVkIHRoZSB0cmFuc2xhdGlvbiBieSBjb2xpbmRlYW4gYW5kIG1pZXN0YXNtaWFcblxuOyhmdW5jdGlvbiAoZ2xvYmFsLCBmYWN0b3J5KSB7XG4gICB0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcgJiYgdHlwZW9mIG1vZHVsZSAhPT0gJ3VuZGVmaW5lZCdcbiAgICAgICAmJiB0eXBlb2YgcmVxdWlyZSA9PT0gJ2Z1bmN0aW9uJyA/IGZhY3RvcnkocmVxdWlyZSgnLi4vbW9tZW50JykpIDpcbiAgIHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgZGVmaW5lLmFtZCA/IGRlZmluZShbJy4uL21vbWVudCddLCBmYWN0b3J5KSA6XG4gICBmYWN0b3J5KGdsb2JhbC5tb21lbnQpXG59KHRoaXMsIChmdW5jdGlvbiAobW9tZW50KSB7ICd1c2Ugc3RyaWN0JztcblxuICAgIC8vISBtb21lbnQuanMgbG9jYWxlIGNvbmZpZ3VyYXRpb25cblxuICAgIHZhciBlbyA9IG1vbWVudC5kZWZpbmVMb2NhbGUoJ2VvJywge1xuICAgICAgICBtb250aHM6ICdqYW51YXJvX2ZlYnJ1YXJvX21hcnRvX2Fwcmlsb19tYWpvX2p1bmlvX2p1bGlvX2HFrWd1c3RvX3NlcHRlbWJyb19va3RvYnJvX25vdmVtYnJvX2RlY2VtYnJvJy5zcGxpdChcbiAgICAgICAgICAgICdfJ1xuICAgICAgICApLFxuICAgICAgICBtb250aHNTaG9ydDogJ2phbl9mZWJfbWFydF9hcHJfbWFqX2p1bl9qdWxfYcWtZ19zZXB0X29rdF9ub3ZfZGVjJy5zcGxpdCgnXycpLFxuICAgICAgICB3ZWVrZGF5czogJ2RpbWFuxIlvX2x1bmRvX21hcmRvX21lcmtyZWRvX8S1YcWtZG9fdmVuZHJlZG9fc2FiYXRvJy5zcGxpdCgnXycpLFxuICAgICAgICB3ZWVrZGF5c1Nob3J0OiAnZGltX2x1bl9tYXJkX21lcmtfxLVhxa1fdmVuX3NhYicuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXNNaW46ICdkaV9sdV9tYV9tZV/EtWFfdmVfc2EnLnNwbGl0KCdfJyksXG4gICAgICAgIGxvbmdEYXRlRm9ybWF0OiB7XG4gICAgICAgICAgICBMVDogJ0hIOm1tJyxcbiAgICAgICAgICAgIExUUzogJ0hIOm1tOnNzJyxcbiAgICAgICAgICAgIEw6ICdZWVlZLU1NLUREJyxcbiAgICAgICAgICAgIExMOiAnW2xhXSBEWy1hbiBkZV0gTU1NTSwgWVlZWScsXG4gICAgICAgICAgICBMTEw6ICdbbGFdIERbLWFuIGRlXSBNTU1NLCBZWVlZIEhIOm1tJyxcbiAgICAgICAgICAgIExMTEw6ICdkZGRkW25dLCBbbGFdIERbLWFuIGRlXSBNTU1NLCBZWVlZIEhIOm1tJyxcbiAgICAgICAgICAgIGxsbGw6ICdkZGQsIFtsYV0gRFstYW4gZGVdIE1NTSwgWVlZWSBISDptbScsXG4gICAgICAgIH0sXG4gICAgICAgIG1lcmlkaWVtUGFyc2U6IC9bYXBdXFwudFxcLm0vaSxcbiAgICAgICAgaXNQTTogZnVuY3Rpb24gKGlucHV0KSB7XG4gICAgICAgICAgICByZXR1cm4gaW5wdXQuY2hhckF0KDApLnRvTG93ZXJDYXNlKCkgPT09ICdwJztcbiAgICAgICAgfSxcbiAgICAgICAgbWVyaWRpZW06IGZ1bmN0aW9uIChob3VycywgbWludXRlcywgaXNMb3dlcikge1xuICAgICAgICAgICAgaWYgKGhvdXJzID4gMTEpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gaXNMb3dlciA/ICdwLnQubS4nIDogJ1AuVC5NLic7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHJldHVybiBpc0xvd2VyID8gJ2EudC5tLicgOiAnQS5ULk0uJztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgY2FsZW5kYXI6IHtcbiAgICAgICAgICAgIHNhbWVEYXk6ICdbSG9kaWHFrSBqZV0gTFQnLFxuICAgICAgICAgICAgbmV4dERheTogJ1tNb3JnYcWtIGplXSBMVCcsXG4gICAgICAgICAgICBuZXh0V2VlazogJ2RkZGRbbiBqZV0gTFQnLFxuICAgICAgICAgICAgbGFzdERheTogJ1tIaWVyYcWtIGplXSBMVCcsXG4gICAgICAgICAgICBsYXN0V2VlazogJ1twYXNpbnRhbl0gZGRkZFtuIGplXSBMVCcsXG4gICAgICAgICAgICBzYW1lRWxzZTogJ0wnLFxuICAgICAgICB9LFxuICAgICAgICByZWxhdGl2ZVRpbWU6IHtcbiAgICAgICAgICAgIGZ1dHVyZTogJ3Bvc3QgJXMnLFxuICAgICAgICAgICAgcGFzdDogJ2FudGHFrSAlcycsXG4gICAgICAgICAgICBzOiAna2Vsa2FqIHNla3VuZG9qJyxcbiAgICAgICAgICAgIHNzOiAnJWQgc2VrdW5kb2onLFxuICAgICAgICAgICAgbTogJ3VudSBtaW51dG8nLFxuICAgICAgICAgICAgbW06ICclZCBtaW51dG9qJyxcbiAgICAgICAgICAgIGg6ICd1bnUgaG9ybycsXG4gICAgICAgICAgICBoaDogJyVkIGhvcm9qJyxcbiAgICAgICAgICAgIGQ6ICd1bnUgdGFnbycsIC8vbmUgJ2RpdXJubycsIMSJYXIgZXN0YXMgdXppdGEgcG9yIHByb2tzaW11bW9cbiAgICAgICAgICAgIGRkOiAnJWQgdGFnb2onLFxuICAgICAgICAgICAgTTogJ3VudSBtb25hdG8nLFxuICAgICAgICAgICAgTU06ICclZCBtb25hdG9qJyxcbiAgICAgICAgICAgIHk6ICd1bnUgamFybycsXG4gICAgICAgICAgICB5eTogJyVkIGphcm9qJyxcbiAgICAgICAgfSxcbiAgICAgICAgZGF5T2ZNb250aE9yZGluYWxQYXJzZTogL1xcZHsxLDJ9YS8sXG4gICAgICAgIG9yZGluYWw6ICclZGEnLFxuICAgICAgICB3ZWVrOiB7XG4gICAgICAgICAgICBkb3c6IDEsIC8vIE1vbmRheSBpcyB0aGUgZmlyc3QgZGF5IG9mIHRoZSB3ZWVrLlxuICAgICAgICAgICAgZG95OiA3LCAvLyBUaGUgd2VlayB0aGF0IGNvbnRhaW5zIEphbiA3dGggaXMgdGhlIGZpcnN0IHdlZWsgb2YgdGhlIHllYXIuXG4gICAgICAgIH0sXG4gICAgfSk7XG5cbiAgICByZXR1cm4gZW87XG5cbn0pKSk7XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///32934\n")},33478:function(__unused_webpack_module,__unused_webpack_exports,__webpack_require__){eval("//! moment.js locale configuration\n//! locale : Northern Sami [se]\n//! authors : Bård Rolstad Henriksen : https://github.com/karamell\n\n;(function (global, factory) {\n true ? factory(__webpack_require__(95093)) :\n 0\n}(this, (function (moment) { 'use strict';\n\n //! moment.js locale configuration\n\n var se = moment.defineLocale('se', {\n months: 'ođđajagemánnu_guovvamánnu_njukčamánnu_cuoŋománnu_miessemánnu_geassemánnu_suoidnemánnu_borgemánnu_čakčamánnu_golggotmánnu_skábmamánnu_juovlamánnu'.split(\n '_'\n ),\n monthsShort:\n 'ođđj_guov_njuk_cuo_mies_geas_suoi_borg_čakč_golg_skáb_juov'.split('_'),\n weekdays:\n 'sotnabeaivi_vuossárga_maŋŋebárga_gaskavahkku_duorastat_bearjadat_lávvardat'.split(\n '_'\n ),\n weekdaysShort: 'sotn_vuos_maŋ_gask_duor_bear_láv'.split('_'),\n weekdaysMin: 's_v_m_g_d_b_L'.split('_'),\n longDateFormat: {\n LT: 'HH:mm',\n LTS: 'HH:mm:ss',\n L: 'DD.MM.YYYY',\n LL: 'MMMM D. [b.] YYYY',\n LLL: 'MMMM D. [b.] YYYY [ti.] HH:mm',\n LLLL: 'dddd, MMMM D. [b.] YYYY [ti.] HH:mm',\n },\n calendar: {\n sameDay: '[otne ti] LT',\n nextDay: '[ihttin ti] LT',\n nextWeek: 'dddd [ti] LT',\n lastDay: '[ikte ti] LT',\n lastWeek: '[ovddit] dddd [ti] LT',\n sameElse: 'L',\n },\n relativeTime: {\n future: '%s geažes',\n past: 'maŋit %s',\n s: 'moadde sekunddat',\n ss: '%d sekunddat',\n m: 'okta minuhta',\n mm: '%d minuhtat',\n h: 'okta diimmu',\n hh: '%d diimmut',\n d: 'okta beaivi',\n dd: '%d beaivvit',\n M: 'okta mánnu',\n MM: '%d mánut',\n y: 'okta jahki',\n yy: '%d jagit',\n },\n dayOfMonthOrdinalParse: /\\d{1,2}\\./,\n ordinal: '%d.',\n week: {\n dow: 1, // Monday is the first day of the week.\n doy: 4, // The week that contains Jan 4th is the first week of the year.\n },\n });\n\n return se;\n\n})));\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMzM0NzguanMiLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vaXRnLW5leHRnZW4tZnJvbnRlbmQvLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9zZS5qcz9mZmZmIl0sInNvdXJjZXNDb250ZW50IjpbIi8vISBtb21lbnQuanMgbG9jYWxlIGNvbmZpZ3VyYXRpb25cbi8vISBsb2NhbGUgOiBOb3J0aGVybiBTYW1pIFtzZV1cbi8vISBhdXRob3JzIDogQsOlcmQgUm9sc3RhZCBIZW5yaWtzZW4gOiBodHRwczovL2dpdGh1Yi5jb20va2FyYW1lbGxcblxuOyhmdW5jdGlvbiAoZ2xvYmFsLCBmYWN0b3J5KSB7XG4gICB0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcgJiYgdHlwZW9mIG1vZHVsZSAhPT0gJ3VuZGVmaW5lZCdcbiAgICAgICAmJiB0eXBlb2YgcmVxdWlyZSA9PT0gJ2Z1bmN0aW9uJyA/IGZhY3RvcnkocmVxdWlyZSgnLi4vbW9tZW50JykpIDpcbiAgIHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgZGVmaW5lLmFtZCA/IGRlZmluZShbJy4uL21vbWVudCddLCBmYWN0b3J5KSA6XG4gICBmYWN0b3J5KGdsb2JhbC5tb21lbnQpXG59KHRoaXMsIChmdW5jdGlvbiAobW9tZW50KSB7ICd1c2Ugc3RyaWN0JztcblxuICAgIC8vISBtb21lbnQuanMgbG9jYWxlIGNvbmZpZ3VyYXRpb25cblxuICAgIHZhciBzZSA9IG1vbWVudC5kZWZpbmVMb2NhbGUoJ3NlJywge1xuICAgICAgICBtb250aHM6ICdvxJHEkWFqYWdlbcOhbm51X2d1b3Z2YW3DoW5udV9uanVrxI1hbcOhbm51X2N1b8WLb23DoW5udV9taWVzc2Vtw6FubnVfZ2Vhc3NlbcOhbm51X3N1b2lkbmVtw6FubnVfYm9yZ2Vtw6FubnVfxI1ha8SNYW3DoW5udV9nb2xnZ290bcOhbm51X3Nrw6FibWFtw6FubnVfanVvdmxhbcOhbm51Jy5zcGxpdChcbiAgICAgICAgICAgICdfJ1xuICAgICAgICApLFxuICAgICAgICBtb250aHNTaG9ydDpcbiAgICAgICAgICAgICdvxJHEkWpfZ3Vvdl9uanVrX2N1b19taWVzX2dlYXNfc3VvaV9ib3JnX8SNYWvEjV9nb2xnX3Nrw6FiX2p1b3YnLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzOlxuICAgICAgICAgICAgJ3NvdG5hYmVhaXZpX3Z1b3Nzw6FyZ2FfbWHFi8WLZWLDoXJnYV9nYXNrYXZhaGtrdV9kdW9yYXN0YXRfYmVhcmphZGF0X2zDoXZ2YXJkYXQnLnNwbGl0KFxuICAgICAgICAgICAgICAgICdfJ1xuICAgICAgICAgICAgKSxcbiAgICAgICAgd2Vla2RheXNTaG9ydDogJ3NvdG5fdnVvc19tYcWLX2dhc2tfZHVvcl9iZWFyX2zDoXYnLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzTWluOiAnc192X21fZ19kX2JfTCcuc3BsaXQoJ18nKSxcbiAgICAgICAgbG9uZ0RhdGVGb3JtYXQ6IHtcbiAgICAgICAgICAgIExUOiAnSEg6bW0nLFxuICAgICAgICAgICAgTFRTOiAnSEg6bW06c3MnLFxuICAgICAgICAgICAgTDogJ0RELk1NLllZWVknLFxuICAgICAgICAgICAgTEw6ICdNTU1NIEQuIFtiLl0gWVlZWScsXG4gICAgICAgICAgICBMTEw6ICdNTU1NIEQuIFtiLl0gWVlZWSBbdGkuXSBISDptbScsXG4gICAgICAgICAgICBMTExMOiAnZGRkZCwgTU1NTSBELiBbYi5dIFlZWVkgW3RpLl0gSEg6bW0nLFxuICAgICAgICB9LFxuICAgICAgICBjYWxlbmRhcjoge1xuICAgICAgICAgICAgc2FtZURheTogJ1tvdG5lIHRpXSBMVCcsXG4gICAgICAgICAgICBuZXh0RGF5OiAnW2lodHRpbiB0aV0gTFQnLFxuICAgICAgICAgICAgbmV4dFdlZWs6ICdkZGRkIFt0aV0gTFQnLFxuICAgICAgICAgICAgbGFzdERheTogJ1tpa3RlIHRpXSBMVCcsXG4gICAgICAgICAgICBsYXN0V2VlazogJ1tvdmRkaXRdIGRkZGQgW3RpXSBMVCcsXG4gICAgICAgICAgICBzYW1lRWxzZTogJ0wnLFxuICAgICAgICB9LFxuICAgICAgICByZWxhdGl2ZVRpbWU6IHtcbiAgICAgICAgICAgIGZ1dHVyZTogJyVzIGdlYcW+ZXMnLFxuICAgICAgICAgICAgcGFzdDogJ21hxYtpdCAlcycsXG4gICAgICAgICAgICBzOiAnbW9hZGRlIHNla3VuZGRhdCcsXG4gICAgICAgICAgICBzczogJyVkIHNla3VuZGRhdCcsXG4gICAgICAgICAgICBtOiAnb2t0YSBtaW51aHRhJyxcbiAgICAgICAgICAgIG1tOiAnJWQgbWludWh0YXQnLFxuICAgICAgICAgICAgaDogJ29rdGEgZGlpbW11JyxcbiAgICAgICAgICAgIGhoOiAnJWQgZGlpbW11dCcsXG4gICAgICAgICAgICBkOiAnb2t0YSBiZWFpdmknLFxuICAgICAgICAgICAgZGQ6ICclZCBiZWFpdnZpdCcsXG4gICAgICAgICAgICBNOiAnb2t0YSBtw6FubnUnLFxuICAgICAgICAgICAgTU06ICclZCBtw6FudXQnLFxuICAgICAgICAgICAgeTogJ29rdGEgamFoa2knLFxuICAgICAgICAgICAgeXk6ICclZCBqYWdpdCcsXG4gICAgICAgIH0sXG4gICAgICAgIGRheU9mTW9udGhPcmRpbmFsUGFyc2U6IC9cXGR7MSwyfVxcLi8sXG4gICAgICAgIG9yZGluYWw6ICclZC4nLFxuICAgICAgICB3ZWVrOiB7XG4gICAgICAgICAgICBkb3c6IDEsIC8vIE1vbmRheSBpcyB0aGUgZmlyc3QgZGF5IG9mIHRoZSB3ZWVrLlxuICAgICAgICAgICAgZG95OiA0LCAvLyBUaGUgd2VlayB0aGF0IGNvbnRhaW5zIEphbiA0dGggaXMgdGhlIGZpcnN0IHdlZWsgb2YgdGhlIHllYXIuXG4gICAgICAgIH0sXG4gICAgfSk7XG5cbiAgICByZXR1cm4gc2U7XG5cbn0pKSk7XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///33478\n")},33499:(I,g,t)=>{"use strict";I.exports=t.p+"885b2e75e13943d608fc.png"},33948:(module,__unused_webpack_exports,__webpack_require__)=>{"use strict";eval("\n\nvar utils = __webpack_require__(9516);\n\nmodule.exports = (\n utils.isStandardBrowserEnv() ?\n\n // Standard browser envs support document.cookie\n (function standardBrowserEnv() {\n return {\n write: function write(name, value, expires, path, domain, secure) {\n var cookie = [];\n cookie.push(name + '=' + encodeURIComponent(value));\n\n if (utils.isNumber(expires)) {\n cookie.push('expires=' + new Date(expires).toGMTString());\n }\n\n if (utils.isString(path)) {\n cookie.push('path=' + path);\n }\n\n if (utils.isString(domain)) {\n cookie.push('domain=' + domain);\n }\n\n if (secure === true) {\n cookie.push('secure');\n }\n\n document.cookie = cookie.join('; ');\n },\n\n read: function read(name) {\n var match = document.cookie.match(new RegExp('(^|;\\\\s*)(' + name + ')=([^;]*)'));\n return (match ? decodeURIComponent(match[3]) : null);\n },\n\n remove: function remove(name) {\n this.write(name, '', Date.now() - 86400000);\n }\n };\n })() :\n\n // Non standard browser env (web workers, react-native) lack needed support.\n (function nonStandardBrowserEnv() {\n return {\n write: function write() {},\n read: function read() { return null; },\n remove: function remove() {}\n };\n })()\n);\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMzM5NDguanMiLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL2l0Zy1uZXh0Z2VuLWZyb250ZW5kLy4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9oZWxwZXJzL2Nvb2tpZXMuanM/N2FhYyJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciB1dGlscyA9IHJlcXVpcmUoJy4vLi4vdXRpbHMnKTtcblxubW9kdWxlLmV4cG9ydHMgPSAoXG4gIHV0aWxzLmlzU3RhbmRhcmRCcm93c2VyRW52KCkgP1xuXG4gIC8vIFN0YW5kYXJkIGJyb3dzZXIgZW52cyBzdXBwb3J0IGRvY3VtZW50LmNvb2tpZVxuICAgIChmdW5jdGlvbiBzdGFuZGFyZEJyb3dzZXJFbnYoKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICB3cml0ZTogZnVuY3Rpb24gd3JpdGUobmFtZSwgdmFsdWUsIGV4cGlyZXMsIHBhdGgsIGRvbWFpbiwgc2VjdXJlKSB7XG4gICAgICAgICAgdmFyIGNvb2tpZSA9IFtdO1xuICAgICAgICAgIGNvb2tpZS5wdXNoKG5hbWUgKyAnPScgKyBlbmNvZGVVUklDb21wb25lbnQodmFsdWUpKTtcblxuICAgICAgICAgIGlmICh1dGlscy5pc051bWJlcihleHBpcmVzKSkge1xuICAgICAgICAgICAgY29va2llLnB1c2goJ2V4cGlyZXM9JyArIG5ldyBEYXRlKGV4cGlyZXMpLnRvR01UU3RyaW5nKCkpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmICh1dGlscy5pc1N0cmluZyhwYXRoKSkge1xuICAgICAgICAgICAgY29va2llLnB1c2goJ3BhdGg9JyArIHBhdGgpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmICh1dGlscy5pc1N0cmluZyhkb21haW4pKSB7XG4gICAgICAgICAgICBjb29raWUucHVzaCgnZG9tYWluPScgKyBkb21haW4pO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmIChzZWN1cmUgPT09IHRydWUpIHtcbiAgICAgICAgICAgIGNvb2tpZS5wdXNoKCdzZWN1cmUnKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBkb2N1bWVudC5jb29raWUgPSBjb29raWUuam9pbignOyAnKTtcbiAgICAgICAgfSxcblxuICAgICAgICByZWFkOiBmdW5jdGlvbiByZWFkKG5hbWUpIHtcbiAgICAgICAgICB2YXIgbWF0Y2ggPSBkb2N1bWVudC5jb29raWUubWF0Y2gobmV3IFJlZ0V4cCgnKF58O1xcXFxzKikoJyArIG5hbWUgKyAnKT0oW147XSopJykpO1xuICAgICAgICAgIHJldHVybiAobWF0Y2ggPyBkZWNvZGVVUklDb21wb25lbnQobWF0Y2hbM10pIDogbnVsbCk7XG4gICAgICAgIH0sXG5cbiAgICAgICAgcmVtb3ZlOiBmdW5jdGlvbiByZW1vdmUobmFtZSkge1xuICAgICAgICAgIHRoaXMud3JpdGUobmFtZSwgJycsIERhdGUubm93KCkgLSA4NjQwMDAwMCk7XG4gICAgICAgIH1cbiAgICAgIH07XG4gICAgfSkoKSA6XG5cbiAgLy8gTm9uIHN0YW5kYXJkIGJyb3dzZXIgZW52ICh3ZWIgd29ya2VycywgcmVhY3QtbmF0aXZlKSBsYWNrIG5lZWRlZCBzdXBwb3J0LlxuICAgIChmdW5jdGlvbiBub25TdGFuZGFyZEJyb3dzZXJFbnYoKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICB3cml0ZTogZnVuY3Rpb24gd3JpdGUoKSB7fSxcbiAgICAgICAgcmVhZDogZnVuY3Rpb24gcmVhZCgpIHsgcmV0dXJuIG51bGw7IH0sXG4gICAgICAgIHJlbW92ZTogZnVuY3Rpb24gcmVtb3ZlKCkge31cbiAgICAgIH07XG4gICAgfSkoKVxuKTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///33948\n")},34841:(module,__unused_webpack_exports,__webpack_require__)=>{"use strict";eval("\n\nvar VERSION = (__webpack_require__(49641).version);\n\nvar validators = {};\n\n// eslint-disable-next-line func-names\n['object', 'boolean', 'number', 'function', 'string', 'symbol'].forEach(function(type, i) {\n validators[type] = function validator(thing) {\n return typeof thing === type || 'a' + (i < 1 ? 'n ' : ' ') + type;\n };\n});\n\nvar deprecatedWarnings = {};\n\n/**\n * Transitional option validator\n * @param {function|boolean?} validator - set to false if the transitional option has been removed\n * @param {string?} version - deprecated version / removed since version\n * @param {string?} message - some message with additional info\n * @returns {function}\n */\nvalidators.transitional = function transitional(validator, version, message) {\n function formatMessage(opt, desc) {\n return '[Axios v' + VERSION + '] Transitional option \\'' + opt + '\\'' + desc + (message ? '. ' + message : '');\n }\n\n // eslint-disable-next-line func-names\n return function(value, opt, opts) {\n if (validator === false) {\n throw new Error(formatMessage(opt, ' has been removed' + (version ? ' in ' + version : '')));\n }\n\n if (version && !deprecatedWarnings[opt]) {\n deprecatedWarnings[opt] = true;\n // eslint-disable-next-line no-console\n console.warn(\n formatMessage(\n opt,\n ' has been deprecated since v' + version + ' and will be removed in the near future'\n )\n );\n }\n\n return validator ? validator(value, opt, opts) : true;\n };\n};\n\n/**\n * Assert object's properties type\n * @param {object} options\n * @param {object} schema\n * @param {boolean?} allowUnknown\n */\n\nfunction assertOptions(options, schema, allowUnknown) {\n if (typeof options !== 'object') {\n throw new TypeError('options must be an object');\n }\n var keys = Object.keys(options);\n var i = keys.length;\n while (i-- > 0) {\n var opt = keys[i];\n var validator = schema[opt];\n if (validator) {\n var value = options[opt];\n var result = value === undefined || validator(value, opt, options);\n if (result !== true) {\n throw new TypeError('option ' + opt + ' must be ' + result);\n }\n continue;\n }\n if (allowUnknown !== true) {\n throw Error('Unknown option ' + opt);\n }\n }\n}\n\nmodule.exports = {\n assertOptions: assertOptions,\n validators: validators\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMzQ4NDEuanMiLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9pdGctbmV4dGdlbi1mcm9udGVuZC8uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvaGVscGVycy92YWxpZGF0b3IuanM/ODQ4YiJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciBWRVJTSU9OID0gcmVxdWlyZSgnLi4vZW52L2RhdGEnKS52ZXJzaW9uO1xuXG52YXIgdmFsaWRhdG9ycyA9IHt9O1xuXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZnVuYy1uYW1lc1xuWydvYmplY3QnLCAnYm9vbGVhbicsICdudW1iZXInLCAnZnVuY3Rpb24nLCAnc3RyaW5nJywgJ3N5bWJvbCddLmZvckVhY2goZnVuY3Rpb24odHlwZSwgaSkge1xuICB2YWxpZGF0b3JzW3R5cGVdID0gZnVuY3Rpb24gdmFsaWRhdG9yKHRoaW5nKSB7XG4gICAgcmV0dXJuIHR5cGVvZiB0aGluZyA9PT0gdHlwZSB8fCAnYScgKyAoaSA8IDEgPyAnbiAnIDogJyAnKSArIHR5cGU7XG4gIH07XG59KTtcblxudmFyIGRlcHJlY2F0ZWRXYXJuaW5ncyA9IHt9O1xuXG4vKipcbiAqIFRyYW5zaXRpb25hbCBvcHRpb24gdmFsaWRhdG9yXG4gKiBAcGFyYW0ge2Z1bmN0aW9ufGJvb2xlYW4/fSB2YWxpZGF0b3IgLSBzZXQgdG8gZmFsc2UgaWYgdGhlIHRyYW5zaXRpb25hbCBvcHRpb24gaGFzIGJlZW4gcmVtb3ZlZFxuICogQHBhcmFtIHtzdHJpbmc/fSB2ZXJzaW9uIC0gZGVwcmVjYXRlZCB2ZXJzaW9uIC8gcmVtb3ZlZCBzaW5jZSB2ZXJzaW9uXG4gKiBAcGFyYW0ge3N0cmluZz99IG1lc3NhZ2UgLSBzb21lIG1lc3NhZ2Ugd2l0aCBhZGRpdGlvbmFsIGluZm9cbiAqIEByZXR1cm5zIHtmdW5jdGlvbn1cbiAqL1xudmFsaWRhdG9ycy50cmFuc2l0aW9uYWwgPSBmdW5jdGlvbiB0cmFuc2l0aW9uYWwodmFsaWRhdG9yLCB2ZXJzaW9uLCBtZXNzYWdlKSB7XG4gIGZ1bmN0aW9uIGZvcm1hdE1lc3NhZ2Uob3B0LCBkZXNjKSB7XG4gICAgcmV0dXJuICdbQXhpb3MgdicgKyBWRVJTSU9OICsgJ10gVHJhbnNpdGlvbmFsIG9wdGlvbiBcXCcnICsgb3B0ICsgJ1xcJycgKyBkZXNjICsgKG1lc3NhZ2UgPyAnLiAnICsgbWVzc2FnZSA6ICcnKTtcbiAgfVxuXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBmdW5jLW5hbWVzXG4gIHJldHVybiBmdW5jdGlvbih2YWx1ZSwgb3B0LCBvcHRzKSB7XG4gICAgaWYgKHZhbGlkYXRvciA9PT0gZmFsc2UpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihmb3JtYXRNZXNzYWdlKG9wdCwgJyBoYXMgYmVlbiByZW1vdmVkJyArICh2ZXJzaW9uID8gJyBpbiAnICsgdmVyc2lvbiA6ICcnKSkpO1xuICAgIH1cblxuICAgIGlmICh2ZXJzaW9uICYmICFkZXByZWNhdGVkV2FybmluZ3Nbb3B0XSkge1xuICAgICAgZGVwcmVjYXRlZFdhcm5pbmdzW29wdF0gPSB0cnVlO1xuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWNvbnNvbGVcbiAgICAgIGNvbnNvbGUud2FybihcbiAgICAgICAgZm9ybWF0TWVzc2FnZShcbiAgICAgICAgICBvcHQsXG4gICAgICAgICAgJyBoYXMgYmVlbiBkZXByZWNhdGVkIHNpbmNlIHYnICsgdmVyc2lvbiArICcgYW5kIHdpbGwgYmUgcmVtb3ZlZCBpbiB0aGUgbmVhciBmdXR1cmUnXG4gICAgICAgIClcbiAgICAgICk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHZhbGlkYXRvciA/IHZhbGlkYXRvcih2YWx1ZSwgb3B0LCBvcHRzKSA6IHRydWU7XG4gIH07XG59O1xuXG4vKipcbiAqIEFzc2VydCBvYmplY3QncyBwcm9wZXJ0aWVzIHR5cGVcbiAqIEBwYXJhbSB7b2JqZWN0fSBvcHRpb25zXG4gKiBAcGFyYW0ge29iamVjdH0gc2NoZW1hXG4gKiBAcGFyYW0ge2Jvb2xlYW4/fSBhbGxvd1Vua25vd25cbiAqL1xuXG5mdW5jdGlvbiBhc3NlcnRPcHRpb25zKG9wdGlvbnMsIHNjaGVtYSwgYWxsb3dVbmtub3duKSB7XG4gIGlmICh0eXBlb2Ygb3B0aW9ucyAhPT0gJ29iamVjdCcpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdvcHRpb25zIG11c3QgYmUgYW4gb2JqZWN0Jyk7XG4gIH1cbiAgdmFyIGtleXMgPSBPYmplY3Qua2V5cyhvcHRpb25zKTtcbiAgdmFyIGkgPSBrZXlzLmxlbmd0aDtcbiAgd2hpbGUgKGktLSA+IDApIHtcbiAgICB2YXIgb3B0ID0ga2V5c1tpXTtcbiAgICB2YXIgdmFsaWRhdG9yID0gc2NoZW1hW29wdF07XG4gICAgaWYgKHZhbGlkYXRvcikge1xuICAgICAgdmFyIHZhbHVlID0gb3B0aW9uc1tvcHRdO1xuICAgICAgdmFyIHJlc3VsdCA9IHZhbHVlID09PSB1bmRlZmluZWQgfHwgdmFsaWRhdG9yKHZhbHVlLCBvcHQsIG9wdGlvbnMpO1xuICAgICAgaWYgKHJlc3VsdCAhPT0gdHJ1ZSkge1xuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdvcHRpb24gJyArIG9wdCArICcgbXVzdCBiZSAnICsgcmVzdWx0KTtcbiAgICAgIH1cbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cbiAgICBpZiAoYWxsb3dVbmtub3duICE9PSB0cnVlKSB7XG4gICAgICB0aHJvdyBFcnJvcignVW5rbm93biBvcHRpb24gJyArIG9wdCk7XG4gICAgfVxuICB9XG59XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBhc3NlcnRPcHRpb25zOiBhc3NlcnRPcHRpb25zLFxuICB2YWxpZGF0b3JzOiB2YWxpZGF0b3JzXG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///34841\n")},34864:(I,g,t)=>{"use strict";I.exports=t.p+"ce007454d9fd9c22c813.png"},34932:(I,g,t)=>{"use strict";I.exports=t.p+"6a8e2494d8bc8627a6c2.png"},35094:(I,g,t)=>{"use strict";I.exports=t.p+"959160e2d09860a7eb84.png"},35155:(module,__unused_webpack_exports,__webpack_require__)=>{"use strict";eval("\n\nvar utils = __webpack_require__(9516);\nvar buildURL = __webpack_require__(79106);\nvar InterceptorManager = __webpack_require__(83471);\nvar dispatchRequest = __webpack_require__(64490);\nvar mergeConfig = __webpack_require__(85343);\nvar validator = __webpack_require__(34841);\n\nvar validators = validator.validators;\n/**\n * Create a new instance of Axios\n *\n * @param {Object} instanceConfig The default config for the instance\n */\nfunction Axios(instanceConfig) {\n this.defaults = instanceConfig;\n this.interceptors = {\n request: new InterceptorManager(),\n response: new InterceptorManager()\n };\n}\n\n/**\n * Dispatch a request\n *\n * @param {Object} config The config specific for this request (merged with this.defaults)\n */\nAxios.prototype.request = function request(configOrUrl, config) {\n /*eslint no-param-reassign:0*/\n // Allow for axios('example/url'[, config]) a la fetch API\n if (typeof configOrUrl === 'string') {\n config = config || {};\n config.url = configOrUrl;\n } else {\n config = configOrUrl || {};\n }\n\n config = mergeConfig(this.defaults, config);\n\n // Set config.method\n if (config.method) {\n config.method = config.method.toLowerCase();\n } else if (this.defaults.method) {\n config.method = this.defaults.method.toLowerCase();\n } else {\n config.method = 'get';\n }\n\n var transitional = config.transitional;\n\n if (transitional !== undefined) {\n validator.assertOptions(transitional, {\n silentJSONParsing: validators.transitional(validators.boolean),\n forcedJSONParsing: validators.transitional(validators.boolean),\n clarifyTimeoutError: validators.transitional(validators.boolean)\n }, false);\n }\n\n // filter out skipped interceptors\n var requestInterceptorChain = [];\n var synchronousRequestInterceptors = true;\n this.interceptors.request.forEach(function unshiftRequestInterceptors(interceptor) {\n if (typeof interceptor.runWhen === 'function' && interceptor.runWhen(config) === false) {\n return;\n }\n\n synchronousRequestInterceptors = synchronousRequestInterceptors && interceptor.synchronous;\n\n requestInterceptorChain.unshift(interceptor.fulfilled, interceptor.rejected);\n });\n\n var responseInterceptorChain = [];\n this.interceptors.response.forEach(function pushResponseInterceptors(interceptor) {\n responseInterceptorChain.push(interceptor.fulfilled, interceptor.rejected);\n });\n\n var promise;\n\n if (!synchronousRequestInterceptors) {\n var chain = [dispatchRequest, undefined];\n\n Array.prototype.unshift.apply(chain, requestInterceptorChain);\n chain = chain.concat(responseInterceptorChain);\n\n promise = Promise.resolve(config);\n while (chain.length) {\n promise = promise.then(chain.shift(), chain.shift());\n }\n\n return promise;\n }\n\n\n var newConfig = config;\n while (requestInterceptorChain.length) {\n var onFulfilled = requestInterceptorChain.shift();\n var onRejected = requestInterceptorChain.shift();\n try {\n newConfig = onFulfilled(newConfig);\n } catch (error) {\n onRejected(error);\n break;\n }\n }\n\n try {\n promise = dispatchRequest(newConfig);\n } catch (error) {\n return Promise.reject(error);\n }\n\n while (responseInterceptorChain.length) {\n promise = promise.then(responseInterceptorChain.shift(), responseInterceptorChain.shift());\n }\n\n return promise;\n};\n\nAxios.prototype.getUri = function getUri(config) {\n config = mergeConfig(this.defaults, config);\n return buildURL(config.url, config.params, config.paramsSerializer).replace(/^\\?/, '');\n};\n\n// Provide aliases for supported request methods\nutils.forEach(['delete', 'get', 'head', 'options'], function forEachMethodNoData(method) {\n /*eslint func-names:0*/\n Axios.prototype[method] = function(url, config) {\n return this.request(mergeConfig(config || {}, {\n method: method,\n url: url,\n data: (config || {}).data\n }));\n };\n});\n\nutils.forEach(['post', 'put', 'patch'], function forEachMethodWithData(method) {\n /*eslint func-names:0*/\n Axios.prototype[method] = function(url, data, config) {\n return this.request(mergeConfig(config || {}, {\n method: method,\n url: url,\n data: data\n }));\n };\n});\n\nmodule.exports = Axios;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMzUxNTUuanMiLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9pdGctbmV4dGdlbi1mcm9udGVuZC8uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvY29yZS9BeGlvcy5qcz8wYTA2Il0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIHV0aWxzID0gcmVxdWlyZSgnLi8uLi91dGlscycpO1xudmFyIGJ1aWxkVVJMID0gcmVxdWlyZSgnLi4vaGVscGVycy9idWlsZFVSTCcpO1xudmFyIEludGVyY2VwdG9yTWFuYWdlciA9IHJlcXVpcmUoJy4vSW50ZXJjZXB0b3JNYW5hZ2VyJyk7XG52YXIgZGlzcGF0Y2hSZXF1ZXN0ID0gcmVxdWlyZSgnLi9kaXNwYXRjaFJlcXVlc3QnKTtcbnZhciBtZXJnZUNvbmZpZyA9IHJlcXVpcmUoJy4vbWVyZ2VDb25maWcnKTtcbnZhciB2YWxpZGF0b3IgPSByZXF1aXJlKCcuLi9oZWxwZXJzL3ZhbGlkYXRvcicpO1xuXG52YXIgdmFsaWRhdG9ycyA9IHZhbGlkYXRvci52YWxpZGF0b3JzO1xuLyoqXG4gKiBDcmVhdGUgYSBuZXcgaW5zdGFuY2Ugb2YgQXhpb3NcbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gaW5zdGFuY2VDb25maWcgVGhlIGRlZmF1bHQgY29uZmlnIGZvciB0aGUgaW5zdGFuY2VcbiAqL1xuZnVuY3Rpb24gQXhpb3MoaW5zdGFuY2VDb25maWcpIHtcbiAgdGhpcy5kZWZhdWx0cyA9IGluc3RhbmNlQ29uZmlnO1xuICB0aGlzLmludGVyY2VwdG9ycyA9IHtcbiAgICByZXF1ZXN0OiBuZXcgSW50ZXJjZXB0b3JNYW5hZ2VyKCksXG4gICAgcmVzcG9uc2U6IG5ldyBJbnRlcmNlcHRvck1hbmFnZXIoKVxuICB9O1xufVxuXG4vKipcbiAqIERpc3BhdGNoIGEgcmVxdWVzdFxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSBjb25maWcgVGhlIGNvbmZpZyBzcGVjaWZpYyBmb3IgdGhpcyByZXF1ZXN0IChtZXJnZWQgd2l0aCB0aGlzLmRlZmF1bHRzKVxuICovXG5BeGlvcy5wcm90b3R5cGUucmVxdWVzdCA9IGZ1bmN0aW9uIHJlcXVlc3QoY29uZmlnT3JVcmwsIGNvbmZpZykge1xuICAvKmVzbGludCBuby1wYXJhbS1yZWFzc2lnbjowKi9cbiAgLy8gQWxsb3cgZm9yIGF4aW9zKCdleGFtcGxlL3VybCdbLCBjb25maWddKSBhIGxhIGZldGNoIEFQSVxuICBpZiAodHlwZW9mIGNvbmZpZ09yVXJsID09PSAnc3RyaW5nJykge1xuICAgIGNvbmZpZyA9IGNvbmZpZyB8fCB7fTtcbiAgICBjb25maWcudXJsID0gY29uZmlnT3JVcmw7XG4gIH0gZWxzZSB7XG4gICAgY29uZmlnID0gY29uZmlnT3JVcmwgfHwge307XG4gIH1cblxuICBjb25maWcgPSBtZXJnZUNvbmZpZyh0aGlzLmRlZmF1bHRzLCBjb25maWcpO1xuXG4gIC8vIFNldCBjb25maWcubWV0aG9kXG4gIGlmIChjb25maWcubWV0aG9kKSB7XG4gICAgY29uZmlnLm1ldGhvZCA9IGNvbmZpZy5tZXRob2QudG9Mb3dlckNhc2UoKTtcbiAgfSBlbHNlIGlmICh0aGlzLmRlZmF1bHRzLm1ldGhvZCkge1xuICAgIGNvbmZpZy5tZXRob2QgPSB0aGlzLmRlZmF1bHRzLm1ldGhvZC50b0xvd2VyQ2FzZSgpO1xuICB9IGVsc2Uge1xuICAgIGNvbmZpZy5tZXRob2QgPSAnZ2V0JztcbiAgfVxuXG4gIHZhciB0cmFuc2l0aW9uYWwgPSBjb25maWcudHJhbnNpdGlvbmFsO1xuXG4gIGlmICh0cmFuc2l0aW9uYWwgIT09IHVuZGVmaW5lZCkge1xuICAgIHZhbGlkYXRvci5hc3NlcnRPcHRpb25zKHRyYW5zaXRpb25hbCwge1xuICAgICAgc2lsZW50SlNPTlBhcnNpbmc6IHZhbGlkYXRvcnMudHJhbnNpdGlvbmFsKHZhbGlkYXRvcnMuYm9vbGVhbiksXG4gICAgICBmb3JjZWRKU09OUGFyc2luZzogdmFsaWRhdG9ycy50cmFuc2l0aW9uYWwodmFsaWRhdG9ycy5ib29sZWFuKSxcbiAgICAgIGNsYXJpZnlUaW1lb3V0RXJyb3I6IHZhbGlkYXRvcnMudHJhbnNpdGlvbmFsKHZhbGlkYXRvcnMuYm9vbGVhbilcbiAgICB9LCBmYWxzZSk7XG4gIH1cblxuICAvLyBmaWx0ZXIgb3V0IHNraXBwZWQgaW50ZXJjZXB0b3JzXG4gIHZhciByZXF1ZXN0SW50ZXJjZXB0b3JDaGFpbiA9IFtdO1xuICB2YXIgc3luY2hyb25vdXNSZXF1ZXN0SW50ZXJjZXB0b3JzID0gdHJ1ZTtcbiAgdGhpcy5pbnRlcmNlcHRvcnMucmVxdWVzdC5mb3JFYWNoKGZ1bmN0aW9uIHVuc2hpZnRSZXF1ZXN0SW50ZXJjZXB0b3JzKGludGVyY2VwdG9yKSB7XG4gICAgaWYgKHR5cGVvZiBpbnRlcmNlcHRvci5ydW5XaGVuID09PSAnZnVuY3Rpb24nICYmIGludGVyY2VwdG9yLnJ1bldoZW4oY29uZmlnKSA9PT0gZmFsc2UpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBzeW5jaHJvbm91c1JlcXVlc3RJbnRlcmNlcHRvcnMgPSBzeW5jaHJvbm91c1JlcXVlc3RJbnRlcmNlcHRvcnMgJiYgaW50ZXJjZXB0b3Iuc3luY2hyb25vdXM7XG5cbiAgICByZXF1ZXN0SW50ZXJjZXB0b3JDaGFpbi51bnNoaWZ0KGludGVyY2VwdG9yLmZ1bGZpbGxlZCwgaW50ZXJjZXB0b3IucmVqZWN0ZWQpO1xuICB9KTtcblxuICB2YXIgcmVzcG9uc2VJbnRlcmNlcHRvckNoYWluID0gW107XG4gIHRoaXMuaW50ZXJjZXB0b3JzLnJlc3BvbnNlLmZvckVhY2goZnVuY3Rpb24gcHVzaFJlc3BvbnNlSW50ZXJjZXB0b3JzKGludGVyY2VwdG9yKSB7XG4gICAgcmVzcG9uc2VJbnRlcmNlcHRvckNoYWluLnB1c2goaW50ZXJjZXB0b3IuZnVsZmlsbGVkLCBpbnRlcmNlcHRvci5yZWplY3RlZCk7XG4gIH0pO1xuXG4gIHZhciBwcm9taXNlO1xuXG4gIGlmICghc3luY2hyb25vdXNSZXF1ZXN0SW50ZXJjZXB0b3JzKSB7XG4gICAgdmFyIGNoYWluID0gW2Rpc3BhdGNoUmVxdWVzdCwgdW5kZWZpbmVkXTtcblxuICAgIEFycmF5LnByb3RvdHlwZS51bnNoaWZ0LmFwcGx5KGNoYWluLCByZXF1ZXN0SW50ZXJjZXB0b3JDaGFpbik7XG4gICAgY2hhaW4gPSBjaGFpbi5jb25jYXQocmVzcG9uc2VJbnRlcmNlcHRvckNoYWluKTtcblxuICAgIHByb21pc2UgPSBQcm9taXNlLnJlc29sdmUoY29uZmlnKTtcbiAgICB3aGlsZSAoY2hhaW4ubGVuZ3RoKSB7XG4gICAgICBwcm9taXNlID0gcHJvbWlzZS50aGVuKGNoYWluLnNoaWZ0KCksIGNoYWluLnNoaWZ0KCkpO1xuICAgIH1cblxuICAgIHJldHVybiBwcm9taXNlO1xuICB9XG5cblxuICB2YXIgbmV3Q29uZmlnID0gY29uZmlnO1xuICB3aGlsZSAocmVxdWVzdEludGVyY2VwdG9yQ2hhaW4ubGVuZ3RoKSB7XG4gICAgdmFyIG9uRnVsZmlsbGVkID0gcmVxdWVzdEludGVyY2VwdG9yQ2hhaW4uc2hpZnQoKTtcbiAgICB2YXIgb25SZWplY3RlZCA9IHJlcXVlc3RJbnRlcmNlcHRvckNoYWluLnNoaWZ0KCk7XG4gICAgdHJ5IHtcbiAgICAgIG5ld0NvbmZpZyA9IG9uRnVsZmlsbGVkKG5ld0NvbmZpZyk7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIG9uUmVqZWN0ZWQoZXJyb3IpO1xuICAgICAgYnJlYWs7XG4gICAgfVxuICB9XG5cbiAgdHJ5IHtcbiAgICBwcm9taXNlID0gZGlzcGF0Y2hSZXF1ZXN0KG5ld0NvbmZpZyk7XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgcmV0dXJuIFByb21pc2UucmVqZWN0KGVycm9yKTtcbiAgfVxuXG4gIHdoaWxlIChyZXNwb25zZUludGVyY2VwdG9yQ2hhaW4ubGVuZ3RoKSB7XG4gICAgcHJvbWlzZSA9IHByb21pc2UudGhlbihyZXNwb25zZUludGVyY2VwdG9yQ2hhaW4uc2hpZnQoKSwgcmVzcG9uc2VJbnRlcmNlcHRvckNoYWluLnNoaWZ0KCkpO1xuICB9XG5cbiAgcmV0dXJuIHByb21pc2U7XG59O1xuXG5BeGlvcy5wcm90b3R5cGUuZ2V0VXJpID0gZnVuY3Rpb24gZ2V0VXJpKGNvbmZpZykge1xuICBjb25maWcgPSBtZXJnZUNvbmZpZyh0aGlzLmRlZmF1bHRzLCBjb25maWcpO1xuICByZXR1cm4gYnVpbGRVUkwoY29uZmlnLnVybCwgY29uZmlnLnBhcmFtcywgY29uZmlnLnBhcmFtc1NlcmlhbGl6ZXIpLnJlcGxhY2UoL15cXD8vLCAnJyk7XG59O1xuXG4vLyBQcm92aWRlIGFsaWFzZXMgZm9yIHN1cHBvcnRlZCByZXF1ZXN0IG1ldGhvZHNcbnV0aWxzLmZvckVhY2goWydkZWxldGUnLCAnZ2V0JywgJ2hlYWQnLCAnb3B0aW9ucyddLCBmdW5jdGlvbiBmb3JFYWNoTWV0aG9kTm9EYXRhKG1ldGhvZCkge1xuICAvKmVzbGludCBmdW5jLW5hbWVzOjAqL1xuICBBeGlvcy5wcm90b3R5cGVbbWV0aG9kXSA9IGZ1bmN0aW9uKHVybCwgY29uZmlnKSB7XG4gICAgcmV0dXJuIHRoaXMucmVxdWVzdChtZXJnZUNvbmZpZyhjb25maWcgfHwge30sIHtcbiAgICAgIG1ldGhvZDogbWV0aG9kLFxuICAgICAgdXJsOiB1cmwsXG4gICAgICBkYXRhOiAoY29uZmlnIHx8IHt9KS5kYXRhXG4gICAgfSkpO1xuICB9O1xufSk7XG5cbnV0aWxzLmZvckVhY2goWydwb3N0JywgJ3B1dCcsICdwYXRjaCddLCBmdW5jdGlvbiBmb3JFYWNoTWV0aG9kV2l0aERhdGEobWV0aG9kKSB7XG4gIC8qZXNsaW50IGZ1bmMtbmFtZXM6MCovXG4gIEF4aW9zLnByb3RvdHlwZVttZXRob2RdID0gZnVuY3Rpb24odXJsLCBkYXRhLCBjb25maWcpIHtcbiAgICByZXR1cm4gdGhpcy5yZXF1ZXN0KG1lcmdlQ29uZmlnKGNvbmZpZyB8fCB7fSwge1xuICAgICAgbWV0aG9kOiBtZXRob2QsXG4gICAgICB1cmw6IHVybCxcbiAgICAgIGRhdGE6IGRhdGFcbiAgICB9KSk7XG4gIH07XG59KTtcblxubW9kdWxlLmV4cG9ydHMgPSBBeGlvcztcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///35155\n")},35302:(module,__unused_webpack_exports,__webpack_require__)=>{eval("var isarray = __webpack_require__(64634)\n\n/**\n * Expose `pathToRegexp`.\n */\nmodule.exports = pathToRegexp\nmodule.exports.parse = parse\nmodule.exports.compile = compile\nmodule.exports.tokensToFunction = tokensToFunction\nmodule.exports.tokensToRegExp = tokensToRegExp\n\n/**\n * The main path matching regexp utility.\n *\n * @type {RegExp}\n */\nvar PATH_REGEXP = new RegExp([\n // Match escaped characters that would otherwise appear in future matches.\n // This allows the user to escape special characters that won't transform.\n '(\\\\\\\\.)',\n // Match Express-style parameters and un-named parameters with a prefix\n // and optional suffixes. Matches appear as:\n //\n // \"/:test(\\\\d+)?\" => [\"/\", \"test\", \"\\d+\", undefined, \"?\", undefined]\n // \"/route(\\\\d+)\" => [undefined, undefined, undefined, \"\\d+\", undefined, undefined]\n // \"/*\" => [\"/\", undefined, undefined, undefined, undefined, \"*\"]\n '([\\\\/.])?(?:(?:\\\\:(\\\\w+)(?:\\\\(((?:\\\\\\\\.|[^\\\\\\\\()])+)\\\\))?|\\\\(((?:\\\\\\\\.|[^\\\\\\\\()])+)\\\\))([+*?])?|(\\\\*))'\n].join('|'), 'g')\n\n/**\n * Parse a string for the raw tokens.\n *\n * @param {string} str\n * @param {Object=} options\n * @return {!Array}\n */\nfunction parse (str, options) {\n var tokens = []\n var key = 0\n var index = 0\n var path = ''\n var defaultDelimiter = options && options.delimiter || '/'\n var res\n\n while ((res = PATH_REGEXP.exec(str)) != null) {\n var m = res[0]\n var escaped = res[1]\n var offset = res.index\n path += str.slice(index, offset)\n index = offset + m.length\n\n // Ignore already escaped sequences.\n if (escaped) {\n path += escaped[1]\n continue\n }\n\n var next = str[index]\n var prefix = res[2]\n var name = res[3]\n var capture = res[4]\n var group = res[5]\n var modifier = res[6]\n var asterisk = res[7]\n\n // Push the current path onto the tokens.\n if (path) {\n tokens.push(path)\n path = ''\n }\n\n var partial = prefix != null && next != null && next !== prefix\n var repeat = modifier === '+' || modifier === '*'\n var optional = modifier === '?' || modifier === '*'\n var delimiter = prefix || defaultDelimiter\n var pattern = capture || group\n var prevText = prefix || (typeof tokens[tokens.length - 1] === 'string' ? tokens[tokens.length - 1] : '')\n\n tokens.push({\n name: name || key++,\n prefix: prefix || '',\n delimiter: delimiter,\n optional: optional,\n repeat: repeat,\n partial: partial,\n asterisk: !!asterisk,\n pattern: pattern ? escapeGroup(pattern) : (asterisk ? '.*' : restrictBacktrack(delimiter, prevText))\n })\n }\n\n // Match any characters still remaining.\n if (index < str.length) {\n path += str.substr(index)\n }\n\n // If the path exists, push it onto the end.\n if (path) {\n tokens.push(path)\n }\n\n return tokens\n}\n\nfunction restrictBacktrack(delimiter, prevText) {\n if (!prevText || prevText.indexOf(delimiter) > -1) {\n return '[^' + escapeString(delimiter) + ']+?'\n }\n\n return escapeString(prevText) + '|(?:(?!' + escapeString(prevText) + ')[^' + escapeString(delimiter) + '])+?'\n}\n\n/**\n * Compile a string to a template function for the path.\n *\n * @param {string} str\n * @param {Object=} options\n * @return {!function(Object=, Object=)}\n */\nfunction compile (str, options) {\n return tokensToFunction(parse(str, options), options)\n}\n\n/**\n * Prettier encoding of URI path segments.\n *\n * @param {string}\n * @return {string}\n */\nfunction encodeURIComponentPretty (str) {\n return encodeURI(str).replace(/[\\/?#]/g, function (c) {\n return '%' + c.charCodeAt(0).toString(16).toUpperCase()\n })\n}\n\n/**\n * Encode the asterisk parameter. Similar to `pretty`, but allows slashes.\n *\n * @param {string}\n * @return {string}\n */\nfunction encodeAsterisk (str) {\n return encodeURI(str).replace(/[?#]/g, function (c) {\n return '%' + c.charCodeAt(0).toString(16).toUpperCase()\n })\n}\n\n/**\n * Expose a method for transforming tokens into the path function.\n */\nfunction tokensToFunction (tokens, options) {\n // Compile all the tokens into regexps.\n var matches = new Array(tokens.length)\n\n // Compile all the patterns before compilation.\n for (var i = 0; i < tokens.length; i++) {\n if (typeof tokens[i] === 'object') {\n matches[i] = new RegExp('^(?:' + tokens[i].pattern + ')$', flags(options))\n }\n }\n\n return function (obj, opts) {\n var path = ''\n var data = obj || {}\n var options = opts || {}\n var encode = options.pretty ? encodeURIComponentPretty : encodeURIComponent\n\n for (var i = 0; i < tokens.length; i++) {\n var token = tokens[i]\n\n if (typeof token === 'string') {\n path += token\n\n continue\n }\n\n var value = data[token.name]\n var segment\n\n if (value == null) {\n if (token.optional) {\n // Prepend partial segment prefixes.\n if (token.partial) {\n path += token.prefix\n }\n\n continue\n } else {\n throw new TypeError('Expected \"' + token.name + '\" to be defined')\n }\n }\n\n if (isarray(value)) {\n if (!token.repeat) {\n throw new TypeError('Expected \"' + token.name + '\" to not repeat, but received `' + JSON.stringify(value) + '`')\n }\n\n if (value.length === 0) {\n if (token.optional) {\n continue\n } else {\n throw new TypeError('Expected \"' + token.name + '\" to not be empty')\n }\n }\n\n for (var j = 0; j < value.length; j++) {\n segment = encode(value[j])\n\n if (!matches[i].test(segment)) {\n throw new TypeError('Expected all \"' + token.name + '\" to match \"' + token.pattern + '\", but received `' + JSON.stringify(segment) + '`')\n }\n\n path += (j === 0 ? token.prefix : token.delimiter) + segment\n }\n\n continue\n }\n\n segment = token.asterisk ? encodeAsterisk(value) : encode(value)\n\n if (!matches[i].test(segment)) {\n throw new TypeError('Expected \"' + token.name + '\" to match \"' + token.pattern + '\", but received \"' + segment + '\"')\n }\n\n path += token.prefix + segment\n }\n\n return path\n }\n}\n\n/**\n * Escape a regular expression string.\n *\n * @param {string} str\n * @return {string}\n */\nfunction escapeString (str) {\n return str.replace(/([.+*?=^!:${}()[\\]|\\/\\\\])/g, '\\\\$1')\n}\n\n/**\n * Escape the capturing group by escaping special characters and meaning.\n *\n * @param {string} group\n * @return {string}\n */\nfunction escapeGroup (group) {\n return group.replace(/([=!:$\\/()])/g, '\\\\$1')\n}\n\n/**\n * Attach the keys as a property of the regexp.\n *\n * @param {!RegExp} re\n * @param {Array} keys\n * @return {!RegExp}\n */\nfunction attachKeys (re, keys) {\n re.keys = keys\n return re\n}\n\n/**\n * Get the flags for a regexp from the options.\n *\n * @param {Object} options\n * @return {string}\n */\nfunction flags (options) {\n return options && options.sensitive ? '' : 'i'\n}\n\n/**\n * Pull out keys from a regexp.\n *\n * @param {!RegExp} path\n * @param {!Array} keys\n * @return {!RegExp}\n */\nfunction regexpToRegexp (path, keys) {\n // Use a negative lookahead to match only capturing groups.\n var groups = path.source.match(/\\((?!\\?)/g)\n\n if (groups) {\n for (var i = 0; i < groups.length; i++) {\n keys.push({\n name: i,\n prefix: null,\n delimiter: null,\n optional: false,\n repeat: false,\n partial: false,\n asterisk: false,\n pattern: null\n })\n }\n }\n\n return attachKeys(path, keys)\n}\n\n/**\n * Transform an array into a regexp.\n *\n * @param {!Array} path\n * @param {Array} keys\n * @param {!Object} options\n * @return {!RegExp}\n */\nfunction arrayToRegexp (path, keys, options) {\n var parts = []\n\n for (var i = 0; i < path.length; i++) {\n parts.push(pathToRegexp(path[i], keys, options).source)\n }\n\n var regexp = new RegExp('(?:' + parts.join('|') + ')', flags(options))\n\n return attachKeys(regexp, keys)\n}\n\n/**\n * Create a path regexp from string input.\n *\n * @param {string} path\n * @param {!Array} keys\n * @param {!Object} options\n * @return {!RegExp}\n */\nfunction stringToRegexp (path, keys, options) {\n return tokensToRegExp(parse(path, options), keys, options)\n}\n\n/**\n * Expose a function for taking tokens and returning a RegExp.\n *\n * @param {!Array} tokens\n * @param {(Array|Object)=} keys\n * @param {Object=} options\n * @return {!RegExp}\n */\nfunction tokensToRegExp (tokens, keys, options) {\n if (!isarray(keys)) {\n options = /** @type {!Object} */ (keys || options)\n keys = []\n }\n\n options = options || {}\n\n var strict = options.strict\n var end = options.end !== false\n var route = ''\n\n // Iterate over the tokens and create our regexp string.\n for (var i = 0; i < tokens.length; i++) {\n var token = tokens[i]\n\n if (typeof token === 'string') {\n route += escapeString(token)\n } else {\n var prefix = escapeString(token.prefix)\n var capture = '(?:' + token.pattern + ')'\n\n keys.push(token)\n\n if (token.repeat) {\n capture += '(?:' + prefix + capture + ')*'\n }\n\n if (token.optional) {\n if (!token.partial) {\n capture = '(?:' + prefix + '(' + capture + '))?'\n } else {\n capture = prefix + '(' + capture + ')?'\n }\n } else {\n capture = prefix + '(' + capture + ')'\n }\n\n route += capture\n }\n }\n\n var delimiter = escapeString(options.delimiter || '/')\n var endsWithDelimiter = route.slice(-delimiter.length) === delimiter\n\n // In non-strict mode we allow a slash at the end of match. If the path to\n // match already ends with a slash, we remove it for consistency. The slash\n // is valid at the end of a path match, not in the middle. This is important\n // in non-ending mode, where \"/test/\" shouldn't match \"/test//route\".\n if (!strict) {\n route = (endsWithDelimiter ? route.slice(0, -delimiter.length) : route) + '(?:' + delimiter + '(?=$))?'\n }\n\n if (end) {\n route += '$'\n } else {\n // In non-ending mode, we need the capturing groups to match as much as\n // possible by using a positive lookahead to the end or next path segment.\n route += strict && endsWithDelimiter ? '' : '(?=' + delimiter + '|$)'\n }\n\n return attachKeys(new RegExp('^' + route, flags(options)), keys)\n}\n\n/**\n * Normalize the given path string, returning a regular expression.\n *\n * An empty array can be passed in for the keys, which will hold the\n * placeholder key descriptions. For example, using `/user/:id`, `keys` will\n * contain `[{ name: 'id', delimiter: '/', optional: false, repeat: false }]`.\n *\n * @param {(string|RegExp|Array)} path\n * @param {(Array|Object)=} keys\n * @param {Object=} options\n * @return {!RegExp}\n */\nfunction pathToRegexp (path, keys, options) {\n if (!isarray(keys)) {\n options = /** @type {!Object} */ (keys || options)\n keys = []\n }\n\n options = options || {}\n\n if (path instanceof RegExp) {\n return regexpToRegexp(path, /** @type {!Array} */ (keys))\n }\n\n if (isarray(path)) {\n return arrayToRegexp(/** @type {!Array} */ (path), /** @type {!Array} */ (keys), options)\n }\n\n return stringToRegexp(/** @type {string} */ (path), /** @type {!Array} */ (keys), options)\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMzUzMDIuanMiLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vaXRnLW5leHRnZW4tZnJvbnRlbmQvLi9ub2RlX21vZHVsZXMvcGF0aC10by1yZWdleHAvaW5kZXguanM/YmQxMSJdLCJzb3VyY2VzQ29udGVudCI6WyJ2YXIgaXNhcnJheSA9IHJlcXVpcmUoJ2lzYXJyYXknKVxuXG4vKipcbiAqIEV4cG9zZSBgcGF0aFRvUmVnZXhwYC5cbiAqL1xubW9kdWxlLmV4cG9ydHMgPSBwYXRoVG9SZWdleHBcbm1vZHVsZS5leHBvcnRzLnBhcnNlID0gcGFyc2Vcbm1vZHVsZS5leHBvcnRzLmNvbXBpbGUgPSBjb21waWxlXG5tb2R1bGUuZXhwb3J0cy50b2tlbnNUb0Z1bmN0aW9uID0gdG9rZW5zVG9GdW5jdGlvblxubW9kdWxlLmV4cG9ydHMudG9rZW5zVG9SZWdFeHAgPSB0b2tlbnNUb1JlZ0V4cFxuXG4vKipcbiAqIFRoZSBtYWluIHBhdGggbWF0Y2hpbmcgcmVnZXhwIHV0aWxpdHkuXG4gKlxuICogQHR5cGUge1JlZ0V4cH1cbiAqL1xudmFyIFBBVEhfUkVHRVhQID0gbmV3IFJlZ0V4cChbXG4gIC8vIE1hdGNoIGVzY2FwZWQgY2hhcmFjdGVycyB0aGF0IHdvdWxkIG90aGVyd2lzZSBhcHBlYXIgaW4gZnV0dXJlIG1hdGNoZXMuXG4gIC8vIFRoaXMgYWxsb3dzIHRoZSB1c2VyIHRvIGVzY2FwZSBzcGVjaWFsIGNoYXJhY3RlcnMgdGhhdCB3b24ndCB0cmFuc2Zvcm0uXG4gICcoXFxcXFxcXFwuKScsXG4gIC8vIE1hdGNoIEV4cHJlc3Mtc3R5bGUgcGFyYW1ldGVycyBhbmQgdW4tbmFtZWQgcGFyYW1ldGVycyB3aXRoIGEgcHJlZml4XG4gIC8vIGFuZCBvcHRpb25hbCBzdWZmaXhlcy4gTWF0Y2hlcyBhcHBlYXIgYXM6XG4gIC8vXG4gIC8vIFwiLzp0ZXN0KFxcXFxkKyk/XCIgPT4gW1wiL1wiLCBcInRlc3RcIiwgXCJcXGQrXCIsIHVuZGVmaW5lZCwgXCI/XCIsIHVuZGVmaW5lZF1cbiAgLy8gXCIvcm91dGUoXFxcXGQrKVwiICA9PiBbdW5kZWZpbmVkLCB1bmRlZmluZWQsIHVuZGVmaW5lZCwgXCJcXGQrXCIsIHVuZGVmaW5lZCwgdW5kZWZpbmVkXVxuICAvLyBcIi8qXCIgICAgICAgICAgICA9PiBbXCIvXCIsIHVuZGVmaW5lZCwgdW5kZWZpbmVkLCB1bmRlZmluZWQsIHVuZGVmaW5lZCwgXCIqXCJdXG4gICcoW1xcXFwvLl0pPyg/Oig/OlxcXFw6KFxcXFx3KykoPzpcXFxcKCgoPzpcXFxcXFxcXC58W15cXFxcXFxcXCgpXSkrKVxcXFwpKT98XFxcXCgoKD86XFxcXFxcXFwufFteXFxcXFxcXFwoKV0pKylcXFxcKSkoWysqP10pP3woXFxcXCopKSdcbl0uam9pbignfCcpLCAnZycpXG5cbi8qKlxuICogUGFyc2UgYSBzdHJpbmcgZm9yIHRoZSByYXcgdG9rZW5zLlxuICpcbiAqIEBwYXJhbSAge3N0cmluZ30gIHN0clxuICogQHBhcmFtICB7T2JqZWN0PX0gb3B0aW9uc1xuICogQHJldHVybiB7IUFycmF5fVxuICovXG5mdW5jdGlvbiBwYXJzZSAoc3RyLCBvcHRpb25zKSB7XG4gIHZhciB0b2tlbnMgPSBbXVxuICB2YXIga2V5ID0gMFxuICB2YXIgaW5kZXggPSAwXG4gIHZhciBwYXRoID0gJydcbiAgdmFyIGRlZmF1bHREZWxpbWl0ZXIgPSBvcHRpb25zICYmIG9wdGlvbnMuZGVsaW1pdGVyIHx8ICcvJ1xuICB2YXIgcmVzXG5cbiAgd2hpbGUgKChyZXMgPSBQQVRIX1JFR0VYUC5leGVjKHN0cikpICE9IG51bGwpIHtcbiAgICB2YXIgbSA9IHJlc1swXVxuICAgIHZhciBlc2NhcGVkID0gcmVzWzFdXG4gICAgdmFyIG9mZnNldCA9IHJlcy5pbmRleFxuICAgIHBhdGggKz0gc3RyLnNsaWNlKGluZGV4LCBvZmZzZXQpXG4gICAgaW5kZXggPSBvZmZzZXQgKyBtLmxlbmd0aFxuXG4gICAgLy8gSWdub3JlIGFscmVhZHkgZXNjYXBlZCBzZXF1ZW5jZXMuXG4gICAgaWYgKGVzY2FwZWQpIHtcbiAgICAgIHBhdGggKz0gZXNjYXBlZFsxXVxuICAgICAgY29udGludWVcbiAgICB9XG5cbiAgICB2YXIgbmV4dCA9IHN0cltpbmRleF1cbiAgICB2YXIgcHJlZml4ID0gcmVzWzJdXG4gICAgdmFyIG5hbWUgPSByZXNbM11cbiAgICB2YXIgY2FwdHVyZSA9IHJlc1s0XVxuICAgIHZhciBncm91cCA9IHJlc1s1XVxuICAgIHZhciBtb2RpZmllciA9IHJlc1s2XVxuICAgIHZhciBhc3RlcmlzayA9IHJlc1s3XVxuXG4gICAgLy8gUHVzaCB0aGUgY3VycmVudCBwYXRoIG9udG8gdGhlIHRva2Vucy5cbiAgICBpZiAocGF0aCkge1xuICAgICAgdG9rZW5zLnB1c2gocGF0aClcbiAgICAgIHBhdGggPSAnJ1xuICAgIH1cblxuICAgIHZhciBwYXJ0aWFsID0gcHJlZml4ICE9IG51bGwgJiYgbmV4dCAhPSBudWxsICYmIG5leHQgIT09IHByZWZpeFxuICAgIHZhciByZXBlYXQgPSBtb2RpZmllciA9PT0gJysnIHx8IG1vZGlmaWVyID09PSAnKidcbiAgICB2YXIgb3B0aW9uYWwgPSBtb2RpZmllciA9PT0gJz8nIHx8IG1vZGlmaWVyID09PSAnKidcbiAgICB2YXIgZGVsaW1pdGVyID0gcHJlZml4IHx8IGRlZmF1bHREZWxpbWl0ZXJcbiAgICB2YXIgcGF0dGVybiA9IGNhcHR1cmUgfHwgZ3JvdXBcbiAgICB2YXIgcHJldlRleHQgPSBwcmVmaXggfHwgKHR5cGVvZiB0b2tlbnNbdG9rZW5zLmxlbmd0aCAtIDFdID09PSAnc3RyaW5nJyA/IHRva2Vuc1t0b2tlbnMubGVuZ3RoIC0gMV0gOiAnJylcblxuICAgIHRva2Vucy5wdXNoKHtcbiAgICAgIG5hbWU6IG5hbWUgfHwga2V5KyssXG4gICAgICBwcmVmaXg6IHByZWZpeCB8fCAnJyxcbiAgICAgIGRlbGltaXRlcjogZGVsaW1pdGVyLFxuICAgICAgb3B0aW9uYWw6IG9wdGlvbmFsLFxuICAgICAgcmVwZWF0OiByZXBlYXQsXG4gICAgICBwYXJ0aWFsOiBwYXJ0aWFsLFxuICAgICAgYXN0ZXJpc2s6ICEhYXN0ZXJpc2ssXG4gICAgICBwYXR0ZXJuOiBwYXR0ZXJuID8gZXNjYXBlR3JvdXAocGF0dGVybikgOiAoYXN0ZXJpc2sgPyAnLionIDogcmVzdHJpY3RCYWNrdHJhY2soZGVsaW1pdGVyLCBwcmV2VGV4dCkpXG4gICAgfSlcbiAgfVxuXG4gIC8vIE1hdGNoIGFueSBjaGFyYWN0ZXJzIHN0aWxsIHJlbWFpbmluZy5cbiAgaWYgKGluZGV4IDwgc3RyLmxlbmd0aCkge1xuICAgIHBhdGggKz0gc3RyLnN1YnN0cihpbmRleClcbiAgfVxuXG4gIC8vIElmIHRoZSBwYXRoIGV4aXN0cywgcHVzaCBpdCBvbnRvIHRoZSBlbmQuXG4gIGlmIChwYXRoKSB7XG4gICAgdG9rZW5zLnB1c2gocGF0aClcbiAgfVxuXG4gIHJldHVybiB0b2tlbnNcbn1cblxuZnVuY3Rpb24gcmVzdHJpY3RCYWNrdHJhY2soZGVsaW1pdGVyLCBwcmV2VGV4dCkge1xuICBpZiAoIXByZXZUZXh0IHx8IHByZXZUZXh0LmluZGV4T2YoZGVsaW1pdGVyKSA+IC0xKSB7XG4gICAgcmV0dXJuICdbXicgKyBlc2NhcGVTdHJpbmcoZGVsaW1pdGVyKSArICddKz8nXG4gIH1cblxuICByZXR1cm4gZXNjYXBlU3RyaW5nKHByZXZUZXh0KSArICd8KD86KD8hJyArIGVzY2FwZVN0cmluZyhwcmV2VGV4dCkgKyAnKVteJyArIGVzY2FwZVN0cmluZyhkZWxpbWl0ZXIpICsgJ10pKz8nXG59XG5cbi8qKlxuICogQ29tcGlsZSBhIHN0cmluZyB0byBhIHRlbXBsYXRlIGZ1bmN0aW9uIGZvciB0aGUgcGF0aC5cbiAqXG4gKiBAcGFyYW0gIHtzdHJpbmd9ICAgICAgICAgICAgIHN0clxuICogQHBhcmFtICB7T2JqZWN0PX0gICAgICAgICAgICBvcHRpb25zXG4gKiBAcmV0dXJuIHshZnVuY3Rpb24oT2JqZWN0PSwgT2JqZWN0PSl9XG4gKi9cbmZ1bmN0aW9uIGNvbXBpbGUgKHN0ciwgb3B0aW9ucykge1xuICByZXR1cm4gdG9rZW5zVG9GdW5jdGlvbihwYXJzZShzdHIsIG9wdGlvbnMpLCBvcHRpb25zKVxufVxuXG4vKipcbiAqIFByZXR0aWVyIGVuY29kaW5nIG9mIFVSSSBwYXRoIHNlZ21lbnRzLlxuICpcbiAqIEBwYXJhbSAge3N0cmluZ31cbiAqIEByZXR1cm4ge3N0cmluZ31cbiAqL1xuZnVuY3Rpb24gZW5jb2RlVVJJQ29tcG9uZW50UHJldHR5IChzdHIpIHtcbiAgcmV0dXJuIGVuY29kZVVSSShzdHIpLnJlcGxhY2UoL1tcXC8/I10vZywgZnVuY3Rpb24gKGMpIHtcbiAgICByZXR1cm4gJyUnICsgYy5jaGFyQ29kZUF0KDApLnRvU3RyaW5nKDE2KS50b1VwcGVyQ2FzZSgpXG4gIH0pXG59XG5cbi8qKlxuICogRW5jb2RlIHRoZSBhc3RlcmlzayBwYXJhbWV0ZXIuIFNpbWlsYXIgdG8gYHByZXR0eWAsIGJ1dCBhbGxvd3Mgc2xhc2hlcy5cbiAqXG4gKiBAcGFyYW0gIHtzdHJpbmd9XG4gKiBAcmV0dXJuIHtzdHJpbmd9XG4gKi9cbmZ1bmN0aW9uIGVuY29kZUFzdGVyaXNrIChzdHIpIHtcbiAgcmV0dXJuIGVuY29kZVVSSShzdHIpLnJlcGxhY2UoL1s/I10vZywgZnVuY3Rpb24gKGMpIHtcbiAgICByZXR1cm4gJyUnICsgYy5jaGFyQ29kZUF0KDApLnRvU3RyaW5nKDE2KS50b1VwcGVyQ2FzZSgpXG4gIH0pXG59XG5cbi8qKlxuICogRXhwb3NlIGEgbWV0aG9kIGZvciB0cmFuc2Zvcm1pbmcgdG9rZW5zIGludG8gdGhlIHBhdGggZnVuY3Rpb24uXG4gKi9cbmZ1bmN0aW9uIHRva2Vuc1RvRnVuY3Rpb24gKHRva2Vucywgb3B0aW9ucykge1xuICAvLyBDb21waWxlIGFsbCB0aGUgdG9rZW5zIGludG8gcmVnZXhwcy5cbiAgdmFyIG1hdGNoZXMgPSBuZXcgQXJyYXkodG9rZW5zLmxlbmd0aClcblxuICAvLyBDb21waWxlIGFsbCB0aGUgcGF0dGVybnMgYmVmb3JlIGNvbXBpbGF0aW9uLlxuICBmb3IgKHZhciBpID0gMDsgaSA8IHRva2Vucy5sZW5ndGg7IGkrKykge1xuICAgIGlmICh0eXBlb2YgdG9rZW5zW2ldID09PSAnb2JqZWN0Jykge1xuICAgICAgbWF0Y2hlc1tpXSA9IG5ldyBSZWdFeHAoJ14oPzonICsgdG9rZW5zW2ldLnBhdHRlcm4gKyAnKSQnLCBmbGFncyhvcHRpb25zKSlcbiAgICB9XG4gIH1cblxuICByZXR1cm4gZnVuY3Rpb24gKG9iaiwgb3B0cykge1xuICAgIHZhciBwYXRoID0gJydcbiAgICB2YXIgZGF0YSA9IG9iaiB8fCB7fVxuICAgIHZhciBvcHRpb25zID0gb3B0cyB8fCB7fVxuICAgIHZhciBlbmNvZGUgPSBvcHRpb25zLnByZXR0eSA/IGVuY29kZVVSSUNvbXBvbmVudFByZXR0eSA6IGVuY29kZVVSSUNvbXBvbmVudFxuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0b2tlbnMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciB0b2tlbiA9IHRva2Vuc1tpXVxuXG4gICAgICBpZiAodHlwZW9mIHRva2VuID09PSAnc3RyaW5nJykge1xuICAgICAgICBwYXRoICs9IHRva2VuXG5cbiAgICAgICAgY29udGludWVcbiAgICAgIH1cblxuICAgICAgdmFyIHZhbHVlID0gZGF0YVt0b2tlbi5uYW1lXVxuICAgICAgdmFyIHNlZ21lbnRcblxuICAgICAgaWYgKHZhbHVlID09IG51bGwpIHtcbiAgICAgICAgaWYgKHRva2VuLm9wdGlvbmFsKSB7XG4gICAgICAgICAgLy8gUHJlcGVuZCBwYXJ0aWFsIHNlZ21lbnQgcHJlZml4ZXMuXG4gICAgICAgICAgaWYgKHRva2VuLnBhcnRpYWwpIHtcbiAgICAgICAgICAgIHBhdGggKz0gdG9rZW4ucHJlZml4XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgY29udGludWVcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdFeHBlY3RlZCBcIicgKyB0b2tlbi5uYW1lICsgJ1wiIHRvIGJlIGRlZmluZWQnKVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGlmIChpc2FycmF5KHZhbHVlKSkge1xuICAgICAgICBpZiAoIXRva2VuLnJlcGVhdCkge1xuICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ0V4cGVjdGVkIFwiJyArIHRva2VuLm5hbWUgKyAnXCIgdG8gbm90IHJlcGVhdCwgYnV0IHJlY2VpdmVkIGAnICsgSlNPTi5zdHJpbmdpZnkodmFsdWUpICsgJ2AnKVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHZhbHVlLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgIGlmICh0b2tlbi5vcHRpb25hbCkge1xuICAgICAgICAgICAgY29udGludWVcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignRXhwZWN0ZWQgXCInICsgdG9rZW4ubmFtZSArICdcIiB0byBub3QgYmUgZW1wdHknKVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgdmFsdWUubGVuZ3RoOyBqKyspIHtcbiAgICAgICAgICBzZWdtZW50ID0gZW5jb2RlKHZhbHVlW2pdKVxuXG4gICAgICAgICAgaWYgKCFtYXRjaGVzW2ldLnRlc3Qoc2VnbWVudCkpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ0V4cGVjdGVkIGFsbCBcIicgKyB0b2tlbi5uYW1lICsgJ1wiIHRvIG1hdGNoIFwiJyArIHRva2VuLnBhdHRlcm4gKyAnXCIsIGJ1dCByZWNlaXZlZCBgJyArIEpTT04uc3RyaW5naWZ5KHNlZ21lbnQpICsgJ2AnKVxuICAgICAgICAgIH1cblxuICAgICAgICAgIHBhdGggKz0gKGogPT09IDAgPyB0b2tlbi5wcmVmaXggOiB0b2tlbi5kZWxpbWl0ZXIpICsgc2VnbWVudFxuICAgICAgICB9XG5cbiAgICAgICAgY29udGludWVcbiAgICAgIH1cblxuICAgICAgc2VnbWVudCA9IHRva2VuLmFzdGVyaXNrID8gZW5jb2RlQXN0ZXJpc2sodmFsdWUpIDogZW5jb2RlKHZhbHVlKVxuXG4gICAgICBpZiAoIW1hdGNoZXNbaV0udGVzdChzZWdtZW50KSkge1xuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdFeHBlY3RlZCBcIicgKyB0b2tlbi5uYW1lICsgJ1wiIHRvIG1hdGNoIFwiJyArIHRva2VuLnBhdHRlcm4gKyAnXCIsIGJ1dCByZWNlaXZlZCBcIicgKyBzZWdtZW50ICsgJ1wiJylcbiAgICAgIH1cblxuICAgICAgcGF0aCArPSB0b2tlbi5wcmVmaXggKyBzZWdtZW50XG4gICAgfVxuXG4gICAgcmV0dXJuIHBhdGhcbiAgfVxufVxuXG4vKipcbiAqIEVzY2FwZSBhIHJlZ3VsYXIgZXhwcmVzc2lvbiBzdHJpbmcuXG4gKlxuICogQHBhcmFtICB7c3RyaW5nfSBzdHJcbiAqIEByZXR1cm4ge3N0cmluZ31cbiAqL1xuZnVuY3Rpb24gZXNjYXBlU3RyaW5nIChzdHIpIHtcbiAgcmV0dXJuIHN0ci5yZXBsYWNlKC8oWy4rKj89XiE6JHt9KClbXFxdfFxcL1xcXFxdKS9nLCAnXFxcXCQxJylcbn1cblxuLyoqXG4gKiBFc2NhcGUgdGhlIGNhcHR1cmluZyBncm91cCBieSBlc2NhcGluZyBzcGVjaWFsIGNoYXJhY3RlcnMgYW5kIG1lYW5pbmcuXG4gKlxuICogQHBhcmFtICB7c3RyaW5nfSBncm91cFxuICogQHJldHVybiB7c3RyaW5nfVxuICovXG5mdW5jdGlvbiBlc2NhcGVHcm91cCAoZ3JvdXApIHtcbiAgcmV0dXJuIGdyb3VwLnJlcGxhY2UoLyhbPSE6JFxcLygpXSkvZywgJ1xcXFwkMScpXG59XG5cbi8qKlxuICogQXR0YWNoIHRoZSBrZXlzIGFzIGEgcHJvcGVydHkgb2YgdGhlIHJlZ2V4cC5cbiAqXG4gKiBAcGFyYW0gIHshUmVnRXhwfSByZVxuICogQHBhcmFtICB7QXJyYXl9ICAga2V5c1xuICogQHJldHVybiB7IVJlZ0V4cH1cbiAqL1xuZnVuY3Rpb24gYXR0YWNoS2V5cyAocmUsIGtleXMpIHtcbiAgcmUua2V5cyA9IGtleXNcbiAgcmV0dXJuIHJlXG59XG5cbi8qKlxuICogR2V0IHRoZSBmbGFncyBmb3IgYSByZWdleHAgZnJvbSB0aGUgb3B0aW9ucy5cbiAqXG4gKiBAcGFyYW0gIHtPYmplY3R9IG9wdGlvbnNcbiAqIEByZXR1cm4ge3N0cmluZ31cbiAqL1xuZnVuY3Rpb24gZmxhZ3MgKG9wdGlvbnMpIHtcbiAgcmV0dXJuIG9wdGlvbnMgJiYgb3B0aW9ucy5zZW5zaXRpdmUgPyAnJyA6ICdpJ1xufVxuXG4vKipcbiAqIFB1bGwgb3V0IGtleXMgZnJvbSBhIHJlZ2V4cC5cbiAqXG4gKiBAcGFyYW0gIHshUmVnRXhwfSBwYXRoXG4gKiBAcGFyYW0gIHshQXJyYXl9ICBrZXlzXG4gKiBAcmV0dXJuIHshUmVnRXhwfVxuICovXG5mdW5jdGlvbiByZWdleHBUb1JlZ2V4cCAocGF0aCwga2V5cykge1xuICAvLyBVc2UgYSBuZWdhdGl2ZSBsb29rYWhlYWQgdG8gbWF0Y2ggb25seSBjYXB0dXJpbmcgZ3JvdXBzLlxuICB2YXIgZ3JvdXBzID0gcGF0aC5zb3VyY2UubWF0Y2goL1xcKCg/IVxcPykvZylcblxuICBpZiAoZ3JvdXBzKSB7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBncm91cHMubGVuZ3RoOyBpKyspIHtcbiAgICAgIGtleXMucHVzaCh7XG4gICAgICAgIG5hbWU6IGksXG4gICAgICAgIHByZWZpeDogbnVsbCxcbiAgICAgICAgZGVsaW1pdGVyOiBudWxsLFxuICAgICAgICBvcHRpb25hbDogZmFsc2UsXG4gICAgICAgIHJlcGVhdDogZmFsc2UsXG4gICAgICAgIHBhcnRpYWw6IGZhbHNlLFxuICAgICAgICBhc3RlcmlzazogZmFsc2UsXG4gICAgICAgIHBhdHRlcm46IG51bGxcbiAgICAgIH0pXG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGF0dGFjaEtleXMocGF0aCwga2V5cylcbn1cblxuLyoqXG4gKiBUcmFuc2Zvcm0gYW4gYXJyYXkgaW50byBhIHJlZ2V4cC5cbiAqXG4gKiBAcGFyYW0gIHshQXJyYXl9ICBwYXRoXG4gKiBAcGFyYW0gIHtBcnJheX0gICBrZXlzXG4gKiBAcGFyYW0gIHshT2JqZWN0fSBvcHRpb25zXG4gKiBAcmV0dXJuIHshUmVnRXhwfVxuICovXG5mdW5jdGlvbiBhcnJheVRvUmVnZXhwIChwYXRoLCBrZXlzLCBvcHRpb25zKSB7XG4gIHZhciBwYXJ0cyA9IFtdXG5cbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBwYXRoLmxlbmd0aDsgaSsrKSB7XG4gICAgcGFydHMucHVzaChwYXRoVG9SZWdleHAocGF0aFtpXSwga2V5cywgb3B0aW9ucykuc291cmNlKVxuICB9XG5cbiAgdmFyIHJlZ2V4cCA9IG5ldyBSZWdFeHAoJyg/OicgKyBwYXJ0cy5qb2luKCd8JykgKyAnKScsIGZsYWdzKG9wdGlvbnMpKVxuXG4gIHJldHVybiBhdHRhY2hLZXlzKHJlZ2V4cCwga2V5cylcbn1cblxuLyoqXG4gKiBDcmVhdGUgYSBwYXRoIHJlZ2V4cCBmcm9tIHN0cmluZyBpbnB1dC5cbiAqXG4gKiBAcGFyYW0gIHtzdHJpbmd9ICBwYXRoXG4gKiBAcGFyYW0gIHshQXJyYXl9ICBrZXlzXG4gKiBAcGFyYW0gIHshT2JqZWN0fSBvcHRpb25zXG4gKiBAcmV0dXJuIHshUmVnRXhwfVxuICovXG5mdW5jdGlvbiBzdHJpbmdUb1JlZ2V4cCAocGF0aCwga2V5cywgb3B0aW9ucykge1xuICByZXR1cm4gdG9rZW5zVG9SZWdFeHAocGFyc2UocGF0aCwgb3B0aW9ucyksIGtleXMsIG9wdGlvbnMpXG59XG5cbi8qKlxuICogRXhwb3NlIGEgZnVuY3Rpb24gZm9yIHRha2luZyB0b2tlbnMgYW5kIHJldHVybmluZyBhIFJlZ0V4cC5cbiAqXG4gKiBAcGFyYW0gIHshQXJyYXl9ICAgICAgICAgIHRva2Vuc1xuICogQHBhcmFtICB7KEFycmF5fE9iamVjdCk9fSBrZXlzXG4gKiBAcGFyYW0gIHtPYmplY3Q9fSAgICAgICAgIG9wdGlvbnNcbiAqIEByZXR1cm4geyFSZWdFeHB9XG4gKi9cbmZ1bmN0aW9uIHRva2Vuc1RvUmVnRXhwICh0b2tlbnMsIGtleXMsIG9wdGlvbnMpIHtcbiAgaWYgKCFpc2FycmF5KGtleXMpKSB7XG4gICAgb3B0aW9ucyA9IC8qKiBAdHlwZSB7IU9iamVjdH0gKi8gKGtleXMgfHwgb3B0aW9ucylcbiAgICBrZXlzID0gW11cbiAgfVxuXG4gIG9wdGlvbnMgPSBvcHRpb25zIHx8IHt9XG5cbiAgdmFyIHN0cmljdCA9IG9wdGlvbnMuc3RyaWN0XG4gIHZhciBlbmQgPSBvcHRpb25zLmVuZCAhPT0gZmFsc2VcbiAgdmFyIHJvdXRlID0gJydcblxuICAvLyBJdGVyYXRlIG92ZXIgdGhlIHRva2VucyBhbmQgY3JlYXRlIG91ciByZWdleHAgc3RyaW5nLlxuICBmb3IgKHZhciBpID0gMDsgaSA8IHRva2Vucy5sZW5ndGg7IGkrKykge1xuICAgIHZhciB0b2tlbiA9IHRva2Vuc1tpXVxuXG4gICAgaWYgKHR5cGVvZiB0b2tlbiA9PT0gJ3N0cmluZycpIHtcbiAgICAgIHJvdXRlICs9IGVzY2FwZVN0cmluZyh0b2tlbilcbiAgICB9IGVsc2Uge1xuICAgICAgdmFyIHByZWZpeCA9IGVzY2FwZVN0cmluZyh0b2tlbi5wcmVmaXgpXG4gICAgICB2YXIgY2FwdHVyZSA9ICcoPzonICsgdG9rZW4ucGF0dGVybiArICcpJ1xuXG4gICAgICBrZXlzLnB1c2godG9rZW4pXG5cbiAgICAgIGlmICh0b2tlbi5yZXBlYXQpIHtcbiAgICAgICAgY2FwdHVyZSArPSAnKD86JyArIHByZWZpeCArIGNhcHR1cmUgKyAnKSonXG4gICAgICB9XG5cbiAgICAgIGlmICh0b2tlbi5vcHRpb25hbCkge1xuICAgICAgICBpZiAoIXRva2VuLnBhcnRpYWwpIHtcbiAgICAgICAgICBjYXB0dXJlID0gJyg/OicgKyBwcmVmaXggKyAnKCcgKyBjYXB0dXJlICsgJykpPydcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBjYXB0dXJlID0gcHJlZml4ICsgJygnICsgY2FwdHVyZSArICcpPydcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY2FwdHVyZSA9IHByZWZpeCArICcoJyArIGNhcHR1cmUgKyAnKSdcbiAgICAgIH1cblxuICAgICAgcm91dGUgKz0gY2FwdHVyZVxuICAgIH1cbiAgfVxuXG4gIHZhciBkZWxpbWl0ZXIgPSBlc2NhcGVTdHJpbmcob3B0aW9ucy5kZWxpbWl0ZXIgfHwgJy8nKVxuICB2YXIgZW5kc1dpdGhEZWxpbWl0ZXIgPSByb3V0ZS5zbGljZSgtZGVsaW1pdGVyLmxlbmd0aCkgPT09IGRlbGltaXRlclxuXG4gIC8vIEluIG5vbi1zdHJpY3QgbW9kZSB3ZSBhbGxvdyBhIHNsYXNoIGF0IHRoZSBlbmQgb2YgbWF0Y2guIElmIHRoZSBwYXRoIHRvXG4gIC8vIG1hdGNoIGFscmVhZHkgZW5kcyB3aXRoIGEgc2xhc2gsIHdlIHJlbW92ZSBpdCBmb3IgY29uc2lzdGVuY3kuIFRoZSBzbGFzaFxuICAvLyBpcyB2YWxpZCBhdCB0aGUgZW5kIG9mIGEgcGF0aCBtYXRjaCwgbm90IGluIHRoZSBtaWRkbGUuIFRoaXMgaXMgaW1wb3J0YW50XG4gIC8vIGluIG5vbi1lbmRpbmcgbW9kZSwgd2hlcmUgXCIvdGVzdC9cIiBzaG91bGRuJ3QgbWF0Y2ggXCIvdGVzdC8vcm91dGVcIi5cbiAgaWYgKCFzdHJpY3QpIHtcbiAgICByb3V0ZSA9IChlbmRzV2l0aERlbGltaXRlciA/IHJvdXRlLnNsaWNlKDAsIC1kZWxpbWl0ZXIubGVuZ3RoKSA6IHJvdXRlKSArICcoPzonICsgZGVsaW1pdGVyICsgJyg/PSQpKT8nXG4gIH1cblxuICBpZiAoZW5kKSB7XG4gICAgcm91dGUgKz0gJyQnXG4gIH0gZWxzZSB7XG4gICAgLy8gSW4gbm9uLWVuZGluZyBtb2RlLCB3ZSBuZWVkIHRoZSBjYXB0dXJpbmcgZ3JvdXBzIHRvIG1hdGNoIGFzIG11Y2ggYXNcbiAgICAvLyBwb3NzaWJsZSBieSB1c2luZyBhIHBvc2l0aXZlIGxvb2thaGVhZCB0byB0aGUgZW5kIG9yIG5leHQgcGF0aCBzZWdtZW50LlxuICAgIHJvdXRlICs9IHN0cmljdCAmJiBlbmRzV2l0aERlbGltaXRlciA/ICcnIDogJyg/PScgKyBkZWxpbWl0ZXIgKyAnfCQpJ1xuICB9XG5cbiAgcmV0dXJuIGF0dGFjaEtleXMobmV3IFJlZ0V4cCgnXicgKyByb3V0ZSwgZmxhZ3Mob3B0aW9ucykpLCBrZXlzKVxufVxuXG4vKipcbiAqIE5vcm1hbGl6ZSB0aGUgZ2l2ZW4gcGF0aCBzdHJpbmcsIHJldHVybmluZyBhIHJlZ3VsYXIgZXhwcmVzc2lvbi5cbiAqXG4gKiBBbiBlbXB0eSBhcnJheSBjYW4gYmUgcGFzc2VkIGluIGZvciB0aGUga2V5cywgd2hpY2ggd2lsbCBob2xkIHRoZVxuICogcGxhY2Vob2xkZXIga2V5IGRlc2NyaXB0aW9ucy4gRm9yIGV4YW1wbGUsIHVzaW5nIGAvdXNlci86aWRgLCBga2V5c2Agd2lsbFxuICogY29udGFpbiBgW3sgbmFtZTogJ2lkJywgZGVsaW1pdGVyOiAnLycsIG9wdGlvbmFsOiBmYWxzZSwgcmVwZWF0OiBmYWxzZSB9XWAuXG4gKlxuICogQHBhcmFtICB7KHN0cmluZ3xSZWdFeHB8QXJyYXkpfSBwYXRoXG4gKiBAcGFyYW0gIHsoQXJyYXl8T2JqZWN0KT19ICAgICAgIGtleXNcbiAqIEBwYXJhbSAge09iamVjdD19ICAgICAgICAgICAgICAgb3B0aW9uc1xuICogQHJldHVybiB7IVJlZ0V4cH1cbiAqL1xuZnVuY3Rpb24gcGF0aFRvUmVnZXhwIChwYXRoLCBrZXlzLCBvcHRpb25zKSB7XG4gIGlmICghaXNhcnJheShrZXlzKSkge1xuICAgIG9wdGlvbnMgPSAvKiogQHR5cGUgeyFPYmplY3R9ICovIChrZXlzIHx8IG9wdGlvbnMpXG4gICAga2V5cyA9IFtdXG4gIH1cblxuICBvcHRpb25zID0gb3B0aW9ucyB8fCB7fVxuXG4gIGlmIChwYXRoIGluc3RhbmNlb2YgUmVnRXhwKSB7XG4gICAgcmV0dXJuIHJlZ2V4cFRvUmVnZXhwKHBhdGgsIC8qKiBAdHlwZSB7IUFycmF5fSAqLyAoa2V5cykpXG4gIH1cblxuICBpZiAoaXNhcnJheShwYXRoKSkge1xuICAgIHJldHVybiBhcnJheVRvUmVnZXhwKC8qKiBAdHlwZSB7IUFycmF5fSAqLyAocGF0aCksIC8qKiBAdHlwZSB7IUFycmF5fSAqLyAoa2V5cyksIG9wdGlvbnMpXG4gIH1cblxuICByZXR1cm4gc3RyaW5nVG9SZWdleHAoLyoqIEB0eXBlIHtzdHJpbmd9ICovIChwYXRoKSwgLyoqIEB0eXBlIHshQXJyYXl9ICovIChrZXlzKSwgb3B0aW9ucylcbn1cbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///35302\n")},35592:(module,__unused_webpack_exports,__webpack_require__)=>{"use strict";eval("\n\nvar utils = __webpack_require__(9516);\nvar settle = __webpack_require__(7522);\nvar cookies = __webpack_require__(33948);\nvar buildURL = __webpack_require__(79106);\nvar buildFullPath = __webpack_require__(99615);\nvar parseHeaders = __webpack_require__(62012);\nvar isURLSameOrigin = __webpack_require__(64202);\nvar createError = __webpack_require__(47763);\nvar transitionalDefaults = __webpack_require__(94896);\nvar Cancel = __webpack_require__(31928);\n\nmodule.exports = function xhrAdapter(config) {\n return new Promise(function dispatchXhrRequest(resolve, reject) {\n var requestData = config.data;\n var requestHeaders = config.headers;\n var responseType = config.responseType;\n var onCanceled;\n function done() {\n if (config.cancelToken) {\n config.cancelToken.unsubscribe(onCanceled);\n }\n\n if (config.signal) {\n config.signal.removeEventListener('abort', onCanceled);\n }\n }\n\n if (utils.isFormData(requestData)) {\n delete requestHeaders['Content-Type']; // Let the browser set it\n }\n\n var request = new XMLHttpRequest();\n\n // HTTP basic authentication\n if (config.auth) {\n var username = config.auth.username || '';\n var password = config.auth.password ? unescape(encodeURIComponent(config.auth.password)) : '';\n requestHeaders.Authorization = 'Basic ' + btoa(username + ':' + password);\n }\n\n var fullPath = buildFullPath(config.baseURL, config.url);\n request.open(config.method.toUpperCase(), buildURL(fullPath, config.params, config.paramsSerializer), true);\n\n // Set the request timeout in MS\n request.timeout = config.timeout;\n\n function onloadend() {\n if (!request) {\n return;\n }\n // Prepare the response\n var responseHeaders = 'getAllResponseHeaders' in request ? parseHeaders(request.getAllResponseHeaders()) : null;\n var responseData = !responseType || responseType === 'text' || responseType === 'json' ?\n request.responseText : request.response;\n var response = {\n data: responseData,\n status: request.status,\n statusText: request.statusText,\n headers: responseHeaders,\n config: config,\n request: request\n };\n\n settle(function _resolve(value) {\n resolve(value);\n done();\n }, function _reject(err) {\n reject(err);\n done();\n }, response);\n\n // Clean up request\n request = null;\n }\n\n if ('onloadend' in request) {\n // Use onloadend if available\n request.onloadend = onloadend;\n } else {\n // Listen for ready state to emulate onloadend\n request.onreadystatechange = function handleLoad() {\n if (!request || request.readyState !== 4) {\n return;\n }\n\n // The request errored out and we didn't get a response, this will be\n // handled by onerror instead\n // With one exception: request that using file: protocol, most browsers\n // will return status as 0 even though it's a successful request\n if (request.status === 0 && !(request.responseURL && request.responseURL.indexOf('file:') === 0)) {\n return;\n }\n // readystate handler is calling before onerror or ontimeout handlers,\n // so we should call onloadend on the next 'tick'\n setTimeout(onloadend);\n };\n }\n\n // Handle browser request cancellation (as opposed to a manual cancellation)\n request.onabort = function handleAbort() {\n if (!request) {\n return;\n }\n\n reject(createError('Request aborted', config, 'ECONNABORTED', request));\n\n // Clean up request\n request = null;\n };\n\n // Handle low level network errors\n request.onerror = function handleError() {\n // Real errors are hidden from us by the browser\n // onerror should only fire if it's a network error\n reject(createError('Network Error', config, null, request));\n\n // Clean up request\n request = null;\n };\n\n // Handle timeout\n request.ontimeout = function handleTimeout() {\n var timeoutErrorMessage = config.timeout ? 'timeout of ' + config.timeout + 'ms exceeded' : 'timeout exceeded';\n var transitional = config.transitional || transitionalDefaults;\n if (config.timeoutErrorMessage) {\n timeoutErrorMessage = config.timeoutErrorMessage;\n }\n reject(createError(\n timeoutErrorMessage,\n config,\n transitional.clarifyTimeoutError ? 'ETIMEDOUT' : 'ECONNABORTED',\n request));\n\n // Clean up request\n request = null;\n };\n\n // Add xsrf header\n // This is only done if running in a standard browser environment.\n // Specifically not if we're in a web worker, or react-native.\n if (utils.isStandardBrowserEnv()) {\n // Add xsrf header\n var xsrfValue = (config.withCredentials || isURLSameOrigin(fullPath)) && config.xsrfCookieName ?\n cookies.read(config.xsrfCookieName) :\n undefined;\n\n if (xsrfValue) {\n requestHeaders[config.xsrfHeaderName] = xsrfValue;\n }\n }\n\n // Add headers to the request\n if ('setRequestHeader' in request) {\n utils.forEach(requestHeaders, function setRequestHeader(val, key) {\n if (typeof requestData === 'undefined' && key.toLowerCase() === 'content-type') {\n // Remove Content-Type if data is undefined\n delete requestHeaders[key];\n } else {\n // Otherwise add header to the request\n request.setRequestHeader(key, val);\n }\n });\n }\n\n // Add withCredentials to request if needed\n if (!utils.isUndefined(config.withCredentials)) {\n request.withCredentials = !!config.withCredentials;\n }\n\n // Add responseType to request if needed\n if (responseType && responseType !== 'json') {\n request.responseType = config.responseType;\n }\n\n // Handle progress if needed\n if (typeof config.onDownloadProgress === 'function') {\n request.addEventListener('progress', config.onDownloadProgress);\n }\n\n // Not all browsers support upload events\n if (typeof config.onUploadProgress === 'function' && request.upload) {\n request.upload.addEventListener('progress', config.onUploadProgress);\n }\n\n if (config.cancelToken || config.signal) {\n // Handle cancellation\n // eslint-disable-next-line func-names\n onCanceled = function(cancel) {\n if (!request) {\n return;\n }\n reject(!cancel || (cancel && cancel.type) ? new Cancel('canceled') : cancel);\n request.abort();\n request = null;\n };\n\n config.cancelToken && config.cancelToken.subscribe(onCanceled);\n if (config.signal) {\n config.signal.aborted ? onCanceled() : config.signal.addEventListener('abort', onCanceled);\n }\n }\n\n if (!requestData) {\n requestData = null;\n }\n\n // Send the request\n request.send(requestData);\n });\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMzU1OTIuanMiLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL2l0Zy1uZXh0Z2VuLWZyb250ZW5kLy4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9hZGFwdGVycy94aHIuanM/YjUwZCJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciB1dGlscyA9IHJlcXVpcmUoJy4vLi4vdXRpbHMnKTtcbnZhciBzZXR0bGUgPSByZXF1aXJlKCcuLy4uL2NvcmUvc2V0dGxlJyk7XG52YXIgY29va2llcyA9IHJlcXVpcmUoJy4vLi4vaGVscGVycy9jb29raWVzJyk7XG52YXIgYnVpbGRVUkwgPSByZXF1aXJlKCcuLy4uL2hlbHBlcnMvYnVpbGRVUkwnKTtcbnZhciBidWlsZEZ1bGxQYXRoID0gcmVxdWlyZSgnLi4vY29yZS9idWlsZEZ1bGxQYXRoJyk7XG52YXIgcGFyc2VIZWFkZXJzID0gcmVxdWlyZSgnLi8uLi9oZWxwZXJzL3BhcnNlSGVhZGVycycpO1xudmFyIGlzVVJMU2FtZU9yaWdpbiA9IHJlcXVpcmUoJy4vLi4vaGVscGVycy9pc1VSTFNhbWVPcmlnaW4nKTtcbnZhciBjcmVhdGVFcnJvciA9IHJlcXVpcmUoJy4uL2NvcmUvY3JlYXRlRXJyb3InKTtcbnZhciB0cmFuc2l0aW9uYWxEZWZhdWx0cyA9IHJlcXVpcmUoJy4uL2RlZmF1bHRzL3RyYW5zaXRpb25hbCcpO1xudmFyIENhbmNlbCA9IHJlcXVpcmUoJy4uL2NhbmNlbC9DYW5jZWwnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiB4aHJBZGFwdGVyKGNvbmZpZykge1xuICByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24gZGlzcGF0Y2hYaHJSZXF1ZXN0KHJlc29sdmUsIHJlamVjdCkge1xuICAgIHZhciByZXF1ZXN0RGF0YSA9IGNvbmZpZy5kYXRhO1xuICAgIHZhciByZXF1ZXN0SGVhZGVycyA9IGNvbmZpZy5oZWFkZXJzO1xuICAgIHZhciByZXNwb25zZVR5cGUgPSBjb25maWcucmVzcG9uc2VUeXBlO1xuICAgIHZhciBvbkNhbmNlbGVkO1xuICAgIGZ1bmN0aW9uIGRvbmUoKSB7XG4gICAgICBpZiAoY29uZmlnLmNhbmNlbFRva2VuKSB7XG4gICAgICAgIGNvbmZpZy5jYW5jZWxUb2tlbi51bnN1YnNjcmliZShvbkNhbmNlbGVkKTtcbiAgICAgIH1cblxuICAgICAgaWYgKGNvbmZpZy5zaWduYWwpIHtcbiAgICAgICAgY29uZmlnLnNpZ25hbC5yZW1vdmVFdmVudExpc3RlbmVyKCdhYm9ydCcsIG9uQ2FuY2VsZWQpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmICh1dGlscy5pc0Zvcm1EYXRhKHJlcXVlc3REYXRhKSkge1xuICAgICAgZGVsZXRlIHJlcXVlc3RIZWFkZXJzWydDb250ZW50LVR5cGUnXTsgLy8gTGV0IHRoZSBicm93c2VyIHNldCBpdFxuICAgIH1cblxuICAgIHZhciByZXF1ZXN0ID0gbmV3IFhNTEh0dHBSZXF1ZXN0KCk7XG5cbiAgICAvLyBIVFRQIGJhc2ljIGF1dGhlbnRpY2F0aW9uXG4gICAgaWYgKGNvbmZpZy5hdXRoKSB7XG4gICAgICB2YXIgdXNlcm5hbWUgPSBjb25maWcuYXV0aC51c2VybmFtZSB8fCAnJztcbiAgICAgIHZhciBwYXNzd29yZCA9IGNvbmZpZy5hdXRoLnBhc3N3b3JkID8gdW5lc2NhcGUoZW5jb2RlVVJJQ29tcG9uZW50KGNvbmZpZy5hdXRoLnBhc3N3b3JkKSkgOiAnJztcbiAgICAgIHJlcXVlc3RIZWFkZXJzLkF1dGhvcml6YXRpb24gPSAnQmFzaWMgJyArIGJ0b2EodXNlcm5hbWUgKyAnOicgKyBwYXNzd29yZCk7XG4gICAgfVxuXG4gICAgdmFyIGZ1bGxQYXRoID0gYnVpbGRGdWxsUGF0aChjb25maWcuYmFzZVVSTCwgY29uZmlnLnVybCk7XG4gICAgcmVxdWVzdC5vcGVuKGNvbmZpZy5tZXRob2QudG9VcHBlckNhc2UoKSwgYnVpbGRVUkwoZnVsbFBhdGgsIGNvbmZpZy5wYXJhbXMsIGNvbmZpZy5wYXJhbXNTZXJpYWxpemVyKSwgdHJ1ZSk7XG5cbiAgICAvLyBTZXQgdGhlIHJlcXVlc3QgdGltZW91dCBpbiBNU1xuICAgIHJlcXVlc3QudGltZW91dCA9IGNvbmZpZy50aW1lb3V0O1xuXG4gICAgZnVuY3Rpb24gb25sb2FkZW5kKCkge1xuICAgICAgaWYgKCFyZXF1ZXN0KSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIC8vIFByZXBhcmUgdGhlIHJlc3BvbnNlXG4gICAgICB2YXIgcmVzcG9uc2VIZWFkZXJzID0gJ2dldEFsbFJlc3BvbnNlSGVhZGVycycgaW4gcmVxdWVzdCA/IHBhcnNlSGVhZGVycyhyZXF1ZXN0LmdldEFsbFJlc3BvbnNlSGVhZGVycygpKSA6IG51bGw7XG4gICAgICB2YXIgcmVzcG9uc2VEYXRhID0gIXJlc3BvbnNlVHlwZSB8fCByZXNwb25zZVR5cGUgPT09ICd0ZXh0JyB8fCAgcmVzcG9uc2VUeXBlID09PSAnanNvbicgP1xuICAgICAgICByZXF1ZXN0LnJlc3BvbnNlVGV4dCA6IHJlcXVlc3QucmVzcG9uc2U7XG4gICAgICB2YXIgcmVzcG9uc2UgPSB7XG4gICAgICAgIGRhdGE6IHJlc3BvbnNlRGF0YSxcbiAgICAgICAgc3RhdHVzOiByZXF1ZXN0LnN0YXR1cyxcbiAgICAgICAgc3RhdHVzVGV4dDogcmVxdWVzdC5zdGF0dXNUZXh0LFxuICAgICAgICBoZWFkZXJzOiByZXNwb25zZUhlYWRlcnMsXG4gICAgICAgIGNvbmZpZzogY29uZmlnLFxuICAgICAgICByZXF1ZXN0OiByZXF1ZXN0XG4gICAgICB9O1xuXG4gICAgICBzZXR0bGUoZnVuY3Rpb24gX3Jlc29sdmUodmFsdWUpIHtcbiAgICAgICAgcmVzb2x2ZSh2YWx1ZSk7XG4gICAgICAgIGRvbmUoKTtcbiAgICAgIH0sIGZ1bmN0aW9uIF9yZWplY3QoZXJyKSB7XG4gICAgICAgIHJlamVjdChlcnIpO1xuICAgICAgICBkb25lKCk7XG4gICAgICB9LCByZXNwb25zZSk7XG5cbiAgICAgIC8vIENsZWFuIHVwIHJlcXVlc3RcbiAgICAgIHJlcXVlc3QgPSBudWxsO1xuICAgIH1cblxuICAgIGlmICgnb25sb2FkZW5kJyBpbiByZXF1ZXN0KSB7XG4gICAgICAvLyBVc2Ugb25sb2FkZW5kIGlmIGF2YWlsYWJsZVxuICAgICAgcmVxdWVzdC5vbmxvYWRlbmQgPSBvbmxvYWRlbmQ7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIExpc3RlbiBmb3IgcmVhZHkgc3RhdGUgdG8gZW11bGF0ZSBvbmxvYWRlbmRcbiAgICAgIHJlcXVlc3Qub25yZWFkeXN0YXRlY2hhbmdlID0gZnVuY3Rpb24gaGFuZGxlTG9hZCgpIHtcbiAgICAgICAgaWYgKCFyZXF1ZXN0IHx8IHJlcXVlc3QucmVhZHlTdGF0ZSAhPT0gNCkge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIFRoZSByZXF1ZXN0IGVycm9yZWQgb3V0IGFuZCB3ZSBkaWRuJ3QgZ2V0IGEgcmVzcG9uc2UsIHRoaXMgd2lsbCBiZVxuICAgICAgICAvLyBoYW5kbGVkIGJ5IG9uZXJyb3IgaW5zdGVhZFxuICAgICAgICAvLyBXaXRoIG9uZSBleGNlcHRpb246IHJlcXVlc3QgdGhhdCB1c2luZyBmaWxlOiBwcm90b2NvbCwgbW9zdCBicm93c2Vyc1xuICAgICAgICAvLyB3aWxsIHJldHVybiBzdGF0dXMgYXMgMCBldmVuIHRob3VnaCBpdCdzIGEgc3VjY2Vzc2Z1bCByZXF1ZXN0XG4gICAgICAgIGlmIChyZXF1ZXN0LnN0YXR1cyA9PT0gMCAmJiAhKHJlcXVlc3QucmVzcG9uc2VVUkwgJiYgcmVxdWVzdC5yZXNwb25zZVVSTC5pbmRleE9mKCdmaWxlOicpID09PSAwKSkge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICAvLyByZWFkeXN0YXRlIGhhbmRsZXIgaXMgY2FsbGluZyBiZWZvcmUgb25lcnJvciBvciBvbnRpbWVvdXQgaGFuZGxlcnMsXG4gICAgICAgIC8vIHNvIHdlIHNob3VsZCBjYWxsIG9ubG9hZGVuZCBvbiB0aGUgbmV4dCAndGljaydcbiAgICAgICAgc2V0VGltZW91dChvbmxvYWRlbmQpO1xuICAgICAgfTtcbiAgICB9XG5cbiAgICAvLyBIYW5kbGUgYnJvd3NlciByZXF1ZXN0IGNhbmNlbGxhdGlvbiAoYXMgb3Bwb3NlZCB0byBhIG1hbnVhbCBjYW5jZWxsYXRpb24pXG4gICAgcmVxdWVzdC5vbmFib3J0ID0gZnVuY3Rpb24gaGFuZGxlQWJvcnQoKSB7XG4gICAgICBpZiAoIXJlcXVlc3QpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICByZWplY3QoY3JlYXRlRXJyb3IoJ1JlcXVlc3QgYWJvcnRlZCcsIGNvbmZpZywgJ0VDT05OQUJPUlRFRCcsIHJlcXVlc3QpKTtcblxuICAgICAgLy8gQ2xlYW4gdXAgcmVxdWVzdFxuICAgICAgcmVxdWVzdCA9IG51bGw7XG4gICAgfTtcblxuICAgIC8vIEhhbmRsZSBsb3cgbGV2ZWwgbmV0d29yayBlcnJvcnNcbiAgICByZXF1ZXN0Lm9uZXJyb3IgPSBmdW5jdGlvbiBoYW5kbGVFcnJvcigpIHtcbiAgICAgIC8vIFJlYWwgZXJyb3JzIGFyZSBoaWRkZW4gZnJvbSB1cyBieSB0aGUgYnJvd3NlclxuICAgICAgLy8gb25lcnJvciBzaG91bGQgb25seSBmaXJlIGlmIGl0J3MgYSBuZXR3b3JrIGVycm9yXG4gICAgICByZWplY3QoY3JlYXRlRXJyb3IoJ05ldHdvcmsgRXJyb3InLCBjb25maWcsIG51bGwsIHJlcXVlc3QpKTtcblxuICAgICAgLy8gQ2xlYW4gdXAgcmVxdWVzdFxuICAgICAgcmVxdWVzdCA9IG51bGw7XG4gICAgfTtcblxuICAgIC8vIEhhbmRsZSB0aW1lb3V0XG4gICAgcmVxdWVzdC5vbnRpbWVvdXQgPSBmdW5jdGlvbiBoYW5kbGVUaW1lb3V0KCkge1xuICAgICAgdmFyIHRpbWVvdXRFcnJvck1lc3NhZ2UgPSBjb25maWcudGltZW91dCA/ICd0aW1lb3V0IG9mICcgKyBjb25maWcudGltZW91dCArICdtcyBleGNlZWRlZCcgOiAndGltZW91dCBleGNlZWRlZCc7XG4gICAgICB2YXIgdHJhbnNpdGlvbmFsID0gY29uZmlnLnRyYW5zaXRpb25hbCB8fCB0cmFuc2l0aW9uYWxEZWZhdWx0cztcbiAgICAgIGlmIChjb25maWcudGltZW91dEVycm9yTWVzc2FnZSkge1xuICAgICAgICB0aW1lb3V0RXJyb3JNZXNzYWdlID0gY29uZmlnLnRpbWVvdXRFcnJvck1lc3NhZ2U7XG4gICAgICB9XG4gICAgICByZWplY3QoY3JlYXRlRXJyb3IoXG4gICAgICAgIHRpbWVvdXRFcnJvck1lc3NhZ2UsXG4gICAgICAgIGNvbmZpZyxcbiAgICAgICAgdHJhbnNpdGlvbmFsLmNsYXJpZnlUaW1lb3V0RXJyb3IgPyAnRVRJTUVET1VUJyA6ICdFQ09OTkFCT1JURUQnLFxuICAgICAgICByZXF1ZXN0KSk7XG5cbiAgICAgIC8vIENsZWFuIHVwIHJlcXVlc3RcbiAgICAgIHJlcXVlc3QgPSBudWxsO1xuICAgIH07XG5cbiAgICAvLyBBZGQgeHNyZiBoZWFkZXJcbiAgICAvLyBUaGlzIGlzIG9ubHkgZG9uZSBpZiBydW5uaW5nIGluIGEgc3RhbmRhcmQgYnJvd3NlciBlbnZpcm9ubWVudC5cbiAgICAvLyBTcGVjaWZpY2FsbHkgbm90IGlmIHdlJ3JlIGluIGEgd2ViIHdvcmtlciwgb3IgcmVhY3QtbmF0aXZlLlxuICAgIGlmICh1dGlscy5pc1N0YW5kYXJkQnJvd3NlckVudigpKSB7XG4gICAgICAvLyBBZGQgeHNyZiBoZWFkZXJcbiAgICAgIHZhciB4c3JmVmFsdWUgPSAoY29uZmlnLndpdGhDcmVkZW50aWFscyB8fCBpc1VSTFNhbWVPcmlnaW4oZnVsbFBhdGgpKSAmJiBjb25maWcueHNyZkNvb2tpZU5hbWUgP1xuICAgICAgICBjb29raWVzLnJlYWQoY29uZmlnLnhzcmZDb29raWVOYW1lKSA6XG4gICAgICAgIHVuZGVmaW5lZDtcblxuICAgICAgaWYgKHhzcmZWYWx1ZSkge1xuICAgICAgICByZXF1ZXN0SGVhZGVyc1tjb25maWcueHNyZkhlYWRlck5hbWVdID0geHNyZlZhbHVlO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIEFkZCBoZWFkZXJzIHRvIHRoZSByZXF1ZXN0XG4gICAgaWYgKCdzZXRSZXF1ZXN0SGVhZGVyJyBpbiByZXF1ZXN0KSB7XG4gICAgICB1dGlscy5mb3JFYWNoKHJlcXVlc3RIZWFkZXJzLCBmdW5jdGlvbiBzZXRSZXF1ZXN0SGVhZGVyKHZhbCwga2V5KSB7XG4gICAgICAgIGlmICh0eXBlb2YgcmVxdWVzdERhdGEgPT09ICd1bmRlZmluZWQnICYmIGtleS50b0xvd2VyQ2FzZSgpID09PSAnY29udGVudC10eXBlJykge1xuICAgICAgICAgIC8vIFJlbW92ZSBDb250ZW50LVR5cGUgaWYgZGF0YSBpcyB1bmRlZmluZWRcbiAgICAgICAgICBkZWxldGUgcmVxdWVzdEhlYWRlcnNba2V5XTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAvLyBPdGhlcndpc2UgYWRkIGhlYWRlciB0byB0aGUgcmVxdWVzdFxuICAgICAgICAgIHJlcXVlc3Quc2V0UmVxdWVzdEhlYWRlcihrZXksIHZhbCk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cblxuICAgIC8vIEFkZCB3aXRoQ3JlZGVudGlhbHMgdG8gcmVxdWVzdCBpZiBuZWVkZWRcbiAgICBpZiAoIXV0aWxzLmlzVW5kZWZpbmVkKGNvbmZpZy53aXRoQ3JlZGVudGlhbHMpKSB7XG4gICAgICByZXF1ZXN0LndpdGhDcmVkZW50aWFscyA9ICEhY29uZmlnLndpdGhDcmVkZW50aWFscztcbiAgICB9XG5cbiAgICAvLyBBZGQgcmVzcG9uc2VUeXBlIHRvIHJlcXVlc3QgaWYgbmVlZGVkXG4gICAgaWYgKHJlc3BvbnNlVHlwZSAmJiByZXNwb25zZVR5cGUgIT09ICdqc29uJykge1xuICAgICAgcmVxdWVzdC5yZXNwb25zZVR5cGUgPSBjb25maWcucmVzcG9uc2VUeXBlO1xuICAgIH1cblxuICAgIC8vIEhhbmRsZSBwcm9ncmVzcyBpZiBuZWVkZWRcbiAgICBpZiAodHlwZW9mIGNvbmZpZy5vbkRvd25sb2FkUHJvZ3Jlc3MgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHJlcXVlc3QuYWRkRXZlbnRMaXN0ZW5lcigncHJvZ3Jlc3MnLCBjb25maWcub25Eb3dubG9hZFByb2dyZXNzKTtcbiAgICB9XG5cbiAgICAvLyBOb3QgYWxsIGJyb3dzZXJzIHN1cHBvcnQgdXBsb2FkIGV2ZW50c1xuICAgIGlmICh0eXBlb2YgY29uZmlnLm9uVXBsb2FkUHJvZ3Jlc3MgPT09ICdmdW5jdGlvbicgJiYgcmVxdWVzdC51cGxvYWQpIHtcbiAgICAgIHJlcXVlc3QudXBsb2FkLmFkZEV2ZW50TGlzdGVuZXIoJ3Byb2dyZXNzJywgY29uZmlnLm9uVXBsb2FkUHJvZ3Jlc3MpO1xuICAgIH1cblxuICAgIGlmIChjb25maWcuY2FuY2VsVG9rZW4gfHwgY29uZmlnLnNpZ25hbCkge1xuICAgICAgLy8gSGFuZGxlIGNhbmNlbGxhdGlvblxuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGZ1bmMtbmFtZXNcbiAgICAgIG9uQ2FuY2VsZWQgPSBmdW5jdGlvbihjYW5jZWwpIHtcbiAgICAgICAgaWYgKCFyZXF1ZXN0KSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHJlamVjdCghY2FuY2VsIHx8IChjYW5jZWwgJiYgY2FuY2VsLnR5cGUpID8gbmV3IENhbmNlbCgnY2FuY2VsZWQnKSA6IGNhbmNlbCk7XG4gICAgICAgIHJlcXVlc3QuYWJvcnQoKTtcbiAgICAgICAgcmVxdWVzdCA9IG51bGw7XG4gICAgICB9O1xuXG4gICAgICBjb25maWcuY2FuY2VsVG9rZW4gJiYgY29uZmlnLmNhbmNlbFRva2VuLnN1YnNjcmliZShvbkNhbmNlbGVkKTtcbiAgICAgIGlmIChjb25maWcuc2lnbmFsKSB7XG4gICAgICAgIGNvbmZpZy5zaWduYWwuYWJvcnRlZCA/IG9uQ2FuY2VsZWQoKSA6IGNvbmZpZy5zaWduYWwuYWRkRXZlbnRMaXN0ZW5lcignYWJvcnQnLCBvbkNhbmNlbGVkKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoIXJlcXVlc3REYXRhKSB7XG4gICAgICByZXF1ZXN0RGF0YSA9IG51bGw7XG4gICAgfVxuXG4gICAgLy8gU2VuZCB0aGUgcmVxdWVzdFxuICAgIHJlcXVlc3Quc2VuZChyZXF1ZXN0RGF0YSk7XG4gIH0pO1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///35592\n")},36014:(I,g,t)=>{"use strict";I.exports=t.p+"963a701bf4f989ca6a9e.png"},36029:(I,g,t)=>{"use strict";I.exports=t.p+"af2f3c76218ba85f34ac.png"},36308:function(module,exports,__webpack_require__){eval(";(function (root, factory, undef) {\n\tif (true) {\n\t\t// CommonJS\n\t\tmodule.exports = exports = factory(__webpack_require__(19021), __webpack_require__(63009));\n\t}\n\telse {}\n}(this, function (CryptoJS) {\n\n\t(function () {\n\t // Shortcuts\n\t var C = CryptoJS;\n\t var C_lib = C.lib;\n\t var WordArray = C_lib.WordArray;\n\t var C_algo = C.algo;\n\t var SHA256 = C_algo.SHA256;\n\n\t /**\n\t * SHA-224 hash algorithm.\n\t */\n\t var SHA224 = C_algo.SHA224 = SHA256.extend({\n\t _doReset: function () {\n\t this._hash = new WordArray.init([\n\t 0xc1059ed8, 0x367cd507, 0x3070dd17, 0xf70e5939,\n\t 0xffc00b31, 0x68581511, 0x64f98fa7, 0xbefa4fa4\n\t ]);\n\t },\n\n\t _doFinalize: function () {\n\t var hash = SHA256._doFinalize.call(this);\n\n\t hash.sigBytes -= 4;\n\n\t return hash;\n\t }\n\t });\n\n\t /**\n\t * Shortcut function to the hasher's object interface.\n\t *\n\t * @param {WordArray|string} message The message to hash.\n\t *\n\t * @return {WordArray} The hash.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var hash = CryptoJS.SHA224('message');\n\t * var hash = CryptoJS.SHA224(wordArray);\n\t */\n\t C.SHA224 = SHA256._createHelper(SHA224);\n\n\t /**\n\t * Shortcut function to the HMAC's object interface.\n\t *\n\t * @param {WordArray|string} message The message to hash.\n\t * @param {WordArray|string} key The secret key.\n\t *\n\t * @return {WordArray} The HMAC.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var hmac = CryptoJS.HmacSHA224(message, key);\n\t */\n\t C.HmacSHA224 = SHA256._createHmacHelper(SHA224);\n\t}());\n\n\n\treturn CryptoJS.SHA224;\n\n}));//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMzYzMDguanMiLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBUUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9pdGctbmV4dGdlbi1mcm9udGVuZC8uL25vZGVfbW9kdWxlcy9jcnlwdG8tanMvc2hhMjI0LmpzPzE5MWIiXSwic291cmNlc0NvbnRlbnQiOlsiOyhmdW5jdGlvbiAocm9vdCwgZmFjdG9yeSwgdW5kZWYpIHtcblx0aWYgKHR5cGVvZiBleHBvcnRzID09PSBcIm9iamVjdFwiKSB7XG5cdFx0Ly8gQ29tbW9uSlNcblx0XHRtb2R1bGUuZXhwb3J0cyA9IGV4cG9ydHMgPSBmYWN0b3J5KHJlcXVpcmUoXCIuL2NvcmVcIiksIHJlcXVpcmUoXCIuL3NoYTI1NlwiKSk7XG5cdH1cblx0ZWxzZSBpZiAodHlwZW9mIGRlZmluZSA9PT0gXCJmdW5jdGlvblwiICYmIGRlZmluZS5hbWQpIHtcblx0XHQvLyBBTURcblx0XHRkZWZpbmUoW1wiLi9jb3JlXCIsIFwiLi9zaGEyNTZcIl0sIGZhY3RvcnkpO1xuXHR9XG5cdGVsc2Uge1xuXHRcdC8vIEdsb2JhbCAoYnJvd3Nlcilcblx0XHRmYWN0b3J5KHJvb3QuQ3J5cHRvSlMpO1xuXHR9XG59KHRoaXMsIGZ1bmN0aW9uIChDcnlwdG9KUykge1xuXG5cdChmdW5jdGlvbiAoKSB7XG5cdCAgICAvLyBTaG9ydGN1dHNcblx0ICAgIHZhciBDID0gQ3J5cHRvSlM7XG5cdCAgICB2YXIgQ19saWIgPSBDLmxpYjtcblx0ICAgIHZhciBXb3JkQXJyYXkgPSBDX2xpYi5Xb3JkQXJyYXk7XG5cdCAgICB2YXIgQ19hbGdvID0gQy5hbGdvO1xuXHQgICAgdmFyIFNIQTI1NiA9IENfYWxnby5TSEEyNTY7XG5cblx0ICAgIC8qKlxuXHQgICAgICogU0hBLTIyNCBoYXNoIGFsZ29yaXRobS5cblx0ICAgICAqL1xuXHQgICAgdmFyIFNIQTIyNCA9IENfYWxnby5TSEEyMjQgPSBTSEEyNTYuZXh0ZW5kKHtcblx0ICAgICAgICBfZG9SZXNldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICB0aGlzLl9oYXNoID0gbmV3IFdvcmRBcnJheS5pbml0KFtcblx0ICAgICAgICAgICAgICAgIDB4YzEwNTllZDgsIDB4MzY3Y2Q1MDcsIDB4MzA3MGRkMTcsIDB4ZjcwZTU5MzksXG5cdCAgICAgICAgICAgICAgICAweGZmYzAwYjMxLCAweDY4NTgxNTExLCAweDY0Zjk4ZmE3LCAweGJlZmE0ZmE0XG5cdCAgICAgICAgICAgIF0pO1xuXHQgICAgICAgIH0sXG5cblx0ICAgICAgICBfZG9GaW5hbGl6ZTogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICB2YXIgaGFzaCA9IFNIQTI1Ni5fZG9GaW5hbGl6ZS5jYWxsKHRoaXMpO1xuXG5cdCAgICAgICAgICAgIGhhc2guc2lnQnl0ZXMgLT0gNDtcblxuXHQgICAgICAgICAgICByZXR1cm4gaGFzaDtcblx0ICAgICAgICB9XG5cdCAgICB9KTtcblxuXHQgICAgLyoqXG5cdCAgICAgKiBTaG9ydGN1dCBmdW5jdGlvbiB0byB0aGUgaGFzaGVyJ3Mgb2JqZWN0IGludGVyZmFjZS5cblx0ICAgICAqXG5cdCAgICAgKiBAcGFyYW0ge1dvcmRBcnJheXxzdHJpbmd9IG1lc3NhZ2UgVGhlIG1lc3NhZ2UgdG8gaGFzaC5cblx0ICAgICAqXG5cdCAgICAgKiBAcmV0dXJuIHtXb3JkQXJyYXl9IFRoZSBoYXNoLlxuXHQgICAgICpcblx0ICAgICAqIEBzdGF0aWNcblx0ICAgICAqXG5cdCAgICAgKiBAZXhhbXBsZVxuXHQgICAgICpcblx0ICAgICAqICAgICB2YXIgaGFzaCA9IENyeXB0b0pTLlNIQTIyNCgnbWVzc2FnZScpO1xuXHQgICAgICogICAgIHZhciBoYXNoID0gQ3J5cHRvSlMuU0hBMjI0KHdvcmRBcnJheSk7XG5cdCAgICAgKi9cblx0ICAgIEMuU0hBMjI0ID0gU0hBMjU2Ll9jcmVhdGVIZWxwZXIoU0hBMjI0KTtcblxuXHQgICAgLyoqXG5cdCAgICAgKiBTaG9ydGN1dCBmdW5jdGlvbiB0byB0aGUgSE1BQydzIG9iamVjdCBpbnRlcmZhY2UuXG5cdCAgICAgKlxuXHQgICAgICogQHBhcmFtIHtXb3JkQXJyYXl8c3RyaW5nfSBtZXNzYWdlIFRoZSBtZXNzYWdlIHRvIGhhc2guXG5cdCAgICAgKiBAcGFyYW0ge1dvcmRBcnJheXxzdHJpbmd9IGtleSBUaGUgc2VjcmV0IGtleS5cblx0ICAgICAqXG5cdCAgICAgKiBAcmV0dXJuIHtXb3JkQXJyYXl9IFRoZSBITUFDLlxuXHQgICAgICpcblx0ICAgICAqIEBzdGF0aWNcblx0ICAgICAqXG5cdCAgICAgKiBAZXhhbXBsZVxuXHQgICAgICpcblx0ICAgICAqICAgICB2YXIgaG1hYyA9IENyeXB0b0pTLkhtYWNTSEEyMjQobWVzc2FnZSwga2V5KTtcblx0ICAgICAqL1xuXHQgICAgQy5IbWFjU0hBMjI0ID0gU0hBMjU2Ll9jcmVhdGVIbWFjSGVscGVyKFNIQTIyNCk7XG5cdH0oKSk7XG5cblxuXHRyZXR1cm4gQ3J5cHRvSlMuU0hBMjI0O1xuXG59KSk7Il0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///36308\n")},36425:(I,g,t)=>{"use strict";I.exports=t.p+"d65f8d8bf480a650667e.png"},36648:(I,g,t)=>{"use strict";I.exports=t.p+"b57b2d038520f947c0bd.png"},36658:(I,g,t)=>{"use strict";I.exports=t.p+"7d9167b3c3c550a8c3d0.png"},36669:(I,g,t)=>{"use strict";I.exports=t.p+"53e34ca71cfa08b9bebd.png"},36810:(__unused_webpack___webpack_module__,__webpack_exports__,__webpack_require__)=>{"use strict";eval('// ESM COMPAT FLAG\n__webpack_require__.r(__webpack_exports__);\n\n// EXPORTS\n__webpack_require__.d(__webpack_exports__, {\n AuthenticatedTemplate: () => (/* reexport */ AuthenticatedTemplate),\n MsalAuthenticationTemplate: () => (/* reexport */ MsalAuthenticationTemplate),\n MsalConsumer: () => (/* reexport */ MsalConsumer),\n MsalContext: () => (/* reexport */ MsalContext),\n MsalProvider: () => (/* reexport */ MsalProvider),\n UnauthenticatedTemplate: () => (/* reexport */ UnauthenticatedTemplate),\n useAccount: () => (/* reexport */ useAccount),\n useIsAuthenticated: () => (/* reexport */ useIsAuthenticated),\n useMsal: () => (/* reexport */ useMsal),\n useMsalAuthentication: () => (/* reexport */ useMsalAuthentication),\n version: () => (/* reexport */ version),\n withMsal: () => (/* reexport */ withMsal)\n});\n\n// EXTERNAL MODULE: consume shared module (default) react@^17.0.2 (singleton) (fallback: ./node_modules/react/index.js) (eager)\nvar index_js_eager_ = __webpack_require__(24002);\n// EXTERNAL MODULE: consume shared module (default) @azure/msal-browser@^3.23.0 (strict) (fallback: ./node_modules/@azure/msal-browser/dist/index.mjs)\nvar index_mjs_ = __webpack_require__(149);\n;// ./node_modules/@azure/msal-react/dist/MsalContext.js\n/*! @azure/msal-react v2.2.0 2024-11-05 */\n\n\n\n\n/*\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License.\r\n */\r\n/*\r\n * Stubbed context implementation\r\n * Only used when there is no provider, which is an unsupported scenario\r\n */\r\nconst defaultMsalContext = {\r\n instance: index_mjs_.stubbedPublicClientApplication,\r\n inProgress: index_mjs_.InteractionStatus.None,\r\n accounts: [],\r\n logger: new index_mjs_.Logger({}),\r\n};\r\nconst MsalContext = index_js_eager_.createContext(defaultMsalContext);\r\nconst MsalConsumer = MsalContext.Consumer;\n\n\n//# sourceMappingURL=MsalContext.js.map\n\n;// ./node_modules/@azure/msal-react/dist/utils/utilities.js\n/*! @azure/msal-react v2.2.0 2024-11-05 */\n\n/*\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License.\r\n */\r\nfunction getChildrenOrFunction(children, args) {\r\n if (typeof children === "function") {\r\n return children(args);\r\n }\r\n return children;\r\n}\r\n/**\r\n * Helper function to determine whether 2 arrays are equal\r\n * Used to avoid unnecessary state updates\r\n * @param arrayA\r\n * @param arrayB\r\n */\r\nfunction accountArraysAreEqual(arrayA, arrayB) {\r\n if (arrayA.length !== arrayB.length) {\r\n return false;\r\n }\r\n const comparisonArray = [...arrayB];\r\n return arrayA.every((elementA) => {\r\n const elementB = comparisonArray.shift();\r\n if (!elementA || !elementB) {\r\n return false;\r\n }\r\n return (elementA.homeAccountId === elementB.homeAccountId &&\r\n elementA.localAccountId === elementB.localAccountId &&\r\n elementA.username === elementB.username);\r\n });\r\n}\r\nfunction getAccountByIdentifiers(allAccounts, accountIdentifiers) {\r\n if (allAccounts.length > 0 &&\r\n (accountIdentifiers.homeAccountId ||\r\n accountIdentifiers.localAccountId ||\r\n accountIdentifiers.username)) {\r\n const matchedAccounts = allAccounts.filter((accountObj) => {\r\n if (accountIdentifiers.username &&\r\n accountIdentifiers.username.toLowerCase() !==\r\n accountObj.username.toLowerCase()) {\r\n return false;\r\n }\r\n if (accountIdentifiers.homeAccountId &&\r\n accountIdentifiers.homeAccountId.toLowerCase() !==\r\n accountObj.homeAccountId.toLowerCase()) {\r\n return false;\r\n }\r\n if (accountIdentifiers.localAccountId &&\r\n accountIdentifiers.localAccountId.toLowerCase() !==\r\n accountObj.localAccountId.toLowerCase()) {\r\n return false;\r\n }\r\n return true;\r\n });\r\n return matchedAccounts[0] || null;\r\n }\r\n else {\r\n return null;\r\n }\r\n}\n\n\n//# sourceMappingURL=utilities.js.map\n\n;// ./node_modules/@azure/msal-react/dist/packageMetadata.js\n/*! @azure/msal-react v2.2.0 2024-11-05 */\n\n/* eslint-disable header/header */\r\nconst packageMetadata_name = "@azure/msal-react";\r\nconst version = "2.2.0";\n\n\n//# sourceMappingURL=packageMetadata.js.map\n\n;// ./node_modules/@azure/msal-react/dist/MsalProvider.js\n/*! @azure/msal-react v2.2.0 2024-11-05 */\n\n\n\n\n\n\n\n/*\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License.\r\n */\r\nconst MsalProviderActionType = {\r\n UNBLOCK_INPROGRESS: "UNBLOCK_INPROGRESS",\r\n EVENT: "EVENT",\r\n};\r\n/**\r\n * Returns the next inProgress and accounts state based on event message\r\n * @param previousState\r\n * @param action\r\n */\r\nconst reducer = (previousState, action) => {\r\n const { type, payload } = action;\r\n let newInProgress = previousState.inProgress;\r\n switch (type) {\r\n case MsalProviderActionType.UNBLOCK_INPROGRESS:\r\n if (previousState.inProgress === index_mjs_.InteractionStatus.Startup) {\r\n newInProgress = index_mjs_.InteractionStatus.None;\r\n payload.logger.info("MsalProvider - handleRedirectPromise resolved, setting inProgress to \'none\'");\r\n }\r\n break;\r\n case MsalProviderActionType.EVENT:\r\n const message = payload.message;\r\n const status = index_mjs_.EventMessageUtils.getInteractionStatusFromEvent(message, previousState.inProgress);\r\n if (status) {\r\n payload.logger.info(`MsalProvider - ${message.eventType} results in setting inProgress from ${previousState.inProgress} to ${status}`);\r\n newInProgress = status;\r\n }\r\n break;\r\n default:\r\n throw new Error(`Unknown action type: ${type}`);\r\n }\r\n const currentAccounts = payload.instance.getAllAccounts();\r\n if (newInProgress !== previousState.inProgress &&\r\n !accountArraysAreEqual(currentAccounts, previousState.accounts)) {\r\n // Both inProgress and accounts changed\r\n return {\r\n ...previousState,\r\n inProgress: newInProgress,\r\n accounts: currentAccounts,\r\n };\r\n }\r\n else if (newInProgress !== previousState.inProgress) {\r\n // Only only inProgress changed\r\n return {\r\n ...previousState,\r\n inProgress: newInProgress,\r\n };\r\n }\r\n else if (!accountArraysAreEqual(currentAccounts, previousState.accounts)) {\r\n // Only accounts changed\r\n return {\r\n ...previousState,\r\n accounts: currentAccounts,\r\n };\r\n }\r\n else {\r\n // Nothing changed\r\n return previousState;\r\n }\r\n};\r\n/**\r\n * MSAL context provider component. This must be rendered above any other components that use MSAL.\r\n */\r\nfunction MsalProvider({ instance, children, }) {\r\n (0,index_js_eager_.useEffect)(() => {\r\n instance.initializeWrapperLibrary(index_mjs_.WrapperSKU.React, version);\r\n }, [instance]);\r\n // Create a logger instance for msal-react with the same options as PublicClientApplication\r\n const logger = (0,index_js_eager_.useMemo)(() => {\r\n return instance.getLogger().clone(packageMetadata_name, version);\r\n }, [instance]);\r\n const [state, updateState] = (0,index_js_eager_.useReducer)(reducer, undefined, () => {\r\n // Lazy initialization of the initial state\r\n return {\r\n inProgress: index_mjs_.InteractionStatus.Startup,\r\n accounts: instance.getAllAccounts(),\r\n };\r\n });\r\n (0,index_js_eager_.useEffect)(() => {\r\n const callbackId = instance.addEventCallback((message) => {\r\n updateState({\r\n payload: {\r\n instance,\r\n logger,\r\n message,\r\n },\r\n type: MsalProviderActionType.EVENT,\r\n });\r\n });\r\n logger.verbose(`MsalProvider - Registered event callback with id: ${callbackId}`);\r\n instance\r\n .initialize()\r\n .then(() => {\r\n instance\r\n .handleRedirectPromise()\r\n .catch(() => {\r\n // Errors should be handled by listening to the LOGIN_FAILURE event\r\n return;\r\n })\r\n .finally(() => {\r\n /*\r\n * If handleRedirectPromise returns a cached promise the necessary events may not be fired\r\n * This is a fallback to prevent inProgress from getting stuck in \'startup\'\r\n */\r\n updateState({\r\n payload: {\r\n instance,\r\n logger,\r\n },\r\n type: MsalProviderActionType.UNBLOCK_INPROGRESS,\r\n });\r\n });\r\n })\r\n .catch(() => {\r\n // Errors should be handled by listening to the LOGIN_FAILURE event\r\n return;\r\n });\r\n return () => {\r\n // Remove callback when component unmounts or accounts change\r\n if (callbackId) {\r\n logger.verbose(`MsalProvider - Removing event callback ${callbackId}`);\r\n instance.removeEventCallback(callbackId);\r\n }\r\n };\r\n }, [instance, logger]);\r\n const contextValue = {\r\n instance,\r\n inProgress: state.inProgress,\r\n accounts: state.accounts,\r\n logger,\r\n };\r\n return (index_js_eager_.createElement(MsalContext.Provider, { value: contextValue }, children));\r\n}\n\n\n//# sourceMappingURL=MsalProvider.js.map\n\n;// ./node_modules/@azure/msal-react/dist/hooks/useMsal.js\n/*! @azure/msal-react v2.2.0 2024-11-05 */\n\n\n\n\n/*\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License.\r\n */\r\n/**\r\n * Returns Msal Context values\r\n */\r\nconst useMsal = () => (0,index_js_eager_.useContext)(MsalContext);\n\n\n//# sourceMappingURL=useMsal.js.map\n\n;// ./node_modules/@azure/msal-react/dist/hooks/useIsAuthenticated.js\n/*! @azure/msal-react v2.2.0 2024-11-05 */\n\n\n\n\n\n\n/*\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License.\r\n */\r\nfunction isAuthenticated(allAccounts, matchAccount) {\r\n if (matchAccount &&\r\n (matchAccount.username ||\r\n matchAccount.homeAccountId ||\r\n matchAccount.localAccountId)) {\r\n return !!getAccountByIdentifiers(allAccounts, matchAccount);\r\n }\r\n return allAccounts.length > 0;\r\n}\r\n/**\r\n * Returns whether or not a user is currently signed-in. Optionally provide 1 or more accountIdentifiers to determine if a specific user is signed-in\r\n * @param matchAccount\r\n */\r\nfunction useIsAuthenticated(matchAccount) {\r\n const { accounts: allAccounts, inProgress } = useMsal();\r\n const isUserAuthenticated = (0,index_js_eager_.useMemo)(() => {\r\n if (inProgress === index_mjs_.InteractionStatus.Startup) {\r\n return false;\r\n }\r\n return isAuthenticated(allAccounts, matchAccount);\r\n }, [allAccounts, inProgress, matchAccount]);\r\n return isUserAuthenticated;\r\n}\n\n\n//# sourceMappingURL=useIsAuthenticated.js.map\n\n;// ./node_modules/@azure/msal-react/dist/components/AuthenticatedTemplate.js\n/*! @azure/msal-react v2.2.0 2024-11-05 */\n\n\n\n\n\n\n\n/*\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License.\r\n */\r\n/**\r\n * Renders child components if user is authenticated\r\n * @param props\r\n */\r\nfunction AuthenticatedTemplate({ username, homeAccountId, localAccountId, children, }) {\r\n const context = useMsal();\r\n const accountIdentifier = (0,index_js_eager_.useMemo)(() => {\r\n return {\r\n username,\r\n homeAccountId,\r\n localAccountId,\r\n };\r\n }, [username, homeAccountId, localAccountId]);\r\n const isAuthenticated = useIsAuthenticated(accountIdentifier);\r\n if (isAuthenticated && context.inProgress !== index_mjs_.InteractionStatus.Startup) {\r\n return (index_js_eager_.createElement(index_js_eager_.Fragment, null, getChildrenOrFunction(children, context)));\r\n }\r\n return null;\r\n}\n\n\n//# sourceMappingURL=AuthenticatedTemplate.js.map\n\n;// ./node_modules/@azure/msal-react/dist/components/UnauthenticatedTemplate.js\n/*! @azure/msal-react v2.2.0 2024-11-05 */\n\n\n\n\n\n\n\n/*\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License.\r\n */\r\n/**\r\n * Renders child components if user is unauthenticated\r\n * @param props\r\n */\r\nfunction UnauthenticatedTemplate({ username, homeAccountId, localAccountId, children, }) {\r\n const context = useMsal();\r\n const accountIdentifier = (0,index_js_eager_.useMemo)(() => {\r\n return {\r\n username,\r\n homeAccountId,\r\n localAccountId,\r\n };\r\n }, [username, homeAccountId, localAccountId]);\r\n const isAuthenticated = useIsAuthenticated(accountIdentifier);\r\n if (!isAuthenticated &&\r\n context.inProgress !== index_mjs_.InteractionStatus.Startup &&\r\n context.inProgress !== index_mjs_.InteractionStatus.HandleRedirect) {\r\n return (index_js_eager_.createElement(index_js_eager_.Fragment, null, getChildrenOrFunction(children, context)));\r\n }\r\n return null;\r\n}\n\n\n//# sourceMappingURL=UnauthenticatedTemplate.js.map\n\n;// ./node_modules/@azure/msal-react/dist/hooks/useAccount.js\n/*! @azure/msal-react v2.2.0 2024-11-05 */\n\n\n\n\n\n\n/*\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License.\r\n */\r\nfunction getAccount(instance, accountIdentifiers) {\r\n if (!accountIdentifiers ||\r\n (!accountIdentifiers.homeAccountId &&\r\n !accountIdentifiers.localAccountId &&\r\n !accountIdentifiers.username)) {\r\n // If no account identifiers are provided, return active account\r\n return instance.getActiveAccount();\r\n }\r\n return getAccountByIdentifiers(instance.getAllAccounts(), accountIdentifiers);\r\n}\r\n/**\r\n * Given 1 or more accountIdentifiers, returns the Account object if the user is signed-in\r\n * @param accountIdentifiers\r\n */\r\nfunction useAccount(accountIdentifiers) {\r\n const { instance, inProgress, logger } = useMsal();\r\n const [account, setAccount] = (0,index_js_eager_.useState)(() => getAccount(instance, accountIdentifiers));\r\n (0,index_js_eager_.useEffect)(() => {\r\n setAccount((currentAccount) => {\r\n const nextAccount = getAccount(instance, accountIdentifiers);\r\n if (!index_mjs_.AccountEntity.accountInfoIsEqual(currentAccount, nextAccount, true)) {\r\n logger.info("useAccount - Updating account");\r\n return nextAccount;\r\n }\r\n return currentAccount;\r\n });\r\n }, [inProgress, accountIdentifiers, instance, logger]);\r\n return account;\r\n}\n\n\n//# sourceMappingURL=useAccount.js.map\n\n;// ./node_modules/@azure/msal-react/dist/error/ReactAuthError.js\n/*! @azure/msal-react v2.2.0 2024-11-05 */\n\n\n\n/*\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License.\r\n */\r\nconst ReactAuthErrorMessage = {\r\n invalidInteractionType: {\r\n code: "invalid_interaction_type",\r\n desc: "The provided interaction type is invalid.",\r\n },\r\n unableToFallbackToInteraction: {\r\n code: "unable_to_fallback_to_interaction",\r\n desc: "Interaction is required but another interaction is already in progress. Please try again when the current interaction is complete.",\r\n },\r\n};\r\nclass ReactAuthError extends index_mjs_.AuthError {\r\n constructor(errorCode, errorMessage) {\r\n super(errorCode, errorMessage);\r\n Object.setPrototypeOf(this, ReactAuthError.prototype);\r\n this.name = "ReactAuthError";\r\n }\r\n static createInvalidInteractionTypeError() {\r\n return new ReactAuthError(ReactAuthErrorMessage.invalidInteractionType.code, ReactAuthErrorMessage.invalidInteractionType.desc);\r\n }\r\n static createUnableToFallbackToInteractionError() {\r\n return new ReactAuthError(ReactAuthErrorMessage.unableToFallbackToInteraction.code, ReactAuthErrorMessage.unableToFallbackToInteraction.desc);\r\n }\r\n}\n\n\n//# sourceMappingURL=ReactAuthError.js.map\n\n;// ./node_modules/@azure/msal-react/dist/hooks/useMsalAuthentication.js\n/*! @azure/msal-react v2.2.0 2024-11-05 */\n\n\n\n\n\n\n\n\n/*\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License.\r\n */\r\n/**\r\n * If a user is not currently signed in this hook invokes a login. Failed logins can be retried using the login callback returned.\r\n * If a user is currently signed in this hook attempts to acquire a token. Subsequent token requests can use the acquireToken callback returned.\r\n * Optionally provide a request object to be used in the login/acquireToken call.\r\n * Optionally provide a specific user that should be logged in.\r\n * @param interactionType\r\n * @param authenticationRequest\r\n * @param accountIdentifiers\r\n */\r\nfunction useMsalAuthentication(interactionType, authenticationRequest, accountIdentifiers) {\r\n const { instance, inProgress, logger } = useMsal();\r\n const isAuthenticated = useIsAuthenticated(accountIdentifiers);\r\n const account = useAccount(accountIdentifiers);\r\n const [[result, error], setResponse] = (0,index_js_eager_.useState)([null, null]);\r\n // Used to prevent state updates after unmount\r\n const mounted = (0,index_js_eager_.useRef)(true);\r\n (0,index_js_eager_.useEffect)(() => {\r\n return () => {\r\n mounted.current = false;\r\n };\r\n }, []);\r\n // Boolean used to check if interaction is in progress in acquireTokenSilent fallback. Use Ref instead of state to prevent acquireToken function from being regenerated on each change to interactionInProgress value\r\n const interactionInProgress = (0,index_js_eager_.useRef)(inProgress !== index_mjs_.InteractionStatus.None);\r\n (0,index_js_eager_.useEffect)(() => {\r\n interactionInProgress.current = inProgress !== index_mjs_.InteractionStatus.None;\r\n }, [inProgress]);\r\n // Flag used to control when the hook calls login/acquireToken\r\n const shouldAcquireToken = (0,index_js_eager_.useRef)(true);\r\n (0,index_js_eager_.useEffect)(() => {\r\n if (!!error) {\r\n // Errors should be handled by consuming component\r\n shouldAcquireToken.current = false;\r\n return;\r\n }\r\n if (!!result) {\r\n // Token has already been acquired, consuming component/application is responsible for renewing\r\n shouldAcquireToken.current = false;\r\n return;\r\n }\r\n }, [error, result]);\r\n const login = (0,index_js_eager_.useCallback)(async (callbackInteractionType, callbackRequest) => {\r\n const loginType = callbackInteractionType || interactionType;\r\n const loginRequest = callbackRequest || authenticationRequest;\r\n switch (loginType) {\r\n case index_mjs_.InteractionType.Popup:\r\n logger.verbose("useMsalAuthentication - Calling loginPopup");\r\n return instance.loginPopup(loginRequest);\r\n case index_mjs_.InteractionType.Redirect:\r\n // This promise is not expected to resolve due to full frame redirect\r\n logger.verbose("useMsalAuthentication - Calling loginRedirect");\r\n return instance\r\n .loginRedirect(loginRequest)\r\n .then(null);\r\n case index_mjs_.InteractionType.Silent:\r\n logger.verbose("useMsalAuthentication - Calling ssoSilent");\r\n return instance.ssoSilent(loginRequest);\r\n default:\r\n throw ReactAuthError.createInvalidInteractionTypeError();\r\n }\r\n }, [instance, interactionType, authenticationRequest, logger]);\r\n const acquireToken = (0,index_js_eager_.useCallback)(async (callbackInteractionType, callbackRequest) => {\r\n const fallbackInteractionType = callbackInteractionType || interactionType;\r\n let tokenRequest;\r\n if (callbackRequest) {\r\n logger.trace("useMsalAuthentication - acquireToken - Using request provided in the callback");\r\n tokenRequest = {\r\n ...callbackRequest,\r\n };\r\n }\r\n else if (authenticationRequest) {\r\n logger.trace("useMsalAuthentication - acquireToken - Using request provided in the hook");\r\n tokenRequest = {\r\n ...authenticationRequest,\r\n scopes: authenticationRequest.scopes || index_mjs_.OIDC_DEFAULT_SCOPES,\r\n };\r\n }\r\n else {\r\n logger.trace("useMsalAuthentication - acquireToken - No request object provided, using default request.");\r\n tokenRequest = {\r\n scopes: index_mjs_.OIDC_DEFAULT_SCOPES,\r\n };\r\n }\r\n if (!tokenRequest.account && account) {\r\n logger.trace("useMsalAuthentication - acquireToken - Attaching account to request");\r\n tokenRequest.account = account;\r\n }\r\n const getToken = async () => {\r\n logger.verbose("useMsalAuthentication - Calling acquireTokenSilent");\r\n return instance\r\n .acquireTokenSilent(tokenRequest)\r\n .catch(async (e) => {\r\n if (e instanceof index_mjs_.InteractionRequiredAuthError) {\r\n if (!interactionInProgress.current) {\r\n logger.error("useMsalAuthentication - Interaction required, falling back to interaction");\r\n return login(fallbackInteractionType, tokenRequest);\r\n }\r\n else {\r\n logger.error("useMsalAuthentication - Interaction required but is already in progress. Please try again, if needed, after interaction completes.");\r\n throw ReactAuthError.createUnableToFallbackToInteractionError();\r\n }\r\n }\r\n throw e;\r\n });\r\n };\r\n return getToken()\r\n .then((response) => {\r\n if (mounted.current) {\r\n setResponse([response, null]);\r\n }\r\n return response;\r\n })\r\n .catch((e) => {\r\n if (mounted.current) {\r\n setResponse([null, e]);\r\n }\r\n throw e;\r\n });\r\n }, [\r\n instance,\r\n interactionType,\r\n authenticationRequest,\r\n logger,\r\n account,\r\n login,\r\n ]);\r\n (0,index_js_eager_.useEffect)(() => {\r\n const callbackId = instance.addEventCallback((message) => {\r\n switch (message.eventType) {\r\n case index_mjs_.EventType.LOGIN_SUCCESS:\r\n case index_mjs_.EventType.SSO_SILENT_SUCCESS:\r\n if (message.payload) {\r\n setResponse([\r\n message.payload,\r\n null,\r\n ]);\r\n }\r\n break;\r\n case index_mjs_.EventType.LOGIN_FAILURE:\r\n case index_mjs_.EventType.SSO_SILENT_FAILURE:\r\n if (message.error) {\r\n setResponse([null, message.error]);\r\n }\r\n break;\r\n }\r\n });\r\n logger.verbose(`useMsalAuthentication - Registered event callback with id: ${callbackId}`);\r\n return () => {\r\n if (callbackId) {\r\n logger.verbose(`useMsalAuthentication - Removing event callback ${callbackId}`);\r\n instance.removeEventCallback(callbackId);\r\n }\r\n };\r\n }, [instance, logger]);\r\n (0,index_js_eager_.useEffect)(() => {\r\n if (shouldAcquireToken.current &&\r\n inProgress === index_mjs_.InteractionStatus.None) {\r\n shouldAcquireToken.current = false;\r\n if (!isAuthenticated) {\r\n logger.info("useMsalAuthentication - No user is authenticated, attempting to login");\r\n login().catch(() => {\r\n // Errors are saved in state above\r\n return;\r\n });\r\n }\r\n else if (account) {\r\n logger.info("useMsalAuthentication - User is authenticated, attempting to acquire token");\r\n acquireToken().catch(() => {\r\n // Errors are saved in state above\r\n return;\r\n });\r\n }\r\n }\r\n }, [isAuthenticated, account, inProgress, login, acquireToken, logger]);\r\n return {\r\n login,\r\n acquireToken,\r\n result,\r\n error,\r\n };\r\n}\n\n\n//# sourceMappingURL=useMsalAuthentication.js.map\n\n;// ./node_modules/@azure/msal-react/dist/components/MsalAuthenticationTemplate.js\n/*! @azure/msal-react v2.2.0 2024-11-05 */\n\n\n\n\n\n\n\n\n/*\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License.\r\n */\r\n/**\r\n * Attempts to authenticate user if not already authenticated, then renders child components\r\n * @param props\r\n */\r\nfunction MsalAuthenticationTemplate({ interactionType, username, homeAccountId, localAccountId, authenticationRequest, loadingComponent: LoadingComponent, errorComponent: ErrorComponent, children, }) {\r\n const accountIdentifier = (0,index_js_eager_.useMemo)(() => {\r\n return {\r\n username,\r\n homeAccountId,\r\n localAccountId,\r\n };\r\n }, [username, homeAccountId, localAccountId]);\r\n const context = useMsal();\r\n const msalAuthResult = useMsalAuthentication(interactionType, authenticationRequest, accountIdentifier);\r\n const isAuthenticated = useIsAuthenticated(accountIdentifier);\r\n if (msalAuthResult.error && context.inProgress === index_mjs_.InteractionStatus.None) {\r\n if (!!ErrorComponent) {\r\n return index_js_eager_.createElement(ErrorComponent, { ...msalAuthResult });\r\n }\r\n throw msalAuthResult.error;\r\n }\r\n if (isAuthenticated) {\r\n return (index_js_eager_.createElement(index_js_eager_.Fragment, null, getChildrenOrFunction(children, msalAuthResult)));\r\n }\r\n if (!!LoadingComponent && context.inProgress !== index_mjs_.InteractionStatus.None) {\r\n return index_js_eager_.createElement(LoadingComponent, { ...context });\r\n }\r\n return null;\r\n}\n\n\n//# sourceMappingURL=MsalAuthenticationTemplate.js.map\n\n;// ./node_modules/@azure/msal-react/dist/components/withMsal.js\n/*! @azure/msal-react v2.2.0 2024-11-05 */\n\n\n\n\n/*\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License.\r\n */\r\n/**\r\n * Higher order component wraps provided component with msal by injecting msal context values into the component\'s props\r\n * @param Component\r\n */\r\nconst withMsal = (Component) => {\r\n const ComponentWithMsal = (props) => {\r\n const msal = useMsal();\r\n return index_js_eager_.createElement(Component, { ...props, msalContext: msal });\r\n };\r\n const componentName = Component.displayName || Component.name || "Component";\r\n ComponentWithMsal.displayName = `withMsal(${componentName})`;\r\n return ComponentWithMsal;\r\n};\n\n\n//# sourceMappingURL=withMsal.js.map\n\n;// ./node_modules/@azure/msal-react/dist/index.js\n/*! @azure/msal-react v2.2.0 2024-11-05 */\n\n\n\n\n\n\n\n\n\n\n\n\n//# sourceMappingURL=index.js.map\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMzY4MTAuanMiLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUN2QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FDaEVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQ1BBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FDbEpBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUNmQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FDcENBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUNqQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUNuQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQzFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FDakNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUNuTUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUM1Q0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQ3hCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vaXRnLW5leHRnZW4tZnJvbnRlbmQvLi9ub2RlX21vZHVsZXMvQGF6dXJlL21zYWwtcmVhY3QvZGlzdC9Nc2FsQ29udGV4dC5qcz84ZmVkIiwid2VicGFjazovL2l0Zy1uZXh0Z2VuLWZyb250ZW5kLy4vbm9kZV9tb2R1bGVzL0BhenVyZS9tc2FsLXJlYWN0L2Rpc3QvdXRpbHMvdXRpbGl0aWVzLmpzPzdiNzYiLCJ3ZWJwYWNrOi8vaXRnLW5leHRnZW4tZnJvbnRlbmQvLi9ub2RlX21vZHVsZXMvQGF6dXJlL21zYWwtcmVhY3QvZGlzdC9wYWNrYWdlTWV0YWRhdGEuanM/NmFiYyIsIndlYnBhY2s6Ly9pdGctbmV4dGdlbi1mcm9udGVuZC8uL25vZGVfbW9kdWxlcy9AYXp1cmUvbXNhbC1yZWFjdC9kaXN0L01zYWxQcm92aWRlci5qcz8xYzMxIiwid2VicGFjazovL2l0Zy1uZXh0Z2VuLWZyb250ZW5kLy4vbm9kZV9tb2R1bGVzL0BhenVyZS9tc2FsLXJlYWN0L2Rpc3QvaG9va3MvdXNlTXNhbC5qcz9mMzVlIiwid2VicGFjazovL2l0Zy1uZXh0Z2VuLWZyb250ZW5kLy4vbm9kZV9tb2R1bGVzL0BhenVyZS9tc2FsLXJlYWN0L2Rpc3QvaG9va3MvdXNlSXNBdXRoZW50aWNhdGVkLmpzP2M3ZjMiLCJ3ZWJwYWNrOi8vaXRnLW5leHRnZW4tZnJvbnRlbmQvLi9ub2RlX21vZHVsZXMvQGF6dXJlL21zYWwtcmVhY3QvZGlzdC9jb21wb25lbnRzL0F1dGhlbnRpY2F0ZWRUZW1wbGF0ZS5qcz9kMDdlIiwid2VicGFjazovL2l0Zy1uZXh0Z2VuLWZyb250ZW5kLy4vbm9kZV9tb2R1bGVzL0BhenVyZS9tc2FsLXJlYWN0L2Rpc3QvY29tcG9uZW50cy9VbmF1dGhlbnRpY2F0ZWRUZW1wbGF0ZS5qcz9mYjdjIiwid2VicGFjazovL2l0Zy1uZXh0Z2VuLWZyb250ZW5kLy4vbm9kZV9tb2R1bGVzL0BhenVyZS9tc2FsLXJlYWN0L2Rpc3QvaG9va3MvdXNlQWNjb3VudC5qcz9iNjFhIiwid2VicGFjazovL2l0Zy1uZXh0Z2VuLWZyb250ZW5kLy4vbm9kZV9tb2R1bGVzL0BhenVyZS9tc2FsLXJlYWN0L2Rpc3QvZXJyb3IvUmVhY3RBdXRoRXJyb3IuanM/NTE2YSIsIndlYnBhY2s6Ly9pdGctbmV4dGdlbi1mcm9udGVuZC8uL25vZGVfbW9kdWxlcy9AYXp1cmUvbXNhbC1yZWFjdC9kaXN0L2hvb2tzL3VzZU1zYWxBdXRoZW50aWNhdGlvbi5qcz8wOTk1Iiwid2VicGFjazovL2l0Zy1uZXh0Z2VuLWZyb250ZW5kLy4vbm9kZV9tb2R1bGVzL0BhenVyZS9tc2FsLXJlYWN0L2Rpc3QvY29tcG9uZW50cy9Nc2FsQXV0aGVudGljYXRpb25UZW1wbGF0ZS5qcz9mMjcyIiwid2VicGFjazovL2l0Zy1uZXh0Z2VuLWZyb250ZW5kLy4vbm9kZV9tb2R1bGVzL0BhenVyZS9tc2FsLXJlYWN0L2Rpc3QvY29tcG9uZW50cy93aXRoTXNhbC5qcz9lMTEwIiwid2VicGFjazovL2l0Zy1uZXh0Z2VuLWZyb250ZW5kLy4vbm9kZV9tb2R1bGVzL0BhenVyZS9tc2FsLXJlYWN0L2Rpc3QvaW5kZXguanM/YWNlMiJdLCJzb3VyY2VzQ29udGVudCI6WyIvKiEgQGF6dXJlL21zYWwtcmVhY3QgdjIuMi4wIDIwMjQtMTEtMDUgKi9cbid1c2Ugc3RyaWN0JztcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IHN0dWJiZWRQdWJsaWNDbGllbnRBcHBsaWNhdGlvbiwgSW50ZXJhY3Rpb25TdGF0dXMsIExvZ2dlciB9IGZyb20gJ0BhenVyZS9tc2FsLWJyb3dzZXInO1xuXG4vKlxyXG4gKiBDb3B5cmlnaHQgKGMpIE1pY3Jvc29mdCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cclxuICogTGljZW5zZWQgdW5kZXIgdGhlIE1JVCBMaWNlbnNlLlxyXG4gKi9cclxuLypcclxuICogU3R1YmJlZCBjb250ZXh0IGltcGxlbWVudGF0aW9uXHJcbiAqIE9ubHkgdXNlZCB3aGVuIHRoZXJlIGlzIG5vIHByb3ZpZGVyLCB3aGljaCBpcyBhbiB1bnN1cHBvcnRlZCBzY2VuYXJpb1xyXG4gKi9cclxuY29uc3QgZGVmYXVsdE1zYWxDb250ZXh0ID0ge1xyXG4gICAgaW5zdGFuY2U6IHN0dWJiZWRQdWJsaWNDbGllbnRBcHBsaWNhdGlvbixcclxuICAgIGluUHJvZ3Jlc3M6IEludGVyYWN0aW9uU3RhdHVzLk5vbmUsXHJcbiAgICBhY2NvdW50czogW10sXHJcbiAgICBsb2dnZXI6IG5ldyBMb2dnZXIoe30pLFxyXG59O1xyXG5jb25zdCBNc2FsQ29udGV4dCA9IFJlYWN0LmNyZWF0ZUNvbnRleHQoZGVmYXVsdE1zYWxDb250ZXh0KTtcclxuY29uc3QgTXNhbENvbnN1bWVyID0gTXNhbENvbnRleHQuQ29uc3VtZXI7XG5cbmV4cG9ydCB7IE1zYWxDb25zdW1lciwgTXNhbENvbnRleHQgfTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPU1zYWxDb250ZXh0LmpzLm1hcFxuIiwiLyohIEBhenVyZS9tc2FsLXJlYWN0IHYyLjIuMCAyMDI0LTExLTA1ICovXG4ndXNlIHN0cmljdCc7XG4vKlxyXG4gKiBDb3B5cmlnaHQgKGMpIE1pY3Jvc29mdCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cclxuICogTGljZW5zZWQgdW5kZXIgdGhlIE1JVCBMaWNlbnNlLlxyXG4gKi9cclxuZnVuY3Rpb24gZ2V0Q2hpbGRyZW5PckZ1bmN0aW9uKGNoaWxkcmVuLCBhcmdzKSB7XHJcbiAgICBpZiAodHlwZW9mIGNoaWxkcmVuID09PSBcImZ1bmN0aW9uXCIpIHtcclxuICAgICAgICByZXR1cm4gY2hpbGRyZW4oYXJncyk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gY2hpbGRyZW47XHJcbn1cclxuLyoqXHJcbiAqIEhlbHBlciBmdW5jdGlvbiB0byBkZXRlcm1pbmUgd2hldGhlciAyIGFycmF5cyBhcmUgZXF1YWxcclxuICogVXNlZCB0byBhdm9pZCB1bm5lY2Vzc2FyeSBzdGF0ZSB1cGRhdGVzXHJcbiAqIEBwYXJhbSBhcnJheUFcclxuICogQHBhcmFtIGFycmF5QlxyXG4gKi9cclxuZnVuY3Rpb24gYWNjb3VudEFycmF5c0FyZUVxdWFsKGFycmF5QSwgYXJyYXlCKSB7XHJcbiAgICBpZiAoYXJyYXlBLmxlbmd0aCAhPT0gYXJyYXlCLmxlbmd0aCkge1xyXG4gICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuICAgIGNvbnN0IGNvbXBhcmlzb25BcnJheSA9IFsuLi5hcnJheUJdO1xyXG4gICAgcmV0dXJuIGFycmF5QS5ldmVyeSgoZWxlbWVudEEpID0+IHtcclxuICAgICAgICBjb25zdCBlbGVtZW50QiA9IGNvbXBhcmlzb25BcnJheS5zaGlmdCgpO1xyXG4gICAgICAgIGlmICghZWxlbWVudEEgfHwgIWVsZW1lbnRCKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIChlbGVtZW50QS5ob21lQWNjb3VudElkID09PSBlbGVtZW50Qi5ob21lQWNjb3VudElkICYmXHJcbiAgICAgICAgICAgIGVsZW1lbnRBLmxvY2FsQWNjb3VudElkID09PSBlbGVtZW50Qi5sb2NhbEFjY291bnRJZCAmJlxyXG4gICAgICAgICAgICBlbGVtZW50QS51c2VybmFtZSA9PT0gZWxlbWVudEIudXNlcm5hbWUpO1xyXG4gICAgfSk7XHJcbn1cclxuZnVuY3Rpb24gZ2V0QWNjb3VudEJ5SWRlbnRpZmllcnMoYWxsQWNjb3VudHMsIGFjY291bnRJZGVudGlmaWVycykge1xyXG4gICAgaWYgKGFsbEFjY291bnRzLmxlbmd0aCA+IDAgJiZcclxuICAgICAgICAoYWNjb3VudElkZW50aWZpZXJzLmhvbWVBY2NvdW50SWQgfHxcclxuICAgICAgICAgICAgYWNjb3VudElkZW50aWZpZXJzLmxvY2FsQWNjb3VudElkIHx8XHJcbiAgICAgICAgICAgIGFjY291bnRJZGVudGlmaWVycy51c2VybmFtZSkpIHtcclxuICAgICAgICBjb25zdCBtYXRjaGVkQWNjb3VudHMgPSBhbGxBY2NvdW50cy5maWx0ZXIoKGFjY291bnRPYmopID0+IHtcclxuICAgICAgICAgICAgaWYgKGFjY291bnRJZGVudGlmaWVycy51c2VybmFtZSAmJlxyXG4gICAgICAgICAgICAgICAgYWNjb3VudElkZW50aWZpZXJzLnVzZXJuYW1lLnRvTG93ZXJDYXNlKCkgIT09XHJcbiAgICAgICAgICAgICAgICAgICAgYWNjb3VudE9iai51c2VybmFtZS50b0xvd2VyQ2FzZSgpKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYgKGFjY291bnRJZGVudGlmaWVycy5ob21lQWNjb3VudElkICYmXHJcbiAgICAgICAgICAgICAgICBhY2NvdW50SWRlbnRpZmllcnMuaG9tZUFjY291bnRJZC50b0xvd2VyQ2FzZSgpICE9PVxyXG4gICAgICAgICAgICAgICAgICAgIGFjY291bnRPYmouaG9tZUFjY291bnRJZC50b0xvd2VyQ2FzZSgpKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYgKGFjY291bnRJZGVudGlmaWVycy5sb2NhbEFjY291bnRJZCAmJlxyXG4gICAgICAgICAgICAgICAgYWNjb3VudElkZW50aWZpZXJzLmxvY2FsQWNjb3VudElkLnRvTG93ZXJDYXNlKCkgIT09XHJcbiAgICAgICAgICAgICAgICAgICAgYWNjb3VudE9iai5sb2NhbEFjY291bnRJZC50b0xvd2VyQ2FzZSgpKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgcmV0dXJuIG1hdGNoZWRBY2NvdW50c1swXSB8fCBudWxsO1xyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcbiAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICB9XHJcbn1cblxuZXhwb3J0IHsgYWNjb3VudEFycmF5c0FyZUVxdWFsLCBnZXRBY2NvdW50QnlJZGVudGlmaWVycywgZ2V0Q2hpbGRyZW5PckZ1bmN0aW9uIH07XG4vLyMgc291cmNlTWFwcGluZ1VSTD11dGlsaXRpZXMuanMubWFwXG4iLCIvKiEgQGF6dXJlL21zYWwtcmVhY3QgdjIuMi4wIDIwMjQtMTEtMDUgKi9cbid1c2Ugc3RyaWN0Jztcbi8qIGVzbGludC1kaXNhYmxlIGhlYWRlci9oZWFkZXIgKi9cclxuY29uc3QgbmFtZSA9IFwiQGF6dXJlL21zYWwtcmVhY3RcIjtcclxuY29uc3QgdmVyc2lvbiA9IFwiMi4yLjBcIjtcblxuZXhwb3J0IHsgbmFtZSwgdmVyc2lvbiB9O1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9cGFja2FnZU1ldGFkYXRhLmpzLm1hcFxuIiwiLyohIEBhenVyZS9tc2FsLXJlYWN0IHYyLjIuMCAyMDI0LTExLTA1ICovXG4ndXNlIHN0cmljdCc7XG5pbXBvcnQgUmVhY3RfX2RlZmF1bHQsIHsgdXNlRWZmZWN0LCB1c2VNZW1vLCB1c2VSZWR1Y2VyIH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsgV3JhcHBlclNLVSwgSW50ZXJhY3Rpb25TdGF0dXMsIEV2ZW50TWVzc2FnZVV0aWxzIH0gZnJvbSAnQGF6dXJlL21zYWwtYnJvd3Nlcic7XG5pbXBvcnQgeyBNc2FsQ29udGV4dCB9IGZyb20gJy4vTXNhbENvbnRleHQuanMnO1xuaW1wb3J0IHsgYWNjb3VudEFycmF5c0FyZUVxdWFsIH0gZnJvbSAnLi91dGlscy91dGlsaXRpZXMuanMnO1xuaW1wb3J0IHsgdmVyc2lvbiwgbmFtZSB9IGZyb20gJy4vcGFja2FnZU1ldGFkYXRhLmpzJztcblxuLypcclxuICogQ29weXJpZ2h0IChjKSBNaWNyb3NvZnQgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuXHJcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgTGljZW5zZS5cclxuICovXHJcbmNvbnN0IE1zYWxQcm92aWRlckFjdGlvblR5cGUgPSB7XHJcbiAgICBVTkJMT0NLX0lOUFJPR1JFU1M6IFwiVU5CTE9DS19JTlBST0dSRVNTXCIsXHJcbiAgICBFVkVOVDogXCJFVkVOVFwiLFxyXG59O1xyXG4vKipcclxuICogUmV0dXJucyB0aGUgbmV4dCBpblByb2dyZXNzIGFuZCBhY2NvdW50cyBzdGF0ZSBiYXNlZCBvbiBldmVudCBtZXNzYWdlXHJcbiAqIEBwYXJhbSBwcmV2aW91c1N0YXRlXHJcbiAqIEBwYXJhbSBhY3Rpb25cclxuICovXHJcbmNvbnN0IHJlZHVjZXIgPSAocHJldmlvdXNTdGF0ZSwgYWN0aW9uKSA9PiB7XHJcbiAgICBjb25zdCB7IHR5cGUsIHBheWxvYWQgfSA9IGFjdGlvbjtcclxuICAgIGxldCBuZXdJblByb2dyZXNzID0gcHJldmlvdXNTdGF0ZS5pblByb2dyZXNzO1xyXG4gICAgc3dpdGNoICh0eXBlKSB7XHJcbiAgICAgICAgY2FzZSBNc2FsUHJvdmlkZXJBY3Rpb25UeXBlLlVOQkxPQ0tfSU5QUk9HUkVTUzpcclxuICAgICAgICAgICAgaWYgKHByZXZpb3VzU3RhdGUuaW5Qcm9ncmVzcyA9PT0gSW50ZXJhY3Rpb25TdGF0dXMuU3RhcnR1cCkge1xyXG4gICAgICAgICAgICAgICAgbmV3SW5Qcm9ncmVzcyA9IEludGVyYWN0aW9uU3RhdHVzLk5vbmU7XHJcbiAgICAgICAgICAgICAgICBwYXlsb2FkLmxvZ2dlci5pbmZvKFwiTXNhbFByb3ZpZGVyIC0gaGFuZGxlUmVkaXJlY3RQcm9taXNlIHJlc29sdmVkLCBzZXR0aW5nIGluUHJvZ3Jlc3MgdG8gJ25vbmUnXCIpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIGNhc2UgTXNhbFByb3ZpZGVyQWN0aW9uVHlwZS5FVkVOVDpcclxuICAgICAgICAgICAgY29uc3QgbWVzc2FnZSA9IHBheWxvYWQubWVzc2FnZTtcclxuICAgICAgICAgICAgY29uc3Qgc3RhdHVzID0gRXZlbnRNZXNzYWdlVXRpbHMuZ2V0SW50ZXJhY3Rpb25TdGF0dXNGcm9tRXZlbnQobWVzc2FnZSwgcHJldmlvdXNTdGF0ZS5pblByb2dyZXNzKTtcclxuICAgICAgICAgICAgaWYgKHN0YXR1cykge1xyXG4gICAgICAgICAgICAgICAgcGF5bG9hZC5sb2dnZXIuaW5mbyhgTXNhbFByb3ZpZGVyIC0gJHttZXNzYWdlLmV2ZW50VHlwZX0gcmVzdWx0cyBpbiBzZXR0aW5nIGluUHJvZ3Jlc3MgZnJvbSAke3ByZXZpb3VzU3RhdGUuaW5Qcm9ncmVzc30gdG8gJHtzdGF0dXN9YCk7XHJcbiAgICAgICAgICAgICAgICBuZXdJblByb2dyZXNzID0gc3RhdHVzO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgVW5rbm93biBhY3Rpb24gdHlwZTogJHt0eXBlfWApO1xyXG4gICAgfVxyXG4gICAgY29uc3QgY3VycmVudEFjY291bnRzID0gcGF5bG9hZC5pbnN0YW5jZS5nZXRBbGxBY2NvdW50cygpO1xyXG4gICAgaWYgKG5ld0luUHJvZ3Jlc3MgIT09IHByZXZpb3VzU3RhdGUuaW5Qcm9ncmVzcyAmJlxyXG4gICAgICAgICFhY2NvdW50QXJyYXlzQXJlRXF1YWwoY3VycmVudEFjY291bnRzLCBwcmV2aW91c1N0YXRlLmFjY291bnRzKSkge1xyXG4gICAgICAgIC8vIEJvdGggaW5Qcm9ncmVzcyBhbmQgYWNjb3VudHMgY2hhbmdlZFxyXG4gICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgIC4uLnByZXZpb3VzU3RhdGUsXHJcbiAgICAgICAgICAgIGluUHJvZ3Jlc3M6IG5ld0luUHJvZ3Jlc3MsXHJcbiAgICAgICAgICAgIGFjY291bnRzOiBjdXJyZW50QWNjb3VudHMsXHJcbiAgICAgICAgfTtcclxuICAgIH1cclxuICAgIGVsc2UgaWYgKG5ld0luUHJvZ3Jlc3MgIT09IHByZXZpb3VzU3RhdGUuaW5Qcm9ncmVzcykge1xyXG4gICAgICAgIC8vIE9ubHkgb25seSBpblByb2dyZXNzIGNoYW5nZWRcclxuICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICAuLi5wcmV2aW91c1N0YXRlLFxyXG4gICAgICAgICAgICBpblByb2dyZXNzOiBuZXdJblByb2dyZXNzLFxyXG4gICAgICAgIH07XHJcbiAgICB9XHJcbiAgICBlbHNlIGlmICghYWNjb3VudEFycmF5c0FyZUVxdWFsKGN1cnJlbnRBY2NvdW50cywgcHJldmlvdXNTdGF0ZS5hY2NvdW50cykpIHtcclxuICAgICAgICAvLyBPbmx5IGFjY291bnRzIGNoYW5nZWRcclxuICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICAuLi5wcmV2aW91c1N0YXRlLFxyXG4gICAgICAgICAgICBhY2NvdW50czogY3VycmVudEFjY291bnRzLFxyXG4gICAgICAgIH07XHJcbiAgICB9XHJcbiAgICBlbHNlIHtcclxuICAgICAgICAvLyBOb3RoaW5nIGNoYW5nZWRcclxuICAgICAgICByZXR1cm4gcHJldmlvdXNTdGF0ZTtcclxuICAgIH1cclxufTtcclxuLyoqXHJcbiAqIE1TQUwgY29udGV4dCBwcm92aWRlciBjb21wb25lbnQuIFRoaXMgbXVzdCBiZSByZW5kZXJlZCBhYm92ZSBhbnkgb3RoZXIgY29tcG9uZW50cyB0aGF0IHVzZSBNU0FMLlxyXG4gKi9cclxuZnVuY3Rpb24gTXNhbFByb3ZpZGVyKHsgaW5zdGFuY2UsIGNoaWxkcmVuLCB9KSB7XHJcbiAgICB1c2VFZmZlY3QoKCkgPT4ge1xyXG4gICAgICAgIGluc3RhbmNlLmluaXRpYWxpemVXcmFwcGVyTGlicmFyeShXcmFwcGVyU0tVLlJlYWN0LCB2ZXJzaW9uKTtcclxuICAgIH0sIFtpbnN0YW5jZV0pO1xyXG4gICAgLy8gQ3JlYXRlIGEgbG9nZ2VyIGluc3RhbmNlIGZvciBtc2FsLXJlYWN0IHdpdGggdGhlIHNhbWUgb3B0aW9ucyBhcyBQdWJsaWNDbGllbnRBcHBsaWNhdGlvblxyXG4gICAgY29uc3QgbG9nZ2VyID0gdXNlTWVtbygoKSA9PiB7XHJcbiAgICAgICAgcmV0dXJuIGluc3RhbmNlLmdldExvZ2dlcigpLmNsb25lKG5hbWUsIHZlcnNpb24pO1xyXG4gICAgfSwgW2luc3RhbmNlXSk7XHJcbiAgICBjb25zdCBbc3RhdGUsIHVwZGF0ZVN0YXRlXSA9IHVzZVJlZHVjZXIocmVkdWNlciwgdW5kZWZpbmVkLCAoKSA9PiB7XHJcbiAgICAgICAgLy8gTGF6eSBpbml0aWFsaXphdGlvbiBvZiB0aGUgaW5pdGlhbCBzdGF0ZVxyXG4gICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgIGluUHJvZ3Jlc3M6IEludGVyYWN0aW9uU3RhdHVzLlN0YXJ0dXAsXHJcbiAgICAgICAgICAgIGFjY291bnRzOiBpbnN0YW5jZS5nZXRBbGxBY2NvdW50cygpLFxyXG4gICAgICAgIH07XHJcbiAgICB9KTtcclxuICAgIHVzZUVmZmVjdCgoKSA9PiB7XHJcbiAgICAgICAgY29uc3QgY2FsbGJhY2tJZCA9IGluc3RhbmNlLmFkZEV2ZW50Q2FsbGJhY2soKG1lc3NhZ2UpID0+IHtcclxuICAgICAgICAgICAgdXBkYXRlU3RhdGUoe1xyXG4gICAgICAgICAgICAgICAgcGF5bG9hZDoge1xyXG4gICAgICAgICAgICAgICAgICAgIGluc3RhbmNlLFxyXG4gICAgICAgICAgICAgICAgICAgIGxvZ2dlcixcclxuICAgICAgICAgICAgICAgICAgICBtZXNzYWdlLFxyXG4gICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgIHR5cGU6IE1zYWxQcm92aWRlckFjdGlvblR5cGUuRVZFTlQsXHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIGxvZ2dlci52ZXJib3NlKGBNc2FsUHJvdmlkZXIgLSBSZWdpc3RlcmVkIGV2ZW50IGNhbGxiYWNrIHdpdGggaWQ6ICR7Y2FsbGJhY2tJZH1gKTtcclxuICAgICAgICBpbnN0YW5jZVxyXG4gICAgICAgICAgICAuaW5pdGlhbGl6ZSgpXHJcbiAgICAgICAgICAgIC50aGVuKCgpID0+IHtcclxuICAgICAgICAgICAgaW5zdGFuY2VcclxuICAgICAgICAgICAgICAgIC5oYW5kbGVSZWRpcmVjdFByb21pc2UoKVxyXG4gICAgICAgICAgICAgICAgLmNhdGNoKCgpID0+IHtcclxuICAgICAgICAgICAgICAgIC8vIEVycm9ycyBzaG91bGQgYmUgaGFuZGxlZCBieSBsaXN0ZW5pbmcgdG8gdGhlIExPR0lOX0ZBSUxVUkUgZXZlbnRcclxuICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgICAgIC5maW5hbGx5KCgpID0+IHtcclxuICAgICAgICAgICAgICAgIC8qXHJcbiAgICAgICAgICAgICAgICAgKiBJZiBoYW5kbGVSZWRpcmVjdFByb21pc2UgcmV0dXJucyBhIGNhY2hlZCBwcm9taXNlIHRoZSBuZWNlc3NhcnkgZXZlbnRzIG1heSBub3QgYmUgZmlyZWRcclxuICAgICAgICAgICAgICAgICAqIFRoaXMgaXMgYSBmYWxsYmFjayB0byBwcmV2ZW50IGluUHJvZ3Jlc3MgZnJvbSBnZXR0aW5nIHN0dWNrIGluICdzdGFydHVwJ1xyXG4gICAgICAgICAgICAgICAgICovXHJcbiAgICAgICAgICAgICAgICB1cGRhdGVTdGF0ZSh7XHJcbiAgICAgICAgICAgICAgICAgICAgcGF5bG9hZDoge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpbnN0YW5jZSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgbG9nZ2VyLFxyXG4gICAgICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICAgICAgdHlwZTogTXNhbFByb3ZpZGVyQWN0aW9uVHlwZS5VTkJMT0NLX0lOUFJPR1JFU1MsXHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfSlcclxuICAgICAgICAgICAgLmNhdGNoKCgpID0+IHtcclxuICAgICAgICAgICAgLy8gRXJyb3JzIHNob3VsZCBiZSBoYW5kbGVkIGJ5IGxpc3RlbmluZyB0byB0aGUgTE9HSU5fRkFJTFVSRSBldmVudFxyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgcmV0dXJuICgpID0+IHtcclxuICAgICAgICAgICAgLy8gUmVtb3ZlIGNhbGxiYWNrIHdoZW4gY29tcG9uZW50IHVubW91bnRzIG9yIGFjY291bnRzIGNoYW5nZVxyXG4gICAgICAgICAgICBpZiAoY2FsbGJhY2tJZCkge1xyXG4gICAgICAgICAgICAgICAgbG9nZ2VyLnZlcmJvc2UoYE1zYWxQcm92aWRlciAtIFJlbW92aW5nIGV2ZW50IGNhbGxiYWNrICR7Y2FsbGJhY2tJZH1gKTtcclxuICAgICAgICAgICAgICAgIGluc3RhbmNlLnJlbW92ZUV2ZW50Q2FsbGJhY2soY2FsbGJhY2tJZCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9O1xyXG4gICAgfSwgW2luc3RhbmNlLCBsb2dnZXJdKTtcclxuICAgIGNvbnN0IGNvbnRleHRWYWx1ZSA9IHtcclxuICAgICAgICBpbnN0YW5jZSxcclxuICAgICAgICBpblByb2dyZXNzOiBzdGF0ZS5pblByb2dyZXNzLFxyXG4gICAgICAgIGFjY291bnRzOiBzdGF0ZS5hY2NvdW50cyxcclxuICAgICAgICBsb2dnZXIsXHJcbiAgICB9O1xyXG4gICAgcmV0dXJuIChSZWFjdF9fZGVmYXVsdC5jcmVhdGVFbGVtZW50KE1zYWxDb250ZXh0LlByb3ZpZGVyLCB7IHZhbHVlOiBjb250ZXh0VmFsdWUgfSwgY2hpbGRyZW4pKTtcclxufVxuXG5leHBvcnQgeyBNc2FsUHJvdmlkZXIgfTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPU1zYWxQcm92aWRlci5qcy5tYXBcbiIsIi8qISBAYXp1cmUvbXNhbC1yZWFjdCB2Mi4yLjAgMjAyNC0xMS0wNSAqL1xuJ3VzZSBzdHJpY3QnO1xuaW1wb3J0IHsgdXNlQ29udGV4dCB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IE1zYWxDb250ZXh0IH0gZnJvbSAnLi4vTXNhbENvbnRleHQuanMnO1xuXG4vKlxyXG4gKiBDb3B5cmlnaHQgKGMpIE1pY3Jvc29mdCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cclxuICogTGljZW5zZWQgdW5kZXIgdGhlIE1JVCBMaWNlbnNlLlxyXG4gKi9cclxuLyoqXHJcbiAqIFJldHVybnMgTXNhbCBDb250ZXh0IHZhbHVlc1xyXG4gKi9cclxuY29uc3QgdXNlTXNhbCA9ICgpID0+IHVzZUNvbnRleHQoTXNhbENvbnRleHQpO1xuXG5leHBvcnQgeyB1c2VNc2FsIH07XG4vLyMgc291cmNlTWFwcGluZ1VSTD11c2VNc2FsLmpzLm1hcFxuIiwiLyohIEBhenVyZS9tc2FsLXJlYWN0IHYyLjIuMCAyMDI0LTExLTA1ICovXG4ndXNlIHN0cmljdCc7XG5pbXBvcnQgeyB1c2VNZW1vIH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsgdXNlTXNhbCB9IGZyb20gJy4vdXNlTXNhbC5qcyc7XG5pbXBvcnQgeyBJbnRlcmFjdGlvblN0YXR1cyB9IGZyb20gJ0BhenVyZS9tc2FsLWJyb3dzZXInO1xuaW1wb3J0IHsgZ2V0QWNjb3VudEJ5SWRlbnRpZmllcnMgfSBmcm9tICcuLi91dGlscy91dGlsaXRpZXMuanMnO1xuXG4vKlxyXG4gKiBDb3B5cmlnaHQgKGMpIE1pY3Jvc29mdCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cclxuICogTGljZW5zZWQgdW5kZXIgdGhlIE1JVCBMaWNlbnNlLlxyXG4gKi9cclxuZnVuY3Rpb24gaXNBdXRoZW50aWNhdGVkKGFsbEFjY291bnRzLCBtYXRjaEFjY291bnQpIHtcclxuICAgIGlmIChtYXRjaEFjY291bnQgJiZcclxuICAgICAgICAobWF0Y2hBY2NvdW50LnVzZXJuYW1lIHx8XHJcbiAgICAgICAgICAgIG1hdGNoQWNjb3VudC5ob21lQWNjb3VudElkIHx8XHJcbiAgICAgICAgICAgIG1hdGNoQWNjb3VudC5sb2NhbEFjY291bnRJZCkpIHtcclxuICAgICAgICByZXR1cm4gISFnZXRBY2NvdW50QnlJZGVudGlmaWVycyhhbGxBY2NvdW50cywgbWF0Y2hBY2NvdW50KTtcclxuICAgIH1cclxuICAgIHJldHVybiBhbGxBY2NvdW50cy5sZW5ndGggPiAwO1xyXG59XHJcbi8qKlxyXG4gKiBSZXR1cm5zIHdoZXRoZXIgb3Igbm90IGEgdXNlciBpcyBjdXJyZW50bHkgc2lnbmVkLWluLiBPcHRpb25hbGx5IHByb3ZpZGUgMSBvciBtb3JlIGFjY291bnRJZGVudGlmaWVycyB0byBkZXRlcm1pbmUgaWYgYSBzcGVjaWZpYyB1c2VyIGlzIHNpZ25lZC1pblxyXG4gKiBAcGFyYW0gbWF0Y2hBY2NvdW50XHJcbiAqL1xyXG5mdW5jdGlvbiB1c2VJc0F1dGhlbnRpY2F0ZWQobWF0Y2hBY2NvdW50KSB7XHJcbiAgICBjb25zdCB7IGFjY291bnRzOiBhbGxBY2NvdW50cywgaW5Qcm9ncmVzcyB9ID0gdXNlTXNhbCgpO1xyXG4gICAgY29uc3QgaXNVc2VyQXV0aGVudGljYXRlZCA9IHVzZU1lbW8oKCkgPT4ge1xyXG4gICAgICAgIGlmIChpblByb2dyZXNzID09PSBJbnRlcmFjdGlvblN0YXR1cy5TdGFydHVwKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIGlzQXV0aGVudGljYXRlZChhbGxBY2NvdW50cywgbWF0Y2hBY2NvdW50KTtcclxuICAgIH0sIFthbGxBY2NvdW50cywgaW5Qcm9ncmVzcywgbWF0Y2hBY2NvdW50XSk7XHJcbiAgICByZXR1cm4gaXNVc2VyQXV0aGVudGljYXRlZDtcclxufVxuXG5leHBvcnQgeyB1c2VJc0F1dGhlbnRpY2F0ZWQgfTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXVzZUlzQXV0aGVudGljYXRlZC5qcy5tYXBcbiIsIi8qISBAYXp1cmUvbXNhbC1yZWFjdCB2Mi4yLjAgMjAyNC0xMS0wNSAqL1xuJ3VzZSBzdHJpY3QnO1xuaW1wb3J0IFJlYWN0X19kZWZhdWx0LCB7IHVzZU1lbW8gfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBnZXRDaGlsZHJlbk9yRnVuY3Rpb24gfSBmcm9tICcuLi91dGlscy91dGlsaXRpZXMuanMnO1xuaW1wb3J0IHsgdXNlTXNhbCB9IGZyb20gJy4uL2hvb2tzL3VzZU1zYWwuanMnO1xuaW1wb3J0IHsgdXNlSXNBdXRoZW50aWNhdGVkIH0gZnJvbSAnLi4vaG9va3MvdXNlSXNBdXRoZW50aWNhdGVkLmpzJztcbmltcG9ydCB7IEludGVyYWN0aW9uU3RhdHVzIH0gZnJvbSAnQGF6dXJlL21zYWwtYnJvd3Nlcic7XG5cbi8qXHJcbiAqIENvcHlyaWdodCAoYykgTWljcm9zb2Z0IENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLlxyXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgTUlUIExpY2Vuc2UuXHJcbiAqL1xyXG4vKipcclxuICogUmVuZGVycyBjaGlsZCBjb21wb25lbnRzIGlmIHVzZXIgaXMgYXV0aGVudGljYXRlZFxyXG4gKiBAcGFyYW0gcHJvcHNcclxuICovXHJcbmZ1bmN0aW9uIEF1dGhlbnRpY2F0ZWRUZW1wbGF0ZSh7IHVzZXJuYW1lLCBob21lQWNjb3VudElkLCBsb2NhbEFjY291bnRJZCwgY2hpbGRyZW4sIH0pIHtcclxuICAgIGNvbnN0IGNvbnRleHQgPSB1c2VNc2FsKCk7XHJcbiAgICBjb25zdCBhY2NvdW50SWRlbnRpZmllciA9IHVzZU1lbW8oKCkgPT4ge1xyXG4gICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgIHVzZXJuYW1lLFxyXG4gICAgICAgICAgICBob21lQWNjb3VudElkLFxyXG4gICAgICAgICAgICBsb2NhbEFjY291bnRJZCxcclxuICAgICAgICB9O1xyXG4gICAgfSwgW3VzZXJuYW1lLCBob21lQWNjb3VudElkLCBsb2NhbEFjY291bnRJZF0pO1xyXG4gICAgY29uc3QgaXNBdXRoZW50aWNhdGVkID0gdXNlSXNBdXRoZW50aWNhdGVkKGFjY291bnRJZGVudGlmaWVyKTtcclxuICAgIGlmIChpc0F1dGhlbnRpY2F0ZWQgJiYgY29udGV4dC5pblByb2dyZXNzICE9PSBJbnRlcmFjdGlvblN0YXR1cy5TdGFydHVwKSB7XHJcbiAgICAgICAgcmV0dXJuIChSZWFjdF9fZGVmYXVsdC5jcmVhdGVFbGVtZW50KFJlYWN0X19kZWZhdWx0LkZyYWdtZW50LCBudWxsLCBnZXRDaGlsZHJlbk9yRnVuY3Rpb24oY2hpbGRyZW4sIGNvbnRleHQpKSk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gbnVsbDtcclxufVxuXG5leHBvcnQgeyBBdXRoZW50aWNhdGVkVGVtcGxhdGUgfTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPUF1dGhlbnRpY2F0ZWRUZW1wbGF0ZS5qcy5tYXBcbiIsIi8qISBAYXp1cmUvbXNhbC1yZWFjdCB2Mi4yLjAgMjAyNC0xMS0wNSAqL1xuJ3VzZSBzdHJpY3QnO1xuaW1wb3J0IFJlYWN0X19kZWZhdWx0LCB7IHVzZU1lbW8gfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyB1c2VNc2FsIH0gZnJvbSAnLi4vaG9va3MvdXNlTXNhbC5qcyc7XG5pbXBvcnQgeyB1c2VJc0F1dGhlbnRpY2F0ZWQgfSBmcm9tICcuLi9ob29rcy91c2VJc0F1dGhlbnRpY2F0ZWQuanMnO1xuaW1wb3J0IHsgZ2V0Q2hpbGRyZW5PckZ1bmN0aW9uIH0gZnJvbSAnLi4vdXRpbHMvdXRpbGl0aWVzLmpzJztcbmltcG9ydCB7IEludGVyYWN0aW9uU3RhdHVzIH0gZnJvbSAnQGF6dXJlL21zYWwtYnJvd3Nlcic7XG5cbi8qXHJcbiAqIENvcHlyaWdodCAoYykgTWljcm9zb2Z0IENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLlxyXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgTUlUIExpY2Vuc2UuXHJcbiAqL1xyXG4vKipcclxuICogUmVuZGVycyBjaGlsZCBjb21wb25lbnRzIGlmIHVzZXIgaXMgdW5hdXRoZW50aWNhdGVkXHJcbiAqIEBwYXJhbSBwcm9wc1xyXG4gKi9cclxuZnVuY3Rpb24gVW5hdXRoZW50aWNhdGVkVGVtcGxhdGUoeyB1c2VybmFtZSwgaG9tZUFjY291bnRJZCwgbG9jYWxBY2NvdW50SWQsIGNoaWxkcmVuLCB9KSB7XHJcbiAgICBjb25zdCBjb250ZXh0ID0gdXNlTXNhbCgpO1xyXG4gICAgY29uc3QgYWNjb3VudElkZW50aWZpZXIgPSB1c2VNZW1vKCgpID0+IHtcclxuICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICB1c2VybmFtZSxcclxuICAgICAgICAgICAgaG9tZUFjY291bnRJZCxcclxuICAgICAgICAgICAgbG9jYWxBY2NvdW50SWQsXHJcbiAgICAgICAgfTtcclxuICAgIH0sIFt1c2VybmFtZSwgaG9tZUFjY291bnRJZCwgbG9jYWxBY2NvdW50SWRdKTtcclxuICAgIGNvbnN0IGlzQXV0aGVudGljYXRlZCA9IHVzZUlzQXV0aGVudGljYXRlZChhY2NvdW50SWRlbnRpZmllcik7XHJcbiAgICBpZiAoIWlzQXV0aGVudGljYXRlZCAmJlxyXG4gICAgICAgIGNvbnRleHQuaW5Qcm9ncmVzcyAhPT0gSW50ZXJhY3Rpb25TdGF0dXMuU3RhcnR1cCAmJlxyXG4gICAgICAgIGNvbnRleHQuaW5Qcm9ncmVzcyAhPT0gSW50ZXJhY3Rpb25TdGF0dXMuSGFuZGxlUmVkaXJlY3QpIHtcclxuICAgICAgICByZXR1cm4gKFJlYWN0X19kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoUmVhY3RfX2RlZmF1bHQuRnJhZ21lbnQsIG51bGwsIGdldENoaWxkcmVuT3JGdW5jdGlvbihjaGlsZHJlbiwgY29udGV4dCkpKTtcclxuICAgIH1cclxuICAgIHJldHVybiBudWxsO1xyXG59XG5cbmV4cG9ydCB7IFVuYXV0aGVudGljYXRlZFRlbXBsYXRlIH07XG4vLyMgc291cmNlTWFwcGluZ1VSTD1VbmF1dGhlbnRpY2F0ZWRUZW1wbGF0ZS5qcy5tYXBcbiIsIi8qISBAYXp1cmUvbXNhbC1yZWFjdCB2Mi4yLjAgMjAyNC0xMS0wNSAqL1xuJ3VzZSBzdHJpY3QnO1xuaW1wb3J0IHsgdXNlU3RhdGUsIHVzZUVmZmVjdCB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IEFjY291bnRFbnRpdHkgfSBmcm9tICdAYXp1cmUvbXNhbC1icm93c2VyJztcbmltcG9ydCB7IHVzZU1zYWwgfSBmcm9tICcuL3VzZU1zYWwuanMnO1xuaW1wb3J0IHsgZ2V0QWNjb3VudEJ5SWRlbnRpZmllcnMgfSBmcm9tICcuLi91dGlscy91dGlsaXRpZXMuanMnO1xuXG4vKlxyXG4gKiBDb3B5cmlnaHQgKGMpIE1pY3Jvc29mdCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cclxuICogTGljZW5zZWQgdW5kZXIgdGhlIE1JVCBMaWNlbnNlLlxyXG4gKi9cclxuZnVuY3Rpb24gZ2V0QWNjb3VudChpbnN0YW5jZSwgYWNjb3VudElkZW50aWZpZXJzKSB7XHJcbiAgICBpZiAoIWFjY291bnRJZGVudGlmaWVycyB8fFxyXG4gICAgICAgICghYWNjb3VudElkZW50aWZpZXJzLmhvbWVBY2NvdW50SWQgJiZcclxuICAgICAgICAgICAgIWFjY291bnRJZGVudGlmaWVycy5sb2NhbEFjY291bnRJZCAmJlxyXG4gICAgICAgICAgICAhYWNjb3VudElkZW50aWZpZXJzLnVzZXJuYW1lKSkge1xyXG4gICAgICAgIC8vIElmIG5vIGFjY291bnQgaWRlbnRpZmllcnMgYXJlIHByb3ZpZGVkLCByZXR1cm4gYWN0aXZlIGFjY291bnRcclxuICAgICAgICByZXR1cm4gaW5zdGFuY2UuZ2V0QWN0aXZlQWNjb3VudCgpO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIGdldEFjY291bnRCeUlkZW50aWZpZXJzKGluc3RhbmNlLmdldEFsbEFjY291bnRzKCksIGFjY291bnRJZGVudGlmaWVycyk7XHJcbn1cclxuLyoqXHJcbiAqIEdpdmVuIDEgb3IgbW9yZSBhY2NvdW50SWRlbnRpZmllcnMsIHJldHVybnMgdGhlIEFjY291bnQgb2JqZWN0IGlmIHRoZSB1c2VyIGlzIHNpZ25lZC1pblxyXG4gKiBAcGFyYW0gYWNjb3VudElkZW50aWZpZXJzXHJcbiAqL1xyXG5mdW5jdGlvbiB1c2VBY2NvdW50KGFjY291bnRJZGVudGlmaWVycykge1xyXG4gICAgY29uc3QgeyBpbnN0YW5jZSwgaW5Qcm9ncmVzcywgbG9nZ2VyIH0gPSB1c2VNc2FsKCk7XHJcbiAgICBjb25zdCBbYWNjb3VudCwgc2V0QWNjb3VudF0gPSB1c2VTdGF0ZSgoKSA9PiBnZXRBY2NvdW50KGluc3RhbmNlLCBhY2NvdW50SWRlbnRpZmllcnMpKTtcclxuICAgIHVzZUVmZmVjdCgoKSA9PiB7XHJcbiAgICAgICAgc2V0QWNjb3VudCgoY3VycmVudEFjY291bnQpID0+IHtcclxuICAgICAgICAgICAgY29uc3QgbmV4dEFjY291bnQgPSBnZXRBY2NvdW50KGluc3RhbmNlLCBhY2NvdW50SWRlbnRpZmllcnMpO1xyXG4gICAgICAgICAgICBpZiAoIUFjY291bnRFbnRpdHkuYWNjb3VudEluZm9Jc0VxdWFsKGN1cnJlbnRBY2NvdW50LCBuZXh0QWNjb3VudCwgdHJ1ZSkpIHtcclxuICAgICAgICAgICAgICAgIGxvZ2dlci5pbmZvKFwidXNlQWNjb3VudCAtIFVwZGF0aW5nIGFjY291bnRcIik7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gbmV4dEFjY291bnQ7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmV0dXJuIGN1cnJlbnRBY2NvdW50O1xyXG4gICAgICAgIH0pO1xyXG4gICAgfSwgW2luUHJvZ3Jlc3MsIGFjY291bnRJZGVudGlmaWVycywgaW5zdGFuY2UsIGxvZ2dlcl0pO1xyXG4gICAgcmV0dXJuIGFjY291bnQ7XHJcbn1cblxuZXhwb3J0IHsgdXNlQWNjb3VudCB9O1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9dXNlQWNjb3VudC5qcy5tYXBcbiIsIi8qISBAYXp1cmUvbXNhbC1yZWFjdCB2Mi4yLjAgMjAyNC0xMS0wNSAqL1xuJ3VzZSBzdHJpY3QnO1xuaW1wb3J0IHsgQXV0aEVycm9yIH0gZnJvbSAnQGF6dXJlL21zYWwtYnJvd3Nlcic7XG5cbi8qXHJcbiAqIENvcHlyaWdodCAoYykgTWljcm9zb2Z0IENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLlxyXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgTUlUIExpY2Vuc2UuXHJcbiAqL1xyXG5jb25zdCBSZWFjdEF1dGhFcnJvck1lc3NhZ2UgPSB7XHJcbiAgICBpbnZhbGlkSW50ZXJhY3Rpb25UeXBlOiB7XHJcbiAgICAgICAgY29kZTogXCJpbnZhbGlkX2ludGVyYWN0aW9uX3R5cGVcIixcclxuICAgICAgICBkZXNjOiBcIlRoZSBwcm92aWRlZCBpbnRlcmFjdGlvbiB0eXBlIGlzIGludmFsaWQuXCIsXHJcbiAgICB9LFxyXG4gICAgdW5hYmxlVG9GYWxsYmFja1RvSW50ZXJhY3Rpb246IHtcclxuICAgICAgICBjb2RlOiBcInVuYWJsZV90b19mYWxsYmFja190b19pbnRlcmFjdGlvblwiLFxyXG4gICAgICAgIGRlc2M6IFwiSW50ZXJhY3Rpb24gaXMgcmVxdWlyZWQgYnV0IGFub3RoZXIgaW50ZXJhY3Rpb24gaXMgYWxyZWFkeSBpbiBwcm9ncmVzcy4gUGxlYXNlIHRyeSBhZ2FpbiB3aGVuIHRoZSBjdXJyZW50IGludGVyYWN0aW9uIGlzIGNvbXBsZXRlLlwiLFxyXG4gICAgfSxcclxufTtcclxuY2xhc3MgUmVhY3RBdXRoRXJyb3IgZXh0ZW5kcyBBdXRoRXJyb3Ige1xyXG4gICAgY29uc3RydWN0b3IoZXJyb3JDb2RlLCBlcnJvck1lc3NhZ2UpIHtcclxuICAgICAgICBzdXBlcihlcnJvckNvZGUsIGVycm9yTWVzc2FnZSk7XHJcbiAgICAgICAgT2JqZWN0LnNldFByb3RvdHlwZU9mKHRoaXMsIFJlYWN0QXV0aEVycm9yLnByb3RvdHlwZSk7XHJcbiAgICAgICAgdGhpcy5uYW1lID0gXCJSZWFjdEF1dGhFcnJvclwiO1xyXG4gICAgfVxyXG4gICAgc3RhdGljIGNyZWF0ZUludmFsaWRJbnRlcmFjdGlvblR5cGVFcnJvcigpIHtcclxuICAgICAgICByZXR1cm4gbmV3IFJlYWN0QXV0aEVycm9yKFJlYWN0QXV0aEVycm9yTWVzc2FnZS5pbnZhbGlkSW50ZXJhY3Rpb25UeXBlLmNvZGUsIFJlYWN0QXV0aEVycm9yTWVzc2FnZS5pbnZhbGlkSW50ZXJhY3Rpb25UeXBlLmRlc2MpO1xyXG4gICAgfVxyXG4gICAgc3RhdGljIGNyZWF0ZVVuYWJsZVRvRmFsbGJhY2tUb0ludGVyYWN0aW9uRXJyb3IoKSB7XHJcbiAgICAgICAgcmV0dXJuIG5ldyBSZWFjdEF1dGhFcnJvcihSZWFjdEF1dGhFcnJvck1lc3NhZ2UudW5hYmxlVG9GYWxsYmFja1RvSW50ZXJhY3Rpb24uY29kZSwgUmVhY3RBdXRoRXJyb3JNZXNzYWdlLnVuYWJsZVRvRmFsbGJhY2tUb0ludGVyYWN0aW9uLmRlc2MpO1xyXG4gICAgfVxyXG59XG5cbmV4cG9ydCB7IFJlYWN0QXV0aEVycm9yLCBSZWFjdEF1dGhFcnJvck1lc3NhZ2UgfTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPVJlYWN0QXV0aEVycm9yLmpzLm1hcFxuIiwiLyohIEBhenVyZS9tc2FsLXJlYWN0IHYyLjIuMCAyMDI0LTExLTA1ICovXG4ndXNlIHN0cmljdCc7XG5pbXBvcnQgeyB1c2VTdGF0ZSwgdXNlUmVmLCB1c2VFZmZlY3QsIHVzZUNhbGxiYWNrIH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsgSW50ZXJhY3Rpb25TdGF0dXMsIEludGVyYWN0aW9uVHlwZSwgRXZlbnRUeXBlLCBPSURDX0RFRkFVTFRfU0NPUEVTLCBJbnRlcmFjdGlvblJlcXVpcmVkQXV0aEVycm9yIH0gZnJvbSAnQGF6dXJlL21zYWwtYnJvd3Nlcic7XG5pbXBvcnQgeyB1c2VJc0F1dGhlbnRpY2F0ZWQgfSBmcm9tICcuL3VzZUlzQXV0aGVudGljYXRlZC5qcyc7XG5pbXBvcnQgeyB1c2VNc2FsIH0gZnJvbSAnLi91c2VNc2FsLmpzJztcbmltcG9ydCB7IHVzZUFjY291bnQgfSBmcm9tICcuL3VzZUFjY291bnQuanMnO1xuaW1wb3J0IHsgUmVhY3RBdXRoRXJyb3IgfSBmcm9tICcuLi9lcnJvci9SZWFjdEF1dGhFcnJvci5qcyc7XG5cbi8qXHJcbiAqIENvcHlyaWdodCAoYykgTWljcm9zb2Z0IENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLlxyXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgTUlUIExpY2Vuc2UuXHJcbiAqL1xyXG4vKipcclxuICogSWYgYSB1c2VyIGlzIG5vdCBjdXJyZW50bHkgc2lnbmVkIGluIHRoaXMgaG9vayBpbnZva2VzIGEgbG9naW4uIEZhaWxlZCBsb2dpbnMgY2FuIGJlIHJldHJpZWQgdXNpbmcgdGhlIGxvZ2luIGNhbGxiYWNrIHJldHVybmVkLlxyXG4gKiBJZiBhIHVzZXIgaXMgY3VycmVudGx5IHNpZ25lZCBpbiB0aGlzIGhvb2sgYXR0ZW1wdHMgdG8gYWNxdWlyZSBhIHRva2VuLiBTdWJzZXF1ZW50IHRva2VuIHJlcXVlc3RzIGNhbiB1c2UgdGhlIGFjcXVpcmVUb2tlbiBjYWxsYmFjayByZXR1cm5lZC5cclxuICogT3B0aW9uYWxseSBwcm92aWRlIGEgcmVxdWVzdCBvYmplY3QgdG8gYmUgdXNlZCBpbiB0aGUgbG9naW4vYWNxdWlyZVRva2VuIGNhbGwuXHJcbiAqIE9wdGlvbmFsbHkgcHJvdmlkZSBhIHNwZWNpZmljIHVzZXIgdGhhdCBzaG91bGQgYmUgbG9nZ2VkIGluLlxyXG4gKiBAcGFyYW0gaW50ZXJhY3Rpb25UeXBlXHJcbiAqIEBwYXJhbSBhdXRoZW50aWNhdGlvblJlcXVlc3RcclxuICogQHBhcmFtIGFjY291bnRJZGVudGlmaWVyc1xyXG4gKi9cclxuZnVuY3Rpb24gdXNlTXNhbEF1dGhlbnRpY2F0aW9uKGludGVyYWN0aW9uVHlwZSwgYXV0aGVudGljYXRpb25SZXF1ZXN0LCBhY2NvdW50SWRlbnRpZmllcnMpIHtcclxuICAgIGNvbnN0IHsgaW5zdGFuY2UsIGluUHJvZ3Jlc3MsIGxvZ2dlciB9ID0gdXNlTXNhbCgpO1xyXG4gICAgY29uc3QgaXNBdXRoZW50aWNhdGVkID0gdXNlSXNBdXRoZW50aWNhdGVkKGFjY291bnRJZGVudGlmaWVycyk7XHJcbiAgICBjb25zdCBhY2NvdW50ID0gdXNlQWNjb3VudChhY2NvdW50SWRlbnRpZmllcnMpO1xyXG4gICAgY29uc3QgW1tyZXN1bHQsIGVycm9yXSwgc2V0UmVzcG9uc2VdID0gdXNlU3RhdGUoW251bGwsIG51bGxdKTtcclxuICAgIC8vIFVzZWQgdG8gcHJldmVudCBzdGF0ZSB1cGRhdGVzIGFmdGVyIHVubW91bnRcclxuICAgIGNvbnN0IG1vdW50ZWQgPSB1c2VSZWYodHJ1ZSk7XHJcbiAgICB1c2VFZmZlY3QoKCkgPT4ge1xyXG4gICAgICAgIHJldHVybiAoKSA9PiB7XHJcbiAgICAgICAgICAgIG1vdW50ZWQuY3VycmVudCA9IGZhbHNlO1xyXG4gICAgICAgIH07XHJcbiAgICB9LCBbXSk7XHJcbiAgICAvLyBCb29sZWFuIHVzZWQgdG8gY2hlY2sgaWYgaW50ZXJhY3Rpb24gaXMgaW4gcHJvZ3Jlc3MgaW4gYWNxdWlyZVRva2VuU2lsZW50IGZhbGxiYWNrLiBVc2UgUmVmIGluc3RlYWQgb2Ygc3RhdGUgdG8gcHJldmVudCBhY3F1aXJlVG9rZW4gZnVuY3Rpb24gZnJvbSBiZWluZyByZWdlbmVyYXRlZCBvbiBlYWNoIGNoYW5nZSB0byBpbnRlcmFjdGlvbkluUHJvZ3Jlc3MgdmFsdWVcclxuICAgIGNvbnN0IGludGVyYWN0aW9uSW5Qcm9ncmVzcyA9IHVzZVJlZihpblByb2dyZXNzICE9PSBJbnRlcmFjdGlvblN0YXR1cy5Ob25lKTtcclxuICAgIHVzZUVmZmVjdCgoKSA9PiB7XHJcbiAgICAgICAgaW50ZXJhY3Rpb25JblByb2dyZXNzLmN1cnJlbnQgPSBpblByb2dyZXNzICE9PSBJbnRlcmFjdGlvblN0YXR1cy5Ob25lO1xyXG4gICAgfSwgW2luUHJvZ3Jlc3NdKTtcclxuICAgIC8vIEZsYWcgdXNlZCB0byBjb250cm9sIHdoZW4gdGhlIGhvb2sgY2FsbHMgbG9naW4vYWNxdWlyZVRva2VuXHJcbiAgICBjb25zdCBzaG91bGRBY3F1aXJlVG9rZW4gPSB1c2VSZWYodHJ1ZSk7XHJcbiAgICB1c2VFZmZlY3QoKCkgPT4ge1xyXG4gICAgICAgIGlmICghIWVycm9yKSB7XHJcbiAgICAgICAgICAgIC8vIEVycm9ycyBzaG91bGQgYmUgaGFuZGxlZCBieSBjb25zdW1pbmcgY29tcG9uZW50XHJcbiAgICAgICAgICAgIHNob3VsZEFjcXVpcmVUb2tlbi5jdXJyZW50ID0gZmFsc2U7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKCEhcmVzdWx0KSB7XHJcbiAgICAgICAgICAgIC8vIFRva2VuIGhhcyBhbHJlYWR5IGJlZW4gYWNxdWlyZWQsIGNvbnN1bWluZyBjb21wb25lbnQvYXBwbGljYXRpb24gaXMgcmVzcG9uc2libGUgZm9yIHJlbmV3aW5nXHJcbiAgICAgICAgICAgIHNob3VsZEFjcXVpcmVUb2tlbi5jdXJyZW50ID0gZmFsc2U7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICB9LCBbZXJyb3IsIHJlc3VsdF0pO1xyXG4gICAgY29uc3QgbG9naW4gPSB1c2VDYWxsYmFjayhhc3luYyAoY2FsbGJhY2tJbnRlcmFjdGlvblR5cGUsIGNhbGxiYWNrUmVxdWVzdCkgPT4ge1xyXG4gICAgICAgIGNvbnN0IGxvZ2luVHlwZSA9IGNhbGxiYWNrSW50ZXJhY3Rpb25UeXBlIHx8IGludGVyYWN0aW9uVHlwZTtcclxuICAgICAgICBjb25zdCBsb2dpblJlcXVlc3QgPSBjYWxsYmFja1JlcXVlc3QgfHwgYXV0aGVudGljYXRpb25SZXF1ZXN0O1xyXG4gICAgICAgIHN3aXRjaCAobG9naW5UeXBlKSB7XHJcbiAgICAgICAgICAgIGNhc2UgSW50ZXJhY3Rpb25UeXBlLlBvcHVwOlxyXG4gICAgICAgICAgICAgICAgbG9nZ2VyLnZlcmJvc2UoXCJ1c2VNc2FsQXV0aGVudGljYXRpb24gLSBDYWxsaW5nIGxvZ2luUG9wdXBcIik7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gaW5zdGFuY2UubG9naW5Qb3B1cChsb2dpblJlcXVlc3QpO1xyXG4gICAgICAgICAgICBjYXNlIEludGVyYWN0aW9uVHlwZS5SZWRpcmVjdDpcclxuICAgICAgICAgICAgICAgIC8vIFRoaXMgcHJvbWlzZSBpcyBub3QgZXhwZWN0ZWQgdG8gcmVzb2x2ZSBkdWUgdG8gZnVsbCBmcmFtZSByZWRpcmVjdFxyXG4gICAgICAgICAgICAgICAgbG9nZ2VyLnZlcmJvc2UoXCJ1c2VNc2FsQXV0aGVudGljYXRpb24gLSBDYWxsaW5nIGxvZ2luUmVkaXJlY3RcIik7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gaW5zdGFuY2VcclxuICAgICAgICAgICAgICAgICAgICAubG9naW5SZWRpcmVjdChsb2dpblJlcXVlc3QpXHJcbiAgICAgICAgICAgICAgICAgICAgLnRoZW4obnVsbCk7XHJcbiAgICAgICAgICAgIGNhc2UgSW50ZXJhY3Rpb25UeXBlLlNpbGVudDpcclxuICAgICAgICAgICAgICAgIGxvZ2dlci52ZXJib3NlKFwidXNlTXNhbEF1dGhlbnRpY2F0aW9uIC0gQ2FsbGluZyBzc29TaWxlbnRcIik7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gaW5zdGFuY2Uuc3NvU2lsZW50KGxvZ2luUmVxdWVzdCk7XHJcbiAgICAgICAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgICAgICAgICB0aHJvdyBSZWFjdEF1dGhFcnJvci5jcmVhdGVJbnZhbGlkSW50ZXJhY3Rpb25UeXBlRXJyb3IoKTtcclxuICAgICAgICB9XHJcbiAgICB9LCBbaW5zdGFuY2UsIGludGVyYWN0aW9uVHlwZSwgYXV0aGVudGljYXRpb25SZXF1ZXN0LCBsb2dnZXJdKTtcclxuICAgIGNvbnN0IGFjcXVpcmVUb2tlbiA9IHVzZUNhbGxiYWNrKGFzeW5jIChjYWxsYmFja0ludGVyYWN0aW9uVHlwZSwgY2FsbGJhY2tSZXF1ZXN0KSA9PiB7XHJcbiAgICAgICAgY29uc3QgZmFsbGJhY2tJbnRlcmFjdGlvblR5cGUgPSBjYWxsYmFja0ludGVyYWN0aW9uVHlwZSB8fCBpbnRlcmFjdGlvblR5cGU7XHJcbiAgICAgICAgbGV0IHRva2VuUmVxdWVzdDtcclxuICAgICAgICBpZiAoY2FsbGJhY2tSZXF1ZXN0KSB7XHJcbiAgICAgICAgICAgIGxvZ2dlci50cmFjZShcInVzZU1zYWxBdXRoZW50aWNhdGlvbiAtIGFjcXVpcmVUb2tlbiAtIFVzaW5nIHJlcXVlc3QgcHJvdmlkZWQgaW4gdGhlIGNhbGxiYWNrXCIpO1xyXG4gICAgICAgICAgICB0b2tlblJlcXVlc3QgPSB7XHJcbiAgICAgICAgICAgICAgICAuLi5jYWxsYmFja1JlcXVlc3QsXHJcbiAgICAgICAgICAgIH07XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2UgaWYgKGF1dGhlbnRpY2F0aW9uUmVxdWVzdCkge1xyXG4gICAgICAgICAgICBsb2dnZXIudHJhY2UoXCJ1c2VNc2FsQXV0aGVudGljYXRpb24gLSBhY3F1aXJlVG9rZW4gLSBVc2luZyByZXF1ZXN0IHByb3ZpZGVkIGluIHRoZSBob29rXCIpO1xyXG4gICAgICAgICAgICB0b2tlblJlcXVlc3QgPSB7XHJcbiAgICAgICAgICAgICAgICAuLi5hdXRoZW50aWNhdGlvblJlcXVlc3QsXHJcbiAgICAgICAgICAgICAgICBzY29wZXM6IGF1dGhlbnRpY2F0aW9uUmVxdWVzdC5zY29wZXMgfHwgT0lEQ19ERUZBVUxUX1NDT1BFUyxcclxuICAgICAgICAgICAgfTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIGxvZ2dlci50cmFjZShcInVzZU1zYWxBdXRoZW50aWNhdGlvbiAtIGFjcXVpcmVUb2tlbiAtIE5vIHJlcXVlc3Qgb2JqZWN0IHByb3ZpZGVkLCB1c2luZyBkZWZhdWx0IHJlcXVlc3QuXCIpO1xyXG4gICAgICAgICAgICB0b2tlblJlcXVlc3QgPSB7XHJcbiAgICAgICAgICAgICAgICBzY29wZXM6IE9JRENfREVGQVVMVF9TQ09QRVMsXHJcbiAgICAgICAgICAgIH07XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICghdG9rZW5SZXF1ZXN0LmFjY291bnQgJiYgYWNjb3VudCkge1xyXG4gICAgICAgICAgICBsb2dnZXIudHJhY2UoXCJ1c2VNc2FsQXV0aGVudGljYXRpb24gLSBhY3F1aXJlVG9rZW4gLSBBdHRhY2hpbmcgYWNjb3VudCB0byByZXF1ZXN0XCIpO1xyXG4gICAgICAgICAgICB0b2tlblJlcXVlc3QuYWNjb3VudCA9IGFjY291bnQ7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNvbnN0IGdldFRva2VuID0gYXN5bmMgKCkgPT4ge1xyXG4gICAgICAgICAgICBsb2dnZXIudmVyYm9zZShcInVzZU1zYWxBdXRoZW50aWNhdGlvbiAtIENhbGxpbmcgYWNxdWlyZVRva2VuU2lsZW50XCIpO1xyXG4gICAgICAgICAgICByZXR1cm4gaW5zdGFuY2VcclxuICAgICAgICAgICAgICAgIC5hY3F1aXJlVG9rZW5TaWxlbnQodG9rZW5SZXF1ZXN0KVxyXG4gICAgICAgICAgICAgICAgLmNhdGNoKGFzeW5jIChlKSA9PiB7XHJcbiAgICAgICAgICAgICAgICBpZiAoZSBpbnN0YW5jZW9mIEludGVyYWN0aW9uUmVxdWlyZWRBdXRoRXJyb3IpIHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoIWludGVyYWN0aW9uSW5Qcm9ncmVzcy5jdXJyZW50KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGxvZ2dlci5lcnJvcihcInVzZU1zYWxBdXRoZW50aWNhdGlvbiAtIEludGVyYWN0aW9uIHJlcXVpcmVkLCBmYWxsaW5nIGJhY2sgdG8gaW50ZXJhY3Rpb25cIik7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBsb2dpbihmYWxsYmFja0ludGVyYWN0aW9uVHlwZSwgdG9rZW5SZXF1ZXN0KTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGxvZ2dlci5lcnJvcihcInVzZU1zYWxBdXRoZW50aWNhdGlvbiAtIEludGVyYWN0aW9uIHJlcXVpcmVkIGJ1dCBpcyBhbHJlYWR5IGluIHByb2dyZXNzLiBQbGVhc2UgdHJ5IGFnYWluLCBpZiBuZWVkZWQsIGFmdGVyIGludGVyYWN0aW9uIGNvbXBsZXRlcy5cIik7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IFJlYWN0QXV0aEVycm9yLmNyZWF0ZVVuYWJsZVRvRmFsbGJhY2tUb0ludGVyYWN0aW9uRXJyb3IoKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB0aHJvdyBlO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9O1xyXG4gICAgICAgIHJldHVybiBnZXRUb2tlbigpXHJcbiAgICAgICAgICAgIC50aGVuKChyZXNwb25zZSkgPT4ge1xyXG4gICAgICAgICAgICBpZiAobW91bnRlZC5jdXJyZW50KSB7XHJcbiAgICAgICAgICAgICAgICBzZXRSZXNwb25zZShbcmVzcG9uc2UsIG51bGxdKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICByZXR1cm4gcmVzcG9uc2U7XHJcbiAgICAgICAgfSlcclxuICAgICAgICAgICAgLmNhdGNoKChlKSA9PiB7XHJcbiAgICAgICAgICAgIGlmIChtb3VudGVkLmN1cnJlbnQpIHtcclxuICAgICAgICAgICAgICAgIHNldFJlc3BvbnNlKFtudWxsLCBlXSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgdGhyb3cgZTtcclxuICAgICAgICB9KTtcclxuICAgIH0sIFtcclxuICAgICAgICBpbnN0YW5jZSxcclxuICAgICAgICBpbnRlcmFjdGlvblR5cGUsXHJcbiAgICAgICAgYXV0aGVudGljYXRpb25SZXF1ZXN0LFxyXG4gICAgICAgIGxvZ2dlcixcclxuICAgICAgICBhY2NvdW50LFxyXG4gICAgICAgIGxvZ2luLFxyXG4gICAgXSk7XHJcbiAgICB1c2VFZmZlY3QoKCkgPT4ge1xyXG4gICAgICAgIGNvbnN0IGNhbGxiYWNrSWQgPSBpbnN0YW5jZS5hZGRFdmVudENhbGxiYWNrKChtZXNzYWdlKSA9PiB7XHJcbiAgICAgICAgICAgIHN3aXRjaCAobWVzc2FnZS5ldmVudFR5cGUpIHtcclxuICAgICAgICAgICAgICAgIGNhc2UgRXZlbnRUeXBlLkxPR0lOX1NVQ0NFU1M6XHJcbiAgICAgICAgICAgICAgICBjYXNlIEV2ZW50VHlwZS5TU09fU0lMRU5UX1NVQ0NFU1M6XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKG1lc3NhZ2UucGF5bG9hZCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBzZXRSZXNwb25zZShbXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlLnBheWxvYWQsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBudWxsLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBdKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICBjYXNlIEV2ZW50VHlwZS5MT0dJTl9GQUlMVVJFOlxyXG4gICAgICAgICAgICAgICAgY2FzZSBFdmVudFR5cGUuU1NPX1NJTEVOVF9GQUlMVVJFOlxyXG4gICAgICAgICAgICAgICAgICAgIGlmIChtZXNzYWdlLmVycm9yKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHNldFJlc3BvbnNlKFtudWxsLCBtZXNzYWdlLmVycm9yXSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgbG9nZ2VyLnZlcmJvc2UoYHVzZU1zYWxBdXRoZW50aWNhdGlvbiAtIFJlZ2lzdGVyZWQgZXZlbnQgY2FsbGJhY2sgd2l0aCBpZDogJHtjYWxsYmFja0lkfWApO1xyXG4gICAgICAgIHJldHVybiAoKSA9PiB7XHJcbiAgICAgICAgICAgIGlmIChjYWxsYmFja0lkKSB7XHJcbiAgICAgICAgICAgICAgICBsb2dnZXIudmVyYm9zZShgdXNlTXNhbEF1dGhlbnRpY2F0aW9uIC0gUmVtb3ZpbmcgZXZlbnQgY2FsbGJhY2sgJHtjYWxsYmFja0lkfWApO1xyXG4gICAgICAgICAgICAgICAgaW5zdGFuY2UucmVtb3ZlRXZlbnRDYWxsYmFjayhjYWxsYmFja0lkKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH07XHJcbiAgICB9LCBbaW5zdGFuY2UsIGxvZ2dlcl0pO1xyXG4gICAgdXNlRWZmZWN0KCgpID0+IHtcclxuICAgICAgICBpZiAoc2hvdWxkQWNxdWlyZVRva2VuLmN1cnJlbnQgJiZcclxuICAgICAgICAgICAgaW5Qcm9ncmVzcyA9PT0gSW50ZXJhY3Rpb25TdGF0dXMuTm9uZSkge1xyXG4gICAgICAgICAgICBzaG91bGRBY3F1aXJlVG9rZW4uY3VycmVudCA9IGZhbHNlO1xyXG4gICAgICAgICAgICBpZiAoIWlzQXV0aGVudGljYXRlZCkge1xyXG4gICAgICAgICAgICAgICAgbG9nZ2VyLmluZm8oXCJ1c2VNc2FsQXV0aGVudGljYXRpb24gLSBObyB1c2VyIGlzIGF1dGhlbnRpY2F0ZWQsIGF0dGVtcHRpbmcgdG8gbG9naW5cIik7XHJcbiAgICAgICAgICAgICAgICBsb2dpbigpLmNhdGNoKCgpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAvLyBFcnJvcnMgYXJlIHNhdmVkIGluIHN0YXRlIGFib3ZlXHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSBpZiAoYWNjb3VudCkge1xyXG4gICAgICAgICAgICAgICAgbG9nZ2VyLmluZm8oXCJ1c2VNc2FsQXV0aGVudGljYXRpb24gLSBVc2VyIGlzIGF1dGhlbnRpY2F0ZWQsIGF0dGVtcHRpbmcgdG8gYWNxdWlyZSB0b2tlblwiKTtcclxuICAgICAgICAgICAgICAgIGFjcXVpcmVUb2tlbigpLmNhdGNoKCgpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAvLyBFcnJvcnMgYXJlIHNhdmVkIGluIHN0YXRlIGFib3ZlXHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9LCBbaXNBdXRoZW50aWNhdGVkLCBhY2NvdW50LCBpblByb2dyZXNzLCBsb2dpbiwgYWNxdWlyZVRva2VuLCBsb2dnZXJdKTtcclxuICAgIHJldHVybiB7XHJcbiAgICAgICAgbG9naW4sXHJcbiAgICAgICAgYWNxdWlyZVRva2VuLFxyXG4gICAgICAgIHJlc3VsdCxcclxuICAgICAgICBlcnJvcixcclxuICAgIH07XHJcbn1cblxuZXhwb3J0IHsgdXNlTXNhbEF1dGhlbnRpY2F0aW9uIH07XG4vLyMgc291cmNlTWFwcGluZ1VSTD11c2VNc2FsQXV0aGVudGljYXRpb24uanMubWFwXG4iLCIvKiEgQGF6dXJlL21zYWwtcmVhY3QgdjIuMi4wIDIwMjQtMTEtMDUgKi9cbid1c2Ugc3RyaWN0JztcbmltcG9ydCBSZWFjdF9fZGVmYXVsdCwgeyB1c2VNZW1vIH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsgZ2V0Q2hpbGRyZW5PckZ1bmN0aW9uIH0gZnJvbSAnLi4vdXRpbHMvdXRpbGl0aWVzLmpzJztcbmltcG9ydCB7IHVzZU1zYWwgfSBmcm9tICcuLi9ob29rcy91c2VNc2FsLmpzJztcbmltcG9ydCB7IHVzZU1zYWxBdXRoZW50aWNhdGlvbiB9IGZyb20gJy4uL2hvb2tzL3VzZU1zYWxBdXRoZW50aWNhdGlvbi5qcyc7XG5pbXBvcnQgeyB1c2VJc0F1dGhlbnRpY2F0ZWQgfSBmcm9tICcuLi9ob29rcy91c2VJc0F1dGhlbnRpY2F0ZWQuanMnO1xuaW1wb3J0IHsgSW50ZXJhY3Rpb25TdGF0dXMgfSBmcm9tICdAYXp1cmUvbXNhbC1icm93c2VyJztcblxuLypcclxuICogQ29weXJpZ2h0IChjKSBNaWNyb3NvZnQgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuXHJcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgTGljZW5zZS5cclxuICovXHJcbi8qKlxyXG4gKiBBdHRlbXB0cyB0byBhdXRoZW50aWNhdGUgdXNlciBpZiBub3QgYWxyZWFkeSBhdXRoZW50aWNhdGVkLCB0aGVuIHJlbmRlcnMgY2hpbGQgY29tcG9uZW50c1xyXG4gKiBAcGFyYW0gcHJvcHNcclxuICovXHJcbmZ1bmN0aW9uIE1zYWxBdXRoZW50aWNhdGlvblRlbXBsYXRlKHsgaW50ZXJhY3Rpb25UeXBlLCB1c2VybmFtZSwgaG9tZUFjY291bnRJZCwgbG9jYWxBY2NvdW50SWQsIGF1dGhlbnRpY2F0aW9uUmVxdWVzdCwgbG9hZGluZ0NvbXBvbmVudDogTG9hZGluZ0NvbXBvbmVudCwgZXJyb3JDb21wb25lbnQ6IEVycm9yQ29tcG9uZW50LCBjaGlsZHJlbiwgfSkge1xyXG4gICAgY29uc3QgYWNjb3VudElkZW50aWZpZXIgPSB1c2VNZW1vKCgpID0+IHtcclxuICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICB1c2VybmFtZSxcclxuICAgICAgICAgICAgaG9tZUFjY291bnRJZCxcclxuICAgICAgICAgICAgbG9jYWxBY2NvdW50SWQsXHJcbiAgICAgICAgfTtcclxuICAgIH0sIFt1c2VybmFtZSwgaG9tZUFjY291bnRJZCwgbG9jYWxBY2NvdW50SWRdKTtcclxuICAgIGNvbnN0IGNvbnRleHQgPSB1c2VNc2FsKCk7XHJcbiAgICBjb25zdCBtc2FsQXV0aFJlc3VsdCA9IHVzZU1zYWxBdXRoZW50aWNhdGlvbihpbnRlcmFjdGlvblR5cGUsIGF1dGhlbnRpY2F0aW9uUmVxdWVzdCwgYWNjb3VudElkZW50aWZpZXIpO1xyXG4gICAgY29uc3QgaXNBdXRoZW50aWNhdGVkID0gdXNlSXNBdXRoZW50aWNhdGVkKGFjY291bnRJZGVudGlmaWVyKTtcclxuICAgIGlmIChtc2FsQXV0aFJlc3VsdC5lcnJvciAmJiBjb250ZXh0LmluUHJvZ3Jlc3MgPT09IEludGVyYWN0aW9uU3RhdHVzLk5vbmUpIHtcclxuICAgICAgICBpZiAoISFFcnJvckNvbXBvbmVudCkge1xyXG4gICAgICAgICAgICByZXR1cm4gUmVhY3RfX2RlZmF1bHQuY3JlYXRlRWxlbWVudChFcnJvckNvbXBvbmVudCwgeyAuLi5tc2FsQXV0aFJlc3VsdCB9KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhyb3cgbXNhbEF1dGhSZXN1bHQuZXJyb3I7XHJcbiAgICB9XHJcbiAgICBpZiAoaXNBdXRoZW50aWNhdGVkKSB7XHJcbiAgICAgICAgcmV0dXJuIChSZWFjdF9fZGVmYXVsdC5jcmVhdGVFbGVtZW50KFJlYWN0X19kZWZhdWx0LkZyYWdtZW50LCBudWxsLCBnZXRDaGlsZHJlbk9yRnVuY3Rpb24oY2hpbGRyZW4sIG1zYWxBdXRoUmVzdWx0KSkpO1xyXG4gICAgfVxyXG4gICAgaWYgKCEhTG9hZGluZ0NvbXBvbmVudCAmJiBjb250ZXh0LmluUHJvZ3Jlc3MgIT09IEludGVyYWN0aW9uU3RhdHVzLk5vbmUpIHtcclxuICAgICAgICByZXR1cm4gUmVhY3RfX2RlZmF1bHQuY3JlYXRlRWxlbWVudChMb2FkaW5nQ29tcG9uZW50LCB7IC4uLmNvbnRleHQgfSk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gbnVsbDtcclxufVxuXG5leHBvcnQgeyBNc2FsQXV0aGVudGljYXRpb25UZW1wbGF0ZSB9O1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9TXNhbEF1dGhlbnRpY2F0aW9uVGVtcGxhdGUuanMubWFwXG4iLCIvKiEgQGF6dXJlL21zYWwtcmVhY3QgdjIuMi4wIDIwMjQtMTEtMDUgKi9cbid1c2Ugc3RyaWN0JztcbmltcG9ydCBSZWFjdF9fZGVmYXVsdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyB1c2VNc2FsIH0gZnJvbSAnLi4vaG9va3MvdXNlTXNhbC5qcyc7XG5cbi8qXHJcbiAqIENvcHlyaWdodCAoYykgTWljcm9zb2Z0IENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLlxyXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgTUlUIExpY2Vuc2UuXHJcbiAqL1xyXG4vKipcclxuICogSGlnaGVyIG9yZGVyIGNvbXBvbmVudCB3cmFwcyBwcm92aWRlZCBjb21wb25lbnQgd2l0aCBtc2FsIGJ5IGluamVjdGluZyBtc2FsIGNvbnRleHQgdmFsdWVzIGludG8gdGhlIGNvbXBvbmVudCdzIHByb3BzXHJcbiAqIEBwYXJhbSBDb21wb25lbnRcclxuICovXHJcbmNvbnN0IHdpdGhNc2FsID0gKENvbXBvbmVudCkgPT4ge1xyXG4gICAgY29uc3QgQ29tcG9uZW50V2l0aE1zYWwgPSAocHJvcHMpID0+IHtcclxuICAgICAgICBjb25zdCBtc2FsID0gdXNlTXNhbCgpO1xyXG4gICAgICAgIHJldHVybiBSZWFjdF9fZGVmYXVsdC5jcmVhdGVFbGVtZW50KENvbXBvbmVudCwgeyAuLi5wcm9wcywgbXNhbENvbnRleHQ6IG1zYWwgfSk7XHJcbiAgICB9O1xyXG4gICAgY29uc3QgY29tcG9uZW50TmFtZSA9IENvbXBvbmVudC5kaXNwbGF5TmFtZSB8fCBDb21wb25lbnQubmFtZSB8fCBcIkNvbXBvbmVudFwiO1xyXG4gICAgQ29tcG9uZW50V2l0aE1zYWwuZGlzcGxheU5hbWUgPSBgd2l0aE1zYWwoJHtjb21wb25lbnROYW1lfSlgO1xyXG4gICAgcmV0dXJuIENvbXBvbmVudFdpdGhNc2FsO1xyXG59O1xuXG5leHBvcnQgeyB3aXRoTXNhbCB9O1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9d2l0aE1zYWwuanMubWFwXG4iLCIvKiEgQGF6dXJlL21zYWwtcmVhY3QgdjIuMi4wIDIwMjQtMTEtMDUgKi9cbid1c2Ugc3RyaWN0JztcbmV4cG9ydCB7IE1zYWxDb25zdW1lciwgTXNhbENvbnRleHQgfSBmcm9tICcuL01zYWxDb250ZXh0LmpzJztcbmV4cG9ydCB7IE1zYWxQcm92aWRlciB9IGZyb20gJy4vTXNhbFByb3ZpZGVyLmpzJztcbmV4cG9ydCB7IEF1dGhlbnRpY2F0ZWRUZW1wbGF0ZSB9IGZyb20gJy4vY29tcG9uZW50cy9BdXRoZW50aWNhdGVkVGVtcGxhdGUuanMnO1xuZXhwb3J0IHsgVW5hdXRoZW50aWNhdGVkVGVtcGxhdGUgfSBmcm9tICcuL2NvbXBvbmVudHMvVW5hdXRoZW50aWNhdGVkVGVtcGxhdGUuanMnO1xuZXhwb3J0IHsgTXNhbEF1dGhlbnRpY2F0aW9uVGVtcGxhdGUgfSBmcm9tICcuL2NvbXBvbmVudHMvTXNhbEF1dGhlbnRpY2F0aW9uVGVtcGxhdGUuanMnO1xuZXhwb3J0IHsgd2l0aE1zYWwgfSBmcm9tICcuL2NvbXBvbmVudHMvd2l0aE1zYWwuanMnO1xuZXhwb3J0IHsgdXNlTXNhbCB9IGZyb20gJy4vaG9va3MvdXNlTXNhbC5qcyc7XG5leHBvcnQgeyB1c2VBY2NvdW50IH0gZnJvbSAnLi9ob29rcy91c2VBY2NvdW50LmpzJztcbmV4cG9ydCB7IHVzZUlzQXV0aGVudGljYXRlZCB9IGZyb20gJy4vaG9va3MvdXNlSXNBdXRoZW50aWNhdGVkLmpzJztcbmV4cG9ydCB7IHVzZU1zYWxBdXRoZW50aWNhdGlvbiB9IGZyb20gJy4vaG9va3MvdXNlTXNhbEF1dGhlbnRpY2F0aW9uLmpzJztcbmV4cG9ydCB7IHZlcnNpb24gfSBmcm9tICcuL3BhY2thZ2VNZXRhZGF0YS5qcyc7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1pbmRleC5qcy5tYXBcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///36810\n')},36941:(I,g,t)=>{"use strict";I.exports=t.p+"72feda9cae2ac729ba3a.png"},37007:module=>{"use strict";eval("// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n\n\nvar R = typeof Reflect === 'object' ? Reflect : null\nvar ReflectApply = R && typeof R.apply === 'function'\n ? R.apply\n : function ReflectApply(target, receiver, args) {\n return Function.prototype.apply.call(target, receiver, args);\n }\n\nvar ReflectOwnKeys\nif (R && typeof R.ownKeys === 'function') {\n ReflectOwnKeys = R.ownKeys\n} else if (Object.getOwnPropertySymbols) {\n ReflectOwnKeys = function ReflectOwnKeys(target) {\n return Object.getOwnPropertyNames(target)\n .concat(Object.getOwnPropertySymbols(target));\n };\n} else {\n ReflectOwnKeys = function ReflectOwnKeys(target) {\n return Object.getOwnPropertyNames(target);\n };\n}\n\nfunction ProcessEmitWarning(warning) {\n if (console && console.warn) console.warn(warning);\n}\n\nvar NumberIsNaN = Number.isNaN || function NumberIsNaN(value) {\n return value !== value;\n}\n\nfunction EventEmitter() {\n EventEmitter.init.call(this);\n}\nmodule.exports = EventEmitter;\nmodule.exports.once = once;\n\n// Backwards-compat with node 0.10.x\nEventEmitter.EventEmitter = EventEmitter;\n\nEventEmitter.prototype._events = undefined;\nEventEmitter.prototype._eventsCount = 0;\nEventEmitter.prototype._maxListeners = undefined;\n\n// By default EventEmitters will print a warning if more than 10 listeners are\n// added to it. This is a useful default which helps finding memory leaks.\nvar defaultMaxListeners = 10;\n\nfunction checkListener(listener) {\n if (typeof listener !== 'function') {\n throw new TypeError('The \"listener\" argument must be of type Function. Received type ' + typeof listener);\n }\n}\n\nObject.defineProperty(EventEmitter, 'defaultMaxListeners', {\n enumerable: true,\n get: function() {\n return defaultMaxListeners;\n },\n set: function(arg) {\n if (typeof arg !== 'number' || arg < 0 || NumberIsNaN(arg)) {\n throw new RangeError('The value of \"defaultMaxListeners\" is out of range. It must be a non-negative number. Received ' + arg + '.');\n }\n defaultMaxListeners = arg;\n }\n});\n\nEventEmitter.init = function() {\n\n if (this._events === undefined ||\n this._events === Object.getPrototypeOf(this)._events) {\n this._events = Object.create(null);\n this._eventsCount = 0;\n }\n\n this._maxListeners = this._maxListeners || undefined;\n};\n\n// Obviously not all Emitters should be limited to 10. This function allows\n// that to be increased. Set to zero for unlimited.\nEventEmitter.prototype.setMaxListeners = function setMaxListeners(n) {\n if (typeof n !== 'number' || n < 0 || NumberIsNaN(n)) {\n throw new RangeError('The value of \"n\" is out of range. It must be a non-negative number. Received ' + n + '.');\n }\n this._maxListeners = n;\n return this;\n};\n\nfunction _getMaxListeners(that) {\n if (that._maxListeners === undefined)\n return EventEmitter.defaultMaxListeners;\n return that._maxListeners;\n}\n\nEventEmitter.prototype.getMaxListeners = function getMaxListeners() {\n return _getMaxListeners(this);\n};\n\nEventEmitter.prototype.emit = function emit(type) {\n var args = [];\n for (var i = 1; i < arguments.length; i++) args.push(arguments[i]);\n var doError = (type === 'error');\n\n var events = this._events;\n if (events !== undefined)\n doError = (doError && events.error === undefined);\n else if (!doError)\n return false;\n\n // If there is no 'error' event listener then throw.\n if (doError) {\n var er;\n if (args.length > 0)\n er = args[0];\n if (er instanceof Error) {\n // Note: The comments on the `throw` lines are intentional, they show\n // up in Node's output if this results in an unhandled exception.\n throw er; // Unhandled 'error' event\n }\n // At least give some kind of context to the user\n var err = new Error('Unhandled error.' + (er ? ' (' + er.message + ')' : ''));\n err.context = er;\n throw err; // Unhandled 'error' event\n }\n\n var handler = events[type];\n\n if (handler === undefined)\n return false;\n\n if (typeof handler === 'function') {\n ReflectApply(handler, this, args);\n } else {\n var len = handler.length;\n var listeners = arrayClone(handler, len);\n for (var i = 0; i < len; ++i)\n ReflectApply(listeners[i], this, args);\n }\n\n return true;\n};\n\nfunction _addListener(target, type, listener, prepend) {\n var m;\n var events;\n var existing;\n\n checkListener(listener);\n\n events = target._events;\n if (events === undefined) {\n events = target._events = Object.create(null);\n target._eventsCount = 0;\n } else {\n // To avoid recursion in the case that type === \"newListener\"! Before\n // adding it to the listeners, first emit \"newListener\".\n if (events.newListener !== undefined) {\n target.emit('newListener', type,\n listener.listener ? listener.listener : listener);\n\n // Re-assign `events` because a newListener handler could have caused the\n // this._events to be assigned to a new object\n events = target._events;\n }\n existing = events[type];\n }\n\n if (existing === undefined) {\n // Optimize the case of one listener. Don't need the extra array object.\n existing = events[type] = listener;\n ++target._eventsCount;\n } else {\n if (typeof existing === 'function') {\n // Adding the second element, need to change to array.\n existing = events[type] =\n prepend ? [listener, existing] : [existing, listener];\n // If we've already got an array, just append.\n } else if (prepend) {\n existing.unshift(listener);\n } else {\n existing.push(listener);\n }\n\n // Check for listener leak\n m = _getMaxListeners(target);\n if (m > 0 && existing.length > m && !existing.warned) {\n existing.warned = true;\n // No error code for this since it is a Warning\n // eslint-disable-next-line no-restricted-syntax\n var w = new Error('Possible EventEmitter memory leak detected. ' +\n existing.length + ' ' + String(type) + ' listeners ' +\n 'added. Use emitter.setMaxListeners() to ' +\n 'increase limit');\n w.name = 'MaxListenersExceededWarning';\n w.emitter = target;\n w.type = type;\n w.count = existing.length;\n ProcessEmitWarning(w);\n }\n }\n\n return target;\n}\n\nEventEmitter.prototype.addListener = function addListener(type, listener) {\n return _addListener(this, type, listener, false);\n};\n\nEventEmitter.prototype.on = EventEmitter.prototype.addListener;\n\nEventEmitter.prototype.prependListener =\n function prependListener(type, listener) {\n return _addListener(this, type, listener, true);\n };\n\nfunction onceWrapper() {\n if (!this.fired) {\n this.target.removeListener(this.type, this.wrapFn);\n this.fired = true;\n if (arguments.length === 0)\n return this.listener.call(this.target);\n return this.listener.apply(this.target, arguments);\n }\n}\n\nfunction _onceWrap(target, type, listener) {\n var state = { fired: false, wrapFn: undefined, target: target, type: type, listener: listener };\n var wrapped = onceWrapper.bind(state);\n wrapped.listener = listener;\n state.wrapFn = wrapped;\n return wrapped;\n}\n\nEventEmitter.prototype.once = function once(type, listener) {\n checkListener(listener);\n this.on(type, _onceWrap(this, type, listener));\n return this;\n};\n\nEventEmitter.prototype.prependOnceListener =\n function prependOnceListener(type, listener) {\n checkListener(listener);\n this.prependListener(type, _onceWrap(this, type, listener));\n return this;\n };\n\n// Emits a 'removeListener' event if and only if the listener was removed.\nEventEmitter.prototype.removeListener =\n function removeListener(type, listener) {\n var list, events, position, i, originalListener;\n\n checkListener(listener);\n\n events = this._events;\n if (events === undefined)\n return this;\n\n list = events[type];\n if (list === undefined)\n return this;\n\n if (list === listener || list.listener === listener) {\n if (--this._eventsCount === 0)\n this._events = Object.create(null);\n else {\n delete events[type];\n if (events.removeListener)\n this.emit('removeListener', type, list.listener || listener);\n }\n } else if (typeof list !== 'function') {\n position = -1;\n\n for (i = list.length - 1; i >= 0; i--) {\n if (list[i] === listener || list[i].listener === listener) {\n originalListener = list[i].listener;\n position = i;\n break;\n }\n }\n\n if (position < 0)\n return this;\n\n if (position === 0)\n list.shift();\n else {\n spliceOne(list, position);\n }\n\n if (list.length === 1)\n events[type] = list[0];\n\n if (events.removeListener !== undefined)\n this.emit('removeListener', type, originalListener || listener);\n }\n\n return this;\n };\n\nEventEmitter.prototype.off = EventEmitter.prototype.removeListener;\n\nEventEmitter.prototype.removeAllListeners =\n function removeAllListeners(type) {\n var listeners, events, i;\n\n events = this._events;\n if (events === undefined)\n return this;\n\n // not listening for removeListener, no need to emit\n if (events.removeListener === undefined) {\n if (arguments.length === 0) {\n this._events = Object.create(null);\n this._eventsCount = 0;\n } else if (events[type] !== undefined) {\n if (--this._eventsCount === 0)\n this._events = Object.create(null);\n else\n delete events[type];\n }\n return this;\n }\n\n // emit removeListener for all listeners on all events\n if (arguments.length === 0) {\n var keys = Object.keys(events);\n var key;\n for (i = 0; i < keys.length; ++i) {\n key = keys[i];\n if (key === 'removeListener') continue;\n this.removeAllListeners(key);\n }\n this.removeAllListeners('removeListener');\n this._events = Object.create(null);\n this._eventsCount = 0;\n return this;\n }\n\n listeners = events[type];\n\n if (typeof listeners === 'function') {\n this.removeListener(type, listeners);\n } else if (listeners !== undefined) {\n // LIFO order\n for (i = listeners.length - 1; i >= 0; i--) {\n this.removeListener(type, listeners[i]);\n }\n }\n\n return this;\n };\n\nfunction _listeners(target, type, unwrap) {\n var events = target._events;\n\n if (events === undefined)\n return [];\n\n var evlistener = events[type];\n if (evlistener === undefined)\n return [];\n\n if (typeof evlistener === 'function')\n return unwrap ? [evlistener.listener || evlistener] : [evlistener];\n\n return unwrap ?\n unwrapListeners(evlistener) : arrayClone(evlistener, evlistener.length);\n}\n\nEventEmitter.prototype.listeners = function listeners(type) {\n return _listeners(this, type, true);\n};\n\nEventEmitter.prototype.rawListeners = function rawListeners(type) {\n return _listeners(this, type, false);\n};\n\nEventEmitter.listenerCount = function(emitter, type) {\n if (typeof emitter.listenerCount === 'function') {\n return emitter.listenerCount(type);\n } else {\n return listenerCount.call(emitter, type);\n }\n};\n\nEventEmitter.prototype.listenerCount = listenerCount;\nfunction listenerCount(type) {\n var events = this._events;\n\n if (events !== undefined) {\n var evlistener = events[type];\n\n if (typeof evlistener === 'function') {\n return 1;\n } else if (evlistener !== undefined) {\n return evlistener.length;\n }\n }\n\n return 0;\n}\n\nEventEmitter.prototype.eventNames = function eventNames() {\n return this._eventsCount > 0 ? ReflectOwnKeys(this._events) : [];\n};\n\nfunction arrayClone(arr, n) {\n var copy = new Array(n);\n for (var i = 0; i < n; ++i)\n copy[i] = arr[i];\n return copy;\n}\n\nfunction spliceOne(list, index) {\n for (; index + 1 < list.length; index++)\n list[index] = list[index + 1];\n list.pop();\n}\n\nfunction unwrapListeners(arr) {\n var ret = new Array(arr.length);\n for (var i = 0; i < ret.length; ++i) {\n ret[i] = arr[i].listener || arr[i];\n }\n return ret;\n}\n\nfunction once(emitter, name) {\n return new Promise(function (resolve, reject) {\n function errorListener(err) {\n emitter.removeListener(name, resolver);\n reject(err);\n }\n\n function resolver() {\n if (typeof emitter.removeListener === 'function') {\n emitter.removeListener('error', errorListener);\n }\n resolve([].slice.call(arguments));\n };\n\n eventTargetAgnosticAddListener(emitter, name, resolver, { once: true });\n if (name !== 'error') {\n addErrorHandlerIfEventEmitter(emitter, errorListener, { once: true });\n }\n });\n}\n\nfunction addErrorHandlerIfEventEmitter(emitter, handler, flags) {\n if (typeof emitter.on === 'function') {\n eventTargetAgnosticAddListener(emitter, 'error', handler, flags);\n }\n}\n\nfunction eventTargetAgnosticAddListener(emitter, name, listener, flags) {\n if (typeof emitter.on === 'function') {\n if (flags.once) {\n emitter.once(name, listener);\n } else {\n emitter.on(name, listener);\n }\n } else if (typeof emitter.addEventListener === 'function') {\n // EventTarget does not have `error` event semantics like Node\n // EventEmitters, we do not listen for `error` events here.\n emitter.addEventListener(name, function wrapListener(arg) {\n // IE does not have builtin `{ once: true }` support so we\n // have to do it manually.\n if (flags.once) {\n emitter.removeEventListener(name, wrapListener);\n }\n listener(arg);\n });\n } else {\n throw new TypeError('The \"emitter\" argument must be of type EventEmitter. Received type ' + typeof emitter);\n }\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMzcwMDcuanMiLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL2l0Zy1uZXh0Z2VuLWZyb250ZW5kLy4vbm9kZV9tb2R1bGVzL2V2ZW50cy9ldmVudHMuanM/ZmFhMSJdLCJzb3VyY2VzQ29udGVudCI6WyIvLyBDb3B5cmlnaHQgSm95ZW50LCBJbmMuIGFuZCBvdGhlciBOb2RlIGNvbnRyaWJ1dG9ycy5cbi8vXG4vLyBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYVxuLy8gY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZVxuLy8gXCJTb2Z0d2FyZVwiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nXG4vLyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsXG4vLyBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0XG4vLyBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGVcbi8vIGZvbGxvd2luZyBjb25kaXRpb25zOlxuLy9cbi8vIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkXG4vLyBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS5cbi8vXG4vLyBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTXG4vLyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GXG4vLyBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOXG4vLyBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSxcbi8vIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUlxuLy8gT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRVxuLy8gVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS5cblxuJ3VzZSBzdHJpY3QnO1xuXG52YXIgUiA9IHR5cGVvZiBSZWZsZWN0ID09PSAnb2JqZWN0JyA/IFJlZmxlY3QgOiBudWxsXG52YXIgUmVmbGVjdEFwcGx5ID0gUiAmJiB0eXBlb2YgUi5hcHBseSA9PT0gJ2Z1bmN0aW9uJ1xuICA/IFIuYXBwbHlcbiAgOiBmdW5jdGlvbiBSZWZsZWN0QXBwbHkodGFyZ2V0LCByZWNlaXZlciwgYXJncykge1xuICAgIHJldHVybiBGdW5jdGlvbi5wcm90b3R5cGUuYXBwbHkuY2FsbCh0YXJnZXQsIHJlY2VpdmVyLCBhcmdzKTtcbiAgfVxuXG52YXIgUmVmbGVjdE93bktleXNcbmlmIChSICYmIHR5cGVvZiBSLm93bktleXMgPT09ICdmdW5jdGlvbicpIHtcbiAgUmVmbGVjdE93bktleXMgPSBSLm93bktleXNcbn0gZWxzZSBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykge1xuICBSZWZsZWN0T3duS2V5cyA9IGZ1bmN0aW9uIFJlZmxlY3RPd25LZXlzKHRhcmdldCkge1xuICAgIHJldHVybiBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyh0YXJnZXQpXG4gICAgICAuY29uY2F0KE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHModGFyZ2V0KSk7XG4gIH07XG59IGVsc2Uge1xuICBSZWZsZWN0T3duS2V5cyA9IGZ1bmN0aW9uIFJlZmxlY3RPd25LZXlzKHRhcmdldCkge1xuICAgIHJldHVybiBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyh0YXJnZXQpO1xuICB9O1xufVxuXG5mdW5jdGlvbiBQcm9jZXNzRW1pdFdhcm5pbmcod2FybmluZykge1xuICBpZiAoY29uc29sZSAmJiBjb25zb2xlLndhcm4pIGNvbnNvbGUud2Fybih3YXJuaW5nKTtcbn1cblxudmFyIE51bWJlcklzTmFOID0gTnVtYmVyLmlzTmFOIHx8IGZ1bmN0aW9uIE51bWJlcklzTmFOKHZhbHVlKSB7XG4gIHJldHVybiB2YWx1ZSAhPT0gdmFsdWU7XG59XG5cbmZ1bmN0aW9uIEV2ZW50RW1pdHRlcigpIHtcbiAgRXZlbnRFbWl0dGVyLmluaXQuY2FsbCh0aGlzKTtcbn1cbm1vZHVsZS5leHBvcnRzID0gRXZlbnRFbWl0dGVyO1xubW9kdWxlLmV4cG9ydHMub25jZSA9IG9uY2U7XG5cbi8vIEJhY2t3YXJkcy1jb21wYXQgd2l0aCBub2RlIDAuMTAueFxuRXZlbnRFbWl0dGVyLkV2ZW50RW1pdHRlciA9IEV2ZW50RW1pdHRlcjtcblxuRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5fZXZlbnRzID0gdW5kZWZpbmVkO1xuRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5fZXZlbnRzQ291bnQgPSAwO1xuRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5fbWF4TGlzdGVuZXJzID0gdW5kZWZpbmVkO1xuXG4vLyBCeSBkZWZhdWx0IEV2ZW50RW1pdHRlcnMgd2lsbCBwcmludCBhIHdhcm5pbmcgaWYgbW9yZSB0aGFuIDEwIGxpc3RlbmVycyBhcmVcbi8vIGFkZGVkIHRvIGl0LiBUaGlzIGlzIGEgdXNlZnVsIGRlZmF1bHQgd2hpY2ggaGVscHMgZmluZGluZyBtZW1vcnkgbGVha3MuXG52YXIgZGVmYXVsdE1heExpc3RlbmVycyA9IDEwO1xuXG5mdW5jdGlvbiBjaGVja0xpc3RlbmVyKGxpc3RlbmVyKSB7XG4gIGlmICh0eXBlb2YgbGlzdGVuZXIgIT09ICdmdW5jdGlvbicpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdUaGUgXCJsaXN0ZW5lclwiIGFyZ3VtZW50IG11c3QgYmUgb2YgdHlwZSBGdW5jdGlvbi4gUmVjZWl2ZWQgdHlwZSAnICsgdHlwZW9mIGxpc3RlbmVyKTtcbiAgfVxufVxuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoRXZlbnRFbWl0dGVyLCAnZGVmYXVsdE1heExpc3RlbmVycycsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gZGVmYXVsdE1heExpc3RlbmVycztcbiAgfSxcbiAgc2V0OiBmdW5jdGlvbihhcmcpIHtcbiAgICBpZiAodHlwZW9mIGFyZyAhPT0gJ251bWJlcicgfHwgYXJnIDwgMCB8fCBOdW1iZXJJc05hTihhcmcpKSB7XG4gICAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcignVGhlIHZhbHVlIG9mIFwiZGVmYXVsdE1heExpc3RlbmVyc1wiIGlzIG91dCBvZiByYW5nZS4gSXQgbXVzdCBiZSBhIG5vbi1uZWdhdGl2ZSBudW1iZXIuIFJlY2VpdmVkICcgKyBhcmcgKyAnLicpO1xuICAgIH1cbiAgICBkZWZhdWx0TWF4TGlzdGVuZXJzID0gYXJnO1xuICB9XG59KTtcblxuRXZlbnRFbWl0dGVyLmluaXQgPSBmdW5jdGlvbigpIHtcblxuICBpZiAodGhpcy5fZXZlbnRzID09PSB1bmRlZmluZWQgfHxcbiAgICAgIHRoaXMuX2V2ZW50cyA9PT0gT2JqZWN0LmdldFByb3RvdHlwZU9mKHRoaXMpLl9ldmVudHMpIHtcbiAgICB0aGlzLl9ldmVudHMgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuICAgIHRoaXMuX2V2ZW50c0NvdW50ID0gMDtcbiAgfVxuXG4gIHRoaXMuX21heExpc3RlbmVycyA9IHRoaXMuX21heExpc3RlbmVycyB8fCB1bmRlZmluZWQ7XG59O1xuXG4vLyBPYnZpb3VzbHkgbm90IGFsbCBFbWl0dGVycyBzaG91bGQgYmUgbGltaXRlZCB0byAxMC4gVGhpcyBmdW5jdGlvbiBhbGxvd3Ncbi8vIHRoYXQgdG8gYmUgaW5jcmVhc2VkLiBTZXQgdG8gemVybyBmb3IgdW5saW1pdGVkLlxuRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5zZXRNYXhMaXN0ZW5lcnMgPSBmdW5jdGlvbiBzZXRNYXhMaXN0ZW5lcnMobikge1xuICBpZiAodHlwZW9mIG4gIT09ICdudW1iZXInIHx8IG4gPCAwIHx8IE51bWJlcklzTmFOKG4pKSB7XG4gICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ1RoZSB2YWx1ZSBvZiBcIm5cIiBpcyBvdXQgb2YgcmFuZ2UuIEl0IG11c3QgYmUgYSBub24tbmVnYXRpdmUgbnVtYmVyLiBSZWNlaXZlZCAnICsgbiArICcuJyk7XG4gIH1cbiAgdGhpcy5fbWF4TGlzdGVuZXJzID0gbjtcbiAgcmV0dXJuIHRoaXM7XG59O1xuXG5mdW5jdGlvbiBfZ2V0TWF4TGlzdGVuZXJzKHRoYXQpIHtcbiAgaWYgKHRoYXQuX21heExpc3RlbmVycyA9PT0gdW5kZWZpbmVkKVxuICAgIHJldHVybiBFdmVudEVtaXR0ZXIuZGVmYXVsdE1heExpc3RlbmVycztcbiAgcmV0dXJuIHRoYXQuX21heExpc3RlbmVycztcbn1cblxuRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5nZXRNYXhMaXN0ZW5lcnMgPSBmdW5jdGlvbiBnZXRNYXhMaXN0ZW5lcnMoKSB7XG4gIHJldHVybiBfZ2V0TWF4TGlzdGVuZXJzKHRoaXMpO1xufTtcblxuRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5lbWl0ID0gZnVuY3Rpb24gZW1pdCh0eXBlKSB7XG4gIHZhciBhcmdzID0gW107XG4gIGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSBhcmdzLnB1c2goYXJndW1lbnRzW2ldKTtcbiAgdmFyIGRvRXJyb3IgPSAodHlwZSA9PT0gJ2Vycm9yJyk7XG5cbiAgdmFyIGV2ZW50cyA9IHRoaXMuX2V2ZW50cztcbiAgaWYgKGV2ZW50cyAhPT0gdW5kZWZpbmVkKVxuICAgIGRvRXJyb3IgPSAoZG9FcnJvciAmJiBldmVudHMuZXJyb3IgPT09IHVuZGVmaW5lZCk7XG4gIGVsc2UgaWYgKCFkb0Vycm9yKVxuICAgIHJldHVybiBmYWxzZTtcblxuICAvLyBJZiB0aGVyZSBpcyBubyAnZXJyb3InIGV2ZW50IGxpc3RlbmVyIHRoZW4gdGhyb3cuXG4gIGlmIChkb0Vycm9yKSB7XG4gICAgdmFyIGVyO1xuICAgIGlmIChhcmdzLmxlbmd0aCA+IDApXG4gICAgICBlciA9IGFyZ3NbMF07XG4gICAgaWYgKGVyIGluc3RhbmNlb2YgRXJyb3IpIHtcbiAgICAgIC8vIE5vdGU6IFRoZSBjb21tZW50cyBvbiB0aGUgYHRocm93YCBsaW5lcyBhcmUgaW50ZW50aW9uYWwsIHRoZXkgc2hvd1xuICAgICAgLy8gdXAgaW4gTm9kZSdzIG91dHB1dCBpZiB0aGlzIHJlc3VsdHMgaW4gYW4gdW5oYW5kbGVkIGV4Y2VwdGlvbi5cbiAgICAgIHRocm93IGVyOyAvLyBVbmhhbmRsZWQgJ2Vycm9yJyBldmVudFxuICAgIH1cbiAgICAvLyBBdCBsZWFzdCBnaXZlIHNvbWUga2luZCBvZiBjb250ZXh0IHRvIHRoZSB1c2VyXG4gICAgdmFyIGVyciA9IG5ldyBFcnJvcignVW5oYW5kbGVkIGVycm9yLicgKyAoZXIgPyAnICgnICsgZXIubWVzc2FnZSArICcpJyA6ICcnKSk7XG4gICAgZXJyLmNvbnRleHQgPSBlcjtcbiAgICB0aHJvdyBlcnI7IC8vIFVuaGFuZGxlZCAnZXJyb3InIGV2ZW50XG4gIH1cblxuICB2YXIgaGFuZGxlciA9IGV2ZW50c1t0eXBlXTtcblxuICBpZiAoaGFuZGxlciA9PT0gdW5kZWZpbmVkKVxuICAgIHJldHVybiBmYWxzZTtcblxuICBpZiAodHlwZW9mIGhhbmRsZXIgPT09ICdmdW5jdGlvbicpIHtcbiAgICBSZWZsZWN0QXBwbHkoaGFuZGxlciwgdGhpcywgYXJncyk7XG4gIH0gZWxzZSB7XG4gICAgdmFyIGxlbiA9IGhhbmRsZXIubGVuZ3RoO1xuICAgIHZhciBsaXN0ZW5lcnMgPSBhcnJheUNsb25lKGhhbmRsZXIsIGxlbik7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW47ICsraSlcbiAgICAgIFJlZmxlY3RBcHBseShsaXN0ZW5lcnNbaV0sIHRoaXMsIGFyZ3MpO1xuICB9XG5cbiAgcmV0dXJuIHRydWU7XG59O1xuXG5mdW5jdGlvbiBfYWRkTGlzdGVuZXIodGFyZ2V0LCB0eXBlLCBsaXN0ZW5lciwgcHJlcGVuZCkge1xuICB2YXIgbTtcbiAgdmFyIGV2ZW50cztcbiAgdmFyIGV4aXN0aW5nO1xuXG4gIGNoZWNrTGlzdGVuZXIobGlzdGVuZXIpO1xuXG4gIGV2ZW50cyA9IHRhcmdldC5fZXZlbnRzO1xuICBpZiAoZXZlbnRzID09PSB1bmRlZmluZWQpIHtcbiAgICBldmVudHMgPSB0YXJnZXQuX2V2ZW50cyA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG4gICAgdGFyZ2V0Ll9ldmVudHNDb3VudCA9IDA7XG4gIH0gZWxzZSB7XG4gICAgLy8gVG8gYXZvaWQgcmVjdXJzaW9uIGluIHRoZSBjYXNlIHRoYXQgdHlwZSA9PT0gXCJuZXdMaXN0ZW5lclwiISBCZWZvcmVcbiAgICAvLyBhZGRpbmcgaXQgdG8gdGhlIGxpc3RlbmVycywgZmlyc3QgZW1pdCBcIm5ld0xpc3RlbmVyXCIuXG4gICAgaWYgKGV2ZW50cy5uZXdMaXN0ZW5lciAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICB0YXJnZXQuZW1pdCgnbmV3TGlzdGVuZXInLCB0eXBlLFxuICAgICAgICAgICAgICAgICAgbGlzdGVuZXIubGlzdGVuZXIgPyBsaXN0ZW5lci5saXN0ZW5lciA6IGxpc3RlbmVyKTtcblxuICAgICAgLy8gUmUtYXNzaWduIGBldmVudHNgIGJlY2F1c2UgYSBuZXdMaXN0ZW5lciBoYW5kbGVyIGNvdWxkIGhhdmUgY2F1c2VkIHRoZVxuICAgICAgLy8gdGhpcy5fZXZlbnRzIHRvIGJlIGFzc2lnbmVkIHRvIGEgbmV3IG9iamVjdFxuICAgICAgZXZlbnRzID0gdGFyZ2V0Ll9ldmVudHM7XG4gICAgfVxuICAgIGV4aXN0aW5nID0gZXZlbnRzW3R5cGVdO1xuICB9XG5cbiAgaWYgKGV4aXN0aW5nID09PSB1bmRlZmluZWQpIHtcbiAgICAvLyBPcHRpbWl6ZSB0aGUgY2FzZSBvZiBvbmUgbGlzdGVuZXIuIERvbid0IG5lZWQgdGhlIGV4dHJhIGFycmF5IG9iamVjdC5cbiAgICBleGlzdGluZyA9IGV2ZW50c1t0eXBlXSA9IGxpc3RlbmVyO1xuICAgICsrdGFyZ2V0Ll9ldmVudHNDb3VudDtcbiAgfSBlbHNlIHtcbiAgICBpZiAodHlwZW9mIGV4aXN0aW5nID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAvLyBBZGRpbmcgdGhlIHNlY29uZCBlbGVtZW50LCBuZWVkIHRvIGNoYW5nZSB0byBhcnJheS5cbiAgICAgIGV4aXN0aW5nID0gZXZlbnRzW3R5cGVdID1cbiAgICAgICAgcHJlcGVuZCA/IFtsaXN0ZW5lciwgZXhpc3RpbmddIDogW2V4aXN0aW5nLCBsaXN0ZW5lcl07XG4gICAgICAvLyBJZiB3ZSd2ZSBhbHJlYWR5IGdvdCBhbiBhcnJheSwganVzdCBhcHBlbmQuXG4gICAgfSBlbHNlIGlmIChwcmVwZW5kKSB7XG4gICAgICBleGlzdGluZy51bnNoaWZ0KGxpc3RlbmVyKTtcbiAgICB9IGVsc2Uge1xuICAgICAgZXhpc3RpbmcucHVzaChsaXN0ZW5lcik7XG4gICAgfVxuXG4gICAgLy8gQ2hlY2sgZm9yIGxpc3RlbmVyIGxlYWtcbiAgICBtID0gX2dldE1heExpc3RlbmVycyh0YXJnZXQpO1xuICAgIGlmIChtID4gMCAmJiBleGlzdGluZy5sZW5ndGggPiBtICYmICFleGlzdGluZy53YXJuZWQpIHtcbiAgICAgIGV4aXN0aW5nLndhcm5lZCA9IHRydWU7XG4gICAgICAvLyBObyBlcnJvciBjb2RlIGZvciB0aGlzIHNpbmNlIGl0IGlzIGEgV2FybmluZ1xuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXJlc3RyaWN0ZWQtc3ludGF4XG4gICAgICB2YXIgdyA9IG5ldyBFcnJvcignUG9zc2libGUgRXZlbnRFbWl0dGVyIG1lbW9yeSBsZWFrIGRldGVjdGVkLiAnICtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgZXhpc3RpbmcubGVuZ3RoICsgJyAnICsgU3RyaW5nKHR5cGUpICsgJyBsaXN0ZW5lcnMgJyArXG4gICAgICAgICAgICAgICAgICAgICAgICAgICdhZGRlZC4gVXNlIGVtaXR0ZXIuc2V0TWF4TGlzdGVuZXJzKCkgdG8gJyArXG4gICAgICAgICAgICAgICAgICAgICAgICAgICdpbmNyZWFzZSBsaW1pdCcpO1xuICAgICAgdy5uYW1lID0gJ01heExpc3RlbmVyc0V4Y2VlZGVkV2FybmluZyc7XG4gICAgICB3LmVtaXR0ZXIgPSB0YXJnZXQ7XG4gICAgICB3LnR5cGUgPSB0eXBlO1xuICAgICAgdy5jb3VudCA9IGV4aXN0aW5nLmxlbmd0aDtcbiAgICAgIFByb2Nlc3NFbWl0V2FybmluZyh3KTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gdGFyZ2V0O1xufVxuXG5FdmVudEVtaXR0ZXIucHJvdG90eXBlLmFkZExpc3RlbmVyID0gZnVuY3Rpb24gYWRkTGlzdGVuZXIodHlwZSwgbGlzdGVuZXIpIHtcbiAgcmV0dXJuIF9hZGRMaXN0ZW5lcih0aGlzLCB0eXBlLCBsaXN0ZW5lciwgZmFsc2UpO1xufTtcblxuRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5vbiA9IEV2ZW50RW1pdHRlci5wcm90b3R5cGUuYWRkTGlzdGVuZXI7XG5cbkV2ZW50RW1pdHRlci5wcm90b3R5cGUucHJlcGVuZExpc3RlbmVyID1cbiAgICBmdW5jdGlvbiBwcmVwZW5kTGlzdGVuZXIodHlwZSwgbGlzdGVuZXIpIHtcbiAgICAgIHJldHVybiBfYWRkTGlzdGVuZXIodGhpcywgdHlwZSwgbGlzdGVuZXIsIHRydWUpO1xuICAgIH07XG5cbmZ1bmN0aW9uIG9uY2VXcmFwcGVyKCkge1xuICBpZiAoIXRoaXMuZmlyZWQpIHtcbiAgICB0aGlzLnRhcmdldC5yZW1vdmVMaXN0ZW5lcih0aGlzLnR5cGUsIHRoaXMud3JhcEZuKTtcbiAgICB0aGlzLmZpcmVkID0gdHJ1ZTtcbiAgICBpZiAoYXJndW1lbnRzLmxlbmd0aCA9PT0gMClcbiAgICAgIHJldHVybiB0aGlzLmxpc3RlbmVyLmNhbGwodGhpcy50YXJnZXQpO1xuICAgIHJldHVybiB0aGlzLmxpc3RlbmVyLmFwcGx5KHRoaXMudGFyZ2V0LCBhcmd1bWVudHMpO1xuICB9XG59XG5cbmZ1bmN0aW9uIF9vbmNlV3JhcCh0YXJnZXQsIHR5cGUsIGxpc3RlbmVyKSB7XG4gIHZhciBzdGF0ZSA9IHsgZmlyZWQ6IGZhbHNlLCB3cmFwRm46IHVuZGVmaW5lZCwgdGFyZ2V0OiB0YXJnZXQsIHR5cGU6IHR5cGUsIGxpc3RlbmVyOiBsaXN0ZW5lciB9O1xuICB2YXIgd3JhcHBlZCA9IG9uY2VXcmFwcGVyLmJpbmQoc3RhdGUpO1xuICB3cmFwcGVkLmxpc3RlbmVyID0gbGlzdGVuZXI7XG4gIHN0YXRlLndyYXBGbiA9IHdyYXBwZWQ7XG4gIHJldHVybiB3cmFwcGVkO1xufVxuXG5FdmVudEVtaXR0ZXIucHJvdG90eXBlLm9uY2UgPSBmdW5jdGlvbiBvbmNlKHR5cGUsIGxpc3RlbmVyKSB7XG4gIGNoZWNrTGlzdGVuZXIobGlzdGVuZXIpO1xuICB0aGlzLm9uKHR5cGUsIF9vbmNlV3JhcCh0aGlzLCB0eXBlLCBsaXN0ZW5lcikpO1xuICByZXR1cm4gdGhpcztcbn07XG5cbkV2ZW50RW1pdHRlci5wcm90b3R5cGUucHJlcGVuZE9uY2VMaXN0ZW5lciA9XG4gICAgZnVuY3Rpb24gcHJlcGVuZE9uY2VMaXN0ZW5lcih0eXBlLCBsaXN0ZW5lcikge1xuICAgICAgY2hlY2tMaXN0ZW5lcihsaXN0ZW5lcik7XG4gICAgICB0aGlzLnByZXBlbmRMaXN0ZW5lcih0eXBlLCBfb25jZVdyYXAodGhpcywgdHlwZSwgbGlzdGVuZXIpKTtcbiAgICAgIHJldHVybiB0aGlzO1xuICAgIH07XG5cbi8vIEVtaXRzIGEgJ3JlbW92ZUxpc3RlbmVyJyBldmVudCBpZiBhbmQgb25seSBpZiB0aGUgbGlzdGVuZXIgd2FzIHJlbW92ZWQuXG5FdmVudEVtaXR0ZXIucHJvdG90eXBlLnJlbW92ZUxpc3RlbmVyID1cbiAgICBmdW5jdGlvbiByZW1vdmVMaXN0ZW5lcih0eXBlLCBsaXN0ZW5lcikge1xuICAgICAgdmFyIGxpc3QsIGV2ZW50cywgcG9zaXRpb24sIGksIG9yaWdpbmFsTGlzdGVuZXI7XG5cbiAgICAgIGNoZWNrTGlzdGVuZXIobGlzdGVuZXIpO1xuXG4gICAgICBldmVudHMgPSB0aGlzLl9ldmVudHM7XG4gICAgICBpZiAoZXZlbnRzID09PSB1bmRlZmluZWQpXG4gICAgICAgIHJldHVybiB0aGlzO1xuXG4gICAgICBsaXN0ID0gZXZlbnRzW3R5cGVdO1xuICAgICAgaWYgKGxpc3QgPT09IHVuZGVmaW5lZClcbiAgICAgICAgcmV0dXJuIHRoaXM7XG5cbiAgICAgIGlmIChsaXN0ID09PSBsaXN0ZW5lciB8fCBsaXN0Lmxpc3RlbmVyID09PSBsaXN0ZW5lcikge1xuICAgICAgICBpZiAoLS10aGlzLl9ldmVudHNDb3VudCA9PT0gMClcbiAgICAgICAgICB0aGlzLl9ldmVudHMgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuICAgICAgICBlbHNlIHtcbiAgICAgICAgICBkZWxldGUgZXZlbnRzW3R5cGVdO1xuICAgICAgICAgIGlmIChldmVudHMucmVtb3ZlTGlzdGVuZXIpXG4gICAgICAgICAgICB0aGlzLmVtaXQoJ3JlbW92ZUxpc3RlbmVyJywgdHlwZSwgbGlzdC5saXN0ZW5lciB8fCBsaXN0ZW5lcik7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAodHlwZW9mIGxpc3QgIT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgcG9zaXRpb24gPSAtMTtcblxuICAgICAgICBmb3IgKGkgPSBsaXN0Lmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSB7XG4gICAgICAgICAgaWYgKGxpc3RbaV0gPT09IGxpc3RlbmVyIHx8IGxpc3RbaV0ubGlzdGVuZXIgPT09IGxpc3RlbmVyKSB7XG4gICAgICAgICAgICBvcmlnaW5hbExpc3RlbmVyID0gbGlzdFtpXS5saXN0ZW5lcjtcbiAgICAgICAgICAgIHBvc2l0aW9uID0gaTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChwb3NpdGlvbiA8IDApXG4gICAgICAgICAgcmV0dXJuIHRoaXM7XG5cbiAgICAgICAgaWYgKHBvc2l0aW9uID09PSAwKVxuICAgICAgICAgIGxpc3Quc2hpZnQoKTtcbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgc3BsaWNlT25lKGxpc3QsIHBvc2l0aW9uKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChsaXN0Lmxlbmd0aCA9PT0gMSlcbiAgICAgICAgICBldmVudHNbdHlwZV0gPSBsaXN0WzBdO1xuXG4gICAgICAgIGlmIChldmVudHMucmVtb3ZlTGlzdGVuZXIgIT09IHVuZGVmaW5lZClcbiAgICAgICAgICB0aGlzLmVtaXQoJ3JlbW92ZUxpc3RlbmVyJywgdHlwZSwgb3JpZ2luYWxMaXN0ZW5lciB8fCBsaXN0ZW5lcik7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiB0aGlzO1xuICAgIH07XG5cbkV2ZW50RW1pdHRlci5wcm90b3R5cGUub2ZmID0gRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5yZW1vdmVMaXN0ZW5lcjtcblxuRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5yZW1vdmVBbGxMaXN0ZW5lcnMgPVxuICAgIGZ1bmN0aW9uIHJlbW92ZUFsbExpc3RlbmVycyh0eXBlKSB7XG4gICAgICB2YXIgbGlzdGVuZXJzLCBldmVudHMsIGk7XG5cbiAgICAgIGV2ZW50cyA9IHRoaXMuX2V2ZW50cztcbiAgICAgIGlmIChldmVudHMgPT09IHVuZGVmaW5lZClcbiAgICAgICAgcmV0dXJuIHRoaXM7XG5cbiAgICAgIC8vIG5vdCBsaXN0ZW5pbmcgZm9yIHJlbW92ZUxpc3RlbmVyLCBubyBuZWVkIHRvIGVtaXRcbiAgICAgIGlmIChldmVudHMucmVtb3ZlTGlzdGVuZXIgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICBpZiAoYXJndW1lbnRzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgIHRoaXMuX2V2ZW50cyA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG4gICAgICAgICAgdGhpcy5fZXZlbnRzQ291bnQgPSAwO1xuICAgICAgICB9IGVsc2UgaWYgKGV2ZW50c1t0eXBlXSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgaWYgKC0tdGhpcy5fZXZlbnRzQ291bnQgPT09IDApXG4gICAgICAgICAgICB0aGlzLl9ldmVudHMgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgIGRlbGV0ZSBldmVudHNbdHlwZV07XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgICB9XG5cbiAgICAgIC8vIGVtaXQgcmVtb3ZlTGlzdGVuZXIgZm9yIGFsbCBsaXN0ZW5lcnMgb24gYWxsIGV2ZW50c1xuICAgICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgdmFyIGtleXMgPSBPYmplY3Qua2V5cyhldmVudHMpO1xuICAgICAgICB2YXIga2V5O1xuICAgICAgICBmb3IgKGkgPSAwOyBpIDwga2V5cy5sZW5ndGg7ICsraSkge1xuICAgICAgICAgIGtleSA9IGtleXNbaV07XG4gICAgICAgICAgaWYgKGtleSA9PT0gJ3JlbW92ZUxpc3RlbmVyJykgY29udGludWU7XG4gICAgICAgICAgdGhpcy5yZW1vdmVBbGxMaXN0ZW5lcnMoa2V5KTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnJlbW92ZUFsbExpc3RlbmVycygncmVtb3ZlTGlzdGVuZXInKTtcbiAgICAgICAgdGhpcy5fZXZlbnRzID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcbiAgICAgICAgdGhpcy5fZXZlbnRzQ291bnQgPSAwO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICAgIH1cblxuICAgICAgbGlzdGVuZXJzID0gZXZlbnRzW3R5cGVdO1xuXG4gICAgICBpZiAodHlwZW9mIGxpc3RlbmVycyA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICB0aGlzLnJlbW92ZUxpc3RlbmVyKHR5cGUsIGxpc3RlbmVycyk7XG4gICAgICB9IGVsc2UgaWYgKGxpc3RlbmVycyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIC8vIExJRk8gb3JkZXJcbiAgICAgICAgZm9yIChpID0gbGlzdGVuZXJzLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSB7XG4gICAgICAgICAgdGhpcy5yZW1vdmVMaXN0ZW5lcih0eXBlLCBsaXN0ZW5lcnNbaV0pO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHJldHVybiB0aGlzO1xuICAgIH07XG5cbmZ1bmN0aW9uIF9saXN0ZW5lcnModGFyZ2V0LCB0eXBlLCB1bndyYXApIHtcbiAgdmFyIGV2ZW50cyA9IHRhcmdldC5fZXZlbnRzO1xuXG4gIGlmIChldmVudHMgPT09IHVuZGVmaW5lZClcbiAgICByZXR1cm4gW107XG5cbiAgdmFyIGV2bGlzdGVuZXIgPSBldmVudHNbdHlwZV07XG4gIGlmIChldmxpc3RlbmVyID09PSB1bmRlZmluZWQpXG4gICAgcmV0dXJuIFtdO1xuXG4gIGlmICh0eXBlb2YgZXZsaXN0ZW5lciA9PT0gJ2Z1bmN0aW9uJylcbiAgICByZXR1cm4gdW53cmFwID8gW2V2bGlzdGVuZXIubGlzdGVuZXIgfHwgZXZsaXN0ZW5lcl0gOiBbZXZsaXN0ZW5lcl07XG5cbiAgcmV0dXJuIHVud3JhcCA/XG4gICAgdW53cmFwTGlzdGVuZXJzKGV2bGlzdGVuZXIpIDogYXJyYXlDbG9uZShldmxpc3RlbmVyLCBldmxpc3RlbmVyLmxlbmd0aCk7XG59XG5cbkV2ZW50RW1pdHRlci5wcm90b3R5cGUubGlzdGVuZXJzID0gZnVuY3Rpb24gbGlzdGVuZXJzKHR5cGUpIHtcbiAgcmV0dXJuIF9saXN0ZW5lcnModGhpcywgdHlwZSwgdHJ1ZSk7XG59O1xuXG5FdmVudEVtaXR0ZXIucHJvdG90eXBlLnJhd0xpc3RlbmVycyA9IGZ1bmN0aW9uIHJhd0xpc3RlbmVycyh0eXBlKSB7XG4gIHJldHVybiBfbGlzdGVuZXJzKHRoaXMsIHR5cGUsIGZhbHNlKTtcbn07XG5cbkV2ZW50RW1pdHRlci5saXN0ZW5lckNvdW50ID0gZnVuY3Rpb24oZW1pdHRlciwgdHlwZSkge1xuICBpZiAodHlwZW9mIGVtaXR0ZXIubGlzdGVuZXJDb3VudCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIHJldHVybiBlbWl0dGVyLmxpc3RlbmVyQ291bnQodHlwZSk7XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIGxpc3RlbmVyQ291bnQuY2FsbChlbWl0dGVyLCB0eXBlKTtcbiAgfVxufTtcblxuRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5saXN0ZW5lckNvdW50ID0gbGlzdGVuZXJDb3VudDtcbmZ1bmN0aW9uIGxpc3RlbmVyQ291bnQodHlwZSkge1xuICB2YXIgZXZlbnRzID0gdGhpcy5fZXZlbnRzO1xuXG4gIGlmIChldmVudHMgIT09IHVuZGVmaW5lZCkge1xuICAgIHZhciBldmxpc3RlbmVyID0gZXZlbnRzW3R5cGVdO1xuXG4gICAgaWYgKHR5cGVvZiBldmxpc3RlbmVyID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICByZXR1cm4gMTtcbiAgICB9IGVsc2UgaWYgKGV2bGlzdGVuZXIgIT09IHVuZGVmaW5lZCkge1xuICAgICAgcmV0dXJuIGV2bGlzdGVuZXIubGVuZ3RoO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiAwO1xufVxuXG5FdmVudEVtaXR0ZXIucHJvdG90eXBlLmV2ZW50TmFtZXMgPSBmdW5jdGlvbiBldmVudE5hbWVzKCkge1xuICByZXR1cm4gdGhpcy5fZXZlbnRzQ291bnQgPiAwID8gUmVmbGVjdE93bktleXModGhpcy5fZXZlbnRzKSA6IFtdO1xufTtcblxuZnVuY3Rpb24gYXJyYXlDbG9uZShhcnIsIG4pIHtcbiAgdmFyIGNvcHkgPSBuZXcgQXJyYXkobik7XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgbjsgKytpKVxuICAgIGNvcHlbaV0gPSBhcnJbaV07XG4gIHJldHVybiBjb3B5O1xufVxuXG5mdW5jdGlvbiBzcGxpY2VPbmUobGlzdCwgaW5kZXgpIHtcbiAgZm9yICg7IGluZGV4ICsgMSA8IGxpc3QubGVuZ3RoOyBpbmRleCsrKVxuICAgIGxpc3RbaW5kZXhdID0gbGlzdFtpbmRleCArIDFdO1xuICBsaXN0LnBvcCgpO1xufVxuXG5mdW5jdGlvbiB1bndyYXBMaXN0ZW5lcnMoYXJyKSB7XG4gIHZhciByZXQgPSBuZXcgQXJyYXkoYXJyLmxlbmd0aCk7XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgcmV0Lmxlbmd0aDsgKytpKSB7XG4gICAgcmV0W2ldID0gYXJyW2ldLmxpc3RlbmVyIHx8IGFycltpXTtcbiAgfVxuICByZXR1cm4gcmV0O1xufVxuXG5mdW5jdGlvbiBvbmNlKGVtaXR0ZXIsIG5hbWUpIHtcbiAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHtcbiAgICBmdW5jdGlvbiBlcnJvckxpc3RlbmVyKGVycikge1xuICAgICAgZW1pdHRlci5yZW1vdmVMaXN0ZW5lcihuYW1lLCByZXNvbHZlcik7XG4gICAgICByZWplY3QoZXJyKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiByZXNvbHZlcigpIHtcbiAgICAgIGlmICh0eXBlb2YgZW1pdHRlci5yZW1vdmVMaXN0ZW5lciA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICBlbWl0dGVyLnJlbW92ZUxpc3RlbmVyKCdlcnJvcicsIGVycm9yTGlzdGVuZXIpO1xuICAgICAgfVxuICAgICAgcmVzb2x2ZShbXS5zbGljZS5jYWxsKGFyZ3VtZW50cykpO1xuICAgIH07XG5cbiAgICBldmVudFRhcmdldEFnbm9zdGljQWRkTGlzdGVuZXIoZW1pdHRlciwgbmFtZSwgcmVzb2x2ZXIsIHsgb25jZTogdHJ1ZSB9KTtcbiAgICBpZiAobmFtZSAhPT0gJ2Vycm9yJykge1xuICAgICAgYWRkRXJyb3JIYW5kbGVySWZFdmVudEVtaXR0ZXIoZW1pdHRlciwgZXJyb3JMaXN0ZW5lciwgeyBvbmNlOiB0cnVlIH0pO1xuICAgIH1cbiAgfSk7XG59XG5cbmZ1bmN0aW9uIGFkZEVycm9ySGFuZGxlcklmRXZlbnRFbWl0dGVyKGVtaXR0ZXIsIGhhbmRsZXIsIGZsYWdzKSB7XG4gIGlmICh0eXBlb2YgZW1pdHRlci5vbiA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIGV2ZW50VGFyZ2V0QWdub3N0aWNBZGRMaXN0ZW5lcihlbWl0dGVyLCAnZXJyb3InLCBoYW5kbGVyLCBmbGFncyk7XG4gIH1cbn1cblxuZnVuY3Rpb24gZXZlbnRUYXJnZXRBZ25vc3RpY0FkZExpc3RlbmVyKGVtaXR0ZXIsIG5hbWUsIGxpc3RlbmVyLCBmbGFncykge1xuICBpZiAodHlwZW9mIGVtaXR0ZXIub24gPT09ICdmdW5jdGlvbicpIHtcbiAgICBpZiAoZmxhZ3Mub25jZSkge1xuICAgICAgZW1pdHRlci5vbmNlKG5hbWUsIGxpc3RlbmVyKTtcbiAgICB9IGVsc2Uge1xuICAgICAgZW1pdHRlci5vbihuYW1lLCBsaXN0ZW5lcik7XG4gICAgfVxuICB9IGVsc2UgaWYgKHR5cGVvZiBlbWl0dGVyLmFkZEV2ZW50TGlzdGVuZXIgPT09ICdmdW5jdGlvbicpIHtcbiAgICAvLyBFdmVudFRhcmdldCBkb2VzIG5vdCBoYXZlIGBlcnJvcmAgZXZlbnQgc2VtYW50aWNzIGxpa2UgTm9kZVxuICAgIC8vIEV2ZW50RW1pdHRlcnMsIHdlIGRvIG5vdCBsaXN0ZW4gZm9yIGBlcnJvcmAgZXZlbnRzIGhlcmUuXG4gICAgZW1pdHRlci5hZGRFdmVudExpc3RlbmVyKG5hbWUsIGZ1bmN0aW9uIHdyYXBMaXN0ZW5lcihhcmcpIHtcbiAgICAgIC8vIElFIGRvZXMgbm90IGhhdmUgYnVpbHRpbiBgeyBvbmNlOiB0cnVlIH1gIHN1cHBvcnQgc28gd2VcbiAgICAgIC8vIGhhdmUgdG8gZG8gaXQgbWFudWFsbHkuXG4gICAgICBpZiAoZmxhZ3Mub25jZSkge1xuICAgICAgICBlbWl0dGVyLnJlbW92ZUV2ZW50TGlzdGVuZXIobmFtZSwgd3JhcExpc3RlbmVyKTtcbiAgICAgIH1cbiAgICAgIGxpc3RlbmVyKGFyZyk7XG4gICAgfSk7XG4gIH0gZWxzZSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcignVGhlIFwiZW1pdHRlclwiIGFyZ3VtZW50IG11c3QgYmUgb2YgdHlwZSBFdmVudEVtaXR0ZXIuIFJlY2VpdmVkIHR5cGUgJyArIHR5cGVvZiBlbWl0dGVyKTtcbiAgfVxufVxuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///37007\n")},37071:function(__unused_webpack_module,__unused_webpack_exports,__webpack_require__){eval("//! moment.js locale configuration\n//! locale : Frisian [fy]\n//! author : Robin van der Vliet : https://github.com/robin0van0der0v\n\n;(function (global, factory) {\n true ? factory(__webpack_require__(95093)) :\n 0\n}(this, (function (moment) { 'use strict';\n\n //! moment.js locale configuration\n\n var monthsShortWithDots =\n 'jan._feb._mrt._apr._mai_jun._jul._aug._sep._okt._nov._des.'.split('_'),\n monthsShortWithoutDots =\n 'jan_feb_mrt_apr_mai_jun_jul_aug_sep_okt_nov_des'.split('_');\n\n var fy = moment.defineLocale('fy', {\n months: 'jannewaris_febrewaris_maart_april_maaie_juny_july_augustus_septimber_oktober_novimber_desimber'.split(\n '_'\n ),\n monthsShort: function (m, format) {\n if (!m) {\n return monthsShortWithDots;\n } else if (/-MMM-/.test(format)) {\n return monthsShortWithoutDots[m.month()];\n } else {\n return monthsShortWithDots[m.month()];\n }\n },\n monthsParseExact: true,\n weekdays: 'snein_moandei_tiisdei_woansdei_tongersdei_freed_sneon'.split(\n '_'\n ),\n weekdaysShort: 'si._mo._ti._wo._to._fr._so.'.split('_'),\n weekdaysMin: 'Si_Mo_Ti_Wo_To_Fr_So'.split('_'),\n weekdaysParseExact: true,\n longDateFormat: {\n LT: 'HH:mm',\n LTS: 'HH:mm:ss',\n L: 'DD-MM-YYYY',\n LL: 'D MMMM YYYY',\n LLL: 'D MMMM YYYY HH:mm',\n LLLL: 'dddd D MMMM YYYY HH:mm',\n },\n calendar: {\n sameDay: '[hjoed om] LT',\n nextDay: '[moarn om] LT',\n nextWeek: 'dddd [om] LT',\n lastDay: '[juster om] LT',\n lastWeek: '[ôfrûne] dddd [om] LT',\n sameElse: 'L',\n },\n relativeTime: {\n future: 'oer %s',\n past: '%s lyn',\n s: 'in pear sekonden',\n ss: '%d sekonden',\n m: 'ien minút',\n mm: '%d minuten',\n h: 'ien oere',\n hh: '%d oeren',\n d: 'ien dei',\n dd: '%d dagen',\n M: 'ien moanne',\n MM: '%d moannen',\n y: 'ien jier',\n yy: '%d jierren',\n },\n dayOfMonthOrdinalParse: /\\d{1,2}(ste|de)/,\n ordinal: function (number) {\n return (\n number +\n (number === 1 || number === 8 || number >= 20 ? 'ste' : 'de')\n );\n },\n week: {\n dow: 1, // Monday is the first day of the week.\n doy: 4, // The week that contains Jan 4th is the first week of the year.\n },\n });\n\n return fy;\n\n})));\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMzcwNzEuanMiLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vaXRnLW5leHRnZW4tZnJvbnRlbmQvLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9meS5qcz83MTE4Il0sInNvdXJjZXNDb250ZW50IjpbIi8vISBtb21lbnQuanMgbG9jYWxlIGNvbmZpZ3VyYXRpb25cbi8vISBsb2NhbGUgOiBGcmlzaWFuIFtmeV1cbi8vISBhdXRob3IgOiBSb2JpbiB2YW4gZGVyIFZsaWV0IDogaHR0cHM6Ly9naXRodWIuY29tL3JvYmluMHZhbjBkZXIwdlxuXG47KGZ1bmN0aW9uIChnbG9iYWwsIGZhY3RvcnkpIHtcbiAgIHR5cGVvZiBleHBvcnRzID09PSAnb2JqZWN0JyAmJiB0eXBlb2YgbW9kdWxlICE9PSAndW5kZWZpbmVkJ1xuICAgICAgICYmIHR5cGVvZiByZXF1aXJlID09PSAnZnVuY3Rpb24nID8gZmFjdG9yeShyZXF1aXJlKCcuLi9tb21lbnQnKSkgOlxuICAgdHlwZW9mIGRlZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiBkZWZpbmUuYW1kID8gZGVmaW5lKFsnLi4vbW9tZW50J10sIGZhY3RvcnkpIDpcbiAgIGZhY3RvcnkoZ2xvYmFsLm1vbWVudClcbn0odGhpcywgKGZ1bmN0aW9uIChtb21lbnQpIHsgJ3VzZSBzdHJpY3QnO1xuXG4gICAgLy8hIG1vbWVudC5qcyBsb2NhbGUgY29uZmlndXJhdGlvblxuXG4gICAgdmFyIG1vbnRoc1Nob3J0V2l0aERvdHMgPVxuICAgICAgICAgICAgJ2phbi5fZmViLl9tcnQuX2Fwci5fbWFpX2p1bi5fanVsLl9hdWcuX3NlcC5fb2t0Ll9ub3YuX2Rlcy4nLnNwbGl0KCdfJyksXG4gICAgICAgIG1vbnRoc1Nob3J0V2l0aG91dERvdHMgPVxuICAgICAgICAgICAgJ2phbl9mZWJfbXJ0X2Fwcl9tYWlfanVuX2p1bF9hdWdfc2VwX29rdF9ub3ZfZGVzJy5zcGxpdCgnXycpO1xuXG4gICAgdmFyIGZ5ID0gbW9tZW50LmRlZmluZUxvY2FsZSgnZnknLCB7XG4gICAgICAgIG1vbnRoczogJ2phbm5ld2FyaXNfZmVicmV3YXJpc19tYWFydF9hcHJpbF9tYWFpZV9qdW55X2p1bHlfYXVndXN0dXNfc2VwdGltYmVyX29rdG9iZXJfbm92aW1iZXJfZGVzaW1iZXInLnNwbGl0KFxuICAgICAgICAgICAgJ18nXG4gICAgICAgICksXG4gICAgICAgIG1vbnRoc1Nob3J0OiBmdW5jdGlvbiAobSwgZm9ybWF0KSB7XG4gICAgICAgICAgICBpZiAoIW0pIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gbW9udGhzU2hvcnRXaXRoRG90cztcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoLy1NTU0tLy50ZXN0KGZvcm1hdCkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gbW9udGhzU2hvcnRXaXRob3V0RG90c1ttLm1vbnRoKCldO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gbW9udGhzU2hvcnRXaXRoRG90c1ttLm1vbnRoKCldO1xuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBtb250aHNQYXJzZUV4YWN0OiB0cnVlLFxuICAgICAgICB3ZWVrZGF5czogJ3NuZWluX21vYW5kZWlfdGlpc2RlaV93b2Fuc2RlaV90b25nZXJzZGVpX2ZyZWVkX3NuZW9uJy5zcGxpdChcbiAgICAgICAgICAgICdfJ1xuICAgICAgICApLFxuICAgICAgICB3ZWVrZGF5c1Nob3J0OiAnc2kuX21vLl90aS5fd28uX3RvLl9mci5fc28uJy5zcGxpdCgnXycpLFxuICAgICAgICB3ZWVrZGF5c01pbjogJ1NpX01vX1RpX1dvX1RvX0ZyX1NvJy5zcGxpdCgnXycpLFxuICAgICAgICB3ZWVrZGF5c1BhcnNlRXhhY3Q6IHRydWUsXG4gICAgICAgIGxvbmdEYXRlRm9ybWF0OiB7XG4gICAgICAgICAgICBMVDogJ0hIOm1tJyxcbiAgICAgICAgICAgIExUUzogJ0hIOm1tOnNzJyxcbiAgICAgICAgICAgIEw6ICdERC1NTS1ZWVlZJyxcbiAgICAgICAgICAgIExMOiAnRCBNTU1NIFlZWVknLFxuICAgICAgICAgICAgTExMOiAnRCBNTU1NIFlZWVkgSEg6bW0nLFxuICAgICAgICAgICAgTExMTDogJ2RkZGQgRCBNTU1NIFlZWVkgSEg6bW0nLFxuICAgICAgICB9LFxuICAgICAgICBjYWxlbmRhcjoge1xuICAgICAgICAgICAgc2FtZURheTogJ1toam9lZCBvbV0gTFQnLFxuICAgICAgICAgICAgbmV4dERheTogJ1ttb2FybiBvbV0gTFQnLFxuICAgICAgICAgICAgbmV4dFdlZWs6ICdkZGRkIFtvbV0gTFQnLFxuICAgICAgICAgICAgbGFzdERheTogJ1tqdXN0ZXIgb21dIExUJyxcbiAgICAgICAgICAgIGxhc3RXZWVrOiAnW8O0ZnLDu25lXSBkZGRkIFtvbV0gTFQnLFxuICAgICAgICAgICAgc2FtZUVsc2U6ICdMJyxcbiAgICAgICAgfSxcbiAgICAgICAgcmVsYXRpdmVUaW1lOiB7XG4gICAgICAgICAgICBmdXR1cmU6ICdvZXIgJXMnLFxuICAgICAgICAgICAgcGFzdDogJyVzIGx5bicsXG4gICAgICAgICAgICBzOiAnaW4gcGVhciBzZWtvbmRlbicsXG4gICAgICAgICAgICBzczogJyVkIHNla29uZGVuJyxcbiAgICAgICAgICAgIG06ICdpZW4gbWluw7p0JyxcbiAgICAgICAgICAgIG1tOiAnJWQgbWludXRlbicsXG4gICAgICAgICAgICBoOiAnaWVuIG9lcmUnLFxuICAgICAgICAgICAgaGg6ICclZCBvZXJlbicsXG4gICAgICAgICAgICBkOiAnaWVuIGRlaScsXG4gICAgICAgICAgICBkZDogJyVkIGRhZ2VuJyxcbiAgICAgICAgICAgIE06ICdpZW4gbW9hbm5lJyxcbiAgICAgICAgICAgIE1NOiAnJWQgbW9hbm5lbicsXG4gICAgICAgICAgICB5OiAnaWVuIGppZXInLFxuICAgICAgICAgICAgeXk6ICclZCBqaWVycmVuJyxcbiAgICAgICAgfSxcbiAgICAgICAgZGF5T2ZNb250aE9yZGluYWxQYXJzZTogL1xcZHsxLDJ9KHN0ZXxkZSkvLFxuICAgICAgICBvcmRpbmFsOiBmdW5jdGlvbiAobnVtYmVyKSB7XG4gICAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgICAgIG51bWJlciArXG4gICAgICAgICAgICAgICAgKG51bWJlciA9PT0gMSB8fCBudW1iZXIgPT09IDggfHwgbnVtYmVyID49IDIwID8gJ3N0ZScgOiAnZGUnKVxuICAgICAgICAgICAgKTtcbiAgICAgICAgfSxcbiAgICAgICAgd2Vlazoge1xuICAgICAgICAgICAgZG93OiAxLCAvLyBNb25kYXkgaXMgdGhlIGZpcnN0IGRheSBvZiB0aGUgd2Vlay5cbiAgICAgICAgICAgIGRveTogNCwgLy8gVGhlIHdlZWsgdGhhdCBjb250YWlucyBKYW4gNHRoIGlzIHRoZSBmaXJzdCB3ZWVrIG9mIHRoZSB5ZWFyLlxuICAgICAgICB9LFxuICAgIH0pO1xuXG4gICAgcmV0dXJuIGZ5O1xuXG59KSkpO1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///37071\n")},37412:(module,__unused_webpack_exports,__webpack_require__)=>{"use strict";eval("\n\nvar utils = __webpack_require__(9516);\nvar normalizeHeaderName = __webpack_require__(7018);\nvar enhanceError = __webpack_require__(5449);\nvar transitionalDefaults = __webpack_require__(94896);\n\nvar DEFAULT_CONTENT_TYPE = {\n 'Content-Type': 'application/x-www-form-urlencoded'\n};\n\nfunction setContentTypeIfUnset(headers, value) {\n if (!utils.isUndefined(headers) && utils.isUndefined(headers['Content-Type'])) {\n headers['Content-Type'] = value;\n }\n}\n\nfunction getDefaultAdapter() {\n var adapter;\n if (typeof XMLHttpRequest !== 'undefined') {\n // For browsers use XHR adapter\n adapter = __webpack_require__(35592);\n } else if (typeof process !== 'undefined' && Object.prototype.toString.call(process) === '[object process]') {\n // For node use HTTP adapter\n adapter = __webpack_require__(35592);\n }\n return adapter;\n}\n\nfunction stringifySafely(rawValue, parser, encoder) {\n if (utils.isString(rawValue)) {\n try {\n (parser || JSON.parse)(rawValue);\n return utils.trim(rawValue);\n } catch (e) {\n if (e.name !== 'SyntaxError') {\n throw e;\n }\n }\n }\n\n return (encoder || JSON.stringify)(rawValue);\n}\n\nvar defaults = {\n\n transitional: transitionalDefaults,\n\n adapter: getDefaultAdapter(),\n\n transformRequest: [function transformRequest(data, headers) {\n normalizeHeaderName(headers, 'Accept');\n normalizeHeaderName(headers, 'Content-Type');\n\n if (utils.isFormData(data) ||\n utils.isArrayBuffer(data) ||\n utils.isBuffer(data) ||\n utils.isStream(data) ||\n utils.isFile(data) ||\n utils.isBlob(data)\n ) {\n return data;\n }\n if (utils.isArrayBufferView(data)) {\n return data.buffer;\n }\n if (utils.isURLSearchParams(data)) {\n setContentTypeIfUnset(headers, 'application/x-www-form-urlencoded;charset=utf-8');\n return data.toString();\n }\n if (utils.isObject(data) || (headers && headers['Content-Type'] === 'application/json')) {\n setContentTypeIfUnset(headers, 'application/json');\n return stringifySafely(data);\n }\n return data;\n }],\n\n transformResponse: [function transformResponse(data) {\n var transitional = this.transitional || defaults.transitional;\n var silentJSONParsing = transitional && transitional.silentJSONParsing;\n var forcedJSONParsing = transitional && transitional.forcedJSONParsing;\n var strictJSONParsing = !silentJSONParsing && this.responseType === 'json';\n\n if (strictJSONParsing || (forcedJSONParsing && utils.isString(data) && data.length)) {\n try {\n return JSON.parse(data);\n } catch (e) {\n if (strictJSONParsing) {\n if (e.name === 'SyntaxError') {\n throw enhanceError(e, this, 'E_JSON_PARSE');\n }\n throw e;\n }\n }\n }\n\n return data;\n }],\n\n /**\n * A timeout in milliseconds to abort a request. If set to 0 (default) a\n * timeout is not created.\n */\n timeout: 0,\n\n xsrfCookieName: 'XSRF-TOKEN',\n xsrfHeaderName: 'X-XSRF-TOKEN',\n\n maxContentLength: -1,\n maxBodyLength: -1,\n\n validateStatus: function validateStatus(status) {\n return status >= 200 && status < 300;\n },\n\n headers: {\n common: {\n 'Accept': 'application/json, text/plain, */*'\n }\n }\n};\n\nutils.forEach(['delete', 'get', 'head'], function forEachMethodNoData(method) {\n defaults.headers[method] = {};\n});\n\nutils.forEach(['post', 'put', 'patch'], function forEachMethodWithData(method) {\n defaults.headers[method] = utils.merge(DEFAULT_CONTENT_TYPE);\n});\n\nmodule.exports = defaults;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMzc0MTIuanMiLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL2l0Zy1uZXh0Z2VuLWZyb250ZW5kLy4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9kZWZhdWx0cy9pbmRleC5qcz80YzNkIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIHV0aWxzID0gcmVxdWlyZSgnLi4vdXRpbHMnKTtcbnZhciBub3JtYWxpemVIZWFkZXJOYW1lID0gcmVxdWlyZSgnLi4vaGVscGVycy9ub3JtYWxpemVIZWFkZXJOYW1lJyk7XG52YXIgZW5oYW5jZUVycm9yID0gcmVxdWlyZSgnLi4vY29yZS9lbmhhbmNlRXJyb3InKTtcbnZhciB0cmFuc2l0aW9uYWxEZWZhdWx0cyA9IHJlcXVpcmUoJy4vdHJhbnNpdGlvbmFsJyk7XG5cbnZhciBERUZBVUxUX0NPTlRFTlRfVFlQRSA9IHtcbiAgJ0NvbnRlbnQtVHlwZSc6ICdhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQnXG59O1xuXG5mdW5jdGlvbiBzZXRDb250ZW50VHlwZUlmVW5zZXQoaGVhZGVycywgdmFsdWUpIHtcbiAgaWYgKCF1dGlscy5pc1VuZGVmaW5lZChoZWFkZXJzKSAmJiB1dGlscy5pc1VuZGVmaW5lZChoZWFkZXJzWydDb250ZW50LVR5cGUnXSkpIHtcbiAgICBoZWFkZXJzWydDb250ZW50LVR5cGUnXSA9IHZhbHVlO1xuICB9XG59XG5cbmZ1bmN0aW9uIGdldERlZmF1bHRBZGFwdGVyKCkge1xuICB2YXIgYWRhcHRlcjtcbiAgaWYgKHR5cGVvZiBYTUxIdHRwUmVxdWVzdCAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAvLyBGb3IgYnJvd3NlcnMgdXNlIFhIUiBhZGFwdGVyXG4gICAgYWRhcHRlciA9IHJlcXVpcmUoJy4uL2FkYXB0ZXJzL3hocicpO1xuICB9IGVsc2UgaWYgKHR5cGVvZiBwcm9jZXNzICE9PSAndW5kZWZpbmVkJyAmJiBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwocHJvY2VzcykgPT09ICdbb2JqZWN0IHByb2Nlc3NdJykge1xuICAgIC8vIEZvciBub2RlIHVzZSBIVFRQIGFkYXB0ZXJcbiAgICBhZGFwdGVyID0gcmVxdWlyZSgnLi4vYWRhcHRlcnMvaHR0cCcpO1xuICB9XG4gIHJldHVybiBhZGFwdGVyO1xufVxuXG5mdW5jdGlvbiBzdHJpbmdpZnlTYWZlbHkocmF3VmFsdWUsIHBhcnNlciwgZW5jb2Rlcikge1xuICBpZiAodXRpbHMuaXNTdHJpbmcocmF3VmFsdWUpKSB7XG4gICAgdHJ5IHtcbiAgICAgIChwYXJzZXIgfHwgSlNPTi5wYXJzZSkocmF3VmFsdWUpO1xuICAgICAgcmV0dXJuIHV0aWxzLnRyaW0ocmF3VmFsdWUpO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIGlmIChlLm5hbWUgIT09ICdTeW50YXhFcnJvcicpIHtcbiAgICAgICAgdGhyb3cgZTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICByZXR1cm4gKGVuY29kZXIgfHwgSlNPTi5zdHJpbmdpZnkpKHJhd1ZhbHVlKTtcbn1cblxudmFyIGRlZmF1bHRzID0ge1xuXG4gIHRyYW5zaXRpb25hbDogdHJhbnNpdGlvbmFsRGVmYXVsdHMsXG5cbiAgYWRhcHRlcjogZ2V0RGVmYXVsdEFkYXB0ZXIoKSxcblxuICB0cmFuc2Zvcm1SZXF1ZXN0OiBbZnVuY3Rpb24gdHJhbnNmb3JtUmVxdWVzdChkYXRhLCBoZWFkZXJzKSB7XG4gICAgbm9ybWFsaXplSGVhZGVyTmFtZShoZWFkZXJzLCAnQWNjZXB0Jyk7XG4gICAgbm9ybWFsaXplSGVhZGVyTmFtZShoZWFkZXJzLCAnQ29udGVudC1UeXBlJyk7XG5cbiAgICBpZiAodXRpbHMuaXNGb3JtRGF0YShkYXRhKSB8fFxuICAgICAgdXRpbHMuaXNBcnJheUJ1ZmZlcihkYXRhKSB8fFxuICAgICAgdXRpbHMuaXNCdWZmZXIoZGF0YSkgfHxcbiAgICAgIHV0aWxzLmlzU3RyZWFtKGRhdGEpIHx8XG4gICAgICB1dGlscy5pc0ZpbGUoZGF0YSkgfHxcbiAgICAgIHV0aWxzLmlzQmxvYihkYXRhKVxuICAgICkge1xuICAgICAgcmV0dXJuIGRhdGE7XG4gICAgfVxuICAgIGlmICh1dGlscy5pc0FycmF5QnVmZmVyVmlldyhkYXRhKSkge1xuICAgICAgcmV0dXJuIGRhdGEuYnVmZmVyO1xuICAgIH1cbiAgICBpZiAodXRpbHMuaXNVUkxTZWFyY2hQYXJhbXMoZGF0YSkpIHtcbiAgICAgIHNldENvbnRlbnRUeXBlSWZVbnNldChoZWFkZXJzLCAnYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkO2NoYXJzZXQ9dXRmLTgnKTtcbiAgICAgIHJldHVybiBkYXRhLnRvU3RyaW5nKCk7XG4gICAgfVxuICAgIGlmICh1dGlscy5pc09iamVjdChkYXRhKSB8fCAoaGVhZGVycyAmJiBoZWFkZXJzWydDb250ZW50LVR5cGUnXSA9PT0gJ2FwcGxpY2F0aW9uL2pzb24nKSkge1xuICAgICAgc2V0Q29udGVudFR5cGVJZlVuc2V0KGhlYWRlcnMsICdhcHBsaWNhdGlvbi9qc29uJyk7XG4gICAgICByZXR1cm4gc3RyaW5naWZ5U2FmZWx5KGRhdGEpO1xuICAgIH1cbiAgICByZXR1cm4gZGF0YTtcbiAgfV0sXG5cbiAgdHJhbnNmb3JtUmVzcG9uc2U6IFtmdW5jdGlvbiB0cmFuc2Zvcm1SZXNwb25zZShkYXRhKSB7XG4gICAgdmFyIHRyYW5zaXRpb25hbCA9IHRoaXMudHJhbnNpdGlvbmFsIHx8IGRlZmF1bHRzLnRyYW5zaXRpb25hbDtcbiAgICB2YXIgc2lsZW50SlNPTlBhcnNpbmcgPSB0cmFuc2l0aW9uYWwgJiYgdHJhbnNpdGlvbmFsLnNpbGVudEpTT05QYXJzaW5nO1xuICAgIHZhciBmb3JjZWRKU09OUGFyc2luZyA9IHRyYW5zaXRpb25hbCAmJiB0cmFuc2l0aW9uYWwuZm9yY2VkSlNPTlBhcnNpbmc7XG4gICAgdmFyIHN0cmljdEpTT05QYXJzaW5nID0gIXNpbGVudEpTT05QYXJzaW5nICYmIHRoaXMucmVzcG9uc2VUeXBlID09PSAnanNvbic7XG5cbiAgICBpZiAoc3RyaWN0SlNPTlBhcnNpbmcgfHwgKGZvcmNlZEpTT05QYXJzaW5nICYmIHV0aWxzLmlzU3RyaW5nKGRhdGEpICYmIGRhdGEubGVuZ3RoKSkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgcmV0dXJuIEpTT04ucGFyc2UoZGF0YSk7XG4gICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIGlmIChzdHJpY3RKU09OUGFyc2luZykge1xuICAgICAgICAgIGlmIChlLm5hbWUgPT09ICdTeW50YXhFcnJvcicpIHtcbiAgICAgICAgICAgIHRocm93IGVuaGFuY2VFcnJvcihlLCB0aGlzLCAnRV9KU09OX1BBUlNFJyk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHRocm93IGU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gZGF0YTtcbiAgfV0sXG5cbiAgLyoqXG4gICAqIEEgdGltZW91dCBpbiBtaWxsaXNlY29uZHMgdG8gYWJvcnQgYSByZXF1ZXN0LiBJZiBzZXQgdG8gMCAoZGVmYXVsdCkgYVxuICAgKiB0aW1lb3V0IGlzIG5vdCBjcmVhdGVkLlxuICAgKi9cbiAgdGltZW91dDogMCxcblxuICB4c3JmQ29va2llTmFtZTogJ1hTUkYtVE9LRU4nLFxuICB4c3JmSGVhZGVyTmFtZTogJ1gtWFNSRi1UT0tFTicsXG5cbiAgbWF4Q29udGVudExlbmd0aDogLTEsXG4gIG1heEJvZHlMZW5ndGg6IC0xLFxuXG4gIHZhbGlkYXRlU3RhdHVzOiBmdW5jdGlvbiB2YWxpZGF0ZVN0YXR1cyhzdGF0dXMpIHtcbiAgICByZXR1cm4gc3RhdHVzID49IDIwMCAmJiBzdGF0dXMgPCAzMDA7XG4gIH0sXG5cbiAgaGVhZGVyczoge1xuICAgIGNvbW1vbjoge1xuICAgICAgJ0FjY2VwdCc6ICdhcHBsaWNhdGlvbi9qc29uLCB0ZXh0L3BsYWluLCAqLyonXG4gICAgfVxuICB9XG59O1xuXG51dGlscy5mb3JFYWNoKFsnZGVsZXRlJywgJ2dldCcsICdoZWFkJ10sIGZ1bmN0aW9uIGZvckVhY2hNZXRob2ROb0RhdGEobWV0aG9kKSB7XG4gIGRlZmF1bHRzLmhlYWRlcnNbbWV0aG9kXSA9IHt9O1xufSk7XG5cbnV0aWxzLmZvckVhY2goWydwb3N0JywgJ3B1dCcsICdwYXRjaCddLCBmdW5jdGlvbiBmb3JFYWNoTWV0aG9kV2l0aERhdGEobWV0aG9kKSB7XG4gIGRlZmF1bHRzLmhlYWRlcnNbbWV0aG9kXSA9IHV0aWxzLm1lcmdlKERFRkFVTFRfQ09OVEVOVF9UWVBFKTtcbn0pO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGRlZmF1bHRzO1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///37412\n")},37564:(module,__unused_webpack_exports,__webpack_require__)=>{"use strict";eval("\n\nif (true) {\n /* unused reexport */ __webpack_require__(14912);\n} else {}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMzc1NjQuanMiLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL2l0Zy1uZXh0Z2VuLWZyb250ZW5kLy4vbm9kZV9tb2R1bGVzL3JlYWN0LXJvdXRlci9ub2RlX21vZHVsZXMvcmVhY3QtaXMvaW5kZXguanM/OTkyNSJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbmlmIChwcm9jZXNzLmVudi5OT0RFX0VOViA9PT0gJ3Byb2R1Y3Rpb24nKSB7XG4gIG1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi9janMvcmVhY3QtaXMucHJvZHVjdGlvbi5taW4uanMnKTtcbn0gZWxzZSB7XG4gIG1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi9janMvcmVhY3QtaXMuZGV2ZWxvcG1lbnQuanMnKTtcbn1cbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///37564\n")},37588:(I,g,t)=>{"use strict";I.exports=t.p+"c538621c2adefda47041.png"},37810:(I,g,t)=>{"use strict";I.exports=t.p+"6ed587e476998e3224ea.png"},37892:function(__unused_webpack_module,__unused_webpack_exports,__webpack_require__){eval("//! moment.js locale configuration\n//! locale : French (Switzerland) [fr-ch]\n//! author : Gaspard Bucher : https://github.com/gaspard\n\n;(function (global, factory) {\n true ? factory(__webpack_require__(95093)) :\n 0\n}(this, (function (moment) { 'use strict';\n\n //! moment.js locale configuration\n\n var frCh = moment.defineLocale('fr-ch', {\n months: 'janvier_février_mars_avril_mai_juin_juillet_août_septembre_octobre_novembre_décembre'.split(\n '_'\n ),\n monthsShort:\n 'janv._févr._mars_avr._mai_juin_juil._août_sept._oct._nov._déc.'.split(\n '_'\n ),\n monthsParseExact: true,\n weekdays: 'dimanche_lundi_mardi_mercredi_jeudi_vendredi_samedi'.split('_'),\n weekdaysShort: 'dim._lun._mar._mer._jeu._ven._sam.'.split('_'),\n weekdaysMin: 'di_lu_ma_me_je_ve_sa'.split('_'),\n weekdaysParseExact: true,\n longDateFormat: {\n LT: 'HH:mm',\n LTS: 'HH:mm:ss',\n L: 'DD.MM.YYYY',\n LL: 'D MMMM YYYY',\n LLL: 'D MMMM YYYY HH:mm',\n LLLL: 'dddd D MMMM YYYY HH:mm',\n },\n calendar: {\n sameDay: '[Aujourd’hui à] LT',\n nextDay: '[Demain à] LT',\n nextWeek: 'dddd [à] LT',\n lastDay: '[Hier à] LT',\n lastWeek: 'dddd [dernier à] LT',\n sameElse: 'L',\n },\n relativeTime: {\n future: 'dans %s',\n past: 'il y a %s',\n s: 'quelques secondes',\n ss: '%d secondes',\n m: 'une minute',\n mm: '%d minutes',\n h: 'une heure',\n hh: '%d heures',\n d: 'un jour',\n dd: '%d jours',\n M: 'un mois',\n MM: '%d mois',\n y: 'un an',\n yy: '%d ans',\n },\n dayOfMonthOrdinalParse: /\\d{1,2}(er|e)/,\n ordinal: function (number, period) {\n switch (period) {\n // Words with masculine grammatical gender: mois, trimestre, jour\n default:\n case 'M':\n case 'Q':\n case 'D':\n case 'DDD':\n case 'd':\n return number + (number === 1 ? 'er' : 'e');\n\n // Words with feminine grammatical gender: semaine\n case 'w':\n case 'W':\n return number + (number === 1 ? 're' : 'e');\n }\n },\n week: {\n dow: 1, // Monday is the first day of the week.\n doy: 4, // The week that contains Jan 4th is the first week of the year.\n },\n });\n\n return frCh;\n\n})));\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMzc4OTIuanMiLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL2l0Zy1uZXh0Z2VuLWZyb250ZW5kLy4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvZnItY2guanM/MGU0OSJdLCJzb3VyY2VzQ29udGVudCI6WyIvLyEgbW9tZW50LmpzIGxvY2FsZSBjb25maWd1cmF0aW9uXG4vLyEgbG9jYWxlIDogRnJlbmNoIChTd2l0emVybGFuZCkgW2ZyLWNoXVxuLy8hIGF1dGhvciA6IEdhc3BhcmQgQnVjaGVyIDogaHR0cHM6Ly9naXRodWIuY29tL2dhc3BhcmRcblxuOyhmdW5jdGlvbiAoZ2xvYmFsLCBmYWN0b3J5KSB7XG4gICB0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcgJiYgdHlwZW9mIG1vZHVsZSAhPT0gJ3VuZGVmaW5lZCdcbiAgICAgICAmJiB0eXBlb2YgcmVxdWlyZSA9PT0gJ2Z1bmN0aW9uJyA/IGZhY3RvcnkocmVxdWlyZSgnLi4vbW9tZW50JykpIDpcbiAgIHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgZGVmaW5lLmFtZCA/IGRlZmluZShbJy4uL21vbWVudCddLCBmYWN0b3J5KSA6XG4gICBmYWN0b3J5KGdsb2JhbC5tb21lbnQpXG59KHRoaXMsIChmdW5jdGlvbiAobW9tZW50KSB7ICd1c2Ugc3RyaWN0JztcblxuICAgIC8vISBtb21lbnQuanMgbG9jYWxlIGNvbmZpZ3VyYXRpb25cblxuICAgIHZhciBmckNoID0gbW9tZW50LmRlZmluZUxvY2FsZSgnZnItY2gnLCB7XG4gICAgICAgIG1vbnRoczogJ2phbnZpZXJfZsOpdnJpZXJfbWFyc19hdnJpbF9tYWlfanVpbl9qdWlsbGV0X2Fvw7t0X3NlcHRlbWJyZV9vY3RvYnJlX25vdmVtYnJlX2TDqWNlbWJyZScuc3BsaXQoXG4gICAgICAgICAgICAnXydcbiAgICAgICAgKSxcbiAgICAgICAgbW9udGhzU2hvcnQ6XG4gICAgICAgICAgICAnamFudi5fZsOpdnIuX21hcnNfYXZyLl9tYWlfanVpbl9qdWlsLl9hb8O7dF9zZXB0Ll9vY3QuX25vdi5fZMOpYy4nLnNwbGl0KFxuICAgICAgICAgICAgICAgICdfJ1xuICAgICAgICAgICAgKSxcbiAgICAgICAgbW9udGhzUGFyc2VFeGFjdDogdHJ1ZSxcbiAgICAgICAgd2Vla2RheXM6ICdkaW1hbmNoZV9sdW5kaV9tYXJkaV9tZXJjcmVkaV9qZXVkaV92ZW5kcmVkaV9zYW1lZGknLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzU2hvcnQ6ICdkaW0uX2x1bi5fbWFyLl9tZXIuX2pldS5fdmVuLl9zYW0uJy5zcGxpdCgnXycpLFxuICAgICAgICB3ZWVrZGF5c01pbjogJ2RpX2x1X21hX21lX2plX3ZlX3NhJy5zcGxpdCgnXycpLFxuICAgICAgICB3ZWVrZGF5c1BhcnNlRXhhY3Q6IHRydWUsXG4gICAgICAgIGxvbmdEYXRlRm9ybWF0OiB7XG4gICAgICAgICAgICBMVDogJ0hIOm1tJyxcbiAgICAgICAgICAgIExUUzogJ0hIOm1tOnNzJyxcbiAgICAgICAgICAgIEw6ICdERC5NTS5ZWVlZJyxcbiAgICAgICAgICAgIExMOiAnRCBNTU1NIFlZWVknLFxuICAgICAgICAgICAgTExMOiAnRCBNTU1NIFlZWVkgSEg6bW0nLFxuICAgICAgICAgICAgTExMTDogJ2RkZGQgRCBNTU1NIFlZWVkgSEg6bW0nLFxuICAgICAgICB9LFxuICAgICAgICBjYWxlbmRhcjoge1xuICAgICAgICAgICAgc2FtZURheTogJ1tBdWpvdXJk4oCZaHVpIMOgXSBMVCcsXG4gICAgICAgICAgICBuZXh0RGF5OiAnW0RlbWFpbiDDoF0gTFQnLFxuICAgICAgICAgICAgbmV4dFdlZWs6ICdkZGRkIFvDoF0gTFQnLFxuICAgICAgICAgICAgbGFzdERheTogJ1tIaWVyIMOgXSBMVCcsXG4gICAgICAgICAgICBsYXN0V2VlazogJ2RkZGQgW2Rlcm5pZXIgw6BdIExUJyxcbiAgICAgICAgICAgIHNhbWVFbHNlOiAnTCcsXG4gICAgICAgIH0sXG4gICAgICAgIHJlbGF0aXZlVGltZToge1xuICAgICAgICAgICAgZnV0dXJlOiAnZGFucyAlcycsXG4gICAgICAgICAgICBwYXN0OiAnaWwgeSBhICVzJyxcbiAgICAgICAgICAgIHM6ICdxdWVscXVlcyBzZWNvbmRlcycsXG4gICAgICAgICAgICBzczogJyVkIHNlY29uZGVzJyxcbiAgICAgICAgICAgIG06ICd1bmUgbWludXRlJyxcbiAgICAgICAgICAgIG1tOiAnJWQgbWludXRlcycsXG4gICAgICAgICAgICBoOiAndW5lIGhldXJlJyxcbiAgICAgICAgICAgIGhoOiAnJWQgaGV1cmVzJyxcbiAgICAgICAgICAgIGQ6ICd1biBqb3VyJyxcbiAgICAgICAgICAgIGRkOiAnJWQgam91cnMnLFxuICAgICAgICAgICAgTTogJ3VuIG1vaXMnLFxuICAgICAgICAgICAgTU06ICclZCBtb2lzJyxcbiAgICAgICAgICAgIHk6ICd1biBhbicsXG4gICAgICAgICAgICB5eTogJyVkIGFucycsXG4gICAgICAgIH0sXG4gICAgICAgIGRheU9mTW9udGhPcmRpbmFsUGFyc2U6IC9cXGR7MSwyfShlcnxlKS8sXG4gICAgICAgIG9yZGluYWw6IGZ1bmN0aW9uIChudW1iZXIsIHBlcmlvZCkge1xuICAgICAgICAgICAgc3dpdGNoIChwZXJpb2QpIHtcbiAgICAgICAgICAgICAgICAvLyBXb3JkcyB3aXRoIG1hc2N1bGluZSBncmFtbWF0aWNhbCBnZW5kZXI6IG1vaXMsIHRyaW1lc3RyZSwgam91clxuICAgICAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgY2FzZSAnTSc6XG4gICAgICAgICAgICAgICAgY2FzZSAnUSc6XG4gICAgICAgICAgICAgICAgY2FzZSAnRCc6XG4gICAgICAgICAgICAgICAgY2FzZSAnREREJzpcbiAgICAgICAgICAgICAgICBjYXNlICdkJzpcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG51bWJlciArIChudW1iZXIgPT09IDEgPyAnZXInIDogJ2UnKTtcblxuICAgICAgICAgICAgICAgIC8vIFdvcmRzIHdpdGggZmVtaW5pbmUgZ3JhbW1hdGljYWwgZ2VuZGVyOiBzZW1haW5lXG4gICAgICAgICAgICAgICAgY2FzZSAndyc6XG4gICAgICAgICAgICAgICAgY2FzZSAnVyc6XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBudW1iZXIgKyAobnVtYmVyID09PSAxID8gJ3JlJyA6ICdlJyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIHdlZWs6IHtcbiAgICAgICAgICAgIGRvdzogMSwgLy8gTW9uZGF5IGlzIHRoZSBmaXJzdCBkYXkgb2YgdGhlIHdlZWsuXG4gICAgICAgICAgICBkb3k6IDQsIC8vIFRoZSB3ZWVrIHRoYXQgY29udGFpbnMgSmFuIDR0aCBpcyB0aGUgZmlyc3Qgd2VlayBvZiB0aGUgeWVhci5cbiAgICAgICAgfSxcbiAgICB9KTtcblxuICAgIHJldHVybiBmckNoO1xuXG59KSkpO1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///37892\n")},38291:(I,g,t)=>{"use strict";I.exports=t.p+"c7e3a85760a272778619.png"},38454:function(module,exports,__webpack_require__){eval(";(function (root, factory, undef) {\n\tif (true) {\n\t\t// CommonJS\n\t\tmodule.exports = exports = factory(__webpack_require__(19021), __webpack_require__(57165));\n\t}\n\telse {}\n}(this, function (CryptoJS) {\n\n\t/**\n\t * Electronic Codebook block mode.\n\t */\n\tCryptoJS.mode.ECB = (function () {\n\t var ECB = CryptoJS.lib.BlockCipherMode.extend();\n\n\t ECB.Encryptor = ECB.extend({\n\t processBlock: function (words, offset) {\n\t this._cipher.encryptBlock(words, offset);\n\t }\n\t });\n\n\t ECB.Decryptor = ECB.extend({\n\t processBlock: function (words, offset) {\n\t this._cipher.decryptBlock(words, offset);\n\t }\n\t });\n\n\t return ECB;\n\t}());\n\n\n\treturn CryptoJS.mode.ECB;\n\n}));//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMzg0NTQuanMiLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBUUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vaXRnLW5leHRnZW4tZnJvbnRlbmQvLi9ub2RlX21vZHVsZXMvY3J5cHRvLWpzL21vZGUtZWNiLmpzPzgxYmYiXSwic291cmNlc0NvbnRlbnQiOlsiOyhmdW5jdGlvbiAocm9vdCwgZmFjdG9yeSwgdW5kZWYpIHtcblx0aWYgKHR5cGVvZiBleHBvcnRzID09PSBcIm9iamVjdFwiKSB7XG5cdFx0Ly8gQ29tbW9uSlNcblx0XHRtb2R1bGUuZXhwb3J0cyA9IGV4cG9ydHMgPSBmYWN0b3J5KHJlcXVpcmUoXCIuL2NvcmVcIiksIHJlcXVpcmUoXCIuL2NpcGhlci1jb3JlXCIpKTtcblx0fVxuXHRlbHNlIGlmICh0eXBlb2YgZGVmaW5lID09PSBcImZ1bmN0aW9uXCIgJiYgZGVmaW5lLmFtZCkge1xuXHRcdC8vIEFNRFxuXHRcdGRlZmluZShbXCIuL2NvcmVcIiwgXCIuL2NpcGhlci1jb3JlXCJdLCBmYWN0b3J5KTtcblx0fVxuXHRlbHNlIHtcblx0XHQvLyBHbG9iYWwgKGJyb3dzZXIpXG5cdFx0ZmFjdG9yeShyb290LkNyeXB0b0pTKTtcblx0fVxufSh0aGlzLCBmdW5jdGlvbiAoQ3J5cHRvSlMpIHtcblxuXHQvKipcblx0ICogRWxlY3Ryb25pYyBDb2RlYm9vayBibG9jayBtb2RlLlxuXHQgKi9cblx0Q3J5cHRvSlMubW9kZS5FQ0IgPSAoZnVuY3Rpb24gKCkge1xuXHQgICAgdmFyIEVDQiA9IENyeXB0b0pTLmxpYi5CbG9ja0NpcGhlck1vZGUuZXh0ZW5kKCk7XG5cblx0ICAgIEVDQi5FbmNyeXB0b3IgPSBFQ0IuZXh0ZW5kKHtcblx0ICAgICAgICBwcm9jZXNzQmxvY2s6IGZ1bmN0aW9uICh3b3Jkcywgb2Zmc2V0KSB7XG5cdCAgICAgICAgICAgIHRoaXMuX2NpcGhlci5lbmNyeXB0QmxvY2sod29yZHMsIG9mZnNldCk7XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cblx0ICAgIEVDQi5EZWNyeXB0b3IgPSBFQ0IuZXh0ZW5kKHtcblx0ICAgICAgICBwcm9jZXNzQmxvY2s6IGZ1bmN0aW9uICh3b3Jkcywgb2Zmc2V0KSB7XG5cdCAgICAgICAgICAgIHRoaXMuX2NpcGhlci5kZWNyeXB0QmxvY2sod29yZHMsIG9mZnNldCk7XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cblx0ICAgIHJldHVybiBFQ0I7XG5cdH0oKSk7XG5cblxuXHRyZXR1cm4gQ3J5cHRvSlMubW9kZS5FQ0I7XG5cbn0pKTsiXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///38454\n")},38664:(I,g,t)=>{"use strict";I.exports=t.p+"fbb9097de10183985ab4.png"},38841:(I,g,t)=>{"use strict";I.exports=t.p+"4839c038ccda00a02184.png"},39149:(I,g,t)=>{"use strict";I.exports=t.p+"b6772b535d0d2e8d48b8.png"},39506:function(module,exports,__webpack_require__){eval(";(function (root, factory, undef) {\n\tif (true) {\n\t\t// CommonJS\n\t\tmodule.exports = exports = factory(__webpack_require__(19021), __webpack_require__(45471), __webpack_require__(51025));\n\t}\n\telse {}\n}(this, function (CryptoJS) {\n\n\t(function () {\n\t // Shortcuts\n\t var C = CryptoJS;\n\t var C_lib = C.lib;\n\t var Base = C_lib.Base;\n\t var WordArray = C_lib.WordArray;\n\t var C_algo = C.algo;\n\t var MD5 = C_algo.MD5;\n\n\t /**\n\t * This key derivation function is meant to conform with EVP_BytesToKey.\n\t * www.openssl.org/docs/crypto/EVP_BytesToKey.html\n\t */\n\t var EvpKDF = C_algo.EvpKDF = Base.extend({\n\t /**\n\t * Configuration options.\n\t *\n\t * @property {number} keySize The key size in words to generate. Default: 4 (128 bits)\n\t * @property {Hasher} hasher The hash algorithm to use. Default: MD5\n\t * @property {number} iterations The number of iterations to perform. Default: 1\n\t */\n\t cfg: Base.extend({\n\t keySize: 128/32,\n\t hasher: MD5,\n\t iterations: 1\n\t }),\n\n\t /**\n\t * Initializes a newly created key derivation function.\n\t *\n\t * @param {Object} cfg (Optional) The configuration options to use for the derivation.\n\t *\n\t * @example\n\t *\n\t * var kdf = CryptoJS.algo.EvpKDF.create();\n\t * var kdf = CryptoJS.algo.EvpKDF.create({ keySize: 8 });\n\t * var kdf = CryptoJS.algo.EvpKDF.create({ keySize: 8, iterations: 1000 });\n\t */\n\t init: function (cfg) {\n\t this.cfg = this.cfg.extend(cfg);\n\t },\n\n\t /**\n\t * Derives a key from a password.\n\t *\n\t * @param {WordArray|string} password The password.\n\t * @param {WordArray|string} salt A salt.\n\t *\n\t * @return {WordArray} The derived key.\n\t *\n\t * @example\n\t *\n\t * var key = kdf.compute(password, salt);\n\t */\n\t compute: function (password, salt) {\n\t var block;\n\n\t // Shortcut\n\t var cfg = this.cfg;\n\n\t // Init hasher\n\t var hasher = cfg.hasher.create();\n\n\t // Initial values\n\t var derivedKey = WordArray.create();\n\n\t // Shortcuts\n\t var derivedKeyWords = derivedKey.words;\n\t var keySize = cfg.keySize;\n\t var iterations = cfg.iterations;\n\n\t // Generate key\n\t while (derivedKeyWords.length < keySize) {\n\t if (block) {\n\t hasher.update(block);\n\t }\n\t block = hasher.update(password).finalize(salt);\n\t hasher.reset();\n\n\t // Iterations\n\t for (var i = 1; i < iterations; i++) {\n\t block = hasher.finalize(block);\n\t hasher.reset();\n\t }\n\n\t derivedKey.concat(block);\n\t }\n\t derivedKey.sigBytes = keySize * 4;\n\n\t return derivedKey;\n\t }\n\t });\n\n\t /**\n\t * Derives a key from a password.\n\t *\n\t * @param {WordArray|string} password The password.\n\t * @param {WordArray|string} salt A salt.\n\t * @param {Object} cfg (Optional) The configuration options to use for this computation.\n\t *\n\t * @return {WordArray} The derived key.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var key = CryptoJS.EvpKDF(password, salt);\n\t * var key = CryptoJS.EvpKDF(password, salt, { keySize: 8 });\n\t * var key = CryptoJS.EvpKDF(password, salt, { keySize: 8, iterations: 1000 });\n\t */\n\t C.EvpKDF = function (password, salt, cfg) {\n\t return EvpKDF.create(cfg).compute(password, salt);\n\t };\n\t}());\n\n\n\treturn CryptoJS.EvpKDF;\n\n}));//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMzk1MDYuanMiLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBUUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9pdGctbmV4dGdlbi1mcm9udGVuZC8uL25vZGVfbW9kdWxlcy9jcnlwdG8tanMvZXZwa2RmLmpzPzJiNzkiXSwic291cmNlc0NvbnRlbnQiOlsiOyhmdW5jdGlvbiAocm9vdCwgZmFjdG9yeSwgdW5kZWYpIHtcblx0aWYgKHR5cGVvZiBleHBvcnRzID09PSBcIm9iamVjdFwiKSB7XG5cdFx0Ly8gQ29tbW9uSlNcblx0XHRtb2R1bGUuZXhwb3J0cyA9IGV4cG9ydHMgPSBmYWN0b3J5KHJlcXVpcmUoXCIuL2NvcmVcIiksIHJlcXVpcmUoXCIuL3NoYTFcIiksIHJlcXVpcmUoXCIuL2htYWNcIikpO1xuXHR9XG5cdGVsc2UgaWYgKHR5cGVvZiBkZWZpbmUgPT09IFwiZnVuY3Rpb25cIiAmJiBkZWZpbmUuYW1kKSB7XG5cdFx0Ly8gQU1EXG5cdFx0ZGVmaW5lKFtcIi4vY29yZVwiLCBcIi4vc2hhMVwiLCBcIi4vaG1hY1wiXSwgZmFjdG9yeSk7XG5cdH1cblx0ZWxzZSB7XG5cdFx0Ly8gR2xvYmFsIChicm93c2VyKVxuXHRcdGZhY3Rvcnkocm9vdC5DcnlwdG9KUyk7XG5cdH1cbn0odGhpcywgZnVuY3Rpb24gKENyeXB0b0pTKSB7XG5cblx0KGZ1bmN0aW9uICgpIHtcblx0ICAgIC8vIFNob3J0Y3V0c1xuXHQgICAgdmFyIEMgPSBDcnlwdG9KUztcblx0ICAgIHZhciBDX2xpYiA9IEMubGliO1xuXHQgICAgdmFyIEJhc2UgPSBDX2xpYi5CYXNlO1xuXHQgICAgdmFyIFdvcmRBcnJheSA9IENfbGliLldvcmRBcnJheTtcblx0ICAgIHZhciBDX2FsZ28gPSBDLmFsZ287XG5cdCAgICB2YXIgTUQ1ID0gQ19hbGdvLk1ENTtcblxuXHQgICAgLyoqXG5cdCAgICAgKiBUaGlzIGtleSBkZXJpdmF0aW9uIGZ1bmN0aW9uIGlzIG1lYW50IHRvIGNvbmZvcm0gd2l0aCBFVlBfQnl0ZXNUb0tleS5cblx0ICAgICAqIHd3dy5vcGVuc3NsLm9yZy9kb2NzL2NyeXB0by9FVlBfQnl0ZXNUb0tleS5odG1sXG5cdCAgICAgKi9cblx0ICAgIHZhciBFdnBLREYgPSBDX2FsZ28uRXZwS0RGID0gQmFzZS5leHRlbmQoe1xuXHQgICAgICAgIC8qKlxuXHQgICAgICAgICAqIENvbmZpZ3VyYXRpb24gb3B0aW9ucy5cblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBrZXlTaXplIFRoZSBrZXkgc2l6ZSBpbiB3b3JkcyB0byBnZW5lcmF0ZS4gRGVmYXVsdDogNCAoMTI4IGJpdHMpXG5cdCAgICAgICAgICogQHByb3BlcnR5IHtIYXNoZXJ9IGhhc2hlciBUaGUgaGFzaCBhbGdvcml0aG0gdG8gdXNlLiBEZWZhdWx0OiBNRDVcblx0ICAgICAgICAgKiBAcHJvcGVydHkge251bWJlcn0gaXRlcmF0aW9ucyBUaGUgbnVtYmVyIG9mIGl0ZXJhdGlvbnMgdG8gcGVyZm9ybS4gRGVmYXVsdDogMVxuXHQgICAgICAgICAqL1xuXHQgICAgICAgIGNmZzogQmFzZS5leHRlbmQoe1xuXHQgICAgICAgICAgICBrZXlTaXplOiAxMjgvMzIsXG5cdCAgICAgICAgICAgIGhhc2hlcjogTUQ1LFxuXHQgICAgICAgICAgICBpdGVyYXRpb25zOiAxXG5cdCAgICAgICAgfSksXG5cblx0ICAgICAgICAvKipcblx0ICAgICAgICAgKiBJbml0aWFsaXplcyBhIG5ld2x5IGNyZWF0ZWQga2V5IGRlcml2YXRpb24gZnVuY3Rpb24uXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAcGFyYW0ge09iamVjdH0gY2ZnIChPcHRpb25hbCkgVGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyB0byB1c2UgZm9yIHRoZSBkZXJpdmF0aW9uLlxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogQGV4YW1wbGVcblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqICAgICB2YXIga2RmID0gQ3J5cHRvSlMuYWxnby5FdnBLREYuY3JlYXRlKCk7XG5cdCAgICAgICAgICogICAgIHZhciBrZGYgPSBDcnlwdG9KUy5hbGdvLkV2cEtERi5jcmVhdGUoeyBrZXlTaXplOiA4IH0pO1xuXHQgICAgICAgICAqICAgICB2YXIga2RmID0gQ3J5cHRvSlMuYWxnby5FdnBLREYuY3JlYXRlKHsga2V5U2l6ZTogOCwgaXRlcmF0aW9uczogMTAwMCB9KTtcblx0ICAgICAgICAgKi9cblx0ICAgICAgICBpbml0OiBmdW5jdGlvbiAoY2ZnKSB7XG5cdCAgICAgICAgICAgIHRoaXMuY2ZnID0gdGhpcy5jZmcuZXh0ZW5kKGNmZyk7XG5cdCAgICAgICAgfSxcblxuXHQgICAgICAgIC8qKlxuXHQgICAgICAgICAqIERlcml2ZXMgYSBrZXkgZnJvbSBhIHBhc3N3b3JkLlxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogQHBhcmFtIHtXb3JkQXJyYXl8c3RyaW5nfSBwYXNzd29yZCBUaGUgcGFzc3dvcmQuXG5cdCAgICAgICAgICogQHBhcmFtIHtXb3JkQXJyYXl8c3RyaW5nfSBzYWx0IEEgc2FsdC5cblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqIEByZXR1cm4ge1dvcmRBcnJheX0gVGhlIGRlcml2ZWQga2V5LlxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogQGV4YW1wbGVcblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqICAgICB2YXIga2V5ID0ga2RmLmNvbXB1dGUocGFzc3dvcmQsIHNhbHQpO1xuXHQgICAgICAgICAqL1xuXHQgICAgICAgIGNvbXB1dGU6IGZ1bmN0aW9uIChwYXNzd29yZCwgc2FsdCkge1xuXHQgICAgICAgICAgICB2YXIgYmxvY2s7XG5cblx0ICAgICAgICAgICAgLy8gU2hvcnRjdXRcblx0ICAgICAgICAgICAgdmFyIGNmZyA9IHRoaXMuY2ZnO1xuXG5cdCAgICAgICAgICAgIC8vIEluaXQgaGFzaGVyXG5cdCAgICAgICAgICAgIHZhciBoYXNoZXIgPSBjZmcuaGFzaGVyLmNyZWF0ZSgpO1xuXG5cdCAgICAgICAgICAgIC8vIEluaXRpYWwgdmFsdWVzXG5cdCAgICAgICAgICAgIHZhciBkZXJpdmVkS2V5ID0gV29yZEFycmF5LmNyZWF0ZSgpO1xuXG5cdCAgICAgICAgICAgIC8vIFNob3J0Y3V0c1xuXHQgICAgICAgICAgICB2YXIgZGVyaXZlZEtleVdvcmRzID0gZGVyaXZlZEtleS53b3Jkcztcblx0ICAgICAgICAgICAgdmFyIGtleVNpemUgPSBjZmcua2V5U2l6ZTtcblx0ICAgICAgICAgICAgdmFyIGl0ZXJhdGlvbnMgPSBjZmcuaXRlcmF0aW9ucztcblxuXHQgICAgICAgICAgICAvLyBHZW5lcmF0ZSBrZXlcblx0ICAgICAgICAgICAgd2hpbGUgKGRlcml2ZWRLZXlXb3Jkcy5sZW5ndGggPCBrZXlTaXplKSB7XG5cdCAgICAgICAgICAgICAgICBpZiAoYmxvY2spIHtcblx0ICAgICAgICAgICAgICAgICAgICBoYXNoZXIudXBkYXRlKGJsb2NrKTtcblx0ICAgICAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgICAgIGJsb2NrID0gaGFzaGVyLnVwZGF0ZShwYXNzd29yZCkuZmluYWxpemUoc2FsdCk7XG5cdCAgICAgICAgICAgICAgICBoYXNoZXIucmVzZXQoKTtcblxuXHQgICAgICAgICAgICAgICAgLy8gSXRlcmF0aW9uc1xuXHQgICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDE7IGkgPCBpdGVyYXRpb25zOyBpKyspIHtcblx0ICAgICAgICAgICAgICAgICAgICBibG9jayA9IGhhc2hlci5maW5hbGl6ZShibG9jayk7XG5cdCAgICAgICAgICAgICAgICAgICAgaGFzaGVyLnJlc2V0KCk7XG5cdCAgICAgICAgICAgICAgICB9XG5cblx0ICAgICAgICAgICAgICAgIGRlcml2ZWRLZXkuY29uY2F0KGJsb2NrKTtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICBkZXJpdmVkS2V5LnNpZ0J5dGVzID0ga2V5U2l6ZSAqIDQ7XG5cblx0ICAgICAgICAgICAgcmV0dXJuIGRlcml2ZWRLZXk7XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cblx0ICAgIC8qKlxuXHQgICAgICogRGVyaXZlcyBhIGtleSBmcm9tIGEgcGFzc3dvcmQuXG5cdCAgICAgKlxuXHQgICAgICogQHBhcmFtIHtXb3JkQXJyYXl8c3RyaW5nfSBwYXNzd29yZCBUaGUgcGFzc3dvcmQuXG5cdCAgICAgKiBAcGFyYW0ge1dvcmRBcnJheXxzdHJpbmd9IHNhbHQgQSBzYWx0LlxuXHQgICAgICogQHBhcmFtIHtPYmplY3R9IGNmZyAoT3B0aW9uYWwpIFRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgdG8gdXNlIGZvciB0aGlzIGNvbXB1dGF0aW9uLlxuXHQgICAgICpcblx0ICAgICAqIEByZXR1cm4ge1dvcmRBcnJheX0gVGhlIGRlcml2ZWQga2V5LlxuXHQgICAgICpcblx0ICAgICAqIEBzdGF0aWNcblx0ICAgICAqXG5cdCAgICAgKiBAZXhhbXBsZVxuXHQgICAgICpcblx0ICAgICAqICAgICB2YXIga2V5ID0gQ3J5cHRvSlMuRXZwS0RGKHBhc3N3b3JkLCBzYWx0KTtcblx0ICAgICAqICAgICB2YXIga2V5ID0gQ3J5cHRvSlMuRXZwS0RGKHBhc3N3b3JkLCBzYWx0LCB7IGtleVNpemU6IDggfSk7XG5cdCAgICAgKiAgICAgdmFyIGtleSA9IENyeXB0b0pTLkV2cEtERihwYXNzd29yZCwgc2FsdCwgeyBrZXlTaXplOiA4LCBpdGVyYXRpb25zOiAxMDAwIH0pO1xuXHQgICAgICovXG5cdCAgICBDLkV2cEtERiA9IGZ1bmN0aW9uIChwYXNzd29yZCwgc2FsdCwgY2ZnKSB7XG5cdCAgICAgICAgcmV0dXJuIEV2cEtERi5jcmVhdGUoY2ZnKS5jb21wdXRlKHBhc3N3b3JkLCBzYWx0KTtcblx0ICAgIH07XG5cdH0oKSk7XG5cblxuXHRyZXR1cm4gQ3J5cHRvSlMuRXZwS0RGO1xuXG59KSk7Il0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///39506\n")},39606:(__unused_webpack_module,exports)=>{"use strict";eval("var __webpack_unused_export__;\n\n\n__webpack_unused_export__ = ({\n value: true\n});\nvar createChangeEmitter = exports.F = function createChangeEmitter() {\n var currentListeners = [];\n var nextListeners = currentListeners;\n\n function ensureCanMutateNextListeners() {\n if (nextListeners === currentListeners) {\n nextListeners = currentListeners.slice();\n }\n }\n\n function listen(listener) {\n if (typeof listener !== 'function') {\n throw new Error('Expected listener to be a function.');\n }\n\n var isSubscribed = true;\n\n ensureCanMutateNextListeners();\n nextListeners.push(listener);\n\n return function () {\n if (!isSubscribed) {\n return;\n }\n\n isSubscribed = false;\n\n ensureCanMutateNextListeners();\n var index = nextListeners.indexOf(listener);\n nextListeners.splice(index, 1);\n };\n }\n\n function emit() {\n currentListeners = nextListeners;\n var listeners = currentListeners;\n for (var i = 0; i < listeners.length; i++) {\n listeners[i].apply(listeners, arguments);\n }\n }\n\n return {\n listen: listen,\n emit: emit\n };\n};//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMzk2MDYuanMiLCJtYXBwaW5ncyI6IjtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL2l0Zy1uZXh0Z2VuLWZyb250ZW5kLy4vbm9kZV9tb2R1bGVzL2NoYW5nZS1lbWl0dGVyL2xpYi9pbmRleC5qcz9jNjY5Il0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbnZhciBjcmVhdGVDaGFuZ2VFbWl0dGVyID0gZXhwb3J0cy5jcmVhdGVDaGFuZ2VFbWl0dGVyID0gZnVuY3Rpb24gY3JlYXRlQ2hhbmdlRW1pdHRlcigpIHtcbiAgdmFyIGN1cnJlbnRMaXN0ZW5lcnMgPSBbXTtcbiAgdmFyIG5leHRMaXN0ZW5lcnMgPSBjdXJyZW50TGlzdGVuZXJzO1xuXG4gIGZ1bmN0aW9uIGVuc3VyZUNhbk11dGF0ZU5leHRMaXN0ZW5lcnMoKSB7XG4gICAgaWYgKG5leHRMaXN0ZW5lcnMgPT09IGN1cnJlbnRMaXN0ZW5lcnMpIHtcbiAgICAgIG5leHRMaXN0ZW5lcnMgPSBjdXJyZW50TGlzdGVuZXJzLnNsaWNlKCk7XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gbGlzdGVuKGxpc3RlbmVyKSB7XG4gICAgaWYgKHR5cGVvZiBsaXN0ZW5lciAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdFeHBlY3RlZCBsaXN0ZW5lciB0byBiZSBhIGZ1bmN0aW9uLicpO1xuICAgIH1cblxuICAgIHZhciBpc1N1YnNjcmliZWQgPSB0cnVlO1xuXG4gICAgZW5zdXJlQ2FuTXV0YXRlTmV4dExpc3RlbmVycygpO1xuICAgIG5leHRMaXN0ZW5lcnMucHVzaChsaXN0ZW5lcik7XG5cbiAgICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgICAgaWYgKCFpc1N1YnNjcmliZWQpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBpc1N1YnNjcmliZWQgPSBmYWxzZTtcblxuICAgICAgZW5zdXJlQ2FuTXV0YXRlTmV4dExpc3RlbmVycygpO1xuICAgICAgdmFyIGluZGV4ID0gbmV4dExpc3RlbmVycy5pbmRleE9mKGxpc3RlbmVyKTtcbiAgICAgIG5leHRMaXN0ZW5lcnMuc3BsaWNlKGluZGV4LCAxKTtcbiAgICB9O1xuICB9XG5cbiAgZnVuY3Rpb24gZW1pdCgpIHtcbiAgICBjdXJyZW50TGlzdGVuZXJzID0gbmV4dExpc3RlbmVycztcbiAgICB2YXIgbGlzdGVuZXJzID0gY3VycmVudExpc3RlbmVycztcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxpc3RlbmVycy5sZW5ndGg7IGkrKykge1xuICAgICAgbGlzdGVuZXJzW2ldLmFwcGx5KGxpc3RlbmVycywgYXJndW1lbnRzKTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4ge1xuICAgIGxpc3RlbjogbGlzdGVuLFxuICAgIGVtaXQ6IGVtaXRcbiAgfTtcbn07Il0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///39606\n")},40343:(I,g,t)=>{"use strict";I.exports=t.p+"19fd7fdeca30fed02748.png"},40345:(module,__unused_webpack_exports,__webpack_require__)=>{eval("module.exports = __webpack_require__(37007).EventEmitter;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNDAzNDUuanMiLCJtYXBwaW5ncyI6IkFBQUEiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9pdGctbmV4dGdlbi1mcm9udGVuZC8uL25vZGVfbW9kdWxlcy9yZWFkYWJsZS1zdHJlYW0vbGliL2ludGVybmFsL3N0cmVhbXMvc3RyZWFtLWJyb3dzZXIuanM/NDI5YiJdLCJzb3VyY2VzQ29udGVudCI6WyJtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoJ2V2ZW50cycpLkV2ZW50RW1pdHRlcjtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///40345\n")},40748:function(__unused_webpack_module,__unused_webpack_exports,__webpack_require__){eval("//! moment.js locale configuration\n//! locale : Swahili [sw]\n//! author : Fahad Kassim : https://github.com/fadsel\n\n;(function (global, factory) {\n true ? factory(__webpack_require__(95093)) :\n 0\n}(this, (function (moment) { 'use strict';\n\n //! moment.js locale configuration\n\n var sw = moment.defineLocale('sw', {\n months: 'Januari_Februari_Machi_Aprili_Mei_Juni_Julai_Agosti_Septemba_Oktoba_Novemba_Desemba'.split(\n '_'\n ),\n monthsShort: 'Jan_Feb_Mac_Apr_Mei_Jun_Jul_Ago_Sep_Okt_Nov_Des'.split('_'),\n weekdays:\n 'Jumapili_Jumatatu_Jumanne_Jumatano_Alhamisi_Ijumaa_Jumamosi'.split(\n '_'\n ),\n weekdaysShort: 'Jpl_Jtat_Jnne_Jtan_Alh_Ijm_Jmos'.split('_'),\n weekdaysMin: 'J2_J3_J4_J5_Al_Ij_J1'.split('_'),\n weekdaysParseExact: true,\n longDateFormat: {\n LT: 'hh:mm A',\n LTS: 'HH:mm:ss',\n L: 'DD.MM.YYYY',\n LL: 'D MMMM YYYY',\n LLL: 'D MMMM YYYY HH:mm',\n LLLL: 'dddd, D MMMM YYYY HH:mm',\n },\n calendar: {\n sameDay: '[leo saa] LT',\n nextDay: '[kesho saa] LT',\n nextWeek: '[wiki ijayo] dddd [saat] LT',\n lastDay: '[jana] LT',\n lastWeek: '[wiki iliyopita] dddd [saat] LT',\n sameElse: 'L',\n },\n relativeTime: {\n future: '%s baadaye',\n past: 'tokea %s',\n s: 'hivi punde',\n ss: 'sekunde %d',\n m: 'dakika moja',\n mm: 'dakika %d',\n h: 'saa limoja',\n hh: 'masaa %d',\n d: 'siku moja',\n dd: 'siku %d',\n M: 'mwezi mmoja',\n MM: 'miezi %d',\n y: 'mwaka mmoja',\n yy: 'miaka %d',\n },\n week: {\n dow: 1, // Monday is the first day of the week.\n doy: 7, // The week that contains Jan 7th is the first week of the year.\n },\n });\n\n return sw;\n\n})));\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNDA3NDguanMiLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9pdGctbmV4dGdlbi1mcm9udGVuZC8uL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL3N3LmpzPzc0ZGMiXSwic291cmNlc0NvbnRlbnQiOlsiLy8hIG1vbWVudC5qcyBsb2NhbGUgY29uZmlndXJhdGlvblxuLy8hIGxvY2FsZSA6IFN3YWhpbGkgW3N3XVxuLy8hIGF1dGhvciA6IEZhaGFkIEthc3NpbSA6IGh0dHBzOi8vZ2l0aHViLmNvbS9mYWRzZWxcblxuOyhmdW5jdGlvbiAoZ2xvYmFsLCBmYWN0b3J5KSB7XG4gICB0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcgJiYgdHlwZW9mIG1vZHVsZSAhPT0gJ3VuZGVmaW5lZCdcbiAgICAgICAmJiB0eXBlb2YgcmVxdWlyZSA9PT0gJ2Z1bmN0aW9uJyA/IGZhY3RvcnkocmVxdWlyZSgnLi4vbW9tZW50JykpIDpcbiAgIHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgZGVmaW5lLmFtZCA/IGRlZmluZShbJy4uL21vbWVudCddLCBmYWN0b3J5KSA6XG4gICBmYWN0b3J5KGdsb2JhbC5tb21lbnQpXG59KHRoaXMsIChmdW5jdGlvbiAobW9tZW50KSB7ICd1c2Ugc3RyaWN0JztcblxuICAgIC8vISBtb21lbnQuanMgbG9jYWxlIGNvbmZpZ3VyYXRpb25cblxuICAgIHZhciBzdyA9IG1vbWVudC5kZWZpbmVMb2NhbGUoJ3N3Jywge1xuICAgICAgICBtb250aHM6ICdKYW51YXJpX0ZlYnJ1YXJpX01hY2hpX0FwcmlsaV9NZWlfSnVuaV9KdWxhaV9BZ29zdGlfU2VwdGVtYmFfT2t0b2JhX05vdmVtYmFfRGVzZW1iYScuc3BsaXQoXG4gICAgICAgICAgICAnXydcbiAgICAgICAgKSxcbiAgICAgICAgbW9udGhzU2hvcnQ6ICdKYW5fRmViX01hY19BcHJfTWVpX0p1bl9KdWxfQWdvX1NlcF9Pa3RfTm92X0Rlcycuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXM6XG4gICAgICAgICAgICAnSnVtYXBpbGlfSnVtYXRhdHVfSnVtYW5uZV9KdW1hdGFub19BbGhhbWlzaV9JanVtYWFfSnVtYW1vc2knLnNwbGl0KFxuICAgICAgICAgICAgICAgICdfJ1xuICAgICAgICAgICAgKSxcbiAgICAgICAgd2Vla2RheXNTaG9ydDogJ0pwbF9KdGF0X0pubmVfSnRhbl9BbGhfSWptX0ptb3MnLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzTWluOiAnSjJfSjNfSjRfSjVfQWxfSWpfSjEnLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzUGFyc2VFeGFjdDogdHJ1ZSxcbiAgICAgICAgbG9uZ0RhdGVGb3JtYXQ6IHtcbiAgICAgICAgICAgIExUOiAnaGg6bW0gQScsXG4gICAgICAgICAgICBMVFM6ICdISDptbTpzcycsXG4gICAgICAgICAgICBMOiAnREQuTU0uWVlZWScsXG4gICAgICAgICAgICBMTDogJ0QgTU1NTSBZWVlZJyxcbiAgICAgICAgICAgIExMTDogJ0QgTU1NTSBZWVlZIEhIOm1tJyxcbiAgICAgICAgICAgIExMTEw6ICdkZGRkLCBEIE1NTU0gWVlZWSBISDptbScsXG4gICAgICAgIH0sXG4gICAgICAgIGNhbGVuZGFyOiB7XG4gICAgICAgICAgICBzYW1lRGF5OiAnW2xlbyBzYWFdIExUJyxcbiAgICAgICAgICAgIG5leHREYXk6ICdba2VzaG8gc2FhXSBMVCcsXG4gICAgICAgICAgICBuZXh0V2VlazogJ1t3aWtpIGlqYXlvXSBkZGRkIFtzYWF0XSBMVCcsXG4gICAgICAgICAgICBsYXN0RGF5OiAnW2phbmFdIExUJyxcbiAgICAgICAgICAgIGxhc3RXZWVrOiAnW3dpa2kgaWxpeW9waXRhXSBkZGRkIFtzYWF0XSBMVCcsXG4gICAgICAgICAgICBzYW1lRWxzZTogJ0wnLFxuICAgICAgICB9LFxuICAgICAgICByZWxhdGl2ZVRpbWU6IHtcbiAgICAgICAgICAgIGZ1dHVyZTogJyVzIGJhYWRheWUnLFxuICAgICAgICAgICAgcGFzdDogJ3Rva2VhICVzJyxcbiAgICAgICAgICAgIHM6ICdoaXZpIHB1bmRlJyxcbiAgICAgICAgICAgIHNzOiAnc2VrdW5kZSAlZCcsXG4gICAgICAgICAgICBtOiAnZGFraWthIG1vamEnLFxuICAgICAgICAgICAgbW06ICdkYWtpa2EgJWQnLFxuICAgICAgICAgICAgaDogJ3NhYSBsaW1vamEnLFxuICAgICAgICAgICAgaGg6ICdtYXNhYSAlZCcsXG4gICAgICAgICAgICBkOiAnc2lrdSBtb2phJyxcbiAgICAgICAgICAgIGRkOiAnc2lrdSAlZCcsXG4gICAgICAgICAgICBNOiAnbXdlemkgbW1vamEnLFxuICAgICAgICAgICAgTU06ICdtaWV6aSAlZCcsXG4gICAgICAgICAgICB5OiAnbXdha2EgbW1vamEnLFxuICAgICAgICAgICAgeXk6ICdtaWFrYSAlZCcsXG4gICAgICAgIH0sXG4gICAgICAgIHdlZWs6IHtcbiAgICAgICAgICAgIGRvdzogMSwgLy8gTW9uZGF5IGlzIHRoZSBmaXJzdCBkYXkgb2YgdGhlIHdlZWsuXG4gICAgICAgICAgICBkb3k6IDcsIC8vIFRoZSB3ZWVrIHRoYXQgY29udGFpbnMgSmFuIDd0aCBpcyB0aGUgZmlyc3Qgd2VlayBvZiB0aGUgeWVhci5cbiAgICAgICAgfSxcbiAgICB9KTtcblxuICAgIHJldHVybiBzdztcblxufSkpKTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///40748\n")},40867:(I,g,t)=>{"use strict";I.exports=t.p+"57407c85fe0c8a9758b3.png"},40955:function(module,exports,__webpack_require__){eval(";(function (root, factory, undef) {\n\tif (true) {\n\t\t// CommonJS\n\t\tmodule.exports = exports = factory(__webpack_require__(19021), __webpack_require__(80754), __webpack_require__(84636), __webpack_require__(39506), __webpack_require__(57165));\n\t}\n\telse {}\n}(this, function (CryptoJS) {\n\n\t(function () {\n\t // Shortcuts\n\t var C = CryptoJS;\n\t var C_lib = C.lib;\n\t var BlockCipher = C_lib.BlockCipher;\n\t var C_algo = C.algo;\n\n\t // Lookup tables\n\t var SBOX = [];\n\t var INV_SBOX = [];\n\t var SUB_MIX_0 = [];\n\t var SUB_MIX_1 = [];\n\t var SUB_MIX_2 = [];\n\t var SUB_MIX_3 = [];\n\t var INV_SUB_MIX_0 = [];\n\t var INV_SUB_MIX_1 = [];\n\t var INV_SUB_MIX_2 = [];\n\t var INV_SUB_MIX_3 = [];\n\n\t // Compute lookup tables\n\t (function () {\n\t // Compute double table\n\t var d = [];\n\t for (var i = 0; i < 256; i++) {\n\t if (i < 128) {\n\t d[i] = i << 1;\n\t } else {\n\t d[i] = (i << 1) ^ 0x11b;\n\t }\n\t }\n\n\t // Walk GF(2^8)\n\t var x = 0;\n\t var xi = 0;\n\t for (var i = 0; i < 256; i++) {\n\t // Compute sbox\n\t var sx = xi ^ (xi << 1) ^ (xi << 2) ^ (xi << 3) ^ (xi << 4);\n\t sx = (sx >>> 8) ^ (sx & 0xff) ^ 0x63;\n\t SBOX[x] = sx;\n\t INV_SBOX[sx] = x;\n\n\t // Compute multiplication\n\t var x2 = d[x];\n\t var x4 = d[x2];\n\t var x8 = d[x4];\n\n\t // Compute sub bytes, mix columns tables\n\t var t = (d[sx] * 0x101) ^ (sx * 0x1010100);\n\t SUB_MIX_0[x] = (t << 24) | (t >>> 8);\n\t SUB_MIX_1[x] = (t << 16) | (t >>> 16);\n\t SUB_MIX_2[x] = (t << 8) | (t >>> 24);\n\t SUB_MIX_3[x] = t;\n\n\t // Compute inv sub bytes, inv mix columns tables\n\t var t = (x8 * 0x1010101) ^ (x4 * 0x10001) ^ (x2 * 0x101) ^ (x * 0x1010100);\n\t INV_SUB_MIX_0[sx] = (t << 24) | (t >>> 8);\n\t INV_SUB_MIX_1[sx] = (t << 16) | (t >>> 16);\n\t INV_SUB_MIX_2[sx] = (t << 8) | (t >>> 24);\n\t INV_SUB_MIX_3[sx] = t;\n\n\t // Compute next counter\n\t if (!x) {\n\t x = xi = 1;\n\t } else {\n\t x = x2 ^ d[d[d[x8 ^ x2]]];\n\t xi ^= d[d[xi]];\n\t }\n\t }\n\t }());\n\n\t // Precomputed Rcon lookup\n\t var RCON = [0x00, 0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80, 0x1b, 0x36];\n\n\t /**\n\t * AES block cipher algorithm.\n\t */\n\t var AES = C_algo.AES = BlockCipher.extend({\n\t _doReset: function () {\n\t var t;\n\n\t // Skip reset of nRounds has been set before and key did not change\n\t if (this._nRounds && this._keyPriorReset === this._key) {\n\t return;\n\t }\n\n\t // Shortcuts\n\t var key = this._keyPriorReset = this._key;\n\t var keyWords = key.words;\n\t var keySize = key.sigBytes / 4;\n\n\t // Compute number of rounds\n\t var nRounds = this._nRounds = keySize + 6;\n\n\t // Compute number of key schedule rows\n\t var ksRows = (nRounds + 1) * 4;\n\n\t // Compute key schedule\n\t var keySchedule = this._keySchedule = [];\n\t for (var ksRow = 0; ksRow < ksRows; ksRow++) {\n\t if (ksRow < keySize) {\n\t keySchedule[ksRow] = keyWords[ksRow];\n\t } else {\n\t t = keySchedule[ksRow - 1];\n\n\t if (!(ksRow % keySize)) {\n\t // Rot word\n\t t = (t << 8) | (t >>> 24);\n\n\t // Sub word\n\t t = (SBOX[t >>> 24] << 24) | (SBOX[(t >>> 16) & 0xff] << 16) | (SBOX[(t >>> 8) & 0xff] << 8) | SBOX[t & 0xff];\n\n\t // Mix Rcon\n\t t ^= RCON[(ksRow / keySize) | 0] << 24;\n\t } else if (keySize > 6 && ksRow % keySize == 4) {\n\t // Sub word\n\t t = (SBOX[t >>> 24] << 24) | (SBOX[(t >>> 16) & 0xff] << 16) | (SBOX[(t >>> 8) & 0xff] << 8) | SBOX[t & 0xff];\n\t }\n\n\t keySchedule[ksRow] = keySchedule[ksRow - keySize] ^ t;\n\t }\n\t }\n\n\t // Compute inv key schedule\n\t var invKeySchedule = this._invKeySchedule = [];\n\t for (var invKsRow = 0; invKsRow < ksRows; invKsRow++) {\n\t var ksRow = ksRows - invKsRow;\n\n\t if (invKsRow % 4) {\n\t var t = keySchedule[ksRow];\n\t } else {\n\t var t = keySchedule[ksRow - 4];\n\t }\n\n\t if (invKsRow < 4 || ksRow <= 4) {\n\t invKeySchedule[invKsRow] = t;\n\t } else {\n\t invKeySchedule[invKsRow] = INV_SUB_MIX_0[SBOX[t >>> 24]] ^ INV_SUB_MIX_1[SBOX[(t >>> 16) & 0xff]] ^\n\t INV_SUB_MIX_2[SBOX[(t >>> 8) & 0xff]] ^ INV_SUB_MIX_3[SBOX[t & 0xff]];\n\t }\n\t }\n\t },\n\n\t encryptBlock: function (M, offset) {\n\t this._doCryptBlock(M, offset, this._keySchedule, SUB_MIX_0, SUB_MIX_1, SUB_MIX_2, SUB_MIX_3, SBOX);\n\t },\n\n\t decryptBlock: function (M, offset) {\n\t // Swap 2nd and 4th rows\n\t var t = M[offset + 1];\n\t M[offset + 1] = M[offset + 3];\n\t M[offset + 3] = t;\n\n\t this._doCryptBlock(M, offset, this._invKeySchedule, INV_SUB_MIX_0, INV_SUB_MIX_1, INV_SUB_MIX_2, INV_SUB_MIX_3, INV_SBOX);\n\n\t // Inv swap 2nd and 4th rows\n\t var t = M[offset + 1];\n\t M[offset + 1] = M[offset + 3];\n\t M[offset + 3] = t;\n\t },\n\n\t _doCryptBlock: function (M, offset, keySchedule, SUB_MIX_0, SUB_MIX_1, SUB_MIX_2, SUB_MIX_3, SBOX) {\n\t // Shortcut\n\t var nRounds = this._nRounds;\n\n\t // Get input, add round key\n\t var s0 = M[offset] ^ keySchedule[0];\n\t var s1 = M[offset + 1] ^ keySchedule[1];\n\t var s2 = M[offset + 2] ^ keySchedule[2];\n\t var s3 = M[offset + 3] ^ keySchedule[3];\n\n\t // Key schedule row counter\n\t var ksRow = 4;\n\n\t // Rounds\n\t for (var round = 1; round < nRounds; round++) {\n\t // Shift rows, sub bytes, mix columns, add round key\n\t var t0 = SUB_MIX_0[s0 >>> 24] ^ SUB_MIX_1[(s1 >>> 16) & 0xff] ^ SUB_MIX_2[(s2 >>> 8) & 0xff] ^ SUB_MIX_3[s3 & 0xff] ^ keySchedule[ksRow++];\n\t var t1 = SUB_MIX_0[s1 >>> 24] ^ SUB_MIX_1[(s2 >>> 16) & 0xff] ^ SUB_MIX_2[(s3 >>> 8) & 0xff] ^ SUB_MIX_3[s0 & 0xff] ^ keySchedule[ksRow++];\n\t var t2 = SUB_MIX_0[s2 >>> 24] ^ SUB_MIX_1[(s3 >>> 16) & 0xff] ^ SUB_MIX_2[(s0 >>> 8) & 0xff] ^ SUB_MIX_3[s1 & 0xff] ^ keySchedule[ksRow++];\n\t var t3 = SUB_MIX_0[s3 >>> 24] ^ SUB_MIX_1[(s0 >>> 16) & 0xff] ^ SUB_MIX_2[(s1 >>> 8) & 0xff] ^ SUB_MIX_3[s2 & 0xff] ^ keySchedule[ksRow++];\n\n\t // Update state\n\t s0 = t0;\n\t s1 = t1;\n\t s2 = t2;\n\t s3 = t3;\n\t }\n\n\t // Shift rows, sub bytes, add round key\n\t var t0 = ((SBOX[s0 >>> 24] << 24) | (SBOX[(s1 >>> 16) & 0xff] << 16) | (SBOX[(s2 >>> 8) & 0xff] << 8) | SBOX[s3 & 0xff]) ^ keySchedule[ksRow++];\n\t var t1 = ((SBOX[s1 >>> 24] << 24) | (SBOX[(s2 >>> 16) & 0xff] << 16) | (SBOX[(s3 >>> 8) & 0xff] << 8) | SBOX[s0 & 0xff]) ^ keySchedule[ksRow++];\n\t var t2 = ((SBOX[s2 >>> 24] << 24) | (SBOX[(s3 >>> 16) & 0xff] << 16) | (SBOX[(s0 >>> 8) & 0xff] << 8) | SBOX[s1 & 0xff]) ^ keySchedule[ksRow++];\n\t var t3 = ((SBOX[s3 >>> 24] << 24) | (SBOX[(s0 >>> 16) & 0xff] << 16) | (SBOX[(s1 >>> 8) & 0xff] << 8) | SBOX[s2 & 0xff]) ^ keySchedule[ksRow++];\n\n\t // Set output\n\t M[offset] = t0;\n\t M[offset + 1] = t1;\n\t M[offset + 2] = t2;\n\t M[offset + 3] = t3;\n\t },\n\n\t keySize: 256/32\n\t });\n\n\t /**\n\t * Shortcut functions to the cipher's object interface.\n\t *\n\t * @example\n\t *\n\t * var ciphertext = CryptoJS.AES.encrypt(message, key, cfg);\n\t * var plaintext = CryptoJS.AES.decrypt(ciphertext, key, cfg);\n\t */\n\t C.AES = BlockCipher._createHelper(AES);\n\t}());\n\n\n\treturn CryptoJS.AES;\n\n}));//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNDA5NTUuanMiLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBUUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL2l0Zy1uZXh0Z2VuLWZyb250ZW5kLy4vbm9kZV9tb2R1bGVzL2NyeXB0by1qcy9hZXMuanM/YzE5OCJdLCJzb3VyY2VzQ29udGVudCI6WyI7KGZ1bmN0aW9uIChyb290LCBmYWN0b3J5LCB1bmRlZikge1xuXHRpZiAodHlwZW9mIGV4cG9ydHMgPT09IFwib2JqZWN0XCIpIHtcblx0XHQvLyBDb21tb25KU1xuXHRcdG1vZHVsZS5leHBvcnRzID0gZXhwb3J0cyA9IGZhY3RvcnkocmVxdWlyZShcIi4vY29yZVwiKSwgcmVxdWlyZShcIi4vZW5jLWJhc2U2NFwiKSwgcmVxdWlyZShcIi4vbWQ1XCIpLCByZXF1aXJlKFwiLi9ldnBrZGZcIiksIHJlcXVpcmUoXCIuL2NpcGhlci1jb3JlXCIpKTtcblx0fVxuXHRlbHNlIGlmICh0eXBlb2YgZGVmaW5lID09PSBcImZ1bmN0aW9uXCIgJiYgZGVmaW5lLmFtZCkge1xuXHRcdC8vIEFNRFxuXHRcdGRlZmluZShbXCIuL2NvcmVcIiwgXCIuL2VuYy1iYXNlNjRcIiwgXCIuL21kNVwiLCBcIi4vZXZwa2RmXCIsIFwiLi9jaXBoZXItY29yZVwiXSwgZmFjdG9yeSk7XG5cdH1cblx0ZWxzZSB7XG5cdFx0Ly8gR2xvYmFsIChicm93c2VyKVxuXHRcdGZhY3Rvcnkocm9vdC5DcnlwdG9KUyk7XG5cdH1cbn0odGhpcywgZnVuY3Rpb24gKENyeXB0b0pTKSB7XG5cblx0KGZ1bmN0aW9uICgpIHtcblx0ICAgIC8vIFNob3J0Y3V0c1xuXHQgICAgdmFyIEMgPSBDcnlwdG9KUztcblx0ICAgIHZhciBDX2xpYiA9IEMubGliO1xuXHQgICAgdmFyIEJsb2NrQ2lwaGVyID0gQ19saWIuQmxvY2tDaXBoZXI7XG5cdCAgICB2YXIgQ19hbGdvID0gQy5hbGdvO1xuXG5cdCAgICAvLyBMb29rdXAgdGFibGVzXG5cdCAgICB2YXIgU0JPWCA9IFtdO1xuXHQgICAgdmFyIElOVl9TQk9YID0gW107XG5cdCAgICB2YXIgU1VCX01JWF8wID0gW107XG5cdCAgICB2YXIgU1VCX01JWF8xID0gW107XG5cdCAgICB2YXIgU1VCX01JWF8yID0gW107XG5cdCAgICB2YXIgU1VCX01JWF8zID0gW107XG5cdCAgICB2YXIgSU5WX1NVQl9NSVhfMCA9IFtdO1xuXHQgICAgdmFyIElOVl9TVUJfTUlYXzEgPSBbXTtcblx0ICAgIHZhciBJTlZfU1VCX01JWF8yID0gW107XG5cdCAgICB2YXIgSU5WX1NVQl9NSVhfMyA9IFtdO1xuXG5cdCAgICAvLyBDb21wdXRlIGxvb2t1cCB0YWJsZXNcblx0ICAgIChmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgLy8gQ29tcHV0ZSBkb3VibGUgdGFibGVcblx0ICAgICAgICB2YXIgZCA9IFtdO1xuXHQgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgMjU2OyBpKyspIHtcblx0ICAgICAgICAgICAgaWYgKGkgPCAxMjgpIHtcblx0ICAgICAgICAgICAgICAgIGRbaV0gPSBpIDw8IDE7XG5cdCAgICAgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICAgICAgICBkW2ldID0gKGkgPDwgMSkgXiAweDExYjtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgIH1cblxuXHQgICAgICAgIC8vIFdhbGsgR0YoMl44KVxuXHQgICAgICAgIHZhciB4ID0gMDtcblx0ICAgICAgICB2YXIgeGkgPSAwO1xuXHQgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgMjU2OyBpKyspIHtcblx0ICAgICAgICAgICAgLy8gQ29tcHV0ZSBzYm94XG5cdCAgICAgICAgICAgIHZhciBzeCA9IHhpIF4gKHhpIDw8IDEpIF4gKHhpIDw8IDIpIF4gKHhpIDw8IDMpIF4gKHhpIDw8IDQpO1xuXHQgICAgICAgICAgICBzeCA9IChzeCA+Pj4gOCkgXiAoc3ggJiAweGZmKSBeIDB4NjM7XG5cdCAgICAgICAgICAgIFNCT1hbeF0gPSBzeDtcblx0ICAgICAgICAgICAgSU5WX1NCT1hbc3hdID0geDtcblxuXHQgICAgICAgICAgICAvLyBDb21wdXRlIG11bHRpcGxpY2F0aW9uXG5cdCAgICAgICAgICAgIHZhciB4MiA9IGRbeF07XG5cdCAgICAgICAgICAgIHZhciB4NCA9IGRbeDJdO1xuXHQgICAgICAgICAgICB2YXIgeDggPSBkW3g0XTtcblxuXHQgICAgICAgICAgICAvLyBDb21wdXRlIHN1YiBieXRlcywgbWl4IGNvbHVtbnMgdGFibGVzXG5cdCAgICAgICAgICAgIHZhciB0ID0gKGRbc3hdICogMHgxMDEpIF4gKHN4ICogMHgxMDEwMTAwKTtcblx0ICAgICAgICAgICAgU1VCX01JWF8wW3hdID0gKHQgPDwgMjQpIHwgKHQgPj4+IDgpO1xuXHQgICAgICAgICAgICBTVUJfTUlYXzFbeF0gPSAodCA8PCAxNikgfCAodCA+Pj4gMTYpO1xuXHQgICAgICAgICAgICBTVUJfTUlYXzJbeF0gPSAodCA8PCA4KSAgfCAodCA+Pj4gMjQpO1xuXHQgICAgICAgICAgICBTVUJfTUlYXzNbeF0gPSB0O1xuXG5cdCAgICAgICAgICAgIC8vIENvbXB1dGUgaW52IHN1YiBieXRlcywgaW52IG1peCBjb2x1bW5zIHRhYmxlc1xuXHQgICAgICAgICAgICB2YXIgdCA9ICh4OCAqIDB4MTAxMDEwMSkgXiAoeDQgKiAweDEwMDAxKSBeICh4MiAqIDB4MTAxKSBeICh4ICogMHgxMDEwMTAwKTtcblx0ICAgICAgICAgICAgSU5WX1NVQl9NSVhfMFtzeF0gPSAodCA8PCAyNCkgfCAodCA+Pj4gOCk7XG5cdCAgICAgICAgICAgIElOVl9TVUJfTUlYXzFbc3hdID0gKHQgPDwgMTYpIHwgKHQgPj4+IDE2KTtcblx0ICAgICAgICAgICAgSU5WX1NVQl9NSVhfMltzeF0gPSAodCA8PCA4KSAgfCAodCA+Pj4gMjQpO1xuXHQgICAgICAgICAgICBJTlZfU1VCX01JWF8zW3N4XSA9IHQ7XG5cblx0ICAgICAgICAgICAgLy8gQ29tcHV0ZSBuZXh0IGNvdW50ZXJcblx0ICAgICAgICAgICAgaWYgKCF4KSB7XG5cdCAgICAgICAgICAgICAgICB4ID0geGkgPSAxO1xuXHQgICAgICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICAgICAgeCA9IHgyIF4gZFtkW2RbeDggXiB4Ml1dXTtcblx0ICAgICAgICAgICAgICAgIHhpIF49IGRbZFt4aV1dO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgfVxuXHQgICAgfSgpKTtcblxuXHQgICAgLy8gUHJlY29tcHV0ZWQgUmNvbiBsb29rdXBcblx0ICAgIHZhciBSQ09OID0gWzB4MDAsIDB4MDEsIDB4MDIsIDB4MDQsIDB4MDgsIDB4MTAsIDB4MjAsIDB4NDAsIDB4ODAsIDB4MWIsIDB4MzZdO1xuXG5cdCAgICAvKipcblx0ICAgICAqIEFFUyBibG9jayBjaXBoZXIgYWxnb3JpdGhtLlxuXHQgICAgICovXG5cdCAgICB2YXIgQUVTID0gQ19hbGdvLkFFUyA9IEJsb2NrQ2lwaGVyLmV4dGVuZCh7XG5cdCAgICAgICAgX2RvUmVzZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgdmFyIHQ7XG5cblx0ICAgICAgICAgICAgLy8gU2tpcCByZXNldCBvZiBuUm91bmRzIGhhcyBiZWVuIHNldCBiZWZvcmUgYW5kIGtleSBkaWQgbm90IGNoYW5nZVxuXHQgICAgICAgICAgICBpZiAodGhpcy5fblJvdW5kcyAmJiB0aGlzLl9rZXlQcmlvclJlc2V0ID09PSB0aGlzLl9rZXkpIHtcblx0ICAgICAgICAgICAgICAgIHJldHVybjtcblx0ICAgICAgICAgICAgfVxuXG5cdCAgICAgICAgICAgIC8vIFNob3J0Y3V0c1xuXHQgICAgICAgICAgICB2YXIga2V5ID0gdGhpcy5fa2V5UHJpb3JSZXNldCA9IHRoaXMuX2tleTtcblx0ICAgICAgICAgICAgdmFyIGtleVdvcmRzID0ga2V5LndvcmRzO1xuXHQgICAgICAgICAgICB2YXIga2V5U2l6ZSA9IGtleS5zaWdCeXRlcyAvIDQ7XG5cblx0ICAgICAgICAgICAgLy8gQ29tcHV0ZSBudW1iZXIgb2Ygcm91bmRzXG5cdCAgICAgICAgICAgIHZhciBuUm91bmRzID0gdGhpcy5fblJvdW5kcyA9IGtleVNpemUgKyA2O1xuXG5cdCAgICAgICAgICAgIC8vIENvbXB1dGUgbnVtYmVyIG9mIGtleSBzY2hlZHVsZSByb3dzXG5cdCAgICAgICAgICAgIHZhciBrc1Jvd3MgPSAoblJvdW5kcyArIDEpICogNDtcblxuXHQgICAgICAgICAgICAvLyBDb21wdXRlIGtleSBzY2hlZHVsZVxuXHQgICAgICAgICAgICB2YXIga2V5U2NoZWR1bGUgPSB0aGlzLl9rZXlTY2hlZHVsZSA9IFtdO1xuXHQgICAgICAgICAgICBmb3IgKHZhciBrc1JvdyA9IDA7IGtzUm93IDwga3NSb3dzOyBrc1JvdysrKSB7XG5cdCAgICAgICAgICAgICAgICBpZiAoa3NSb3cgPCBrZXlTaXplKSB7XG5cdCAgICAgICAgICAgICAgICAgICAga2V5U2NoZWR1bGVba3NSb3ddID0ga2V5V29yZHNba3NSb3ddO1xuXHQgICAgICAgICAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgICAgICAgICAgICB0ID0ga2V5U2NoZWR1bGVba3NSb3cgLSAxXTtcblxuXHQgICAgICAgICAgICAgICAgICAgIGlmICghKGtzUm93ICUga2V5U2l6ZSkpIHtcblx0ICAgICAgICAgICAgICAgICAgICAgICAgLy8gUm90IHdvcmRcblx0ICAgICAgICAgICAgICAgICAgICAgICAgdCA9ICh0IDw8IDgpIHwgKHQgPj4+IDI0KTtcblxuXHQgICAgICAgICAgICAgICAgICAgICAgICAvLyBTdWIgd29yZFxuXHQgICAgICAgICAgICAgICAgICAgICAgICB0ID0gKFNCT1hbdCA+Pj4gMjRdIDw8IDI0KSB8IChTQk9YWyh0ID4+PiAxNikgJiAweGZmXSA8PCAxNikgfCAoU0JPWFsodCA+Pj4gOCkgJiAweGZmXSA8PCA4KSB8IFNCT1hbdCAmIDB4ZmZdO1xuXG5cdCAgICAgICAgICAgICAgICAgICAgICAgIC8vIE1peCBSY29uXG5cdCAgICAgICAgICAgICAgICAgICAgICAgIHQgXj0gUkNPTlsoa3NSb3cgLyBrZXlTaXplKSB8IDBdIDw8IDI0O1xuXHQgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoa2V5U2l6ZSA+IDYgJiYga3NSb3cgJSBrZXlTaXplID09IDQpIHtcblx0ICAgICAgICAgICAgICAgICAgICAgICAgLy8gU3ViIHdvcmRcblx0ICAgICAgICAgICAgICAgICAgICAgICAgdCA9IChTQk9YW3QgPj4+IDI0XSA8PCAyNCkgfCAoU0JPWFsodCA+Pj4gMTYpICYgMHhmZl0gPDwgMTYpIHwgKFNCT1hbKHQgPj4+IDgpICYgMHhmZl0gPDwgOCkgfCBTQk9YW3QgJiAweGZmXTtcblx0ICAgICAgICAgICAgICAgICAgICB9XG5cblx0ICAgICAgICAgICAgICAgICAgICBrZXlTY2hlZHVsZVtrc1Jvd10gPSBrZXlTY2hlZHVsZVtrc1JvdyAtIGtleVNpemVdIF4gdDtcblx0ICAgICAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgfVxuXG5cdCAgICAgICAgICAgIC8vIENvbXB1dGUgaW52IGtleSBzY2hlZHVsZVxuXHQgICAgICAgICAgICB2YXIgaW52S2V5U2NoZWR1bGUgPSB0aGlzLl9pbnZLZXlTY2hlZHVsZSA9IFtdO1xuXHQgICAgICAgICAgICBmb3IgKHZhciBpbnZLc1JvdyA9IDA7IGludktzUm93IDwga3NSb3dzOyBpbnZLc1JvdysrKSB7XG5cdCAgICAgICAgICAgICAgICB2YXIga3NSb3cgPSBrc1Jvd3MgLSBpbnZLc1JvdztcblxuXHQgICAgICAgICAgICAgICAgaWYgKGludktzUm93ICUgNCkge1xuXHQgICAgICAgICAgICAgICAgICAgIHZhciB0ID0ga2V5U2NoZWR1bGVba3NSb3ddO1xuXHQgICAgICAgICAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgICAgICAgICAgICB2YXIgdCA9IGtleVNjaGVkdWxlW2tzUm93IC0gNF07XG5cdCAgICAgICAgICAgICAgICB9XG5cblx0ICAgICAgICAgICAgICAgIGlmIChpbnZLc1JvdyA8IDQgfHwga3NSb3cgPD0gNCkge1xuXHQgICAgICAgICAgICAgICAgICAgIGludktleVNjaGVkdWxlW2ludktzUm93XSA9IHQ7XG5cdCAgICAgICAgICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICAgICAgICAgIGludktleVNjaGVkdWxlW2ludktzUm93XSA9IElOVl9TVUJfTUlYXzBbU0JPWFt0ID4+PiAyNF1dIF4gSU5WX1NVQl9NSVhfMVtTQk9YWyh0ID4+PiAxNikgJiAweGZmXV0gXlxuXHQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIElOVl9TVUJfTUlYXzJbU0JPWFsodCA+Pj4gOCkgJiAweGZmXV0gXiBJTlZfU1VCX01JWF8zW1NCT1hbdCAmIDB4ZmZdXTtcblx0ICAgICAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgIH0sXG5cblx0ICAgICAgICBlbmNyeXB0QmxvY2s6IGZ1bmN0aW9uIChNLCBvZmZzZXQpIHtcblx0ICAgICAgICAgICAgdGhpcy5fZG9DcnlwdEJsb2NrKE0sIG9mZnNldCwgdGhpcy5fa2V5U2NoZWR1bGUsIFNVQl9NSVhfMCwgU1VCX01JWF8xLCBTVUJfTUlYXzIsIFNVQl9NSVhfMywgU0JPWCk7XG5cdCAgICAgICAgfSxcblxuXHQgICAgICAgIGRlY3J5cHRCbG9jazogZnVuY3Rpb24gKE0sIG9mZnNldCkge1xuXHQgICAgICAgICAgICAvLyBTd2FwIDJuZCBhbmQgNHRoIHJvd3Ncblx0ICAgICAgICAgICAgdmFyIHQgPSBNW29mZnNldCArIDFdO1xuXHQgICAgICAgICAgICBNW29mZnNldCArIDFdID0gTVtvZmZzZXQgKyAzXTtcblx0ICAgICAgICAgICAgTVtvZmZzZXQgKyAzXSA9IHQ7XG5cblx0ICAgICAgICAgICAgdGhpcy5fZG9DcnlwdEJsb2NrKE0sIG9mZnNldCwgdGhpcy5faW52S2V5U2NoZWR1bGUsIElOVl9TVUJfTUlYXzAsIElOVl9TVUJfTUlYXzEsIElOVl9TVUJfTUlYXzIsIElOVl9TVUJfTUlYXzMsIElOVl9TQk9YKTtcblxuXHQgICAgICAgICAgICAvLyBJbnYgc3dhcCAybmQgYW5kIDR0aCByb3dzXG5cdCAgICAgICAgICAgIHZhciB0ID0gTVtvZmZzZXQgKyAxXTtcblx0ICAgICAgICAgICAgTVtvZmZzZXQgKyAxXSA9IE1bb2Zmc2V0ICsgM107XG5cdCAgICAgICAgICAgIE1bb2Zmc2V0ICsgM10gPSB0O1xuXHQgICAgICAgIH0sXG5cblx0ICAgICAgICBfZG9DcnlwdEJsb2NrOiBmdW5jdGlvbiAoTSwgb2Zmc2V0LCBrZXlTY2hlZHVsZSwgU1VCX01JWF8wLCBTVUJfTUlYXzEsIFNVQl9NSVhfMiwgU1VCX01JWF8zLCBTQk9YKSB7XG5cdCAgICAgICAgICAgIC8vIFNob3J0Y3V0XG5cdCAgICAgICAgICAgIHZhciBuUm91bmRzID0gdGhpcy5fblJvdW5kcztcblxuXHQgICAgICAgICAgICAvLyBHZXQgaW5wdXQsIGFkZCByb3VuZCBrZXlcblx0ICAgICAgICAgICAgdmFyIHMwID0gTVtvZmZzZXRdICAgICBeIGtleVNjaGVkdWxlWzBdO1xuXHQgICAgICAgICAgICB2YXIgczEgPSBNW29mZnNldCArIDFdIF4ga2V5U2NoZWR1bGVbMV07XG5cdCAgICAgICAgICAgIHZhciBzMiA9IE1bb2Zmc2V0ICsgMl0gXiBrZXlTY2hlZHVsZVsyXTtcblx0ICAgICAgICAgICAgdmFyIHMzID0gTVtvZmZzZXQgKyAzXSBeIGtleVNjaGVkdWxlWzNdO1xuXG5cdCAgICAgICAgICAgIC8vIEtleSBzY2hlZHVsZSByb3cgY291bnRlclxuXHQgICAgICAgICAgICB2YXIga3NSb3cgPSA0O1xuXG5cdCAgICAgICAgICAgIC8vIFJvdW5kc1xuXHQgICAgICAgICAgICBmb3IgKHZhciByb3VuZCA9IDE7IHJvdW5kIDwgblJvdW5kczsgcm91bmQrKykge1xuXHQgICAgICAgICAgICAgICAgLy8gU2hpZnQgcm93cywgc3ViIGJ5dGVzLCBtaXggY29sdW1ucywgYWRkIHJvdW5kIGtleVxuXHQgICAgICAgICAgICAgICAgdmFyIHQwID0gU1VCX01JWF8wW3MwID4+PiAyNF0gXiBTVUJfTUlYXzFbKHMxID4+PiAxNikgJiAweGZmXSBeIFNVQl9NSVhfMlsoczIgPj4+IDgpICYgMHhmZl0gXiBTVUJfTUlYXzNbczMgJiAweGZmXSBeIGtleVNjaGVkdWxlW2tzUm93KytdO1xuXHQgICAgICAgICAgICAgICAgdmFyIHQxID0gU1VCX01JWF8wW3MxID4+PiAyNF0gXiBTVUJfTUlYXzFbKHMyID4+PiAxNikgJiAweGZmXSBeIFNVQl9NSVhfMlsoczMgPj4+IDgpICYgMHhmZl0gXiBTVUJfTUlYXzNbczAgJiAweGZmXSBeIGtleVNjaGVkdWxlW2tzUm93KytdO1xuXHQgICAgICAgICAgICAgICAgdmFyIHQyID0gU1VCX01JWF8wW3MyID4+PiAyNF0gXiBTVUJfTUlYXzFbKHMzID4+PiAxNikgJiAweGZmXSBeIFNVQl9NSVhfMlsoczAgPj4+IDgpICYgMHhmZl0gXiBTVUJfTUlYXzNbczEgJiAweGZmXSBeIGtleVNjaGVkdWxlW2tzUm93KytdO1xuXHQgICAgICAgICAgICAgICAgdmFyIHQzID0gU1VCX01JWF8wW3MzID4+PiAyNF0gXiBTVUJfTUlYXzFbKHMwID4+PiAxNikgJiAweGZmXSBeIFNVQl9NSVhfMlsoczEgPj4+IDgpICYgMHhmZl0gXiBTVUJfTUlYXzNbczIgJiAweGZmXSBeIGtleVNjaGVkdWxlW2tzUm93KytdO1xuXG5cdCAgICAgICAgICAgICAgICAvLyBVcGRhdGUgc3RhdGVcblx0ICAgICAgICAgICAgICAgIHMwID0gdDA7XG5cdCAgICAgICAgICAgICAgICBzMSA9IHQxO1xuXHQgICAgICAgICAgICAgICAgczIgPSB0Mjtcblx0ICAgICAgICAgICAgICAgIHMzID0gdDM7XG5cdCAgICAgICAgICAgIH1cblxuXHQgICAgICAgICAgICAvLyBTaGlmdCByb3dzLCBzdWIgYnl0ZXMsIGFkZCByb3VuZCBrZXlcblx0ICAgICAgICAgICAgdmFyIHQwID0gKChTQk9YW3MwID4+PiAyNF0gPDwgMjQpIHwgKFNCT1hbKHMxID4+PiAxNikgJiAweGZmXSA8PCAxNikgfCAoU0JPWFsoczIgPj4+IDgpICYgMHhmZl0gPDwgOCkgfCBTQk9YW3MzICYgMHhmZl0pIF4ga2V5U2NoZWR1bGVba3NSb3crK107XG5cdCAgICAgICAgICAgIHZhciB0MSA9ICgoU0JPWFtzMSA+Pj4gMjRdIDw8IDI0KSB8IChTQk9YWyhzMiA+Pj4gMTYpICYgMHhmZl0gPDwgMTYpIHwgKFNCT1hbKHMzID4+PiA4KSAmIDB4ZmZdIDw8IDgpIHwgU0JPWFtzMCAmIDB4ZmZdKSBeIGtleVNjaGVkdWxlW2tzUm93KytdO1xuXHQgICAgICAgICAgICB2YXIgdDIgPSAoKFNCT1hbczIgPj4+IDI0XSA8PCAyNCkgfCAoU0JPWFsoczMgPj4+IDE2KSAmIDB4ZmZdIDw8IDE2KSB8IChTQk9YWyhzMCA+Pj4gOCkgJiAweGZmXSA8PCA4KSB8IFNCT1hbczEgJiAweGZmXSkgXiBrZXlTY2hlZHVsZVtrc1JvdysrXTtcblx0ICAgICAgICAgICAgdmFyIHQzID0gKChTQk9YW3MzID4+PiAyNF0gPDwgMjQpIHwgKFNCT1hbKHMwID4+PiAxNikgJiAweGZmXSA8PCAxNikgfCAoU0JPWFsoczEgPj4+IDgpICYgMHhmZl0gPDwgOCkgfCBTQk9YW3MyICYgMHhmZl0pIF4ga2V5U2NoZWR1bGVba3NSb3crK107XG5cblx0ICAgICAgICAgICAgLy8gU2V0IG91dHB1dFxuXHQgICAgICAgICAgICBNW29mZnNldF0gICAgID0gdDA7XG5cdCAgICAgICAgICAgIE1bb2Zmc2V0ICsgMV0gPSB0MTtcblx0ICAgICAgICAgICAgTVtvZmZzZXQgKyAyXSA9IHQyO1xuXHQgICAgICAgICAgICBNW29mZnNldCArIDNdID0gdDM7XG5cdCAgICAgICAgfSxcblxuXHQgICAgICAgIGtleVNpemU6IDI1Ni8zMlxuXHQgICAgfSk7XG5cblx0ICAgIC8qKlxuXHQgICAgICogU2hvcnRjdXQgZnVuY3Rpb25zIHRvIHRoZSBjaXBoZXIncyBvYmplY3QgaW50ZXJmYWNlLlxuXHQgICAgICpcblx0ICAgICAqIEBleGFtcGxlXG5cdCAgICAgKlxuXHQgICAgICogICAgIHZhciBjaXBoZXJ0ZXh0ID0gQ3J5cHRvSlMuQUVTLmVuY3J5cHQobWVzc2FnZSwga2V5LCBjZmcpO1xuXHQgICAgICogICAgIHZhciBwbGFpbnRleHQgID0gQ3J5cHRvSlMuQUVTLmRlY3J5cHQoY2lwaGVydGV4dCwga2V5LCBjZmcpO1xuXHQgICAgICovXG5cdCAgICBDLkFFUyA9IEJsb2NrQ2lwaGVyLl9jcmVhdGVIZWxwZXIoQUVTKTtcblx0fSgpKTtcblxuXG5cdHJldHVybiBDcnlwdG9KUy5BRVM7XG5cbn0pKTsiXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///40955\n")},40961:(module,__unused_webpack_exports,__webpack_require__)=>{"use strict";eval("\n\nfunction checkDCE() {\n /* global __REACT_DEVTOOLS_GLOBAL_HOOK__ */\n if (\n typeof __REACT_DEVTOOLS_GLOBAL_HOOK__ === 'undefined' ||\n typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE !== 'function'\n ) {\n return;\n }\n if (false) {}\n try {\n // Verify that the code above has been dead code eliminated (DCE'd).\n __REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE(checkDCE);\n } catch (err) {\n // DevTools shouldn't crash React, no matter what.\n // We should still report in case we break this code.\n console.error(err);\n }\n}\n\nif (true) {\n // DCE check should happen before ReactDOM bundle executes so that\n // DevTools can report bad minification during injection.\n checkDCE();\n module.exports = __webpack_require__(22551);\n} else {}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNDA5NjEuanMiLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQVVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vaXRnLW5leHRnZW4tZnJvbnRlbmQvLi9ub2RlX21vZHVsZXMvcmVhY3QtZG9tL2luZGV4LmpzPzhiYzgiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG5mdW5jdGlvbiBjaGVja0RDRSgpIHtcbiAgLyogZ2xvYmFsIF9fUkVBQ1RfREVWVE9PTFNfR0xPQkFMX0hPT0tfXyAqL1xuICBpZiAoXG4gICAgdHlwZW9mIF9fUkVBQ1RfREVWVE9PTFNfR0xPQkFMX0hPT0tfXyA9PT0gJ3VuZGVmaW5lZCcgfHxcbiAgICB0eXBlb2YgX19SRUFDVF9ERVZUT09MU19HTE9CQUxfSE9PS19fLmNoZWNrRENFICE9PSAnZnVuY3Rpb24nXG4gICkge1xuICAgIHJldHVybjtcbiAgfVxuICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgIC8vIFRoaXMgYnJhbmNoIGlzIHVucmVhY2hhYmxlIGJlY2F1c2UgdGhpcyBmdW5jdGlvbiBpcyBvbmx5IGNhbGxlZFxuICAgIC8vIGluIHByb2R1Y3Rpb24sIGJ1dCB0aGUgY29uZGl0aW9uIGlzIHRydWUgb25seSBpbiBkZXZlbG9wbWVudC5cbiAgICAvLyBUaGVyZWZvcmUgaWYgdGhlIGJyYW5jaCBpcyBzdGlsbCBoZXJlLCBkZWFkIGNvZGUgZWxpbWluYXRpb24gd2Fzbid0XG4gICAgLy8gcHJvcGVybHkgYXBwbGllZC5cbiAgICAvLyBEb24ndCBjaGFuZ2UgdGhlIG1lc3NhZ2UuIFJlYWN0IERldlRvb2xzIHJlbGllcyBvbiBpdC4gQWxzbyBtYWtlIHN1cmVcbiAgICAvLyB0aGlzIG1lc3NhZ2UgZG9lc24ndCBvY2N1ciBlbHNld2hlcmUgaW4gdGhpcyBmdW5jdGlvbiwgb3IgaXQgd2lsbCBjYXVzZVxuICAgIC8vIGEgZmFsc2UgcG9zaXRpdmUuXG4gICAgdGhyb3cgbmV3IEVycm9yKCdeX14nKTtcbiAgfVxuICB0cnkge1xuICAgIC8vIFZlcmlmeSB0aGF0IHRoZSBjb2RlIGFib3ZlIGhhcyBiZWVuIGRlYWQgY29kZSBlbGltaW5hdGVkIChEQ0UnZCkuXG4gICAgX19SRUFDVF9ERVZUT09MU19HTE9CQUxfSE9PS19fLmNoZWNrRENFKGNoZWNrRENFKTtcbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgLy8gRGV2VG9vbHMgc2hvdWxkbid0IGNyYXNoIFJlYWN0LCBubyBtYXR0ZXIgd2hhdC5cbiAgICAvLyBXZSBzaG91bGQgc3RpbGwgcmVwb3J0IGluIGNhc2Ugd2UgYnJlYWsgdGhpcyBjb2RlLlxuICAgIGNvbnNvbGUuZXJyb3IoZXJyKTtcbiAgfVxufVxuXG5pZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgPT09ICdwcm9kdWN0aW9uJykge1xuICAvLyBEQ0UgY2hlY2sgc2hvdWxkIGhhcHBlbiBiZWZvcmUgUmVhY3RET00gYnVuZGxlIGV4ZWN1dGVzIHNvIHRoYXRcbiAgLy8gRGV2VG9vbHMgY2FuIHJlcG9ydCBiYWQgbWluaWZpY2F0aW9uIGR1cmluZyBpbmplY3Rpb24uXG4gIGNoZWNrRENFKCk7XG4gIG1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi9janMvcmVhY3QtZG9tLnByb2R1Y3Rpb24ubWluLmpzJyk7XG59IGVsc2Uge1xuICBtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoJy4vY2pzL3JlYWN0LWRvbS5kZXZlbG9wbWVudC5qcycpO1xufVxuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///40961\n")},41011:function(__unused_webpack_module,__unused_webpack_exports,__webpack_require__){eval("//! moment.js locale configuration\n//! locale : Swedish [sv]\n//! author : Jens Alm : https://github.com/ulmus\n\n;(function (global, factory) {\n true ? factory(__webpack_require__(95093)) :\n 0\n}(this, (function (moment) { 'use strict';\n\n //! moment.js locale configuration\n\n var sv = moment.defineLocale('sv', {\n months: 'januari_februari_mars_april_maj_juni_juli_augusti_september_oktober_november_december'.split(\n '_'\n ),\n monthsShort: 'jan_feb_mar_apr_maj_jun_jul_aug_sep_okt_nov_dec'.split('_'),\n weekdays: 'söndag_måndag_tisdag_onsdag_torsdag_fredag_lördag'.split('_'),\n weekdaysShort: 'sön_mån_tis_ons_tor_fre_lör'.split('_'),\n weekdaysMin: 'sö_må_ti_on_to_fr_lö'.split('_'),\n longDateFormat: {\n LT: 'HH:mm',\n LTS: 'HH:mm:ss',\n L: 'YYYY-MM-DD',\n LL: 'D MMMM YYYY',\n LLL: 'D MMMM YYYY [kl.] HH:mm',\n LLLL: 'dddd D MMMM YYYY [kl.] HH:mm',\n lll: 'D MMM YYYY HH:mm',\n llll: 'ddd D MMM YYYY HH:mm',\n },\n calendar: {\n sameDay: '[Idag] LT',\n nextDay: '[Imorgon] LT',\n lastDay: '[Igår] LT',\n nextWeek: '[På] dddd LT',\n lastWeek: '[I] dddd[s] LT',\n sameElse: 'L',\n },\n relativeTime: {\n future: 'om %s',\n past: 'för %s sedan',\n s: 'några sekunder',\n ss: '%d sekunder',\n m: 'en minut',\n mm: '%d minuter',\n h: 'en timme',\n hh: '%d timmar',\n d: 'en dag',\n dd: '%d dagar',\n M: 'en månad',\n MM: '%d månader',\n y: 'ett år',\n yy: '%d år',\n },\n dayOfMonthOrdinalParse: /\\d{1,2}(\\:e|\\:a)/,\n ordinal: function (number) {\n var b = number % 10,\n output =\n ~~((number % 100) / 10) === 1\n ? ':e'\n : b === 1\n ? ':a'\n : b === 2\n ? ':a'\n : b === 3\n ? ':e'\n : ':e';\n return number + output;\n },\n week: {\n dow: 1, // Monday is the first day of the week.\n doy: 4, // The week that contains Jan 4th is the first week of the year.\n },\n });\n\n return sv;\n\n})));\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNDEwMTEuanMiLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL2l0Zy1uZXh0Z2VuLWZyb250ZW5kLy4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvc3YuanM/NWZiZCJdLCJzb3VyY2VzQ29udGVudCI6WyIvLyEgbW9tZW50LmpzIGxvY2FsZSBjb25maWd1cmF0aW9uXG4vLyEgbG9jYWxlIDogU3dlZGlzaCBbc3ZdXG4vLyEgYXV0aG9yIDogSmVucyBBbG0gOiBodHRwczovL2dpdGh1Yi5jb20vdWxtdXNcblxuOyhmdW5jdGlvbiAoZ2xvYmFsLCBmYWN0b3J5KSB7XG4gICB0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcgJiYgdHlwZW9mIG1vZHVsZSAhPT0gJ3VuZGVmaW5lZCdcbiAgICAgICAmJiB0eXBlb2YgcmVxdWlyZSA9PT0gJ2Z1bmN0aW9uJyA/IGZhY3RvcnkocmVxdWlyZSgnLi4vbW9tZW50JykpIDpcbiAgIHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgZGVmaW5lLmFtZCA/IGRlZmluZShbJy4uL21vbWVudCddLCBmYWN0b3J5KSA6XG4gICBmYWN0b3J5KGdsb2JhbC5tb21lbnQpXG59KHRoaXMsIChmdW5jdGlvbiAobW9tZW50KSB7ICd1c2Ugc3RyaWN0JztcblxuICAgIC8vISBtb21lbnQuanMgbG9jYWxlIGNvbmZpZ3VyYXRpb25cblxuICAgIHZhciBzdiA9IG1vbWVudC5kZWZpbmVMb2NhbGUoJ3N2Jywge1xuICAgICAgICBtb250aHM6ICdqYW51YXJpX2ZlYnJ1YXJpX21hcnNfYXByaWxfbWFqX2p1bmlfanVsaV9hdWd1c3RpX3NlcHRlbWJlcl9va3RvYmVyX25vdmVtYmVyX2RlY2VtYmVyJy5zcGxpdChcbiAgICAgICAgICAgICdfJ1xuICAgICAgICApLFxuICAgICAgICBtb250aHNTaG9ydDogJ2phbl9mZWJfbWFyX2Fwcl9tYWpfanVuX2p1bF9hdWdfc2VwX29rdF9ub3ZfZGVjJy5zcGxpdCgnXycpLFxuICAgICAgICB3ZWVrZGF5czogJ3PDtm5kYWdfbcOlbmRhZ190aXNkYWdfb25zZGFnX3RvcnNkYWdfZnJlZGFnX2zDtnJkYWcnLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzU2hvcnQ6ICdzw7ZuX23DpW5fdGlzX29uc190b3JfZnJlX2zDtnInLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzTWluOiAnc8O2X23DpV90aV9vbl90b19mcl9sw7YnLnNwbGl0KCdfJyksXG4gICAgICAgIGxvbmdEYXRlRm9ybWF0OiB7XG4gICAgICAgICAgICBMVDogJ0hIOm1tJyxcbiAgICAgICAgICAgIExUUzogJ0hIOm1tOnNzJyxcbiAgICAgICAgICAgIEw6ICdZWVlZLU1NLUREJyxcbiAgICAgICAgICAgIExMOiAnRCBNTU1NIFlZWVknLFxuICAgICAgICAgICAgTExMOiAnRCBNTU1NIFlZWVkgW2tsLl0gSEg6bW0nLFxuICAgICAgICAgICAgTExMTDogJ2RkZGQgRCBNTU1NIFlZWVkgW2tsLl0gSEg6bW0nLFxuICAgICAgICAgICAgbGxsOiAnRCBNTU0gWVlZWSBISDptbScsXG4gICAgICAgICAgICBsbGxsOiAnZGRkIEQgTU1NIFlZWVkgSEg6bW0nLFxuICAgICAgICB9LFxuICAgICAgICBjYWxlbmRhcjoge1xuICAgICAgICAgICAgc2FtZURheTogJ1tJZGFnXSBMVCcsXG4gICAgICAgICAgICBuZXh0RGF5OiAnW0ltb3Jnb25dIExUJyxcbiAgICAgICAgICAgIGxhc3REYXk6ICdbSWfDpXJdIExUJyxcbiAgICAgICAgICAgIG5leHRXZWVrOiAnW1DDpV0gZGRkZCBMVCcsXG4gICAgICAgICAgICBsYXN0V2VlazogJ1tJXSBkZGRkW3NdIExUJyxcbiAgICAgICAgICAgIHNhbWVFbHNlOiAnTCcsXG4gICAgICAgIH0sXG4gICAgICAgIHJlbGF0aXZlVGltZToge1xuICAgICAgICAgICAgZnV0dXJlOiAnb20gJXMnLFxuICAgICAgICAgICAgcGFzdDogJ2bDtnIgJXMgc2VkYW4nLFxuICAgICAgICAgICAgczogJ27DpWdyYSBzZWt1bmRlcicsXG4gICAgICAgICAgICBzczogJyVkIHNla3VuZGVyJyxcbiAgICAgICAgICAgIG06ICdlbiBtaW51dCcsXG4gICAgICAgICAgICBtbTogJyVkIG1pbnV0ZXInLFxuICAgICAgICAgICAgaDogJ2VuIHRpbW1lJyxcbiAgICAgICAgICAgIGhoOiAnJWQgdGltbWFyJyxcbiAgICAgICAgICAgIGQ6ICdlbiBkYWcnLFxuICAgICAgICAgICAgZGQ6ICclZCBkYWdhcicsXG4gICAgICAgICAgICBNOiAnZW4gbcOlbmFkJyxcbiAgICAgICAgICAgIE1NOiAnJWQgbcOlbmFkZXInLFxuICAgICAgICAgICAgeTogJ2V0dCDDpXInLFxuICAgICAgICAgICAgeXk6ICclZCDDpXInLFxuICAgICAgICB9LFxuICAgICAgICBkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOiAvXFxkezEsMn0oXFw6ZXxcXDphKS8sXG4gICAgICAgIG9yZGluYWw6IGZ1bmN0aW9uIChudW1iZXIpIHtcbiAgICAgICAgICAgIHZhciBiID0gbnVtYmVyICUgMTAsXG4gICAgICAgICAgICAgICAgb3V0cHV0ID1cbiAgICAgICAgICAgICAgICAgICAgfn4oKG51bWJlciAlIDEwMCkgLyAxMCkgPT09IDFcbiAgICAgICAgICAgICAgICAgICAgICAgID8gJzplJ1xuICAgICAgICAgICAgICAgICAgICAgICAgOiBiID09PSAxXG4gICAgICAgICAgICAgICAgICAgICAgICAgID8gJzphJ1xuICAgICAgICAgICAgICAgICAgICAgICAgICA6IGIgPT09IDJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA/ICc6YSdcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IGIgPT09IDNcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gJzplJ1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiAnOmUnO1xuICAgICAgICAgICAgcmV0dXJuIG51bWJlciArIG91dHB1dDtcbiAgICAgICAgfSxcbiAgICAgICAgd2Vlazoge1xuICAgICAgICAgICAgZG93OiAxLCAvLyBNb25kYXkgaXMgdGhlIGZpcnN0IGRheSBvZiB0aGUgd2Vlay5cbiAgICAgICAgICAgIGRveTogNCwgLy8gVGhlIHdlZWsgdGhhdCBjb250YWlucyBKYW4gNHRoIGlzIHRoZSBmaXJzdCB3ZWVrIG9mIHRoZSB5ZWFyLlxuICAgICAgICB9LFxuICAgIH0pO1xuXG4gICAgcmV0dXJuIHN2O1xuXG59KSkpO1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///41011\n")},41488:function(__unused_webpack_module,__unused_webpack_exports,__webpack_require__){eval("//! moment.js locale configuration\n//! locale : Arabic (Algeria) [ar-dz]\n//! author : Amine Roukh: https://github.com/Amine27\n//! author : Abdel Said: https://github.com/abdelsaid\n//! author : Ahmed Elkhatib\n//! author : forabi https://github.com/forabi\n//! author : Noureddine LOUAHEDJ : https://github.com/noureddinem\n\n;(function (global, factory) {\n true ? factory(__webpack_require__(95093)) :\n 0\n}(this, (function (moment) { 'use strict';\n\n //! moment.js locale configuration\n\n var pluralForm = function (n) {\n return n === 0\n ? 0\n : n === 1\n ? 1\n : n === 2\n ? 2\n : n % 100 >= 3 && n % 100 <= 10\n ? 3\n : n % 100 >= 11\n ? 4\n : 5;\n },\n plurals = {\n s: [\n 'أقل من ثانية',\n 'ثانية واحدة',\n ['ثانيتان', 'ثانيتين'],\n '%d ثوان',\n '%d ثانية',\n '%d ثانية',\n ],\n m: [\n 'أقل من دقيقة',\n 'دقيقة واحدة',\n ['دقيقتان', 'دقيقتين'],\n '%d دقائق',\n '%d دقيقة',\n '%d دقيقة',\n ],\n h: [\n 'أقل من ساعة',\n 'ساعة واحدة',\n ['ساعتان', 'ساعتين'],\n '%d ساعات',\n '%d ساعة',\n '%d ساعة',\n ],\n d: [\n 'أقل من يوم',\n 'يوم واحد',\n ['يومان', 'يومين'],\n '%d أيام',\n '%d يومًا',\n '%d يوم',\n ],\n M: [\n 'أقل من شهر',\n 'شهر واحد',\n ['شهران', 'شهرين'],\n '%d أشهر',\n '%d شهرا',\n '%d شهر',\n ],\n y: [\n 'أقل من عام',\n 'عام واحد',\n ['عامان', 'عامين'],\n '%d أعوام',\n '%d عامًا',\n '%d عام',\n ],\n },\n pluralize = function (u) {\n return function (number, withoutSuffix, string, isFuture) {\n var f = pluralForm(number),\n str = plurals[u][pluralForm(number)];\n if (f === 2) {\n str = str[withoutSuffix ? 0 : 1];\n }\n return str.replace(/%d/i, number);\n };\n },\n months = [\n 'جانفي',\n 'فيفري',\n 'مارس',\n 'أفريل',\n 'ماي',\n 'جوان',\n 'جويلية',\n 'أوت',\n 'سبتمبر',\n 'أكتوبر',\n 'نوفمبر',\n 'ديسمبر',\n ];\n\n var arDz = moment.defineLocale('ar-dz', {\n months: months,\n monthsShort: months,\n weekdays: 'الأحد_الإثنين_الثلاثاء_الأربعاء_الخميس_الجمعة_السبت'.split('_'),\n weekdaysShort: 'أحد_إثنين_ثلاثاء_أربعاء_خميس_جمعة_سبت'.split('_'),\n weekdaysMin: 'ح_ن_ث_ر_خ_ج_س'.split('_'),\n weekdaysParseExact: true,\n longDateFormat: {\n LT: 'HH:mm',\n LTS: 'HH:mm:ss',\n L: 'D/\\u200FM/\\u200FYYYY',\n LL: 'D MMMM YYYY',\n LLL: 'D MMMM YYYY HH:mm',\n LLLL: 'dddd D MMMM YYYY HH:mm',\n },\n meridiemParse: /ص|م/,\n isPM: function (input) {\n return 'م' === input;\n },\n meridiem: function (hour, minute, isLower) {\n if (hour < 12) {\n return 'ص';\n } else {\n return 'م';\n }\n },\n calendar: {\n sameDay: '[اليوم عند الساعة] LT',\n nextDay: '[غدًا عند الساعة] LT',\n nextWeek: 'dddd [عند الساعة] LT',\n lastDay: '[أمس عند الساعة] LT',\n lastWeek: 'dddd [عند الساعة] LT',\n sameElse: 'L',\n },\n relativeTime: {\n future: 'بعد %s',\n past: 'منذ %s',\n s: pluralize('s'),\n ss: pluralize('s'),\n m: pluralize('m'),\n mm: pluralize('m'),\n h: pluralize('h'),\n hh: pluralize('h'),\n d: pluralize('d'),\n dd: pluralize('d'),\n M: pluralize('M'),\n MM: pluralize('M'),\n y: pluralize('y'),\n yy: pluralize('y'),\n },\n postformat: function (string) {\n return string.replace(/,/g, '،');\n },\n week: {\n dow: 0, // Sunday is the first day of the week.\n doy: 4, // The week that contains Jan 4th is the first week of the year.\n },\n });\n\n return arDz;\n\n})));\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNDE0ODguanMiLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vaXRnLW5leHRnZW4tZnJvbnRlbmQvLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9hci1kei5qcz9hMzU2Il0sInNvdXJjZXNDb250ZW50IjpbIi8vISBtb21lbnQuanMgbG9jYWxlIGNvbmZpZ3VyYXRpb25cbi8vISBsb2NhbGUgOiBBcmFiaWMgKEFsZ2VyaWEpIFthci1kel1cbi8vISBhdXRob3IgOiBBbWluZSBSb3VraDogaHR0cHM6Ly9naXRodWIuY29tL0FtaW5lMjdcbi8vISBhdXRob3IgOiBBYmRlbCBTYWlkOiBodHRwczovL2dpdGh1Yi5jb20vYWJkZWxzYWlkXG4vLyEgYXV0aG9yIDogQWhtZWQgRWxraGF0aWJcbi8vISBhdXRob3IgOiBmb3JhYmkgaHR0cHM6Ly9naXRodWIuY29tL2ZvcmFiaVxuLy8hIGF1dGhvciA6IE5vdXJlZGRpbmUgTE9VQUhFREogOiBodHRwczovL2dpdGh1Yi5jb20vbm91cmVkZGluZW1cblxuOyhmdW5jdGlvbiAoZ2xvYmFsLCBmYWN0b3J5KSB7XG4gICB0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcgJiYgdHlwZW9mIG1vZHVsZSAhPT0gJ3VuZGVmaW5lZCdcbiAgICAgICAmJiB0eXBlb2YgcmVxdWlyZSA9PT0gJ2Z1bmN0aW9uJyA/IGZhY3RvcnkocmVxdWlyZSgnLi4vbW9tZW50JykpIDpcbiAgIHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgZGVmaW5lLmFtZCA/IGRlZmluZShbJy4uL21vbWVudCddLCBmYWN0b3J5KSA6XG4gICBmYWN0b3J5KGdsb2JhbC5tb21lbnQpXG59KHRoaXMsIChmdW5jdGlvbiAobW9tZW50KSB7ICd1c2Ugc3RyaWN0JztcblxuICAgIC8vISBtb21lbnQuanMgbG9jYWxlIGNvbmZpZ3VyYXRpb25cblxuICAgIHZhciBwbHVyYWxGb3JtID0gZnVuY3Rpb24gKG4pIHtcbiAgICAgICAgICAgIHJldHVybiBuID09PSAwXG4gICAgICAgICAgICAgICAgPyAwXG4gICAgICAgICAgICAgICAgOiBuID09PSAxXG4gICAgICAgICAgICAgICAgICA/IDFcbiAgICAgICAgICAgICAgICAgIDogbiA9PT0gMlxuICAgICAgICAgICAgICAgICAgICA/IDJcbiAgICAgICAgICAgICAgICAgICAgOiBuICUgMTAwID49IDMgJiYgbiAlIDEwMCA8PSAxMFxuICAgICAgICAgICAgICAgICAgICAgID8gM1xuICAgICAgICAgICAgICAgICAgICAgIDogbiAlIDEwMCA+PSAxMVxuICAgICAgICAgICAgICAgICAgICAgICAgPyA0XG4gICAgICAgICAgICAgICAgICAgICAgICA6IDU7XG4gICAgICAgIH0sXG4gICAgICAgIHBsdXJhbHMgPSB7XG4gICAgICAgICAgICBzOiBbXG4gICAgICAgICAgICAgICAgJ9ij2YLZhCDZhdmGINir2KfZhtmK2KknLFxuICAgICAgICAgICAgICAgICfYq9in2YbZitipINmI2KfYrdiv2KknLFxuICAgICAgICAgICAgICAgIFsn2KvYp9mG2YrYqtin2YYnLCAn2KvYp9mG2YrYqtmK2YYnXSxcbiAgICAgICAgICAgICAgICAnJWQg2KvZiNin2YYnLFxuICAgICAgICAgICAgICAgICclZCDYq9in2YbZitipJyxcbiAgICAgICAgICAgICAgICAnJWQg2KvYp9mG2YrYqScsXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgbTogW1xuICAgICAgICAgICAgICAgICfYo9mC2YQg2YXZhiDYr9mC2YrZgtipJyxcbiAgICAgICAgICAgICAgICAn2K/ZgtmK2YLYqSDZiNin2K3Yr9ipJyxcbiAgICAgICAgICAgICAgICBbJ9iv2YLZitmC2KrYp9mGJywgJ9iv2YLZitmC2KrZitmGJ10sXG4gICAgICAgICAgICAgICAgJyVkINiv2YLYp9im2YInLFxuICAgICAgICAgICAgICAgICclZCDYr9mC2YrZgtipJyxcbiAgICAgICAgICAgICAgICAnJWQg2K/ZgtmK2YLYqScsXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgaDogW1xuICAgICAgICAgICAgICAgICfYo9mC2YQg2YXZhiDYs9in2LnYqScsXG4gICAgICAgICAgICAgICAgJ9iz2KfYudipINmI2KfYrdiv2KknLFxuICAgICAgICAgICAgICAgIFsn2LPYp9i52KrYp9mGJywgJ9iz2KfYudiq2YrZhiddLFxuICAgICAgICAgICAgICAgICclZCDYs9in2LnYp9iqJyxcbiAgICAgICAgICAgICAgICAnJWQg2LPYp9i52KknLFxuICAgICAgICAgICAgICAgICclZCDYs9in2LnYqScsXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgZDogW1xuICAgICAgICAgICAgICAgICfYo9mC2YQg2YXZhiDZitmI2YUnLFxuICAgICAgICAgICAgICAgICfZitmI2YUg2YjYp9it2K8nLFxuICAgICAgICAgICAgICAgIFsn2YrZiNmF2KfZhicsICfZitmI2YXZitmGJ10sXG4gICAgICAgICAgICAgICAgJyVkINij2YrYp9mFJyxcbiAgICAgICAgICAgICAgICAnJWQg2YrZiNmF2YvYpycsXG4gICAgICAgICAgICAgICAgJyVkINmK2YjZhScsXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgTTogW1xuICAgICAgICAgICAgICAgICfYo9mC2YQg2YXZhiDYtNmH2LEnLFxuICAgICAgICAgICAgICAgICfYtNmH2LEg2YjYp9it2K8nLFxuICAgICAgICAgICAgICAgIFsn2LTZh9ix2KfZhicsICfYtNmH2LHZitmGJ10sXG4gICAgICAgICAgICAgICAgJyVkINij2LTZh9ixJyxcbiAgICAgICAgICAgICAgICAnJWQg2LTZh9ix2KcnLFxuICAgICAgICAgICAgICAgICclZCDYtNmH2LEnLFxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIHk6IFtcbiAgICAgICAgICAgICAgICAn2KPZgtmEINmF2YYg2LnYp9mFJyxcbiAgICAgICAgICAgICAgICAn2LnYp9mFINmI2KfYrdivJyxcbiAgICAgICAgICAgICAgICBbJ9i52KfZhdin2YYnLCAn2LnYp9mF2YrZhiddLFxuICAgICAgICAgICAgICAgICclZCDYo9i52YjYp9mFJyxcbiAgICAgICAgICAgICAgICAnJWQg2LnYp9mF2YvYpycsXG4gICAgICAgICAgICAgICAgJyVkINi52KfZhScsXG4gICAgICAgICAgICBdLFxuICAgICAgICB9LFxuICAgICAgICBwbHVyYWxpemUgPSBmdW5jdGlvbiAodSkge1xuICAgICAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIChudW1iZXIsIHdpdGhvdXRTdWZmaXgsIHN0cmluZywgaXNGdXR1cmUpIHtcbiAgICAgICAgICAgICAgICB2YXIgZiA9IHBsdXJhbEZvcm0obnVtYmVyKSxcbiAgICAgICAgICAgICAgICAgICAgc3RyID0gcGx1cmFsc1t1XVtwbHVyYWxGb3JtKG51bWJlcildO1xuICAgICAgICAgICAgICAgIGlmIChmID09PSAyKSB7XG4gICAgICAgICAgICAgICAgICAgIHN0ciA9IHN0clt3aXRob3V0U3VmZml4ID8gMCA6IDFdO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gc3RyLnJlcGxhY2UoLyVkL2ksIG51bWJlcik7XG4gICAgICAgICAgICB9O1xuICAgICAgICB9LFxuICAgICAgICBtb250aHMgPSBbXG4gICAgICAgICAgICAn2KzYp9mG2YHZiicsXG4gICAgICAgICAgICAn2YHZitmB2LHZiicsXG4gICAgICAgICAgICAn2YXYp9ix2LMnLFxuICAgICAgICAgICAgJ9ij2YHYsdmK2YQnLFxuICAgICAgICAgICAgJ9mF2KfZiicsXG4gICAgICAgICAgICAn2KzZiNin2YYnLFxuICAgICAgICAgICAgJ9is2YjZitmE2YrYqScsXG4gICAgICAgICAgICAn2KPZiNiqJyxcbiAgICAgICAgICAgICfYs9io2KrZhdio2LEnLFxuICAgICAgICAgICAgJ9ij2YPYqtmI2KjYsScsXG4gICAgICAgICAgICAn2YbZiNmB2YXYqNixJyxcbiAgICAgICAgICAgICfYr9mK2LPZhdio2LEnLFxuICAgICAgICBdO1xuXG4gICAgdmFyIGFyRHogPSBtb21lbnQuZGVmaW5lTG9jYWxlKCdhci1keicsIHtcbiAgICAgICAgbW9udGhzOiBtb250aHMsXG4gICAgICAgIG1vbnRoc1Nob3J0OiBtb250aHMsXG4gICAgICAgIHdlZWtkYXlzOiAn2KfZhNij2K3Yr1/Yp9mE2KXYq9mG2YrZhl/Yp9mE2KvZhNin2KvYp9ihX9in2YTYo9ix2KjYudin2KFf2KfZhNiu2YXZitizX9in2YTYrNmF2LnYqV/Yp9mE2LPYqNiqJy5zcGxpdCgnXycpLFxuICAgICAgICB3ZWVrZGF5c1Nob3J0OiAn2KPYrdivX9il2KvZhtmK2YZf2KvZhNin2KvYp9ihX9ij2LHYqNi52KfYoV/YrtmF2YrYs1/YrNmF2LnYqV/Ys9io2KonLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzTWluOiAn2K1f2YZf2Ktf2LFf2K5f2Kxf2LMnLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzUGFyc2VFeGFjdDogdHJ1ZSxcbiAgICAgICAgbG9uZ0RhdGVGb3JtYXQ6IHtcbiAgICAgICAgICAgIExUOiAnSEg6bW0nLFxuICAgICAgICAgICAgTFRTOiAnSEg6bW06c3MnLFxuICAgICAgICAgICAgTDogJ0QvXFx1MjAwRk0vXFx1MjAwRllZWVknLFxuICAgICAgICAgICAgTEw6ICdEIE1NTU0gWVlZWScsXG4gICAgICAgICAgICBMTEw6ICdEIE1NTU0gWVlZWSBISDptbScsXG4gICAgICAgICAgICBMTExMOiAnZGRkZCBEIE1NTU0gWVlZWSBISDptbScsXG4gICAgICAgIH0sXG4gICAgICAgIG1lcmlkaWVtUGFyc2U6IC/YtXzZhS8sXG4gICAgICAgIGlzUE06IGZ1bmN0aW9uIChpbnB1dCkge1xuICAgICAgICAgICAgcmV0dXJuICfZhScgPT09IGlucHV0O1xuICAgICAgICB9LFxuICAgICAgICBtZXJpZGllbTogZnVuY3Rpb24gKGhvdXIsIG1pbnV0ZSwgaXNMb3dlcikge1xuICAgICAgICAgICAgaWYgKGhvdXIgPCAxMikge1xuICAgICAgICAgICAgICAgIHJldHVybiAn2LUnO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gJ9mFJztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgY2FsZW5kYXI6IHtcbiAgICAgICAgICAgIHNhbWVEYXk6ICdb2KfZhNmK2YjZhSDYudmG2K8g2KfZhNiz2KfYudipXSBMVCcsXG4gICAgICAgICAgICBuZXh0RGF5OiAnW9i62K/Zi9inINi52YbYryDYp9mE2LPYp9i52KldIExUJyxcbiAgICAgICAgICAgIG5leHRXZWVrOiAnZGRkZCBb2LnZhtivINin2YTYs9in2LnYqV0gTFQnLFxuICAgICAgICAgICAgbGFzdERheTogJ1vYo9mF2LMg2LnZhtivINin2YTYs9in2LnYqV0gTFQnLFxuICAgICAgICAgICAgbGFzdFdlZWs6ICdkZGRkIFvYudmG2K8g2KfZhNiz2KfYudipXSBMVCcsXG4gICAgICAgICAgICBzYW1lRWxzZTogJ0wnLFxuICAgICAgICB9LFxuICAgICAgICByZWxhdGl2ZVRpbWU6IHtcbiAgICAgICAgICAgIGZ1dHVyZTogJ9io2LnYryAlcycsXG4gICAgICAgICAgICBwYXN0OiAn2YXZhtiwICVzJyxcbiAgICAgICAgICAgIHM6IHBsdXJhbGl6ZSgncycpLFxuICAgICAgICAgICAgc3M6IHBsdXJhbGl6ZSgncycpLFxuICAgICAgICAgICAgbTogcGx1cmFsaXplKCdtJyksXG4gICAgICAgICAgICBtbTogcGx1cmFsaXplKCdtJyksXG4gICAgICAgICAgICBoOiBwbHVyYWxpemUoJ2gnKSxcbiAgICAgICAgICAgIGhoOiBwbHVyYWxpemUoJ2gnKSxcbiAgICAgICAgICAgIGQ6IHBsdXJhbGl6ZSgnZCcpLFxuICAgICAgICAgICAgZGQ6IHBsdXJhbGl6ZSgnZCcpLFxuICAgICAgICAgICAgTTogcGx1cmFsaXplKCdNJyksXG4gICAgICAgICAgICBNTTogcGx1cmFsaXplKCdNJyksXG4gICAgICAgICAgICB5OiBwbHVyYWxpemUoJ3knKSxcbiAgICAgICAgICAgIHl5OiBwbHVyYWxpemUoJ3knKSxcbiAgICAgICAgfSxcbiAgICAgICAgcG9zdGZvcm1hdDogZnVuY3Rpb24gKHN0cmluZykge1xuICAgICAgICAgICAgcmV0dXJuIHN0cmluZy5yZXBsYWNlKC8sL2csICfYjCcpO1xuICAgICAgICB9LFxuICAgICAgICB3ZWVrOiB7XG4gICAgICAgICAgICBkb3c6IDAsIC8vIFN1bmRheSBpcyB0aGUgZmlyc3QgZGF5IG9mIHRoZSB3ZWVrLlxuICAgICAgICAgICAgZG95OiA0LCAvLyBUaGUgd2VlayB0aGF0IGNvbnRhaW5zIEphbiA0dGggaXMgdGhlIGZpcnN0IHdlZWsgb2YgdGhlIHllYXIuXG4gICAgICAgIH0sXG4gICAgfSk7XG5cbiAgICByZXR1cm4gYXJEejtcblxufSkpKTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///41488\n")},41683:(I,g,t)=>{"use strict";I.exports=t.p+"06528db53c95240f3c51.png"},41734:function(__unused_webpack_module,__unused_webpack_exports,__webpack_require__){eval("//! moment.js locale configuration\n//! locale : Irish or Irish Gaelic [ga]\n//! author : André Silva : https://github.com/askpt\n\n;(function (global, factory) {\n true ? factory(__webpack_require__(95093)) :\n 0\n}(this, (function (moment) { 'use strict';\n\n //! moment.js locale configuration\n\n var months = [\n 'Eanáir',\n 'Feabhra',\n 'Márta',\n 'Aibreán',\n 'Bealtaine',\n 'Meitheamh',\n 'Iúil',\n 'Lúnasa',\n 'Meán Fómhair',\n 'Deireadh Fómhair',\n 'Samhain',\n 'Nollaig',\n ],\n monthsShort = [\n 'Ean',\n 'Feabh',\n 'Márt',\n 'Aib',\n 'Beal',\n 'Meith',\n 'Iúil',\n 'Lún',\n 'M.F.',\n 'D.F.',\n 'Samh',\n 'Noll',\n ],\n weekdays = [\n 'Dé Domhnaigh',\n 'Dé Luain',\n 'Dé Máirt',\n 'Dé Céadaoin',\n 'Déardaoin',\n 'Dé hAoine',\n 'Dé Sathairn',\n ],\n weekdaysShort = ['Domh', 'Luan', 'Máirt', 'Céad', 'Déar', 'Aoine', 'Sath'],\n weekdaysMin = ['Do', 'Lu', 'Má', 'Cé', 'Dé', 'A', 'Sa'];\n\n var ga = moment.defineLocale('ga', {\n months: months,\n monthsShort: monthsShort,\n monthsParseExact: true,\n weekdays: weekdays,\n weekdaysShort: weekdaysShort,\n weekdaysMin: weekdaysMin,\n longDateFormat: {\n LT: 'HH:mm',\n LTS: 'HH:mm:ss',\n L: 'DD/MM/YYYY',\n LL: 'D MMMM YYYY',\n LLL: 'D MMMM YYYY HH:mm',\n LLLL: 'dddd, D MMMM YYYY HH:mm',\n },\n calendar: {\n sameDay: '[Inniu ag] LT',\n nextDay: '[Amárach ag] LT',\n nextWeek: 'dddd [ag] LT',\n lastDay: '[Inné ag] LT',\n lastWeek: 'dddd [seo caite] [ag] LT',\n sameElse: 'L',\n },\n relativeTime: {\n future: 'i %s',\n past: '%s ó shin',\n s: 'cúpla soicind',\n ss: '%d soicind',\n m: 'nóiméad',\n mm: '%d nóiméad',\n h: 'uair an chloig',\n hh: '%d uair an chloig',\n d: 'lá',\n dd: '%d lá',\n M: 'mí',\n MM: '%d míonna',\n y: 'bliain',\n yy: '%d bliain',\n },\n dayOfMonthOrdinalParse: /\\d{1,2}(d|na|mh)/,\n ordinal: function (number) {\n var output = number === 1 ? 'd' : number % 10 === 2 ? 'na' : 'mh';\n return number + output;\n },\n week: {\n dow: 1, // Monday is the first day of the week.\n doy: 4, // The week that contains Jan 4th is the first week of the year.\n },\n });\n\n return ga;\n\n})));\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNDE3MzQuanMiLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL2l0Zy1uZXh0Z2VuLWZyb250ZW5kLy4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvZ2EuanM/NTEyMCJdLCJzb3VyY2VzQ29udGVudCI6WyIvLyEgbW9tZW50LmpzIGxvY2FsZSBjb25maWd1cmF0aW9uXG4vLyEgbG9jYWxlIDogSXJpc2ggb3IgSXJpc2ggR2FlbGljIFtnYV1cbi8vISBhdXRob3IgOiBBbmRyw6kgU2lsdmEgOiBodHRwczovL2dpdGh1Yi5jb20vYXNrcHRcblxuOyhmdW5jdGlvbiAoZ2xvYmFsLCBmYWN0b3J5KSB7XG4gICB0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcgJiYgdHlwZW9mIG1vZHVsZSAhPT0gJ3VuZGVmaW5lZCdcbiAgICAgICAmJiB0eXBlb2YgcmVxdWlyZSA9PT0gJ2Z1bmN0aW9uJyA/IGZhY3RvcnkocmVxdWlyZSgnLi4vbW9tZW50JykpIDpcbiAgIHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgZGVmaW5lLmFtZCA/IGRlZmluZShbJy4uL21vbWVudCddLCBmYWN0b3J5KSA6XG4gICBmYWN0b3J5KGdsb2JhbC5tb21lbnQpXG59KHRoaXMsIChmdW5jdGlvbiAobW9tZW50KSB7ICd1c2Ugc3RyaWN0JztcblxuICAgIC8vISBtb21lbnQuanMgbG9jYWxlIGNvbmZpZ3VyYXRpb25cblxuICAgIHZhciBtb250aHMgPSBbXG4gICAgICAgICAgICAnRWFuw6FpcicsXG4gICAgICAgICAgICAnRmVhYmhyYScsXG4gICAgICAgICAgICAnTcOhcnRhJyxcbiAgICAgICAgICAgICdBaWJyZcOhbicsXG4gICAgICAgICAgICAnQmVhbHRhaW5lJyxcbiAgICAgICAgICAgICdNZWl0aGVhbWgnLFxuICAgICAgICAgICAgJ0nDumlsJyxcbiAgICAgICAgICAgICdMw7puYXNhJyxcbiAgICAgICAgICAgICdNZcOhbiBGw7NtaGFpcicsXG4gICAgICAgICAgICAnRGVpcmVhZGggRsOzbWhhaXInLFxuICAgICAgICAgICAgJ1NhbWhhaW4nLFxuICAgICAgICAgICAgJ05vbGxhaWcnLFxuICAgICAgICBdLFxuICAgICAgICBtb250aHNTaG9ydCA9IFtcbiAgICAgICAgICAgICdFYW4nLFxuICAgICAgICAgICAgJ0ZlYWJoJyxcbiAgICAgICAgICAgICdNw6FydCcsXG4gICAgICAgICAgICAnQWliJyxcbiAgICAgICAgICAgICdCZWFsJyxcbiAgICAgICAgICAgICdNZWl0aCcsXG4gICAgICAgICAgICAnScO6aWwnLFxuICAgICAgICAgICAgJ0zDum4nLFxuICAgICAgICAgICAgJ00uRi4nLFxuICAgICAgICAgICAgJ0QuRi4nLFxuICAgICAgICAgICAgJ1NhbWgnLFxuICAgICAgICAgICAgJ05vbGwnLFxuICAgICAgICBdLFxuICAgICAgICB3ZWVrZGF5cyA9IFtcbiAgICAgICAgICAgICdEw6kgRG9taG5haWdoJyxcbiAgICAgICAgICAgICdEw6kgTHVhaW4nLFxuICAgICAgICAgICAgJ0TDqSBNw6FpcnQnLFxuICAgICAgICAgICAgJ0TDqSBDw6lhZGFvaW4nLFxuICAgICAgICAgICAgJ0TDqWFyZGFvaW4nLFxuICAgICAgICAgICAgJ0TDqSBoQW9pbmUnLFxuICAgICAgICAgICAgJ0TDqSBTYXRoYWlybicsXG4gICAgICAgIF0sXG4gICAgICAgIHdlZWtkYXlzU2hvcnQgPSBbJ0RvbWgnLCAnTHVhbicsICdNw6FpcnQnLCAnQ8OpYWQnLCAnRMOpYXInLCAnQW9pbmUnLCAnU2F0aCddLFxuICAgICAgICB3ZWVrZGF5c01pbiA9IFsnRG8nLCAnTHUnLCAnTcOhJywgJ0PDqScsICdEw6knLCAnQScsICdTYSddO1xuXG4gICAgdmFyIGdhID0gbW9tZW50LmRlZmluZUxvY2FsZSgnZ2EnLCB7XG4gICAgICAgIG1vbnRoczogbW9udGhzLFxuICAgICAgICBtb250aHNTaG9ydDogbW9udGhzU2hvcnQsXG4gICAgICAgIG1vbnRoc1BhcnNlRXhhY3Q6IHRydWUsXG4gICAgICAgIHdlZWtkYXlzOiB3ZWVrZGF5cyxcbiAgICAgICAgd2Vla2RheXNTaG9ydDogd2Vla2RheXNTaG9ydCxcbiAgICAgICAgd2Vla2RheXNNaW46IHdlZWtkYXlzTWluLFxuICAgICAgICBsb25nRGF0ZUZvcm1hdDoge1xuICAgICAgICAgICAgTFQ6ICdISDptbScsXG4gICAgICAgICAgICBMVFM6ICdISDptbTpzcycsXG4gICAgICAgICAgICBMOiAnREQvTU0vWVlZWScsXG4gICAgICAgICAgICBMTDogJ0QgTU1NTSBZWVlZJyxcbiAgICAgICAgICAgIExMTDogJ0QgTU1NTSBZWVlZIEhIOm1tJyxcbiAgICAgICAgICAgIExMTEw6ICdkZGRkLCBEIE1NTU0gWVlZWSBISDptbScsXG4gICAgICAgIH0sXG4gICAgICAgIGNhbGVuZGFyOiB7XG4gICAgICAgICAgICBzYW1lRGF5OiAnW0lubml1IGFnXSBMVCcsXG4gICAgICAgICAgICBuZXh0RGF5OiAnW0Ftw6FyYWNoIGFnXSBMVCcsXG4gICAgICAgICAgICBuZXh0V2VlazogJ2RkZGQgW2FnXSBMVCcsXG4gICAgICAgICAgICBsYXN0RGF5OiAnW0lubsOpIGFnXSBMVCcsXG4gICAgICAgICAgICBsYXN0V2VlazogJ2RkZGQgW3NlbyBjYWl0ZV0gW2FnXSBMVCcsXG4gICAgICAgICAgICBzYW1lRWxzZTogJ0wnLFxuICAgICAgICB9LFxuICAgICAgICByZWxhdGl2ZVRpbWU6IHtcbiAgICAgICAgICAgIGZ1dHVyZTogJ2kgJXMnLFxuICAgICAgICAgICAgcGFzdDogJyVzIMOzIHNoaW4nLFxuICAgICAgICAgICAgczogJ2PDunBsYSBzb2ljaW5kJyxcbiAgICAgICAgICAgIHNzOiAnJWQgc29pY2luZCcsXG4gICAgICAgICAgICBtOiAnbsOzaW3DqWFkJyxcbiAgICAgICAgICAgIG1tOiAnJWQgbsOzaW3DqWFkJyxcbiAgICAgICAgICAgIGg6ICd1YWlyIGFuIGNobG9pZycsXG4gICAgICAgICAgICBoaDogJyVkIHVhaXIgYW4gY2hsb2lnJyxcbiAgICAgICAgICAgIGQ6ICdsw6EnLFxuICAgICAgICAgICAgZGQ6ICclZCBsw6EnLFxuICAgICAgICAgICAgTTogJ23DrScsXG4gICAgICAgICAgICBNTTogJyVkIG3DrW9ubmEnLFxuICAgICAgICAgICAgeTogJ2JsaWFpbicsXG4gICAgICAgICAgICB5eTogJyVkIGJsaWFpbicsXG4gICAgICAgIH0sXG4gICAgICAgIGRheU9mTW9udGhPcmRpbmFsUGFyc2U6IC9cXGR7MSwyfShkfG5hfG1oKS8sXG4gICAgICAgIG9yZGluYWw6IGZ1bmN0aW9uIChudW1iZXIpIHtcbiAgICAgICAgICAgIHZhciBvdXRwdXQgPSBudW1iZXIgPT09IDEgPyAnZCcgOiBudW1iZXIgJSAxMCA9PT0gMiA/ICduYScgOiAnbWgnO1xuICAgICAgICAgICAgcmV0dXJuIG51bWJlciArIG91dHB1dDtcbiAgICAgICAgfSxcbiAgICAgICAgd2Vlazoge1xuICAgICAgICAgICAgZG93OiAxLCAvLyBNb25kYXkgaXMgdGhlIGZpcnN0IGRheSBvZiB0aGUgd2Vlay5cbiAgICAgICAgICAgIGRveTogNCwgLy8gVGhlIHdlZWsgdGhhdCBjb250YWlucyBKYW4gNHRoIGlzIHRoZSBmaXJzdCB3ZWVrIG9mIHRoZSB5ZWFyLlxuICAgICAgICB9LFxuICAgIH0pO1xuXG4gICAgcmV0dXJuIGdhO1xuXG59KSkpO1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///41734\n")},41794:function(__unused_webpack_module,__unused_webpack_exports,__webpack_require__){eval("//! moment.js locale configuration\n//! locale : Georgian [ka]\n//! author : Irakli Janiashvili : https://github.com/IrakliJani\n\n;(function (global, factory) {\n true ? factory(__webpack_require__(95093)) :\n 0\n}(this, (function (moment) { 'use strict';\n\n //! moment.js locale configuration\n\n var ka = moment.defineLocale('ka', {\n months: 'იანვარი_თებერვალი_მარტი_აპრილი_მაისი_ივნისი_ივლისი_აგვისტო_სექტემბერი_ოქტომბერი_ნოემბერი_დეკემბერი'.split(\n '_'\n ),\n monthsShort: 'იან_თებ_მარ_აპრ_მაი_ივნ_ივლ_აგვ_სექ_ოქტ_ნოე_დეკ'.split('_'),\n weekdays: {\n standalone:\n 'კვირა_ორშაბათი_სამშაბათი_ოთხშაბათი_ხუთშაბათი_პარასკევი_შაბათი'.split(\n '_'\n ),\n format: 'კვირას_ორშაბათს_სამშაბათს_ოთხშაბათს_ხუთშაბათს_პარასკევს_შაბათს'.split(\n '_'\n ),\n isFormat: /(წინა|შემდეგ)/,\n },\n weekdaysShort: 'კვი_ორშ_სამ_ოთხ_ხუთ_პარ_შაბ'.split('_'),\n weekdaysMin: 'კვ_ორ_სა_ოთ_ხუ_პა_შა'.split('_'),\n longDateFormat: {\n LT: 'HH:mm',\n LTS: 'HH:mm:ss',\n L: 'DD/MM/YYYY',\n LL: 'D MMMM YYYY',\n LLL: 'D MMMM YYYY HH:mm',\n LLLL: 'dddd, D MMMM YYYY HH:mm',\n },\n calendar: {\n sameDay: '[დღეს] LT[-ზე]',\n nextDay: '[ხვალ] LT[-ზე]',\n lastDay: '[გუშინ] LT[-ზე]',\n nextWeek: '[შემდეგ] dddd LT[-ზე]',\n lastWeek: '[წინა] dddd LT-ზე',\n sameElse: 'L',\n },\n relativeTime: {\n future: function (s) {\n return s.replace(\n /(წამ|წუთ|საათ|წელ|დღ|თვ)(ი|ე)/,\n function ($0, $1, $2) {\n return $2 === 'ი' ? $1 + 'ში' : $1 + $2 + 'ში';\n }\n );\n },\n past: function (s) {\n if (/(წამი|წუთი|საათი|დღე|თვე)/.test(s)) {\n return s.replace(/(ი|ე)$/, 'ის წინ');\n }\n if (/წელი/.test(s)) {\n return s.replace(/წელი$/, 'წლის წინ');\n }\n return s;\n },\n s: 'რამდენიმე წამი',\n ss: '%d წამი',\n m: 'წუთი',\n mm: '%d წუთი',\n h: 'საათი',\n hh: '%d საათი',\n d: 'დღე',\n dd: '%d დღე',\n M: 'თვე',\n MM: '%d თვე',\n y: 'წელი',\n yy: '%d წელი',\n },\n dayOfMonthOrdinalParse: /0|1-ლი|მე-\\d{1,2}|\\d{1,2}-ე/,\n ordinal: function (number) {\n if (number === 0) {\n return number;\n }\n if (number === 1) {\n return number + '-ლი';\n }\n if (\n number < 20 ||\n (number <= 100 && number % 20 === 0) ||\n number % 100 === 0\n ) {\n return 'მე-' + number;\n }\n return number + '-ე';\n },\n week: {\n dow: 1,\n doy: 7,\n },\n });\n\n return ka;\n\n})));\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNDE3OTQuanMiLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL2l0Zy1uZXh0Z2VuLWZyb250ZW5kLy4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUva2EuanM/MjAxYiJdLCJzb3VyY2VzQ29udGVudCI6WyIvLyEgbW9tZW50LmpzIGxvY2FsZSBjb25maWd1cmF0aW9uXG4vLyEgbG9jYWxlIDogR2VvcmdpYW4gW2thXVxuLy8hIGF1dGhvciA6IElyYWtsaSBKYW5pYXNodmlsaSA6IGh0dHBzOi8vZ2l0aHViLmNvbS9JcmFrbGlKYW5pXG5cbjsoZnVuY3Rpb24gKGdsb2JhbCwgZmFjdG9yeSkge1xuICAgdHlwZW9mIGV4cG9ydHMgPT09ICdvYmplY3QnICYmIHR5cGVvZiBtb2R1bGUgIT09ICd1bmRlZmluZWQnXG4gICAgICAgJiYgdHlwZW9mIHJlcXVpcmUgPT09ICdmdW5jdGlvbicgPyBmYWN0b3J5KHJlcXVpcmUoJy4uL21vbWVudCcpKSA6XG4gICB0eXBlb2YgZGVmaW5lID09PSAnZnVuY3Rpb24nICYmIGRlZmluZS5hbWQgPyBkZWZpbmUoWycuLi9tb21lbnQnXSwgZmFjdG9yeSkgOlxuICAgZmFjdG9yeShnbG9iYWwubW9tZW50KVxufSh0aGlzLCAoZnVuY3Rpb24gKG1vbWVudCkgeyAndXNlIHN0cmljdCc7XG5cbiAgICAvLyEgbW9tZW50LmpzIGxvY2FsZSBjb25maWd1cmF0aW9uXG5cbiAgICB2YXIga2EgPSBtb21lbnQuZGVmaW5lTG9jYWxlKCdrYScsIHtcbiAgICAgICAgbW9udGhzOiAn4YOY4YOQ4YOc4YOV4YOQ4YOg4YOYX+GDl+GDlOGDkeGDlOGDoOGDleGDkOGDmuGDmF/hg5vhg5Dhg6Dhg6Lhg5hf4YOQ4YOe4YOg4YOY4YOa4YOYX+GDm+GDkOGDmOGDoeGDmF/hg5jhg5Xhg5zhg5jhg6Hhg5hf4YOY4YOV4YOa4YOY4YOh4YOYX+GDkOGDkuGDleGDmOGDoeGDouGDnV/hg6Hhg5Thg6Xhg6Lhg5Thg5vhg5Hhg5Thg6Dhg5hf4YOd4YOl4YOi4YOd4YOb4YOR4YOU4YOg4YOYX+GDnOGDneGDlOGDm+GDkeGDlOGDoOGDmF/hg5Phg5Thg5nhg5Thg5vhg5Hhg5Thg6Dhg5gnLnNwbGl0KFxuICAgICAgICAgICAgJ18nXG4gICAgICAgICksXG4gICAgICAgIG1vbnRoc1Nob3J0OiAn4YOY4YOQ4YOcX+GDl+GDlOGDkV/hg5vhg5Dhg6Bf4YOQ4YOe4YOgX+GDm+GDkOGDmF/hg5jhg5Xhg5xf4YOY4YOV4YOaX+GDkOGDkuGDlV/hg6Hhg5Thg6Vf4YOd4YOl4YOiX+GDnOGDneGDlF/hg5Phg5Thg5knLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzOiB7XG4gICAgICAgICAgICBzdGFuZGFsb25lOlxuICAgICAgICAgICAgICAgICfhg5nhg5Xhg5jhg6Dhg5Bf4YOd4YOg4YOo4YOQ4YOR4YOQ4YOX4YOYX+GDoeGDkOGDm+GDqOGDkOGDkeGDkOGDl+GDmF/hg53hg5fhg67hg6jhg5Dhg5Hhg5Dhg5fhg5hf4YOu4YOj4YOX4YOo4YOQ4YOR4YOQ4YOX4YOYX+GDnuGDkOGDoOGDkOGDoeGDmeGDlOGDleGDmF/hg6jhg5Dhg5Hhg5Dhg5fhg5gnLnNwbGl0KFxuICAgICAgICAgICAgICAgICAgICAnXydcbiAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgZm9ybWF0OiAn4YOZ4YOV4YOY4YOg4YOQ4YOhX+GDneGDoOGDqOGDkOGDkeGDkOGDl+GDoV/hg6Hhg5Dhg5vhg6jhg5Dhg5Hhg5Dhg5fhg6Ff4YOd4YOX4YOu4YOo4YOQ4YOR4YOQ4YOX4YOhX+GDruGDo+GDl+GDqOGDkOGDkeGDkOGDl+GDoV/hg57hg5Dhg6Dhg5Dhg6Hhg5nhg5Thg5Xhg6Ff4YOo4YOQ4YOR4YOQ4YOX4YOhJy5zcGxpdChcbiAgICAgICAgICAgICAgICAnXydcbiAgICAgICAgICAgICksXG4gICAgICAgICAgICBpc0Zvcm1hdDogLyjhg6zhg5jhg5zhg5B84YOo4YOU4YOb4YOT4YOU4YOSKS8sXG4gICAgICAgIH0sXG4gICAgICAgIHdlZWtkYXlzU2hvcnQ6ICfhg5nhg5Xhg5hf4YOd4YOg4YOoX+GDoeGDkOGDm1/hg53hg5fhg65f4YOu4YOj4YOXX+GDnuGDkOGDoF/hg6jhg5Dhg5EnLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzTWluOiAn4YOZ4YOVX+GDneGDoF/hg6Hhg5Bf4YOd4YOXX+GDruGDo1/hg57hg5Bf4YOo4YOQJy5zcGxpdCgnXycpLFxuICAgICAgICBsb25nRGF0ZUZvcm1hdDoge1xuICAgICAgICAgICAgTFQ6ICdISDptbScsXG4gICAgICAgICAgICBMVFM6ICdISDptbTpzcycsXG4gICAgICAgICAgICBMOiAnREQvTU0vWVlZWScsXG4gICAgICAgICAgICBMTDogJ0QgTU1NTSBZWVlZJyxcbiAgICAgICAgICAgIExMTDogJ0QgTU1NTSBZWVlZIEhIOm1tJyxcbiAgICAgICAgICAgIExMTEw6ICdkZGRkLCBEIE1NTU0gWVlZWSBISDptbScsXG4gICAgICAgIH0sXG4gICAgICAgIGNhbGVuZGFyOiB7XG4gICAgICAgICAgICBzYW1lRGF5OiAnW+GDk+GDpuGDlOGDoV0gTFRbLeGDluGDlF0nLFxuICAgICAgICAgICAgbmV4dERheTogJ1vhg67hg5Xhg5Dhg5pdIExUWy3hg5bhg5RdJyxcbiAgICAgICAgICAgIGxhc3REYXk6ICdb4YOS4YOj4YOo4YOY4YOcXSBMVFst4YOW4YOUXScsXG4gICAgICAgICAgICBuZXh0V2VlazogJ1vhg6jhg5Thg5vhg5Phg5Thg5JdIGRkZGQgTFRbLeGDluGDlF0nLFxuICAgICAgICAgICAgbGFzdFdlZWs6ICdb4YOs4YOY4YOc4YOQXSBkZGRkIExULeGDluGDlCcsXG4gICAgICAgICAgICBzYW1lRWxzZTogJ0wnLFxuICAgICAgICB9LFxuICAgICAgICByZWxhdGl2ZVRpbWU6IHtcbiAgICAgICAgICAgIGZ1dHVyZTogZnVuY3Rpb24gKHMpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gcy5yZXBsYWNlKFxuICAgICAgICAgICAgICAgICAgICAvKOGDrOGDkOGDm3zhg6zhg6Phg5d84YOh4YOQ4YOQ4YOXfOGDrOGDlOGDmnzhg5Phg6Z84YOX4YOVKSjhg5h84YOUKS8sXG4gICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uICgkMCwgJDEsICQyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gJDIgPT09ICfhg5gnID8gJDEgKyAn4YOo4YOYJyA6ICQxICsgJDIgKyAn4YOo4YOYJztcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgcGFzdDogZnVuY3Rpb24gKHMpIHtcbiAgICAgICAgICAgICAgICBpZiAoLyjhg6zhg5Dhg5vhg5h84YOs4YOj4YOX4YOYfOGDoeGDkOGDkOGDl+GDmHzhg5Phg6bhg5R84YOX4YOV4YOUKS8udGVzdChzKSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gcy5yZXBsYWNlKC8o4YOYfOGDlCkkLywgJ+GDmOGDoSDhg6zhg5jhg5wnKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKC/hg6zhg5Thg5rhg5gvLnRlc3QocykpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHMucmVwbGFjZSgv4YOs4YOU4YOa4YOYJC8sICfhg6zhg5rhg5jhg6Eg4YOs4YOY4YOcJyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiBzO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHM6ICfhg6Dhg5Dhg5vhg5Phg5Thg5zhg5jhg5vhg5Qg4YOs4YOQ4YOb4YOYJyxcbiAgICAgICAgICAgIHNzOiAnJWQg4YOs4YOQ4YOb4YOYJyxcbiAgICAgICAgICAgIG06ICfhg6zhg6Phg5fhg5gnLFxuICAgICAgICAgICAgbW06ICclZCDhg6zhg6Phg5fhg5gnLFxuICAgICAgICAgICAgaDogJ+GDoeGDkOGDkOGDl+GDmCcsXG4gICAgICAgICAgICBoaDogJyVkIOGDoeGDkOGDkOGDl+GDmCcsXG4gICAgICAgICAgICBkOiAn4YOT4YOm4YOUJyxcbiAgICAgICAgICAgIGRkOiAnJWQg4YOT4YOm4YOUJyxcbiAgICAgICAgICAgIE06ICfhg5fhg5Xhg5QnLFxuICAgICAgICAgICAgTU06ICclZCDhg5fhg5Xhg5QnLFxuICAgICAgICAgICAgeTogJ+GDrOGDlOGDmuGDmCcsXG4gICAgICAgICAgICB5eTogJyVkIOGDrOGDlOGDmuGDmCcsXG4gICAgICAgIH0sXG4gICAgICAgIGRheU9mTW9udGhPcmRpbmFsUGFyc2U6IC8wfDEt4YOa4YOYfOGDm+GDlC1cXGR7MSwyfXxcXGR7MSwyfS3hg5QvLFxuICAgICAgICBvcmRpbmFsOiBmdW5jdGlvbiAobnVtYmVyKSB7XG4gICAgICAgICAgICBpZiAobnVtYmVyID09PSAwKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG51bWJlcjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChudW1iZXIgPT09IDEpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gbnVtYmVyICsgJy3hg5rhg5gnO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgIG51bWJlciA8IDIwIHx8XG4gICAgICAgICAgICAgICAgKG51bWJlciA8PSAxMDAgJiYgbnVtYmVyICUgMjAgPT09IDApIHx8XG4gICAgICAgICAgICAgICAgbnVtYmVyICUgMTAwID09PSAwXG4gICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gJ+GDm+GDlC0nICsgbnVtYmVyO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIG51bWJlciArICct4YOUJztcbiAgICAgICAgfSxcbiAgICAgICAgd2Vlazoge1xuICAgICAgICAgICAgZG93OiAxLFxuICAgICAgICAgICAgZG95OiA3LFxuICAgICAgICB9LFxuICAgIH0pO1xuXG4gICAgcmV0dXJuIGthO1xuXG59KSkpO1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///41794\n")},41848:function(__unused_webpack_module,__unused_webpack_exports,__webpack_require__){eval("//! moment.js locale configuration\n//! locale : Maori [mi]\n//! author : John Corrigan : https://github.com/johnideal\n\n;(function (global, factory) {\n true ? factory(__webpack_require__(95093)) :\n 0\n}(this, (function (moment) { 'use strict';\n\n //! moment.js locale configuration\n\n var mi = moment.defineLocale('mi', {\n months: 'Kohi-tāte_Hui-tanguru_Poutū-te-rangi_Paenga-whāwhā_Haratua_Pipiri_Hōngoingoi_Here-turi-kōkā_Mahuru_Whiringa-ā-nuku_Whiringa-ā-rangi_Hakihea'.split(\n '_'\n ),\n monthsShort:\n 'Kohi_Hui_Pou_Pae_Hara_Pipi_Hōngoi_Here_Mahu_Whi-nu_Whi-ra_Haki'.split(\n '_'\n ),\n monthsRegex: /(?:['a-z\\u0101\\u014D\\u016B]+\\-?){1,3}/i,\n monthsStrictRegex: /(?:['a-z\\u0101\\u014D\\u016B]+\\-?){1,3}/i,\n monthsShortRegex: /(?:['a-z\\u0101\\u014D\\u016B]+\\-?){1,3}/i,\n monthsShortStrictRegex: /(?:['a-z\\u0101\\u014D\\u016B]+\\-?){1,2}/i,\n weekdays: 'Rātapu_Mane_Tūrei_Wenerei_Tāite_Paraire_Hātarei'.split('_'),\n weekdaysShort: 'Ta_Ma_Tū_We_Tāi_Pa_Hā'.split('_'),\n weekdaysMin: 'Ta_Ma_Tū_We_Tāi_Pa_Hā'.split('_'),\n longDateFormat: {\n LT: 'HH:mm',\n LTS: 'HH:mm:ss',\n L: 'DD/MM/YYYY',\n LL: 'D MMMM YYYY',\n LLL: 'D MMMM YYYY [i] HH:mm',\n LLLL: 'dddd, D MMMM YYYY [i] HH:mm',\n },\n calendar: {\n sameDay: '[i teie mahana, i] LT',\n nextDay: '[apopo i] LT',\n nextWeek: 'dddd [i] LT',\n lastDay: '[inanahi i] LT',\n lastWeek: 'dddd [whakamutunga i] LT',\n sameElse: 'L',\n },\n relativeTime: {\n future: 'i roto i %s',\n past: '%s i mua',\n s: 'te hēkona ruarua',\n ss: '%d hēkona',\n m: 'he meneti',\n mm: '%d meneti',\n h: 'te haora',\n hh: '%d haora',\n d: 'he ra',\n dd: '%d ra',\n M: 'he marama',\n MM: '%d marama',\n y: 'he tau',\n yy: '%d tau',\n },\n dayOfMonthOrdinalParse: /\\d{1,2}º/,\n ordinal: '%dº',\n week: {\n dow: 1, // Monday is the first day of the week.\n doy: 4, // The week that contains Jan 4th is the first week of the year.\n },\n });\n\n return mi;\n\n})));\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNDE4NDguanMiLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vaXRnLW5leHRnZW4tZnJvbnRlbmQvLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9taS5qcz82ODhiIl0sInNvdXJjZXNDb250ZW50IjpbIi8vISBtb21lbnQuanMgbG9jYWxlIGNvbmZpZ3VyYXRpb25cbi8vISBsb2NhbGUgOiBNYW9yaSBbbWldXG4vLyEgYXV0aG9yIDogSm9obiBDb3JyaWdhbiA8cm9iYmllY2xvc2V0QGdtYWlsLmNvbT4gOiBodHRwczovL2dpdGh1Yi5jb20vam9obmlkZWFsXG5cbjsoZnVuY3Rpb24gKGdsb2JhbCwgZmFjdG9yeSkge1xuICAgdHlwZW9mIGV4cG9ydHMgPT09ICdvYmplY3QnICYmIHR5cGVvZiBtb2R1bGUgIT09ICd1bmRlZmluZWQnXG4gICAgICAgJiYgdHlwZW9mIHJlcXVpcmUgPT09ICdmdW5jdGlvbicgPyBmYWN0b3J5KHJlcXVpcmUoJy4uL21vbWVudCcpKSA6XG4gICB0eXBlb2YgZGVmaW5lID09PSAnZnVuY3Rpb24nICYmIGRlZmluZS5hbWQgPyBkZWZpbmUoWycuLi9tb21lbnQnXSwgZmFjdG9yeSkgOlxuICAgZmFjdG9yeShnbG9iYWwubW9tZW50KVxufSh0aGlzLCAoZnVuY3Rpb24gKG1vbWVudCkgeyAndXNlIHN0cmljdCc7XG5cbiAgICAvLyEgbW9tZW50LmpzIGxvY2FsZSBjb25maWd1cmF0aW9uXG5cbiAgICB2YXIgbWkgPSBtb21lbnQuZGVmaW5lTG9jYWxlKCdtaScsIHtcbiAgICAgICAgbW9udGhzOiAnS29oaS10xIF0ZV9IdWktdGFuZ3VydV9Qb3V0xastdGUtcmFuZ2lfUGFlbmdhLXdoxIF3aMSBX0hhcmF0dWFfUGlwaXJpX0jFjW5nb2luZ29pX0hlcmUtdHVyaS1rxY1rxIFfTWFodXJ1X1doaXJpbmdhLcSBLW51a3VfV2hpcmluZ2EtxIEtcmFuZ2lfSGFraWhlYScuc3BsaXQoXG4gICAgICAgICAgICAnXydcbiAgICAgICAgKSxcbiAgICAgICAgbW9udGhzU2hvcnQ6XG4gICAgICAgICAgICAnS29oaV9IdWlfUG91X1BhZV9IYXJhX1BpcGlfSMWNbmdvaV9IZXJlX01haHVfV2hpLW51X1doaS1yYV9IYWtpJy5zcGxpdChcbiAgICAgICAgICAgICAgICAnXydcbiAgICAgICAgICAgICksXG4gICAgICAgIG1vbnRoc1JlZ2V4OiAvKD86WydhLXpcXHUwMTAxXFx1MDE0RFxcdTAxNkJdK1xcLT8pezEsM30vaSxcbiAgICAgICAgbW9udGhzU3RyaWN0UmVnZXg6IC8oPzpbJ2EtelxcdTAxMDFcXHUwMTREXFx1MDE2Ql0rXFwtPyl7MSwzfS9pLFxuICAgICAgICBtb250aHNTaG9ydFJlZ2V4OiAvKD86WydhLXpcXHUwMTAxXFx1MDE0RFxcdTAxNkJdK1xcLT8pezEsM30vaSxcbiAgICAgICAgbW9udGhzU2hvcnRTdHJpY3RSZWdleDogLyg/OlsnYS16XFx1MDEwMVxcdTAxNERcXHUwMTZCXStcXC0/KXsxLDJ9L2ksXG4gICAgICAgIHdlZWtkYXlzOiAnUsSBdGFwdV9NYW5lX1TFq3JlaV9XZW5lcmVpX1TEgWl0ZV9QYXJhaXJlX0jEgXRhcmVpJy5zcGxpdCgnXycpLFxuICAgICAgICB3ZWVrZGF5c1Nob3J0OiAnVGFfTWFfVMWrX1dlX1TEgWlfUGFfSMSBJy5zcGxpdCgnXycpLFxuICAgICAgICB3ZWVrZGF5c01pbjogJ1RhX01hX1TFq19XZV9UxIFpX1BhX0jEgScuc3BsaXQoJ18nKSxcbiAgICAgICAgbG9uZ0RhdGVGb3JtYXQ6IHtcbiAgICAgICAgICAgIExUOiAnSEg6bW0nLFxuICAgICAgICAgICAgTFRTOiAnSEg6bW06c3MnLFxuICAgICAgICAgICAgTDogJ0REL01NL1lZWVknLFxuICAgICAgICAgICAgTEw6ICdEIE1NTU0gWVlZWScsXG4gICAgICAgICAgICBMTEw6ICdEIE1NTU0gWVlZWSBbaV0gSEg6bW0nLFxuICAgICAgICAgICAgTExMTDogJ2RkZGQsIEQgTU1NTSBZWVlZIFtpXSBISDptbScsXG4gICAgICAgIH0sXG4gICAgICAgIGNhbGVuZGFyOiB7XG4gICAgICAgICAgICBzYW1lRGF5OiAnW2kgdGVpZSBtYWhhbmEsIGldIExUJyxcbiAgICAgICAgICAgIG5leHREYXk6ICdbYXBvcG8gaV0gTFQnLFxuICAgICAgICAgICAgbmV4dFdlZWs6ICdkZGRkIFtpXSBMVCcsXG4gICAgICAgICAgICBsYXN0RGF5OiAnW2luYW5haGkgaV0gTFQnLFxuICAgICAgICAgICAgbGFzdFdlZWs6ICdkZGRkIFt3aGFrYW11dHVuZ2EgaV0gTFQnLFxuICAgICAgICAgICAgc2FtZUVsc2U6ICdMJyxcbiAgICAgICAgfSxcbiAgICAgICAgcmVsYXRpdmVUaW1lOiB7XG4gICAgICAgICAgICBmdXR1cmU6ICdpIHJvdG8gaSAlcycsXG4gICAgICAgICAgICBwYXN0OiAnJXMgaSBtdWEnLFxuICAgICAgICAgICAgczogJ3RlIGjEk2tvbmEgcnVhcnVhJyxcbiAgICAgICAgICAgIHNzOiAnJWQgaMSTa29uYScsXG4gICAgICAgICAgICBtOiAnaGUgbWVuZXRpJyxcbiAgICAgICAgICAgIG1tOiAnJWQgbWVuZXRpJyxcbiAgICAgICAgICAgIGg6ICd0ZSBoYW9yYScsXG4gICAgICAgICAgICBoaDogJyVkIGhhb3JhJyxcbiAgICAgICAgICAgIGQ6ICdoZSByYScsXG4gICAgICAgICAgICBkZDogJyVkIHJhJyxcbiAgICAgICAgICAgIE06ICdoZSBtYXJhbWEnLFxuICAgICAgICAgICAgTU06ICclZCBtYXJhbWEnLFxuICAgICAgICAgICAgeTogJ2hlIHRhdScsXG4gICAgICAgICAgICB5eTogJyVkIHRhdScsXG4gICAgICAgIH0sXG4gICAgICAgIGRheU9mTW9udGhPcmRpbmFsUGFyc2U6IC9cXGR7MSwyfcK6LyxcbiAgICAgICAgb3JkaW5hbDogJyVkwronLFxuICAgICAgICB3ZWVrOiB7XG4gICAgICAgICAgICBkb3c6IDEsIC8vIE1vbmRheSBpcyB0aGUgZmlyc3QgZGF5IG9mIHRoZSB3ZWVrLlxuICAgICAgICAgICAgZG95OiA0LCAvLyBUaGUgd2VlayB0aGF0IGNvbnRhaW5zIEphbiA0dGggaXMgdGhlIGZpcnN0IHdlZWsgb2YgdGhlIHllYXIuXG4gICAgICAgIH0sXG4gICAgfSk7XG5cbiAgICByZXR1cm4gbWk7XG5cbn0pKSk7XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///41848\n")},42030:(I,g,t)=>{"use strict";I.exports=t.p+"8a79397df054f6fa0a2f.png"},42073:function(module,exports,__webpack_require__){eval(";(function (root, factory, undef) {\n\tif (true) {\n\t\t// CommonJS\n\t\tmodule.exports = exports = factory(__webpack_require__(19021), __webpack_require__(57165));\n\t}\n\telse {}\n}(this, function (CryptoJS) {\n\n\t/**\n\t * ANSI X.923 padding strategy.\n\t */\n\tCryptoJS.pad.AnsiX923 = {\n\t pad: function (data, blockSize) {\n\t // Shortcuts\n\t var dataSigBytes = data.sigBytes;\n\t var blockSizeBytes = blockSize * 4;\n\n\t // Count padding bytes\n\t var nPaddingBytes = blockSizeBytes - dataSigBytes % blockSizeBytes;\n\n\t // Compute last byte position\n\t var lastBytePos = dataSigBytes + nPaddingBytes - 1;\n\n\t // Pad\n\t data.clamp();\n\t data.words[lastBytePos >>> 2] |= nPaddingBytes << (24 - (lastBytePos % 4) * 8);\n\t data.sigBytes += nPaddingBytes;\n\t },\n\n\t unpad: function (data) {\n\t // Get number of padding bytes from last byte\n\t var nPaddingBytes = data.words[(data.sigBytes - 1) >>> 2] & 0xff;\n\n\t // Remove padding\n\t data.sigBytes -= nPaddingBytes;\n\t }\n\t};\n\n\n\treturn CryptoJS.pad.Ansix923;\n\n}));//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNDIwNzMuanMiLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBUUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vaXRnLW5leHRnZW4tZnJvbnRlbmQvLi9ub2RlX21vZHVsZXMvY3J5cHRvLWpzL3BhZC1hbnNpeDkyMy5qcz9hODE3Il0sInNvdXJjZXNDb250ZW50IjpbIjsoZnVuY3Rpb24gKHJvb3QsIGZhY3RvcnksIHVuZGVmKSB7XG5cdGlmICh0eXBlb2YgZXhwb3J0cyA9PT0gXCJvYmplY3RcIikge1xuXHRcdC8vIENvbW1vbkpTXG5cdFx0bW9kdWxlLmV4cG9ydHMgPSBleHBvcnRzID0gZmFjdG9yeShyZXF1aXJlKFwiLi9jb3JlXCIpLCByZXF1aXJlKFwiLi9jaXBoZXItY29yZVwiKSk7XG5cdH1cblx0ZWxzZSBpZiAodHlwZW9mIGRlZmluZSA9PT0gXCJmdW5jdGlvblwiICYmIGRlZmluZS5hbWQpIHtcblx0XHQvLyBBTURcblx0XHRkZWZpbmUoW1wiLi9jb3JlXCIsIFwiLi9jaXBoZXItY29yZVwiXSwgZmFjdG9yeSk7XG5cdH1cblx0ZWxzZSB7XG5cdFx0Ly8gR2xvYmFsIChicm93c2VyKVxuXHRcdGZhY3Rvcnkocm9vdC5DcnlwdG9KUyk7XG5cdH1cbn0odGhpcywgZnVuY3Rpb24gKENyeXB0b0pTKSB7XG5cblx0LyoqXG5cdCAqIEFOU0kgWC45MjMgcGFkZGluZyBzdHJhdGVneS5cblx0ICovXG5cdENyeXB0b0pTLnBhZC5BbnNpWDkyMyA9IHtcblx0ICAgIHBhZDogZnVuY3Rpb24gKGRhdGEsIGJsb2NrU2l6ZSkge1xuXHQgICAgICAgIC8vIFNob3J0Y3V0c1xuXHQgICAgICAgIHZhciBkYXRhU2lnQnl0ZXMgPSBkYXRhLnNpZ0J5dGVzO1xuXHQgICAgICAgIHZhciBibG9ja1NpemVCeXRlcyA9IGJsb2NrU2l6ZSAqIDQ7XG5cblx0ICAgICAgICAvLyBDb3VudCBwYWRkaW5nIGJ5dGVzXG5cdCAgICAgICAgdmFyIG5QYWRkaW5nQnl0ZXMgPSBibG9ja1NpemVCeXRlcyAtIGRhdGFTaWdCeXRlcyAlIGJsb2NrU2l6ZUJ5dGVzO1xuXG5cdCAgICAgICAgLy8gQ29tcHV0ZSBsYXN0IGJ5dGUgcG9zaXRpb25cblx0ICAgICAgICB2YXIgbGFzdEJ5dGVQb3MgPSBkYXRhU2lnQnl0ZXMgKyBuUGFkZGluZ0J5dGVzIC0gMTtcblxuXHQgICAgICAgIC8vIFBhZFxuXHQgICAgICAgIGRhdGEuY2xhbXAoKTtcblx0ICAgICAgICBkYXRhLndvcmRzW2xhc3RCeXRlUG9zID4+PiAyXSB8PSBuUGFkZGluZ0J5dGVzIDw8ICgyNCAtIChsYXN0Qnl0ZVBvcyAlIDQpICogOCk7XG5cdCAgICAgICAgZGF0YS5zaWdCeXRlcyArPSBuUGFkZGluZ0J5dGVzO1xuXHQgICAgfSxcblxuXHQgICAgdW5wYWQ6IGZ1bmN0aW9uIChkYXRhKSB7XG5cdCAgICAgICAgLy8gR2V0IG51bWJlciBvZiBwYWRkaW5nIGJ5dGVzIGZyb20gbGFzdCBieXRlXG5cdCAgICAgICAgdmFyIG5QYWRkaW5nQnl0ZXMgPSBkYXRhLndvcmRzWyhkYXRhLnNpZ0J5dGVzIC0gMSkgPj4+IDJdICYgMHhmZjtcblxuXHQgICAgICAgIC8vIFJlbW92ZSBwYWRkaW5nXG5cdCAgICAgICAgZGF0YS5zaWdCeXRlcyAtPSBuUGFkZGluZ0J5dGVzO1xuXHQgICAgfVxuXHR9O1xuXG5cblx0cmV0dXJuIENyeXB0b0pTLnBhZC5BbnNpeDkyMztcblxufSkpOyJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///42073\n")},42353:function(__unused_webpack_module,__unused_webpack_exports,__webpack_require__){eval("//! moment.js locale configuration\n//! locale : Arabic (Libya) [ar-ly]\n//! author : Ali Hmer: https://github.com/kikoanis\n\n;(function (global, factory) {\n true ? factory(__webpack_require__(95093)) :\n 0\n}(this, (function (moment) { 'use strict';\n\n //! moment.js locale configuration\n\n var symbolMap = {\n 1: '1',\n 2: '2',\n 3: '3',\n 4: '4',\n 5: '5',\n 6: '6',\n 7: '7',\n 8: '8',\n 9: '9',\n 0: '0',\n },\n pluralForm = function (n) {\n return n === 0\n ? 0\n : n === 1\n ? 1\n : n === 2\n ? 2\n : n % 100 >= 3 && n % 100 <= 10\n ? 3\n : n % 100 >= 11\n ? 4\n : 5;\n },\n plurals = {\n s: [\n 'أقل من ثانية',\n 'ثانية واحدة',\n ['ثانيتان', 'ثانيتين'],\n '%d ثوان',\n '%d ثانية',\n '%d ثانية',\n ],\n m: [\n 'أقل من دقيقة',\n 'دقيقة واحدة',\n ['دقيقتان', 'دقيقتين'],\n '%d دقائق',\n '%d دقيقة',\n '%d دقيقة',\n ],\n h: [\n 'أقل من ساعة',\n 'ساعة واحدة',\n ['ساعتان', 'ساعتين'],\n '%d ساعات',\n '%d ساعة',\n '%d ساعة',\n ],\n d: [\n 'أقل من يوم',\n 'يوم واحد',\n ['يومان', 'يومين'],\n '%d أيام',\n '%d يومًا',\n '%d يوم',\n ],\n M: [\n 'أقل من شهر',\n 'شهر واحد',\n ['شهران', 'شهرين'],\n '%d أشهر',\n '%d شهرا',\n '%d شهر',\n ],\n y: [\n 'أقل من عام',\n 'عام واحد',\n ['عامان', 'عامين'],\n '%d أعوام',\n '%d عامًا',\n '%d عام',\n ],\n },\n pluralize = function (u) {\n return function (number, withoutSuffix, string, isFuture) {\n var f = pluralForm(number),\n str = plurals[u][pluralForm(number)];\n if (f === 2) {\n str = str[withoutSuffix ? 0 : 1];\n }\n return str.replace(/%d/i, number);\n };\n },\n months = [\n 'يناير',\n 'فبراير',\n 'مارس',\n 'أبريل',\n 'مايو',\n 'يونيو',\n 'يوليو',\n 'أغسطس',\n 'سبتمبر',\n 'أكتوبر',\n 'نوفمبر',\n 'ديسمبر',\n ];\n\n var arLy = moment.defineLocale('ar-ly', {\n months: months,\n monthsShort: months,\n weekdays: 'الأحد_الإثنين_الثلاثاء_الأربعاء_الخميس_الجمعة_السبت'.split('_'),\n weekdaysShort: 'أحد_إثنين_ثلاثاء_أربعاء_خميس_جمعة_سبت'.split('_'),\n weekdaysMin: 'ح_ن_ث_ر_خ_ج_س'.split('_'),\n weekdaysParseExact: true,\n longDateFormat: {\n LT: 'HH:mm',\n LTS: 'HH:mm:ss',\n L: 'D/\\u200FM/\\u200FYYYY',\n LL: 'D MMMM YYYY',\n LLL: 'D MMMM YYYY HH:mm',\n LLLL: 'dddd D MMMM YYYY HH:mm',\n },\n meridiemParse: /ص|م/,\n isPM: function (input) {\n return 'م' === input;\n },\n meridiem: function (hour, minute, isLower) {\n if (hour < 12) {\n return 'ص';\n } else {\n return 'م';\n }\n },\n calendar: {\n sameDay: '[اليوم عند الساعة] LT',\n nextDay: '[غدًا عند الساعة] LT',\n nextWeek: 'dddd [عند الساعة] LT',\n lastDay: '[أمس عند الساعة] LT',\n lastWeek: 'dddd [عند الساعة] LT',\n sameElse: 'L',\n },\n relativeTime: {\n future: 'بعد %s',\n past: 'منذ %s',\n s: pluralize('s'),\n ss: pluralize('s'),\n m: pluralize('m'),\n mm: pluralize('m'),\n h: pluralize('h'),\n hh: pluralize('h'),\n d: pluralize('d'),\n dd: pluralize('d'),\n M: pluralize('M'),\n MM: pluralize('M'),\n y: pluralize('y'),\n yy: pluralize('y'),\n },\n preparse: function (string) {\n return string.replace(/،/g, ',');\n },\n postformat: function (string) {\n return string\n .replace(/\\d/g, function (match) {\n return symbolMap[match];\n })\n .replace(/,/g, '،');\n },\n week: {\n dow: 6, // Saturday is the first day of the week.\n doy: 12, // The week that contains Jan 12th is the first week of the year.\n },\n });\n\n return arLy;\n\n})));\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNDIzNTMuanMiLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vaXRnLW5leHRnZW4tZnJvbnRlbmQvLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9hci1seS5qcz8xY2ZkIl0sInNvdXJjZXNDb250ZW50IjpbIi8vISBtb21lbnQuanMgbG9jYWxlIGNvbmZpZ3VyYXRpb25cbi8vISBsb2NhbGUgOiBBcmFiaWMgKExpYnlhKSBbYXItbHldXG4vLyEgYXV0aG9yIDogQWxpIEhtZXI6IGh0dHBzOi8vZ2l0aHViLmNvbS9raWtvYW5pc1xuXG47KGZ1bmN0aW9uIChnbG9iYWwsIGZhY3RvcnkpIHtcbiAgIHR5cGVvZiBleHBvcnRzID09PSAnb2JqZWN0JyAmJiB0eXBlb2YgbW9kdWxlICE9PSAndW5kZWZpbmVkJ1xuICAgICAgICYmIHR5cGVvZiByZXF1aXJlID09PSAnZnVuY3Rpb24nID8gZmFjdG9yeShyZXF1aXJlKCcuLi9tb21lbnQnKSkgOlxuICAgdHlwZW9mIGRlZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiBkZWZpbmUuYW1kID8gZGVmaW5lKFsnLi4vbW9tZW50J10sIGZhY3RvcnkpIDpcbiAgIGZhY3RvcnkoZ2xvYmFsLm1vbWVudClcbn0odGhpcywgKGZ1bmN0aW9uIChtb21lbnQpIHsgJ3VzZSBzdHJpY3QnO1xuXG4gICAgLy8hIG1vbWVudC5qcyBsb2NhbGUgY29uZmlndXJhdGlvblxuXG4gICAgdmFyIHN5bWJvbE1hcCA9IHtcbiAgICAgICAgICAgIDE6ICcxJyxcbiAgICAgICAgICAgIDI6ICcyJyxcbiAgICAgICAgICAgIDM6ICczJyxcbiAgICAgICAgICAgIDQ6ICc0JyxcbiAgICAgICAgICAgIDU6ICc1JyxcbiAgICAgICAgICAgIDY6ICc2JyxcbiAgICAgICAgICAgIDc6ICc3JyxcbiAgICAgICAgICAgIDg6ICc4JyxcbiAgICAgICAgICAgIDk6ICc5JyxcbiAgICAgICAgICAgIDA6ICcwJyxcbiAgICAgICAgfSxcbiAgICAgICAgcGx1cmFsRm9ybSA9IGZ1bmN0aW9uIChuKSB7XG4gICAgICAgICAgICByZXR1cm4gbiA9PT0gMFxuICAgICAgICAgICAgICAgID8gMFxuICAgICAgICAgICAgICAgIDogbiA9PT0gMVxuICAgICAgICAgICAgICAgICAgPyAxXG4gICAgICAgICAgICAgICAgICA6IG4gPT09IDJcbiAgICAgICAgICAgICAgICAgICAgPyAyXG4gICAgICAgICAgICAgICAgICAgIDogbiAlIDEwMCA+PSAzICYmIG4gJSAxMDAgPD0gMTBcbiAgICAgICAgICAgICAgICAgICAgICA/IDNcbiAgICAgICAgICAgICAgICAgICAgICA6IG4gJSAxMDAgPj0gMTFcbiAgICAgICAgICAgICAgICAgICAgICAgID8gNFxuICAgICAgICAgICAgICAgICAgICAgICAgOiA1O1xuICAgICAgICB9LFxuICAgICAgICBwbHVyYWxzID0ge1xuICAgICAgICAgICAgczogW1xuICAgICAgICAgICAgICAgICfYo9mC2YQg2YXZhiDYq9in2YbZitipJyxcbiAgICAgICAgICAgICAgICAn2KvYp9mG2YrYqSDZiNin2K3Yr9ipJyxcbiAgICAgICAgICAgICAgICBbJ9ir2KfZhtmK2KrYp9mGJywgJ9ir2KfZhtmK2KrZitmGJ10sXG4gICAgICAgICAgICAgICAgJyVkINir2YjYp9mGJyxcbiAgICAgICAgICAgICAgICAnJWQg2KvYp9mG2YrYqScsXG4gICAgICAgICAgICAgICAgJyVkINir2KfZhtmK2KknLFxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIG06IFtcbiAgICAgICAgICAgICAgICAn2KPZgtmEINmF2YYg2K/ZgtmK2YLYqScsXG4gICAgICAgICAgICAgICAgJ9iv2YLZitmC2Kkg2YjYp9it2K/YqScsXG4gICAgICAgICAgICAgICAgWyfYr9mC2YrZgtiq2KfZhicsICfYr9mC2YrZgtiq2YrZhiddLFxuICAgICAgICAgICAgICAgICclZCDYr9mC2KfYptmCJyxcbiAgICAgICAgICAgICAgICAnJWQg2K/ZgtmK2YLYqScsXG4gICAgICAgICAgICAgICAgJyVkINiv2YLZitmC2KknLFxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIGg6IFtcbiAgICAgICAgICAgICAgICAn2KPZgtmEINmF2YYg2LPYp9i52KknLFxuICAgICAgICAgICAgICAgICfYs9in2LnYqSDZiNin2K3Yr9ipJyxcbiAgICAgICAgICAgICAgICBbJ9iz2KfYudiq2KfZhicsICfYs9in2LnYqtmK2YYnXSxcbiAgICAgICAgICAgICAgICAnJWQg2LPYp9i52KfYqicsXG4gICAgICAgICAgICAgICAgJyVkINiz2KfYudipJyxcbiAgICAgICAgICAgICAgICAnJWQg2LPYp9i52KknLFxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIGQ6IFtcbiAgICAgICAgICAgICAgICAn2KPZgtmEINmF2YYg2YrZiNmFJyxcbiAgICAgICAgICAgICAgICAn2YrZiNmFINmI2KfYrdivJyxcbiAgICAgICAgICAgICAgICBbJ9mK2YjZhdin2YYnLCAn2YrZiNmF2YrZhiddLFxuICAgICAgICAgICAgICAgICclZCDYo9mK2KfZhScsXG4gICAgICAgICAgICAgICAgJyVkINmK2YjZhdmL2KcnLFxuICAgICAgICAgICAgICAgICclZCDZitmI2YUnLFxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIE06IFtcbiAgICAgICAgICAgICAgICAn2KPZgtmEINmF2YYg2LTZh9ixJyxcbiAgICAgICAgICAgICAgICAn2LTZh9ixINmI2KfYrdivJyxcbiAgICAgICAgICAgICAgICBbJ9i02YfYsdin2YYnLCAn2LTZh9ix2YrZhiddLFxuICAgICAgICAgICAgICAgICclZCDYo9i02YfYsScsXG4gICAgICAgICAgICAgICAgJyVkINi02YfYsdinJyxcbiAgICAgICAgICAgICAgICAnJWQg2LTZh9ixJyxcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICB5OiBbXG4gICAgICAgICAgICAgICAgJ9ij2YLZhCDZhdmGINi52KfZhScsXG4gICAgICAgICAgICAgICAgJ9i52KfZhSDZiNin2K3YrycsXG4gICAgICAgICAgICAgICAgWyfYudin2YXYp9mGJywgJ9i52KfZhdmK2YYnXSxcbiAgICAgICAgICAgICAgICAnJWQg2KPYudmI2KfZhScsXG4gICAgICAgICAgICAgICAgJyVkINi52KfZhdmL2KcnLFxuICAgICAgICAgICAgICAgICclZCDYudin2YUnLFxuICAgICAgICAgICAgXSxcbiAgICAgICAgfSxcbiAgICAgICAgcGx1cmFsaXplID0gZnVuY3Rpb24gKHUpIHtcbiAgICAgICAgICAgIHJldHVybiBmdW5jdGlvbiAobnVtYmVyLCB3aXRob3V0U3VmZml4LCBzdHJpbmcsIGlzRnV0dXJlKSB7XG4gICAgICAgICAgICAgICAgdmFyIGYgPSBwbHVyYWxGb3JtKG51bWJlciksXG4gICAgICAgICAgICAgICAgICAgIHN0ciA9IHBsdXJhbHNbdV1bcGx1cmFsRm9ybShudW1iZXIpXTtcbiAgICAgICAgICAgICAgICBpZiAoZiA9PT0gMikge1xuICAgICAgICAgICAgICAgICAgICBzdHIgPSBzdHJbd2l0aG91dFN1ZmZpeCA/IDAgOiAxXTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIHN0ci5yZXBsYWNlKC8lZC9pLCBudW1iZXIpO1xuICAgICAgICAgICAgfTtcbiAgICAgICAgfSxcbiAgICAgICAgbW9udGhzID0gW1xuICAgICAgICAgICAgJ9mK2YbYp9mK2LEnLFxuICAgICAgICAgICAgJ9mB2KjYsdin2YrYsScsXG4gICAgICAgICAgICAn2YXYp9ix2LMnLFxuICAgICAgICAgICAgJ9ij2KjYsdmK2YQnLFxuICAgICAgICAgICAgJ9mF2KfZitmIJyxcbiAgICAgICAgICAgICfZitmI2YbZitmIJyxcbiAgICAgICAgICAgICfZitmI2YTZitmIJyxcbiAgICAgICAgICAgICfYo9i62LPYt9izJyxcbiAgICAgICAgICAgICfYs9io2KrZhdio2LEnLFxuICAgICAgICAgICAgJ9ij2YPYqtmI2KjYsScsXG4gICAgICAgICAgICAn2YbZiNmB2YXYqNixJyxcbiAgICAgICAgICAgICfYr9mK2LPZhdio2LEnLFxuICAgICAgICBdO1xuXG4gICAgdmFyIGFyTHkgPSBtb21lbnQuZGVmaW5lTG9jYWxlKCdhci1seScsIHtcbiAgICAgICAgbW9udGhzOiBtb250aHMsXG4gICAgICAgIG1vbnRoc1Nob3J0OiBtb250aHMsXG4gICAgICAgIHdlZWtkYXlzOiAn2KfZhNij2K3Yr1/Yp9mE2KXYq9mG2YrZhl/Yp9mE2KvZhNin2KvYp9ihX9in2YTYo9ix2KjYudin2KFf2KfZhNiu2YXZitizX9in2YTYrNmF2LnYqV/Yp9mE2LPYqNiqJy5zcGxpdCgnXycpLFxuICAgICAgICB3ZWVrZGF5c1Nob3J0OiAn2KPYrdivX9il2KvZhtmK2YZf2KvZhNin2KvYp9ihX9ij2LHYqNi52KfYoV/YrtmF2YrYs1/YrNmF2LnYqV/Ys9io2KonLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzTWluOiAn2K1f2YZf2Ktf2LFf2K5f2Kxf2LMnLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzUGFyc2VFeGFjdDogdHJ1ZSxcbiAgICAgICAgbG9uZ0RhdGVGb3JtYXQ6IHtcbiAgICAgICAgICAgIExUOiAnSEg6bW0nLFxuICAgICAgICAgICAgTFRTOiAnSEg6bW06c3MnLFxuICAgICAgICAgICAgTDogJ0QvXFx1MjAwRk0vXFx1MjAwRllZWVknLFxuICAgICAgICAgICAgTEw6ICdEIE1NTU0gWVlZWScsXG4gICAgICAgICAgICBMTEw6ICdEIE1NTU0gWVlZWSBISDptbScsXG4gICAgICAgICAgICBMTExMOiAnZGRkZCBEIE1NTU0gWVlZWSBISDptbScsXG4gICAgICAgIH0sXG4gICAgICAgIG1lcmlkaWVtUGFyc2U6IC/YtXzZhS8sXG4gICAgICAgIGlzUE06IGZ1bmN0aW9uIChpbnB1dCkge1xuICAgICAgICAgICAgcmV0dXJuICfZhScgPT09IGlucHV0O1xuICAgICAgICB9LFxuICAgICAgICBtZXJpZGllbTogZnVuY3Rpb24gKGhvdXIsIG1pbnV0ZSwgaXNMb3dlcikge1xuICAgICAgICAgICAgaWYgKGhvdXIgPCAxMikge1xuICAgICAgICAgICAgICAgIHJldHVybiAn2LUnO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gJ9mFJztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgY2FsZW5kYXI6IHtcbiAgICAgICAgICAgIHNhbWVEYXk6ICdb2KfZhNmK2YjZhSDYudmG2K8g2KfZhNiz2KfYudipXSBMVCcsXG4gICAgICAgICAgICBuZXh0RGF5OiAnW9i62K/Zi9inINi52YbYryDYp9mE2LPYp9i52KldIExUJyxcbiAgICAgICAgICAgIG5leHRXZWVrOiAnZGRkZCBb2LnZhtivINin2YTYs9in2LnYqV0gTFQnLFxuICAgICAgICAgICAgbGFzdERheTogJ1vYo9mF2LMg2LnZhtivINin2YTYs9in2LnYqV0gTFQnLFxuICAgICAgICAgICAgbGFzdFdlZWs6ICdkZGRkIFvYudmG2K8g2KfZhNiz2KfYudipXSBMVCcsXG4gICAgICAgICAgICBzYW1lRWxzZTogJ0wnLFxuICAgICAgICB9LFxuICAgICAgICByZWxhdGl2ZVRpbWU6IHtcbiAgICAgICAgICAgIGZ1dHVyZTogJ9io2LnYryAlcycsXG4gICAgICAgICAgICBwYXN0OiAn2YXZhtiwICVzJyxcbiAgICAgICAgICAgIHM6IHBsdXJhbGl6ZSgncycpLFxuICAgICAgICAgICAgc3M6IHBsdXJhbGl6ZSgncycpLFxuICAgICAgICAgICAgbTogcGx1cmFsaXplKCdtJyksXG4gICAgICAgICAgICBtbTogcGx1cmFsaXplKCdtJyksXG4gICAgICAgICAgICBoOiBwbHVyYWxpemUoJ2gnKSxcbiAgICAgICAgICAgIGhoOiBwbHVyYWxpemUoJ2gnKSxcbiAgICAgICAgICAgIGQ6IHBsdXJhbGl6ZSgnZCcpLFxuICAgICAgICAgICAgZGQ6IHBsdXJhbGl6ZSgnZCcpLFxuICAgICAgICAgICAgTTogcGx1cmFsaXplKCdNJyksXG4gICAgICAgICAgICBNTTogcGx1cmFsaXplKCdNJyksXG4gICAgICAgICAgICB5OiBwbHVyYWxpemUoJ3knKSxcbiAgICAgICAgICAgIHl5OiBwbHVyYWxpemUoJ3knKSxcbiAgICAgICAgfSxcbiAgICAgICAgcHJlcGFyc2U6IGZ1bmN0aW9uIChzdHJpbmcpIHtcbiAgICAgICAgICAgIHJldHVybiBzdHJpbmcucmVwbGFjZSgv2IwvZywgJywnKTtcbiAgICAgICAgfSxcbiAgICAgICAgcG9zdGZvcm1hdDogZnVuY3Rpb24gKHN0cmluZykge1xuICAgICAgICAgICAgcmV0dXJuIHN0cmluZ1xuICAgICAgICAgICAgICAgIC5yZXBsYWNlKC9cXGQvZywgZnVuY3Rpb24gKG1hdGNoKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBzeW1ib2xNYXBbbWF0Y2hdO1xuICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgLnJlcGxhY2UoLywvZywgJ9iMJyk7XG4gICAgICAgIH0sXG4gICAgICAgIHdlZWs6IHtcbiAgICAgICAgICAgIGRvdzogNiwgLy8gU2F0dXJkYXkgaXMgdGhlIGZpcnN0IGRheSBvZiB0aGUgd2Vlay5cbiAgICAgICAgICAgIGRveTogMTIsIC8vIFRoZSB3ZWVrIHRoYXQgY29udGFpbnMgSmFuIDEydGggaXMgdGhlIGZpcnN0IHdlZWsgb2YgdGhlIHllYXIuXG4gICAgICAgIH0sXG4gICAgfSk7XG5cbiAgICByZXR1cm4gYXJMeTtcblxufSkpKTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///42353\n")},42547:(I,g,t)=>{"use strict";I.exports=t.p+"d2f36cffe0f8bb32174c.png"},42767:(I,g,t)=>{"use strict";I.exports=t.p+"5ebb0e2637af665e59a8.png"},43004:function(__unused_webpack_module,__unused_webpack_exports,__webpack_require__){eval("//! moment.js locale configuration\n//! locale : English (Singapore) [en-sg]\n//! author : Matthew Castrillon-Madrigal : https://github.com/techdimension\n\n;(function (global, factory) {\n true ? factory(__webpack_require__(95093)) :\n 0\n}(this, (function (moment) { 'use strict';\n\n //! moment.js locale configuration\n\n var enSg = moment.defineLocale('en-sg', {\n months: 'January_February_March_April_May_June_July_August_September_October_November_December'.split(\n '_'\n ),\n monthsShort: 'Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec'.split('_'),\n weekdays: 'Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday'.split(\n '_'\n ),\n weekdaysShort: 'Sun_Mon_Tue_Wed_Thu_Fri_Sat'.split('_'),\n weekdaysMin: 'Su_Mo_Tu_We_Th_Fr_Sa'.split('_'),\n longDateFormat: {\n LT: 'HH:mm',\n LTS: 'HH:mm:ss',\n L: 'DD/MM/YYYY',\n LL: 'D MMMM YYYY',\n LLL: 'D MMMM YYYY HH:mm',\n LLLL: 'dddd, D MMMM YYYY HH:mm',\n },\n calendar: {\n sameDay: '[Today at] LT',\n nextDay: '[Tomorrow at] LT',\n nextWeek: 'dddd [at] LT',\n lastDay: '[Yesterday at] LT',\n lastWeek: '[Last] dddd [at] LT',\n sameElse: 'L',\n },\n relativeTime: {\n future: 'in %s',\n past: '%s ago',\n s: 'a few seconds',\n ss: '%d seconds',\n m: 'a minute',\n mm: '%d minutes',\n h: 'an hour',\n hh: '%d hours',\n d: 'a day',\n dd: '%d days',\n M: 'a month',\n MM: '%d months',\n y: 'a year',\n yy: '%d years',\n },\n dayOfMonthOrdinalParse: /\\d{1,2}(st|nd|rd|th)/,\n ordinal: function (number) {\n var b = number % 10,\n output =\n ~~((number % 100) / 10) === 1\n ? 'th'\n : b === 1\n ? 'st'\n : b === 2\n ? 'nd'\n : b === 3\n ? 'rd'\n : 'th';\n return number + output;\n },\n week: {\n dow: 1, // Monday is the first day of the week.\n doy: 4, // The week that contains Jan 4th is the first week of the year.\n },\n });\n\n return enSg;\n\n})));\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNDMwMDQuanMiLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL2l0Zy1uZXh0Z2VuLWZyb250ZW5kLy4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvZW4tc2cuanM/YjdlOSJdLCJzb3VyY2VzQ29udGVudCI6WyIvLyEgbW9tZW50LmpzIGxvY2FsZSBjb25maWd1cmF0aW9uXG4vLyEgbG9jYWxlIDogRW5nbGlzaCAoU2luZ2Fwb3JlKSBbZW4tc2ddXG4vLyEgYXV0aG9yIDogTWF0dGhldyBDYXN0cmlsbG9uLU1hZHJpZ2FsIDogaHR0cHM6Ly9naXRodWIuY29tL3RlY2hkaW1lbnNpb25cblxuOyhmdW5jdGlvbiAoZ2xvYmFsLCBmYWN0b3J5KSB7XG4gICB0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcgJiYgdHlwZW9mIG1vZHVsZSAhPT0gJ3VuZGVmaW5lZCdcbiAgICAgICAmJiB0eXBlb2YgcmVxdWlyZSA9PT0gJ2Z1bmN0aW9uJyA/IGZhY3RvcnkocmVxdWlyZSgnLi4vbW9tZW50JykpIDpcbiAgIHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgZGVmaW5lLmFtZCA/IGRlZmluZShbJy4uL21vbWVudCddLCBmYWN0b3J5KSA6XG4gICBmYWN0b3J5KGdsb2JhbC5tb21lbnQpXG59KHRoaXMsIChmdW5jdGlvbiAobW9tZW50KSB7ICd1c2Ugc3RyaWN0JztcblxuICAgIC8vISBtb21lbnQuanMgbG9jYWxlIGNvbmZpZ3VyYXRpb25cblxuICAgIHZhciBlblNnID0gbW9tZW50LmRlZmluZUxvY2FsZSgnZW4tc2cnLCB7XG4gICAgICAgIG1vbnRoczogJ0phbnVhcnlfRmVicnVhcnlfTWFyY2hfQXByaWxfTWF5X0p1bmVfSnVseV9BdWd1c3RfU2VwdGVtYmVyX09jdG9iZXJfTm92ZW1iZXJfRGVjZW1iZXInLnNwbGl0KFxuICAgICAgICAgICAgJ18nXG4gICAgICAgICksXG4gICAgICAgIG1vbnRoc1Nob3J0OiAnSmFuX0ZlYl9NYXJfQXByX01heV9KdW5fSnVsX0F1Z19TZXBfT2N0X05vdl9EZWMnLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzOiAnU3VuZGF5X01vbmRheV9UdWVzZGF5X1dlZG5lc2RheV9UaHVyc2RheV9GcmlkYXlfU2F0dXJkYXknLnNwbGl0KFxuICAgICAgICAgICAgJ18nXG4gICAgICAgICksXG4gICAgICAgIHdlZWtkYXlzU2hvcnQ6ICdTdW5fTW9uX1R1ZV9XZWRfVGh1X0ZyaV9TYXQnLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzTWluOiAnU3VfTW9fVHVfV2VfVGhfRnJfU2EnLnNwbGl0KCdfJyksXG4gICAgICAgIGxvbmdEYXRlRm9ybWF0OiB7XG4gICAgICAgICAgICBMVDogJ0hIOm1tJyxcbiAgICAgICAgICAgIExUUzogJ0hIOm1tOnNzJyxcbiAgICAgICAgICAgIEw6ICdERC9NTS9ZWVlZJyxcbiAgICAgICAgICAgIExMOiAnRCBNTU1NIFlZWVknLFxuICAgICAgICAgICAgTExMOiAnRCBNTU1NIFlZWVkgSEg6bW0nLFxuICAgICAgICAgICAgTExMTDogJ2RkZGQsIEQgTU1NTSBZWVlZIEhIOm1tJyxcbiAgICAgICAgfSxcbiAgICAgICAgY2FsZW5kYXI6IHtcbiAgICAgICAgICAgIHNhbWVEYXk6ICdbVG9kYXkgYXRdIExUJyxcbiAgICAgICAgICAgIG5leHREYXk6ICdbVG9tb3Jyb3cgYXRdIExUJyxcbiAgICAgICAgICAgIG5leHRXZWVrOiAnZGRkZCBbYXRdIExUJyxcbiAgICAgICAgICAgIGxhc3REYXk6ICdbWWVzdGVyZGF5IGF0XSBMVCcsXG4gICAgICAgICAgICBsYXN0V2VlazogJ1tMYXN0XSBkZGRkIFthdF0gTFQnLFxuICAgICAgICAgICAgc2FtZUVsc2U6ICdMJyxcbiAgICAgICAgfSxcbiAgICAgICAgcmVsYXRpdmVUaW1lOiB7XG4gICAgICAgICAgICBmdXR1cmU6ICdpbiAlcycsXG4gICAgICAgICAgICBwYXN0OiAnJXMgYWdvJyxcbiAgICAgICAgICAgIHM6ICdhIGZldyBzZWNvbmRzJyxcbiAgICAgICAgICAgIHNzOiAnJWQgc2Vjb25kcycsXG4gICAgICAgICAgICBtOiAnYSBtaW51dGUnLFxuICAgICAgICAgICAgbW06ICclZCBtaW51dGVzJyxcbiAgICAgICAgICAgIGg6ICdhbiBob3VyJyxcbiAgICAgICAgICAgIGhoOiAnJWQgaG91cnMnLFxuICAgICAgICAgICAgZDogJ2EgZGF5JyxcbiAgICAgICAgICAgIGRkOiAnJWQgZGF5cycsXG4gICAgICAgICAgICBNOiAnYSBtb250aCcsXG4gICAgICAgICAgICBNTTogJyVkIG1vbnRocycsXG4gICAgICAgICAgICB5OiAnYSB5ZWFyJyxcbiAgICAgICAgICAgIHl5OiAnJWQgeWVhcnMnLFxuICAgICAgICB9LFxuICAgICAgICBkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOiAvXFxkezEsMn0oc3R8bmR8cmR8dGgpLyxcbiAgICAgICAgb3JkaW5hbDogZnVuY3Rpb24gKG51bWJlcikge1xuICAgICAgICAgICAgdmFyIGIgPSBudW1iZXIgJSAxMCxcbiAgICAgICAgICAgICAgICBvdXRwdXQgPVxuICAgICAgICAgICAgICAgICAgICB+figobnVtYmVyICUgMTAwKSAvIDEwKSA9PT0gMVxuICAgICAgICAgICAgICAgICAgICAgICAgPyAndGgnXG4gICAgICAgICAgICAgICAgICAgICAgICA6IGIgPT09IDFcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPyAnc3QnXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDogYiA9PT0gMlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gJ25kJ1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogYiA9PT0gM1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPyAncmQnXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6ICd0aCc7XG4gICAgICAgICAgICByZXR1cm4gbnVtYmVyICsgb3V0cHV0O1xuICAgICAgICB9LFxuICAgICAgICB3ZWVrOiB7XG4gICAgICAgICAgICBkb3c6IDEsIC8vIE1vbmRheSBpcyB0aGUgZmlyc3QgZGF5IG9mIHRoZSB3ZWVrLlxuICAgICAgICAgICAgZG95OiA0LCAvLyBUaGUgd2VlayB0aGF0IGNvbnRhaW5zIEphbiA0dGggaXMgdGhlIGZpcnN0IHdlZWsgb2YgdGhlIHllYXIuXG4gICAgICAgIH0sXG4gICAgfSk7XG5cbiAgICByZXR1cm4gZW5TZztcblxufSkpKTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///43004\n")},43012:(I,g,t)=>{"use strict";I.exports=t.p+"727f12ef9ef1ad616928.png"},43128:function(module,exports,__webpack_require__){eval(";(function (root, factory, undef) {\n\tif (true) {\n\t\t// CommonJS\n\t\tmodule.exports = exports = factory(__webpack_require__(19021), __webpack_require__(80754), __webpack_require__(84636), __webpack_require__(39506), __webpack_require__(57165));\n\t}\n\telse {}\n}(this, function (CryptoJS) {\n\n\t(function () {\n\t // Shortcuts\n\t var C = CryptoJS;\n\t var C_lib = C.lib;\n\t var BlockCipher = C_lib.BlockCipher;\n\t var C_algo = C.algo;\n\n\t const N = 16;\n\n\t //Origin pbox and sbox, derived from PI\n\t const ORIG_P = [\n\t 0x243F6A88, 0x85A308D3, 0x13198A2E, 0x03707344,\n\t 0xA4093822, 0x299F31D0, 0x082EFA98, 0xEC4E6C89,\n\t 0x452821E6, 0x38D01377, 0xBE5466CF, 0x34E90C6C,\n\t 0xC0AC29B7, 0xC97C50DD, 0x3F84D5B5, 0xB5470917,\n\t 0x9216D5D9, 0x8979FB1B\n\t ];\n\n\t const ORIG_S = [\n\t [ 0xD1310BA6, 0x98DFB5AC, 0x2FFD72DB, 0xD01ADFB7,\n\t 0xB8E1AFED, 0x6A267E96, 0xBA7C9045, 0xF12C7F99,\n\t 0x24A19947, 0xB3916CF7, 0x0801F2E2, 0x858EFC16,\n\t 0x636920D8, 0x71574E69, 0xA458FEA3, 0xF4933D7E,\n\t 0x0D95748F, 0x728EB658, 0x718BCD58, 0x82154AEE,\n\t 0x7B54A41D, 0xC25A59B5, 0x9C30D539, 0x2AF26013,\n\t 0xC5D1B023, 0x286085F0, 0xCA417918, 0xB8DB38EF,\n\t 0x8E79DCB0, 0x603A180E, 0x6C9E0E8B, 0xB01E8A3E,\n\t 0xD71577C1, 0xBD314B27, 0x78AF2FDA, 0x55605C60,\n\t 0xE65525F3, 0xAA55AB94, 0x57489862, 0x63E81440,\n\t 0x55CA396A, 0x2AAB10B6, 0xB4CC5C34, 0x1141E8CE,\n\t 0xA15486AF, 0x7C72E993, 0xB3EE1411, 0x636FBC2A,\n\t 0x2BA9C55D, 0x741831F6, 0xCE5C3E16, 0x9B87931E,\n\t 0xAFD6BA33, 0x6C24CF5C, 0x7A325381, 0x28958677,\n\t 0x3B8F4898, 0x6B4BB9AF, 0xC4BFE81B, 0x66282193,\n\t 0x61D809CC, 0xFB21A991, 0x487CAC60, 0x5DEC8032,\n\t 0xEF845D5D, 0xE98575B1, 0xDC262302, 0xEB651B88,\n\t 0x23893E81, 0xD396ACC5, 0x0F6D6FF3, 0x83F44239,\n\t 0x2E0B4482, 0xA4842004, 0x69C8F04A, 0x9E1F9B5E,\n\t 0x21C66842, 0xF6E96C9A, 0x670C9C61, 0xABD388F0,\n\t 0x6A51A0D2, 0xD8542F68, 0x960FA728, 0xAB5133A3,\n\t 0x6EEF0B6C, 0x137A3BE4, 0xBA3BF050, 0x7EFB2A98,\n\t 0xA1F1651D, 0x39AF0176, 0x66CA593E, 0x82430E88,\n\t 0x8CEE8619, 0x456F9FB4, 0x7D84A5C3, 0x3B8B5EBE,\n\t 0xE06F75D8, 0x85C12073, 0x401A449F, 0x56C16AA6,\n\t 0x4ED3AA62, 0x363F7706, 0x1BFEDF72, 0x429B023D,\n\t 0x37D0D724, 0xD00A1248, 0xDB0FEAD3, 0x49F1C09B,\n\t 0x075372C9, 0x80991B7B, 0x25D479D8, 0xF6E8DEF7,\n\t 0xE3FE501A, 0xB6794C3B, 0x976CE0BD, 0x04C006BA,\n\t 0xC1A94FB6, 0x409F60C4, 0x5E5C9EC2, 0x196A2463,\n\t 0x68FB6FAF, 0x3E6C53B5, 0x1339B2EB, 0x3B52EC6F,\n\t 0x6DFC511F, 0x9B30952C, 0xCC814544, 0xAF5EBD09,\n\t 0xBEE3D004, 0xDE334AFD, 0x660F2807, 0x192E4BB3,\n\t 0xC0CBA857, 0x45C8740F, 0xD20B5F39, 0xB9D3FBDB,\n\t 0x5579C0BD, 0x1A60320A, 0xD6A100C6, 0x402C7279,\n\t 0x679F25FE, 0xFB1FA3CC, 0x8EA5E9F8, 0xDB3222F8,\n\t 0x3C7516DF, 0xFD616B15, 0x2F501EC8, 0xAD0552AB,\n\t 0x323DB5FA, 0xFD238760, 0x53317B48, 0x3E00DF82,\n\t 0x9E5C57BB, 0xCA6F8CA0, 0x1A87562E, 0xDF1769DB,\n\t 0xD542A8F6, 0x287EFFC3, 0xAC6732C6, 0x8C4F5573,\n\t 0x695B27B0, 0xBBCA58C8, 0xE1FFA35D, 0xB8F011A0,\n\t 0x10FA3D98, 0xFD2183B8, 0x4AFCB56C, 0x2DD1D35B,\n\t 0x9A53E479, 0xB6F84565, 0xD28E49BC, 0x4BFB9790,\n\t 0xE1DDF2DA, 0xA4CB7E33, 0x62FB1341, 0xCEE4C6E8,\n\t 0xEF20CADA, 0x36774C01, 0xD07E9EFE, 0x2BF11FB4,\n\t 0x95DBDA4D, 0xAE909198, 0xEAAD8E71, 0x6B93D5A0,\n\t 0xD08ED1D0, 0xAFC725E0, 0x8E3C5B2F, 0x8E7594B7,\n\t 0x8FF6E2FB, 0xF2122B64, 0x8888B812, 0x900DF01C,\n\t 0x4FAD5EA0, 0x688FC31C, 0xD1CFF191, 0xB3A8C1AD,\n\t 0x2F2F2218, 0xBE0E1777, 0xEA752DFE, 0x8B021FA1,\n\t 0xE5A0CC0F, 0xB56F74E8, 0x18ACF3D6, 0xCE89E299,\n\t 0xB4A84FE0, 0xFD13E0B7, 0x7CC43B81, 0xD2ADA8D9,\n\t 0x165FA266, 0x80957705, 0x93CC7314, 0x211A1477,\n\t 0xE6AD2065, 0x77B5FA86, 0xC75442F5, 0xFB9D35CF,\n\t 0xEBCDAF0C, 0x7B3E89A0, 0xD6411BD3, 0xAE1E7E49,\n\t 0x00250E2D, 0x2071B35E, 0x226800BB, 0x57B8E0AF,\n\t 0x2464369B, 0xF009B91E, 0x5563911D, 0x59DFA6AA,\n\t 0x78C14389, 0xD95A537F, 0x207D5BA2, 0x02E5B9C5,\n\t 0x83260376, 0x6295CFA9, 0x11C81968, 0x4E734A41,\n\t 0xB3472DCA, 0x7B14A94A, 0x1B510052, 0x9A532915,\n\t 0xD60F573F, 0xBC9BC6E4, 0x2B60A476, 0x81E67400,\n\t 0x08BA6FB5, 0x571BE91F, 0xF296EC6B, 0x2A0DD915,\n\t 0xB6636521, 0xE7B9F9B6, 0xFF34052E, 0xC5855664,\n\t 0x53B02D5D, 0xA99F8FA1, 0x08BA4799, 0x6E85076A ],\n\t [ 0x4B7A70E9, 0xB5B32944, 0xDB75092E, 0xC4192623,\n\t 0xAD6EA6B0, 0x49A7DF7D, 0x9CEE60B8, 0x8FEDB266,\n\t 0xECAA8C71, 0x699A17FF, 0x5664526C, 0xC2B19EE1,\n\t 0x193602A5, 0x75094C29, 0xA0591340, 0xE4183A3E,\n\t 0x3F54989A, 0x5B429D65, 0x6B8FE4D6, 0x99F73FD6,\n\t 0xA1D29C07, 0xEFE830F5, 0x4D2D38E6, 0xF0255DC1,\n\t 0x4CDD2086, 0x8470EB26, 0x6382E9C6, 0x021ECC5E,\n\t 0x09686B3F, 0x3EBAEFC9, 0x3C971814, 0x6B6A70A1,\n\t 0x687F3584, 0x52A0E286, 0xB79C5305, 0xAA500737,\n\t 0x3E07841C, 0x7FDEAE5C, 0x8E7D44EC, 0x5716F2B8,\n\t 0xB03ADA37, 0xF0500C0D, 0xF01C1F04, 0x0200B3FF,\n\t 0xAE0CF51A, 0x3CB574B2, 0x25837A58, 0xDC0921BD,\n\t 0xD19113F9, 0x7CA92FF6, 0x94324773, 0x22F54701,\n\t 0x3AE5E581, 0x37C2DADC, 0xC8B57634, 0x9AF3DDA7,\n\t 0xA9446146, 0x0FD0030E, 0xECC8C73E, 0xA4751E41,\n\t 0xE238CD99, 0x3BEA0E2F, 0x3280BBA1, 0x183EB331,\n\t 0x4E548B38, 0x4F6DB908, 0x6F420D03, 0xF60A04BF,\n\t 0x2CB81290, 0x24977C79, 0x5679B072, 0xBCAF89AF,\n\t 0xDE9A771F, 0xD9930810, 0xB38BAE12, 0xDCCF3F2E,\n\t 0x5512721F, 0x2E6B7124, 0x501ADDE6, 0x9F84CD87,\n\t 0x7A584718, 0x7408DA17, 0xBC9F9ABC, 0xE94B7D8C,\n\t 0xEC7AEC3A, 0xDB851DFA, 0x63094366, 0xC464C3D2,\n\t 0xEF1C1847, 0x3215D908, 0xDD433B37, 0x24C2BA16,\n\t 0x12A14D43, 0x2A65C451, 0x50940002, 0x133AE4DD,\n\t 0x71DFF89E, 0x10314E55, 0x81AC77D6, 0x5F11199B,\n\t 0x043556F1, 0xD7A3C76B, 0x3C11183B, 0x5924A509,\n\t 0xF28FE6ED, 0x97F1FBFA, 0x9EBABF2C, 0x1E153C6E,\n\t 0x86E34570, 0xEAE96FB1, 0x860E5E0A, 0x5A3E2AB3,\n\t 0x771FE71C, 0x4E3D06FA, 0x2965DCB9, 0x99E71D0F,\n\t 0x803E89D6, 0x5266C825, 0x2E4CC978, 0x9C10B36A,\n\t 0xC6150EBA, 0x94E2EA78, 0xA5FC3C53, 0x1E0A2DF4,\n\t 0xF2F74EA7, 0x361D2B3D, 0x1939260F, 0x19C27960,\n\t 0x5223A708, 0xF71312B6, 0xEBADFE6E, 0xEAC31F66,\n\t 0xE3BC4595, 0xA67BC883, 0xB17F37D1, 0x018CFF28,\n\t 0xC332DDEF, 0xBE6C5AA5, 0x65582185, 0x68AB9802,\n\t 0xEECEA50F, 0xDB2F953B, 0x2AEF7DAD, 0x5B6E2F84,\n\t 0x1521B628, 0x29076170, 0xECDD4775, 0x619F1510,\n\t 0x13CCA830, 0xEB61BD96, 0x0334FE1E, 0xAA0363CF,\n\t 0xB5735C90, 0x4C70A239, 0xD59E9E0B, 0xCBAADE14,\n\t 0xEECC86BC, 0x60622CA7, 0x9CAB5CAB, 0xB2F3846E,\n\t 0x648B1EAF, 0x19BDF0CA, 0xA02369B9, 0x655ABB50,\n\t 0x40685A32, 0x3C2AB4B3, 0x319EE9D5, 0xC021B8F7,\n\t 0x9B540B19, 0x875FA099, 0x95F7997E, 0x623D7DA8,\n\t 0xF837889A, 0x97E32D77, 0x11ED935F, 0x16681281,\n\t 0x0E358829, 0xC7E61FD6, 0x96DEDFA1, 0x7858BA99,\n\t 0x57F584A5, 0x1B227263, 0x9B83C3FF, 0x1AC24696,\n\t 0xCDB30AEB, 0x532E3054, 0x8FD948E4, 0x6DBC3128,\n\t 0x58EBF2EF, 0x34C6FFEA, 0xFE28ED61, 0xEE7C3C73,\n\t 0x5D4A14D9, 0xE864B7E3, 0x42105D14, 0x203E13E0,\n\t 0x45EEE2B6, 0xA3AAABEA, 0xDB6C4F15, 0xFACB4FD0,\n\t 0xC742F442, 0xEF6ABBB5, 0x654F3B1D, 0x41CD2105,\n\t 0xD81E799E, 0x86854DC7, 0xE44B476A, 0x3D816250,\n\t 0xCF62A1F2, 0x5B8D2646, 0xFC8883A0, 0xC1C7B6A3,\n\t 0x7F1524C3, 0x69CB7492, 0x47848A0B, 0x5692B285,\n\t 0x095BBF00, 0xAD19489D, 0x1462B174, 0x23820E00,\n\t 0x58428D2A, 0x0C55F5EA, 0x1DADF43E, 0x233F7061,\n\t 0x3372F092, 0x8D937E41, 0xD65FECF1, 0x6C223BDB,\n\t 0x7CDE3759, 0xCBEE7460, 0x4085F2A7, 0xCE77326E,\n\t 0xA6078084, 0x19F8509E, 0xE8EFD855, 0x61D99735,\n\t 0xA969A7AA, 0xC50C06C2, 0x5A04ABFC, 0x800BCADC,\n\t 0x9E447A2E, 0xC3453484, 0xFDD56705, 0x0E1E9EC9,\n\t 0xDB73DBD3, 0x105588CD, 0x675FDA79, 0xE3674340,\n\t 0xC5C43465, 0x713E38D8, 0x3D28F89E, 0xF16DFF20,\n\t 0x153E21E7, 0x8FB03D4A, 0xE6E39F2B, 0xDB83ADF7 ],\n\t [ 0xE93D5A68, 0x948140F7, 0xF64C261C, 0x94692934,\n\t 0x411520F7, 0x7602D4F7, 0xBCF46B2E, 0xD4A20068,\n\t 0xD4082471, 0x3320F46A, 0x43B7D4B7, 0x500061AF,\n\t 0x1E39F62E, 0x97244546, 0x14214F74, 0xBF8B8840,\n\t 0x4D95FC1D, 0x96B591AF, 0x70F4DDD3, 0x66A02F45,\n\t 0xBFBC09EC, 0x03BD9785, 0x7FAC6DD0, 0x31CB8504,\n\t 0x96EB27B3, 0x55FD3941, 0xDA2547E6, 0xABCA0A9A,\n\t 0x28507825, 0x530429F4, 0x0A2C86DA, 0xE9B66DFB,\n\t 0x68DC1462, 0xD7486900, 0x680EC0A4, 0x27A18DEE,\n\t 0x4F3FFEA2, 0xE887AD8C, 0xB58CE006, 0x7AF4D6B6,\n\t 0xAACE1E7C, 0xD3375FEC, 0xCE78A399, 0x406B2A42,\n\t 0x20FE9E35, 0xD9F385B9, 0xEE39D7AB, 0x3B124E8B,\n\t 0x1DC9FAF7, 0x4B6D1856, 0x26A36631, 0xEAE397B2,\n\t 0x3A6EFA74, 0xDD5B4332, 0x6841E7F7, 0xCA7820FB,\n\t 0xFB0AF54E, 0xD8FEB397, 0x454056AC, 0xBA489527,\n\t 0x55533A3A, 0x20838D87, 0xFE6BA9B7, 0xD096954B,\n\t 0x55A867BC, 0xA1159A58, 0xCCA92963, 0x99E1DB33,\n\t 0xA62A4A56, 0x3F3125F9, 0x5EF47E1C, 0x9029317C,\n\t 0xFDF8E802, 0x04272F70, 0x80BB155C, 0x05282CE3,\n\t 0x95C11548, 0xE4C66D22, 0x48C1133F, 0xC70F86DC,\n\t 0x07F9C9EE, 0x41041F0F, 0x404779A4, 0x5D886E17,\n\t 0x325F51EB, 0xD59BC0D1, 0xF2BCC18F, 0x41113564,\n\t 0x257B7834, 0x602A9C60, 0xDFF8E8A3, 0x1F636C1B,\n\t 0x0E12B4C2, 0x02E1329E, 0xAF664FD1, 0xCAD18115,\n\t 0x6B2395E0, 0x333E92E1, 0x3B240B62, 0xEEBEB922,\n\t 0x85B2A20E, 0xE6BA0D99, 0xDE720C8C, 0x2DA2F728,\n\t 0xD0127845, 0x95B794FD, 0x647D0862, 0xE7CCF5F0,\n\t 0x5449A36F, 0x877D48FA, 0xC39DFD27, 0xF33E8D1E,\n\t 0x0A476341, 0x992EFF74, 0x3A6F6EAB, 0xF4F8FD37,\n\t 0xA812DC60, 0xA1EBDDF8, 0x991BE14C, 0xDB6E6B0D,\n\t 0xC67B5510, 0x6D672C37, 0x2765D43B, 0xDCD0E804,\n\t 0xF1290DC7, 0xCC00FFA3, 0xB5390F92, 0x690FED0B,\n\t 0x667B9FFB, 0xCEDB7D9C, 0xA091CF0B, 0xD9155EA3,\n\t 0xBB132F88, 0x515BAD24, 0x7B9479BF, 0x763BD6EB,\n\t 0x37392EB3, 0xCC115979, 0x8026E297, 0xF42E312D,\n\t 0x6842ADA7, 0xC66A2B3B, 0x12754CCC, 0x782EF11C,\n\t 0x6A124237, 0xB79251E7, 0x06A1BBE6, 0x4BFB6350,\n\t 0x1A6B1018, 0x11CAEDFA, 0x3D25BDD8, 0xE2E1C3C9,\n\t 0x44421659, 0x0A121386, 0xD90CEC6E, 0xD5ABEA2A,\n\t 0x64AF674E, 0xDA86A85F, 0xBEBFE988, 0x64E4C3FE,\n\t 0x9DBC8057, 0xF0F7C086, 0x60787BF8, 0x6003604D,\n\t 0xD1FD8346, 0xF6381FB0, 0x7745AE04, 0xD736FCCC,\n\t 0x83426B33, 0xF01EAB71, 0xB0804187, 0x3C005E5F,\n\t 0x77A057BE, 0xBDE8AE24, 0x55464299, 0xBF582E61,\n\t 0x4E58F48F, 0xF2DDFDA2, 0xF474EF38, 0x8789BDC2,\n\t 0x5366F9C3, 0xC8B38E74, 0xB475F255, 0x46FCD9B9,\n\t 0x7AEB2661, 0x8B1DDF84, 0x846A0E79, 0x915F95E2,\n\t 0x466E598E, 0x20B45770, 0x8CD55591, 0xC902DE4C,\n\t 0xB90BACE1, 0xBB8205D0, 0x11A86248, 0x7574A99E,\n\t 0xB77F19B6, 0xE0A9DC09, 0x662D09A1, 0xC4324633,\n\t 0xE85A1F02, 0x09F0BE8C, 0x4A99A025, 0x1D6EFE10,\n\t 0x1AB93D1D, 0x0BA5A4DF, 0xA186F20F, 0x2868F169,\n\t 0xDCB7DA83, 0x573906FE, 0xA1E2CE9B, 0x4FCD7F52,\n\t 0x50115E01, 0xA70683FA, 0xA002B5C4, 0x0DE6D027,\n\t 0x9AF88C27, 0x773F8641, 0xC3604C06, 0x61A806B5,\n\t 0xF0177A28, 0xC0F586E0, 0x006058AA, 0x30DC7D62,\n\t 0x11E69ED7, 0x2338EA63, 0x53C2DD94, 0xC2C21634,\n\t 0xBBCBEE56, 0x90BCB6DE, 0xEBFC7DA1, 0xCE591D76,\n\t 0x6F05E409, 0x4B7C0188, 0x39720A3D, 0x7C927C24,\n\t 0x86E3725F, 0x724D9DB9, 0x1AC15BB4, 0xD39EB8FC,\n\t 0xED545578, 0x08FCA5B5, 0xD83D7CD3, 0x4DAD0FC4,\n\t 0x1E50EF5E, 0xB161E6F8, 0xA28514D9, 0x6C51133C,\n\t 0x6FD5C7E7, 0x56E14EC4, 0x362ABFCE, 0xDDC6C837,\n\t 0xD79A3234, 0x92638212, 0x670EFA8E, 0x406000E0 ],\n\t [ 0x3A39CE37, 0xD3FAF5CF, 0xABC27737, 0x5AC52D1B,\n\t 0x5CB0679E, 0x4FA33742, 0xD3822740, 0x99BC9BBE,\n\t 0xD5118E9D, 0xBF0F7315, 0xD62D1C7E, 0xC700C47B,\n\t 0xB78C1B6B, 0x21A19045, 0xB26EB1BE, 0x6A366EB4,\n\t 0x5748AB2F, 0xBC946E79, 0xC6A376D2, 0x6549C2C8,\n\t 0x530FF8EE, 0x468DDE7D, 0xD5730A1D, 0x4CD04DC6,\n\t 0x2939BBDB, 0xA9BA4650, 0xAC9526E8, 0xBE5EE304,\n\t 0xA1FAD5F0, 0x6A2D519A, 0x63EF8CE2, 0x9A86EE22,\n\t 0xC089C2B8, 0x43242EF6, 0xA51E03AA, 0x9CF2D0A4,\n\t 0x83C061BA, 0x9BE96A4D, 0x8FE51550, 0xBA645BD6,\n\t 0x2826A2F9, 0xA73A3AE1, 0x4BA99586, 0xEF5562E9,\n\t 0xC72FEFD3, 0xF752F7DA, 0x3F046F69, 0x77FA0A59,\n\t 0x80E4A915, 0x87B08601, 0x9B09E6AD, 0x3B3EE593,\n\t 0xE990FD5A, 0x9E34D797, 0x2CF0B7D9, 0x022B8B51,\n\t 0x96D5AC3A, 0x017DA67D, 0xD1CF3ED6, 0x7C7D2D28,\n\t 0x1F9F25CF, 0xADF2B89B, 0x5AD6B472, 0x5A88F54C,\n\t 0xE029AC71, 0xE019A5E6, 0x47B0ACFD, 0xED93FA9B,\n\t 0xE8D3C48D, 0x283B57CC, 0xF8D56629, 0x79132E28,\n\t 0x785F0191, 0xED756055, 0xF7960E44, 0xE3D35E8C,\n\t 0x15056DD4, 0x88F46DBA, 0x03A16125, 0x0564F0BD,\n\t 0xC3EB9E15, 0x3C9057A2, 0x97271AEC, 0xA93A072A,\n\t 0x1B3F6D9B, 0x1E6321F5, 0xF59C66FB, 0x26DCF319,\n\t 0x7533D928, 0xB155FDF5, 0x03563482, 0x8ABA3CBB,\n\t 0x28517711, 0xC20AD9F8, 0xABCC5167, 0xCCAD925F,\n\t 0x4DE81751, 0x3830DC8E, 0x379D5862, 0x9320F991,\n\t 0xEA7A90C2, 0xFB3E7BCE, 0x5121CE64, 0x774FBE32,\n\t 0xA8B6E37E, 0xC3293D46, 0x48DE5369, 0x6413E680,\n\t 0xA2AE0810, 0xDD6DB224, 0x69852DFD, 0x09072166,\n\t 0xB39A460A, 0x6445C0DD, 0x586CDECF, 0x1C20C8AE,\n\t 0x5BBEF7DD, 0x1B588D40, 0xCCD2017F, 0x6BB4E3BB,\n\t 0xDDA26A7E, 0x3A59FF45, 0x3E350A44, 0xBCB4CDD5,\n\t 0x72EACEA8, 0xFA6484BB, 0x8D6612AE, 0xBF3C6F47,\n\t 0xD29BE463, 0x542F5D9E, 0xAEC2771B, 0xF64E6370,\n\t 0x740E0D8D, 0xE75B1357, 0xF8721671, 0xAF537D5D,\n\t 0x4040CB08, 0x4EB4E2CC, 0x34D2466A, 0x0115AF84,\n\t 0xE1B00428, 0x95983A1D, 0x06B89FB4, 0xCE6EA048,\n\t 0x6F3F3B82, 0x3520AB82, 0x011A1D4B, 0x277227F8,\n\t 0x611560B1, 0xE7933FDC, 0xBB3A792B, 0x344525BD,\n\t 0xA08839E1, 0x51CE794B, 0x2F32C9B7, 0xA01FBAC9,\n\t 0xE01CC87E, 0xBCC7D1F6, 0xCF0111C3, 0xA1E8AAC7,\n\t 0x1A908749, 0xD44FBD9A, 0xD0DADECB, 0xD50ADA38,\n\t 0x0339C32A, 0xC6913667, 0x8DF9317C, 0xE0B12B4F,\n\t 0xF79E59B7, 0x43F5BB3A, 0xF2D519FF, 0x27D9459C,\n\t 0xBF97222C, 0x15E6FC2A, 0x0F91FC71, 0x9B941525,\n\t 0xFAE59361, 0xCEB69CEB, 0xC2A86459, 0x12BAA8D1,\n\t 0xB6C1075E, 0xE3056A0C, 0x10D25065, 0xCB03A442,\n\t 0xE0EC6E0E, 0x1698DB3B, 0x4C98A0BE, 0x3278E964,\n\t 0x9F1F9532, 0xE0D392DF, 0xD3A0342B, 0x8971F21E,\n\t 0x1B0A7441, 0x4BA3348C, 0xC5BE7120, 0xC37632D8,\n\t 0xDF359F8D, 0x9B992F2E, 0xE60B6F47, 0x0FE3F11D,\n\t 0xE54CDA54, 0x1EDAD891, 0xCE6279CF, 0xCD3E7E6F,\n\t 0x1618B166, 0xFD2C1D05, 0x848FD2C5, 0xF6FB2299,\n\t 0xF523F357, 0xA6327623, 0x93A83531, 0x56CCCD02,\n\t 0xACF08162, 0x5A75EBB5, 0x6E163697, 0x88D273CC,\n\t 0xDE966292, 0x81B949D0, 0x4C50901B, 0x71C65614,\n\t 0xE6C6C7BD, 0x327A140A, 0x45E1D006, 0xC3F27B9A,\n\t 0xC9AA53FD, 0x62A80F00, 0xBB25BFE2, 0x35BDD2F6,\n\t 0x71126905, 0xB2040222, 0xB6CBCF7C, 0xCD769C2B,\n\t 0x53113EC0, 0x1640E3D3, 0x38ABBD60, 0x2547ADF0,\n\t 0xBA38209C, 0xF746CE76, 0x77AFA1C5, 0x20756060,\n\t 0x85CBFE4E, 0x8AE88DD8, 0x7AAAF9B0, 0x4CF9AA7E,\n\t 0x1948C25C, 0x02FB8A8C, 0x01C36AE4, 0xD6EBE1F9,\n\t 0x90D4F869, 0xA65CDEA0, 0x3F09252D, 0xC208E69F,\n\t 0xB74E6132, 0xCE77E25B, 0x578FDFE3, 0x3AC372E6 ]\n\t ];\n\n\t var BLOWFISH_CTX = {\n\t pbox: [],\n\t sbox: []\n\t }\n\n\t function F(ctx, x){\n\t let a = (x >> 24) & 0xFF;\n\t let b = (x >> 16) & 0xFF;\n\t let c = (x >> 8) & 0xFF;\n\t let d = x & 0xFF;\n\n\t let y = ctx.sbox[0][a] + ctx.sbox[1][b];\n\t y = y ^ ctx.sbox[2][c];\n\t y = y + ctx.sbox[3][d];\n\n\t return y;\n\t }\n\n\t function BlowFish_Encrypt(ctx, left, right){\n\t let Xl = left;\n\t let Xr = right;\n\t let temp;\n\n\t for(let i = 0; i < N; ++i){\n\t Xl = Xl ^ ctx.pbox[i];\n\t Xr = F(ctx, Xl) ^ Xr;\n\n\t temp = Xl;\n\t Xl = Xr;\n\t Xr = temp;\n\t }\n\n\t temp = Xl;\n\t Xl = Xr;\n\t Xr = temp;\n\n\t Xr = Xr ^ ctx.pbox[N];\n\t Xl = Xl ^ ctx.pbox[N + 1];\n\n\t return {left: Xl, right: Xr};\n\t }\n\n\t function BlowFish_Decrypt(ctx, left, right){\n\t let Xl = left;\n\t let Xr = right;\n\t let temp;\n\n\t for(let i = N + 1; i > 1; --i){\n\t Xl = Xl ^ ctx.pbox[i];\n\t Xr = F(ctx, Xl) ^ Xr;\n\n\t temp = Xl;\n\t Xl = Xr;\n\t Xr = temp;\n\t }\n\n\t temp = Xl;\n\t Xl = Xr;\n\t Xr = temp;\n\n\t Xr = Xr ^ ctx.pbox[1];\n\t Xl = Xl ^ ctx.pbox[0];\n\n\t return {left: Xl, right: Xr};\n\t }\n\n\t /**\n\t * Initialization ctx's pbox and sbox.\n\t *\n\t * @param {Object} ctx The object has pbox and sbox.\n\t * @param {Array} key An array of 32-bit words.\n\t * @param {int} keysize The length of the key.\n\t *\n\t * @example\n\t *\n\t * BlowFishInit(BLOWFISH_CTX, key, 128/32);\n\t */\n\t function BlowFishInit(ctx, key, keysize)\n\t {\n\t for(let Row = 0; Row < 4; Row++)\n\t {\n\t ctx.sbox[Row] = [];\n\t for(let Col = 0; Col < 256; Col++)\n\t {\n\t ctx.sbox[Row][Col] = ORIG_S[Row][Col];\n\t }\n\t }\n\n\t let keyIndex = 0;\n\t for(let index = 0; index < N + 2; index++)\n\t {\n\t ctx.pbox[index] = ORIG_P[index] ^ key[keyIndex];\n\t keyIndex++;\n\t if(keyIndex >= keysize)\n\t {\n\t keyIndex = 0;\n\t }\n\t }\n\n\t let Data1 = 0;\n\t let Data2 = 0;\n\t let res = 0;\n\t for(let i = 0; i < N + 2; i += 2)\n\t {\n\t res = BlowFish_Encrypt(ctx, Data1, Data2);\n\t Data1 = res.left;\n\t Data2 = res.right;\n\t ctx.pbox[i] = Data1;\n\t ctx.pbox[i + 1] = Data2;\n\t }\n\n\t for(let i = 0; i < 4; i++)\n\t {\n\t for(let j = 0; j < 256; j += 2)\n\t {\n\t res = BlowFish_Encrypt(ctx, Data1, Data2);\n\t Data1 = res.left;\n\t Data2 = res.right;\n\t ctx.sbox[i][j] = Data1;\n\t ctx.sbox[i][j + 1] = Data2;\n\t }\n\t }\n\n\t return true;\n\t }\n\n\t /**\n\t * Blowfish block cipher algorithm.\n\t */\n\t var Blowfish = C_algo.Blowfish = BlockCipher.extend({\n\t _doReset: function () {\n\t // Skip reset of nRounds has been set before and key did not change\n\t if (this._keyPriorReset === this._key) {\n\t return;\n\t }\n\n\t // Shortcuts\n\t var key = this._keyPriorReset = this._key;\n\t var keyWords = key.words;\n\t var keySize = key.sigBytes / 4;\n\n\t //Initialization pbox and sbox\n\t BlowFishInit(BLOWFISH_CTX, keyWords, keySize);\n\t },\n\n\t encryptBlock: function (M, offset) {\n\t var res = BlowFish_Encrypt(BLOWFISH_CTX, M[offset], M[offset + 1]);\n\t M[offset] = res.left;\n\t M[offset + 1] = res.right;\n\t },\n\n\t decryptBlock: function (M, offset) {\n\t var res = BlowFish_Decrypt(BLOWFISH_CTX, M[offset], M[offset + 1]);\n\t M[offset] = res.left;\n\t M[offset + 1] = res.right;\n\t },\n\n\t blockSize: 64/32,\n\n\t keySize: 128/32,\n\n\t ivSize: 64/32\n\t });\n\n\t /**\n\t * Shortcut functions to the cipher's object interface.\n\t *\n\t * @example\n\t *\n\t * var ciphertext = CryptoJS.Blowfish.encrypt(message, key, cfg);\n\t * var plaintext = CryptoJS.Blowfish.decrypt(ciphertext, key, cfg);\n\t */\n\t C.Blowfish = BlockCipher._createHelper(Blowfish);\n\t}());\n\n\n\treturn CryptoJS.Blowfish;\n\n}));//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNDMxMjguanMiLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBUUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL2l0Zy1uZXh0Z2VuLWZyb250ZW5kLy4vbm9kZV9tb2R1bGVzL2NyeXB0by1qcy9ibG93ZmlzaC5qcz9hZjViIl0sInNvdXJjZXNDb250ZW50IjpbIjsoZnVuY3Rpb24gKHJvb3QsIGZhY3RvcnksIHVuZGVmKSB7XG5cdGlmICh0eXBlb2YgZXhwb3J0cyA9PT0gXCJvYmplY3RcIikge1xuXHRcdC8vIENvbW1vbkpTXG5cdFx0bW9kdWxlLmV4cG9ydHMgPSBleHBvcnRzID0gZmFjdG9yeShyZXF1aXJlKFwiLi9jb3JlXCIpLCByZXF1aXJlKFwiLi9lbmMtYmFzZTY0XCIpLCByZXF1aXJlKFwiLi9tZDVcIiksIHJlcXVpcmUoXCIuL2V2cGtkZlwiKSwgcmVxdWlyZShcIi4vY2lwaGVyLWNvcmVcIikpO1xuXHR9XG5cdGVsc2UgaWYgKHR5cGVvZiBkZWZpbmUgPT09IFwiZnVuY3Rpb25cIiAmJiBkZWZpbmUuYW1kKSB7XG5cdFx0Ly8gQU1EXG5cdFx0ZGVmaW5lKFtcIi4vY29yZVwiLCBcIi4vZW5jLWJhc2U2NFwiLCBcIi4vbWQ1XCIsIFwiLi9ldnBrZGZcIiwgXCIuL2NpcGhlci1jb3JlXCJdLCBmYWN0b3J5KTtcblx0fVxuXHRlbHNlIHtcblx0XHQvLyBHbG9iYWwgKGJyb3dzZXIpXG5cdFx0ZmFjdG9yeShyb290LkNyeXB0b0pTKTtcblx0fVxufSh0aGlzLCBmdW5jdGlvbiAoQ3J5cHRvSlMpIHtcblxuXHQoZnVuY3Rpb24gKCkge1xuXHQgICAgLy8gU2hvcnRjdXRzXG5cdCAgICB2YXIgQyA9IENyeXB0b0pTO1xuXHQgICAgdmFyIENfbGliID0gQy5saWI7XG5cdCAgICB2YXIgQmxvY2tDaXBoZXIgPSBDX2xpYi5CbG9ja0NpcGhlcjtcblx0ICAgIHZhciBDX2FsZ28gPSBDLmFsZ287XG5cblx0ICAgIGNvbnN0IE4gPSAxNjtcblxuXHQgICAgLy9PcmlnaW4gcGJveCBhbmQgc2JveCwgZGVyaXZlZCBmcm9tIFBJXG5cdCAgICBjb25zdCBPUklHX1AgPSBbXG5cdCAgICAgICAgMHgyNDNGNkE4OCwgMHg4NUEzMDhEMywgMHgxMzE5OEEyRSwgMHgwMzcwNzM0NCxcblx0ICAgICAgICAweEE0MDkzODIyLCAweDI5OUYzMUQwLCAweDA4MkVGQTk4LCAweEVDNEU2Qzg5LFxuXHQgICAgICAgIDB4NDUyODIxRTYsIDB4MzhEMDEzNzcsIDB4QkU1NDY2Q0YsIDB4MzRFOTBDNkMsXG5cdCAgICAgICAgMHhDMEFDMjlCNywgMHhDOTdDNTBERCwgMHgzRjg0RDVCNSwgMHhCNTQ3MDkxNyxcblx0ICAgICAgICAweDkyMTZENUQ5LCAweDg5NzlGQjFCXG5cdCAgICBdO1xuXG5cdCAgICBjb25zdCBPUklHX1MgPSBbXG5cdCAgICAgICAgWyAgIDB4RDEzMTBCQTYsIDB4OThERkI1QUMsIDB4MkZGRDcyREIsIDB4RDAxQURGQjcsXG5cdCAgICAgICAgICAgIDB4QjhFMUFGRUQsIDB4NkEyNjdFOTYsIDB4QkE3QzkwNDUsIDB4RjEyQzdGOTksXG5cdCAgICAgICAgICAgIDB4MjRBMTk5NDcsIDB4QjM5MTZDRjcsIDB4MDgwMUYyRTIsIDB4ODU4RUZDMTYsXG5cdCAgICAgICAgICAgIDB4NjM2OTIwRDgsIDB4NzE1NzRFNjksIDB4QTQ1OEZFQTMsIDB4RjQ5MzNEN0UsXG5cdCAgICAgICAgICAgIDB4MEQ5NTc0OEYsIDB4NzI4RUI2NTgsIDB4NzE4QkNENTgsIDB4ODIxNTRBRUUsXG5cdCAgICAgICAgICAgIDB4N0I1NEE0MUQsIDB4QzI1QTU5QjUsIDB4OUMzMEQ1MzksIDB4MkFGMjYwMTMsXG5cdCAgICAgICAgICAgIDB4QzVEMUIwMjMsIDB4Mjg2MDg1RjAsIDB4Q0E0MTc5MTgsIDB4QjhEQjM4RUYsXG5cdCAgICAgICAgICAgIDB4OEU3OURDQjAsIDB4NjAzQTE4MEUsIDB4NkM5RTBFOEIsIDB4QjAxRThBM0UsXG5cdCAgICAgICAgICAgIDB4RDcxNTc3QzEsIDB4QkQzMTRCMjcsIDB4NzhBRjJGREEsIDB4NTU2MDVDNjAsXG5cdCAgICAgICAgICAgIDB4RTY1NTI1RjMsIDB4QUE1NUFCOTQsIDB4NTc0ODk4NjIsIDB4NjNFODE0NDAsXG5cdCAgICAgICAgICAgIDB4NTVDQTM5NkEsIDB4MkFBQjEwQjYsIDB4QjRDQzVDMzQsIDB4MTE0MUU4Q0UsXG5cdCAgICAgICAgICAgIDB4QTE1NDg2QUYsIDB4N0M3MkU5OTMsIDB4QjNFRTE0MTEsIDB4NjM2RkJDMkEsXG5cdCAgICAgICAgICAgIDB4MkJBOUM1NUQsIDB4NzQxODMxRjYsIDB4Q0U1QzNFMTYsIDB4OUI4NzkzMUUsXG5cdCAgICAgICAgICAgIDB4QUZENkJBMzMsIDB4NkMyNENGNUMsIDB4N0EzMjUzODEsIDB4Mjg5NTg2NzcsXG5cdCAgICAgICAgICAgIDB4M0I4RjQ4OTgsIDB4NkI0QkI5QUYsIDB4QzRCRkU4MUIsIDB4NjYyODIxOTMsXG5cdCAgICAgICAgICAgIDB4NjFEODA5Q0MsIDB4RkIyMUE5OTEsIDB4NDg3Q0FDNjAsIDB4NURFQzgwMzIsXG5cdCAgICAgICAgICAgIDB4RUY4NDVENUQsIDB4RTk4NTc1QjEsIDB4REMyNjIzMDIsIDB4RUI2NTFCODgsXG5cdCAgICAgICAgICAgIDB4MjM4OTNFODEsIDB4RDM5NkFDQzUsIDB4MEY2RDZGRjMsIDB4ODNGNDQyMzksXG5cdCAgICAgICAgICAgIDB4MkUwQjQ0ODIsIDB4QTQ4NDIwMDQsIDB4NjlDOEYwNEEsIDB4OUUxRjlCNUUsXG5cdCAgICAgICAgICAgIDB4MjFDNjY4NDIsIDB4RjZFOTZDOUEsIDB4NjcwQzlDNjEsIDB4QUJEMzg4RjAsXG5cdCAgICAgICAgICAgIDB4NkE1MUEwRDIsIDB4RDg1NDJGNjgsIDB4OTYwRkE3MjgsIDB4QUI1MTMzQTMsXG5cdCAgICAgICAgICAgIDB4NkVFRjBCNkMsIDB4MTM3QTNCRTQsIDB4QkEzQkYwNTAsIDB4N0VGQjJBOTgsXG5cdCAgICAgICAgICAgIDB4QTFGMTY1MUQsIDB4MzlBRjAxNzYsIDB4NjZDQTU5M0UsIDB4ODI0MzBFODgsXG5cdCAgICAgICAgICAgIDB4OENFRTg2MTksIDB4NDU2RjlGQjQsIDB4N0Q4NEE1QzMsIDB4M0I4QjVFQkUsXG5cdCAgICAgICAgICAgIDB4RTA2Rjc1RDgsIDB4ODVDMTIwNzMsIDB4NDAxQTQ0OUYsIDB4NTZDMTZBQTYsXG5cdCAgICAgICAgICAgIDB4NEVEM0FBNjIsIDB4MzYzRjc3MDYsIDB4MUJGRURGNzIsIDB4NDI5QjAyM0QsXG5cdCAgICAgICAgICAgIDB4MzdEMEQ3MjQsIDB4RDAwQTEyNDgsIDB4REIwRkVBRDMsIDB4NDlGMUMwOUIsXG5cdCAgICAgICAgICAgIDB4MDc1MzcyQzksIDB4ODA5OTFCN0IsIDB4MjVENDc5RDgsIDB4RjZFOERFRjcsXG5cdCAgICAgICAgICAgIDB4RTNGRTUwMUEsIDB4QjY3OTRDM0IsIDB4OTc2Q0UwQkQsIDB4MDRDMDA2QkEsXG5cdCAgICAgICAgICAgIDB4QzFBOTRGQjYsIDB4NDA5RjYwQzQsIDB4NUU1QzlFQzIsIDB4MTk2QTI0NjMsXG5cdCAgICAgICAgICAgIDB4NjhGQjZGQUYsIDB4M0U2QzUzQjUsIDB4MTMzOUIyRUIsIDB4M0I1MkVDNkYsXG5cdCAgICAgICAgICAgIDB4NkRGQzUxMUYsIDB4OUIzMDk1MkMsIDB4Q0M4MTQ1NDQsIDB4QUY1RUJEMDksXG5cdCAgICAgICAgICAgIDB4QkVFM0QwMDQsIDB4REUzMzRBRkQsIDB4NjYwRjI4MDcsIDB4MTkyRTRCQjMsXG5cdCAgICAgICAgICAgIDB4QzBDQkE4NTcsIDB4NDVDODc0MEYsIDB4RDIwQjVGMzksIDB4QjlEM0ZCREIsXG5cdCAgICAgICAgICAgIDB4NTU3OUMwQkQsIDB4MUE2MDMyMEEsIDB4RDZBMTAwQzYsIDB4NDAyQzcyNzksXG5cdCAgICAgICAgICAgIDB4Njc5RjI1RkUsIDB4RkIxRkEzQ0MsIDB4OEVBNUU5RjgsIDB4REIzMjIyRjgsXG5cdCAgICAgICAgICAgIDB4M0M3NTE2REYsIDB4RkQ2MTZCMTUsIDB4MkY1MDFFQzgsIDB4QUQwNTUyQUIsXG5cdCAgICAgICAgICAgIDB4MzIzREI1RkEsIDB4RkQyMzg3NjAsIDB4NTMzMTdCNDgsIDB4M0UwMERGODIsXG5cdCAgICAgICAgICAgIDB4OUU1QzU3QkIsIDB4Q0E2RjhDQTAsIDB4MUE4NzU2MkUsIDB4REYxNzY5REIsXG5cdCAgICAgICAgICAgIDB4RDU0MkE4RjYsIDB4Mjg3RUZGQzMsIDB4QUM2NzMyQzYsIDB4OEM0RjU1NzMsXG5cdCAgICAgICAgICAgIDB4Njk1QjI3QjAsIDB4QkJDQTU4QzgsIDB4RTFGRkEzNUQsIDB4QjhGMDExQTAsXG5cdCAgICAgICAgICAgIDB4MTBGQTNEOTgsIDB4RkQyMTgzQjgsIDB4NEFGQ0I1NkMsIDB4MkREMUQzNUIsXG5cdCAgICAgICAgICAgIDB4OUE1M0U0NzksIDB4QjZGODQ1NjUsIDB4RDI4RTQ5QkMsIDB4NEJGQjk3OTAsXG5cdCAgICAgICAgICAgIDB4RTFEREYyREEsIDB4QTRDQjdFMzMsIDB4NjJGQjEzNDEsIDB4Q0VFNEM2RTgsXG5cdCAgICAgICAgICAgIDB4RUYyMENBREEsIDB4MzY3NzRDMDEsIDB4RDA3RTlFRkUsIDB4MkJGMTFGQjQsXG5cdCAgICAgICAgICAgIDB4OTVEQkRBNEQsIDB4QUU5MDkxOTgsIDB4RUFBRDhFNzEsIDB4NkI5M0Q1QTAsXG5cdCAgICAgICAgICAgIDB4RDA4RUQxRDAsIDB4QUZDNzI1RTAsIDB4OEUzQzVCMkYsIDB4OEU3NTk0QjcsXG5cdCAgICAgICAgICAgIDB4OEZGNkUyRkIsIDB4RjIxMjJCNjQsIDB4ODg4OEI4MTIsIDB4OTAwREYwMUMsXG5cdCAgICAgICAgICAgIDB4NEZBRDVFQTAsIDB4Njg4RkMzMUMsIDB4RDFDRkYxOTEsIDB4QjNBOEMxQUQsXG5cdCAgICAgICAgICAgIDB4MkYyRjIyMTgsIDB4QkUwRTE3NzcsIDB4RUE3NTJERkUsIDB4OEIwMjFGQTEsXG5cdCAgICAgICAgICAgIDB4RTVBMENDMEYsIDB4QjU2Rjc0RTgsIDB4MThBQ0YzRDYsIDB4Q0U4OUUyOTksXG5cdCAgICAgICAgICAgIDB4QjRBODRGRTAsIDB4RkQxM0UwQjcsIDB4N0NDNDNCODEsIDB4RDJBREE4RDksXG5cdCAgICAgICAgICAgIDB4MTY1RkEyNjYsIDB4ODA5NTc3MDUsIDB4OTNDQzczMTQsIDB4MjExQTE0NzcsXG5cdCAgICAgICAgICAgIDB4RTZBRDIwNjUsIDB4NzdCNUZBODYsIDB4Qzc1NDQyRjUsIDB4RkI5RDM1Q0YsXG5cdCAgICAgICAgICAgIDB4RUJDREFGMEMsIDB4N0IzRTg5QTAsIDB4RDY0MTFCRDMsIDB4QUUxRTdFNDksXG5cdCAgICAgICAgICAgIDB4MDAyNTBFMkQsIDB4MjA3MUIzNUUsIDB4MjI2ODAwQkIsIDB4NTdCOEUwQUYsXG5cdCAgICAgICAgICAgIDB4MjQ2NDM2OUIsIDB4RjAwOUI5MUUsIDB4NTU2MzkxMUQsIDB4NTlERkE2QUEsXG5cdCAgICAgICAgICAgIDB4NzhDMTQzODksIDB4RDk1QTUzN0YsIDB4MjA3RDVCQTIsIDB4MDJFNUI5QzUsXG5cdCAgICAgICAgICAgIDB4ODMyNjAzNzYsIDB4NjI5NUNGQTksIDB4MTFDODE5NjgsIDB4NEU3MzRBNDEsXG5cdCAgICAgICAgICAgIDB4QjM0NzJEQ0EsIDB4N0IxNEE5NEEsIDB4MUI1MTAwNTIsIDB4OUE1MzI5MTUsXG5cdCAgICAgICAgICAgIDB4RDYwRjU3M0YsIDB4QkM5QkM2RTQsIDB4MkI2MEE0NzYsIDB4ODFFNjc0MDAsXG5cdCAgICAgICAgICAgIDB4MDhCQTZGQjUsIDB4NTcxQkU5MUYsIDB4RjI5NkVDNkIsIDB4MkEwREQ5MTUsXG5cdCAgICAgICAgICAgIDB4QjY2MzY1MjEsIDB4RTdCOUY5QjYsIDB4RkYzNDA1MkUsIDB4QzU4NTU2NjQsXG5cdCAgICAgICAgICAgIDB4NTNCMDJENUQsIDB4QTk5RjhGQTEsIDB4MDhCQTQ3OTksIDB4NkU4NTA3NkEgICBdLFxuXHQgICAgICAgIFsgICAweDRCN0E3MEU5LCAweEI1QjMyOTQ0LCAweERCNzUwOTJFLCAweEM0MTkyNjIzLFxuXHQgICAgICAgICAgICAweEFENkVBNkIwLCAweDQ5QTdERjdELCAweDlDRUU2MEI4LCAweDhGRURCMjY2LFxuXHQgICAgICAgICAgICAweEVDQUE4QzcxLCAweDY5OUExN0ZGLCAweDU2NjQ1MjZDLCAweEMyQjE5RUUxLFxuXHQgICAgICAgICAgICAweDE5MzYwMkE1LCAweDc1MDk0QzI5LCAweEEwNTkxMzQwLCAweEU0MTgzQTNFLFxuXHQgICAgICAgICAgICAweDNGNTQ5ODlBLCAweDVCNDI5RDY1LCAweDZCOEZFNEQ2LCAweDk5RjczRkQ2LFxuXHQgICAgICAgICAgICAweEExRDI5QzA3LCAweEVGRTgzMEY1LCAweDREMkQzOEU2LCAweEYwMjU1REMxLFxuXHQgICAgICAgICAgICAweDRDREQyMDg2LCAweDg0NzBFQjI2LCAweDYzODJFOUM2LCAweDAyMUVDQzVFLFxuXHQgICAgICAgICAgICAweDA5Njg2QjNGLCAweDNFQkFFRkM5LCAweDNDOTcxODE0LCAweDZCNkE3MEExLFxuXHQgICAgICAgICAgICAweDY4N0YzNTg0LCAweDUyQTBFMjg2LCAweEI3OUM1MzA1LCAweEFBNTAwNzM3LFxuXHQgICAgICAgICAgICAweDNFMDc4NDFDLCAweDdGREVBRTVDLCAweDhFN0Q0NEVDLCAweDU3MTZGMkI4LFxuXHQgICAgICAgICAgICAweEIwM0FEQTM3LCAweEYwNTAwQzBELCAweEYwMUMxRjA0LCAweDAyMDBCM0ZGLFxuXHQgICAgICAgICAgICAweEFFMENGNTFBLCAweDNDQjU3NEIyLCAweDI1ODM3QTU4LCAweERDMDkyMUJELFxuXHQgICAgICAgICAgICAweEQxOTExM0Y5LCAweDdDQTkyRkY2LCAweDk0MzI0NzczLCAweDIyRjU0NzAxLFxuXHQgICAgICAgICAgICAweDNBRTVFNTgxLCAweDM3QzJEQURDLCAweEM4QjU3NjM0LCAweDlBRjNEREE3LFxuXHQgICAgICAgICAgICAweEE5NDQ2MTQ2LCAweDBGRDAwMzBFLCAweEVDQzhDNzNFLCAweEE0NzUxRTQxLFxuXHQgICAgICAgICAgICAweEUyMzhDRDk5LCAweDNCRUEwRTJGLCAweDMyODBCQkExLCAweDE4M0VCMzMxLFxuXHQgICAgICAgICAgICAweDRFNTQ4QjM4LCAweDRGNkRCOTA4LCAweDZGNDIwRDAzLCAweEY2MEEwNEJGLFxuXHQgICAgICAgICAgICAweDJDQjgxMjkwLCAweDI0OTc3Qzc5LCAweDU2NzlCMDcyLCAweEJDQUY4OUFGLFxuXHQgICAgICAgICAgICAweERFOUE3NzFGLCAweEQ5OTMwODEwLCAweEIzOEJBRTEyLCAweERDQ0YzRjJFLFxuXHQgICAgICAgICAgICAweDU1MTI3MjFGLCAweDJFNkI3MTI0LCAweDUwMUFEREU2LCAweDlGODRDRDg3LFxuXHQgICAgICAgICAgICAweDdBNTg0NzE4LCAweDc0MDhEQTE3LCAweEJDOUY5QUJDLCAweEU5NEI3RDhDLFxuXHQgICAgICAgICAgICAweEVDN0FFQzNBLCAweERCODUxREZBLCAweDYzMDk0MzY2LCAweEM0NjRDM0QyLFxuXHQgICAgICAgICAgICAweEVGMUMxODQ3LCAweDMyMTVEOTA4LCAweERENDMzQjM3LCAweDI0QzJCQTE2LFxuXHQgICAgICAgICAgICAweDEyQTE0RDQzLCAweDJBNjVDNDUxLCAweDUwOTQwMDAyLCAweDEzM0FFNERELFxuXHQgICAgICAgICAgICAweDcxREZGODlFLCAweDEwMzE0RTU1LCAweDgxQUM3N0Q2LCAweDVGMTExOTlCLFxuXHQgICAgICAgICAgICAweDA0MzU1NkYxLCAweEQ3QTNDNzZCLCAweDNDMTExODNCLCAweDU5MjRBNTA5LFxuXHQgICAgICAgICAgICAweEYyOEZFNkVELCAweDk3RjFGQkZBLCAweDlFQkFCRjJDLCAweDFFMTUzQzZFLFxuXHQgICAgICAgICAgICAweDg2RTM0NTcwLCAweEVBRTk2RkIxLCAweDg2MEU1RTBBLCAweDVBM0UyQUIzLFxuXHQgICAgICAgICAgICAweDc3MUZFNzFDLCAweDRFM0QwNkZBLCAweDI5NjVEQ0I5LCAweDk5RTcxRDBGLFxuXHQgICAgICAgICAgICAweDgwM0U4OUQ2LCAweDUyNjZDODI1LCAweDJFNENDOTc4LCAweDlDMTBCMzZBLFxuXHQgICAgICAgICAgICAweEM2MTUwRUJBLCAweDk0RTJFQTc4LCAweEE1RkMzQzUzLCAweDFFMEEyREY0LFxuXHQgICAgICAgICAgICAweEYyRjc0RUE3LCAweDM2MUQyQjNELCAweDE5MzkyNjBGLCAweDE5QzI3OTYwLFxuXHQgICAgICAgICAgICAweDUyMjNBNzA4LCAweEY3MTMxMkI2LCAweEVCQURGRTZFLCAweEVBQzMxRjY2LFxuXHQgICAgICAgICAgICAweEUzQkM0NTk1LCAweEE2N0JDODgzLCAweEIxN0YzN0QxLCAweDAxOENGRjI4LFxuXHQgICAgICAgICAgICAweEMzMzJEREVGLCAweEJFNkM1QUE1LCAweDY1NTgyMTg1LCAweDY4QUI5ODAyLFxuXHQgICAgICAgICAgICAweEVFQ0VBNTBGLCAweERCMkY5NTNCLCAweDJBRUY3REFELCAweDVCNkUyRjg0LFxuXHQgICAgICAgICAgICAweDE1MjFCNjI4LCAweDI5MDc2MTcwLCAweEVDREQ0Nzc1LCAweDYxOUYxNTEwLFxuXHQgICAgICAgICAgICAweDEzQ0NBODMwLCAweEVCNjFCRDk2LCAweDAzMzRGRTFFLCAweEFBMDM2M0NGLFxuXHQgICAgICAgICAgICAweEI1NzM1QzkwLCAweDRDNzBBMjM5LCAweEQ1OUU5RTBCLCAweENCQUFERTE0LFxuXHQgICAgICAgICAgICAweEVFQ0M4NkJDLCAweDYwNjIyQ0E3LCAweDlDQUI1Q0FCLCAweEIyRjM4NDZFLFxuXHQgICAgICAgICAgICAweDY0OEIxRUFGLCAweDE5QkRGMENBLCAweEEwMjM2OUI5LCAweDY1NUFCQjUwLFxuXHQgICAgICAgICAgICAweDQwNjg1QTMyLCAweDNDMkFCNEIzLCAweDMxOUVFOUQ1LCAweEMwMjFCOEY3LFxuXHQgICAgICAgICAgICAweDlCNTQwQjE5LCAweDg3NUZBMDk5LCAweDk1Rjc5OTdFLCAweDYyM0Q3REE4LFxuXHQgICAgICAgICAgICAweEY4Mzc4ODlBLCAweDk3RTMyRDc3LCAweDExRUQ5MzVGLCAweDE2NjgxMjgxLFxuXHQgICAgICAgICAgICAweDBFMzU4ODI5LCAweEM3RTYxRkQ2LCAweDk2REVERkExLCAweDc4NThCQTk5LFxuXHQgICAgICAgICAgICAweDU3RjU4NEE1LCAweDFCMjI3MjYzLCAweDlCODNDM0ZGLCAweDFBQzI0Njk2LFxuXHQgICAgICAgICAgICAweENEQjMwQUVCLCAweDUzMkUzMDU0LCAweDhGRDk0OEU0LCAweDZEQkMzMTI4LFxuXHQgICAgICAgICAgICAweDU4RUJGMkVGLCAweDM0QzZGRkVBLCAweEZFMjhFRDYxLCAweEVFN0MzQzczLFxuXHQgICAgICAgICAgICAweDVENEExNEQ5LCAweEU4NjRCN0UzLCAweDQyMTA1RDE0LCAweDIwM0UxM0UwLFxuXHQgICAgICAgICAgICAweDQ1RUVFMkI2LCAweEEzQUFBQkVBLCAweERCNkM0RjE1LCAweEZBQ0I0RkQwLFxuXHQgICAgICAgICAgICAweEM3NDJGNDQyLCAweEVGNkFCQkI1LCAweDY1NEYzQjFELCAweDQxQ0QyMTA1LFxuXHQgICAgICAgICAgICAweEQ4MUU3OTlFLCAweDg2ODU0REM3LCAweEU0NEI0NzZBLCAweDNEODE2MjUwLFxuXHQgICAgICAgICAgICAweENGNjJBMUYyLCAweDVCOEQyNjQ2LCAweEZDODg4M0EwLCAweEMxQzdCNkEzLFxuXHQgICAgICAgICAgICAweDdGMTUyNEMzLCAweDY5Q0I3NDkyLCAweDQ3ODQ4QTBCLCAweDU2OTJCMjg1LFxuXHQgICAgICAgICAgICAweDA5NUJCRjAwLCAweEFEMTk0ODlELCAweDE0NjJCMTc0LCAweDIzODIwRTAwLFxuXHQgICAgICAgICAgICAweDU4NDI4RDJBLCAweDBDNTVGNUVBLCAweDFEQURGNDNFLCAweDIzM0Y3MDYxLFxuXHQgICAgICAgICAgICAweDMzNzJGMDkyLCAweDhEOTM3RTQxLCAweEQ2NUZFQ0YxLCAweDZDMjIzQkRCLFxuXHQgICAgICAgICAgICAweDdDREUzNzU5LCAweENCRUU3NDYwLCAweDQwODVGMkE3LCAweENFNzczMjZFLFxuXHQgICAgICAgICAgICAweEE2MDc4MDg0LCAweDE5Rjg1MDlFLCAweEU4RUZEODU1LCAweDYxRDk5NzM1LFxuXHQgICAgICAgICAgICAweEE5NjlBN0FBLCAweEM1MEMwNkMyLCAweDVBMDRBQkZDLCAweDgwMEJDQURDLFxuXHQgICAgICAgICAgICAweDlFNDQ3QTJFLCAweEMzNDUzNDg0LCAweEZERDU2NzA1LCAweDBFMUU5RUM5LFxuXHQgICAgICAgICAgICAweERCNzNEQkQzLCAweDEwNTU4OENELCAweDY3NUZEQTc5LCAweEUzNjc0MzQwLFxuXHQgICAgICAgICAgICAweEM1QzQzNDY1LCAweDcxM0UzOEQ4LCAweDNEMjhGODlFLCAweEYxNkRGRjIwLFxuXHQgICAgICAgICAgICAweDE1M0UyMUU3LCAweDhGQjAzRDRBLCAweEU2RTM5RjJCLCAweERCODNBREY3ICAgXSxcblx0ICAgICAgICBbICAgMHhFOTNENUE2OCwgMHg5NDgxNDBGNywgMHhGNjRDMjYxQywgMHg5NDY5MjkzNCxcblx0ICAgICAgICAgICAgMHg0MTE1MjBGNywgMHg3NjAyRDRGNywgMHhCQ0Y0NkIyRSwgMHhENEEyMDA2OCxcblx0ICAgICAgICAgICAgMHhENDA4MjQ3MSwgMHgzMzIwRjQ2QSwgMHg0M0I3RDRCNywgMHg1MDAwNjFBRixcblx0ICAgICAgICAgICAgMHgxRTM5RjYyRSwgMHg5NzI0NDU0NiwgMHgxNDIxNEY3NCwgMHhCRjhCODg0MCxcblx0ICAgICAgICAgICAgMHg0RDk1RkMxRCwgMHg5NkI1OTFBRiwgMHg3MEY0REREMywgMHg2NkEwMkY0NSxcblx0ICAgICAgICAgICAgMHhCRkJDMDlFQywgMHgwM0JEOTc4NSwgMHg3RkFDNkREMCwgMHgzMUNCODUwNCxcblx0ICAgICAgICAgICAgMHg5NkVCMjdCMywgMHg1NUZEMzk0MSwgMHhEQTI1NDdFNiwgMHhBQkNBMEE5QSxcblx0ICAgICAgICAgICAgMHgyODUwNzgyNSwgMHg1MzA0MjlGNCwgMHgwQTJDODZEQSwgMHhFOUI2NkRGQixcblx0ICAgICAgICAgICAgMHg2OERDMTQ2MiwgMHhENzQ4NjkwMCwgMHg2ODBFQzBBNCwgMHgyN0ExOERFRSxcblx0ICAgICAgICAgICAgMHg0RjNGRkVBMiwgMHhFODg3QUQ4QywgMHhCNThDRTAwNiwgMHg3QUY0RDZCNixcblx0ICAgICAgICAgICAgMHhBQUNFMUU3QywgMHhEMzM3NUZFQywgMHhDRTc4QTM5OSwgMHg0MDZCMkE0Mixcblx0ICAgICAgICAgICAgMHgyMEZFOUUzNSwgMHhEOUYzODVCOSwgMHhFRTM5RDdBQiwgMHgzQjEyNEU4Qixcblx0ICAgICAgICAgICAgMHgxREM5RkFGNywgMHg0QjZEMTg1NiwgMHgyNkEzNjYzMSwgMHhFQUUzOTdCMixcblx0ICAgICAgICAgICAgMHgzQTZFRkE3NCwgMHhERDVCNDMzMiwgMHg2ODQxRTdGNywgMHhDQTc4MjBGQixcblx0ICAgICAgICAgICAgMHhGQjBBRjU0RSwgMHhEOEZFQjM5NywgMHg0NTQwNTZBQywgMHhCQTQ4OTUyNyxcblx0ICAgICAgICAgICAgMHg1NTUzM0EzQSwgMHgyMDgzOEQ4NywgMHhGRTZCQTlCNywgMHhEMDk2OTU0Qixcblx0ICAgICAgICAgICAgMHg1NUE4NjdCQywgMHhBMTE1OUE1OCwgMHhDQ0E5Mjk2MywgMHg5OUUxREIzMyxcblx0ICAgICAgICAgICAgMHhBNjJBNEE1NiwgMHgzRjMxMjVGOSwgMHg1RUY0N0UxQywgMHg5MDI5MzE3Qyxcblx0ICAgICAgICAgICAgMHhGREY4RTgwMiwgMHgwNDI3MkY3MCwgMHg4MEJCMTU1QywgMHgwNTI4MkNFMyxcblx0ICAgICAgICAgICAgMHg5NUMxMTU0OCwgMHhFNEM2NkQyMiwgMHg0OEMxMTMzRiwgMHhDNzBGODZEQyxcblx0ICAgICAgICAgICAgMHgwN0Y5QzlFRSwgMHg0MTA0MUYwRiwgMHg0MDQ3NzlBNCwgMHg1RDg4NkUxNyxcblx0ICAgICAgICAgICAgMHgzMjVGNTFFQiwgMHhENTlCQzBEMSwgMHhGMkJDQzE4RiwgMHg0MTExMzU2NCxcblx0ICAgICAgICAgICAgMHgyNTdCNzgzNCwgMHg2MDJBOUM2MCwgMHhERkY4RThBMywgMHgxRjYzNkMxQixcblx0ICAgICAgICAgICAgMHgwRTEyQjRDMiwgMHgwMkUxMzI5RSwgMHhBRjY2NEZEMSwgMHhDQUQxODExNSxcblx0ICAgICAgICAgICAgMHg2QjIzOTVFMCwgMHgzMzNFOTJFMSwgMHgzQjI0MEI2MiwgMHhFRUJFQjkyMixcblx0ICAgICAgICAgICAgMHg4NUIyQTIwRSwgMHhFNkJBMEQ5OSwgMHhERTcyMEM4QywgMHgyREEyRjcyOCxcblx0ICAgICAgICAgICAgMHhEMDEyNzg0NSwgMHg5NUI3OTRGRCwgMHg2NDdEMDg2MiwgMHhFN0NDRjVGMCxcblx0ICAgICAgICAgICAgMHg1NDQ5QTM2RiwgMHg4NzdENDhGQSwgMHhDMzlERkQyNywgMHhGMzNFOEQxRSxcblx0ICAgICAgICAgICAgMHgwQTQ3NjM0MSwgMHg5OTJFRkY3NCwgMHgzQTZGNkVBQiwgMHhGNEY4RkQzNyxcblx0ICAgICAgICAgICAgMHhBODEyREM2MCwgMHhBMUVCRERGOCwgMHg5OTFCRTE0QywgMHhEQjZFNkIwRCxcblx0ICAgICAgICAgICAgMHhDNjdCNTUxMCwgMHg2RDY3MkMzNywgMHgyNzY1RDQzQiwgMHhEQ0QwRTgwNCxcblx0ICAgICAgICAgICAgMHhGMTI5MERDNywgMHhDQzAwRkZBMywgMHhCNTM5MEY5MiwgMHg2OTBGRUQwQixcblx0ICAgICAgICAgICAgMHg2NjdCOUZGQiwgMHhDRURCN0Q5QywgMHhBMDkxQ0YwQiwgMHhEOTE1NUVBMyxcblx0ICAgICAgICAgICAgMHhCQjEzMkY4OCwgMHg1MTVCQUQyNCwgMHg3Qjk0NzlCRiwgMHg3NjNCRDZFQixcblx0ICAgICAgICAgICAgMHgzNzM5MkVCMywgMHhDQzExNTk3OSwgMHg4MDI2RTI5NywgMHhGNDJFMzEyRCxcblx0ICAgICAgICAgICAgMHg2ODQyQURBNywgMHhDNjZBMkIzQiwgMHgxMjc1NENDQywgMHg3ODJFRjExQyxcblx0ICAgICAgICAgICAgMHg2QTEyNDIzNywgMHhCNzkyNTFFNywgMHgwNkExQkJFNiwgMHg0QkZCNjM1MCxcblx0ICAgICAgICAgICAgMHgxQTZCMTAxOCwgMHgxMUNBRURGQSwgMHgzRDI1QkREOCwgMHhFMkUxQzNDOSxcblx0ICAgICAgICAgICAgMHg0NDQyMTY1OSwgMHgwQTEyMTM4NiwgMHhEOTBDRUM2RSwgMHhENUFCRUEyQSxcblx0ICAgICAgICAgICAgMHg2NEFGNjc0RSwgMHhEQTg2QTg1RiwgMHhCRUJGRTk4OCwgMHg2NEU0QzNGRSxcblx0ICAgICAgICAgICAgMHg5REJDODA1NywgMHhGMEY3QzA4NiwgMHg2MDc4N0JGOCwgMHg2MDAzNjA0RCxcblx0ICAgICAgICAgICAgMHhEMUZEODM0NiwgMHhGNjM4MUZCMCwgMHg3NzQ1QUUwNCwgMHhENzM2RkNDQyxcblx0ICAgICAgICAgICAgMHg4MzQyNkIzMywgMHhGMDFFQUI3MSwgMHhCMDgwNDE4NywgMHgzQzAwNUU1Rixcblx0ICAgICAgICAgICAgMHg3N0EwNTdCRSwgMHhCREU4QUUyNCwgMHg1NTQ2NDI5OSwgMHhCRjU4MkU2MSxcblx0ICAgICAgICAgICAgMHg0RTU4RjQ4RiwgMHhGMkRERkRBMiwgMHhGNDc0RUYzOCwgMHg4Nzg5QkRDMixcblx0ICAgICAgICAgICAgMHg1MzY2RjlDMywgMHhDOEIzOEU3NCwgMHhCNDc1RjI1NSwgMHg0NkZDRDlCOSxcblx0ICAgICAgICAgICAgMHg3QUVCMjY2MSwgMHg4QjFEREY4NCwgMHg4NDZBMEU3OSwgMHg5MTVGOTVFMixcblx0ICAgICAgICAgICAgMHg0NjZFNTk4RSwgMHgyMEI0NTc3MCwgMHg4Q0Q1NTU5MSwgMHhDOTAyREU0Qyxcblx0ICAgICAgICAgICAgMHhCOTBCQUNFMSwgMHhCQjgyMDVEMCwgMHgxMUE4NjI0OCwgMHg3NTc0QTk5RSxcblx0ICAgICAgICAgICAgMHhCNzdGMTlCNiwgMHhFMEE5REMwOSwgMHg2NjJEMDlBMSwgMHhDNDMyNDYzMyxcblx0ICAgICAgICAgICAgMHhFODVBMUYwMiwgMHgwOUYwQkU4QywgMHg0QTk5QTAyNSwgMHgxRDZFRkUxMCxcblx0ICAgICAgICAgICAgMHgxQUI5M0QxRCwgMHgwQkE1QTRERiwgMHhBMTg2RjIwRiwgMHgyODY4RjE2OSxcblx0ICAgICAgICAgICAgMHhEQ0I3REE4MywgMHg1NzM5MDZGRSwgMHhBMUUyQ0U5QiwgMHg0RkNEN0Y1Mixcblx0ICAgICAgICAgICAgMHg1MDExNUUwMSwgMHhBNzA2ODNGQSwgMHhBMDAyQjVDNCwgMHgwREU2RDAyNyxcblx0ICAgICAgICAgICAgMHg5QUY4OEMyNywgMHg3NzNGODY0MSwgMHhDMzYwNEMwNiwgMHg2MUE4MDZCNSxcblx0ICAgICAgICAgICAgMHhGMDE3N0EyOCwgMHhDMEY1ODZFMCwgMHgwMDYwNThBQSwgMHgzMERDN0Q2Mixcblx0ICAgICAgICAgICAgMHgxMUU2OUVENywgMHgyMzM4RUE2MywgMHg1M0MyREQ5NCwgMHhDMkMyMTYzNCxcblx0ICAgICAgICAgICAgMHhCQkNCRUU1NiwgMHg5MEJDQjZERSwgMHhFQkZDN0RBMSwgMHhDRTU5MUQ3Nixcblx0ICAgICAgICAgICAgMHg2RjA1RTQwOSwgMHg0QjdDMDE4OCwgMHgzOTcyMEEzRCwgMHg3QzkyN0MyNCxcblx0ICAgICAgICAgICAgMHg4NkUzNzI1RiwgMHg3MjREOURCOSwgMHgxQUMxNUJCNCwgMHhEMzlFQjhGQyxcblx0ICAgICAgICAgICAgMHhFRDU0NTU3OCwgMHgwOEZDQTVCNSwgMHhEODNEN0NEMywgMHg0REFEMEZDNCxcblx0ICAgICAgICAgICAgMHgxRTUwRUY1RSwgMHhCMTYxRTZGOCwgMHhBMjg1MTREOSwgMHg2QzUxMTMzQyxcblx0ICAgICAgICAgICAgMHg2RkQ1QzdFNywgMHg1NkUxNEVDNCwgMHgzNjJBQkZDRSwgMHhEREM2QzgzNyxcblx0ICAgICAgICAgICAgMHhENzlBMzIzNCwgMHg5MjYzODIxMiwgMHg2NzBFRkE4RSwgMHg0MDYwMDBFMCAgXSxcblx0ICAgICAgICBbICAgMHgzQTM5Q0UzNywgMHhEM0ZBRjVDRiwgMHhBQkMyNzczNywgMHg1QUM1MkQxQixcblx0ICAgICAgICAgICAgMHg1Q0IwNjc5RSwgMHg0RkEzMzc0MiwgMHhEMzgyMjc0MCwgMHg5OUJDOUJCRSxcblx0ICAgICAgICAgICAgMHhENTExOEU5RCwgMHhCRjBGNzMxNSwgMHhENjJEMUM3RSwgMHhDNzAwQzQ3Qixcblx0ICAgICAgICAgICAgMHhCNzhDMUI2QiwgMHgyMUExOTA0NSwgMHhCMjZFQjFCRSwgMHg2QTM2NkVCNCxcblx0ICAgICAgICAgICAgMHg1NzQ4QUIyRiwgMHhCQzk0NkU3OSwgMHhDNkEzNzZEMiwgMHg2NTQ5QzJDOCxcblx0ICAgICAgICAgICAgMHg1MzBGRjhFRSwgMHg0NjhEREU3RCwgMHhENTczMEExRCwgMHg0Q0QwNERDNixcblx0ICAgICAgICAgICAgMHgyOTM5QkJEQiwgMHhBOUJBNDY1MCwgMHhBQzk1MjZFOCwgMHhCRTVFRTMwNCxcblx0ICAgICAgICAgICAgMHhBMUZBRDVGMCwgMHg2QTJENTE5QSwgMHg2M0VGOENFMiwgMHg5QTg2RUUyMixcblx0ICAgICAgICAgICAgMHhDMDg5QzJCOCwgMHg0MzI0MkVGNiwgMHhBNTFFMDNBQSwgMHg5Q0YyRDBBNCxcblx0ICAgICAgICAgICAgMHg4M0MwNjFCQSwgMHg5QkU5NkE0RCwgMHg4RkU1MTU1MCwgMHhCQTY0NUJENixcblx0ICAgICAgICAgICAgMHgyODI2QTJGOSwgMHhBNzNBM0FFMSwgMHg0QkE5OTU4NiwgMHhFRjU1NjJFOSxcblx0ICAgICAgICAgICAgMHhDNzJGRUZEMywgMHhGNzUyRjdEQSwgMHgzRjA0NkY2OSwgMHg3N0ZBMEE1OSxcblx0ICAgICAgICAgICAgMHg4MEU0QTkxNSwgMHg4N0IwODYwMSwgMHg5QjA5RTZBRCwgMHgzQjNFRTU5Myxcblx0ICAgICAgICAgICAgMHhFOTkwRkQ1QSwgMHg5RTM0RDc5NywgMHgyQ0YwQjdEOSwgMHgwMjJCOEI1MSxcblx0ICAgICAgICAgICAgMHg5NkQ1QUMzQSwgMHgwMTdEQTY3RCwgMHhEMUNGM0VENiwgMHg3QzdEMkQyOCxcblx0ICAgICAgICAgICAgMHgxRjlGMjVDRiwgMHhBREYyQjg5QiwgMHg1QUQ2QjQ3MiwgMHg1QTg4RjU0Qyxcblx0ICAgICAgICAgICAgMHhFMDI5QUM3MSwgMHhFMDE5QTVFNiwgMHg0N0IwQUNGRCwgMHhFRDkzRkE5Qixcblx0ICAgICAgICAgICAgMHhFOEQzQzQ4RCwgMHgyODNCNTdDQywgMHhGOEQ1NjYyOSwgMHg3OTEzMkUyOCxcblx0ICAgICAgICAgICAgMHg3ODVGMDE5MSwgMHhFRDc1NjA1NSwgMHhGNzk2MEU0NCwgMHhFM0QzNUU4Qyxcblx0ICAgICAgICAgICAgMHgxNTA1NkRENCwgMHg4OEY0NkRCQSwgMHgwM0ExNjEyNSwgMHgwNTY0RjBCRCxcblx0ICAgICAgICAgICAgMHhDM0VCOUUxNSwgMHgzQzkwNTdBMiwgMHg5NzI3MUFFQywgMHhBOTNBMDcyQSxcblx0ICAgICAgICAgICAgMHgxQjNGNkQ5QiwgMHgxRTYzMjFGNSwgMHhGNTlDNjZGQiwgMHgyNkRDRjMxOSxcblx0ICAgICAgICAgICAgMHg3NTMzRDkyOCwgMHhCMTU1RkRGNSwgMHgwMzU2MzQ4MiwgMHg4QUJBM0NCQixcblx0ICAgICAgICAgICAgMHgyODUxNzcxMSwgMHhDMjBBRDlGOCwgMHhBQkNDNTE2NywgMHhDQ0FEOTI1Rixcblx0ICAgICAgICAgICAgMHg0REU4MTc1MSwgMHgzODMwREM4RSwgMHgzNzlENTg2MiwgMHg5MzIwRjk5MSxcblx0ICAgICAgICAgICAgMHhFQTdBOTBDMiwgMHhGQjNFN0JDRSwgMHg1MTIxQ0U2NCwgMHg3NzRGQkUzMixcblx0ICAgICAgICAgICAgMHhBOEI2RTM3RSwgMHhDMzI5M0Q0NiwgMHg0OERFNTM2OSwgMHg2NDEzRTY4MCxcblx0ICAgICAgICAgICAgMHhBMkFFMDgxMCwgMHhERDZEQjIyNCwgMHg2OTg1MkRGRCwgMHgwOTA3MjE2Nixcblx0ICAgICAgICAgICAgMHhCMzlBNDYwQSwgMHg2NDQ1QzBERCwgMHg1ODZDREVDRiwgMHgxQzIwQzhBRSxcblx0ICAgICAgICAgICAgMHg1QkJFRjdERCwgMHgxQjU4OEQ0MCwgMHhDQ0QyMDE3RiwgMHg2QkI0RTNCQixcblx0ICAgICAgICAgICAgMHhEREEyNkE3RSwgMHgzQTU5RkY0NSwgMHgzRTM1MEE0NCwgMHhCQ0I0Q0RENSxcblx0ICAgICAgICAgICAgMHg3MkVBQ0VBOCwgMHhGQTY0ODRCQiwgMHg4RDY2MTJBRSwgMHhCRjNDNkY0Nyxcblx0ICAgICAgICAgICAgMHhEMjlCRTQ2MywgMHg1NDJGNUQ5RSwgMHhBRUMyNzcxQiwgMHhGNjRFNjM3MCxcblx0ICAgICAgICAgICAgMHg3NDBFMEQ4RCwgMHhFNzVCMTM1NywgMHhGODcyMTY3MSwgMHhBRjUzN0Q1RCxcblx0ICAgICAgICAgICAgMHg0MDQwQ0IwOCwgMHg0RUI0RTJDQywgMHgzNEQyNDY2QSwgMHgwMTE1QUY4NCxcblx0ICAgICAgICAgICAgMHhFMUIwMDQyOCwgMHg5NTk4M0ExRCwgMHgwNkI4OUZCNCwgMHhDRTZFQTA0OCxcblx0ICAgICAgICAgICAgMHg2RjNGM0I4MiwgMHgzNTIwQUI4MiwgMHgwMTFBMUQ0QiwgMHgyNzcyMjdGOCxcblx0ICAgICAgICAgICAgMHg2MTE1NjBCMSwgMHhFNzkzM0ZEQywgMHhCQjNBNzkyQiwgMHgzNDQ1MjVCRCxcblx0ICAgICAgICAgICAgMHhBMDg4MzlFMSwgMHg1MUNFNzk0QiwgMHgyRjMyQzlCNywgMHhBMDFGQkFDOSxcblx0ICAgICAgICAgICAgMHhFMDFDQzg3RSwgMHhCQ0M3RDFGNiwgMHhDRjAxMTFDMywgMHhBMUU4QUFDNyxcblx0ICAgICAgICAgICAgMHgxQTkwODc0OSwgMHhENDRGQkQ5QSwgMHhEMERBREVDQiwgMHhENTBBREEzOCxcblx0ICAgICAgICAgICAgMHgwMzM5QzMyQSwgMHhDNjkxMzY2NywgMHg4REY5MzE3QywgMHhFMEIxMkI0Rixcblx0ICAgICAgICAgICAgMHhGNzlFNTlCNywgMHg0M0Y1QkIzQSwgMHhGMkQ1MTlGRiwgMHgyN0Q5NDU5Qyxcblx0ICAgICAgICAgICAgMHhCRjk3MjIyQywgMHgxNUU2RkMyQSwgMHgwRjkxRkM3MSwgMHg5Qjk0MTUyNSxcblx0ICAgICAgICAgICAgMHhGQUU1OTM2MSwgMHhDRUI2OUNFQiwgMHhDMkE4NjQ1OSwgMHgxMkJBQThEMSxcblx0ICAgICAgICAgICAgMHhCNkMxMDc1RSwgMHhFMzA1NkEwQywgMHgxMEQyNTA2NSwgMHhDQjAzQTQ0Mixcblx0ICAgICAgICAgICAgMHhFMEVDNkUwRSwgMHgxNjk4REIzQiwgMHg0Qzk4QTBCRSwgMHgzMjc4RTk2NCxcblx0ICAgICAgICAgICAgMHg5RjFGOTUzMiwgMHhFMEQzOTJERiwgMHhEM0EwMzQyQiwgMHg4OTcxRjIxRSxcblx0ICAgICAgICAgICAgMHgxQjBBNzQ0MSwgMHg0QkEzMzQ4QywgMHhDNUJFNzEyMCwgMHhDMzc2MzJEOCxcblx0ICAgICAgICAgICAgMHhERjM1OUY4RCwgMHg5Qjk5MkYyRSwgMHhFNjBCNkY0NywgMHgwRkUzRjExRCxcblx0ICAgICAgICAgICAgMHhFNTRDREE1NCwgMHgxRURBRDg5MSwgMHhDRTYyNzlDRiwgMHhDRDNFN0U2Rixcblx0ICAgICAgICAgICAgMHgxNjE4QjE2NiwgMHhGRDJDMUQwNSwgMHg4NDhGRDJDNSwgMHhGNkZCMjI5OSxcblx0ICAgICAgICAgICAgMHhGNTIzRjM1NywgMHhBNjMyNzYyMywgMHg5M0E4MzUzMSwgMHg1NkNDQ0QwMixcblx0ICAgICAgICAgICAgMHhBQ0YwODE2MiwgMHg1QTc1RUJCNSwgMHg2RTE2MzY5NywgMHg4OEQyNzNDQyxcblx0ICAgICAgICAgICAgMHhERTk2NjI5MiwgMHg4MUI5NDlEMCwgMHg0QzUwOTAxQiwgMHg3MUM2NTYxNCxcblx0ICAgICAgICAgICAgMHhFNkM2QzdCRCwgMHgzMjdBMTQwQSwgMHg0NUUxRDAwNiwgMHhDM0YyN0I5QSxcblx0ICAgICAgICAgICAgMHhDOUFBNTNGRCwgMHg2MkE4MEYwMCwgMHhCQjI1QkZFMiwgMHgzNUJERDJGNixcblx0ICAgICAgICAgICAgMHg3MTEyNjkwNSwgMHhCMjA0MDIyMiwgMHhCNkNCQ0Y3QywgMHhDRDc2OUMyQixcblx0ICAgICAgICAgICAgMHg1MzExM0VDMCwgMHgxNjQwRTNEMywgMHgzOEFCQkQ2MCwgMHgyNTQ3QURGMCxcblx0ICAgICAgICAgICAgMHhCQTM4MjA5QywgMHhGNzQ2Q0U3NiwgMHg3N0FGQTFDNSwgMHgyMDc1NjA2MCxcblx0ICAgICAgICAgICAgMHg4NUNCRkU0RSwgMHg4QUU4OEREOCwgMHg3QUFBRjlCMCwgMHg0Q0Y5QUE3RSxcblx0ICAgICAgICAgICAgMHgxOTQ4QzI1QywgMHgwMkZCOEE4QywgMHgwMUMzNkFFNCwgMHhENkVCRTFGOSxcblx0ICAgICAgICAgICAgMHg5MEQ0Rjg2OSwgMHhBNjVDREVBMCwgMHgzRjA5MjUyRCwgMHhDMjA4RTY5Rixcblx0ICAgICAgICAgICAgMHhCNzRFNjEzMiwgMHhDRTc3RTI1QiwgMHg1NzhGREZFMywgMHgzQUMzNzJFNiAgXVxuXHQgICAgXTtcblxuXHQgICAgdmFyIEJMT1dGSVNIX0NUWCA9IHtcblx0ICAgICAgICBwYm94OiBbXSxcblx0ICAgICAgICBzYm94OiBbXVxuXHQgICAgfVxuXG5cdCAgICBmdW5jdGlvbiBGKGN0eCwgeCl7XG5cdCAgICAgICAgbGV0IGEgPSAoeCA+PiAyNCkgJiAweEZGO1xuXHQgICAgICAgIGxldCBiID0gKHggPj4gMTYpICYgMHhGRjtcblx0ICAgICAgICBsZXQgYyA9ICh4ID4+IDgpICYgMHhGRjtcblx0ICAgICAgICBsZXQgZCA9IHggJiAweEZGO1xuXG5cdCAgICAgICAgbGV0IHkgPSBjdHguc2JveFswXVthXSArIGN0eC5zYm94WzFdW2JdO1xuXHQgICAgICAgIHkgPSB5IF4gY3R4LnNib3hbMl1bY107XG5cdCAgICAgICAgeSA9IHkgKyBjdHguc2JveFszXVtkXTtcblxuXHQgICAgICAgIHJldHVybiB5O1xuXHQgICAgfVxuXG5cdCAgICBmdW5jdGlvbiBCbG93RmlzaF9FbmNyeXB0KGN0eCwgbGVmdCwgcmlnaHQpe1xuXHQgICAgICAgIGxldCBYbCA9IGxlZnQ7XG5cdCAgICAgICAgbGV0IFhyID0gcmlnaHQ7XG5cdCAgICAgICAgbGV0IHRlbXA7XG5cblx0ICAgICAgICBmb3IobGV0IGkgPSAwOyBpIDwgTjsgKytpKXtcblx0ICAgICAgICAgICAgWGwgPSBYbCBeIGN0eC5wYm94W2ldO1xuXHQgICAgICAgICAgICBYciA9IEYoY3R4LCBYbCkgXiBYcjtcblxuXHQgICAgICAgICAgICB0ZW1wID0gWGw7XG5cdCAgICAgICAgICAgIFhsID0gWHI7XG5cdCAgICAgICAgICAgIFhyID0gdGVtcDtcblx0ICAgICAgICB9XG5cblx0ICAgICAgICB0ZW1wID0gWGw7XG5cdCAgICAgICAgWGwgPSBYcjtcblx0ICAgICAgICBYciA9IHRlbXA7XG5cblx0ICAgICAgICBYciA9IFhyIF4gY3R4LnBib3hbTl07XG5cdCAgICAgICAgWGwgPSBYbCBeIGN0eC5wYm94W04gKyAxXTtcblxuXHQgICAgICAgIHJldHVybiB7bGVmdDogWGwsIHJpZ2h0OiBYcn07XG5cdCAgICB9XG5cblx0ICAgIGZ1bmN0aW9uIEJsb3dGaXNoX0RlY3J5cHQoY3R4LCBsZWZ0LCByaWdodCl7XG5cdCAgICAgICAgbGV0IFhsID0gbGVmdDtcblx0ICAgICAgICBsZXQgWHIgPSByaWdodDtcblx0ICAgICAgICBsZXQgdGVtcDtcblxuXHQgICAgICAgIGZvcihsZXQgaSA9IE4gKyAxOyBpID4gMTsgLS1pKXtcblx0ICAgICAgICAgICAgWGwgPSBYbCBeIGN0eC5wYm94W2ldO1xuXHQgICAgICAgICAgICBYciA9IEYoY3R4LCBYbCkgXiBYcjtcblxuXHQgICAgICAgICAgICB0ZW1wID0gWGw7XG5cdCAgICAgICAgICAgIFhsID0gWHI7XG5cdCAgICAgICAgICAgIFhyID0gdGVtcDtcblx0ICAgICAgICB9XG5cblx0ICAgICAgICB0ZW1wID0gWGw7XG5cdCAgICAgICAgWGwgPSBYcjtcblx0ICAgICAgICBYciA9IHRlbXA7XG5cblx0ICAgICAgICBYciA9IFhyIF4gY3R4LnBib3hbMV07XG5cdCAgICAgICAgWGwgPSBYbCBeIGN0eC5wYm94WzBdO1xuXG5cdCAgICAgICAgcmV0dXJuIHtsZWZ0OiBYbCwgcmlnaHQ6IFhyfTtcblx0ICAgIH1cblxuXHQgICAgLyoqXG5cdCAgICAgKiBJbml0aWFsaXphdGlvbiBjdHgncyBwYm94IGFuZCBzYm94LlxuXHQgICAgICpcblx0ICAgICAqIEBwYXJhbSB7T2JqZWN0fSBjdHggVGhlIG9iamVjdCBoYXMgcGJveCBhbmQgc2JveC5cblx0ICAgICAqIEBwYXJhbSB7QXJyYXl9IGtleSBBbiBhcnJheSBvZiAzMi1iaXQgd29yZHMuXG5cdCAgICAgKiBAcGFyYW0ge2ludH0ga2V5c2l6ZSBUaGUgbGVuZ3RoIG9mIHRoZSBrZXkuXG5cdCAgICAgKlxuXHQgICAgICogQGV4YW1wbGVcblx0ICAgICAqXG5cdCAgICAgKiAgICAgQmxvd0Zpc2hJbml0KEJMT1dGSVNIX0NUWCwga2V5LCAxMjgvMzIpO1xuXHQgICAgICovXG5cdCAgICBmdW5jdGlvbiBCbG93RmlzaEluaXQoY3R4LCBrZXksIGtleXNpemUpXG5cdCAgICB7XG5cdCAgICAgICAgZm9yKGxldCBSb3cgPSAwOyBSb3cgPCA0OyBSb3crKylcblx0ICAgICAgICB7XG5cdCAgICAgICAgICAgIGN0eC5zYm94W1Jvd10gPSBbXTtcblx0ICAgICAgICAgICAgZm9yKGxldCBDb2wgPSAwOyBDb2wgPCAyNTY7IENvbCsrKVxuXHQgICAgICAgICAgICB7XG5cdCAgICAgICAgICAgICAgICBjdHguc2JveFtSb3ddW0NvbF0gPSBPUklHX1NbUm93XVtDb2xdO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgfVxuXG5cdCAgICAgICAgbGV0IGtleUluZGV4ID0gMDtcblx0ICAgICAgICBmb3IobGV0IGluZGV4ID0gMDsgaW5kZXggPCBOICsgMjsgaW5kZXgrKylcblx0ICAgICAgICB7XG5cdCAgICAgICAgICAgIGN0eC5wYm94W2luZGV4XSA9IE9SSUdfUFtpbmRleF0gXiBrZXlba2V5SW5kZXhdO1xuXHQgICAgICAgICAgICBrZXlJbmRleCsrO1xuXHQgICAgICAgICAgICBpZihrZXlJbmRleCA+PSBrZXlzaXplKVxuXHQgICAgICAgICAgICB7XG5cdCAgICAgICAgICAgICAgICBrZXlJbmRleCA9IDA7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICB9XG5cblx0ICAgICAgICBsZXQgRGF0YTEgPSAwO1xuXHQgICAgICAgIGxldCBEYXRhMiA9IDA7XG5cdCAgICAgICAgbGV0IHJlcyA9IDA7XG5cdCAgICAgICAgZm9yKGxldCBpID0gMDsgaSA8IE4gKyAyOyBpICs9IDIpXG5cdCAgICAgICAge1xuXHQgICAgICAgICAgICByZXMgPSBCbG93RmlzaF9FbmNyeXB0KGN0eCwgRGF0YTEsIERhdGEyKTtcblx0ICAgICAgICAgICAgRGF0YTEgPSByZXMubGVmdDtcblx0ICAgICAgICAgICAgRGF0YTIgPSByZXMucmlnaHQ7XG5cdCAgICAgICAgICAgIGN0eC5wYm94W2ldID0gRGF0YTE7XG5cdCAgICAgICAgICAgIGN0eC5wYm94W2kgKyAxXSA9IERhdGEyO1xuXHQgICAgICAgIH1cblxuXHQgICAgICAgIGZvcihsZXQgaSA9IDA7IGkgPCA0OyBpKyspXG5cdCAgICAgICAge1xuXHQgICAgICAgICAgICBmb3IobGV0IGogPSAwOyBqIDwgMjU2OyBqICs9IDIpXG5cdCAgICAgICAgICAgIHtcblx0ICAgICAgICAgICAgICAgIHJlcyA9IEJsb3dGaXNoX0VuY3J5cHQoY3R4LCBEYXRhMSwgRGF0YTIpO1xuXHQgICAgICAgICAgICAgICAgRGF0YTEgPSByZXMubGVmdDtcblx0ICAgICAgICAgICAgICAgIERhdGEyID0gcmVzLnJpZ2h0O1xuXHQgICAgICAgICAgICAgICAgY3R4LnNib3hbaV1bal0gPSBEYXRhMTtcblx0ICAgICAgICAgICAgICAgIGN0eC5zYm94W2ldW2ogKyAxXSA9IERhdGEyO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgfVxuXG5cdCAgICAgICAgcmV0dXJuIHRydWU7XG5cdCAgICB9XG5cblx0ICAgIC8qKlxuXHQgICAgICogQmxvd2Zpc2ggYmxvY2sgY2lwaGVyIGFsZ29yaXRobS5cblx0ICAgICAqL1xuXHQgICAgdmFyIEJsb3dmaXNoID0gQ19hbGdvLkJsb3dmaXNoID0gQmxvY2tDaXBoZXIuZXh0ZW5kKHtcblx0ICAgICAgICBfZG9SZXNldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICAvLyBTa2lwIHJlc2V0IG9mIG5Sb3VuZHMgaGFzIGJlZW4gc2V0IGJlZm9yZSBhbmQga2V5IGRpZCBub3QgY2hhbmdlXG5cdCAgICAgICAgICAgIGlmICh0aGlzLl9rZXlQcmlvclJlc2V0ID09PSB0aGlzLl9rZXkpIHtcblx0ICAgICAgICAgICAgICAgIHJldHVybjtcblx0ICAgICAgICAgICAgfVxuXG5cdCAgICAgICAgICAgIC8vIFNob3J0Y3V0c1xuXHQgICAgICAgICAgICB2YXIga2V5ID0gdGhpcy5fa2V5UHJpb3JSZXNldCA9IHRoaXMuX2tleTtcblx0ICAgICAgICAgICAgdmFyIGtleVdvcmRzID0ga2V5LndvcmRzO1xuXHQgICAgICAgICAgICB2YXIga2V5U2l6ZSA9IGtleS5zaWdCeXRlcyAvIDQ7XG5cblx0ICAgICAgICAgICAgLy9Jbml0aWFsaXphdGlvbiBwYm94IGFuZCBzYm94XG5cdCAgICAgICAgICAgIEJsb3dGaXNoSW5pdChCTE9XRklTSF9DVFgsIGtleVdvcmRzLCBrZXlTaXplKTtcblx0ICAgICAgICB9LFxuXG5cdCAgICAgICAgZW5jcnlwdEJsb2NrOiBmdW5jdGlvbiAoTSwgb2Zmc2V0KSB7XG5cdCAgICAgICAgICAgIHZhciByZXMgPSBCbG93RmlzaF9FbmNyeXB0KEJMT1dGSVNIX0NUWCwgTVtvZmZzZXRdLCBNW29mZnNldCArIDFdKTtcblx0ICAgICAgICAgICAgTVtvZmZzZXRdID0gcmVzLmxlZnQ7XG5cdCAgICAgICAgICAgIE1bb2Zmc2V0ICsgMV0gPSByZXMucmlnaHQ7XG5cdCAgICAgICAgfSxcblxuXHQgICAgICAgIGRlY3J5cHRCbG9jazogZnVuY3Rpb24gKE0sIG9mZnNldCkge1xuXHQgICAgICAgICAgICB2YXIgcmVzID0gQmxvd0Zpc2hfRGVjcnlwdChCTE9XRklTSF9DVFgsIE1bb2Zmc2V0XSwgTVtvZmZzZXQgKyAxXSk7XG5cdCAgICAgICAgICAgIE1bb2Zmc2V0XSA9IHJlcy5sZWZ0O1xuXHQgICAgICAgICAgICBNW29mZnNldCArIDFdID0gcmVzLnJpZ2h0O1xuXHQgICAgICAgIH0sXG5cblx0ICAgICAgICBibG9ja1NpemU6IDY0LzMyLFxuXG5cdCAgICAgICAga2V5U2l6ZTogMTI4LzMyLFxuXG5cdCAgICAgICAgaXZTaXplOiA2NC8zMlxuXHQgICAgfSk7XG5cblx0ICAgIC8qKlxuXHQgICAgICogU2hvcnRjdXQgZnVuY3Rpb25zIHRvIHRoZSBjaXBoZXIncyBvYmplY3QgaW50ZXJmYWNlLlxuXHQgICAgICpcblx0ICAgICAqIEBleGFtcGxlXG5cdCAgICAgKlxuXHQgICAgICogICAgIHZhciBjaXBoZXJ0ZXh0ID0gQ3J5cHRvSlMuQmxvd2Zpc2guZW5jcnlwdChtZXNzYWdlLCBrZXksIGNmZyk7XG5cdCAgICAgKiAgICAgdmFyIHBsYWludGV4dCAgPSBDcnlwdG9KUy5CbG93ZmlzaC5kZWNyeXB0KGNpcGhlcnRleHQsIGtleSwgY2ZnKTtcblx0ICAgICAqL1xuXHQgICAgQy5CbG93ZmlzaCA9IEJsb2NrQ2lwaGVyLl9jcmVhdGVIZWxwZXIoQmxvd2Zpc2gpO1xuXHR9KCkpO1xuXG5cblx0cmV0dXJuIENyeXB0b0pTLkJsb3dmaXNoO1xuXG59KSk7Il0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///43128\n")},43168:(I,g,t)=>{"use strict";I.exports=t.p+"d60a9ad0bc3b8df46324.png"},43240:function(module,exports,__webpack_require__){eval(';(function (root, factory) {\n\tif (true) {\n\t\t// CommonJS\n\t\tmodule.exports = exports = factory(__webpack_require__(19021));\n\t}\n\telse {}\n}(this, function (CryptoJS) {\n\n\t(function (undefined) {\n\t // Shortcuts\n\t var C = CryptoJS;\n\t var C_lib = C.lib;\n\t var Base = C_lib.Base;\n\t var X32WordArray = C_lib.WordArray;\n\n\t /**\n\t * x64 namespace.\n\t */\n\t var C_x64 = C.x64 = {};\n\n\t /**\n\t * A 64-bit word.\n\t */\n\t var X64Word = C_x64.Word = Base.extend({\n\t /**\n\t * Initializes a newly created 64-bit word.\n\t *\n\t * @param {number} high The high 32 bits.\n\t * @param {number} low The low 32 bits.\n\t *\n\t * @example\n\t *\n\t * var x64Word = CryptoJS.x64.Word.create(0x00010203, 0x04050607);\n\t */\n\t init: function (high, low) {\n\t this.high = high;\n\t this.low = low;\n\t }\n\n\t /**\n\t * Bitwise NOTs this word.\n\t *\n\t * @return {X64Word} A new x64-Word object after negating.\n\t *\n\t * @example\n\t *\n\t * var negated = x64Word.not();\n\t */\n\t // not: function () {\n\t // var high = ~this.high;\n\t // var low = ~this.low;\n\n\t // return X64Word.create(high, low);\n\t // },\n\n\t /**\n\t * Bitwise ANDs this word with the passed word.\n\t *\n\t * @param {X64Word} word The x64-Word to AND with this word.\n\t *\n\t * @return {X64Word} A new x64-Word object after ANDing.\n\t *\n\t * @example\n\t *\n\t * var anded = x64Word.and(anotherX64Word);\n\t */\n\t // and: function (word) {\n\t // var high = this.high & word.high;\n\t // var low = this.low & word.low;\n\n\t // return X64Word.create(high, low);\n\t // },\n\n\t /**\n\t * Bitwise ORs this word with the passed word.\n\t *\n\t * @param {X64Word} word The x64-Word to OR with this word.\n\t *\n\t * @return {X64Word} A new x64-Word object after ORing.\n\t *\n\t * @example\n\t *\n\t * var ored = x64Word.or(anotherX64Word);\n\t */\n\t // or: function (word) {\n\t // var high = this.high | word.high;\n\t // var low = this.low | word.low;\n\n\t // return X64Word.create(high, low);\n\t // },\n\n\t /**\n\t * Bitwise XORs this word with the passed word.\n\t *\n\t * @param {X64Word} word The x64-Word to XOR with this word.\n\t *\n\t * @return {X64Word} A new x64-Word object after XORing.\n\t *\n\t * @example\n\t *\n\t * var xored = x64Word.xor(anotherX64Word);\n\t */\n\t // xor: function (word) {\n\t // var high = this.high ^ word.high;\n\t // var low = this.low ^ word.low;\n\n\t // return X64Word.create(high, low);\n\t // },\n\n\t /**\n\t * Shifts this word n bits to the left.\n\t *\n\t * @param {number} n The number of bits to shift.\n\t *\n\t * @return {X64Word} A new x64-Word object after shifting.\n\t *\n\t * @example\n\t *\n\t * var shifted = x64Word.shiftL(25);\n\t */\n\t // shiftL: function (n) {\n\t // if (n < 32) {\n\t // var high = (this.high << n) | (this.low >>> (32 - n));\n\t // var low = this.low << n;\n\t // } else {\n\t // var high = this.low << (n - 32);\n\t // var low = 0;\n\t // }\n\n\t // return X64Word.create(high, low);\n\t // },\n\n\t /**\n\t * Shifts this word n bits to the right.\n\t *\n\t * @param {number} n The number of bits to shift.\n\t *\n\t * @return {X64Word} A new x64-Word object after shifting.\n\t *\n\t * @example\n\t *\n\t * var shifted = x64Word.shiftR(7);\n\t */\n\t // shiftR: function (n) {\n\t // if (n < 32) {\n\t // var low = (this.low >>> n) | (this.high << (32 - n));\n\t // var high = this.high >>> n;\n\t // } else {\n\t // var low = this.high >>> (n - 32);\n\t // var high = 0;\n\t // }\n\n\t // return X64Word.create(high, low);\n\t // },\n\n\t /**\n\t * Rotates this word n bits to the left.\n\t *\n\t * @param {number} n The number of bits to rotate.\n\t *\n\t * @return {X64Word} A new x64-Word object after rotating.\n\t *\n\t * @example\n\t *\n\t * var rotated = x64Word.rotL(25);\n\t */\n\t // rotL: function (n) {\n\t // return this.shiftL(n).or(this.shiftR(64 - n));\n\t // },\n\n\t /**\n\t * Rotates this word n bits to the right.\n\t *\n\t * @param {number} n The number of bits to rotate.\n\t *\n\t * @return {X64Word} A new x64-Word object after rotating.\n\t *\n\t * @example\n\t *\n\t * var rotated = x64Word.rotR(7);\n\t */\n\t // rotR: function (n) {\n\t // return this.shiftR(n).or(this.shiftL(64 - n));\n\t // },\n\n\t /**\n\t * Adds this word with the passed word.\n\t *\n\t * @param {X64Word} word The x64-Word to add with this word.\n\t *\n\t * @return {X64Word} A new x64-Word object after adding.\n\t *\n\t * @example\n\t *\n\t * var added = x64Word.add(anotherX64Word);\n\t */\n\t // add: function (word) {\n\t // var low = (this.low + word.low) | 0;\n\t // var carry = (low >>> 0) < (this.low >>> 0) ? 1 : 0;\n\t // var high = (this.high + word.high + carry) | 0;\n\n\t // return X64Word.create(high, low);\n\t // }\n\t });\n\n\t /**\n\t * An array of 64-bit words.\n\t *\n\t * @property {Array} words The array of CryptoJS.x64.Word objects.\n\t * @property {number} sigBytes The number of significant bytes in this word array.\n\t */\n\t var X64WordArray = C_x64.WordArray = Base.extend({\n\t /**\n\t * Initializes a newly created word array.\n\t *\n\t * @param {Array} words (Optional) An array of CryptoJS.x64.Word objects.\n\t * @param {number} sigBytes (Optional) The number of significant bytes in the words.\n\t *\n\t * @example\n\t *\n\t * var wordArray = CryptoJS.x64.WordArray.create();\n\t *\n\t * var wordArray = CryptoJS.x64.WordArray.create([\n\t * CryptoJS.x64.Word.create(0x00010203, 0x04050607),\n\t * CryptoJS.x64.Word.create(0x18191a1b, 0x1c1d1e1f)\n\t * ]);\n\t *\n\t * var wordArray = CryptoJS.x64.WordArray.create([\n\t * CryptoJS.x64.Word.create(0x00010203, 0x04050607),\n\t * CryptoJS.x64.Word.create(0x18191a1b, 0x1c1d1e1f)\n\t * ], 10);\n\t */\n\t init: function (words, sigBytes) {\n\t words = this.words = words || [];\n\n\t if (sigBytes != undefined) {\n\t this.sigBytes = sigBytes;\n\t } else {\n\t this.sigBytes = words.length * 8;\n\t }\n\t },\n\n\t /**\n\t * Converts this 64-bit word array to a 32-bit word array.\n\t *\n\t * @return {CryptoJS.lib.WordArray} This word array\'s data as a 32-bit word array.\n\t *\n\t * @example\n\t *\n\t * var x32WordArray = x64WordArray.toX32();\n\t */\n\t toX32: function () {\n\t // Shortcuts\n\t var x64Words = this.words;\n\t var x64WordsLength = x64Words.length;\n\n\t // Convert\n\t var x32Words = [];\n\t for (var i = 0; i < x64WordsLength; i++) {\n\t var x64Word = x64Words[i];\n\t x32Words.push(x64Word.high);\n\t x32Words.push(x64Word.low);\n\t }\n\n\t return X32WordArray.create(x32Words, this.sigBytes);\n\t },\n\n\t /**\n\t * Creates a copy of this word array.\n\t *\n\t * @return {X64WordArray} The clone.\n\t *\n\t * @example\n\t *\n\t * var clone = x64WordArray.clone();\n\t */\n\t clone: function () {\n\t var clone = Base.clone.call(this);\n\n\t // Clone "words" array\n\t var words = clone.words = this.words.slice(0);\n\n\t // Clone each X64Word object\n\t var wordsLength = words.length;\n\t for (var i = 0; i < wordsLength; i++) {\n\t words[i] = words[i].clone();\n\t }\n\n\t return clone;\n\t }\n\t });\n\t}());\n\n\n\treturn CryptoJS;\n\n}));//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNDMyNDAuanMiLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBUUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vaXRnLW5leHRnZW4tZnJvbnRlbmQvLi9ub2RlX21vZHVsZXMvY3J5cHRvLWpzL3g2NC1jb3JlLmpzPzMyNTIiXSwic291cmNlc0NvbnRlbnQiOlsiOyhmdW5jdGlvbiAocm9vdCwgZmFjdG9yeSkge1xuXHRpZiAodHlwZW9mIGV4cG9ydHMgPT09IFwib2JqZWN0XCIpIHtcblx0XHQvLyBDb21tb25KU1xuXHRcdG1vZHVsZS5leHBvcnRzID0gZXhwb3J0cyA9IGZhY3RvcnkocmVxdWlyZShcIi4vY29yZVwiKSk7XG5cdH1cblx0ZWxzZSBpZiAodHlwZW9mIGRlZmluZSA9PT0gXCJmdW5jdGlvblwiICYmIGRlZmluZS5hbWQpIHtcblx0XHQvLyBBTURcblx0XHRkZWZpbmUoW1wiLi9jb3JlXCJdLCBmYWN0b3J5KTtcblx0fVxuXHRlbHNlIHtcblx0XHQvLyBHbG9iYWwgKGJyb3dzZXIpXG5cdFx0ZmFjdG9yeShyb290LkNyeXB0b0pTKTtcblx0fVxufSh0aGlzLCBmdW5jdGlvbiAoQ3J5cHRvSlMpIHtcblxuXHQoZnVuY3Rpb24gKHVuZGVmaW5lZCkge1xuXHQgICAgLy8gU2hvcnRjdXRzXG5cdCAgICB2YXIgQyA9IENyeXB0b0pTO1xuXHQgICAgdmFyIENfbGliID0gQy5saWI7XG5cdCAgICB2YXIgQmFzZSA9IENfbGliLkJhc2U7XG5cdCAgICB2YXIgWDMyV29yZEFycmF5ID0gQ19saWIuV29yZEFycmF5O1xuXG5cdCAgICAvKipcblx0ICAgICAqIHg2NCBuYW1lc3BhY2UuXG5cdCAgICAgKi9cblx0ICAgIHZhciBDX3g2NCA9IEMueDY0ID0ge307XG5cblx0ICAgIC8qKlxuXHQgICAgICogQSA2NC1iaXQgd29yZC5cblx0ICAgICAqL1xuXHQgICAgdmFyIFg2NFdvcmQgPSBDX3g2NC5Xb3JkID0gQmFzZS5leHRlbmQoe1xuXHQgICAgICAgIC8qKlxuXHQgICAgICAgICAqIEluaXRpYWxpemVzIGEgbmV3bHkgY3JlYXRlZCA2NC1iaXQgd29yZC5cblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqIEBwYXJhbSB7bnVtYmVyfSBoaWdoIFRoZSBoaWdoIDMyIGJpdHMuXG5cdCAgICAgICAgICogQHBhcmFtIHtudW1iZXJ9IGxvdyBUaGUgbG93IDMyIGJpdHMuXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAZXhhbXBsZVxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogICAgIHZhciB4NjRXb3JkID0gQ3J5cHRvSlMueDY0LldvcmQuY3JlYXRlKDB4MDAwMTAyMDMsIDB4MDQwNTA2MDcpO1xuXHQgICAgICAgICAqL1xuXHQgICAgICAgIGluaXQ6IGZ1bmN0aW9uIChoaWdoLCBsb3cpIHtcblx0ICAgICAgICAgICAgdGhpcy5oaWdoID0gaGlnaDtcblx0ICAgICAgICAgICAgdGhpcy5sb3cgPSBsb3c7XG5cdCAgICAgICAgfVxuXG5cdCAgICAgICAgLyoqXG5cdCAgICAgICAgICogQml0d2lzZSBOT1RzIHRoaXMgd29yZC5cblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqIEByZXR1cm4ge1g2NFdvcmR9IEEgbmV3IHg2NC1Xb3JkIG9iamVjdCBhZnRlciBuZWdhdGluZy5cblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqIEBleGFtcGxlXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiAgICAgdmFyIG5lZ2F0ZWQgPSB4NjRXb3JkLm5vdCgpO1xuXHQgICAgICAgICAqL1xuXHQgICAgICAgIC8vIG5vdDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICAvLyB2YXIgaGlnaCA9IH50aGlzLmhpZ2g7XG5cdCAgICAgICAgICAgIC8vIHZhciBsb3cgPSB+dGhpcy5sb3c7XG5cblx0ICAgICAgICAgICAgLy8gcmV0dXJuIFg2NFdvcmQuY3JlYXRlKGhpZ2gsIGxvdyk7XG5cdCAgICAgICAgLy8gfSxcblxuXHQgICAgICAgIC8qKlxuXHQgICAgICAgICAqIEJpdHdpc2UgQU5EcyB0aGlzIHdvcmQgd2l0aCB0aGUgcGFzc2VkIHdvcmQuXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAcGFyYW0ge1g2NFdvcmR9IHdvcmQgVGhlIHg2NC1Xb3JkIHRvIEFORCB3aXRoIHRoaXMgd29yZC5cblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqIEByZXR1cm4ge1g2NFdvcmR9IEEgbmV3IHg2NC1Xb3JkIG9iamVjdCBhZnRlciBBTkRpbmcuXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAZXhhbXBsZVxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogICAgIHZhciBhbmRlZCA9IHg2NFdvcmQuYW5kKGFub3RoZXJYNjRXb3JkKTtcblx0ICAgICAgICAgKi9cblx0ICAgICAgICAvLyBhbmQ6IGZ1bmN0aW9uICh3b3JkKSB7XG5cdCAgICAgICAgICAgIC8vIHZhciBoaWdoID0gdGhpcy5oaWdoICYgd29yZC5oaWdoO1xuXHQgICAgICAgICAgICAvLyB2YXIgbG93ID0gdGhpcy5sb3cgJiB3b3JkLmxvdztcblxuXHQgICAgICAgICAgICAvLyByZXR1cm4gWDY0V29yZC5jcmVhdGUoaGlnaCwgbG93KTtcblx0ICAgICAgICAvLyB9LFxuXG5cdCAgICAgICAgLyoqXG5cdCAgICAgICAgICogQml0d2lzZSBPUnMgdGhpcyB3b3JkIHdpdGggdGhlIHBhc3NlZCB3b3JkLlxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogQHBhcmFtIHtYNjRXb3JkfSB3b3JkIFRoZSB4NjQtV29yZCB0byBPUiB3aXRoIHRoaXMgd29yZC5cblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqIEByZXR1cm4ge1g2NFdvcmR9IEEgbmV3IHg2NC1Xb3JkIG9iamVjdCBhZnRlciBPUmluZy5cblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqIEBleGFtcGxlXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiAgICAgdmFyIG9yZWQgPSB4NjRXb3JkLm9yKGFub3RoZXJYNjRXb3JkKTtcblx0ICAgICAgICAgKi9cblx0ICAgICAgICAvLyBvcjogZnVuY3Rpb24gKHdvcmQpIHtcblx0ICAgICAgICAgICAgLy8gdmFyIGhpZ2ggPSB0aGlzLmhpZ2ggfCB3b3JkLmhpZ2g7XG5cdCAgICAgICAgICAgIC8vIHZhciBsb3cgPSB0aGlzLmxvdyB8IHdvcmQubG93O1xuXG5cdCAgICAgICAgICAgIC8vIHJldHVybiBYNjRXb3JkLmNyZWF0ZShoaWdoLCBsb3cpO1xuXHQgICAgICAgIC8vIH0sXG5cblx0ICAgICAgICAvKipcblx0ICAgICAgICAgKiBCaXR3aXNlIFhPUnMgdGhpcyB3b3JkIHdpdGggdGhlIHBhc3NlZCB3b3JkLlxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogQHBhcmFtIHtYNjRXb3JkfSB3b3JkIFRoZSB4NjQtV29yZCB0byBYT1Igd2l0aCB0aGlzIHdvcmQuXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAcmV0dXJuIHtYNjRXb3JkfSBBIG5ldyB4NjQtV29yZCBvYmplY3QgYWZ0ZXIgWE9SaW5nLlxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogQGV4YW1wbGVcblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqICAgICB2YXIgeG9yZWQgPSB4NjRXb3JkLnhvcihhbm90aGVyWDY0V29yZCk7XG5cdCAgICAgICAgICovXG5cdCAgICAgICAgLy8geG9yOiBmdW5jdGlvbiAod29yZCkge1xuXHQgICAgICAgICAgICAvLyB2YXIgaGlnaCA9IHRoaXMuaGlnaCBeIHdvcmQuaGlnaDtcblx0ICAgICAgICAgICAgLy8gdmFyIGxvdyA9IHRoaXMubG93IF4gd29yZC5sb3c7XG5cblx0ICAgICAgICAgICAgLy8gcmV0dXJuIFg2NFdvcmQuY3JlYXRlKGhpZ2gsIGxvdyk7XG5cdCAgICAgICAgLy8gfSxcblxuXHQgICAgICAgIC8qKlxuXHQgICAgICAgICAqIFNoaWZ0cyB0aGlzIHdvcmQgbiBiaXRzIHRvIHRoZSBsZWZ0LlxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogQHBhcmFtIHtudW1iZXJ9IG4gVGhlIG51bWJlciBvZiBiaXRzIHRvIHNoaWZ0LlxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogQHJldHVybiB7WDY0V29yZH0gQSBuZXcgeDY0LVdvcmQgb2JqZWN0IGFmdGVyIHNoaWZ0aW5nLlxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogQGV4YW1wbGVcblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqICAgICB2YXIgc2hpZnRlZCA9IHg2NFdvcmQuc2hpZnRMKDI1KTtcblx0ICAgICAgICAgKi9cblx0ICAgICAgICAvLyBzaGlmdEw6IGZ1bmN0aW9uIChuKSB7XG5cdCAgICAgICAgICAgIC8vIGlmIChuIDwgMzIpIHtcblx0ICAgICAgICAgICAgICAgIC8vIHZhciBoaWdoID0gKHRoaXMuaGlnaCA8PCBuKSB8ICh0aGlzLmxvdyA+Pj4gKDMyIC0gbikpO1xuXHQgICAgICAgICAgICAgICAgLy8gdmFyIGxvdyA9IHRoaXMubG93IDw8IG47XG5cdCAgICAgICAgICAgIC8vIH0gZWxzZSB7XG5cdCAgICAgICAgICAgICAgICAvLyB2YXIgaGlnaCA9IHRoaXMubG93IDw8IChuIC0gMzIpO1xuXHQgICAgICAgICAgICAgICAgLy8gdmFyIGxvdyA9IDA7XG5cdCAgICAgICAgICAgIC8vIH1cblxuXHQgICAgICAgICAgICAvLyByZXR1cm4gWDY0V29yZC5jcmVhdGUoaGlnaCwgbG93KTtcblx0ICAgICAgICAvLyB9LFxuXG5cdCAgICAgICAgLyoqXG5cdCAgICAgICAgICogU2hpZnRzIHRoaXMgd29yZCBuIGJpdHMgdG8gdGhlIHJpZ2h0LlxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogQHBhcmFtIHtudW1iZXJ9IG4gVGhlIG51bWJlciBvZiBiaXRzIHRvIHNoaWZ0LlxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogQHJldHVybiB7WDY0V29yZH0gQSBuZXcgeDY0LVdvcmQgb2JqZWN0IGFmdGVyIHNoaWZ0aW5nLlxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogQGV4YW1wbGVcblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqICAgICB2YXIgc2hpZnRlZCA9IHg2NFdvcmQuc2hpZnRSKDcpO1xuXHQgICAgICAgICAqL1xuXHQgICAgICAgIC8vIHNoaWZ0UjogZnVuY3Rpb24gKG4pIHtcblx0ICAgICAgICAgICAgLy8gaWYgKG4gPCAzMikge1xuXHQgICAgICAgICAgICAgICAgLy8gdmFyIGxvdyA9ICh0aGlzLmxvdyA+Pj4gbikgfCAodGhpcy5oaWdoIDw8ICgzMiAtIG4pKTtcblx0ICAgICAgICAgICAgICAgIC8vIHZhciBoaWdoID0gdGhpcy5oaWdoID4+PiBuO1xuXHQgICAgICAgICAgICAvLyB9IGVsc2Uge1xuXHQgICAgICAgICAgICAgICAgLy8gdmFyIGxvdyA9IHRoaXMuaGlnaCA+Pj4gKG4gLSAzMik7XG5cdCAgICAgICAgICAgICAgICAvLyB2YXIgaGlnaCA9IDA7XG5cdCAgICAgICAgICAgIC8vIH1cblxuXHQgICAgICAgICAgICAvLyByZXR1cm4gWDY0V29yZC5jcmVhdGUoaGlnaCwgbG93KTtcblx0ICAgICAgICAvLyB9LFxuXG5cdCAgICAgICAgLyoqXG5cdCAgICAgICAgICogUm90YXRlcyB0aGlzIHdvcmQgbiBiaXRzIHRvIHRoZSBsZWZ0LlxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogQHBhcmFtIHtudW1iZXJ9IG4gVGhlIG51bWJlciBvZiBiaXRzIHRvIHJvdGF0ZS5cblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqIEByZXR1cm4ge1g2NFdvcmR9IEEgbmV3IHg2NC1Xb3JkIG9iamVjdCBhZnRlciByb3RhdGluZy5cblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqIEBleGFtcGxlXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiAgICAgdmFyIHJvdGF0ZWQgPSB4NjRXb3JkLnJvdEwoMjUpO1xuXHQgICAgICAgICAqL1xuXHQgICAgICAgIC8vIHJvdEw6IGZ1bmN0aW9uIChuKSB7XG5cdCAgICAgICAgICAgIC8vIHJldHVybiB0aGlzLnNoaWZ0TChuKS5vcih0aGlzLnNoaWZ0Uig2NCAtIG4pKTtcblx0ICAgICAgICAvLyB9LFxuXG5cdCAgICAgICAgLyoqXG5cdCAgICAgICAgICogUm90YXRlcyB0aGlzIHdvcmQgbiBiaXRzIHRvIHRoZSByaWdodC5cblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqIEBwYXJhbSB7bnVtYmVyfSBuIFRoZSBudW1iZXIgb2YgYml0cyB0byByb3RhdGUuXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAcmV0dXJuIHtYNjRXb3JkfSBBIG5ldyB4NjQtV29yZCBvYmplY3QgYWZ0ZXIgcm90YXRpbmcuXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAZXhhbXBsZVxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogICAgIHZhciByb3RhdGVkID0geDY0V29yZC5yb3RSKDcpO1xuXHQgICAgICAgICAqL1xuXHQgICAgICAgIC8vIHJvdFI6IGZ1bmN0aW9uIChuKSB7XG5cdCAgICAgICAgICAgIC8vIHJldHVybiB0aGlzLnNoaWZ0UihuKS5vcih0aGlzLnNoaWZ0TCg2NCAtIG4pKTtcblx0ICAgICAgICAvLyB9LFxuXG5cdCAgICAgICAgLyoqXG5cdCAgICAgICAgICogQWRkcyB0aGlzIHdvcmQgd2l0aCB0aGUgcGFzc2VkIHdvcmQuXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAcGFyYW0ge1g2NFdvcmR9IHdvcmQgVGhlIHg2NC1Xb3JkIHRvIGFkZCB3aXRoIHRoaXMgd29yZC5cblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqIEByZXR1cm4ge1g2NFdvcmR9IEEgbmV3IHg2NC1Xb3JkIG9iamVjdCBhZnRlciBhZGRpbmcuXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAZXhhbXBsZVxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogICAgIHZhciBhZGRlZCA9IHg2NFdvcmQuYWRkKGFub3RoZXJYNjRXb3JkKTtcblx0ICAgICAgICAgKi9cblx0ICAgICAgICAvLyBhZGQ6IGZ1bmN0aW9uICh3b3JkKSB7XG5cdCAgICAgICAgICAgIC8vIHZhciBsb3cgPSAodGhpcy5sb3cgKyB3b3JkLmxvdykgfCAwO1xuXHQgICAgICAgICAgICAvLyB2YXIgY2FycnkgPSAobG93ID4+PiAwKSA8ICh0aGlzLmxvdyA+Pj4gMCkgPyAxIDogMDtcblx0ICAgICAgICAgICAgLy8gdmFyIGhpZ2ggPSAodGhpcy5oaWdoICsgd29yZC5oaWdoICsgY2FycnkpIHwgMDtcblxuXHQgICAgICAgICAgICAvLyByZXR1cm4gWDY0V29yZC5jcmVhdGUoaGlnaCwgbG93KTtcblx0ICAgICAgICAvLyB9XG5cdCAgICB9KTtcblxuXHQgICAgLyoqXG5cdCAgICAgKiBBbiBhcnJheSBvZiA2NC1iaXQgd29yZHMuXG5cdCAgICAgKlxuXHQgICAgICogQHByb3BlcnR5IHtBcnJheX0gd29yZHMgVGhlIGFycmF5IG9mIENyeXB0b0pTLng2NC5Xb3JkIG9iamVjdHMuXG5cdCAgICAgKiBAcHJvcGVydHkge251bWJlcn0gc2lnQnl0ZXMgVGhlIG51bWJlciBvZiBzaWduaWZpY2FudCBieXRlcyBpbiB0aGlzIHdvcmQgYXJyYXkuXG5cdCAgICAgKi9cblx0ICAgIHZhciBYNjRXb3JkQXJyYXkgPSBDX3g2NC5Xb3JkQXJyYXkgPSBCYXNlLmV4dGVuZCh7XG5cdCAgICAgICAgLyoqXG5cdCAgICAgICAgICogSW5pdGlhbGl6ZXMgYSBuZXdseSBjcmVhdGVkIHdvcmQgYXJyYXkuXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAcGFyYW0ge0FycmF5fSB3b3JkcyAoT3B0aW9uYWwpIEFuIGFycmF5IG9mIENyeXB0b0pTLng2NC5Xb3JkIG9iamVjdHMuXG5cdCAgICAgICAgICogQHBhcmFtIHtudW1iZXJ9IHNpZ0J5dGVzIChPcHRpb25hbCkgVGhlIG51bWJlciBvZiBzaWduaWZpY2FudCBieXRlcyBpbiB0aGUgd29yZHMuXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAZXhhbXBsZVxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogICAgIHZhciB3b3JkQXJyYXkgPSBDcnlwdG9KUy54NjQuV29yZEFycmF5LmNyZWF0ZSgpO1xuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogICAgIHZhciB3b3JkQXJyYXkgPSBDcnlwdG9KUy54NjQuV29yZEFycmF5LmNyZWF0ZShbXG5cdCAgICAgICAgICogICAgICAgICBDcnlwdG9KUy54NjQuV29yZC5jcmVhdGUoMHgwMDAxMDIwMywgMHgwNDA1MDYwNyksXG5cdCAgICAgICAgICogICAgICAgICBDcnlwdG9KUy54NjQuV29yZC5jcmVhdGUoMHgxODE5MWExYiwgMHgxYzFkMWUxZilcblx0ICAgICAgICAgKiAgICAgXSk7XG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiAgICAgdmFyIHdvcmRBcnJheSA9IENyeXB0b0pTLng2NC5Xb3JkQXJyYXkuY3JlYXRlKFtcblx0ICAgICAgICAgKiAgICAgICAgIENyeXB0b0pTLng2NC5Xb3JkLmNyZWF0ZSgweDAwMDEwMjAzLCAweDA0MDUwNjA3KSxcblx0ICAgICAgICAgKiAgICAgICAgIENyeXB0b0pTLng2NC5Xb3JkLmNyZWF0ZSgweDE4MTkxYTFiLCAweDFjMWQxZTFmKVxuXHQgICAgICAgICAqICAgICBdLCAxMCk7XG5cdCAgICAgICAgICovXG5cdCAgICAgICAgaW5pdDogZnVuY3Rpb24gKHdvcmRzLCBzaWdCeXRlcykge1xuXHQgICAgICAgICAgICB3b3JkcyA9IHRoaXMud29yZHMgPSB3b3JkcyB8fCBbXTtcblxuXHQgICAgICAgICAgICBpZiAoc2lnQnl0ZXMgIT0gdW5kZWZpbmVkKSB7XG5cdCAgICAgICAgICAgICAgICB0aGlzLnNpZ0J5dGVzID0gc2lnQnl0ZXM7XG5cdCAgICAgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICAgICAgICB0aGlzLnNpZ0J5dGVzID0gd29yZHMubGVuZ3RoICogODtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgIH0sXG5cblx0ICAgICAgICAvKipcblx0ICAgICAgICAgKiBDb252ZXJ0cyB0aGlzIDY0LWJpdCB3b3JkIGFycmF5IHRvIGEgMzItYml0IHdvcmQgYXJyYXkuXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAcmV0dXJuIHtDcnlwdG9KUy5saWIuV29yZEFycmF5fSBUaGlzIHdvcmQgYXJyYXkncyBkYXRhIGFzIGEgMzItYml0IHdvcmQgYXJyYXkuXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAZXhhbXBsZVxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogICAgIHZhciB4MzJXb3JkQXJyYXkgPSB4NjRXb3JkQXJyYXkudG9YMzIoKTtcblx0ICAgICAgICAgKi9cblx0ICAgICAgICB0b1gzMjogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICAvLyBTaG9ydGN1dHNcblx0ICAgICAgICAgICAgdmFyIHg2NFdvcmRzID0gdGhpcy53b3Jkcztcblx0ICAgICAgICAgICAgdmFyIHg2NFdvcmRzTGVuZ3RoID0geDY0V29yZHMubGVuZ3RoO1xuXG5cdCAgICAgICAgICAgIC8vIENvbnZlcnRcblx0ICAgICAgICAgICAgdmFyIHgzMldvcmRzID0gW107XG5cdCAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgeDY0V29yZHNMZW5ndGg7IGkrKykge1xuXHQgICAgICAgICAgICAgICAgdmFyIHg2NFdvcmQgPSB4NjRXb3Jkc1tpXTtcblx0ICAgICAgICAgICAgICAgIHgzMldvcmRzLnB1c2goeDY0V29yZC5oaWdoKTtcblx0ICAgICAgICAgICAgICAgIHgzMldvcmRzLnB1c2goeDY0V29yZC5sb3cpO1xuXHQgICAgICAgICAgICB9XG5cblx0ICAgICAgICAgICAgcmV0dXJuIFgzMldvcmRBcnJheS5jcmVhdGUoeDMyV29yZHMsIHRoaXMuc2lnQnl0ZXMpO1xuXHQgICAgICAgIH0sXG5cblx0ICAgICAgICAvKipcblx0ICAgICAgICAgKiBDcmVhdGVzIGEgY29weSBvZiB0aGlzIHdvcmQgYXJyYXkuXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAcmV0dXJuIHtYNjRXb3JkQXJyYXl9IFRoZSBjbG9uZS5cblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqIEBleGFtcGxlXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiAgICAgdmFyIGNsb25lID0geDY0V29yZEFycmF5LmNsb25lKCk7XG5cdCAgICAgICAgICovXG5cdCAgICAgICAgY2xvbmU6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgdmFyIGNsb25lID0gQmFzZS5jbG9uZS5jYWxsKHRoaXMpO1xuXG5cdCAgICAgICAgICAgIC8vIENsb25lIFwid29yZHNcIiBhcnJheVxuXHQgICAgICAgICAgICB2YXIgd29yZHMgPSBjbG9uZS53b3JkcyA9IHRoaXMud29yZHMuc2xpY2UoMCk7XG5cblx0ICAgICAgICAgICAgLy8gQ2xvbmUgZWFjaCBYNjRXb3JkIG9iamVjdFxuXHQgICAgICAgICAgICB2YXIgd29yZHNMZW5ndGggPSB3b3Jkcy5sZW5ndGg7XG5cdCAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgd29yZHNMZW5ndGg7IGkrKykge1xuXHQgICAgICAgICAgICAgICAgd29yZHNbaV0gPSB3b3Jkc1tpXS5jbG9uZSgpO1xuXHQgICAgICAgICAgICB9XG5cblx0ICAgICAgICAgICAgcmV0dXJuIGNsb25lO1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHR9KCkpO1xuXG5cblx0cmV0dXJuIENyeXB0b0pTO1xuXG59KSk7Il0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///43240\n')},43308:(I,g,t)=>{"use strict";I.exports=t.p+"652fffb7c45105afedf7.png"},43386:(I,g,t)=>{"use strict";I.exports=t.p+"53da4667fa5b1e7e9184.png"},43401:(I,g,t)=>{"use strict";I.exports=t.p+"8c0ad5462c0ad3ca81e1.png"},43557:(I,g,t)=>{"use strict";I.exports=t.p+"f23e7d62d3e6ff5d9879.png"},43574:(I,g,t)=>{"use strict";I.exports=t.p+"35b5444ece180cf020d3.png"},43678:(I,g,t)=>{"use strict";I.exports=t.p+"f19ec5dde84ecdbe1832.png"},43714:(I,g,t)=>{"use strict";I.exports=t.p+"624b824da5d8a2835d97.png"},43739:(I,g,t)=>{"use strict";I.exports=t.p+"481e825809dbc55ffebf.png"},43784:function(__unused_webpack_module,__unused_webpack_exports,__webpack_require__){eval("//! moment.js locale configuration\n//! locale : Dutch (Belgium) [nl-be]\n//! author : Joris Röling : https://github.com/jorisroling\n//! author : Jacob Middag : https://github.com/middagj\n\n;(function (global, factory) {\n true ? factory(__webpack_require__(95093)) :\n 0\n}(this, (function (moment) { 'use strict';\n\n //! moment.js locale configuration\n\n var monthsShortWithDots =\n 'jan._feb._mrt._apr._mei_jun._jul._aug._sep._okt._nov._dec.'.split('_'),\n monthsShortWithoutDots =\n 'jan_feb_mrt_apr_mei_jun_jul_aug_sep_okt_nov_dec'.split('_'),\n monthsParse = [\n /^jan/i,\n /^feb/i,\n /^(maart|mrt\\.?)$/i,\n /^apr/i,\n /^mei$/i,\n /^jun[i.]?$/i,\n /^jul[i.]?$/i,\n /^aug/i,\n /^sep/i,\n /^okt/i,\n /^nov/i,\n /^dec/i,\n ],\n monthsRegex =\n /^(januari|februari|maart|april|mei|ju[nl]i|augustus|september|oktober|november|december|jan\\.?|feb\\.?|mrt\\.?|apr\\.?|ju[nl]\\.?|aug\\.?|sep\\.?|okt\\.?|nov\\.?|dec\\.?)/i;\n\n var nlBe = moment.defineLocale('nl-be', {\n months: 'januari_februari_maart_april_mei_juni_juli_augustus_september_oktober_november_december'.split(\n '_'\n ),\n monthsShort: function (m, format) {\n if (!m) {\n return monthsShortWithDots;\n } else if (/-MMM-/.test(format)) {\n return monthsShortWithoutDots[m.month()];\n } else {\n return monthsShortWithDots[m.month()];\n }\n },\n\n monthsRegex: monthsRegex,\n monthsShortRegex: monthsRegex,\n monthsStrictRegex:\n /^(januari|februari|maart|april|mei|ju[nl]i|augustus|september|oktober|november|december)/i,\n monthsShortStrictRegex:\n /^(jan\\.?|feb\\.?|mrt\\.?|apr\\.?|mei|ju[nl]\\.?|aug\\.?|sep\\.?|okt\\.?|nov\\.?|dec\\.?)/i,\n\n monthsParse: monthsParse,\n longMonthsParse: monthsParse,\n shortMonthsParse: monthsParse,\n\n weekdays:\n 'zondag_maandag_dinsdag_woensdag_donderdag_vrijdag_zaterdag'.split('_'),\n weekdaysShort: 'zo._ma._di._wo._do._vr._za.'.split('_'),\n weekdaysMin: 'zo_ma_di_wo_do_vr_za'.split('_'),\n weekdaysParseExact: true,\n longDateFormat: {\n LT: 'HH:mm',\n LTS: 'HH:mm:ss',\n L: 'DD/MM/YYYY',\n LL: 'D MMMM YYYY',\n LLL: 'D MMMM YYYY HH:mm',\n LLLL: 'dddd D MMMM YYYY HH:mm',\n },\n calendar: {\n sameDay: '[vandaag om] LT',\n nextDay: '[morgen om] LT',\n nextWeek: 'dddd [om] LT',\n lastDay: '[gisteren om] LT',\n lastWeek: '[afgelopen] dddd [om] LT',\n sameElse: 'L',\n },\n relativeTime: {\n future: 'over %s',\n past: '%s geleden',\n s: 'een paar seconden',\n ss: '%d seconden',\n m: 'één minuut',\n mm: '%d minuten',\n h: 'één uur',\n hh: '%d uur',\n d: 'één dag',\n dd: '%d dagen',\n M: 'één maand',\n MM: '%d maanden',\n y: 'één jaar',\n yy: '%d jaar',\n },\n dayOfMonthOrdinalParse: /\\d{1,2}(ste|de)/,\n ordinal: function (number) {\n return (\n number +\n (number === 1 || number === 8 || number >= 20 ? 'ste' : 'de')\n );\n },\n week: {\n dow: 1, // Monday is the first day of the week.\n doy: 4, // The week that contains Jan 4th is the first week of the year.\n },\n });\n\n return nlBe;\n\n})));\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNDM3ODQuanMiLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vaXRnLW5leHRnZW4tZnJvbnRlbmQvLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9ubC1iZS5qcz9kYjI5Il0sInNvdXJjZXNDb250ZW50IjpbIi8vISBtb21lbnQuanMgbG9jYWxlIGNvbmZpZ3VyYXRpb25cbi8vISBsb2NhbGUgOiBEdXRjaCAoQmVsZ2l1bSkgW25sLWJlXVxuLy8hIGF1dGhvciA6IEpvcmlzIFLDtmxpbmcgOiBodHRwczovL2dpdGh1Yi5jb20vam9yaXNyb2xpbmdcbi8vISBhdXRob3IgOiBKYWNvYiBNaWRkYWcgOiBodHRwczovL2dpdGh1Yi5jb20vbWlkZGFnalxuXG47KGZ1bmN0aW9uIChnbG9iYWwsIGZhY3RvcnkpIHtcbiAgIHR5cGVvZiBleHBvcnRzID09PSAnb2JqZWN0JyAmJiB0eXBlb2YgbW9kdWxlICE9PSAndW5kZWZpbmVkJ1xuICAgICAgICYmIHR5cGVvZiByZXF1aXJlID09PSAnZnVuY3Rpb24nID8gZmFjdG9yeShyZXF1aXJlKCcuLi9tb21lbnQnKSkgOlxuICAgdHlwZW9mIGRlZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiBkZWZpbmUuYW1kID8gZGVmaW5lKFsnLi4vbW9tZW50J10sIGZhY3RvcnkpIDpcbiAgIGZhY3RvcnkoZ2xvYmFsLm1vbWVudClcbn0odGhpcywgKGZ1bmN0aW9uIChtb21lbnQpIHsgJ3VzZSBzdHJpY3QnO1xuXG4gICAgLy8hIG1vbWVudC5qcyBsb2NhbGUgY29uZmlndXJhdGlvblxuXG4gICAgdmFyIG1vbnRoc1Nob3J0V2l0aERvdHMgPVxuICAgICAgICAgICAgJ2phbi5fZmViLl9tcnQuX2Fwci5fbWVpX2p1bi5fanVsLl9hdWcuX3NlcC5fb2t0Ll9ub3YuX2RlYy4nLnNwbGl0KCdfJyksXG4gICAgICAgIG1vbnRoc1Nob3J0V2l0aG91dERvdHMgPVxuICAgICAgICAgICAgJ2phbl9mZWJfbXJ0X2Fwcl9tZWlfanVuX2p1bF9hdWdfc2VwX29rdF9ub3ZfZGVjJy5zcGxpdCgnXycpLFxuICAgICAgICBtb250aHNQYXJzZSA9IFtcbiAgICAgICAgICAgIC9eamFuL2ksXG4gICAgICAgICAgICAvXmZlYi9pLFxuICAgICAgICAgICAgL14obWFhcnR8bXJ0XFwuPykkL2ksXG4gICAgICAgICAgICAvXmFwci9pLFxuICAgICAgICAgICAgL15tZWkkL2ksXG4gICAgICAgICAgICAvXmp1bltpLl0/JC9pLFxuICAgICAgICAgICAgL15qdWxbaS5dPyQvaSxcbiAgICAgICAgICAgIC9eYXVnL2ksXG4gICAgICAgICAgICAvXnNlcC9pLFxuICAgICAgICAgICAgL15va3QvaSxcbiAgICAgICAgICAgIC9ebm92L2ksXG4gICAgICAgICAgICAvXmRlYy9pLFxuICAgICAgICBdLFxuICAgICAgICBtb250aHNSZWdleCA9XG4gICAgICAgICAgICAvXihqYW51YXJpfGZlYnJ1YXJpfG1hYXJ0fGFwcmlsfG1laXxqdVtubF1pfGF1Z3VzdHVzfHNlcHRlbWJlcnxva3RvYmVyfG5vdmVtYmVyfGRlY2VtYmVyfGphblxcLj98ZmViXFwuP3xtcnRcXC4/fGFwclxcLj98anVbbmxdXFwuP3xhdWdcXC4/fHNlcFxcLj98b2t0XFwuP3xub3ZcXC4/fGRlY1xcLj8pL2k7XG5cbiAgICB2YXIgbmxCZSA9IG1vbWVudC5kZWZpbmVMb2NhbGUoJ25sLWJlJywge1xuICAgICAgICBtb250aHM6ICdqYW51YXJpX2ZlYnJ1YXJpX21hYXJ0X2FwcmlsX21laV9qdW5pX2p1bGlfYXVndXN0dXNfc2VwdGVtYmVyX29rdG9iZXJfbm92ZW1iZXJfZGVjZW1iZXInLnNwbGl0KFxuICAgICAgICAgICAgJ18nXG4gICAgICAgICksXG4gICAgICAgIG1vbnRoc1Nob3J0OiBmdW5jdGlvbiAobSwgZm9ybWF0KSB7XG4gICAgICAgICAgICBpZiAoIW0pIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gbW9udGhzU2hvcnRXaXRoRG90cztcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoLy1NTU0tLy50ZXN0KGZvcm1hdCkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gbW9udGhzU2hvcnRXaXRob3V0RG90c1ttLm1vbnRoKCldO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gbW9udGhzU2hvcnRXaXRoRG90c1ttLm1vbnRoKCldO1xuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuXG4gICAgICAgIG1vbnRoc1JlZ2V4OiBtb250aHNSZWdleCxcbiAgICAgICAgbW9udGhzU2hvcnRSZWdleDogbW9udGhzUmVnZXgsXG4gICAgICAgIG1vbnRoc1N0cmljdFJlZ2V4OlxuICAgICAgICAgICAgL14oamFudWFyaXxmZWJydWFyaXxtYWFydHxhcHJpbHxtZWl8anVbbmxdaXxhdWd1c3R1c3xzZXB0ZW1iZXJ8b2t0b2Jlcnxub3ZlbWJlcnxkZWNlbWJlcikvaSxcbiAgICAgICAgbW9udGhzU2hvcnRTdHJpY3RSZWdleDpcbiAgICAgICAgICAgIC9eKGphblxcLj98ZmViXFwuP3xtcnRcXC4/fGFwclxcLj98bWVpfGp1W25sXVxcLj98YXVnXFwuP3xzZXBcXC4/fG9rdFxcLj98bm92XFwuP3xkZWNcXC4/KS9pLFxuXG4gICAgICAgIG1vbnRoc1BhcnNlOiBtb250aHNQYXJzZSxcbiAgICAgICAgbG9uZ01vbnRoc1BhcnNlOiBtb250aHNQYXJzZSxcbiAgICAgICAgc2hvcnRNb250aHNQYXJzZTogbW9udGhzUGFyc2UsXG5cbiAgICAgICAgd2Vla2RheXM6XG4gICAgICAgICAgICAnem9uZGFnX21hYW5kYWdfZGluc2RhZ193b2Vuc2RhZ19kb25kZXJkYWdfdnJpamRhZ196YXRlcmRhZycuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXNTaG9ydDogJ3pvLl9tYS5fZGkuX3dvLl9kby5fdnIuX3phLicuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXNNaW46ICd6b19tYV9kaV93b19kb192cl96YScuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXNQYXJzZUV4YWN0OiB0cnVlLFxuICAgICAgICBsb25nRGF0ZUZvcm1hdDoge1xuICAgICAgICAgICAgTFQ6ICdISDptbScsXG4gICAgICAgICAgICBMVFM6ICdISDptbTpzcycsXG4gICAgICAgICAgICBMOiAnREQvTU0vWVlZWScsXG4gICAgICAgICAgICBMTDogJ0QgTU1NTSBZWVlZJyxcbiAgICAgICAgICAgIExMTDogJ0QgTU1NTSBZWVlZIEhIOm1tJyxcbiAgICAgICAgICAgIExMTEw6ICdkZGRkIEQgTU1NTSBZWVlZIEhIOm1tJyxcbiAgICAgICAgfSxcbiAgICAgICAgY2FsZW5kYXI6IHtcbiAgICAgICAgICAgIHNhbWVEYXk6ICdbdmFuZGFhZyBvbV0gTFQnLFxuICAgICAgICAgICAgbmV4dERheTogJ1ttb3JnZW4gb21dIExUJyxcbiAgICAgICAgICAgIG5leHRXZWVrOiAnZGRkZCBbb21dIExUJyxcbiAgICAgICAgICAgIGxhc3REYXk6ICdbZ2lzdGVyZW4gb21dIExUJyxcbiAgICAgICAgICAgIGxhc3RXZWVrOiAnW2FmZ2Vsb3Blbl0gZGRkZCBbb21dIExUJyxcbiAgICAgICAgICAgIHNhbWVFbHNlOiAnTCcsXG4gICAgICAgIH0sXG4gICAgICAgIHJlbGF0aXZlVGltZToge1xuICAgICAgICAgICAgZnV0dXJlOiAnb3ZlciAlcycsXG4gICAgICAgICAgICBwYXN0OiAnJXMgZ2VsZWRlbicsXG4gICAgICAgICAgICBzOiAnZWVuIHBhYXIgc2Vjb25kZW4nLFxuICAgICAgICAgICAgc3M6ICclZCBzZWNvbmRlbicsXG4gICAgICAgICAgICBtOiAnw6nDqW4gbWludXV0JyxcbiAgICAgICAgICAgIG1tOiAnJWQgbWludXRlbicsXG4gICAgICAgICAgICBoOiAnw6nDqW4gdXVyJyxcbiAgICAgICAgICAgIGhoOiAnJWQgdXVyJyxcbiAgICAgICAgICAgIGQ6ICfDqcOpbiBkYWcnLFxuICAgICAgICAgICAgZGQ6ICclZCBkYWdlbicsXG4gICAgICAgICAgICBNOiAnw6nDqW4gbWFhbmQnLFxuICAgICAgICAgICAgTU06ICclZCBtYWFuZGVuJyxcbiAgICAgICAgICAgIHk6ICfDqcOpbiBqYWFyJyxcbiAgICAgICAgICAgIHl5OiAnJWQgamFhcicsXG4gICAgICAgIH0sXG4gICAgICAgIGRheU9mTW9udGhPcmRpbmFsUGFyc2U6IC9cXGR7MSwyfShzdGV8ZGUpLyxcbiAgICAgICAgb3JkaW5hbDogZnVuY3Rpb24gKG51bWJlcikge1xuICAgICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICAgICBudW1iZXIgK1xuICAgICAgICAgICAgICAgIChudW1iZXIgPT09IDEgfHwgbnVtYmVyID09PSA4IHx8IG51bWJlciA+PSAyMCA/ICdzdGUnIDogJ2RlJylcbiAgICAgICAgICAgICk7XG4gICAgICAgIH0sXG4gICAgICAgIHdlZWs6IHtcbiAgICAgICAgICAgIGRvdzogMSwgLy8gTW9uZGF5IGlzIHRoZSBmaXJzdCBkYXkgb2YgdGhlIHdlZWsuXG4gICAgICAgICAgICBkb3k6IDQsIC8vIFRoZSB3ZWVrIHRoYXQgY29udGFpbnMgSmFuIDR0aCBpcyB0aGUgZmlyc3Qgd2VlayBvZiB0aGUgeWVhci5cbiAgICAgICAgfSxcbiAgICB9KTtcblxuICAgIHJldHVybiBubEJlO1xuXG59KSkpO1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///43784\n")},43861:function(__unused_webpack_module,__unused_webpack_exports,__webpack_require__){eval("//! moment.js locale configuration\n//! locale : Hindi [hi]\n//! author : Mayank Singhal : https://github.com/mayanksinghal\n\n;(function (global, factory) {\n true ? factory(__webpack_require__(95093)) :\n 0\n}(this, (function (moment) { 'use strict';\n\n //! moment.js locale configuration\n\n var symbolMap = {\n 1: '१',\n 2: '२',\n 3: '३',\n 4: '४',\n 5: '५',\n 6: '६',\n 7: '७',\n 8: '८',\n 9: '९',\n 0: '०',\n },\n numberMap = {\n '१': '1',\n '२': '2',\n '३': '3',\n '४': '4',\n '५': '5',\n '६': '6',\n '७': '7',\n '८': '8',\n '९': '9',\n '०': '0',\n },\n monthsParse = [\n /^जन/i,\n /^फ़र|फर/i,\n /^मार्च/i,\n /^अप्रै/i,\n /^मई/i,\n /^जून/i,\n /^जुल/i,\n /^अग/i,\n /^सितं|सित/i,\n /^अक्टू/i,\n /^नव|नवं/i,\n /^दिसं|दिस/i,\n ],\n shortMonthsParse = [\n /^जन/i,\n /^फ़र/i,\n /^मार्च/i,\n /^अप्रै/i,\n /^मई/i,\n /^जून/i,\n /^जुल/i,\n /^अग/i,\n /^सित/i,\n /^अक्टू/i,\n /^नव/i,\n /^दिस/i,\n ];\n\n var hi = moment.defineLocale('hi', {\n months: {\n format: 'जनवरी_फ़रवरी_मार्च_अप्रैल_मई_जून_जुलाई_अगस्त_सितम्बर_अक्टूबर_नवम्बर_दिसम्बर'.split(\n '_'\n ),\n standalone:\n 'जनवरी_फरवरी_मार्च_अप्रैल_मई_जून_जुलाई_अगस्त_सितंबर_अक्टूबर_नवंबर_दिसंबर'.split(\n '_'\n ),\n },\n monthsShort:\n 'जन._फ़र._मार्च_अप्रै._मई_जून_जुल._अग._सित._अक्टू._नव._दिस.'.split('_'),\n weekdays: 'रविवार_सोमवार_मंगलवार_बुधवार_गुरूवार_शुक्रवार_शनिवार'.split('_'),\n weekdaysShort: 'रवि_सोम_मंगल_बुध_गुरू_शुक्र_शनि'.split('_'),\n weekdaysMin: 'र_सो_मं_बु_गु_शु_श'.split('_'),\n longDateFormat: {\n LT: 'A h:mm बजे',\n LTS: 'A h:mm:ss बजे',\n L: 'DD/MM/YYYY',\n LL: 'D MMMM YYYY',\n LLL: 'D MMMM YYYY, A h:mm बजे',\n LLLL: 'dddd, D MMMM YYYY, A h:mm बजे',\n },\n\n monthsParse: monthsParse,\n longMonthsParse: monthsParse,\n shortMonthsParse: shortMonthsParse,\n\n monthsRegex:\n /^(जनवरी|जन\\.?|फ़रवरी|फरवरी|फ़र\\.?|मार्च?|अप्रैल|अप्रै\\.?|मई?|जून?|जुलाई|जुल\\.?|अगस्त|अग\\.?|सितम्बर|सितंबर|सित\\.?|अक्टूबर|अक्टू\\.?|नवम्बर|नवंबर|नव\\.?|दिसम्बर|दिसंबर|दिस\\.?)/i,\n\n monthsShortRegex:\n /^(जनवरी|जन\\.?|फ़रवरी|फरवरी|फ़र\\.?|मार्च?|अप्रैल|अप्रै\\.?|मई?|जून?|जुलाई|जुल\\.?|अगस्त|अग\\.?|सितम्बर|सितंबर|सित\\.?|अक्टूबर|अक्टू\\.?|नवम्बर|नवंबर|नव\\.?|दिसम्बर|दिसंबर|दिस\\.?)/i,\n\n monthsStrictRegex:\n /^(जनवरी?|फ़रवरी|फरवरी?|मार्च?|अप्रैल?|मई?|जून?|जुलाई?|अगस्त?|सितम्बर|सितंबर|सित?\\.?|अक्टूबर|अक्टू\\.?|नवम्बर|नवंबर?|दिसम्बर|दिसंबर?)/i,\n\n monthsShortStrictRegex:\n /^(जन\\.?|फ़र\\.?|मार्च?|अप्रै\\.?|मई?|जून?|जुल\\.?|अग\\.?|सित\\.?|अक्टू\\.?|नव\\.?|दिस\\.?)/i,\n\n calendar: {\n sameDay: '[आज] LT',\n nextDay: '[कल] LT',\n nextWeek: 'dddd, LT',\n lastDay: '[कल] LT',\n lastWeek: '[पिछले] dddd, LT',\n sameElse: 'L',\n },\n relativeTime: {\n future: '%s में',\n past: '%s पहले',\n s: 'कुछ ही क्षण',\n ss: '%d सेकंड',\n m: 'एक मिनट',\n mm: '%d मिनट',\n h: 'एक घंटा',\n hh: '%d घंटे',\n d: 'एक दिन',\n dd: '%d दिन',\n M: 'एक महीने',\n MM: '%d महीने',\n y: 'एक वर्ष',\n yy: '%d वर्ष',\n },\n preparse: function (string) {\n return string.replace(/[१२३४५६७८९०]/g, function (match) {\n return numberMap[match];\n });\n },\n postformat: function (string) {\n return string.replace(/\\d/g, function (match) {\n return symbolMap[match];\n });\n },\n // Hindi notation for meridiems are quite fuzzy in practice. While there exists\n // a rigid notion of a 'Pahar' it is not used as rigidly in modern Hindi.\n meridiemParse: /रात|सुबह|दोपहर|शाम/,\n meridiemHour: function (hour, meridiem) {\n if (hour === 12) {\n hour = 0;\n }\n if (meridiem === 'रात') {\n return hour < 4 ? hour : hour + 12;\n } else if (meridiem === 'सुबह') {\n return hour;\n } else if (meridiem === 'दोपहर') {\n return hour >= 10 ? hour : hour + 12;\n } else if (meridiem === 'शाम') {\n return hour + 12;\n }\n },\n meridiem: function (hour, minute, isLower) {\n if (hour < 4) {\n return 'रात';\n } else if (hour < 10) {\n return 'सुबह';\n } else if (hour < 17) {\n return 'दोपहर';\n } else if (hour < 20) {\n return 'शाम';\n } else {\n return 'रात';\n }\n },\n week: {\n dow: 0, // Sunday is the first day of the week.\n doy: 6, // The week that contains Jan 6th is the first week of the year.\n },\n });\n\n return hi;\n\n})));\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNDM4NjEuanMiLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vaXRnLW5leHRnZW4tZnJvbnRlbmQvLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9oaS5qcz9kYzRkIl0sInNvdXJjZXNDb250ZW50IjpbIi8vISBtb21lbnQuanMgbG9jYWxlIGNvbmZpZ3VyYXRpb25cbi8vISBsb2NhbGUgOiBIaW5kaSBbaGldXG4vLyEgYXV0aG9yIDogTWF5YW5rIFNpbmdoYWwgOiBodHRwczovL2dpdGh1Yi5jb20vbWF5YW5rc2luZ2hhbFxuXG47KGZ1bmN0aW9uIChnbG9iYWwsIGZhY3RvcnkpIHtcbiAgIHR5cGVvZiBleHBvcnRzID09PSAnb2JqZWN0JyAmJiB0eXBlb2YgbW9kdWxlICE9PSAndW5kZWZpbmVkJ1xuICAgICAgICYmIHR5cGVvZiByZXF1aXJlID09PSAnZnVuY3Rpb24nID8gZmFjdG9yeShyZXF1aXJlKCcuLi9tb21lbnQnKSkgOlxuICAgdHlwZW9mIGRlZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiBkZWZpbmUuYW1kID8gZGVmaW5lKFsnLi4vbW9tZW50J10sIGZhY3RvcnkpIDpcbiAgIGZhY3RvcnkoZ2xvYmFsLm1vbWVudClcbn0odGhpcywgKGZ1bmN0aW9uIChtb21lbnQpIHsgJ3VzZSBzdHJpY3QnO1xuXG4gICAgLy8hIG1vbWVudC5qcyBsb2NhbGUgY29uZmlndXJhdGlvblxuXG4gICAgdmFyIHN5bWJvbE1hcCA9IHtcbiAgICAgICAgICAgIDE6ICfgpacnLFxuICAgICAgICAgICAgMjogJ+ClqCcsXG4gICAgICAgICAgICAzOiAn4KWpJyxcbiAgICAgICAgICAgIDQ6ICfgpaonLFxuICAgICAgICAgICAgNTogJ+ClqycsXG4gICAgICAgICAgICA2OiAn4KWsJyxcbiAgICAgICAgICAgIDc6ICfgpa0nLFxuICAgICAgICAgICAgODogJ+ClricsXG4gICAgICAgICAgICA5OiAn4KWvJyxcbiAgICAgICAgICAgIDA6ICfgpaYnLFxuICAgICAgICB9LFxuICAgICAgICBudW1iZXJNYXAgPSB7XG4gICAgICAgICAgICAn4KWnJzogJzEnLFxuICAgICAgICAgICAgJ+ClqCc6ICcyJyxcbiAgICAgICAgICAgICfgpaknOiAnMycsXG4gICAgICAgICAgICAn4KWqJzogJzQnLFxuICAgICAgICAgICAgJ+Clqyc6ICc1JyxcbiAgICAgICAgICAgICfgpawnOiAnNicsXG4gICAgICAgICAgICAn4KWtJzogJzcnLFxuICAgICAgICAgICAgJ+Clric6ICc4JyxcbiAgICAgICAgICAgICfgpa8nOiAnOScsXG4gICAgICAgICAgICAn4KWmJzogJzAnLFxuICAgICAgICB9LFxuICAgICAgICBtb250aHNQYXJzZSA9IFtcbiAgICAgICAgICAgIC9e4KSc4KSoL2ksXG4gICAgICAgICAgICAvXuCkq+CkvOCksHzgpKvgpLAvaSxcbiAgICAgICAgICAgIC9e4KSu4KS+4KSw4KWN4KSaL2ksXG4gICAgICAgICAgICAvXuCkheCkquCljeCksOCliC9pLFxuICAgICAgICAgICAgL17gpK7gpIgvaSxcbiAgICAgICAgICAgIC9e4KSc4KWC4KSoL2ksXG4gICAgICAgICAgICAvXuCknOClgeCksi9pLFxuICAgICAgICAgICAgL17gpIXgpJcvaSxcbiAgICAgICAgICAgIC9e4KS44KS/4KSk4KSCfOCkuOCkv+CkpC9pLFxuICAgICAgICAgICAgL17gpIXgpJXgpY3gpJ/gpYIvaSxcbiAgICAgICAgICAgIC9e4KSo4KS1fOCkqOCkteCkgi9pLFxuICAgICAgICAgICAgL17gpKbgpL/gpLjgpIJ84KSm4KS/4KS4L2ksXG4gICAgICAgIF0sXG4gICAgICAgIHNob3J0TW9udGhzUGFyc2UgPSBbXG4gICAgICAgICAgICAvXuCknOCkqC9pLFxuICAgICAgICAgICAgL17gpKvgpLzgpLAvaSxcbiAgICAgICAgICAgIC9e4KSu4KS+4KSw4KWN4KSaL2ksXG4gICAgICAgICAgICAvXuCkheCkquCljeCksOCliC9pLFxuICAgICAgICAgICAgL17gpK7gpIgvaSxcbiAgICAgICAgICAgIC9e4KSc4KWC4KSoL2ksXG4gICAgICAgICAgICAvXuCknOClgeCksi9pLFxuICAgICAgICAgICAgL17gpIXgpJcvaSxcbiAgICAgICAgICAgIC9e4KS44KS/4KSkL2ksXG4gICAgICAgICAgICAvXuCkheCkleCljeCkn+Clgi9pLFxuICAgICAgICAgICAgL17gpKjgpLUvaSxcbiAgICAgICAgICAgIC9e4KSm4KS/4KS4L2ksXG4gICAgICAgIF07XG5cbiAgICB2YXIgaGkgPSBtb21lbnQuZGVmaW5lTG9jYWxlKCdoaScsIHtcbiAgICAgICAgbW9udGhzOiB7XG4gICAgICAgICAgICBmb3JtYXQ6ICfgpJzgpKjgpLXgpLDgpYBf4KSr4KS84KSw4KS14KSw4KWAX+CkruCkvuCksOCljeCkml/gpIXgpKrgpY3gpLDgpYjgpLJf4KSu4KSIX+CknOClguCkqF/gpJzgpYHgpLLgpL7gpIhf4KSF4KSX4KS44KWN4KSkX+CkuOCkv+CkpOCkruCljeCkrOCksF/gpIXgpJXgpY3gpJ/gpYLgpKzgpLBf4KSo4KS14KSu4KWN4KSs4KSwX+CkpuCkv+CkuOCkruCljeCkrOCksCcuc3BsaXQoXG4gICAgICAgICAgICAgICAgJ18nXG4gICAgICAgICAgICApLFxuICAgICAgICAgICAgc3RhbmRhbG9uZTpcbiAgICAgICAgICAgICAgICAn4KSc4KSo4KS14KSw4KWAX+Ckq+CksOCkteCksOClgF/gpK7gpL7gpLDgpY3gpJpf4KSF4KSq4KWN4KSw4KWI4KSyX+CkruCkiF/gpJzgpYLgpKhf4KSc4KWB4KSy4KS+4KSIX+CkheCkl+CkuOCljeCkpF/gpLjgpL/gpKTgpILgpKzgpLBf4KSF4KSV4KWN4KSf4KWC4KSs4KSwX+CkqOCkteCkguCkrOCksF/gpKbgpL/gpLjgpILgpKzgpLAnLnNwbGl0KFxuICAgICAgICAgICAgICAgICAgICAnXydcbiAgICAgICAgICAgICAgICApLFxuICAgICAgICB9LFxuICAgICAgICBtb250aHNTaG9ydDpcbiAgICAgICAgICAgICfgpJzgpKguX+Ckq+CkvOCksC5f4KSu4KS+4KSw4KWN4KSaX+CkheCkquCljeCksOCliC5f4KSu4KSIX+CknOClguCkqF/gpJzgpYHgpLIuX+CkheCkly5f4KS44KS/4KSkLl/gpIXgpJXgpY3gpJ/gpYIuX+CkqOCktS5f4KSm4KS/4KS4Licuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXM6ICfgpLDgpLXgpL/gpLXgpL7gpLBf4KS44KWL4KSu4KS14KS+4KSwX+CkruCkguCkl+CksuCkteCkvuCksF/gpKzgpYHgpKfgpLXgpL7gpLBf4KSX4KWB4KSw4KWC4KS14KS+4KSwX+CktuClgeCkleCljeCksOCkteCkvuCksF/gpLbgpKjgpL/gpLXgpL7gpLAnLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzU2hvcnQ6ICfgpLDgpLXgpL9f4KS44KWL4KSuX+CkruCkguCkl+Cksl/gpKzgpYHgpKdf4KSX4KWB4KSw4KWCX+CktuClgeCkleCljeCksF/gpLbgpKjgpL8nLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzTWluOiAn4KSwX+CkuOCli1/gpK7gpIJf4KSs4KWBX+Ckl+ClgV/gpLbgpYFf4KS2Jy5zcGxpdCgnXycpLFxuICAgICAgICBsb25nRGF0ZUZvcm1hdDoge1xuICAgICAgICAgICAgTFQ6ICdBIGg6bW0g4KSs4KSc4KWHJyxcbiAgICAgICAgICAgIExUUzogJ0EgaDptbTpzcyDgpKzgpJzgpYcnLFxuICAgICAgICAgICAgTDogJ0REL01NL1lZWVknLFxuICAgICAgICAgICAgTEw6ICdEIE1NTU0gWVlZWScsXG4gICAgICAgICAgICBMTEw6ICdEIE1NTU0gWVlZWSwgQSBoOm1tIOCkrOCknOClhycsXG4gICAgICAgICAgICBMTExMOiAnZGRkZCwgRCBNTU1NIFlZWVksIEEgaDptbSDgpKzgpJzgpYcnLFxuICAgICAgICB9LFxuXG4gICAgICAgIG1vbnRoc1BhcnNlOiBtb250aHNQYXJzZSxcbiAgICAgICAgbG9uZ01vbnRoc1BhcnNlOiBtb250aHNQYXJzZSxcbiAgICAgICAgc2hvcnRNb250aHNQYXJzZTogc2hvcnRNb250aHNQYXJzZSxcblxuICAgICAgICBtb250aHNSZWdleDpcbiAgICAgICAgICAgIC9eKOCknOCkqOCkteCksOClgHzgpJzgpKhcXC4/fOCkq+CkvOCksOCkteCksOClgHzgpKvgpLDgpLXgpLDgpYB84KSr4KS84KSwXFwuP3zgpK7gpL7gpLDgpY3gpJo/fOCkheCkquCljeCksOCliOCksnzgpIXgpKrgpY3gpLDgpYhcXC4/fOCkruCkiD984KSc4KWC4KSoP3zgpJzgpYHgpLLgpL7gpIh84KSc4KWB4KSyXFwuP3zgpIXgpJfgpLjgpY3gpKR84KSF4KSXXFwuP3zgpLjgpL/gpKTgpK7gpY3gpKzgpLB84KS44KS/4KSk4KSC4KSs4KSwfOCkuOCkv+CkpFxcLj984KSF4KSV4KWN4KSf4KWC4KSs4KSwfOCkheCkleCljeCkn+ClglxcLj984KSo4KS14KSu4KWN4KSs4KSwfOCkqOCkteCkguCkrOCksHzgpKjgpLVcXC4/fOCkpuCkv+CkuOCkruCljeCkrOCksHzgpKbgpL/gpLjgpILgpKzgpLB84KSm4KS/4KS4XFwuPykvaSxcblxuICAgICAgICBtb250aHNTaG9ydFJlZ2V4OlxuICAgICAgICAgICAgL14o4KSc4KSo4KS14KSw4KWAfOCknOCkqFxcLj984KSr4KS84KSw4KS14KSw4KWAfOCkq+CksOCkteCksOClgHzgpKvgpLzgpLBcXC4/fOCkruCkvuCksOCljeCkmj984KSF4KSq4KWN4KSw4KWI4KSyfOCkheCkquCljeCksOCliFxcLj984KSu4KSIP3zgpJzgpYLgpKg/fOCknOClgeCksuCkvuCkiHzgpJzgpYHgpLJcXC4/fOCkheCkl+CkuOCljeCkpHzgpIXgpJdcXC4/fOCkuOCkv+CkpOCkruCljeCkrOCksHzgpLjgpL/gpKTgpILgpKzgpLB84KS44KS/4KSkXFwuP3zgpIXgpJXgpY3gpJ/gpYLgpKzgpLB84KSF4KSV4KWN4KSf4KWCXFwuP3zgpKjgpLXgpK7gpY3gpKzgpLB84KSo4KS14KSC4KSs4KSwfOCkqOCktVxcLj984KSm4KS/4KS44KSu4KWN4KSs4KSwfOCkpuCkv+CkuOCkguCkrOCksHzgpKbgpL/gpLhcXC4/KS9pLFxuXG4gICAgICAgIG1vbnRoc1N0cmljdFJlZ2V4OlxuICAgICAgICAgICAgL14o4KSc4KSo4KS14KSw4KWAP3zgpKvgpLzgpLDgpLXgpLDgpYB84KSr4KSw4KS14KSw4KWAP3zgpK7gpL7gpLDgpY3gpJo/fOCkheCkquCljeCksOCliOCksj984KSu4KSIP3zgpJzgpYLgpKg/fOCknOClgeCksuCkvuCkiD984KSF4KSX4KS44KWN4KSkP3zgpLjgpL/gpKTgpK7gpY3gpKzgpLB84KS44KS/4KSk4KSC4KSs4KSwfOCkuOCkv+CkpD9cXC4/fOCkheCkleCljeCkn+ClguCkrOCksHzgpIXgpJXgpY3gpJ/gpYJcXC4/fOCkqOCkteCkruCljeCkrOCksHzgpKjgpLXgpILgpKzgpLA/fOCkpuCkv+CkuOCkruCljeCkrOCksHzgpKbgpL/gpLjgpILgpKzgpLA/KS9pLFxuXG4gICAgICAgIG1vbnRoc1Nob3J0U3RyaWN0UmVnZXg6XG4gICAgICAgICAgICAvXijgpJzgpKhcXC4/fOCkq+CkvOCksFxcLj984KSu4KS+4KSw4KWN4KSaP3zgpIXgpKrgpY3gpLDgpYhcXC4/fOCkruCkiD984KSc4KWC4KSoP3zgpJzgpYHgpLJcXC4/fOCkheCkl1xcLj984KS44KS/4KSkXFwuP3zgpIXgpJXgpY3gpJ/gpYJcXC4/fOCkqOCktVxcLj984KSm4KS/4KS4XFwuPykvaSxcblxuICAgICAgICBjYWxlbmRhcjoge1xuICAgICAgICAgICAgc2FtZURheTogJ1vgpIbgpJxdIExUJyxcbiAgICAgICAgICAgIG5leHREYXk6ICdb4KSV4KSyXSBMVCcsXG4gICAgICAgICAgICBuZXh0V2VlazogJ2RkZGQsIExUJyxcbiAgICAgICAgICAgIGxhc3REYXk6ICdb4KSV4KSyXSBMVCcsXG4gICAgICAgICAgICBsYXN0V2VlazogJ1vgpKrgpL/gpJvgpLLgpYddIGRkZGQsIExUJyxcbiAgICAgICAgICAgIHNhbWVFbHNlOiAnTCcsXG4gICAgICAgIH0sXG4gICAgICAgIHJlbGF0aXZlVGltZToge1xuICAgICAgICAgICAgZnV0dXJlOiAnJXMg4KSu4KWH4KSCJyxcbiAgICAgICAgICAgIHBhc3Q6ICclcyDgpKrgpLngpLLgpYcnLFxuICAgICAgICAgICAgczogJ+CkleClgeCkmyDgpLngpYAg4KSV4KWN4KS34KSjJyxcbiAgICAgICAgICAgIHNzOiAnJWQg4KS44KWH4KSV4KSC4KShJyxcbiAgICAgICAgICAgIG06ICfgpI/gpJUg4KSu4KS/4KSo4KSfJyxcbiAgICAgICAgICAgIG1tOiAnJWQg4KSu4KS/4KSo4KSfJyxcbiAgICAgICAgICAgIGg6ICfgpI/gpJUg4KSY4KSC4KSf4KS+JyxcbiAgICAgICAgICAgIGhoOiAnJWQg4KSY4KSC4KSf4KWHJyxcbiAgICAgICAgICAgIGQ6ICfgpI/gpJUg4KSm4KS/4KSoJyxcbiAgICAgICAgICAgIGRkOiAnJWQg4KSm4KS/4KSoJyxcbiAgICAgICAgICAgIE06ICfgpI/gpJUg4KSu4KS54KWA4KSo4KWHJyxcbiAgICAgICAgICAgIE1NOiAnJWQg4KSu4KS54KWA4KSo4KWHJyxcbiAgICAgICAgICAgIHk6ICfgpI/gpJUg4KS14KSw4KWN4KS3JyxcbiAgICAgICAgICAgIHl5OiAnJWQg4KS14KSw4KWN4KS3JyxcbiAgICAgICAgfSxcbiAgICAgICAgcHJlcGFyc2U6IGZ1bmN0aW9uIChzdHJpbmcpIHtcbiAgICAgICAgICAgIHJldHVybiBzdHJpbmcucmVwbGFjZSgvW+Clp+ClqOClqeClquClq+ClrOClreClruClr+Clpl0vZywgZnVuY3Rpb24gKG1hdGNoKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG51bWJlck1hcFttYXRjaF07XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSxcbiAgICAgICAgcG9zdGZvcm1hdDogZnVuY3Rpb24gKHN0cmluZykge1xuICAgICAgICAgICAgcmV0dXJuIHN0cmluZy5yZXBsYWNlKC9cXGQvZywgZnVuY3Rpb24gKG1hdGNoKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHN5bWJvbE1hcFttYXRjaF07XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSxcbiAgICAgICAgLy8gSGluZGkgbm90YXRpb24gZm9yIG1lcmlkaWVtcyBhcmUgcXVpdGUgZnV6enkgaW4gcHJhY3RpY2UuIFdoaWxlIHRoZXJlIGV4aXN0c1xuICAgICAgICAvLyBhIHJpZ2lkIG5vdGlvbiBvZiBhICdQYWhhcicgaXQgaXMgbm90IHVzZWQgYXMgcmlnaWRseSBpbiBtb2Rlcm4gSGluZGkuXG4gICAgICAgIG1lcmlkaWVtUGFyc2U6IC/gpLDgpL7gpKR84KS44KWB4KSs4KS5fOCkpuCli+CkquCkueCksHzgpLbgpL7gpK4vLFxuICAgICAgICBtZXJpZGllbUhvdXI6IGZ1bmN0aW9uIChob3VyLCBtZXJpZGllbSkge1xuICAgICAgICAgICAgaWYgKGhvdXIgPT09IDEyKSB7XG4gICAgICAgICAgICAgICAgaG91ciA9IDA7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAobWVyaWRpZW0gPT09ICfgpLDgpL7gpKQnKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGhvdXIgPCA0ID8gaG91ciA6IGhvdXIgKyAxMjtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAobWVyaWRpZW0gPT09ICfgpLjgpYHgpKzgpLknKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGhvdXI7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKG1lcmlkaWVtID09PSAn4KSm4KWL4KSq4KS54KSwJykge1xuICAgICAgICAgICAgICAgIHJldHVybiBob3VyID49IDEwID8gaG91ciA6IGhvdXIgKyAxMjtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAobWVyaWRpZW0gPT09ICfgpLbgpL7gpK4nKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGhvdXIgKyAxMjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgbWVyaWRpZW06IGZ1bmN0aW9uIChob3VyLCBtaW51dGUsIGlzTG93ZXIpIHtcbiAgICAgICAgICAgIGlmIChob3VyIDwgNCkge1xuICAgICAgICAgICAgICAgIHJldHVybiAn4KSw4KS+4KSkJztcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoaG91ciA8IDEwKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuICfgpLjgpYHgpKzgpLknO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChob3VyIDwgMTcpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gJ+CkpuCli+CkquCkueCksCc7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGhvdXIgPCAyMCkge1xuICAgICAgICAgICAgICAgIHJldHVybiAn4KS24KS+4KSuJztcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuICfgpLDgpL7gpKQnO1xuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICB3ZWVrOiB7XG4gICAgICAgICAgICBkb3c6IDAsIC8vIFN1bmRheSBpcyB0aGUgZmlyc3QgZGF5IG9mIHRoZSB3ZWVrLlxuICAgICAgICAgICAgZG95OiA2LCAvLyBUaGUgd2VlayB0aGF0IGNvbnRhaW5zIEphbiA2dGggaXMgdGhlIGZpcnN0IHdlZWsgb2YgdGhlIHllYXIuXG4gICAgICAgIH0sXG4gICAgfSk7XG5cbiAgICByZXR1cm4gaGk7XG5cbn0pKSk7XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///43861\n")},44008:(I,g,t)=>{"use strict";I.exports=t.p+"044eefff5a7a0705a80d.png"},44067:(I,g,t)=>{"use strict";I.exports=t.p+"f6899ecaf9c259abe2a3.png"},44152:(I,g,t)=>{"use strict";I.exports=t.p+"004664a44c4e073f91ca.png"},44184:(I,g,t)=>{"use strict";I.exports=t.p+"614cb4d9c2144d50d98c.png"},44209:(I,g,t)=>{"use strict";I.exports=t.p+"43eba89e503500a257dd.png"},44429:function(__unused_webpack_module,__unused_webpack_exports,__webpack_require__){eval("//! moment.js locale configuration\n//! locale : Bosnian [bs]\n//! author : Nedim Cholich : https://github.com/frontyard\n//! author : Rasid Redzic : https://github.com/rasidre\n//! based on (hr) translation by Bojan Marković\n\n;(function (global, factory) {\n true ? factory(__webpack_require__(95093)) :\n 0\n}(this, (function (moment) { 'use strict';\n\n //! moment.js locale configuration\n\n function processRelativeTime(number, withoutSuffix, key, isFuture) {\n switch (key) {\n case 'm':\n return withoutSuffix\n ? 'jedna minuta'\n : isFuture\n ? 'jednu minutu'\n : 'jedne minute';\n }\n }\n\n function translate(number, withoutSuffix, key) {\n var result = number + ' ';\n switch (key) {\n case 'ss':\n if (number === 1) {\n result += 'sekunda';\n } else if (number === 2 || number === 3 || number === 4) {\n result += 'sekunde';\n } else {\n result += 'sekundi';\n }\n return result;\n case 'mm':\n if (number === 1) {\n result += 'minuta';\n } else if (number === 2 || number === 3 || number === 4) {\n result += 'minute';\n } else {\n result += 'minuta';\n }\n return result;\n case 'h':\n return withoutSuffix ? 'jedan sat' : 'jedan sat';\n case 'hh':\n if (number === 1) {\n result += 'sat';\n } else if (number === 2 || number === 3 || number === 4) {\n result += 'sata';\n } else {\n result += 'sati';\n }\n return result;\n case 'dd':\n if (number === 1) {\n result += 'dan';\n } else {\n result += 'dana';\n }\n return result;\n case 'MM':\n if (number === 1) {\n result += 'mjesec';\n } else if (number === 2 || number === 3 || number === 4) {\n result += 'mjeseca';\n } else {\n result += 'mjeseci';\n }\n return result;\n case 'yy':\n if (number === 1) {\n result += 'godina';\n } else if (number === 2 || number === 3 || number === 4) {\n result += 'godine';\n } else {\n result += 'godina';\n }\n return result;\n }\n }\n\n var bs = moment.defineLocale('bs', {\n months: 'januar_februar_mart_april_maj_juni_juli_august_septembar_oktobar_novembar_decembar'.split(\n '_'\n ),\n monthsShort:\n 'jan._feb._mar._apr._maj._jun._jul._aug._sep._okt._nov._dec.'.split(\n '_'\n ),\n monthsParseExact: true,\n weekdays: 'nedjelja_ponedjeljak_utorak_srijeda_četvrtak_petak_subota'.split(\n '_'\n ),\n weekdaysShort: 'ned._pon._uto._sri._čet._pet._sub.'.split('_'),\n weekdaysMin: 'ne_po_ut_sr_če_pe_su'.split('_'),\n weekdaysParseExact: true,\n longDateFormat: {\n LT: 'H:mm',\n LTS: 'H:mm:ss',\n L: 'DD.MM.YYYY',\n LL: 'D. MMMM YYYY',\n LLL: 'D. MMMM YYYY H:mm',\n LLLL: 'dddd, D. MMMM YYYY H:mm',\n },\n calendar: {\n sameDay: '[danas u] LT',\n nextDay: '[sutra u] LT',\n nextWeek: function () {\n switch (this.day()) {\n case 0:\n return '[u] [nedjelju] [u] LT';\n case 3:\n return '[u] [srijedu] [u] LT';\n case 6:\n return '[u] [subotu] [u] LT';\n case 1:\n case 2:\n case 4:\n case 5:\n return '[u] dddd [u] LT';\n }\n },\n lastDay: '[jučer u] LT',\n lastWeek: function () {\n switch (this.day()) {\n case 0:\n case 3:\n return '[prošlu] dddd [u] LT';\n case 6:\n return '[prošle] [subote] [u] LT';\n case 1:\n case 2:\n case 4:\n case 5:\n return '[prošli] dddd [u] LT';\n }\n },\n sameElse: 'L',\n },\n relativeTime: {\n future: 'za %s',\n past: 'prije %s',\n s: 'par sekundi',\n ss: translate,\n m: processRelativeTime,\n mm: translate,\n h: translate,\n hh: translate,\n d: 'dan',\n dd: translate,\n M: 'mjesec',\n MM: translate,\n y: 'godinu',\n yy: translate,\n },\n dayOfMonthOrdinalParse: /\\d{1,2}\\./,\n ordinal: '%d.',\n week: {\n dow: 1, // Monday is the first day of the week.\n doy: 7, // The week that contains Jan 7th is the first week of the year.\n },\n });\n\n return bs;\n\n})));\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNDQ0MjkuanMiLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9pdGctbmV4dGdlbi1mcm9udGVuZC8uL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL2JzLmpzPzI1NTQiXSwic291cmNlc0NvbnRlbnQiOlsiLy8hIG1vbWVudC5qcyBsb2NhbGUgY29uZmlndXJhdGlvblxuLy8hIGxvY2FsZSA6IEJvc25pYW4gW2JzXVxuLy8hIGF1dGhvciA6IE5lZGltIENob2xpY2ggOiBodHRwczovL2dpdGh1Yi5jb20vZnJvbnR5YXJkXG4vLyEgYXV0aG9yIDogUmFzaWQgUmVkemljIDogaHR0cHM6Ly9naXRodWIuY29tL3Jhc2lkcmVcbi8vISBiYXNlZCBvbiAoaHIpIHRyYW5zbGF0aW9uIGJ5IEJvamFuIE1hcmtvdmnEh1xuXG47KGZ1bmN0aW9uIChnbG9iYWwsIGZhY3RvcnkpIHtcbiAgIHR5cGVvZiBleHBvcnRzID09PSAnb2JqZWN0JyAmJiB0eXBlb2YgbW9kdWxlICE9PSAndW5kZWZpbmVkJ1xuICAgICAgICYmIHR5cGVvZiByZXF1aXJlID09PSAnZnVuY3Rpb24nID8gZmFjdG9yeShyZXF1aXJlKCcuLi9tb21lbnQnKSkgOlxuICAgdHlwZW9mIGRlZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiBkZWZpbmUuYW1kID8gZGVmaW5lKFsnLi4vbW9tZW50J10sIGZhY3RvcnkpIDpcbiAgIGZhY3RvcnkoZ2xvYmFsLm1vbWVudClcbn0odGhpcywgKGZ1bmN0aW9uIChtb21lbnQpIHsgJ3VzZSBzdHJpY3QnO1xuXG4gICAgLy8hIG1vbWVudC5qcyBsb2NhbGUgY29uZmlndXJhdGlvblxuXG4gICAgZnVuY3Rpb24gcHJvY2Vzc1JlbGF0aXZlVGltZShudW1iZXIsIHdpdGhvdXRTdWZmaXgsIGtleSwgaXNGdXR1cmUpIHtcbiAgICAgICAgc3dpdGNoIChrZXkpIHtcbiAgICAgICAgICAgIGNhc2UgJ20nOlxuICAgICAgICAgICAgICAgIHJldHVybiB3aXRob3V0U3VmZml4XG4gICAgICAgICAgICAgICAgICAgID8gJ2plZG5hIG1pbnV0YSdcbiAgICAgICAgICAgICAgICAgICAgOiBpc0Z1dHVyZVxuICAgICAgICAgICAgICAgICAgICAgID8gJ2plZG51IG1pbnV0dSdcbiAgICAgICAgICAgICAgICAgICAgICA6ICdqZWRuZSBtaW51dGUnO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gdHJhbnNsYXRlKG51bWJlciwgd2l0aG91dFN1ZmZpeCwga2V5KSB7XG4gICAgICAgIHZhciByZXN1bHQgPSBudW1iZXIgKyAnICc7XG4gICAgICAgIHN3aXRjaCAoa2V5KSB7XG4gICAgICAgICAgICBjYXNlICdzcyc6XG4gICAgICAgICAgICAgICAgaWYgKG51bWJlciA9PT0gMSkge1xuICAgICAgICAgICAgICAgICAgICByZXN1bHQgKz0gJ3Nla3VuZGEnO1xuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAobnVtYmVyID09PSAyIHx8IG51bWJlciA9PT0gMyB8fCBudW1iZXIgPT09IDQpIHtcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0ICs9ICdzZWt1bmRlJztcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICByZXN1bHQgKz0gJ3Nla3VuZGknO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgICAgICAgY2FzZSAnbW0nOlxuICAgICAgICAgICAgICAgIGlmIChudW1iZXIgPT09IDEpIHtcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0ICs9ICdtaW51dGEnO1xuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAobnVtYmVyID09PSAyIHx8IG51bWJlciA9PT0gMyB8fCBudW1iZXIgPT09IDQpIHtcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0ICs9ICdtaW51dGUnO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdCArPSAnbWludXRhJztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICAgICAgICAgIGNhc2UgJ2gnOlxuICAgICAgICAgICAgICAgIHJldHVybiB3aXRob3V0U3VmZml4ID8gJ2plZGFuIHNhdCcgOiAnamVkYW4gc2F0JztcbiAgICAgICAgICAgIGNhc2UgJ2hoJzpcbiAgICAgICAgICAgICAgICBpZiAobnVtYmVyID09PSAxKSB7XG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdCArPSAnc2F0JztcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKG51bWJlciA9PT0gMiB8fCBudW1iZXIgPT09IDMgfHwgbnVtYmVyID09PSA0KSB7XG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdCArPSAnc2F0YSc7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0ICs9ICdzYXRpJztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICAgICAgICAgIGNhc2UgJ2RkJzpcbiAgICAgICAgICAgICAgICBpZiAobnVtYmVyID09PSAxKSB7XG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdCArPSAnZGFuJztcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICByZXN1bHQgKz0gJ2RhbmEnO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgICAgICAgY2FzZSAnTU0nOlxuICAgICAgICAgICAgICAgIGlmIChudW1iZXIgPT09IDEpIHtcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0ICs9ICdtamVzZWMnO1xuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAobnVtYmVyID09PSAyIHx8IG51bWJlciA9PT0gMyB8fCBudW1iZXIgPT09IDQpIHtcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0ICs9ICdtamVzZWNhJztcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICByZXN1bHQgKz0gJ21qZXNlY2knO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgICAgICAgY2FzZSAneXknOlxuICAgICAgICAgICAgICAgIGlmIChudW1iZXIgPT09IDEpIHtcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0ICs9ICdnb2RpbmEnO1xuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAobnVtYmVyID09PSAyIHx8IG51bWJlciA9PT0gMyB8fCBudW1iZXIgPT09IDQpIHtcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0ICs9ICdnb2RpbmUnO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdCArPSAnZ29kaW5hJztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHZhciBicyA9IG1vbWVudC5kZWZpbmVMb2NhbGUoJ2JzJywge1xuICAgICAgICBtb250aHM6ICdqYW51YXJfZmVicnVhcl9tYXJ0X2FwcmlsX21hal9qdW5pX2p1bGlfYXVndXN0X3NlcHRlbWJhcl9va3RvYmFyX25vdmVtYmFyX2RlY2VtYmFyJy5zcGxpdChcbiAgICAgICAgICAgICdfJ1xuICAgICAgICApLFxuICAgICAgICBtb250aHNTaG9ydDpcbiAgICAgICAgICAgICdqYW4uX2ZlYi5fbWFyLl9hcHIuX21hai5fanVuLl9qdWwuX2F1Zy5fc2VwLl9va3QuX25vdi5fZGVjLicuc3BsaXQoXG4gICAgICAgICAgICAgICAgJ18nXG4gICAgICAgICAgICApLFxuICAgICAgICBtb250aHNQYXJzZUV4YWN0OiB0cnVlLFxuICAgICAgICB3ZWVrZGF5czogJ25lZGplbGphX3BvbmVkamVsamFrX3V0b3Jha19zcmlqZWRhX8SNZXR2cnRha19wZXRha19zdWJvdGEnLnNwbGl0KFxuICAgICAgICAgICAgJ18nXG4gICAgICAgICksXG4gICAgICAgIHdlZWtkYXlzU2hvcnQ6ICduZWQuX3Bvbi5fdXRvLl9zcmkuX8SNZXQuX3BldC5fc3ViLicuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXNNaW46ICduZV9wb191dF9zcl/EjWVfcGVfc3UnLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzUGFyc2VFeGFjdDogdHJ1ZSxcbiAgICAgICAgbG9uZ0RhdGVGb3JtYXQ6IHtcbiAgICAgICAgICAgIExUOiAnSDptbScsXG4gICAgICAgICAgICBMVFM6ICdIOm1tOnNzJyxcbiAgICAgICAgICAgIEw6ICdERC5NTS5ZWVlZJyxcbiAgICAgICAgICAgIExMOiAnRC4gTU1NTSBZWVlZJyxcbiAgICAgICAgICAgIExMTDogJ0QuIE1NTU0gWVlZWSBIOm1tJyxcbiAgICAgICAgICAgIExMTEw6ICdkZGRkLCBELiBNTU1NIFlZWVkgSDptbScsXG4gICAgICAgIH0sXG4gICAgICAgIGNhbGVuZGFyOiB7XG4gICAgICAgICAgICBzYW1lRGF5OiAnW2RhbmFzIHVdIExUJyxcbiAgICAgICAgICAgIG5leHREYXk6ICdbc3V0cmEgdV0gTFQnLFxuICAgICAgICAgICAgbmV4dFdlZWs6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICBzd2l0Y2ggKHRoaXMuZGF5KCkpIHtcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAwOlxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICdbdV0gW25lZGplbGp1XSBbdV0gTFQnO1xuICAgICAgICAgICAgICAgICAgICBjYXNlIDM6XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gJ1t1XSBbc3JpamVkdV0gW3VdIExUJztcbiAgICAgICAgICAgICAgICAgICAgY2FzZSA2OlxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICdbdV0gW3N1Ym90dV0gW3VdIExUJztcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAxOlxuICAgICAgICAgICAgICAgICAgICBjYXNlIDI6XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgNDpcbiAgICAgICAgICAgICAgICAgICAgY2FzZSA1OlxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICdbdV0gZGRkZCBbdV0gTFQnO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBsYXN0RGF5OiAnW2p1xI1lciB1XSBMVCcsXG4gICAgICAgICAgICBsYXN0V2VlazogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIHN3aXRjaCAodGhpcy5kYXkoKSkge1xuICAgICAgICAgICAgICAgICAgICBjYXNlIDA6XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgMzpcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAnW3Byb8WhbHVdIGRkZGQgW3VdIExUJztcbiAgICAgICAgICAgICAgICAgICAgY2FzZSA2OlxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICdbcHJvxaFsZV0gW3N1Ym90ZV0gW3VdIExUJztcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAxOlxuICAgICAgICAgICAgICAgICAgICBjYXNlIDI6XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgNDpcbiAgICAgICAgICAgICAgICAgICAgY2FzZSA1OlxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICdbcHJvxaFsaV0gZGRkZCBbdV0gTFQnO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBzYW1lRWxzZTogJ0wnLFxuICAgICAgICB9LFxuICAgICAgICByZWxhdGl2ZVRpbWU6IHtcbiAgICAgICAgICAgIGZ1dHVyZTogJ3phICVzJyxcbiAgICAgICAgICAgIHBhc3Q6ICdwcmlqZSAlcycsXG4gICAgICAgICAgICBzOiAncGFyIHNla3VuZGknLFxuICAgICAgICAgICAgc3M6IHRyYW5zbGF0ZSxcbiAgICAgICAgICAgIG06IHByb2Nlc3NSZWxhdGl2ZVRpbWUsXG4gICAgICAgICAgICBtbTogdHJhbnNsYXRlLFxuICAgICAgICAgICAgaDogdHJhbnNsYXRlLFxuICAgICAgICAgICAgaGg6IHRyYW5zbGF0ZSxcbiAgICAgICAgICAgIGQ6ICdkYW4nLFxuICAgICAgICAgICAgZGQ6IHRyYW5zbGF0ZSxcbiAgICAgICAgICAgIE06ICdtamVzZWMnLFxuICAgICAgICAgICAgTU06IHRyYW5zbGF0ZSxcbiAgICAgICAgICAgIHk6ICdnb2RpbnUnLFxuICAgICAgICAgICAgeXk6IHRyYW5zbGF0ZSxcbiAgICAgICAgfSxcbiAgICAgICAgZGF5T2ZNb250aE9yZGluYWxQYXJzZTogL1xcZHsxLDJ9XFwuLyxcbiAgICAgICAgb3JkaW5hbDogJyVkLicsXG4gICAgICAgIHdlZWs6IHtcbiAgICAgICAgICAgIGRvdzogMSwgLy8gTW9uZGF5IGlzIHRoZSBmaXJzdCBkYXkgb2YgdGhlIHdlZWsuXG4gICAgICAgICAgICBkb3k6IDcsIC8vIFRoZSB3ZWVrIHRoYXQgY29udGFpbnMgSmFuIDd0aCBpcyB0aGUgZmlyc3Qgd2VlayBvZiB0aGUgeWVhci5cbiAgICAgICAgfSxcbiAgICB9KTtcblxuICAgIHJldHVybiBicztcblxufSkpKTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///44429\n")},44726:(module,__unused_webpack_exports,__webpack_require__)=>{"use strict";eval("/**\n * Copyright (c) 2016-2025, The Cytoscape Consortium.\n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy of\n * this software and associated documentation files (the “Software”), to deal in\n * the Software without restriction, including without limitation the rights to\n * use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies\n * of the Software, and to permit persons to whom the Software is furnished to do\n * so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in all\n * copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED “AS IS”, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n * SOFTWARE.\n */\n\n\n\nfunction _arrayLikeToArray(r, a) {\n (null == a || a > r.length) && (a = r.length);\n for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e];\n return n;\n}\nfunction _arrayWithHoles(r) {\n if (Array.isArray(r)) return r;\n}\nfunction _arrayWithoutHoles(r) {\n if (Array.isArray(r)) return _arrayLikeToArray(r);\n}\nfunction _classCallCheck(a, n) {\n if (!(a instanceof n)) throw new TypeError(\"Cannot call a class as a function\");\n}\nfunction _defineProperties(e, r) {\n for (var t = 0; t < r.length; t++) {\n var o = r[t];\n o.enumerable = o.enumerable || false, o.configurable = true, \"value\" in o && (o.writable = true), Object.defineProperty(e, _toPropertyKey(o.key), o);\n }\n}\nfunction _createClass(e, r, t) {\n return r && _defineProperties(e.prototype, r), Object.defineProperty(e, \"prototype\", {\n writable: false\n }), e;\n}\nfunction _createForOfIteratorHelper(r, e) {\n var t = \"undefined\" != typeof Symbol && r[Symbol.iterator] || r[\"@@iterator\"];\n if (!t) {\n if (Array.isArray(r) || (t = _unsupportedIterableToArray(r)) || e) {\n t && (r = t);\n var n = 0,\n F = function () {};\n return {\n s: F,\n n: function () {\n return n >= r.length ? {\n done: true\n } : {\n done: false,\n value: r[n++]\n };\n },\n e: function (r) {\n throw r;\n },\n f: F\n };\n }\n throw new TypeError(\"Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\");\n }\n var o,\n a = true,\n u = false;\n return {\n s: function () {\n t = t.call(r);\n },\n n: function () {\n var r = t.next();\n return a = r.done, r;\n },\n e: function (r) {\n u = true, o = r;\n },\n f: function () {\n try {\n a || null == t.return || t.return();\n } finally {\n if (u) throw o;\n }\n }\n };\n}\nfunction _defineProperty$1(e, r, t) {\n return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, {\n value: t,\n enumerable: true,\n configurable: true,\n writable: true\n }) : e[r] = t, e;\n}\nfunction _iterableToArray(r) {\n if (\"undefined\" != typeof Symbol && null != r[Symbol.iterator] || null != r[\"@@iterator\"]) return Array.from(r);\n}\nfunction _iterableToArrayLimit(r, l) {\n var t = null == r ? null : \"undefined\" != typeof Symbol && r[Symbol.iterator] || r[\"@@iterator\"];\n if (null != t) {\n var e,\n n,\n i,\n u,\n a = [],\n f = true,\n o = false;\n try {\n if (i = (t = t.call(r)).next, 0 === l) {\n if (Object(t) !== t) return;\n f = !1;\n } else for (; !(f = (e = i.call(t)).done) && (a.push(e.value), a.length !== l); f = !0);\n } catch (r) {\n o = true, n = r;\n } finally {\n try {\n if (!f && null != t.return && (u = t.return(), Object(u) !== u)) return;\n } finally {\n if (o) throw n;\n }\n }\n return a;\n }\n}\nfunction _nonIterableRest() {\n throw new TypeError(\"Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\");\n}\nfunction _nonIterableSpread() {\n throw new TypeError(\"Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\");\n}\nfunction _slicedToArray(r, e) {\n return _arrayWithHoles(r) || _iterableToArrayLimit(r, e) || _unsupportedIterableToArray(r, e) || _nonIterableRest();\n}\nfunction _toConsumableArray(r) {\n return _arrayWithoutHoles(r) || _iterableToArray(r) || _unsupportedIterableToArray(r) || _nonIterableSpread();\n}\nfunction _toPrimitive(t, r) {\n if (\"object\" != typeof t || !t) return t;\n var e = t[Symbol.toPrimitive];\n if (undefined !== e) {\n var i = e.call(t, r);\n if (\"object\" != typeof i) return i;\n throw new TypeError(\"@@toPrimitive must return a primitive value.\");\n }\n return (String )(t);\n}\nfunction _toPropertyKey(t) {\n var i = _toPrimitive(t, \"string\");\n return \"symbol\" == typeof i ? i : i + \"\";\n}\nfunction _typeof(o) {\n \"@babel/helpers - typeof\";\n\n return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (o) {\n return typeof o;\n } : function (o) {\n return o && \"function\" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? \"symbol\" : typeof o;\n }, _typeof(o);\n}\nfunction _unsupportedIterableToArray(r, a) {\n if (r) {\n if (\"string\" == typeof r) return _arrayLikeToArray(r, a);\n var t = {}.toString.call(r).slice(8, -1);\n return \"Object\" === t && r.constructor && (t = r.constructor.name), \"Map\" === t || \"Set\" === t ? Array.from(r) : \"Arguments\" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray(r, a) : undefined;\n }\n}\n\nvar _window = typeof window === 'undefined' ? null : window; // eslint-disable-line no-undef\n\nvar navigator = _window ? _window.navigator : null;\n_window ? _window.document : null;\nvar typeofstr = _typeof('');\nvar typeofobj = _typeof({});\nvar typeoffn = _typeof(function () {});\nvar typeofhtmlele = typeof HTMLElement === \"undefined\" ? \"undefined\" : _typeof(HTMLElement);\nvar instanceStr = function instanceStr(obj) {\n return obj && obj.instanceString && fn$6(obj.instanceString) ? obj.instanceString() : null;\n};\n\nvar string = function string(obj) {\n return obj != null && _typeof(obj) == typeofstr;\n};\nvar fn$6 = function fn(obj) {\n return obj != null && _typeof(obj) === typeoffn;\n};\nvar array = function array(obj) {\n return !elementOrCollection(obj) && (Array.isArray ? Array.isArray(obj) : obj != null && obj instanceof Array);\n};\nvar plainObject = function plainObject(obj) {\n return obj != null && _typeof(obj) === typeofobj && !array(obj) && obj.constructor === Object;\n};\nvar object = function object(obj) {\n return obj != null && _typeof(obj) === typeofobj;\n};\nvar number$1 = function number(obj) {\n return obj != null && _typeof(obj) === _typeof(1) && !isNaN(obj);\n};\nvar integer = function integer(obj) {\n return number$1(obj) && Math.floor(obj) === obj;\n};\nvar htmlElement = function htmlElement(obj) {\n if ('undefined' === typeofhtmlele) {\n return undefined;\n } else {\n return null != obj && obj instanceof HTMLElement;\n }\n};\nvar elementOrCollection = function elementOrCollection(obj) {\n return element(obj) || collection(obj);\n};\nvar element = function element(obj) {\n return instanceStr(obj) === 'collection' && obj._private.single;\n};\nvar collection = function collection(obj) {\n return instanceStr(obj) === 'collection' && !obj._private.single;\n};\nvar core = function core(obj) {\n return instanceStr(obj) === 'core';\n};\nvar stylesheet = function stylesheet(obj) {\n return instanceStr(obj) === 'stylesheet';\n};\nvar event = function event(obj) {\n return instanceStr(obj) === 'event';\n};\nvar emptyString = function emptyString(obj) {\n if (obj === undefined || obj === null) {\n // null is empty\n return true;\n } else if (obj === '' || obj.match(/^\\s+$/)) {\n return true; // empty string is empty\n }\n return false; // otherwise, we don't know what we've got\n};\nvar domElement = function domElement(obj) {\n if (typeof HTMLElement === 'undefined') {\n return false; // we're not in a browser so it doesn't matter\n } else {\n return obj instanceof HTMLElement;\n }\n};\nvar boundingBox = function boundingBox(obj) {\n return plainObject(obj) && number$1(obj.x1) && number$1(obj.x2) && number$1(obj.y1) && number$1(obj.y2);\n};\nvar promise = function promise(obj) {\n return object(obj) && fn$6(obj.then);\n};\nvar ms = function ms() {\n return navigator && navigator.userAgent.match(/msie|trident|edge/i);\n}; // probably a better way to detect this...\n\nvar memoize = function memoize(fn, keyFn) {\n if (!keyFn) {\n keyFn = function keyFn() {\n if (arguments.length === 1) {\n return arguments[0];\n } else if (arguments.length === 0) {\n return 'undefined';\n }\n var args = [];\n for (var i = 0; i < arguments.length; i++) {\n args.push(arguments[i]);\n }\n return args.join('$');\n };\n }\n var _memoizedFn = function memoizedFn() {\n var self = this;\n var args = arguments;\n var ret;\n var k = keyFn.apply(self, args);\n var cache = _memoizedFn.cache;\n if (!(ret = cache[k])) {\n ret = cache[k] = fn.apply(self, args);\n }\n return ret;\n };\n _memoizedFn.cache = {};\n return _memoizedFn;\n};\n\nvar camel2dash = memoize(function (str) {\n return str.replace(/([A-Z])/g, function (v) {\n return '-' + v.toLowerCase();\n });\n});\nvar dash2camel = memoize(function (str) {\n return str.replace(/(-\\w)/g, function (v) {\n return v[1].toUpperCase();\n });\n});\nvar prependCamel = memoize(function (prefix, str) {\n return prefix + str[0].toUpperCase() + str.substring(1);\n}, function (prefix, str) {\n return prefix + '$' + str;\n});\nvar capitalize = function capitalize(str) {\n if (emptyString(str)) {\n return str;\n }\n return str.charAt(0).toUpperCase() + str.substring(1);\n};\n\nvar number = '(?:[-+]?(?:(?:\\\\d+|\\\\d*\\\\.\\\\d+)(?:[Ee][+-]?\\\\d+)?))';\nvar rgba = 'rgb[a]?\\\\((' + number + '[%]?)\\\\s*,\\\\s*(' + number + '[%]?)\\\\s*,\\\\s*(' + number + '[%]?)(?:\\\\s*,\\\\s*(' + number + '))?\\\\)';\nvar rgbaNoBackRefs = 'rgb[a]?\\\\((?:' + number + '[%]?)\\\\s*,\\\\s*(?:' + number + '[%]?)\\\\s*,\\\\s*(?:' + number + '[%]?)(?:\\\\s*,\\\\s*(?:' + number + '))?\\\\)';\nvar hsla = 'hsl[a]?\\\\((' + number + ')\\\\s*,\\\\s*(' + number + '[%])\\\\s*,\\\\s*(' + number + '[%])(?:\\\\s*,\\\\s*(' + number + '))?\\\\)';\nvar hslaNoBackRefs = 'hsl[a]?\\\\((?:' + number + ')\\\\s*,\\\\s*(?:' + number + '[%])\\\\s*,\\\\s*(?:' + number + '[%])(?:\\\\s*,\\\\s*(?:' + number + '))?\\\\)';\nvar hex3 = '\\\\#[0-9a-fA-F]{3}';\nvar hex6 = '\\\\#[0-9a-fA-F]{6}';\n\nvar ascending = function ascending(a, b) {\n if (a < b) {\n return -1;\n } else if (a > b) {\n return 1;\n } else {\n return 0;\n }\n};\nvar descending = function descending(a, b) {\n return -1 * ascending(a, b);\n};\n\nvar extend = Object.assign != null ? Object.assign.bind(Object) : function (tgt) {\n var args = arguments;\n for (var i = 1; i < args.length; i++) {\n var obj = args[i];\n if (obj == null) {\n continue;\n }\n var keys = Object.keys(obj);\n for (var j = 0; j < keys.length; j++) {\n var k = keys[j];\n tgt[k] = obj[k];\n }\n }\n return tgt;\n};\n\n// get [r, g, b] from #abc or #aabbcc\nvar hex2tuple = function hex2tuple(hex) {\n if (!(hex.length === 4 || hex.length === 7) || hex[0] !== '#') {\n return;\n }\n var shortHex = hex.length === 4;\n var r, g, b;\n var base = 16;\n if (shortHex) {\n r = parseInt(hex[1] + hex[1], base);\n g = parseInt(hex[2] + hex[2], base);\n b = parseInt(hex[3] + hex[3], base);\n } else {\n r = parseInt(hex[1] + hex[2], base);\n g = parseInt(hex[3] + hex[4], base);\n b = parseInt(hex[5] + hex[6], base);\n }\n return [r, g, b];\n};\n\n// get [r, g, b, a] from hsl(0, 0, 0) or hsla(0, 0, 0, 0)\nvar hsl2tuple = function hsl2tuple(hsl) {\n var ret;\n var h, s, l, a, r, g, b;\n function hue2rgb(p, q, t) {\n if (t < 0) t += 1;\n if (t > 1) t -= 1;\n if (t < 1 / 6) return p + (q - p) * 6 * t;\n if (t < 1 / 2) return q;\n if (t < 2 / 3) return p + (q - p) * (2 / 3 - t) * 6;\n return p;\n }\n var m = new RegExp('^' + hsla + '$').exec(hsl);\n if (m) {\n // get hue\n h = parseInt(m[1]);\n if (h < 0) {\n h = (360 - -1 * h % 360) % 360;\n } else if (h > 360) {\n h = h % 360;\n }\n h /= 360; // normalise on [0, 1]\n\n s = parseFloat(m[2]);\n if (s < 0 || s > 100) {\n return;\n } // saturation is [0, 100]\n s = s / 100; // normalise on [0, 1]\n\n l = parseFloat(m[3]);\n if (l < 0 || l > 100) {\n return;\n } // lightness is [0, 100]\n l = l / 100; // normalise on [0, 1]\n\n a = m[4];\n if (a !== undefined) {\n a = parseFloat(a);\n if (a < 0 || a > 1) {\n return;\n } // alpha is [0, 1]\n }\n\n // now, convert to rgb\n // code from http://mjijackson.com/2008/02/rgb-to-hsl-and-rgb-to-hsv-color-model-conversion-algorithms-in-javascript\n if (s === 0) {\n r = g = b = Math.round(l * 255); // achromatic\n } else {\n var q = l < 0.5 ? l * (1 + s) : l + s - l * s;\n var p = 2 * l - q;\n r = Math.round(255 * hue2rgb(p, q, h + 1 / 3));\n g = Math.round(255 * hue2rgb(p, q, h));\n b = Math.round(255 * hue2rgb(p, q, h - 1 / 3));\n }\n ret = [r, g, b, a];\n }\n return ret;\n};\n\n// get [r, g, b, a] from rgb(0, 0, 0) or rgba(0, 0, 0, 0)\nvar rgb2tuple = function rgb2tuple(rgb) {\n var ret;\n var m = new RegExp('^' + rgba + '$').exec(rgb);\n if (m) {\n ret = [];\n var isPct = [];\n for (var i = 1; i <= 3; i++) {\n var channel = m[i];\n if (channel[channel.length - 1] === '%') {\n isPct[i] = true;\n }\n channel = parseFloat(channel);\n if (isPct[i]) {\n channel = channel / 100 * 255; // normalise to [0, 255]\n }\n if (channel < 0 || channel > 255) {\n return;\n } // invalid channel value\n\n ret.push(Math.floor(channel));\n }\n var atLeastOneIsPct = isPct[1] || isPct[2] || isPct[3];\n var allArePct = isPct[1] && isPct[2] && isPct[3];\n if (atLeastOneIsPct && !allArePct) {\n return;\n } // must all be percent values if one is\n\n var alpha = m[4];\n if (alpha !== undefined) {\n alpha = parseFloat(alpha);\n if (alpha < 0 || alpha > 1) {\n return;\n } // invalid alpha value\n\n ret.push(alpha);\n }\n }\n return ret;\n};\nvar colorname2tuple = function colorname2tuple(color) {\n return colors[color.toLowerCase()];\n};\nvar color2tuple = function color2tuple(color) {\n return (array(color) ? color : null) || colorname2tuple(color) || hex2tuple(color) || rgb2tuple(color) || hsl2tuple(color);\n};\nvar colors = {\n // special colour names\n transparent: [0, 0, 0, 0],\n // NB alpha === 0\n\n // regular colours\n aliceblue: [240, 248, 255],\n antiquewhite: [250, 235, 215],\n aqua: [0, 255, 255],\n aquamarine: [127, 255, 212],\n azure: [240, 255, 255],\n beige: [245, 245, 220],\n bisque: [255, 228, 196],\n black: [0, 0, 0],\n blanchedalmond: [255, 235, 205],\n blue: [0, 0, 255],\n blueviolet: [138, 43, 226],\n brown: [165, 42, 42],\n burlywood: [222, 184, 135],\n cadetblue: [95, 158, 160],\n chartreuse: [127, 255, 0],\n chocolate: [210, 105, 30],\n coral: [255, 127, 80],\n cornflowerblue: [100, 149, 237],\n cornsilk: [255, 248, 220],\n crimson: [220, 20, 60],\n cyan: [0, 255, 255],\n darkblue: [0, 0, 139],\n darkcyan: [0, 139, 139],\n darkgoldenrod: [184, 134, 11],\n darkgray: [169, 169, 169],\n darkgreen: [0, 100, 0],\n darkgrey: [169, 169, 169],\n darkkhaki: [189, 183, 107],\n darkmagenta: [139, 0, 139],\n darkolivegreen: [85, 107, 47],\n darkorange: [255, 140, 0],\n darkorchid: [153, 50, 204],\n darkred: [139, 0, 0],\n darksalmon: [233, 150, 122],\n darkseagreen: [143, 188, 143],\n darkslateblue: [72, 61, 139],\n darkslategray: [47, 79, 79],\n darkslategrey: [47, 79, 79],\n darkturquoise: [0, 206, 209],\n darkviolet: [148, 0, 211],\n deeppink: [255, 20, 147],\n deepskyblue: [0, 191, 255],\n dimgray: [105, 105, 105],\n dimgrey: [105, 105, 105],\n dodgerblue: [30, 144, 255],\n firebrick: [178, 34, 34],\n floralwhite: [255, 250, 240],\n forestgreen: [34, 139, 34],\n fuchsia: [255, 0, 255],\n gainsboro: [220, 220, 220],\n ghostwhite: [248, 248, 255],\n gold: [255, 215, 0],\n goldenrod: [218, 165, 32],\n gray: [128, 128, 128],\n grey: [128, 128, 128],\n green: [0, 128, 0],\n greenyellow: [173, 255, 47],\n honeydew: [240, 255, 240],\n hotpink: [255, 105, 180],\n indianred: [205, 92, 92],\n indigo: [75, 0, 130],\n ivory: [255, 255, 240],\n khaki: [240, 230, 140],\n lavender: [230, 230, 250],\n lavenderblush: [255, 240, 245],\n lawngreen: [124, 252, 0],\n lemonchiffon: [255, 250, 205],\n lightblue: [173, 216, 230],\n lightcoral: [240, 128, 128],\n lightcyan: [224, 255, 255],\n lightgoldenrodyellow: [250, 250, 210],\n lightgray: [211, 211, 211],\n lightgreen: [144, 238, 144],\n lightgrey: [211, 211, 211],\n lightpink: [255, 182, 193],\n lightsalmon: [255, 160, 122],\n lightseagreen: [32, 178, 170],\n lightskyblue: [135, 206, 250],\n lightslategray: [119, 136, 153],\n lightslategrey: [119, 136, 153],\n lightsteelblue: [176, 196, 222],\n lightyellow: [255, 255, 224],\n lime: [0, 255, 0],\n limegreen: [50, 205, 50],\n linen: [250, 240, 230],\n magenta: [255, 0, 255],\n maroon: [128, 0, 0],\n mediumaquamarine: [102, 205, 170],\n mediumblue: [0, 0, 205],\n mediumorchid: [186, 85, 211],\n mediumpurple: [147, 112, 219],\n mediumseagreen: [60, 179, 113],\n mediumslateblue: [123, 104, 238],\n mediumspringgreen: [0, 250, 154],\n mediumturquoise: [72, 209, 204],\n mediumvioletred: [199, 21, 133],\n midnightblue: [25, 25, 112],\n mintcream: [245, 255, 250],\n mistyrose: [255, 228, 225],\n moccasin: [255, 228, 181],\n navajowhite: [255, 222, 173],\n navy: [0, 0, 128],\n oldlace: [253, 245, 230],\n olive: [128, 128, 0],\n olivedrab: [107, 142, 35],\n orange: [255, 165, 0],\n orangered: [255, 69, 0],\n orchid: [218, 112, 214],\n palegoldenrod: [238, 232, 170],\n palegreen: [152, 251, 152],\n paleturquoise: [175, 238, 238],\n palevioletred: [219, 112, 147],\n papayawhip: [255, 239, 213],\n peachpuff: [255, 218, 185],\n peru: [205, 133, 63],\n pink: [255, 192, 203],\n plum: [221, 160, 221],\n powderblue: [176, 224, 230],\n purple: [128, 0, 128],\n red: [255, 0, 0],\n rosybrown: [188, 143, 143],\n royalblue: [65, 105, 225],\n saddlebrown: [139, 69, 19],\n salmon: [250, 128, 114],\n sandybrown: [244, 164, 96],\n seagreen: [46, 139, 87],\n seashell: [255, 245, 238],\n sienna: [160, 82, 45],\n silver: [192, 192, 192],\n skyblue: [135, 206, 235],\n slateblue: [106, 90, 205],\n slategray: [112, 128, 144],\n slategrey: [112, 128, 144],\n snow: [255, 250, 250],\n springgreen: [0, 255, 127],\n steelblue: [70, 130, 180],\n tan: [210, 180, 140],\n teal: [0, 128, 128],\n thistle: [216, 191, 216],\n tomato: [255, 99, 71],\n turquoise: [64, 224, 208],\n violet: [238, 130, 238],\n wheat: [245, 222, 179],\n white: [255, 255, 255],\n whitesmoke: [245, 245, 245],\n yellow: [255, 255, 0],\n yellowgreen: [154, 205, 50]\n};\n\n// sets the value in a map (map may not be built)\nvar setMap = function setMap(options) {\n var obj = options.map;\n var keys = options.keys;\n var l = keys.length;\n for (var i = 0; i < l; i++) {\n var key = keys[i];\n if (plainObject(key)) {\n throw Error('Tried to set map with object key');\n }\n if (i < keys.length - 1) {\n // extend the map if necessary\n if (obj[key] == null) {\n obj[key] = {};\n }\n obj = obj[key];\n } else {\n // set the value\n obj[key] = options.value;\n }\n }\n};\n\n// gets the value in a map even if it's not built in places\nvar getMap = function getMap(options) {\n var obj = options.map;\n var keys = options.keys;\n var l = keys.length;\n for (var i = 0; i < l; i++) {\n var key = keys[i];\n if (plainObject(key)) {\n throw Error('Tried to get map with object key');\n }\n obj = obj[key];\n if (obj == null) {\n return obj;\n }\n }\n return obj;\n};\n\nvar commonjsGlobal = typeof globalThis !== 'undefined' ? globalThis : typeof window !== 'undefined' ? window : typeof __webpack_require__.g !== 'undefined' ? __webpack_require__.g : typeof self !== 'undefined' ? self : {};\n\nfunction getDefaultExportFromCjs (x) {\n\treturn x && x.__esModule && Object.prototype.hasOwnProperty.call(x, 'default') ? x['default'] : x;\n}\n\n/**\n * Checks if `value` is the\n * [language type](http://www.ecma-international.org/ecma-262/7.0/#sec-ecmascript-language-types)\n * of `Object`. (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`)\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an object, else `false`.\n * @example\n *\n * _.isObject({});\n * // => true\n *\n * _.isObject([1, 2, 3]);\n * // => true\n *\n * _.isObject(_.noop);\n * // => true\n *\n * _.isObject(null);\n * // => false\n */\n\nvar isObject_1;\nvar hasRequiredIsObject;\n\nfunction requireIsObject () {\n\tif (hasRequiredIsObject) return isObject_1;\n\thasRequiredIsObject = 1;\n\tfunction isObject(value) {\n\t var type = typeof value;\n\t return value != null && (type == 'object' || type == 'function');\n\t}\n\n\tisObject_1 = isObject;\n\treturn isObject_1;\n}\n\n/** Detect free variable `global` from Node.js. */\n\nvar _freeGlobal;\nvar hasRequired_freeGlobal;\n\nfunction require_freeGlobal () {\n\tif (hasRequired_freeGlobal) return _freeGlobal;\n\thasRequired_freeGlobal = 1;\n\tvar freeGlobal = typeof commonjsGlobal == 'object' && commonjsGlobal && commonjsGlobal.Object === Object && commonjsGlobal;\n\n\t_freeGlobal = freeGlobal;\n\treturn _freeGlobal;\n}\n\nvar _root;\nvar hasRequired_root;\n\nfunction require_root () {\n\tif (hasRequired_root) return _root;\n\thasRequired_root = 1;\n\tvar freeGlobal = require_freeGlobal();\n\n\t/** Detect free variable `self`. */\n\tvar freeSelf = typeof self == 'object' && self && self.Object === Object && self;\n\n\t/** Used as a reference to the global object. */\n\tvar root = freeGlobal || freeSelf || Function('return this')();\n\n\t_root = root;\n\treturn _root;\n}\n\nvar now_1;\nvar hasRequiredNow;\n\nfunction requireNow () {\n\tif (hasRequiredNow) return now_1;\n\thasRequiredNow = 1;\n\tvar root = require_root();\n\n\t/**\n\t * Gets the timestamp of the number of milliseconds that have elapsed since\n\t * the Unix epoch (1 January 1970 00:00:00 UTC).\n\t *\n\t * @static\n\t * @memberOf _\n\t * @since 2.4.0\n\t * @category Date\n\t * @returns {number} Returns the timestamp.\n\t * @example\n\t *\n\t * _.defer(function(stamp) {\n\t * console.log(_.now() - stamp);\n\t * }, _.now());\n\t * // => Logs the number of milliseconds it took for the deferred invocation.\n\t */\n\tvar now = function() {\n\t return root.Date.now();\n\t};\n\n\tnow_1 = now;\n\treturn now_1;\n}\n\n/** Used to match a single whitespace character. */\n\nvar _trimmedEndIndex;\nvar hasRequired_trimmedEndIndex;\n\nfunction require_trimmedEndIndex () {\n\tif (hasRequired_trimmedEndIndex) return _trimmedEndIndex;\n\thasRequired_trimmedEndIndex = 1;\n\tvar reWhitespace = /\\s/;\n\n\t/**\n\t * Used by `_.trim` and `_.trimEnd` to get the index of the last non-whitespace\n\t * character of `string`.\n\t *\n\t * @private\n\t * @param {string} string The string to inspect.\n\t * @returns {number} Returns the index of the last non-whitespace character.\n\t */\n\tfunction trimmedEndIndex(string) {\n\t var index = string.length;\n\n\t while (index-- && reWhitespace.test(string.charAt(index))) {}\n\t return index;\n\t}\n\n\t_trimmedEndIndex = trimmedEndIndex;\n\treturn _trimmedEndIndex;\n}\n\nvar _baseTrim;\nvar hasRequired_baseTrim;\n\nfunction require_baseTrim () {\n\tif (hasRequired_baseTrim) return _baseTrim;\n\thasRequired_baseTrim = 1;\n\tvar trimmedEndIndex = require_trimmedEndIndex();\n\n\t/** Used to match leading whitespace. */\n\tvar reTrimStart = /^\\s+/;\n\n\t/**\n\t * The base implementation of `_.trim`.\n\t *\n\t * @private\n\t * @param {string} string The string to trim.\n\t * @returns {string} Returns the trimmed string.\n\t */\n\tfunction baseTrim(string) {\n\t return string\n\t ? string.slice(0, trimmedEndIndex(string) + 1).replace(reTrimStart, '')\n\t : string;\n\t}\n\n\t_baseTrim = baseTrim;\n\treturn _baseTrim;\n}\n\nvar _Symbol;\nvar hasRequired_Symbol;\n\nfunction require_Symbol () {\n\tif (hasRequired_Symbol) return _Symbol;\n\thasRequired_Symbol = 1;\n\tvar root = require_root();\n\n\t/** Built-in value references. */\n\tvar Symbol = root.Symbol;\n\n\t_Symbol = Symbol;\n\treturn _Symbol;\n}\n\nvar _getRawTag;\nvar hasRequired_getRawTag;\n\nfunction require_getRawTag () {\n\tif (hasRequired_getRawTag) return _getRawTag;\n\thasRequired_getRawTag = 1;\n\tvar Symbol = require_Symbol();\n\n\t/** Used for built-in method references. */\n\tvar objectProto = Object.prototype;\n\n\t/** Used to check objects for own properties. */\n\tvar hasOwnProperty = objectProto.hasOwnProperty;\n\n\t/**\n\t * Used to resolve the\n\t * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)\n\t * of values.\n\t */\n\tvar nativeObjectToString = objectProto.toString;\n\n\t/** Built-in value references. */\n\tvar symToStringTag = Symbol ? Symbol.toStringTag : undefined;\n\n\t/**\n\t * A specialized version of `baseGetTag` which ignores `Symbol.toStringTag` values.\n\t *\n\t * @private\n\t * @param {*} value The value to query.\n\t * @returns {string} Returns the raw `toStringTag`.\n\t */\n\tfunction getRawTag(value) {\n\t var isOwn = hasOwnProperty.call(value, symToStringTag),\n\t tag = value[symToStringTag];\n\n\t try {\n\t value[symToStringTag] = undefined;\n\t var unmasked = true;\n\t } catch (e) {}\n\n\t var result = nativeObjectToString.call(value);\n\t if (unmasked) {\n\t if (isOwn) {\n\t value[symToStringTag] = tag;\n\t } else {\n\t delete value[symToStringTag];\n\t }\n\t }\n\t return result;\n\t}\n\n\t_getRawTag = getRawTag;\n\treturn _getRawTag;\n}\n\n/** Used for built-in method references. */\n\nvar _objectToString;\nvar hasRequired_objectToString;\n\nfunction require_objectToString () {\n\tif (hasRequired_objectToString) return _objectToString;\n\thasRequired_objectToString = 1;\n\tvar objectProto = Object.prototype;\n\n\t/**\n\t * Used to resolve the\n\t * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)\n\t * of values.\n\t */\n\tvar nativeObjectToString = objectProto.toString;\n\n\t/**\n\t * Converts `value` to a string using `Object.prototype.toString`.\n\t *\n\t * @private\n\t * @param {*} value The value to convert.\n\t * @returns {string} Returns the converted string.\n\t */\n\tfunction objectToString(value) {\n\t return nativeObjectToString.call(value);\n\t}\n\n\t_objectToString = objectToString;\n\treturn _objectToString;\n}\n\nvar _baseGetTag;\nvar hasRequired_baseGetTag;\n\nfunction require_baseGetTag () {\n\tif (hasRequired_baseGetTag) return _baseGetTag;\n\thasRequired_baseGetTag = 1;\n\tvar Symbol = require_Symbol(),\n\t getRawTag = require_getRawTag(),\n\t objectToString = require_objectToString();\n\n\t/** `Object#toString` result references. */\n\tvar nullTag = '[object Null]',\n\t undefinedTag = '[object Undefined]';\n\n\t/** Built-in value references. */\n\tvar symToStringTag = Symbol ? Symbol.toStringTag : undefined;\n\n\t/**\n\t * The base implementation of `getTag` without fallbacks for buggy environments.\n\t *\n\t * @private\n\t * @param {*} value The value to query.\n\t * @returns {string} Returns the `toStringTag`.\n\t */\n\tfunction baseGetTag(value) {\n\t if (value == null) {\n\t return value === undefined ? undefinedTag : nullTag;\n\t }\n\t return (symToStringTag && symToStringTag in Object(value))\n\t ? getRawTag(value)\n\t : objectToString(value);\n\t}\n\n\t_baseGetTag = baseGetTag;\n\treturn _baseGetTag;\n}\n\n/**\n * Checks if `value` is object-like. A value is object-like if it's not `null`\n * and has a `typeof` result of \"object\".\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is object-like, else `false`.\n * @example\n *\n * _.isObjectLike({});\n * // => true\n *\n * _.isObjectLike([1, 2, 3]);\n * // => true\n *\n * _.isObjectLike(_.noop);\n * // => false\n *\n * _.isObjectLike(null);\n * // => false\n */\n\nvar isObjectLike_1;\nvar hasRequiredIsObjectLike;\n\nfunction requireIsObjectLike () {\n\tif (hasRequiredIsObjectLike) return isObjectLike_1;\n\thasRequiredIsObjectLike = 1;\n\tfunction isObjectLike(value) {\n\t return value != null && typeof value == 'object';\n\t}\n\n\tisObjectLike_1 = isObjectLike;\n\treturn isObjectLike_1;\n}\n\nvar isSymbol_1;\nvar hasRequiredIsSymbol;\n\nfunction requireIsSymbol () {\n\tif (hasRequiredIsSymbol) return isSymbol_1;\n\thasRequiredIsSymbol = 1;\n\tvar baseGetTag = require_baseGetTag(),\n\t isObjectLike = requireIsObjectLike();\n\n\t/** `Object#toString` result references. */\n\tvar symbolTag = '[object Symbol]';\n\n\t/**\n\t * Checks if `value` is classified as a `Symbol` primitive or object.\n\t *\n\t * @static\n\t * @memberOf _\n\t * @since 4.0.0\n\t * @category Lang\n\t * @param {*} value The value to check.\n\t * @returns {boolean} Returns `true` if `value` is a symbol, else `false`.\n\t * @example\n\t *\n\t * _.isSymbol(Symbol.iterator);\n\t * // => true\n\t *\n\t * _.isSymbol('abc');\n\t * // => false\n\t */\n\tfunction isSymbol(value) {\n\t return typeof value == 'symbol' ||\n\t (isObjectLike(value) && baseGetTag(value) == symbolTag);\n\t}\n\n\tisSymbol_1 = isSymbol;\n\treturn isSymbol_1;\n}\n\nvar toNumber_1;\nvar hasRequiredToNumber;\n\nfunction requireToNumber () {\n\tif (hasRequiredToNumber) return toNumber_1;\n\thasRequiredToNumber = 1;\n\tvar baseTrim = require_baseTrim(),\n\t isObject = requireIsObject(),\n\t isSymbol = requireIsSymbol();\n\n\t/** Used as references for various `Number` constants. */\n\tvar NAN = 0 / 0;\n\n\t/** Used to detect bad signed hexadecimal string values. */\n\tvar reIsBadHex = /^[-+]0x[0-9a-f]+$/i;\n\n\t/** Used to detect binary string values. */\n\tvar reIsBinary = /^0b[01]+$/i;\n\n\t/** Used to detect octal string values. */\n\tvar reIsOctal = /^0o[0-7]+$/i;\n\n\t/** Built-in method references without a dependency on `root`. */\n\tvar freeParseInt = parseInt;\n\n\t/**\n\t * Converts `value` to a number.\n\t *\n\t * @static\n\t * @memberOf _\n\t * @since 4.0.0\n\t * @category Lang\n\t * @param {*} value The value to process.\n\t * @returns {number} Returns the number.\n\t * @example\n\t *\n\t * _.toNumber(3.2);\n\t * // => 3.2\n\t *\n\t * _.toNumber(Number.MIN_VALUE);\n\t * // => 5e-324\n\t *\n\t * _.toNumber(Infinity);\n\t * // => Infinity\n\t *\n\t * _.toNumber('3.2');\n\t * // => 3.2\n\t */\n\tfunction toNumber(value) {\n\t if (typeof value == 'number') {\n\t return value;\n\t }\n\t if (isSymbol(value)) {\n\t return NAN;\n\t }\n\t if (isObject(value)) {\n\t var other = typeof value.valueOf == 'function' ? value.valueOf() : value;\n\t value = isObject(other) ? (other + '') : other;\n\t }\n\t if (typeof value != 'string') {\n\t return value === 0 ? value : +value;\n\t }\n\t value = baseTrim(value);\n\t var isBinary = reIsBinary.test(value);\n\t return (isBinary || reIsOctal.test(value))\n\t ? freeParseInt(value.slice(2), isBinary ? 2 : 8)\n\t : (reIsBadHex.test(value) ? NAN : +value);\n\t}\n\n\ttoNumber_1 = toNumber;\n\treturn toNumber_1;\n}\n\nvar debounce_1;\nvar hasRequiredDebounce;\n\nfunction requireDebounce () {\n\tif (hasRequiredDebounce) return debounce_1;\n\thasRequiredDebounce = 1;\n\tvar isObject = requireIsObject(),\n\t now = requireNow(),\n\t toNumber = requireToNumber();\n\n\t/** Error message constants. */\n\tvar FUNC_ERROR_TEXT = 'Expected a function';\n\n\t/* Built-in method references for those with the same name as other `lodash` methods. */\n\tvar nativeMax = Math.max,\n\t nativeMin = Math.min;\n\n\t/**\n\t * Creates a debounced function that delays invoking `func` until after `wait`\n\t * milliseconds have elapsed since the last time the debounced function was\n\t * invoked. The debounced function comes with a `cancel` method to cancel\n\t * delayed `func` invocations and a `flush` method to immediately invoke them.\n\t * Provide `options` to indicate whether `func` should be invoked on the\n\t * leading and/or trailing edge of the `wait` timeout. The `func` is invoked\n\t * with the last arguments provided to the debounced function. Subsequent\n\t * calls to the debounced function return the result of the last `func`\n\t * invocation.\n\t *\n\t * **Note:** If `leading` and `trailing` options are `true`, `func` is\n\t * invoked on the trailing edge of the timeout only if the debounced function\n\t * is invoked more than once during the `wait` timeout.\n\t *\n\t * If `wait` is `0` and `leading` is `false`, `func` invocation is deferred\n\t * until to the next tick, similar to `setTimeout` with a timeout of `0`.\n\t *\n\t * See [David Corbacho's article](https://css-tricks.com/debouncing-throttling-explained-examples/)\n\t * for details over the differences between `_.debounce` and `_.throttle`.\n\t *\n\t * @static\n\t * @memberOf _\n\t * @since 0.1.0\n\t * @category Function\n\t * @param {Function} func The function to debounce.\n\t * @param {number} [wait=0] The number of milliseconds to delay.\n\t * @param {Object} [options={}] The options object.\n\t * @param {boolean} [options.leading=false]\n\t * Specify invoking on the leading edge of the timeout.\n\t * @param {number} [options.maxWait]\n\t * The maximum time `func` is allowed to be delayed before it's invoked.\n\t * @param {boolean} [options.trailing=true]\n\t * Specify invoking on the trailing edge of the timeout.\n\t * @returns {Function} Returns the new debounced function.\n\t * @example\n\t *\n\t * // Avoid costly calculations while the window size is in flux.\n\t * jQuery(window).on('resize', _.debounce(calculateLayout, 150));\n\t *\n\t * // Invoke `sendMail` when clicked, debouncing subsequent calls.\n\t * jQuery(element).on('click', _.debounce(sendMail, 300, {\n\t * 'leading': true,\n\t * 'trailing': false\n\t * }));\n\t *\n\t * // Ensure `batchLog` is invoked once after 1 second of debounced calls.\n\t * var debounced = _.debounce(batchLog, 250, { 'maxWait': 1000 });\n\t * var source = new EventSource('/stream');\n\t * jQuery(source).on('message', debounced);\n\t *\n\t * // Cancel the trailing debounced invocation.\n\t * jQuery(window).on('popstate', debounced.cancel);\n\t */\n\tfunction debounce(func, wait, options) {\n\t var lastArgs,\n\t lastThis,\n\t maxWait,\n\t result,\n\t timerId,\n\t lastCallTime,\n\t lastInvokeTime = 0,\n\t leading = false,\n\t maxing = false,\n\t trailing = true;\n\n\t if (typeof func != 'function') {\n\t throw new TypeError(FUNC_ERROR_TEXT);\n\t }\n\t wait = toNumber(wait) || 0;\n\t if (isObject(options)) {\n\t leading = !!options.leading;\n\t maxing = 'maxWait' in options;\n\t maxWait = maxing ? nativeMax(toNumber(options.maxWait) || 0, wait) : maxWait;\n\t trailing = 'trailing' in options ? !!options.trailing : trailing;\n\t }\n\n\t function invokeFunc(time) {\n\t var args = lastArgs,\n\t thisArg = lastThis;\n\n\t lastArgs = lastThis = undefined;\n\t lastInvokeTime = time;\n\t result = func.apply(thisArg, args);\n\t return result;\n\t }\n\n\t function leadingEdge(time) {\n\t // Reset any `maxWait` timer.\n\t lastInvokeTime = time;\n\t // Start the timer for the trailing edge.\n\t timerId = setTimeout(timerExpired, wait);\n\t // Invoke the leading edge.\n\t return leading ? invokeFunc(time) : result;\n\t }\n\n\t function remainingWait(time) {\n\t var timeSinceLastCall = time - lastCallTime,\n\t timeSinceLastInvoke = time - lastInvokeTime,\n\t timeWaiting = wait - timeSinceLastCall;\n\n\t return maxing\n\t ? nativeMin(timeWaiting, maxWait - timeSinceLastInvoke)\n\t : timeWaiting;\n\t }\n\n\t function shouldInvoke(time) {\n\t var timeSinceLastCall = time - lastCallTime,\n\t timeSinceLastInvoke = time - lastInvokeTime;\n\n\t // Either this is the first call, activity has stopped and we're at the\n\t // trailing edge, the system time has gone backwards and we're treating\n\t // it as the trailing edge, or we've hit the `maxWait` limit.\n\t return (lastCallTime === undefined || (timeSinceLastCall >= wait) ||\n\t (timeSinceLastCall < 0) || (maxing && timeSinceLastInvoke >= maxWait));\n\t }\n\n\t function timerExpired() {\n\t var time = now();\n\t if (shouldInvoke(time)) {\n\t return trailingEdge(time);\n\t }\n\t // Restart the timer.\n\t timerId = setTimeout(timerExpired, remainingWait(time));\n\t }\n\n\t function trailingEdge(time) {\n\t timerId = undefined;\n\n\t // Only invoke if we have `lastArgs` which means `func` has been\n\t // debounced at least once.\n\t if (trailing && lastArgs) {\n\t return invokeFunc(time);\n\t }\n\t lastArgs = lastThis = undefined;\n\t return result;\n\t }\n\n\t function cancel() {\n\t if (timerId !== undefined) {\n\t clearTimeout(timerId);\n\t }\n\t lastInvokeTime = 0;\n\t lastArgs = lastCallTime = lastThis = timerId = undefined;\n\t }\n\n\t function flush() {\n\t return timerId === undefined ? result : trailingEdge(now());\n\t }\n\n\t function debounced() {\n\t var time = now(),\n\t isInvoking = shouldInvoke(time);\n\n\t lastArgs = arguments;\n\t lastThis = this;\n\t lastCallTime = time;\n\n\t if (isInvoking) {\n\t if (timerId === undefined) {\n\t return leadingEdge(lastCallTime);\n\t }\n\t if (maxing) {\n\t // Handle invocations in a tight loop.\n\t clearTimeout(timerId);\n\t timerId = setTimeout(timerExpired, wait);\n\t return invokeFunc(lastCallTime);\n\t }\n\t }\n\t if (timerId === undefined) {\n\t timerId = setTimeout(timerExpired, wait);\n\t }\n\t return result;\n\t }\n\t debounced.cancel = cancel;\n\t debounced.flush = flush;\n\t return debounced;\n\t}\n\n\tdebounce_1 = debounce;\n\treturn debounce_1;\n}\n\nvar debounceExports = requireDebounce();\nvar debounce = /*@__PURE__*/getDefaultExportFromCjs(debounceExports);\n\nvar performance$1 = _window ? _window.performance : null;\nvar pnow = performance$1 && performance$1.now ? function () {\n return performance$1.now();\n} : function () {\n return Date.now();\n};\nvar raf = function () {\n if (_window) {\n if (_window.requestAnimationFrame) {\n return function (fn) {\n _window.requestAnimationFrame(fn);\n };\n } else if (_window.mozRequestAnimationFrame) {\n return function (fn) {\n _window.mozRequestAnimationFrame(fn);\n };\n } else if (_window.webkitRequestAnimationFrame) {\n return function (fn) {\n _window.webkitRequestAnimationFrame(fn);\n };\n } else if (_window.msRequestAnimationFrame) {\n return function (fn) {\n _window.msRequestAnimationFrame(fn);\n };\n }\n }\n return function (fn) {\n if (fn) {\n setTimeout(function () {\n fn(pnow());\n }, 1000 / 60);\n }\n };\n}();\nvar requestAnimationFrame = function requestAnimationFrame(fn) {\n return raf(fn);\n};\nvar performanceNow = pnow;\n\nvar DEFAULT_HASH_SEED = 9261;\nvar K = 65599; // 37 also works pretty well\nvar DEFAULT_HASH_SEED_ALT = 5381;\nvar hashIterableInts = function hashIterableInts(iterator) {\n var seed = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : DEFAULT_HASH_SEED;\n // sdbm/string-hash\n var hash = seed;\n var entry;\n for (;;) {\n entry = iterator.next();\n if (entry.done) {\n break;\n }\n hash = hash * K + entry.value | 0;\n }\n return hash;\n};\nvar hashInt = function hashInt(num) {\n var seed = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : DEFAULT_HASH_SEED;\n // sdbm/string-hash\n return seed * K + num | 0;\n};\nvar hashIntAlt = function hashIntAlt(num) {\n var seed = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : DEFAULT_HASH_SEED_ALT;\n // djb2/string-hash\n return (seed << 5) + seed + num | 0;\n};\nvar combineHashes = function combineHashes(hash1, hash2) {\n return hash1 * 0x200000 + hash2;\n};\nvar combineHashesArray = function combineHashesArray(hashes) {\n return hashes[0] * 0x200000 + hashes[1];\n};\nvar hashArrays = function hashArrays(hashes1, hashes2) {\n return [hashInt(hashes1[0], hashes2[0]), hashIntAlt(hashes1[1], hashes2[1])];\n};\nvar hashIntsArray = function hashIntsArray(ints, seed) {\n var entry = {\n value: 0,\n done: false\n };\n var i = 0;\n var length = ints.length;\n var iterator = {\n next: function next() {\n if (i < length) {\n entry.value = ints[i++];\n } else {\n entry.done = true;\n }\n return entry;\n }\n };\n return hashIterableInts(iterator, seed);\n};\nvar hashString = function hashString(str, seed) {\n var entry = {\n value: 0,\n done: false\n };\n var i = 0;\n var length = str.length;\n var iterator = {\n next: function next() {\n if (i < length) {\n entry.value = str.charCodeAt(i++);\n } else {\n entry.done = true;\n }\n return entry;\n }\n };\n return hashIterableInts(iterator, seed);\n};\nvar hashStrings = function hashStrings() {\n return hashStringsArray(arguments);\n};\nvar hashStringsArray = function hashStringsArray(strs) {\n var hash;\n for (var i = 0; i < strs.length; i++) {\n var str = strs[i];\n if (i === 0) {\n hash = hashString(str);\n } else {\n hash = hashString(str, hash);\n }\n }\n return hash;\n};\n\nvar warningsEnabled = true;\nvar warnSupported = console.warn != null;\nvar traceSupported = console.trace != null;\nvar MAX_INT$1 = Number.MAX_SAFE_INTEGER || 9007199254740991;\nvar trueify = function trueify() {\n return true;\n};\nvar falsify = function falsify() {\n return false;\n};\nvar zeroify = function zeroify() {\n return 0;\n};\nvar noop$1 = function noop() {};\nvar error = function error(msg) {\n throw new Error(msg);\n};\nvar warnings = function warnings(enabled) {\n if (enabled !== undefined) {\n warningsEnabled = !!enabled;\n } else {\n return warningsEnabled;\n }\n};\nvar warn = function warn(msg) {\n if (!warnings()) {\n return;\n }\n if (warnSupported) {\n console.warn(msg);\n } else {\n console.log(msg);\n if (traceSupported) {\n console.trace();\n }\n }\n};\nvar clone = function clone(obj) {\n return extend({}, obj);\n};\n\n// gets a shallow copy of the argument\nvar copy = function copy(obj) {\n if (obj == null) {\n return obj;\n }\n if (array(obj)) {\n return obj.slice();\n } else if (plainObject(obj)) {\n return clone(obj);\n } else {\n return obj;\n }\n};\nvar copyArray = function copyArray(arr) {\n return arr.slice();\n};\nvar uuid = function uuid(a, b /* placeholders */) {\n for (\n // loop :)\n b = a = '';\n // b - result , a - numeric letiable\n a++ < 36;\n //\n b += a * 51 & 52 // if \"a\" is not 9 or 14 or 19 or 24\n ?\n // return a random number or 4\n (a ^ 15 // if \"a\" is not 15\n ?\n // generate a random number from 0 to 15\n 8 ^ Math.random() * (a ^ 20 ? 16 : 4) // unless \"a\" is 20, in which case a random number from 8 to 11\n : 4 // otherwise 4\n ).toString(16) : '-' // in other cases (if \"a\" is 9,14,19,24) insert \"-\"\n );\n return b;\n};\nvar _staticEmptyObject = {};\nvar staticEmptyObject = function staticEmptyObject() {\n return _staticEmptyObject;\n};\nvar defaults$g = function defaults(_defaults) {\n var keys = Object.keys(_defaults);\n return function (opts) {\n var filledOpts = {};\n for (var i = 0; i < keys.length; i++) {\n var key = keys[i];\n var optVal = opts == null ? undefined : opts[key];\n filledOpts[key] = optVal === undefined ? _defaults[key] : optVal;\n }\n return filledOpts;\n };\n};\nvar removeFromArray = function removeFromArray(arr, ele, oneCopy) {\n for (var i = arr.length - 1; i >= 0; i--) {\n if (arr[i] === ele) {\n arr.splice(i, 1);\n }\n }\n};\nvar clearArray = function clearArray(arr) {\n arr.splice(0, arr.length);\n};\nvar push = function push(arr, otherArr) {\n for (var i = 0; i < otherArr.length; i++) {\n var el = otherArr[i];\n arr.push(el);\n }\n};\nvar getPrefixedProperty = function getPrefixedProperty(obj, propName, prefix) {\n if (prefix) {\n propName = prependCamel(prefix, propName); // e.g. (labelWidth, source) => sourceLabelWidth\n }\n return obj[propName];\n};\nvar setPrefixedProperty = function setPrefixedProperty(obj, propName, prefix, value) {\n if (prefix) {\n propName = prependCamel(prefix, propName); // e.g. (labelWidth, source) => sourceLabelWidth\n }\n obj[propName] = value;\n};\n\n/* global Map */\nvar ObjectMap = /*#__PURE__*/function () {\n function ObjectMap() {\n _classCallCheck(this, ObjectMap);\n this._obj = {};\n }\n return _createClass(ObjectMap, [{\n key: \"set\",\n value: function set(key, val) {\n this._obj[key] = val;\n return this;\n }\n }, {\n key: \"delete\",\n value: function _delete(key) {\n this._obj[key] = undefined;\n return this;\n }\n }, {\n key: \"clear\",\n value: function clear() {\n this._obj = {};\n }\n }, {\n key: \"has\",\n value: function has(key) {\n return this._obj[key] !== undefined;\n }\n }, {\n key: \"get\",\n value: function get(key) {\n return this._obj[key];\n }\n }]);\n}();\nvar Map$1 = typeof Map !== 'undefined' ? Map : ObjectMap;\n\n/* global Set */\n\nvar undef = \"undefined\" ;\nvar ObjectSet = /*#__PURE__*/function () {\n function ObjectSet(arrayOrObjectSet) {\n _classCallCheck(this, ObjectSet);\n this._obj = Object.create(null);\n this.size = 0;\n if (arrayOrObjectSet != null) {\n var arr;\n if (arrayOrObjectSet.instanceString != null && arrayOrObjectSet.instanceString() === this.instanceString()) {\n arr = arrayOrObjectSet.toArray();\n } else {\n arr = arrayOrObjectSet;\n }\n for (var i = 0; i < arr.length; i++) {\n this.add(arr[i]);\n }\n }\n }\n return _createClass(ObjectSet, [{\n key: \"instanceString\",\n value: function instanceString() {\n return 'set';\n }\n }, {\n key: \"add\",\n value: function add(val) {\n var o = this._obj;\n if (o[val] !== 1) {\n o[val] = 1;\n this.size++;\n }\n }\n }, {\n key: \"delete\",\n value: function _delete(val) {\n var o = this._obj;\n if (o[val] === 1) {\n o[val] = 0;\n this.size--;\n }\n }\n }, {\n key: \"clear\",\n value: function clear() {\n this._obj = Object.create(null);\n }\n }, {\n key: \"has\",\n value: function has(val) {\n return this._obj[val] === 1;\n }\n }, {\n key: \"toArray\",\n value: function toArray() {\n var _this = this;\n return Object.keys(this._obj).filter(function (key) {\n return _this.has(key);\n });\n }\n }, {\n key: \"forEach\",\n value: function forEach(callback, thisArg) {\n return this.toArray().forEach(callback, thisArg);\n }\n }]);\n}();\nvar Set$1 = (typeof Set === \"undefined\" ? \"undefined\" : _typeof(Set)) !== undef ? Set : ObjectSet;\n\n// represents a node or an edge\nvar Element = function Element(cy, params) {\n var restore = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : true;\n if (cy === undefined || params === undefined || !core(cy)) {\n error('An element must have a core reference and parameters set');\n return;\n }\n var group = params.group;\n\n // try to automatically infer the group if unspecified\n if (group == null) {\n if (params.data && params.data.source != null && params.data.target != null) {\n group = 'edges';\n } else {\n group = 'nodes';\n }\n }\n\n // validate group\n if (group !== 'nodes' && group !== 'edges') {\n error('An element must be of type `nodes` or `edges`; you specified `' + group + '`');\n return;\n }\n\n // make the element array-like, just like a collection\n this.length = 1;\n this[0] = this;\n\n // NOTE: when something is added here, add also to ele.json()\n var _p = this._private = {\n cy: cy,\n single: true,\n // indicates this is an element\n data: params.data || {},\n // data object\n position: params.position || {\n x: 0,\n y: 0\n },\n // (x, y) position pair\n autoWidth: undefined,\n // width and height of nodes calculated by the renderer when set to special 'auto' value\n autoHeight: undefined,\n autoPadding: undefined,\n compoundBoundsClean: false,\n // whether the compound dimensions need to be recalculated the next time dimensions are read\n listeners: [],\n // array of bound listeners\n group: group,\n // string; 'nodes' or 'edges'\n style: {},\n // properties as set by the style\n rstyle: {},\n // properties for style sent from the renderer to the core\n styleCxts: [],\n // applied style contexts from the styler\n styleKeys: {},\n // per-group keys of style property values\n removed: true,\n // whether it's inside the vis; true if removed (set true here since we call restore)\n selected: params.selected ? true : false,\n // whether it's selected\n selectable: params.selectable === undefined ? true : params.selectable ? true : false,\n // whether it's selectable\n locked: params.locked ? true : false,\n // whether the element is locked (cannot be moved)\n grabbed: false,\n // whether the element is grabbed by the mouse; renderer sets this privately\n grabbable: params.grabbable === undefined ? true : params.grabbable ? true : false,\n // whether the element can be grabbed\n pannable: params.pannable === undefined ? group === 'edges' ? true : false : params.pannable ? true : false,\n // whether the element has passthrough panning enabled\n active: false,\n // whether the element is active from user interaction\n classes: new Set$1(),\n // map ( className => true )\n animation: {\n // object for currently-running animations\n current: [],\n queue: []\n },\n rscratch: {},\n // object in which the renderer can store information\n scratch: params.scratch || {},\n // scratch objects\n edges: [],\n // array of connected edges\n children: [],\n // array of children\n parent: params.parent && params.parent.isNode() ? params.parent : null,\n // parent ref\n traversalCache: {},\n // cache of output of traversal functions\n backgrounding: false,\n // whether background images are loading\n bbCache: null,\n // cache of the current bounding box\n bbCacheShift: {\n x: 0,\n y: 0\n },\n // shift applied to cached bb to be applied on next get\n bodyBounds: null,\n // bounds cache of element body, w/o overlay\n overlayBounds: null,\n // bounds cache of element body, including overlay\n labelBounds: {\n // bounds cache of labels\n all: null,\n source: null,\n target: null,\n main: null\n },\n arrowBounds: {\n // bounds cache of edge arrows\n source: null,\n target: null,\n 'mid-source': null,\n 'mid-target': null\n }\n };\n if (_p.position.x == null) {\n _p.position.x = 0;\n }\n if (_p.position.y == null) {\n _p.position.y = 0;\n }\n\n // renderedPosition overrides if specified\n if (params.renderedPosition) {\n var rpos = params.renderedPosition;\n var pan = cy.pan();\n var zoom = cy.zoom();\n _p.position = {\n x: (rpos.x - pan.x) / zoom,\n y: (rpos.y - pan.y) / zoom\n };\n }\n var classes = [];\n if (array(params.classes)) {\n classes = params.classes;\n } else if (string(params.classes)) {\n classes = params.classes.split(/\\s+/);\n }\n for (var i = 0, l = classes.length; i < l; i++) {\n var cls = classes[i];\n if (!cls || cls === '') {\n continue;\n }\n _p.classes.add(cls);\n }\n this.createEmitter();\n if (restore === undefined || restore) {\n this.restore();\n }\n var bypass = params.style || params.css;\n if (bypass) {\n warn('Setting a `style` bypass at element creation should be done only when absolutely necessary. Try to use the stylesheet instead.');\n this.style(bypass);\n }\n};\n\nvar defineSearch = function defineSearch(params) {\n params = {\n bfs: params.bfs || !params.dfs,\n dfs: params.dfs || !params.bfs\n };\n\n // from pseudocode on wikipedia\n return function searchFn(roots, fn, directed) {\n var options;\n if (plainObject(roots) && !elementOrCollection(roots)) {\n options = roots;\n roots = options.roots || options.root;\n fn = options.visit;\n directed = options.directed;\n }\n directed = arguments.length === 2 && !fn$6(fn) ? fn : directed;\n fn = fn$6(fn) ? fn : function () {};\n var cy = this._private.cy;\n var v = roots = string(roots) ? this.filter(roots) : roots;\n var Q = [];\n var connectedNodes = [];\n var connectedBy = {};\n var id2depth = {};\n var V = {};\n var j = 0;\n var found;\n var _this$byGroup = this.byGroup(),\n nodes = _this$byGroup.nodes,\n edges = _this$byGroup.edges;\n\n // enqueue v\n for (var i = 0; i < v.length; i++) {\n var vi = v[i];\n var viId = vi.id();\n if (vi.isNode()) {\n Q.unshift(vi);\n if (params.bfs) {\n V[viId] = true;\n connectedNodes.push(vi);\n }\n id2depth[viId] = 0;\n }\n }\n var _loop = function _loop() {\n var v = params.bfs ? Q.shift() : Q.pop();\n var vId = v.id();\n if (params.dfs) {\n if (V[vId]) {\n return 0; // continue\n }\n V[vId] = true;\n connectedNodes.push(v);\n }\n var depth = id2depth[vId];\n var prevEdge = connectedBy[vId];\n var src = prevEdge != null ? prevEdge.source() : null;\n var tgt = prevEdge != null ? prevEdge.target() : null;\n var prevNode = prevEdge == null ? undefined : v.same(src) ? tgt[0] : src[0];\n var ret;\n ret = fn(v, prevEdge, prevNode, j++, depth);\n if (ret === true) {\n found = v;\n return 1; // break\n }\n if (ret === false) {\n return 1; // break\n }\n var vwEdges = v.connectedEdges().filter(function (e) {\n return (!directed || e.source().same(v)) && edges.has(e);\n });\n for (var _i2 = 0; _i2 < vwEdges.length; _i2++) {\n var e = vwEdges[_i2];\n var w = e.connectedNodes().filter(function (n) {\n return !n.same(v) && nodes.has(n);\n });\n var wId = w.id();\n if (w.length !== 0 && !V[wId]) {\n w = w[0];\n Q.push(w);\n if (params.bfs) {\n V[wId] = true;\n connectedNodes.push(w);\n }\n connectedBy[wId] = e;\n id2depth[wId] = id2depth[vId] + 1;\n }\n }\n },\n _ret;\n while (Q.length !== 0) {\n _ret = _loop();\n if (_ret === 0) continue;\n if (_ret === 1) break;\n }\n var connectedEles = cy.collection();\n for (var _i = 0; _i < connectedNodes.length; _i++) {\n var node = connectedNodes[_i];\n var edge = connectedBy[node.id()];\n if (edge != null) {\n connectedEles.push(edge);\n }\n connectedEles.push(node);\n }\n return {\n path: cy.collection(connectedEles),\n found: cy.collection(found)\n };\n };\n};\n\n// search, spanning trees, etc\nvar elesfn$v = {\n breadthFirstSearch: defineSearch({\n bfs: true\n }),\n depthFirstSearch: defineSearch({\n dfs: true\n })\n};\n\n// nice, short mathematical alias\nelesfn$v.bfs = elesfn$v.breadthFirstSearch;\nelesfn$v.dfs = elesfn$v.depthFirstSearch;\n\nvar heap$2 = {exports: {}};\n\nvar heap$1 = heap$2.exports;\n\nvar hasRequiredHeap$1;\n\nfunction requireHeap$1 () {\n\tif (hasRequiredHeap$1) return heap$2.exports;\n\thasRequiredHeap$1 = 1;\n\t(function (module, exports) {\n\t\t// Generated by CoffeeScript 1.8.0\n\t\t(function() {\n\t\t var Heap, defaultCmp, floor, heapify, heappop, heappush, heappushpop, heapreplace, insort, min, nlargest, nsmallest, updateItem, _siftdown, _siftup;\n\n\t\t floor = Math.floor, min = Math.min;\n\n\n\t\t /*\n\t\t Default comparison function to be used\n\t\t */\n\n\t\t defaultCmp = function(x, y) {\n\t\t if (x < y) {\n\t\t return -1;\n\t\t }\n\t\t if (x > y) {\n\t\t return 1;\n\t\t }\n\t\t return 0;\n\t\t };\n\n\n\t\t /*\n\t\t Insert item x in list a, and keep it sorted assuming a is sorted.\n\t\t \n\t\t If x is already in a, insert it to the right of the rightmost x.\n\t\t \n\t\t Optional args lo (default 0) and hi (default a.length) bound the slice\n\t\t of a to be searched.\n\t\t */\n\n\t\t insort = function(a, x, lo, hi, cmp) {\n\t\t var mid;\n\t\t if (lo == null) {\n\t\t lo = 0;\n\t\t }\n\t\t if (cmp == null) {\n\t\t cmp = defaultCmp;\n\t\t }\n\t\t if (lo < 0) {\n\t\t throw new Error('lo must be non-negative');\n\t\t }\n\t\t if (hi == null) {\n\t\t hi = a.length;\n\t\t }\n\t\t while (lo < hi) {\n\t\t mid = floor((lo + hi) / 2);\n\t\t if (cmp(x, a[mid]) < 0) {\n\t\t hi = mid;\n\t\t } else {\n\t\t lo = mid + 1;\n\t\t }\n\t\t }\n\t\t return ([].splice.apply(a, [lo, lo - lo].concat(x)), x);\n\t\t };\n\n\n\t\t /*\n\t\t Push item onto heap, maintaining the heap invariant.\n\t\t */\n\n\t\t heappush = function(array, item, cmp) {\n\t\t if (cmp == null) {\n\t\t cmp = defaultCmp;\n\t\t }\n\t\t array.push(item);\n\t\t return _siftdown(array, 0, array.length - 1, cmp);\n\t\t };\n\n\n\t\t /*\n\t\t Pop the smallest item off the heap, maintaining the heap invariant.\n\t\t */\n\n\t\t heappop = function(array, cmp) {\n\t\t var lastelt, returnitem;\n\t\t if (cmp == null) {\n\t\t cmp = defaultCmp;\n\t\t }\n\t\t lastelt = array.pop();\n\t\t if (array.length) {\n\t\t returnitem = array[0];\n\t\t array[0] = lastelt;\n\t\t _siftup(array, 0, cmp);\n\t\t } else {\n\t\t returnitem = lastelt;\n\t\t }\n\t\t return returnitem;\n\t\t };\n\n\n\t\t /*\n\t\t Pop and return the current smallest value, and add the new item.\n\t\t \n\t\t This is more efficient than heappop() followed by heappush(), and can be\n\t\t more appropriate when using a fixed size heap. Note that the value\n\t\t returned may be larger than item! That constrains reasonable use of\n\t\t this routine unless written as part of a conditional replacement:\n\t\t if item > array[0]\n\t\t item = heapreplace(array, item)\n\t\t */\n\n\t\t heapreplace = function(array, item, cmp) {\n\t\t var returnitem;\n\t\t if (cmp == null) {\n\t\t cmp = defaultCmp;\n\t\t }\n\t\t returnitem = array[0];\n\t\t array[0] = item;\n\t\t _siftup(array, 0, cmp);\n\t\t return returnitem;\n\t\t };\n\n\n\t\t /*\n\t\t Fast version of a heappush followed by a heappop.\n\t\t */\n\n\t\t heappushpop = function(array, item, cmp) {\n\t\t var _ref;\n\t\t if (cmp == null) {\n\t\t cmp = defaultCmp;\n\t\t }\n\t\t if (array.length && cmp(array[0], item) < 0) {\n\t\t _ref = [array[0], item], item = _ref[0], array[0] = _ref[1];\n\t\t _siftup(array, 0, cmp);\n\t\t }\n\t\t return item;\n\t\t };\n\n\n\t\t /*\n\t\t Transform list into a heap, in-place, in O(array.length) time.\n\t\t */\n\n\t\t heapify = function(array, cmp) {\n\t\t var i, _i, _len, _ref1, _results, _results1;\n\t\t if (cmp == null) {\n\t\t cmp = defaultCmp;\n\t\t }\n\t\t _ref1 = (function() {\n\t\t _results1 = [];\n\t\t for (var _j = 0, _ref = floor(array.length / 2); 0 <= _ref ? _j < _ref : _j > _ref; 0 <= _ref ? _j++ : _j--){ _results1.push(_j); }\n\t\t return _results1;\n\t\t }).apply(this).reverse();\n\t\t _results = [];\n\t\t for (_i = 0, _len = _ref1.length; _i < _len; _i++) {\n\t\t i = _ref1[_i];\n\t\t _results.push(_siftup(array, i, cmp));\n\t\t }\n\t\t return _results;\n\t\t };\n\n\n\t\t /*\n\t\t Update the position of the given item in the heap.\n\t\t This function should be called every time the item is being modified.\n\t\t */\n\n\t\t updateItem = function(array, item, cmp) {\n\t\t var pos;\n\t\t if (cmp == null) {\n\t\t cmp = defaultCmp;\n\t\t }\n\t\t pos = array.indexOf(item);\n\t\t if (pos === -1) {\n\t\t return;\n\t\t }\n\t\t _siftdown(array, 0, pos, cmp);\n\t\t return _siftup(array, pos, cmp);\n\t\t };\n\n\n\t\t /*\n\t\t Find the n largest elements in a dataset.\n\t\t */\n\n\t\t nlargest = function(array, n, cmp) {\n\t\t var elem, result, _i, _len, _ref;\n\t\t if (cmp == null) {\n\t\t cmp = defaultCmp;\n\t\t }\n\t\t result = array.slice(0, n);\n\t\t if (!result.length) {\n\t\t return result;\n\t\t }\n\t\t heapify(result, cmp);\n\t\t _ref = array.slice(n);\n\t\t for (_i = 0, _len = _ref.length; _i < _len; _i++) {\n\t\t elem = _ref[_i];\n\t\t heappushpop(result, elem, cmp);\n\t\t }\n\t\t return result.sort(cmp).reverse();\n\t\t };\n\n\n\t\t /*\n\t\t Find the n smallest elements in a dataset.\n\t\t */\n\n\t\t nsmallest = function(array, n, cmp) {\n\t\t var elem, los, result, _i, _j, _len, _ref, _ref1, _results;\n\t\t if (cmp == null) {\n\t\t cmp = defaultCmp;\n\t\t }\n\t\t if (n * 10 <= array.length) {\n\t\t result = array.slice(0, n).sort(cmp);\n\t\t if (!result.length) {\n\t\t return result;\n\t\t }\n\t\t los = result[result.length - 1];\n\t\t _ref = array.slice(n);\n\t\t for (_i = 0, _len = _ref.length; _i < _len; _i++) {\n\t\t elem = _ref[_i];\n\t\t if (cmp(elem, los) < 0) {\n\t\t insort(result, elem, 0, null, cmp);\n\t\t result.pop();\n\t\t los = result[result.length - 1];\n\t\t }\n\t\t }\n\t\t return result;\n\t\t }\n\t\t heapify(array, cmp);\n\t\t _results = [];\n\t\t for (_j = 0, _ref1 = min(n, array.length); 0 <= _ref1 ? _j < _ref1 : _j > _ref1; 0 <= _ref1 ? ++_j : --_j) {\n\t\t _results.push(heappop(array, cmp));\n\t\t }\n\t\t return _results;\n\t\t };\n\n\t\t _siftdown = function(array, startpos, pos, cmp) {\n\t\t var newitem, parent, parentpos;\n\t\t if (cmp == null) {\n\t\t cmp = defaultCmp;\n\t\t }\n\t\t newitem = array[pos];\n\t\t while (pos > startpos) {\n\t\t parentpos = (pos - 1) >> 1;\n\t\t parent = array[parentpos];\n\t\t if (cmp(newitem, parent) < 0) {\n\t\t array[pos] = parent;\n\t\t pos = parentpos;\n\t\t continue;\n\t\t }\n\t\t break;\n\t\t }\n\t\t return array[pos] = newitem;\n\t\t };\n\n\t\t _siftup = function(array, pos, cmp) {\n\t\t var childpos, endpos, newitem, rightpos, startpos;\n\t\t if (cmp == null) {\n\t\t cmp = defaultCmp;\n\t\t }\n\t\t endpos = array.length;\n\t\t startpos = pos;\n\t\t newitem = array[pos];\n\t\t childpos = 2 * pos + 1;\n\t\t while (childpos < endpos) {\n\t\t rightpos = childpos + 1;\n\t\t if (rightpos < endpos && !(cmp(array[childpos], array[rightpos]) < 0)) {\n\t\t childpos = rightpos;\n\t\t }\n\t\t array[pos] = array[childpos];\n\t\t pos = childpos;\n\t\t childpos = 2 * pos + 1;\n\t\t }\n\t\t array[pos] = newitem;\n\t\t return _siftdown(array, startpos, pos, cmp);\n\t\t };\n\n\t\t Heap = (function() {\n\t\t Heap.push = heappush;\n\n\t\t Heap.pop = heappop;\n\n\t\t Heap.replace = heapreplace;\n\n\t\t Heap.pushpop = heappushpop;\n\n\t\t Heap.heapify = heapify;\n\n\t\t Heap.updateItem = updateItem;\n\n\t\t Heap.nlargest = nlargest;\n\n\t\t Heap.nsmallest = nsmallest;\n\n\t\t function Heap(cmp) {\n\t\t this.cmp = cmp != null ? cmp : defaultCmp;\n\t\t this.nodes = [];\n\t\t }\n\n\t\t Heap.prototype.push = function(x) {\n\t\t return heappush(this.nodes, x, this.cmp);\n\t\t };\n\n\t\t Heap.prototype.pop = function() {\n\t\t return heappop(this.nodes, this.cmp);\n\t\t };\n\n\t\t Heap.prototype.peek = function() {\n\t\t return this.nodes[0];\n\t\t };\n\n\t\t Heap.prototype.contains = function(x) {\n\t\t return this.nodes.indexOf(x) !== -1;\n\t\t };\n\n\t\t Heap.prototype.replace = function(x) {\n\t\t return heapreplace(this.nodes, x, this.cmp);\n\t\t };\n\n\t\t Heap.prototype.pushpop = function(x) {\n\t\t return heappushpop(this.nodes, x, this.cmp);\n\t\t };\n\n\t\t Heap.prototype.heapify = function() {\n\t\t return heapify(this.nodes, this.cmp);\n\t\t };\n\n\t\t Heap.prototype.updateItem = function(x) {\n\t\t return updateItem(this.nodes, x, this.cmp);\n\t\t };\n\n\t\t Heap.prototype.clear = function() {\n\t\t return this.nodes = [];\n\t\t };\n\n\t\t Heap.prototype.empty = function() {\n\t\t return this.nodes.length === 0;\n\t\t };\n\n\t\t Heap.prototype.size = function() {\n\t\t return this.nodes.length;\n\t\t };\n\n\t\t Heap.prototype.clone = function() {\n\t\t var heap;\n\t\t heap = new Heap();\n\t\t heap.nodes = this.nodes.slice(0);\n\t\t return heap;\n\t\t };\n\n\t\t Heap.prototype.toArray = function() {\n\t\t return this.nodes.slice(0);\n\t\t };\n\n\t\t Heap.prototype.insert = Heap.prototype.push;\n\n\t\t Heap.prototype.top = Heap.prototype.peek;\n\n\t\t Heap.prototype.front = Heap.prototype.peek;\n\n\t\t Heap.prototype.has = Heap.prototype.contains;\n\n\t\t Heap.prototype.copy = Heap.prototype.clone;\n\n\t\t return Heap;\n\n\t\t })();\n\n\t\t (function(root, factory) {\n\t\t {\n\t\t return module.exports = factory();\n\t\t }\n\t\t })(this, function() {\n\t\t return Heap;\n\t\t });\n\n\t\t}).call(heap$1); \n\t} (heap$2));\n\treturn heap$2.exports;\n}\n\nvar heap;\nvar hasRequiredHeap;\n\nfunction requireHeap () {\n\tif (hasRequiredHeap) return heap;\n\thasRequiredHeap = 1;\n\theap = requireHeap$1();\n\treturn heap;\n}\n\nvar heapExports = requireHeap();\nvar Heap = /*@__PURE__*/getDefaultExportFromCjs(heapExports);\n\nvar dijkstraDefaults = defaults$g({\n root: null,\n weight: function weight(edge) {\n return 1;\n },\n directed: false\n});\nvar elesfn$u = {\n dijkstra: function dijkstra(options) {\n if (!plainObject(options)) {\n var args = arguments;\n options = {\n root: args[0],\n weight: args[1],\n directed: args[2]\n };\n }\n var _dijkstraDefaults = dijkstraDefaults(options),\n root = _dijkstraDefaults.root,\n weight = _dijkstraDefaults.weight,\n directed = _dijkstraDefaults.directed;\n var eles = this;\n var weightFn = weight;\n var source = string(root) ? this.filter(root)[0] : root[0];\n var dist = {};\n var prev = {};\n var knownDist = {};\n var _this$byGroup = this.byGroup(),\n nodes = _this$byGroup.nodes,\n edges = _this$byGroup.edges;\n edges.unmergeBy(function (ele) {\n return ele.isLoop();\n });\n var getDist = function getDist(node) {\n return dist[node.id()];\n };\n var setDist = function setDist(node, d) {\n dist[node.id()] = d;\n Q.updateItem(node);\n };\n var Q = new Heap(function (a, b) {\n return getDist(a) - getDist(b);\n });\n for (var i = 0; i < nodes.length; i++) {\n var node = nodes[i];\n dist[node.id()] = node.same(source) ? 0 : Infinity;\n Q.push(node);\n }\n var distBetween = function distBetween(u, v) {\n var uvs = (directed ? u.edgesTo(v) : u.edgesWith(v)).intersect(edges);\n var smallestDistance = Infinity;\n var smallestEdge;\n for (var _i = 0; _i < uvs.length; _i++) {\n var edge = uvs[_i];\n var _weight = weightFn(edge);\n if (_weight < smallestDistance || !smallestEdge) {\n smallestDistance = _weight;\n smallestEdge = edge;\n }\n }\n return {\n edge: smallestEdge,\n dist: smallestDistance\n };\n };\n while (Q.size() > 0) {\n var u = Q.pop();\n var smalletsDist = getDist(u);\n var uid = u.id();\n knownDist[uid] = smalletsDist;\n if (smalletsDist === Infinity) {\n continue;\n }\n var neighbors = u.neighborhood().intersect(nodes);\n for (var _i2 = 0; _i2 < neighbors.length; _i2++) {\n var v = neighbors[_i2];\n var vid = v.id();\n var vDist = distBetween(u, v);\n var alt = smalletsDist + vDist.dist;\n if (alt < getDist(v)) {\n setDist(v, alt);\n prev[vid] = {\n node: u,\n edge: vDist.edge\n };\n }\n } // for\n } // while\n\n return {\n distanceTo: function distanceTo(node) {\n var target = string(node) ? nodes.filter(node)[0] : node[0];\n return knownDist[target.id()];\n },\n pathTo: function pathTo(node) {\n var target = string(node) ? nodes.filter(node)[0] : node[0];\n var S = [];\n var u = target;\n var uid = u.id();\n if (target.length > 0) {\n S.unshift(target);\n while (prev[uid]) {\n var p = prev[uid];\n S.unshift(p.edge);\n S.unshift(p.node);\n u = p.node;\n uid = u.id();\n }\n }\n return eles.spawn(S);\n }\n };\n }\n};\n\nvar elesfn$t = {\n // kruskal's algorithm (finds min spanning tree, assuming undirected graph)\n // implemented from pseudocode from wikipedia\n kruskal: function kruskal(weightFn) {\n weightFn = weightFn || function (edge) {\n return 1;\n };\n var _this$byGroup = this.byGroup(),\n nodes = _this$byGroup.nodes,\n edges = _this$byGroup.edges;\n var numNodes = nodes.length;\n var forest = new Array(numNodes);\n var A = nodes; // assumes byGroup() creates new collections that can be safely mutated\n\n var findSetIndex = function findSetIndex(ele) {\n for (var i = 0; i < forest.length; i++) {\n var eles = forest[i];\n if (eles.has(ele)) {\n return i;\n }\n }\n };\n\n // start with one forest per node\n for (var i = 0; i < numNodes; i++) {\n forest[i] = this.spawn(nodes[i]);\n }\n var S = edges.sort(function (a, b) {\n return weightFn(a) - weightFn(b);\n });\n for (var _i = 0; _i < S.length; _i++) {\n var edge = S[_i];\n var u = edge.source()[0];\n var v = edge.target()[0];\n var setUIndex = findSetIndex(u);\n var setVIndex = findSetIndex(v);\n var setU = forest[setUIndex];\n var setV = forest[setVIndex];\n if (setUIndex !== setVIndex) {\n A.merge(edge);\n\n // combine forests for u and v\n setU.merge(setV);\n forest.splice(setVIndex, 1);\n }\n }\n return A;\n }\n};\n\nvar aStarDefaults = defaults$g({\n root: null,\n goal: null,\n weight: function weight(edge) {\n return 1;\n },\n heuristic: function heuristic(edge) {\n return 0;\n },\n directed: false\n});\nvar elesfn$s = {\n // Implemented from pseudocode from wikipedia\n aStar: function aStar(options) {\n var cy = this.cy();\n var _aStarDefaults = aStarDefaults(options),\n root = _aStarDefaults.root,\n goal = _aStarDefaults.goal,\n heuristic = _aStarDefaults.heuristic,\n directed = _aStarDefaults.directed,\n weight = _aStarDefaults.weight;\n root = cy.collection(root)[0];\n goal = cy.collection(goal)[0];\n var sid = root.id();\n var tid = goal.id();\n var gScore = {};\n var fScore = {};\n var closedSetIds = {};\n var openSet = new Heap(function (a, b) {\n return fScore[a.id()] - fScore[b.id()];\n });\n var openSetIds = new Set$1();\n var cameFrom = {};\n var cameFromEdge = {};\n var addToOpenSet = function addToOpenSet(ele, id) {\n openSet.push(ele);\n openSetIds.add(id);\n };\n var cMin, cMinId;\n var popFromOpenSet = function popFromOpenSet() {\n cMin = openSet.pop();\n cMinId = cMin.id();\n openSetIds[\"delete\"](cMinId);\n };\n var isInOpenSet = function isInOpenSet(id) {\n return openSetIds.has(id);\n };\n addToOpenSet(root, sid);\n gScore[sid] = 0;\n fScore[sid] = heuristic(root);\n\n // Counter\n var steps = 0;\n\n // Main loop\n while (openSet.size() > 0) {\n popFromOpenSet();\n steps++;\n\n // If we've found our goal, then we are done\n if (cMinId === tid) {\n var path = [];\n var pathNode = goal;\n var pathNodeId = tid;\n var pathEdge = cameFromEdge[pathNodeId];\n for (;;) {\n path.unshift(pathNode);\n if (pathEdge != null) {\n path.unshift(pathEdge);\n }\n pathNode = cameFrom[pathNodeId];\n if (pathNode == null) {\n break;\n }\n pathNodeId = pathNode.id();\n pathEdge = cameFromEdge[pathNodeId];\n }\n return {\n found: true,\n distance: gScore[cMinId],\n path: this.spawn(path),\n steps: steps\n };\n }\n\n // Add cMin to processed nodes\n closedSetIds[cMinId] = true;\n\n // Update scores for neighbors of cMin\n // Take into account if graph is directed or not\n var vwEdges = cMin._private.edges;\n for (var i = 0; i < vwEdges.length; i++) {\n var e = vwEdges[i];\n\n // edge must be in set of calling eles\n if (!this.hasElementWithId(e.id())) {\n continue;\n }\n\n // cMin must be the source of edge if directed\n if (directed && e.data('source') !== cMinId) {\n continue;\n }\n var wSrc = e.source();\n var wTgt = e.target();\n var w = wSrc.id() !== cMinId ? wSrc : wTgt;\n var wid = w.id();\n\n // node must be in set of calling eles\n if (!this.hasElementWithId(wid)) {\n continue;\n }\n\n // if node is in closedSet, ignore it\n if (closedSetIds[wid]) {\n continue;\n }\n\n // New tentative score for node w\n var tempScore = gScore[cMinId] + weight(e);\n\n // Update gScore for node w if:\n // w not present in openSet\n // OR\n // tentative gScore is less than previous value\n\n // w not in openSet\n if (!isInOpenSet(wid)) {\n gScore[wid] = tempScore;\n fScore[wid] = tempScore + heuristic(w);\n addToOpenSet(w, wid);\n cameFrom[wid] = cMin;\n cameFromEdge[wid] = e;\n continue;\n }\n\n // w already in openSet, but with greater gScore\n if (tempScore < gScore[wid]) {\n gScore[wid] = tempScore;\n fScore[wid] = tempScore + heuristic(w);\n cameFrom[wid] = cMin;\n cameFromEdge[wid] = e;\n }\n } // End of neighbors update\n } // End of main loop\n\n // If we've reached here, then we've not reached our goal\n return {\n found: false,\n distance: undefined,\n path: undefined,\n steps: steps\n };\n }\n}; // elesfn\n\nvar floydWarshallDefaults = defaults$g({\n weight: function weight(edge) {\n return 1;\n },\n directed: false\n});\nvar elesfn$r = {\n // Implemented from pseudocode from wikipedia\n floydWarshall: function floydWarshall(options) {\n var cy = this.cy();\n var _floydWarshallDefault = floydWarshallDefaults(options),\n weight = _floydWarshallDefault.weight,\n directed = _floydWarshallDefault.directed;\n var weightFn = weight;\n var _this$byGroup = this.byGroup(),\n nodes = _this$byGroup.nodes,\n edges = _this$byGroup.edges;\n var N = nodes.length;\n var Nsq = N * N;\n var indexOf = function indexOf(node) {\n return nodes.indexOf(node);\n };\n var atIndex = function atIndex(i) {\n return nodes[i];\n };\n\n // Initialize distance matrix\n var dist = new Array(Nsq);\n for (var n = 0; n < Nsq; n++) {\n var j = n % N;\n var i = (n - j) / N;\n if (i === j) {\n dist[n] = 0;\n } else {\n dist[n] = Infinity;\n }\n }\n\n // Initialize matrix used for path reconstruction\n // Initialize distance matrix\n var next = new Array(Nsq);\n var edgeNext = new Array(Nsq);\n\n // Process edges\n for (var _i = 0; _i < edges.length; _i++) {\n var edge = edges[_i];\n var src = edge.source()[0];\n var tgt = edge.target()[0];\n if (src === tgt) {\n continue;\n } // exclude loops\n\n var s = indexOf(src);\n var t = indexOf(tgt);\n var st = s * N + t; // source to target index\n var _weight = weightFn(edge);\n\n // Check if already process another edge between same 2 nodes\n if (dist[st] > _weight) {\n dist[st] = _weight;\n next[st] = t;\n edgeNext[st] = edge;\n }\n\n // If undirected graph, process 'reversed' edge\n if (!directed) {\n var ts = t * N + s; // target to source index\n\n if (!directed && dist[ts] > _weight) {\n dist[ts] = _weight;\n next[ts] = s;\n edgeNext[ts] = edge;\n }\n }\n }\n\n // Main loop\n for (var k = 0; k < N; k++) {\n for (var _i2 = 0; _i2 < N; _i2++) {\n var ik = _i2 * N + k;\n for (var _j = 0; _j < N; _j++) {\n var ij = _i2 * N + _j;\n var kj = k * N + _j;\n if (dist[ik] + dist[kj] < dist[ij]) {\n dist[ij] = dist[ik] + dist[kj];\n next[ij] = next[ik];\n }\n }\n }\n }\n var getArgEle = function getArgEle(ele) {\n return (string(ele) ? cy.filter(ele) : ele)[0];\n };\n var indexOfArgEle = function indexOfArgEle(ele) {\n return indexOf(getArgEle(ele));\n };\n var res = {\n distance: function distance(from, to) {\n var i = indexOfArgEle(from);\n var j = indexOfArgEle(to);\n return dist[i * N + j];\n },\n path: function path(from, to) {\n var i = indexOfArgEle(from);\n var j = indexOfArgEle(to);\n var fromNode = atIndex(i);\n if (i === j) {\n return fromNode.collection();\n }\n if (next[i * N + j] == null) {\n return cy.collection();\n }\n var path = cy.collection();\n var prev = i;\n var edge;\n path.merge(fromNode);\n while (i !== j) {\n prev = i;\n i = next[i * N + j];\n edge = edgeNext[prev * N + i];\n path.merge(edge);\n path.merge(atIndex(i));\n }\n return path;\n }\n };\n return res;\n } // floydWarshall\n}; // elesfn\n\nvar bellmanFordDefaults = defaults$g({\n weight: function weight(edge) {\n return 1;\n },\n directed: false,\n root: null\n});\nvar elesfn$q = {\n // Implemented from pseudocode from wikipedia\n bellmanFord: function bellmanFord(options) {\n var _this = this;\n var _bellmanFordDefaults = bellmanFordDefaults(options),\n weight = _bellmanFordDefaults.weight,\n directed = _bellmanFordDefaults.directed,\n root = _bellmanFordDefaults.root;\n var weightFn = weight;\n var eles = this;\n var cy = this.cy();\n var _this$byGroup = this.byGroup(),\n edges = _this$byGroup.edges,\n nodes = _this$byGroup.nodes;\n var numNodes = nodes.length;\n var infoMap = new Map$1();\n var hasNegativeWeightCycle = false;\n var negativeWeightCycles = [];\n root = cy.collection(root)[0]; // in case selector passed\n\n edges.unmergeBy(function (edge) {\n return edge.isLoop();\n });\n var numEdges = edges.length;\n var getInfo = function getInfo(node) {\n var obj = infoMap.get(node.id());\n if (!obj) {\n obj = {};\n infoMap.set(node.id(), obj);\n }\n return obj;\n };\n var getNodeFromTo = function getNodeFromTo(to) {\n return (string(to) ? cy.$(to) : to)[0];\n };\n var distanceTo = function distanceTo(to) {\n return getInfo(getNodeFromTo(to)).dist;\n };\n var pathTo = function pathTo(to) {\n var thisStart = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : root;\n var end = getNodeFromTo(to);\n var path = [];\n var node = end;\n for (;;) {\n if (node == null) {\n return _this.spawn();\n }\n var _getInfo = getInfo(node),\n edge = _getInfo.edge,\n pred = _getInfo.pred;\n path.unshift(node[0]);\n if (node.same(thisStart) && path.length > 0) {\n break;\n }\n if (edge != null) {\n path.unshift(edge);\n }\n node = pred;\n }\n return eles.spawn(path);\n };\n\n // Initializations { dist, pred, edge }\n for (var i = 0; i < numNodes; i++) {\n var node = nodes[i];\n var info = getInfo(node);\n if (node.same(root)) {\n info.dist = 0;\n } else {\n info.dist = Infinity;\n }\n info.pred = null;\n info.edge = null;\n }\n\n // Edges relaxation\n var replacedEdge = false;\n var checkForEdgeReplacement = function checkForEdgeReplacement(node1, node2, edge, info1, info2, weight) {\n var dist = info1.dist + weight;\n if (dist < info2.dist && !edge.same(info1.edge)) {\n info2.dist = dist;\n info2.pred = node1;\n info2.edge = edge;\n replacedEdge = true;\n }\n };\n for (var _i = 1; _i < numNodes; _i++) {\n replacedEdge = false;\n for (var e = 0; e < numEdges; e++) {\n var edge = edges[e];\n var src = edge.source();\n var tgt = edge.target();\n var _weight = weightFn(edge);\n var srcInfo = getInfo(src);\n var tgtInfo = getInfo(tgt);\n checkForEdgeReplacement(src, tgt, edge, srcInfo, tgtInfo, _weight);\n\n // If undirected graph, we need to take into account the 'reverse' edge\n if (!directed) {\n checkForEdgeReplacement(tgt, src, edge, tgtInfo, srcInfo, _weight);\n }\n }\n if (!replacedEdge) {\n break;\n }\n }\n if (replacedEdge) {\n // Check for negative weight cycles\n var negativeWeightCycleIds = [];\n for (var _e = 0; _e < numEdges; _e++) {\n var _edge = edges[_e];\n var _src = _edge.source();\n var _tgt = _edge.target();\n var _weight2 = weightFn(_edge);\n var srcDist = getInfo(_src).dist;\n var tgtDist = getInfo(_tgt).dist;\n if (srcDist + _weight2 < tgtDist || !directed && tgtDist + _weight2 < srcDist) {\n if (!hasNegativeWeightCycle) {\n warn('Graph contains a negative weight cycle for Bellman-Ford');\n hasNegativeWeightCycle = true;\n }\n if (options.findNegativeWeightCycles !== false) {\n var negativeNodes = [];\n if (srcDist + _weight2 < tgtDist) {\n negativeNodes.push(_src);\n }\n if (!directed && tgtDist + _weight2 < srcDist) {\n negativeNodes.push(_tgt);\n }\n var numNegativeNodes = negativeNodes.length;\n for (var n = 0; n < numNegativeNodes; n++) {\n var start = negativeNodes[n];\n var cycle = [start];\n cycle.push(getInfo(start).edge);\n var _node = getInfo(start).pred;\n while (cycle.indexOf(_node) === -1) {\n cycle.push(_node);\n cycle.push(getInfo(_node).edge);\n _node = getInfo(_node).pred;\n }\n cycle = cycle.slice(cycle.indexOf(_node));\n var smallestId = cycle[0].id();\n var smallestIndex = 0;\n for (var c = 2; c < cycle.length; c += 2) {\n if (cycle[c].id() < smallestId) {\n smallestId = cycle[c].id();\n smallestIndex = c;\n }\n }\n cycle = cycle.slice(smallestIndex).concat(cycle.slice(0, smallestIndex));\n cycle.push(cycle[0]);\n var cycleId = cycle.map(function (el) {\n return el.id();\n }).join(\",\");\n if (negativeWeightCycleIds.indexOf(cycleId) === -1) {\n negativeWeightCycles.push(eles.spawn(cycle));\n negativeWeightCycleIds.push(cycleId);\n }\n }\n } else {\n break;\n }\n }\n }\n }\n return {\n distanceTo: distanceTo,\n pathTo: pathTo,\n hasNegativeWeightCycle: hasNegativeWeightCycle,\n negativeWeightCycles: negativeWeightCycles\n };\n } // bellmanFord\n}; // elesfn\n\nvar sqrt2 = Math.sqrt(2);\n\n// Function which colapses 2 (meta) nodes into one\n// Updates the remaining edge lists\n// Receives as a paramater the edge which causes the collapse\nvar collapse = function collapse(edgeIndex, nodeMap, remainingEdges) {\n if (remainingEdges.length === 0) {\n error(\"Karger-Stein must be run on a connected (sub)graph\");\n }\n var edgeInfo = remainingEdges[edgeIndex];\n var sourceIn = edgeInfo[1];\n var targetIn = edgeInfo[2];\n var partition1 = nodeMap[sourceIn];\n var partition2 = nodeMap[targetIn];\n var newEdges = remainingEdges; // re-use array\n\n // Delete all edges between partition1 and partition2\n for (var i = newEdges.length - 1; i >= 0; i--) {\n var edge = newEdges[i];\n var src = edge[1];\n var tgt = edge[2];\n if (nodeMap[src] === partition1 && nodeMap[tgt] === partition2 || nodeMap[src] === partition2 && nodeMap[tgt] === partition1) {\n newEdges.splice(i, 1);\n }\n }\n\n // All edges pointing to partition2 should now point to partition1\n for (var _i = 0; _i < newEdges.length; _i++) {\n var _edge = newEdges[_i];\n if (_edge[1] === partition2) {\n // Check source\n newEdges[_i] = _edge.slice(); // copy\n newEdges[_i][1] = partition1;\n } else if (_edge[2] === partition2) {\n // Check target\n newEdges[_i] = _edge.slice(); // copy\n newEdges[_i][2] = partition1;\n }\n }\n\n // Move all nodes from partition2 to partition1\n for (var _i2 = 0; _i2 < nodeMap.length; _i2++) {\n if (nodeMap[_i2] === partition2) {\n nodeMap[_i2] = partition1;\n }\n }\n return newEdges;\n};\n\n// Contracts a graph until we reach a certain number of meta nodes\nvar contractUntil = function contractUntil(metaNodeMap, remainingEdges, size, sizeLimit) {\n while (size > sizeLimit) {\n // Choose an edge randomly\n var edgeIndex = Math.floor(Math.random() * remainingEdges.length);\n\n // Collapse graph based on edge\n remainingEdges = collapse(edgeIndex, metaNodeMap, remainingEdges);\n size--;\n }\n return remainingEdges;\n};\nvar elesfn$p = {\n // Computes the minimum cut of an undirected graph\n // Returns the correct answer with high probability\n kargerStein: function kargerStein() {\n var _this = this;\n var _this$byGroup = this.byGroup(),\n nodes = _this$byGroup.nodes,\n edges = _this$byGroup.edges;\n edges.unmergeBy(function (edge) {\n return edge.isLoop();\n });\n var numNodes = nodes.length;\n var numEdges = edges.length;\n var numIter = Math.ceil(Math.pow(Math.log(numNodes) / Math.LN2, 2));\n var stopSize = Math.floor(numNodes / sqrt2);\n if (numNodes < 2) {\n error('At least 2 nodes are required for Karger-Stein algorithm');\n return undefined;\n }\n\n // Now store edge destination as indexes\n // Format for each edge (edge index, source node index, target node index)\n var edgeIndexes = [];\n for (var i = 0; i < numEdges; i++) {\n var e = edges[i];\n edgeIndexes.push([i, nodes.indexOf(e.source()), nodes.indexOf(e.target())]);\n }\n\n // We will store the best cut found here\n var minCutSize = Infinity;\n var minCutEdgeIndexes = [];\n var minCutNodeMap = new Array(numNodes);\n\n // Initial meta node partition\n var metaNodeMap = new Array(numNodes);\n var metaNodeMap2 = new Array(numNodes);\n var copyNodesMap = function copyNodesMap(from, to) {\n for (var _i3 = 0; _i3 < numNodes; _i3++) {\n to[_i3] = from[_i3];\n }\n };\n\n // Main loop\n for (var iter = 0; iter <= numIter; iter++) {\n // Reset meta node partition\n for (var _i4 = 0; _i4 < numNodes; _i4++) {\n metaNodeMap[_i4] = _i4;\n }\n\n // Contract until stop point (stopSize nodes)\n var edgesState = contractUntil(metaNodeMap, edgeIndexes.slice(), numNodes, stopSize);\n var edgesState2 = edgesState.slice(); // copy\n\n // Create a copy of the colapsed nodes state\n copyNodesMap(metaNodeMap, metaNodeMap2);\n\n // Run 2 iterations starting in the stop state\n var res1 = contractUntil(metaNodeMap, edgesState, stopSize, 2);\n var res2 = contractUntil(metaNodeMap2, edgesState2, stopSize, 2);\n\n // Is any of the 2 results the best cut so far?\n if (res1.length <= res2.length && res1.length < minCutSize) {\n minCutSize = res1.length;\n minCutEdgeIndexes = res1;\n copyNodesMap(metaNodeMap, minCutNodeMap);\n } else if (res2.length <= res1.length && res2.length < minCutSize) {\n minCutSize = res2.length;\n minCutEdgeIndexes = res2;\n copyNodesMap(metaNodeMap2, minCutNodeMap);\n }\n } // end of main loop\n\n // Construct result\n var cut = this.spawn(minCutEdgeIndexes.map(function (e) {\n return edges[e[0]];\n }));\n var partition1 = this.spawn();\n var partition2 = this.spawn();\n\n // traverse metaNodeMap for best cut\n var witnessNodePartition = minCutNodeMap[0];\n for (var _i5 = 0; _i5 < minCutNodeMap.length; _i5++) {\n var partitionId = minCutNodeMap[_i5];\n var node = nodes[_i5];\n if (partitionId === witnessNodePartition) {\n partition1.merge(node);\n } else {\n partition2.merge(node);\n }\n }\n\n // construct components corresponding to each disjoint subset of nodes\n var constructComponent = function constructComponent(subset) {\n var component = _this.spawn();\n subset.forEach(function (node) {\n component.merge(node);\n node.connectedEdges().forEach(function (edge) {\n // ensure edge is within calling collection and edge is not in cut\n if (_this.contains(edge) && !cut.contains(edge)) {\n component.merge(edge);\n }\n });\n });\n return component;\n };\n var components = [constructComponent(partition1), constructComponent(partition2)];\n var ret = {\n cut: cut,\n components: components,\n // n.b. partitions are included to be compatible with the old api spec\n // (could be removed in a future major version)\n partition1: partition1,\n partition2: partition2\n };\n return ret;\n }\n}; // elesfn\n\nvar copyPosition = function copyPosition(p) {\n return {\n x: p.x,\n y: p.y\n };\n};\nvar modelToRenderedPosition$1 = function modelToRenderedPosition(p, zoom, pan) {\n return {\n x: p.x * zoom + pan.x,\n y: p.y * zoom + pan.y\n };\n};\nvar renderedToModelPosition = function renderedToModelPosition(p, zoom, pan) {\n return {\n x: (p.x - pan.x) / zoom,\n y: (p.y - pan.y) / zoom\n };\n};\nvar array2point = function array2point(arr) {\n return {\n x: arr[0],\n y: arr[1]\n };\n};\nvar min = function min(arr) {\n var begin = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0;\n var end = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : arr.length;\n var min = Infinity;\n for (var i = begin; i < end; i++) {\n var val = arr[i];\n if (isFinite(val)) {\n min = Math.min(val, min);\n }\n }\n return min;\n};\nvar max = function max(arr) {\n var begin = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0;\n var end = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : arr.length;\n var max = -Infinity;\n for (var i = begin; i < end; i++) {\n var val = arr[i];\n if (isFinite(val)) {\n max = Math.max(val, max);\n }\n }\n return max;\n};\nvar mean = function mean(arr) {\n var begin = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0;\n var end = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : arr.length;\n var total = 0;\n var n = 0;\n for (var i = begin; i < end; i++) {\n var val = arr[i];\n if (isFinite(val)) {\n total += val;\n n++;\n }\n }\n return total / n;\n};\nvar median = function median(arr) {\n var begin = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0;\n var end = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : arr.length;\n var copy = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : true;\n var sort = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : true;\n var includeHoles = arguments.length > 5 && arguments[5] !== undefined ? arguments[5] : true;\n if (copy) {\n arr = arr.slice(begin, end);\n } else {\n if (end < arr.length) {\n arr.splice(end, arr.length - end);\n }\n if (begin > 0) {\n arr.splice(0, begin);\n }\n }\n\n // all non finite (e.g. Infinity, NaN) elements must be -Infinity so they go to the start\n var off = 0; // offset from non-finite values\n for (var i = arr.length - 1; i >= 0; i--) {\n var v = arr[i];\n if (includeHoles) {\n if (!isFinite(v)) {\n arr[i] = -Infinity;\n off++;\n }\n } else {\n // just remove it if we don't want to consider holes\n arr.splice(i, 1);\n }\n }\n if (sort) {\n arr.sort(function (a, b) {\n return a - b;\n }); // requires copy = true if you don't want to change the orig\n }\n var len = arr.length;\n var mid = Math.floor(len / 2);\n if (len % 2 !== 0) {\n return arr[mid + 1 + off];\n } else {\n return (arr[mid - 1 + off] + arr[mid + off]) / 2;\n }\n};\nvar deg2rad = function deg2rad(deg) {\n return Math.PI * deg / 180;\n};\nvar getAngleFromDisp = function getAngleFromDisp(dispX, dispY) {\n return Math.atan2(dispY, dispX) - Math.PI / 2;\n};\nvar log2 = Math.log2 || function (n) {\n return Math.log(n) / Math.log(2);\n};\nvar signum = function signum(x) {\n if (x > 0) {\n return 1;\n } else if (x < 0) {\n return -1;\n } else {\n return 0;\n }\n};\nvar dist = function dist(p1, p2) {\n return Math.sqrt(sqdist(p1, p2));\n};\nvar sqdist = function sqdist(p1, p2) {\n var dx = p2.x - p1.x;\n var dy = p2.y - p1.y;\n return dx * dx + dy * dy;\n};\nvar inPlaceSumNormalize = function inPlaceSumNormalize(v) {\n var length = v.length;\n\n // First, get sum of all elements\n var total = 0;\n for (var i = 0; i < length; i++) {\n total += v[i];\n }\n\n // Now, divide each by the sum of all elements\n for (var _i = 0; _i < length; _i++) {\n v[_i] = v[_i] / total;\n }\n return v;\n};\n\n// from http://en.wikipedia.org/wiki/Bézier_curve#Quadratic_curves\nvar qbezierAt = function qbezierAt(p0, p1, p2, t) {\n return (1 - t) * (1 - t) * p0 + 2 * (1 - t) * t * p1 + t * t * p2;\n};\nvar qbezierPtAt = function qbezierPtAt(p0, p1, p2, t) {\n return {\n x: qbezierAt(p0.x, p1.x, p2.x, t),\n y: qbezierAt(p0.y, p1.y, p2.y, t)\n };\n};\nvar lineAt = function lineAt(p0, p1, t, d) {\n var vec = {\n x: p1.x - p0.x,\n y: p1.y - p0.y\n };\n var vecDist = dist(p0, p1);\n var normVec = {\n x: vec.x / vecDist,\n y: vec.y / vecDist\n };\n t = t == null ? 0 : t;\n d = d != null ? d : t * vecDist;\n return {\n x: p0.x + normVec.x * d,\n y: p0.y + normVec.y * d\n };\n};\nvar bound = function bound(min, val, max) {\n return Math.max(min, Math.min(max, val));\n};\n\n// makes a full bb (x1, y1, x2, y2, w, h) from implicit params\nvar makeBoundingBox = function makeBoundingBox(bb) {\n if (bb == null) {\n return {\n x1: Infinity,\n y1: Infinity,\n x2: -Infinity,\n y2: -Infinity,\n w: 0,\n h: 0\n };\n } else if (bb.x1 != null && bb.y1 != null) {\n if (bb.x2 != null && bb.y2 != null && bb.x2 >= bb.x1 && bb.y2 >= bb.y1) {\n return {\n x1: bb.x1,\n y1: bb.y1,\n x2: bb.x2,\n y2: bb.y2,\n w: bb.x2 - bb.x1,\n h: bb.y2 - bb.y1\n };\n } else if (bb.w != null && bb.h != null && bb.w >= 0 && bb.h >= 0) {\n return {\n x1: bb.x1,\n y1: bb.y1,\n x2: bb.x1 + bb.w,\n y2: bb.y1 + bb.h,\n w: bb.w,\n h: bb.h\n };\n }\n }\n};\nvar copyBoundingBox = function copyBoundingBox(bb) {\n return {\n x1: bb.x1,\n x2: bb.x2,\n w: bb.w,\n y1: bb.y1,\n y2: bb.y2,\n h: bb.h\n };\n};\nvar clearBoundingBox = function clearBoundingBox(bb) {\n bb.x1 = Infinity;\n bb.y1 = Infinity;\n bb.x2 = -Infinity;\n bb.y2 = -Infinity;\n bb.w = 0;\n bb.h = 0;\n};\nvar shiftBoundingBox = function shiftBoundingBox(bb, dx, dy) {\n return {\n x1: bb.x1 + dx,\n x2: bb.x2 + dx,\n y1: bb.y1 + dy,\n y2: bb.y2 + dy,\n w: bb.w,\n h: bb.h\n };\n};\nvar updateBoundingBox = function updateBoundingBox(bb1, bb2) {\n // update bb1 with bb2 bounds\n\n bb1.x1 = Math.min(bb1.x1, bb2.x1);\n bb1.x2 = Math.max(bb1.x2, bb2.x2);\n bb1.w = bb1.x2 - bb1.x1;\n bb1.y1 = Math.min(bb1.y1, bb2.y1);\n bb1.y2 = Math.max(bb1.y2, bb2.y2);\n bb1.h = bb1.y2 - bb1.y1;\n};\nvar expandBoundingBoxByPoint = function expandBoundingBoxByPoint(bb, x, y) {\n bb.x1 = Math.min(bb.x1, x);\n bb.x2 = Math.max(bb.x2, x);\n bb.w = bb.x2 - bb.x1;\n bb.y1 = Math.min(bb.y1, y);\n bb.y2 = Math.max(bb.y2, y);\n bb.h = bb.y2 - bb.y1;\n};\nvar expandBoundingBox = function expandBoundingBox(bb) {\n var padding = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0;\n bb.x1 -= padding;\n bb.x2 += padding;\n bb.y1 -= padding;\n bb.y2 += padding;\n bb.w = bb.x2 - bb.x1;\n bb.h = bb.y2 - bb.y1;\n return bb;\n};\nvar expandBoundingBoxSides = function expandBoundingBoxSides(bb) {\n var padding = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : [0];\n var top, right, bottom, left;\n if (padding.length === 1) {\n top = right = bottom = left = padding[0];\n } else if (padding.length === 2) {\n top = bottom = padding[0];\n left = right = padding[1];\n } else if (padding.length === 4) {\n var _padding = _slicedToArray(padding, 4);\n top = _padding[0];\n right = _padding[1];\n bottom = _padding[2];\n left = _padding[3];\n }\n bb.x1 -= left;\n bb.x2 += right;\n bb.y1 -= top;\n bb.y2 += bottom;\n bb.w = bb.x2 - bb.x1;\n bb.h = bb.y2 - bb.y1;\n return bb;\n};\n\n// assign the values of bb2 into bb1\nvar assignBoundingBox = function assignBoundingBox(bb1, bb2) {\n bb1.x1 = bb2.x1;\n bb1.y1 = bb2.y1;\n bb1.x2 = bb2.x2;\n bb1.y2 = bb2.y2;\n bb1.w = bb1.x2 - bb1.x1;\n bb1.h = bb1.y2 - bb1.y1;\n};\nvar boundingBoxesIntersect = function boundingBoxesIntersect(bb1, bb2) {\n // case: one bb to right of other\n if (bb1.x1 > bb2.x2) {\n return false;\n }\n if (bb2.x1 > bb1.x2) {\n return false;\n }\n\n // case: one bb to left of other\n if (bb1.x2 < bb2.x1) {\n return false;\n }\n if (bb2.x2 < bb1.x1) {\n return false;\n }\n\n // case: one bb above other\n if (bb1.y2 < bb2.y1) {\n return false;\n }\n if (bb2.y2 < bb1.y1) {\n return false;\n }\n\n // case: one bb below other\n if (bb1.y1 > bb2.y2) {\n return false;\n }\n if (bb2.y1 > bb1.y2) {\n return false;\n }\n\n // otherwise, must have some overlap\n return true;\n};\nvar inBoundingBox = function inBoundingBox(bb, x, y) {\n return bb.x1 <= x && x <= bb.x2 && bb.y1 <= y && y <= bb.y2;\n};\nvar pointInBoundingBox = function pointInBoundingBox(bb, pt) {\n return inBoundingBox(bb, pt.x, pt.y);\n};\nvar boundingBoxInBoundingBox = function boundingBoxInBoundingBox(bb1, bb2) {\n return inBoundingBox(bb1, bb2.x1, bb2.y1) && inBoundingBox(bb1, bb2.x2, bb2.y2);\n};\nvar roundRectangleIntersectLine = function roundRectangleIntersectLine(x, y, nodeX, nodeY, width, height, padding) {\n var radius = arguments.length > 7 && arguments[7] !== undefined ? arguments[7] : 'auto';\n var cornerRadius = radius === 'auto' ? getRoundRectangleRadius(width, height) : radius;\n var halfWidth = width / 2;\n var halfHeight = height / 2;\n cornerRadius = Math.min(cornerRadius, halfWidth, halfHeight);\n var doWidth = cornerRadius !== halfWidth,\n doHeight = cornerRadius !== halfHeight;\n\n // Check intersections with straight line segments\n var straightLineIntersections;\n\n // Top segment, left to right\n if (doWidth) {\n var topStartX = nodeX - halfWidth + cornerRadius - padding;\n var topStartY = nodeY - halfHeight - padding;\n var topEndX = nodeX + halfWidth - cornerRadius + padding;\n var topEndY = topStartY;\n straightLineIntersections = finiteLinesIntersect(x, y, nodeX, nodeY, topStartX, topStartY, topEndX, topEndY, false);\n if (straightLineIntersections.length > 0) {\n return straightLineIntersections;\n }\n }\n\n // Right segment, top to bottom\n if (doHeight) {\n var rightStartX = nodeX + halfWidth + padding;\n var rightStartY = nodeY - halfHeight + cornerRadius - padding;\n var rightEndX = rightStartX;\n var rightEndY = nodeY + halfHeight - cornerRadius + padding;\n straightLineIntersections = finiteLinesIntersect(x, y, nodeX, nodeY, rightStartX, rightStartY, rightEndX, rightEndY, false);\n if (straightLineIntersections.length > 0) {\n return straightLineIntersections;\n }\n }\n\n // Bottom segment, left to right\n if (doWidth) {\n var bottomStartX = nodeX - halfWidth + cornerRadius - padding;\n var bottomStartY = nodeY + halfHeight + padding;\n var bottomEndX = nodeX + halfWidth - cornerRadius + padding;\n var bottomEndY = bottomStartY;\n straightLineIntersections = finiteLinesIntersect(x, y, nodeX, nodeY, bottomStartX, bottomStartY, bottomEndX, bottomEndY, false);\n if (straightLineIntersections.length > 0) {\n return straightLineIntersections;\n }\n }\n\n // Left segment, top to bottom\n if (doHeight) {\n var leftStartX = nodeX - halfWidth - padding;\n var leftStartY = nodeY - halfHeight + cornerRadius - padding;\n var leftEndX = leftStartX;\n var leftEndY = nodeY + halfHeight - cornerRadius + padding;\n straightLineIntersections = finiteLinesIntersect(x, y, nodeX, nodeY, leftStartX, leftStartY, leftEndX, leftEndY, false);\n if (straightLineIntersections.length > 0) {\n return straightLineIntersections;\n }\n }\n\n // Check intersections with arc segments\n var arcIntersections;\n\n // Top Left\n {\n var topLeftCenterX = nodeX - halfWidth + cornerRadius;\n var topLeftCenterY = nodeY - halfHeight + cornerRadius;\n arcIntersections = intersectLineCircle(x, y, nodeX, nodeY, topLeftCenterX, topLeftCenterY, cornerRadius + padding);\n\n // Ensure the intersection is on the desired quarter of the circle\n if (arcIntersections.length > 0 && arcIntersections[0] <= topLeftCenterX && arcIntersections[1] <= topLeftCenterY) {\n return [arcIntersections[0], arcIntersections[1]];\n }\n }\n\n // Top Right\n {\n var topRightCenterX = nodeX + halfWidth - cornerRadius;\n var topRightCenterY = nodeY - halfHeight + cornerRadius;\n arcIntersections = intersectLineCircle(x, y, nodeX, nodeY, topRightCenterX, topRightCenterY, cornerRadius + padding);\n\n // Ensure the intersection is on the desired quarter of the circle\n if (arcIntersections.length > 0 && arcIntersections[0] >= topRightCenterX && arcIntersections[1] <= topRightCenterY) {\n return [arcIntersections[0], arcIntersections[1]];\n }\n }\n\n // Bottom Right\n {\n var bottomRightCenterX = nodeX + halfWidth - cornerRadius;\n var bottomRightCenterY = nodeY + halfHeight - cornerRadius;\n arcIntersections = intersectLineCircle(x, y, nodeX, nodeY, bottomRightCenterX, bottomRightCenterY, cornerRadius + padding);\n\n // Ensure the intersection is on the desired quarter of the circle\n if (arcIntersections.length > 0 && arcIntersections[0] >= bottomRightCenterX && arcIntersections[1] >= bottomRightCenterY) {\n return [arcIntersections[0], arcIntersections[1]];\n }\n }\n\n // Bottom Left\n {\n var bottomLeftCenterX = nodeX - halfWidth + cornerRadius;\n var bottomLeftCenterY = nodeY + halfHeight - cornerRadius;\n arcIntersections = intersectLineCircle(x, y, nodeX, nodeY, bottomLeftCenterX, bottomLeftCenterY, cornerRadius + padding);\n\n // Ensure the intersection is on the desired quarter of the circle\n if (arcIntersections.length > 0 && arcIntersections[0] <= bottomLeftCenterX && arcIntersections[1] >= bottomLeftCenterY) {\n return [arcIntersections[0], arcIntersections[1]];\n }\n }\n return []; // if nothing\n};\nvar inLineVicinity = function inLineVicinity(x, y, lx1, ly1, lx2, ly2, tolerance) {\n var t = tolerance;\n var x1 = Math.min(lx1, lx2);\n var x2 = Math.max(lx1, lx2);\n var y1 = Math.min(ly1, ly2);\n var y2 = Math.max(ly1, ly2);\n return x1 - t <= x && x <= x2 + t && y1 - t <= y && y <= y2 + t;\n};\nvar inBezierVicinity = function inBezierVicinity(x, y, x1, y1, x2, y2, x3, y3, tolerance) {\n var bb = {\n x1: Math.min(x1, x3, x2) - tolerance,\n x2: Math.max(x1, x3, x2) + tolerance,\n y1: Math.min(y1, y3, y2) - tolerance,\n y2: Math.max(y1, y3, y2) + tolerance\n };\n\n // if outside the rough bounding box for the bezier, then it can't be a hit\n if (x < bb.x1 || x > bb.x2 || y < bb.y1 || y > bb.y2) {\n // console.log('bezier out of rough bb')\n return false;\n } else {\n // console.log('do more expensive check');\n return true;\n }\n};\nvar solveQuadratic = function solveQuadratic(a, b, c, val) {\n c -= val;\n var r = b * b - 4 * a * c;\n if (r < 0) {\n return [];\n }\n var sqrtR = Math.sqrt(r);\n var denom = 2 * a;\n var root1 = (-b + sqrtR) / denom;\n var root2 = (-b - sqrtR) / denom;\n return [root1, root2];\n};\nvar solveCubic = function solveCubic(a, b, c, d, result) {\n // Solves a cubic function, returns root in form [r1, i1, r2, i2, r3, i3], where\n // r is the real component, i is the imaginary component\n\n // An implementation of the Cardano method from the year 1545\n // http://en.wikipedia.org/wiki/Cubic_function#The_nature_of_the_roots\n\n var epsilon = 0.00001;\n\n // avoid division by zero while keeping the overall expression close in value\n if (a === 0) {\n a = epsilon;\n }\n b /= a;\n c /= a;\n d /= a;\n var discriminant, q, r, dum1, s, t, term1, r13;\n q = (3.0 * c - b * b) / 9.0;\n r = -(27.0 * d) + b * (9.0 * c - 2.0 * (b * b));\n r /= 54.0;\n discriminant = q * q * q + r * r;\n result[1] = 0;\n term1 = b / 3.0;\n if (discriminant > 0) {\n s = r + Math.sqrt(discriminant);\n s = s < 0 ? -Math.pow(-s, 1.0 / 3.0) : Math.pow(s, 1.0 / 3.0);\n t = r - Math.sqrt(discriminant);\n t = t < 0 ? -Math.pow(-t, 1.0 / 3.0) : Math.pow(t, 1.0 / 3.0);\n result[0] = -term1 + s + t;\n term1 += (s + t) / 2.0;\n result[4] = result[2] = -term1;\n term1 = Math.sqrt(3.0) * (-t + s) / 2;\n result[3] = term1;\n result[5] = -term1;\n return;\n }\n result[5] = result[3] = 0;\n if (discriminant === 0) {\n r13 = r < 0 ? -Math.pow(-r, 1.0 / 3.0) : Math.pow(r, 1.0 / 3.0);\n result[0] = -term1 + 2.0 * r13;\n result[4] = result[2] = -(r13 + term1);\n return;\n }\n q = -q;\n dum1 = q * q * q;\n dum1 = Math.acos(r / Math.sqrt(dum1));\n r13 = 2.0 * Math.sqrt(q);\n result[0] = -term1 + r13 * Math.cos(dum1 / 3.0);\n result[2] = -term1 + r13 * Math.cos((dum1 + 2.0 * Math.PI) / 3.0);\n result[4] = -term1 + r13 * Math.cos((dum1 + 4.0 * Math.PI) / 3.0);\n return;\n};\nvar sqdistToQuadraticBezier = function sqdistToQuadraticBezier(x, y, x1, y1, x2, y2, x3, y3) {\n // Find minimum distance by using the minimum of the distance\n // function between the given point and the curve\n\n // This gives the coefficients of the resulting cubic equation\n // whose roots tell us where a possible minimum is\n // (Coefficients are divided by 4)\n\n var a = 1.0 * x1 * x1 - 4 * x1 * x2 + 2 * x1 * x3 + 4 * x2 * x2 - 4 * x2 * x3 + x3 * x3 + y1 * y1 - 4 * y1 * y2 + 2 * y1 * y3 + 4 * y2 * y2 - 4 * y2 * y3 + y3 * y3;\n var b = 1.0 * 9 * x1 * x2 - 3 * x1 * x1 - 3 * x1 * x3 - 6 * x2 * x2 + 3 * x2 * x3 + 9 * y1 * y2 - 3 * y1 * y1 - 3 * y1 * y3 - 6 * y2 * y2 + 3 * y2 * y3;\n var c = 1.0 * 3 * x1 * x1 - 6 * x1 * x2 + x1 * x3 - x1 * x + 2 * x2 * x2 + 2 * x2 * x - x3 * x + 3 * y1 * y1 - 6 * y1 * y2 + y1 * y3 - y1 * y + 2 * y2 * y2 + 2 * y2 * y - y3 * y;\n var d = 1.0 * x1 * x2 - x1 * x1 + x1 * x - x2 * x + y1 * y2 - y1 * y1 + y1 * y - y2 * y;\n\n // debug(\"coefficients: \" + a / a + \", \" + b / a + \", \" + c / a + \", \" + d / a);\n\n var roots = [];\n\n // Use the cubic solving algorithm\n solveCubic(a, b, c, d, roots);\n var zeroThreshold = 0.0000001;\n var params = [];\n for (var index = 0; index < 6; index += 2) {\n if (Math.abs(roots[index + 1]) < zeroThreshold && roots[index] >= 0 && roots[index] <= 1.0) {\n params.push(roots[index]);\n }\n }\n params.push(1.0);\n params.push(0.0);\n var minDistanceSquared = -1;\n var curX, curY, distSquared;\n for (var i = 0; i < params.length; i++) {\n curX = Math.pow(1.0 - params[i], 2.0) * x1 + 2.0 * (1 - params[i]) * params[i] * x2 + params[i] * params[i] * x3;\n curY = Math.pow(1 - params[i], 2.0) * y1 + 2 * (1.0 - params[i]) * params[i] * y2 + params[i] * params[i] * y3;\n distSquared = Math.pow(curX - x, 2) + Math.pow(curY - y, 2);\n // debug('distance for param ' + params[i] + \": \" + Math.sqrt(distSquared));\n if (minDistanceSquared >= 0) {\n if (distSquared < minDistanceSquared) {\n minDistanceSquared = distSquared;\n }\n } else {\n minDistanceSquared = distSquared;\n }\n }\n return minDistanceSquared;\n};\nvar sqdistToFiniteLine = function sqdistToFiniteLine(x, y, x1, y1, x2, y2) {\n var offset = [x - x1, y - y1];\n var line = [x2 - x1, y2 - y1];\n var lineSq = line[0] * line[0] + line[1] * line[1];\n var hypSq = offset[0] * offset[0] + offset[1] * offset[1];\n var dotProduct = offset[0] * line[0] + offset[1] * line[1];\n var adjSq = dotProduct * dotProduct / lineSq;\n if (dotProduct < 0) {\n return hypSq;\n }\n if (adjSq > lineSq) {\n return (x - x2) * (x - x2) + (y - y2) * (y - y2);\n }\n return hypSq - adjSq;\n};\nvar pointInsidePolygonPoints = function pointInsidePolygonPoints(x, y, points) {\n var x1, y1, x2, y2;\n var y3;\n\n // Intersect with vertical line through (x, y)\n var up = 0;\n // let down = 0;\n for (var i = 0; i < points.length / 2; i++) {\n x1 = points[i * 2];\n y1 = points[i * 2 + 1];\n if (i + 1 < points.length / 2) {\n x2 = points[(i + 1) * 2];\n y2 = points[(i + 1) * 2 + 1];\n } else {\n x2 = points[(i + 1 - points.length / 2) * 2];\n y2 = points[(i + 1 - points.length / 2) * 2 + 1];\n }\n if (x1 == x && x2 == x) ; else if (x1 >= x && x >= x2 || x1 <= x && x <= x2) {\n y3 = (x - x1) / (x2 - x1) * (y2 - y1) + y1;\n if (y3 > y) {\n up++;\n }\n\n // if( y3 < y ){\n // down++;\n // }\n } else {\n continue;\n }\n }\n if (up % 2 === 0) {\n return false;\n } else {\n return true;\n }\n};\nvar pointInsidePolygon = function pointInsidePolygon(x, y, basePoints, centerX, centerY, width, height, direction, padding) {\n var transformedPoints = new Array(basePoints.length);\n\n // Gives negative angle\n var angle;\n if (direction[0] != null) {\n angle = Math.atan(direction[1] / direction[0]);\n if (direction[0] < 0) {\n angle = angle + Math.PI / 2;\n } else {\n angle = -angle - Math.PI / 2;\n }\n } else {\n angle = direction;\n }\n var cos = Math.cos(-angle);\n var sin = Math.sin(-angle);\n\n // console.log(\"base: \" + basePoints);\n for (var i = 0; i < transformedPoints.length / 2; i++) {\n transformedPoints[i * 2] = width / 2 * (basePoints[i * 2] * cos - basePoints[i * 2 + 1] * sin);\n transformedPoints[i * 2 + 1] = height / 2 * (basePoints[i * 2 + 1] * cos + basePoints[i * 2] * sin);\n transformedPoints[i * 2] += centerX;\n transformedPoints[i * 2 + 1] += centerY;\n }\n var points;\n if (padding > 0) {\n var expandedLineSet = expandPolygon(transformedPoints, -padding);\n points = joinLines(expandedLineSet);\n } else {\n points = transformedPoints;\n }\n return pointInsidePolygonPoints(x, y, points);\n};\nvar pointInsideRoundPolygon = function pointInsideRoundPolygon(x, y, basePoints, centerX, centerY, width, height, corners) {\n var cutPolygonPoints = new Array(basePoints.length * 2);\n for (var i = 0; i < corners.length; i++) {\n var corner = corners[i];\n cutPolygonPoints[i * 4 + 0] = corner.startX;\n cutPolygonPoints[i * 4 + 1] = corner.startY;\n cutPolygonPoints[i * 4 + 2] = corner.stopX;\n cutPolygonPoints[i * 4 + 3] = corner.stopY;\n var squaredDistance = Math.pow(corner.cx - x, 2) + Math.pow(corner.cy - y, 2);\n if (squaredDistance <= Math.pow(corner.radius, 2)) {\n return true;\n }\n }\n return pointInsidePolygonPoints(x, y, cutPolygonPoints);\n};\nvar joinLines = function joinLines(lineSet) {\n var vertices = new Array(lineSet.length / 2);\n var currentLineStartX, currentLineStartY, currentLineEndX, currentLineEndY;\n var nextLineStartX, nextLineStartY, nextLineEndX, nextLineEndY;\n for (var i = 0; i < lineSet.length / 4; i++) {\n currentLineStartX = lineSet[i * 4];\n currentLineStartY = lineSet[i * 4 + 1];\n currentLineEndX = lineSet[i * 4 + 2];\n currentLineEndY = lineSet[i * 4 + 3];\n if (i < lineSet.length / 4 - 1) {\n nextLineStartX = lineSet[(i + 1) * 4];\n nextLineStartY = lineSet[(i + 1) * 4 + 1];\n nextLineEndX = lineSet[(i + 1) * 4 + 2];\n nextLineEndY = lineSet[(i + 1) * 4 + 3];\n } else {\n nextLineStartX = lineSet[0];\n nextLineStartY = lineSet[1];\n nextLineEndX = lineSet[2];\n nextLineEndY = lineSet[3];\n }\n var intersection = finiteLinesIntersect(currentLineStartX, currentLineStartY, currentLineEndX, currentLineEndY, nextLineStartX, nextLineStartY, nextLineEndX, nextLineEndY, true);\n vertices[i * 2] = intersection[0];\n vertices[i * 2 + 1] = intersection[1];\n }\n return vertices;\n};\nvar expandPolygon = function expandPolygon(points, pad) {\n var expandedLineSet = new Array(points.length * 2);\n var currentPointX, currentPointY, nextPointX, nextPointY;\n for (var i = 0; i < points.length / 2; i++) {\n currentPointX = points[i * 2];\n currentPointY = points[i * 2 + 1];\n if (i < points.length / 2 - 1) {\n nextPointX = points[(i + 1) * 2];\n nextPointY = points[(i + 1) * 2 + 1];\n } else {\n nextPointX = points[0];\n nextPointY = points[1];\n }\n\n // Current line: [currentPointX, currentPointY] to [nextPointX, nextPointY]\n\n // Assume CCW polygon winding\n\n var offsetX = nextPointY - currentPointY;\n var offsetY = -(nextPointX - currentPointX);\n\n // Normalize\n var offsetLength = Math.sqrt(offsetX * offsetX + offsetY * offsetY);\n var normalizedOffsetX = offsetX / offsetLength;\n var normalizedOffsetY = offsetY / offsetLength;\n expandedLineSet[i * 4] = currentPointX + normalizedOffsetX * pad;\n expandedLineSet[i * 4 + 1] = currentPointY + normalizedOffsetY * pad;\n expandedLineSet[i * 4 + 2] = nextPointX + normalizedOffsetX * pad;\n expandedLineSet[i * 4 + 3] = nextPointY + normalizedOffsetY * pad;\n }\n return expandedLineSet;\n};\nvar intersectLineEllipse = function intersectLineEllipse(x, y, centerX, centerY, ellipseWradius, ellipseHradius) {\n var dispX = centerX - x;\n var dispY = centerY - y;\n dispX /= ellipseWradius;\n dispY /= ellipseHradius;\n var len = Math.sqrt(dispX * dispX + dispY * dispY);\n var newLength = len - 1;\n if (newLength < 0) {\n return [];\n }\n var lenProportion = newLength / len;\n return [(centerX - x) * lenProportion + x, (centerY - y) * lenProportion + y];\n};\nvar checkInEllipse = function checkInEllipse(x, y, width, height, centerX, centerY, padding) {\n x -= centerX;\n y -= centerY;\n x /= width / 2 + padding;\n y /= height / 2 + padding;\n return x * x + y * y <= 1;\n};\n\n// Returns intersections of increasing distance from line's start point\nvar intersectLineCircle = function intersectLineCircle(x1, y1, x2, y2, centerX, centerY, radius) {\n // Calculate d, direction vector of line\n var d = [x2 - x1, y2 - y1]; // Direction vector of line\n var f = [x1 - centerX, y1 - centerY];\n var a = d[0] * d[0] + d[1] * d[1];\n var b = 2 * (f[0] * d[0] + f[1] * d[1]);\n var c = f[0] * f[0] + f[1] * f[1] - radius * radius;\n var discriminant = b * b - 4 * a * c;\n if (discriminant < 0) {\n return [];\n }\n var t1 = (-b + Math.sqrt(discriminant)) / (2 * a);\n var t2 = (-b - Math.sqrt(discriminant)) / (2 * a);\n var tMin = Math.min(t1, t2);\n var tMax = Math.max(t1, t2);\n var inRangeParams = [];\n if (tMin >= 0 && tMin <= 1) {\n inRangeParams.push(tMin);\n }\n if (tMax >= 0 && tMax <= 1) {\n inRangeParams.push(tMax);\n }\n if (inRangeParams.length === 0) {\n return [];\n }\n var nearIntersectionX = inRangeParams[0] * d[0] + x1;\n var nearIntersectionY = inRangeParams[0] * d[1] + y1;\n if (inRangeParams.length > 1) {\n if (inRangeParams[0] == inRangeParams[1]) {\n return [nearIntersectionX, nearIntersectionY];\n } else {\n var farIntersectionX = inRangeParams[1] * d[0] + x1;\n var farIntersectionY = inRangeParams[1] * d[1] + y1;\n return [nearIntersectionX, nearIntersectionY, farIntersectionX, farIntersectionY];\n }\n } else {\n return [nearIntersectionX, nearIntersectionY];\n }\n};\nvar midOfThree = function midOfThree(a, b, c) {\n if (b <= a && a <= c || c <= a && a <= b) {\n return a;\n } else if (a <= b && b <= c || c <= b && b <= a) {\n return b;\n } else {\n return c;\n }\n};\n\n// (x1,y1)=>(x2,y2) intersect with (x3,y3)=>(x4,y4)\nvar finiteLinesIntersect = function finiteLinesIntersect(x1, y1, x2, y2, x3, y3, x4, y4, infiniteLines) {\n var dx13 = x1 - x3;\n var dx21 = x2 - x1;\n var dx43 = x4 - x3;\n var dy13 = y1 - y3;\n var dy21 = y2 - y1;\n var dy43 = y4 - y3;\n var ua_t = dx43 * dy13 - dy43 * dx13;\n var ub_t = dx21 * dy13 - dy21 * dx13;\n var u_b = dy43 * dx21 - dx43 * dy21;\n if (u_b !== 0) {\n var ua = ua_t / u_b;\n var ub = ub_t / u_b;\n var flptThreshold = 0.001;\n var _min = 0 - flptThreshold;\n var _max = 1 + flptThreshold;\n if (_min <= ua && ua <= _max && _min <= ub && ub <= _max) {\n return [x1 + ua * dx21, y1 + ua * dy21];\n } else {\n if (!infiniteLines) {\n return [];\n } else {\n return [x1 + ua * dx21, y1 + ua * dy21];\n }\n }\n } else {\n if (ua_t === 0 || ub_t === 0) {\n // Parallel, coincident lines. Check if overlap\n\n // Check endpoint of second line\n if (midOfThree(x1, x2, x4) === x4) {\n return [x4, y4];\n }\n\n // Check start point of second line\n if (midOfThree(x1, x2, x3) === x3) {\n return [x3, y3];\n }\n\n // Endpoint of first line\n if (midOfThree(x3, x4, x2) === x2) {\n return [x2, y2];\n }\n return [];\n } else {\n // Parallel, non-coincident\n return [];\n }\n }\n};\n\n// math.polygonIntersectLine( x, y, basePoints, centerX, centerY, width, height, padding )\n// intersect a node polygon (pts transformed)\n//\n// math.polygonIntersectLine( x, y, basePoints, centerX, centerY )\n// intersect the points (no transform)\nvar polygonIntersectLine = function polygonIntersectLine(x, y, basePoints, centerX, centerY, width, height, padding) {\n var intersections = [];\n var intersection;\n var transformedPoints = new Array(basePoints.length);\n var doTransform = true;\n if (width == null) {\n doTransform = false;\n }\n var points;\n if (doTransform) {\n for (var i = 0; i < transformedPoints.length / 2; i++) {\n transformedPoints[i * 2] = basePoints[i * 2] * width + centerX;\n transformedPoints[i * 2 + 1] = basePoints[i * 2 + 1] * height + centerY;\n }\n if (padding > 0) {\n var expandedLineSet = expandPolygon(transformedPoints, -padding);\n points = joinLines(expandedLineSet);\n } else {\n points = transformedPoints;\n }\n } else {\n points = basePoints;\n }\n var currentX, currentY, nextX, nextY;\n for (var _i2 = 0; _i2 < points.length / 2; _i2++) {\n currentX = points[_i2 * 2];\n currentY = points[_i2 * 2 + 1];\n if (_i2 < points.length / 2 - 1) {\n nextX = points[(_i2 + 1) * 2];\n nextY = points[(_i2 + 1) * 2 + 1];\n } else {\n nextX = points[0];\n nextY = points[1];\n }\n intersection = finiteLinesIntersect(x, y, centerX, centerY, currentX, currentY, nextX, nextY);\n if (intersection.length !== 0) {\n intersections.push(intersection[0], intersection[1]);\n }\n }\n return intersections;\n};\nvar roundPolygonIntersectLine = function roundPolygonIntersectLine(x, y, basePoints, centerX, centerY, width, height, padding, corners) {\n var intersections = [];\n var intersection;\n var lines = new Array(basePoints.length * 2);\n corners.forEach(function (corner, i) {\n if (i === 0) {\n lines[lines.length - 2] = corner.startX;\n lines[lines.length - 1] = corner.startY;\n } else {\n lines[i * 4 - 2] = corner.startX;\n lines[i * 4 - 1] = corner.startY;\n }\n lines[i * 4] = corner.stopX;\n lines[i * 4 + 1] = corner.stopY;\n intersection = intersectLineCircle(x, y, centerX, centerY, corner.cx, corner.cy, corner.radius);\n if (intersection.length !== 0) {\n intersections.push(intersection[0], intersection[1]);\n }\n });\n for (var i = 0; i < lines.length / 4; i++) {\n intersection = finiteLinesIntersect(x, y, centerX, centerY, lines[i * 4], lines[i * 4 + 1], lines[i * 4 + 2], lines[i * 4 + 3], false);\n if (intersection.length !== 0) {\n intersections.push(intersection[0], intersection[1]);\n }\n }\n if (intersections.length > 2) {\n var lowestIntersection = [intersections[0], intersections[1]];\n var lowestSquaredDistance = Math.pow(lowestIntersection[0] - x, 2) + Math.pow(lowestIntersection[1] - y, 2);\n for (var _i3 = 1; _i3 < intersections.length / 2; _i3++) {\n var squaredDistance = Math.pow(intersections[_i3 * 2] - x, 2) + Math.pow(intersections[_i3 * 2 + 1] - y, 2);\n if (squaredDistance <= lowestSquaredDistance) {\n lowestIntersection[0] = intersections[_i3 * 2];\n lowestIntersection[1] = intersections[_i3 * 2 + 1];\n lowestSquaredDistance = squaredDistance;\n }\n }\n return lowestIntersection;\n }\n return intersections;\n};\nvar shortenIntersection = function shortenIntersection(intersection, offset, amount) {\n var disp = [intersection[0] - offset[0], intersection[1] - offset[1]];\n var length = Math.sqrt(disp[0] * disp[0] + disp[1] * disp[1]);\n var lenRatio = (length - amount) / length;\n if (lenRatio < 0) {\n lenRatio = 0.00001;\n }\n return [offset[0] + lenRatio * disp[0], offset[1] + lenRatio * disp[1]];\n};\nvar generateUnitNgonPointsFitToSquare = function generateUnitNgonPointsFitToSquare(sides, rotationRadians) {\n var points = generateUnitNgonPoints(sides, rotationRadians);\n points = fitPolygonToSquare(points);\n return points;\n};\nvar fitPolygonToSquare = function fitPolygonToSquare(points) {\n var x, y;\n var sides = points.length / 2;\n var minX = Infinity,\n minY = Infinity,\n maxX = -Infinity,\n maxY = -Infinity;\n for (var i = 0; i < sides; i++) {\n x = points[2 * i];\n y = points[2 * i + 1];\n minX = Math.min(minX, x);\n maxX = Math.max(maxX, x);\n minY = Math.min(minY, y);\n maxY = Math.max(maxY, y);\n }\n\n // stretch factors\n var sx = 2 / (maxX - minX);\n var sy = 2 / (maxY - minY);\n for (var _i4 = 0; _i4 < sides; _i4++) {\n x = points[2 * _i4] = points[2 * _i4] * sx;\n y = points[2 * _i4 + 1] = points[2 * _i4 + 1] * sy;\n minX = Math.min(minX, x);\n maxX = Math.max(maxX, x);\n minY = Math.min(minY, y);\n maxY = Math.max(maxY, y);\n }\n if (minY < -1) {\n for (var _i5 = 0; _i5 < sides; _i5++) {\n y = points[2 * _i5 + 1] = points[2 * _i5 + 1] + (-1 - minY);\n }\n }\n return points;\n};\nvar generateUnitNgonPoints = function generateUnitNgonPoints(sides, rotationRadians) {\n var increment = 1.0 / sides * 2 * Math.PI;\n var startAngle = sides % 2 === 0 ? Math.PI / 2.0 + increment / 2.0 : Math.PI / 2.0;\n startAngle += rotationRadians;\n var points = new Array(sides * 2);\n var currentAngle;\n for (var i = 0; i < sides; i++) {\n currentAngle = i * increment + startAngle;\n points[2 * i] = Math.cos(currentAngle); // x\n points[2 * i + 1] = Math.sin(-currentAngle); // y\n }\n return points;\n};\n\n// Set the default radius, unless half of width or height is smaller than default\nvar getRoundRectangleRadius = function getRoundRectangleRadius(width, height) {\n return Math.min(width / 4, height / 4, 8);\n};\n\n// Set the default radius\nvar getRoundPolygonRadius = function getRoundPolygonRadius(width, height) {\n return Math.min(width / 10, height / 10, 8);\n};\nvar getCutRectangleCornerLength = function getCutRectangleCornerLength() {\n return 8;\n};\nvar bezierPtsToQuadCoeff = function bezierPtsToQuadCoeff(p0, p1, p2) {\n return [p0 - 2 * p1 + p2, 2 * (p1 - p0), p0];\n};\n\n// get curve width, height, and control point position offsets as a percentage of node height / width\nvar getBarrelCurveConstants = function getBarrelCurveConstants(width, height) {\n return {\n heightOffset: Math.min(15, 0.05 * height),\n widthOffset: Math.min(100, 0.25 * width),\n ctrlPtOffsetPct: 0.05\n };\n};\n\nvar pageRankDefaults = defaults$g({\n dampingFactor: 0.8,\n precision: 0.000001,\n iterations: 200,\n weight: function weight(edge) {\n return 1;\n }\n});\nvar elesfn$o = {\n pageRank: function pageRank(options) {\n var _pageRankDefaults = pageRankDefaults(options),\n dampingFactor = _pageRankDefaults.dampingFactor,\n precision = _pageRankDefaults.precision,\n iterations = _pageRankDefaults.iterations,\n weight = _pageRankDefaults.weight;\n var cy = this._private.cy;\n var _this$byGroup = this.byGroup(),\n nodes = _this$byGroup.nodes,\n edges = _this$byGroup.edges;\n var numNodes = nodes.length;\n var numNodesSqd = numNodes * numNodes;\n var numEdges = edges.length;\n\n // Construct transposed adjacency matrix\n // First lets have a zeroed matrix of the right size\n // We'll also keep track of the sum of each column\n var matrix = new Array(numNodesSqd);\n var columnSum = new Array(numNodes);\n var additionalProb = (1 - dampingFactor) / numNodes;\n\n // Create null matrix\n for (var i = 0; i < numNodes; i++) {\n for (var j = 0; j < numNodes; j++) {\n var n = i * numNodes + j;\n matrix[n] = 0;\n }\n columnSum[i] = 0;\n }\n\n // Now, process edges\n for (var _i = 0; _i < numEdges; _i++) {\n var edge = edges[_i];\n var srcId = edge.data('source');\n var tgtId = edge.data('target');\n\n // Don't include loops in the matrix\n if (srcId === tgtId) {\n continue;\n }\n var s = nodes.indexOfId(srcId);\n var t = nodes.indexOfId(tgtId);\n var w = weight(edge);\n var _n = t * numNodes + s;\n\n // Update matrix\n matrix[_n] += w;\n\n // Update column sum\n columnSum[s] += w;\n }\n\n // Add additional probability based on damping factor\n // Also, take into account columns that have sum = 0\n var p = 1.0 / numNodes + additionalProb; // Shorthand\n\n // Traverse matrix, column by column\n for (var _j = 0; _j < numNodes; _j++) {\n if (columnSum[_j] === 0) {\n // No 'links' out from node jth, assume equal probability for each possible node\n for (var _i2 = 0; _i2 < numNodes; _i2++) {\n var _n2 = _i2 * numNodes + _j;\n matrix[_n2] = p;\n }\n } else {\n // Node jth has outgoing link, compute normalized probabilities\n for (var _i3 = 0; _i3 < numNodes; _i3++) {\n var _n3 = _i3 * numNodes + _j;\n matrix[_n3] = matrix[_n3] / columnSum[_j] + additionalProb;\n }\n }\n }\n\n // Compute dominant eigenvector using power method\n var eigenvector = new Array(numNodes);\n var temp = new Array(numNodes);\n var previous;\n\n // Start with a vector of all 1's\n // Also, initialize a null vector which will be used as shorthand\n for (var _i4 = 0; _i4 < numNodes; _i4++) {\n eigenvector[_i4] = 1;\n }\n for (var iter = 0; iter < iterations; iter++) {\n // Temp array with all 0's\n for (var _i5 = 0; _i5 < numNodes; _i5++) {\n temp[_i5] = 0;\n }\n\n // Multiply matrix with previous result\n for (var _i6 = 0; _i6 < numNodes; _i6++) {\n for (var _j2 = 0; _j2 < numNodes; _j2++) {\n var _n4 = _i6 * numNodes + _j2;\n temp[_i6] += matrix[_n4] * eigenvector[_j2];\n }\n }\n inPlaceSumNormalize(temp);\n previous = eigenvector;\n eigenvector = temp;\n temp = previous;\n var diff = 0;\n // Compute difference (squared module) of both vectors\n for (var _i7 = 0; _i7 < numNodes; _i7++) {\n var delta = previous[_i7] - eigenvector[_i7];\n diff += delta * delta;\n }\n\n // If difference is less than the desired threshold, stop iterating\n if (diff < precision) {\n break;\n }\n }\n\n // Construct result\n var res = {\n rank: function rank(node) {\n node = cy.collection(node)[0];\n return eigenvector[nodes.indexOf(node)];\n }\n };\n return res;\n } // pageRank\n}; // elesfn\n\nvar defaults$f = defaults$g({\n root: null,\n weight: function weight(edge) {\n return 1;\n },\n directed: false,\n alpha: 0\n});\nvar elesfn$n = {\n degreeCentralityNormalized: function degreeCentralityNormalized(options) {\n options = defaults$f(options);\n var cy = this.cy();\n var nodes = this.nodes();\n var numNodes = nodes.length;\n if (!options.directed) {\n var degrees = {};\n var maxDegree = 0;\n for (var i = 0; i < numNodes; i++) {\n var node = nodes[i];\n\n // add current node to the current options object and call degreeCentrality\n options.root = node;\n var currDegree = this.degreeCentrality(options);\n if (maxDegree < currDegree.degree) {\n maxDegree = currDegree.degree;\n }\n degrees[node.id()] = currDegree.degree;\n }\n return {\n degree: function degree(node) {\n if (maxDegree === 0) {\n return 0;\n }\n if (string(node)) {\n // from is a selector string\n node = cy.filter(node);\n }\n return degrees[node.id()] / maxDegree;\n }\n };\n } else {\n var indegrees = {};\n var outdegrees = {};\n var maxIndegree = 0;\n var maxOutdegree = 0;\n for (var _i = 0; _i < numNodes; _i++) {\n var _node = nodes[_i];\n var id = _node.id();\n\n // add current node to the current options object and call degreeCentrality\n options.root = _node;\n var _currDegree = this.degreeCentrality(options);\n if (maxIndegree < _currDegree.indegree) maxIndegree = _currDegree.indegree;\n if (maxOutdegree < _currDegree.outdegree) maxOutdegree = _currDegree.outdegree;\n indegrees[id] = _currDegree.indegree;\n outdegrees[id] = _currDegree.outdegree;\n }\n return {\n indegree: function indegree(node) {\n if (maxIndegree == 0) {\n return 0;\n }\n if (string(node)) {\n // from is a selector string\n node = cy.filter(node);\n }\n return indegrees[node.id()] / maxIndegree;\n },\n outdegree: function outdegree(node) {\n if (maxOutdegree === 0) {\n return 0;\n }\n if (string(node)) {\n // from is a selector string\n node = cy.filter(node);\n }\n return outdegrees[node.id()] / maxOutdegree;\n }\n };\n }\n },\n // degreeCentralityNormalized\n\n // Implemented from the algorithm in Opsahl's paper\n // \"Node centrality in weighted networks: Generalizing degree and shortest paths\"\n // check the heading 2 \"Degree\"\n degreeCentrality: function degreeCentrality(options) {\n options = defaults$f(options);\n var cy = this.cy();\n var callingEles = this;\n var _options = options,\n root = _options.root,\n weight = _options.weight,\n directed = _options.directed,\n alpha = _options.alpha;\n root = cy.collection(root)[0];\n if (!directed) {\n var connEdges = root.connectedEdges().intersection(callingEles);\n var k = connEdges.length;\n var s = 0;\n\n // Now, sum edge weights\n for (var i = 0; i < connEdges.length; i++) {\n s += weight(connEdges[i]);\n }\n return {\n degree: Math.pow(k, 1 - alpha) * Math.pow(s, alpha)\n };\n } else {\n var edges = root.connectedEdges();\n var incoming = edges.filter(function (edge) {\n return edge.target().same(root) && callingEles.has(edge);\n });\n var outgoing = edges.filter(function (edge) {\n return edge.source().same(root) && callingEles.has(edge);\n });\n var k_in = incoming.length;\n var k_out = outgoing.length;\n var s_in = 0;\n var s_out = 0;\n\n // Now, sum incoming edge weights\n for (var _i2 = 0; _i2 < incoming.length; _i2++) {\n s_in += weight(incoming[_i2]);\n }\n\n // Now, sum outgoing edge weights\n for (var _i3 = 0; _i3 < outgoing.length; _i3++) {\n s_out += weight(outgoing[_i3]);\n }\n return {\n indegree: Math.pow(k_in, 1 - alpha) * Math.pow(s_in, alpha),\n outdegree: Math.pow(k_out, 1 - alpha) * Math.pow(s_out, alpha)\n };\n }\n } // degreeCentrality\n}; // elesfn\n\n// nice, short mathematical alias\nelesfn$n.dc = elesfn$n.degreeCentrality;\nelesfn$n.dcn = elesfn$n.degreeCentralityNormalised = elesfn$n.degreeCentralityNormalized;\n\nvar defaults$e = defaults$g({\n harmonic: true,\n weight: function weight() {\n return 1;\n },\n directed: false,\n root: null\n});\nvar elesfn$m = {\n closenessCentralityNormalized: function closenessCentralityNormalized(options) {\n var _defaults = defaults$e(options),\n harmonic = _defaults.harmonic,\n weight = _defaults.weight,\n directed = _defaults.directed;\n var cy = this.cy();\n var closenesses = {};\n var maxCloseness = 0;\n var nodes = this.nodes();\n var fw = this.floydWarshall({\n weight: weight,\n directed: directed\n });\n\n // Compute closeness for every node and find the maximum closeness\n for (var i = 0; i < nodes.length; i++) {\n var currCloseness = 0;\n var node_i = nodes[i];\n for (var j = 0; j < nodes.length; j++) {\n if (i !== j) {\n var d = fw.distance(node_i, nodes[j]);\n if (harmonic) {\n currCloseness += 1 / d;\n } else {\n currCloseness += d;\n }\n }\n }\n if (!harmonic) {\n currCloseness = 1 / currCloseness;\n }\n if (maxCloseness < currCloseness) {\n maxCloseness = currCloseness;\n }\n closenesses[node_i.id()] = currCloseness;\n }\n return {\n closeness: function closeness(node) {\n if (maxCloseness == 0) {\n return 0;\n }\n if (string(node)) {\n // from is a selector string\n node = cy.filter(node)[0].id();\n } else {\n // from is a node\n node = node.id();\n }\n return closenesses[node] / maxCloseness;\n }\n };\n },\n // Implemented from pseudocode from wikipedia\n closenessCentrality: function closenessCentrality(options) {\n var _defaults2 = defaults$e(options),\n root = _defaults2.root,\n weight = _defaults2.weight,\n directed = _defaults2.directed,\n harmonic = _defaults2.harmonic;\n root = this.filter(root)[0];\n\n // we need distance from this node to every other node\n var dijkstra = this.dijkstra({\n root: root,\n weight: weight,\n directed: directed\n });\n var totalDistance = 0;\n var nodes = this.nodes();\n for (var i = 0; i < nodes.length; i++) {\n var n = nodes[i];\n if (!n.same(root)) {\n var d = dijkstra.distanceTo(n);\n if (harmonic) {\n totalDistance += 1 / d;\n } else {\n totalDistance += d;\n }\n }\n }\n return harmonic ? totalDistance : 1 / totalDistance;\n } // closenessCentrality\n}; // elesfn\n\n// nice, short mathematical alias\nelesfn$m.cc = elesfn$m.closenessCentrality;\nelesfn$m.ccn = elesfn$m.closenessCentralityNormalised = elesfn$m.closenessCentralityNormalized;\n\nvar defaults$d = defaults$g({\n weight: null,\n directed: false\n});\nvar elesfn$l = {\n // Implemented from the algorithm in the paper \"On Variants of Shortest-Path Betweenness Centrality and their Generic Computation\" by Ulrik Brandes\n betweennessCentrality: function betweennessCentrality(options) {\n var _defaults = defaults$d(options),\n directed = _defaults.directed,\n weight = _defaults.weight;\n var weighted = weight != null;\n var cy = this.cy();\n\n // starting\n var V = this.nodes();\n var A = {};\n var _C = {};\n var max = 0;\n var C = {\n set: function set(key, val) {\n _C[key] = val;\n if (val > max) {\n max = val;\n }\n },\n get: function get(key) {\n return _C[key];\n }\n };\n\n // A contains the neighborhoods of every node\n for (var i = 0; i < V.length; i++) {\n var v = V[i];\n var vid = v.id();\n if (directed) {\n A[vid] = v.outgoers().nodes(); // get outgoers of every node\n } else {\n A[vid] = v.openNeighborhood().nodes(); // get neighbors of every node\n }\n C.set(vid, 0);\n }\n var _loop = function _loop() {\n var sid = V[s].id();\n var S = []; // stack\n var P = {};\n var g = {};\n var d = {};\n var Q = new Heap(function (a, b) {\n return d[a] - d[b];\n }); // queue\n\n // init dictionaries\n for (var _i = 0; _i < V.length; _i++) {\n var _vid = V[_i].id();\n P[_vid] = [];\n g[_vid] = 0;\n d[_vid] = Infinity;\n }\n g[sid] = 1; // sigma\n d[sid] = 0; // distance to s\n\n Q.push(sid);\n while (!Q.empty()) {\n var _v = Q.pop();\n S.push(_v);\n if (weighted) {\n for (var j = 0; j < A[_v].length; j++) {\n var w = A[_v][j];\n var vEle = cy.getElementById(_v);\n var edge = undefined;\n if (vEle.edgesTo(w).length > 0) {\n edge = vEle.edgesTo(w)[0];\n } else {\n edge = w.edgesTo(vEle)[0];\n }\n var edgeWeight = weight(edge);\n w = w.id();\n if (d[w] > d[_v] + edgeWeight) {\n d[w] = d[_v] + edgeWeight;\n if (Q.nodes.indexOf(w) < 0) {\n //if w is not in Q\n Q.push(w);\n } else {\n // update position if w is in Q\n Q.updateItem(w);\n }\n g[w] = 0;\n P[w] = [];\n }\n if (d[w] == d[_v] + edgeWeight) {\n g[w] = g[w] + g[_v];\n P[w].push(_v);\n }\n }\n } else {\n for (var _j = 0; _j < A[_v].length; _j++) {\n var _w = A[_v][_j].id();\n if (d[_w] == Infinity) {\n Q.push(_w);\n d[_w] = d[_v] + 1;\n }\n if (d[_w] == d[_v] + 1) {\n g[_w] = g[_w] + g[_v];\n P[_w].push(_v);\n }\n }\n }\n }\n var e = {};\n for (var _i2 = 0; _i2 < V.length; _i2++) {\n e[V[_i2].id()] = 0;\n }\n while (S.length > 0) {\n var _w2 = S.pop();\n for (var _j2 = 0; _j2 < P[_w2].length; _j2++) {\n var _v2 = P[_w2][_j2];\n e[_v2] = e[_v2] + g[_v2] / g[_w2] * (1 + e[_w2]);\n }\n if (_w2 != V[s].id()) {\n C.set(_w2, C.get(_w2) + e[_w2]);\n }\n }\n };\n for (var s = 0; s < V.length; s++) {\n _loop();\n }\n var ret = {\n betweenness: function betweenness(node) {\n var id = cy.collection(node).id();\n return C.get(id);\n },\n betweennessNormalized: function betweennessNormalized(node) {\n if (max == 0) {\n return 0;\n }\n var id = cy.collection(node).id();\n return C.get(id) / max;\n }\n };\n\n // alias\n ret.betweennessNormalised = ret.betweennessNormalized;\n return ret;\n } // betweennessCentrality\n}; // elesfn\n\n// nice, short mathematical alias\nelesfn$l.bc = elesfn$l.betweennessCentrality;\n\n// Implemented by Zoe Xi @zoexi for GSOC 2016\n// https://github.com/cytoscape/cytoscape.js-markov-cluster\n\n\n/* eslint-disable no-unused-vars */\nvar defaults$c = defaults$g({\n expandFactor: 2,\n // affects time of computation and cluster granularity to some extent: M * M\n inflateFactor: 2,\n // affects cluster granularity (the greater the value, the more clusters): M(i,j) / E(j)\n multFactor: 1,\n // optional self loops for each node. Use a neutral value to improve cluster computations.\n maxIterations: 20,\n // maximum number of iterations of the MCL algorithm in a single run\n attributes: [\n // attributes/features used to group nodes, ie. similarity values between nodes\n function (edge) {\n return 1;\n }]\n});\n/* eslint-enable */\n\nvar setOptions$3 = function setOptions(options) {\n return defaults$c(options);\n};\n/* eslint-enable */\n\nvar getSimilarity$1 = function getSimilarity(edge, attributes) {\n var total = 0;\n for (var i = 0; i < attributes.length; i++) {\n total += attributes[i](edge);\n }\n return total;\n};\nvar addLoops = function addLoops(M, n, val) {\n for (var i = 0; i < n; i++) {\n M[i * n + i] = val;\n }\n};\nvar normalize = function normalize(M, n) {\n var sum;\n for (var col = 0; col < n; col++) {\n sum = 0;\n for (var row = 0; row < n; row++) {\n sum += M[row * n + col];\n }\n for (var _row = 0; _row < n; _row++) {\n M[_row * n + col] = M[_row * n + col] / sum;\n }\n }\n};\n\n// TODO: blocked matrix multiplication?\nvar mmult = function mmult(A, B, n) {\n var C = new Array(n * n);\n for (var i = 0; i < n; i++) {\n for (var j = 0; j < n; j++) {\n C[i * n + j] = 0;\n }\n for (var k = 0; k < n; k++) {\n for (var _j = 0; _j < n; _j++) {\n C[i * n + _j] += A[i * n + k] * B[k * n + _j];\n }\n }\n }\n return C;\n};\nvar expand = function expand(M, n, expandFactor /** power **/) {\n var _M = M.slice(0);\n for (var p = 1; p < expandFactor; p++) {\n M = mmult(M, _M, n);\n }\n return M;\n};\nvar inflate = function inflate(M, n, inflateFactor /** r **/) {\n var _M = new Array(n * n);\n\n // M(i,j) ^ inflatePower\n for (var i = 0; i < n * n; i++) {\n _M[i] = Math.pow(M[i], inflateFactor);\n }\n normalize(_M, n);\n return _M;\n};\nvar hasConverged = function hasConverged(M, _M, n2, roundFactor) {\n // Check that both matrices have the same elements (i,j)\n for (var i = 0; i < n2; i++) {\n var v1 = Math.round(M[i] * Math.pow(10, roundFactor)) / Math.pow(10, roundFactor); // truncate to 'roundFactor' decimal places\n var v2 = Math.round(_M[i] * Math.pow(10, roundFactor)) / Math.pow(10, roundFactor);\n if (v1 !== v2) {\n return false;\n }\n }\n return true;\n};\nvar assign$2 = function assign(M, n, nodes, cy) {\n var clusters = [];\n for (var i = 0; i < n; i++) {\n var cluster = [];\n for (var j = 0; j < n; j++) {\n // Row-wise attractors and elements that they attract belong in same cluster\n if (Math.round(M[i * n + j] * 1000) / 1000 > 0) {\n cluster.push(nodes[j]);\n }\n }\n if (cluster.length !== 0) {\n clusters.push(cy.collection(cluster));\n }\n }\n return clusters;\n};\nvar isDuplicate = function isDuplicate(c1, c2) {\n for (var i = 0; i < c1.length; i++) {\n if (!c2[i] || c1[i].id() !== c2[i].id()) {\n return false;\n }\n }\n return true;\n};\nvar removeDuplicates = function removeDuplicates(clusters) {\n for (var i = 0; i < clusters.length; i++) {\n for (var j = 0; j < clusters.length; j++) {\n if (i != j && isDuplicate(clusters[i], clusters[j])) {\n clusters.splice(j, 1);\n }\n }\n }\n return clusters;\n};\nvar markovClustering = function markovClustering(options) {\n var nodes = this.nodes();\n var edges = this.edges();\n var cy = this.cy();\n\n // Set parameters of algorithm:\n var opts = setOptions$3(options);\n\n // Map each node to its position in node array\n var id2position = {};\n for (var i = 0; i < nodes.length; i++) {\n id2position[nodes[i].id()] = i;\n }\n\n // Generate stochastic matrix M from input graph G (should be symmetric/undirected)\n var n = nodes.length,\n n2 = n * n;\n var M = new Array(n2),\n _M;\n for (var _i = 0; _i < n2; _i++) {\n M[_i] = 0;\n }\n for (var e = 0; e < edges.length; e++) {\n var edge = edges[e];\n var _i2 = id2position[edge.source().id()];\n var j = id2position[edge.target().id()];\n var sim = getSimilarity$1(edge, opts.attributes);\n M[_i2 * n + j] += sim; // G should be symmetric and undirected\n M[j * n + _i2] += sim;\n }\n\n // Begin Markov cluster algorithm\n\n // Step 1: Add self loops to each node, ie. add multFactor to matrix diagonal\n addLoops(M, n, opts.multFactor);\n\n // Step 2: M = normalize( M );\n normalize(M, n);\n var isStillMoving = true;\n var iterations = 0;\n while (isStillMoving && iterations < opts.maxIterations) {\n isStillMoving = false;\n\n // Step 3:\n _M = expand(M, n, opts.expandFactor);\n\n // Step 4:\n M = inflate(_M, n, opts.inflateFactor);\n\n // Step 5: check to see if ~steady state has been reached\n if (!hasConverged(M, _M, n2, 4)) {\n isStillMoving = true;\n }\n iterations++;\n }\n\n // Build clusters from matrix\n var clusters = assign$2(M, n, nodes, cy);\n\n // Remove duplicate clusters due to symmetry of graph and M matrix\n clusters = removeDuplicates(clusters);\n return clusters;\n};\nvar markovClustering$1 = {\n markovClustering: markovClustering,\n mcl: markovClustering\n};\n\n// Common distance metrics for clustering algorithms\n// https://en.wikipedia.org/wiki/Hierarchical_clustering#Metric\n\nvar identity$1 = function identity(x) {\n return x;\n};\nvar absDiff = function absDiff(p, q) {\n return Math.abs(q - p);\n};\nvar addAbsDiff = function addAbsDiff(total, p, q) {\n return total + absDiff(p, q);\n};\nvar addSquaredDiff = function addSquaredDiff(total, p, q) {\n return total + Math.pow(q - p, 2);\n};\nvar sqrt = function sqrt(x) {\n return Math.sqrt(x);\n};\nvar maxAbsDiff = function maxAbsDiff(currentMax, p, q) {\n return Math.max(currentMax, absDiff(p, q));\n};\nvar getDistance = function getDistance(length, getP, getQ, init, visit) {\n var post = arguments.length > 5 && arguments[5] !== undefined ? arguments[5] : identity$1;\n var ret = init;\n var p, q;\n for (var dim = 0; dim < length; dim++) {\n p = getP(dim);\n q = getQ(dim);\n ret = visit(ret, p, q);\n }\n return post(ret);\n};\nvar distances = {\n euclidean: function euclidean(length, getP, getQ) {\n if (length >= 2) {\n return getDistance(length, getP, getQ, 0, addSquaredDiff, sqrt);\n } else {\n // for single attr case, more efficient to avoid sqrt\n return getDistance(length, getP, getQ, 0, addAbsDiff);\n }\n },\n squaredEuclidean: function squaredEuclidean(length, getP, getQ) {\n return getDistance(length, getP, getQ, 0, addSquaredDiff);\n },\n manhattan: function manhattan(length, getP, getQ) {\n return getDistance(length, getP, getQ, 0, addAbsDiff);\n },\n max: function max(length, getP, getQ) {\n return getDistance(length, getP, getQ, -Infinity, maxAbsDiff);\n }\n};\n\n// in case the user accidentally doesn't use camel case\ndistances['squared-euclidean'] = distances['squaredEuclidean'];\ndistances['squaredeuclidean'] = distances['squaredEuclidean'];\nfunction clusteringDistance (method, length, getP, getQ, nodeP, nodeQ) {\n var impl;\n if (fn$6(method)) {\n impl = method;\n } else {\n impl = distances[method] || distances.euclidean;\n }\n if (length === 0 && fn$6(method)) {\n return impl(nodeP, nodeQ);\n } else {\n return impl(length, getP, getQ, nodeP, nodeQ);\n }\n}\n\nvar defaults$b = defaults$g({\n k: 2,\n m: 2,\n sensitivityThreshold: 0.0001,\n distance: 'euclidean',\n maxIterations: 10,\n attributes: [],\n testMode: false,\n testCentroids: null\n});\nvar setOptions$2 = function setOptions(options) {\n return defaults$b(options);\n};\n\nvar getDist = function getDist(type, node, centroid, attributes, mode) {\n var noNodeP = mode !== 'kMedoids';\n var getP = noNodeP ? function (i) {\n return centroid[i];\n } : function (i) {\n return attributes[i](centroid);\n };\n var getQ = function getQ(i) {\n return attributes[i](node);\n };\n var nodeP = centroid;\n var nodeQ = node;\n return clusteringDistance(type, attributes.length, getP, getQ, nodeP, nodeQ);\n};\nvar randomCentroids = function randomCentroids(nodes, k, attributes) {\n var ndim = attributes.length;\n var min = new Array(ndim);\n var max = new Array(ndim);\n var centroids = new Array(k);\n var centroid = null;\n\n // Find min, max values for each attribute dimension\n for (var i = 0; i < ndim; i++) {\n min[i] = nodes.min(attributes[i]).value;\n max[i] = nodes.max(attributes[i]).value;\n }\n\n // Build k centroids, each represented as an n-dim feature vector\n for (var c = 0; c < k; c++) {\n centroid = [];\n for (var _i = 0; _i < ndim; _i++) {\n centroid[_i] = Math.random() * (max[_i] - min[_i]) + min[_i]; // random initial value\n }\n centroids[c] = centroid;\n }\n return centroids;\n};\nvar classify = function classify(node, centroids, distance, attributes, type) {\n var min = Infinity;\n var index = 0;\n for (var i = 0; i < centroids.length; i++) {\n var dist = getDist(distance, node, centroids[i], attributes, type);\n if (dist < min) {\n min = dist;\n index = i;\n }\n }\n return index;\n};\nvar buildCluster = function buildCluster(centroid, nodes, assignment) {\n var cluster = [];\n var node = null;\n for (var n = 0; n < nodes.length; n++) {\n node = nodes[n];\n if (assignment[node.id()] === centroid) {\n //console.log(\"Node \" + node.id() + \" is associated with medoid #: \" + m);\n cluster.push(node);\n }\n }\n return cluster;\n};\nvar haveValuesConverged = function haveValuesConverged(v1, v2, sensitivityThreshold) {\n return Math.abs(v2 - v1) <= sensitivityThreshold;\n};\nvar haveMatricesConverged = function haveMatricesConverged(v1, v2, sensitivityThreshold) {\n for (var i = 0; i < v1.length; i++) {\n for (var j = 0; j < v1[i].length; j++) {\n var diff = Math.abs(v1[i][j] - v2[i][j]);\n if (diff > sensitivityThreshold) {\n return false;\n }\n }\n }\n return true;\n};\nvar seenBefore = function seenBefore(node, medoids, n) {\n for (var i = 0; i < n; i++) {\n if (node === medoids[i]) return true;\n }\n return false;\n};\nvar randomMedoids = function randomMedoids(nodes, k) {\n var medoids = new Array(k);\n\n // For small data sets, the probability of medoid conflict is greater,\n // so we need to check to see if we've already seen or chose this node before.\n if (nodes.length < 50) {\n // Randomly select k medoids from the n nodes\n for (var i = 0; i < k; i++) {\n var node = nodes[Math.floor(Math.random() * nodes.length)];\n\n // If we've already chosen this node to be a medoid, don't choose it again (for small data sets).\n // Instead choose a different random node.\n while (seenBefore(node, medoids, i)) {\n node = nodes[Math.floor(Math.random() * nodes.length)];\n }\n medoids[i] = node;\n }\n } else {\n // Relatively large data set, so pretty safe to not check and just select random nodes\n for (var _i2 = 0; _i2 < k; _i2++) {\n medoids[_i2] = nodes[Math.floor(Math.random() * nodes.length)];\n }\n }\n return medoids;\n};\nvar findCost = function findCost(potentialNewMedoid, cluster, attributes) {\n var cost = 0;\n for (var n = 0; n < cluster.length; n++) {\n cost += getDist('manhattan', cluster[n], potentialNewMedoid, attributes, 'kMedoids');\n }\n return cost;\n};\nvar kMeans = function kMeans(options) {\n var cy = this.cy();\n var nodes = this.nodes();\n var node = null;\n\n // Set parameters of algorithm: # of clusters, distance metric, etc.\n var opts = setOptions$2(options);\n\n // Begin k-means algorithm\n var clusters = new Array(opts.k);\n var assignment = {};\n var centroids;\n\n // Step 1: Initialize centroid positions\n if (opts.testMode) {\n if (typeof opts.testCentroids === 'number') {\n // TODO: implement a seeded random number generator.\n opts.testCentroids;\n centroids = randomCentroids(nodes, opts.k, opts.attributes);\n } else if (_typeof(opts.testCentroids) === 'object') {\n centroids = opts.testCentroids;\n } else {\n centroids = randomCentroids(nodes, opts.k, opts.attributes);\n }\n } else {\n centroids = randomCentroids(nodes, opts.k, opts.attributes);\n }\n var isStillMoving = true;\n var iterations = 0;\n while (isStillMoving && iterations < opts.maxIterations) {\n // Step 2: Assign nodes to the nearest centroid\n for (var n = 0; n < nodes.length; n++) {\n node = nodes[n];\n // Determine which cluster this node belongs to: node id => cluster #\n assignment[node.id()] = classify(node, centroids, opts.distance, opts.attributes, 'kMeans');\n }\n\n // Step 3: For each of the k clusters, update its centroid\n isStillMoving = false;\n for (var c = 0; c < opts.k; c++) {\n // Get all nodes that belong to this cluster\n var cluster = buildCluster(c, nodes, assignment);\n if (cluster.length === 0) {\n // If cluster is empty, break out early & move to next cluster\n continue;\n }\n\n // Update centroids by calculating avg of all nodes within the cluster.\n var ndim = opts.attributes.length;\n var centroid = centroids[c]; // [ dim_1, dim_2, dim_3, ... , dim_n ]\n var newCentroid = new Array(ndim);\n var sum = new Array(ndim);\n for (var d = 0; d < ndim; d++) {\n sum[d] = 0.0;\n for (var i = 0; i < cluster.length; i++) {\n node = cluster[i];\n sum[d] += opts.attributes[d](node);\n }\n newCentroid[d] = sum[d] / cluster.length;\n\n // Check to see if algorithm has converged, i.e. when centroids no longer change\n if (!haveValuesConverged(newCentroid[d], centroid[d], opts.sensitivityThreshold)) {\n isStillMoving = true;\n }\n }\n centroids[c] = newCentroid;\n clusters[c] = cy.collection(cluster);\n }\n iterations++;\n }\n return clusters;\n};\nvar kMedoids = function kMedoids(options) {\n var cy = this.cy();\n var nodes = this.nodes();\n var node = null;\n var opts = setOptions$2(options);\n\n // Begin k-medoids algorithm\n var clusters = new Array(opts.k);\n var medoids;\n var assignment = {};\n var curCost;\n var minCosts = new Array(opts.k); // minimum cost configuration for each cluster\n\n // Step 1: Initialize k medoids\n if (opts.testMode) {\n if (typeof opts.testCentroids === 'number') ; else if (_typeof(opts.testCentroids) === 'object') {\n medoids = opts.testCentroids;\n } else {\n medoids = randomMedoids(nodes, opts.k);\n }\n } else {\n medoids = randomMedoids(nodes, opts.k);\n }\n var isStillMoving = true;\n var iterations = 0;\n while (isStillMoving && iterations < opts.maxIterations) {\n // Step 2: Assign nodes to the nearest medoid\n for (var n = 0; n < nodes.length; n++) {\n node = nodes[n];\n // Determine which cluster this node belongs to: node id => cluster #\n assignment[node.id()] = classify(node, medoids, opts.distance, opts.attributes, 'kMedoids');\n }\n isStillMoving = false;\n // Step 3: For each medoid m, and for each node associated with mediod m,\n // select the node with the lowest configuration cost as new medoid.\n for (var m = 0; m < medoids.length; m++) {\n // Get all nodes that belong to this medoid\n var cluster = buildCluster(m, nodes, assignment);\n if (cluster.length === 0) {\n // If cluster is empty, break out early & move to next cluster\n continue;\n }\n minCosts[m] = findCost(medoids[m], cluster, opts.attributes); // original cost\n\n // Select different medoid if its configuration has the lowest cost\n for (var _n = 0; _n < cluster.length; _n++) {\n curCost = findCost(cluster[_n], cluster, opts.attributes);\n if (curCost < minCosts[m]) {\n minCosts[m] = curCost;\n medoids[m] = cluster[_n];\n isStillMoving = true;\n }\n }\n clusters[m] = cy.collection(cluster);\n }\n iterations++;\n }\n return clusters;\n};\nvar updateCentroids = function updateCentroids(centroids, nodes, U, weight, opts) {\n var numerator, denominator;\n for (var n = 0; n < nodes.length; n++) {\n for (var c = 0; c < centroids.length; c++) {\n weight[n][c] = Math.pow(U[n][c], opts.m);\n }\n }\n for (var _c = 0; _c < centroids.length; _c++) {\n for (var dim = 0; dim < opts.attributes.length; dim++) {\n numerator = 0;\n denominator = 0;\n for (var _n2 = 0; _n2 < nodes.length; _n2++) {\n numerator += weight[_n2][_c] * opts.attributes[dim](nodes[_n2]);\n denominator += weight[_n2][_c];\n }\n centroids[_c][dim] = numerator / denominator;\n }\n }\n};\nvar updateMembership = function updateMembership(U, _U, centroids, nodes, opts) {\n // Save previous step\n for (var i = 0; i < U.length; i++) {\n _U[i] = U[i].slice();\n }\n var sum, numerator, denominator;\n var pow = 2 / (opts.m - 1);\n for (var c = 0; c < centroids.length; c++) {\n for (var n = 0; n < nodes.length; n++) {\n sum = 0;\n for (var k = 0; k < centroids.length; k++) {\n // against all other centroids\n numerator = getDist(opts.distance, nodes[n], centroids[c], opts.attributes, 'cmeans');\n denominator = getDist(opts.distance, nodes[n], centroids[k], opts.attributes, 'cmeans');\n sum += Math.pow(numerator / denominator, pow);\n }\n U[n][c] = 1 / sum;\n }\n }\n};\nvar assign$1 = function assign(nodes, U, opts, cy) {\n var clusters = new Array(opts.k);\n for (var c = 0; c < clusters.length; c++) {\n clusters[c] = [];\n }\n var max;\n var index;\n for (var n = 0; n < U.length; n++) {\n // for each node (U is N x C matrix)\n max = -Infinity;\n index = -1;\n // Determine which cluster the node is most likely to belong in\n for (var _c2 = 0; _c2 < U[0].length; _c2++) {\n if (U[n][_c2] > max) {\n max = U[n][_c2];\n index = _c2;\n }\n }\n clusters[index].push(nodes[n]);\n }\n\n // Turn every array into a collection of nodes\n for (var _c3 = 0; _c3 < clusters.length; _c3++) {\n clusters[_c3] = cy.collection(clusters[_c3]);\n }\n return clusters;\n};\nvar fuzzyCMeans = function fuzzyCMeans(options) {\n var cy = this.cy();\n var nodes = this.nodes();\n var opts = setOptions$2(options);\n\n // Begin fuzzy c-means algorithm\n var clusters;\n var centroids;\n var U;\n var _U;\n var weight;\n\n // Step 1: Initialize letiables.\n _U = new Array(nodes.length);\n for (var i = 0; i < nodes.length; i++) {\n // N x C matrix\n _U[i] = new Array(opts.k);\n }\n U = new Array(nodes.length);\n for (var _i3 = 0; _i3 < nodes.length; _i3++) {\n // N x C matrix\n U[_i3] = new Array(opts.k);\n }\n for (var _i4 = 0; _i4 < nodes.length; _i4++) {\n var total = 0;\n for (var j = 0; j < opts.k; j++) {\n U[_i4][j] = Math.random();\n total += U[_i4][j];\n }\n for (var _j = 0; _j < opts.k; _j++) {\n U[_i4][_j] = U[_i4][_j] / total;\n }\n }\n centroids = new Array(opts.k);\n for (var _i5 = 0; _i5 < opts.k; _i5++) {\n centroids[_i5] = new Array(opts.attributes.length);\n }\n weight = new Array(nodes.length);\n for (var _i6 = 0; _i6 < nodes.length; _i6++) {\n // N x C matrix\n weight[_i6] = new Array(opts.k);\n }\n // end init FCM\n\n var isStillMoving = true;\n var iterations = 0;\n while (isStillMoving && iterations < opts.maxIterations) {\n isStillMoving = false;\n\n // Step 2: Calculate the centroids for each step.\n updateCentroids(centroids, nodes, U, weight, opts);\n\n // Step 3: Update the partition matrix U.\n updateMembership(U, _U, centroids, nodes, opts);\n\n // Step 4: Check for convergence.\n if (!haveMatricesConverged(U, _U, opts.sensitivityThreshold)) {\n isStillMoving = true;\n }\n iterations++;\n }\n\n // Assign nodes to clusters with highest probability.\n clusters = assign$1(nodes, U, opts, cy);\n return {\n clusters: clusters,\n degreeOfMembership: U\n };\n};\nvar kClustering = {\n kMeans: kMeans,\n kMedoids: kMedoids,\n fuzzyCMeans: fuzzyCMeans,\n fcm: fuzzyCMeans\n};\n\n// Implemented by Zoe Xi @zoexi for GSOC 2016\n// https://github.com/cytoscape/cytoscape.js-hierarchical\n\nvar defaults$a = defaults$g({\n distance: 'euclidean',\n // distance metric to compare nodes\n linkage: 'min',\n // linkage criterion : how to determine the distance between clusters of nodes\n mode: 'threshold',\n // mode:'threshold' => clusters must be threshold distance apart\n threshold: Infinity,\n // the distance threshold\n // mode:'dendrogram' => the nodes are organised as leaves in a tree (siblings are close), merging makes clusters\n addDendrogram: false,\n // whether to add the dendrogram to the graph for viz\n dendrogramDepth: 0,\n // depth at which dendrogram branches are merged into the returned clusters\n attributes: [] // array of attr functions\n});\nvar linkageAliases = {\n 'single': 'min',\n 'complete': 'max'\n};\nvar setOptions$1 = function setOptions(options) {\n var opts = defaults$a(options);\n var preferredAlias = linkageAliases[opts.linkage];\n if (preferredAlias != null) {\n opts.linkage = preferredAlias;\n }\n return opts;\n};\nvar mergeClosest = function mergeClosest(clusters, index, dists, mins, opts) {\n // Find two closest clusters from cached mins\n var minKey = 0;\n var min = Infinity;\n var dist;\n var attrs = opts.attributes;\n var getDist = function getDist(n1, n2) {\n return clusteringDistance(opts.distance, attrs.length, function (i) {\n return attrs[i](n1);\n }, function (i) {\n return attrs[i](n2);\n }, n1, n2);\n };\n for (var i = 0; i < clusters.length; i++) {\n var key = clusters[i].key;\n var _dist = dists[key][mins[key]];\n if (_dist < min) {\n minKey = key;\n min = _dist;\n }\n }\n if (opts.mode === 'threshold' && min >= opts.threshold || opts.mode === 'dendrogram' && clusters.length === 1) {\n return false;\n }\n var c1 = index[minKey];\n var c2 = index[mins[minKey]];\n var merged;\n\n // Merge two closest clusters\n if (opts.mode === 'dendrogram') {\n merged = {\n left: c1,\n right: c2,\n key: c1.key\n };\n } else {\n merged = {\n value: c1.value.concat(c2.value),\n key: c1.key\n };\n }\n clusters[c1.index] = merged;\n clusters.splice(c2.index, 1);\n index[c1.key] = merged;\n\n // Update distances with new merged cluster\n for (var _i = 0; _i < clusters.length; _i++) {\n var cur = clusters[_i];\n if (c1.key === cur.key) {\n dist = Infinity;\n } else if (opts.linkage === 'min') {\n dist = dists[c1.key][cur.key];\n if (dists[c1.key][cur.key] > dists[c2.key][cur.key]) {\n dist = dists[c2.key][cur.key];\n }\n } else if (opts.linkage === 'max') {\n dist = dists[c1.key][cur.key];\n if (dists[c1.key][cur.key] < dists[c2.key][cur.key]) {\n dist = dists[c2.key][cur.key];\n }\n } else if (opts.linkage === 'mean') {\n dist = (dists[c1.key][cur.key] * c1.size + dists[c2.key][cur.key] * c2.size) / (c1.size + c2.size);\n } else {\n if (opts.mode === 'dendrogram') dist = getDist(cur.value, c1.value);else dist = getDist(cur.value[0], c1.value[0]);\n }\n dists[c1.key][cur.key] = dists[cur.key][c1.key] = dist; // distance matrix is symmetric\n }\n\n // Update cached mins\n for (var _i2 = 0; _i2 < clusters.length; _i2++) {\n var key1 = clusters[_i2].key;\n if (mins[key1] === c1.key || mins[key1] === c2.key) {\n var _min = key1;\n for (var j = 0; j < clusters.length; j++) {\n var key2 = clusters[j].key;\n if (dists[key1][key2] < dists[key1][_min]) {\n _min = key2;\n }\n }\n mins[key1] = _min;\n }\n clusters[_i2].index = _i2;\n }\n\n // Clean up meta data used for clustering\n c1.key = c2.key = c1.index = c2.index = null;\n return true;\n};\nvar _getAllChildren = function getAllChildren(root, arr, cy) {\n if (!root) return;\n if (root.value) {\n arr.push(root.value);\n } else {\n if (root.left) _getAllChildren(root.left, arr);\n if (root.right) _getAllChildren(root.right, arr);\n }\n};\nvar _buildDendrogram = function buildDendrogram(root, cy) {\n if (!root) return '';\n if (root.left && root.right) {\n var leftStr = _buildDendrogram(root.left, cy);\n var rightStr = _buildDendrogram(root.right, cy);\n var node = cy.add({\n group: 'nodes',\n data: {\n id: leftStr + ',' + rightStr\n }\n });\n cy.add({\n group: 'edges',\n data: {\n source: leftStr,\n target: node.id()\n }\n });\n cy.add({\n group: 'edges',\n data: {\n source: rightStr,\n target: node.id()\n }\n });\n return node.id();\n } else if (root.value) {\n return root.value.id();\n }\n};\nvar _buildClustersFromTree = function buildClustersFromTree(root, k, cy) {\n if (!root) return [];\n var left = [],\n right = [],\n leaves = [];\n if (k === 0) {\n // don't cut tree, simply return all nodes as 1 single cluster\n if (root.left) _getAllChildren(root.left, left);\n if (root.right) _getAllChildren(root.right, right);\n leaves = left.concat(right);\n return [cy.collection(leaves)];\n } else if (k === 1) {\n // cut at root\n\n if (root.value) {\n // leaf node\n return [cy.collection(root.value)];\n } else {\n if (root.left) _getAllChildren(root.left, left);\n if (root.right) _getAllChildren(root.right, right);\n return [cy.collection(left), cy.collection(right)];\n }\n } else {\n if (root.value) {\n return [cy.collection(root.value)];\n } else {\n if (root.left) left = _buildClustersFromTree(root.left, k - 1, cy);\n if (root.right) right = _buildClustersFromTree(root.right, k - 1, cy);\n return left.concat(right);\n }\n }\n};\n\nvar hierarchicalClustering = function hierarchicalClustering(options) {\n var cy = this.cy();\n var nodes = this.nodes();\n\n // Set parameters of algorithm: linkage type, distance metric, etc.\n var opts = setOptions$1(options);\n var attrs = opts.attributes;\n var getDist = function getDist(n1, n2) {\n return clusteringDistance(opts.distance, attrs.length, function (i) {\n return attrs[i](n1);\n }, function (i) {\n return attrs[i](n2);\n }, n1, n2);\n };\n\n // Begin hierarchical algorithm\n var clusters = [];\n var dists = []; // distances between each pair of clusters\n var mins = []; // closest cluster for each cluster\n var index = []; // hash of all clusters by key\n\n // In agglomerative (bottom-up) clustering, each node starts as its own cluster\n for (var n = 0; n < nodes.length; n++) {\n var cluster = {\n value: opts.mode === 'dendrogram' ? nodes[n] : [nodes[n]],\n key: n,\n index: n\n };\n clusters[n] = cluster;\n index[n] = cluster;\n dists[n] = [];\n mins[n] = 0;\n }\n\n // Calculate the distance between each pair of clusters\n for (var i = 0; i < clusters.length; i++) {\n for (var j = 0; j <= i; j++) {\n var dist = undefined;\n if (opts.mode === 'dendrogram') {\n // modes store cluster values differently\n dist = i === j ? Infinity : getDist(clusters[i].value, clusters[j].value);\n } else {\n dist = i === j ? Infinity : getDist(clusters[i].value[0], clusters[j].value[0]);\n }\n dists[i][j] = dist;\n dists[j][i] = dist;\n if (dist < dists[i][mins[i]]) {\n mins[i] = j; // Cache mins: closest cluster to cluster i is cluster j\n }\n }\n }\n\n // Find the closest pair of clusters and merge them into a single cluster.\n // Update distances between new cluster and each of the old clusters, and loop until threshold reached.\n var merged = mergeClosest(clusters, index, dists, mins, opts);\n while (merged) {\n merged = mergeClosest(clusters, index, dists, mins, opts);\n }\n var retClusters;\n\n // Dendrogram mode builds the hierarchy and adds intermediary nodes + edges\n // in addition to returning the clusters.\n if (opts.mode === 'dendrogram') {\n retClusters = _buildClustersFromTree(clusters[0], opts.dendrogramDepth, cy);\n if (opts.addDendrogram) _buildDendrogram(clusters[0], cy);\n } else {\n // Regular mode simply returns the clusters\n\n retClusters = new Array(clusters.length);\n clusters.forEach(function (cluster, i) {\n // Clean up meta data used for clustering\n cluster.key = cluster.index = null;\n retClusters[i] = cy.collection(cluster.value);\n });\n }\n return retClusters;\n};\nvar hierarchicalClustering$1 = {\n hierarchicalClustering: hierarchicalClustering,\n hca: hierarchicalClustering\n};\n\n// Implemented by Zoe Xi @zoexi for GSOC 2016\n// https://github.com/cytoscape/cytoscape.js-affinity-propagation\n\nvar defaults$9 = defaults$g({\n distance: 'euclidean',\n // distance metric to compare attributes between two nodes\n preference: 'median',\n // suitability of a data point to serve as an exemplar\n damping: 0.8,\n // damping factor between [0.5, 1)\n maxIterations: 1000,\n // max number of iterations to run\n minIterations: 100,\n // min number of iterations to run in order for clustering to stop\n attributes: [// functions to quantify the similarity between any two points\n // e.g. node => node.data('weight')\n ]\n});\nvar setOptions = function setOptions(options) {\n var dmp = options.damping;\n var pref = options.preference;\n if (!(0.5 <= dmp && dmp < 1)) {\n error(\"Damping must range on [0.5, 1). Got: \".concat(dmp));\n }\n var validPrefs = ['median', 'mean', 'min', 'max'];\n if (!(validPrefs.some(function (v) {\n return v === pref;\n }) || number$1(pref))) {\n error(\"Preference must be one of [\".concat(validPrefs.map(function (p) {\n return \"'\".concat(p, \"'\");\n }).join(', '), \"] or a number. Got: \").concat(pref));\n }\n return defaults$9(options);\n};\n\nvar getSimilarity = function getSimilarity(type, n1, n2, attributes) {\n var attr = function attr(n, i) {\n return attributes[i](n);\n };\n\n // nb negative because similarity should have an inverse relationship to distance\n return -clusteringDistance(type, attributes.length, function (i) {\n return attr(n1, i);\n }, function (i) {\n return attr(n2, i);\n }, n1, n2);\n};\nvar getPreference = function getPreference(S, preference) {\n // larger preference = greater # of clusters\n var p = null;\n if (preference === 'median') {\n p = median(S);\n } else if (preference === 'mean') {\n p = mean(S);\n } else if (preference === 'min') {\n p = min(S);\n } else if (preference === 'max') {\n p = max(S);\n } else {\n // Custom preference number, as set by user\n p = preference;\n }\n return p;\n};\nvar findExemplars = function findExemplars(n, R, A) {\n var indices = [];\n for (var i = 0; i < n; i++) {\n if (R[i * n + i] + A[i * n + i] > 0) {\n indices.push(i);\n }\n }\n return indices;\n};\nvar assignClusters = function assignClusters(n, S, exemplars) {\n var clusters = [];\n for (var i = 0; i < n; i++) {\n var index = -1;\n var max = -Infinity;\n for (var ei = 0; ei < exemplars.length; ei++) {\n var e = exemplars[ei];\n if (S[i * n + e] > max) {\n index = e;\n max = S[i * n + e];\n }\n }\n if (index > 0) {\n clusters.push(index);\n }\n }\n for (var _ei = 0; _ei < exemplars.length; _ei++) {\n clusters[exemplars[_ei]] = exemplars[_ei];\n }\n return clusters;\n};\nvar assign = function assign(n, S, exemplars) {\n var clusters = assignClusters(n, S, exemplars);\n for (var ei = 0; ei < exemplars.length; ei++) {\n var ii = [];\n for (var c = 0; c < clusters.length; c++) {\n if (clusters[c] === exemplars[ei]) {\n ii.push(c);\n }\n }\n var maxI = -1;\n var maxSum = -Infinity;\n for (var i = 0; i < ii.length; i++) {\n var sum = 0;\n for (var j = 0; j < ii.length; j++) {\n sum += S[ii[j] * n + ii[i]];\n }\n if (sum > maxSum) {\n maxI = i;\n maxSum = sum;\n }\n }\n exemplars[ei] = ii[maxI];\n }\n clusters = assignClusters(n, S, exemplars);\n return clusters;\n};\nvar affinityPropagation = function affinityPropagation(options) {\n var cy = this.cy();\n var nodes = this.nodes();\n var opts = setOptions(options);\n\n // Map each node to its position in node array\n var id2position = {};\n for (var i = 0; i < nodes.length; i++) {\n id2position[nodes[i].id()] = i;\n }\n\n // Begin affinity propagation algorithm\n\n var n; // number of data points\n var n2; // size of matrices\n var S; // similarity matrix (1D array)\n var p; // preference/suitability of a data point to serve as an exemplar\n var R; // responsibility matrix (1D array)\n var A; // availability matrix (1D array)\n\n n = nodes.length;\n n2 = n * n;\n\n // Initialize and build S similarity matrix\n S = new Array(n2);\n for (var _i = 0; _i < n2; _i++) {\n S[_i] = -Infinity; // for cases where two data points shouldn't be linked together\n }\n for (var _i2 = 0; _i2 < n; _i2++) {\n for (var j = 0; j < n; j++) {\n if (_i2 !== j) {\n S[_i2 * n + j] = getSimilarity(opts.distance, nodes[_i2], nodes[j], opts.attributes);\n }\n }\n }\n\n // Place preferences on the diagonal of S\n p = getPreference(S, opts.preference);\n for (var _i3 = 0; _i3 < n; _i3++) {\n S[_i3 * n + _i3] = p;\n }\n\n // Initialize R responsibility matrix\n R = new Array(n2);\n for (var _i4 = 0; _i4 < n2; _i4++) {\n R[_i4] = 0.0;\n }\n\n // Initialize A availability matrix\n A = new Array(n2);\n for (var _i5 = 0; _i5 < n2; _i5++) {\n A[_i5] = 0.0;\n }\n var old = new Array(n);\n var Rp = new Array(n);\n var se = new Array(n);\n for (var _i6 = 0; _i6 < n; _i6++) {\n old[_i6] = 0.0;\n Rp[_i6] = 0.0;\n se[_i6] = 0;\n }\n var e = new Array(n * opts.minIterations);\n for (var _i7 = 0; _i7 < e.length; _i7++) {\n e[_i7] = 0;\n }\n var iter;\n for (iter = 0; iter < opts.maxIterations; iter++) {\n // main algorithmic loop\n\n // Update R responsibility matrix\n for (var _i8 = 0; _i8 < n; _i8++) {\n var max = -Infinity,\n max2 = -Infinity,\n maxI = -1,\n AS = 0.0;\n for (var _j = 0; _j < n; _j++) {\n old[_j] = R[_i8 * n + _j];\n AS = A[_i8 * n + _j] + S[_i8 * n + _j];\n if (AS >= max) {\n max2 = max;\n max = AS;\n maxI = _j;\n } else if (AS > max2) {\n max2 = AS;\n }\n }\n for (var _j2 = 0; _j2 < n; _j2++) {\n R[_i8 * n + _j2] = (1 - opts.damping) * (S[_i8 * n + _j2] - max) + opts.damping * old[_j2];\n }\n R[_i8 * n + maxI] = (1 - opts.damping) * (S[_i8 * n + maxI] - max2) + opts.damping * old[maxI];\n }\n\n // Update A availability matrix\n for (var _i9 = 0; _i9 < n; _i9++) {\n var sum = 0;\n for (var _j3 = 0; _j3 < n; _j3++) {\n old[_j3] = A[_j3 * n + _i9];\n Rp[_j3] = Math.max(0, R[_j3 * n + _i9]);\n sum += Rp[_j3];\n }\n sum -= Rp[_i9];\n Rp[_i9] = R[_i9 * n + _i9];\n sum += Rp[_i9];\n for (var _j4 = 0; _j4 < n; _j4++) {\n A[_j4 * n + _i9] = (1 - opts.damping) * Math.min(0, sum - Rp[_j4]) + opts.damping * old[_j4];\n }\n A[_i9 * n + _i9] = (1 - opts.damping) * (sum - Rp[_i9]) + opts.damping * old[_i9];\n }\n\n // Check for convergence\n var K = 0;\n for (var _i10 = 0; _i10 < n; _i10++) {\n var E = A[_i10 * n + _i10] + R[_i10 * n + _i10] > 0 ? 1 : 0;\n e[iter % opts.minIterations * n + _i10] = E;\n K += E;\n }\n if (K > 0 && (iter >= opts.minIterations - 1 || iter == opts.maxIterations - 1)) {\n var _sum = 0;\n for (var _i11 = 0; _i11 < n; _i11++) {\n se[_i11] = 0;\n for (var _j5 = 0; _j5 < opts.minIterations; _j5++) {\n se[_i11] += e[_j5 * n + _i11];\n }\n if (se[_i11] === 0 || se[_i11] === opts.minIterations) {\n _sum++;\n }\n }\n if (_sum === n) {\n // then we have convergence\n break;\n }\n }\n }\n\n // Identify exemplars (cluster centers)\n var exemplarsIndices = findExemplars(n, R, A);\n\n // Assign nodes to clusters\n var clusterIndices = assign(n, S, exemplarsIndices);\n var clusters = {};\n for (var c = 0; c < exemplarsIndices.length; c++) {\n clusters[exemplarsIndices[c]] = [];\n }\n for (var _i12 = 0; _i12 < nodes.length; _i12++) {\n var pos = id2position[nodes[_i12].id()];\n var clusterIndex = clusterIndices[pos];\n if (clusterIndex != null) {\n // the node may have not been assigned a cluster if no valid attributes were specified\n clusters[clusterIndex].push(nodes[_i12]);\n }\n }\n var retClusters = new Array(exemplarsIndices.length);\n for (var _c = 0; _c < exemplarsIndices.length; _c++) {\n retClusters[_c] = cy.collection(clusters[exemplarsIndices[_c]]);\n }\n return retClusters;\n};\nvar affinityPropagation$1 = {\n affinityPropagation: affinityPropagation,\n ap: affinityPropagation\n};\n\nvar hierholzerDefaults = defaults$g({\n root: undefined,\n directed: false\n});\nvar elesfn$k = {\n hierholzer: function hierholzer(options) {\n if (!plainObject(options)) {\n var args = arguments;\n options = {\n root: args[0],\n directed: args[1]\n };\n }\n var _hierholzerDefaults = hierholzerDefaults(options),\n root = _hierholzerDefaults.root,\n directed = _hierholzerDefaults.directed;\n var eles = this;\n var dflag = false;\n var oddIn;\n var oddOut;\n var startVertex;\n if (root) startVertex = string(root) ? this.filter(root)[0].id() : root[0].id();\n var nodes = {};\n var edges = {};\n if (directed) {\n eles.forEach(function (ele) {\n var id = ele.id();\n if (ele.isNode()) {\n var ind = ele.indegree(true);\n var outd = ele.outdegree(true);\n var d1 = ind - outd;\n var d2 = outd - ind;\n if (d1 == 1) {\n if (oddIn) dflag = true;else oddIn = id;\n } else if (d2 == 1) {\n if (oddOut) dflag = true;else oddOut = id;\n } else if (d2 > 1 || d1 > 1) {\n dflag = true;\n }\n nodes[id] = [];\n ele.outgoers().forEach(function (e) {\n if (e.isEdge()) nodes[id].push(e.id());\n });\n } else {\n edges[id] = [undefined, ele.target().id()];\n }\n });\n } else {\n eles.forEach(function (ele) {\n var id = ele.id();\n if (ele.isNode()) {\n var d = ele.degree(true);\n if (d % 2) {\n if (!oddIn) oddIn = id;else if (!oddOut) oddOut = id;else dflag = true;\n }\n nodes[id] = [];\n ele.connectedEdges().forEach(function (e) {\n return nodes[id].push(e.id());\n });\n } else {\n edges[id] = [ele.source().id(), ele.target().id()];\n }\n });\n }\n var result = {\n found: false,\n trail: undefined\n };\n if (dflag) return result;else if (oddOut && oddIn) {\n if (directed) {\n if (startVertex && oddOut != startVertex) {\n return result;\n }\n startVertex = oddOut;\n } else {\n if (startVertex && oddOut != startVertex && oddIn != startVertex) {\n return result;\n } else if (!startVertex) {\n startVertex = oddOut;\n }\n }\n } else {\n if (!startVertex) startVertex = eles[0].id();\n }\n var walk = function walk(v) {\n var currentNode = v;\n var subtour = [v];\n var adj, adjTail, adjHead;\n while (nodes[currentNode].length) {\n adj = nodes[currentNode].shift();\n adjTail = edges[adj][0];\n adjHead = edges[adj][1];\n if (currentNode != adjHead) {\n nodes[adjHead] = nodes[adjHead].filter(function (e) {\n return e != adj;\n });\n currentNode = adjHead;\n } else if (!directed && currentNode != adjTail) {\n nodes[adjTail] = nodes[adjTail].filter(function (e) {\n return e != adj;\n });\n currentNode = adjTail;\n }\n subtour.unshift(adj);\n subtour.unshift(currentNode);\n }\n return subtour;\n };\n var trail = [];\n var subtour = [];\n subtour = walk(startVertex);\n while (subtour.length != 1) {\n if (nodes[subtour[0]].length == 0) {\n trail.unshift(eles.getElementById(subtour.shift()));\n trail.unshift(eles.getElementById(subtour.shift()));\n } else {\n subtour = walk(subtour.shift()).concat(subtour);\n }\n }\n trail.unshift(eles.getElementById(subtour.shift())); // final node\n\n for (var d in nodes) {\n if (nodes[d].length) {\n return result;\n }\n }\n result.found = true;\n result.trail = this.spawn(trail, true);\n return result;\n }\n};\n\nvar hopcroftTarjanBiconnected = function hopcroftTarjanBiconnected() {\n var eles = this;\n var nodes = {};\n var id = 0;\n var edgeCount = 0;\n var components = [];\n var stack = [];\n var visitedEdges = {};\n var buildComponent = function buildComponent(x, y) {\n var i = stack.length - 1;\n var cutset = [];\n var component = eles.spawn();\n while (stack[i].x != x || stack[i].y != y) {\n cutset.push(stack.pop().edge);\n i--;\n }\n cutset.push(stack.pop().edge);\n cutset.forEach(function (edge) {\n var connectedNodes = edge.connectedNodes().intersection(eles);\n component.merge(edge);\n connectedNodes.forEach(function (node) {\n var nodeId = node.id();\n var connectedEdges = node.connectedEdges().intersection(eles);\n component.merge(node);\n if (!nodes[nodeId].cutVertex) {\n component.merge(connectedEdges);\n } else {\n component.merge(connectedEdges.filter(function (edge) {\n return edge.isLoop();\n }));\n }\n });\n });\n components.push(component);\n };\n var _biconnectedSearch = function biconnectedSearch(root, currentNode, parent) {\n if (root === parent) edgeCount += 1;\n nodes[currentNode] = {\n id: id,\n low: id++,\n cutVertex: false\n };\n var edges = eles.getElementById(currentNode).connectedEdges().intersection(eles);\n if (edges.size() === 0) {\n components.push(eles.spawn(eles.getElementById(currentNode)));\n } else {\n var sourceId, targetId, otherNodeId, edgeId;\n edges.forEach(function (edge) {\n sourceId = edge.source().id();\n targetId = edge.target().id();\n otherNodeId = sourceId === currentNode ? targetId : sourceId;\n if (otherNodeId !== parent) {\n edgeId = edge.id();\n if (!visitedEdges[edgeId]) {\n visitedEdges[edgeId] = true;\n stack.push({\n x: currentNode,\n y: otherNodeId,\n edge: edge\n });\n }\n if (!(otherNodeId in nodes)) {\n _biconnectedSearch(root, otherNodeId, currentNode);\n nodes[currentNode].low = Math.min(nodes[currentNode].low, nodes[otherNodeId].low);\n if (nodes[currentNode].id <= nodes[otherNodeId].low) {\n nodes[currentNode].cutVertex = true;\n buildComponent(currentNode, otherNodeId);\n }\n } else {\n nodes[currentNode].low = Math.min(nodes[currentNode].low, nodes[otherNodeId].id);\n }\n }\n });\n }\n };\n eles.forEach(function (ele) {\n if (ele.isNode()) {\n var nodeId = ele.id();\n if (!(nodeId in nodes)) {\n edgeCount = 0;\n _biconnectedSearch(nodeId, nodeId);\n nodes[nodeId].cutVertex = edgeCount > 1;\n }\n }\n });\n var cutVertices = Object.keys(nodes).filter(function (id) {\n return nodes[id].cutVertex;\n }).map(function (id) {\n return eles.getElementById(id);\n });\n return {\n cut: eles.spawn(cutVertices),\n components: components\n };\n};\nvar hopcroftTarjanBiconnected$1 = {\n hopcroftTarjanBiconnected: hopcroftTarjanBiconnected,\n htbc: hopcroftTarjanBiconnected,\n htb: hopcroftTarjanBiconnected,\n hopcroftTarjanBiconnectedComponents: hopcroftTarjanBiconnected\n};\n\nvar tarjanStronglyConnected = function tarjanStronglyConnected() {\n var eles = this;\n var nodes = {};\n var index = 0;\n var components = [];\n var stack = [];\n var cut = eles.spawn(eles);\n var _stronglyConnectedSearch = function stronglyConnectedSearch(sourceNodeId) {\n stack.push(sourceNodeId);\n nodes[sourceNodeId] = {\n index: index,\n low: index++,\n explored: false\n };\n var connectedEdges = eles.getElementById(sourceNodeId).connectedEdges().intersection(eles);\n connectedEdges.forEach(function (edge) {\n var targetNodeId = edge.target().id();\n if (targetNodeId !== sourceNodeId) {\n if (!(targetNodeId in nodes)) {\n _stronglyConnectedSearch(targetNodeId);\n }\n if (!nodes[targetNodeId].explored) {\n nodes[sourceNodeId].low = Math.min(nodes[sourceNodeId].low, nodes[targetNodeId].low);\n }\n }\n });\n if (nodes[sourceNodeId].index === nodes[sourceNodeId].low) {\n var componentNodes = eles.spawn();\n for (;;) {\n var nodeId = stack.pop();\n componentNodes.merge(eles.getElementById(nodeId));\n nodes[nodeId].low = nodes[sourceNodeId].index;\n nodes[nodeId].explored = true;\n if (nodeId === sourceNodeId) {\n break;\n }\n }\n var componentEdges = componentNodes.edgesWith(componentNodes);\n var component = componentNodes.merge(componentEdges);\n components.push(component);\n cut = cut.difference(component);\n }\n };\n eles.forEach(function (ele) {\n if (ele.isNode()) {\n var nodeId = ele.id();\n if (!(nodeId in nodes)) {\n _stronglyConnectedSearch(nodeId);\n }\n }\n });\n return {\n cut: cut,\n components: components\n };\n};\nvar tarjanStronglyConnected$1 = {\n tarjanStronglyConnected: tarjanStronglyConnected,\n tsc: tarjanStronglyConnected,\n tscc: tarjanStronglyConnected,\n tarjanStronglyConnectedComponents: tarjanStronglyConnected\n};\n\nvar elesfn$j = {};\n[elesfn$v, elesfn$u, elesfn$t, elesfn$s, elesfn$r, elesfn$q, elesfn$p, elesfn$o, elesfn$n, elesfn$m, elesfn$l, markovClustering$1, kClustering, hierarchicalClustering$1, affinityPropagation$1, elesfn$k, hopcroftTarjanBiconnected$1, tarjanStronglyConnected$1].forEach(function (props) {\n extend(elesfn$j, props);\n});\n\n/*!\nEmbeddable Minimum Strictly-Compliant Promises/A+ 1.1.1 Thenable\nCopyright (c) 2013-2014 Ralf S. Engelschall (http://engelschall.com)\nLicensed under The MIT License (http://opensource.org/licenses/MIT)\n*/\n\n/* promise states [Promises/A+ 2.1] */\nvar STATE_PENDING = 0; /* [Promises/A+ 2.1.1] */\nvar STATE_FULFILLED = 1; /* [Promises/A+ 2.1.2] */\nvar STATE_REJECTED = 2; /* [Promises/A+ 2.1.3] */\n\n/* promise object constructor */\nvar _api = function api(executor) {\n /* optionally support non-constructor/plain-function call */\n if (!(this instanceof _api)) return new _api(executor);\n\n /* initialize object */\n this.id = 'Thenable/1.0.7';\n this.state = STATE_PENDING; /* initial state */\n this.fulfillValue = undefined; /* initial value */ /* [Promises/A+ 1.3, 2.1.2.2] */\n this.rejectReason = undefined; /* initial reason */ /* [Promises/A+ 1.5, 2.1.3.2] */\n this.onFulfilled = []; /* initial handlers */\n this.onRejected = []; /* initial handlers */\n\n /* provide optional information-hiding proxy */\n this.proxy = {\n then: this.then.bind(this)\n };\n\n /* support optional executor function */\n if (typeof executor === 'function') executor.call(this, this.fulfill.bind(this), this.reject.bind(this));\n};\n\n/* promise API methods */\n_api.prototype = {\n /* promise resolving methods */\n fulfill: function fulfill(value) {\n return deliver(this, STATE_FULFILLED, 'fulfillValue', value);\n },\n reject: function reject(value) {\n return deliver(this, STATE_REJECTED, 'rejectReason', value);\n },\n /* \"The then Method\" [Promises/A+ 1.1, 1.2, 2.2] */\n then: function then(onFulfilled, onRejected) {\n var curr = this;\n var next = new _api(); /* [Promises/A+ 2.2.7] */\n curr.onFulfilled.push(resolver(onFulfilled, next, 'fulfill')); /* [Promises/A+ 2.2.2/2.2.6] */\n curr.onRejected.push(resolver(onRejected, next, 'reject')); /* [Promises/A+ 2.2.3/2.2.6] */\n execute(curr);\n return next.proxy; /* [Promises/A+ 2.2.7, 3.3] */\n }\n};\n\n/* deliver an action */\nvar deliver = function deliver(curr, state, name, value) {\n if (curr.state === STATE_PENDING) {\n curr.state = state; /* [Promises/A+ 2.1.2.1, 2.1.3.1] */\n curr[name] = value; /* [Promises/A+ 2.1.2.2, 2.1.3.2] */\n execute(curr);\n }\n return curr;\n};\n\n/* execute all handlers */\nvar execute = function execute(curr) {\n if (curr.state === STATE_FULFILLED) execute_handlers(curr, 'onFulfilled', curr.fulfillValue);else if (curr.state === STATE_REJECTED) execute_handlers(curr, 'onRejected', curr.rejectReason);\n};\n\n/* execute particular set of handlers */\nvar execute_handlers = function execute_handlers(curr, name, value) {\n /* global setImmediate: true */\n /* global setTimeout: true */\n\n /* short-circuit processing */\n if (curr[name].length === 0) return;\n\n /* iterate over all handlers, exactly once */\n var handlers = curr[name];\n curr[name] = []; /* [Promises/A+ 2.2.2.3, 2.2.3.3] */\n var func = function func() {\n for (var i = 0; i < handlers.length; i++) handlers[i](value); /* [Promises/A+ 2.2.5] */\n };\n\n /* execute procedure asynchronously */ /* [Promises/A+ 2.2.4, 3.1] */\n if (typeof setImmediate === 'function') setImmediate(func);else setTimeout(func, 0);\n};\n\n/* generate a resolver function */\nvar resolver = function resolver(cb, next, method) {\n return function (value) {\n if (typeof cb !== 'function') /* [Promises/A+ 2.2.1, 2.2.7.3, 2.2.7.4] */\n next[method].call(next, value); /* [Promises/A+ 2.2.7.3, 2.2.7.4] */else {\n var result;\n try {\n result = cb(value);\n } /* [Promises/A+ 2.2.2.1, 2.2.3.1, 2.2.5, 3.2] */ catch (e) {\n next.reject(e); /* [Promises/A+ 2.2.7.2] */\n return;\n }\n _resolve(next, result); /* [Promises/A+ 2.2.7.1] */\n }\n };\n};\n\n/* \"Promise Resolution Procedure\" */ /* [Promises/A+ 2.3] */\nvar _resolve = function resolve(promise, x) {\n /* sanity check arguments */ /* [Promises/A+ 2.3.1] */\n if (promise === x || promise.proxy === x) {\n promise.reject(new TypeError('cannot resolve promise with itself'));\n return;\n }\n\n /* surgically check for a \"then\" method\n (mainly to just call the \"getter\" of \"then\" only once) */\n var then;\n if (_typeof(x) === 'object' && x !== null || typeof x === 'function') {\n try {\n then = x.then;\n } /* [Promises/A+ 2.3.3.1, 3.5] */ catch (e) {\n promise.reject(e); /* [Promises/A+ 2.3.3.2] */\n return;\n }\n }\n\n /* handle own Thenables [Promises/A+ 2.3.2]\n and similar \"thenables\" [Promises/A+ 2.3.3] */\n if (typeof then === 'function') {\n var resolved = false;\n try {\n /* call retrieved \"then\" method */ /* [Promises/A+ 2.3.3.3] */\n then.call(x, /* resolvePromise */ /* [Promises/A+ 2.3.3.3.1] */\n function (y) {\n if (resolved) return;\n resolved = true; /* [Promises/A+ 2.3.3.3.3] */\n if (y === x) /* [Promises/A+ 3.6] */\n promise.reject(new TypeError('circular thenable chain'));else _resolve(promise, y);\n }, /* rejectPromise */ /* [Promises/A+ 2.3.3.3.2] */\n function (r) {\n if (resolved) return;\n resolved = true; /* [Promises/A+ 2.3.3.3.3] */\n promise.reject(r);\n });\n } catch (e) {\n if (!resolved) /* [Promises/A+ 2.3.3.3.3] */\n promise.reject(e); /* [Promises/A+ 2.3.3.3.4] */\n }\n return;\n }\n\n /* handle other values */\n promise.fulfill(x); /* [Promises/A+ 2.3.4, 2.3.3.4] */\n};\n\n// so we always have Promise.all()\n_api.all = function (ps) {\n return new _api(function (resolveAll, rejectAll) {\n var vals = new Array(ps.length);\n var doneCount = 0;\n var fulfill = function fulfill(i, val) {\n vals[i] = val;\n doneCount++;\n if (doneCount === ps.length) {\n resolveAll(vals);\n }\n };\n for (var i = 0; i < ps.length; i++) {\n (function (i) {\n var p = ps[i];\n var isPromise = p != null && p.then != null;\n if (isPromise) {\n p.then(function (val) {\n fulfill(i, val);\n }, function (err) {\n rejectAll(err);\n });\n } else {\n var val = p;\n fulfill(i, val);\n }\n })(i);\n }\n });\n};\n_api.resolve = function (val) {\n return new _api(function (resolve, reject) {\n resolve(val);\n });\n};\n_api.reject = function (val) {\n return new _api(function (resolve, reject) {\n reject(val);\n });\n};\nvar Promise$1 = typeof Promise !== 'undefined' ? Promise : _api; // eslint-disable-line no-undef\n\nvar Animation = function Animation(target, opts, opts2) {\n var isCore = core(target);\n var isEle = !isCore;\n var _p = this._private = extend({\n duration: 1000\n }, opts, opts2);\n _p.target = target;\n _p.style = _p.style || _p.css;\n _p.started = false;\n _p.playing = false;\n _p.hooked = false;\n _p.applying = false;\n _p.progress = 0;\n _p.completes = [];\n _p.frames = [];\n if (_p.complete && fn$6(_p.complete)) {\n _p.completes.push(_p.complete);\n }\n if (isEle) {\n var pos = target.position();\n _p.startPosition = _p.startPosition || {\n x: pos.x,\n y: pos.y\n };\n _p.startStyle = _p.startStyle || target.cy().style().getAnimationStartStyle(target, _p.style);\n }\n if (isCore) {\n var pan = target.pan();\n _p.startPan = {\n x: pan.x,\n y: pan.y\n };\n _p.startZoom = target.zoom();\n }\n\n // for future timeline/animations impl\n this.length = 1;\n this[0] = this;\n};\nvar anifn = Animation.prototype;\nextend(anifn, {\n instanceString: function instanceString() {\n return 'animation';\n },\n hook: function hook() {\n var _p = this._private;\n if (!_p.hooked) {\n // add to target's animation queue\n var q;\n var tAni = _p.target._private.animation;\n if (_p.queue) {\n q = tAni.queue;\n } else {\n q = tAni.current;\n }\n q.push(this);\n\n // add to the animation loop pool\n if (elementOrCollection(_p.target)) {\n _p.target.cy().addToAnimationPool(_p.target);\n }\n _p.hooked = true;\n }\n return this;\n },\n play: function play() {\n var _p = this._private;\n\n // autorewind\n if (_p.progress === 1) {\n _p.progress = 0;\n }\n _p.playing = true;\n _p.started = false; // needs to be started by animation loop\n _p.stopped = false;\n this.hook();\n\n // the animation loop will start the animation...\n\n return this;\n },\n playing: function playing() {\n return this._private.playing;\n },\n apply: function apply() {\n var _p = this._private;\n _p.applying = true;\n _p.started = false; // needs to be started by animation loop\n _p.stopped = false;\n this.hook();\n\n // the animation loop will apply the animation at this progress\n\n return this;\n },\n applying: function applying() {\n return this._private.applying;\n },\n pause: function pause() {\n var _p = this._private;\n _p.playing = false;\n _p.started = false;\n return this;\n },\n stop: function stop() {\n var _p = this._private;\n _p.playing = false;\n _p.started = false;\n _p.stopped = true; // to be removed from animation queues\n\n return this;\n },\n rewind: function rewind() {\n return this.progress(0);\n },\n fastforward: function fastforward() {\n return this.progress(1);\n },\n time: function time(t) {\n var _p = this._private;\n if (t === undefined) {\n return _p.progress * _p.duration;\n } else {\n return this.progress(t / _p.duration);\n }\n },\n progress: function progress(p) {\n var _p = this._private;\n var wasPlaying = _p.playing;\n if (p === undefined) {\n return _p.progress;\n } else {\n if (wasPlaying) {\n this.pause();\n }\n _p.progress = p;\n _p.started = false;\n if (wasPlaying) {\n this.play();\n }\n }\n return this;\n },\n completed: function completed() {\n return this._private.progress === 1;\n },\n reverse: function reverse() {\n var _p = this._private;\n var wasPlaying = _p.playing;\n if (wasPlaying) {\n this.pause();\n }\n _p.progress = 1 - _p.progress;\n _p.started = false;\n var swap = function swap(a, b) {\n var _pa = _p[a];\n if (_pa == null) {\n return;\n }\n _p[a] = _p[b];\n _p[b] = _pa;\n };\n swap('zoom', 'startZoom');\n swap('pan', 'startPan');\n swap('position', 'startPosition');\n\n // swap styles\n if (_p.style) {\n for (var i = 0; i < _p.style.length; i++) {\n var prop = _p.style[i];\n var name = prop.name;\n var startStyleProp = _p.startStyle[name];\n _p.startStyle[name] = prop;\n _p.style[i] = startStyleProp;\n }\n }\n if (wasPlaying) {\n this.play();\n }\n return this;\n },\n promise: function promise(type) {\n var _p = this._private;\n var arr;\n switch (type) {\n case 'frame':\n arr = _p.frames;\n break;\n default:\n case 'complete':\n case 'completed':\n arr = _p.completes;\n }\n return new Promise$1(function (resolve, reject) {\n arr.push(function () {\n resolve();\n });\n });\n }\n});\nanifn.complete = anifn.completed;\nanifn.run = anifn.play;\nanifn.running = anifn.playing;\n\nvar define$3 = {\n animated: function animated() {\n return function animatedImpl() {\n var self = this;\n var selfIsArrayLike = self.length !== undefined;\n var all = selfIsArrayLike ? self : [self]; // put in array if not array-like\n var cy = this._private.cy || this;\n if (!cy.styleEnabled()) {\n return false;\n }\n var ele = all[0];\n if (ele) {\n return ele._private.animation.current.length > 0;\n }\n };\n },\n // animated\n\n clearQueue: function clearQueue() {\n return function clearQueueImpl() {\n var self = this;\n var selfIsArrayLike = self.length !== undefined;\n var all = selfIsArrayLike ? self : [self]; // put in array if not array-like\n var cy = this._private.cy || this;\n if (!cy.styleEnabled()) {\n return this;\n }\n for (var i = 0; i < all.length; i++) {\n var ele = all[i];\n ele._private.animation.queue = [];\n }\n return this;\n };\n },\n // clearQueue\n\n delay: function delay() {\n return function delayImpl(time, complete) {\n var cy = this._private.cy || this;\n if (!cy.styleEnabled()) {\n return this;\n }\n return this.animate({\n delay: time,\n duration: time,\n complete: complete\n });\n };\n },\n // delay\n\n delayAnimation: function delayAnimation() {\n return function delayAnimationImpl(time, complete) {\n var cy = this._private.cy || this;\n if (!cy.styleEnabled()) {\n return this;\n }\n return this.animation({\n delay: time,\n duration: time,\n complete: complete\n });\n };\n },\n // delay\n\n animation: function animation() {\n return function animationImpl(properties, params) {\n var self = this;\n var selfIsArrayLike = self.length !== undefined;\n var all = selfIsArrayLike ? self : [self]; // put in array if not array-like\n var cy = this._private.cy || this;\n var isCore = !selfIsArrayLike;\n var isEles = !isCore;\n if (!cy.styleEnabled()) {\n return this;\n }\n var style = cy.style();\n properties = extend({}, properties, params);\n var propertiesEmpty = Object.keys(properties).length === 0;\n if (propertiesEmpty) {\n return new Animation(all[0], properties); // nothing to animate\n }\n if (properties.duration === undefined) {\n properties.duration = 400;\n }\n switch (properties.duration) {\n case 'slow':\n properties.duration = 600;\n break;\n case 'fast':\n properties.duration = 200;\n break;\n }\n if (isEles) {\n properties.style = style.getPropsList(properties.style || properties.css);\n properties.css = undefined;\n }\n if (isEles && properties.renderedPosition != null) {\n var rpos = properties.renderedPosition;\n var pan = cy.pan();\n var zoom = cy.zoom();\n properties.position = renderedToModelPosition(rpos, zoom, pan);\n }\n\n // override pan w/ panBy if set\n if (isCore && properties.panBy != null) {\n var panBy = properties.panBy;\n var cyPan = cy.pan();\n properties.pan = {\n x: cyPan.x + panBy.x,\n y: cyPan.y + panBy.y\n };\n }\n\n // override pan w/ center if set\n var center = properties.center || properties.centre;\n if (isCore && center != null) {\n var centerPan = cy.getCenterPan(center.eles, properties.zoom);\n if (centerPan != null) {\n properties.pan = centerPan;\n }\n }\n\n // override pan & zoom w/ fit if set\n if (isCore && properties.fit != null) {\n var fit = properties.fit;\n var fitVp = cy.getFitViewport(fit.eles || fit.boundingBox, fit.padding);\n if (fitVp != null) {\n properties.pan = fitVp.pan;\n properties.zoom = fitVp.zoom;\n }\n }\n\n // override zoom (& potentially pan) w/ zoom obj if set\n if (isCore && plainObject(properties.zoom)) {\n var vp = cy.getZoomedViewport(properties.zoom);\n if (vp != null) {\n if (vp.zoomed) {\n properties.zoom = vp.zoom;\n }\n if (vp.panned) {\n properties.pan = vp.pan;\n }\n } else {\n properties.zoom = null; // an inavalid zoom (e.g. no delta) gets automatically destroyed\n }\n }\n return new Animation(all[0], properties);\n };\n },\n // animate\n\n animate: function animate() {\n return function animateImpl(properties, params) {\n var self = this;\n var selfIsArrayLike = self.length !== undefined;\n var all = selfIsArrayLike ? self : [self]; // put in array if not array-like\n var cy = this._private.cy || this;\n if (!cy.styleEnabled()) {\n return this;\n }\n if (params) {\n properties = extend({}, properties, params);\n }\n\n // manually hook and run the animation\n for (var i = 0; i < all.length; i++) {\n var ele = all[i];\n var queue = ele.animated() && (properties.queue === undefined || properties.queue);\n var ani = ele.animation(properties, queue ? {\n queue: true\n } : undefined);\n ani.play();\n }\n return this; // chaining\n };\n },\n // animate\n\n stop: function stop() {\n return function stopImpl(clearQueue, jumpToEnd) {\n var self = this;\n var selfIsArrayLike = self.length !== undefined;\n var all = selfIsArrayLike ? self : [self]; // put in array if not array-like\n var cy = this._private.cy || this;\n if (!cy.styleEnabled()) {\n return this;\n }\n for (var i = 0; i < all.length; i++) {\n var ele = all[i];\n var _p = ele._private;\n var anis = _p.animation.current;\n for (var j = 0; j < anis.length; j++) {\n var ani = anis[j];\n var ani_p = ani._private;\n if (jumpToEnd) {\n // next iteration of the animation loop, the animation\n // will go straight to the end and be removed\n ani_p.duration = 0;\n }\n }\n\n // clear the queue of future animations\n if (clearQueue) {\n _p.animation.queue = [];\n }\n if (!jumpToEnd) {\n _p.animation.current = [];\n }\n }\n\n // we have to notify (the animation loop doesn't do it for us on `stop`)\n cy.notify('draw');\n return this;\n };\n } // stop\n}; // define\n\n/**\n * Checks if `value` is classified as an `Array` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an array, else `false`.\n * @example\n *\n * _.isArray([1, 2, 3]);\n * // => true\n *\n * _.isArray(document.body.children);\n * // => false\n *\n * _.isArray('abc');\n * // => false\n *\n * _.isArray(_.noop);\n * // => false\n */\n\nvar isArray_1;\nvar hasRequiredIsArray;\n\nfunction requireIsArray () {\n\tif (hasRequiredIsArray) return isArray_1;\n\thasRequiredIsArray = 1;\n\tvar isArray = Array.isArray;\n\n\tisArray_1 = isArray;\n\treturn isArray_1;\n}\n\nvar _isKey;\nvar hasRequired_isKey;\n\nfunction require_isKey () {\n\tif (hasRequired_isKey) return _isKey;\n\thasRequired_isKey = 1;\n\tvar isArray = requireIsArray(),\n\t isSymbol = requireIsSymbol();\n\n\t/** Used to match property names within property paths. */\n\tvar reIsDeepProp = /\\.|\\[(?:[^[\\]]*|([\"'])(?:(?!\\1)[^\\\\]|\\\\.)*?\\1)\\]/,\n\t reIsPlainProp = /^\\w*$/;\n\n\t/**\n\t * Checks if `value` is a property name and not a property path.\n\t *\n\t * @private\n\t * @param {*} value The value to check.\n\t * @param {Object} [object] The object to query keys on.\n\t * @returns {boolean} Returns `true` if `value` is a property name, else `false`.\n\t */\n\tfunction isKey(value, object) {\n\t if (isArray(value)) {\n\t return false;\n\t }\n\t var type = typeof value;\n\t if (type == 'number' || type == 'symbol' || type == 'boolean' ||\n\t value == null || isSymbol(value)) {\n\t return true;\n\t }\n\t return reIsPlainProp.test(value) || !reIsDeepProp.test(value) ||\n\t (object != null && value in Object(object));\n\t}\n\n\t_isKey = isKey;\n\treturn _isKey;\n}\n\nvar isFunction_1;\nvar hasRequiredIsFunction;\n\nfunction requireIsFunction () {\n\tif (hasRequiredIsFunction) return isFunction_1;\n\thasRequiredIsFunction = 1;\n\tvar baseGetTag = require_baseGetTag(),\n\t isObject = requireIsObject();\n\n\t/** `Object#toString` result references. */\n\tvar asyncTag = '[object AsyncFunction]',\n\t funcTag = '[object Function]',\n\t genTag = '[object GeneratorFunction]',\n\t proxyTag = '[object Proxy]';\n\n\t/**\n\t * Checks if `value` is classified as a `Function` object.\n\t *\n\t * @static\n\t * @memberOf _\n\t * @since 0.1.0\n\t * @category Lang\n\t * @param {*} value The value to check.\n\t * @returns {boolean} Returns `true` if `value` is a function, else `false`.\n\t * @example\n\t *\n\t * _.isFunction(_);\n\t * // => true\n\t *\n\t * _.isFunction(/abc/);\n\t * // => false\n\t */\n\tfunction isFunction(value) {\n\t if (!isObject(value)) {\n\t return false;\n\t }\n\t // The use of `Object#toString` avoids issues with the `typeof` operator\n\t // in Safari 9 which returns 'object' for typed arrays and other constructors.\n\t var tag = baseGetTag(value);\n\t return tag == funcTag || tag == genTag || tag == asyncTag || tag == proxyTag;\n\t}\n\n\tisFunction_1 = isFunction;\n\treturn isFunction_1;\n}\n\nvar _coreJsData;\nvar hasRequired_coreJsData;\n\nfunction require_coreJsData () {\n\tif (hasRequired_coreJsData) return _coreJsData;\n\thasRequired_coreJsData = 1;\n\tvar root = require_root();\n\n\t/** Used to detect overreaching core-js shims. */\n\tvar coreJsData = root['__core-js_shared__'];\n\n\t_coreJsData = coreJsData;\n\treturn _coreJsData;\n}\n\nvar _isMasked;\nvar hasRequired_isMasked;\n\nfunction require_isMasked () {\n\tif (hasRequired_isMasked) return _isMasked;\n\thasRequired_isMasked = 1;\n\tvar coreJsData = require_coreJsData();\n\n\t/** Used to detect methods masquerading as native. */\n\tvar maskSrcKey = (function() {\n\t var uid = /[^.]+$/.exec(coreJsData && coreJsData.keys && coreJsData.keys.IE_PROTO || '');\n\t return uid ? ('Symbol(src)_1.' + uid) : '';\n\t}());\n\n\t/**\n\t * Checks if `func` has its source masked.\n\t *\n\t * @private\n\t * @param {Function} func The function to check.\n\t * @returns {boolean} Returns `true` if `func` is masked, else `false`.\n\t */\n\tfunction isMasked(func) {\n\t return !!maskSrcKey && (maskSrcKey in func);\n\t}\n\n\t_isMasked = isMasked;\n\treturn _isMasked;\n}\n\n/** Used for built-in method references. */\n\nvar _toSource;\nvar hasRequired_toSource;\n\nfunction require_toSource () {\n\tif (hasRequired_toSource) return _toSource;\n\thasRequired_toSource = 1;\n\tvar funcProto = Function.prototype;\n\n\t/** Used to resolve the decompiled source of functions. */\n\tvar funcToString = funcProto.toString;\n\n\t/**\n\t * Converts `func` to its source code.\n\t *\n\t * @private\n\t * @param {Function} func The function to convert.\n\t * @returns {string} Returns the source code.\n\t */\n\tfunction toSource(func) {\n\t if (func != null) {\n\t try {\n\t return funcToString.call(func);\n\t } catch (e) {}\n\t try {\n\t return (func + '');\n\t } catch (e) {}\n\t }\n\t return '';\n\t}\n\n\t_toSource = toSource;\n\treturn _toSource;\n}\n\nvar _baseIsNative;\nvar hasRequired_baseIsNative;\n\nfunction require_baseIsNative () {\n\tif (hasRequired_baseIsNative) return _baseIsNative;\n\thasRequired_baseIsNative = 1;\n\tvar isFunction = requireIsFunction(),\n\t isMasked = require_isMasked(),\n\t isObject = requireIsObject(),\n\t toSource = require_toSource();\n\n\t/**\n\t * Used to match `RegExp`\n\t * [syntax characters](http://ecma-international.org/ecma-262/7.0/#sec-patterns).\n\t */\n\tvar reRegExpChar = /[\\\\^$.*+?()[\\]{}|]/g;\n\n\t/** Used to detect host constructors (Safari). */\n\tvar reIsHostCtor = /^\\[object .+?Constructor\\]$/;\n\n\t/** Used for built-in method references. */\n\tvar funcProto = Function.prototype,\n\t objectProto = Object.prototype;\n\n\t/** Used to resolve the decompiled source of functions. */\n\tvar funcToString = funcProto.toString;\n\n\t/** Used to check objects for own properties. */\n\tvar hasOwnProperty = objectProto.hasOwnProperty;\n\n\t/** Used to detect if a method is native. */\n\tvar reIsNative = RegExp('^' +\n\t funcToString.call(hasOwnProperty).replace(reRegExpChar, '\\\\$&')\n\t .replace(/hasOwnProperty|(function).*?(?=\\\\\\()| for .+?(?=\\\\\\])/g, '$1.*?') + '$'\n\t);\n\n\t/**\n\t * The base implementation of `_.isNative` without bad shim checks.\n\t *\n\t * @private\n\t * @param {*} value The value to check.\n\t * @returns {boolean} Returns `true` if `value` is a native function,\n\t * else `false`.\n\t */\n\tfunction baseIsNative(value) {\n\t if (!isObject(value) || isMasked(value)) {\n\t return false;\n\t }\n\t var pattern = isFunction(value) ? reIsNative : reIsHostCtor;\n\t return pattern.test(toSource(value));\n\t}\n\n\t_baseIsNative = baseIsNative;\n\treturn _baseIsNative;\n}\n\n/**\n * Gets the value at `key` of `object`.\n *\n * @private\n * @param {Object} [object] The object to query.\n * @param {string} key The key of the property to get.\n * @returns {*} Returns the property value.\n */\n\nvar _getValue;\nvar hasRequired_getValue;\n\nfunction require_getValue () {\n\tif (hasRequired_getValue) return _getValue;\n\thasRequired_getValue = 1;\n\tfunction getValue(object, key) {\n\t return object == null ? undefined : object[key];\n\t}\n\n\t_getValue = getValue;\n\treturn _getValue;\n}\n\nvar _getNative;\nvar hasRequired_getNative;\n\nfunction require_getNative () {\n\tif (hasRequired_getNative) return _getNative;\n\thasRequired_getNative = 1;\n\tvar baseIsNative = require_baseIsNative(),\n\t getValue = require_getValue();\n\n\t/**\n\t * Gets the native function at `key` of `object`.\n\t *\n\t * @private\n\t * @param {Object} object The object to query.\n\t * @param {string} key The key of the method to get.\n\t * @returns {*} Returns the function if it's native, else `undefined`.\n\t */\n\tfunction getNative(object, key) {\n\t var value = getValue(object, key);\n\t return baseIsNative(value) ? value : undefined;\n\t}\n\n\t_getNative = getNative;\n\treturn _getNative;\n}\n\nvar _nativeCreate;\nvar hasRequired_nativeCreate;\n\nfunction require_nativeCreate () {\n\tif (hasRequired_nativeCreate) return _nativeCreate;\n\thasRequired_nativeCreate = 1;\n\tvar getNative = require_getNative();\n\n\t/* Built-in method references that are verified to be native. */\n\tvar nativeCreate = getNative(Object, 'create');\n\n\t_nativeCreate = nativeCreate;\n\treturn _nativeCreate;\n}\n\nvar _hashClear;\nvar hasRequired_hashClear;\n\nfunction require_hashClear () {\n\tif (hasRequired_hashClear) return _hashClear;\n\thasRequired_hashClear = 1;\n\tvar nativeCreate = require_nativeCreate();\n\n\t/**\n\t * Removes all key-value entries from the hash.\n\t *\n\t * @private\n\t * @name clear\n\t * @memberOf Hash\n\t */\n\tfunction hashClear() {\n\t this.__data__ = nativeCreate ? nativeCreate(null) : {};\n\t this.size = 0;\n\t}\n\n\t_hashClear = hashClear;\n\treturn _hashClear;\n}\n\n/**\n * Removes `key` and its value from the hash.\n *\n * @private\n * @name delete\n * @memberOf Hash\n * @param {Object} hash The hash to modify.\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\n\nvar _hashDelete;\nvar hasRequired_hashDelete;\n\nfunction require_hashDelete () {\n\tif (hasRequired_hashDelete) return _hashDelete;\n\thasRequired_hashDelete = 1;\n\tfunction hashDelete(key) {\n\t var result = this.has(key) && delete this.__data__[key];\n\t this.size -= result ? 1 : 0;\n\t return result;\n\t}\n\n\t_hashDelete = hashDelete;\n\treturn _hashDelete;\n}\n\nvar _hashGet;\nvar hasRequired_hashGet;\n\nfunction require_hashGet () {\n\tif (hasRequired_hashGet) return _hashGet;\n\thasRequired_hashGet = 1;\n\tvar nativeCreate = require_nativeCreate();\n\n\t/** Used to stand-in for `undefined` hash values. */\n\tvar HASH_UNDEFINED = '__lodash_hash_undefined__';\n\n\t/** Used for built-in method references. */\n\tvar objectProto = Object.prototype;\n\n\t/** Used to check objects for own properties. */\n\tvar hasOwnProperty = objectProto.hasOwnProperty;\n\n\t/**\n\t * Gets the hash value for `key`.\n\t *\n\t * @private\n\t * @name get\n\t * @memberOf Hash\n\t * @param {string} key The key of the value to get.\n\t * @returns {*} Returns the entry value.\n\t */\n\tfunction hashGet(key) {\n\t var data = this.__data__;\n\t if (nativeCreate) {\n\t var result = data[key];\n\t return result === HASH_UNDEFINED ? undefined : result;\n\t }\n\t return hasOwnProperty.call(data, key) ? data[key] : undefined;\n\t}\n\n\t_hashGet = hashGet;\n\treturn _hashGet;\n}\n\nvar _hashHas;\nvar hasRequired_hashHas;\n\nfunction require_hashHas () {\n\tif (hasRequired_hashHas) return _hashHas;\n\thasRequired_hashHas = 1;\n\tvar nativeCreate = require_nativeCreate();\n\n\t/** Used for built-in method references. */\n\tvar objectProto = Object.prototype;\n\n\t/** Used to check objects for own properties. */\n\tvar hasOwnProperty = objectProto.hasOwnProperty;\n\n\t/**\n\t * Checks if a hash value for `key` exists.\n\t *\n\t * @private\n\t * @name has\n\t * @memberOf Hash\n\t * @param {string} key The key of the entry to check.\n\t * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n\t */\n\tfunction hashHas(key) {\n\t var data = this.__data__;\n\t return nativeCreate ? (data[key] !== undefined) : hasOwnProperty.call(data, key);\n\t}\n\n\t_hashHas = hashHas;\n\treturn _hashHas;\n}\n\nvar _hashSet;\nvar hasRequired_hashSet;\n\nfunction require_hashSet () {\n\tif (hasRequired_hashSet) return _hashSet;\n\thasRequired_hashSet = 1;\n\tvar nativeCreate = require_nativeCreate();\n\n\t/** Used to stand-in for `undefined` hash values. */\n\tvar HASH_UNDEFINED = '__lodash_hash_undefined__';\n\n\t/**\n\t * Sets the hash `key` to `value`.\n\t *\n\t * @private\n\t * @name set\n\t * @memberOf Hash\n\t * @param {string} key The key of the value to set.\n\t * @param {*} value The value to set.\n\t * @returns {Object} Returns the hash instance.\n\t */\n\tfunction hashSet(key, value) {\n\t var data = this.__data__;\n\t this.size += this.has(key) ? 0 : 1;\n\t data[key] = (nativeCreate && value === undefined) ? HASH_UNDEFINED : value;\n\t return this;\n\t}\n\n\t_hashSet = hashSet;\n\treturn _hashSet;\n}\n\nvar _Hash;\nvar hasRequired_Hash;\n\nfunction require_Hash () {\n\tif (hasRequired_Hash) return _Hash;\n\thasRequired_Hash = 1;\n\tvar hashClear = require_hashClear(),\n\t hashDelete = require_hashDelete(),\n\t hashGet = require_hashGet(),\n\t hashHas = require_hashHas(),\n\t hashSet = require_hashSet();\n\n\t/**\n\t * Creates a hash object.\n\t *\n\t * @private\n\t * @constructor\n\t * @param {Array} [entries] The key-value pairs to cache.\n\t */\n\tfunction Hash(entries) {\n\t var index = -1,\n\t length = entries == null ? 0 : entries.length;\n\n\t this.clear();\n\t while (++index < length) {\n\t var entry = entries[index];\n\t this.set(entry[0], entry[1]);\n\t }\n\t}\n\n\t// Add methods to `Hash`.\n\tHash.prototype.clear = hashClear;\n\tHash.prototype['delete'] = hashDelete;\n\tHash.prototype.get = hashGet;\n\tHash.prototype.has = hashHas;\n\tHash.prototype.set = hashSet;\n\n\t_Hash = Hash;\n\treturn _Hash;\n}\n\n/**\n * Removes all key-value entries from the list cache.\n *\n * @private\n * @name clear\n * @memberOf ListCache\n */\n\nvar _listCacheClear;\nvar hasRequired_listCacheClear;\n\nfunction require_listCacheClear () {\n\tif (hasRequired_listCacheClear) return _listCacheClear;\n\thasRequired_listCacheClear = 1;\n\tfunction listCacheClear() {\n\t this.__data__ = [];\n\t this.size = 0;\n\t}\n\n\t_listCacheClear = listCacheClear;\n\treturn _listCacheClear;\n}\n\n/**\n * Performs a\n * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n * comparison between two values to determine if they are equivalent.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @returns {boolean} Returns `true` if the values are equivalent, else `false`.\n * @example\n *\n * var object = { 'a': 1 };\n * var other = { 'a': 1 };\n *\n * _.eq(object, object);\n * // => true\n *\n * _.eq(object, other);\n * // => false\n *\n * _.eq('a', 'a');\n * // => true\n *\n * _.eq('a', Object('a'));\n * // => false\n *\n * _.eq(NaN, NaN);\n * // => true\n */\n\nvar eq_1;\nvar hasRequiredEq;\n\nfunction requireEq () {\n\tif (hasRequiredEq) return eq_1;\n\thasRequiredEq = 1;\n\tfunction eq(value, other) {\n\t return value === other || (value !== value && other !== other);\n\t}\n\n\teq_1 = eq;\n\treturn eq_1;\n}\n\nvar _assocIndexOf;\nvar hasRequired_assocIndexOf;\n\nfunction require_assocIndexOf () {\n\tif (hasRequired_assocIndexOf) return _assocIndexOf;\n\thasRequired_assocIndexOf = 1;\n\tvar eq = requireEq();\n\n\t/**\n\t * Gets the index at which the `key` is found in `array` of key-value pairs.\n\t *\n\t * @private\n\t * @param {Array} array The array to inspect.\n\t * @param {*} key The key to search for.\n\t * @returns {number} Returns the index of the matched value, else `-1`.\n\t */\n\tfunction assocIndexOf(array, key) {\n\t var length = array.length;\n\t while (length--) {\n\t if (eq(array[length][0], key)) {\n\t return length;\n\t }\n\t }\n\t return -1;\n\t}\n\n\t_assocIndexOf = assocIndexOf;\n\treturn _assocIndexOf;\n}\n\nvar _listCacheDelete;\nvar hasRequired_listCacheDelete;\n\nfunction require_listCacheDelete () {\n\tif (hasRequired_listCacheDelete) return _listCacheDelete;\n\thasRequired_listCacheDelete = 1;\n\tvar assocIndexOf = require_assocIndexOf();\n\n\t/** Used for built-in method references. */\n\tvar arrayProto = Array.prototype;\n\n\t/** Built-in value references. */\n\tvar splice = arrayProto.splice;\n\n\t/**\n\t * Removes `key` and its value from the list cache.\n\t *\n\t * @private\n\t * @name delete\n\t * @memberOf ListCache\n\t * @param {string} key The key of the value to remove.\n\t * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n\t */\n\tfunction listCacheDelete(key) {\n\t var data = this.__data__,\n\t index = assocIndexOf(data, key);\n\n\t if (index < 0) {\n\t return false;\n\t }\n\t var lastIndex = data.length - 1;\n\t if (index == lastIndex) {\n\t data.pop();\n\t } else {\n\t splice.call(data, index, 1);\n\t }\n\t --this.size;\n\t return true;\n\t}\n\n\t_listCacheDelete = listCacheDelete;\n\treturn _listCacheDelete;\n}\n\nvar _listCacheGet;\nvar hasRequired_listCacheGet;\n\nfunction require_listCacheGet () {\n\tif (hasRequired_listCacheGet) return _listCacheGet;\n\thasRequired_listCacheGet = 1;\n\tvar assocIndexOf = require_assocIndexOf();\n\n\t/**\n\t * Gets the list cache value for `key`.\n\t *\n\t * @private\n\t * @name get\n\t * @memberOf ListCache\n\t * @param {string} key The key of the value to get.\n\t * @returns {*} Returns the entry value.\n\t */\n\tfunction listCacheGet(key) {\n\t var data = this.__data__,\n\t index = assocIndexOf(data, key);\n\n\t return index < 0 ? undefined : data[index][1];\n\t}\n\n\t_listCacheGet = listCacheGet;\n\treturn _listCacheGet;\n}\n\nvar _listCacheHas;\nvar hasRequired_listCacheHas;\n\nfunction require_listCacheHas () {\n\tif (hasRequired_listCacheHas) return _listCacheHas;\n\thasRequired_listCacheHas = 1;\n\tvar assocIndexOf = require_assocIndexOf();\n\n\t/**\n\t * Checks if a list cache value for `key` exists.\n\t *\n\t * @private\n\t * @name has\n\t * @memberOf ListCache\n\t * @param {string} key The key of the entry to check.\n\t * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n\t */\n\tfunction listCacheHas(key) {\n\t return assocIndexOf(this.__data__, key) > -1;\n\t}\n\n\t_listCacheHas = listCacheHas;\n\treturn _listCacheHas;\n}\n\nvar _listCacheSet;\nvar hasRequired_listCacheSet;\n\nfunction require_listCacheSet () {\n\tif (hasRequired_listCacheSet) return _listCacheSet;\n\thasRequired_listCacheSet = 1;\n\tvar assocIndexOf = require_assocIndexOf();\n\n\t/**\n\t * Sets the list cache `key` to `value`.\n\t *\n\t * @private\n\t * @name set\n\t * @memberOf ListCache\n\t * @param {string} key The key of the value to set.\n\t * @param {*} value The value to set.\n\t * @returns {Object} Returns the list cache instance.\n\t */\n\tfunction listCacheSet(key, value) {\n\t var data = this.__data__,\n\t index = assocIndexOf(data, key);\n\n\t if (index < 0) {\n\t ++this.size;\n\t data.push([key, value]);\n\t } else {\n\t data[index][1] = value;\n\t }\n\t return this;\n\t}\n\n\t_listCacheSet = listCacheSet;\n\treturn _listCacheSet;\n}\n\nvar _ListCache;\nvar hasRequired_ListCache;\n\nfunction require_ListCache () {\n\tif (hasRequired_ListCache) return _ListCache;\n\thasRequired_ListCache = 1;\n\tvar listCacheClear = require_listCacheClear(),\n\t listCacheDelete = require_listCacheDelete(),\n\t listCacheGet = require_listCacheGet(),\n\t listCacheHas = require_listCacheHas(),\n\t listCacheSet = require_listCacheSet();\n\n\t/**\n\t * Creates an list cache object.\n\t *\n\t * @private\n\t * @constructor\n\t * @param {Array} [entries] The key-value pairs to cache.\n\t */\n\tfunction ListCache(entries) {\n\t var index = -1,\n\t length = entries == null ? 0 : entries.length;\n\n\t this.clear();\n\t while (++index < length) {\n\t var entry = entries[index];\n\t this.set(entry[0], entry[1]);\n\t }\n\t}\n\n\t// Add methods to `ListCache`.\n\tListCache.prototype.clear = listCacheClear;\n\tListCache.prototype['delete'] = listCacheDelete;\n\tListCache.prototype.get = listCacheGet;\n\tListCache.prototype.has = listCacheHas;\n\tListCache.prototype.set = listCacheSet;\n\n\t_ListCache = ListCache;\n\treturn _ListCache;\n}\n\nvar _Map;\nvar hasRequired_Map;\n\nfunction require_Map () {\n\tif (hasRequired_Map) return _Map;\n\thasRequired_Map = 1;\n\tvar getNative = require_getNative(),\n\t root = require_root();\n\n\t/* Built-in method references that are verified to be native. */\n\tvar Map = getNative(root, 'Map');\n\n\t_Map = Map;\n\treturn _Map;\n}\n\nvar _mapCacheClear;\nvar hasRequired_mapCacheClear;\n\nfunction require_mapCacheClear () {\n\tif (hasRequired_mapCacheClear) return _mapCacheClear;\n\thasRequired_mapCacheClear = 1;\n\tvar Hash = require_Hash(),\n\t ListCache = require_ListCache(),\n\t Map = require_Map();\n\n\t/**\n\t * Removes all key-value entries from the map.\n\t *\n\t * @private\n\t * @name clear\n\t * @memberOf MapCache\n\t */\n\tfunction mapCacheClear() {\n\t this.size = 0;\n\t this.__data__ = {\n\t 'hash': new Hash,\n\t 'map': new (Map || ListCache),\n\t 'string': new Hash\n\t };\n\t}\n\n\t_mapCacheClear = mapCacheClear;\n\treturn _mapCacheClear;\n}\n\n/**\n * Checks if `value` is suitable for use as unique object key.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is suitable, else `false`.\n */\n\nvar _isKeyable;\nvar hasRequired_isKeyable;\n\nfunction require_isKeyable () {\n\tif (hasRequired_isKeyable) return _isKeyable;\n\thasRequired_isKeyable = 1;\n\tfunction isKeyable(value) {\n\t var type = typeof value;\n\t return (type == 'string' || type == 'number' || type == 'symbol' || type == 'boolean')\n\t ? (value !== '__proto__')\n\t : (value === null);\n\t}\n\n\t_isKeyable = isKeyable;\n\treturn _isKeyable;\n}\n\nvar _getMapData;\nvar hasRequired_getMapData;\n\nfunction require_getMapData () {\n\tif (hasRequired_getMapData) return _getMapData;\n\thasRequired_getMapData = 1;\n\tvar isKeyable = require_isKeyable();\n\n\t/**\n\t * Gets the data for `map`.\n\t *\n\t * @private\n\t * @param {Object} map The map to query.\n\t * @param {string} key The reference key.\n\t * @returns {*} Returns the map data.\n\t */\n\tfunction getMapData(map, key) {\n\t var data = map.__data__;\n\t return isKeyable(key)\n\t ? data[typeof key == 'string' ? 'string' : 'hash']\n\t : data.map;\n\t}\n\n\t_getMapData = getMapData;\n\treturn _getMapData;\n}\n\nvar _mapCacheDelete;\nvar hasRequired_mapCacheDelete;\n\nfunction require_mapCacheDelete () {\n\tif (hasRequired_mapCacheDelete) return _mapCacheDelete;\n\thasRequired_mapCacheDelete = 1;\n\tvar getMapData = require_getMapData();\n\n\t/**\n\t * Removes `key` and its value from the map.\n\t *\n\t * @private\n\t * @name delete\n\t * @memberOf MapCache\n\t * @param {string} key The key of the value to remove.\n\t * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n\t */\n\tfunction mapCacheDelete(key) {\n\t var result = getMapData(this, key)['delete'](key);\n\t this.size -= result ? 1 : 0;\n\t return result;\n\t}\n\n\t_mapCacheDelete = mapCacheDelete;\n\treturn _mapCacheDelete;\n}\n\nvar _mapCacheGet;\nvar hasRequired_mapCacheGet;\n\nfunction require_mapCacheGet () {\n\tif (hasRequired_mapCacheGet) return _mapCacheGet;\n\thasRequired_mapCacheGet = 1;\n\tvar getMapData = require_getMapData();\n\n\t/**\n\t * Gets the map value for `key`.\n\t *\n\t * @private\n\t * @name get\n\t * @memberOf MapCache\n\t * @param {string} key The key of the value to get.\n\t * @returns {*} Returns the entry value.\n\t */\n\tfunction mapCacheGet(key) {\n\t return getMapData(this, key).get(key);\n\t}\n\n\t_mapCacheGet = mapCacheGet;\n\treturn _mapCacheGet;\n}\n\nvar _mapCacheHas;\nvar hasRequired_mapCacheHas;\n\nfunction require_mapCacheHas () {\n\tif (hasRequired_mapCacheHas) return _mapCacheHas;\n\thasRequired_mapCacheHas = 1;\n\tvar getMapData = require_getMapData();\n\n\t/**\n\t * Checks if a map value for `key` exists.\n\t *\n\t * @private\n\t * @name has\n\t * @memberOf MapCache\n\t * @param {string} key The key of the entry to check.\n\t * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n\t */\n\tfunction mapCacheHas(key) {\n\t return getMapData(this, key).has(key);\n\t}\n\n\t_mapCacheHas = mapCacheHas;\n\treturn _mapCacheHas;\n}\n\nvar _mapCacheSet;\nvar hasRequired_mapCacheSet;\n\nfunction require_mapCacheSet () {\n\tif (hasRequired_mapCacheSet) return _mapCacheSet;\n\thasRequired_mapCacheSet = 1;\n\tvar getMapData = require_getMapData();\n\n\t/**\n\t * Sets the map `key` to `value`.\n\t *\n\t * @private\n\t * @name set\n\t * @memberOf MapCache\n\t * @param {string} key The key of the value to set.\n\t * @param {*} value The value to set.\n\t * @returns {Object} Returns the map cache instance.\n\t */\n\tfunction mapCacheSet(key, value) {\n\t var data = getMapData(this, key),\n\t size = data.size;\n\n\t data.set(key, value);\n\t this.size += data.size == size ? 0 : 1;\n\t return this;\n\t}\n\n\t_mapCacheSet = mapCacheSet;\n\treturn _mapCacheSet;\n}\n\nvar _MapCache;\nvar hasRequired_MapCache;\n\nfunction require_MapCache () {\n\tif (hasRequired_MapCache) return _MapCache;\n\thasRequired_MapCache = 1;\n\tvar mapCacheClear = require_mapCacheClear(),\n\t mapCacheDelete = require_mapCacheDelete(),\n\t mapCacheGet = require_mapCacheGet(),\n\t mapCacheHas = require_mapCacheHas(),\n\t mapCacheSet = require_mapCacheSet();\n\n\t/**\n\t * Creates a map cache object to store key-value pairs.\n\t *\n\t * @private\n\t * @constructor\n\t * @param {Array} [entries] The key-value pairs to cache.\n\t */\n\tfunction MapCache(entries) {\n\t var index = -1,\n\t length = entries == null ? 0 : entries.length;\n\n\t this.clear();\n\t while (++index < length) {\n\t var entry = entries[index];\n\t this.set(entry[0], entry[1]);\n\t }\n\t}\n\n\t// Add methods to `MapCache`.\n\tMapCache.prototype.clear = mapCacheClear;\n\tMapCache.prototype['delete'] = mapCacheDelete;\n\tMapCache.prototype.get = mapCacheGet;\n\tMapCache.prototype.has = mapCacheHas;\n\tMapCache.prototype.set = mapCacheSet;\n\n\t_MapCache = MapCache;\n\treturn _MapCache;\n}\n\nvar memoize_1;\nvar hasRequiredMemoize;\n\nfunction requireMemoize () {\n\tif (hasRequiredMemoize) return memoize_1;\n\thasRequiredMemoize = 1;\n\tvar MapCache = require_MapCache();\n\n\t/** Error message constants. */\n\tvar FUNC_ERROR_TEXT = 'Expected a function';\n\n\t/**\n\t * Creates a function that memoizes the result of `func`. If `resolver` is\n\t * provided, it determines the cache key for storing the result based on the\n\t * arguments provided to the memoized function. By default, the first argument\n\t * provided to the memoized function is used as the map cache key. The `func`\n\t * is invoked with the `this` binding of the memoized function.\n\t *\n\t * **Note:** The cache is exposed as the `cache` property on the memoized\n\t * function. Its creation may be customized by replacing the `_.memoize.Cache`\n\t * constructor with one whose instances implement the\n\t * [`Map`](http://ecma-international.org/ecma-262/7.0/#sec-properties-of-the-map-prototype-object)\n\t * method interface of `clear`, `delete`, `get`, `has`, and `set`.\n\t *\n\t * @static\n\t * @memberOf _\n\t * @since 0.1.0\n\t * @category Function\n\t * @param {Function} func The function to have its output memoized.\n\t * @param {Function} [resolver] The function to resolve the cache key.\n\t * @returns {Function} Returns the new memoized function.\n\t * @example\n\t *\n\t * var object = { 'a': 1, 'b': 2 };\n\t * var other = { 'c': 3, 'd': 4 };\n\t *\n\t * var values = _.memoize(_.values);\n\t * values(object);\n\t * // => [1, 2]\n\t *\n\t * values(other);\n\t * // => [3, 4]\n\t *\n\t * object.a = 2;\n\t * values(object);\n\t * // => [1, 2]\n\t *\n\t * // Modify the result cache.\n\t * values.cache.set(object, ['a', 'b']);\n\t * values(object);\n\t * // => ['a', 'b']\n\t *\n\t * // Replace `_.memoize.Cache`.\n\t * _.memoize.Cache = WeakMap;\n\t */\n\tfunction memoize(func, resolver) {\n\t if (typeof func != 'function' || (resolver != null && typeof resolver != 'function')) {\n\t throw new TypeError(FUNC_ERROR_TEXT);\n\t }\n\t var memoized = function() {\n\t var args = arguments,\n\t key = resolver ? resolver.apply(this, args) : args[0],\n\t cache = memoized.cache;\n\n\t if (cache.has(key)) {\n\t return cache.get(key);\n\t }\n\t var result = func.apply(this, args);\n\t memoized.cache = cache.set(key, result) || cache;\n\t return result;\n\t };\n\t memoized.cache = new (memoize.Cache || MapCache);\n\t return memoized;\n\t}\n\n\t// Expose `MapCache`.\n\tmemoize.Cache = MapCache;\n\n\tmemoize_1 = memoize;\n\treturn memoize_1;\n}\n\nvar _memoizeCapped;\nvar hasRequired_memoizeCapped;\n\nfunction require_memoizeCapped () {\n\tif (hasRequired_memoizeCapped) return _memoizeCapped;\n\thasRequired_memoizeCapped = 1;\n\tvar memoize = requireMemoize();\n\n\t/** Used as the maximum memoize cache size. */\n\tvar MAX_MEMOIZE_SIZE = 500;\n\n\t/**\n\t * A specialized version of `_.memoize` which clears the memoized function's\n\t * cache when it exceeds `MAX_MEMOIZE_SIZE`.\n\t *\n\t * @private\n\t * @param {Function} func The function to have its output memoized.\n\t * @returns {Function} Returns the new memoized function.\n\t */\n\tfunction memoizeCapped(func) {\n\t var result = memoize(func, function(key) {\n\t if (cache.size === MAX_MEMOIZE_SIZE) {\n\t cache.clear();\n\t }\n\t return key;\n\t });\n\n\t var cache = result.cache;\n\t return result;\n\t}\n\n\t_memoizeCapped = memoizeCapped;\n\treturn _memoizeCapped;\n}\n\nvar _stringToPath;\nvar hasRequired_stringToPath;\n\nfunction require_stringToPath () {\n\tif (hasRequired_stringToPath) return _stringToPath;\n\thasRequired_stringToPath = 1;\n\tvar memoizeCapped = require_memoizeCapped();\n\n\t/** Used to match property names within property paths. */\n\tvar rePropName = /[^.[\\]]+|\\[(?:(-?\\d+(?:\\.\\d+)?)|([\"'])((?:(?!\\2)[^\\\\]|\\\\.)*?)\\2)\\]|(?=(?:\\.|\\[\\])(?:\\.|\\[\\]|$))/g;\n\n\t/** Used to match backslashes in property paths. */\n\tvar reEscapeChar = /\\\\(\\\\)?/g;\n\n\t/**\n\t * Converts `string` to a property path array.\n\t *\n\t * @private\n\t * @param {string} string The string to convert.\n\t * @returns {Array} Returns the property path array.\n\t */\n\tvar stringToPath = memoizeCapped(function(string) {\n\t var result = [];\n\t if (string.charCodeAt(0) === 46 /* . */) {\n\t result.push('');\n\t }\n\t string.replace(rePropName, function(match, number, quote, subString) {\n\t result.push(quote ? subString.replace(reEscapeChar, '$1') : (number || match));\n\t });\n\t return result;\n\t});\n\n\t_stringToPath = stringToPath;\n\treturn _stringToPath;\n}\n\n/**\n * A specialized version of `_.map` for arrays without support for iteratee\n * shorthands.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Array} Returns the new mapped array.\n */\n\nvar _arrayMap;\nvar hasRequired_arrayMap;\n\nfunction require_arrayMap () {\n\tif (hasRequired_arrayMap) return _arrayMap;\n\thasRequired_arrayMap = 1;\n\tfunction arrayMap(array, iteratee) {\n\t var index = -1,\n\t length = array == null ? 0 : array.length,\n\t result = Array(length);\n\n\t while (++index < length) {\n\t result[index] = iteratee(array[index], index, array);\n\t }\n\t return result;\n\t}\n\n\t_arrayMap = arrayMap;\n\treturn _arrayMap;\n}\n\nvar _baseToString;\nvar hasRequired_baseToString;\n\nfunction require_baseToString () {\n\tif (hasRequired_baseToString) return _baseToString;\n\thasRequired_baseToString = 1;\n\tvar Symbol = require_Symbol(),\n\t arrayMap = require_arrayMap(),\n\t isArray = requireIsArray(),\n\t isSymbol = requireIsSymbol();\n\n\t/** Used to convert symbols to primitives and strings. */\n\tvar symbolProto = Symbol ? Symbol.prototype : undefined,\n\t symbolToString = symbolProto ? symbolProto.toString : undefined;\n\n\t/**\n\t * The base implementation of `_.toString` which doesn't convert nullish\n\t * values to empty strings.\n\t *\n\t * @private\n\t * @param {*} value The value to process.\n\t * @returns {string} Returns the string.\n\t */\n\tfunction baseToString(value) {\n\t // Exit early for strings to avoid a performance hit in some environments.\n\t if (typeof value == 'string') {\n\t return value;\n\t }\n\t if (isArray(value)) {\n\t // Recursively convert values (susceptible to call stack limits).\n\t return arrayMap(value, baseToString) + '';\n\t }\n\t if (isSymbol(value)) {\n\t return symbolToString ? symbolToString.call(value) : '';\n\t }\n\t var result = (value + '');\n\t return (result == '0' && (1 / value) == -Infinity) ? '-0' : result;\n\t}\n\n\t_baseToString = baseToString;\n\treturn _baseToString;\n}\n\nvar toString_1;\nvar hasRequiredToString;\n\nfunction requireToString () {\n\tif (hasRequiredToString) return toString_1;\n\thasRequiredToString = 1;\n\tvar baseToString = require_baseToString();\n\n\t/**\n\t * Converts `value` to a string. An empty string is returned for `null`\n\t * and `undefined` values. The sign of `-0` is preserved.\n\t *\n\t * @static\n\t * @memberOf _\n\t * @since 4.0.0\n\t * @category Lang\n\t * @param {*} value The value to convert.\n\t * @returns {string} Returns the converted string.\n\t * @example\n\t *\n\t * _.toString(null);\n\t * // => ''\n\t *\n\t * _.toString(-0);\n\t * // => '-0'\n\t *\n\t * _.toString([1, 2, 3]);\n\t * // => '1,2,3'\n\t */\n\tfunction toString(value) {\n\t return value == null ? '' : baseToString(value);\n\t}\n\n\ttoString_1 = toString;\n\treturn toString_1;\n}\n\nvar _castPath;\nvar hasRequired_castPath;\n\nfunction require_castPath () {\n\tif (hasRequired_castPath) return _castPath;\n\thasRequired_castPath = 1;\n\tvar isArray = requireIsArray(),\n\t isKey = require_isKey(),\n\t stringToPath = require_stringToPath(),\n\t toString = requireToString();\n\n\t/**\n\t * Casts `value` to a path array if it's not one.\n\t *\n\t * @private\n\t * @param {*} value The value to inspect.\n\t * @param {Object} [object] The object to query keys on.\n\t * @returns {Array} Returns the cast property path array.\n\t */\n\tfunction castPath(value, object) {\n\t if (isArray(value)) {\n\t return value;\n\t }\n\t return isKey(value, object) ? [value] : stringToPath(toString(value));\n\t}\n\n\t_castPath = castPath;\n\treturn _castPath;\n}\n\nvar _toKey;\nvar hasRequired_toKey;\n\nfunction require_toKey () {\n\tif (hasRequired_toKey) return _toKey;\n\thasRequired_toKey = 1;\n\tvar isSymbol = requireIsSymbol();\n\n\t/**\n\t * Converts `value` to a string key if it's not a string or symbol.\n\t *\n\t * @private\n\t * @param {*} value The value to inspect.\n\t * @returns {string|symbol} Returns the key.\n\t */\n\tfunction toKey(value) {\n\t if (typeof value == 'string' || isSymbol(value)) {\n\t return value;\n\t }\n\t var result = (value + '');\n\t return (result == '0' && (1 / value) == -Infinity) ? '-0' : result;\n\t}\n\n\t_toKey = toKey;\n\treturn _toKey;\n}\n\nvar _baseGet;\nvar hasRequired_baseGet;\n\nfunction require_baseGet () {\n\tif (hasRequired_baseGet) return _baseGet;\n\thasRequired_baseGet = 1;\n\tvar castPath = require_castPath(),\n\t toKey = require_toKey();\n\n\t/**\n\t * The base implementation of `_.get` without support for default values.\n\t *\n\t * @private\n\t * @param {Object} object The object to query.\n\t * @param {Array|string} path The path of the property to get.\n\t * @returns {*} Returns the resolved value.\n\t */\n\tfunction baseGet(object, path) {\n\t path = castPath(path, object);\n\n\t var index = 0,\n\t length = path.length;\n\n\t while (object != null && index < length) {\n\t object = object[toKey(path[index++])];\n\t }\n\t return (index && index == length) ? object : undefined;\n\t}\n\n\t_baseGet = baseGet;\n\treturn _baseGet;\n}\n\nvar get_1;\nvar hasRequiredGet;\n\nfunction requireGet () {\n\tif (hasRequiredGet) return get_1;\n\thasRequiredGet = 1;\n\tvar baseGet = require_baseGet();\n\n\t/**\n\t * Gets the value at `path` of `object`. If the resolved value is\n\t * `undefined`, the `defaultValue` is returned in its place.\n\t *\n\t * @static\n\t * @memberOf _\n\t * @since 3.7.0\n\t * @category Object\n\t * @param {Object} object The object to query.\n\t * @param {Array|string} path The path of the property to get.\n\t * @param {*} [defaultValue] The value returned for `undefined` resolved values.\n\t * @returns {*} Returns the resolved value.\n\t * @example\n\t *\n\t * var object = { 'a': [{ 'b': { 'c': 3 } }] };\n\t *\n\t * _.get(object, 'a[0].b.c');\n\t * // => 3\n\t *\n\t * _.get(object, ['a', '0', 'b', 'c']);\n\t * // => 3\n\t *\n\t * _.get(object, 'a.b.c', 'default');\n\t * // => 'default'\n\t */\n\tfunction get(object, path, defaultValue) {\n\t var result = object == null ? undefined : baseGet(object, path);\n\t return result === undefined ? defaultValue : result;\n\t}\n\n\tget_1 = get;\n\treturn get_1;\n}\n\nvar getExports = requireGet();\nvar get = /*@__PURE__*/getDefaultExportFromCjs(getExports);\n\nvar _defineProperty;\nvar hasRequired_defineProperty;\n\nfunction require_defineProperty () {\n\tif (hasRequired_defineProperty) return _defineProperty;\n\thasRequired_defineProperty = 1;\n\tvar getNative = require_getNative();\n\n\tvar defineProperty = (function() {\n\t try {\n\t var func = getNative(Object, 'defineProperty');\n\t func({}, '', {});\n\t return func;\n\t } catch (e) {}\n\t}());\n\n\t_defineProperty = defineProperty;\n\treturn _defineProperty;\n}\n\nvar _baseAssignValue;\nvar hasRequired_baseAssignValue;\n\nfunction require_baseAssignValue () {\n\tif (hasRequired_baseAssignValue) return _baseAssignValue;\n\thasRequired_baseAssignValue = 1;\n\tvar defineProperty = require_defineProperty();\n\n\t/**\n\t * The base implementation of `assignValue` and `assignMergeValue` without\n\t * value checks.\n\t *\n\t * @private\n\t * @param {Object} object The object to modify.\n\t * @param {string} key The key of the property to assign.\n\t * @param {*} value The value to assign.\n\t */\n\tfunction baseAssignValue(object, key, value) {\n\t if (key == '__proto__' && defineProperty) {\n\t defineProperty(object, key, {\n\t 'configurable': true,\n\t 'enumerable': true,\n\t 'value': value,\n\t 'writable': true\n\t });\n\t } else {\n\t object[key] = value;\n\t }\n\t}\n\n\t_baseAssignValue = baseAssignValue;\n\treturn _baseAssignValue;\n}\n\nvar _assignValue;\nvar hasRequired_assignValue;\n\nfunction require_assignValue () {\n\tif (hasRequired_assignValue) return _assignValue;\n\thasRequired_assignValue = 1;\n\tvar baseAssignValue = require_baseAssignValue(),\n\t eq = requireEq();\n\n\t/** Used for built-in method references. */\n\tvar objectProto = Object.prototype;\n\n\t/** Used to check objects for own properties. */\n\tvar hasOwnProperty = objectProto.hasOwnProperty;\n\n\t/**\n\t * Assigns `value` to `key` of `object` if the existing value is not equivalent\n\t * using [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n\t * for equality comparisons.\n\t *\n\t * @private\n\t * @param {Object} object The object to modify.\n\t * @param {string} key The key of the property to assign.\n\t * @param {*} value The value to assign.\n\t */\n\tfunction assignValue(object, key, value) {\n\t var objValue = object[key];\n\t if (!(hasOwnProperty.call(object, key) && eq(objValue, value)) ||\n\t (value === undefined && !(key in object))) {\n\t baseAssignValue(object, key, value);\n\t }\n\t}\n\n\t_assignValue = assignValue;\n\treturn _assignValue;\n}\n\n/** Used as references for various `Number` constants. */\n\nvar _isIndex;\nvar hasRequired_isIndex;\n\nfunction require_isIndex () {\n\tif (hasRequired_isIndex) return _isIndex;\n\thasRequired_isIndex = 1;\n\tvar MAX_SAFE_INTEGER = 9007199254740991;\n\n\t/** Used to detect unsigned integer values. */\n\tvar reIsUint = /^(?:0|[1-9]\\d*)$/;\n\n\t/**\n\t * Checks if `value` is a valid array-like index.\n\t *\n\t * @private\n\t * @param {*} value The value to check.\n\t * @param {number} [length=MAX_SAFE_INTEGER] The upper bounds of a valid index.\n\t * @returns {boolean} Returns `true` if `value` is a valid index, else `false`.\n\t */\n\tfunction isIndex(value, length) {\n\t var type = typeof value;\n\t length = length == null ? MAX_SAFE_INTEGER : length;\n\n\t return !!length &&\n\t (type == 'number' ||\n\t (type != 'symbol' && reIsUint.test(value))) &&\n\t (value > -1 && value % 1 == 0 && value < length);\n\t}\n\n\t_isIndex = isIndex;\n\treturn _isIndex;\n}\n\nvar _baseSet;\nvar hasRequired_baseSet;\n\nfunction require_baseSet () {\n\tif (hasRequired_baseSet) return _baseSet;\n\thasRequired_baseSet = 1;\n\tvar assignValue = require_assignValue(),\n\t castPath = require_castPath(),\n\t isIndex = require_isIndex(),\n\t isObject = requireIsObject(),\n\t toKey = require_toKey();\n\n\t/**\n\t * The base implementation of `_.set`.\n\t *\n\t * @private\n\t * @param {Object} object The object to modify.\n\t * @param {Array|string} path The path of the property to set.\n\t * @param {*} value The value to set.\n\t * @param {Function} [customizer] The function to customize path creation.\n\t * @returns {Object} Returns `object`.\n\t */\n\tfunction baseSet(object, path, value, customizer) {\n\t if (!isObject(object)) {\n\t return object;\n\t }\n\t path = castPath(path, object);\n\n\t var index = -1,\n\t length = path.length,\n\t lastIndex = length - 1,\n\t nested = object;\n\n\t while (nested != null && ++index < length) {\n\t var key = toKey(path[index]),\n\t newValue = value;\n\n\t if (key === '__proto__' || key === 'constructor' || key === 'prototype') {\n\t return object;\n\t }\n\n\t if (index != lastIndex) {\n\t var objValue = nested[key];\n\t newValue = customizer ? customizer(objValue, key, nested) : undefined;\n\t if (newValue === undefined) {\n\t newValue = isObject(objValue)\n\t ? objValue\n\t : (isIndex(path[index + 1]) ? [] : {});\n\t }\n\t }\n\t assignValue(nested, key, newValue);\n\t nested = nested[key];\n\t }\n\t return object;\n\t}\n\n\t_baseSet = baseSet;\n\treturn _baseSet;\n}\n\nvar set_1;\nvar hasRequiredSet;\n\nfunction requireSet () {\n\tif (hasRequiredSet) return set_1;\n\thasRequiredSet = 1;\n\tvar baseSet = require_baseSet();\n\n\t/**\n\t * Sets the value at `path` of `object`. If a portion of `path` doesn't exist,\n\t * it's created. Arrays are created for missing index properties while objects\n\t * are created for all other missing properties. Use `_.setWith` to customize\n\t * `path` creation.\n\t *\n\t * **Note:** This method mutates `object`.\n\t *\n\t * @static\n\t * @memberOf _\n\t * @since 3.7.0\n\t * @category Object\n\t * @param {Object} object The object to modify.\n\t * @param {Array|string} path The path of the property to set.\n\t * @param {*} value The value to set.\n\t * @returns {Object} Returns `object`.\n\t * @example\n\t *\n\t * var object = { 'a': [{ 'b': { 'c': 3 } }] };\n\t *\n\t * _.set(object, 'a[0].b.c', 4);\n\t * console.log(object.a[0].b.c);\n\t * // => 4\n\t *\n\t * _.set(object, ['x', '0', 'y', 'z'], 5);\n\t * console.log(object.x[0].y.z);\n\t * // => 5\n\t */\n\tfunction set(object, path, value) {\n\t return object == null ? object : baseSet(object, path, value);\n\t}\n\n\tset_1 = set;\n\treturn set_1;\n}\n\nvar setExports = requireSet();\nvar set = /*@__PURE__*/getDefaultExportFromCjs(setExports);\n\n/**\n * Copies the values of `source` to `array`.\n *\n * @private\n * @param {Array} source The array to copy values from.\n * @param {Array} [array=[]] The array to copy values to.\n * @returns {Array} Returns `array`.\n */\n\nvar _copyArray;\nvar hasRequired_copyArray;\n\nfunction require_copyArray () {\n\tif (hasRequired_copyArray) return _copyArray;\n\thasRequired_copyArray = 1;\n\tfunction copyArray(source, array) {\n\t var index = -1,\n\t length = source.length;\n\n\t array || (array = Array(length));\n\t while (++index < length) {\n\t array[index] = source[index];\n\t }\n\t return array;\n\t}\n\n\t_copyArray = copyArray;\n\treturn _copyArray;\n}\n\nvar toPath_1;\nvar hasRequiredToPath;\n\nfunction requireToPath () {\n\tif (hasRequiredToPath) return toPath_1;\n\thasRequiredToPath = 1;\n\tvar arrayMap = require_arrayMap(),\n\t copyArray = require_copyArray(),\n\t isArray = requireIsArray(),\n\t isSymbol = requireIsSymbol(),\n\t stringToPath = require_stringToPath(),\n\t toKey = require_toKey(),\n\t toString = requireToString();\n\n\t/**\n\t * Converts `value` to a property path array.\n\t *\n\t * @static\n\t * @memberOf _\n\t * @since 4.0.0\n\t * @category Util\n\t * @param {*} value The value to convert.\n\t * @returns {Array} Returns the new property path array.\n\t * @example\n\t *\n\t * _.toPath('a.b.c');\n\t * // => ['a', 'b', 'c']\n\t *\n\t * _.toPath('a[0].b.c');\n\t * // => ['a', '0', 'b', 'c']\n\t */\n\tfunction toPath(value) {\n\t if (isArray(value)) {\n\t return arrayMap(value, toKey);\n\t }\n\t return isSymbol(value) ? [value] : copyArray(stringToPath(toString(value)));\n\t}\n\n\ttoPath_1 = toPath;\n\treturn toPath_1;\n}\n\nvar toPathExports = requireToPath();\nvar toPath = /*@__PURE__*/getDefaultExportFromCjs(toPathExports);\n\nvar define$2 = {\n // access data field\n data: function data(params) {\n var defaults = {\n field: 'data',\n bindingEvent: 'data',\n allowBinding: false,\n allowSetting: false,\n allowGetting: false,\n settingEvent: 'data',\n settingTriggersEvent: false,\n triggerFnName: 'trigger',\n immutableKeys: {},\n // key => true if immutable\n updateStyle: false,\n beforeGet: function beforeGet(self) {},\n beforeSet: function beforeSet(self, obj) {},\n onSet: function onSet(self) {},\n canSet: function canSet(self) {\n return true;\n }\n };\n params = extend({}, defaults, params);\n return function dataImpl(name, value) {\n var p = params;\n var self = this;\n var selfIsArrayLike = self.length !== undefined;\n var all = selfIsArrayLike ? self : [self]; // put in array if not array-like\n var single = selfIsArrayLike ? self[0] : self;\n\n // .data('foo', ...)\n if (string(name)) {\n // set or get property\n var isPathLike = name.indexOf('.') !== -1; // there might be a normal field with a dot \n var path = isPathLike && toPath(name);\n\n // .data('foo')\n if (p.allowGetting && value === undefined) {\n // get\n\n var ret;\n if (single) {\n p.beforeGet(single);\n\n // check if it's path and a field with the same name doesn't exist\n if (path && single._private[p.field][name] === undefined) {\n ret = get(single._private[p.field], path);\n } else {\n ret = single._private[p.field][name];\n }\n }\n return ret;\n\n // .data('foo', 'bar')\n } else if (p.allowSetting && value !== undefined) {\n // set\n var valid = !p.immutableKeys[name];\n if (valid) {\n var change = _defineProperty$1({}, name, value);\n p.beforeSet(self, change);\n for (var i = 0, l = all.length; i < l; i++) {\n var ele = all[i];\n if (p.canSet(ele)) {\n if (path && single._private[p.field][name] === undefined) {\n set(ele._private[p.field], path, value);\n } else {\n ele._private[p.field][name] = value;\n }\n }\n }\n\n // update mappers if asked\n if (p.updateStyle) {\n self.updateStyle();\n }\n\n // call onSet callback\n p.onSet(self);\n if (p.settingTriggersEvent) {\n self[p.triggerFnName](p.settingEvent);\n }\n }\n }\n\n // .data({ 'foo': 'bar' })\n } else if (p.allowSetting && plainObject(name)) {\n // extend\n var obj = name;\n var k, v;\n var keys = Object.keys(obj);\n p.beforeSet(self, obj);\n for (var _i = 0; _i < keys.length; _i++) {\n k = keys[_i];\n v = obj[k];\n var _valid = !p.immutableKeys[k];\n if (_valid) {\n for (var j = 0; j < all.length; j++) {\n var _ele = all[j];\n if (p.canSet(_ele)) {\n _ele._private[p.field][k] = v;\n }\n }\n }\n }\n\n // update mappers if asked\n if (p.updateStyle) {\n self.updateStyle();\n }\n\n // call onSet callback\n p.onSet(self);\n if (p.settingTriggersEvent) {\n self[p.triggerFnName](p.settingEvent);\n }\n\n // .data(function(){ ... })\n } else if (p.allowBinding && fn$6(name)) {\n // bind to event\n var fn = name;\n self.on(p.bindingEvent, fn);\n\n // .data()\n } else if (p.allowGetting && name === undefined) {\n // get whole object\n var _ret;\n if (single) {\n p.beforeGet(single);\n _ret = single._private[p.field];\n }\n return _ret;\n }\n return self; // maintain chainability\n }; // function\n },\n // data\n\n // remove data field\n removeData: function removeData(params) {\n var defaults = {\n field: 'data',\n event: 'data',\n triggerFnName: 'trigger',\n triggerEvent: false,\n immutableKeys: {} // key => true if immutable\n };\n params = extend({}, defaults, params);\n return function removeDataImpl(names) {\n var p = params;\n var self = this;\n var selfIsArrayLike = self.length !== undefined;\n var all = selfIsArrayLike ? self : [self]; // put in array if not array-like\n\n // .removeData('foo bar')\n if (string(names)) {\n // then get the list of keys, and delete them\n var keys = names.split(/\\s+/);\n var l = keys.length;\n for (var i = 0; i < l; i++) {\n // delete each non-empty key\n var key = keys[i];\n if (emptyString(key)) {\n continue;\n }\n var valid = !p.immutableKeys[key]; // not valid if immutable\n if (valid) {\n for (var i_a = 0, l_a = all.length; i_a < l_a; i_a++) {\n all[i_a]._private[p.field][key] = undefined;\n }\n }\n }\n if (p.triggerEvent) {\n self[p.triggerFnName](p.event);\n }\n\n // .removeData()\n } else if (names === undefined) {\n // then delete all keys\n\n for (var _i_a = 0, _l_a = all.length; _i_a < _l_a; _i_a++) {\n var _privateFields = all[_i_a]._private[p.field];\n var _keys = Object.keys(_privateFields);\n for (var _i2 = 0; _i2 < _keys.length; _i2++) {\n var _key = _keys[_i2];\n var validKeyToDelete = !p.immutableKeys[_key];\n if (validKeyToDelete) {\n _privateFields[_key] = undefined;\n }\n }\n }\n if (p.triggerEvent) {\n self[p.triggerFnName](p.event);\n }\n }\n return self; // maintain chaining\n }; // function\n } // removeData\n}; // define\n\nvar define$1 = {\n eventAliasesOn: function eventAliasesOn(proto) {\n var p = proto;\n p.addListener = p.listen = p.bind = p.on;\n p.unlisten = p.unbind = p.off = p.removeListener;\n p.trigger = p.emit;\n\n // this is just a wrapper alias of .on()\n p.pon = p.promiseOn = function (events, selector) {\n var self = this;\n var args = Array.prototype.slice.call(arguments, 0);\n return new Promise$1(function (resolve, reject) {\n var callback = function callback(e) {\n self.off.apply(self, offArgs);\n resolve(e);\n };\n var onArgs = args.concat([callback]);\n var offArgs = onArgs.concat([]);\n self.on.apply(self, onArgs);\n });\n };\n }\n}; // define\n\n// use this module to cherry pick functions into your prototype\n// (useful for functions shared between the core and collections, for example)\n\nvar define = {};\n[define$3, define$2, define$1].forEach(function (m) {\n extend(define, m);\n});\n\nvar elesfn$i = {\n animate: define.animate(),\n animation: define.animation(),\n animated: define.animated(),\n clearQueue: define.clearQueue(),\n delay: define.delay(),\n delayAnimation: define.delayAnimation(),\n stop: define.stop()\n};\n\nvar elesfn$h = {\n classes: function classes(_classes) {\n var self = this;\n if (_classes === undefined) {\n var ret = [];\n self[0]._private.classes.forEach(function (cls) {\n return ret.push(cls);\n });\n return ret;\n } else if (!array(_classes)) {\n // extract classes from string\n _classes = (_classes || '').match(/\\S+/g) || [];\n }\n var changed = [];\n var classesSet = new Set$1(_classes);\n\n // check and update each ele\n for (var j = 0; j < self.length; j++) {\n var ele = self[j];\n var _p = ele._private;\n var eleClasses = _p.classes;\n var changedEle = false;\n\n // check if ele has all of the passed classes\n for (var i = 0; i < _classes.length; i++) {\n var cls = _classes[i];\n var eleHasClass = eleClasses.has(cls);\n if (!eleHasClass) {\n changedEle = true;\n break;\n }\n }\n\n // check if ele has classes outside of those passed\n if (!changedEle) {\n changedEle = eleClasses.size !== _classes.length;\n }\n if (changedEle) {\n _p.classes = classesSet;\n changed.push(ele);\n }\n }\n\n // trigger update style on those eles that had class changes\n if (changed.length > 0) {\n this.spawn(changed).updateStyle().emit('class');\n }\n return self;\n },\n addClass: function addClass(classes) {\n return this.toggleClass(classes, true);\n },\n hasClass: function hasClass(className) {\n var ele = this[0];\n return ele != null && ele._private.classes.has(className);\n },\n toggleClass: function toggleClass(classes, toggle) {\n if (!array(classes)) {\n // extract classes from string\n classes = classes.match(/\\S+/g) || [];\n }\n var self = this;\n var toggleUndefd = toggle === undefined;\n var changed = []; // eles who had classes changed\n\n for (var i = 0, il = self.length; i < il; i++) {\n var ele = self[i];\n var eleClasses = ele._private.classes;\n var changedEle = false;\n for (var j = 0; j < classes.length; j++) {\n var cls = classes[j];\n var hasClass = eleClasses.has(cls);\n var changedNow = false;\n if (toggle || toggleUndefd && !hasClass) {\n eleClasses.add(cls);\n changedNow = true;\n } else if (!toggle || toggleUndefd && hasClass) {\n eleClasses[\"delete\"](cls);\n changedNow = true;\n }\n if (!changedEle && changedNow) {\n changed.push(ele);\n changedEle = true;\n }\n } // for j classes\n } // for i eles\n\n // trigger update style on those eles that had class changes\n if (changed.length > 0) {\n this.spawn(changed).updateStyle().emit('class');\n }\n return self;\n },\n removeClass: function removeClass(classes) {\n return this.toggleClass(classes, false);\n },\n flashClass: function flashClass(classes, duration) {\n var self = this;\n if (duration == null) {\n duration = 250;\n } else if (duration === 0) {\n return self; // nothing to do really\n }\n self.addClass(classes);\n setTimeout(function () {\n self.removeClass(classes);\n }, duration);\n return self;\n }\n};\nelesfn$h.className = elesfn$h.classNames = elesfn$h.classes;\n\n// tokens in the query language\nvar tokens = {\n metaChar: '[\\\\!\\\\\"\\\\#\\\\$\\\\%\\\\&\\\\\\'\\\\(\\\\)\\\\*\\\\+\\\\,\\\\.\\\\/\\\\:\\\\;\\\\<\\\\=\\\\>\\\\?\\\\@\\\\[\\\\]\\\\^\\\\`\\\\{\\\\|\\\\}\\\\~]',\n // chars we need to escape in let names, etc\n comparatorOp: '=|\\\\!=|>|>=|<|<=|\\\\$=|\\\\^=|\\\\*=',\n // binary comparison op (used in data selectors)\n boolOp: '\\\\?|\\\\!|\\\\^',\n // boolean (unary) operators (used in data selectors)\n string: '\"(?:\\\\\\\\\"|[^\"])*\"' + '|' + \"'(?:\\\\\\\\'|[^'])*'\",\n // string literals (used in data selectors) -- doublequotes | singlequotes\n number: number,\n // number literal (used in data selectors) --- e.g. 0.1234, 1234, 12e123\n meta: 'degree|indegree|outdegree',\n // allowed metadata fields (i.e. allowed functions to use from Collection)\n separator: '\\\\s*,\\\\s*',\n // queries are separated by commas, e.g. edge[foo = 'bar'], node.someClass\n descendant: '\\\\s+',\n child: '\\\\s+>\\\\s+',\n subject: '\\\\$',\n group: 'node|edge|\\\\*',\n directedEdge: '\\\\s+->\\\\s+',\n undirectedEdge: '\\\\s+<->\\\\s+'\n};\ntokens.variable = '(?:[\\\\w-.]|(?:\\\\\\\\' + tokens.metaChar + '))+'; // a variable name can have letters, numbers, dashes, and periods\ntokens.className = '(?:[\\\\w-]|(?:\\\\\\\\' + tokens.metaChar + '))+'; // a class name has the same rules as a variable except it can't have a '.' in the name\ntokens.value = tokens.string + '|' + tokens.number; // a value literal, either a string or number\ntokens.id = tokens.variable; // an element id (follows variable conventions)\n\n(function () {\n var ops, op, i;\n\n // add @ variants to comparatorOp\n ops = tokens.comparatorOp.split('|');\n for (i = 0; i < ops.length; i++) {\n op = ops[i];\n tokens.comparatorOp += '|@' + op;\n }\n\n // add ! variants to comparatorOp\n ops = tokens.comparatorOp.split('|');\n for (i = 0; i < ops.length; i++) {\n op = ops[i];\n if (op.indexOf('!') >= 0) {\n continue;\n } // skip ops that explicitly contain !\n if (op === '=') {\n continue;\n } // skip = b/c != is explicitly defined\n\n tokens.comparatorOp += '|\\\\!' + op;\n }\n})();\n\n/**\n * Make a new query object\n *\n * @prop type {Type} The type enum (int) of the query\n * @prop checks List of checks to make against an ele to test for a match\n */\nvar newQuery = function newQuery() {\n return {\n checks: []\n };\n};\n\n/**\n * A check type enum-like object. Uses integer values for fast match() lookup.\n * The ordering does not matter as long as the ints are unique.\n */\nvar Type = {\n /** E.g. node */\n GROUP: 0,\n /** A collection of elements */\n COLLECTION: 1,\n /** A filter(ele) function */\n FILTER: 2,\n /** E.g. [foo > 1] */\n DATA_COMPARE: 3,\n /** E.g. [foo] */\n DATA_EXIST: 4,\n /** E.g. [?foo] */\n DATA_BOOL: 5,\n /** E.g. [[degree > 2]] */\n META_COMPARE: 6,\n /** E.g. :selected */\n STATE: 7,\n /** E.g. #foo */\n ID: 8,\n /** E.g. .foo */\n CLASS: 9,\n /** E.g. #foo <-> #bar */\n UNDIRECTED_EDGE: 10,\n /** E.g. #foo -> #bar */\n DIRECTED_EDGE: 11,\n /** E.g. $#foo -> #bar */\n NODE_SOURCE: 12,\n /** E.g. #foo -> $#bar */\n NODE_TARGET: 13,\n /** E.g. $#foo <-> #bar */\n NODE_NEIGHBOR: 14,\n /** E.g. #foo > #bar */\n CHILD: 15,\n /** E.g. #foo #bar */\n DESCENDANT: 16,\n /** E.g. $#foo > #bar */\n PARENT: 17,\n /** E.g. $#foo #bar */\n ANCESTOR: 18,\n /** E.g. #foo > $bar > #baz */\n COMPOUND_SPLIT: 19,\n /** Always matches, useful placeholder for subject in `COMPOUND_SPLIT` */\n TRUE: 20\n};\n\nvar stateSelectors = [{\n selector: ':selected',\n matches: function matches(ele) {\n return ele.selected();\n }\n}, {\n selector: ':unselected',\n matches: function matches(ele) {\n return !ele.selected();\n }\n}, {\n selector: ':selectable',\n matches: function matches(ele) {\n return ele.selectable();\n }\n}, {\n selector: ':unselectable',\n matches: function matches(ele) {\n return !ele.selectable();\n }\n}, {\n selector: ':locked',\n matches: function matches(ele) {\n return ele.locked();\n }\n}, {\n selector: ':unlocked',\n matches: function matches(ele) {\n return !ele.locked();\n }\n}, {\n selector: ':visible',\n matches: function matches(ele) {\n return ele.visible();\n }\n}, {\n selector: ':hidden',\n matches: function matches(ele) {\n return !ele.visible();\n }\n}, {\n selector: ':transparent',\n matches: function matches(ele) {\n return ele.transparent();\n }\n}, {\n selector: ':grabbed',\n matches: function matches(ele) {\n return ele.grabbed();\n }\n}, {\n selector: ':free',\n matches: function matches(ele) {\n return !ele.grabbed();\n }\n}, {\n selector: ':removed',\n matches: function matches(ele) {\n return ele.removed();\n }\n}, {\n selector: ':inside',\n matches: function matches(ele) {\n return !ele.removed();\n }\n}, {\n selector: ':grabbable',\n matches: function matches(ele) {\n return ele.grabbable();\n }\n}, {\n selector: ':ungrabbable',\n matches: function matches(ele) {\n return !ele.grabbable();\n }\n}, {\n selector: ':animated',\n matches: function matches(ele) {\n return ele.animated();\n }\n}, {\n selector: ':unanimated',\n matches: function matches(ele) {\n return !ele.animated();\n }\n}, {\n selector: ':parent',\n matches: function matches(ele) {\n return ele.isParent();\n }\n}, {\n selector: ':childless',\n matches: function matches(ele) {\n return ele.isChildless();\n }\n}, {\n selector: ':child',\n matches: function matches(ele) {\n return ele.isChild();\n }\n}, {\n selector: ':orphan',\n matches: function matches(ele) {\n return ele.isOrphan();\n }\n}, {\n selector: ':nonorphan',\n matches: function matches(ele) {\n return ele.isChild();\n }\n}, {\n selector: ':compound',\n matches: function matches(ele) {\n if (ele.isNode()) {\n return ele.isParent();\n } else {\n return ele.source().isParent() || ele.target().isParent();\n }\n }\n}, {\n selector: ':loop',\n matches: function matches(ele) {\n return ele.isLoop();\n }\n}, {\n selector: ':simple',\n matches: function matches(ele) {\n return ele.isSimple();\n }\n}, {\n selector: ':active',\n matches: function matches(ele) {\n return ele.active();\n }\n}, {\n selector: ':inactive',\n matches: function matches(ele) {\n return !ele.active();\n }\n}, {\n selector: ':backgrounding',\n matches: function matches(ele) {\n return ele.backgrounding();\n }\n}, {\n selector: ':nonbackgrounding',\n matches: function matches(ele) {\n return !ele.backgrounding();\n }\n}].sort(function (a, b) {\n // n.b. selectors that are starting substrings of others must have the longer ones first\n return descending(a.selector, b.selector);\n});\nvar lookup = function () {\n var selToFn = {};\n var s;\n for (var i = 0; i < stateSelectors.length; i++) {\n s = stateSelectors[i];\n selToFn[s.selector] = s.matches;\n }\n return selToFn;\n}();\nvar stateSelectorMatches = function stateSelectorMatches(sel, ele) {\n return lookup[sel](ele);\n};\nvar stateSelectorRegex = '(' + stateSelectors.map(function (s) {\n return s.selector;\n}).join('|') + ')';\n\n// when a token like a variable has escaped meta characters, we need to clean the backslashes out\n// so that values get compared properly in Selector.filter()\nvar cleanMetaChars = function cleanMetaChars(str) {\n return str.replace(new RegExp('\\\\\\\\(' + tokens.metaChar + ')', 'g'), function (match, $1) {\n return $1;\n });\n};\nvar replaceLastQuery = function replaceLastQuery(selector, examiningQuery, replacementQuery) {\n selector[selector.length - 1] = replacementQuery;\n};\n\n// NOTE: add new expression syntax here to have it recognised by the parser;\n// - a query contains all adjacent (i.e. no separator in between) expressions;\n// - the current query is stored in selector[i]\n// - you need to check the query objects in match() for it actually filter properly, but that's pretty straight forward\nvar exprs = [{\n name: 'group',\n // just used for identifying when debugging\n query: true,\n regex: '(' + tokens.group + ')',\n populate: function populate(selector, query, _ref) {\n var _ref2 = _slicedToArray(_ref, 1),\n group = _ref2[0];\n query.checks.push({\n type: Type.GROUP,\n value: group === '*' ? group : group + 's'\n });\n }\n}, {\n name: 'state',\n query: true,\n regex: stateSelectorRegex,\n populate: function populate(selector, query, _ref3) {\n var _ref4 = _slicedToArray(_ref3, 1),\n state = _ref4[0];\n query.checks.push({\n type: Type.STATE,\n value: state\n });\n }\n}, {\n name: 'id',\n query: true,\n regex: '\\\\#(' + tokens.id + ')',\n populate: function populate(selector, query, _ref5) {\n var _ref6 = _slicedToArray(_ref5, 1),\n id = _ref6[0];\n query.checks.push({\n type: Type.ID,\n value: cleanMetaChars(id)\n });\n }\n}, {\n name: 'className',\n query: true,\n regex: '\\\\.(' + tokens.className + ')',\n populate: function populate(selector, query, _ref7) {\n var _ref8 = _slicedToArray(_ref7, 1),\n className = _ref8[0];\n query.checks.push({\n type: Type.CLASS,\n value: cleanMetaChars(className)\n });\n }\n}, {\n name: 'dataExists',\n query: true,\n regex: '\\\\[\\\\s*(' + tokens.variable + ')\\\\s*\\\\]',\n populate: function populate(selector, query, _ref9) {\n var _ref10 = _slicedToArray(_ref9, 1),\n variable = _ref10[0];\n query.checks.push({\n type: Type.DATA_EXIST,\n field: cleanMetaChars(variable)\n });\n }\n}, {\n name: 'dataCompare',\n query: true,\n regex: '\\\\[\\\\s*(' + tokens.variable + ')\\\\s*(' + tokens.comparatorOp + ')\\\\s*(' + tokens.value + ')\\\\s*\\\\]',\n populate: function populate(selector, query, _ref11) {\n var _ref12 = _slicedToArray(_ref11, 3),\n variable = _ref12[0],\n comparatorOp = _ref12[1],\n value = _ref12[2];\n var valueIsString = new RegExp('^' + tokens.string + '$').exec(value) != null;\n if (valueIsString) {\n value = value.substring(1, value.length - 1);\n } else {\n value = parseFloat(value);\n }\n query.checks.push({\n type: Type.DATA_COMPARE,\n field: cleanMetaChars(variable),\n operator: comparatorOp,\n value: value\n });\n }\n}, {\n name: 'dataBool',\n query: true,\n regex: '\\\\[\\\\s*(' + tokens.boolOp + ')\\\\s*(' + tokens.variable + ')\\\\s*\\\\]',\n populate: function populate(selector, query, _ref13) {\n var _ref14 = _slicedToArray(_ref13, 2),\n boolOp = _ref14[0],\n variable = _ref14[1];\n query.checks.push({\n type: Type.DATA_BOOL,\n field: cleanMetaChars(variable),\n operator: boolOp\n });\n }\n}, {\n name: 'metaCompare',\n query: true,\n regex: '\\\\[\\\\[\\\\s*(' + tokens.meta + ')\\\\s*(' + tokens.comparatorOp + ')\\\\s*(' + tokens.number + ')\\\\s*\\\\]\\\\]',\n populate: function populate(selector, query, _ref15) {\n var _ref16 = _slicedToArray(_ref15, 3),\n meta = _ref16[0],\n comparatorOp = _ref16[1],\n number = _ref16[2];\n query.checks.push({\n type: Type.META_COMPARE,\n field: cleanMetaChars(meta),\n operator: comparatorOp,\n value: parseFloat(number)\n });\n }\n}, {\n name: 'nextQuery',\n separator: true,\n regex: tokens.separator,\n populate: function populate(selector, query) {\n var currentSubject = selector.currentSubject;\n var edgeCount = selector.edgeCount;\n var compoundCount = selector.compoundCount;\n var lastQ = selector[selector.length - 1];\n if (currentSubject != null) {\n lastQ.subject = currentSubject;\n selector.currentSubject = null;\n }\n lastQ.edgeCount = edgeCount;\n lastQ.compoundCount = compoundCount;\n selector.edgeCount = 0;\n selector.compoundCount = 0;\n\n // go on to next query\n var nextQuery = selector[selector.length++] = newQuery();\n return nextQuery; // this is the new query to be filled by the following exprs\n }\n}, {\n name: 'directedEdge',\n separator: true,\n regex: tokens.directedEdge,\n populate: function populate(selector, query) {\n if (selector.currentSubject == null) {\n // undirected edge\n var edgeQuery = newQuery();\n var source = query;\n var target = newQuery();\n edgeQuery.checks.push({\n type: Type.DIRECTED_EDGE,\n source: source,\n target: target\n });\n\n // the query in the selector should be the edge rather than the source\n replaceLastQuery(selector, query, edgeQuery);\n selector.edgeCount++;\n\n // we're now populating the target query with expressions that follow\n return target;\n } else {\n // source/target\n var srcTgtQ = newQuery();\n var _source = query;\n var _target = newQuery();\n srcTgtQ.checks.push({\n type: Type.NODE_SOURCE,\n source: _source,\n target: _target\n });\n\n // the query in the selector should be the neighbourhood rather than the node\n replaceLastQuery(selector, query, srcTgtQ);\n selector.edgeCount++;\n return _target; // now populating the target with the following expressions\n }\n }\n}, {\n name: 'undirectedEdge',\n separator: true,\n regex: tokens.undirectedEdge,\n populate: function populate(selector, query) {\n if (selector.currentSubject == null) {\n // undirected edge\n var edgeQuery = newQuery();\n var source = query;\n var target = newQuery();\n edgeQuery.checks.push({\n type: Type.UNDIRECTED_EDGE,\n nodes: [source, target]\n });\n\n // the query in the selector should be the edge rather than the source\n replaceLastQuery(selector, query, edgeQuery);\n selector.edgeCount++;\n\n // we're now populating the target query with expressions that follow\n return target;\n } else {\n // neighbourhood\n var nhoodQ = newQuery();\n var node = query;\n var neighbor = newQuery();\n nhoodQ.checks.push({\n type: Type.NODE_NEIGHBOR,\n node: node,\n neighbor: neighbor\n });\n\n // the query in the selector should be the neighbourhood rather than the node\n replaceLastQuery(selector, query, nhoodQ);\n return neighbor; // now populating the neighbor with following expressions\n }\n }\n}, {\n name: 'child',\n separator: true,\n regex: tokens.child,\n populate: function populate(selector, query) {\n if (selector.currentSubject == null) {\n // default: child query\n var parentChildQuery = newQuery();\n var child = newQuery();\n var parent = selector[selector.length - 1];\n parentChildQuery.checks.push({\n type: Type.CHILD,\n parent: parent,\n child: child\n });\n\n // the query in the selector should be the '>' itself\n replaceLastQuery(selector, query, parentChildQuery);\n selector.compoundCount++;\n\n // we're now populating the child query with expressions that follow\n return child;\n } else if (selector.currentSubject === query) {\n // compound split query\n var compound = newQuery();\n var left = selector[selector.length - 1];\n var right = newQuery();\n var subject = newQuery();\n var _child = newQuery();\n var _parent = newQuery();\n\n // set up the root compound q\n compound.checks.push({\n type: Type.COMPOUND_SPLIT,\n left: left,\n right: right,\n subject: subject\n });\n\n // populate the subject and replace the q at the old spot (within left) with TRUE\n subject.checks = query.checks; // take the checks from the left\n query.checks = [{\n type: Type.TRUE\n }]; // checks under left refs the subject implicitly\n\n // set up the right q\n _parent.checks.push({\n type: Type.TRUE\n }); // parent implicitly refs the subject\n right.checks.push({\n type: Type.PARENT,\n // type is swapped on right side queries\n parent: _parent,\n child: _child // empty for now\n });\n replaceLastQuery(selector, left, compound);\n\n // update the ref since we moved things around for `query`\n selector.currentSubject = subject;\n selector.compoundCount++;\n return _child; // now populating the right side's child\n } else {\n // parent query\n // info for parent query\n var _parent2 = newQuery();\n var _child2 = newQuery();\n var pcQChecks = [{\n type: Type.PARENT,\n parent: _parent2,\n child: _child2\n }];\n\n // the parent-child query takes the place of the query previously being populated\n _parent2.checks = query.checks; // the previous query contains the checks for the parent\n query.checks = pcQChecks; // pc query takes over\n\n selector.compoundCount++;\n return _child2; // we're now populating the child\n }\n }\n}, {\n name: 'descendant',\n separator: true,\n regex: tokens.descendant,\n populate: function populate(selector, query) {\n if (selector.currentSubject == null) {\n // default: descendant query\n var ancChQuery = newQuery();\n var descendant = newQuery();\n var ancestor = selector[selector.length - 1];\n ancChQuery.checks.push({\n type: Type.DESCENDANT,\n ancestor: ancestor,\n descendant: descendant\n });\n\n // the query in the selector should be the '>' itself\n replaceLastQuery(selector, query, ancChQuery);\n selector.compoundCount++;\n\n // we're now populating the descendant query with expressions that follow\n return descendant;\n } else if (selector.currentSubject === query) {\n // compound split query\n var compound = newQuery();\n var left = selector[selector.length - 1];\n var right = newQuery();\n var subject = newQuery();\n var _descendant = newQuery();\n var _ancestor = newQuery();\n\n // set up the root compound q\n compound.checks.push({\n type: Type.COMPOUND_SPLIT,\n left: left,\n right: right,\n subject: subject\n });\n\n // populate the subject and replace the q at the old spot (within left) with TRUE\n subject.checks = query.checks; // take the checks from the left\n query.checks = [{\n type: Type.TRUE\n }]; // checks under left refs the subject implicitly\n\n // set up the right q\n _ancestor.checks.push({\n type: Type.TRUE\n }); // ancestor implicitly refs the subject\n right.checks.push({\n type: Type.ANCESTOR,\n // type is swapped on right side queries\n ancestor: _ancestor,\n descendant: _descendant // empty for now\n });\n replaceLastQuery(selector, left, compound);\n\n // update the ref since we moved things around for `query`\n selector.currentSubject = subject;\n selector.compoundCount++;\n return _descendant; // now populating the right side's descendant\n } else {\n // ancestor query\n // info for parent query\n var _ancestor2 = newQuery();\n var _descendant2 = newQuery();\n var adQChecks = [{\n type: Type.ANCESTOR,\n ancestor: _ancestor2,\n descendant: _descendant2\n }];\n\n // the parent-child query takes the place of the query previously being populated\n _ancestor2.checks = query.checks; // the previous query contains the checks for the parent\n query.checks = adQChecks; // pc query takes over\n\n selector.compoundCount++;\n return _descendant2; // we're now populating the child\n }\n }\n}, {\n name: 'subject',\n modifier: true,\n regex: tokens.subject,\n populate: function populate(selector, query) {\n if (selector.currentSubject != null && selector.currentSubject !== query) {\n warn('Redefinition of subject in selector `' + selector.toString() + '`');\n return false;\n }\n selector.currentSubject = query;\n var topQ = selector[selector.length - 1];\n var topChk = topQ.checks[0];\n var topType = topChk == null ? null : topChk.type;\n if (topType === Type.DIRECTED_EDGE) {\n // directed edge with subject on the target\n\n // change to target node check\n topChk.type = Type.NODE_TARGET;\n } else if (topType === Type.UNDIRECTED_EDGE) {\n // undirected edge with subject on the second node\n\n // change to neighbor check\n topChk.type = Type.NODE_NEIGHBOR;\n topChk.node = topChk.nodes[1]; // second node is subject\n topChk.neighbor = topChk.nodes[0];\n\n // clean up unused fields for new type\n topChk.nodes = null;\n }\n }\n}];\nexprs.forEach(function (e) {\n return e.regexObj = new RegExp('^' + e.regex);\n});\n\n/**\n * Of all the expressions, find the first match in the remaining text.\n * @param {string} remaining The remaining text to parse\n * @returns The matched expression and the newly remaining text `{ expr, match, name, remaining }`\n */\nvar consumeExpr = function consumeExpr(remaining) {\n var expr;\n var match;\n var name;\n for (var j = 0; j < exprs.length; j++) {\n var e = exprs[j];\n var n = e.name;\n var m = remaining.match(e.regexObj);\n if (m != null) {\n match = m;\n expr = e;\n name = n;\n var consumed = m[0];\n remaining = remaining.substring(consumed.length);\n break; // we've consumed one expr, so we can return now\n }\n }\n return {\n expr: expr,\n match: match,\n name: name,\n remaining: remaining\n };\n};\n\n/**\n * Consume all the leading whitespace\n * @param {string} remaining The text to consume\n * @returns The text with the leading whitespace removed\n */\nvar consumeWhitespace = function consumeWhitespace(remaining) {\n var match = remaining.match(/^\\s+/);\n if (match) {\n var consumed = match[0];\n remaining = remaining.substring(consumed.length);\n }\n return remaining;\n};\n\n/**\n * Parse the string and store the parsed representation in the Selector.\n * @param {string} selector The selector string\n * @returns `true` if the selector was successfully parsed, `false` otherwise\n */\nvar parse = function parse(selector) {\n var self = this;\n var remaining = self.inputText = selector;\n var currentQuery = self[0] = newQuery();\n self.length = 1;\n remaining = consumeWhitespace(remaining); // get rid of leading whitespace\n\n for (;;) {\n var exprInfo = consumeExpr(remaining);\n if (exprInfo.expr == null) {\n warn('The selector `' + selector + '`is invalid');\n return false;\n } else {\n var args = exprInfo.match.slice(1);\n\n // let the token populate the selector object in currentQuery\n var ret = exprInfo.expr.populate(self, currentQuery, args);\n if (ret === false) {\n return false; // exit if population failed\n } else if (ret != null) {\n currentQuery = ret; // change the current query to be filled if the expr specifies\n }\n }\n remaining = exprInfo.remaining;\n\n // we're done when there's nothing left to parse\n if (remaining.match(/^\\s*$/)) {\n break;\n }\n }\n var lastQ = self[self.length - 1];\n if (self.currentSubject != null) {\n lastQ.subject = self.currentSubject;\n }\n lastQ.edgeCount = self.edgeCount;\n lastQ.compoundCount = self.compoundCount;\n for (var i = 0; i < self.length; i++) {\n var q = self[i];\n\n // in future, this could potentially be allowed if there were operator precedence and detection of invalid combinations\n if (q.compoundCount > 0 && q.edgeCount > 0) {\n warn('The selector `' + selector + '` is invalid because it uses both a compound selector and an edge selector');\n return false;\n }\n if (q.edgeCount > 1) {\n warn('The selector `' + selector + '` is invalid because it uses multiple edge selectors');\n return false;\n } else if (q.edgeCount === 1) {\n warn('The selector `' + selector + '` is deprecated. Edge selectors do not take effect on changes to source and target nodes after an edge is added, for performance reasons. Use a class or data selector on edges instead, updating the class or data of an edge when your app detects a change in source or target nodes.');\n }\n }\n return true; // success\n};\n\n/**\n * Get the selector represented as a string. This value uses default formatting,\n * so things like spacing may differ from the input text passed to the constructor.\n * @returns {string} The selector string\n */\nvar toString = function toString() {\n if (this.toStringCache != null) {\n return this.toStringCache;\n }\n var clean = function clean(obj) {\n if (obj == null) {\n return '';\n } else {\n return obj;\n }\n };\n var cleanVal = function cleanVal(val) {\n if (string(val)) {\n return '\"' + val + '\"';\n } else {\n return clean(val);\n }\n };\n var space = function space(val) {\n return ' ' + val + ' ';\n };\n var checkToString = function checkToString(check, subject) {\n var type = check.type,\n value = check.value;\n switch (type) {\n case Type.GROUP:\n {\n var group = clean(value);\n return group.substring(0, group.length - 1);\n }\n case Type.DATA_COMPARE:\n {\n var field = check.field,\n operator = check.operator;\n return '[' + field + space(clean(operator)) + cleanVal(value) + ']';\n }\n case Type.DATA_BOOL:\n {\n var _operator = check.operator,\n _field = check.field;\n return '[' + clean(_operator) + _field + ']';\n }\n case Type.DATA_EXIST:\n {\n var _field2 = check.field;\n return '[' + _field2 + ']';\n }\n case Type.META_COMPARE:\n {\n var _operator2 = check.operator,\n _field3 = check.field;\n return '[[' + _field3 + space(clean(_operator2)) + cleanVal(value) + ']]';\n }\n case Type.STATE:\n {\n return value;\n }\n case Type.ID:\n {\n return '#' + value;\n }\n case Type.CLASS:\n {\n return '.' + value;\n }\n case Type.PARENT:\n case Type.CHILD:\n {\n return queryToString(check.parent, subject) + space('>') + queryToString(check.child, subject);\n }\n case Type.ANCESTOR:\n case Type.DESCENDANT:\n {\n return queryToString(check.ancestor, subject) + ' ' + queryToString(check.descendant, subject);\n }\n case Type.COMPOUND_SPLIT:\n {\n var lhs = queryToString(check.left, subject);\n var sub = queryToString(check.subject, subject);\n var rhs = queryToString(check.right, subject);\n return lhs + (lhs.length > 0 ? ' ' : '') + sub + rhs;\n }\n case Type.TRUE:\n {\n return '';\n }\n }\n };\n var queryToString = function queryToString(query, subject) {\n return query.checks.reduce(function (str, chk, i) {\n return str + (subject === query && i === 0 ? '$' : '') + checkToString(chk, subject);\n }, '');\n };\n var str = '';\n for (var i = 0; i < this.length; i++) {\n var query = this[i];\n str += queryToString(query, query.subject);\n if (this.length > 1 && i < this.length - 1) {\n str += ', ';\n }\n }\n this.toStringCache = str;\n return str;\n};\nvar parse$1 = {\n parse: parse,\n toString: toString\n};\n\nvar valCmp = function valCmp(fieldVal, operator, value) {\n var matches;\n var isFieldStr = string(fieldVal);\n var isFieldNum = number$1(fieldVal);\n var isValStr = string(value);\n var fieldStr, valStr;\n var caseInsensitive = false;\n var notExpr = false;\n var isIneqCmp = false;\n if (operator.indexOf('!') >= 0) {\n operator = operator.replace('!', '');\n notExpr = true;\n }\n if (operator.indexOf('@') >= 0) {\n operator = operator.replace('@', '');\n caseInsensitive = true;\n }\n if (isFieldStr || isValStr || caseInsensitive) {\n fieldStr = !isFieldStr && !isFieldNum ? '' : '' + fieldVal;\n valStr = '' + value;\n }\n\n // if we're doing a case insensitive comparison, then we're using a STRING comparison\n // even if we're comparing numbers\n if (caseInsensitive) {\n fieldVal = fieldStr = fieldStr.toLowerCase();\n value = valStr = valStr.toLowerCase();\n }\n switch (operator) {\n case '*=':\n matches = fieldStr.indexOf(valStr) >= 0;\n break;\n case '$=':\n matches = fieldStr.indexOf(valStr, fieldStr.length - valStr.length) >= 0;\n break;\n case '^=':\n matches = fieldStr.indexOf(valStr) === 0;\n break;\n case '=':\n matches = fieldVal === value;\n break;\n case '>':\n isIneqCmp = true;\n matches = fieldVal > value;\n break;\n case '>=':\n isIneqCmp = true;\n matches = fieldVal >= value;\n break;\n case '<':\n isIneqCmp = true;\n matches = fieldVal < value;\n break;\n case '<=':\n isIneqCmp = true;\n matches = fieldVal <= value;\n break;\n default:\n matches = false;\n break;\n }\n\n // apply the not op, but null vals for inequalities should always stay non-matching\n if (notExpr && (fieldVal != null || !isIneqCmp)) {\n matches = !matches;\n }\n return matches;\n};\nvar boolCmp = function boolCmp(fieldVal, operator) {\n switch (operator) {\n case '?':\n return fieldVal ? true : false;\n case '!':\n return fieldVal ? false : true;\n case '^':\n return fieldVal === undefined;\n }\n};\nvar existCmp = function existCmp(fieldVal) {\n return fieldVal !== undefined;\n};\nvar data$1 = function data(ele, field) {\n return ele.data(field);\n};\nvar meta = function meta(ele, field) {\n return ele[field]();\n};\n\n/** A lookup of `match(check, ele)` functions by `Type` int */\nvar match = [];\n\n/**\n * Returns whether the query matches for the element\n * @param query The `{ type, value, ... }` query object\n * @param ele The element to compare against\n*/\nvar matches$1 = function matches(query, ele) {\n return query.checks.every(function (chk) {\n return match[chk.type](chk, ele);\n });\n};\nmatch[Type.GROUP] = function (check, ele) {\n var group = check.value;\n return group === '*' || group === ele.group();\n};\nmatch[Type.STATE] = function (check, ele) {\n var stateSelector = check.value;\n return stateSelectorMatches(stateSelector, ele);\n};\nmatch[Type.ID] = function (check, ele) {\n var id = check.value;\n return ele.id() === id;\n};\nmatch[Type.CLASS] = function (check, ele) {\n var cls = check.value;\n return ele.hasClass(cls);\n};\nmatch[Type.META_COMPARE] = function (check, ele) {\n var field = check.field,\n operator = check.operator,\n value = check.value;\n return valCmp(meta(ele, field), operator, value);\n};\nmatch[Type.DATA_COMPARE] = function (check, ele) {\n var field = check.field,\n operator = check.operator,\n value = check.value;\n return valCmp(data$1(ele, field), operator, value);\n};\nmatch[Type.DATA_BOOL] = function (check, ele) {\n var field = check.field,\n operator = check.operator;\n return boolCmp(data$1(ele, field), operator);\n};\nmatch[Type.DATA_EXIST] = function (check, ele) {\n var field = check.field;\n check.operator;\n return existCmp(data$1(ele, field));\n};\nmatch[Type.UNDIRECTED_EDGE] = function (check, ele) {\n var qA = check.nodes[0];\n var qB = check.nodes[1];\n var src = ele.source();\n var tgt = ele.target();\n return matches$1(qA, src) && matches$1(qB, tgt) || matches$1(qB, src) && matches$1(qA, tgt);\n};\nmatch[Type.NODE_NEIGHBOR] = function (check, ele) {\n return matches$1(check.node, ele) && ele.neighborhood().some(function (n) {\n return n.isNode() && matches$1(check.neighbor, n);\n });\n};\nmatch[Type.DIRECTED_EDGE] = function (check, ele) {\n return matches$1(check.source, ele.source()) && matches$1(check.target, ele.target());\n};\nmatch[Type.NODE_SOURCE] = function (check, ele) {\n return matches$1(check.source, ele) && ele.outgoers().some(function (n) {\n return n.isNode() && matches$1(check.target, n);\n });\n};\nmatch[Type.NODE_TARGET] = function (check, ele) {\n return matches$1(check.target, ele) && ele.incomers().some(function (n) {\n return n.isNode() && matches$1(check.source, n);\n });\n};\nmatch[Type.CHILD] = function (check, ele) {\n return matches$1(check.child, ele) && matches$1(check.parent, ele.parent());\n};\nmatch[Type.PARENT] = function (check, ele) {\n return matches$1(check.parent, ele) && ele.children().some(function (c) {\n return matches$1(check.child, c);\n });\n};\nmatch[Type.DESCENDANT] = function (check, ele) {\n return matches$1(check.descendant, ele) && ele.ancestors().some(function (a) {\n return matches$1(check.ancestor, a);\n });\n};\nmatch[Type.ANCESTOR] = function (check, ele) {\n return matches$1(check.ancestor, ele) && ele.descendants().some(function (d) {\n return matches$1(check.descendant, d);\n });\n};\nmatch[Type.COMPOUND_SPLIT] = function (check, ele) {\n return matches$1(check.subject, ele) && matches$1(check.left, ele) && matches$1(check.right, ele);\n};\nmatch[Type.TRUE] = function () {\n return true;\n};\nmatch[Type.COLLECTION] = function (check, ele) {\n var collection = check.value;\n return collection.has(ele);\n};\nmatch[Type.FILTER] = function (check, ele) {\n var filter = check.value;\n return filter(ele);\n};\n\n// filter an existing collection\nvar filter = function filter(collection) {\n var self = this;\n\n // for 1 id #foo queries, just get the element\n if (self.length === 1 && self[0].checks.length === 1 && self[0].checks[0].type === Type.ID) {\n return collection.getElementById(self[0].checks[0].value).collection();\n }\n var selectorFunction = function selectorFunction(element) {\n for (var j = 0; j < self.length; j++) {\n var query = self[j];\n if (matches$1(query, element)) {\n return true;\n }\n }\n return false;\n };\n if (self.text() == null) {\n selectorFunction = function selectorFunction() {\n return true;\n };\n }\n return collection.filter(selectorFunction);\n}; // filter\n\n// does selector match a single element?\nvar matches = function matches(ele) {\n var self = this;\n for (var j = 0; j < self.length; j++) {\n var query = self[j];\n if (matches$1(query, ele)) {\n return true;\n }\n }\n return false;\n}; // matches\n\nvar matching = {\n matches: matches,\n filter: filter\n};\n\nvar Selector = function Selector(selector) {\n this.inputText = selector;\n this.currentSubject = null;\n this.compoundCount = 0;\n this.edgeCount = 0;\n this.length = 0;\n if (selector == null || string(selector) && selector.match(/^\\s*$/)) ; else if (elementOrCollection(selector)) {\n this.addQuery({\n checks: [{\n type: Type.COLLECTION,\n value: selector.collection()\n }]\n });\n } else if (fn$6(selector)) {\n this.addQuery({\n checks: [{\n type: Type.FILTER,\n value: selector\n }]\n });\n } else if (string(selector)) {\n if (!this.parse(selector)) {\n this.invalid = true;\n }\n } else {\n error('A selector must be created from a string; found ');\n }\n};\nvar selfn = Selector.prototype;\n[parse$1, matching].forEach(function (p) {\n return extend(selfn, p);\n});\nselfn.text = function () {\n return this.inputText;\n};\nselfn.size = function () {\n return this.length;\n};\nselfn.eq = function (i) {\n return this[i];\n};\nselfn.sameText = function (otherSel) {\n return !this.invalid && !otherSel.invalid && this.text() === otherSel.text();\n};\nselfn.addQuery = function (q) {\n this[this.length++] = q;\n};\nselfn.selector = selfn.toString;\n\nvar elesfn$g = {\n allAre: function allAre(selector) {\n var selObj = new Selector(selector);\n return this.every(function (ele) {\n return selObj.matches(ele);\n });\n },\n is: function is(selector) {\n var selObj = new Selector(selector);\n return this.some(function (ele) {\n return selObj.matches(ele);\n });\n },\n some: function some(fn, thisArg) {\n for (var i = 0; i < this.length; i++) {\n var ret = !thisArg ? fn(this[i], i, this) : fn.apply(thisArg, [this[i], i, this]);\n if (ret) {\n return true;\n }\n }\n return false;\n },\n every: function every(fn, thisArg) {\n for (var i = 0; i < this.length; i++) {\n var ret = !thisArg ? fn(this[i], i, this) : fn.apply(thisArg, [this[i], i, this]);\n if (!ret) {\n return false;\n }\n }\n return true;\n },\n same: function same(collection) {\n // cheap collection ref check\n if (this === collection) {\n return true;\n }\n collection = this.cy().collection(collection);\n var thisLength = this.length;\n var collectionLength = collection.length;\n\n // cheap length check\n if (thisLength !== collectionLength) {\n return false;\n }\n\n // cheap element ref check\n if (thisLength === 1) {\n return this[0] === collection[0];\n }\n return this.every(function (ele) {\n return collection.hasElementWithId(ele.id());\n });\n },\n anySame: function anySame(collection) {\n collection = this.cy().collection(collection);\n return this.some(function (ele) {\n return collection.hasElementWithId(ele.id());\n });\n },\n allAreNeighbors: function allAreNeighbors(collection) {\n collection = this.cy().collection(collection);\n var nhood = this.neighborhood();\n return collection.every(function (ele) {\n return nhood.hasElementWithId(ele.id());\n });\n },\n contains: function contains(collection) {\n collection = this.cy().collection(collection);\n var self = this;\n return collection.every(function (ele) {\n return self.hasElementWithId(ele.id());\n });\n }\n};\nelesfn$g.allAreNeighbours = elesfn$g.allAreNeighbors;\nelesfn$g.has = elesfn$g.contains;\nelesfn$g.equal = elesfn$g.equals = elesfn$g.same;\n\nvar cache = function cache(fn, name) {\n return function traversalCache(arg1, arg2, arg3, arg4) {\n var selectorOrEles = arg1;\n var eles = this;\n var key;\n if (selectorOrEles == null) {\n key = '';\n } else if (elementOrCollection(selectorOrEles) && selectorOrEles.length === 1) {\n key = selectorOrEles.id();\n }\n if (eles.length === 1 && key) {\n var _p = eles[0]._private;\n var tch = _p.traversalCache = _p.traversalCache || {};\n var ch = tch[name] = tch[name] || [];\n var hash = hashString(key);\n var cacheHit = ch[hash];\n if (cacheHit) {\n return cacheHit;\n } else {\n return ch[hash] = fn.call(eles, arg1, arg2, arg3, arg4);\n }\n } else {\n return fn.call(eles, arg1, arg2, arg3, arg4);\n }\n };\n};\n\nvar elesfn$f = {\n parent: function parent(selector) {\n var parents = [];\n\n // optimisation for single ele call\n if (this.length === 1) {\n var parent = this[0]._private.parent;\n if (parent) {\n return parent;\n }\n }\n for (var i = 0; i < this.length; i++) {\n var ele = this[i];\n var _parent = ele._private.parent;\n if (_parent) {\n parents.push(_parent);\n }\n }\n return this.spawn(parents, true).filter(selector);\n },\n parents: function parents(selector) {\n var parents = [];\n var eles = this.parent();\n while (eles.nonempty()) {\n for (var i = 0; i < eles.length; i++) {\n var ele = eles[i];\n parents.push(ele);\n }\n eles = eles.parent();\n }\n return this.spawn(parents, true).filter(selector);\n },\n commonAncestors: function commonAncestors(selector) {\n var ancestors;\n for (var i = 0; i < this.length; i++) {\n var ele = this[i];\n var parents = ele.parents();\n ancestors = ancestors || parents;\n ancestors = ancestors.intersect(parents); // current list must be common with current ele parents set\n }\n return ancestors.filter(selector);\n },\n orphans: function orphans(selector) {\n return this.stdFilter(function (ele) {\n return ele.isOrphan();\n }).filter(selector);\n },\n nonorphans: function nonorphans(selector) {\n return this.stdFilter(function (ele) {\n return ele.isChild();\n }).filter(selector);\n },\n children: cache(function (selector) {\n var children = [];\n for (var i = 0; i < this.length; i++) {\n var ele = this[i];\n var eleChildren = ele._private.children;\n for (var j = 0; j < eleChildren.length; j++) {\n children.push(eleChildren[j]);\n }\n }\n return this.spawn(children, true).filter(selector);\n }, 'children'),\n siblings: function siblings(selector) {\n return this.parent().children().not(this).filter(selector);\n },\n isParent: function isParent() {\n var ele = this[0];\n if (ele) {\n return ele.isNode() && ele._private.children.length !== 0;\n }\n },\n isChildless: function isChildless() {\n var ele = this[0];\n if (ele) {\n return ele.isNode() && ele._private.children.length === 0;\n }\n },\n isChild: function isChild() {\n var ele = this[0];\n if (ele) {\n return ele.isNode() && ele._private.parent != null;\n }\n },\n isOrphan: function isOrphan() {\n var ele = this[0];\n if (ele) {\n return ele.isNode() && ele._private.parent == null;\n }\n },\n descendants: function descendants(selector) {\n var elements = [];\n function add(eles) {\n for (var i = 0; i < eles.length; i++) {\n var ele = eles[i];\n elements.push(ele);\n if (ele.children().nonempty()) {\n add(ele.children());\n }\n }\n }\n add(this.children());\n return this.spawn(elements, true).filter(selector);\n }\n};\nfunction forEachCompound(eles, fn, includeSelf, recursiveStep) {\n var q = [];\n var did = new Set$1();\n var cy = eles.cy();\n var hasCompounds = cy.hasCompoundNodes();\n for (var i = 0; i < eles.length; i++) {\n var ele = eles[i];\n if (includeSelf) {\n q.push(ele);\n } else if (hasCompounds) {\n recursiveStep(q, did, ele);\n }\n }\n while (q.length > 0) {\n var _ele = q.shift();\n fn(_ele);\n did.add(_ele.id());\n if (hasCompounds) {\n recursiveStep(q, did, _ele);\n }\n }\n return eles;\n}\nfunction addChildren(q, did, ele) {\n if (ele.isParent()) {\n var children = ele._private.children;\n for (var i = 0; i < children.length; i++) {\n var child = children[i];\n if (!did.has(child.id())) {\n q.push(child);\n }\n }\n }\n}\n\n// very efficient version of eles.add( eles.descendants() ).forEach()\n// for internal use\nelesfn$f.forEachDown = function (fn) {\n var includeSelf = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true;\n return forEachCompound(this, fn, includeSelf, addChildren);\n};\nfunction addParent(q, did, ele) {\n if (ele.isChild()) {\n var parent = ele._private.parent;\n if (!did.has(parent.id())) {\n q.push(parent);\n }\n }\n}\nelesfn$f.forEachUp = function (fn) {\n var includeSelf = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true;\n return forEachCompound(this, fn, includeSelf, addParent);\n};\nfunction addParentAndChildren(q, did, ele) {\n addParent(q, did, ele);\n addChildren(q, did, ele);\n}\nelesfn$f.forEachUpAndDown = function (fn) {\n var includeSelf = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true;\n return forEachCompound(this, fn, includeSelf, addParentAndChildren);\n};\n\n// aliases\nelesfn$f.ancestors = elesfn$f.parents;\n\nvar fn$5, elesfn$e;\nfn$5 = elesfn$e = {\n data: define.data({\n field: 'data',\n bindingEvent: 'data',\n allowBinding: true,\n allowSetting: true,\n settingEvent: 'data',\n settingTriggersEvent: true,\n triggerFnName: 'trigger',\n allowGetting: true,\n immutableKeys: {\n 'id': true,\n 'source': true,\n 'target': true,\n 'parent': true\n },\n updateStyle: true\n }),\n removeData: define.removeData({\n field: 'data',\n event: 'data',\n triggerFnName: 'trigger',\n triggerEvent: true,\n immutableKeys: {\n 'id': true,\n 'source': true,\n 'target': true,\n 'parent': true\n },\n updateStyle: true\n }),\n scratch: define.data({\n field: 'scratch',\n bindingEvent: 'scratch',\n allowBinding: true,\n allowSetting: true,\n settingEvent: 'scratch',\n settingTriggersEvent: true,\n triggerFnName: 'trigger',\n allowGetting: true,\n updateStyle: true\n }),\n removeScratch: define.removeData({\n field: 'scratch',\n event: 'scratch',\n triggerFnName: 'trigger',\n triggerEvent: true,\n updateStyle: true\n }),\n rscratch: define.data({\n field: 'rscratch',\n allowBinding: false,\n allowSetting: true,\n settingTriggersEvent: false,\n allowGetting: true\n }),\n removeRscratch: define.removeData({\n field: 'rscratch',\n triggerEvent: false\n }),\n id: function id() {\n var ele = this[0];\n if (ele) {\n return ele._private.data.id;\n }\n }\n};\n\n// aliases\nfn$5.attr = fn$5.data;\nfn$5.removeAttr = fn$5.removeData;\nvar data = elesfn$e;\n\nvar elesfn$d = {};\nfunction defineDegreeFunction(callback) {\n return function (includeLoops) {\n var self = this;\n if (includeLoops === undefined) {\n includeLoops = true;\n }\n if (self.length === 0) {\n return;\n }\n if (self.isNode() && !self.removed()) {\n var degree = 0;\n var node = self[0];\n var connectedEdges = node._private.edges;\n for (var i = 0; i < connectedEdges.length; i++) {\n var edge = connectedEdges[i];\n if (!includeLoops && edge.isLoop()) {\n continue;\n }\n degree += callback(node, edge);\n }\n return degree;\n } else {\n return;\n }\n };\n}\nextend(elesfn$d, {\n degree: defineDegreeFunction(function (node, edge) {\n if (edge.source().same(edge.target())) {\n return 2;\n } else {\n return 1;\n }\n }),\n indegree: defineDegreeFunction(function (node, edge) {\n if (edge.target().same(node)) {\n return 1;\n } else {\n return 0;\n }\n }),\n outdegree: defineDegreeFunction(function (node, edge) {\n if (edge.source().same(node)) {\n return 1;\n } else {\n return 0;\n }\n })\n});\nfunction defineDegreeBoundsFunction(degreeFn, callback) {\n return function (includeLoops) {\n var ret;\n var nodes = this.nodes();\n for (var i = 0; i < nodes.length; i++) {\n var ele = nodes[i];\n var degree = ele[degreeFn](includeLoops);\n if (degree !== undefined && (ret === undefined || callback(degree, ret))) {\n ret = degree;\n }\n }\n return ret;\n };\n}\nextend(elesfn$d, {\n minDegree: defineDegreeBoundsFunction('degree', function (degree, min) {\n return degree < min;\n }),\n maxDegree: defineDegreeBoundsFunction('degree', function (degree, max) {\n return degree > max;\n }),\n minIndegree: defineDegreeBoundsFunction('indegree', function (degree, min) {\n return degree < min;\n }),\n maxIndegree: defineDegreeBoundsFunction('indegree', function (degree, max) {\n return degree > max;\n }),\n minOutdegree: defineDegreeBoundsFunction('outdegree', function (degree, min) {\n return degree < min;\n }),\n maxOutdegree: defineDegreeBoundsFunction('outdegree', function (degree, max) {\n return degree > max;\n })\n});\nextend(elesfn$d, {\n totalDegree: function totalDegree(includeLoops) {\n var total = 0;\n var nodes = this.nodes();\n for (var i = 0; i < nodes.length; i++) {\n total += nodes[i].degree(includeLoops);\n }\n return total;\n }\n});\n\nvar fn$4, elesfn$c;\nvar beforePositionSet = function beforePositionSet(eles, newPos, silent) {\n for (var i = 0; i < eles.length; i++) {\n var ele = eles[i];\n if (!ele.locked()) {\n var oldPos = ele._private.position;\n var delta = {\n x: newPos.x != null ? newPos.x - oldPos.x : 0,\n y: newPos.y != null ? newPos.y - oldPos.y : 0\n };\n if (ele.isParent() && !(delta.x === 0 && delta.y === 0)) {\n ele.children().shift(delta, silent);\n }\n ele.dirtyBoundingBoxCache();\n }\n }\n};\nvar positionDef = {\n field: 'position',\n bindingEvent: 'position',\n allowBinding: true,\n allowSetting: true,\n settingEvent: 'position',\n settingTriggersEvent: true,\n triggerFnName: 'emitAndNotify',\n allowGetting: true,\n validKeys: ['x', 'y'],\n beforeGet: function beforeGet(ele) {\n ele.updateCompoundBounds();\n },\n beforeSet: function beforeSet(eles, newPos) {\n beforePositionSet(eles, newPos, false);\n },\n onSet: function onSet(eles) {\n eles.dirtyCompoundBoundsCache();\n },\n canSet: function canSet(ele) {\n return !ele.locked();\n }\n};\nfn$4 = elesfn$c = {\n position: define.data(positionDef),\n // position but no notification to renderer\n silentPosition: define.data(extend({}, positionDef, {\n allowBinding: false,\n allowSetting: true,\n settingTriggersEvent: false,\n allowGetting: false,\n beforeSet: function beforeSet(eles, newPos) {\n beforePositionSet(eles, newPos, true);\n },\n onSet: function onSet(eles) {\n eles.dirtyCompoundBoundsCache();\n }\n })),\n positions: function positions(pos, silent) {\n if (plainObject(pos)) {\n if (silent) {\n this.silentPosition(pos);\n } else {\n this.position(pos);\n }\n } else if (fn$6(pos)) {\n var _fn = pos;\n var cy = this.cy();\n cy.startBatch();\n for (var i = 0; i < this.length; i++) {\n var ele = this[i];\n var _pos = undefined;\n if (_pos = _fn(ele, i)) {\n if (silent) {\n ele.silentPosition(_pos);\n } else {\n ele.position(_pos);\n }\n }\n }\n cy.endBatch();\n }\n return this; // chaining\n },\n silentPositions: function silentPositions(pos) {\n return this.positions(pos, true);\n },\n shift: function shift(dim, val, silent) {\n var delta;\n if (plainObject(dim)) {\n delta = {\n x: number$1(dim.x) ? dim.x : 0,\n y: number$1(dim.y) ? dim.y : 0\n };\n silent = val;\n } else if (string(dim) && number$1(val)) {\n delta = {\n x: 0,\n y: 0\n };\n delta[dim] = val;\n }\n if (delta != null) {\n var cy = this.cy();\n cy.startBatch();\n for (var i = 0; i < this.length; i++) {\n var ele = this[i];\n\n // exclude any node that is a descendant of the calling collection\n if (cy.hasCompoundNodes() && ele.isChild() && ele.ancestors().anySame(this)) {\n continue;\n }\n var pos = ele.position();\n var newPos = {\n x: pos.x + delta.x,\n y: pos.y + delta.y\n };\n if (silent) {\n ele.silentPosition(newPos);\n } else {\n ele.position(newPos);\n }\n }\n cy.endBatch();\n }\n return this;\n },\n silentShift: function silentShift(dim, val) {\n if (plainObject(dim)) {\n this.shift(dim, true);\n } else if (string(dim) && number$1(val)) {\n this.shift(dim, val, true);\n }\n return this;\n },\n // get/set the rendered (i.e. on screen) positon of the element\n renderedPosition: function renderedPosition(dim, val) {\n var ele = this[0];\n var cy = this.cy();\n var zoom = cy.zoom();\n var pan = cy.pan();\n var rpos = plainObject(dim) ? dim : undefined;\n var setting = rpos !== undefined || val !== undefined && string(dim);\n if (ele && ele.isNode()) {\n // must have an element and must be a node to return position\n if (setting) {\n for (var i = 0; i < this.length; i++) {\n var _ele = this[i];\n if (val !== undefined) {\n // set one dimension\n _ele.position(dim, (val - pan[dim]) / zoom);\n } else if (rpos !== undefined) {\n // set whole position\n _ele.position(renderedToModelPosition(rpos, zoom, pan));\n }\n }\n } else {\n // getting\n var pos = ele.position();\n rpos = modelToRenderedPosition$1(pos, zoom, pan);\n if (dim === undefined) {\n // then return the whole rendered position\n return rpos;\n } else {\n // then return the specified dimension\n return rpos[dim];\n }\n }\n } else if (!setting) {\n return undefined; // for empty collection case\n }\n return this; // chaining\n },\n // get/set the position relative to the parent\n relativePosition: function relativePosition(dim, val) {\n var ele = this[0];\n var cy = this.cy();\n var ppos = plainObject(dim) ? dim : undefined;\n var setting = ppos !== undefined || val !== undefined && string(dim);\n var hasCompoundNodes = cy.hasCompoundNodes();\n if (ele && ele.isNode()) {\n // must have an element and must be a node to return position\n if (setting) {\n for (var i = 0; i < this.length; i++) {\n var _ele2 = this[i];\n var parent = hasCompoundNodes ? _ele2.parent() : null;\n var hasParent = parent && parent.length > 0;\n var relativeToParent = hasParent;\n if (hasParent) {\n parent = parent[0];\n }\n var origin = relativeToParent ? parent.position() : {\n x: 0,\n y: 0\n };\n if (val !== undefined) {\n // set one dimension\n _ele2.position(dim, val + origin[dim]);\n } else if (ppos !== undefined) {\n // set whole position\n _ele2.position({\n x: ppos.x + origin.x,\n y: ppos.y + origin.y\n });\n }\n }\n } else {\n // getting\n var pos = ele.position();\n var _parent = hasCompoundNodes ? ele.parent() : null;\n var _hasParent = _parent && _parent.length > 0;\n var _relativeToParent = _hasParent;\n if (_hasParent) {\n _parent = _parent[0];\n }\n var _origin = _relativeToParent ? _parent.position() : {\n x: 0,\n y: 0\n };\n ppos = {\n x: pos.x - _origin.x,\n y: pos.y - _origin.y\n };\n if (dim === undefined) {\n // then return the whole rendered position\n return ppos;\n } else {\n // then return the specified dimension\n return ppos[dim];\n }\n }\n } else if (!setting) {\n return undefined; // for empty collection case\n }\n return this; // chaining\n }\n};\n\n// aliases\nfn$4.modelPosition = fn$4.point = fn$4.position;\nfn$4.modelPositions = fn$4.points = fn$4.positions;\nfn$4.renderedPoint = fn$4.renderedPosition;\nfn$4.relativePoint = fn$4.relativePosition;\nvar position = elesfn$c;\n\nvar fn$3, elesfn$b;\nfn$3 = elesfn$b = {};\nelesfn$b.renderedBoundingBox = function (options) {\n var bb = this.boundingBox(options);\n var cy = this.cy();\n var zoom = cy.zoom();\n var pan = cy.pan();\n var x1 = bb.x1 * zoom + pan.x;\n var x2 = bb.x2 * zoom + pan.x;\n var y1 = bb.y1 * zoom + pan.y;\n var y2 = bb.y2 * zoom + pan.y;\n return {\n x1: x1,\n x2: x2,\n y1: y1,\n y2: y2,\n w: x2 - x1,\n h: y2 - y1\n };\n};\nelesfn$b.dirtyCompoundBoundsCache = function () {\n var silent = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false;\n var cy = this.cy();\n if (!cy.styleEnabled() || !cy.hasCompoundNodes()) {\n return this;\n }\n this.forEachUp(function (ele) {\n if (ele.isParent()) {\n var _p = ele._private;\n _p.compoundBoundsClean = false;\n _p.bbCache = null;\n if (!silent) {\n ele.emitAndNotify('bounds');\n }\n }\n });\n return this;\n};\nelesfn$b.updateCompoundBounds = function () {\n var force = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false;\n var cy = this.cy();\n\n // not possible to do on non-compound graphs or with the style disabled\n if (!cy.styleEnabled() || !cy.hasCompoundNodes()) {\n return this;\n }\n\n // save cycles when batching -- but bounds will be stale (or not exist yet)\n if (!force && cy.batching()) {\n return this;\n }\n function update(parent) {\n if (!parent.isParent()) {\n return;\n }\n var _p = parent._private;\n var children = parent.children();\n var includeLabels = parent.pstyle('compound-sizing-wrt-labels').value === 'include';\n var min = {\n width: {\n val: parent.pstyle('min-width').pfValue,\n left: parent.pstyle('min-width-bias-left'),\n right: parent.pstyle('min-width-bias-right')\n },\n height: {\n val: parent.pstyle('min-height').pfValue,\n top: parent.pstyle('min-height-bias-top'),\n bottom: parent.pstyle('min-height-bias-bottom')\n }\n };\n var bb = children.boundingBox({\n includeLabels: includeLabels,\n includeOverlays: false,\n // updating the compound bounds happens outside of the regular\n // cache cycle (i.e. before fired events)\n useCache: false\n });\n var pos = _p.position;\n\n // if children take up zero area then keep position and fall back on stylesheet w/h\n if (bb.w === 0 || bb.h === 0) {\n bb = {\n w: parent.pstyle('width').pfValue,\n h: parent.pstyle('height').pfValue\n };\n bb.x1 = pos.x - bb.w / 2;\n bb.x2 = pos.x + bb.w / 2;\n bb.y1 = pos.y - bb.h / 2;\n bb.y2 = pos.y + bb.h / 2;\n }\n function computeBiasValues(propDiff, propBias, propBiasComplement) {\n var biasDiff = 0;\n var biasComplementDiff = 0;\n var biasTotal = propBias + propBiasComplement;\n if (propDiff > 0 && biasTotal > 0) {\n biasDiff = propBias / biasTotal * propDiff;\n biasComplementDiff = propBiasComplement / biasTotal * propDiff;\n }\n return {\n biasDiff: biasDiff,\n biasComplementDiff: biasComplementDiff\n };\n }\n function computePaddingValues(width, height, paddingObject, relativeTo) {\n // Assuming percentage is number from 0 to 1\n if (paddingObject.units === '%') {\n switch (relativeTo) {\n case 'width':\n return width > 0 ? paddingObject.pfValue * width : 0;\n case 'height':\n return height > 0 ? paddingObject.pfValue * height : 0;\n case 'average':\n return width > 0 && height > 0 ? paddingObject.pfValue * (width + height) / 2 : 0;\n case 'min':\n return width > 0 && height > 0 ? width > height ? paddingObject.pfValue * height : paddingObject.pfValue * width : 0;\n case 'max':\n return width > 0 && height > 0 ? width > height ? paddingObject.pfValue * width : paddingObject.pfValue * height : 0;\n default:\n return 0;\n }\n } else if (paddingObject.units === 'px') {\n return paddingObject.pfValue;\n } else {\n return 0;\n }\n }\n var leftVal = min.width.left.value;\n if (min.width.left.units === 'px' && min.width.val > 0) {\n leftVal = leftVal * 100 / min.width.val;\n }\n var rightVal = min.width.right.value;\n if (min.width.right.units === 'px' && min.width.val > 0) {\n rightVal = rightVal * 100 / min.width.val;\n }\n var topVal = min.height.top.value;\n if (min.height.top.units === 'px' && min.height.val > 0) {\n topVal = topVal * 100 / min.height.val;\n }\n var bottomVal = min.height.bottom.value;\n if (min.height.bottom.units === 'px' && min.height.val > 0) {\n bottomVal = bottomVal * 100 / min.height.val;\n }\n var widthBiasDiffs = computeBiasValues(min.width.val - bb.w, leftVal, rightVal);\n var diffLeft = widthBiasDiffs.biasDiff;\n var diffRight = widthBiasDiffs.biasComplementDiff;\n var heightBiasDiffs = computeBiasValues(min.height.val - bb.h, topVal, bottomVal);\n var diffTop = heightBiasDiffs.biasDiff;\n var diffBottom = heightBiasDiffs.biasComplementDiff;\n _p.autoPadding = computePaddingValues(bb.w, bb.h, parent.pstyle('padding'), parent.pstyle('padding-relative-to').value);\n _p.autoWidth = Math.max(bb.w, min.width.val);\n pos.x = (-diffLeft + bb.x1 + bb.x2 + diffRight) / 2;\n _p.autoHeight = Math.max(bb.h, min.height.val);\n pos.y = (-diffTop + bb.y1 + bb.y2 + diffBottom) / 2;\n }\n for (var i = 0; i < this.length; i++) {\n var ele = this[i];\n var _p = ele._private;\n if (!_p.compoundBoundsClean || force) {\n update(ele);\n if (!cy.batching()) {\n _p.compoundBoundsClean = true;\n }\n }\n }\n return this;\n};\nvar noninf = function noninf(x) {\n if (x === Infinity || x === -Infinity) {\n return 0;\n }\n return x;\n};\nvar updateBounds = function updateBounds(b, x1, y1, x2, y2) {\n // don't update with zero area boxes\n if (x2 - x1 === 0 || y2 - y1 === 0) {\n return;\n }\n\n // don't update with null dim\n if (x1 == null || y1 == null || x2 == null || y2 == null) {\n return;\n }\n b.x1 = x1 < b.x1 ? x1 : b.x1;\n b.x2 = x2 > b.x2 ? x2 : b.x2;\n b.y1 = y1 < b.y1 ? y1 : b.y1;\n b.y2 = y2 > b.y2 ? y2 : b.y2;\n b.w = b.x2 - b.x1;\n b.h = b.y2 - b.y1;\n};\nvar updateBoundsFromBox = function updateBoundsFromBox(b, b2) {\n if (b2 == null) {\n return b;\n }\n return updateBounds(b, b2.x1, b2.y1, b2.x2, b2.y2);\n};\nvar prefixedProperty = function prefixedProperty(obj, field, prefix) {\n return getPrefixedProperty(obj, field, prefix);\n};\nvar updateBoundsFromArrow = function updateBoundsFromArrow(bounds, ele, prefix) {\n if (ele.cy().headless()) {\n return;\n }\n var _p = ele._private;\n var rstyle = _p.rstyle;\n var halfArW = rstyle.arrowWidth / 2;\n var arrowType = ele.pstyle(prefix + '-arrow-shape').value;\n var x;\n var y;\n if (arrowType !== 'none') {\n if (prefix === 'source') {\n x = rstyle.srcX;\n y = rstyle.srcY;\n } else if (prefix === 'target') {\n x = rstyle.tgtX;\n y = rstyle.tgtY;\n } else {\n x = rstyle.midX;\n y = rstyle.midY;\n }\n\n // always store the individual arrow bounds\n var bbs = _p.arrowBounds = _p.arrowBounds || {};\n var bb = bbs[prefix] = bbs[prefix] || {};\n bb.x1 = x - halfArW;\n bb.y1 = y - halfArW;\n bb.x2 = x + halfArW;\n bb.y2 = y + halfArW;\n bb.w = bb.x2 - bb.x1;\n bb.h = bb.y2 - bb.y1;\n expandBoundingBox(bb, 1);\n updateBounds(bounds, bb.x1, bb.y1, bb.x2, bb.y2);\n }\n};\nvar updateBoundsFromLabel = function updateBoundsFromLabel(bounds, ele, prefix) {\n if (ele.cy().headless()) {\n return;\n }\n var prefixDash;\n if (prefix) {\n prefixDash = prefix + '-';\n } else {\n prefixDash = '';\n }\n var _p = ele._private;\n var rstyle = _p.rstyle;\n var label = ele.pstyle(prefixDash + 'label').strValue;\n if (label) {\n var halign = ele.pstyle('text-halign');\n var valign = ele.pstyle('text-valign');\n var labelWidth = prefixedProperty(rstyle, 'labelWidth', prefix);\n var labelHeight = prefixedProperty(rstyle, 'labelHeight', prefix);\n var labelX = prefixedProperty(rstyle, 'labelX', prefix);\n var labelY = prefixedProperty(rstyle, 'labelY', prefix);\n var marginX = ele.pstyle(prefixDash + 'text-margin-x').pfValue;\n var marginY = ele.pstyle(prefixDash + 'text-margin-y').pfValue;\n var isEdge = ele.isEdge();\n var rotation = ele.pstyle(prefixDash + 'text-rotation');\n var outlineWidth = ele.pstyle('text-outline-width').pfValue;\n var borderWidth = ele.pstyle('text-border-width').pfValue;\n var halfBorderWidth = borderWidth / 2;\n var padding = ele.pstyle('text-background-padding').pfValue;\n var marginOfError = 2; // expand to work around browser dimension inaccuracies\n\n var lh = labelHeight;\n var lw = labelWidth;\n var lw_2 = lw / 2;\n var lh_2 = lh / 2;\n var lx1, lx2, ly1, ly2;\n if (isEdge) {\n lx1 = labelX - lw_2;\n lx2 = labelX + lw_2;\n ly1 = labelY - lh_2;\n ly2 = labelY + lh_2;\n } else {\n switch (halign.value) {\n case 'left':\n lx1 = labelX - lw;\n lx2 = labelX;\n break;\n case 'center':\n lx1 = labelX - lw_2;\n lx2 = labelX + lw_2;\n break;\n case 'right':\n lx1 = labelX;\n lx2 = labelX + lw;\n break;\n }\n switch (valign.value) {\n case 'top':\n ly1 = labelY - lh;\n ly2 = labelY;\n break;\n case 'center':\n ly1 = labelY - lh_2;\n ly2 = labelY + lh_2;\n break;\n case 'bottom':\n ly1 = labelY;\n ly2 = labelY + lh;\n break;\n }\n }\n\n // shift by margin and expand by outline and border\n var leftPad = marginX - Math.max(outlineWidth, halfBorderWidth) - padding - marginOfError;\n var rightPad = marginX + Math.max(outlineWidth, halfBorderWidth) + padding + marginOfError;\n var topPad = marginY - Math.max(outlineWidth, halfBorderWidth) - padding - marginOfError;\n var botPad = marginY + Math.max(outlineWidth, halfBorderWidth) + padding + marginOfError;\n lx1 += leftPad;\n lx2 += rightPad;\n ly1 += topPad;\n ly2 += botPad;\n\n // always store the unrotated label bounds separately\n var bbPrefix = prefix || 'main';\n var bbs = _p.labelBounds;\n var bb = bbs[bbPrefix] = bbs[bbPrefix] || {};\n bb.x1 = lx1;\n bb.y1 = ly1;\n bb.x2 = lx2;\n bb.y2 = ly2;\n bb.w = lx2 - lx1;\n bb.h = ly2 - ly1;\n bb.leftPad = leftPad;\n bb.rightPad = rightPad;\n bb.topPad = topPad;\n bb.botPad = botPad;\n var isAutorotate = isEdge && rotation.strValue === 'autorotate';\n var isPfValue = rotation.pfValue != null && rotation.pfValue !== 0;\n if (isAutorotate || isPfValue) {\n var theta = isAutorotate ? prefixedProperty(_p.rstyle, 'labelAngle', prefix) : rotation.pfValue;\n var cos = Math.cos(theta);\n var sin = Math.sin(theta);\n\n // rotation point (default value for center-center)\n var xo = (lx1 + lx2) / 2;\n var yo = (ly1 + ly2) / 2;\n if (!isEdge) {\n switch (halign.value) {\n case 'left':\n xo = lx2;\n break;\n case 'right':\n xo = lx1;\n break;\n }\n switch (valign.value) {\n case 'top':\n yo = ly2;\n break;\n case 'bottom':\n yo = ly1;\n break;\n }\n }\n var rotate = function rotate(x, y) {\n x = x - xo;\n y = y - yo;\n return {\n x: x * cos - y * sin + xo,\n y: x * sin + y * cos + yo\n };\n };\n var px1y1 = rotate(lx1, ly1);\n var px1y2 = rotate(lx1, ly2);\n var px2y1 = rotate(lx2, ly1);\n var px2y2 = rotate(lx2, ly2);\n lx1 = Math.min(px1y1.x, px1y2.x, px2y1.x, px2y2.x);\n lx2 = Math.max(px1y1.x, px1y2.x, px2y1.x, px2y2.x);\n ly1 = Math.min(px1y1.y, px1y2.y, px2y1.y, px2y2.y);\n ly2 = Math.max(px1y1.y, px1y2.y, px2y1.y, px2y2.y);\n }\n var bbPrefixRot = bbPrefix + 'Rot';\n var bbRot = bbs[bbPrefixRot] = bbs[bbPrefixRot] || {};\n bbRot.x1 = lx1;\n bbRot.y1 = ly1;\n bbRot.x2 = lx2;\n bbRot.y2 = ly2;\n bbRot.w = lx2 - lx1;\n bbRot.h = ly2 - ly1;\n updateBounds(bounds, lx1, ly1, lx2, ly2);\n updateBounds(_p.labelBounds.all, lx1, ly1, lx2, ly2);\n }\n return bounds;\n};\nvar updateBoundsFromOutline = function updateBoundsFromOutline(bounds, ele) {\n if (ele.cy().headless()) {\n return;\n }\n var outlineOpacity = ele.pstyle('outline-opacity').value;\n var outlineWidth = ele.pstyle('outline-width').value;\n if (outlineOpacity > 0 && outlineWidth > 0) {\n var outlineOffset = ele.pstyle('outline-offset').value;\n var nodeShape = ele.pstyle('shape').value;\n var outlineSize = outlineWidth + outlineOffset;\n var scaleX = (bounds.w + outlineSize * 2) / bounds.w;\n var scaleY = (bounds.h + outlineSize * 2) / bounds.h;\n var xOffset = 0;\n var yOffset = 0;\n if ([\"diamond\", \"pentagon\", \"round-triangle\"].includes(nodeShape)) {\n scaleX = (bounds.w + outlineSize * 2.4) / bounds.w;\n yOffset = -outlineSize / 3.6;\n } else if ([\"concave-hexagon\", \"rhomboid\", \"right-rhomboid\"].includes(nodeShape)) {\n scaleX = (bounds.w + outlineSize * 2.4) / bounds.w;\n } else if (nodeShape === \"star\") {\n scaleX = (bounds.w + outlineSize * 2.8) / bounds.w;\n scaleY = (bounds.h + outlineSize * 2.6) / bounds.h;\n yOffset = -outlineSize / 3.8;\n } else if (nodeShape === \"triangle\") {\n scaleX = (bounds.w + outlineSize * 2.8) / bounds.w;\n scaleY = (bounds.h + outlineSize * 2.4) / bounds.h;\n yOffset = -outlineSize / 1.4;\n } else if (nodeShape === \"vee\") {\n scaleX = (bounds.w + outlineSize * 4.4) / bounds.w;\n scaleY = (bounds.h + outlineSize * 3.8) / bounds.h;\n yOffset = -outlineSize * .5;\n }\n var hDelta = bounds.h * scaleY - bounds.h;\n var wDelta = bounds.w * scaleX - bounds.w;\n expandBoundingBoxSides(bounds, [Math.ceil(hDelta / 2), Math.ceil(wDelta / 2)]);\n if (xOffset != 0 || yOffset !== 0) {\n var oBounds = shiftBoundingBox(bounds, xOffset, yOffset);\n updateBoundingBox(bounds, oBounds);\n }\n }\n};\n\n// get the bounding box of the elements (in raw model position)\nvar boundingBoxImpl = function boundingBoxImpl(ele, options) {\n var cy = ele._private.cy;\n var styleEnabled = cy.styleEnabled();\n var headless = cy.headless();\n var bounds = makeBoundingBox();\n var _p = ele._private;\n var isNode = ele.isNode();\n var isEdge = ele.isEdge();\n var ex1, ex2, ey1, ey2; // extrema of body / lines\n var x, y; // node pos\n var rstyle = _p.rstyle;\n var manualExpansion = isNode && styleEnabled ? ele.pstyle('bounds-expansion').pfValue : [0];\n\n // must use `display` prop only, as reading `compound.width()` causes recursion\n // (other factors like width values will be considered later in this function anyway)\n var isDisplayed = function isDisplayed(ele) {\n return ele.pstyle('display').value !== 'none';\n };\n var displayed = !styleEnabled || isDisplayed(ele)\n\n // must take into account connected nodes b/c of implicit edge hiding on display:none node\n && (!isEdge || isDisplayed(ele.source()) && isDisplayed(ele.target()));\n if (displayed) {\n // displayed suffices, since we will find zero area eles anyway\n var overlayOpacity = 0;\n var overlayPadding = 0;\n if (styleEnabled && options.includeOverlays) {\n overlayOpacity = ele.pstyle('overlay-opacity').value;\n if (overlayOpacity !== 0) {\n overlayPadding = ele.pstyle('overlay-padding').value;\n }\n }\n var underlayOpacity = 0;\n var underlayPadding = 0;\n if (styleEnabled && options.includeUnderlays) {\n underlayOpacity = ele.pstyle('underlay-opacity').value;\n if (underlayOpacity !== 0) {\n underlayPadding = ele.pstyle('underlay-padding').value;\n }\n }\n var padding = Math.max(overlayPadding, underlayPadding);\n var w = 0;\n var wHalf = 0;\n if (styleEnabled) {\n w = ele.pstyle('width').pfValue;\n wHalf = w / 2;\n }\n if (isNode && options.includeNodes) {\n var pos = ele.position();\n x = pos.x;\n y = pos.y;\n var _w = ele.outerWidth();\n var halfW = _w / 2;\n var h = ele.outerHeight();\n var halfH = h / 2;\n\n // handle node dimensions\n /////////////////////////\n\n ex1 = x - halfW;\n ex2 = x + halfW;\n ey1 = y - halfH;\n ey2 = y + halfH;\n updateBounds(bounds, ex1, ey1, ex2, ey2);\n if (styleEnabled && options.includeOutlines) {\n updateBoundsFromOutline(bounds, ele);\n }\n } else if (isEdge && options.includeEdges) {\n if (styleEnabled && !headless) {\n var curveStyle = ele.pstyle('curve-style').strValue;\n\n // handle edge dimensions (rough box estimate)\n //////////////////////////////////////////////\n\n ex1 = Math.min(rstyle.srcX, rstyle.midX, rstyle.tgtX);\n ex2 = Math.max(rstyle.srcX, rstyle.midX, rstyle.tgtX);\n ey1 = Math.min(rstyle.srcY, rstyle.midY, rstyle.tgtY);\n ey2 = Math.max(rstyle.srcY, rstyle.midY, rstyle.tgtY);\n\n // take into account edge width\n ex1 -= wHalf;\n ex2 += wHalf;\n ey1 -= wHalf;\n ey2 += wHalf;\n updateBounds(bounds, ex1, ey1, ex2, ey2);\n\n // precise edges\n ////////////////\n\n if (curveStyle === 'haystack') {\n var hpts = rstyle.haystackPts;\n if (hpts && hpts.length === 2) {\n ex1 = hpts[0].x;\n ey1 = hpts[0].y;\n ex2 = hpts[1].x;\n ey2 = hpts[1].y;\n if (ex1 > ex2) {\n var temp = ex1;\n ex1 = ex2;\n ex2 = temp;\n }\n if (ey1 > ey2) {\n var _temp = ey1;\n ey1 = ey2;\n ey2 = _temp;\n }\n updateBounds(bounds, ex1 - wHalf, ey1 - wHalf, ex2 + wHalf, ey2 + wHalf);\n }\n } else if (curveStyle === 'bezier' || curveStyle === 'unbundled-bezier' || curveStyle.endsWith('segments') || curveStyle.endsWith('taxi')) {\n var pts;\n switch (curveStyle) {\n case 'bezier':\n case 'unbundled-bezier':\n pts = rstyle.bezierPts;\n break;\n case 'segments':\n case 'taxi':\n case 'round-segments':\n case 'round-taxi':\n pts = rstyle.linePts;\n break;\n }\n if (pts != null) {\n for (var j = 0; j < pts.length; j++) {\n var pt = pts[j];\n ex1 = pt.x - wHalf;\n ex2 = pt.x + wHalf;\n ey1 = pt.y - wHalf;\n ey2 = pt.y + wHalf;\n updateBounds(bounds, ex1, ey1, ex2, ey2);\n }\n }\n } // bezier-like or segment-like edge\n } else {\n // headless or style disabled\n\n // fallback on source and target positions\n //////////////////////////////////////////\n\n var n1 = ele.source();\n var n1pos = n1.position();\n var n2 = ele.target();\n var n2pos = n2.position();\n ex1 = n1pos.x;\n ex2 = n2pos.x;\n ey1 = n1pos.y;\n ey2 = n2pos.y;\n if (ex1 > ex2) {\n var _temp2 = ex1;\n ex1 = ex2;\n ex2 = _temp2;\n }\n if (ey1 > ey2) {\n var _temp3 = ey1;\n ey1 = ey2;\n ey2 = _temp3;\n }\n\n // take into account edge width\n ex1 -= wHalf;\n ex2 += wHalf;\n ey1 -= wHalf;\n ey2 += wHalf;\n updateBounds(bounds, ex1, ey1, ex2, ey2);\n } // headless or style disabled\n } // edges\n\n // handle edge arrow size\n /////////////////////////\n\n if (styleEnabled && options.includeEdges && isEdge) {\n updateBoundsFromArrow(bounds, ele, 'mid-source');\n updateBoundsFromArrow(bounds, ele, 'mid-target');\n updateBoundsFromArrow(bounds, ele, 'source');\n updateBoundsFromArrow(bounds, ele, 'target');\n }\n\n // ghost\n ////////\n\n if (styleEnabled) {\n var ghost = ele.pstyle('ghost').value === 'yes';\n if (ghost) {\n var gx = ele.pstyle('ghost-offset-x').pfValue;\n var gy = ele.pstyle('ghost-offset-y').pfValue;\n updateBounds(bounds, bounds.x1 + gx, bounds.y1 + gy, bounds.x2 + gx, bounds.y2 + gy);\n }\n }\n\n // always store the body bounds separately from the labels\n var bbBody = _p.bodyBounds = _p.bodyBounds || {};\n assignBoundingBox(bbBody, bounds);\n expandBoundingBoxSides(bbBody, manualExpansion);\n expandBoundingBox(bbBody, 1); // expand to work around browser dimension inaccuracies\n\n // overlay\n //////////\n\n if (styleEnabled) {\n ex1 = bounds.x1;\n ex2 = bounds.x2;\n ey1 = bounds.y1;\n ey2 = bounds.y2;\n updateBounds(bounds, ex1 - padding, ey1 - padding, ex2 + padding, ey2 + padding);\n }\n\n // always store the body bounds separately from the labels\n var bbOverlay = _p.overlayBounds = _p.overlayBounds || {};\n assignBoundingBox(bbOverlay, bounds);\n expandBoundingBoxSides(bbOverlay, manualExpansion);\n expandBoundingBox(bbOverlay, 1); // expand to work around browser dimension inaccuracies\n\n // handle label dimensions\n //////////////////////////\n\n var bbLabels = _p.labelBounds = _p.labelBounds || {};\n if (bbLabels.all != null) {\n clearBoundingBox(bbLabels.all);\n } else {\n bbLabels.all = makeBoundingBox();\n }\n if (styleEnabled && options.includeLabels) {\n if (options.includeMainLabels) {\n updateBoundsFromLabel(bounds, ele, null);\n }\n if (isEdge) {\n if (options.includeSourceLabels) {\n updateBoundsFromLabel(bounds, ele, 'source');\n }\n if (options.includeTargetLabels) {\n updateBoundsFromLabel(bounds, ele, 'target');\n }\n }\n } // style enabled for labels\n } // if displayed\n\n bounds.x1 = noninf(bounds.x1);\n bounds.y1 = noninf(bounds.y1);\n bounds.x2 = noninf(bounds.x2);\n bounds.y2 = noninf(bounds.y2);\n bounds.w = noninf(bounds.x2 - bounds.x1);\n bounds.h = noninf(bounds.y2 - bounds.y1);\n if (bounds.w > 0 && bounds.h > 0 && displayed) {\n expandBoundingBoxSides(bounds, manualExpansion);\n\n // expand bounds by 1 because antialiasing can increase the visual/effective size by 1 on all sides\n expandBoundingBox(bounds, 1);\n }\n return bounds;\n};\nvar getKey = function getKey(opts) {\n var i = 0;\n var tf = function tf(val) {\n return (val ? 1 : 0) << i++;\n };\n var key = 0;\n key += tf(opts.incudeNodes);\n key += tf(opts.includeEdges);\n key += tf(opts.includeLabels);\n key += tf(opts.includeMainLabels);\n key += tf(opts.includeSourceLabels);\n key += tf(opts.includeTargetLabels);\n key += tf(opts.includeOverlays);\n key += tf(opts.includeOutlines);\n return key;\n};\nvar getBoundingBoxPosKey = function getBoundingBoxPosKey(ele) {\n if (ele.isEdge()) {\n var p1 = ele.source().position();\n var p2 = ele.target().position();\n var r = function r(x) {\n return Math.round(x);\n };\n return hashIntsArray([r(p1.x), r(p1.y), r(p2.x), r(p2.y)]);\n } else {\n return 0;\n }\n};\nvar cachedBoundingBoxImpl = function cachedBoundingBoxImpl(ele, opts) {\n var _p = ele._private;\n var bb;\n var isEdge = ele.isEdge();\n var key = opts == null ? defBbOptsKey : getKey(opts);\n var usingDefOpts = key === defBbOptsKey;\n var currPosKey = getBoundingBoxPosKey(ele);\n var isPosKeySame = _p.bbCachePosKey === currPosKey;\n var useCache = opts.useCache;\n var isDirty = function isDirty(ele) {\n return ele._private.bbCache == null || ele._private.styleDirty;\n };\n var needRecalc = !useCache || isDirty(ele) || isEdge && (isDirty(ele.source()) || isDirty(ele.target()));\n if (needRecalc) {\n if (!isPosKeySame) {\n ele.recalculateRenderedStyle(useCache);\n }\n bb = boundingBoxImpl(ele, defBbOpts);\n _p.bbCache = bb;\n _p.bbCachePosKey = currPosKey;\n } else {\n bb = _p.bbCache;\n }\n\n // not using def opts => need to build up bb from combination of sub bbs\n if (!usingDefOpts) {\n var isNode = ele.isNode();\n bb = makeBoundingBox();\n if (opts.includeNodes && isNode || opts.includeEdges && !isNode) {\n if (opts.includeOverlays) {\n updateBoundsFromBox(bb, _p.overlayBounds);\n } else {\n updateBoundsFromBox(bb, _p.bodyBounds);\n }\n }\n if (opts.includeLabels) {\n if (opts.includeMainLabels && (!isEdge || opts.includeSourceLabels && opts.includeTargetLabels)) {\n updateBoundsFromBox(bb, _p.labelBounds.all);\n } else {\n if (opts.includeMainLabels) {\n updateBoundsFromBox(bb, _p.labelBounds.mainRot);\n }\n if (opts.includeSourceLabels) {\n updateBoundsFromBox(bb, _p.labelBounds.sourceRot);\n }\n if (opts.includeTargetLabels) {\n updateBoundsFromBox(bb, _p.labelBounds.targetRot);\n }\n }\n }\n bb.w = bb.x2 - bb.x1;\n bb.h = bb.y2 - bb.y1;\n }\n return bb;\n};\nvar defBbOpts = {\n includeNodes: true,\n includeEdges: true,\n includeLabels: true,\n includeMainLabels: true,\n includeSourceLabels: true,\n includeTargetLabels: true,\n includeOverlays: true,\n includeUnderlays: true,\n includeOutlines: true,\n useCache: true\n};\nvar defBbOptsKey = getKey(defBbOpts);\nvar filledBbOpts = defaults$g(defBbOpts);\nelesfn$b.boundingBox = function (options) {\n var bounds;\n\n // the main usecase is ele.boundingBox() for a single element with no/def options\n // specified s.t. the cache is used, so check for this case to make it faster by\n // avoiding the overhead of the rest of the function\n if (this.length === 1 && this[0]._private.bbCache != null && !this[0]._private.styleDirty && (options === undefined || options.useCache === undefined || options.useCache === true)) {\n if (options === undefined) {\n options = defBbOpts;\n } else {\n options = filledBbOpts(options);\n }\n bounds = cachedBoundingBoxImpl(this[0], options);\n } else {\n bounds = makeBoundingBox();\n options = options || defBbOpts;\n var opts = filledBbOpts(options);\n var eles = this;\n var cy = eles.cy();\n var styleEnabled = cy.styleEnabled();\n if (styleEnabled) {\n for (var i = 0; i < eles.length; i++) {\n var ele = eles[i];\n var _p = ele._private;\n var currPosKey = getBoundingBoxPosKey(ele);\n var isPosKeySame = _p.bbCachePosKey === currPosKey;\n var useCache = opts.useCache && isPosKeySame && !_p.styleDirty;\n ele.recalculateRenderedStyle(useCache);\n }\n }\n this.updateCompoundBounds(!options.useCache);\n for (var _i = 0; _i < eles.length; _i++) {\n var _ele = eles[_i];\n updateBoundsFromBox(bounds, cachedBoundingBoxImpl(_ele, opts));\n }\n }\n bounds.x1 = noninf(bounds.x1);\n bounds.y1 = noninf(bounds.y1);\n bounds.x2 = noninf(bounds.x2);\n bounds.y2 = noninf(bounds.y2);\n bounds.w = noninf(bounds.x2 - bounds.x1);\n bounds.h = noninf(bounds.y2 - bounds.y1);\n return bounds;\n};\nelesfn$b.dirtyBoundingBoxCache = function () {\n for (var i = 0; i < this.length; i++) {\n var _p = this[i]._private;\n _p.bbCache = null;\n _p.bbCachePosKey = null;\n _p.bodyBounds = null;\n _p.overlayBounds = null;\n _p.labelBounds.all = null;\n _p.labelBounds.source = null;\n _p.labelBounds.target = null;\n _p.labelBounds.main = null;\n _p.labelBounds.sourceRot = null;\n _p.labelBounds.targetRot = null;\n _p.labelBounds.mainRot = null;\n _p.arrowBounds.source = null;\n _p.arrowBounds.target = null;\n _p.arrowBounds['mid-source'] = null;\n _p.arrowBounds['mid-target'] = null;\n }\n this.emitAndNotify('bounds');\n return this;\n};\n\n// private helper to get bounding box for custom node positions\n// - good for perf in certain cases but currently requires dirtying the rendered style\n// - would be better to not modify the nodes but the nodes are read directly everywhere in the renderer...\n// - try to use for only things like discrete layouts where the node position would change anyway\nelesfn$b.boundingBoxAt = function (fn) {\n var nodes = this.nodes();\n var cy = this.cy();\n var hasCompoundNodes = cy.hasCompoundNodes();\n var parents = cy.collection();\n if (hasCompoundNodes) {\n parents = nodes.filter(function (node) {\n return node.isParent();\n });\n nodes = nodes.not(parents);\n }\n if (plainObject(fn)) {\n var obj = fn;\n fn = function fn() {\n return obj;\n };\n }\n var storeOldPos = function storeOldPos(node, i) {\n return node._private.bbAtOldPos = fn(node, i);\n };\n var getOldPos = function getOldPos(node) {\n return node._private.bbAtOldPos;\n };\n cy.startBatch();\n nodes.forEach(storeOldPos).silentPositions(fn);\n if (hasCompoundNodes) {\n parents.dirtyCompoundBoundsCache();\n parents.dirtyBoundingBoxCache();\n parents.updateCompoundBounds(true); // force update b/c we're inside a batch cycle\n }\n var bb = copyBoundingBox(this.boundingBox({\n useCache: false\n }));\n nodes.silentPositions(getOldPos);\n if (hasCompoundNodes) {\n parents.dirtyCompoundBoundsCache();\n parents.dirtyBoundingBoxCache();\n parents.updateCompoundBounds(true); // force update b/c we're inside a batch cycle\n }\n cy.endBatch();\n return bb;\n};\nfn$3.boundingbox = fn$3.bb = fn$3.boundingBox;\nfn$3.renderedBoundingbox = fn$3.renderedBoundingBox;\nvar bounds = elesfn$b;\n\nvar fn$2, elesfn$a;\nfn$2 = elesfn$a = {};\nvar defineDimFns = function defineDimFns(opts) {\n opts.uppercaseName = capitalize(opts.name);\n opts.autoName = 'auto' + opts.uppercaseName;\n opts.labelName = 'label' + opts.uppercaseName;\n opts.outerName = 'outer' + opts.uppercaseName;\n opts.uppercaseOuterName = capitalize(opts.outerName);\n fn$2[opts.name] = function dimImpl() {\n var ele = this[0];\n var _p = ele._private;\n var cy = _p.cy;\n var styleEnabled = cy._private.styleEnabled;\n if (ele) {\n if (styleEnabled) {\n if (ele.isParent()) {\n ele.updateCompoundBounds();\n return _p[opts.autoName] || 0;\n }\n var d = ele.pstyle(opts.name);\n switch (d.strValue) {\n case 'label':\n ele.recalculateRenderedStyle();\n return _p.rstyle[opts.labelName] || 0;\n default:\n return d.pfValue;\n }\n } else {\n return 1;\n }\n }\n };\n fn$2['outer' + opts.uppercaseName] = function outerDimImpl() {\n var ele = this[0];\n var _p = ele._private;\n var cy = _p.cy;\n var styleEnabled = cy._private.styleEnabled;\n if (ele) {\n if (styleEnabled) {\n var dim = ele[opts.name]();\n var border = ele.pstyle('border-width').pfValue; // n.b. 1/2 each side\n var padding = 2 * ele.padding();\n return dim + border + padding;\n } else {\n return 1;\n }\n }\n };\n fn$2['rendered' + opts.uppercaseName] = function renderedDimImpl() {\n var ele = this[0];\n if (ele) {\n var d = ele[opts.name]();\n return d * this.cy().zoom();\n }\n };\n fn$2['rendered' + opts.uppercaseOuterName] = function renderedOuterDimImpl() {\n var ele = this[0];\n if (ele) {\n var od = ele[opts.outerName]();\n return od * this.cy().zoom();\n }\n };\n};\ndefineDimFns({\n name: 'width'\n});\ndefineDimFns({\n name: 'height'\n});\nelesfn$a.padding = function () {\n var ele = this[0];\n var _p = ele._private;\n if (ele.isParent()) {\n ele.updateCompoundBounds();\n if (_p.autoPadding !== undefined) {\n return _p.autoPadding;\n } else {\n return ele.pstyle('padding').pfValue;\n }\n } else {\n return ele.pstyle('padding').pfValue;\n }\n};\nelesfn$a.paddedHeight = function () {\n var ele = this[0];\n return ele.height() + 2 * ele.padding();\n};\nelesfn$a.paddedWidth = function () {\n var ele = this[0];\n return ele.width() + 2 * ele.padding();\n};\nvar widthHeight = elesfn$a;\n\nvar ifEdge = function ifEdge(ele, getValue) {\n if (ele.isEdge() && ele.takesUpSpace()) {\n return getValue(ele);\n }\n};\nvar ifEdgeRenderedPosition = function ifEdgeRenderedPosition(ele, getPoint) {\n if (ele.isEdge() && ele.takesUpSpace()) {\n var cy = ele.cy();\n return modelToRenderedPosition$1(getPoint(ele), cy.zoom(), cy.pan());\n }\n};\nvar ifEdgeRenderedPositions = function ifEdgeRenderedPositions(ele, getPoints) {\n if (ele.isEdge() && ele.takesUpSpace()) {\n var cy = ele.cy();\n var pan = cy.pan();\n var zoom = cy.zoom();\n return getPoints(ele).map(function (p) {\n return modelToRenderedPosition$1(p, zoom, pan);\n });\n }\n};\nvar controlPoints = function controlPoints(ele) {\n return ele.renderer().getControlPoints(ele);\n};\nvar segmentPoints = function segmentPoints(ele) {\n return ele.renderer().getSegmentPoints(ele);\n};\nvar sourceEndpoint = function sourceEndpoint(ele) {\n return ele.renderer().getSourceEndpoint(ele);\n};\nvar targetEndpoint = function targetEndpoint(ele) {\n return ele.renderer().getTargetEndpoint(ele);\n};\nvar midpoint = function midpoint(ele) {\n return ele.renderer().getEdgeMidpoint(ele);\n};\nvar pts = {\n controlPoints: {\n get: controlPoints,\n mult: true\n },\n segmentPoints: {\n get: segmentPoints,\n mult: true\n },\n sourceEndpoint: {\n get: sourceEndpoint\n },\n targetEndpoint: {\n get: targetEndpoint\n },\n midpoint: {\n get: midpoint\n }\n};\nvar renderedName = function renderedName(name) {\n return 'rendered' + name[0].toUpperCase() + name.substr(1);\n};\nvar edgePoints = Object.keys(pts).reduce(function (obj, name) {\n var spec = pts[name];\n var rName = renderedName(name);\n obj[name] = function () {\n return ifEdge(this, spec.get);\n };\n if (spec.mult) {\n obj[rName] = function () {\n return ifEdgeRenderedPositions(this, spec.get);\n };\n } else {\n obj[rName] = function () {\n return ifEdgeRenderedPosition(this, spec.get);\n };\n }\n return obj;\n}, {});\n\nvar dimensions = extend({}, position, bounds, widthHeight, edgePoints);\n\n/*!\nEvent object based on jQuery events, MIT license\n\nhttps://jquery.org/license/\nhttps://tldrlegal.com/license/mit-license\nhttps://github.com/jquery/jquery/blob/master/src/event.js\n*/\n\nvar Event = function Event(src, props) {\n this.recycle(src, props);\n};\nfunction returnFalse() {\n return false;\n}\nfunction returnTrue() {\n return true;\n}\n\n// http://www.w3.org/TR/2003/WD-DOM-Level-3-Events-20030331/ecma-script-binding.html\nEvent.prototype = {\n instanceString: function instanceString() {\n return 'event';\n },\n recycle: function recycle(src, props) {\n this.isImmediatePropagationStopped = this.isPropagationStopped = this.isDefaultPrevented = returnFalse;\n if (src != null && src.preventDefault) {\n // Browser Event object\n this.type = src.type;\n\n // Events bubbling up the document may have been marked as prevented\n // by a handler lower down the tree; reflect the correct value.\n this.isDefaultPrevented = src.defaultPrevented ? returnTrue : returnFalse;\n } else if (src != null && src.type) {\n // Plain object containing all event details\n props = src;\n } else {\n // Event string\n this.type = src;\n }\n\n // Put explicitly provided properties onto the event object\n if (props != null) {\n // more efficient to manually copy fields we use\n this.originalEvent = props.originalEvent;\n this.type = props.type != null ? props.type : this.type;\n this.cy = props.cy;\n this.target = props.target;\n this.position = props.position;\n this.renderedPosition = props.renderedPosition;\n this.namespace = props.namespace;\n this.layout = props.layout;\n }\n if (this.cy != null && this.position != null && this.renderedPosition == null) {\n // create a rendered position based on the passed position\n var pos = this.position;\n var zoom = this.cy.zoom();\n var pan = this.cy.pan();\n this.renderedPosition = {\n x: pos.x * zoom + pan.x,\n y: pos.y * zoom + pan.y\n };\n }\n\n // Create a timestamp if incoming event doesn't have one\n this.timeStamp = src && src.timeStamp || Date.now();\n },\n preventDefault: function preventDefault() {\n this.isDefaultPrevented = returnTrue;\n var e = this.originalEvent;\n if (!e) {\n return;\n }\n\n // if preventDefault exists run it on the original event\n if (e.preventDefault) {\n e.preventDefault();\n }\n },\n stopPropagation: function stopPropagation() {\n this.isPropagationStopped = returnTrue;\n var e = this.originalEvent;\n if (!e) {\n return;\n }\n\n // if stopPropagation exists run it on the original event\n if (e.stopPropagation) {\n e.stopPropagation();\n }\n },\n stopImmediatePropagation: function stopImmediatePropagation() {\n this.isImmediatePropagationStopped = returnTrue;\n this.stopPropagation();\n },\n isDefaultPrevented: returnFalse,\n isPropagationStopped: returnFalse,\n isImmediatePropagationStopped: returnFalse\n};\n\nvar eventRegex = /^([^.]+)(\\.(?:[^.]+))?$/; // regex for matching event strings (e.g. \"click.namespace\")\nvar universalNamespace = '.*'; // matches as if no namespace specified and prevents users from unbinding accidentally\n\nvar defaults$8 = {\n qualifierCompare: function qualifierCompare(q1, q2) {\n return q1 === q2;\n },\n eventMatches: function eventMatches(/*context, listener, eventObj*/\n ) {\n return true;\n },\n addEventFields: function addEventFields(/*context, evt*/\n ) {},\n callbackContext: function callbackContext(context /*, listener, eventObj*/) {\n return context;\n },\n beforeEmit: function beforeEmit(/* context, listener, eventObj */\n ) {},\n afterEmit: function afterEmit(/* context, listener, eventObj */\n ) {},\n bubble: function bubble(/*context*/\n ) {\n return false;\n },\n parent: function parent(/*context*/\n ) {\n return null;\n },\n context: null\n};\nvar defaultsKeys = Object.keys(defaults$8);\nvar emptyOpts = {};\nfunction Emitter() {\n var opts = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : emptyOpts;\n var context = arguments.length > 1 ? arguments[1] : undefined;\n // micro-optimisation vs Object.assign() -- reduces Element instantiation time\n for (var i = 0; i < defaultsKeys.length; i++) {\n var key = defaultsKeys[i];\n this[key] = opts[key] || defaults$8[key];\n }\n this.context = context || this.context;\n this.listeners = [];\n this.emitting = 0;\n}\nvar p = Emitter.prototype;\nvar forEachEvent = function forEachEvent(self, handler, events, qualifier, callback, conf, confOverrides) {\n if (fn$6(qualifier)) {\n callback = qualifier;\n qualifier = null;\n }\n if (confOverrides) {\n if (conf == null) {\n conf = confOverrides;\n } else {\n conf = extend({}, conf, confOverrides);\n }\n }\n var eventList = array(events) ? events : events.split(/\\s+/);\n for (var i = 0; i < eventList.length; i++) {\n var evt = eventList[i];\n if (emptyString(evt)) {\n continue;\n }\n var match = evt.match(eventRegex); // type[.namespace]\n\n if (match) {\n var type = match[1];\n var namespace = match[2] ? match[2] : null;\n var ret = handler(self, evt, type, namespace, qualifier, callback, conf);\n if (ret === false) {\n break;\n } // allow exiting early\n }\n }\n};\nvar makeEventObj = function makeEventObj(self, obj) {\n self.addEventFields(self.context, obj);\n return new Event(obj.type, obj);\n};\nvar forEachEventObj = function forEachEventObj(self, handler, events) {\n if (event(events)) {\n handler(self, events);\n return;\n } else if (plainObject(events)) {\n handler(self, makeEventObj(self, events));\n return;\n }\n var eventList = array(events) ? events : events.split(/\\s+/);\n for (var i = 0; i < eventList.length; i++) {\n var evt = eventList[i];\n if (emptyString(evt)) {\n continue;\n }\n var match = evt.match(eventRegex); // type[.namespace]\n\n if (match) {\n var type = match[1];\n var namespace = match[2] ? match[2] : null;\n var eventObj = makeEventObj(self, {\n type: type,\n namespace: namespace,\n target: self.context\n });\n handler(self, eventObj);\n }\n }\n};\np.on = p.addListener = function (events, qualifier, callback, conf, confOverrides) {\n forEachEvent(this, function (self, event, type, namespace, qualifier, callback, conf) {\n if (fn$6(callback)) {\n self.listeners.push({\n event: event,\n // full event string\n callback: callback,\n // callback to run\n type: type,\n // the event type (e.g. 'click')\n namespace: namespace,\n // the event namespace (e.g. \".foo\")\n qualifier: qualifier,\n // a restriction on whether to match this emitter\n conf: conf // additional configuration\n });\n }\n }, events, qualifier, callback, conf, confOverrides);\n return this;\n};\np.one = function (events, qualifier, callback, conf) {\n return this.on(events, qualifier, callback, conf, {\n one: true\n });\n};\np.removeListener = p.off = function (events, qualifier, callback, conf) {\n var _this = this;\n if (this.emitting !== 0) {\n this.listeners = copyArray(this.listeners);\n }\n var listeners = this.listeners;\n var _loop = function _loop(i) {\n var listener = listeners[i];\n forEachEvent(_this, function (self, event, type, namespace, qualifier, callback /*, conf*/) {\n if ((listener.type === type || events === '*') && (!namespace && listener.namespace !== '.*' || listener.namespace === namespace) && (!qualifier || self.qualifierCompare(listener.qualifier, qualifier)) && (!callback || listener.callback === callback)) {\n listeners.splice(i, 1);\n return false;\n }\n }, events, qualifier, callback, conf);\n };\n for (var i = listeners.length - 1; i >= 0; i--) {\n _loop(i);\n }\n return this;\n};\np.removeAllListeners = function () {\n return this.removeListener('*');\n};\np.emit = p.trigger = function (events, extraParams, manualCallback) {\n var listeners = this.listeners;\n var numListenersBeforeEmit = listeners.length;\n this.emitting++;\n if (!array(extraParams)) {\n extraParams = [extraParams];\n }\n forEachEventObj(this, function (self, eventObj) {\n if (manualCallback != null) {\n listeners = [{\n event: eventObj.event,\n type: eventObj.type,\n namespace: eventObj.namespace,\n callback: manualCallback\n }];\n numListenersBeforeEmit = listeners.length;\n }\n var _loop2 = function _loop2() {\n var listener = listeners[i];\n if (listener.type === eventObj.type && (!listener.namespace || listener.namespace === eventObj.namespace || listener.namespace === universalNamespace) && self.eventMatches(self.context, listener, eventObj)) {\n var args = [eventObj];\n if (extraParams != null) {\n push(args, extraParams);\n }\n self.beforeEmit(self.context, listener, eventObj);\n if (listener.conf && listener.conf.one) {\n self.listeners = self.listeners.filter(function (l) {\n return l !== listener;\n });\n }\n var context = self.callbackContext(self.context, listener, eventObj);\n var ret = listener.callback.apply(context, args);\n self.afterEmit(self.context, listener, eventObj);\n if (ret === false) {\n eventObj.stopPropagation();\n eventObj.preventDefault();\n }\n } // if listener matches\n };\n for (var i = 0; i < numListenersBeforeEmit; i++) {\n _loop2();\n } // for listener\n\n if (self.bubble(self.context) && !eventObj.isPropagationStopped()) {\n self.parent(self.context).emit(eventObj, extraParams);\n }\n }, events);\n this.emitting--;\n return this;\n};\n\nvar emitterOptions$1 = {\n qualifierCompare: function qualifierCompare(selector1, selector2) {\n if (selector1 == null || selector2 == null) {\n return selector1 == null && selector2 == null;\n } else {\n return selector1.sameText(selector2);\n }\n },\n eventMatches: function eventMatches(ele, listener, eventObj) {\n var selector = listener.qualifier;\n if (selector != null) {\n return ele !== eventObj.target && element(eventObj.target) && selector.matches(eventObj.target);\n }\n return true;\n },\n addEventFields: function addEventFields(ele, evt) {\n evt.cy = ele.cy();\n evt.target = ele;\n },\n callbackContext: function callbackContext(ele, listener, eventObj) {\n return listener.qualifier != null ? eventObj.target : ele;\n },\n beforeEmit: function beforeEmit(context, listener /*, eventObj*/) {\n if (listener.conf && listener.conf.once) {\n listener.conf.onceCollection.removeListener(listener.event, listener.qualifier, listener.callback);\n }\n },\n bubble: function bubble() {\n return true;\n },\n parent: function parent(ele) {\n return ele.isChild() ? ele.parent() : ele.cy();\n }\n};\nvar argSelector$1 = function argSelector(arg) {\n if (string(arg)) {\n return new Selector(arg);\n } else {\n return arg;\n }\n};\nvar elesfn$9 = {\n createEmitter: function createEmitter() {\n for (var i = 0; i < this.length; i++) {\n var ele = this[i];\n var _p = ele._private;\n if (!_p.emitter) {\n _p.emitter = new Emitter(emitterOptions$1, ele);\n }\n }\n return this;\n },\n emitter: function emitter() {\n return this._private.emitter;\n },\n on: function on(events, selector, callback) {\n var argSel = argSelector$1(selector);\n for (var i = 0; i < this.length; i++) {\n var ele = this[i];\n ele.emitter().on(events, argSel, callback);\n }\n return this;\n },\n removeListener: function removeListener(events, selector, callback) {\n var argSel = argSelector$1(selector);\n for (var i = 0; i < this.length; i++) {\n var ele = this[i];\n ele.emitter().removeListener(events, argSel, callback);\n }\n return this;\n },\n removeAllListeners: function removeAllListeners() {\n for (var i = 0; i < this.length; i++) {\n var ele = this[i];\n ele.emitter().removeAllListeners();\n }\n return this;\n },\n one: function one(events, selector, callback) {\n var argSel = argSelector$1(selector);\n for (var i = 0; i < this.length; i++) {\n var ele = this[i];\n ele.emitter().one(events, argSel, callback);\n }\n return this;\n },\n once: function once(events, selector, callback) {\n var argSel = argSelector$1(selector);\n for (var i = 0; i < this.length; i++) {\n var ele = this[i];\n ele.emitter().on(events, argSel, callback, {\n once: true,\n onceCollection: this\n });\n }\n },\n emit: function emit(events, extraParams) {\n for (var i = 0; i < this.length; i++) {\n var ele = this[i];\n ele.emitter().emit(events, extraParams);\n }\n return this;\n },\n emitAndNotify: function emitAndNotify(event, extraParams) {\n // for internal use only\n if (this.length === 0) {\n return;\n } // empty collections don't need to notify anything\n\n // notify renderer\n this.cy().notify(event, this);\n this.emit(event, extraParams);\n return this;\n }\n};\ndefine.eventAliasesOn(elesfn$9);\n\nvar elesfn$8 = {\n nodes: function nodes(selector) {\n return this.filter(function (ele) {\n return ele.isNode();\n }).filter(selector);\n },\n edges: function edges(selector) {\n return this.filter(function (ele) {\n return ele.isEdge();\n }).filter(selector);\n },\n // internal helper to get nodes and edges as separate collections with single iteration over elements\n byGroup: function byGroup() {\n var nodes = this.spawn();\n var edges = this.spawn();\n for (var i = 0; i < this.length; i++) {\n var ele = this[i];\n if (ele.isNode()) {\n nodes.push(ele);\n } else {\n edges.push(ele);\n }\n }\n return {\n nodes: nodes,\n edges: edges\n };\n },\n filter: function filter(_filter, thisArg) {\n if (_filter === undefined) {\n // check this first b/c it's the most common/performant case\n return this;\n } else if (string(_filter) || elementOrCollection(_filter)) {\n return new Selector(_filter).filter(this);\n } else if (fn$6(_filter)) {\n var filterEles = this.spawn();\n var eles = this;\n for (var i = 0; i < eles.length; i++) {\n var ele = eles[i];\n var include = thisArg ? _filter.apply(thisArg, [ele, i, eles]) : _filter(ele, i, eles);\n if (include) {\n filterEles.push(ele);\n }\n }\n return filterEles;\n }\n return this.spawn(); // if not handled by above, give 'em an empty collection\n },\n not: function not(toRemove) {\n if (!toRemove) {\n return this;\n } else {\n if (string(toRemove)) {\n toRemove = this.filter(toRemove);\n }\n var elements = this.spawn();\n for (var i = 0; i < this.length; i++) {\n var element = this[i];\n var remove = toRemove.has(element);\n if (!remove) {\n elements.push(element);\n }\n }\n return elements;\n }\n },\n absoluteComplement: function absoluteComplement() {\n var cy = this.cy();\n return cy.mutableElements().not(this);\n },\n intersect: function intersect(other) {\n // if a selector is specified, then filter by it instead\n if (string(other)) {\n var selector = other;\n return this.filter(selector);\n }\n var elements = this.spawn();\n var col1 = this;\n var col2 = other;\n var col1Smaller = this.length < other.length;\n var colS = col1Smaller ? col1 : col2;\n var colL = col1Smaller ? col2 : col1;\n for (var i = 0; i < colS.length; i++) {\n var ele = colS[i];\n if (colL.has(ele)) {\n elements.push(ele);\n }\n }\n return elements;\n },\n xor: function xor(other) {\n var cy = this._private.cy;\n if (string(other)) {\n other = cy.$(other);\n }\n var elements = this.spawn();\n var col1 = this;\n var col2 = other;\n var add = function add(col, other) {\n for (var i = 0; i < col.length; i++) {\n var ele = col[i];\n var id = ele._private.data.id;\n var inOther = other.hasElementWithId(id);\n if (!inOther) {\n elements.push(ele);\n }\n }\n };\n add(col1, col2);\n add(col2, col1);\n return elements;\n },\n diff: function diff(other) {\n var cy = this._private.cy;\n if (string(other)) {\n other = cy.$(other);\n }\n var left = this.spawn();\n var right = this.spawn();\n var both = this.spawn();\n var col1 = this;\n var col2 = other;\n var add = function add(col, other, retEles) {\n for (var i = 0; i < col.length; i++) {\n var ele = col[i];\n var id = ele._private.data.id;\n var inOther = other.hasElementWithId(id);\n if (inOther) {\n both.merge(ele);\n } else {\n retEles.push(ele);\n }\n }\n };\n add(col1, col2, left);\n add(col2, col1, right);\n return {\n left: left,\n right: right,\n both: both\n };\n },\n add: function add(toAdd) {\n var cy = this._private.cy;\n if (!toAdd) {\n return this;\n }\n if (string(toAdd)) {\n var selector = toAdd;\n toAdd = cy.mutableElements().filter(selector);\n }\n var elements = this.spawnSelf();\n for (var i = 0; i < toAdd.length; i++) {\n var ele = toAdd[i];\n var add = !this.has(ele);\n if (add) {\n elements.push(ele);\n }\n }\n return elements;\n },\n // in place merge on calling collection\n merge: function merge(toAdd) {\n var _p = this._private;\n var cy = _p.cy;\n if (!toAdd) {\n return this;\n }\n if (toAdd && string(toAdd)) {\n var selector = toAdd;\n toAdd = cy.mutableElements().filter(selector);\n }\n var map = _p.map;\n for (var i = 0; i < toAdd.length; i++) {\n var toAddEle = toAdd[i];\n var id = toAddEle._private.data.id;\n var add = !map.has(id);\n if (add) {\n var index = this.length++;\n this[index] = toAddEle;\n map.set(id, {\n ele: toAddEle,\n index: index\n });\n }\n }\n return this; // chaining\n },\n unmergeAt: function unmergeAt(i) {\n var ele = this[i];\n var id = ele.id();\n var _p = this._private;\n var map = _p.map;\n\n // remove ele\n this[i] = undefined;\n map[\"delete\"](id);\n var unmergedLastEle = i === this.length - 1;\n\n // replace empty spot with last ele in collection\n if (this.length > 1 && !unmergedLastEle) {\n var lastEleI = this.length - 1;\n var lastEle = this[lastEleI];\n var lastEleId = lastEle._private.data.id;\n this[lastEleI] = undefined;\n this[i] = lastEle;\n map.set(lastEleId, {\n ele: lastEle,\n index: i\n });\n }\n\n // the collection is now 1 ele smaller\n this.length--;\n return this;\n },\n // remove single ele in place in calling collection\n unmergeOne: function unmergeOne(ele) {\n ele = ele[0];\n var _p = this._private;\n var id = ele._private.data.id;\n var map = _p.map;\n var entry = map.get(id);\n if (!entry) {\n return this; // no need to remove\n }\n var i = entry.index;\n this.unmergeAt(i);\n return this;\n },\n // remove eles in place on calling collection\n unmerge: function unmerge(toRemove) {\n var cy = this._private.cy;\n if (!toRemove) {\n return this;\n }\n if (toRemove && string(toRemove)) {\n var selector = toRemove;\n toRemove = cy.mutableElements().filter(selector);\n }\n for (var i = 0; i < toRemove.length; i++) {\n this.unmergeOne(toRemove[i]);\n }\n return this; // chaining\n },\n unmergeBy: function unmergeBy(toRmFn) {\n for (var i = this.length - 1; i >= 0; i--) {\n var ele = this[i];\n if (toRmFn(ele)) {\n this.unmergeAt(i);\n }\n }\n return this;\n },\n map: function map(mapFn, thisArg) {\n var arr = [];\n var eles = this;\n for (var i = 0; i < eles.length; i++) {\n var ele = eles[i];\n var ret = thisArg ? mapFn.apply(thisArg, [ele, i, eles]) : mapFn(ele, i, eles);\n arr.push(ret);\n }\n return arr;\n },\n reduce: function reduce(fn, initialValue) {\n var val = initialValue;\n var eles = this;\n for (var i = 0; i < eles.length; i++) {\n val = fn(val, eles[i], i, eles);\n }\n return val;\n },\n max: function max(valFn, thisArg) {\n var max = -Infinity;\n var maxEle;\n var eles = this;\n for (var i = 0; i < eles.length; i++) {\n var ele = eles[i];\n var val = thisArg ? valFn.apply(thisArg, [ele, i, eles]) : valFn(ele, i, eles);\n if (val > max) {\n max = val;\n maxEle = ele;\n }\n }\n return {\n value: max,\n ele: maxEle\n };\n },\n min: function min(valFn, thisArg) {\n var min = Infinity;\n var minEle;\n var eles = this;\n for (var i = 0; i < eles.length; i++) {\n var ele = eles[i];\n var val = thisArg ? valFn.apply(thisArg, [ele, i, eles]) : valFn(ele, i, eles);\n if (val < min) {\n min = val;\n minEle = ele;\n }\n }\n return {\n value: min,\n ele: minEle\n };\n }\n};\n\n// aliases\nvar fn$1 = elesfn$8;\nfn$1['u'] = fn$1['|'] = fn$1['+'] = fn$1.union = fn$1.or = fn$1.add;\nfn$1['\\\\'] = fn$1['!'] = fn$1['-'] = fn$1.difference = fn$1.relativeComplement = fn$1.subtract = fn$1.not;\nfn$1['n'] = fn$1['&'] = fn$1['.'] = fn$1.and = fn$1.intersection = fn$1.intersect;\nfn$1['^'] = fn$1['(+)'] = fn$1['(-)'] = fn$1.symmetricDifference = fn$1.symdiff = fn$1.xor;\nfn$1.fnFilter = fn$1.filterFn = fn$1.stdFilter = fn$1.filter;\nfn$1.complement = fn$1.abscomp = fn$1.absoluteComplement;\n\nvar elesfn$7 = {\n isNode: function isNode() {\n return this.group() === 'nodes';\n },\n isEdge: function isEdge() {\n return this.group() === 'edges';\n },\n isLoop: function isLoop() {\n return this.isEdge() && this.source()[0] === this.target()[0];\n },\n isSimple: function isSimple() {\n return this.isEdge() && this.source()[0] !== this.target()[0];\n },\n group: function group() {\n var ele = this[0];\n if (ele) {\n return ele._private.group;\n }\n }\n};\n\n/**\n * Elements are drawn in a specific order based on compound depth (low to high), the element type (nodes above edges),\n * and z-index (low to high). These styles affect how this applies:\n *\n * z-compound-depth: May be `bottom | orphan | auto | top`. The first drawn is `bottom`, then `orphan` which is the\n * same depth as the root of the compound graph, followed by the default value `auto` which draws in order from\n * root to leaves of the compound graph. The last drawn is `top`.\n * z-index-compare: May be `auto | manual`. The default value is `auto` which always draws edges under nodes.\n * `manual` ignores this convention and draws based on the `z-index` value setting.\n * z-index: An integer value that affects the relative draw order of elements. In general, an element with a higher\n * `z-index` will be drawn on top of an element with a lower `z-index`.\n */\nvar zIndexSort = function zIndexSort(a, b) {\n var cy = a.cy();\n var hasCompoundNodes = cy.hasCompoundNodes();\n function getDepth(ele) {\n var style = ele.pstyle('z-compound-depth');\n if (style.value === 'auto') {\n return hasCompoundNodes ? ele.zDepth() : 0;\n } else if (style.value === 'bottom') {\n return -1;\n } else if (style.value === 'top') {\n return MAX_INT$1;\n }\n // 'orphan'\n return 0;\n }\n var depthDiff = getDepth(a) - getDepth(b);\n if (depthDiff !== 0) {\n return depthDiff;\n }\n function getEleDepth(ele) {\n var style = ele.pstyle('z-index-compare');\n if (style.value === 'auto') {\n return ele.isNode() ? 1 : 0;\n }\n // 'manual'\n return 0;\n }\n var eleDiff = getEleDepth(a) - getEleDepth(b);\n if (eleDiff !== 0) {\n return eleDiff;\n }\n var zDiff = a.pstyle('z-index').value - b.pstyle('z-index').value;\n if (zDiff !== 0) {\n return zDiff;\n }\n // compare indices in the core (order added to graph w/ last on top)\n return a.poolIndex() - b.poolIndex();\n};\n\nvar elesfn$6 = {\n forEach: function forEach(fn, thisArg) {\n if (fn$6(fn)) {\n var N = this.length;\n for (var i = 0; i < N; i++) {\n var ele = this[i];\n var ret = thisArg ? fn.apply(thisArg, [ele, i, this]) : fn(ele, i, this);\n if (ret === false) {\n break;\n } // exit each early on return false\n }\n }\n return this;\n },\n toArray: function toArray() {\n var array = [];\n for (var i = 0; i < this.length; i++) {\n array.push(this[i]);\n }\n return array;\n },\n slice: function slice(start, end) {\n var array = [];\n var thisSize = this.length;\n if (end == null) {\n end = thisSize;\n }\n if (start == null) {\n start = 0;\n }\n if (start < 0) {\n start = thisSize + start;\n }\n if (end < 0) {\n end = thisSize + end;\n }\n for (var i = start; i >= 0 && i < end && i < thisSize; i++) {\n array.push(this[i]);\n }\n return this.spawn(array);\n },\n size: function size() {\n return this.length;\n },\n eq: function eq(i) {\n return this[i] || this.spawn();\n },\n first: function first() {\n return this[0] || this.spawn();\n },\n last: function last() {\n return this[this.length - 1] || this.spawn();\n },\n empty: function empty() {\n return this.length === 0;\n },\n nonempty: function nonempty() {\n return !this.empty();\n },\n sort: function sort(sortFn) {\n if (!fn$6(sortFn)) {\n return this;\n }\n var sorted = this.toArray().sort(sortFn);\n return this.spawn(sorted);\n },\n sortByZIndex: function sortByZIndex() {\n return this.sort(zIndexSort);\n },\n zDepth: function zDepth() {\n var ele = this[0];\n if (!ele) {\n return undefined;\n }\n\n // let cy = ele.cy();\n var _p = ele._private;\n var group = _p.group;\n if (group === 'nodes') {\n var depth = _p.data.parent ? ele.parents().size() : 0;\n if (!ele.isParent()) {\n return MAX_INT$1 - 1; // childless nodes always on top\n }\n return depth;\n } else {\n var src = _p.source;\n var tgt = _p.target;\n var srcDepth = src.zDepth();\n var tgtDepth = tgt.zDepth();\n return Math.max(srcDepth, tgtDepth, 0); // depth of deepest parent\n }\n }\n};\nelesfn$6.each = elesfn$6.forEach;\nvar defineSymbolIterator = function defineSymbolIterator() {\n var typeofUndef = \"undefined\" ;\n var isIteratorSupported = (typeof Symbol === \"undefined\" ? \"undefined\" : _typeof(Symbol)) != typeofUndef && _typeof(Symbol.iterator) != typeofUndef;\n if (isIteratorSupported) {\n elesfn$6[Symbol.iterator] = function () {\n var _this = this;\n var entry = {\n value: undefined,\n done: false\n };\n var i = 0;\n var length = this.length;\n return _defineProperty$1({\n next: function next() {\n if (i < length) {\n entry.value = _this[i++];\n } else {\n entry.value = undefined;\n entry.done = true;\n }\n return entry;\n }\n }, Symbol.iterator, function () {\n return this;\n });\n };\n }\n};\ndefineSymbolIterator();\n\nvar getLayoutDimensionOptions = defaults$g({\n nodeDimensionsIncludeLabels: false\n});\nvar elesfn$5 = {\n // Calculates and returns node dimensions { x, y } based on options given\n layoutDimensions: function layoutDimensions(options) {\n options = getLayoutDimensionOptions(options);\n var dims;\n if (!this.takesUpSpace()) {\n dims = {\n w: 0,\n h: 0\n };\n } else if (options.nodeDimensionsIncludeLabels) {\n var bbDim = this.boundingBox();\n dims = {\n w: bbDim.w,\n h: bbDim.h\n };\n } else {\n dims = {\n w: this.outerWidth(),\n h: this.outerHeight()\n };\n }\n\n // sanitise the dimensions for external layouts (avoid division by zero)\n if (dims.w === 0 || dims.h === 0) {\n dims.w = dims.h = 1;\n }\n return dims;\n },\n // using standard layout options, apply position function (w/ or w/o animation)\n layoutPositions: function layoutPositions(layout, options, fn) {\n var nodes = this.nodes().filter(function (n) {\n return !n.isParent();\n });\n var cy = this.cy();\n var layoutEles = options.eles; // nodes & edges\n var getMemoizeKey = function getMemoizeKey(node) {\n return node.id();\n };\n var fnMem = memoize(fn, getMemoizeKey); // memoized version of position function\n\n layout.emit({\n type: 'layoutstart',\n layout: layout\n });\n layout.animations = [];\n var calculateSpacing = function calculateSpacing(spacing, nodesBb, pos) {\n var center = {\n x: nodesBb.x1 + nodesBb.w / 2,\n y: nodesBb.y1 + nodesBb.h / 2\n };\n var spacingVector = {\n // scale from center of bounding box (not necessarily 0,0)\n x: (pos.x - center.x) * spacing,\n y: (pos.y - center.y) * spacing\n };\n return {\n x: center.x + spacingVector.x,\n y: center.y + spacingVector.y\n };\n };\n var useSpacingFactor = options.spacingFactor && options.spacingFactor !== 1;\n var spacingBb = function spacingBb() {\n if (!useSpacingFactor) {\n return null;\n }\n var bb = makeBoundingBox();\n for (var i = 0; i < nodes.length; i++) {\n var node = nodes[i];\n var pos = fnMem(node, i);\n expandBoundingBoxByPoint(bb, pos.x, pos.y);\n }\n return bb;\n };\n var bb = spacingBb();\n var getFinalPos = memoize(function (node, i) {\n var newPos = fnMem(node, i);\n if (useSpacingFactor) {\n var spacing = Math.abs(options.spacingFactor);\n newPos = calculateSpacing(spacing, bb, newPos);\n }\n if (options.transform != null) {\n newPos = options.transform(node, newPos);\n }\n return newPos;\n }, getMemoizeKey);\n if (options.animate) {\n for (var i = 0; i < nodes.length; i++) {\n var node = nodes[i];\n var newPos = getFinalPos(node, i);\n var animateNode = options.animateFilter == null || options.animateFilter(node, i);\n if (animateNode) {\n var ani = node.animation({\n position: newPos,\n duration: options.animationDuration,\n easing: options.animationEasing\n });\n layout.animations.push(ani);\n } else {\n node.position(newPos);\n }\n }\n if (options.fit) {\n var fitAni = cy.animation({\n fit: {\n boundingBox: layoutEles.boundingBoxAt(getFinalPos),\n padding: options.padding\n },\n duration: options.animationDuration,\n easing: options.animationEasing\n });\n layout.animations.push(fitAni);\n } else if (options.zoom !== undefined && options.pan !== undefined) {\n var zoomPanAni = cy.animation({\n zoom: options.zoom,\n pan: options.pan,\n duration: options.animationDuration,\n easing: options.animationEasing\n });\n layout.animations.push(zoomPanAni);\n }\n layout.animations.forEach(function (ani) {\n return ani.play();\n });\n layout.one('layoutready', options.ready);\n layout.emit({\n type: 'layoutready',\n layout: layout\n });\n Promise$1.all(layout.animations.map(function (ani) {\n return ani.promise();\n })).then(function () {\n layout.one('layoutstop', options.stop);\n layout.emit({\n type: 'layoutstop',\n layout: layout\n });\n });\n } else {\n nodes.positions(getFinalPos);\n if (options.fit) {\n cy.fit(options.eles, options.padding);\n }\n if (options.zoom != null) {\n cy.zoom(options.zoom);\n }\n if (options.pan) {\n cy.pan(options.pan);\n }\n layout.one('layoutready', options.ready);\n layout.emit({\n type: 'layoutready',\n layout: layout\n });\n layout.one('layoutstop', options.stop);\n layout.emit({\n type: 'layoutstop',\n layout: layout\n });\n }\n return this; // chaining\n },\n layout: function layout(options) {\n var cy = this.cy();\n return cy.makeLayout(extend({}, options, {\n eles: this\n }));\n }\n};\n\n// aliases:\nelesfn$5.createLayout = elesfn$5.makeLayout = elesfn$5.layout;\n\nfunction styleCache(key, fn, ele) {\n var _p = ele._private;\n var cache = _p.styleCache = _p.styleCache || [];\n var val;\n if ((val = cache[key]) != null) {\n return val;\n } else {\n val = cache[key] = fn(ele);\n return val;\n }\n}\nfunction cacheStyleFunction(key, fn) {\n key = hashString(key);\n return function cachedStyleFunction(ele) {\n return styleCache(key, fn, ele);\n };\n}\nfunction cachePrototypeStyleFunction(key, fn) {\n key = hashString(key);\n var selfFn = function selfFn(ele) {\n return fn.call(ele);\n };\n return function cachedPrototypeStyleFunction() {\n var ele = this[0];\n if (ele) {\n return styleCache(key, selfFn, ele);\n }\n };\n}\nvar elesfn$4 = {\n recalculateRenderedStyle: function recalculateRenderedStyle(useCache) {\n var cy = this.cy();\n var renderer = cy.renderer();\n var styleEnabled = cy.styleEnabled();\n if (renderer && styleEnabled) {\n renderer.recalculateRenderedStyle(this, useCache);\n }\n return this;\n },\n dirtyStyleCache: function dirtyStyleCache() {\n var cy = this.cy();\n var dirty = function dirty(ele) {\n return ele._private.styleCache = null;\n };\n if (cy.hasCompoundNodes()) {\n var eles;\n eles = this.spawnSelf().merge(this.descendants()).merge(this.parents());\n eles.merge(eles.connectedEdges());\n eles.forEach(dirty);\n } else {\n this.forEach(function (ele) {\n dirty(ele);\n ele.connectedEdges().forEach(dirty);\n });\n }\n return this;\n },\n // fully updates (recalculates) the style for the elements\n updateStyle: function updateStyle(notifyRenderer) {\n var cy = this._private.cy;\n if (!cy.styleEnabled()) {\n return this;\n }\n if (cy.batching()) {\n var bEles = cy._private.batchStyleEles;\n bEles.merge(this);\n return this; // chaining and exit early when batching\n }\n var hasCompounds = cy.hasCompoundNodes();\n var updatedEles = this;\n notifyRenderer = notifyRenderer || notifyRenderer === undefined ? true : false;\n if (hasCompounds) {\n // then add everything up and down for compound selector checks\n updatedEles = this.spawnSelf().merge(this.descendants()).merge(this.parents());\n }\n\n // let changedEles = style.apply( updatedEles );\n var changedEles = updatedEles;\n if (notifyRenderer) {\n changedEles.emitAndNotify('style'); // let renderer know we changed style\n } else {\n changedEles.emit('style'); // just fire the event\n }\n updatedEles.forEach(function (ele) {\n return ele._private.styleDirty = true;\n });\n return this; // chaining\n },\n // private: clears dirty flag and recalculates style\n cleanStyle: function cleanStyle() {\n var cy = this.cy();\n if (!cy.styleEnabled()) {\n return;\n }\n for (var i = 0; i < this.length; i++) {\n var ele = this[i];\n if (ele._private.styleDirty) {\n // n.b. this flag should be set before apply() to avoid potential infinite recursion\n ele._private.styleDirty = false;\n cy.style().apply(ele);\n }\n }\n },\n // get the internal parsed style object for the specified property\n parsedStyle: function parsedStyle(property) {\n var includeNonDefault = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true;\n var ele = this[0];\n var cy = ele.cy();\n if (!cy.styleEnabled()) {\n return;\n }\n if (ele) {\n // this.cleanStyle();\n\n // Inline the important part of cleanStyle(), for raw performance\n if (ele._private.styleDirty) {\n // n.b. this flag should be set before apply() to avoid potential infinite recursion\n ele._private.styleDirty = false;\n cy.style().apply(ele);\n }\n var overriddenStyle = ele._private.style[property];\n if (overriddenStyle != null) {\n return overriddenStyle;\n } else if (includeNonDefault) {\n return cy.style().getDefaultProperty(property);\n } else {\n return null;\n }\n }\n },\n numericStyle: function numericStyle(property) {\n var ele = this[0];\n if (!ele.cy().styleEnabled()) {\n return;\n }\n if (ele) {\n var pstyle = ele.pstyle(property);\n return pstyle.pfValue !== undefined ? pstyle.pfValue : pstyle.value;\n }\n },\n numericStyleUnits: function numericStyleUnits(property) {\n var ele = this[0];\n if (!ele.cy().styleEnabled()) {\n return;\n }\n if (ele) {\n return ele.pstyle(property).units;\n }\n },\n // get the specified css property as a rendered value (i.e. on-screen value)\n // or get the whole rendered style if no property specified (NB doesn't allow setting)\n renderedStyle: function renderedStyle(property) {\n var cy = this.cy();\n if (!cy.styleEnabled()) {\n return this;\n }\n var ele = this[0];\n if (ele) {\n return cy.style().getRenderedStyle(ele, property);\n }\n },\n // read the calculated css style of the element or override the style (via a bypass)\n style: function style(name, value) {\n var cy = this.cy();\n if (!cy.styleEnabled()) {\n return this;\n }\n var updateTransitions = false;\n var style = cy.style();\n if (plainObject(name)) {\n // then extend the bypass\n var props = name;\n style.applyBypass(this, props, updateTransitions);\n this.emitAndNotify('style'); // let the renderer know we've updated style\n } else if (string(name)) {\n if (value === undefined) {\n // then get the property from the style\n var ele = this[0];\n if (ele) {\n return style.getStylePropertyValue(ele, name);\n } else {\n // empty collection => can't get any value\n return;\n }\n } else {\n // then set the bypass with the property value\n style.applyBypass(this, name, value, updateTransitions);\n this.emitAndNotify('style'); // let the renderer know we've updated style\n }\n } else if (name === undefined) {\n var _ele = this[0];\n if (_ele) {\n return style.getRawStyle(_ele);\n } else {\n // empty collection => can't get any value\n return;\n }\n }\n return this; // chaining\n },\n removeStyle: function removeStyle(names) {\n var cy = this.cy();\n if (!cy.styleEnabled()) {\n return this;\n }\n var updateTransitions = false;\n var style = cy.style();\n var eles = this;\n if (names === undefined) {\n for (var i = 0; i < eles.length; i++) {\n var ele = eles[i];\n style.removeAllBypasses(ele, updateTransitions);\n }\n } else {\n names = names.split(/\\s+/);\n for (var _i = 0; _i < eles.length; _i++) {\n var _ele2 = eles[_i];\n style.removeBypasses(_ele2, names, updateTransitions);\n }\n }\n this.emitAndNotify('style'); // let the renderer know we've updated style\n\n return this; // chaining\n },\n show: function show() {\n this.css('display', 'element');\n return this; // chaining\n },\n hide: function hide() {\n this.css('display', 'none');\n return this; // chaining\n },\n effectiveOpacity: function effectiveOpacity() {\n var cy = this.cy();\n if (!cy.styleEnabled()) {\n return 1;\n }\n var hasCompoundNodes = cy.hasCompoundNodes();\n var ele = this[0];\n if (ele) {\n var _p = ele._private;\n var parentOpacity = ele.pstyle('opacity').value;\n if (!hasCompoundNodes) {\n return parentOpacity;\n }\n var parents = !_p.data.parent ? null : ele.parents();\n if (parents) {\n for (var i = 0; i < parents.length; i++) {\n var parent = parents[i];\n var opacity = parent.pstyle('opacity').value;\n parentOpacity = opacity * parentOpacity;\n }\n }\n return parentOpacity;\n }\n },\n transparent: function transparent() {\n var cy = this.cy();\n if (!cy.styleEnabled()) {\n return false;\n }\n var ele = this[0];\n var hasCompoundNodes = ele.cy().hasCompoundNodes();\n if (ele) {\n if (!hasCompoundNodes) {\n return ele.pstyle('opacity').value === 0;\n } else {\n return ele.effectiveOpacity() === 0;\n }\n }\n },\n backgrounding: function backgrounding() {\n var cy = this.cy();\n if (!cy.styleEnabled()) {\n return false;\n }\n var ele = this[0];\n return ele._private.backgrounding ? true : false;\n }\n};\nfunction checkCompound(ele, parentOk) {\n var _p = ele._private;\n var parents = _p.data.parent ? ele.parents() : null;\n if (parents) {\n for (var i = 0; i < parents.length; i++) {\n var parent = parents[i];\n if (!parentOk(parent)) {\n return false;\n }\n }\n }\n return true;\n}\nfunction defineDerivedStateFunction(specs) {\n var ok = specs.ok;\n var edgeOkViaNode = specs.edgeOkViaNode || specs.ok;\n var parentOk = specs.parentOk || specs.ok;\n return function () {\n var cy = this.cy();\n if (!cy.styleEnabled()) {\n return true;\n }\n var ele = this[0];\n var hasCompoundNodes = cy.hasCompoundNodes();\n if (ele) {\n var _p = ele._private;\n if (!ok(ele)) {\n return false;\n }\n if (ele.isNode()) {\n return !hasCompoundNodes || checkCompound(ele, parentOk);\n } else {\n var src = _p.source;\n var tgt = _p.target;\n return edgeOkViaNode(src) && (!hasCompoundNodes || checkCompound(src, edgeOkViaNode)) && (src === tgt || edgeOkViaNode(tgt) && (!hasCompoundNodes || checkCompound(tgt, edgeOkViaNode)));\n }\n }\n };\n}\nvar eleTakesUpSpace = cacheStyleFunction('eleTakesUpSpace', function (ele) {\n return ele.pstyle('display').value === 'element' && ele.width() !== 0 && (ele.isNode() ? ele.height() !== 0 : true);\n});\nelesfn$4.takesUpSpace = cachePrototypeStyleFunction('takesUpSpace', defineDerivedStateFunction({\n ok: eleTakesUpSpace\n}));\nvar eleInteractive = cacheStyleFunction('eleInteractive', function (ele) {\n return ele.pstyle('events').value === 'yes' && ele.pstyle('visibility').value === 'visible' && eleTakesUpSpace(ele);\n});\nvar parentInteractive = cacheStyleFunction('parentInteractive', function (parent) {\n return parent.pstyle('visibility').value === 'visible' && eleTakesUpSpace(parent);\n});\nelesfn$4.interactive = cachePrototypeStyleFunction('interactive', defineDerivedStateFunction({\n ok: eleInteractive,\n parentOk: parentInteractive,\n edgeOkViaNode: eleTakesUpSpace\n}));\nelesfn$4.noninteractive = function () {\n var ele = this[0];\n if (ele) {\n return !ele.interactive();\n }\n};\nvar eleVisible = cacheStyleFunction('eleVisible', function (ele) {\n return ele.pstyle('visibility').value === 'visible' && ele.pstyle('opacity').pfValue !== 0 && eleTakesUpSpace(ele);\n});\nvar edgeVisibleViaNode = eleTakesUpSpace;\nelesfn$4.visible = cachePrototypeStyleFunction('visible', defineDerivedStateFunction({\n ok: eleVisible,\n edgeOkViaNode: edgeVisibleViaNode\n}));\nelesfn$4.hidden = function () {\n var ele = this[0];\n if (ele) {\n return !ele.visible();\n }\n};\nelesfn$4.isBundledBezier = cachePrototypeStyleFunction('isBundledBezier', function () {\n if (!this.cy().styleEnabled()) {\n return false;\n }\n return !this.removed() && this.pstyle('curve-style').value === 'bezier' && this.takesUpSpace();\n});\nelesfn$4.bypass = elesfn$4.css = elesfn$4.style;\nelesfn$4.renderedCss = elesfn$4.renderedStyle;\nelesfn$4.removeBypass = elesfn$4.removeCss = elesfn$4.removeStyle;\nelesfn$4.pstyle = elesfn$4.parsedStyle;\n\nvar elesfn$3 = {};\nfunction defineSwitchFunction(params) {\n return function () {\n var args = arguments;\n var changedEles = [];\n\n // e.g. cy.nodes().select( data, handler )\n if (args.length === 2) {\n var data = args[0];\n var handler = args[1];\n this.on(params.event, data, handler);\n }\n\n // e.g. cy.nodes().select( handler )\n else if (args.length === 1 && fn$6(args[0])) {\n var _handler = args[0];\n this.on(params.event, _handler);\n }\n\n // e.g. cy.nodes().select()\n // e.g. (private) cy.nodes().select(['tapselect'])\n else if (args.length === 0 || args.length === 1 && array(args[0])) {\n var addlEvents = args.length === 1 ? args[0] : null;\n for (var i = 0; i < this.length; i++) {\n var ele = this[i];\n var able = !params.ableField || ele._private[params.ableField];\n var changed = ele._private[params.field] != params.value;\n if (params.overrideAble) {\n var overrideAble = params.overrideAble(ele);\n if (overrideAble !== undefined) {\n able = overrideAble;\n if (!overrideAble) {\n return this;\n } // to save cycles assume not able for all on override\n }\n }\n if (able) {\n ele._private[params.field] = params.value;\n if (changed) {\n changedEles.push(ele);\n }\n }\n }\n var changedColl = this.spawn(changedEles);\n changedColl.updateStyle(); // change of state => possible change of style\n changedColl.emit(params.event);\n if (addlEvents) {\n changedColl.emit(addlEvents);\n }\n }\n return this;\n };\n}\nfunction defineSwitchSet(params) {\n elesfn$3[params.field] = function () {\n var ele = this[0];\n if (ele) {\n if (params.overrideField) {\n var val = params.overrideField(ele);\n if (val !== undefined) {\n return val;\n }\n }\n return ele._private[params.field];\n }\n };\n elesfn$3[params.on] = defineSwitchFunction({\n event: params.on,\n field: params.field,\n ableField: params.ableField,\n overrideAble: params.overrideAble,\n value: true\n });\n elesfn$3[params.off] = defineSwitchFunction({\n event: params.off,\n field: params.field,\n ableField: params.ableField,\n overrideAble: params.overrideAble,\n value: false\n });\n}\ndefineSwitchSet({\n field: 'locked',\n overrideField: function overrideField(ele) {\n return ele.cy().autolock() ? true : undefined;\n },\n on: 'lock',\n off: 'unlock'\n});\ndefineSwitchSet({\n field: 'grabbable',\n overrideField: function overrideField(ele) {\n return ele.cy().autoungrabify() || ele.pannable() ? false : undefined;\n },\n on: 'grabify',\n off: 'ungrabify'\n});\ndefineSwitchSet({\n field: 'selected',\n ableField: 'selectable',\n overrideAble: function overrideAble(ele) {\n return ele.cy().autounselectify() ? false : undefined;\n },\n on: 'select',\n off: 'unselect'\n});\ndefineSwitchSet({\n field: 'selectable',\n overrideField: function overrideField(ele) {\n return ele.cy().autounselectify() ? false : undefined;\n },\n on: 'selectify',\n off: 'unselectify'\n});\nelesfn$3.deselect = elesfn$3.unselect;\nelesfn$3.grabbed = function () {\n var ele = this[0];\n if (ele) {\n return ele._private.grabbed;\n }\n};\ndefineSwitchSet({\n field: 'active',\n on: 'activate',\n off: 'unactivate'\n});\ndefineSwitchSet({\n field: 'pannable',\n on: 'panify',\n off: 'unpanify'\n});\nelesfn$3.inactive = function () {\n var ele = this[0];\n if (ele) {\n return !ele._private.active;\n }\n};\n\nvar elesfn$2 = {};\n\n// DAG functions\n////////////////\n\nvar defineDagExtremity = function defineDagExtremity(params) {\n return function dagExtremityImpl(selector) {\n var eles = this;\n var ret = [];\n for (var i = 0; i < eles.length; i++) {\n var ele = eles[i];\n if (!ele.isNode()) {\n continue;\n }\n var disqualified = false;\n var edges = ele.connectedEdges();\n for (var j = 0; j < edges.length; j++) {\n var edge = edges[j];\n var src = edge.source();\n var tgt = edge.target();\n if (params.noIncomingEdges && tgt === ele && src !== ele || params.noOutgoingEdges && src === ele && tgt !== ele) {\n disqualified = true;\n break;\n }\n }\n if (!disqualified) {\n ret.push(ele);\n }\n }\n return this.spawn(ret, true).filter(selector);\n };\n};\nvar defineDagOneHop = function defineDagOneHop(params) {\n return function (selector) {\n var eles = this;\n var oEles = [];\n for (var i = 0; i < eles.length; i++) {\n var ele = eles[i];\n if (!ele.isNode()) {\n continue;\n }\n var edges = ele.connectedEdges();\n for (var j = 0; j < edges.length; j++) {\n var edge = edges[j];\n var src = edge.source();\n var tgt = edge.target();\n if (params.outgoing && src === ele) {\n oEles.push(edge);\n oEles.push(tgt);\n } else if (params.incoming && tgt === ele) {\n oEles.push(edge);\n oEles.push(src);\n }\n }\n }\n return this.spawn(oEles, true).filter(selector);\n };\n};\nvar defineDagAllHops = function defineDagAllHops(params) {\n return function (selector) {\n var eles = this;\n var sEles = [];\n var sElesIds = {};\n for (;;) {\n var next = params.outgoing ? eles.outgoers() : eles.incomers();\n if (next.length === 0) {\n break;\n } // done if none left\n\n var newNext = false;\n for (var i = 0; i < next.length; i++) {\n var n = next[i];\n var nid = n.id();\n if (!sElesIds[nid]) {\n sElesIds[nid] = true;\n sEles.push(n);\n newNext = true;\n }\n }\n if (!newNext) {\n break;\n } // done if touched all outgoers already\n\n eles = next;\n }\n return this.spawn(sEles, true).filter(selector);\n };\n};\nelesfn$2.clearTraversalCache = function () {\n for (var i = 0; i < this.length; i++) {\n this[i]._private.traversalCache = null;\n }\n};\nextend(elesfn$2, {\n // get the root nodes in the DAG\n roots: defineDagExtremity({\n noIncomingEdges: true\n }),\n // get the leaf nodes in the DAG\n leaves: defineDagExtremity({\n noOutgoingEdges: true\n }),\n // normally called children in graph theory\n // these nodes =edges=> outgoing nodes\n outgoers: cache(defineDagOneHop({\n outgoing: true\n }), 'outgoers'),\n // aka DAG descendants\n successors: defineDagAllHops({\n outgoing: true\n }),\n // normally called parents in graph theory\n // these nodes <=edges= incoming nodes\n incomers: cache(defineDagOneHop({\n incoming: true\n }), 'incomers'),\n // aka DAG ancestors\n predecessors: defineDagAllHops({\n })\n});\n\n// Neighbourhood functions\n//////////////////////////\n\nextend(elesfn$2, {\n neighborhood: cache(function (selector) {\n var elements = [];\n var nodes = this.nodes();\n for (var i = 0; i < nodes.length; i++) {\n // for all nodes\n var node = nodes[i];\n var connectedEdges = node.connectedEdges();\n\n // for each connected edge, add the edge and the other node\n for (var j = 0; j < connectedEdges.length; j++) {\n var edge = connectedEdges[j];\n var src = edge.source();\n var tgt = edge.target();\n var otherNode = node === src ? tgt : src;\n\n // need check in case of loop\n if (otherNode.length > 0) {\n elements.push(otherNode[0]); // add node 1 hop away\n }\n\n // add connected edge\n elements.push(edge[0]);\n }\n }\n return this.spawn(elements, true).filter(selector);\n }, 'neighborhood'),\n closedNeighborhood: function closedNeighborhood(selector) {\n return this.neighborhood().add(this).filter(selector);\n },\n openNeighborhood: function openNeighborhood(selector) {\n return this.neighborhood(selector);\n }\n});\n\n// aliases\nelesfn$2.neighbourhood = elesfn$2.neighborhood;\nelesfn$2.closedNeighbourhood = elesfn$2.closedNeighborhood;\nelesfn$2.openNeighbourhood = elesfn$2.openNeighborhood;\n\n// Edge functions\n/////////////////\n\nextend(elesfn$2, {\n source: cache(function sourceImpl(selector) {\n var ele = this[0];\n var src;\n if (ele) {\n src = ele._private.source || ele.cy().collection();\n }\n return src && selector ? src.filter(selector) : src;\n }, 'source'),\n target: cache(function targetImpl(selector) {\n var ele = this[0];\n var tgt;\n if (ele) {\n tgt = ele._private.target || ele.cy().collection();\n }\n return tgt && selector ? tgt.filter(selector) : tgt;\n }, 'target'),\n sources: defineSourceFunction({\n attr: 'source'\n }),\n targets: defineSourceFunction({\n attr: 'target'\n })\n});\nfunction defineSourceFunction(params) {\n return function sourceImpl(selector) {\n var sources = [];\n for (var i = 0; i < this.length; i++) {\n var ele = this[i];\n var src = ele._private[params.attr];\n if (src) {\n sources.push(src);\n }\n }\n return this.spawn(sources, true).filter(selector);\n };\n}\nextend(elesfn$2, {\n edgesWith: cache(defineEdgesWithFunction(), 'edgesWith'),\n edgesTo: cache(defineEdgesWithFunction({\n thisIsSrc: true\n }), 'edgesTo')\n});\nfunction defineEdgesWithFunction(params) {\n return function edgesWithImpl(otherNodes) {\n var elements = [];\n var cy = this._private.cy;\n var p = params || {};\n\n // get elements if a selector is specified\n if (string(otherNodes)) {\n otherNodes = cy.$(otherNodes);\n }\n for (var h = 0; h < otherNodes.length; h++) {\n var edges = otherNodes[h]._private.edges;\n for (var i = 0; i < edges.length; i++) {\n var edge = edges[i];\n var edgeData = edge._private.data;\n var thisToOther = this.hasElementWithId(edgeData.source) && otherNodes.hasElementWithId(edgeData.target);\n var otherToThis = otherNodes.hasElementWithId(edgeData.source) && this.hasElementWithId(edgeData.target);\n var edgeConnectsThisAndOther = thisToOther || otherToThis;\n if (!edgeConnectsThisAndOther) {\n continue;\n }\n if (p.thisIsSrc || p.thisIsTgt) {\n if (p.thisIsSrc && !thisToOther) {\n continue;\n }\n if (p.thisIsTgt && !otherToThis) {\n continue;\n }\n }\n elements.push(edge);\n }\n }\n return this.spawn(elements, true);\n };\n}\nextend(elesfn$2, {\n connectedEdges: cache(function (selector) {\n var retEles = [];\n var eles = this;\n for (var i = 0; i < eles.length; i++) {\n var node = eles[i];\n if (!node.isNode()) {\n continue;\n }\n var edges = node._private.edges;\n for (var j = 0; j < edges.length; j++) {\n var edge = edges[j];\n retEles.push(edge);\n }\n }\n return this.spawn(retEles, true).filter(selector);\n }, 'connectedEdges'),\n connectedNodes: cache(function (selector) {\n var retEles = [];\n var eles = this;\n for (var i = 0; i < eles.length; i++) {\n var edge = eles[i];\n if (!edge.isEdge()) {\n continue;\n }\n retEles.push(edge.source()[0]);\n retEles.push(edge.target()[0]);\n }\n return this.spawn(retEles, true).filter(selector);\n }, 'connectedNodes'),\n parallelEdges: cache(defineParallelEdgesFunction(), 'parallelEdges'),\n codirectedEdges: cache(defineParallelEdgesFunction({\n codirected: true\n }), 'codirectedEdges')\n});\nfunction defineParallelEdgesFunction(params) {\n var defaults = {\n codirected: false\n };\n params = extend({}, defaults, params);\n return function parallelEdgesImpl(selector) {\n // micro-optimised for renderer\n var elements = [];\n var edges = this.edges();\n var p = params;\n\n // look at all the edges in the collection\n for (var i = 0; i < edges.length; i++) {\n var edge1 = edges[i];\n var edge1_p = edge1._private;\n var src1 = edge1_p.source;\n var srcid1 = src1._private.data.id;\n var tgtid1 = edge1_p.data.target;\n var srcEdges1 = src1._private.edges;\n\n // look at edges connected to the src node of this edge\n for (var j = 0; j < srcEdges1.length; j++) {\n var edge2 = srcEdges1[j];\n var edge2data = edge2._private.data;\n var tgtid2 = edge2data.target;\n var srcid2 = edge2data.source;\n var codirected = tgtid2 === tgtid1 && srcid2 === srcid1;\n var oppdirected = srcid1 === tgtid2 && tgtid1 === srcid2;\n if (p.codirected && codirected || !p.codirected && (codirected || oppdirected)) {\n elements.push(edge2);\n }\n }\n }\n return this.spawn(elements, true).filter(selector);\n };\n}\n\n// Misc functions\n/////////////////\n\nextend(elesfn$2, {\n components: function components(root) {\n var self = this;\n var cy = self.cy();\n var visited = cy.collection();\n var unvisited = root == null ? self.nodes() : root.nodes();\n var components = [];\n if (root != null && unvisited.empty()) {\n // root may contain only edges\n unvisited = root.sources(); // doesn't matter which node to use (undirected), so just use the source sides\n }\n var visitInComponent = function visitInComponent(node, component) {\n visited.merge(node);\n unvisited.unmerge(node);\n component.merge(node);\n };\n if (unvisited.empty()) {\n return self.spawn();\n }\n var _loop = function _loop() {\n // each iteration yields a component\n var cmpt = cy.collection();\n components.push(cmpt);\n var root = unvisited[0];\n visitInComponent(root, cmpt);\n self.bfs({\n directed: false,\n roots: root,\n visit: function visit(v) {\n return visitInComponent(v, cmpt);\n }\n });\n cmpt.forEach(function (node) {\n node.connectedEdges().forEach(function (e) {\n // connectedEdges() usually cached\n if (self.has(e) && cmpt.has(e.source()) && cmpt.has(e.target())) {\n // has() is cheap\n cmpt.merge(e); // forEach() only considers nodes -- sets N at call time\n }\n });\n });\n };\n do {\n _loop();\n } while (unvisited.length > 0);\n return components;\n },\n component: function component() {\n var ele = this[0];\n return ele.cy().mutableElements().components(ele)[0];\n }\n});\nelesfn$2.componentsOf = elesfn$2.components;\n\n// represents a set of nodes, edges, or both together\nvar Collection = function Collection(cy, elements) {\n var unique = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;\n var removed = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : false;\n if (cy === undefined) {\n error('A collection must have a reference to the core');\n return;\n }\n var map = new Map$1();\n var createdElements = false;\n if (!elements) {\n elements = [];\n } else if (elements.length > 0 && plainObject(elements[0]) && !element(elements[0])) {\n createdElements = true;\n\n // make elements from json and restore all at once later\n var eles = [];\n var elesIds = new Set$1();\n for (var i = 0, l = elements.length; i < l; i++) {\n var json = elements[i];\n if (json.data == null) {\n json.data = {};\n }\n var _data = json.data;\n\n // make sure newly created elements have valid ids\n if (_data.id == null) {\n _data.id = uuid();\n } else if (cy.hasElementWithId(_data.id) || elesIds.has(_data.id)) {\n continue; // can't create element if prior id already exists\n }\n var ele = new Element(cy, json, false);\n eles.push(ele);\n elesIds.add(_data.id);\n }\n elements = eles;\n }\n this.length = 0;\n for (var _i = 0, _l = elements.length; _i < _l; _i++) {\n var element$1 = elements[_i][0]; // [0] in case elements is an array of collections, rather than array of elements\n if (element$1 == null) {\n continue;\n }\n var id = element$1._private.data.id;\n if (!unique || !map.has(id)) {\n if (unique) {\n map.set(id, {\n index: this.length,\n ele: element$1\n });\n }\n this[this.length] = element$1;\n this.length++;\n }\n }\n this._private = {\n eles: this,\n cy: cy,\n get map() {\n if (this.lazyMap == null) {\n this.rebuildMap();\n }\n return this.lazyMap;\n },\n set map(m) {\n this.lazyMap = m;\n },\n rebuildMap: function rebuildMap() {\n var m = this.lazyMap = new Map$1();\n var eles = this.eles;\n for (var _i2 = 0; _i2 < eles.length; _i2++) {\n var _ele = eles[_i2];\n m.set(_ele.id(), {\n index: _i2,\n ele: _ele\n });\n }\n }\n };\n if (unique) {\n this._private.map = map;\n }\n\n // restore the elements if we created them from json\n if (createdElements && !removed) {\n this.restore();\n }\n};\n\n// Functions\n////////////////////////////////////////////////////////////////////////////////////////////////////\n\n// keep the prototypes in sync (an element has the same functions as a collection)\n// and use elefn and elesfn as shorthands to the prototypes\nvar elesfn$1 = Element.prototype = Collection.prototype = Object.create(Array.prototype);\nelesfn$1.instanceString = function () {\n return 'collection';\n};\nelesfn$1.spawn = function (eles, unique) {\n return new Collection(this.cy(), eles, unique);\n};\nelesfn$1.spawnSelf = function () {\n return this.spawn(this);\n};\nelesfn$1.cy = function () {\n return this._private.cy;\n};\nelesfn$1.renderer = function () {\n return this._private.cy.renderer();\n};\nelesfn$1.element = function () {\n return this[0];\n};\nelesfn$1.collection = function () {\n if (collection(this)) {\n return this;\n } else {\n // an element\n return new Collection(this._private.cy, [this]);\n }\n};\nelesfn$1.unique = function () {\n return new Collection(this._private.cy, this, true);\n};\nelesfn$1.hasElementWithId = function (id) {\n id = '' + id; // id must be string\n\n return this._private.map.has(id);\n};\nelesfn$1.getElementById = function (id) {\n id = '' + id; // id must be string\n\n var cy = this._private.cy;\n var entry = this._private.map.get(id);\n return entry ? entry.ele : new Collection(cy); // get ele or empty collection\n};\nelesfn$1.$id = elesfn$1.getElementById;\nelesfn$1.poolIndex = function () {\n var cy = this._private.cy;\n var eles = cy._private.elements;\n var id = this[0]._private.data.id;\n return eles._private.map.get(id).index;\n};\nelesfn$1.indexOf = function (ele) {\n var id = ele[0]._private.data.id;\n return this._private.map.get(id).index;\n};\nelesfn$1.indexOfId = function (id) {\n id = '' + id; // id must be string\n\n return this._private.map.get(id).index;\n};\nelesfn$1.json = function (obj) {\n var ele = this.element();\n var cy = this.cy();\n if (ele == null && obj) {\n return this;\n } // can't set to no eles\n\n if (ele == null) {\n return undefined;\n } // can't get from no eles\n\n var p = ele._private;\n if (plainObject(obj)) {\n // set\n\n cy.startBatch();\n if (obj.data) {\n ele.data(obj.data);\n var _data2 = p.data;\n if (ele.isEdge()) {\n // source and target are immutable via data()\n var move = false;\n var spec = {};\n var src = obj.data.source;\n var tgt = obj.data.target;\n if (src != null && src != _data2.source) {\n spec.source = '' + src; // id must be string\n move = true;\n }\n if (tgt != null && tgt != _data2.target) {\n spec.target = '' + tgt; // id must be string\n move = true;\n }\n if (move) {\n ele = ele.move(spec);\n }\n } else {\n // parent is immutable via data()\n var newParentValSpecd = 'parent' in obj.data;\n var parent = obj.data.parent;\n if (newParentValSpecd && (parent != null || _data2.parent != null) && parent != _data2.parent) {\n if (parent === undefined) {\n // can't set undefined imperatively, so use null\n parent = null;\n }\n if (parent != null) {\n parent = '' + parent; // id must be string\n }\n ele = ele.move({\n parent: parent\n });\n }\n }\n }\n if (obj.position) {\n ele.position(obj.position);\n }\n\n // ignore group -- immutable\n\n var checkSwitch = function checkSwitch(k, trueFnName, falseFnName) {\n var obj_k = obj[k];\n if (obj_k != null && obj_k !== p[k]) {\n if (obj_k) {\n ele[trueFnName]();\n } else {\n ele[falseFnName]();\n }\n }\n };\n checkSwitch('removed', 'remove', 'restore');\n checkSwitch('selected', 'select', 'unselect');\n checkSwitch('selectable', 'selectify', 'unselectify');\n checkSwitch('locked', 'lock', 'unlock');\n checkSwitch('grabbable', 'grabify', 'ungrabify');\n checkSwitch('pannable', 'panify', 'unpanify');\n if (obj.classes != null) {\n ele.classes(obj.classes);\n }\n cy.endBatch();\n return this;\n } else if (obj === undefined) {\n // get\n\n var json = {\n data: copy(p.data),\n position: copy(p.position),\n group: p.group,\n removed: p.removed,\n selected: p.selected,\n selectable: p.selectable,\n locked: p.locked,\n grabbable: p.grabbable,\n pannable: p.pannable,\n classes: null\n };\n json.classes = '';\n var i = 0;\n p.classes.forEach(function (cls) {\n return json.classes += i++ === 0 ? cls : ' ' + cls;\n });\n return json;\n }\n};\nelesfn$1.jsons = function () {\n var jsons = [];\n for (var i = 0; i < this.length; i++) {\n var ele = this[i];\n var json = ele.json();\n jsons.push(json);\n }\n return jsons;\n};\nelesfn$1.clone = function () {\n var cy = this.cy();\n var elesArr = [];\n for (var i = 0; i < this.length; i++) {\n var ele = this[i];\n var json = ele.json();\n var clone = new Element(cy, json, false); // NB no restore\n\n elesArr.push(clone);\n }\n return new Collection(cy, elesArr);\n};\nelesfn$1.copy = elesfn$1.clone;\nelesfn$1.restore = function () {\n var notifyRenderer = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : true;\n var addToPool = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true;\n var self = this;\n var cy = self.cy();\n var cy_p = cy._private;\n\n // create arrays of nodes and edges, since we need to\n // restore the nodes first\n var nodes = [];\n var edges = [];\n var elements;\n for (var _i3 = 0, l = self.length; _i3 < l; _i3++) {\n var ele = self[_i3];\n if (addToPool && !ele.removed()) {\n // don't need to handle this ele\n continue;\n }\n\n // keep nodes first in the array and edges after\n if (ele.isNode()) {\n // put to front of array if node\n nodes.push(ele);\n } else {\n // put to end of array if edge\n edges.push(ele);\n }\n }\n elements = nodes.concat(edges);\n var i;\n var removeFromElements = function removeFromElements() {\n elements.splice(i, 1);\n i--;\n };\n\n // now, restore each element\n for (i = 0; i < elements.length; i++) {\n var _ele2 = elements[i];\n var _private = _ele2._private;\n var _data3 = _private.data;\n\n // the traversal cache should start fresh when ele is added\n _ele2.clearTraversalCache();\n\n // set id and validate\n if (!addToPool && !_private.removed) ; else if (_data3.id === undefined) {\n _data3.id = uuid();\n } else if (number$1(_data3.id)) {\n _data3.id = '' + _data3.id; // now it's a string\n } else if (emptyString(_data3.id) || !string(_data3.id)) {\n error('Can not create element with invalid string ID `' + _data3.id + '`');\n\n // can't create element if it has empty string as id or non-string id\n removeFromElements();\n continue;\n } else if (cy.hasElementWithId(_data3.id)) {\n error('Can not create second element with ID `' + _data3.id + '`');\n\n // can't create element if one already has that id\n removeFromElements();\n continue;\n }\n var id = _data3.id; // id is finalised, now let's keep a ref\n\n if (_ele2.isNode()) {\n // extra checks for nodes\n var pos = _private.position;\n\n // make sure the nodes have a defined position\n\n if (pos.x == null) {\n pos.x = 0;\n }\n if (pos.y == null) {\n pos.y = 0;\n }\n }\n if (_ele2.isEdge()) {\n // extra checks for edges\n\n var edge = _ele2;\n var fields = ['source', 'target'];\n var fieldsLength = fields.length;\n var badSourceOrTarget = false;\n for (var j = 0; j < fieldsLength; j++) {\n var field = fields[j];\n var val = _data3[field];\n if (number$1(val)) {\n val = _data3[field] = '' + _data3[field]; // now string\n }\n if (val == null || val === '') {\n // can't create if source or target is not defined properly\n error('Can not create edge `' + id + '` with unspecified ' + field);\n badSourceOrTarget = true;\n } else if (!cy.hasElementWithId(val)) {\n // can't create edge if one of its nodes doesn't exist\n error('Can not create edge `' + id + '` with nonexistant ' + field + ' `' + val + '`');\n badSourceOrTarget = true;\n }\n }\n if (badSourceOrTarget) {\n removeFromElements();\n continue;\n } // can't create this\n\n var src = cy.getElementById(_data3.source);\n var tgt = cy.getElementById(_data3.target);\n\n // only one edge in node if loop\n if (src.same(tgt)) {\n src._private.edges.push(edge);\n } else {\n src._private.edges.push(edge);\n tgt._private.edges.push(edge);\n }\n edge._private.source = src;\n edge._private.target = tgt;\n } // if is edge\n\n // create mock ids / indexes maps for element so it can be used like collections\n _private.map = new Map$1();\n _private.map.set(id, {\n ele: _ele2,\n index: 0\n });\n _private.removed = false;\n if (addToPool) {\n cy.addToPool(_ele2);\n }\n } // for each element\n\n // do compound node sanity checks\n for (var _i4 = 0; _i4 < nodes.length; _i4++) {\n // each node\n var node = nodes[_i4];\n var _data4 = node._private.data;\n if (number$1(_data4.parent)) {\n // then automake string\n _data4.parent = '' + _data4.parent;\n }\n var parentId = _data4.parent;\n var specifiedParent = parentId != null;\n if (specifiedParent || node._private.parent) {\n var parent = node._private.parent ? cy.collection().merge(node._private.parent) : cy.getElementById(parentId);\n if (parent.empty()) {\n // non-existant parent; just remove it\n _data4.parent = undefined;\n } else if (parent[0].removed()) {\n warn('Node added with missing parent, reference to parent removed');\n _data4.parent = undefined;\n node._private.parent = null;\n } else {\n var selfAsParent = false;\n var ancestor = parent;\n while (!ancestor.empty()) {\n if (node.same(ancestor)) {\n // mark self as parent and remove from data\n selfAsParent = true;\n _data4.parent = undefined; // remove parent reference\n\n // exit or we loop forever\n break;\n }\n ancestor = ancestor.parent();\n }\n if (!selfAsParent) {\n // connect with children\n parent[0]._private.children.push(node);\n node._private.parent = parent[0];\n\n // let the core know we have a compound graph\n cy_p.hasCompoundNodes = true;\n }\n } // else\n } // if specified parent\n } // for each node\n\n if (elements.length > 0) {\n var restored = elements.length === self.length ? self : new Collection(cy, elements);\n for (var _i5 = 0; _i5 < restored.length; _i5++) {\n var _ele3 = restored[_i5];\n if (_ele3.isNode()) {\n continue;\n }\n\n // adding an edge invalidates the traversal caches for the parallel edges\n _ele3.parallelEdges().clearTraversalCache();\n\n // adding an edge invalidates the traversal cache for the connected nodes\n _ele3.source().clearTraversalCache();\n _ele3.target().clearTraversalCache();\n }\n var toUpdateStyle;\n if (cy_p.hasCompoundNodes) {\n toUpdateStyle = cy.collection().merge(restored).merge(restored.connectedNodes()).merge(restored.parent());\n } else {\n toUpdateStyle = restored;\n }\n toUpdateStyle.dirtyCompoundBoundsCache().dirtyBoundingBoxCache().updateStyle(notifyRenderer);\n if (notifyRenderer) {\n restored.emitAndNotify('add');\n } else if (addToPool) {\n restored.emit('add');\n }\n }\n return self; // chainability\n};\nelesfn$1.removed = function () {\n var ele = this[0];\n return ele && ele._private.removed;\n};\nelesfn$1.inside = function () {\n var ele = this[0];\n return ele && !ele._private.removed;\n};\nelesfn$1.remove = function () {\n var notifyRenderer = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : true;\n var removeFromPool = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true;\n var self = this;\n var elesToRemove = [];\n var elesToRemoveIds = {};\n var cy = self._private.cy;\n\n // add connected edges\n function addConnectedEdges(node) {\n var edges = node._private.edges;\n for (var i = 0; i < edges.length; i++) {\n add(edges[i]);\n }\n }\n\n // add descendant nodes\n function addChildren(node) {\n var children = node._private.children;\n for (var i = 0; i < children.length; i++) {\n add(children[i]);\n }\n }\n function add(ele) {\n var alreadyAdded = elesToRemoveIds[ele.id()];\n if (removeFromPool && ele.removed() || alreadyAdded) {\n return;\n } else {\n elesToRemoveIds[ele.id()] = true;\n }\n if (ele.isNode()) {\n elesToRemove.push(ele); // nodes are removed last\n\n addConnectedEdges(ele);\n addChildren(ele);\n } else {\n elesToRemove.unshift(ele); // edges are removed first\n }\n }\n\n // make the list of elements to remove\n // (may be removing more than specified due to connected edges etc)\n\n for (var i = 0, l = self.length; i < l; i++) {\n var ele = self[i];\n add(ele);\n }\n function removeEdgeRef(node, edge) {\n var connectedEdges = node._private.edges;\n removeFromArray(connectedEdges, edge);\n\n // removing an edges invalidates the traversal cache for its nodes\n node.clearTraversalCache();\n }\n function removeParallelRef(pllEdge) {\n // removing an edge invalidates the traversal caches for the parallel edges\n pllEdge.clearTraversalCache();\n }\n var alteredParents = [];\n alteredParents.ids = {};\n function removeChildRef(parent, ele) {\n ele = ele[0];\n parent = parent[0];\n var children = parent._private.children;\n var pid = parent.id();\n removeFromArray(children, ele); // remove parent => child ref\n\n ele._private.parent = null; // remove child => parent ref\n\n if (!alteredParents.ids[pid]) {\n alteredParents.ids[pid] = true;\n alteredParents.push(parent);\n }\n }\n self.dirtyCompoundBoundsCache();\n if (removeFromPool) {\n cy.removeFromPool(elesToRemove); // remove from core pool\n }\n for (var _i6 = 0; _i6 < elesToRemove.length; _i6++) {\n var _ele4 = elesToRemove[_i6];\n if (_ele4.isEdge()) {\n // remove references to this edge in its connected nodes\n var src = _ele4.source()[0];\n var tgt = _ele4.target()[0];\n removeEdgeRef(src, _ele4);\n removeEdgeRef(tgt, _ele4);\n var pllEdges = _ele4.parallelEdges();\n for (var j = 0; j < pllEdges.length; j++) {\n var pllEdge = pllEdges[j];\n removeParallelRef(pllEdge);\n if (pllEdge.isBundledBezier()) {\n pllEdge.dirtyBoundingBoxCache();\n }\n }\n } else {\n // remove reference to parent\n var parent = _ele4.parent();\n if (parent.length !== 0) {\n removeChildRef(parent, _ele4);\n }\n }\n if (removeFromPool) {\n // mark as removed\n _ele4._private.removed = true;\n }\n }\n\n // check to see if we have a compound graph or not\n var elesStillInside = cy._private.elements;\n cy._private.hasCompoundNodes = false;\n for (var _i7 = 0; _i7 < elesStillInside.length; _i7++) {\n var _ele5 = elesStillInside[_i7];\n if (_ele5.isParent()) {\n cy._private.hasCompoundNodes = true;\n break;\n }\n }\n var removedElements = new Collection(this.cy(), elesToRemove);\n if (removedElements.size() > 0) {\n // must manually notify since trigger won't do this automatically once removed\n\n if (notifyRenderer) {\n removedElements.emitAndNotify('remove');\n } else if (removeFromPool) {\n removedElements.emit('remove');\n }\n }\n\n // the parents who were modified by the removal need their style updated\n for (var _i8 = 0; _i8 < alteredParents.length; _i8++) {\n var _ele6 = alteredParents[_i8];\n if (!removeFromPool || !_ele6.removed()) {\n _ele6.updateStyle();\n }\n }\n return removedElements;\n};\nelesfn$1.move = function (struct) {\n var cy = this._private.cy;\n var eles = this;\n\n // just clean up refs, caches, etc. in the same way as when removing and then restoring\n // (our calls to remove/restore do not remove from the graph or make events)\n var notifyRenderer = false;\n var modifyPool = false;\n var toString = function toString(id) {\n return id == null ? id : '' + id;\n }; // id must be string\n\n if (struct.source !== undefined || struct.target !== undefined) {\n var srcId = toString(struct.source);\n var tgtId = toString(struct.target);\n var srcExists = srcId != null && cy.hasElementWithId(srcId);\n var tgtExists = tgtId != null && cy.hasElementWithId(tgtId);\n if (srcExists || tgtExists) {\n cy.batch(function () {\n // avoid duplicate style updates\n eles.remove(notifyRenderer, modifyPool); // clean up refs etc.\n eles.emitAndNotify('moveout');\n for (var i = 0; i < eles.length; i++) {\n var ele = eles[i];\n var _data5 = ele._private.data;\n if (ele.isEdge()) {\n if (srcExists) {\n _data5.source = srcId;\n }\n if (tgtExists) {\n _data5.target = tgtId;\n }\n }\n }\n eles.restore(notifyRenderer, modifyPool); // make new refs, style, etc.\n });\n eles.emitAndNotify('move');\n }\n } else if (struct.parent !== undefined) {\n // move node to new parent\n var parentId = toString(struct.parent);\n var parentExists = parentId === null || cy.hasElementWithId(parentId);\n if (parentExists) {\n var pidToAssign = parentId === null ? undefined : parentId;\n cy.batch(function () {\n // avoid duplicate style updates\n var updated = eles.remove(notifyRenderer, modifyPool); // clean up refs etc.\n updated.emitAndNotify('moveout');\n for (var i = 0; i < eles.length; i++) {\n var ele = eles[i];\n var _data6 = ele._private.data;\n if (ele.isNode()) {\n _data6.parent = pidToAssign;\n }\n }\n updated.restore(notifyRenderer, modifyPool); // make new refs, style, etc.\n });\n eles.emitAndNotify('move');\n }\n }\n return this;\n};\n[elesfn$j, elesfn$i, elesfn$h, elesfn$g, elesfn$f, data, elesfn$d, dimensions, elesfn$9, elesfn$8, elesfn$7, elesfn$6, elesfn$5, elesfn$4, elesfn$3, elesfn$2].forEach(function (props) {\n extend(elesfn$1, props);\n});\n\nvar corefn$9 = {\n add: function add(opts) {\n var elements;\n var cy = this;\n\n // add the elements\n if (elementOrCollection(opts)) {\n var eles = opts;\n if (eles._private.cy === cy) {\n // same instance => just restore\n elements = eles.restore();\n } else {\n // otherwise, copy from json\n var jsons = [];\n for (var i = 0; i < eles.length; i++) {\n var ele = eles[i];\n jsons.push(ele.json());\n }\n elements = new Collection(cy, jsons);\n }\n }\n\n // specify an array of options\n else if (array(opts)) {\n var _jsons = opts;\n elements = new Collection(cy, _jsons);\n }\n\n // specify via opts.nodes and opts.edges\n else if (plainObject(opts) && (array(opts.nodes) || array(opts.edges))) {\n var elesByGroup = opts;\n var _jsons2 = [];\n var grs = ['nodes', 'edges'];\n for (var _i = 0, il = grs.length; _i < il; _i++) {\n var group = grs[_i];\n var elesArray = elesByGroup[group];\n if (array(elesArray)) {\n for (var j = 0, jl = elesArray.length; j < jl; j++) {\n var json = extend({\n group: group\n }, elesArray[j]);\n _jsons2.push(json);\n }\n }\n }\n elements = new Collection(cy, _jsons2);\n }\n\n // specify options for one element\n else {\n var _json = opts;\n elements = new Element(cy, _json).collection();\n }\n return elements;\n },\n remove: function remove(collection) {\n if (elementOrCollection(collection)) ; else if (string(collection)) {\n var selector = collection;\n collection = this.$(selector);\n }\n return collection.remove();\n }\n};\n\n/* global Float32Array */\n\n/*! Bezier curve function generator. Copyright Gaetan Renaudeau. MIT License: http://en.wikipedia.org/wiki/MIT_License */\nfunction generateCubicBezier(mX1, mY1, mX2, mY2) {\n var NEWTON_ITERATIONS = 4,\n NEWTON_MIN_SLOPE = 0.001,\n SUBDIVISION_PRECISION = 0.0000001,\n SUBDIVISION_MAX_ITERATIONS = 10,\n kSplineTableSize = 11,\n kSampleStepSize = 1.0 / (kSplineTableSize - 1.0),\n float32ArraySupported = typeof Float32Array !== 'undefined';\n\n /* Must contain four arguments. */\n if (arguments.length !== 4) {\n return false;\n }\n\n /* Arguments must be numbers. */\n for (var i = 0; i < 4; ++i) {\n if (typeof arguments[i] !== \"number\" || isNaN(arguments[i]) || !isFinite(arguments[i])) {\n return false;\n }\n }\n\n /* X values must be in the [0, 1] range. */\n mX1 = Math.min(mX1, 1);\n mX2 = Math.min(mX2, 1);\n mX1 = Math.max(mX1, 0);\n mX2 = Math.max(mX2, 0);\n var mSampleValues = float32ArraySupported ? new Float32Array(kSplineTableSize) : new Array(kSplineTableSize);\n function A(aA1, aA2) {\n return 1.0 - 3.0 * aA2 + 3.0 * aA1;\n }\n function B(aA1, aA2) {\n return 3.0 * aA2 - 6.0 * aA1;\n }\n function C(aA1) {\n return 3.0 * aA1;\n }\n function calcBezier(aT, aA1, aA2) {\n return ((A(aA1, aA2) * aT + B(aA1, aA2)) * aT + C(aA1)) * aT;\n }\n function getSlope(aT, aA1, aA2) {\n return 3.0 * A(aA1, aA2) * aT * aT + 2.0 * B(aA1, aA2) * aT + C(aA1);\n }\n function newtonRaphsonIterate(aX, aGuessT) {\n for (var _i = 0; _i < NEWTON_ITERATIONS; ++_i) {\n var currentSlope = getSlope(aGuessT, mX1, mX2);\n if (currentSlope === 0.0) {\n return aGuessT;\n }\n var currentX = calcBezier(aGuessT, mX1, mX2) - aX;\n aGuessT -= currentX / currentSlope;\n }\n return aGuessT;\n }\n function calcSampleValues() {\n for (var _i2 = 0; _i2 < kSplineTableSize; ++_i2) {\n mSampleValues[_i2] = calcBezier(_i2 * kSampleStepSize, mX1, mX2);\n }\n }\n function binarySubdivide(aX, aA, aB) {\n var currentX,\n currentT,\n i = 0;\n do {\n currentT = aA + (aB - aA) / 2.0;\n currentX = calcBezier(currentT, mX1, mX2) - aX;\n if (currentX > 0.0) {\n aB = currentT;\n } else {\n aA = currentT;\n }\n } while (Math.abs(currentX) > SUBDIVISION_PRECISION && ++i < SUBDIVISION_MAX_ITERATIONS);\n return currentT;\n }\n function getTForX(aX) {\n var intervalStart = 0.0,\n currentSample = 1,\n lastSample = kSplineTableSize - 1;\n for (; currentSample !== lastSample && mSampleValues[currentSample] <= aX; ++currentSample) {\n intervalStart += kSampleStepSize;\n }\n --currentSample;\n var dist = (aX - mSampleValues[currentSample]) / (mSampleValues[currentSample + 1] - mSampleValues[currentSample]),\n guessForT = intervalStart + dist * kSampleStepSize,\n initialSlope = getSlope(guessForT, mX1, mX2);\n if (initialSlope >= NEWTON_MIN_SLOPE) {\n return newtonRaphsonIterate(aX, guessForT);\n } else if (initialSlope === 0.0) {\n return guessForT;\n } else {\n return binarySubdivide(aX, intervalStart, intervalStart + kSampleStepSize);\n }\n }\n var _precomputed = false;\n function precompute() {\n _precomputed = true;\n if (mX1 !== mY1 || mX2 !== mY2) {\n calcSampleValues();\n }\n }\n var f = function f(aX) {\n if (!_precomputed) {\n precompute();\n }\n if (mX1 === mY1 && mX2 === mY2) {\n return aX;\n }\n if (aX === 0) {\n return 0;\n }\n if (aX === 1) {\n return 1;\n }\n return calcBezier(getTForX(aX), mY1, mY2);\n };\n f.getControlPoints = function () {\n return [{\n x: mX1,\n y: mY1\n }, {\n x: mX2,\n y: mY2\n }];\n };\n var str = \"generateBezier(\" + [mX1, mY1, mX2, mY2] + \")\";\n f.toString = function () {\n return str;\n };\n return f;\n}\n\n/*! Runge-Kutta spring physics function generator. Adapted from Framer.js, copyright Koen Bok. MIT License: http://en.wikipedia.org/wiki/MIT_License */\n/* Given a tension, friction, and duration, a simulation at 60FPS will first run without a defined duration in order to calculate the full path. A second pass\n then adjusts the time delta -- using the relation between actual time and duration -- to calculate the path for the duration-constrained animation. */\nvar generateSpringRK4 = function () {\n function springAccelerationForState(state) {\n return -state.tension * state.x - state.friction * state.v;\n }\n function springEvaluateStateWithDerivative(initialState, dt, derivative) {\n var state = {\n x: initialState.x + derivative.dx * dt,\n v: initialState.v + derivative.dv * dt,\n tension: initialState.tension,\n friction: initialState.friction\n };\n return {\n dx: state.v,\n dv: springAccelerationForState(state)\n };\n }\n function springIntegrateState(state, dt) {\n var a = {\n dx: state.v,\n dv: springAccelerationForState(state)\n },\n b = springEvaluateStateWithDerivative(state, dt * 0.5, a),\n c = springEvaluateStateWithDerivative(state, dt * 0.5, b),\n d = springEvaluateStateWithDerivative(state, dt, c),\n dxdt = 1.0 / 6.0 * (a.dx + 2.0 * (b.dx + c.dx) + d.dx),\n dvdt = 1.0 / 6.0 * (a.dv + 2.0 * (b.dv + c.dv) + d.dv);\n state.x = state.x + dxdt * dt;\n state.v = state.v + dvdt * dt;\n return state;\n }\n return function springRK4Factory(tension, friction, duration) {\n var initState = {\n x: -1,\n v: 0,\n tension: null,\n friction: null\n },\n path = [0],\n time_lapsed = 0,\n tolerance = 1 / 10000,\n DT = 16 / 1000,\n have_duration,\n dt,\n last_state;\n tension = parseFloat(tension) || 500;\n friction = parseFloat(friction) || 20;\n duration = duration || null;\n initState.tension = tension;\n initState.friction = friction;\n have_duration = duration !== null;\n\n /* Calculate the actual time it takes for this animation to complete with the provided conditions. */\n if (have_duration) {\n /* Run the simulation without a duration. */\n time_lapsed = springRK4Factory(tension, friction);\n /* Compute the adjusted time delta. */\n dt = time_lapsed / duration * DT;\n } else {\n dt = DT;\n }\n for (;;) {\n /* Next/step function .*/\n last_state = springIntegrateState(last_state || initState, dt);\n /* Store the position. */\n path.push(1 + last_state.x);\n time_lapsed += 16;\n /* If the change threshold is reached, break. */\n if (!(Math.abs(last_state.x) > tolerance && Math.abs(last_state.v) > tolerance)) {\n break;\n }\n }\n\n /* If duration is not defined, return the actual time required for completing this animation. Otherwise, return a closure that holds the\n computed path and returns a snapshot of the position according to a given percentComplete. */\n return !have_duration ? time_lapsed : function (percentComplete) {\n return path[percentComplete * (path.length - 1) | 0];\n };\n };\n}();\n\nvar cubicBezier = function cubicBezier(t1, p1, t2, p2) {\n var bezier = generateCubicBezier(t1, p1, t2, p2);\n return function (start, end, percent) {\n return start + (end - start) * bezier(percent);\n };\n};\nvar easings = {\n 'linear': function linear(start, end, percent) {\n return start + (end - start) * percent;\n },\n // default easings\n 'ease': cubicBezier(0.25, 0.1, 0.25, 1),\n 'ease-in': cubicBezier(0.42, 0, 1, 1),\n 'ease-out': cubicBezier(0, 0, 0.58, 1),\n 'ease-in-out': cubicBezier(0.42, 0, 0.58, 1),\n // sine\n 'ease-in-sine': cubicBezier(0.47, 0, 0.745, 0.715),\n 'ease-out-sine': cubicBezier(0.39, 0.575, 0.565, 1),\n 'ease-in-out-sine': cubicBezier(0.445, 0.05, 0.55, 0.95),\n // quad\n 'ease-in-quad': cubicBezier(0.55, 0.085, 0.68, 0.53),\n 'ease-out-quad': cubicBezier(0.25, 0.46, 0.45, 0.94),\n 'ease-in-out-quad': cubicBezier(0.455, 0.03, 0.515, 0.955),\n // cubic\n 'ease-in-cubic': cubicBezier(0.55, 0.055, 0.675, 0.19),\n 'ease-out-cubic': cubicBezier(0.215, 0.61, 0.355, 1),\n 'ease-in-out-cubic': cubicBezier(0.645, 0.045, 0.355, 1),\n // quart\n 'ease-in-quart': cubicBezier(0.895, 0.03, 0.685, 0.22),\n 'ease-out-quart': cubicBezier(0.165, 0.84, 0.44, 1),\n 'ease-in-out-quart': cubicBezier(0.77, 0, 0.175, 1),\n // quint\n 'ease-in-quint': cubicBezier(0.755, 0.05, 0.855, 0.06),\n 'ease-out-quint': cubicBezier(0.23, 1, 0.32, 1),\n 'ease-in-out-quint': cubicBezier(0.86, 0, 0.07, 1),\n // expo\n 'ease-in-expo': cubicBezier(0.95, 0.05, 0.795, 0.035),\n 'ease-out-expo': cubicBezier(0.19, 1, 0.22, 1),\n 'ease-in-out-expo': cubicBezier(1, 0, 0, 1),\n // circ\n 'ease-in-circ': cubicBezier(0.6, 0.04, 0.98, 0.335),\n 'ease-out-circ': cubicBezier(0.075, 0.82, 0.165, 1),\n 'ease-in-out-circ': cubicBezier(0.785, 0.135, 0.15, 0.86),\n // user param easings...\n\n 'spring': function spring(tension, friction, duration) {\n if (duration === 0) {\n // can't get a spring w/ duration 0\n return easings.linear; // duration 0 => jump to end so impl doesn't matter\n }\n var spring = generateSpringRK4(tension, friction, duration);\n return function (start, end, percent) {\n return start + (end - start) * spring(percent);\n };\n },\n 'cubic-bezier': cubicBezier\n};\n\nfunction getEasedValue(type, start, end, percent, easingFn) {\n if (percent === 1) {\n return end;\n }\n if (start === end) {\n return end;\n }\n var val = easingFn(start, end, percent);\n if (type == null) {\n return val;\n }\n if (type.roundValue || type.color) {\n val = Math.round(val);\n }\n if (type.min !== undefined) {\n val = Math.max(val, type.min);\n }\n if (type.max !== undefined) {\n val = Math.min(val, type.max);\n }\n return val;\n}\nfunction getValue(prop, spec) {\n if (prop.pfValue != null || prop.value != null) {\n if (prop.pfValue != null && (spec == null || spec.type.units !== '%')) {\n return prop.pfValue;\n } else {\n return prop.value;\n }\n } else {\n return prop;\n }\n}\nfunction ease(startProp, endProp, percent, easingFn, propSpec) {\n var type = propSpec != null ? propSpec.type : null;\n if (percent < 0) {\n percent = 0;\n } else if (percent > 1) {\n percent = 1;\n }\n var start = getValue(startProp, propSpec);\n var end = getValue(endProp, propSpec);\n if (number$1(start) && number$1(end)) {\n return getEasedValue(type, start, end, percent, easingFn);\n } else if (array(start) && array(end)) {\n var easedArr = [];\n for (var i = 0; i < end.length; i++) {\n var si = start[i];\n var ei = end[i];\n if (si != null && ei != null) {\n var val = getEasedValue(type, si, ei, percent, easingFn);\n easedArr.push(val);\n } else {\n easedArr.push(ei);\n }\n }\n return easedArr;\n }\n return undefined;\n}\n\nfunction step$1(self, ani, now, isCore) {\n var isEles = !isCore;\n var _p = self._private;\n var ani_p = ani._private;\n var pEasing = ani_p.easing;\n var startTime = ani_p.startTime;\n var cy = isCore ? self : self.cy();\n var style = cy.style();\n if (!ani_p.easingImpl) {\n if (pEasing == null) {\n // use default\n ani_p.easingImpl = easings['linear'];\n } else {\n // then define w/ name\n var easingVals;\n if (string(pEasing)) {\n var easingProp = style.parse('transition-timing-function', pEasing);\n easingVals = easingProp.value;\n } else {\n // then assume preparsed array\n easingVals = pEasing;\n }\n var name, args;\n if (string(easingVals)) {\n name = easingVals;\n args = [];\n } else {\n name = easingVals[1];\n args = easingVals.slice(2).map(function (n) {\n return +n;\n });\n }\n if (args.length > 0) {\n // create with args\n if (name === 'spring') {\n args.push(ani_p.duration); // need duration to generate spring\n }\n ani_p.easingImpl = easings[name].apply(null, args);\n } else {\n // static impl by name\n ani_p.easingImpl = easings[name];\n }\n }\n }\n var easing = ani_p.easingImpl;\n var percent;\n if (ani_p.duration === 0) {\n percent = 1;\n } else {\n percent = (now - startTime) / ani_p.duration;\n }\n if (ani_p.applying) {\n percent = ani_p.progress;\n }\n if (percent < 0) {\n percent = 0;\n } else if (percent > 1) {\n percent = 1;\n }\n if (ani_p.delay == null) {\n // then update\n\n var startPos = ani_p.startPosition;\n var endPos = ani_p.position;\n if (endPos && isEles && !self.locked()) {\n var newPos = {};\n if (valid(startPos.x, endPos.x)) {\n newPos.x = ease(startPos.x, endPos.x, percent, easing);\n }\n if (valid(startPos.y, endPos.y)) {\n newPos.y = ease(startPos.y, endPos.y, percent, easing);\n }\n self.position(newPos);\n }\n var startPan = ani_p.startPan;\n var endPan = ani_p.pan;\n var pan = _p.pan;\n var animatingPan = endPan != null && isCore;\n if (animatingPan) {\n if (valid(startPan.x, endPan.x)) {\n pan.x = ease(startPan.x, endPan.x, percent, easing);\n }\n if (valid(startPan.y, endPan.y)) {\n pan.y = ease(startPan.y, endPan.y, percent, easing);\n }\n self.emit('pan');\n }\n var startZoom = ani_p.startZoom;\n var endZoom = ani_p.zoom;\n var animatingZoom = endZoom != null && isCore;\n if (animatingZoom) {\n if (valid(startZoom, endZoom)) {\n _p.zoom = bound(_p.minZoom, ease(startZoom, endZoom, percent, easing), _p.maxZoom);\n }\n self.emit('zoom');\n }\n if (animatingPan || animatingZoom) {\n self.emit('viewport');\n }\n var props = ani_p.style;\n if (props && props.length > 0 && isEles) {\n for (var i = 0; i < props.length; i++) {\n var prop = props[i];\n var _name = prop.name;\n var end = prop;\n var start = ani_p.startStyle[_name];\n var propSpec = style.properties[start.name];\n var easedVal = ease(start, end, percent, easing, propSpec);\n style.overrideBypass(self, _name, easedVal);\n } // for props\n\n self.emit('style');\n } // if\n }\n ani_p.progress = percent;\n return percent;\n}\nfunction valid(start, end) {\n if (start == null || end == null) {\n return false;\n }\n if (number$1(start) && number$1(end)) {\n return true;\n } else if (start && end) {\n return true;\n }\n return false;\n}\n\nfunction startAnimation(self, ani, now, isCore) {\n var ani_p = ani._private;\n ani_p.started = true;\n ani_p.startTime = now - ani_p.progress * ani_p.duration;\n}\n\nfunction stepAll(now, cy) {\n var eles = cy._private.aniEles;\n var doneEles = [];\n function stepOne(ele, isCore) {\n var _p = ele._private;\n var current = _p.animation.current;\n var queue = _p.animation.queue;\n var ranAnis = false;\n\n // if nothing currently animating, get something from the queue\n if (current.length === 0) {\n var next = queue.shift();\n if (next) {\n current.push(next);\n }\n }\n var callbacks = function callbacks(_callbacks) {\n for (var j = _callbacks.length - 1; j >= 0; j--) {\n var cb = _callbacks[j];\n cb();\n }\n _callbacks.splice(0, _callbacks.length);\n };\n\n // step and remove if done\n for (var i = current.length - 1; i >= 0; i--) {\n var ani = current[i];\n var ani_p = ani._private;\n if (ani_p.stopped) {\n current.splice(i, 1);\n ani_p.hooked = false;\n ani_p.playing = false;\n ani_p.started = false;\n callbacks(ani_p.frames);\n continue;\n }\n if (!ani_p.playing && !ani_p.applying) {\n continue;\n }\n\n // an apply() while playing shouldn't do anything\n if (ani_p.playing && ani_p.applying) {\n ani_p.applying = false;\n }\n if (!ani_p.started) {\n startAnimation(ele, ani, now);\n }\n step$1(ele, ani, now, isCore);\n if (ani_p.applying) {\n ani_p.applying = false;\n }\n callbacks(ani_p.frames);\n if (ani_p.step != null) {\n ani_p.step(now);\n }\n if (ani.completed()) {\n current.splice(i, 1);\n ani_p.hooked = false;\n ani_p.playing = false;\n ani_p.started = false;\n callbacks(ani_p.completes);\n }\n ranAnis = true;\n }\n if (!isCore && current.length === 0 && queue.length === 0) {\n doneEles.push(ele);\n }\n return ranAnis;\n } // stepElement\n\n // handle all eles\n var ranEleAni = false;\n for (var e = 0; e < eles.length; e++) {\n var ele = eles[e];\n var handledThisEle = stepOne(ele);\n ranEleAni = ranEleAni || handledThisEle;\n } // each element\n\n var ranCoreAni = stepOne(cy, true);\n\n // notify renderer\n if (ranEleAni || ranCoreAni) {\n if (eles.length > 0) {\n cy.notify('draw', eles);\n } else {\n cy.notify('draw');\n }\n }\n\n // remove elements from list of currently animating if its queues are empty\n eles.unmerge(doneEles);\n cy.emit('step');\n} // stepAll\n\nvar corefn$8 = {\n // pull in animation functions\n animate: define.animate(),\n animation: define.animation(),\n animated: define.animated(),\n clearQueue: define.clearQueue(),\n delay: define.delay(),\n delayAnimation: define.delayAnimation(),\n stop: define.stop(),\n addToAnimationPool: function addToAnimationPool(eles) {\n var cy = this;\n if (!cy.styleEnabled()) {\n return;\n } // save cycles when no style used\n\n cy._private.aniEles.merge(eles);\n },\n stopAnimationLoop: function stopAnimationLoop() {\n this._private.animationsRunning = false;\n },\n startAnimationLoop: function startAnimationLoop() {\n var cy = this;\n cy._private.animationsRunning = true;\n if (!cy.styleEnabled()) {\n return;\n } // save cycles when no style used\n\n // NB the animation loop will exec in headless environments if style enabled\n // and explicit cy.destroy() is necessary to stop the loop\n\n function headlessStep() {\n if (!cy._private.animationsRunning) {\n return;\n }\n requestAnimationFrame(function animationStep(now) {\n stepAll(now, cy);\n headlessStep();\n });\n }\n var renderer = cy.renderer();\n if (renderer && renderer.beforeRender) {\n // let the renderer schedule animations\n renderer.beforeRender(function rendererAnimationStep(willDraw, now) {\n stepAll(now, cy);\n }, renderer.beforeRenderPriorities.animations);\n } else {\n // manage the animation loop ourselves\n headlessStep(); // first call\n }\n }\n};\n\nvar emitterOptions = {\n qualifierCompare: function qualifierCompare(selector1, selector2) {\n if (selector1 == null || selector2 == null) {\n return selector1 == null && selector2 == null;\n } else {\n return selector1.sameText(selector2);\n }\n },\n eventMatches: function eventMatches(cy, listener, eventObj) {\n var selector = listener.qualifier;\n if (selector != null) {\n return cy !== eventObj.target && element(eventObj.target) && selector.matches(eventObj.target);\n }\n return true;\n },\n addEventFields: function addEventFields(cy, evt) {\n evt.cy = cy;\n evt.target = cy;\n },\n callbackContext: function callbackContext(cy, listener, eventObj) {\n return listener.qualifier != null ? eventObj.target : cy;\n }\n};\nvar argSelector = function argSelector(arg) {\n if (string(arg)) {\n return new Selector(arg);\n } else {\n return arg;\n }\n};\nvar elesfn = {\n createEmitter: function createEmitter() {\n var _p = this._private;\n if (!_p.emitter) {\n _p.emitter = new Emitter(emitterOptions, this);\n }\n return this;\n },\n emitter: function emitter() {\n return this._private.emitter;\n },\n on: function on(events, selector, callback) {\n this.emitter().on(events, argSelector(selector), callback);\n return this;\n },\n removeListener: function removeListener(events, selector, callback) {\n this.emitter().removeListener(events, argSelector(selector), callback);\n return this;\n },\n removeAllListeners: function removeAllListeners() {\n this.emitter().removeAllListeners();\n return this;\n },\n one: function one(events, selector, callback) {\n this.emitter().one(events, argSelector(selector), callback);\n return this;\n },\n once: function once(events, selector, callback) {\n this.emitter().one(events, argSelector(selector), callback);\n return this;\n },\n emit: function emit(events, extraParams) {\n this.emitter().emit(events, extraParams);\n return this;\n },\n emitAndNotify: function emitAndNotify(event, eles) {\n this.emit(event);\n this.notify(event, eles);\n return this;\n }\n};\ndefine.eventAliasesOn(elesfn);\n\nvar corefn$7 = {\n png: function png(options) {\n var renderer = this._private.renderer;\n options = options || {};\n return renderer.png(options);\n },\n jpg: function jpg(options) {\n var renderer = this._private.renderer;\n options = options || {};\n options.bg = options.bg || '#fff';\n return renderer.jpg(options);\n }\n};\ncorefn$7.jpeg = corefn$7.jpg;\n\nvar corefn$6 = {\n layout: function layout(options) {\n var cy = this;\n if (options == null) {\n error('Layout options must be specified to make a layout');\n return;\n }\n if (options.name == null) {\n error('A `name` must be specified to make a layout');\n return;\n }\n var name = options.name;\n var Layout = cy.extension('layout', name);\n if (Layout == null) {\n error('No such layout `' + name + '` found. Did you forget to import it and `cytoscape.use()` it?');\n return;\n }\n var eles;\n if (string(options.eles)) {\n eles = cy.$(options.eles);\n } else {\n eles = options.eles != null ? options.eles : cy.$();\n }\n var layout = new Layout(extend({}, options, {\n cy: cy,\n eles: eles\n }));\n return layout;\n }\n};\ncorefn$6.createLayout = corefn$6.makeLayout = corefn$6.layout;\n\nvar corefn$5 = {\n notify: function notify(eventName, eventEles) {\n var _p = this._private;\n if (this.batching()) {\n _p.batchNotifications = _p.batchNotifications || {};\n var eles = _p.batchNotifications[eventName] = _p.batchNotifications[eventName] || this.collection();\n if (eventEles != null) {\n eles.merge(eventEles);\n }\n return; // notifications are disabled during batching\n }\n if (!_p.notificationsEnabled) {\n return;\n } // exit on disabled\n\n var renderer = this.renderer();\n\n // exit if destroy() called on core or renderer in between frames #1499 #1528\n if (this.destroyed() || !renderer) {\n return;\n }\n renderer.notify(eventName, eventEles);\n },\n notifications: function notifications(bool) {\n var p = this._private;\n if (bool === undefined) {\n return p.notificationsEnabled;\n } else {\n p.notificationsEnabled = bool ? true : false;\n }\n return this;\n },\n noNotifications: function noNotifications(callback) {\n this.notifications(false);\n callback();\n this.notifications(true);\n },\n batching: function batching() {\n return this._private.batchCount > 0;\n },\n startBatch: function startBatch() {\n var _p = this._private;\n if (_p.batchCount == null) {\n _p.batchCount = 0;\n }\n if (_p.batchCount === 0) {\n _p.batchStyleEles = this.collection();\n _p.batchNotifications = {};\n }\n _p.batchCount++;\n return this;\n },\n endBatch: function endBatch() {\n var _p = this._private;\n if (_p.batchCount === 0) {\n return this;\n }\n _p.batchCount--;\n if (_p.batchCount === 0) {\n // update style for dirty eles\n _p.batchStyleEles.updateStyle();\n var renderer = this.renderer();\n\n // notify the renderer of queued eles and event types\n Object.keys(_p.batchNotifications).forEach(function (eventName) {\n var eles = _p.batchNotifications[eventName];\n if (eles.empty()) {\n renderer.notify(eventName);\n } else {\n renderer.notify(eventName, eles);\n }\n });\n }\n return this;\n },\n batch: function batch(callback) {\n this.startBatch();\n callback();\n this.endBatch();\n return this;\n },\n // for backwards compatibility\n batchData: function batchData(map) {\n var cy = this;\n return this.batch(function () {\n var ids = Object.keys(map);\n for (var i = 0; i < ids.length; i++) {\n var id = ids[i];\n var data = map[id];\n var ele = cy.getElementById(id);\n ele.data(data);\n }\n });\n }\n};\n\nvar rendererDefaults = defaults$g({\n hideEdgesOnViewport: false,\n textureOnViewport: false,\n motionBlur: false,\n motionBlurOpacity: 0.05,\n pixelRatio: undefined,\n desktopTapThreshold: 4,\n touchTapThreshold: 8,\n wheelSensitivity: 1,\n debug: false,\n showFps: false,\n // webgl options\n webgl: false,\n webglDebug: false,\n webglDebugShowAtlases: false,\n // defaults good for mobile\n webglTexSize: 2048,\n webglTexRows: 36,\n webglTexRowsNodes: 18,\n webglBatchSize: 2048,\n webglTexPerBatch: 14,\n webglBgColor: [255, 255, 255]\n});\nvar corefn$4 = {\n renderTo: function renderTo(context, zoom, pan, pxRatio) {\n var r = this._private.renderer;\n r.renderTo(context, zoom, pan, pxRatio);\n return this;\n },\n renderer: function renderer() {\n return this._private.renderer;\n },\n forceRender: function forceRender() {\n this.notify('draw');\n return this;\n },\n resize: function resize() {\n this.invalidateSize();\n this.emitAndNotify('resize');\n return this;\n },\n initRenderer: function initRenderer(options) {\n var cy = this;\n var RendererProto = cy.extension('renderer', options.name);\n if (RendererProto == null) {\n error(\"Can not initialise: No such renderer `\".concat(options.name, \"` found. Did you forget to import it and `cytoscape.use()` it?\"));\n return;\n }\n if (options.wheelSensitivity !== undefined) {\n warn(\"You have set a custom wheel sensitivity. This will make your app zoom unnaturally when using mainstream mice. You should change this value from the default only if you can guarantee that all your users will use the same hardware and OS configuration as your current machine.\");\n }\n var rOpts = rendererDefaults(options);\n rOpts.cy = cy;\n cy._private.renderer = new RendererProto(rOpts);\n this.notify('init');\n },\n destroyRenderer: function destroyRenderer() {\n var cy = this;\n cy.notify('destroy'); // destroy the renderer\n\n var domEle = cy.container();\n if (domEle) {\n domEle._cyreg = null;\n while (domEle.childNodes.length > 0) {\n domEle.removeChild(domEle.childNodes[0]);\n }\n }\n cy._private.renderer = null; // to be extra safe, remove the ref\n cy.mutableElements().forEach(function (ele) {\n var _p = ele._private;\n _p.rscratch = {};\n _p.rstyle = {};\n _p.animation.current = [];\n _p.animation.queue = [];\n });\n },\n onRender: function onRender(fn) {\n return this.on('render', fn);\n },\n offRender: function offRender(fn) {\n return this.off('render', fn);\n }\n};\ncorefn$4.invalidateDimensions = corefn$4.resize;\n\nvar corefn$3 = {\n // get a collection\n // - empty collection on no args\n // - collection of elements in the graph on selector arg\n // - guarantee a returned collection when elements or collection specified\n collection: function collection(eles, opts) {\n if (string(eles)) {\n return this.$(eles);\n } else if (elementOrCollection(eles)) {\n return eles.collection();\n } else if (array(eles)) {\n if (!opts) {\n opts = {};\n }\n return new Collection(this, eles, opts.unique, opts.removed);\n }\n return new Collection(this);\n },\n nodes: function nodes(selector) {\n var nodes = this.$(function (ele) {\n return ele.isNode();\n });\n if (selector) {\n return nodes.filter(selector);\n }\n return nodes;\n },\n edges: function edges(selector) {\n var edges = this.$(function (ele) {\n return ele.isEdge();\n });\n if (selector) {\n return edges.filter(selector);\n }\n return edges;\n },\n // search the graph like jQuery\n $: function $(selector) {\n var eles = this._private.elements;\n if (selector) {\n return eles.filter(selector);\n } else {\n return eles.spawnSelf();\n }\n },\n mutableElements: function mutableElements() {\n return this._private.elements;\n }\n};\n\n// aliases\ncorefn$3.elements = corefn$3.filter = corefn$3.$;\n\nvar styfn$8 = {};\n\n// keys for style blocks, e.g. ttfftt\nvar TRUE = 't';\nvar FALSE = 'f';\n\n// (potentially expensive calculation)\n// apply the style to the element based on\n// - its bypass\n// - what selectors match it\nstyfn$8.apply = function (eles) {\n var self = this;\n var _p = self._private;\n var cy = _p.cy;\n var updatedEles = cy.collection();\n for (var ie = 0; ie < eles.length; ie++) {\n var ele = eles[ie];\n var cxtMeta = self.getContextMeta(ele);\n if (cxtMeta.empty) {\n continue;\n }\n var cxtStyle = self.getContextStyle(cxtMeta);\n var app = self.applyContextStyle(cxtMeta, cxtStyle, ele);\n if (ele._private.appliedInitStyle) {\n self.updateTransitions(ele, app.diffProps);\n } else {\n ele._private.appliedInitStyle = true;\n }\n var hintsDiff = self.updateStyleHints(ele);\n if (hintsDiff) {\n updatedEles.push(ele);\n }\n } // for elements\n\n return updatedEles;\n};\nstyfn$8.getPropertiesDiff = function (oldCxtKey, newCxtKey) {\n var self = this;\n var cache = self._private.propDiffs = self._private.propDiffs || {};\n var dualCxtKey = oldCxtKey + '-' + newCxtKey;\n var cachedVal = cache[dualCxtKey];\n if (cachedVal) {\n return cachedVal;\n }\n var diffProps = [];\n var addedProp = {};\n for (var i = 0; i < self.length; i++) {\n var cxt = self[i];\n var oldHasCxt = oldCxtKey[i] === TRUE;\n var newHasCxt = newCxtKey[i] === TRUE;\n var cxtHasDiffed = oldHasCxt !== newHasCxt;\n var cxtHasMappedProps = cxt.mappedProperties.length > 0;\n if (cxtHasDiffed || newHasCxt && cxtHasMappedProps) {\n var props = undefined;\n if (cxtHasDiffed && cxtHasMappedProps) {\n props = cxt.properties; // suffices b/c mappedProperties is a subset of properties\n } else if (cxtHasDiffed) {\n props = cxt.properties; // need to check them all\n } else if (cxtHasMappedProps) {\n props = cxt.mappedProperties; // only need to check mapped\n }\n for (var j = 0; j < props.length; j++) {\n var prop = props[j];\n var name = prop.name;\n\n // if a later context overrides this property, then the fact that this context has switched/diffed doesn't matter\n // (semi expensive check since it makes this function O(n^2) on context length, but worth it since overall result\n // is cached)\n var laterCxtOverrides = false;\n for (var k = i + 1; k < self.length; k++) {\n var laterCxt = self[k];\n var hasLaterCxt = newCxtKey[k] === TRUE;\n if (!hasLaterCxt) {\n continue;\n } // can't override unless the context is active\n\n laterCxtOverrides = laterCxt.properties[prop.name] != null;\n if (laterCxtOverrides) {\n break;\n } // exit early as long as one later context overrides\n }\n if (!addedProp[name] && !laterCxtOverrides) {\n addedProp[name] = true;\n diffProps.push(name);\n }\n } // for props\n } // if\n } // for contexts\n\n cache[dualCxtKey] = diffProps;\n return diffProps;\n};\nstyfn$8.getContextMeta = function (ele) {\n var self = this;\n var cxtKey = '';\n var diffProps;\n var prevKey = ele._private.styleCxtKey || '';\n\n // get the cxt key\n for (var i = 0; i < self.length; i++) {\n var context = self[i];\n var contextSelectorMatches = context.selector && context.selector.matches(ele); // NB: context.selector may be null for 'core'\n\n if (contextSelectorMatches) {\n cxtKey += TRUE;\n } else {\n cxtKey += FALSE;\n }\n } // for context\n\n diffProps = self.getPropertiesDiff(prevKey, cxtKey);\n ele._private.styleCxtKey = cxtKey;\n return {\n key: cxtKey,\n diffPropNames: diffProps,\n empty: diffProps.length === 0\n };\n};\n\n// gets a computed ele style object based on matched contexts\nstyfn$8.getContextStyle = function (cxtMeta) {\n var cxtKey = cxtMeta.key;\n var self = this;\n var cxtStyles = this._private.contextStyles = this._private.contextStyles || {};\n\n // if already computed style, returned cached copy\n if (cxtStyles[cxtKey]) {\n return cxtStyles[cxtKey];\n }\n var style = {\n _private: {\n key: cxtKey\n }\n };\n for (var i = 0; i < self.length; i++) {\n var cxt = self[i];\n var hasCxt = cxtKey[i] === TRUE;\n if (!hasCxt) {\n continue;\n }\n for (var j = 0; j < cxt.properties.length; j++) {\n var prop = cxt.properties[j];\n style[prop.name] = prop;\n }\n }\n cxtStyles[cxtKey] = style;\n return style;\n};\nstyfn$8.applyContextStyle = function (cxtMeta, cxtStyle, ele) {\n var self = this;\n var diffProps = cxtMeta.diffPropNames;\n var retDiffProps = {};\n var types = self.types;\n for (var i = 0; i < diffProps.length; i++) {\n var diffPropName = diffProps[i];\n var cxtProp = cxtStyle[diffPropName];\n var eleProp = ele.pstyle(diffPropName);\n if (!cxtProp) {\n // no context prop means delete\n if (!eleProp) {\n continue; // no existing prop means nothing needs to be removed\n // nb affects initial application on mapped values like control-point-distances\n } else if (eleProp.bypass) {\n cxtProp = {\n name: diffPropName,\n deleteBypassed: true\n };\n } else {\n cxtProp = {\n name: diffPropName,\n \"delete\": true\n };\n }\n }\n\n // save cycles when the context prop doesn't need to be applied\n if (eleProp === cxtProp) {\n continue;\n }\n\n // save cycles when a mapped context prop doesn't need to be applied\n if (cxtProp.mapped === types.fn // context prop is function mapper\n && eleProp != null // some props can be null even by default (e.g. a prop that overrides another one)\n && eleProp.mapping != null // ele prop is a concrete value from from a mapper\n && eleProp.mapping.value === cxtProp.value // the current prop on the ele is a flat prop value for the function mapper\n ) {\n // NB don't write to cxtProp, as it's shared among eles (stored in stylesheet)\n var mapping = eleProp.mapping; // can write to mapping, as it's a per-ele copy\n var fnValue = mapping.fnValue = cxtProp.value(ele); // temporarily cache the value in case of a miss\n\n if (fnValue === mapping.prevFnValue) {\n continue;\n }\n }\n var retDiffProp = retDiffProps[diffPropName] = {\n prev: eleProp\n };\n self.applyParsedProperty(ele, cxtProp);\n retDiffProp.next = ele.pstyle(diffPropName);\n if (retDiffProp.next && retDiffProp.next.bypass) {\n retDiffProp.next = retDiffProp.next.bypassed;\n }\n }\n return {\n diffProps: retDiffProps\n };\n};\nstyfn$8.updateStyleHints = function (ele) {\n var _p = ele._private;\n var self = this;\n var propNames = self.propertyGroupNames;\n var propGrKeys = self.propertyGroupKeys;\n var propHash = function propHash(ele, propNames, seedKey) {\n return self.getPropertiesHash(ele, propNames, seedKey);\n };\n var oldStyleKey = _p.styleKey;\n if (ele.removed()) {\n return false;\n }\n var isNode = _p.group === 'nodes';\n\n // get the style key hashes per prop group\n // but lazily -- only use non-default prop values to reduce the number of hashes\n //\n\n var overriddenStyles = ele._private.style;\n propNames = Object.keys(overriddenStyles);\n for (var i = 0; i < propGrKeys.length; i++) {\n var grKey = propGrKeys[i];\n _p.styleKeys[grKey] = [DEFAULT_HASH_SEED, DEFAULT_HASH_SEED_ALT];\n }\n var updateGrKey1 = function updateGrKey1(val, grKey) {\n return _p.styleKeys[grKey][0] = hashInt(val, _p.styleKeys[grKey][0]);\n };\n var updateGrKey2 = function updateGrKey2(val, grKey) {\n return _p.styleKeys[grKey][1] = hashIntAlt(val, _p.styleKeys[grKey][1]);\n };\n var updateGrKey = function updateGrKey(val, grKey) {\n updateGrKey1(val, grKey);\n updateGrKey2(val, grKey);\n };\n var updateGrKeyWStr = function updateGrKeyWStr(strVal, grKey) {\n for (var j = 0; j < strVal.length; j++) {\n var ch = strVal.charCodeAt(j);\n updateGrKey1(ch, grKey);\n updateGrKey2(ch, grKey);\n }\n };\n\n // - hashing works on 32 bit ints b/c we use bitwise ops\n // - small numbers get cut off (e.g. 0.123 is seen as 0 by the hashing function)\n // - raise up small numbers so more significant digits are seen by hashing\n // - make small numbers larger than a normal value to avoid collisions\n // - works in practice and it's relatively cheap\n var N = 2000000000;\n var cleanNum = function cleanNum(val) {\n return -128 < val && val < 128 && Math.floor(val) !== val ? N - (val * 1024 | 0) : val;\n };\n for (var _i = 0; _i < propNames.length; _i++) {\n var name = propNames[_i];\n var parsedProp = overriddenStyles[name];\n if (parsedProp == null) {\n continue;\n }\n var propInfo = this.properties[name];\n var type = propInfo.type;\n var _grKey = propInfo.groupKey;\n var normalizedNumberVal = undefined;\n if (propInfo.hashOverride != null) {\n normalizedNumberVal = propInfo.hashOverride(ele, parsedProp);\n } else if (parsedProp.pfValue != null) {\n normalizedNumberVal = parsedProp.pfValue;\n }\n\n // might not be a number if it allows enums\n var numberVal = propInfo.enums == null ? parsedProp.value : null;\n var haveNormNum = normalizedNumberVal != null;\n var haveUnitedNum = numberVal != null;\n var haveNum = haveNormNum || haveUnitedNum;\n var units = parsedProp.units;\n\n // numbers are cheaper to hash than strings\n // 1 hash op vs n hash ops (for length n string)\n if (type.number && haveNum && !type.multiple) {\n var v = haveNormNum ? normalizedNumberVal : numberVal;\n updateGrKey(cleanNum(v), _grKey);\n if (!haveNormNum && units != null) {\n updateGrKeyWStr(units, _grKey);\n }\n } else {\n updateGrKeyWStr(parsedProp.strValue, _grKey);\n }\n }\n\n // overall style key\n //\n\n var hash = [DEFAULT_HASH_SEED, DEFAULT_HASH_SEED_ALT];\n for (var _i2 = 0; _i2 < propGrKeys.length; _i2++) {\n var _grKey2 = propGrKeys[_i2];\n var grHash = _p.styleKeys[_grKey2];\n hash[0] = hashInt(grHash[0], hash[0]);\n hash[1] = hashIntAlt(grHash[1], hash[1]);\n }\n _p.styleKey = combineHashes(hash[0], hash[1]);\n\n // label dims\n //\n\n var sk = _p.styleKeys;\n _p.labelDimsKey = combineHashesArray(sk.labelDimensions);\n var labelKeys = propHash(ele, ['label'], sk.labelDimensions);\n _p.labelKey = combineHashesArray(labelKeys);\n _p.labelStyleKey = combineHashesArray(hashArrays(sk.commonLabel, labelKeys));\n if (!isNode) {\n var sourceLabelKeys = propHash(ele, ['source-label'], sk.labelDimensions);\n _p.sourceLabelKey = combineHashesArray(sourceLabelKeys);\n _p.sourceLabelStyleKey = combineHashesArray(hashArrays(sk.commonLabel, sourceLabelKeys));\n var targetLabelKeys = propHash(ele, ['target-label'], sk.labelDimensions);\n _p.targetLabelKey = combineHashesArray(targetLabelKeys);\n _p.targetLabelStyleKey = combineHashesArray(hashArrays(sk.commonLabel, targetLabelKeys));\n }\n\n // node\n //\n\n if (isNode) {\n var _p$styleKeys = _p.styleKeys,\n nodeBody = _p$styleKeys.nodeBody,\n nodeBorder = _p$styleKeys.nodeBorder,\n nodeOutline = _p$styleKeys.nodeOutline,\n backgroundImage = _p$styleKeys.backgroundImage,\n compound = _p$styleKeys.compound,\n pie = _p$styleKeys.pie;\n var nodeKeys = [nodeBody, nodeBorder, nodeOutline, backgroundImage, compound, pie].filter(function (k) {\n return k != null;\n }).reduce(hashArrays, [DEFAULT_HASH_SEED, DEFAULT_HASH_SEED_ALT]);\n _p.nodeKey = combineHashesArray(nodeKeys);\n _p.hasPie = pie != null && pie[0] !== DEFAULT_HASH_SEED && pie[1] !== DEFAULT_HASH_SEED_ALT;\n }\n return oldStyleKey !== _p.styleKey;\n};\nstyfn$8.clearStyleHints = function (ele) {\n var _p = ele._private;\n _p.styleCxtKey = '';\n _p.styleKeys = {};\n _p.styleKey = null;\n _p.labelKey = null;\n _p.labelStyleKey = null;\n _p.sourceLabelKey = null;\n _p.sourceLabelStyleKey = null;\n _p.targetLabelKey = null;\n _p.targetLabelStyleKey = null;\n _p.nodeKey = null;\n _p.hasPie = null;\n};\n\n// apply a property to the style (for internal use)\n// returns whether application was successful\n//\n// now, this function flattens the property, and here's how:\n//\n// for parsedProp:{ bypass: true, deleteBypass: true }\n// no property is generated, instead the bypass property in the\n// element's style is replaced by what's pointed to by the `bypassed`\n// field in the bypass property (i.e. restoring the property the\n// bypass was overriding)\n//\n// for parsedProp:{ mapped: truthy }\n// the generated flattenedProp:{ mapping: prop }\n//\n// for parsedProp:{ bypass: true }\n// the generated flattenedProp:{ bypassed: parsedProp }\nstyfn$8.applyParsedProperty = function (ele, parsedProp) {\n var self = this;\n var prop = parsedProp;\n var style = ele._private.style;\n var flatProp;\n var types = self.types;\n var type = self.properties[prop.name].type;\n var propIsBypass = prop.bypass;\n var origProp = style[prop.name];\n var origPropIsBypass = origProp && origProp.bypass;\n var _p = ele._private;\n var flatPropMapping = 'mapping';\n var getVal = function getVal(p) {\n if (p == null) {\n return null;\n } else if (p.pfValue != null) {\n return p.pfValue;\n } else {\n return p.value;\n }\n };\n var checkTriggers = function checkTriggers() {\n var fromVal = getVal(origProp);\n var toVal = getVal(prop);\n self.checkTriggers(ele, prop.name, fromVal, toVal);\n };\n\n // edge sanity checks to prevent the client from making serious mistakes\n if (parsedProp.name === 'curve-style' && ele.isEdge() && (\n // loops must be bundled beziers\n parsedProp.value !== 'bezier' && ele.isLoop() ||\n // edges connected to compound nodes can not be haystacks\n parsedProp.value === 'haystack' && (ele.source().isParent() || ele.target().isParent()))) {\n prop = parsedProp = this.parse(parsedProp.name, 'bezier', propIsBypass);\n }\n if (prop[\"delete\"]) {\n // delete the property and use the default value on falsey value\n style[prop.name] = undefined;\n checkTriggers();\n return true;\n }\n if (prop.deleteBypassed) {\n // delete the property that the\n if (!origProp) {\n checkTriggers();\n return true; // can't delete if no prop\n } else if (origProp.bypass) {\n // delete bypassed\n origProp.bypassed = undefined;\n checkTriggers();\n return true;\n } else {\n return false; // we're unsuccessful deleting the bypassed\n }\n }\n\n // check if we need to delete the current bypass\n if (prop.deleteBypass) {\n // then this property is just here to indicate we need to delete\n if (!origProp) {\n checkTriggers();\n return true; // property is already not defined\n } else if (origProp.bypass) {\n // then replace the bypass property with the original\n // because the bypassed property was already applied (and therefore parsed), we can just replace it (no reapplying necessary)\n style[prop.name] = origProp.bypassed;\n checkTriggers();\n return true;\n } else {\n return false; // we're unsuccessful deleting the bypass\n }\n }\n var printMappingErr = function printMappingErr() {\n warn('Do not assign mappings to elements without corresponding data (i.e. ele `' + ele.id() + '` has no mapping for property `' + prop.name + '` with data field `' + prop.field + '`); try a `[' + prop.field + ']` selector to limit scope to elements with `' + prop.field + '` defined');\n };\n\n // put the property in the style objects\n switch (prop.mapped) {\n // flatten the property if mapped\n case types.mapData:\n {\n // flatten the field (e.g. data.foo.bar)\n var fields = prop.field.split('.');\n var fieldVal = _p.data;\n for (var i = 0; i < fields.length && fieldVal; i++) {\n var field = fields[i];\n fieldVal = fieldVal[field];\n }\n if (fieldVal == null) {\n printMappingErr();\n return false;\n }\n var percent;\n if (!number$1(fieldVal)) {\n // then don't apply and fall back on the existing style\n warn('Do not use continuous mappers without specifying numeric data (i.e. `' + prop.field + ': ' + fieldVal + '` for `' + ele.id() + '` is non-numeric)');\n return false;\n } else {\n var fieldWidth = prop.fieldMax - prop.fieldMin;\n if (fieldWidth === 0) {\n // safety check -- not strictly necessary as no props of zero range should be passed here\n percent = 0;\n } else {\n percent = (fieldVal - prop.fieldMin) / fieldWidth;\n }\n }\n\n // make sure to bound percent value\n if (percent < 0) {\n percent = 0;\n } else if (percent > 1) {\n percent = 1;\n }\n if (type.color) {\n var r1 = prop.valueMin[0];\n var r2 = prop.valueMax[0];\n var g1 = prop.valueMin[1];\n var g2 = prop.valueMax[1];\n var b1 = prop.valueMin[2];\n var b2 = prop.valueMax[2];\n var a1 = prop.valueMin[3] == null ? 1 : prop.valueMin[3];\n var a2 = prop.valueMax[3] == null ? 1 : prop.valueMax[3];\n var clr = [Math.round(r1 + (r2 - r1) * percent), Math.round(g1 + (g2 - g1) * percent), Math.round(b1 + (b2 - b1) * percent), Math.round(a1 + (a2 - a1) * percent)];\n flatProp = {\n // colours are simple, so just create the flat property instead of expensive string parsing\n bypass: prop.bypass,\n // we're a bypass if the mapping property is a bypass\n name: prop.name,\n value: clr,\n strValue: 'rgb(' + clr[0] + ', ' + clr[1] + ', ' + clr[2] + ')'\n };\n } else if (type.number) {\n var calcValue = prop.valueMin + (prop.valueMax - prop.valueMin) * percent;\n flatProp = this.parse(prop.name, calcValue, prop.bypass, flatPropMapping);\n } else {\n return false; // can only map to colours and numbers\n }\n if (!flatProp) {\n // if we can't flatten the property, then don't apply the property and fall back on the existing style\n printMappingErr();\n return false;\n }\n flatProp.mapping = prop; // keep a reference to the mapping\n prop = flatProp; // the flattened (mapped) property is the one we want\n\n break;\n }\n\n // direct mapping\n case types.data:\n {\n // flatten the field (e.g. data.foo.bar)\n var _fields = prop.field.split('.');\n var _fieldVal = _p.data;\n for (var _i3 = 0; _i3 < _fields.length && _fieldVal; _i3++) {\n var _field = _fields[_i3];\n _fieldVal = _fieldVal[_field];\n }\n if (_fieldVal != null) {\n flatProp = this.parse(prop.name, _fieldVal, prop.bypass, flatPropMapping);\n }\n if (!flatProp) {\n // if we can't flatten the property, then don't apply and fall back on the existing style\n printMappingErr();\n return false;\n }\n flatProp.mapping = prop; // keep a reference to the mapping\n prop = flatProp; // the flattened (mapped) property is the one we want\n\n break;\n }\n case types.fn:\n {\n var fn = prop.value;\n var fnRetVal = prop.fnValue != null ? prop.fnValue : fn(ele); // check for cached value before calling function\n\n prop.prevFnValue = fnRetVal;\n if (fnRetVal == null) {\n warn('Custom function mappers may not return null (i.e. `' + prop.name + '` for ele `' + ele.id() + '` is null)');\n return false;\n }\n flatProp = this.parse(prop.name, fnRetVal, prop.bypass, flatPropMapping);\n if (!flatProp) {\n warn('Custom function mappers may not return invalid values for the property type (i.e. `' + prop.name + '` for ele `' + ele.id() + '` is invalid)');\n return false;\n }\n flatProp.mapping = copy(prop); // keep a reference to the mapping\n prop = flatProp; // the flattened (mapped) property is the one we want\n\n break;\n }\n case undefined:\n break;\n // just set the property\n\n default:\n return false;\n // not a valid mapping\n }\n\n // if the property is a bypass property, then link the resultant property to the original one\n if (propIsBypass) {\n if (origPropIsBypass) {\n // then this bypass overrides the existing one\n prop.bypassed = origProp.bypassed; // steal bypassed prop from old bypass\n } else {\n // then link the orig prop to the new bypass\n prop.bypassed = origProp;\n }\n style[prop.name] = prop; // and set\n } else {\n // prop is not bypass\n if (origPropIsBypass) {\n // then keep the orig prop (since it's a bypass) and link to the new prop\n origProp.bypassed = prop;\n } else {\n // then just replace the old prop with the new one\n style[prop.name] = prop;\n }\n }\n checkTriggers();\n return true;\n};\nstyfn$8.cleanElements = function (eles, keepBypasses) {\n for (var i = 0; i < eles.length; i++) {\n var ele = eles[i];\n this.clearStyleHints(ele);\n ele.dirtyCompoundBoundsCache();\n ele.dirtyBoundingBoxCache();\n if (!keepBypasses) {\n ele._private.style = {};\n } else {\n var style = ele._private.style;\n var propNames = Object.keys(style);\n for (var j = 0; j < propNames.length; j++) {\n var propName = propNames[j];\n var eleProp = style[propName];\n if (eleProp != null) {\n if (eleProp.bypass) {\n eleProp.bypassed = null;\n } else {\n style[propName] = null;\n }\n }\n }\n }\n }\n};\n\n// updates the visual style for all elements (useful for manual style modification after init)\nstyfn$8.update = function () {\n var cy = this._private.cy;\n var eles = cy.mutableElements();\n eles.updateStyle();\n};\n\n// diffProps : { name => { prev, next } }\nstyfn$8.updateTransitions = function (ele, diffProps) {\n var self = this;\n var _p = ele._private;\n var props = ele.pstyle('transition-property').value;\n var duration = ele.pstyle('transition-duration').pfValue;\n var delay = ele.pstyle('transition-delay').pfValue;\n if (props.length > 0 && duration > 0) {\n var style = {};\n\n // build up the style to animate towards\n var anyPrev = false;\n for (var i = 0; i < props.length; i++) {\n var prop = props[i];\n var styProp = ele.pstyle(prop);\n var diffProp = diffProps[prop];\n if (!diffProp) {\n continue;\n }\n var prevProp = diffProp.prev;\n var fromProp = prevProp;\n var toProp = diffProp.next != null ? diffProp.next : styProp;\n var diff = false;\n var initVal = undefined;\n var initDt = 0.000001; // delta time % value for initVal (allows animating out of init zero opacity)\n\n if (!fromProp) {\n continue;\n }\n\n // consider px values\n if (number$1(fromProp.pfValue) && number$1(toProp.pfValue)) {\n diff = toProp.pfValue - fromProp.pfValue; // nonzero is truthy\n initVal = fromProp.pfValue + initDt * diff;\n\n // consider numerical values\n } else if (number$1(fromProp.value) && number$1(toProp.value)) {\n diff = toProp.value - fromProp.value; // nonzero is truthy\n initVal = fromProp.value + initDt * diff;\n\n // consider colour values\n } else if (array(fromProp.value) && array(toProp.value)) {\n diff = fromProp.value[0] !== toProp.value[0] || fromProp.value[1] !== toProp.value[1] || fromProp.value[2] !== toProp.value[2];\n initVal = fromProp.strValue;\n }\n\n // the previous value is good for an animation only if it's different\n if (diff) {\n style[prop] = toProp.strValue; // to val\n this.applyBypass(ele, prop, initVal); // from val\n anyPrev = true;\n }\n } // end if props allow ani\n\n // can't transition if there's nothing previous to transition from\n if (!anyPrev) {\n return;\n }\n _p.transitioning = true;\n new Promise$1(function (resolve) {\n if (delay > 0) {\n ele.delayAnimation(delay).play().promise().then(resolve);\n } else {\n resolve();\n }\n }).then(function () {\n return ele.animation({\n style: style,\n duration: duration,\n easing: ele.pstyle('transition-timing-function').value,\n queue: false\n }).play().promise();\n }).then(function () {\n // if( !isBypass ){\n self.removeBypasses(ele, props);\n ele.emitAndNotify('style');\n // }\n\n _p.transitioning = false;\n });\n } else if (_p.transitioning) {\n this.removeBypasses(ele, props);\n ele.emitAndNotify('style');\n _p.transitioning = false;\n }\n};\nstyfn$8.checkTrigger = function (ele, name, fromValue, toValue, getTrigger, onTrigger) {\n var prop = this.properties[name];\n var triggerCheck = getTrigger(prop);\n if (ele.removed()) {\n return;\n }\n if (triggerCheck != null && triggerCheck(fromValue, toValue, ele)) {\n onTrigger(prop);\n }\n};\nstyfn$8.checkZOrderTrigger = function (ele, name, fromValue, toValue) {\n var _this = this;\n this.checkTrigger(ele, name, fromValue, toValue, function (prop) {\n return prop.triggersZOrder;\n }, function () {\n _this._private.cy.notify('zorder', ele);\n });\n};\nstyfn$8.checkBoundsTrigger = function (ele, name, fromValue, toValue) {\n this.checkTrigger(ele, name, fromValue, toValue, function (prop) {\n return prop.triggersBounds;\n }, function (prop) {\n ele.dirtyCompoundBoundsCache();\n ele.dirtyBoundingBoxCache();\n });\n};\nstyfn$8.checkConnectedEdgesBoundsTrigger = function (ele, name, fromValue, toValue) {\n this.checkTrigger(ele, name, fromValue, toValue, function (prop) {\n return prop.triggersBoundsOfConnectedEdges;\n }, function (prop) {\n ele.connectedEdges().forEach(function (edge) {\n edge.dirtyBoundingBoxCache();\n });\n });\n};\nstyfn$8.checkParallelEdgesBoundsTrigger = function (ele, name, fromValue, toValue) {\n this.checkTrigger(ele, name, fromValue, toValue, function (prop) {\n return prop.triggersBoundsOfParallelEdges;\n }, function (prop) {\n ele.parallelEdges().forEach(function (pllEdge) {\n pllEdge.dirtyBoundingBoxCache();\n });\n });\n};\nstyfn$8.checkTriggers = function (ele, name, fromValue, toValue) {\n ele.dirtyStyleCache();\n this.checkZOrderTrigger(ele, name, fromValue, toValue);\n this.checkBoundsTrigger(ele, name, fromValue, toValue);\n this.checkConnectedEdgesBoundsTrigger(ele, name, fromValue, toValue);\n this.checkParallelEdgesBoundsTrigger(ele, name, fromValue, toValue);\n};\n\nvar styfn$7 = {};\n\n// bypasses are applied to an existing style on an element, and just tacked on temporarily\n// returns true iff application was successful for at least 1 specified property\nstyfn$7.applyBypass = function (eles, name, value, updateTransitions) {\n var self = this;\n var props = [];\n var isBypass = true;\n\n // put all the properties (can specify one or many) in an array after parsing them\n if (name === '*' || name === '**') {\n // apply to all property names\n\n if (value !== undefined) {\n for (var i = 0; i < self.properties.length; i++) {\n var prop = self.properties[i];\n var _name = prop.name;\n var parsedProp = this.parse(_name, value, true);\n if (parsedProp) {\n props.push(parsedProp);\n }\n }\n }\n } else if (string(name)) {\n // then parse the single property\n var _parsedProp = this.parse(name, value, true);\n if (_parsedProp) {\n props.push(_parsedProp);\n }\n } else if (plainObject(name)) {\n // then parse each property\n var specifiedProps = name;\n updateTransitions = value;\n var names = Object.keys(specifiedProps);\n for (var _i = 0; _i < names.length; _i++) {\n var _name2 = names[_i];\n var _value = specifiedProps[_name2];\n if (_value === undefined) {\n // try camel case name too\n _value = specifiedProps[dash2camel(_name2)];\n }\n if (_value !== undefined) {\n var _parsedProp2 = this.parse(_name2, _value, true);\n if (_parsedProp2) {\n props.push(_parsedProp2);\n }\n }\n }\n } else {\n // can't do anything without well defined properties\n return false;\n }\n\n // we've failed if there are no valid properties\n if (props.length === 0) {\n return false;\n }\n\n // now, apply the bypass properties on the elements\n var ret = false; // return true if at least one succesful bypass applied\n for (var _i2 = 0; _i2 < eles.length; _i2++) {\n // for each ele\n var ele = eles[_i2];\n var diffProps = {};\n var diffProp = undefined;\n for (var j = 0; j < props.length; j++) {\n // for each prop\n var _prop = props[j];\n if (updateTransitions) {\n var prevProp = ele.pstyle(_prop.name);\n diffProp = diffProps[_prop.name] = {\n prev: prevProp\n };\n }\n ret = this.applyParsedProperty(ele, copy(_prop)) || ret;\n if (updateTransitions) {\n diffProp.next = ele.pstyle(_prop.name);\n }\n } // for props\n\n if (ret) {\n this.updateStyleHints(ele);\n }\n if (updateTransitions) {\n this.updateTransitions(ele, diffProps, isBypass);\n }\n } // for eles\n\n return ret;\n};\n\n// only useful in specific cases like animation\nstyfn$7.overrideBypass = function (eles, name, value) {\n name = camel2dash(name);\n for (var i = 0; i < eles.length; i++) {\n var ele = eles[i];\n var prop = ele._private.style[name];\n var type = this.properties[name].type;\n var isColor = type.color;\n var isMulti = type.mutiple;\n var oldValue = !prop ? null : prop.pfValue != null ? prop.pfValue : prop.value;\n if (!prop || !prop.bypass) {\n // need a bypass if one doesn't exist\n this.applyBypass(ele, name, value);\n } else {\n prop.value = value;\n if (prop.pfValue != null) {\n prop.pfValue = value;\n }\n if (isColor) {\n prop.strValue = 'rgb(' + value.join(',') + ')';\n } else if (isMulti) {\n prop.strValue = value.join(' ');\n } else {\n prop.strValue = '' + value;\n }\n this.updateStyleHints(ele);\n }\n this.checkTriggers(ele, name, oldValue, value);\n }\n};\nstyfn$7.removeAllBypasses = function (eles, updateTransitions) {\n return this.removeBypasses(eles, this.propertyNames, updateTransitions);\n};\nstyfn$7.removeBypasses = function (eles, props, updateTransitions) {\n var isBypass = true;\n for (var j = 0; j < eles.length; j++) {\n var ele = eles[j];\n var diffProps = {};\n for (var i = 0; i < props.length; i++) {\n var name = props[i];\n var prop = this.properties[name];\n var prevProp = ele.pstyle(prop.name);\n if (!prevProp || !prevProp.bypass) {\n // if a bypass doesn't exist for the prop, nothing needs to be removed\n continue;\n }\n var value = ''; // empty => remove bypass\n var parsedProp = this.parse(name, value, true);\n var diffProp = diffProps[prop.name] = {\n prev: prevProp\n };\n this.applyParsedProperty(ele, parsedProp);\n diffProp.next = ele.pstyle(prop.name);\n } // for props\n\n this.updateStyleHints(ele);\n if (updateTransitions) {\n this.updateTransitions(ele, diffProps, isBypass);\n }\n } // for eles\n};\n\nvar styfn$6 = {};\n\n// gets what an em size corresponds to in pixels relative to a dom element\nstyfn$6.getEmSizeInPixels = function () {\n var px = this.containerCss('font-size');\n if (px != null) {\n return parseFloat(px);\n } else {\n return 1; // for headless\n }\n};\n\n// gets css property from the core container\nstyfn$6.containerCss = function (propName) {\n var cy = this._private.cy;\n var domElement = cy.container();\n var containerWindow = cy.window();\n if (containerWindow && domElement && containerWindow.getComputedStyle) {\n return containerWindow.getComputedStyle(domElement).getPropertyValue(propName);\n }\n};\n\nvar styfn$5 = {};\n\n// gets the rendered style for an element\nstyfn$5.getRenderedStyle = function (ele, prop) {\n if (prop) {\n return this.getStylePropertyValue(ele, prop, true);\n } else {\n return this.getRawStyle(ele, true);\n }\n};\n\n// gets the raw style for an element\nstyfn$5.getRawStyle = function (ele, isRenderedVal) {\n var self = this;\n ele = ele[0]; // insure it's an element\n\n if (ele) {\n var rstyle = {};\n for (var i = 0; i < self.properties.length; i++) {\n var prop = self.properties[i];\n var val = self.getStylePropertyValue(ele, prop.name, isRenderedVal);\n if (val != null) {\n rstyle[prop.name] = val;\n rstyle[dash2camel(prop.name)] = val;\n }\n }\n return rstyle;\n }\n};\nstyfn$5.getIndexedStyle = function (ele, property, subproperty, index) {\n var pstyle = ele.pstyle(property)[subproperty][index];\n return pstyle != null ? pstyle : ele.cy().style().getDefaultProperty(property)[subproperty][0];\n};\nstyfn$5.getStylePropertyValue = function (ele, propName, isRenderedVal) {\n var self = this;\n ele = ele[0]; // insure it's an element\n\n if (ele) {\n var prop = self.properties[propName];\n if (prop.alias) {\n prop = prop.pointsTo;\n }\n var type = prop.type;\n var styleProp = ele.pstyle(prop.name);\n if (styleProp) {\n var value = styleProp.value,\n units = styleProp.units,\n strValue = styleProp.strValue;\n if (isRenderedVal && type.number && value != null && number$1(value)) {\n var zoom = ele.cy().zoom();\n var getRenderedValue = function getRenderedValue(val) {\n return val * zoom;\n };\n var getValueStringWithUnits = function getValueStringWithUnits(val, units) {\n return getRenderedValue(val) + units;\n };\n var isArrayValue = array(value);\n var haveUnits = isArrayValue ? units.every(function (u) {\n return u != null;\n }) : units != null;\n if (haveUnits) {\n if (isArrayValue) {\n return value.map(function (v, i) {\n return getValueStringWithUnits(v, units[i]);\n }).join(' ');\n } else {\n return getValueStringWithUnits(value, units);\n }\n } else {\n if (isArrayValue) {\n return value.map(function (v) {\n return string(v) ? v : '' + getRenderedValue(v);\n }).join(' ');\n } else {\n return '' + getRenderedValue(value);\n }\n }\n } else if (strValue != null) {\n return strValue;\n }\n }\n return null;\n }\n};\nstyfn$5.getAnimationStartStyle = function (ele, aniProps) {\n var rstyle = {};\n for (var i = 0; i < aniProps.length; i++) {\n var aniProp = aniProps[i];\n var name = aniProp.name;\n var styleProp = ele.pstyle(name);\n if (styleProp !== undefined) {\n // then make a prop of it\n if (plainObject(styleProp)) {\n styleProp = this.parse(name, styleProp.strValue);\n } else {\n styleProp = this.parse(name, styleProp);\n }\n }\n if (styleProp) {\n rstyle[name] = styleProp;\n }\n }\n return rstyle;\n};\nstyfn$5.getPropsList = function (propsObj) {\n var self = this;\n var rstyle = [];\n var style = propsObj;\n var props = self.properties;\n if (style) {\n var names = Object.keys(style);\n for (var i = 0; i < names.length; i++) {\n var name = names[i];\n var val = style[name];\n var prop = props[name] || props[camel2dash(name)];\n var styleProp = this.parse(prop.name, val);\n if (styleProp) {\n rstyle.push(styleProp);\n }\n }\n }\n return rstyle;\n};\nstyfn$5.getNonDefaultPropertiesHash = function (ele, propNames, seed) {\n var hash = seed.slice();\n var name, val, strVal, chVal;\n var i, j;\n for (i = 0; i < propNames.length; i++) {\n name = propNames[i];\n val = ele.pstyle(name, false);\n if (val == null) {\n continue;\n } else if (val.pfValue != null) {\n hash[0] = hashInt(chVal, hash[0]);\n hash[1] = hashIntAlt(chVal, hash[1]);\n } else {\n strVal = val.strValue;\n for (j = 0; j < strVal.length; j++) {\n chVal = strVal.charCodeAt(j);\n hash[0] = hashInt(chVal, hash[0]);\n hash[1] = hashIntAlt(chVal, hash[1]);\n }\n }\n }\n return hash;\n};\nstyfn$5.getPropertiesHash = styfn$5.getNonDefaultPropertiesHash;\n\nvar styfn$4 = {};\nstyfn$4.appendFromJson = function (json) {\n var style = this;\n for (var i = 0; i < json.length; i++) {\n var context = json[i];\n var selector = context.selector;\n var props = context.style || context.css;\n var names = Object.keys(props);\n style.selector(selector); // apply selector\n\n for (var j = 0; j < names.length; j++) {\n var name = names[j];\n var value = props[name];\n style.css(name, value); // apply property\n }\n }\n return style;\n};\n\n// accessible cy.style() function\nstyfn$4.fromJson = function (json) {\n var style = this;\n style.resetToDefault();\n style.appendFromJson(json);\n return style;\n};\n\n// get json from cy.style() api\nstyfn$4.json = function () {\n var json = [];\n for (var i = this.defaultLength; i < this.length; i++) {\n var cxt = this[i];\n var selector = cxt.selector;\n var props = cxt.properties;\n var css = {};\n for (var j = 0; j < props.length; j++) {\n var prop = props[j];\n css[prop.name] = prop.strValue;\n }\n json.push({\n selector: !selector ? 'core' : selector.toString(),\n style: css\n });\n }\n return json;\n};\n\nvar styfn$3 = {};\nstyfn$3.appendFromString = function (string) {\n var self = this;\n var style = this;\n var remaining = '' + string;\n var selAndBlockStr;\n var blockRem;\n var propAndValStr;\n\n // remove comments from the style string\n remaining = remaining.replace(/[/][*](\\s|.)+?[*][/]/g, '');\n function removeSelAndBlockFromRemaining() {\n // remove the parsed selector and block from the remaining text to parse\n if (remaining.length > selAndBlockStr.length) {\n remaining = remaining.substr(selAndBlockStr.length);\n } else {\n remaining = '';\n }\n }\n function removePropAndValFromRem() {\n // remove the parsed property and value from the remaining block text to parse\n if (blockRem.length > propAndValStr.length) {\n blockRem = blockRem.substr(propAndValStr.length);\n } else {\n blockRem = '';\n }\n }\n for (;;) {\n var nothingLeftToParse = remaining.match(/^\\s*$/);\n if (nothingLeftToParse) {\n break;\n }\n var selAndBlock = remaining.match(/^\\s*((?:.|\\s)+?)\\s*\\{((?:.|\\s)+?)\\}/);\n if (!selAndBlock) {\n warn('Halting stylesheet parsing: String stylesheet contains more to parse but no selector and block found in: ' + remaining);\n break;\n }\n selAndBlockStr = selAndBlock[0];\n\n // parse the selector\n var selectorStr = selAndBlock[1];\n if (selectorStr !== 'core') {\n var selector = new Selector(selectorStr);\n if (selector.invalid) {\n warn('Skipping parsing of block: Invalid selector found in string stylesheet: ' + selectorStr);\n\n // skip this selector and block\n removeSelAndBlockFromRemaining();\n continue;\n }\n }\n\n // parse the block of properties and values\n var blockStr = selAndBlock[2];\n var invalidBlock = false;\n blockRem = blockStr;\n var props = [];\n for (;;) {\n var _nothingLeftToParse = blockRem.match(/^\\s*$/);\n if (_nothingLeftToParse) {\n break;\n }\n var propAndVal = blockRem.match(/^\\s*(.+?)\\s*:\\s*(.+?)(?:\\s*;|\\s*$)/);\n if (!propAndVal) {\n warn('Skipping parsing of block: Invalid formatting of style property and value definitions found in:' + blockStr);\n invalidBlock = true;\n break;\n }\n propAndValStr = propAndVal[0];\n var propStr = propAndVal[1];\n var valStr = propAndVal[2];\n var prop = self.properties[propStr];\n if (!prop) {\n warn('Skipping property: Invalid property name in: ' + propAndValStr);\n\n // skip this property in the block\n removePropAndValFromRem();\n continue;\n }\n var parsedProp = style.parse(propStr, valStr);\n if (!parsedProp) {\n warn('Skipping property: Invalid property definition in: ' + propAndValStr);\n\n // skip this property in the block\n removePropAndValFromRem();\n continue;\n }\n props.push({\n name: propStr,\n val: valStr\n });\n removePropAndValFromRem();\n }\n if (invalidBlock) {\n removeSelAndBlockFromRemaining();\n break;\n }\n\n // put the parsed block in the style\n style.selector(selectorStr);\n for (var i = 0; i < props.length; i++) {\n var _prop = props[i];\n style.css(_prop.name, _prop.val);\n }\n removeSelAndBlockFromRemaining();\n }\n return style;\n};\nstyfn$3.fromString = function (string) {\n var style = this;\n style.resetToDefault();\n style.appendFromString(string);\n return style;\n};\n\nvar styfn$2 = {};\n(function () {\n var number$1 = number;\n var rgba = rgbaNoBackRefs;\n var hsla = hslaNoBackRefs;\n var hex3$1 = hex3;\n var hex6$1 = hex6;\n var data = function data(prefix) {\n return '^' + prefix + '\\\\s*\\\\(\\\\s*([\\\\w\\\\.]+)\\\\s*\\\\)$';\n };\n var mapData = function mapData(prefix) {\n var mapArg = number$1 + '|\\\\w+|' + rgba + '|' + hsla + '|' + hex3$1 + '|' + hex6$1;\n return '^' + prefix + '\\\\s*\\\\(([\\\\w\\\\.]+)\\\\s*\\\\,\\\\s*(' + number$1 + ')\\\\s*\\\\,\\\\s*(' + number$1 + ')\\\\s*,\\\\s*(' + mapArg + ')\\\\s*\\\\,\\\\s*(' + mapArg + ')\\\\)$';\n };\n var urlRegexes = ['^url\\\\s*\\\\(\\\\s*[\\'\"]?(.+?)[\\'\"]?\\\\s*\\\\)$', '^(none)$', '^(.+)$'];\n\n // each visual style property has a type and needs to be validated according to it\n styfn$2.types = {\n time: {\n number: true,\n min: 0,\n units: 's|ms',\n implicitUnits: 'ms'\n },\n percent: {\n number: true,\n min: 0,\n max: 100,\n units: '%',\n implicitUnits: '%'\n },\n percentages: {\n number: true,\n min: 0,\n max: 100,\n units: '%',\n implicitUnits: '%',\n multiple: true\n },\n zeroOneNumber: {\n number: true,\n min: 0,\n max: 1,\n unitless: true\n },\n zeroOneNumbers: {\n number: true,\n min: 0,\n max: 1,\n unitless: true,\n multiple: true\n },\n nOneOneNumber: {\n number: true,\n min: -1,\n max: 1,\n unitless: true\n },\n nonNegativeInt: {\n number: true,\n min: 0,\n integer: true,\n unitless: true\n },\n nonNegativeNumber: {\n number: true,\n min: 0,\n unitless: true\n },\n position: {\n enums: ['parent', 'origin']\n },\n nodeSize: {\n number: true,\n min: 0,\n enums: ['label']\n },\n number: {\n number: true,\n unitless: true\n },\n numbers: {\n number: true,\n unitless: true,\n multiple: true\n },\n positiveNumber: {\n number: true,\n unitless: true,\n min: 0,\n strictMin: true\n },\n size: {\n number: true,\n min: 0\n },\n bidirectionalSize: {\n number: true\n },\n // allows negative\n bidirectionalSizeMaybePercent: {\n number: true,\n allowPercent: true\n },\n // allows negative\n bidirectionalSizes: {\n number: true,\n multiple: true\n },\n // allows negative\n sizeMaybePercent: {\n number: true,\n min: 0,\n allowPercent: true\n },\n axisDirection: {\n enums: ['horizontal', 'leftward', 'rightward', 'vertical', 'upward', 'downward', 'auto']\n },\n paddingRelativeTo: {\n enums: ['width', 'height', 'average', 'min', 'max']\n },\n bgWH: {\n number: true,\n min: 0,\n allowPercent: true,\n enums: ['auto'],\n multiple: true\n },\n bgPos: {\n number: true,\n allowPercent: true,\n multiple: true\n },\n bgRelativeTo: {\n enums: ['inner', 'include-padding'],\n multiple: true\n },\n bgRepeat: {\n enums: ['repeat', 'repeat-x', 'repeat-y', 'no-repeat'],\n multiple: true\n },\n bgFit: {\n enums: ['none', 'contain', 'cover'],\n multiple: true\n },\n bgCrossOrigin: {\n enums: ['anonymous', 'use-credentials', 'null'],\n multiple: true\n },\n bgClip: {\n enums: ['none', 'node'],\n multiple: true\n },\n bgContainment: {\n enums: ['inside', 'over'],\n multiple: true\n },\n color: {\n color: true\n },\n colors: {\n color: true,\n multiple: true\n },\n fill: {\n enums: ['solid', 'linear-gradient', 'radial-gradient']\n },\n bool: {\n enums: ['yes', 'no']\n },\n bools: {\n enums: ['yes', 'no'],\n multiple: true\n },\n lineStyle: {\n enums: ['solid', 'dotted', 'dashed']\n },\n lineCap: {\n enums: ['butt', 'round', 'square']\n },\n linePosition: {\n enums: ['center', 'inside', 'outside']\n },\n lineJoin: {\n enums: ['round', 'bevel', 'miter']\n },\n borderStyle: {\n enums: ['solid', 'dotted', 'dashed', 'double']\n },\n curveStyle: {\n enums: ['bezier', 'unbundled-bezier', 'haystack', 'segments', 'straight', 'straight-triangle', 'taxi', 'round-segments', 'round-taxi']\n },\n radiusType: {\n enums: ['arc-radius', 'influence-radius'],\n multiple: true\n },\n fontFamily: {\n regex: '^([\\\\w- \\\\\"]+(?:\\\\s*,\\\\s*[\\\\w- \\\\\"]+)*)$'\n },\n fontStyle: {\n enums: ['italic', 'normal', 'oblique']\n },\n fontWeight: {\n enums: ['normal', 'bold', 'bolder', 'lighter', '100', '200', '300', '400', '500', '600', '800', '900', 100, 200, 300, 400, 500, 600, 700, 800, 900]\n },\n textDecoration: {\n enums: ['none', 'underline', 'overline', 'line-through']\n },\n textTransform: {\n enums: ['none', 'uppercase', 'lowercase']\n },\n textWrap: {\n enums: ['none', 'wrap', 'ellipsis']\n },\n textOverflowWrap: {\n enums: ['whitespace', 'anywhere']\n },\n textBackgroundShape: {\n enums: ['rectangle', 'roundrectangle', 'round-rectangle']\n },\n nodeShape: {\n enums: ['rectangle', 'roundrectangle', 'round-rectangle', 'cutrectangle', 'cut-rectangle', 'bottomroundrectangle', 'bottom-round-rectangle', 'barrel', 'ellipse', 'triangle', 'round-triangle', 'square', 'pentagon', 'round-pentagon', 'hexagon', 'round-hexagon', 'concavehexagon', 'concave-hexagon', 'heptagon', 'round-heptagon', 'octagon', 'round-octagon', 'tag', 'round-tag', 'star', 'diamond', 'round-diamond', 'vee', 'rhomboid', 'right-rhomboid', 'polygon']\n },\n overlayShape: {\n enums: ['roundrectangle', 'round-rectangle', 'ellipse']\n },\n cornerRadius: {\n number: true,\n min: 0,\n units: 'px|em',\n implicitUnits: 'px',\n enums: ['auto']\n },\n compoundIncludeLabels: {\n enums: ['include', 'exclude']\n },\n arrowShape: {\n enums: ['tee', 'triangle', 'triangle-tee', 'circle-triangle', 'triangle-cross', 'triangle-backcurve', 'vee', 'square', 'circle', 'diamond', 'chevron', 'none']\n },\n arrowFill: {\n enums: ['filled', 'hollow']\n },\n arrowWidth: {\n number: true,\n units: '%|px|em',\n implicitUnits: 'px',\n enums: ['match-line']\n },\n display: {\n enums: ['element', 'none']\n },\n visibility: {\n enums: ['hidden', 'visible']\n },\n zCompoundDepth: {\n enums: ['bottom', 'orphan', 'auto', 'top']\n },\n zIndexCompare: {\n enums: ['auto', 'manual']\n },\n valign: {\n enums: ['top', 'center', 'bottom']\n },\n halign: {\n enums: ['left', 'center', 'right']\n },\n justification: {\n enums: ['left', 'center', 'right', 'auto']\n },\n text: {\n string: true\n },\n data: {\n mapping: true,\n regex: data('data')\n },\n layoutData: {\n mapping: true,\n regex: data('layoutData')\n },\n scratch: {\n mapping: true,\n regex: data('scratch')\n },\n mapData: {\n mapping: true,\n regex: mapData('mapData')\n },\n mapLayoutData: {\n mapping: true,\n regex: mapData('mapLayoutData')\n },\n mapScratch: {\n mapping: true,\n regex: mapData('mapScratch')\n },\n fn: {\n mapping: true,\n fn: true\n },\n url: {\n regexes: urlRegexes,\n singleRegexMatchValue: true\n },\n urls: {\n regexes: urlRegexes,\n singleRegexMatchValue: true,\n multiple: true\n },\n propList: {\n propList: true\n },\n angle: {\n number: true,\n units: 'deg|rad',\n implicitUnits: 'rad'\n },\n textRotation: {\n number: true,\n units: 'deg|rad',\n implicitUnits: 'rad',\n enums: ['none', 'autorotate']\n },\n polygonPointList: {\n number: true,\n multiple: true,\n evenMultiple: true,\n min: -1,\n max: 1,\n unitless: true\n },\n edgeDistances: {\n enums: ['intersection', 'node-position', 'endpoints']\n },\n edgeEndpoint: {\n number: true,\n multiple: true,\n units: '%|px|em|deg|rad',\n implicitUnits: 'px',\n enums: ['inside-to-node', 'outside-to-node', 'outside-to-node-or-label', 'outside-to-line', 'outside-to-line-or-label'],\n singleEnum: true,\n validate: function validate(valArr, unitsArr) {\n switch (valArr.length) {\n case 2:\n // can be % or px only\n return unitsArr[0] !== 'deg' && unitsArr[0] !== 'rad' && unitsArr[1] !== 'deg' && unitsArr[1] !== 'rad';\n case 1:\n // can be enum, deg, or rad only\n return string(valArr[0]) || unitsArr[0] === 'deg' || unitsArr[0] === 'rad';\n default:\n return false;\n }\n }\n },\n easing: {\n regexes: ['^(spring)\\\\s*\\\\(\\\\s*(' + number$1 + ')\\\\s*,\\\\s*(' + number$1 + ')\\\\s*\\\\)$', '^(cubic-bezier)\\\\s*\\\\(\\\\s*(' + number$1 + ')\\\\s*,\\\\s*(' + number$1 + ')\\\\s*,\\\\s*(' + number$1 + ')\\\\s*,\\\\s*(' + number$1 + ')\\\\s*\\\\)$'],\n enums: ['linear', 'ease', 'ease-in', 'ease-out', 'ease-in-out', 'ease-in-sine', 'ease-out-sine', 'ease-in-out-sine', 'ease-in-quad', 'ease-out-quad', 'ease-in-out-quad', 'ease-in-cubic', 'ease-out-cubic', 'ease-in-out-cubic', 'ease-in-quart', 'ease-out-quart', 'ease-in-out-quart', 'ease-in-quint', 'ease-out-quint', 'ease-in-out-quint', 'ease-in-expo', 'ease-out-expo', 'ease-in-out-expo', 'ease-in-circ', 'ease-out-circ', 'ease-in-out-circ']\n },\n gradientDirection: {\n enums: ['to-bottom', 'to-top', 'to-left', 'to-right', 'to-bottom-right', 'to-bottom-left', 'to-top-right', 'to-top-left', 'to-right-bottom', 'to-left-bottom', 'to-right-top', 'to-left-top' // different order\n ]\n },\n boundsExpansion: {\n number: true,\n multiple: true,\n min: 0,\n validate: function validate(valArr) {\n var length = valArr.length;\n return length === 1 || length === 2 || length === 4;\n }\n }\n };\n var diff = {\n zeroNonZero: function zeroNonZero(val1, val2) {\n if ((val1 == null || val2 == null) && val1 !== val2) {\n return true; // null cases could represent any value\n }\n if (val1 == 0 && val2 != 0) {\n return true;\n } else if (val1 != 0 && val2 == 0) {\n return true;\n } else {\n return false;\n }\n },\n any: function any(val1, val2) {\n return val1 != val2;\n },\n emptyNonEmpty: function emptyNonEmpty(str1, str2) {\n var empty1 = emptyString(str1);\n var empty2 = emptyString(str2);\n return empty1 && !empty2 || !empty1 && empty2;\n }\n };\n\n // define visual style properties\n //\n // - n.b. adding a new group of props may require updates to updateStyleHints()\n // - adding new props to an existing group gets handled automatically\n\n var t = styfn$2.types;\n var mainLabel = [{\n name: 'label',\n type: t.text,\n triggersBounds: diff.any,\n triggersZOrder: diff.emptyNonEmpty\n }, {\n name: 'text-rotation',\n type: t.textRotation,\n triggersBounds: diff.any\n }, {\n name: 'text-margin-x',\n type: t.bidirectionalSize,\n triggersBounds: diff.any\n }, {\n name: 'text-margin-y',\n type: t.bidirectionalSize,\n triggersBounds: diff.any\n }];\n var sourceLabel = [{\n name: 'source-label',\n type: t.text,\n triggersBounds: diff.any\n }, {\n name: 'source-text-rotation',\n type: t.textRotation,\n triggersBounds: diff.any\n }, {\n name: 'source-text-margin-x',\n type: t.bidirectionalSize,\n triggersBounds: diff.any\n }, {\n name: 'source-text-margin-y',\n type: t.bidirectionalSize,\n triggersBounds: diff.any\n }, {\n name: 'source-text-offset',\n type: t.size,\n triggersBounds: diff.any\n }];\n var targetLabel = [{\n name: 'target-label',\n type: t.text,\n triggersBounds: diff.any\n }, {\n name: 'target-text-rotation',\n type: t.textRotation,\n triggersBounds: diff.any\n }, {\n name: 'target-text-margin-x',\n type: t.bidirectionalSize,\n triggersBounds: diff.any\n }, {\n name: 'target-text-margin-y',\n type: t.bidirectionalSize,\n triggersBounds: diff.any\n }, {\n name: 'target-text-offset',\n type: t.size,\n triggersBounds: diff.any\n }];\n var labelDimensions = [{\n name: 'font-family',\n type: t.fontFamily,\n triggersBounds: diff.any\n }, {\n name: 'font-style',\n type: t.fontStyle,\n triggersBounds: diff.any\n }, {\n name: 'font-weight',\n type: t.fontWeight,\n triggersBounds: diff.any\n }, {\n name: 'font-size',\n type: t.size,\n triggersBounds: diff.any\n }, {\n name: 'text-transform',\n type: t.textTransform,\n triggersBounds: diff.any\n }, {\n name: 'text-wrap',\n type: t.textWrap,\n triggersBounds: diff.any\n }, {\n name: 'text-overflow-wrap',\n type: t.textOverflowWrap,\n triggersBounds: diff.any\n }, {\n name: 'text-max-width',\n type: t.size,\n triggersBounds: diff.any\n }, {\n name: 'text-outline-width',\n type: t.size,\n triggersBounds: diff.any\n }, {\n name: 'line-height',\n type: t.positiveNumber,\n triggersBounds: diff.any\n }];\n var commonLabel = [{\n name: 'text-valign',\n type: t.valign,\n triggersBounds: diff.any\n }, {\n name: 'text-halign',\n type: t.halign,\n triggersBounds: diff.any\n }, {\n name: 'color',\n type: t.color\n }, {\n name: 'text-outline-color',\n type: t.color\n }, {\n name: 'text-outline-opacity',\n type: t.zeroOneNumber\n }, {\n name: 'text-background-color',\n type: t.color\n }, {\n name: 'text-background-opacity',\n type: t.zeroOneNumber\n }, {\n name: 'text-background-padding',\n type: t.size,\n triggersBounds: diff.any\n }, {\n name: 'text-border-opacity',\n type: t.zeroOneNumber\n }, {\n name: 'text-border-color',\n type: t.color\n }, {\n name: 'text-border-width',\n type: t.size,\n triggersBounds: diff.any\n }, {\n name: 'text-border-style',\n type: t.borderStyle,\n triggersBounds: diff.any\n }, {\n name: 'text-background-shape',\n type: t.textBackgroundShape,\n triggersBounds: diff.any\n }, {\n name: 'text-justification',\n type: t.justification\n }];\n var behavior = [{\n name: 'events',\n type: t.bool,\n triggersZOrder: diff.any\n }, {\n name: 'text-events',\n type: t.bool,\n triggersZOrder: diff.any\n }];\n var visibility = [{\n name: 'display',\n type: t.display,\n triggersZOrder: diff.any,\n triggersBounds: diff.any,\n triggersBoundsOfConnectedEdges: diff.any,\n triggersBoundsOfParallelEdges: function triggersBoundsOfParallelEdges(fromValue, toValue, ele) {\n if (fromValue === toValue) {\n return false;\n }\n\n // only if edge is bundled bezier (so as not to affect performance of other edges)\n return ele.pstyle('curve-style').value === 'bezier';\n }\n }, {\n name: 'visibility',\n type: t.visibility,\n triggersZOrder: diff.any\n }, {\n name: 'opacity',\n type: t.zeroOneNumber,\n triggersZOrder: diff.zeroNonZero\n }, {\n name: 'text-opacity',\n type: t.zeroOneNumber\n }, {\n name: 'min-zoomed-font-size',\n type: t.size\n }, {\n name: 'z-compound-depth',\n type: t.zCompoundDepth,\n triggersZOrder: diff.any\n }, {\n name: 'z-index-compare',\n type: t.zIndexCompare,\n triggersZOrder: diff.any\n }, {\n name: 'z-index',\n type: t.number,\n triggersZOrder: diff.any\n }];\n var overlay = [{\n name: 'overlay-padding',\n type: t.size,\n triggersBounds: diff.any\n }, {\n name: 'overlay-color',\n type: t.color\n }, {\n name: 'overlay-opacity',\n type: t.zeroOneNumber,\n triggersBounds: diff.zeroNonZero\n }, {\n name: 'overlay-shape',\n type: t.overlayShape,\n triggersBounds: diff.any\n }, {\n name: 'overlay-corner-radius',\n type: t.cornerRadius\n }];\n var underlay = [{\n name: 'underlay-padding',\n type: t.size,\n triggersBounds: diff.any\n }, {\n name: 'underlay-color',\n type: t.color\n }, {\n name: 'underlay-opacity',\n type: t.zeroOneNumber,\n triggersBounds: diff.zeroNonZero\n }, {\n name: 'underlay-shape',\n type: t.overlayShape,\n triggersBounds: diff.any\n }, {\n name: 'underlay-corner-radius',\n type: t.cornerRadius\n }];\n var transition = [{\n name: 'transition-property',\n type: t.propList\n }, {\n name: 'transition-duration',\n type: t.time\n }, {\n name: 'transition-delay',\n type: t.time\n }, {\n name: 'transition-timing-function',\n type: t.easing\n }];\n var nodeSizeHashOverride = function nodeSizeHashOverride(ele, parsedProp) {\n if (parsedProp.value === 'label') {\n return -ele.poolIndex(); // no hash key hits is using label size (hitrate for perf probably low anyway)\n } else {\n return parsedProp.pfValue;\n }\n };\n var nodeBody = [{\n name: 'height',\n type: t.nodeSize,\n triggersBounds: diff.any,\n hashOverride: nodeSizeHashOverride\n }, {\n name: 'width',\n type: t.nodeSize,\n triggersBounds: diff.any,\n hashOverride: nodeSizeHashOverride\n }, {\n name: 'shape',\n type: t.nodeShape,\n triggersBounds: diff.any\n }, {\n name: 'shape-polygon-points',\n type: t.polygonPointList,\n triggersBounds: diff.any\n }, {\n name: 'corner-radius',\n type: t.cornerRadius\n }, {\n name: 'background-color',\n type: t.color\n }, {\n name: 'background-fill',\n type: t.fill\n }, {\n name: 'background-opacity',\n type: t.zeroOneNumber\n }, {\n name: 'background-blacken',\n type: t.nOneOneNumber\n }, {\n name: 'background-gradient-stop-colors',\n type: t.colors\n }, {\n name: 'background-gradient-stop-positions',\n type: t.percentages\n }, {\n name: 'background-gradient-direction',\n type: t.gradientDirection\n }, {\n name: 'padding',\n type: t.sizeMaybePercent,\n triggersBounds: diff.any\n }, {\n name: 'padding-relative-to',\n type: t.paddingRelativeTo,\n triggersBounds: diff.any\n }, {\n name: 'bounds-expansion',\n type: t.boundsExpansion,\n triggersBounds: diff.any\n }];\n var nodeBorder = [{\n name: 'border-color',\n type: t.color\n }, {\n name: 'border-opacity',\n type: t.zeroOneNumber\n }, {\n name: 'border-width',\n type: t.size,\n triggersBounds: diff.any\n }, {\n name: 'border-style',\n type: t.borderStyle\n }, {\n name: 'border-cap',\n type: t.lineCap\n }, {\n name: 'border-join',\n type: t.lineJoin\n }, {\n name: 'border-dash-pattern',\n type: t.numbers\n }, {\n name: 'border-dash-offset',\n type: t.number\n }, {\n name: 'border-position',\n type: t.linePosition\n }];\n var nodeOutline = [{\n name: 'outline-color',\n type: t.color\n }, {\n name: 'outline-opacity',\n type: t.zeroOneNumber\n }, {\n name: 'outline-width',\n type: t.size,\n triggersBounds: diff.any\n }, {\n name: 'outline-style',\n type: t.borderStyle\n }, {\n name: 'outline-offset',\n type: t.size,\n triggersBounds: diff.any\n }];\n var backgroundImage = [{\n name: 'background-image',\n type: t.urls\n }, {\n name: 'background-image-crossorigin',\n type: t.bgCrossOrigin\n }, {\n name: 'background-image-opacity',\n type: t.zeroOneNumbers\n }, {\n name: 'background-image-containment',\n type: t.bgContainment\n }, {\n name: 'background-image-smoothing',\n type: t.bools\n }, {\n name: 'background-position-x',\n type: t.bgPos\n }, {\n name: 'background-position-y',\n type: t.bgPos\n }, {\n name: 'background-width-relative-to',\n type: t.bgRelativeTo\n }, {\n name: 'background-height-relative-to',\n type: t.bgRelativeTo\n }, {\n name: 'background-repeat',\n type: t.bgRepeat\n }, {\n name: 'background-fit',\n type: t.bgFit\n }, {\n name: 'background-clip',\n type: t.bgClip\n }, {\n name: 'background-width',\n type: t.bgWH\n }, {\n name: 'background-height',\n type: t.bgWH\n }, {\n name: 'background-offset-x',\n type: t.bgPos\n }, {\n name: 'background-offset-y',\n type: t.bgPos\n }];\n var compound = [{\n name: 'position',\n type: t.position,\n triggersBounds: diff.any\n }, {\n name: 'compound-sizing-wrt-labels',\n type: t.compoundIncludeLabels,\n triggersBounds: diff.any\n }, {\n name: 'min-width',\n type: t.size,\n triggersBounds: diff.any\n }, {\n name: 'min-width-bias-left',\n type: t.sizeMaybePercent,\n triggersBounds: diff.any\n }, {\n name: 'min-width-bias-right',\n type: t.sizeMaybePercent,\n triggersBounds: diff.any\n }, {\n name: 'min-height',\n type: t.size,\n triggersBounds: diff.any\n }, {\n name: 'min-height-bias-top',\n type: t.sizeMaybePercent,\n triggersBounds: diff.any\n }, {\n name: 'min-height-bias-bottom',\n type: t.sizeMaybePercent,\n triggersBounds: diff.any\n }];\n var edgeLine = [{\n name: 'line-style',\n type: t.lineStyle\n }, {\n name: 'line-color',\n type: t.color\n }, {\n name: 'line-fill',\n type: t.fill\n }, {\n name: 'line-cap',\n type: t.lineCap\n }, {\n name: 'line-opacity',\n type: t.zeroOneNumber\n }, {\n name: 'line-dash-pattern',\n type: t.numbers\n }, {\n name: 'line-dash-offset',\n type: t.number\n }, {\n name: 'line-outline-width',\n type: t.size\n }, {\n name: 'line-outline-color',\n type: t.color\n }, {\n name: 'line-gradient-stop-colors',\n type: t.colors\n }, {\n name: 'line-gradient-stop-positions',\n type: t.percentages\n }, {\n name: 'curve-style',\n type: t.curveStyle,\n triggersBounds: diff.any,\n triggersBoundsOfParallelEdges: function triggersBoundsOfParallelEdges(fromValue, toValue) {\n if (fromValue === toValue) {\n return false;\n } // must have diff\n\n return fromValue === 'bezier' ||\n // remove from bundle\n toValue === 'bezier'; // add to bundle\n }\n }, {\n name: 'haystack-radius',\n type: t.zeroOneNumber,\n triggersBounds: diff.any\n }, {\n name: 'source-endpoint',\n type: t.edgeEndpoint,\n triggersBounds: diff.any\n }, {\n name: 'target-endpoint',\n type: t.edgeEndpoint,\n triggersBounds: diff.any\n }, {\n name: 'control-point-step-size',\n type: t.size,\n triggersBounds: diff.any\n }, {\n name: 'control-point-distances',\n type: t.bidirectionalSizes,\n triggersBounds: diff.any\n }, {\n name: 'control-point-weights',\n type: t.numbers,\n triggersBounds: diff.any\n }, {\n name: 'segment-distances',\n type: t.bidirectionalSizes,\n triggersBounds: diff.any\n }, {\n name: 'segment-weights',\n type: t.numbers,\n triggersBounds: diff.any\n }, {\n name: 'segment-radii',\n type: t.numbers,\n triggersBounds: diff.any\n }, {\n name: 'radius-type',\n type: t.radiusType,\n triggersBounds: diff.any\n }, {\n name: 'taxi-turn',\n type: t.bidirectionalSizeMaybePercent,\n triggersBounds: diff.any\n }, {\n name: 'taxi-turn-min-distance',\n type: t.size,\n triggersBounds: diff.any\n }, {\n name: 'taxi-direction',\n type: t.axisDirection,\n triggersBounds: diff.any\n }, {\n name: 'taxi-radius',\n type: t.number,\n triggersBounds: diff.any\n }, {\n name: 'edge-distances',\n type: t.edgeDistances,\n triggersBounds: diff.any\n }, {\n name: 'arrow-scale',\n type: t.positiveNumber,\n triggersBounds: diff.any\n }, {\n name: 'loop-direction',\n type: t.angle,\n triggersBounds: diff.any\n }, {\n name: 'loop-sweep',\n type: t.angle,\n triggersBounds: diff.any\n }, {\n name: 'source-distance-from-node',\n type: t.size,\n triggersBounds: diff.any\n }, {\n name: 'target-distance-from-node',\n type: t.size,\n triggersBounds: diff.any\n }];\n var ghost = [{\n name: 'ghost',\n type: t.bool,\n triggersBounds: diff.any\n }, {\n name: 'ghost-offset-x',\n type: t.bidirectionalSize,\n triggersBounds: diff.any\n }, {\n name: 'ghost-offset-y',\n type: t.bidirectionalSize,\n triggersBounds: diff.any\n }, {\n name: 'ghost-opacity',\n type: t.zeroOneNumber\n }];\n var core = [{\n name: 'selection-box-color',\n type: t.color\n }, {\n name: 'selection-box-opacity',\n type: t.zeroOneNumber\n }, {\n name: 'selection-box-border-color',\n type: t.color\n }, {\n name: 'selection-box-border-width',\n type: t.size\n }, {\n name: 'active-bg-color',\n type: t.color\n }, {\n name: 'active-bg-opacity',\n type: t.zeroOneNumber\n }, {\n name: 'active-bg-size',\n type: t.size\n }, {\n name: 'outside-texture-bg-color',\n type: t.color\n }, {\n name: 'outside-texture-bg-opacity',\n type: t.zeroOneNumber\n }];\n\n // pie backgrounds for nodes\n var pie = [];\n styfn$2.pieBackgroundN = 16; // because the pie properties are numbered, give access to a constant N (for renderer use)\n pie.push({\n name: 'pie-size',\n type: t.sizeMaybePercent\n });\n for (var i = 1; i <= styfn$2.pieBackgroundN; i++) {\n pie.push({\n name: 'pie-' + i + '-background-color',\n type: t.color\n });\n pie.push({\n name: 'pie-' + i + '-background-size',\n type: t.percent\n });\n pie.push({\n name: 'pie-' + i + '-background-opacity',\n type: t.zeroOneNumber\n });\n }\n\n // edge arrows\n var edgeArrow = [];\n var arrowPrefixes = styfn$2.arrowPrefixes = ['source', 'mid-source', 'target', 'mid-target'];\n [{\n name: 'arrow-shape',\n type: t.arrowShape,\n triggersBounds: diff.any\n }, {\n name: 'arrow-color',\n type: t.color\n }, {\n name: 'arrow-fill',\n type: t.arrowFill\n }, {\n name: 'arrow-width',\n type: t.arrowWidth\n }].forEach(function (prop) {\n arrowPrefixes.forEach(function (prefix) {\n var name = prefix + '-' + prop.name;\n var type = prop.type,\n triggersBounds = prop.triggersBounds;\n edgeArrow.push({\n name: name,\n type: type,\n triggersBounds: triggersBounds\n });\n });\n }, {});\n var props = styfn$2.properties = [].concat(behavior, transition, visibility, overlay, underlay, ghost, commonLabel, labelDimensions, mainLabel, sourceLabel, targetLabel, nodeBody, nodeBorder, nodeOutline, backgroundImage, pie, compound, edgeLine, edgeArrow, core);\n var propGroups = styfn$2.propertyGroups = {\n // common to all eles\n behavior: behavior,\n transition: transition,\n visibility: visibility,\n overlay: overlay,\n underlay: underlay,\n ghost: ghost,\n // labels\n commonLabel: commonLabel,\n labelDimensions: labelDimensions,\n mainLabel: mainLabel,\n sourceLabel: sourceLabel,\n targetLabel: targetLabel,\n // node props\n nodeBody: nodeBody,\n nodeBorder: nodeBorder,\n nodeOutline: nodeOutline,\n backgroundImage: backgroundImage,\n pie: pie,\n compound: compound,\n // edge props\n edgeLine: edgeLine,\n edgeArrow: edgeArrow,\n core: core\n };\n var propGroupNames = styfn$2.propertyGroupNames = {};\n var propGroupKeys = styfn$2.propertyGroupKeys = Object.keys(propGroups);\n propGroupKeys.forEach(function (key) {\n propGroupNames[key] = propGroups[key].map(function (prop) {\n return prop.name;\n });\n propGroups[key].forEach(function (prop) {\n return prop.groupKey = key;\n });\n });\n\n // define aliases\n var aliases = styfn$2.aliases = [{\n name: 'content',\n pointsTo: 'label'\n }, {\n name: 'control-point-distance',\n pointsTo: 'control-point-distances'\n }, {\n name: 'control-point-weight',\n pointsTo: 'control-point-weights'\n }, {\n name: 'segment-distance',\n pointsTo: 'segment-distances'\n }, {\n name: 'segment-weight',\n pointsTo: 'segment-weights'\n }, {\n name: 'segment-radius',\n pointsTo: 'segment-radii'\n }, {\n name: 'edge-text-rotation',\n pointsTo: 'text-rotation'\n }, {\n name: 'padding-left',\n pointsTo: 'padding'\n }, {\n name: 'padding-right',\n pointsTo: 'padding'\n }, {\n name: 'padding-top',\n pointsTo: 'padding'\n }, {\n name: 'padding-bottom',\n pointsTo: 'padding'\n }];\n\n // list of property names\n styfn$2.propertyNames = props.map(function (p) {\n return p.name;\n });\n\n // allow access of properties by name ( e.g. style.properties.height )\n for (var _i = 0; _i < props.length; _i++) {\n var prop = props[_i];\n props[prop.name] = prop; // allow lookup by name\n }\n\n // map aliases\n for (var _i2 = 0; _i2 < aliases.length; _i2++) {\n var alias = aliases[_i2];\n var pointsToProp = props[alias.pointsTo];\n var aliasProp = {\n name: alias.name,\n alias: true,\n pointsTo: pointsToProp\n };\n\n // add alias prop for parsing\n props.push(aliasProp);\n props[alias.name] = aliasProp; // allow lookup by name\n }\n})();\nstyfn$2.getDefaultProperty = function (name) {\n return this.getDefaultProperties()[name];\n};\nstyfn$2.getDefaultProperties = function () {\n var _p = this._private;\n if (_p.defaultProperties != null) {\n return _p.defaultProperties;\n }\n var rawProps = extend({\n // core props\n 'selection-box-color': '#ddd',\n 'selection-box-opacity': 0.65,\n 'selection-box-border-color': '#aaa',\n 'selection-box-border-width': 1,\n 'active-bg-color': 'black',\n 'active-bg-opacity': 0.15,\n 'active-bg-size': 30,\n 'outside-texture-bg-color': '#000',\n 'outside-texture-bg-opacity': 0.125,\n // common node/edge props\n 'events': 'yes',\n 'text-events': 'no',\n 'text-valign': 'top',\n 'text-halign': 'center',\n 'text-justification': 'auto',\n 'line-height': 1,\n 'color': '#000',\n 'text-outline-color': '#000',\n 'text-outline-width': 0,\n 'text-outline-opacity': 1,\n 'text-opacity': 1,\n 'text-decoration': 'none',\n 'text-transform': 'none',\n 'text-wrap': 'none',\n 'text-overflow-wrap': 'whitespace',\n 'text-max-width': 9999,\n 'text-background-color': '#000',\n 'text-background-opacity': 0,\n 'text-background-shape': 'rectangle',\n 'text-background-padding': 0,\n 'text-border-opacity': 0,\n 'text-border-width': 0,\n 'text-border-style': 'solid',\n 'text-border-color': '#000',\n 'font-family': 'Helvetica Neue, Helvetica, sans-serif',\n 'font-style': 'normal',\n 'font-weight': 'normal',\n 'font-size': 16,\n 'min-zoomed-font-size': 0,\n 'text-rotation': 'none',\n 'source-text-rotation': 'none',\n 'target-text-rotation': 'none',\n 'visibility': 'visible',\n 'display': 'element',\n 'opacity': 1,\n 'z-compound-depth': 'auto',\n 'z-index-compare': 'auto',\n 'z-index': 0,\n 'label': '',\n 'text-margin-x': 0,\n 'text-margin-y': 0,\n 'source-label': '',\n 'source-text-offset': 0,\n 'source-text-margin-x': 0,\n 'source-text-margin-y': 0,\n 'target-label': '',\n 'target-text-offset': 0,\n 'target-text-margin-x': 0,\n 'target-text-margin-y': 0,\n 'overlay-opacity': 0,\n 'overlay-color': '#000',\n 'overlay-padding': 10,\n 'overlay-shape': 'round-rectangle',\n 'overlay-corner-radius': 'auto',\n 'underlay-opacity': 0,\n 'underlay-color': '#000',\n 'underlay-padding': 10,\n 'underlay-shape': 'round-rectangle',\n 'underlay-corner-radius': 'auto',\n 'transition-property': 'none',\n 'transition-duration': 0,\n 'transition-delay': 0,\n 'transition-timing-function': 'linear',\n // node props\n 'background-blacken': 0,\n 'background-color': '#999',\n 'background-fill': 'solid',\n 'background-opacity': 1,\n 'background-image': 'none',\n 'background-image-crossorigin': 'anonymous',\n 'background-image-opacity': 1,\n 'background-image-containment': 'inside',\n 'background-image-smoothing': 'yes',\n 'background-position-x': '50%',\n 'background-position-y': '50%',\n 'background-offset-x': 0,\n 'background-offset-y': 0,\n 'background-width-relative-to': 'include-padding',\n 'background-height-relative-to': 'include-padding',\n 'background-repeat': 'no-repeat',\n 'background-fit': 'none',\n 'background-clip': 'node',\n 'background-width': 'auto',\n 'background-height': 'auto',\n 'border-color': '#000',\n 'border-opacity': 1,\n 'border-width': 0,\n 'border-style': 'solid',\n 'border-dash-pattern': [4, 2],\n 'border-dash-offset': 0,\n 'border-cap': 'butt',\n 'border-join': 'miter',\n 'border-position': 'center',\n 'outline-color': '#999',\n 'outline-opacity': 1,\n 'outline-width': 0,\n 'outline-offset': 0,\n 'outline-style': 'solid',\n 'height': 30,\n 'width': 30,\n 'shape': 'ellipse',\n 'shape-polygon-points': '-1, -1, 1, -1, 1, 1, -1, 1',\n 'corner-radius': 'auto',\n 'bounds-expansion': 0,\n // node gradient\n 'background-gradient-direction': 'to-bottom',\n 'background-gradient-stop-colors': '#999',\n 'background-gradient-stop-positions': '0%',\n // ghost props\n 'ghost': 'no',\n 'ghost-offset-y': 0,\n 'ghost-offset-x': 0,\n 'ghost-opacity': 0,\n // compound props\n 'padding': 0,\n 'padding-relative-to': 'width',\n 'position': 'origin',\n 'compound-sizing-wrt-labels': 'include',\n 'min-width': 0,\n 'min-width-bias-left': 0,\n 'min-width-bias-right': 0,\n 'min-height': 0,\n 'min-height-bias-top': 0,\n 'min-height-bias-bottom': 0\n }, {\n // node pie bg\n 'pie-size': '100%'\n }, [{\n name: 'pie-{{i}}-background-color',\n value: 'black'\n }, {\n name: 'pie-{{i}}-background-size',\n value: '0%'\n }, {\n name: 'pie-{{i}}-background-opacity',\n value: 1\n }].reduce(function (css, prop) {\n for (var i = 1; i <= styfn$2.pieBackgroundN; i++) {\n var name = prop.name.replace('{{i}}', i);\n var val = prop.value;\n css[name] = val;\n }\n return css;\n }, {}), {\n // edge props\n 'line-style': 'solid',\n 'line-color': '#999',\n 'line-fill': 'solid',\n 'line-cap': 'butt',\n 'line-opacity': 1,\n 'line-outline-width': 0,\n 'line-outline-color': '#000',\n 'line-gradient-stop-colors': '#999',\n 'line-gradient-stop-positions': '0%',\n 'control-point-step-size': 40,\n 'control-point-weights': 0.5,\n 'segment-weights': 0.5,\n 'segment-distances': 20,\n 'segment-radii': 15,\n 'radius-type': 'arc-radius',\n 'taxi-turn': '50%',\n 'taxi-radius': 15,\n 'taxi-turn-min-distance': 10,\n 'taxi-direction': 'auto',\n 'edge-distances': 'intersection',\n 'curve-style': 'haystack',\n 'haystack-radius': 0,\n 'arrow-scale': 1,\n 'loop-direction': '-45deg',\n 'loop-sweep': '-90deg',\n 'source-distance-from-node': 0,\n 'target-distance-from-node': 0,\n 'source-endpoint': 'outside-to-node',\n 'target-endpoint': 'outside-to-node',\n 'line-dash-pattern': [6, 3],\n 'line-dash-offset': 0\n }, [{\n name: 'arrow-shape',\n value: 'none'\n }, {\n name: 'arrow-color',\n value: '#999'\n }, {\n name: 'arrow-fill',\n value: 'filled'\n }, {\n name: 'arrow-width',\n value: 1\n }].reduce(function (css, prop) {\n styfn$2.arrowPrefixes.forEach(function (prefix) {\n var name = prefix + '-' + prop.name;\n var val = prop.value;\n css[name] = val;\n });\n return css;\n }, {}));\n var parsedProps = {};\n for (var i = 0; i < this.properties.length; i++) {\n var prop = this.properties[i];\n if (prop.pointsTo) {\n continue;\n }\n var name = prop.name;\n var val = rawProps[name];\n var parsedProp = this.parse(name, val);\n parsedProps[name] = parsedProp;\n }\n _p.defaultProperties = parsedProps;\n return _p.defaultProperties;\n};\nstyfn$2.addDefaultStylesheet = function () {\n this.selector(':parent').css({\n 'shape': 'rectangle',\n 'padding': 10,\n 'background-color': '#eee',\n 'border-color': '#ccc',\n 'border-width': 1\n }).selector('edge').css({\n 'width': 3\n }).selector(':loop').css({\n 'curve-style': 'bezier'\n }).selector('edge:compound').css({\n 'curve-style': 'bezier',\n 'source-endpoint': 'outside-to-line',\n 'target-endpoint': 'outside-to-line'\n }).selector(':selected').css({\n 'background-color': '#0169D9',\n 'line-color': '#0169D9',\n 'source-arrow-color': '#0169D9',\n 'target-arrow-color': '#0169D9',\n 'mid-source-arrow-color': '#0169D9',\n 'mid-target-arrow-color': '#0169D9'\n }).selector(':parent:selected').css({\n 'background-color': '#CCE1F9',\n 'border-color': '#aec8e5'\n }).selector(':active').css({\n 'overlay-color': 'black',\n 'overlay-padding': 10,\n 'overlay-opacity': 0.25\n });\n this.defaultLength = this.length;\n};\n\nvar styfn$1 = {};\n\n// a caching layer for property parsing\nstyfn$1.parse = function (name, value, propIsBypass, propIsFlat) {\n var self = this;\n\n // function values can't be cached in all cases, and there isn't much benefit of caching them anyway\n if (fn$6(value)) {\n return self.parseImplWarn(name, value, propIsBypass, propIsFlat);\n }\n var flatKey = propIsFlat === 'mapping' || propIsFlat === true || propIsFlat === false || propIsFlat == null ? 'dontcare' : propIsFlat;\n var bypassKey = propIsBypass ? 't' : 'f';\n var valueKey = '' + value;\n var argHash = hashStrings(name, valueKey, bypassKey, flatKey);\n var propCache = self.propCache = self.propCache || [];\n var ret;\n if (!(ret = propCache[argHash])) {\n ret = propCache[argHash] = self.parseImplWarn(name, value, propIsBypass, propIsFlat);\n }\n\n // - bypasses can't be shared b/c the value can be changed by animations or otherwise overridden\n // - mappings can't be shared b/c mappings are per-element\n if (propIsBypass || propIsFlat === 'mapping') {\n // need a copy since props are mutated later in their lifecycles\n ret = copy(ret);\n if (ret) {\n ret.value = copy(ret.value); // because it could be an array, e.g. colour\n }\n }\n return ret;\n};\nstyfn$1.parseImplWarn = function (name, value, propIsBypass, propIsFlat) {\n var prop = this.parseImpl(name, value, propIsBypass, propIsFlat);\n if (!prop && value != null) {\n warn(\"The style property `\".concat(name, \": \").concat(value, \"` is invalid\"));\n }\n if (prop && (prop.name === 'width' || prop.name === 'height') && value === 'label') {\n warn('The style value of `label` is deprecated for `' + prop.name + '`');\n }\n return prop;\n};\n\n// parse a property; return null on invalid; return parsed property otherwise\n// fields :\n// - name : the name of the property\n// - value : the parsed, native-typed value of the property\n// - strValue : a string value that represents the property value in valid css\n// - bypass : true iff the property is a bypass property\nstyfn$1.parseImpl = function (name, value, propIsBypass, propIsFlat) {\n var self = this;\n name = camel2dash(name); // make sure the property name is in dash form (e.g. 'property-name' not 'propertyName')\n\n var property = self.properties[name];\n var passedValue = value;\n var types = self.types;\n if (!property) {\n return null;\n } // return null on property of unknown name\n if (value === undefined) {\n return null;\n } // can't assign undefined\n\n // the property may be an alias\n if (property.alias) {\n property = property.pointsTo;\n name = property.name;\n }\n var valueIsString = string(value);\n if (valueIsString) {\n // trim the value to make parsing easier\n value = value.trim();\n }\n var type = property.type;\n if (!type) {\n return null;\n } // no type, no luck\n\n // check if bypass is null or empty string (i.e. indication to delete bypass property)\n if (propIsBypass && (value === '' || value === null)) {\n return {\n name: name,\n value: value,\n bypass: true,\n deleteBypass: true\n };\n }\n\n // check if value is a function used as a mapper\n if (fn$6(value)) {\n return {\n name: name,\n value: value,\n strValue: 'fn',\n mapped: types.fn,\n bypass: propIsBypass\n };\n }\n\n // check if value is mapped\n var data, mapData;\n if (!valueIsString || propIsFlat || value.length < 7 || value[1] !== 'a') ; else if (value.length >= 7 && value[0] === 'd' && (data = new RegExp(types.data.regex).exec(value))) {\n if (propIsBypass) {\n return false;\n } // mappers not allowed in bypass\n\n var mapped = types.data;\n return {\n name: name,\n value: data,\n strValue: '' + value,\n mapped: mapped,\n field: data[1],\n bypass: propIsBypass\n };\n } else if (value.length >= 10 && value[0] === 'm' && (mapData = new RegExp(types.mapData.regex).exec(value))) {\n if (propIsBypass) {\n return false;\n } // mappers not allowed in bypass\n if (type.multiple) {\n return false;\n } // impossible to map to num\n\n var _mapped = types.mapData;\n\n // we can map only if the type is a colour or a number\n if (!(type.color || type.number)) {\n return false;\n }\n var valueMin = this.parse(name, mapData[4]); // parse to validate\n if (!valueMin || valueMin.mapped) {\n return false;\n } // can't be invalid or mapped\n\n var valueMax = this.parse(name, mapData[5]); // parse to validate\n if (!valueMax || valueMax.mapped) {\n return false;\n } // can't be invalid or mapped\n\n // check if valueMin and valueMax are the same\n if (valueMin.pfValue === valueMax.pfValue || valueMin.strValue === valueMax.strValue) {\n warn('`' + name + ': ' + value + '` is not a valid mapper because the output range is zero; converting to `' + name + ': ' + valueMin.strValue + '`');\n return this.parse(name, valueMin.strValue); // can't make much of a mapper without a range\n } else if (type.color) {\n var c1 = valueMin.value;\n var c2 = valueMax.value;\n var same = c1[0] === c2[0] // red\n && c1[1] === c2[1] // green\n && c1[2] === c2[2] // blue\n && (\n // optional alpha\n c1[3] === c2[3] // same alpha outright\n || (c1[3] == null || c1[3] === 1 // full opacity for colour 1?\n ) && (c2[3] == null || c2[3] === 1) // full opacity for colour 2?\n );\n if (same) {\n return false;\n } // can't make a mapper without a range\n }\n return {\n name: name,\n value: mapData,\n strValue: '' + value,\n mapped: _mapped,\n field: mapData[1],\n fieldMin: parseFloat(mapData[2]),\n // min & max are numeric\n fieldMax: parseFloat(mapData[3]),\n valueMin: valueMin.value,\n valueMax: valueMax.value,\n bypass: propIsBypass\n };\n }\n if (type.multiple && propIsFlat !== 'multiple') {\n var vals;\n if (valueIsString) {\n vals = value.split(/\\s+/);\n } else if (array(value)) {\n vals = value;\n } else {\n vals = [value];\n }\n if (type.evenMultiple && vals.length % 2 !== 0) {\n return null;\n }\n var valArr = [];\n var unitsArr = [];\n var pfValArr = [];\n var strVal = '';\n var hasEnum = false;\n for (var i = 0; i < vals.length; i++) {\n var p = self.parse(name, vals[i], propIsBypass, 'multiple');\n hasEnum = hasEnum || string(p.value);\n valArr.push(p.value);\n pfValArr.push(p.pfValue != null ? p.pfValue : p.value);\n unitsArr.push(p.units);\n strVal += (i > 0 ? ' ' : '') + p.strValue;\n }\n if (type.validate && !type.validate(valArr, unitsArr)) {\n return null;\n }\n if (type.singleEnum && hasEnum) {\n if (valArr.length === 1 && string(valArr[0])) {\n return {\n name: name,\n value: valArr[0],\n strValue: valArr[0],\n bypass: propIsBypass\n };\n } else {\n return null;\n }\n }\n return {\n name: name,\n value: valArr,\n pfValue: pfValArr,\n strValue: strVal,\n bypass: propIsBypass,\n units: unitsArr\n };\n }\n\n // several types also allow enums\n var checkEnums = function checkEnums() {\n for (var _i = 0; _i < type.enums.length; _i++) {\n var en = type.enums[_i];\n if (en === value) {\n return {\n name: name,\n value: value,\n strValue: '' + value,\n bypass: propIsBypass\n };\n }\n }\n return null;\n };\n\n // check the type and return the appropriate object\n if (type.number) {\n var units;\n var implicitUnits = 'px'; // not set => px\n\n if (type.units) {\n // use specified units if set\n units = type.units;\n }\n if (type.implicitUnits) {\n implicitUnits = type.implicitUnits;\n }\n if (!type.unitless) {\n if (valueIsString) {\n var unitsRegex = 'px|em' + (type.allowPercent ? '|\\\\%' : '');\n if (units) {\n unitsRegex = units;\n } // only allow explicit units if so set\n var match = value.match('^(' + number + ')(' + unitsRegex + ')?' + '$');\n if (match) {\n value = match[1];\n units = match[2] || implicitUnits;\n }\n } else if (!units || type.implicitUnits) {\n units = implicitUnits; // implicitly px if unspecified\n }\n }\n value = parseFloat(value);\n\n // if not a number and enums not allowed, then the value is invalid\n if (isNaN(value) && type.enums === undefined) {\n return null;\n }\n\n // check if this number type also accepts special keywords in place of numbers\n // (i.e. `left`, `auto`, etc)\n if (isNaN(value) && type.enums !== undefined) {\n value = passedValue;\n return checkEnums();\n }\n\n // check if value must be an integer\n if (type.integer && !integer(value)) {\n return null;\n }\n\n // check value is within range\n if (type.min !== undefined && (value < type.min || type.strictMin && value === type.min) || type.max !== undefined && (value > type.max || type.strictMax && value === type.max)) {\n return null;\n }\n var ret = {\n name: name,\n value: value,\n strValue: '' + value + (units ? units : ''),\n units: units,\n bypass: propIsBypass\n };\n\n // normalise value in pixels\n if (type.unitless || units !== 'px' && units !== 'em') {\n ret.pfValue = value;\n } else {\n ret.pfValue = units === 'px' || !units ? value : this.getEmSizeInPixels() * value;\n }\n\n // normalise value in ms\n if (units === 'ms' || units === 's') {\n ret.pfValue = units === 'ms' ? value : 1000 * value;\n }\n\n // normalise value in rad\n if (units === 'deg' || units === 'rad') {\n ret.pfValue = units === 'rad' ? value : deg2rad(value);\n }\n\n // normalize value in %\n if (units === '%') {\n ret.pfValue = value / 100;\n }\n return ret;\n } else if (type.propList) {\n var props = [];\n var propsStr = '' + value;\n if (propsStr === 'none') ; else {\n // go over each prop\n\n var propsSplit = propsStr.split(/\\s*,\\s*|\\s+/);\n for (var _i2 = 0; _i2 < propsSplit.length; _i2++) {\n var propName = propsSplit[_i2].trim();\n if (self.properties[propName]) {\n props.push(propName);\n } else {\n warn('`' + propName + '` is not a valid property name');\n }\n }\n if (props.length === 0) {\n return null;\n }\n }\n return {\n name: name,\n value: props,\n strValue: props.length === 0 ? 'none' : props.join(' '),\n bypass: propIsBypass\n };\n } else if (type.color) {\n var tuple = color2tuple(value);\n if (!tuple) {\n return null;\n }\n return {\n name: name,\n value: tuple,\n pfValue: tuple,\n strValue: 'rgb(' + tuple[0] + ',' + tuple[1] + ',' + tuple[2] + ')',\n // n.b. no spaces b/c of multiple support\n bypass: propIsBypass\n };\n } else if (type.regex || type.regexes) {\n // first check enums\n if (type.enums) {\n var enumProp = checkEnums();\n if (enumProp) {\n return enumProp;\n }\n }\n var regexes = type.regexes ? type.regexes : [type.regex];\n for (var _i3 = 0; _i3 < regexes.length; _i3++) {\n var regex = new RegExp(regexes[_i3]); // make a regex from the type string\n var m = regex.exec(value);\n if (m) {\n // regex matches\n return {\n name: name,\n value: type.singleRegexMatchValue ? m[1] : m,\n strValue: '' + value,\n bypass: propIsBypass\n };\n }\n }\n return null; // didn't match any\n } else if (type.string) {\n // just return\n return {\n name: name,\n value: '' + value,\n strValue: '' + value,\n bypass: propIsBypass\n };\n } else if (type.enums) {\n // check enums last because it's a combo type in others\n return checkEnums();\n } else {\n return null; // not a type we can handle\n }\n};\n\nvar _Style = function Style(cy) {\n if (!(this instanceof _Style)) {\n return new _Style(cy);\n }\n if (!core(cy)) {\n error('A style must have a core reference');\n return;\n }\n this._private = {\n cy: cy,\n coreStyle: {}\n };\n this.length = 0;\n this.resetToDefault();\n};\nvar styfn = _Style.prototype;\nstyfn.instanceString = function () {\n return 'style';\n};\n\n// remove all contexts\nstyfn.clear = function () {\n var _p = this._private;\n var cy = _p.cy;\n var eles = cy.elements();\n for (var i = 0; i < this.length; i++) {\n this[i] = undefined;\n }\n this.length = 0;\n _p.contextStyles = {};\n _p.propDiffs = {};\n this.cleanElements(eles, true);\n eles.forEach(function (ele) {\n var ele_p = ele[0]._private;\n ele_p.styleDirty = true;\n ele_p.appliedInitStyle = false;\n });\n return this; // chaining\n};\nstyfn.resetToDefault = function () {\n this.clear();\n this.addDefaultStylesheet();\n return this;\n};\n\n// builds a style object for the 'core' selector\nstyfn.core = function (propName) {\n return this._private.coreStyle[propName] || this.getDefaultProperty(propName);\n};\n\n// create a new context from the specified selector string and switch to that context\nstyfn.selector = function (selectorStr) {\n // 'core' is a special case and does not need a selector\n var selector = selectorStr === 'core' ? null : new Selector(selectorStr);\n var i = this.length++; // new context means new index\n this[i] = {\n selector: selector,\n properties: [],\n mappedProperties: [],\n index: i\n };\n return this; // chaining\n};\n\n// add one or many css rules to the current context\nstyfn.css = function () {\n var self = this;\n var args = arguments;\n if (args.length === 1) {\n var map = args[0];\n for (var i = 0; i < self.properties.length; i++) {\n var prop = self.properties[i];\n var mapVal = map[prop.name];\n if (mapVal === undefined) {\n mapVal = map[dash2camel(prop.name)];\n }\n if (mapVal !== undefined) {\n this.cssRule(prop.name, mapVal);\n }\n }\n } else if (args.length === 2) {\n this.cssRule(args[0], args[1]);\n }\n\n // do nothing if args are invalid\n\n return this; // chaining\n};\nstyfn.style = styfn.css;\n\n// add a single css rule to the current context\nstyfn.cssRule = function (name, value) {\n // name-value pair\n var property = this.parse(name, value);\n\n // add property to current context if valid\n if (property) {\n var i = this.length - 1;\n this[i].properties.push(property);\n this[i].properties[property.name] = property; // allow access by name as well\n\n if (property.name.match(/pie-(\\d+)-background-size/) && property.value) {\n this._private.hasPie = true;\n }\n if (property.mapped) {\n this[i].mappedProperties.push(property);\n }\n\n // add to core style if necessary\n var currentSelectorIsCore = !this[i].selector;\n if (currentSelectorIsCore) {\n this._private.coreStyle[property.name] = property;\n }\n }\n return this; // chaining\n};\nstyfn.append = function (style) {\n if (stylesheet(style)) {\n style.appendToStyle(this);\n } else if (array(style)) {\n this.appendFromJson(style);\n } else if (string(style)) {\n this.appendFromString(style);\n } // you probably wouldn't want to append a Style, since you'd duplicate the default parts\n\n return this;\n};\n\n// static function\n_Style.fromJson = function (cy, json) {\n var style = new _Style(cy);\n style.fromJson(json);\n return style;\n};\n_Style.fromString = function (cy, string) {\n return new _Style(cy).fromString(string);\n};\n[styfn$8, styfn$7, styfn$6, styfn$5, styfn$4, styfn$3, styfn$2, styfn$1].forEach(function (props) {\n extend(styfn, props);\n});\n_Style.types = styfn.types;\n_Style.properties = styfn.properties;\n_Style.propertyGroups = styfn.propertyGroups;\n_Style.propertyGroupNames = styfn.propertyGroupNames;\n_Style.propertyGroupKeys = styfn.propertyGroupKeys;\n\nvar corefn$2 = {\n style: function style(newStyle) {\n if (newStyle) {\n var s = this.setStyle(newStyle);\n s.update();\n }\n return this._private.style;\n },\n setStyle: function setStyle(style) {\n var _p = this._private;\n if (stylesheet(style)) {\n _p.style = style.generateStyle(this);\n } else if (array(style)) {\n _p.style = _Style.fromJson(this, style);\n } else if (string(style)) {\n _p.style = _Style.fromString(this, style);\n } else {\n _p.style = _Style(this);\n }\n return _p.style;\n },\n // e.g. cy.data() changed => recalc ele mappers\n updateStyle: function updateStyle() {\n this.mutableElements().updateStyle(); // just send to all eles\n }\n};\n\nvar defaultSelectionType = 'single';\nvar corefn$1 = {\n autolock: function autolock(bool) {\n if (bool !== undefined) {\n this._private.autolock = bool ? true : false;\n } else {\n return this._private.autolock;\n }\n return this; // chaining\n },\n autoungrabify: function autoungrabify(bool) {\n if (bool !== undefined) {\n this._private.autoungrabify = bool ? true : false;\n } else {\n return this._private.autoungrabify;\n }\n return this; // chaining\n },\n autounselectify: function autounselectify(bool) {\n if (bool !== undefined) {\n this._private.autounselectify = bool ? true : false;\n } else {\n return this._private.autounselectify;\n }\n return this; // chaining\n },\n selectionType: function selectionType(selType) {\n var _p = this._private;\n if (_p.selectionType == null) {\n _p.selectionType = defaultSelectionType;\n }\n if (selType !== undefined) {\n if (selType === 'additive' || selType === 'single') {\n _p.selectionType = selType;\n }\n } else {\n return _p.selectionType;\n }\n return this;\n },\n panningEnabled: function panningEnabled(bool) {\n if (bool !== undefined) {\n this._private.panningEnabled = bool ? true : false;\n } else {\n return this._private.panningEnabled;\n }\n return this; // chaining\n },\n userPanningEnabled: function userPanningEnabled(bool) {\n if (bool !== undefined) {\n this._private.userPanningEnabled = bool ? true : false;\n } else {\n return this._private.userPanningEnabled;\n }\n return this; // chaining\n },\n zoomingEnabled: function zoomingEnabled(bool) {\n if (bool !== undefined) {\n this._private.zoomingEnabled = bool ? true : false;\n } else {\n return this._private.zoomingEnabled;\n }\n return this; // chaining\n },\n userZoomingEnabled: function userZoomingEnabled(bool) {\n if (bool !== undefined) {\n this._private.userZoomingEnabled = bool ? true : false;\n } else {\n return this._private.userZoomingEnabled;\n }\n return this; // chaining\n },\n boxSelectionEnabled: function boxSelectionEnabled(bool) {\n if (bool !== undefined) {\n this._private.boxSelectionEnabled = bool ? true : false;\n } else {\n return this._private.boxSelectionEnabled;\n }\n return this; // chaining\n },\n pan: function pan() {\n var args = arguments;\n var pan = this._private.pan;\n var dim, val, dims, x, y;\n switch (args.length) {\n case 0:\n // .pan()\n return pan;\n case 1:\n if (string(args[0])) {\n // .pan('x')\n dim = args[0];\n return pan[dim];\n } else if (plainObject(args[0])) {\n // .pan({ x: 0, y: 100 })\n if (!this._private.panningEnabled) {\n return this;\n }\n dims = args[0];\n x = dims.x;\n y = dims.y;\n if (number$1(x)) {\n pan.x = x;\n }\n if (number$1(y)) {\n pan.y = y;\n }\n this.emit('pan viewport');\n }\n break;\n case 2:\n // .pan('x', 100)\n if (!this._private.panningEnabled) {\n return this;\n }\n dim = args[0];\n val = args[1];\n if ((dim === 'x' || dim === 'y') && number$1(val)) {\n pan[dim] = val;\n }\n this.emit('pan viewport');\n break;\n // invalid\n }\n this.notify('viewport');\n return this; // chaining\n },\n panBy: function panBy(arg0, arg1) {\n var args = arguments;\n var pan = this._private.pan;\n var dim, val, dims, x, y;\n if (!this._private.panningEnabled) {\n return this;\n }\n switch (args.length) {\n case 1:\n if (plainObject(arg0)) {\n // .panBy({ x: 0, y: 100 })\n dims = args[0];\n x = dims.x;\n y = dims.y;\n if (number$1(x)) {\n pan.x += x;\n }\n if (number$1(y)) {\n pan.y += y;\n }\n this.emit('pan viewport');\n }\n break;\n case 2:\n // .panBy('x', 100)\n dim = arg0;\n val = arg1;\n if ((dim === 'x' || dim === 'y') && number$1(val)) {\n pan[dim] += val;\n }\n this.emit('pan viewport');\n break;\n // invalid\n }\n this.notify('viewport');\n return this; // chaining\n },\n gc: function gc() {\n this.notify('gc');\n },\n fit: function fit(elements, padding) {\n var viewportState = this.getFitViewport(elements, padding);\n if (viewportState) {\n var _p = this._private;\n _p.zoom = viewportState.zoom;\n _p.pan = viewportState.pan;\n this.emit('pan zoom viewport');\n this.notify('viewport');\n }\n return this; // chaining\n },\n getFitViewport: function getFitViewport(elements, padding) {\n if (number$1(elements) && padding === undefined) {\n // elements is optional\n padding = elements;\n elements = undefined;\n }\n if (!this._private.panningEnabled || !this._private.zoomingEnabled) {\n return;\n }\n var bb;\n if (string(elements)) {\n var sel = elements;\n elements = this.$(sel);\n } else if (boundingBox(elements)) {\n // assume bb\n var bbe = elements;\n bb = {\n x1: bbe.x1,\n y1: bbe.y1,\n x2: bbe.x2,\n y2: bbe.y2\n };\n bb.w = bb.x2 - bb.x1;\n bb.h = bb.y2 - bb.y1;\n } else if (!elementOrCollection(elements)) {\n elements = this.mutableElements();\n }\n if (elementOrCollection(elements) && elements.empty()) {\n return;\n } // can't fit to nothing\n\n bb = bb || elements.boundingBox();\n var w = this.width();\n var h = this.height();\n var zoom;\n padding = number$1(padding) ? padding : 0;\n if (!isNaN(w) && !isNaN(h) && w > 0 && h > 0 && !isNaN(bb.w) && !isNaN(bb.h) && bb.w > 0 && bb.h > 0) {\n zoom = Math.min((w - 2 * padding) / bb.w, (h - 2 * padding) / bb.h);\n\n // crop zoom\n zoom = zoom > this._private.maxZoom ? this._private.maxZoom : zoom;\n zoom = zoom < this._private.minZoom ? this._private.minZoom : zoom;\n var pan = {\n // now pan to middle\n x: (w - zoom * (bb.x1 + bb.x2)) / 2,\n y: (h - zoom * (bb.y1 + bb.y2)) / 2\n };\n return {\n zoom: zoom,\n pan: pan\n };\n }\n return;\n },\n zoomRange: function zoomRange(min, max) {\n var _p = this._private;\n if (max == null) {\n var opts = min;\n min = opts.min;\n max = opts.max;\n }\n if (number$1(min) && number$1(max) && min <= max) {\n _p.minZoom = min;\n _p.maxZoom = max;\n } else if (number$1(min) && max === undefined && min <= _p.maxZoom) {\n _p.minZoom = min;\n } else if (number$1(max) && min === undefined && max >= _p.minZoom) {\n _p.maxZoom = max;\n }\n return this;\n },\n minZoom: function minZoom(zoom) {\n if (zoom === undefined) {\n return this._private.minZoom;\n } else {\n return this.zoomRange({\n min: zoom\n });\n }\n },\n maxZoom: function maxZoom(zoom) {\n if (zoom === undefined) {\n return this._private.maxZoom;\n } else {\n return this.zoomRange({\n max: zoom\n });\n }\n },\n getZoomedViewport: function getZoomedViewport(params) {\n var _p = this._private;\n var currentPan = _p.pan;\n var currentZoom = _p.zoom;\n var pos; // in rendered px\n var zoom;\n var bail = false;\n if (!_p.zoomingEnabled) {\n // zooming disabled\n bail = true;\n }\n if (number$1(params)) {\n // then set the zoom\n zoom = params;\n } else if (plainObject(params)) {\n // then zoom about a point\n zoom = params.level;\n if (params.position != null) {\n pos = modelToRenderedPosition$1(params.position, currentZoom, currentPan);\n } else if (params.renderedPosition != null) {\n pos = params.renderedPosition;\n }\n if (pos != null && !_p.panningEnabled) {\n // panning disabled\n bail = true;\n }\n }\n\n // crop zoom\n zoom = zoom > _p.maxZoom ? _p.maxZoom : zoom;\n zoom = zoom < _p.minZoom ? _p.minZoom : zoom;\n\n // can't zoom with invalid params\n if (bail || !number$1(zoom) || zoom === currentZoom || pos != null && (!number$1(pos.x) || !number$1(pos.y))) {\n return null;\n }\n if (pos != null) {\n // set zoom about position\n var pan1 = currentPan;\n var zoom1 = currentZoom;\n var zoom2 = zoom;\n var pan2 = {\n x: -zoom2 / zoom1 * (pos.x - pan1.x) + pos.x,\n y: -zoom2 / zoom1 * (pos.y - pan1.y) + pos.y\n };\n return {\n zoomed: true,\n panned: true,\n zoom: zoom2,\n pan: pan2\n };\n } else {\n // just set the zoom\n return {\n zoomed: true,\n panned: false,\n zoom: zoom,\n pan: currentPan\n };\n }\n },\n zoom: function zoom(params) {\n if (params === undefined) {\n // get\n return this._private.zoom;\n } else {\n // set\n var vp = this.getZoomedViewport(params);\n var _p = this._private;\n if (vp == null || !vp.zoomed) {\n return this;\n }\n _p.zoom = vp.zoom;\n if (vp.panned) {\n _p.pan.x = vp.pan.x;\n _p.pan.y = vp.pan.y;\n }\n this.emit('zoom' + (vp.panned ? ' pan' : '') + ' viewport');\n this.notify('viewport');\n return this; // chaining\n }\n },\n viewport: function viewport(opts) {\n var _p = this._private;\n var zoomDefd = true;\n var panDefd = true;\n var events = []; // to trigger\n var zoomFailed = false;\n var panFailed = false;\n if (!opts) {\n return this;\n }\n if (!number$1(opts.zoom)) {\n zoomDefd = false;\n }\n if (!plainObject(opts.pan)) {\n panDefd = false;\n }\n if (!zoomDefd && !panDefd) {\n return this;\n }\n if (zoomDefd) {\n var z = opts.zoom;\n if (z < _p.minZoom || z > _p.maxZoom || !_p.zoomingEnabled) {\n zoomFailed = true;\n } else {\n _p.zoom = z;\n events.push('zoom');\n }\n }\n if (panDefd && (!zoomFailed || !opts.cancelOnFailedZoom) && _p.panningEnabled) {\n var p = opts.pan;\n if (number$1(p.x)) {\n _p.pan.x = p.x;\n panFailed = false;\n }\n if (number$1(p.y)) {\n _p.pan.y = p.y;\n panFailed = false;\n }\n if (!panFailed) {\n events.push('pan');\n }\n }\n if (events.length > 0) {\n events.push('viewport');\n this.emit(events.join(' '));\n this.notify('viewport');\n }\n return this; // chaining\n },\n center: function center(elements) {\n var pan = this.getCenterPan(elements);\n if (pan) {\n this._private.pan = pan;\n this.emit('pan viewport');\n this.notify('viewport');\n }\n return this; // chaining\n },\n getCenterPan: function getCenterPan(elements, zoom) {\n if (!this._private.panningEnabled) {\n return;\n }\n if (string(elements)) {\n var selector = elements;\n elements = this.mutableElements().filter(selector);\n } else if (!elementOrCollection(elements)) {\n elements = this.mutableElements();\n }\n if (elements.length === 0) {\n return;\n } // can't centre pan to nothing\n\n var bb = elements.boundingBox();\n var w = this.width();\n var h = this.height();\n zoom = zoom === undefined ? this._private.zoom : zoom;\n var pan = {\n // middle\n x: (w - zoom * (bb.x1 + bb.x2)) / 2,\n y: (h - zoom * (bb.y1 + bb.y2)) / 2\n };\n return pan;\n },\n reset: function reset() {\n if (!this._private.panningEnabled || !this._private.zoomingEnabled) {\n return this;\n }\n this.viewport({\n pan: {\n x: 0,\n y: 0\n },\n zoom: 1\n });\n return this; // chaining\n },\n invalidateSize: function invalidateSize() {\n this._private.sizeCache = null;\n },\n size: function size() {\n var _p = this._private;\n var container = _p.container;\n var cy = this;\n return _p.sizeCache = _p.sizeCache || (container ? function () {\n var style = cy.window().getComputedStyle(container);\n var val = function val(name) {\n return parseFloat(style.getPropertyValue(name));\n };\n return {\n width: container.clientWidth - val('padding-left') - val('padding-right'),\n height: container.clientHeight - val('padding-top') - val('padding-bottom')\n };\n }() : {\n // fallback if no container (not 0 b/c can be used for dividing etc)\n width: 1,\n height: 1\n });\n },\n width: function width() {\n return this.size().width;\n },\n height: function height() {\n return this.size().height;\n },\n extent: function extent() {\n var pan = this._private.pan;\n var zoom = this._private.zoom;\n var rb = this.renderedExtent();\n var b = {\n x1: (rb.x1 - pan.x) / zoom,\n x2: (rb.x2 - pan.x) / zoom,\n y1: (rb.y1 - pan.y) / zoom,\n y2: (rb.y2 - pan.y) / zoom\n };\n b.w = b.x2 - b.x1;\n b.h = b.y2 - b.y1;\n return b;\n },\n renderedExtent: function renderedExtent() {\n var width = this.width();\n var height = this.height();\n return {\n x1: 0,\n y1: 0,\n x2: width,\n y2: height,\n w: width,\n h: height\n };\n },\n multiClickDebounceTime: function multiClickDebounceTime(_int) {\n if (_int) this._private.multiClickDebounceTime = _int;else return this._private.multiClickDebounceTime;\n return this; // chaining\n }\n};\n\n// aliases\ncorefn$1.centre = corefn$1.center;\n\n// backwards compatibility\ncorefn$1.autolockNodes = corefn$1.autolock;\ncorefn$1.autoungrabifyNodes = corefn$1.autoungrabify;\n\nvar fn = {\n data: define.data({\n field: 'data',\n bindingEvent: 'data',\n allowBinding: true,\n allowSetting: true,\n settingEvent: 'data',\n settingTriggersEvent: true,\n triggerFnName: 'trigger',\n allowGetting: true,\n updateStyle: true\n }),\n removeData: define.removeData({\n field: 'data',\n event: 'data',\n triggerFnName: 'trigger',\n triggerEvent: true,\n updateStyle: true\n }),\n scratch: define.data({\n field: 'scratch',\n bindingEvent: 'scratch',\n allowBinding: true,\n allowSetting: true,\n settingEvent: 'scratch',\n settingTriggersEvent: true,\n triggerFnName: 'trigger',\n allowGetting: true,\n updateStyle: true\n }),\n removeScratch: define.removeData({\n field: 'scratch',\n event: 'scratch',\n triggerFnName: 'trigger',\n triggerEvent: true,\n updateStyle: true\n })\n};\n\n// aliases\nfn.attr = fn.data;\nfn.removeAttr = fn.removeData;\n\nvar Core = function Core(opts) {\n var cy = this;\n opts = extend({}, opts);\n var container = opts.container;\n\n // allow for passing a wrapped jquery object\n // e.g. cytoscape({ container: $('#cy') })\n if (container && !htmlElement(container) && htmlElement(container[0])) {\n container = container[0];\n }\n var reg = container ? container._cyreg : null; // e.g. already registered some info (e.g. readies) via jquery\n reg = reg || {};\n if (reg && reg.cy) {\n reg.cy.destroy();\n reg = {}; // old instance => replace reg completely\n }\n var readies = reg.readies = reg.readies || [];\n if (container) {\n container._cyreg = reg;\n } // make sure container assoc'd reg points to this cy\n reg.cy = cy;\n var head = _window !== undefined && container !== undefined && !opts.headless;\n var options = opts;\n options.layout = extend({\n name: head ? 'grid' : 'null'\n }, options.layout);\n options.renderer = extend({\n name: head ? 'canvas' : 'null'\n }, options.renderer);\n var defVal = function defVal(def, val, altVal) {\n if (val !== undefined) {\n return val;\n } else if (altVal !== undefined) {\n return altVal;\n } else {\n return def;\n }\n };\n var _p = this._private = {\n container: container,\n // html dom ele container\n ready: false,\n // whether ready has been triggered\n options: options,\n // cached options\n elements: new Collection(this),\n // elements in the graph\n listeners: [],\n // list of listeners\n aniEles: new Collection(this),\n // elements being animated\n data: options.data || {},\n // data for the core\n scratch: {},\n // scratch object for core\n layout: null,\n renderer: null,\n destroyed: false,\n // whether destroy was called\n notificationsEnabled: true,\n // whether notifications are sent to the renderer\n minZoom: 1e-50,\n maxZoom: 1e50,\n zoomingEnabled: defVal(true, options.zoomingEnabled),\n userZoomingEnabled: defVal(true, options.userZoomingEnabled),\n panningEnabled: defVal(true, options.panningEnabled),\n userPanningEnabled: defVal(true, options.userPanningEnabled),\n boxSelectionEnabled: defVal(true, options.boxSelectionEnabled),\n autolock: defVal(false, options.autolock, options.autolockNodes),\n autoungrabify: defVal(false, options.autoungrabify, options.autoungrabifyNodes),\n autounselectify: defVal(false, options.autounselectify),\n styleEnabled: options.styleEnabled === undefined ? head : options.styleEnabled,\n zoom: number$1(options.zoom) ? options.zoom : 1,\n pan: {\n x: plainObject(options.pan) && number$1(options.pan.x) ? options.pan.x : 0,\n y: plainObject(options.pan) && number$1(options.pan.y) ? options.pan.y : 0\n },\n animation: {\n // object for currently-running animations\n current: [],\n queue: []\n },\n hasCompoundNodes: false,\n multiClickDebounceTime: defVal(250, options.multiClickDebounceTime)\n };\n this.createEmitter();\n\n // set selection type\n this.selectionType(options.selectionType);\n\n // init zoom bounds\n this.zoomRange({\n min: options.minZoom,\n max: options.maxZoom\n });\n var loadExtData = function loadExtData(extData, next) {\n var anyIsPromise = extData.some(promise);\n if (anyIsPromise) {\n return Promise$1.all(extData).then(next); // load all data asynchronously, then exec rest of init\n } else {\n next(extData); // exec synchronously for convenience\n }\n };\n\n // start with the default stylesheet so we have something before loading an external stylesheet\n if (_p.styleEnabled) {\n cy.setStyle([]);\n }\n\n // create the renderer\n var rendererOptions = extend({}, options, options.renderer); // allow rendering hints in top level options\n cy.initRenderer(rendererOptions);\n var setElesAndLayout = function setElesAndLayout(elements, onload, ondone) {\n cy.notifications(false);\n\n // remove old elements\n var oldEles = cy.mutableElements();\n if (oldEles.length > 0) {\n oldEles.remove();\n }\n if (elements != null) {\n if (plainObject(elements) || array(elements)) {\n cy.add(elements);\n }\n }\n cy.one('layoutready', function (e) {\n cy.notifications(true);\n cy.emit(e); // we missed this event by turning notifications off, so pass it on\n\n cy.one('load', onload);\n cy.emitAndNotify('load');\n }).one('layoutstop', function () {\n cy.one('done', ondone);\n cy.emit('done');\n });\n var layoutOpts = extend({}, cy._private.options.layout);\n layoutOpts.eles = cy.elements();\n cy.layout(layoutOpts).run();\n };\n loadExtData([options.style, options.elements], function (thens) {\n var initStyle = thens[0];\n var initEles = thens[1];\n\n // init style\n if (_p.styleEnabled) {\n cy.style().append(initStyle);\n }\n\n // initial load\n setElesAndLayout(initEles, function () {\n // onready\n cy.startAnimationLoop();\n _p.ready = true;\n\n // if a ready callback is specified as an option, the bind it\n if (fn$6(options.ready)) {\n cy.on('ready', options.ready);\n }\n\n // bind all the ready handlers registered before creating this instance\n for (var i = 0; i < readies.length; i++) {\n var fn = readies[i];\n cy.on('ready', fn);\n }\n if (reg) {\n reg.readies = [];\n } // clear b/c we've bound them all and don't want to keep it around in case a new core uses the same div etc\n\n cy.emit('ready');\n }, options.done);\n });\n};\nvar corefn = Core.prototype; // short alias\n\nextend(corefn, {\n instanceString: function instanceString() {\n return 'core';\n },\n isReady: function isReady() {\n return this._private.ready;\n },\n destroyed: function destroyed() {\n return this._private.destroyed;\n },\n ready: function ready(fn) {\n if (this.isReady()) {\n this.emitter().emit('ready', [], fn); // just calls fn as though triggered via ready event\n } else {\n this.on('ready', fn);\n }\n return this;\n },\n destroy: function destroy() {\n var cy = this;\n if (cy.destroyed()) return;\n cy.stopAnimationLoop();\n cy.destroyRenderer();\n this.emit('destroy');\n cy._private.destroyed = true;\n return cy;\n },\n hasElementWithId: function hasElementWithId(id) {\n return this._private.elements.hasElementWithId(id);\n },\n getElementById: function getElementById(id) {\n return this._private.elements.getElementById(id);\n },\n hasCompoundNodes: function hasCompoundNodes() {\n return this._private.hasCompoundNodes;\n },\n headless: function headless() {\n return this._private.renderer.isHeadless();\n },\n styleEnabled: function styleEnabled() {\n return this._private.styleEnabled;\n },\n addToPool: function addToPool(eles) {\n this._private.elements.merge(eles);\n return this; // chaining\n },\n removeFromPool: function removeFromPool(eles) {\n this._private.elements.unmerge(eles);\n return this;\n },\n container: function container() {\n return this._private.container || null;\n },\n window: function window() {\n var container = this._private.container;\n if (container == null) return _window;\n var ownerDocument = this._private.container.ownerDocument;\n if (ownerDocument === undefined || ownerDocument == null) {\n return _window;\n }\n return ownerDocument.defaultView || _window;\n },\n mount: function mount(container) {\n if (container == null) {\n return;\n }\n var cy = this;\n var _p = cy._private;\n var options = _p.options;\n if (!htmlElement(container) && htmlElement(container[0])) {\n container = container[0];\n }\n cy.stopAnimationLoop();\n cy.destroyRenderer();\n _p.container = container;\n _p.styleEnabled = true;\n cy.invalidateSize();\n cy.initRenderer(extend({}, options, options.renderer, {\n // allow custom renderer name to be re-used, otherwise use canvas\n name: options.renderer.name === 'null' ? 'canvas' : options.renderer.name\n }));\n cy.startAnimationLoop();\n cy.style(options.style);\n cy.emit('mount');\n return cy;\n },\n unmount: function unmount() {\n var cy = this;\n cy.stopAnimationLoop();\n cy.destroyRenderer();\n cy.initRenderer({\n name: 'null'\n });\n cy.emit('unmount');\n return cy;\n },\n options: function options() {\n return copy(this._private.options);\n },\n json: function json(obj) {\n var cy = this;\n var _p = cy._private;\n var eles = cy.mutableElements();\n var getFreshRef = function getFreshRef(ele) {\n return cy.getElementById(ele.id());\n };\n if (plainObject(obj)) {\n // set\n\n cy.startBatch();\n if (obj.elements) {\n var idInJson = {};\n var updateEles = function updateEles(jsons, gr) {\n var toAdd = [];\n var toMod = [];\n for (var i = 0; i < jsons.length; i++) {\n var json = jsons[i];\n if (!json.data.id) {\n warn('cy.json() cannot handle elements without an ID attribute');\n continue;\n }\n var id = '' + json.data.id; // id must be string\n var ele = cy.getElementById(id);\n idInJson[id] = true;\n if (ele.length !== 0) {\n // existing element should be updated\n toMod.push({\n ele: ele,\n json: json\n });\n } else {\n // otherwise should be added\n if (gr) {\n json.group = gr;\n toAdd.push(json);\n } else {\n toAdd.push(json);\n }\n }\n }\n cy.add(toAdd);\n for (var _i = 0; _i < toMod.length; _i++) {\n var _toMod$_i = toMod[_i],\n _ele = _toMod$_i.ele,\n _json = _toMod$_i.json;\n _ele.json(_json);\n }\n };\n if (array(obj.elements)) {\n // elements: []\n updateEles(obj.elements);\n } else {\n // elements: { nodes: [], edges: [] }\n var grs = ['nodes', 'edges'];\n for (var i = 0; i < grs.length; i++) {\n var gr = grs[i];\n var elements = obj.elements[gr];\n if (array(elements)) {\n updateEles(elements, gr);\n }\n }\n }\n var parentsToRemove = cy.collection();\n eles.filter(function (ele) {\n return !idInJson[ele.id()];\n }).forEach(function (ele) {\n if (ele.isParent()) {\n parentsToRemove.merge(ele);\n } else {\n ele.remove();\n }\n });\n\n // so that children are not removed w/parent\n parentsToRemove.forEach(function (ele) {\n return ele.children().move({\n parent: null\n });\n });\n\n // intermediate parents may be moved by prior line, so make sure we remove by fresh refs\n parentsToRemove.forEach(function (ele) {\n return getFreshRef(ele).remove();\n });\n }\n if (obj.style) {\n cy.style(obj.style);\n }\n if (obj.zoom != null && obj.zoom !== _p.zoom) {\n cy.zoom(obj.zoom);\n }\n if (obj.pan) {\n if (obj.pan.x !== _p.pan.x || obj.pan.y !== _p.pan.y) {\n cy.pan(obj.pan);\n }\n }\n if (obj.data) {\n cy.data(obj.data);\n }\n var fields = ['minZoom', 'maxZoom', 'zoomingEnabled', 'userZoomingEnabled', 'panningEnabled', 'userPanningEnabled', 'boxSelectionEnabled', 'autolock', 'autoungrabify', 'autounselectify', 'multiClickDebounceTime'];\n for (var _i2 = 0; _i2 < fields.length; _i2++) {\n var f = fields[_i2];\n if (obj[f] != null) {\n cy[f](obj[f]);\n }\n }\n cy.endBatch();\n return this; // chaining\n } else {\n // get\n var flat = !!obj;\n var json = {};\n if (flat) {\n json.elements = this.elements().map(function (ele) {\n return ele.json();\n });\n } else {\n json.elements = {};\n eles.forEach(function (ele) {\n var group = ele.group();\n if (!json.elements[group]) {\n json.elements[group] = [];\n }\n json.elements[group].push(ele.json());\n });\n }\n if (this._private.styleEnabled) {\n json.style = cy.style().json();\n }\n json.data = copy(cy.data());\n var options = _p.options;\n json.zoomingEnabled = _p.zoomingEnabled;\n json.userZoomingEnabled = _p.userZoomingEnabled;\n json.zoom = _p.zoom;\n json.minZoom = _p.minZoom;\n json.maxZoom = _p.maxZoom;\n json.panningEnabled = _p.panningEnabled;\n json.userPanningEnabled = _p.userPanningEnabled;\n json.pan = copy(_p.pan);\n json.boxSelectionEnabled = _p.boxSelectionEnabled;\n json.renderer = copy(options.renderer);\n json.hideEdgesOnViewport = options.hideEdgesOnViewport;\n json.textureOnViewport = options.textureOnViewport;\n json.wheelSensitivity = options.wheelSensitivity;\n json.motionBlur = options.motionBlur;\n json.multiClickDebounceTime = options.multiClickDebounceTime;\n return json;\n }\n }\n});\ncorefn.$id = corefn.getElementById;\n[corefn$9, corefn$8, elesfn, corefn$7, corefn$6, corefn$5, corefn$4, corefn$3, corefn$2, corefn$1, fn].forEach(function (props) {\n extend(corefn, props);\n});\n\n/* eslint-disable no-unused-vars */\nvar defaults$7 = {\n fit: true,\n // whether to fit the viewport to the graph\n directed: false,\n // whether the tree is directed downwards (or edges can point in any direction if false)\n padding: 30,\n // padding on fit\n circle: false,\n // put depths in concentric circles if true, put depths top down if false\n grid: false,\n // whether to create an even grid into which the DAG is placed (circle:false only)\n spacingFactor: 1.75,\n // positive spacing factor, larger => more space between nodes (N.B. n/a if causes overlap)\n boundingBox: undefined,\n // constrain layout bounds; { x1, y1, x2, y2 } or { x1, y1, w, h }\n avoidOverlap: true,\n // prevents node overlap, may overflow boundingBox if not enough space\n nodeDimensionsIncludeLabels: false,\n // Excludes the label when calculating node bounding boxes for the layout algorithm\n roots: undefined,\n // the roots of the trees\n depthSort: undefined,\n // a sorting function to order nodes at equal depth. e.g. function(a, b){ return a.data('weight') - b.data('weight') }\n animate: false,\n // whether to transition the node positions\n animationDuration: 500,\n // duration of animation in ms if enabled\n animationEasing: undefined,\n // easing of animation if enabled,\n animateFilter: function animateFilter(node, i) {\n return true;\n },\n // a function that determines whether the node should be animated. All nodes animated by default on animate enabled. Non-animated nodes are positioned immediately when the layout starts\n ready: undefined,\n // callback on layoutready\n stop: undefined,\n // callback on layoutstop\n transform: function transform(node, position) {\n return position;\n } // transform a given node position. Useful for changing flow direction in discrete layouts\n};\nvar deprecatedOptionDefaults = {\n maximal: false,\n // whether to shift nodes down their natural BFS depths in order to avoid upwards edges (DAGS only); setting acyclic to true sets maximal to true also\n acyclic: false // whether the tree is acyclic and thus a node could be shifted (due to the maximal option) multiple times without causing an infinite loop; setting to true sets maximal to true also; if you are uncertain whether a tree is acyclic, set to false to avoid potential infinite loops\n};\n\n/* eslint-enable */\n\nvar getInfo = function getInfo(ele) {\n return ele.scratch('breadthfirst');\n};\nvar setInfo = function setInfo(ele, obj) {\n return ele.scratch('breadthfirst', obj);\n};\nfunction BreadthFirstLayout(options) {\n this.options = extend({}, defaults$7, deprecatedOptionDefaults, options);\n}\nBreadthFirstLayout.prototype.run = function () {\n var options = this.options;\n var cy = options.cy;\n var eles = options.eles;\n var nodes = eles.nodes().filter(function (n) {\n return n.isChildless();\n });\n var graph = eles;\n var directed = options.directed;\n var maximal = options.acyclic || options.maximal || options.maximalAdjustments > 0; // maximalAdjustments for compat. w/ old code; also, setting acyclic to true sets maximal to true\n\n var hasBoundingBox = !!options.boundingBox;\n var cyExtent = cy.extent();\n var bb = makeBoundingBox(hasBoundingBox ? options.boundingBox : {\n x1: cyExtent.x1,\n y1: cyExtent.y1,\n w: cyExtent.w,\n h: cyExtent.h\n });\n var roots;\n if (elementOrCollection(options.roots)) {\n roots = options.roots;\n } else if (array(options.roots)) {\n var rootsArray = [];\n for (var i = 0; i < options.roots.length; i++) {\n var id = options.roots[i];\n var ele = cy.getElementById(id);\n rootsArray.push(ele);\n }\n roots = cy.collection(rootsArray);\n } else if (string(options.roots)) {\n roots = cy.$(options.roots);\n } else {\n if (directed) {\n roots = nodes.roots();\n } else {\n var components = eles.components();\n roots = cy.collection();\n var _loop = function _loop() {\n var comp = components[_i];\n var maxDegree = comp.maxDegree(false);\n var compRoots = comp.filter(function (ele) {\n return ele.degree(false) === maxDegree;\n });\n roots = roots.add(compRoots);\n };\n for (var _i = 0; _i < components.length; _i++) {\n _loop();\n }\n }\n }\n var depths = [];\n var foundByBfs = {};\n var addToDepth = function addToDepth(ele, d) {\n if (depths[d] == null) {\n depths[d] = [];\n }\n var i = depths[d].length;\n depths[d].push(ele);\n setInfo(ele, {\n index: i,\n depth: d\n });\n };\n var changeDepth = function changeDepth(ele, newDepth) {\n var _getInfo = getInfo(ele),\n depth = _getInfo.depth,\n index = _getInfo.index;\n depths[depth][index] = null;\n\n // add only childless nodes\n if (ele.isChildless()) addToDepth(ele, newDepth);\n };\n\n // find the depths of the nodes\n graph.bfs({\n roots: roots,\n directed: options.directed,\n visit: function visit(node, edge, pNode, i, depth) {\n var ele = node[0];\n var id = ele.id();\n\n // add only childless nodes\n if (ele.isChildless()) addToDepth(ele, depth);\n foundByBfs[id] = true;\n }\n });\n\n // check for nodes not found by bfs\n var orphanNodes = [];\n for (var _i2 = 0; _i2 < nodes.length; _i2++) {\n var _ele = nodes[_i2];\n if (foundByBfs[_ele.id()]) {\n continue;\n } else {\n orphanNodes.push(_ele);\n }\n }\n\n // assign the nodes a depth and index\n var assignDepthsAt = function assignDepthsAt(i) {\n var eles = depths[i];\n for (var j = 0; j < eles.length; j++) {\n var _ele2 = eles[j];\n if (_ele2 == null) {\n eles.splice(j, 1);\n j--;\n continue;\n }\n setInfo(_ele2, {\n depth: i,\n index: j\n });\n }\n };\n var adjustMaximally = function adjustMaximally(ele, shifted) {\n var eInfo = getInfo(ele);\n var incomers = ele.incomers().filter(function (el) {\n return el.isNode() && eles.has(el);\n });\n var maxDepth = -1;\n var id = ele.id();\n for (var k = 0; k < incomers.length; k++) {\n var incmr = incomers[k];\n var iInfo = getInfo(incmr);\n maxDepth = Math.max(maxDepth, iInfo.depth);\n }\n if (eInfo.depth <= maxDepth) {\n if (!options.acyclic && shifted[id]) {\n return null;\n }\n var newDepth = maxDepth + 1;\n changeDepth(ele, newDepth);\n shifted[id] = newDepth;\n return true;\n }\n return false;\n };\n\n // for the directed case, try to make the edges all go down (i.e. depth i => depth i + 1)\n if (directed && maximal) {\n var Q = [];\n var shifted = {};\n var enqueue = function enqueue(n) {\n return Q.push(n);\n };\n var dequeue = function dequeue() {\n return Q.shift();\n };\n nodes.forEach(function (n) {\n return Q.push(n);\n });\n while (Q.length > 0) {\n var _ele3 = dequeue();\n var didShift = adjustMaximally(_ele3, shifted);\n if (didShift) {\n _ele3.outgoers().filter(function (el) {\n return el.isNode() && eles.has(el);\n }).forEach(enqueue);\n } else if (didShift === null) {\n warn('Detected double maximal shift for node `' + _ele3.id() + '`. Bailing maximal adjustment due to cycle. Use `options.maximal: true` only on DAGs.');\n break; // exit on failure\n }\n }\n }\n\n // find min distance we need to leave between nodes\n var minDistance = 0;\n if (options.avoidOverlap) {\n for (var _i3 = 0; _i3 < nodes.length; _i3++) {\n var n = nodes[_i3];\n var nbb = n.layoutDimensions(options);\n var w = nbb.w;\n var h = nbb.h;\n minDistance = Math.max(minDistance, w, h);\n }\n }\n\n // get the weighted percent for an element based on its connectivity to other levels\n var cachedWeightedPercent = {};\n var getWeightedPercent = function getWeightedPercent(ele) {\n if (cachedWeightedPercent[ele.id()]) {\n return cachedWeightedPercent[ele.id()];\n }\n var eleDepth = getInfo(ele).depth;\n var neighbors = ele.neighborhood();\n var percent = 0;\n var samples = 0;\n for (var _i4 = 0; _i4 < neighbors.length; _i4++) {\n var neighbor = neighbors[_i4];\n if (neighbor.isEdge() || neighbor.isParent() || !nodes.has(neighbor)) {\n continue;\n }\n var bf = getInfo(neighbor);\n if (bf == null) {\n continue;\n }\n var index = bf.index;\n var depth = bf.depth;\n\n // unassigned neighbours shouldn't affect the ordering\n if (index == null || depth == null) {\n continue;\n }\n var nDepth = depths[depth].length;\n if (depth < eleDepth) {\n // only get influenced by elements above\n percent += index / nDepth;\n samples++;\n }\n }\n samples = Math.max(1, samples);\n percent = percent / samples;\n if (samples === 0) {\n // put lone nodes at the start\n percent = 0;\n }\n cachedWeightedPercent[ele.id()] = percent;\n return percent;\n };\n\n // rearrange the indices in each depth level based on connectivity\n var sortFn = function sortFn(a, b) {\n var apct = getWeightedPercent(a);\n var bpct = getWeightedPercent(b);\n var diff = apct - bpct;\n if (diff === 0) {\n return ascending(a.id(), b.id()); // make sure sort doesn't have don't-care comparisons\n } else {\n return diff;\n }\n };\n if (options.depthSort !== undefined) {\n sortFn = options.depthSort;\n }\n var depthsLen = depths.length;\n\n // sort each level to make connected nodes closer\n for (var _i5 = 0; _i5 < depthsLen; _i5++) {\n depths[_i5].sort(sortFn);\n assignDepthsAt(_i5);\n }\n\n // assign orphan nodes to a new top-level depth\n var orphanDepth = [];\n for (var _i6 = 0; _i6 < orphanNodes.length; _i6++) {\n orphanDepth.push(orphanNodes[_i6]);\n }\n var assignDepths = function assignDepths() {\n for (var _i7 = 0; _i7 < depthsLen; _i7++) {\n assignDepthsAt(_i7);\n }\n };\n\n // add a new top-level depth only when there are orphan nodes\n if (orphanDepth.length) {\n depths.unshift(orphanDepth);\n depthsLen = depths.length;\n assignDepths();\n }\n var biggestDepthSize = 0;\n for (var _i8 = 0; _i8 < depthsLen; _i8++) {\n biggestDepthSize = Math.max(depths[_i8].length, biggestDepthSize);\n }\n var center = {\n x: bb.x1 + bb.w / 2,\n y: bb.y1 + bb.h / 2\n };\n\n // average node size\n var aveNodeSize = nodes.reduce(function (acc, node) {\n return function (box) {\n return {\n w: acc.w === -1 ? box.w : (acc.w + box.w) / 2,\n h: acc.h === -1 ? box.h : (acc.h + box.h) / 2\n };\n }(node.boundingBox({\n includeLabels: options.nodeDimensionsIncludeLabels\n }));\n }, {\n w: -1,\n h: -1\n });\n var distanceY = Math.max(\n // only one depth\n depthsLen === 1 ? 0 :\n // inside a bounding box, no need for top & bottom padding\n hasBoundingBox ? (bb.h - options.padding * 2 - aveNodeSize.h) / (depthsLen - 1) : (bb.h - options.padding * 2 - aveNodeSize.h) / (depthsLen + 1), minDistance);\n var maxDepthSize = depths.reduce(function (max, eles) {\n return Math.max(max, eles.length);\n }, 0);\n var getPosition = function getPosition(ele) {\n var _getInfo2 = getInfo(ele),\n depth = _getInfo2.depth,\n index = _getInfo2.index;\n if (options.circle) {\n var radiusStepSize = Math.min(bb.w / 2 / depthsLen, bb.h / 2 / depthsLen);\n radiusStepSize = Math.max(radiusStepSize, minDistance);\n var radius = radiusStepSize * depth + radiusStepSize - (depthsLen > 0 && depths[0].length <= 3 ? radiusStepSize / 2 : 0);\n var theta = 2 * Math.PI / depths[depth].length * index;\n if (depth === 0 && depths[0].length === 1) {\n radius = 1;\n }\n return {\n x: center.x + radius * Math.cos(theta),\n y: center.y + radius * Math.sin(theta)\n };\n } else {\n var depthSize = depths[depth].length;\n var distanceX = Math.max(\n // only one depth\n depthSize === 1 ? 0 :\n // inside a bounding box, no need for left & right padding\n hasBoundingBox ? (bb.w - options.padding * 2 - aveNodeSize.w) / ((options.grid ? maxDepthSize : depthSize) - 1) : (bb.w - options.padding * 2 - aveNodeSize.w) / ((options.grid ? maxDepthSize : depthSize) + 1), minDistance);\n var epos = {\n x: center.x + (index + 1 - (depthSize + 1) / 2) * distanceX,\n y: center.y + (depth + 1 - (depthsLen + 1) / 2) * distanceY\n };\n return epos;\n }\n };\n eles.nodes().layoutPositions(this, options, getPosition);\n return this; // chaining\n};\n\nvar defaults$6 = {\n fit: true,\n // whether to fit the viewport to the graph\n padding: 30,\n // the padding on fit\n boundingBox: undefined,\n // constrain layout bounds; { x1, y1, x2, y2 } or { x1, y1, w, h }\n avoidOverlap: true,\n // prevents node overlap, may overflow boundingBox and radius if not enough space\n nodeDimensionsIncludeLabels: false,\n // Excludes the label when calculating node bounding boxes for the layout algorithm\n spacingFactor: undefined,\n // Applies a multiplicative factor (>0) to expand or compress the overall area that the nodes take up\n radius: undefined,\n // the radius of the circle\n startAngle: 3 / 2 * Math.PI,\n // where nodes start in radians\n sweep: undefined,\n // how many radians should be between the first and last node (defaults to full circle)\n clockwise: true,\n // whether the layout should go clockwise (true) or counterclockwise/anticlockwise (false)\n sort: undefined,\n // a sorting function to order the nodes; e.g. function(a, b){ return a.data('weight') - b.data('weight') }\n animate: false,\n // whether to transition the node positions\n animationDuration: 500,\n // duration of animation in ms if enabled\n animationEasing: undefined,\n // easing of animation if enabled\n animateFilter: function animateFilter(node, i) {\n return true;\n },\n // a function that determines whether the node should be animated. All nodes animated by default on animate enabled. Non-animated nodes are positioned immediately when the layout starts\n ready: undefined,\n // callback on layoutready\n stop: undefined,\n // callback on layoutstop\n transform: function transform(node, position) {\n return position;\n } // transform a given node position. Useful for changing flow direction in discrete layouts \n};\nfunction CircleLayout(options) {\n this.options = extend({}, defaults$6, options);\n}\nCircleLayout.prototype.run = function () {\n var params = this.options;\n var options = params;\n var cy = params.cy;\n var eles = options.eles;\n var clockwise = options.counterclockwise !== undefined ? !options.counterclockwise : options.clockwise;\n var nodes = eles.nodes().not(':parent');\n if (options.sort) {\n nodes = nodes.sort(options.sort);\n }\n var bb = makeBoundingBox(options.boundingBox ? options.boundingBox : {\n x1: 0,\n y1: 0,\n w: cy.width(),\n h: cy.height()\n });\n var center = {\n x: bb.x1 + bb.w / 2,\n y: bb.y1 + bb.h / 2\n };\n var sweep = options.sweep === undefined ? 2 * Math.PI - 2 * Math.PI / nodes.length : options.sweep;\n var dTheta = sweep / Math.max(1, nodes.length - 1);\n var r;\n var minDistance = 0;\n for (var i = 0; i < nodes.length; i++) {\n var n = nodes[i];\n var nbb = n.layoutDimensions(options);\n var w = nbb.w;\n var h = nbb.h;\n minDistance = Math.max(minDistance, w, h);\n }\n if (number$1(options.radius)) {\n r = options.radius;\n } else if (nodes.length <= 1) {\n r = 0;\n } else {\n r = Math.min(bb.h, bb.w) / 2 - minDistance;\n }\n\n // calculate the radius\n if (nodes.length > 1 && options.avoidOverlap) {\n // but only if more than one node (can't overlap)\n minDistance *= 1.75; // just to have some nice spacing\n\n var dcos = Math.cos(dTheta) - Math.cos(0);\n var dsin = Math.sin(dTheta) - Math.sin(0);\n var rMin = Math.sqrt(minDistance * minDistance / (dcos * dcos + dsin * dsin)); // s.t. no nodes overlapping\n r = Math.max(rMin, r);\n }\n var getPos = function getPos(ele, i) {\n var theta = options.startAngle + i * dTheta * (clockwise ? 1 : -1);\n var rx = r * Math.cos(theta);\n var ry = r * Math.sin(theta);\n var pos = {\n x: center.x + rx,\n y: center.y + ry\n };\n return pos;\n };\n eles.nodes().layoutPositions(this, options, getPos);\n return this; // chaining\n};\n\nvar defaults$5 = {\n fit: true,\n // whether to fit the viewport to the graph\n padding: 30,\n // the padding on fit\n startAngle: 3 / 2 * Math.PI,\n // where nodes start in radians\n sweep: undefined,\n // how many radians should be between the first and last node (defaults to full circle)\n clockwise: true,\n // whether the layout should go clockwise (true) or counterclockwise/anticlockwise (false)\n equidistant: false,\n // whether levels have an equal radial distance betwen them, may cause bounding box overflow\n minNodeSpacing: 10,\n // min spacing between outside of nodes (used for radius adjustment)\n boundingBox: undefined,\n // constrain layout bounds; { x1, y1, x2, y2 } or { x1, y1, w, h }\n avoidOverlap: true,\n // prevents node overlap, may overflow boundingBox if not enough space\n nodeDimensionsIncludeLabels: false,\n // Excludes the label when calculating node bounding boxes for the layout algorithm\n height: undefined,\n // height of layout area (overrides container height)\n width: undefined,\n // width of layout area (overrides container width)\n spacingFactor: undefined,\n // Applies a multiplicative factor (>0) to expand or compress the overall area that the nodes take up\n concentric: function concentric(node) {\n // returns numeric value for each node, placing higher nodes in levels towards the centre\n return node.degree();\n },\n levelWidth: function levelWidth(nodes) {\n // the variation of concentric values in each level\n return nodes.maxDegree() / 4;\n },\n animate: false,\n // whether to transition the node positions\n animationDuration: 500,\n // duration of animation in ms if enabled\n animationEasing: undefined,\n // easing of animation if enabled\n animateFilter: function animateFilter(node, i) {\n return true;\n },\n // a function that determines whether the node should be animated. All nodes animated by default on animate enabled. Non-animated nodes are positioned immediately when the layout starts\n ready: undefined,\n // callback on layoutready\n stop: undefined,\n // callback on layoutstop\n transform: function transform(node, position) {\n return position;\n } // transform a given node position. Useful for changing flow direction in discrete layouts\n};\nfunction ConcentricLayout(options) {\n this.options = extend({}, defaults$5, options);\n}\nConcentricLayout.prototype.run = function () {\n var params = this.options;\n var options = params;\n var clockwise = options.counterclockwise !== undefined ? !options.counterclockwise : options.clockwise;\n var cy = params.cy;\n var eles = options.eles;\n var nodes = eles.nodes().not(':parent');\n var bb = makeBoundingBox(options.boundingBox ? options.boundingBox : {\n x1: 0,\n y1: 0,\n w: cy.width(),\n h: cy.height()\n });\n var center = {\n x: bb.x1 + bb.w / 2,\n y: bb.y1 + bb.h / 2\n };\n var nodeValues = []; // { node, value }\n var maxNodeSize = 0;\n for (var i = 0; i < nodes.length; i++) {\n var node = nodes[i];\n var value = undefined;\n\n // calculate the node value\n value = options.concentric(node);\n nodeValues.push({\n value: value,\n node: node\n });\n\n // for style mapping\n node._private.scratch.concentric = value;\n }\n\n // in case we used the `concentric` in style\n nodes.updateStyle();\n\n // calculate max size now based on potentially updated mappers\n for (var _i = 0; _i < nodes.length; _i++) {\n var _node = nodes[_i];\n var nbb = _node.layoutDimensions(options);\n maxNodeSize = Math.max(maxNodeSize, nbb.w, nbb.h);\n }\n\n // sort node values in descreasing order\n nodeValues.sort(function (a, b) {\n return b.value - a.value;\n });\n var levelWidth = options.levelWidth(nodes);\n\n // put the values into levels\n var levels = [[]];\n var currentLevel = levels[0];\n for (var _i2 = 0; _i2 < nodeValues.length; _i2++) {\n var val = nodeValues[_i2];\n if (currentLevel.length > 0) {\n var diff = Math.abs(currentLevel[0].value - val.value);\n if (diff >= levelWidth) {\n currentLevel = [];\n levels.push(currentLevel);\n }\n }\n currentLevel.push(val);\n }\n\n // create positions from levels\n\n var minDist = maxNodeSize + options.minNodeSpacing; // min dist between nodes\n\n if (!options.avoidOverlap) {\n // then strictly constrain to bb\n var firstLvlHasMulti = levels.length > 0 && levels[0].length > 1;\n var maxR = Math.min(bb.w, bb.h) / 2 - minDist;\n var rStep = maxR / (levels.length + firstLvlHasMulti ? 1 : 0);\n minDist = Math.min(minDist, rStep);\n }\n\n // find the metrics for each level\n var r = 0;\n for (var _i3 = 0; _i3 < levels.length; _i3++) {\n var level = levels[_i3];\n var sweep = options.sweep === undefined ? 2 * Math.PI - 2 * Math.PI / level.length : options.sweep;\n var dTheta = level.dTheta = sweep / Math.max(1, level.length - 1);\n\n // calculate the radius\n if (level.length > 1 && options.avoidOverlap) {\n // but only if more than one node (can't overlap)\n var dcos = Math.cos(dTheta) - Math.cos(0);\n var dsin = Math.sin(dTheta) - Math.sin(0);\n var rMin = Math.sqrt(minDist * minDist / (dcos * dcos + dsin * dsin)); // s.t. no nodes overlapping\n\n r = Math.max(rMin, r);\n }\n level.r = r;\n r += minDist;\n }\n if (options.equidistant) {\n var rDeltaMax = 0;\n var _r = 0;\n for (var _i4 = 0; _i4 < levels.length; _i4++) {\n var _level = levels[_i4];\n var rDelta = _level.r - _r;\n rDeltaMax = Math.max(rDeltaMax, rDelta);\n }\n _r = 0;\n for (var _i5 = 0; _i5 < levels.length; _i5++) {\n var _level2 = levels[_i5];\n if (_i5 === 0) {\n _r = _level2.r;\n }\n _level2.r = _r;\n _r += rDeltaMax;\n }\n }\n\n // calculate the node positions\n var pos = {}; // id => position\n for (var _i6 = 0; _i6 < levels.length; _i6++) {\n var _level3 = levels[_i6];\n var _dTheta = _level3.dTheta;\n var _r2 = _level3.r;\n for (var j = 0; j < _level3.length; j++) {\n var _val = _level3[j];\n var theta = options.startAngle + (clockwise ? 1 : -1) * _dTheta * j;\n var p = {\n x: center.x + _r2 * Math.cos(theta),\n y: center.y + _r2 * Math.sin(theta)\n };\n pos[_val.node.id()] = p;\n }\n }\n\n // position the nodes\n eles.nodes().layoutPositions(this, options, function (ele) {\n var id = ele.id();\n return pos[id];\n });\n return this; // chaining\n};\n\n/*\nThe CoSE layout was written by Gerardo Huck.\nhttps://www.linkedin.com/in/gerardohuck/\n\nBased on the following article:\nhttp://dl.acm.org/citation.cfm?id=1498047\n\nModifications tracked on Github.\n*/\n\nvar DEBUG;\n\n/**\n * @brief : default layout options\n */\nvar defaults$4 = {\n // Called on `layoutready`\n ready: function ready() {},\n // Called on `layoutstop`\n stop: function stop() {},\n // Whether to animate while running the layout\n // true : Animate continuously as the layout is running\n // false : Just show the end result\n // 'end' : Animate with the end result, from the initial positions to the end positions\n animate: true,\n // Easing of the animation for animate:'end'\n animationEasing: undefined,\n // The duration of the animation for animate:'end'\n animationDuration: undefined,\n // A function that determines whether the node should be animated\n // All nodes animated by default on animate enabled\n // Non-animated nodes are positioned immediately when the layout starts\n animateFilter: function animateFilter(node, i) {\n return true;\n },\n // The layout animates only after this many milliseconds for animate:true\n // (prevents flashing on fast runs)\n animationThreshold: 250,\n // Number of iterations between consecutive screen positions update\n refresh: 20,\n // Whether to fit the network view after when done\n fit: true,\n // Padding on fit\n padding: 30,\n // Constrain layout bounds; { x1, y1, x2, y2 } or { x1, y1, w, h }\n boundingBox: undefined,\n // Excludes the label when calculating node bounding boxes for the layout algorithm\n nodeDimensionsIncludeLabels: false,\n // Randomize the initial positions of the nodes (true) or use existing positions (false)\n randomize: false,\n // Extra spacing between components in non-compound graphs\n componentSpacing: 40,\n // Node repulsion (non overlapping) multiplier\n nodeRepulsion: function nodeRepulsion(node) {\n return 2048;\n },\n // Node repulsion (overlapping) multiplier\n nodeOverlap: 4,\n // Ideal edge (non nested) length\n idealEdgeLength: function idealEdgeLength(edge) {\n return 32;\n },\n // Divisor to compute edge forces\n edgeElasticity: function edgeElasticity(edge) {\n return 32;\n },\n // Nesting factor (multiplier) to compute ideal edge length for nested edges\n nestingFactor: 1.2,\n // Gravity force (constant)\n gravity: 1,\n // Maximum number of iterations to perform\n numIter: 1000,\n // Initial temperature (maximum node displacement)\n initialTemp: 1000,\n // Cooling factor (how the temperature is reduced between consecutive iterations\n coolingFactor: 0.99,\n // Lower temperature threshold (below this point the layout will end)\n minTemp: 1.0\n};\n\n/**\n * @brief : constructor\n * @arg options : object containing layout options\n */\nfunction CoseLayout(options) {\n this.options = extend({}, defaults$4, options);\n this.options.layout = this;\n\n // Exclude any edge that has a source or target node that is not in the set of passed-in nodes\n var nodes = this.options.eles.nodes();\n var edges = this.options.eles.edges();\n var notEdges = edges.filter(function (e) {\n var sourceId = e.source().data('id');\n var targetId = e.target().data('id');\n var hasSource = nodes.some(function (n) {\n return n.data('id') === sourceId;\n });\n var hasTarget = nodes.some(function (n) {\n return n.data('id') === targetId;\n });\n return !hasSource || !hasTarget;\n });\n this.options.eles = this.options.eles.not(notEdges);\n}\n\n/**\n * @brief : runs the layout\n */\nCoseLayout.prototype.run = function () {\n var options = this.options;\n var cy = options.cy;\n var layout = this;\n layout.stopped = false;\n if (options.animate === true || options.animate === false) {\n layout.emit({\n type: 'layoutstart',\n layout: layout\n });\n }\n\n // Set DEBUG - Global variable\n if (true === options.debug) {\n DEBUG = true;\n } else {\n DEBUG = false;\n }\n\n // Initialize layout info\n var layoutInfo = createLayoutInfo(cy, layout, options);\n\n // Show LayoutInfo contents if debugging\n if (DEBUG) {\n printLayoutInfo(layoutInfo);\n }\n\n // If required, randomize node positions\n if (options.randomize) {\n randomizePositions(layoutInfo);\n }\n var startTime = performanceNow();\n var refresh = function refresh() {\n refreshPositions(layoutInfo, cy, options);\n\n // Fit the graph if necessary\n if (true === options.fit) {\n cy.fit(options.padding);\n }\n };\n var mainLoop = function mainLoop(i) {\n if (layout.stopped || i >= options.numIter) {\n // logDebug(\"Layout manually stopped. Stopping computation in step \" + i);\n return false;\n }\n\n // Do one step in the phisical simulation\n step(layoutInfo, options);\n\n // Update temperature\n layoutInfo.temperature = layoutInfo.temperature * options.coolingFactor;\n // logDebug(\"New temperature: \" + layoutInfo.temperature);\n\n if (layoutInfo.temperature < options.minTemp) {\n // logDebug(\"Temperature drop below minimum threshold. Stopping computation in step \" + i);\n return false;\n }\n return true;\n };\n var done = function done() {\n if (options.animate === true || options.animate === false) {\n refresh();\n\n // Layout has finished\n layout.one('layoutstop', options.stop);\n layout.emit({\n type: 'layoutstop',\n layout: layout\n });\n } else {\n var nodes = options.eles.nodes();\n var getScaledPos = getScaleInBoundsFn(layoutInfo, options, nodes);\n nodes.layoutPositions(layout, options, getScaledPos);\n }\n };\n var i = 0;\n var loopRet = true;\n if (options.animate === true) {\n var _frame = function frame() {\n var f = 0;\n while (loopRet && f < options.refresh) {\n loopRet = mainLoop(i);\n i++;\n f++;\n }\n if (!loopRet) {\n // it's done\n separateComponents(layoutInfo, options);\n done();\n } else {\n var now = performanceNow();\n if (now - startTime >= options.animationThreshold) {\n refresh();\n }\n requestAnimationFrame(_frame);\n }\n };\n _frame();\n } else {\n while (loopRet) {\n loopRet = mainLoop(i);\n i++;\n }\n separateComponents(layoutInfo, options);\n done();\n }\n return this; // chaining\n};\n\n/**\n * @brief : called on continuous layouts to stop them before they finish\n */\nCoseLayout.prototype.stop = function () {\n this.stopped = true;\n if (this.thread) {\n this.thread.stop();\n }\n this.emit('layoutstop');\n return this; // chaining\n};\nCoseLayout.prototype.destroy = function () {\n if (this.thread) {\n this.thread.stop();\n }\n return this; // chaining\n};\n\n/**\n * @brief : Creates an object which is contains all the data\n * used in the layout process\n * @arg cy : cytoscape.js object\n * @return : layoutInfo object initialized\n */\nvar createLayoutInfo = function createLayoutInfo(cy, layout, options) {\n // Shortcut\n var edges = options.eles.edges();\n var nodes = options.eles.nodes();\n var bb = makeBoundingBox(options.boundingBox ? options.boundingBox : {\n x1: 0,\n y1: 0,\n w: cy.width(),\n h: cy.height()\n });\n var layoutInfo = {\n isCompound: cy.hasCompoundNodes(),\n layoutNodes: [],\n idToIndex: {},\n nodeSize: nodes.size(),\n graphSet: [],\n indexToGraph: [],\n layoutEdges: [],\n edgeSize: edges.size(),\n temperature: options.initialTemp,\n clientWidth: bb.w,\n clientHeight: bb.h,\n boundingBox: bb\n };\n var components = options.eles.components();\n var id2cmptId = {};\n for (var i = 0; i < components.length; i++) {\n var component = components[i];\n for (var j = 0; j < component.length; j++) {\n var node = component[j];\n id2cmptId[node.id()] = i;\n }\n }\n\n // Iterate over all nodes, creating layout nodes\n for (var i = 0; i < layoutInfo.nodeSize; i++) {\n var n = nodes[i];\n var nbb = n.layoutDimensions(options);\n var tempNode = {};\n tempNode.isLocked = n.locked();\n tempNode.id = n.data('id');\n tempNode.parentId = n.data('parent');\n tempNode.cmptId = id2cmptId[n.id()];\n tempNode.children = [];\n tempNode.positionX = n.position('x');\n tempNode.positionY = n.position('y');\n tempNode.offsetX = 0;\n tempNode.offsetY = 0;\n tempNode.height = nbb.w;\n tempNode.width = nbb.h;\n tempNode.maxX = tempNode.positionX + tempNode.width / 2;\n tempNode.minX = tempNode.positionX - tempNode.width / 2;\n tempNode.maxY = tempNode.positionY + tempNode.height / 2;\n tempNode.minY = tempNode.positionY - tempNode.height / 2;\n tempNode.padLeft = parseFloat(n.style('padding'));\n tempNode.padRight = parseFloat(n.style('padding'));\n tempNode.padTop = parseFloat(n.style('padding'));\n tempNode.padBottom = parseFloat(n.style('padding'));\n\n // forces\n tempNode.nodeRepulsion = fn$6(options.nodeRepulsion) ? options.nodeRepulsion(n) : options.nodeRepulsion;\n\n // Add new node\n layoutInfo.layoutNodes.push(tempNode);\n // Add entry to id-index map\n layoutInfo.idToIndex[tempNode.id] = i;\n }\n\n // Inline implementation of a queue, used for traversing the graph in BFS order\n var queue = [];\n var start = 0; // Points to the start the queue\n var end = -1; // Points to the end of the queue\n\n var tempGraph = [];\n\n // Second pass to add child information and\n // initialize queue for hierarchical traversal\n for (var i = 0; i < layoutInfo.nodeSize; i++) {\n var n = layoutInfo.layoutNodes[i];\n var p_id = n.parentId;\n // Check if node n has a parent node\n if (null != p_id) {\n // Add node Id to parent's list of children\n layoutInfo.layoutNodes[layoutInfo.idToIndex[p_id]].children.push(n.id);\n } else {\n // If a node doesn't have a parent, then it's in the root graph\n queue[++end] = n.id;\n tempGraph.push(n.id);\n }\n }\n\n // Add root graph to graphSet\n layoutInfo.graphSet.push(tempGraph);\n\n // Traverse the graph, level by level,\n while (start <= end) {\n // Get the node to visit and remove it from queue\n var node_id = queue[start++];\n var node_ix = layoutInfo.idToIndex[node_id];\n var node = layoutInfo.layoutNodes[node_ix];\n var children = node.children;\n if (children.length > 0) {\n // Add children nodes as a new graph to graph set\n layoutInfo.graphSet.push(children);\n // Add children to que queue to be visited\n for (var i = 0; i < children.length; i++) {\n queue[++end] = children[i];\n }\n }\n }\n\n // Create indexToGraph map\n for (var i = 0; i < layoutInfo.graphSet.length; i++) {\n var graph = layoutInfo.graphSet[i];\n for (var j = 0; j < graph.length; j++) {\n var index = layoutInfo.idToIndex[graph[j]];\n layoutInfo.indexToGraph[index] = i;\n }\n }\n\n // Iterate over all edges, creating Layout Edges\n for (var i = 0; i < layoutInfo.edgeSize; i++) {\n var e = edges[i];\n var tempEdge = {};\n tempEdge.id = e.data('id');\n tempEdge.sourceId = e.data('source');\n tempEdge.targetId = e.data('target');\n\n // Compute ideal length\n var idealLength = fn$6(options.idealEdgeLength) ? options.idealEdgeLength(e) : options.idealEdgeLength;\n var elasticity = fn$6(options.edgeElasticity) ? options.edgeElasticity(e) : options.edgeElasticity;\n\n // Check if it's an inter graph edge\n var sourceIx = layoutInfo.idToIndex[tempEdge.sourceId];\n var targetIx = layoutInfo.idToIndex[tempEdge.targetId];\n var sourceGraph = layoutInfo.indexToGraph[sourceIx];\n var targetGraph = layoutInfo.indexToGraph[targetIx];\n if (sourceGraph != targetGraph) {\n // Find lowest common graph ancestor\n var lca = findLCA(tempEdge.sourceId, tempEdge.targetId, layoutInfo);\n\n // Compute sum of node depths, relative to lca graph\n var lcaGraph = layoutInfo.graphSet[lca];\n var depth = 0;\n\n // Source depth\n var tempNode = layoutInfo.layoutNodes[sourceIx];\n while (-1 === lcaGraph.indexOf(tempNode.id)) {\n tempNode = layoutInfo.layoutNodes[layoutInfo.idToIndex[tempNode.parentId]];\n depth++;\n }\n\n // Target depth\n tempNode = layoutInfo.layoutNodes[targetIx];\n while (-1 === lcaGraph.indexOf(tempNode.id)) {\n tempNode = layoutInfo.layoutNodes[layoutInfo.idToIndex[tempNode.parentId]];\n depth++;\n }\n\n // logDebug('LCA of nodes ' + tempEdge.sourceId + ' and ' + tempEdge.targetId +\n // \". Index: \" + lca + \" Contents: \" + lcaGraph.toString() +\n // \". Depth: \" + depth);\n\n // Update idealLength\n idealLength *= depth * options.nestingFactor;\n }\n tempEdge.idealLength = idealLength;\n tempEdge.elasticity = elasticity;\n layoutInfo.layoutEdges.push(tempEdge);\n }\n\n // Finally, return layoutInfo object\n return layoutInfo;\n};\n\n/**\n * @brief : This function finds the index of the lowest common\n * graph ancestor between 2 nodes in the subtree\n * (from the graph hierarchy induced tree) whose\n * root is graphIx\n *\n * @arg node1: node1's ID\n * @arg node2: node2's ID\n * @arg layoutInfo: layoutInfo object\n *\n */\nvar findLCA = function findLCA(node1, node2, layoutInfo) {\n // Find their common ancester, starting from the root graph\n var res = _findLCA_aux(node1, node2, 0, layoutInfo);\n if (2 > res.count) {\n // If aux function couldn't find the common ancester,\n // then it is the root graph\n return 0;\n } else {\n return res.graph;\n }\n};\n\n/**\n * @brief : Auxiliary function used for LCA computation\n *\n * @arg node1 : node1's ID\n * @arg node2 : node2's ID\n * @arg graphIx : subgraph index\n * @arg layoutInfo : layoutInfo object\n *\n * @return : object of the form {count: X, graph: Y}, where:\n * X is the number of ancestors (max: 2) found in\n * graphIx (and it's subgraphs),\n * Y is the graph index of the lowest graph containing\n * all X nodes\n */\nvar _findLCA_aux = function findLCA_aux(node1, node2, graphIx, layoutInfo) {\n var graph = layoutInfo.graphSet[graphIx];\n // If both nodes belongs to graphIx\n if (-1 < graph.indexOf(node1) && -1 < graph.indexOf(node2)) {\n return {\n count: 2,\n graph: graphIx\n };\n }\n\n // Make recursive calls for all subgraphs\n var c = 0;\n for (var i = 0; i < graph.length; i++) {\n var nodeId = graph[i];\n var nodeIx = layoutInfo.idToIndex[nodeId];\n var children = layoutInfo.layoutNodes[nodeIx].children;\n\n // If the node has no child, skip it\n if (0 === children.length) {\n continue;\n }\n var childGraphIx = layoutInfo.indexToGraph[layoutInfo.idToIndex[children[0]]];\n var result = _findLCA_aux(node1, node2, childGraphIx, layoutInfo);\n if (0 === result.count) {\n // Neither node1 nor node2 are present in this subgraph\n continue;\n } else if (1 === result.count) {\n // One of (node1, node2) is present in this subgraph\n c++;\n if (2 === c) {\n // We've already found both nodes, no need to keep searching\n break;\n }\n } else {\n // Both nodes are present in this subgraph\n return result;\n }\n }\n return {\n count: c,\n graph: graphIx\n };\n};\n\n/**\n * @brief: printsLayoutInfo into js console\n * Only used for debbuging\n */\nvar printLayoutInfo; \n\n/**\n * @brief : Randomizes the position of all nodes\n */\nvar randomizePositions = function randomizePositions(layoutInfo, cy) {\n var width = layoutInfo.clientWidth;\n var height = layoutInfo.clientHeight;\n for (var i = 0; i < layoutInfo.nodeSize; i++) {\n var n = layoutInfo.layoutNodes[i];\n\n // No need to randomize compound nodes or locked nodes\n if (0 === n.children.length && !n.isLocked) {\n n.positionX = Math.random() * width;\n n.positionY = Math.random() * height;\n }\n }\n};\nvar getScaleInBoundsFn = function getScaleInBoundsFn(layoutInfo, options, nodes) {\n var bb = layoutInfo.boundingBox;\n var coseBB = {\n x1: Infinity,\n x2: -Infinity,\n y1: Infinity,\n y2: -Infinity\n };\n if (options.boundingBox) {\n nodes.forEach(function (node) {\n var lnode = layoutInfo.layoutNodes[layoutInfo.idToIndex[node.data('id')]];\n coseBB.x1 = Math.min(coseBB.x1, lnode.positionX);\n coseBB.x2 = Math.max(coseBB.x2, lnode.positionX);\n coseBB.y1 = Math.min(coseBB.y1, lnode.positionY);\n coseBB.y2 = Math.max(coseBB.y2, lnode.positionY);\n });\n coseBB.w = coseBB.x2 - coseBB.x1;\n coseBB.h = coseBB.y2 - coseBB.y1;\n }\n return function (ele, i) {\n var lnode = layoutInfo.layoutNodes[layoutInfo.idToIndex[ele.data('id')]];\n if (options.boundingBox) {\n // then add extra bounding box constraint\n var pctX = (lnode.positionX - coseBB.x1) / coseBB.w;\n var pctY = (lnode.positionY - coseBB.y1) / coseBB.h;\n return {\n x: bb.x1 + pctX * bb.w,\n y: bb.y1 + pctY * bb.h\n };\n } else {\n return {\n x: lnode.positionX,\n y: lnode.positionY\n };\n }\n };\n};\n\n/**\n * @brief : Updates the positions of nodes in the network\n * @arg layoutInfo : LayoutInfo object\n * @arg cy : Cytoscape object\n * @arg options : Layout options\n */\nvar refreshPositions = function refreshPositions(layoutInfo, cy, options) {\n // var s = 'Refreshing positions';\n // logDebug(s);\n\n var layout = options.layout;\n var nodes = options.eles.nodes();\n var getScaledPos = getScaleInBoundsFn(layoutInfo, options, nodes);\n nodes.positions(getScaledPos);\n\n // Trigger layoutReady only on first call\n if (true !== layoutInfo.ready) {\n // s = 'Triggering layoutready';\n // logDebug(s);\n layoutInfo.ready = true;\n layout.one('layoutready', options.ready);\n layout.emit({\n type: 'layoutready',\n layout: this\n });\n }\n};\n\n/**\n * @brief : Logs a debug message in JS console, if DEBUG is ON\n */\n// var logDebug = function(text) {\n// if (DEBUG) {\n// console.debug(text);\n// }\n// };\n\n/**\n * @brief : Performs one iteration of the physical simulation\n * @arg layoutInfo : LayoutInfo object already initialized\n * @arg cy : Cytoscape object\n * @arg options : Layout options\n */\nvar step = function step(layoutInfo, options, _step) {\n // var s = \"\\n\\n###############################\";\n // s += \"\\nSTEP: \" + step;\n // s += \"\\n###############################\\n\";\n // logDebug(s);\n\n // Calculate node repulsions\n calculateNodeForces(layoutInfo, options);\n // Calculate edge forces\n calculateEdgeForces(layoutInfo);\n // Calculate gravity forces\n calculateGravityForces(layoutInfo, options);\n // Propagate forces from parent to child\n propagateForces(layoutInfo);\n // Update positions based on calculated forces\n updatePositions(layoutInfo);\n};\n\n/**\n * @brief : Computes the node repulsion forces\n */\nvar calculateNodeForces = function calculateNodeForces(layoutInfo, options) {\n // Go through each of the graphs in graphSet\n // Nodes only repel each other if they belong to the same graph\n // var s = 'calculateNodeForces';\n // logDebug(s);\n for (var i = 0; i < layoutInfo.graphSet.length; i++) {\n var graph = layoutInfo.graphSet[i];\n var numNodes = graph.length;\n\n // s = \"Set: \" + graph.toString();\n // logDebug(s);\n\n // Now get all the pairs of nodes\n // Only get each pair once, (A, B) = (B, A)\n for (var j = 0; j < numNodes; j++) {\n var node1 = layoutInfo.layoutNodes[layoutInfo.idToIndex[graph[j]]];\n for (var k = j + 1; k < numNodes; k++) {\n var node2 = layoutInfo.layoutNodes[layoutInfo.idToIndex[graph[k]]];\n nodeRepulsion(node1, node2, layoutInfo, options);\n }\n }\n }\n};\nvar randomDistance = function randomDistance(max) {\n return -1 + 2 * max * Math.random();\n};\n\n/**\n * @brief : Compute the node repulsion forces between a pair of nodes\n */\nvar nodeRepulsion = function nodeRepulsion(node1, node2, layoutInfo, options) {\n // var s = \"Node repulsion. Node1: \" + node1.id + \" Node2: \" + node2.id;\n\n var cmptId1 = node1.cmptId;\n var cmptId2 = node2.cmptId;\n if (cmptId1 !== cmptId2 && !layoutInfo.isCompound) {\n return;\n }\n\n // Get direction of line connecting both node centers\n var directionX = node2.positionX - node1.positionX;\n var directionY = node2.positionY - node1.positionY;\n var maxRandDist = 1;\n // s += \"\\ndirectionX: \" + directionX + \", directionY: \" + directionY;\n\n // If both centers are the same, apply a random force\n if (0 === directionX && 0 === directionY) {\n directionX = randomDistance(maxRandDist);\n directionY = randomDistance(maxRandDist);\n }\n var overlap = nodesOverlap(node1, node2, directionX, directionY);\n if (overlap > 0) {\n // s += \"\\nNodes DO overlap.\";\n // s += \"\\nOverlap: \" + overlap;\n // If nodes overlap, repulsion force is proportional\n // to the overlap\n var force = options.nodeOverlap * overlap;\n\n // Compute the module and components of the force vector\n var distance = Math.sqrt(directionX * directionX + directionY * directionY);\n // s += \"\\nDistance: \" + distance;\n var forceX = force * directionX / distance;\n var forceY = force * directionY / distance;\n } else {\n // s += \"\\nNodes do NOT overlap.\";\n // If there's no overlap, force is inversely proportional\n // to squared distance\n\n // Get clipping points for both nodes\n var point1 = findClippingPoint(node1, directionX, directionY);\n var point2 = findClippingPoint(node2, -1 * directionX, -1 * directionY);\n\n // Use clipping points to compute distance\n var distanceX = point2.x - point1.x;\n var distanceY = point2.y - point1.y;\n var distanceSqr = distanceX * distanceX + distanceY * distanceY;\n var distance = Math.sqrt(distanceSqr);\n // s += \"\\nDistance: \" + distance;\n\n // Compute the module and components of the force vector\n var force = (node1.nodeRepulsion + node2.nodeRepulsion) / distanceSqr;\n var forceX = force * distanceX / distance;\n var forceY = force * distanceY / distance;\n }\n\n // Apply force\n if (!node1.isLocked) {\n node1.offsetX -= forceX;\n node1.offsetY -= forceY;\n }\n if (!node2.isLocked) {\n node2.offsetX += forceX;\n node2.offsetY += forceY;\n }\n\n // s += \"\\nForceX: \" + forceX + \" ForceY: \" + forceY;\n // logDebug(s);\n\n return;\n};\n\n/**\n * @brief : Determines whether two nodes overlap or not\n * @return : Amount of overlapping (0 => no overlap)\n */\nvar nodesOverlap = function nodesOverlap(node1, node2, dX, dY) {\n if (dX > 0) {\n var overlapX = node1.maxX - node2.minX;\n } else {\n var overlapX = node2.maxX - node1.minX;\n }\n if (dY > 0) {\n var overlapY = node1.maxY - node2.minY;\n } else {\n var overlapY = node2.maxY - node1.minY;\n }\n if (overlapX >= 0 && overlapY >= 0) {\n return Math.sqrt(overlapX * overlapX + overlapY * overlapY);\n } else {\n return 0;\n }\n};\n\n/**\n * @brief : Finds the point in which an edge (direction dX, dY) intersects\n * the rectangular bounding box of it's source/target node\n */\nvar findClippingPoint = function findClippingPoint(node, dX, dY) {\n // Shorcuts\n var X = node.positionX;\n var Y = node.positionY;\n var H = node.height || 1;\n var W = node.width || 1;\n var dirSlope = dY / dX;\n var nodeSlope = H / W;\n\n // var s = 'Computing clipping point of node ' + node.id +\n // \" . Height: \" + H + \", Width: \" + W +\n // \"\\nDirection \" + dX + \", \" + dY;\n //\n // Compute intersection\n var res = {};\n\n // Case: Vertical direction (up)\n if (0 === dX && 0 < dY) {\n res.x = X;\n // s += \"\\nUp direction\";\n res.y = Y + H / 2;\n return res;\n }\n\n // Case: Vertical direction (down)\n if (0 === dX && 0 > dY) {\n res.x = X;\n res.y = Y + H / 2;\n // s += \"\\nDown direction\";\n\n return res;\n }\n\n // Case: Intersects the right border\n if (0 < dX && -1 * nodeSlope <= dirSlope && dirSlope <= nodeSlope) {\n res.x = X + W / 2;\n res.y = Y + W * dY / 2 / dX;\n // s += \"\\nRightborder\";\n\n return res;\n }\n\n // Case: Intersects the left border\n if (0 > dX && -1 * nodeSlope <= dirSlope && dirSlope <= nodeSlope) {\n res.x = X - W / 2;\n res.y = Y - W * dY / 2 / dX;\n // s += \"\\nLeftborder\";\n\n return res;\n }\n\n // Case: Intersects the top border\n if (0 < dY && (dirSlope <= -1 * nodeSlope || dirSlope >= nodeSlope)) {\n res.x = X + H * dX / 2 / dY;\n res.y = Y + H / 2;\n // s += \"\\nTop border\";\n\n return res;\n }\n\n // Case: Intersects the bottom border\n if (0 > dY && (dirSlope <= -1 * nodeSlope || dirSlope >= nodeSlope)) {\n res.x = X - H * dX / 2 / dY;\n res.y = Y - H / 2;\n // s += \"\\nBottom border\";\n\n return res;\n }\n\n // s += \"\\nClipping point found at \" + res.x + \", \" + res.y;\n // logDebug(s);\n return res;\n};\n\n/**\n * @brief : Calculates all edge forces\n */\nvar calculateEdgeForces = function calculateEdgeForces(layoutInfo, options) {\n // Iterate over all edges\n for (var i = 0; i < layoutInfo.edgeSize; i++) {\n // Get edge, source & target nodes\n var edge = layoutInfo.layoutEdges[i];\n var sourceIx = layoutInfo.idToIndex[edge.sourceId];\n var source = layoutInfo.layoutNodes[sourceIx];\n var targetIx = layoutInfo.idToIndex[edge.targetId];\n var target = layoutInfo.layoutNodes[targetIx];\n\n // Get direction of line connecting both node centers\n var directionX = target.positionX - source.positionX;\n var directionY = target.positionY - source.positionY;\n\n // If both centers are the same, do nothing.\n // A random force has already been applied as node repulsion\n if (0 === directionX && 0 === directionY) {\n continue;\n }\n\n // Get clipping points for both nodes\n var point1 = findClippingPoint(source, directionX, directionY);\n var point2 = findClippingPoint(target, -1 * directionX, -1 * directionY);\n var lx = point2.x - point1.x;\n var ly = point2.y - point1.y;\n var l = Math.sqrt(lx * lx + ly * ly);\n var force = Math.pow(edge.idealLength - l, 2) / edge.elasticity;\n if (0 !== l) {\n var forceX = force * lx / l;\n var forceY = force * ly / l;\n } else {\n var forceX = 0;\n var forceY = 0;\n }\n\n // Add this force to target and source nodes\n if (!source.isLocked) {\n source.offsetX += forceX;\n source.offsetY += forceY;\n }\n if (!target.isLocked) {\n target.offsetX -= forceX;\n target.offsetY -= forceY;\n }\n\n // var s = 'Edge force between nodes ' + source.id + ' and ' + target.id;\n // s += \"\\nDistance: \" + l + \" Force: (\" + forceX + \", \" + forceY + \")\";\n // logDebug(s);\n }\n};\n\n/**\n * @brief : Computes gravity forces for all nodes\n */\nvar calculateGravityForces = function calculateGravityForces(layoutInfo, options) {\n if (options.gravity === 0) {\n return;\n }\n var distThreshold = 1;\n\n // var s = 'calculateGravityForces';\n // logDebug(s);\n for (var i = 0; i < layoutInfo.graphSet.length; i++) {\n var graph = layoutInfo.graphSet[i];\n var numNodes = graph.length;\n\n // s = \"Set: \" + graph.toString();\n // logDebug(s);\n\n // Compute graph center\n if (0 === i) {\n var centerX = layoutInfo.clientHeight / 2;\n var centerY = layoutInfo.clientWidth / 2;\n } else {\n // Get Parent node for this graph, and use its position as center\n var temp = layoutInfo.layoutNodes[layoutInfo.idToIndex[graph[0]]];\n var parent = layoutInfo.layoutNodes[layoutInfo.idToIndex[temp.parentId]];\n var centerX = parent.positionX;\n var centerY = parent.positionY;\n }\n // s = \"Center found at: \" + centerX + \", \" + centerY;\n // logDebug(s);\n\n // Apply force to all nodes in graph\n for (var j = 0; j < numNodes; j++) {\n var node = layoutInfo.layoutNodes[layoutInfo.idToIndex[graph[j]]];\n // s = \"Node: \" + node.id;\n\n if (node.isLocked) {\n continue;\n }\n var dx = centerX - node.positionX;\n var dy = centerY - node.positionY;\n var d = Math.sqrt(dx * dx + dy * dy);\n if (d > distThreshold) {\n var fx = options.gravity * dx / d;\n var fy = options.gravity * dy / d;\n node.offsetX += fx;\n node.offsetY += fy;\n // s += \": Applied force: \" + fx + \", \" + fy;\n }\n // logDebug(s);\n }\n }\n};\n\n/**\n * @brief : This function propagates the existing offsets from\n * parent nodes to its descendents.\n * @arg layoutInfo : layoutInfo Object\n * @arg cy : cytoscape Object\n * @arg options : Layout options\n */\nvar propagateForces = function propagateForces(layoutInfo, options) {\n // Inline implementation of a queue, used for traversing the graph in BFS order\n var queue = [];\n var start = 0; // Points to the start the queue\n var end = -1; // Points to the end of the queue\n\n // logDebug('propagateForces');\n\n // Start by visiting the nodes in the root graph\n queue.push.apply(queue, layoutInfo.graphSet[0]);\n end += layoutInfo.graphSet[0].length;\n\n // Traverse the graph, level by level,\n while (start <= end) {\n // Get the node to visit and remove it from queue\n var nodeId = queue[start++];\n var nodeIndex = layoutInfo.idToIndex[nodeId];\n var node = layoutInfo.layoutNodes[nodeIndex];\n var children = node.children;\n\n // We only need to process the node if it's compound\n if (0 < children.length && !node.isLocked) {\n var offX = node.offsetX;\n var offY = node.offsetY;\n\n // var s = \"Propagating offset from parent node : \" + node.id +\n // \". OffsetX: \" + offX + \". OffsetY: \" + offY;\n // s += \"\\n Children: \" + children.toString();\n // logDebug(s);\n\n for (var i = 0; i < children.length; i++) {\n var childNode = layoutInfo.layoutNodes[layoutInfo.idToIndex[children[i]]];\n // Propagate offset\n childNode.offsetX += offX;\n childNode.offsetY += offY;\n // Add children to queue to be visited\n queue[++end] = children[i];\n }\n\n // Reset parent offsets\n node.offsetX = 0;\n node.offsetY = 0;\n }\n }\n};\n\n/**\n * @brief : Updates the layout model positions, based on\n * the accumulated forces\n */\nvar updatePositions = function updatePositions(layoutInfo, options) {\n // var s = 'Updating positions';\n // logDebug(s);\n\n // Reset boundaries for compound nodes\n for (var i = 0; i < layoutInfo.nodeSize; i++) {\n var n = layoutInfo.layoutNodes[i];\n if (0 < n.children.length) {\n // logDebug(\"Resetting boundaries of compound node: \" + n.id);\n n.maxX = undefined;\n n.minX = undefined;\n n.maxY = undefined;\n n.minY = undefined;\n }\n }\n for (var i = 0; i < layoutInfo.nodeSize; i++) {\n var n = layoutInfo.layoutNodes[i];\n if (0 < n.children.length || n.isLocked) {\n // No need to set compound or locked node position\n // logDebug(\"Skipping position update of node: \" + n.id);\n continue;\n }\n // s = \"Node: \" + n.id + \" Previous position: (\" +\n // n.positionX + \", \" + n.positionY + \").\";\n\n // Limit displacement in order to improve stability\n var tempForce = limitForce(n.offsetX, n.offsetY, layoutInfo.temperature);\n n.positionX += tempForce.x;\n n.positionY += tempForce.y;\n n.offsetX = 0;\n n.offsetY = 0;\n n.minX = n.positionX - n.width;\n n.maxX = n.positionX + n.width;\n n.minY = n.positionY - n.height;\n n.maxY = n.positionY + n.height;\n // s += \" New Position: (\" + n.positionX + \", \" + n.positionY + \").\";\n // logDebug(s);\n\n // Update ancestry boudaries\n _updateAncestryBoundaries(n, layoutInfo);\n }\n\n // Update size, position of compund nodes\n for (var i = 0; i < layoutInfo.nodeSize; i++) {\n var n = layoutInfo.layoutNodes[i];\n if (0 < n.children.length && !n.isLocked) {\n n.positionX = (n.maxX + n.minX) / 2;\n n.positionY = (n.maxY + n.minY) / 2;\n n.width = n.maxX - n.minX;\n n.height = n.maxY - n.minY;\n // s = \"Updating position, size of compound node \" + n.id;\n // s += \"\\nPositionX: \" + n.positionX + \", PositionY: \" + n.positionY;\n // s += \"\\nWidth: \" + n.width + \", Height: \" + n.height;\n // logDebug(s);\n }\n }\n};\n\n/**\n * @brief : Limits a force (forceX, forceY) to be not\n * greater (in modulo) than max.\n 8 Preserves force direction.\n */\nvar limitForce = function limitForce(forceX, forceY, max) {\n // var s = \"Limiting force: (\" + forceX + \", \" + forceY + \"). Max: \" + max;\n var force = Math.sqrt(forceX * forceX + forceY * forceY);\n if (force > max) {\n var res = {\n x: max * forceX / force,\n y: max * forceY / force\n };\n } else {\n var res = {\n x: forceX,\n y: forceY\n };\n }\n\n // s += \".\\nResult: (\" + res.x + \", \" + res.y + \")\";\n // logDebug(s);\n\n return res;\n};\n\n/**\n * @brief : Function used for keeping track of compound node\n * sizes, since they should bound all their subnodes.\n */\nvar _updateAncestryBoundaries = function updateAncestryBoundaries(node, layoutInfo) {\n // var s = \"Propagating new position/size of node \" + node.id;\n var parentId = node.parentId;\n if (null == parentId) {\n // If there's no parent, we are done\n // s += \". No parent node.\";\n // logDebug(s);\n return;\n }\n\n // Get Parent Node\n var p = layoutInfo.layoutNodes[layoutInfo.idToIndex[parentId]];\n var flag = false;\n\n // MaxX\n if (null == p.maxX || node.maxX + p.padRight > p.maxX) {\n p.maxX = node.maxX + p.padRight;\n flag = true;\n // s += \"\\nNew maxX for parent node \" + p.id + \": \" + p.maxX;\n }\n\n // MinX\n if (null == p.minX || node.minX - p.padLeft < p.minX) {\n p.minX = node.minX - p.padLeft;\n flag = true;\n // s += \"\\nNew minX for parent node \" + p.id + \": \" + p.minX;\n }\n\n // MaxY\n if (null == p.maxY || node.maxY + p.padBottom > p.maxY) {\n p.maxY = node.maxY + p.padBottom;\n flag = true;\n // s += \"\\nNew maxY for parent node \" + p.id + \": \" + p.maxY;\n }\n\n // MinY\n if (null == p.minY || node.minY - p.padTop < p.minY) {\n p.minY = node.minY - p.padTop;\n flag = true;\n // s += \"\\nNew minY for parent node \" + p.id + \": \" + p.minY;\n }\n\n // If updated boundaries, propagate changes upward\n if (flag) {\n // logDebug(s);\n return _updateAncestryBoundaries(p, layoutInfo);\n }\n\n // s += \". No changes in boundaries/position of parent node \" + p.id;\n // logDebug(s);\n return;\n};\nvar separateComponents = function separateComponents(layoutInfo, options) {\n var nodes = layoutInfo.layoutNodes;\n var components = [];\n for (var i = 0; i < nodes.length; i++) {\n var node = nodes[i];\n var cid = node.cmptId;\n var component = components[cid] = components[cid] || [];\n component.push(node);\n }\n var totalA = 0;\n for (var i = 0; i < components.length; i++) {\n var c = components[i];\n if (!c) {\n continue;\n }\n c.x1 = Infinity;\n c.x2 = -Infinity;\n c.y1 = Infinity;\n c.y2 = -Infinity;\n for (var j = 0; j < c.length; j++) {\n var n = c[j];\n c.x1 = Math.min(c.x1, n.positionX - n.width / 2);\n c.x2 = Math.max(c.x2, n.positionX + n.width / 2);\n c.y1 = Math.min(c.y1, n.positionY - n.height / 2);\n c.y2 = Math.max(c.y2, n.positionY + n.height / 2);\n }\n c.w = c.x2 - c.x1;\n c.h = c.y2 - c.y1;\n totalA += c.w * c.h;\n }\n components.sort(function (c1, c2) {\n return c2.w * c2.h - c1.w * c1.h;\n });\n var x = 0;\n var y = 0;\n var usedW = 0;\n var rowH = 0;\n var maxRowW = Math.sqrt(totalA) * layoutInfo.clientWidth / layoutInfo.clientHeight;\n for (var i = 0; i < components.length; i++) {\n var c = components[i];\n if (!c) {\n continue;\n }\n for (var j = 0; j < c.length; j++) {\n var n = c[j];\n if (!n.isLocked) {\n n.positionX += x - c.x1;\n n.positionY += y - c.y1;\n }\n }\n x += c.w + options.componentSpacing;\n usedW += c.w + options.componentSpacing;\n rowH = Math.max(rowH, c.h);\n if (usedW > maxRowW) {\n y += rowH + options.componentSpacing;\n x = 0;\n usedW = 0;\n rowH = 0;\n }\n }\n};\n\nvar defaults$3 = {\n fit: true,\n // whether to fit the viewport to the graph\n padding: 30,\n // padding used on fit\n boundingBox: undefined,\n // constrain layout bounds; { x1, y1, x2, y2 } or { x1, y1, w, h }\n avoidOverlap: true,\n // prevents node overlap, may overflow boundingBox if not enough space\n avoidOverlapPadding: 10,\n // extra spacing around nodes when avoidOverlap: true\n nodeDimensionsIncludeLabels: false,\n // Excludes the label when calculating node bounding boxes for the layout algorithm\n spacingFactor: undefined,\n // Applies a multiplicative factor (>0) to expand or compress the overall area that the nodes take up\n condense: false,\n // uses all available space on false, uses minimal space on true\n rows: undefined,\n // force num of rows in the grid\n cols: undefined,\n // force num of columns in the grid\n position: function position(node) {},\n // returns { row, col } for element\n sort: undefined,\n // a sorting function to order the nodes; e.g. function(a, b){ return a.data('weight') - b.data('weight') }\n animate: false,\n // whether to transition the node positions\n animationDuration: 500,\n // duration of animation in ms if enabled\n animationEasing: undefined,\n // easing of animation if enabled\n animateFilter: function animateFilter(node, i) {\n return true;\n },\n // a function that determines whether the node should be animated. All nodes animated by default on animate enabled. Non-animated nodes are positioned immediately when the layout starts\n ready: undefined,\n // callback on layoutready\n stop: undefined,\n // callback on layoutstop\n transform: function transform(node, position) {\n return position;\n } // transform a given node position. Useful for changing flow direction in discrete layouts \n};\nfunction GridLayout(options) {\n this.options = extend({}, defaults$3, options);\n}\nGridLayout.prototype.run = function () {\n var params = this.options;\n var options = params;\n var cy = params.cy;\n var eles = options.eles;\n var nodes = eles.nodes().not(':parent');\n if (options.sort) {\n nodes = nodes.sort(options.sort);\n }\n var bb = makeBoundingBox(options.boundingBox ? options.boundingBox : {\n x1: 0,\n y1: 0,\n w: cy.width(),\n h: cy.height()\n });\n if (bb.h === 0 || bb.w === 0) {\n eles.nodes().layoutPositions(this, options, function (ele) {\n return {\n x: bb.x1,\n y: bb.y1\n };\n });\n } else {\n // width/height * splits^2 = cells where splits is number of times to split width\n var cells = nodes.size();\n var splits = Math.sqrt(cells * bb.h / bb.w);\n var rows = Math.round(splits);\n var cols = Math.round(bb.w / bb.h * splits);\n var small = function small(val) {\n if (val == null) {\n return Math.min(rows, cols);\n } else {\n var min = Math.min(rows, cols);\n if (min == rows) {\n rows = val;\n } else {\n cols = val;\n }\n }\n };\n var large = function large(val) {\n if (val == null) {\n return Math.max(rows, cols);\n } else {\n var max = Math.max(rows, cols);\n if (max == rows) {\n rows = val;\n } else {\n cols = val;\n }\n }\n };\n var oRows = options.rows;\n var oCols = options.cols != null ? options.cols : options.columns;\n\n // if rows or columns were set in options, use those values\n if (oRows != null && oCols != null) {\n rows = oRows;\n cols = oCols;\n } else if (oRows != null && oCols == null) {\n rows = oRows;\n cols = Math.ceil(cells / rows);\n } else if (oRows == null && oCols != null) {\n cols = oCols;\n rows = Math.ceil(cells / cols);\n }\n\n // otherwise use the automatic values and adjust accordingly\n\n // if rounding was up, see if we can reduce rows or columns\n else if (cols * rows > cells) {\n var sm = small();\n var lg = large();\n\n // reducing the small side takes away the most cells, so try it first\n if ((sm - 1) * lg >= cells) {\n small(sm - 1);\n } else if ((lg - 1) * sm >= cells) {\n large(lg - 1);\n }\n } else {\n // if rounding was too low, add rows or columns\n while (cols * rows < cells) {\n var _sm = small();\n var _lg = large();\n\n // try to add to larger side first (adds less in multiplication)\n if ((_lg + 1) * _sm >= cells) {\n large(_lg + 1);\n } else {\n small(_sm + 1);\n }\n }\n }\n var cellWidth = bb.w / cols;\n var cellHeight = bb.h / rows;\n if (options.condense) {\n cellWidth = 0;\n cellHeight = 0;\n }\n if (options.avoidOverlap) {\n for (var i = 0; i < nodes.length; i++) {\n var node = nodes[i];\n var pos = node._private.position;\n if (pos.x == null || pos.y == null) {\n // for bb\n pos.x = 0;\n pos.y = 0;\n }\n var nbb = node.layoutDimensions(options);\n var p = options.avoidOverlapPadding;\n var w = nbb.w + p;\n var h = nbb.h + p;\n cellWidth = Math.max(cellWidth, w);\n cellHeight = Math.max(cellHeight, h);\n }\n }\n var cellUsed = {}; // e.g. 'c-0-2' => true\n\n var used = function used(row, col) {\n return cellUsed['c-' + row + '-' + col] ? true : false;\n };\n var use = function use(row, col) {\n cellUsed['c-' + row + '-' + col] = true;\n };\n\n // to keep track of current cell position\n var row = 0;\n var col = 0;\n var moveToNextCell = function moveToNextCell() {\n col++;\n if (col >= cols) {\n col = 0;\n row++;\n }\n };\n\n // get a cache of all the manual positions\n var id2manPos = {};\n for (var _i = 0; _i < nodes.length; _i++) {\n var _node = nodes[_i];\n var rcPos = options.position(_node);\n if (rcPos && (rcPos.row !== undefined || rcPos.col !== undefined)) {\n // must have at least row or col def'd\n var _pos = {\n row: rcPos.row,\n col: rcPos.col\n };\n if (_pos.col === undefined) {\n // find unused col\n _pos.col = 0;\n while (used(_pos.row, _pos.col)) {\n _pos.col++;\n }\n } else if (_pos.row === undefined) {\n // find unused row\n _pos.row = 0;\n while (used(_pos.row, _pos.col)) {\n _pos.row++;\n }\n }\n id2manPos[_node.id()] = _pos;\n use(_pos.row, _pos.col);\n }\n }\n var getPos = function getPos(element, i) {\n var x, y;\n if (element.locked() || element.isParent()) {\n return false;\n }\n\n // see if we have a manual position set\n var rcPos = id2manPos[element.id()];\n if (rcPos) {\n x = rcPos.col * cellWidth + cellWidth / 2 + bb.x1;\n y = rcPos.row * cellHeight + cellHeight / 2 + bb.y1;\n } else {\n // otherwise set automatically\n\n while (used(row, col)) {\n moveToNextCell();\n }\n x = col * cellWidth + cellWidth / 2 + bb.x1;\n y = row * cellHeight + cellHeight / 2 + bb.y1;\n use(row, col);\n moveToNextCell();\n }\n return {\n x: x,\n y: y\n };\n };\n nodes.layoutPositions(this, options, getPos);\n }\n return this; // chaining\n};\n\n// default layout options\nvar defaults$2 = {\n ready: function ready() {},\n // on layoutready\n stop: function stop() {} // on layoutstop\n};\n\n// constructor\n// options : object containing layout options\nfunction NullLayout(options) {\n this.options = extend({}, defaults$2, options);\n}\n\n// runs the layout\nNullLayout.prototype.run = function () {\n var options = this.options;\n var eles = options.eles; // elements to consider in the layout\n var layout = this;\n\n // cy is automatically populated for us in the constructor\n // (disable eslint for next line as this serves as example layout code to external developers)\n // eslint-disable-next-line no-unused-vars\n options.cy;\n layout.emit('layoutstart');\n\n // puts all nodes at (0, 0)\n // n.b. most layouts would use layoutPositions(), instead of positions() and manual events\n eles.nodes().positions(function () {\n return {\n x: 0,\n y: 0\n };\n });\n\n // trigger layoutready when each node has had its position set at least once\n layout.one('layoutready', options.ready);\n layout.emit('layoutready');\n\n // trigger layoutstop when the layout stops (e.g. finishes)\n layout.one('layoutstop', options.stop);\n layout.emit('layoutstop');\n return this; // chaining\n};\n\n// called on continuous layouts to stop them before they finish\nNullLayout.prototype.stop = function () {\n return this; // chaining\n};\n\nvar defaults$1 = {\n positions: undefined,\n // map of (node id) => (position obj); or function(node){ return somPos; }\n zoom: undefined,\n // the zoom level to set (prob want fit = false if set)\n pan: undefined,\n // the pan level to set (prob want fit = false if set)\n fit: true,\n // whether to fit to viewport\n padding: 30,\n // padding on fit\n spacingFactor: undefined,\n // Applies a multiplicative factor (>0) to expand or compress the overall area that the nodes take up\n animate: false,\n // whether to transition the node positions\n animationDuration: 500,\n // duration of animation in ms if enabled\n animationEasing: undefined,\n // easing of animation if enabled\n animateFilter: function animateFilter(node, i) {\n return true;\n },\n // a function that determines whether the node should be animated. All nodes animated by default on animate enabled. Non-animated nodes are positioned immediately when the layout starts\n ready: undefined,\n // callback on layoutready\n stop: undefined,\n // callback on layoutstop\n transform: function transform(node, position) {\n return position;\n } // transform a given node position. Useful for changing flow direction in discrete layouts\n};\nfunction PresetLayout(options) {\n this.options = extend({}, defaults$1, options);\n}\nPresetLayout.prototype.run = function () {\n var options = this.options;\n var eles = options.eles;\n var nodes = eles.nodes();\n var posIsFn = fn$6(options.positions);\n function getPosition(node) {\n if (options.positions == null) {\n return copyPosition(node.position());\n }\n if (posIsFn) {\n return options.positions(node);\n }\n var pos = options.positions[node._private.data.id];\n if (pos == null) {\n return null;\n }\n return pos;\n }\n nodes.layoutPositions(this, options, function (node, i) {\n var position = getPosition(node);\n if (node.locked() || position == null) {\n return false;\n }\n return position;\n });\n return this; // chaining\n};\n\nvar defaults = {\n fit: true,\n // whether to fit to viewport\n padding: 30,\n // fit padding\n boundingBox: undefined,\n // constrain layout bounds; { x1, y1, x2, y2 } or { x1, y1, w, h }\n animate: false,\n // whether to transition the node positions\n animationDuration: 500,\n // duration of animation in ms if enabled\n animationEasing: undefined,\n // easing of animation if enabled\n animateFilter: function animateFilter(node, i) {\n return true;\n },\n // a function that determines whether the node should be animated. All nodes animated by default on animate enabled. Non-animated nodes are positioned immediately when the layout starts\n ready: undefined,\n // callback on layoutready\n stop: undefined,\n // callback on layoutstop\n transform: function transform(node, position) {\n return position;\n } // transform a given node position. Useful for changing flow direction in discrete layouts \n};\nfunction RandomLayout(options) {\n this.options = extend({}, defaults, options);\n}\nRandomLayout.prototype.run = function () {\n var options = this.options;\n var cy = options.cy;\n var eles = options.eles;\n var bb = makeBoundingBox(options.boundingBox ? options.boundingBox : {\n x1: 0,\n y1: 0,\n w: cy.width(),\n h: cy.height()\n });\n var getPos = function getPos(node, i) {\n return {\n x: bb.x1 + Math.round(Math.random() * bb.w),\n y: bb.y1 + Math.round(Math.random() * bb.h)\n };\n };\n eles.nodes().layoutPositions(this, options, getPos);\n return this; // chaining\n};\n\nvar layout = [{\n name: 'breadthfirst',\n impl: BreadthFirstLayout\n}, {\n name: 'circle',\n impl: CircleLayout\n}, {\n name: 'concentric',\n impl: ConcentricLayout\n}, {\n name: 'cose',\n impl: CoseLayout\n}, {\n name: 'grid',\n impl: GridLayout\n}, {\n name: 'null',\n impl: NullLayout\n}, {\n name: 'preset',\n impl: PresetLayout\n}, {\n name: 'random',\n impl: RandomLayout\n}];\n\nfunction NullRenderer(options) {\n this.options = options;\n this.notifications = 0; // for testing\n}\nvar noop = function noop() {};\nvar throwImgErr = function throwImgErr() {\n throw new Error('A headless instance can not render images');\n};\nNullRenderer.prototype = {\n recalculateRenderedStyle: noop,\n notify: function notify() {\n this.notifications++;\n },\n init: noop,\n isHeadless: function isHeadless() {\n return true;\n },\n png: throwImgErr,\n jpg: throwImgErr\n};\n\nvar BRp$f = {};\nBRp$f.arrowShapeWidth = 0.3;\nBRp$f.registerArrowShapes = function () {\n var arrowShapes = this.arrowShapes = {};\n var renderer = this;\n\n // Contract for arrow shapes:\n // 0, 0 is arrow tip\n // (0, 1) is direction towards node\n // (1, 0) is right\n //\n // functional api:\n // collide: check x, y in shape\n // roughCollide: called before collide, no false negatives\n // draw: draw\n // spacing: dist(arrowTip, nodeBoundary)\n // gap: dist(edgeTip, nodeBoundary), edgeTip may != arrowTip\n\n var bbCollide = function bbCollide(x, y, size, angle, translation, edgeWidth, padding) {\n var x1 = translation.x - size / 2 - padding;\n var x2 = translation.x + size / 2 + padding;\n var y1 = translation.y - size / 2 - padding;\n var y2 = translation.y + size / 2 + padding;\n var inside = x1 <= x && x <= x2 && y1 <= y && y <= y2;\n return inside;\n };\n var transform = function transform(x, y, size, angle, translation) {\n var xRotated = x * Math.cos(angle) - y * Math.sin(angle);\n var yRotated = x * Math.sin(angle) + y * Math.cos(angle);\n var xScaled = xRotated * size;\n var yScaled = yRotated * size;\n var xTranslated = xScaled + translation.x;\n var yTranslated = yScaled + translation.y;\n return {\n x: xTranslated,\n y: yTranslated\n };\n };\n var transformPoints = function transformPoints(pts, size, angle, translation) {\n var retPts = [];\n for (var i = 0; i < pts.length; i += 2) {\n var x = pts[i];\n var y = pts[i + 1];\n retPts.push(transform(x, y, size, angle, translation));\n }\n return retPts;\n };\n var pointsToArr = function pointsToArr(pts) {\n var ret = [];\n for (var i = 0; i < pts.length; i++) {\n var p = pts[i];\n ret.push(p.x, p.y);\n }\n return ret;\n };\n var standardGap = function standardGap(edge) {\n return edge.pstyle('width').pfValue * edge.pstyle('arrow-scale').pfValue * 2;\n };\n var defineArrowShape = function defineArrowShape(name, defn) {\n if (string(defn)) {\n defn = arrowShapes[defn];\n }\n arrowShapes[name] = extend({\n name: name,\n points: [-0.15, -0.3, 0.15, -0.3, 0.15, 0.3, -0.15, 0.3],\n collide: function collide(x, y, size, angle, translation, padding) {\n var points = pointsToArr(transformPoints(this.points, size + 2 * padding, angle, translation));\n var inside = pointInsidePolygonPoints(x, y, points);\n return inside;\n },\n roughCollide: bbCollide,\n draw: function draw(context, size, angle, translation) {\n var points = transformPoints(this.points, size, angle, translation);\n renderer.arrowShapeImpl('polygon')(context, points);\n },\n spacing: function spacing(edge) {\n return 0;\n },\n gap: standardGap\n }, defn);\n };\n defineArrowShape('none', {\n collide: falsify,\n roughCollide: falsify,\n draw: noop$1,\n spacing: zeroify,\n gap: zeroify\n });\n defineArrowShape('triangle', {\n points: [-0.15, -0.3, 0, 0, 0.15, -0.3]\n });\n defineArrowShape('arrow', 'triangle');\n defineArrowShape('triangle-backcurve', {\n points: arrowShapes['triangle'].points,\n controlPoint: [0, -0.15],\n roughCollide: bbCollide,\n draw: function draw(context, size, angle, translation, edgeWidth) {\n var ptsTrans = transformPoints(this.points, size, angle, translation);\n var ctrlPt = this.controlPoint;\n var ctrlPtTrans = transform(ctrlPt[0], ctrlPt[1], size, angle, translation);\n renderer.arrowShapeImpl(this.name)(context, ptsTrans, ctrlPtTrans);\n },\n gap: function gap(edge) {\n return standardGap(edge) * 0.8;\n }\n });\n defineArrowShape('triangle-tee', {\n points: [0, 0, 0.15, -0.3, -0.15, -0.3, 0, 0],\n pointsTee: [-0.15, -0.4, -0.15, -0.5, 0.15, -0.5, 0.15, -0.4],\n collide: function collide(x, y, size, angle, translation, edgeWidth, padding) {\n var triPts = pointsToArr(transformPoints(this.points, size + 2 * padding, angle, translation));\n var teePts = pointsToArr(transformPoints(this.pointsTee, size + 2 * padding, angle, translation));\n var inside = pointInsidePolygonPoints(x, y, triPts) || pointInsidePolygonPoints(x, y, teePts);\n return inside;\n },\n draw: function draw(context, size, angle, translation, edgeWidth) {\n var triPts = transformPoints(this.points, size, angle, translation);\n var teePts = transformPoints(this.pointsTee, size, angle, translation);\n renderer.arrowShapeImpl(this.name)(context, triPts, teePts);\n }\n });\n defineArrowShape('circle-triangle', {\n radius: 0.15,\n pointsTr: [0, -0.15, 0.15, -0.45, -0.15, -0.45, 0, -0.15],\n collide: function collide(x, y, size, angle, translation, edgeWidth, padding) {\n var t = translation;\n var circleInside = Math.pow(t.x - x, 2) + Math.pow(t.y - y, 2) <= Math.pow((size + 2 * padding) * this.radius, 2);\n var triPts = pointsToArr(transformPoints(this.points, size + 2 * padding, angle, translation));\n return pointInsidePolygonPoints(x, y, triPts) || circleInside;\n },\n draw: function draw(context, size, angle, translation, edgeWidth) {\n var triPts = transformPoints(this.pointsTr, size, angle, translation);\n renderer.arrowShapeImpl(this.name)(context, triPts, translation.x, translation.y, this.radius * size);\n },\n spacing: function spacing(edge) {\n return renderer.getArrowWidth(edge.pstyle('width').pfValue, edge.pstyle('arrow-scale').value) * this.radius;\n }\n });\n defineArrowShape('triangle-cross', {\n points: [0, 0, 0.15, -0.3, -0.15, -0.3, 0, 0],\n baseCrossLinePts: [-0.15, -0.4,\n // first half of the rectangle\n -0.15, -0.4, 0.15, -0.4,\n // second half of the rectangle\n 0.15, -0.4],\n crossLinePts: function crossLinePts(size, edgeWidth) {\n // shift points so that the distance between the cross points matches edge width\n var p = this.baseCrossLinePts.slice();\n var shiftFactor = edgeWidth / size;\n var y0 = 3;\n var y1 = 5;\n p[y0] = p[y0] - shiftFactor;\n p[y1] = p[y1] - shiftFactor;\n return p;\n },\n collide: function collide(x, y, size, angle, translation, edgeWidth, padding) {\n var triPts = pointsToArr(transformPoints(this.points, size + 2 * padding, angle, translation));\n var teePts = pointsToArr(transformPoints(this.crossLinePts(size, edgeWidth), size + 2 * padding, angle, translation));\n var inside = pointInsidePolygonPoints(x, y, triPts) || pointInsidePolygonPoints(x, y, teePts);\n return inside;\n },\n draw: function draw(context, size, angle, translation, edgeWidth) {\n var triPts = transformPoints(this.points, size, angle, translation);\n var crossLinePts = transformPoints(this.crossLinePts(size, edgeWidth), size, angle, translation);\n renderer.arrowShapeImpl(this.name)(context, triPts, crossLinePts);\n }\n });\n defineArrowShape('vee', {\n points: [-0.15, -0.3, 0, 0, 0.15, -0.3, 0, -0.15],\n gap: function gap(edge) {\n return standardGap(edge) * 0.525;\n }\n });\n defineArrowShape('circle', {\n radius: 0.15,\n collide: function collide(x, y, size, angle, translation, edgeWidth, padding) {\n var t = translation;\n var inside = Math.pow(t.x - x, 2) + Math.pow(t.y - y, 2) <= Math.pow((size + 2 * padding) * this.radius, 2);\n return inside;\n },\n draw: function draw(context, size, angle, translation, edgeWidth) {\n renderer.arrowShapeImpl(this.name)(context, translation.x, translation.y, this.radius * size);\n },\n spacing: function spacing(edge) {\n return renderer.getArrowWidth(edge.pstyle('width').pfValue, edge.pstyle('arrow-scale').value) * this.radius;\n }\n });\n defineArrowShape('tee', {\n points: [-0.15, 0, -0.15, -0.1, 0.15, -0.1, 0.15, 0],\n spacing: function spacing(edge) {\n return 1;\n },\n gap: function gap(edge) {\n return 1;\n }\n });\n defineArrowShape('square', {\n points: [-0.15, 0.00, 0.15, 0.00, 0.15, -0.3, -0.15, -0.3]\n });\n defineArrowShape('diamond', {\n points: [-0.15, -0.15, 0, -0.3, 0.15, -0.15, 0, 0],\n gap: function gap(edge) {\n return edge.pstyle('width').pfValue * edge.pstyle('arrow-scale').value;\n }\n });\n defineArrowShape('chevron', {\n points: [0, 0, -0.15, -0.15, -0.1, -0.2, 0, -0.1, 0.1, -0.2, 0.15, -0.15],\n gap: function gap(edge) {\n return 0.95 * edge.pstyle('width').pfValue * edge.pstyle('arrow-scale').value;\n }\n });\n};\n\nvar BRp$e = {};\n\n// Project mouse\nBRp$e.projectIntoViewport = function (clientX, clientY) {\n var cy = this.cy;\n var offsets = this.findContainerClientCoords();\n var offsetLeft = offsets[0];\n var offsetTop = offsets[1];\n var scale = offsets[4];\n var pan = cy.pan();\n var zoom = cy.zoom();\n var x = ((clientX - offsetLeft) / scale - pan.x) / zoom;\n var y = ((clientY - offsetTop) / scale - pan.y) / zoom;\n return [x, y];\n};\nBRp$e.findContainerClientCoords = function () {\n if (this.containerBB) {\n return this.containerBB;\n }\n var container = this.container;\n var rect = container.getBoundingClientRect();\n var style = this.cy.window().getComputedStyle(container);\n var styleValue = function styleValue(name) {\n return parseFloat(style.getPropertyValue(name));\n };\n var padding = {\n left: styleValue('padding-left'),\n right: styleValue('padding-right'),\n top: styleValue('padding-top'),\n bottom: styleValue('padding-bottom')\n };\n var border = {\n left: styleValue('border-left-width'),\n right: styleValue('border-right-width'),\n top: styleValue('border-top-width'),\n bottom: styleValue('border-bottom-width')\n };\n var clientWidth = container.clientWidth;\n var clientHeight = container.clientHeight;\n var paddingHor = padding.left + padding.right;\n var paddingVer = padding.top + padding.bottom;\n var borderHor = border.left + border.right;\n var scale = rect.width / (clientWidth + borderHor);\n var unscaledW = clientWidth - paddingHor;\n var unscaledH = clientHeight - paddingVer;\n var left = rect.left + padding.left + border.left;\n var top = rect.top + padding.top + border.top;\n return this.containerBB = [left, top, unscaledW, unscaledH, scale];\n};\nBRp$e.invalidateContainerClientCoordsCache = function () {\n this.containerBB = null;\n};\nBRp$e.findNearestElement = function (x, y, interactiveElementsOnly, isTouch) {\n return this.findNearestElements(x, y, interactiveElementsOnly, isTouch)[0];\n};\nBRp$e.findNearestElements = function (x, y, interactiveElementsOnly, isTouch) {\n var self = this;\n var r = this;\n var eles = r.getCachedZSortedEles();\n var near = []; // 1 node max, 1 edge max\n var zoom = r.cy.zoom();\n var hasCompounds = r.cy.hasCompoundNodes();\n var edgeThreshold = (isTouch ? 24 : 8) / zoom;\n var nodeThreshold = (isTouch ? 8 : 2) / zoom;\n var labelThreshold = (isTouch ? 8 : 2) / zoom;\n var minSqDist = Infinity;\n var nearEdge;\n var nearNode;\n if (interactiveElementsOnly) {\n eles = eles.interactive;\n }\n function addEle(ele, sqDist) {\n if (ele.isNode()) {\n if (nearNode) {\n return; // can't replace node\n } else {\n nearNode = ele;\n near.push(ele);\n }\n }\n if (ele.isEdge() && (sqDist == null || sqDist < minSqDist)) {\n if (nearEdge) {\n // then replace existing edge\n // can replace only if same z-index\n if (nearEdge.pstyle('z-compound-depth').value === ele.pstyle('z-compound-depth').value && nearEdge.pstyle('z-compound-depth').value === ele.pstyle('z-compound-depth').value) {\n for (var i = 0; i < near.length; i++) {\n if (near[i].isEdge()) {\n near[i] = ele;\n nearEdge = ele;\n minSqDist = sqDist != null ? sqDist : minSqDist;\n break;\n }\n }\n }\n } else {\n near.push(ele);\n nearEdge = ele;\n minSqDist = sqDist != null ? sqDist : minSqDist;\n }\n }\n }\n function checkNode(node) {\n var width = node.outerWidth() + 2 * nodeThreshold;\n var height = node.outerHeight() + 2 * nodeThreshold;\n var hw = width / 2;\n var hh = height / 2;\n var pos = node.position();\n var cornerRadius = node.pstyle('corner-radius').value === 'auto' ? 'auto' : node.pstyle('corner-radius').pfValue;\n var rs = node._private.rscratch;\n if (pos.x - hw <= x && x <= pos.x + hw // bb check x\n && pos.y - hh <= y && y <= pos.y + hh // bb check y\n ) {\n var shape = r.nodeShapes[self.getNodeShape(node)];\n if (shape.checkPoint(x, y, 0, width, height, pos.x, pos.y, cornerRadius, rs)) {\n addEle(node, 0);\n return true;\n }\n }\n }\n function checkEdge(edge) {\n var _p = edge._private;\n var rs = _p.rscratch;\n var styleWidth = edge.pstyle('width').pfValue;\n var scale = edge.pstyle('arrow-scale').value;\n var width = styleWidth / 2 + edgeThreshold; // more like a distance radius from centre\n var widthSq = width * width;\n var width2 = width * 2;\n var src = _p.source;\n var tgt = _p.target;\n var sqDist;\n if (rs.edgeType === 'segments' || rs.edgeType === 'straight' || rs.edgeType === 'haystack') {\n var pts = rs.allpts;\n for (var i = 0; i + 3 < pts.length; i += 2) {\n if (inLineVicinity(x, y, pts[i], pts[i + 1], pts[i + 2], pts[i + 3], width2) && widthSq > (sqDist = sqdistToFiniteLine(x, y, pts[i], pts[i + 1], pts[i + 2], pts[i + 3]))) {\n addEle(edge, sqDist);\n return true;\n }\n }\n } else if (rs.edgeType === 'bezier' || rs.edgeType === 'multibezier' || rs.edgeType === 'self' || rs.edgeType === 'compound') {\n var pts = rs.allpts;\n for (var i = 0; i + 5 < rs.allpts.length; i += 4) {\n if (inBezierVicinity(x, y, pts[i], pts[i + 1], pts[i + 2], pts[i + 3], pts[i + 4], pts[i + 5], width2) && widthSq > (sqDist = sqdistToQuadraticBezier(x, y, pts[i], pts[i + 1], pts[i + 2], pts[i + 3], pts[i + 4], pts[i + 5]))) {\n addEle(edge, sqDist);\n return true;\n }\n }\n }\n\n // if we're close to the edge but didn't hit it, maybe we hit its arrows\n\n var src = src || _p.source;\n var tgt = tgt || _p.target;\n var arSize = self.getArrowWidth(styleWidth, scale);\n var arrows = [{\n name: 'source',\n x: rs.arrowStartX,\n y: rs.arrowStartY,\n angle: rs.srcArrowAngle\n }, {\n name: 'target',\n x: rs.arrowEndX,\n y: rs.arrowEndY,\n angle: rs.tgtArrowAngle\n }, {\n name: 'mid-source',\n x: rs.midX,\n y: rs.midY,\n angle: rs.midsrcArrowAngle\n }, {\n name: 'mid-target',\n x: rs.midX,\n y: rs.midY,\n angle: rs.midtgtArrowAngle\n }];\n for (var i = 0; i < arrows.length; i++) {\n var ar = arrows[i];\n var shape = r.arrowShapes[edge.pstyle(ar.name + '-arrow-shape').value];\n var edgeWidth = edge.pstyle('width').pfValue;\n if (shape.roughCollide(x, y, arSize, ar.angle, {\n x: ar.x,\n y: ar.y\n }, edgeWidth, edgeThreshold) && shape.collide(x, y, arSize, ar.angle, {\n x: ar.x,\n y: ar.y\n }, edgeWidth, edgeThreshold)) {\n addEle(edge);\n return true;\n }\n }\n\n // for compound graphs, hitting edge may actually want a connected node instead (b/c edge may have greater z-index precedence)\n if (hasCompounds && near.length > 0) {\n checkNode(src);\n checkNode(tgt);\n }\n }\n function preprop(obj, name, pre) {\n return getPrefixedProperty(obj, name, pre);\n }\n function checkLabel(ele, prefix) {\n var _p = ele._private;\n var th = labelThreshold;\n var prefixDash;\n if (prefix) {\n prefixDash = prefix + '-';\n } else {\n prefixDash = '';\n }\n ele.boundingBox();\n var bb = _p.labelBounds[prefix || 'main'];\n var text = ele.pstyle(prefixDash + 'label').value;\n var eventsEnabled = ele.pstyle('text-events').strValue === 'yes';\n if (!eventsEnabled || !text) {\n return;\n }\n var lx = preprop(_p.rscratch, 'labelX', prefix);\n var ly = preprop(_p.rscratch, 'labelY', prefix);\n var theta = preprop(_p.rscratch, 'labelAngle', prefix);\n var ox = ele.pstyle(prefixDash + 'text-margin-x').pfValue;\n var oy = ele.pstyle(prefixDash + 'text-margin-y').pfValue;\n var lx1 = bb.x1 - th - ox; // (-ox, -oy) as bb already includes margin\n var lx2 = bb.x2 + th - ox; // and rotation is about (lx, ly)\n var ly1 = bb.y1 - th - oy;\n var ly2 = bb.y2 + th - oy;\n if (theta) {\n var cos = Math.cos(theta);\n var sin = Math.sin(theta);\n var rotate = function rotate(x, y) {\n x = x - lx;\n y = y - ly;\n return {\n x: x * cos - y * sin + lx,\n y: x * sin + y * cos + ly\n };\n };\n var px1y1 = rotate(lx1, ly1);\n var px1y2 = rotate(lx1, ly2);\n var px2y1 = rotate(lx2, ly1);\n var px2y2 = rotate(lx2, ly2);\n var points = [\n // with the margin added after the rotation is applied\n px1y1.x + ox, px1y1.y + oy, px2y1.x + ox, px2y1.y + oy, px2y2.x + ox, px2y2.y + oy, px1y2.x + ox, px1y2.y + oy];\n if (pointInsidePolygonPoints(x, y, points)) {\n addEle(ele);\n return true;\n }\n } else {\n // do a cheaper bb check\n if (inBoundingBox(bb, x, y)) {\n addEle(ele);\n return true;\n }\n }\n }\n for (var i = eles.length - 1; i >= 0; i--) {\n // reverse order for precedence\n var ele = eles[i];\n if (ele.isNode()) {\n checkNode(ele) || checkLabel(ele);\n } else {\n // then edge\n checkEdge(ele) || checkLabel(ele) || checkLabel(ele, 'source') || checkLabel(ele, 'target');\n }\n }\n return near;\n};\n\n// 'Give me everything from this box'\nBRp$e.getAllInBox = function (x1, y1, x2, y2) {\n var eles = this.getCachedZSortedEles().interactive;\n var box = [];\n var x1c = Math.min(x1, x2);\n var x2c = Math.max(x1, x2);\n var y1c = Math.min(y1, y2);\n var y2c = Math.max(y1, y2);\n x1 = x1c;\n x2 = x2c;\n y1 = y1c;\n y2 = y2c;\n var boxBb = makeBoundingBox({\n x1: x1,\n y1: y1,\n x2: x2,\n y2: y2\n });\n for (var e = 0; e < eles.length; e++) {\n var ele = eles[e];\n if (ele.isNode()) {\n var node = ele;\n var nodeBb = node.boundingBox({\n includeNodes: true,\n includeEdges: false,\n includeLabels: false\n });\n if (boundingBoxesIntersect(boxBb, nodeBb) && !boundingBoxInBoundingBox(nodeBb, boxBb)) {\n box.push(node);\n }\n } else {\n var edge = ele;\n var _p = edge._private;\n var rs = _p.rscratch;\n if (rs.startX != null && rs.startY != null && !inBoundingBox(boxBb, rs.startX, rs.startY)) {\n continue;\n }\n if (rs.endX != null && rs.endY != null && !inBoundingBox(boxBb, rs.endX, rs.endY)) {\n continue;\n }\n if (rs.edgeType === 'bezier' || rs.edgeType === 'multibezier' || rs.edgeType === 'self' || rs.edgeType === 'compound' || rs.edgeType === 'segments' || rs.edgeType === 'haystack') {\n var pts = _p.rstyle.bezierPts || _p.rstyle.linePts || _p.rstyle.haystackPts;\n var allInside = true;\n for (var i = 0; i < pts.length; i++) {\n if (!pointInBoundingBox(boxBb, pts[i])) {\n allInside = false;\n break;\n }\n }\n if (allInside) {\n box.push(edge);\n }\n } else if (rs.edgeType === 'haystack' || rs.edgeType === 'straight') {\n box.push(edge);\n }\n }\n }\n return box;\n};\n\nvar BRp$d = {};\nBRp$d.calculateArrowAngles = function (edge) {\n var rs = edge._private.rscratch;\n var isHaystack = rs.edgeType === 'haystack';\n var isBezier = rs.edgeType === 'bezier';\n var isMultibezier = rs.edgeType === 'multibezier';\n var isSegments = rs.edgeType === 'segments';\n var isCompound = rs.edgeType === 'compound';\n var isSelf = rs.edgeType === 'self';\n\n // Displacement gives direction for arrowhead orientation\n var dispX, dispY;\n var startX, startY, endX, endY, midX, midY;\n if (isHaystack) {\n startX = rs.haystackPts[0];\n startY = rs.haystackPts[1];\n endX = rs.haystackPts[2];\n endY = rs.haystackPts[3];\n } else {\n startX = rs.arrowStartX;\n startY = rs.arrowStartY;\n endX = rs.arrowEndX;\n endY = rs.arrowEndY;\n }\n midX = rs.midX;\n midY = rs.midY;\n\n // source\n //\n\n if (isSegments) {\n dispX = startX - rs.segpts[0];\n dispY = startY - rs.segpts[1];\n } else if (isMultibezier || isCompound || isSelf || isBezier) {\n var pts = rs.allpts;\n var bX = qbezierAt(pts[0], pts[2], pts[4], 0.1);\n var bY = qbezierAt(pts[1], pts[3], pts[5], 0.1);\n dispX = startX - bX;\n dispY = startY - bY;\n } else {\n dispX = startX - midX;\n dispY = startY - midY;\n }\n rs.srcArrowAngle = getAngleFromDisp(dispX, dispY);\n\n // mid target\n //\n\n var midX = rs.midX;\n var midY = rs.midY;\n if (isHaystack) {\n midX = (startX + endX) / 2;\n midY = (startY + endY) / 2;\n }\n dispX = endX - startX;\n dispY = endY - startY;\n if (isSegments) {\n var pts = rs.allpts;\n if (pts.length / 2 % 2 === 0) {\n var i2 = pts.length / 2;\n var i1 = i2 - 2;\n dispX = pts[i2] - pts[i1];\n dispY = pts[i2 + 1] - pts[i1 + 1];\n } else if (rs.isRound) {\n dispX = rs.midVector[1];\n dispY = -rs.midVector[0];\n } else {\n var i2 = pts.length / 2 - 1;\n var i1 = i2 - 2;\n dispX = pts[i2] - pts[i1];\n dispY = pts[i2 + 1] - pts[i1 + 1];\n }\n } else if (isMultibezier || isCompound || isSelf) {\n var pts = rs.allpts;\n var cpts = rs.ctrlpts;\n var bp0x, bp0y;\n var bp1x, bp1y;\n if (cpts.length / 2 % 2 === 0) {\n var p0 = pts.length / 2 - 1; // startpt\n var ic = p0 + 2;\n var p1 = ic + 2;\n bp0x = qbezierAt(pts[p0], pts[ic], pts[p1], 0.0);\n bp0y = qbezierAt(pts[p0 + 1], pts[ic + 1], pts[p1 + 1], 0.0);\n bp1x = qbezierAt(pts[p0], pts[ic], pts[p1], 0.0001);\n bp1y = qbezierAt(pts[p0 + 1], pts[ic + 1], pts[p1 + 1], 0.0001);\n } else {\n var ic = pts.length / 2 - 1; // ctrpt\n var p0 = ic - 2; // startpt\n var p1 = ic + 2; // endpt\n\n bp0x = qbezierAt(pts[p0], pts[ic], pts[p1], 0.4999);\n bp0y = qbezierAt(pts[p0 + 1], pts[ic + 1], pts[p1 + 1], 0.4999);\n bp1x = qbezierAt(pts[p0], pts[ic], pts[p1], 0.5);\n bp1y = qbezierAt(pts[p0 + 1], pts[ic + 1], pts[p1 + 1], 0.5);\n }\n dispX = bp1x - bp0x;\n dispY = bp1y - bp0y;\n }\n rs.midtgtArrowAngle = getAngleFromDisp(dispX, dispY);\n rs.midDispX = dispX;\n rs.midDispY = dispY;\n\n // mid source\n //\n\n dispX *= -1;\n dispY *= -1;\n if (isSegments) {\n var pts = rs.allpts;\n if (pts.length / 2 % 2 === 0) ; else if (!rs.isRound) {\n var i2 = pts.length / 2 - 1;\n var i3 = i2 + 2;\n dispX = -(pts[i3] - pts[i2]);\n dispY = -(pts[i3 + 1] - pts[i2 + 1]);\n }\n }\n rs.midsrcArrowAngle = getAngleFromDisp(dispX, dispY);\n\n // target\n //\n\n if (isSegments) {\n dispX = endX - rs.segpts[rs.segpts.length - 2];\n dispY = endY - rs.segpts[rs.segpts.length - 1];\n } else if (isMultibezier || isCompound || isSelf || isBezier) {\n var pts = rs.allpts;\n var l = pts.length;\n var bX = qbezierAt(pts[l - 6], pts[l - 4], pts[l - 2], 0.9);\n var bY = qbezierAt(pts[l - 5], pts[l - 3], pts[l - 1], 0.9);\n dispX = endX - bX;\n dispY = endY - bY;\n } else {\n dispX = endX - midX;\n dispY = endY - midY;\n }\n rs.tgtArrowAngle = getAngleFromDisp(dispX, dispY);\n};\nBRp$d.getArrowWidth = BRp$d.getArrowHeight = function (edgeWidth, scale) {\n var cache = this.arrowWidthCache = this.arrowWidthCache || {};\n var cachedVal = cache[edgeWidth + ', ' + scale];\n if (cachedVal) {\n return cachedVal;\n }\n cachedVal = Math.max(Math.pow(edgeWidth * 13.37, 0.9), 29) * scale;\n cache[edgeWidth + ', ' + scale] = cachedVal;\n return cachedVal;\n};\n\n/**\n * Explained by Blindman67 at https://stackoverflow.com/a/44856925/11028828\n */\n\n// Declare reused variable to avoid reallocating variables every time the function is called\nvar x,\n y,\n v1 = {},\n v2 = {},\n sinA,\n sinA90,\n radDirection,\n drawDirection,\n angle,\n halfAngle,\n cRadius,\n lenOut,\n radius,\n limit;\nvar startX, startY, stopX, stopY;\nvar lastPoint;\n\n// convert 2 points into vector form, polar form, and normalised\nvar asVec = function asVec(p, pp, v) {\n v.x = pp.x - p.x;\n v.y = pp.y - p.y;\n v.len = Math.sqrt(v.x * v.x + v.y * v.y);\n v.nx = v.x / v.len;\n v.ny = v.y / v.len;\n v.ang = Math.atan2(v.ny, v.nx);\n};\nvar invertVec = function invertVec(originalV, invertedV) {\n invertedV.x = originalV.x * -1;\n invertedV.y = originalV.y * -1;\n invertedV.nx = originalV.nx * -1;\n invertedV.ny = originalV.ny * -1;\n invertedV.ang = originalV.ang > 0 ? -(Math.PI - originalV.ang) : Math.PI + originalV.ang;\n};\nvar calcCornerArc = function calcCornerArc(previousPoint, currentPoint, nextPoint, radiusMax, isArcRadius) {\n //-----------------------------------------\n // Part 1\n previousPoint !== lastPoint ? asVec(currentPoint, previousPoint, v1) : invertVec(v2, v1); // Avoid recalculating vec if it is the invert of the last one calculated\n asVec(currentPoint, nextPoint, v2);\n sinA = v1.nx * v2.ny - v1.ny * v2.nx;\n sinA90 = v1.nx * v2.nx - v1.ny * -v2.ny;\n angle = Math.asin(Math.max(-1, Math.min(1, sinA)));\n if (Math.abs(angle) < 1e-6) {\n x = currentPoint.x;\n y = currentPoint.y;\n cRadius = radius = 0;\n return;\n }\n //-----------------------------------------\n radDirection = 1;\n drawDirection = false;\n if (sinA90 < 0) {\n if (angle < 0) {\n angle = Math.PI + angle;\n } else {\n angle = Math.PI - angle;\n radDirection = -1;\n drawDirection = true;\n }\n } else {\n if (angle > 0) {\n radDirection = -1;\n drawDirection = true;\n }\n }\n if (currentPoint.radius !== undefined) {\n radius = currentPoint.radius;\n } else {\n radius = radiusMax;\n }\n //-----------------------------------------\n // Part 2\n halfAngle = angle / 2;\n //-----------------------------------------\n\n limit = Math.min(v1.len / 2, v2.len / 2);\n if (isArcRadius) {\n //-----------------------------------------\n // Part 3\n lenOut = Math.abs(Math.cos(halfAngle) * radius / Math.sin(halfAngle));\n\n //-----------------------------------------\n // Special part A\n if (lenOut > limit) {\n lenOut = limit;\n cRadius = Math.abs(lenOut * Math.sin(halfAngle) / Math.cos(halfAngle));\n } else {\n cRadius = radius;\n }\n } else {\n lenOut = Math.min(limit, radius);\n cRadius = Math.abs(lenOut * Math.sin(halfAngle) / Math.cos(halfAngle));\n }\n //-----------------------------------------\n\n //-----------------------------------------\n // Part 4\n stopX = currentPoint.x + v2.nx * lenOut;\n stopY = currentPoint.y + v2.ny * lenOut;\n //-----------------------------------------\n // Part 5\n x = stopX - v2.ny * cRadius * radDirection;\n y = stopY + v2.nx * cRadius * radDirection;\n //-----------------------------------------\n // Additional Part : calculate start point E\n startX = currentPoint.x + v1.nx * lenOut;\n startY = currentPoint.y + v1.ny * lenOut;\n\n // Save last point to avoid recalculating vector when not needed\n lastPoint = currentPoint;\n};\n\n/**\n * Draw corner provided by {@link getRoundCorner}\n *\n * @param ctx :CanvasRenderingContext2D\n * @param roundCorner {{cx:number, cy:number, radius:number, endAngle: number, startAngle: number, counterClockwise: boolean}}\n */\nfunction drawPreparedRoundCorner(ctx, roundCorner) {\n if (roundCorner.radius === 0) ctx.lineTo(roundCorner.cx, roundCorner.cy);else ctx.arc(roundCorner.cx, roundCorner.cy, roundCorner.radius, roundCorner.startAngle, roundCorner.endAngle, roundCorner.counterClockwise);\n}\n\n/**\n * Get round corner from a point and its previous and next neighbours in a path\n *\n * @param previousPoint {{x: number, y:number, radius: number?}}\n * @param currentPoint {{x: number, y:number, radius: number?}}\n * @param nextPoint {{x: number, y:number, radius: number?}}\n * @param radiusMax :number\n * @param isArcRadius :boolean\n * @return {{\n * cx:number, cy:number, radius:number,\n * startX:number, startY:number,\n * stopX:number, stopY: number,\n * endAngle: number, startAngle: number, counterClockwise: boolean\n * }}\n */\nfunction getRoundCorner(previousPoint, currentPoint, nextPoint, radiusMax) {\n var isArcRadius = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : true;\n if (radiusMax === 0 || currentPoint.radius === 0) return {\n cx: currentPoint.x,\n cy: currentPoint.y,\n radius: 0,\n startX: currentPoint.x,\n startY: currentPoint.y,\n stopX: currentPoint.x,\n stopY: currentPoint.y,\n startAngle: undefined,\n endAngle: undefined,\n counterClockwise: undefined\n };\n calcCornerArc(previousPoint, currentPoint, nextPoint, radiusMax, isArcRadius);\n return {\n cx: x,\n cy: y,\n radius: cRadius,\n startX: startX,\n startY: startY,\n stopX: stopX,\n stopY: stopY,\n startAngle: v1.ang + Math.PI / 2 * radDirection,\n endAngle: v2.ang - Math.PI / 2 * radDirection,\n counterClockwise: drawDirection\n };\n}\n\nvar BRp$c = {};\nBRp$c.findMidptPtsEtc = function (edge, pairInfo) {\n var posPts = pairInfo.posPts,\n intersectionPts = pairInfo.intersectionPts,\n vectorNormInverse = pairInfo.vectorNormInverse;\n var midptPts;\n\n // n.b. assumes all edges in bezier bundle have same endpoints specified\n var srcManEndpt = edge.pstyle('source-endpoint');\n var tgtManEndpt = edge.pstyle('target-endpoint');\n var haveManualEndPts = srcManEndpt.units != null && tgtManEndpt.units != null;\n var recalcVectorNormInverse = function recalcVectorNormInverse(x1, y1, x2, y2) {\n var dy = y2 - y1;\n var dx = x2 - x1;\n var l = Math.sqrt(dx * dx + dy * dy);\n return {\n x: -dy / l,\n y: dx / l\n };\n };\n var edgeDistances = edge.pstyle('edge-distances').value;\n switch (edgeDistances) {\n case 'node-position':\n midptPts = posPts;\n break;\n case 'intersection':\n midptPts = intersectionPts;\n break;\n case 'endpoints':\n {\n if (haveManualEndPts) {\n var _this$manualEndptToPx = this.manualEndptToPx(edge.source()[0], srcManEndpt),\n _this$manualEndptToPx2 = _slicedToArray(_this$manualEndptToPx, 2),\n x1 = _this$manualEndptToPx2[0],\n y1 = _this$manualEndptToPx2[1];\n var _this$manualEndptToPx3 = this.manualEndptToPx(edge.target()[0], tgtManEndpt),\n _this$manualEndptToPx4 = _slicedToArray(_this$manualEndptToPx3, 2),\n x2 = _this$manualEndptToPx4[0],\n y2 = _this$manualEndptToPx4[1];\n var endPts = {\n x1: x1,\n y1: y1,\n x2: x2,\n y2: y2\n };\n vectorNormInverse = recalcVectorNormInverse(x1, y1, x2, y2);\n midptPts = endPts;\n } else {\n warn(\"Edge \".concat(edge.id(), \" has edge-distances:endpoints specified without manual endpoints specified via source-endpoint and target-endpoint. Falling back on edge-distances:intersection (default).\"));\n midptPts = intersectionPts; // back to default\n }\n break;\n }\n }\n return {\n midptPts: midptPts,\n vectorNormInverse: vectorNormInverse\n };\n};\nBRp$c.findHaystackPoints = function (edges) {\n for (var i = 0; i < edges.length; i++) {\n var edge = edges[i];\n var _p = edge._private;\n var rs = _p.rscratch;\n if (!rs.haystack) {\n var angle = Math.random() * 2 * Math.PI;\n rs.source = {\n x: Math.cos(angle),\n y: Math.sin(angle)\n };\n angle = Math.random() * 2 * Math.PI;\n rs.target = {\n x: Math.cos(angle),\n y: Math.sin(angle)\n };\n }\n var src = _p.source;\n var tgt = _p.target;\n var srcPos = src.position();\n var tgtPos = tgt.position();\n var srcW = src.width();\n var tgtW = tgt.width();\n var srcH = src.height();\n var tgtH = tgt.height();\n var radius = edge.pstyle('haystack-radius').value;\n var halfRadius = radius / 2; // b/c have to half width/height\n\n rs.haystackPts = rs.allpts = [rs.source.x * srcW * halfRadius + srcPos.x, rs.source.y * srcH * halfRadius + srcPos.y, rs.target.x * tgtW * halfRadius + tgtPos.x, rs.target.y * tgtH * halfRadius + tgtPos.y];\n rs.midX = (rs.allpts[0] + rs.allpts[2]) / 2;\n rs.midY = (rs.allpts[1] + rs.allpts[3]) / 2;\n\n // always override as haystack in case set to different type previously\n rs.edgeType = 'haystack';\n rs.haystack = true;\n this.storeEdgeProjections(edge);\n this.calculateArrowAngles(edge);\n this.recalculateEdgeLabelProjections(edge);\n this.calculateLabelAngles(edge);\n }\n};\nBRp$c.findSegmentsPoints = function (edge, pairInfo) {\n // Segments (multiple straight lines)\n\n var rs = edge._private.rscratch;\n var segmentWs = edge.pstyle('segment-weights');\n var segmentDs = edge.pstyle('segment-distances');\n var segmentRs = edge.pstyle('segment-radii');\n var segmentTs = edge.pstyle('radius-type');\n var segmentsN = Math.min(segmentWs.pfValue.length, segmentDs.pfValue.length);\n var lastRadius = segmentRs.pfValue[segmentRs.pfValue.length - 1];\n var lastRadiusType = segmentTs.pfValue[segmentTs.pfValue.length - 1];\n rs.edgeType = 'segments';\n rs.segpts = [];\n rs.radii = [];\n rs.isArcRadius = [];\n for (var s = 0; s < segmentsN; s++) {\n var w = segmentWs.pfValue[s];\n var d = segmentDs.pfValue[s];\n var w1 = 1 - w;\n var w2 = w;\n var _this$findMidptPtsEtc = this.findMidptPtsEtc(edge, pairInfo),\n midptPts = _this$findMidptPtsEtc.midptPts,\n vectorNormInverse = _this$findMidptPtsEtc.vectorNormInverse;\n var adjustedMidpt = {\n x: midptPts.x1 * w1 + midptPts.x2 * w2,\n y: midptPts.y1 * w1 + midptPts.y2 * w2\n };\n rs.segpts.push(adjustedMidpt.x + vectorNormInverse.x * d, adjustedMidpt.y + vectorNormInverse.y * d);\n rs.radii.push(segmentRs.pfValue[s] !== undefined ? segmentRs.pfValue[s] : lastRadius);\n rs.isArcRadius.push((segmentTs.pfValue[s] !== undefined ? segmentTs.pfValue[s] : lastRadiusType) === 'arc-radius');\n }\n};\nBRp$c.findLoopPoints = function (edge, pairInfo, i, edgeIsUnbundled) {\n // Self-edge\n\n var rs = edge._private.rscratch;\n var dirCounts = pairInfo.dirCounts,\n srcPos = pairInfo.srcPos;\n var ctrlptDists = edge.pstyle('control-point-distances');\n var ctrlptDist = ctrlptDists ? ctrlptDists.pfValue[0] : undefined;\n var loopDir = edge.pstyle('loop-direction').pfValue;\n var loopSwp = edge.pstyle('loop-sweep').pfValue;\n var stepSize = edge.pstyle('control-point-step-size').pfValue;\n rs.edgeType = 'self';\n var j = i;\n var loopDist = stepSize;\n if (edgeIsUnbundled) {\n j = 0;\n loopDist = ctrlptDist;\n }\n var loopAngle = loopDir - Math.PI / 2;\n var outAngle = loopAngle - loopSwp / 2;\n var inAngle = loopAngle + loopSwp / 2;\n\n // increase by step size for overlapping loops, keyed on direction and sweep values\n var dc = String(loopDir + '_' + loopSwp);\n j = dirCounts[dc] === undefined ? dirCounts[dc] = 0 : ++dirCounts[dc];\n rs.ctrlpts = [srcPos.x + Math.cos(outAngle) * 1.4 * loopDist * (j / 3 + 1), srcPos.y + Math.sin(outAngle) * 1.4 * loopDist * (j / 3 + 1), srcPos.x + Math.cos(inAngle) * 1.4 * loopDist * (j / 3 + 1), srcPos.y + Math.sin(inAngle) * 1.4 * loopDist * (j / 3 + 1)];\n};\nBRp$c.findCompoundLoopPoints = function (edge, pairInfo, i, edgeIsUnbundled) {\n // Compound edge\n\n var rs = edge._private.rscratch;\n rs.edgeType = 'compound';\n var srcPos = pairInfo.srcPos,\n tgtPos = pairInfo.tgtPos,\n srcW = pairInfo.srcW,\n srcH = pairInfo.srcH,\n tgtW = pairInfo.tgtW,\n tgtH = pairInfo.tgtH;\n var stepSize = edge.pstyle('control-point-step-size').pfValue;\n var ctrlptDists = edge.pstyle('control-point-distances');\n var ctrlptDist = ctrlptDists ? ctrlptDists.pfValue[0] : undefined;\n var j = i;\n var loopDist = stepSize;\n if (edgeIsUnbundled) {\n j = 0;\n loopDist = ctrlptDist;\n }\n var loopW = 50;\n var loopaPos = {\n x: srcPos.x - srcW / 2,\n y: srcPos.y - srcH / 2\n };\n var loopbPos = {\n x: tgtPos.x - tgtW / 2,\n y: tgtPos.y - tgtH / 2\n };\n var loopPos = {\n x: Math.min(loopaPos.x, loopbPos.x),\n y: Math.min(loopaPos.y, loopbPos.y)\n };\n\n // avoids cases with impossible beziers\n var minCompoundStretch = 0.5;\n var compoundStretchA = Math.max(minCompoundStretch, Math.log(srcW * 0.01));\n var compoundStretchB = Math.max(minCompoundStretch, Math.log(tgtW * 0.01));\n rs.ctrlpts = [loopPos.x, loopPos.y - (1 + Math.pow(loopW, 1.12) / 100) * loopDist * (j / 3 + 1) * compoundStretchA, loopPos.x - (1 + Math.pow(loopW, 1.12) / 100) * loopDist * (j / 3 + 1) * compoundStretchB, loopPos.y];\n};\nBRp$c.findStraightEdgePoints = function (edge) {\n // Straight edge within bundle\n\n edge._private.rscratch.edgeType = 'straight';\n};\nBRp$c.findBezierPoints = function (edge, pairInfo, i, edgeIsUnbundled, edgeIsSwapped) {\n var rs = edge._private.rscratch;\n var stepSize = edge.pstyle('control-point-step-size').pfValue;\n var ctrlptDists = edge.pstyle('control-point-distances');\n var ctrlptWs = edge.pstyle('control-point-weights');\n var bezierN = ctrlptDists && ctrlptWs ? Math.min(ctrlptDists.value.length, ctrlptWs.value.length) : 1;\n var ctrlptDist = ctrlptDists ? ctrlptDists.pfValue[0] : undefined;\n var ctrlptWeight = ctrlptWs.value[0];\n\n // (Multi)bezier\n\n var multi = edgeIsUnbundled;\n rs.edgeType = multi ? 'multibezier' : 'bezier';\n rs.ctrlpts = [];\n for (var b = 0; b < bezierN; b++) {\n var normctrlptDist = (0.5 - pairInfo.eles.length / 2 + i) * stepSize * (edgeIsSwapped ? -1 : 1);\n var manctrlptDist = undefined;\n var sign = signum(normctrlptDist);\n if (multi) {\n ctrlptDist = ctrlptDists ? ctrlptDists.pfValue[b] : stepSize; // fall back on step size\n ctrlptWeight = ctrlptWs.value[b];\n }\n if (edgeIsUnbundled) {\n // multi or single unbundled\n manctrlptDist = ctrlptDist;\n } else {\n manctrlptDist = ctrlptDist !== undefined ? sign * ctrlptDist : undefined;\n }\n var distanceFromMidpoint = manctrlptDist !== undefined ? manctrlptDist : normctrlptDist;\n var w1 = 1 - ctrlptWeight;\n var w2 = ctrlptWeight;\n var _this$findMidptPtsEtc2 = this.findMidptPtsEtc(edge, pairInfo),\n midptPts = _this$findMidptPtsEtc2.midptPts,\n vectorNormInverse = _this$findMidptPtsEtc2.vectorNormInverse;\n var adjustedMidpt = {\n x: midptPts.x1 * w1 + midptPts.x2 * w2,\n y: midptPts.y1 * w1 + midptPts.y2 * w2\n };\n rs.ctrlpts.push(adjustedMidpt.x + vectorNormInverse.x * distanceFromMidpoint, adjustedMidpt.y + vectorNormInverse.y * distanceFromMidpoint);\n }\n};\nBRp$c.findTaxiPoints = function (edge, pairInfo) {\n // Taxicab geometry with two turns maximum\n\n var rs = edge._private.rscratch;\n rs.edgeType = 'segments';\n var VERTICAL = 'vertical';\n var HORIZONTAL = 'horizontal';\n var LEFTWARD = 'leftward';\n var RIGHTWARD = 'rightward';\n var DOWNWARD = 'downward';\n var UPWARD = 'upward';\n var AUTO = 'auto';\n var posPts = pairInfo.posPts,\n srcW = pairInfo.srcW,\n srcH = pairInfo.srcH,\n tgtW = pairInfo.tgtW,\n tgtH = pairInfo.tgtH;\n var edgeDistances = edge.pstyle('edge-distances').value;\n var dIncludesNodeBody = edgeDistances !== 'node-position';\n var taxiDir = edge.pstyle('taxi-direction').value;\n var rawTaxiDir = taxiDir; // unprocessed value\n var taxiTurn = edge.pstyle('taxi-turn');\n var turnIsPercent = taxiTurn.units === '%';\n var taxiTurnPfVal = taxiTurn.pfValue;\n var turnIsNegative = taxiTurnPfVal < 0; // i.e. from target side\n var minD = edge.pstyle('taxi-turn-min-distance').pfValue;\n var dw = dIncludesNodeBody ? (srcW + tgtW) / 2 : 0;\n var dh = dIncludesNodeBody ? (srcH + tgtH) / 2 : 0;\n var pdx = posPts.x2 - posPts.x1;\n var pdy = posPts.y2 - posPts.y1;\n\n // take away the effective w/h from the magnitude of the delta value\n var subDWH = function subDWH(dxy, dwh) {\n if (dxy > 0) {\n return Math.max(dxy - dwh, 0);\n } else {\n return Math.min(dxy + dwh, 0);\n }\n };\n var dx = subDWH(pdx, dw);\n var dy = subDWH(pdy, dh);\n var isExplicitDir = false;\n if (rawTaxiDir === AUTO) {\n taxiDir = Math.abs(dx) > Math.abs(dy) ? HORIZONTAL : VERTICAL;\n } else if (rawTaxiDir === UPWARD || rawTaxiDir === DOWNWARD) {\n taxiDir = VERTICAL;\n isExplicitDir = true;\n } else if (rawTaxiDir === LEFTWARD || rawTaxiDir === RIGHTWARD) {\n taxiDir = HORIZONTAL;\n isExplicitDir = true;\n }\n var isVert = taxiDir === VERTICAL;\n var l = isVert ? dy : dx;\n var pl = isVert ? pdy : pdx;\n var sgnL = signum(pl);\n var forcedDir = false;\n if (!(isExplicitDir && (turnIsPercent || turnIsNegative)) // forcing in this case would cause weird growing in the opposite direction\n && (rawTaxiDir === DOWNWARD && pl < 0 || rawTaxiDir === UPWARD && pl > 0 || rawTaxiDir === LEFTWARD && pl > 0 || rawTaxiDir === RIGHTWARD && pl < 0)) {\n sgnL *= -1;\n l = sgnL * Math.abs(l);\n forcedDir = true;\n }\n var d;\n if (turnIsPercent) {\n var p = taxiTurnPfVal < 0 ? 1 + taxiTurnPfVal : taxiTurnPfVal;\n d = p * l;\n } else {\n var k = taxiTurnPfVal < 0 ? l : 0;\n d = k + taxiTurnPfVal * sgnL;\n }\n var getIsTooClose = function getIsTooClose(d) {\n return Math.abs(d) < minD || Math.abs(d) >= Math.abs(l);\n };\n var isTooCloseSrc = getIsTooClose(d);\n var isTooCloseTgt = getIsTooClose(Math.abs(l) - Math.abs(d));\n var isTooClose = isTooCloseSrc || isTooCloseTgt;\n if (isTooClose && !forcedDir) {\n // non-ideal routing\n if (isVert) {\n // vertical fallbacks\n var lShapeInsideSrc = Math.abs(pl) <= srcH / 2;\n var lShapeInsideTgt = Math.abs(pdx) <= tgtW / 2;\n if (lShapeInsideSrc) {\n // horizontal Z-shape (direction not respected)\n var x = (posPts.x1 + posPts.x2) / 2;\n var y1 = posPts.y1,\n y2 = posPts.y2;\n rs.segpts = [x, y1, x, y2];\n } else if (lShapeInsideTgt) {\n // vertical Z-shape (distance not respected)\n var y = (posPts.y1 + posPts.y2) / 2;\n var x1 = posPts.x1,\n x2 = posPts.x2;\n rs.segpts = [x1, y, x2, y];\n } else {\n // L-shape fallback (turn distance not respected, but works well with tree siblings)\n rs.segpts = [posPts.x1, posPts.y2];\n }\n } else {\n // horizontal fallbacks\n var _lShapeInsideSrc = Math.abs(pl) <= srcW / 2;\n var _lShapeInsideTgt = Math.abs(pdy) <= tgtH / 2;\n if (_lShapeInsideSrc) {\n // vertical Z-shape (direction not respected)\n var _y = (posPts.y1 + posPts.y2) / 2;\n var _x = posPts.x1,\n _x2 = posPts.x2;\n rs.segpts = [_x, _y, _x2, _y];\n } else if (_lShapeInsideTgt) {\n // horizontal Z-shape (turn distance not respected)\n var _x3 = (posPts.x1 + posPts.x2) / 2;\n var _y2 = posPts.y1,\n _y3 = posPts.y2;\n rs.segpts = [_x3, _y2, _x3, _y3];\n } else {\n // L-shape (turn distance not respected, but works well for tree siblings)\n rs.segpts = [posPts.x2, posPts.y1];\n }\n }\n } else {\n // ideal routing\n if (isVert) {\n var _y4 = posPts.y1 + d + (dIncludesNodeBody ? srcH / 2 * sgnL : 0);\n var _x4 = posPts.x1,\n _x5 = posPts.x2;\n rs.segpts = [_x4, _y4, _x5, _y4];\n } else {\n // horizontal\n var _x6 = posPts.x1 + d + (dIncludesNodeBody ? srcW / 2 * sgnL : 0);\n var _y5 = posPts.y1,\n _y6 = posPts.y2;\n rs.segpts = [_x6, _y5, _x6, _y6];\n }\n }\n if (rs.isRound) {\n var radius = edge.pstyle('taxi-radius').value;\n var isArcRadius = edge.pstyle('radius-type').value[0] === 'arc-radius';\n rs.radii = new Array(rs.segpts.length / 2).fill(radius);\n rs.isArcRadius = new Array(rs.segpts.length / 2).fill(isArcRadius);\n }\n};\nBRp$c.tryToCorrectInvalidPoints = function (edge, pairInfo) {\n var rs = edge._private.rscratch;\n\n // can only correct beziers for now...\n if (rs.edgeType === 'bezier') {\n var srcPos = pairInfo.srcPos,\n tgtPos = pairInfo.tgtPos,\n srcW = pairInfo.srcW,\n srcH = pairInfo.srcH,\n tgtW = pairInfo.tgtW,\n tgtH = pairInfo.tgtH,\n srcShape = pairInfo.srcShape,\n tgtShape = pairInfo.tgtShape,\n srcCornerRadius = pairInfo.srcCornerRadius,\n tgtCornerRadius = pairInfo.tgtCornerRadius,\n srcRs = pairInfo.srcRs,\n tgtRs = pairInfo.tgtRs;\n var badStart = !number$1(rs.startX) || !number$1(rs.startY);\n var badAStart = !number$1(rs.arrowStartX) || !number$1(rs.arrowStartY);\n var badEnd = !number$1(rs.endX) || !number$1(rs.endY);\n var badAEnd = !number$1(rs.arrowEndX) || !number$1(rs.arrowEndY);\n var minCpADistFactor = 3;\n var arrowW = this.getArrowWidth(edge.pstyle('width').pfValue, edge.pstyle('arrow-scale').value) * this.arrowShapeWidth;\n var minCpADist = minCpADistFactor * arrowW;\n var startACpDist = dist({\n x: rs.ctrlpts[0],\n y: rs.ctrlpts[1]\n }, {\n x: rs.startX,\n y: rs.startY\n });\n var closeStartACp = startACpDist < minCpADist;\n var endACpDist = dist({\n x: rs.ctrlpts[0],\n y: rs.ctrlpts[1]\n }, {\n x: rs.endX,\n y: rs.endY\n });\n var closeEndACp = endACpDist < minCpADist;\n var overlapping = false;\n if (badStart || badAStart || closeStartACp) {\n overlapping = true;\n\n // project control point along line from src centre to outside the src shape\n // (otherwise intersection will yield nothing)\n var cpD = {\n // delta\n x: rs.ctrlpts[0] - srcPos.x,\n y: rs.ctrlpts[1] - srcPos.y\n };\n var cpL = Math.sqrt(cpD.x * cpD.x + cpD.y * cpD.y); // length of line\n var cpM = {\n // normalised delta\n x: cpD.x / cpL,\n y: cpD.y / cpL\n };\n var radius = Math.max(srcW, srcH);\n var cpProj = {\n // *2 radius guarantees outside shape\n x: rs.ctrlpts[0] + cpM.x * 2 * radius,\n y: rs.ctrlpts[1] + cpM.y * 2 * radius\n };\n var srcCtrlPtIntn = srcShape.intersectLine(srcPos.x, srcPos.y, srcW, srcH, cpProj.x, cpProj.y, 0, srcCornerRadius, srcRs);\n if (closeStartACp) {\n rs.ctrlpts[0] = rs.ctrlpts[0] + cpM.x * (minCpADist - startACpDist);\n rs.ctrlpts[1] = rs.ctrlpts[1] + cpM.y * (minCpADist - startACpDist);\n } else {\n rs.ctrlpts[0] = srcCtrlPtIntn[0] + cpM.x * minCpADist;\n rs.ctrlpts[1] = srcCtrlPtIntn[1] + cpM.y * minCpADist;\n }\n }\n if (badEnd || badAEnd || closeEndACp) {\n overlapping = true;\n\n // project control point along line from tgt centre to outside the tgt shape\n // (otherwise intersection will yield nothing)\n var _cpD = {\n // delta\n x: rs.ctrlpts[0] - tgtPos.x,\n y: rs.ctrlpts[1] - tgtPos.y\n };\n var _cpL = Math.sqrt(_cpD.x * _cpD.x + _cpD.y * _cpD.y); // length of line\n var _cpM = {\n // normalised delta\n x: _cpD.x / _cpL,\n y: _cpD.y / _cpL\n };\n var _radius = Math.max(srcW, srcH);\n var _cpProj = {\n // *2 radius guarantees outside shape\n x: rs.ctrlpts[0] + _cpM.x * 2 * _radius,\n y: rs.ctrlpts[1] + _cpM.y * 2 * _radius\n };\n var tgtCtrlPtIntn = tgtShape.intersectLine(tgtPos.x, tgtPos.y, tgtW, tgtH, _cpProj.x, _cpProj.y, 0, tgtCornerRadius, tgtRs);\n if (closeEndACp) {\n rs.ctrlpts[0] = rs.ctrlpts[0] + _cpM.x * (minCpADist - endACpDist);\n rs.ctrlpts[1] = rs.ctrlpts[1] + _cpM.y * (minCpADist - endACpDist);\n } else {\n rs.ctrlpts[0] = tgtCtrlPtIntn[0] + _cpM.x * minCpADist;\n rs.ctrlpts[1] = tgtCtrlPtIntn[1] + _cpM.y * minCpADist;\n }\n }\n if (overlapping) {\n // recalc endpts\n this.findEndpoints(edge);\n }\n }\n};\nBRp$c.storeAllpts = function (edge) {\n var rs = edge._private.rscratch;\n if (rs.edgeType === 'multibezier' || rs.edgeType === 'bezier' || rs.edgeType === 'self' || rs.edgeType === 'compound') {\n rs.allpts = [];\n rs.allpts.push(rs.startX, rs.startY);\n for (var b = 0; b + 1 < rs.ctrlpts.length; b += 2) {\n // ctrl pt itself\n rs.allpts.push(rs.ctrlpts[b], rs.ctrlpts[b + 1]);\n\n // the midpt between ctrlpts as intermediate destination pts\n if (b + 3 < rs.ctrlpts.length) {\n rs.allpts.push((rs.ctrlpts[b] + rs.ctrlpts[b + 2]) / 2, (rs.ctrlpts[b + 1] + rs.ctrlpts[b + 3]) / 2);\n }\n }\n rs.allpts.push(rs.endX, rs.endY);\n var m, mt;\n if (rs.ctrlpts.length / 2 % 2 === 0) {\n m = rs.allpts.length / 2 - 1;\n rs.midX = rs.allpts[m];\n rs.midY = rs.allpts[m + 1];\n } else {\n m = rs.allpts.length / 2 - 3;\n mt = 0.5;\n rs.midX = qbezierAt(rs.allpts[m], rs.allpts[m + 2], rs.allpts[m + 4], mt);\n rs.midY = qbezierAt(rs.allpts[m + 1], rs.allpts[m + 3], rs.allpts[m + 5], mt);\n }\n } else if (rs.edgeType === 'straight') {\n // need to calc these after endpts\n rs.allpts = [rs.startX, rs.startY, rs.endX, rs.endY];\n\n // default midpt for labels etc\n rs.midX = (rs.startX + rs.endX + rs.arrowStartX + rs.arrowEndX) / 4;\n rs.midY = (rs.startY + rs.endY + rs.arrowStartY + rs.arrowEndY) / 4;\n } else if (rs.edgeType === 'segments') {\n rs.allpts = [];\n rs.allpts.push(rs.startX, rs.startY);\n rs.allpts.push.apply(rs.allpts, rs.segpts);\n rs.allpts.push(rs.endX, rs.endY);\n if (rs.isRound) {\n rs.roundCorners = [];\n for (var i = 2; i + 3 < rs.allpts.length; i += 2) {\n var radius = rs.radii[i / 2 - 1];\n var isArcRadius = rs.isArcRadius[i / 2 - 1];\n rs.roundCorners.push(getRoundCorner({\n x: rs.allpts[i - 2],\n y: rs.allpts[i - 1]\n }, {\n x: rs.allpts[i],\n y: rs.allpts[i + 1],\n radius: radius\n }, {\n x: rs.allpts[i + 2],\n y: rs.allpts[i + 3]\n }, radius, isArcRadius));\n }\n }\n if (rs.segpts.length % 4 === 0) {\n var i2 = rs.segpts.length / 2;\n var i1 = i2 - 2;\n rs.midX = (rs.segpts[i1] + rs.segpts[i2]) / 2;\n rs.midY = (rs.segpts[i1 + 1] + rs.segpts[i2 + 1]) / 2;\n } else {\n var _i = rs.segpts.length / 2 - 1;\n if (!rs.isRound) {\n rs.midX = rs.segpts[_i];\n rs.midY = rs.segpts[_i + 1];\n } else {\n var point = {\n x: rs.segpts[_i],\n y: rs.segpts[_i + 1]\n };\n var corner = rs.roundCorners[_i / 2];\n if (corner.radius === 0) {\n // On collinear points\n var nextPoint = {\n x: rs.segpts[_i + 2],\n y: rs.segpts[_i + 3]\n };\n rs.midX = point.x;\n rs.midY = point.y;\n rs.midVector = [point.y - nextPoint.y, nextPoint.x - point.x];\n } else {\n // On rounded points\n var v = [point.x - corner.cx, point.y - corner.cy];\n var factor = corner.radius / Math.sqrt(Math.pow(v[0], 2) + Math.pow(v[1], 2));\n v = v.map(function (c) {\n return c * factor;\n });\n rs.midX = corner.cx + v[0];\n rs.midY = corner.cy + v[1];\n rs.midVector = v;\n }\n }\n }\n }\n};\nBRp$c.checkForInvalidEdgeWarning = function (edge) {\n var rs = edge[0]._private.rscratch;\n if (rs.nodesOverlap || number$1(rs.startX) && number$1(rs.startY) && number$1(rs.endX) && number$1(rs.endY)) {\n rs.loggedErr = false;\n } else {\n if (!rs.loggedErr) {\n rs.loggedErr = true;\n warn('Edge `' + edge.id() + '` has invalid endpoints and so it is impossible to draw. Adjust your edge style (e.g. control points) accordingly or use an alternative edge type. This is expected behaviour when the source node and the target node overlap.');\n }\n }\n};\nBRp$c.findEdgeControlPoints = function (edges) {\n var _this = this;\n if (!edges || edges.length === 0) {\n return;\n }\n var r = this;\n var cy = r.cy;\n var hasCompounds = cy.hasCompoundNodes();\n var hashTable = new Map$1();\n var getKey = function getKey(pairId, edgeIsUnbundled) {\n return [].concat(_toConsumableArray(pairId), [edgeIsUnbundled ? 1 : 0]).join('-');\n };\n var pairIds = [];\n var haystackEdges = [];\n\n // create a table of edge (src, tgt) => list of edges between them\n for (var i = 0; i < edges.length; i++) {\n var edge = edges[i];\n var _p = edge._private;\n var curveStyle = edge.pstyle('curve-style').value;\n\n // ignore edges who are not to be displayed\n // they shouldn't take up space\n if (edge.removed() || !edge.takesUpSpace()) {\n continue;\n }\n if (curveStyle === 'haystack') {\n haystackEdges.push(edge);\n continue;\n }\n var edgeIsUnbundled = curveStyle === 'unbundled-bezier' || curveStyle.endsWith('segments') || curveStyle === 'straight' || curveStyle === 'straight-triangle' || curveStyle.endsWith('taxi');\n var edgeIsBezier = curveStyle === 'unbundled-bezier' || curveStyle === 'bezier';\n var src = _p.source;\n var tgt = _p.target;\n var srcIndex = src.poolIndex();\n var tgtIndex = tgt.poolIndex();\n var pairId = [srcIndex, tgtIndex].sort();\n var key = getKey(pairId, edgeIsUnbundled);\n var tableEntry = hashTable.get(key);\n if (tableEntry == null) {\n tableEntry = {\n eles: []\n };\n pairIds.push({\n pairId: pairId,\n edgeIsUnbundled: edgeIsUnbundled\n });\n hashTable.set(key, tableEntry);\n }\n tableEntry.eles.push(edge);\n if (edgeIsUnbundled) {\n tableEntry.hasUnbundled = true;\n }\n if (edgeIsBezier) {\n tableEntry.hasBezier = true;\n }\n }\n\n // for each pair (src, tgt), create the ctrl pts\n // Nested for loop is OK; total number of iterations for both loops = edgeCount\n var _loop = function _loop() {\n var _pairIds$p = pairIds[p],\n pairId = _pairIds$p.pairId,\n edgeIsUnbundled = _pairIds$p.edgeIsUnbundled;\n var key = getKey(pairId, edgeIsUnbundled);\n var pairInfo = hashTable.get(key);\n var swappedpairInfo;\n if (!pairInfo.hasUnbundled) {\n var pllEdges = pairInfo.eles[0].parallelEdges().filter(function (e) {\n return e.isBundledBezier();\n });\n clearArray(pairInfo.eles);\n pllEdges.forEach(function (edge) {\n return pairInfo.eles.push(edge);\n });\n\n // for each pair id, the edges should be sorted by index\n pairInfo.eles.sort(function (edge1, edge2) {\n return edge1.poolIndex() - edge2.poolIndex();\n });\n }\n var firstEdge = pairInfo.eles[0];\n var src = firstEdge.source();\n var tgt = firstEdge.target();\n\n // make sure src/tgt distinction is consistent w.r.t. pairId\n if (src.poolIndex() > tgt.poolIndex()) {\n var temp = src;\n src = tgt;\n tgt = temp;\n }\n var srcPos = pairInfo.srcPos = src.position();\n var tgtPos = pairInfo.tgtPos = tgt.position();\n var srcW = pairInfo.srcW = src.outerWidth();\n var srcH = pairInfo.srcH = src.outerHeight();\n var tgtW = pairInfo.tgtW = tgt.outerWidth();\n var tgtH = pairInfo.tgtH = tgt.outerHeight();\n var srcShape = pairInfo.srcShape = r.nodeShapes[_this.getNodeShape(src)];\n var tgtShape = pairInfo.tgtShape = r.nodeShapes[_this.getNodeShape(tgt)];\n var srcCornerRadius = pairInfo.srcCornerRadius = src.pstyle('corner-radius').value === 'auto' ? 'auto' : src.pstyle('corner-radius').pfValue;\n var tgtCornerRadius = pairInfo.tgtCornerRadius = tgt.pstyle('corner-radius').value === 'auto' ? 'auto' : tgt.pstyle('corner-radius').pfValue;\n var tgtRs = pairInfo.tgtRs = tgt._private.rscratch;\n var srcRs = pairInfo.srcRs = src._private.rscratch;\n pairInfo.dirCounts = {\n 'north': 0,\n 'west': 0,\n 'south': 0,\n 'east': 0,\n 'northwest': 0,\n 'southwest': 0,\n 'northeast': 0,\n 'southeast': 0\n };\n for (var _i2 = 0; _i2 < pairInfo.eles.length; _i2++) {\n var _edge = pairInfo.eles[_i2];\n var rs = _edge[0]._private.rscratch;\n var _curveStyle = _edge.pstyle('curve-style').value;\n var _edgeIsUnbundled = _curveStyle === 'unbundled-bezier' || _curveStyle.endsWith('segments') || _curveStyle.endsWith('taxi');\n\n // whether the normalised pair order is the reverse of the edge's src-tgt order\n var edgeIsSwapped = !src.same(_edge.source());\n if (!pairInfo.calculatedIntersection && src !== tgt && (pairInfo.hasBezier || pairInfo.hasUnbundled)) {\n pairInfo.calculatedIntersection = true;\n\n // pt outside src shape to calc distance/displacement from src to tgt\n var srcOutside = srcShape.intersectLine(srcPos.x, srcPos.y, srcW, srcH, tgtPos.x, tgtPos.y, 0, srcCornerRadius, srcRs);\n var srcIntn = pairInfo.srcIntn = srcOutside;\n\n // pt outside tgt shape to calc distance/displacement from src to tgt\n var tgtOutside = tgtShape.intersectLine(tgtPos.x, tgtPos.y, tgtW, tgtH, srcPos.x, srcPos.y, 0, tgtCornerRadius, tgtRs);\n var tgtIntn = pairInfo.tgtIntn = tgtOutside;\n var intersectionPts = pairInfo.intersectionPts = {\n x1: srcOutside[0],\n x2: tgtOutside[0],\n y1: srcOutside[1],\n y2: tgtOutside[1]\n };\n var posPts = pairInfo.posPts = {\n x1: srcPos.x,\n x2: tgtPos.x,\n y1: srcPos.y,\n y2: tgtPos.y\n };\n var dy = tgtOutside[1] - srcOutside[1];\n var dx = tgtOutside[0] - srcOutside[0];\n var l = Math.sqrt(dx * dx + dy * dy);\n var vector = pairInfo.vector = {\n x: dx,\n y: dy\n };\n var vectorNorm = pairInfo.vectorNorm = {\n x: vector.x / l,\n y: vector.y / l\n };\n var vectorNormInverse = {\n x: -vectorNorm.y,\n y: vectorNorm.x\n };\n\n // if node shapes overlap, then no ctrl pts to draw\n pairInfo.nodesOverlap = !number$1(l) || tgtShape.checkPoint(srcOutside[0], srcOutside[1], 0, tgtW, tgtH, tgtPos.x, tgtPos.y, tgtCornerRadius, tgtRs) || srcShape.checkPoint(tgtOutside[0], tgtOutside[1], 0, srcW, srcH, srcPos.x, srcPos.y, srcCornerRadius, srcRs);\n pairInfo.vectorNormInverse = vectorNormInverse;\n swappedpairInfo = {\n nodesOverlap: pairInfo.nodesOverlap,\n dirCounts: pairInfo.dirCounts,\n calculatedIntersection: true,\n hasBezier: pairInfo.hasBezier,\n hasUnbundled: pairInfo.hasUnbundled,\n eles: pairInfo.eles,\n srcPos: tgtPos,\n srcRs: tgtRs,\n tgtPos: srcPos,\n tgtRs: srcRs,\n srcW: tgtW,\n srcH: tgtH,\n tgtW: srcW,\n tgtH: srcH,\n srcIntn: tgtIntn,\n tgtIntn: srcIntn,\n srcShape: tgtShape,\n tgtShape: srcShape,\n posPts: {\n x1: posPts.x2,\n y1: posPts.y2,\n x2: posPts.x1,\n y2: posPts.y1\n },\n intersectionPts: {\n x1: intersectionPts.x2,\n y1: intersectionPts.y2,\n x2: intersectionPts.x1,\n y2: intersectionPts.y1\n },\n vector: {\n x: -vector.x,\n y: -vector.y\n },\n vectorNorm: {\n x: -vectorNorm.x,\n y: -vectorNorm.y\n },\n vectorNormInverse: {\n x: -vectorNormInverse.x,\n y: -vectorNormInverse.y\n }\n };\n }\n var passedPairInfo = edgeIsSwapped ? swappedpairInfo : pairInfo;\n rs.nodesOverlap = passedPairInfo.nodesOverlap;\n rs.srcIntn = passedPairInfo.srcIntn;\n rs.tgtIntn = passedPairInfo.tgtIntn;\n rs.isRound = _curveStyle.startsWith('round');\n if (hasCompounds && (src.isParent() || src.isChild() || tgt.isParent() || tgt.isChild()) && (src.parents().anySame(tgt) || tgt.parents().anySame(src) || src.same(tgt) && src.isParent())) {\n _this.findCompoundLoopPoints(_edge, passedPairInfo, _i2, _edgeIsUnbundled);\n } else if (src === tgt) {\n _this.findLoopPoints(_edge, passedPairInfo, _i2, _edgeIsUnbundled);\n } else if (_curveStyle.endsWith('segments')) {\n _this.findSegmentsPoints(_edge, passedPairInfo);\n } else if (_curveStyle.endsWith('taxi')) {\n _this.findTaxiPoints(_edge, passedPairInfo);\n } else if (_curveStyle === 'straight' || !_edgeIsUnbundled && pairInfo.eles.length % 2 === 1 && _i2 === Math.floor(pairInfo.eles.length / 2)) {\n _this.findStraightEdgePoints(_edge);\n } else {\n _this.findBezierPoints(_edge, passedPairInfo, _i2, _edgeIsUnbundled, edgeIsSwapped);\n }\n _this.findEndpoints(_edge);\n _this.tryToCorrectInvalidPoints(_edge, passedPairInfo);\n _this.checkForInvalidEdgeWarning(_edge);\n _this.storeAllpts(_edge);\n _this.storeEdgeProjections(_edge);\n _this.calculateArrowAngles(_edge);\n _this.recalculateEdgeLabelProjections(_edge);\n _this.calculateLabelAngles(_edge);\n } // for pair edges\n };\n for (var p = 0; p < pairIds.length; p++) {\n _loop();\n } // for pair ids\n\n // haystacks avoid the expense of pairInfo stuff (intersections etc.)\n this.findHaystackPoints(haystackEdges);\n};\nfunction getPts(pts) {\n var retPts = [];\n if (pts == null) {\n return;\n }\n for (var i = 0; i < pts.length; i += 2) {\n var x = pts[i];\n var y = pts[i + 1];\n retPts.push({\n x: x,\n y: y\n });\n }\n return retPts;\n}\nBRp$c.getSegmentPoints = function (edge) {\n var rs = edge[0]._private.rscratch;\n this.recalculateRenderedStyle(edge);\n var type = rs.edgeType;\n if (type === 'segments') {\n return getPts(rs.segpts);\n }\n};\nBRp$c.getControlPoints = function (edge) {\n var rs = edge[0]._private.rscratch;\n this.recalculateRenderedStyle(edge);\n var type = rs.edgeType;\n if (type === 'bezier' || type === 'multibezier' || type === 'self' || type === 'compound') {\n return getPts(rs.ctrlpts);\n }\n};\nBRp$c.getEdgeMidpoint = function (edge) {\n var rs = edge[0]._private.rscratch;\n this.recalculateRenderedStyle(edge);\n return {\n x: rs.midX,\n y: rs.midY\n };\n};\n\nvar BRp$b = {};\nBRp$b.manualEndptToPx = function (node, prop) {\n var r = this;\n var npos = node.position();\n var w = node.outerWidth();\n var h = node.outerHeight();\n var rs = node._private.rscratch;\n if (prop.value.length === 2) {\n var p = [prop.pfValue[0], prop.pfValue[1]];\n if (prop.units[0] === '%') {\n p[0] = p[0] * w;\n }\n if (prop.units[1] === '%') {\n p[1] = p[1] * h;\n }\n p[0] += npos.x;\n p[1] += npos.y;\n return p;\n } else {\n var angle = prop.pfValue[0];\n angle = -Math.PI / 2 + angle; // start at 12 o'clock\n\n var l = 2 * Math.max(w, h);\n var _p = [npos.x + Math.cos(angle) * l, npos.y + Math.sin(angle) * l];\n return r.nodeShapes[this.getNodeShape(node)].intersectLine(npos.x, npos.y, w, h, _p[0], _p[1], 0, node.pstyle('corner-radius').value === 'auto' ? 'auto' : node.pstyle('corner-radius').pfValue, rs);\n }\n};\nBRp$b.findEndpoints = function (edge) {\n var r = this;\n var intersect;\n var source = edge.source()[0];\n var target = edge.target()[0];\n var srcPos = source.position();\n var tgtPos = target.position();\n var tgtArShape = edge.pstyle('target-arrow-shape').value;\n var srcArShape = edge.pstyle('source-arrow-shape').value;\n var tgtDist = edge.pstyle('target-distance-from-node').pfValue;\n var srcDist = edge.pstyle('source-distance-from-node').pfValue;\n var srcRs = source._private.rscratch;\n var tgtRs = target._private.rscratch;\n var curveStyle = edge.pstyle('curve-style').value;\n var rs = edge._private.rscratch;\n var et = rs.edgeType;\n var taxi = curveStyle === 'taxi';\n var self = et === 'self' || et === 'compound';\n var bezier = et === 'bezier' || et === 'multibezier' || self;\n var multi = et !== 'bezier';\n var lines = et === 'straight' || et === 'segments';\n var segments = et === 'segments';\n var hasEndpts = bezier || multi || lines;\n var overrideEndpts = self || taxi;\n var srcManEndpt = edge.pstyle('source-endpoint');\n var srcManEndptVal = overrideEndpts ? 'outside-to-node' : srcManEndpt.value;\n var srcCornerRadius = source.pstyle('corner-radius').value === 'auto' ? 'auto' : source.pstyle('corner-radius').pfValue;\n var tgtManEndpt = edge.pstyle('target-endpoint');\n var tgtManEndptVal = overrideEndpts ? 'outside-to-node' : tgtManEndpt.value;\n var tgtCornerRadius = target.pstyle('corner-radius').value === 'auto' ? 'auto' : target.pstyle('corner-radius').pfValue;\n rs.srcManEndpt = srcManEndpt;\n rs.tgtManEndpt = tgtManEndpt;\n var p1; // last known point of edge on target side\n var p2; // last known point of edge on source side\n\n var p1_i; // point to intersect with target shape\n var p2_i; // point to intersect with source shape\n\n if (bezier) {\n var cpStart = [rs.ctrlpts[0], rs.ctrlpts[1]];\n var cpEnd = multi ? [rs.ctrlpts[rs.ctrlpts.length - 2], rs.ctrlpts[rs.ctrlpts.length - 1]] : cpStart;\n p1 = cpEnd;\n p2 = cpStart;\n } else if (lines) {\n var srcArrowFromPt = !segments ? [tgtPos.x, tgtPos.y] : rs.segpts.slice(0, 2);\n var tgtArrowFromPt = !segments ? [srcPos.x, srcPos.y] : rs.segpts.slice(rs.segpts.length - 2);\n p1 = tgtArrowFromPt;\n p2 = srcArrowFromPt;\n }\n if (tgtManEndptVal === 'inside-to-node') {\n intersect = [tgtPos.x, tgtPos.y];\n } else if (tgtManEndpt.units) {\n intersect = this.manualEndptToPx(target, tgtManEndpt);\n } else if (tgtManEndptVal === 'outside-to-line') {\n intersect = rs.tgtIntn; // use cached value from ctrlpt calc\n } else {\n if (tgtManEndptVal === 'outside-to-node' || tgtManEndptVal === 'outside-to-node-or-label') {\n p1_i = p1;\n } else if (tgtManEndptVal === 'outside-to-line' || tgtManEndptVal === 'outside-to-line-or-label') {\n p1_i = [srcPos.x, srcPos.y];\n }\n intersect = r.nodeShapes[this.getNodeShape(target)].intersectLine(tgtPos.x, tgtPos.y, target.outerWidth(), target.outerHeight(), p1_i[0], p1_i[1], 0, tgtCornerRadius, tgtRs);\n if (tgtManEndptVal === 'outside-to-node-or-label' || tgtManEndptVal === 'outside-to-line-or-label') {\n var trs = target._private.rscratch;\n var lw = trs.labelWidth;\n var lh = trs.labelHeight;\n var lx = trs.labelX;\n var ly = trs.labelY;\n var lw2 = lw / 2;\n var lh2 = lh / 2;\n var va = target.pstyle('text-valign').value;\n if (va === 'top') {\n ly -= lh2;\n } else if (va === 'bottom') {\n ly += lh2;\n }\n var ha = target.pstyle('text-halign').value;\n if (ha === 'left') {\n lx -= lw2;\n } else if (ha === 'right') {\n lx += lw2;\n }\n var labelIntersect = polygonIntersectLine(p1_i[0], p1_i[1], [lx - lw2, ly - lh2, lx + lw2, ly - lh2, lx + lw2, ly + lh2, lx - lw2, ly + lh2], tgtPos.x, tgtPos.y);\n if (labelIntersect.length > 0) {\n var refPt = srcPos;\n var intSqdist = sqdist(refPt, array2point(intersect));\n var labIntSqdist = sqdist(refPt, array2point(labelIntersect));\n var minSqDist = intSqdist;\n if (labIntSqdist < intSqdist) {\n intersect = labelIntersect;\n minSqDist = labIntSqdist;\n }\n if (labelIntersect.length > 2) {\n var labInt2SqDist = sqdist(refPt, {\n x: labelIntersect[2],\n y: labelIntersect[3]\n });\n if (labInt2SqDist < minSqDist) {\n intersect = [labelIntersect[2], labelIntersect[3]];\n }\n }\n }\n }\n }\n var arrowEnd = shortenIntersection(intersect, p1, r.arrowShapes[tgtArShape].spacing(edge) + tgtDist);\n var edgeEnd = shortenIntersection(intersect, p1, r.arrowShapes[tgtArShape].gap(edge) + tgtDist);\n rs.endX = edgeEnd[0];\n rs.endY = edgeEnd[1];\n rs.arrowEndX = arrowEnd[0];\n rs.arrowEndY = arrowEnd[1];\n if (srcManEndptVal === 'inside-to-node') {\n intersect = [srcPos.x, srcPos.y];\n } else if (srcManEndpt.units) {\n intersect = this.manualEndptToPx(source, srcManEndpt);\n } else if (srcManEndptVal === 'outside-to-line') {\n intersect = rs.srcIntn; // use cached value from ctrlpt calc\n } else {\n if (srcManEndptVal === 'outside-to-node' || srcManEndptVal === 'outside-to-node-or-label') {\n p2_i = p2;\n } else if (srcManEndptVal === 'outside-to-line' || srcManEndptVal === 'outside-to-line-or-label') {\n p2_i = [tgtPos.x, tgtPos.y];\n }\n intersect = r.nodeShapes[this.getNodeShape(source)].intersectLine(srcPos.x, srcPos.y, source.outerWidth(), source.outerHeight(), p2_i[0], p2_i[1], 0, srcCornerRadius, srcRs);\n if (srcManEndptVal === 'outside-to-node-or-label' || srcManEndptVal === 'outside-to-line-or-label') {\n var srs = source._private.rscratch;\n var _lw = srs.labelWidth;\n var _lh = srs.labelHeight;\n var _lx = srs.labelX;\n var _ly = srs.labelY;\n var _lw2 = _lw / 2;\n var _lh2 = _lh / 2;\n var _va = source.pstyle('text-valign').value;\n if (_va === 'top') {\n _ly -= _lh2;\n } else if (_va === 'bottom') {\n _ly += _lh2;\n }\n var _ha = source.pstyle('text-halign').value;\n if (_ha === 'left') {\n _lx -= _lw2;\n } else if (_ha === 'right') {\n _lx += _lw2;\n }\n var _labelIntersect = polygonIntersectLine(p2_i[0], p2_i[1], [_lx - _lw2, _ly - _lh2, _lx + _lw2, _ly - _lh2, _lx + _lw2, _ly + _lh2, _lx - _lw2, _ly + _lh2], srcPos.x, srcPos.y);\n if (_labelIntersect.length > 0) {\n var _refPt = tgtPos;\n var _intSqdist = sqdist(_refPt, array2point(intersect));\n var _labIntSqdist = sqdist(_refPt, array2point(_labelIntersect));\n var _minSqDist = _intSqdist;\n if (_labIntSqdist < _intSqdist) {\n intersect = [_labelIntersect[0], _labelIntersect[1]];\n _minSqDist = _labIntSqdist;\n }\n if (_labelIntersect.length > 2) {\n var _labInt2SqDist = sqdist(_refPt, {\n x: _labelIntersect[2],\n y: _labelIntersect[3]\n });\n if (_labInt2SqDist < _minSqDist) {\n intersect = [_labelIntersect[2], _labelIntersect[3]];\n }\n }\n }\n }\n }\n var arrowStart = shortenIntersection(intersect, p2, r.arrowShapes[srcArShape].spacing(edge) + srcDist);\n var edgeStart = shortenIntersection(intersect, p2, r.arrowShapes[srcArShape].gap(edge) + srcDist);\n rs.startX = edgeStart[0];\n rs.startY = edgeStart[1];\n rs.arrowStartX = arrowStart[0];\n rs.arrowStartY = arrowStart[1];\n if (hasEndpts) {\n if (!number$1(rs.startX) || !number$1(rs.startY) || !number$1(rs.endX) || !number$1(rs.endY)) {\n rs.badLine = true;\n } else {\n rs.badLine = false;\n }\n }\n};\nBRp$b.getSourceEndpoint = function (edge) {\n var rs = edge[0]._private.rscratch;\n this.recalculateRenderedStyle(edge);\n switch (rs.edgeType) {\n case 'haystack':\n return {\n x: rs.haystackPts[0],\n y: rs.haystackPts[1]\n };\n default:\n return {\n x: rs.arrowStartX,\n y: rs.arrowStartY\n };\n }\n};\nBRp$b.getTargetEndpoint = function (edge) {\n var rs = edge[0]._private.rscratch;\n this.recalculateRenderedStyle(edge);\n switch (rs.edgeType) {\n case 'haystack':\n return {\n x: rs.haystackPts[2],\n y: rs.haystackPts[3]\n };\n default:\n return {\n x: rs.arrowEndX,\n y: rs.arrowEndY\n };\n }\n};\n\nvar BRp$a = {};\nfunction pushBezierPts(r, edge, pts) {\n var qbezierAt$1 = function qbezierAt$1(p1, p2, p3, t) {\n return qbezierAt(p1, p2, p3, t);\n };\n var _p = edge._private;\n var bpts = _p.rstyle.bezierPts;\n for (var i = 0; i < r.bezierProjPcts.length; i++) {\n var p = r.bezierProjPcts[i];\n bpts.push({\n x: qbezierAt$1(pts[0], pts[2], pts[4], p),\n y: qbezierAt$1(pts[1], pts[3], pts[5], p)\n });\n }\n}\nBRp$a.storeEdgeProjections = function (edge) {\n var _p = edge._private;\n var rs = _p.rscratch;\n var et = rs.edgeType;\n\n // clear the cached points state\n _p.rstyle.bezierPts = null;\n _p.rstyle.linePts = null;\n _p.rstyle.haystackPts = null;\n if (et === 'multibezier' || et === 'bezier' || et === 'self' || et === 'compound') {\n _p.rstyle.bezierPts = [];\n for (var i = 0; i + 5 < rs.allpts.length; i += 4) {\n pushBezierPts(this, edge, rs.allpts.slice(i, i + 6));\n }\n } else if (et === 'segments') {\n var lpts = _p.rstyle.linePts = [];\n for (var i = 0; i + 1 < rs.allpts.length; i += 2) {\n lpts.push({\n x: rs.allpts[i],\n y: rs.allpts[i + 1]\n });\n }\n } else if (et === 'haystack') {\n var hpts = rs.haystackPts;\n _p.rstyle.haystackPts = [{\n x: hpts[0],\n y: hpts[1]\n }, {\n x: hpts[2],\n y: hpts[3]\n }];\n }\n _p.rstyle.arrowWidth = this.getArrowWidth(edge.pstyle('width').pfValue, edge.pstyle('arrow-scale').value) * this.arrowShapeWidth;\n};\nBRp$a.recalculateEdgeProjections = function (edges) {\n this.findEdgeControlPoints(edges);\n};\n\nvar BRp$9 = {};\nBRp$9.recalculateNodeLabelProjection = function (node) {\n var content = node.pstyle('label').strValue;\n if (emptyString(content)) {\n return;\n }\n var textX, textY;\n var _p = node._private;\n var nodeWidth = node.width();\n var nodeHeight = node.height();\n var padding = node.padding();\n var nodePos = node.position();\n var textHalign = node.pstyle('text-halign').strValue;\n var textValign = node.pstyle('text-valign').strValue;\n var rs = _p.rscratch;\n var rstyle = _p.rstyle;\n switch (textHalign) {\n case 'left':\n textX = nodePos.x - nodeWidth / 2 - padding;\n break;\n case 'right':\n textX = nodePos.x + nodeWidth / 2 + padding;\n break;\n default:\n // e.g. center\n textX = nodePos.x;\n }\n switch (textValign) {\n case 'top':\n textY = nodePos.y - nodeHeight / 2 - padding;\n break;\n case 'bottom':\n textY = nodePos.y + nodeHeight / 2 + padding;\n break;\n default:\n // e.g. middle\n textY = nodePos.y;\n }\n rs.labelX = textX;\n rs.labelY = textY;\n rstyle.labelX = textX;\n rstyle.labelY = textY;\n this.calculateLabelAngles(node);\n this.applyLabelDimensions(node);\n};\nvar lineAngleFromDelta = function lineAngleFromDelta(dx, dy) {\n var angle = Math.atan(dy / dx);\n if (dx === 0 && angle < 0) {\n angle = angle * -1;\n }\n return angle;\n};\nvar lineAngle = function lineAngle(p0, p1) {\n var dx = p1.x - p0.x;\n var dy = p1.y - p0.y;\n return lineAngleFromDelta(dx, dy);\n};\nvar bezierAngle = function bezierAngle(p0, p1, p2, t) {\n var t0 = bound(0, t - 0.001, 1);\n var t1 = bound(0, t + 0.001, 1);\n var lp0 = qbezierPtAt(p0, p1, p2, t0);\n var lp1 = qbezierPtAt(p0, p1, p2, t1);\n return lineAngle(lp0, lp1);\n};\nBRp$9.recalculateEdgeLabelProjections = function (edge) {\n var p;\n var _p = edge._private;\n var rs = _p.rscratch;\n var r = this;\n var content = {\n mid: edge.pstyle('label').strValue,\n source: edge.pstyle('source-label').strValue,\n target: edge.pstyle('target-label').strValue\n };\n if (content.mid || content.source || content.target) ; else {\n return; // no labels => no calcs\n }\n\n // add center point to style so bounding box calculations can use it\n //\n p = {\n x: rs.midX,\n y: rs.midY\n };\n var setRs = function setRs(propName, prefix, value) {\n setPrefixedProperty(_p.rscratch, propName, prefix, value);\n setPrefixedProperty(_p.rstyle, propName, prefix, value);\n };\n setRs('labelX', null, p.x);\n setRs('labelY', null, p.y);\n var midAngle = lineAngleFromDelta(rs.midDispX, rs.midDispY);\n setRs('labelAutoAngle', null, midAngle);\n var _createControlPointInfo = function createControlPointInfo() {\n if (_createControlPointInfo.cache) {\n return _createControlPointInfo.cache;\n } // use cache so only 1x per edge\n\n var ctrlpts = [];\n\n // store each ctrlpt info init\n for (var i = 0; i + 5 < rs.allpts.length; i += 4) {\n var p0 = {\n x: rs.allpts[i],\n y: rs.allpts[i + 1]\n };\n var p1 = {\n x: rs.allpts[i + 2],\n y: rs.allpts[i + 3]\n }; // ctrlpt\n var p2 = {\n x: rs.allpts[i + 4],\n y: rs.allpts[i + 5]\n };\n ctrlpts.push({\n p0: p0,\n p1: p1,\n p2: p2,\n startDist: 0,\n length: 0,\n segments: []\n });\n }\n var bpts = _p.rstyle.bezierPts;\n var nProjs = r.bezierProjPcts.length;\n function addSegment(cp, p0, p1, t0, t1) {\n var length = dist(p0, p1);\n var prevSegment = cp.segments[cp.segments.length - 1];\n var segment = {\n p0: p0,\n p1: p1,\n t0: t0,\n t1: t1,\n startDist: prevSegment ? prevSegment.startDist + prevSegment.length : 0,\n length: length\n };\n cp.segments.push(segment);\n cp.length += length;\n }\n\n // update each ctrlpt with segment info\n for (var _i = 0; _i < ctrlpts.length; _i++) {\n var cp = ctrlpts[_i];\n var prevCp = ctrlpts[_i - 1];\n if (prevCp) {\n cp.startDist = prevCp.startDist + prevCp.length;\n }\n addSegment(cp, cp.p0, bpts[_i * nProjs], 0, r.bezierProjPcts[0]); // first\n\n for (var j = 0; j < nProjs - 1; j++) {\n addSegment(cp, bpts[_i * nProjs + j], bpts[_i * nProjs + j + 1], r.bezierProjPcts[j], r.bezierProjPcts[j + 1]);\n }\n addSegment(cp, bpts[_i * nProjs + nProjs - 1], cp.p2, r.bezierProjPcts[nProjs - 1], 1); // last\n }\n return _createControlPointInfo.cache = ctrlpts;\n };\n var calculateEndProjection = function calculateEndProjection(prefix) {\n var angle;\n var isSrc = prefix === 'source';\n if (!content[prefix]) {\n return;\n }\n var offset = edge.pstyle(prefix + '-text-offset').pfValue;\n switch (rs.edgeType) {\n case 'self':\n case 'compound':\n case 'bezier':\n case 'multibezier':\n {\n var cps = _createControlPointInfo();\n var selected;\n var startDist = 0;\n var totalDist = 0;\n\n // find the segment we're on\n for (var i = 0; i < cps.length; i++) {\n var _cp = cps[isSrc ? i : cps.length - 1 - i];\n for (var j = 0; j < _cp.segments.length; j++) {\n var _seg = _cp.segments[isSrc ? j : _cp.segments.length - 1 - j];\n var lastSeg = i === cps.length - 1 && j === _cp.segments.length - 1;\n startDist = totalDist;\n totalDist += _seg.length;\n if (totalDist >= offset || lastSeg) {\n selected = {\n cp: _cp,\n segment: _seg\n };\n break;\n }\n }\n if (selected) {\n break;\n }\n }\n var cp = selected.cp;\n var seg = selected.segment;\n var tSegment = (offset - startDist) / seg.length;\n var segDt = seg.t1 - seg.t0;\n var t = isSrc ? seg.t0 + segDt * tSegment : seg.t1 - segDt * tSegment;\n t = bound(0, t, 1);\n p = qbezierPtAt(cp.p0, cp.p1, cp.p2, t);\n angle = bezierAngle(cp.p0, cp.p1, cp.p2, t);\n break;\n }\n case 'straight':\n case 'segments':\n case 'haystack':\n {\n var d = 0,\n di,\n d0;\n var p0, p1;\n var l = rs.allpts.length;\n for (var _i2 = 0; _i2 + 3 < l; _i2 += 2) {\n if (isSrc) {\n p0 = {\n x: rs.allpts[_i2],\n y: rs.allpts[_i2 + 1]\n };\n p1 = {\n x: rs.allpts[_i2 + 2],\n y: rs.allpts[_i2 + 3]\n };\n } else {\n p0 = {\n x: rs.allpts[l - 2 - _i2],\n y: rs.allpts[l - 1 - _i2]\n };\n p1 = {\n x: rs.allpts[l - 4 - _i2],\n y: rs.allpts[l - 3 - _i2]\n };\n }\n di = dist(p0, p1);\n d0 = d;\n d += di;\n if (d >= offset) {\n break;\n }\n }\n var pD = offset - d0;\n var _t = pD / di;\n _t = bound(0, _t, 1);\n p = lineAt(p0, p1, _t);\n angle = lineAngle(p0, p1);\n break;\n }\n }\n setRs('labelX', prefix, p.x);\n setRs('labelY', prefix, p.y);\n setRs('labelAutoAngle', prefix, angle);\n };\n calculateEndProjection('source');\n calculateEndProjection('target');\n this.applyLabelDimensions(edge);\n};\nBRp$9.applyLabelDimensions = function (ele) {\n this.applyPrefixedLabelDimensions(ele);\n if (ele.isEdge()) {\n this.applyPrefixedLabelDimensions(ele, 'source');\n this.applyPrefixedLabelDimensions(ele, 'target');\n }\n};\nBRp$9.applyPrefixedLabelDimensions = function (ele, prefix) {\n var _p = ele._private;\n var text = this.getLabelText(ele, prefix);\n var labelDims = this.calculateLabelDimensions(ele, text);\n var lineHeight = ele.pstyle('line-height').pfValue;\n var textWrap = ele.pstyle('text-wrap').strValue;\n var lines = getPrefixedProperty(_p.rscratch, 'labelWrapCachedLines', prefix) || [];\n var numLines = textWrap !== 'wrap' ? 1 : Math.max(lines.length, 1);\n var normPerLineHeight = labelDims.height / numLines;\n var labelLineHeight = normPerLineHeight * lineHeight;\n var width = labelDims.width;\n var height = labelDims.height + (numLines - 1) * (lineHeight - 1) * normPerLineHeight;\n setPrefixedProperty(_p.rstyle, 'labelWidth', prefix, width);\n setPrefixedProperty(_p.rscratch, 'labelWidth', prefix, width);\n setPrefixedProperty(_p.rstyle, 'labelHeight', prefix, height);\n setPrefixedProperty(_p.rscratch, 'labelHeight', prefix, height);\n setPrefixedProperty(_p.rscratch, 'labelLineHeight', prefix, labelLineHeight);\n};\nBRp$9.getLabelText = function (ele, prefix) {\n var _p = ele._private;\n var pfd = prefix ? prefix + '-' : '';\n var text = ele.pstyle(pfd + 'label').strValue;\n var textTransform = ele.pstyle('text-transform').value;\n var rscratch = function rscratch(propName, value) {\n if (value) {\n setPrefixedProperty(_p.rscratch, propName, prefix, value);\n return value;\n } else {\n return getPrefixedProperty(_p.rscratch, propName, prefix);\n }\n };\n\n // for empty text, skip all processing\n if (!text) {\n return '';\n }\n if (textTransform == 'none') ; else if (textTransform == 'uppercase') {\n text = text.toUpperCase();\n } else if (textTransform == 'lowercase') {\n text = text.toLowerCase();\n }\n var wrapStyle = ele.pstyle('text-wrap').value;\n if (wrapStyle === 'wrap') {\n var labelKey = rscratch('labelKey');\n\n // save recalc if the label is the same as before\n if (labelKey != null && rscratch('labelWrapKey') === labelKey) {\n return rscratch('labelWrapCachedText');\n }\n var zwsp = \"\\u200B\";\n var lines = text.split('\\n');\n var maxW = ele.pstyle('text-max-width').pfValue;\n var overflow = ele.pstyle('text-overflow-wrap').value;\n var overflowAny = overflow === 'anywhere';\n var wrappedLines = [];\n var separatorRegex = /[\\s\\u200b]+|$/g; // Include end of string to add last word\n\n for (var l = 0; l < lines.length; l++) {\n var line = lines[l];\n var lineDims = this.calculateLabelDimensions(ele, line);\n var lineW = lineDims.width;\n if (overflowAny) {\n var processedLine = line.split('').join(zwsp);\n line = processedLine;\n }\n if (lineW > maxW) {\n // line is too long\n var separatorMatches = line.matchAll(separatorRegex);\n var subline = '';\n var previousIndex = 0;\n // Add fake match\n var _iterator = _createForOfIteratorHelper(separatorMatches),\n _step;\n try {\n for (_iterator.s(); !(_step = _iterator.n()).done;) {\n var separatorMatch = _step.value;\n var wordSeparator = separatorMatch[0];\n var word = line.substring(previousIndex, separatorMatch.index);\n previousIndex = separatorMatch.index + wordSeparator.length;\n var testLine = subline.length === 0 ? word : subline + word + wordSeparator;\n var testDims = this.calculateLabelDimensions(ele, testLine);\n var testW = testDims.width;\n if (testW <= maxW) {\n // word fits on current line\n subline += word + wordSeparator;\n } else {\n // word starts new line\n if (subline) {\n wrappedLines.push(subline);\n }\n subline = word + wordSeparator;\n }\n }\n\n // if there's remaining text, put it in a wrapped line\n } catch (err) {\n _iterator.e(err);\n } finally {\n _iterator.f();\n }\n if (!subline.match(/^[\\s\\u200b]+$/)) {\n wrappedLines.push(subline);\n }\n } else {\n // line is already short enough\n wrappedLines.push(line);\n }\n } // for\n\n rscratch('labelWrapCachedLines', wrappedLines);\n text = rscratch('labelWrapCachedText', wrappedLines.join('\\n'));\n rscratch('labelWrapKey', labelKey);\n } else if (wrapStyle === 'ellipsis') {\n var _maxW = ele.pstyle('text-max-width').pfValue;\n var ellipsized = '';\n var ellipsis = \"\\u2026\";\n var incLastCh = false;\n if (this.calculateLabelDimensions(ele, text).width < _maxW) {\n // the label already fits\n return text;\n }\n for (var i = 0; i < text.length; i++) {\n var widthWithNextCh = this.calculateLabelDimensions(ele, ellipsized + text[i] + ellipsis).width;\n if (widthWithNextCh > _maxW) {\n break;\n }\n ellipsized += text[i];\n if (i === text.length - 1) {\n incLastCh = true;\n }\n }\n if (!incLastCh) {\n ellipsized += ellipsis;\n }\n return ellipsized;\n } // if ellipsize\n\n return text;\n};\nBRp$9.getLabelJustification = function (ele) {\n var justification = ele.pstyle('text-justification').strValue;\n var textHalign = ele.pstyle('text-halign').strValue;\n if (justification === 'auto') {\n if (ele.isNode()) {\n switch (textHalign) {\n case 'left':\n return 'right';\n case 'right':\n return 'left';\n default:\n return 'center';\n }\n } else {\n return 'center';\n }\n } else {\n return justification;\n }\n};\nBRp$9.calculateLabelDimensions = function (ele, text) {\n var r = this;\n var containerWindow = r.cy.window();\n var document = containerWindow.document;\n var cacheKey = hashString(text, ele._private.labelDimsKey);\n var cache = r.labelDimCache || (r.labelDimCache = []);\n var existingVal = cache[cacheKey];\n if (existingVal != null) {\n return existingVal;\n }\n var padding = 0; // add padding around text dims, as the measurement isn't that accurate\n var fStyle = ele.pstyle('font-style').strValue;\n var size = ele.pstyle('font-size').pfValue;\n var family = ele.pstyle('font-family').strValue;\n var weight = ele.pstyle('font-weight').strValue;\n var canvas = this.labelCalcCanvas;\n var c2d = this.labelCalcCanvasContext;\n if (!canvas) {\n canvas = this.labelCalcCanvas = document.createElement('canvas');\n c2d = this.labelCalcCanvasContext = canvas.getContext('2d');\n var ds = canvas.style;\n ds.position = 'absolute';\n ds.left = '-9999px';\n ds.top = '-9999px';\n ds.zIndex = '-1';\n ds.visibility = 'hidden';\n ds.pointerEvents = 'none';\n }\n c2d.font = \"\".concat(fStyle, \" \").concat(weight, \" \").concat(size, \"px \").concat(family);\n var width = 0;\n var height = 0;\n var lines = text.split('\\n');\n for (var i = 0; i < lines.length; i++) {\n var line = lines[i];\n var metrics = c2d.measureText(line);\n var w = Math.ceil(metrics.width);\n var h = size;\n width = Math.max(w, width);\n height += h;\n }\n width += padding;\n height += padding;\n return cache[cacheKey] = {\n width: width,\n height: height\n };\n};\nBRp$9.calculateLabelAngle = function (ele, prefix) {\n var _p = ele._private;\n var rs = _p.rscratch;\n var isEdge = ele.isEdge();\n var prefixDash = prefix ? prefix + '-' : '';\n var rot = ele.pstyle(prefixDash + 'text-rotation');\n var rotStr = rot.strValue;\n if (rotStr === 'none') {\n return 0;\n } else if (isEdge && rotStr === 'autorotate') {\n return rs.labelAutoAngle;\n } else if (rotStr === 'autorotate') {\n return 0;\n } else {\n return rot.pfValue;\n }\n};\nBRp$9.calculateLabelAngles = function (ele) {\n var r = this;\n var isEdge = ele.isEdge();\n var _p = ele._private;\n var rs = _p.rscratch;\n rs.labelAngle = r.calculateLabelAngle(ele);\n if (isEdge) {\n rs.sourceLabelAngle = r.calculateLabelAngle(ele, 'source');\n rs.targetLabelAngle = r.calculateLabelAngle(ele, 'target');\n }\n};\n\nvar BRp$8 = {};\nvar TOO_SMALL_CUT_RECT = 28;\nvar warnedCutRect = false;\nBRp$8.getNodeShape = function (node) {\n var r = this;\n var shape = node.pstyle('shape').value;\n if (shape === 'cutrectangle' && (node.width() < TOO_SMALL_CUT_RECT || node.height() < TOO_SMALL_CUT_RECT)) {\n if (!warnedCutRect) {\n warn('The `cutrectangle` node shape can not be used at small sizes so `rectangle` is used instead');\n warnedCutRect = true;\n }\n return 'rectangle';\n }\n if (node.isParent()) {\n if (shape === 'rectangle' || shape === 'roundrectangle' || shape === 'round-rectangle' || shape === 'cutrectangle' || shape === 'cut-rectangle' || shape === 'barrel') {\n return shape;\n } else {\n return 'rectangle';\n }\n }\n if (shape === 'polygon') {\n var points = node.pstyle('shape-polygon-points').value;\n return r.nodeShapes.makePolygon(points).name;\n }\n return shape;\n};\n\nvar BRp$7 = {};\nBRp$7.registerCalculationListeners = function () {\n var cy = this.cy;\n var elesToUpdate = cy.collection();\n var r = this;\n var enqueue = function enqueue(eles) {\n var dirtyStyleCaches = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true;\n elesToUpdate.merge(eles);\n if (dirtyStyleCaches) {\n for (var i = 0; i < eles.length; i++) {\n var ele = eles[i];\n var _p = ele._private;\n var rstyle = _p.rstyle;\n rstyle.clean = false;\n rstyle.cleanConnected = false;\n }\n }\n };\n r.binder(cy).on('bounds.* dirty.*', function onDirtyBounds(e) {\n var ele = e.target;\n enqueue(ele);\n }).on('style.* background.*', function onDirtyStyle(e) {\n var ele = e.target;\n enqueue(ele, false);\n });\n var updateEleCalcs = function updateEleCalcs(willDraw) {\n if (willDraw) {\n var fns = r.onUpdateEleCalcsFns;\n\n // because we need to have up-to-date style (e.g. stylesheet mappers)\n // before calculating rendered style (and pstyle might not be called yet)\n elesToUpdate.cleanStyle();\n for (var i = 0; i < elesToUpdate.length; i++) {\n var ele = elesToUpdate[i];\n var rstyle = ele._private.rstyle;\n if (ele.isNode() && !rstyle.cleanConnected) {\n enqueue(ele.connectedEdges());\n rstyle.cleanConnected = true;\n }\n }\n if (fns) {\n for (var _i = 0; _i < fns.length; _i++) {\n var fn = fns[_i];\n fn(willDraw, elesToUpdate);\n }\n }\n r.recalculateRenderedStyle(elesToUpdate);\n elesToUpdate = cy.collection();\n }\n };\n r.flushRenderedStyleQueue = function () {\n updateEleCalcs(true);\n };\n r.beforeRender(updateEleCalcs, r.beforeRenderPriorities.eleCalcs);\n};\nBRp$7.onUpdateEleCalcs = function (fn) {\n var fns = this.onUpdateEleCalcsFns = this.onUpdateEleCalcsFns || [];\n fns.push(fn);\n};\nBRp$7.recalculateRenderedStyle = function (eles, useCache) {\n var isCleanConnected = function isCleanConnected(ele) {\n return ele._private.rstyle.cleanConnected;\n };\n if (eles.length === 0) {\n return;\n }\n var edges = [];\n var nodes = [];\n\n // the renderer can't be used for calcs when destroyed, e.g. ele.boundingBox()\n if (this.destroyed) {\n return;\n }\n\n // use cache by default for perf\n if (useCache === undefined) {\n useCache = true;\n }\n for (var i = 0; i < eles.length; i++) {\n var ele = eles[i];\n var _p = ele._private;\n var rstyle = _p.rstyle;\n\n // an edge may be implicitly dirty b/c of one of its connected nodes\n // (and a request for recalc may come in between frames)\n if (ele.isEdge() && (!isCleanConnected(ele.source()) || !isCleanConnected(ele.target()))) {\n rstyle.clean = false;\n }\n if (ele.isEdge() && ele.isBundledBezier()) {\n if (ele.parallelEdges().some(function (ele) {\n return !ele._private.rstyle.clean && ele.isBundledBezier();\n })) {\n rstyle.clean = false;\n }\n }\n\n // only update if dirty and in graph\n if (useCache && rstyle.clean || ele.removed()) {\n continue;\n }\n\n // only update if not display: none\n if (ele.pstyle('display').value === 'none') {\n continue;\n }\n if (_p.group === 'nodes') {\n nodes.push(ele);\n } else {\n // edges\n edges.push(ele);\n }\n rstyle.clean = true;\n }\n\n // update node data from projections\n for (var _i2 = 0; _i2 < nodes.length; _i2++) {\n var _ele = nodes[_i2];\n var _p2 = _ele._private;\n var _rstyle = _p2.rstyle;\n var pos = _ele.position();\n this.recalculateNodeLabelProjection(_ele);\n _rstyle.nodeX = pos.x;\n _rstyle.nodeY = pos.y;\n _rstyle.nodeW = _ele.pstyle('width').pfValue;\n _rstyle.nodeH = _ele.pstyle('height').pfValue;\n }\n this.recalculateEdgeProjections(edges);\n\n // update edge data from projections\n for (var _i3 = 0; _i3 < edges.length; _i3++) {\n var _ele2 = edges[_i3];\n var _p3 = _ele2._private;\n var _rstyle2 = _p3.rstyle;\n var rs = _p3.rscratch;\n\n // update rstyle positions\n _rstyle2.srcX = rs.arrowStartX;\n _rstyle2.srcY = rs.arrowStartY;\n _rstyle2.tgtX = rs.arrowEndX;\n _rstyle2.tgtY = rs.arrowEndY;\n _rstyle2.midX = rs.midX;\n _rstyle2.midY = rs.midY;\n _rstyle2.labelAngle = rs.labelAngle;\n _rstyle2.sourceLabelAngle = rs.sourceLabelAngle;\n _rstyle2.targetLabelAngle = rs.targetLabelAngle;\n }\n};\n\nvar BRp$6 = {};\nBRp$6.updateCachedGrabbedEles = function () {\n var eles = this.cachedZSortedEles;\n if (!eles) {\n // just let this be recalculated on the next z sort tick\n return;\n }\n eles.drag = [];\n eles.nondrag = [];\n var grabTargets = [];\n for (var i = 0; i < eles.length; i++) {\n var ele = eles[i];\n var rs = ele._private.rscratch;\n if (ele.grabbed() && !ele.isParent()) {\n grabTargets.push(ele);\n } else if (rs.inDragLayer) {\n eles.drag.push(ele);\n } else {\n eles.nondrag.push(ele);\n }\n }\n\n // put the grab target nodes last so it's on top of its neighbourhood\n for (var i = 0; i < grabTargets.length; i++) {\n var ele = grabTargets[i];\n eles.drag.push(ele);\n }\n};\nBRp$6.invalidateCachedZSortedEles = function () {\n this.cachedZSortedEles = null;\n};\nBRp$6.getCachedZSortedEles = function (forceRecalc) {\n if (forceRecalc || !this.cachedZSortedEles) {\n var eles = this.cy.mutableElements().toArray();\n eles.sort(zIndexSort);\n eles.interactive = eles.filter(function (ele) {\n return ele.interactive();\n });\n this.cachedZSortedEles = eles;\n this.updateCachedGrabbedEles();\n } else {\n eles = this.cachedZSortedEles;\n }\n return eles;\n};\n\nvar BRp$5 = {};\n[BRp$e, BRp$d, BRp$c, BRp$b, BRp$a, BRp$9, BRp$8, BRp$7, BRp$6].forEach(function (props) {\n extend(BRp$5, props);\n});\n\nvar BRp$4 = {};\nBRp$4.getCachedImage = function (url, crossOrigin, onLoad) {\n var r = this;\n var imageCache = r.imageCache = r.imageCache || {};\n var cache = imageCache[url];\n if (cache) {\n if (!cache.image.complete) {\n cache.image.addEventListener('load', onLoad);\n }\n return cache.image;\n } else {\n cache = imageCache[url] = imageCache[url] || {};\n var image = cache.image = new Image(); // eslint-disable-line no-undef\n\n image.addEventListener('load', onLoad);\n image.addEventListener('error', function () {\n image.error = true;\n });\n\n // #1582 safari doesn't load data uris with crossOrigin properly\n // https://bugs.webkit.org/show_bug.cgi?id=123978\n var dataUriPrefix = 'data:';\n var isDataUri = url.substring(0, dataUriPrefix.length).toLowerCase() === dataUriPrefix;\n if (!isDataUri) {\n // if crossorigin is 'null'(stringified), then manually set it to null \n crossOrigin = crossOrigin === 'null' ? null : crossOrigin;\n image.crossOrigin = crossOrigin; // prevent tainted canvas\n }\n image.src = url;\n return image;\n }\n};\n\nvar BRp$3 = {};\n\n/* global document, ResizeObserver, MutationObserver */\n\nBRp$3.registerBinding = function (target, event, handler, useCapture) {\n // eslint-disable-line no-unused-vars\n var args = Array.prototype.slice.apply(arguments, [1]); // copy\n\n if (Array.isArray(target)) {\n var res = [];\n for (var i = 0; i < target.length; i++) {\n var t = target[i];\n if (t !== undefined) {\n var b = this.binder(t);\n res.push(b.on.apply(b, args));\n }\n }\n return res;\n }\n var b = this.binder(target);\n return b.on.apply(b, args);\n};\nBRp$3.binder = function (tgt) {\n var r = this;\n var containerWindow = r.cy.window();\n var tgtIsDom = tgt === containerWindow || tgt === containerWindow.document || tgt === containerWindow.document.body || domElement(tgt);\n if (r.supportsPassiveEvents == null) {\n // from https://github.com/WICG/EventListenerOptions/blob/gh-pages/explainer.md#feature-detection\n var supportsPassive = false;\n try {\n var opts = Object.defineProperty({}, 'passive', {\n get: function get() {\n supportsPassive = true;\n return true;\n }\n });\n containerWindow.addEventListener('test', null, opts);\n } catch (err) {\n // not supported\n }\n r.supportsPassiveEvents = supportsPassive;\n }\n var on = function on(event, handler, useCapture) {\n var args = Array.prototype.slice.call(arguments);\n if (tgtIsDom && r.supportsPassiveEvents) {\n // replace useCapture w/ opts obj\n args[2] = {\n capture: useCapture != null ? useCapture : false,\n passive: false,\n once: false\n };\n }\n r.bindings.push({\n target: tgt,\n args: args\n });\n (tgt.addEventListener || tgt.on).apply(tgt, args);\n return this;\n };\n return {\n on: on,\n addEventListener: on,\n addListener: on,\n bind: on\n };\n};\nBRp$3.nodeIsDraggable = function (node) {\n return node && node.isNode() && !node.locked() && node.grabbable();\n};\nBRp$3.nodeIsGrabbable = function (node) {\n return this.nodeIsDraggable(node) && node.interactive();\n};\nBRp$3.load = function () {\n var r = this;\n var containerWindow = r.cy.window();\n var isSelected = function isSelected(ele) {\n return ele.selected();\n };\n var getShadowRoot = function getShadowRoot(element) {\n var rootNode = element.getRootNode();\n // Check if the root node is a shadow root\n if (rootNode && rootNode.nodeType === 11 && rootNode.host !== undefined) {\n return rootNode;\n }\n };\n var triggerEvents = function triggerEvents(target, names, e, position) {\n if (target == null) {\n target = r.cy;\n }\n for (var i = 0; i < names.length; i++) {\n var name = names[i];\n target.emit({\n originalEvent: e,\n type: name,\n position: position\n });\n }\n };\n var isMultSelKeyDown = function isMultSelKeyDown(e) {\n return e.shiftKey || e.metaKey || e.ctrlKey; // maybe e.altKey\n };\n var allowPanningPassthrough = function allowPanningPassthrough(down, downs) {\n var allowPassthrough = true;\n if (r.cy.hasCompoundNodes() && down && down.pannable()) {\n // a grabbable compound node below the ele => no passthrough panning\n for (var i = 0; downs && i < downs.length; i++) {\n var down = downs[i];\n\n //if any parent node in event hierarchy isn't pannable, reject passthrough\n if (down.isNode() && down.isParent() && !down.pannable()) {\n allowPassthrough = false;\n break;\n }\n }\n } else {\n allowPassthrough = true;\n }\n return allowPassthrough;\n };\n var setGrabbed = function setGrabbed(ele) {\n ele[0]._private.grabbed = true;\n };\n var setFreed = function setFreed(ele) {\n ele[0]._private.grabbed = false;\n };\n var setInDragLayer = function setInDragLayer(ele) {\n ele[0]._private.rscratch.inDragLayer = true;\n };\n var setOutDragLayer = function setOutDragLayer(ele) {\n ele[0]._private.rscratch.inDragLayer = false;\n };\n var setGrabTarget = function setGrabTarget(ele) {\n ele[0]._private.rscratch.isGrabTarget = true;\n };\n var removeGrabTarget = function removeGrabTarget(ele) {\n ele[0]._private.rscratch.isGrabTarget = false;\n };\n var addToDragList = function addToDragList(ele, opts) {\n var list = opts.addToList;\n var listHasEle = list.has(ele);\n if (!listHasEle && ele.grabbable() && !ele.locked()) {\n list.merge(ele);\n setGrabbed(ele);\n }\n };\n\n // helper function to determine which child nodes and inner edges\n // of a compound node to be dragged as well as the grabbed and selected nodes\n var addDescendantsToDrag = function addDescendantsToDrag(node, opts) {\n if (!node.cy().hasCompoundNodes()) {\n return;\n }\n if (opts.inDragLayer == null && opts.addToList == null) {\n return;\n } // nothing to do\n\n var innerNodes = node.descendants();\n if (opts.inDragLayer) {\n innerNodes.forEach(setInDragLayer);\n innerNodes.connectedEdges().forEach(setInDragLayer);\n }\n if (opts.addToList) {\n addToDragList(innerNodes, opts);\n }\n };\n\n // adds the given nodes and its neighbourhood to the drag layer\n var addNodesToDrag = function addNodesToDrag(nodes, opts) {\n opts = opts || {};\n var hasCompoundNodes = nodes.cy().hasCompoundNodes();\n if (opts.inDragLayer) {\n nodes.forEach(setInDragLayer);\n nodes.neighborhood().stdFilter(function (ele) {\n return !hasCompoundNodes || ele.isEdge();\n }).forEach(setInDragLayer);\n }\n if (opts.addToList) {\n nodes.forEach(function (ele) {\n addToDragList(ele, opts);\n });\n }\n addDescendantsToDrag(nodes, opts); // always add to drag\n\n // also add nodes and edges related to the topmost ancestor\n updateAncestorsInDragLayer(nodes, {\n inDragLayer: opts.inDragLayer\n });\n r.updateCachedGrabbedEles();\n };\n var addNodeToDrag = addNodesToDrag;\n var freeDraggedElements = function freeDraggedElements(grabbedEles) {\n if (!grabbedEles) {\n return;\n }\n\n // just go over all elements rather than doing a bunch of (possibly expensive) traversals\n r.getCachedZSortedEles().forEach(function (ele) {\n setFreed(ele);\n setOutDragLayer(ele);\n removeGrabTarget(ele);\n });\n r.updateCachedGrabbedEles();\n };\n\n // helper function to determine which ancestor nodes and edges should go\n // to the drag layer (or should be removed from drag layer).\n var updateAncestorsInDragLayer = function updateAncestorsInDragLayer(node, opts) {\n if (opts.inDragLayer == null && opts.addToList == null) {\n return;\n } // nothing to do\n\n if (!node.cy().hasCompoundNodes()) {\n return;\n }\n\n // find top-level parent\n var parent = node.ancestors().orphans();\n\n // no parent node: no nodes to add to the drag layer\n if (parent.same(node)) {\n return;\n }\n var nodes = parent.descendants().spawnSelf().merge(parent).unmerge(node).unmerge(node.descendants());\n var edges = nodes.connectedEdges();\n if (opts.inDragLayer) {\n edges.forEach(setInDragLayer);\n nodes.forEach(setInDragLayer);\n }\n if (opts.addToList) {\n nodes.forEach(function (ele) {\n addToDragList(ele, opts);\n });\n }\n };\n var blurActiveDomElement = function blurActiveDomElement() {\n if (document.activeElement != null && document.activeElement.blur != null) {\n document.activeElement.blur();\n }\n };\n var haveMutationsApi = typeof MutationObserver !== 'undefined';\n var haveResizeObserverApi = typeof ResizeObserver !== 'undefined';\n\n // watch for when the cy container is removed from the dom\n if (haveMutationsApi) {\n r.removeObserver = new MutationObserver(function (mutns) {\n // eslint-disable-line no-undef\n for (var i = 0; i < mutns.length; i++) {\n var mutn = mutns[i];\n var rNodes = mutn.removedNodes;\n if (rNodes) {\n for (var j = 0; j < rNodes.length; j++) {\n var rNode = rNodes[j];\n if (rNode === r.container) {\n r.destroy();\n break;\n }\n }\n }\n }\n });\n if (r.container.parentNode) {\n r.removeObserver.observe(r.container.parentNode, {\n childList: true\n });\n }\n } else {\n r.registerBinding(r.container, 'DOMNodeRemoved', function (e) {\n // eslint-disable-line no-unused-vars\n r.destroy();\n });\n }\n var onResize = debounce(function () {\n r.cy.resize();\n }, 100);\n if (haveMutationsApi) {\n r.styleObserver = new MutationObserver(onResize); // eslint-disable-line no-undef\n\n r.styleObserver.observe(r.container, {\n attributes: true\n });\n }\n\n // auto resize\n r.registerBinding(containerWindow, 'resize', onResize); // eslint-disable-line no-undef\n\n if (haveResizeObserverApi) {\n r.resizeObserver = new ResizeObserver(onResize); // eslint-disable-line no-undef\n\n r.resizeObserver.observe(r.container);\n }\n var forEachUp = function forEachUp(domEle, fn) {\n while (domEle != null) {\n fn(domEle);\n domEle = domEle.parentNode;\n }\n };\n var invalidateCoords = function invalidateCoords() {\n r.invalidateContainerClientCoordsCache();\n };\n forEachUp(r.container, function (domEle) {\n r.registerBinding(domEle, 'transitionend', invalidateCoords);\n r.registerBinding(domEle, 'animationend', invalidateCoords);\n r.registerBinding(domEle, 'scroll', invalidateCoords);\n });\n\n // stop right click menu from appearing on cy\n r.registerBinding(r.container, 'contextmenu', function (e) {\n e.preventDefault();\n });\n var inBoxSelection = function inBoxSelection() {\n return r.selection[4] !== 0;\n };\n var eventInContainer = function eventInContainer(e) {\n // save cycles if mouse events aren't to be captured\n var containerPageCoords = r.findContainerClientCoords();\n var x = containerPageCoords[0];\n var y = containerPageCoords[1];\n var width = containerPageCoords[2];\n var height = containerPageCoords[3];\n var positions = e.touches ? e.touches : [e];\n var atLeastOnePosInside = false;\n for (var i = 0; i < positions.length; i++) {\n var p = positions[i];\n if (x <= p.clientX && p.clientX <= x + width && y <= p.clientY && p.clientY <= y + height) {\n atLeastOnePosInside = true;\n break;\n }\n }\n if (!atLeastOnePosInside) {\n return false;\n }\n var container = r.container;\n var target = e.target;\n var tParent = target.parentNode;\n var containerIsTarget = false;\n while (tParent) {\n if (tParent === container) {\n containerIsTarget = true;\n break;\n }\n tParent = tParent.parentNode;\n }\n if (!containerIsTarget) {\n return false;\n } // if target is outisde cy container, then this event is not for us\n\n return true;\n };\n\n // Primary key\n r.registerBinding(r.container, 'mousedown', function mousedownHandler(e) {\n if (!eventInContainer(e)) {\n return;\n }\n\n // during left mouse button gestures, ignore other buttons\n if (r.hoverData.which === 1 && e.which !== 1) {\n return;\n }\n e.preventDefault();\n blurActiveDomElement();\n r.hoverData.capture = true;\n r.hoverData.which = e.which;\n var cy = r.cy;\n var gpos = [e.clientX, e.clientY];\n var pos = r.projectIntoViewport(gpos[0], gpos[1]);\n var select = r.selection;\n var nears = r.findNearestElements(pos[0], pos[1], true, false);\n var near = nears[0];\n var draggedElements = r.dragData.possibleDragElements;\n r.hoverData.mdownPos = pos;\n r.hoverData.mdownGPos = gpos;\n var checkForTaphold = function checkForTaphold() {\n r.hoverData.tapholdCancelled = false;\n clearTimeout(r.hoverData.tapholdTimeout);\n r.hoverData.tapholdTimeout = setTimeout(function () {\n if (r.hoverData.tapholdCancelled) {\n return;\n } else {\n var ele = r.hoverData.down;\n if (ele) {\n ele.emit({\n originalEvent: e,\n type: 'taphold',\n position: {\n x: pos[0],\n y: pos[1]\n }\n });\n } else {\n cy.emit({\n originalEvent: e,\n type: 'taphold',\n position: {\n x: pos[0],\n y: pos[1]\n }\n });\n }\n }\n }, r.tapholdDuration);\n };\n\n // Right click button\n if (e.which == 3) {\n r.hoverData.cxtStarted = true;\n var cxtEvt = {\n originalEvent: e,\n type: 'cxttapstart',\n position: {\n x: pos[0],\n y: pos[1]\n }\n };\n if (near) {\n near.activate();\n near.emit(cxtEvt);\n r.hoverData.down = near;\n } else {\n cy.emit(cxtEvt);\n }\n r.hoverData.downTime = new Date().getTime();\n r.hoverData.cxtDragged = false;\n\n // Primary button\n } else if (e.which == 1) {\n if (near) {\n near.activate();\n }\n\n // Element dragging\n {\n // If something is under the cursor and it is draggable, prepare to grab it\n if (near != null) {\n if (r.nodeIsGrabbable(near)) {\n var makeEvent = function makeEvent(type) {\n return {\n originalEvent: e,\n type: type,\n position: {\n x: pos[0],\n y: pos[1]\n }\n };\n };\n var triggerGrab = function triggerGrab(ele) {\n ele.emit(makeEvent('grab'));\n };\n setGrabTarget(near);\n if (!near.selected()) {\n draggedElements = r.dragData.possibleDragElements = cy.collection();\n addNodeToDrag(near, {\n addToList: draggedElements\n });\n near.emit(makeEvent('grabon')).emit(makeEvent('grab'));\n } else {\n draggedElements = r.dragData.possibleDragElements = cy.collection();\n var selectedNodes = cy.$(function (ele) {\n return ele.isNode() && ele.selected() && r.nodeIsGrabbable(ele);\n });\n addNodesToDrag(selectedNodes, {\n addToList: draggedElements\n });\n near.emit(makeEvent('grabon'));\n selectedNodes.forEach(triggerGrab);\n }\n r.redrawHint('eles', true);\n r.redrawHint('drag', true);\n }\n }\n r.hoverData.down = near;\n r.hoverData.downs = nears;\n r.hoverData.downTime = new Date().getTime();\n }\n triggerEvents(near, ['mousedown', 'tapstart', 'vmousedown'], e, {\n x: pos[0],\n y: pos[1]\n });\n if (near == null) {\n select[4] = 1;\n r.data.bgActivePosistion = {\n x: pos[0],\n y: pos[1]\n };\n r.redrawHint('select', true);\n r.redraw();\n } else if (near.pannable()) {\n select[4] = 1; // for future pan\n }\n checkForTaphold();\n }\n\n // Initialize selection box coordinates\n select[0] = select[2] = pos[0];\n select[1] = select[3] = pos[1];\n }, false);\n var shadowRoot = getShadowRoot(r.container);\n r.registerBinding([containerWindow, shadowRoot], 'mousemove', function mousemoveHandler(e) {\n // eslint-disable-line no-undef\n var capture = r.hoverData.capture;\n if (!capture && !eventInContainer(e)) {\n return;\n }\n var preventDefault = false;\n var cy = r.cy;\n var zoom = cy.zoom();\n var gpos = [e.clientX, e.clientY];\n var pos = r.projectIntoViewport(gpos[0], gpos[1]);\n var mdownPos = r.hoverData.mdownPos;\n var mdownGPos = r.hoverData.mdownGPos;\n var select = r.selection;\n var near = null;\n if (!r.hoverData.draggingEles && !r.hoverData.dragging && !r.hoverData.selecting) {\n near = r.findNearestElement(pos[0], pos[1], true, false);\n }\n var last = r.hoverData.last;\n var down = r.hoverData.down;\n var disp = [pos[0] - select[2], pos[1] - select[3]];\n var draggedElements = r.dragData.possibleDragElements;\n var isOverThresholdDrag;\n if (mdownGPos) {\n var dx = gpos[0] - mdownGPos[0];\n var dx2 = dx * dx;\n var dy = gpos[1] - mdownGPos[1];\n var dy2 = dy * dy;\n var dist2 = dx2 + dy2;\n r.hoverData.isOverThresholdDrag = isOverThresholdDrag = dist2 >= r.desktopTapThreshold2;\n }\n var multSelKeyDown = isMultSelKeyDown(e);\n if (isOverThresholdDrag) {\n r.hoverData.tapholdCancelled = true;\n }\n var updateDragDelta = function updateDragDelta() {\n var dragDelta = r.hoverData.dragDelta = r.hoverData.dragDelta || [];\n if (dragDelta.length === 0) {\n dragDelta.push(disp[0]);\n dragDelta.push(disp[1]);\n } else {\n dragDelta[0] += disp[0];\n dragDelta[1] += disp[1];\n }\n };\n preventDefault = true;\n triggerEvents(near, ['mousemove', 'vmousemove', 'tapdrag'], e, {\n x: pos[0],\n y: pos[1]\n });\n var goIntoBoxMode = function goIntoBoxMode() {\n r.data.bgActivePosistion = undefined;\n if (!r.hoverData.selecting) {\n cy.emit({\n originalEvent: e,\n type: 'boxstart',\n position: {\n x: pos[0],\n y: pos[1]\n }\n });\n }\n select[4] = 1;\n r.hoverData.selecting = true;\n r.redrawHint('select', true);\n r.redraw();\n };\n\n // trigger context drag if rmouse down\n if (r.hoverData.which === 3) {\n // but only if over threshold\n if (isOverThresholdDrag) {\n var cxtEvt = {\n originalEvent: e,\n type: 'cxtdrag',\n position: {\n x: pos[0],\n y: pos[1]\n }\n };\n if (down) {\n down.emit(cxtEvt);\n } else {\n cy.emit(cxtEvt);\n }\n r.hoverData.cxtDragged = true;\n if (!r.hoverData.cxtOver || near !== r.hoverData.cxtOver) {\n if (r.hoverData.cxtOver) {\n r.hoverData.cxtOver.emit({\n originalEvent: e,\n type: 'cxtdragout',\n position: {\n x: pos[0],\n y: pos[1]\n }\n });\n }\n r.hoverData.cxtOver = near;\n if (near) {\n near.emit({\n originalEvent: e,\n type: 'cxtdragover',\n position: {\n x: pos[0],\n y: pos[1]\n }\n });\n }\n }\n }\n\n // Check if we are drag panning the entire graph\n } else if (r.hoverData.dragging) {\n preventDefault = true;\n if (cy.panningEnabled() && cy.userPanningEnabled()) {\n var deltaP;\n if (r.hoverData.justStartedPan) {\n var mdPos = r.hoverData.mdownPos;\n deltaP = {\n x: (pos[0] - mdPos[0]) * zoom,\n y: (pos[1] - mdPos[1]) * zoom\n };\n r.hoverData.justStartedPan = false;\n } else {\n deltaP = {\n x: disp[0] * zoom,\n y: disp[1] * zoom\n };\n }\n cy.panBy(deltaP);\n cy.emit('dragpan');\n r.hoverData.dragged = true;\n }\n\n // Needs reproject due to pan changing viewport\n pos = r.projectIntoViewport(e.clientX, e.clientY);\n\n // Checks primary button down & out of time & mouse not moved much\n } else if (select[4] == 1 && (down == null || down.pannable())) {\n if (isOverThresholdDrag) {\n if (!r.hoverData.dragging && cy.boxSelectionEnabled() && (multSelKeyDown || !cy.panningEnabled() || !cy.userPanningEnabled())) {\n goIntoBoxMode();\n } else if (!r.hoverData.selecting && cy.panningEnabled() && cy.userPanningEnabled()) {\n var allowPassthrough = allowPanningPassthrough(down, r.hoverData.downs);\n if (allowPassthrough) {\n r.hoverData.dragging = true;\n r.hoverData.justStartedPan = true;\n select[4] = 0;\n r.data.bgActivePosistion = array2point(mdownPos);\n r.redrawHint('select', true);\n r.redraw();\n }\n }\n if (down && down.pannable() && down.active()) {\n down.unactivate();\n }\n }\n } else {\n if (down && down.pannable() && down.active()) {\n down.unactivate();\n }\n if ((!down || !down.grabbed()) && near != last) {\n if (last) {\n triggerEvents(last, ['mouseout', 'tapdragout'], e, {\n x: pos[0],\n y: pos[1]\n });\n }\n if (near) {\n triggerEvents(near, ['mouseover', 'tapdragover'], e, {\n x: pos[0],\n y: pos[1]\n });\n }\n r.hoverData.last = near;\n }\n if (down) {\n if (isOverThresholdDrag) {\n // then we can take action\n\n if (cy.boxSelectionEnabled() && multSelKeyDown) {\n // then selection overrides\n if (down && down.grabbed()) {\n freeDraggedElements(draggedElements);\n down.emit('freeon');\n draggedElements.emit('free');\n if (r.dragData.didDrag) {\n down.emit('dragfreeon');\n draggedElements.emit('dragfree');\n }\n }\n goIntoBoxMode();\n } else if (down && down.grabbed() && r.nodeIsDraggable(down)) {\n // drag node\n var justStartedDrag = !r.dragData.didDrag;\n if (justStartedDrag) {\n r.redrawHint('eles', true);\n }\n r.dragData.didDrag = true; // indicate that we actually did drag the node\n\n // now, add the elements to the drag layer if not done already\n if (!r.hoverData.draggingEles) {\n addNodesToDrag(draggedElements, {\n inDragLayer: true\n });\n }\n var totalShift = {\n x: 0,\n y: 0\n };\n if (number$1(disp[0]) && number$1(disp[1])) {\n totalShift.x += disp[0];\n totalShift.y += disp[1];\n if (justStartedDrag) {\n var dragDelta = r.hoverData.dragDelta;\n if (dragDelta && number$1(dragDelta[0]) && number$1(dragDelta[1])) {\n totalShift.x += dragDelta[0];\n totalShift.y += dragDelta[1];\n }\n }\n }\n r.hoverData.draggingEles = true;\n draggedElements.silentShift(totalShift).emit('position drag');\n r.redrawHint('drag', true);\n r.redraw();\n }\n } else {\n // otherwise save drag delta for when we actually start dragging so the relative grab pos is constant\n updateDragDelta();\n }\n }\n\n // prevent the dragging from triggering text selection on the page\n preventDefault = true;\n }\n select[2] = pos[0];\n select[3] = pos[1];\n if (preventDefault) {\n if (e.stopPropagation) e.stopPropagation();\n if (e.preventDefault) e.preventDefault();\n return false;\n }\n }, false);\n var clickTimeout, didDoubleClick, prevClickTimeStamp;\n r.registerBinding(containerWindow, 'mouseup', function mouseupHandler(e) {\n // eslint-disable-line no-undef\n // during left mouse button gestures, ignore other buttons\n if (r.hoverData.which === 1 && e.which !== 1 && r.hoverData.capture) {\n return;\n }\n var capture = r.hoverData.capture;\n if (!capture) {\n return;\n }\n r.hoverData.capture = false;\n var cy = r.cy;\n var pos = r.projectIntoViewport(e.clientX, e.clientY);\n var select = r.selection;\n var near = r.findNearestElement(pos[0], pos[1], true, false);\n var draggedElements = r.dragData.possibleDragElements;\n var down = r.hoverData.down;\n var multSelKeyDown = isMultSelKeyDown(e);\n if (r.data.bgActivePosistion) {\n r.redrawHint('select', true);\n r.redraw();\n }\n r.hoverData.tapholdCancelled = true;\n r.data.bgActivePosistion = undefined; // not active bg now\n\n if (down) {\n down.unactivate();\n }\n if (r.hoverData.which === 3) {\n var cxtEvt = {\n originalEvent: e,\n type: 'cxttapend',\n position: {\n x: pos[0],\n y: pos[1]\n }\n };\n if (down) {\n down.emit(cxtEvt);\n } else {\n cy.emit(cxtEvt);\n }\n if (!r.hoverData.cxtDragged) {\n var cxtTap = {\n originalEvent: e,\n type: 'cxttap',\n position: {\n x: pos[0],\n y: pos[1]\n }\n };\n if (down) {\n down.emit(cxtTap);\n } else {\n cy.emit(cxtTap);\n }\n }\n r.hoverData.cxtDragged = false;\n r.hoverData.which = null;\n } else if (r.hoverData.which === 1) {\n triggerEvents(near, ['mouseup', 'tapend', 'vmouseup'], e, {\n x: pos[0],\n y: pos[1]\n });\n if (!r.dragData.didDrag &&\n // didn't move a node around\n !r.hoverData.dragged &&\n // didn't pan\n !r.hoverData.selecting &&\n // not box selection\n !r.hoverData.isOverThresholdDrag // didn't move too much\n ) {\n triggerEvents(down, [\"click\", \"tap\", \"vclick\"], e, {\n x: pos[0],\n y: pos[1]\n });\n didDoubleClick = false;\n if (e.timeStamp - prevClickTimeStamp <= cy.multiClickDebounceTime()) {\n clickTimeout && clearTimeout(clickTimeout);\n didDoubleClick = true;\n prevClickTimeStamp = null;\n triggerEvents(down, [\"dblclick\", \"dbltap\", \"vdblclick\"], e, {\n x: pos[0],\n y: pos[1]\n });\n } else {\n clickTimeout = setTimeout(function () {\n if (didDoubleClick) return;\n triggerEvents(down, [\"oneclick\", \"onetap\", \"voneclick\"], e, {\n x: pos[0],\n y: pos[1]\n });\n }, cy.multiClickDebounceTime());\n prevClickTimeStamp = e.timeStamp;\n }\n }\n\n // Deselect all elements if nothing is currently under the mouse cursor and we aren't dragging something\n if (down == null // not mousedown on node\n && !r.dragData.didDrag // didn't move the node around\n && !r.hoverData.selecting // not box selection\n && !r.hoverData.dragged // didn't pan\n && !isMultSelKeyDown(e)) {\n cy.$(isSelected).unselect(['tapunselect']);\n if (draggedElements.length > 0) {\n r.redrawHint('eles', true);\n }\n r.dragData.possibleDragElements = draggedElements = cy.collection();\n }\n\n // Single selection\n if (near == down && !r.dragData.didDrag && !r.hoverData.selecting) {\n if (near != null && near._private.selectable) {\n if (r.hoverData.dragging) ; else if (cy.selectionType() === 'additive' || multSelKeyDown) {\n if (near.selected()) {\n near.unselect(['tapunselect']);\n } else {\n near.select(['tapselect']);\n }\n } else {\n if (!multSelKeyDown) {\n cy.$(isSelected).unmerge(near).unselect(['tapunselect']);\n near.select(['tapselect']);\n }\n }\n r.redrawHint('eles', true);\n }\n }\n if (r.hoverData.selecting) {\n var box = cy.collection(r.getAllInBox(select[0], select[1], select[2], select[3]));\n r.redrawHint('select', true);\n if (box.length > 0) {\n r.redrawHint('eles', true);\n }\n cy.emit({\n type: 'boxend',\n originalEvent: e,\n position: {\n x: pos[0],\n y: pos[1]\n }\n });\n var eleWouldBeSelected = function eleWouldBeSelected(ele) {\n return ele.selectable() && !ele.selected();\n };\n if (cy.selectionType() === 'additive') {\n box.emit('box').stdFilter(eleWouldBeSelected).select().emit('boxselect');\n } else {\n if (!multSelKeyDown) {\n cy.$(isSelected).unmerge(box).unselect();\n }\n box.emit('box').stdFilter(eleWouldBeSelected).select().emit('boxselect');\n }\n\n // always need redraw in case eles unselectable\n r.redraw();\n }\n\n // Cancel drag pan\n if (r.hoverData.dragging) {\n r.hoverData.dragging = false;\n r.redrawHint('select', true);\n r.redrawHint('eles', true);\n r.redraw();\n }\n if (!select[4]) {\n r.redrawHint('drag', true);\n r.redrawHint('eles', true);\n var downWasGrabbed = down && down.grabbed();\n freeDraggedElements(draggedElements);\n if (downWasGrabbed) {\n down.emit('freeon');\n draggedElements.emit('free');\n if (r.dragData.didDrag) {\n down.emit('dragfreeon');\n draggedElements.emit('dragfree');\n }\n }\n }\n } // else not right mouse\n\n select[4] = 0;\n r.hoverData.down = null;\n r.hoverData.cxtStarted = false;\n r.hoverData.draggingEles = false;\n r.hoverData.selecting = false;\n r.hoverData.isOverThresholdDrag = false;\n r.dragData.didDrag = false;\n r.hoverData.dragged = false;\n r.hoverData.dragDelta = [];\n r.hoverData.mdownPos = null;\n r.hoverData.mdownGPos = null;\n r.hoverData.which = null;\n }, false);\n var wheelHandler = function wheelHandler(e) {\n if (r.scrollingPage) {\n return;\n } // while scrolling, ignore wheel-to-zoom\n\n var cy = r.cy;\n var zoom = cy.zoom();\n var pan = cy.pan();\n var pos = r.projectIntoViewport(e.clientX, e.clientY);\n var rpos = [pos[0] * zoom + pan.x, pos[1] * zoom + pan.y];\n if (r.hoverData.draggingEles || r.hoverData.dragging || r.hoverData.cxtStarted || inBoxSelection()) {\n // if pan dragging or cxt dragging, wheel movements make no zoom\n e.preventDefault();\n return;\n }\n if (cy.panningEnabled() && cy.userPanningEnabled() && cy.zoomingEnabled() && cy.userZoomingEnabled()) {\n e.preventDefault();\n r.data.wheelZooming = true;\n clearTimeout(r.data.wheelTimeout);\n r.data.wheelTimeout = setTimeout(function () {\n r.data.wheelZooming = false;\n r.redrawHint('eles', true);\n r.redraw();\n }, 150);\n var diff;\n if (e.deltaY != null) {\n diff = e.deltaY / -250;\n } else if (e.wheelDeltaY != null) {\n diff = e.wheelDeltaY / 1000;\n } else {\n diff = e.wheelDelta / 1000;\n }\n diff = diff * r.wheelSensitivity;\n var needsWheelFix = e.deltaMode === 1;\n if (needsWheelFix) {\n // fixes slow wheel events on ff/linux and ff/windows\n diff *= 33;\n }\n var newZoom = cy.zoom() * Math.pow(10, diff);\n if (e.type === 'gesturechange') {\n newZoom = r.gestureStartZoom * e.scale;\n }\n cy.zoom({\n level: newZoom,\n renderedPosition: {\n x: rpos[0],\n y: rpos[1]\n }\n });\n cy.emit(e.type === 'gesturechange' ? 'pinchzoom' : 'scrollzoom');\n }\n };\n\n // Functions to help with whether mouse wheel should trigger zooming\n // --\n r.registerBinding(r.container, 'wheel', wheelHandler, true);\n\n // disable nonstandard wheel events\n // r.registerBinding(r.container, 'mousewheel', wheelHandler, true);\n // r.registerBinding(r.container, 'DOMMouseScroll', wheelHandler, true);\n // r.registerBinding(r.container, 'MozMousePixelScroll', wheelHandler, true); // older firefox\n\n r.registerBinding(containerWindow, 'scroll', function scrollHandler(e) {\n // eslint-disable-line no-unused-vars\n r.scrollingPage = true;\n clearTimeout(r.scrollingPageTimeout);\n r.scrollingPageTimeout = setTimeout(function () {\n r.scrollingPage = false;\n }, 250);\n }, true);\n\n // desktop safari pinch to zoom start\n r.registerBinding(r.container, 'gesturestart', function gestureStartHandler(e) {\n r.gestureStartZoom = r.cy.zoom();\n if (!r.hasTouchStarted) {\n // don't affect touch devices like iphone\n e.preventDefault();\n }\n }, true);\n r.registerBinding(r.container, 'gesturechange', function (e) {\n if (!r.hasTouchStarted) {\n // don't affect touch devices like iphone\n wheelHandler(e);\n }\n }, true);\n\n // Functions to help with handling mouseout/mouseover on the Cytoscape container\n // Handle mouseout on Cytoscape container\n r.registerBinding(r.container, 'mouseout', function mouseOutHandler(e) {\n var pos = r.projectIntoViewport(e.clientX, e.clientY);\n r.cy.emit({\n originalEvent: e,\n type: 'mouseout',\n position: {\n x: pos[0],\n y: pos[1]\n }\n });\n }, false);\n r.registerBinding(r.container, 'mouseover', function mouseOverHandler(e) {\n var pos = r.projectIntoViewport(e.clientX, e.clientY);\n r.cy.emit({\n originalEvent: e,\n type: 'mouseover',\n position: {\n x: pos[0],\n y: pos[1]\n }\n });\n }, false);\n var f1x1, f1y1, f2x1, f2y1; // starting points for pinch-to-zoom\n var distance1, distance1Sq; // initial distance between finger 1 and finger 2 for pinch-to-zoom\n var center1, modelCenter1; // center point on start pinch to zoom\n var offsetLeft, offsetTop;\n var containerWidth, containerHeight;\n var twoFingersStartInside;\n var distance = function distance(x1, y1, x2, y2) {\n return Math.sqrt((x2 - x1) * (x2 - x1) + (y2 - y1) * (y2 - y1));\n };\n var distanceSq = function distanceSq(x1, y1, x2, y2) {\n return (x2 - x1) * (x2 - x1) + (y2 - y1) * (y2 - y1);\n };\n var touchstartHandler;\n r.registerBinding(r.container, 'touchstart', touchstartHandler = function touchstartHandler(e) {\n r.hasTouchStarted = true;\n if (!eventInContainer(e)) {\n return;\n }\n blurActiveDomElement();\n r.touchData.capture = true;\n r.data.bgActivePosistion = undefined;\n var cy = r.cy;\n var now = r.touchData.now;\n var earlier = r.touchData.earlier;\n if (e.touches[0]) {\n var pos = r.projectIntoViewport(e.touches[0].clientX, e.touches[0].clientY);\n now[0] = pos[0];\n now[1] = pos[1];\n }\n if (e.touches[1]) {\n var pos = r.projectIntoViewport(e.touches[1].clientX, e.touches[1].clientY);\n now[2] = pos[0];\n now[3] = pos[1];\n }\n if (e.touches[2]) {\n var pos = r.projectIntoViewport(e.touches[2].clientX, e.touches[2].clientY);\n now[4] = pos[0];\n now[5] = pos[1];\n }\n\n // record starting points for pinch-to-zoom\n if (e.touches[1]) {\n r.touchData.singleTouchMoved = true;\n freeDraggedElements(r.dragData.touchDragEles);\n var offsets = r.findContainerClientCoords();\n offsetLeft = offsets[0];\n offsetTop = offsets[1];\n containerWidth = offsets[2];\n containerHeight = offsets[3];\n f1x1 = e.touches[0].clientX - offsetLeft;\n f1y1 = e.touches[0].clientY - offsetTop;\n f2x1 = e.touches[1].clientX - offsetLeft;\n f2y1 = e.touches[1].clientY - offsetTop;\n twoFingersStartInside = 0 <= f1x1 && f1x1 <= containerWidth && 0 <= f2x1 && f2x1 <= containerWidth && 0 <= f1y1 && f1y1 <= containerHeight && 0 <= f2y1 && f2y1 <= containerHeight;\n var pan = cy.pan();\n var zoom = cy.zoom();\n distance1 = distance(f1x1, f1y1, f2x1, f2y1);\n distance1Sq = distanceSq(f1x1, f1y1, f2x1, f2y1);\n center1 = [(f1x1 + f2x1) / 2, (f1y1 + f2y1) / 2];\n modelCenter1 = [(center1[0] - pan.x) / zoom, (center1[1] - pan.y) / zoom];\n\n // consider context tap\n var cxtDistThreshold = 200;\n var cxtDistThresholdSq = cxtDistThreshold * cxtDistThreshold;\n if (distance1Sq < cxtDistThresholdSq && !e.touches[2]) {\n var near1 = r.findNearestElement(now[0], now[1], true, true);\n var near2 = r.findNearestElement(now[2], now[3], true, true);\n if (near1 && near1.isNode()) {\n near1.activate().emit({\n originalEvent: e,\n type: 'cxttapstart',\n position: {\n x: now[0],\n y: now[1]\n }\n });\n r.touchData.start = near1;\n } else if (near2 && near2.isNode()) {\n near2.activate().emit({\n originalEvent: e,\n type: 'cxttapstart',\n position: {\n x: now[0],\n y: now[1]\n }\n });\n r.touchData.start = near2;\n } else {\n cy.emit({\n originalEvent: e,\n type: 'cxttapstart',\n position: {\n x: now[0],\n y: now[1]\n }\n });\n }\n if (r.touchData.start) {\n r.touchData.start._private.grabbed = false;\n }\n r.touchData.cxt = true;\n r.touchData.cxtDragged = false;\n r.data.bgActivePosistion = undefined;\n r.redraw();\n return;\n }\n }\n if (e.touches[2]) {\n // ignore\n\n // safari on ios pans the page otherwise (normally you should be able to preventdefault on touchmove...)\n if (cy.boxSelectionEnabled()) {\n e.preventDefault();\n }\n } else if (e.touches[1]) ; else if (e.touches[0]) {\n var nears = r.findNearestElements(now[0], now[1], true, true);\n var near = nears[0];\n if (near != null) {\n near.activate();\n r.touchData.start = near;\n r.touchData.starts = nears;\n if (r.nodeIsGrabbable(near)) {\n var draggedEles = r.dragData.touchDragEles = cy.collection();\n var selectedNodes = null;\n r.redrawHint('eles', true);\n r.redrawHint('drag', true);\n if (near.selected()) {\n // reset drag elements, since near will be added again\n\n selectedNodes = cy.$(function (ele) {\n return ele.selected() && r.nodeIsGrabbable(ele);\n });\n addNodesToDrag(selectedNodes, {\n addToList: draggedEles\n });\n } else {\n addNodeToDrag(near, {\n addToList: draggedEles\n });\n }\n setGrabTarget(near);\n var makeEvent = function makeEvent(type) {\n return {\n originalEvent: e,\n type: type,\n position: {\n x: now[0],\n y: now[1]\n }\n };\n };\n near.emit(makeEvent('grabon'));\n if (selectedNodes) {\n selectedNodes.forEach(function (n) {\n n.emit(makeEvent('grab'));\n });\n } else {\n near.emit(makeEvent('grab'));\n }\n }\n }\n triggerEvents(near, ['touchstart', 'tapstart', 'vmousedown'], e, {\n x: now[0],\n y: now[1]\n });\n if (near == null) {\n r.data.bgActivePosistion = {\n x: pos[0],\n y: pos[1]\n };\n r.redrawHint('select', true);\n r.redraw();\n }\n\n // Tap, taphold\n // -----\n\n r.touchData.singleTouchMoved = false;\n r.touchData.singleTouchStartTime = +new Date();\n clearTimeout(r.touchData.tapholdTimeout);\n r.touchData.tapholdTimeout = setTimeout(function () {\n if (r.touchData.singleTouchMoved === false && !r.pinching // if pinching, then taphold unselect shouldn't take effect\n && !r.touchData.selecting // box selection shouldn't allow taphold through\n ) {\n triggerEvents(r.touchData.start, ['taphold'], e, {\n x: now[0],\n y: now[1]\n });\n }\n }, r.tapholdDuration);\n }\n if (e.touches.length >= 1) {\n var sPos = r.touchData.startPosition = [null, null, null, null, null, null];\n for (var i = 0; i < now.length; i++) {\n sPos[i] = earlier[i] = now[i];\n }\n var touch0 = e.touches[0];\n r.touchData.startGPosition = [touch0.clientX, touch0.clientY];\n }\n }, false);\n var touchmoveHandler;\n r.registerBinding(containerWindow, 'touchmove', touchmoveHandler = function touchmoveHandler(e) {\n // eslint-disable-line no-undef\n var capture = r.touchData.capture;\n if (!capture && !eventInContainer(e)) {\n return;\n }\n var select = r.selection;\n var cy = r.cy;\n var now = r.touchData.now;\n var earlier = r.touchData.earlier;\n var zoom = cy.zoom();\n if (e.touches[0]) {\n var pos = r.projectIntoViewport(e.touches[0].clientX, e.touches[0].clientY);\n now[0] = pos[0];\n now[1] = pos[1];\n }\n if (e.touches[1]) {\n var pos = r.projectIntoViewport(e.touches[1].clientX, e.touches[1].clientY);\n now[2] = pos[0];\n now[3] = pos[1];\n }\n if (e.touches[2]) {\n var pos = r.projectIntoViewport(e.touches[2].clientX, e.touches[2].clientY);\n now[4] = pos[0];\n now[5] = pos[1];\n }\n var startGPos = r.touchData.startGPosition;\n var isOverThresholdDrag;\n if (capture && e.touches[0] && startGPos) {\n var disp = [];\n for (var j = 0; j < now.length; j++) {\n disp[j] = now[j] - earlier[j];\n }\n var dx = e.touches[0].clientX - startGPos[0];\n var dx2 = dx * dx;\n var dy = e.touches[0].clientY - startGPos[1];\n var dy2 = dy * dy;\n var dist2 = dx2 + dy2;\n isOverThresholdDrag = dist2 >= r.touchTapThreshold2;\n }\n\n // context swipe cancelling\n if (capture && r.touchData.cxt) {\n e.preventDefault();\n var f1x2 = e.touches[0].clientX - offsetLeft,\n f1y2 = e.touches[0].clientY - offsetTop;\n var f2x2 = e.touches[1].clientX - offsetLeft,\n f2y2 = e.touches[1].clientY - offsetTop;\n // var distance2 = distance( f1x2, f1y2, f2x2, f2y2 );\n var distance2Sq = distanceSq(f1x2, f1y2, f2x2, f2y2);\n var factorSq = distance2Sq / distance1Sq;\n var distThreshold = 150;\n var distThresholdSq = distThreshold * distThreshold;\n var factorThreshold = 1.5;\n var factorThresholdSq = factorThreshold * factorThreshold;\n\n // cancel ctx gestures if the distance b/t the fingers increases\n if (factorSq >= factorThresholdSq || distance2Sq >= distThresholdSq) {\n r.touchData.cxt = false;\n r.data.bgActivePosistion = undefined;\n r.redrawHint('select', true);\n var cxtEvt = {\n originalEvent: e,\n type: 'cxttapend',\n position: {\n x: now[0],\n y: now[1]\n }\n };\n if (r.touchData.start) {\n r.touchData.start.unactivate().emit(cxtEvt);\n r.touchData.start = null;\n } else {\n cy.emit(cxtEvt);\n }\n }\n }\n\n // context swipe\n if (capture && r.touchData.cxt) {\n var cxtEvt = {\n originalEvent: e,\n type: 'cxtdrag',\n position: {\n x: now[0],\n y: now[1]\n }\n };\n r.data.bgActivePosistion = undefined;\n r.redrawHint('select', true);\n if (r.touchData.start) {\n r.touchData.start.emit(cxtEvt);\n } else {\n cy.emit(cxtEvt);\n }\n if (r.touchData.start) {\n r.touchData.start._private.grabbed = false;\n }\n r.touchData.cxtDragged = true;\n var near = r.findNearestElement(now[0], now[1], true, true);\n if (!r.touchData.cxtOver || near !== r.touchData.cxtOver) {\n if (r.touchData.cxtOver) {\n r.touchData.cxtOver.emit({\n originalEvent: e,\n type: 'cxtdragout',\n position: {\n x: now[0],\n y: now[1]\n }\n });\n }\n r.touchData.cxtOver = near;\n if (near) {\n near.emit({\n originalEvent: e,\n type: 'cxtdragover',\n position: {\n x: now[0],\n y: now[1]\n }\n });\n }\n }\n\n // box selection\n } else if (capture && e.touches[2] && cy.boxSelectionEnabled()) {\n e.preventDefault();\n r.data.bgActivePosistion = undefined;\n this.lastThreeTouch = +new Date();\n if (!r.touchData.selecting) {\n cy.emit({\n originalEvent: e,\n type: 'boxstart',\n position: {\n x: now[0],\n y: now[1]\n }\n });\n }\n r.touchData.selecting = true;\n r.touchData.didSelect = true;\n select[4] = 1;\n if (!select || select.length === 0 || select[0] === undefined) {\n select[0] = (now[0] + now[2] + now[4]) / 3;\n select[1] = (now[1] + now[3] + now[5]) / 3;\n select[2] = (now[0] + now[2] + now[4]) / 3 + 1;\n select[3] = (now[1] + now[3] + now[5]) / 3 + 1;\n } else {\n select[2] = (now[0] + now[2] + now[4]) / 3;\n select[3] = (now[1] + now[3] + now[5]) / 3;\n }\n r.redrawHint('select', true);\n r.redraw();\n\n // pinch to zoom\n } else if (capture && e.touches[1] && !r.touchData.didSelect // don't allow box selection to degrade to pinch-to-zoom\n && cy.zoomingEnabled() && cy.panningEnabled() && cy.userZoomingEnabled() && cy.userPanningEnabled()) {\n // two fingers => pinch to zoom\n e.preventDefault();\n r.data.bgActivePosistion = undefined;\n r.redrawHint('select', true);\n var draggedEles = r.dragData.touchDragEles;\n if (draggedEles) {\n r.redrawHint('drag', true);\n for (var i = 0; i < draggedEles.length; i++) {\n var de_p = draggedEles[i]._private;\n de_p.grabbed = false;\n de_p.rscratch.inDragLayer = false;\n }\n }\n var _start = r.touchData.start;\n\n // (x2, y2) for fingers 1 and 2\n var f1x2 = e.touches[0].clientX - offsetLeft,\n f1y2 = e.touches[0].clientY - offsetTop;\n var f2x2 = e.touches[1].clientX - offsetLeft,\n f2y2 = e.touches[1].clientY - offsetTop;\n var distance2 = distance(f1x2, f1y2, f2x2, f2y2);\n // var distance2Sq = distanceSq( f1x2, f1y2, f2x2, f2y2 );\n // var factor = Math.sqrt( distance2Sq ) / Math.sqrt( distance1Sq );\n var factor = distance2 / distance1;\n if (twoFingersStartInside) {\n // delta finger1\n var df1x = f1x2 - f1x1;\n var df1y = f1y2 - f1y1;\n\n // delta finger 2\n var df2x = f2x2 - f2x1;\n var df2y = f2y2 - f2y1;\n\n // translation is the normalised vector of the two fingers movement\n // i.e. so pinching cancels out and moving together pans\n var tx = (df1x + df2x) / 2;\n var ty = (df1y + df2y) / 2;\n\n // now calculate the zoom\n var zoom1 = cy.zoom();\n var zoom2 = zoom1 * factor;\n var pan1 = cy.pan();\n\n // the model center point converted to the current rendered pos\n var ctrx = modelCenter1[0] * zoom1 + pan1.x;\n var ctry = modelCenter1[1] * zoom1 + pan1.y;\n var pan2 = {\n x: -zoom2 / zoom1 * (ctrx - pan1.x - tx) + ctrx,\n y: -zoom2 / zoom1 * (ctry - pan1.y - ty) + ctry\n };\n\n // remove dragged eles\n if (_start && _start.active()) {\n var draggedEles = r.dragData.touchDragEles;\n freeDraggedElements(draggedEles);\n r.redrawHint('drag', true);\n r.redrawHint('eles', true);\n _start.unactivate().emit('freeon');\n draggedEles.emit('free');\n if (r.dragData.didDrag) {\n _start.emit('dragfreeon');\n draggedEles.emit('dragfree');\n }\n }\n cy.viewport({\n zoom: zoom2,\n pan: pan2,\n cancelOnFailedZoom: true\n });\n cy.emit('pinchzoom');\n distance1 = distance2;\n f1x1 = f1x2;\n f1y1 = f1y2;\n f2x1 = f2x2;\n f2y1 = f2y2;\n r.pinching = true;\n }\n\n // Re-project\n if (e.touches[0]) {\n var pos = r.projectIntoViewport(e.touches[0].clientX, e.touches[0].clientY);\n now[0] = pos[0];\n now[1] = pos[1];\n }\n if (e.touches[1]) {\n var pos = r.projectIntoViewport(e.touches[1].clientX, e.touches[1].clientY);\n now[2] = pos[0];\n now[3] = pos[1];\n }\n if (e.touches[2]) {\n var pos = r.projectIntoViewport(e.touches[2].clientX, e.touches[2].clientY);\n now[4] = pos[0];\n now[5] = pos[1];\n }\n } else if (e.touches[0] && !r.touchData.didSelect // don't allow box selection to degrade to single finger events like panning\n ) {\n var start = r.touchData.start;\n var last = r.touchData.last;\n var near;\n if (!r.hoverData.draggingEles && !r.swipePanning) {\n near = r.findNearestElement(now[0], now[1], true, true);\n }\n if (capture && start != null) {\n e.preventDefault();\n }\n\n // dragging nodes\n if (capture && start != null && r.nodeIsDraggable(start)) {\n if (isOverThresholdDrag) {\n // then dragging can happen\n var draggedEles = r.dragData.touchDragEles;\n var justStartedDrag = !r.dragData.didDrag;\n if (justStartedDrag) {\n addNodesToDrag(draggedEles, {\n inDragLayer: true\n });\n }\n r.dragData.didDrag = true;\n var totalShift = {\n x: 0,\n y: 0\n };\n if (number$1(disp[0]) && number$1(disp[1])) {\n totalShift.x += disp[0];\n totalShift.y += disp[1];\n if (justStartedDrag) {\n r.redrawHint('eles', true);\n var dragDelta = r.touchData.dragDelta;\n if (dragDelta && number$1(dragDelta[0]) && number$1(dragDelta[1])) {\n totalShift.x += dragDelta[0];\n totalShift.y += dragDelta[1];\n }\n }\n }\n r.hoverData.draggingEles = true;\n draggedEles.silentShift(totalShift).emit('position drag');\n r.redrawHint('drag', true);\n if (r.touchData.startPosition[0] == earlier[0] && r.touchData.startPosition[1] == earlier[1]) {\n r.redrawHint('eles', true);\n }\n r.redraw();\n } else {\n // otherwise keep track of drag delta for later\n var dragDelta = r.touchData.dragDelta = r.touchData.dragDelta || [];\n if (dragDelta.length === 0) {\n dragDelta.push(disp[0]);\n dragDelta.push(disp[1]);\n } else {\n dragDelta[0] += disp[0];\n dragDelta[1] += disp[1];\n }\n }\n }\n\n // touchmove\n {\n triggerEvents(start || near, ['touchmove', 'tapdrag', 'vmousemove'], e, {\n x: now[0],\n y: now[1]\n });\n if ((!start || !start.grabbed()) && near != last) {\n if (last) {\n last.emit({\n originalEvent: e,\n type: 'tapdragout',\n position: {\n x: now[0],\n y: now[1]\n }\n });\n }\n if (near) {\n near.emit({\n originalEvent: e,\n type: 'tapdragover',\n position: {\n x: now[0],\n y: now[1]\n }\n });\n }\n }\n r.touchData.last = near;\n }\n\n // check to cancel taphold\n if (capture) {\n for (var i = 0; i < now.length; i++) {\n if (now[i] && r.touchData.startPosition[i] && isOverThresholdDrag) {\n r.touchData.singleTouchMoved = true;\n }\n }\n }\n\n // panning\n if (capture && (start == null || start.pannable()) && cy.panningEnabled() && cy.userPanningEnabled()) {\n var allowPassthrough = allowPanningPassthrough(start, r.touchData.starts);\n if (allowPassthrough) {\n e.preventDefault();\n if (!r.data.bgActivePosistion) {\n r.data.bgActivePosistion = array2point(r.touchData.startPosition);\n }\n if (r.swipePanning) {\n cy.panBy({\n x: disp[0] * zoom,\n y: disp[1] * zoom\n });\n cy.emit('dragpan');\n } else if (isOverThresholdDrag) {\n r.swipePanning = true;\n cy.panBy({\n x: dx * zoom,\n y: dy * zoom\n });\n cy.emit('dragpan');\n if (start) {\n start.unactivate();\n r.redrawHint('select', true);\n r.touchData.start = null;\n }\n }\n }\n\n // Re-project\n var pos = r.projectIntoViewport(e.touches[0].clientX, e.touches[0].clientY);\n now[0] = pos[0];\n now[1] = pos[1];\n }\n }\n for (var j = 0; j < now.length; j++) {\n earlier[j] = now[j];\n }\n\n // the active bg indicator should be removed when making a swipe that is neither for dragging nodes or panning\n if (capture && e.touches.length > 0 && !r.hoverData.draggingEles && !r.swipePanning && r.data.bgActivePosistion != null) {\n r.data.bgActivePosistion = undefined;\n r.redrawHint('select', true);\n r.redraw();\n }\n }, false);\n var touchcancelHandler;\n r.registerBinding(containerWindow, 'touchcancel', touchcancelHandler = function touchcancelHandler(e) {\n // eslint-disable-line no-unused-vars\n var start = r.touchData.start;\n r.touchData.capture = false;\n if (start) {\n start.unactivate();\n }\n });\n var touchendHandler, didDoubleTouch, touchTimeout, prevTouchTimeStamp;\n r.registerBinding(containerWindow, 'touchend', touchendHandler = function touchendHandler(e) {\n // eslint-disable-line no-unused-vars\n var start = r.touchData.start;\n var capture = r.touchData.capture;\n if (capture) {\n if (e.touches.length === 0) {\n r.touchData.capture = false;\n }\n e.preventDefault();\n } else {\n return;\n }\n var select = r.selection;\n r.swipePanning = false;\n r.hoverData.draggingEles = false;\n var cy = r.cy;\n var zoom = cy.zoom();\n var now = r.touchData.now;\n var earlier = r.touchData.earlier;\n if (e.touches[0]) {\n var pos = r.projectIntoViewport(e.touches[0].clientX, e.touches[0].clientY);\n now[0] = pos[0];\n now[1] = pos[1];\n }\n if (e.touches[1]) {\n var pos = r.projectIntoViewport(e.touches[1].clientX, e.touches[1].clientY);\n now[2] = pos[0];\n now[3] = pos[1];\n }\n if (e.touches[2]) {\n var pos = r.projectIntoViewport(e.touches[2].clientX, e.touches[2].clientY);\n now[4] = pos[0];\n now[5] = pos[1];\n }\n if (start) {\n start.unactivate();\n }\n var ctxTapend;\n if (r.touchData.cxt) {\n ctxTapend = {\n originalEvent: e,\n type: 'cxttapend',\n position: {\n x: now[0],\n y: now[1]\n }\n };\n if (start) {\n start.emit(ctxTapend);\n } else {\n cy.emit(ctxTapend);\n }\n if (!r.touchData.cxtDragged) {\n var ctxTap = {\n originalEvent: e,\n type: 'cxttap',\n position: {\n x: now[0],\n y: now[1]\n }\n };\n if (start) {\n start.emit(ctxTap);\n } else {\n cy.emit(ctxTap);\n }\n }\n if (r.touchData.start) {\n r.touchData.start._private.grabbed = false;\n }\n r.touchData.cxt = false;\n r.touchData.start = null;\n r.redraw();\n return;\n }\n\n // no more box selection if we don't have three fingers\n if (!e.touches[2] && cy.boxSelectionEnabled() && r.touchData.selecting) {\n r.touchData.selecting = false;\n var box = cy.collection(r.getAllInBox(select[0], select[1], select[2], select[3]));\n select[0] = undefined;\n select[1] = undefined;\n select[2] = undefined;\n select[3] = undefined;\n select[4] = 0;\n r.redrawHint('select', true);\n cy.emit({\n type: 'boxend',\n originalEvent: e,\n position: {\n x: now[0],\n y: now[1]\n }\n });\n var eleWouldBeSelected = function eleWouldBeSelected(ele) {\n return ele.selectable() && !ele.selected();\n };\n box.emit('box').stdFilter(eleWouldBeSelected).select().emit('boxselect');\n if (box.nonempty()) {\n r.redrawHint('eles', true);\n }\n r.redraw();\n }\n if (start != null) {\n start.unactivate();\n }\n if (e.touches[2]) {\n r.data.bgActivePosistion = undefined;\n r.redrawHint('select', true);\n } else if (e.touches[1]) ; else if (e.touches[0]) ; else if (!e.touches[0]) {\n r.data.bgActivePosistion = undefined;\n r.redrawHint('select', true);\n var draggedEles = r.dragData.touchDragEles;\n if (start != null) {\n var startWasGrabbed = start._private.grabbed;\n freeDraggedElements(draggedEles);\n r.redrawHint('drag', true);\n r.redrawHint('eles', true);\n if (startWasGrabbed) {\n start.emit('freeon');\n draggedEles.emit('free');\n if (r.dragData.didDrag) {\n start.emit('dragfreeon');\n draggedEles.emit('dragfree');\n }\n }\n triggerEvents(start, ['touchend', 'tapend', 'vmouseup', 'tapdragout'], e, {\n x: now[0],\n y: now[1]\n });\n start.unactivate();\n r.touchData.start = null;\n } else {\n var near = r.findNearestElement(now[0], now[1], true, true);\n triggerEvents(near, ['touchend', 'tapend', 'vmouseup', 'tapdragout'], e, {\n x: now[0],\n y: now[1]\n });\n }\n var dx = r.touchData.startPosition[0] - now[0];\n var dx2 = dx * dx;\n var dy = r.touchData.startPosition[1] - now[1];\n var dy2 = dy * dy;\n var dist2 = dx2 + dy2;\n var rdist2 = dist2 * zoom * zoom;\n\n // Tap event, roughly same as mouse click event for touch\n if (!r.touchData.singleTouchMoved) {\n if (!start) {\n cy.$(':selected').unselect(['tapunselect']);\n }\n triggerEvents(start, ['tap', 'vclick'], e, {\n x: now[0],\n y: now[1]\n });\n didDoubleTouch = false;\n if (e.timeStamp - prevTouchTimeStamp <= cy.multiClickDebounceTime()) {\n touchTimeout && clearTimeout(touchTimeout);\n didDoubleTouch = true;\n prevTouchTimeStamp = null;\n triggerEvents(start, ['dbltap', 'vdblclick'], e, {\n x: now[0],\n y: now[1]\n });\n } else {\n touchTimeout = setTimeout(function () {\n if (didDoubleTouch) return;\n triggerEvents(start, ['onetap', 'voneclick'], e, {\n x: now[0],\n y: now[1]\n });\n }, cy.multiClickDebounceTime());\n prevTouchTimeStamp = e.timeStamp;\n }\n }\n\n // Prepare to select the currently touched node, only if it hasn't been dragged past a certain distance\n if (start != null && !r.dragData.didDrag // didn't drag nodes around\n && start._private.selectable && rdist2 < r.touchTapThreshold2 && !r.pinching // pinch to zoom should not affect selection\n ) {\n if (cy.selectionType() === 'single') {\n cy.$(isSelected).unmerge(start).unselect(['tapunselect']);\n start.select(['tapselect']);\n } else {\n if (start.selected()) {\n start.unselect(['tapunselect']);\n } else {\n start.select(['tapselect']);\n }\n }\n r.redrawHint('eles', true);\n }\n r.touchData.singleTouchMoved = true;\n }\n for (var j = 0; j < now.length; j++) {\n earlier[j] = now[j];\n }\n r.dragData.didDrag = false; // reset for next touchstart\n\n if (e.touches.length === 0) {\n r.touchData.dragDelta = [];\n r.touchData.startPosition = [null, null, null, null, null, null];\n r.touchData.startGPosition = null;\n r.touchData.didSelect = false;\n }\n if (e.touches.length < 2) {\n if (e.touches.length === 1) {\n // the old start global pos'n may not be the same finger that remains\n r.touchData.startGPosition = [e.touches[0].clientX, e.touches[0].clientY];\n }\n r.pinching = false;\n r.redrawHint('eles', true);\n r.redraw();\n }\n\n //r.redraw();\n }, false);\n\n // fallback compatibility layer for ms pointer events\n if (typeof TouchEvent === 'undefined') {\n var pointers = [];\n var makeTouch = function makeTouch(e) {\n return {\n clientX: e.clientX,\n clientY: e.clientY,\n force: 1,\n identifier: e.pointerId,\n pageX: e.pageX,\n pageY: e.pageY,\n radiusX: e.width / 2,\n radiusY: e.height / 2,\n screenX: e.screenX,\n screenY: e.screenY,\n target: e.target\n };\n };\n var makePointer = function makePointer(e) {\n return {\n event: e,\n touch: makeTouch(e)\n };\n };\n var addPointer = function addPointer(e) {\n pointers.push(makePointer(e));\n };\n var removePointer = function removePointer(e) {\n for (var i = 0; i < pointers.length; i++) {\n var p = pointers[i];\n if (p.event.pointerId === e.pointerId) {\n pointers.splice(i, 1);\n return;\n }\n }\n };\n var updatePointer = function updatePointer(e) {\n var p = pointers.filter(function (p) {\n return p.event.pointerId === e.pointerId;\n })[0];\n p.event = e;\n p.touch = makeTouch(e);\n };\n var addTouchesToEvent = function addTouchesToEvent(e) {\n e.touches = pointers.map(function (p) {\n return p.touch;\n });\n };\n var pointerIsMouse = function pointerIsMouse(e) {\n return e.pointerType === 'mouse' || e.pointerType === 4;\n };\n r.registerBinding(r.container, 'pointerdown', function (e) {\n if (pointerIsMouse(e)) {\n return;\n } // mouse already handled\n\n e.preventDefault();\n addPointer(e);\n addTouchesToEvent(e);\n touchstartHandler(e);\n });\n r.registerBinding(r.container, 'pointerup', function (e) {\n if (pointerIsMouse(e)) {\n return;\n } // mouse already handled\n\n removePointer(e);\n addTouchesToEvent(e);\n touchendHandler(e);\n });\n r.registerBinding(r.container, 'pointercancel', function (e) {\n if (pointerIsMouse(e)) {\n return;\n } // mouse already handled\n\n removePointer(e);\n addTouchesToEvent(e);\n touchcancelHandler(e);\n });\n r.registerBinding(r.container, 'pointermove', function (e) {\n if (pointerIsMouse(e)) {\n return;\n } // mouse already handled\n\n e.preventDefault();\n updatePointer(e);\n addTouchesToEvent(e);\n touchmoveHandler(e);\n });\n }\n};\n\nvar BRp$2 = {};\nBRp$2.generatePolygon = function (name, points) {\n return this.nodeShapes[name] = {\n renderer: this,\n name: name,\n points: points,\n draw: function draw(context, centerX, centerY, width, height, cornerRadius) {\n this.renderer.nodeShapeImpl('polygon', context, centerX, centerY, width, height, this.points);\n },\n intersectLine: function intersectLine(nodeX, nodeY, width, height, x, y, padding, cornerRadius) {\n return polygonIntersectLine(x, y, this.points, nodeX, nodeY, width / 2, height / 2, padding);\n },\n checkPoint: function checkPoint(x, y, padding, width, height, centerX, centerY, cornerRadius) {\n return pointInsidePolygon(x, y, this.points, centerX, centerY, width, height, [0, -1], padding);\n }\n };\n};\nBRp$2.generateEllipse = function () {\n return this.nodeShapes['ellipse'] = {\n renderer: this,\n name: 'ellipse',\n draw: function draw(context, centerX, centerY, width, height, cornerRadius) {\n this.renderer.nodeShapeImpl(this.name, context, centerX, centerY, width, height);\n },\n intersectLine: function intersectLine(nodeX, nodeY, width, height, x, y, padding, cornerRadius) {\n return intersectLineEllipse(x, y, nodeX, nodeY, width / 2 + padding, height / 2 + padding);\n },\n checkPoint: function checkPoint(x, y, padding, width, height, centerX, centerY, cornerRadius) {\n return checkInEllipse(x, y, width, height, centerX, centerY, padding);\n }\n };\n};\nBRp$2.generateRoundPolygon = function (name, points) {\n return this.nodeShapes[name] = {\n renderer: this,\n name: name,\n points: points,\n getOrCreateCorners: function getOrCreateCorners(centerX, centerY, width, height, cornerRadius, rs, field) {\n if (rs[field] !== undefined && rs[field + '-cx'] === centerX && rs[field + '-cy'] === centerY) {\n return rs[field];\n }\n rs[field] = new Array(points.length / 2);\n rs[field + '-cx'] = centerX;\n rs[field + '-cy'] = centerY;\n var halfW = width / 2;\n var halfH = height / 2;\n cornerRadius = cornerRadius === 'auto' ? getRoundPolygonRadius(width, height) : cornerRadius;\n var p = new Array(points.length / 2);\n for (var _i = 0; _i < points.length / 2; _i++) {\n p[_i] = {\n x: centerX + halfW * points[_i * 2],\n y: centerY + halfH * points[_i * 2 + 1]\n };\n }\n var i,\n p1,\n p2,\n p3,\n len = p.length;\n p1 = p[len - 1];\n // for each point\n for (i = 0; i < len; i++) {\n p2 = p[i % len];\n p3 = p[(i + 1) % len];\n rs[field][i] = getRoundCorner(p1, p2, p3, cornerRadius);\n p1 = p2;\n p2 = p3;\n }\n return rs[field];\n },\n draw: function draw(context, centerX, centerY, width, height, cornerRadius, rs) {\n this.renderer.nodeShapeImpl('round-polygon', context, centerX, centerY, width, height, this.points, this.getOrCreateCorners(centerX, centerY, width, height, cornerRadius, rs, 'drawCorners'));\n },\n intersectLine: function intersectLine(nodeX, nodeY, width, height, x, y, padding, cornerRadius, rs) {\n return roundPolygonIntersectLine(x, y, this.points, nodeX, nodeY, width, height, padding, this.getOrCreateCorners(nodeX, nodeY, width, height, cornerRadius, rs, 'corners'));\n },\n checkPoint: function checkPoint(x, y, padding, width, height, centerX, centerY, cornerRadius, rs) {\n return pointInsideRoundPolygon(x, y, this.points, centerX, centerY, width, height, this.getOrCreateCorners(centerX, centerY, width, height, cornerRadius, rs, 'corners'));\n }\n };\n};\nBRp$2.generateRoundRectangle = function () {\n return this.nodeShapes['round-rectangle'] = this.nodeShapes['roundrectangle'] = {\n renderer: this,\n name: 'round-rectangle',\n points: generateUnitNgonPointsFitToSquare(4, 0),\n draw: function draw(context, centerX, centerY, width, height, cornerRadius) {\n this.renderer.nodeShapeImpl(this.name, context, centerX, centerY, width, height, this.points, cornerRadius);\n },\n intersectLine: function intersectLine(nodeX, nodeY, width, height, x, y, padding, cornerRadius) {\n return roundRectangleIntersectLine(x, y, nodeX, nodeY, width, height, padding, cornerRadius);\n },\n checkPoint: function checkPoint(x, y, padding, width, height, centerX, centerY, cornerRadius) {\n var halfWidth = width / 2;\n var halfHeight = height / 2;\n cornerRadius = cornerRadius === 'auto' ? getRoundRectangleRadius(width, height) : cornerRadius;\n cornerRadius = Math.min(halfWidth, halfHeight, cornerRadius);\n var diam = cornerRadius * 2;\n\n // Check hBox\n if (pointInsidePolygon(x, y, this.points, centerX, centerY, width, height - diam, [0, -1], padding)) {\n return true;\n }\n\n // Check vBox\n if (pointInsidePolygon(x, y, this.points, centerX, centerY, width - diam, height, [0, -1], padding)) {\n return true;\n }\n\n // Check top left quarter circle\n if (checkInEllipse(x, y, diam, diam, centerX - halfWidth + cornerRadius, centerY - halfHeight + cornerRadius, padding)) {\n return true;\n }\n\n // Check top right quarter circle\n if (checkInEllipse(x, y, diam, diam, centerX + halfWidth - cornerRadius, centerY - halfHeight + cornerRadius, padding)) {\n return true;\n }\n\n // Check bottom right quarter circle\n if (checkInEllipse(x, y, diam, diam, centerX + halfWidth - cornerRadius, centerY + halfHeight - cornerRadius, padding)) {\n return true;\n }\n\n // Check bottom left quarter circle\n if (checkInEllipse(x, y, diam, diam, centerX - halfWidth + cornerRadius, centerY + halfHeight - cornerRadius, padding)) {\n return true;\n }\n return false;\n }\n };\n};\nBRp$2.generateCutRectangle = function () {\n return this.nodeShapes['cut-rectangle'] = this.nodeShapes['cutrectangle'] = {\n renderer: this,\n name: 'cut-rectangle',\n cornerLength: getCutRectangleCornerLength(),\n points: generateUnitNgonPointsFitToSquare(4, 0),\n draw: function draw(context, centerX, centerY, width, height, cornerRadius) {\n this.renderer.nodeShapeImpl(this.name, context, centerX, centerY, width, height, null, cornerRadius);\n },\n generateCutTrianglePts: function generateCutTrianglePts(width, height, centerX, centerY, cornerRadius) {\n var cl = cornerRadius === 'auto' ? this.cornerLength : cornerRadius;\n var hh = height / 2;\n var hw = width / 2;\n var xBegin = centerX - hw;\n var xEnd = centerX + hw;\n var yBegin = centerY - hh;\n var yEnd = centerY + hh;\n\n // points are in clockwise order, inner (imaginary) triangle pt on [4, 5]\n return {\n topLeft: [xBegin, yBegin + cl, xBegin + cl, yBegin, xBegin + cl, yBegin + cl],\n topRight: [xEnd - cl, yBegin, xEnd, yBegin + cl, xEnd - cl, yBegin + cl],\n bottomRight: [xEnd, yEnd - cl, xEnd - cl, yEnd, xEnd - cl, yEnd - cl],\n bottomLeft: [xBegin + cl, yEnd, xBegin, yEnd - cl, xBegin + cl, yEnd - cl]\n };\n },\n intersectLine: function intersectLine(nodeX, nodeY, width, height, x, y, padding, cornerRadius) {\n var cPts = this.generateCutTrianglePts(width + 2 * padding, height + 2 * padding, nodeX, nodeY, cornerRadius);\n var pts = [].concat.apply([], [cPts.topLeft.splice(0, 4), cPts.topRight.splice(0, 4), cPts.bottomRight.splice(0, 4), cPts.bottomLeft.splice(0, 4)]);\n return polygonIntersectLine(x, y, pts, nodeX, nodeY);\n },\n checkPoint: function checkPoint(x, y, padding, width, height, centerX, centerY, cornerRadius) {\n var cl = cornerRadius === 'auto' ? this.cornerLength : cornerRadius;\n // Check hBox\n if (pointInsidePolygon(x, y, this.points, centerX, centerY, width, height - 2 * cl, [0, -1], padding)) {\n return true;\n }\n\n // Check vBox\n if (pointInsidePolygon(x, y, this.points, centerX, centerY, width - 2 * cl, height, [0, -1], padding)) {\n return true;\n }\n var cutTrianglePts = this.generateCutTrianglePts(width, height, centerX, centerY);\n return pointInsidePolygonPoints(x, y, cutTrianglePts.topLeft) || pointInsidePolygonPoints(x, y, cutTrianglePts.topRight) || pointInsidePolygonPoints(x, y, cutTrianglePts.bottomRight) || pointInsidePolygonPoints(x, y, cutTrianglePts.bottomLeft);\n }\n };\n};\nBRp$2.generateBarrel = function () {\n return this.nodeShapes['barrel'] = {\n renderer: this,\n name: 'barrel',\n points: generateUnitNgonPointsFitToSquare(4, 0),\n draw: function draw(context, centerX, centerY, width, height, cornerRadius) {\n this.renderer.nodeShapeImpl(this.name, context, centerX, centerY, width, height);\n },\n intersectLine: function intersectLine(nodeX, nodeY, width, height, x, y, padding, cornerRadius) {\n // use two fixed t values for the bezier curve approximation\n\n var t0 = 0.15;\n var t1 = 0.5;\n var t2 = 0.85;\n var bPts = this.generateBarrelBezierPts(width + 2 * padding, height + 2 * padding, nodeX, nodeY);\n var approximateBarrelCurvePts = function approximateBarrelCurvePts(pts) {\n // approximate curve pts based on the two t values\n var m0 = qbezierPtAt({\n x: pts[0],\n y: pts[1]\n }, {\n x: pts[2],\n y: pts[3]\n }, {\n x: pts[4],\n y: pts[5]\n }, t0);\n var m1 = qbezierPtAt({\n x: pts[0],\n y: pts[1]\n }, {\n x: pts[2],\n y: pts[3]\n }, {\n x: pts[4],\n y: pts[5]\n }, t1);\n var m2 = qbezierPtAt({\n x: pts[0],\n y: pts[1]\n }, {\n x: pts[2],\n y: pts[3]\n }, {\n x: pts[4],\n y: pts[5]\n }, t2);\n return [pts[0], pts[1], m0.x, m0.y, m1.x, m1.y, m2.x, m2.y, pts[4], pts[5]];\n };\n var pts = [].concat(approximateBarrelCurvePts(bPts.topLeft), approximateBarrelCurvePts(bPts.topRight), approximateBarrelCurvePts(bPts.bottomRight), approximateBarrelCurvePts(bPts.bottomLeft));\n return polygonIntersectLine(x, y, pts, nodeX, nodeY);\n },\n generateBarrelBezierPts: function generateBarrelBezierPts(width, height, centerX, centerY) {\n var hh = height / 2;\n var hw = width / 2;\n var xBegin = centerX - hw;\n var xEnd = centerX + hw;\n var yBegin = centerY - hh;\n var yEnd = centerY + hh;\n var curveConstants = getBarrelCurveConstants(width, height);\n var hOffset = curveConstants.heightOffset;\n var wOffset = curveConstants.widthOffset;\n var ctrlPtXOffset = curveConstants.ctrlPtOffsetPct * width;\n\n // points are in clockwise order, inner (imaginary) control pt on [4, 5]\n var pts = {\n topLeft: [xBegin, yBegin + hOffset, xBegin + ctrlPtXOffset, yBegin, xBegin + wOffset, yBegin],\n topRight: [xEnd - wOffset, yBegin, xEnd - ctrlPtXOffset, yBegin, xEnd, yBegin + hOffset],\n bottomRight: [xEnd, yEnd - hOffset, xEnd - ctrlPtXOffset, yEnd, xEnd - wOffset, yEnd],\n bottomLeft: [xBegin + wOffset, yEnd, xBegin + ctrlPtXOffset, yEnd, xBegin, yEnd - hOffset]\n };\n pts.topLeft.isTop = true;\n pts.topRight.isTop = true;\n pts.bottomLeft.isBottom = true;\n pts.bottomRight.isBottom = true;\n return pts;\n },\n checkPoint: function checkPoint(x, y, padding, width, height, centerX, centerY, cornerRadius) {\n var curveConstants = getBarrelCurveConstants(width, height);\n var hOffset = curveConstants.heightOffset;\n var wOffset = curveConstants.widthOffset;\n\n // Check hBox\n if (pointInsidePolygon(x, y, this.points, centerX, centerY, width, height - 2 * hOffset, [0, -1], padding)) {\n return true;\n }\n\n // Check vBox\n if (pointInsidePolygon(x, y, this.points, centerX, centerY, width - 2 * wOffset, height, [0, -1], padding)) {\n return true;\n }\n var barrelCurvePts = this.generateBarrelBezierPts(width, height, centerX, centerY);\n var getCurveT = function getCurveT(x, y, curvePts) {\n var x0 = curvePts[4];\n var x1 = curvePts[2];\n var x2 = curvePts[0];\n var y0 = curvePts[5];\n // var y1 = curvePts[ 3 ];\n var y2 = curvePts[1];\n var xMin = Math.min(x0, x2);\n var xMax = Math.max(x0, x2);\n var yMin = Math.min(y0, y2);\n var yMax = Math.max(y0, y2);\n if (xMin <= x && x <= xMax && yMin <= y && y <= yMax) {\n var coeff = bezierPtsToQuadCoeff(x0, x1, x2);\n var roots = solveQuadratic(coeff[0], coeff[1], coeff[2], x);\n var validRoots = roots.filter(function (r) {\n return 0 <= r && r <= 1;\n });\n if (validRoots.length > 0) {\n return validRoots[0];\n }\n }\n return null;\n };\n var curveRegions = Object.keys(barrelCurvePts);\n for (var i = 0; i < curveRegions.length; i++) {\n var corner = curveRegions[i];\n var cornerPts = barrelCurvePts[corner];\n var t = getCurveT(x, y, cornerPts);\n if (t == null) {\n continue;\n }\n var y0 = cornerPts[5];\n var y1 = cornerPts[3];\n var y2 = cornerPts[1];\n var bezY = qbezierAt(y0, y1, y2, t);\n if (cornerPts.isTop && bezY <= y) {\n return true;\n }\n if (cornerPts.isBottom && y <= bezY) {\n return true;\n }\n }\n return false;\n }\n };\n};\nBRp$2.generateBottomRoundrectangle = function () {\n return this.nodeShapes['bottom-round-rectangle'] = this.nodeShapes['bottomroundrectangle'] = {\n renderer: this,\n name: 'bottom-round-rectangle',\n points: generateUnitNgonPointsFitToSquare(4, 0),\n draw: function draw(context, centerX, centerY, width, height, cornerRadius) {\n this.renderer.nodeShapeImpl(this.name, context, centerX, centerY, width, height, this.points, cornerRadius);\n },\n intersectLine: function intersectLine(nodeX, nodeY, width, height, x, y, padding, cornerRadius) {\n var topStartX = nodeX - (width / 2 + padding);\n var topStartY = nodeY - (height / 2 + padding);\n var topEndY = topStartY;\n var topEndX = nodeX + (width / 2 + padding);\n var topIntersections = finiteLinesIntersect(x, y, nodeX, nodeY, topStartX, topStartY, topEndX, topEndY, false);\n if (topIntersections.length > 0) {\n return topIntersections;\n }\n return roundRectangleIntersectLine(x, y, nodeX, nodeY, width, height, padding, cornerRadius);\n },\n checkPoint: function checkPoint(x, y, padding, width, height, centerX, centerY, cornerRadius) {\n cornerRadius = cornerRadius === 'auto' ? getRoundRectangleRadius(width, height) : cornerRadius;\n var diam = 2 * cornerRadius;\n\n // Check hBox\n if (pointInsidePolygon(x, y, this.points, centerX, centerY, width, height - diam, [0, -1], padding)) {\n return true;\n }\n\n // Check vBox\n if (pointInsidePolygon(x, y, this.points, centerX, centerY, width - diam, height, [0, -1], padding)) {\n return true;\n }\n\n // check non-rounded top side\n var outerWidth = width / 2 + 2 * padding;\n var outerHeight = height / 2 + 2 * padding;\n var points = [centerX - outerWidth, centerY - outerHeight, centerX - outerWidth, centerY, centerX + outerWidth, centerY, centerX + outerWidth, centerY - outerHeight];\n if (pointInsidePolygonPoints(x, y, points)) {\n return true;\n }\n\n // Check bottom right quarter circle\n if (checkInEllipse(x, y, diam, diam, centerX + width / 2 - cornerRadius, centerY + height / 2 - cornerRadius, padding)) {\n return true;\n }\n\n // Check bottom left quarter circle\n if (checkInEllipse(x, y, diam, diam, centerX - width / 2 + cornerRadius, centerY + height / 2 - cornerRadius, padding)) {\n return true;\n }\n return false;\n }\n };\n};\nBRp$2.registerNodeShapes = function () {\n var nodeShapes = this.nodeShapes = {};\n var renderer = this;\n this.generateEllipse();\n this.generatePolygon('triangle', generateUnitNgonPointsFitToSquare(3, 0));\n this.generateRoundPolygon('round-triangle', generateUnitNgonPointsFitToSquare(3, 0));\n this.generatePolygon('rectangle', generateUnitNgonPointsFitToSquare(4, 0));\n nodeShapes['square'] = nodeShapes['rectangle'];\n this.generateRoundRectangle();\n this.generateCutRectangle();\n this.generateBarrel();\n this.generateBottomRoundrectangle();\n {\n var diamondPoints = [0, 1, 1, 0, 0, -1, -1, 0];\n this.generatePolygon('diamond', diamondPoints);\n this.generateRoundPolygon('round-diamond', diamondPoints);\n }\n this.generatePolygon('pentagon', generateUnitNgonPointsFitToSquare(5, 0));\n this.generateRoundPolygon('round-pentagon', generateUnitNgonPointsFitToSquare(5, 0));\n this.generatePolygon('hexagon', generateUnitNgonPointsFitToSquare(6, 0));\n this.generateRoundPolygon('round-hexagon', generateUnitNgonPointsFitToSquare(6, 0));\n this.generatePolygon('heptagon', generateUnitNgonPointsFitToSquare(7, 0));\n this.generateRoundPolygon('round-heptagon', generateUnitNgonPointsFitToSquare(7, 0));\n this.generatePolygon('octagon', generateUnitNgonPointsFitToSquare(8, 0));\n this.generateRoundPolygon('round-octagon', generateUnitNgonPointsFitToSquare(8, 0));\n var star5Points = new Array(20);\n {\n var outerPoints = generateUnitNgonPoints(5, 0);\n var innerPoints = generateUnitNgonPoints(5, Math.PI / 5);\n\n // Outer radius is 1; inner radius of star is smaller\n var innerRadius = 0.5 * (3 - Math.sqrt(5));\n innerRadius *= 1.57;\n for (var i = 0; i < innerPoints.length / 2; i++) {\n innerPoints[i * 2] *= innerRadius;\n innerPoints[i * 2 + 1] *= innerRadius;\n }\n for (var i = 0; i < 20 / 4; i++) {\n star5Points[i * 4] = outerPoints[i * 2];\n star5Points[i * 4 + 1] = outerPoints[i * 2 + 1];\n star5Points[i * 4 + 2] = innerPoints[i * 2];\n star5Points[i * 4 + 3] = innerPoints[i * 2 + 1];\n }\n }\n star5Points = fitPolygonToSquare(star5Points);\n this.generatePolygon('star', star5Points);\n this.generatePolygon('vee', [-1, -1, 0, -0.333, 1, -1, 0, 1]);\n this.generatePolygon('rhomboid', [-1, -1, 0.333, -1, 1, 1, -0.333, 1]);\n this.generatePolygon('right-rhomboid', [-0.333, -1, 1, -1, 0.333, 1, -1, 1]);\n this.nodeShapes['concavehexagon'] = this.generatePolygon('concave-hexagon', [-1, -0.95, -0.75, 0, -1, 0.95, 1, 0.95, 0.75, 0, 1, -0.95]);\n {\n var tagPoints = [-1, -1, 0.25, -1, 1, 0, 0.25, 1, -1, 1];\n this.generatePolygon('tag', tagPoints);\n this.generateRoundPolygon('round-tag', tagPoints);\n }\n nodeShapes.makePolygon = function (points) {\n // use caching on user-specified polygons so they are as fast as native shapes\n\n var key = points.join('$');\n var name = 'polygon-' + key;\n var shape;\n if (shape = this[name]) {\n // got cached shape\n return shape;\n }\n\n // create and cache new shape\n return renderer.generatePolygon(name, points);\n };\n};\n\nvar BRp$1 = {};\nBRp$1.timeToRender = function () {\n return this.redrawTotalTime / this.redrawCount;\n};\nBRp$1.redraw = function (options) {\n options = options || staticEmptyObject();\n var r = this;\n if (r.averageRedrawTime === undefined) {\n r.averageRedrawTime = 0;\n }\n if (r.lastRedrawTime === undefined) {\n r.lastRedrawTime = 0;\n }\n if (r.lastDrawTime === undefined) {\n r.lastDrawTime = 0;\n }\n r.requestedFrame = true;\n r.renderOptions = options;\n};\nBRp$1.beforeRender = function (fn, priority) {\n // the renderer can't add tick callbacks when destroyed\n if (this.destroyed) {\n return;\n }\n if (priority == null) {\n error('Priority is not optional for beforeRender');\n }\n var cbs = this.beforeRenderCallbacks;\n cbs.push({\n fn: fn,\n priority: priority\n });\n\n // higher priority callbacks executed first\n cbs.sort(function (a, b) {\n return b.priority - a.priority;\n });\n};\nvar beforeRenderCallbacks = function beforeRenderCallbacks(r, willDraw, startTime) {\n var cbs = r.beforeRenderCallbacks;\n for (var i = 0; i < cbs.length; i++) {\n cbs[i].fn(willDraw, startTime);\n }\n};\nBRp$1.startRenderLoop = function () {\n var r = this;\n var cy = r.cy;\n if (r.renderLoopStarted) {\n return;\n } else {\n r.renderLoopStarted = true;\n }\n var _renderFn = function renderFn(requestTime) {\n if (r.destroyed) {\n return;\n }\n if (cy.batching()) ; else if (r.requestedFrame && !r.skipFrame) {\n beforeRenderCallbacks(r, true, requestTime);\n var startTime = performanceNow();\n r.render(r.renderOptions);\n var endTime = r.lastDrawTime = performanceNow();\n if (r.averageRedrawTime === undefined) {\n r.averageRedrawTime = endTime - startTime;\n }\n if (r.redrawCount === undefined) {\n r.redrawCount = 0;\n }\n r.redrawCount++;\n if (r.redrawTotalTime === undefined) {\n r.redrawTotalTime = 0;\n }\n var duration = endTime - startTime;\n r.redrawTotalTime += duration;\n r.lastRedrawTime = duration;\n\n // use a weighted average with a bias from the previous average so we don't spike so easily\n r.averageRedrawTime = r.averageRedrawTime / 2 + duration / 2;\n r.requestedFrame = false;\n } else {\n beforeRenderCallbacks(r, false, requestTime);\n }\n r.skipFrame = false;\n requestAnimationFrame(_renderFn);\n };\n requestAnimationFrame(_renderFn);\n};\n\nvar BaseRenderer = function BaseRenderer(options) {\n this.init(options);\n};\nvar BR = BaseRenderer;\nvar BRp = BR.prototype;\nBRp.clientFunctions = ['redrawHint', 'render', 'renderTo', 'matchCanvasSize', 'nodeShapeImpl', 'arrowShapeImpl'];\nBRp.init = function (options) {\n var r = this;\n r.options = options;\n r.cy = options.cy;\n var ctr = r.container = options.cy.container();\n var containerWindow = r.cy.window();\n\n // prepend a stylesheet in the head such that\n if (containerWindow) {\n var document = containerWindow.document;\n var head = document.head;\n var stylesheetId = '__________cytoscape_stylesheet';\n var className = '__________cytoscape_container';\n var stylesheetAlreadyExists = document.getElementById(stylesheetId) != null;\n if (ctr.className.indexOf(className) < 0) {\n ctr.className = (ctr.className || '') + ' ' + className;\n }\n if (!stylesheetAlreadyExists) {\n var stylesheet = document.createElement('style');\n stylesheet.id = stylesheetId;\n stylesheet.textContent = '.' + className + ' { position: relative; }';\n head.insertBefore(stylesheet, head.children[0]); // first so lowest priority\n }\n var computedStyle = containerWindow.getComputedStyle(ctr);\n var position = computedStyle.getPropertyValue('position');\n if (position === 'static') {\n warn('A Cytoscape container has style position:static and so can not use UI extensions properly');\n }\n }\n r.selection = [undefined, undefined, undefined, undefined, 0]; // Coordinates for selection box, plus enabled flag\n\n r.bezierProjPcts = [0.05, 0.225, 0.4, 0.5, 0.6, 0.775, 0.95];\n\n //--Pointer-related data\n r.hoverData = {\n down: null,\n last: null,\n downTime: null,\n triggerMode: null,\n dragging: false,\n initialPan: [null, null],\n capture: false\n };\n r.dragData = {\n possibleDragElements: []\n };\n r.touchData = {\n start: null,\n capture: false,\n // These 3 fields related to tap, taphold events\n startPosition: [null, null, null, null, null, null],\n singleTouchStartTime: null,\n singleTouchMoved: true,\n now: [null, null, null, null, null, null],\n earlier: [null, null, null, null, null, null]\n };\n r.redraws = 0;\n r.showFps = options.showFps;\n r.debug = options.debug;\n r.webgl = options.webgl;\n r.hideEdgesOnViewport = options.hideEdgesOnViewport;\n r.textureOnViewport = options.textureOnViewport;\n r.wheelSensitivity = options.wheelSensitivity;\n r.motionBlurEnabled = options.motionBlur; // on by default\n r.forcedPixelRatio = number$1(options.pixelRatio) ? options.pixelRatio : null;\n r.motionBlur = options.motionBlur; // for initial kick off\n r.motionBlurOpacity = options.motionBlurOpacity;\n r.motionBlurTransparency = 1 - r.motionBlurOpacity;\n r.motionBlurPxRatio = 1;\n r.mbPxRBlurry = 1; //0.8;\n r.minMbLowQualFrames = 4;\n r.fullQualityMb = false;\n r.clearedForMotionBlur = [];\n r.desktopTapThreshold = options.desktopTapThreshold;\n r.desktopTapThreshold2 = options.desktopTapThreshold * options.desktopTapThreshold;\n r.touchTapThreshold = options.touchTapThreshold;\n r.touchTapThreshold2 = options.touchTapThreshold * options.touchTapThreshold;\n r.tapholdDuration = 500;\n r.bindings = [];\n r.beforeRenderCallbacks = [];\n r.beforeRenderPriorities = {\n // higher priority execs before lower one\n animations: 400,\n eleCalcs: 300,\n eleTxrDeq: 200,\n lyrTxrDeq: 150,\n lyrTxrSkip: 100\n };\n r.registerNodeShapes();\n r.registerArrowShapes();\n r.registerCalculationListeners();\n};\nBRp.notify = function (eventName, eles) {\n var r = this;\n var cy = r.cy;\n\n // the renderer can't be notified after it's destroyed\n if (this.destroyed) {\n return;\n }\n if (eventName === 'init') {\n r.load();\n return;\n }\n if (eventName === 'destroy') {\n r.destroy();\n return;\n }\n if (eventName === 'add' || eventName === 'remove' || eventName === 'move' && cy.hasCompoundNodes() || eventName === 'load' || eventName === 'zorder' || eventName === 'mount') {\n r.invalidateCachedZSortedEles();\n }\n if (eventName === 'viewport') {\n r.redrawHint('select', true);\n }\n if (eventName === 'gc') {\n r.redrawHint('gc', true);\n }\n if (eventName === 'load' || eventName === 'resize' || eventName === 'mount') {\n r.invalidateContainerClientCoordsCache();\n r.matchCanvasSize(r.container);\n }\n r.redrawHint('eles', true);\n r.redrawHint('drag', true);\n this.startRenderLoop();\n this.redraw();\n};\nBRp.destroy = function () {\n var r = this;\n r.destroyed = true;\n r.cy.stopAnimationLoop();\n for (var i = 0; i < r.bindings.length; i++) {\n var binding = r.bindings[i];\n var b = binding;\n var tgt = b.target;\n (tgt.off || tgt.removeEventListener).apply(tgt, b.args);\n }\n r.bindings = [];\n r.beforeRenderCallbacks = [];\n r.onUpdateEleCalcsFns = [];\n if (r.removeObserver) {\n r.removeObserver.disconnect();\n }\n if (r.styleObserver) {\n r.styleObserver.disconnect();\n }\n if (r.resizeObserver) {\n r.resizeObserver.disconnect();\n }\n if (r.labelCalcDiv) {\n try {\n document.body.removeChild(r.labelCalcDiv); // eslint-disable-line no-undef\n } catch (e) {\n // ie10 issue #1014\n }\n }\n};\nBRp.isHeadless = function () {\n return false;\n};\n[BRp$f, BRp$5, BRp$4, BRp$3, BRp$2, BRp$1].forEach(function (props) {\n extend(BRp, props);\n});\n\nvar fullFpsTime = 1000 / 60; // assume 60 frames per second\n\nvar defs = {\n setupDequeueing: function setupDequeueing(opts) {\n return function setupDequeueingImpl() {\n var self = this;\n var r = this.renderer;\n if (self.dequeueingSetup) {\n return;\n } else {\n self.dequeueingSetup = true;\n }\n var queueRedraw = debounce(function () {\n r.redrawHint('eles', true);\n r.redrawHint('drag', true);\n r.redraw();\n }, opts.deqRedrawThreshold);\n var dequeue = function dequeue(willDraw, frameStartTime) {\n var startTime = performanceNow();\n var avgRenderTime = r.averageRedrawTime;\n var renderTime = r.lastRedrawTime;\n var deqd = [];\n var extent = r.cy.extent();\n var pixelRatio = r.getPixelRatio();\n\n // if we aren't in a tick that causes a draw, then the rendered style\n // queue won't automatically be flushed before dequeueing starts\n if (!willDraw) {\n r.flushRenderedStyleQueue();\n }\n while (true) {\n // eslint-disable-line no-constant-condition\n var now = performanceNow();\n var duration = now - startTime;\n var frameDuration = now - frameStartTime;\n if (renderTime < fullFpsTime) {\n // if we're rendering faster than the ideal fps, then do dequeueing\n // during all of the remaining frame time\n\n var timeAvailable = fullFpsTime - (willDraw ? avgRenderTime : 0);\n if (frameDuration >= opts.deqFastCost * timeAvailable) {\n break;\n }\n } else {\n if (willDraw) {\n if (duration >= opts.deqCost * renderTime || duration >= opts.deqAvgCost * avgRenderTime) {\n break;\n }\n } else if (frameDuration >= opts.deqNoDrawCost * fullFpsTime) {\n break;\n }\n }\n var thisDeqd = opts.deq(self, pixelRatio, extent);\n if (thisDeqd.length > 0) {\n for (var i = 0; i < thisDeqd.length; i++) {\n deqd.push(thisDeqd[i]);\n }\n } else {\n break;\n }\n }\n\n // callbacks on dequeue\n if (deqd.length > 0) {\n opts.onDeqd(self, deqd);\n if (!willDraw && opts.shouldRedraw(self, deqd, pixelRatio, extent)) {\n queueRedraw();\n }\n }\n };\n var priority = opts.priority || noop$1;\n r.beforeRender(dequeue, priority(self));\n };\n }\n};\n\n// Allows lookups for (ele, lvl) => cache.\n// Uses keys so elements may share the same cache.\nvar ElementTextureCacheLookup = /*#__PURE__*/function () {\n function ElementTextureCacheLookup(getKey) {\n var doesEleInvalidateKey = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : falsify;\n _classCallCheck(this, ElementTextureCacheLookup);\n this.idsByKey = new Map$1();\n this.keyForId = new Map$1();\n this.cachesByLvl = new Map$1();\n this.lvls = [];\n this.getKey = getKey;\n this.doesEleInvalidateKey = doesEleInvalidateKey;\n }\n return _createClass(ElementTextureCacheLookup, [{\n key: \"getIdsFor\",\n value: function getIdsFor(key) {\n if (key == null) {\n error(\"Can not get id list for null key\");\n }\n var idsByKey = this.idsByKey;\n var ids = this.idsByKey.get(key);\n if (!ids) {\n ids = new Set$1();\n idsByKey.set(key, ids);\n }\n return ids;\n }\n }, {\n key: \"addIdForKey\",\n value: function addIdForKey(key, id) {\n if (key != null) {\n this.getIdsFor(key).add(id);\n }\n }\n }, {\n key: \"deleteIdForKey\",\n value: function deleteIdForKey(key, id) {\n if (key != null) {\n this.getIdsFor(key)[\"delete\"](id);\n }\n }\n }, {\n key: \"getNumberOfIdsForKey\",\n value: function getNumberOfIdsForKey(key) {\n if (key == null) {\n return 0;\n } else {\n return this.getIdsFor(key).size;\n }\n }\n }, {\n key: \"updateKeyMappingFor\",\n value: function updateKeyMappingFor(ele) {\n var id = ele.id();\n var prevKey = this.keyForId.get(id);\n var currKey = this.getKey(ele);\n this.deleteIdForKey(prevKey, id);\n this.addIdForKey(currKey, id);\n this.keyForId.set(id, currKey);\n }\n }, {\n key: \"deleteKeyMappingFor\",\n value: function deleteKeyMappingFor(ele) {\n var id = ele.id();\n var prevKey = this.keyForId.get(id);\n this.deleteIdForKey(prevKey, id);\n this.keyForId[\"delete\"](id);\n }\n }, {\n key: \"keyHasChangedFor\",\n value: function keyHasChangedFor(ele) {\n var id = ele.id();\n var prevKey = this.keyForId.get(id);\n var newKey = this.getKey(ele);\n return prevKey !== newKey;\n }\n }, {\n key: \"isInvalid\",\n value: function isInvalid(ele) {\n return this.keyHasChangedFor(ele) || this.doesEleInvalidateKey(ele);\n }\n }, {\n key: \"getCachesAt\",\n value: function getCachesAt(lvl) {\n var cachesByLvl = this.cachesByLvl,\n lvls = this.lvls;\n var caches = cachesByLvl.get(lvl);\n if (!caches) {\n caches = new Map$1();\n cachesByLvl.set(lvl, caches);\n lvls.push(lvl);\n }\n return caches;\n }\n }, {\n key: \"getCache\",\n value: function getCache(key, lvl) {\n return this.getCachesAt(lvl).get(key);\n }\n }, {\n key: \"get\",\n value: function get(ele, lvl) {\n var key = this.getKey(ele);\n var cache = this.getCache(key, lvl);\n\n // getting for an element may need to add to the id list b/c eles can share keys\n if (cache != null) {\n this.updateKeyMappingFor(ele);\n }\n return cache;\n }\n }, {\n key: \"getForCachedKey\",\n value: function getForCachedKey(ele, lvl) {\n var key = this.keyForId.get(ele.id()); // n.b. use cached key, not newly computed key\n var cache = this.getCache(key, lvl);\n return cache;\n }\n }, {\n key: \"hasCache\",\n value: function hasCache(key, lvl) {\n return this.getCachesAt(lvl).has(key);\n }\n }, {\n key: \"has\",\n value: function has(ele, lvl) {\n var key = this.getKey(ele);\n return this.hasCache(key, lvl);\n }\n }, {\n key: \"setCache\",\n value: function setCache(key, lvl, cache) {\n cache.key = key;\n this.getCachesAt(lvl).set(key, cache);\n }\n }, {\n key: \"set\",\n value: function set(ele, lvl, cache) {\n var key = this.getKey(ele);\n this.setCache(key, lvl, cache);\n this.updateKeyMappingFor(ele);\n }\n }, {\n key: \"deleteCache\",\n value: function deleteCache(key, lvl) {\n this.getCachesAt(lvl)[\"delete\"](key);\n }\n }, {\n key: \"delete\",\n value: function _delete(ele, lvl) {\n var key = this.getKey(ele);\n this.deleteCache(key, lvl);\n }\n }, {\n key: \"invalidateKey\",\n value: function invalidateKey(key) {\n var _this = this;\n this.lvls.forEach(function (lvl) {\n return _this.deleteCache(key, lvl);\n });\n }\n\n // returns true if no other eles reference the invalidated cache (n.b. other eles may need the cache with the same key)\n }, {\n key: \"invalidate\",\n value: function invalidate(ele) {\n var id = ele.id();\n var key = this.keyForId.get(id); // n.b. use stored key rather than current (potential key)\n\n this.deleteKeyMappingFor(ele);\n var entireKeyInvalidated = this.doesEleInvalidateKey(ele);\n if (entireKeyInvalidated) {\n // clear mapping for current key\n this.invalidateKey(key);\n }\n return entireKeyInvalidated || this.getNumberOfIdsForKey(key) === 0;\n }\n }]);\n}();\n\nvar minTxrH = 25; // the size of the texture cache for small height eles (special case)\nvar txrStepH = 50; // the min size of the regular cache, and the size it increases with each step up\nvar minLvl$1 = -4; // when scaling smaller than that we don't need to re-render\nvar maxLvl$1 = 3; // when larger than this scale just render directly (caching is not helpful)\nvar maxZoom$1 = 7.99; // beyond this zoom level, layered textures are not used\nvar eleTxrSpacing = 8; // spacing between elements on textures to avoid blitting overlaps\nvar defTxrWidth = 1024; // default/minimum texture width\nvar maxTxrW = 1024; // the maximum width of a texture\nvar maxTxrH = 1024; // the maximum height of a texture\nvar minUtility = 0.2; // if usage of texture is less than this, it is retired\nvar maxFullness = 0.8; // fullness of texture after which queue removal is checked\nvar maxFullnessChecks = 10; // dequeued after this many checks\nvar deqCost$1 = 0.15; // % of add'l rendering cost allowed for dequeuing ele caches each frame\nvar deqAvgCost$1 = 0.1; // % of add'l rendering cost compared to average overall redraw time\nvar deqNoDrawCost$1 = 0.9; // % of avg frame time that can be used for dequeueing when not drawing\nvar deqFastCost$1 = 0.9; // % of frame time to be used when >60fps\nvar deqRedrawThreshold$1 = 100; // time to batch redraws together from dequeueing to allow more dequeueing calcs to happen in the meanwhile\nvar maxDeqSize$1 = 1; // number of eles to dequeue and render at higher texture in each batch\n\nvar getTxrReasons = {\n dequeue: 'dequeue',\n downscale: 'downscale',\n highQuality: 'highQuality'\n};\nvar initDefaults = defaults$g({\n getKey: null,\n doesEleInvalidateKey: falsify,\n drawElement: null,\n getBoundingBox: null,\n getRotationPoint: null,\n getRotationOffset: null,\n isVisible: trueify,\n allowEdgeTxrCaching: true,\n allowParentTxrCaching: true\n});\nvar ElementTextureCache = function ElementTextureCache(renderer, initOptions) {\n var self = this;\n self.renderer = renderer;\n self.onDequeues = [];\n var opts = initDefaults(initOptions);\n extend(self, opts);\n self.lookup = new ElementTextureCacheLookup(opts.getKey, opts.doesEleInvalidateKey);\n self.setupDequeueing();\n};\nvar ETCp = ElementTextureCache.prototype;\nETCp.reasons = getTxrReasons;\n\n// the list of textures in which new subtextures for elements can be placed\nETCp.getTextureQueue = function (txrH) {\n var self = this;\n self.eleImgCaches = self.eleImgCaches || {};\n return self.eleImgCaches[txrH] = self.eleImgCaches[txrH] || [];\n};\n\n// the list of usused textures which can be recycled (in use in texture queue)\nETCp.getRetiredTextureQueue = function (txrH) {\n var self = this;\n var rtxtrQs = self.eleImgCaches.retired = self.eleImgCaches.retired || {};\n var rtxtrQ = rtxtrQs[txrH] = rtxtrQs[txrH] || [];\n return rtxtrQ;\n};\n\n// queue of element draw requests at different scale levels\nETCp.getElementQueue = function () {\n var self = this;\n var q = self.eleCacheQueue = self.eleCacheQueue || new Heap(function (a, b) {\n return b.reqs - a.reqs;\n });\n return q;\n};\n\n// queue of element draw requests at different scale levels (element id lookup)\nETCp.getElementKeyToQueue = function () {\n var self = this;\n var k2q = self.eleKeyToCacheQueue = self.eleKeyToCacheQueue || {};\n return k2q;\n};\nETCp.getElement = function (ele, bb, pxRatio, lvl, reason) {\n var self = this;\n var r = this.renderer;\n var zoom = r.cy.zoom();\n var lookup = this.lookup;\n if (!bb || bb.w === 0 || bb.h === 0 || isNaN(bb.w) || isNaN(bb.h) || !ele.visible() || ele.removed()) {\n return null;\n }\n if (!self.allowEdgeTxrCaching && ele.isEdge() || !self.allowParentTxrCaching && ele.isParent()) {\n return null;\n }\n if (lvl == null) {\n lvl = Math.ceil(log2(zoom * pxRatio));\n }\n if (lvl < minLvl$1) {\n lvl = minLvl$1;\n } else if (zoom >= maxZoom$1 || lvl > maxLvl$1) {\n return null;\n }\n var scale = Math.pow(2, lvl);\n var eleScaledH = bb.h * scale;\n var eleScaledW = bb.w * scale;\n var scaledLabelShown = r.eleTextBiggerThanMin(ele, scale);\n if (!this.isVisible(ele, scaledLabelShown)) {\n return null;\n }\n var eleCache = lookup.get(ele, lvl);\n\n // if this get was on an unused/invalidated cache, then restore the texture usage metric\n if (eleCache && eleCache.invalidated) {\n eleCache.invalidated = false;\n eleCache.texture.invalidatedWidth -= eleCache.width;\n }\n if (eleCache) {\n return eleCache;\n }\n var txrH; // which texture height this ele belongs to\n\n if (eleScaledH <= minTxrH) {\n txrH = minTxrH;\n } else if (eleScaledH <= txrStepH) {\n txrH = txrStepH;\n } else {\n txrH = Math.ceil(eleScaledH / txrStepH) * txrStepH;\n }\n if (eleScaledH > maxTxrH || eleScaledW > maxTxrW) {\n return null; // caching large elements is not efficient\n }\n var txrQ = self.getTextureQueue(txrH);\n\n // first try the second last one in case it has space at the end\n var txr = txrQ[txrQ.length - 2];\n var addNewTxr = function addNewTxr() {\n return self.recycleTexture(txrH, eleScaledW) || self.addTexture(txrH, eleScaledW);\n };\n\n // try the last one if there is no second last one\n if (!txr) {\n txr = txrQ[txrQ.length - 1];\n }\n\n // if the last one doesn't exist, we need a first one\n if (!txr) {\n txr = addNewTxr();\n }\n\n // if there's no room in the current texture, we need a new one\n if (txr.width - txr.usedWidth < eleScaledW) {\n txr = addNewTxr();\n }\n var scalableFrom = function scalableFrom(otherCache) {\n return otherCache && otherCache.scaledLabelShown === scaledLabelShown;\n };\n var deqing = reason && reason === getTxrReasons.dequeue;\n var highQualityReq = reason && reason === getTxrReasons.highQuality;\n var downscaleReq = reason && reason === getTxrReasons.downscale;\n var higherCache; // the nearest cache with a higher level\n for (var l = lvl + 1; l <= maxLvl$1; l++) {\n var c = lookup.get(ele, l);\n if (c) {\n higherCache = c;\n break;\n }\n }\n var oneUpCache = higherCache && higherCache.level === lvl + 1 ? higherCache : null;\n var downscale = function downscale() {\n txr.context.drawImage(oneUpCache.texture.canvas, oneUpCache.x, 0, oneUpCache.width, oneUpCache.height, txr.usedWidth, 0, eleScaledW, eleScaledH);\n };\n\n // reset ele area in texture\n txr.context.setTransform(1, 0, 0, 1, 0, 0);\n txr.context.clearRect(txr.usedWidth, 0, eleScaledW, txrH);\n if (scalableFrom(oneUpCache)) {\n // then we can relatively cheaply rescale the existing image w/o rerendering\n downscale();\n } else if (scalableFrom(higherCache)) {\n // then use the higher cache for now and queue the next level down\n // to cheaply scale towards the smaller level\n\n if (highQualityReq) {\n for (var _l = higherCache.level; _l > lvl; _l--) {\n oneUpCache = self.getElement(ele, bb, pxRatio, _l, getTxrReasons.downscale);\n }\n downscale();\n } else {\n self.queueElement(ele, higherCache.level - 1);\n return higherCache;\n }\n } else {\n var lowerCache; // the nearest cache with a lower level\n if (!deqing && !highQualityReq && !downscaleReq) {\n for (var _l2 = lvl - 1; _l2 >= minLvl$1; _l2--) {\n var _c = lookup.get(ele, _l2);\n if (_c) {\n lowerCache = _c;\n break;\n }\n }\n }\n if (scalableFrom(lowerCache)) {\n // then use the lower quality cache for now and queue the better one for later\n\n self.queueElement(ele, lvl);\n return lowerCache;\n }\n txr.context.translate(txr.usedWidth, 0);\n txr.context.scale(scale, scale);\n this.drawElement(txr.context, ele, bb, scaledLabelShown, false);\n txr.context.scale(1 / scale, 1 / scale);\n txr.context.translate(-txr.usedWidth, 0);\n }\n eleCache = {\n x: txr.usedWidth,\n texture: txr,\n level: lvl,\n scale: scale,\n width: eleScaledW,\n height: eleScaledH,\n scaledLabelShown: scaledLabelShown\n };\n txr.usedWidth += Math.ceil(eleScaledW + eleTxrSpacing);\n txr.eleCaches.push(eleCache);\n lookup.set(ele, lvl, eleCache);\n self.checkTextureFullness(txr);\n return eleCache;\n};\nETCp.invalidateElements = function (eles) {\n for (var i = 0; i < eles.length; i++) {\n this.invalidateElement(eles[i]);\n }\n};\nETCp.invalidateElement = function (ele) {\n var self = this;\n var lookup = self.lookup;\n var caches = [];\n var invalid = lookup.isInvalid(ele);\n if (!invalid) {\n return; // override the invalidation request if the element key has not changed\n }\n for (var lvl = minLvl$1; lvl <= maxLvl$1; lvl++) {\n var cache = lookup.getForCachedKey(ele, lvl);\n if (cache) {\n caches.push(cache);\n }\n }\n var noOtherElesUseCache = lookup.invalidate(ele);\n if (noOtherElesUseCache) {\n for (var i = 0; i < caches.length; i++) {\n var _cache = caches[i];\n var txr = _cache.texture;\n\n // remove space from the texture it belongs to\n txr.invalidatedWidth += _cache.width;\n\n // mark the cache as invalidated\n _cache.invalidated = true;\n\n // retire the texture if its utility is low\n self.checkTextureUtility(txr);\n }\n }\n\n // remove from queue since the old req was for the old state\n self.removeFromQueue(ele);\n};\nETCp.checkTextureUtility = function (txr) {\n // invalidate all entries in the cache if the cache size is small\n if (txr.invalidatedWidth >= minUtility * txr.width) {\n this.retireTexture(txr);\n }\n};\nETCp.checkTextureFullness = function (txr) {\n // if texture has been mostly filled and passed over several times, remove\n // it from the queue so we don't need to waste time looking at it to put new things\n\n var self = this;\n var txrQ = self.getTextureQueue(txr.height);\n if (txr.usedWidth / txr.width > maxFullness && txr.fullnessChecks >= maxFullnessChecks) {\n removeFromArray(txrQ, txr);\n } else {\n txr.fullnessChecks++;\n }\n};\nETCp.retireTexture = function (txr) {\n var self = this;\n var txrH = txr.height;\n var txrQ = self.getTextureQueue(txrH);\n var lookup = this.lookup;\n\n // retire the texture from the active / searchable queue:\n\n removeFromArray(txrQ, txr);\n txr.retired = true;\n\n // remove the refs from the eles to the caches:\n\n var eleCaches = txr.eleCaches;\n for (var i = 0; i < eleCaches.length; i++) {\n var eleCache = eleCaches[i];\n lookup.deleteCache(eleCache.key, eleCache.level);\n }\n clearArray(eleCaches);\n\n // add the texture to a retired queue so it can be recycled in future:\n\n var rtxtrQ = self.getRetiredTextureQueue(txrH);\n rtxtrQ.push(txr);\n};\nETCp.addTexture = function (txrH, minW) {\n var self = this;\n var txrQ = self.getTextureQueue(txrH);\n var txr = {};\n txrQ.push(txr);\n txr.eleCaches = [];\n txr.height = txrH;\n txr.width = Math.max(defTxrWidth, minW);\n txr.usedWidth = 0;\n txr.invalidatedWidth = 0;\n txr.fullnessChecks = 0;\n txr.canvas = self.renderer.makeOffscreenCanvas(txr.width, txr.height);\n txr.context = txr.canvas.getContext('2d');\n return txr;\n};\nETCp.recycleTexture = function (txrH, minW) {\n var self = this;\n var txrQ = self.getTextureQueue(txrH);\n var rtxtrQ = self.getRetiredTextureQueue(txrH);\n for (var i = 0; i < rtxtrQ.length; i++) {\n var txr = rtxtrQ[i];\n if (txr.width >= minW) {\n txr.retired = false;\n txr.usedWidth = 0;\n txr.invalidatedWidth = 0;\n txr.fullnessChecks = 0;\n clearArray(txr.eleCaches);\n txr.context.setTransform(1, 0, 0, 1, 0, 0);\n txr.context.clearRect(0, 0, txr.width, txr.height);\n removeFromArray(rtxtrQ, txr);\n txrQ.push(txr);\n return txr;\n }\n }\n};\nETCp.queueElement = function (ele, lvl) {\n var self = this;\n var q = self.getElementQueue();\n var k2q = self.getElementKeyToQueue();\n var key = this.getKey(ele);\n var existingReq = k2q[key];\n if (existingReq) {\n // use the max lvl b/c in between lvls are cheap to make\n existingReq.level = Math.max(existingReq.level, lvl);\n existingReq.eles.merge(ele);\n existingReq.reqs++;\n q.updateItem(existingReq);\n } else {\n var req = {\n eles: ele.spawn().merge(ele),\n level: lvl,\n reqs: 1,\n key: key\n };\n q.push(req);\n k2q[key] = req;\n }\n};\nETCp.dequeue = function (pxRatio /*, extent*/) {\n var self = this;\n var q = self.getElementQueue();\n var k2q = self.getElementKeyToQueue();\n var dequeued = [];\n var lookup = self.lookup;\n for (var i = 0; i < maxDeqSize$1; i++) {\n if (q.size() > 0) {\n var req = q.pop();\n var key = req.key;\n var ele = req.eles[0]; // all eles have the same key\n var cacheExists = lookup.hasCache(ele, req.level);\n\n // clear out the key to req lookup\n k2q[key] = null;\n\n // dequeueing isn't necessary with an existing cache\n if (cacheExists) {\n continue;\n }\n dequeued.push(req);\n var bb = self.getBoundingBox(ele);\n self.getElement(ele, bb, pxRatio, req.level, getTxrReasons.dequeue);\n } else {\n break;\n }\n }\n return dequeued;\n};\nETCp.removeFromQueue = function (ele) {\n var self = this;\n var q = self.getElementQueue();\n var k2q = self.getElementKeyToQueue();\n var key = this.getKey(ele);\n var req = k2q[key];\n if (req != null) {\n if (req.eles.length === 1) {\n // remove if last ele in the req\n // bring to front of queue\n req.reqs = MAX_INT$1;\n q.updateItem(req);\n q.pop(); // remove from queue\n\n k2q[key] = null; // remove from lookup map\n } else {\n // otherwise just remove ele from req\n req.eles.unmerge(ele);\n }\n }\n};\nETCp.onDequeue = function (fn) {\n this.onDequeues.push(fn);\n};\nETCp.offDequeue = function (fn) {\n removeFromArray(this.onDequeues, fn);\n};\nETCp.setupDequeueing = defs.setupDequeueing({\n deqRedrawThreshold: deqRedrawThreshold$1,\n deqCost: deqCost$1,\n deqAvgCost: deqAvgCost$1,\n deqNoDrawCost: deqNoDrawCost$1,\n deqFastCost: deqFastCost$1,\n deq: function deq(self, pxRatio, extent) {\n return self.dequeue(pxRatio, extent);\n },\n onDeqd: function onDeqd(self, deqd) {\n for (var i = 0; i < self.onDequeues.length; i++) {\n var fn = self.onDequeues[i];\n fn(deqd);\n }\n },\n shouldRedraw: function shouldRedraw(self, deqd, pxRatio, extent) {\n for (var i = 0; i < deqd.length; i++) {\n var eles = deqd[i].eles;\n for (var j = 0; j < eles.length; j++) {\n var bb = eles[j].boundingBox();\n if (boundingBoxesIntersect(bb, extent)) {\n return true;\n }\n }\n }\n return false;\n },\n priority: function priority(self) {\n return self.renderer.beforeRenderPriorities.eleTxrDeq;\n }\n});\n\nvar defNumLayers = 1; // default number of layers to use\nvar minLvl = -4; // when scaling smaller than that we don't need to re-render\nvar maxLvl = 2; // when larger than this scale just render directly (caching is not helpful)\nvar maxZoom = 3.99; // beyond this zoom level, layered textures are not used\nvar deqRedrawThreshold = 50; // time to batch redraws together from dequeueing to allow more dequeueing calcs to happen in the meanwhile\nvar refineEleDebounceTime = 50; // time to debounce sharper ele texture updates\nvar deqCost = 0.15; // % of add'l rendering cost allowed for dequeuing ele caches each frame\nvar deqAvgCost = 0.1; // % of add'l rendering cost compared to average overall redraw time\nvar deqNoDrawCost = 0.9; // % of avg frame time that can be used for dequeueing when not drawing\nvar deqFastCost = 0.9; // % of frame time to be used when >60fps\nvar maxDeqSize = 1; // number of eles to dequeue and render at higher texture in each batch\nvar invalidThreshold = 250; // time threshold for disabling b/c of invalidations\nvar maxLayerArea = 4000 * 4000; // layers can't be bigger than this\nvar maxLayerDim = 32767; // maximum size for the width/height of layer canvases\nvar useHighQualityEleTxrReqs = true; // whether to use high quality ele txr requests (generally faster and cheaper in the longterm)\n\n// var log = function(){ console.log.apply( console, arguments ); };\n\nvar LayeredTextureCache = function LayeredTextureCache(renderer) {\n var self = this;\n var r = self.renderer = renderer;\n var cy = r.cy;\n self.layersByLevel = {}; // e.g. 2 => [ layer1, layer2, ..., layerN ]\n\n self.firstGet = true;\n self.lastInvalidationTime = performanceNow() - 2 * invalidThreshold;\n self.skipping = false;\n self.eleTxrDeqs = cy.collection();\n self.scheduleElementRefinement = debounce(function () {\n self.refineElementTextures(self.eleTxrDeqs);\n self.eleTxrDeqs.unmerge(self.eleTxrDeqs);\n }, refineEleDebounceTime);\n r.beforeRender(function (willDraw, now) {\n if (now - self.lastInvalidationTime <= invalidThreshold) {\n self.skipping = true;\n } else {\n self.skipping = false;\n }\n }, r.beforeRenderPriorities.lyrTxrSkip);\n var qSort = function qSort(a, b) {\n return b.reqs - a.reqs;\n };\n self.layersQueue = new Heap(qSort);\n self.setupDequeueing();\n};\nvar LTCp = LayeredTextureCache.prototype;\nvar layerIdPool = 0;\nvar MAX_INT = Math.pow(2, 53) - 1;\nLTCp.makeLayer = function (bb, lvl) {\n var scale = Math.pow(2, lvl);\n var w = Math.ceil(bb.w * scale);\n var h = Math.ceil(bb.h * scale);\n var canvas = this.renderer.makeOffscreenCanvas(w, h);\n var layer = {\n id: layerIdPool = ++layerIdPool % MAX_INT,\n bb: bb,\n level: lvl,\n width: w,\n height: h,\n canvas: canvas,\n context: canvas.getContext('2d'),\n eles: [],\n elesQueue: [],\n reqs: 0\n };\n\n // log('make layer %s with w %s and h %s and lvl %s', layer.id, layer.width, layer.height, layer.level);\n\n var cxt = layer.context;\n var dx = -layer.bb.x1;\n var dy = -layer.bb.y1;\n\n // do the transform on creation to save cycles (it's the same for all eles)\n cxt.scale(scale, scale);\n cxt.translate(dx, dy);\n return layer;\n};\nLTCp.getLayers = function (eles, pxRatio, lvl) {\n var self = this;\n var r = self.renderer;\n var cy = r.cy;\n var zoom = cy.zoom();\n var firstGet = self.firstGet;\n self.firstGet = false;\n\n // log('--\\nget layers with %s eles', eles.length);\n //log eles.map(function(ele){ return ele.id() }) );\n\n if (lvl == null) {\n lvl = Math.ceil(log2(zoom * pxRatio));\n if (lvl < minLvl) {\n lvl = minLvl;\n } else if (zoom >= maxZoom || lvl > maxLvl) {\n return null;\n }\n }\n self.validateLayersElesOrdering(lvl, eles);\n var layersByLvl = self.layersByLevel;\n var scale = Math.pow(2, lvl);\n var layers = layersByLvl[lvl] = layersByLvl[lvl] || [];\n var bb;\n var lvlComplete = self.levelIsComplete(lvl, eles);\n var tmpLayers;\n var checkTempLevels = function checkTempLevels() {\n var canUseAsTmpLvl = function canUseAsTmpLvl(l) {\n self.validateLayersElesOrdering(l, eles);\n if (self.levelIsComplete(l, eles)) {\n tmpLayers = layersByLvl[l];\n return true;\n }\n };\n var checkLvls = function checkLvls(dir) {\n if (tmpLayers) {\n return;\n }\n for (var l = lvl + dir; minLvl <= l && l <= maxLvl; l += dir) {\n if (canUseAsTmpLvl(l)) {\n break;\n }\n }\n };\n checkLvls(1);\n checkLvls(-1);\n\n // remove the invalid layers; they will be replaced as needed later in this function\n for (var i = layers.length - 1; i >= 0; i--) {\n var layer = layers[i];\n if (layer.invalid) {\n removeFromArray(layers, layer);\n }\n }\n };\n if (!lvlComplete) {\n // if the current level is incomplete, then use the closest, best quality layerset temporarily\n // and later queue the current layerset so we can get the proper quality level soon\n\n checkTempLevels();\n } else {\n // log('level complete, using existing layers\\n--');\n return layers;\n }\n var getBb = function getBb() {\n if (!bb) {\n bb = makeBoundingBox();\n for (var i = 0; i < eles.length; i++) {\n updateBoundingBox(bb, eles[i].boundingBox());\n }\n }\n return bb;\n };\n var makeLayer = function makeLayer(opts) {\n opts = opts || {};\n var after = opts.after;\n getBb();\n var w = Math.ceil(bb.w * scale);\n var h = Math.ceil(bb.h * scale);\n if (w > maxLayerDim || h > maxLayerDim) {\n return null;\n }\n var area = w * h;\n if (area > maxLayerArea) {\n return null;\n }\n var layer = self.makeLayer(bb, lvl);\n if (after != null) {\n var index = layers.indexOf(after) + 1;\n layers.splice(index, 0, layer);\n } else if (opts.insert === undefined || opts.insert) {\n // no after specified => first layer made so put at start\n layers.unshift(layer);\n }\n\n // if( tmpLayers ){\n //self.queueLayer( layer );\n // }\n\n return layer;\n };\n if (self.skipping && !firstGet) {\n // log('skip layers');\n return null;\n }\n\n // log('do layers');\n\n var layer = null;\n var maxElesPerLayer = eles.length / defNumLayers;\n var allowLazyQueueing = !firstGet;\n for (var i = 0; i < eles.length; i++) {\n var ele = eles[i];\n var rs = ele._private.rscratch;\n var caches = rs.imgLayerCaches = rs.imgLayerCaches || {};\n\n // log('look at ele', ele.id());\n\n var existingLayer = caches[lvl];\n if (existingLayer) {\n // reuse layer for later eles\n // log('reuse layer for', ele.id());\n layer = existingLayer;\n continue;\n }\n if (!layer || layer.eles.length >= maxElesPerLayer || !boundingBoxInBoundingBox(layer.bb, ele.boundingBox())) {\n // log('make new layer for ele %s', ele.id());\n\n layer = makeLayer({\n insert: true,\n after: layer\n });\n\n // if now layer can be built then we can't use layers at this level\n if (!layer) {\n return null;\n }\n\n // log('new layer with id %s', layer.id);\n }\n if (tmpLayers || allowLazyQueueing) {\n // log('queue ele %s in layer %s', ele.id(), layer.id);\n self.queueLayer(layer, ele);\n } else {\n // log('draw ele %s in layer %s', ele.id(), layer.id);\n self.drawEleInLayer(layer, ele, lvl, pxRatio);\n }\n layer.eles.push(ele);\n caches[lvl] = layer;\n }\n\n // log('--');\n\n if (tmpLayers) {\n // then we only queued the current layerset and can't draw it yet\n return tmpLayers;\n }\n if (allowLazyQueueing) {\n // log('lazy queue level', lvl);\n return null;\n }\n return layers;\n};\n\n// a layer may want to use an ele cache of a higher level to avoid blurriness\n// so the layer level might not equal the ele level\nLTCp.getEleLevelForLayerLevel = function (lvl, pxRatio) {\n return lvl;\n};\nLTCp.drawEleInLayer = function (layer, ele, lvl, pxRatio) {\n var self = this;\n var r = this.renderer;\n var context = layer.context;\n var bb = ele.boundingBox();\n if (bb.w === 0 || bb.h === 0 || !ele.visible()) {\n return;\n }\n lvl = self.getEleLevelForLayerLevel(lvl, pxRatio);\n {\n r.setImgSmoothing(context, false);\n }\n {\n r.drawCachedElement(context, ele, null, null, lvl, useHighQualityEleTxrReqs);\n }\n {\n r.setImgSmoothing(context, true);\n }\n};\nLTCp.levelIsComplete = function (lvl, eles) {\n var self = this;\n var layers = self.layersByLevel[lvl];\n if (!layers || layers.length === 0) {\n return false;\n }\n var numElesInLayers = 0;\n for (var i = 0; i < layers.length; i++) {\n var layer = layers[i];\n\n // if there are any eles needed to be drawn yet, the level is not complete\n if (layer.reqs > 0) {\n return false;\n }\n\n // if the layer is invalid, the level is not complete\n if (layer.invalid) {\n return false;\n }\n numElesInLayers += layer.eles.length;\n }\n\n // we should have exactly the number of eles passed in to be complete\n if (numElesInLayers !== eles.length) {\n return false;\n }\n return true;\n};\nLTCp.validateLayersElesOrdering = function (lvl, eles) {\n var layers = this.layersByLevel[lvl];\n if (!layers) {\n return;\n }\n\n // if in a layer the eles are not in the same order, then the layer is invalid\n // (i.e. there is an ele in between the eles in the layer)\n\n for (var i = 0; i < layers.length; i++) {\n var layer = layers[i];\n var offset = -1;\n\n // find the offset\n for (var j = 0; j < eles.length; j++) {\n if (layer.eles[0] === eles[j]) {\n offset = j;\n break;\n }\n }\n if (offset < 0) {\n // then the layer has nonexistent elements and is invalid\n this.invalidateLayer(layer);\n continue;\n }\n\n // the eles in the layer must be in the same continuous order, else the layer is invalid\n\n var o = offset;\n for (var j = 0; j < layer.eles.length; j++) {\n if (layer.eles[j] !== eles[o + j]) {\n // log('invalidate based on ordering', layer.id);\n\n this.invalidateLayer(layer);\n break;\n }\n }\n }\n};\nLTCp.updateElementsInLayers = function (eles, update) {\n var self = this;\n var isEles = element(eles[0]);\n\n // collect udpated elements (cascaded from the layers) and update each\n // layer itself along the way\n for (var i = 0; i < eles.length; i++) {\n var req = isEles ? null : eles[i];\n var ele = isEles ? eles[i] : eles[i].ele;\n var rs = ele._private.rscratch;\n var caches = rs.imgLayerCaches = rs.imgLayerCaches || {};\n for (var l = minLvl; l <= maxLvl; l++) {\n var layer = caches[l];\n if (!layer) {\n continue;\n }\n\n // if update is a request from the ele cache, then it affects only\n // the matching level\n if (req && self.getEleLevelForLayerLevel(layer.level) !== req.level) {\n continue;\n }\n update(layer, ele, req);\n }\n }\n};\nLTCp.haveLayers = function () {\n var self = this;\n var haveLayers = false;\n for (var l = minLvl; l <= maxLvl; l++) {\n var layers = self.layersByLevel[l];\n if (layers && layers.length > 0) {\n haveLayers = true;\n break;\n }\n }\n return haveLayers;\n};\nLTCp.invalidateElements = function (eles) {\n var self = this;\n if (eles.length === 0) {\n return;\n }\n self.lastInvalidationTime = performanceNow();\n\n // log('update invalidate layer time from eles');\n\n if (eles.length === 0 || !self.haveLayers()) {\n return;\n }\n self.updateElementsInLayers(eles, function invalAssocLayers(layer, ele, req) {\n self.invalidateLayer(layer);\n });\n};\nLTCp.invalidateLayer = function (layer) {\n // log('update invalidate layer time');\n\n this.lastInvalidationTime = performanceNow();\n if (layer.invalid) {\n return;\n } // save cycles\n\n var lvl = layer.level;\n var eles = layer.eles;\n var layers = this.layersByLevel[lvl];\n\n // log('invalidate layer', layer.id );\n\n removeFromArray(layers, layer);\n // layer.eles = [];\n\n layer.elesQueue = [];\n layer.invalid = true;\n if (layer.replacement) {\n layer.replacement.invalid = true;\n }\n for (var i = 0; i < eles.length; i++) {\n var caches = eles[i]._private.rscratch.imgLayerCaches;\n if (caches) {\n caches[lvl] = null;\n }\n }\n};\nLTCp.refineElementTextures = function (eles) {\n var self = this;\n\n // log('refine', eles.length);\n\n self.updateElementsInLayers(eles, function refineEachEle(layer, ele, req) {\n var rLyr = layer.replacement;\n if (!rLyr) {\n rLyr = layer.replacement = self.makeLayer(layer.bb, layer.level);\n rLyr.replaces = layer;\n rLyr.eles = layer.eles;\n\n // log('make replacement layer %s for %s with level %s', rLyr.id, layer.id, rLyr.level);\n }\n if (!rLyr.reqs) {\n for (var i = 0; i < rLyr.eles.length; i++) {\n self.queueLayer(rLyr, rLyr.eles[i]);\n }\n\n // log('queue replacement layer refinement', rLyr.id);\n }\n });\n};\nLTCp.enqueueElementRefinement = function (ele) {\n this.eleTxrDeqs.merge(ele);\n this.scheduleElementRefinement();\n};\nLTCp.queueLayer = function (layer, ele) {\n var self = this;\n var q = self.layersQueue;\n var elesQ = layer.elesQueue;\n var hasId = elesQ.hasId = elesQ.hasId || {};\n\n // if a layer is going to be replaced, queuing is a waste of time\n if (layer.replacement) {\n return;\n }\n if (ele) {\n if (hasId[ele.id()]) {\n return;\n }\n elesQ.push(ele);\n hasId[ele.id()] = true;\n }\n if (layer.reqs) {\n layer.reqs++;\n q.updateItem(layer);\n } else {\n layer.reqs = 1;\n q.push(layer);\n }\n};\nLTCp.dequeue = function (pxRatio) {\n var self = this;\n var q = self.layersQueue;\n var deqd = [];\n var eleDeqs = 0;\n while (eleDeqs < maxDeqSize) {\n if (q.size() === 0) {\n break;\n }\n var layer = q.peek();\n\n // if a layer has been or will be replaced, then don't waste time with it\n if (layer.replacement) {\n // log('layer %s in queue skipped b/c it already has a replacement', layer.id);\n q.pop();\n continue;\n }\n\n // if this is a replacement layer that has been superceded, then forget it\n if (layer.replaces && layer !== layer.replaces.replacement) {\n // log('layer is no longer the most uptodate replacement; dequeued', layer.id)\n q.pop();\n continue;\n }\n if (layer.invalid) {\n // log('replacement layer %s is invalid; dequeued', layer.id);\n q.pop();\n continue;\n }\n var ele = layer.elesQueue.shift();\n if (ele) {\n // log('dequeue layer %s', layer.id);\n\n self.drawEleInLayer(layer, ele, layer.level, pxRatio);\n eleDeqs++;\n }\n if (deqd.length === 0) {\n // we need only one entry in deqd to queue redrawing etc\n deqd.push(true);\n }\n\n // if the layer has all its eles done, then remove from the queue\n if (layer.elesQueue.length === 0) {\n q.pop();\n layer.reqs = 0;\n\n // log('dequeue of layer %s complete', layer.id);\n\n // when a replacement layer is dequeued, it replaces the old layer in the level\n if (layer.replaces) {\n self.applyLayerReplacement(layer);\n }\n self.requestRedraw();\n }\n }\n return deqd;\n};\nLTCp.applyLayerReplacement = function (layer) {\n var self = this;\n var layersInLevel = self.layersByLevel[layer.level];\n var replaced = layer.replaces;\n var index = layersInLevel.indexOf(replaced);\n\n // if the replaced layer is not in the active list for the level, then replacing\n // refs would be a mistake (i.e. overwriting the true active layer)\n if (index < 0 || replaced.invalid) {\n // log('replacement layer would have no effect', layer.id);\n return;\n }\n layersInLevel[index] = layer; // replace level ref\n\n // replace refs in eles\n for (var i = 0; i < layer.eles.length; i++) {\n var _p = layer.eles[i]._private;\n var cache = _p.imgLayerCaches = _p.imgLayerCaches || {};\n if (cache) {\n cache[layer.level] = layer;\n }\n }\n\n // log('apply replacement layer %s over %s', layer.id, replaced.id);\n\n self.requestRedraw();\n};\nLTCp.requestRedraw = debounce(function () {\n var r = this.renderer;\n r.redrawHint('eles', true);\n r.redrawHint('drag', true);\n r.redraw();\n}, 100);\nLTCp.setupDequeueing = defs.setupDequeueing({\n deqRedrawThreshold: deqRedrawThreshold,\n deqCost: deqCost,\n deqAvgCost: deqAvgCost,\n deqNoDrawCost: deqNoDrawCost,\n deqFastCost: deqFastCost,\n deq: function deq(self, pxRatio) {\n return self.dequeue(pxRatio);\n },\n onDeqd: noop$1,\n shouldRedraw: trueify,\n priority: function priority(self) {\n return self.renderer.beforeRenderPriorities.lyrTxrDeq;\n }\n});\n\nvar CRp$b = {};\nvar impl;\nfunction polygon(context, points) {\n for (var i = 0; i < points.length; i++) {\n var pt = points[i];\n context.lineTo(pt.x, pt.y);\n }\n}\nfunction triangleBackcurve(context, points, controlPoint) {\n var firstPt;\n for (var i = 0; i < points.length; i++) {\n var pt = points[i];\n if (i === 0) {\n firstPt = pt;\n }\n context.lineTo(pt.x, pt.y);\n }\n context.quadraticCurveTo(controlPoint.x, controlPoint.y, firstPt.x, firstPt.y);\n}\nfunction triangleTee(context, trianglePoints, teePoints) {\n if (context.beginPath) {\n context.beginPath();\n }\n var triPts = trianglePoints;\n for (var i = 0; i < triPts.length; i++) {\n var pt = triPts[i];\n context.lineTo(pt.x, pt.y);\n }\n var teePts = teePoints;\n var firstTeePt = teePoints[0];\n context.moveTo(firstTeePt.x, firstTeePt.y);\n for (var i = 1; i < teePts.length; i++) {\n var pt = teePts[i];\n context.lineTo(pt.x, pt.y);\n }\n if (context.closePath) {\n context.closePath();\n }\n}\nfunction circleTriangle(context, trianglePoints, rx, ry, r) {\n if (context.beginPath) {\n context.beginPath();\n }\n context.arc(rx, ry, r, 0, Math.PI * 2, false);\n var triPts = trianglePoints;\n var firstTrPt = triPts[0];\n context.moveTo(firstTrPt.x, firstTrPt.y);\n for (var i = 0; i < triPts.length; i++) {\n var pt = triPts[i];\n context.lineTo(pt.x, pt.y);\n }\n if (context.closePath) {\n context.closePath();\n }\n}\nfunction circle(context, rx, ry, r) {\n context.arc(rx, ry, r, 0, Math.PI * 2, false);\n}\nCRp$b.arrowShapeImpl = function (name) {\n return (impl || (impl = {\n 'polygon': polygon,\n 'triangle-backcurve': triangleBackcurve,\n 'triangle-tee': triangleTee,\n 'circle-triangle': circleTriangle,\n 'triangle-cross': triangleTee,\n 'circle': circle\n }))[name];\n};\n\nvar CRp$a = {};\nCRp$a.drawElement = function (context, ele, shiftToOriginWithBb, showLabel, showOverlay, showOpacity) {\n var r = this;\n if (ele.isNode()) {\n r.drawNode(context, ele, shiftToOriginWithBb, showLabel, showOverlay, showOpacity);\n } else {\n r.drawEdge(context, ele, shiftToOriginWithBb, showLabel, showOverlay, showOpacity);\n }\n};\nCRp$a.drawElementOverlay = function (context, ele) {\n var r = this;\n if (ele.isNode()) {\n r.drawNodeOverlay(context, ele);\n } else {\n r.drawEdgeOverlay(context, ele);\n }\n};\nCRp$a.drawElementUnderlay = function (context, ele) {\n var r = this;\n if (ele.isNode()) {\n r.drawNodeUnderlay(context, ele);\n } else {\n r.drawEdgeUnderlay(context, ele);\n }\n};\nCRp$a.drawCachedElementPortion = function (context, ele, eleTxrCache, pxRatio, lvl, reason, getRotation, getOpacity) {\n var r = this;\n var bb = eleTxrCache.getBoundingBox(ele);\n if (bb.w === 0 || bb.h === 0) {\n return;\n } // ignore zero size case\n\n var eleCache = eleTxrCache.getElement(ele, bb, pxRatio, lvl, reason);\n if (eleCache != null) {\n var opacity = getOpacity(r, ele);\n if (opacity === 0) {\n return;\n }\n var theta = getRotation(r, ele);\n var x1 = bb.x1,\n y1 = bb.y1,\n w = bb.w,\n h = bb.h;\n var x, y, sx, sy, smooth;\n if (theta !== 0) {\n var rotPt = eleTxrCache.getRotationPoint(ele);\n sx = rotPt.x;\n sy = rotPt.y;\n context.translate(sx, sy);\n context.rotate(theta);\n smooth = r.getImgSmoothing(context);\n if (!smooth) {\n r.setImgSmoothing(context, true);\n }\n var off = eleTxrCache.getRotationOffset(ele);\n x = off.x;\n y = off.y;\n } else {\n x = x1;\n y = y1;\n }\n var oldGlobalAlpha;\n if (opacity !== 1) {\n oldGlobalAlpha = context.globalAlpha;\n context.globalAlpha = oldGlobalAlpha * opacity;\n }\n context.drawImage(eleCache.texture.canvas, eleCache.x, 0, eleCache.width, eleCache.height, x, y, w, h);\n if (opacity !== 1) {\n context.globalAlpha = oldGlobalAlpha;\n }\n if (theta !== 0) {\n context.rotate(-theta);\n context.translate(-sx, -sy);\n if (!smooth) {\n r.setImgSmoothing(context, false);\n }\n }\n } else {\n eleTxrCache.drawElement(context, ele); // direct draw fallback\n }\n};\nvar getZeroRotation = function getZeroRotation() {\n return 0;\n};\nvar getLabelRotation = function getLabelRotation(r, ele) {\n return r.getTextAngle(ele, null);\n};\nvar getSourceLabelRotation = function getSourceLabelRotation(r, ele) {\n return r.getTextAngle(ele, 'source');\n};\nvar getTargetLabelRotation = function getTargetLabelRotation(r, ele) {\n return r.getTextAngle(ele, 'target');\n};\nvar getOpacity = function getOpacity(r, ele) {\n return ele.effectiveOpacity();\n};\nvar getTextOpacity = function getTextOpacity(e, ele) {\n return ele.pstyle('text-opacity').pfValue * ele.effectiveOpacity();\n};\nCRp$a.drawCachedElement = function (context, ele, pxRatio, extent, lvl, requestHighQuality) {\n var r = this;\n var _r$data = r.data,\n eleTxrCache = _r$data.eleTxrCache,\n lblTxrCache = _r$data.lblTxrCache,\n slbTxrCache = _r$data.slbTxrCache,\n tlbTxrCache = _r$data.tlbTxrCache;\n var bb = ele.boundingBox();\n var reason = requestHighQuality === true ? eleTxrCache.reasons.highQuality : null;\n if (bb.w === 0 || bb.h === 0 || !ele.visible()) {\n return;\n }\n if (!extent || boundingBoxesIntersect(bb, extent)) {\n var isEdge = ele.isEdge();\n var badLine = ele.element()._private.rscratch.badLine;\n r.drawElementUnderlay(context, ele);\n r.drawCachedElementPortion(context, ele, eleTxrCache, pxRatio, lvl, reason, getZeroRotation, getOpacity);\n if (!isEdge || !badLine) {\n r.drawCachedElementPortion(context, ele, lblTxrCache, pxRatio, lvl, reason, getLabelRotation, getTextOpacity);\n }\n if (isEdge && !badLine) {\n r.drawCachedElementPortion(context, ele, slbTxrCache, pxRatio, lvl, reason, getSourceLabelRotation, getTextOpacity);\n r.drawCachedElementPortion(context, ele, tlbTxrCache, pxRatio, lvl, reason, getTargetLabelRotation, getTextOpacity);\n }\n r.drawElementOverlay(context, ele);\n }\n};\nCRp$a.drawElements = function (context, eles) {\n var r = this;\n for (var i = 0; i < eles.length; i++) {\n var ele = eles[i];\n r.drawElement(context, ele);\n }\n};\nCRp$a.drawCachedElements = function (context, eles, pxRatio, extent) {\n var r = this;\n for (var i = 0; i < eles.length; i++) {\n var ele = eles[i];\n r.drawCachedElement(context, ele, pxRatio, extent);\n }\n};\nCRp$a.drawCachedNodes = function (context, eles, pxRatio, extent) {\n var r = this;\n for (var i = 0; i < eles.length; i++) {\n var ele = eles[i];\n if (!ele.isNode()) {\n continue;\n }\n r.drawCachedElement(context, ele, pxRatio, extent);\n }\n};\nCRp$a.drawLayeredElements = function (context, eles, pxRatio, extent) {\n var r = this;\n var layers = r.data.lyrTxrCache.getLayers(eles, pxRatio);\n if (layers) {\n for (var i = 0; i < layers.length; i++) {\n var layer = layers[i];\n var bb = layer.bb;\n if (bb.w === 0 || bb.h === 0) {\n continue;\n }\n context.drawImage(layer.canvas, bb.x1, bb.y1, bb.w, bb.h);\n }\n } else {\n // fall back on plain caching if no layers\n r.drawCachedElements(context, eles, pxRatio, extent);\n }\n};\n\nvar CRp$9 = {};\nCRp$9.drawEdge = function (context, edge, shiftToOriginWithBb) {\n var drawLabel = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : true;\n var shouldDrawOverlay = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : true;\n var shouldDrawOpacity = arguments.length > 5 && arguments[5] !== undefined ? arguments[5] : true;\n var r = this;\n var rs = edge._private.rscratch;\n if (shouldDrawOpacity && !edge.visible()) {\n return;\n }\n\n // if bezier ctrl pts can not be calculated, then die\n if (rs.badLine || rs.allpts == null || isNaN(rs.allpts[0])) {\n // isNaN in case edge is impossible and browser bugs (e.g. safari)\n return;\n }\n var bb;\n if (shiftToOriginWithBb) {\n bb = shiftToOriginWithBb;\n context.translate(-bb.x1, -bb.y1);\n }\n var opacity = shouldDrawOpacity ? edge.pstyle('opacity').value : 1;\n var lineOpacity = shouldDrawOpacity ? edge.pstyle('line-opacity').value : 1;\n var curveStyle = edge.pstyle('curve-style').value;\n var lineStyle = edge.pstyle('line-style').value;\n var edgeWidth = edge.pstyle('width').pfValue;\n var lineCap = edge.pstyle('line-cap').value;\n var lineOutlineWidth = edge.pstyle('line-outline-width').value;\n var lineOutlineColor = edge.pstyle('line-outline-color').value;\n var effectiveLineOpacity = opacity * lineOpacity;\n // separate arrow opacity would require arrow-opacity property\n var effectiveArrowOpacity = opacity * lineOpacity;\n var drawLine = function drawLine() {\n var strokeOpacity = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : effectiveLineOpacity;\n if (curveStyle === 'straight-triangle') {\n r.eleStrokeStyle(context, edge, strokeOpacity);\n r.drawEdgeTrianglePath(edge, context, rs.allpts);\n } else {\n context.lineWidth = edgeWidth;\n context.lineCap = lineCap;\n r.eleStrokeStyle(context, edge, strokeOpacity);\n r.drawEdgePath(edge, context, rs.allpts, lineStyle);\n context.lineCap = 'butt'; // reset for other drawing functions\n }\n };\n var drawLineOutline = function drawLineOutline() {\n var strokeOpacity = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : effectiveLineOpacity;\n context.lineWidth = edgeWidth + lineOutlineWidth;\n context.lineCap = lineCap;\n if (lineOutlineWidth > 0) {\n r.colorStrokeStyle(context, lineOutlineColor[0], lineOutlineColor[1], lineOutlineColor[2], strokeOpacity);\n } else {\n // do not draw any lineOutline\n context.lineCap = 'butt'; // reset for other drawing functions\n return;\n }\n if (curveStyle === 'straight-triangle') {\n r.drawEdgeTrianglePath(edge, context, rs.allpts);\n } else {\n r.drawEdgePath(edge, context, rs.allpts, lineStyle);\n context.lineCap = 'butt'; // reset for other drawing functions\n }\n };\n var drawOverlay = function drawOverlay() {\n if (!shouldDrawOverlay) {\n return;\n }\n r.drawEdgeOverlay(context, edge);\n };\n var drawUnderlay = function drawUnderlay() {\n if (!shouldDrawOverlay) {\n return;\n }\n r.drawEdgeUnderlay(context, edge);\n };\n var drawArrows = function drawArrows() {\n var arrowOpacity = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : effectiveArrowOpacity;\n r.drawArrowheads(context, edge, arrowOpacity);\n };\n var drawText = function drawText() {\n r.drawElementText(context, edge, null, drawLabel);\n };\n context.lineJoin = 'round';\n var ghost = edge.pstyle('ghost').value === 'yes';\n if (ghost) {\n var gx = edge.pstyle('ghost-offset-x').pfValue;\n var gy = edge.pstyle('ghost-offset-y').pfValue;\n var ghostOpacity = edge.pstyle('ghost-opacity').value;\n var effectiveGhostOpacity = effectiveLineOpacity * ghostOpacity;\n context.translate(gx, gy);\n drawLine(effectiveGhostOpacity);\n drawArrows(effectiveGhostOpacity);\n context.translate(-gx, -gy);\n } else {\n drawLineOutline();\n }\n drawUnderlay();\n drawLine();\n drawArrows();\n drawOverlay();\n drawText();\n if (shiftToOriginWithBb) {\n context.translate(bb.x1, bb.y1);\n }\n};\nvar drawEdgeOverlayUnderlay = function drawEdgeOverlayUnderlay(overlayOrUnderlay) {\n if (!['overlay', 'underlay'].includes(overlayOrUnderlay)) {\n throw new Error('Invalid state');\n }\n return function (context, edge) {\n if (!edge.visible()) {\n return;\n }\n var opacity = edge.pstyle(\"\".concat(overlayOrUnderlay, \"-opacity\")).value;\n if (opacity === 0) {\n return;\n }\n var r = this;\n var usePaths = r.usePaths();\n var rs = edge._private.rscratch;\n var padding = edge.pstyle(\"\".concat(overlayOrUnderlay, \"-padding\")).pfValue;\n var width = 2 * padding;\n var color = edge.pstyle(\"\".concat(overlayOrUnderlay, \"-color\")).value;\n context.lineWidth = width;\n if (rs.edgeType === 'self' && !usePaths) {\n context.lineCap = 'butt';\n } else {\n context.lineCap = 'round';\n }\n r.colorStrokeStyle(context, color[0], color[1], color[2], opacity);\n r.drawEdgePath(edge, context, rs.allpts, 'solid');\n };\n};\nCRp$9.drawEdgeOverlay = drawEdgeOverlayUnderlay('overlay');\nCRp$9.drawEdgeUnderlay = drawEdgeOverlayUnderlay('underlay');\nCRp$9.drawEdgePath = function (edge, context, pts, type) {\n var rs = edge._private.rscratch;\n var canvasCxt = context;\n var path;\n var pathCacheHit = false;\n var usePaths = this.usePaths();\n var lineDashPattern = edge.pstyle('line-dash-pattern').pfValue;\n var lineDashOffset = edge.pstyle('line-dash-offset').pfValue;\n if (usePaths) {\n var pathCacheKey = pts.join('$');\n var keyMatches = rs.pathCacheKey && rs.pathCacheKey === pathCacheKey;\n if (keyMatches) {\n path = context = rs.pathCache;\n pathCacheHit = true;\n } else {\n path = context = new Path2D();\n rs.pathCacheKey = pathCacheKey;\n rs.pathCache = path;\n }\n }\n if (canvasCxt.setLineDash) {\n // for very outofdate browsers\n switch (type) {\n case 'dotted':\n canvasCxt.setLineDash([1, 1]);\n break;\n case 'dashed':\n canvasCxt.setLineDash(lineDashPattern);\n canvasCxt.lineDashOffset = lineDashOffset;\n break;\n case 'solid':\n canvasCxt.setLineDash([]);\n break;\n }\n }\n if (!pathCacheHit && !rs.badLine) {\n if (context.beginPath) {\n context.beginPath();\n }\n context.moveTo(pts[0], pts[1]);\n switch (rs.edgeType) {\n case 'bezier':\n case 'self':\n case 'compound':\n case 'multibezier':\n for (var i = 2; i + 3 < pts.length; i += 4) {\n context.quadraticCurveTo(pts[i], pts[i + 1], pts[i + 2], pts[i + 3]);\n }\n break;\n case 'straight':\n case 'haystack':\n for (var _i = 2; _i + 1 < pts.length; _i += 2) {\n context.lineTo(pts[_i], pts[_i + 1]);\n }\n break;\n case 'segments':\n if (rs.isRound) {\n var _iterator = _createForOfIteratorHelper(rs.roundCorners),\n _step;\n try {\n for (_iterator.s(); !(_step = _iterator.n()).done;) {\n var corner = _step.value;\n drawPreparedRoundCorner(context, corner);\n }\n } catch (err) {\n _iterator.e(err);\n } finally {\n _iterator.f();\n }\n context.lineTo(pts[pts.length - 2], pts[pts.length - 1]);\n } else {\n for (var _i2 = 2; _i2 + 1 < pts.length; _i2 += 2) {\n context.lineTo(pts[_i2], pts[_i2 + 1]);\n }\n }\n break;\n }\n }\n context = canvasCxt;\n if (usePaths) {\n context.stroke(path);\n } else {\n context.stroke();\n }\n\n // reset any line dashes\n if (context.setLineDash) {\n // for very outofdate browsers\n context.setLineDash([]);\n }\n};\nCRp$9.drawEdgeTrianglePath = function (edge, context, pts) {\n // use line stroke style for triangle fill style\n context.fillStyle = context.strokeStyle;\n var edgeWidth = edge.pstyle('width').pfValue;\n for (var i = 0; i + 1 < pts.length; i += 2) {\n var vector = [pts[i + 2] - pts[i], pts[i + 3] - pts[i + 1]];\n var length = Math.sqrt(vector[0] * vector[0] + vector[1] * vector[1]);\n var normal = [vector[1] / length, -vector[0] / length];\n var triangleHead = [normal[0] * edgeWidth / 2, normal[1] * edgeWidth / 2];\n context.beginPath();\n context.moveTo(pts[i] - triangleHead[0], pts[i + 1] - triangleHead[1]);\n context.lineTo(pts[i] + triangleHead[0], pts[i + 1] + triangleHead[1]);\n context.lineTo(pts[i + 2], pts[i + 3]);\n context.closePath();\n context.fill();\n }\n};\nCRp$9.drawArrowheads = function (context, edge, opacity) {\n var rs = edge._private.rscratch;\n var isHaystack = rs.edgeType === 'haystack';\n if (!isHaystack) {\n this.drawArrowhead(context, edge, 'source', rs.arrowStartX, rs.arrowStartY, rs.srcArrowAngle, opacity);\n }\n this.drawArrowhead(context, edge, 'mid-target', rs.midX, rs.midY, rs.midtgtArrowAngle, opacity);\n this.drawArrowhead(context, edge, 'mid-source', rs.midX, rs.midY, rs.midsrcArrowAngle, opacity);\n if (!isHaystack) {\n this.drawArrowhead(context, edge, 'target', rs.arrowEndX, rs.arrowEndY, rs.tgtArrowAngle, opacity);\n }\n};\nCRp$9.drawArrowhead = function (context, edge, prefix, x, y, angle, opacity) {\n if (isNaN(x) || x == null || isNaN(y) || y == null || isNaN(angle) || angle == null) {\n return;\n }\n var self = this;\n var arrowShape = edge.pstyle(prefix + '-arrow-shape').value;\n if (arrowShape === 'none') {\n return;\n }\n var arrowClearFill = edge.pstyle(prefix + '-arrow-fill').value === 'hollow' ? 'both' : 'filled';\n var arrowFill = edge.pstyle(prefix + '-arrow-fill').value;\n var edgeWidth = edge.pstyle('width').pfValue;\n var pArrowWidth = edge.pstyle(prefix + '-arrow-width');\n var arrowWidth = pArrowWidth.value === 'match-line' ? edgeWidth : pArrowWidth.pfValue;\n if (pArrowWidth.units === '%') arrowWidth *= edgeWidth;\n var edgeOpacity = edge.pstyle('opacity').value;\n if (opacity === undefined) {\n opacity = edgeOpacity;\n }\n var gco = context.globalCompositeOperation;\n if (opacity !== 1 || arrowFill === 'hollow') {\n // then extra clear is needed\n context.globalCompositeOperation = 'destination-out';\n self.colorFillStyle(context, 255, 255, 255, 1);\n self.colorStrokeStyle(context, 255, 255, 255, 1);\n self.drawArrowShape(edge, context, arrowClearFill, edgeWidth, arrowShape, arrowWidth, x, y, angle);\n context.globalCompositeOperation = gco;\n } // otherwise, the opaque arrow clears it for free :)\n\n var color = edge.pstyle(prefix + '-arrow-color').value;\n self.colorFillStyle(context, color[0], color[1], color[2], opacity);\n self.colorStrokeStyle(context, color[0], color[1], color[2], opacity);\n self.drawArrowShape(edge, context, arrowFill, edgeWidth, arrowShape, arrowWidth, x, y, angle);\n};\nCRp$9.drawArrowShape = function (edge, context, fill, edgeWidth, shape, shapeWidth, x, y, angle) {\n var r = this;\n var usePaths = this.usePaths() && shape !== 'triangle-cross';\n var pathCacheHit = false;\n var path;\n var canvasContext = context;\n var translation = {\n x: x,\n y: y\n };\n var scale = edge.pstyle('arrow-scale').value;\n var size = this.getArrowWidth(edgeWidth, scale);\n var shapeImpl = r.arrowShapes[shape];\n if (usePaths) {\n var cache = r.arrowPathCache = r.arrowPathCache || [];\n var key = hashString(shape);\n var cachedPath = cache[key];\n if (cachedPath != null) {\n path = context = cachedPath;\n pathCacheHit = true;\n } else {\n path = context = new Path2D();\n cache[key] = path;\n }\n }\n if (!pathCacheHit) {\n if (context.beginPath) {\n context.beginPath();\n }\n if (usePaths) {\n // store in the path cache with values easily manipulated later\n shapeImpl.draw(context, 1, 0, {\n x: 0,\n y: 0\n }, 1);\n } else {\n shapeImpl.draw(context, size, angle, translation, edgeWidth);\n }\n if (context.closePath) {\n context.closePath();\n }\n }\n context = canvasContext;\n if (usePaths) {\n // set transform to arrow position/orientation\n context.translate(x, y);\n context.rotate(angle);\n context.scale(size, size);\n }\n if (fill === 'filled' || fill === 'both') {\n if (usePaths) {\n context.fill(path);\n } else {\n context.fill();\n }\n }\n if (fill === 'hollow' || fill === 'both') {\n context.lineWidth = shapeWidth / (usePaths ? size : 1);\n context.lineJoin = 'miter';\n if (usePaths) {\n context.stroke(path);\n } else {\n context.stroke();\n }\n }\n if (usePaths) {\n // reset transform by applying inverse\n context.scale(1 / size, 1 / size);\n context.rotate(-angle);\n context.translate(-x, -y);\n }\n};\n\nvar CRp$8 = {};\nCRp$8.safeDrawImage = function (context, img, ix, iy, iw, ih, x, y, w, h) {\n // detect problematic cases for old browsers with bad images (cheaper than try-catch)\n if (iw <= 0 || ih <= 0 || w <= 0 || h <= 0) {\n return;\n }\n try {\n context.drawImage(img, ix, iy, iw, ih, x, y, w, h);\n } catch (e) {\n warn(e);\n }\n};\nCRp$8.drawInscribedImage = function (context, img, node, index, nodeOpacity) {\n var r = this;\n var pos = node.position();\n var nodeX = pos.x;\n var nodeY = pos.y;\n var styleObj = node.cy().style();\n var getIndexedStyle = styleObj.getIndexedStyle.bind(styleObj);\n var fit = getIndexedStyle(node, 'background-fit', 'value', index);\n var repeat = getIndexedStyle(node, 'background-repeat', 'value', index);\n var nodeW = node.width();\n var nodeH = node.height();\n var paddingX2 = node.padding() * 2;\n var nodeTW = nodeW + (getIndexedStyle(node, 'background-width-relative-to', 'value', index) === 'inner' ? 0 : paddingX2);\n var nodeTH = nodeH + (getIndexedStyle(node, 'background-height-relative-to', 'value', index) === 'inner' ? 0 : paddingX2);\n var rs = node._private.rscratch;\n var clip = getIndexedStyle(node, 'background-clip', 'value', index);\n var shouldClip = clip === 'node';\n var imgOpacity = getIndexedStyle(node, 'background-image-opacity', 'value', index) * nodeOpacity;\n var smooth = getIndexedStyle(node, 'background-image-smoothing', 'value', index);\n var cornerRadius = node.pstyle('corner-radius').value;\n if (cornerRadius !== 'auto') cornerRadius = node.pstyle('corner-radius').pfValue;\n var imgW = img.width || img.cachedW;\n var imgH = img.height || img.cachedH;\n\n // workaround for broken browsers like ie\n if (null == imgW || null == imgH) {\n document.body.appendChild(img); // eslint-disable-line no-undef\n\n imgW = img.cachedW = img.width || img.offsetWidth;\n imgH = img.cachedH = img.height || img.offsetHeight;\n document.body.removeChild(img); // eslint-disable-line no-undef\n }\n var w = imgW;\n var h = imgH;\n if (getIndexedStyle(node, 'background-width', 'value', index) !== 'auto') {\n if (getIndexedStyle(node, 'background-width', 'units', index) === '%') {\n w = getIndexedStyle(node, 'background-width', 'pfValue', index) * nodeTW;\n } else {\n w = getIndexedStyle(node, 'background-width', 'pfValue', index);\n }\n }\n if (getIndexedStyle(node, 'background-height', 'value', index) !== 'auto') {\n if (getIndexedStyle(node, 'background-height', 'units', index) === '%') {\n h = getIndexedStyle(node, 'background-height', 'pfValue', index) * nodeTH;\n } else {\n h = getIndexedStyle(node, 'background-height', 'pfValue', index);\n }\n }\n if (w === 0 || h === 0) {\n return; // no point in drawing empty image (and chrome is broken in this case)\n }\n if (fit === 'contain') {\n var scale = Math.min(nodeTW / w, nodeTH / h);\n w *= scale;\n h *= scale;\n } else if (fit === 'cover') {\n var scale = Math.max(nodeTW / w, nodeTH / h);\n w *= scale;\n h *= scale;\n }\n var x = nodeX - nodeTW / 2; // left\n var posXUnits = getIndexedStyle(node, 'background-position-x', 'units', index);\n var posXPfVal = getIndexedStyle(node, 'background-position-x', 'pfValue', index);\n if (posXUnits === '%') {\n x += (nodeTW - w) * posXPfVal;\n } else {\n x += posXPfVal;\n }\n var offXUnits = getIndexedStyle(node, 'background-offset-x', 'units', index);\n var offXPfVal = getIndexedStyle(node, 'background-offset-x', 'pfValue', index);\n if (offXUnits === '%') {\n x += (nodeTW - w) * offXPfVal;\n } else {\n x += offXPfVal;\n }\n var y = nodeY - nodeTH / 2; // top\n var posYUnits = getIndexedStyle(node, 'background-position-y', 'units', index);\n var posYPfVal = getIndexedStyle(node, 'background-position-y', 'pfValue', index);\n if (posYUnits === '%') {\n y += (nodeTH - h) * posYPfVal;\n } else {\n y += posYPfVal;\n }\n var offYUnits = getIndexedStyle(node, 'background-offset-y', 'units', index);\n var offYPfVal = getIndexedStyle(node, 'background-offset-y', 'pfValue', index);\n if (offYUnits === '%') {\n y += (nodeTH - h) * offYPfVal;\n } else {\n y += offYPfVal;\n }\n if (rs.pathCache) {\n x -= nodeX;\n y -= nodeY;\n nodeX = 0;\n nodeY = 0;\n }\n var gAlpha = context.globalAlpha;\n context.globalAlpha = imgOpacity;\n var smoothingEnabled = r.getImgSmoothing(context);\n var isSmoothingSwitched = false;\n if (smooth === 'no' && smoothingEnabled) {\n r.setImgSmoothing(context, false);\n isSmoothingSwitched = true;\n } else if (smooth === 'yes' && !smoothingEnabled) {\n r.setImgSmoothing(context, true);\n isSmoothingSwitched = true;\n }\n if (repeat === 'no-repeat') {\n if (shouldClip) {\n context.save();\n if (rs.pathCache) {\n context.clip(rs.pathCache);\n } else {\n r.nodeShapes[r.getNodeShape(node)].draw(context, nodeX, nodeY, nodeTW, nodeTH, cornerRadius, rs);\n context.clip();\n }\n }\n r.safeDrawImage(context, img, 0, 0, imgW, imgH, x, y, w, h);\n if (shouldClip) {\n context.restore();\n }\n } else {\n var pattern = context.createPattern(img, repeat);\n context.fillStyle = pattern;\n r.nodeShapes[r.getNodeShape(node)].draw(context, nodeX, nodeY, nodeTW, nodeTH, cornerRadius, rs);\n context.translate(x, y);\n context.fill();\n context.translate(-x, -y);\n }\n context.globalAlpha = gAlpha;\n if (isSmoothingSwitched) {\n r.setImgSmoothing(context, smoothingEnabled);\n }\n};\n\nvar CRp$7 = {};\nCRp$7.eleTextBiggerThanMin = function (ele, scale) {\n if (!scale) {\n var zoom = ele.cy().zoom();\n var pxRatio = this.getPixelRatio();\n var lvl = Math.ceil(log2(zoom * pxRatio)); // the effective texture level\n\n scale = Math.pow(2, lvl);\n }\n var computedSize = ele.pstyle('font-size').pfValue * scale;\n var minSize = ele.pstyle('min-zoomed-font-size').pfValue;\n if (computedSize < minSize) {\n return false;\n }\n return true;\n};\nCRp$7.drawElementText = function (context, ele, shiftToOriginWithBb, force, prefix) {\n var useEleOpacity = arguments.length > 5 && arguments[5] !== undefined ? arguments[5] : true;\n var r = this;\n if (force == null) {\n if (useEleOpacity && !r.eleTextBiggerThanMin(ele)) {\n return;\n }\n } else if (force === false) {\n return;\n }\n if (ele.isNode()) {\n var label = ele.pstyle('label');\n if (!label || !label.value) {\n return;\n }\n var justification = r.getLabelJustification(ele);\n context.textAlign = justification;\n context.textBaseline = 'bottom';\n } else {\n var badLine = ele.element()._private.rscratch.badLine;\n var _label = ele.pstyle('label');\n var srcLabel = ele.pstyle('source-label');\n var tgtLabel = ele.pstyle('target-label');\n if (badLine || (!_label || !_label.value) && (!srcLabel || !srcLabel.value) && (!tgtLabel || !tgtLabel.value)) {\n return;\n }\n context.textAlign = 'center';\n context.textBaseline = 'bottom';\n }\n var applyRotation = !shiftToOriginWithBb;\n var bb;\n if (shiftToOriginWithBb) {\n bb = shiftToOriginWithBb;\n context.translate(-bb.x1, -bb.y1);\n }\n if (prefix == null) {\n r.drawText(context, ele, null, applyRotation, useEleOpacity);\n if (ele.isEdge()) {\n r.drawText(context, ele, 'source', applyRotation, useEleOpacity);\n r.drawText(context, ele, 'target', applyRotation, useEleOpacity);\n }\n } else {\n r.drawText(context, ele, prefix, applyRotation, useEleOpacity);\n }\n if (shiftToOriginWithBb) {\n context.translate(bb.x1, bb.y1);\n }\n};\nCRp$7.getFontCache = function (context) {\n var cache;\n this.fontCaches = this.fontCaches || [];\n for (var i = 0; i < this.fontCaches.length; i++) {\n cache = this.fontCaches[i];\n if (cache.context === context) {\n return cache;\n }\n }\n cache = {\n context: context\n };\n this.fontCaches.push(cache);\n return cache;\n};\n\n// set up canvas context with font\n// returns transformed text string\nCRp$7.setupTextStyle = function (context, ele) {\n var useEleOpacity = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : true;\n // Font style\n var labelStyle = ele.pstyle('font-style').strValue;\n var labelSize = ele.pstyle('font-size').pfValue + 'px';\n var labelFamily = ele.pstyle('font-family').strValue;\n var labelWeight = ele.pstyle('font-weight').strValue;\n var opacity = useEleOpacity ? ele.effectiveOpacity() * ele.pstyle('text-opacity').value : 1;\n var outlineOpacity = ele.pstyle('text-outline-opacity').value * opacity;\n var color = ele.pstyle('color').value;\n var outlineColor = ele.pstyle('text-outline-color').value;\n context.font = labelStyle + ' ' + labelWeight + ' ' + labelSize + ' ' + labelFamily;\n context.lineJoin = 'round'; // so text outlines aren't jagged\n\n this.colorFillStyle(context, color[0], color[1], color[2], opacity);\n this.colorStrokeStyle(context, outlineColor[0], outlineColor[1], outlineColor[2], outlineOpacity);\n};\n\n// TODO ensure re-used\nfunction roundRect(ctx, x, y, width, height) {\n var radius = arguments.length > 5 && arguments[5] !== undefined ? arguments[5] : 5;\n var stroke = arguments.length > 6 ? arguments[6] : undefined;\n ctx.beginPath();\n ctx.moveTo(x + radius, y);\n ctx.lineTo(x + width - radius, y);\n ctx.quadraticCurveTo(x + width, y, x + width, y + radius);\n ctx.lineTo(x + width, y + height - radius);\n ctx.quadraticCurveTo(x + width, y + height, x + width - radius, y + height);\n ctx.lineTo(x + radius, y + height);\n ctx.quadraticCurveTo(x, y + height, x, y + height - radius);\n ctx.lineTo(x, y + radius);\n ctx.quadraticCurveTo(x, y, x + radius, y);\n ctx.closePath();\n if (stroke) ctx.stroke();else ctx.fill();\n}\nCRp$7.getTextAngle = function (ele, prefix) {\n var theta;\n var _p = ele._private;\n var rscratch = _p.rscratch;\n var pdash = prefix ? prefix + '-' : '';\n var rotation = ele.pstyle(pdash + 'text-rotation');\n if (rotation.strValue === 'autorotate') {\n var textAngle = getPrefixedProperty(rscratch, 'labelAngle', prefix);\n theta = ele.isEdge() ? textAngle : 0;\n } else if (rotation.strValue === 'none') {\n theta = 0;\n } else {\n theta = rotation.pfValue;\n }\n return theta;\n};\nCRp$7.drawText = function (context, ele, prefix) {\n var applyRotation = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : true;\n var useEleOpacity = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : true;\n var _p = ele._private;\n var rscratch = _p.rscratch;\n var parentOpacity = useEleOpacity ? ele.effectiveOpacity() : 1;\n if (useEleOpacity && (parentOpacity === 0 || ele.pstyle('text-opacity').value === 0)) {\n return;\n }\n\n // use 'main' as an alias for the main label (i.e. null prefix)\n if (prefix === 'main') {\n prefix = null;\n }\n var textX = getPrefixedProperty(rscratch, 'labelX', prefix);\n var textY = getPrefixedProperty(rscratch, 'labelY', prefix);\n var orgTextX, orgTextY; // used for rotation\n var text = this.getLabelText(ele, prefix);\n if (text != null && text !== '' && !isNaN(textX) && !isNaN(textY)) {\n this.setupTextStyle(context, ele, useEleOpacity);\n var pdash = prefix ? prefix + '-' : '';\n var textW = getPrefixedProperty(rscratch, 'labelWidth', prefix);\n var textH = getPrefixedProperty(rscratch, 'labelHeight', prefix);\n var marginX = ele.pstyle(pdash + 'text-margin-x').pfValue;\n var marginY = ele.pstyle(pdash + 'text-margin-y').pfValue;\n var isEdge = ele.isEdge();\n var halign = ele.pstyle('text-halign').value;\n var valign = ele.pstyle('text-valign').value;\n if (isEdge) {\n halign = 'center';\n valign = 'center';\n }\n textX += marginX;\n textY += marginY;\n var theta;\n if (!applyRotation) {\n theta = 0;\n } else {\n theta = this.getTextAngle(ele, prefix);\n }\n if (theta !== 0) {\n orgTextX = textX;\n orgTextY = textY;\n context.translate(orgTextX, orgTextY);\n context.rotate(theta);\n textX = 0;\n textY = 0;\n }\n switch (valign) {\n case 'top':\n break;\n case 'center':\n textY += textH / 2;\n break;\n case 'bottom':\n textY += textH;\n break;\n }\n var backgroundOpacity = ele.pstyle('text-background-opacity').value;\n var borderOpacity = ele.pstyle('text-border-opacity').value;\n var textBorderWidth = ele.pstyle('text-border-width').pfValue;\n var backgroundPadding = ele.pstyle('text-background-padding').pfValue;\n var styleShape = ele.pstyle('text-background-shape').strValue;\n var rounded = styleShape.indexOf('round') === 0;\n var roundRadius = 2;\n if (backgroundOpacity > 0 || textBorderWidth > 0 && borderOpacity > 0) {\n var bgX = textX - backgroundPadding;\n switch (halign) {\n case 'left':\n bgX -= textW;\n break;\n case 'center':\n bgX -= textW / 2;\n break;\n }\n var bgY = textY - textH - backgroundPadding;\n var bgW = textW + 2 * backgroundPadding;\n var bgH = textH + 2 * backgroundPadding;\n if (backgroundOpacity > 0) {\n var textFill = context.fillStyle;\n var textBackgroundColor = ele.pstyle('text-background-color').value;\n context.fillStyle = 'rgba(' + textBackgroundColor[0] + ',' + textBackgroundColor[1] + ',' + textBackgroundColor[2] + ',' + backgroundOpacity * parentOpacity + ')';\n if (rounded) {\n roundRect(context, bgX, bgY, bgW, bgH, roundRadius);\n } else {\n context.fillRect(bgX, bgY, bgW, bgH);\n }\n context.fillStyle = textFill;\n }\n if (textBorderWidth > 0 && borderOpacity > 0) {\n var textStroke = context.strokeStyle;\n var textLineWidth = context.lineWidth;\n var textBorderColor = ele.pstyle('text-border-color').value;\n var textBorderStyle = ele.pstyle('text-border-style').value;\n context.strokeStyle = 'rgba(' + textBorderColor[0] + ',' + textBorderColor[1] + ',' + textBorderColor[2] + ',' + borderOpacity * parentOpacity + ')';\n context.lineWidth = textBorderWidth;\n if (context.setLineDash) {\n // for very outofdate browsers\n switch (textBorderStyle) {\n case 'dotted':\n context.setLineDash([1, 1]);\n break;\n case 'dashed':\n context.setLineDash([4, 2]);\n break;\n case 'double':\n context.lineWidth = textBorderWidth / 4; // 50% reserved for white between the two borders\n context.setLineDash([]);\n break;\n case 'solid':\n context.setLineDash([]);\n break;\n }\n }\n if (rounded) {\n roundRect(context, bgX, bgY, bgW, bgH, roundRadius, 'stroke');\n } else {\n context.strokeRect(bgX, bgY, bgW, bgH);\n }\n if (textBorderStyle === 'double') {\n var whiteWidth = textBorderWidth / 2;\n if (rounded) {\n roundRect(context, bgX + whiteWidth, bgY + whiteWidth, bgW - whiteWidth * 2, bgH - whiteWidth * 2, roundRadius, 'stroke');\n } else {\n context.strokeRect(bgX + whiteWidth, bgY + whiteWidth, bgW - whiteWidth * 2, bgH - whiteWidth * 2);\n }\n }\n if (context.setLineDash) {\n // for very outofdate browsers\n context.setLineDash([]);\n }\n context.lineWidth = textLineWidth;\n context.strokeStyle = textStroke;\n }\n }\n var lineWidth = 2 * ele.pstyle('text-outline-width').pfValue; // *2 b/c the stroke is drawn centred on the middle\n\n if (lineWidth > 0) {\n context.lineWidth = lineWidth;\n }\n if (ele.pstyle('text-wrap').value === 'wrap') {\n var lines = getPrefixedProperty(rscratch, 'labelWrapCachedLines', prefix);\n var lineHeight = getPrefixedProperty(rscratch, 'labelLineHeight', prefix);\n var halfTextW = textW / 2;\n var justification = this.getLabelJustification(ele);\n if (justification === 'auto') ; else if (halign === 'left') {\n // auto justification : right\n if (justification === 'left') {\n textX += -textW;\n } else if (justification === 'center') {\n textX += -halfTextW;\n } // else same as auto\n } else if (halign === 'center') {\n // auto justfication : center\n if (justification === 'left') {\n textX += -halfTextW;\n } else if (justification === 'right') {\n textX += halfTextW;\n } // else same as auto\n } else if (halign === 'right') {\n // auto justification : left\n if (justification === 'center') {\n textX += halfTextW;\n } else if (justification === 'right') {\n textX += textW;\n } // else same as auto\n }\n switch (valign) {\n case 'top':\n textY -= (lines.length - 1) * lineHeight;\n break;\n case 'center':\n case 'bottom':\n textY -= (lines.length - 1) * lineHeight;\n break;\n }\n for (var l = 0; l < lines.length; l++) {\n if (lineWidth > 0) {\n context.strokeText(lines[l], textX, textY);\n }\n context.fillText(lines[l], textX, textY);\n textY += lineHeight;\n }\n } else {\n if (lineWidth > 0) {\n context.strokeText(text, textX, textY);\n }\n context.fillText(text, textX, textY);\n }\n if (theta !== 0) {\n context.rotate(-theta);\n context.translate(-orgTextX, -orgTextY);\n }\n }\n};\n\n/* global Path2D */\n\nvar CRp$6 = {};\nCRp$6.drawNode = function (context, node, shiftToOriginWithBb) {\n var drawLabel = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : true;\n var shouldDrawOverlay = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : true;\n var shouldDrawOpacity = arguments.length > 5 && arguments[5] !== undefined ? arguments[5] : true;\n var r = this;\n var nodeWidth, nodeHeight;\n var _p = node._private;\n var rs = _p.rscratch;\n var pos = node.position();\n if (!number$1(pos.x) || !number$1(pos.y)) {\n return; // can't draw node with undefined position\n }\n if (shouldDrawOpacity && !node.visible()) {\n return;\n }\n var eleOpacity = shouldDrawOpacity ? node.effectiveOpacity() : 1;\n var usePaths = r.usePaths();\n var path;\n var pathCacheHit = false;\n var padding = node.padding();\n nodeWidth = node.width() + 2 * padding;\n nodeHeight = node.height() + 2 * padding;\n\n //\n // setup shift\n\n var bb;\n if (shiftToOriginWithBb) {\n bb = shiftToOriginWithBb;\n context.translate(-bb.x1, -bb.y1);\n }\n\n //\n // load bg image\n\n var bgImgProp = node.pstyle('background-image');\n var urls = bgImgProp.value;\n var urlDefined = new Array(urls.length);\n var image = new Array(urls.length);\n var numImages = 0;\n for (var i = 0; i < urls.length; i++) {\n var url = urls[i];\n var defd = urlDefined[i] = url != null && url !== 'none';\n if (defd) {\n var bgImgCrossOrigin = node.cy().style().getIndexedStyle(node, 'background-image-crossorigin', 'value', i);\n numImages++;\n\n // get image, and if not loaded then ask to redraw when later loaded\n image[i] = r.getCachedImage(url, bgImgCrossOrigin, function () {\n _p.backgroundTimestamp = Date.now();\n node.emitAndNotify('background');\n });\n }\n }\n\n //\n // setup styles\n\n var darkness = node.pstyle('background-blacken').value;\n var borderWidth = node.pstyle('border-width').pfValue;\n var bgOpacity = node.pstyle('background-opacity').value * eleOpacity;\n var borderColor = node.pstyle('border-color').value;\n var borderStyle = node.pstyle('border-style').value;\n var borderJoin = node.pstyle('border-join').value;\n var borderCap = node.pstyle('border-cap').value;\n var borderPosition = node.pstyle('border-position').value;\n var borderPattern = node.pstyle('border-dash-pattern').pfValue;\n var borderOffset = node.pstyle('border-dash-offset').pfValue;\n var borderOpacity = node.pstyle('border-opacity').value * eleOpacity;\n var outlineWidth = node.pstyle('outline-width').pfValue;\n var outlineColor = node.pstyle('outline-color').value;\n var outlineStyle = node.pstyle('outline-style').value;\n var outlineOpacity = node.pstyle('outline-opacity').value * eleOpacity;\n var outlineOffset = node.pstyle('outline-offset').value;\n var cornerRadius = node.pstyle('corner-radius').value;\n if (cornerRadius !== 'auto') cornerRadius = node.pstyle('corner-radius').pfValue;\n var setupShapeColor = function setupShapeColor() {\n var bgOpy = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : bgOpacity;\n r.eleFillStyle(context, node, bgOpy);\n };\n var setupBorderColor = function setupBorderColor() {\n var bdrOpy = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : borderOpacity;\n r.colorStrokeStyle(context, borderColor[0], borderColor[1], borderColor[2], bdrOpy);\n };\n var setupOutlineColor = function setupOutlineColor() {\n var otlnOpy = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : outlineOpacity;\n r.colorStrokeStyle(context, outlineColor[0], outlineColor[1], outlineColor[2], otlnOpy);\n };\n\n //\n // setup shape\n\n var getPath = function getPath(width, height, shape, points) {\n var pathCache = r.nodePathCache = r.nodePathCache || [];\n var key = hashStrings(shape === 'polygon' ? shape + ',' + points.join(',') : shape, '' + height, '' + width, '' + cornerRadius);\n var cachedPath = pathCache[key];\n var path;\n var cacheHit = false;\n if (cachedPath != null) {\n path = cachedPath;\n cacheHit = true;\n rs.pathCache = path;\n } else {\n path = new Path2D();\n pathCache[key] = rs.pathCache = path;\n }\n return {\n path: path,\n cacheHit: cacheHit\n };\n };\n var styleShape = node.pstyle('shape').strValue;\n var shapePts = node.pstyle('shape-polygon-points').pfValue;\n if (usePaths) {\n context.translate(pos.x, pos.y);\n var shapePath = getPath(nodeWidth, nodeHeight, styleShape, shapePts);\n path = shapePath.path;\n pathCacheHit = shapePath.cacheHit;\n }\n var drawShape = function drawShape() {\n if (!pathCacheHit) {\n var npos = pos;\n if (usePaths) {\n npos = {\n x: 0,\n y: 0\n };\n }\n r.nodeShapes[r.getNodeShape(node)].draw(path || context, npos.x, npos.y, nodeWidth, nodeHeight, cornerRadius, rs);\n }\n if (usePaths) {\n context.fill(path);\n } else {\n context.fill();\n }\n };\n var drawImages = function drawImages() {\n var nodeOpacity = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : eleOpacity;\n var inside = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true;\n var prevBging = _p.backgrounding;\n var totalCompleted = 0;\n for (var _i = 0; _i < image.length; _i++) {\n var bgContainment = node.cy().style().getIndexedStyle(node, 'background-image-containment', 'value', _i);\n if (inside && bgContainment === 'over' || !inside && bgContainment === 'inside') {\n totalCompleted++;\n continue;\n }\n if (urlDefined[_i] && image[_i].complete && !image[_i].error) {\n totalCompleted++;\n r.drawInscribedImage(context, image[_i], node, _i, nodeOpacity);\n }\n }\n _p.backgrounding = !(totalCompleted === numImages);\n if (prevBging !== _p.backgrounding) {\n // update style b/c :backgrounding state changed\n node.updateStyle(false);\n }\n };\n var drawPie = function drawPie() {\n var redrawShape = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false;\n var pieOpacity = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : eleOpacity;\n if (r.hasPie(node)) {\n r.drawPie(context, node, pieOpacity);\n\n // redraw/restore path if steps after pie need it\n if (redrawShape) {\n if (!usePaths) {\n r.nodeShapes[r.getNodeShape(node)].draw(context, pos.x, pos.y, nodeWidth, nodeHeight, cornerRadius, rs);\n }\n }\n }\n };\n var darken = function darken() {\n var darkenOpacity = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : eleOpacity;\n var opacity = (darkness > 0 ? darkness : -darkness) * darkenOpacity;\n var c = darkness > 0 ? 0 : 255;\n if (darkness !== 0) {\n r.colorFillStyle(context, c, c, c, opacity);\n if (usePaths) {\n context.fill(path);\n } else {\n context.fill();\n }\n }\n };\n var drawBorder = function drawBorder() {\n if (borderWidth > 0) {\n context.lineWidth = borderWidth;\n context.lineCap = borderCap;\n context.lineJoin = borderJoin;\n if (context.setLineDash) {\n // for very outofdate browsers\n switch (borderStyle) {\n case 'dotted':\n context.setLineDash([1, 1]);\n break;\n case 'dashed':\n context.setLineDash(borderPattern);\n context.lineDashOffset = borderOffset;\n break;\n case 'solid':\n case 'double':\n context.setLineDash([]);\n break;\n }\n }\n if (borderPosition !== 'center') {\n context.save();\n context.lineWidth *= 2;\n if (borderPosition === 'inside') {\n usePaths ? context.clip(path) : context.clip();\n } else {\n var region = new Path2D();\n region.rect(-nodeWidth / 2 - borderWidth, -nodeHeight / 2 - borderWidth, nodeWidth + 2 * borderWidth, nodeHeight + 2 * borderWidth);\n region.addPath(path);\n context.clip(region, 'evenodd');\n }\n usePaths ? context.stroke(path) : context.stroke();\n context.restore();\n } else {\n usePaths ? context.stroke(path) : context.stroke();\n }\n if (borderStyle === 'double') {\n context.lineWidth = borderWidth / 3;\n var gco = context.globalCompositeOperation;\n context.globalCompositeOperation = 'destination-out';\n if (usePaths) {\n context.stroke(path);\n } else {\n context.stroke();\n }\n context.globalCompositeOperation = gco;\n }\n\n // reset in case we changed the border style\n if (context.setLineDash) {\n // for very outofdate browsers\n context.setLineDash([]);\n }\n }\n };\n var drawOutline = function drawOutline() {\n if (outlineWidth > 0) {\n context.lineWidth = outlineWidth;\n context.lineCap = 'butt';\n if (context.setLineDash) {\n // for very outofdate browsers\n switch (outlineStyle) {\n case 'dotted':\n context.setLineDash([1, 1]);\n break;\n case 'dashed':\n context.setLineDash([4, 2]);\n break;\n case 'solid':\n case 'double':\n context.setLineDash([]);\n break;\n }\n }\n var npos = pos;\n if (usePaths) {\n npos = {\n x: 0,\n y: 0\n };\n }\n var shape = r.getNodeShape(node);\n var bWidth = borderWidth;\n if (borderPosition === 'inside') bWidth = 0;\n if (borderPosition === 'outside') bWidth *= 2;\n var scaleX = (nodeWidth + bWidth + (outlineWidth + outlineOffset)) / nodeWidth;\n var scaleY = (nodeHeight + bWidth + (outlineWidth + outlineOffset)) / nodeHeight;\n var sWidth = nodeWidth * scaleX;\n var sHeight = nodeHeight * scaleY;\n var points = r.nodeShapes[shape].points;\n var _path;\n if (usePaths) {\n var outlinePath = getPath(sWidth, sHeight, shape, points);\n _path = outlinePath.path;\n }\n\n // draw the outline path, either by using expanded points or by scaling \n // the dimensions, depending on shape\n if (shape === \"ellipse\") {\n r.drawEllipsePath(_path || context, npos.x, npos.y, sWidth, sHeight);\n } else if (['round-diamond', 'round-heptagon', 'round-hexagon', 'round-octagon', 'round-pentagon', 'round-polygon', 'round-triangle', 'round-tag'].includes(shape)) {\n var sMult = 0;\n var offsetX = 0;\n var offsetY = 0;\n if (shape === 'round-diamond') {\n sMult = (bWidth + outlineOffset + outlineWidth) * 1.4;\n } else if (shape === 'round-heptagon') {\n sMult = (bWidth + outlineOffset + outlineWidth) * 1.075;\n offsetY = -(bWidth / 2 + outlineOffset + outlineWidth) / 35;\n } else if (shape === 'round-hexagon') {\n sMult = (bWidth + outlineOffset + outlineWidth) * 1.12;\n } else if (shape === 'round-pentagon') {\n sMult = (bWidth + outlineOffset + outlineWidth) * 1.13;\n offsetY = -(bWidth / 2 + outlineOffset + outlineWidth) / 15;\n } else if (shape === 'round-tag') {\n sMult = (bWidth + outlineOffset + outlineWidth) * 1.12;\n offsetX = (bWidth / 2 + outlineWidth + outlineOffset) * .07;\n } else if (shape === 'round-triangle') {\n sMult = (bWidth + outlineOffset + outlineWidth) * (Math.PI / 2);\n offsetY = -(bWidth + outlineOffset / 2 + outlineWidth) / Math.PI;\n }\n if (sMult !== 0) {\n scaleX = (nodeWidth + sMult) / nodeWidth;\n sWidth = nodeWidth * scaleX;\n if (!['round-hexagon', 'round-tag'].includes(shape)) {\n scaleY = (nodeHeight + sMult) / nodeHeight;\n sHeight = nodeHeight * scaleY;\n }\n }\n cornerRadius = cornerRadius === 'auto' ? getRoundPolygonRadius(sWidth, sHeight) : cornerRadius;\n var halfW = sWidth / 2;\n var halfH = sHeight / 2;\n var radius = cornerRadius + (bWidth + outlineWidth + outlineOffset) / 2;\n var p = new Array(points.length / 2);\n var corners = new Array(points.length / 2);\n for (var _i2 = 0; _i2 < points.length / 2; _i2++) {\n p[_i2] = {\n x: npos.x + offsetX + halfW * points[_i2 * 2],\n y: npos.y + offsetY + halfH * points[_i2 * 2 + 1]\n };\n }\n var _i3,\n p1,\n p2,\n p3,\n len = p.length;\n p1 = p[len - 1];\n // for each point\n for (_i3 = 0; _i3 < len; _i3++) {\n p2 = p[_i3 % len];\n p3 = p[(_i3 + 1) % len];\n corners[_i3] = getRoundCorner(p1, p2, p3, radius);\n p1 = p2;\n p2 = p3;\n }\n r.drawRoundPolygonPath(_path || context, npos.x + offsetX, npos.y + offsetY, nodeWidth * scaleX, nodeHeight * scaleY, points, corners);\n } else if (['roundrectangle', 'round-rectangle'].includes(shape)) {\n cornerRadius = cornerRadius === 'auto' ? getRoundRectangleRadius(sWidth, sHeight) : cornerRadius;\n r.drawRoundRectanglePath(_path || context, npos.x, npos.y, sWidth, sHeight, cornerRadius + (bWidth + outlineWidth + outlineOffset) / 2);\n } else if (['cutrectangle', 'cut-rectangle'].includes(shape)) {\n cornerRadius = cornerRadius === 'auto' ? getCutRectangleCornerLength() : cornerRadius;\n r.drawCutRectanglePath(_path || context, npos.x, npos.y, sWidth, sHeight, null, cornerRadius + (bWidth + outlineWidth + outlineOffset) / 4);\n } else if (['bottomroundrectangle', 'bottom-round-rectangle'].includes(shape)) {\n cornerRadius = cornerRadius === 'auto' ? getRoundRectangleRadius(sWidth, sHeight) : cornerRadius;\n r.drawBottomRoundRectanglePath(_path || context, npos.x, npos.y, sWidth, sHeight, cornerRadius + (bWidth + outlineWidth + outlineOffset) / 2);\n } else if (shape === \"barrel\") {\n r.drawBarrelPath(_path || context, npos.x, npos.y, sWidth, sHeight);\n } else if (shape.startsWith(\"polygon\") || ['rhomboid', 'right-rhomboid', 'round-tag', 'tag', 'vee'].includes(shape)) {\n var pad = (bWidth + outlineWidth + outlineOffset) / nodeWidth;\n points = joinLines(expandPolygon(points, pad));\n r.drawPolygonPath(_path || context, npos.x, npos.y, nodeWidth, nodeHeight, points);\n } else {\n var _pad = (bWidth + outlineWidth + outlineOffset) / nodeWidth;\n points = joinLines(expandPolygon(points, -_pad));\n r.drawPolygonPath(_path || context, npos.x, npos.y, nodeWidth, nodeHeight, points);\n }\n if (usePaths) {\n context.stroke(_path);\n } else {\n context.stroke();\n }\n if (outlineStyle === 'double') {\n context.lineWidth = bWidth / 3;\n var gco = context.globalCompositeOperation;\n context.globalCompositeOperation = 'destination-out';\n if (usePaths) {\n context.stroke(_path);\n } else {\n context.stroke();\n }\n context.globalCompositeOperation = gco;\n }\n\n // reset in case we changed the border style\n if (context.setLineDash) {\n // for very outofdate browsers\n context.setLineDash([]);\n }\n }\n };\n var drawOverlay = function drawOverlay() {\n if (shouldDrawOverlay) {\n r.drawNodeOverlay(context, node, pos, nodeWidth, nodeHeight);\n }\n };\n var drawUnderlay = function drawUnderlay() {\n if (shouldDrawOverlay) {\n r.drawNodeUnderlay(context, node, pos, nodeWidth, nodeHeight);\n }\n };\n var drawText = function drawText() {\n r.drawElementText(context, node, null, drawLabel);\n };\n var ghost = node.pstyle('ghost').value === 'yes';\n if (ghost) {\n var gx = node.pstyle('ghost-offset-x').pfValue;\n var gy = node.pstyle('ghost-offset-y').pfValue;\n var ghostOpacity = node.pstyle('ghost-opacity').value;\n var effGhostOpacity = ghostOpacity * eleOpacity;\n context.translate(gx, gy);\n setupOutlineColor();\n drawOutline();\n setupShapeColor(ghostOpacity * bgOpacity);\n drawShape();\n drawImages(effGhostOpacity, true);\n setupBorderColor(ghostOpacity * borderOpacity);\n drawBorder();\n drawPie(darkness !== 0 || borderWidth !== 0);\n drawImages(effGhostOpacity, false);\n darken(effGhostOpacity);\n context.translate(-gx, -gy);\n }\n if (usePaths) {\n context.translate(-pos.x, -pos.y);\n }\n drawUnderlay();\n if (usePaths) {\n context.translate(pos.x, pos.y);\n }\n setupOutlineColor();\n drawOutline();\n setupShapeColor();\n drawShape();\n drawImages(eleOpacity, true);\n setupBorderColor();\n drawBorder();\n drawPie(darkness !== 0 || borderWidth !== 0);\n drawImages(eleOpacity, false);\n darken();\n if (usePaths) {\n context.translate(-pos.x, -pos.y);\n }\n drawText();\n drawOverlay();\n\n //\n // clean up shift\n\n if (shiftToOriginWithBb) {\n context.translate(bb.x1, bb.y1);\n }\n};\nvar drawNodeOverlayUnderlay = function drawNodeOverlayUnderlay(overlayOrUnderlay) {\n if (!['overlay', 'underlay'].includes(overlayOrUnderlay)) {\n throw new Error('Invalid state');\n }\n return function (context, node, pos, nodeWidth, nodeHeight) {\n var r = this;\n if (!node.visible()) {\n return;\n }\n var padding = node.pstyle(\"\".concat(overlayOrUnderlay, \"-padding\")).pfValue;\n var opacity = node.pstyle(\"\".concat(overlayOrUnderlay, \"-opacity\")).value;\n var color = node.pstyle(\"\".concat(overlayOrUnderlay, \"-color\")).value;\n var shape = node.pstyle(\"\".concat(overlayOrUnderlay, \"-shape\")).value;\n var radius = node.pstyle(\"\".concat(overlayOrUnderlay, \"-corner-radius\")).value;\n if (opacity > 0) {\n pos = pos || node.position();\n if (nodeWidth == null || nodeHeight == null) {\n var _padding = node.padding();\n nodeWidth = node.width() + 2 * _padding;\n nodeHeight = node.height() + 2 * _padding;\n }\n r.colorFillStyle(context, color[0], color[1], color[2], opacity);\n r.nodeShapes[shape].draw(context, pos.x, pos.y, nodeWidth + padding * 2, nodeHeight + padding * 2, radius);\n context.fill();\n }\n };\n};\nCRp$6.drawNodeOverlay = drawNodeOverlayUnderlay('overlay');\nCRp$6.drawNodeUnderlay = drawNodeOverlayUnderlay('underlay');\n\n// does the node have at least one pie piece?\nCRp$6.hasPie = function (node) {\n node = node[0]; // ensure ele ref\n\n return node._private.hasPie;\n};\nCRp$6.drawPie = function (context, node, nodeOpacity, pos) {\n node = node[0]; // ensure ele ref\n pos = pos || node.position();\n var cyStyle = node.cy().style();\n var pieSize = node.pstyle('pie-size');\n var x = pos.x;\n var y = pos.y;\n var nodeW = node.width();\n var nodeH = node.height();\n var radius = Math.min(nodeW, nodeH) / 2; // must fit in node\n var lastPercent = 0; // what % to continue drawing pie slices from on [0, 1]\n var usePaths = this.usePaths();\n if (usePaths) {\n x = 0;\n y = 0;\n }\n if (pieSize.units === '%') {\n radius = radius * pieSize.pfValue;\n } else if (pieSize.pfValue !== undefined) {\n radius = pieSize.pfValue / 2;\n }\n for (var i = 1; i <= cyStyle.pieBackgroundN; i++) {\n // 1..N\n var size = node.pstyle('pie-' + i + '-background-size').value;\n var color = node.pstyle('pie-' + i + '-background-color').value;\n var opacity = node.pstyle('pie-' + i + '-background-opacity').value * nodeOpacity;\n var percent = size / 100; // map integer range [0, 100] to [0, 1]\n\n // percent can't push beyond 1\n if (percent + lastPercent > 1) {\n percent = 1 - lastPercent;\n }\n var angleStart = 1.5 * Math.PI + 2 * Math.PI * lastPercent; // start at 12 o'clock and go clockwise\n var angleDelta = 2 * Math.PI * percent;\n var angleEnd = angleStart + angleDelta;\n\n // ignore if\n // - zero size\n // - we're already beyond the full circle\n // - adding the current slice would go beyond the full circle\n if (size === 0 || lastPercent >= 1 || lastPercent + percent > 1) {\n continue;\n }\n context.beginPath();\n context.moveTo(x, y);\n context.arc(x, y, radius, angleStart, angleEnd);\n context.closePath();\n this.colorFillStyle(context, color[0], color[1], color[2], opacity);\n context.fill();\n lastPercent += percent;\n }\n};\n\nvar CRp$5 = {};\nvar motionBlurDelay = 100;\n\n// var isFirefox = typeof InstallTrigger !== 'undefined';\n\nCRp$5.getPixelRatio = function () {\n var context = this.data.contexts[0];\n if (this.forcedPixelRatio != null) {\n return this.forcedPixelRatio;\n }\n var containerWindow = this.cy.window();\n var backingStore = context.backingStorePixelRatio || context.webkitBackingStorePixelRatio || context.mozBackingStorePixelRatio || context.msBackingStorePixelRatio || context.oBackingStorePixelRatio || context.backingStorePixelRatio || 1;\n return (containerWindow.devicePixelRatio || 1) / backingStore; // eslint-disable-line no-undef\n};\nCRp$5.paintCache = function (context) {\n var caches = this.paintCaches = this.paintCaches || [];\n var needToCreateCache = true;\n var cache;\n for (var i = 0; i < caches.length; i++) {\n cache = caches[i];\n if (cache.context === context) {\n needToCreateCache = false;\n break;\n }\n }\n if (needToCreateCache) {\n cache = {\n context: context\n };\n caches.push(cache);\n }\n return cache;\n};\nCRp$5.createGradientStyleFor = function (context, shapeStyleName, ele, fill, opacity) {\n var gradientStyle;\n var usePaths = this.usePaths();\n var colors = ele.pstyle(shapeStyleName + '-gradient-stop-colors').value,\n positions = ele.pstyle(shapeStyleName + '-gradient-stop-positions').pfValue;\n if (fill === 'radial-gradient') {\n if (ele.isEdge()) {\n var start = ele.sourceEndpoint(),\n end = ele.targetEndpoint(),\n mid = ele.midpoint();\n var d1 = dist(start, mid);\n var d2 = dist(end, mid);\n gradientStyle = context.createRadialGradient(mid.x, mid.y, 0, mid.x, mid.y, Math.max(d1, d2));\n } else {\n var pos = usePaths ? {\n x: 0,\n y: 0\n } : ele.position(),\n width = ele.paddedWidth(),\n height = ele.paddedHeight();\n gradientStyle = context.createRadialGradient(pos.x, pos.y, 0, pos.x, pos.y, Math.max(width, height));\n }\n } else {\n if (ele.isEdge()) {\n var _start = ele.sourceEndpoint(),\n _end = ele.targetEndpoint();\n gradientStyle = context.createLinearGradient(_start.x, _start.y, _end.x, _end.y);\n } else {\n var _pos = usePaths ? {\n x: 0,\n y: 0\n } : ele.position(),\n _width = ele.paddedWidth(),\n _height = ele.paddedHeight(),\n halfWidth = _width / 2,\n halfHeight = _height / 2;\n var direction = ele.pstyle('background-gradient-direction').value;\n switch (direction) {\n case 'to-bottom':\n gradientStyle = context.createLinearGradient(_pos.x, _pos.y - halfHeight, _pos.x, _pos.y + halfHeight);\n break;\n case 'to-top':\n gradientStyle = context.createLinearGradient(_pos.x, _pos.y + halfHeight, _pos.x, _pos.y - halfHeight);\n break;\n case 'to-left':\n gradientStyle = context.createLinearGradient(_pos.x + halfWidth, _pos.y, _pos.x - halfWidth, _pos.y);\n break;\n case 'to-right':\n gradientStyle = context.createLinearGradient(_pos.x - halfWidth, _pos.y, _pos.x + halfWidth, _pos.y);\n break;\n case 'to-bottom-right':\n case 'to-right-bottom':\n gradientStyle = context.createLinearGradient(_pos.x - halfWidth, _pos.y - halfHeight, _pos.x + halfWidth, _pos.y + halfHeight);\n break;\n case 'to-top-right':\n case 'to-right-top':\n gradientStyle = context.createLinearGradient(_pos.x - halfWidth, _pos.y + halfHeight, _pos.x + halfWidth, _pos.y - halfHeight);\n break;\n case 'to-bottom-left':\n case 'to-left-bottom':\n gradientStyle = context.createLinearGradient(_pos.x + halfWidth, _pos.y - halfHeight, _pos.x - halfWidth, _pos.y + halfHeight);\n break;\n case 'to-top-left':\n case 'to-left-top':\n gradientStyle = context.createLinearGradient(_pos.x + halfWidth, _pos.y + halfHeight, _pos.x - halfWidth, _pos.y - halfHeight);\n break;\n }\n }\n }\n if (!gradientStyle) return null; // invalid gradient style\n\n var hasPositions = positions.length === colors.length;\n var length = colors.length;\n for (var i = 0; i < length; i++) {\n gradientStyle.addColorStop(hasPositions ? positions[i] : i / (length - 1), 'rgba(' + colors[i][0] + ',' + colors[i][1] + ',' + colors[i][2] + ',' + opacity + ')');\n }\n return gradientStyle;\n};\nCRp$5.gradientFillStyle = function (context, ele, fill, opacity) {\n var gradientStyle = this.createGradientStyleFor(context, 'background', ele, fill, opacity);\n if (!gradientStyle) return null; // error\n context.fillStyle = gradientStyle;\n};\nCRp$5.colorFillStyle = function (context, r, g, b, a) {\n context.fillStyle = 'rgba(' + r + ',' + g + ',' + b + ',' + a + ')';\n // turn off for now, seems context does its own caching\n\n // var cache = this.paintCache(context);\n\n // var fillStyle = 'rgba(' + r + ',' + g + ',' + b + ',' + a + ')';\n\n // if( cache.fillStyle !== fillStyle ){\n // context.fillStyle = cache.fillStyle = fillStyle;\n // }\n};\nCRp$5.eleFillStyle = function (context, ele, opacity) {\n var backgroundFill = ele.pstyle('background-fill').value;\n if (backgroundFill === 'linear-gradient' || backgroundFill === 'radial-gradient') {\n this.gradientFillStyle(context, ele, backgroundFill, opacity);\n } else {\n var backgroundColor = ele.pstyle('background-color').value;\n this.colorFillStyle(context, backgroundColor[0], backgroundColor[1], backgroundColor[2], opacity);\n }\n};\nCRp$5.gradientStrokeStyle = function (context, ele, fill, opacity) {\n var gradientStyle = this.createGradientStyleFor(context, 'line', ele, fill, opacity);\n if (!gradientStyle) return null; // error\n context.strokeStyle = gradientStyle;\n};\nCRp$5.colorStrokeStyle = function (context, r, g, b, a) {\n context.strokeStyle = 'rgba(' + r + ',' + g + ',' + b + ',' + a + ')';\n // turn off for now, seems context does its own caching\n\n // var cache = this.paintCache(context);\n\n // var strokeStyle = 'rgba(' + r + ',' + g + ',' + b + ',' + a + ')';\n\n // if( cache.strokeStyle !== strokeStyle ){\n // context.strokeStyle = cache.strokeStyle = strokeStyle;\n // }\n};\nCRp$5.eleStrokeStyle = function (context, ele, opacity) {\n var lineFill = ele.pstyle('line-fill').value;\n if (lineFill === 'linear-gradient' || lineFill === 'radial-gradient') {\n this.gradientStrokeStyle(context, ele, lineFill, opacity);\n } else {\n var lineColor = ele.pstyle('line-color').value;\n this.colorStrokeStyle(context, lineColor[0], lineColor[1], lineColor[2], opacity);\n }\n};\n\n// Resize canvas\nCRp$5.matchCanvasSize = function (container) {\n var r = this;\n var data = r.data;\n var bb = r.findContainerClientCoords();\n var width = bb[2];\n var height = bb[3];\n var pixelRatio = r.getPixelRatio();\n var mbPxRatio = r.motionBlurPxRatio;\n if (container === r.data.bufferCanvases[r.MOTIONBLUR_BUFFER_NODE] || container === r.data.bufferCanvases[r.MOTIONBLUR_BUFFER_DRAG]) {\n pixelRatio = mbPxRatio;\n }\n var canvasWidth = width * pixelRatio;\n var canvasHeight = height * pixelRatio;\n var canvas;\n if (canvasWidth === r.canvasWidth && canvasHeight === r.canvasHeight) {\n return; // save cycles if same\n }\n r.fontCaches = null; // resizing resets the style\n\n var canvasContainer = data.canvasContainer;\n canvasContainer.style.width = width + 'px';\n canvasContainer.style.height = height + 'px';\n for (var i = 0; i < r.CANVAS_LAYERS; i++) {\n canvas = data.canvases[i];\n canvas.width = canvasWidth;\n canvas.height = canvasHeight;\n canvas.style.width = width + 'px';\n canvas.style.height = height + 'px';\n }\n for (var i = 0; i < r.BUFFER_COUNT; i++) {\n canvas = data.bufferCanvases[i];\n canvas.width = canvasWidth;\n canvas.height = canvasHeight;\n canvas.style.width = width + 'px';\n canvas.style.height = height + 'px';\n }\n r.textureMult = 1;\n if (pixelRatio <= 1) {\n canvas = data.bufferCanvases[r.TEXTURE_BUFFER];\n r.textureMult = 2;\n canvas.width = canvasWidth * r.textureMult;\n canvas.height = canvasHeight * r.textureMult;\n }\n r.canvasWidth = canvasWidth;\n r.canvasHeight = canvasHeight;\n r.pixelRatio = pixelRatio;\n};\nCRp$5.renderTo = function (cxt, zoom, pan, pxRatio) {\n this.render({\n forcedContext: cxt,\n forcedZoom: zoom,\n forcedPan: pan,\n drawAllLayers: true,\n forcedPxRatio: pxRatio\n });\n};\nCRp$5.clearCanvas = function () {\n var r = this;\n var data = r.data;\n function clear(context) {\n context.clearRect(0, 0, r.canvasWidth, r.canvasHeight);\n }\n clear(data.contexts[r.NODE]);\n clear(data.contexts[r.DRAG]);\n};\nCRp$5.render = function (options) {\n var r = this;\n options = options || staticEmptyObject();\n var cy = r.cy;\n var forcedContext = options.forcedContext;\n var drawAllLayers = options.drawAllLayers;\n var drawOnlyNodeLayer = options.drawOnlyNodeLayer;\n var forcedZoom = options.forcedZoom;\n var forcedPan = options.forcedPan;\n var pixelRatio = options.forcedPxRatio === undefined ? this.getPixelRatio() : options.forcedPxRatio;\n var data = r.data;\n var needDraw = data.canvasNeedsRedraw;\n var textureDraw = r.textureOnViewport && !forcedContext && (r.pinching || r.hoverData.dragging || r.swipePanning || r.data.wheelZooming);\n var motionBlur = options.motionBlur !== undefined ? options.motionBlur : r.motionBlur;\n var mbPxRatio = r.motionBlurPxRatio;\n var hasCompoundNodes = cy.hasCompoundNodes();\n var inNodeDragGesture = r.hoverData.draggingEles;\n var inBoxSelection = r.hoverData.selecting || r.touchData.selecting ? true : false;\n motionBlur = motionBlur && !forcedContext && r.motionBlurEnabled && !inBoxSelection;\n var motionBlurFadeEffect = motionBlur;\n if (!forcedContext) {\n if (r.prevPxRatio !== pixelRatio) {\n r.invalidateContainerClientCoordsCache();\n r.matchCanvasSize(r.container);\n r.redrawHint('eles', true);\n r.redrawHint('drag', true);\n }\n r.prevPxRatio = pixelRatio;\n }\n if (!forcedContext && r.motionBlurTimeout) {\n clearTimeout(r.motionBlurTimeout);\n }\n if (motionBlur) {\n if (r.mbFrames == null) {\n r.mbFrames = 0;\n }\n r.mbFrames++;\n if (r.mbFrames < 3) {\n // need several frames before even high quality motionblur\n motionBlurFadeEffect = false;\n }\n\n // go to lower quality blurry frames when several m/b frames have been rendered (avoids flashing)\n if (r.mbFrames > r.minMbLowQualFrames) {\n //r.fullQualityMb = false;\n r.motionBlurPxRatio = r.mbPxRBlurry;\n }\n }\n if (r.clearingMotionBlur) {\n r.motionBlurPxRatio = 1;\n }\n\n // b/c drawToContext() may be async w.r.t. redraw(), keep track of last texture frame\n // because a rogue async texture frame would clear needDraw\n if (r.textureDrawLastFrame && !textureDraw) {\n needDraw[r.NODE] = true;\n needDraw[r.SELECT_BOX] = true;\n }\n var style = cy.style();\n var zoom = cy.zoom();\n var effectiveZoom = forcedZoom !== undefined ? forcedZoom : zoom;\n var pan = cy.pan();\n var effectivePan = {\n x: pan.x,\n y: pan.y\n };\n var vp = {\n zoom: zoom,\n pan: {\n x: pan.x,\n y: pan.y\n }\n };\n var prevVp = r.prevViewport;\n var viewportIsDiff = prevVp === undefined || vp.zoom !== prevVp.zoom || vp.pan.x !== prevVp.pan.x || vp.pan.y !== prevVp.pan.y;\n\n // we want the low quality motionblur only when the viewport is being manipulated etc (where it's not noticed)\n if (!viewportIsDiff && !(inNodeDragGesture && !hasCompoundNodes)) {\n r.motionBlurPxRatio = 1;\n }\n if (forcedPan) {\n effectivePan = forcedPan;\n }\n\n // apply pixel ratio\n\n effectiveZoom *= pixelRatio;\n effectivePan.x *= pixelRatio;\n effectivePan.y *= pixelRatio;\n var eles = r.getCachedZSortedEles();\n function mbclear(context, x, y, w, h) {\n var gco = context.globalCompositeOperation;\n context.globalCompositeOperation = 'destination-out';\n r.colorFillStyle(context, 255, 255, 255, r.motionBlurTransparency);\n context.fillRect(x, y, w, h);\n context.globalCompositeOperation = gco;\n }\n function setContextTransform(context, clear) {\n var ePan, eZoom, w, h;\n if (!r.clearingMotionBlur && (context === data.bufferContexts[r.MOTIONBLUR_BUFFER_NODE] || context === data.bufferContexts[r.MOTIONBLUR_BUFFER_DRAG])) {\n ePan = {\n x: pan.x * mbPxRatio,\n y: pan.y * mbPxRatio\n };\n eZoom = zoom * mbPxRatio;\n w = r.canvasWidth * mbPxRatio;\n h = r.canvasHeight * mbPxRatio;\n } else {\n ePan = effectivePan;\n eZoom = effectiveZoom;\n w = r.canvasWidth;\n h = r.canvasHeight;\n }\n context.setTransform(1, 0, 0, 1, 0, 0);\n if (clear === 'motionBlur') {\n mbclear(context, 0, 0, w, h);\n } else if (!forcedContext && (clear === undefined || clear)) {\n context.clearRect(0, 0, w, h);\n }\n if (!drawAllLayers) {\n context.translate(ePan.x, ePan.y);\n context.scale(eZoom, eZoom);\n }\n if (forcedPan) {\n context.translate(forcedPan.x, forcedPan.y);\n }\n if (forcedZoom) {\n context.scale(forcedZoom, forcedZoom);\n }\n }\n if (!textureDraw) {\n r.textureDrawLastFrame = false;\n }\n if (textureDraw) {\n r.textureDrawLastFrame = true;\n if (!r.textureCache) {\n r.textureCache = {};\n r.textureCache.bb = cy.mutableElements().boundingBox();\n r.textureCache.texture = r.data.bufferCanvases[r.TEXTURE_BUFFER];\n var cxt = r.data.bufferContexts[r.TEXTURE_BUFFER];\n cxt.setTransform(1, 0, 0, 1, 0, 0);\n cxt.clearRect(0, 0, r.canvasWidth * r.textureMult, r.canvasHeight * r.textureMult);\n r.render({\n forcedContext: cxt,\n drawOnlyNodeLayer: true,\n forcedPxRatio: pixelRatio * r.textureMult\n });\n var vp = r.textureCache.viewport = {\n zoom: cy.zoom(),\n pan: cy.pan(),\n width: r.canvasWidth,\n height: r.canvasHeight\n };\n vp.mpan = {\n x: (0 - vp.pan.x) / vp.zoom,\n y: (0 - vp.pan.y) / vp.zoom\n };\n }\n needDraw[r.DRAG] = false;\n needDraw[r.NODE] = false;\n var context = data.contexts[r.NODE];\n var texture = r.textureCache.texture;\n var vp = r.textureCache.viewport;\n context.setTransform(1, 0, 0, 1, 0, 0);\n if (motionBlur) {\n mbclear(context, 0, 0, vp.width, vp.height);\n } else {\n context.clearRect(0, 0, vp.width, vp.height);\n }\n var outsideBgColor = style.core('outside-texture-bg-color').value;\n var outsideBgOpacity = style.core('outside-texture-bg-opacity').value;\n r.colorFillStyle(context, outsideBgColor[0], outsideBgColor[1], outsideBgColor[2], outsideBgOpacity);\n context.fillRect(0, 0, vp.width, vp.height);\n var zoom = cy.zoom();\n setContextTransform(context, false);\n context.clearRect(vp.mpan.x, vp.mpan.y, vp.width / vp.zoom / pixelRatio, vp.height / vp.zoom / pixelRatio);\n context.drawImage(texture, vp.mpan.x, vp.mpan.y, vp.width / vp.zoom / pixelRatio, vp.height / vp.zoom / pixelRatio);\n } else if (r.textureOnViewport && !forcedContext) {\n // clear the cache since we don't need it\n r.textureCache = null;\n }\n var extent = cy.extent();\n var vpManip = r.pinching || r.hoverData.dragging || r.swipePanning || r.data.wheelZooming || r.hoverData.draggingEles || r.cy.animated();\n var hideEdges = r.hideEdgesOnViewport && vpManip;\n var needMbClear = [];\n needMbClear[r.NODE] = !needDraw[r.NODE] && motionBlur && !r.clearedForMotionBlur[r.NODE] || r.clearingMotionBlur;\n if (needMbClear[r.NODE]) {\n r.clearedForMotionBlur[r.NODE] = true;\n }\n needMbClear[r.DRAG] = !needDraw[r.DRAG] && motionBlur && !r.clearedForMotionBlur[r.DRAG] || r.clearingMotionBlur;\n if (needMbClear[r.DRAG]) {\n r.clearedForMotionBlur[r.DRAG] = true;\n }\n if (needDraw[r.NODE] || drawAllLayers || drawOnlyNodeLayer || needMbClear[r.NODE]) {\n var useBuffer = motionBlur && !needMbClear[r.NODE] && mbPxRatio !== 1;\n var context = forcedContext || (useBuffer ? r.data.bufferContexts[r.MOTIONBLUR_BUFFER_NODE] : data.contexts[r.NODE]);\n var clear = motionBlur && !useBuffer ? 'motionBlur' : undefined;\n setContextTransform(context, clear);\n if (hideEdges) {\n r.drawCachedNodes(context, eles.nondrag, pixelRatio, extent);\n } else {\n r.drawLayeredElements(context, eles.nondrag, pixelRatio, extent);\n }\n if (r.debug) {\n r.drawDebugPoints(context, eles.nondrag);\n }\n if (!drawAllLayers && !motionBlur) {\n needDraw[r.NODE] = false;\n }\n }\n if (!drawOnlyNodeLayer && (needDraw[r.DRAG] || drawAllLayers || needMbClear[r.DRAG])) {\n var useBuffer = motionBlur && !needMbClear[r.DRAG] && mbPxRatio !== 1;\n var context = forcedContext || (useBuffer ? r.data.bufferContexts[r.MOTIONBLUR_BUFFER_DRAG] : data.contexts[r.DRAG]);\n setContextTransform(context, motionBlur && !useBuffer ? 'motionBlur' : undefined);\n if (hideEdges) {\n r.drawCachedNodes(context, eles.drag, pixelRatio, extent);\n } else {\n r.drawCachedElements(context, eles.drag, pixelRatio, extent);\n }\n if (r.debug) {\n r.drawDebugPoints(context, eles.drag);\n }\n if (!drawAllLayers && !motionBlur) {\n needDraw[r.DRAG] = false;\n }\n }\n this.drawSelectionRectangle(options, setContextTransform);\n\n // motionblur: blit rendered blurry frames\n if (motionBlur && mbPxRatio !== 1) {\n var cxtNode = data.contexts[r.NODE];\n var txtNode = r.data.bufferCanvases[r.MOTIONBLUR_BUFFER_NODE];\n var cxtDrag = data.contexts[r.DRAG];\n var txtDrag = r.data.bufferCanvases[r.MOTIONBLUR_BUFFER_DRAG];\n var drawMotionBlur = function drawMotionBlur(cxt, txt, needClear) {\n cxt.setTransform(1, 0, 0, 1, 0, 0);\n if (needClear || !motionBlurFadeEffect) {\n cxt.clearRect(0, 0, r.canvasWidth, r.canvasHeight);\n } else {\n mbclear(cxt, 0, 0, r.canvasWidth, r.canvasHeight);\n }\n var pxr = mbPxRatio;\n cxt.drawImage(txt,\n // img\n 0, 0,\n // sx, sy\n r.canvasWidth * pxr, r.canvasHeight * pxr,\n // sw, sh\n 0, 0,\n // x, y\n r.canvasWidth, r.canvasHeight // w, h\n );\n };\n if (needDraw[r.NODE] || needMbClear[r.NODE]) {\n drawMotionBlur(cxtNode, txtNode, needMbClear[r.NODE]);\n needDraw[r.NODE] = false;\n }\n if (needDraw[r.DRAG] || needMbClear[r.DRAG]) {\n drawMotionBlur(cxtDrag, txtDrag, needMbClear[r.DRAG]);\n needDraw[r.DRAG] = false;\n }\n }\n r.prevViewport = vp;\n if (r.clearingMotionBlur) {\n r.clearingMotionBlur = false;\n r.motionBlurCleared = true;\n r.motionBlur = true;\n }\n if (motionBlur) {\n r.motionBlurTimeout = setTimeout(function () {\n r.motionBlurTimeout = null;\n r.clearedForMotionBlur[r.NODE] = false;\n r.clearedForMotionBlur[r.DRAG] = false;\n r.motionBlur = false;\n r.clearingMotionBlur = !textureDraw;\n r.mbFrames = 0;\n needDraw[r.NODE] = true;\n needDraw[r.DRAG] = true;\n r.redraw();\n }, motionBlurDelay);\n }\n if (!forcedContext) {\n cy.emit('render');\n }\n};\nvar fpsHeight;\nCRp$5.drawSelectionRectangle = function (options, setContextTransform) {\n var r = this;\n var cy = r.cy;\n var data = r.data;\n var style = cy.style();\n var drawOnlyNodeLayer = options.drawOnlyNodeLayer;\n var drawAllLayers = options.drawAllLayers;\n var needDraw = data.canvasNeedsRedraw;\n var forcedContext = options.forcedContext;\n if (r.showFps || !drawOnlyNodeLayer && needDraw[r.SELECT_BOX] && !drawAllLayers) {\n var context = forcedContext || data.contexts[r.SELECT_BOX];\n setContextTransform(context);\n if (r.selection[4] == 1 && (r.hoverData.selecting || r.touchData.selecting)) {\n var zoom = r.cy.zoom();\n var borderWidth = style.core('selection-box-border-width').value / zoom;\n context.lineWidth = borderWidth;\n context.fillStyle = 'rgba(' + style.core('selection-box-color').value[0] + ',' + style.core('selection-box-color').value[1] + ',' + style.core('selection-box-color').value[2] + ',' + style.core('selection-box-opacity').value + ')';\n context.fillRect(r.selection[0], r.selection[1], r.selection[2] - r.selection[0], r.selection[3] - r.selection[1]);\n if (borderWidth > 0) {\n context.strokeStyle = 'rgba(' + style.core('selection-box-border-color').value[0] + ',' + style.core('selection-box-border-color').value[1] + ',' + style.core('selection-box-border-color').value[2] + ',' + style.core('selection-box-opacity').value + ')';\n context.strokeRect(r.selection[0], r.selection[1], r.selection[2] - r.selection[0], r.selection[3] - r.selection[1]);\n }\n }\n if (data.bgActivePosistion && !r.hoverData.selecting) {\n var zoom = r.cy.zoom();\n var pos = data.bgActivePosistion;\n context.fillStyle = 'rgba(' + style.core('active-bg-color').value[0] + ',' + style.core('active-bg-color').value[1] + ',' + style.core('active-bg-color').value[2] + ',' + style.core('active-bg-opacity').value + ')';\n context.beginPath();\n context.arc(pos.x, pos.y, style.core('active-bg-size').pfValue / zoom, 0, 2 * Math.PI);\n context.fill();\n }\n var timeToRender = r.lastRedrawTime;\n if (r.showFps && timeToRender) {\n timeToRender = Math.round(timeToRender);\n var fps = Math.round(1000 / timeToRender);\n var text = '1 frame = ' + timeToRender + ' ms = ' + fps + ' fps';\n context.setTransform(1, 0, 0, 1, 0, 0);\n context.fillStyle = 'rgba(255, 0, 0, 0.75)';\n context.strokeStyle = 'rgba(255, 0, 0, 0.75)';\n // context.lineWidth = 1;\n context.font = '30px Arial';\n if (!fpsHeight) {\n var dims = context.measureText(text);\n fpsHeight = dims.actualBoundingBoxAscent;\n }\n context.fillText(text, 0, fpsHeight);\n var maxFps = 60;\n context.strokeRect(0, fpsHeight + 10, 250, 20);\n context.fillRect(0, fpsHeight + 10, 250 * Math.min(fps / maxFps, 1), 20);\n }\n if (!drawAllLayers) {\n needDraw[r.SELECT_BOX] = false;\n }\n }\n};\n\n/**\n * Notes:\n * - All colors have premultiplied alpha. Very important for textues and \n * blending to work correctly.\n */\n\nfunction compileShader(gl, type, source) {\n var shader = gl.createShader(type);\n gl.shaderSource(shader, source);\n gl.compileShader(shader);\n if (!gl.getShaderParameter(shader, gl.COMPILE_STATUS)) {\n throw new Error(gl.getShaderInfoLog(shader));\n }\n // console.log(gl.getShaderInfoLog(shader));\n return shader;\n}\nfunction createProgram(gl, vertexSource, fragementSource) {\n var vertexShader = compileShader(gl, gl.VERTEX_SHADER, vertexSource);\n var fragmentShader = compileShader(gl, gl.FRAGMENT_SHADER, fragementSource);\n var program = gl.createProgram();\n gl.attachShader(program, vertexShader);\n gl.attachShader(program, fragmentShader);\n gl.linkProgram(program);\n if (!gl.getProgramParameter(program, gl.LINK_STATUS)) {\n throw new Error('Could not initialize shaders');\n }\n return program;\n}\n\n/**\n * Creates an offscren canvas with a 2D context, for the\n * canvas renderer to use for drawing textures.\n */\nfunction createTextureCanvas(r, width, height) {\n if (height === undefined) {\n height = width;\n }\n var canvas = r.makeOffscreenCanvas(width, height);\n var ctx = canvas.context = canvas.getContext('2d');\n canvas.clear = function () {\n return ctx.clearRect(0, 0, canvas.width, canvas.height);\n };\n canvas.clear();\n return canvas;\n}\n\n/**\n * Returns the current pan & zoom values, scaled by the pixel ratio.\n */\nfunction getEffectivePanZoom(r) {\n var pixelRatio = r.pixelRatio;\n var zoom = r.cy.zoom();\n var pan = r.cy.pan();\n return {\n zoom: zoom * pixelRatio,\n pan: {\n x: pan.x * pixelRatio,\n y: pan.y * pixelRatio\n }\n };\n}\nfunction modelToRenderedPosition(r, pan, zoom, x, y) {\n var rx = x * zoom + pan.x;\n var ry = y * zoom + pan.y;\n ry = Math.round(r.canvasHeight - ry); // adjust for webgl\n return [rx, ry];\n}\n\n/**\n * Takes color & opacity style values and converts them to WebGL format. \n * Alpha is premultiplied.\n */\nfunction toWebGLColor(color, opacity, outArray) {\n var r = color[0] / 255;\n var g = color[1] / 255;\n var b = color[2] / 255;\n var a = opacity;\n var arr = outArray || new Array(4);\n arr[0] = r * a;\n arr[1] = g * a;\n arr[2] = b * a;\n arr[3] = a;\n return arr;\n}\nfunction indexToVec4(index, outArray) {\n var arr = outArray || new Array(4);\n arr[0] = (index >> 0 & 0xFF) / 0xFF;\n arr[1] = (index >> 8 & 0xFF) / 0xFF;\n arr[2] = (index >> 16 & 0xFF) / 0xFF;\n arr[3] = (index >> 24 & 0xFF) / 0xFF;\n return arr;\n}\nfunction vec4ToIndex(vec4) {\n return vec4[0] + (vec4[1] << 8) + (vec4[2] << 16) + (vec4[3] << 24);\n}\nfunction createTexture(gl, debugID) {\n var texture = gl.createTexture();\n texture.buffer = function (offscreenCanvas) {\n gl.bindTexture(gl.TEXTURE_2D, texture);\n gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_S, gl.CLAMP_TO_EDGE);\n gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_T, gl.CLAMP_TO_EDGE);\n gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MAG_FILTER, gl.LINEAR);\n gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MIN_FILTER, gl.LINEAR_MIPMAP_NEAREST);\n\n // very important, this tells webgl to premultiply colors by the alpha channel\n gl.pixelStorei(gl.UNPACK_PREMULTIPLY_ALPHA_WEBGL, true);\n gl.texImage2D(gl.TEXTURE_2D, 0, gl.RGBA, gl.RGBA, gl.UNSIGNED_BYTE, offscreenCanvas);\n gl.generateMipmap(gl.TEXTURE_2D);\n gl.bindTexture(gl.TEXTURE_2D, null);\n };\n texture.deleteTexture = function () {\n gl.deleteTexture(texture);\n };\n return texture;\n}\nfunction getTypeInfo(gl, glslType) {\n switch (glslType) {\n case 'float':\n return [1, gl.FLOAT, 4];\n case 'vec2':\n return [2, gl.FLOAT, 4];\n case 'vec3':\n return [3, gl.FLOAT, 4];\n case 'vec4':\n return [4, gl.FLOAT, 4];\n case 'int':\n return [1, gl.INT, 4];\n case 'ivec2':\n return [2, gl.INT, 4];\n }\n}\nfunction createTypedArray(gl, glType, dataOrSize) {\n switch (glType) {\n case gl.FLOAT:\n return new Float32Array(dataOrSize);\n case gl.INT:\n return new Int32Array(dataOrSize);\n }\n}\nfunction createTypedArrayView(gl, glType, array, stride, size, i) {\n switch (glType) {\n case gl.FLOAT:\n return new Float32Array(array.buffer, i * stride, size);\n case gl.INT:\n return new Int32Array(array.buffer, i * stride, size);\n }\n}\n\n/** @param {WebGLRenderingContext} gl */\nfunction createBufferStaticDraw(gl, type, attributeLoc, dataArray) {\n var _getTypeInfo = getTypeInfo(gl, type),\n _getTypeInfo2 = _slicedToArray(_getTypeInfo, 2),\n size = _getTypeInfo2[0],\n glType = _getTypeInfo2[1];\n var data = createTypedArray(gl, glType, dataArray);\n var buffer = gl.createBuffer();\n gl.bindBuffer(gl.ARRAY_BUFFER, buffer);\n gl.bufferData(gl.ARRAY_BUFFER, data, gl.STATIC_DRAW);\n if (glType === gl.FLOAT) {\n gl.vertexAttribPointer(attributeLoc, size, glType, false, 0, 0);\n } else if (glType === gl.INT) {\n gl.vertexAttribIPointer(attributeLoc, size, glType, 0, 0);\n }\n gl.enableVertexAttribArray(attributeLoc);\n gl.bindBuffer(gl.ARRAY_BUFFER, null);\n return buffer;\n}\n\n/** \n * Creates a float buffer with gl.DYNAMIC_DRAW.\n * The returned buffer object contains functions to easily set instance data and buffer the data before a draw call.\n * @param {WebGLRenderingContext} gl \n */\nfunction createBufferDynamicDraw(gl, instances, type, attributeLoc) {\n var _getTypeInfo3 = getTypeInfo(gl, type),\n _getTypeInfo4 = _slicedToArray(_getTypeInfo3, 3),\n size = _getTypeInfo4[0],\n glType = _getTypeInfo4[1],\n bytes = _getTypeInfo4[2];\n var dataArray = createTypedArray(gl, glType, instances * size);\n var stride = size * bytes;\n var buffer = gl.createBuffer();\n gl.bindBuffer(gl.ARRAY_BUFFER, buffer);\n gl.bufferData(gl.ARRAY_BUFFER, instances * stride, gl.DYNAMIC_DRAW);\n gl.enableVertexAttribArray(attributeLoc);\n if (glType === gl.FLOAT) {\n gl.vertexAttribPointer(attributeLoc, size, glType, false, stride, 0);\n } else if (glType === gl.INT) {\n gl.vertexAttribIPointer(attributeLoc, size, glType, stride, 0);\n }\n gl.vertexAttribDivisor(attributeLoc, 1);\n gl.bindBuffer(gl.ARRAY_BUFFER, null);\n\n // use array views to set values directly into the buffer array\n var views = new Array(instances);\n for (var i = 0; i < instances; i++) {\n views[i] = createTypedArrayView(gl, glType, dataArray, stride, size, i);\n }\n buffer.dataArray = dataArray;\n buffer.stride = stride;\n buffer.size = size;\n buffer.getView = function (i) {\n return views[i];\n };\n buffer.setPoint = function (i, x, y) {\n var view = views[i];\n view[0] = x;\n view[1] = y;\n };\n buffer.bufferSubData = function (count) {\n gl.bindBuffer(gl.ARRAY_BUFFER, buffer);\n if (count) {\n gl.bufferSubData(gl.ARRAY_BUFFER, 0, dataArray, 0, count * size);\n } else {\n gl.bufferSubData(gl.ARRAY_BUFFER, 0, dataArray);\n }\n };\n return buffer;\n}\n\n/** \n * Creates a buffer of 3x3 matrix data for use as attribute data.\n * @param {WebGLRenderingContext} gl \n */\nfunction create3x3MatrixBufferDynamicDraw(gl, instances, attributeLoc) {\n var matrixSize = 9; // 3x3 matrix\n var matrixData = new Float32Array(instances * matrixSize);\n\n // use matrix views to set values directly into the matrixData array\n var matrixViews = new Array(instances);\n for (var i = 0; i < instances; i++) {\n var byteOffset = i * matrixSize * 4; // 4 bytes per float\n matrixViews[i] = new Float32Array(matrixData.buffer, byteOffset, matrixSize); // array view\n }\n var buffer = gl.createBuffer();\n gl.bindBuffer(gl.ARRAY_BUFFER, buffer);\n gl.bufferData(gl.ARRAY_BUFFER, matrixData.byteLength, gl.DYNAMIC_DRAW);\n\n // each row of the matrix needs to be a separate attribute\n for (var _i = 0; _i < 3; _i++) {\n var loc = attributeLoc + _i;\n gl.enableVertexAttribArray(loc);\n gl.vertexAttribPointer(loc, 3, gl.FLOAT, false, 3 * 12, _i * 12);\n gl.vertexAttribDivisor(loc, 1);\n }\n gl.bindBuffer(gl.ARRAY_BUFFER, null);\n buffer.getMatrixView = function (i) {\n return matrixViews[i];\n };\n\n // TODO this is too slow, use getMatrixView and pass the view directly to the glmatrix library\n buffer.setData = function (matrix, i) {\n matrixViews[i].set(matrix, 0);\n };\n buffer.bufferSubData = function () {\n gl.bindBuffer(gl.ARRAY_BUFFER, buffer);\n gl.bufferSubData(gl.ARRAY_BUFFER, 0, matrixData);\n };\n return buffer;\n}\n\n/** \n * Creates a Frame Buffer to use for offscreen rendering.\n * @param {WebGLRenderingContext} gl \n */\nfunction createPickingFrameBuffer(gl) {\n // Create and bind the framebuffer\n var fb = gl.createFramebuffer();\n gl.bindFramebuffer(gl.FRAMEBUFFER, fb);\n\n // Create a texture to render to\n var targetTexture = gl.createTexture();\n gl.bindTexture(gl.TEXTURE_2D, targetTexture);\n gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MIN_FILTER, gl.LINEAR);\n gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_S, gl.CLAMP_TO_EDGE);\n gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_T, gl.CLAMP_TO_EDGE);\n\n // attach the texture as the first color attachment\n gl.framebufferTexture2D(gl.FRAMEBUFFER, gl.COLOR_ATTACHMENT0, gl.TEXTURE_2D, targetTexture, 0);\n gl.bindFramebuffer(gl.FRAMEBUFFER, null);\n fb.setFramebufferAttachmentSizes = function (width, height) {\n gl.bindTexture(gl.TEXTURE_2D, targetTexture);\n gl.texImage2D(gl.TEXTURE_2D, 0, gl.RGBA, width, height, 0, gl.RGBA, gl.UNSIGNED_BYTE, null);\n };\n return fb;\n}\n\n/**\n * Common utilities\n * @module glMatrix\n */\n// Configuration Constants\nvar ARRAY_TYPE = typeof Float32Array !== 'undefined' ? Float32Array : Array;\nif (!Math.hypot) Math.hypot = function () {\n var y = 0,\n i = arguments.length;\n\n while (i--) {\n y += arguments[i] * arguments[i];\n }\n\n return Math.sqrt(y);\n};\n\n/**\n * 3x3 Matrix\n * @module mat3\n */\n\n/**\n * Creates a new identity mat3\n *\n * @returns {mat3} a new 3x3 matrix\n */\n\nfunction create() {\n var out = new ARRAY_TYPE(9);\n\n if (ARRAY_TYPE != Float32Array) {\n out[1] = 0;\n out[2] = 0;\n out[3] = 0;\n out[5] = 0;\n out[6] = 0;\n out[7] = 0;\n }\n\n out[0] = 1;\n out[4] = 1;\n out[8] = 1;\n return out;\n}\n/**\n * Set a mat3 to the identity matrix\n *\n * @param {mat3} out the receiving matrix\n * @returns {mat3} out\n */\n\nfunction identity(out) {\n out[0] = 1;\n out[1] = 0;\n out[2] = 0;\n out[3] = 0;\n out[4] = 1;\n out[5] = 0;\n out[6] = 0;\n out[7] = 0;\n out[8] = 1;\n return out;\n}\n/**\n * Multiplies two mat3's\n *\n * @param {mat3} out the receiving matrix\n * @param {ReadonlyMat3} a the first operand\n * @param {ReadonlyMat3} b the second operand\n * @returns {mat3} out\n */\n\nfunction multiply(out, a, b) {\n var a00 = a[0],\n a01 = a[1],\n a02 = a[2];\n var a10 = a[3],\n a11 = a[4],\n a12 = a[5];\n var a20 = a[6],\n a21 = a[7],\n a22 = a[8];\n var b00 = b[0],\n b01 = b[1],\n b02 = b[2];\n var b10 = b[3],\n b11 = b[4],\n b12 = b[5];\n var b20 = b[6],\n b21 = b[7],\n b22 = b[8];\n out[0] = b00 * a00 + b01 * a10 + b02 * a20;\n out[1] = b00 * a01 + b01 * a11 + b02 * a21;\n out[2] = b00 * a02 + b01 * a12 + b02 * a22;\n out[3] = b10 * a00 + b11 * a10 + b12 * a20;\n out[4] = b10 * a01 + b11 * a11 + b12 * a21;\n out[5] = b10 * a02 + b11 * a12 + b12 * a22;\n out[6] = b20 * a00 + b21 * a10 + b22 * a20;\n out[7] = b20 * a01 + b21 * a11 + b22 * a21;\n out[8] = b20 * a02 + b21 * a12 + b22 * a22;\n return out;\n}\n/**\n * Translate a mat3 by the given vector\n *\n * @param {mat3} out the receiving matrix\n * @param {ReadonlyMat3} a the matrix to translate\n * @param {ReadonlyVec2} v vector to translate by\n * @returns {mat3} out\n */\n\nfunction translate(out, a, v) {\n var a00 = a[0],\n a01 = a[1],\n a02 = a[2],\n a10 = a[3],\n a11 = a[4],\n a12 = a[5],\n a20 = a[6],\n a21 = a[7],\n a22 = a[8],\n x = v[0],\n y = v[1];\n out[0] = a00;\n out[1] = a01;\n out[2] = a02;\n out[3] = a10;\n out[4] = a11;\n out[5] = a12;\n out[6] = x * a00 + y * a10 + a20;\n out[7] = x * a01 + y * a11 + a21;\n out[8] = x * a02 + y * a12 + a22;\n return out;\n}\n/**\n * Rotates a mat3 by the given angle\n *\n * @param {mat3} out the receiving matrix\n * @param {ReadonlyMat3} a the matrix to rotate\n * @param {Number} rad the angle to rotate the matrix by\n * @returns {mat3} out\n */\n\nfunction rotate(out, a, rad) {\n var a00 = a[0],\n a01 = a[1],\n a02 = a[2],\n a10 = a[3],\n a11 = a[4],\n a12 = a[5],\n a20 = a[6],\n a21 = a[7],\n a22 = a[8],\n s = Math.sin(rad),\n c = Math.cos(rad);\n out[0] = c * a00 + s * a10;\n out[1] = c * a01 + s * a11;\n out[2] = c * a02 + s * a12;\n out[3] = c * a10 - s * a00;\n out[4] = c * a11 - s * a01;\n out[5] = c * a12 - s * a02;\n out[6] = a20;\n out[7] = a21;\n out[8] = a22;\n return out;\n}\n/**\n * Scales the mat3 by the dimensions in the given vec2\n *\n * @param {mat3} out the receiving matrix\n * @param {ReadonlyMat3} a the matrix to rotate\n * @param {ReadonlyVec2} v the vec2 to scale the matrix by\n * @returns {mat3} out\n **/\n\nfunction scale(out, a, v) {\n var x = v[0],\n y = v[1];\n out[0] = x * a[0];\n out[1] = x * a[1];\n out[2] = x * a[2];\n out[3] = y * a[3];\n out[4] = y * a[4];\n out[5] = y * a[5];\n out[6] = a[6];\n out[7] = a[7];\n out[8] = a[8];\n return out;\n}\n/**\n * Generates a 2D projection matrix with the given bounds\n *\n * @param {mat3} out mat3 frustum matrix will be written into\n * @param {number} width Width of your gl context\n * @param {number} height Height of gl context\n * @returns {mat3} out\n */\n\nfunction projection(out, width, height) {\n out[0] = 2 / width;\n out[1] = 0;\n out[2] = 0;\n out[3] = 0;\n out[4] = -2 / height;\n out[5] = 0;\n out[6] = -1;\n out[7] = 1;\n out[8] = 1;\n return out;\n}\n\nvar RENDER_TARGET = {\n SCREEN: {\n name: 'screen',\n screen: true\n },\n PICKING: {\n name: 'picking',\n picking: true\n }\n};\nvar atlasCollectionDefaults = defaults$g({\n texRows: 24\n});\nvar renderDefaults = defaults$g({\n collection: 'default',\n getKey: null,\n // since render types (eg node-body, node-overlay) can share an atlas collection, its importeant their style keys don't collide\n drawElement: null,\n getBoundingBox: null,\n getRotation: null,\n getRotationPoint: null,\n getRotationOffset: null,\n isVisible: function isVisible() {\n return true;\n },\n // this is an extra check for visibility in addition to ele.visible()\n getPadding: 0\n});\n\n// A \"texture atlas\" is a big image/canvas, and sections of it are used as textures for nodes/labels.\n\n/**\n * A single square texture atlas (also known as a \"sprite sheet\").\n */\nvar Atlas = /*#__PURE__*/function () {\n function Atlas(r, texSize, texRows, createTextureCanvas) {\n _classCallCheck(this, Atlas);\n this.debugID = Math.floor(Math.random() * 10000);\n this.r = r;\n this.texSize = texSize;\n this.texRows = texRows;\n this.texHeight = Math.floor(texSize / texRows);\n this.enableWrapping = true; // hardcoded for now, can be made an option\n\n this.locked = false; // once an atlas is locked it can no longer be drawn to\n this.texture = null; // WebGLTexture object\n this.needsBuffer = true;\n\n // a \"location\" is an object with a 'row' and 'x' fields\n this.freePointer = {\n x: 0,\n row: 0\n };\n\n // map from the style key to the row/x where the texture starts\n // if the texture wraps then there's a second location\n this.keyToLocation = new Map(); // styleKey -> [ location, location ]\n\n this.canvas = createTextureCanvas(r, texSize, texSize);\n this.scratch = createTextureCanvas(r, texSize, this.texHeight, 'scratch');\n }\n return _createClass(Atlas, [{\n key: \"lock\",\n value: function lock() {\n this.locked = true;\n }\n }, {\n key: \"getKeys\",\n value: function getKeys() {\n return new Set(this.keyToLocation.keys());\n }\n }, {\n key: \"getScale\",\n value: function getScale(_ref) {\n var w = _ref.w,\n h = _ref.h;\n var texHeight = this.texHeight,\n maxTexWidth = this.texSize;\n // try to fit to the height of a row\n var scale = texHeight / h; // TODO what about pixelRatio?\n var texW = w * scale;\n var texH = h * scale;\n // if the scaled width is too wide then scale to fit max width instead\n if (texW > maxTexWidth) {\n scale = maxTexWidth / w;\n texW = w * scale;\n texH = h * scale;\n }\n return {\n scale: scale,\n texW: texW,\n texH: texH\n };\n }\n }, {\n key: \"draw\",\n value: function draw(key, bb, doDrawing) {\n var _this = this;\n if (this.locked) throw new Error('can\\'t draw, atlas is locked');\n var texSize = this.texSize,\n texRows = this.texRows,\n texHeight = this.texHeight;\n var _this$getScale = this.getScale(bb),\n scale = _this$getScale.scale,\n texW = _this$getScale.texW,\n texH = _this$getScale.texH;\n var locations = [null, null];\n var drawAt = function drawAt(location, canvas) {\n if (doDrawing && canvas) {\n var context = canvas.context;\n var x = location.x,\n row = location.row;\n var xOffset = x;\n var yOffset = texHeight * row;\n context.save();\n context.translate(xOffset, yOffset);\n context.scale(scale, scale);\n doDrawing(context, bb);\n context.restore();\n }\n };\n var drawNormal = function drawNormal() {\n // don't need to wrap, draw directly on the canvas\n drawAt(_this.freePointer, _this.canvas);\n locations[0] = {\n x: _this.freePointer.x,\n y: _this.freePointer.row * texHeight,\n w: texW,\n h: texH\n };\n locations[1] = {\n // indlude a second location with a width of 0, for convenience\n x: _this.freePointer.x + texW,\n y: _this.freePointer.row * texHeight,\n w: 0,\n h: texH\n };\n\n // move the pointer to the end of the texture\n _this.freePointer.x += texW;\n if (_this.freePointer.x == texSize) {\n // move to the next row\n // TODO what if there is no next row???\n _this.freePointer.x = 0;\n _this.freePointer.row++;\n }\n };\n var drawWrapped = function drawWrapped() {\n var scratch = _this.scratch,\n canvas = _this.canvas;\n\n // Draw to the scratch canvas\n scratch.clear();\n drawAt({\n x: 0,\n row: 0\n }, scratch);\n var firstTexW = texSize - _this.freePointer.x;\n var secondTexW = texW - firstTexW;\n var h = texHeight;\n {\n // copy first part of scratch to the first texture\n var dx = _this.freePointer.x;\n var dy = _this.freePointer.row * texHeight;\n var w = firstTexW;\n canvas.context.drawImage(scratch, 0, 0, w, h, dx, dy, w, h);\n locations[0] = {\n x: dx,\n y: dy,\n w: w,\n h: texH\n };\n }\n {\n // copy second part of scratch to the second texture\n var sx = firstTexW;\n var _dy = (_this.freePointer.row + 1) * texHeight;\n var _w = secondTexW;\n if (canvas) {\n canvas.context.drawImage(scratch, sx, 0, _w, h, 0, _dy, _w, h);\n }\n locations[1] = {\n x: 0,\n y: _dy,\n w: _w,\n h: texH\n };\n }\n _this.freePointer.x = secondTexW;\n _this.freePointer.row++;\n };\n var moveToStartOfNextRow = function moveToStartOfNextRow() {\n _this.freePointer.x = 0;\n _this.freePointer.row++;\n };\n if (this.freePointer.x + texW <= texSize) {\n // There's enough space in the current row\n drawNormal();\n } else if (this.freePointer.row >= texRows - 1) {\n // Need to move to the next row, but there are no more rows, atlas is full.\n return false;\n } else if (this.freePointer.x === texSize) {\n // happen to be right at end of current row\n moveToStartOfNextRow();\n drawNormal();\n } else if (this.enableWrapping) {\n // draw part of the texture to the end of the curent row, then wrap to the next row\n drawWrapped();\n } else {\n // move to the start of the next row, then draw normally\n moveToStartOfNextRow();\n drawNormal();\n }\n this.keyToLocation.set(key, locations);\n this.needsBuffer = true;\n return locations;\n }\n }, {\n key: \"getOffsets\",\n value: function getOffsets(key) {\n return this.keyToLocation.get(key);\n }\n }, {\n key: \"isEmpty\",\n value: function isEmpty() {\n return this.freePointer.x === 0 && this.freePointer.row === 0;\n }\n }, {\n key: \"canFit\",\n value: function canFit(bb) {\n if (this.locked) return false;\n var texSize = this.texSize,\n texRows = this.texRows;\n var _this$getScale2 = this.getScale(bb),\n texW = _this$getScale2.texW;\n if (this.freePointer.x + texW > texSize) {\n // need to wrap\n return this.freePointer.row < texRows - 1; // return true if there's a row to wrap to\n }\n return true;\n }\n\n // called on every frame\n }, {\n key: \"bufferIfNeeded\",\n value: function bufferIfNeeded(gl) {\n if (!this.texture) {\n this.texture = createTexture(gl, this.debugID);\n }\n if (this.needsBuffer) {\n this.texture.buffer(this.canvas);\n this.needsBuffer = false;\n if (this.locked) {\n this.canvas = null;\n this.scratch = null;\n }\n }\n }\n }, {\n key: \"dispose\",\n value: function dispose() {\n if (this.texture) {\n this.texture.deleteTexture();\n this.texture = null;\n }\n this.canvas = null;\n this.scratch = null;\n this.locked = true;\n }\n }]);\n}();\n\n/**\n * A collection of texture atlases, all of the same \"render type\". \n * (Node body is an example of a render type.)\n * An AtlasCollection can also be notified when a texture is no longer needed, \n * and it can garbage collect the unused textures.\n */\nvar AtlasCollection = /*#__PURE__*/function () {\n function AtlasCollection(r, texSize, texRows, createTextureCanvas) {\n _classCallCheck(this, AtlasCollection);\n this.r = r;\n this.texSize = texSize;\n this.texRows = texRows;\n this.createTextureCanvas = createTextureCanvas;\n this.atlases = [];\n this.styleKeyToAtlas = new Map();\n this.markedKeys = new Set(); // marked for garbage collection\n }\n return _createClass(AtlasCollection, [{\n key: \"getKeys\",\n value: function getKeys() {\n return new Set(this.styleKeyToAtlas.keys());\n }\n }, {\n key: \"_createAtlas\",\n value: function _createAtlas() {\n var r = this.r,\n texSize = this.texSize,\n texRows = this.texRows,\n createTextureCanvas = this.createTextureCanvas;\n return new Atlas(r, texSize, texRows, createTextureCanvas);\n }\n }, {\n key: \"_getScratchCanvas\",\n value: function _getScratchCanvas() {\n if (!this.scratch) {\n var r = this.r,\n texSize = this.texSize,\n texRows = this.texRows,\n createTextureCanvas = this.createTextureCanvas;\n var texHeight = Math.floor(texSize / texRows);\n this.scratch = createTextureCanvas(r, texSize, texHeight, 'scratch');\n }\n return this.scratch;\n }\n }, {\n key: \"draw\",\n value: function draw(key, bb, doDrawing) {\n var atlas = this.styleKeyToAtlas.get(key);\n if (!atlas) {\n // check for space at the end of the last atlas\n atlas = this.atlases[this.atlases.length - 1];\n if (!atlas || !atlas.canFit(bb)) {\n if (atlas) atlas.lock();\n // create a new atlas\n atlas = this._createAtlas();\n this.atlases.push(atlas);\n }\n atlas.draw(key, bb, doDrawing);\n this.styleKeyToAtlas.set(key, atlas);\n }\n return atlas;\n }\n }, {\n key: \"getAtlas\",\n value: function getAtlas(key) {\n return this.styleKeyToAtlas.get(key);\n }\n }, {\n key: \"hasAtlas\",\n value: function hasAtlas(key) {\n return this.styleKeyToAtlas.has(key);\n }\n }, {\n key: \"markKeyForGC\",\n value: function markKeyForGC(key) {\n this.markedKeys.add(key);\n }\n }, {\n key: \"gc\",\n value: function gc() {\n var _this2 = this;\n var markedKeys = this.markedKeys;\n if (markedKeys.size === 0) {\n console.log('nothing to garbage collect');\n return;\n }\n var newAtlases = [];\n var newStyleKeyToAtlas = new Map();\n var newAtlas = null;\n var _iterator = _createForOfIteratorHelper(this.atlases),\n _step;\n try {\n var _loop = function _loop() {\n var atlas = _step.value;\n var keys = atlas.getKeys();\n var keysToCollect = intersection(markedKeys, keys);\n if (keysToCollect.size === 0) {\n // this atlas can still be used\n newAtlases.push(atlas);\n keys.forEach(function (k) {\n return newStyleKeyToAtlas.set(k, atlas);\n });\n return 1; // continue\n }\n if (!newAtlas) {\n newAtlas = _this2._createAtlas();\n newAtlases.push(newAtlas);\n }\n var _iterator2 = _createForOfIteratorHelper(keys),\n _step2;\n try {\n for (_iterator2.s(); !(_step2 = _iterator2.n()).done;) {\n var key = _step2.value;\n if (!keysToCollect.has(key)) {\n var _atlas$getOffsets = atlas.getOffsets(key),\n _atlas$getOffsets2 = _slicedToArray(_atlas$getOffsets, 2),\n s1 = _atlas$getOffsets2[0],\n s2 = _atlas$getOffsets2[1];\n if (!newAtlas.canFit({\n w: s1.w + s2.w,\n h: s1.h\n })) {\n newAtlas.lock();\n newAtlas = _this2._createAtlas();\n newAtlases.push(newAtlas);\n }\n _this2._copyTextureToNewAtlas(key, atlas, newAtlas);\n newStyleKeyToAtlas.set(key, newAtlas);\n }\n }\n } catch (err) {\n _iterator2.e(err);\n } finally {\n _iterator2.f();\n }\n atlas.dispose();\n };\n for (_iterator.s(); !(_step = _iterator.n()).done;) {\n if (_loop()) continue;\n }\n } catch (err) {\n _iterator.e(err);\n } finally {\n _iterator.f();\n }\n this.atlases = newAtlases;\n this.styleKeyToAtlas = newStyleKeyToAtlas;\n this.markedKeys = new Set();\n }\n }, {\n key: \"_copyTextureToNewAtlas\",\n value: function _copyTextureToNewAtlas(key, oldAtlas, newAtlas) {\n var _oldAtlas$getOffsets = oldAtlas.getOffsets(key),\n _oldAtlas$getOffsets2 = _slicedToArray(_oldAtlas$getOffsets, 2),\n s1 = _oldAtlas$getOffsets2[0],\n s2 = _oldAtlas$getOffsets2[1];\n if (s2.w === 0) {\n // the texture does not wrap, draw directly to new atlas\n newAtlas.draw(key, s1, function (context) {\n context.drawImage(oldAtlas.canvas, s1.x, s1.y, s1.w, s1.h, 0, 0, s1.w, s1.h);\n });\n } else {\n // the texture wraps, first draw both parts to a scratch canvas\n var scratch = this._getScratchCanvas();\n scratch.clear();\n scratch.context.drawImage(oldAtlas.canvas, s1.x, s1.y, s1.w, s1.h, 0, 0, s1.w, s1.h);\n scratch.context.drawImage(oldAtlas.canvas, s2.x, s2.y, s2.w, s2.h, s1.w, 0, s2.w, s2.h);\n\n // now draw the scratch to the new atlas\n var w = s1.w + s2.w;\n var h = s1.h;\n newAtlas.draw(key, {\n w: w,\n h: h\n }, function (context) {\n context.drawImage(scratch, 0, 0, w, h, 0, 0, w, h // the destination context has already been translated to the correct position\n );\n });\n }\n }\n }, {\n key: \"getCounts\",\n value: function getCounts() {\n return {\n keyCount: this.styleKeyToAtlas.size,\n atlasCount: new Set(this.styleKeyToAtlas.values()).size\n };\n }\n }]);\n}();\nfunction intersection(set1, set2) {\n // TODO why no Set.intersection in node 16???\n if (set1.intersection) return set1.intersection(set2);else return new Set(_toConsumableArray(set1).filter(function (x) {\n return set2.has(x);\n }));\n}\n\n/**\n * Used to manage batches of Atlases for drawing nodes and labels.\n * Supports different types of AtlasCollections for different render types (or 'texture groups'),\n * for example 'node body' and 'node label' would be different render types.\n * Render types are kept separate because they will likely need to be garbage collected\n * separately and its not entierly guaranteed that their style keys won't collide.\n */\nvar AtlasManager = /*#__PURE__*/function () {\n function AtlasManager(r, globalOptions) {\n _classCallCheck(this, AtlasManager);\n this.r = r;\n this.globalOptions = globalOptions;\n this.atlasSize = globalOptions.webglTexSize;\n this.maxAtlasesPerBatch = globalOptions.webglTexPerBatch;\n this.renderTypes = new Map(); // renderType:string -> renderTypeOptions\n this.collections = new Map(); // collectionName:string -> AtlasCollection\n\n this.typeAndIdToKey = new Map(); // [renderType,id] => style key\n\n this.batchAtlases = [];\n }\n return _createClass(AtlasManager, [{\n key: \"getAtlasSize\",\n value: function getAtlasSize() {\n return this.atlasSize;\n }\n }, {\n key: \"getMaxAtlasesPerBatch\",\n value: function getMaxAtlasesPerBatch() {\n return this.maxAtlasesPerBatch;\n }\n }, {\n key: \"addAtlasCollection\",\n value: function addAtlasCollection(collectionName, atlasCollectionOptions) {\n var _this$globalOptions = this.globalOptions,\n webglTexSize = _this$globalOptions.webglTexSize,\n createTextureCanvas = _this$globalOptions.createTextureCanvas;\n var texRows = atlasCollectionOptions.texRows;\n var cachedCreateTextureCanvas = this._cacheScratchCanvas(createTextureCanvas);\n var atlasCollection = new AtlasCollection(this.r, webglTexSize, texRows, cachedCreateTextureCanvas);\n this.collections.set(collectionName, atlasCollection);\n }\n }, {\n key: \"addRenderType\",\n value: function addRenderType(type, renderTypeOptions) {\n var collection = renderTypeOptions.collection;\n if (!this.collections.has(collection)) throw new Error(\"invalid atlas collection name '\".concat(collection, \"'\"));\n var atlasCollection = this.collections.get(collection);\n var opts = extend({\n type: type,\n atlasCollection: atlasCollection\n }, renderTypeOptions);\n this.renderTypes.set(type, opts);\n }\n }, {\n key: \"getRenderTypeOpts\",\n value: function getRenderTypeOpts(type) {\n return this.renderTypes.get(type);\n }\n }, {\n key: \"getAtlasCollection\",\n value: function getAtlasCollection(name) {\n return this.collections.get(name);\n }\n }, {\n key: \"_cacheScratchCanvas\",\n value: function _cacheScratchCanvas(createTextureCanvas) {\n // all scratch canvases for the same render type will have the same width and height (ie webglTexRows option)\n // but we'll keep track of the width and height just to be safe\n var prevW = -1;\n var prevH = -1;\n var scratchCanvas = null;\n return function (r, w, h, scratch) {\n if (scratch) {\n if (!scratchCanvas || w != prevW || h != prevH) {\n prevW = w;\n prevH = h;\n scratchCanvas = createTextureCanvas(r, w, h);\n }\n return scratchCanvas;\n } else {\n return createTextureCanvas(r, w, h);\n }\n };\n }\n }, {\n key: \"_key\",\n value: function _key(renderType, id) {\n return \"\".concat(renderType, \"-\").concat(id); // TODO not very efficient\n }\n\n /** Marks textues associated with the element for garbage collection. */\n }, {\n key: \"invalidate\",\n value: function invalidate(eles) {\n var _ref2 = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {},\n _ref2$forceRedraw = _ref2.forceRedraw,\n forceRedraw = _ref2$forceRedraw === undefined ? false : _ref2$forceRedraw,\n _ref2$filterEle = _ref2.filterEle,\n filterEle = _ref2$filterEle === undefined ? function () {\n return true;\n } : _ref2$filterEle,\n _ref2$filterType = _ref2.filterType,\n filterType = _ref2$filterType === undefined ? function () {\n return true;\n } : _ref2$filterType;\n var needGC = false;\n var runGCNow = false;\n var _iterator3 = _createForOfIteratorHelper(eles),\n _step3;\n try {\n for (_iterator3.s(); !(_step3 = _iterator3.n()).done;) {\n var ele = _step3.value;\n if (filterEle(ele)) {\n var _iterator4 = _createForOfIteratorHelper(this.renderTypes.values()),\n _step4;\n try {\n for (_iterator4.s(); !(_step4 = _iterator4.n()).done;) {\n var opts = _step4.value;\n var renderType = opts.type;\n if (filterType(renderType)) {\n var styleKey = opts.getKey(ele);\n var atlasCollection = this.collections.get(opts.collection);\n\n // when a node's background image finishes loading, the style key doesn't change but still needs to be redrawn\n if (forceRedraw) {\n atlasCollection.markKeyForGC(styleKey);\n runGCNow = true; // run GC to remove the old texture right now, that way we don't need to remember for the next gc \n } else {\n var id = opts.getID ? opts.getID(ele) : ele.id();\n var mapKey = this._key(renderType, id);\n var oldStyleKey = this.typeAndIdToKey.get(mapKey);\n if (oldStyleKey !== undefined && oldStyleKey !== styleKey) {\n this.typeAndIdToKey[\"delete\"](mapKey);\n atlasCollection.markKeyForGC(oldStyleKey);\n needGC = true;\n }\n }\n }\n }\n } catch (err) {\n _iterator4.e(err);\n } finally {\n _iterator4.f();\n }\n }\n }\n } catch (err) {\n _iterator3.e(err);\n } finally {\n _iterator3.f();\n }\n if (runGCNow) {\n this.gc();\n needGC = false;\n }\n return needGC;\n }\n\n /** Garbage collect */\n }, {\n key: \"gc\",\n value: function gc() {\n var _iterator5 = _createForOfIteratorHelper(this.collections.values()),\n _step5;\n try {\n for (_iterator5.s(); !(_step5 = _iterator5.n()).done;) {\n var collection = _step5.value;\n collection.gc();\n }\n } catch (err) {\n _iterator5.e(err);\n } finally {\n _iterator5.f();\n }\n }\n }, {\n key: \"getOrCreateAtlas\",\n value: function getOrCreateAtlas(ele, type, bb) {\n var opts = this.renderTypes.get(type);\n var styleKey = opts.getKey(ele);\n if (!bb) bb = opts.getBoundingBox(ele);\n var atlasCollection = this.collections.get(opts.collection);\n\n // draws the texture only if needed\n var drawn = false;\n var atlas = atlasCollection.draw(styleKey, bb, function (context) {\n opts.drawElement(context, ele, bb, true, true);\n drawn = true;\n });\n if (drawn) {\n var id = opts.getID ? opts.getID(ele) : ele.id(); // for testing\n var mapKey = this._key(type, id);\n this.typeAndIdToKey.set(mapKey, styleKey);\n }\n return atlas;\n }\n }, {\n key: \"startBatch\",\n value: function startBatch() {\n this.batchAtlases = [];\n }\n }, {\n key: \"getAtlasCount\",\n value: function getAtlasCount() {\n return this.batchAtlases.length;\n }\n }, {\n key: \"getAtlases\",\n value: function getAtlases() {\n return this.batchAtlases;\n }\n }, {\n key: \"canAddToCurrentBatch\",\n value: function canAddToCurrentBatch(ele, type) {\n if (this.batchAtlases.length === this.maxAtlasesPerBatch) {\n // batch is full, is the atlas already part of this batch?\n var opts = this.renderTypes.get(type);\n var styleKey = opts.getKey(ele);\n var atlasCollection = this.collections.get(opts.collection);\n var atlas = atlasCollection.getAtlas(styleKey);\n // return true if there is an atlas and it is part of this batch already\n return Boolean(atlas) && this.batchAtlases.includes(atlas);\n }\n return true; // not full\n }\n }, {\n key: \"getAtlasIndexForBatch\",\n value: function getAtlasIndexForBatch(atlas) {\n var atlasID = this.batchAtlases.indexOf(atlas);\n if (atlasID < 0) {\n if (this.batchAtlases.length === this.maxAtlasesPerBatch) {\n return;\n }\n this.batchAtlases.push(atlas);\n atlasID = this.batchAtlases.length - 1;\n }\n return atlasID;\n }\n }, {\n key: \"getIndexArray\",\n value: function getIndexArray() {\n return Array.from({\n length: this.maxAtlasesPerBatch\n }, function (v, i) {\n return i;\n });\n }\n }, {\n key: \"getAtlasInfo\",\n value: function getAtlasInfo(ele, type) {\n var opts = this.renderTypes.get(type);\n var bb = opts.getBoundingBox(ele);\n var atlas = this.getOrCreateAtlas(ele, type, bb);\n var index = this.getAtlasIndexForBatch(atlas);\n if (index === undefined) {\n return undefined; // batch is full\n }\n var styleKey = opts.getKey(ele);\n var _atlas$getOffsets3 = atlas.getOffsets(styleKey),\n _atlas$getOffsets4 = _slicedToArray(_atlas$getOffsets3, 2),\n tex1 = _atlas$getOffsets4[0],\n tex2 = _atlas$getOffsets4[1];\n // This object may be passed back to setTransformMatrix()\n return {\n index: index,\n tex1: tex1,\n tex2: tex2,\n bb: bb\n };\n }\n\n /**\n * matrix is expected to be a 9 element array\n * this function follows same pattern as CRp.drawCachedElementPortion(...)\n */\n }, {\n key: \"setTransformMatrix\",\n value: function setTransformMatrix(ele, matrix, type, atlasInfo) {\n var first = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : true;\n var opts = this.getRenderTypeOpts(type);\n var padding = opts.getPadding ? opts.getPadding(ele) : 0;\n if (atlasInfo) {\n // we've already computed the bb and tex bounds for a texture\n var bb = atlasInfo.bb,\n tex1 = atlasInfo.tex1,\n tex2 = atlasInfo.tex2;\n\n // wrapped textures need separate matrix for each part\n var ratio = tex1.w / (tex1.w + tex2.w);\n if (!first) {\n // first = true means its the first part of the wrapped texture\n ratio = 1 - ratio;\n }\n var adjBB = this.getAdjustedBB(bb, padding, first, ratio);\n this._applyTransformMatrix(matrix, adjBB, opts, ele);\n } else {\n // we don't have a texture yet, or we want to avoid creating a texture for simple shapes\n var _bb = opts.getBoundingBox(ele);\n var _adjBB = this.getAdjustedBB(_bb, padding, true, 1);\n this._applyTransformMatrix(matrix, _adjBB, opts, ele);\n }\n }\n }, {\n key: \"_applyTransformMatrix\",\n value: function _applyTransformMatrix(matrix, adjBB, opts, ele) {\n var x, y;\n identity(matrix);\n var theta = opts.getRotation ? opts.getRotation(ele) : 0;\n if (theta !== 0) {\n var _opts$getRotationPoin = opts.getRotationPoint(ele),\n sx = _opts$getRotationPoin.x,\n sy = _opts$getRotationPoin.y;\n translate(matrix, matrix, [sx, sy]);\n rotate(matrix, matrix, theta);\n var offset = opts.getRotationOffset(ele);\n x = offset.x + adjBB.xOffset;\n y = offset.y;\n } else {\n x = adjBB.x1;\n y = adjBB.y1;\n }\n translate(matrix, matrix, [x, y]);\n scale(matrix, matrix, [adjBB.w, adjBB.h]);\n }\n\n /**\n * Adjusts a node or label BB to accomodate padding and split for wrapped textures.\n * @param bb - the original bounding box\n * @param padding - the padding to add to the bounding box\n * @param first - whether this is the first part of a wrapped texture\n * @param ratio - the ratio of the texture width of part of the text to the entire texture\n */\n }, {\n key: \"getAdjustedBB\",\n value: function getAdjustedBB(bb, padding, first, ratio) {\n var x1 = bb.x1,\n y1 = bb.y1,\n w = bb.w,\n h = bb.h;\n if (padding) {\n x1 -= padding;\n y1 -= padding;\n w += 2 * padding;\n h += 2 * padding;\n }\n var xOffset = 0;\n var adjW = w * ratio;\n if (first && ratio < 1) {\n w = adjW;\n } else if (!first && ratio < 1) {\n xOffset = w - adjW;\n x1 += xOffset;\n w = adjW;\n }\n return {\n x1: x1,\n y1: y1,\n w: w,\n h: h,\n xOffset: xOffset\n };\n }\n }, {\n key: \"getDebugInfo\",\n value: function getDebugInfo() {\n var debugInfo = [];\n var _iterator6 = _createForOfIteratorHelper(this.collections),\n _step6;\n try {\n for (_iterator6.s(); !(_step6 = _iterator6.n()).done;) {\n var _step6$value = _slicedToArray(_step6.value, 2),\n name = _step6$value[0],\n collection = _step6$value[1];\n var _collection$getCounts = collection.getCounts(),\n keyCount = _collection$getCounts.keyCount,\n atlasCount = _collection$getCounts.atlasCount;\n debugInfo.push({\n type: name,\n keyCount: keyCount,\n atlasCount: atlasCount\n });\n }\n } catch (err) {\n _iterator6.e(err);\n } finally {\n _iterator6.f();\n }\n return debugInfo;\n }\n }]);\n}();\n\n// Vertex types\nvar TEXTURE = 0;\nvar EDGE_STRAIGHT = 1;\nvar EDGE_CURVE_SEGMENT = 2;\nvar EDGE_ARROW = 3;\nvar RECTANGLE = 4;\nvar ElementDrawingWebGL = /*#__PURE__*/function () {\n /** \n * @param {WebGLRenderingContext} gl \n */\n function ElementDrawingWebGL(r, gl, opts) {\n _classCallCheck(this, ElementDrawingWebGL);\n this.r = r;\n this.gl = gl;\n this.maxInstances = opts.webglBatchSize;\n this.atlasSize = opts.webglTexSize;\n this.bgColor = opts.bgColor;\n this.debug = opts.webglDebug;\n this.batchDebugInfo = [];\n opts.enableWrapping = true;\n opts.createTextureCanvas = createTextureCanvas; // Unit tests mock this\n this.atlasManager = new AtlasManager(r, opts);\n this.program = this.createShaderProgram(RENDER_TARGET.SCREEN);\n this.pickingProgram = this.createShaderProgram(RENDER_TARGET.PICKING);\n this.vao = this.createVAO();\n }\n return _createClass(ElementDrawingWebGL, [{\n key: \"addAtlasCollection\",\n value: function addAtlasCollection(groupName, opts) {\n this.atlasManager.addAtlasCollection(groupName, opts);\n }\n }, {\n key: \"addAtlasRenderType\",\n value: function addAtlasRenderType(typeName, opts) {\n this.atlasManager.addRenderType(typeName, opts);\n }\n }, {\n key: \"invalidate\",\n value: function invalidate(eles) {\n var _ref = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {},\n type = _ref.type;\n var atlasManager = this.atlasManager;\n if (type) {\n return atlasManager.invalidate(eles, {\n filterType: function filterType(t) {\n return t === type;\n },\n forceRedraw: true\n });\n } else {\n return atlasManager.invalidate(eles);\n }\n }\n }, {\n key: \"gc\",\n value: function gc() {\n this.atlasManager.gc();\n }\n }, {\n key: \"createShaderProgram\",\n value: function createShaderProgram(renderTarget) {\n var gl = this.gl;\n\n // compute texture coordinates in the shader, becase we are using instanced drawing\n var vertexShaderSource = \"#version 300 es\\n precision highp float;\\n\\n uniform mat3 uPanZoomMatrix;\\n uniform int uAtlasSize;\\n \\n // instanced\\n in vec2 aPosition; \\n\\n in mat3 aTransform;\\n\\n // what are we rendering?\\n in int aVertType;\\n\\n // for picking\\n in vec4 aIndex;\\n \\n // For textures\\n in int aAtlasId; // which shader unit/atlas to use\\n in vec4 aTex; // x/y/w/h of texture in atlas\\n\\n // for edges\\n in vec4 aPointAPointB;\\n in vec4 aPointCPointD;\\n in float aLineWidth;\\n in vec4 aColor;\\n\\n out vec2 vTexCoord;\\n out vec4 vColor;\\n flat out int vAtlasId;\\n flat out vec4 vIndex;\\n flat out int vVertType;\\n\\n void main(void) {\\n int vid = gl_VertexID;\\n vec2 position = aPosition;\\n\\n if(aVertType == \".concat(TEXTURE, \") {\\n float texX = aTex.x;\\n float texY = aTex.y;\\n float texW = aTex.z;\\n float texH = aTex.w;\\n\\n int vid = gl_VertexID;\\n\\n if(vid == 1 || vid == 2 || vid == 4) {\\n texX += texW;\\n }\\n if(vid == 2 || vid == 4 || vid == 5) {\\n texY += texH;\\n }\\n\\n float d = float(uAtlasSize);\\n vTexCoord = vec2(texX / d, texY / d); // tex coords must be between 0 and 1\\n\\n gl_Position = vec4(uPanZoomMatrix * aTransform * vec3(position, 1.0), 1.0);\\n }\\n else if(aVertType == \").concat(RECTANGLE, \") {\\n gl_Position = vec4(uPanZoomMatrix * aTransform * vec3(position, 1.0), 1.0);\\n vColor = aColor;\\n }\\n else if(aVertType == \").concat(EDGE_STRAIGHT, \") {\\n vec2 source = aPointAPointB.xy;\\n vec2 target = aPointAPointB.zw;\\n\\n // adjust the geometry so that the line is centered on the edge\\n position.y = position.y - 0.5;\\n\\n vec2 xBasis = target - source;\\n vec2 yBasis = normalize(vec2(-xBasis.y, xBasis.x));\\n vec2 point = source + xBasis * position.x + yBasis * aLineWidth * position.y;\\n\\n gl_Position = vec4(uPanZoomMatrix * vec3(point, 1.0), 1.0);\\n vColor = aColor;\\n } \\n else if(aVertType == \").concat(EDGE_CURVE_SEGMENT, \") {\\n vec2 pointA = aPointAPointB.xy;\\n vec2 pointB = aPointAPointB.zw;\\n vec2 pointC = aPointCPointD.xy;\\n vec2 pointD = aPointCPointD.zw;\\n\\n // adjust the geometry so that the line is centered on the edge\\n position.y = position.y - 0.5;\\n\\n vec2 p0 = pointA;\\n vec2 p1 = pointB;\\n vec2 p2 = pointC;\\n vec2 pos = position;\\n if(position.x == 1.0) {\\n p0 = pointD;\\n p1 = pointC;\\n p2 = pointB;\\n pos = vec2(0.0, -position.y);\\n }\\n\\n vec2 p01 = p1 - p0;\\n vec2 p12 = p2 - p1;\\n vec2 p21 = p1 - p2;\\n\\n // Find the normal vector.\\n vec2 tangent = normalize(normalize(p12) + normalize(p01));\\n vec2 normal = vec2(-tangent.y, tangent.x);\\n\\n // Find the vector perpendicular to p0 -> p1.\\n vec2 p01Norm = normalize(vec2(-p01.y, p01.x));\\n\\n // Determine the bend direction.\\n float sigma = sign(dot(p01 + p21, normal));\\n float width = aLineWidth;\\n\\n if(sign(pos.y) == -sigma) {\\n // This is an intersecting vertex. Adjust the position so that there's no overlap.\\n vec2 point = 0.5 * width * normal * -sigma / dot(normal, p01Norm);\\n gl_Position = vec4(uPanZoomMatrix * vec3(p1 + point, 1.0), 1.0);\\n } else {\\n // This is a non-intersecting vertex. Treat it like a mitre join.\\n vec2 point = 0.5 * width * normal * sigma * dot(normal, p01Norm);\\n gl_Position = vec4(uPanZoomMatrix * vec3(p1 + point, 1.0), 1.0);\\n }\\n\\n vColor = aColor;\\n } \\n else if(aVertType == \").concat(EDGE_ARROW, \" && vid < 3) {\\n // massage the first triangle into an edge arrow\\n if(vid == 0)\\n position = vec2(-0.15, -0.3);\\n if(vid == 1)\\n position = vec2( 0.0, 0.0);\\n if(vid == 2)\\n position = vec2( 0.15, -0.3);\\n\\n gl_Position = vec4(uPanZoomMatrix * aTransform * vec3(position, 1.0), 1.0);\\n vColor = aColor;\\n }\\n else {\\n gl_Position = vec4(2.0, 0.0, 0.0, 1.0); // discard vertex by putting it outside webgl clip space\\n }\\n\\n vAtlasId = aAtlasId;\\n vIndex = aIndex;\\n vVertType = aVertType;\\n }\\n \");\n var idxs = this.atlasManager.getIndexArray();\n var fragmentShaderSource = \"#version 300 es\\n precision highp float;\\n\\n // define texture unit for each node in the batch\\n \".concat(idxs.map(function (i) {\n return \"uniform sampler2D uTexture\".concat(i, \";\");\n }).join('\\n\\t'), \"\\n\\n uniform vec4 uBGColor;\\n\\n in vec2 vTexCoord;\\n in vec4 vColor;\\n flat in int vAtlasId;\\n flat in vec4 vIndex;\\n flat in int vVertType;\\n\\n out vec4 outColor;\\n\\n void main(void) {\\n if(vVertType == \").concat(TEXTURE, \") {\\n \").concat(idxs.map(function (i) {\n return \"if(vAtlasId == \".concat(i, \") outColor = texture(uTexture\").concat(i, \", vTexCoord);\");\n }).join('\\n\\telse '), \"\\n } else if(vVertType == \").concat(EDGE_ARROW, \") {\\n // blend arrow color with background (using premultiplied alpha)\\n outColor.rgb = vColor.rgb + (uBGColor.rgb * (1.0 - vColor.a)); \\n outColor.a = 1.0; // make opaque, masks out line under arrow\\n } else {\\n outColor = vColor;\\n }\\n\\n \").concat(renderTarget.picking ? \"if(outColor.a == 0.0) discard;\\n else outColor = vIndex;\" : '', \"\\n }\\n \");\n var program = createProgram(gl, vertexShaderSource, fragmentShaderSource);\n\n // instance geometry\n program.aPosition = gl.getAttribLocation(program, 'aPosition');\n\n // attributes\n program.aIndex = gl.getAttribLocation(program, 'aIndex');\n program.aVertType = gl.getAttribLocation(program, 'aVertType');\n program.aTransform = gl.getAttribLocation(program, 'aTransform');\n program.aAtlasId = gl.getAttribLocation(program, 'aAtlasId');\n program.aTex = gl.getAttribLocation(program, 'aTex');\n program.aPointAPointB = gl.getAttribLocation(program, 'aPointAPointB');\n program.aPointCPointD = gl.getAttribLocation(program, 'aPointCPointD');\n program.aLineWidth = gl.getAttribLocation(program, 'aLineWidth');\n program.aColor = gl.getAttribLocation(program, 'aColor');\n\n // uniforms\n program.uPanZoomMatrix = gl.getUniformLocation(program, 'uPanZoomMatrix');\n program.uAtlasSize = gl.getUniformLocation(program, 'uAtlasSize');\n program.uBGColor = gl.getUniformLocation(program, 'uBGColor');\n program.uTextures = [];\n for (var i = 0; i < this.atlasManager.getMaxAtlasesPerBatch(); i++) {\n program.uTextures.push(gl.getUniformLocation(program, \"uTexture\".concat(i)));\n }\n return program;\n }\n }, {\n key: \"createVAO\",\n value: function createVAO() {\n var instanceGeometry = [0, 0, 1, 0, 1, 1, 0, 0, 1, 1, 0, 1];\n this.vertexCount = instanceGeometry.length / 2;\n var n = this.maxInstances;\n var gl = this.gl,\n program = this.program;\n var vao = gl.createVertexArray();\n gl.bindVertexArray(vao);\n createBufferStaticDraw(gl, 'vec2', program.aPosition, instanceGeometry);\n\n // Create buffers for all the attributes\n this.transformBuffer = create3x3MatrixBufferDynamicDraw(gl, n, program.aTransform);\n this.indexBuffer = createBufferDynamicDraw(gl, n, 'vec4', program.aIndex);\n this.vertTypeBuffer = createBufferDynamicDraw(gl, n, 'int', program.aVertType);\n this.atlasIdBuffer = createBufferDynamicDraw(gl, n, 'int', program.aAtlasId);\n this.texBuffer = createBufferDynamicDraw(gl, n, 'vec4', program.aTex);\n this.pointAPointBBuffer = createBufferDynamicDraw(gl, n, 'vec4', program.aPointAPointB);\n this.pointCPointDBuffer = createBufferDynamicDraw(gl, n, 'vec4', program.aPointCPointD);\n this.lineWidthBuffer = createBufferDynamicDraw(gl, n, 'float', program.aLineWidth);\n this.colorBuffer = createBufferDynamicDraw(gl, n, 'vec4', program.aColor);\n gl.bindVertexArray(null);\n return vao;\n }\n }, {\n key: \"buffers\",\n get: function get() {\n var _this = this;\n if (!this._buffers) {\n this._buffers = Object.keys(this).filter(function (k) {\n return k.endsWith('Buffer');\n }).map(function (k) {\n return _this[k];\n });\n }\n return this._buffers;\n }\n }, {\n key: \"startFrame\",\n value: function startFrame(panZoomMatrix) {\n var renderTarget = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : RENDER_TARGET.SCREEN;\n this.panZoomMatrix = panZoomMatrix;\n this.renderTarget = renderTarget;\n this.batchDebugInfo = [];\n this.wrappedCount = 0; // TODO this should be in the AtlasManager\n this.rectangleCount = 0;\n this.startBatch();\n }\n }, {\n key: \"startBatch\",\n value: function startBatch() {\n this.instanceCount = 0;\n this.atlasManager.startBatch();\n }\n }, {\n key: \"endFrame\",\n value: function endFrame() {\n this.endBatch();\n }\n }, {\n key: \"getTempMatrix\",\n value: function getTempMatrix() {\n return this.tempMatrix = this.tempMatrix || create();\n }\n }, {\n key: \"drawTexture\",\n value: function drawTexture(ele, eleIndex, type) {\n var atlasManager = this.atlasManager;\n if (!ele.visible()) {\n return;\n }\n if (!atlasManager.getRenderTypeOpts(type).isVisible(ele)) {\n return;\n }\n if (!atlasManager.canAddToCurrentBatch(ele, type)) {\n this.endBatch(); // draws then starts a new batch\n }\n if (this.instanceCount + 1 >= this.maxInstances) {\n this.endBatch(); // make sure there's space for at least two instances, wrapped textures need two instances\n }\n var instance = this.instanceCount;\n this.vertTypeBuffer.getView(instance)[0] = TEXTURE;\n var indexView = this.indexBuffer.getView(instance);\n indexToVec4(eleIndex, indexView);\n var atlasInfo = atlasManager.getAtlasInfo(ele, type);\n var index = atlasInfo.index,\n tex1 = atlasInfo.tex1,\n tex2 = atlasInfo.tex2;\n if (tex2.w > 0) this.wrappedCount++;\n var first = true;\n for (var _i = 0, _arr = [tex1, tex2]; _i < _arr.length; _i++) {\n var tex = _arr[_i];\n if (tex.w != 0) {\n var _instance = this.instanceCount;\n this.vertTypeBuffer.getView(_instance)[0] = TEXTURE;\n var _indexView = this.indexBuffer.getView(_instance);\n indexToVec4(eleIndex, _indexView);\n\n // Set values in the buffers using Typed Array Views for performance.\n var atlasIdView = this.atlasIdBuffer.getView(_instance);\n atlasIdView[0] = index;\n\n // we have two sets of texture coordinates and transforms because textures can wrap in the atlas\n var texView = this.texBuffer.getView(_instance);\n texView[0] = tex.x;\n texView[1] = tex.y;\n texView[2] = tex.w;\n texView[3] = tex.h;\n var matrixView = this.transformBuffer.getMatrixView(_instance);\n atlasManager.setTransformMatrix(ele, matrixView, type, atlasInfo, first);\n this.instanceCount++;\n }\n first = false;\n }\n if (this.instanceCount >= this.maxInstances) {\n this.endBatch();\n }\n }\n }, {\n key: \"drawSimpleRectangle\",\n value: function drawSimpleRectangle(ele, eleIndex, type) {\n if (!ele.visible()) {\n return;\n }\n var atlasManager = this.atlasManager;\n var instance = this.instanceCount;\n this.vertTypeBuffer.getView(instance)[0] = RECTANGLE;\n var indexView = this.indexBuffer.getView(instance);\n indexToVec4(eleIndex, indexView);\n var color = ele.pstyle('background-color').value;\n var opacity = ele.pstyle('background-opacity').value;\n var colorView = this.colorBuffer.getView(instance);\n toWebGLColor(color, opacity, colorView);\n var matrixView = this.transformBuffer.getMatrixView(instance);\n atlasManager.setTransformMatrix(ele, matrixView, type);\n this.rectangleCount++;\n this.instanceCount++;\n if (this.instanceCount >= this.maxInstances) {\n this.endBatch();\n }\n }\n }, {\n key: \"drawEdgeArrow\",\n value: function drawEdgeArrow(edge, eleIndex, prefix) {\n if (!edge.visible()) {\n return;\n }\n // Edge points and arrow angles etc are calculated by the base renderer and cached in the rscratch object.\n var rs = edge._private.rscratch;\n var x, y, angle;\n if (prefix === 'source') {\n x = rs.arrowStartX;\n y = rs.arrowStartY;\n angle = rs.srcArrowAngle;\n } else {\n x = rs.arrowEndX;\n y = rs.arrowEndY;\n angle = rs.tgtArrowAngle;\n }\n\n // taken from CRp.drawArrowhead\n if (isNaN(x) || x == null || isNaN(y) || y == null || isNaN(angle) || angle == null) {\n return;\n }\n\n // check shape after the x/y check because pstyle() is a bit slow\n var arrowShape = edge.pstyle(prefix + '-arrow-shape').value;\n if (arrowShape === 'none') {\n return;\n }\n var color = edge.pstyle(prefix + '-arrow-color').value;\n var baseOpacity = edge.pstyle('opacity').value;\n var lineOpacity = edge.pstyle('line-opacity').value;\n var opacity = baseOpacity * lineOpacity;\n var lineWidth = edge.pstyle('width').pfValue;\n var scale$1 = edge.pstyle('arrow-scale').value;\n var size = this.r.getArrowWidth(lineWidth, scale$1);\n var instance = this.instanceCount;\n var transform = this.transformBuffer.getMatrixView(instance);\n identity(transform);\n translate(transform, transform, [x, y]);\n scale(transform, transform, [size, size]);\n rotate(transform, transform, angle);\n this.vertTypeBuffer.getView(instance)[0] = EDGE_ARROW;\n var indexView = this.indexBuffer.getView(instance);\n indexToVec4(eleIndex, indexView);\n var colorView = this.colorBuffer.getView(instance);\n toWebGLColor(color, opacity, colorView);\n this.instanceCount++;\n if (this.instanceCount >= this.maxInstances) {\n this.endBatch();\n }\n }\n }, {\n key: \"drawEdgeLine\",\n value: function drawEdgeLine(edge, eleIndex) {\n if (!edge.visible()) {\n return;\n }\n var points = this.getEdgePoints(edge);\n if (!points) {\n return;\n }\n\n // line style\n var baseOpacity = edge.pstyle('opacity').value;\n var lineOpacity = edge.pstyle('line-opacity').value;\n var width = edge.pstyle('width').pfValue;\n var color = edge.pstyle('line-color').value;\n var opacity = baseOpacity * lineOpacity;\n if (points.length / 2 + this.instanceCount > this.maxInstances) {\n this.endBatch();\n }\n if (points.length == 4) {\n // straight line\n var instance = this.instanceCount;\n this.vertTypeBuffer.getView(instance)[0] = EDGE_STRAIGHT;\n var indexView = this.indexBuffer.getView(instance);\n indexToVec4(eleIndex, indexView);\n var colorView = this.colorBuffer.getView(instance);\n toWebGLColor(color, opacity, colorView);\n var lineWidthBuffer = this.lineWidthBuffer.getView(instance);\n lineWidthBuffer[0] = width;\n var sourceTargetView = this.pointAPointBBuffer.getView(instance);\n sourceTargetView[0] = points[0]; // source x\n sourceTargetView[1] = points[1]; // source y\n sourceTargetView[2] = points[2]; // target x\n sourceTargetView[3] = points[3]; // target y\n\n this.instanceCount++;\n if (this.instanceCount >= this.maxInstances) {\n this.endBatch();\n }\n } else {\n // curved line\n for (var i = 0; i < points.length - 2; i += 2) {\n var _instance2 = this.instanceCount;\n this.vertTypeBuffer.getView(_instance2)[0] = EDGE_CURVE_SEGMENT;\n var _indexView2 = this.indexBuffer.getView(_instance2);\n indexToVec4(eleIndex, _indexView2);\n var _colorView = this.colorBuffer.getView(_instance2);\n toWebGLColor(color, opacity, _colorView);\n var _lineWidthBuffer = this.lineWidthBuffer.getView(_instance2);\n _lineWidthBuffer[0] = width;\n var pAx = points[i - 2],\n pAy = points[i - 1];\n var pBx = points[i],\n pBy = points[i + 1];\n var pCx = points[i + 2],\n pCy = points[i + 3];\n var pDx = points[i + 4],\n pDy = points[i + 5];\n\n // make phantom points for the first and last segments\n // TODO adding 0.001 to avoid division by zero in the shader (I think), need a better solution\n if (i == 0) {\n pAx = 2 * pBx - pCx + 0.001;\n pAy = 2 * pBy - pCy + 0.001;\n }\n if (i == points.length - 4) {\n pDx = 2 * pCx - pBx + 0.001;\n pDy = 2 * pCy - pBy + 0.001;\n }\n var pointABView = this.pointAPointBBuffer.getView(_instance2);\n pointABView[0] = pAx;\n pointABView[1] = pAy;\n pointABView[2] = pBx;\n pointABView[3] = pBy;\n var pointCDView = this.pointCPointDBuffer.getView(_instance2);\n pointCDView[0] = pCx;\n pointCDView[1] = pCy;\n pointCDView[2] = pDx;\n pointCDView[3] = pDy;\n this.instanceCount++;\n if (this.instanceCount >= this.maxInstances) {\n this.endBatch();\n }\n }\n }\n }\n }, {\n key: \"getEdgePoints\",\n value: function getEdgePoints(edge) {\n var rs = edge._private.rscratch;\n\n // if bezier ctrl pts can not be calculated, then die\n if (rs.badLine || rs.allpts == null || isNaN(rs.allpts[0])) {\n // isNaN in case edge is impossible and browser bugs (e.g. safari)\n return;\n }\n var controlPoints = rs.allpts;\n if (controlPoints.length == 4) {\n return controlPoints;\n }\n var numSegments = this.getNumSegments(edge);\n return this.getCurveSegmentPoints(controlPoints, numSegments);\n }\n }, {\n key: \"getNumSegments\",\n value: function getNumSegments(edge) {\n // TODO Need a heuristic that decides how many segments to use. Factors to consider:\n // - edge width/length\n // - edge curvature (the more the curvature, the more segments)\n // - zoom level (more segments when zoomed in)\n // - number of visible edges (more segments when there are fewer edges)\n // - performance (fewer segments when performance is a concern)\n // - user configurable option(s)\n // note: number of segments should be less than the max number of instances\n // note: segments don't need to be evenly spaced out, it might make sense to have shorter segments nearer to the control points\n var numSegments = 15;\n return Math.min(Math.max(numSegments, 5), this.maxInstances);\n }\n }, {\n key: \"getCurveSegmentPoints\",\n value: function getCurveSegmentPoints(controlPoints, segments) {\n if (controlPoints.length == 4) {\n return controlPoints; // straight line\n }\n var curvePoints = Array((segments + 1) * 2);\n for (var i = 0; i <= segments; i++) {\n // the first and last points are the same as the first and last control points\n if (i == 0) {\n curvePoints[0] = controlPoints[0];\n curvePoints[1] = controlPoints[1];\n } else if (i == segments) {\n curvePoints[i * 2] = controlPoints[controlPoints.length - 2];\n curvePoints[i * 2 + 1] = controlPoints[controlPoints.length - 1];\n } else {\n var t = i / segments; // segments have equal length, its not strictly necessary to do it this way\n // pass in curvePoints to set the values in the array directly\n this.setCurvePoint(controlPoints, t, curvePoints, i * 2);\n }\n }\n return curvePoints;\n }\n }, {\n key: \"setCurvePoint\",\n value: function setCurvePoint(points, t, curvePoints, cpi) {\n if (points.length <= 2) {\n curvePoints[cpi] = points[0];\n curvePoints[cpi + 1] = points[1];\n } else {\n var newpoints = Array(points.length - 2);\n for (var i = 0; i < newpoints.length; i += 2) {\n var x = (1 - t) * points[i] + t * points[i + 2];\n var y = (1 - t) * points[i + 1] + t * points[i + 3];\n newpoints[i] = x;\n newpoints[i + 1] = y;\n }\n return this.setCurvePoint(newpoints, t, curvePoints, cpi);\n }\n }\n }, {\n key: \"endBatch\",\n value: function endBatch() {\n var gl = this.gl,\n vao = this.vao,\n vertexCount = this.vertexCount,\n count = this.instanceCount;\n if (count === 0) return;\n var program = this.renderTarget.picking ? this.pickingProgram : this.program;\n gl.useProgram(program);\n gl.bindVertexArray(vao);\n\n // buffer the attribute data\n var _iterator = _createForOfIteratorHelper(this.buffers),\n _step;\n try {\n for (_iterator.s(); !(_step = _iterator.n()).done;) {\n var buffer = _step.value;\n buffer.bufferSubData(count);\n }\n } catch (err) {\n _iterator.e(err);\n } finally {\n _iterator.f();\n }\n var atlases = this.atlasManager.getAtlases();\n // must buffer before activating texture units\n for (var i = 0; i < atlases.length; i++) {\n atlases[i].bufferIfNeeded(gl);\n }\n // Activate all the texture units that we need\n for (var _i2 = 0; _i2 < atlases.length; _i2++) {\n gl.activeTexture(gl.TEXTURE0 + _i2);\n gl.bindTexture(gl.TEXTURE_2D, atlases[_i2].texture);\n gl.uniform1i(program.uTextures[_i2], _i2);\n }\n\n // Set the uniforms\n gl.uniformMatrix3fv(program.uPanZoomMatrix, false, this.panZoomMatrix);\n gl.uniform1i(program.uAtlasSize, this.atlasManager.getAtlasSize());\n // set background color, needed for edge arrow color blending\n var webglBgColor = toWebGLColor(this.bgColor, 1);\n gl.uniform4fv(program.uBGColor, webglBgColor);\n\n // draw!\n gl.drawArraysInstanced(gl.TRIANGLES, 0, vertexCount, count);\n gl.bindVertexArray(null);\n gl.bindTexture(gl.TEXTURE_2D, null); // TODO is this right when having multiple texture units?\n\n if (this.debug) {\n this.batchDebugInfo.push({\n count: count,\n // instance count\n atlasCount: atlases.length\n });\n }\n\n // start the next batch, even if not needed\n this.startBatch();\n }\n }, {\n key: \"getDebugInfo\",\n value: function getDebugInfo() {\n var atlasInfo = this.atlasManager.getDebugInfo();\n var totalAtlases = atlasInfo.reduce(function (count, info) {\n return count + info.atlasCount;\n }, 0);\n var batchInfo = this.batchDebugInfo;\n var totalInstances = batchInfo.reduce(function (count, info) {\n return count + info.count;\n }, 0);\n return {\n atlasInfo: atlasInfo,\n totalAtlases: totalAtlases,\n wrappedCount: this.wrappedCount,\n rectangleCount: this.rectangleCount,\n batchCount: batchInfo.length,\n batchInfo: batchInfo,\n totalInstances: totalInstances\n };\n }\n }]);\n}();\n\nfunction fillStyle(color, opacity) {\n return \"rgba(\".concat(color[0], \", \").concat(color[1], \", \").concat(color[2], \", \").concat(opacity, \")\");\n}\nvar OverlayUnderlayRenderer = /*#__PURE__*/function () {\n function OverlayUnderlayRenderer(r) {\n _classCallCheck(this, OverlayUnderlayRenderer);\n this.r = r;\n }\n return _createClass(OverlayUnderlayRenderer, [{\n key: \"getStyleKey\",\n value: function getStyleKey(type, node) {\n var _this$getStyle = this.getStyle(type, node),\n shape = _this$getStyle.shape,\n opacity = _this$getStyle.opacity,\n color = _this$getStyle.color;\n if (!shape) return null;\n var w = node.width();\n var h = node.height();\n var c = fillStyle(color, opacity);\n return hashString(\"\".concat(shape, \"-\").concat(w, \"-\").concat(h, \"-\").concat(c)); // TODO hack, not very efficient\n }\n }, {\n key: \"isVisible\",\n value: function isVisible(type, node) {\n var opacity = node.pstyle(\"\".concat(type, \"-opacity\")).value;\n return opacity > 0;\n }\n }, {\n key: \"getStyle\",\n value: function getStyle(type, node) {\n var opacity = node.pstyle(\"\".concat(type, \"-opacity\")).value;\n var color = node.pstyle(\"\".concat(type, \"-color\")).value;\n var shape = node.pstyle(\"\".concat(type, \"-shape\")).value;\n return {\n opacity: opacity,\n color: color,\n shape: shape\n }; // TODO need to add radius at some point\n }\n }, {\n key: \"getPadding\",\n value: function getPadding(type, node) {\n return node.pstyle(\"\".concat(type, \"-padding\")).pfValue;\n }\n }, {\n key: \"draw\",\n value: function draw(type, context, node, bb) {\n if (!this.isVisible(type, node)) return;\n var r = this.r;\n var w = bb.w;\n var h = bb.h;\n var x = w / 2;\n var y = h / 2;\n var _this$getStyle2 = this.getStyle(type, node),\n shape = _this$getStyle2.shape,\n color = _this$getStyle2.color,\n opacity = _this$getStyle2.opacity;\n context.save();\n context.fillStyle = fillStyle(color, opacity);\n if (shape === 'round-rectangle' || shape === 'roundrectangle') {\n r.drawRoundRectanglePath(context, x, y, w, h, 'auto');\n } else if (shape === 'ellipse') {\n r.drawEllipsePath(context, x, y, w, h);\n }\n context.fill();\n context.restore();\n }\n }]);\n}();\n\nvar CRp$4 = {};\nCRp$4.initWebgl = function (opts, fns) {\n var r = this;\n var gl = r.data.contexts[r.WEBGL];\n opts.bgColor = getBGColor(r);\n opts.webglTexSize = Math.min(opts.webglTexSize, gl.getParameter(gl.MAX_TEXTURE_SIZE));\n opts.webglTexRows = Math.min(opts.webglTexRows, 54);\n opts.webglTexRowsNodes = Math.min(opts.webglTexRowsNodes, 54);\n opts.webglBatchSize = Math.min(opts.webglBatchSize, 16384);\n opts.webglTexPerBatch = Math.min(opts.webglTexPerBatch, gl.getParameter(gl.MAX_TEXTURE_IMAGE_UNITS));\n r.webglDebug = opts.webglDebug;\n r.webglDebugShowAtlases = opts.webglDebugShowAtlases;\n\n // for offscreen rendering when render target is PICKING\n r.pickingFrameBuffer = createPickingFrameBuffer(gl);\n r.pickingFrameBuffer.needsDraw = true;\n var getLabelRotation = function getLabelRotation(prop) {\n return function (ele) {\n return r.getTextAngle(ele, prop);\n };\n };\n var isLabelVisible = function isLabelVisible(prop) {\n return function (ele) {\n var label = ele.pstyle(prop);\n return label && label.value;\n };\n };\n r.drawing = new ElementDrawingWebGL(r, gl, opts);\n var our = new OverlayUnderlayRenderer(r);\n r.drawing.addAtlasCollection('node', atlasCollectionDefaults({\n texRows: opts.webglTexRowsNodes\n }));\n r.drawing.addAtlasCollection('label', atlasCollectionDefaults({\n texRows: opts.webglTexRows\n }));\n r.drawing.addAtlasRenderType('node-body', renderDefaults({\n collection: 'node',\n getKey: fns.getStyleKey,\n getBoundingBox: fns.getElementBox,\n drawElement: fns.drawElement\n }));\n r.drawing.addAtlasRenderType('label', renderDefaults({\n // node label or edge mid label\n collection: 'label',\n getKey: fns.getLabelKey,\n getBoundingBox: fns.getLabelBox,\n drawElement: fns.drawLabel,\n getRotation: getLabelRotation(null),\n getRotationPoint: fns.getLabelRotationPoint,\n getRotationOffset: fns.getLabelRotationOffset,\n isVisible: isLabelVisible('label')\n }));\n r.drawing.addAtlasRenderType('node-overlay', renderDefaults({\n collection: 'node',\n getBoundingBox: fns.getElementBox,\n getKey: function getKey(ele) {\n return our.getStyleKey('overlay', ele);\n },\n drawElement: function drawElement(ctx, ele, bb) {\n return our.draw('overlay', ctx, ele, bb);\n },\n isVisible: function isVisible(ele) {\n return our.isVisible('overlay', ele);\n },\n getPadding: function getPadding(ele) {\n return our.getPadding('overlay', ele);\n }\n }));\n r.drawing.addAtlasRenderType('node-underlay', renderDefaults({\n collection: 'node',\n getBoundingBox: fns.getElementBox,\n getKey: function getKey(ele) {\n return our.getStyleKey('underlay', ele);\n },\n drawElement: function drawElement(ctx, ele, bb) {\n return our.draw('underlay', ctx, ele, bb);\n },\n isVisible: function isVisible(ele) {\n return our.isVisible('underlay', ele);\n },\n getPadding: function getPadding(ele) {\n return our.getPadding('underlay', ele);\n }\n }));\n r.drawing.addAtlasRenderType('edge-source-label', renderDefaults({\n collection: 'label',\n getKey: fns.getSourceLabelKey,\n getBoundingBox: fns.getSourceLabelBox,\n drawElement: fns.drawSourceLabel,\n getRotation: getLabelRotation('source'),\n getRotationPoint: fns.getSourceLabelRotationPoint,\n getRotationOffset: fns.getSourceLabelRotationOffset,\n isVisible: isLabelVisible('source-label')\n }));\n r.drawing.addAtlasRenderType('edge-target-label', renderDefaults({\n collection: 'label',\n getKey: fns.getTargetLabelKey,\n getBoundingBox: fns.getTargetLabelBox,\n drawElement: fns.drawTargetLabel,\n getRotation: getLabelRotation('target'),\n getRotationPoint: fns.getTargetLabelRotationPoint,\n getRotationOffset: fns.getTargetLabelRotationOffset,\n isVisible: isLabelVisible('target-label')\n }));\n\n // this is a very simplistic way of triggering garbage collection\n var setGCFlag = debounce(function () {\n console.log('garbage collect flag set');\n r.data.gc = true;\n }, 10000);\n r.onUpdateEleCalcs(function (willDraw, eles) {\n var gcNeeded = false;\n if (eles && eles.length > 0) {\n gcNeeded |= r.drawing.invalidate(eles);\n }\n if (gcNeeded) {\n setGCFlag();\n }\n });\n\n // \"Override\" certain functions in canvas and base renderer\n overrideCanvasRendererFunctions(r);\n};\nfunction getBGColor(r) {\n var container = r.cy.container();\n var cssColor = container && container.style && container.style.backgroundColor || 'white';\n return color2tuple(cssColor);\n}\n\n/**\n * Plug into the canvas renderer to use webgl for rendering.\n */\nfunction overrideCanvasRendererFunctions(r) {\n {\n // Override the render function to call the webgl render function if the zoom level is appropriate\n var renderCanvas = r.render;\n r.render = function (options) {\n options = options || {};\n var cy = r.cy;\n if (r.webgl) {\n // if the zoom level is greater than the max zoom level, then disable webgl\n if (cy.zoom() > maxZoom$1) {\n clearWebgl(r);\n renderCanvas.call(r, options);\n } else {\n clearCanvas(r);\n renderWebgl(r, options, RENDER_TARGET.SCREEN);\n }\n }\n };\n }\n {\n // Override the matchCanvasSize function to update the picking frame buffer size\n var baseFunc = r.matchCanvasSize;\n r.matchCanvasSize = function (container) {\n baseFunc.call(r, container);\n r.pickingFrameBuffer.setFramebufferAttachmentSizes(r.canvasWidth, r.canvasHeight);\n r.pickingFrameBuffer.needsDraw = true;\n };\n }\n {\n // Override function to call the webgl version\n r.findNearestElements = function (x, y, interactiveElementsOnly, isTouch) {\n // the canvas version of this function is very slow on large graphs\n return findNearestElementsWebgl(r, x, y);\n };\n }\n\n // Don't override the selction box picking, its not accurate enough with webgl\n // { // Override function to call the webgl version\n // r.getAllInBox = function(x1, y1, x2, y2) {\n // return getAllInBoxWebgl(r, x1, y1, x2, y2);\n // }\n // }\n\n {\n // need to know when the cached elements have changed so we can invalidate our caches\n var _baseFunc = r.invalidateCachedZSortedEles;\n r.invalidateCachedZSortedEles = function () {\n _baseFunc.call(r);\n r.pickingFrameBuffer.needsDraw = true;\n };\n }\n {\n // need to know when the cached elements have changed so we can invalidate our caches\n var _baseFunc2 = r.notify;\n r.notify = function (eventName, eles) {\n _baseFunc2.call(r, eventName, eles);\n if (eventName === 'viewport' || eventName === 'bounds') {\n r.pickingFrameBuffer.needsDraw = true;\n } else if (eventName === 'background') {\n // background image finished loading, need to redraw\n r.drawing.invalidate(eles, {\n type: 'node-body'\n });\n }\n };\n }\n}\nfunction clearWebgl(r) {\n var gl = r.data.contexts[r.WEBGL];\n gl.clear(gl.COLOR_BUFFER_BIT | gl.DEPTH_BUFFER_BIT);\n}\nfunction clearCanvas(r) {\n // the CRp.clearCanvas() function doesn't take the transform into account\n var clear = function clear(context) {\n context.save();\n context.setTransform(1, 0, 0, 1, 0, 0);\n context.clearRect(0, 0, r.canvasWidth, r.canvasHeight);\n context.restore();\n };\n clear(r.data.contexts[r.NODE]);\n clear(r.data.contexts[r.DRAG]);\n}\nfunction createPanZoomMatrix(r) {\n var width = r.canvasWidth;\n var height = r.canvasHeight;\n var _util$getEffectivePan = getEffectivePanZoom(r),\n pan = _util$getEffectivePan.pan,\n zoom = _util$getEffectivePan.zoom;\n var transform = create();\n translate(transform, transform, [pan.x, pan.y]);\n scale(transform, transform, [zoom, zoom]);\n var projection$1 = create();\n projection(projection$1, width, height);\n var product = create();\n multiply(product, projection$1, transform);\n return product;\n}\nfunction setContextTransform(r, context) {\n var width = r.canvasWidth;\n var height = r.canvasHeight;\n var _util$getEffectivePan2 = getEffectivePanZoom(r),\n pan = _util$getEffectivePan2.pan,\n zoom = _util$getEffectivePan2.zoom;\n context.setTransform(1, 0, 0, 1, 0, 0);\n context.clearRect(0, 0, width, height);\n context.translate(pan.x, pan.y);\n context.scale(zoom, zoom);\n}\nfunction drawSelectionRectangle(r, options) {\n r.drawSelectionRectangle(options, function (context) {\n return setContextTransform(r, context);\n });\n}\n\n// eslint-disable-next-line no-unused-vars\nfunction drawAxes(r) {\n // for debgging\n var context = r.data.contexts[r.NODE];\n context.save();\n setContextTransform(r, context);\n context.strokeStyle = 'rgba(0, 0, 0, 0.3)';\n context.beginPath();\n context.moveTo(-1e3, 0);\n context.lineTo(1000, 0);\n context.stroke();\n context.beginPath();\n context.moveTo(0, -1e3);\n context.lineTo(0, 1000);\n context.stroke();\n context.restore();\n}\nfunction drawAtlases(r) {\n // For debugging the atlases\n var draw = function draw(drawing, name, row) {\n var collection = drawing.atlasManager.getAtlasCollection(name);\n var context = r.data.contexts[r.NODE];\n var scale = 0.125;\n var atlases = collection.atlases;\n for (var _i = 0; _i < atlases.length; _i++) {\n var atlas = atlases[_i];\n var canvas = atlas.canvas;\n if (canvas) {\n var w = canvas.width;\n var h = canvas.height;\n var x = w * _i;\n var y = canvas.height * row;\n context.save();\n context.scale(scale, scale);\n context.drawImage(canvas, x, y);\n context.strokeStyle = 'black';\n context.rect(x, y, w, h);\n context.stroke();\n context.restore();\n }\n }\n };\n var i = 0;\n draw(r.drawing, 'node', i++);\n draw(r.drawing, 'label', i++);\n}\n\n/**\n * Arguments are in model coordinates.\n * (x1, y1) is top left corner\n * (x2, y2) is bottom right corner (optional)\n * Returns a Set of indexes.\n */\nfunction getPickingIndexes(r, mX1, mY1, mX2, mY2) {\n var x, y, w, h;\n var _util$getEffectivePan3 = getEffectivePanZoom(r),\n pan = _util$getEffectivePan3.pan,\n zoom = _util$getEffectivePan3.zoom;\n {\n var _util$modelToRendered = modelToRenderedPosition(r, pan, zoom, mX1, mY1),\n _util$modelToRendered2 = _slicedToArray(_util$modelToRendered, 2),\n cX1 = _util$modelToRendered2[0],\n cY1 = _util$modelToRendered2[1];\n var t = 6; // should be even\n x = cX1 - t / 2;\n y = cY1 - t / 2;\n w = t;\n h = t;\n }\n if (w === 0 || h === 0) {\n return [];\n }\n var gl = r.data.contexts[r.WEBGL];\n gl.bindFramebuffer(gl.FRAMEBUFFER, r.pickingFrameBuffer);\n if (r.pickingFrameBuffer.needsDraw) {\n // Draw element z-indexes to the picking framebuffer\n gl.viewport(0, 0, gl.canvas.width, gl.canvas.height);\n renderWebgl(r, null, RENDER_TARGET.PICKING);\n r.pickingFrameBuffer.needsDraw = false;\n }\n var n = w * h; // number of pixels to read\n // eslint-disable-next-line no-undef\n var data = new Uint8Array(n * 4); // 4 bytes per pixel\n gl.readPixels(x, y, w, h, gl.RGBA, gl.UNSIGNED_BYTE, data);\n gl.bindFramebuffer(gl.FRAMEBUFFER, null);\n var indexes = new Set();\n for (var i = 0; i < n; i++) {\n var pixel = data.slice(i * 4, i * 4 + 4);\n var index = vec4ToIndex(pixel) - 1; // The framebuffer is cleared with 0s, so z-indexes are offset by 1\n if (index >= 0) {\n indexes.add(index);\n }\n }\n return indexes;\n}\n\n/**\n * Cy.js: model coordinate y axis goes down\n */\nfunction findNearestElementsWebgl(r, x, y) {\n // model coordinates\n var indexes = getPickingIndexes(r, x, y);\n var eles = r.getCachedZSortedEles();\n var node, edge;\n var _iterator = _createForOfIteratorHelper(indexes),\n _step;\n try {\n for (_iterator.s(); !(_step = _iterator.n()).done;) {\n var index = _step.value;\n var ele = eles[index];\n if (!node && ele.isNode()) {\n node = ele;\n }\n if (!edge && ele.isEdge()) {\n edge = ele;\n }\n if (node && edge) {\n break;\n }\n }\n } catch (err) {\n _iterator.e(err);\n } finally {\n _iterator.f();\n }\n return [node, edge].filter(Boolean);\n}\n\n// TODO: Is constantly checking this slower than just rendering a texture?\n// Maybe this should be cached as a flag on each node.\nfunction isSimpleRectangle(node) {\n return node.pstyle('shape').value === 'rectangle' && node.pstyle('background-fill').value === 'solid' && node.pstyle('border-width').pfValue === 0 && node.pstyle('background-image').strValue === 'none';\n}\nfunction drawEle(r, index, ele) {\n var drawing = r.drawing;\n index += 1; // 0 is used to clear the background, need to offset all z-indexes by one\n if (ele.isNode()) {\n drawing.drawTexture(ele, index, 'node-underlay');\n if (isSimpleRectangle(ele)) {\n drawing.drawSimpleRectangle(ele, index, 'node-body');\n } else {\n drawing.drawTexture(ele, index, 'node-body');\n }\n drawing.drawTexture(ele, index, 'label');\n drawing.drawTexture(ele, index, 'node-overlay');\n } else {\n drawing.drawEdgeLine(ele, index);\n drawing.drawEdgeArrow(ele, index, 'source');\n drawing.drawEdgeArrow(ele, index, 'target');\n drawing.drawTexture(ele, index, 'label');\n drawing.drawTexture(ele, index, 'edge-source-label');\n drawing.drawTexture(ele, index, 'edge-target-label');\n }\n}\nfunction renderWebgl(r, options, renderTarget) {\n var start;\n if (r.webglDebug) {\n start = performance.now(); // eslint-disable-line no-undef\n }\n var drawing = r.drawing;\n var eleCount = 0;\n if (renderTarget.screen) {\n if (r.data.canvasNeedsRedraw[r.SELECT_BOX]) {\n drawSelectionRectangle(r, options);\n }\n }\n\n // see drawing-elements.js drawCachedElement()\n if (r.data.canvasNeedsRedraw[r.NODE] || renderTarget.picking) {\n var gl = r.data.contexts[r.WEBGL];\n if (renderTarget.screen) {\n gl.clearColor(0, 0, 0, 0); // background color\n gl.enable(gl.BLEND); // enable alpha blending of textures\n gl.blendFunc(gl.ONE, gl.ONE_MINUS_SRC_ALPHA); // we are using premultiplied alpha\n } else {\n gl.disable(gl.BLEND);\n }\n gl.clear(gl.COLOR_BUFFER_BIT | gl.DEPTH_BUFFER_BIT);\n gl.viewport(0, 0, gl.canvas.width, gl.canvas.height);\n var panZoomMatrix = createPanZoomMatrix(r);\n var eles = r.getCachedZSortedEles();\n eleCount = eles.length;\n drawing.startFrame(panZoomMatrix, renderTarget);\n if (renderTarget.screen) {\n for (var i = 0; i < eles.nondrag.length; i++) {\n drawEle(r, i, eles.nondrag[i]);\n }\n for (var _i2 = 0; _i2 < eles.drag.length; _i2++) {\n drawEle(r, _i2, eles.drag[_i2]);\n }\n } else if (renderTarget.picking) {\n for (var _i3 = 0; _i3 < eles.length; _i3++) {\n drawEle(r, _i3, eles[_i3]);\n }\n }\n drawing.endFrame();\n if (renderTarget.screen && r.webglDebugShowAtlases) {\n drawAxes(r);\n drawAtlases(r);\n }\n r.data.canvasNeedsRedraw[r.NODE] = false;\n r.data.canvasNeedsRedraw[r.DRAG] = false;\n }\n if (r.webglDebug) {\n // eslint-disable-next-line no-undef\n var end = performance.now();\n var compact = false;\n var time = Math.ceil(end - start);\n var debugInfo = drawing.getDebugInfo();\n var report = [\"\".concat(eleCount, \" elements\"), \"\".concat(debugInfo.totalInstances, \" instances\"), \"\".concat(debugInfo.batchCount, \" batches\"), \"\".concat(debugInfo.totalAtlases, \" atlases\"), \"\".concat(debugInfo.wrappedCount, \" wrapped textures\"), \"\".concat(debugInfo.rectangleCount, \" simple rectangles\")].join(', ');\n if (compact) {\n console.log(\"WebGL (\".concat(renderTarget.name, \") - time \").concat(time, \"ms, \").concat(report));\n } else {\n console.log(\"WebGL (\".concat(renderTarget.name, \") - frame time \").concat(time, \"ms\"));\n console.log('Totals:');\n console.log(\" \".concat(report));\n console.log('Texture Atlases Used:');\n var atlasInfo = debugInfo.atlasInfo;\n var _iterator3 = _createForOfIteratorHelper(atlasInfo),\n _step3;\n try {\n for (_iterator3.s(); !(_step3 = _iterator3.n()).done;) {\n var info = _step3.value;\n console.log(\" \".concat(info.type, \": \").concat(info.keyCount, \" keys, \").concat(info.atlasCount, \" atlases\"));\n }\n } catch (err) {\n _iterator3.e(err);\n } finally {\n _iterator3.f();\n }\n console.log('');\n }\n }\n if (r.data.gc) {\n console.log('Garbage Collect!');\n r.data.gc = false;\n drawing.gc();\n }\n}\n\nvar CRp$3 = {};\n\n// @O Polygon drawing\nCRp$3.drawPolygonPath = function (context, x, y, width, height, points) {\n var halfW = width / 2;\n var halfH = height / 2;\n if (context.beginPath) {\n context.beginPath();\n }\n context.moveTo(x + halfW * points[0], y + halfH * points[1]);\n for (var i = 1; i < points.length / 2; i++) {\n context.lineTo(x + halfW * points[i * 2], y + halfH * points[i * 2 + 1]);\n }\n context.closePath();\n};\nCRp$3.drawRoundPolygonPath = function (context, x, y, width, height, points, corners) {\n corners.forEach(function (corner) {\n return drawPreparedRoundCorner(context, corner);\n });\n context.closePath();\n};\n\n// Round rectangle drawing\nCRp$3.drawRoundRectanglePath = function (context, x, y, width, height, radius) {\n var halfWidth = width / 2;\n var halfHeight = height / 2;\n var cornerRadius = radius === 'auto' ? getRoundRectangleRadius(width, height) : Math.min(radius, halfHeight, halfWidth);\n if (context.beginPath) {\n context.beginPath();\n }\n\n // Start at top middle\n context.moveTo(x, y - halfHeight);\n // Arc from middle top to right side\n context.arcTo(x + halfWidth, y - halfHeight, x + halfWidth, y, cornerRadius);\n // Arc from right side to bottom\n context.arcTo(x + halfWidth, y + halfHeight, x, y + halfHeight, cornerRadius);\n // Arc from bottom to left side\n context.arcTo(x - halfWidth, y + halfHeight, x - halfWidth, y, cornerRadius);\n // Arc from left side to topBorder\n context.arcTo(x - halfWidth, y - halfHeight, x, y - halfHeight, cornerRadius);\n // Join line\n context.lineTo(x, y - halfHeight);\n context.closePath();\n};\nCRp$3.drawBottomRoundRectanglePath = function (context, x, y, width, height, radius) {\n var halfWidth = width / 2;\n var halfHeight = height / 2;\n var cornerRadius = radius === 'auto' ? getRoundRectangleRadius(width, height) : radius;\n if (context.beginPath) {\n context.beginPath();\n }\n\n // Start at top middle\n context.moveTo(x, y - halfHeight);\n context.lineTo(x + halfWidth, y - halfHeight);\n context.lineTo(x + halfWidth, y);\n context.arcTo(x + halfWidth, y + halfHeight, x, y + halfHeight, cornerRadius);\n context.arcTo(x - halfWidth, y + halfHeight, x - halfWidth, y, cornerRadius);\n context.lineTo(x - halfWidth, y - halfHeight);\n context.lineTo(x, y - halfHeight);\n context.closePath();\n};\nCRp$3.drawCutRectanglePath = function (context, x, y, width, height, points, corners) {\n var halfWidth = width / 2;\n var halfHeight = height / 2;\n var cornerLength = corners === 'auto' ? getCutRectangleCornerLength() : corners;\n if (context.beginPath) {\n context.beginPath();\n }\n context.moveTo(x - halfWidth + cornerLength, y - halfHeight);\n context.lineTo(x + halfWidth - cornerLength, y - halfHeight);\n context.lineTo(x + halfWidth, y - halfHeight + cornerLength);\n context.lineTo(x + halfWidth, y + halfHeight - cornerLength);\n context.lineTo(x + halfWidth - cornerLength, y + halfHeight);\n context.lineTo(x - halfWidth + cornerLength, y + halfHeight);\n context.lineTo(x - halfWidth, y + halfHeight - cornerLength);\n context.lineTo(x - halfWidth, y - halfHeight + cornerLength);\n context.closePath();\n};\nCRp$3.drawBarrelPath = function (context, x, y, width, height) {\n var halfWidth = width / 2;\n var halfHeight = height / 2;\n var xBegin = x - halfWidth;\n var xEnd = x + halfWidth;\n var yBegin = y - halfHeight;\n var yEnd = y + halfHeight;\n var barrelCurveConstants = getBarrelCurveConstants(width, height);\n var wOffset = barrelCurveConstants.widthOffset;\n var hOffset = barrelCurveConstants.heightOffset;\n var ctrlPtXOffset = barrelCurveConstants.ctrlPtOffsetPct * wOffset;\n if (context.beginPath) {\n context.beginPath();\n }\n context.moveTo(xBegin, yBegin + hOffset);\n context.lineTo(xBegin, yEnd - hOffset);\n context.quadraticCurveTo(xBegin + ctrlPtXOffset, yEnd, xBegin + wOffset, yEnd);\n context.lineTo(xEnd - wOffset, yEnd);\n context.quadraticCurveTo(xEnd - ctrlPtXOffset, yEnd, xEnd, yEnd - hOffset);\n context.lineTo(xEnd, yBegin + hOffset);\n context.quadraticCurveTo(xEnd - ctrlPtXOffset, yBegin, xEnd - wOffset, yBegin);\n context.lineTo(xBegin + wOffset, yBegin);\n context.quadraticCurveTo(xBegin + ctrlPtXOffset, yBegin, xBegin, yBegin + hOffset);\n context.closePath();\n};\nvar sin0 = Math.sin(0);\nvar cos0 = Math.cos(0);\nvar sin = {};\nvar cos = {};\nvar ellipseStepSize = Math.PI / 40;\nfor (var i = 0 * Math.PI; i < 2 * Math.PI; i += ellipseStepSize) {\n sin[i] = Math.sin(i);\n cos[i] = Math.cos(i);\n}\nCRp$3.drawEllipsePath = function (context, centerX, centerY, width, height) {\n if (context.beginPath) {\n context.beginPath();\n }\n if (context.ellipse) {\n context.ellipse(centerX, centerY, width / 2, height / 2, 0, 0, 2 * Math.PI);\n } else {\n var xPos, yPos;\n var rw = width / 2;\n var rh = height / 2;\n for (var i = 0 * Math.PI; i < 2 * Math.PI; i += ellipseStepSize) {\n xPos = centerX - rw * sin[i] * sin0 + rw * cos[i] * cos0;\n yPos = centerY + rh * cos[i] * sin0 + rh * sin[i] * cos0;\n if (i === 0) {\n context.moveTo(xPos, yPos);\n } else {\n context.lineTo(xPos, yPos);\n }\n }\n }\n context.closePath();\n};\n\n/* global atob, ArrayBuffer, Uint8Array, Blob */\n\nvar CRp$2 = {};\nCRp$2.createBuffer = function (w, h) {\n var buffer = document.createElement('canvas'); // eslint-disable-line no-undef\n buffer.width = w;\n buffer.height = h;\n return [buffer, buffer.getContext('2d')];\n};\nCRp$2.bufferCanvasImage = function (options) {\n var cy = this.cy;\n var eles = cy.mutableElements();\n var bb = eles.boundingBox();\n var ctrRect = this.findContainerClientCoords();\n var width = options.full ? Math.ceil(bb.w) : ctrRect[2];\n var height = options.full ? Math.ceil(bb.h) : ctrRect[3];\n var specdMaxDims = number$1(options.maxWidth) || number$1(options.maxHeight);\n var pxRatio = this.getPixelRatio();\n var scale = 1;\n if (options.scale !== undefined) {\n width *= options.scale;\n height *= options.scale;\n scale = options.scale;\n } else if (specdMaxDims) {\n var maxScaleW = Infinity;\n var maxScaleH = Infinity;\n if (number$1(options.maxWidth)) {\n maxScaleW = scale * options.maxWidth / width;\n }\n if (number$1(options.maxHeight)) {\n maxScaleH = scale * options.maxHeight / height;\n }\n scale = Math.min(maxScaleW, maxScaleH);\n width *= scale;\n height *= scale;\n }\n if (!specdMaxDims) {\n width *= pxRatio;\n height *= pxRatio;\n scale *= pxRatio;\n }\n var buffCanvas = document.createElement('canvas'); // eslint-disable-line no-undef\n\n buffCanvas.width = width;\n buffCanvas.height = height;\n buffCanvas.style.width = width + 'px';\n buffCanvas.style.height = height + 'px';\n var buffCxt = buffCanvas.getContext('2d');\n\n // Rasterize the layers, but only if container has nonzero size\n if (width > 0 && height > 0) {\n buffCxt.clearRect(0, 0, width, height);\n buffCxt.globalCompositeOperation = 'source-over';\n var zsortedEles = this.getCachedZSortedEles();\n if (options.full) {\n // draw the full bounds of the graph\n buffCxt.translate(-bb.x1 * scale, -bb.y1 * scale);\n buffCxt.scale(scale, scale);\n this.drawElements(buffCxt, zsortedEles);\n buffCxt.scale(1 / scale, 1 / scale);\n buffCxt.translate(bb.x1 * scale, bb.y1 * scale);\n } else {\n // draw the current view\n var pan = cy.pan();\n var translation = {\n x: pan.x * scale,\n y: pan.y * scale\n };\n scale *= cy.zoom();\n buffCxt.translate(translation.x, translation.y);\n buffCxt.scale(scale, scale);\n this.drawElements(buffCxt, zsortedEles);\n buffCxt.scale(1 / scale, 1 / scale);\n buffCxt.translate(-translation.x, -translation.y);\n }\n\n // need to fill bg at end like this in order to fill cleared transparent pixels in jpgs\n if (options.bg) {\n buffCxt.globalCompositeOperation = 'destination-over';\n buffCxt.fillStyle = options.bg;\n buffCxt.rect(0, 0, width, height);\n buffCxt.fill();\n }\n }\n return buffCanvas;\n};\nfunction b64ToBlob(b64, mimeType) {\n var bytes = atob(b64);\n var buff = new ArrayBuffer(bytes.length);\n var buffUint8 = new Uint8Array(buff);\n for (var i = 0; i < bytes.length; i++) {\n buffUint8[i] = bytes.charCodeAt(i);\n }\n return new Blob([buff], {\n type: mimeType\n });\n}\nfunction b64UriToB64(b64uri) {\n var i = b64uri.indexOf(',');\n return b64uri.substr(i + 1);\n}\nfunction output(options, canvas, mimeType) {\n var getB64Uri = function getB64Uri() {\n return canvas.toDataURL(mimeType, options.quality);\n };\n switch (options.output) {\n case 'blob-promise':\n return new Promise$1(function (resolve, reject) {\n try {\n canvas.toBlob(function (blob) {\n if (blob != null) {\n resolve(blob);\n } else {\n reject(new Error('`canvas.toBlob()` sent a null value in its callback'));\n }\n }, mimeType, options.quality);\n } catch (err) {\n reject(err);\n }\n });\n case 'blob':\n return b64ToBlob(b64UriToB64(getB64Uri()), mimeType);\n case 'base64':\n return b64UriToB64(getB64Uri());\n case 'base64uri':\n default:\n return getB64Uri();\n }\n}\nCRp$2.png = function (options) {\n return output(options, this.bufferCanvasImage(options), 'image/png');\n};\nCRp$2.jpg = function (options) {\n return output(options, this.bufferCanvasImage(options), 'image/jpeg');\n};\n\nvar CRp$1 = {};\nCRp$1.nodeShapeImpl = function (name, context, centerX, centerY, width, height, points, corners) {\n switch (name) {\n case 'ellipse':\n return this.drawEllipsePath(context, centerX, centerY, width, height);\n case 'polygon':\n return this.drawPolygonPath(context, centerX, centerY, width, height, points);\n case 'round-polygon':\n return this.drawRoundPolygonPath(context, centerX, centerY, width, height, points, corners);\n case 'roundrectangle':\n case 'round-rectangle':\n return this.drawRoundRectanglePath(context, centerX, centerY, width, height, corners);\n case 'cutrectangle':\n case 'cut-rectangle':\n return this.drawCutRectanglePath(context, centerX, centerY, width, height, points, corners);\n case 'bottomroundrectangle':\n case 'bottom-round-rectangle':\n return this.drawBottomRoundRectanglePath(context, centerX, centerY, width, height, corners);\n case 'barrel':\n return this.drawBarrelPath(context, centerX, centerY, width, height);\n }\n};\n\nvar CR = CanvasRenderer;\nvar CRp = CanvasRenderer.prototype;\nCRp.CANVAS_LAYERS = 3;\n//\nCRp.SELECT_BOX = 0;\nCRp.DRAG = 1;\nCRp.NODE = 2;\nCRp.WEBGL = 3;\nCRp.CANVAS_TYPES = ['2d', '2d', '2d', 'webgl2'];\nCRp.BUFFER_COUNT = 3;\n//\nCRp.TEXTURE_BUFFER = 0;\nCRp.MOTIONBLUR_BUFFER_NODE = 1;\nCRp.MOTIONBLUR_BUFFER_DRAG = 2;\nfunction CanvasRenderer(options) {\n var r = this;\n var containerWindow = r.cy.window();\n var document = containerWindow.document;\n if (options.webgl) {\n CRp.CANVAS_LAYERS = r.CANVAS_LAYERS = 4;\n console.log('webgl rendering enabled');\n }\n r.data = {\n canvases: new Array(CRp.CANVAS_LAYERS),\n contexts: new Array(CRp.CANVAS_LAYERS),\n canvasNeedsRedraw: new Array(CRp.CANVAS_LAYERS),\n bufferCanvases: new Array(CRp.BUFFER_COUNT),\n bufferContexts: new Array(CRp.CANVAS_LAYERS)\n };\n var tapHlOffAttr = '-webkit-tap-highlight-color';\n var tapHlOffStyle = 'rgba(0,0,0,0)';\n r.data.canvasContainer = document.createElement('div'); // eslint-disable-line no-undef\n var containerStyle = r.data.canvasContainer.style;\n r.data.canvasContainer.style[tapHlOffAttr] = tapHlOffStyle;\n containerStyle.position = 'relative';\n containerStyle.zIndex = '0';\n containerStyle.overflow = 'hidden';\n var container = options.cy.container();\n container.appendChild(r.data.canvasContainer);\n container.style[tapHlOffAttr] = tapHlOffStyle;\n var styleMap = {\n '-webkit-user-select': 'none',\n '-moz-user-select': '-moz-none',\n 'user-select': 'none',\n '-webkit-tap-highlight-color': 'rgba(0,0,0,0)',\n 'outline-style': 'none'\n };\n if (ms()) {\n styleMap['-ms-touch-action'] = 'none';\n styleMap['touch-action'] = 'none';\n }\n for (var i = 0; i < CRp.CANVAS_LAYERS; i++) {\n var canvas = r.data.canvases[i] = document.createElement('canvas'); // eslint-disable-line no-undef\n var type = CRp.CANVAS_TYPES[i];\n r.data.contexts[i] = canvas.getContext(type);\n if (!r.data.contexts[i]) {\n error('Could not create canvas of type ' + type);\n }\n Object.keys(styleMap).forEach(function (k) {\n canvas.style[k] = styleMap[k];\n });\n canvas.style.position = 'absolute';\n canvas.setAttribute('data-id', 'layer' + i);\n canvas.style.zIndex = String(CRp.CANVAS_LAYERS - i);\n r.data.canvasContainer.appendChild(canvas);\n r.data.canvasNeedsRedraw[i] = false;\n }\n r.data.topCanvas = r.data.canvases[0];\n r.data.canvases[CRp.NODE].setAttribute('data-id', 'layer' + CRp.NODE + '-node');\n r.data.canvases[CRp.SELECT_BOX].setAttribute('data-id', 'layer' + CRp.SELECT_BOX + '-selectbox');\n r.data.canvases[CRp.DRAG].setAttribute('data-id', 'layer' + CRp.DRAG + '-drag');\n if (r.data.canvases[CRp.WEBGL]) {\n r.data.canvases[CRp.WEBGL].setAttribute('data-id', 'layer' + CRp.WEBGL + '-webgl');\n }\n for (var i = 0; i < CRp.BUFFER_COUNT; i++) {\n r.data.bufferCanvases[i] = document.createElement('canvas'); // eslint-disable-line no-undef\n r.data.bufferContexts[i] = r.data.bufferCanvases[i].getContext('2d');\n r.data.bufferCanvases[i].style.position = 'absolute';\n r.data.bufferCanvases[i].setAttribute('data-id', 'buffer' + i);\n r.data.bufferCanvases[i].style.zIndex = String(-i - 1);\n r.data.bufferCanvases[i].style.visibility = 'hidden';\n //r.data.canvasContainer.appendChild(r.data.bufferCanvases[i]);\n }\n r.pathsEnabled = true;\n var emptyBb = makeBoundingBox();\n var getBoxCenter = function getBoxCenter(bb) {\n return {\n x: (bb.x1 + bb.x2) / 2,\n y: (bb.y1 + bb.y2) / 2\n };\n };\n var getCenterOffset = function getCenterOffset(bb) {\n return {\n x: -bb.w / 2,\n y: -bb.h / 2\n };\n };\n var backgroundTimestampHasChanged = function backgroundTimestampHasChanged(ele) {\n var _p = ele[0]._private;\n var same = _p.oldBackgroundTimestamp === _p.backgroundTimestamp;\n return !same;\n };\n var getStyleKey = function getStyleKey(ele) {\n return ele[0]._private.nodeKey;\n };\n var getLabelKey = function getLabelKey(ele) {\n return ele[0]._private.labelStyleKey;\n };\n var getSourceLabelKey = function getSourceLabelKey(ele) {\n return ele[0]._private.sourceLabelStyleKey;\n };\n var getTargetLabelKey = function getTargetLabelKey(ele) {\n return ele[0]._private.targetLabelStyleKey;\n };\n var drawElement = function drawElement(context, ele, bb, scaledLabelShown, useEleOpacity) {\n return r.drawElement(context, ele, bb, false, false, useEleOpacity);\n };\n var drawLabel = function drawLabel(context, ele, bb, scaledLabelShown, useEleOpacity) {\n return r.drawElementText(context, ele, bb, scaledLabelShown, 'main', useEleOpacity);\n };\n var drawSourceLabel = function drawSourceLabel(context, ele, bb, scaledLabelShown, useEleOpacity) {\n return r.drawElementText(context, ele, bb, scaledLabelShown, 'source', useEleOpacity);\n };\n var drawTargetLabel = function drawTargetLabel(context, ele, bb, scaledLabelShown, useEleOpacity) {\n return r.drawElementText(context, ele, bb, scaledLabelShown, 'target', useEleOpacity);\n };\n var getElementBox = function getElementBox(ele) {\n ele.boundingBox();\n return ele[0]._private.bodyBounds;\n };\n var getLabelBox = function getLabelBox(ele) {\n ele.boundingBox();\n return ele[0]._private.labelBounds.main || emptyBb;\n };\n var getSourceLabelBox = function getSourceLabelBox(ele) {\n ele.boundingBox();\n return ele[0]._private.labelBounds.source || emptyBb;\n };\n var getTargetLabelBox = function getTargetLabelBox(ele) {\n ele.boundingBox();\n return ele[0]._private.labelBounds.target || emptyBb;\n };\n var isLabelVisibleAtScale = function isLabelVisibleAtScale(ele, scaledLabelShown) {\n return scaledLabelShown;\n };\n var getElementRotationPoint = function getElementRotationPoint(ele) {\n return getBoxCenter(getElementBox(ele));\n };\n var addTextMargin = function addTextMargin(prefix, pt, ele) {\n var pre = prefix ? prefix + '-' : '';\n return {\n x: pt.x + ele.pstyle(pre + 'text-margin-x').pfValue,\n y: pt.y + ele.pstyle(pre + 'text-margin-y').pfValue\n };\n };\n var getRsPt = function getRsPt(ele, x, y) {\n var rs = ele[0]._private.rscratch;\n return {\n x: rs[x],\n y: rs[y]\n };\n };\n var getLabelRotationPoint = function getLabelRotationPoint(ele) {\n return addTextMargin('', getRsPt(ele, 'labelX', 'labelY'), ele);\n };\n var getSourceLabelRotationPoint = function getSourceLabelRotationPoint(ele) {\n return addTextMargin('source', getRsPt(ele, 'sourceLabelX', 'sourceLabelY'), ele);\n };\n var getTargetLabelRotationPoint = function getTargetLabelRotationPoint(ele) {\n return addTextMargin('target', getRsPt(ele, 'targetLabelX', 'targetLabelY'), ele);\n };\n var getElementRotationOffset = function getElementRotationOffset(ele) {\n return getCenterOffset(getElementBox(ele));\n };\n var getSourceLabelRotationOffset = function getSourceLabelRotationOffset(ele) {\n return getCenterOffset(getSourceLabelBox(ele));\n };\n var getTargetLabelRotationOffset = function getTargetLabelRotationOffset(ele) {\n return getCenterOffset(getTargetLabelBox(ele));\n };\n var getLabelRotationOffset = function getLabelRotationOffset(ele) {\n var bb = getLabelBox(ele);\n var p = getCenterOffset(getLabelBox(ele));\n if (ele.isNode()) {\n switch (ele.pstyle('text-halign').value) {\n case 'left':\n p.x = -bb.w - (bb.leftPad || 0);\n break;\n case 'right':\n p.x = -(bb.rightPad || 0);\n break;\n }\n switch (ele.pstyle('text-valign').value) {\n case 'top':\n p.y = -bb.h - (bb.topPad || 0);\n break;\n case 'bottom':\n p.y = -(bb.botPad || 0);\n break;\n }\n }\n return p;\n };\n var eleTxrCache = r.data.eleTxrCache = new ElementTextureCache(r, {\n getKey: getStyleKey,\n doesEleInvalidateKey: backgroundTimestampHasChanged,\n drawElement: drawElement,\n getBoundingBox: getElementBox,\n getRotationPoint: getElementRotationPoint,\n getRotationOffset: getElementRotationOffset,\n allowEdgeTxrCaching: false,\n allowParentTxrCaching: false\n });\n var lblTxrCache = r.data.lblTxrCache = new ElementTextureCache(r, {\n getKey: getLabelKey,\n drawElement: drawLabel,\n getBoundingBox: getLabelBox,\n getRotationPoint: getLabelRotationPoint,\n getRotationOffset: getLabelRotationOffset,\n isVisible: isLabelVisibleAtScale\n });\n var slbTxrCache = r.data.slbTxrCache = new ElementTextureCache(r, {\n getKey: getSourceLabelKey,\n drawElement: drawSourceLabel,\n getBoundingBox: getSourceLabelBox,\n getRotationPoint: getSourceLabelRotationPoint,\n getRotationOffset: getSourceLabelRotationOffset,\n isVisible: isLabelVisibleAtScale\n });\n var tlbTxrCache = r.data.tlbTxrCache = new ElementTextureCache(r, {\n getKey: getTargetLabelKey,\n drawElement: drawTargetLabel,\n getBoundingBox: getTargetLabelBox,\n getRotationPoint: getTargetLabelRotationPoint,\n getRotationOffset: getTargetLabelRotationOffset,\n isVisible: isLabelVisibleAtScale\n });\n var lyrTxrCache = r.data.lyrTxrCache = new LayeredTextureCache(r);\n r.onUpdateEleCalcs(function invalidateTextureCaches(willDraw, eles) {\n // each cache should check for sub-key diff to see that the update affects that cache particularly\n eleTxrCache.invalidateElements(eles);\n lblTxrCache.invalidateElements(eles);\n slbTxrCache.invalidateElements(eles);\n tlbTxrCache.invalidateElements(eles);\n\n // any change invalidates the layers\n lyrTxrCache.invalidateElements(eles);\n\n // update the old bg timestamp so diffs can be done in the ele txr caches\n for (var _i = 0; _i < eles.length; _i++) {\n var _p = eles[_i]._private;\n _p.oldBackgroundTimestamp = _p.backgroundTimestamp;\n }\n });\n var refineInLayers = function refineInLayers(reqs) {\n for (var i = 0; i < reqs.length; i++) {\n lyrTxrCache.enqueueElementRefinement(reqs[i].ele);\n }\n };\n eleTxrCache.onDequeue(refineInLayers);\n lblTxrCache.onDequeue(refineInLayers);\n slbTxrCache.onDequeue(refineInLayers);\n tlbTxrCache.onDequeue(refineInLayers);\n if (options.webgl) {\n r.initWebgl(options, {\n getStyleKey: getStyleKey,\n getLabelKey: getLabelKey,\n getSourceLabelKey: getSourceLabelKey,\n getTargetLabelKey: getTargetLabelKey,\n drawElement: drawElement,\n drawLabel: drawLabel,\n drawSourceLabel: drawSourceLabel,\n drawTargetLabel: drawTargetLabel,\n getElementBox: getElementBox,\n getLabelBox: getLabelBox,\n getSourceLabelBox: getSourceLabelBox,\n getTargetLabelBox: getTargetLabelBox,\n getElementRotationPoint: getElementRotationPoint,\n getElementRotationOffset: getElementRotationOffset,\n getLabelRotationPoint: getLabelRotationPoint,\n getSourceLabelRotationPoint: getSourceLabelRotationPoint,\n getTargetLabelRotationPoint: getTargetLabelRotationPoint,\n getLabelRotationOffset: getLabelRotationOffset,\n getSourceLabelRotationOffset: getSourceLabelRotationOffset,\n getTargetLabelRotationOffset: getTargetLabelRotationOffset\n });\n }\n}\nCRp.redrawHint = function (group, bool) {\n var r = this;\n switch (group) {\n case 'eles':\n r.data.canvasNeedsRedraw[CRp.NODE] = bool;\n break;\n case 'drag':\n r.data.canvasNeedsRedraw[CRp.DRAG] = bool;\n break;\n case 'select':\n r.data.canvasNeedsRedraw[CRp.SELECT_BOX] = bool;\n break;\n case 'gc':\n r.data.gc = true;\n break;\n }\n};\n\n// whether to use Path2D caching for drawing\nvar pathsImpld = typeof Path2D !== 'undefined';\nCRp.path2dEnabled = function (on) {\n if (on === undefined) {\n return this.pathsEnabled;\n }\n this.pathsEnabled = on ? true : false;\n};\nCRp.usePaths = function () {\n return pathsImpld && this.pathsEnabled;\n};\nCRp.setImgSmoothing = function (context, bool) {\n if (context.imageSmoothingEnabled != null) {\n context.imageSmoothingEnabled = bool;\n } else {\n context.webkitImageSmoothingEnabled = bool;\n context.mozImageSmoothingEnabled = bool;\n context.msImageSmoothingEnabled = bool;\n }\n};\nCRp.getImgSmoothing = function (context) {\n if (context.imageSmoothingEnabled != null) {\n return context.imageSmoothingEnabled;\n } else {\n return context.webkitImageSmoothingEnabled || context.mozImageSmoothingEnabled || context.msImageSmoothingEnabled;\n }\n};\nCRp.makeOffscreenCanvas = function (width, height) {\n var canvas;\n if ((typeof OffscreenCanvas === \"undefined\" ? \"undefined\" : _typeof(OffscreenCanvas)) !== (\"undefined\" )) {\n canvas = new OffscreenCanvas(width, height);\n } else {\n var containerWindow = this.cy.window();\n var document = containerWindow.document;\n canvas = document.createElement('canvas'); // eslint-disable-line no-undef\n canvas.width = width;\n canvas.height = height;\n }\n return canvas;\n};\n[CRp$b, CRp$a, CRp$9, CRp$8, CRp$7, CRp$6, CRp$5, CRp$4, CRp$3, CRp$2, CRp$1].forEach(function (props) {\n extend(CRp, props);\n});\n\nvar renderer = [{\n name: 'null',\n impl: NullRenderer\n}, {\n name: 'base',\n impl: BR\n}, {\n name: 'canvas',\n impl: CR\n}];\n\nvar incExts = [{\n type: 'layout',\n extensions: layout\n}, {\n type: 'renderer',\n extensions: renderer\n}];\n\n// registered extensions to cytoscape, indexed by name\nvar extensions = {};\n\n// registered modules for extensions, indexed by name\nvar modules = {};\nfunction setExtension(type, name, registrant) {\n var ext = registrant;\n var overrideErr = function overrideErr(field) {\n warn('Can not register `' + name + '` for `' + type + '` since `' + field + '` already exists in the prototype and can not be overridden');\n };\n if (type === 'core') {\n if (Core.prototype[name]) {\n return overrideErr(name);\n } else {\n Core.prototype[name] = registrant;\n }\n } else if (type === 'collection') {\n if (Collection.prototype[name]) {\n return overrideErr(name);\n } else {\n Collection.prototype[name] = registrant;\n }\n } else if (type === 'layout') {\n // fill in missing layout functions in the prototype\n\n var Layout = function Layout(options) {\n this.options = options;\n registrant.call(this, options);\n\n // make sure layout has _private for use w/ std apis like .on()\n if (!plainObject(this._private)) {\n this._private = {};\n }\n this._private.cy = options.cy;\n this._private.listeners = [];\n this.createEmitter();\n };\n var layoutProto = Layout.prototype = Object.create(registrant.prototype);\n var optLayoutFns = [];\n for (var i = 0; i < optLayoutFns.length; i++) {\n var fnName = optLayoutFns[i];\n layoutProto[fnName] = layoutProto[fnName] || function () {\n return this;\n };\n }\n\n // either .start() or .run() is defined, so autogen the other\n if (layoutProto.start && !layoutProto.run) {\n layoutProto.run = function () {\n this.start();\n return this;\n };\n } else if (!layoutProto.start && layoutProto.run) {\n layoutProto.start = function () {\n this.run();\n return this;\n };\n }\n var regStop = registrant.prototype.stop;\n layoutProto.stop = function () {\n var opts = this.options;\n if (opts && opts.animate) {\n var anis = this.animations;\n if (anis) {\n for (var _i = 0; _i < anis.length; _i++) {\n anis[_i].stop();\n }\n }\n }\n if (regStop) {\n regStop.call(this);\n } else {\n this.emit('layoutstop');\n }\n return this;\n };\n if (!layoutProto.destroy) {\n layoutProto.destroy = function () {\n return this;\n };\n }\n layoutProto.cy = function () {\n return this._private.cy;\n };\n var getCy = function getCy(layout) {\n return layout._private.cy;\n };\n var emitterOpts = {\n addEventFields: function addEventFields(layout, evt) {\n evt.layout = layout;\n evt.cy = getCy(layout);\n evt.target = layout;\n },\n bubble: function bubble() {\n return true;\n },\n parent: function parent(layout) {\n return getCy(layout);\n }\n };\n extend(layoutProto, {\n createEmitter: function createEmitter() {\n this._private.emitter = new Emitter(emitterOpts, this);\n return this;\n },\n emitter: function emitter() {\n return this._private.emitter;\n },\n on: function on(evt, cb) {\n this.emitter().on(evt, cb);\n return this;\n },\n one: function one(evt, cb) {\n this.emitter().one(evt, cb);\n return this;\n },\n once: function once(evt, cb) {\n this.emitter().one(evt, cb);\n return this;\n },\n removeListener: function removeListener(evt, cb) {\n this.emitter().removeListener(evt, cb);\n return this;\n },\n removeAllListeners: function removeAllListeners() {\n this.emitter().removeAllListeners();\n return this;\n },\n emit: function emit(evt, params) {\n this.emitter().emit(evt, params);\n return this;\n }\n });\n define.eventAliasesOn(layoutProto);\n ext = Layout; // replace with our wrapped layout\n } else if (type === 'renderer' && name !== 'null' && name !== 'base') {\n // user registered renderers inherit from base\n\n var BaseRenderer = getExtension('renderer', 'base');\n var bProto = BaseRenderer.prototype;\n var RegistrantRenderer = registrant;\n var rProto = registrant.prototype;\n var Renderer = function Renderer() {\n BaseRenderer.apply(this, arguments);\n RegistrantRenderer.apply(this, arguments);\n };\n var proto = Renderer.prototype;\n for (var pName in bProto) {\n var pVal = bProto[pName];\n var existsInR = rProto[pName] != null;\n if (existsInR) {\n return overrideErr(pName);\n }\n proto[pName] = pVal; // take impl from base\n }\n for (var _pName in rProto) {\n proto[_pName] = rProto[_pName]; // take impl from registrant\n }\n bProto.clientFunctions.forEach(function (name) {\n proto[name] = proto[name] || function () {\n error('Renderer does not implement `renderer.' + name + '()` on its prototype');\n };\n });\n ext = Renderer;\n } else if (type === '__proto__' || type === 'constructor' || type === 'prototype') {\n // to avoid potential prototype pollution\n return error(type + ' is an illegal type to be registered, possibly lead to prototype pollutions');\n }\n return setMap({\n map: extensions,\n keys: [type, name],\n value: ext\n });\n}\nfunction getExtension(type, name) {\n return getMap({\n map: extensions,\n keys: [type, name]\n });\n}\nfunction setModule(type, name, moduleType, moduleName, registrant) {\n return setMap({\n map: modules,\n keys: [type, name, moduleType, moduleName],\n value: registrant\n });\n}\nfunction getModule(type, name, moduleType, moduleName) {\n return getMap({\n map: modules,\n keys: [type, name, moduleType, moduleName]\n });\n}\nvar extension = function extension() {\n // e.g. extension('renderer', 'svg')\n if (arguments.length === 2) {\n return getExtension.apply(null, arguments);\n }\n\n // e.g. extension('renderer', 'svg', { ... })\n else if (arguments.length === 3) {\n return setExtension.apply(null, arguments);\n }\n\n // e.g. extension('renderer', 'svg', 'nodeShape', 'ellipse')\n else if (arguments.length === 4) {\n return getModule.apply(null, arguments);\n }\n\n // e.g. extension('renderer', 'svg', 'nodeShape', 'ellipse', { ... })\n else if (arguments.length === 5) {\n return setModule.apply(null, arguments);\n } else {\n error('Invalid extension access syntax');\n }\n};\n\n// allows a core instance to access extensions internally\nCore.prototype.extension = extension;\n\n// included extensions\nincExts.forEach(function (group) {\n group.extensions.forEach(function (ext) {\n setExtension(group.type, ext.name, ext.impl);\n });\n});\n\n// a dummy stylesheet object that doesn't need a reference to the core\n// (useful for init)\nvar _Stylesheet = function Stylesheet() {\n if (!(this instanceof _Stylesheet)) {\n return new _Stylesheet();\n }\n this.length = 0;\n};\nvar sheetfn = _Stylesheet.prototype;\nsheetfn.instanceString = function () {\n return 'stylesheet';\n};\n\n// just store the selector to be parsed later\nsheetfn.selector = function (selector) {\n var i = this.length++;\n this[i] = {\n selector: selector,\n properties: []\n };\n return this; // chaining\n};\n\n// just store the property to be parsed later\nsheetfn.css = function (name, value) {\n var i = this.length - 1;\n if (string(name)) {\n this[i].properties.push({\n name: name,\n value: value\n });\n } else if (plainObject(name)) {\n var map = name;\n var propNames = Object.keys(map);\n for (var j = 0; j < propNames.length; j++) {\n var key = propNames[j];\n var mapVal = map[key];\n if (mapVal == null) {\n continue;\n }\n var prop = _Style.properties[key] || _Style.properties[dash2camel(key)];\n if (prop == null) {\n continue;\n }\n var _name = prop.name;\n var _value = mapVal;\n this[i].properties.push({\n name: _name,\n value: _value\n });\n }\n }\n return this; // chaining\n};\nsheetfn.style = sheetfn.css;\n\n// generate a real style object from the dummy stylesheet\nsheetfn.generateStyle = function (cy) {\n var style = new _Style(cy);\n return this.appendToStyle(style);\n};\n\n// append a dummy stylesheet object on a real style object\nsheetfn.appendToStyle = function (style) {\n for (var i = 0; i < this.length; i++) {\n var context = this[i];\n var selector = context.selector;\n var props = context.properties;\n style.selector(selector); // apply selector\n\n for (var j = 0; j < props.length; j++) {\n var prop = props[j];\n style.css(prop.name, prop.value); // apply property\n }\n }\n return style;\n};\n\nvar version = \"3.31.1\";\n\nvar cytoscape = function cytoscape(options) {\n // if no options specified, use default\n if (options === undefined) {\n options = {};\n }\n\n // create instance\n if (plainObject(options)) {\n return new Core(options);\n }\n\n // allow for registration of extensions\n else if (string(options)) {\n return extension.apply(extension, arguments);\n }\n};\n\n// e.g. cytoscape.use( require('cytoscape-foo'), bar )\ncytoscape.use = function (ext) {\n var args = Array.prototype.slice.call(arguments, 1); // args to pass to ext\n\n args.unshift(cytoscape); // cytoscape is first arg to ext\n\n ext.apply(null, args);\n return this;\n};\ncytoscape.warnings = function (bool) {\n return warnings(bool);\n};\n\n// replaced by build system\ncytoscape.version = version;\n\n// expose public apis (mostly for extensions)\ncytoscape.stylesheet = cytoscape.Stylesheet = _Stylesheet;\n\nmodule.exports = cytoscape;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNDQ3MjYuanMiLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vaXRnLW5leHRnZW4tZnJvbnRlbmQvLi9ub2RlX21vZHVsZXMvY3l0b3NjYXBlL2Rpc3QvY3l0b3NjYXBlLmNqcy5qcz80NGUxIl0sInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQ29weXJpZ2h0IChjKSAyMDE2LTIwMjUsIFRoZSBDeXRvc2NhcGUgQ29uc29ydGl1bS5cbiAqXG4gKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5IG9mXG4gKiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSDigJxTb2Z0d2FyZeKAnSksIHRvIGRlYWwgaW5cbiAqIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG9cbiAqIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgY29waWVzXG4gKiBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG9cbiAqIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczpcbiAqXG4gKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbiBhbGxcbiAqIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuXG4gKlxuICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIOKAnEFTIElT4oCdLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SXG4gKiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSxcbiAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRVxuICogQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUlxuICogTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSxcbiAqIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFXG4gKiBTT0ZUV0FSRS5cbiAqL1xuXG4ndXNlIHN0cmljdCc7XG5cbmZ1bmN0aW9uIF9hcnJheUxpa2VUb0FycmF5KHIsIGEpIHtcbiAgKG51bGwgPT0gYSB8fCBhID4gci5sZW5ndGgpICYmIChhID0gci5sZW5ndGgpO1xuICBmb3IgKHZhciBlID0gMCwgbiA9IEFycmF5KGEpOyBlIDwgYTsgZSsrKSBuW2VdID0gcltlXTtcbiAgcmV0dXJuIG47XG59XG5mdW5jdGlvbiBfYXJyYXlXaXRoSG9sZXMocikge1xuICBpZiAoQXJyYXkuaXNBcnJheShyKSkgcmV0dXJuIHI7XG59XG5mdW5jdGlvbiBfYXJyYXlXaXRob3V0SG9sZXMocikge1xuICBpZiAoQXJyYXkuaXNBcnJheShyKSkgcmV0dXJuIF9hcnJheUxpa2VUb0FycmF5KHIpO1xufVxuZnVuY3Rpb24gX2NsYXNzQ2FsbENoZWNrKGEsIG4pIHtcbiAgaWYgKCEoYSBpbnN0YW5jZW9mIG4pKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uXCIpO1xufVxuZnVuY3Rpb24gX2RlZmluZVByb3BlcnRpZXMoZSwgcikge1xuICBmb3IgKHZhciB0ID0gMDsgdCA8IHIubGVuZ3RoOyB0KyspIHtcbiAgICB2YXIgbyA9IHJbdF07XG4gICAgby5lbnVtZXJhYmxlID0gby5lbnVtZXJhYmxlIHx8IGZhbHNlLCBvLmNvbmZpZ3VyYWJsZSA9IHRydWUsIFwidmFsdWVcIiBpbiBvICYmIChvLndyaXRhYmxlID0gdHJ1ZSksIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCBfdG9Qcm9wZXJ0eUtleShvLmtleSksIG8pO1xuICB9XG59XG5mdW5jdGlvbiBfY3JlYXRlQ2xhc3MoZSwgciwgdCkge1xuICByZXR1cm4gciAmJiBfZGVmaW5lUHJvcGVydGllcyhlLnByb3RvdHlwZSwgciksIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCBcInByb3RvdHlwZVwiLCB7XG4gICAgd3JpdGFibGU6IGZhbHNlXG4gIH0pLCBlO1xufVxuZnVuY3Rpb24gX2NyZWF0ZUZvck9mSXRlcmF0b3JIZWxwZXIociwgZSkge1xuICB2YXIgdCA9IFwidW5kZWZpbmVkXCIgIT0gdHlwZW9mIFN5bWJvbCAmJiByW1N5bWJvbC5pdGVyYXRvcl0gfHwgcltcIkBAaXRlcmF0b3JcIl07XG4gIGlmICghdCkge1xuICAgIGlmIChBcnJheS5pc0FycmF5KHIpIHx8ICh0ID0gX3Vuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5KHIpKSB8fCBlKSB7XG4gICAgICB0ICYmIChyID0gdCk7XG4gICAgICB2YXIgbiA9IDAsXG4gICAgICAgIEYgPSBmdW5jdGlvbiAoKSB7fTtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHM6IEYsXG4gICAgICAgIG46IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICByZXR1cm4gbiA+PSByLmxlbmd0aCA/IHtcbiAgICAgICAgICAgIGRvbmU6IHRydWVcbiAgICAgICAgICB9IDoge1xuICAgICAgICAgICAgZG9uZTogZmFsc2UsXG4gICAgICAgICAgICB2YWx1ZTogcltuKytdXG4gICAgICAgICAgfTtcbiAgICAgICAgfSxcbiAgICAgICAgZTogZnVuY3Rpb24gKHIpIHtcbiAgICAgICAgICB0aHJvdyByO1xuICAgICAgICB9LFxuICAgICAgICBmOiBGXG4gICAgICB9O1xuICAgIH1cbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiSW52YWxpZCBhdHRlbXB0IHRvIGl0ZXJhdGUgbm9uLWl0ZXJhYmxlIGluc3RhbmNlLlxcbkluIG9yZGVyIHRvIGJlIGl0ZXJhYmxlLCBub24tYXJyYXkgb2JqZWN0cyBtdXN0IGhhdmUgYSBbU3ltYm9sLml0ZXJhdG9yXSgpIG1ldGhvZC5cIik7XG4gIH1cbiAgdmFyIG8sXG4gICAgYSA9IHRydWUsXG4gICAgdSA9IGZhbHNlO1xuICByZXR1cm4ge1xuICAgIHM6IGZ1bmN0aW9uICgpIHtcbiAgICAgIHQgPSB0LmNhbGwocik7XG4gICAgfSxcbiAgICBuOiBmdW5jdGlvbiAoKSB7XG4gICAgICB2YXIgciA9IHQubmV4dCgpO1xuICAgICAgcmV0dXJuIGEgPSByLmRvbmUsIHI7XG4gICAgfSxcbiAgICBlOiBmdW5jdGlvbiAocikge1xuICAgICAgdSA9IHRydWUsIG8gPSByO1xuICAgIH0sXG4gICAgZjogZnVuY3Rpb24gKCkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgYSB8fCBudWxsID09IHQucmV0dXJuIHx8IHQucmV0dXJuKCk7XG4gICAgICB9IGZpbmFsbHkge1xuICAgICAgICBpZiAodSkgdGhyb3cgbztcbiAgICAgIH1cbiAgICB9XG4gIH07XG59XG5mdW5jdGlvbiBfZGVmaW5lUHJvcGVydHkkMShlLCByLCB0KSB7XG4gIHJldHVybiAociA9IF90b1Byb3BlcnR5S2V5KHIpKSBpbiBlID8gT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIHIsIHtcbiAgICB2YWx1ZTogdCxcbiAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcbiAgICB3cml0YWJsZTogdHJ1ZVxuICB9KSA6IGVbcl0gPSB0LCBlO1xufVxuZnVuY3Rpb24gX2l0ZXJhYmxlVG9BcnJheShyKSB7XG4gIGlmIChcInVuZGVmaW5lZFwiICE9IHR5cGVvZiBTeW1ib2wgJiYgbnVsbCAhPSByW1N5bWJvbC5pdGVyYXRvcl0gfHwgbnVsbCAhPSByW1wiQEBpdGVyYXRvclwiXSkgcmV0dXJuIEFycmF5LmZyb20ocik7XG59XG5mdW5jdGlvbiBfaXRlcmFibGVUb0FycmF5TGltaXQociwgbCkge1xuICB2YXIgdCA9IG51bGwgPT0gciA/IG51bGwgOiBcInVuZGVmaW5lZFwiICE9IHR5cGVvZiBTeW1ib2wgJiYgcltTeW1ib2wuaXRlcmF0b3JdIHx8IHJbXCJAQGl0ZXJhdG9yXCJdO1xuICBpZiAobnVsbCAhPSB0KSB7XG4gICAgdmFyIGUsXG4gICAgICBuLFxuICAgICAgaSxcbiAgICAgIHUsXG4gICAgICBhID0gW10sXG4gICAgICBmID0gdHJ1ZSxcbiAgICAgIG8gPSBmYWxzZTtcbiAgICB0cnkge1xuICAgICAgaWYgKGkgPSAodCA9IHQuY2FsbChyKSkubmV4dCwgMCA9PT0gbCkge1xuICAgICAgICBpZiAoT2JqZWN0KHQpICE9PSB0KSByZXR1cm47XG4gICAgICAgIGYgPSAhMTtcbiAgICAgIH0gZWxzZSBmb3IgKDsgIShmID0gKGUgPSBpLmNhbGwodCkpLmRvbmUpICYmIChhLnB1c2goZS52YWx1ZSksIGEubGVuZ3RoICE9PSBsKTsgZiA9ICEwKTtcbiAgICB9IGNhdGNoIChyKSB7XG4gICAgICBvID0gdHJ1ZSwgbiA9IHI7XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGlmICghZiAmJiBudWxsICE9IHQucmV0dXJuICYmICh1ID0gdC5yZXR1cm4oKSwgT2JqZWN0KHUpICE9PSB1KSkgcmV0dXJuO1xuICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgaWYgKG8pIHRocm93IG47XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBhO1xuICB9XG59XG5mdW5jdGlvbiBfbm9uSXRlcmFibGVSZXN0KCkge1xuICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiSW52YWxpZCBhdHRlbXB0IHRvIGRlc3RydWN0dXJlIG5vbi1pdGVyYWJsZSBpbnN0YW5jZS5cXG5JbiBvcmRlciB0byBiZSBpdGVyYWJsZSwgbm9uLWFycmF5IG9iamVjdHMgbXVzdCBoYXZlIGEgW1N5bWJvbC5pdGVyYXRvcl0oKSBtZXRob2QuXCIpO1xufVxuZnVuY3Rpb24gX25vbkl0ZXJhYmxlU3ByZWFkKCkge1xuICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiSW52YWxpZCBhdHRlbXB0IHRvIHNwcmVhZCBub24taXRlcmFibGUgaW5zdGFuY2UuXFxuSW4gb3JkZXIgdG8gYmUgaXRlcmFibGUsIG5vbi1hcnJheSBvYmplY3RzIG11c3QgaGF2ZSBhIFtTeW1ib2wuaXRlcmF0b3JdKCkgbWV0aG9kLlwiKTtcbn1cbmZ1bmN0aW9uIF9zbGljZWRUb0FycmF5KHIsIGUpIHtcbiAgcmV0dXJuIF9hcnJheVdpdGhIb2xlcyhyKSB8fCBfaXRlcmFibGVUb0FycmF5TGltaXQociwgZSkgfHwgX3Vuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5KHIsIGUpIHx8IF9ub25JdGVyYWJsZVJlc3QoKTtcbn1cbmZ1bmN0aW9uIF90b0NvbnN1bWFibGVBcnJheShyKSB7XG4gIHJldHVybiBfYXJyYXlXaXRob3V0SG9sZXMocikgfHwgX2l0ZXJhYmxlVG9BcnJheShyKSB8fCBfdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkocikgfHwgX25vbkl0ZXJhYmxlU3ByZWFkKCk7XG59XG5mdW5jdGlvbiBfdG9QcmltaXRpdmUodCwgcikge1xuICBpZiAoXCJvYmplY3RcIiAhPSB0eXBlb2YgdCB8fCAhdCkgcmV0dXJuIHQ7XG4gIHZhciBlID0gdFtTeW1ib2wudG9QcmltaXRpdmVdO1xuICBpZiAodW5kZWZpbmVkICE9PSBlKSB7XG4gICAgdmFyIGkgPSBlLmNhbGwodCwgcik7XG4gICAgaWYgKFwib2JqZWN0XCIgIT0gdHlwZW9mIGkpIHJldHVybiBpO1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLlwiKTtcbiAgfVxuICByZXR1cm4gKFN0cmluZyApKHQpO1xufVxuZnVuY3Rpb24gX3RvUHJvcGVydHlLZXkodCkge1xuICB2YXIgaSA9IF90b1ByaW1pdGl2ZSh0LCBcInN0cmluZ1wiKTtcbiAgcmV0dXJuIFwic3ltYm9sXCIgPT0gdHlwZW9mIGkgPyBpIDogaSArIFwiXCI7XG59XG5mdW5jdGlvbiBfdHlwZW9mKG8pIHtcbiAgXCJAYmFiZWwvaGVscGVycyAtIHR5cGVvZlwiO1xuXG4gIHJldHVybiBfdHlwZW9mID0gXCJmdW5jdGlvblwiID09IHR5cGVvZiBTeW1ib2wgJiYgXCJzeW1ib2xcIiA9PSB0eXBlb2YgU3ltYm9sLml0ZXJhdG9yID8gZnVuY3Rpb24gKG8pIHtcbiAgICByZXR1cm4gdHlwZW9mIG87XG4gIH0gOiBmdW5jdGlvbiAobykge1xuICAgIHJldHVybiBvICYmIFwiZnVuY3Rpb25cIiA9PSB0eXBlb2YgU3ltYm9sICYmIG8uY29uc3RydWN0b3IgPT09IFN5bWJvbCAmJiBvICE9PSBTeW1ib2wucHJvdG90eXBlID8gXCJzeW1ib2xcIiA6IHR5cGVvZiBvO1xuICB9LCBfdHlwZW9mKG8pO1xufVxuZnVuY3Rpb24gX3Vuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5KHIsIGEpIHtcbiAgaWYgKHIpIHtcbiAgICBpZiAoXCJzdHJpbmdcIiA9PSB0eXBlb2YgcikgcmV0dXJuIF9hcnJheUxpa2VUb0FycmF5KHIsIGEpO1xuICAgIHZhciB0ID0ge30udG9TdHJpbmcuY2FsbChyKS5zbGljZSg4LCAtMSk7XG4gICAgcmV0dXJuIFwiT2JqZWN0XCIgPT09IHQgJiYgci5jb25zdHJ1Y3RvciAmJiAodCA9IHIuY29uc3RydWN0b3IubmFtZSksIFwiTWFwXCIgPT09IHQgfHwgXCJTZXRcIiA9PT0gdCA/IEFycmF5LmZyb20ocikgOiBcIkFyZ3VtZW50c1wiID09PSB0IHx8IC9eKD86VWl8SSludCg/Ojh8MTZ8MzIpKD86Q2xhbXBlZCk/QXJyYXkkLy50ZXN0KHQpID8gX2FycmF5TGlrZVRvQXJyYXkociwgYSkgOiB1bmRlZmluZWQ7XG4gIH1cbn1cblxudmFyIF93aW5kb3cgPSB0eXBlb2Ygd2luZG93ID09PSAndW5kZWZpbmVkJyA/IG51bGwgOiB3aW5kb3c7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tdW5kZWZcblxudmFyIG5hdmlnYXRvciA9IF93aW5kb3cgPyBfd2luZG93Lm5hdmlnYXRvciA6IG51bGw7XG5fd2luZG93ID8gX3dpbmRvdy5kb2N1bWVudCA6IG51bGw7XG52YXIgdHlwZW9mc3RyID0gX3R5cGVvZignJyk7XG52YXIgdHlwZW9mb2JqID0gX3R5cGVvZih7fSk7XG52YXIgdHlwZW9mZm4gPSBfdHlwZW9mKGZ1bmN0aW9uICgpIHt9KTtcbnZhciB0eXBlb2ZodG1sZWxlID0gdHlwZW9mIEhUTUxFbGVtZW50ID09PSBcInVuZGVmaW5lZFwiID8gXCJ1bmRlZmluZWRcIiA6IF90eXBlb2YoSFRNTEVsZW1lbnQpO1xudmFyIGluc3RhbmNlU3RyID0gZnVuY3Rpb24gaW5zdGFuY2VTdHIob2JqKSB7XG4gIHJldHVybiBvYmogJiYgb2JqLmluc3RhbmNlU3RyaW5nICYmIGZuJDYob2JqLmluc3RhbmNlU3RyaW5nKSA/IG9iai5pbnN0YW5jZVN0cmluZygpIDogbnVsbDtcbn07XG5cbnZhciBzdHJpbmcgPSBmdW5jdGlvbiBzdHJpbmcob2JqKSB7XG4gIHJldHVybiBvYmogIT0gbnVsbCAmJiBfdHlwZW9mKG9iaikgPT0gdHlwZW9mc3RyO1xufTtcbnZhciBmbiQ2ID0gZnVuY3Rpb24gZm4ob2JqKSB7XG4gIHJldHVybiBvYmogIT0gbnVsbCAmJiBfdHlwZW9mKG9iaikgPT09IHR5cGVvZmZuO1xufTtcbnZhciBhcnJheSA9IGZ1bmN0aW9uIGFycmF5KG9iaikge1xuICByZXR1cm4gIWVsZW1lbnRPckNvbGxlY3Rpb24ob2JqKSAmJiAoQXJyYXkuaXNBcnJheSA/IEFycmF5LmlzQXJyYXkob2JqKSA6IG9iaiAhPSBudWxsICYmIG9iaiBpbnN0YW5jZW9mIEFycmF5KTtcbn07XG52YXIgcGxhaW5PYmplY3QgPSBmdW5jdGlvbiBwbGFpbk9iamVjdChvYmopIHtcbiAgcmV0dXJuIG9iaiAhPSBudWxsICYmIF90eXBlb2Yob2JqKSA9PT0gdHlwZW9mb2JqICYmICFhcnJheShvYmopICYmIG9iai5jb25zdHJ1Y3RvciA9PT0gT2JqZWN0O1xufTtcbnZhciBvYmplY3QgPSBmdW5jdGlvbiBvYmplY3Qob2JqKSB7XG4gIHJldHVybiBvYmogIT0gbnVsbCAmJiBfdHlwZW9mKG9iaikgPT09IHR5cGVvZm9iajtcbn07XG52YXIgbnVtYmVyJDEgPSBmdW5jdGlvbiBudW1iZXIob2JqKSB7XG4gIHJldHVybiBvYmogIT0gbnVsbCAmJiBfdHlwZW9mKG9iaikgPT09IF90eXBlb2YoMSkgJiYgIWlzTmFOKG9iaik7XG59O1xudmFyIGludGVnZXIgPSBmdW5jdGlvbiBpbnRlZ2VyKG9iaikge1xuICByZXR1cm4gbnVtYmVyJDEob2JqKSAmJiBNYXRoLmZsb29yKG9iaikgPT09IG9iajtcbn07XG52YXIgaHRtbEVsZW1lbnQgPSBmdW5jdGlvbiBodG1sRWxlbWVudChvYmopIHtcbiAgaWYgKCd1bmRlZmluZWQnID09PSB0eXBlb2ZodG1sZWxlKSB7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gbnVsbCAhPSBvYmogJiYgb2JqIGluc3RhbmNlb2YgSFRNTEVsZW1lbnQ7XG4gIH1cbn07XG52YXIgZWxlbWVudE9yQ29sbGVjdGlvbiA9IGZ1bmN0aW9uIGVsZW1lbnRPckNvbGxlY3Rpb24ob2JqKSB7XG4gIHJldHVybiBlbGVtZW50KG9iaikgfHwgY29sbGVjdGlvbihvYmopO1xufTtcbnZhciBlbGVtZW50ID0gZnVuY3Rpb24gZWxlbWVudChvYmopIHtcbiAgcmV0dXJuIGluc3RhbmNlU3RyKG9iaikgPT09ICdjb2xsZWN0aW9uJyAmJiBvYmouX3ByaXZhdGUuc2luZ2xlO1xufTtcbnZhciBjb2xsZWN0aW9uID0gZnVuY3Rpb24gY29sbGVjdGlvbihvYmopIHtcbiAgcmV0dXJuIGluc3RhbmNlU3RyKG9iaikgPT09ICdjb2xsZWN0aW9uJyAmJiAhb2JqLl9wcml2YXRlLnNpbmdsZTtcbn07XG52YXIgY29yZSA9IGZ1bmN0aW9uIGNvcmUob2JqKSB7XG4gIHJldHVybiBpbnN0YW5jZVN0cihvYmopID09PSAnY29yZSc7XG59O1xudmFyIHN0eWxlc2hlZXQgPSBmdW5jdGlvbiBzdHlsZXNoZWV0KG9iaikge1xuICByZXR1cm4gaW5zdGFuY2VTdHIob2JqKSA9PT0gJ3N0eWxlc2hlZXQnO1xufTtcbnZhciBldmVudCA9IGZ1bmN0aW9uIGV2ZW50KG9iaikge1xuICByZXR1cm4gaW5zdGFuY2VTdHIob2JqKSA9PT0gJ2V2ZW50Jztcbn07XG52YXIgZW1wdHlTdHJpbmcgPSBmdW5jdGlvbiBlbXB0eVN0cmluZyhvYmopIHtcbiAgaWYgKG9iaiA9PT0gdW5kZWZpbmVkIHx8IG9iaiA9PT0gbnVsbCkge1xuICAgIC8vIG51bGwgaXMgZW1wdHlcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfSBlbHNlIGlmIChvYmogPT09ICcnIHx8IG9iai5tYXRjaCgvXlxccyskLykpIHtcbiAgICByZXR1cm4gdHJ1ZTsgLy8gZW1wdHkgc3RyaW5nIGlzIGVtcHR5XG4gIH1cbiAgcmV0dXJuIGZhbHNlOyAvLyBvdGhlcndpc2UsIHdlIGRvbid0IGtub3cgd2hhdCB3ZSd2ZSBnb3Rcbn07XG52YXIgZG9tRWxlbWVudCA9IGZ1bmN0aW9uIGRvbUVsZW1lbnQob2JqKSB7XG4gIGlmICh0eXBlb2YgSFRNTEVsZW1lbnQgPT09ICd1bmRlZmluZWQnKSB7XG4gICAgcmV0dXJuIGZhbHNlOyAvLyB3ZSdyZSBub3QgaW4gYSBicm93c2VyIHNvIGl0IGRvZXNuJ3QgbWF0dGVyXG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIG9iaiBpbnN0YW5jZW9mIEhUTUxFbGVtZW50O1xuICB9XG59O1xudmFyIGJvdW5kaW5nQm94ID0gZnVuY3Rpb24gYm91bmRpbmdCb3gob2JqKSB7XG4gIHJldHVybiBwbGFpbk9iamVjdChvYmopICYmIG51bWJlciQxKG9iai54MSkgJiYgbnVtYmVyJDEob2JqLngyKSAmJiBudW1iZXIkMShvYmoueTEpICYmIG51bWJlciQxKG9iai55Mik7XG59O1xudmFyIHByb21pc2UgPSBmdW5jdGlvbiBwcm9taXNlKG9iaikge1xuICByZXR1cm4gb2JqZWN0KG9iaikgJiYgZm4kNihvYmoudGhlbik7XG59O1xudmFyIG1zID0gZnVuY3Rpb24gbXMoKSB7XG4gIHJldHVybiBuYXZpZ2F0b3IgJiYgbmF2aWdhdG9yLnVzZXJBZ2VudC5tYXRjaCgvbXNpZXx0cmlkZW50fGVkZ2UvaSk7XG59OyAvLyBwcm9iYWJseSBhIGJldHRlciB3YXkgdG8gZGV0ZWN0IHRoaXMuLi5cblxudmFyIG1lbW9pemUgPSBmdW5jdGlvbiBtZW1vaXplKGZuLCBrZXlGbikge1xuICBpZiAoIWtleUZuKSB7XG4gICAga2V5Rm4gPSBmdW5jdGlvbiBrZXlGbigpIHtcbiAgICAgIGlmIChhcmd1bWVudHMubGVuZ3RoID09PSAxKSB7XG4gICAgICAgIHJldHVybiBhcmd1bWVudHNbMF07XG4gICAgICB9IGVsc2UgaWYgKGFyZ3VtZW50cy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgcmV0dXJuICd1bmRlZmluZWQnO1xuICAgICAgfVxuICAgICAgdmFyIGFyZ3MgPSBbXTtcbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGFyZ3MucHVzaChhcmd1bWVudHNbaV0pO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGFyZ3Muam9pbignJCcpO1xuICAgIH07XG4gIH1cbiAgdmFyIF9tZW1vaXplZEZuID0gZnVuY3Rpb24gbWVtb2l6ZWRGbigpIHtcbiAgICB2YXIgc2VsZiA9IHRoaXM7XG4gICAgdmFyIGFyZ3MgPSBhcmd1bWVudHM7XG4gICAgdmFyIHJldDtcbiAgICB2YXIgayA9IGtleUZuLmFwcGx5KHNlbGYsIGFyZ3MpO1xuICAgIHZhciBjYWNoZSA9IF9tZW1vaXplZEZuLmNhY2hlO1xuICAgIGlmICghKHJldCA9IGNhY2hlW2tdKSkge1xuICAgICAgcmV0ID0gY2FjaGVba10gPSBmbi5hcHBseShzZWxmLCBhcmdzKTtcbiAgICB9XG4gICAgcmV0dXJuIHJldDtcbiAgfTtcbiAgX21lbW9pemVkRm4uY2FjaGUgPSB7fTtcbiAgcmV0dXJuIF9tZW1vaXplZEZuO1xufTtcblxudmFyIGNhbWVsMmRhc2ggPSBtZW1vaXplKGZ1bmN0aW9uIChzdHIpIHtcbiAgcmV0dXJuIHN0ci5yZXBsYWNlKC8oW0EtWl0pL2csIGZ1bmN0aW9uICh2KSB7XG4gICAgcmV0dXJuICctJyArIHYudG9Mb3dlckNhc2UoKTtcbiAgfSk7XG59KTtcbnZhciBkYXNoMmNhbWVsID0gbWVtb2l6ZShmdW5jdGlvbiAoc3RyKSB7XG4gIHJldHVybiBzdHIucmVwbGFjZSgvKC1cXHcpL2csIGZ1bmN0aW9uICh2KSB7XG4gICAgcmV0dXJuIHZbMV0udG9VcHBlckNhc2UoKTtcbiAgfSk7XG59KTtcbnZhciBwcmVwZW5kQ2FtZWwgPSBtZW1vaXplKGZ1bmN0aW9uIChwcmVmaXgsIHN0cikge1xuICByZXR1cm4gcHJlZml4ICsgc3RyWzBdLnRvVXBwZXJDYXNlKCkgKyBzdHIuc3Vic3RyaW5nKDEpO1xufSwgZnVuY3Rpb24gKHByZWZpeCwgc3RyKSB7XG4gIHJldHVybiBwcmVmaXggKyAnJCcgKyBzdHI7XG59KTtcbnZhciBjYXBpdGFsaXplID0gZnVuY3Rpb24gY2FwaXRhbGl6ZShzdHIpIHtcbiAgaWYgKGVtcHR5U3RyaW5nKHN0cikpIHtcbiAgICByZXR1cm4gc3RyO1xuICB9XG4gIHJldHVybiBzdHIuY2hhckF0KDApLnRvVXBwZXJDYXNlKCkgKyBzdHIuc3Vic3RyaW5nKDEpO1xufTtcblxudmFyIG51bWJlciA9ICcoPzpbLStdPyg/Oig/OlxcXFxkK3xcXFxcZCpcXFxcLlxcXFxkKykoPzpbRWVdWystXT9cXFxcZCspPykpJztcbnZhciByZ2JhID0gJ3JnYlthXT9cXFxcKCgnICsgbnVtYmVyICsgJ1slXT8pXFxcXHMqLFxcXFxzKignICsgbnVtYmVyICsgJ1slXT8pXFxcXHMqLFxcXFxzKignICsgbnVtYmVyICsgJ1slXT8pKD86XFxcXHMqLFxcXFxzKignICsgbnVtYmVyICsgJykpP1xcXFwpJztcbnZhciByZ2JhTm9CYWNrUmVmcyA9ICdyZ2JbYV0/XFxcXCgoPzonICsgbnVtYmVyICsgJ1slXT8pXFxcXHMqLFxcXFxzKig/OicgKyBudW1iZXIgKyAnWyVdPylcXFxccyosXFxcXHMqKD86JyArIG51bWJlciArICdbJV0/KSg/OlxcXFxzKixcXFxccyooPzonICsgbnVtYmVyICsgJykpP1xcXFwpJztcbnZhciBoc2xhID0gJ2hzbFthXT9cXFxcKCgnICsgbnVtYmVyICsgJylcXFxccyosXFxcXHMqKCcgKyBudW1iZXIgKyAnWyVdKVxcXFxzKixcXFxccyooJyArIG51bWJlciArICdbJV0pKD86XFxcXHMqLFxcXFxzKignICsgbnVtYmVyICsgJykpP1xcXFwpJztcbnZhciBoc2xhTm9CYWNrUmVmcyA9ICdoc2xbYV0/XFxcXCgoPzonICsgbnVtYmVyICsgJylcXFxccyosXFxcXHMqKD86JyArIG51bWJlciArICdbJV0pXFxcXHMqLFxcXFxzKig/OicgKyBudW1iZXIgKyAnWyVdKSg/OlxcXFxzKixcXFxccyooPzonICsgbnVtYmVyICsgJykpP1xcXFwpJztcbnZhciBoZXgzID0gJ1xcXFwjWzAtOWEtZkEtRl17M30nO1xudmFyIGhleDYgPSAnXFxcXCNbMC05YS1mQS1GXXs2fSc7XG5cbnZhciBhc2NlbmRpbmcgPSBmdW5jdGlvbiBhc2NlbmRpbmcoYSwgYikge1xuICBpZiAoYSA8IGIpIHtcbiAgICByZXR1cm4gLTE7XG4gIH0gZWxzZSBpZiAoYSA+IGIpIHtcbiAgICByZXR1cm4gMTtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gMDtcbiAgfVxufTtcbnZhciBkZXNjZW5kaW5nID0gZnVuY3Rpb24gZGVzY2VuZGluZyhhLCBiKSB7XG4gIHJldHVybiAtMSAqIGFzY2VuZGluZyhhLCBiKTtcbn07XG5cbnZhciBleHRlbmQgPSBPYmplY3QuYXNzaWduICE9IG51bGwgPyBPYmplY3QuYXNzaWduLmJpbmQoT2JqZWN0KSA6IGZ1bmN0aW9uICh0Z3QpIHtcbiAgdmFyIGFyZ3MgPSBhcmd1bWVudHM7XG4gIGZvciAodmFyIGkgPSAxOyBpIDwgYXJncy5sZW5ndGg7IGkrKykge1xuICAgIHZhciBvYmogPSBhcmdzW2ldO1xuICAgIGlmIChvYmogPT0gbnVsbCkge1xuICAgICAgY29udGludWU7XG4gICAgfVxuICAgIHZhciBrZXlzID0gT2JqZWN0LmtleXMob2JqKTtcbiAgICBmb3IgKHZhciBqID0gMDsgaiA8IGtleXMubGVuZ3RoOyBqKyspIHtcbiAgICAgIHZhciBrID0ga2V5c1tqXTtcbiAgICAgIHRndFtrXSA9IG9ialtrXTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHRndDtcbn07XG5cbi8vIGdldCBbciwgZywgYl0gZnJvbSAjYWJjIG9yICNhYWJiY2NcbnZhciBoZXgydHVwbGUgPSBmdW5jdGlvbiBoZXgydHVwbGUoaGV4KSB7XG4gIGlmICghKGhleC5sZW5ndGggPT09IDQgfHwgaGV4Lmxlbmd0aCA9PT0gNykgfHwgaGV4WzBdICE9PSAnIycpIHtcbiAgICByZXR1cm47XG4gIH1cbiAgdmFyIHNob3J0SGV4ID0gaGV4Lmxlbmd0aCA9PT0gNDtcbiAgdmFyIHIsIGcsIGI7XG4gIHZhciBiYXNlID0gMTY7XG4gIGlmIChzaG9ydEhleCkge1xuICAgIHIgPSBwYXJzZUludChoZXhbMV0gKyBoZXhbMV0sIGJhc2UpO1xuICAgIGcgPSBwYXJzZUludChoZXhbMl0gKyBoZXhbMl0sIGJhc2UpO1xuICAgIGIgPSBwYXJzZUludChoZXhbM10gKyBoZXhbM10sIGJhc2UpO1xuICB9IGVsc2Uge1xuICAgIHIgPSBwYXJzZUludChoZXhbMV0gKyBoZXhbMl0sIGJhc2UpO1xuICAgIGcgPSBwYXJzZUludChoZXhbM10gKyBoZXhbNF0sIGJhc2UpO1xuICAgIGIgPSBwYXJzZUludChoZXhbNV0gKyBoZXhbNl0sIGJhc2UpO1xuICB9XG4gIHJldHVybiBbciwgZywgYl07XG59O1xuXG4vLyBnZXQgW3IsIGcsIGIsIGFdIGZyb20gaHNsKDAsIDAsIDApIG9yIGhzbGEoMCwgMCwgMCwgMClcbnZhciBoc2wydHVwbGUgPSBmdW5jdGlvbiBoc2wydHVwbGUoaHNsKSB7XG4gIHZhciByZXQ7XG4gIHZhciBoLCBzLCBsLCBhLCByLCBnLCBiO1xuICBmdW5jdGlvbiBodWUycmdiKHAsIHEsIHQpIHtcbiAgICBpZiAodCA8IDApIHQgKz0gMTtcbiAgICBpZiAodCA+IDEpIHQgLT0gMTtcbiAgICBpZiAodCA8IDEgLyA2KSByZXR1cm4gcCArIChxIC0gcCkgKiA2ICogdDtcbiAgICBpZiAodCA8IDEgLyAyKSByZXR1cm4gcTtcbiAgICBpZiAodCA8IDIgLyAzKSByZXR1cm4gcCArIChxIC0gcCkgKiAoMiAvIDMgLSB0KSAqIDY7XG4gICAgcmV0dXJuIHA7XG4gIH1cbiAgdmFyIG0gPSBuZXcgUmVnRXhwKCdeJyArIGhzbGEgKyAnJCcpLmV4ZWMoaHNsKTtcbiAgaWYgKG0pIHtcbiAgICAvLyBnZXQgaHVlXG4gICAgaCA9IHBhcnNlSW50KG1bMV0pO1xuICAgIGlmIChoIDwgMCkge1xuICAgICAgaCA9ICgzNjAgLSAtMSAqIGggJSAzNjApICUgMzYwO1xuICAgIH0gZWxzZSBpZiAoaCA+IDM2MCkge1xuICAgICAgaCA9IGggJSAzNjA7XG4gICAgfVxuICAgIGggLz0gMzYwOyAvLyBub3JtYWxpc2Ugb24gWzAsIDFdXG5cbiAgICBzID0gcGFyc2VGbG9hdChtWzJdKTtcbiAgICBpZiAocyA8IDAgfHwgcyA+IDEwMCkge1xuICAgICAgcmV0dXJuO1xuICAgIH0gLy8gc2F0dXJhdGlvbiBpcyBbMCwgMTAwXVxuICAgIHMgPSBzIC8gMTAwOyAvLyBub3JtYWxpc2Ugb24gWzAsIDFdXG5cbiAgICBsID0gcGFyc2VGbG9hdChtWzNdKTtcbiAgICBpZiAobCA8IDAgfHwgbCA+IDEwMCkge1xuICAgICAgcmV0dXJuO1xuICAgIH0gLy8gbGlnaHRuZXNzIGlzIFswLCAxMDBdXG4gICAgbCA9IGwgLyAxMDA7IC8vIG5vcm1hbGlzZSBvbiBbMCwgMV1cblxuICAgIGEgPSBtWzRdO1xuICAgIGlmIChhICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGEgPSBwYXJzZUZsb2F0KGEpO1xuICAgICAgaWYgKGEgPCAwIHx8IGEgPiAxKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH0gLy8gYWxwaGEgaXMgWzAsIDFdXG4gICAgfVxuXG4gICAgLy8gbm93LCBjb252ZXJ0IHRvIHJnYlxuICAgIC8vIGNvZGUgZnJvbSBodHRwOi8vbWppamFja3Nvbi5jb20vMjAwOC8wMi9yZ2ItdG8taHNsLWFuZC1yZ2ItdG8taHN2LWNvbG9yLW1vZGVsLWNvbnZlcnNpb24tYWxnb3JpdGhtcy1pbi1qYXZhc2NyaXB0XG4gICAgaWYgKHMgPT09IDApIHtcbiAgICAgIHIgPSBnID0gYiA9IE1hdGgucm91bmQobCAqIDI1NSk7IC8vIGFjaHJvbWF0aWNcbiAgICB9IGVsc2Uge1xuICAgICAgdmFyIHEgPSBsIDwgMC41ID8gbCAqICgxICsgcykgOiBsICsgcyAtIGwgKiBzO1xuICAgICAgdmFyIHAgPSAyICogbCAtIHE7XG4gICAgICByID0gTWF0aC5yb3VuZCgyNTUgKiBodWUycmdiKHAsIHEsIGggKyAxIC8gMykpO1xuICAgICAgZyA9IE1hdGgucm91bmQoMjU1ICogaHVlMnJnYihwLCBxLCBoKSk7XG4gICAgICBiID0gTWF0aC5yb3VuZCgyNTUgKiBodWUycmdiKHAsIHEsIGggLSAxIC8gMykpO1xuICAgIH1cbiAgICByZXQgPSBbciwgZywgYiwgYV07XG4gIH1cbiAgcmV0dXJuIHJldDtcbn07XG5cbi8vIGdldCBbciwgZywgYiwgYV0gZnJvbSByZ2IoMCwgMCwgMCkgb3IgcmdiYSgwLCAwLCAwLCAwKVxudmFyIHJnYjJ0dXBsZSA9IGZ1bmN0aW9uIHJnYjJ0dXBsZShyZ2IpIHtcbiAgdmFyIHJldDtcbiAgdmFyIG0gPSBuZXcgUmVnRXhwKCdeJyArIHJnYmEgKyAnJCcpLmV4ZWMocmdiKTtcbiAgaWYgKG0pIHtcbiAgICByZXQgPSBbXTtcbiAgICB2YXIgaXNQY3QgPSBbXTtcbiAgICBmb3IgKHZhciBpID0gMTsgaSA8PSAzOyBpKyspIHtcbiAgICAgIHZhciBjaGFubmVsID0gbVtpXTtcbiAgICAgIGlmIChjaGFubmVsW2NoYW5uZWwubGVuZ3RoIC0gMV0gPT09ICclJykge1xuICAgICAgICBpc1BjdFtpXSA9IHRydWU7XG4gICAgICB9XG4gICAgICBjaGFubmVsID0gcGFyc2VGbG9hdChjaGFubmVsKTtcbiAgICAgIGlmIChpc1BjdFtpXSkge1xuICAgICAgICBjaGFubmVsID0gY2hhbm5lbCAvIDEwMCAqIDI1NTsgLy8gbm9ybWFsaXNlIHRvIFswLCAyNTVdXG4gICAgICB9XG4gICAgICBpZiAoY2hhbm5lbCA8IDAgfHwgY2hhbm5lbCA+IDI1NSkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9IC8vIGludmFsaWQgY2hhbm5lbCB2YWx1ZVxuXG4gICAgICByZXQucHVzaChNYXRoLmZsb29yKGNoYW5uZWwpKTtcbiAgICB9XG4gICAgdmFyIGF0TGVhc3RPbmVJc1BjdCA9IGlzUGN0WzFdIHx8IGlzUGN0WzJdIHx8IGlzUGN0WzNdO1xuICAgIHZhciBhbGxBcmVQY3QgPSBpc1BjdFsxXSAmJiBpc1BjdFsyXSAmJiBpc1BjdFszXTtcbiAgICBpZiAoYXRMZWFzdE9uZUlzUGN0ICYmICFhbGxBcmVQY3QpIHtcbiAgICAgIHJldHVybjtcbiAgICB9IC8vIG11c3QgYWxsIGJlIHBlcmNlbnQgdmFsdWVzIGlmIG9uZSBpc1xuXG4gICAgdmFyIGFscGhhID0gbVs0XTtcbiAgICBpZiAoYWxwaGEgIT09IHVuZGVmaW5lZCkge1xuICAgICAgYWxwaGEgPSBwYXJzZUZsb2F0KGFscGhhKTtcbiAgICAgIGlmIChhbHBoYSA8IDAgfHwgYWxwaGEgPiAxKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH0gLy8gaW52YWxpZCBhbHBoYSB2YWx1ZVxuXG4gICAgICByZXQucHVzaChhbHBoYSk7XG4gICAgfVxuICB9XG4gIHJldHVybiByZXQ7XG59O1xudmFyIGNvbG9ybmFtZTJ0dXBsZSA9IGZ1bmN0aW9uIGNvbG9ybmFtZTJ0dXBsZShjb2xvcikge1xuICByZXR1cm4gY29sb3JzW2NvbG9yLnRvTG93ZXJDYXNlKCldO1xufTtcbnZhciBjb2xvcjJ0dXBsZSA9IGZ1bmN0aW9uIGNvbG9yMnR1cGxlKGNvbG9yKSB7XG4gIHJldHVybiAoYXJyYXkoY29sb3IpID8gY29sb3IgOiBudWxsKSB8fCBjb2xvcm5hbWUydHVwbGUoY29sb3IpIHx8IGhleDJ0dXBsZShjb2xvcikgfHwgcmdiMnR1cGxlKGNvbG9yKSB8fCBoc2wydHVwbGUoY29sb3IpO1xufTtcbnZhciBjb2xvcnMgPSB7XG4gIC8vIHNwZWNpYWwgY29sb3VyIG5hbWVzXG4gIHRyYW5zcGFyZW50OiBbMCwgMCwgMCwgMF0sXG4gIC8vIE5CIGFscGhhID09PSAwXG5cbiAgLy8gcmVndWxhciBjb2xvdXJzXG4gIGFsaWNlYmx1ZTogWzI0MCwgMjQ4LCAyNTVdLFxuICBhbnRpcXVld2hpdGU6IFsyNTAsIDIzNSwgMjE1XSxcbiAgYXF1YTogWzAsIDI1NSwgMjU1XSxcbiAgYXF1YW1hcmluZTogWzEyNywgMjU1LCAyMTJdLFxuICBhenVyZTogWzI0MCwgMjU1LCAyNTVdLFxuICBiZWlnZTogWzI0NSwgMjQ1LCAyMjBdLFxuICBiaXNxdWU6IFsyNTUsIDIyOCwgMTk2XSxcbiAgYmxhY2s6IFswLCAwLCAwXSxcbiAgYmxhbmNoZWRhbG1vbmQ6IFsyNTUsIDIzNSwgMjA1XSxcbiAgYmx1ZTogWzAsIDAsIDI1NV0sXG4gIGJsdWV2aW9sZXQ6IFsxMzgsIDQzLCAyMjZdLFxuICBicm93bjogWzE2NSwgNDIsIDQyXSxcbiAgYnVybHl3b29kOiBbMjIyLCAxODQsIDEzNV0sXG4gIGNhZGV0Ymx1ZTogWzk1LCAxNTgsIDE2MF0sXG4gIGNoYXJ0cmV1c2U6IFsxMjcsIDI1NSwgMF0sXG4gIGNob2NvbGF0ZTogWzIxMCwgMTA1LCAzMF0sXG4gIGNvcmFsOiBbMjU1LCAxMjcsIDgwXSxcbiAgY29ybmZsb3dlcmJsdWU6IFsxMDAsIDE0OSwgMjM3XSxcbiAgY29ybnNpbGs6IFsyNTUsIDI0OCwgMjIwXSxcbiAgY3JpbXNvbjogWzIyMCwgMjAsIDYwXSxcbiAgY3lhbjogWzAsIDI1NSwgMjU1XSxcbiAgZGFya2JsdWU6IFswLCAwLCAxMzldLFxuICBkYXJrY3lhbjogWzAsIDEzOSwgMTM5XSxcbiAgZGFya2dvbGRlbnJvZDogWzE4NCwgMTM0LCAxMV0sXG4gIGRhcmtncmF5OiBbMTY5LCAxNjksIDE2OV0sXG4gIGRhcmtncmVlbjogWzAsIDEwMCwgMF0sXG4gIGRhcmtncmV5OiBbMTY5LCAxNjksIDE2OV0sXG4gIGRhcmtraGFraTogWzE4OSwgMTgzLCAxMDddLFxuICBkYXJrbWFnZW50YTogWzEzOSwgMCwgMTM5XSxcbiAgZGFya29saXZlZ3JlZW46IFs4NSwgMTA3LCA0N10sXG4gIGRhcmtvcmFuZ2U6IFsyNTUsIDE0MCwgMF0sXG4gIGRhcmtvcmNoaWQ6IFsxNTMsIDUwLCAyMDRdLFxuICBkYXJrcmVkOiBbMTM5LCAwLCAwXSxcbiAgZGFya3NhbG1vbjogWzIzMywgMTUwLCAxMjJdLFxuICBkYXJrc2VhZ3JlZW46IFsxNDMsIDE4OCwgMTQzXSxcbiAgZGFya3NsYXRlYmx1ZTogWzcyLCA2MSwgMTM5XSxcbiAgZGFya3NsYXRlZ3JheTogWzQ3LCA3OSwgNzldLFxuICBkYXJrc2xhdGVncmV5OiBbNDcsIDc5LCA3OV0sXG4gIGRhcmt0dXJxdW9pc2U6IFswLCAyMDYsIDIwOV0sXG4gIGRhcmt2aW9sZXQ6IFsxNDgsIDAsIDIxMV0sXG4gIGRlZXBwaW5rOiBbMjU1LCAyMCwgMTQ3XSxcbiAgZGVlcHNreWJsdWU6IFswLCAxOTEsIDI1NV0sXG4gIGRpbWdyYXk6IFsxMDUsIDEwNSwgMTA1XSxcbiAgZGltZ3JleTogWzEwNSwgMTA1LCAxMDVdLFxuICBkb2RnZXJibHVlOiBbMzAsIDE0NCwgMjU1XSxcbiAgZmlyZWJyaWNrOiBbMTc4LCAzNCwgMzRdLFxuICBmbG9yYWx3aGl0ZTogWzI1NSwgMjUwLCAyNDBdLFxuICBmb3Jlc3RncmVlbjogWzM0LCAxMzksIDM0XSxcbiAgZnVjaHNpYTogWzI1NSwgMCwgMjU1XSxcbiAgZ2FpbnNib3JvOiBbMjIwLCAyMjAsIDIyMF0sXG4gIGdob3N0d2hpdGU6IFsyNDgsIDI0OCwgMjU1XSxcbiAgZ29sZDogWzI1NSwgMjE1LCAwXSxcbiAgZ29sZGVucm9kOiBbMjE4LCAxNjUsIDMyXSxcbiAgZ3JheTogWzEyOCwgMTI4LCAxMjhdLFxuICBncmV5OiBbMTI4LCAxMjgsIDEyOF0sXG4gIGdyZWVuOiBbMCwgMTI4LCAwXSxcbiAgZ3JlZW55ZWxsb3c6IFsxNzMsIDI1NSwgNDddLFxuICBob25leWRldzogWzI0MCwgMjU1LCAyNDBdLFxuICBob3RwaW5rOiBbMjU1LCAxMDUsIDE4MF0sXG4gIGluZGlhbnJlZDogWzIwNSwgOTIsIDkyXSxcbiAgaW5kaWdvOiBbNzUsIDAsIDEzMF0sXG4gIGl2b3J5OiBbMjU1LCAyNTUsIDI0MF0sXG4gIGtoYWtpOiBbMjQwLCAyMzAsIDE0MF0sXG4gIGxhdmVuZGVyOiBbMjMwLCAyMzAsIDI1MF0sXG4gIGxhdmVuZGVyYmx1c2g6IFsyNTUsIDI0MCwgMjQ1XSxcbiAgbGF3bmdyZWVuOiBbMTI0LCAyNTIsIDBdLFxuICBsZW1vbmNoaWZmb246IFsyNTUsIDI1MCwgMjA1XSxcbiAgbGlnaHRibHVlOiBbMTczLCAyMTYsIDIzMF0sXG4gIGxpZ2h0Y29yYWw6IFsyNDAsIDEyOCwgMTI4XSxcbiAgbGlnaHRjeWFuOiBbMjI0LCAyNTUsIDI1NV0sXG4gIGxpZ2h0Z29sZGVucm9keWVsbG93OiBbMjUwLCAyNTAsIDIxMF0sXG4gIGxpZ2h0Z3JheTogWzIxMSwgMjExLCAyMTFdLFxuICBsaWdodGdyZWVuOiBbMTQ0LCAyMzgsIDE0NF0sXG4gIGxpZ2h0Z3JleTogWzIxMSwgMjExLCAyMTFdLFxuICBsaWdodHBpbms6IFsyNTUsIDE4MiwgMTkzXSxcbiAgbGlnaHRzYWxtb246IFsyNTUsIDE2MCwgMTIyXSxcbiAgbGlnaHRzZWFncmVlbjogWzMyLCAxNzgsIDE3MF0sXG4gIGxpZ2h0c2t5Ymx1ZTogWzEzNSwgMjA2LCAyNTBdLFxuICBsaWdodHNsYXRlZ3JheTogWzExOSwgMTM2LCAxNTNdLFxuICBsaWdodHNsYXRlZ3JleTogWzExOSwgMTM2LCAxNTNdLFxuICBsaWdodHN0ZWVsYmx1ZTogWzE3NiwgMTk2LCAyMjJdLFxuICBsaWdodHllbGxvdzogWzI1NSwgMjU1LCAyMjRdLFxuICBsaW1lOiBbMCwgMjU1LCAwXSxcbiAgbGltZWdyZWVuOiBbNTAsIDIwNSwgNTBdLFxuICBsaW5lbjogWzI1MCwgMjQwLCAyMzBdLFxuICBtYWdlbnRhOiBbMjU1LCAwLCAyNTVdLFxuICBtYXJvb246IFsxMjgsIDAsIDBdLFxuICBtZWRpdW1hcXVhbWFyaW5lOiBbMTAyLCAyMDUsIDE3MF0sXG4gIG1lZGl1bWJsdWU6IFswLCAwLCAyMDVdLFxuICBtZWRpdW1vcmNoaWQ6IFsxODYsIDg1LCAyMTFdLFxuICBtZWRpdW1wdXJwbGU6IFsxNDcsIDExMiwgMjE5XSxcbiAgbWVkaXVtc2VhZ3JlZW46IFs2MCwgMTc5LCAxMTNdLFxuICBtZWRpdW1zbGF0ZWJsdWU6IFsxMjMsIDEwNCwgMjM4XSxcbiAgbWVkaXVtc3ByaW5nZ3JlZW46IFswLCAyNTAsIDE1NF0sXG4gIG1lZGl1bXR1cnF1b2lzZTogWzcyLCAyMDksIDIwNF0sXG4gIG1lZGl1bXZpb2xldHJlZDogWzE5OSwgMjEsIDEzM10sXG4gIG1pZG5pZ2h0Ymx1ZTogWzI1LCAyNSwgMTEyXSxcbiAgbWludGNyZWFtOiBbMjQ1LCAyNTUsIDI1MF0sXG4gIG1pc3R5cm9zZTogWzI1NSwgMjI4LCAyMjVdLFxuICBtb2NjYXNpbjogWzI1NSwgMjI4LCAxODFdLFxuICBuYXZham93aGl0ZTogWzI1NSwgMjIyLCAxNzNdLFxuICBuYXZ5OiBbMCwgMCwgMTI4XSxcbiAgb2xkbGFjZTogWzI1MywgMjQ1LCAyMzBdLFxuICBvbGl2ZTogWzEyOCwgMTI4LCAwXSxcbiAgb2xpdmVkcmFiOiBbMTA3LCAxNDIsIDM1XSxcbiAgb3JhbmdlOiBbMjU1LCAxNjUsIDBdLFxuICBvcmFuZ2VyZWQ6IFsyNTUsIDY5LCAwXSxcbiAgb3JjaGlkOiBbMjE4LCAxMTIsIDIxNF0sXG4gIHBhbGVnb2xkZW5yb2Q6IFsyMzgsIDIzMiwgMTcwXSxcbiAgcGFsZWdyZWVuOiBbMTUyLCAyNTEsIDE1Ml0sXG4gIHBhbGV0dXJxdW9pc2U6IFsxNzUsIDIzOCwgMjM4XSxcbiAgcGFsZXZpb2xldHJlZDogWzIxOSwgMTEyLCAxNDddLFxuICBwYXBheWF3aGlwOiBbMjU1LCAyMzksIDIxM10sXG4gIHBlYWNocHVmZjogWzI1NSwgMjE4LCAxODVdLFxuICBwZXJ1OiBbMjA1LCAxMzMsIDYzXSxcbiAgcGluazogWzI1NSwgMTkyLCAyMDNdLFxuICBwbHVtOiBbMjIxLCAxNjAsIDIyMV0sXG4gIHBvd2RlcmJsdWU6IFsxNzYsIDIyNCwgMjMwXSxcbiAgcHVycGxlOiBbMTI4LCAwLCAxMjhdLFxuICByZWQ6IFsyNTUsIDAsIDBdLFxuICByb3N5YnJvd246IFsxODgsIDE0MywgMTQzXSxcbiAgcm95YWxibHVlOiBbNjUsIDEwNSwgMjI1XSxcbiAgc2FkZGxlYnJvd246IFsxMzksIDY5LCAxOV0sXG4gIHNhbG1vbjogWzI1MCwgMTI4LCAxMTRdLFxuICBzYW5keWJyb3duOiBbMjQ0LCAxNjQsIDk2XSxcbiAgc2VhZ3JlZW46IFs0NiwgMTM5LCA4N10sXG4gIHNlYXNoZWxsOiBbMjU1LCAyNDUsIDIzOF0sXG4gIHNpZW5uYTogWzE2MCwgODIsIDQ1XSxcbiAgc2lsdmVyOiBbMTkyLCAxOTIsIDE5Ml0sXG4gIHNreWJsdWU6IFsxMzUsIDIwNiwgMjM1XSxcbiAgc2xhdGVibHVlOiBbMTA2LCA5MCwgMjA1XSxcbiAgc2xhdGVncmF5OiBbMTEyLCAxMjgsIDE0NF0sXG4gIHNsYXRlZ3JleTogWzExMiwgMTI4LCAxNDRdLFxuICBzbm93OiBbMjU1LCAyNTAsIDI1MF0sXG4gIHNwcmluZ2dyZWVuOiBbMCwgMjU1LCAxMjddLFxuICBzdGVlbGJsdWU6IFs3MCwgMTMwLCAxODBdLFxuICB0YW46IFsyMTAsIDE4MCwgMTQwXSxcbiAgdGVhbDogWzAsIDEyOCwgMTI4XSxcbiAgdGhpc3RsZTogWzIxNiwgMTkxLCAyMTZdLFxuICB0b21hdG86IFsyNTUsIDk5LCA3MV0sXG4gIHR1cnF1b2lzZTogWzY0LCAyMjQsIDIwOF0sXG4gIHZpb2xldDogWzIzOCwgMTMwLCAyMzhdLFxuICB3aGVhdDogWzI0NSwgMjIyLCAxNzldLFxuICB3aGl0ZTogWzI1NSwgMjU1LCAyNTVdLFxuICB3aGl0ZXNtb2tlOiBbMjQ1LCAyNDUsIDI0NV0sXG4gIHllbGxvdzogWzI1NSwgMjU1LCAwXSxcbiAgeWVsbG93Z3JlZW46IFsxNTQsIDIwNSwgNTBdXG59O1xuXG4vLyBzZXRzIHRoZSB2YWx1ZSBpbiBhIG1hcCAobWFwIG1heSBub3QgYmUgYnVpbHQpXG52YXIgc2V0TWFwID0gZnVuY3Rpb24gc2V0TWFwKG9wdGlvbnMpIHtcbiAgdmFyIG9iaiA9IG9wdGlvbnMubWFwO1xuICB2YXIga2V5cyA9IG9wdGlvbnMua2V5cztcbiAgdmFyIGwgPSBrZXlzLmxlbmd0aDtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBsOyBpKyspIHtcbiAgICB2YXIga2V5ID0ga2V5c1tpXTtcbiAgICBpZiAocGxhaW5PYmplY3Qoa2V5KSkge1xuICAgICAgdGhyb3cgRXJyb3IoJ1RyaWVkIHRvIHNldCBtYXAgd2l0aCBvYmplY3Qga2V5Jyk7XG4gICAgfVxuICAgIGlmIChpIDwga2V5cy5sZW5ndGggLSAxKSB7XG4gICAgICAvLyBleHRlbmQgdGhlIG1hcCBpZiBuZWNlc3NhcnlcbiAgICAgIGlmIChvYmpba2V5XSA9PSBudWxsKSB7XG4gICAgICAgIG9ialtrZXldID0ge307XG4gICAgICB9XG4gICAgICBvYmogPSBvYmpba2V5XTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gc2V0IHRoZSB2YWx1ZVxuICAgICAgb2JqW2tleV0gPSBvcHRpb25zLnZhbHVlO1xuICAgIH1cbiAgfVxufTtcblxuLy8gZ2V0cyB0aGUgdmFsdWUgaW4gYSBtYXAgZXZlbiBpZiBpdCdzIG5vdCBidWlsdCBpbiBwbGFjZXNcbnZhciBnZXRNYXAgPSBmdW5jdGlvbiBnZXRNYXAob3B0aW9ucykge1xuICB2YXIgb2JqID0gb3B0aW9ucy5tYXA7XG4gIHZhciBrZXlzID0gb3B0aW9ucy5rZXlzO1xuICB2YXIgbCA9IGtleXMubGVuZ3RoO1xuICBmb3IgKHZhciBpID0gMDsgaSA8IGw7IGkrKykge1xuICAgIHZhciBrZXkgPSBrZXlzW2ldO1xuICAgIGlmIChwbGFpbk9iamVjdChrZXkpKSB7XG4gICAgICB0aHJvdyBFcnJvcignVHJpZWQgdG8gZ2V0IG1hcCB3aXRoIG9iamVjdCBrZXknKTtcbiAgICB9XG4gICAgb2JqID0gb2JqW2tleV07XG4gICAgaWYgKG9iaiA9PSBudWxsKSB7XG4gICAgICByZXR1cm4gb2JqO1xuICAgIH1cbiAgfVxuICByZXR1cm4gb2JqO1xufTtcblxudmFyIGNvbW1vbmpzR2xvYmFsID0gdHlwZW9mIGdsb2JhbFRoaXMgIT09ICd1bmRlZmluZWQnID8gZ2xvYmFsVGhpcyA6IHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnID8gd2luZG93IDogdHlwZW9mIGdsb2JhbCAhPT0gJ3VuZGVmaW5lZCcgPyBnbG9iYWwgOiB0eXBlb2Ygc2VsZiAhPT0gJ3VuZGVmaW5lZCcgPyBzZWxmIDoge307XG5cbmZ1bmN0aW9uIGdldERlZmF1bHRFeHBvcnRGcm9tQ2pzICh4KSB7XG5cdHJldHVybiB4ICYmIHguX19lc01vZHVsZSAmJiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoeCwgJ2RlZmF1bHQnKSA/IHhbJ2RlZmF1bHQnXSA6IHg7XG59XG5cbi8qKlxuICogQ2hlY2tzIGlmIGB2YWx1ZWAgaXMgdGhlXG4gKiBbbGFuZ3VhZ2UgdHlwZV0oaHR0cDovL3d3dy5lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzcuMC8jc2VjLWVjbWFzY3JpcHQtbGFuZ3VhZ2UtdHlwZXMpXG4gKiBvZiBgT2JqZWN0YC4gKGUuZy4gYXJyYXlzLCBmdW5jdGlvbnMsIG9iamVjdHMsIHJlZ2V4ZXMsIGBuZXcgTnVtYmVyKDApYCwgYW5kIGBuZXcgU3RyaW5nKCcnKWApXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSAwLjEuMFxuICogQGNhdGVnb3J5IExhbmdcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgYW4gb2JqZWN0LCBlbHNlIGBmYWxzZWAuXG4gKiBAZXhhbXBsZVxuICpcbiAqIF8uaXNPYmplY3Qoe30pO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIF8uaXNPYmplY3QoWzEsIDIsIDNdKTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBfLmlzT2JqZWN0KF8ubm9vcCk7XG4gKiAvLyA9PiB0cnVlXG4gKlxuICogXy5pc09iamVjdChudWxsKTtcbiAqIC8vID0+IGZhbHNlXG4gKi9cblxudmFyIGlzT2JqZWN0XzE7XG52YXIgaGFzUmVxdWlyZWRJc09iamVjdDtcblxuZnVuY3Rpb24gcmVxdWlyZUlzT2JqZWN0ICgpIHtcblx0aWYgKGhhc1JlcXVpcmVkSXNPYmplY3QpIHJldHVybiBpc09iamVjdF8xO1xuXHRoYXNSZXF1aXJlZElzT2JqZWN0ID0gMTtcblx0ZnVuY3Rpb24gaXNPYmplY3QodmFsdWUpIHtcblx0ICB2YXIgdHlwZSA9IHR5cGVvZiB2YWx1ZTtcblx0ICByZXR1cm4gdmFsdWUgIT0gbnVsbCAmJiAodHlwZSA9PSAnb2JqZWN0JyB8fCB0eXBlID09ICdmdW5jdGlvbicpO1xuXHR9XG5cblx0aXNPYmplY3RfMSA9IGlzT2JqZWN0O1xuXHRyZXR1cm4gaXNPYmplY3RfMTtcbn1cblxuLyoqIERldGVjdCBmcmVlIHZhcmlhYmxlIGBnbG9iYWxgIGZyb20gTm9kZS5qcy4gKi9cblxudmFyIF9mcmVlR2xvYmFsO1xudmFyIGhhc1JlcXVpcmVkX2ZyZWVHbG9iYWw7XG5cbmZ1bmN0aW9uIHJlcXVpcmVfZnJlZUdsb2JhbCAoKSB7XG5cdGlmIChoYXNSZXF1aXJlZF9mcmVlR2xvYmFsKSByZXR1cm4gX2ZyZWVHbG9iYWw7XG5cdGhhc1JlcXVpcmVkX2ZyZWVHbG9iYWwgPSAxO1xuXHR2YXIgZnJlZUdsb2JhbCA9IHR5cGVvZiBjb21tb25qc0dsb2JhbCA9PSAnb2JqZWN0JyAmJiBjb21tb25qc0dsb2JhbCAmJiBjb21tb25qc0dsb2JhbC5PYmplY3QgPT09IE9iamVjdCAmJiBjb21tb25qc0dsb2JhbDtcblxuXHRfZnJlZUdsb2JhbCA9IGZyZWVHbG9iYWw7XG5cdHJldHVybiBfZnJlZUdsb2JhbDtcbn1cblxudmFyIF9yb290O1xudmFyIGhhc1JlcXVpcmVkX3Jvb3Q7XG5cbmZ1bmN0aW9uIHJlcXVpcmVfcm9vdCAoKSB7XG5cdGlmIChoYXNSZXF1aXJlZF9yb290KSByZXR1cm4gX3Jvb3Q7XG5cdGhhc1JlcXVpcmVkX3Jvb3QgPSAxO1xuXHR2YXIgZnJlZUdsb2JhbCA9IHJlcXVpcmVfZnJlZUdsb2JhbCgpO1xuXG5cdC8qKiBEZXRlY3QgZnJlZSB2YXJpYWJsZSBgc2VsZmAuICovXG5cdHZhciBmcmVlU2VsZiA9IHR5cGVvZiBzZWxmID09ICdvYmplY3QnICYmIHNlbGYgJiYgc2VsZi5PYmplY3QgPT09IE9iamVjdCAmJiBzZWxmO1xuXG5cdC8qKiBVc2VkIGFzIGEgcmVmZXJlbmNlIHRvIHRoZSBnbG9iYWwgb2JqZWN0LiAqL1xuXHR2YXIgcm9vdCA9IGZyZWVHbG9iYWwgfHwgZnJlZVNlbGYgfHwgRnVuY3Rpb24oJ3JldHVybiB0aGlzJykoKTtcblxuXHRfcm9vdCA9IHJvb3Q7XG5cdHJldHVybiBfcm9vdDtcbn1cblxudmFyIG5vd18xO1xudmFyIGhhc1JlcXVpcmVkTm93O1xuXG5mdW5jdGlvbiByZXF1aXJlTm93ICgpIHtcblx0aWYgKGhhc1JlcXVpcmVkTm93KSByZXR1cm4gbm93XzE7XG5cdGhhc1JlcXVpcmVkTm93ID0gMTtcblx0dmFyIHJvb3QgPSByZXF1aXJlX3Jvb3QoKTtcblxuXHQvKipcblx0ICogR2V0cyB0aGUgdGltZXN0YW1wIG9mIHRoZSBudW1iZXIgb2YgbWlsbGlzZWNvbmRzIHRoYXQgaGF2ZSBlbGFwc2VkIHNpbmNlXG5cdCAqIHRoZSBVbml4IGVwb2NoICgxIEphbnVhcnkgMTk3MCAwMDowMDowMCBVVEMpLlxuXHQgKlxuXHQgKiBAc3RhdGljXG5cdCAqIEBtZW1iZXJPZiBfXG5cdCAqIEBzaW5jZSAyLjQuMFxuXHQgKiBAY2F0ZWdvcnkgRGF0ZVxuXHQgKiBAcmV0dXJucyB7bnVtYmVyfSBSZXR1cm5zIHRoZSB0aW1lc3RhbXAuXG5cdCAqIEBleGFtcGxlXG5cdCAqXG5cdCAqIF8uZGVmZXIoZnVuY3Rpb24oc3RhbXApIHtcblx0ICogICBjb25zb2xlLmxvZyhfLm5vdygpIC0gc3RhbXApO1xuXHQgKiB9LCBfLm5vdygpKTtcblx0ICogLy8gPT4gTG9ncyB0aGUgbnVtYmVyIG9mIG1pbGxpc2Vjb25kcyBpdCB0b29rIGZvciB0aGUgZGVmZXJyZWQgaW52b2NhdGlvbi5cblx0ICovXG5cdHZhciBub3cgPSBmdW5jdGlvbigpIHtcblx0ICByZXR1cm4gcm9vdC5EYXRlLm5vdygpO1xuXHR9O1xuXG5cdG5vd18xID0gbm93O1xuXHRyZXR1cm4gbm93XzE7XG59XG5cbi8qKiBVc2VkIHRvIG1hdGNoIGEgc2luZ2xlIHdoaXRlc3BhY2UgY2hhcmFjdGVyLiAqL1xuXG52YXIgX3RyaW1tZWRFbmRJbmRleDtcbnZhciBoYXNSZXF1aXJlZF90cmltbWVkRW5kSW5kZXg7XG5cbmZ1bmN0aW9uIHJlcXVpcmVfdHJpbW1lZEVuZEluZGV4ICgpIHtcblx0aWYgKGhhc1JlcXVpcmVkX3RyaW1tZWRFbmRJbmRleCkgcmV0dXJuIF90cmltbWVkRW5kSW5kZXg7XG5cdGhhc1JlcXVpcmVkX3RyaW1tZWRFbmRJbmRleCA9IDE7XG5cdHZhciByZVdoaXRlc3BhY2UgPSAvXFxzLztcblxuXHQvKipcblx0ICogVXNlZCBieSBgXy50cmltYCBhbmQgYF8udHJpbUVuZGAgdG8gZ2V0IHRoZSBpbmRleCBvZiB0aGUgbGFzdCBub24td2hpdGVzcGFjZVxuXHQgKiBjaGFyYWN0ZXIgb2YgYHN0cmluZ2AuXG5cdCAqXG5cdCAqIEBwcml2YXRlXG5cdCAqIEBwYXJhbSB7c3RyaW5nfSBzdHJpbmcgVGhlIHN0cmluZyB0byBpbnNwZWN0LlxuXHQgKiBAcmV0dXJucyB7bnVtYmVyfSBSZXR1cm5zIHRoZSBpbmRleCBvZiB0aGUgbGFzdCBub24td2hpdGVzcGFjZSBjaGFyYWN0ZXIuXG5cdCAqL1xuXHRmdW5jdGlvbiB0cmltbWVkRW5kSW5kZXgoc3RyaW5nKSB7XG5cdCAgdmFyIGluZGV4ID0gc3RyaW5nLmxlbmd0aDtcblxuXHQgIHdoaWxlIChpbmRleC0tICYmIHJlV2hpdGVzcGFjZS50ZXN0KHN0cmluZy5jaGFyQXQoaW5kZXgpKSkge31cblx0ICByZXR1cm4gaW5kZXg7XG5cdH1cblxuXHRfdHJpbW1lZEVuZEluZGV4ID0gdHJpbW1lZEVuZEluZGV4O1xuXHRyZXR1cm4gX3RyaW1tZWRFbmRJbmRleDtcbn1cblxudmFyIF9iYXNlVHJpbTtcbnZhciBoYXNSZXF1aXJlZF9iYXNlVHJpbTtcblxuZnVuY3Rpb24gcmVxdWlyZV9iYXNlVHJpbSAoKSB7XG5cdGlmIChoYXNSZXF1aXJlZF9iYXNlVHJpbSkgcmV0dXJuIF9iYXNlVHJpbTtcblx0aGFzUmVxdWlyZWRfYmFzZVRyaW0gPSAxO1xuXHR2YXIgdHJpbW1lZEVuZEluZGV4ID0gcmVxdWlyZV90cmltbWVkRW5kSW5kZXgoKTtcblxuXHQvKiogVXNlZCB0byBtYXRjaCBsZWFkaW5nIHdoaXRlc3BhY2UuICovXG5cdHZhciByZVRyaW1TdGFydCA9IC9eXFxzKy87XG5cblx0LyoqXG5cdCAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLnRyaW1gLlxuXHQgKlxuXHQgKiBAcHJpdmF0ZVxuXHQgKiBAcGFyYW0ge3N0cmluZ30gc3RyaW5nIFRoZSBzdHJpbmcgdG8gdHJpbS5cblx0ICogQHJldHVybnMge3N0cmluZ30gUmV0dXJucyB0aGUgdHJpbW1lZCBzdHJpbmcuXG5cdCAqL1xuXHRmdW5jdGlvbiBiYXNlVHJpbShzdHJpbmcpIHtcblx0ICByZXR1cm4gc3RyaW5nXG5cdCAgICA/IHN0cmluZy5zbGljZSgwLCB0cmltbWVkRW5kSW5kZXgoc3RyaW5nKSArIDEpLnJlcGxhY2UocmVUcmltU3RhcnQsICcnKVxuXHQgICAgOiBzdHJpbmc7XG5cdH1cblxuXHRfYmFzZVRyaW0gPSBiYXNlVHJpbTtcblx0cmV0dXJuIF9iYXNlVHJpbTtcbn1cblxudmFyIF9TeW1ib2w7XG52YXIgaGFzUmVxdWlyZWRfU3ltYm9sO1xuXG5mdW5jdGlvbiByZXF1aXJlX1N5bWJvbCAoKSB7XG5cdGlmIChoYXNSZXF1aXJlZF9TeW1ib2wpIHJldHVybiBfU3ltYm9sO1xuXHRoYXNSZXF1aXJlZF9TeW1ib2wgPSAxO1xuXHR2YXIgcm9vdCA9IHJlcXVpcmVfcm9vdCgpO1xuXG5cdC8qKiBCdWlsdC1pbiB2YWx1ZSByZWZlcmVuY2VzLiAqL1xuXHR2YXIgU3ltYm9sID0gcm9vdC5TeW1ib2w7XG5cblx0X1N5bWJvbCA9IFN5bWJvbDtcblx0cmV0dXJuIF9TeW1ib2w7XG59XG5cbnZhciBfZ2V0UmF3VGFnO1xudmFyIGhhc1JlcXVpcmVkX2dldFJhd1RhZztcblxuZnVuY3Rpb24gcmVxdWlyZV9nZXRSYXdUYWcgKCkge1xuXHRpZiAoaGFzUmVxdWlyZWRfZ2V0UmF3VGFnKSByZXR1cm4gX2dldFJhd1RhZztcblx0aGFzUmVxdWlyZWRfZ2V0UmF3VGFnID0gMTtcblx0dmFyIFN5bWJvbCA9IHJlcXVpcmVfU3ltYm9sKCk7XG5cblx0LyoqIFVzZWQgZm9yIGJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzLiAqL1xuXHR2YXIgb2JqZWN0UHJvdG8gPSBPYmplY3QucHJvdG90eXBlO1xuXG5cdC8qKiBVc2VkIHRvIGNoZWNrIG9iamVjdHMgZm9yIG93biBwcm9wZXJ0aWVzLiAqL1xuXHR2YXIgaGFzT3duUHJvcGVydHkgPSBvYmplY3RQcm90by5oYXNPd25Qcm9wZXJ0eTtcblxuXHQvKipcblx0ICogVXNlZCB0byByZXNvbHZlIHRoZVxuXHQgKiBbYHRvU3RyaW5nVGFnYF0oaHR0cDovL2VjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvNy4wLyNzZWMtb2JqZWN0LnByb3RvdHlwZS50b3N0cmluZylcblx0ICogb2YgdmFsdWVzLlxuXHQgKi9cblx0dmFyIG5hdGl2ZU9iamVjdFRvU3RyaW5nID0gb2JqZWN0UHJvdG8udG9TdHJpbmc7XG5cblx0LyoqIEJ1aWx0LWluIHZhbHVlIHJlZmVyZW5jZXMuICovXG5cdHZhciBzeW1Ub1N0cmluZ1RhZyA9IFN5bWJvbCA/IFN5bWJvbC50b1N0cmluZ1RhZyA6IHVuZGVmaW5lZDtcblxuXHQvKipcblx0ICogQSBzcGVjaWFsaXplZCB2ZXJzaW9uIG9mIGBiYXNlR2V0VGFnYCB3aGljaCBpZ25vcmVzIGBTeW1ib2wudG9TdHJpbmdUYWdgIHZhbHVlcy5cblx0ICpcblx0ICogQHByaXZhdGVcblx0ICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gcXVlcnkuXG5cdCAqIEByZXR1cm5zIHtzdHJpbmd9IFJldHVybnMgdGhlIHJhdyBgdG9TdHJpbmdUYWdgLlxuXHQgKi9cblx0ZnVuY3Rpb24gZ2V0UmF3VGFnKHZhbHVlKSB7XG5cdCAgdmFyIGlzT3duID0gaGFzT3duUHJvcGVydHkuY2FsbCh2YWx1ZSwgc3ltVG9TdHJpbmdUYWcpLFxuXHQgICAgICB0YWcgPSB2YWx1ZVtzeW1Ub1N0cmluZ1RhZ107XG5cblx0ICB0cnkge1xuXHQgICAgdmFsdWVbc3ltVG9TdHJpbmdUYWddID0gdW5kZWZpbmVkO1xuXHQgICAgdmFyIHVubWFza2VkID0gdHJ1ZTtcblx0ICB9IGNhdGNoIChlKSB7fVxuXG5cdCAgdmFyIHJlc3VsdCA9IG5hdGl2ZU9iamVjdFRvU3RyaW5nLmNhbGwodmFsdWUpO1xuXHQgIGlmICh1bm1hc2tlZCkge1xuXHQgICAgaWYgKGlzT3duKSB7XG5cdCAgICAgIHZhbHVlW3N5bVRvU3RyaW5nVGFnXSA9IHRhZztcblx0ICAgIH0gZWxzZSB7XG5cdCAgICAgIGRlbGV0ZSB2YWx1ZVtzeW1Ub1N0cmluZ1RhZ107XG5cdCAgICB9XG5cdCAgfVxuXHQgIHJldHVybiByZXN1bHQ7XG5cdH1cblxuXHRfZ2V0UmF3VGFnID0gZ2V0UmF3VGFnO1xuXHRyZXR1cm4gX2dldFJhd1RhZztcbn1cblxuLyoqIFVzZWQgZm9yIGJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzLiAqL1xuXG52YXIgX29iamVjdFRvU3RyaW5nO1xudmFyIGhhc1JlcXVpcmVkX29iamVjdFRvU3RyaW5nO1xuXG5mdW5jdGlvbiByZXF1aXJlX29iamVjdFRvU3RyaW5nICgpIHtcblx0aWYgKGhhc1JlcXVpcmVkX29iamVjdFRvU3RyaW5nKSByZXR1cm4gX29iamVjdFRvU3RyaW5nO1xuXHRoYXNSZXF1aXJlZF9vYmplY3RUb1N0cmluZyA9IDE7XG5cdHZhciBvYmplY3RQcm90byA9IE9iamVjdC5wcm90b3R5cGU7XG5cblx0LyoqXG5cdCAqIFVzZWQgdG8gcmVzb2x2ZSB0aGVcblx0ICogW2B0b1N0cmluZ1RhZ2BdKGh0dHA6Ly9lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzcuMC8jc2VjLW9iamVjdC5wcm90b3R5cGUudG9zdHJpbmcpXG5cdCAqIG9mIHZhbHVlcy5cblx0ICovXG5cdHZhciBuYXRpdmVPYmplY3RUb1N0cmluZyA9IG9iamVjdFByb3RvLnRvU3RyaW5nO1xuXG5cdC8qKlxuXHQgKiBDb252ZXJ0cyBgdmFsdWVgIHRvIGEgc3RyaW5nIHVzaW5nIGBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nYC5cblx0ICpcblx0ICogQHByaXZhdGVcblx0ICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY29udmVydC5cblx0ICogQHJldHVybnMge3N0cmluZ30gUmV0dXJucyB0aGUgY29udmVydGVkIHN0cmluZy5cblx0ICovXG5cdGZ1bmN0aW9uIG9iamVjdFRvU3RyaW5nKHZhbHVlKSB7XG5cdCAgcmV0dXJuIG5hdGl2ZU9iamVjdFRvU3RyaW5nLmNhbGwodmFsdWUpO1xuXHR9XG5cblx0X29iamVjdFRvU3RyaW5nID0gb2JqZWN0VG9TdHJpbmc7XG5cdHJldHVybiBfb2JqZWN0VG9TdHJpbmc7XG59XG5cbnZhciBfYmFzZUdldFRhZztcbnZhciBoYXNSZXF1aXJlZF9iYXNlR2V0VGFnO1xuXG5mdW5jdGlvbiByZXF1aXJlX2Jhc2VHZXRUYWcgKCkge1xuXHRpZiAoaGFzUmVxdWlyZWRfYmFzZUdldFRhZykgcmV0dXJuIF9iYXNlR2V0VGFnO1xuXHRoYXNSZXF1aXJlZF9iYXNlR2V0VGFnID0gMTtcblx0dmFyIFN5bWJvbCA9IHJlcXVpcmVfU3ltYm9sKCksXG5cdCAgICBnZXRSYXdUYWcgPSByZXF1aXJlX2dldFJhd1RhZygpLFxuXHQgICAgb2JqZWN0VG9TdHJpbmcgPSByZXF1aXJlX29iamVjdFRvU3RyaW5nKCk7XG5cblx0LyoqIGBPYmplY3QjdG9TdHJpbmdgIHJlc3VsdCByZWZlcmVuY2VzLiAqL1xuXHR2YXIgbnVsbFRhZyA9ICdbb2JqZWN0IE51bGxdJyxcblx0ICAgIHVuZGVmaW5lZFRhZyA9ICdbb2JqZWN0IFVuZGVmaW5lZF0nO1xuXG5cdC8qKiBCdWlsdC1pbiB2YWx1ZSByZWZlcmVuY2VzLiAqL1xuXHR2YXIgc3ltVG9TdHJpbmdUYWcgPSBTeW1ib2wgPyBTeW1ib2wudG9TdHJpbmdUYWcgOiB1bmRlZmluZWQ7XG5cblx0LyoqXG5cdCAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBnZXRUYWdgIHdpdGhvdXQgZmFsbGJhY2tzIGZvciBidWdneSBlbnZpcm9ubWVudHMuXG5cdCAqXG5cdCAqIEBwcml2YXRlXG5cdCAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIHF1ZXJ5LlxuXHQgKiBAcmV0dXJucyB7c3RyaW5nfSBSZXR1cm5zIHRoZSBgdG9TdHJpbmdUYWdgLlxuXHQgKi9cblx0ZnVuY3Rpb24gYmFzZUdldFRhZyh2YWx1ZSkge1xuXHQgIGlmICh2YWx1ZSA9PSBudWxsKSB7XG5cdCAgICByZXR1cm4gdmFsdWUgPT09IHVuZGVmaW5lZCA/IHVuZGVmaW5lZFRhZyA6IG51bGxUYWc7XG5cdCAgfVxuXHQgIHJldHVybiAoc3ltVG9TdHJpbmdUYWcgJiYgc3ltVG9TdHJpbmdUYWcgaW4gT2JqZWN0KHZhbHVlKSlcblx0ICAgID8gZ2V0UmF3VGFnKHZhbHVlKVxuXHQgICAgOiBvYmplY3RUb1N0cmluZyh2YWx1ZSk7XG5cdH1cblxuXHRfYmFzZUdldFRhZyA9IGJhc2VHZXRUYWc7XG5cdHJldHVybiBfYmFzZUdldFRhZztcbn1cblxuLyoqXG4gKiBDaGVja3MgaWYgYHZhbHVlYCBpcyBvYmplY3QtbGlrZS4gQSB2YWx1ZSBpcyBvYmplY3QtbGlrZSBpZiBpdCdzIG5vdCBgbnVsbGBcbiAqIGFuZCBoYXMgYSBgdHlwZW9mYCByZXN1bHQgb2YgXCJvYmplY3RcIi5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDQuMC4wXG4gKiBAY2F0ZWdvcnkgTGFuZ1xuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBvYmplY3QtbGlrZSwgZWxzZSBgZmFsc2VgLlxuICogQGV4YW1wbGVcbiAqXG4gKiBfLmlzT2JqZWN0TGlrZSh7fSk7XG4gKiAvLyA9PiB0cnVlXG4gKlxuICogXy5pc09iamVjdExpa2UoWzEsIDIsIDNdKTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBfLmlzT2JqZWN0TGlrZShfLm5vb3ApO1xuICogLy8gPT4gZmFsc2VcbiAqXG4gKiBfLmlzT2JqZWN0TGlrZShudWxsKTtcbiAqIC8vID0+IGZhbHNlXG4gKi9cblxudmFyIGlzT2JqZWN0TGlrZV8xO1xudmFyIGhhc1JlcXVpcmVkSXNPYmplY3RMaWtlO1xuXG5mdW5jdGlvbiByZXF1aXJlSXNPYmplY3RMaWtlICgpIHtcblx0aWYgKGhhc1JlcXVpcmVkSXNPYmplY3RMaWtlKSByZXR1cm4gaXNPYmplY3RMaWtlXzE7XG5cdGhhc1JlcXVpcmVkSXNPYmplY3RMaWtlID0gMTtcblx0ZnVuY3Rpb24gaXNPYmplY3RMaWtlKHZhbHVlKSB7XG5cdCAgcmV0dXJuIHZhbHVlICE9IG51bGwgJiYgdHlwZW9mIHZhbHVlID09ICdvYmplY3QnO1xuXHR9XG5cblx0aXNPYmplY3RMaWtlXzEgPSBpc09iamVjdExpa2U7XG5cdHJldHVybiBpc09iamVjdExpa2VfMTtcbn1cblxudmFyIGlzU3ltYm9sXzE7XG52YXIgaGFzUmVxdWlyZWRJc1N5bWJvbDtcblxuZnVuY3Rpb24gcmVxdWlyZUlzU3ltYm9sICgpIHtcblx0aWYgKGhhc1JlcXVpcmVkSXNTeW1ib2wpIHJldHVybiBpc1N5bWJvbF8xO1xuXHRoYXNSZXF1aXJlZElzU3ltYm9sID0gMTtcblx0dmFyIGJhc2VHZXRUYWcgPSByZXF1aXJlX2Jhc2VHZXRUYWcoKSxcblx0ICAgIGlzT2JqZWN0TGlrZSA9IHJlcXVpcmVJc09iamVjdExpa2UoKTtcblxuXHQvKiogYE9iamVjdCN0b1N0cmluZ2AgcmVzdWx0IHJlZmVyZW5jZXMuICovXG5cdHZhciBzeW1ib2xUYWcgPSAnW29iamVjdCBTeW1ib2xdJztcblxuXHQvKipcblx0ICogQ2hlY2tzIGlmIGB2YWx1ZWAgaXMgY2xhc3NpZmllZCBhcyBhIGBTeW1ib2xgIHByaW1pdGl2ZSBvciBvYmplY3QuXG5cdCAqXG5cdCAqIEBzdGF0aWNcblx0ICogQG1lbWJlck9mIF9cblx0ICogQHNpbmNlIDQuMC4wXG5cdCAqIEBjYXRlZ29yeSBMYW5nXG5cdCAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuXHQgKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBhIHN5bWJvbCwgZWxzZSBgZmFsc2VgLlxuXHQgKiBAZXhhbXBsZVxuXHQgKlxuXHQgKiBfLmlzU3ltYm9sKFN5bWJvbC5pdGVyYXRvcik7XG5cdCAqIC8vID0+IHRydWVcblx0ICpcblx0ICogXy5pc1N5bWJvbCgnYWJjJyk7XG5cdCAqIC8vID0+IGZhbHNlXG5cdCAqL1xuXHRmdW5jdGlvbiBpc1N5bWJvbCh2YWx1ZSkge1xuXHQgIHJldHVybiB0eXBlb2YgdmFsdWUgPT0gJ3N5bWJvbCcgfHxcblx0ICAgIChpc09iamVjdExpa2UodmFsdWUpICYmIGJhc2VHZXRUYWcodmFsdWUpID09IHN5bWJvbFRhZyk7XG5cdH1cblxuXHRpc1N5bWJvbF8xID0gaXNTeW1ib2w7XG5cdHJldHVybiBpc1N5bWJvbF8xO1xufVxuXG52YXIgdG9OdW1iZXJfMTtcbnZhciBoYXNSZXF1aXJlZFRvTnVtYmVyO1xuXG5mdW5jdGlvbiByZXF1aXJlVG9OdW1iZXIgKCkge1xuXHRpZiAoaGFzUmVxdWlyZWRUb051bWJlcikgcmV0dXJuIHRvTnVtYmVyXzE7XG5cdGhhc1JlcXVpcmVkVG9OdW1iZXIgPSAxO1xuXHR2YXIgYmFzZVRyaW0gPSByZXF1aXJlX2Jhc2VUcmltKCksXG5cdCAgICBpc09iamVjdCA9IHJlcXVpcmVJc09iamVjdCgpLFxuXHQgICAgaXNTeW1ib2wgPSByZXF1aXJlSXNTeW1ib2woKTtcblxuXHQvKiogVXNlZCBhcyByZWZlcmVuY2VzIGZvciB2YXJpb3VzIGBOdW1iZXJgIGNvbnN0YW50cy4gKi9cblx0dmFyIE5BTiA9IDAgLyAwO1xuXG5cdC8qKiBVc2VkIHRvIGRldGVjdCBiYWQgc2lnbmVkIGhleGFkZWNpbWFsIHN0cmluZyB2YWx1ZXMuICovXG5cdHZhciByZUlzQmFkSGV4ID0gL15bLStdMHhbMC05YS1mXSskL2k7XG5cblx0LyoqIFVzZWQgdG8gZGV0ZWN0IGJpbmFyeSBzdHJpbmcgdmFsdWVzLiAqL1xuXHR2YXIgcmVJc0JpbmFyeSA9IC9eMGJbMDFdKyQvaTtcblxuXHQvKiogVXNlZCB0byBkZXRlY3Qgb2N0YWwgc3RyaW5nIHZhbHVlcy4gKi9cblx0dmFyIHJlSXNPY3RhbCA9IC9eMG9bMC03XSskL2k7XG5cblx0LyoqIEJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzIHdpdGhvdXQgYSBkZXBlbmRlbmN5IG9uIGByb290YC4gKi9cblx0dmFyIGZyZWVQYXJzZUludCA9IHBhcnNlSW50O1xuXG5cdC8qKlxuXHQgKiBDb252ZXJ0cyBgdmFsdWVgIHRvIGEgbnVtYmVyLlxuXHQgKlxuXHQgKiBAc3RhdGljXG5cdCAqIEBtZW1iZXJPZiBfXG5cdCAqIEBzaW5jZSA0LjAuMFxuXHQgKiBAY2F0ZWdvcnkgTGFuZ1xuXHQgKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBwcm9jZXNzLlxuXHQgKiBAcmV0dXJucyB7bnVtYmVyfSBSZXR1cm5zIHRoZSBudW1iZXIuXG5cdCAqIEBleGFtcGxlXG5cdCAqXG5cdCAqIF8udG9OdW1iZXIoMy4yKTtcblx0ICogLy8gPT4gMy4yXG5cdCAqXG5cdCAqIF8udG9OdW1iZXIoTnVtYmVyLk1JTl9WQUxVRSk7XG5cdCAqIC8vID0+IDVlLTMyNFxuXHQgKlxuXHQgKiBfLnRvTnVtYmVyKEluZmluaXR5KTtcblx0ICogLy8gPT4gSW5maW5pdHlcblx0ICpcblx0ICogXy50b051bWJlcignMy4yJyk7XG5cdCAqIC8vID0+IDMuMlxuXHQgKi9cblx0ZnVuY3Rpb24gdG9OdW1iZXIodmFsdWUpIHtcblx0ICBpZiAodHlwZW9mIHZhbHVlID09ICdudW1iZXInKSB7XG5cdCAgICByZXR1cm4gdmFsdWU7XG5cdCAgfVxuXHQgIGlmIChpc1N5bWJvbCh2YWx1ZSkpIHtcblx0ICAgIHJldHVybiBOQU47XG5cdCAgfVxuXHQgIGlmIChpc09iamVjdCh2YWx1ZSkpIHtcblx0ICAgIHZhciBvdGhlciA9IHR5cGVvZiB2YWx1ZS52YWx1ZU9mID09ICdmdW5jdGlvbicgPyB2YWx1ZS52YWx1ZU9mKCkgOiB2YWx1ZTtcblx0ICAgIHZhbHVlID0gaXNPYmplY3Qob3RoZXIpID8gKG90aGVyICsgJycpIDogb3RoZXI7XG5cdCAgfVxuXHQgIGlmICh0eXBlb2YgdmFsdWUgIT0gJ3N0cmluZycpIHtcblx0ICAgIHJldHVybiB2YWx1ZSA9PT0gMCA/IHZhbHVlIDogK3ZhbHVlO1xuXHQgIH1cblx0ICB2YWx1ZSA9IGJhc2VUcmltKHZhbHVlKTtcblx0ICB2YXIgaXNCaW5hcnkgPSByZUlzQmluYXJ5LnRlc3QodmFsdWUpO1xuXHQgIHJldHVybiAoaXNCaW5hcnkgfHwgcmVJc09jdGFsLnRlc3QodmFsdWUpKVxuXHQgICAgPyBmcmVlUGFyc2VJbnQodmFsdWUuc2xpY2UoMiksIGlzQmluYXJ5ID8gMiA6IDgpXG5cdCAgICA6IChyZUlzQmFkSGV4LnRlc3QodmFsdWUpID8gTkFOIDogK3ZhbHVlKTtcblx0fVxuXG5cdHRvTnVtYmVyXzEgPSB0b051bWJlcjtcblx0cmV0dXJuIHRvTnVtYmVyXzE7XG59XG5cbnZhciBkZWJvdW5jZV8xO1xudmFyIGhhc1JlcXVpcmVkRGVib3VuY2U7XG5cbmZ1bmN0aW9uIHJlcXVpcmVEZWJvdW5jZSAoKSB7XG5cdGlmIChoYXNSZXF1aXJlZERlYm91bmNlKSByZXR1cm4gZGVib3VuY2VfMTtcblx0aGFzUmVxdWlyZWREZWJvdW5jZSA9IDE7XG5cdHZhciBpc09iamVjdCA9IHJlcXVpcmVJc09iamVjdCgpLFxuXHQgICAgbm93ID0gcmVxdWlyZU5vdygpLFxuXHQgICAgdG9OdW1iZXIgPSByZXF1aXJlVG9OdW1iZXIoKTtcblxuXHQvKiogRXJyb3IgbWVzc2FnZSBjb25zdGFudHMuICovXG5cdHZhciBGVU5DX0VSUk9SX1RFWFQgPSAnRXhwZWN0ZWQgYSBmdW5jdGlvbic7XG5cblx0LyogQnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMgZm9yIHRob3NlIHdpdGggdGhlIHNhbWUgbmFtZSBhcyBvdGhlciBgbG9kYXNoYCBtZXRob2RzLiAqL1xuXHR2YXIgbmF0aXZlTWF4ID0gTWF0aC5tYXgsXG5cdCAgICBuYXRpdmVNaW4gPSBNYXRoLm1pbjtcblxuXHQvKipcblx0ICogQ3JlYXRlcyBhIGRlYm91bmNlZCBmdW5jdGlvbiB0aGF0IGRlbGF5cyBpbnZva2luZyBgZnVuY2AgdW50aWwgYWZ0ZXIgYHdhaXRgXG5cdCAqIG1pbGxpc2Vjb25kcyBoYXZlIGVsYXBzZWQgc2luY2UgdGhlIGxhc3QgdGltZSB0aGUgZGVib3VuY2VkIGZ1bmN0aW9uIHdhc1xuXHQgKiBpbnZva2VkLiBUaGUgZGVib3VuY2VkIGZ1bmN0aW9uIGNvbWVzIHdpdGggYSBgY2FuY2VsYCBtZXRob2QgdG8gY2FuY2VsXG5cdCAqIGRlbGF5ZWQgYGZ1bmNgIGludm9jYXRpb25zIGFuZCBhIGBmbHVzaGAgbWV0aG9kIHRvIGltbWVkaWF0ZWx5IGludm9rZSB0aGVtLlxuXHQgKiBQcm92aWRlIGBvcHRpb25zYCB0byBpbmRpY2F0ZSB3aGV0aGVyIGBmdW5jYCBzaG91bGQgYmUgaW52b2tlZCBvbiB0aGVcblx0ICogbGVhZGluZyBhbmQvb3IgdHJhaWxpbmcgZWRnZSBvZiB0aGUgYHdhaXRgIHRpbWVvdXQuIFRoZSBgZnVuY2AgaXMgaW52b2tlZFxuXHQgKiB3aXRoIHRoZSBsYXN0IGFyZ3VtZW50cyBwcm92aWRlZCB0byB0aGUgZGVib3VuY2VkIGZ1bmN0aW9uLiBTdWJzZXF1ZW50XG5cdCAqIGNhbGxzIHRvIHRoZSBkZWJvdW5jZWQgZnVuY3Rpb24gcmV0dXJuIHRoZSByZXN1bHQgb2YgdGhlIGxhc3QgYGZ1bmNgXG5cdCAqIGludm9jYXRpb24uXG5cdCAqXG5cdCAqICoqTm90ZToqKiBJZiBgbGVhZGluZ2AgYW5kIGB0cmFpbGluZ2Agb3B0aW9ucyBhcmUgYHRydWVgLCBgZnVuY2AgaXNcblx0ICogaW52b2tlZCBvbiB0aGUgdHJhaWxpbmcgZWRnZSBvZiB0aGUgdGltZW91dCBvbmx5IGlmIHRoZSBkZWJvdW5jZWQgZnVuY3Rpb25cblx0ICogaXMgaW52b2tlZCBtb3JlIHRoYW4gb25jZSBkdXJpbmcgdGhlIGB3YWl0YCB0aW1lb3V0LlxuXHQgKlxuXHQgKiBJZiBgd2FpdGAgaXMgYDBgIGFuZCBgbGVhZGluZ2AgaXMgYGZhbHNlYCwgYGZ1bmNgIGludm9jYXRpb24gaXMgZGVmZXJyZWRcblx0ICogdW50aWwgdG8gdGhlIG5leHQgdGljaywgc2ltaWxhciB0byBgc2V0VGltZW91dGAgd2l0aCBhIHRpbWVvdXQgb2YgYDBgLlxuXHQgKlxuXHQgKiBTZWUgW0RhdmlkIENvcmJhY2hvJ3MgYXJ0aWNsZV0oaHR0cHM6Ly9jc3MtdHJpY2tzLmNvbS9kZWJvdW5jaW5nLXRocm90dGxpbmctZXhwbGFpbmVkLWV4YW1wbGVzLylcblx0ICogZm9yIGRldGFpbHMgb3ZlciB0aGUgZGlmZmVyZW5jZXMgYmV0d2VlbiBgXy5kZWJvdW5jZWAgYW5kIGBfLnRocm90dGxlYC5cblx0ICpcblx0ICogQHN0YXRpY1xuXHQgKiBAbWVtYmVyT2YgX1xuXHQgKiBAc2luY2UgMC4xLjBcblx0ICogQGNhdGVnb3J5IEZ1bmN0aW9uXG5cdCAqIEBwYXJhbSB7RnVuY3Rpb259IGZ1bmMgVGhlIGZ1bmN0aW9uIHRvIGRlYm91bmNlLlxuXHQgKiBAcGFyYW0ge251bWJlcn0gW3dhaXQ9MF0gVGhlIG51bWJlciBvZiBtaWxsaXNlY29uZHMgdG8gZGVsYXkuXG5cdCAqIEBwYXJhbSB7T2JqZWN0fSBbb3B0aW9ucz17fV0gVGhlIG9wdGlvbnMgb2JqZWN0LlxuXHQgKiBAcGFyYW0ge2Jvb2xlYW59IFtvcHRpb25zLmxlYWRpbmc9ZmFsc2VdXG5cdCAqICBTcGVjaWZ5IGludm9raW5nIG9uIHRoZSBsZWFkaW5nIGVkZ2Ugb2YgdGhlIHRpbWVvdXQuXG5cdCAqIEBwYXJhbSB7bnVtYmVyfSBbb3B0aW9ucy5tYXhXYWl0XVxuXHQgKiAgVGhlIG1heGltdW0gdGltZSBgZnVuY2AgaXMgYWxsb3dlZCB0byBiZSBkZWxheWVkIGJlZm9yZSBpdCdzIGludm9rZWQuXG5cdCAqIEBwYXJhbSB7Ym9vbGVhbn0gW29wdGlvbnMudHJhaWxpbmc9dHJ1ZV1cblx0ICogIFNwZWNpZnkgaW52b2tpbmcgb24gdGhlIHRyYWlsaW5nIGVkZ2Ugb2YgdGhlIHRpbWVvdXQuXG5cdCAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyB0aGUgbmV3IGRlYm91bmNlZCBmdW5jdGlvbi5cblx0ICogQGV4YW1wbGVcblx0ICpcblx0ICogLy8gQXZvaWQgY29zdGx5IGNhbGN1bGF0aW9ucyB3aGlsZSB0aGUgd2luZG93IHNpemUgaXMgaW4gZmx1eC5cblx0ICogalF1ZXJ5KHdpbmRvdykub24oJ3Jlc2l6ZScsIF8uZGVib3VuY2UoY2FsY3VsYXRlTGF5b3V0LCAxNTApKTtcblx0ICpcblx0ICogLy8gSW52b2tlIGBzZW5kTWFpbGAgd2hlbiBjbGlja2VkLCBkZWJvdW5jaW5nIHN1YnNlcXVlbnQgY2FsbHMuXG5cdCAqIGpRdWVyeShlbGVtZW50KS5vbignY2xpY2snLCBfLmRlYm91bmNlKHNlbmRNYWlsLCAzMDAsIHtcblx0ICogICAnbGVhZGluZyc6IHRydWUsXG5cdCAqICAgJ3RyYWlsaW5nJzogZmFsc2Vcblx0ICogfSkpO1xuXHQgKlxuXHQgKiAvLyBFbnN1cmUgYGJhdGNoTG9nYCBpcyBpbnZva2VkIG9uY2UgYWZ0ZXIgMSBzZWNvbmQgb2YgZGVib3VuY2VkIGNhbGxzLlxuXHQgKiB2YXIgZGVib3VuY2VkID0gXy5kZWJvdW5jZShiYXRjaExvZywgMjUwLCB7ICdtYXhXYWl0JzogMTAwMCB9KTtcblx0ICogdmFyIHNvdXJjZSA9IG5ldyBFdmVudFNvdXJjZSgnL3N0cmVhbScpO1xuXHQgKiBqUXVlcnkoc291cmNlKS5vbignbWVzc2FnZScsIGRlYm91bmNlZCk7XG5cdCAqXG5cdCAqIC8vIENhbmNlbCB0aGUgdHJhaWxpbmcgZGVib3VuY2VkIGludm9jYXRpb24uXG5cdCAqIGpRdWVyeSh3aW5kb3cpLm9uKCdwb3BzdGF0ZScsIGRlYm91bmNlZC5jYW5jZWwpO1xuXHQgKi9cblx0ZnVuY3Rpb24gZGVib3VuY2UoZnVuYywgd2FpdCwgb3B0aW9ucykge1xuXHQgIHZhciBsYXN0QXJncyxcblx0ICAgICAgbGFzdFRoaXMsXG5cdCAgICAgIG1heFdhaXQsXG5cdCAgICAgIHJlc3VsdCxcblx0ICAgICAgdGltZXJJZCxcblx0ICAgICAgbGFzdENhbGxUaW1lLFxuXHQgICAgICBsYXN0SW52b2tlVGltZSA9IDAsXG5cdCAgICAgIGxlYWRpbmcgPSBmYWxzZSxcblx0ICAgICAgbWF4aW5nID0gZmFsc2UsXG5cdCAgICAgIHRyYWlsaW5nID0gdHJ1ZTtcblxuXHQgIGlmICh0eXBlb2YgZnVuYyAhPSAnZnVuY3Rpb24nKSB7XG5cdCAgICB0aHJvdyBuZXcgVHlwZUVycm9yKEZVTkNfRVJST1JfVEVYVCk7XG5cdCAgfVxuXHQgIHdhaXQgPSB0b051bWJlcih3YWl0KSB8fCAwO1xuXHQgIGlmIChpc09iamVjdChvcHRpb25zKSkge1xuXHQgICAgbGVhZGluZyA9ICEhb3B0aW9ucy5sZWFkaW5nO1xuXHQgICAgbWF4aW5nID0gJ21heFdhaXQnIGluIG9wdGlvbnM7XG5cdCAgICBtYXhXYWl0ID0gbWF4aW5nID8gbmF0aXZlTWF4KHRvTnVtYmVyKG9wdGlvbnMubWF4V2FpdCkgfHwgMCwgd2FpdCkgOiBtYXhXYWl0O1xuXHQgICAgdHJhaWxpbmcgPSAndHJhaWxpbmcnIGluIG9wdGlvbnMgPyAhIW9wdGlvbnMudHJhaWxpbmcgOiB0cmFpbGluZztcblx0ICB9XG5cblx0ICBmdW5jdGlvbiBpbnZva2VGdW5jKHRpbWUpIHtcblx0ICAgIHZhciBhcmdzID0gbGFzdEFyZ3MsXG5cdCAgICAgICAgdGhpc0FyZyA9IGxhc3RUaGlzO1xuXG5cdCAgICBsYXN0QXJncyA9IGxhc3RUaGlzID0gdW5kZWZpbmVkO1xuXHQgICAgbGFzdEludm9rZVRpbWUgPSB0aW1lO1xuXHQgICAgcmVzdWx0ID0gZnVuYy5hcHBseSh0aGlzQXJnLCBhcmdzKTtcblx0ICAgIHJldHVybiByZXN1bHQ7XG5cdCAgfVxuXG5cdCAgZnVuY3Rpb24gbGVhZGluZ0VkZ2UodGltZSkge1xuXHQgICAgLy8gUmVzZXQgYW55IGBtYXhXYWl0YCB0aW1lci5cblx0ICAgIGxhc3RJbnZva2VUaW1lID0gdGltZTtcblx0ICAgIC8vIFN0YXJ0IHRoZSB0aW1lciBmb3IgdGhlIHRyYWlsaW5nIGVkZ2UuXG5cdCAgICB0aW1lcklkID0gc2V0VGltZW91dCh0aW1lckV4cGlyZWQsIHdhaXQpO1xuXHQgICAgLy8gSW52b2tlIHRoZSBsZWFkaW5nIGVkZ2UuXG5cdCAgICByZXR1cm4gbGVhZGluZyA/IGludm9rZUZ1bmModGltZSkgOiByZXN1bHQ7XG5cdCAgfVxuXG5cdCAgZnVuY3Rpb24gcmVtYWluaW5nV2FpdCh0aW1lKSB7XG5cdCAgICB2YXIgdGltZVNpbmNlTGFzdENhbGwgPSB0aW1lIC0gbGFzdENhbGxUaW1lLFxuXHQgICAgICAgIHRpbWVTaW5jZUxhc3RJbnZva2UgPSB0aW1lIC0gbGFzdEludm9rZVRpbWUsXG5cdCAgICAgICAgdGltZVdhaXRpbmcgPSB3YWl0IC0gdGltZVNpbmNlTGFzdENhbGw7XG5cblx0ICAgIHJldHVybiBtYXhpbmdcblx0ICAgICAgPyBuYXRpdmVNaW4odGltZVdhaXRpbmcsIG1heFdhaXQgLSB0aW1lU2luY2VMYXN0SW52b2tlKVxuXHQgICAgICA6IHRpbWVXYWl0aW5nO1xuXHQgIH1cblxuXHQgIGZ1bmN0aW9uIHNob3VsZEludm9rZSh0aW1lKSB7XG5cdCAgICB2YXIgdGltZVNpbmNlTGFzdENhbGwgPSB0aW1lIC0gbGFzdENhbGxUaW1lLFxuXHQgICAgICAgIHRpbWVTaW5jZUxhc3RJbnZva2UgPSB0aW1lIC0gbGFzdEludm9rZVRpbWU7XG5cblx0ICAgIC8vIEVpdGhlciB0aGlzIGlzIHRoZSBmaXJzdCBjYWxsLCBhY3Rpdml0eSBoYXMgc3RvcHBlZCBhbmQgd2UncmUgYXQgdGhlXG5cdCAgICAvLyB0cmFpbGluZyBlZGdlLCB0aGUgc3lzdGVtIHRpbWUgaGFzIGdvbmUgYmFja3dhcmRzIGFuZCB3ZSdyZSB0cmVhdGluZ1xuXHQgICAgLy8gaXQgYXMgdGhlIHRyYWlsaW5nIGVkZ2UsIG9yIHdlJ3ZlIGhpdCB0aGUgYG1heFdhaXRgIGxpbWl0LlxuXHQgICAgcmV0dXJuIChsYXN0Q2FsbFRpbWUgPT09IHVuZGVmaW5lZCB8fCAodGltZVNpbmNlTGFzdENhbGwgPj0gd2FpdCkgfHxcblx0ICAgICAgKHRpbWVTaW5jZUxhc3RDYWxsIDwgMCkgfHwgKG1heGluZyAmJiB0aW1lU2luY2VMYXN0SW52b2tlID49IG1heFdhaXQpKTtcblx0ICB9XG5cblx0ICBmdW5jdGlvbiB0aW1lckV4cGlyZWQoKSB7XG5cdCAgICB2YXIgdGltZSA9IG5vdygpO1xuXHQgICAgaWYgKHNob3VsZEludm9rZSh0aW1lKSkge1xuXHQgICAgICByZXR1cm4gdHJhaWxpbmdFZGdlKHRpbWUpO1xuXHQgICAgfVxuXHQgICAgLy8gUmVzdGFydCB0aGUgdGltZXIuXG5cdCAgICB0aW1lcklkID0gc2V0VGltZW91dCh0aW1lckV4cGlyZWQsIHJlbWFpbmluZ1dhaXQodGltZSkpO1xuXHQgIH1cblxuXHQgIGZ1bmN0aW9uIHRyYWlsaW5nRWRnZSh0aW1lKSB7XG5cdCAgICB0aW1lcklkID0gdW5kZWZpbmVkO1xuXG5cdCAgICAvLyBPbmx5IGludm9rZSBpZiB3ZSBoYXZlIGBsYXN0QXJnc2Agd2hpY2ggbWVhbnMgYGZ1bmNgIGhhcyBiZWVuXG5cdCAgICAvLyBkZWJvdW5jZWQgYXQgbGVhc3Qgb25jZS5cblx0ICAgIGlmICh0cmFpbGluZyAmJiBsYXN0QXJncykge1xuXHQgICAgICByZXR1cm4gaW52b2tlRnVuYyh0aW1lKTtcblx0ICAgIH1cblx0ICAgIGxhc3RBcmdzID0gbGFzdFRoaXMgPSB1bmRlZmluZWQ7XG5cdCAgICByZXR1cm4gcmVzdWx0O1xuXHQgIH1cblxuXHQgIGZ1bmN0aW9uIGNhbmNlbCgpIHtcblx0ICAgIGlmICh0aW1lcklkICE9PSB1bmRlZmluZWQpIHtcblx0ICAgICAgY2xlYXJUaW1lb3V0KHRpbWVySWQpO1xuXHQgICAgfVxuXHQgICAgbGFzdEludm9rZVRpbWUgPSAwO1xuXHQgICAgbGFzdEFyZ3MgPSBsYXN0Q2FsbFRpbWUgPSBsYXN0VGhpcyA9IHRpbWVySWQgPSB1bmRlZmluZWQ7XG5cdCAgfVxuXG5cdCAgZnVuY3Rpb24gZmx1c2goKSB7XG5cdCAgICByZXR1cm4gdGltZXJJZCA9PT0gdW5kZWZpbmVkID8gcmVzdWx0IDogdHJhaWxpbmdFZGdlKG5vdygpKTtcblx0ICB9XG5cblx0ICBmdW5jdGlvbiBkZWJvdW5jZWQoKSB7XG5cdCAgICB2YXIgdGltZSA9IG5vdygpLFxuXHQgICAgICAgIGlzSW52b2tpbmcgPSBzaG91bGRJbnZva2UodGltZSk7XG5cblx0ICAgIGxhc3RBcmdzID0gYXJndW1lbnRzO1xuXHQgICAgbGFzdFRoaXMgPSB0aGlzO1xuXHQgICAgbGFzdENhbGxUaW1lID0gdGltZTtcblxuXHQgICAgaWYgKGlzSW52b2tpbmcpIHtcblx0ICAgICAgaWYgKHRpbWVySWQgPT09IHVuZGVmaW5lZCkge1xuXHQgICAgICAgIHJldHVybiBsZWFkaW5nRWRnZShsYXN0Q2FsbFRpbWUpO1xuXHQgICAgICB9XG5cdCAgICAgIGlmIChtYXhpbmcpIHtcblx0ICAgICAgICAvLyBIYW5kbGUgaW52b2NhdGlvbnMgaW4gYSB0aWdodCBsb29wLlxuXHQgICAgICAgIGNsZWFyVGltZW91dCh0aW1lcklkKTtcblx0ICAgICAgICB0aW1lcklkID0gc2V0VGltZW91dCh0aW1lckV4cGlyZWQsIHdhaXQpO1xuXHQgICAgICAgIHJldHVybiBpbnZva2VGdW5jKGxhc3RDYWxsVGltZSk7XG5cdCAgICAgIH1cblx0ICAgIH1cblx0ICAgIGlmICh0aW1lcklkID09PSB1bmRlZmluZWQpIHtcblx0ICAgICAgdGltZXJJZCA9IHNldFRpbWVvdXQodGltZXJFeHBpcmVkLCB3YWl0KTtcblx0ICAgIH1cblx0ICAgIHJldHVybiByZXN1bHQ7XG5cdCAgfVxuXHQgIGRlYm91bmNlZC5jYW5jZWwgPSBjYW5jZWw7XG5cdCAgZGVib3VuY2VkLmZsdXNoID0gZmx1c2g7XG5cdCAgcmV0dXJuIGRlYm91bmNlZDtcblx0fVxuXG5cdGRlYm91bmNlXzEgPSBkZWJvdW5jZTtcblx0cmV0dXJuIGRlYm91bmNlXzE7XG59XG5cbnZhciBkZWJvdW5jZUV4cG9ydHMgPSByZXF1aXJlRGVib3VuY2UoKTtcbnZhciBkZWJvdW5jZSA9IC8qQF9fUFVSRV9fKi9nZXREZWZhdWx0RXhwb3J0RnJvbUNqcyhkZWJvdW5jZUV4cG9ydHMpO1xuXG52YXIgcGVyZm9ybWFuY2UkMSA9IF93aW5kb3cgPyBfd2luZG93LnBlcmZvcm1hbmNlIDogbnVsbDtcbnZhciBwbm93ID0gcGVyZm9ybWFuY2UkMSAmJiBwZXJmb3JtYW5jZSQxLm5vdyA/IGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuIHBlcmZvcm1hbmNlJDEubm93KCk7XG59IDogZnVuY3Rpb24gKCkge1xuICByZXR1cm4gRGF0ZS5ub3coKTtcbn07XG52YXIgcmFmID0gZnVuY3Rpb24gKCkge1xuICBpZiAoX3dpbmRvdykge1xuICAgIGlmIChfd2luZG93LnJlcXVlc3RBbmltYXRpb25GcmFtZSkge1xuICAgICAgcmV0dXJuIGZ1bmN0aW9uIChmbikge1xuICAgICAgICBfd2luZG93LnJlcXVlc3RBbmltYXRpb25GcmFtZShmbik7XG4gICAgICB9O1xuICAgIH0gZWxzZSBpZiAoX3dpbmRvdy5tb3pSZXF1ZXN0QW5pbWF0aW9uRnJhbWUpIHtcbiAgICAgIHJldHVybiBmdW5jdGlvbiAoZm4pIHtcbiAgICAgICAgX3dpbmRvdy5tb3pSZXF1ZXN0QW5pbWF0aW9uRnJhbWUoZm4pO1xuICAgICAgfTtcbiAgICB9IGVsc2UgaWYgKF93aW5kb3cud2Via2l0UmVxdWVzdEFuaW1hdGlvbkZyYW1lKSB7XG4gICAgICByZXR1cm4gZnVuY3Rpb24gKGZuKSB7XG4gICAgICAgIF93aW5kb3cud2Via2l0UmVxdWVzdEFuaW1hdGlvbkZyYW1lKGZuKTtcbiAgICAgIH07XG4gICAgfSBlbHNlIGlmIChfd2luZG93Lm1zUmVxdWVzdEFuaW1hdGlvbkZyYW1lKSB7XG4gICAgICByZXR1cm4gZnVuY3Rpb24gKGZuKSB7XG4gICAgICAgIF93aW5kb3cubXNSZXF1ZXN0QW5pbWF0aW9uRnJhbWUoZm4pO1xuICAgICAgfTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIGZ1bmN0aW9uIChmbikge1xuICAgIGlmIChmbikge1xuICAgICAgc2V0VGltZW91dChmdW5jdGlvbiAoKSB7XG4gICAgICAgIGZuKHBub3coKSk7XG4gICAgICB9LCAxMDAwIC8gNjApO1xuICAgIH1cbiAgfTtcbn0oKTtcbnZhciByZXF1ZXN0QW5pbWF0aW9uRnJhbWUgPSBmdW5jdGlvbiByZXF1ZXN0QW5pbWF0aW9uRnJhbWUoZm4pIHtcbiAgcmV0dXJuIHJhZihmbik7XG59O1xudmFyIHBlcmZvcm1hbmNlTm93ID0gcG5vdztcblxudmFyIERFRkFVTFRfSEFTSF9TRUVEID0gOTI2MTtcbnZhciBLID0gNjU1OTk7IC8vIDM3IGFsc28gd29ya3MgcHJldHR5IHdlbGxcbnZhciBERUZBVUxUX0hBU0hfU0VFRF9BTFQgPSA1MzgxO1xudmFyIGhhc2hJdGVyYWJsZUludHMgPSBmdW5jdGlvbiBoYXNoSXRlcmFibGVJbnRzKGl0ZXJhdG9yKSB7XG4gIHZhciBzZWVkID0gYXJndW1lbnRzLmxlbmd0aCA+IDEgJiYgYXJndW1lbnRzWzFdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMV0gOiBERUZBVUxUX0hBU0hfU0VFRDtcbiAgLy8gc2RibS9zdHJpbmctaGFzaFxuICB2YXIgaGFzaCA9IHNlZWQ7XG4gIHZhciBlbnRyeTtcbiAgZm9yICg7Oykge1xuICAgIGVudHJ5ID0gaXRlcmF0b3IubmV4dCgpO1xuICAgIGlmIChlbnRyeS5kb25lKSB7XG4gICAgICBicmVhaztcbiAgICB9XG4gICAgaGFzaCA9IGhhc2ggKiBLICsgZW50cnkudmFsdWUgfCAwO1xuICB9XG4gIHJldHVybiBoYXNoO1xufTtcbnZhciBoYXNoSW50ID0gZnVuY3Rpb24gaGFzaEludChudW0pIHtcbiAgdmFyIHNlZWQgPSBhcmd1bWVudHMubGVuZ3RoID4gMSAmJiBhcmd1bWVudHNbMV0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1sxXSA6IERFRkFVTFRfSEFTSF9TRUVEO1xuICAvLyBzZGJtL3N0cmluZy1oYXNoXG4gIHJldHVybiBzZWVkICogSyArIG51bSB8IDA7XG59O1xudmFyIGhhc2hJbnRBbHQgPSBmdW5jdGlvbiBoYXNoSW50QWx0KG51bSkge1xuICB2YXIgc2VlZCA9IGFyZ3VtZW50cy5sZW5ndGggPiAxICYmIGFyZ3VtZW50c1sxXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzFdIDogREVGQVVMVF9IQVNIX1NFRURfQUxUO1xuICAvLyBkamIyL3N0cmluZy1oYXNoXG4gIHJldHVybiAoc2VlZCA8PCA1KSArIHNlZWQgKyBudW0gfCAwO1xufTtcbnZhciBjb21iaW5lSGFzaGVzID0gZnVuY3Rpb24gY29tYmluZUhhc2hlcyhoYXNoMSwgaGFzaDIpIHtcbiAgcmV0dXJuIGhhc2gxICogMHgyMDAwMDAgKyBoYXNoMjtcbn07XG52YXIgY29tYmluZUhhc2hlc0FycmF5ID0gZnVuY3Rpb24gY29tYmluZUhhc2hlc0FycmF5KGhhc2hlcykge1xuICByZXR1cm4gaGFzaGVzWzBdICogMHgyMDAwMDAgKyBoYXNoZXNbMV07XG59O1xudmFyIGhhc2hBcnJheXMgPSBmdW5jdGlvbiBoYXNoQXJyYXlzKGhhc2hlczEsIGhhc2hlczIpIHtcbiAgcmV0dXJuIFtoYXNoSW50KGhhc2hlczFbMF0sIGhhc2hlczJbMF0pLCBoYXNoSW50QWx0KGhhc2hlczFbMV0sIGhhc2hlczJbMV0pXTtcbn07XG52YXIgaGFzaEludHNBcnJheSA9IGZ1bmN0aW9uIGhhc2hJbnRzQXJyYXkoaW50cywgc2VlZCkge1xuICB2YXIgZW50cnkgPSB7XG4gICAgdmFsdWU6IDAsXG4gICAgZG9uZTogZmFsc2VcbiAgfTtcbiAgdmFyIGkgPSAwO1xuICB2YXIgbGVuZ3RoID0gaW50cy5sZW5ndGg7XG4gIHZhciBpdGVyYXRvciA9IHtcbiAgICBuZXh0OiBmdW5jdGlvbiBuZXh0KCkge1xuICAgICAgaWYgKGkgPCBsZW5ndGgpIHtcbiAgICAgICAgZW50cnkudmFsdWUgPSBpbnRzW2krK107XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBlbnRyeS5kb25lID0gdHJ1ZTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBlbnRyeTtcbiAgICB9XG4gIH07XG4gIHJldHVybiBoYXNoSXRlcmFibGVJbnRzKGl0ZXJhdG9yLCBzZWVkKTtcbn07XG52YXIgaGFzaFN0cmluZyA9IGZ1bmN0aW9uIGhhc2hTdHJpbmcoc3RyLCBzZWVkKSB7XG4gIHZhciBlbnRyeSA9IHtcbiAgICB2YWx1ZTogMCxcbiAgICBkb25lOiBmYWxzZVxuICB9O1xuICB2YXIgaSA9IDA7XG4gIHZhciBsZW5ndGggPSBzdHIubGVuZ3RoO1xuICB2YXIgaXRlcmF0b3IgPSB7XG4gICAgbmV4dDogZnVuY3Rpb24gbmV4dCgpIHtcbiAgICAgIGlmIChpIDwgbGVuZ3RoKSB7XG4gICAgICAgIGVudHJ5LnZhbHVlID0gc3RyLmNoYXJDb2RlQXQoaSsrKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGVudHJ5LmRvbmUgPSB0cnVlO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGVudHJ5O1xuICAgIH1cbiAgfTtcbiAgcmV0dXJuIGhhc2hJdGVyYWJsZUludHMoaXRlcmF0b3IsIHNlZWQpO1xufTtcbnZhciBoYXNoU3RyaW5ncyA9IGZ1bmN0aW9uIGhhc2hTdHJpbmdzKCkge1xuICByZXR1cm4gaGFzaFN0cmluZ3NBcnJheShhcmd1bWVudHMpO1xufTtcbnZhciBoYXNoU3RyaW5nc0FycmF5ID0gZnVuY3Rpb24gaGFzaFN0cmluZ3NBcnJheShzdHJzKSB7XG4gIHZhciBoYXNoO1xuICBmb3IgKHZhciBpID0gMDsgaSA8IHN0cnMubGVuZ3RoOyBpKyspIHtcbiAgICB2YXIgc3RyID0gc3Ryc1tpXTtcbiAgICBpZiAoaSA9PT0gMCkge1xuICAgICAgaGFzaCA9IGhhc2hTdHJpbmcoc3RyKTtcbiAgICB9IGVsc2Uge1xuICAgICAgaGFzaCA9IGhhc2hTdHJpbmcoc3RyLCBoYXNoKTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIGhhc2g7XG59O1xuXG52YXIgd2FybmluZ3NFbmFibGVkID0gdHJ1ZTtcbnZhciB3YXJuU3VwcG9ydGVkID0gY29uc29sZS53YXJuICE9IG51bGw7XG52YXIgdHJhY2VTdXBwb3J0ZWQgPSBjb25zb2xlLnRyYWNlICE9IG51bGw7XG52YXIgTUFYX0lOVCQxID0gTnVtYmVyLk1BWF9TQUZFX0lOVEVHRVIgfHwgOTAwNzE5OTI1NDc0MDk5MTtcbnZhciB0cnVlaWZ5ID0gZnVuY3Rpb24gdHJ1ZWlmeSgpIHtcbiAgcmV0dXJuIHRydWU7XG59O1xudmFyIGZhbHNpZnkgPSBmdW5jdGlvbiBmYWxzaWZ5KCkge1xuICByZXR1cm4gZmFsc2U7XG59O1xudmFyIHplcm9pZnkgPSBmdW5jdGlvbiB6ZXJvaWZ5KCkge1xuICByZXR1cm4gMDtcbn07XG52YXIgbm9vcCQxID0gZnVuY3Rpb24gbm9vcCgpIHt9O1xudmFyIGVycm9yID0gZnVuY3Rpb24gZXJyb3IobXNnKSB7XG4gIHRocm93IG5ldyBFcnJvcihtc2cpO1xufTtcbnZhciB3YXJuaW5ncyA9IGZ1bmN0aW9uIHdhcm5pbmdzKGVuYWJsZWQpIHtcbiAgaWYgKGVuYWJsZWQgIT09IHVuZGVmaW5lZCkge1xuICAgIHdhcm5pbmdzRW5hYmxlZCA9ICEhZW5hYmxlZDtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gd2FybmluZ3NFbmFibGVkO1xuICB9XG59O1xudmFyIHdhcm4gPSBmdW5jdGlvbiB3YXJuKG1zZykge1xuICBpZiAoIXdhcm5pbmdzKCkpIHtcbiAgICByZXR1cm47XG4gIH1cbiAgaWYgKHdhcm5TdXBwb3J0ZWQpIHtcbiAgICBjb25zb2xlLndhcm4obXNnKTtcbiAgfSBlbHNlIHtcbiAgICBjb25zb2xlLmxvZyhtc2cpO1xuICAgIGlmICh0cmFjZVN1cHBvcnRlZCkge1xuICAgICAgY29uc29sZS50cmFjZSgpO1xuICAgIH1cbiAgfVxufTtcbnZhciBjbG9uZSA9IGZ1bmN0aW9uIGNsb25lKG9iaikge1xuICByZXR1cm4gZXh0ZW5kKHt9LCBvYmopO1xufTtcblxuLy8gZ2V0cyBhIHNoYWxsb3cgY29weSBvZiB0aGUgYXJndW1lbnRcbnZhciBjb3B5ID0gZnVuY3Rpb24gY29weShvYmopIHtcbiAgaWYgKG9iaiA9PSBudWxsKSB7XG4gICAgcmV0dXJuIG9iajtcbiAgfVxuICBpZiAoYXJyYXkob2JqKSkge1xuICAgIHJldHVybiBvYmouc2xpY2UoKTtcbiAgfSBlbHNlIGlmIChwbGFpbk9iamVjdChvYmopKSB7XG4gICAgcmV0dXJuIGNsb25lKG9iaik7XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIG9iajtcbiAgfVxufTtcbnZhciBjb3B5QXJyYXkgPSBmdW5jdGlvbiBjb3B5QXJyYXkoYXJyKSB7XG4gIHJldHVybiBhcnIuc2xpY2UoKTtcbn07XG52YXIgdXVpZCA9IGZ1bmN0aW9uIHV1aWQoYSwgYiAvKiBwbGFjZWhvbGRlcnMgKi8pIHtcbiAgZm9yIChcbiAgLy8gbG9vcCA6KVxuICBiID0gYSA9ICcnO1xuICAvLyBiIC0gcmVzdWx0ICwgYSAtIG51bWVyaWMgbGV0aWFibGVcbiAgYSsrIDwgMzY7XG4gIC8vXG4gIGIgKz0gYSAqIDUxICYgNTIgLy8gaWYgXCJhXCIgaXMgbm90IDkgb3IgMTQgb3IgMTkgb3IgMjRcbiAgP1xuICAvLyAgcmV0dXJuIGEgcmFuZG9tIG51bWJlciBvciA0XG4gIChhIF4gMTUgLy8gaWYgXCJhXCIgaXMgbm90IDE1XG4gID9cbiAgLy8gZ2VuZXJhdGUgYSByYW5kb20gbnVtYmVyIGZyb20gMCB0byAxNVxuICA4IF4gTWF0aC5yYW5kb20oKSAqIChhIF4gMjAgPyAxNiA6IDQpIC8vIHVubGVzcyBcImFcIiBpcyAyMCwgaW4gd2hpY2ggY2FzZSBhIHJhbmRvbSBudW1iZXIgZnJvbSA4IHRvIDExXG4gIDogNCAvLyAgb3RoZXJ3aXNlIDRcbiAgKS50b1N0cmluZygxNikgOiAnLScgLy8gIGluIG90aGVyIGNhc2VzIChpZiBcImFcIiBpcyA5LDE0LDE5LDI0KSBpbnNlcnQgXCItXCJcbiAgKTtcbiAgcmV0dXJuIGI7XG59O1xudmFyIF9zdGF0aWNFbXB0eU9iamVjdCA9IHt9O1xudmFyIHN0YXRpY0VtcHR5T2JqZWN0ID0gZnVuY3Rpb24gc3RhdGljRW1wdHlPYmplY3QoKSB7XG4gIHJldHVybiBfc3RhdGljRW1wdHlPYmplY3Q7XG59O1xudmFyIGRlZmF1bHRzJGcgPSBmdW5jdGlvbiBkZWZhdWx0cyhfZGVmYXVsdHMpIHtcbiAgdmFyIGtleXMgPSBPYmplY3Qua2V5cyhfZGVmYXVsdHMpO1xuICByZXR1cm4gZnVuY3Rpb24gKG9wdHMpIHtcbiAgICB2YXIgZmlsbGVkT3B0cyA9IHt9O1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwga2V5cy5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIGtleSA9IGtleXNbaV07XG4gICAgICB2YXIgb3B0VmFsID0gb3B0cyA9PSBudWxsID8gdW5kZWZpbmVkIDogb3B0c1trZXldO1xuICAgICAgZmlsbGVkT3B0c1trZXldID0gb3B0VmFsID09PSB1bmRlZmluZWQgPyBfZGVmYXVsdHNba2V5XSA6IG9wdFZhbDtcbiAgICB9XG4gICAgcmV0dXJuIGZpbGxlZE9wdHM7XG4gIH07XG59O1xudmFyIHJlbW92ZUZyb21BcnJheSA9IGZ1bmN0aW9uIHJlbW92ZUZyb21BcnJheShhcnIsIGVsZSwgb25lQ29weSkge1xuICBmb3IgKHZhciBpID0gYXJyLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSB7XG4gICAgaWYgKGFycltpXSA9PT0gZWxlKSB7XG4gICAgICBhcnIuc3BsaWNlKGksIDEpO1xuICAgIH1cbiAgfVxufTtcbnZhciBjbGVhckFycmF5ID0gZnVuY3Rpb24gY2xlYXJBcnJheShhcnIpIHtcbiAgYXJyLnNwbGljZSgwLCBhcnIubGVuZ3RoKTtcbn07XG52YXIgcHVzaCA9IGZ1bmN0aW9uIHB1c2goYXJyLCBvdGhlckFycikge1xuICBmb3IgKHZhciBpID0gMDsgaSA8IG90aGVyQXJyLmxlbmd0aDsgaSsrKSB7XG4gICAgdmFyIGVsID0gb3RoZXJBcnJbaV07XG4gICAgYXJyLnB1c2goZWwpO1xuICB9XG59O1xudmFyIGdldFByZWZpeGVkUHJvcGVydHkgPSBmdW5jdGlvbiBnZXRQcmVmaXhlZFByb3BlcnR5KG9iaiwgcHJvcE5hbWUsIHByZWZpeCkge1xuICBpZiAocHJlZml4KSB7XG4gICAgcHJvcE5hbWUgPSBwcmVwZW5kQ2FtZWwocHJlZml4LCBwcm9wTmFtZSk7IC8vIGUuZy4gKGxhYmVsV2lkdGgsIHNvdXJjZSkgPT4gc291cmNlTGFiZWxXaWR0aFxuICB9XG4gIHJldHVybiBvYmpbcHJvcE5hbWVdO1xufTtcbnZhciBzZXRQcmVmaXhlZFByb3BlcnR5ID0gZnVuY3Rpb24gc2V0UHJlZml4ZWRQcm9wZXJ0eShvYmosIHByb3BOYW1lLCBwcmVmaXgsIHZhbHVlKSB7XG4gIGlmIChwcmVmaXgpIHtcbiAgICBwcm9wTmFtZSA9IHByZXBlbmRDYW1lbChwcmVmaXgsIHByb3BOYW1lKTsgLy8gZS5nLiAobGFiZWxXaWR0aCwgc291cmNlKSA9PiBzb3VyY2VMYWJlbFdpZHRoXG4gIH1cbiAgb2JqW3Byb3BOYW1lXSA9IHZhbHVlO1xufTtcblxuLyogZ2xvYmFsIE1hcCAqL1xudmFyIE9iamVjdE1hcCA9IC8qI19fUFVSRV9fKi9mdW5jdGlvbiAoKSB7XG4gIGZ1bmN0aW9uIE9iamVjdE1hcCgpIHtcbiAgICBfY2xhc3NDYWxsQ2hlY2sodGhpcywgT2JqZWN0TWFwKTtcbiAgICB0aGlzLl9vYmogPSB7fTtcbiAgfVxuICByZXR1cm4gX2NyZWF0ZUNsYXNzKE9iamVjdE1hcCwgW3tcbiAgICBrZXk6IFwic2V0XCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIHNldChrZXksIHZhbCkge1xuICAgICAgdGhpcy5fb2JqW2tleV0gPSB2YWw7XG4gICAgICByZXR1cm4gdGhpcztcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwiZGVsZXRlXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIF9kZWxldGUoa2V5KSB7XG4gICAgICB0aGlzLl9vYmpba2V5XSA9IHVuZGVmaW5lZDtcbiAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJjbGVhclwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBjbGVhcigpIHtcbiAgICAgIHRoaXMuX29iaiA9IHt9O1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJoYXNcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gaGFzKGtleSkge1xuICAgICAgcmV0dXJuIHRoaXMuX29ialtrZXldICE9PSB1bmRlZmluZWQ7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcImdldFwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBnZXQoa2V5KSB7XG4gICAgICByZXR1cm4gdGhpcy5fb2JqW2tleV07XG4gICAgfVxuICB9XSk7XG59KCk7XG52YXIgTWFwJDEgPSB0eXBlb2YgTWFwICE9PSAndW5kZWZpbmVkJyA/IE1hcCA6IE9iamVjdE1hcDtcblxuLyogZ2xvYmFsIFNldCAqL1xuXG52YXIgdW5kZWYgPSBcInVuZGVmaW5lZFwiIDtcbnZhciBPYmplY3RTZXQgPSAvKiNfX1BVUkVfXyovZnVuY3Rpb24gKCkge1xuICBmdW5jdGlvbiBPYmplY3RTZXQoYXJyYXlPck9iamVjdFNldCkge1xuICAgIF9jbGFzc0NhbGxDaGVjayh0aGlzLCBPYmplY3RTZXQpO1xuICAgIHRoaXMuX29iaiA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG4gICAgdGhpcy5zaXplID0gMDtcbiAgICBpZiAoYXJyYXlPck9iamVjdFNldCAhPSBudWxsKSB7XG4gICAgICB2YXIgYXJyO1xuICAgICAgaWYgKGFycmF5T3JPYmplY3RTZXQuaW5zdGFuY2VTdHJpbmcgIT0gbnVsbCAmJiBhcnJheU9yT2JqZWN0U2V0Lmluc3RhbmNlU3RyaW5nKCkgPT09IHRoaXMuaW5zdGFuY2VTdHJpbmcoKSkge1xuICAgICAgICBhcnIgPSBhcnJheU9yT2JqZWN0U2V0LnRvQXJyYXkoKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGFyciA9IGFycmF5T3JPYmplY3RTZXQ7XG4gICAgICB9XG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGFyci5sZW5ndGg7IGkrKykge1xuICAgICAgICB0aGlzLmFkZChhcnJbaV0pO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICByZXR1cm4gX2NyZWF0ZUNsYXNzKE9iamVjdFNldCwgW3tcbiAgICBrZXk6IFwiaW5zdGFuY2VTdHJpbmdcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gaW5zdGFuY2VTdHJpbmcoKSB7XG4gICAgICByZXR1cm4gJ3NldCc7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcImFkZFwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBhZGQodmFsKSB7XG4gICAgICB2YXIgbyA9IHRoaXMuX29iajtcbiAgICAgIGlmIChvW3ZhbF0gIT09IDEpIHtcbiAgICAgICAgb1t2YWxdID0gMTtcbiAgICAgICAgdGhpcy5zaXplKys7XG4gICAgICB9XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcImRlbGV0ZVwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBfZGVsZXRlKHZhbCkge1xuICAgICAgdmFyIG8gPSB0aGlzLl9vYmo7XG4gICAgICBpZiAob1t2YWxdID09PSAxKSB7XG4gICAgICAgIG9bdmFsXSA9IDA7XG4gICAgICAgIHRoaXMuc2l6ZS0tO1xuICAgICAgfVxuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJjbGVhclwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBjbGVhcigpIHtcbiAgICAgIHRoaXMuX29iaiA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcImhhc1wiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBoYXModmFsKSB7XG4gICAgICByZXR1cm4gdGhpcy5fb2JqW3ZhbF0gPT09IDE7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcInRvQXJyYXlcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gdG9BcnJheSgpIHtcbiAgICAgIHZhciBfdGhpcyA9IHRoaXM7XG4gICAgICByZXR1cm4gT2JqZWN0LmtleXModGhpcy5fb2JqKS5maWx0ZXIoZnVuY3Rpb24gKGtleSkge1xuICAgICAgICByZXR1cm4gX3RoaXMuaGFzKGtleSk7XG4gICAgICB9KTtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwiZm9yRWFjaFwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBmb3JFYWNoKGNhbGxiYWNrLCB0aGlzQXJnKSB7XG4gICAgICByZXR1cm4gdGhpcy50b0FycmF5KCkuZm9yRWFjaChjYWxsYmFjaywgdGhpc0FyZyk7XG4gICAgfVxuICB9XSk7XG59KCk7XG52YXIgU2V0JDEgPSAodHlwZW9mIFNldCA9PT0gXCJ1bmRlZmluZWRcIiA/IFwidW5kZWZpbmVkXCIgOiBfdHlwZW9mKFNldCkpICE9PSB1bmRlZiA/IFNldCA6IE9iamVjdFNldDtcblxuLy8gcmVwcmVzZW50cyBhIG5vZGUgb3IgYW4gZWRnZVxudmFyIEVsZW1lbnQgPSBmdW5jdGlvbiBFbGVtZW50KGN5LCBwYXJhbXMpIHtcbiAgdmFyIHJlc3RvcmUgPSBhcmd1bWVudHMubGVuZ3RoID4gMiAmJiBhcmd1bWVudHNbMl0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1syXSA6IHRydWU7XG4gIGlmIChjeSA9PT0gdW5kZWZpbmVkIHx8IHBhcmFtcyA9PT0gdW5kZWZpbmVkIHx8ICFjb3JlKGN5KSkge1xuICAgIGVycm9yKCdBbiBlbGVtZW50IG11c3QgaGF2ZSBhIGNvcmUgcmVmZXJlbmNlIGFuZCBwYXJhbWV0ZXJzIHNldCcpO1xuICAgIHJldHVybjtcbiAgfVxuICB2YXIgZ3JvdXAgPSBwYXJhbXMuZ3JvdXA7XG5cbiAgLy8gdHJ5IHRvIGF1dG9tYXRpY2FsbHkgaW5mZXIgdGhlIGdyb3VwIGlmIHVuc3BlY2lmaWVkXG4gIGlmIChncm91cCA9PSBudWxsKSB7XG4gICAgaWYgKHBhcmFtcy5kYXRhICYmIHBhcmFtcy5kYXRhLnNvdXJjZSAhPSBudWxsICYmIHBhcmFtcy5kYXRhLnRhcmdldCAhPSBudWxsKSB7XG4gICAgICBncm91cCA9ICdlZGdlcyc7XG4gICAgfSBlbHNlIHtcbiAgICAgIGdyb3VwID0gJ25vZGVzJztcbiAgICB9XG4gIH1cblxuICAvLyB2YWxpZGF0ZSBncm91cFxuICBpZiAoZ3JvdXAgIT09ICdub2RlcycgJiYgZ3JvdXAgIT09ICdlZGdlcycpIHtcbiAgICBlcnJvcignQW4gZWxlbWVudCBtdXN0IGJlIG9mIHR5cGUgYG5vZGVzYCBvciBgZWRnZXNgOyB5b3Ugc3BlY2lmaWVkIGAnICsgZ3JvdXAgKyAnYCcpO1xuICAgIHJldHVybjtcbiAgfVxuXG4gIC8vIG1ha2UgdGhlIGVsZW1lbnQgYXJyYXktbGlrZSwganVzdCBsaWtlIGEgY29sbGVjdGlvblxuICB0aGlzLmxlbmd0aCA9IDE7XG4gIHRoaXNbMF0gPSB0aGlzO1xuXG4gIC8vIE5PVEU6IHdoZW4gc29tZXRoaW5nIGlzIGFkZGVkIGhlcmUsIGFkZCBhbHNvIHRvIGVsZS5qc29uKClcbiAgdmFyIF9wID0gdGhpcy5fcHJpdmF0ZSA9IHtcbiAgICBjeTogY3ksXG4gICAgc2luZ2xlOiB0cnVlLFxuICAgIC8vIGluZGljYXRlcyB0aGlzIGlzIGFuIGVsZW1lbnRcbiAgICBkYXRhOiBwYXJhbXMuZGF0YSB8fCB7fSxcbiAgICAvLyBkYXRhIG9iamVjdFxuICAgIHBvc2l0aW9uOiBwYXJhbXMucG9zaXRpb24gfHwge1xuICAgICAgeDogMCxcbiAgICAgIHk6IDBcbiAgICB9LFxuICAgIC8vICh4LCB5KSBwb3NpdGlvbiBwYWlyXG4gICAgYXV0b1dpZHRoOiB1bmRlZmluZWQsXG4gICAgLy8gd2lkdGggYW5kIGhlaWdodCBvZiBub2RlcyBjYWxjdWxhdGVkIGJ5IHRoZSByZW5kZXJlciB3aGVuIHNldCB0byBzcGVjaWFsICdhdXRvJyB2YWx1ZVxuICAgIGF1dG9IZWlnaHQ6IHVuZGVmaW5lZCxcbiAgICBhdXRvUGFkZGluZzogdW5kZWZpbmVkLFxuICAgIGNvbXBvdW5kQm91bmRzQ2xlYW46IGZhbHNlLFxuICAgIC8vIHdoZXRoZXIgdGhlIGNvbXBvdW5kIGRpbWVuc2lvbnMgbmVlZCB0byBiZSByZWNhbGN1bGF0ZWQgdGhlIG5leHQgdGltZSBkaW1lbnNpb25zIGFyZSByZWFkXG4gICAgbGlzdGVuZXJzOiBbXSxcbiAgICAvLyBhcnJheSBvZiBib3VuZCBsaXN0ZW5lcnNcbiAgICBncm91cDogZ3JvdXAsXG4gICAgLy8gc3RyaW5nOyAnbm9kZXMnIG9yICdlZGdlcydcbiAgICBzdHlsZToge30sXG4gICAgLy8gcHJvcGVydGllcyBhcyBzZXQgYnkgdGhlIHN0eWxlXG4gICAgcnN0eWxlOiB7fSxcbiAgICAvLyBwcm9wZXJ0aWVzIGZvciBzdHlsZSBzZW50IGZyb20gdGhlIHJlbmRlcmVyIHRvIHRoZSBjb3JlXG4gICAgc3R5bGVDeHRzOiBbXSxcbiAgICAvLyBhcHBsaWVkIHN0eWxlIGNvbnRleHRzIGZyb20gdGhlIHN0eWxlclxuICAgIHN0eWxlS2V5czoge30sXG4gICAgLy8gcGVyLWdyb3VwIGtleXMgb2Ygc3R5bGUgcHJvcGVydHkgdmFsdWVzXG4gICAgcmVtb3ZlZDogdHJ1ZSxcbiAgICAvLyB3aGV0aGVyIGl0J3MgaW5zaWRlIHRoZSB2aXM7IHRydWUgaWYgcmVtb3ZlZCAoc2V0IHRydWUgaGVyZSBzaW5jZSB3ZSBjYWxsIHJlc3RvcmUpXG4gICAgc2VsZWN0ZWQ6IHBhcmFtcy5zZWxlY3RlZCA/IHRydWUgOiBmYWxzZSxcbiAgICAvLyB3aGV0aGVyIGl0J3Mgc2VsZWN0ZWRcbiAgICBzZWxlY3RhYmxlOiBwYXJhbXMuc2VsZWN0YWJsZSA9PT0gdW5kZWZpbmVkID8gdHJ1ZSA6IHBhcmFtcy5zZWxlY3RhYmxlID8gdHJ1ZSA6IGZhbHNlLFxuICAgIC8vIHdoZXRoZXIgaXQncyBzZWxlY3RhYmxlXG4gICAgbG9ja2VkOiBwYXJhbXMubG9ja2VkID8gdHJ1ZSA6IGZhbHNlLFxuICAgIC8vIHdoZXRoZXIgdGhlIGVsZW1lbnQgaXMgbG9ja2VkIChjYW5ub3QgYmUgbW92ZWQpXG4gICAgZ3JhYmJlZDogZmFsc2UsXG4gICAgLy8gd2hldGhlciB0aGUgZWxlbWVudCBpcyBncmFiYmVkIGJ5IHRoZSBtb3VzZTsgcmVuZGVyZXIgc2V0cyB0aGlzIHByaXZhdGVseVxuICAgIGdyYWJiYWJsZTogcGFyYW1zLmdyYWJiYWJsZSA9PT0gdW5kZWZpbmVkID8gdHJ1ZSA6IHBhcmFtcy5ncmFiYmFibGUgPyB0cnVlIDogZmFsc2UsXG4gICAgLy8gd2hldGhlciB0aGUgZWxlbWVudCBjYW4gYmUgZ3JhYmJlZFxuICAgIHBhbm5hYmxlOiBwYXJhbXMucGFubmFibGUgPT09IHVuZGVmaW5lZCA/IGdyb3VwID09PSAnZWRnZXMnID8gdHJ1ZSA6IGZhbHNlIDogcGFyYW1zLnBhbm5hYmxlID8gdHJ1ZSA6IGZhbHNlLFxuICAgIC8vIHdoZXRoZXIgdGhlIGVsZW1lbnQgaGFzIHBhc3N0aHJvdWdoIHBhbm5pbmcgZW5hYmxlZFxuICAgIGFjdGl2ZTogZmFsc2UsXG4gICAgLy8gd2hldGhlciB0aGUgZWxlbWVudCBpcyBhY3RpdmUgZnJvbSB1c2VyIGludGVyYWN0aW9uXG4gICAgY2xhc3NlczogbmV3IFNldCQxKCksXG4gICAgLy8gbWFwICggY2xhc3NOYW1lID0+IHRydWUgKVxuICAgIGFuaW1hdGlvbjoge1xuICAgICAgLy8gb2JqZWN0IGZvciBjdXJyZW50bHktcnVubmluZyBhbmltYXRpb25zXG4gICAgICBjdXJyZW50OiBbXSxcbiAgICAgIHF1ZXVlOiBbXVxuICAgIH0sXG4gICAgcnNjcmF0Y2g6IHt9LFxuICAgIC8vIG9iamVjdCBpbiB3aGljaCB0aGUgcmVuZGVyZXIgY2FuIHN0b3JlIGluZm9ybWF0aW9uXG4gICAgc2NyYXRjaDogcGFyYW1zLnNjcmF0Y2ggfHwge30sXG4gICAgLy8gc2NyYXRjaCBvYmplY3RzXG4gICAgZWRnZXM6IFtdLFxuICAgIC8vIGFycmF5IG9mIGNvbm5lY3RlZCBlZGdlc1xuICAgIGNoaWxkcmVuOiBbXSxcbiAgICAvLyBhcnJheSBvZiBjaGlsZHJlblxuICAgIHBhcmVudDogcGFyYW1zLnBhcmVudCAmJiBwYXJhbXMucGFyZW50LmlzTm9kZSgpID8gcGFyYW1zLnBhcmVudCA6IG51bGwsXG4gICAgLy8gcGFyZW50IHJlZlxuICAgIHRyYXZlcnNhbENhY2hlOiB7fSxcbiAgICAvLyBjYWNoZSBvZiBvdXRwdXQgb2YgdHJhdmVyc2FsIGZ1bmN0aW9uc1xuICAgIGJhY2tncm91bmRpbmc6IGZhbHNlLFxuICAgIC8vIHdoZXRoZXIgYmFja2dyb3VuZCBpbWFnZXMgYXJlIGxvYWRpbmdcbiAgICBiYkNhY2hlOiBudWxsLFxuICAgIC8vIGNhY2hlIG9mIHRoZSBjdXJyZW50IGJvdW5kaW5nIGJveFxuICAgIGJiQ2FjaGVTaGlmdDoge1xuICAgICAgeDogMCxcbiAgICAgIHk6IDBcbiAgICB9LFxuICAgIC8vIHNoaWZ0IGFwcGxpZWQgdG8gY2FjaGVkIGJiIHRvIGJlIGFwcGxpZWQgb24gbmV4dCBnZXRcbiAgICBib2R5Qm91bmRzOiBudWxsLFxuICAgIC8vIGJvdW5kcyBjYWNoZSBvZiBlbGVtZW50IGJvZHksIHcvbyBvdmVybGF5XG4gICAgb3ZlcmxheUJvdW5kczogbnVsbCxcbiAgICAvLyBib3VuZHMgY2FjaGUgb2YgZWxlbWVudCBib2R5LCBpbmNsdWRpbmcgb3ZlcmxheVxuICAgIGxhYmVsQm91bmRzOiB7XG4gICAgICAvLyBib3VuZHMgY2FjaGUgb2YgbGFiZWxzXG4gICAgICBhbGw6IG51bGwsXG4gICAgICBzb3VyY2U6IG51bGwsXG4gICAgICB0YXJnZXQ6IG51bGwsXG4gICAgICBtYWluOiBudWxsXG4gICAgfSxcbiAgICBhcnJvd0JvdW5kczoge1xuICAgICAgLy8gYm91bmRzIGNhY2hlIG9mIGVkZ2UgYXJyb3dzXG4gICAgICBzb3VyY2U6IG51bGwsXG4gICAgICB0YXJnZXQ6IG51bGwsXG4gICAgICAnbWlkLXNvdXJjZSc6IG51bGwsXG4gICAgICAnbWlkLXRhcmdldCc6IG51bGxcbiAgICB9XG4gIH07XG4gIGlmIChfcC5wb3NpdGlvbi54ID09IG51bGwpIHtcbiAgICBfcC5wb3NpdGlvbi54ID0gMDtcbiAgfVxuICBpZiAoX3AucG9zaXRpb24ueSA9PSBudWxsKSB7XG4gICAgX3AucG9zaXRpb24ueSA9IDA7XG4gIH1cblxuICAvLyByZW5kZXJlZFBvc2l0aW9uIG92ZXJyaWRlcyBpZiBzcGVjaWZpZWRcbiAgaWYgKHBhcmFtcy5yZW5kZXJlZFBvc2l0aW9uKSB7XG4gICAgdmFyIHJwb3MgPSBwYXJhbXMucmVuZGVyZWRQb3NpdGlvbjtcbiAgICB2YXIgcGFuID0gY3kucGFuKCk7XG4gICAgdmFyIHpvb20gPSBjeS56b29tKCk7XG4gICAgX3AucG9zaXRpb24gPSB7XG4gICAgICB4OiAocnBvcy54IC0gcGFuLngpIC8gem9vbSxcbiAgICAgIHk6IChycG9zLnkgLSBwYW4ueSkgLyB6b29tXG4gICAgfTtcbiAgfVxuICB2YXIgY2xhc3NlcyA9IFtdO1xuICBpZiAoYXJyYXkocGFyYW1zLmNsYXNzZXMpKSB7XG4gICAgY2xhc3NlcyA9IHBhcmFtcy5jbGFzc2VzO1xuICB9IGVsc2UgaWYgKHN0cmluZyhwYXJhbXMuY2xhc3NlcykpIHtcbiAgICBjbGFzc2VzID0gcGFyYW1zLmNsYXNzZXMuc3BsaXQoL1xccysvKTtcbiAgfVxuICBmb3IgKHZhciBpID0gMCwgbCA9IGNsYXNzZXMubGVuZ3RoOyBpIDwgbDsgaSsrKSB7XG4gICAgdmFyIGNscyA9IGNsYXNzZXNbaV07XG4gICAgaWYgKCFjbHMgfHwgY2xzID09PSAnJykge1xuICAgICAgY29udGludWU7XG4gICAgfVxuICAgIF9wLmNsYXNzZXMuYWRkKGNscyk7XG4gIH1cbiAgdGhpcy5jcmVhdGVFbWl0dGVyKCk7XG4gIGlmIChyZXN0b3JlID09PSB1bmRlZmluZWQgfHwgcmVzdG9yZSkge1xuICAgIHRoaXMucmVzdG9yZSgpO1xuICB9XG4gIHZhciBieXBhc3MgPSBwYXJhbXMuc3R5bGUgfHwgcGFyYW1zLmNzcztcbiAgaWYgKGJ5cGFzcykge1xuICAgIHdhcm4oJ1NldHRpbmcgYSBgc3R5bGVgIGJ5cGFzcyBhdCBlbGVtZW50IGNyZWF0aW9uIHNob3VsZCBiZSBkb25lIG9ubHkgd2hlbiBhYnNvbHV0ZWx5IG5lY2Vzc2FyeS4gIFRyeSB0byB1c2UgdGhlIHN0eWxlc2hlZXQgaW5zdGVhZC4nKTtcbiAgICB0aGlzLnN0eWxlKGJ5cGFzcyk7XG4gIH1cbn07XG5cbnZhciBkZWZpbmVTZWFyY2ggPSBmdW5jdGlvbiBkZWZpbmVTZWFyY2gocGFyYW1zKSB7XG4gIHBhcmFtcyA9IHtcbiAgICBiZnM6IHBhcmFtcy5iZnMgfHwgIXBhcmFtcy5kZnMsXG4gICAgZGZzOiBwYXJhbXMuZGZzIHx8ICFwYXJhbXMuYmZzXG4gIH07XG5cbiAgLy8gZnJvbSBwc2V1ZG9jb2RlIG9uIHdpa2lwZWRpYVxuICByZXR1cm4gZnVuY3Rpb24gc2VhcmNoRm4ocm9vdHMsIGZuLCBkaXJlY3RlZCkge1xuICAgIHZhciBvcHRpb25zO1xuICAgIGlmIChwbGFpbk9iamVjdChyb290cykgJiYgIWVsZW1lbnRPckNvbGxlY3Rpb24ocm9vdHMpKSB7XG4gICAgICBvcHRpb25zID0gcm9vdHM7XG4gICAgICByb290cyA9IG9wdGlvbnMucm9vdHMgfHwgb3B0aW9ucy5yb290O1xuICAgICAgZm4gPSBvcHRpb25zLnZpc2l0O1xuICAgICAgZGlyZWN0ZWQgPSBvcHRpb25zLmRpcmVjdGVkO1xuICAgIH1cbiAgICBkaXJlY3RlZCA9IGFyZ3VtZW50cy5sZW5ndGggPT09IDIgJiYgIWZuJDYoZm4pID8gZm4gOiBkaXJlY3RlZDtcbiAgICBmbiA9IGZuJDYoZm4pID8gZm4gOiBmdW5jdGlvbiAoKSB7fTtcbiAgICB2YXIgY3kgPSB0aGlzLl9wcml2YXRlLmN5O1xuICAgIHZhciB2ID0gcm9vdHMgPSBzdHJpbmcocm9vdHMpID8gdGhpcy5maWx0ZXIocm9vdHMpIDogcm9vdHM7XG4gICAgdmFyIFEgPSBbXTtcbiAgICB2YXIgY29ubmVjdGVkTm9kZXMgPSBbXTtcbiAgICB2YXIgY29ubmVjdGVkQnkgPSB7fTtcbiAgICB2YXIgaWQyZGVwdGggPSB7fTtcbiAgICB2YXIgViA9IHt9O1xuICAgIHZhciBqID0gMDtcbiAgICB2YXIgZm91bmQ7XG4gICAgdmFyIF90aGlzJGJ5R3JvdXAgPSB0aGlzLmJ5R3JvdXAoKSxcbiAgICAgIG5vZGVzID0gX3RoaXMkYnlHcm91cC5ub2RlcyxcbiAgICAgIGVkZ2VzID0gX3RoaXMkYnlHcm91cC5lZGdlcztcblxuICAgIC8vIGVucXVldWUgdlxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdi5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIHZpID0gdltpXTtcbiAgICAgIHZhciB2aUlkID0gdmkuaWQoKTtcbiAgICAgIGlmICh2aS5pc05vZGUoKSkge1xuICAgICAgICBRLnVuc2hpZnQodmkpO1xuICAgICAgICBpZiAocGFyYW1zLmJmcykge1xuICAgICAgICAgIFZbdmlJZF0gPSB0cnVlO1xuICAgICAgICAgIGNvbm5lY3RlZE5vZGVzLnB1c2godmkpO1xuICAgICAgICB9XG4gICAgICAgIGlkMmRlcHRoW3ZpSWRdID0gMDtcbiAgICAgIH1cbiAgICB9XG4gICAgdmFyIF9sb29wID0gZnVuY3Rpb24gX2xvb3AoKSB7XG4gICAgICAgIHZhciB2ID0gcGFyYW1zLmJmcyA/IFEuc2hpZnQoKSA6IFEucG9wKCk7XG4gICAgICAgIHZhciB2SWQgPSB2LmlkKCk7XG4gICAgICAgIGlmIChwYXJhbXMuZGZzKSB7XG4gICAgICAgICAgaWYgKFZbdklkXSkge1xuICAgICAgICAgICAgcmV0dXJuIDA7IC8vIGNvbnRpbnVlXG4gICAgICAgICAgfVxuICAgICAgICAgIFZbdklkXSA9IHRydWU7XG4gICAgICAgICAgY29ubmVjdGVkTm9kZXMucHVzaCh2KTtcbiAgICAgICAgfVxuICAgICAgICB2YXIgZGVwdGggPSBpZDJkZXB0aFt2SWRdO1xuICAgICAgICB2YXIgcHJldkVkZ2UgPSBjb25uZWN0ZWRCeVt2SWRdO1xuICAgICAgICB2YXIgc3JjID0gcHJldkVkZ2UgIT0gbnVsbCA/IHByZXZFZGdlLnNvdXJjZSgpIDogbnVsbDtcbiAgICAgICAgdmFyIHRndCA9IHByZXZFZGdlICE9IG51bGwgPyBwcmV2RWRnZS50YXJnZXQoKSA6IG51bGw7XG4gICAgICAgIHZhciBwcmV2Tm9kZSA9IHByZXZFZGdlID09IG51bGwgPyB1bmRlZmluZWQgOiB2LnNhbWUoc3JjKSA/IHRndFswXSA6IHNyY1swXTtcbiAgICAgICAgdmFyIHJldDtcbiAgICAgICAgcmV0ID0gZm4odiwgcHJldkVkZ2UsIHByZXZOb2RlLCBqKyssIGRlcHRoKTtcbiAgICAgICAgaWYgKHJldCA9PT0gdHJ1ZSkge1xuICAgICAgICAgIGZvdW5kID0gdjtcbiAgICAgICAgICByZXR1cm4gMTsgLy8gYnJlYWtcbiAgICAgICAgfVxuICAgICAgICBpZiAocmV0ID09PSBmYWxzZSkge1xuICAgICAgICAgIHJldHVybiAxOyAvLyBicmVha1xuICAgICAgICB9XG4gICAgICAgIHZhciB2d0VkZ2VzID0gdi5jb25uZWN0ZWRFZGdlcygpLmZpbHRlcihmdW5jdGlvbiAoZSkge1xuICAgICAgICAgIHJldHVybiAoIWRpcmVjdGVkIHx8IGUuc291cmNlKCkuc2FtZSh2KSkgJiYgZWRnZXMuaGFzKGUpO1xuICAgICAgICB9KTtcbiAgICAgICAgZm9yICh2YXIgX2kyID0gMDsgX2kyIDwgdndFZGdlcy5sZW5ndGg7IF9pMisrKSB7XG4gICAgICAgICAgdmFyIGUgPSB2d0VkZ2VzW19pMl07XG4gICAgICAgICAgdmFyIHcgPSBlLmNvbm5lY3RlZE5vZGVzKCkuZmlsdGVyKGZ1bmN0aW9uIChuKSB7XG4gICAgICAgICAgICByZXR1cm4gIW4uc2FtZSh2KSAmJiBub2Rlcy5oYXMobik7XG4gICAgICAgICAgfSk7XG4gICAgICAgICAgdmFyIHdJZCA9IHcuaWQoKTtcbiAgICAgICAgICBpZiAody5sZW5ndGggIT09IDAgJiYgIVZbd0lkXSkge1xuICAgICAgICAgICAgdyA9IHdbMF07XG4gICAgICAgICAgICBRLnB1c2godyk7XG4gICAgICAgICAgICBpZiAocGFyYW1zLmJmcykge1xuICAgICAgICAgICAgICBWW3dJZF0gPSB0cnVlO1xuICAgICAgICAgICAgICBjb25uZWN0ZWROb2Rlcy5wdXNoKHcpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29ubmVjdGVkQnlbd0lkXSA9IGU7XG4gICAgICAgICAgICBpZDJkZXB0aFt3SWRdID0gaWQyZGVwdGhbdklkXSArIDE7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgX3JldDtcbiAgICB3aGlsZSAoUS5sZW5ndGggIT09IDApIHtcbiAgICAgIF9yZXQgPSBfbG9vcCgpO1xuICAgICAgaWYgKF9yZXQgPT09IDApIGNvbnRpbnVlO1xuICAgICAgaWYgKF9yZXQgPT09IDEpIGJyZWFrO1xuICAgIH1cbiAgICB2YXIgY29ubmVjdGVkRWxlcyA9IGN5LmNvbGxlY3Rpb24oKTtcbiAgICBmb3IgKHZhciBfaSA9IDA7IF9pIDwgY29ubmVjdGVkTm9kZXMubGVuZ3RoOyBfaSsrKSB7XG4gICAgICB2YXIgbm9kZSA9IGNvbm5lY3RlZE5vZGVzW19pXTtcbiAgICAgIHZhciBlZGdlID0gY29ubmVjdGVkQnlbbm9kZS5pZCgpXTtcbiAgICAgIGlmIChlZGdlICE9IG51bGwpIHtcbiAgICAgICAgY29ubmVjdGVkRWxlcy5wdXNoKGVkZ2UpO1xuICAgICAgfVxuICAgICAgY29ubmVjdGVkRWxlcy5wdXNoKG5vZGUpO1xuICAgIH1cbiAgICByZXR1cm4ge1xuICAgICAgcGF0aDogY3kuY29sbGVjdGlvbihjb25uZWN0ZWRFbGVzKSxcbiAgICAgIGZvdW5kOiBjeS5jb2xsZWN0aW9uKGZvdW5kKVxuICAgIH07XG4gIH07XG59O1xuXG4vLyBzZWFyY2gsIHNwYW5uaW5nIHRyZWVzLCBldGNcbnZhciBlbGVzZm4kdiA9IHtcbiAgYnJlYWR0aEZpcnN0U2VhcmNoOiBkZWZpbmVTZWFyY2goe1xuICAgIGJmczogdHJ1ZVxuICB9KSxcbiAgZGVwdGhGaXJzdFNlYXJjaDogZGVmaW5lU2VhcmNoKHtcbiAgICBkZnM6IHRydWVcbiAgfSlcbn07XG5cbi8vIG5pY2UsIHNob3J0IG1hdGhlbWF0aWNhbCBhbGlhc1xuZWxlc2ZuJHYuYmZzID0gZWxlc2ZuJHYuYnJlYWR0aEZpcnN0U2VhcmNoO1xuZWxlc2ZuJHYuZGZzID0gZWxlc2ZuJHYuZGVwdGhGaXJzdFNlYXJjaDtcblxudmFyIGhlYXAkMiA9IHtleHBvcnRzOiB7fX07XG5cbnZhciBoZWFwJDEgPSBoZWFwJDIuZXhwb3J0cztcblxudmFyIGhhc1JlcXVpcmVkSGVhcCQxO1xuXG5mdW5jdGlvbiByZXF1aXJlSGVhcCQxICgpIHtcblx0aWYgKGhhc1JlcXVpcmVkSGVhcCQxKSByZXR1cm4gaGVhcCQyLmV4cG9ydHM7XG5cdGhhc1JlcXVpcmVkSGVhcCQxID0gMTtcblx0KGZ1bmN0aW9uIChtb2R1bGUsIGV4cG9ydHMpIHtcblx0XHQvLyBHZW5lcmF0ZWQgYnkgQ29mZmVlU2NyaXB0IDEuOC4wXG5cdFx0KGZ1bmN0aW9uKCkge1xuXHRcdCAgdmFyIEhlYXAsIGRlZmF1bHRDbXAsIGZsb29yLCBoZWFwaWZ5LCBoZWFwcG9wLCBoZWFwcHVzaCwgaGVhcHB1c2hwb3AsIGhlYXByZXBsYWNlLCBpbnNvcnQsIG1pbiwgbmxhcmdlc3QsIG5zbWFsbGVzdCwgdXBkYXRlSXRlbSwgX3NpZnRkb3duLCBfc2lmdHVwO1xuXG5cdFx0ICBmbG9vciA9IE1hdGguZmxvb3IsIG1pbiA9IE1hdGgubWluO1xuXG5cblx0XHQgIC8qXG5cdFx0ICBEZWZhdWx0IGNvbXBhcmlzb24gZnVuY3Rpb24gdG8gYmUgdXNlZFxuXHRcdCAgICovXG5cblx0XHQgIGRlZmF1bHRDbXAgPSBmdW5jdGlvbih4LCB5KSB7XG5cdFx0ICAgIGlmICh4IDwgeSkge1xuXHRcdCAgICAgIHJldHVybiAtMTtcblx0XHQgICAgfVxuXHRcdCAgICBpZiAoeCA+IHkpIHtcblx0XHQgICAgICByZXR1cm4gMTtcblx0XHQgICAgfVxuXHRcdCAgICByZXR1cm4gMDtcblx0XHQgIH07XG5cblxuXHRcdCAgLypcblx0XHQgIEluc2VydCBpdGVtIHggaW4gbGlzdCBhLCBhbmQga2VlcCBpdCBzb3J0ZWQgYXNzdW1pbmcgYSBpcyBzb3J0ZWQuXG5cdFx0ICBcblx0XHQgIElmIHggaXMgYWxyZWFkeSBpbiBhLCBpbnNlcnQgaXQgdG8gdGhlIHJpZ2h0IG9mIHRoZSByaWdodG1vc3QgeC5cblx0XHQgIFxuXHRcdCAgT3B0aW9uYWwgYXJncyBsbyAoZGVmYXVsdCAwKSBhbmQgaGkgKGRlZmF1bHQgYS5sZW5ndGgpIGJvdW5kIHRoZSBzbGljZVxuXHRcdCAgb2YgYSB0byBiZSBzZWFyY2hlZC5cblx0XHQgICAqL1xuXG5cdFx0ICBpbnNvcnQgPSBmdW5jdGlvbihhLCB4LCBsbywgaGksIGNtcCkge1xuXHRcdCAgICB2YXIgbWlkO1xuXHRcdCAgICBpZiAobG8gPT0gbnVsbCkge1xuXHRcdCAgICAgIGxvID0gMDtcblx0XHQgICAgfVxuXHRcdCAgICBpZiAoY21wID09IG51bGwpIHtcblx0XHQgICAgICBjbXAgPSBkZWZhdWx0Q21wO1xuXHRcdCAgICB9XG5cdFx0ICAgIGlmIChsbyA8IDApIHtcblx0XHQgICAgICB0aHJvdyBuZXcgRXJyb3IoJ2xvIG11c3QgYmUgbm9uLW5lZ2F0aXZlJyk7XG5cdFx0ICAgIH1cblx0XHQgICAgaWYgKGhpID09IG51bGwpIHtcblx0XHQgICAgICBoaSA9IGEubGVuZ3RoO1xuXHRcdCAgICB9XG5cdFx0ICAgIHdoaWxlIChsbyA8IGhpKSB7XG5cdFx0ICAgICAgbWlkID0gZmxvb3IoKGxvICsgaGkpIC8gMik7XG5cdFx0ICAgICAgaWYgKGNtcCh4LCBhW21pZF0pIDwgMCkge1xuXHRcdCAgICAgICAgaGkgPSBtaWQ7XG5cdFx0ICAgICAgfSBlbHNlIHtcblx0XHQgICAgICAgIGxvID0gbWlkICsgMTtcblx0XHQgICAgICB9XG5cdFx0ICAgIH1cblx0XHQgICAgcmV0dXJuIChbXS5zcGxpY2UuYXBwbHkoYSwgW2xvLCBsbyAtIGxvXS5jb25jYXQoeCkpLCB4KTtcblx0XHQgIH07XG5cblxuXHRcdCAgLypcblx0XHQgIFB1c2ggaXRlbSBvbnRvIGhlYXAsIG1haW50YWluaW5nIHRoZSBoZWFwIGludmFyaWFudC5cblx0XHQgICAqL1xuXG5cdFx0ICBoZWFwcHVzaCA9IGZ1bmN0aW9uKGFycmF5LCBpdGVtLCBjbXApIHtcblx0XHQgICAgaWYgKGNtcCA9PSBudWxsKSB7XG5cdFx0ICAgICAgY21wID0gZGVmYXVsdENtcDtcblx0XHQgICAgfVxuXHRcdCAgICBhcnJheS5wdXNoKGl0ZW0pO1xuXHRcdCAgICByZXR1cm4gX3NpZnRkb3duKGFycmF5LCAwLCBhcnJheS5sZW5ndGggLSAxLCBjbXApO1xuXHRcdCAgfTtcblxuXG5cdFx0ICAvKlxuXHRcdCAgUG9wIHRoZSBzbWFsbGVzdCBpdGVtIG9mZiB0aGUgaGVhcCwgbWFpbnRhaW5pbmcgdGhlIGhlYXAgaW52YXJpYW50LlxuXHRcdCAgICovXG5cblx0XHQgIGhlYXBwb3AgPSBmdW5jdGlvbihhcnJheSwgY21wKSB7XG5cdFx0ICAgIHZhciBsYXN0ZWx0LCByZXR1cm5pdGVtO1xuXHRcdCAgICBpZiAoY21wID09IG51bGwpIHtcblx0XHQgICAgICBjbXAgPSBkZWZhdWx0Q21wO1xuXHRcdCAgICB9XG5cdFx0ICAgIGxhc3RlbHQgPSBhcnJheS5wb3AoKTtcblx0XHQgICAgaWYgKGFycmF5Lmxlbmd0aCkge1xuXHRcdCAgICAgIHJldHVybml0ZW0gPSBhcnJheVswXTtcblx0XHQgICAgICBhcnJheVswXSA9IGxhc3RlbHQ7XG5cdFx0ICAgICAgX3NpZnR1cChhcnJheSwgMCwgY21wKTtcblx0XHQgICAgfSBlbHNlIHtcblx0XHQgICAgICByZXR1cm5pdGVtID0gbGFzdGVsdDtcblx0XHQgICAgfVxuXHRcdCAgICByZXR1cm4gcmV0dXJuaXRlbTtcblx0XHQgIH07XG5cblxuXHRcdCAgLypcblx0XHQgIFBvcCBhbmQgcmV0dXJuIHRoZSBjdXJyZW50IHNtYWxsZXN0IHZhbHVlLCBhbmQgYWRkIHRoZSBuZXcgaXRlbS5cblx0XHQgIFxuXHRcdCAgVGhpcyBpcyBtb3JlIGVmZmljaWVudCB0aGFuIGhlYXBwb3AoKSBmb2xsb3dlZCBieSBoZWFwcHVzaCgpLCBhbmQgY2FuIGJlXG5cdFx0ICBtb3JlIGFwcHJvcHJpYXRlIHdoZW4gdXNpbmcgYSBmaXhlZCBzaXplIGhlYXAuIE5vdGUgdGhhdCB0aGUgdmFsdWVcblx0XHQgIHJldHVybmVkIG1heSBiZSBsYXJnZXIgdGhhbiBpdGVtISBUaGF0IGNvbnN0cmFpbnMgcmVhc29uYWJsZSB1c2Ugb2Zcblx0XHQgIHRoaXMgcm91dGluZSB1bmxlc3Mgd3JpdHRlbiBhcyBwYXJ0IG9mIGEgY29uZGl0aW9uYWwgcmVwbGFjZW1lbnQ6XG5cdFx0ICAgICAgaWYgaXRlbSA+IGFycmF5WzBdXG5cdFx0ICAgICAgICBpdGVtID0gaGVhcHJlcGxhY2UoYXJyYXksIGl0ZW0pXG5cdFx0ICAgKi9cblxuXHRcdCAgaGVhcHJlcGxhY2UgPSBmdW5jdGlvbihhcnJheSwgaXRlbSwgY21wKSB7XG5cdFx0ICAgIHZhciByZXR1cm5pdGVtO1xuXHRcdCAgICBpZiAoY21wID09IG51bGwpIHtcblx0XHQgICAgICBjbXAgPSBkZWZhdWx0Q21wO1xuXHRcdCAgICB9XG5cdFx0ICAgIHJldHVybml0ZW0gPSBhcnJheVswXTtcblx0XHQgICAgYXJyYXlbMF0gPSBpdGVtO1xuXHRcdCAgICBfc2lmdHVwKGFycmF5LCAwLCBjbXApO1xuXHRcdCAgICByZXR1cm4gcmV0dXJuaXRlbTtcblx0XHQgIH07XG5cblxuXHRcdCAgLypcblx0XHQgIEZhc3QgdmVyc2lvbiBvZiBhIGhlYXBwdXNoIGZvbGxvd2VkIGJ5IGEgaGVhcHBvcC5cblx0XHQgICAqL1xuXG5cdFx0ICBoZWFwcHVzaHBvcCA9IGZ1bmN0aW9uKGFycmF5LCBpdGVtLCBjbXApIHtcblx0XHQgICAgdmFyIF9yZWY7XG5cdFx0ICAgIGlmIChjbXAgPT0gbnVsbCkge1xuXHRcdCAgICAgIGNtcCA9IGRlZmF1bHRDbXA7XG5cdFx0ICAgIH1cblx0XHQgICAgaWYgKGFycmF5Lmxlbmd0aCAmJiBjbXAoYXJyYXlbMF0sIGl0ZW0pIDwgMCkge1xuXHRcdCAgICAgIF9yZWYgPSBbYXJyYXlbMF0sIGl0ZW1dLCBpdGVtID0gX3JlZlswXSwgYXJyYXlbMF0gPSBfcmVmWzFdO1xuXHRcdCAgICAgIF9zaWZ0dXAoYXJyYXksIDAsIGNtcCk7XG5cdFx0ICAgIH1cblx0XHQgICAgcmV0dXJuIGl0ZW07XG5cdFx0ICB9O1xuXG5cblx0XHQgIC8qXG5cdFx0ICBUcmFuc2Zvcm0gbGlzdCBpbnRvIGEgaGVhcCwgaW4tcGxhY2UsIGluIE8oYXJyYXkubGVuZ3RoKSB0aW1lLlxuXHRcdCAgICovXG5cblx0XHQgIGhlYXBpZnkgPSBmdW5jdGlvbihhcnJheSwgY21wKSB7XG5cdFx0ICAgIHZhciBpLCBfaSwgX2xlbiwgX3JlZjEsIF9yZXN1bHRzLCBfcmVzdWx0czE7XG5cdFx0ICAgIGlmIChjbXAgPT0gbnVsbCkge1xuXHRcdCAgICAgIGNtcCA9IGRlZmF1bHRDbXA7XG5cdFx0ICAgIH1cblx0XHQgICAgX3JlZjEgPSAoZnVuY3Rpb24oKSB7XG5cdFx0ICAgICAgX3Jlc3VsdHMxID0gW107XG5cdFx0ICAgICAgZm9yICh2YXIgX2ogPSAwLCBfcmVmID0gZmxvb3IoYXJyYXkubGVuZ3RoIC8gMik7IDAgPD0gX3JlZiA/IF9qIDwgX3JlZiA6IF9qID4gX3JlZjsgMCA8PSBfcmVmID8gX2orKyA6IF9qLS0peyBfcmVzdWx0czEucHVzaChfaik7IH1cblx0XHQgICAgICByZXR1cm4gX3Jlc3VsdHMxO1xuXHRcdCAgICB9KS5hcHBseSh0aGlzKS5yZXZlcnNlKCk7XG5cdFx0ICAgIF9yZXN1bHRzID0gW107XG5cdFx0ICAgIGZvciAoX2kgPSAwLCBfbGVuID0gX3JlZjEubGVuZ3RoOyBfaSA8IF9sZW47IF9pKyspIHtcblx0XHQgICAgICBpID0gX3JlZjFbX2ldO1xuXHRcdCAgICAgIF9yZXN1bHRzLnB1c2goX3NpZnR1cChhcnJheSwgaSwgY21wKSk7XG5cdFx0ICAgIH1cblx0XHQgICAgcmV0dXJuIF9yZXN1bHRzO1xuXHRcdCAgfTtcblxuXG5cdFx0ICAvKlxuXHRcdCAgVXBkYXRlIHRoZSBwb3NpdGlvbiBvZiB0aGUgZ2l2ZW4gaXRlbSBpbiB0aGUgaGVhcC5cblx0XHQgIFRoaXMgZnVuY3Rpb24gc2hvdWxkIGJlIGNhbGxlZCBldmVyeSB0aW1lIHRoZSBpdGVtIGlzIGJlaW5nIG1vZGlmaWVkLlxuXHRcdCAgICovXG5cblx0XHQgIHVwZGF0ZUl0ZW0gPSBmdW5jdGlvbihhcnJheSwgaXRlbSwgY21wKSB7XG5cdFx0ICAgIHZhciBwb3M7XG5cdFx0ICAgIGlmIChjbXAgPT0gbnVsbCkge1xuXHRcdCAgICAgIGNtcCA9IGRlZmF1bHRDbXA7XG5cdFx0ICAgIH1cblx0XHQgICAgcG9zID0gYXJyYXkuaW5kZXhPZihpdGVtKTtcblx0XHQgICAgaWYgKHBvcyA9PT0gLTEpIHtcblx0XHQgICAgICByZXR1cm47XG5cdFx0ICAgIH1cblx0XHQgICAgX3NpZnRkb3duKGFycmF5LCAwLCBwb3MsIGNtcCk7XG5cdFx0ICAgIHJldHVybiBfc2lmdHVwKGFycmF5LCBwb3MsIGNtcCk7XG5cdFx0ICB9O1xuXG5cblx0XHQgIC8qXG5cdFx0ICBGaW5kIHRoZSBuIGxhcmdlc3QgZWxlbWVudHMgaW4gYSBkYXRhc2V0LlxuXHRcdCAgICovXG5cblx0XHQgIG5sYXJnZXN0ID0gZnVuY3Rpb24oYXJyYXksIG4sIGNtcCkge1xuXHRcdCAgICB2YXIgZWxlbSwgcmVzdWx0LCBfaSwgX2xlbiwgX3JlZjtcblx0XHQgICAgaWYgKGNtcCA9PSBudWxsKSB7XG5cdFx0ICAgICAgY21wID0gZGVmYXVsdENtcDtcblx0XHQgICAgfVxuXHRcdCAgICByZXN1bHQgPSBhcnJheS5zbGljZSgwLCBuKTtcblx0XHQgICAgaWYgKCFyZXN1bHQubGVuZ3RoKSB7XG5cdFx0ICAgICAgcmV0dXJuIHJlc3VsdDtcblx0XHQgICAgfVxuXHRcdCAgICBoZWFwaWZ5KHJlc3VsdCwgY21wKTtcblx0XHQgICAgX3JlZiA9IGFycmF5LnNsaWNlKG4pO1xuXHRcdCAgICBmb3IgKF9pID0gMCwgX2xlbiA9IF9yZWYubGVuZ3RoOyBfaSA8IF9sZW47IF9pKyspIHtcblx0XHQgICAgICBlbGVtID0gX3JlZltfaV07XG5cdFx0ICAgICAgaGVhcHB1c2hwb3AocmVzdWx0LCBlbGVtLCBjbXApO1xuXHRcdCAgICB9XG5cdFx0ICAgIHJldHVybiByZXN1bHQuc29ydChjbXApLnJldmVyc2UoKTtcblx0XHQgIH07XG5cblxuXHRcdCAgLypcblx0XHQgIEZpbmQgdGhlIG4gc21hbGxlc3QgZWxlbWVudHMgaW4gYSBkYXRhc2V0LlxuXHRcdCAgICovXG5cblx0XHQgIG5zbWFsbGVzdCA9IGZ1bmN0aW9uKGFycmF5LCBuLCBjbXApIHtcblx0XHQgICAgdmFyIGVsZW0sIGxvcywgcmVzdWx0LCBfaSwgX2osIF9sZW4sIF9yZWYsIF9yZWYxLCBfcmVzdWx0cztcblx0XHQgICAgaWYgKGNtcCA9PSBudWxsKSB7XG5cdFx0ICAgICAgY21wID0gZGVmYXVsdENtcDtcblx0XHQgICAgfVxuXHRcdCAgICBpZiAobiAqIDEwIDw9IGFycmF5Lmxlbmd0aCkge1xuXHRcdCAgICAgIHJlc3VsdCA9IGFycmF5LnNsaWNlKDAsIG4pLnNvcnQoY21wKTtcblx0XHQgICAgICBpZiAoIXJlc3VsdC5sZW5ndGgpIHtcblx0XHQgICAgICAgIHJldHVybiByZXN1bHQ7XG5cdFx0ICAgICAgfVxuXHRcdCAgICAgIGxvcyA9IHJlc3VsdFtyZXN1bHQubGVuZ3RoIC0gMV07XG5cdFx0ICAgICAgX3JlZiA9IGFycmF5LnNsaWNlKG4pO1xuXHRcdCAgICAgIGZvciAoX2kgPSAwLCBfbGVuID0gX3JlZi5sZW5ndGg7IF9pIDwgX2xlbjsgX2krKykge1xuXHRcdCAgICAgICAgZWxlbSA9IF9yZWZbX2ldO1xuXHRcdCAgICAgICAgaWYgKGNtcChlbGVtLCBsb3MpIDwgMCkge1xuXHRcdCAgICAgICAgICBpbnNvcnQocmVzdWx0LCBlbGVtLCAwLCBudWxsLCBjbXApO1xuXHRcdCAgICAgICAgICByZXN1bHQucG9wKCk7XG5cdFx0ICAgICAgICAgIGxvcyA9IHJlc3VsdFtyZXN1bHQubGVuZ3RoIC0gMV07XG5cdFx0ICAgICAgICB9XG5cdFx0ICAgICAgfVxuXHRcdCAgICAgIHJldHVybiByZXN1bHQ7XG5cdFx0ICAgIH1cblx0XHQgICAgaGVhcGlmeShhcnJheSwgY21wKTtcblx0XHQgICAgX3Jlc3VsdHMgPSBbXTtcblx0XHQgICAgZm9yIChfaiA9IDAsIF9yZWYxID0gbWluKG4sIGFycmF5Lmxlbmd0aCk7IDAgPD0gX3JlZjEgPyBfaiA8IF9yZWYxIDogX2ogPiBfcmVmMTsgMCA8PSBfcmVmMSA/ICsrX2ogOiAtLV9qKSB7XG5cdFx0ICAgICAgX3Jlc3VsdHMucHVzaChoZWFwcG9wKGFycmF5LCBjbXApKTtcblx0XHQgICAgfVxuXHRcdCAgICByZXR1cm4gX3Jlc3VsdHM7XG5cdFx0ICB9O1xuXG5cdFx0ICBfc2lmdGRvd24gPSBmdW5jdGlvbihhcnJheSwgc3RhcnRwb3MsIHBvcywgY21wKSB7XG5cdFx0ICAgIHZhciBuZXdpdGVtLCBwYXJlbnQsIHBhcmVudHBvcztcblx0XHQgICAgaWYgKGNtcCA9PSBudWxsKSB7XG5cdFx0ICAgICAgY21wID0gZGVmYXVsdENtcDtcblx0XHQgICAgfVxuXHRcdCAgICBuZXdpdGVtID0gYXJyYXlbcG9zXTtcblx0XHQgICAgd2hpbGUgKHBvcyA+IHN0YXJ0cG9zKSB7XG5cdFx0ICAgICAgcGFyZW50cG9zID0gKHBvcyAtIDEpID4+IDE7XG5cdFx0ICAgICAgcGFyZW50ID0gYXJyYXlbcGFyZW50cG9zXTtcblx0XHQgICAgICBpZiAoY21wKG5ld2l0ZW0sIHBhcmVudCkgPCAwKSB7XG5cdFx0ICAgICAgICBhcnJheVtwb3NdID0gcGFyZW50O1xuXHRcdCAgICAgICAgcG9zID0gcGFyZW50cG9zO1xuXHRcdCAgICAgICAgY29udGludWU7XG5cdFx0ICAgICAgfVxuXHRcdCAgICAgIGJyZWFrO1xuXHRcdCAgICB9XG5cdFx0ICAgIHJldHVybiBhcnJheVtwb3NdID0gbmV3aXRlbTtcblx0XHQgIH07XG5cblx0XHQgIF9zaWZ0dXAgPSBmdW5jdGlvbihhcnJheSwgcG9zLCBjbXApIHtcblx0XHQgICAgdmFyIGNoaWxkcG9zLCBlbmRwb3MsIG5ld2l0ZW0sIHJpZ2h0cG9zLCBzdGFydHBvcztcblx0XHQgICAgaWYgKGNtcCA9PSBudWxsKSB7XG5cdFx0ICAgICAgY21wID0gZGVmYXVsdENtcDtcblx0XHQgICAgfVxuXHRcdCAgICBlbmRwb3MgPSBhcnJheS5sZW5ndGg7XG5cdFx0ICAgIHN0YXJ0cG9zID0gcG9zO1xuXHRcdCAgICBuZXdpdGVtID0gYXJyYXlbcG9zXTtcblx0XHQgICAgY2hpbGRwb3MgPSAyICogcG9zICsgMTtcblx0XHQgICAgd2hpbGUgKGNoaWxkcG9zIDwgZW5kcG9zKSB7XG5cdFx0ICAgICAgcmlnaHRwb3MgPSBjaGlsZHBvcyArIDE7XG5cdFx0ICAgICAgaWYgKHJpZ2h0cG9zIDwgZW5kcG9zICYmICEoY21wKGFycmF5W2NoaWxkcG9zXSwgYXJyYXlbcmlnaHRwb3NdKSA8IDApKSB7XG5cdFx0ICAgICAgICBjaGlsZHBvcyA9IHJpZ2h0cG9zO1xuXHRcdCAgICAgIH1cblx0XHQgICAgICBhcnJheVtwb3NdID0gYXJyYXlbY2hpbGRwb3NdO1xuXHRcdCAgICAgIHBvcyA9IGNoaWxkcG9zO1xuXHRcdCAgICAgIGNoaWxkcG9zID0gMiAqIHBvcyArIDE7XG5cdFx0ICAgIH1cblx0XHQgICAgYXJyYXlbcG9zXSA9IG5ld2l0ZW07XG5cdFx0ICAgIHJldHVybiBfc2lmdGRvd24oYXJyYXksIHN0YXJ0cG9zLCBwb3MsIGNtcCk7XG5cdFx0ICB9O1xuXG5cdFx0ICBIZWFwID0gKGZ1bmN0aW9uKCkge1xuXHRcdCAgICBIZWFwLnB1c2ggPSBoZWFwcHVzaDtcblxuXHRcdCAgICBIZWFwLnBvcCA9IGhlYXBwb3A7XG5cblx0XHQgICAgSGVhcC5yZXBsYWNlID0gaGVhcHJlcGxhY2U7XG5cblx0XHQgICAgSGVhcC5wdXNocG9wID0gaGVhcHB1c2hwb3A7XG5cblx0XHQgICAgSGVhcC5oZWFwaWZ5ID0gaGVhcGlmeTtcblxuXHRcdCAgICBIZWFwLnVwZGF0ZUl0ZW0gPSB1cGRhdGVJdGVtO1xuXG5cdFx0ICAgIEhlYXAubmxhcmdlc3QgPSBubGFyZ2VzdDtcblxuXHRcdCAgICBIZWFwLm5zbWFsbGVzdCA9IG5zbWFsbGVzdDtcblxuXHRcdCAgICBmdW5jdGlvbiBIZWFwKGNtcCkge1xuXHRcdCAgICAgIHRoaXMuY21wID0gY21wICE9IG51bGwgPyBjbXAgOiBkZWZhdWx0Q21wO1xuXHRcdCAgICAgIHRoaXMubm9kZXMgPSBbXTtcblx0XHQgICAgfVxuXG5cdFx0ICAgIEhlYXAucHJvdG90eXBlLnB1c2ggPSBmdW5jdGlvbih4KSB7XG5cdFx0ICAgICAgcmV0dXJuIGhlYXBwdXNoKHRoaXMubm9kZXMsIHgsIHRoaXMuY21wKTtcblx0XHQgICAgfTtcblxuXHRcdCAgICBIZWFwLnByb3RvdHlwZS5wb3AgPSBmdW5jdGlvbigpIHtcblx0XHQgICAgICByZXR1cm4gaGVhcHBvcCh0aGlzLm5vZGVzLCB0aGlzLmNtcCk7XG5cdFx0ICAgIH07XG5cblx0XHQgICAgSGVhcC5wcm90b3R5cGUucGVlayA9IGZ1bmN0aW9uKCkge1xuXHRcdCAgICAgIHJldHVybiB0aGlzLm5vZGVzWzBdO1xuXHRcdCAgICB9O1xuXG5cdFx0ICAgIEhlYXAucHJvdG90eXBlLmNvbnRhaW5zID0gZnVuY3Rpb24oeCkge1xuXHRcdCAgICAgIHJldHVybiB0aGlzLm5vZGVzLmluZGV4T2YoeCkgIT09IC0xO1xuXHRcdCAgICB9O1xuXG5cdFx0ICAgIEhlYXAucHJvdG90eXBlLnJlcGxhY2UgPSBmdW5jdGlvbih4KSB7XG5cdFx0ICAgICAgcmV0dXJuIGhlYXByZXBsYWNlKHRoaXMubm9kZXMsIHgsIHRoaXMuY21wKTtcblx0XHQgICAgfTtcblxuXHRcdCAgICBIZWFwLnByb3RvdHlwZS5wdXNocG9wID0gZnVuY3Rpb24oeCkge1xuXHRcdCAgICAgIHJldHVybiBoZWFwcHVzaHBvcCh0aGlzLm5vZGVzLCB4LCB0aGlzLmNtcCk7XG5cdFx0ICAgIH07XG5cblx0XHQgICAgSGVhcC5wcm90b3R5cGUuaGVhcGlmeSA9IGZ1bmN0aW9uKCkge1xuXHRcdCAgICAgIHJldHVybiBoZWFwaWZ5KHRoaXMubm9kZXMsIHRoaXMuY21wKTtcblx0XHQgICAgfTtcblxuXHRcdCAgICBIZWFwLnByb3RvdHlwZS51cGRhdGVJdGVtID0gZnVuY3Rpb24oeCkge1xuXHRcdCAgICAgIHJldHVybiB1cGRhdGVJdGVtKHRoaXMubm9kZXMsIHgsIHRoaXMuY21wKTtcblx0XHQgICAgfTtcblxuXHRcdCAgICBIZWFwLnByb3RvdHlwZS5jbGVhciA9IGZ1bmN0aW9uKCkge1xuXHRcdCAgICAgIHJldHVybiB0aGlzLm5vZGVzID0gW107XG5cdFx0ICAgIH07XG5cblx0XHQgICAgSGVhcC5wcm90b3R5cGUuZW1wdHkgPSBmdW5jdGlvbigpIHtcblx0XHQgICAgICByZXR1cm4gdGhpcy5ub2Rlcy5sZW5ndGggPT09IDA7XG5cdFx0ICAgIH07XG5cblx0XHQgICAgSGVhcC5wcm90b3R5cGUuc2l6ZSA9IGZ1bmN0aW9uKCkge1xuXHRcdCAgICAgIHJldHVybiB0aGlzLm5vZGVzLmxlbmd0aDtcblx0XHQgICAgfTtcblxuXHRcdCAgICBIZWFwLnByb3RvdHlwZS5jbG9uZSA9IGZ1bmN0aW9uKCkge1xuXHRcdCAgICAgIHZhciBoZWFwO1xuXHRcdCAgICAgIGhlYXAgPSBuZXcgSGVhcCgpO1xuXHRcdCAgICAgIGhlYXAubm9kZXMgPSB0aGlzLm5vZGVzLnNsaWNlKDApO1xuXHRcdCAgICAgIHJldHVybiBoZWFwO1xuXHRcdCAgICB9O1xuXG5cdFx0ICAgIEhlYXAucHJvdG90eXBlLnRvQXJyYXkgPSBmdW5jdGlvbigpIHtcblx0XHQgICAgICByZXR1cm4gdGhpcy5ub2Rlcy5zbGljZSgwKTtcblx0XHQgICAgfTtcblxuXHRcdCAgICBIZWFwLnByb3RvdHlwZS5pbnNlcnQgPSBIZWFwLnByb3RvdHlwZS5wdXNoO1xuXG5cdFx0ICAgIEhlYXAucHJvdG90eXBlLnRvcCA9IEhlYXAucHJvdG90eXBlLnBlZWs7XG5cblx0XHQgICAgSGVhcC5wcm90b3R5cGUuZnJvbnQgPSBIZWFwLnByb3RvdHlwZS5wZWVrO1xuXG5cdFx0ICAgIEhlYXAucHJvdG90eXBlLmhhcyA9IEhlYXAucHJvdG90eXBlLmNvbnRhaW5zO1xuXG5cdFx0ICAgIEhlYXAucHJvdG90eXBlLmNvcHkgPSBIZWFwLnByb3RvdHlwZS5jbG9uZTtcblxuXHRcdCAgICByZXR1cm4gSGVhcDtcblxuXHRcdCAgfSkoKTtcblxuXHRcdCAgKGZ1bmN0aW9uKHJvb3QsIGZhY3RvcnkpIHtcblx0XHQgICAge1xuXHRcdCAgICAgIHJldHVybiBtb2R1bGUuZXhwb3J0cyA9IGZhY3RvcnkoKTtcblx0XHQgICAgfVxuXHRcdCAgfSkodGhpcywgZnVuY3Rpb24oKSB7XG5cdFx0ICAgIHJldHVybiBIZWFwO1xuXHRcdCAgfSk7XG5cblx0XHR9KS5jYWxsKGhlYXAkMSk7IFxuXHR9IChoZWFwJDIpKTtcblx0cmV0dXJuIGhlYXAkMi5leHBvcnRzO1xufVxuXG52YXIgaGVhcDtcbnZhciBoYXNSZXF1aXJlZEhlYXA7XG5cbmZ1bmN0aW9uIHJlcXVpcmVIZWFwICgpIHtcblx0aWYgKGhhc1JlcXVpcmVkSGVhcCkgcmV0dXJuIGhlYXA7XG5cdGhhc1JlcXVpcmVkSGVhcCA9IDE7XG5cdGhlYXAgPSByZXF1aXJlSGVhcCQxKCk7XG5cdHJldHVybiBoZWFwO1xufVxuXG52YXIgaGVhcEV4cG9ydHMgPSByZXF1aXJlSGVhcCgpO1xudmFyIEhlYXAgPSAvKkBfX1BVUkVfXyovZ2V0RGVmYXVsdEV4cG9ydEZyb21DanMoaGVhcEV4cG9ydHMpO1xuXG52YXIgZGlqa3N0cmFEZWZhdWx0cyA9IGRlZmF1bHRzJGcoe1xuICByb290OiBudWxsLFxuICB3ZWlnaHQ6IGZ1bmN0aW9uIHdlaWdodChlZGdlKSB7XG4gICAgcmV0dXJuIDE7XG4gIH0sXG4gIGRpcmVjdGVkOiBmYWxzZVxufSk7XG52YXIgZWxlc2ZuJHUgPSB7XG4gIGRpamtzdHJhOiBmdW5jdGlvbiBkaWprc3RyYShvcHRpb25zKSB7XG4gICAgaWYgKCFwbGFpbk9iamVjdChvcHRpb25zKSkge1xuICAgICAgdmFyIGFyZ3MgPSBhcmd1bWVudHM7XG4gICAgICBvcHRpb25zID0ge1xuICAgICAgICByb290OiBhcmdzWzBdLFxuICAgICAgICB3ZWlnaHQ6IGFyZ3NbMV0sXG4gICAgICAgIGRpcmVjdGVkOiBhcmdzWzJdXG4gICAgICB9O1xuICAgIH1cbiAgICB2YXIgX2RpamtzdHJhRGVmYXVsdHMgPSBkaWprc3RyYURlZmF1bHRzKG9wdGlvbnMpLFxuICAgICAgcm9vdCA9IF9kaWprc3RyYURlZmF1bHRzLnJvb3QsXG4gICAgICB3ZWlnaHQgPSBfZGlqa3N0cmFEZWZhdWx0cy53ZWlnaHQsXG4gICAgICBkaXJlY3RlZCA9IF9kaWprc3RyYURlZmF1bHRzLmRpcmVjdGVkO1xuICAgIHZhciBlbGVzID0gdGhpcztcbiAgICB2YXIgd2VpZ2h0Rm4gPSB3ZWlnaHQ7XG4gICAgdmFyIHNvdXJjZSA9IHN0cmluZyhyb290KSA/IHRoaXMuZmlsdGVyKHJvb3QpWzBdIDogcm9vdFswXTtcbiAgICB2YXIgZGlzdCA9IHt9O1xuICAgIHZhciBwcmV2ID0ge307XG4gICAgdmFyIGtub3duRGlzdCA9IHt9O1xuICAgIHZhciBfdGhpcyRieUdyb3VwID0gdGhpcy5ieUdyb3VwKCksXG4gICAgICBub2RlcyA9IF90aGlzJGJ5R3JvdXAubm9kZXMsXG4gICAgICBlZGdlcyA9IF90aGlzJGJ5R3JvdXAuZWRnZXM7XG4gICAgZWRnZXMudW5tZXJnZUJ5KGZ1bmN0aW9uIChlbGUpIHtcbiAgICAgIHJldHVybiBlbGUuaXNMb29wKCk7XG4gICAgfSk7XG4gICAgdmFyIGdldERpc3QgPSBmdW5jdGlvbiBnZXREaXN0KG5vZGUpIHtcbiAgICAgIHJldHVybiBkaXN0W25vZGUuaWQoKV07XG4gICAgfTtcbiAgICB2YXIgc2V0RGlzdCA9IGZ1bmN0aW9uIHNldERpc3Qobm9kZSwgZCkge1xuICAgICAgZGlzdFtub2RlLmlkKCldID0gZDtcbiAgICAgIFEudXBkYXRlSXRlbShub2RlKTtcbiAgICB9O1xuICAgIHZhciBRID0gbmV3IEhlYXAoZnVuY3Rpb24gKGEsIGIpIHtcbiAgICAgIHJldHVybiBnZXREaXN0KGEpIC0gZ2V0RGlzdChiKTtcbiAgICB9KTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IG5vZGVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIgbm9kZSA9IG5vZGVzW2ldO1xuICAgICAgZGlzdFtub2RlLmlkKCldID0gbm9kZS5zYW1lKHNvdXJjZSkgPyAwIDogSW5maW5pdHk7XG4gICAgICBRLnB1c2gobm9kZSk7XG4gICAgfVxuICAgIHZhciBkaXN0QmV0d2VlbiA9IGZ1bmN0aW9uIGRpc3RCZXR3ZWVuKHUsIHYpIHtcbiAgICAgIHZhciB1dnMgPSAoZGlyZWN0ZWQgPyB1LmVkZ2VzVG8odikgOiB1LmVkZ2VzV2l0aCh2KSkuaW50ZXJzZWN0KGVkZ2VzKTtcbiAgICAgIHZhciBzbWFsbGVzdERpc3RhbmNlID0gSW5maW5pdHk7XG4gICAgICB2YXIgc21hbGxlc3RFZGdlO1xuICAgICAgZm9yICh2YXIgX2kgPSAwOyBfaSA8IHV2cy5sZW5ndGg7IF9pKyspIHtcbiAgICAgICAgdmFyIGVkZ2UgPSB1dnNbX2ldO1xuICAgICAgICB2YXIgX3dlaWdodCA9IHdlaWdodEZuKGVkZ2UpO1xuICAgICAgICBpZiAoX3dlaWdodCA8IHNtYWxsZXN0RGlzdGFuY2UgfHwgIXNtYWxsZXN0RWRnZSkge1xuICAgICAgICAgIHNtYWxsZXN0RGlzdGFuY2UgPSBfd2VpZ2h0O1xuICAgICAgICAgIHNtYWxsZXN0RWRnZSA9IGVkZ2U7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiB7XG4gICAgICAgIGVkZ2U6IHNtYWxsZXN0RWRnZSxcbiAgICAgICAgZGlzdDogc21hbGxlc3REaXN0YW5jZVxuICAgICAgfTtcbiAgICB9O1xuICAgIHdoaWxlIChRLnNpemUoKSA+IDApIHtcbiAgICAgIHZhciB1ID0gUS5wb3AoKTtcbiAgICAgIHZhciBzbWFsbGV0c0Rpc3QgPSBnZXREaXN0KHUpO1xuICAgICAgdmFyIHVpZCA9IHUuaWQoKTtcbiAgICAgIGtub3duRGlzdFt1aWRdID0gc21hbGxldHNEaXN0O1xuICAgICAgaWYgKHNtYWxsZXRzRGlzdCA9PT0gSW5maW5pdHkpIHtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG4gICAgICB2YXIgbmVpZ2hib3JzID0gdS5uZWlnaGJvcmhvb2QoKS5pbnRlcnNlY3Qobm9kZXMpO1xuICAgICAgZm9yICh2YXIgX2kyID0gMDsgX2kyIDwgbmVpZ2hib3JzLmxlbmd0aDsgX2kyKyspIHtcbiAgICAgICAgdmFyIHYgPSBuZWlnaGJvcnNbX2kyXTtcbiAgICAgICAgdmFyIHZpZCA9IHYuaWQoKTtcbiAgICAgICAgdmFyIHZEaXN0ID0gZGlzdEJldHdlZW4odSwgdik7XG4gICAgICAgIHZhciBhbHQgPSBzbWFsbGV0c0Rpc3QgKyB2RGlzdC5kaXN0O1xuICAgICAgICBpZiAoYWx0IDwgZ2V0RGlzdCh2KSkge1xuICAgICAgICAgIHNldERpc3QodiwgYWx0KTtcbiAgICAgICAgICBwcmV2W3ZpZF0gPSB7XG4gICAgICAgICAgICBub2RlOiB1LFxuICAgICAgICAgICAgZWRnZTogdkRpc3QuZWRnZVxuICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgIH0gLy8gZm9yXG4gICAgfSAvLyB3aGlsZVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIGRpc3RhbmNlVG86IGZ1bmN0aW9uIGRpc3RhbmNlVG8obm9kZSkge1xuICAgICAgICB2YXIgdGFyZ2V0ID0gc3RyaW5nKG5vZGUpID8gbm9kZXMuZmlsdGVyKG5vZGUpWzBdIDogbm9kZVswXTtcbiAgICAgICAgcmV0dXJuIGtub3duRGlzdFt0YXJnZXQuaWQoKV07XG4gICAgICB9LFxuICAgICAgcGF0aFRvOiBmdW5jdGlvbiBwYXRoVG8obm9kZSkge1xuICAgICAgICB2YXIgdGFyZ2V0ID0gc3RyaW5nKG5vZGUpID8gbm9kZXMuZmlsdGVyKG5vZGUpWzBdIDogbm9kZVswXTtcbiAgICAgICAgdmFyIFMgPSBbXTtcbiAgICAgICAgdmFyIHUgPSB0YXJnZXQ7XG4gICAgICAgIHZhciB1aWQgPSB1LmlkKCk7XG4gICAgICAgIGlmICh0YXJnZXQubGVuZ3RoID4gMCkge1xuICAgICAgICAgIFMudW5zaGlmdCh0YXJnZXQpO1xuICAgICAgICAgIHdoaWxlIChwcmV2W3VpZF0pIHtcbiAgICAgICAgICAgIHZhciBwID0gcHJldlt1aWRdO1xuICAgICAgICAgICAgUy51bnNoaWZ0KHAuZWRnZSk7XG4gICAgICAgICAgICBTLnVuc2hpZnQocC5ub2RlKTtcbiAgICAgICAgICAgIHUgPSBwLm5vZGU7XG4gICAgICAgICAgICB1aWQgPSB1LmlkKCk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBlbGVzLnNwYXduKFMpO1xuICAgICAgfVxuICAgIH07XG4gIH1cbn07XG5cbnZhciBlbGVzZm4kdCA9IHtcbiAgLy8ga3J1c2thbCdzIGFsZ29yaXRobSAoZmluZHMgbWluIHNwYW5uaW5nIHRyZWUsIGFzc3VtaW5nIHVuZGlyZWN0ZWQgZ3JhcGgpXG4gIC8vIGltcGxlbWVudGVkIGZyb20gcHNldWRvY29kZSBmcm9tIHdpa2lwZWRpYVxuICBrcnVza2FsOiBmdW5jdGlvbiBrcnVza2FsKHdlaWdodEZuKSB7XG4gICAgd2VpZ2h0Rm4gPSB3ZWlnaHRGbiB8fCBmdW5jdGlvbiAoZWRnZSkge1xuICAgICAgcmV0dXJuIDE7XG4gICAgfTtcbiAgICB2YXIgX3RoaXMkYnlHcm91cCA9IHRoaXMuYnlHcm91cCgpLFxuICAgICAgbm9kZXMgPSBfdGhpcyRieUdyb3VwLm5vZGVzLFxuICAgICAgZWRnZXMgPSBfdGhpcyRieUdyb3VwLmVkZ2VzO1xuICAgIHZhciBudW1Ob2RlcyA9IG5vZGVzLmxlbmd0aDtcbiAgICB2YXIgZm9yZXN0ID0gbmV3IEFycmF5KG51bU5vZGVzKTtcbiAgICB2YXIgQSA9IG5vZGVzOyAvLyBhc3N1bWVzIGJ5R3JvdXAoKSBjcmVhdGVzIG5ldyBjb2xsZWN0aW9ucyB0aGF0IGNhbiBiZSBzYWZlbHkgbXV0YXRlZFxuXG4gICAgdmFyIGZpbmRTZXRJbmRleCA9IGZ1bmN0aW9uIGZpbmRTZXRJbmRleChlbGUpIHtcbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZm9yZXN0Lmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIHZhciBlbGVzID0gZm9yZXN0W2ldO1xuICAgICAgICBpZiAoZWxlcy5oYXMoZWxlKSkge1xuICAgICAgICAgIHJldHVybiBpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfTtcblxuICAgIC8vIHN0YXJ0IHdpdGggb25lIGZvcmVzdCBwZXIgbm9kZVxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbnVtTm9kZXM7IGkrKykge1xuICAgICAgZm9yZXN0W2ldID0gdGhpcy5zcGF3bihub2Rlc1tpXSk7XG4gICAgfVxuICAgIHZhciBTID0gZWRnZXMuc29ydChmdW5jdGlvbiAoYSwgYikge1xuICAgICAgcmV0dXJuIHdlaWdodEZuKGEpIC0gd2VpZ2h0Rm4oYik7XG4gICAgfSk7XG4gICAgZm9yICh2YXIgX2kgPSAwOyBfaSA8IFMubGVuZ3RoOyBfaSsrKSB7XG4gICAgICB2YXIgZWRnZSA9IFNbX2ldO1xuICAgICAgdmFyIHUgPSBlZGdlLnNvdXJjZSgpWzBdO1xuICAgICAgdmFyIHYgPSBlZGdlLnRhcmdldCgpWzBdO1xuICAgICAgdmFyIHNldFVJbmRleCA9IGZpbmRTZXRJbmRleCh1KTtcbiAgICAgIHZhciBzZXRWSW5kZXggPSBmaW5kU2V0SW5kZXgodik7XG4gICAgICB2YXIgc2V0VSA9IGZvcmVzdFtzZXRVSW5kZXhdO1xuICAgICAgdmFyIHNldFYgPSBmb3Jlc3Rbc2V0VkluZGV4XTtcbiAgICAgIGlmIChzZXRVSW5kZXggIT09IHNldFZJbmRleCkge1xuICAgICAgICBBLm1lcmdlKGVkZ2UpO1xuXG4gICAgICAgIC8vIGNvbWJpbmUgZm9yZXN0cyBmb3IgdSBhbmQgdlxuICAgICAgICBzZXRVLm1lcmdlKHNldFYpO1xuICAgICAgICBmb3Jlc3Quc3BsaWNlKHNldFZJbmRleCwgMSk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBBO1xuICB9XG59O1xuXG52YXIgYVN0YXJEZWZhdWx0cyA9IGRlZmF1bHRzJGcoe1xuICByb290OiBudWxsLFxuICBnb2FsOiBudWxsLFxuICB3ZWlnaHQ6IGZ1bmN0aW9uIHdlaWdodChlZGdlKSB7XG4gICAgcmV0dXJuIDE7XG4gIH0sXG4gIGhldXJpc3RpYzogZnVuY3Rpb24gaGV1cmlzdGljKGVkZ2UpIHtcbiAgICByZXR1cm4gMDtcbiAgfSxcbiAgZGlyZWN0ZWQ6IGZhbHNlXG59KTtcbnZhciBlbGVzZm4kcyA9IHtcbiAgLy8gSW1wbGVtZW50ZWQgZnJvbSBwc2V1ZG9jb2RlIGZyb20gd2lraXBlZGlhXG4gIGFTdGFyOiBmdW5jdGlvbiBhU3RhcihvcHRpb25zKSB7XG4gICAgdmFyIGN5ID0gdGhpcy5jeSgpO1xuICAgIHZhciBfYVN0YXJEZWZhdWx0cyA9IGFTdGFyRGVmYXVsdHMob3B0aW9ucyksXG4gICAgICByb290ID0gX2FTdGFyRGVmYXVsdHMucm9vdCxcbiAgICAgIGdvYWwgPSBfYVN0YXJEZWZhdWx0cy5nb2FsLFxuICAgICAgaGV1cmlzdGljID0gX2FTdGFyRGVmYXVsdHMuaGV1cmlzdGljLFxuICAgICAgZGlyZWN0ZWQgPSBfYVN0YXJEZWZhdWx0cy5kaXJlY3RlZCxcbiAgICAgIHdlaWdodCA9IF9hU3RhckRlZmF1bHRzLndlaWdodDtcbiAgICByb290ID0gY3kuY29sbGVjdGlvbihyb290KVswXTtcbiAgICBnb2FsID0gY3kuY29sbGVjdGlvbihnb2FsKVswXTtcbiAgICB2YXIgc2lkID0gcm9vdC5pZCgpO1xuICAgIHZhciB0aWQgPSBnb2FsLmlkKCk7XG4gICAgdmFyIGdTY29yZSA9IHt9O1xuICAgIHZhciBmU2NvcmUgPSB7fTtcbiAgICB2YXIgY2xvc2VkU2V0SWRzID0ge307XG4gICAgdmFyIG9wZW5TZXQgPSBuZXcgSGVhcChmdW5jdGlvbiAoYSwgYikge1xuICAgICAgcmV0dXJuIGZTY29yZVthLmlkKCldIC0gZlNjb3JlW2IuaWQoKV07XG4gICAgfSk7XG4gICAgdmFyIG9wZW5TZXRJZHMgPSBuZXcgU2V0JDEoKTtcbiAgICB2YXIgY2FtZUZyb20gPSB7fTtcbiAgICB2YXIgY2FtZUZyb21FZGdlID0ge307XG4gICAgdmFyIGFkZFRvT3BlblNldCA9IGZ1bmN0aW9uIGFkZFRvT3BlblNldChlbGUsIGlkKSB7XG4gICAgICBvcGVuU2V0LnB1c2goZWxlKTtcbiAgICAgIG9wZW5TZXRJZHMuYWRkKGlkKTtcbiAgICB9O1xuICAgIHZhciBjTWluLCBjTWluSWQ7XG4gICAgdmFyIHBvcEZyb21PcGVuU2V0ID0gZnVuY3Rpb24gcG9wRnJvbU9wZW5TZXQoKSB7XG4gICAgICBjTWluID0gb3BlblNldC5wb3AoKTtcbiAgICAgIGNNaW5JZCA9IGNNaW4uaWQoKTtcbiAgICAgIG9wZW5TZXRJZHNbXCJkZWxldGVcIl0oY01pbklkKTtcbiAgICB9O1xuICAgIHZhciBpc0luT3BlblNldCA9IGZ1bmN0aW9uIGlzSW5PcGVuU2V0KGlkKSB7XG4gICAgICByZXR1cm4gb3BlblNldElkcy5oYXMoaWQpO1xuICAgIH07XG4gICAgYWRkVG9PcGVuU2V0KHJvb3QsIHNpZCk7XG4gICAgZ1Njb3JlW3NpZF0gPSAwO1xuICAgIGZTY29yZVtzaWRdID0gaGV1cmlzdGljKHJvb3QpO1xuXG4gICAgLy8gQ291bnRlclxuICAgIHZhciBzdGVwcyA9IDA7XG5cbiAgICAvLyBNYWluIGxvb3BcbiAgICB3aGlsZSAob3BlblNldC5zaXplKCkgPiAwKSB7XG4gICAgICBwb3BGcm9tT3BlblNldCgpO1xuICAgICAgc3RlcHMrKztcblxuICAgICAgLy8gSWYgd2UndmUgZm91bmQgb3VyIGdvYWwsIHRoZW4gd2UgYXJlIGRvbmVcbiAgICAgIGlmIChjTWluSWQgPT09IHRpZCkge1xuICAgICAgICB2YXIgcGF0aCA9IFtdO1xuICAgICAgICB2YXIgcGF0aE5vZGUgPSBnb2FsO1xuICAgICAgICB2YXIgcGF0aE5vZGVJZCA9IHRpZDtcbiAgICAgICAgdmFyIHBhdGhFZGdlID0gY2FtZUZyb21FZGdlW3BhdGhOb2RlSWRdO1xuICAgICAgICBmb3IgKDs7KSB7XG4gICAgICAgICAgcGF0aC51bnNoaWZ0KHBhdGhOb2RlKTtcbiAgICAgICAgICBpZiAocGF0aEVkZ2UgIT0gbnVsbCkge1xuICAgICAgICAgICAgcGF0aC51bnNoaWZ0KHBhdGhFZGdlKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgcGF0aE5vZGUgPSBjYW1lRnJvbVtwYXRoTm9kZUlkXTtcbiAgICAgICAgICBpZiAocGF0aE5vZGUgPT0gbnVsbCkge1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuICAgICAgICAgIHBhdGhOb2RlSWQgPSBwYXRoTm9kZS5pZCgpO1xuICAgICAgICAgIHBhdGhFZGdlID0gY2FtZUZyb21FZGdlW3BhdGhOb2RlSWRdO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgZm91bmQ6IHRydWUsXG4gICAgICAgICAgZGlzdGFuY2U6IGdTY29yZVtjTWluSWRdLFxuICAgICAgICAgIHBhdGg6IHRoaXMuc3Bhd24ocGF0aCksXG4gICAgICAgICAgc3RlcHM6IHN0ZXBzXG4gICAgICAgIH07XG4gICAgICB9XG5cbiAgICAgIC8vIEFkZCBjTWluIHRvIHByb2Nlc3NlZCBub2Rlc1xuICAgICAgY2xvc2VkU2V0SWRzW2NNaW5JZF0gPSB0cnVlO1xuXG4gICAgICAvLyBVcGRhdGUgc2NvcmVzIGZvciBuZWlnaGJvcnMgb2YgY01pblxuICAgICAgLy8gVGFrZSBpbnRvIGFjY291bnQgaWYgZ3JhcGggaXMgZGlyZWN0ZWQgb3Igbm90XG4gICAgICB2YXIgdndFZGdlcyA9IGNNaW4uX3ByaXZhdGUuZWRnZXM7XG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHZ3RWRnZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgdmFyIGUgPSB2d0VkZ2VzW2ldO1xuXG4gICAgICAgIC8vIGVkZ2UgbXVzdCBiZSBpbiBzZXQgb2YgY2FsbGluZyBlbGVzXG4gICAgICAgIGlmICghdGhpcy5oYXNFbGVtZW50V2l0aElkKGUuaWQoKSkpIHtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIGNNaW4gbXVzdCBiZSB0aGUgc291cmNlIG9mIGVkZ2UgaWYgZGlyZWN0ZWRcbiAgICAgICAgaWYgKGRpcmVjdGVkICYmIGUuZGF0YSgnc291cmNlJykgIT09IGNNaW5JZCkge1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG4gICAgICAgIHZhciB3U3JjID0gZS5zb3VyY2UoKTtcbiAgICAgICAgdmFyIHdUZ3QgPSBlLnRhcmdldCgpO1xuICAgICAgICB2YXIgdyA9IHdTcmMuaWQoKSAhPT0gY01pbklkID8gd1NyYyA6IHdUZ3Q7XG4gICAgICAgIHZhciB3aWQgPSB3LmlkKCk7XG5cbiAgICAgICAgLy8gbm9kZSBtdXN0IGJlIGluIHNldCBvZiBjYWxsaW5nIGVsZXNcbiAgICAgICAgaWYgKCF0aGlzLmhhc0VsZW1lbnRXaXRoSWQod2lkKSkge1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gaWYgbm9kZSBpcyBpbiBjbG9zZWRTZXQsIGlnbm9yZSBpdFxuICAgICAgICBpZiAoY2xvc2VkU2V0SWRzW3dpZF0pIHtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIE5ldyB0ZW50YXRpdmUgc2NvcmUgZm9yIG5vZGUgd1xuICAgICAgICB2YXIgdGVtcFNjb3JlID0gZ1Njb3JlW2NNaW5JZF0gKyB3ZWlnaHQoZSk7XG5cbiAgICAgICAgLy8gVXBkYXRlIGdTY29yZSBmb3Igbm9kZSB3IGlmOlxuICAgICAgICAvLyAgIHcgbm90IHByZXNlbnQgaW4gb3BlblNldFxuICAgICAgICAvLyBPUlxuICAgICAgICAvLyAgIHRlbnRhdGl2ZSBnU2NvcmUgaXMgbGVzcyB0aGFuIHByZXZpb3VzIHZhbHVlXG5cbiAgICAgICAgLy8gdyBub3QgaW4gb3BlblNldFxuICAgICAgICBpZiAoIWlzSW5PcGVuU2V0KHdpZCkpIHtcbiAgICAgICAgICBnU2NvcmVbd2lkXSA9IHRlbXBTY29yZTtcbiAgICAgICAgICBmU2NvcmVbd2lkXSA9IHRlbXBTY29yZSArIGhldXJpc3RpYyh3KTtcbiAgICAgICAgICBhZGRUb09wZW5TZXQodywgd2lkKTtcbiAgICAgICAgICBjYW1lRnJvbVt3aWRdID0gY01pbjtcbiAgICAgICAgICBjYW1lRnJvbUVkZ2Vbd2lkXSA9IGU7XG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cblxuICAgICAgICAvLyB3IGFscmVhZHkgaW4gb3BlblNldCwgYnV0IHdpdGggZ3JlYXRlciBnU2NvcmVcbiAgICAgICAgaWYgKHRlbXBTY29yZSA8IGdTY29yZVt3aWRdKSB7XG4gICAgICAgICAgZ1Njb3JlW3dpZF0gPSB0ZW1wU2NvcmU7XG4gICAgICAgICAgZlNjb3JlW3dpZF0gPSB0ZW1wU2NvcmUgKyBoZXVyaXN0aWModyk7XG4gICAgICAgICAgY2FtZUZyb21bd2lkXSA9IGNNaW47XG4gICAgICAgICAgY2FtZUZyb21FZGdlW3dpZF0gPSBlO1xuICAgICAgICB9XG4gICAgICB9IC8vIEVuZCBvZiBuZWlnaGJvcnMgdXBkYXRlXG4gICAgfSAvLyBFbmQgb2YgbWFpbiBsb29wXG5cbiAgICAvLyBJZiB3ZSd2ZSByZWFjaGVkIGhlcmUsIHRoZW4gd2UndmUgbm90IHJlYWNoZWQgb3VyIGdvYWxcbiAgICByZXR1cm4ge1xuICAgICAgZm91bmQ6IGZhbHNlLFxuICAgICAgZGlzdGFuY2U6IHVuZGVmaW5lZCxcbiAgICAgIHBhdGg6IHVuZGVmaW5lZCxcbiAgICAgIHN0ZXBzOiBzdGVwc1xuICAgIH07XG4gIH1cbn07IC8vIGVsZXNmblxuXG52YXIgZmxveWRXYXJzaGFsbERlZmF1bHRzID0gZGVmYXVsdHMkZyh7XG4gIHdlaWdodDogZnVuY3Rpb24gd2VpZ2h0KGVkZ2UpIHtcbiAgICByZXR1cm4gMTtcbiAgfSxcbiAgZGlyZWN0ZWQ6IGZhbHNlXG59KTtcbnZhciBlbGVzZm4kciA9IHtcbiAgLy8gSW1wbGVtZW50ZWQgZnJvbSBwc2V1ZG9jb2RlIGZyb20gd2lraXBlZGlhXG4gIGZsb3lkV2Fyc2hhbGw6IGZ1bmN0aW9uIGZsb3lkV2Fyc2hhbGwob3B0aW9ucykge1xuICAgIHZhciBjeSA9IHRoaXMuY3koKTtcbiAgICB2YXIgX2Zsb3lkV2Fyc2hhbGxEZWZhdWx0ID0gZmxveWRXYXJzaGFsbERlZmF1bHRzKG9wdGlvbnMpLFxuICAgICAgd2VpZ2h0ID0gX2Zsb3lkV2Fyc2hhbGxEZWZhdWx0LndlaWdodCxcbiAgICAgIGRpcmVjdGVkID0gX2Zsb3lkV2Fyc2hhbGxEZWZhdWx0LmRpcmVjdGVkO1xuICAgIHZhciB3ZWlnaHRGbiA9IHdlaWdodDtcbiAgICB2YXIgX3RoaXMkYnlHcm91cCA9IHRoaXMuYnlHcm91cCgpLFxuICAgICAgbm9kZXMgPSBfdGhpcyRieUdyb3VwLm5vZGVzLFxuICAgICAgZWRnZXMgPSBfdGhpcyRieUdyb3VwLmVkZ2VzO1xuICAgIHZhciBOID0gbm9kZXMubGVuZ3RoO1xuICAgIHZhciBOc3EgPSBOICogTjtcbiAgICB2YXIgaW5kZXhPZiA9IGZ1bmN0aW9uIGluZGV4T2Yobm9kZSkge1xuICAgICAgcmV0dXJuIG5vZGVzLmluZGV4T2Yobm9kZSk7XG4gICAgfTtcbiAgICB2YXIgYXRJbmRleCA9IGZ1bmN0aW9uIGF0SW5kZXgoaSkge1xuICAgICAgcmV0dXJuIG5vZGVzW2ldO1xuICAgIH07XG5cbiAgICAvLyBJbml0aWFsaXplIGRpc3RhbmNlIG1hdHJpeFxuICAgIHZhciBkaXN0ID0gbmV3IEFycmF5KE5zcSk7XG4gICAgZm9yICh2YXIgbiA9IDA7IG4gPCBOc3E7IG4rKykge1xuICAgICAgdmFyIGogPSBuICUgTjtcbiAgICAgIHZhciBpID0gKG4gLSBqKSAvIE47XG4gICAgICBpZiAoaSA9PT0gaikge1xuICAgICAgICBkaXN0W25dID0gMDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGRpc3Rbbl0gPSBJbmZpbml0eTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBJbml0aWFsaXplIG1hdHJpeCB1c2VkIGZvciBwYXRoIHJlY29uc3RydWN0aW9uXG4gICAgLy8gSW5pdGlhbGl6ZSBkaXN0YW5jZSBtYXRyaXhcbiAgICB2YXIgbmV4dCA9IG5ldyBBcnJheShOc3EpO1xuICAgIHZhciBlZGdlTmV4dCA9IG5ldyBBcnJheShOc3EpO1xuXG4gICAgLy8gUHJvY2VzcyBlZGdlc1xuICAgIGZvciAodmFyIF9pID0gMDsgX2kgPCBlZGdlcy5sZW5ndGg7IF9pKyspIHtcbiAgICAgIHZhciBlZGdlID0gZWRnZXNbX2ldO1xuICAgICAgdmFyIHNyYyA9IGVkZ2Uuc291cmNlKClbMF07XG4gICAgICB2YXIgdGd0ID0gZWRnZS50YXJnZXQoKVswXTtcbiAgICAgIGlmIChzcmMgPT09IHRndCkge1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH0gLy8gZXhjbHVkZSBsb29wc1xuXG4gICAgICB2YXIgcyA9IGluZGV4T2Yoc3JjKTtcbiAgICAgIHZhciB0ID0gaW5kZXhPZih0Z3QpO1xuICAgICAgdmFyIHN0ID0gcyAqIE4gKyB0OyAvLyBzb3VyY2UgdG8gdGFyZ2V0IGluZGV4XG4gICAgICB2YXIgX3dlaWdodCA9IHdlaWdodEZuKGVkZ2UpO1xuXG4gICAgICAvLyBDaGVjayBpZiBhbHJlYWR5IHByb2Nlc3MgYW5vdGhlciBlZGdlIGJldHdlZW4gc2FtZSAyIG5vZGVzXG4gICAgICBpZiAoZGlzdFtzdF0gPiBfd2VpZ2h0KSB7XG4gICAgICAgIGRpc3Rbc3RdID0gX3dlaWdodDtcbiAgICAgICAgbmV4dFtzdF0gPSB0O1xuICAgICAgICBlZGdlTmV4dFtzdF0gPSBlZGdlO1xuICAgICAgfVxuXG4gICAgICAvLyBJZiB1bmRpcmVjdGVkIGdyYXBoLCBwcm9jZXNzICdyZXZlcnNlZCcgZWRnZVxuICAgICAgaWYgKCFkaXJlY3RlZCkge1xuICAgICAgICB2YXIgdHMgPSB0ICogTiArIHM7IC8vIHRhcmdldCB0byBzb3VyY2UgaW5kZXhcblxuICAgICAgICBpZiAoIWRpcmVjdGVkICYmIGRpc3RbdHNdID4gX3dlaWdodCkge1xuICAgICAgICAgIGRpc3RbdHNdID0gX3dlaWdodDtcbiAgICAgICAgICBuZXh0W3RzXSA9IHM7XG4gICAgICAgICAgZWRnZU5leHRbdHNdID0gZWRnZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIC8vIE1haW4gbG9vcFxuICAgIGZvciAodmFyIGsgPSAwOyBrIDwgTjsgaysrKSB7XG4gICAgICBmb3IgKHZhciBfaTIgPSAwOyBfaTIgPCBOOyBfaTIrKykge1xuICAgICAgICB2YXIgaWsgPSBfaTIgKiBOICsgaztcbiAgICAgICAgZm9yICh2YXIgX2ogPSAwOyBfaiA8IE47IF9qKyspIHtcbiAgICAgICAgICB2YXIgaWogPSBfaTIgKiBOICsgX2o7XG4gICAgICAgICAgdmFyIGtqID0gayAqIE4gKyBfajtcbiAgICAgICAgICBpZiAoZGlzdFtpa10gKyBkaXN0W2tqXSA8IGRpc3RbaWpdKSB7XG4gICAgICAgICAgICBkaXN0W2lqXSA9IGRpc3RbaWtdICsgZGlzdFtral07XG4gICAgICAgICAgICBuZXh0W2lqXSA9IG5leHRbaWtdO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICB2YXIgZ2V0QXJnRWxlID0gZnVuY3Rpb24gZ2V0QXJnRWxlKGVsZSkge1xuICAgICAgcmV0dXJuIChzdHJpbmcoZWxlKSA/IGN5LmZpbHRlcihlbGUpIDogZWxlKVswXTtcbiAgICB9O1xuICAgIHZhciBpbmRleE9mQXJnRWxlID0gZnVuY3Rpb24gaW5kZXhPZkFyZ0VsZShlbGUpIHtcbiAgICAgIHJldHVybiBpbmRleE9mKGdldEFyZ0VsZShlbGUpKTtcbiAgICB9O1xuICAgIHZhciByZXMgPSB7XG4gICAgICBkaXN0YW5jZTogZnVuY3Rpb24gZGlzdGFuY2UoZnJvbSwgdG8pIHtcbiAgICAgICAgdmFyIGkgPSBpbmRleE9mQXJnRWxlKGZyb20pO1xuICAgICAgICB2YXIgaiA9IGluZGV4T2ZBcmdFbGUodG8pO1xuICAgICAgICByZXR1cm4gZGlzdFtpICogTiArIGpdO1xuICAgICAgfSxcbiAgICAgIHBhdGg6IGZ1bmN0aW9uIHBhdGgoZnJvbSwgdG8pIHtcbiAgICAgICAgdmFyIGkgPSBpbmRleE9mQXJnRWxlKGZyb20pO1xuICAgICAgICB2YXIgaiA9IGluZGV4T2ZBcmdFbGUodG8pO1xuICAgICAgICB2YXIgZnJvbU5vZGUgPSBhdEluZGV4KGkpO1xuICAgICAgICBpZiAoaSA9PT0gaikge1xuICAgICAgICAgIHJldHVybiBmcm9tTm9kZS5jb2xsZWN0aW9uKCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG5leHRbaSAqIE4gKyBqXSA9PSBudWxsKSB7XG4gICAgICAgICAgcmV0dXJuIGN5LmNvbGxlY3Rpb24oKTtcbiAgICAgICAgfVxuICAgICAgICB2YXIgcGF0aCA9IGN5LmNvbGxlY3Rpb24oKTtcbiAgICAgICAgdmFyIHByZXYgPSBpO1xuICAgICAgICB2YXIgZWRnZTtcbiAgICAgICAgcGF0aC5tZXJnZShmcm9tTm9kZSk7XG4gICAgICAgIHdoaWxlIChpICE9PSBqKSB7XG4gICAgICAgICAgcHJldiA9IGk7XG4gICAgICAgICAgaSA9IG5leHRbaSAqIE4gKyBqXTtcbiAgICAgICAgICBlZGdlID0gZWRnZU5leHRbcHJldiAqIE4gKyBpXTtcbiAgICAgICAgICBwYXRoLm1lcmdlKGVkZ2UpO1xuICAgICAgICAgIHBhdGgubWVyZ2UoYXRJbmRleChpKSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHBhdGg7XG4gICAgICB9XG4gICAgfTtcbiAgICByZXR1cm4gcmVzO1xuICB9IC8vIGZsb3lkV2Fyc2hhbGxcbn07IC8vIGVsZXNmblxuXG52YXIgYmVsbG1hbkZvcmREZWZhdWx0cyA9IGRlZmF1bHRzJGcoe1xuICB3ZWlnaHQ6IGZ1bmN0aW9uIHdlaWdodChlZGdlKSB7XG4gICAgcmV0dXJuIDE7XG4gIH0sXG4gIGRpcmVjdGVkOiBmYWxzZSxcbiAgcm9vdDogbnVsbFxufSk7XG52YXIgZWxlc2ZuJHEgPSB7XG4gIC8vIEltcGxlbWVudGVkIGZyb20gcHNldWRvY29kZSBmcm9tIHdpa2lwZWRpYVxuICBiZWxsbWFuRm9yZDogZnVuY3Rpb24gYmVsbG1hbkZvcmQob3B0aW9ucykge1xuICAgIHZhciBfdGhpcyA9IHRoaXM7XG4gICAgdmFyIF9iZWxsbWFuRm9yZERlZmF1bHRzID0gYmVsbG1hbkZvcmREZWZhdWx0cyhvcHRpb25zKSxcbiAgICAgIHdlaWdodCA9IF9iZWxsbWFuRm9yZERlZmF1bHRzLndlaWdodCxcbiAgICAgIGRpcmVjdGVkID0gX2JlbGxtYW5Gb3JkRGVmYXVsdHMuZGlyZWN0ZWQsXG4gICAgICByb290ID0gX2JlbGxtYW5Gb3JkRGVmYXVsdHMucm9vdDtcbiAgICB2YXIgd2VpZ2h0Rm4gPSB3ZWlnaHQ7XG4gICAgdmFyIGVsZXMgPSB0aGlzO1xuICAgIHZhciBjeSA9IHRoaXMuY3koKTtcbiAgICB2YXIgX3RoaXMkYnlHcm91cCA9IHRoaXMuYnlHcm91cCgpLFxuICAgICAgZWRnZXMgPSBfdGhpcyRieUdyb3VwLmVkZ2VzLFxuICAgICAgbm9kZXMgPSBfdGhpcyRieUdyb3VwLm5vZGVzO1xuICAgIHZhciBudW1Ob2RlcyA9IG5vZGVzLmxlbmd0aDtcbiAgICB2YXIgaW5mb01hcCA9IG5ldyBNYXAkMSgpO1xuICAgIHZhciBoYXNOZWdhdGl2ZVdlaWdodEN5Y2xlID0gZmFsc2U7XG4gICAgdmFyIG5lZ2F0aXZlV2VpZ2h0Q3ljbGVzID0gW107XG4gICAgcm9vdCA9IGN5LmNvbGxlY3Rpb24ocm9vdClbMF07IC8vIGluIGNhc2Ugc2VsZWN0b3IgcGFzc2VkXG5cbiAgICBlZGdlcy51bm1lcmdlQnkoZnVuY3Rpb24gKGVkZ2UpIHtcbiAgICAgIHJldHVybiBlZGdlLmlzTG9vcCgpO1xuICAgIH0pO1xuICAgIHZhciBudW1FZGdlcyA9IGVkZ2VzLmxlbmd0aDtcbiAgICB2YXIgZ2V0SW5mbyA9IGZ1bmN0aW9uIGdldEluZm8obm9kZSkge1xuICAgICAgdmFyIG9iaiA9IGluZm9NYXAuZ2V0KG5vZGUuaWQoKSk7XG4gICAgICBpZiAoIW9iaikge1xuICAgICAgICBvYmogPSB7fTtcbiAgICAgICAgaW5mb01hcC5zZXQobm9kZS5pZCgpLCBvYmopO1xuICAgICAgfVxuICAgICAgcmV0dXJuIG9iajtcbiAgICB9O1xuICAgIHZhciBnZXROb2RlRnJvbVRvID0gZnVuY3Rpb24gZ2V0Tm9kZUZyb21Ubyh0bykge1xuICAgICAgcmV0dXJuIChzdHJpbmcodG8pID8gY3kuJCh0bykgOiB0bylbMF07XG4gICAgfTtcbiAgICB2YXIgZGlzdGFuY2VUbyA9IGZ1bmN0aW9uIGRpc3RhbmNlVG8odG8pIHtcbiAgICAgIHJldHVybiBnZXRJbmZvKGdldE5vZGVGcm9tVG8odG8pKS5kaXN0O1xuICAgIH07XG4gICAgdmFyIHBhdGhUbyA9IGZ1bmN0aW9uIHBhdGhUbyh0bykge1xuICAgICAgdmFyIHRoaXNTdGFydCA9IGFyZ3VtZW50cy5sZW5ndGggPiAxICYmIGFyZ3VtZW50c1sxXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzFdIDogcm9vdDtcbiAgICAgIHZhciBlbmQgPSBnZXROb2RlRnJvbVRvKHRvKTtcbiAgICAgIHZhciBwYXRoID0gW107XG4gICAgICB2YXIgbm9kZSA9IGVuZDtcbiAgICAgIGZvciAoOzspIHtcbiAgICAgICAgaWYgKG5vZGUgPT0gbnVsbCkge1xuICAgICAgICAgIHJldHVybiBfdGhpcy5zcGF3bigpO1xuICAgICAgICB9XG4gICAgICAgIHZhciBfZ2V0SW5mbyA9IGdldEluZm8obm9kZSksXG4gICAgICAgICAgZWRnZSA9IF9nZXRJbmZvLmVkZ2UsXG4gICAgICAgICAgcHJlZCA9IF9nZXRJbmZvLnByZWQ7XG4gICAgICAgIHBhdGgudW5zaGlmdChub2RlWzBdKTtcbiAgICAgICAgaWYgKG5vZGUuc2FtZSh0aGlzU3RhcnQpICYmIHBhdGgubGVuZ3RoID4gMCkge1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICAgIGlmIChlZGdlICE9IG51bGwpIHtcbiAgICAgICAgICBwYXRoLnVuc2hpZnQoZWRnZSk7XG4gICAgICAgIH1cbiAgICAgICAgbm9kZSA9IHByZWQ7XG4gICAgICB9XG4gICAgICByZXR1cm4gZWxlcy5zcGF3bihwYXRoKTtcbiAgICB9O1xuXG4gICAgLy8gSW5pdGlhbGl6YXRpb25zIHsgZGlzdCwgcHJlZCwgZWRnZSB9XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBudW1Ob2RlczsgaSsrKSB7XG4gICAgICB2YXIgbm9kZSA9IG5vZGVzW2ldO1xuICAgICAgdmFyIGluZm8gPSBnZXRJbmZvKG5vZGUpO1xuICAgICAgaWYgKG5vZGUuc2FtZShyb290KSkge1xuICAgICAgICBpbmZvLmRpc3QgPSAwO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaW5mby5kaXN0ID0gSW5maW5pdHk7XG4gICAgICB9XG4gICAgICBpbmZvLnByZWQgPSBudWxsO1xuICAgICAgaW5mby5lZGdlID0gbnVsbDtcbiAgICB9XG5cbiAgICAvLyBFZGdlcyByZWxheGF0aW9uXG4gICAgdmFyIHJlcGxhY2VkRWRnZSA9IGZhbHNlO1xuICAgIHZhciBjaGVja0ZvckVkZ2VSZXBsYWNlbWVudCA9IGZ1bmN0aW9uIGNoZWNrRm9yRWRnZVJlcGxhY2VtZW50KG5vZGUxLCBub2RlMiwgZWRnZSwgaW5mbzEsIGluZm8yLCB3ZWlnaHQpIHtcbiAgICAgIHZhciBkaXN0ID0gaW5mbzEuZGlzdCArIHdlaWdodDtcbiAgICAgIGlmIChkaXN0IDwgaW5mbzIuZGlzdCAmJiAhZWRnZS5zYW1lKGluZm8xLmVkZ2UpKSB7XG4gICAgICAgIGluZm8yLmRpc3QgPSBkaXN0O1xuICAgICAgICBpbmZvMi5wcmVkID0gbm9kZTE7XG4gICAgICAgIGluZm8yLmVkZ2UgPSBlZGdlO1xuICAgICAgICByZXBsYWNlZEVkZ2UgPSB0cnVlO1xuICAgICAgfVxuICAgIH07XG4gICAgZm9yICh2YXIgX2kgPSAxOyBfaSA8IG51bU5vZGVzOyBfaSsrKSB7XG4gICAgICByZXBsYWNlZEVkZ2UgPSBmYWxzZTtcbiAgICAgIGZvciAodmFyIGUgPSAwOyBlIDwgbnVtRWRnZXM7IGUrKykge1xuICAgICAgICB2YXIgZWRnZSA9IGVkZ2VzW2VdO1xuICAgICAgICB2YXIgc3JjID0gZWRnZS5zb3VyY2UoKTtcbiAgICAgICAgdmFyIHRndCA9IGVkZ2UudGFyZ2V0KCk7XG4gICAgICAgIHZhciBfd2VpZ2h0ID0gd2VpZ2h0Rm4oZWRnZSk7XG4gICAgICAgIHZhciBzcmNJbmZvID0gZ2V0SW5mbyhzcmMpO1xuICAgICAgICB2YXIgdGd0SW5mbyA9IGdldEluZm8odGd0KTtcbiAgICAgICAgY2hlY2tGb3JFZGdlUmVwbGFjZW1lbnQoc3JjLCB0Z3QsIGVkZ2UsIHNyY0luZm8sIHRndEluZm8sIF93ZWlnaHQpO1xuXG4gICAgICAgIC8vIElmIHVuZGlyZWN0ZWQgZ3JhcGgsIHdlIG5lZWQgdG8gdGFrZSBpbnRvIGFjY291bnQgdGhlICdyZXZlcnNlJyBlZGdlXG4gICAgICAgIGlmICghZGlyZWN0ZWQpIHtcbiAgICAgICAgICBjaGVja0ZvckVkZ2VSZXBsYWNlbWVudCh0Z3QsIHNyYywgZWRnZSwgdGd0SW5mbywgc3JjSW5mbywgX3dlaWdodCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmICghcmVwbGFjZWRFZGdlKSB7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH1cbiAgICBpZiAocmVwbGFjZWRFZGdlKSB7XG4gICAgICAvLyBDaGVjayBmb3IgbmVnYXRpdmUgd2VpZ2h0IGN5Y2xlc1xuICAgICAgdmFyIG5lZ2F0aXZlV2VpZ2h0Q3ljbGVJZHMgPSBbXTtcbiAgICAgIGZvciAodmFyIF9lID0gMDsgX2UgPCBudW1FZGdlczsgX2UrKykge1xuICAgICAgICB2YXIgX2VkZ2UgPSBlZGdlc1tfZV07XG4gICAgICAgIHZhciBfc3JjID0gX2VkZ2Uuc291cmNlKCk7XG4gICAgICAgIHZhciBfdGd0ID0gX2VkZ2UudGFyZ2V0KCk7XG4gICAgICAgIHZhciBfd2VpZ2h0MiA9IHdlaWdodEZuKF9lZGdlKTtcbiAgICAgICAgdmFyIHNyY0Rpc3QgPSBnZXRJbmZvKF9zcmMpLmRpc3Q7XG4gICAgICAgIHZhciB0Z3REaXN0ID0gZ2V0SW5mbyhfdGd0KS5kaXN0O1xuICAgICAgICBpZiAoc3JjRGlzdCArIF93ZWlnaHQyIDwgdGd0RGlzdCB8fCAhZGlyZWN0ZWQgJiYgdGd0RGlzdCArIF93ZWlnaHQyIDwgc3JjRGlzdCkge1xuICAgICAgICAgIGlmICghaGFzTmVnYXRpdmVXZWlnaHRDeWNsZSkge1xuICAgICAgICAgICAgd2FybignR3JhcGggY29udGFpbnMgYSBuZWdhdGl2ZSB3ZWlnaHQgY3ljbGUgZm9yIEJlbGxtYW4tRm9yZCcpO1xuICAgICAgICAgICAgaGFzTmVnYXRpdmVXZWlnaHRDeWNsZSA9IHRydWU7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmIChvcHRpb25zLmZpbmROZWdhdGl2ZVdlaWdodEN5Y2xlcyAhPT0gZmFsc2UpIHtcbiAgICAgICAgICAgIHZhciBuZWdhdGl2ZU5vZGVzID0gW107XG4gICAgICAgICAgICBpZiAoc3JjRGlzdCArIF93ZWlnaHQyIDwgdGd0RGlzdCkge1xuICAgICAgICAgICAgICBuZWdhdGl2ZU5vZGVzLnB1c2goX3NyYyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoIWRpcmVjdGVkICYmIHRndERpc3QgKyBfd2VpZ2h0MiA8IHNyY0Rpc3QpIHtcbiAgICAgICAgICAgICAgbmVnYXRpdmVOb2Rlcy5wdXNoKF90Z3QpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdmFyIG51bU5lZ2F0aXZlTm9kZXMgPSBuZWdhdGl2ZU5vZGVzLmxlbmd0aDtcbiAgICAgICAgICAgIGZvciAodmFyIG4gPSAwOyBuIDwgbnVtTmVnYXRpdmVOb2RlczsgbisrKSB7XG4gICAgICAgICAgICAgIHZhciBzdGFydCA9IG5lZ2F0aXZlTm9kZXNbbl07XG4gICAgICAgICAgICAgIHZhciBjeWNsZSA9IFtzdGFydF07XG4gICAgICAgICAgICAgIGN5Y2xlLnB1c2goZ2V0SW5mbyhzdGFydCkuZWRnZSk7XG4gICAgICAgICAgICAgIHZhciBfbm9kZSA9IGdldEluZm8oc3RhcnQpLnByZWQ7XG4gICAgICAgICAgICAgIHdoaWxlIChjeWNsZS5pbmRleE9mKF9ub2RlKSA9PT0gLTEpIHtcbiAgICAgICAgICAgICAgICBjeWNsZS5wdXNoKF9ub2RlKTtcbiAgICAgICAgICAgICAgICBjeWNsZS5wdXNoKGdldEluZm8oX25vZGUpLmVkZ2UpO1xuICAgICAgICAgICAgICAgIF9ub2RlID0gZ2V0SW5mbyhfbm9kZSkucHJlZDtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBjeWNsZSA9IGN5Y2xlLnNsaWNlKGN5Y2xlLmluZGV4T2YoX25vZGUpKTtcbiAgICAgICAgICAgICAgdmFyIHNtYWxsZXN0SWQgPSBjeWNsZVswXS5pZCgpO1xuICAgICAgICAgICAgICB2YXIgc21hbGxlc3RJbmRleCA9IDA7XG4gICAgICAgICAgICAgIGZvciAodmFyIGMgPSAyOyBjIDwgY3ljbGUubGVuZ3RoOyBjICs9IDIpIHtcbiAgICAgICAgICAgICAgICBpZiAoY3ljbGVbY10uaWQoKSA8IHNtYWxsZXN0SWQpIHtcbiAgICAgICAgICAgICAgICAgIHNtYWxsZXN0SWQgPSBjeWNsZVtjXS5pZCgpO1xuICAgICAgICAgICAgICAgICAgc21hbGxlc3RJbmRleCA9IGM7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGN5Y2xlID0gY3ljbGUuc2xpY2Uoc21hbGxlc3RJbmRleCkuY29uY2F0KGN5Y2xlLnNsaWNlKDAsIHNtYWxsZXN0SW5kZXgpKTtcbiAgICAgICAgICAgICAgY3ljbGUucHVzaChjeWNsZVswXSk7XG4gICAgICAgICAgICAgIHZhciBjeWNsZUlkID0gY3ljbGUubWFwKGZ1bmN0aW9uIChlbCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBlbC5pZCgpO1xuICAgICAgICAgICAgICB9KS5qb2luKFwiLFwiKTtcbiAgICAgICAgICAgICAgaWYgKG5lZ2F0aXZlV2VpZ2h0Q3ljbGVJZHMuaW5kZXhPZihjeWNsZUlkKSA9PT0gLTEpIHtcbiAgICAgICAgICAgICAgICBuZWdhdGl2ZVdlaWdodEN5Y2xlcy5wdXNoKGVsZXMuc3Bhd24oY3ljbGUpKTtcbiAgICAgICAgICAgICAgICBuZWdhdGl2ZVdlaWdodEN5Y2xlSWRzLnB1c2goY3ljbGVJZCk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiB7XG4gICAgICBkaXN0YW5jZVRvOiBkaXN0YW5jZVRvLFxuICAgICAgcGF0aFRvOiBwYXRoVG8sXG4gICAgICBoYXNOZWdhdGl2ZVdlaWdodEN5Y2xlOiBoYXNOZWdhdGl2ZVdlaWdodEN5Y2xlLFxuICAgICAgbmVnYXRpdmVXZWlnaHRDeWNsZXM6IG5lZ2F0aXZlV2VpZ2h0Q3ljbGVzXG4gICAgfTtcbiAgfSAvLyBiZWxsbWFuRm9yZFxufTsgLy8gZWxlc2ZuXG5cbnZhciBzcXJ0MiA9IE1hdGguc3FydCgyKTtcblxuLy8gRnVuY3Rpb24gd2hpY2ggY29sYXBzZXMgMiAobWV0YSkgbm9kZXMgaW50byBvbmVcbi8vIFVwZGF0ZXMgdGhlIHJlbWFpbmluZyBlZGdlIGxpc3RzXG4vLyBSZWNlaXZlcyBhcyBhIHBhcmFtYXRlciB0aGUgZWRnZSB3aGljaCBjYXVzZXMgdGhlIGNvbGxhcHNlXG52YXIgY29sbGFwc2UgPSBmdW5jdGlvbiBjb2xsYXBzZShlZGdlSW5kZXgsIG5vZGVNYXAsIHJlbWFpbmluZ0VkZ2VzKSB7XG4gIGlmIChyZW1haW5pbmdFZGdlcy5sZW5ndGggPT09IDApIHtcbiAgICBlcnJvcihcIkthcmdlci1TdGVpbiBtdXN0IGJlIHJ1biBvbiBhIGNvbm5lY3RlZCAoc3ViKWdyYXBoXCIpO1xuICB9XG4gIHZhciBlZGdlSW5mbyA9IHJlbWFpbmluZ0VkZ2VzW2VkZ2VJbmRleF07XG4gIHZhciBzb3VyY2VJbiA9IGVkZ2VJbmZvWzFdO1xuICB2YXIgdGFyZ2V0SW4gPSBlZGdlSW5mb1syXTtcbiAgdmFyIHBhcnRpdGlvbjEgPSBub2RlTWFwW3NvdXJjZUluXTtcbiAgdmFyIHBhcnRpdGlvbjIgPSBub2RlTWFwW3RhcmdldEluXTtcbiAgdmFyIG5ld0VkZ2VzID0gcmVtYWluaW5nRWRnZXM7IC8vIHJlLXVzZSBhcnJheVxuXG4gIC8vIERlbGV0ZSBhbGwgZWRnZXMgYmV0d2VlbiBwYXJ0aXRpb24xIGFuZCBwYXJ0aXRpb24yXG4gIGZvciAodmFyIGkgPSBuZXdFZGdlcy5sZW5ndGggLSAxOyBpID49IDA7IGktLSkge1xuICAgIHZhciBlZGdlID0gbmV3RWRnZXNbaV07XG4gICAgdmFyIHNyYyA9IGVkZ2VbMV07XG4gICAgdmFyIHRndCA9IGVkZ2VbMl07XG4gICAgaWYgKG5vZGVNYXBbc3JjXSA9PT0gcGFydGl0aW9uMSAmJiBub2RlTWFwW3RndF0gPT09IHBhcnRpdGlvbjIgfHwgbm9kZU1hcFtzcmNdID09PSBwYXJ0aXRpb24yICYmIG5vZGVNYXBbdGd0XSA9PT0gcGFydGl0aW9uMSkge1xuICAgICAgbmV3RWRnZXMuc3BsaWNlKGksIDEpO1xuICAgIH1cbiAgfVxuXG4gIC8vIEFsbCBlZGdlcyBwb2ludGluZyB0byBwYXJ0aXRpb24yIHNob3VsZCBub3cgcG9pbnQgdG8gcGFydGl0aW9uMVxuICBmb3IgKHZhciBfaSA9IDA7IF9pIDwgbmV3RWRnZXMubGVuZ3RoOyBfaSsrKSB7XG4gICAgdmFyIF9lZGdlID0gbmV3RWRnZXNbX2ldO1xuICAgIGlmIChfZWRnZVsxXSA9PT0gcGFydGl0aW9uMikge1xuICAgICAgLy8gQ2hlY2sgc291cmNlXG4gICAgICBuZXdFZGdlc1tfaV0gPSBfZWRnZS5zbGljZSgpOyAvLyBjb3B5XG4gICAgICBuZXdFZGdlc1tfaV1bMV0gPSBwYXJ0aXRpb24xO1xuICAgIH0gZWxzZSBpZiAoX2VkZ2VbMl0gPT09IHBhcnRpdGlvbjIpIHtcbiAgICAgIC8vIENoZWNrIHRhcmdldFxuICAgICAgbmV3RWRnZXNbX2ldID0gX2VkZ2Uuc2xpY2UoKTsgLy8gY29weVxuICAgICAgbmV3RWRnZXNbX2ldWzJdID0gcGFydGl0aW9uMTtcbiAgICB9XG4gIH1cblxuICAvLyBNb3ZlIGFsbCBub2RlcyBmcm9tIHBhcnRpdGlvbjIgdG8gcGFydGl0aW9uMVxuICBmb3IgKHZhciBfaTIgPSAwOyBfaTIgPCBub2RlTWFwLmxlbmd0aDsgX2kyKyspIHtcbiAgICBpZiAobm9kZU1hcFtfaTJdID09PSBwYXJ0aXRpb24yKSB7XG4gICAgICBub2RlTWFwW19pMl0gPSBwYXJ0aXRpb24xO1xuICAgIH1cbiAgfVxuICByZXR1cm4gbmV3RWRnZXM7XG59O1xuXG4vLyBDb250cmFjdHMgYSBncmFwaCB1bnRpbCB3ZSByZWFjaCBhIGNlcnRhaW4gbnVtYmVyIG9mIG1ldGEgbm9kZXNcbnZhciBjb250cmFjdFVudGlsID0gZnVuY3Rpb24gY29udHJhY3RVbnRpbChtZXRhTm9kZU1hcCwgcmVtYWluaW5nRWRnZXMsIHNpemUsIHNpemVMaW1pdCkge1xuICB3aGlsZSAoc2l6ZSA+IHNpemVMaW1pdCkge1xuICAgIC8vIENob29zZSBhbiBlZGdlIHJhbmRvbWx5XG4gICAgdmFyIGVkZ2VJbmRleCA9IE1hdGguZmxvb3IoTWF0aC5yYW5kb20oKSAqIHJlbWFpbmluZ0VkZ2VzLmxlbmd0aCk7XG5cbiAgICAvLyBDb2xsYXBzZSBncmFwaCBiYXNlZCBvbiBlZGdlXG4gICAgcmVtYWluaW5nRWRnZXMgPSBjb2xsYXBzZShlZGdlSW5kZXgsIG1ldGFOb2RlTWFwLCByZW1haW5pbmdFZGdlcyk7XG4gICAgc2l6ZS0tO1xuICB9XG4gIHJldHVybiByZW1haW5pbmdFZGdlcztcbn07XG52YXIgZWxlc2ZuJHAgPSB7XG4gIC8vIENvbXB1dGVzIHRoZSBtaW5pbXVtIGN1dCBvZiBhbiB1bmRpcmVjdGVkIGdyYXBoXG4gIC8vIFJldHVybnMgdGhlIGNvcnJlY3QgYW5zd2VyIHdpdGggaGlnaCBwcm9iYWJpbGl0eVxuICBrYXJnZXJTdGVpbjogZnVuY3Rpb24ga2FyZ2VyU3RlaW4oKSB7XG4gICAgdmFyIF90aGlzID0gdGhpcztcbiAgICB2YXIgX3RoaXMkYnlHcm91cCA9IHRoaXMuYnlHcm91cCgpLFxuICAgICAgbm9kZXMgPSBfdGhpcyRieUdyb3VwLm5vZGVzLFxuICAgICAgZWRnZXMgPSBfdGhpcyRieUdyb3VwLmVkZ2VzO1xuICAgIGVkZ2VzLnVubWVyZ2VCeShmdW5jdGlvbiAoZWRnZSkge1xuICAgICAgcmV0dXJuIGVkZ2UuaXNMb29wKCk7XG4gICAgfSk7XG4gICAgdmFyIG51bU5vZGVzID0gbm9kZXMubGVuZ3RoO1xuICAgIHZhciBudW1FZGdlcyA9IGVkZ2VzLmxlbmd0aDtcbiAgICB2YXIgbnVtSXRlciA9IE1hdGguY2VpbChNYXRoLnBvdyhNYXRoLmxvZyhudW1Ob2RlcykgLyBNYXRoLkxOMiwgMikpO1xuICAgIHZhciBzdG9wU2l6ZSA9IE1hdGguZmxvb3IobnVtTm9kZXMgLyBzcXJ0Mik7XG4gICAgaWYgKG51bU5vZGVzIDwgMikge1xuICAgICAgZXJyb3IoJ0F0IGxlYXN0IDIgbm9kZXMgYXJlIHJlcXVpcmVkIGZvciBLYXJnZXItU3RlaW4gYWxnb3JpdGhtJyk7XG4gICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cblxuICAgIC8vIE5vdyBzdG9yZSBlZGdlIGRlc3RpbmF0aW9uIGFzIGluZGV4ZXNcbiAgICAvLyBGb3JtYXQgZm9yIGVhY2ggZWRnZSAoZWRnZSBpbmRleCwgc291cmNlIG5vZGUgaW5kZXgsIHRhcmdldCBub2RlIGluZGV4KVxuICAgIHZhciBlZGdlSW5kZXhlcyA9IFtdO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbnVtRWRnZXM7IGkrKykge1xuICAgICAgdmFyIGUgPSBlZGdlc1tpXTtcbiAgICAgIGVkZ2VJbmRleGVzLnB1c2goW2ksIG5vZGVzLmluZGV4T2YoZS5zb3VyY2UoKSksIG5vZGVzLmluZGV4T2YoZS50YXJnZXQoKSldKTtcbiAgICB9XG5cbiAgICAvLyBXZSB3aWxsIHN0b3JlIHRoZSBiZXN0IGN1dCBmb3VuZCBoZXJlXG4gICAgdmFyIG1pbkN1dFNpemUgPSBJbmZpbml0eTtcbiAgICB2YXIgbWluQ3V0RWRnZUluZGV4ZXMgPSBbXTtcbiAgICB2YXIgbWluQ3V0Tm9kZU1hcCA9IG5ldyBBcnJheShudW1Ob2Rlcyk7XG5cbiAgICAvLyBJbml0aWFsIG1ldGEgbm9kZSBwYXJ0aXRpb25cbiAgICB2YXIgbWV0YU5vZGVNYXAgPSBuZXcgQXJyYXkobnVtTm9kZXMpO1xuICAgIHZhciBtZXRhTm9kZU1hcDIgPSBuZXcgQXJyYXkobnVtTm9kZXMpO1xuICAgIHZhciBjb3B5Tm9kZXNNYXAgPSBmdW5jdGlvbiBjb3B5Tm9kZXNNYXAoZnJvbSwgdG8pIHtcbiAgICAgIGZvciAodmFyIF9pMyA9IDA7IF9pMyA8IG51bU5vZGVzOyBfaTMrKykge1xuICAgICAgICB0b1tfaTNdID0gZnJvbVtfaTNdO1xuICAgICAgfVxuICAgIH07XG5cbiAgICAvLyBNYWluIGxvb3BcbiAgICBmb3IgKHZhciBpdGVyID0gMDsgaXRlciA8PSBudW1JdGVyOyBpdGVyKyspIHtcbiAgICAgIC8vIFJlc2V0IG1ldGEgbm9kZSBwYXJ0aXRpb25cbiAgICAgIGZvciAodmFyIF9pNCA9IDA7IF9pNCA8IG51bU5vZGVzOyBfaTQrKykge1xuICAgICAgICBtZXRhTm9kZU1hcFtfaTRdID0gX2k0O1xuICAgICAgfVxuXG4gICAgICAvLyBDb250cmFjdCB1bnRpbCBzdG9wIHBvaW50IChzdG9wU2l6ZSBub2RlcylcbiAgICAgIHZhciBlZGdlc1N0YXRlID0gY29udHJhY3RVbnRpbChtZXRhTm9kZU1hcCwgZWRnZUluZGV4ZXMuc2xpY2UoKSwgbnVtTm9kZXMsIHN0b3BTaXplKTtcbiAgICAgIHZhciBlZGdlc1N0YXRlMiA9IGVkZ2VzU3RhdGUuc2xpY2UoKTsgLy8gY29weVxuXG4gICAgICAvLyBDcmVhdGUgYSBjb3B5IG9mIHRoZSBjb2xhcHNlZCBub2RlcyBzdGF0ZVxuICAgICAgY29weU5vZGVzTWFwKG1ldGFOb2RlTWFwLCBtZXRhTm9kZU1hcDIpO1xuXG4gICAgICAvLyBSdW4gMiBpdGVyYXRpb25zIHN0YXJ0aW5nIGluIHRoZSBzdG9wIHN0YXRlXG4gICAgICB2YXIgcmVzMSA9IGNvbnRyYWN0VW50aWwobWV0YU5vZGVNYXAsIGVkZ2VzU3RhdGUsIHN0b3BTaXplLCAyKTtcbiAgICAgIHZhciByZXMyID0gY29udHJhY3RVbnRpbChtZXRhTm9kZU1hcDIsIGVkZ2VzU3RhdGUyLCBzdG9wU2l6ZSwgMik7XG5cbiAgICAgIC8vIElzIGFueSBvZiB0aGUgMiByZXN1bHRzIHRoZSBiZXN0IGN1dCBzbyBmYXI/XG4gICAgICBpZiAocmVzMS5sZW5ndGggPD0gcmVzMi5sZW5ndGggJiYgcmVzMS5sZW5ndGggPCBtaW5DdXRTaXplKSB7XG4gICAgICAgIG1pbkN1dFNpemUgPSByZXMxLmxlbmd0aDtcbiAgICAgICAgbWluQ3V0RWRnZUluZGV4ZXMgPSByZXMxO1xuICAgICAgICBjb3B5Tm9kZXNNYXAobWV0YU5vZGVNYXAsIG1pbkN1dE5vZGVNYXApO1xuICAgICAgfSBlbHNlIGlmIChyZXMyLmxlbmd0aCA8PSByZXMxLmxlbmd0aCAmJiByZXMyLmxlbmd0aCA8IG1pbkN1dFNpemUpIHtcbiAgICAgICAgbWluQ3V0U2l6ZSA9IHJlczIubGVuZ3RoO1xuICAgICAgICBtaW5DdXRFZGdlSW5kZXhlcyA9IHJlczI7XG4gICAgICAgIGNvcHlOb2Rlc01hcChtZXRhTm9kZU1hcDIsIG1pbkN1dE5vZGVNYXApO1xuICAgICAgfVxuICAgIH0gLy8gZW5kIG9mIG1haW4gbG9vcFxuXG4gICAgLy8gQ29uc3RydWN0IHJlc3VsdFxuICAgIHZhciBjdXQgPSB0aGlzLnNwYXduKG1pbkN1dEVkZ2VJbmRleGVzLm1hcChmdW5jdGlvbiAoZSkge1xuICAgICAgcmV0dXJuIGVkZ2VzW2VbMF1dO1xuICAgIH0pKTtcbiAgICB2YXIgcGFydGl0aW9uMSA9IHRoaXMuc3Bhd24oKTtcbiAgICB2YXIgcGFydGl0aW9uMiA9IHRoaXMuc3Bhd24oKTtcblxuICAgIC8vIHRyYXZlcnNlIG1ldGFOb2RlTWFwIGZvciBiZXN0IGN1dFxuICAgIHZhciB3aXRuZXNzTm9kZVBhcnRpdGlvbiA9IG1pbkN1dE5vZGVNYXBbMF07XG4gICAgZm9yICh2YXIgX2k1ID0gMDsgX2k1IDwgbWluQ3V0Tm9kZU1hcC5sZW5ndGg7IF9pNSsrKSB7XG4gICAgICB2YXIgcGFydGl0aW9uSWQgPSBtaW5DdXROb2RlTWFwW19pNV07XG4gICAgICB2YXIgbm9kZSA9IG5vZGVzW19pNV07XG4gICAgICBpZiAocGFydGl0aW9uSWQgPT09IHdpdG5lc3NOb2RlUGFydGl0aW9uKSB7XG4gICAgICAgIHBhcnRpdGlvbjEubWVyZ2Uobm9kZSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBwYXJ0aXRpb24yLm1lcmdlKG5vZGUpO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIGNvbnN0cnVjdCBjb21wb25lbnRzIGNvcnJlc3BvbmRpbmcgdG8gZWFjaCBkaXNqb2ludCBzdWJzZXQgb2Ygbm9kZXNcbiAgICB2YXIgY29uc3RydWN0Q29tcG9uZW50ID0gZnVuY3Rpb24gY29uc3RydWN0Q29tcG9uZW50KHN1YnNldCkge1xuICAgICAgdmFyIGNvbXBvbmVudCA9IF90aGlzLnNwYXduKCk7XG4gICAgICBzdWJzZXQuZm9yRWFjaChmdW5jdGlvbiAobm9kZSkge1xuICAgICAgICBjb21wb25lbnQubWVyZ2Uobm9kZSk7XG4gICAgICAgIG5vZGUuY29ubmVjdGVkRWRnZXMoKS5mb3JFYWNoKGZ1bmN0aW9uIChlZGdlKSB7XG4gICAgICAgICAgLy8gZW5zdXJlIGVkZ2UgaXMgd2l0aGluIGNhbGxpbmcgY29sbGVjdGlvbiBhbmQgZWRnZSBpcyBub3QgaW4gY3V0XG4gICAgICAgICAgaWYgKF90aGlzLmNvbnRhaW5zKGVkZ2UpICYmICFjdXQuY29udGFpbnMoZWRnZSkpIHtcbiAgICAgICAgICAgIGNvbXBvbmVudC5tZXJnZShlZGdlKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfSk7XG4gICAgICByZXR1cm4gY29tcG9uZW50O1xuICAgIH07XG4gICAgdmFyIGNvbXBvbmVudHMgPSBbY29uc3RydWN0Q29tcG9uZW50KHBhcnRpdGlvbjEpLCBjb25zdHJ1Y3RDb21wb25lbnQocGFydGl0aW9uMildO1xuICAgIHZhciByZXQgPSB7XG4gICAgICBjdXQ6IGN1dCxcbiAgICAgIGNvbXBvbmVudHM6IGNvbXBvbmVudHMsXG4gICAgICAvLyBuLmIuIHBhcnRpdGlvbnMgYXJlIGluY2x1ZGVkIHRvIGJlIGNvbXBhdGlibGUgd2l0aCB0aGUgb2xkIGFwaSBzcGVjXG4gICAgICAvLyAoY291bGQgYmUgcmVtb3ZlZCBpbiBhIGZ1dHVyZSBtYWpvciB2ZXJzaW9uKVxuICAgICAgcGFydGl0aW9uMTogcGFydGl0aW9uMSxcbiAgICAgIHBhcnRpdGlvbjI6IHBhcnRpdGlvbjJcbiAgICB9O1xuICAgIHJldHVybiByZXQ7XG4gIH1cbn07IC8vIGVsZXNmblxuXG52YXIgY29weVBvc2l0aW9uID0gZnVuY3Rpb24gY29weVBvc2l0aW9uKHApIHtcbiAgcmV0dXJuIHtcbiAgICB4OiBwLngsXG4gICAgeTogcC55XG4gIH07XG59O1xudmFyIG1vZGVsVG9SZW5kZXJlZFBvc2l0aW9uJDEgPSBmdW5jdGlvbiBtb2RlbFRvUmVuZGVyZWRQb3NpdGlvbihwLCB6b29tLCBwYW4pIHtcbiAgcmV0dXJuIHtcbiAgICB4OiBwLnggKiB6b29tICsgcGFuLngsXG4gICAgeTogcC55ICogem9vbSArIHBhbi55XG4gIH07XG59O1xudmFyIHJlbmRlcmVkVG9Nb2RlbFBvc2l0aW9uID0gZnVuY3Rpb24gcmVuZGVyZWRUb01vZGVsUG9zaXRpb24ocCwgem9vbSwgcGFuKSB7XG4gIHJldHVybiB7XG4gICAgeDogKHAueCAtIHBhbi54KSAvIHpvb20sXG4gICAgeTogKHAueSAtIHBhbi55KSAvIHpvb21cbiAgfTtcbn07XG52YXIgYXJyYXkycG9pbnQgPSBmdW5jdGlvbiBhcnJheTJwb2ludChhcnIpIHtcbiAgcmV0dXJuIHtcbiAgICB4OiBhcnJbMF0sXG4gICAgeTogYXJyWzFdXG4gIH07XG59O1xudmFyIG1pbiA9IGZ1bmN0aW9uIG1pbihhcnIpIHtcbiAgdmFyIGJlZ2luID0gYXJndW1lbnRzLmxlbmd0aCA+IDEgJiYgYXJndW1lbnRzWzFdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMV0gOiAwO1xuICB2YXIgZW5kID0gYXJndW1lbnRzLmxlbmd0aCA+IDIgJiYgYXJndW1lbnRzWzJdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMl0gOiBhcnIubGVuZ3RoO1xuICB2YXIgbWluID0gSW5maW5pdHk7XG4gIGZvciAodmFyIGkgPSBiZWdpbjsgaSA8IGVuZDsgaSsrKSB7XG4gICAgdmFyIHZhbCA9IGFycltpXTtcbiAgICBpZiAoaXNGaW5pdGUodmFsKSkge1xuICAgICAgbWluID0gTWF0aC5taW4odmFsLCBtaW4pO1xuICAgIH1cbiAgfVxuICByZXR1cm4gbWluO1xufTtcbnZhciBtYXggPSBmdW5jdGlvbiBtYXgoYXJyKSB7XG4gIHZhciBiZWdpbiA9IGFyZ3VtZW50cy5sZW5ndGggPiAxICYmIGFyZ3VtZW50c1sxXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzFdIDogMDtcbiAgdmFyIGVuZCA9IGFyZ3VtZW50cy5sZW5ndGggPiAyICYmIGFyZ3VtZW50c1syXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzJdIDogYXJyLmxlbmd0aDtcbiAgdmFyIG1heCA9IC1JbmZpbml0eTtcbiAgZm9yICh2YXIgaSA9IGJlZ2luOyBpIDwgZW5kOyBpKyspIHtcbiAgICB2YXIgdmFsID0gYXJyW2ldO1xuICAgIGlmIChpc0Zpbml0ZSh2YWwpKSB7XG4gICAgICBtYXggPSBNYXRoLm1heCh2YWwsIG1heCk7XG4gICAgfVxuICB9XG4gIHJldHVybiBtYXg7XG59O1xudmFyIG1lYW4gPSBmdW5jdGlvbiBtZWFuKGFycikge1xuICB2YXIgYmVnaW4gPSBhcmd1bWVudHMubGVuZ3RoID4gMSAmJiBhcmd1bWVudHNbMV0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1sxXSA6IDA7XG4gIHZhciBlbmQgPSBhcmd1bWVudHMubGVuZ3RoID4gMiAmJiBhcmd1bWVudHNbMl0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1syXSA6IGFyci5sZW5ndGg7XG4gIHZhciB0b3RhbCA9IDA7XG4gIHZhciBuID0gMDtcbiAgZm9yICh2YXIgaSA9IGJlZ2luOyBpIDwgZW5kOyBpKyspIHtcbiAgICB2YXIgdmFsID0gYXJyW2ldO1xuICAgIGlmIChpc0Zpbml0ZSh2YWwpKSB7XG4gICAgICB0b3RhbCArPSB2YWw7XG4gICAgICBuKys7XG4gICAgfVxuICB9XG4gIHJldHVybiB0b3RhbCAvIG47XG59O1xudmFyIG1lZGlhbiA9IGZ1bmN0aW9uIG1lZGlhbihhcnIpIHtcbiAgdmFyIGJlZ2luID0gYXJndW1lbnRzLmxlbmd0aCA+IDEgJiYgYXJndW1lbnRzWzFdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMV0gOiAwO1xuICB2YXIgZW5kID0gYXJndW1lbnRzLmxlbmd0aCA+IDIgJiYgYXJndW1lbnRzWzJdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMl0gOiBhcnIubGVuZ3RoO1xuICB2YXIgY29weSA9IGFyZ3VtZW50cy5sZW5ndGggPiAzICYmIGFyZ3VtZW50c1szXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzNdIDogdHJ1ZTtcbiAgdmFyIHNvcnQgPSBhcmd1bWVudHMubGVuZ3RoID4gNCAmJiBhcmd1bWVudHNbNF0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1s0XSA6IHRydWU7XG4gIHZhciBpbmNsdWRlSG9sZXMgPSBhcmd1bWVudHMubGVuZ3RoID4gNSAmJiBhcmd1bWVudHNbNV0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1s1XSA6IHRydWU7XG4gIGlmIChjb3B5KSB7XG4gICAgYXJyID0gYXJyLnNsaWNlKGJlZ2luLCBlbmQpO1xuICB9IGVsc2Uge1xuICAgIGlmIChlbmQgPCBhcnIubGVuZ3RoKSB7XG4gICAgICBhcnIuc3BsaWNlKGVuZCwgYXJyLmxlbmd0aCAtIGVuZCk7XG4gICAgfVxuICAgIGlmIChiZWdpbiA+IDApIHtcbiAgICAgIGFyci5zcGxpY2UoMCwgYmVnaW4pO1xuICAgIH1cbiAgfVxuXG4gIC8vIGFsbCBub24gZmluaXRlIChlLmcuIEluZmluaXR5LCBOYU4pIGVsZW1lbnRzIG11c3QgYmUgLUluZmluaXR5IHNvIHRoZXkgZ28gdG8gdGhlIHN0YXJ0XG4gIHZhciBvZmYgPSAwOyAvLyBvZmZzZXQgZnJvbSBub24tZmluaXRlIHZhbHVlc1xuICBmb3IgKHZhciBpID0gYXJyLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSB7XG4gICAgdmFyIHYgPSBhcnJbaV07XG4gICAgaWYgKGluY2x1ZGVIb2xlcykge1xuICAgICAgaWYgKCFpc0Zpbml0ZSh2KSkge1xuICAgICAgICBhcnJbaV0gPSAtSW5maW5pdHk7XG4gICAgICAgIG9mZisrO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICAvLyBqdXN0IHJlbW92ZSBpdCBpZiB3ZSBkb24ndCB3YW50IHRvIGNvbnNpZGVyIGhvbGVzXG4gICAgICBhcnIuc3BsaWNlKGksIDEpO1xuICAgIH1cbiAgfVxuICBpZiAoc29ydCkge1xuICAgIGFyci5zb3J0KGZ1bmN0aW9uIChhLCBiKSB7XG4gICAgICByZXR1cm4gYSAtIGI7XG4gICAgfSk7IC8vIHJlcXVpcmVzIGNvcHkgPSB0cnVlIGlmIHlvdSBkb24ndCB3YW50IHRvIGNoYW5nZSB0aGUgb3JpZ1xuICB9XG4gIHZhciBsZW4gPSBhcnIubGVuZ3RoO1xuICB2YXIgbWlkID0gTWF0aC5mbG9vcihsZW4gLyAyKTtcbiAgaWYgKGxlbiAlIDIgIT09IDApIHtcbiAgICByZXR1cm4gYXJyW21pZCArIDEgKyBvZmZdO1xuICB9IGVsc2Uge1xuICAgIHJldHVybiAoYXJyW21pZCAtIDEgKyBvZmZdICsgYXJyW21pZCArIG9mZl0pIC8gMjtcbiAgfVxufTtcbnZhciBkZWcycmFkID0gZnVuY3Rpb24gZGVnMnJhZChkZWcpIHtcbiAgcmV0dXJuIE1hdGguUEkgKiBkZWcgLyAxODA7XG59O1xudmFyIGdldEFuZ2xlRnJvbURpc3AgPSBmdW5jdGlvbiBnZXRBbmdsZUZyb21EaXNwKGRpc3BYLCBkaXNwWSkge1xuICByZXR1cm4gTWF0aC5hdGFuMihkaXNwWSwgZGlzcFgpIC0gTWF0aC5QSSAvIDI7XG59O1xudmFyIGxvZzIgPSBNYXRoLmxvZzIgfHwgZnVuY3Rpb24gKG4pIHtcbiAgcmV0dXJuIE1hdGgubG9nKG4pIC8gTWF0aC5sb2coMik7XG59O1xudmFyIHNpZ251bSA9IGZ1bmN0aW9uIHNpZ251bSh4KSB7XG4gIGlmICh4ID4gMCkge1xuICAgIHJldHVybiAxO1xuICB9IGVsc2UgaWYgKHggPCAwKSB7XG4gICAgcmV0dXJuIC0xO1xuICB9IGVsc2Uge1xuICAgIHJldHVybiAwO1xuICB9XG59O1xudmFyIGRpc3QgPSBmdW5jdGlvbiBkaXN0KHAxLCBwMikge1xuICByZXR1cm4gTWF0aC5zcXJ0KHNxZGlzdChwMSwgcDIpKTtcbn07XG52YXIgc3FkaXN0ID0gZnVuY3Rpb24gc3FkaXN0KHAxLCBwMikge1xuICB2YXIgZHggPSBwMi54IC0gcDEueDtcbiAgdmFyIGR5ID0gcDIueSAtIHAxLnk7XG4gIHJldHVybiBkeCAqIGR4ICsgZHkgKiBkeTtcbn07XG52YXIgaW5QbGFjZVN1bU5vcm1hbGl6ZSA9IGZ1bmN0aW9uIGluUGxhY2VTdW1Ob3JtYWxpemUodikge1xuICB2YXIgbGVuZ3RoID0gdi5sZW5ndGg7XG5cbiAgLy8gRmlyc3QsIGdldCBzdW0gb2YgYWxsIGVsZW1lbnRzXG4gIHZhciB0b3RhbCA9IDA7XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHtcbiAgICB0b3RhbCArPSB2W2ldO1xuICB9XG5cbiAgLy8gTm93LCBkaXZpZGUgZWFjaCBieSB0aGUgc3VtIG9mIGFsbCBlbGVtZW50c1xuICBmb3IgKHZhciBfaSA9IDA7IF9pIDwgbGVuZ3RoOyBfaSsrKSB7XG4gICAgdltfaV0gPSB2W19pXSAvIHRvdGFsO1xuICB9XG4gIHJldHVybiB2O1xufTtcblxuLy8gZnJvbSBodHRwOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL0LDqXppZXJfY3VydmUjUXVhZHJhdGljX2N1cnZlc1xudmFyIHFiZXppZXJBdCA9IGZ1bmN0aW9uIHFiZXppZXJBdChwMCwgcDEsIHAyLCB0KSB7XG4gIHJldHVybiAoMSAtIHQpICogKDEgLSB0KSAqIHAwICsgMiAqICgxIC0gdCkgKiB0ICogcDEgKyB0ICogdCAqIHAyO1xufTtcbnZhciBxYmV6aWVyUHRBdCA9IGZ1bmN0aW9uIHFiZXppZXJQdEF0KHAwLCBwMSwgcDIsIHQpIHtcbiAgcmV0dXJuIHtcbiAgICB4OiBxYmV6aWVyQXQocDAueCwgcDEueCwgcDIueCwgdCksXG4gICAgeTogcWJlemllckF0KHAwLnksIHAxLnksIHAyLnksIHQpXG4gIH07XG59O1xudmFyIGxpbmVBdCA9IGZ1bmN0aW9uIGxpbmVBdChwMCwgcDEsIHQsIGQpIHtcbiAgdmFyIHZlYyA9IHtcbiAgICB4OiBwMS54IC0gcDAueCxcbiAgICB5OiBwMS55IC0gcDAueVxuICB9O1xuICB2YXIgdmVjRGlzdCA9IGRpc3QocDAsIHAxKTtcbiAgdmFyIG5vcm1WZWMgPSB7XG4gICAgeDogdmVjLnggLyB2ZWNEaXN0LFxuICAgIHk6IHZlYy55IC8gdmVjRGlzdFxuICB9O1xuICB0ID0gdCA9PSBudWxsID8gMCA6IHQ7XG4gIGQgPSBkICE9IG51bGwgPyBkIDogdCAqIHZlY0Rpc3Q7XG4gIHJldHVybiB7XG4gICAgeDogcDAueCArIG5vcm1WZWMueCAqIGQsXG4gICAgeTogcDAueSArIG5vcm1WZWMueSAqIGRcbiAgfTtcbn07XG52YXIgYm91bmQgPSBmdW5jdGlvbiBib3VuZChtaW4sIHZhbCwgbWF4KSB7XG4gIHJldHVybiBNYXRoLm1heChtaW4sIE1hdGgubWluKG1heCwgdmFsKSk7XG59O1xuXG4vLyBtYWtlcyBhIGZ1bGwgYmIgKHgxLCB5MSwgeDIsIHkyLCB3LCBoKSBmcm9tIGltcGxpY2l0IHBhcmFtc1xudmFyIG1ha2VCb3VuZGluZ0JveCA9IGZ1bmN0aW9uIG1ha2VCb3VuZGluZ0JveChiYikge1xuICBpZiAoYmIgPT0gbnVsbCkge1xuICAgIHJldHVybiB7XG4gICAgICB4MTogSW5maW5pdHksXG4gICAgICB5MTogSW5maW5pdHksXG4gICAgICB4MjogLUluZmluaXR5LFxuICAgICAgeTI6IC1JbmZpbml0eSxcbiAgICAgIHc6IDAsXG4gICAgICBoOiAwXG4gICAgfTtcbiAgfSBlbHNlIGlmIChiYi54MSAhPSBudWxsICYmIGJiLnkxICE9IG51bGwpIHtcbiAgICBpZiAoYmIueDIgIT0gbnVsbCAmJiBiYi55MiAhPSBudWxsICYmIGJiLngyID49IGJiLngxICYmIGJiLnkyID49IGJiLnkxKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICB4MTogYmIueDEsXG4gICAgICAgIHkxOiBiYi55MSxcbiAgICAgICAgeDI6IGJiLngyLFxuICAgICAgICB5MjogYmIueTIsXG4gICAgICAgIHc6IGJiLngyIC0gYmIueDEsXG4gICAgICAgIGg6IGJiLnkyIC0gYmIueTFcbiAgICAgIH07XG4gICAgfSBlbHNlIGlmIChiYi53ICE9IG51bGwgJiYgYmIuaCAhPSBudWxsICYmIGJiLncgPj0gMCAmJiBiYi5oID49IDApIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHgxOiBiYi54MSxcbiAgICAgICAgeTE6IGJiLnkxLFxuICAgICAgICB4MjogYmIueDEgKyBiYi53LFxuICAgICAgICB5MjogYmIueTEgKyBiYi5oLFxuICAgICAgICB3OiBiYi53LFxuICAgICAgICBoOiBiYi5oXG4gICAgICB9O1xuICAgIH1cbiAgfVxufTtcbnZhciBjb3B5Qm91bmRpbmdCb3ggPSBmdW5jdGlvbiBjb3B5Qm91bmRpbmdCb3goYmIpIHtcbiAgcmV0dXJuIHtcbiAgICB4MTogYmIueDEsXG4gICAgeDI6IGJiLngyLFxuICAgIHc6IGJiLncsXG4gICAgeTE6IGJiLnkxLFxuICAgIHkyOiBiYi55MixcbiAgICBoOiBiYi5oXG4gIH07XG59O1xudmFyIGNsZWFyQm91bmRpbmdCb3ggPSBmdW5jdGlvbiBjbGVhckJvdW5kaW5nQm94KGJiKSB7XG4gIGJiLngxID0gSW5maW5pdHk7XG4gIGJiLnkxID0gSW5maW5pdHk7XG4gIGJiLngyID0gLUluZmluaXR5O1xuICBiYi55MiA9IC1JbmZpbml0eTtcbiAgYmIudyA9IDA7XG4gIGJiLmggPSAwO1xufTtcbnZhciBzaGlmdEJvdW5kaW5nQm94ID0gZnVuY3Rpb24gc2hpZnRCb3VuZGluZ0JveChiYiwgZHgsIGR5KSB7XG4gIHJldHVybiB7XG4gICAgeDE6IGJiLngxICsgZHgsXG4gICAgeDI6IGJiLngyICsgZHgsXG4gICAgeTE6IGJiLnkxICsgZHksXG4gICAgeTI6IGJiLnkyICsgZHksXG4gICAgdzogYmIudyxcbiAgICBoOiBiYi5oXG4gIH07XG59O1xudmFyIHVwZGF0ZUJvdW5kaW5nQm94ID0gZnVuY3Rpb24gdXBkYXRlQm91bmRpbmdCb3goYmIxLCBiYjIpIHtcbiAgLy8gdXBkYXRlIGJiMSB3aXRoIGJiMiBib3VuZHNcblxuICBiYjEueDEgPSBNYXRoLm1pbihiYjEueDEsIGJiMi54MSk7XG4gIGJiMS54MiA9IE1hdGgubWF4KGJiMS54MiwgYmIyLngyKTtcbiAgYmIxLncgPSBiYjEueDIgLSBiYjEueDE7XG4gIGJiMS55MSA9IE1hdGgubWluKGJiMS55MSwgYmIyLnkxKTtcbiAgYmIxLnkyID0gTWF0aC5tYXgoYmIxLnkyLCBiYjIueTIpO1xuICBiYjEuaCA9IGJiMS55MiAtIGJiMS55MTtcbn07XG52YXIgZXhwYW5kQm91bmRpbmdCb3hCeVBvaW50ID0gZnVuY3Rpb24gZXhwYW5kQm91bmRpbmdCb3hCeVBvaW50KGJiLCB4LCB5KSB7XG4gIGJiLngxID0gTWF0aC5taW4oYmIueDEsIHgpO1xuICBiYi54MiA9IE1hdGgubWF4KGJiLngyLCB4KTtcbiAgYmIudyA9IGJiLngyIC0gYmIueDE7XG4gIGJiLnkxID0gTWF0aC5taW4oYmIueTEsIHkpO1xuICBiYi55MiA9IE1hdGgubWF4KGJiLnkyLCB5KTtcbiAgYmIuaCA9IGJiLnkyIC0gYmIueTE7XG59O1xudmFyIGV4cGFuZEJvdW5kaW5nQm94ID0gZnVuY3Rpb24gZXhwYW5kQm91bmRpbmdCb3goYmIpIHtcbiAgdmFyIHBhZGRpbmcgPSBhcmd1bWVudHMubGVuZ3RoID4gMSAmJiBhcmd1bWVudHNbMV0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1sxXSA6IDA7XG4gIGJiLngxIC09IHBhZGRpbmc7XG4gIGJiLngyICs9IHBhZGRpbmc7XG4gIGJiLnkxIC09IHBhZGRpbmc7XG4gIGJiLnkyICs9IHBhZGRpbmc7XG4gIGJiLncgPSBiYi54MiAtIGJiLngxO1xuICBiYi5oID0gYmIueTIgLSBiYi55MTtcbiAgcmV0dXJuIGJiO1xufTtcbnZhciBleHBhbmRCb3VuZGluZ0JveFNpZGVzID0gZnVuY3Rpb24gZXhwYW5kQm91bmRpbmdCb3hTaWRlcyhiYikge1xuICB2YXIgcGFkZGluZyA9IGFyZ3VtZW50cy5sZW5ndGggPiAxICYmIGFyZ3VtZW50c1sxXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzFdIDogWzBdO1xuICB2YXIgdG9wLCByaWdodCwgYm90dG9tLCBsZWZ0O1xuICBpZiAocGFkZGluZy5sZW5ndGggPT09IDEpIHtcbiAgICB0b3AgPSByaWdodCA9IGJvdHRvbSA9IGxlZnQgPSBwYWRkaW5nWzBdO1xuICB9IGVsc2UgaWYgKHBhZGRpbmcubGVuZ3RoID09PSAyKSB7XG4gICAgdG9wID0gYm90dG9tID0gcGFkZGluZ1swXTtcbiAgICBsZWZ0ID0gcmlnaHQgPSBwYWRkaW5nWzFdO1xuICB9IGVsc2UgaWYgKHBhZGRpbmcubGVuZ3RoID09PSA0KSB7XG4gICAgdmFyIF9wYWRkaW5nID0gX3NsaWNlZFRvQXJyYXkocGFkZGluZywgNCk7XG4gICAgdG9wID0gX3BhZGRpbmdbMF07XG4gICAgcmlnaHQgPSBfcGFkZGluZ1sxXTtcbiAgICBib3R0b20gPSBfcGFkZGluZ1syXTtcbiAgICBsZWZ0ID0gX3BhZGRpbmdbM107XG4gIH1cbiAgYmIueDEgLT0gbGVmdDtcbiAgYmIueDIgKz0gcmlnaHQ7XG4gIGJiLnkxIC09IHRvcDtcbiAgYmIueTIgKz0gYm90dG9tO1xuICBiYi53ID0gYmIueDIgLSBiYi54MTtcbiAgYmIuaCA9IGJiLnkyIC0gYmIueTE7XG4gIHJldHVybiBiYjtcbn07XG5cbi8vIGFzc2lnbiB0aGUgdmFsdWVzIG9mIGJiMiBpbnRvIGJiMVxudmFyIGFzc2lnbkJvdW5kaW5nQm94ID0gZnVuY3Rpb24gYXNzaWduQm91bmRpbmdCb3goYmIxLCBiYjIpIHtcbiAgYmIxLngxID0gYmIyLngxO1xuICBiYjEueTEgPSBiYjIueTE7XG4gIGJiMS54MiA9IGJiMi54MjtcbiAgYmIxLnkyID0gYmIyLnkyO1xuICBiYjEudyA9IGJiMS54MiAtIGJiMS54MTtcbiAgYmIxLmggPSBiYjEueTIgLSBiYjEueTE7XG59O1xudmFyIGJvdW5kaW5nQm94ZXNJbnRlcnNlY3QgPSBmdW5jdGlvbiBib3VuZGluZ0JveGVzSW50ZXJzZWN0KGJiMSwgYmIyKSB7XG4gIC8vIGNhc2U6IG9uZSBiYiB0byByaWdodCBvZiBvdGhlclxuICBpZiAoYmIxLngxID4gYmIyLngyKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIGlmIChiYjIueDEgPiBiYjEueDIpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICAvLyBjYXNlOiBvbmUgYmIgdG8gbGVmdCBvZiBvdGhlclxuICBpZiAoYmIxLngyIDwgYmIyLngxKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIGlmIChiYjIueDIgPCBiYjEueDEpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICAvLyBjYXNlOiBvbmUgYmIgYWJvdmUgb3RoZXJcbiAgaWYgKGJiMS55MiA8IGJiMi55MSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICBpZiAoYmIyLnkyIDwgYmIxLnkxKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgLy8gY2FzZTogb25lIGJiIGJlbG93IG90aGVyXG4gIGlmIChiYjEueTEgPiBiYjIueTIpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgaWYgKGJiMi55MSA+IGJiMS55Mikge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIC8vIG90aGVyd2lzZSwgbXVzdCBoYXZlIHNvbWUgb3ZlcmxhcFxuICByZXR1cm4gdHJ1ZTtcbn07XG52YXIgaW5Cb3VuZGluZ0JveCA9IGZ1bmN0aW9uIGluQm91bmRpbmdCb3goYmIsIHgsIHkpIHtcbiAgcmV0dXJuIGJiLngxIDw9IHggJiYgeCA8PSBiYi54MiAmJiBiYi55MSA8PSB5ICYmIHkgPD0gYmIueTI7XG59O1xudmFyIHBvaW50SW5Cb3VuZGluZ0JveCA9IGZ1bmN0aW9uIHBvaW50SW5Cb3VuZGluZ0JveChiYiwgcHQpIHtcbiAgcmV0dXJuIGluQm91bmRpbmdCb3goYmIsIHB0LngsIHB0LnkpO1xufTtcbnZhciBib3VuZGluZ0JveEluQm91bmRpbmdCb3ggPSBmdW5jdGlvbiBib3VuZGluZ0JveEluQm91bmRpbmdCb3goYmIxLCBiYjIpIHtcbiAgcmV0dXJuIGluQm91bmRpbmdCb3goYmIxLCBiYjIueDEsIGJiMi55MSkgJiYgaW5Cb3VuZGluZ0JveChiYjEsIGJiMi54MiwgYmIyLnkyKTtcbn07XG52YXIgcm91bmRSZWN0YW5nbGVJbnRlcnNlY3RMaW5lID0gZnVuY3Rpb24gcm91bmRSZWN0YW5nbGVJbnRlcnNlY3RMaW5lKHgsIHksIG5vZGVYLCBub2RlWSwgd2lkdGgsIGhlaWdodCwgcGFkZGluZykge1xuICB2YXIgcmFkaXVzID0gYXJndW1lbnRzLmxlbmd0aCA+IDcgJiYgYXJndW1lbnRzWzddICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbN10gOiAnYXV0byc7XG4gIHZhciBjb3JuZXJSYWRpdXMgPSByYWRpdXMgPT09ICdhdXRvJyA/IGdldFJvdW5kUmVjdGFuZ2xlUmFkaXVzKHdpZHRoLCBoZWlnaHQpIDogcmFkaXVzO1xuICB2YXIgaGFsZldpZHRoID0gd2lkdGggLyAyO1xuICB2YXIgaGFsZkhlaWdodCA9IGhlaWdodCAvIDI7XG4gIGNvcm5lclJhZGl1cyA9IE1hdGgubWluKGNvcm5lclJhZGl1cywgaGFsZldpZHRoLCBoYWxmSGVpZ2h0KTtcbiAgdmFyIGRvV2lkdGggPSBjb3JuZXJSYWRpdXMgIT09IGhhbGZXaWR0aCxcbiAgICBkb0hlaWdodCA9IGNvcm5lclJhZGl1cyAhPT0gaGFsZkhlaWdodDtcblxuICAvLyBDaGVjayBpbnRlcnNlY3Rpb25zIHdpdGggc3RyYWlnaHQgbGluZSBzZWdtZW50c1xuICB2YXIgc3RyYWlnaHRMaW5lSW50ZXJzZWN0aW9ucztcblxuICAvLyBUb3Agc2VnbWVudCwgbGVmdCB0byByaWdodFxuICBpZiAoZG9XaWR0aCkge1xuICAgIHZhciB0b3BTdGFydFggPSBub2RlWCAtIGhhbGZXaWR0aCArIGNvcm5lclJhZGl1cyAtIHBhZGRpbmc7XG4gICAgdmFyIHRvcFN0YXJ0WSA9IG5vZGVZIC0gaGFsZkhlaWdodCAtIHBhZGRpbmc7XG4gICAgdmFyIHRvcEVuZFggPSBub2RlWCArIGhhbGZXaWR0aCAtIGNvcm5lclJhZGl1cyArIHBhZGRpbmc7XG4gICAgdmFyIHRvcEVuZFkgPSB0b3BTdGFydFk7XG4gICAgc3RyYWlnaHRMaW5lSW50ZXJzZWN0aW9ucyA9IGZpbml0ZUxpbmVzSW50ZXJzZWN0KHgsIHksIG5vZGVYLCBub2RlWSwgdG9wU3RhcnRYLCB0b3BTdGFydFksIHRvcEVuZFgsIHRvcEVuZFksIGZhbHNlKTtcbiAgICBpZiAoc3RyYWlnaHRMaW5lSW50ZXJzZWN0aW9ucy5sZW5ndGggPiAwKSB7XG4gICAgICByZXR1cm4gc3RyYWlnaHRMaW5lSW50ZXJzZWN0aW9ucztcbiAgICB9XG4gIH1cblxuICAvLyBSaWdodCBzZWdtZW50LCB0b3AgdG8gYm90dG9tXG4gIGlmIChkb0hlaWdodCkge1xuICAgIHZhciByaWdodFN0YXJ0WCA9IG5vZGVYICsgaGFsZldpZHRoICsgcGFkZGluZztcbiAgICB2YXIgcmlnaHRTdGFydFkgPSBub2RlWSAtIGhhbGZIZWlnaHQgKyBjb3JuZXJSYWRpdXMgLSBwYWRkaW5nO1xuICAgIHZhciByaWdodEVuZFggPSByaWdodFN0YXJ0WDtcbiAgICB2YXIgcmlnaHRFbmRZID0gbm9kZVkgKyBoYWxmSGVpZ2h0IC0gY29ybmVyUmFkaXVzICsgcGFkZGluZztcbiAgICBzdHJhaWdodExpbmVJbnRlcnNlY3Rpb25zID0gZmluaXRlTGluZXNJbnRlcnNlY3QoeCwgeSwgbm9kZVgsIG5vZGVZLCByaWdodFN0YXJ0WCwgcmlnaHRTdGFydFksIHJpZ2h0RW5kWCwgcmlnaHRFbmRZLCBmYWxzZSk7XG4gICAgaWYgKHN0cmFpZ2h0TGluZUludGVyc2VjdGlvbnMubGVuZ3RoID4gMCkge1xuICAgICAgcmV0dXJuIHN0cmFpZ2h0TGluZUludGVyc2VjdGlvbnM7XG4gICAgfVxuICB9XG5cbiAgLy8gQm90dG9tIHNlZ21lbnQsIGxlZnQgdG8gcmlnaHRcbiAgaWYgKGRvV2lkdGgpIHtcbiAgICB2YXIgYm90dG9tU3RhcnRYID0gbm9kZVggLSBoYWxmV2lkdGggKyBjb3JuZXJSYWRpdXMgLSBwYWRkaW5nO1xuICAgIHZhciBib3R0b21TdGFydFkgPSBub2RlWSArIGhhbGZIZWlnaHQgKyBwYWRkaW5nO1xuICAgIHZhciBib3R0b21FbmRYID0gbm9kZVggKyBoYWxmV2lkdGggLSBjb3JuZXJSYWRpdXMgKyBwYWRkaW5nO1xuICAgIHZhciBib3R0b21FbmRZID0gYm90dG9tU3RhcnRZO1xuICAgIHN0cmFpZ2h0TGluZUludGVyc2VjdGlvbnMgPSBmaW5pdGVMaW5lc0ludGVyc2VjdCh4LCB5LCBub2RlWCwgbm9kZVksIGJvdHRvbVN0YXJ0WCwgYm90dG9tU3RhcnRZLCBib3R0b21FbmRYLCBib3R0b21FbmRZLCBmYWxzZSk7XG4gICAgaWYgKHN0cmFpZ2h0TGluZUludGVyc2VjdGlvbnMubGVuZ3RoID4gMCkge1xuICAgICAgcmV0dXJuIHN0cmFpZ2h0TGluZUludGVyc2VjdGlvbnM7XG4gICAgfVxuICB9XG5cbiAgLy8gTGVmdCBzZWdtZW50LCB0b3AgdG8gYm90dG9tXG4gIGlmIChkb0hlaWdodCkge1xuICAgIHZhciBsZWZ0U3RhcnRYID0gbm9kZVggLSBoYWxmV2lkdGggLSBwYWRkaW5nO1xuICAgIHZhciBsZWZ0U3RhcnRZID0gbm9kZVkgLSBoYWxmSGVpZ2h0ICsgY29ybmVyUmFkaXVzIC0gcGFkZGluZztcbiAgICB2YXIgbGVmdEVuZFggPSBsZWZ0U3RhcnRYO1xuICAgIHZhciBsZWZ0RW5kWSA9IG5vZGVZICsgaGFsZkhlaWdodCAtIGNvcm5lclJhZGl1cyArIHBhZGRpbmc7XG4gICAgc3RyYWlnaHRMaW5lSW50ZXJzZWN0aW9ucyA9IGZpbml0ZUxpbmVzSW50ZXJzZWN0KHgsIHksIG5vZGVYLCBub2RlWSwgbGVmdFN0YXJ0WCwgbGVmdFN0YXJ0WSwgbGVmdEVuZFgsIGxlZnRFbmRZLCBmYWxzZSk7XG4gICAgaWYgKHN0cmFpZ2h0TGluZUludGVyc2VjdGlvbnMubGVuZ3RoID4gMCkge1xuICAgICAgcmV0dXJuIHN0cmFpZ2h0TGluZUludGVyc2VjdGlvbnM7XG4gICAgfVxuICB9XG5cbiAgLy8gQ2hlY2sgaW50ZXJzZWN0aW9ucyB3aXRoIGFyYyBzZWdtZW50c1xuICB2YXIgYXJjSW50ZXJzZWN0aW9ucztcblxuICAvLyBUb3AgTGVmdFxuICB7XG4gICAgdmFyIHRvcExlZnRDZW50ZXJYID0gbm9kZVggLSBoYWxmV2lkdGggKyBjb3JuZXJSYWRpdXM7XG4gICAgdmFyIHRvcExlZnRDZW50ZXJZID0gbm9kZVkgLSBoYWxmSGVpZ2h0ICsgY29ybmVyUmFkaXVzO1xuICAgIGFyY0ludGVyc2VjdGlvbnMgPSBpbnRlcnNlY3RMaW5lQ2lyY2xlKHgsIHksIG5vZGVYLCBub2RlWSwgdG9wTGVmdENlbnRlclgsIHRvcExlZnRDZW50ZXJZLCBjb3JuZXJSYWRpdXMgKyBwYWRkaW5nKTtcblxuICAgIC8vIEVuc3VyZSB0aGUgaW50ZXJzZWN0aW9uIGlzIG9uIHRoZSBkZXNpcmVkIHF1YXJ0ZXIgb2YgdGhlIGNpcmNsZVxuICAgIGlmIChhcmNJbnRlcnNlY3Rpb25zLmxlbmd0aCA+IDAgJiYgYXJjSW50ZXJzZWN0aW9uc1swXSA8PSB0b3BMZWZ0Q2VudGVyWCAmJiBhcmNJbnRlcnNlY3Rpb25zWzFdIDw9IHRvcExlZnRDZW50ZXJZKSB7XG4gICAgICByZXR1cm4gW2FyY0ludGVyc2VjdGlvbnNbMF0sIGFyY0ludGVyc2VjdGlvbnNbMV1dO1xuICAgIH1cbiAgfVxuXG4gIC8vIFRvcCBSaWdodFxuICB7XG4gICAgdmFyIHRvcFJpZ2h0Q2VudGVyWCA9IG5vZGVYICsgaGFsZldpZHRoIC0gY29ybmVyUmFkaXVzO1xuICAgIHZhciB0b3BSaWdodENlbnRlclkgPSBub2RlWSAtIGhhbGZIZWlnaHQgKyBjb3JuZXJSYWRpdXM7XG4gICAgYXJjSW50ZXJzZWN0aW9ucyA9IGludGVyc2VjdExpbmVDaXJjbGUoeCwgeSwgbm9kZVgsIG5vZGVZLCB0b3BSaWdodENlbnRlclgsIHRvcFJpZ2h0Q2VudGVyWSwgY29ybmVyUmFkaXVzICsgcGFkZGluZyk7XG5cbiAgICAvLyBFbnN1cmUgdGhlIGludGVyc2VjdGlvbiBpcyBvbiB0aGUgZGVzaXJlZCBxdWFydGVyIG9mIHRoZSBjaXJjbGVcbiAgICBpZiAoYXJjSW50ZXJzZWN0aW9ucy5sZW5ndGggPiAwICYmIGFyY0ludGVyc2VjdGlvbnNbMF0gPj0gdG9wUmlnaHRDZW50ZXJYICYmIGFyY0ludGVyc2VjdGlvbnNbMV0gPD0gdG9wUmlnaHRDZW50ZXJZKSB7XG4gICAgICByZXR1cm4gW2FyY0ludGVyc2VjdGlvbnNbMF0sIGFyY0ludGVyc2VjdGlvbnNbMV1dO1xuICAgIH1cbiAgfVxuXG4gIC8vIEJvdHRvbSBSaWdodFxuICB7XG4gICAgdmFyIGJvdHRvbVJpZ2h0Q2VudGVyWCA9IG5vZGVYICsgaGFsZldpZHRoIC0gY29ybmVyUmFkaXVzO1xuICAgIHZhciBib3R0b21SaWdodENlbnRlclkgPSBub2RlWSArIGhhbGZIZWlnaHQgLSBjb3JuZXJSYWRpdXM7XG4gICAgYXJjSW50ZXJzZWN0aW9ucyA9IGludGVyc2VjdExpbmVDaXJjbGUoeCwgeSwgbm9kZVgsIG5vZGVZLCBib3R0b21SaWdodENlbnRlclgsIGJvdHRvbVJpZ2h0Q2VudGVyWSwgY29ybmVyUmFkaXVzICsgcGFkZGluZyk7XG5cbiAgICAvLyBFbnN1cmUgdGhlIGludGVyc2VjdGlvbiBpcyBvbiB0aGUgZGVzaXJlZCBxdWFydGVyIG9mIHRoZSBjaXJjbGVcbiAgICBpZiAoYXJjSW50ZXJzZWN0aW9ucy5sZW5ndGggPiAwICYmIGFyY0ludGVyc2VjdGlvbnNbMF0gPj0gYm90dG9tUmlnaHRDZW50ZXJYICYmIGFyY0ludGVyc2VjdGlvbnNbMV0gPj0gYm90dG9tUmlnaHRDZW50ZXJZKSB7XG4gICAgICByZXR1cm4gW2FyY0ludGVyc2VjdGlvbnNbMF0sIGFyY0ludGVyc2VjdGlvbnNbMV1dO1xuICAgIH1cbiAgfVxuXG4gIC8vIEJvdHRvbSBMZWZ0XG4gIHtcbiAgICB2YXIgYm90dG9tTGVmdENlbnRlclggPSBub2RlWCAtIGhhbGZXaWR0aCArIGNvcm5lclJhZGl1cztcbiAgICB2YXIgYm90dG9tTGVmdENlbnRlclkgPSBub2RlWSArIGhhbGZIZWlnaHQgLSBjb3JuZXJSYWRpdXM7XG4gICAgYXJjSW50ZXJzZWN0aW9ucyA9IGludGVyc2VjdExpbmVDaXJjbGUoeCwgeSwgbm9kZVgsIG5vZGVZLCBib3R0b21MZWZ0Q2VudGVyWCwgYm90dG9tTGVmdENlbnRlclksIGNvcm5lclJhZGl1cyArIHBhZGRpbmcpO1xuXG4gICAgLy8gRW5zdXJlIHRoZSBpbnRlcnNlY3Rpb24gaXMgb24gdGhlIGRlc2lyZWQgcXVhcnRlciBvZiB0aGUgY2lyY2xlXG4gICAgaWYgKGFyY0ludGVyc2VjdGlvbnMubGVuZ3RoID4gMCAmJiBhcmNJbnRlcnNlY3Rpb25zWzBdIDw9IGJvdHRvbUxlZnRDZW50ZXJYICYmIGFyY0ludGVyc2VjdGlvbnNbMV0gPj0gYm90dG9tTGVmdENlbnRlclkpIHtcbiAgICAgIHJldHVybiBbYXJjSW50ZXJzZWN0aW9uc1swXSwgYXJjSW50ZXJzZWN0aW9uc1sxXV07XG4gICAgfVxuICB9XG4gIHJldHVybiBbXTsgLy8gaWYgbm90aGluZ1xufTtcbnZhciBpbkxpbmVWaWNpbml0eSA9IGZ1bmN0aW9uIGluTGluZVZpY2luaXR5KHgsIHksIGx4MSwgbHkxLCBseDIsIGx5MiwgdG9sZXJhbmNlKSB7XG4gIHZhciB0ID0gdG9sZXJhbmNlO1xuICB2YXIgeDEgPSBNYXRoLm1pbihseDEsIGx4Mik7XG4gIHZhciB4MiA9IE1hdGgubWF4KGx4MSwgbHgyKTtcbiAgdmFyIHkxID0gTWF0aC5taW4obHkxLCBseTIpO1xuICB2YXIgeTIgPSBNYXRoLm1heChseTEsIGx5Mik7XG4gIHJldHVybiB4MSAtIHQgPD0geCAmJiB4IDw9IHgyICsgdCAmJiB5MSAtIHQgPD0geSAmJiB5IDw9IHkyICsgdDtcbn07XG52YXIgaW5CZXppZXJWaWNpbml0eSA9IGZ1bmN0aW9uIGluQmV6aWVyVmljaW5pdHkoeCwgeSwgeDEsIHkxLCB4MiwgeTIsIHgzLCB5MywgdG9sZXJhbmNlKSB7XG4gIHZhciBiYiA9IHtcbiAgICB4MTogTWF0aC5taW4oeDEsIHgzLCB4MikgLSB0b2xlcmFuY2UsXG4gICAgeDI6IE1hdGgubWF4KHgxLCB4MywgeDIpICsgdG9sZXJhbmNlLFxuICAgIHkxOiBNYXRoLm1pbih5MSwgeTMsIHkyKSAtIHRvbGVyYW5jZSxcbiAgICB5MjogTWF0aC5tYXgoeTEsIHkzLCB5MikgKyB0b2xlcmFuY2VcbiAgfTtcblxuICAvLyBpZiBvdXRzaWRlIHRoZSByb3VnaCBib3VuZGluZyBib3ggZm9yIHRoZSBiZXppZXIsIHRoZW4gaXQgY2FuJ3QgYmUgYSBoaXRcbiAgaWYgKHggPCBiYi54MSB8fCB4ID4gYmIueDIgfHwgeSA8IGJiLnkxIHx8IHkgPiBiYi55Mikge1xuICAgIC8vIGNvbnNvbGUubG9nKCdiZXppZXIgb3V0IG9mIHJvdWdoIGJiJylcbiAgICByZXR1cm4gZmFsc2U7XG4gIH0gZWxzZSB7XG4gICAgLy8gY29uc29sZS5sb2coJ2RvIG1vcmUgZXhwZW5zaXZlIGNoZWNrJyk7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbn07XG52YXIgc29sdmVRdWFkcmF0aWMgPSBmdW5jdGlvbiBzb2x2ZVF1YWRyYXRpYyhhLCBiLCBjLCB2YWwpIHtcbiAgYyAtPSB2YWw7XG4gIHZhciByID0gYiAqIGIgLSA0ICogYSAqIGM7XG4gIGlmIChyIDwgMCkge1xuICAgIHJldHVybiBbXTtcbiAgfVxuICB2YXIgc3FydFIgPSBNYXRoLnNxcnQocik7XG4gIHZhciBkZW5vbSA9IDIgKiBhO1xuICB2YXIgcm9vdDEgPSAoLWIgKyBzcXJ0UikgLyBkZW5vbTtcbiAgdmFyIHJvb3QyID0gKC1iIC0gc3FydFIpIC8gZGVub207XG4gIHJldHVybiBbcm9vdDEsIHJvb3QyXTtcbn07XG52YXIgc29sdmVDdWJpYyA9IGZ1bmN0aW9uIHNvbHZlQ3ViaWMoYSwgYiwgYywgZCwgcmVzdWx0KSB7XG4gIC8vIFNvbHZlcyBhIGN1YmljIGZ1bmN0aW9uLCByZXR1cm5zIHJvb3QgaW4gZm9ybSBbcjEsIGkxLCByMiwgaTIsIHIzLCBpM10sIHdoZXJlXG4gIC8vIHIgaXMgdGhlIHJlYWwgY29tcG9uZW50LCBpIGlzIHRoZSBpbWFnaW5hcnkgY29tcG9uZW50XG5cbiAgLy8gQW4gaW1wbGVtZW50YXRpb24gb2YgdGhlIENhcmRhbm8gbWV0aG9kIGZyb20gdGhlIHllYXIgMTU0NVxuICAvLyBodHRwOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL0N1YmljX2Z1bmN0aW9uI1RoZV9uYXR1cmVfb2ZfdGhlX3Jvb3RzXG5cbiAgdmFyIGVwc2lsb24gPSAwLjAwMDAxO1xuXG4gIC8vIGF2b2lkIGRpdmlzaW9uIGJ5IHplcm8gd2hpbGUga2VlcGluZyB0aGUgb3ZlcmFsbCBleHByZXNzaW9uIGNsb3NlIGluIHZhbHVlXG4gIGlmIChhID09PSAwKSB7XG4gICAgYSA9IGVwc2lsb247XG4gIH1cbiAgYiAvPSBhO1xuICBjIC89IGE7XG4gIGQgLz0gYTtcbiAgdmFyIGRpc2NyaW1pbmFudCwgcSwgciwgZHVtMSwgcywgdCwgdGVybTEsIHIxMztcbiAgcSA9ICgzLjAgKiBjIC0gYiAqIGIpIC8gOS4wO1xuICByID0gLSgyNy4wICogZCkgKyBiICogKDkuMCAqIGMgLSAyLjAgKiAoYiAqIGIpKTtcbiAgciAvPSA1NC4wO1xuICBkaXNjcmltaW5hbnQgPSBxICogcSAqIHEgKyByICogcjtcbiAgcmVzdWx0WzFdID0gMDtcbiAgdGVybTEgPSBiIC8gMy4wO1xuICBpZiAoZGlzY3JpbWluYW50ID4gMCkge1xuICAgIHMgPSByICsgTWF0aC5zcXJ0KGRpc2NyaW1pbmFudCk7XG4gICAgcyA9IHMgPCAwID8gLU1hdGgucG93KC1zLCAxLjAgLyAzLjApIDogTWF0aC5wb3cocywgMS4wIC8gMy4wKTtcbiAgICB0ID0gciAtIE1hdGguc3FydChkaXNjcmltaW5hbnQpO1xuICAgIHQgPSB0IDwgMCA/IC1NYXRoLnBvdygtdCwgMS4wIC8gMy4wKSA6IE1hdGgucG93KHQsIDEuMCAvIDMuMCk7XG4gICAgcmVzdWx0WzBdID0gLXRlcm0xICsgcyArIHQ7XG4gICAgdGVybTEgKz0gKHMgKyB0KSAvIDIuMDtcbiAgICByZXN1bHRbNF0gPSByZXN1bHRbMl0gPSAtdGVybTE7XG4gICAgdGVybTEgPSBNYXRoLnNxcnQoMy4wKSAqICgtdCArIHMpIC8gMjtcbiAgICByZXN1bHRbM10gPSB0ZXJtMTtcbiAgICByZXN1bHRbNV0gPSAtdGVybTE7XG4gICAgcmV0dXJuO1xuICB9XG4gIHJlc3VsdFs1XSA9IHJlc3VsdFszXSA9IDA7XG4gIGlmIChkaXNjcmltaW5hbnQgPT09IDApIHtcbiAgICByMTMgPSByIDwgMCA/IC1NYXRoLnBvdygtciwgMS4wIC8gMy4wKSA6IE1hdGgucG93KHIsIDEuMCAvIDMuMCk7XG4gICAgcmVzdWx0WzBdID0gLXRlcm0xICsgMi4wICogcjEzO1xuICAgIHJlc3VsdFs0XSA9IHJlc3VsdFsyXSA9IC0ocjEzICsgdGVybTEpO1xuICAgIHJldHVybjtcbiAgfVxuICBxID0gLXE7XG4gIGR1bTEgPSBxICogcSAqIHE7XG4gIGR1bTEgPSBNYXRoLmFjb3MociAvIE1hdGguc3FydChkdW0xKSk7XG4gIHIxMyA9IDIuMCAqIE1hdGguc3FydChxKTtcbiAgcmVzdWx0WzBdID0gLXRlcm0xICsgcjEzICogTWF0aC5jb3MoZHVtMSAvIDMuMCk7XG4gIHJlc3VsdFsyXSA9IC10ZXJtMSArIHIxMyAqIE1hdGguY29zKChkdW0xICsgMi4wICogTWF0aC5QSSkgLyAzLjApO1xuICByZXN1bHRbNF0gPSAtdGVybTEgKyByMTMgKiBNYXRoLmNvcygoZHVtMSArIDQuMCAqIE1hdGguUEkpIC8gMy4wKTtcbiAgcmV0dXJuO1xufTtcbnZhciBzcWRpc3RUb1F1YWRyYXRpY0JlemllciA9IGZ1bmN0aW9uIHNxZGlzdFRvUXVhZHJhdGljQmV6aWVyKHgsIHksIHgxLCB5MSwgeDIsIHkyLCB4MywgeTMpIHtcbiAgLy8gRmluZCBtaW5pbXVtIGRpc3RhbmNlIGJ5IHVzaW5nIHRoZSBtaW5pbXVtIG9mIHRoZSBkaXN0YW5jZVxuICAvLyBmdW5jdGlvbiBiZXR3ZWVuIHRoZSBnaXZlbiBwb2ludCBhbmQgdGhlIGN1cnZlXG5cbiAgLy8gVGhpcyBnaXZlcyB0aGUgY29lZmZpY2llbnRzIG9mIHRoZSByZXN1bHRpbmcgY3ViaWMgZXF1YXRpb25cbiAgLy8gd2hvc2Ugcm9vdHMgdGVsbCB1cyB3aGVyZSBhIHBvc3NpYmxlIG1pbmltdW0gaXNcbiAgLy8gKENvZWZmaWNpZW50cyBhcmUgZGl2aWRlZCBieSA0KVxuXG4gIHZhciBhID0gMS4wICogeDEgKiB4MSAtIDQgKiB4MSAqIHgyICsgMiAqIHgxICogeDMgKyA0ICogeDIgKiB4MiAtIDQgKiB4MiAqIHgzICsgeDMgKiB4MyArIHkxICogeTEgLSA0ICogeTEgKiB5MiArIDIgKiB5MSAqIHkzICsgNCAqIHkyICogeTIgLSA0ICogeTIgKiB5MyArIHkzICogeTM7XG4gIHZhciBiID0gMS4wICogOSAqIHgxICogeDIgLSAzICogeDEgKiB4MSAtIDMgKiB4MSAqIHgzIC0gNiAqIHgyICogeDIgKyAzICogeDIgKiB4MyArIDkgKiB5MSAqIHkyIC0gMyAqIHkxICogeTEgLSAzICogeTEgKiB5MyAtIDYgKiB5MiAqIHkyICsgMyAqIHkyICogeTM7XG4gIHZhciBjID0gMS4wICogMyAqIHgxICogeDEgLSA2ICogeDEgKiB4MiArIHgxICogeDMgLSB4MSAqIHggKyAyICogeDIgKiB4MiArIDIgKiB4MiAqIHggLSB4MyAqIHggKyAzICogeTEgKiB5MSAtIDYgKiB5MSAqIHkyICsgeTEgKiB5MyAtIHkxICogeSArIDIgKiB5MiAqIHkyICsgMiAqIHkyICogeSAtIHkzICogeTtcbiAgdmFyIGQgPSAxLjAgKiB4MSAqIHgyIC0geDEgKiB4MSArIHgxICogeCAtIHgyICogeCArIHkxICogeTIgLSB5MSAqIHkxICsgeTEgKiB5IC0geTIgKiB5O1xuXG4gIC8vIGRlYnVnKFwiY29lZmZpY2llbnRzOiBcIiArIGEgLyBhICsgXCIsIFwiICsgYiAvIGEgKyBcIiwgXCIgKyBjIC8gYSArIFwiLCBcIiArIGQgLyBhKTtcblxuICB2YXIgcm9vdHMgPSBbXTtcblxuICAvLyBVc2UgdGhlIGN1YmljIHNvbHZpbmcgYWxnb3JpdGhtXG4gIHNvbHZlQ3ViaWMoYSwgYiwgYywgZCwgcm9vdHMpO1xuICB2YXIgemVyb1RocmVzaG9sZCA9IDAuMDAwMDAwMTtcbiAgdmFyIHBhcmFtcyA9IFtdO1xuICBmb3IgKHZhciBpbmRleCA9IDA7IGluZGV4IDwgNjsgaW5kZXggKz0gMikge1xuICAgIGlmIChNYXRoLmFicyhyb290c1tpbmRleCArIDFdKSA8IHplcm9UaHJlc2hvbGQgJiYgcm9vdHNbaW5kZXhdID49IDAgJiYgcm9vdHNbaW5kZXhdIDw9IDEuMCkge1xuICAgICAgcGFyYW1zLnB1c2gocm9vdHNbaW5kZXhdKTtcbiAgICB9XG4gIH1cbiAgcGFyYW1zLnB1c2goMS4wKTtcbiAgcGFyYW1zLnB1c2goMC4wKTtcbiAgdmFyIG1pbkRpc3RhbmNlU3F1YXJlZCA9IC0xO1xuICB2YXIgY3VyWCwgY3VyWSwgZGlzdFNxdWFyZWQ7XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgcGFyYW1zLmxlbmd0aDsgaSsrKSB7XG4gICAgY3VyWCA9IE1hdGgucG93KDEuMCAtIHBhcmFtc1tpXSwgMi4wKSAqIHgxICsgMi4wICogKDEgLSBwYXJhbXNbaV0pICogcGFyYW1zW2ldICogeDIgKyBwYXJhbXNbaV0gKiBwYXJhbXNbaV0gKiB4MztcbiAgICBjdXJZID0gTWF0aC5wb3coMSAtIHBhcmFtc1tpXSwgMi4wKSAqIHkxICsgMiAqICgxLjAgLSBwYXJhbXNbaV0pICogcGFyYW1zW2ldICogeTIgKyBwYXJhbXNbaV0gKiBwYXJhbXNbaV0gKiB5MztcbiAgICBkaXN0U3F1YXJlZCA9IE1hdGgucG93KGN1clggLSB4LCAyKSArIE1hdGgucG93KGN1clkgLSB5LCAyKTtcbiAgICAvLyBkZWJ1ZygnZGlzdGFuY2UgZm9yIHBhcmFtICcgKyBwYXJhbXNbaV0gKyBcIjogXCIgKyBNYXRoLnNxcnQoZGlzdFNxdWFyZWQpKTtcbiAgICBpZiAobWluRGlzdGFuY2VTcXVhcmVkID49IDApIHtcbiAgICAgIGlmIChkaXN0U3F1YXJlZCA8IG1pbkRpc3RhbmNlU3F1YXJlZCkge1xuICAgICAgICBtaW5EaXN0YW5jZVNxdWFyZWQgPSBkaXN0U3F1YXJlZDtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgbWluRGlzdGFuY2VTcXVhcmVkID0gZGlzdFNxdWFyZWQ7XG4gICAgfVxuICB9XG4gIHJldHVybiBtaW5EaXN0YW5jZVNxdWFyZWQ7XG59O1xudmFyIHNxZGlzdFRvRmluaXRlTGluZSA9IGZ1bmN0aW9uIHNxZGlzdFRvRmluaXRlTGluZSh4LCB5LCB4MSwgeTEsIHgyLCB5Mikge1xuICB2YXIgb2Zmc2V0ID0gW3ggLSB4MSwgeSAtIHkxXTtcbiAgdmFyIGxpbmUgPSBbeDIgLSB4MSwgeTIgLSB5MV07XG4gIHZhciBsaW5lU3EgPSBsaW5lWzBdICogbGluZVswXSArIGxpbmVbMV0gKiBsaW5lWzFdO1xuICB2YXIgaHlwU3EgPSBvZmZzZXRbMF0gKiBvZmZzZXRbMF0gKyBvZmZzZXRbMV0gKiBvZmZzZXRbMV07XG4gIHZhciBkb3RQcm9kdWN0ID0gb2Zmc2V0WzBdICogbGluZVswXSArIG9mZnNldFsxXSAqIGxpbmVbMV07XG4gIHZhciBhZGpTcSA9IGRvdFByb2R1Y3QgKiBkb3RQcm9kdWN0IC8gbGluZVNxO1xuICBpZiAoZG90UHJvZHVjdCA8IDApIHtcbiAgICByZXR1cm4gaHlwU3E7XG4gIH1cbiAgaWYgKGFkalNxID4gbGluZVNxKSB7XG4gICAgcmV0dXJuICh4IC0geDIpICogKHggLSB4MikgKyAoeSAtIHkyKSAqICh5IC0geTIpO1xuICB9XG4gIHJldHVybiBoeXBTcSAtIGFkalNxO1xufTtcbnZhciBwb2ludEluc2lkZVBvbHlnb25Qb2ludHMgPSBmdW5jdGlvbiBwb2ludEluc2lkZVBvbHlnb25Qb2ludHMoeCwgeSwgcG9pbnRzKSB7XG4gIHZhciB4MSwgeTEsIHgyLCB5MjtcbiAgdmFyIHkzO1xuXG4gIC8vIEludGVyc2VjdCB3aXRoIHZlcnRpY2FsIGxpbmUgdGhyb3VnaCAoeCwgeSlcbiAgdmFyIHVwID0gMDtcbiAgLy8gbGV0IGRvd24gPSAwO1xuICBmb3IgKHZhciBpID0gMDsgaSA8IHBvaW50cy5sZW5ndGggLyAyOyBpKyspIHtcbiAgICB4MSA9IHBvaW50c1tpICogMl07XG4gICAgeTEgPSBwb2ludHNbaSAqIDIgKyAxXTtcbiAgICBpZiAoaSArIDEgPCBwb2ludHMubGVuZ3RoIC8gMikge1xuICAgICAgeDIgPSBwb2ludHNbKGkgKyAxKSAqIDJdO1xuICAgICAgeTIgPSBwb2ludHNbKGkgKyAxKSAqIDIgKyAxXTtcbiAgICB9IGVsc2Uge1xuICAgICAgeDIgPSBwb2ludHNbKGkgKyAxIC0gcG9pbnRzLmxlbmd0aCAvIDIpICogMl07XG4gICAgICB5MiA9IHBvaW50c1soaSArIDEgLSBwb2ludHMubGVuZ3RoIC8gMikgKiAyICsgMV07XG4gICAgfVxuICAgIGlmICh4MSA9PSB4ICYmIHgyID09IHgpIDsgZWxzZSBpZiAoeDEgPj0geCAmJiB4ID49IHgyIHx8IHgxIDw9IHggJiYgeCA8PSB4Mikge1xuICAgICAgeTMgPSAoeCAtIHgxKSAvICh4MiAtIHgxKSAqICh5MiAtIHkxKSArIHkxO1xuICAgICAgaWYgKHkzID4geSkge1xuICAgICAgICB1cCsrO1xuICAgICAgfVxuXG4gICAgICAvLyBpZiggeTMgPCB5ICl7XG4gICAgICAvLyBkb3duKys7XG4gICAgICAvLyB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cbiAgfVxuICBpZiAodXAgJSAyID09PSAwKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9IGVsc2Uge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG59O1xudmFyIHBvaW50SW5zaWRlUG9seWdvbiA9IGZ1bmN0aW9uIHBvaW50SW5zaWRlUG9seWdvbih4LCB5LCBiYXNlUG9pbnRzLCBjZW50ZXJYLCBjZW50ZXJZLCB3aWR0aCwgaGVpZ2h0LCBkaXJlY3Rpb24sIHBhZGRpbmcpIHtcbiAgdmFyIHRyYW5zZm9ybWVkUG9pbnRzID0gbmV3IEFycmF5KGJhc2VQb2ludHMubGVuZ3RoKTtcblxuICAvLyBHaXZlcyBuZWdhdGl2ZSBhbmdsZVxuICB2YXIgYW5nbGU7XG4gIGlmIChkaXJlY3Rpb25bMF0gIT0gbnVsbCkge1xuICAgIGFuZ2xlID0gTWF0aC5hdGFuKGRpcmVjdGlvblsxXSAvIGRpcmVjdGlvblswXSk7XG4gICAgaWYgKGRpcmVjdGlvblswXSA8IDApIHtcbiAgICAgIGFuZ2xlID0gYW5nbGUgKyBNYXRoLlBJIC8gMjtcbiAgICB9IGVsc2Uge1xuICAgICAgYW5nbGUgPSAtYW5nbGUgLSBNYXRoLlBJIC8gMjtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgYW5nbGUgPSBkaXJlY3Rpb247XG4gIH1cbiAgdmFyIGNvcyA9IE1hdGguY29zKC1hbmdsZSk7XG4gIHZhciBzaW4gPSBNYXRoLnNpbigtYW5nbGUpO1xuXG4gIC8vICAgIGNvbnNvbGUubG9nKFwiYmFzZTogXCIgKyBiYXNlUG9pbnRzKTtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCB0cmFuc2Zvcm1lZFBvaW50cy5sZW5ndGggLyAyOyBpKyspIHtcbiAgICB0cmFuc2Zvcm1lZFBvaW50c1tpICogMl0gPSB3aWR0aCAvIDIgKiAoYmFzZVBvaW50c1tpICogMl0gKiBjb3MgLSBiYXNlUG9pbnRzW2kgKiAyICsgMV0gKiBzaW4pO1xuICAgIHRyYW5zZm9ybWVkUG9pbnRzW2kgKiAyICsgMV0gPSBoZWlnaHQgLyAyICogKGJhc2VQb2ludHNbaSAqIDIgKyAxXSAqIGNvcyArIGJhc2VQb2ludHNbaSAqIDJdICogc2luKTtcbiAgICB0cmFuc2Zvcm1lZFBvaW50c1tpICogMl0gKz0gY2VudGVyWDtcbiAgICB0cmFuc2Zvcm1lZFBvaW50c1tpICogMiArIDFdICs9IGNlbnRlclk7XG4gIH1cbiAgdmFyIHBvaW50cztcbiAgaWYgKHBhZGRpbmcgPiAwKSB7XG4gICAgdmFyIGV4cGFuZGVkTGluZVNldCA9IGV4cGFuZFBvbHlnb24odHJhbnNmb3JtZWRQb2ludHMsIC1wYWRkaW5nKTtcbiAgICBwb2ludHMgPSBqb2luTGluZXMoZXhwYW5kZWRMaW5lU2V0KTtcbiAgfSBlbHNlIHtcbiAgICBwb2ludHMgPSB0cmFuc2Zvcm1lZFBvaW50cztcbiAgfVxuICByZXR1cm4gcG9pbnRJbnNpZGVQb2x5Z29uUG9pbnRzKHgsIHksIHBvaW50cyk7XG59O1xudmFyIHBvaW50SW5zaWRlUm91bmRQb2x5Z29uID0gZnVuY3Rpb24gcG9pbnRJbnNpZGVSb3VuZFBvbHlnb24oeCwgeSwgYmFzZVBvaW50cywgY2VudGVyWCwgY2VudGVyWSwgd2lkdGgsIGhlaWdodCwgY29ybmVycykge1xuICB2YXIgY3V0UG9seWdvblBvaW50cyA9IG5ldyBBcnJheShiYXNlUG9pbnRzLmxlbmd0aCAqIDIpO1xuICBmb3IgKHZhciBpID0gMDsgaSA8IGNvcm5lcnMubGVuZ3RoOyBpKyspIHtcbiAgICB2YXIgY29ybmVyID0gY29ybmVyc1tpXTtcbiAgICBjdXRQb2x5Z29uUG9pbnRzW2kgKiA0ICsgMF0gPSBjb3JuZXIuc3RhcnRYO1xuICAgIGN1dFBvbHlnb25Qb2ludHNbaSAqIDQgKyAxXSA9IGNvcm5lci5zdGFydFk7XG4gICAgY3V0UG9seWdvblBvaW50c1tpICogNCArIDJdID0gY29ybmVyLnN0b3BYO1xuICAgIGN1dFBvbHlnb25Qb2ludHNbaSAqIDQgKyAzXSA9IGNvcm5lci5zdG9wWTtcbiAgICB2YXIgc3F1YXJlZERpc3RhbmNlID0gTWF0aC5wb3coY29ybmVyLmN4IC0geCwgMikgKyBNYXRoLnBvdyhjb3JuZXIuY3kgLSB5LCAyKTtcbiAgICBpZiAoc3F1YXJlZERpc3RhbmNlIDw9IE1hdGgucG93KGNvcm5lci5yYWRpdXMsIDIpKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHBvaW50SW5zaWRlUG9seWdvblBvaW50cyh4LCB5LCBjdXRQb2x5Z29uUG9pbnRzKTtcbn07XG52YXIgam9pbkxpbmVzID0gZnVuY3Rpb24gam9pbkxpbmVzKGxpbmVTZXQpIHtcbiAgdmFyIHZlcnRpY2VzID0gbmV3IEFycmF5KGxpbmVTZXQubGVuZ3RoIC8gMik7XG4gIHZhciBjdXJyZW50TGluZVN0YXJ0WCwgY3VycmVudExpbmVTdGFydFksIGN1cnJlbnRMaW5lRW5kWCwgY3VycmVudExpbmVFbmRZO1xuICB2YXIgbmV4dExpbmVTdGFydFgsIG5leHRMaW5lU3RhcnRZLCBuZXh0TGluZUVuZFgsIG5leHRMaW5lRW5kWTtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBsaW5lU2V0Lmxlbmd0aCAvIDQ7IGkrKykge1xuICAgIGN1cnJlbnRMaW5lU3RhcnRYID0gbGluZVNldFtpICogNF07XG4gICAgY3VycmVudExpbmVTdGFydFkgPSBsaW5lU2V0W2kgKiA0ICsgMV07XG4gICAgY3VycmVudExpbmVFbmRYID0gbGluZVNldFtpICogNCArIDJdO1xuICAgIGN1cnJlbnRMaW5lRW5kWSA9IGxpbmVTZXRbaSAqIDQgKyAzXTtcbiAgICBpZiAoaSA8IGxpbmVTZXQubGVuZ3RoIC8gNCAtIDEpIHtcbiAgICAgIG5leHRMaW5lU3RhcnRYID0gbGluZVNldFsoaSArIDEpICogNF07XG4gICAgICBuZXh0TGluZVN0YXJ0WSA9IGxpbmVTZXRbKGkgKyAxKSAqIDQgKyAxXTtcbiAgICAgIG5leHRMaW5lRW5kWCA9IGxpbmVTZXRbKGkgKyAxKSAqIDQgKyAyXTtcbiAgICAgIG5leHRMaW5lRW5kWSA9IGxpbmVTZXRbKGkgKyAxKSAqIDQgKyAzXTtcbiAgICB9IGVsc2Uge1xuICAgICAgbmV4dExpbmVTdGFydFggPSBsaW5lU2V0WzBdO1xuICAgICAgbmV4dExpbmVTdGFydFkgPSBsaW5lU2V0WzFdO1xuICAgICAgbmV4dExpbmVFbmRYID0gbGluZVNldFsyXTtcbiAgICAgIG5leHRMaW5lRW5kWSA9IGxpbmVTZXRbM107XG4gICAgfVxuICAgIHZhciBpbnRlcnNlY3Rpb24gPSBmaW5pdGVMaW5lc0ludGVyc2VjdChjdXJyZW50TGluZVN0YXJ0WCwgY3VycmVudExpbmVTdGFydFksIGN1cnJlbnRMaW5lRW5kWCwgY3VycmVudExpbmVFbmRZLCBuZXh0TGluZVN0YXJ0WCwgbmV4dExpbmVTdGFydFksIG5leHRMaW5lRW5kWCwgbmV4dExpbmVFbmRZLCB0cnVlKTtcbiAgICB2ZXJ0aWNlc1tpICogMl0gPSBpbnRlcnNlY3Rpb25bMF07XG4gICAgdmVydGljZXNbaSAqIDIgKyAxXSA9IGludGVyc2VjdGlvblsxXTtcbiAgfVxuICByZXR1cm4gdmVydGljZXM7XG59O1xudmFyIGV4cGFuZFBvbHlnb24gPSBmdW5jdGlvbiBleHBhbmRQb2x5Z29uKHBvaW50cywgcGFkKSB7XG4gIHZhciBleHBhbmRlZExpbmVTZXQgPSBuZXcgQXJyYXkocG9pbnRzLmxlbmd0aCAqIDIpO1xuICB2YXIgY3VycmVudFBvaW50WCwgY3VycmVudFBvaW50WSwgbmV4dFBvaW50WCwgbmV4dFBvaW50WTtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBwb2ludHMubGVuZ3RoIC8gMjsgaSsrKSB7XG4gICAgY3VycmVudFBvaW50WCA9IHBvaW50c1tpICogMl07XG4gICAgY3VycmVudFBvaW50WSA9IHBvaW50c1tpICogMiArIDFdO1xuICAgIGlmIChpIDwgcG9pbnRzLmxlbmd0aCAvIDIgLSAxKSB7XG4gICAgICBuZXh0UG9pbnRYID0gcG9pbnRzWyhpICsgMSkgKiAyXTtcbiAgICAgIG5leHRQb2ludFkgPSBwb2ludHNbKGkgKyAxKSAqIDIgKyAxXTtcbiAgICB9IGVsc2Uge1xuICAgICAgbmV4dFBvaW50WCA9IHBvaW50c1swXTtcbiAgICAgIG5leHRQb2ludFkgPSBwb2ludHNbMV07XG4gICAgfVxuXG4gICAgLy8gQ3VycmVudCBsaW5lOiBbY3VycmVudFBvaW50WCwgY3VycmVudFBvaW50WV0gdG8gW25leHRQb2ludFgsIG5leHRQb2ludFldXG5cbiAgICAvLyBBc3N1bWUgQ0NXIHBvbHlnb24gd2luZGluZ1xuXG4gICAgdmFyIG9mZnNldFggPSBuZXh0UG9pbnRZIC0gY3VycmVudFBvaW50WTtcbiAgICB2YXIgb2Zmc2V0WSA9IC0obmV4dFBvaW50WCAtIGN1cnJlbnRQb2ludFgpO1xuXG4gICAgLy8gTm9ybWFsaXplXG4gICAgdmFyIG9mZnNldExlbmd0aCA9IE1hdGguc3FydChvZmZzZXRYICogb2Zmc2V0WCArIG9mZnNldFkgKiBvZmZzZXRZKTtcbiAgICB2YXIgbm9ybWFsaXplZE9mZnNldFggPSBvZmZzZXRYIC8gb2Zmc2V0TGVuZ3RoO1xuICAgIHZhciBub3JtYWxpemVkT2Zmc2V0WSA9IG9mZnNldFkgLyBvZmZzZXRMZW5ndGg7XG4gICAgZXhwYW5kZWRMaW5lU2V0W2kgKiA0XSA9IGN1cnJlbnRQb2ludFggKyBub3JtYWxpemVkT2Zmc2V0WCAqIHBhZDtcbiAgICBleHBhbmRlZExpbmVTZXRbaSAqIDQgKyAxXSA9IGN1cnJlbnRQb2ludFkgKyBub3JtYWxpemVkT2Zmc2V0WSAqIHBhZDtcbiAgICBleHBhbmRlZExpbmVTZXRbaSAqIDQgKyAyXSA9IG5leHRQb2ludFggKyBub3JtYWxpemVkT2Zmc2V0WCAqIHBhZDtcbiAgICBleHBhbmRlZExpbmVTZXRbaSAqIDQgKyAzXSA9IG5leHRQb2ludFkgKyBub3JtYWxpemVkT2Zmc2V0WSAqIHBhZDtcbiAgfVxuICByZXR1cm4gZXhwYW5kZWRMaW5lU2V0O1xufTtcbnZhciBpbnRlcnNlY3RMaW5lRWxsaXBzZSA9IGZ1bmN0aW9uIGludGVyc2VjdExpbmVFbGxpcHNlKHgsIHksIGNlbnRlclgsIGNlbnRlclksIGVsbGlwc2VXcmFkaXVzLCBlbGxpcHNlSHJhZGl1cykge1xuICB2YXIgZGlzcFggPSBjZW50ZXJYIC0geDtcbiAgdmFyIGRpc3BZID0gY2VudGVyWSAtIHk7XG4gIGRpc3BYIC89IGVsbGlwc2VXcmFkaXVzO1xuICBkaXNwWSAvPSBlbGxpcHNlSHJhZGl1cztcbiAgdmFyIGxlbiA9IE1hdGguc3FydChkaXNwWCAqIGRpc3BYICsgZGlzcFkgKiBkaXNwWSk7XG4gIHZhciBuZXdMZW5ndGggPSBsZW4gLSAxO1xuICBpZiAobmV3TGVuZ3RoIDwgMCkge1xuICAgIHJldHVybiBbXTtcbiAgfVxuICB2YXIgbGVuUHJvcG9ydGlvbiA9IG5ld0xlbmd0aCAvIGxlbjtcbiAgcmV0dXJuIFsoY2VudGVyWCAtIHgpICogbGVuUHJvcG9ydGlvbiArIHgsIChjZW50ZXJZIC0geSkgKiBsZW5Qcm9wb3J0aW9uICsgeV07XG59O1xudmFyIGNoZWNrSW5FbGxpcHNlID0gZnVuY3Rpb24gY2hlY2tJbkVsbGlwc2UoeCwgeSwgd2lkdGgsIGhlaWdodCwgY2VudGVyWCwgY2VudGVyWSwgcGFkZGluZykge1xuICB4IC09IGNlbnRlclg7XG4gIHkgLT0gY2VudGVyWTtcbiAgeCAvPSB3aWR0aCAvIDIgKyBwYWRkaW5nO1xuICB5IC89IGhlaWdodCAvIDIgKyBwYWRkaW5nO1xuICByZXR1cm4geCAqIHggKyB5ICogeSA8PSAxO1xufTtcblxuLy8gUmV0dXJucyBpbnRlcnNlY3Rpb25zIG9mIGluY3JlYXNpbmcgZGlzdGFuY2UgZnJvbSBsaW5lJ3Mgc3RhcnQgcG9pbnRcbnZhciBpbnRlcnNlY3RMaW5lQ2lyY2xlID0gZnVuY3Rpb24gaW50ZXJzZWN0TGluZUNpcmNsZSh4MSwgeTEsIHgyLCB5MiwgY2VudGVyWCwgY2VudGVyWSwgcmFkaXVzKSB7XG4gIC8vIENhbGN1bGF0ZSBkLCBkaXJlY3Rpb24gdmVjdG9yIG9mIGxpbmVcbiAgdmFyIGQgPSBbeDIgLSB4MSwgeTIgLSB5MV07IC8vIERpcmVjdGlvbiB2ZWN0b3Igb2YgbGluZVxuICB2YXIgZiA9IFt4MSAtIGNlbnRlclgsIHkxIC0gY2VudGVyWV07XG4gIHZhciBhID0gZFswXSAqIGRbMF0gKyBkWzFdICogZFsxXTtcbiAgdmFyIGIgPSAyICogKGZbMF0gKiBkWzBdICsgZlsxXSAqIGRbMV0pO1xuICB2YXIgYyA9IGZbMF0gKiBmWzBdICsgZlsxXSAqIGZbMV0gLSByYWRpdXMgKiByYWRpdXM7XG4gIHZhciBkaXNjcmltaW5hbnQgPSBiICogYiAtIDQgKiBhICogYztcbiAgaWYgKGRpc2NyaW1pbmFudCA8IDApIHtcbiAgICByZXR1cm4gW107XG4gIH1cbiAgdmFyIHQxID0gKC1iICsgTWF0aC5zcXJ0KGRpc2NyaW1pbmFudCkpIC8gKDIgKiBhKTtcbiAgdmFyIHQyID0gKC1iIC0gTWF0aC5zcXJ0KGRpc2NyaW1pbmFudCkpIC8gKDIgKiBhKTtcbiAgdmFyIHRNaW4gPSBNYXRoLm1pbih0MSwgdDIpO1xuICB2YXIgdE1heCA9IE1hdGgubWF4KHQxLCB0Mik7XG4gIHZhciBpblJhbmdlUGFyYW1zID0gW107XG4gIGlmICh0TWluID49IDAgJiYgdE1pbiA8PSAxKSB7XG4gICAgaW5SYW5nZVBhcmFtcy5wdXNoKHRNaW4pO1xuICB9XG4gIGlmICh0TWF4ID49IDAgJiYgdE1heCA8PSAxKSB7XG4gICAgaW5SYW5nZVBhcmFtcy5wdXNoKHRNYXgpO1xuICB9XG4gIGlmIChpblJhbmdlUGFyYW1zLmxlbmd0aCA9PT0gMCkge1xuICAgIHJldHVybiBbXTtcbiAgfVxuICB2YXIgbmVhckludGVyc2VjdGlvblggPSBpblJhbmdlUGFyYW1zWzBdICogZFswXSArIHgxO1xuICB2YXIgbmVhckludGVyc2VjdGlvblkgPSBpblJhbmdlUGFyYW1zWzBdICogZFsxXSArIHkxO1xuICBpZiAoaW5SYW5nZVBhcmFtcy5sZW5ndGggPiAxKSB7XG4gICAgaWYgKGluUmFuZ2VQYXJhbXNbMF0gPT0gaW5SYW5nZVBhcmFtc1sxXSkge1xuICAgICAgcmV0dXJuIFtuZWFySW50ZXJzZWN0aW9uWCwgbmVhckludGVyc2VjdGlvblldO1xuICAgIH0gZWxzZSB7XG4gICAgICB2YXIgZmFySW50ZXJzZWN0aW9uWCA9IGluUmFuZ2VQYXJhbXNbMV0gKiBkWzBdICsgeDE7XG4gICAgICB2YXIgZmFySW50ZXJzZWN0aW9uWSA9IGluUmFuZ2VQYXJhbXNbMV0gKiBkWzFdICsgeTE7XG4gICAgICByZXR1cm4gW25lYXJJbnRlcnNlY3Rpb25YLCBuZWFySW50ZXJzZWN0aW9uWSwgZmFySW50ZXJzZWN0aW9uWCwgZmFySW50ZXJzZWN0aW9uWV07XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIHJldHVybiBbbmVhckludGVyc2VjdGlvblgsIG5lYXJJbnRlcnNlY3Rpb25ZXTtcbiAgfVxufTtcbnZhciBtaWRPZlRocmVlID0gZnVuY3Rpb24gbWlkT2ZUaHJlZShhLCBiLCBjKSB7XG4gIGlmIChiIDw9IGEgJiYgYSA8PSBjIHx8IGMgPD0gYSAmJiBhIDw9IGIpIHtcbiAgICByZXR1cm4gYTtcbiAgfSBlbHNlIGlmIChhIDw9IGIgJiYgYiA8PSBjIHx8IGMgPD0gYiAmJiBiIDw9IGEpIHtcbiAgICByZXR1cm4gYjtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gYztcbiAgfVxufTtcblxuLy8gKHgxLHkxKT0+KHgyLHkyKSBpbnRlcnNlY3Qgd2l0aCAoeDMseTMpPT4oeDQseTQpXG52YXIgZmluaXRlTGluZXNJbnRlcnNlY3QgPSBmdW5jdGlvbiBmaW5pdGVMaW5lc0ludGVyc2VjdCh4MSwgeTEsIHgyLCB5MiwgeDMsIHkzLCB4NCwgeTQsIGluZmluaXRlTGluZXMpIHtcbiAgdmFyIGR4MTMgPSB4MSAtIHgzO1xuICB2YXIgZHgyMSA9IHgyIC0geDE7XG4gIHZhciBkeDQzID0geDQgLSB4MztcbiAgdmFyIGR5MTMgPSB5MSAtIHkzO1xuICB2YXIgZHkyMSA9IHkyIC0geTE7XG4gIHZhciBkeTQzID0geTQgLSB5MztcbiAgdmFyIHVhX3QgPSBkeDQzICogZHkxMyAtIGR5NDMgKiBkeDEzO1xuICB2YXIgdWJfdCA9IGR4MjEgKiBkeTEzIC0gZHkyMSAqIGR4MTM7XG4gIHZhciB1X2IgPSBkeTQzICogZHgyMSAtIGR4NDMgKiBkeTIxO1xuICBpZiAodV9iICE9PSAwKSB7XG4gICAgdmFyIHVhID0gdWFfdCAvIHVfYjtcbiAgICB2YXIgdWIgPSB1Yl90IC8gdV9iO1xuICAgIHZhciBmbHB0VGhyZXNob2xkID0gMC4wMDE7XG4gICAgdmFyIF9taW4gPSAwIC0gZmxwdFRocmVzaG9sZDtcbiAgICB2YXIgX21heCA9IDEgKyBmbHB0VGhyZXNob2xkO1xuICAgIGlmIChfbWluIDw9IHVhICYmIHVhIDw9IF9tYXggJiYgX21pbiA8PSB1YiAmJiB1YiA8PSBfbWF4KSB7XG4gICAgICByZXR1cm4gW3gxICsgdWEgKiBkeDIxLCB5MSArIHVhICogZHkyMV07XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmICghaW5maW5pdGVMaW5lcykge1xuICAgICAgICByZXR1cm4gW107XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gW3gxICsgdWEgKiBkeDIxLCB5MSArIHVhICogZHkyMV07XG4gICAgICB9XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIGlmICh1YV90ID09PSAwIHx8IHViX3QgPT09IDApIHtcbiAgICAgIC8vIFBhcmFsbGVsLCBjb2luY2lkZW50IGxpbmVzLiBDaGVjayBpZiBvdmVybGFwXG5cbiAgICAgIC8vIENoZWNrIGVuZHBvaW50IG9mIHNlY29uZCBsaW5lXG4gICAgICBpZiAobWlkT2ZUaHJlZSh4MSwgeDIsIHg0KSA9PT0geDQpIHtcbiAgICAgICAgcmV0dXJuIFt4NCwgeTRdO1xuICAgICAgfVxuXG4gICAgICAvLyBDaGVjayBzdGFydCBwb2ludCBvZiBzZWNvbmQgbGluZVxuICAgICAgaWYgKG1pZE9mVGhyZWUoeDEsIHgyLCB4MykgPT09IHgzKSB7XG4gICAgICAgIHJldHVybiBbeDMsIHkzXTtcbiAgICAgIH1cblxuICAgICAgLy8gRW5kcG9pbnQgb2YgZmlyc3QgbGluZVxuICAgICAgaWYgKG1pZE9mVGhyZWUoeDMsIHg0LCB4MikgPT09IHgyKSB7XG4gICAgICAgIHJldHVybiBbeDIsIHkyXTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBbXTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gUGFyYWxsZWwsIG5vbi1jb2luY2lkZW50XG4gICAgICByZXR1cm4gW107XG4gICAgfVxuICB9XG59O1xuXG4vLyBtYXRoLnBvbHlnb25JbnRlcnNlY3RMaW5lKCB4LCB5LCBiYXNlUG9pbnRzLCBjZW50ZXJYLCBjZW50ZXJZLCB3aWR0aCwgaGVpZ2h0LCBwYWRkaW5nIClcbi8vIGludGVyc2VjdCBhIG5vZGUgcG9seWdvbiAocHRzIHRyYW5zZm9ybWVkKVxuLy9cbi8vIG1hdGgucG9seWdvbkludGVyc2VjdExpbmUoIHgsIHksIGJhc2VQb2ludHMsIGNlbnRlclgsIGNlbnRlclkgKVxuLy8gaW50ZXJzZWN0IHRoZSBwb2ludHMgKG5vIHRyYW5zZm9ybSlcbnZhciBwb2x5Z29uSW50ZXJzZWN0TGluZSA9IGZ1bmN0aW9uIHBvbHlnb25JbnRlcnNlY3RMaW5lKHgsIHksIGJhc2VQb2ludHMsIGNlbnRlclgsIGNlbnRlclksIHdpZHRoLCBoZWlnaHQsIHBhZGRpbmcpIHtcbiAgdmFyIGludGVyc2VjdGlvbnMgPSBbXTtcbiAgdmFyIGludGVyc2VjdGlvbjtcbiAgdmFyIHRyYW5zZm9ybWVkUG9pbnRzID0gbmV3IEFycmF5KGJhc2VQb2ludHMubGVuZ3RoKTtcbiAgdmFyIGRvVHJhbnNmb3JtID0gdHJ1ZTtcbiAgaWYgKHdpZHRoID09IG51bGwpIHtcbiAgICBkb1RyYW5zZm9ybSA9IGZhbHNlO1xuICB9XG4gIHZhciBwb2ludHM7XG4gIGlmIChkb1RyYW5zZm9ybSkge1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdHJhbnNmb3JtZWRQb2ludHMubGVuZ3RoIC8gMjsgaSsrKSB7XG4gICAgICB0cmFuc2Zvcm1lZFBvaW50c1tpICogMl0gPSBiYXNlUG9pbnRzW2kgKiAyXSAqIHdpZHRoICsgY2VudGVyWDtcbiAgICAgIHRyYW5zZm9ybWVkUG9pbnRzW2kgKiAyICsgMV0gPSBiYXNlUG9pbnRzW2kgKiAyICsgMV0gKiBoZWlnaHQgKyBjZW50ZXJZO1xuICAgIH1cbiAgICBpZiAocGFkZGluZyA+IDApIHtcbiAgICAgIHZhciBleHBhbmRlZExpbmVTZXQgPSBleHBhbmRQb2x5Z29uKHRyYW5zZm9ybWVkUG9pbnRzLCAtcGFkZGluZyk7XG4gICAgICBwb2ludHMgPSBqb2luTGluZXMoZXhwYW5kZWRMaW5lU2V0KTtcbiAgICB9IGVsc2Uge1xuICAgICAgcG9pbnRzID0gdHJhbnNmb3JtZWRQb2ludHM7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIHBvaW50cyA9IGJhc2VQb2ludHM7XG4gIH1cbiAgdmFyIGN1cnJlbnRYLCBjdXJyZW50WSwgbmV4dFgsIG5leHRZO1xuICBmb3IgKHZhciBfaTIgPSAwOyBfaTIgPCBwb2ludHMubGVuZ3RoIC8gMjsgX2kyKyspIHtcbiAgICBjdXJyZW50WCA9IHBvaW50c1tfaTIgKiAyXTtcbiAgICBjdXJyZW50WSA9IHBvaW50c1tfaTIgKiAyICsgMV07XG4gICAgaWYgKF9pMiA8IHBvaW50cy5sZW5ndGggLyAyIC0gMSkge1xuICAgICAgbmV4dFggPSBwb2ludHNbKF9pMiArIDEpICogMl07XG4gICAgICBuZXh0WSA9IHBvaW50c1soX2kyICsgMSkgKiAyICsgMV07XG4gICAgfSBlbHNlIHtcbiAgICAgIG5leHRYID0gcG9pbnRzWzBdO1xuICAgICAgbmV4dFkgPSBwb2ludHNbMV07XG4gICAgfVxuICAgIGludGVyc2VjdGlvbiA9IGZpbml0ZUxpbmVzSW50ZXJzZWN0KHgsIHksIGNlbnRlclgsIGNlbnRlclksIGN1cnJlbnRYLCBjdXJyZW50WSwgbmV4dFgsIG5leHRZKTtcbiAgICBpZiAoaW50ZXJzZWN0aW9uLmxlbmd0aCAhPT0gMCkge1xuICAgICAgaW50ZXJzZWN0aW9ucy5wdXNoKGludGVyc2VjdGlvblswXSwgaW50ZXJzZWN0aW9uWzFdKTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIGludGVyc2VjdGlvbnM7XG59O1xudmFyIHJvdW5kUG9seWdvbkludGVyc2VjdExpbmUgPSBmdW5jdGlvbiByb3VuZFBvbHlnb25JbnRlcnNlY3RMaW5lKHgsIHksIGJhc2VQb2ludHMsIGNlbnRlclgsIGNlbnRlclksIHdpZHRoLCBoZWlnaHQsIHBhZGRpbmcsIGNvcm5lcnMpIHtcbiAgdmFyIGludGVyc2VjdGlvbnMgPSBbXTtcbiAgdmFyIGludGVyc2VjdGlvbjtcbiAgdmFyIGxpbmVzID0gbmV3IEFycmF5KGJhc2VQb2ludHMubGVuZ3RoICogMik7XG4gIGNvcm5lcnMuZm9yRWFjaChmdW5jdGlvbiAoY29ybmVyLCBpKSB7XG4gICAgaWYgKGkgPT09IDApIHtcbiAgICAgIGxpbmVzW2xpbmVzLmxlbmd0aCAtIDJdID0gY29ybmVyLnN0YXJ0WDtcbiAgICAgIGxpbmVzW2xpbmVzLmxlbmd0aCAtIDFdID0gY29ybmVyLnN0YXJ0WTtcbiAgICB9IGVsc2Uge1xuICAgICAgbGluZXNbaSAqIDQgLSAyXSA9IGNvcm5lci5zdGFydFg7XG4gICAgICBsaW5lc1tpICogNCAtIDFdID0gY29ybmVyLnN0YXJ0WTtcbiAgICB9XG4gICAgbGluZXNbaSAqIDRdID0gY29ybmVyLnN0b3BYO1xuICAgIGxpbmVzW2kgKiA0ICsgMV0gPSBjb3JuZXIuc3RvcFk7XG4gICAgaW50ZXJzZWN0aW9uID0gaW50ZXJzZWN0TGluZUNpcmNsZSh4LCB5LCBjZW50ZXJYLCBjZW50ZXJZLCBjb3JuZXIuY3gsIGNvcm5lci5jeSwgY29ybmVyLnJhZGl1cyk7XG4gICAgaWYgKGludGVyc2VjdGlvbi5sZW5ndGggIT09IDApIHtcbiAgICAgIGludGVyc2VjdGlvbnMucHVzaChpbnRlcnNlY3Rpb25bMF0sIGludGVyc2VjdGlvblsxXSk7XG4gICAgfVxuICB9KTtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBsaW5lcy5sZW5ndGggLyA0OyBpKyspIHtcbiAgICBpbnRlcnNlY3Rpb24gPSBmaW5pdGVMaW5lc0ludGVyc2VjdCh4LCB5LCBjZW50ZXJYLCBjZW50ZXJZLCBsaW5lc1tpICogNF0sIGxpbmVzW2kgKiA0ICsgMV0sIGxpbmVzW2kgKiA0ICsgMl0sIGxpbmVzW2kgKiA0ICsgM10sIGZhbHNlKTtcbiAgICBpZiAoaW50ZXJzZWN0aW9uLmxlbmd0aCAhPT0gMCkge1xuICAgICAgaW50ZXJzZWN0aW9ucy5wdXNoKGludGVyc2VjdGlvblswXSwgaW50ZXJzZWN0aW9uWzFdKTtcbiAgICB9XG4gIH1cbiAgaWYgKGludGVyc2VjdGlvbnMubGVuZ3RoID4gMikge1xuICAgIHZhciBsb3dlc3RJbnRlcnNlY3Rpb24gPSBbaW50ZXJzZWN0aW9uc1swXSwgaW50ZXJzZWN0aW9uc1sxXV07XG4gICAgdmFyIGxvd2VzdFNxdWFyZWREaXN0YW5jZSA9IE1hdGgucG93KGxvd2VzdEludGVyc2VjdGlvblswXSAtIHgsIDIpICsgTWF0aC5wb3cobG93ZXN0SW50ZXJzZWN0aW9uWzFdIC0geSwgMik7XG4gICAgZm9yICh2YXIgX2kzID0gMTsgX2kzIDwgaW50ZXJzZWN0aW9ucy5sZW5ndGggLyAyOyBfaTMrKykge1xuICAgICAgdmFyIHNxdWFyZWREaXN0YW5jZSA9IE1hdGgucG93KGludGVyc2VjdGlvbnNbX2kzICogMl0gLSB4LCAyKSArIE1hdGgucG93KGludGVyc2VjdGlvbnNbX2kzICogMiArIDFdIC0geSwgMik7XG4gICAgICBpZiAoc3F1YXJlZERpc3RhbmNlIDw9IGxvd2VzdFNxdWFyZWREaXN0YW5jZSkge1xuICAgICAgICBsb3dlc3RJbnRlcnNlY3Rpb25bMF0gPSBpbnRlcnNlY3Rpb25zW19pMyAqIDJdO1xuICAgICAgICBsb3dlc3RJbnRlcnNlY3Rpb25bMV0gPSBpbnRlcnNlY3Rpb25zW19pMyAqIDIgKyAxXTtcbiAgICAgICAgbG93ZXN0U3F1YXJlZERpc3RhbmNlID0gc3F1YXJlZERpc3RhbmNlO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gbG93ZXN0SW50ZXJzZWN0aW9uO1xuICB9XG4gIHJldHVybiBpbnRlcnNlY3Rpb25zO1xufTtcbnZhciBzaG9ydGVuSW50ZXJzZWN0aW9uID0gZnVuY3Rpb24gc2hvcnRlbkludGVyc2VjdGlvbihpbnRlcnNlY3Rpb24sIG9mZnNldCwgYW1vdW50KSB7XG4gIHZhciBkaXNwID0gW2ludGVyc2VjdGlvblswXSAtIG9mZnNldFswXSwgaW50ZXJzZWN0aW9uWzFdIC0gb2Zmc2V0WzFdXTtcbiAgdmFyIGxlbmd0aCA9IE1hdGguc3FydChkaXNwWzBdICogZGlzcFswXSArIGRpc3BbMV0gKiBkaXNwWzFdKTtcbiAgdmFyIGxlblJhdGlvID0gKGxlbmd0aCAtIGFtb3VudCkgLyBsZW5ndGg7XG4gIGlmIChsZW5SYXRpbyA8IDApIHtcbiAgICBsZW5SYXRpbyA9IDAuMDAwMDE7XG4gIH1cbiAgcmV0dXJuIFtvZmZzZXRbMF0gKyBsZW5SYXRpbyAqIGRpc3BbMF0sIG9mZnNldFsxXSArIGxlblJhdGlvICogZGlzcFsxXV07XG59O1xudmFyIGdlbmVyYXRlVW5pdE5nb25Qb2ludHNGaXRUb1NxdWFyZSA9IGZ1bmN0aW9uIGdlbmVyYXRlVW5pdE5nb25Qb2ludHNGaXRUb1NxdWFyZShzaWRlcywgcm90YXRpb25SYWRpYW5zKSB7XG4gIHZhciBwb2ludHMgPSBnZW5lcmF0ZVVuaXROZ29uUG9pbnRzKHNpZGVzLCByb3RhdGlvblJhZGlhbnMpO1xuICBwb2ludHMgPSBmaXRQb2x5Z29uVG9TcXVhcmUocG9pbnRzKTtcbiAgcmV0dXJuIHBvaW50cztcbn07XG52YXIgZml0UG9seWdvblRvU3F1YXJlID0gZnVuY3Rpb24gZml0UG9seWdvblRvU3F1YXJlKHBvaW50cykge1xuICB2YXIgeCwgeTtcbiAgdmFyIHNpZGVzID0gcG9pbnRzLmxlbmd0aCAvIDI7XG4gIHZhciBtaW5YID0gSW5maW5pdHksXG4gICAgbWluWSA9IEluZmluaXR5LFxuICAgIG1heFggPSAtSW5maW5pdHksXG4gICAgbWF4WSA9IC1JbmZpbml0eTtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBzaWRlczsgaSsrKSB7XG4gICAgeCA9IHBvaW50c1syICogaV07XG4gICAgeSA9IHBvaW50c1syICogaSArIDFdO1xuICAgIG1pblggPSBNYXRoLm1pbihtaW5YLCB4KTtcbiAgICBtYXhYID0gTWF0aC5tYXgobWF4WCwgeCk7XG4gICAgbWluWSA9IE1hdGgubWluKG1pblksIHkpO1xuICAgIG1heFkgPSBNYXRoLm1heChtYXhZLCB5KTtcbiAgfVxuXG4gIC8vIHN0cmV0Y2ggZmFjdG9yc1xuICB2YXIgc3ggPSAyIC8gKG1heFggLSBtaW5YKTtcbiAgdmFyIHN5ID0gMiAvIChtYXhZIC0gbWluWSk7XG4gIGZvciAodmFyIF9pNCA9IDA7IF9pNCA8IHNpZGVzOyBfaTQrKykge1xuICAgIHggPSBwb2ludHNbMiAqIF9pNF0gPSBwb2ludHNbMiAqIF9pNF0gKiBzeDtcbiAgICB5ID0gcG9pbnRzWzIgKiBfaTQgKyAxXSA9IHBvaW50c1syICogX2k0ICsgMV0gKiBzeTtcbiAgICBtaW5YID0gTWF0aC5taW4obWluWCwgeCk7XG4gICAgbWF4WCA9IE1hdGgubWF4KG1heFgsIHgpO1xuICAgIG1pblkgPSBNYXRoLm1pbihtaW5ZLCB5KTtcbiAgICBtYXhZID0gTWF0aC5tYXgobWF4WSwgeSk7XG4gIH1cbiAgaWYgKG1pblkgPCAtMSkge1xuICAgIGZvciAodmFyIF9pNSA9IDA7IF9pNSA8IHNpZGVzOyBfaTUrKykge1xuICAgICAgeSA9IHBvaW50c1syICogX2k1ICsgMV0gPSBwb2ludHNbMiAqIF9pNSArIDFdICsgKC0xIC0gbWluWSk7XG4gICAgfVxuICB9XG4gIHJldHVybiBwb2ludHM7XG59O1xudmFyIGdlbmVyYXRlVW5pdE5nb25Qb2ludHMgPSBmdW5jdGlvbiBnZW5lcmF0ZVVuaXROZ29uUG9pbnRzKHNpZGVzLCByb3RhdGlvblJhZGlhbnMpIHtcbiAgdmFyIGluY3JlbWVudCA9IDEuMCAvIHNpZGVzICogMiAqIE1hdGguUEk7XG4gIHZhciBzdGFydEFuZ2xlID0gc2lkZXMgJSAyID09PSAwID8gTWF0aC5QSSAvIDIuMCArIGluY3JlbWVudCAvIDIuMCA6IE1hdGguUEkgLyAyLjA7XG4gIHN0YXJ0QW5nbGUgKz0gcm90YXRpb25SYWRpYW5zO1xuICB2YXIgcG9pbnRzID0gbmV3IEFycmF5KHNpZGVzICogMik7XG4gIHZhciBjdXJyZW50QW5nbGU7XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgc2lkZXM7IGkrKykge1xuICAgIGN1cnJlbnRBbmdsZSA9IGkgKiBpbmNyZW1lbnQgKyBzdGFydEFuZ2xlO1xuICAgIHBvaW50c1syICogaV0gPSBNYXRoLmNvcyhjdXJyZW50QW5nbGUpOyAvLyB4XG4gICAgcG9pbnRzWzIgKiBpICsgMV0gPSBNYXRoLnNpbigtY3VycmVudEFuZ2xlKTsgLy8geVxuICB9XG4gIHJldHVybiBwb2ludHM7XG59O1xuXG4vLyBTZXQgdGhlIGRlZmF1bHQgcmFkaXVzLCB1bmxlc3MgaGFsZiBvZiB3aWR0aCBvciBoZWlnaHQgaXMgc21hbGxlciB0aGFuIGRlZmF1bHRcbnZhciBnZXRSb3VuZFJlY3RhbmdsZVJhZGl1cyA9IGZ1bmN0aW9uIGdldFJvdW5kUmVjdGFuZ2xlUmFkaXVzKHdpZHRoLCBoZWlnaHQpIHtcbiAgcmV0dXJuIE1hdGgubWluKHdpZHRoIC8gNCwgaGVpZ2h0IC8gNCwgOCk7XG59O1xuXG4vLyBTZXQgdGhlIGRlZmF1bHQgcmFkaXVzXG52YXIgZ2V0Um91bmRQb2x5Z29uUmFkaXVzID0gZnVuY3Rpb24gZ2V0Um91bmRQb2x5Z29uUmFkaXVzKHdpZHRoLCBoZWlnaHQpIHtcbiAgcmV0dXJuIE1hdGgubWluKHdpZHRoIC8gMTAsIGhlaWdodCAvIDEwLCA4KTtcbn07XG52YXIgZ2V0Q3V0UmVjdGFuZ2xlQ29ybmVyTGVuZ3RoID0gZnVuY3Rpb24gZ2V0Q3V0UmVjdGFuZ2xlQ29ybmVyTGVuZ3RoKCkge1xuICByZXR1cm4gODtcbn07XG52YXIgYmV6aWVyUHRzVG9RdWFkQ29lZmYgPSBmdW5jdGlvbiBiZXppZXJQdHNUb1F1YWRDb2VmZihwMCwgcDEsIHAyKSB7XG4gIHJldHVybiBbcDAgLSAyICogcDEgKyBwMiwgMiAqIChwMSAtIHAwKSwgcDBdO1xufTtcblxuLy8gZ2V0IGN1cnZlIHdpZHRoLCBoZWlnaHQsIGFuZCBjb250cm9sIHBvaW50IHBvc2l0aW9uIG9mZnNldHMgYXMgYSBwZXJjZW50YWdlIG9mIG5vZGUgaGVpZ2h0IC8gd2lkdGhcbnZhciBnZXRCYXJyZWxDdXJ2ZUNvbnN0YW50cyA9IGZ1bmN0aW9uIGdldEJhcnJlbEN1cnZlQ29uc3RhbnRzKHdpZHRoLCBoZWlnaHQpIHtcbiAgcmV0dXJuIHtcbiAgICBoZWlnaHRPZmZzZXQ6IE1hdGgubWluKDE1LCAwLjA1ICogaGVpZ2h0KSxcbiAgICB3aWR0aE9mZnNldDogTWF0aC5taW4oMTAwLCAwLjI1ICogd2lkdGgpLFxuICAgIGN0cmxQdE9mZnNldFBjdDogMC4wNVxuICB9O1xufTtcblxudmFyIHBhZ2VSYW5rRGVmYXVsdHMgPSBkZWZhdWx0cyRnKHtcbiAgZGFtcGluZ0ZhY3RvcjogMC44LFxuICBwcmVjaXNpb246IDAuMDAwMDAxLFxuICBpdGVyYXRpb25zOiAyMDAsXG4gIHdlaWdodDogZnVuY3Rpb24gd2VpZ2h0KGVkZ2UpIHtcbiAgICByZXR1cm4gMTtcbiAgfVxufSk7XG52YXIgZWxlc2ZuJG8gPSB7XG4gIHBhZ2VSYW5rOiBmdW5jdGlvbiBwYWdlUmFuayhvcHRpb25zKSB7XG4gICAgdmFyIF9wYWdlUmFua0RlZmF1bHRzID0gcGFnZVJhbmtEZWZhdWx0cyhvcHRpb25zKSxcbiAgICAgIGRhbXBpbmdGYWN0b3IgPSBfcGFnZVJhbmtEZWZhdWx0cy5kYW1waW5nRmFjdG9yLFxuICAgICAgcHJlY2lzaW9uID0gX3BhZ2VSYW5rRGVmYXVsdHMucHJlY2lzaW9uLFxuICAgICAgaXRlcmF0aW9ucyA9IF9wYWdlUmFua0RlZmF1bHRzLml0ZXJhdGlvbnMsXG4gICAgICB3ZWlnaHQgPSBfcGFnZVJhbmtEZWZhdWx0cy53ZWlnaHQ7XG4gICAgdmFyIGN5ID0gdGhpcy5fcHJpdmF0ZS5jeTtcbiAgICB2YXIgX3RoaXMkYnlHcm91cCA9IHRoaXMuYnlHcm91cCgpLFxuICAgICAgbm9kZXMgPSBfdGhpcyRieUdyb3VwLm5vZGVzLFxuICAgICAgZWRnZXMgPSBfdGhpcyRieUdyb3VwLmVkZ2VzO1xuICAgIHZhciBudW1Ob2RlcyA9IG5vZGVzLmxlbmd0aDtcbiAgICB2YXIgbnVtTm9kZXNTcWQgPSBudW1Ob2RlcyAqIG51bU5vZGVzO1xuICAgIHZhciBudW1FZGdlcyA9IGVkZ2VzLmxlbmd0aDtcblxuICAgIC8vIENvbnN0cnVjdCB0cmFuc3Bvc2VkIGFkamFjZW5jeSBtYXRyaXhcbiAgICAvLyBGaXJzdCBsZXRzIGhhdmUgYSB6ZXJvZWQgbWF0cml4IG9mIHRoZSByaWdodCBzaXplXG4gICAgLy8gV2UnbGwgYWxzbyBrZWVwIHRyYWNrIG9mIHRoZSBzdW0gb2YgZWFjaCBjb2x1bW5cbiAgICB2YXIgbWF0cml4ID0gbmV3IEFycmF5KG51bU5vZGVzU3FkKTtcbiAgICB2YXIgY29sdW1uU3VtID0gbmV3IEFycmF5KG51bU5vZGVzKTtcbiAgICB2YXIgYWRkaXRpb25hbFByb2IgPSAoMSAtIGRhbXBpbmdGYWN0b3IpIC8gbnVtTm9kZXM7XG5cbiAgICAvLyBDcmVhdGUgbnVsbCBtYXRyaXhcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IG51bU5vZGVzOyBpKyspIHtcbiAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgbnVtTm9kZXM7IGorKykge1xuICAgICAgICB2YXIgbiA9IGkgKiBudW1Ob2RlcyArIGo7XG4gICAgICAgIG1hdHJpeFtuXSA9IDA7XG4gICAgICB9XG4gICAgICBjb2x1bW5TdW1baV0gPSAwO1xuICAgIH1cblxuICAgIC8vIE5vdywgcHJvY2VzcyBlZGdlc1xuICAgIGZvciAodmFyIF9pID0gMDsgX2kgPCBudW1FZGdlczsgX2krKykge1xuICAgICAgdmFyIGVkZ2UgPSBlZGdlc1tfaV07XG4gICAgICB2YXIgc3JjSWQgPSBlZGdlLmRhdGEoJ3NvdXJjZScpO1xuICAgICAgdmFyIHRndElkID0gZWRnZS5kYXRhKCd0YXJnZXQnKTtcblxuICAgICAgLy8gRG9uJ3QgaW5jbHVkZSBsb29wcyBpbiB0aGUgbWF0cml4XG4gICAgICBpZiAoc3JjSWQgPT09IHRndElkKSB7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuICAgICAgdmFyIHMgPSBub2Rlcy5pbmRleE9mSWQoc3JjSWQpO1xuICAgICAgdmFyIHQgPSBub2Rlcy5pbmRleE9mSWQodGd0SWQpO1xuICAgICAgdmFyIHcgPSB3ZWlnaHQoZWRnZSk7XG4gICAgICB2YXIgX24gPSB0ICogbnVtTm9kZXMgKyBzO1xuXG4gICAgICAvLyBVcGRhdGUgbWF0cml4XG4gICAgICBtYXRyaXhbX25dICs9IHc7XG5cbiAgICAgIC8vIFVwZGF0ZSBjb2x1bW4gc3VtXG4gICAgICBjb2x1bW5TdW1bc10gKz0gdztcbiAgICB9XG5cbiAgICAvLyBBZGQgYWRkaXRpb25hbCBwcm9iYWJpbGl0eSBiYXNlZCBvbiBkYW1waW5nIGZhY3RvclxuICAgIC8vIEFsc28sIHRha2UgaW50byBhY2NvdW50IGNvbHVtbnMgdGhhdCBoYXZlIHN1bSA9IDBcbiAgICB2YXIgcCA9IDEuMCAvIG51bU5vZGVzICsgYWRkaXRpb25hbFByb2I7IC8vIFNob3J0aGFuZFxuXG4gICAgLy8gVHJhdmVyc2UgbWF0cml4LCBjb2x1bW4gYnkgY29sdW1uXG4gICAgZm9yICh2YXIgX2ogPSAwOyBfaiA8IG51bU5vZGVzOyBfaisrKSB7XG4gICAgICBpZiAoY29sdW1uU3VtW19qXSA9PT0gMCkge1xuICAgICAgICAvLyBObyAnbGlua3MnIG91dCBmcm9tIG5vZGUganRoLCBhc3N1bWUgZXF1YWwgcHJvYmFiaWxpdHkgZm9yIGVhY2ggcG9zc2libGUgbm9kZVxuICAgICAgICBmb3IgKHZhciBfaTIgPSAwOyBfaTIgPCBudW1Ob2RlczsgX2kyKyspIHtcbiAgICAgICAgICB2YXIgX24yID0gX2kyICogbnVtTm9kZXMgKyBfajtcbiAgICAgICAgICBtYXRyaXhbX24yXSA9IHA7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIE5vZGUganRoIGhhcyBvdXRnb2luZyBsaW5rLCBjb21wdXRlIG5vcm1hbGl6ZWQgcHJvYmFiaWxpdGllc1xuICAgICAgICBmb3IgKHZhciBfaTMgPSAwOyBfaTMgPCBudW1Ob2RlczsgX2kzKyspIHtcbiAgICAgICAgICB2YXIgX24zID0gX2kzICogbnVtTm9kZXMgKyBfajtcbiAgICAgICAgICBtYXRyaXhbX24zXSA9IG1hdHJpeFtfbjNdIC8gY29sdW1uU3VtW19qXSArIGFkZGl0aW9uYWxQcm9iO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gQ29tcHV0ZSBkb21pbmFudCBlaWdlbnZlY3RvciB1c2luZyBwb3dlciBtZXRob2RcbiAgICB2YXIgZWlnZW52ZWN0b3IgPSBuZXcgQXJyYXkobnVtTm9kZXMpO1xuICAgIHZhciB0ZW1wID0gbmV3IEFycmF5KG51bU5vZGVzKTtcbiAgICB2YXIgcHJldmlvdXM7XG5cbiAgICAvLyBTdGFydCB3aXRoIGEgdmVjdG9yIG9mIGFsbCAxJ3NcbiAgICAvLyBBbHNvLCBpbml0aWFsaXplIGEgbnVsbCB2ZWN0b3Igd2hpY2ggd2lsbCBiZSB1c2VkIGFzIHNob3J0aGFuZFxuICAgIGZvciAodmFyIF9pNCA9IDA7IF9pNCA8IG51bU5vZGVzOyBfaTQrKykge1xuICAgICAgZWlnZW52ZWN0b3JbX2k0XSA9IDE7XG4gICAgfVxuICAgIGZvciAodmFyIGl0ZXIgPSAwOyBpdGVyIDwgaXRlcmF0aW9uczsgaXRlcisrKSB7XG4gICAgICAvLyBUZW1wIGFycmF5IHdpdGggYWxsIDAnc1xuICAgICAgZm9yICh2YXIgX2k1ID0gMDsgX2k1IDwgbnVtTm9kZXM7IF9pNSsrKSB7XG4gICAgICAgIHRlbXBbX2k1XSA9IDA7XG4gICAgICB9XG5cbiAgICAgIC8vIE11bHRpcGx5IG1hdHJpeCB3aXRoIHByZXZpb3VzIHJlc3VsdFxuICAgICAgZm9yICh2YXIgX2k2ID0gMDsgX2k2IDwgbnVtTm9kZXM7IF9pNisrKSB7XG4gICAgICAgIGZvciAodmFyIF9qMiA9IDA7IF9qMiA8IG51bU5vZGVzOyBfajIrKykge1xuICAgICAgICAgIHZhciBfbjQgPSBfaTYgKiBudW1Ob2RlcyArIF9qMjtcbiAgICAgICAgICB0ZW1wW19pNl0gKz0gbWF0cml4W19uNF0gKiBlaWdlbnZlY3RvcltfajJdO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpblBsYWNlU3VtTm9ybWFsaXplKHRlbXApO1xuICAgICAgcHJldmlvdXMgPSBlaWdlbnZlY3RvcjtcbiAgICAgIGVpZ2VudmVjdG9yID0gdGVtcDtcbiAgICAgIHRlbXAgPSBwcmV2aW91cztcbiAgICAgIHZhciBkaWZmID0gMDtcbiAgICAgIC8vIENvbXB1dGUgZGlmZmVyZW5jZSAoc3F1YXJlZCBtb2R1bGUpIG9mIGJvdGggdmVjdG9yc1xuICAgICAgZm9yICh2YXIgX2k3ID0gMDsgX2k3IDwgbnVtTm9kZXM7IF9pNysrKSB7XG4gICAgICAgIHZhciBkZWx0YSA9IHByZXZpb3VzW19pN10gLSBlaWdlbnZlY3RvcltfaTddO1xuICAgICAgICBkaWZmICs9IGRlbHRhICogZGVsdGE7XG4gICAgICB9XG5cbiAgICAgIC8vIElmIGRpZmZlcmVuY2UgaXMgbGVzcyB0aGFuIHRoZSBkZXNpcmVkIHRocmVzaG9sZCwgc3RvcCBpdGVyYXRpbmdcbiAgICAgIGlmIChkaWZmIDwgcHJlY2lzaW9uKSB7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIENvbnN0cnVjdCByZXN1bHRcbiAgICB2YXIgcmVzID0ge1xuICAgICAgcmFuazogZnVuY3Rpb24gcmFuayhub2RlKSB7XG4gICAgICAgIG5vZGUgPSBjeS5jb2xsZWN0aW9uKG5vZGUpWzBdO1xuICAgICAgICByZXR1cm4gZWlnZW52ZWN0b3Jbbm9kZXMuaW5kZXhPZihub2RlKV07XG4gICAgICB9XG4gICAgfTtcbiAgICByZXR1cm4gcmVzO1xuICB9IC8vIHBhZ2VSYW5rXG59OyAvLyBlbGVzZm5cblxudmFyIGRlZmF1bHRzJGYgPSBkZWZhdWx0cyRnKHtcbiAgcm9vdDogbnVsbCxcbiAgd2VpZ2h0OiBmdW5jdGlvbiB3ZWlnaHQoZWRnZSkge1xuICAgIHJldHVybiAxO1xuICB9LFxuICBkaXJlY3RlZDogZmFsc2UsXG4gIGFscGhhOiAwXG59KTtcbnZhciBlbGVzZm4kbiA9IHtcbiAgZGVncmVlQ2VudHJhbGl0eU5vcm1hbGl6ZWQ6IGZ1bmN0aW9uIGRlZ3JlZUNlbnRyYWxpdHlOb3JtYWxpemVkKG9wdGlvbnMpIHtcbiAgICBvcHRpb25zID0gZGVmYXVsdHMkZihvcHRpb25zKTtcbiAgICB2YXIgY3kgPSB0aGlzLmN5KCk7XG4gICAgdmFyIG5vZGVzID0gdGhpcy5ub2RlcygpO1xuICAgIHZhciBudW1Ob2RlcyA9IG5vZGVzLmxlbmd0aDtcbiAgICBpZiAoIW9wdGlvbnMuZGlyZWN0ZWQpIHtcbiAgICAgIHZhciBkZWdyZWVzID0ge307XG4gICAgICB2YXIgbWF4RGVncmVlID0gMDtcbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbnVtTm9kZXM7IGkrKykge1xuICAgICAgICB2YXIgbm9kZSA9IG5vZGVzW2ldO1xuXG4gICAgICAgIC8vIGFkZCBjdXJyZW50IG5vZGUgdG8gdGhlIGN1cnJlbnQgb3B0aW9ucyBvYmplY3QgYW5kIGNhbGwgZGVncmVlQ2VudHJhbGl0eVxuICAgICAgICBvcHRpb25zLnJvb3QgPSBub2RlO1xuICAgICAgICB2YXIgY3VyckRlZ3JlZSA9IHRoaXMuZGVncmVlQ2VudHJhbGl0eShvcHRpb25zKTtcbiAgICAgICAgaWYgKG1heERlZ3JlZSA8IGN1cnJEZWdyZWUuZGVncmVlKSB7XG4gICAgICAgICAgbWF4RGVncmVlID0gY3VyckRlZ3JlZS5kZWdyZWU7XG4gICAgICAgIH1cbiAgICAgICAgZGVncmVlc1tub2RlLmlkKCldID0gY3VyckRlZ3JlZS5kZWdyZWU7XG4gICAgICB9XG4gICAgICByZXR1cm4ge1xuICAgICAgICBkZWdyZWU6IGZ1bmN0aW9uIGRlZ3JlZShub2RlKSB7XG4gICAgICAgICAgaWYgKG1heERlZ3JlZSA9PT0gMCkge1xuICAgICAgICAgICAgcmV0dXJuIDA7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmIChzdHJpbmcobm9kZSkpIHtcbiAgICAgICAgICAgIC8vIGZyb20gaXMgYSBzZWxlY3RvciBzdHJpbmdcbiAgICAgICAgICAgIG5vZGUgPSBjeS5maWx0ZXIobm9kZSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiBkZWdyZWVzW25vZGUuaWQoKV0gLyBtYXhEZWdyZWU7XG4gICAgICAgIH1cbiAgICAgIH07XG4gICAgfSBlbHNlIHtcbiAgICAgIHZhciBpbmRlZ3JlZXMgPSB7fTtcbiAgICAgIHZhciBvdXRkZWdyZWVzID0ge307XG4gICAgICB2YXIgbWF4SW5kZWdyZWUgPSAwO1xuICAgICAgdmFyIG1heE91dGRlZ3JlZSA9IDA7XG4gICAgICBmb3IgKHZhciBfaSA9IDA7IF9pIDwgbnVtTm9kZXM7IF9pKyspIHtcbiAgICAgICAgdmFyIF9ub2RlID0gbm9kZXNbX2ldO1xuICAgICAgICB2YXIgaWQgPSBfbm9kZS5pZCgpO1xuXG4gICAgICAgIC8vIGFkZCBjdXJyZW50IG5vZGUgdG8gdGhlIGN1cnJlbnQgb3B0aW9ucyBvYmplY3QgYW5kIGNhbGwgZGVncmVlQ2VudHJhbGl0eVxuICAgICAgICBvcHRpb25zLnJvb3QgPSBfbm9kZTtcbiAgICAgICAgdmFyIF9jdXJyRGVncmVlID0gdGhpcy5kZWdyZWVDZW50cmFsaXR5KG9wdGlvbnMpO1xuICAgICAgICBpZiAobWF4SW5kZWdyZWUgPCBfY3VyckRlZ3JlZS5pbmRlZ3JlZSkgbWF4SW5kZWdyZWUgPSBfY3VyckRlZ3JlZS5pbmRlZ3JlZTtcbiAgICAgICAgaWYgKG1heE91dGRlZ3JlZSA8IF9jdXJyRGVncmVlLm91dGRlZ3JlZSkgbWF4T3V0ZGVncmVlID0gX2N1cnJEZWdyZWUub3V0ZGVncmVlO1xuICAgICAgICBpbmRlZ3JlZXNbaWRdID0gX2N1cnJEZWdyZWUuaW5kZWdyZWU7XG4gICAgICAgIG91dGRlZ3JlZXNbaWRdID0gX2N1cnJEZWdyZWUub3V0ZGVncmVlO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgaW5kZWdyZWU6IGZ1bmN0aW9uIGluZGVncmVlKG5vZGUpIHtcbiAgICAgICAgICBpZiAobWF4SW5kZWdyZWUgPT0gMCkge1xuICAgICAgICAgICAgcmV0dXJuIDA7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmIChzdHJpbmcobm9kZSkpIHtcbiAgICAgICAgICAgIC8vIGZyb20gaXMgYSBzZWxlY3RvciBzdHJpbmdcbiAgICAgICAgICAgIG5vZGUgPSBjeS5maWx0ZXIobm9kZSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiBpbmRlZ3JlZXNbbm9kZS5pZCgpXSAvIG1heEluZGVncmVlO1xuICAgICAgICB9LFxuICAgICAgICBvdXRkZWdyZWU6IGZ1bmN0aW9uIG91dGRlZ3JlZShub2RlKSB7XG4gICAgICAgICAgaWYgKG1heE91dGRlZ3JlZSA9PT0gMCkge1xuICAgICAgICAgICAgcmV0dXJuIDA7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmIChzdHJpbmcobm9kZSkpIHtcbiAgICAgICAgICAgIC8vIGZyb20gaXMgYSBzZWxlY3RvciBzdHJpbmdcbiAgICAgICAgICAgIG5vZGUgPSBjeS5maWx0ZXIobm9kZSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiBvdXRkZWdyZWVzW25vZGUuaWQoKV0gLyBtYXhPdXRkZWdyZWU7XG4gICAgICAgIH1cbiAgICAgIH07XG4gICAgfVxuICB9LFxuICAvLyBkZWdyZWVDZW50cmFsaXR5Tm9ybWFsaXplZFxuXG4gIC8vIEltcGxlbWVudGVkIGZyb20gdGhlIGFsZ29yaXRobSBpbiBPcHNhaGwncyBwYXBlclxuICAvLyBcIk5vZGUgY2VudHJhbGl0eSBpbiB3ZWlnaHRlZCBuZXR3b3JrczogR2VuZXJhbGl6aW5nIGRlZ3JlZSBhbmQgc2hvcnRlc3QgcGF0aHNcIlxuICAvLyBjaGVjayB0aGUgaGVhZGluZyAyIFwiRGVncmVlXCJcbiAgZGVncmVlQ2VudHJhbGl0eTogZnVuY3Rpb24gZGVncmVlQ2VudHJhbGl0eShvcHRpb25zKSB7XG4gICAgb3B0aW9ucyA9IGRlZmF1bHRzJGYob3B0aW9ucyk7XG4gICAgdmFyIGN5ID0gdGhpcy5jeSgpO1xuICAgIHZhciBjYWxsaW5nRWxlcyA9IHRoaXM7XG4gICAgdmFyIF9vcHRpb25zID0gb3B0aW9ucyxcbiAgICAgIHJvb3QgPSBfb3B0aW9ucy5yb290LFxuICAgICAgd2VpZ2h0ID0gX29wdGlvbnMud2VpZ2h0LFxuICAgICAgZGlyZWN0ZWQgPSBfb3B0aW9ucy5kaXJlY3RlZCxcbiAgICAgIGFscGhhID0gX29wdGlvbnMuYWxwaGE7XG4gICAgcm9vdCA9IGN5LmNvbGxlY3Rpb24ocm9vdClbMF07XG4gICAgaWYgKCFkaXJlY3RlZCkge1xuICAgICAgdmFyIGNvbm5FZGdlcyA9IHJvb3QuY29ubmVjdGVkRWRnZXMoKS5pbnRlcnNlY3Rpb24oY2FsbGluZ0VsZXMpO1xuICAgICAgdmFyIGsgPSBjb25uRWRnZXMubGVuZ3RoO1xuICAgICAgdmFyIHMgPSAwO1xuXG4gICAgICAvLyBOb3csIHN1bSBlZGdlIHdlaWdodHNcbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgY29ubkVkZ2VzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIHMgKz0gd2VpZ2h0KGNvbm5FZGdlc1tpXSk7XG4gICAgICB9XG4gICAgICByZXR1cm4ge1xuICAgICAgICBkZWdyZWU6IE1hdGgucG93KGssIDEgLSBhbHBoYSkgKiBNYXRoLnBvdyhzLCBhbHBoYSlcbiAgICAgIH07XG4gICAgfSBlbHNlIHtcbiAgICAgIHZhciBlZGdlcyA9IHJvb3QuY29ubmVjdGVkRWRnZXMoKTtcbiAgICAgIHZhciBpbmNvbWluZyA9IGVkZ2VzLmZpbHRlcihmdW5jdGlvbiAoZWRnZSkge1xuICAgICAgICByZXR1cm4gZWRnZS50YXJnZXQoKS5zYW1lKHJvb3QpICYmIGNhbGxpbmdFbGVzLmhhcyhlZGdlKTtcbiAgICAgIH0pO1xuICAgICAgdmFyIG91dGdvaW5nID0gZWRnZXMuZmlsdGVyKGZ1bmN0aW9uIChlZGdlKSB7XG4gICAgICAgIHJldHVybiBlZGdlLnNvdXJjZSgpLnNhbWUocm9vdCkgJiYgY2FsbGluZ0VsZXMuaGFzKGVkZ2UpO1xuICAgICAgfSk7XG4gICAgICB2YXIga19pbiA9IGluY29taW5nLmxlbmd0aDtcbiAgICAgIHZhciBrX291dCA9IG91dGdvaW5nLmxlbmd0aDtcbiAgICAgIHZhciBzX2luID0gMDtcbiAgICAgIHZhciBzX291dCA9IDA7XG5cbiAgICAgIC8vIE5vdywgc3VtIGluY29taW5nIGVkZ2Ugd2VpZ2h0c1xuICAgICAgZm9yICh2YXIgX2kyID0gMDsgX2kyIDwgaW5jb21pbmcubGVuZ3RoOyBfaTIrKykge1xuICAgICAgICBzX2luICs9IHdlaWdodChpbmNvbWluZ1tfaTJdKTtcbiAgICAgIH1cblxuICAgICAgLy8gTm93LCBzdW0gb3V0Z29pbmcgZWRnZSB3ZWlnaHRzXG4gICAgICBmb3IgKHZhciBfaTMgPSAwOyBfaTMgPCBvdXRnb2luZy5sZW5ndGg7IF9pMysrKSB7XG4gICAgICAgIHNfb3V0ICs9IHdlaWdodChvdXRnb2luZ1tfaTNdKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiB7XG4gICAgICAgIGluZGVncmVlOiBNYXRoLnBvdyhrX2luLCAxIC0gYWxwaGEpICogTWF0aC5wb3coc19pbiwgYWxwaGEpLFxuICAgICAgICBvdXRkZWdyZWU6IE1hdGgucG93KGtfb3V0LCAxIC0gYWxwaGEpICogTWF0aC5wb3coc19vdXQsIGFscGhhKVxuICAgICAgfTtcbiAgICB9XG4gIH0gLy8gZGVncmVlQ2VudHJhbGl0eVxufTsgLy8gZWxlc2ZuXG5cbi8vIG5pY2UsIHNob3J0IG1hdGhlbWF0aWNhbCBhbGlhc1xuZWxlc2ZuJG4uZGMgPSBlbGVzZm4kbi5kZWdyZWVDZW50cmFsaXR5O1xuZWxlc2ZuJG4uZGNuID0gZWxlc2ZuJG4uZGVncmVlQ2VudHJhbGl0eU5vcm1hbGlzZWQgPSBlbGVzZm4kbi5kZWdyZWVDZW50cmFsaXR5Tm9ybWFsaXplZDtcblxudmFyIGRlZmF1bHRzJGUgPSBkZWZhdWx0cyRnKHtcbiAgaGFybW9uaWM6IHRydWUsXG4gIHdlaWdodDogZnVuY3Rpb24gd2VpZ2h0KCkge1xuICAgIHJldHVybiAxO1xuICB9LFxuICBkaXJlY3RlZDogZmFsc2UsXG4gIHJvb3Q6IG51bGxcbn0pO1xudmFyIGVsZXNmbiRtID0ge1xuICBjbG9zZW5lc3NDZW50cmFsaXR5Tm9ybWFsaXplZDogZnVuY3Rpb24gY2xvc2VuZXNzQ2VudHJhbGl0eU5vcm1hbGl6ZWQob3B0aW9ucykge1xuICAgIHZhciBfZGVmYXVsdHMgPSBkZWZhdWx0cyRlKG9wdGlvbnMpLFxuICAgICAgaGFybW9uaWMgPSBfZGVmYXVsdHMuaGFybW9uaWMsXG4gICAgICB3ZWlnaHQgPSBfZGVmYXVsdHMud2VpZ2h0LFxuICAgICAgZGlyZWN0ZWQgPSBfZGVmYXVsdHMuZGlyZWN0ZWQ7XG4gICAgdmFyIGN5ID0gdGhpcy5jeSgpO1xuICAgIHZhciBjbG9zZW5lc3NlcyA9IHt9O1xuICAgIHZhciBtYXhDbG9zZW5lc3MgPSAwO1xuICAgIHZhciBub2RlcyA9IHRoaXMubm9kZXMoKTtcbiAgICB2YXIgZncgPSB0aGlzLmZsb3lkV2Fyc2hhbGwoe1xuICAgICAgd2VpZ2h0OiB3ZWlnaHQsXG4gICAgICBkaXJlY3RlZDogZGlyZWN0ZWRcbiAgICB9KTtcblxuICAgIC8vIENvbXB1dGUgY2xvc2VuZXNzIGZvciBldmVyeSBub2RlIGFuZCBmaW5kIHRoZSBtYXhpbXVtIGNsb3NlbmVzc1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbm9kZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciBjdXJyQ2xvc2VuZXNzID0gMDtcbiAgICAgIHZhciBub2RlX2kgPSBub2Rlc1tpXTtcbiAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgbm9kZXMubGVuZ3RoOyBqKyspIHtcbiAgICAgICAgaWYgKGkgIT09IGopIHtcbiAgICAgICAgICB2YXIgZCA9IGZ3LmRpc3RhbmNlKG5vZGVfaSwgbm9kZXNbal0pO1xuICAgICAgICAgIGlmIChoYXJtb25pYykge1xuICAgICAgICAgICAgY3VyckNsb3NlbmVzcyArPSAxIC8gZDtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY3VyckNsb3NlbmVzcyArPSBkO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYgKCFoYXJtb25pYykge1xuICAgICAgICBjdXJyQ2xvc2VuZXNzID0gMSAvIGN1cnJDbG9zZW5lc3M7XG4gICAgICB9XG4gICAgICBpZiAobWF4Q2xvc2VuZXNzIDwgY3VyckNsb3NlbmVzcykge1xuICAgICAgICBtYXhDbG9zZW5lc3MgPSBjdXJyQ2xvc2VuZXNzO1xuICAgICAgfVxuICAgICAgY2xvc2VuZXNzZXNbbm9kZV9pLmlkKCldID0gY3VyckNsb3NlbmVzcztcbiAgICB9XG4gICAgcmV0dXJuIHtcbiAgICAgIGNsb3NlbmVzczogZnVuY3Rpb24gY2xvc2VuZXNzKG5vZGUpIHtcbiAgICAgICAgaWYgKG1heENsb3NlbmVzcyA9PSAwKSB7XG4gICAgICAgICAgcmV0dXJuIDA7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHN0cmluZyhub2RlKSkge1xuICAgICAgICAgIC8vIGZyb20gaXMgYSBzZWxlY3RvciBzdHJpbmdcbiAgICAgICAgICBub2RlID0gY3kuZmlsdGVyKG5vZGUpWzBdLmlkKCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgLy8gZnJvbSBpcyBhIG5vZGVcbiAgICAgICAgICBub2RlID0gbm9kZS5pZCgpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBjbG9zZW5lc3Nlc1tub2RlXSAvIG1heENsb3NlbmVzcztcbiAgICAgIH1cbiAgICB9O1xuICB9LFxuICAvLyBJbXBsZW1lbnRlZCBmcm9tIHBzZXVkb2NvZGUgZnJvbSB3aWtpcGVkaWFcbiAgY2xvc2VuZXNzQ2VudHJhbGl0eTogZnVuY3Rpb24gY2xvc2VuZXNzQ2VudHJhbGl0eShvcHRpb25zKSB7XG4gICAgdmFyIF9kZWZhdWx0czIgPSBkZWZhdWx0cyRlKG9wdGlvbnMpLFxuICAgICAgcm9vdCA9IF9kZWZhdWx0czIucm9vdCxcbiAgICAgIHdlaWdodCA9IF9kZWZhdWx0czIud2VpZ2h0LFxuICAgICAgZGlyZWN0ZWQgPSBfZGVmYXVsdHMyLmRpcmVjdGVkLFxuICAgICAgaGFybW9uaWMgPSBfZGVmYXVsdHMyLmhhcm1vbmljO1xuICAgIHJvb3QgPSB0aGlzLmZpbHRlcihyb290KVswXTtcblxuICAgIC8vIHdlIG5lZWQgZGlzdGFuY2UgZnJvbSB0aGlzIG5vZGUgdG8gZXZlcnkgb3RoZXIgbm9kZVxuICAgIHZhciBkaWprc3RyYSA9IHRoaXMuZGlqa3N0cmEoe1xuICAgICAgcm9vdDogcm9vdCxcbiAgICAgIHdlaWdodDogd2VpZ2h0LFxuICAgICAgZGlyZWN0ZWQ6IGRpcmVjdGVkXG4gICAgfSk7XG4gICAgdmFyIHRvdGFsRGlzdGFuY2UgPSAwO1xuICAgIHZhciBub2RlcyA9IHRoaXMubm9kZXMoKTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IG5vZGVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIgbiA9IG5vZGVzW2ldO1xuICAgICAgaWYgKCFuLnNhbWUocm9vdCkpIHtcbiAgICAgICAgdmFyIGQgPSBkaWprc3RyYS5kaXN0YW5jZVRvKG4pO1xuICAgICAgICBpZiAoaGFybW9uaWMpIHtcbiAgICAgICAgICB0b3RhbERpc3RhbmNlICs9IDEgLyBkO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRvdGFsRGlzdGFuY2UgKz0gZDtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gaGFybW9uaWMgPyB0b3RhbERpc3RhbmNlIDogMSAvIHRvdGFsRGlzdGFuY2U7XG4gIH0gLy8gY2xvc2VuZXNzQ2VudHJhbGl0eVxufTsgLy8gZWxlc2ZuXG5cbi8vIG5pY2UsIHNob3J0IG1hdGhlbWF0aWNhbCBhbGlhc1xuZWxlc2ZuJG0uY2MgPSBlbGVzZm4kbS5jbG9zZW5lc3NDZW50cmFsaXR5O1xuZWxlc2ZuJG0uY2NuID0gZWxlc2ZuJG0uY2xvc2VuZXNzQ2VudHJhbGl0eU5vcm1hbGlzZWQgPSBlbGVzZm4kbS5jbG9zZW5lc3NDZW50cmFsaXR5Tm9ybWFsaXplZDtcblxudmFyIGRlZmF1bHRzJGQgPSBkZWZhdWx0cyRnKHtcbiAgd2VpZ2h0OiBudWxsLFxuICBkaXJlY3RlZDogZmFsc2Vcbn0pO1xudmFyIGVsZXNmbiRsID0ge1xuICAvLyBJbXBsZW1lbnRlZCBmcm9tIHRoZSBhbGdvcml0aG0gaW4gdGhlIHBhcGVyIFwiT24gVmFyaWFudHMgb2YgU2hvcnRlc3QtUGF0aCBCZXR3ZWVubmVzcyBDZW50cmFsaXR5IGFuZCB0aGVpciBHZW5lcmljIENvbXB1dGF0aW9uXCIgYnkgVWxyaWsgQnJhbmRlc1xuICBiZXR3ZWVubmVzc0NlbnRyYWxpdHk6IGZ1bmN0aW9uIGJldHdlZW5uZXNzQ2VudHJhbGl0eShvcHRpb25zKSB7XG4gICAgdmFyIF9kZWZhdWx0cyA9IGRlZmF1bHRzJGQob3B0aW9ucyksXG4gICAgICBkaXJlY3RlZCA9IF9kZWZhdWx0cy5kaXJlY3RlZCxcbiAgICAgIHdlaWdodCA9IF9kZWZhdWx0cy53ZWlnaHQ7XG4gICAgdmFyIHdlaWdodGVkID0gd2VpZ2h0ICE9IG51bGw7XG4gICAgdmFyIGN5ID0gdGhpcy5jeSgpO1xuXG4gICAgLy8gc3RhcnRpbmdcbiAgICB2YXIgViA9IHRoaXMubm9kZXMoKTtcbiAgICB2YXIgQSA9IHt9O1xuICAgIHZhciBfQyA9IHt9O1xuICAgIHZhciBtYXggPSAwO1xuICAgIHZhciBDID0ge1xuICAgICAgc2V0OiBmdW5jdGlvbiBzZXQoa2V5LCB2YWwpIHtcbiAgICAgICAgX0Nba2V5XSA9IHZhbDtcbiAgICAgICAgaWYgKHZhbCA+IG1heCkge1xuICAgICAgICAgIG1heCA9IHZhbDtcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIGdldDogZnVuY3Rpb24gZ2V0KGtleSkge1xuICAgICAgICByZXR1cm4gX0Nba2V5XTtcbiAgICAgIH1cbiAgICB9O1xuXG4gICAgLy8gQSBjb250YWlucyB0aGUgbmVpZ2hib3Job29kcyBvZiBldmVyeSBub2RlXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBWLmxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIgdiA9IFZbaV07XG4gICAgICB2YXIgdmlkID0gdi5pZCgpO1xuICAgICAgaWYgKGRpcmVjdGVkKSB7XG4gICAgICAgIEFbdmlkXSA9IHYub3V0Z29lcnMoKS5ub2RlcygpOyAvLyBnZXQgb3V0Z29lcnMgb2YgZXZlcnkgbm9kZVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgQVt2aWRdID0gdi5vcGVuTmVpZ2hib3Job29kKCkubm9kZXMoKTsgLy8gZ2V0IG5laWdoYm9ycyBvZiBldmVyeSBub2RlXG4gICAgICB9XG4gICAgICBDLnNldCh2aWQsIDApO1xuICAgIH1cbiAgICB2YXIgX2xvb3AgPSBmdW5jdGlvbiBfbG9vcCgpIHtcbiAgICAgIHZhciBzaWQgPSBWW3NdLmlkKCk7XG4gICAgICB2YXIgUyA9IFtdOyAvLyBzdGFja1xuICAgICAgdmFyIFAgPSB7fTtcbiAgICAgIHZhciBnID0ge307XG4gICAgICB2YXIgZCA9IHt9O1xuICAgICAgdmFyIFEgPSBuZXcgSGVhcChmdW5jdGlvbiAoYSwgYikge1xuICAgICAgICByZXR1cm4gZFthXSAtIGRbYl07XG4gICAgICB9KTsgLy8gcXVldWVcblxuICAgICAgLy8gaW5pdCBkaWN0aW9uYXJpZXNcbiAgICAgIGZvciAodmFyIF9pID0gMDsgX2kgPCBWLmxlbmd0aDsgX2krKykge1xuICAgICAgICB2YXIgX3ZpZCA9IFZbX2ldLmlkKCk7XG4gICAgICAgIFBbX3ZpZF0gPSBbXTtcbiAgICAgICAgZ1tfdmlkXSA9IDA7XG4gICAgICAgIGRbX3ZpZF0gPSBJbmZpbml0eTtcbiAgICAgIH1cbiAgICAgIGdbc2lkXSA9IDE7IC8vIHNpZ21hXG4gICAgICBkW3NpZF0gPSAwOyAvLyBkaXN0YW5jZSB0byBzXG5cbiAgICAgIFEucHVzaChzaWQpO1xuICAgICAgd2hpbGUgKCFRLmVtcHR5KCkpIHtcbiAgICAgICAgdmFyIF92ID0gUS5wb3AoKTtcbiAgICAgICAgUy5wdXNoKF92KTtcbiAgICAgICAgaWYgKHdlaWdodGVkKSB7XG4gICAgICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCBBW192XS5sZW5ndGg7IGorKykge1xuICAgICAgICAgICAgdmFyIHcgPSBBW192XVtqXTtcbiAgICAgICAgICAgIHZhciB2RWxlID0gY3kuZ2V0RWxlbWVudEJ5SWQoX3YpO1xuICAgICAgICAgICAgdmFyIGVkZ2UgPSB1bmRlZmluZWQ7XG4gICAgICAgICAgICBpZiAodkVsZS5lZGdlc1RvKHcpLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgZWRnZSA9IHZFbGUuZWRnZXNUbyh3KVswXTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIGVkZ2UgPSB3LmVkZ2VzVG8odkVsZSlbMF07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB2YXIgZWRnZVdlaWdodCA9IHdlaWdodChlZGdlKTtcbiAgICAgICAgICAgIHcgPSB3LmlkKCk7XG4gICAgICAgICAgICBpZiAoZFt3XSA+IGRbX3ZdICsgZWRnZVdlaWdodCkge1xuICAgICAgICAgICAgICBkW3ddID0gZFtfdl0gKyBlZGdlV2VpZ2h0O1xuICAgICAgICAgICAgICBpZiAoUS5ub2Rlcy5pbmRleE9mKHcpIDwgMCkge1xuICAgICAgICAgICAgICAgIC8vaWYgdyBpcyBub3QgaW4gUVxuICAgICAgICAgICAgICAgIFEucHVzaCh3KTtcbiAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAvLyB1cGRhdGUgcG9zaXRpb24gaWYgdyBpcyBpbiBRXG4gICAgICAgICAgICAgICAgUS51cGRhdGVJdGVtKHcpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGdbd10gPSAwO1xuICAgICAgICAgICAgICBQW3ddID0gW107XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoZFt3XSA9PSBkW192XSArIGVkZ2VXZWlnaHQpIHtcbiAgICAgICAgICAgICAgZ1t3XSA9IGdbd10gKyBnW192XTtcbiAgICAgICAgICAgICAgUFt3XS5wdXNoKF92KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgZm9yICh2YXIgX2ogPSAwOyBfaiA8IEFbX3ZdLmxlbmd0aDsgX2orKykge1xuICAgICAgICAgICAgdmFyIF93ID0gQVtfdl1bX2pdLmlkKCk7XG4gICAgICAgICAgICBpZiAoZFtfd10gPT0gSW5maW5pdHkpIHtcbiAgICAgICAgICAgICAgUS5wdXNoKF93KTtcbiAgICAgICAgICAgICAgZFtfd10gPSBkW192XSArIDE7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoZFtfd10gPT0gZFtfdl0gKyAxKSB7XG4gICAgICAgICAgICAgIGdbX3ddID0gZ1tfd10gKyBnW192XTtcbiAgICAgICAgICAgICAgUFtfd10ucHVzaChfdik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICB2YXIgZSA9IHt9O1xuICAgICAgZm9yICh2YXIgX2kyID0gMDsgX2kyIDwgVi5sZW5ndGg7IF9pMisrKSB7XG4gICAgICAgIGVbVltfaTJdLmlkKCldID0gMDtcbiAgICAgIH1cbiAgICAgIHdoaWxlIChTLmxlbmd0aCA+IDApIHtcbiAgICAgICAgdmFyIF93MiA9IFMucG9wKCk7XG4gICAgICAgIGZvciAodmFyIF9qMiA9IDA7IF9qMiA8IFBbX3cyXS5sZW5ndGg7IF9qMisrKSB7XG4gICAgICAgICAgdmFyIF92MiA9IFBbX3cyXVtfajJdO1xuICAgICAgICAgIGVbX3YyXSA9IGVbX3YyXSArIGdbX3YyXSAvIGdbX3cyXSAqICgxICsgZVtfdzJdKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoX3cyICE9IFZbc10uaWQoKSkge1xuICAgICAgICAgIEMuc2V0KF93MiwgQy5nZXQoX3cyKSArIGVbX3cyXSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9O1xuICAgIGZvciAodmFyIHMgPSAwOyBzIDwgVi5sZW5ndGg7IHMrKykge1xuICAgICAgX2xvb3AoKTtcbiAgICB9XG4gICAgdmFyIHJldCA9IHtcbiAgICAgIGJldHdlZW5uZXNzOiBmdW5jdGlvbiBiZXR3ZWVubmVzcyhub2RlKSB7XG4gICAgICAgIHZhciBpZCA9IGN5LmNvbGxlY3Rpb24obm9kZSkuaWQoKTtcbiAgICAgICAgcmV0dXJuIEMuZ2V0KGlkKTtcbiAgICAgIH0sXG4gICAgICBiZXR3ZWVubmVzc05vcm1hbGl6ZWQ6IGZ1bmN0aW9uIGJldHdlZW5uZXNzTm9ybWFsaXplZChub2RlKSB7XG4gICAgICAgIGlmIChtYXggPT0gMCkge1xuICAgICAgICAgIHJldHVybiAwO1xuICAgICAgICB9XG4gICAgICAgIHZhciBpZCA9IGN5LmNvbGxlY3Rpb24obm9kZSkuaWQoKTtcbiAgICAgICAgcmV0dXJuIEMuZ2V0KGlkKSAvIG1heDtcbiAgICAgIH1cbiAgICB9O1xuXG4gICAgLy8gYWxpYXNcbiAgICByZXQuYmV0d2Vlbm5lc3NOb3JtYWxpc2VkID0gcmV0LmJldHdlZW5uZXNzTm9ybWFsaXplZDtcbiAgICByZXR1cm4gcmV0O1xuICB9IC8vIGJldHdlZW5uZXNzQ2VudHJhbGl0eVxufTsgLy8gZWxlc2ZuXG5cbi8vIG5pY2UsIHNob3J0IG1hdGhlbWF0aWNhbCBhbGlhc1xuZWxlc2ZuJGwuYmMgPSBlbGVzZm4kbC5iZXR3ZWVubmVzc0NlbnRyYWxpdHk7XG5cbi8vIEltcGxlbWVudGVkIGJ5IFpvZSBYaSBAem9leGkgZm9yIEdTT0MgMjAxNlxuLy8gaHR0cHM6Ly9naXRodWIuY29tL2N5dG9zY2FwZS9jeXRvc2NhcGUuanMtbWFya292LWNsdXN0ZXJcblxuXG4vKiBlc2xpbnQtZGlzYWJsZSBuby11bnVzZWQtdmFycyAqL1xudmFyIGRlZmF1bHRzJGMgPSBkZWZhdWx0cyRnKHtcbiAgZXhwYW5kRmFjdG9yOiAyLFxuICAvLyBhZmZlY3RzIHRpbWUgb2YgY29tcHV0YXRpb24gYW5kIGNsdXN0ZXIgZ3JhbnVsYXJpdHkgdG8gc29tZSBleHRlbnQ6IE0gKiBNXG4gIGluZmxhdGVGYWN0b3I6IDIsXG4gIC8vIGFmZmVjdHMgY2x1c3RlciBncmFudWxhcml0eSAodGhlIGdyZWF0ZXIgdGhlIHZhbHVlLCB0aGUgbW9yZSBjbHVzdGVycyk6IE0oaSxqKSAvIEUoailcbiAgbXVsdEZhY3RvcjogMSxcbiAgLy8gb3B0aW9uYWwgc2VsZiBsb29wcyBmb3IgZWFjaCBub2RlLiBVc2UgYSBuZXV0cmFsIHZhbHVlIHRvIGltcHJvdmUgY2x1c3RlciBjb21wdXRhdGlvbnMuXG4gIG1heEl0ZXJhdGlvbnM6IDIwLFxuICAvLyBtYXhpbXVtIG51bWJlciBvZiBpdGVyYXRpb25zIG9mIHRoZSBNQ0wgYWxnb3JpdGhtIGluIGEgc2luZ2xlIHJ1blxuICBhdHRyaWJ1dGVzOiBbXG4gIC8vIGF0dHJpYnV0ZXMvZmVhdHVyZXMgdXNlZCB0byBncm91cCBub2RlcywgaWUuIHNpbWlsYXJpdHkgdmFsdWVzIGJldHdlZW4gbm9kZXNcbiAgZnVuY3Rpb24gKGVkZ2UpIHtcbiAgICByZXR1cm4gMTtcbiAgfV1cbn0pO1xuLyogZXNsaW50LWVuYWJsZSAqL1xuXG52YXIgc2V0T3B0aW9ucyQzID0gZnVuY3Rpb24gc2V0T3B0aW9ucyhvcHRpb25zKSB7XG4gIHJldHVybiBkZWZhdWx0cyRjKG9wdGlvbnMpO1xufTtcbi8qIGVzbGludC1lbmFibGUgKi9cblxudmFyIGdldFNpbWlsYXJpdHkkMSA9IGZ1bmN0aW9uIGdldFNpbWlsYXJpdHkoZWRnZSwgYXR0cmlidXRlcykge1xuICB2YXIgdG90YWwgPSAwO1xuICBmb3IgKHZhciBpID0gMDsgaSA8IGF0dHJpYnV0ZXMubGVuZ3RoOyBpKyspIHtcbiAgICB0b3RhbCArPSBhdHRyaWJ1dGVzW2ldKGVkZ2UpO1xuICB9XG4gIHJldHVybiB0b3RhbDtcbn07XG52YXIgYWRkTG9vcHMgPSBmdW5jdGlvbiBhZGRMb29wcyhNLCBuLCB2YWwpIHtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBuOyBpKyspIHtcbiAgICBNW2kgKiBuICsgaV0gPSB2YWw7XG4gIH1cbn07XG52YXIgbm9ybWFsaXplID0gZnVuY3Rpb24gbm9ybWFsaXplKE0sIG4pIHtcbiAgdmFyIHN1bTtcbiAgZm9yICh2YXIgY29sID0gMDsgY29sIDwgbjsgY29sKyspIHtcbiAgICBzdW0gPSAwO1xuICAgIGZvciAodmFyIHJvdyA9IDA7IHJvdyA8IG47IHJvdysrKSB7XG4gICAgICBzdW0gKz0gTVtyb3cgKiBuICsgY29sXTtcbiAgICB9XG4gICAgZm9yICh2YXIgX3JvdyA9IDA7IF9yb3cgPCBuOyBfcm93KyspIHtcbiAgICAgIE1bX3JvdyAqIG4gKyBjb2xdID0gTVtfcm93ICogbiArIGNvbF0gLyBzdW07XG4gICAgfVxuICB9XG59O1xuXG4vLyBUT0RPOiBibG9ja2VkIG1hdHJpeCBtdWx0aXBsaWNhdGlvbj9cbnZhciBtbXVsdCA9IGZ1bmN0aW9uIG1tdWx0KEEsIEIsIG4pIHtcbiAgdmFyIEMgPSBuZXcgQXJyYXkobiAqIG4pO1xuICBmb3IgKHZhciBpID0gMDsgaSA8IG47IGkrKykge1xuICAgIGZvciAodmFyIGogPSAwOyBqIDwgbjsgaisrKSB7XG4gICAgICBDW2kgKiBuICsgal0gPSAwO1xuICAgIH1cbiAgICBmb3IgKHZhciBrID0gMDsgayA8IG47IGsrKykge1xuICAgICAgZm9yICh2YXIgX2ogPSAwOyBfaiA8IG47IF9qKyspIHtcbiAgICAgICAgQ1tpICogbiArIF9qXSArPSBBW2kgKiBuICsga10gKiBCW2sgKiBuICsgX2pdO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICByZXR1cm4gQztcbn07XG52YXIgZXhwYW5kID0gZnVuY3Rpb24gZXhwYW5kKE0sIG4sIGV4cGFuZEZhY3RvciAvKiogcG93ZXIgKiovKSB7XG4gIHZhciBfTSA9IE0uc2xpY2UoMCk7XG4gIGZvciAodmFyIHAgPSAxOyBwIDwgZXhwYW5kRmFjdG9yOyBwKyspIHtcbiAgICBNID0gbW11bHQoTSwgX00sIG4pO1xuICB9XG4gIHJldHVybiBNO1xufTtcbnZhciBpbmZsYXRlID0gZnVuY3Rpb24gaW5mbGF0ZShNLCBuLCBpbmZsYXRlRmFjdG9yIC8qKiByICoqLykge1xuICB2YXIgX00gPSBuZXcgQXJyYXkobiAqIG4pO1xuXG4gIC8vIE0oaSxqKSBeIGluZmxhdGVQb3dlclxuICBmb3IgKHZhciBpID0gMDsgaSA8IG4gKiBuOyBpKyspIHtcbiAgICBfTVtpXSA9IE1hdGgucG93KE1baV0sIGluZmxhdGVGYWN0b3IpO1xuICB9XG4gIG5vcm1hbGl6ZShfTSwgbik7XG4gIHJldHVybiBfTTtcbn07XG52YXIgaGFzQ29udmVyZ2VkID0gZnVuY3Rpb24gaGFzQ29udmVyZ2VkKE0sIF9NLCBuMiwgcm91bmRGYWN0b3IpIHtcbiAgLy8gQ2hlY2sgdGhhdCBib3RoIG1hdHJpY2VzIGhhdmUgdGhlIHNhbWUgZWxlbWVudHMgKGksailcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBuMjsgaSsrKSB7XG4gICAgdmFyIHYxID0gTWF0aC5yb3VuZChNW2ldICogTWF0aC5wb3coMTAsIHJvdW5kRmFjdG9yKSkgLyBNYXRoLnBvdygxMCwgcm91bmRGYWN0b3IpOyAvLyB0cnVuY2F0ZSB0byAncm91bmRGYWN0b3InIGRlY2ltYWwgcGxhY2VzXG4gICAgdmFyIHYyID0gTWF0aC5yb3VuZChfTVtpXSAqIE1hdGgucG93KDEwLCByb3VuZEZhY3RvcikpIC8gTWF0aC5wb3coMTAsIHJvdW5kRmFjdG9yKTtcbiAgICBpZiAodjEgIT09IHYyKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICB9XG4gIHJldHVybiB0cnVlO1xufTtcbnZhciBhc3NpZ24kMiA9IGZ1bmN0aW9uIGFzc2lnbihNLCBuLCBub2RlcywgY3kpIHtcbiAgdmFyIGNsdXN0ZXJzID0gW107XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgbjsgaSsrKSB7XG4gICAgdmFyIGNsdXN0ZXIgPSBbXTtcbiAgICBmb3IgKHZhciBqID0gMDsgaiA8IG47IGorKykge1xuICAgICAgLy8gUm93LXdpc2UgYXR0cmFjdG9ycyBhbmQgZWxlbWVudHMgdGhhdCB0aGV5IGF0dHJhY3QgYmVsb25nIGluIHNhbWUgY2x1c3RlclxuICAgICAgaWYgKE1hdGgucm91bmQoTVtpICogbiArIGpdICogMTAwMCkgLyAxMDAwID4gMCkge1xuICAgICAgICBjbHVzdGVyLnB1c2gobm9kZXNbal0pO1xuICAgICAgfVxuICAgIH1cbiAgICBpZiAoY2x1c3Rlci5sZW5ndGggIT09IDApIHtcbiAgICAgIGNsdXN0ZXJzLnB1c2goY3kuY29sbGVjdGlvbihjbHVzdGVyKSk7XG4gICAgfVxuICB9XG4gIHJldHVybiBjbHVzdGVycztcbn07XG52YXIgaXNEdXBsaWNhdGUgPSBmdW5jdGlvbiBpc0R1cGxpY2F0ZShjMSwgYzIpIHtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBjMS5sZW5ndGg7IGkrKykge1xuICAgIGlmICghYzJbaV0gfHwgYzFbaV0uaWQoKSAhPT0gYzJbaV0uaWQoKSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfVxuICByZXR1cm4gdHJ1ZTtcbn07XG52YXIgcmVtb3ZlRHVwbGljYXRlcyA9IGZ1bmN0aW9uIHJlbW92ZUR1cGxpY2F0ZXMoY2x1c3RlcnMpIHtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBjbHVzdGVycy5sZW5ndGg7IGkrKykge1xuICAgIGZvciAodmFyIGogPSAwOyBqIDwgY2x1c3RlcnMubGVuZ3RoOyBqKyspIHtcbiAgICAgIGlmIChpICE9IGogJiYgaXNEdXBsaWNhdGUoY2x1c3RlcnNbaV0sIGNsdXN0ZXJzW2pdKSkge1xuICAgICAgICBjbHVzdGVycy5zcGxpY2UoaiwgMSk7XG4gICAgICB9XG4gICAgfVxuICB9XG4gIHJldHVybiBjbHVzdGVycztcbn07XG52YXIgbWFya292Q2x1c3RlcmluZyA9IGZ1bmN0aW9uIG1hcmtvdkNsdXN0ZXJpbmcob3B0aW9ucykge1xuICB2YXIgbm9kZXMgPSB0aGlzLm5vZGVzKCk7XG4gIHZhciBlZGdlcyA9IHRoaXMuZWRnZXMoKTtcbiAgdmFyIGN5ID0gdGhpcy5jeSgpO1xuXG4gIC8vIFNldCBwYXJhbWV0ZXJzIG9mIGFsZ29yaXRobTpcbiAgdmFyIG9wdHMgPSBzZXRPcHRpb25zJDMob3B0aW9ucyk7XG5cbiAgLy8gTWFwIGVhY2ggbm9kZSB0byBpdHMgcG9zaXRpb24gaW4gbm9kZSBhcnJheVxuICB2YXIgaWQycG9zaXRpb24gPSB7fTtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBub2Rlcy5sZW5ndGg7IGkrKykge1xuICAgIGlkMnBvc2l0aW9uW25vZGVzW2ldLmlkKCldID0gaTtcbiAgfVxuXG4gIC8vIEdlbmVyYXRlIHN0b2NoYXN0aWMgbWF0cml4IE0gZnJvbSBpbnB1dCBncmFwaCBHIChzaG91bGQgYmUgc3ltbWV0cmljL3VuZGlyZWN0ZWQpXG4gIHZhciBuID0gbm9kZXMubGVuZ3RoLFxuICAgIG4yID0gbiAqIG47XG4gIHZhciBNID0gbmV3IEFycmF5KG4yKSxcbiAgICBfTTtcbiAgZm9yICh2YXIgX2kgPSAwOyBfaSA8IG4yOyBfaSsrKSB7XG4gICAgTVtfaV0gPSAwO1xuICB9XG4gIGZvciAodmFyIGUgPSAwOyBlIDwgZWRnZXMubGVuZ3RoOyBlKyspIHtcbiAgICB2YXIgZWRnZSA9IGVkZ2VzW2VdO1xuICAgIHZhciBfaTIgPSBpZDJwb3NpdGlvbltlZGdlLnNvdXJjZSgpLmlkKCldO1xuICAgIHZhciBqID0gaWQycG9zaXRpb25bZWRnZS50YXJnZXQoKS5pZCgpXTtcbiAgICB2YXIgc2ltID0gZ2V0U2ltaWxhcml0eSQxKGVkZ2UsIG9wdHMuYXR0cmlidXRlcyk7XG4gICAgTVtfaTIgKiBuICsgal0gKz0gc2ltOyAvLyBHIHNob3VsZCBiZSBzeW1tZXRyaWMgYW5kIHVuZGlyZWN0ZWRcbiAgICBNW2ogKiBuICsgX2kyXSArPSBzaW07XG4gIH1cblxuICAvLyBCZWdpbiBNYXJrb3YgY2x1c3RlciBhbGdvcml0aG1cblxuICAvLyBTdGVwIDE6IEFkZCBzZWxmIGxvb3BzIHRvIGVhY2ggbm9kZSwgaWUuIGFkZCBtdWx0RmFjdG9yIHRvIG1hdHJpeCBkaWFnb25hbFxuICBhZGRMb29wcyhNLCBuLCBvcHRzLm11bHRGYWN0b3IpO1xuXG4gIC8vIFN0ZXAgMjogTSA9IG5vcm1hbGl6ZSggTSApO1xuICBub3JtYWxpemUoTSwgbik7XG4gIHZhciBpc1N0aWxsTW92aW5nID0gdHJ1ZTtcbiAgdmFyIGl0ZXJhdGlvbnMgPSAwO1xuICB3aGlsZSAoaXNTdGlsbE1vdmluZyAmJiBpdGVyYXRpb25zIDwgb3B0cy5tYXhJdGVyYXRpb25zKSB7XG4gICAgaXNTdGlsbE1vdmluZyA9IGZhbHNlO1xuXG4gICAgLy8gU3RlcCAzOlxuICAgIF9NID0gZXhwYW5kKE0sIG4sIG9wdHMuZXhwYW5kRmFjdG9yKTtcblxuICAgIC8vIFN0ZXAgNDpcbiAgICBNID0gaW5mbGF0ZShfTSwgbiwgb3B0cy5pbmZsYXRlRmFjdG9yKTtcblxuICAgIC8vIFN0ZXAgNTogY2hlY2sgdG8gc2VlIGlmIH5zdGVhZHkgc3RhdGUgaGFzIGJlZW4gcmVhY2hlZFxuICAgIGlmICghaGFzQ29udmVyZ2VkKE0sIF9NLCBuMiwgNCkpIHtcbiAgICAgIGlzU3RpbGxNb3ZpbmcgPSB0cnVlO1xuICAgIH1cbiAgICBpdGVyYXRpb25zKys7XG4gIH1cblxuICAvLyBCdWlsZCBjbHVzdGVycyBmcm9tIG1hdHJpeFxuICB2YXIgY2x1c3RlcnMgPSBhc3NpZ24kMihNLCBuLCBub2RlcywgY3kpO1xuXG4gIC8vIFJlbW92ZSBkdXBsaWNhdGUgY2x1c3RlcnMgZHVlIHRvIHN5bW1ldHJ5IG9mIGdyYXBoIGFuZCBNIG1hdHJpeFxuICBjbHVzdGVycyA9IHJlbW92ZUR1cGxpY2F0ZXMoY2x1c3RlcnMpO1xuICByZXR1cm4gY2x1c3RlcnM7XG59O1xudmFyIG1hcmtvdkNsdXN0ZXJpbmckMSA9IHtcbiAgbWFya292Q2x1c3RlcmluZzogbWFya292Q2x1c3RlcmluZyxcbiAgbWNsOiBtYXJrb3ZDbHVzdGVyaW5nXG59O1xuXG4vLyBDb21tb24gZGlzdGFuY2UgbWV0cmljcyBmb3IgY2x1c3RlcmluZyBhbGdvcml0aG1zXG4vLyBodHRwczovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9IaWVyYXJjaGljYWxfY2x1c3RlcmluZyNNZXRyaWNcblxudmFyIGlkZW50aXR5JDEgPSBmdW5jdGlvbiBpZGVudGl0eSh4KSB7XG4gIHJldHVybiB4O1xufTtcbnZhciBhYnNEaWZmID0gZnVuY3Rpb24gYWJzRGlmZihwLCBxKSB7XG4gIHJldHVybiBNYXRoLmFicyhxIC0gcCk7XG59O1xudmFyIGFkZEFic0RpZmYgPSBmdW5jdGlvbiBhZGRBYnNEaWZmKHRvdGFsLCBwLCBxKSB7XG4gIHJldHVybiB0b3RhbCArIGFic0RpZmYocCwgcSk7XG59O1xudmFyIGFkZFNxdWFyZWREaWZmID0gZnVuY3Rpb24gYWRkU3F1YXJlZERpZmYodG90YWwsIHAsIHEpIHtcbiAgcmV0dXJuIHRvdGFsICsgTWF0aC5wb3cocSAtIHAsIDIpO1xufTtcbnZhciBzcXJ0ID0gZnVuY3Rpb24gc3FydCh4KSB7XG4gIHJldHVybiBNYXRoLnNxcnQoeCk7XG59O1xudmFyIG1heEFic0RpZmYgPSBmdW5jdGlvbiBtYXhBYnNEaWZmKGN1cnJlbnRNYXgsIHAsIHEpIHtcbiAgcmV0dXJuIE1hdGgubWF4KGN1cnJlbnRNYXgsIGFic0RpZmYocCwgcSkpO1xufTtcbnZhciBnZXREaXN0YW5jZSA9IGZ1bmN0aW9uIGdldERpc3RhbmNlKGxlbmd0aCwgZ2V0UCwgZ2V0USwgaW5pdCwgdmlzaXQpIHtcbiAgdmFyIHBvc3QgPSBhcmd1bWVudHMubGVuZ3RoID4gNSAmJiBhcmd1bWVudHNbNV0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1s1XSA6IGlkZW50aXR5JDE7XG4gIHZhciByZXQgPSBpbml0O1xuICB2YXIgcCwgcTtcbiAgZm9yICh2YXIgZGltID0gMDsgZGltIDwgbGVuZ3RoOyBkaW0rKykge1xuICAgIHAgPSBnZXRQKGRpbSk7XG4gICAgcSA9IGdldFEoZGltKTtcbiAgICByZXQgPSB2aXNpdChyZXQsIHAsIHEpO1xuICB9XG4gIHJldHVybiBwb3N0KHJldCk7XG59O1xudmFyIGRpc3RhbmNlcyA9IHtcbiAgZXVjbGlkZWFuOiBmdW5jdGlvbiBldWNsaWRlYW4obGVuZ3RoLCBnZXRQLCBnZXRRKSB7XG4gICAgaWYgKGxlbmd0aCA+PSAyKSB7XG4gICAgICByZXR1cm4gZ2V0RGlzdGFuY2UobGVuZ3RoLCBnZXRQLCBnZXRRLCAwLCBhZGRTcXVhcmVkRGlmZiwgc3FydCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIGZvciBzaW5nbGUgYXR0ciBjYXNlLCBtb3JlIGVmZmljaWVudCB0byBhdm9pZCBzcXJ0XG4gICAgICByZXR1cm4gZ2V0RGlzdGFuY2UobGVuZ3RoLCBnZXRQLCBnZXRRLCAwLCBhZGRBYnNEaWZmKTtcbiAgICB9XG4gIH0sXG4gIHNxdWFyZWRFdWNsaWRlYW46IGZ1bmN0aW9uIHNxdWFyZWRFdWNsaWRlYW4obGVuZ3RoLCBnZXRQLCBnZXRRKSB7XG4gICAgcmV0dXJuIGdldERpc3RhbmNlKGxlbmd0aCwgZ2V0UCwgZ2V0USwgMCwgYWRkU3F1YXJlZERpZmYpO1xuICB9LFxuICBtYW5oYXR0YW46IGZ1bmN0aW9uIG1hbmhhdHRhbihsZW5ndGgsIGdldFAsIGdldFEpIHtcbiAgICByZXR1cm4gZ2V0RGlzdGFuY2UobGVuZ3RoLCBnZXRQLCBnZXRRLCAwLCBhZGRBYnNEaWZmKTtcbiAgfSxcbiAgbWF4OiBmdW5jdGlvbiBtYXgobGVuZ3RoLCBnZXRQLCBnZXRRKSB7XG4gICAgcmV0dXJuIGdldERpc3RhbmNlKGxlbmd0aCwgZ2V0UCwgZ2V0USwgLUluZmluaXR5LCBtYXhBYnNEaWZmKTtcbiAgfVxufTtcblxuLy8gaW4gY2FzZSB0aGUgdXNlciBhY2NpZGVudGFsbHkgZG9lc24ndCB1c2UgY2FtZWwgY2FzZVxuZGlzdGFuY2VzWydzcXVhcmVkLWV1Y2xpZGVhbiddID0gZGlzdGFuY2VzWydzcXVhcmVkRXVjbGlkZWFuJ107XG5kaXN0YW5jZXNbJ3NxdWFyZWRldWNsaWRlYW4nXSA9IGRpc3RhbmNlc1snc3F1YXJlZEV1Y2xpZGVhbiddO1xuZnVuY3Rpb24gY2x1c3RlcmluZ0Rpc3RhbmNlIChtZXRob2QsIGxlbmd0aCwgZ2V0UCwgZ2V0USwgbm9kZVAsIG5vZGVRKSB7XG4gIHZhciBpbXBsO1xuICBpZiAoZm4kNihtZXRob2QpKSB7XG4gICAgaW1wbCA9IG1ldGhvZDtcbiAgfSBlbHNlIHtcbiAgICBpbXBsID0gZGlzdGFuY2VzW21ldGhvZF0gfHwgZGlzdGFuY2VzLmV1Y2xpZGVhbjtcbiAgfVxuICBpZiAobGVuZ3RoID09PSAwICYmIGZuJDYobWV0aG9kKSkge1xuICAgIHJldHVybiBpbXBsKG5vZGVQLCBub2RlUSk7XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIGltcGwobGVuZ3RoLCBnZXRQLCBnZXRRLCBub2RlUCwgbm9kZVEpO1xuICB9XG59XG5cbnZhciBkZWZhdWx0cyRiID0gZGVmYXVsdHMkZyh7XG4gIGs6IDIsXG4gIG06IDIsXG4gIHNlbnNpdGl2aXR5VGhyZXNob2xkOiAwLjAwMDEsXG4gIGRpc3RhbmNlOiAnZXVjbGlkZWFuJyxcbiAgbWF4SXRlcmF0aW9uczogMTAsXG4gIGF0dHJpYnV0ZXM6IFtdLFxuICB0ZXN0TW9kZTogZmFsc2UsXG4gIHRlc3RDZW50cm9pZHM6IG51bGxcbn0pO1xudmFyIHNldE9wdGlvbnMkMiA9IGZ1bmN0aW9uIHNldE9wdGlvbnMob3B0aW9ucykge1xuICByZXR1cm4gZGVmYXVsdHMkYihvcHRpb25zKTtcbn07XG5cbnZhciBnZXREaXN0ID0gZnVuY3Rpb24gZ2V0RGlzdCh0eXBlLCBub2RlLCBjZW50cm9pZCwgYXR0cmlidXRlcywgbW9kZSkge1xuICB2YXIgbm9Ob2RlUCA9IG1vZGUgIT09ICdrTWVkb2lkcyc7XG4gIHZhciBnZXRQID0gbm9Ob2RlUCA/IGZ1bmN0aW9uIChpKSB7XG4gICAgcmV0dXJuIGNlbnRyb2lkW2ldO1xuICB9IDogZnVuY3Rpb24gKGkpIHtcbiAgICByZXR1cm4gYXR0cmlidXRlc1tpXShjZW50cm9pZCk7XG4gIH07XG4gIHZhciBnZXRRID0gZnVuY3Rpb24gZ2V0UShpKSB7XG4gICAgcmV0dXJuIGF0dHJpYnV0ZXNbaV0obm9kZSk7XG4gIH07XG4gIHZhciBub2RlUCA9IGNlbnRyb2lkO1xuICB2YXIgbm9kZVEgPSBub2RlO1xuICByZXR1cm4gY2x1c3RlcmluZ0Rpc3RhbmNlKHR5cGUsIGF0dHJpYnV0ZXMubGVuZ3RoLCBnZXRQLCBnZXRRLCBub2RlUCwgbm9kZVEpO1xufTtcbnZhciByYW5kb21DZW50cm9pZHMgPSBmdW5jdGlvbiByYW5kb21DZW50cm9pZHMobm9kZXMsIGssIGF0dHJpYnV0ZXMpIHtcbiAgdmFyIG5kaW0gPSBhdHRyaWJ1dGVzLmxlbmd0aDtcbiAgdmFyIG1pbiA9IG5ldyBBcnJheShuZGltKTtcbiAgdmFyIG1heCA9IG5ldyBBcnJheShuZGltKTtcbiAgdmFyIGNlbnRyb2lkcyA9IG5ldyBBcnJheShrKTtcbiAgdmFyIGNlbnRyb2lkID0gbnVsbDtcblxuICAvLyBGaW5kIG1pbiwgbWF4IHZhbHVlcyBmb3IgZWFjaCBhdHRyaWJ1dGUgZGltZW5zaW9uXG4gIGZvciAodmFyIGkgPSAwOyBpIDwgbmRpbTsgaSsrKSB7XG4gICAgbWluW2ldID0gbm9kZXMubWluKGF0dHJpYnV0ZXNbaV0pLnZhbHVlO1xuICAgIG1heFtpXSA9IG5vZGVzLm1heChhdHRyaWJ1dGVzW2ldKS52YWx1ZTtcbiAgfVxuXG4gIC8vIEJ1aWxkIGsgY2VudHJvaWRzLCBlYWNoIHJlcHJlc2VudGVkIGFzIGFuIG4tZGltIGZlYXR1cmUgdmVjdG9yXG4gIGZvciAodmFyIGMgPSAwOyBjIDwgazsgYysrKSB7XG4gICAgY2VudHJvaWQgPSBbXTtcbiAgICBmb3IgKHZhciBfaSA9IDA7IF9pIDwgbmRpbTsgX2krKykge1xuICAgICAgY2VudHJvaWRbX2ldID0gTWF0aC5yYW5kb20oKSAqIChtYXhbX2ldIC0gbWluW19pXSkgKyBtaW5bX2ldOyAvLyByYW5kb20gaW5pdGlhbCB2YWx1ZVxuICAgIH1cbiAgICBjZW50cm9pZHNbY10gPSBjZW50cm9pZDtcbiAgfVxuICByZXR1cm4gY2VudHJvaWRzO1xufTtcbnZhciBjbGFzc2lmeSA9IGZ1bmN0aW9uIGNsYXNzaWZ5KG5vZGUsIGNlbnRyb2lkcywgZGlzdGFuY2UsIGF0dHJpYnV0ZXMsIHR5cGUpIHtcbiAgdmFyIG1pbiA9IEluZmluaXR5O1xuICB2YXIgaW5kZXggPSAwO1xuICBmb3IgKHZhciBpID0gMDsgaSA8IGNlbnRyb2lkcy5sZW5ndGg7IGkrKykge1xuICAgIHZhciBkaXN0ID0gZ2V0RGlzdChkaXN0YW5jZSwgbm9kZSwgY2VudHJvaWRzW2ldLCBhdHRyaWJ1dGVzLCB0eXBlKTtcbiAgICBpZiAoZGlzdCA8IG1pbikge1xuICAgICAgbWluID0gZGlzdDtcbiAgICAgIGluZGV4ID0gaTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIGluZGV4O1xufTtcbnZhciBidWlsZENsdXN0ZXIgPSBmdW5jdGlvbiBidWlsZENsdXN0ZXIoY2VudHJvaWQsIG5vZGVzLCBhc3NpZ25tZW50KSB7XG4gIHZhciBjbHVzdGVyID0gW107XG4gIHZhciBub2RlID0gbnVsbDtcbiAgZm9yICh2YXIgbiA9IDA7IG4gPCBub2Rlcy5sZW5ndGg7IG4rKykge1xuICAgIG5vZGUgPSBub2Rlc1tuXTtcbiAgICBpZiAoYXNzaWdubWVudFtub2RlLmlkKCldID09PSBjZW50cm9pZCkge1xuICAgICAgLy9jb25zb2xlLmxvZyhcIk5vZGUgXCIgKyBub2RlLmlkKCkgKyBcIiBpcyBhc3NvY2lhdGVkIHdpdGggbWVkb2lkICM6IFwiICsgbSk7XG4gICAgICBjbHVzdGVyLnB1c2gobm9kZSk7XG4gICAgfVxuICB9XG4gIHJldHVybiBjbHVzdGVyO1xufTtcbnZhciBoYXZlVmFsdWVzQ29udmVyZ2VkID0gZnVuY3Rpb24gaGF2ZVZhbHVlc0NvbnZlcmdlZCh2MSwgdjIsIHNlbnNpdGl2aXR5VGhyZXNob2xkKSB7XG4gIHJldHVybiBNYXRoLmFicyh2MiAtIHYxKSA8PSBzZW5zaXRpdml0eVRocmVzaG9sZDtcbn07XG52YXIgaGF2ZU1hdHJpY2VzQ29udmVyZ2VkID0gZnVuY3Rpb24gaGF2ZU1hdHJpY2VzQ29udmVyZ2VkKHYxLCB2Miwgc2Vuc2l0aXZpdHlUaHJlc2hvbGQpIHtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCB2MS5sZW5ndGg7IGkrKykge1xuICAgIGZvciAodmFyIGogPSAwOyBqIDwgdjFbaV0ubGVuZ3RoOyBqKyspIHtcbiAgICAgIHZhciBkaWZmID0gTWF0aC5hYnModjFbaV1bal0gLSB2MltpXVtqXSk7XG4gICAgICBpZiAoZGlmZiA+IHNlbnNpdGl2aXR5VGhyZXNob2xkKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgcmV0dXJuIHRydWU7XG59O1xudmFyIHNlZW5CZWZvcmUgPSBmdW5jdGlvbiBzZWVuQmVmb3JlKG5vZGUsIG1lZG9pZHMsIG4pIHtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBuOyBpKyspIHtcbiAgICBpZiAobm9kZSA9PT0gbWVkb2lkc1tpXSkgcmV0dXJuIHRydWU7XG4gIH1cbiAgcmV0dXJuIGZhbHNlO1xufTtcbnZhciByYW5kb21NZWRvaWRzID0gZnVuY3Rpb24gcmFuZG9tTWVkb2lkcyhub2Rlcywgaykge1xuICB2YXIgbWVkb2lkcyA9IG5ldyBBcnJheShrKTtcblxuICAvLyBGb3Igc21hbGwgZGF0YSBzZXRzLCB0aGUgcHJvYmFiaWxpdHkgb2YgbWVkb2lkIGNvbmZsaWN0IGlzIGdyZWF0ZXIsXG4gIC8vIHNvIHdlIG5lZWQgdG8gY2hlY2sgdG8gc2VlIGlmIHdlJ3ZlIGFscmVhZHkgc2VlbiBvciBjaG9zZSB0aGlzIG5vZGUgYmVmb3JlLlxuICBpZiAobm9kZXMubGVuZ3RoIDwgNTApIHtcbiAgICAvLyBSYW5kb21seSBzZWxlY3QgayBtZWRvaWRzIGZyb20gdGhlIG4gbm9kZXNcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGs7IGkrKykge1xuICAgICAgdmFyIG5vZGUgPSBub2Rlc1tNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkgKiBub2Rlcy5sZW5ndGgpXTtcblxuICAgICAgLy8gSWYgd2UndmUgYWxyZWFkeSBjaG9zZW4gdGhpcyBub2RlIHRvIGJlIGEgbWVkb2lkLCBkb24ndCBjaG9vc2UgaXQgYWdhaW4gKGZvciBzbWFsbCBkYXRhIHNldHMpLlxuICAgICAgLy8gSW5zdGVhZCBjaG9vc2UgYSBkaWZmZXJlbnQgcmFuZG9tIG5vZGUuXG4gICAgICB3aGlsZSAoc2VlbkJlZm9yZShub2RlLCBtZWRvaWRzLCBpKSkge1xuICAgICAgICBub2RlID0gbm9kZXNbTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpICogbm9kZXMubGVuZ3RoKV07XG4gICAgICB9XG4gICAgICBtZWRvaWRzW2ldID0gbm9kZTtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgLy8gUmVsYXRpdmVseSBsYXJnZSBkYXRhIHNldCwgc28gcHJldHR5IHNhZmUgdG8gbm90IGNoZWNrIGFuZCBqdXN0IHNlbGVjdCByYW5kb20gbm9kZXNcbiAgICBmb3IgKHZhciBfaTIgPSAwOyBfaTIgPCBrOyBfaTIrKykge1xuICAgICAgbWVkb2lkc1tfaTJdID0gbm9kZXNbTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpICogbm9kZXMubGVuZ3RoKV07XG4gICAgfVxuICB9XG4gIHJldHVybiBtZWRvaWRzO1xufTtcbnZhciBmaW5kQ29zdCA9IGZ1bmN0aW9uIGZpbmRDb3N0KHBvdGVudGlhbE5ld01lZG9pZCwgY2x1c3RlciwgYXR0cmlidXRlcykge1xuICB2YXIgY29zdCA9IDA7XG4gIGZvciAodmFyIG4gPSAwOyBuIDwgY2x1c3Rlci5sZW5ndGg7IG4rKykge1xuICAgIGNvc3QgKz0gZ2V0RGlzdCgnbWFuaGF0dGFuJywgY2x1c3RlcltuXSwgcG90ZW50aWFsTmV3TWVkb2lkLCBhdHRyaWJ1dGVzLCAna01lZG9pZHMnKTtcbiAgfVxuICByZXR1cm4gY29zdDtcbn07XG52YXIga01lYW5zID0gZnVuY3Rpb24ga01lYW5zKG9wdGlvbnMpIHtcbiAgdmFyIGN5ID0gdGhpcy5jeSgpO1xuICB2YXIgbm9kZXMgPSB0aGlzLm5vZGVzKCk7XG4gIHZhciBub2RlID0gbnVsbDtcblxuICAvLyBTZXQgcGFyYW1ldGVycyBvZiBhbGdvcml0aG06ICMgb2YgY2x1c3RlcnMsIGRpc3RhbmNlIG1ldHJpYywgZXRjLlxuICB2YXIgb3B0cyA9IHNldE9wdGlvbnMkMihvcHRpb25zKTtcblxuICAvLyBCZWdpbiBrLW1lYW5zIGFsZ29yaXRobVxuICB2YXIgY2x1c3RlcnMgPSBuZXcgQXJyYXkob3B0cy5rKTtcbiAgdmFyIGFzc2lnbm1lbnQgPSB7fTtcbiAgdmFyIGNlbnRyb2lkcztcblxuICAvLyBTdGVwIDE6IEluaXRpYWxpemUgY2VudHJvaWQgcG9zaXRpb25zXG4gIGlmIChvcHRzLnRlc3RNb2RlKSB7XG4gICAgaWYgKHR5cGVvZiBvcHRzLnRlc3RDZW50cm9pZHMgPT09ICdudW1iZXInKSB7XG4gICAgICAvLyBUT0RPOiBpbXBsZW1lbnQgYSBzZWVkZWQgcmFuZG9tIG51bWJlciBnZW5lcmF0b3IuXG4gICAgICBvcHRzLnRlc3RDZW50cm9pZHM7XG4gICAgICBjZW50cm9pZHMgPSByYW5kb21DZW50cm9pZHMobm9kZXMsIG9wdHMuaywgb3B0cy5hdHRyaWJ1dGVzKTtcbiAgICB9IGVsc2UgaWYgKF90eXBlb2Yob3B0cy50ZXN0Q2VudHJvaWRzKSA9PT0gJ29iamVjdCcpIHtcbiAgICAgIGNlbnRyb2lkcyA9IG9wdHMudGVzdENlbnRyb2lkcztcbiAgICB9IGVsc2Uge1xuICAgICAgY2VudHJvaWRzID0gcmFuZG9tQ2VudHJvaWRzKG5vZGVzLCBvcHRzLmssIG9wdHMuYXR0cmlidXRlcyk7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIGNlbnRyb2lkcyA9IHJhbmRvbUNlbnRyb2lkcyhub2Rlcywgb3B0cy5rLCBvcHRzLmF0dHJpYnV0ZXMpO1xuICB9XG4gIHZhciBpc1N0aWxsTW92aW5nID0gdHJ1ZTtcbiAgdmFyIGl0ZXJhdGlvbnMgPSAwO1xuICB3aGlsZSAoaXNTdGlsbE1vdmluZyAmJiBpdGVyYXRpb25zIDwgb3B0cy5tYXhJdGVyYXRpb25zKSB7XG4gICAgLy8gU3RlcCAyOiBBc3NpZ24gbm9kZXMgdG8gdGhlIG5lYXJlc3QgY2VudHJvaWRcbiAgICBmb3IgKHZhciBuID0gMDsgbiA8IG5vZGVzLmxlbmd0aDsgbisrKSB7XG4gICAgICBub2RlID0gbm9kZXNbbl07XG4gICAgICAvLyBEZXRlcm1pbmUgd2hpY2ggY2x1c3RlciB0aGlzIG5vZGUgYmVsb25ncyB0bzogbm9kZSBpZCA9PiBjbHVzdGVyICNcbiAgICAgIGFzc2lnbm1lbnRbbm9kZS5pZCgpXSA9IGNsYXNzaWZ5KG5vZGUsIGNlbnRyb2lkcywgb3B0cy5kaXN0YW5jZSwgb3B0cy5hdHRyaWJ1dGVzLCAna01lYW5zJyk7XG4gICAgfVxuXG4gICAgLy8gU3RlcCAzOiBGb3IgZWFjaCBvZiB0aGUgayBjbHVzdGVycywgdXBkYXRlIGl0cyBjZW50cm9pZFxuICAgIGlzU3RpbGxNb3ZpbmcgPSBmYWxzZTtcbiAgICBmb3IgKHZhciBjID0gMDsgYyA8IG9wdHMuazsgYysrKSB7XG4gICAgICAvLyBHZXQgYWxsIG5vZGVzIHRoYXQgYmVsb25nIHRvIHRoaXMgY2x1c3RlclxuICAgICAgdmFyIGNsdXN0ZXIgPSBidWlsZENsdXN0ZXIoYywgbm9kZXMsIGFzc2lnbm1lbnQpO1xuICAgICAgaWYgKGNsdXN0ZXIubGVuZ3RoID09PSAwKSB7XG4gICAgICAgIC8vIElmIGNsdXN0ZXIgaXMgZW1wdHksIGJyZWFrIG91dCBlYXJseSAmIG1vdmUgdG8gbmV4dCBjbHVzdGVyXG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuXG4gICAgICAvLyBVcGRhdGUgY2VudHJvaWRzIGJ5IGNhbGN1bGF0aW5nIGF2ZyBvZiBhbGwgbm9kZXMgd2l0aGluIHRoZSBjbHVzdGVyLlxuICAgICAgdmFyIG5kaW0gPSBvcHRzLmF0dHJpYnV0ZXMubGVuZ3RoO1xuICAgICAgdmFyIGNlbnRyb2lkID0gY2VudHJvaWRzW2NdOyAvLyBbIGRpbV8xLCBkaW1fMiwgZGltXzMsIC4uLiAsIGRpbV9uIF1cbiAgICAgIHZhciBuZXdDZW50cm9pZCA9IG5ldyBBcnJheShuZGltKTtcbiAgICAgIHZhciBzdW0gPSBuZXcgQXJyYXkobmRpbSk7XG4gICAgICBmb3IgKHZhciBkID0gMDsgZCA8IG5kaW07IGQrKykge1xuICAgICAgICBzdW1bZF0gPSAwLjA7XG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgY2x1c3Rlci5sZW5ndGg7IGkrKykge1xuICAgICAgICAgIG5vZGUgPSBjbHVzdGVyW2ldO1xuICAgICAgICAgIHN1bVtkXSArPSBvcHRzLmF0dHJpYnV0ZXNbZF0obm9kZSk7XG4gICAgICAgIH1cbiAgICAgICAgbmV3Q2VudHJvaWRbZF0gPSBzdW1bZF0gLyBjbHVzdGVyLmxlbmd0aDtcblxuICAgICAgICAvLyBDaGVjayB0byBzZWUgaWYgYWxnb3JpdGhtIGhhcyBjb252ZXJnZWQsIGkuZS4gd2hlbiBjZW50cm9pZHMgbm8gbG9uZ2VyIGNoYW5nZVxuICAgICAgICBpZiAoIWhhdmVWYWx1ZXNDb252ZXJnZWQobmV3Q2VudHJvaWRbZF0sIGNlbnRyb2lkW2RdLCBvcHRzLnNlbnNpdGl2aXR5VGhyZXNob2xkKSkge1xuICAgICAgICAgIGlzU3RpbGxNb3ZpbmcgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBjZW50cm9pZHNbY10gPSBuZXdDZW50cm9pZDtcbiAgICAgIGNsdXN0ZXJzW2NdID0gY3kuY29sbGVjdGlvbihjbHVzdGVyKTtcbiAgICB9XG4gICAgaXRlcmF0aW9ucysrO1xuICB9XG4gIHJldHVybiBjbHVzdGVycztcbn07XG52YXIga01lZG9pZHMgPSBmdW5jdGlvbiBrTWVkb2lkcyhvcHRpb25zKSB7XG4gIHZhciBjeSA9IHRoaXMuY3koKTtcbiAgdmFyIG5vZGVzID0gdGhpcy5ub2RlcygpO1xuICB2YXIgbm9kZSA9IG51bGw7XG4gIHZhciBvcHRzID0gc2V0T3B0aW9ucyQyKG9wdGlvbnMpO1xuXG4gIC8vIEJlZ2luIGstbWVkb2lkcyBhbGdvcml0aG1cbiAgdmFyIGNsdXN0ZXJzID0gbmV3IEFycmF5KG9wdHMuayk7XG4gIHZhciBtZWRvaWRzO1xuICB2YXIgYXNzaWdubWVudCA9IHt9O1xuICB2YXIgY3VyQ29zdDtcbiAgdmFyIG1pbkNvc3RzID0gbmV3IEFycmF5KG9wdHMuayk7IC8vIG1pbmltdW0gY29zdCBjb25maWd1cmF0aW9uIGZvciBlYWNoIGNsdXN0ZXJcblxuICAvLyBTdGVwIDE6IEluaXRpYWxpemUgayBtZWRvaWRzXG4gIGlmIChvcHRzLnRlc3RNb2RlKSB7XG4gICAgaWYgKHR5cGVvZiBvcHRzLnRlc3RDZW50cm9pZHMgPT09ICdudW1iZXInKSA7IGVsc2UgaWYgKF90eXBlb2Yob3B0cy50ZXN0Q2VudHJvaWRzKSA9PT0gJ29iamVjdCcpIHtcbiAgICAgIG1lZG9pZHMgPSBvcHRzLnRlc3RDZW50cm9pZHM7XG4gICAgfSBlbHNlIHtcbiAgICAgIG1lZG9pZHMgPSByYW5kb21NZWRvaWRzKG5vZGVzLCBvcHRzLmspO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICBtZWRvaWRzID0gcmFuZG9tTWVkb2lkcyhub2Rlcywgb3B0cy5rKTtcbiAgfVxuICB2YXIgaXNTdGlsbE1vdmluZyA9IHRydWU7XG4gIHZhciBpdGVyYXRpb25zID0gMDtcbiAgd2hpbGUgKGlzU3RpbGxNb3ZpbmcgJiYgaXRlcmF0aW9ucyA8IG9wdHMubWF4SXRlcmF0aW9ucykge1xuICAgIC8vIFN0ZXAgMjogQXNzaWduIG5vZGVzIHRvIHRoZSBuZWFyZXN0IG1lZG9pZFxuICAgIGZvciAodmFyIG4gPSAwOyBuIDwgbm9kZXMubGVuZ3RoOyBuKyspIHtcbiAgICAgIG5vZGUgPSBub2Rlc1tuXTtcbiAgICAgIC8vIERldGVybWluZSB3aGljaCBjbHVzdGVyIHRoaXMgbm9kZSBiZWxvbmdzIHRvOiBub2RlIGlkID0+IGNsdXN0ZXIgI1xuICAgICAgYXNzaWdubWVudFtub2RlLmlkKCldID0gY2xhc3NpZnkobm9kZSwgbWVkb2lkcywgb3B0cy5kaXN0YW5jZSwgb3B0cy5hdHRyaWJ1dGVzLCAna01lZG9pZHMnKTtcbiAgICB9XG4gICAgaXNTdGlsbE1vdmluZyA9IGZhbHNlO1xuICAgIC8vIFN0ZXAgMzogRm9yIGVhY2ggbWVkb2lkIG0sIGFuZCBmb3IgZWFjaCBub2RlIGFzc29jaWF0ZWQgd2l0aCBtZWRpb2QgbSxcbiAgICAvLyBzZWxlY3QgdGhlIG5vZGUgd2l0aCB0aGUgbG93ZXN0IGNvbmZpZ3VyYXRpb24gY29zdCBhcyBuZXcgbWVkb2lkLlxuICAgIGZvciAodmFyIG0gPSAwOyBtIDwgbWVkb2lkcy5sZW5ndGg7IG0rKykge1xuICAgICAgLy8gR2V0IGFsbCBub2RlcyB0aGF0IGJlbG9uZyB0byB0aGlzIG1lZG9pZFxuICAgICAgdmFyIGNsdXN0ZXIgPSBidWlsZENsdXN0ZXIobSwgbm9kZXMsIGFzc2lnbm1lbnQpO1xuICAgICAgaWYgKGNsdXN0ZXIubGVuZ3RoID09PSAwKSB7XG4gICAgICAgIC8vIElmIGNsdXN0ZXIgaXMgZW1wdHksIGJyZWFrIG91dCBlYXJseSAmIG1vdmUgdG8gbmV4dCBjbHVzdGVyXG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuICAgICAgbWluQ29zdHNbbV0gPSBmaW5kQ29zdChtZWRvaWRzW21dLCBjbHVzdGVyLCBvcHRzLmF0dHJpYnV0ZXMpOyAvLyBvcmlnaW5hbCBjb3N0XG5cbiAgICAgIC8vIFNlbGVjdCBkaWZmZXJlbnQgbWVkb2lkIGlmIGl0cyBjb25maWd1cmF0aW9uIGhhcyB0aGUgbG93ZXN0IGNvc3RcbiAgICAgIGZvciAodmFyIF9uID0gMDsgX24gPCBjbHVzdGVyLmxlbmd0aDsgX24rKykge1xuICAgICAgICBjdXJDb3N0ID0gZmluZENvc3QoY2x1c3Rlcltfbl0sIGNsdXN0ZXIsIG9wdHMuYXR0cmlidXRlcyk7XG4gICAgICAgIGlmIChjdXJDb3N0IDwgbWluQ29zdHNbbV0pIHtcbiAgICAgICAgICBtaW5Db3N0c1ttXSA9IGN1ckNvc3Q7XG4gICAgICAgICAgbWVkb2lkc1ttXSA9IGNsdXN0ZXJbX25dO1xuICAgICAgICAgIGlzU3RpbGxNb3ZpbmcgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBjbHVzdGVyc1ttXSA9IGN5LmNvbGxlY3Rpb24oY2x1c3Rlcik7XG4gICAgfVxuICAgIGl0ZXJhdGlvbnMrKztcbiAgfVxuICByZXR1cm4gY2x1c3RlcnM7XG59O1xudmFyIHVwZGF0ZUNlbnRyb2lkcyA9IGZ1bmN0aW9uIHVwZGF0ZUNlbnRyb2lkcyhjZW50cm9pZHMsIG5vZGVzLCBVLCB3ZWlnaHQsIG9wdHMpIHtcbiAgdmFyIG51bWVyYXRvciwgZGVub21pbmF0b3I7XG4gIGZvciAodmFyIG4gPSAwOyBuIDwgbm9kZXMubGVuZ3RoOyBuKyspIHtcbiAgICBmb3IgKHZhciBjID0gMDsgYyA8IGNlbnRyb2lkcy5sZW5ndGg7IGMrKykge1xuICAgICAgd2VpZ2h0W25dW2NdID0gTWF0aC5wb3coVVtuXVtjXSwgb3B0cy5tKTtcbiAgICB9XG4gIH1cbiAgZm9yICh2YXIgX2MgPSAwOyBfYyA8IGNlbnRyb2lkcy5sZW5ndGg7IF9jKyspIHtcbiAgICBmb3IgKHZhciBkaW0gPSAwOyBkaW0gPCBvcHRzLmF0dHJpYnV0ZXMubGVuZ3RoOyBkaW0rKykge1xuICAgICAgbnVtZXJhdG9yID0gMDtcbiAgICAgIGRlbm9taW5hdG9yID0gMDtcbiAgICAgIGZvciAodmFyIF9uMiA9IDA7IF9uMiA8IG5vZGVzLmxlbmd0aDsgX24yKyspIHtcbiAgICAgICAgbnVtZXJhdG9yICs9IHdlaWdodFtfbjJdW19jXSAqIG9wdHMuYXR0cmlidXRlc1tkaW1dKG5vZGVzW19uMl0pO1xuICAgICAgICBkZW5vbWluYXRvciArPSB3ZWlnaHRbX24yXVtfY107XG4gICAgICB9XG4gICAgICBjZW50cm9pZHNbX2NdW2RpbV0gPSBudW1lcmF0b3IgLyBkZW5vbWluYXRvcjtcbiAgICB9XG4gIH1cbn07XG52YXIgdXBkYXRlTWVtYmVyc2hpcCA9IGZ1bmN0aW9uIHVwZGF0ZU1lbWJlcnNoaXAoVSwgX1UsIGNlbnRyb2lkcywgbm9kZXMsIG9wdHMpIHtcbiAgLy8gU2F2ZSBwcmV2aW91cyBzdGVwXG4gIGZvciAodmFyIGkgPSAwOyBpIDwgVS5sZW5ndGg7IGkrKykge1xuICAgIF9VW2ldID0gVVtpXS5zbGljZSgpO1xuICB9XG4gIHZhciBzdW0sIG51bWVyYXRvciwgZGVub21pbmF0b3I7XG4gIHZhciBwb3cgPSAyIC8gKG9wdHMubSAtIDEpO1xuICBmb3IgKHZhciBjID0gMDsgYyA8IGNlbnRyb2lkcy5sZW5ndGg7IGMrKykge1xuICAgIGZvciAodmFyIG4gPSAwOyBuIDwgbm9kZXMubGVuZ3RoOyBuKyspIHtcbiAgICAgIHN1bSA9IDA7XG4gICAgICBmb3IgKHZhciBrID0gMDsgayA8IGNlbnRyb2lkcy5sZW5ndGg7IGsrKykge1xuICAgICAgICAvLyBhZ2FpbnN0IGFsbCBvdGhlciBjZW50cm9pZHNcbiAgICAgICAgbnVtZXJhdG9yID0gZ2V0RGlzdChvcHRzLmRpc3RhbmNlLCBub2Rlc1tuXSwgY2VudHJvaWRzW2NdLCBvcHRzLmF0dHJpYnV0ZXMsICdjbWVhbnMnKTtcbiAgICAgICAgZGVub21pbmF0b3IgPSBnZXREaXN0KG9wdHMuZGlzdGFuY2UsIG5vZGVzW25dLCBjZW50cm9pZHNba10sIG9wdHMuYXR0cmlidXRlcywgJ2NtZWFucycpO1xuICAgICAgICBzdW0gKz0gTWF0aC5wb3cobnVtZXJhdG9yIC8gZGVub21pbmF0b3IsIHBvdyk7XG4gICAgICB9XG4gICAgICBVW25dW2NdID0gMSAvIHN1bTtcbiAgICB9XG4gIH1cbn07XG52YXIgYXNzaWduJDEgPSBmdW5jdGlvbiBhc3NpZ24obm9kZXMsIFUsIG9wdHMsIGN5KSB7XG4gIHZhciBjbHVzdGVycyA9IG5ldyBBcnJheShvcHRzLmspO1xuICBmb3IgKHZhciBjID0gMDsgYyA8IGNsdXN0ZXJzLmxlbmd0aDsgYysrKSB7XG4gICAgY2x1c3RlcnNbY10gPSBbXTtcbiAgfVxuICB2YXIgbWF4O1xuICB2YXIgaW5kZXg7XG4gIGZvciAodmFyIG4gPSAwOyBuIDwgVS5sZW5ndGg7IG4rKykge1xuICAgIC8vIGZvciBlYWNoIG5vZGUgKFUgaXMgTiB4IEMgbWF0cml4KVxuICAgIG1heCA9IC1JbmZpbml0eTtcbiAgICBpbmRleCA9IC0xO1xuICAgIC8vIERldGVybWluZSB3aGljaCBjbHVzdGVyIHRoZSBub2RlIGlzIG1vc3QgbGlrZWx5IHRvIGJlbG9uZyBpblxuICAgIGZvciAodmFyIF9jMiA9IDA7IF9jMiA8IFVbMF0ubGVuZ3RoOyBfYzIrKykge1xuICAgICAgaWYgKFVbbl1bX2MyXSA+IG1heCkge1xuICAgICAgICBtYXggPSBVW25dW19jMl07XG4gICAgICAgIGluZGV4ID0gX2MyO1xuICAgICAgfVxuICAgIH1cbiAgICBjbHVzdGVyc1tpbmRleF0ucHVzaChub2Rlc1tuXSk7XG4gIH1cblxuICAvLyBUdXJuIGV2ZXJ5IGFycmF5IGludG8gYSBjb2xsZWN0aW9uIG9mIG5vZGVzXG4gIGZvciAodmFyIF9jMyA9IDA7IF9jMyA8IGNsdXN0ZXJzLmxlbmd0aDsgX2MzKyspIHtcbiAgICBjbHVzdGVyc1tfYzNdID0gY3kuY29sbGVjdGlvbihjbHVzdGVyc1tfYzNdKTtcbiAgfVxuICByZXR1cm4gY2x1c3RlcnM7XG59O1xudmFyIGZ1enp5Q01lYW5zID0gZnVuY3Rpb24gZnV6enlDTWVhbnMob3B0aW9ucykge1xuICB2YXIgY3kgPSB0aGlzLmN5KCk7XG4gIHZhciBub2RlcyA9IHRoaXMubm9kZXMoKTtcbiAgdmFyIG9wdHMgPSBzZXRPcHRpb25zJDIob3B0aW9ucyk7XG5cbiAgLy8gQmVnaW4gZnV6enkgYy1tZWFucyBhbGdvcml0aG1cbiAgdmFyIGNsdXN0ZXJzO1xuICB2YXIgY2VudHJvaWRzO1xuICB2YXIgVTtcbiAgdmFyIF9VO1xuICB2YXIgd2VpZ2h0O1xuXG4gIC8vIFN0ZXAgMTogSW5pdGlhbGl6ZSBsZXRpYWJsZXMuXG4gIF9VID0gbmV3IEFycmF5KG5vZGVzLmxlbmd0aCk7XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgbm9kZXMubGVuZ3RoOyBpKyspIHtcbiAgICAvLyBOIHggQyBtYXRyaXhcbiAgICBfVVtpXSA9IG5ldyBBcnJheShvcHRzLmspO1xuICB9XG4gIFUgPSBuZXcgQXJyYXkobm9kZXMubGVuZ3RoKTtcbiAgZm9yICh2YXIgX2kzID0gMDsgX2kzIDwgbm9kZXMubGVuZ3RoOyBfaTMrKykge1xuICAgIC8vIE4geCBDIG1hdHJpeFxuICAgIFVbX2kzXSA9IG5ldyBBcnJheShvcHRzLmspO1xuICB9XG4gIGZvciAodmFyIF9pNCA9IDA7IF9pNCA8IG5vZGVzLmxlbmd0aDsgX2k0KyspIHtcbiAgICB2YXIgdG90YWwgPSAwO1xuICAgIGZvciAodmFyIGogPSAwOyBqIDwgb3B0cy5rOyBqKyspIHtcbiAgICAgIFVbX2k0XVtqXSA9IE1hdGgucmFuZG9tKCk7XG4gICAgICB0b3RhbCArPSBVW19pNF1bal07XG4gICAgfVxuICAgIGZvciAodmFyIF9qID0gMDsgX2ogPCBvcHRzLms7IF9qKyspIHtcbiAgICAgIFVbX2k0XVtfal0gPSBVW19pNF1bX2pdIC8gdG90YWw7XG4gICAgfVxuICB9XG4gIGNlbnRyb2lkcyA9IG5ldyBBcnJheShvcHRzLmspO1xuICBmb3IgKHZhciBfaTUgPSAwOyBfaTUgPCBvcHRzLms7IF9pNSsrKSB7XG4gICAgY2VudHJvaWRzW19pNV0gPSBuZXcgQXJyYXkob3B0cy5hdHRyaWJ1dGVzLmxlbmd0aCk7XG4gIH1cbiAgd2VpZ2h0ID0gbmV3IEFycmF5KG5vZGVzLmxlbmd0aCk7XG4gIGZvciAodmFyIF9pNiA9IDA7IF9pNiA8IG5vZGVzLmxlbmd0aDsgX2k2KyspIHtcbiAgICAvLyBOIHggQyBtYXRyaXhcbiAgICB3ZWlnaHRbX2k2XSA9IG5ldyBBcnJheShvcHRzLmspO1xuICB9XG4gIC8vIGVuZCBpbml0IEZDTVxuXG4gIHZhciBpc1N0aWxsTW92aW5nID0gdHJ1ZTtcbiAgdmFyIGl0ZXJhdGlvbnMgPSAwO1xuICB3aGlsZSAoaXNTdGlsbE1vdmluZyAmJiBpdGVyYXRpb25zIDwgb3B0cy5tYXhJdGVyYXRpb25zKSB7XG4gICAgaXNTdGlsbE1vdmluZyA9IGZhbHNlO1xuXG4gICAgLy8gU3RlcCAyOiBDYWxjdWxhdGUgdGhlIGNlbnRyb2lkcyBmb3IgZWFjaCBzdGVwLlxuICAgIHVwZGF0ZUNlbnRyb2lkcyhjZW50cm9pZHMsIG5vZGVzLCBVLCB3ZWlnaHQsIG9wdHMpO1xuXG4gICAgLy8gU3RlcCAzOiBVcGRhdGUgdGhlIHBhcnRpdGlvbiBtYXRyaXggVS5cbiAgICB1cGRhdGVNZW1iZXJzaGlwKFUsIF9VLCBjZW50cm9pZHMsIG5vZGVzLCBvcHRzKTtcblxuICAgIC8vIFN0ZXAgNDogQ2hlY2sgZm9yIGNvbnZlcmdlbmNlLlxuICAgIGlmICghaGF2ZU1hdHJpY2VzQ29udmVyZ2VkKFUsIF9VLCBvcHRzLnNlbnNpdGl2aXR5VGhyZXNob2xkKSkge1xuICAgICAgaXNTdGlsbE1vdmluZyA9IHRydWU7XG4gICAgfVxuICAgIGl0ZXJhdGlvbnMrKztcbiAgfVxuXG4gIC8vIEFzc2lnbiBub2RlcyB0byBjbHVzdGVycyB3aXRoIGhpZ2hlc3QgcHJvYmFiaWxpdHkuXG4gIGNsdXN0ZXJzID0gYXNzaWduJDEobm9kZXMsIFUsIG9wdHMsIGN5KTtcbiAgcmV0dXJuIHtcbiAgICBjbHVzdGVyczogY2x1c3RlcnMsXG4gICAgZGVncmVlT2ZNZW1iZXJzaGlwOiBVXG4gIH07XG59O1xudmFyIGtDbHVzdGVyaW5nID0ge1xuICBrTWVhbnM6IGtNZWFucyxcbiAga01lZG9pZHM6IGtNZWRvaWRzLFxuICBmdXp6eUNNZWFuczogZnV6enlDTWVhbnMsXG4gIGZjbTogZnV6enlDTWVhbnNcbn07XG5cbi8vIEltcGxlbWVudGVkIGJ5IFpvZSBYaSBAem9leGkgZm9yIEdTT0MgMjAxNlxuLy8gaHR0cHM6Ly9naXRodWIuY29tL2N5dG9zY2FwZS9jeXRvc2NhcGUuanMtaGllcmFyY2hpY2FsXG5cbnZhciBkZWZhdWx0cyRhID0gZGVmYXVsdHMkZyh7XG4gIGRpc3RhbmNlOiAnZXVjbGlkZWFuJyxcbiAgLy8gZGlzdGFuY2UgbWV0cmljIHRvIGNvbXBhcmUgbm9kZXNcbiAgbGlua2FnZTogJ21pbicsXG4gIC8vIGxpbmthZ2UgY3JpdGVyaW9uIDogaG93IHRvIGRldGVybWluZSB0aGUgZGlzdGFuY2UgYmV0d2VlbiBjbHVzdGVycyBvZiBub2Rlc1xuICBtb2RlOiAndGhyZXNob2xkJyxcbiAgLy8gbW9kZTondGhyZXNob2xkJyA9PiBjbHVzdGVycyBtdXN0IGJlIHRocmVzaG9sZCBkaXN0YW5jZSBhcGFydFxuICB0aHJlc2hvbGQ6IEluZmluaXR5LFxuICAvLyB0aGUgZGlzdGFuY2UgdGhyZXNob2xkXG4gIC8vIG1vZGU6J2RlbmRyb2dyYW0nID0+IHRoZSBub2RlcyBhcmUgb3JnYW5pc2VkIGFzIGxlYXZlcyBpbiBhIHRyZWUgKHNpYmxpbmdzIGFyZSBjbG9zZSksIG1lcmdpbmcgbWFrZXMgY2x1c3RlcnNcbiAgYWRkRGVuZHJvZ3JhbTogZmFsc2UsXG4gIC8vIHdoZXRoZXIgdG8gYWRkIHRoZSBkZW5kcm9ncmFtIHRvIHRoZSBncmFwaCBmb3Igdml6XG4gIGRlbmRyb2dyYW1EZXB0aDogMCxcbiAgLy8gZGVwdGggYXQgd2hpY2ggZGVuZHJvZ3JhbSBicmFuY2hlcyBhcmUgbWVyZ2VkIGludG8gdGhlIHJldHVybmVkIGNsdXN0ZXJzXG4gIGF0dHJpYnV0ZXM6IFtdIC8vIGFycmF5IG9mIGF0dHIgZnVuY3Rpb25zXG59KTtcbnZhciBsaW5rYWdlQWxpYXNlcyA9IHtcbiAgJ3NpbmdsZSc6ICdtaW4nLFxuICAnY29tcGxldGUnOiAnbWF4J1xufTtcbnZhciBzZXRPcHRpb25zJDEgPSBmdW5jdGlvbiBzZXRPcHRpb25zKG9wdGlvbnMpIHtcbiAgdmFyIG9wdHMgPSBkZWZhdWx0cyRhKG9wdGlvbnMpO1xuICB2YXIgcHJlZmVycmVkQWxpYXMgPSBsaW5rYWdlQWxpYXNlc1tvcHRzLmxpbmthZ2VdO1xuICBpZiAocHJlZmVycmVkQWxpYXMgIT0gbnVsbCkge1xuICAgIG9wdHMubGlua2FnZSA9IHByZWZlcnJlZEFsaWFzO1xuICB9XG4gIHJldHVybiBvcHRzO1xufTtcbnZhciBtZXJnZUNsb3Nlc3QgPSBmdW5jdGlvbiBtZXJnZUNsb3Nlc3QoY2x1c3RlcnMsIGluZGV4LCBkaXN0cywgbWlucywgb3B0cykge1xuICAvLyBGaW5kIHR3byBjbG9zZXN0IGNsdXN0ZXJzIGZyb20gY2FjaGVkIG1pbnNcbiAgdmFyIG1pbktleSA9IDA7XG4gIHZhciBtaW4gPSBJbmZpbml0eTtcbiAgdmFyIGRpc3Q7XG4gIHZhciBhdHRycyA9IG9wdHMuYXR0cmlidXRlcztcbiAgdmFyIGdldERpc3QgPSBmdW5jdGlvbiBnZXREaXN0KG4xLCBuMikge1xuICAgIHJldHVybiBjbHVzdGVyaW5nRGlzdGFuY2Uob3B0cy5kaXN0YW5jZSwgYXR0cnMubGVuZ3RoLCBmdW5jdGlvbiAoaSkge1xuICAgICAgcmV0dXJuIGF0dHJzW2ldKG4xKTtcbiAgICB9LCBmdW5jdGlvbiAoaSkge1xuICAgICAgcmV0dXJuIGF0dHJzW2ldKG4yKTtcbiAgICB9LCBuMSwgbjIpO1xuICB9O1xuICBmb3IgKHZhciBpID0gMDsgaSA8IGNsdXN0ZXJzLmxlbmd0aDsgaSsrKSB7XG4gICAgdmFyIGtleSA9IGNsdXN0ZXJzW2ldLmtleTtcbiAgICB2YXIgX2Rpc3QgPSBkaXN0c1trZXldW21pbnNba2V5XV07XG4gICAgaWYgKF9kaXN0IDwgbWluKSB7XG4gICAgICBtaW5LZXkgPSBrZXk7XG4gICAgICBtaW4gPSBfZGlzdDtcbiAgICB9XG4gIH1cbiAgaWYgKG9wdHMubW9kZSA9PT0gJ3RocmVzaG9sZCcgJiYgbWluID49IG9wdHMudGhyZXNob2xkIHx8IG9wdHMubW9kZSA9PT0gJ2RlbmRyb2dyYW0nICYmIGNsdXN0ZXJzLmxlbmd0aCA9PT0gMSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICB2YXIgYzEgPSBpbmRleFttaW5LZXldO1xuICB2YXIgYzIgPSBpbmRleFttaW5zW21pbktleV1dO1xuICB2YXIgbWVyZ2VkO1xuXG4gIC8vIE1lcmdlIHR3byBjbG9zZXN0IGNsdXN0ZXJzXG4gIGlmIChvcHRzLm1vZGUgPT09ICdkZW5kcm9ncmFtJykge1xuICAgIG1lcmdlZCA9IHtcbiAgICAgIGxlZnQ6IGMxLFxuICAgICAgcmlnaHQ6IGMyLFxuICAgICAga2V5OiBjMS5rZXlcbiAgICB9O1xuICB9IGVsc2Uge1xuICAgIG1lcmdlZCA9IHtcbiAgICAgIHZhbHVlOiBjMS52YWx1ZS5jb25jYXQoYzIudmFsdWUpLFxuICAgICAga2V5OiBjMS5rZXlcbiAgICB9O1xuICB9XG4gIGNsdXN0ZXJzW2MxLmluZGV4XSA9IG1lcmdlZDtcbiAgY2x1c3RlcnMuc3BsaWNlKGMyLmluZGV4LCAxKTtcbiAgaW5kZXhbYzEua2V5XSA9IG1lcmdlZDtcblxuICAvLyBVcGRhdGUgZGlzdGFuY2VzIHdpdGggbmV3IG1lcmdlZCBjbHVzdGVyXG4gIGZvciAodmFyIF9pID0gMDsgX2kgPCBjbHVzdGVycy5sZW5ndGg7IF9pKyspIHtcbiAgICB2YXIgY3VyID0gY2x1c3RlcnNbX2ldO1xuICAgIGlmIChjMS5rZXkgPT09IGN1ci5rZXkpIHtcbiAgICAgIGRpc3QgPSBJbmZpbml0eTtcbiAgICB9IGVsc2UgaWYgKG9wdHMubGlua2FnZSA9PT0gJ21pbicpIHtcbiAgICAgIGRpc3QgPSBkaXN0c1tjMS5rZXldW2N1ci5rZXldO1xuICAgICAgaWYgKGRpc3RzW2MxLmtleV1bY3VyLmtleV0gPiBkaXN0c1tjMi5rZXldW2N1ci5rZXldKSB7XG4gICAgICAgIGRpc3QgPSBkaXN0c1tjMi5rZXldW2N1ci5rZXldO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAob3B0cy5saW5rYWdlID09PSAnbWF4Jykge1xuICAgICAgZGlzdCA9IGRpc3RzW2MxLmtleV1bY3VyLmtleV07XG4gICAgICBpZiAoZGlzdHNbYzEua2V5XVtjdXIua2V5XSA8IGRpc3RzW2MyLmtleV1bY3VyLmtleV0pIHtcbiAgICAgICAgZGlzdCA9IGRpc3RzW2MyLmtleV1bY3VyLmtleV07XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChvcHRzLmxpbmthZ2UgPT09ICdtZWFuJykge1xuICAgICAgZGlzdCA9IChkaXN0c1tjMS5rZXldW2N1ci5rZXldICogYzEuc2l6ZSArIGRpc3RzW2MyLmtleV1bY3VyLmtleV0gKiBjMi5zaXplKSAvIChjMS5zaXplICsgYzIuc2l6ZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmIChvcHRzLm1vZGUgPT09ICdkZW5kcm9ncmFtJykgZGlzdCA9IGdldERpc3QoY3VyLnZhbHVlLCBjMS52YWx1ZSk7ZWxzZSBkaXN0ID0gZ2V0RGlzdChjdXIudmFsdWVbMF0sIGMxLnZhbHVlWzBdKTtcbiAgICB9XG4gICAgZGlzdHNbYzEua2V5XVtjdXIua2V5XSA9IGRpc3RzW2N1ci5rZXldW2MxLmtleV0gPSBkaXN0OyAvLyBkaXN0YW5jZSBtYXRyaXggaXMgc3ltbWV0cmljXG4gIH1cblxuICAvLyBVcGRhdGUgY2FjaGVkIG1pbnNcbiAgZm9yICh2YXIgX2kyID0gMDsgX2kyIDwgY2x1c3RlcnMubGVuZ3RoOyBfaTIrKykge1xuICAgIHZhciBrZXkxID0gY2x1c3RlcnNbX2kyXS5rZXk7XG4gICAgaWYgKG1pbnNba2V5MV0gPT09IGMxLmtleSB8fCBtaW5zW2tleTFdID09PSBjMi5rZXkpIHtcbiAgICAgIHZhciBfbWluID0ga2V5MTtcbiAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgY2x1c3RlcnMubGVuZ3RoOyBqKyspIHtcbiAgICAgICAgdmFyIGtleTIgPSBjbHVzdGVyc1tqXS5rZXk7XG4gICAgICAgIGlmIChkaXN0c1trZXkxXVtrZXkyXSA8IGRpc3RzW2tleTFdW19taW5dKSB7XG4gICAgICAgICAgX21pbiA9IGtleTI7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIG1pbnNba2V5MV0gPSBfbWluO1xuICAgIH1cbiAgICBjbHVzdGVyc1tfaTJdLmluZGV4ID0gX2kyO1xuICB9XG5cbiAgLy8gQ2xlYW4gdXAgbWV0YSBkYXRhIHVzZWQgZm9yIGNsdXN0ZXJpbmdcbiAgYzEua2V5ID0gYzIua2V5ID0gYzEuaW5kZXggPSBjMi5pbmRleCA9IG51bGw7XG4gIHJldHVybiB0cnVlO1xufTtcbnZhciBfZ2V0QWxsQ2hpbGRyZW4gPSBmdW5jdGlvbiBnZXRBbGxDaGlsZHJlbihyb290LCBhcnIsIGN5KSB7XG4gIGlmICghcm9vdCkgcmV0dXJuO1xuICBpZiAocm9vdC52YWx1ZSkge1xuICAgIGFyci5wdXNoKHJvb3QudmFsdWUpO1xuICB9IGVsc2Uge1xuICAgIGlmIChyb290LmxlZnQpIF9nZXRBbGxDaGlsZHJlbihyb290LmxlZnQsIGFycik7XG4gICAgaWYgKHJvb3QucmlnaHQpIF9nZXRBbGxDaGlsZHJlbihyb290LnJpZ2h0LCBhcnIpO1xuICB9XG59O1xudmFyIF9idWlsZERlbmRyb2dyYW0gPSBmdW5jdGlvbiBidWlsZERlbmRyb2dyYW0ocm9vdCwgY3kpIHtcbiAgaWYgKCFyb290KSByZXR1cm4gJyc7XG4gIGlmIChyb290LmxlZnQgJiYgcm9vdC5yaWdodCkge1xuICAgIHZhciBsZWZ0U3RyID0gX2J1aWxkRGVuZHJvZ3JhbShyb290LmxlZnQsIGN5KTtcbiAgICB2YXIgcmlnaHRTdHIgPSBfYnVpbGREZW5kcm9ncmFtKHJvb3QucmlnaHQsIGN5KTtcbiAgICB2YXIgbm9kZSA9IGN5LmFkZCh7XG4gICAgICBncm91cDogJ25vZGVzJyxcbiAgICAgIGRhdGE6IHtcbiAgICAgICAgaWQ6IGxlZnRTdHIgKyAnLCcgKyByaWdodFN0clxuICAgICAgfVxuICAgIH0pO1xuICAgIGN5LmFkZCh7XG4gICAgICBncm91cDogJ2VkZ2VzJyxcbiAgICAgIGRhdGE6IHtcbiAgICAgICAgc291cmNlOiBsZWZ0U3RyLFxuICAgICAgICB0YXJnZXQ6IG5vZGUuaWQoKVxuICAgICAgfVxuICAgIH0pO1xuICAgIGN5LmFkZCh7XG4gICAgICBncm91cDogJ2VkZ2VzJyxcbiAgICAgIGRhdGE6IHtcbiAgICAgICAgc291cmNlOiByaWdodFN0cixcbiAgICAgICAgdGFyZ2V0OiBub2RlLmlkKClcbiAgICAgIH1cbiAgICB9KTtcbiAgICByZXR1cm4gbm9kZS5pZCgpO1xuICB9IGVsc2UgaWYgKHJvb3QudmFsdWUpIHtcbiAgICByZXR1cm4gcm9vdC52YWx1ZS5pZCgpO1xuICB9XG59O1xudmFyIF9idWlsZENsdXN0ZXJzRnJvbVRyZWUgPSBmdW5jdGlvbiBidWlsZENsdXN0ZXJzRnJvbVRyZWUocm9vdCwgaywgY3kpIHtcbiAgaWYgKCFyb290KSByZXR1cm4gW107XG4gIHZhciBsZWZ0ID0gW10sXG4gICAgcmlnaHQgPSBbXSxcbiAgICBsZWF2ZXMgPSBbXTtcbiAgaWYgKGsgPT09IDApIHtcbiAgICAvLyBkb24ndCBjdXQgdHJlZSwgc2ltcGx5IHJldHVybiBhbGwgbm9kZXMgYXMgMSBzaW5nbGUgY2x1c3RlclxuICAgIGlmIChyb290LmxlZnQpIF9nZXRBbGxDaGlsZHJlbihyb290LmxlZnQsIGxlZnQpO1xuICAgIGlmIChyb290LnJpZ2h0KSBfZ2V0QWxsQ2hpbGRyZW4ocm9vdC5yaWdodCwgcmlnaHQpO1xuICAgIGxlYXZlcyA9IGxlZnQuY29uY2F0KHJpZ2h0KTtcbiAgICByZXR1cm4gW2N5LmNvbGxlY3Rpb24obGVhdmVzKV07XG4gIH0gZWxzZSBpZiAoayA9PT0gMSkge1xuICAgIC8vIGN1dCBhdCByb290XG5cbiAgICBpZiAocm9vdC52YWx1ZSkge1xuICAgICAgLy8gbGVhZiBub2RlXG4gICAgICByZXR1cm4gW2N5LmNvbGxlY3Rpb24ocm9vdC52YWx1ZSldO1xuICAgIH0gZWxzZSB7XG4gICAgICBpZiAocm9vdC5sZWZ0KSBfZ2V0QWxsQ2hpbGRyZW4ocm9vdC5sZWZ0LCBsZWZ0KTtcbiAgICAgIGlmIChyb290LnJpZ2h0KSBfZ2V0QWxsQ2hpbGRyZW4ocm9vdC5yaWdodCwgcmlnaHQpO1xuICAgICAgcmV0dXJuIFtjeS5jb2xsZWN0aW9uKGxlZnQpLCBjeS5jb2xsZWN0aW9uKHJpZ2h0KV07XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIGlmIChyb290LnZhbHVlKSB7XG4gICAgICByZXR1cm4gW2N5LmNvbGxlY3Rpb24ocm9vdC52YWx1ZSldO1xuICAgIH0gZWxzZSB7XG4gICAgICBpZiAocm9vdC5sZWZ0KSBsZWZ0ID0gX2J1aWxkQ2x1c3RlcnNGcm9tVHJlZShyb290LmxlZnQsIGsgLSAxLCBjeSk7XG4gICAgICBpZiAocm9vdC5yaWdodCkgcmlnaHQgPSBfYnVpbGRDbHVzdGVyc0Zyb21UcmVlKHJvb3QucmlnaHQsIGsgLSAxLCBjeSk7XG4gICAgICByZXR1cm4gbGVmdC5jb25jYXQocmlnaHQpO1xuICAgIH1cbiAgfVxufTtcblxudmFyIGhpZXJhcmNoaWNhbENsdXN0ZXJpbmcgPSBmdW5jdGlvbiBoaWVyYXJjaGljYWxDbHVzdGVyaW5nKG9wdGlvbnMpIHtcbiAgdmFyIGN5ID0gdGhpcy5jeSgpO1xuICB2YXIgbm9kZXMgPSB0aGlzLm5vZGVzKCk7XG5cbiAgLy8gU2V0IHBhcmFtZXRlcnMgb2YgYWxnb3JpdGhtOiBsaW5rYWdlIHR5cGUsIGRpc3RhbmNlIG1ldHJpYywgZXRjLlxuICB2YXIgb3B0cyA9IHNldE9wdGlvbnMkMShvcHRpb25zKTtcbiAgdmFyIGF0dHJzID0gb3B0cy5hdHRyaWJ1dGVzO1xuICB2YXIgZ2V0RGlzdCA9IGZ1bmN0aW9uIGdldERpc3QobjEsIG4yKSB7XG4gICAgcmV0dXJuIGNsdXN0ZXJpbmdEaXN0YW5jZShvcHRzLmRpc3RhbmNlLCBhdHRycy5sZW5ndGgsIGZ1bmN0aW9uIChpKSB7XG4gICAgICByZXR1cm4gYXR0cnNbaV0objEpO1xuICAgIH0sIGZ1bmN0aW9uIChpKSB7XG4gICAgICByZXR1cm4gYXR0cnNbaV0objIpO1xuICAgIH0sIG4xLCBuMik7XG4gIH07XG5cbiAgLy8gQmVnaW4gaGllcmFyY2hpY2FsIGFsZ29yaXRobVxuICB2YXIgY2x1c3RlcnMgPSBbXTtcbiAgdmFyIGRpc3RzID0gW107IC8vIGRpc3RhbmNlcyBiZXR3ZWVuIGVhY2ggcGFpciBvZiBjbHVzdGVyc1xuICB2YXIgbWlucyA9IFtdOyAvLyBjbG9zZXN0IGNsdXN0ZXIgZm9yIGVhY2ggY2x1c3RlclxuICB2YXIgaW5kZXggPSBbXTsgLy8gaGFzaCBvZiBhbGwgY2x1c3RlcnMgYnkga2V5XG5cbiAgLy8gSW4gYWdnbG9tZXJhdGl2ZSAoYm90dG9tLXVwKSBjbHVzdGVyaW5nLCBlYWNoIG5vZGUgc3RhcnRzIGFzIGl0cyBvd24gY2x1c3RlclxuICBmb3IgKHZhciBuID0gMDsgbiA8IG5vZGVzLmxlbmd0aDsgbisrKSB7XG4gICAgdmFyIGNsdXN0ZXIgPSB7XG4gICAgICB2YWx1ZTogb3B0cy5tb2RlID09PSAnZGVuZHJvZ3JhbScgPyBub2Rlc1tuXSA6IFtub2Rlc1tuXV0sXG4gICAgICBrZXk6IG4sXG4gICAgICBpbmRleDogblxuICAgIH07XG4gICAgY2x1c3RlcnNbbl0gPSBjbHVzdGVyO1xuICAgIGluZGV4W25dID0gY2x1c3RlcjtcbiAgICBkaXN0c1tuXSA9IFtdO1xuICAgIG1pbnNbbl0gPSAwO1xuICB9XG5cbiAgLy8gQ2FsY3VsYXRlIHRoZSBkaXN0YW5jZSBiZXR3ZWVuIGVhY2ggcGFpciBvZiBjbHVzdGVyc1xuICBmb3IgKHZhciBpID0gMDsgaSA8IGNsdXN0ZXJzLmxlbmd0aDsgaSsrKSB7XG4gICAgZm9yICh2YXIgaiA9IDA7IGogPD0gaTsgaisrKSB7XG4gICAgICB2YXIgZGlzdCA9IHVuZGVmaW5lZDtcbiAgICAgIGlmIChvcHRzLm1vZGUgPT09ICdkZW5kcm9ncmFtJykge1xuICAgICAgICAvLyBtb2RlcyBzdG9yZSBjbHVzdGVyIHZhbHVlcyBkaWZmZXJlbnRseVxuICAgICAgICBkaXN0ID0gaSA9PT0gaiA/IEluZmluaXR5IDogZ2V0RGlzdChjbHVzdGVyc1tpXS52YWx1ZSwgY2x1c3RlcnNbal0udmFsdWUpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZGlzdCA9IGkgPT09IGogPyBJbmZpbml0eSA6IGdldERpc3QoY2x1c3RlcnNbaV0udmFsdWVbMF0sIGNsdXN0ZXJzW2pdLnZhbHVlWzBdKTtcbiAgICAgIH1cbiAgICAgIGRpc3RzW2ldW2pdID0gZGlzdDtcbiAgICAgIGRpc3RzW2pdW2ldID0gZGlzdDtcbiAgICAgIGlmIChkaXN0IDwgZGlzdHNbaV1bbWluc1tpXV0pIHtcbiAgICAgICAgbWluc1tpXSA9IGo7IC8vIENhY2hlIG1pbnM6IGNsb3Nlc3QgY2x1c3RlciB0byBjbHVzdGVyIGkgaXMgY2x1c3RlciBqXG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLy8gRmluZCB0aGUgY2xvc2VzdCBwYWlyIG9mIGNsdXN0ZXJzIGFuZCBtZXJnZSB0aGVtIGludG8gYSBzaW5nbGUgY2x1c3Rlci5cbiAgLy8gVXBkYXRlIGRpc3RhbmNlcyBiZXR3ZWVuIG5ldyBjbHVzdGVyIGFuZCBlYWNoIG9mIHRoZSBvbGQgY2x1c3RlcnMsIGFuZCBsb29wIHVudGlsIHRocmVzaG9sZCByZWFjaGVkLlxuICB2YXIgbWVyZ2VkID0gbWVyZ2VDbG9zZXN0KGNsdXN0ZXJzLCBpbmRleCwgZGlzdHMsIG1pbnMsIG9wdHMpO1xuICB3aGlsZSAobWVyZ2VkKSB7XG4gICAgbWVyZ2VkID0gbWVyZ2VDbG9zZXN0KGNsdXN0ZXJzLCBpbmRleCwgZGlzdHMsIG1pbnMsIG9wdHMpO1xuICB9XG4gIHZhciByZXRDbHVzdGVycztcblxuICAvLyBEZW5kcm9ncmFtIG1vZGUgYnVpbGRzIHRoZSBoaWVyYXJjaHkgYW5kIGFkZHMgaW50ZXJtZWRpYXJ5IG5vZGVzICsgZWRnZXNcbiAgLy8gaW4gYWRkaXRpb24gdG8gcmV0dXJuaW5nIHRoZSBjbHVzdGVycy5cbiAgaWYgKG9wdHMubW9kZSA9PT0gJ2RlbmRyb2dyYW0nKSB7XG4gICAgcmV0Q2x1c3RlcnMgPSBfYnVpbGRDbHVzdGVyc0Zyb21UcmVlKGNsdXN0ZXJzWzBdLCBvcHRzLmRlbmRyb2dyYW1EZXB0aCwgY3kpO1xuICAgIGlmIChvcHRzLmFkZERlbmRyb2dyYW0pIF9idWlsZERlbmRyb2dyYW0oY2x1c3RlcnNbMF0sIGN5KTtcbiAgfSBlbHNlIHtcbiAgICAvLyBSZWd1bGFyIG1vZGUgc2ltcGx5IHJldHVybnMgdGhlIGNsdXN0ZXJzXG5cbiAgICByZXRDbHVzdGVycyA9IG5ldyBBcnJheShjbHVzdGVycy5sZW5ndGgpO1xuICAgIGNsdXN0ZXJzLmZvckVhY2goZnVuY3Rpb24gKGNsdXN0ZXIsIGkpIHtcbiAgICAgIC8vIENsZWFuIHVwIG1ldGEgZGF0YSB1c2VkIGZvciBjbHVzdGVyaW5nXG4gICAgICBjbHVzdGVyLmtleSA9IGNsdXN0ZXIuaW5kZXggPSBudWxsO1xuICAgICAgcmV0Q2x1c3RlcnNbaV0gPSBjeS5jb2xsZWN0aW9uKGNsdXN0ZXIudmFsdWUpO1xuICAgIH0pO1xuICB9XG4gIHJldHVybiByZXRDbHVzdGVycztcbn07XG52YXIgaGllcmFyY2hpY2FsQ2x1c3RlcmluZyQxID0ge1xuICBoaWVyYXJjaGljYWxDbHVzdGVyaW5nOiBoaWVyYXJjaGljYWxDbHVzdGVyaW5nLFxuICBoY2E6IGhpZXJhcmNoaWNhbENsdXN0ZXJpbmdcbn07XG5cbi8vIEltcGxlbWVudGVkIGJ5IFpvZSBYaSBAem9leGkgZm9yIEdTT0MgMjAxNlxuLy8gaHR0cHM6Ly9naXRodWIuY29tL2N5dG9zY2FwZS9jeXRvc2NhcGUuanMtYWZmaW5pdHktcHJvcGFnYXRpb25cblxudmFyIGRlZmF1bHRzJDkgPSBkZWZhdWx0cyRnKHtcbiAgZGlzdGFuY2U6ICdldWNsaWRlYW4nLFxuICAvLyBkaXN0YW5jZSBtZXRyaWMgdG8gY29tcGFyZSBhdHRyaWJ1dGVzIGJldHdlZW4gdHdvIG5vZGVzXG4gIHByZWZlcmVuY2U6ICdtZWRpYW4nLFxuICAvLyBzdWl0YWJpbGl0eSBvZiBhIGRhdGEgcG9pbnQgdG8gc2VydmUgYXMgYW4gZXhlbXBsYXJcbiAgZGFtcGluZzogMC44LFxuICAvLyBkYW1waW5nIGZhY3RvciBiZXR3ZWVuIFswLjUsIDEpXG4gIG1heEl0ZXJhdGlvbnM6IDEwMDAsXG4gIC8vIG1heCBudW1iZXIgb2YgaXRlcmF0aW9ucyB0byBydW5cbiAgbWluSXRlcmF0aW9uczogMTAwLFxuICAvLyBtaW4gbnVtYmVyIG9mIGl0ZXJhdGlvbnMgdG8gcnVuIGluIG9yZGVyIGZvciBjbHVzdGVyaW5nIHRvIHN0b3BcbiAgYXR0cmlidXRlczogWy8vIGZ1bmN0aW9ucyB0byBxdWFudGlmeSB0aGUgc2ltaWxhcml0eSBiZXR3ZWVuIGFueSB0d28gcG9pbnRzXG4gICAgLy8gZS5nLiBub2RlID0+IG5vZGUuZGF0YSgnd2VpZ2h0JylcbiAgXVxufSk7XG52YXIgc2V0T3B0aW9ucyA9IGZ1bmN0aW9uIHNldE9wdGlvbnMob3B0aW9ucykge1xuICB2YXIgZG1wID0gb3B0aW9ucy5kYW1waW5nO1xuICB2YXIgcHJlZiA9IG9wdGlvbnMucHJlZmVyZW5jZTtcbiAgaWYgKCEoMC41IDw9IGRtcCAmJiBkbXAgPCAxKSkge1xuICAgIGVycm9yKFwiRGFtcGluZyBtdXN0IHJhbmdlIG9uIFswLjUsIDEpLiAgR290OiBcIi5jb25jYXQoZG1wKSk7XG4gIH1cbiAgdmFyIHZhbGlkUHJlZnMgPSBbJ21lZGlhbicsICdtZWFuJywgJ21pbicsICdtYXgnXTtcbiAgaWYgKCEodmFsaWRQcmVmcy5zb21lKGZ1bmN0aW9uICh2KSB7XG4gICAgcmV0dXJuIHYgPT09IHByZWY7XG4gIH0pIHx8IG51bWJlciQxKHByZWYpKSkge1xuICAgIGVycm9yKFwiUHJlZmVyZW5jZSBtdXN0IGJlIG9uZSBvZiBbXCIuY29uY2F0KHZhbGlkUHJlZnMubWFwKGZ1bmN0aW9uIChwKSB7XG4gICAgICByZXR1cm4gXCInXCIuY29uY2F0KHAsIFwiJ1wiKTtcbiAgICB9KS5qb2luKCcsICcpLCBcIl0gb3IgYSBudW1iZXIuICBHb3Q6IFwiKS5jb25jYXQocHJlZikpO1xuICB9XG4gIHJldHVybiBkZWZhdWx0cyQ5KG9wdGlvbnMpO1xufTtcblxudmFyIGdldFNpbWlsYXJpdHkgPSBmdW5jdGlvbiBnZXRTaW1pbGFyaXR5KHR5cGUsIG4xLCBuMiwgYXR0cmlidXRlcykge1xuICB2YXIgYXR0ciA9IGZ1bmN0aW9uIGF0dHIobiwgaSkge1xuICAgIHJldHVybiBhdHRyaWJ1dGVzW2ldKG4pO1xuICB9O1xuXG4gIC8vIG5iIG5lZ2F0aXZlIGJlY2F1c2Ugc2ltaWxhcml0eSBzaG91bGQgaGF2ZSBhbiBpbnZlcnNlIHJlbGF0aW9uc2hpcCB0byBkaXN0YW5jZVxuICByZXR1cm4gLWNsdXN0ZXJpbmdEaXN0YW5jZSh0eXBlLCBhdHRyaWJ1dGVzLmxlbmd0aCwgZnVuY3Rpb24gKGkpIHtcbiAgICByZXR1cm4gYXR0cihuMSwgaSk7XG4gIH0sIGZ1bmN0aW9uIChpKSB7XG4gICAgcmV0dXJuIGF0dHIobjIsIGkpO1xuICB9LCBuMSwgbjIpO1xufTtcbnZhciBnZXRQcmVmZXJlbmNlID0gZnVuY3Rpb24gZ2V0UHJlZmVyZW5jZShTLCBwcmVmZXJlbmNlKSB7XG4gIC8vIGxhcmdlciBwcmVmZXJlbmNlID0gZ3JlYXRlciAjIG9mIGNsdXN0ZXJzXG4gIHZhciBwID0gbnVsbDtcbiAgaWYgKHByZWZlcmVuY2UgPT09ICdtZWRpYW4nKSB7XG4gICAgcCA9IG1lZGlhbihTKTtcbiAgfSBlbHNlIGlmIChwcmVmZXJlbmNlID09PSAnbWVhbicpIHtcbiAgICBwID0gbWVhbihTKTtcbiAgfSBlbHNlIGlmIChwcmVmZXJlbmNlID09PSAnbWluJykge1xuICAgIHAgPSBtaW4oUyk7XG4gIH0gZWxzZSBpZiAocHJlZmVyZW5jZSA9PT0gJ21heCcpIHtcbiAgICBwID0gbWF4KFMpO1xuICB9IGVsc2Uge1xuICAgIC8vIEN1c3RvbSBwcmVmZXJlbmNlIG51bWJlciwgYXMgc2V0IGJ5IHVzZXJcbiAgICBwID0gcHJlZmVyZW5jZTtcbiAgfVxuICByZXR1cm4gcDtcbn07XG52YXIgZmluZEV4ZW1wbGFycyA9IGZ1bmN0aW9uIGZpbmRFeGVtcGxhcnMobiwgUiwgQSkge1xuICB2YXIgaW5kaWNlcyA9IFtdO1xuICBmb3IgKHZhciBpID0gMDsgaSA8IG47IGkrKykge1xuICAgIGlmIChSW2kgKiBuICsgaV0gKyBBW2kgKiBuICsgaV0gPiAwKSB7XG4gICAgICBpbmRpY2VzLnB1c2goaSk7XG4gICAgfVxuICB9XG4gIHJldHVybiBpbmRpY2VzO1xufTtcbnZhciBhc3NpZ25DbHVzdGVycyA9IGZ1bmN0aW9uIGFzc2lnbkNsdXN0ZXJzKG4sIFMsIGV4ZW1wbGFycykge1xuICB2YXIgY2x1c3RlcnMgPSBbXTtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBuOyBpKyspIHtcbiAgICB2YXIgaW5kZXggPSAtMTtcbiAgICB2YXIgbWF4ID0gLUluZmluaXR5O1xuICAgIGZvciAodmFyIGVpID0gMDsgZWkgPCBleGVtcGxhcnMubGVuZ3RoOyBlaSsrKSB7XG4gICAgICB2YXIgZSA9IGV4ZW1wbGFyc1tlaV07XG4gICAgICBpZiAoU1tpICogbiArIGVdID4gbWF4KSB7XG4gICAgICAgIGluZGV4ID0gZTtcbiAgICAgICAgbWF4ID0gU1tpICogbiArIGVdO1xuICAgICAgfVxuICAgIH1cbiAgICBpZiAoaW5kZXggPiAwKSB7XG4gICAgICBjbHVzdGVycy5wdXNoKGluZGV4KTtcbiAgICB9XG4gIH1cbiAgZm9yICh2YXIgX2VpID0gMDsgX2VpIDwgZXhlbXBsYXJzLmxlbmd0aDsgX2VpKyspIHtcbiAgICBjbHVzdGVyc1tleGVtcGxhcnNbX2VpXV0gPSBleGVtcGxhcnNbX2VpXTtcbiAgfVxuICByZXR1cm4gY2x1c3RlcnM7XG59O1xudmFyIGFzc2lnbiA9IGZ1bmN0aW9uIGFzc2lnbihuLCBTLCBleGVtcGxhcnMpIHtcbiAgdmFyIGNsdXN0ZXJzID0gYXNzaWduQ2x1c3RlcnMobiwgUywgZXhlbXBsYXJzKTtcbiAgZm9yICh2YXIgZWkgPSAwOyBlaSA8IGV4ZW1wbGFycy5sZW5ndGg7IGVpKyspIHtcbiAgICB2YXIgaWkgPSBbXTtcbiAgICBmb3IgKHZhciBjID0gMDsgYyA8IGNsdXN0ZXJzLmxlbmd0aDsgYysrKSB7XG4gICAgICBpZiAoY2x1c3RlcnNbY10gPT09IGV4ZW1wbGFyc1tlaV0pIHtcbiAgICAgICAgaWkucHVzaChjKTtcbiAgICAgIH1cbiAgICB9XG4gICAgdmFyIG1heEkgPSAtMTtcbiAgICB2YXIgbWF4U3VtID0gLUluZmluaXR5O1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgaWkubGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciBzdW0gPSAwO1xuICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCBpaS5sZW5ndGg7IGorKykge1xuICAgICAgICBzdW0gKz0gU1tpaVtqXSAqIG4gKyBpaVtpXV07XG4gICAgICB9XG4gICAgICBpZiAoc3VtID4gbWF4U3VtKSB7XG4gICAgICAgIG1heEkgPSBpO1xuICAgICAgICBtYXhTdW0gPSBzdW07XG4gICAgICB9XG4gICAgfVxuICAgIGV4ZW1wbGFyc1tlaV0gPSBpaVttYXhJXTtcbiAgfVxuICBjbHVzdGVycyA9IGFzc2lnbkNsdXN0ZXJzKG4sIFMsIGV4ZW1wbGFycyk7XG4gIHJldHVybiBjbHVzdGVycztcbn07XG52YXIgYWZmaW5pdHlQcm9wYWdhdGlvbiA9IGZ1bmN0aW9uIGFmZmluaXR5UHJvcGFnYXRpb24ob3B0aW9ucykge1xuICB2YXIgY3kgPSB0aGlzLmN5KCk7XG4gIHZhciBub2RlcyA9IHRoaXMubm9kZXMoKTtcbiAgdmFyIG9wdHMgPSBzZXRPcHRpb25zKG9wdGlvbnMpO1xuXG4gIC8vIE1hcCBlYWNoIG5vZGUgdG8gaXRzIHBvc2l0aW9uIGluIG5vZGUgYXJyYXlcbiAgdmFyIGlkMnBvc2l0aW9uID0ge307XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgbm9kZXMubGVuZ3RoOyBpKyspIHtcbiAgICBpZDJwb3NpdGlvbltub2Rlc1tpXS5pZCgpXSA9IGk7XG4gIH1cblxuICAvLyBCZWdpbiBhZmZpbml0eSBwcm9wYWdhdGlvbiBhbGdvcml0aG1cblxuICB2YXIgbjsgLy8gbnVtYmVyIG9mIGRhdGEgcG9pbnRzXG4gIHZhciBuMjsgLy8gc2l6ZSBvZiBtYXRyaWNlc1xuICB2YXIgUzsgLy8gc2ltaWxhcml0eSBtYXRyaXggKDFEIGFycmF5KVxuICB2YXIgcDsgLy8gcHJlZmVyZW5jZS9zdWl0YWJpbGl0eSBvZiBhIGRhdGEgcG9pbnQgdG8gc2VydmUgYXMgYW4gZXhlbXBsYXJcbiAgdmFyIFI7IC8vIHJlc3BvbnNpYmlsaXR5IG1hdHJpeCAoMUQgYXJyYXkpXG4gIHZhciBBOyAvLyBhdmFpbGFiaWxpdHkgbWF0cml4ICgxRCBhcnJheSlcblxuICBuID0gbm9kZXMubGVuZ3RoO1xuICBuMiA9IG4gKiBuO1xuXG4gIC8vIEluaXRpYWxpemUgYW5kIGJ1aWxkIFMgc2ltaWxhcml0eSBtYXRyaXhcbiAgUyA9IG5ldyBBcnJheShuMik7XG4gIGZvciAodmFyIF9pID0gMDsgX2kgPCBuMjsgX2krKykge1xuICAgIFNbX2ldID0gLUluZmluaXR5OyAvLyBmb3IgY2FzZXMgd2hlcmUgdHdvIGRhdGEgcG9pbnRzIHNob3VsZG4ndCBiZSBsaW5rZWQgdG9nZXRoZXJcbiAgfVxuICBmb3IgKHZhciBfaTIgPSAwOyBfaTIgPCBuOyBfaTIrKykge1xuICAgIGZvciAodmFyIGogPSAwOyBqIDwgbjsgaisrKSB7XG4gICAgICBpZiAoX2kyICE9PSBqKSB7XG4gICAgICAgIFNbX2kyICogbiArIGpdID0gZ2V0U2ltaWxhcml0eShvcHRzLmRpc3RhbmNlLCBub2Rlc1tfaTJdLCBub2Rlc1tqXSwgb3B0cy5hdHRyaWJ1dGVzKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvLyBQbGFjZSBwcmVmZXJlbmNlcyBvbiB0aGUgZGlhZ29uYWwgb2YgU1xuICBwID0gZ2V0UHJlZmVyZW5jZShTLCBvcHRzLnByZWZlcmVuY2UpO1xuICBmb3IgKHZhciBfaTMgPSAwOyBfaTMgPCBuOyBfaTMrKykge1xuICAgIFNbX2kzICogbiArIF9pM10gPSBwO1xuICB9XG5cbiAgLy8gSW5pdGlhbGl6ZSBSIHJlc3BvbnNpYmlsaXR5IG1hdHJpeFxuICBSID0gbmV3IEFycmF5KG4yKTtcbiAgZm9yICh2YXIgX2k0ID0gMDsgX2k0IDwgbjI7IF9pNCsrKSB7XG4gICAgUltfaTRdID0gMC4wO1xuICB9XG5cbiAgLy8gSW5pdGlhbGl6ZSBBIGF2YWlsYWJpbGl0eSBtYXRyaXhcbiAgQSA9IG5ldyBBcnJheShuMik7XG4gIGZvciAodmFyIF9pNSA9IDA7IF9pNSA8IG4yOyBfaTUrKykge1xuICAgIEFbX2k1XSA9IDAuMDtcbiAgfVxuICB2YXIgb2xkID0gbmV3IEFycmF5KG4pO1xuICB2YXIgUnAgPSBuZXcgQXJyYXkobik7XG4gIHZhciBzZSA9IG5ldyBBcnJheShuKTtcbiAgZm9yICh2YXIgX2k2ID0gMDsgX2k2IDwgbjsgX2k2KyspIHtcbiAgICBvbGRbX2k2XSA9IDAuMDtcbiAgICBScFtfaTZdID0gMC4wO1xuICAgIHNlW19pNl0gPSAwO1xuICB9XG4gIHZhciBlID0gbmV3IEFycmF5KG4gKiBvcHRzLm1pbkl0ZXJhdGlvbnMpO1xuICBmb3IgKHZhciBfaTcgPSAwOyBfaTcgPCBlLmxlbmd0aDsgX2k3KyspIHtcbiAgICBlW19pN10gPSAwO1xuICB9XG4gIHZhciBpdGVyO1xuICBmb3IgKGl0ZXIgPSAwOyBpdGVyIDwgb3B0cy5tYXhJdGVyYXRpb25zOyBpdGVyKyspIHtcbiAgICAvLyBtYWluIGFsZ29yaXRobWljIGxvb3BcblxuICAgIC8vIFVwZGF0ZSBSIHJlc3BvbnNpYmlsaXR5IG1hdHJpeFxuICAgIGZvciAodmFyIF9pOCA9IDA7IF9pOCA8IG47IF9pOCsrKSB7XG4gICAgICB2YXIgbWF4ID0gLUluZmluaXR5LFxuICAgICAgICBtYXgyID0gLUluZmluaXR5LFxuICAgICAgICBtYXhJID0gLTEsXG4gICAgICAgIEFTID0gMC4wO1xuICAgICAgZm9yICh2YXIgX2ogPSAwOyBfaiA8IG47IF9qKyspIHtcbiAgICAgICAgb2xkW19qXSA9IFJbX2k4ICogbiArIF9qXTtcbiAgICAgICAgQVMgPSBBW19pOCAqIG4gKyBfal0gKyBTW19pOCAqIG4gKyBfal07XG4gICAgICAgIGlmIChBUyA+PSBtYXgpIHtcbiAgICAgICAgICBtYXgyID0gbWF4O1xuICAgICAgICAgIG1heCA9IEFTO1xuICAgICAgICAgIG1heEkgPSBfajtcbiAgICAgICAgfSBlbHNlIGlmIChBUyA+IG1heDIpIHtcbiAgICAgICAgICBtYXgyID0gQVM7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGZvciAodmFyIF9qMiA9IDA7IF9qMiA8IG47IF9qMisrKSB7XG4gICAgICAgIFJbX2k4ICogbiArIF9qMl0gPSAoMSAtIG9wdHMuZGFtcGluZykgKiAoU1tfaTggKiBuICsgX2oyXSAtIG1heCkgKyBvcHRzLmRhbXBpbmcgKiBvbGRbX2oyXTtcbiAgICAgIH1cbiAgICAgIFJbX2k4ICogbiArIG1heEldID0gKDEgLSBvcHRzLmRhbXBpbmcpICogKFNbX2k4ICogbiArIG1heEldIC0gbWF4MikgKyBvcHRzLmRhbXBpbmcgKiBvbGRbbWF4SV07XG4gICAgfVxuXG4gICAgLy8gVXBkYXRlIEEgYXZhaWxhYmlsaXR5IG1hdHJpeFxuICAgIGZvciAodmFyIF9pOSA9IDA7IF9pOSA8IG47IF9pOSsrKSB7XG4gICAgICB2YXIgc3VtID0gMDtcbiAgICAgIGZvciAodmFyIF9qMyA9IDA7IF9qMyA8IG47IF9qMysrKSB7XG4gICAgICAgIG9sZFtfajNdID0gQVtfajMgKiBuICsgX2k5XTtcbiAgICAgICAgUnBbX2ozXSA9IE1hdGgubWF4KDAsIFJbX2ozICogbiArIF9pOV0pO1xuICAgICAgICBzdW0gKz0gUnBbX2ozXTtcbiAgICAgIH1cbiAgICAgIHN1bSAtPSBScFtfaTldO1xuICAgICAgUnBbX2k5XSA9IFJbX2k5ICogbiArIF9pOV07XG4gICAgICBzdW0gKz0gUnBbX2k5XTtcbiAgICAgIGZvciAodmFyIF9qNCA9IDA7IF9qNCA8IG47IF9qNCsrKSB7XG4gICAgICAgIEFbX2o0ICogbiArIF9pOV0gPSAoMSAtIG9wdHMuZGFtcGluZykgKiBNYXRoLm1pbigwLCBzdW0gLSBScFtfajRdKSArIG9wdHMuZGFtcGluZyAqIG9sZFtfajRdO1xuICAgICAgfVxuICAgICAgQVtfaTkgKiBuICsgX2k5XSA9ICgxIC0gb3B0cy5kYW1waW5nKSAqIChzdW0gLSBScFtfaTldKSArIG9wdHMuZGFtcGluZyAqIG9sZFtfaTldO1xuICAgIH1cblxuICAgIC8vIENoZWNrIGZvciBjb252ZXJnZW5jZVxuICAgIHZhciBLID0gMDtcbiAgICBmb3IgKHZhciBfaTEwID0gMDsgX2kxMCA8IG47IF9pMTArKykge1xuICAgICAgdmFyIEUgPSBBW19pMTAgKiBuICsgX2kxMF0gKyBSW19pMTAgKiBuICsgX2kxMF0gPiAwID8gMSA6IDA7XG4gICAgICBlW2l0ZXIgJSBvcHRzLm1pbkl0ZXJhdGlvbnMgKiBuICsgX2kxMF0gPSBFO1xuICAgICAgSyArPSBFO1xuICAgIH1cbiAgICBpZiAoSyA+IDAgJiYgKGl0ZXIgPj0gb3B0cy5taW5JdGVyYXRpb25zIC0gMSB8fCBpdGVyID09IG9wdHMubWF4SXRlcmF0aW9ucyAtIDEpKSB7XG4gICAgICB2YXIgX3N1bSA9IDA7XG4gICAgICBmb3IgKHZhciBfaTExID0gMDsgX2kxMSA8IG47IF9pMTErKykge1xuICAgICAgICBzZVtfaTExXSA9IDA7XG4gICAgICAgIGZvciAodmFyIF9qNSA9IDA7IF9qNSA8IG9wdHMubWluSXRlcmF0aW9uczsgX2o1KyspIHtcbiAgICAgICAgICBzZVtfaTExXSArPSBlW19qNSAqIG4gKyBfaTExXTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoc2VbX2kxMV0gPT09IDAgfHwgc2VbX2kxMV0gPT09IG9wdHMubWluSXRlcmF0aW9ucykge1xuICAgICAgICAgIF9zdW0rKztcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYgKF9zdW0gPT09IG4pIHtcbiAgICAgICAgLy8gdGhlbiB3ZSBoYXZlIGNvbnZlcmdlbmNlXG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8vIElkZW50aWZ5IGV4ZW1wbGFycyAoY2x1c3RlciBjZW50ZXJzKVxuICB2YXIgZXhlbXBsYXJzSW5kaWNlcyA9IGZpbmRFeGVtcGxhcnMobiwgUiwgQSk7XG5cbiAgLy8gQXNzaWduIG5vZGVzIHRvIGNsdXN0ZXJzXG4gIHZhciBjbHVzdGVySW5kaWNlcyA9IGFzc2lnbihuLCBTLCBleGVtcGxhcnNJbmRpY2VzKTtcbiAgdmFyIGNsdXN0ZXJzID0ge307XG4gIGZvciAodmFyIGMgPSAwOyBjIDwgZXhlbXBsYXJzSW5kaWNlcy5sZW5ndGg7IGMrKykge1xuICAgIGNsdXN0ZXJzW2V4ZW1wbGFyc0luZGljZXNbY11dID0gW107XG4gIH1cbiAgZm9yICh2YXIgX2kxMiA9IDA7IF9pMTIgPCBub2Rlcy5sZW5ndGg7IF9pMTIrKykge1xuICAgIHZhciBwb3MgPSBpZDJwb3NpdGlvbltub2Rlc1tfaTEyXS5pZCgpXTtcbiAgICB2YXIgY2x1c3RlckluZGV4ID0gY2x1c3RlckluZGljZXNbcG9zXTtcbiAgICBpZiAoY2x1c3RlckluZGV4ICE9IG51bGwpIHtcbiAgICAgIC8vIHRoZSBub2RlIG1heSBoYXZlIG5vdCBiZWVuIGFzc2lnbmVkIGEgY2x1c3RlciBpZiBubyB2YWxpZCBhdHRyaWJ1dGVzIHdlcmUgc3BlY2lmaWVkXG4gICAgICBjbHVzdGVyc1tjbHVzdGVySW5kZXhdLnB1c2gobm9kZXNbX2kxMl0pO1xuICAgIH1cbiAgfVxuICB2YXIgcmV0Q2x1c3RlcnMgPSBuZXcgQXJyYXkoZXhlbXBsYXJzSW5kaWNlcy5sZW5ndGgpO1xuICBmb3IgKHZhciBfYyA9IDA7IF9jIDwgZXhlbXBsYXJzSW5kaWNlcy5sZW5ndGg7IF9jKyspIHtcbiAgICByZXRDbHVzdGVyc1tfY10gPSBjeS5jb2xsZWN0aW9uKGNsdXN0ZXJzW2V4ZW1wbGFyc0luZGljZXNbX2NdXSk7XG4gIH1cbiAgcmV0dXJuIHJldENsdXN0ZXJzO1xufTtcbnZhciBhZmZpbml0eVByb3BhZ2F0aW9uJDEgPSB7XG4gIGFmZmluaXR5UHJvcGFnYXRpb246IGFmZmluaXR5UHJvcGFnYXRpb24sXG4gIGFwOiBhZmZpbml0eVByb3BhZ2F0aW9uXG59O1xuXG52YXIgaGllcmhvbHplckRlZmF1bHRzID0gZGVmYXVsdHMkZyh7XG4gIHJvb3Q6IHVuZGVmaW5lZCxcbiAgZGlyZWN0ZWQ6IGZhbHNlXG59KTtcbnZhciBlbGVzZm4kayA9IHtcbiAgaGllcmhvbHplcjogZnVuY3Rpb24gaGllcmhvbHplcihvcHRpb25zKSB7XG4gICAgaWYgKCFwbGFpbk9iamVjdChvcHRpb25zKSkge1xuICAgICAgdmFyIGFyZ3MgPSBhcmd1bWVudHM7XG4gICAgICBvcHRpb25zID0ge1xuICAgICAgICByb290OiBhcmdzWzBdLFxuICAgICAgICBkaXJlY3RlZDogYXJnc1sxXVxuICAgICAgfTtcbiAgICB9XG4gICAgdmFyIF9oaWVyaG9semVyRGVmYXVsdHMgPSBoaWVyaG9semVyRGVmYXVsdHMob3B0aW9ucyksXG4gICAgICByb290ID0gX2hpZXJob2x6ZXJEZWZhdWx0cy5yb290LFxuICAgICAgZGlyZWN0ZWQgPSBfaGllcmhvbHplckRlZmF1bHRzLmRpcmVjdGVkO1xuICAgIHZhciBlbGVzID0gdGhpcztcbiAgICB2YXIgZGZsYWcgPSBmYWxzZTtcbiAgICB2YXIgb2RkSW47XG4gICAgdmFyIG9kZE91dDtcbiAgICB2YXIgc3RhcnRWZXJ0ZXg7XG4gICAgaWYgKHJvb3QpIHN0YXJ0VmVydGV4ID0gc3RyaW5nKHJvb3QpID8gdGhpcy5maWx0ZXIocm9vdClbMF0uaWQoKSA6IHJvb3RbMF0uaWQoKTtcbiAgICB2YXIgbm9kZXMgPSB7fTtcbiAgICB2YXIgZWRnZXMgPSB7fTtcbiAgICBpZiAoZGlyZWN0ZWQpIHtcbiAgICAgIGVsZXMuZm9yRWFjaChmdW5jdGlvbiAoZWxlKSB7XG4gICAgICAgIHZhciBpZCA9IGVsZS5pZCgpO1xuICAgICAgICBpZiAoZWxlLmlzTm9kZSgpKSB7XG4gICAgICAgICAgdmFyIGluZCA9IGVsZS5pbmRlZ3JlZSh0cnVlKTtcbiAgICAgICAgICB2YXIgb3V0ZCA9IGVsZS5vdXRkZWdyZWUodHJ1ZSk7XG4gICAgICAgICAgdmFyIGQxID0gaW5kIC0gb3V0ZDtcbiAgICAgICAgICB2YXIgZDIgPSBvdXRkIC0gaW5kO1xuICAgICAgICAgIGlmIChkMSA9PSAxKSB7XG4gICAgICAgICAgICBpZiAob2RkSW4pIGRmbGFnID0gdHJ1ZTtlbHNlIG9kZEluID0gaWQ7XG4gICAgICAgICAgfSBlbHNlIGlmIChkMiA9PSAxKSB7XG4gICAgICAgICAgICBpZiAob2RkT3V0KSBkZmxhZyA9IHRydWU7ZWxzZSBvZGRPdXQgPSBpZDtcbiAgICAgICAgICB9IGVsc2UgaWYgKGQyID4gMSB8fCBkMSA+IDEpIHtcbiAgICAgICAgICAgIGRmbGFnID0gdHJ1ZTtcbiAgICAgICAgICB9XG4gICAgICAgICAgbm9kZXNbaWRdID0gW107XG4gICAgICAgICAgZWxlLm91dGdvZXJzKCkuZm9yRWFjaChmdW5jdGlvbiAoZSkge1xuICAgICAgICAgICAgaWYgKGUuaXNFZGdlKCkpIG5vZGVzW2lkXS5wdXNoKGUuaWQoKSk7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgZWRnZXNbaWRdID0gW3VuZGVmaW5lZCwgZWxlLnRhcmdldCgpLmlkKCldO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgZWxlcy5mb3JFYWNoKGZ1bmN0aW9uIChlbGUpIHtcbiAgICAgICAgdmFyIGlkID0gZWxlLmlkKCk7XG4gICAgICAgIGlmIChlbGUuaXNOb2RlKCkpIHtcbiAgICAgICAgICB2YXIgZCA9IGVsZS5kZWdyZWUodHJ1ZSk7XG4gICAgICAgICAgaWYgKGQgJSAyKSB7XG4gICAgICAgICAgICBpZiAoIW9kZEluKSBvZGRJbiA9IGlkO2Vsc2UgaWYgKCFvZGRPdXQpIG9kZE91dCA9IGlkO2Vsc2UgZGZsYWcgPSB0cnVlO1xuICAgICAgICAgIH1cbiAgICAgICAgICBub2Rlc1tpZF0gPSBbXTtcbiAgICAgICAgICBlbGUuY29ubmVjdGVkRWRnZXMoKS5mb3JFYWNoKGZ1bmN0aW9uIChlKSB7XG4gICAgICAgICAgICByZXR1cm4gbm9kZXNbaWRdLnB1c2goZS5pZCgpKTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBlZGdlc1tpZF0gPSBbZWxlLnNvdXJjZSgpLmlkKCksIGVsZS50YXJnZXQoKS5pZCgpXTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuICAgIHZhciByZXN1bHQgPSB7XG4gICAgICBmb3VuZDogZmFsc2UsXG4gICAgICB0cmFpbDogdW5kZWZpbmVkXG4gICAgfTtcbiAgICBpZiAoZGZsYWcpIHJldHVybiByZXN1bHQ7ZWxzZSBpZiAob2RkT3V0ICYmIG9kZEluKSB7XG4gICAgICBpZiAoZGlyZWN0ZWQpIHtcbiAgICAgICAgaWYgKHN0YXJ0VmVydGV4ICYmIG9kZE91dCAhPSBzdGFydFZlcnRleCkge1xuICAgICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgICAgIH1cbiAgICAgICAgc3RhcnRWZXJ0ZXggPSBvZGRPdXQ7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpZiAoc3RhcnRWZXJ0ZXggJiYgb2RkT3V0ICE9IHN0YXJ0VmVydGV4ICYmIG9kZEluICE9IHN0YXJ0VmVydGV4KSB7XG4gICAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICAgICAgfSBlbHNlIGlmICghc3RhcnRWZXJ0ZXgpIHtcbiAgICAgICAgICBzdGFydFZlcnRleCA9IG9kZE91dDtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBpZiAoIXN0YXJ0VmVydGV4KSBzdGFydFZlcnRleCA9IGVsZXNbMF0uaWQoKTtcbiAgICB9XG4gICAgdmFyIHdhbGsgPSBmdW5jdGlvbiB3YWxrKHYpIHtcbiAgICAgIHZhciBjdXJyZW50Tm9kZSA9IHY7XG4gICAgICB2YXIgc3VidG91ciA9IFt2XTtcbiAgICAgIHZhciBhZGosIGFkalRhaWwsIGFkakhlYWQ7XG4gICAgICB3aGlsZSAobm9kZXNbY3VycmVudE5vZGVdLmxlbmd0aCkge1xuICAgICAgICBhZGogPSBub2Rlc1tjdXJyZW50Tm9kZV0uc2hpZnQoKTtcbiAgICAgICAgYWRqVGFpbCA9IGVkZ2VzW2Fkal1bMF07XG4gICAgICAgIGFkakhlYWQgPSBlZGdlc1thZGpdWzFdO1xuICAgICAgICBpZiAoY3VycmVudE5vZGUgIT0gYWRqSGVhZCkge1xuICAgICAgICAgIG5vZGVzW2FkakhlYWRdID0gbm9kZXNbYWRqSGVhZF0uZmlsdGVyKGZ1bmN0aW9uIChlKSB7XG4gICAgICAgICAgICByZXR1cm4gZSAhPSBhZGo7XG4gICAgICAgICAgfSk7XG4gICAgICAgICAgY3VycmVudE5vZGUgPSBhZGpIZWFkO1xuICAgICAgICB9IGVsc2UgaWYgKCFkaXJlY3RlZCAmJiBjdXJyZW50Tm9kZSAhPSBhZGpUYWlsKSB7XG4gICAgICAgICAgbm9kZXNbYWRqVGFpbF0gPSBub2Rlc1thZGpUYWlsXS5maWx0ZXIoZnVuY3Rpb24gKGUpIHtcbiAgICAgICAgICAgIHJldHVybiBlICE9IGFkajtcbiAgICAgICAgICB9KTtcbiAgICAgICAgICBjdXJyZW50Tm9kZSA9IGFkalRhaWw7XG4gICAgICAgIH1cbiAgICAgICAgc3VidG91ci51bnNoaWZ0KGFkaik7XG4gICAgICAgIHN1YnRvdXIudW5zaGlmdChjdXJyZW50Tm9kZSk7XG4gICAgICB9XG4gICAgICByZXR1cm4gc3VidG91cjtcbiAgICB9O1xuICAgIHZhciB0cmFpbCA9IFtdO1xuICAgIHZhciBzdWJ0b3VyID0gW107XG4gICAgc3VidG91ciA9IHdhbGsoc3RhcnRWZXJ0ZXgpO1xuICAgIHdoaWxlIChzdWJ0b3VyLmxlbmd0aCAhPSAxKSB7XG4gICAgICBpZiAobm9kZXNbc3VidG91clswXV0ubGVuZ3RoID09IDApIHtcbiAgICAgICAgdHJhaWwudW5zaGlmdChlbGVzLmdldEVsZW1lbnRCeUlkKHN1YnRvdXIuc2hpZnQoKSkpO1xuICAgICAgICB0cmFpbC51bnNoaWZ0KGVsZXMuZ2V0RWxlbWVudEJ5SWQoc3VidG91ci5zaGlmdCgpKSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBzdWJ0b3VyID0gd2FsayhzdWJ0b3VyLnNoaWZ0KCkpLmNvbmNhdChzdWJ0b3VyKTtcbiAgICAgIH1cbiAgICB9XG4gICAgdHJhaWwudW5zaGlmdChlbGVzLmdldEVsZW1lbnRCeUlkKHN1YnRvdXIuc2hpZnQoKSkpOyAvLyBmaW5hbCBub2RlXG5cbiAgICBmb3IgKHZhciBkIGluIG5vZGVzKSB7XG4gICAgICBpZiAobm9kZXNbZF0ubGVuZ3RoKSB7XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgICB9XG4gICAgfVxuICAgIHJlc3VsdC5mb3VuZCA9IHRydWU7XG4gICAgcmVzdWx0LnRyYWlsID0gdGhpcy5zcGF3bih0cmFpbCwgdHJ1ZSk7XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxufTtcblxudmFyIGhvcGNyb2Z0VGFyamFuQmljb25uZWN0ZWQgPSBmdW5jdGlvbiBob3Bjcm9mdFRhcmphbkJpY29ubmVjdGVkKCkge1xuICB2YXIgZWxlcyA9IHRoaXM7XG4gIHZhciBub2RlcyA9IHt9O1xuICB2YXIgaWQgPSAwO1xuICB2YXIgZWRnZUNvdW50ID0gMDtcbiAgdmFyIGNvbXBvbmVudHMgPSBbXTtcbiAgdmFyIHN0YWNrID0gW107XG4gIHZhciB2aXNpdGVkRWRnZXMgPSB7fTtcbiAgdmFyIGJ1aWxkQ29tcG9uZW50ID0gZnVuY3Rpb24gYnVpbGRDb21wb25lbnQoeCwgeSkge1xuICAgIHZhciBpID0gc3RhY2subGVuZ3RoIC0gMTtcbiAgICB2YXIgY3V0c2V0ID0gW107XG4gICAgdmFyIGNvbXBvbmVudCA9IGVsZXMuc3Bhd24oKTtcbiAgICB3aGlsZSAoc3RhY2tbaV0ueCAhPSB4IHx8IHN0YWNrW2ldLnkgIT0geSkge1xuICAgICAgY3V0c2V0LnB1c2goc3RhY2sucG9wKCkuZWRnZSk7XG4gICAgICBpLS07XG4gICAgfVxuICAgIGN1dHNldC5wdXNoKHN0YWNrLnBvcCgpLmVkZ2UpO1xuICAgIGN1dHNldC5mb3JFYWNoKGZ1bmN0aW9uIChlZGdlKSB7XG4gICAgICB2YXIgY29ubmVjdGVkTm9kZXMgPSBlZGdlLmNvbm5lY3RlZE5vZGVzKCkuaW50ZXJzZWN0aW9uKGVsZXMpO1xuICAgICAgY29tcG9uZW50Lm1lcmdlKGVkZ2UpO1xuICAgICAgY29ubmVjdGVkTm9kZXMuZm9yRWFjaChmdW5jdGlvbiAobm9kZSkge1xuICAgICAgICB2YXIgbm9kZUlkID0gbm9kZS5pZCgpO1xuICAgICAgICB2YXIgY29ubmVjdGVkRWRnZXMgPSBub2RlLmNvbm5lY3RlZEVkZ2VzKCkuaW50ZXJzZWN0aW9uKGVsZXMpO1xuICAgICAgICBjb21wb25lbnQubWVyZ2Uobm9kZSk7XG4gICAgICAgIGlmICghbm9kZXNbbm9kZUlkXS5jdXRWZXJ0ZXgpIHtcbiAgICAgICAgICBjb21wb25lbnQubWVyZ2UoY29ubmVjdGVkRWRnZXMpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGNvbXBvbmVudC5tZXJnZShjb25uZWN0ZWRFZGdlcy5maWx0ZXIoZnVuY3Rpb24gKGVkZ2UpIHtcbiAgICAgICAgICAgIHJldHVybiBlZGdlLmlzTG9vcCgpO1xuICAgICAgICAgIH0pKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfSk7XG4gICAgY29tcG9uZW50cy5wdXNoKGNvbXBvbmVudCk7XG4gIH07XG4gIHZhciBfYmljb25uZWN0ZWRTZWFyY2ggPSBmdW5jdGlvbiBiaWNvbm5lY3RlZFNlYXJjaChyb290LCBjdXJyZW50Tm9kZSwgcGFyZW50KSB7XG4gICAgaWYgKHJvb3QgPT09IHBhcmVudCkgZWRnZUNvdW50ICs9IDE7XG4gICAgbm9kZXNbY3VycmVudE5vZGVdID0ge1xuICAgICAgaWQ6IGlkLFxuICAgICAgbG93OiBpZCsrLFxuICAgICAgY3V0VmVydGV4OiBmYWxzZVxuICAgIH07XG4gICAgdmFyIGVkZ2VzID0gZWxlcy5nZXRFbGVtZW50QnlJZChjdXJyZW50Tm9kZSkuY29ubmVjdGVkRWRnZXMoKS5pbnRlcnNlY3Rpb24oZWxlcyk7XG4gICAgaWYgKGVkZ2VzLnNpemUoKSA9PT0gMCkge1xuICAgICAgY29tcG9uZW50cy5wdXNoKGVsZXMuc3Bhd24oZWxlcy5nZXRFbGVtZW50QnlJZChjdXJyZW50Tm9kZSkpKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdmFyIHNvdXJjZUlkLCB0YXJnZXRJZCwgb3RoZXJOb2RlSWQsIGVkZ2VJZDtcbiAgICAgIGVkZ2VzLmZvckVhY2goZnVuY3Rpb24gKGVkZ2UpIHtcbiAgICAgICAgc291cmNlSWQgPSBlZGdlLnNvdXJjZSgpLmlkKCk7XG4gICAgICAgIHRhcmdldElkID0gZWRnZS50YXJnZXQoKS5pZCgpO1xuICAgICAgICBvdGhlck5vZGVJZCA9IHNvdXJjZUlkID09PSBjdXJyZW50Tm9kZSA/IHRhcmdldElkIDogc291cmNlSWQ7XG4gICAgICAgIGlmIChvdGhlck5vZGVJZCAhPT0gcGFyZW50KSB7XG4gICAgICAgICAgZWRnZUlkID0gZWRnZS5pZCgpO1xuICAgICAgICAgIGlmICghdmlzaXRlZEVkZ2VzW2VkZ2VJZF0pIHtcbiAgICAgICAgICAgIHZpc2l0ZWRFZGdlc1tlZGdlSWRdID0gdHJ1ZTtcbiAgICAgICAgICAgIHN0YWNrLnB1c2goe1xuICAgICAgICAgICAgICB4OiBjdXJyZW50Tm9kZSxcbiAgICAgICAgICAgICAgeTogb3RoZXJOb2RlSWQsXG4gICAgICAgICAgICAgIGVkZ2U6IGVkZ2VcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoIShvdGhlck5vZGVJZCBpbiBub2RlcykpIHtcbiAgICAgICAgICAgIF9iaWNvbm5lY3RlZFNlYXJjaChyb290LCBvdGhlck5vZGVJZCwgY3VycmVudE5vZGUpO1xuICAgICAgICAgICAgbm9kZXNbY3VycmVudE5vZGVdLmxvdyA9IE1hdGgubWluKG5vZGVzW2N1cnJlbnROb2RlXS5sb3csIG5vZGVzW290aGVyTm9kZUlkXS5sb3cpO1xuICAgICAgICAgICAgaWYgKG5vZGVzW2N1cnJlbnROb2RlXS5pZCA8PSBub2Rlc1tvdGhlck5vZGVJZF0ubG93KSB7XG4gICAgICAgICAgICAgIG5vZGVzW2N1cnJlbnROb2RlXS5jdXRWZXJ0ZXggPSB0cnVlO1xuICAgICAgICAgICAgICBidWlsZENvbXBvbmVudChjdXJyZW50Tm9kZSwgb3RoZXJOb2RlSWQpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBub2Rlc1tjdXJyZW50Tm9kZV0ubG93ID0gTWF0aC5taW4obm9kZXNbY3VycmVudE5vZGVdLmxvdywgbm9kZXNbb3RoZXJOb2RlSWRdLmlkKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cbiAgfTtcbiAgZWxlcy5mb3JFYWNoKGZ1bmN0aW9uIChlbGUpIHtcbiAgICBpZiAoZWxlLmlzTm9kZSgpKSB7XG4gICAgICB2YXIgbm9kZUlkID0gZWxlLmlkKCk7XG4gICAgICBpZiAoIShub2RlSWQgaW4gbm9kZXMpKSB7XG4gICAgICAgIGVkZ2VDb3VudCA9IDA7XG4gICAgICAgIF9iaWNvbm5lY3RlZFNlYXJjaChub2RlSWQsIG5vZGVJZCk7XG4gICAgICAgIG5vZGVzW25vZGVJZF0uY3V0VmVydGV4ID0gZWRnZUNvdW50ID4gMTtcbiAgICAgIH1cbiAgICB9XG4gIH0pO1xuICB2YXIgY3V0VmVydGljZXMgPSBPYmplY3Qua2V5cyhub2RlcykuZmlsdGVyKGZ1bmN0aW9uIChpZCkge1xuICAgIHJldHVybiBub2Rlc1tpZF0uY3V0VmVydGV4O1xuICB9KS5tYXAoZnVuY3Rpb24gKGlkKSB7XG4gICAgcmV0dXJuIGVsZXMuZ2V0RWxlbWVudEJ5SWQoaWQpO1xuICB9KTtcbiAgcmV0dXJuIHtcbiAgICBjdXQ6IGVsZXMuc3Bhd24oY3V0VmVydGljZXMpLFxuICAgIGNvbXBvbmVudHM6IGNvbXBvbmVudHNcbiAgfTtcbn07XG52YXIgaG9wY3JvZnRUYXJqYW5CaWNvbm5lY3RlZCQxID0ge1xuICBob3Bjcm9mdFRhcmphbkJpY29ubmVjdGVkOiBob3Bjcm9mdFRhcmphbkJpY29ubmVjdGVkLFxuICBodGJjOiBob3Bjcm9mdFRhcmphbkJpY29ubmVjdGVkLFxuICBodGI6IGhvcGNyb2Z0VGFyamFuQmljb25uZWN0ZWQsXG4gIGhvcGNyb2Z0VGFyamFuQmljb25uZWN0ZWRDb21wb25lbnRzOiBob3Bjcm9mdFRhcmphbkJpY29ubmVjdGVkXG59O1xuXG52YXIgdGFyamFuU3Ryb25nbHlDb25uZWN0ZWQgPSBmdW5jdGlvbiB0YXJqYW5TdHJvbmdseUNvbm5lY3RlZCgpIHtcbiAgdmFyIGVsZXMgPSB0aGlzO1xuICB2YXIgbm9kZXMgPSB7fTtcbiAgdmFyIGluZGV4ID0gMDtcbiAgdmFyIGNvbXBvbmVudHMgPSBbXTtcbiAgdmFyIHN0YWNrID0gW107XG4gIHZhciBjdXQgPSBlbGVzLnNwYXduKGVsZXMpO1xuICB2YXIgX3N0cm9uZ2x5Q29ubmVjdGVkU2VhcmNoID0gZnVuY3Rpb24gc3Ryb25nbHlDb25uZWN0ZWRTZWFyY2goc291cmNlTm9kZUlkKSB7XG4gICAgc3RhY2sucHVzaChzb3VyY2VOb2RlSWQpO1xuICAgIG5vZGVzW3NvdXJjZU5vZGVJZF0gPSB7XG4gICAgICBpbmRleDogaW5kZXgsXG4gICAgICBsb3c6IGluZGV4KyssXG4gICAgICBleHBsb3JlZDogZmFsc2VcbiAgICB9O1xuICAgIHZhciBjb25uZWN0ZWRFZGdlcyA9IGVsZXMuZ2V0RWxlbWVudEJ5SWQoc291cmNlTm9kZUlkKS5jb25uZWN0ZWRFZGdlcygpLmludGVyc2VjdGlvbihlbGVzKTtcbiAgICBjb25uZWN0ZWRFZGdlcy5mb3JFYWNoKGZ1bmN0aW9uIChlZGdlKSB7XG4gICAgICB2YXIgdGFyZ2V0Tm9kZUlkID0gZWRnZS50YXJnZXQoKS5pZCgpO1xuICAgICAgaWYgKHRhcmdldE5vZGVJZCAhPT0gc291cmNlTm9kZUlkKSB7XG4gICAgICAgIGlmICghKHRhcmdldE5vZGVJZCBpbiBub2RlcykpIHtcbiAgICAgICAgICBfc3Ryb25nbHlDb25uZWN0ZWRTZWFyY2godGFyZ2V0Tm9kZUlkKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIW5vZGVzW3RhcmdldE5vZGVJZF0uZXhwbG9yZWQpIHtcbiAgICAgICAgICBub2Rlc1tzb3VyY2VOb2RlSWRdLmxvdyA9IE1hdGgubWluKG5vZGVzW3NvdXJjZU5vZGVJZF0ubG93LCBub2Rlc1t0YXJnZXROb2RlSWRdLmxvdyk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KTtcbiAgICBpZiAobm9kZXNbc291cmNlTm9kZUlkXS5pbmRleCA9PT0gbm9kZXNbc291cmNlTm9kZUlkXS5sb3cpIHtcbiAgICAgIHZhciBjb21wb25lbnROb2RlcyA9IGVsZXMuc3Bhd24oKTtcbiAgICAgIGZvciAoOzspIHtcbiAgICAgICAgdmFyIG5vZGVJZCA9IHN0YWNrLnBvcCgpO1xuICAgICAgICBjb21wb25lbnROb2Rlcy5tZXJnZShlbGVzLmdldEVsZW1lbnRCeUlkKG5vZGVJZCkpO1xuICAgICAgICBub2Rlc1tub2RlSWRdLmxvdyA9IG5vZGVzW3NvdXJjZU5vZGVJZF0uaW5kZXg7XG4gICAgICAgIG5vZGVzW25vZGVJZF0uZXhwbG9yZWQgPSB0cnVlO1xuICAgICAgICBpZiAobm9kZUlkID09PSBzb3VyY2VOb2RlSWQpIHtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgdmFyIGNvbXBvbmVudEVkZ2VzID0gY29tcG9uZW50Tm9kZXMuZWRnZXNXaXRoKGNvbXBvbmVudE5vZGVzKTtcbiAgICAgIHZhciBjb21wb25lbnQgPSBjb21wb25lbnROb2Rlcy5tZXJnZShjb21wb25lbnRFZGdlcyk7XG4gICAgICBjb21wb25lbnRzLnB1c2goY29tcG9uZW50KTtcbiAgICAgIGN1dCA9IGN1dC5kaWZmZXJlbmNlKGNvbXBvbmVudCk7XG4gICAgfVxuICB9O1xuICBlbGVzLmZvckVhY2goZnVuY3Rpb24gKGVsZSkge1xuICAgIGlmIChlbGUuaXNOb2RlKCkpIHtcbiAgICAgIHZhciBub2RlSWQgPSBlbGUuaWQoKTtcbiAgICAgIGlmICghKG5vZGVJZCBpbiBub2RlcykpIHtcbiAgICAgICAgX3N0cm9uZ2x5Q29ubmVjdGVkU2VhcmNoKG5vZGVJZCk7XG4gICAgICB9XG4gICAgfVxuICB9KTtcbiAgcmV0dXJuIHtcbiAgICBjdXQ6IGN1dCxcbiAgICBjb21wb25lbnRzOiBjb21wb25lbnRzXG4gIH07XG59O1xudmFyIHRhcmphblN0cm9uZ2x5Q29ubmVjdGVkJDEgPSB7XG4gIHRhcmphblN0cm9uZ2x5Q29ubmVjdGVkOiB0YXJqYW5TdHJvbmdseUNvbm5lY3RlZCxcbiAgdHNjOiB0YXJqYW5TdHJvbmdseUNvbm5lY3RlZCxcbiAgdHNjYzogdGFyamFuU3Ryb25nbHlDb25uZWN0ZWQsXG4gIHRhcmphblN0cm9uZ2x5Q29ubmVjdGVkQ29tcG9uZW50czogdGFyamFuU3Ryb25nbHlDb25uZWN0ZWRcbn07XG5cbnZhciBlbGVzZm4kaiA9IHt9O1xuW2VsZXNmbiR2LCBlbGVzZm4kdSwgZWxlc2ZuJHQsIGVsZXNmbiRzLCBlbGVzZm4kciwgZWxlc2ZuJHEsIGVsZXNmbiRwLCBlbGVzZm4kbywgZWxlc2ZuJG4sIGVsZXNmbiRtLCBlbGVzZm4kbCwgbWFya292Q2x1c3RlcmluZyQxLCBrQ2x1c3RlcmluZywgaGllcmFyY2hpY2FsQ2x1c3RlcmluZyQxLCBhZmZpbml0eVByb3BhZ2F0aW9uJDEsIGVsZXNmbiRrLCBob3Bjcm9mdFRhcmphbkJpY29ubmVjdGVkJDEsIHRhcmphblN0cm9uZ2x5Q29ubmVjdGVkJDFdLmZvckVhY2goZnVuY3Rpb24gKHByb3BzKSB7XG4gIGV4dGVuZChlbGVzZm4kaiwgcHJvcHMpO1xufSk7XG5cbi8qIVxuRW1iZWRkYWJsZSBNaW5pbXVtIFN0cmljdGx5LUNvbXBsaWFudCBQcm9taXNlcy9BKyAxLjEuMSBUaGVuYWJsZVxuQ29weXJpZ2h0IChjKSAyMDEzLTIwMTQgUmFsZiBTLiBFbmdlbHNjaGFsbCAoaHR0cDovL2VuZ2Vsc2NoYWxsLmNvbSlcbkxpY2Vuc2VkIHVuZGVyIFRoZSBNSVQgTGljZW5zZSAoaHR0cDovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVClcbiovXG5cbi8qICBwcm9taXNlIHN0YXRlcyBbUHJvbWlzZXMvQSsgMi4xXSAgKi9cbnZhciBTVEFURV9QRU5ESU5HID0gMDsgLyogIFtQcm9taXNlcy9BKyAyLjEuMV0gICovXG52YXIgU1RBVEVfRlVMRklMTEVEID0gMTsgLyogIFtQcm9taXNlcy9BKyAyLjEuMl0gICovXG52YXIgU1RBVEVfUkVKRUNURUQgPSAyOyAvKiAgW1Byb21pc2VzL0ErIDIuMS4zXSAgKi9cblxuLyogIHByb21pc2Ugb2JqZWN0IGNvbnN0cnVjdG9yICAqL1xudmFyIF9hcGkgPSBmdW5jdGlvbiBhcGkoZXhlY3V0b3IpIHtcbiAgLyogIG9wdGlvbmFsbHkgc3VwcG9ydCBub24tY29uc3RydWN0b3IvcGxhaW4tZnVuY3Rpb24gY2FsbCAgKi9cbiAgaWYgKCEodGhpcyBpbnN0YW5jZW9mIF9hcGkpKSByZXR1cm4gbmV3IF9hcGkoZXhlY3V0b3IpO1xuXG4gIC8qICBpbml0aWFsaXplIG9iamVjdCAgKi9cbiAgdGhpcy5pZCA9ICdUaGVuYWJsZS8xLjAuNyc7XG4gIHRoaXMuc3RhdGUgPSBTVEFURV9QRU5ESU5HOyAvKiAgaW5pdGlhbCBzdGF0ZSAgKi9cbiAgdGhpcy5mdWxmaWxsVmFsdWUgPSB1bmRlZmluZWQ7IC8qICBpbml0aWFsIHZhbHVlICAqLyAvKiAgW1Byb21pc2VzL0ErIDEuMywgMi4xLjIuMl0gICovXG4gIHRoaXMucmVqZWN0UmVhc29uID0gdW5kZWZpbmVkOyAvKiAgaW5pdGlhbCByZWFzb24gKi8gLyogIFtQcm9taXNlcy9BKyAxLjUsIDIuMS4zLjJdICAqL1xuICB0aGlzLm9uRnVsZmlsbGVkID0gW107IC8qICBpbml0aWFsIGhhbmRsZXJzICAqL1xuICB0aGlzLm9uUmVqZWN0ZWQgPSBbXTsgLyogIGluaXRpYWwgaGFuZGxlcnMgICovXG5cbiAgLyogIHByb3ZpZGUgb3B0aW9uYWwgaW5mb3JtYXRpb24taGlkaW5nIHByb3h5ICAqL1xuICB0aGlzLnByb3h5ID0ge1xuICAgIHRoZW46IHRoaXMudGhlbi5iaW5kKHRoaXMpXG4gIH07XG5cbiAgLyogIHN1cHBvcnQgb3B0aW9uYWwgZXhlY3V0b3IgZnVuY3Rpb24gICovXG4gIGlmICh0eXBlb2YgZXhlY3V0b3IgPT09ICdmdW5jdGlvbicpIGV4ZWN1dG9yLmNhbGwodGhpcywgdGhpcy5mdWxmaWxsLmJpbmQodGhpcyksIHRoaXMucmVqZWN0LmJpbmQodGhpcykpO1xufTtcblxuLyogIHByb21pc2UgQVBJIG1ldGhvZHMgICovXG5fYXBpLnByb3RvdHlwZSA9IHtcbiAgLyogIHByb21pc2UgcmVzb2x2aW5nIG1ldGhvZHMgICovXG4gIGZ1bGZpbGw6IGZ1bmN0aW9uIGZ1bGZpbGwodmFsdWUpIHtcbiAgICByZXR1cm4gZGVsaXZlcih0aGlzLCBTVEFURV9GVUxGSUxMRUQsICdmdWxmaWxsVmFsdWUnLCB2YWx1ZSk7XG4gIH0sXG4gIHJlamVjdDogZnVuY3Rpb24gcmVqZWN0KHZhbHVlKSB7XG4gICAgcmV0dXJuIGRlbGl2ZXIodGhpcywgU1RBVEVfUkVKRUNURUQsICdyZWplY3RSZWFzb24nLCB2YWx1ZSk7XG4gIH0sXG4gIC8qICBcIlRoZSB0aGVuIE1ldGhvZFwiIFtQcm9taXNlcy9BKyAxLjEsIDEuMiwgMi4yXSAgKi9cbiAgdGhlbjogZnVuY3Rpb24gdGhlbihvbkZ1bGZpbGxlZCwgb25SZWplY3RlZCkge1xuICAgIHZhciBjdXJyID0gdGhpcztcbiAgICB2YXIgbmV4dCA9IG5ldyBfYXBpKCk7IC8qICBbUHJvbWlzZXMvQSsgMi4yLjddICAqL1xuICAgIGN1cnIub25GdWxmaWxsZWQucHVzaChyZXNvbHZlcihvbkZ1bGZpbGxlZCwgbmV4dCwgJ2Z1bGZpbGwnKSk7IC8qICBbUHJvbWlzZXMvQSsgMi4yLjIvMi4yLjZdICAqL1xuICAgIGN1cnIub25SZWplY3RlZC5wdXNoKHJlc29sdmVyKG9uUmVqZWN0ZWQsIG5leHQsICdyZWplY3QnKSk7IC8qICBbUHJvbWlzZXMvQSsgMi4yLjMvMi4yLjZdICAqL1xuICAgIGV4ZWN1dGUoY3Vycik7XG4gICAgcmV0dXJuIG5leHQucHJveHk7IC8qICBbUHJvbWlzZXMvQSsgMi4yLjcsIDMuM10gICovXG4gIH1cbn07XG5cbi8qICBkZWxpdmVyIGFuIGFjdGlvbiAgKi9cbnZhciBkZWxpdmVyID0gZnVuY3Rpb24gZGVsaXZlcihjdXJyLCBzdGF0ZSwgbmFtZSwgdmFsdWUpIHtcbiAgaWYgKGN1cnIuc3RhdGUgPT09IFNUQVRFX1BFTkRJTkcpIHtcbiAgICBjdXJyLnN0YXRlID0gc3RhdGU7IC8qICBbUHJvbWlzZXMvQSsgMi4xLjIuMSwgMi4xLjMuMV0gICovXG4gICAgY3VycltuYW1lXSA9IHZhbHVlOyAvKiAgW1Byb21pc2VzL0ErIDIuMS4yLjIsIDIuMS4zLjJdICAqL1xuICAgIGV4ZWN1dGUoY3Vycik7XG4gIH1cbiAgcmV0dXJuIGN1cnI7XG59O1xuXG4vKiAgZXhlY3V0ZSBhbGwgaGFuZGxlcnMgICovXG52YXIgZXhlY3V0ZSA9IGZ1bmN0aW9uIGV4ZWN1dGUoY3Vycikge1xuICBpZiAoY3Vyci5zdGF0ZSA9PT0gU1RBVEVfRlVMRklMTEVEKSBleGVjdXRlX2hhbmRsZXJzKGN1cnIsICdvbkZ1bGZpbGxlZCcsIGN1cnIuZnVsZmlsbFZhbHVlKTtlbHNlIGlmIChjdXJyLnN0YXRlID09PSBTVEFURV9SRUpFQ1RFRCkgZXhlY3V0ZV9oYW5kbGVycyhjdXJyLCAnb25SZWplY3RlZCcsIGN1cnIucmVqZWN0UmVhc29uKTtcbn07XG5cbi8qICBleGVjdXRlIHBhcnRpY3VsYXIgc2V0IG9mIGhhbmRsZXJzICAqL1xudmFyIGV4ZWN1dGVfaGFuZGxlcnMgPSBmdW5jdGlvbiBleGVjdXRlX2hhbmRsZXJzKGN1cnIsIG5hbWUsIHZhbHVlKSB7XG4gIC8qIGdsb2JhbCBzZXRJbW1lZGlhdGU6IHRydWUgKi9cbiAgLyogZ2xvYmFsIHNldFRpbWVvdXQ6IHRydWUgKi9cblxuICAvKiAgc2hvcnQtY2lyY3VpdCBwcm9jZXNzaW5nICAqL1xuICBpZiAoY3VycltuYW1lXS5sZW5ndGggPT09IDApIHJldHVybjtcblxuICAvKiAgaXRlcmF0ZSBvdmVyIGFsbCBoYW5kbGVycywgZXhhY3RseSBvbmNlICAqL1xuICB2YXIgaGFuZGxlcnMgPSBjdXJyW25hbWVdO1xuICBjdXJyW25hbWVdID0gW107IC8qICBbUHJvbWlzZXMvQSsgMi4yLjIuMywgMi4yLjMuM10gICovXG4gIHZhciBmdW5jID0gZnVuY3Rpb24gZnVuYygpIHtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGhhbmRsZXJzLmxlbmd0aDsgaSsrKSBoYW5kbGVyc1tpXSh2YWx1ZSk7IC8qICBbUHJvbWlzZXMvQSsgMi4yLjVdICAqL1xuICB9O1xuXG4gIC8qICBleGVjdXRlIHByb2NlZHVyZSBhc3luY2hyb25vdXNseSAgKi8gLyogIFtQcm9taXNlcy9BKyAyLjIuNCwgMy4xXSAgKi9cbiAgaWYgKHR5cGVvZiBzZXRJbW1lZGlhdGUgPT09ICdmdW5jdGlvbicpIHNldEltbWVkaWF0ZShmdW5jKTtlbHNlIHNldFRpbWVvdXQoZnVuYywgMCk7XG59O1xuXG4vKiAgZ2VuZXJhdGUgYSByZXNvbHZlciBmdW5jdGlvbiAgKi9cbnZhciByZXNvbHZlciA9IGZ1bmN0aW9uIHJlc29sdmVyKGNiLCBuZXh0LCBtZXRob2QpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgIGlmICh0eXBlb2YgY2IgIT09ICdmdW5jdGlvbicpIC8qICBbUHJvbWlzZXMvQSsgMi4yLjEsIDIuMi43LjMsIDIuMi43LjRdICAqL1xuICAgICAgbmV4dFttZXRob2RdLmNhbGwobmV4dCwgdmFsdWUpOyAvKiAgW1Byb21pc2VzL0ErIDIuMi43LjMsIDIuMi43LjRdICAqL2Vsc2Uge1xuICAgICAgdmFyIHJlc3VsdDtcbiAgICAgIHRyeSB7XG4gICAgICAgIHJlc3VsdCA9IGNiKHZhbHVlKTtcbiAgICAgIH0gLyogIFtQcm9taXNlcy9BKyAyLjIuMi4xLCAyLjIuMy4xLCAyLjIuNSwgMy4yXSAgKi8gY2F0Y2ggKGUpIHtcbiAgICAgICAgbmV4dC5yZWplY3QoZSk7IC8qICBbUHJvbWlzZXMvQSsgMi4yLjcuMl0gICovXG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIF9yZXNvbHZlKG5leHQsIHJlc3VsdCk7IC8qICBbUHJvbWlzZXMvQSsgMi4yLjcuMV0gICovXG4gICAgfVxuICB9O1xufTtcblxuLyogIFwiUHJvbWlzZSBSZXNvbHV0aW9uIFByb2NlZHVyZVwiICAqLyAvKiAgW1Byb21pc2VzL0ErIDIuM10gICovXG52YXIgX3Jlc29sdmUgPSBmdW5jdGlvbiByZXNvbHZlKHByb21pc2UsIHgpIHtcbiAgLyogIHNhbml0eSBjaGVjayBhcmd1bWVudHMgICovIC8qICBbUHJvbWlzZXMvQSsgMi4zLjFdICAqL1xuICBpZiAocHJvbWlzZSA9PT0geCB8fCBwcm9taXNlLnByb3h5ID09PSB4KSB7XG4gICAgcHJvbWlzZS5yZWplY3QobmV3IFR5cGVFcnJvcignY2Fubm90IHJlc29sdmUgcHJvbWlzZSB3aXRoIGl0c2VsZicpKTtcbiAgICByZXR1cm47XG4gIH1cblxuICAvKiAgc3VyZ2ljYWxseSBjaGVjayBmb3IgYSBcInRoZW5cIiBtZXRob2RcbiAgICAobWFpbmx5IHRvIGp1c3QgY2FsbCB0aGUgXCJnZXR0ZXJcIiBvZiBcInRoZW5cIiBvbmx5IG9uY2UpICAqL1xuICB2YXIgdGhlbjtcbiAgaWYgKF90eXBlb2YoeCkgPT09ICdvYmplY3QnICYmIHggIT09IG51bGwgfHwgdHlwZW9mIHggPT09ICdmdW5jdGlvbicpIHtcbiAgICB0cnkge1xuICAgICAgdGhlbiA9IHgudGhlbjtcbiAgICB9IC8qICBbUHJvbWlzZXMvQSsgMi4zLjMuMSwgMy41XSAgKi8gY2F0Y2ggKGUpIHtcbiAgICAgIHByb21pc2UucmVqZWN0KGUpOyAvKiAgW1Byb21pc2VzL0ErIDIuMy4zLjJdICAqL1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgfVxuXG4gIC8qICBoYW5kbGUgb3duIFRoZW5hYmxlcyAgICBbUHJvbWlzZXMvQSsgMi4zLjJdXG4gICAgYW5kIHNpbWlsYXIgXCJ0aGVuYWJsZXNcIiBbUHJvbWlzZXMvQSsgMi4zLjNdICAqL1xuICBpZiAodHlwZW9mIHRoZW4gPT09ICdmdW5jdGlvbicpIHtcbiAgICB2YXIgcmVzb2x2ZWQgPSBmYWxzZTtcbiAgICB0cnkge1xuICAgICAgLyogIGNhbGwgcmV0cmlldmVkIFwidGhlblwiIG1ldGhvZCAqLyAvKiAgW1Byb21pc2VzL0ErIDIuMy4zLjNdICAqL1xuICAgICAgdGhlbi5jYWxsKHgsIC8qICByZXNvbHZlUHJvbWlzZSAgKi8gLyogIFtQcm9taXNlcy9BKyAyLjMuMy4zLjFdICAqL1xuICAgICAgZnVuY3Rpb24gKHkpIHtcbiAgICAgICAgaWYgKHJlc29sdmVkKSByZXR1cm47XG4gICAgICAgIHJlc29sdmVkID0gdHJ1ZTsgLyogIFtQcm9taXNlcy9BKyAyLjMuMy4zLjNdICAqL1xuICAgICAgICBpZiAoeSA9PT0geCkgLyogIFtQcm9taXNlcy9BKyAzLjZdICAqL1xuICAgICAgICAgIHByb21pc2UucmVqZWN0KG5ldyBUeXBlRXJyb3IoJ2NpcmN1bGFyIHRoZW5hYmxlIGNoYWluJykpO2Vsc2UgX3Jlc29sdmUocHJvbWlzZSwgeSk7XG4gICAgICB9LCAvKiAgcmVqZWN0UHJvbWlzZSAgKi8gLyogIFtQcm9taXNlcy9BKyAyLjMuMy4zLjJdICAqL1xuICAgICAgZnVuY3Rpb24gKHIpIHtcbiAgICAgICAgaWYgKHJlc29sdmVkKSByZXR1cm47XG4gICAgICAgIHJlc29sdmVkID0gdHJ1ZTsgLyogIFtQcm9taXNlcy9BKyAyLjMuMy4zLjNdICAqL1xuICAgICAgICBwcm9taXNlLnJlamVjdChyKTtcbiAgICAgIH0pO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIGlmICghcmVzb2x2ZWQpIC8qICBbUHJvbWlzZXMvQSsgMi4zLjMuMy4zXSAgKi9cbiAgICAgICAgcHJvbWlzZS5yZWplY3QoZSk7IC8qICBbUHJvbWlzZXMvQSsgMi4zLjMuMy40XSAgKi9cbiAgICB9XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgLyogIGhhbmRsZSBvdGhlciB2YWx1ZXMgICovXG4gIHByb21pc2UuZnVsZmlsbCh4KTsgLyogIFtQcm9taXNlcy9BKyAyLjMuNCwgMi4zLjMuNF0gICovXG59O1xuXG4vLyBzbyB3ZSBhbHdheXMgaGF2ZSBQcm9taXNlLmFsbCgpXG5fYXBpLmFsbCA9IGZ1bmN0aW9uIChwcykge1xuICByZXR1cm4gbmV3IF9hcGkoZnVuY3Rpb24gKHJlc29sdmVBbGwsIHJlamVjdEFsbCkge1xuICAgIHZhciB2YWxzID0gbmV3IEFycmF5KHBzLmxlbmd0aCk7XG4gICAgdmFyIGRvbmVDb3VudCA9IDA7XG4gICAgdmFyIGZ1bGZpbGwgPSBmdW5jdGlvbiBmdWxmaWxsKGksIHZhbCkge1xuICAgICAgdmFsc1tpXSA9IHZhbDtcbiAgICAgIGRvbmVDb3VudCsrO1xuICAgICAgaWYgKGRvbmVDb3VudCA9PT0gcHMubGVuZ3RoKSB7XG4gICAgICAgIHJlc29sdmVBbGwodmFscyk7XG4gICAgICB9XG4gICAgfTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHBzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAoZnVuY3Rpb24gKGkpIHtcbiAgICAgICAgdmFyIHAgPSBwc1tpXTtcbiAgICAgICAgdmFyIGlzUHJvbWlzZSA9IHAgIT0gbnVsbCAmJiBwLnRoZW4gIT0gbnVsbDtcbiAgICAgICAgaWYgKGlzUHJvbWlzZSkge1xuICAgICAgICAgIHAudGhlbihmdW5jdGlvbiAodmFsKSB7XG4gICAgICAgICAgICBmdWxmaWxsKGksIHZhbCk7XG4gICAgICAgICAgfSwgZnVuY3Rpb24gKGVycikge1xuICAgICAgICAgICAgcmVqZWN0QWxsKGVycik7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdmFyIHZhbCA9IHA7XG4gICAgICAgICAgZnVsZmlsbChpLCB2YWwpO1xuICAgICAgICB9XG4gICAgICB9KShpKTtcbiAgICB9XG4gIH0pO1xufTtcbl9hcGkucmVzb2x2ZSA9IGZ1bmN0aW9uICh2YWwpIHtcbiAgcmV0dXJuIG5ldyBfYXBpKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHtcbiAgICByZXNvbHZlKHZhbCk7XG4gIH0pO1xufTtcbl9hcGkucmVqZWN0ID0gZnVuY3Rpb24gKHZhbCkge1xuICByZXR1cm4gbmV3IF9hcGkoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkge1xuICAgIHJlamVjdCh2YWwpO1xuICB9KTtcbn07XG52YXIgUHJvbWlzZSQxID0gdHlwZW9mIFByb21pc2UgIT09ICd1bmRlZmluZWQnID8gUHJvbWlzZSA6IF9hcGk7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tdW5kZWZcblxudmFyIEFuaW1hdGlvbiA9IGZ1bmN0aW9uIEFuaW1hdGlvbih0YXJnZXQsIG9wdHMsIG9wdHMyKSB7XG4gIHZhciBpc0NvcmUgPSBjb3JlKHRhcmdldCk7XG4gIHZhciBpc0VsZSA9ICFpc0NvcmU7XG4gIHZhciBfcCA9IHRoaXMuX3ByaXZhdGUgPSBleHRlbmQoe1xuICAgIGR1cmF0aW9uOiAxMDAwXG4gIH0sIG9wdHMsIG9wdHMyKTtcbiAgX3AudGFyZ2V0ID0gdGFyZ2V0O1xuICBfcC5zdHlsZSA9IF9wLnN0eWxlIHx8IF9wLmNzcztcbiAgX3Auc3RhcnRlZCA9IGZhbHNlO1xuICBfcC5wbGF5aW5nID0gZmFsc2U7XG4gIF9wLmhvb2tlZCA9IGZhbHNlO1xuICBfcC5hcHBseWluZyA9IGZhbHNlO1xuICBfcC5wcm9ncmVzcyA9IDA7XG4gIF9wLmNvbXBsZXRlcyA9IFtdO1xuICBfcC5mcmFtZXMgPSBbXTtcbiAgaWYgKF9wLmNvbXBsZXRlICYmIGZuJDYoX3AuY29tcGxldGUpKSB7XG4gICAgX3AuY29tcGxldGVzLnB1c2goX3AuY29tcGxldGUpO1xuICB9XG4gIGlmIChpc0VsZSkge1xuICAgIHZhciBwb3MgPSB0YXJnZXQucG9zaXRpb24oKTtcbiAgICBfcC5zdGFydFBvc2l0aW9uID0gX3Auc3RhcnRQb3NpdGlvbiB8fCB7XG4gICAgICB4OiBwb3MueCxcbiAgICAgIHk6IHBvcy55XG4gICAgfTtcbiAgICBfcC5zdGFydFN0eWxlID0gX3Auc3RhcnRTdHlsZSB8fCB0YXJnZXQuY3koKS5zdHlsZSgpLmdldEFuaW1hdGlvblN0YXJ0U3R5bGUodGFyZ2V0LCBfcC5zdHlsZSk7XG4gIH1cbiAgaWYgKGlzQ29yZSkge1xuICAgIHZhciBwYW4gPSB0YXJnZXQucGFuKCk7XG4gICAgX3Auc3RhcnRQYW4gPSB7XG4gICAgICB4OiBwYW4ueCxcbiAgICAgIHk6IHBhbi55XG4gICAgfTtcbiAgICBfcC5zdGFydFpvb20gPSB0YXJnZXQuem9vbSgpO1xuICB9XG5cbiAgLy8gZm9yIGZ1dHVyZSB0aW1lbGluZS9hbmltYXRpb25zIGltcGxcbiAgdGhpcy5sZW5ndGggPSAxO1xuICB0aGlzWzBdID0gdGhpcztcbn07XG52YXIgYW5pZm4gPSBBbmltYXRpb24ucHJvdG90eXBlO1xuZXh0ZW5kKGFuaWZuLCB7XG4gIGluc3RhbmNlU3RyaW5nOiBmdW5jdGlvbiBpbnN0YW5jZVN0cmluZygpIHtcbiAgICByZXR1cm4gJ2FuaW1hdGlvbic7XG4gIH0sXG4gIGhvb2s6IGZ1bmN0aW9uIGhvb2soKSB7XG4gICAgdmFyIF9wID0gdGhpcy5fcHJpdmF0ZTtcbiAgICBpZiAoIV9wLmhvb2tlZCkge1xuICAgICAgLy8gYWRkIHRvIHRhcmdldCdzIGFuaW1hdGlvbiBxdWV1ZVxuICAgICAgdmFyIHE7XG4gICAgICB2YXIgdEFuaSA9IF9wLnRhcmdldC5fcHJpdmF0ZS5hbmltYXRpb247XG4gICAgICBpZiAoX3AucXVldWUpIHtcbiAgICAgICAgcSA9IHRBbmkucXVldWU7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBxID0gdEFuaS5jdXJyZW50O1xuICAgICAgfVxuICAgICAgcS5wdXNoKHRoaXMpO1xuXG4gICAgICAvLyBhZGQgdG8gdGhlIGFuaW1hdGlvbiBsb29wIHBvb2xcbiAgICAgIGlmIChlbGVtZW50T3JDb2xsZWN0aW9uKF9wLnRhcmdldCkpIHtcbiAgICAgICAgX3AudGFyZ2V0LmN5KCkuYWRkVG9BbmltYXRpb25Qb29sKF9wLnRhcmdldCk7XG4gICAgICB9XG4gICAgICBfcC5ob29rZWQgPSB0cnVlO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcztcbiAgfSxcbiAgcGxheTogZnVuY3Rpb24gcGxheSgpIHtcbiAgICB2YXIgX3AgPSB0aGlzLl9wcml2YXRlO1xuXG4gICAgLy8gYXV0b3Jld2luZFxuICAgIGlmIChfcC5wcm9ncmVzcyA9PT0gMSkge1xuICAgICAgX3AucHJvZ3Jlc3MgPSAwO1xuICAgIH1cbiAgICBfcC5wbGF5aW5nID0gdHJ1ZTtcbiAgICBfcC5zdGFydGVkID0gZmFsc2U7IC8vIG5lZWRzIHRvIGJlIHN0YXJ0ZWQgYnkgYW5pbWF0aW9uIGxvb3BcbiAgICBfcC5zdG9wcGVkID0gZmFsc2U7XG4gICAgdGhpcy5ob29rKCk7XG5cbiAgICAvLyB0aGUgYW5pbWF0aW9uIGxvb3Agd2lsbCBzdGFydCB0aGUgYW5pbWF0aW9uLi4uXG5cbiAgICByZXR1cm4gdGhpcztcbiAgfSxcbiAgcGxheWluZzogZnVuY3Rpb24gcGxheWluZygpIHtcbiAgICByZXR1cm4gdGhpcy5fcHJpdmF0ZS5wbGF5aW5nO1xuICB9LFxuICBhcHBseTogZnVuY3Rpb24gYXBwbHkoKSB7XG4gICAgdmFyIF9wID0gdGhpcy5fcHJpdmF0ZTtcbiAgICBfcC5hcHBseWluZyA9IHRydWU7XG4gICAgX3Auc3RhcnRlZCA9IGZhbHNlOyAvLyBuZWVkcyB0byBiZSBzdGFydGVkIGJ5IGFuaW1hdGlvbiBsb29wXG4gICAgX3Auc3RvcHBlZCA9IGZhbHNlO1xuICAgIHRoaXMuaG9vaygpO1xuXG4gICAgLy8gdGhlIGFuaW1hdGlvbiBsb29wIHdpbGwgYXBwbHkgdGhlIGFuaW1hdGlvbiBhdCB0aGlzIHByb2dyZXNzXG5cbiAgICByZXR1cm4gdGhpcztcbiAgfSxcbiAgYXBwbHlpbmc6IGZ1bmN0aW9uIGFwcGx5aW5nKCkge1xuICAgIHJldHVybiB0aGlzLl9wcml2YXRlLmFwcGx5aW5nO1xuICB9LFxuICBwYXVzZTogZnVuY3Rpb24gcGF1c2UoKSB7XG4gICAgdmFyIF9wID0gdGhpcy5fcHJpdmF0ZTtcbiAgICBfcC5wbGF5aW5nID0gZmFsc2U7XG4gICAgX3Auc3RhcnRlZCA9IGZhbHNlO1xuICAgIHJldHVybiB0aGlzO1xuICB9LFxuICBzdG9wOiBmdW5jdGlvbiBzdG9wKCkge1xuICAgIHZhciBfcCA9IHRoaXMuX3ByaXZhdGU7XG4gICAgX3AucGxheWluZyA9IGZhbHNlO1xuICAgIF9wLnN0YXJ0ZWQgPSBmYWxzZTtcbiAgICBfcC5zdG9wcGVkID0gdHJ1ZTsgLy8gdG8gYmUgcmVtb3ZlZCBmcm9tIGFuaW1hdGlvbiBxdWV1ZXNcblxuICAgIHJldHVybiB0aGlzO1xuICB9LFxuICByZXdpbmQ6IGZ1bmN0aW9uIHJld2luZCgpIHtcbiAgICByZXR1cm4gdGhpcy5wcm9ncmVzcygwKTtcbiAgfSxcbiAgZmFzdGZvcndhcmQ6IGZ1bmN0aW9uIGZhc3Rmb3J3YXJkKCkge1xuICAgIHJldHVybiB0aGlzLnByb2dyZXNzKDEpO1xuICB9LFxuICB0aW1lOiBmdW5jdGlvbiB0aW1lKHQpIHtcbiAgICB2YXIgX3AgPSB0aGlzLl9wcml2YXRlO1xuICAgIGlmICh0ID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHJldHVybiBfcC5wcm9ncmVzcyAqIF9wLmR1cmF0aW9uO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gdGhpcy5wcm9ncmVzcyh0IC8gX3AuZHVyYXRpb24pO1xuICAgIH1cbiAgfSxcbiAgcHJvZ3Jlc3M6IGZ1bmN0aW9uIHByb2dyZXNzKHApIHtcbiAgICB2YXIgX3AgPSB0aGlzLl9wcml2YXRlO1xuICAgIHZhciB3YXNQbGF5aW5nID0gX3AucGxheWluZztcbiAgICBpZiAocCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICByZXR1cm4gX3AucHJvZ3Jlc3M7XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmICh3YXNQbGF5aW5nKSB7XG4gICAgICAgIHRoaXMucGF1c2UoKTtcbiAgICAgIH1cbiAgICAgIF9wLnByb2dyZXNzID0gcDtcbiAgICAgIF9wLnN0YXJ0ZWQgPSBmYWxzZTtcbiAgICAgIGlmICh3YXNQbGF5aW5nKSB7XG4gICAgICAgIHRoaXMucGxheSgpO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gdGhpcztcbiAgfSxcbiAgY29tcGxldGVkOiBmdW5jdGlvbiBjb21wbGV0ZWQoKSB7XG4gICAgcmV0dXJuIHRoaXMuX3ByaXZhdGUucHJvZ3Jlc3MgPT09IDE7XG4gIH0sXG4gIHJldmVyc2U6IGZ1bmN0aW9uIHJldmVyc2UoKSB7XG4gICAgdmFyIF9wID0gdGhpcy5fcHJpdmF0ZTtcbiAgICB2YXIgd2FzUGxheWluZyA9IF9wLnBsYXlpbmc7XG4gICAgaWYgKHdhc1BsYXlpbmcpIHtcbiAgICAgIHRoaXMucGF1c2UoKTtcbiAgICB9XG4gICAgX3AucHJvZ3Jlc3MgPSAxIC0gX3AucHJvZ3Jlc3M7XG4gICAgX3Auc3RhcnRlZCA9IGZhbHNlO1xuICAgIHZhciBzd2FwID0gZnVuY3Rpb24gc3dhcChhLCBiKSB7XG4gICAgICB2YXIgX3BhID0gX3BbYV07XG4gICAgICBpZiAoX3BhID09IG51bGwpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgX3BbYV0gPSBfcFtiXTtcbiAgICAgIF9wW2JdID0gX3BhO1xuICAgIH07XG4gICAgc3dhcCgnem9vbScsICdzdGFydFpvb20nKTtcbiAgICBzd2FwKCdwYW4nLCAnc3RhcnRQYW4nKTtcbiAgICBzd2FwKCdwb3NpdGlvbicsICdzdGFydFBvc2l0aW9uJyk7XG5cbiAgICAvLyBzd2FwIHN0eWxlc1xuICAgIGlmIChfcC5zdHlsZSkge1xuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBfcC5zdHlsZS5sZW5ndGg7IGkrKykge1xuICAgICAgICB2YXIgcHJvcCA9IF9wLnN0eWxlW2ldO1xuICAgICAgICB2YXIgbmFtZSA9IHByb3AubmFtZTtcbiAgICAgICAgdmFyIHN0YXJ0U3R5bGVQcm9wID0gX3Auc3RhcnRTdHlsZVtuYW1lXTtcbiAgICAgICAgX3Auc3RhcnRTdHlsZVtuYW1lXSA9IHByb3A7XG4gICAgICAgIF9wLnN0eWxlW2ldID0gc3RhcnRTdHlsZVByb3A7XG4gICAgICB9XG4gICAgfVxuICAgIGlmICh3YXNQbGF5aW5nKSB7XG4gICAgICB0aGlzLnBsYXkoKTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXM7XG4gIH0sXG4gIHByb21pc2U6IGZ1bmN0aW9uIHByb21pc2UodHlwZSkge1xuICAgIHZhciBfcCA9IHRoaXMuX3ByaXZhdGU7XG4gICAgdmFyIGFycjtcbiAgICBzd2l0Y2ggKHR5cGUpIHtcbiAgICAgIGNhc2UgJ2ZyYW1lJzpcbiAgICAgICAgYXJyID0gX3AuZnJhbWVzO1xuICAgICAgICBicmVhaztcbiAgICAgIGRlZmF1bHQ6XG4gICAgICBjYXNlICdjb21wbGV0ZSc6XG4gICAgICBjYXNlICdjb21wbGV0ZWQnOlxuICAgICAgICBhcnIgPSBfcC5jb21wbGV0ZXM7XG4gICAgfVxuICAgIHJldHVybiBuZXcgUHJvbWlzZSQxKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHtcbiAgICAgIGFyci5wdXNoKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmVzb2x2ZSgpO1xuICAgICAgfSk7XG4gICAgfSk7XG4gIH1cbn0pO1xuYW5pZm4uY29tcGxldGUgPSBhbmlmbi5jb21wbGV0ZWQ7XG5hbmlmbi5ydW4gPSBhbmlmbi5wbGF5O1xuYW5pZm4ucnVubmluZyA9IGFuaWZuLnBsYXlpbmc7XG5cbnZhciBkZWZpbmUkMyA9IHtcbiAgYW5pbWF0ZWQ6IGZ1bmN0aW9uIGFuaW1hdGVkKCkge1xuICAgIHJldHVybiBmdW5jdGlvbiBhbmltYXRlZEltcGwoKSB7XG4gICAgICB2YXIgc2VsZiA9IHRoaXM7XG4gICAgICB2YXIgc2VsZklzQXJyYXlMaWtlID0gc2VsZi5sZW5ndGggIT09IHVuZGVmaW5lZDtcbiAgICAgIHZhciBhbGwgPSBzZWxmSXNBcnJheUxpa2UgPyBzZWxmIDogW3NlbGZdOyAvLyBwdXQgaW4gYXJyYXkgaWYgbm90IGFycmF5LWxpa2VcbiAgICAgIHZhciBjeSA9IHRoaXMuX3ByaXZhdGUuY3kgfHwgdGhpcztcbiAgICAgIGlmICghY3kuc3R5bGVFbmFibGVkKCkpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgICAgdmFyIGVsZSA9IGFsbFswXTtcbiAgICAgIGlmIChlbGUpIHtcbiAgICAgICAgcmV0dXJuIGVsZS5fcHJpdmF0ZS5hbmltYXRpb24uY3VycmVudC5sZW5ndGggPiAwO1xuICAgICAgfVxuICAgIH07XG4gIH0sXG4gIC8vIGFuaW1hdGVkXG5cbiAgY2xlYXJRdWV1ZTogZnVuY3Rpb24gY2xlYXJRdWV1ZSgpIHtcbiAgICByZXR1cm4gZnVuY3Rpb24gY2xlYXJRdWV1ZUltcGwoKSB7XG4gICAgICB2YXIgc2VsZiA9IHRoaXM7XG4gICAgICB2YXIgc2VsZklzQXJyYXlMaWtlID0gc2VsZi5sZW5ndGggIT09IHVuZGVmaW5lZDtcbiAgICAgIHZhciBhbGwgPSBzZWxmSXNBcnJheUxpa2UgPyBzZWxmIDogW3NlbGZdOyAvLyBwdXQgaW4gYXJyYXkgaWYgbm90IGFycmF5LWxpa2VcbiAgICAgIHZhciBjeSA9IHRoaXMuX3ByaXZhdGUuY3kgfHwgdGhpcztcbiAgICAgIGlmICghY3kuc3R5bGVFbmFibGVkKCkpIHtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgICB9XG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGFsbC5sZW5ndGg7IGkrKykge1xuICAgICAgICB2YXIgZWxlID0gYWxsW2ldO1xuICAgICAgICBlbGUuX3ByaXZhdGUuYW5pbWF0aW9uLnF1ZXVlID0gW107XG4gICAgICB9XG4gICAgICByZXR1cm4gdGhpcztcbiAgICB9O1xuICB9LFxuICAvLyBjbGVhclF1ZXVlXG5cbiAgZGVsYXk6IGZ1bmN0aW9uIGRlbGF5KCkge1xuICAgIHJldHVybiBmdW5jdGlvbiBkZWxheUltcGwodGltZSwgY29tcGxldGUpIHtcbiAgICAgIHZhciBjeSA9IHRoaXMuX3ByaXZhdGUuY3kgfHwgdGhpcztcbiAgICAgIGlmICghY3kuc3R5bGVFbmFibGVkKCkpIHtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgICB9XG4gICAgICByZXR1cm4gdGhpcy5hbmltYXRlKHtcbiAgICAgICAgZGVsYXk6IHRpbWUsXG4gICAgICAgIGR1cmF0aW9uOiB0aW1lLFxuICAgICAgICBjb21wbGV0ZTogY29tcGxldGVcbiAgICAgIH0pO1xuICAgIH07XG4gIH0sXG4gIC8vIGRlbGF5XG5cbiAgZGVsYXlBbmltYXRpb246IGZ1bmN0aW9uIGRlbGF5QW5pbWF0aW9uKCkge1xuICAgIHJldHVybiBmdW5jdGlvbiBkZWxheUFuaW1hdGlvbkltcGwodGltZSwgY29tcGxldGUpIHtcbiAgICAgIHZhciBjeSA9IHRoaXMuX3ByaXZhdGUuY3kgfHwgdGhpcztcbiAgICAgIGlmICghY3kuc3R5bGVFbmFibGVkKCkpIHtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgICB9XG4gICAgICByZXR1cm4gdGhpcy5hbmltYXRpb24oe1xuICAgICAgICBkZWxheTogdGltZSxcbiAgICAgICAgZHVyYXRpb246IHRpbWUsXG4gICAgICAgIGNvbXBsZXRlOiBjb21wbGV0ZVxuICAgICAgfSk7XG4gICAgfTtcbiAgfSxcbiAgLy8gZGVsYXlcblxuICBhbmltYXRpb246IGZ1bmN0aW9uIGFuaW1hdGlvbigpIHtcbiAgICByZXR1cm4gZnVuY3Rpb24gYW5pbWF0aW9uSW1wbChwcm9wZXJ0aWVzLCBwYXJhbXMpIHtcbiAgICAgIHZhciBzZWxmID0gdGhpcztcbiAgICAgIHZhciBzZWxmSXNBcnJheUxpa2UgPSBzZWxmLmxlbmd0aCAhPT0gdW5kZWZpbmVkO1xuICAgICAgdmFyIGFsbCA9IHNlbGZJc0FycmF5TGlrZSA/IHNlbGYgOiBbc2VsZl07IC8vIHB1dCBpbiBhcnJheSBpZiBub3QgYXJyYXktbGlrZVxuICAgICAgdmFyIGN5ID0gdGhpcy5fcHJpdmF0ZS5jeSB8fCB0aGlzO1xuICAgICAgdmFyIGlzQ29yZSA9ICFzZWxmSXNBcnJheUxpa2U7XG4gICAgICB2YXIgaXNFbGVzID0gIWlzQ29yZTtcbiAgICAgIGlmICghY3kuc3R5bGVFbmFibGVkKCkpIHtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgICB9XG4gICAgICB2YXIgc3R5bGUgPSBjeS5zdHlsZSgpO1xuICAgICAgcHJvcGVydGllcyA9IGV4dGVuZCh7fSwgcHJvcGVydGllcywgcGFyYW1zKTtcbiAgICAgIHZhciBwcm9wZXJ0aWVzRW1wdHkgPSBPYmplY3Qua2V5cyhwcm9wZXJ0aWVzKS5sZW5ndGggPT09IDA7XG4gICAgICBpZiAocHJvcGVydGllc0VtcHR5KSB7XG4gICAgICAgIHJldHVybiBuZXcgQW5pbWF0aW9uKGFsbFswXSwgcHJvcGVydGllcyk7IC8vIG5vdGhpbmcgdG8gYW5pbWF0ZVxuICAgICAgfVxuICAgICAgaWYgKHByb3BlcnRpZXMuZHVyYXRpb24gPT09IHVuZGVmaW5lZCkge1xuICAgICAgICBwcm9wZXJ0aWVzLmR1cmF0aW9uID0gNDAwO1xuICAgICAgfVxuICAgICAgc3dpdGNoIChwcm9wZXJ0aWVzLmR1cmF0aW9uKSB7XG4gICAgICAgIGNhc2UgJ3Nsb3cnOlxuICAgICAgICAgIHByb3BlcnRpZXMuZHVyYXRpb24gPSA2MDA7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgJ2Zhc3QnOlxuICAgICAgICAgIHByb3BlcnRpZXMuZHVyYXRpb24gPSAyMDA7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgICBpZiAoaXNFbGVzKSB7XG4gICAgICAgIHByb3BlcnRpZXMuc3R5bGUgPSBzdHlsZS5nZXRQcm9wc0xpc3QocHJvcGVydGllcy5zdHlsZSB8fCBwcm9wZXJ0aWVzLmNzcyk7XG4gICAgICAgIHByb3BlcnRpZXMuY3NzID0gdW5kZWZpbmVkO1xuICAgICAgfVxuICAgICAgaWYgKGlzRWxlcyAmJiBwcm9wZXJ0aWVzLnJlbmRlcmVkUG9zaXRpb24gIT0gbnVsbCkge1xuICAgICAgICB2YXIgcnBvcyA9IHByb3BlcnRpZXMucmVuZGVyZWRQb3NpdGlvbjtcbiAgICAgICAgdmFyIHBhbiA9IGN5LnBhbigpO1xuICAgICAgICB2YXIgem9vbSA9IGN5Lnpvb20oKTtcbiAgICAgICAgcHJvcGVydGllcy5wb3NpdGlvbiA9IHJlbmRlcmVkVG9Nb2RlbFBvc2l0aW9uKHJwb3MsIHpvb20sIHBhbik7XG4gICAgICB9XG5cbiAgICAgIC8vIG92ZXJyaWRlIHBhbiB3LyBwYW5CeSBpZiBzZXRcbiAgICAgIGlmIChpc0NvcmUgJiYgcHJvcGVydGllcy5wYW5CeSAhPSBudWxsKSB7XG4gICAgICAgIHZhciBwYW5CeSA9IHByb3BlcnRpZXMucGFuQnk7XG4gICAgICAgIHZhciBjeVBhbiA9IGN5LnBhbigpO1xuICAgICAgICBwcm9wZXJ0aWVzLnBhbiA9IHtcbiAgICAgICAgICB4OiBjeVBhbi54ICsgcGFuQnkueCxcbiAgICAgICAgICB5OiBjeVBhbi55ICsgcGFuQnkueVxuICAgICAgICB9O1xuICAgICAgfVxuXG4gICAgICAvLyBvdmVycmlkZSBwYW4gdy8gY2VudGVyIGlmIHNldFxuICAgICAgdmFyIGNlbnRlciA9IHByb3BlcnRpZXMuY2VudGVyIHx8IHByb3BlcnRpZXMuY2VudHJlO1xuICAgICAgaWYgKGlzQ29yZSAmJiBjZW50ZXIgIT0gbnVsbCkge1xuICAgICAgICB2YXIgY2VudGVyUGFuID0gY3kuZ2V0Q2VudGVyUGFuKGNlbnRlci5lbGVzLCBwcm9wZXJ0aWVzLnpvb20pO1xuICAgICAgICBpZiAoY2VudGVyUGFuICE9IG51bGwpIHtcbiAgICAgICAgICBwcm9wZXJ0aWVzLnBhbiA9IGNlbnRlclBhbjtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICAvLyBvdmVycmlkZSBwYW4gJiB6b29tIHcvIGZpdCBpZiBzZXRcbiAgICAgIGlmIChpc0NvcmUgJiYgcHJvcGVydGllcy5maXQgIT0gbnVsbCkge1xuICAgICAgICB2YXIgZml0ID0gcHJvcGVydGllcy5maXQ7XG4gICAgICAgIHZhciBmaXRWcCA9IGN5LmdldEZpdFZpZXdwb3J0KGZpdC5lbGVzIHx8IGZpdC5ib3VuZGluZ0JveCwgZml0LnBhZGRpbmcpO1xuICAgICAgICBpZiAoZml0VnAgIT0gbnVsbCkge1xuICAgICAgICAgIHByb3BlcnRpZXMucGFuID0gZml0VnAucGFuO1xuICAgICAgICAgIHByb3BlcnRpZXMuem9vbSA9IGZpdFZwLnpvb207XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgLy8gb3ZlcnJpZGUgem9vbSAoJiBwb3RlbnRpYWxseSBwYW4pIHcvIHpvb20gb2JqIGlmIHNldFxuICAgICAgaWYgKGlzQ29yZSAmJiBwbGFpbk9iamVjdChwcm9wZXJ0aWVzLnpvb20pKSB7XG4gICAgICAgIHZhciB2cCA9IGN5LmdldFpvb21lZFZpZXdwb3J0KHByb3BlcnRpZXMuem9vbSk7XG4gICAgICAgIGlmICh2cCAhPSBudWxsKSB7XG4gICAgICAgICAgaWYgKHZwLnpvb21lZCkge1xuICAgICAgICAgICAgcHJvcGVydGllcy56b29tID0gdnAuem9vbTtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKHZwLnBhbm5lZCkge1xuICAgICAgICAgICAgcHJvcGVydGllcy5wYW4gPSB2cC5wYW47XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHByb3BlcnRpZXMuem9vbSA9IG51bGw7IC8vIGFuIGluYXZhbGlkIHpvb20gKGUuZy4gbm8gZGVsdGEpIGdldHMgYXV0b21hdGljYWxseSBkZXN0cm95ZWRcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIG5ldyBBbmltYXRpb24oYWxsWzBdLCBwcm9wZXJ0aWVzKTtcbiAgICB9O1xuICB9LFxuICAvLyBhbmltYXRlXG5cbiAgYW5pbWF0ZTogZnVuY3Rpb24gYW5pbWF0ZSgpIHtcbiAgICByZXR1cm4gZnVuY3Rpb24gYW5pbWF0ZUltcGwocHJvcGVydGllcywgcGFyYW1zKSB7XG4gICAgICB2YXIgc2VsZiA9IHRoaXM7XG4gICAgICB2YXIgc2VsZklzQXJyYXlMaWtlID0gc2VsZi5sZW5ndGggIT09IHVuZGVmaW5lZDtcbiAgICAgIHZhciBhbGwgPSBzZWxmSXNBcnJheUxpa2UgPyBzZWxmIDogW3NlbGZdOyAvLyBwdXQgaW4gYXJyYXkgaWYgbm90IGFycmF5LWxpa2VcbiAgICAgIHZhciBjeSA9IHRoaXMuX3ByaXZhdGUuY3kgfHwgdGhpcztcbiAgICAgIGlmICghY3kuc3R5bGVFbmFibGVkKCkpIHtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgICB9XG4gICAgICBpZiAocGFyYW1zKSB7XG4gICAgICAgIHByb3BlcnRpZXMgPSBleHRlbmQoe30sIHByb3BlcnRpZXMsIHBhcmFtcyk7XG4gICAgICB9XG5cbiAgICAgIC8vIG1hbnVhbGx5IGhvb2sgYW5kIHJ1biB0aGUgYW5pbWF0aW9uXG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGFsbC5sZW5ndGg7IGkrKykge1xuICAgICAgICB2YXIgZWxlID0gYWxsW2ldO1xuICAgICAgICB2YXIgcXVldWUgPSBlbGUuYW5pbWF0ZWQoKSAmJiAocHJvcGVydGllcy5xdWV1ZSA9PT0gdW5kZWZpbmVkIHx8IHByb3BlcnRpZXMucXVldWUpO1xuICAgICAgICB2YXIgYW5pID0gZWxlLmFuaW1hdGlvbihwcm9wZXJ0aWVzLCBxdWV1ZSA/IHtcbiAgICAgICAgICBxdWV1ZTogdHJ1ZVxuICAgICAgICB9IDogdW5kZWZpbmVkKTtcbiAgICAgICAgYW5pLnBsYXkoKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiB0aGlzOyAvLyBjaGFpbmluZ1xuICAgIH07XG4gIH0sXG4gIC8vIGFuaW1hdGVcblxuICBzdG9wOiBmdW5jdGlvbiBzdG9wKCkge1xuICAgIHJldHVybiBmdW5jdGlvbiBzdG9wSW1wbChjbGVhclF1ZXVlLCBqdW1wVG9FbmQpIHtcbiAgICAgIHZhciBzZWxmID0gdGhpcztcbiAgICAgIHZhciBzZWxmSXNBcnJheUxpa2UgPSBzZWxmLmxlbmd0aCAhPT0gdW5kZWZpbmVkO1xuICAgICAgdmFyIGFsbCA9IHNlbGZJc0FycmF5TGlrZSA/IHNlbGYgOiBbc2VsZl07IC8vIHB1dCBpbiBhcnJheSBpZiBub3QgYXJyYXktbGlrZVxuICAgICAgdmFyIGN5ID0gdGhpcy5fcHJpdmF0ZS5jeSB8fCB0aGlzO1xuICAgICAgaWYgKCFjeS5zdHlsZUVuYWJsZWQoKSkge1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICAgIH1cbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYWxsLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIHZhciBlbGUgPSBhbGxbaV07XG4gICAgICAgIHZhciBfcCA9IGVsZS5fcHJpdmF0ZTtcbiAgICAgICAgdmFyIGFuaXMgPSBfcC5hbmltYXRpb24uY3VycmVudDtcbiAgICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCBhbmlzLmxlbmd0aDsgaisrKSB7XG4gICAgICAgICAgdmFyIGFuaSA9IGFuaXNbal07XG4gICAgICAgICAgdmFyIGFuaV9wID0gYW5pLl9wcml2YXRlO1xuICAgICAgICAgIGlmIChqdW1wVG9FbmQpIHtcbiAgICAgICAgICAgIC8vIG5leHQgaXRlcmF0aW9uIG9mIHRoZSBhbmltYXRpb24gbG9vcCwgdGhlIGFuaW1hdGlvblxuICAgICAgICAgICAgLy8gd2lsbCBnbyBzdHJhaWdodCB0byB0aGUgZW5kIGFuZCBiZSByZW1vdmVkXG4gICAgICAgICAgICBhbmlfcC5kdXJhdGlvbiA9IDA7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgLy8gY2xlYXIgdGhlIHF1ZXVlIG9mIGZ1dHVyZSBhbmltYXRpb25zXG4gICAgICAgIGlmIChjbGVhclF1ZXVlKSB7XG4gICAgICAgICAgX3AuYW5pbWF0aW9uLnF1ZXVlID0gW107XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFqdW1wVG9FbmQpIHtcbiAgICAgICAgICBfcC5hbmltYXRpb24uY3VycmVudCA9IFtdO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIC8vIHdlIGhhdmUgdG8gbm90aWZ5ICh0aGUgYW5pbWF0aW9uIGxvb3AgZG9lc24ndCBkbyBpdCBmb3IgdXMgb24gYHN0b3BgKVxuICAgICAgY3kubm90aWZ5KCdkcmF3Jyk7XG4gICAgICByZXR1cm4gdGhpcztcbiAgICB9O1xuICB9IC8vIHN0b3Bcbn07IC8vIGRlZmluZVxuXG4vKipcbiAqIENoZWNrcyBpZiBgdmFsdWVgIGlzIGNsYXNzaWZpZWQgYXMgYW4gYEFycmF5YCBvYmplY3QuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSAwLjEuMFxuICogQGNhdGVnb3J5IExhbmdcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgYW4gYXJyYXksIGVsc2UgYGZhbHNlYC5cbiAqIEBleGFtcGxlXG4gKlxuICogXy5pc0FycmF5KFsxLCAyLCAzXSk7XG4gKiAvLyA9PiB0cnVlXG4gKlxuICogXy5pc0FycmF5KGRvY3VtZW50LmJvZHkuY2hpbGRyZW4pO1xuICogLy8gPT4gZmFsc2VcbiAqXG4gKiBfLmlzQXJyYXkoJ2FiYycpO1xuICogLy8gPT4gZmFsc2VcbiAqXG4gKiBfLmlzQXJyYXkoXy5ub29wKTtcbiAqIC8vID0+IGZhbHNlXG4gKi9cblxudmFyIGlzQXJyYXlfMTtcbnZhciBoYXNSZXF1aXJlZElzQXJyYXk7XG5cbmZ1bmN0aW9uIHJlcXVpcmVJc0FycmF5ICgpIHtcblx0aWYgKGhhc1JlcXVpcmVkSXNBcnJheSkgcmV0dXJuIGlzQXJyYXlfMTtcblx0aGFzUmVxdWlyZWRJc0FycmF5ID0gMTtcblx0dmFyIGlzQXJyYXkgPSBBcnJheS5pc0FycmF5O1xuXG5cdGlzQXJyYXlfMSA9IGlzQXJyYXk7XG5cdHJldHVybiBpc0FycmF5XzE7XG59XG5cbnZhciBfaXNLZXk7XG52YXIgaGFzUmVxdWlyZWRfaXNLZXk7XG5cbmZ1bmN0aW9uIHJlcXVpcmVfaXNLZXkgKCkge1xuXHRpZiAoaGFzUmVxdWlyZWRfaXNLZXkpIHJldHVybiBfaXNLZXk7XG5cdGhhc1JlcXVpcmVkX2lzS2V5ID0gMTtcblx0dmFyIGlzQXJyYXkgPSByZXF1aXJlSXNBcnJheSgpLFxuXHQgICAgaXNTeW1ib2wgPSByZXF1aXJlSXNTeW1ib2woKTtcblxuXHQvKiogVXNlZCB0byBtYXRjaCBwcm9wZXJ0eSBuYW1lcyB3aXRoaW4gcHJvcGVydHkgcGF0aHMuICovXG5cdHZhciByZUlzRGVlcFByb3AgPSAvXFwufFxcWyg/OlteW1xcXV0qfChbXCInXSkoPzooPyFcXDEpW15cXFxcXXxcXFxcLikqP1xcMSlcXF0vLFxuXHQgICAgcmVJc1BsYWluUHJvcCA9IC9eXFx3KiQvO1xuXG5cdC8qKlxuXHQgKiBDaGVja3MgaWYgYHZhbHVlYCBpcyBhIHByb3BlcnR5IG5hbWUgYW5kIG5vdCBhIHByb3BlcnR5IHBhdGguXG5cdCAqXG5cdCAqIEBwcml2YXRlXG5cdCAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuXHQgKiBAcGFyYW0ge09iamVjdH0gW29iamVjdF0gVGhlIG9iamVjdCB0byBxdWVyeSBrZXlzIG9uLlxuXHQgKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBhIHByb3BlcnR5IG5hbWUsIGVsc2UgYGZhbHNlYC5cblx0ICovXG5cdGZ1bmN0aW9uIGlzS2V5KHZhbHVlLCBvYmplY3QpIHtcblx0ICBpZiAoaXNBcnJheSh2YWx1ZSkpIHtcblx0ICAgIHJldHVybiBmYWxzZTtcblx0ICB9XG5cdCAgdmFyIHR5cGUgPSB0eXBlb2YgdmFsdWU7XG5cdCAgaWYgKHR5cGUgPT0gJ251bWJlcicgfHwgdHlwZSA9PSAnc3ltYm9sJyB8fCB0eXBlID09ICdib29sZWFuJyB8fFxuXHQgICAgICB2YWx1ZSA9PSBudWxsIHx8IGlzU3ltYm9sKHZhbHVlKSkge1xuXHQgICAgcmV0dXJuIHRydWU7XG5cdCAgfVxuXHQgIHJldHVybiByZUlzUGxhaW5Qcm9wLnRlc3QodmFsdWUpIHx8ICFyZUlzRGVlcFByb3AudGVzdCh2YWx1ZSkgfHxcblx0ICAgIChvYmplY3QgIT0gbnVsbCAmJiB2YWx1ZSBpbiBPYmplY3Qob2JqZWN0KSk7XG5cdH1cblxuXHRfaXNLZXkgPSBpc0tleTtcblx0cmV0dXJuIF9pc0tleTtcbn1cblxudmFyIGlzRnVuY3Rpb25fMTtcbnZhciBoYXNSZXF1aXJlZElzRnVuY3Rpb247XG5cbmZ1bmN0aW9uIHJlcXVpcmVJc0Z1bmN0aW9uICgpIHtcblx0aWYgKGhhc1JlcXVpcmVkSXNGdW5jdGlvbikgcmV0dXJuIGlzRnVuY3Rpb25fMTtcblx0aGFzUmVxdWlyZWRJc0Z1bmN0aW9uID0gMTtcblx0dmFyIGJhc2VHZXRUYWcgPSByZXF1aXJlX2Jhc2VHZXRUYWcoKSxcblx0ICAgIGlzT2JqZWN0ID0gcmVxdWlyZUlzT2JqZWN0KCk7XG5cblx0LyoqIGBPYmplY3QjdG9TdHJpbmdgIHJlc3VsdCByZWZlcmVuY2VzLiAqL1xuXHR2YXIgYXN5bmNUYWcgPSAnW29iamVjdCBBc3luY0Z1bmN0aW9uXScsXG5cdCAgICBmdW5jVGFnID0gJ1tvYmplY3QgRnVuY3Rpb25dJyxcblx0ICAgIGdlblRhZyA9ICdbb2JqZWN0IEdlbmVyYXRvckZ1bmN0aW9uXScsXG5cdCAgICBwcm94eVRhZyA9ICdbb2JqZWN0IFByb3h5XSc7XG5cblx0LyoqXG5cdCAqIENoZWNrcyBpZiBgdmFsdWVgIGlzIGNsYXNzaWZpZWQgYXMgYSBgRnVuY3Rpb25gIG9iamVjdC5cblx0ICpcblx0ICogQHN0YXRpY1xuXHQgKiBAbWVtYmVyT2YgX1xuXHQgKiBAc2luY2UgMC4xLjBcblx0ICogQGNhdGVnb3J5IExhbmdcblx0ICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG5cdCAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGEgZnVuY3Rpb24sIGVsc2UgYGZhbHNlYC5cblx0ICogQGV4YW1wbGVcblx0ICpcblx0ICogXy5pc0Z1bmN0aW9uKF8pO1xuXHQgKiAvLyA9PiB0cnVlXG5cdCAqXG5cdCAqIF8uaXNGdW5jdGlvbigvYWJjLyk7XG5cdCAqIC8vID0+IGZhbHNlXG5cdCAqL1xuXHRmdW5jdGlvbiBpc0Z1bmN0aW9uKHZhbHVlKSB7XG5cdCAgaWYgKCFpc09iamVjdCh2YWx1ZSkpIHtcblx0ICAgIHJldHVybiBmYWxzZTtcblx0ICB9XG5cdCAgLy8gVGhlIHVzZSBvZiBgT2JqZWN0I3RvU3RyaW5nYCBhdm9pZHMgaXNzdWVzIHdpdGggdGhlIGB0eXBlb2ZgIG9wZXJhdG9yXG5cdCAgLy8gaW4gU2FmYXJpIDkgd2hpY2ggcmV0dXJucyAnb2JqZWN0JyBmb3IgdHlwZWQgYXJyYXlzIGFuZCBvdGhlciBjb25zdHJ1Y3RvcnMuXG5cdCAgdmFyIHRhZyA9IGJhc2VHZXRUYWcodmFsdWUpO1xuXHQgIHJldHVybiB0YWcgPT0gZnVuY1RhZyB8fCB0YWcgPT0gZ2VuVGFnIHx8IHRhZyA9PSBhc3luY1RhZyB8fCB0YWcgPT0gcHJveHlUYWc7XG5cdH1cblxuXHRpc0Z1bmN0aW9uXzEgPSBpc0Z1bmN0aW9uO1xuXHRyZXR1cm4gaXNGdW5jdGlvbl8xO1xufVxuXG52YXIgX2NvcmVKc0RhdGE7XG52YXIgaGFzUmVxdWlyZWRfY29yZUpzRGF0YTtcblxuZnVuY3Rpb24gcmVxdWlyZV9jb3JlSnNEYXRhICgpIHtcblx0aWYgKGhhc1JlcXVpcmVkX2NvcmVKc0RhdGEpIHJldHVybiBfY29yZUpzRGF0YTtcblx0aGFzUmVxdWlyZWRfY29yZUpzRGF0YSA9IDE7XG5cdHZhciByb290ID0gcmVxdWlyZV9yb290KCk7XG5cblx0LyoqIFVzZWQgdG8gZGV0ZWN0IG92ZXJyZWFjaGluZyBjb3JlLWpzIHNoaW1zLiAqL1xuXHR2YXIgY29yZUpzRGF0YSA9IHJvb3RbJ19fY29yZS1qc19zaGFyZWRfXyddO1xuXG5cdF9jb3JlSnNEYXRhID0gY29yZUpzRGF0YTtcblx0cmV0dXJuIF9jb3JlSnNEYXRhO1xufVxuXG52YXIgX2lzTWFza2VkO1xudmFyIGhhc1JlcXVpcmVkX2lzTWFza2VkO1xuXG5mdW5jdGlvbiByZXF1aXJlX2lzTWFza2VkICgpIHtcblx0aWYgKGhhc1JlcXVpcmVkX2lzTWFza2VkKSByZXR1cm4gX2lzTWFza2VkO1xuXHRoYXNSZXF1aXJlZF9pc01hc2tlZCA9IDE7XG5cdHZhciBjb3JlSnNEYXRhID0gcmVxdWlyZV9jb3JlSnNEYXRhKCk7XG5cblx0LyoqIFVzZWQgdG8gZGV0ZWN0IG1ldGhvZHMgbWFzcXVlcmFkaW5nIGFzIG5hdGl2ZS4gKi9cblx0dmFyIG1hc2tTcmNLZXkgPSAoZnVuY3Rpb24oKSB7XG5cdCAgdmFyIHVpZCA9IC9bXi5dKyQvLmV4ZWMoY29yZUpzRGF0YSAmJiBjb3JlSnNEYXRhLmtleXMgJiYgY29yZUpzRGF0YS5rZXlzLklFX1BST1RPIHx8ICcnKTtcblx0ICByZXR1cm4gdWlkID8gKCdTeW1ib2woc3JjKV8xLicgKyB1aWQpIDogJyc7XG5cdH0oKSk7XG5cblx0LyoqXG5cdCAqIENoZWNrcyBpZiBgZnVuY2AgaGFzIGl0cyBzb3VyY2UgbWFza2VkLlxuXHQgKlxuXHQgKiBAcHJpdmF0ZVxuXHQgKiBAcGFyYW0ge0Z1bmN0aW9ufSBmdW5jIFRoZSBmdW5jdGlvbiB0byBjaGVjay5cblx0ICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGBmdW5jYCBpcyBtYXNrZWQsIGVsc2UgYGZhbHNlYC5cblx0ICovXG5cdGZ1bmN0aW9uIGlzTWFza2VkKGZ1bmMpIHtcblx0ICByZXR1cm4gISFtYXNrU3JjS2V5ICYmIChtYXNrU3JjS2V5IGluIGZ1bmMpO1xuXHR9XG5cblx0X2lzTWFza2VkID0gaXNNYXNrZWQ7XG5cdHJldHVybiBfaXNNYXNrZWQ7XG59XG5cbi8qKiBVc2VkIGZvciBidWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcy4gKi9cblxudmFyIF90b1NvdXJjZTtcbnZhciBoYXNSZXF1aXJlZF90b1NvdXJjZTtcblxuZnVuY3Rpb24gcmVxdWlyZV90b1NvdXJjZSAoKSB7XG5cdGlmIChoYXNSZXF1aXJlZF90b1NvdXJjZSkgcmV0dXJuIF90b1NvdXJjZTtcblx0aGFzUmVxdWlyZWRfdG9Tb3VyY2UgPSAxO1xuXHR2YXIgZnVuY1Byb3RvID0gRnVuY3Rpb24ucHJvdG90eXBlO1xuXG5cdC8qKiBVc2VkIHRvIHJlc29sdmUgdGhlIGRlY29tcGlsZWQgc291cmNlIG9mIGZ1bmN0aW9ucy4gKi9cblx0dmFyIGZ1bmNUb1N0cmluZyA9IGZ1bmNQcm90by50b1N0cmluZztcblxuXHQvKipcblx0ICogQ29udmVydHMgYGZ1bmNgIHRvIGl0cyBzb3VyY2UgY29kZS5cblx0ICpcblx0ICogQHByaXZhdGVcblx0ICogQHBhcmFtIHtGdW5jdGlvbn0gZnVuYyBUaGUgZnVuY3Rpb24gdG8gY29udmVydC5cblx0ICogQHJldHVybnMge3N0cmluZ30gUmV0dXJucyB0aGUgc291cmNlIGNvZGUuXG5cdCAqL1xuXHRmdW5jdGlvbiB0b1NvdXJjZShmdW5jKSB7XG5cdCAgaWYgKGZ1bmMgIT0gbnVsbCkge1xuXHQgICAgdHJ5IHtcblx0ICAgICAgcmV0dXJuIGZ1bmNUb1N0cmluZy5jYWxsKGZ1bmMpO1xuXHQgICAgfSBjYXRjaCAoZSkge31cblx0ICAgIHRyeSB7XG5cdCAgICAgIHJldHVybiAoZnVuYyArICcnKTtcblx0ICAgIH0gY2F0Y2ggKGUpIHt9XG5cdCAgfVxuXHQgIHJldHVybiAnJztcblx0fVxuXG5cdF90b1NvdXJjZSA9IHRvU291cmNlO1xuXHRyZXR1cm4gX3RvU291cmNlO1xufVxuXG52YXIgX2Jhc2VJc05hdGl2ZTtcbnZhciBoYXNSZXF1aXJlZF9iYXNlSXNOYXRpdmU7XG5cbmZ1bmN0aW9uIHJlcXVpcmVfYmFzZUlzTmF0aXZlICgpIHtcblx0aWYgKGhhc1JlcXVpcmVkX2Jhc2VJc05hdGl2ZSkgcmV0dXJuIF9iYXNlSXNOYXRpdmU7XG5cdGhhc1JlcXVpcmVkX2Jhc2VJc05hdGl2ZSA9IDE7XG5cdHZhciBpc0Z1bmN0aW9uID0gcmVxdWlyZUlzRnVuY3Rpb24oKSxcblx0ICAgIGlzTWFza2VkID0gcmVxdWlyZV9pc01hc2tlZCgpLFxuXHQgICAgaXNPYmplY3QgPSByZXF1aXJlSXNPYmplY3QoKSxcblx0ICAgIHRvU291cmNlID0gcmVxdWlyZV90b1NvdXJjZSgpO1xuXG5cdC8qKlxuXHQgKiBVc2VkIHRvIG1hdGNoIGBSZWdFeHBgXG5cdCAqIFtzeW50YXggY2hhcmFjdGVyc10oaHR0cDovL2VjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvNy4wLyNzZWMtcGF0dGVybnMpLlxuXHQgKi9cblx0dmFyIHJlUmVnRXhwQ2hhciA9IC9bXFxcXF4kLiorPygpW1xcXXt9fF0vZztcblxuXHQvKiogVXNlZCB0byBkZXRlY3QgaG9zdCBjb25zdHJ1Y3RvcnMgKFNhZmFyaSkuICovXG5cdHZhciByZUlzSG9zdEN0b3IgPSAvXlxcW29iamVjdCAuKz9Db25zdHJ1Y3RvclxcXSQvO1xuXG5cdC8qKiBVc2VkIGZvciBidWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcy4gKi9cblx0dmFyIGZ1bmNQcm90byA9IEZ1bmN0aW9uLnByb3RvdHlwZSxcblx0ICAgIG9iamVjdFByb3RvID0gT2JqZWN0LnByb3RvdHlwZTtcblxuXHQvKiogVXNlZCB0byByZXNvbHZlIHRoZSBkZWNvbXBpbGVkIHNvdXJjZSBvZiBmdW5jdGlvbnMuICovXG5cdHZhciBmdW5jVG9TdHJpbmcgPSBmdW5jUHJvdG8udG9TdHJpbmc7XG5cblx0LyoqIFVzZWQgdG8gY2hlY2sgb2JqZWN0cyBmb3Igb3duIHByb3BlcnRpZXMuICovXG5cdHZhciBoYXNPd25Qcm9wZXJ0eSA9IG9iamVjdFByb3RvLmhhc093blByb3BlcnR5O1xuXG5cdC8qKiBVc2VkIHRvIGRldGVjdCBpZiBhIG1ldGhvZCBpcyBuYXRpdmUuICovXG5cdHZhciByZUlzTmF0aXZlID0gUmVnRXhwKCdeJyArXG5cdCAgZnVuY1RvU3RyaW5nLmNhbGwoaGFzT3duUHJvcGVydHkpLnJlcGxhY2UocmVSZWdFeHBDaGFyLCAnXFxcXCQmJylcblx0ICAucmVwbGFjZSgvaGFzT3duUHJvcGVydHl8KGZ1bmN0aW9uKS4qPyg/PVxcXFxcXCgpfCBmb3IgLis/KD89XFxcXFxcXSkvZywgJyQxLio/JykgKyAnJCdcblx0KTtcblxuXHQvKipcblx0ICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8uaXNOYXRpdmVgIHdpdGhvdXQgYmFkIHNoaW0gY2hlY2tzLlxuXHQgKlxuXHQgKiBAcHJpdmF0ZVxuXHQgKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cblx0ICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgYSBuYXRpdmUgZnVuY3Rpb24sXG5cdCAqICBlbHNlIGBmYWxzZWAuXG5cdCAqL1xuXHRmdW5jdGlvbiBiYXNlSXNOYXRpdmUodmFsdWUpIHtcblx0ICBpZiAoIWlzT2JqZWN0KHZhbHVlKSB8fCBpc01hc2tlZCh2YWx1ZSkpIHtcblx0ICAgIHJldHVybiBmYWxzZTtcblx0ICB9XG5cdCAgdmFyIHBhdHRlcm4gPSBpc0Z1bmN0aW9uKHZhbHVlKSA/IHJlSXNOYXRpdmUgOiByZUlzSG9zdEN0b3I7XG5cdCAgcmV0dXJuIHBhdHRlcm4udGVzdCh0b1NvdXJjZSh2YWx1ZSkpO1xuXHR9XG5cblx0X2Jhc2VJc05hdGl2ZSA9IGJhc2VJc05hdGl2ZTtcblx0cmV0dXJuIF9iYXNlSXNOYXRpdmU7XG59XG5cbi8qKlxuICogR2V0cyB0aGUgdmFsdWUgYXQgYGtleWAgb2YgYG9iamVjdGAuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7T2JqZWN0fSBbb2JqZWN0XSBUaGUgb2JqZWN0IHRvIHF1ZXJ5LlxuICogQHBhcmFtIHtzdHJpbmd9IGtleSBUaGUga2V5IG9mIHRoZSBwcm9wZXJ0eSB0byBnZXQuXG4gKiBAcmV0dXJucyB7Kn0gUmV0dXJucyB0aGUgcHJvcGVydHkgdmFsdWUuXG4gKi9cblxudmFyIF9nZXRWYWx1ZTtcbnZhciBoYXNSZXF1aXJlZF9nZXRWYWx1ZTtcblxuZnVuY3Rpb24gcmVxdWlyZV9nZXRWYWx1ZSAoKSB7XG5cdGlmIChoYXNSZXF1aXJlZF9nZXRWYWx1ZSkgcmV0dXJuIF9nZXRWYWx1ZTtcblx0aGFzUmVxdWlyZWRfZ2V0VmFsdWUgPSAxO1xuXHRmdW5jdGlvbiBnZXRWYWx1ZShvYmplY3QsIGtleSkge1xuXHQgIHJldHVybiBvYmplY3QgPT0gbnVsbCA/IHVuZGVmaW5lZCA6IG9iamVjdFtrZXldO1xuXHR9XG5cblx0X2dldFZhbHVlID0gZ2V0VmFsdWU7XG5cdHJldHVybiBfZ2V0VmFsdWU7XG59XG5cbnZhciBfZ2V0TmF0aXZlO1xudmFyIGhhc1JlcXVpcmVkX2dldE5hdGl2ZTtcblxuZnVuY3Rpb24gcmVxdWlyZV9nZXROYXRpdmUgKCkge1xuXHRpZiAoaGFzUmVxdWlyZWRfZ2V0TmF0aXZlKSByZXR1cm4gX2dldE5hdGl2ZTtcblx0aGFzUmVxdWlyZWRfZ2V0TmF0aXZlID0gMTtcblx0dmFyIGJhc2VJc05hdGl2ZSA9IHJlcXVpcmVfYmFzZUlzTmF0aXZlKCksXG5cdCAgICBnZXRWYWx1ZSA9IHJlcXVpcmVfZ2V0VmFsdWUoKTtcblxuXHQvKipcblx0ICogR2V0cyB0aGUgbmF0aXZlIGZ1bmN0aW9uIGF0IGBrZXlgIG9mIGBvYmplY3RgLlxuXHQgKlxuXHQgKiBAcHJpdmF0ZVxuXHQgKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3QgdG8gcXVlcnkuXG5cdCAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgVGhlIGtleSBvZiB0aGUgbWV0aG9kIHRvIGdldC5cblx0ICogQHJldHVybnMgeyp9IFJldHVybnMgdGhlIGZ1bmN0aW9uIGlmIGl0J3MgbmF0aXZlLCBlbHNlIGB1bmRlZmluZWRgLlxuXHQgKi9cblx0ZnVuY3Rpb24gZ2V0TmF0aXZlKG9iamVjdCwga2V5KSB7XG5cdCAgdmFyIHZhbHVlID0gZ2V0VmFsdWUob2JqZWN0LCBrZXkpO1xuXHQgIHJldHVybiBiYXNlSXNOYXRpdmUodmFsdWUpID8gdmFsdWUgOiB1bmRlZmluZWQ7XG5cdH1cblxuXHRfZ2V0TmF0aXZlID0gZ2V0TmF0aXZlO1xuXHRyZXR1cm4gX2dldE5hdGl2ZTtcbn1cblxudmFyIF9uYXRpdmVDcmVhdGU7XG52YXIgaGFzUmVxdWlyZWRfbmF0aXZlQ3JlYXRlO1xuXG5mdW5jdGlvbiByZXF1aXJlX25hdGl2ZUNyZWF0ZSAoKSB7XG5cdGlmIChoYXNSZXF1aXJlZF9uYXRpdmVDcmVhdGUpIHJldHVybiBfbmF0aXZlQ3JlYXRlO1xuXHRoYXNSZXF1aXJlZF9uYXRpdmVDcmVhdGUgPSAxO1xuXHR2YXIgZ2V0TmF0aXZlID0gcmVxdWlyZV9nZXROYXRpdmUoKTtcblxuXHQvKiBCdWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcyB0aGF0IGFyZSB2ZXJpZmllZCB0byBiZSBuYXRpdmUuICovXG5cdHZhciBuYXRpdmVDcmVhdGUgPSBnZXROYXRpdmUoT2JqZWN0LCAnY3JlYXRlJyk7XG5cblx0X25hdGl2ZUNyZWF0ZSA9IG5hdGl2ZUNyZWF0ZTtcblx0cmV0dXJuIF9uYXRpdmVDcmVhdGU7XG59XG5cbnZhciBfaGFzaENsZWFyO1xudmFyIGhhc1JlcXVpcmVkX2hhc2hDbGVhcjtcblxuZnVuY3Rpb24gcmVxdWlyZV9oYXNoQ2xlYXIgKCkge1xuXHRpZiAoaGFzUmVxdWlyZWRfaGFzaENsZWFyKSByZXR1cm4gX2hhc2hDbGVhcjtcblx0aGFzUmVxdWlyZWRfaGFzaENsZWFyID0gMTtcblx0dmFyIG5hdGl2ZUNyZWF0ZSA9IHJlcXVpcmVfbmF0aXZlQ3JlYXRlKCk7XG5cblx0LyoqXG5cdCAqIFJlbW92ZXMgYWxsIGtleS12YWx1ZSBlbnRyaWVzIGZyb20gdGhlIGhhc2guXG5cdCAqXG5cdCAqIEBwcml2YXRlXG5cdCAqIEBuYW1lIGNsZWFyXG5cdCAqIEBtZW1iZXJPZiBIYXNoXG5cdCAqL1xuXHRmdW5jdGlvbiBoYXNoQ2xlYXIoKSB7XG5cdCAgdGhpcy5fX2RhdGFfXyA9IG5hdGl2ZUNyZWF0ZSA/IG5hdGl2ZUNyZWF0ZShudWxsKSA6IHt9O1xuXHQgIHRoaXMuc2l6ZSA9IDA7XG5cdH1cblxuXHRfaGFzaENsZWFyID0gaGFzaENsZWFyO1xuXHRyZXR1cm4gX2hhc2hDbGVhcjtcbn1cblxuLyoqXG4gKiBSZW1vdmVzIGBrZXlgIGFuZCBpdHMgdmFsdWUgZnJvbSB0aGUgaGFzaC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQG5hbWUgZGVsZXRlXG4gKiBAbWVtYmVyT2YgSGFzaFxuICogQHBhcmFtIHtPYmplY3R9IGhhc2ggVGhlIGhhc2ggdG8gbW9kaWZ5LlxuICogQHBhcmFtIHtzdHJpbmd9IGtleSBUaGUga2V5IG9mIHRoZSB2YWx1ZSB0byByZW1vdmUuXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgdGhlIGVudHJ5IHdhcyByZW1vdmVkLCBlbHNlIGBmYWxzZWAuXG4gKi9cblxudmFyIF9oYXNoRGVsZXRlO1xudmFyIGhhc1JlcXVpcmVkX2hhc2hEZWxldGU7XG5cbmZ1bmN0aW9uIHJlcXVpcmVfaGFzaERlbGV0ZSAoKSB7XG5cdGlmIChoYXNSZXF1aXJlZF9oYXNoRGVsZXRlKSByZXR1cm4gX2hhc2hEZWxldGU7XG5cdGhhc1JlcXVpcmVkX2hhc2hEZWxldGUgPSAxO1xuXHRmdW5jdGlvbiBoYXNoRGVsZXRlKGtleSkge1xuXHQgIHZhciByZXN1bHQgPSB0aGlzLmhhcyhrZXkpICYmIGRlbGV0ZSB0aGlzLl9fZGF0YV9fW2tleV07XG5cdCAgdGhpcy5zaXplIC09IHJlc3VsdCA/IDEgOiAwO1xuXHQgIHJldHVybiByZXN1bHQ7XG5cdH1cblxuXHRfaGFzaERlbGV0ZSA9IGhhc2hEZWxldGU7XG5cdHJldHVybiBfaGFzaERlbGV0ZTtcbn1cblxudmFyIF9oYXNoR2V0O1xudmFyIGhhc1JlcXVpcmVkX2hhc2hHZXQ7XG5cbmZ1bmN0aW9uIHJlcXVpcmVfaGFzaEdldCAoKSB7XG5cdGlmIChoYXNSZXF1aXJlZF9oYXNoR2V0KSByZXR1cm4gX2hhc2hHZXQ7XG5cdGhhc1JlcXVpcmVkX2hhc2hHZXQgPSAxO1xuXHR2YXIgbmF0aXZlQ3JlYXRlID0gcmVxdWlyZV9uYXRpdmVDcmVhdGUoKTtcblxuXHQvKiogVXNlZCB0byBzdGFuZC1pbiBmb3IgYHVuZGVmaW5lZGAgaGFzaCB2YWx1ZXMuICovXG5cdHZhciBIQVNIX1VOREVGSU5FRCA9ICdfX2xvZGFzaF9oYXNoX3VuZGVmaW5lZF9fJztcblxuXHQvKiogVXNlZCBmb3IgYnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMuICovXG5cdHZhciBvYmplY3RQcm90byA9IE9iamVjdC5wcm90b3R5cGU7XG5cblx0LyoqIFVzZWQgdG8gY2hlY2sgb2JqZWN0cyBmb3Igb3duIHByb3BlcnRpZXMuICovXG5cdHZhciBoYXNPd25Qcm9wZXJ0eSA9IG9iamVjdFByb3RvLmhhc093blByb3BlcnR5O1xuXG5cdC8qKlxuXHQgKiBHZXRzIHRoZSBoYXNoIHZhbHVlIGZvciBga2V5YC5cblx0ICpcblx0ICogQHByaXZhdGVcblx0ICogQG5hbWUgZ2V0XG5cdCAqIEBtZW1iZXJPZiBIYXNoXG5cdCAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgVGhlIGtleSBvZiB0aGUgdmFsdWUgdG8gZ2V0LlxuXHQgKiBAcmV0dXJucyB7Kn0gUmV0dXJucyB0aGUgZW50cnkgdmFsdWUuXG5cdCAqL1xuXHRmdW5jdGlvbiBoYXNoR2V0KGtleSkge1xuXHQgIHZhciBkYXRhID0gdGhpcy5fX2RhdGFfXztcblx0ICBpZiAobmF0aXZlQ3JlYXRlKSB7XG5cdCAgICB2YXIgcmVzdWx0ID0gZGF0YVtrZXldO1xuXHQgICAgcmV0dXJuIHJlc3VsdCA9PT0gSEFTSF9VTkRFRklORUQgPyB1bmRlZmluZWQgOiByZXN1bHQ7XG5cdCAgfVxuXHQgIHJldHVybiBoYXNPd25Qcm9wZXJ0eS5jYWxsKGRhdGEsIGtleSkgPyBkYXRhW2tleV0gOiB1bmRlZmluZWQ7XG5cdH1cblxuXHRfaGFzaEdldCA9IGhhc2hHZXQ7XG5cdHJldHVybiBfaGFzaEdldDtcbn1cblxudmFyIF9oYXNoSGFzO1xudmFyIGhhc1JlcXVpcmVkX2hhc2hIYXM7XG5cbmZ1bmN0aW9uIHJlcXVpcmVfaGFzaEhhcyAoKSB7XG5cdGlmIChoYXNSZXF1aXJlZF9oYXNoSGFzKSByZXR1cm4gX2hhc2hIYXM7XG5cdGhhc1JlcXVpcmVkX2hhc2hIYXMgPSAxO1xuXHR2YXIgbmF0aXZlQ3JlYXRlID0gcmVxdWlyZV9uYXRpdmVDcmVhdGUoKTtcblxuXHQvKiogVXNlZCBmb3IgYnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMuICovXG5cdHZhciBvYmplY3RQcm90byA9IE9iamVjdC5wcm90b3R5cGU7XG5cblx0LyoqIFVzZWQgdG8gY2hlY2sgb2JqZWN0cyBmb3Igb3duIHByb3BlcnRpZXMuICovXG5cdHZhciBoYXNPd25Qcm9wZXJ0eSA9IG9iamVjdFByb3RvLmhhc093blByb3BlcnR5O1xuXG5cdC8qKlxuXHQgKiBDaGVja3MgaWYgYSBoYXNoIHZhbHVlIGZvciBga2V5YCBleGlzdHMuXG5cdCAqXG5cdCAqIEBwcml2YXRlXG5cdCAqIEBuYW1lIGhhc1xuXHQgKiBAbWVtYmVyT2YgSGFzaFxuXHQgKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSBrZXkgb2YgdGhlIGVudHJ5IHRvIGNoZWNrLlxuXHQgKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYW4gZW50cnkgZm9yIGBrZXlgIGV4aXN0cywgZWxzZSBgZmFsc2VgLlxuXHQgKi9cblx0ZnVuY3Rpb24gaGFzaEhhcyhrZXkpIHtcblx0ICB2YXIgZGF0YSA9IHRoaXMuX19kYXRhX187XG5cdCAgcmV0dXJuIG5hdGl2ZUNyZWF0ZSA/IChkYXRhW2tleV0gIT09IHVuZGVmaW5lZCkgOiBoYXNPd25Qcm9wZXJ0eS5jYWxsKGRhdGEsIGtleSk7XG5cdH1cblxuXHRfaGFzaEhhcyA9IGhhc2hIYXM7XG5cdHJldHVybiBfaGFzaEhhcztcbn1cblxudmFyIF9oYXNoU2V0O1xudmFyIGhhc1JlcXVpcmVkX2hhc2hTZXQ7XG5cbmZ1bmN0aW9uIHJlcXVpcmVfaGFzaFNldCAoKSB7XG5cdGlmIChoYXNSZXF1aXJlZF9oYXNoU2V0KSByZXR1cm4gX2hhc2hTZXQ7XG5cdGhhc1JlcXVpcmVkX2hhc2hTZXQgPSAxO1xuXHR2YXIgbmF0aXZlQ3JlYXRlID0gcmVxdWlyZV9uYXRpdmVDcmVhdGUoKTtcblxuXHQvKiogVXNlZCB0byBzdGFuZC1pbiBmb3IgYHVuZGVmaW5lZGAgaGFzaCB2YWx1ZXMuICovXG5cdHZhciBIQVNIX1VOREVGSU5FRCA9ICdfX2xvZGFzaF9oYXNoX3VuZGVmaW5lZF9fJztcblxuXHQvKipcblx0ICogU2V0cyB0aGUgaGFzaCBga2V5YCB0byBgdmFsdWVgLlxuXHQgKlxuXHQgKiBAcHJpdmF0ZVxuXHQgKiBAbmFtZSBzZXRcblx0ICogQG1lbWJlck9mIEhhc2hcblx0ICogQHBhcmFtIHtzdHJpbmd9IGtleSBUaGUga2V5IG9mIHRoZSB2YWx1ZSB0byBzZXQuXG5cdCAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIHNldC5cblx0ICogQHJldHVybnMge09iamVjdH0gUmV0dXJucyB0aGUgaGFzaCBpbnN0YW5jZS5cblx0ICovXG5cdGZ1bmN0aW9uIGhhc2hTZXQoa2V5LCB2YWx1ZSkge1xuXHQgIHZhciBkYXRhID0gdGhpcy5fX2RhdGFfXztcblx0ICB0aGlzLnNpemUgKz0gdGhpcy5oYXMoa2V5KSA/IDAgOiAxO1xuXHQgIGRhdGFba2V5XSA9IChuYXRpdmVDcmVhdGUgJiYgdmFsdWUgPT09IHVuZGVmaW5lZCkgPyBIQVNIX1VOREVGSU5FRCA6IHZhbHVlO1xuXHQgIHJldHVybiB0aGlzO1xuXHR9XG5cblx0X2hhc2hTZXQgPSBoYXNoU2V0O1xuXHRyZXR1cm4gX2hhc2hTZXQ7XG59XG5cbnZhciBfSGFzaDtcbnZhciBoYXNSZXF1aXJlZF9IYXNoO1xuXG5mdW5jdGlvbiByZXF1aXJlX0hhc2ggKCkge1xuXHRpZiAoaGFzUmVxdWlyZWRfSGFzaCkgcmV0dXJuIF9IYXNoO1xuXHRoYXNSZXF1aXJlZF9IYXNoID0gMTtcblx0dmFyIGhhc2hDbGVhciA9IHJlcXVpcmVfaGFzaENsZWFyKCksXG5cdCAgICBoYXNoRGVsZXRlID0gcmVxdWlyZV9oYXNoRGVsZXRlKCksXG5cdCAgICBoYXNoR2V0ID0gcmVxdWlyZV9oYXNoR2V0KCksXG5cdCAgICBoYXNoSGFzID0gcmVxdWlyZV9oYXNoSGFzKCksXG5cdCAgICBoYXNoU2V0ID0gcmVxdWlyZV9oYXNoU2V0KCk7XG5cblx0LyoqXG5cdCAqIENyZWF0ZXMgYSBoYXNoIG9iamVjdC5cblx0ICpcblx0ICogQHByaXZhdGVcblx0ICogQGNvbnN0cnVjdG9yXG5cdCAqIEBwYXJhbSB7QXJyYXl9IFtlbnRyaWVzXSBUaGUga2V5LXZhbHVlIHBhaXJzIHRvIGNhY2hlLlxuXHQgKi9cblx0ZnVuY3Rpb24gSGFzaChlbnRyaWVzKSB7XG5cdCAgdmFyIGluZGV4ID0gLTEsXG5cdCAgICAgIGxlbmd0aCA9IGVudHJpZXMgPT0gbnVsbCA/IDAgOiBlbnRyaWVzLmxlbmd0aDtcblxuXHQgIHRoaXMuY2xlYXIoKTtcblx0ICB3aGlsZSAoKytpbmRleCA8IGxlbmd0aCkge1xuXHQgICAgdmFyIGVudHJ5ID0gZW50cmllc1tpbmRleF07XG5cdCAgICB0aGlzLnNldChlbnRyeVswXSwgZW50cnlbMV0pO1xuXHQgIH1cblx0fVxuXG5cdC8vIEFkZCBtZXRob2RzIHRvIGBIYXNoYC5cblx0SGFzaC5wcm90b3R5cGUuY2xlYXIgPSBoYXNoQ2xlYXI7XG5cdEhhc2gucHJvdG90eXBlWydkZWxldGUnXSA9IGhhc2hEZWxldGU7XG5cdEhhc2gucHJvdG90eXBlLmdldCA9IGhhc2hHZXQ7XG5cdEhhc2gucHJvdG90eXBlLmhhcyA9IGhhc2hIYXM7XG5cdEhhc2gucHJvdG90eXBlLnNldCA9IGhhc2hTZXQ7XG5cblx0X0hhc2ggPSBIYXNoO1xuXHRyZXR1cm4gX0hhc2g7XG59XG5cbi8qKlxuICogUmVtb3ZlcyBhbGwga2V5LXZhbHVlIGVudHJpZXMgZnJvbSB0aGUgbGlzdCBjYWNoZS5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQG5hbWUgY2xlYXJcbiAqIEBtZW1iZXJPZiBMaXN0Q2FjaGVcbiAqL1xuXG52YXIgX2xpc3RDYWNoZUNsZWFyO1xudmFyIGhhc1JlcXVpcmVkX2xpc3RDYWNoZUNsZWFyO1xuXG5mdW5jdGlvbiByZXF1aXJlX2xpc3RDYWNoZUNsZWFyICgpIHtcblx0aWYgKGhhc1JlcXVpcmVkX2xpc3RDYWNoZUNsZWFyKSByZXR1cm4gX2xpc3RDYWNoZUNsZWFyO1xuXHRoYXNSZXF1aXJlZF9saXN0Q2FjaGVDbGVhciA9IDE7XG5cdGZ1bmN0aW9uIGxpc3RDYWNoZUNsZWFyKCkge1xuXHQgIHRoaXMuX19kYXRhX18gPSBbXTtcblx0ICB0aGlzLnNpemUgPSAwO1xuXHR9XG5cblx0X2xpc3RDYWNoZUNsZWFyID0gbGlzdENhY2hlQ2xlYXI7XG5cdHJldHVybiBfbGlzdENhY2hlQ2xlYXI7XG59XG5cbi8qKlxuICogUGVyZm9ybXMgYVxuICogW2BTYW1lVmFsdWVaZXJvYF0oaHR0cDovL2VjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvNy4wLyNzZWMtc2FtZXZhbHVlemVybylcbiAqIGNvbXBhcmlzb24gYmV0d2VlbiB0d28gdmFsdWVzIHRvIGRldGVybWluZSBpZiB0aGV5IGFyZSBlcXVpdmFsZW50LlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgNC4wLjBcbiAqIEBjYXRlZ29yeSBMYW5nXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjb21wYXJlLlxuICogQHBhcmFtIHsqfSBvdGhlciBUaGUgb3RoZXIgdmFsdWUgdG8gY29tcGFyZS5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiB0aGUgdmFsdWVzIGFyZSBlcXVpdmFsZW50LCBlbHNlIGBmYWxzZWAuXG4gKiBAZXhhbXBsZVxuICpcbiAqIHZhciBvYmplY3QgPSB7ICdhJzogMSB9O1xuICogdmFyIG90aGVyID0geyAnYSc6IDEgfTtcbiAqXG4gKiBfLmVxKG9iamVjdCwgb2JqZWN0KTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBfLmVxKG9iamVjdCwgb3RoZXIpO1xuICogLy8gPT4gZmFsc2VcbiAqXG4gKiBfLmVxKCdhJywgJ2EnKTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBfLmVxKCdhJywgT2JqZWN0KCdhJykpO1xuICogLy8gPT4gZmFsc2VcbiAqXG4gKiBfLmVxKE5hTiwgTmFOKTtcbiAqIC8vID0+IHRydWVcbiAqL1xuXG52YXIgZXFfMTtcbnZhciBoYXNSZXF1aXJlZEVxO1xuXG5mdW5jdGlvbiByZXF1aXJlRXEgKCkge1xuXHRpZiAoaGFzUmVxdWlyZWRFcSkgcmV0dXJuIGVxXzE7XG5cdGhhc1JlcXVpcmVkRXEgPSAxO1xuXHRmdW5jdGlvbiBlcSh2YWx1ZSwgb3RoZXIpIHtcblx0ICByZXR1cm4gdmFsdWUgPT09IG90aGVyIHx8ICh2YWx1ZSAhPT0gdmFsdWUgJiYgb3RoZXIgIT09IG90aGVyKTtcblx0fVxuXG5cdGVxXzEgPSBlcTtcblx0cmV0dXJuIGVxXzE7XG59XG5cbnZhciBfYXNzb2NJbmRleE9mO1xudmFyIGhhc1JlcXVpcmVkX2Fzc29jSW5kZXhPZjtcblxuZnVuY3Rpb24gcmVxdWlyZV9hc3NvY0luZGV4T2YgKCkge1xuXHRpZiAoaGFzUmVxdWlyZWRfYXNzb2NJbmRleE9mKSByZXR1cm4gX2Fzc29jSW5kZXhPZjtcblx0aGFzUmVxdWlyZWRfYXNzb2NJbmRleE9mID0gMTtcblx0dmFyIGVxID0gcmVxdWlyZUVxKCk7XG5cblx0LyoqXG5cdCAqIEdldHMgdGhlIGluZGV4IGF0IHdoaWNoIHRoZSBga2V5YCBpcyBmb3VuZCBpbiBgYXJyYXlgIG9mIGtleS12YWx1ZSBwYWlycy5cblx0ICpcblx0ICogQHByaXZhdGVcblx0ICogQHBhcmFtIHtBcnJheX0gYXJyYXkgVGhlIGFycmF5IHRvIGluc3BlY3QuXG5cdCAqIEBwYXJhbSB7Kn0ga2V5IFRoZSBrZXkgdG8gc2VhcmNoIGZvci5cblx0ICogQHJldHVybnMge251bWJlcn0gUmV0dXJucyB0aGUgaW5kZXggb2YgdGhlIG1hdGNoZWQgdmFsdWUsIGVsc2UgYC0xYC5cblx0ICovXG5cdGZ1bmN0aW9uIGFzc29jSW5kZXhPZihhcnJheSwga2V5KSB7XG5cdCAgdmFyIGxlbmd0aCA9IGFycmF5Lmxlbmd0aDtcblx0ICB3aGlsZSAobGVuZ3RoLS0pIHtcblx0ICAgIGlmIChlcShhcnJheVtsZW5ndGhdWzBdLCBrZXkpKSB7XG5cdCAgICAgIHJldHVybiBsZW5ndGg7XG5cdCAgICB9XG5cdCAgfVxuXHQgIHJldHVybiAtMTtcblx0fVxuXG5cdF9hc3NvY0luZGV4T2YgPSBhc3NvY0luZGV4T2Y7XG5cdHJldHVybiBfYXNzb2NJbmRleE9mO1xufVxuXG52YXIgX2xpc3RDYWNoZURlbGV0ZTtcbnZhciBoYXNSZXF1aXJlZF9saXN0Q2FjaGVEZWxldGU7XG5cbmZ1bmN0aW9uIHJlcXVpcmVfbGlzdENhY2hlRGVsZXRlICgpIHtcblx0aWYgKGhhc1JlcXVpcmVkX2xpc3RDYWNoZURlbGV0ZSkgcmV0dXJuIF9saXN0Q2FjaGVEZWxldGU7XG5cdGhhc1JlcXVpcmVkX2xpc3RDYWNoZURlbGV0ZSA9IDE7XG5cdHZhciBhc3NvY0luZGV4T2YgPSByZXF1aXJlX2Fzc29jSW5kZXhPZigpO1xuXG5cdC8qKiBVc2VkIGZvciBidWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcy4gKi9cblx0dmFyIGFycmF5UHJvdG8gPSBBcnJheS5wcm90b3R5cGU7XG5cblx0LyoqIEJ1aWx0LWluIHZhbHVlIHJlZmVyZW5jZXMuICovXG5cdHZhciBzcGxpY2UgPSBhcnJheVByb3RvLnNwbGljZTtcblxuXHQvKipcblx0ICogUmVtb3ZlcyBga2V5YCBhbmQgaXRzIHZhbHVlIGZyb20gdGhlIGxpc3QgY2FjaGUuXG5cdCAqXG5cdCAqIEBwcml2YXRlXG5cdCAqIEBuYW1lIGRlbGV0ZVxuXHQgKiBAbWVtYmVyT2YgTGlzdENhY2hlXG5cdCAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgVGhlIGtleSBvZiB0aGUgdmFsdWUgdG8gcmVtb3ZlLlxuXHQgKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgdGhlIGVudHJ5IHdhcyByZW1vdmVkLCBlbHNlIGBmYWxzZWAuXG5cdCAqL1xuXHRmdW5jdGlvbiBsaXN0Q2FjaGVEZWxldGUoa2V5KSB7XG5cdCAgdmFyIGRhdGEgPSB0aGlzLl9fZGF0YV9fLFxuXHQgICAgICBpbmRleCA9IGFzc29jSW5kZXhPZihkYXRhLCBrZXkpO1xuXG5cdCAgaWYgKGluZGV4IDwgMCkge1xuXHQgICAgcmV0dXJuIGZhbHNlO1xuXHQgIH1cblx0ICB2YXIgbGFzdEluZGV4ID0gZGF0YS5sZW5ndGggLSAxO1xuXHQgIGlmIChpbmRleCA9PSBsYXN0SW5kZXgpIHtcblx0ICAgIGRhdGEucG9wKCk7XG5cdCAgfSBlbHNlIHtcblx0ICAgIHNwbGljZS5jYWxsKGRhdGEsIGluZGV4LCAxKTtcblx0ICB9XG5cdCAgLS10aGlzLnNpemU7XG5cdCAgcmV0dXJuIHRydWU7XG5cdH1cblxuXHRfbGlzdENhY2hlRGVsZXRlID0gbGlzdENhY2hlRGVsZXRlO1xuXHRyZXR1cm4gX2xpc3RDYWNoZURlbGV0ZTtcbn1cblxudmFyIF9saXN0Q2FjaGVHZXQ7XG52YXIgaGFzUmVxdWlyZWRfbGlzdENhY2hlR2V0O1xuXG5mdW5jdGlvbiByZXF1aXJlX2xpc3RDYWNoZUdldCAoKSB7XG5cdGlmIChoYXNSZXF1aXJlZF9saXN0Q2FjaGVHZXQpIHJldHVybiBfbGlzdENhY2hlR2V0O1xuXHRoYXNSZXF1aXJlZF9saXN0Q2FjaGVHZXQgPSAxO1xuXHR2YXIgYXNzb2NJbmRleE9mID0gcmVxdWlyZV9hc3NvY0luZGV4T2YoKTtcblxuXHQvKipcblx0ICogR2V0cyB0aGUgbGlzdCBjYWNoZSB2YWx1ZSBmb3IgYGtleWAuXG5cdCAqXG5cdCAqIEBwcml2YXRlXG5cdCAqIEBuYW1lIGdldFxuXHQgKiBAbWVtYmVyT2YgTGlzdENhY2hlXG5cdCAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgVGhlIGtleSBvZiB0aGUgdmFsdWUgdG8gZ2V0LlxuXHQgKiBAcmV0dXJucyB7Kn0gUmV0dXJucyB0aGUgZW50cnkgdmFsdWUuXG5cdCAqL1xuXHRmdW5jdGlvbiBsaXN0Q2FjaGVHZXQoa2V5KSB7XG5cdCAgdmFyIGRhdGEgPSB0aGlzLl9fZGF0YV9fLFxuXHQgICAgICBpbmRleCA9IGFzc29jSW5kZXhPZihkYXRhLCBrZXkpO1xuXG5cdCAgcmV0dXJuIGluZGV4IDwgMCA/IHVuZGVmaW5lZCA6IGRhdGFbaW5kZXhdWzFdO1xuXHR9XG5cblx0X2xpc3RDYWNoZUdldCA9IGxpc3RDYWNoZUdldDtcblx0cmV0dXJuIF9saXN0Q2FjaGVHZXQ7XG59XG5cbnZhciBfbGlzdENhY2hlSGFzO1xudmFyIGhhc1JlcXVpcmVkX2xpc3RDYWNoZUhhcztcblxuZnVuY3Rpb24gcmVxdWlyZV9saXN0Q2FjaGVIYXMgKCkge1xuXHRpZiAoaGFzUmVxdWlyZWRfbGlzdENhY2hlSGFzKSByZXR1cm4gX2xpc3RDYWNoZUhhcztcblx0aGFzUmVxdWlyZWRfbGlzdENhY2hlSGFzID0gMTtcblx0dmFyIGFzc29jSW5kZXhPZiA9IHJlcXVpcmVfYXNzb2NJbmRleE9mKCk7XG5cblx0LyoqXG5cdCAqIENoZWNrcyBpZiBhIGxpc3QgY2FjaGUgdmFsdWUgZm9yIGBrZXlgIGV4aXN0cy5cblx0ICpcblx0ICogQHByaXZhdGVcblx0ICogQG5hbWUgaGFzXG5cdCAqIEBtZW1iZXJPZiBMaXN0Q2FjaGVcblx0ICogQHBhcmFtIHtzdHJpbmd9IGtleSBUaGUga2V5IG9mIHRoZSBlbnRyeSB0byBjaGVjay5cblx0ICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGFuIGVudHJ5IGZvciBga2V5YCBleGlzdHMsIGVsc2UgYGZhbHNlYC5cblx0ICovXG5cdGZ1bmN0aW9uIGxpc3RDYWNoZUhhcyhrZXkpIHtcblx0ICByZXR1cm4gYXNzb2NJbmRleE9mKHRoaXMuX19kYXRhX18sIGtleSkgPiAtMTtcblx0fVxuXG5cdF9saXN0Q2FjaGVIYXMgPSBsaXN0Q2FjaGVIYXM7XG5cdHJldHVybiBfbGlzdENhY2hlSGFzO1xufVxuXG52YXIgX2xpc3RDYWNoZVNldDtcbnZhciBoYXNSZXF1aXJlZF9saXN0Q2FjaGVTZXQ7XG5cbmZ1bmN0aW9uIHJlcXVpcmVfbGlzdENhY2hlU2V0ICgpIHtcblx0aWYgKGhhc1JlcXVpcmVkX2xpc3RDYWNoZVNldCkgcmV0dXJuIF9saXN0Q2FjaGVTZXQ7XG5cdGhhc1JlcXVpcmVkX2xpc3RDYWNoZVNldCA9IDE7XG5cdHZhciBhc3NvY0luZGV4T2YgPSByZXF1aXJlX2Fzc29jSW5kZXhPZigpO1xuXG5cdC8qKlxuXHQgKiBTZXRzIHRoZSBsaXN0IGNhY2hlIGBrZXlgIHRvIGB2YWx1ZWAuXG5cdCAqXG5cdCAqIEBwcml2YXRlXG5cdCAqIEBuYW1lIHNldFxuXHQgKiBAbWVtYmVyT2YgTGlzdENhY2hlXG5cdCAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgVGhlIGtleSBvZiB0aGUgdmFsdWUgdG8gc2V0LlxuXHQgKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBzZXQuXG5cdCAqIEByZXR1cm5zIHtPYmplY3R9IFJldHVybnMgdGhlIGxpc3QgY2FjaGUgaW5zdGFuY2UuXG5cdCAqL1xuXHRmdW5jdGlvbiBsaXN0Q2FjaGVTZXQoa2V5LCB2YWx1ZSkge1xuXHQgIHZhciBkYXRhID0gdGhpcy5fX2RhdGFfXyxcblx0ICAgICAgaW5kZXggPSBhc3NvY0luZGV4T2YoZGF0YSwga2V5KTtcblxuXHQgIGlmIChpbmRleCA8IDApIHtcblx0ICAgICsrdGhpcy5zaXplO1xuXHQgICAgZGF0YS5wdXNoKFtrZXksIHZhbHVlXSk7XG5cdCAgfSBlbHNlIHtcblx0ICAgIGRhdGFbaW5kZXhdWzFdID0gdmFsdWU7XG5cdCAgfVxuXHQgIHJldHVybiB0aGlzO1xuXHR9XG5cblx0X2xpc3RDYWNoZVNldCA9IGxpc3RDYWNoZVNldDtcblx0cmV0dXJuIF9saXN0Q2FjaGVTZXQ7XG59XG5cbnZhciBfTGlzdENhY2hlO1xudmFyIGhhc1JlcXVpcmVkX0xpc3RDYWNoZTtcblxuZnVuY3Rpb24gcmVxdWlyZV9MaXN0Q2FjaGUgKCkge1xuXHRpZiAoaGFzUmVxdWlyZWRfTGlzdENhY2hlKSByZXR1cm4gX0xpc3RDYWNoZTtcblx0aGFzUmVxdWlyZWRfTGlzdENhY2hlID0gMTtcblx0dmFyIGxpc3RDYWNoZUNsZWFyID0gcmVxdWlyZV9saXN0Q2FjaGVDbGVhcigpLFxuXHQgICAgbGlzdENhY2hlRGVsZXRlID0gcmVxdWlyZV9saXN0Q2FjaGVEZWxldGUoKSxcblx0ICAgIGxpc3RDYWNoZUdldCA9IHJlcXVpcmVfbGlzdENhY2hlR2V0KCksXG5cdCAgICBsaXN0Q2FjaGVIYXMgPSByZXF1aXJlX2xpc3RDYWNoZUhhcygpLFxuXHQgICAgbGlzdENhY2hlU2V0ID0gcmVxdWlyZV9saXN0Q2FjaGVTZXQoKTtcblxuXHQvKipcblx0ICogQ3JlYXRlcyBhbiBsaXN0IGNhY2hlIG9iamVjdC5cblx0ICpcblx0ICogQHByaXZhdGVcblx0ICogQGNvbnN0cnVjdG9yXG5cdCAqIEBwYXJhbSB7QXJyYXl9IFtlbnRyaWVzXSBUaGUga2V5LXZhbHVlIHBhaXJzIHRvIGNhY2hlLlxuXHQgKi9cblx0ZnVuY3Rpb24gTGlzdENhY2hlKGVudHJpZXMpIHtcblx0ICB2YXIgaW5kZXggPSAtMSxcblx0ICAgICAgbGVuZ3RoID0gZW50cmllcyA9PSBudWxsID8gMCA6IGVudHJpZXMubGVuZ3RoO1xuXG5cdCAgdGhpcy5jbGVhcigpO1xuXHQgIHdoaWxlICgrK2luZGV4IDwgbGVuZ3RoKSB7XG5cdCAgICB2YXIgZW50cnkgPSBlbnRyaWVzW2luZGV4XTtcblx0ICAgIHRoaXMuc2V0KGVudHJ5WzBdLCBlbnRyeVsxXSk7XG5cdCAgfVxuXHR9XG5cblx0Ly8gQWRkIG1ldGhvZHMgdG8gYExpc3RDYWNoZWAuXG5cdExpc3RDYWNoZS5wcm90b3R5cGUuY2xlYXIgPSBsaXN0Q2FjaGVDbGVhcjtcblx0TGlzdENhY2hlLnByb3RvdHlwZVsnZGVsZXRlJ10gPSBsaXN0Q2FjaGVEZWxldGU7XG5cdExpc3RDYWNoZS5wcm90b3R5cGUuZ2V0ID0gbGlzdENhY2hlR2V0O1xuXHRMaXN0Q2FjaGUucHJvdG90eXBlLmhhcyA9IGxpc3RDYWNoZUhhcztcblx0TGlzdENhY2hlLnByb3RvdHlwZS5zZXQgPSBsaXN0Q2FjaGVTZXQ7XG5cblx0X0xpc3RDYWNoZSA9IExpc3RDYWNoZTtcblx0cmV0dXJuIF9MaXN0Q2FjaGU7XG59XG5cbnZhciBfTWFwO1xudmFyIGhhc1JlcXVpcmVkX01hcDtcblxuZnVuY3Rpb24gcmVxdWlyZV9NYXAgKCkge1xuXHRpZiAoaGFzUmVxdWlyZWRfTWFwKSByZXR1cm4gX01hcDtcblx0aGFzUmVxdWlyZWRfTWFwID0gMTtcblx0dmFyIGdldE5hdGl2ZSA9IHJlcXVpcmVfZ2V0TmF0aXZlKCksXG5cdCAgICByb290ID0gcmVxdWlyZV9yb290KCk7XG5cblx0LyogQnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMgdGhhdCBhcmUgdmVyaWZpZWQgdG8gYmUgbmF0aXZlLiAqL1xuXHR2YXIgTWFwID0gZ2V0TmF0aXZlKHJvb3QsICdNYXAnKTtcblxuXHRfTWFwID0gTWFwO1xuXHRyZXR1cm4gX01hcDtcbn1cblxudmFyIF9tYXBDYWNoZUNsZWFyO1xudmFyIGhhc1JlcXVpcmVkX21hcENhY2hlQ2xlYXI7XG5cbmZ1bmN0aW9uIHJlcXVpcmVfbWFwQ2FjaGVDbGVhciAoKSB7XG5cdGlmIChoYXNSZXF1aXJlZF9tYXBDYWNoZUNsZWFyKSByZXR1cm4gX21hcENhY2hlQ2xlYXI7XG5cdGhhc1JlcXVpcmVkX21hcENhY2hlQ2xlYXIgPSAxO1xuXHR2YXIgSGFzaCA9IHJlcXVpcmVfSGFzaCgpLFxuXHQgICAgTGlzdENhY2hlID0gcmVxdWlyZV9MaXN0Q2FjaGUoKSxcblx0ICAgIE1hcCA9IHJlcXVpcmVfTWFwKCk7XG5cblx0LyoqXG5cdCAqIFJlbW92ZXMgYWxsIGtleS12YWx1ZSBlbnRyaWVzIGZyb20gdGhlIG1hcC5cblx0ICpcblx0ICogQHByaXZhdGVcblx0ICogQG5hbWUgY2xlYXJcblx0ICogQG1lbWJlck9mIE1hcENhY2hlXG5cdCAqL1xuXHRmdW5jdGlvbiBtYXBDYWNoZUNsZWFyKCkge1xuXHQgIHRoaXMuc2l6ZSA9IDA7XG5cdCAgdGhpcy5fX2RhdGFfXyA9IHtcblx0ICAgICdoYXNoJzogbmV3IEhhc2gsXG5cdCAgICAnbWFwJzogbmV3IChNYXAgfHwgTGlzdENhY2hlKSxcblx0ICAgICdzdHJpbmcnOiBuZXcgSGFzaFxuXHQgIH07XG5cdH1cblxuXHRfbWFwQ2FjaGVDbGVhciA9IG1hcENhY2hlQ2xlYXI7XG5cdHJldHVybiBfbWFwQ2FjaGVDbGVhcjtcbn1cblxuLyoqXG4gKiBDaGVja3MgaWYgYHZhbHVlYCBpcyBzdWl0YWJsZSBmb3IgdXNlIGFzIHVuaXF1ZSBvYmplY3Qga2V5LlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIHN1aXRhYmxlLCBlbHNlIGBmYWxzZWAuXG4gKi9cblxudmFyIF9pc0tleWFibGU7XG52YXIgaGFzUmVxdWlyZWRfaXNLZXlhYmxlO1xuXG5mdW5jdGlvbiByZXF1aXJlX2lzS2V5YWJsZSAoKSB7XG5cdGlmIChoYXNSZXF1aXJlZF9pc0tleWFibGUpIHJldHVybiBfaXNLZXlhYmxlO1xuXHRoYXNSZXF1aXJlZF9pc0tleWFibGUgPSAxO1xuXHRmdW5jdGlvbiBpc0tleWFibGUodmFsdWUpIHtcblx0ICB2YXIgdHlwZSA9IHR5cGVvZiB2YWx1ZTtcblx0ICByZXR1cm4gKHR5cGUgPT0gJ3N0cmluZycgfHwgdHlwZSA9PSAnbnVtYmVyJyB8fCB0eXBlID09ICdzeW1ib2wnIHx8IHR5cGUgPT0gJ2Jvb2xlYW4nKVxuXHQgICAgPyAodmFsdWUgIT09ICdfX3Byb3RvX18nKVxuXHQgICAgOiAodmFsdWUgPT09IG51bGwpO1xuXHR9XG5cblx0X2lzS2V5YWJsZSA9IGlzS2V5YWJsZTtcblx0cmV0dXJuIF9pc0tleWFibGU7XG59XG5cbnZhciBfZ2V0TWFwRGF0YTtcbnZhciBoYXNSZXF1aXJlZF9nZXRNYXBEYXRhO1xuXG5mdW5jdGlvbiByZXF1aXJlX2dldE1hcERhdGEgKCkge1xuXHRpZiAoaGFzUmVxdWlyZWRfZ2V0TWFwRGF0YSkgcmV0dXJuIF9nZXRNYXBEYXRhO1xuXHRoYXNSZXF1aXJlZF9nZXRNYXBEYXRhID0gMTtcblx0dmFyIGlzS2V5YWJsZSA9IHJlcXVpcmVfaXNLZXlhYmxlKCk7XG5cblx0LyoqXG5cdCAqIEdldHMgdGhlIGRhdGEgZm9yIGBtYXBgLlxuXHQgKlxuXHQgKiBAcHJpdmF0ZVxuXHQgKiBAcGFyYW0ge09iamVjdH0gbWFwIFRoZSBtYXAgdG8gcXVlcnkuXG5cdCAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgVGhlIHJlZmVyZW5jZSBrZXkuXG5cdCAqIEByZXR1cm5zIHsqfSBSZXR1cm5zIHRoZSBtYXAgZGF0YS5cblx0ICovXG5cdGZ1bmN0aW9uIGdldE1hcERhdGEobWFwLCBrZXkpIHtcblx0ICB2YXIgZGF0YSA9IG1hcC5fX2RhdGFfXztcblx0ICByZXR1cm4gaXNLZXlhYmxlKGtleSlcblx0ICAgID8gZGF0YVt0eXBlb2Yga2V5ID09ICdzdHJpbmcnID8gJ3N0cmluZycgOiAnaGFzaCddXG5cdCAgICA6IGRhdGEubWFwO1xuXHR9XG5cblx0X2dldE1hcERhdGEgPSBnZXRNYXBEYXRhO1xuXHRyZXR1cm4gX2dldE1hcERhdGE7XG59XG5cbnZhciBfbWFwQ2FjaGVEZWxldGU7XG52YXIgaGFzUmVxdWlyZWRfbWFwQ2FjaGVEZWxldGU7XG5cbmZ1bmN0aW9uIHJlcXVpcmVfbWFwQ2FjaGVEZWxldGUgKCkge1xuXHRpZiAoaGFzUmVxdWlyZWRfbWFwQ2FjaGVEZWxldGUpIHJldHVybiBfbWFwQ2FjaGVEZWxldGU7XG5cdGhhc1JlcXVpcmVkX21hcENhY2hlRGVsZXRlID0gMTtcblx0dmFyIGdldE1hcERhdGEgPSByZXF1aXJlX2dldE1hcERhdGEoKTtcblxuXHQvKipcblx0ICogUmVtb3ZlcyBga2V5YCBhbmQgaXRzIHZhbHVlIGZyb20gdGhlIG1hcC5cblx0ICpcblx0ICogQHByaXZhdGVcblx0ICogQG5hbWUgZGVsZXRlXG5cdCAqIEBtZW1iZXJPZiBNYXBDYWNoZVxuXHQgKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSBrZXkgb2YgdGhlIHZhbHVlIHRvIHJlbW92ZS5cblx0ICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIHRoZSBlbnRyeSB3YXMgcmVtb3ZlZCwgZWxzZSBgZmFsc2VgLlxuXHQgKi9cblx0ZnVuY3Rpb24gbWFwQ2FjaGVEZWxldGUoa2V5KSB7XG5cdCAgdmFyIHJlc3VsdCA9IGdldE1hcERhdGEodGhpcywga2V5KVsnZGVsZXRlJ10oa2V5KTtcblx0ICB0aGlzLnNpemUgLT0gcmVzdWx0ID8gMSA6IDA7XG5cdCAgcmV0dXJuIHJlc3VsdDtcblx0fVxuXG5cdF9tYXBDYWNoZURlbGV0ZSA9IG1hcENhY2hlRGVsZXRlO1xuXHRyZXR1cm4gX21hcENhY2hlRGVsZXRlO1xufVxuXG52YXIgX21hcENhY2hlR2V0O1xudmFyIGhhc1JlcXVpcmVkX21hcENhY2hlR2V0O1xuXG5mdW5jdGlvbiByZXF1aXJlX21hcENhY2hlR2V0ICgpIHtcblx0aWYgKGhhc1JlcXVpcmVkX21hcENhY2hlR2V0KSByZXR1cm4gX21hcENhY2hlR2V0O1xuXHRoYXNSZXF1aXJlZF9tYXBDYWNoZUdldCA9IDE7XG5cdHZhciBnZXRNYXBEYXRhID0gcmVxdWlyZV9nZXRNYXBEYXRhKCk7XG5cblx0LyoqXG5cdCAqIEdldHMgdGhlIG1hcCB2YWx1ZSBmb3IgYGtleWAuXG5cdCAqXG5cdCAqIEBwcml2YXRlXG5cdCAqIEBuYW1lIGdldFxuXHQgKiBAbWVtYmVyT2YgTWFwQ2FjaGVcblx0ICogQHBhcmFtIHtzdHJpbmd9IGtleSBUaGUga2V5IG9mIHRoZSB2YWx1ZSB0byBnZXQuXG5cdCAqIEByZXR1cm5zIHsqfSBSZXR1cm5zIHRoZSBlbnRyeSB2YWx1ZS5cblx0ICovXG5cdGZ1bmN0aW9uIG1hcENhY2hlR2V0KGtleSkge1xuXHQgIHJldHVybiBnZXRNYXBEYXRhKHRoaXMsIGtleSkuZ2V0KGtleSk7XG5cdH1cblxuXHRfbWFwQ2FjaGVHZXQgPSBtYXBDYWNoZUdldDtcblx0cmV0dXJuIF9tYXBDYWNoZUdldDtcbn1cblxudmFyIF9tYXBDYWNoZUhhcztcbnZhciBoYXNSZXF1aXJlZF9tYXBDYWNoZUhhcztcblxuZnVuY3Rpb24gcmVxdWlyZV9tYXBDYWNoZUhhcyAoKSB7XG5cdGlmIChoYXNSZXF1aXJlZF9tYXBDYWNoZUhhcykgcmV0dXJuIF9tYXBDYWNoZUhhcztcblx0aGFzUmVxdWlyZWRfbWFwQ2FjaGVIYXMgPSAxO1xuXHR2YXIgZ2V0TWFwRGF0YSA9IHJlcXVpcmVfZ2V0TWFwRGF0YSgpO1xuXG5cdC8qKlxuXHQgKiBDaGVja3MgaWYgYSBtYXAgdmFsdWUgZm9yIGBrZXlgIGV4aXN0cy5cblx0ICpcblx0ICogQHByaXZhdGVcblx0ICogQG5hbWUgaGFzXG5cdCAqIEBtZW1iZXJPZiBNYXBDYWNoZVxuXHQgKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSBrZXkgb2YgdGhlIGVudHJ5IHRvIGNoZWNrLlxuXHQgKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYW4gZW50cnkgZm9yIGBrZXlgIGV4aXN0cywgZWxzZSBgZmFsc2VgLlxuXHQgKi9cblx0ZnVuY3Rpb24gbWFwQ2FjaGVIYXMoa2V5KSB7XG5cdCAgcmV0dXJuIGdldE1hcERhdGEodGhpcywga2V5KS5oYXMoa2V5KTtcblx0fVxuXG5cdF9tYXBDYWNoZUhhcyA9IG1hcENhY2hlSGFzO1xuXHRyZXR1cm4gX21hcENhY2hlSGFzO1xufVxuXG52YXIgX21hcENhY2hlU2V0O1xudmFyIGhhc1JlcXVpcmVkX21hcENhY2hlU2V0O1xuXG5mdW5jdGlvbiByZXF1aXJlX21hcENhY2hlU2V0ICgpIHtcblx0aWYgKGhhc1JlcXVpcmVkX21hcENhY2hlU2V0KSByZXR1cm4gX21hcENhY2hlU2V0O1xuXHRoYXNSZXF1aXJlZF9tYXBDYWNoZVNldCA9IDE7XG5cdHZhciBnZXRNYXBEYXRhID0gcmVxdWlyZV9nZXRNYXBEYXRhKCk7XG5cblx0LyoqXG5cdCAqIFNldHMgdGhlIG1hcCBga2V5YCB0byBgdmFsdWVgLlxuXHQgKlxuXHQgKiBAcHJpdmF0ZVxuXHQgKiBAbmFtZSBzZXRcblx0ICogQG1lbWJlck9mIE1hcENhY2hlXG5cdCAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgVGhlIGtleSBvZiB0aGUgdmFsdWUgdG8gc2V0LlxuXHQgKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBzZXQuXG5cdCAqIEByZXR1cm5zIHtPYmplY3R9IFJldHVybnMgdGhlIG1hcCBjYWNoZSBpbnN0YW5jZS5cblx0ICovXG5cdGZ1bmN0aW9uIG1hcENhY2hlU2V0KGtleSwgdmFsdWUpIHtcblx0ICB2YXIgZGF0YSA9IGdldE1hcERhdGEodGhpcywga2V5KSxcblx0ICAgICAgc2l6ZSA9IGRhdGEuc2l6ZTtcblxuXHQgIGRhdGEuc2V0KGtleSwgdmFsdWUpO1xuXHQgIHRoaXMuc2l6ZSArPSBkYXRhLnNpemUgPT0gc2l6ZSA/IDAgOiAxO1xuXHQgIHJldHVybiB0aGlzO1xuXHR9XG5cblx0X21hcENhY2hlU2V0ID0gbWFwQ2FjaGVTZXQ7XG5cdHJldHVybiBfbWFwQ2FjaGVTZXQ7XG59XG5cbnZhciBfTWFwQ2FjaGU7XG52YXIgaGFzUmVxdWlyZWRfTWFwQ2FjaGU7XG5cbmZ1bmN0aW9uIHJlcXVpcmVfTWFwQ2FjaGUgKCkge1xuXHRpZiAoaGFzUmVxdWlyZWRfTWFwQ2FjaGUpIHJldHVybiBfTWFwQ2FjaGU7XG5cdGhhc1JlcXVpcmVkX01hcENhY2hlID0gMTtcblx0dmFyIG1hcENhY2hlQ2xlYXIgPSByZXF1aXJlX21hcENhY2hlQ2xlYXIoKSxcblx0ICAgIG1hcENhY2hlRGVsZXRlID0gcmVxdWlyZV9tYXBDYWNoZURlbGV0ZSgpLFxuXHQgICAgbWFwQ2FjaGVHZXQgPSByZXF1aXJlX21hcENhY2hlR2V0KCksXG5cdCAgICBtYXBDYWNoZUhhcyA9IHJlcXVpcmVfbWFwQ2FjaGVIYXMoKSxcblx0ICAgIG1hcENhY2hlU2V0ID0gcmVxdWlyZV9tYXBDYWNoZVNldCgpO1xuXG5cdC8qKlxuXHQgKiBDcmVhdGVzIGEgbWFwIGNhY2hlIG9iamVjdCB0byBzdG9yZSBrZXktdmFsdWUgcGFpcnMuXG5cdCAqXG5cdCAqIEBwcml2YXRlXG5cdCAqIEBjb25zdHJ1Y3RvclxuXHQgKiBAcGFyYW0ge0FycmF5fSBbZW50cmllc10gVGhlIGtleS12YWx1ZSBwYWlycyB0byBjYWNoZS5cblx0ICovXG5cdGZ1bmN0aW9uIE1hcENhY2hlKGVudHJpZXMpIHtcblx0ICB2YXIgaW5kZXggPSAtMSxcblx0ICAgICAgbGVuZ3RoID0gZW50cmllcyA9PSBudWxsID8gMCA6IGVudHJpZXMubGVuZ3RoO1xuXG5cdCAgdGhpcy5jbGVhcigpO1xuXHQgIHdoaWxlICgrK2luZGV4IDwgbGVuZ3RoKSB7XG5cdCAgICB2YXIgZW50cnkgPSBlbnRyaWVzW2luZGV4XTtcblx0ICAgIHRoaXMuc2V0KGVudHJ5WzBdLCBlbnRyeVsxXSk7XG5cdCAgfVxuXHR9XG5cblx0Ly8gQWRkIG1ldGhvZHMgdG8gYE1hcENhY2hlYC5cblx0TWFwQ2FjaGUucHJvdG90eXBlLmNsZWFyID0gbWFwQ2FjaGVDbGVhcjtcblx0TWFwQ2FjaGUucHJvdG90eXBlWydkZWxldGUnXSA9IG1hcENhY2hlRGVsZXRlO1xuXHRNYXBDYWNoZS5wcm90b3R5cGUuZ2V0ID0gbWFwQ2FjaGVHZXQ7XG5cdE1hcENhY2hlLnByb3RvdHlwZS5oYXMgPSBtYXBDYWNoZUhhcztcblx0TWFwQ2FjaGUucHJvdG90eXBlLnNldCA9IG1hcENhY2hlU2V0O1xuXG5cdF9NYXBDYWNoZSA9IE1hcENhY2hlO1xuXHRyZXR1cm4gX01hcENhY2hlO1xufVxuXG52YXIgbWVtb2l6ZV8xO1xudmFyIGhhc1JlcXVpcmVkTWVtb2l6ZTtcblxuZnVuY3Rpb24gcmVxdWlyZU1lbW9pemUgKCkge1xuXHRpZiAoaGFzUmVxdWlyZWRNZW1vaXplKSByZXR1cm4gbWVtb2l6ZV8xO1xuXHRoYXNSZXF1aXJlZE1lbW9pemUgPSAxO1xuXHR2YXIgTWFwQ2FjaGUgPSByZXF1aXJlX01hcENhY2hlKCk7XG5cblx0LyoqIEVycm9yIG1lc3NhZ2UgY29uc3RhbnRzLiAqL1xuXHR2YXIgRlVOQ19FUlJPUl9URVhUID0gJ0V4cGVjdGVkIGEgZnVuY3Rpb24nO1xuXG5cdC8qKlxuXHQgKiBDcmVhdGVzIGEgZnVuY3Rpb24gdGhhdCBtZW1vaXplcyB0aGUgcmVzdWx0IG9mIGBmdW5jYC4gSWYgYHJlc29sdmVyYCBpc1xuXHQgKiBwcm92aWRlZCwgaXQgZGV0ZXJtaW5lcyB0aGUgY2FjaGUga2V5IGZvciBzdG9yaW5nIHRoZSByZXN1bHQgYmFzZWQgb24gdGhlXG5cdCAqIGFyZ3VtZW50cyBwcm92aWRlZCB0byB0aGUgbWVtb2l6ZWQgZnVuY3Rpb24uIEJ5IGRlZmF1bHQsIHRoZSBmaXJzdCBhcmd1bWVudFxuXHQgKiBwcm92aWRlZCB0byB0aGUgbWVtb2l6ZWQgZnVuY3Rpb24gaXMgdXNlZCBhcyB0aGUgbWFwIGNhY2hlIGtleS4gVGhlIGBmdW5jYFxuXHQgKiBpcyBpbnZva2VkIHdpdGggdGhlIGB0aGlzYCBiaW5kaW5nIG9mIHRoZSBtZW1vaXplZCBmdW5jdGlvbi5cblx0ICpcblx0ICogKipOb3RlOioqIFRoZSBjYWNoZSBpcyBleHBvc2VkIGFzIHRoZSBgY2FjaGVgIHByb3BlcnR5IG9uIHRoZSBtZW1vaXplZFxuXHQgKiBmdW5jdGlvbi4gSXRzIGNyZWF0aW9uIG1heSBiZSBjdXN0b21pemVkIGJ5IHJlcGxhY2luZyB0aGUgYF8ubWVtb2l6ZS5DYWNoZWBcblx0ICogY29uc3RydWN0b3Igd2l0aCBvbmUgd2hvc2UgaW5zdGFuY2VzIGltcGxlbWVudCB0aGVcblx0ICogW2BNYXBgXShodHRwOi8vZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9lY21hLTI2Mi83LjAvI3NlYy1wcm9wZXJ0aWVzLW9mLXRoZS1tYXAtcHJvdG90eXBlLW9iamVjdClcblx0ICogbWV0aG9kIGludGVyZmFjZSBvZiBgY2xlYXJgLCBgZGVsZXRlYCwgYGdldGAsIGBoYXNgLCBhbmQgYHNldGAuXG5cdCAqXG5cdCAqIEBzdGF0aWNcblx0ICogQG1lbWJlck9mIF9cblx0ICogQHNpbmNlIDAuMS4wXG5cdCAqIEBjYXRlZ29yeSBGdW5jdGlvblxuXHQgKiBAcGFyYW0ge0Z1bmN0aW9ufSBmdW5jIFRoZSBmdW5jdGlvbiB0byBoYXZlIGl0cyBvdXRwdXQgbWVtb2l6ZWQuXG5cdCAqIEBwYXJhbSB7RnVuY3Rpb259IFtyZXNvbHZlcl0gVGhlIGZ1bmN0aW9uIHRvIHJlc29sdmUgdGhlIGNhY2hlIGtleS5cblx0ICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIHRoZSBuZXcgbWVtb2l6ZWQgZnVuY3Rpb24uXG5cdCAqIEBleGFtcGxlXG5cdCAqXG5cdCAqIHZhciBvYmplY3QgPSB7ICdhJzogMSwgJ2InOiAyIH07XG5cdCAqIHZhciBvdGhlciA9IHsgJ2MnOiAzLCAnZCc6IDQgfTtcblx0ICpcblx0ICogdmFyIHZhbHVlcyA9IF8ubWVtb2l6ZShfLnZhbHVlcyk7XG5cdCAqIHZhbHVlcyhvYmplY3QpO1xuXHQgKiAvLyA9PiBbMSwgMl1cblx0ICpcblx0ICogdmFsdWVzKG90aGVyKTtcblx0ICogLy8gPT4gWzMsIDRdXG5cdCAqXG5cdCAqIG9iamVjdC5hID0gMjtcblx0ICogdmFsdWVzKG9iamVjdCk7XG5cdCAqIC8vID0+IFsxLCAyXVxuXHQgKlxuXHQgKiAvLyBNb2RpZnkgdGhlIHJlc3VsdCBjYWNoZS5cblx0ICogdmFsdWVzLmNhY2hlLnNldChvYmplY3QsIFsnYScsICdiJ10pO1xuXHQgKiB2YWx1ZXMob2JqZWN0KTtcblx0ICogLy8gPT4gWydhJywgJ2InXVxuXHQgKlxuXHQgKiAvLyBSZXBsYWNlIGBfLm1lbW9pemUuQ2FjaGVgLlxuXHQgKiBfLm1lbW9pemUuQ2FjaGUgPSBXZWFrTWFwO1xuXHQgKi9cblx0ZnVuY3Rpb24gbWVtb2l6ZShmdW5jLCByZXNvbHZlcikge1xuXHQgIGlmICh0eXBlb2YgZnVuYyAhPSAnZnVuY3Rpb24nIHx8IChyZXNvbHZlciAhPSBudWxsICYmIHR5cGVvZiByZXNvbHZlciAhPSAnZnVuY3Rpb24nKSkge1xuXHQgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihGVU5DX0VSUk9SX1RFWFQpO1xuXHQgIH1cblx0ICB2YXIgbWVtb2l6ZWQgPSBmdW5jdGlvbigpIHtcblx0ICAgIHZhciBhcmdzID0gYXJndW1lbnRzLFxuXHQgICAgICAgIGtleSA9IHJlc29sdmVyID8gcmVzb2x2ZXIuYXBwbHkodGhpcywgYXJncykgOiBhcmdzWzBdLFxuXHQgICAgICAgIGNhY2hlID0gbWVtb2l6ZWQuY2FjaGU7XG5cblx0ICAgIGlmIChjYWNoZS5oYXMoa2V5KSkge1xuXHQgICAgICByZXR1cm4gY2FjaGUuZ2V0KGtleSk7XG5cdCAgICB9XG5cdCAgICB2YXIgcmVzdWx0ID0gZnVuYy5hcHBseSh0aGlzLCBhcmdzKTtcblx0ICAgIG1lbW9pemVkLmNhY2hlID0gY2FjaGUuc2V0KGtleSwgcmVzdWx0KSB8fCBjYWNoZTtcblx0ICAgIHJldHVybiByZXN1bHQ7XG5cdCAgfTtcblx0ICBtZW1vaXplZC5jYWNoZSA9IG5ldyAobWVtb2l6ZS5DYWNoZSB8fCBNYXBDYWNoZSk7XG5cdCAgcmV0dXJuIG1lbW9pemVkO1xuXHR9XG5cblx0Ly8gRXhwb3NlIGBNYXBDYWNoZWAuXG5cdG1lbW9pemUuQ2FjaGUgPSBNYXBDYWNoZTtcblxuXHRtZW1vaXplXzEgPSBtZW1vaXplO1xuXHRyZXR1cm4gbWVtb2l6ZV8xO1xufVxuXG52YXIgX21lbW9pemVDYXBwZWQ7XG52YXIgaGFzUmVxdWlyZWRfbWVtb2l6ZUNhcHBlZDtcblxuZnVuY3Rpb24gcmVxdWlyZV9tZW1vaXplQ2FwcGVkICgpIHtcblx0aWYgKGhhc1JlcXVpcmVkX21lbW9pemVDYXBwZWQpIHJldHVybiBfbWVtb2l6ZUNhcHBlZDtcblx0aGFzUmVxdWlyZWRfbWVtb2l6ZUNhcHBlZCA9IDE7XG5cdHZhciBtZW1vaXplID0gcmVxdWlyZU1lbW9pemUoKTtcblxuXHQvKiogVXNlZCBhcyB0aGUgbWF4aW11bSBtZW1vaXplIGNhY2hlIHNpemUuICovXG5cdHZhciBNQVhfTUVNT0laRV9TSVpFID0gNTAwO1xuXG5cdC8qKlxuXHQgKiBBIHNwZWNpYWxpemVkIHZlcnNpb24gb2YgYF8ubWVtb2l6ZWAgd2hpY2ggY2xlYXJzIHRoZSBtZW1vaXplZCBmdW5jdGlvbidzXG5cdCAqIGNhY2hlIHdoZW4gaXQgZXhjZWVkcyBgTUFYX01FTU9JWkVfU0laRWAuXG5cdCAqXG5cdCAqIEBwcml2YXRlXG5cdCAqIEBwYXJhbSB7RnVuY3Rpb259IGZ1bmMgVGhlIGZ1bmN0aW9uIHRvIGhhdmUgaXRzIG91dHB1dCBtZW1vaXplZC5cblx0ICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIHRoZSBuZXcgbWVtb2l6ZWQgZnVuY3Rpb24uXG5cdCAqL1xuXHRmdW5jdGlvbiBtZW1vaXplQ2FwcGVkKGZ1bmMpIHtcblx0ICB2YXIgcmVzdWx0ID0gbWVtb2l6ZShmdW5jLCBmdW5jdGlvbihrZXkpIHtcblx0ICAgIGlmIChjYWNoZS5zaXplID09PSBNQVhfTUVNT0laRV9TSVpFKSB7XG5cdCAgICAgIGNhY2hlLmNsZWFyKCk7XG5cdCAgICB9XG5cdCAgICByZXR1cm4ga2V5O1xuXHQgIH0pO1xuXG5cdCAgdmFyIGNhY2hlID0gcmVzdWx0LmNhY2hlO1xuXHQgIHJldHVybiByZXN1bHQ7XG5cdH1cblxuXHRfbWVtb2l6ZUNhcHBlZCA9IG1lbW9pemVDYXBwZWQ7XG5cdHJldHVybiBfbWVtb2l6ZUNhcHBlZDtcbn1cblxudmFyIF9zdHJpbmdUb1BhdGg7XG52YXIgaGFzUmVxdWlyZWRfc3RyaW5nVG9QYXRoO1xuXG5mdW5jdGlvbiByZXF1aXJlX3N0cmluZ1RvUGF0aCAoKSB7XG5cdGlmIChoYXNSZXF1aXJlZF9zdHJpbmdUb1BhdGgpIHJldHVybiBfc3RyaW5nVG9QYXRoO1xuXHRoYXNSZXF1aXJlZF9zdHJpbmdUb1BhdGggPSAxO1xuXHR2YXIgbWVtb2l6ZUNhcHBlZCA9IHJlcXVpcmVfbWVtb2l6ZUNhcHBlZCgpO1xuXG5cdC8qKiBVc2VkIHRvIG1hdGNoIHByb3BlcnR5IG5hbWVzIHdpdGhpbiBwcm9wZXJ0eSBwYXRocy4gKi9cblx0dmFyIHJlUHJvcE5hbWUgPSAvW14uW1xcXV0rfFxcWyg/OigtP1xcZCsoPzpcXC5cXGQrKT8pfChbXCInXSkoKD86KD8hXFwyKVteXFxcXF18XFxcXC4pKj8pXFwyKVxcXXwoPz0oPzpcXC58XFxbXFxdKSg/OlxcLnxcXFtcXF18JCkpL2c7XG5cblx0LyoqIFVzZWQgdG8gbWF0Y2ggYmFja3NsYXNoZXMgaW4gcHJvcGVydHkgcGF0aHMuICovXG5cdHZhciByZUVzY2FwZUNoYXIgPSAvXFxcXChcXFxcKT8vZztcblxuXHQvKipcblx0ICogQ29udmVydHMgYHN0cmluZ2AgdG8gYSBwcm9wZXJ0eSBwYXRoIGFycmF5LlxuXHQgKlxuXHQgKiBAcHJpdmF0ZVxuXHQgKiBAcGFyYW0ge3N0cmluZ30gc3RyaW5nIFRoZSBzdHJpbmcgdG8gY29udmVydC5cblx0ICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBwcm9wZXJ0eSBwYXRoIGFycmF5LlxuXHQgKi9cblx0dmFyIHN0cmluZ1RvUGF0aCA9IG1lbW9pemVDYXBwZWQoZnVuY3Rpb24oc3RyaW5nKSB7XG5cdCAgdmFyIHJlc3VsdCA9IFtdO1xuXHQgIGlmIChzdHJpbmcuY2hhckNvZGVBdCgwKSA9PT0gNDYgLyogLiAqLykge1xuXHQgICAgcmVzdWx0LnB1c2goJycpO1xuXHQgIH1cblx0ICBzdHJpbmcucmVwbGFjZShyZVByb3BOYW1lLCBmdW5jdGlvbihtYXRjaCwgbnVtYmVyLCBxdW90ZSwgc3ViU3RyaW5nKSB7XG5cdCAgICByZXN1bHQucHVzaChxdW90ZSA/IHN1YlN0cmluZy5yZXBsYWNlKHJlRXNjYXBlQ2hhciwgJyQxJykgOiAobnVtYmVyIHx8IG1hdGNoKSk7XG5cdCAgfSk7XG5cdCAgcmV0dXJuIHJlc3VsdDtcblx0fSk7XG5cblx0X3N0cmluZ1RvUGF0aCA9IHN0cmluZ1RvUGF0aDtcblx0cmV0dXJuIF9zdHJpbmdUb1BhdGg7XG59XG5cbi8qKlxuICogQSBzcGVjaWFsaXplZCB2ZXJzaW9uIG9mIGBfLm1hcGAgZm9yIGFycmF5cyB3aXRob3V0IHN1cHBvcnQgZm9yIGl0ZXJhdGVlXG4gKiBzaG9ydGhhbmRzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge0FycmF5fSBbYXJyYXldIFRoZSBhcnJheSB0byBpdGVyYXRlIG92ZXIuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBpdGVyYXRlZSBUaGUgZnVuY3Rpb24gaW52b2tlZCBwZXIgaXRlcmF0aW9uLlxuICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBuZXcgbWFwcGVkIGFycmF5LlxuICovXG5cbnZhciBfYXJyYXlNYXA7XG52YXIgaGFzUmVxdWlyZWRfYXJyYXlNYXA7XG5cbmZ1bmN0aW9uIHJlcXVpcmVfYXJyYXlNYXAgKCkge1xuXHRpZiAoaGFzUmVxdWlyZWRfYXJyYXlNYXApIHJldHVybiBfYXJyYXlNYXA7XG5cdGhhc1JlcXVpcmVkX2FycmF5TWFwID0gMTtcblx0ZnVuY3Rpb24gYXJyYXlNYXAoYXJyYXksIGl0ZXJhdGVlKSB7XG5cdCAgdmFyIGluZGV4ID0gLTEsXG5cdCAgICAgIGxlbmd0aCA9IGFycmF5ID09IG51bGwgPyAwIDogYXJyYXkubGVuZ3RoLFxuXHQgICAgICByZXN1bHQgPSBBcnJheShsZW5ndGgpO1xuXG5cdCAgd2hpbGUgKCsraW5kZXggPCBsZW5ndGgpIHtcblx0ICAgIHJlc3VsdFtpbmRleF0gPSBpdGVyYXRlZShhcnJheVtpbmRleF0sIGluZGV4LCBhcnJheSk7XG5cdCAgfVxuXHQgIHJldHVybiByZXN1bHQ7XG5cdH1cblxuXHRfYXJyYXlNYXAgPSBhcnJheU1hcDtcblx0cmV0dXJuIF9hcnJheU1hcDtcbn1cblxudmFyIF9iYXNlVG9TdHJpbmc7XG52YXIgaGFzUmVxdWlyZWRfYmFzZVRvU3RyaW5nO1xuXG5mdW5jdGlvbiByZXF1aXJlX2Jhc2VUb1N0cmluZyAoKSB7XG5cdGlmIChoYXNSZXF1aXJlZF9iYXNlVG9TdHJpbmcpIHJldHVybiBfYmFzZVRvU3RyaW5nO1xuXHRoYXNSZXF1aXJlZF9iYXNlVG9TdHJpbmcgPSAxO1xuXHR2YXIgU3ltYm9sID0gcmVxdWlyZV9TeW1ib2woKSxcblx0ICAgIGFycmF5TWFwID0gcmVxdWlyZV9hcnJheU1hcCgpLFxuXHQgICAgaXNBcnJheSA9IHJlcXVpcmVJc0FycmF5KCksXG5cdCAgICBpc1N5bWJvbCA9IHJlcXVpcmVJc1N5bWJvbCgpO1xuXG5cdC8qKiBVc2VkIHRvIGNvbnZlcnQgc3ltYm9scyB0byBwcmltaXRpdmVzIGFuZCBzdHJpbmdzLiAqL1xuXHR2YXIgc3ltYm9sUHJvdG8gPSBTeW1ib2wgPyBTeW1ib2wucHJvdG90eXBlIDogdW5kZWZpbmVkLFxuXHQgICAgc3ltYm9sVG9TdHJpbmcgPSBzeW1ib2xQcm90byA/IHN5bWJvbFByb3RvLnRvU3RyaW5nIDogdW5kZWZpbmVkO1xuXG5cdC8qKlxuXHQgKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy50b1N0cmluZ2Agd2hpY2ggZG9lc24ndCBjb252ZXJ0IG51bGxpc2hcblx0ICogdmFsdWVzIHRvIGVtcHR5IHN0cmluZ3MuXG5cdCAqXG5cdCAqIEBwcml2YXRlXG5cdCAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIHByb2Nlc3MuXG5cdCAqIEByZXR1cm5zIHtzdHJpbmd9IFJldHVybnMgdGhlIHN0cmluZy5cblx0ICovXG5cdGZ1bmN0aW9uIGJhc2VUb1N0cmluZyh2YWx1ZSkge1xuXHQgIC8vIEV4aXQgZWFybHkgZm9yIHN0cmluZ3MgdG8gYXZvaWQgYSBwZXJmb3JtYW5jZSBoaXQgaW4gc29tZSBlbnZpcm9ubWVudHMuXG5cdCAgaWYgKHR5cGVvZiB2YWx1ZSA9PSAnc3RyaW5nJykge1xuXHQgICAgcmV0dXJuIHZhbHVlO1xuXHQgIH1cblx0ICBpZiAoaXNBcnJheSh2YWx1ZSkpIHtcblx0ICAgIC8vIFJlY3Vyc2l2ZWx5IGNvbnZlcnQgdmFsdWVzIChzdXNjZXB0aWJsZSB0byBjYWxsIHN0YWNrIGxpbWl0cykuXG5cdCAgICByZXR1cm4gYXJyYXlNYXAodmFsdWUsIGJhc2VUb1N0cmluZykgKyAnJztcblx0ICB9XG5cdCAgaWYgKGlzU3ltYm9sKHZhbHVlKSkge1xuXHQgICAgcmV0dXJuIHN5bWJvbFRvU3RyaW5nID8gc3ltYm9sVG9TdHJpbmcuY2FsbCh2YWx1ZSkgOiAnJztcblx0ICB9XG5cdCAgdmFyIHJlc3VsdCA9ICh2YWx1ZSArICcnKTtcblx0ICByZXR1cm4gKHJlc3VsdCA9PSAnMCcgJiYgKDEgLyB2YWx1ZSkgPT0gLUluZmluaXR5KSA/ICctMCcgOiByZXN1bHQ7XG5cdH1cblxuXHRfYmFzZVRvU3RyaW5nID0gYmFzZVRvU3RyaW5nO1xuXHRyZXR1cm4gX2Jhc2VUb1N0cmluZztcbn1cblxudmFyIHRvU3RyaW5nXzE7XG52YXIgaGFzUmVxdWlyZWRUb1N0cmluZztcblxuZnVuY3Rpb24gcmVxdWlyZVRvU3RyaW5nICgpIHtcblx0aWYgKGhhc1JlcXVpcmVkVG9TdHJpbmcpIHJldHVybiB0b1N0cmluZ18xO1xuXHRoYXNSZXF1aXJlZFRvU3RyaW5nID0gMTtcblx0dmFyIGJhc2VUb1N0cmluZyA9IHJlcXVpcmVfYmFzZVRvU3RyaW5nKCk7XG5cblx0LyoqXG5cdCAqIENvbnZlcnRzIGB2YWx1ZWAgdG8gYSBzdHJpbmcuIEFuIGVtcHR5IHN0cmluZyBpcyByZXR1cm5lZCBmb3IgYG51bGxgXG5cdCAqIGFuZCBgdW5kZWZpbmVkYCB2YWx1ZXMuIFRoZSBzaWduIG9mIGAtMGAgaXMgcHJlc2VydmVkLlxuXHQgKlxuXHQgKiBAc3RhdGljXG5cdCAqIEBtZW1iZXJPZiBfXG5cdCAqIEBzaW5jZSA0LjAuMFxuXHQgKiBAY2F0ZWdvcnkgTGFuZ1xuXHQgKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjb252ZXJ0LlxuXHQgKiBAcmV0dXJucyB7c3RyaW5nfSBSZXR1cm5zIHRoZSBjb252ZXJ0ZWQgc3RyaW5nLlxuXHQgKiBAZXhhbXBsZVxuXHQgKlxuXHQgKiBfLnRvU3RyaW5nKG51bGwpO1xuXHQgKiAvLyA9PiAnJ1xuXHQgKlxuXHQgKiBfLnRvU3RyaW5nKC0wKTtcblx0ICogLy8gPT4gJy0wJ1xuXHQgKlxuXHQgKiBfLnRvU3RyaW5nKFsxLCAyLCAzXSk7XG5cdCAqIC8vID0+ICcxLDIsMydcblx0ICovXG5cdGZ1bmN0aW9uIHRvU3RyaW5nKHZhbHVlKSB7XG5cdCAgcmV0dXJuIHZhbHVlID09IG51bGwgPyAnJyA6IGJhc2VUb1N0cmluZyh2YWx1ZSk7XG5cdH1cblxuXHR0b1N0cmluZ18xID0gdG9TdHJpbmc7XG5cdHJldHVybiB0b1N0cmluZ18xO1xufVxuXG52YXIgX2Nhc3RQYXRoO1xudmFyIGhhc1JlcXVpcmVkX2Nhc3RQYXRoO1xuXG5mdW5jdGlvbiByZXF1aXJlX2Nhc3RQYXRoICgpIHtcblx0aWYgKGhhc1JlcXVpcmVkX2Nhc3RQYXRoKSByZXR1cm4gX2Nhc3RQYXRoO1xuXHRoYXNSZXF1aXJlZF9jYXN0UGF0aCA9IDE7XG5cdHZhciBpc0FycmF5ID0gcmVxdWlyZUlzQXJyYXkoKSxcblx0ICAgIGlzS2V5ID0gcmVxdWlyZV9pc0tleSgpLFxuXHQgICAgc3RyaW5nVG9QYXRoID0gcmVxdWlyZV9zdHJpbmdUb1BhdGgoKSxcblx0ICAgIHRvU3RyaW5nID0gcmVxdWlyZVRvU3RyaW5nKCk7XG5cblx0LyoqXG5cdCAqIENhc3RzIGB2YWx1ZWAgdG8gYSBwYXRoIGFycmF5IGlmIGl0J3Mgbm90IG9uZS5cblx0ICpcblx0ICogQHByaXZhdGVcblx0ICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gaW5zcGVjdC5cblx0ICogQHBhcmFtIHtPYmplY3R9IFtvYmplY3RdIFRoZSBvYmplY3QgdG8gcXVlcnkga2V5cyBvbi5cblx0ICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBjYXN0IHByb3BlcnR5IHBhdGggYXJyYXkuXG5cdCAqL1xuXHRmdW5jdGlvbiBjYXN0UGF0aCh2YWx1ZSwgb2JqZWN0KSB7XG5cdCAgaWYgKGlzQXJyYXkodmFsdWUpKSB7XG5cdCAgICByZXR1cm4gdmFsdWU7XG5cdCAgfVxuXHQgIHJldHVybiBpc0tleSh2YWx1ZSwgb2JqZWN0KSA/IFt2YWx1ZV0gOiBzdHJpbmdUb1BhdGgodG9TdHJpbmcodmFsdWUpKTtcblx0fVxuXG5cdF9jYXN0UGF0aCA9IGNhc3RQYXRoO1xuXHRyZXR1cm4gX2Nhc3RQYXRoO1xufVxuXG52YXIgX3RvS2V5O1xudmFyIGhhc1JlcXVpcmVkX3RvS2V5O1xuXG5mdW5jdGlvbiByZXF1aXJlX3RvS2V5ICgpIHtcblx0aWYgKGhhc1JlcXVpcmVkX3RvS2V5KSByZXR1cm4gX3RvS2V5O1xuXHRoYXNSZXF1aXJlZF90b0tleSA9IDE7XG5cdHZhciBpc1N5bWJvbCA9IHJlcXVpcmVJc1N5bWJvbCgpO1xuXG5cdC8qKlxuXHQgKiBDb252ZXJ0cyBgdmFsdWVgIHRvIGEgc3RyaW5nIGtleSBpZiBpdCdzIG5vdCBhIHN0cmluZyBvciBzeW1ib2wuXG5cdCAqXG5cdCAqIEBwcml2YXRlXG5cdCAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGluc3BlY3QuXG5cdCAqIEByZXR1cm5zIHtzdHJpbmd8c3ltYm9sfSBSZXR1cm5zIHRoZSBrZXkuXG5cdCAqL1xuXHRmdW5jdGlvbiB0b0tleSh2YWx1ZSkge1xuXHQgIGlmICh0eXBlb2YgdmFsdWUgPT0gJ3N0cmluZycgfHwgaXNTeW1ib2wodmFsdWUpKSB7XG5cdCAgICByZXR1cm4gdmFsdWU7XG5cdCAgfVxuXHQgIHZhciByZXN1bHQgPSAodmFsdWUgKyAnJyk7XG5cdCAgcmV0dXJuIChyZXN1bHQgPT0gJzAnICYmICgxIC8gdmFsdWUpID09IC1JbmZpbml0eSkgPyAnLTAnIDogcmVzdWx0O1xuXHR9XG5cblx0X3RvS2V5ID0gdG9LZXk7XG5cdHJldHVybiBfdG9LZXk7XG59XG5cbnZhciBfYmFzZUdldDtcbnZhciBoYXNSZXF1aXJlZF9iYXNlR2V0O1xuXG5mdW5jdGlvbiByZXF1aXJlX2Jhc2VHZXQgKCkge1xuXHRpZiAoaGFzUmVxdWlyZWRfYmFzZUdldCkgcmV0dXJuIF9iYXNlR2V0O1xuXHRoYXNSZXF1aXJlZF9iYXNlR2V0ID0gMTtcblx0dmFyIGNhc3RQYXRoID0gcmVxdWlyZV9jYXN0UGF0aCgpLFxuXHQgICAgdG9LZXkgPSByZXF1aXJlX3RvS2V5KCk7XG5cblx0LyoqXG5cdCAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLmdldGAgd2l0aG91dCBzdXBwb3J0IGZvciBkZWZhdWx0IHZhbHVlcy5cblx0ICpcblx0ICogQHByaXZhdGVcblx0ICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIHF1ZXJ5LlxuXHQgKiBAcGFyYW0ge0FycmF5fHN0cmluZ30gcGF0aCBUaGUgcGF0aCBvZiB0aGUgcHJvcGVydHkgdG8gZ2V0LlxuXHQgKiBAcmV0dXJucyB7Kn0gUmV0dXJucyB0aGUgcmVzb2x2ZWQgdmFsdWUuXG5cdCAqL1xuXHRmdW5jdGlvbiBiYXNlR2V0KG9iamVjdCwgcGF0aCkge1xuXHQgIHBhdGggPSBjYXN0UGF0aChwYXRoLCBvYmplY3QpO1xuXG5cdCAgdmFyIGluZGV4ID0gMCxcblx0ICAgICAgbGVuZ3RoID0gcGF0aC5sZW5ndGg7XG5cblx0ICB3aGlsZSAob2JqZWN0ICE9IG51bGwgJiYgaW5kZXggPCBsZW5ndGgpIHtcblx0ICAgIG9iamVjdCA9IG9iamVjdFt0b0tleShwYXRoW2luZGV4KytdKV07XG5cdCAgfVxuXHQgIHJldHVybiAoaW5kZXggJiYgaW5kZXggPT0gbGVuZ3RoKSA/IG9iamVjdCA6IHVuZGVmaW5lZDtcblx0fVxuXG5cdF9iYXNlR2V0ID0gYmFzZUdldDtcblx0cmV0dXJuIF9iYXNlR2V0O1xufVxuXG52YXIgZ2V0XzE7XG52YXIgaGFzUmVxdWlyZWRHZXQ7XG5cbmZ1bmN0aW9uIHJlcXVpcmVHZXQgKCkge1xuXHRpZiAoaGFzUmVxdWlyZWRHZXQpIHJldHVybiBnZXRfMTtcblx0aGFzUmVxdWlyZWRHZXQgPSAxO1xuXHR2YXIgYmFzZUdldCA9IHJlcXVpcmVfYmFzZUdldCgpO1xuXG5cdC8qKlxuXHQgKiBHZXRzIHRoZSB2YWx1ZSBhdCBgcGF0aGAgb2YgYG9iamVjdGAuIElmIHRoZSByZXNvbHZlZCB2YWx1ZSBpc1xuXHQgKiBgdW5kZWZpbmVkYCwgdGhlIGBkZWZhdWx0VmFsdWVgIGlzIHJldHVybmVkIGluIGl0cyBwbGFjZS5cblx0ICpcblx0ICogQHN0YXRpY1xuXHQgKiBAbWVtYmVyT2YgX1xuXHQgKiBAc2luY2UgMy43LjBcblx0ICogQGNhdGVnb3J5IE9iamVjdFxuXHQgKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3QgdG8gcXVlcnkuXG5cdCAqIEBwYXJhbSB7QXJyYXl8c3RyaW5nfSBwYXRoIFRoZSBwYXRoIG9mIHRoZSBwcm9wZXJ0eSB0byBnZXQuXG5cdCAqIEBwYXJhbSB7Kn0gW2RlZmF1bHRWYWx1ZV0gVGhlIHZhbHVlIHJldHVybmVkIGZvciBgdW5kZWZpbmVkYCByZXNvbHZlZCB2YWx1ZXMuXG5cdCAqIEByZXR1cm5zIHsqfSBSZXR1cm5zIHRoZSByZXNvbHZlZCB2YWx1ZS5cblx0ICogQGV4YW1wbGVcblx0ICpcblx0ICogdmFyIG9iamVjdCA9IHsgJ2EnOiBbeyAnYic6IHsgJ2MnOiAzIH0gfV0gfTtcblx0ICpcblx0ICogXy5nZXQob2JqZWN0LCAnYVswXS5iLmMnKTtcblx0ICogLy8gPT4gM1xuXHQgKlxuXHQgKiBfLmdldChvYmplY3QsIFsnYScsICcwJywgJ2InLCAnYyddKTtcblx0ICogLy8gPT4gM1xuXHQgKlxuXHQgKiBfLmdldChvYmplY3QsICdhLmIuYycsICdkZWZhdWx0Jyk7XG5cdCAqIC8vID0+ICdkZWZhdWx0J1xuXHQgKi9cblx0ZnVuY3Rpb24gZ2V0KG9iamVjdCwgcGF0aCwgZGVmYXVsdFZhbHVlKSB7XG5cdCAgdmFyIHJlc3VsdCA9IG9iamVjdCA9PSBudWxsID8gdW5kZWZpbmVkIDogYmFzZUdldChvYmplY3QsIHBhdGgpO1xuXHQgIHJldHVybiByZXN1bHQgPT09IHVuZGVmaW5lZCA/IGRlZmF1bHRWYWx1ZSA6IHJlc3VsdDtcblx0fVxuXG5cdGdldF8xID0gZ2V0O1xuXHRyZXR1cm4gZ2V0XzE7XG59XG5cbnZhciBnZXRFeHBvcnRzID0gcmVxdWlyZUdldCgpO1xudmFyIGdldCA9IC8qQF9fUFVSRV9fKi9nZXREZWZhdWx0RXhwb3J0RnJvbUNqcyhnZXRFeHBvcnRzKTtcblxudmFyIF9kZWZpbmVQcm9wZXJ0eTtcbnZhciBoYXNSZXF1aXJlZF9kZWZpbmVQcm9wZXJ0eTtcblxuZnVuY3Rpb24gcmVxdWlyZV9kZWZpbmVQcm9wZXJ0eSAoKSB7XG5cdGlmIChoYXNSZXF1aXJlZF9kZWZpbmVQcm9wZXJ0eSkgcmV0dXJuIF9kZWZpbmVQcm9wZXJ0eTtcblx0aGFzUmVxdWlyZWRfZGVmaW5lUHJvcGVydHkgPSAxO1xuXHR2YXIgZ2V0TmF0aXZlID0gcmVxdWlyZV9nZXROYXRpdmUoKTtcblxuXHR2YXIgZGVmaW5lUHJvcGVydHkgPSAoZnVuY3Rpb24oKSB7XG5cdCAgdHJ5IHtcblx0ICAgIHZhciBmdW5jID0gZ2V0TmF0aXZlKE9iamVjdCwgJ2RlZmluZVByb3BlcnR5Jyk7XG5cdCAgICBmdW5jKHt9LCAnJywge30pO1xuXHQgICAgcmV0dXJuIGZ1bmM7XG5cdCAgfSBjYXRjaCAoZSkge31cblx0fSgpKTtcblxuXHRfZGVmaW5lUHJvcGVydHkgPSBkZWZpbmVQcm9wZXJ0eTtcblx0cmV0dXJuIF9kZWZpbmVQcm9wZXJ0eTtcbn1cblxudmFyIF9iYXNlQXNzaWduVmFsdWU7XG52YXIgaGFzUmVxdWlyZWRfYmFzZUFzc2lnblZhbHVlO1xuXG5mdW5jdGlvbiByZXF1aXJlX2Jhc2VBc3NpZ25WYWx1ZSAoKSB7XG5cdGlmIChoYXNSZXF1aXJlZF9iYXNlQXNzaWduVmFsdWUpIHJldHVybiBfYmFzZUFzc2lnblZhbHVlO1xuXHRoYXNSZXF1aXJlZF9iYXNlQXNzaWduVmFsdWUgPSAxO1xuXHR2YXIgZGVmaW5lUHJvcGVydHkgPSByZXF1aXJlX2RlZmluZVByb3BlcnR5KCk7XG5cblx0LyoqXG5cdCAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBhc3NpZ25WYWx1ZWAgYW5kIGBhc3NpZ25NZXJnZVZhbHVlYCB3aXRob3V0XG5cdCAqIHZhbHVlIGNoZWNrcy5cblx0ICpcblx0ICogQHByaXZhdGVcblx0ICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIG1vZGlmeS5cblx0ICogQHBhcmFtIHtzdHJpbmd9IGtleSBUaGUga2V5IG9mIHRoZSBwcm9wZXJ0eSB0byBhc3NpZ24uXG5cdCAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGFzc2lnbi5cblx0ICovXG5cdGZ1bmN0aW9uIGJhc2VBc3NpZ25WYWx1ZShvYmplY3QsIGtleSwgdmFsdWUpIHtcblx0ICBpZiAoa2V5ID09ICdfX3Byb3RvX18nICYmIGRlZmluZVByb3BlcnR5KSB7XG5cdCAgICBkZWZpbmVQcm9wZXJ0eShvYmplY3QsIGtleSwge1xuXHQgICAgICAnY29uZmlndXJhYmxlJzogdHJ1ZSxcblx0ICAgICAgJ2VudW1lcmFibGUnOiB0cnVlLFxuXHQgICAgICAndmFsdWUnOiB2YWx1ZSxcblx0ICAgICAgJ3dyaXRhYmxlJzogdHJ1ZVxuXHQgICAgfSk7XG5cdCAgfSBlbHNlIHtcblx0ICAgIG9iamVjdFtrZXldID0gdmFsdWU7XG5cdCAgfVxuXHR9XG5cblx0X2Jhc2VBc3NpZ25WYWx1ZSA9IGJhc2VBc3NpZ25WYWx1ZTtcblx0cmV0dXJuIF9iYXNlQXNzaWduVmFsdWU7XG59XG5cbnZhciBfYXNzaWduVmFsdWU7XG52YXIgaGFzUmVxdWlyZWRfYXNzaWduVmFsdWU7XG5cbmZ1bmN0aW9uIHJlcXVpcmVfYXNzaWduVmFsdWUgKCkge1xuXHRpZiAoaGFzUmVxdWlyZWRfYXNzaWduVmFsdWUpIHJldHVybiBfYXNzaWduVmFsdWU7XG5cdGhhc1JlcXVpcmVkX2Fzc2lnblZhbHVlID0gMTtcblx0dmFyIGJhc2VBc3NpZ25WYWx1ZSA9IHJlcXVpcmVfYmFzZUFzc2lnblZhbHVlKCksXG5cdCAgICBlcSA9IHJlcXVpcmVFcSgpO1xuXG5cdC8qKiBVc2VkIGZvciBidWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcy4gKi9cblx0dmFyIG9iamVjdFByb3RvID0gT2JqZWN0LnByb3RvdHlwZTtcblxuXHQvKiogVXNlZCB0byBjaGVjayBvYmplY3RzIGZvciBvd24gcHJvcGVydGllcy4gKi9cblx0dmFyIGhhc093blByb3BlcnR5ID0gb2JqZWN0UHJvdG8uaGFzT3duUHJvcGVydHk7XG5cblx0LyoqXG5cdCAqIEFzc2lnbnMgYHZhbHVlYCB0byBga2V5YCBvZiBgb2JqZWN0YCBpZiB0aGUgZXhpc3RpbmcgdmFsdWUgaXMgbm90IGVxdWl2YWxlbnRcblx0ICogdXNpbmcgW2BTYW1lVmFsdWVaZXJvYF0oaHR0cDovL2VjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvNy4wLyNzZWMtc2FtZXZhbHVlemVybylcblx0ICogZm9yIGVxdWFsaXR5IGNvbXBhcmlzb25zLlxuXHQgKlxuXHQgKiBAcHJpdmF0ZVxuXHQgKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3QgdG8gbW9kaWZ5LlxuXHQgKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSBrZXkgb2YgdGhlIHByb3BlcnR5IHRvIGFzc2lnbi5cblx0ICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gYXNzaWduLlxuXHQgKi9cblx0ZnVuY3Rpb24gYXNzaWduVmFsdWUob2JqZWN0LCBrZXksIHZhbHVlKSB7XG5cdCAgdmFyIG9ialZhbHVlID0gb2JqZWN0W2tleV07XG5cdCAgaWYgKCEoaGFzT3duUHJvcGVydHkuY2FsbChvYmplY3QsIGtleSkgJiYgZXEob2JqVmFsdWUsIHZhbHVlKSkgfHxcblx0ICAgICAgKHZhbHVlID09PSB1bmRlZmluZWQgJiYgIShrZXkgaW4gb2JqZWN0KSkpIHtcblx0ICAgIGJhc2VBc3NpZ25WYWx1ZShvYmplY3QsIGtleSwgdmFsdWUpO1xuXHQgIH1cblx0fVxuXG5cdF9hc3NpZ25WYWx1ZSA9IGFzc2lnblZhbHVlO1xuXHRyZXR1cm4gX2Fzc2lnblZhbHVlO1xufVxuXG4vKiogVXNlZCBhcyByZWZlcmVuY2VzIGZvciB2YXJpb3VzIGBOdW1iZXJgIGNvbnN0YW50cy4gKi9cblxudmFyIF9pc0luZGV4O1xudmFyIGhhc1JlcXVpcmVkX2lzSW5kZXg7XG5cbmZ1bmN0aW9uIHJlcXVpcmVfaXNJbmRleCAoKSB7XG5cdGlmIChoYXNSZXF1aXJlZF9pc0luZGV4KSByZXR1cm4gX2lzSW5kZXg7XG5cdGhhc1JlcXVpcmVkX2lzSW5kZXggPSAxO1xuXHR2YXIgTUFYX1NBRkVfSU5URUdFUiA9IDkwMDcxOTkyNTQ3NDA5OTE7XG5cblx0LyoqIFVzZWQgdG8gZGV0ZWN0IHVuc2lnbmVkIGludGVnZXIgdmFsdWVzLiAqL1xuXHR2YXIgcmVJc1VpbnQgPSAvXig/OjB8WzEtOV1cXGQqKSQvO1xuXG5cdC8qKlxuXHQgKiBDaGVja3MgaWYgYHZhbHVlYCBpcyBhIHZhbGlkIGFycmF5LWxpa2UgaW5kZXguXG5cdCAqXG5cdCAqIEBwcml2YXRlXG5cdCAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuXHQgKiBAcGFyYW0ge251bWJlcn0gW2xlbmd0aD1NQVhfU0FGRV9JTlRFR0VSXSBUaGUgdXBwZXIgYm91bmRzIG9mIGEgdmFsaWQgaW5kZXguXG5cdCAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGEgdmFsaWQgaW5kZXgsIGVsc2UgYGZhbHNlYC5cblx0ICovXG5cdGZ1bmN0aW9uIGlzSW5kZXgodmFsdWUsIGxlbmd0aCkge1xuXHQgIHZhciB0eXBlID0gdHlwZW9mIHZhbHVlO1xuXHQgIGxlbmd0aCA9IGxlbmd0aCA9PSBudWxsID8gTUFYX1NBRkVfSU5URUdFUiA6IGxlbmd0aDtcblxuXHQgIHJldHVybiAhIWxlbmd0aCAmJlxuXHQgICAgKHR5cGUgPT0gJ251bWJlcicgfHxcblx0ICAgICAgKHR5cGUgIT0gJ3N5bWJvbCcgJiYgcmVJc1VpbnQudGVzdCh2YWx1ZSkpKSAmJlxuXHQgICAgICAgICh2YWx1ZSA+IC0xICYmIHZhbHVlICUgMSA9PSAwICYmIHZhbHVlIDwgbGVuZ3RoKTtcblx0fVxuXG5cdF9pc0luZGV4ID0gaXNJbmRleDtcblx0cmV0dXJuIF9pc0luZGV4O1xufVxuXG52YXIgX2Jhc2VTZXQ7XG52YXIgaGFzUmVxdWlyZWRfYmFzZVNldDtcblxuZnVuY3Rpb24gcmVxdWlyZV9iYXNlU2V0ICgpIHtcblx0aWYgKGhhc1JlcXVpcmVkX2Jhc2VTZXQpIHJldHVybiBfYmFzZVNldDtcblx0aGFzUmVxdWlyZWRfYmFzZVNldCA9IDE7XG5cdHZhciBhc3NpZ25WYWx1ZSA9IHJlcXVpcmVfYXNzaWduVmFsdWUoKSxcblx0ICAgIGNhc3RQYXRoID0gcmVxdWlyZV9jYXN0UGF0aCgpLFxuXHQgICAgaXNJbmRleCA9IHJlcXVpcmVfaXNJbmRleCgpLFxuXHQgICAgaXNPYmplY3QgPSByZXF1aXJlSXNPYmplY3QoKSxcblx0ICAgIHRvS2V5ID0gcmVxdWlyZV90b0tleSgpO1xuXG5cdC8qKlxuXHQgKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy5zZXRgLlxuXHQgKlxuXHQgKiBAcHJpdmF0ZVxuXHQgKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3QgdG8gbW9kaWZ5LlxuXHQgKiBAcGFyYW0ge0FycmF5fHN0cmluZ30gcGF0aCBUaGUgcGF0aCBvZiB0aGUgcHJvcGVydHkgdG8gc2V0LlxuXHQgKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBzZXQuXG5cdCAqIEBwYXJhbSB7RnVuY3Rpb259IFtjdXN0b21pemVyXSBUaGUgZnVuY3Rpb24gdG8gY3VzdG9taXplIHBhdGggY3JlYXRpb24uXG5cdCAqIEByZXR1cm5zIHtPYmplY3R9IFJldHVybnMgYG9iamVjdGAuXG5cdCAqL1xuXHRmdW5jdGlvbiBiYXNlU2V0KG9iamVjdCwgcGF0aCwgdmFsdWUsIGN1c3RvbWl6ZXIpIHtcblx0ICBpZiAoIWlzT2JqZWN0KG9iamVjdCkpIHtcblx0ICAgIHJldHVybiBvYmplY3Q7XG5cdCAgfVxuXHQgIHBhdGggPSBjYXN0UGF0aChwYXRoLCBvYmplY3QpO1xuXG5cdCAgdmFyIGluZGV4ID0gLTEsXG5cdCAgICAgIGxlbmd0aCA9IHBhdGgubGVuZ3RoLFxuXHQgICAgICBsYXN0SW5kZXggPSBsZW5ndGggLSAxLFxuXHQgICAgICBuZXN0ZWQgPSBvYmplY3Q7XG5cblx0ICB3aGlsZSAobmVzdGVkICE9IG51bGwgJiYgKytpbmRleCA8IGxlbmd0aCkge1xuXHQgICAgdmFyIGtleSA9IHRvS2V5KHBhdGhbaW5kZXhdKSxcblx0ICAgICAgICBuZXdWYWx1ZSA9IHZhbHVlO1xuXG5cdCAgICBpZiAoa2V5ID09PSAnX19wcm90b19fJyB8fCBrZXkgPT09ICdjb25zdHJ1Y3RvcicgfHwga2V5ID09PSAncHJvdG90eXBlJykge1xuXHQgICAgICByZXR1cm4gb2JqZWN0O1xuXHQgICAgfVxuXG5cdCAgICBpZiAoaW5kZXggIT0gbGFzdEluZGV4KSB7XG5cdCAgICAgIHZhciBvYmpWYWx1ZSA9IG5lc3RlZFtrZXldO1xuXHQgICAgICBuZXdWYWx1ZSA9IGN1c3RvbWl6ZXIgPyBjdXN0b21pemVyKG9ialZhbHVlLCBrZXksIG5lc3RlZCkgOiB1bmRlZmluZWQ7XG5cdCAgICAgIGlmIChuZXdWYWx1ZSA9PT0gdW5kZWZpbmVkKSB7XG5cdCAgICAgICAgbmV3VmFsdWUgPSBpc09iamVjdChvYmpWYWx1ZSlcblx0ICAgICAgICAgID8gb2JqVmFsdWVcblx0ICAgICAgICAgIDogKGlzSW5kZXgocGF0aFtpbmRleCArIDFdKSA/IFtdIDoge30pO1xuXHQgICAgICB9XG5cdCAgICB9XG5cdCAgICBhc3NpZ25WYWx1ZShuZXN0ZWQsIGtleSwgbmV3VmFsdWUpO1xuXHQgICAgbmVzdGVkID0gbmVzdGVkW2tleV07XG5cdCAgfVxuXHQgIHJldHVybiBvYmplY3Q7XG5cdH1cblxuXHRfYmFzZVNldCA9IGJhc2VTZXQ7XG5cdHJldHVybiBfYmFzZVNldDtcbn1cblxudmFyIHNldF8xO1xudmFyIGhhc1JlcXVpcmVkU2V0O1xuXG5mdW5jdGlvbiByZXF1aXJlU2V0ICgpIHtcblx0aWYgKGhhc1JlcXVpcmVkU2V0KSByZXR1cm4gc2V0XzE7XG5cdGhhc1JlcXVpcmVkU2V0ID0gMTtcblx0dmFyIGJhc2VTZXQgPSByZXF1aXJlX2Jhc2VTZXQoKTtcblxuXHQvKipcblx0ICogU2V0cyB0aGUgdmFsdWUgYXQgYHBhdGhgIG9mIGBvYmplY3RgLiBJZiBhIHBvcnRpb24gb2YgYHBhdGhgIGRvZXNuJ3QgZXhpc3QsXG5cdCAqIGl0J3MgY3JlYXRlZC4gQXJyYXlzIGFyZSBjcmVhdGVkIGZvciBtaXNzaW5nIGluZGV4IHByb3BlcnRpZXMgd2hpbGUgb2JqZWN0c1xuXHQgKiBhcmUgY3JlYXRlZCBmb3IgYWxsIG90aGVyIG1pc3NpbmcgcHJvcGVydGllcy4gVXNlIGBfLnNldFdpdGhgIHRvIGN1c3RvbWl6ZVxuXHQgKiBgcGF0aGAgY3JlYXRpb24uXG5cdCAqXG5cdCAqICoqTm90ZToqKiBUaGlzIG1ldGhvZCBtdXRhdGVzIGBvYmplY3RgLlxuXHQgKlxuXHQgKiBAc3RhdGljXG5cdCAqIEBtZW1iZXJPZiBfXG5cdCAqIEBzaW5jZSAzLjcuMFxuXHQgKiBAY2F0ZWdvcnkgT2JqZWN0XG5cdCAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBtb2RpZnkuXG5cdCAqIEBwYXJhbSB7QXJyYXl8c3RyaW5nfSBwYXRoIFRoZSBwYXRoIG9mIHRoZSBwcm9wZXJ0eSB0byBzZXQuXG5cdCAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIHNldC5cblx0ICogQHJldHVybnMge09iamVjdH0gUmV0dXJucyBgb2JqZWN0YC5cblx0ICogQGV4YW1wbGVcblx0ICpcblx0ICogdmFyIG9iamVjdCA9IHsgJ2EnOiBbeyAnYic6IHsgJ2MnOiAzIH0gfV0gfTtcblx0ICpcblx0ICogXy5zZXQob2JqZWN0LCAnYVswXS5iLmMnLCA0KTtcblx0ICogY29uc29sZS5sb2cob2JqZWN0LmFbMF0uYi5jKTtcblx0ICogLy8gPT4gNFxuXHQgKlxuXHQgKiBfLnNldChvYmplY3QsIFsneCcsICcwJywgJ3knLCAneiddLCA1KTtcblx0ICogY29uc29sZS5sb2cob2JqZWN0LnhbMF0ueS56KTtcblx0ICogLy8gPT4gNVxuXHQgKi9cblx0ZnVuY3Rpb24gc2V0KG9iamVjdCwgcGF0aCwgdmFsdWUpIHtcblx0ICByZXR1cm4gb2JqZWN0ID09IG51bGwgPyBvYmplY3QgOiBiYXNlU2V0KG9iamVjdCwgcGF0aCwgdmFsdWUpO1xuXHR9XG5cblx0c2V0XzEgPSBzZXQ7XG5cdHJldHVybiBzZXRfMTtcbn1cblxudmFyIHNldEV4cG9ydHMgPSByZXF1aXJlU2V0KCk7XG52YXIgc2V0ID0gLypAX19QVVJFX18qL2dldERlZmF1bHRFeHBvcnRGcm9tQ2pzKHNldEV4cG9ydHMpO1xuXG4vKipcbiAqIENvcGllcyB0aGUgdmFsdWVzIG9mIGBzb3VyY2VgIHRvIGBhcnJheWAuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7QXJyYXl9IHNvdXJjZSBUaGUgYXJyYXkgdG8gY29weSB2YWx1ZXMgZnJvbS5cbiAqIEBwYXJhbSB7QXJyYXl9IFthcnJheT1bXV0gVGhlIGFycmF5IHRvIGNvcHkgdmFsdWVzIHRvLlxuICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIGBhcnJheWAuXG4gKi9cblxudmFyIF9jb3B5QXJyYXk7XG52YXIgaGFzUmVxdWlyZWRfY29weUFycmF5O1xuXG5mdW5jdGlvbiByZXF1aXJlX2NvcHlBcnJheSAoKSB7XG5cdGlmIChoYXNSZXF1aXJlZF9jb3B5QXJyYXkpIHJldHVybiBfY29weUFycmF5O1xuXHRoYXNSZXF1aXJlZF9jb3B5QXJyYXkgPSAxO1xuXHRmdW5jdGlvbiBjb3B5QXJyYXkoc291cmNlLCBhcnJheSkge1xuXHQgIHZhciBpbmRleCA9IC0xLFxuXHQgICAgICBsZW5ndGggPSBzb3VyY2UubGVuZ3RoO1xuXG5cdCAgYXJyYXkgfHwgKGFycmF5ID0gQXJyYXkobGVuZ3RoKSk7XG5cdCAgd2hpbGUgKCsraW5kZXggPCBsZW5ndGgpIHtcblx0ICAgIGFycmF5W2luZGV4XSA9IHNvdXJjZVtpbmRleF07XG5cdCAgfVxuXHQgIHJldHVybiBhcnJheTtcblx0fVxuXG5cdF9jb3B5QXJyYXkgPSBjb3B5QXJyYXk7XG5cdHJldHVybiBfY29weUFycmF5O1xufVxuXG52YXIgdG9QYXRoXzE7XG52YXIgaGFzUmVxdWlyZWRUb1BhdGg7XG5cbmZ1bmN0aW9uIHJlcXVpcmVUb1BhdGggKCkge1xuXHRpZiAoaGFzUmVxdWlyZWRUb1BhdGgpIHJldHVybiB0b1BhdGhfMTtcblx0aGFzUmVxdWlyZWRUb1BhdGggPSAxO1xuXHR2YXIgYXJyYXlNYXAgPSByZXF1aXJlX2FycmF5TWFwKCksXG5cdCAgICBjb3B5QXJyYXkgPSByZXF1aXJlX2NvcHlBcnJheSgpLFxuXHQgICAgaXNBcnJheSA9IHJlcXVpcmVJc0FycmF5KCksXG5cdCAgICBpc1N5bWJvbCA9IHJlcXVpcmVJc1N5bWJvbCgpLFxuXHQgICAgc3RyaW5nVG9QYXRoID0gcmVxdWlyZV9zdHJpbmdUb1BhdGgoKSxcblx0ICAgIHRvS2V5ID0gcmVxdWlyZV90b0tleSgpLFxuXHQgICAgdG9TdHJpbmcgPSByZXF1aXJlVG9TdHJpbmcoKTtcblxuXHQvKipcblx0ICogQ29udmVydHMgYHZhbHVlYCB0byBhIHByb3BlcnR5IHBhdGggYXJyYXkuXG5cdCAqXG5cdCAqIEBzdGF0aWNcblx0ICogQG1lbWJlck9mIF9cblx0ICogQHNpbmNlIDQuMC4wXG5cdCAqIEBjYXRlZ29yeSBVdGlsXG5cdCAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNvbnZlcnQuXG5cdCAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgbmV3IHByb3BlcnR5IHBhdGggYXJyYXkuXG5cdCAqIEBleGFtcGxlXG5cdCAqXG5cdCAqIF8udG9QYXRoKCdhLmIuYycpO1xuXHQgKiAvLyA9PiBbJ2EnLCAnYicsICdjJ11cblx0ICpcblx0ICogXy50b1BhdGgoJ2FbMF0uYi5jJyk7XG5cdCAqIC8vID0+IFsnYScsICcwJywgJ2InLCAnYyddXG5cdCAqL1xuXHRmdW5jdGlvbiB0b1BhdGgodmFsdWUpIHtcblx0ICBpZiAoaXNBcnJheSh2YWx1ZSkpIHtcblx0ICAgIHJldHVybiBhcnJheU1hcCh2YWx1ZSwgdG9LZXkpO1xuXHQgIH1cblx0ICByZXR1cm4gaXNTeW1ib2wodmFsdWUpID8gW3ZhbHVlXSA6IGNvcHlBcnJheShzdHJpbmdUb1BhdGgodG9TdHJpbmcodmFsdWUpKSk7XG5cdH1cblxuXHR0b1BhdGhfMSA9IHRvUGF0aDtcblx0cmV0dXJuIHRvUGF0aF8xO1xufVxuXG52YXIgdG9QYXRoRXhwb3J0cyA9IHJlcXVpcmVUb1BhdGgoKTtcbnZhciB0b1BhdGggPSAvKkBfX1BVUkVfXyovZ2V0RGVmYXVsdEV4cG9ydEZyb21DanModG9QYXRoRXhwb3J0cyk7XG5cbnZhciBkZWZpbmUkMiA9IHtcbiAgLy8gYWNjZXNzIGRhdGEgZmllbGRcbiAgZGF0YTogZnVuY3Rpb24gZGF0YShwYXJhbXMpIHtcbiAgICB2YXIgZGVmYXVsdHMgPSB7XG4gICAgICBmaWVsZDogJ2RhdGEnLFxuICAgICAgYmluZGluZ0V2ZW50OiAnZGF0YScsXG4gICAgICBhbGxvd0JpbmRpbmc6IGZhbHNlLFxuICAgICAgYWxsb3dTZXR0aW5nOiBmYWxzZSxcbiAgICAgIGFsbG93R2V0dGluZzogZmFsc2UsXG4gICAgICBzZXR0aW5nRXZlbnQ6ICdkYXRhJyxcbiAgICAgIHNldHRpbmdUcmlnZ2Vyc0V2ZW50OiBmYWxzZSxcbiAgICAgIHRyaWdnZXJGbk5hbWU6ICd0cmlnZ2VyJyxcbiAgICAgIGltbXV0YWJsZUtleXM6IHt9LFxuICAgICAgLy8ga2V5ID0+IHRydWUgaWYgaW1tdXRhYmxlXG4gICAgICB1cGRhdGVTdHlsZTogZmFsc2UsXG4gICAgICBiZWZvcmVHZXQ6IGZ1bmN0aW9uIGJlZm9yZUdldChzZWxmKSB7fSxcbiAgICAgIGJlZm9yZVNldDogZnVuY3Rpb24gYmVmb3JlU2V0KHNlbGYsIG9iaikge30sXG4gICAgICBvblNldDogZnVuY3Rpb24gb25TZXQoc2VsZikge30sXG4gICAgICBjYW5TZXQ6IGZ1bmN0aW9uIGNhblNldChzZWxmKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgIH07XG4gICAgcGFyYW1zID0gZXh0ZW5kKHt9LCBkZWZhdWx0cywgcGFyYW1zKTtcbiAgICByZXR1cm4gZnVuY3Rpb24gZGF0YUltcGwobmFtZSwgdmFsdWUpIHtcbiAgICAgIHZhciBwID0gcGFyYW1zO1xuICAgICAgdmFyIHNlbGYgPSB0aGlzO1xuICAgICAgdmFyIHNlbGZJc0FycmF5TGlrZSA9IHNlbGYubGVuZ3RoICE9PSB1bmRlZmluZWQ7XG4gICAgICB2YXIgYWxsID0gc2VsZklzQXJyYXlMaWtlID8gc2VsZiA6IFtzZWxmXTsgLy8gcHV0IGluIGFycmF5IGlmIG5vdCBhcnJheS1saWtlXG4gICAgICB2YXIgc2luZ2xlID0gc2VsZklzQXJyYXlMaWtlID8gc2VsZlswXSA6IHNlbGY7XG5cbiAgICAgIC8vIC5kYXRhKCdmb28nLCAuLi4pXG4gICAgICBpZiAoc3RyaW5nKG5hbWUpKSB7XG4gICAgICAgIC8vIHNldCBvciBnZXQgcHJvcGVydHlcbiAgICAgICAgdmFyIGlzUGF0aExpa2UgPSBuYW1lLmluZGV4T2YoJy4nKSAhPT0gLTE7IC8vIHRoZXJlIG1pZ2h0IGJlIGEgbm9ybWFsIGZpZWxkIHdpdGggYSBkb3QgXG4gICAgICAgIHZhciBwYXRoID0gaXNQYXRoTGlrZSAmJiB0b1BhdGgobmFtZSk7XG5cbiAgICAgICAgLy8gLmRhdGEoJ2ZvbycpXG4gICAgICAgIGlmIChwLmFsbG93R2V0dGluZyAmJiB2YWx1ZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgLy8gZ2V0XG5cbiAgICAgICAgICB2YXIgcmV0O1xuICAgICAgICAgIGlmIChzaW5nbGUpIHtcbiAgICAgICAgICAgIHAuYmVmb3JlR2V0KHNpbmdsZSk7XG5cbiAgICAgICAgICAgIC8vIGNoZWNrIGlmIGl0J3MgcGF0aCBhbmQgYSBmaWVsZCB3aXRoIHRoZSBzYW1lIG5hbWUgZG9lc24ndCBleGlzdFxuICAgICAgICAgICAgaWYgKHBhdGggJiYgc2luZ2xlLl9wcml2YXRlW3AuZmllbGRdW25hbWVdID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgcmV0ID0gZ2V0KHNpbmdsZS5fcHJpdmF0ZVtwLmZpZWxkXSwgcGF0aCk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICByZXQgPSBzaW5nbGUuX3ByaXZhdGVbcC5maWVsZF1bbmFtZV07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiByZXQ7XG5cbiAgICAgICAgICAvLyAuZGF0YSgnZm9vJywgJ2JhcicpXG4gICAgICAgIH0gZWxzZSBpZiAocC5hbGxvd1NldHRpbmcgJiYgdmFsdWUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIC8vIHNldFxuICAgICAgICAgIHZhciB2YWxpZCA9ICFwLmltbXV0YWJsZUtleXNbbmFtZV07XG4gICAgICAgICAgaWYgKHZhbGlkKSB7XG4gICAgICAgICAgICB2YXIgY2hhbmdlID0gX2RlZmluZVByb3BlcnR5JDEoe30sIG5hbWUsIHZhbHVlKTtcbiAgICAgICAgICAgIHAuYmVmb3JlU2V0KHNlbGYsIGNoYW5nZSk7XG4gICAgICAgICAgICBmb3IgKHZhciBpID0gMCwgbCA9IGFsbC5sZW5ndGg7IGkgPCBsOyBpKyspIHtcbiAgICAgICAgICAgICAgdmFyIGVsZSA9IGFsbFtpXTtcbiAgICAgICAgICAgICAgaWYgKHAuY2FuU2V0KGVsZSkpIHtcbiAgICAgICAgICAgICAgICBpZiAocGF0aCAmJiBzaW5nbGUuX3ByaXZhdGVbcC5maWVsZF1bbmFtZV0gPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgICAgc2V0KGVsZS5fcHJpdmF0ZVtwLmZpZWxkXSwgcGF0aCwgdmFsdWUpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICBlbGUuX3ByaXZhdGVbcC5maWVsZF1bbmFtZV0gPSB2YWx1ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLy8gdXBkYXRlIG1hcHBlcnMgaWYgYXNrZWRcbiAgICAgICAgICAgIGlmIChwLnVwZGF0ZVN0eWxlKSB7XG4gICAgICAgICAgICAgIHNlbGYudXBkYXRlU3R5bGUoKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLy8gY2FsbCBvblNldCBjYWxsYmFja1xuICAgICAgICAgICAgcC5vblNldChzZWxmKTtcbiAgICAgICAgICAgIGlmIChwLnNldHRpbmdUcmlnZ2Vyc0V2ZW50KSB7XG4gICAgICAgICAgICAgIHNlbGZbcC50cmlnZ2VyRm5OYW1lXShwLnNldHRpbmdFdmVudCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgLy8gLmRhdGEoeyAnZm9vJzogJ2JhcicgfSlcbiAgICAgIH0gZWxzZSBpZiAocC5hbGxvd1NldHRpbmcgJiYgcGxhaW5PYmplY3QobmFtZSkpIHtcbiAgICAgICAgLy8gZXh0ZW5kXG4gICAgICAgIHZhciBvYmogPSBuYW1lO1xuICAgICAgICB2YXIgaywgdjtcbiAgICAgICAgdmFyIGtleXMgPSBPYmplY3Qua2V5cyhvYmopO1xuICAgICAgICBwLmJlZm9yZVNldChzZWxmLCBvYmopO1xuICAgICAgICBmb3IgKHZhciBfaSA9IDA7IF9pIDwga2V5cy5sZW5ndGg7IF9pKyspIHtcbiAgICAgICAgICBrID0ga2V5c1tfaV07XG4gICAgICAgICAgdiA9IG9ialtrXTtcbiAgICAgICAgICB2YXIgX3ZhbGlkID0gIXAuaW1tdXRhYmxlS2V5c1trXTtcbiAgICAgICAgICBpZiAoX3ZhbGlkKSB7XG4gICAgICAgICAgICBmb3IgKHZhciBqID0gMDsgaiA8IGFsbC5sZW5ndGg7IGorKykge1xuICAgICAgICAgICAgICB2YXIgX2VsZSA9IGFsbFtqXTtcbiAgICAgICAgICAgICAgaWYgKHAuY2FuU2V0KF9lbGUpKSB7XG4gICAgICAgICAgICAgICAgX2VsZS5fcHJpdmF0ZVtwLmZpZWxkXVtrXSA9IHY7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICAvLyB1cGRhdGUgbWFwcGVycyBpZiBhc2tlZFxuICAgICAgICBpZiAocC51cGRhdGVTdHlsZSkge1xuICAgICAgICAgIHNlbGYudXBkYXRlU3R5bGUoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIGNhbGwgb25TZXQgY2FsbGJhY2tcbiAgICAgICAgcC5vblNldChzZWxmKTtcbiAgICAgICAgaWYgKHAuc2V0dGluZ1RyaWdnZXJzRXZlbnQpIHtcbiAgICAgICAgICBzZWxmW3AudHJpZ2dlckZuTmFtZV0ocC5zZXR0aW5nRXZlbnQpO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gLmRhdGEoZnVuY3Rpb24oKXsgLi4uIH0pXG4gICAgICB9IGVsc2UgaWYgKHAuYWxsb3dCaW5kaW5nICYmIGZuJDYobmFtZSkpIHtcbiAgICAgICAgLy8gYmluZCB0byBldmVudFxuICAgICAgICB2YXIgZm4gPSBuYW1lO1xuICAgICAgICBzZWxmLm9uKHAuYmluZGluZ0V2ZW50LCBmbik7XG5cbiAgICAgICAgLy8gLmRhdGEoKVxuICAgICAgfSBlbHNlIGlmIChwLmFsbG93R2V0dGluZyAmJiBuYW1lID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgLy8gZ2V0IHdob2xlIG9iamVjdFxuICAgICAgICB2YXIgX3JldDtcbiAgICAgICAgaWYgKHNpbmdsZSkge1xuICAgICAgICAgIHAuYmVmb3JlR2V0KHNpbmdsZSk7XG4gICAgICAgICAgX3JldCA9IHNpbmdsZS5fcHJpdmF0ZVtwLmZpZWxkXTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gX3JldDtcbiAgICAgIH1cbiAgICAgIHJldHVybiBzZWxmOyAvLyBtYWludGFpbiBjaGFpbmFiaWxpdHlcbiAgICB9OyAvLyBmdW5jdGlvblxuICB9LFxuICAvLyBkYXRhXG5cbiAgLy8gcmVtb3ZlIGRhdGEgZmllbGRcbiAgcmVtb3ZlRGF0YTogZnVuY3Rpb24gcmVtb3ZlRGF0YShwYXJhbXMpIHtcbiAgICB2YXIgZGVmYXVsdHMgPSB7XG4gICAgICBmaWVsZDogJ2RhdGEnLFxuICAgICAgZXZlbnQ6ICdkYXRhJyxcbiAgICAgIHRyaWdnZXJGbk5hbWU6ICd0cmlnZ2VyJyxcbiAgICAgIHRyaWdnZXJFdmVudDogZmFsc2UsXG4gICAgICBpbW11dGFibGVLZXlzOiB7fSAvLyBrZXkgPT4gdHJ1ZSBpZiBpbW11dGFibGVcbiAgICB9O1xuICAgIHBhcmFtcyA9IGV4dGVuZCh7fSwgZGVmYXVsdHMsIHBhcmFtcyk7XG4gICAgcmV0dXJuIGZ1bmN0aW9uIHJlbW92ZURhdGFJbXBsKG5hbWVzKSB7XG4gICAgICB2YXIgcCA9IHBhcmFtcztcbiAgICAgIHZhciBzZWxmID0gdGhpcztcbiAgICAgIHZhciBzZWxmSXNBcnJheUxpa2UgPSBzZWxmLmxlbmd0aCAhPT0gdW5kZWZpbmVkO1xuICAgICAgdmFyIGFsbCA9IHNlbGZJc0FycmF5TGlrZSA/IHNlbGYgOiBbc2VsZl07IC8vIHB1dCBpbiBhcnJheSBpZiBub3QgYXJyYXktbGlrZVxuXG4gICAgICAvLyAucmVtb3ZlRGF0YSgnZm9vIGJhcicpXG4gICAgICBpZiAoc3RyaW5nKG5hbWVzKSkge1xuICAgICAgICAvLyB0aGVuIGdldCB0aGUgbGlzdCBvZiBrZXlzLCBhbmQgZGVsZXRlIHRoZW1cbiAgICAgICAgdmFyIGtleXMgPSBuYW1lcy5zcGxpdCgvXFxzKy8pO1xuICAgICAgICB2YXIgbCA9IGtleXMubGVuZ3RoO1xuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGw7IGkrKykge1xuICAgICAgICAgIC8vIGRlbGV0ZSBlYWNoIG5vbi1lbXB0eSBrZXlcbiAgICAgICAgICB2YXIga2V5ID0ga2V5c1tpXTtcbiAgICAgICAgICBpZiAoZW1wdHlTdHJpbmcoa2V5KSkge1xuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgfVxuICAgICAgICAgIHZhciB2YWxpZCA9ICFwLmltbXV0YWJsZUtleXNba2V5XTsgLy8gbm90IHZhbGlkIGlmIGltbXV0YWJsZVxuICAgICAgICAgIGlmICh2YWxpZCkge1xuICAgICAgICAgICAgZm9yICh2YXIgaV9hID0gMCwgbF9hID0gYWxsLmxlbmd0aDsgaV9hIDwgbF9hOyBpX2ErKykge1xuICAgICAgICAgICAgICBhbGxbaV9hXS5fcHJpdmF0ZVtwLmZpZWxkXVtrZXldID0gdW5kZWZpbmVkO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAocC50cmlnZ2VyRXZlbnQpIHtcbiAgICAgICAgICBzZWxmW3AudHJpZ2dlckZuTmFtZV0ocC5ldmVudCk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyAucmVtb3ZlRGF0YSgpXG4gICAgICB9IGVsc2UgaWYgKG5hbWVzID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgLy8gdGhlbiBkZWxldGUgYWxsIGtleXNcblxuICAgICAgICBmb3IgKHZhciBfaV9hID0gMCwgX2xfYSA9IGFsbC5sZW5ndGg7IF9pX2EgPCBfbF9hOyBfaV9hKyspIHtcbiAgICAgICAgICB2YXIgX3ByaXZhdGVGaWVsZHMgPSBhbGxbX2lfYV0uX3ByaXZhdGVbcC5maWVsZF07XG4gICAgICAgICAgdmFyIF9rZXlzID0gT2JqZWN0LmtleXMoX3ByaXZhdGVGaWVsZHMpO1xuICAgICAgICAgIGZvciAodmFyIF9pMiA9IDA7IF9pMiA8IF9rZXlzLmxlbmd0aDsgX2kyKyspIHtcbiAgICAgICAgICAgIHZhciBfa2V5ID0gX2tleXNbX2kyXTtcbiAgICAgICAgICAgIHZhciB2YWxpZEtleVRvRGVsZXRlID0gIXAuaW1tdXRhYmxlS2V5c1tfa2V5XTtcbiAgICAgICAgICAgIGlmICh2YWxpZEtleVRvRGVsZXRlKSB7XG4gICAgICAgICAgICAgIF9wcml2YXRlRmllbGRzW19rZXldID0gdW5kZWZpbmVkO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAocC50cmlnZ2VyRXZlbnQpIHtcbiAgICAgICAgICBzZWxmW3AudHJpZ2dlckZuTmFtZV0ocC5ldmVudCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiBzZWxmOyAvLyBtYWludGFpbiBjaGFpbmluZ1xuICAgIH07IC8vIGZ1bmN0aW9uXG4gIH0gLy8gcmVtb3ZlRGF0YVxufTsgLy8gZGVmaW5lXG5cbnZhciBkZWZpbmUkMSA9IHtcbiAgZXZlbnRBbGlhc2VzT246IGZ1bmN0aW9uIGV2ZW50QWxpYXNlc09uKHByb3RvKSB7XG4gICAgdmFyIHAgPSBwcm90bztcbiAgICBwLmFkZExpc3RlbmVyID0gcC5saXN0ZW4gPSBwLmJpbmQgPSBwLm9uO1xuICAgIHAudW5saXN0ZW4gPSBwLnVuYmluZCA9IHAub2ZmID0gcC5yZW1vdmVMaXN0ZW5lcjtcbiAgICBwLnRyaWdnZXIgPSBwLmVtaXQ7XG5cbiAgICAvLyB0aGlzIGlzIGp1c3QgYSB3cmFwcGVyIGFsaWFzIG9mIC5vbigpXG4gICAgcC5wb24gPSBwLnByb21pc2VPbiA9IGZ1bmN0aW9uIChldmVudHMsIHNlbGVjdG9yKSB7XG4gICAgICB2YXIgc2VsZiA9IHRoaXM7XG4gICAgICB2YXIgYXJncyA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cywgMCk7XG4gICAgICByZXR1cm4gbmV3IFByb21pc2UkMShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgICAgIHZhciBjYWxsYmFjayA9IGZ1bmN0aW9uIGNhbGxiYWNrKGUpIHtcbiAgICAgICAgICBzZWxmLm9mZi5hcHBseShzZWxmLCBvZmZBcmdzKTtcbiAgICAgICAgICByZXNvbHZlKGUpO1xuICAgICAgICB9O1xuICAgICAgICB2YXIgb25BcmdzID0gYXJncy5jb25jYXQoW2NhbGxiYWNrXSk7XG4gICAgICAgIHZhciBvZmZBcmdzID0gb25BcmdzLmNvbmNhdChbXSk7XG4gICAgICAgIHNlbGYub24uYXBwbHkoc2VsZiwgb25BcmdzKTtcbiAgICAgIH0pO1xuICAgIH07XG4gIH1cbn07IC8vIGRlZmluZVxuXG4vLyB1c2UgdGhpcyBtb2R1bGUgdG8gY2hlcnJ5IHBpY2sgZnVuY3Rpb25zIGludG8geW91ciBwcm90b3R5cGVcbi8vICh1c2VmdWwgZm9yIGZ1bmN0aW9ucyBzaGFyZWQgYmV0d2VlbiB0aGUgY29yZSBhbmQgY29sbGVjdGlvbnMsIGZvciBleGFtcGxlKVxuXG52YXIgZGVmaW5lID0ge307XG5bZGVmaW5lJDMsIGRlZmluZSQyLCBkZWZpbmUkMV0uZm9yRWFjaChmdW5jdGlvbiAobSkge1xuICBleHRlbmQoZGVmaW5lLCBtKTtcbn0pO1xuXG52YXIgZWxlc2ZuJGkgPSB7XG4gIGFuaW1hdGU6IGRlZmluZS5hbmltYXRlKCksXG4gIGFuaW1hdGlvbjogZGVmaW5lLmFuaW1hdGlvbigpLFxuICBhbmltYXRlZDogZGVmaW5lLmFuaW1hdGVkKCksXG4gIGNsZWFyUXVldWU6IGRlZmluZS5jbGVhclF1ZXVlKCksXG4gIGRlbGF5OiBkZWZpbmUuZGVsYXkoKSxcbiAgZGVsYXlBbmltYXRpb246IGRlZmluZS5kZWxheUFuaW1hdGlvbigpLFxuICBzdG9wOiBkZWZpbmUuc3RvcCgpXG59O1xuXG52YXIgZWxlc2ZuJGggPSB7XG4gIGNsYXNzZXM6IGZ1bmN0aW9uIGNsYXNzZXMoX2NsYXNzZXMpIHtcbiAgICB2YXIgc2VsZiA9IHRoaXM7XG4gICAgaWYgKF9jbGFzc2VzID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHZhciByZXQgPSBbXTtcbiAgICAgIHNlbGZbMF0uX3ByaXZhdGUuY2xhc3Nlcy5mb3JFYWNoKGZ1bmN0aW9uIChjbHMpIHtcbiAgICAgICAgcmV0dXJuIHJldC5wdXNoKGNscyk7XG4gICAgICB9KTtcbiAgICAgIHJldHVybiByZXQ7XG4gICAgfSBlbHNlIGlmICghYXJyYXkoX2NsYXNzZXMpKSB7XG4gICAgICAvLyBleHRyYWN0IGNsYXNzZXMgZnJvbSBzdHJpbmdcbiAgICAgIF9jbGFzc2VzID0gKF9jbGFzc2VzIHx8ICcnKS5tYXRjaCgvXFxTKy9nKSB8fCBbXTtcbiAgICB9XG4gICAgdmFyIGNoYW5nZWQgPSBbXTtcbiAgICB2YXIgY2xhc3Nlc1NldCA9IG5ldyBTZXQkMShfY2xhc3Nlcyk7XG5cbiAgICAvLyBjaGVjayBhbmQgdXBkYXRlIGVhY2ggZWxlXG4gICAgZm9yICh2YXIgaiA9IDA7IGogPCBzZWxmLmxlbmd0aDsgaisrKSB7XG4gICAgICB2YXIgZWxlID0gc2VsZltqXTtcbiAgICAgIHZhciBfcCA9IGVsZS5fcHJpdmF0ZTtcbiAgICAgIHZhciBlbGVDbGFzc2VzID0gX3AuY2xhc3NlcztcbiAgICAgIHZhciBjaGFuZ2VkRWxlID0gZmFsc2U7XG5cbiAgICAgIC8vIGNoZWNrIGlmIGVsZSBoYXMgYWxsIG9mIHRoZSBwYXNzZWQgY2xhc3Nlc1xuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBfY2xhc3Nlcy5sZW5ndGg7IGkrKykge1xuICAgICAgICB2YXIgY2xzID0gX2NsYXNzZXNbaV07XG4gICAgICAgIHZhciBlbGVIYXNDbGFzcyA9IGVsZUNsYXNzZXMuaGFzKGNscyk7XG4gICAgICAgIGlmICghZWxlSGFzQ2xhc3MpIHtcbiAgICAgICAgICBjaGFuZ2VkRWxlID0gdHJ1ZTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICAvLyBjaGVjayBpZiBlbGUgaGFzIGNsYXNzZXMgb3V0c2lkZSBvZiB0aG9zZSBwYXNzZWRcbiAgICAgIGlmICghY2hhbmdlZEVsZSkge1xuICAgICAgICBjaGFuZ2VkRWxlID0gZWxlQ2xhc3Nlcy5zaXplICE9PSBfY2xhc3Nlcy5sZW5ndGg7XG4gICAgICB9XG4gICAgICBpZiAoY2hhbmdlZEVsZSkge1xuICAgICAgICBfcC5jbGFzc2VzID0gY2xhc3Nlc1NldDtcbiAgICAgICAgY2hhbmdlZC5wdXNoKGVsZSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gdHJpZ2dlciB1cGRhdGUgc3R5bGUgb24gdGhvc2UgZWxlcyB0aGF0IGhhZCBjbGFzcyBjaGFuZ2VzXG4gICAgaWYgKGNoYW5nZWQubGVuZ3RoID4gMCkge1xuICAgICAgdGhpcy5zcGF3bihjaGFuZ2VkKS51cGRhdGVTdHlsZSgpLmVtaXQoJ2NsYXNzJyk7XG4gICAgfVxuICAgIHJldHVybiBzZWxmO1xuICB9LFxuICBhZGRDbGFzczogZnVuY3Rpb24gYWRkQ2xhc3MoY2xhc3Nlcykge1xuICAgIHJldHVybiB0aGlzLnRvZ2dsZUNsYXNzKGNsYXNzZXMsIHRydWUpO1xuICB9LFxuICBoYXNDbGFzczogZnVuY3Rpb24gaGFzQ2xhc3MoY2xhc3NOYW1lKSB7XG4gICAgdmFyIGVsZSA9IHRoaXNbMF07XG4gICAgcmV0dXJuIGVsZSAhPSBudWxsICYmIGVsZS5fcHJpdmF0ZS5jbGFzc2VzLmhhcyhjbGFzc05hbWUpO1xuICB9LFxuICB0b2dnbGVDbGFzczogZnVuY3Rpb24gdG9nZ2xlQ2xhc3MoY2xhc3NlcywgdG9nZ2xlKSB7XG4gICAgaWYgKCFhcnJheShjbGFzc2VzKSkge1xuICAgICAgLy8gZXh0cmFjdCBjbGFzc2VzIGZyb20gc3RyaW5nXG4gICAgICBjbGFzc2VzID0gY2xhc3Nlcy5tYXRjaCgvXFxTKy9nKSB8fCBbXTtcbiAgICB9XG4gICAgdmFyIHNlbGYgPSB0aGlzO1xuICAgIHZhciB0b2dnbGVVbmRlZmQgPSB0b2dnbGUgPT09IHVuZGVmaW5lZDtcbiAgICB2YXIgY2hhbmdlZCA9IFtdOyAvLyBlbGVzIHdobyBoYWQgY2xhc3NlcyBjaGFuZ2VkXG5cbiAgICBmb3IgKHZhciBpID0gMCwgaWwgPSBzZWxmLmxlbmd0aDsgaSA8IGlsOyBpKyspIHtcbiAgICAgIHZhciBlbGUgPSBzZWxmW2ldO1xuICAgICAgdmFyIGVsZUNsYXNzZXMgPSBlbGUuX3ByaXZhdGUuY2xhc3NlcztcbiAgICAgIHZhciBjaGFuZ2VkRWxlID0gZmFsc2U7XG4gICAgICBmb3IgKHZhciBqID0gMDsgaiA8IGNsYXNzZXMubGVuZ3RoOyBqKyspIHtcbiAgICAgICAgdmFyIGNscyA9IGNsYXNzZXNbal07XG4gICAgICAgIHZhciBoYXNDbGFzcyA9IGVsZUNsYXNzZXMuaGFzKGNscyk7XG4gICAgICAgIHZhciBjaGFuZ2VkTm93ID0gZmFsc2U7XG4gICAgICAgIGlmICh0b2dnbGUgfHwgdG9nZ2xlVW5kZWZkICYmICFoYXNDbGFzcykge1xuICAgICAgICAgIGVsZUNsYXNzZXMuYWRkKGNscyk7XG4gICAgICAgICAgY2hhbmdlZE5vdyA9IHRydWU7XG4gICAgICAgIH0gZWxzZSBpZiAoIXRvZ2dsZSB8fCB0b2dnbGVVbmRlZmQgJiYgaGFzQ2xhc3MpIHtcbiAgICAgICAgICBlbGVDbGFzc2VzW1wiZGVsZXRlXCJdKGNscyk7XG4gICAgICAgICAgY2hhbmdlZE5vdyA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFjaGFuZ2VkRWxlICYmIGNoYW5nZWROb3cpIHtcbiAgICAgICAgICBjaGFuZ2VkLnB1c2goZWxlKTtcbiAgICAgICAgICBjaGFuZ2VkRWxlID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgfSAvLyBmb3IgaiBjbGFzc2VzXG4gICAgfSAvLyBmb3IgaSBlbGVzXG5cbiAgICAvLyB0cmlnZ2VyIHVwZGF0ZSBzdHlsZSBvbiB0aG9zZSBlbGVzIHRoYXQgaGFkIGNsYXNzIGNoYW5nZXNcbiAgICBpZiAoY2hhbmdlZC5sZW5ndGggPiAwKSB7XG4gICAgICB0aGlzLnNwYXduKGNoYW5nZWQpLnVwZGF0ZVN0eWxlKCkuZW1pdCgnY2xhc3MnKTtcbiAgICB9XG4gICAgcmV0dXJuIHNlbGY7XG4gIH0sXG4gIHJlbW92ZUNsYXNzOiBmdW5jdGlvbiByZW1vdmVDbGFzcyhjbGFzc2VzKSB7XG4gICAgcmV0dXJuIHRoaXMudG9nZ2xlQ2xhc3MoY2xhc3NlcywgZmFsc2UpO1xuICB9LFxuICBmbGFzaENsYXNzOiBmdW5jdGlvbiBmbGFzaENsYXNzKGNsYXNzZXMsIGR1cmF0aW9uKSB7XG4gICAgdmFyIHNlbGYgPSB0aGlzO1xuICAgIGlmIChkdXJhdGlvbiA9PSBudWxsKSB7XG4gICAgICBkdXJhdGlvbiA9IDI1MDtcbiAgICB9IGVsc2UgaWYgKGR1cmF0aW9uID09PSAwKSB7XG4gICAgICByZXR1cm4gc2VsZjsgLy8gbm90aGluZyB0byBkbyByZWFsbHlcbiAgICB9XG4gICAgc2VsZi5hZGRDbGFzcyhjbGFzc2VzKTtcbiAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHtcbiAgICAgIHNlbGYucmVtb3ZlQ2xhc3MoY2xhc3Nlcyk7XG4gICAgfSwgZHVyYXRpb24pO1xuICAgIHJldHVybiBzZWxmO1xuICB9XG59O1xuZWxlc2ZuJGguY2xhc3NOYW1lID0gZWxlc2ZuJGguY2xhc3NOYW1lcyA9IGVsZXNmbiRoLmNsYXNzZXM7XG5cbi8vIHRva2VucyBpbiB0aGUgcXVlcnkgbGFuZ3VhZ2VcbnZhciB0b2tlbnMgPSB7XG4gIG1ldGFDaGFyOiAnW1xcXFwhXFxcXFwiXFxcXCNcXFxcJFxcXFwlXFxcXCZcXFxcXFwnXFxcXChcXFxcKVxcXFwqXFxcXCtcXFxcLFxcXFwuXFxcXC9cXFxcOlxcXFw7XFxcXDxcXFxcPVxcXFw+XFxcXD9cXFxcQFxcXFxbXFxcXF1cXFxcXlxcXFxgXFxcXHtcXFxcfFxcXFx9XFxcXH5dJyxcbiAgLy8gY2hhcnMgd2UgbmVlZCB0byBlc2NhcGUgaW4gbGV0IG5hbWVzLCBldGNcbiAgY29tcGFyYXRvck9wOiAnPXxcXFxcIT18Pnw+PXw8fDw9fFxcXFwkPXxcXFxcXj18XFxcXCo9JyxcbiAgLy8gYmluYXJ5IGNvbXBhcmlzb24gb3AgKHVzZWQgaW4gZGF0YSBzZWxlY3RvcnMpXG4gIGJvb2xPcDogJ1xcXFw/fFxcXFwhfFxcXFxeJyxcbiAgLy8gYm9vbGVhbiAodW5hcnkpIG9wZXJhdG9ycyAodXNlZCBpbiBkYXRhIHNlbGVjdG9ycylcbiAgc3RyaW5nOiAnXCIoPzpcXFxcXFxcXFwifFteXCJdKSpcIicgKyAnfCcgKyBcIicoPzpcXFxcXFxcXCd8W14nXSkqJ1wiLFxuICAvLyBzdHJpbmcgbGl0ZXJhbHMgKHVzZWQgaW4gZGF0YSBzZWxlY3RvcnMpIC0tIGRvdWJsZXF1b3RlcyB8IHNpbmdsZXF1b3Rlc1xuICBudW1iZXI6IG51bWJlcixcbiAgLy8gbnVtYmVyIGxpdGVyYWwgKHVzZWQgaW4gZGF0YSBzZWxlY3RvcnMpIC0tLSBlLmcuIDAuMTIzNCwgMTIzNCwgMTJlMTIzXG4gIG1ldGE6ICdkZWdyZWV8aW5kZWdyZWV8b3V0ZGVncmVlJyxcbiAgLy8gYWxsb3dlZCBtZXRhZGF0YSBmaWVsZHMgKGkuZS4gYWxsb3dlZCBmdW5jdGlvbnMgdG8gdXNlIGZyb20gQ29sbGVjdGlvbilcbiAgc2VwYXJhdG9yOiAnXFxcXHMqLFxcXFxzKicsXG4gIC8vIHF1ZXJpZXMgYXJlIHNlcGFyYXRlZCBieSBjb21tYXMsIGUuZy4gZWRnZVtmb28gPSAnYmFyJ10sIG5vZGUuc29tZUNsYXNzXG4gIGRlc2NlbmRhbnQ6ICdcXFxccysnLFxuICBjaGlsZDogJ1xcXFxzKz5cXFxccysnLFxuICBzdWJqZWN0OiAnXFxcXCQnLFxuICBncm91cDogJ25vZGV8ZWRnZXxcXFxcKicsXG4gIGRpcmVjdGVkRWRnZTogJ1xcXFxzKy0+XFxcXHMrJyxcbiAgdW5kaXJlY3RlZEVkZ2U6ICdcXFxccys8LT5cXFxccysnXG59O1xudG9rZW5zLnZhcmlhYmxlID0gJyg/OltcXFxcdy0uXXwoPzpcXFxcXFxcXCcgKyB0b2tlbnMubWV0YUNoYXIgKyAnKSkrJzsgLy8gYSB2YXJpYWJsZSBuYW1lIGNhbiBoYXZlIGxldHRlcnMsIG51bWJlcnMsIGRhc2hlcywgYW5kIHBlcmlvZHNcbnRva2Vucy5jbGFzc05hbWUgPSAnKD86W1xcXFx3LV18KD86XFxcXFxcXFwnICsgdG9rZW5zLm1ldGFDaGFyICsgJykpKyc7IC8vIGEgY2xhc3MgbmFtZSBoYXMgdGhlIHNhbWUgcnVsZXMgYXMgYSB2YXJpYWJsZSBleGNlcHQgaXQgY2FuJ3QgaGF2ZSBhICcuJyBpbiB0aGUgbmFtZVxudG9rZW5zLnZhbHVlID0gdG9rZW5zLnN0cmluZyArICd8JyArIHRva2Vucy5udW1iZXI7IC8vIGEgdmFsdWUgbGl0ZXJhbCwgZWl0aGVyIGEgc3RyaW5nIG9yIG51bWJlclxudG9rZW5zLmlkID0gdG9rZW5zLnZhcmlhYmxlOyAvLyBhbiBlbGVtZW50IGlkIChmb2xsb3dzIHZhcmlhYmxlIGNvbnZlbnRpb25zKVxuXG4oZnVuY3Rpb24gKCkge1xuICB2YXIgb3BzLCBvcCwgaTtcblxuICAvLyBhZGQgQCB2YXJpYW50cyB0byBjb21wYXJhdG9yT3BcbiAgb3BzID0gdG9rZW5zLmNvbXBhcmF0b3JPcC5zcGxpdCgnfCcpO1xuICBmb3IgKGkgPSAwOyBpIDwgb3BzLmxlbmd0aDsgaSsrKSB7XG4gICAgb3AgPSBvcHNbaV07XG4gICAgdG9rZW5zLmNvbXBhcmF0b3JPcCArPSAnfEAnICsgb3A7XG4gIH1cblxuICAvLyBhZGQgISB2YXJpYW50cyB0byBjb21wYXJhdG9yT3BcbiAgb3BzID0gdG9rZW5zLmNvbXBhcmF0b3JPcC5zcGxpdCgnfCcpO1xuICBmb3IgKGkgPSAwOyBpIDwgb3BzLmxlbmd0aDsgaSsrKSB7XG4gICAgb3AgPSBvcHNbaV07XG4gICAgaWYgKG9wLmluZGV4T2YoJyEnKSA+PSAwKSB7XG4gICAgICBjb250aW51ZTtcbiAgICB9IC8vIHNraXAgb3BzIHRoYXQgZXhwbGljaXRseSBjb250YWluICFcbiAgICBpZiAob3AgPT09ICc9Jykge1xuICAgICAgY29udGludWU7XG4gICAgfSAvLyBza2lwID0gYi9jICE9IGlzIGV4cGxpY2l0bHkgZGVmaW5lZFxuXG4gICAgdG9rZW5zLmNvbXBhcmF0b3JPcCArPSAnfFxcXFwhJyArIG9wO1xuICB9XG59KSgpO1xuXG4vKipcbiAqIE1ha2UgYSBuZXcgcXVlcnkgb2JqZWN0XG4gKlxuICogQHByb3AgdHlwZSB7VHlwZX0gVGhlIHR5cGUgZW51bSAoaW50KSBvZiB0aGUgcXVlcnlcbiAqIEBwcm9wIGNoZWNrcyBMaXN0IG9mIGNoZWNrcyB0byBtYWtlIGFnYWluc3QgYW4gZWxlIHRvIHRlc3QgZm9yIGEgbWF0Y2hcbiAqL1xudmFyIG5ld1F1ZXJ5ID0gZnVuY3Rpb24gbmV3UXVlcnkoKSB7XG4gIHJldHVybiB7XG4gICAgY2hlY2tzOiBbXVxuICB9O1xufTtcblxuLyoqXG4gKiBBIGNoZWNrIHR5cGUgZW51bS1saWtlIG9iamVjdC4gIFVzZXMgaW50ZWdlciB2YWx1ZXMgZm9yIGZhc3QgbWF0Y2goKSBsb29rdXAuXG4gKiBUaGUgb3JkZXJpbmcgZG9lcyBub3QgbWF0dGVyIGFzIGxvbmcgYXMgdGhlIGludHMgYXJlIHVuaXF1ZS5cbiAqL1xudmFyIFR5cGUgPSB7XG4gIC8qKiBFLmcuIG5vZGUgKi9cbiAgR1JPVVA6IDAsXG4gIC8qKiBBIGNvbGxlY3Rpb24gb2YgZWxlbWVudHMgKi9cbiAgQ09MTEVDVElPTjogMSxcbiAgLyoqIEEgZmlsdGVyKGVsZSkgZnVuY3Rpb24gKi9cbiAgRklMVEVSOiAyLFxuICAvKiogRS5nLiBbZm9vID4gMV0gKi9cbiAgREFUQV9DT01QQVJFOiAzLFxuICAvKiogRS5nLiBbZm9vXSAqL1xuICBEQVRBX0VYSVNUOiA0LFxuICAvKiogRS5nLiBbP2Zvb10gKi9cbiAgREFUQV9CT09MOiA1LFxuICAvKiogRS5nLiBbW2RlZ3JlZSA+IDJdXSAqL1xuICBNRVRBX0NPTVBBUkU6IDYsXG4gIC8qKiBFLmcuIDpzZWxlY3RlZCAqL1xuICBTVEFURTogNyxcbiAgLyoqIEUuZy4gI2ZvbyAqL1xuICBJRDogOCxcbiAgLyoqIEUuZy4gLmZvbyAqL1xuICBDTEFTUzogOSxcbiAgLyoqIEUuZy4gI2ZvbyA8LT4gI2JhciAqL1xuICBVTkRJUkVDVEVEX0VER0U6IDEwLFxuICAvKiogRS5nLiAjZm9vIC0+ICNiYXIgKi9cbiAgRElSRUNURURfRURHRTogMTEsXG4gIC8qKiBFLmcuICQjZm9vIC0+ICNiYXIgKi9cbiAgTk9ERV9TT1VSQ0U6IDEyLFxuICAvKiogRS5nLiAjZm9vIC0+ICQjYmFyICovXG4gIE5PREVfVEFSR0VUOiAxMyxcbiAgLyoqIEUuZy4gJCNmb28gPC0+ICNiYXIgKi9cbiAgTk9ERV9ORUlHSEJPUjogMTQsXG4gIC8qKiBFLmcuICNmb28gPiAjYmFyICovXG4gIENISUxEOiAxNSxcbiAgLyoqIEUuZy4gI2ZvbyAjYmFyICovXG4gIERFU0NFTkRBTlQ6IDE2LFxuICAvKiogRS5nLiAkI2ZvbyA+ICNiYXIgKi9cbiAgUEFSRU5UOiAxNyxcbiAgLyoqIEUuZy4gJCNmb28gI2JhciAqL1xuICBBTkNFU1RPUjogMTgsXG4gIC8qKiBFLmcuICNmb28gPiAkYmFyID4gI2JheiAqL1xuICBDT01QT1VORF9TUExJVDogMTksXG4gIC8qKiBBbHdheXMgbWF0Y2hlcywgdXNlZnVsIHBsYWNlaG9sZGVyIGZvciBzdWJqZWN0IGluIGBDT01QT1VORF9TUExJVGAgKi9cbiAgVFJVRTogMjBcbn07XG5cbnZhciBzdGF0ZVNlbGVjdG9ycyA9IFt7XG4gIHNlbGVjdG9yOiAnOnNlbGVjdGVkJyxcbiAgbWF0Y2hlczogZnVuY3Rpb24gbWF0Y2hlcyhlbGUpIHtcbiAgICByZXR1cm4gZWxlLnNlbGVjdGVkKCk7XG4gIH1cbn0sIHtcbiAgc2VsZWN0b3I6ICc6dW5zZWxlY3RlZCcsXG4gIG1hdGNoZXM6IGZ1bmN0aW9uIG1hdGNoZXMoZWxlKSB7XG4gICAgcmV0dXJuICFlbGUuc2VsZWN0ZWQoKTtcbiAgfVxufSwge1xuICBzZWxlY3RvcjogJzpzZWxlY3RhYmxlJyxcbiAgbWF0Y2hlczogZnVuY3Rpb24gbWF0Y2hlcyhlbGUpIHtcbiAgICByZXR1cm4gZWxlLnNlbGVjdGFibGUoKTtcbiAgfVxufSwge1xuICBzZWxlY3RvcjogJzp1bnNlbGVjdGFibGUnLFxuICBtYXRjaGVzOiBmdW5jdGlvbiBtYXRjaGVzKGVsZSkge1xuICAgIHJldHVybiAhZWxlLnNlbGVjdGFibGUoKTtcbiAgfVxufSwge1xuICBzZWxlY3RvcjogJzpsb2NrZWQnLFxuICBtYXRjaGVzOiBmdW5jdGlvbiBtYXRjaGVzKGVsZSkge1xuICAgIHJldHVybiBlbGUubG9ja2VkKCk7XG4gIH1cbn0sIHtcbiAgc2VsZWN0b3I6ICc6dW5sb2NrZWQnLFxuICBtYXRjaGVzOiBmdW5jdGlvbiBtYXRjaGVzKGVsZSkge1xuICAgIHJldHVybiAhZWxlLmxvY2tlZCgpO1xuICB9XG59LCB7XG4gIHNlbGVjdG9yOiAnOnZpc2libGUnLFxuICBtYXRjaGVzOiBmdW5jdGlvbiBtYXRjaGVzKGVsZSkge1xuICAgIHJldHVybiBlbGUudmlzaWJsZSgpO1xuICB9XG59LCB7XG4gIHNlbGVjdG9yOiAnOmhpZGRlbicsXG4gIG1hdGNoZXM6IGZ1bmN0aW9uIG1hdGNoZXMoZWxlKSB7XG4gICAgcmV0dXJuICFlbGUudmlzaWJsZSgpO1xuICB9XG59LCB7XG4gIHNlbGVjdG9yOiAnOnRyYW5zcGFyZW50JyxcbiAgbWF0Y2hlczogZnVuY3Rpb24gbWF0Y2hlcyhlbGUpIHtcbiAgICByZXR1cm4gZWxlLnRyYW5zcGFyZW50KCk7XG4gIH1cbn0sIHtcbiAgc2VsZWN0b3I6ICc6Z3JhYmJlZCcsXG4gIG1hdGNoZXM6IGZ1bmN0aW9uIG1hdGNoZXMoZWxlKSB7XG4gICAgcmV0dXJuIGVsZS5ncmFiYmVkKCk7XG4gIH1cbn0sIHtcbiAgc2VsZWN0b3I6ICc6ZnJlZScsXG4gIG1hdGNoZXM6IGZ1bmN0aW9uIG1hdGNoZXMoZWxlKSB7XG4gICAgcmV0dXJuICFlbGUuZ3JhYmJlZCgpO1xuICB9XG59LCB7XG4gIHNlbGVjdG9yOiAnOnJlbW92ZWQnLFxuICBtYXRjaGVzOiBmdW5jdGlvbiBtYXRjaGVzKGVsZSkge1xuICAgIHJldHVybiBlbGUucmVtb3ZlZCgpO1xuICB9XG59LCB7XG4gIHNlbGVjdG9yOiAnOmluc2lkZScsXG4gIG1hdGNoZXM6IGZ1bmN0aW9uIG1hdGNoZXMoZWxlKSB7XG4gICAgcmV0dXJuICFlbGUucmVtb3ZlZCgpO1xuICB9XG59LCB7XG4gIHNlbGVjdG9yOiAnOmdyYWJiYWJsZScsXG4gIG1hdGNoZXM6IGZ1bmN0aW9uIG1hdGNoZXMoZWxlKSB7XG4gICAgcmV0dXJuIGVsZS5ncmFiYmFibGUoKTtcbiAgfVxufSwge1xuICBzZWxlY3RvcjogJzp1bmdyYWJiYWJsZScsXG4gIG1hdGNoZXM6IGZ1bmN0aW9uIG1hdGNoZXMoZWxlKSB7XG4gICAgcmV0dXJuICFlbGUuZ3JhYmJhYmxlKCk7XG4gIH1cbn0sIHtcbiAgc2VsZWN0b3I6ICc6YW5pbWF0ZWQnLFxuICBtYXRjaGVzOiBmdW5jdGlvbiBtYXRjaGVzKGVsZSkge1xuICAgIHJldHVybiBlbGUuYW5pbWF0ZWQoKTtcbiAgfVxufSwge1xuICBzZWxlY3RvcjogJzp1bmFuaW1hdGVkJyxcbiAgbWF0Y2hlczogZnVuY3Rpb24gbWF0Y2hlcyhlbGUpIHtcbiAgICByZXR1cm4gIWVsZS5hbmltYXRlZCgpO1xuICB9XG59LCB7XG4gIHNlbGVjdG9yOiAnOnBhcmVudCcsXG4gIG1hdGNoZXM6IGZ1bmN0aW9uIG1hdGNoZXMoZWxlKSB7XG4gICAgcmV0dXJuIGVsZS5pc1BhcmVudCgpO1xuICB9XG59LCB7XG4gIHNlbGVjdG9yOiAnOmNoaWxkbGVzcycsXG4gIG1hdGNoZXM6IGZ1bmN0aW9uIG1hdGNoZXMoZWxlKSB7XG4gICAgcmV0dXJuIGVsZS5pc0NoaWxkbGVzcygpO1xuICB9XG59LCB7XG4gIHNlbGVjdG9yOiAnOmNoaWxkJyxcbiAgbWF0Y2hlczogZnVuY3Rpb24gbWF0Y2hlcyhlbGUpIHtcbiAgICByZXR1cm4gZWxlLmlzQ2hpbGQoKTtcbiAgfVxufSwge1xuICBzZWxlY3RvcjogJzpvcnBoYW4nLFxuICBtYXRjaGVzOiBmdW5jdGlvbiBtYXRjaGVzKGVsZSkge1xuICAgIHJldHVybiBlbGUuaXNPcnBoYW4oKTtcbiAgfVxufSwge1xuICBzZWxlY3RvcjogJzpub25vcnBoYW4nLFxuICBtYXRjaGVzOiBmdW5jdGlvbiBtYXRjaGVzKGVsZSkge1xuICAgIHJldHVybiBlbGUuaXNDaGlsZCgpO1xuICB9XG59LCB7XG4gIHNlbGVjdG9yOiAnOmNvbXBvdW5kJyxcbiAgbWF0Y2hlczogZnVuY3Rpb24gbWF0Y2hlcyhlbGUpIHtcbiAgICBpZiAoZWxlLmlzTm9kZSgpKSB7XG4gICAgICByZXR1cm4gZWxlLmlzUGFyZW50KCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBlbGUuc291cmNlKCkuaXNQYXJlbnQoKSB8fCBlbGUudGFyZ2V0KCkuaXNQYXJlbnQoKTtcbiAgICB9XG4gIH1cbn0sIHtcbiAgc2VsZWN0b3I6ICc6bG9vcCcsXG4gIG1hdGNoZXM6IGZ1bmN0aW9uIG1hdGNoZXMoZWxlKSB7XG4gICAgcmV0dXJuIGVsZS5pc0xvb3AoKTtcbiAgfVxufSwge1xuICBzZWxlY3RvcjogJzpzaW1wbGUnLFxuICBtYXRjaGVzOiBmdW5jdGlvbiBtYXRjaGVzKGVsZSkge1xuICAgIHJldHVybiBlbGUuaXNTaW1wbGUoKTtcbiAgfVxufSwge1xuICBzZWxlY3RvcjogJzphY3RpdmUnLFxuICBtYXRjaGVzOiBmdW5jdGlvbiBtYXRjaGVzKGVsZSkge1xuICAgIHJldHVybiBlbGUuYWN0aXZlKCk7XG4gIH1cbn0sIHtcbiAgc2VsZWN0b3I6ICc6aW5hY3RpdmUnLFxuICBtYXRjaGVzOiBmdW5jdGlvbiBtYXRjaGVzKGVsZSkge1xuICAgIHJldHVybiAhZWxlLmFjdGl2ZSgpO1xuICB9XG59LCB7XG4gIHNlbGVjdG9yOiAnOmJhY2tncm91bmRpbmcnLFxuICBtYXRjaGVzOiBmdW5jdGlvbiBtYXRjaGVzKGVsZSkge1xuICAgIHJldHVybiBlbGUuYmFja2dyb3VuZGluZygpO1xuICB9XG59LCB7XG4gIHNlbGVjdG9yOiAnOm5vbmJhY2tncm91bmRpbmcnLFxuICBtYXRjaGVzOiBmdW5jdGlvbiBtYXRjaGVzKGVsZSkge1xuICAgIHJldHVybiAhZWxlLmJhY2tncm91bmRpbmcoKTtcbiAgfVxufV0uc29ydChmdW5jdGlvbiAoYSwgYikge1xuICAvLyBuLmIuIHNlbGVjdG9ycyB0aGF0IGFyZSBzdGFydGluZyBzdWJzdHJpbmdzIG9mIG90aGVycyBtdXN0IGhhdmUgdGhlIGxvbmdlciBvbmVzIGZpcnN0XG4gIHJldHVybiBkZXNjZW5kaW5nKGEuc2VsZWN0b3IsIGIuc2VsZWN0b3IpO1xufSk7XG52YXIgbG9va3VwID0gZnVuY3Rpb24gKCkge1xuICB2YXIgc2VsVG9GbiA9IHt9O1xuICB2YXIgcztcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBzdGF0ZVNlbGVjdG9ycy5sZW5ndGg7IGkrKykge1xuICAgIHMgPSBzdGF0ZVNlbGVjdG9yc1tpXTtcbiAgICBzZWxUb0ZuW3Muc2VsZWN0b3JdID0gcy5tYXRjaGVzO1xuICB9XG4gIHJldHVybiBzZWxUb0ZuO1xufSgpO1xudmFyIHN0YXRlU2VsZWN0b3JNYXRjaGVzID0gZnVuY3Rpb24gc3RhdGVTZWxlY3Rvck1hdGNoZXMoc2VsLCBlbGUpIHtcbiAgcmV0dXJuIGxvb2t1cFtzZWxdKGVsZSk7XG59O1xudmFyIHN0YXRlU2VsZWN0b3JSZWdleCA9ICcoJyArIHN0YXRlU2VsZWN0b3JzLm1hcChmdW5jdGlvbiAocykge1xuICByZXR1cm4gcy5zZWxlY3Rvcjtcbn0pLmpvaW4oJ3wnKSArICcpJztcblxuLy8gd2hlbiBhIHRva2VuIGxpa2UgYSB2YXJpYWJsZSBoYXMgZXNjYXBlZCBtZXRhIGNoYXJhY3RlcnMsIHdlIG5lZWQgdG8gY2xlYW4gdGhlIGJhY2tzbGFzaGVzIG91dFxuLy8gc28gdGhhdCB2YWx1ZXMgZ2V0IGNvbXBhcmVkIHByb3Blcmx5IGluIFNlbGVjdG9yLmZpbHRlcigpXG52YXIgY2xlYW5NZXRhQ2hhcnMgPSBmdW5jdGlvbiBjbGVhbk1ldGFDaGFycyhzdHIpIHtcbiAgcmV0dXJuIHN0ci5yZXBsYWNlKG5ldyBSZWdFeHAoJ1xcXFxcXFxcKCcgKyB0b2tlbnMubWV0YUNoYXIgKyAnKScsICdnJyksIGZ1bmN0aW9uIChtYXRjaCwgJDEpIHtcbiAgICByZXR1cm4gJDE7XG4gIH0pO1xufTtcbnZhciByZXBsYWNlTGFzdFF1ZXJ5ID0gZnVuY3Rpb24gcmVwbGFjZUxhc3RRdWVyeShzZWxlY3RvciwgZXhhbWluaW5nUXVlcnksIHJlcGxhY2VtZW50UXVlcnkpIHtcbiAgc2VsZWN0b3Jbc2VsZWN0b3IubGVuZ3RoIC0gMV0gPSByZXBsYWNlbWVudFF1ZXJ5O1xufTtcblxuLy8gTk9URTogYWRkIG5ldyBleHByZXNzaW9uIHN5bnRheCBoZXJlIHRvIGhhdmUgaXQgcmVjb2duaXNlZCBieSB0aGUgcGFyc2VyO1xuLy8gLSBhIHF1ZXJ5IGNvbnRhaW5zIGFsbCBhZGphY2VudCAoaS5lLiBubyBzZXBhcmF0b3IgaW4gYmV0d2VlbikgZXhwcmVzc2lvbnM7XG4vLyAtIHRoZSBjdXJyZW50IHF1ZXJ5IGlzIHN0b3JlZCBpbiBzZWxlY3RvcltpXVxuLy8gLSB5b3UgbmVlZCB0byBjaGVjayB0aGUgcXVlcnkgb2JqZWN0cyBpbiBtYXRjaCgpIGZvciBpdCBhY3R1YWxseSBmaWx0ZXIgcHJvcGVybHksIGJ1dCB0aGF0J3MgcHJldHR5IHN0cmFpZ2h0IGZvcndhcmRcbnZhciBleHBycyA9IFt7XG4gIG5hbWU6ICdncm91cCcsXG4gIC8vIGp1c3QgdXNlZCBmb3IgaWRlbnRpZnlpbmcgd2hlbiBkZWJ1Z2dpbmdcbiAgcXVlcnk6IHRydWUsXG4gIHJlZ2V4OiAnKCcgKyB0b2tlbnMuZ3JvdXAgKyAnKScsXG4gIHBvcHVsYXRlOiBmdW5jdGlvbiBwb3B1bGF0ZShzZWxlY3RvciwgcXVlcnksIF9yZWYpIHtcbiAgICB2YXIgX3JlZjIgPSBfc2xpY2VkVG9BcnJheShfcmVmLCAxKSxcbiAgICAgIGdyb3VwID0gX3JlZjJbMF07XG4gICAgcXVlcnkuY2hlY2tzLnB1c2goe1xuICAgICAgdHlwZTogVHlwZS5HUk9VUCxcbiAgICAgIHZhbHVlOiBncm91cCA9PT0gJyonID8gZ3JvdXAgOiBncm91cCArICdzJ1xuICAgIH0pO1xuICB9XG59LCB7XG4gIG5hbWU6ICdzdGF0ZScsXG4gIHF1ZXJ5OiB0cnVlLFxuICByZWdleDogc3RhdGVTZWxlY3RvclJlZ2V4LFxuICBwb3B1bGF0ZTogZnVuY3Rpb24gcG9wdWxhdGUoc2VsZWN0b3IsIHF1ZXJ5LCBfcmVmMykge1xuICAgIHZhciBfcmVmNCA9IF9zbGljZWRUb0FycmF5KF9yZWYzLCAxKSxcbiAgICAgIHN0YXRlID0gX3JlZjRbMF07XG4gICAgcXVlcnkuY2hlY2tzLnB1c2goe1xuICAgICAgdHlwZTogVHlwZS5TVEFURSxcbiAgICAgIHZhbHVlOiBzdGF0ZVxuICAgIH0pO1xuICB9XG59LCB7XG4gIG5hbWU6ICdpZCcsXG4gIHF1ZXJ5OiB0cnVlLFxuICByZWdleDogJ1xcXFwjKCcgKyB0b2tlbnMuaWQgKyAnKScsXG4gIHBvcHVsYXRlOiBmdW5jdGlvbiBwb3B1bGF0ZShzZWxlY3RvciwgcXVlcnksIF9yZWY1KSB7XG4gICAgdmFyIF9yZWY2ID0gX3NsaWNlZFRvQXJyYXkoX3JlZjUsIDEpLFxuICAgICAgaWQgPSBfcmVmNlswXTtcbiAgICBxdWVyeS5jaGVja3MucHVzaCh7XG4gICAgICB0eXBlOiBUeXBlLklELFxuICAgICAgdmFsdWU6IGNsZWFuTWV0YUNoYXJzKGlkKVxuICAgIH0pO1xuICB9XG59LCB7XG4gIG5hbWU6ICdjbGFzc05hbWUnLFxuICBxdWVyeTogdHJ1ZSxcbiAgcmVnZXg6ICdcXFxcLignICsgdG9rZW5zLmNsYXNzTmFtZSArICcpJyxcbiAgcG9wdWxhdGU6IGZ1bmN0aW9uIHBvcHVsYXRlKHNlbGVjdG9yLCBxdWVyeSwgX3JlZjcpIHtcbiAgICB2YXIgX3JlZjggPSBfc2xpY2VkVG9BcnJheShfcmVmNywgMSksXG4gICAgICBjbGFzc05hbWUgPSBfcmVmOFswXTtcbiAgICBxdWVyeS5jaGVja3MucHVzaCh7XG4gICAgICB0eXBlOiBUeXBlLkNMQVNTLFxuICAgICAgdmFsdWU6IGNsZWFuTWV0YUNoYXJzKGNsYXNzTmFtZSlcbiAgICB9KTtcbiAgfVxufSwge1xuICBuYW1lOiAnZGF0YUV4aXN0cycsXG4gIHF1ZXJ5OiB0cnVlLFxuICByZWdleDogJ1xcXFxbXFxcXHMqKCcgKyB0b2tlbnMudmFyaWFibGUgKyAnKVxcXFxzKlxcXFxdJyxcbiAgcG9wdWxhdGU6IGZ1bmN0aW9uIHBvcHVsYXRlKHNlbGVjdG9yLCBxdWVyeSwgX3JlZjkpIHtcbiAgICB2YXIgX3JlZjEwID0gX3NsaWNlZFRvQXJyYXkoX3JlZjksIDEpLFxuICAgICAgdmFyaWFibGUgPSBfcmVmMTBbMF07XG4gICAgcXVlcnkuY2hlY2tzLnB1c2goe1xuICAgICAgdHlwZTogVHlwZS5EQVRBX0VYSVNULFxuICAgICAgZmllbGQ6IGNsZWFuTWV0YUNoYXJzKHZhcmlhYmxlKVxuICAgIH0pO1xuICB9XG59LCB7XG4gIG5hbWU6ICdkYXRhQ29tcGFyZScsXG4gIHF1ZXJ5OiB0cnVlLFxuICByZWdleDogJ1xcXFxbXFxcXHMqKCcgKyB0b2tlbnMudmFyaWFibGUgKyAnKVxcXFxzKignICsgdG9rZW5zLmNvbXBhcmF0b3JPcCArICcpXFxcXHMqKCcgKyB0b2tlbnMudmFsdWUgKyAnKVxcXFxzKlxcXFxdJyxcbiAgcG9wdWxhdGU6IGZ1bmN0aW9uIHBvcHVsYXRlKHNlbGVjdG9yLCBxdWVyeSwgX3JlZjExKSB7XG4gICAgdmFyIF9yZWYxMiA9IF9zbGljZWRUb0FycmF5KF9yZWYxMSwgMyksXG4gICAgICB2YXJpYWJsZSA9IF9yZWYxMlswXSxcbiAgICAgIGNvbXBhcmF0b3JPcCA9IF9yZWYxMlsxXSxcbiAgICAgIHZhbHVlID0gX3JlZjEyWzJdO1xuICAgIHZhciB2YWx1ZUlzU3RyaW5nID0gbmV3IFJlZ0V4cCgnXicgKyB0b2tlbnMuc3RyaW5nICsgJyQnKS5leGVjKHZhbHVlKSAhPSBudWxsO1xuICAgIGlmICh2YWx1ZUlzU3RyaW5nKSB7XG4gICAgICB2YWx1ZSA9IHZhbHVlLnN1YnN0cmluZygxLCB2YWx1ZS5sZW5ndGggLSAxKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdmFsdWUgPSBwYXJzZUZsb2F0KHZhbHVlKTtcbiAgICB9XG4gICAgcXVlcnkuY2hlY2tzLnB1c2goe1xuICAgICAgdHlwZTogVHlwZS5EQVRBX0NPTVBBUkUsXG4gICAgICBmaWVsZDogY2xlYW5NZXRhQ2hhcnModmFyaWFibGUpLFxuICAgICAgb3BlcmF0b3I6IGNvbXBhcmF0b3JPcCxcbiAgICAgIHZhbHVlOiB2YWx1ZVxuICAgIH0pO1xuICB9XG59LCB7XG4gIG5hbWU6ICdkYXRhQm9vbCcsXG4gIHF1ZXJ5OiB0cnVlLFxuICByZWdleDogJ1xcXFxbXFxcXHMqKCcgKyB0b2tlbnMuYm9vbE9wICsgJylcXFxccyooJyArIHRva2Vucy52YXJpYWJsZSArICcpXFxcXHMqXFxcXF0nLFxuICBwb3B1bGF0ZTogZnVuY3Rpb24gcG9wdWxhdGUoc2VsZWN0b3IsIHF1ZXJ5LCBfcmVmMTMpIHtcbiAgICB2YXIgX3JlZjE0ID0gX3NsaWNlZFRvQXJyYXkoX3JlZjEzLCAyKSxcbiAgICAgIGJvb2xPcCA9IF9yZWYxNFswXSxcbiAgICAgIHZhcmlhYmxlID0gX3JlZjE0WzFdO1xuICAgIHF1ZXJ5LmNoZWNrcy5wdXNoKHtcbiAgICAgIHR5cGU6IFR5cGUuREFUQV9CT09MLFxuICAgICAgZmllbGQ6IGNsZWFuTWV0YUNoYXJzKHZhcmlhYmxlKSxcbiAgICAgIG9wZXJhdG9yOiBib29sT3BcbiAgICB9KTtcbiAgfVxufSwge1xuICBuYW1lOiAnbWV0YUNvbXBhcmUnLFxuICBxdWVyeTogdHJ1ZSxcbiAgcmVnZXg6ICdcXFxcW1xcXFxbXFxcXHMqKCcgKyB0b2tlbnMubWV0YSArICcpXFxcXHMqKCcgKyB0b2tlbnMuY29tcGFyYXRvck9wICsgJylcXFxccyooJyArIHRva2Vucy5udW1iZXIgKyAnKVxcXFxzKlxcXFxdXFxcXF0nLFxuICBwb3B1bGF0ZTogZnVuY3Rpb24gcG9wdWxhdGUoc2VsZWN0b3IsIHF1ZXJ5LCBfcmVmMTUpIHtcbiAgICB2YXIgX3JlZjE2ID0gX3NsaWNlZFRvQXJyYXkoX3JlZjE1LCAzKSxcbiAgICAgIG1ldGEgPSBfcmVmMTZbMF0sXG4gICAgICBjb21wYXJhdG9yT3AgPSBfcmVmMTZbMV0sXG4gICAgICBudW1iZXIgPSBfcmVmMTZbMl07XG4gICAgcXVlcnkuY2hlY2tzLnB1c2goe1xuICAgICAgdHlwZTogVHlwZS5NRVRBX0NPTVBBUkUsXG4gICAgICBmaWVsZDogY2xlYW5NZXRhQ2hhcnMobWV0YSksXG4gICAgICBvcGVyYXRvcjogY29tcGFyYXRvck9wLFxuICAgICAgdmFsdWU6IHBhcnNlRmxvYXQobnVtYmVyKVxuICAgIH0pO1xuICB9XG59LCB7XG4gIG5hbWU6ICduZXh0UXVlcnknLFxuICBzZXBhcmF0b3I6IHRydWUsXG4gIHJlZ2V4OiB0b2tlbnMuc2VwYXJhdG9yLFxuICBwb3B1bGF0ZTogZnVuY3Rpb24gcG9wdWxhdGUoc2VsZWN0b3IsIHF1ZXJ5KSB7XG4gICAgdmFyIGN1cnJlbnRTdWJqZWN0ID0gc2VsZWN0b3IuY3VycmVudFN1YmplY3Q7XG4gICAgdmFyIGVkZ2VDb3VudCA9IHNlbGVjdG9yLmVkZ2VDb3VudDtcbiAgICB2YXIgY29tcG91bmRDb3VudCA9IHNlbGVjdG9yLmNvbXBvdW5kQ291bnQ7XG4gICAgdmFyIGxhc3RRID0gc2VsZWN0b3Jbc2VsZWN0b3IubGVuZ3RoIC0gMV07XG4gICAgaWYgKGN1cnJlbnRTdWJqZWN0ICE9IG51bGwpIHtcbiAgICAgIGxhc3RRLnN1YmplY3QgPSBjdXJyZW50U3ViamVjdDtcbiAgICAgIHNlbGVjdG9yLmN1cnJlbnRTdWJqZWN0ID0gbnVsbDtcbiAgICB9XG4gICAgbGFzdFEuZWRnZUNvdW50ID0gZWRnZUNvdW50O1xuICAgIGxhc3RRLmNvbXBvdW5kQ291bnQgPSBjb21wb3VuZENvdW50O1xuICAgIHNlbGVjdG9yLmVkZ2VDb3VudCA9IDA7XG4gICAgc2VsZWN0b3IuY29tcG91bmRDb3VudCA9IDA7XG5cbiAgICAvLyBnbyBvbiB0byBuZXh0IHF1ZXJ5XG4gICAgdmFyIG5leHRRdWVyeSA9IHNlbGVjdG9yW3NlbGVjdG9yLmxlbmd0aCsrXSA9IG5ld1F1ZXJ5KCk7XG4gICAgcmV0dXJuIG5leHRRdWVyeTsgLy8gdGhpcyBpcyB0aGUgbmV3IHF1ZXJ5IHRvIGJlIGZpbGxlZCBieSB0aGUgZm9sbG93aW5nIGV4cHJzXG4gIH1cbn0sIHtcbiAgbmFtZTogJ2RpcmVjdGVkRWRnZScsXG4gIHNlcGFyYXRvcjogdHJ1ZSxcbiAgcmVnZXg6IHRva2Vucy5kaXJlY3RlZEVkZ2UsXG4gIHBvcHVsYXRlOiBmdW5jdGlvbiBwb3B1bGF0ZShzZWxlY3RvciwgcXVlcnkpIHtcbiAgICBpZiAoc2VsZWN0b3IuY3VycmVudFN1YmplY3QgPT0gbnVsbCkge1xuICAgICAgLy8gdW5kaXJlY3RlZCBlZGdlXG4gICAgICB2YXIgZWRnZVF1ZXJ5ID0gbmV3UXVlcnkoKTtcbiAgICAgIHZhciBzb3VyY2UgPSBxdWVyeTtcbiAgICAgIHZhciB0YXJnZXQgPSBuZXdRdWVyeSgpO1xuICAgICAgZWRnZVF1ZXJ5LmNoZWNrcy5wdXNoKHtcbiAgICAgICAgdHlwZTogVHlwZS5ESVJFQ1RFRF9FREdFLFxuICAgICAgICBzb3VyY2U6IHNvdXJjZSxcbiAgICAgICAgdGFyZ2V0OiB0YXJnZXRcbiAgICAgIH0pO1xuXG4gICAgICAvLyB0aGUgcXVlcnkgaW4gdGhlIHNlbGVjdG9yIHNob3VsZCBiZSB0aGUgZWRnZSByYXRoZXIgdGhhbiB0aGUgc291cmNlXG4gICAgICByZXBsYWNlTGFzdFF1ZXJ5KHNlbGVjdG9yLCBxdWVyeSwgZWRnZVF1ZXJ5KTtcbiAgICAgIHNlbGVjdG9yLmVkZ2VDb3VudCsrO1xuXG4gICAgICAvLyB3ZSdyZSBub3cgcG9wdWxhdGluZyB0aGUgdGFyZ2V0IHF1ZXJ5IHdpdGggZXhwcmVzc2lvbnMgdGhhdCBmb2xsb3dcbiAgICAgIHJldHVybiB0YXJnZXQ7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIHNvdXJjZS90YXJnZXRcbiAgICAgIHZhciBzcmNUZ3RRID0gbmV3UXVlcnkoKTtcbiAgICAgIHZhciBfc291cmNlID0gcXVlcnk7XG4gICAgICB2YXIgX3RhcmdldCA9IG5ld1F1ZXJ5KCk7XG4gICAgICBzcmNUZ3RRLmNoZWNrcy5wdXNoKHtcbiAgICAgICAgdHlwZTogVHlwZS5OT0RFX1NPVVJDRSxcbiAgICAgICAgc291cmNlOiBfc291cmNlLFxuICAgICAgICB0YXJnZXQ6IF90YXJnZXRcbiAgICAgIH0pO1xuXG4gICAgICAvLyB0aGUgcXVlcnkgaW4gdGhlIHNlbGVjdG9yIHNob3VsZCBiZSB0aGUgbmVpZ2hib3VyaG9vZCByYXRoZXIgdGhhbiB0aGUgbm9kZVxuICAgICAgcmVwbGFjZUxhc3RRdWVyeShzZWxlY3RvciwgcXVlcnksIHNyY1RndFEpO1xuICAgICAgc2VsZWN0b3IuZWRnZUNvdW50Kys7XG4gICAgICByZXR1cm4gX3RhcmdldDsgLy8gbm93IHBvcHVsYXRpbmcgdGhlIHRhcmdldCB3aXRoIHRoZSBmb2xsb3dpbmcgZXhwcmVzc2lvbnNcbiAgICB9XG4gIH1cbn0sIHtcbiAgbmFtZTogJ3VuZGlyZWN0ZWRFZGdlJyxcbiAgc2VwYXJhdG9yOiB0cnVlLFxuICByZWdleDogdG9rZW5zLnVuZGlyZWN0ZWRFZGdlLFxuICBwb3B1bGF0ZTogZnVuY3Rpb24gcG9wdWxhdGUoc2VsZWN0b3IsIHF1ZXJ5KSB7XG4gICAgaWYgKHNlbGVjdG9yLmN1cnJlbnRTdWJqZWN0ID09IG51bGwpIHtcbiAgICAgIC8vIHVuZGlyZWN0ZWQgZWRnZVxuICAgICAgdmFyIGVkZ2VRdWVyeSA9IG5ld1F1ZXJ5KCk7XG4gICAgICB2YXIgc291cmNlID0gcXVlcnk7XG4gICAgICB2YXIgdGFyZ2V0ID0gbmV3UXVlcnkoKTtcbiAgICAgIGVkZ2VRdWVyeS5jaGVja3MucHVzaCh7XG4gICAgICAgIHR5cGU6IFR5cGUuVU5ESVJFQ1RFRF9FREdFLFxuICAgICAgICBub2RlczogW3NvdXJjZSwgdGFyZ2V0XVxuICAgICAgfSk7XG5cbiAgICAgIC8vIHRoZSBxdWVyeSBpbiB0aGUgc2VsZWN0b3Igc2hvdWxkIGJlIHRoZSBlZGdlIHJhdGhlciB0aGFuIHRoZSBzb3VyY2VcbiAgICAgIHJlcGxhY2VMYXN0UXVlcnkoc2VsZWN0b3IsIHF1ZXJ5LCBlZGdlUXVlcnkpO1xuICAgICAgc2VsZWN0b3IuZWRnZUNvdW50Kys7XG5cbiAgICAgIC8vIHdlJ3JlIG5vdyBwb3B1bGF0aW5nIHRoZSB0YXJnZXQgcXVlcnkgd2l0aCBleHByZXNzaW9ucyB0aGF0IGZvbGxvd1xuICAgICAgcmV0dXJuIHRhcmdldDtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gbmVpZ2hib3VyaG9vZFxuICAgICAgdmFyIG5ob29kUSA9IG5ld1F1ZXJ5KCk7XG4gICAgICB2YXIgbm9kZSA9IHF1ZXJ5O1xuICAgICAgdmFyIG5laWdoYm9yID0gbmV3UXVlcnkoKTtcbiAgICAgIG5ob29kUS5jaGVja3MucHVzaCh7XG4gICAgICAgIHR5cGU6IFR5cGUuTk9ERV9ORUlHSEJPUixcbiAgICAgICAgbm9kZTogbm9kZSxcbiAgICAgICAgbmVpZ2hib3I6IG5laWdoYm9yXG4gICAgICB9KTtcblxuICAgICAgLy8gdGhlIHF1ZXJ5IGluIHRoZSBzZWxlY3RvciBzaG91bGQgYmUgdGhlIG5laWdoYm91cmhvb2QgcmF0aGVyIHRoYW4gdGhlIG5vZGVcbiAgICAgIHJlcGxhY2VMYXN0UXVlcnkoc2VsZWN0b3IsIHF1ZXJ5LCBuaG9vZFEpO1xuICAgICAgcmV0dXJuIG5laWdoYm9yOyAvLyBub3cgcG9wdWxhdGluZyB0aGUgbmVpZ2hib3Igd2l0aCBmb2xsb3dpbmcgZXhwcmVzc2lvbnNcbiAgICB9XG4gIH1cbn0sIHtcbiAgbmFtZTogJ2NoaWxkJyxcbiAgc2VwYXJhdG9yOiB0cnVlLFxuICByZWdleDogdG9rZW5zLmNoaWxkLFxuICBwb3B1bGF0ZTogZnVuY3Rpb24gcG9wdWxhdGUoc2VsZWN0b3IsIHF1ZXJ5KSB7XG4gICAgaWYgKHNlbGVjdG9yLmN1cnJlbnRTdWJqZWN0ID09IG51bGwpIHtcbiAgICAgIC8vIGRlZmF1bHQ6IGNoaWxkIHF1ZXJ5XG4gICAgICB2YXIgcGFyZW50Q2hpbGRRdWVyeSA9IG5ld1F1ZXJ5KCk7XG4gICAgICB2YXIgY2hpbGQgPSBuZXdRdWVyeSgpO1xuICAgICAgdmFyIHBhcmVudCA9IHNlbGVjdG9yW3NlbGVjdG9yLmxlbmd0aCAtIDFdO1xuICAgICAgcGFyZW50Q2hpbGRRdWVyeS5jaGVja3MucHVzaCh7XG4gICAgICAgIHR5cGU6IFR5cGUuQ0hJTEQsXG4gICAgICAgIHBhcmVudDogcGFyZW50LFxuICAgICAgICBjaGlsZDogY2hpbGRcbiAgICAgIH0pO1xuXG4gICAgICAvLyB0aGUgcXVlcnkgaW4gdGhlIHNlbGVjdG9yIHNob3VsZCBiZSB0aGUgJz4nIGl0c2VsZlxuICAgICAgcmVwbGFjZUxhc3RRdWVyeShzZWxlY3RvciwgcXVlcnksIHBhcmVudENoaWxkUXVlcnkpO1xuICAgICAgc2VsZWN0b3IuY29tcG91bmRDb3VudCsrO1xuXG4gICAgICAvLyB3ZSdyZSBub3cgcG9wdWxhdGluZyB0aGUgY2hpbGQgcXVlcnkgd2l0aCBleHByZXNzaW9ucyB0aGF0IGZvbGxvd1xuICAgICAgcmV0dXJuIGNoaWxkO1xuICAgIH0gZWxzZSBpZiAoc2VsZWN0b3IuY3VycmVudFN1YmplY3QgPT09IHF1ZXJ5KSB7XG4gICAgICAvLyBjb21wb3VuZCBzcGxpdCBxdWVyeVxuICAgICAgdmFyIGNvbXBvdW5kID0gbmV3UXVlcnkoKTtcbiAgICAgIHZhciBsZWZ0ID0gc2VsZWN0b3Jbc2VsZWN0b3IubGVuZ3RoIC0gMV07XG4gICAgICB2YXIgcmlnaHQgPSBuZXdRdWVyeSgpO1xuICAgICAgdmFyIHN1YmplY3QgPSBuZXdRdWVyeSgpO1xuICAgICAgdmFyIF9jaGlsZCA9IG5ld1F1ZXJ5KCk7XG4gICAgICB2YXIgX3BhcmVudCA9IG5ld1F1ZXJ5KCk7XG5cbiAgICAgIC8vIHNldCB1cCB0aGUgcm9vdCBjb21wb3VuZCBxXG4gICAgICBjb21wb3VuZC5jaGVja3MucHVzaCh7XG4gICAgICAgIHR5cGU6IFR5cGUuQ09NUE9VTkRfU1BMSVQsXG4gICAgICAgIGxlZnQ6IGxlZnQsXG4gICAgICAgIHJpZ2h0OiByaWdodCxcbiAgICAgICAgc3ViamVjdDogc3ViamVjdFxuICAgICAgfSk7XG5cbiAgICAgIC8vIHBvcHVsYXRlIHRoZSBzdWJqZWN0IGFuZCByZXBsYWNlIHRoZSBxIGF0IHRoZSBvbGQgc3BvdCAod2l0aGluIGxlZnQpIHdpdGggVFJVRVxuICAgICAgc3ViamVjdC5jaGVja3MgPSBxdWVyeS5jaGVja3M7IC8vIHRha2UgdGhlIGNoZWNrcyBmcm9tIHRoZSBsZWZ0XG4gICAgICBxdWVyeS5jaGVja3MgPSBbe1xuICAgICAgICB0eXBlOiBUeXBlLlRSVUVcbiAgICAgIH1dOyAvLyBjaGVja3MgdW5kZXIgbGVmdCByZWZzIHRoZSBzdWJqZWN0IGltcGxpY2l0bHlcblxuICAgICAgLy8gc2V0IHVwIHRoZSByaWdodCBxXG4gICAgICBfcGFyZW50LmNoZWNrcy5wdXNoKHtcbiAgICAgICAgdHlwZTogVHlwZS5UUlVFXG4gICAgICB9KTsgLy8gcGFyZW50IGltcGxpY2l0bHkgcmVmcyB0aGUgc3ViamVjdFxuICAgICAgcmlnaHQuY2hlY2tzLnB1c2goe1xuICAgICAgICB0eXBlOiBUeXBlLlBBUkVOVCxcbiAgICAgICAgLy8gdHlwZSBpcyBzd2FwcGVkIG9uIHJpZ2h0IHNpZGUgcXVlcmllc1xuICAgICAgICBwYXJlbnQ6IF9wYXJlbnQsXG4gICAgICAgIGNoaWxkOiBfY2hpbGQgLy8gZW1wdHkgZm9yIG5vd1xuICAgICAgfSk7XG4gICAgICByZXBsYWNlTGFzdFF1ZXJ5KHNlbGVjdG9yLCBsZWZ0LCBjb21wb3VuZCk7XG5cbiAgICAgIC8vIHVwZGF0ZSB0aGUgcmVmIHNpbmNlIHdlIG1vdmVkIHRoaW5ncyBhcm91bmQgZm9yIGBxdWVyeWBcbiAgICAgIHNlbGVjdG9yLmN1cnJlbnRTdWJqZWN0ID0gc3ViamVjdDtcbiAgICAgIHNlbGVjdG9yLmNvbXBvdW5kQ291bnQrKztcbiAgICAgIHJldHVybiBfY2hpbGQ7IC8vIG5vdyBwb3B1bGF0aW5nIHRoZSByaWdodCBzaWRlJ3MgY2hpbGRcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gcGFyZW50IHF1ZXJ5XG4gICAgICAvLyBpbmZvIGZvciBwYXJlbnQgcXVlcnlcbiAgICAgIHZhciBfcGFyZW50MiA9IG5ld1F1ZXJ5KCk7XG4gICAgICB2YXIgX2NoaWxkMiA9IG5ld1F1ZXJ5KCk7XG4gICAgICB2YXIgcGNRQ2hlY2tzID0gW3tcbiAgICAgICAgdHlwZTogVHlwZS5QQVJFTlQsXG4gICAgICAgIHBhcmVudDogX3BhcmVudDIsXG4gICAgICAgIGNoaWxkOiBfY2hpbGQyXG4gICAgICB9XTtcblxuICAgICAgLy8gdGhlIHBhcmVudC1jaGlsZCBxdWVyeSB0YWtlcyB0aGUgcGxhY2Ugb2YgdGhlIHF1ZXJ5IHByZXZpb3VzbHkgYmVpbmcgcG9wdWxhdGVkXG4gICAgICBfcGFyZW50Mi5jaGVja3MgPSBxdWVyeS5jaGVja3M7IC8vIHRoZSBwcmV2aW91cyBxdWVyeSBjb250YWlucyB0aGUgY2hlY2tzIGZvciB0aGUgcGFyZW50XG4gICAgICBxdWVyeS5jaGVja3MgPSBwY1FDaGVja3M7IC8vIHBjIHF1ZXJ5IHRha2VzIG92ZXJcblxuICAgICAgc2VsZWN0b3IuY29tcG91bmRDb3VudCsrO1xuICAgICAgcmV0dXJuIF9jaGlsZDI7IC8vIHdlJ3JlIG5vdyBwb3B1bGF0aW5nIHRoZSBjaGlsZFxuICAgIH1cbiAgfVxufSwge1xuICBuYW1lOiAnZGVzY2VuZGFudCcsXG4gIHNlcGFyYXRvcjogdHJ1ZSxcbiAgcmVnZXg6IHRva2Vucy5kZXNjZW5kYW50LFxuICBwb3B1bGF0ZTogZnVuY3Rpb24gcG9wdWxhdGUoc2VsZWN0b3IsIHF1ZXJ5KSB7XG4gICAgaWYgKHNlbGVjdG9yLmN1cnJlbnRTdWJqZWN0ID09IG51bGwpIHtcbiAgICAgIC8vIGRlZmF1bHQ6IGRlc2NlbmRhbnQgcXVlcnlcbiAgICAgIHZhciBhbmNDaFF1ZXJ5ID0gbmV3UXVlcnkoKTtcbiAgICAgIHZhciBkZXNjZW5kYW50ID0gbmV3UXVlcnkoKTtcbiAgICAgIHZhciBhbmNlc3RvciA9IHNlbGVjdG9yW3NlbGVjdG9yLmxlbmd0aCAtIDFdO1xuICAgICAgYW5jQ2hRdWVyeS5jaGVja3MucHVzaCh7XG4gICAgICAgIHR5cGU6IFR5cGUuREVTQ0VOREFOVCxcbiAgICAgICAgYW5jZXN0b3I6IGFuY2VzdG9yLFxuICAgICAgICBkZXNjZW5kYW50OiBkZXNjZW5kYW50XG4gICAgICB9KTtcblxuICAgICAgLy8gdGhlIHF1ZXJ5IGluIHRoZSBzZWxlY3RvciBzaG91bGQgYmUgdGhlICc+JyBpdHNlbGZcbiAgICAgIHJlcGxhY2VMYXN0UXVlcnkoc2VsZWN0b3IsIHF1ZXJ5LCBhbmNDaFF1ZXJ5KTtcbiAgICAgIHNlbGVjdG9yLmNvbXBvdW5kQ291bnQrKztcblxuICAgICAgLy8gd2UncmUgbm93IHBvcHVsYXRpbmcgdGhlIGRlc2NlbmRhbnQgcXVlcnkgd2l0aCBleHByZXNzaW9ucyB0aGF0IGZvbGxvd1xuICAgICAgcmV0dXJuIGRlc2NlbmRhbnQ7XG4gICAgfSBlbHNlIGlmIChzZWxlY3Rvci5jdXJyZW50U3ViamVjdCA9PT0gcXVlcnkpIHtcbiAgICAgIC8vIGNvbXBvdW5kIHNwbGl0IHF1ZXJ5XG4gICAgICB2YXIgY29tcG91bmQgPSBuZXdRdWVyeSgpO1xuICAgICAgdmFyIGxlZnQgPSBzZWxlY3RvcltzZWxlY3Rvci5sZW5ndGggLSAxXTtcbiAgICAgIHZhciByaWdodCA9IG5ld1F1ZXJ5KCk7XG4gICAgICB2YXIgc3ViamVjdCA9IG5ld1F1ZXJ5KCk7XG4gICAgICB2YXIgX2Rlc2NlbmRhbnQgPSBuZXdRdWVyeSgpO1xuICAgICAgdmFyIF9hbmNlc3RvciA9IG5ld1F1ZXJ5KCk7XG5cbiAgICAgIC8vIHNldCB1cCB0aGUgcm9vdCBjb21wb3VuZCBxXG4gICAgICBjb21wb3VuZC5jaGVja3MucHVzaCh7XG4gICAgICAgIHR5cGU6IFR5cGUuQ09NUE9VTkRfU1BMSVQsXG4gICAgICAgIGxlZnQ6IGxlZnQsXG4gICAgICAgIHJpZ2h0OiByaWdodCxcbiAgICAgICAgc3ViamVjdDogc3ViamVjdFxuICAgICAgfSk7XG5cbiAgICAgIC8vIHBvcHVsYXRlIHRoZSBzdWJqZWN0IGFuZCByZXBsYWNlIHRoZSBxIGF0IHRoZSBvbGQgc3BvdCAod2l0aGluIGxlZnQpIHdpdGggVFJVRVxuICAgICAgc3ViamVjdC5jaGVja3MgPSBxdWVyeS5jaGVja3M7IC8vIHRha2UgdGhlIGNoZWNrcyBmcm9tIHRoZSBsZWZ0XG4gICAgICBxdWVyeS5jaGVja3MgPSBbe1xuICAgICAgICB0eXBlOiBUeXBlLlRSVUVcbiAgICAgIH1dOyAvLyBjaGVja3MgdW5kZXIgbGVmdCByZWZzIHRoZSBzdWJqZWN0IGltcGxpY2l0bHlcblxuICAgICAgLy8gc2V0IHVwIHRoZSByaWdodCBxXG4gICAgICBfYW5jZXN0b3IuY2hlY2tzLnB1c2goe1xuICAgICAgICB0eXBlOiBUeXBlLlRSVUVcbiAgICAgIH0pOyAvLyBhbmNlc3RvciBpbXBsaWNpdGx5IHJlZnMgdGhlIHN1YmplY3RcbiAgICAgIHJpZ2h0LmNoZWNrcy5wdXNoKHtcbiAgICAgICAgdHlwZTogVHlwZS5BTkNFU1RPUixcbiAgICAgICAgLy8gdHlwZSBpcyBzd2FwcGVkIG9uIHJpZ2h0IHNpZGUgcXVlcmllc1xuICAgICAgICBhbmNlc3RvcjogX2FuY2VzdG9yLFxuICAgICAgICBkZXNjZW5kYW50OiBfZGVzY2VuZGFudCAvLyBlbXB0eSBmb3Igbm93XG4gICAgICB9KTtcbiAgICAgIHJlcGxhY2VMYXN0UXVlcnkoc2VsZWN0b3IsIGxlZnQsIGNvbXBvdW5kKTtcblxuICAgICAgLy8gdXBkYXRlIHRoZSByZWYgc2luY2Ugd2UgbW92ZWQgdGhpbmdzIGFyb3VuZCBmb3IgYHF1ZXJ5YFxuICAgICAgc2VsZWN0b3IuY3VycmVudFN1YmplY3QgPSBzdWJqZWN0O1xuICAgICAgc2VsZWN0b3IuY29tcG91bmRDb3VudCsrO1xuICAgICAgcmV0dXJuIF9kZXNjZW5kYW50OyAvLyBub3cgcG9wdWxhdGluZyB0aGUgcmlnaHQgc2lkZSdzIGRlc2NlbmRhbnRcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gYW5jZXN0b3IgcXVlcnlcbiAgICAgIC8vIGluZm8gZm9yIHBhcmVudCBxdWVyeVxuICAgICAgdmFyIF9hbmNlc3RvcjIgPSBuZXdRdWVyeSgpO1xuICAgICAgdmFyIF9kZXNjZW5kYW50MiA9IG5ld1F1ZXJ5KCk7XG4gICAgICB2YXIgYWRRQ2hlY2tzID0gW3tcbiAgICAgICAgdHlwZTogVHlwZS5BTkNFU1RPUixcbiAgICAgICAgYW5jZXN0b3I6IF9hbmNlc3RvcjIsXG4gICAgICAgIGRlc2NlbmRhbnQ6IF9kZXNjZW5kYW50MlxuICAgICAgfV07XG5cbiAgICAgIC8vIHRoZSBwYXJlbnQtY2hpbGQgcXVlcnkgdGFrZXMgdGhlIHBsYWNlIG9mIHRoZSBxdWVyeSBwcmV2aW91c2x5IGJlaW5nIHBvcHVsYXRlZFxuICAgICAgX2FuY2VzdG9yMi5jaGVja3MgPSBxdWVyeS5jaGVja3M7IC8vIHRoZSBwcmV2aW91cyBxdWVyeSBjb250YWlucyB0aGUgY2hlY2tzIGZvciB0aGUgcGFyZW50XG4gICAgICBxdWVyeS5jaGVja3MgPSBhZFFDaGVja3M7IC8vIHBjIHF1ZXJ5IHRha2VzIG92ZXJcblxuICAgICAgc2VsZWN0b3IuY29tcG91bmRDb3VudCsrO1xuICAgICAgcmV0dXJuIF9kZXNjZW5kYW50MjsgLy8gd2UncmUgbm93IHBvcHVsYXRpbmcgdGhlIGNoaWxkXG4gICAgfVxuICB9XG59LCB7XG4gIG5hbWU6ICdzdWJqZWN0JyxcbiAgbW9kaWZpZXI6IHRydWUsXG4gIHJlZ2V4OiB0b2tlbnMuc3ViamVjdCxcbiAgcG9wdWxhdGU6IGZ1bmN0aW9uIHBvcHVsYXRlKHNlbGVjdG9yLCBxdWVyeSkge1xuICAgIGlmIChzZWxlY3Rvci5jdXJyZW50U3ViamVjdCAhPSBudWxsICYmIHNlbGVjdG9yLmN1cnJlbnRTdWJqZWN0ICE9PSBxdWVyeSkge1xuICAgICAgd2FybignUmVkZWZpbml0aW9uIG9mIHN1YmplY3QgaW4gc2VsZWN0b3IgYCcgKyBzZWxlY3Rvci50b1N0cmluZygpICsgJ2AnKTtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgc2VsZWN0b3IuY3VycmVudFN1YmplY3QgPSBxdWVyeTtcbiAgICB2YXIgdG9wUSA9IHNlbGVjdG9yW3NlbGVjdG9yLmxlbmd0aCAtIDFdO1xuICAgIHZhciB0b3BDaGsgPSB0b3BRLmNoZWNrc1swXTtcbiAgICB2YXIgdG9wVHlwZSA9IHRvcENoayA9PSBudWxsID8gbnVsbCA6IHRvcENoay50eXBlO1xuICAgIGlmICh0b3BUeXBlID09PSBUeXBlLkRJUkVDVEVEX0VER0UpIHtcbiAgICAgIC8vIGRpcmVjdGVkIGVkZ2Ugd2l0aCBzdWJqZWN0IG9uIHRoZSB0YXJnZXRcblxuICAgICAgLy8gY2hhbmdlIHRvIHRhcmdldCBub2RlIGNoZWNrXG4gICAgICB0b3BDaGsudHlwZSA9IFR5cGUuTk9ERV9UQVJHRVQ7XG4gICAgfSBlbHNlIGlmICh0b3BUeXBlID09PSBUeXBlLlVORElSRUNURURfRURHRSkge1xuICAgICAgLy8gdW5kaXJlY3RlZCBlZGdlIHdpdGggc3ViamVjdCBvbiB0aGUgc2Vjb25kIG5vZGVcblxuICAgICAgLy8gY2hhbmdlIHRvIG5laWdoYm9yIGNoZWNrXG4gICAgICB0b3BDaGsudHlwZSA9IFR5cGUuTk9ERV9ORUlHSEJPUjtcbiAgICAgIHRvcENoay5ub2RlID0gdG9wQ2hrLm5vZGVzWzFdOyAvLyBzZWNvbmQgbm9kZSBpcyBzdWJqZWN0XG4gICAgICB0b3BDaGsubmVpZ2hib3IgPSB0b3BDaGsubm9kZXNbMF07XG5cbiAgICAgIC8vIGNsZWFuIHVwIHVudXNlZCBmaWVsZHMgZm9yIG5ldyB0eXBlXG4gICAgICB0b3BDaGsubm9kZXMgPSBudWxsO1xuICAgIH1cbiAgfVxufV07XG5leHBycy5mb3JFYWNoKGZ1bmN0aW9uIChlKSB7XG4gIHJldHVybiBlLnJlZ2V4T2JqID0gbmV3IFJlZ0V4cCgnXicgKyBlLnJlZ2V4KTtcbn0pO1xuXG4vKipcbiAqIE9mIGFsbCB0aGUgZXhwcmVzc2lvbnMsIGZpbmQgdGhlIGZpcnN0IG1hdGNoIGluIHRoZSByZW1haW5pbmcgdGV4dC5cbiAqIEBwYXJhbSB7c3RyaW5nfSByZW1haW5pbmcgVGhlIHJlbWFpbmluZyB0ZXh0IHRvIHBhcnNlXG4gKiBAcmV0dXJucyBUaGUgbWF0Y2hlZCBleHByZXNzaW9uIGFuZCB0aGUgbmV3bHkgcmVtYWluaW5nIHRleHQgYHsgZXhwciwgbWF0Y2gsIG5hbWUsIHJlbWFpbmluZyB9YFxuICovXG52YXIgY29uc3VtZUV4cHIgPSBmdW5jdGlvbiBjb25zdW1lRXhwcihyZW1haW5pbmcpIHtcbiAgdmFyIGV4cHI7XG4gIHZhciBtYXRjaDtcbiAgdmFyIG5hbWU7XG4gIGZvciAodmFyIGogPSAwOyBqIDwgZXhwcnMubGVuZ3RoOyBqKyspIHtcbiAgICB2YXIgZSA9IGV4cHJzW2pdO1xuICAgIHZhciBuID0gZS5uYW1lO1xuICAgIHZhciBtID0gcmVtYWluaW5nLm1hdGNoKGUucmVnZXhPYmopO1xuICAgIGlmIChtICE9IG51bGwpIHtcbiAgICAgIG1hdGNoID0gbTtcbiAgICAgIGV4cHIgPSBlO1xuICAgICAgbmFtZSA9IG47XG4gICAgICB2YXIgY29uc3VtZWQgPSBtWzBdO1xuICAgICAgcmVtYWluaW5nID0gcmVtYWluaW5nLnN1YnN0cmluZyhjb25zdW1lZC5sZW5ndGgpO1xuICAgICAgYnJlYWs7IC8vIHdlJ3ZlIGNvbnN1bWVkIG9uZSBleHByLCBzbyB3ZSBjYW4gcmV0dXJuIG5vd1xuICAgIH1cbiAgfVxuICByZXR1cm4ge1xuICAgIGV4cHI6IGV4cHIsXG4gICAgbWF0Y2g6IG1hdGNoLFxuICAgIG5hbWU6IG5hbWUsXG4gICAgcmVtYWluaW5nOiByZW1haW5pbmdcbiAgfTtcbn07XG5cbi8qKlxuICogQ29uc3VtZSBhbGwgdGhlIGxlYWRpbmcgd2hpdGVzcGFjZVxuICogQHBhcmFtIHtzdHJpbmd9IHJlbWFpbmluZyBUaGUgdGV4dCB0byBjb25zdW1lXG4gKiBAcmV0dXJucyBUaGUgdGV4dCB3aXRoIHRoZSBsZWFkaW5nIHdoaXRlc3BhY2UgcmVtb3ZlZFxuICovXG52YXIgY29uc3VtZVdoaXRlc3BhY2UgPSBmdW5jdGlvbiBjb25zdW1lV2hpdGVzcGFjZShyZW1haW5pbmcpIHtcbiAgdmFyIG1hdGNoID0gcmVtYWluaW5nLm1hdGNoKC9eXFxzKy8pO1xuICBpZiAobWF0Y2gpIHtcbiAgICB2YXIgY29uc3VtZWQgPSBtYXRjaFswXTtcbiAgICByZW1haW5pbmcgPSByZW1haW5pbmcuc3Vic3RyaW5nKGNvbnN1bWVkLmxlbmd0aCk7XG4gIH1cbiAgcmV0dXJuIHJlbWFpbmluZztcbn07XG5cbi8qKlxuICogUGFyc2UgdGhlIHN0cmluZyBhbmQgc3RvcmUgdGhlIHBhcnNlZCByZXByZXNlbnRhdGlvbiBpbiB0aGUgU2VsZWN0b3IuXG4gKiBAcGFyYW0ge3N0cmluZ30gc2VsZWN0b3IgVGhlIHNlbGVjdG9yIHN0cmluZ1xuICogQHJldHVybnMgYHRydWVgIGlmIHRoZSBzZWxlY3RvciB3YXMgc3VjY2Vzc2Z1bGx5IHBhcnNlZCwgYGZhbHNlYCBvdGhlcndpc2VcbiAqL1xudmFyIHBhcnNlID0gZnVuY3Rpb24gcGFyc2Uoc2VsZWN0b3IpIHtcbiAgdmFyIHNlbGYgPSB0aGlzO1xuICB2YXIgcmVtYWluaW5nID0gc2VsZi5pbnB1dFRleHQgPSBzZWxlY3RvcjtcbiAgdmFyIGN1cnJlbnRRdWVyeSA9IHNlbGZbMF0gPSBuZXdRdWVyeSgpO1xuICBzZWxmLmxlbmd0aCA9IDE7XG4gIHJlbWFpbmluZyA9IGNvbnN1bWVXaGl0ZXNwYWNlKHJlbWFpbmluZyk7IC8vIGdldCByaWQgb2YgbGVhZGluZyB3aGl0ZXNwYWNlXG5cbiAgZm9yICg7Oykge1xuICAgIHZhciBleHBySW5mbyA9IGNvbnN1bWVFeHByKHJlbWFpbmluZyk7XG4gICAgaWYgKGV4cHJJbmZvLmV4cHIgPT0gbnVsbCkge1xuICAgICAgd2FybignVGhlIHNlbGVjdG9yIGAnICsgc2VsZWN0b3IgKyAnYGlzIGludmFsaWQnKTtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9IGVsc2Uge1xuICAgICAgdmFyIGFyZ3MgPSBleHBySW5mby5tYXRjaC5zbGljZSgxKTtcblxuICAgICAgLy8gbGV0IHRoZSB0b2tlbiBwb3B1bGF0ZSB0aGUgc2VsZWN0b3Igb2JqZWN0IGluIGN1cnJlbnRRdWVyeVxuICAgICAgdmFyIHJldCA9IGV4cHJJbmZvLmV4cHIucG9wdWxhdGUoc2VsZiwgY3VycmVudFF1ZXJ5LCBhcmdzKTtcbiAgICAgIGlmIChyZXQgPT09IGZhbHNlKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTsgLy8gZXhpdCBpZiBwb3B1bGF0aW9uIGZhaWxlZFxuICAgICAgfSBlbHNlIGlmIChyZXQgIT0gbnVsbCkge1xuICAgICAgICBjdXJyZW50UXVlcnkgPSByZXQ7IC8vIGNoYW5nZSB0aGUgY3VycmVudCBxdWVyeSB0byBiZSBmaWxsZWQgaWYgdGhlIGV4cHIgc3BlY2lmaWVzXG4gICAgICB9XG4gICAgfVxuICAgIHJlbWFpbmluZyA9IGV4cHJJbmZvLnJlbWFpbmluZztcblxuICAgIC8vIHdlJ3JlIGRvbmUgd2hlbiB0aGVyZSdzIG5vdGhpbmcgbGVmdCB0byBwYXJzZVxuICAgIGlmIChyZW1haW5pbmcubWF0Y2goL15cXHMqJC8pKSB7XG4gICAgICBicmVhaztcbiAgICB9XG4gIH1cbiAgdmFyIGxhc3RRID0gc2VsZltzZWxmLmxlbmd0aCAtIDFdO1xuICBpZiAoc2VsZi5jdXJyZW50U3ViamVjdCAhPSBudWxsKSB7XG4gICAgbGFzdFEuc3ViamVjdCA9IHNlbGYuY3VycmVudFN1YmplY3Q7XG4gIH1cbiAgbGFzdFEuZWRnZUNvdW50ID0gc2VsZi5lZGdlQ291bnQ7XG4gIGxhc3RRLmNvbXBvdW5kQ291bnQgPSBzZWxmLmNvbXBvdW5kQ291bnQ7XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgc2VsZi5sZW5ndGg7IGkrKykge1xuICAgIHZhciBxID0gc2VsZltpXTtcblxuICAgIC8vIGluIGZ1dHVyZSwgdGhpcyBjb3VsZCBwb3RlbnRpYWxseSBiZSBhbGxvd2VkIGlmIHRoZXJlIHdlcmUgb3BlcmF0b3IgcHJlY2VkZW5jZSBhbmQgZGV0ZWN0aW9uIG9mIGludmFsaWQgY29tYmluYXRpb25zXG4gICAgaWYgKHEuY29tcG91bmRDb3VudCA+IDAgJiYgcS5lZGdlQ291bnQgPiAwKSB7XG4gICAgICB3YXJuKCdUaGUgc2VsZWN0b3IgYCcgKyBzZWxlY3RvciArICdgIGlzIGludmFsaWQgYmVjYXVzZSBpdCB1c2VzIGJvdGggYSBjb21wb3VuZCBzZWxlY3RvciBhbmQgYW4gZWRnZSBzZWxlY3RvcicpO1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICBpZiAocS5lZGdlQ291bnQgPiAxKSB7XG4gICAgICB3YXJuKCdUaGUgc2VsZWN0b3IgYCcgKyBzZWxlY3RvciArICdgIGlzIGludmFsaWQgYmVjYXVzZSBpdCB1c2VzIG11bHRpcGxlIGVkZ2Ugc2VsZWN0b3JzJyk7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfSBlbHNlIGlmIChxLmVkZ2VDb3VudCA9PT0gMSkge1xuICAgICAgd2FybignVGhlIHNlbGVjdG9yIGAnICsgc2VsZWN0b3IgKyAnYCBpcyBkZXByZWNhdGVkLiAgRWRnZSBzZWxlY3RvcnMgZG8gbm90IHRha2UgZWZmZWN0IG9uIGNoYW5nZXMgdG8gc291cmNlIGFuZCB0YXJnZXQgbm9kZXMgYWZ0ZXIgYW4gZWRnZSBpcyBhZGRlZCwgZm9yIHBlcmZvcm1hbmNlIHJlYXNvbnMuICBVc2UgYSBjbGFzcyBvciBkYXRhIHNlbGVjdG9yIG9uIGVkZ2VzIGluc3RlYWQsIHVwZGF0aW5nIHRoZSBjbGFzcyBvciBkYXRhIG9mIGFuIGVkZ2Ugd2hlbiB5b3VyIGFwcCBkZXRlY3RzIGEgY2hhbmdlIGluIHNvdXJjZSBvciB0YXJnZXQgbm9kZXMuJyk7XG4gICAgfVxuICB9XG4gIHJldHVybiB0cnVlOyAvLyBzdWNjZXNzXG59O1xuXG4vKipcbiAqIEdldCB0aGUgc2VsZWN0b3IgcmVwcmVzZW50ZWQgYXMgYSBzdHJpbmcuICBUaGlzIHZhbHVlIHVzZXMgZGVmYXVsdCBmb3JtYXR0aW5nLFxuICogc28gdGhpbmdzIGxpa2Ugc3BhY2luZyBtYXkgZGlmZmVyIGZyb20gdGhlIGlucHV0IHRleHQgcGFzc2VkIHRvIHRoZSBjb25zdHJ1Y3Rvci5cbiAqIEByZXR1cm5zIHtzdHJpbmd9IFRoZSBzZWxlY3RvciBzdHJpbmdcbiAqL1xudmFyIHRvU3RyaW5nID0gZnVuY3Rpb24gdG9TdHJpbmcoKSB7XG4gIGlmICh0aGlzLnRvU3RyaW5nQ2FjaGUgIT0gbnVsbCkge1xuICAgIHJldHVybiB0aGlzLnRvU3RyaW5nQ2FjaGU7XG4gIH1cbiAgdmFyIGNsZWFuID0gZnVuY3Rpb24gY2xlYW4ob2JqKSB7XG4gICAgaWYgKG9iaiA9PSBudWxsKSB7XG4gICAgICByZXR1cm4gJyc7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBvYmo7XG4gICAgfVxuICB9O1xuICB2YXIgY2xlYW5WYWwgPSBmdW5jdGlvbiBjbGVhblZhbCh2YWwpIHtcbiAgICBpZiAoc3RyaW5nKHZhbCkpIHtcbiAgICAgIHJldHVybiAnXCInICsgdmFsICsgJ1wiJztcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIGNsZWFuKHZhbCk7XG4gICAgfVxuICB9O1xuICB2YXIgc3BhY2UgPSBmdW5jdGlvbiBzcGFjZSh2YWwpIHtcbiAgICByZXR1cm4gJyAnICsgdmFsICsgJyAnO1xuICB9O1xuICB2YXIgY2hlY2tUb1N0cmluZyA9IGZ1bmN0aW9uIGNoZWNrVG9TdHJpbmcoY2hlY2ssIHN1YmplY3QpIHtcbiAgICB2YXIgdHlwZSA9IGNoZWNrLnR5cGUsXG4gICAgICB2YWx1ZSA9IGNoZWNrLnZhbHVlO1xuICAgIHN3aXRjaCAodHlwZSkge1xuICAgICAgY2FzZSBUeXBlLkdST1VQOlxuICAgICAgICB7XG4gICAgICAgICAgdmFyIGdyb3VwID0gY2xlYW4odmFsdWUpO1xuICAgICAgICAgIHJldHVybiBncm91cC5zdWJzdHJpbmcoMCwgZ3JvdXAubGVuZ3RoIC0gMSk7XG4gICAgICAgIH1cbiAgICAgIGNhc2UgVHlwZS5EQVRBX0NPTVBBUkU6XG4gICAgICAgIHtcbiAgICAgICAgICB2YXIgZmllbGQgPSBjaGVjay5maWVsZCxcbiAgICAgICAgICAgIG9wZXJhdG9yID0gY2hlY2sub3BlcmF0b3I7XG4gICAgICAgICAgcmV0dXJuICdbJyArIGZpZWxkICsgc3BhY2UoY2xlYW4ob3BlcmF0b3IpKSArIGNsZWFuVmFsKHZhbHVlKSArICddJztcbiAgICAgICAgfVxuICAgICAgY2FzZSBUeXBlLkRBVEFfQk9PTDpcbiAgICAgICAge1xuICAgICAgICAgIHZhciBfb3BlcmF0b3IgPSBjaGVjay5vcGVyYXRvcixcbiAgICAgICAgICAgIF9maWVsZCA9IGNoZWNrLmZpZWxkO1xuICAgICAgICAgIHJldHVybiAnWycgKyBjbGVhbihfb3BlcmF0b3IpICsgX2ZpZWxkICsgJ10nO1xuICAgICAgICB9XG4gICAgICBjYXNlIFR5cGUuREFUQV9FWElTVDpcbiAgICAgICAge1xuICAgICAgICAgIHZhciBfZmllbGQyID0gY2hlY2suZmllbGQ7XG4gICAgICAgICAgcmV0dXJuICdbJyArIF9maWVsZDIgKyAnXSc7XG4gICAgICAgIH1cbiAgICAgIGNhc2UgVHlwZS5NRVRBX0NPTVBBUkU6XG4gICAgICAgIHtcbiAgICAgICAgICB2YXIgX29wZXJhdG9yMiA9IGNoZWNrLm9wZXJhdG9yLFxuICAgICAgICAgICAgX2ZpZWxkMyA9IGNoZWNrLmZpZWxkO1xuICAgICAgICAgIHJldHVybiAnW1snICsgX2ZpZWxkMyArIHNwYWNlKGNsZWFuKF9vcGVyYXRvcjIpKSArIGNsZWFuVmFsKHZhbHVlKSArICddXSc7XG4gICAgICAgIH1cbiAgICAgIGNhc2UgVHlwZS5TVEFURTpcbiAgICAgICAge1xuICAgICAgICAgIHJldHVybiB2YWx1ZTtcbiAgICAgICAgfVxuICAgICAgY2FzZSBUeXBlLklEOlxuICAgICAgICB7XG4gICAgICAgICAgcmV0dXJuICcjJyArIHZhbHVlO1xuICAgICAgICB9XG4gICAgICBjYXNlIFR5cGUuQ0xBU1M6XG4gICAgICAgIHtcbiAgICAgICAgICByZXR1cm4gJy4nICsgdmFsdWU7XG4gICAgICAgIH1cbiAgICAgIGNhc2UgVHlwZS5QQVJFTlQ6XG4gICAgICBjYXNlIFR5cGUuQ0hJTEQ6XG4gICAgICAgIHtcbiAgICAgICAgICByZXR1cm4gcXVlcnlUb1N0cmluZyhjaGVjay5wYXJlbnQsIHN1YmplY3QpICsgc3BhY2UoJz4nKSArIHF1ZXJ5VG9TdHJpbmcoY2hlY2suY2hpbGQsIHN1YmplY3QpO1xuICAgICAgICB9XG4gICAgICBjYXNlIFR5cGUuQU5DRVNUT1I6XG4gICAgICBjYXNlIFR5cGUuREVTQ0VOREFOVDpcbiAgICAgICAge1xuICAgICAgICAgIHJldHVybiBxdWVyeVRvU3RyaW5nKGNoZWNrLmFuY2VzdG9yLCBzdWJqZWN0KSArICcgJyArIHF1ZXJ5VG9TdHJpbmcoY2hlY2suZGVzY2VuZGFudCwgc3ViamVjdCk7XG4gICAgICAgIH1cbiAgICAgIGNhc2UgVHlwZS5DT01QT1VORF9TUExJVDpcbiAgICAgICAge1xuICAgICAgICAgIHZhciBsaHMgPSBxdWVyeVRvU3RyaW5nKGNoZWNrLmxlZnQsIHN1YmplY3QpO1xuICAgICAgICAgIHZhciBzdWIgPSBxdWVyeVRvU3RyaW5nKGNoZWNrLnN1YmplY3QsIHN1YmplY3QpO1xuICAgICAgICAgIHZhciByaHMgPSBxdWVyeVRvU3RyaW5nKGNoZWNrLnJpZ2h0LCBzdWJqZWN0KTtcbiAgICAgICAgICByZXR1cm4gbGhzICsgKGxocy5sZW5ndGggPiAwID8gJyAnIDogJycpICsgc3ViICsgcmhzO1xuICAgICAgICB9XG4gICAgICBjYXNlIFR5cGUuVFJVRTpcbiAgICAgICAge1xuICAgICAgICAgIHJldHVybiAnJztcbiAgICAgICAgfVxuICAgIH1cbiAgfTtcbiAgdmFyIHF1ZXJ5VG9TdHJpbmcgPSBmdW5jdGlvbiBxdWVyeVRvU3RyaW5nKHF1ZXJ5LCBzdWJqZWN0KSB7XG4gICAgcmV0dXJuIHF1ZXJ5LmNoZWNrcy5yZWR1Y2UoZnVuY3Rpb24gKHN0ciwgY2hrLCBpKSB7XG4gICAgICByZXR1cm4gc3RyICsgKHN1YmplY3QgPT09IHF1ZXJ5ICYmIGkgPT09IDAgPyAnJCcgOiAnJykgKyBjaGVja1RvU3RyaW5nKGNoaywgc3ViamVjdCk7XG4gICAgfSwgJycpO1xuICB9O1xuICB2YXIgc3RyID0gJyc7XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5sZW5ndGg7IGkrKykge1xuICAgIHZhciBxdWVyeSA9IHRoaXNbaV07XG4gICAgc3RyICs9IHF1ZXJ5VG9TdHJpbmcocXVlcnksIHF1ZXJ5LnN1YmplY3QpO1xuICAgIGlmICh0aGlzLmxlbmd0aCA+IDEgJiYgaSA8IHRoaXMubGVuZ3RoIC0gMSkge1xuICAgICAgc3RyICs9ICcsICc7XG4gICAgfVxuICB9XG4gIHRoaXMudG9TdHJpbmdDYWNoZSA9IHN0cjtcbiAgcmV0dXJuIHN0cjtcbn07XG52YXIgcGFyc2UkMSA9IHtcbiAgcGFyc2U6IHBhcnNlLFxuICB0b1N0cmluZzogdG9TdHJpbmdcbn07XG5cbnZhciB2YWxDbXAgPSBmdW5jdGlvbiB2YWxDbXAoZmllbGRWYWwsIG9wZXJhdG9yLCB2YWx1ZSkge1xuICB2YXIgbWF0Y2hlcztcbiAgdmFyIGlzRmllbGRTdHIgPSBzdHJpbmcoZmllbGRWYWwpO1xuICB2YXIgaXNGaWVsZE51bSA9IG51bWJlciQxKGZpZWxkVmFsKTtcbiAgdmFyIGlzVmFsU3RyID0gc3RyaW5nKHZhbHVlKTtcbiAgdmFyIGZpZWxkU3RyLCB2YWxTdHI7XG4gIHZhciBjYXNlSW5zZW5zaXRpdmUgPSBmYWxzZTtcbiAgdmFyIG5vdEV4cHIgPSBmYWxzZTtcbiAgdmFyIGlzSW5lcUNtcCA9IGZhbHNlO1xuICBpZiAob3BlcmF0b3IuaW5kZXhPZignIScpID49IDApIHtcbiAgICBvcGVyYXRvciA9IG9wZXJhdG9yLnJlcGxhY2UoJyEnLCAnJyk7XG4gICAgbm90RXhwciA9IHRydWU7XG4gIH1cbiAgaWYgKG9wZXJhdG9yLmluZGV4T2YoJ0AnKSA+PSAwKSB7XG4gICAgb3BlcmF0b3IgPSBvcGVyYXRvci5yZXBsYWNlKCdAJywgJycpO1xuICAgIGNhc2VJbnNlbnNpdGl2ZSA9IHRydWU7XG4gIH1cbiAgaWYgKGlzRmllbGRTdHIgfHwgaXNWYWxTdHIgfHwgY2FzZUluc2Vuc2l0aXZlKSB7XG4gICAgZmllbGRTdHIgPSAhaXNGaWVsZFN0ciAmJiAhaXNGaWVsZE51bSA/ICcnIDogJycgKyBmaWVsZFZhbDtcbiAgICB2YWxTdHIgPSAnJyArIHZhbHVlO1xuICB9XG5cbiAgLy8gaWYgd2UncmUgZG9pbmcgYSBjYXNlIGluc2Vuc2l0aXZlIGNvbXBhcmlzb24sIHRoZW4gd2UncmUgdXNpbmcgYSBTVFJJTkcgY29tcGFyaXNvblxuICAvLyBldmVuIGlmIHdlJ3JlIGNvbXBhcmluZyBudW1iZXJzXG4gIGlmIChjYXNlSW5zZW5zaXRpdmUpIHtcbiAgICBmaWVsZFZhbCA9IGZpZWxkU3RyID0gZmllbGRTdHIudG9Mb3dlckNhc2UoKTtcbiAgICB2YWx1ZSA9IHZhbFN0ciA9IHZhbFN0ci50b0xvd2VyQ2FzZSgpO1xuICB9XG4gIHN3aXRjaCAob3BlcmF0b3IpIHtcbiAgICBjYXNlICcqPSc6XG4gICAgICBtYXRjaGVzID0gZmllbGRTdHIuaW5kZXhPZih2YWxTdHIpID49IDA7XG4gICAgICBicmVhaztcbiAgICBjYXNlICckPSc6XG4gICAgICBtYXRjaGVzID0gZmllbGRTdHIuaW5kZXhPZih2YWxTdHIsIGZpZWxkU3RyLmxlbmd0aCAtIHZhbFN0ci5sZW5ndGgpID49IDA7XG4gICAgICBicmVhaztcbiAgICBjYXNlICdePSc6XG4gICAgICBtYXRjaGVzID0gZmllbGRTdHIuaW5kZXhPZih2YWxTdHIpID09PSAwO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSAnPSc6XG4gICAgICBtYXRjaGVzID0gZmllbGRWYWwgPT09IHZhbHVlO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSAnPic6XG4gICAgICBpc0luZXFDbXAgPSB0cnVlO1xuICAgICAgbWF0Y2hlcyA9IGZpZWxkVmFsID4gdmFsdWU7XG4gICAgICBicmVhaztcbiAgICBjYXNlICc+PSc6XG4gICAgICBpc0luZXFDbXAgPSB0cnVlO1xuICAgICAgbWF0Y2hlcyA9IGZpZWxkVmFsID49IHZhbHVlO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSAnPCc6XG4gICAgICBpc0luZXFDbXAgPSB0cnVlO1xuICAgICAgbWF0Y2hlcyA9IGZpZWxkVmFsIDwgdmFsdWU7XG4gICAgICBicmVhaztcbiAgICBjYXNlICc8PSc6XG4gICAgICBpc0luZXFDbXAgPSB0cnVlO1xuICAgICAgbWF0Y2hlcyA9IGZpZWxkVmFsIDw9IHZhbHVlO1xuICAgICAgYnJlYWs7XG4gICAgZGVmYXVsdDpcbiAgICAgIG1hdGNoZXMgPSBmYWxzZTtcbiAgICAgIGJyZWFrO1xuICB9XG5cbiAgLy8gYXBwbHkgdGhlIG5vdCBvcCwgYnV0IG51bGwgdmFscyBmb3IgaW5lcXVhbGl0aWVzIHNob3VsZCBhbHdheXMgc3RheSBub24tbWF0Y2hpbmdcbiAgaWYgKG5vdEV4cHIgJiYgKGZpZWxkVmFsICE9IG51bGwgfHwgIWlzSW5lcUNtcCkpIHtcbiAgICBtYXRjaGVzID0gIW1hdGNoZXM7XG4gIH1cbiAgcmV0dXJuIG1hdGNoZXM7XG59O1xudmFyIGJvb2xDbXAgPSBmdW5jdGlvbiBib29sQ21wKGZpZWxkVmFsLCBvcGVyYXRvcikge1xuICBzd2l0Y2ggKG9wZXJhdG9yKSB7XG4gICAgY2FzZSAnPyc6XG4gICAgICByZXR1cm4gZmllbGRWYWwgPyB0cnVlIDogZmFsc2U7XG4gICAgY2FzZSAnISc6XG4gICAgICByZXR1cm4gZmllbGRWYWwgPyBmYWxzZSA6IHRydWU7XG4gICAgY2FzZSAnXic6XG4gICAgICByZXR1cm4gZmllbGRWYWwgPT09IHVuZGVmaW5lZDtcbiAgfVxufTtcbnZhciBleGlzdENtcCA9IGZ1bmN0aW9uIGV4aXN0Q21wKGZpZWxkVmFsKSB7XG4gIHJldHVybiBmaWVsZFZhbCAhPT0gdW5kZWZpbmVkO1xufTtcbnZhciBkYXRhJDEgPSBmdW5jdGlvbiBkYXRhKGVsZSwgZmllbGQpIHtcbiAgcmV0dXJuIGVsZS5kYXRhKGZpZWxkKTtcbn07XG52YXIgbWV0YSA9IGZ1bmN0aW9uIG1ldGEoZWxlLCBmaWVsZCkge1xuICByZXR1cm4gZWxlW2ZpZWxkXSgpO1xufTtcblxuLyoqIEEgbG9va3VwIG9mIGBtYXRjaChjaGVjaywgZWxlKWAgZnVuY3Rpb25zIGJ5IGBUeXBlYCBpbnQgKi9cbnZhciBtYXRjaCA9IFtdO1xuXG4vKipcbiAqIFJldHVybnMgd2hldGhlciB0aGUgcXVlcnkgbWF0Y2hlcyBmb3IgdGhlIGVsZW1lbnRcbiAqIEBwYXJhbSBxdWVyeSBUaGUgYHsgdHlwZSwgdmFsdWUsIC4uLiB9YCBxdWVyeSBvYmplY3RcbiAqIEBwYXJhbSBlbGUgVGhlIGVsZW1lbnQgdG8gY29tcGFyZSBhZ2FpbnN0XG4qL1xudmFyIG1hdGNoZXMkMSA9IGZ1bmN0aW9uIG1hdGNoZXMocXVlcnksIGVsZSkge1xuICByZXR1cm4gcXVlcnkuY2hlY2tzLmV2ZXJ5KGZ1bmN0aW9uIChjaGspIHtcbiAgICByZXR1cm4gbWF0Y2hbY2hrLnR5cGVdKGNoaywgZWxlKTtcbiAgfSk7XG59O1xubWF0Y2hbVHlwZS5HUk9VUF0gPSBmdW5jdGlvbiAoY2hlY2ssIGVsZSkge1xuICB2YXIgZ3JvdXAgPSBjaGVjay52YWx1ZTtcbiAgcmV0dXJuIGdyb3VwID09PSAnKicgfHwgZ3JvdXAgPT09IGVsZS5ncm91cCgpO1xufTtcbm1hdGNoW1R5cGUuU1RBVEVdID0gZnVuY3Rpb24gKGNoZWNrLCBlbGUpIHtcbiAgdmFyIHN0YXRlU2VsZWN0b3IgPSBjaGVjay52YWx1ZTtcbiAgcmV0dXJuIHN0YXRlU2VsZWN0b3JNYXRjaGVzKHN0YXRlU2VsZWN0b3IsIGVsZSk7XG59O1xubWF0Y2hbVHlwZS5JRF0gPSBmdW5jdGlvbiAoY2hlY2ssIGVsZSkge1xuICB2YXIgaWQgPSBjaGVjay52YWx1ZTtcbiAgcmV0dXJuIGVsZS5pZCgpID09PSBpZDtcbn07XG5tYXRjaFtUeXBlLkNMQVNTXSA9IGZ1bmN0aW9uIChjaGVjaywgZWxlKSB7XG4gIHZhciBjbHMgPSBjaGVjay52YWx1ZTtcbiAgcmV0dXJuIGVsZS5oYXNDbGFzcyhjbHMpO1xufTtcbm1hdGNoW1R5cGUuTUVUQV9DT01QQVJFXSA9IGZ1bmN0aW9uIChjaGVjaywgZWxlKSB7XG4gIHZhciBmaWVsZCA9IGNoZWNrLmZpZWxkLFxuICAgIG9wZXJhdG9yID0gY2hlY2sub3BlcmF0b3IsXG4gICAgdmFsdWUgPSBjaGVjay52YWx1ZTtcbiAgcmV0dXJuIHZhbENtcChtZXRhKGVsZSwgZmllbGQpLCBvcGVyYXRvciwgdmFsdWUpO1xufTtcbm1hdGNoW1R5cGUuREFUQV9DT01QQVJFXSA9IGZ1bmN0aW9uIChjaGVjaywgZWxlKSB7XG4gIHZhciBmaWVsZCA9IGNoZWNrLmZpZWxkLFxuICAgIG9wZXJhdG9yID0gY2hlY2sub3BlcmF0b3IsXG4gICAgdmFsdWUgPSBjaGVjay52YWx1ZTtcbiAgcmV0dXJuIHZhbENtcChkYXRhJDEoZWxlLCBmaWVsZCksIG9wZXJhdG9yLCB2YWx1ZSk7XG59O1xubWF0Y2hbVHlwZS5EQVRBX0JPT0xdID0gZnVuY3Rpb24gKGNoZWNrLCBlbGUpIHtcbiAgdmFyIGZpZWxkID0gY2hlY2suZmllbGQsXG4gICAgb3BlcmF0b3IgPSBjaGVjay5vcGVyYXRvcjtcbiAgcmV0dXJuIGJvb2xDbXAoZGF0YSQxKGVsZSwgZmllbGQpLCBvcGVyYXRvcik7XG59O1xubWF0Y2hbVHlwZS5EQVRBX0VYSVNUXSA9IGZ1bmN0aW9uIChjaGVjaywgZWxlKSB7XG4gIHZhciBmaWVsZCA9IGNoZWNrLmZpZWxkO1xuICAgIGNoZWNrLm9wZXJhdG9yO1xuICByZXR1cm4gZXhpc3RDbXAoZGF0YSQxKGVsZSwgZmllbGQpKTtcbn07XG5tYXRjaFtUeXBlLlVORElSRUNURURfRURHRV0gPSBmdW5jdGlvbiAoY2hlY2ssIGVsZSkge1xuICB2YXIgcUEgPSBjaGVjay5ub2Rlc1swXTtcbiAgdmFyIHFCID0gY2hlY2subm9kZXNbMV07XG4gIHZhciBzcmMgPSBlbGUuc291cmNlKCk7XG4gIHZhciB0Z3QgPSBlbGUudGFyZ2V0KCk7XG4gIHJldHVybiBtYXRjaGVzJDEocUEsIHNyYykgJiYgbWF0Y2hlcyQxKHFCLCB0Z3QpIHx8IG1hdGNoZXMkMShxQiwgc3JjKSAmJiBtYXRjaGVzJDEocUEsIHRndCk7XG59O1xubWF0Y2hbVHlwZS5OT0RFX05FSUdIQk9SXSA9IGZ1bmN0aW9uIChjaGVjaywgZWxlKSB7XG4gIHJldHVybiBtYXRjaGVzJDEoY2hlY2subm9kZSwgZWxlKSAmJiBlbGUubmVpZ2hib3Job29kKCkuc29tZShmdW5jdGlvbiAobikge1xuICAgIHJldHVybiBuLmlzTm9kZSgpICYmIG1hdGNoZXMkMShjaGVjay5uZWlnaGJvciwgbik7XG4gIH0pO1xufTtcbm1hdGNoW1R5cGUuRElSRUNURURfRURHRV0gPSBmdW5jdGlvbiAoY2hlY2ssIGVsZSkge1xuICByZXR1cm4gbWF0Y2hlcyQxKGNoZWNrLnNvdXJjZSwgZWxlLnNvdXJjZSgpKSAmJiBtYXRjaGVzJDEoY2hlY2sudGFyZ2V0LCBlbGUudGFyZ2V0KCkpO1xufTtcbm1hdGNoW1R5cGUuTk9ERV9TT1VSQ0VdID0gZnVuY3Rpb24gKGNoZWNrLCBlbGUpIHtcbiAgcmV0dXJuIG1hdGNoZXMkMShjaGVjay5zb3VyY2UsIGVsZSkgJiYgZWxlLm91dGdvZXJzKCkuc29tZShmdW5jdGlvbiAobikge1xuICAgIHJldHVybiBuLmlzTm9kZSgpICYmIG1hdGNoZXMkMShjaGVjay50YXJnZXQsIG4pO1xuICB9KTtcbn07XG5tYXRjaFtUeXBlLk5PREVfVEFSR0VUXSA9IGZ1bmN0aW9uIChjaGVjaywgZWxlKSB7XG4gIHJldHVybiBtYXRjaGVzJDEoY2hlY2sudGFyZ2V0LCBlbGUpICYmIGVsZS5pbmNvbWVycygpLnNvbWUoZnVuY3Rpb24gKG4pIHtcbiAgICByZXR1cm4gbi5pc05vZGUoKSAmJiBtYXRjaGVzJDEoY2hlY2suc291cmNlLCBuKTtcbiAgfSk7XG59O1xubWF0Y2hbVHlwZS5DSElMRF0gPSBmdW5jdGlvbiAoY2hlY2ssIGVsZSkge1xuICByZXR1cm4gbWF0Y2hlcyQxKGNoZWNrLmNoaWxkLCBlbGUpICYmIG1hdGNoZXMkMShjaGVjay5wYXJlbnQsIGVsZS5wYXJlbnQoKSk7XG59O1xubWF0Y2hbVHlwZS5QQVJFTlRdID0gZnVuY3Rpb24gKGNoZWNrLCBlbGUpIHtcbiAgcmV0dXJuIG1hdGNoZXMkMShjaGVjay5wYXJlbnQsIGVsZSkgJiYgZWxlLmNoaWxkcmVuKCkuc29tZShmdW5jdGlvbiAoYykge1xuICAgIHJldHVybiBtYXRjaGVzJDEoY2hlY2suY2hpbGQsIGMpO1xuICB9KTtcbn07XG5tYXRjaFtUeXBlLkRFU0NFTkRBTlRdID0gZnVuY3Rpb24gKGNoZWNrLCBlbGUpIHtcbiAgcmV0dXJuIG1hdGNoZXMkMShjaGVjay5kZXNjZW5kYW50LCBlbGUpICYmIGVsZS5hbmNlc3RvcnMoKS5zb21lKGZ1bmN0aW9uIChhKSB7XG4gICAgcmV0dXJuIG1hdGNoZXMkMShjaGVjay5hbmNlc3RvciwgYSk7XG4gIH0pO1xufTtcbm1hdGNoW1R5cGUuQU5DRVNUT1JdID0gZnVuY3Rpb24gKGNoZWNrLCBlbGUpIHtcbiAgcmV0dXJuIG1hdGNoZXMkMShjaGVjay5hbmNlc3RvciwgZWxlKSAmJiBlbGUuZGVzY2VuZGFudHMoKS5zb21lKGZ1bmN0aW9uIChkKSB7XG4gICAgcmV0dXJuIG1hdGNoZXMkMShjaGVjay5kZXNjZW5kYW50LCBkKTtcbiAgfSk7XG59O1xubWF0Y2hbVHlwZS5DT01QT1VORF9TUExJVF0gPSBmdW5jdGlvbiAoY2hlY2ssIGVsZSkge1xuICByZXR1cm4gbWF0Y2hlcyQxKGNoZWNrLnN1YmplY3QsIGVsZSkgJiYgbWF0Y2hlcyQxKGNoZWNrLmxlZnQsIGVsZSkgJiYgbWF0Y2hlcyQxKGNoZWNrLnJpZ2h0LCBlbGUpO1xufTtcbm1hdGNoW1R5cGUuVFJVRV0gPSBmdW5jdGlvbiAoKSB7XG4gIHJldHVybiB0cnVlO1xufTtcbm1hdGNoW1R5cGUuQ09MTEVDVElPTl0gPSBmdW5jdGlvbiAoY2hlY2ssIGVsZSkge1xuICB2YXIgY29sbGVjdGlvbiA9IGNoZWNrLnZhbHVlO1xuICByZXR1cm4gY29sbGVjdGlvbi5oYXMoZWxlKTtcbn07XG5tYXRjaFtUeXBlLkZJTFRFUl0gPSBmdW5jdGlvbiAoY2hlY2ssIGVsZSkge1xuICB2YXIgZmlsdGVyID0gY2hlY2sudmFsdWU7XG4gIHJldHVybiBmaWx0ZXIoZWxlKTtcbn07XG5cbi8vIGZpbHRlciBhbiBleGlzdGluZyBjb2xsZWN0aW9uXG52YXIgZmlsdGVyID0gZnVuY3Rpb24gZmlsdGVyKGNvbGxlY3Rpb24pIHtcbiAgdmFyIHNlbGYgPSB0aGlzO1xuXG4gIC8vIGZvciAxIGlkICNmb28gcXVlcmllcywganVzdCBnZXQgdGhlIGVsZW1lbnRcbiAgaWYgKHNlbGYubGVuZ3RoID09PSAxICYmIHNlbGZbMF0uY2hlY2tzLmxlbmd0aCA9PT0gMSAmJiBzZWxmWzBdLmNoZWNrc1swXS50eXBlID09PSBUeXBlLklEKSB7XG4gICAgcmV0dXJuIGNvbGxlY3Rpb24uZ2V0RWxlbWVudEJ5SWQoc2VsZlswXS5jaGVja3NbMF0udmFsdWUpLmNvbGxlY3Rpb24oKTtcbiAgfVxuICB2YXIgc2VsZWN0b3JGdW5jdGlvbiA9IGZ1bmN0aW9uIHNlbGVjdG9yRnVuY3Rpb24oZWxlbWVudCkge1xuICAgIGZvciAodmFyIGogPSAwOyBqIDwgc2VsZi5sZW5ndGg7IGorKykge1xuICAgICAgdmFyIHF1ZXJ5ID0gc2VsZltqXTtcbiAgICAgIGlmIChtYXRjaGVzJDEocXVlcnksIGVsZW1lbnQpKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG4gIH07XG4gIGlmIChzZWxmLnRleHQoKSA9PSBudWxsKSB7XG4gICAgc2VsZWN0b3JGdW5jdGlvbiA9IGZ1bmN0aW9uIHNlbGVjdG9yRnVuY3Rpb24oKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9O1xuICB9XG4gIHJldHVybiBjb2xsZWN0aW9uLmZpbHRlcihzZWxlY3RvckZ1bmN0aW9uKTtcbn07IC8vIGZpbHRlclxuXG4vLyBkb2VzIHNlbGVjdG9yIG1hdGNoIGEgc2luZ2xlIGVsZW1lbnQ/XG52YXIgbWF0Y2hlcyA9IGZ1bmN0aW9uIG1hdGNoZXMoZWxlKSB7XG4gIHZhciBzZWxmID0gdGhpcztcbiAgZm9yICh2YXIgaiA9IDA7IGogPCBzZWxmLmxlbmd0aDsgaisrKSB7XG4gICAgdmFyIHF1ZXJ5ID0gc2VsZltqXTtcbiAgICBpZiAobWF0Y2hlcyQxKHF1ZXJ5LCBlbGUpKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIGZhbHNlO1xufTsgLy8gbWF0Y2hlc1xuXG52YXIgbWF0Y2hpbmcgPSB7XG4gIG1hdGNoZXM6IG1hdGNoZXMsXG4gIGZpbHRlcjogZmlsdGVyXG59O1xuXG52YXIgU2VsZWN0b3IgPSBmdW5jdGlvbiBTZWxlY3RvcihzZWxlY3Rvcikge1xuICB0aGlzLmlucHV0VGV4dCA9IHNlbGVjdG9yO1xuICB0aGlzLmN1cnJlbnRTdWJqZWN0ID0gbnVsbDtcbiAgdGhpcy5jb21wb3VuZENvdW50ID0gMDtcbiAgdGhpcy5lZGdlQ291bnQgPSAwO1xuICB0aGlzLmxlbmd0aCA9IDA7XG4gIGlmIChzZWxlY3RvciA9PSBudWxsIHx8IHN0cmluZyhzZWxlY3RvcikgJiYgc2VsZWN0b3IubWF0Y2goL15cXHMqJC8pKSA7IGVsc2UgaWYgKGVsZW1lbnRPckNvbGxlY3Rpb24oc2VsZWN0b3IpKSB7XG4gICAgdGhpcy5hZGRRdWVyeSh7XG4gICAgICBjaGVja3M6IFt7XG4gICAgICAgIHR5cGU6IFR5cGUuQ09MTEVDVElPTixcbiAgICAgICAgdmFsdWU6IHNlbGVjdG9yLmNvbGxlY3Rpb24oKVxuICAgICAgfV1cbiAgICB9KTtcbiAgfSBlbHNlIGlmIChmbiQ2KHNlbGVjdG9yKSkge1xuICAgIHRoaXMuYWRkUXVlcnkoe1xuICAgICAgY2hlY2tzOiBbe1xuICAgICAgICB0eXBlOiBUeXBlLkZJTFRFUixcbiAgICAgICAgdmFsdWU6IHNlbGVjdG9yXG4gICAgICB9XVxuICAgIH0pO1xuICB9IGVsc2UgaWYgKHN0cmluZyhzZWxlY3RvcikpIHtcbiAgICBpZiAoIXRoaXMucGFyc2Uoc2VsZWN0b3IpKSB7XG4gICAgICB0aGlzLmludmFsaWQgPSB0cnVlO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICBlcnJvcignQSBzZWxlY3RvciBtdXN0IGJlIGNyZWF0ZWQgZnJvbSBhIHN0cmluZzsgZm91bmQgJyk7XG4gIH1cbn07XG52YXIgc2VsZm4gPSBTZWxlY3Rvci5wcm90b3R5cGU7XG5bcGFyc2UkMSwgbWF0Y2hpbmddLmZvckVhY2goZnVuY3Rpb24gKHApIHtcbiAgcmV0dXJuIGV4dGVuZChzZWxmbiwgcCk7XG59KTtcbnNlbGZuLnRleHQgPSBmdW5jdGlvbiAoKSB7XG4gIHJldHVybiB0aGlzLmlucHV0VGV4dDtcbn07XG5zZWxmbi5zaXplID0gZnVuY3Rpb24gKCkge1xuICByZXR1cm4gdGhpcy5sZW5ndGg7XG59O1xuc2VsZm4uZXEgPSBmdW5jdGlvbiAoaSkge1xuICByZXR1cm4gdGhpc1tpXTtcbn07XG5zZWxmbi5zYW1lVGV4dCA9IGZ1bmN0aW9uIChvdGhlclNlbCkge1xuICByZXR1cm4gIXRoaXMuaW52YWxpZCAmJiAhb3RoZXJTZWwuaW52YWxpZCAmJiB0aGlzLnRleHQoKSA9PT0gb3RoZXJTZWwudGV4dCgpO1xufTtcbnNlbGZuLmFkZFF1ZXJ5ID0gZnVuY3Rpb24gKHEpIHtcbiAgdGhpc1t0aGlzLmxlbmd0aCsrXSA9IHE7XG59O1xuc2VsZm4uc2VsZWN0b3IgPSBzZWxmbi50b1N0cmluZztcblxudmFyIGVsZXNmbiRnID0ge1xuICBhbGxBcmU6IGZ1bmN0aW9uIGFsbEFyZShzZWxlY3Rvcikge1xuICAgIHZhciBzZWxPYmogPSBuZXcgU2VsZWN0b3Ioc2VsZWN0b3IpO1xuICAgIHJldHVybiB0aGlzLmV2ZXJ5KGZ1bmN0aW9uIChlbGUpIHtcbiAgICAgIHJldHVybiBzZWxPYmoubWF0Y2hlcyhlbGUpO1xuICAgIH0pO1xuICB9LFxuICBpczogZnVuY3Rpb24gaXMoc2VsZWN0b3IpIHtcbiAgICB2YXIgc2VsT2JqID0gbmV3IFNlbGVjdG9yKHNlbGVjdG9yKTtcbiAgICByZXR1cm4gdGhpcy5zb21lKGZ1bmN0aW9uIChlbGUpIHtcbiAgICAgIHJldHVybiBzZWxPYmoubWF0Y2hlcyhlbGUpO1xuICAgIH0pO1xuICB9LFxuICBzb21lOiBmdW5jdGlvbiBzb21lKGZuLCB0aGlzQXJnKSB7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLmxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIgcmV0ID0gIXRoaXNBcmcgPyBmbih0aGlzW2ldLCBpLCB0aGlzKSA6IGZuLmFwcGx5KHRoaXNBcmcsIFt0aGlzW2ldLCBpLCB0aGlzXSk7XG4gICAgICBpZiAocmV0KSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG4gIH0sXG4gIGV2ZXJ5OiBmdW5jdGlvbiBldmVyeShmbiwgdGhpc0FyZykge1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIHJldCA9ICF0aGlzQXJnID8gZm4odGhpc1tpXSwgaSwgdGhpcykgOiBmbi5hcHBseSh0aGlzQXJnLCBbdGhpc1tpXSwgaSwgdGhpc10pO1xuICAgICAgaWYgKCFyZXQpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gdHJ1ZTtcbiAgfSxcbiAgc2FtZTogZnVuY3Rpb24gc2FtZShjb2xsZWN0aW9uKSB7XG4gICAgLy8gY2hlYXAgY29sbGVjdGlvbiByZWYgY2hlY2tcbiAgICBpZiAodGhpcyA9PT0gY29sbGVjdGlvbikge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIGNvbGxlY3Rpb24gPSB0aGlzLmN5KCkuY29sbGVjdGlvbihjb2xsZWN0aW9uKTtcbiAgICB2YXIgdGhpc0xlbmd0aCA9IHRoaXMubGVuZ3RoO1xuICAgIHZhciBjb2xsZWN0aW9uTGVuZ3RoID0gY29sbGVjdGlvbi5sZW5ndGg7XG5cbiAgICAvLyBjaGVhcCBsZW5ndGggY2hlY2tcbiAgICBpZiAodGhpc0xlbmd0aCAhPT0gY29sbGVjdGlvbkxlbmd0aCkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIC8vIGNoZWFwIGVsZW1lbnQgcmVmIGNoZWNrXG4gICAgaWYgKHRoaXNMZW5ndGggPT09IDEpIHtcbiAgICAgIHJldHVybiB0aGlzWzBdID09PSBjb2xsZWN0aW9uWzBdO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5ldmVyeShmdW5jdGlvbiAoZWxlKSB7XG4gICAgICByZXR1cm4gY29sbGVjdGlvbi5oYXNFbGVtZW50V2l0aElkKGVsZS5pZCgpKTtcbiAgICB9KTtcbiAgfSxcbiAgYW55U2FtZTogZnVuY3Rpb24gYW55U2FtZShjb2xsZWN0aW9uKSB7XG4gICAgY29sbGVjdGlvbiA9IHRoaXMuY3koKS5jb2xsZWN0aW9uKGNvbGxlY3Rpb24pO1xuICAgIHJldHVybiB0aGlzLnNvbWUoZnVuY3Rpb24gKGVsZSkge1xuICAgICAgcmV0dXJuIGNvbGxlY3Rpb24uaGFzRWxlbWVudFdpdGhJZChlbGUuaWQoKSk7XG4gICAgfSk7XG4gIH0sXG4gIGFsbEFyZU5laWdoYm9yczogZnVuY3Rpb24gYWxsQXJlTmVpZ2hib3JzKGNvbGxlY3Rpb24pIHtcbiAgICBjb2xsZWN0aW9uID0gdGhpcy5jeSgpLmNvbGxlY3Rpb24oY29sbGVjdGlvbik7XG4gICAgdmFyIG5ob29kID0gdGhpcy5uZWlnaGJvcmhvb2QoKTtcbiAgICByZXR1cm4gY29sbGVjdGlvbi5ldmVyeShmdW5jdGlvbiAoZWxlKSB7XG4gICAgICByZXR1cm4gbmhvb2QuaGFzRWxlbWVudFdpdGhJZChlbGUuaWQoKSk7XG4gICAgfSk7XG4gIH0sXG4gIGNvbnRhaW5zOiBmdW5jdGlvbiBjb250YWlucyhjb2xsZWN0aW9uKSB7XG4gICAgY29sbGVjdGlvbiA9IHRoaXMuY3koKS5jb2xsZWN0aW9uKGNvbGxlY3Rpb24pO1xuICAgIHZhciBzZWxmID0gdGhpcztcbiAgICByZXR1cm4gY29sbGVjdGlvbi5ldmVyeShmdW5jdGlvbiAoZWxlKSB7XG4gICAgICByZXR1cm4gc2VsZi5oYXNFbGVtZW50V2l0aElkKGVsZS5pZCgpKTtcbiAgICB9KTtcbiAgfVxufTtcbmVsZXNmbiRnLmFsbEFyZU5laWdoYm91cnMgPSBlbGVzZm4kZy5hbGxBcmVOZWlnaGJvcnM7XG5lbGVzZm4kZy5oYXMgPSBlbGVzZm4kZy5jb250YWlucztcbmVsZXNmbiRnLmVxdWFsID0gZWxlc2ZuJGcuZXF1YWxzID0gZWxlc2ZuJGcuc2FtZTtcblxudmFyIGNhY2hlID0gZnVuY3Rpb24gY2FjaGUoZm4sIG5hbWUpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIHRyYXZlcnNhbENhY2hlKGFyZzEsIGFyZzIsIGFyZzMsIGFyZzQpIHtcbiAgICB2YXIgc2VsZWN0b3JPckVsZXMgPSBhcmcxO1xuICAgIHZhciBlbGVzID0gdGhpcztcbiAgICB2YXIga2V5O1xuICAgIGlmIChzZWxlY3Rvck9yRWxlcyA9PSBudWxsKSB7XG4gICAgICBrZXkgPSAnJztcbiAgICB9IGVsc2UgaWYgKGVsZW1lbnRPckNvbGxlY3Rpb24oc2VsZWN0b3JPckVsZXMpICYmIHNlbGVjdG9yT3JFbGVzLmxlbmd0aCA9PT0gMSkge1xuICAgICAga2V5ID0gc2VsZWN0b3JPckVsZXMuaWQoKTtcbiAgICB9XG4gICAgaWYgKGVsZXMubGVuZ3RoID09PSAxICYmIGtleSkge1xuICAgICAgdmFyIF9wID0gZWxlc1swXS5fcHJpdmF0ZTtcbiAgICAgIHZhciB0Y2ggPSBfcC50cmF2ZXJzYWxDYWNoZSA9IF9wLnRyYXZlcnNhbENhY2hlIHx8IHt9O1xuICAgICAgdmFyIGNoID0gdGNoW25hbWVdID0gdGNoW25hbWVdIHx8IFtdO1xuICAgICAgdmFyIGhhc2ggPSBoYXNoU3RyaW5nKGtleSk7XG4gICAgICB2YXIgY2FjaGVIaXQgPSBjaFtoYXNoXTtcbiAgICAgIGlmIChjYWNoZUhpdCkge1xuICAgICAgICByZXR1cm4gY2FjaGVIaXQ7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gY2hbaGFzaF0gPSBmbi5jYWxsKGVsZXMsIGFyZzEsIGFyZzIsIGFyZzMsIGFyZzQpO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gZm4uY2FsbChlbGVzLCBhcmcxLCBhcmcyLCBhcmczLCBhcmc0KTtcbiAgICB9XG4gIH07XG59O1xuXG52YXIgZWxlc2ZuJGYgPSB7XG4gIHBhcmVudDogZnVuY3Rpb24gcGFyZW50KHNlbGVjdG9yKSB7XG4gICAgdmFyIHBhcmVudHMgPSBbXTtcblxuICAgIC8vIG9wdGltaXNhdGlvbiBmb3Igc2luZ2xlIGVsZSBjYWxsXG4gICAgaWYgKHRoaXMubGVuZ3RoID09PSAxKSB7XG4gICAgICB2YXIgcGFyZW50ID0gdGhpc1swXS5fcHJpdmF0ZS5wYXJlbnQ7XG4gICAgICBpZiAocGFyZW50KSB7XG4gICAgICAgIHJldHVybiBwYXJlbnQ7XG4gICAgICB9XG4gICAgfVxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIGVsZSA9IHRoaXNbaV07XG4gICAgICB2YXIgX3BhcmVudCA9IGVsZS5fcHJpdmF0ZS5wYXJlbnQ7XG4gICAgICBpZiAoX3BhcmVudCkge1xuICAgICAgICBwYXJlbnRzLnB1c2goX3BhcmVudCk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiB0aGlzLnNwYXduKHBhcmVudHMsIHRydWUpLmZpbHRlcihzZWxlY3Rvcik7XG4gIH0sXG4gIHBhcmVudHM6IGZ1bmN0aW9uIHBhcmVudHMoc2VsZWN0b3IpIHtcbiAgICB2YXIgcGFyZW50cyA9IFtdO1xuICAgIHZhciBlbGVzID0gdGhpcy5wYXJlbnQoKTtcbiAgICB3aGlsZSAoZWxlcy5ub25lbXB0eSgpKSB7XG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGVsZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgdmFyIGVsZSA9IGVsZXNbaV07XG4gICAgICAgIHBhcmVudHMucHVzaChlbGUpO1xuICAgICAgfVxuICAgICAgZWxlcyA9IGVsZXMucGFyZW50KCk7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLnNwYXduKHBhcmVudHMsIHRydWUpLmZpbHRlcihzZWxlY3Rvcik7XG4gIH0sXG4gIGNvbW1vbkFuY2VzdG9yczogZnVuY3Rpb24gY29tbW9uQW5jZXN0b3JzKHNlbGVjdG9yKSB7XG4gICAgdmFyIGFuY2VzdG9ycztcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciBlbGUgPSB0aGlzW2ldO1xuICAgICAgdmFyIHBhcmVudHMgPSBlbGUucGFyZW50cygpO1xuICAgICAgYW5jZXN0b3JzID0gYW5jZXN0b3JzIHx8IHBhcmVudHM7XG4gICAgICBhbmNlc3RvcnMgPSBhbmNlc3RvcnMuaW50ZXJzZWN0KHBhcmVudHMpOyAvLyBjdXJyZW50IGxpc3QgbXVzdCBiZSBjb21tb24gd2l0aCBjdXJyZW50IGVsZSBwYXJlbnRzIHNldFxuICAgIH1cbiAgICByZXR1cm4gYW5jZXN0b3JzLmZpbHRlcihzZWxlY3Rvcik7XG4gIH0sXG4gIG9ycGhhbnM6IGZ1bmN0aW9uIG9ycGhhbnMoc2VsZWN0b3IpIHtcbiAgICByZXR1cm4gdGhpcy5zdGRGaWx0ZXIoZnVuY3Rpb24gKGVsZSkge1xuICAgICAgcmV0dXJuIGVsZS5pc09ycGhhbigpO1xuICAgIH0pLmZpbHRlcihzZWxlY3Rvcik7XG4gIH0sXG4gIG5vbm9ycGhhbnM6IGZ1bmN0aW9uIG5vbm9ycGhhbnMoc2VsZWN0b3IpIHtcbiAgICByZXR1cm4gdGhpcy5zdGRGaWx0ZXIoZnVuY3Rpb24gKGVsZSkge1xuICAgICAgcmV0dXJuIGVsZS5pc0NoaWxkKCk7XG4gICAgfSkuZmlsdGVyKHNlbGVjdG9yKTtcbiAgfSxcbiAgY2hpbGRyZW46IGNhY2hlKGZ1bmN0aW9uIChzZWxlY3Rvcikge1xuICAgIHZhciBjaGlsZHJlbiA9IFtdO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIGVsZSA9IHRoaXNbaV07XG4gICAgICB2YXIgZWxlQ2hpbGRyZW4gPSBlbGUuX3ByaXZhdGUuY2hpbGRyZW47XG4gICAgICBmb3IgKHZhciBqID0gMDsgaiA8IGVsZUNoaWxkcmVuLmxlbmd0aDsgaisrKSB7XG4gICAgICAgIGNoaWxkcmVuLnB1c2goZWxlQ2hpbGRyZW5bal0pO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gdGhpcy5zcGF3bihjaGlsZHJlbiwgdHJ1ZSkuZmlsdGVyKHNlbGVjdG9yKTtcbiAgfSwgJ2NoaWxkcmVuJyksXG4gIHNpYmxpbmdzOiBmdW5jdGlvbiBzaWJsaW5ncyhzZWxlY3Rvcikge1xuICAgIHJldHVybiB0aGlzLnBhcmVudCgpLmNoaWxkcmVuKCkubm90KHRoaXMpLmZpbHRlcihzZWxlY3Rvcik7XG4gIH0sXG4gIGlzUGFyZW50OiBmdW5jdGlvbiBpc1BhcmVudCgpIHtcbiAgICB2YXIgZWxlID0gdGhpc1swXTtcbiAgICBpZiAoZWxlKSB7XG4gICAgICByZXR1cm4gZWxlLmlzTm9kZSgpICYmIGVsZS5fcHJpdmF0ZS5jaGlsZHJlbi5sZW5ndGggIT09IDA7XG4gICAgfVxuICB9LFxuICBpc0NoaWxkbGVzczogZnVuY3Rpb24gaXNDaGlsZGxlc3MoKSB7XG4gICAgdmFyIGVsZSA9IHRoaXNbMF07XG4gICAgaWYgKGVsZSkge1xuICAgICAgcmV0dXJuIGVsZS5pc05vZGUoKSAmJiBlbGUuX3ByaXZhdGUuY2hpbGRyZW4ubGVuZ3RoID09PSAwO1xuICAgIH1cbiAgfSxcbiAgaXNDaGlsZDogZnVuY3Rpb24gaXNDaGlsZCgpIHtcbiAgICB2YXIgZWxlID0gdGhpc1swXTtcbiAgICBpZiAoZWxlKSB7XG4gICAgICByZXR1cm4gZWxlLmlzTm9kZSgpICYmIGVsZS5fcHJpdmF0ZS5wYXJlbnQgIT0gbnVsbDtcbiAgICB9XG4gIH0sXG4gIGlzT3JwaGFuOiBmdW5jdGlvbiBpc09ycGhhbigpIHtcbiAgICB2YXIgZWxlID0gdGhpc1swXTtcbiAgICBpZiAoZWxlKSB7XG4gICAgICByZXR1cm4gZWxlLmlzTm9kZSgpICYmIGVsZS5fcHJpdmF0ZS5wYXJlbnQgPT0gbnVsbDtcbiAgICB9XG4gIH0sXG4gIGRlc2NlbmRhbnRzOiBmdW5jdGlvbiBkZXNjZW5kYW50cyhzZWxlY3Rvcikge1xuICAgIHZhciBlbGVtZW50cyA9IFtdO1xuICAgIGZ1bmN0aW9uIGFkZChlbGVzKSB7XG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGVsZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgdmFyIGVsZSA9IGVsZXNbaV07XG4gICAgICAgIGVsZW1lbnRzLnB1c2goZWxlKTtcbiAgICAgICAgaWYgKGVsZS5jaGlsZHJlbigpLm5vbmVtcHR5KCkpIHtcbiAgICAgICAgICBhZGQoZWxlLmNoaWxkcmVuKCkpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIGFkZCh0aGlzLmNoaWxkcmVuKCkpO1xuICAgIHJldHVybiB0aGlzLnNwYXduKGVsZW1lbnRzLCB0cnVlKS5maWx0ZXIoc2VsZWN0b3IpO1xuICB9XG59O1xuZnVuY3Rpb24gZm9yRWFjaENvbXBvdW5kKGVsZXMsIGZuLCBpbmNsdWRlU2VsZiwgcmVjdXJzaXZlU3RlcCkge1xuICB2YXIgcSA9IFtdO1xuICB2YXIgZGlkID0gbmV3IFNldCQxKCk7XG4gIHZhciBjeSA9IGVsZXMuY3koKTtcbiAgdmFyIGhhc0NvbXBvdW5kcyA9IGN5Lmhhc0NvbXBvdW5kTm9kZXMoKTtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBlbGVzLmxlbmd0aDsgaSsrKSB7XG4gICAgdmFyIGVsZSA9IGVsZXNbaV07XG4gICAgaWYgKGluY2x1ZGVTZWxmKSB7XG4gICAgICBxLnB1c2goZWxlKTtcbiAgICB9IGVsc2UgaWYgKGhhc0NvbXBvdW5kcykge1xuICAgICAgcmVjdXJzaXZlU3RlcChxLCBkaWQsIGVsZSk7XG4gICAgfVxuICB9XG4gIHdoaWxlIChxLmxlbmd0aCA+IDApIHtcbiAgICB2YXIgX2VsZSA9IHEuc2hpZnQoKTtcbiAgICBmbihfZWxlKTtcbiAgICBkaWQuYWRkKF9lbGUuaWQoKSk7XG4gICAgaWYgKGhhc0NvbXBvdW5kcykge1xuICAgICAgcmVjdXJzaXZlU3RlcChxLCBkaWQsIF9lbGUpO1xuICAgIH1cbiAgfVxuICByZXR1cm4gZWxlcztcbn1cbmZ1bmN0aW9uIGFkZENoaWxkcmVuKHEsIGRpZCwgZWxlKSB7XG4gIGlmIChlbGUuaXNQYXJlbnQoKSkge1xuICAgIHZhciBjaGlsZHJlbiA9IGVsZS5fcHJpdmF0ZS5jaGlsZHJlbjtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGNoaWxkcmVuLmxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIgY2hpbGQgPSBjaGlsZHJlbltpXTtcbiAgICAgIGlmICghZGlkLmhhcyhjaGlsZC5pZCgpKSkge1xuICAgICAgICBxLnB1c2goY2hpbGQpO1xuICAgICAgfVxuICAgIH1cbiAgfVxufVxuXG4vLyB2ZXJ5IGVmZmljaWVudCB2ZXJzaW9uIG9mIGVsZXMuYWRkKCBlbGVzLmRlc2NlbmRhbnRzKCkgKS5mb3JFYWNoKClcbi8vIGZvciBpbnRlcm5hbCB1c2VcbmVsZXNmbiRmLmZvckVhY2hEb3duID0gZnVuY3Rpb24gKGZuKSB7XG4gIHZhciBpbmNsdWRlU2VsZiA9IGFyZ3VtZW50cy5sZW5ndGggPiAxICYmIGFyZ3VtZW50c1sxXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzFdIDogdHJ1ZTtcbiAgcmV0dXJuIGZvckVhY2hDb21wb3VuZCh0aGlzLCBmbiwgaW5jbHVkZVNlbGYsIGFkZENoaWxkcmVuKTtcbn07XG5mdW5jdGlvbiBhZGRQYXJlbnQocSwgZGlkLCBlbGUpIHtcbiAgaWYgKGVsZS5pc0NoaWxkKCkpIHtcbiAgICB2YXIgcGFyZW50ID0gZWxlLl9wcml2YXRlLnBhcmVudDtcbiAgICBpZiAoIWRpZC5oYXMocGFyZW50LmlkKCkpKSB7XG4gICAgICBxLnB1c2gocGFyZW50KTtcbiAgICB9XG4gIH1cbn1cbmVsZXNmbiRmLmZvckVhY2hVcCA9IGZ1bmN0aW9uIChmbikge1xuICB2YXIgaW5jbHVkZVNlbGYgPSBhcmd1bWVudHMubGVuZ3RoID4gMSAmJiBhcmd1bWVudHNbMV0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1sxXSA6IHRydWU7XG4gIHJldHVybiBmb3JFYWNoQ29tcG91bmQodGhpcywgZm4sIGluY2x1ZGVTZWxmLCBhZGRQYXJlbnQpO1xufTtcbmZ1bmN0aW9uIGFkZFBhcmVudEFuZENoaWxkcmVuKHEsIGRpZCwgZWxlKSB7XG4gIGFkZFBhcmVudChxLCBkaWQsIGVsZSk7XG4gIGFkZENoaWxkcmVuKHEsIGRpZCwgZWxlKTtcbn1cbmVsZXNmbiRmLmZvckVhY2hVcEFuZERvd24gPSBmdW5jdGlvbiAoZm4pIHtcbiAgdmFyIGluY2x1ZGVTZWxmID0gYXJndW1lbnRzLmxlbmd0aCA+IDEgJiYgYXJndW1lbnRzWzFdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMV0gOiB0cnVlO1xuICByZXR1cm4gZm9yRWFjaENvbXBvdW5kKHRoaXMsIGZuLCBpbmNsdWRlU2VsZiwgYWRkUGFyZW50QW5kQ2hpbGRyZW4pO1xufTtcblxuLy8gYWxpYXNlc1xuZWxlc2ZuJGYuYW5jZXN0b3JzID0gZWxlc2ZuJGYucGFyZW50cztcblxudmFyIGZuJDUsIGVsZXNmbiRlO1xuZm4kNSA9IGVsZXNmbiRlID0ge1xuICBkYXRhOiBkZWZpbmUuZGF0YSh7XG4gICAgZmllbGQ6ICdkYXRhJyxcbiAgICBiaW5kaW5nRXZlbnQ6ICdkYXRhJyxcbiAgICBhbGxvd0JpbmRpbmc6IHRydWUsXG4gICAgYWxsb3dTZXR0aW5nOiB0cnVlLFxuICAgIHNldHRpbmdFdmVudDogJ2RhdGEnLFxuICAgIHNldHRpbmdUcmlnZ2Vyc0V2ZW50OiB0cnVlLFxuICAgIHRyaWdnZXJGbk5hbWU6ICd0cmlnZ2VyJyxcbiAgICBhbGxvd0dldHRpbmc6IHRydWUsXG4gICAgaW1tdXRhYmxlS2V5czoge1xuICAgICAgJ2lkJzogdHJ1ZSxcbiAgICAgICdzb3VyY2UnOiB0cnVlLFxuICAgICAgJ3RhcmdldCc6IHRydWUsXG4gICAgICAncGFyZW50JzogdHJ1ZVxuICAgIH0sXG4gICAgdXBkYXRlU3R5bGU6IHRydWVcbiAgfSksXG4gIHJlbW92ZURhdGE6IGRlZmluZS5yZW1vdmVEYXRhKHtcbiAgICBmaWVsZDogJ2RhdGEnLFxuICAgIGV2ZW50OiAnZGF0YScsXG4gICAgdHJpZ2dlckZuTmFtZTogJ3RyaWdnZXInLFxuICAgIHRyaWdnZXJFdmVudDogdHJ1ZSxcbiAgICBpbW11dGFibGVLZXlzOiB7XG4gICAgICAnaWQnOiB0cnVlLFxuICAgICAgJ3NvdXJjZSc6IHRydWUsXG4gICAgICAndGFyZ2V0JzogdHJ1ZSxcbiAgICAgICdwYXJlbnQnOiB0cnVlXG4gICAgfSxcbiAgICB1cGRhdGVTdHlsZTogdHJ1ZVxuICB9KSxcbiAgc2NyYXRjaDogZGVmaW5lLmRhdGEoe1xuICAgIGZpZWxkOiAnc2NyYXRjaCcsXG4gICAgYmluZGluZ0V2ZW50OiAnc2NyYXRjaCcsXG4gICAgYWxsb3dCaW5kaW5nOiB0cnVlLFxuICAgIGFsbG93U2V0dGluZzogdHJ1ZSxcbiAgICBzZXR0aW5nRXZlbnQ6ICdzY3JhdGNoJyxcbiAgICBzZXR0aW5nVHJpZ2dlcnNFdmVudDogdHJ1ZSxcbiAgICB0cmlnZ2VyRm5OYW1lOiAndHJpZ2dlcicsXG4gICAgYWxsb3dHZXR0aW5nOiB0cnVlLFxuICAgIHVwZGF0ZVN0eWxlOiB0cnVlXG4gIH0pLFxuICByZW1vdmVTY3JhdGNoOiBkZWZpbmUucmVtb3ZlRGF0YSh7XG4gICAgZmllbGQ6ICdzY3JhdGNoJyxcbiAgICBldmVudDogJ3NjcmF0Y2gnLFxuICAgIHRyaWdnZXJGbk5hbWU6ICd0cmlnZ2VyJyxcbiAgICB0cmlnZ2VyRXZlbnQ6IHRydWUsXG4gICAgdXBkYXRlU3R5bGU6IHRydWVcbiAgfSksXG4gIHJzY3JhdGNoOiBkZWZpbmUuZGF0YSh7XG4gICAgZmllbGQ6ICdyc2NyYXRjaCcsXG4gICAgYWxsb3dCaW5kaW5nOiBmYWxzZSxcbiAgICBhbGxvd1NldHRpbmc6IHRydWUsXG4gICAgc2V0dGluZ1RyaWdnZXJzRXZlbnQ6IGZhbHNlLFxuICAgIGFsbG93R2V0dGluZzogdHJ1ZVxuICB9KSxcbiAgcmVtb3ZlUnNjcmF0Y2g6IGRlZmluZS5yZW1vdmVEYXRhKHtcbiAgICBmaWVsZDogJ3JzY3JhdGNoJyxcbiAgICB0cmlnZ2VyRXZlbnQ6IGZhbHNlXG4gIH0pLFxuICBpZDogZnVuY3Rpb24gaWQoKSB7XG4gICAgdmFyIGVsZSA9IHRoaXNbMF07XG4gICAgaWYgKGVsZSkge1xuICAgICAgcmV0dXJuIGVsZS5fcHJpdmF0ZS5kYXRhLmlkO1xuICAgIH1cbiAgfVxufTtcblxuLy8gYWxpYXNlc1xuZm4kNS5hdHRyID0gZm4kNS5kYXRhO1xuZm4kNS5yZW1vdmVBdHRyID0gZm4kNS5yZW1vdmVEYXRhO1xudmFyIGRhdGEgPSBlbGVzZm4kZTtcblxudmFyIGVsZXNmbiRkID0ge307XG5mdW5jdGlvbiBkZWZpbmVEZWdyZWVGdW5jdGlvbihjYWxsYmFjaykge1xuICByZXR1cm4gZnVuY3Rpb24gKGluY2x1ZGVMb29wcykge1xuICAgIHZhciBzZWxmID0gdGhpcztcbiAgICBpZiAoaW5jbHVkZUxvb3BzID09PSB1bmRlZmluZWQpIHtcbiAgICAgIGluY2x1ZGVMb29wcyA9IHRydWU7XG4gICAgfVxuICAgIGlmIChzZWxmLmxlbmd0aCA9PT0gMCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAoc2VsZi5pc05vZGUoKSAmJiAhc2VsZi5yZW1vdmVkKCkpIHtcbiAgICAgIHZhciBkZWdyZWUgPSAwO1xuICAgICAgdmFyIG5vZGUgPSBzZWxmWzBdO1xuICAgICAgdmFyIGNvbm5lY3RlZEVkZ2VzID0gbm9kZS5fcHJpdmF0ZS5lZGdlcztcbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgY29ubmVjdGVkRWRnZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgdmFyIGVkZ2UgPSBjb25uZWN0ZWRFZGdlc1tpXTtcbiAgICAgICAgaWYgKCFpbmNsdWRlTG9vcHMgJiYgZWRnZS5pc0xvb3AoKSkge1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG4gICAgICAgIGRlZ3JlZSArPSBjYWxsYmFjayhub2RlLCBlZGdlKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBkZWdyZWU7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gIH07XG59XG5leHRlbmQoZWxlc2ZuJGQsIHtcbiAgZGVncmVlOiBkZWZpbmVEZWdyZWVGdW5jdGlvbihmdW5jdGlvbiAobm9kZSwgZWRnZSkge1xuICAgIGlmIChlZGdlLnNvdXJjZSgpLnNhbWUoZWRnZS50YXJnZXQoKSkpIHtcbiAgICAgIHJldHVybiAyO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gMTtcbiAgICB9XG4gIH0pLFxuICBpbmRlZ3JlZTogZGVmaW5lRGVncmVlRnVuY3Rpb24oZnVuY3Rpb24gKG5vZGUsIGVkZ2UpIHtcbiAgICBpZiAoZWRnZS50YXJnZXQoKS5zYW1lKG5vZGUpKSB7XG4gICAgICByZXR1cm4gMTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIDA7XG4gICAgfVxuICB9KSxcbiAgb3V0ZGVncmVlOiBkZWZpbmVEZWdyZWVGdW5jdGlvbihmdW5jdGlvbiAobm9kZSwgZWRnZSkge1xuICAgIGlmIChlZGdlLnNvdXJjZSgpLnNhbWUobm9kZSkpIHtcbiAgICAgIHJldHVybiAxO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gMDtcbiAgICB9XG4gIH0pXG59KTtcbmZ1bmN0aW9uIGRlZmluZURlZ3JlZUJvdW5kc0Z1bmN0aW9uKGRlZ3JlZUZuLCBjYWxsYmFjaykge1xuICByZXR1cm4gZnVuY3Rpb24gKGluY2x1ZGVMb29wcykge1xuICAgIHZhciByZXQ7XG4gICAgdmFyIG5vZGVzID0gdGhpcy5ub2RlcygpO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbm9kZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciBlbGUgPSBub2Rlc1tpXTtcbiAgICAgIHZhciBkZWdyZWUgPSBlbGVbZGVncmVlRm5dKGluY2x1ZGVMb29wcyk7XG4gICAgICBpZiAoZGVncmVlICE9PSB1bmRlZmluZWQgJiYgKHJldCA9PT0gdW5kZWZpbmVkIHx8IGNhbGxiYWNrKGRlZ3JlZSwgcmV0KSkpIHtcbiAgICAgICAgcmV0ID0gZGVncmVlO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gcmV0O1xuICB9O1xufVxuZXh0ZW5kKGVsZXNmbiRkLCB7XG4gIG1pbkRlZ3JlZTogZGVmaW5lRGVncmVlQm91bmRzRnVuY3Rpb24oJ2RlZ3JlZScsIGZ1bmN0aW9uIChkZWdyZWUsIG1pbikge1xuICAgIHJldHVybiBkZWdyZWUgPCBtaW47XG4gIH0pLFxuICBtYXhEZWdyZWU6IGRlZmluZURlZ3JlZUJvdW5kc0Z1bmN0aW9uKCdkZWdyZWUnLCBmdW5jdGlvbiAoZGVncmVlLCBtYXgpIHtcbiAgICByZXR1cm4gZGVncmVlID4gbWF4O1xuICB9KSxcbiAgbWluSW5kZWdyZWU6IGRlZmluZURlZ3JlZUJvdW5kc0Z1bmN0aW9uKCdpbmRlZ3JlZScsIGZ1bmN0aW9uIChkZWdyZWUsIG1pbikge1xuICAgIHJldHVybiBkZWdyZWUgPCBtaW47XG4gIH0pLFxuICBtYXhJbmRlZ3JlZTogZGVmaW5lRGVncmVlQm91bmRzRnVuY3Rpb24oJ2luZGVncmVlJywgZnVuY3Rpb24gKGRlZ3JlZSwgbWF4KSB7XG4gICAgcmV0dXJuIGRlZ3JlZSA+IG1heDtcbiAgfSksXG4gIG1pbk91dGRlZ3JlZTogZGVmaW5lRGVncmVlQm91bmRzRnVuY3Rpb24oJ291dGRlZ3JlZScsIGZ1bmN0aW9uIChkZWdyZWUsIG1pbikge1xuICAgIHJldHVybiBkZWdyZWUgPCBtaW47XG4gIH0pLFxuICBtYXhPdXRkZWdyZWU6IGRlZmluZURlZ3JlZUJvdW5kc0Z1bmN0aW9uKCdvdXRkZWdyZWUnLCBmdW5jdGlvbiAoZGVncmVlLCBtYXgpIHtcbiAgICByZXR1cm4gZGVncmVlID4gbWF4O1xuICB9KVxufSk7XG5leHRlbmQoZWxlc2ZuJGQsIHtcbiAgdG90YWxEZWdyZWU6IGZ1bmN0aW9uIHRvdGFsRGVncmVlKGluY2x1ZGVMb29wcykge1xuICAgIHZhciB0b3RhbCA9IDA7XG4gICAgdmFyIG5vZGVzID0gdGhpcy5ub2RlcygpO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbm9kZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHRvdGFsICs9IG5vZGVzW2ldLmRlZ3JlZShpbmNsdWRlTG9vcHMpO1xuICAgIH1cbiAgICByZXR1cm4gdG90YWw7XG4gIH1cbn0pO1xuXG52YXIgZm4kNCwgZWxlc2ZuJGM7XG52YXIgYmVmb3JlUG9zaXRpb25TZXQgPSBmdW5jdGlvbiBiZWZvcmVQb3NpdGlvblNldChlbGVzLCBuZXdQb3MsIHNpbGVudCkge1xuICBmb3IgKHZhciBpID0gMDsgaSA8IGVsZXMubGVuZ3RoOyBpKyspIHtcbiAgICB2YXIgZWxlID0gZWxlc1tpXTtcbiAgICBpZiAoIWVsZS5sb2NrZWQoKSkge1xuICAgICAgdmFyIG9sZFBvcyA9IGVsZS5fcHJpdmF0ZS5wb3NpdGlvbjtcbiAgICAgIHZhciBkZWx0YSA9IHtcbiAgICAgICAgeDogbmV3UG9zLnggIT0gbnVsbCA/IG5ld1Bvcy54IC0gb2xkUG9zLnggOiAwLFxuICAgICAgICB5OiBuZXdQb3MueSAhPSBudWxsID8gbmV3UG9zLnkgLSBvbGRQb3MueSA6IDBcbiAgICAgIH07XG4gICAgICBpZiAoZWxlLmlzUGFyZW50KCkgJiYgIShkZWx0YS54ID09PSAwICYmIGRlbHRhLnkgPT09IDApKSB7XG4gICAgICAgIGVsZS5jaGlsZHJlbigpLnNoaWZ0KGRlbHRhLCBzaWxlbnQpO1xuICAgICAgfVxuICAgICAgZWxlLmRpcnR5Qm91bmRpbmdCb3hDYWNoZSgpO1xuICAgIH1cbiAgfVxufTtcbnZhciBwb3NpdGlvbkRlZiA9IHtcbiAgZmllbGQ6ICdwb3NpdGlvbicsXG4gIGJpbmRpbmdFdmVudDogJ3Bvc2l0aW9uJyxcbiAgYWxsb3dCaW5kaW5nOiB0cnVlLFxuICBhbGxvd1NldHRpbmc6IHRydWUsXG4gIHNldHRpbmdFdmVudDogJ3Bvc2l0aW9uJyxcbiAgc2V0dGluZ1RyaWdnZXJzRXZlbnQ6IHRydWUsXG4gIHRyaWdnZXJGbk5hbWU6ICdlbWl0QW5kTm90aWZ5JyxcbiAgYWxsb3dHZXR0aW5nOiB0cnVlLFxuICB2YWxpZEtleXM6IFsneCcsICd5J10sXG4gIGJlZm9yZUdldDogZnVuY3Rpb24gYmVmb3JlR2V0KGVsZSkge1xuICAgIGVsZS51cGRhdGVDb21wb3VuZEJvdW5kcygpO1xuICB9LFxuICBiZWZvcmVTZXQ6IGZ1bmN0aW9uIGJlZm9yZVNldChlbGVzLCBuZXdQb3MpIHtcbiAgICBiZWZvcmVQb3NpdGlvblNldChlbGVzLCBuZXdQb3MsIGZhbHNlKTtcbiAgfSxcbiAgb25TZXQ6IGZ1bmN0aW9uIG9uU2V0KGVsZXMpIHtcbiAgICBlbGVzLmRpcnR5Q29tcG91bmRCb3VuZHNDYWNoZSgpO1xuICB9LFxuICBjYW5TZXQ6IGZ1bmN0aW9uIGNhblNldChlbGUpIHtcbiAgICByZXR1cm4gIWVsZS5sb2NrZWQoKTtcbiAgfVxufTtcbmZuJDQgPSBlbGVzZm4kYyA9IHtcbiAgcG9zaXRpb246IGRlZmluZS5kYXRhKHBvc2l0aW9uRGVmKSxcbiAgLy8gcG9zaXRpb24gYnV0IG5vIG5vdGlmaWNhdGlvbiB0byByZW5kZXJlclxuICBzaWxlbnRQb3NpdGlvbjogZGVmaW5lLmRhdGEoZXh0ZW5kKHt9LCBwb3NpdGlvbkRlZiwge1xuICAgIGFsbG93QmluZGluZzogZmFsc2UsXG4gICAgYWxsb3dTZXR0aW5nOiB0cnVlLFxuICAgIHNldHRpbmdUcmlnZ2Vyc0V2ZW50OiBmYWxzZSxcbiAgICBhbGxvd0dldHRpbmc6IGZhbHNlLFxuICAgIGJlZm9yZVNldDogZnVuY3Rpb24gYmVmb3JlU2V0KGVsZXMsIG5ld1Bvcykge1xuICAgICAgYmVmb3JlUG9zaXRpb25TZXQoZWxlcywgbmV3UG9zLCB0cnVlKTtcbiAgICB9LFxuICAgIG9uU2V0OiBmdW5jdGlvbiBvblNldChlbGVzKSB7XG4gICAgICBlbGVzLmRpcnR5Q29tcG91bmRCb3VuZHNDYWNoZSgpO1xuICAgIH1cbiAgfSkpLFxuICBwb3NpdGlvbnM6IGZ1bmN0aW9uIHBvc2l0aW9ucyhwb3MsIHNpbGVudCkge1xuICAgIGlmIChwbGFpbk9iamVjdChwb3MpKSB7XG4gICAgICBpZiAoc2lsZW50KSB7XG4gICAgICAgIHRoaXMuc2lsZW50UG9zaXRpb24ocG9zKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMucG9zaXRpb24ocG9zKTtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKGZuJDYocG9zKSkge1xuICAgICAgdmFyIF9mbiA9IHBvcztcbiAgICAgIHZhciBjeSA9IHRoaXMuY3koKTtcbiAgICAgIGN5LnN0YXJ0QmF0Y2goKTtcbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5sZW5ndGg7IGkrKykge1xuICAgICAgICB2YXIgZWxlID0gdGhpc1tpXTtcbiAgICAgICAgdmFyIF9wb3MgPSB1bmRlZmluZWQ7XG4gICAgICAgIGlmIChfcG9zID0gX2ZuKGVsZSwgaSkpIHtcbiAgICAgICAgICBpZiAoc2lsZW50KSB7XG4gICAgICAgICAgICBlbGUuc2lsZW50UG9zaXRpb24oX3Bvcyk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGVsZS5wb3NpdGlvbihfcG9zKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGN5LmVuZEJhdGNoKCk7XG4gICAgfVxuICAgIHJldHVybiB0aGlzOyAvLyBjaGFpbmluZ1xuICB9LFxuICBzaWxlbnRQb3NpdGlvbnM6IGZ1bmN0aW9uIHNpbGVudFBvc2l0aW9ucyhwb3MpIHtcbiAgICByZXR1cm4gdGhpcy5wb3NpdGlvbnMocG9zLCB0cnVlKTtcbiAgfSxcbiAgc2hpZnQ6IGZ1bmN0aW9uIHNoaWZ0KGRpbSwgdmFsLCBzaWxlbnQpIHtcbiAgICB2YXIgZGVsdGE7XG4gICAgaWYgKHBsYWluT2JqZWN0KGRpbSkpIHtcbiAgICAgIGRlbHRhID0ge1xuICAgICAgICB4OiBudW1iZXIkMShkaW0ueCkgPyBkaW0ueCA6IDAsXG4gICAgICAgIHk6IG51bWJlciQxKGRpbS55KSA/IGRpbS55IDogMFxuICAgICAgfTtcbiAgICAgIHNpbGVudCA9IHZhbDtcbiAgICB9IGVsc2UgaWYgKHN0cmluZyhkaW0pICYmIG51bWJlciQxKHZhbCkpIHtcbiAgICAgIGRlbHRhID0ge1xuICAgICAgICB4OiAwLFxuICAgICAgICB5OiAwXG4gICAgICB9O1xuICAgICAgZGVsdGFbZGltXSA9IHZhbDtcbiAgICB9XG4gICAgaWYgKGRlbHRhICE9IG51bGwpIHtcbiAgICAgIHZhciBjeSA9IHRoaXMuY3koKTtcbiAgICAgIGN5LnN0YXJ0QmF0Y2goKTtcbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5sZW5ndGg7IGkrKykge1xuICAgICAgICB2YXIgZWxlID0gdGhpc1tpXTtcblxuICAgICAgICAvLyBleGNsdWRlIGFueSBub2RlIHRoYXQgaXMgYSBkZXNjZW5kYW50IG9mIHRoZSBjYWxsaW5nIGNvbGxlY3Rpb25cbiAgICAgICAgaWYgKGN5Lmhhc0NvbXBvdW5kTm9kZXMoKSAmJiBlbGUuaXNDaGlsZCgpICYmIGVsZS5hbmNlc3RvcnMoKS5hbnlTYW1lKHRoaXMpKSB7XG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cbiAgICAgICAgdmFyIHBvcyA9IGVsZS5wb3NpdGlvbigpO1xuICAgICAgICB2YXIgbmV3UG9zID0ge1xuICAgICAgICAgIHg6IHBvcy54ICsgZGVsdGEueCxcbiAgICAgICAgICB5OiBwb3MueSArIGRlbHRhLnlcbiAgICAgICAgfTtcbiAgICAgICAgaWYgKHNpbGVudCkge1xuICAgICAgICAgIGVsZS5zaWxlbnRQb3NpdGlvbihuZXdQb3MpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGVsZS5wb3NpdGlvbihuZXdQb3MpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBjeS5lbmRCYXRjaCgpO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcztcbiAgfSxcbiAgc2lsZW50U2hpZnQ6IGZ1bmN0aW9uIHNpbGVudFNoaWZ0KGRpbSwgdmFsKSB7XG4gICAgaWYgKHBsYWluT2JqZWN0KGRpbSkpIHtcbiAgICAgIHRoaXMuc2hpZnQoZGltLCB0cnVlKTtcbiAgICB9IGVsc2UgaWYgKHN0cmluZyhkaW0pICYmIG51bWJlciQxKHZhbCkpIHtcbiAgICAgIHRoaXMuc2hpZnQoZGltLCB2YWwsIHRydWUpO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcztcbiAgfSxcbiAgLy8gZ2V0L3NldCB0aGUgcmVuZGVyZWQgKGkuZS4gb24gc2NyZWVuKSBwb3NpdG9uIG9mIHRoZSBlbGVtZW50XG4gIHJlbmRlcmVkUG9zaXRpb246IGZ1bmN0aW9uIHJlbmRlcmVkUG9zaXRpb24oZGltLCB2YWwpIHtcbiAgICB2YXIgZWxlID0gdGhpc1swXTtcbiAgICB2YXIgY3kgPSB0aGlzLmN5KCk7XG4gICAgdmFyIHpvb20gPSBjeS56b29tKCk7XG4gICAgdmFyIHBhbiA9IGN5LnBhbigpO1xuICAgIHZhciBycG9zID0gcGxhaW5PYmplY3QoZGltKSA/IGRpbSA6IHVuZGVmaW5lZDtcbiAgICB2YXIgc2V0dGluZyA9IHJwb3MgIT09IHVuZGVmaW5lZCB8fCB2YWwgIT09IHVuZGVmaW5lZCAmJiBzdHJpbmcoZGltKTtcbiAgICBpZiAoZWxlICYmIGVsZS5pc05vZGUoKSkge1xuICAgICAgLy8gbXVzdCBoYXZlIGFuIGVsZW1lbnQgYW5kIG11c3QgYmUgYSBub2RlIHRvIHJldHVybiBwb3NpdGlvblxuICAgICAgaWYgKHNldHRpbmcpIHtcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgdmFyIF9lbGUgPSB0aGlzW2ldO1xuICAgICAgICAgIGlmICh2YWwgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgLy8gc2V0IG9uZSBkaW1lbnNpb25cbiAgICAgICAgICAgIF9lbGUucG9zaXRpb24oZGltLCAodmFsIC0gcGFuW2RpbV0pIC8gem9vbSk7XG4gICAgICAgICAgfSBlbHNlIGlmIChycG9zICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIC8vIHNldCB3aG9sZSBwb3NpdGlvblxuICAgICAgICAgICAgX2VsZS5wb3NpdGlvbihyZW5kZXJlZFRvTW9kZWxQb3NpdGlvbihycG9zLCB6b29tLCBwYW4pKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIGdldHRpbmdcbiAgICAgICAgdmFyIHBvcyA9IGVsZS5wb3NpdGlvbigpO1xuICAgICAgICBycG9zID0gbW9kZWxUb1JlbmRlcmVkUG9zaXRpb24kMShwb3MsIHpvb20sIHBhbik7XG4gICAgICAgIGlmIChkaW0gPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIC8vIHRoZW4gcmV0dXJuIHRoZSB3aG9sZSByZW5kZXJlZCBwb3NpdGlvblxuICAgICAgICAgIHJldHVybiBycG9zO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIC8vIHRoZW4gcmV0dXJuIHRoZSBzcGVjaWZpZWQgZGltZW5zaW9uXG4gICAgICAgICAgcmV0dXJuIHJwb3NbZGltXTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoIXNldHRpbmcpIHtcbiAgICAgIHJldHVybiB1bmRlZmluZWQ7IC8vIGZvciBlbXB0eSBjb2xsZWN0aW9uIGNhc2VcbiAgICB9XG4gICAgcmV0dXJuIHRoaXM7IC8vIGNoYWluaW5nXG4gIH0sXG4gIC8vIGdldC9zZXQgdGhlIHBvc2l0aW9uIHJlbGF0aXZlIHRvIHRoZSBwYXJlbnRcbiAgcmVsYXRpdmVQb3NpdGlvbjogZnVuY3Rpb24gcmVsYXRpdmVQb3NpdGlvbihkaW0sIHZhbCkge1xuICAgIHZhciBlbGUgPSB0aGlzWzBdO1xuICAgIHZhciBjeSA9IHRoaXMuY3koKTtcbiAgICB2YXIgcHBvcyA9IHBsYWluT2JqZWN0KGRpbSkgPyBkaW0gOiB1bmRlZmluZWQ7XG4gICAgdmFyIHNldHRpbmcgPSBwcG9zICE9PSB1bmRlZmluZWQgfHwgdmFsICE9PSB1bmRlZmluZWQgJiYgc3RyaW5nKGRpbSk7XG4gICAgdmFyIGhhc0NvbXBvdW5kTm9kZXMgPSBjeS5oYXNDb21wb3VuZE5vZGVzKCk7XG4gICAgaWYgKGVsZSAmJiBlbGUuaXNOb2RlKCkpIHtcbiAgICAgIC8vIG11c3QgaGF2ZSBhbiBlbGVtZW50IGFuZCBtdXN0IGJlIGEgbm9kZSB0byByZXR1cm4gcG9zaXRpb25cbiAgICAgIGlmIChzZXR0aW5nKSB7XG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgIHZhciBfZWxlMiA9IHRoaXNbaV07XG4gICAgICAgICAgdmFyIHBhcmVudCA9IGhhc0NvbXBvdW5kTm9kZXMgPyBfZWxlMi5wYXJlbnQoKSA6IG51bGw7XG4gICAgICAgICAgdmFyIGhhc1BhcmVudCA9IHBhcmVudCAmJiBwYXJlbnQubGVuZ3RoID4gMDtcbiAgICAgICAgICB2YXIgcmVsYXRpdmVUb1BhcmVudCA9IGhhc1BhcmVudDtcbiAgICAgICAgICBpZiAoaGFzUGFyZW50KSB7XG4gICAgICAgICAgICBwYXJlbnQgPSBwYXJlbnRbMF07XG4gICAgICAgICAgfVxuICAgICAgICAgIHZhciBvcmlnaW4gPSByZWxhdGl2ZVRvUGFyZW50ID8gcGFyZW50LnBvc2l0aW9uKCkgOiB7XG4gICAgICAgICAgICB4OiAwLFxuICAgICAgICAgICAgeTogMFxuICAgICAgICAgIH07XG4gICAgICAgICAgaWYgKHZhbCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAvLyBzZXQgb25lIGRpbWVuc2lvblxuICAgICAgICAgICAgX2VsZTIucG9zaXRpb24oZGltLCB2YWwgKyBvcmlnaW5bZGltXSk7XG4gICAgICAgICAgfSBlbHNlIGlmIChwcG9zICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIC8vIHNldCB3aG9sZSBwb3NpdGlvblxuICAgICAgICAgICAgX2VsZTIucG9zaXRpb24oe1xuICAgICAgICAgICAgICB4OiBwcG9zLnggKyBvcmlnaW4ueCxcbiAgICAgICAgICAgICAgeTogcHBvcy55ICsgb3JpZ2luLnlcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gZ2V0dGluZ1xuICAgICAgICB2YXIgcG9zID0gZWxlLnBvc2l0aW9uKCk7XG4gICAgICAgIHZhciBfcGFyZW50ID0gaGFzQ29tcG91bmROb2RlcyA/IGVsZS5wYXJlbnQoKSA6IG51bGw7XG4gICAgICAgIHZhciBfaGFzUGFyZW50ID0gX3BhcmVudCAmJiBfcGFyZW50Lmxlbmd0aCA+IDA7XG4gICAgICAgIHZhciBfcmVsYXRpdmVUb1BhcmVudCA9IF9oYXNQYXJlbnQ7XG4gICAgICAgIGlmIChfaGFzUGFyZW50KSB7XG4gICAgICAgICAgX3BhcmVudCA9IF9wYXJlbnRbMF07XG4gICAgICAgIH1cbiAgICAgICAgdmFyIF9vcmlnaW4gPSBfcmVsYXRpdmVUb1BhcmVudCA/IF9wYXJlbnQucG9zaXRpb24oKSA6IHtcbiAgICAgICAgICB4OiAwLFxuICAgICAgICAgIHk6IDBcbiAgICAgICAgfTtcbiAgICAgICAgcHBvcyA9IHtcbiAgICAgICAgICB4OiBwb3MueCAtIF9vcmlnaW4ueCxcbiAgICAgICAgICB5OiBwb3MueSAtIF9vcmlnaW4ueVxuICAgICAgICB9O1xuICAgICAgICBpZiAoZGltID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAvLyB0aGVuIHJldHVybiB0aGUgd2hvbGUgcmVuZGVyZWQgcG9zaXRpb25cbiAgICAgICAgICByZXR1cm4gcHBvcztcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAvLyB0aGVuIHJldHVybiB0aGUgc3BlY2lmaWVkIGRpbWVuc2lvblxuICAgICAgICAgIHJldHVybiBwcG9zW2RpbV07XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKCFzZXR0aW5nKSB7XG4gICAgICByZXR1cm4gdW5kZWZpbmVkOyAvLyBmb3IgZW1wdHkgY29sbGVjdGlvbiBjYXNlXG4gICAgfVxuICAgIHJldHVybiB0aGlzOyAvLyBjaGFpbmluZ1xuICB9XG59O1xuXG4vLyBhbGlhc2VzXG5mbiQ0Lm1vZGVsUG9zaXRpb24gPSBmbiQ0LnBvaW50ID0gZm4kNC5wb3NpdGlvbjtcbmZuJDQubW9kZWxQb3NpdGlvbnMgPSBmbiQ0LnBvaW50cyA9IGZuJDQucG9zaXRpb25zO1xuZm4kNC5yZW5kZXJlZFBvaW50ID0gZm4kNC5yZW5kZXJlZFBvc2l0aW9uO1xuZm4kNC5yZWxhdGl2ZVBvaW50ID0gZm4kNC5yZWxhdGl2ZVBvc2l0aW9uO1xudmFyIHBvc2l0aW9uID0gZWxlc2ZuJGM7XG5cbnZhciBmbiQzLCBlbGVzZm4kYjtcbmZuJDMgPSBlbGVzZm4kYiA9IHt9O1xuZWxlc2ZuJGIucmVuZGVyZWRCb3VuZGluZ0JveCA9IGZ1bmN0aW9uIChvcHRpb25zKSB7XG4gIHZhciBiYiA9IHRoaXMuYm91bmRpbmdCb3gob3B0aW9ucyk7XG4gIHZhciBjeSA9IHRoaXMuY3koKTtcbiAgdmFyIHpvb20gPSBjeS56b29tKCk7XG4gIHZhciBwYW4gPSBjeS5wYW4oKTtcbiAgdmFyIHgxID0gYmIueDEgKiB6b29tICsgcGFuLng7XG4gIHZhciB4MiA9IGJiLngyICogem9vbSArIHBhbi54O1xuICB2YXIgeTEgPSBiYi55MSAqIHpvb20gKyBwYW4ueTtcbiAgdmFyIHkyID0gYmIueTIgKiB6b29tICsgcGFuLnk7XG4gIHJldHVybiB7XG4gICAgeDE6IHgxLFxuICAgIHgyOiB4MixcbiAgICB5MTogeTEsXG4gICAgeTI6IHkyLFxuICAgIHc6IHgyIC0geDEsXG4gICAgaDogeTIgLSB5MVxuICB9O1xufTtcbmVsZXNmbiRiLmRpcnR5Q29tcG91bmRCb3VuZHNDYWNoZSA9IGZ1bmN0aW9uICgpIHtcbiAgdmFyIHNpbGVudCA9IGFyZ3VtZW50cy5sZW5ndGggPiAwICYmIGFyZ3VtZW50c1swXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzBdIDogZmFsc2U7XG4gIHZhciBjeSA9IHRoaXMuY3koKTtcbiAgaWYgKCFjeS5zdHlsZUVuYWJsZWQoKSB8fCAhY3kuaGFzQ29tcG91bmROb2RlcygpKSB7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cbiAgdGhpcy5mb3JFYWNoVXAoZnVuY3Rpb24gKGVsZSkge1xuICAgIGlmIChlbGUuaXNQYXJlbnQoKSkge1xuICAgICAgdmFyIF9wID0gZWxlLl9wcml2YXRlO1xuICAgICAgX3AuY29tcG91bmRCb3VuZHNDbGVhbiA9IGZhbHNlO1xuICAgICAgX3AuYmJDYWNoZSA9IG51bGw7XG4gICAgICBpZiAoIXNpbGVudCkge1xuICAgICAgICBlbGUuZW1pdEFuZE5vdGlmeSgnYm91bmRzJyk7XG4gICAgICB9XG4gICAgfVxuICB9KTtcbiAgcmV0dXJuIHRoaXM7XG59O1xuZWxlc2ZuJGIudXBkYXRlQ29tcG91bmRCb3VuZHMgPSBmdW5jdGlvbiAoKSB7XG4gIHZhciBmb3JjZSA9IGFyZ3VtZW50cy5sZW5ndGggPiAwICYmIGFyZ3VtZW50c1swXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzBdIDogZmFsc2U7XG4gIHZhciBjeSA9IHRoaXMuY3koKTtcblxuICAvLyBub3QgcG9zc2libGUgdG8gZG8gb24gbm9uLWNvbXBvdW5kIGdyYXBocyBvciB3aXRoIHRoZSBzdHlsZSBkaXNhYmxlZFxuICBpZiAoIWN5LnN0eWxlRW5hYmxlZCgpIHx8ICFjeS5oYXNDb21wb3VuZE5vZGVzKCkpIHtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIC8vIHNhdmUgY3ljbGVzIHdoZW4gYmF0Y2hpbmcgLS0gYnV0IGJvdW5kcyB3aWxsIGJlIHN0YWxlIChvciBub3QgZXhpc3QgeWV0KVxuICBpZiAoIWZvcmNlICYmIGN5LmJhdGNoaW5nKCkpIHtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuICBmdW5jdGlvbiB1cGRhdGUocGFyZW50KSB7XG4gICAgaWYgKCFwYXJlbnQuaXNQYXJlbnQoKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB2YXIgX3AgPSBwYXJlbnQuX3ByaXZhdGU7XG4gICAgdmFyIGNoaWxkcmVuID0gcGFyZW50LmNoaWxkcmVuKCk7XG4gICAgdmFyIGluY2x1ZGVMYWJlbHMgPSBwYXJlbnQucHN0eWxlKCdjb21wb3VuZC1zaXppbmctd3J0LWxhYmVscycpLnZhbHVlID09PSAnaW5jbHVkZSc7XG4gICAgdmFyIG1pbiA9IHtcbiAgICAgIHdpZHRoOiB7XG4gICAgICAgIHZhbDogcGFyZW50LnBzdHlsZSgnbWluLXdpZHRoJykucGZWYWx1ZSxcbiAgICAgICAgbGVmdDogcGFyZW50LnBzdHlsZSgnbWluLXdpZHRoLWJpYXMtbGVmdCcpLFxuICAgICAgICByaWdodDogcGFyZW50LnBzdHlsZSgnbWluLXdpZHRoLWJpYXMtcmlnaHQnKVxuICAgICAgfSxcbiAgICAgIGhlaWdodDoge1xuICAgICAgICB2YWw6IHBhcmVudC5wc3R5bGUoJ21pbi1oZWlnaHQnKS5wZlZhbHVlLFxuICAgICAgICB0b3A6IHBhcmVudC5wc3R5bGUoJ21pbi1oZWlnaHQtYmlhcy10b3AnKSxcbiAgICAgICAgYm90dG9tOiBwYXJlbnQucHN0eWxlKCdtaW4taGVpZ2h0LWJpYXMtYm90dG9tJylcbiAgICAgIH1cbiAgICB9O1xuICAgIHZhciBiYiA9IGNoaWxkcmVuLmJvdW5kaW5nQm94KHtcbiAgICAgIGluY2x1ZGVMYWJlbHM6IGluY2x1ZGVMYWJlbHMsXG4gICAgICBpbmNsdWRlT3ZlcmxheXM6IGZhbHNlLFxuICAgICAgLy8gdXBkYXRpbmcgdGhlIGNvbXBvdW5kIGJvdW5kcyBoYXBwZW5zIG91dHNpZGUgb2YgdGhlIHJlZ3VsYXJcbiAgICAgIC8vIGNhY2hlIGN5Y2xlIChpLmUuIGJlZm9yZSBmaXJlZCBldmVudHMpXG4gICAgICB1c2VDYWNoZTogZmFsc2VcbiAgICB9KTtcbiAgICB2YXIgcG9zID0gX3AucG9zaXRpb247XG5cbiAgICAvLyBpZiBjaGlsZHJlbiB0YWtlIHVwIHplcm8gYXJlYSB0aGVuIGtlZXAgcG9zaXRpb24gYW5kIGZhbGwgYmFjayBvbiBzdHlsZXNoZWV0IHcvaFxuICAgIGlmIChiYi53ID09PSAwIHx8IGJiLmggPT09IDApIHtcbiAgICAgIGJiID0ge1xuICAgICAgICB3OiBwYXJlbnQucHN0eWxlKCd3aWR0aCcpLnBmVmFsdWUsXG4gICAgICAgIGg6IHBhcmVudC5wc3R5bGUoJ2hlaWdodCcpLnBmVmFsdWVcbiAgICAgIH07XG4gICAgICBiYi54MSA9IHBvcy54IC0gYmIudyAvIDI7XG4gICAgICBiYi54MiA9IHBvcy54ICsgYmIudyAvIDI7XG4gICAgICBiYi55MSA9IHBvcy55IC0gYmIuaCAvIDI7XG4gICAgICBiYi55MiA9IHBvcy55ICsgYmIuaCAvIDI7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGNvbXB1dGVCaWFzVmFsdWVzKHByb3BEaWZmLCBwcm9wQmlhcywgcHJvcEJpYXNDb21wbGVtZW50KSB7XG4gICAgICB2YXIgYmlhc0RpZmYgPSAwO1xuICAgICAgdmFyIGJpYXNDb21wbGVtZW50RGlmZiA9IDA7XG4gICAgICB2YXIgYmlhc1RvdGFsID0gcHJvcEJpYXMgKyBwcm9wQmlhc0NvbXBsZW1lbnQ7XG4gICAgICBpZiAocHJvcERpZmYgPiAwICYmIGJpYXNUb3RhbCA+IDApIHtcbiAgICAgICAgYmlhc0RpZmYgPSBwcm9wQmlhcyAvIGJpYXNUb3RhbCAqIHByb3BEaWZmO1xuICAgICAgICBiaWFzQ29tcGxlbWVudERpZmYgPSBwcm9wQmlhc0NvbXBsZW1lbnQgLyBiaWFzVG90YWwgKiBwcm9wRGlmZjtcbiAgICAgIH1cbiAgICAgIHJldHVybiB7XG4gICAgICAgIGJpYXNEaWZmOiBiaWFzRGlmZixcbiAgICAgICAgYmlhc0NvbXBsZW1lbnREaWZmOiBiaWFzQ29tcGxlbWVudERpZmZcbiAgICAgIH07XG4gICAgfVxuICAgIGZ1bmN0aW9uIGNvbXB1dGVQYWRkaW5nVmFsdWVzKHdpZHRoLCBoZWlnaHQsIHBhZGRpbmdPYmplY3QsIHJlbGF0aXZlVG8pIHtcbiAgICAgIC8vIEFzc3VtaW5nIHBlcmNlbnRhZ2UgaXMgbnVtYmVyIGZyb20gMCB0byAxXG4gICAgICBpZiAocGFkZGluZ09iamVjdC51bml0cyA9PT0gJyUnKSB7XG4gICAgICAgIHN3aXRjaCAocmVsYXRpdmVUbykge1xuICAgICAgICAgIGNhc2UgJ3dpZHRoJzpcbiAgICAgICAgICAgIHJldHVybiB3aWR0aCA+IDAgPyBwYWRkaW5nT2JqZWN0LnBmVmFsdWUgKiB3aWR0aCA6IDA7XG4gICAgICAgICAgY2FzZSAnaGVpZ2h0JzpcbiAgICAgICAgICAgIHJldHVybiBoZWlnaHQgPiAwID8gcGFkZGluZ09iamVjdC5wZlZhbHVlICogaGVpZ2h0IDogMDtcbiAgICAgICAgICBjYXNlICdhdmVyYWdlJzpcbiAgICAgICAgICAgIHJldHVybiB3aWR0aCA+IDAgJiYgaGVpZ2h0ID4gMCA/IHBhZGRpbmdPYmplY3QucGZWYWx1ZSAqICh3aWR0aCArIGhlaWdodCkgLyAyIDogMDtcbiAgICAgICAgICBjYXNlICdtaW4nOlxuICAgICAgICAgICAgcmV0dXJuIHdpZHRoID4gMCAmJiBoZWlnaHQgPiAwID8gd2lkdGggPiBoZWlnaHQgPyBwYWRkaW5nT2JqZWN0LnBmVmFsdWUgKiBoZWlnaHQgOiBwYWRkaW5nT2JqZWN0LnBmVmFsdWUgKiB3aWR0aCA6IDA7XG4gICAgICAgICAgY2FzZSAnbWF4JzpcbiAgICAgICAgICAgIHJldHVybiB3aWR0aCA+IDAgJiYgaGVpZ2h0ID4gMCA/IHdpZHRoID4gaGVpZ2h0ID8gcGFkZGluZ09iamVjdC5wZlZhbHVlICogd2lkdGggOiBwYWRkaW5nT2JqZWN0LnBmVmFsdWUgKiBoZWlnaHQgOiAwO1xuICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICByZXR1cm4gMDtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmIChwYWRkaW5nT2JqZWN0LnVuaXRzID09PSAncHgnKSB7XG4gICAgICAgIHJldHVybiBwYWRkaW5nT2JqZWN0LnBmVmFsdWU7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gMDtcbiAgICAgIH1cbiAgICB9XG4gICAgdmFyIGxlZnRWYWwgPSBtaW4ud2lkdGgubGVmdC52YWx1ZTtcbiAgICBpZiAobWluLndpZHRoLmxlZnQudW5pdHMgPT09ICdweCcgJiYgbWluLndpZHRoLnZhbCA+IDApIHtcbiAgICAgIGxlZnRWYWwgPSBsZWZ0VmFsICogMTAwIC8gbWluLndpZHRoLnZhbDtcbiAgICB9XG4gICAgdmFyIHJpZ2h0VmFsID0gbWluLndpZHRoLnJpZ2h0LnZhbHVlO1xuICAgIGlmIChtaW4ud2lkdGgucmlnaHQudW5pdHMgPT09ICdweCcgJiYgbWluLndpZHRoLnZhbCA+IDApIHtcbiAgICAgIHJpZ2h0VmFsID0gcmlnaHRWYWwgKiAxMDAgLyBtaW4ud2lkdGgudmFsO1xuICAgIH1cbiAgICB2YXIgdG9wVmFsID0gbWluLmhlaWdodC50b3AudmFsdWU7XG4gICAgaWYgKG1pbi5oZWlnaHQudG9wLnVuaXRzID09PSAncHgnICYmIG1pbi5oZWlnaHQudmFsID4gMCkge1xuICAgICAgdG9wVmFsID0gdG9wVmFsICogMTAwIC8gbWluLmhlaWdodC52YWw7XG4gICAgfVxuICAgIHZhciBib3R0b21WYWwgPSBtaW4uaGVpZ2h0LmJvdHRvbS52YWx1ZTtcbiAgICBpZiAobWluLmhlaWdodC5ib3R0b20udW5pdHMgPT09ICdweCcgJiYgbWluLmhlaWdodC52YWwgPiAwKSB7XG4gICAgICBib3R0b21WYWwgPSBib3R0b21WYWwgKiAxMDAgLyBtaW4uaGVpZ2h0LnZhbDtcbiAgICB9XG4gICAgdmFyIHdpZHRoQmlhc0RpZmZzID0gY29tcHV0ZUJpYXNWYWx1ZXMobWluLndpZHRoLnZhbCAtIGJiLncsIGxlZnRWYWwsIHJpZ2h0VmFsKTtcbiAgICB2YXIgZGlmZkxlZnQgPSB3aWR0aEJpYXNEaWZmcy5iaWFzRGlmZjtcbiAgICB2YXIgZGlmZlJpZ2h0ID0gd2lkdGhCaWFzRGlmZnMuYmlhc0NvbXBsZW1lbnREaWZmO1xuICAgIHZhciBoZWlnaHRCaWFzRGlmZnMgPSBjb21wdXRlQmlhc1ZhbHVlcyhtaW4uaGVpZ2h0LnZhbCAtIGJiLmgsIHRvcFZhbCwgYm90dG9tVmFsKTtcbiAgICB2YXIgZGlmZlRvcCA9IGhlaWdodEJpYXNEaWZmcy5iaWFzRGlmZjtcbiAgICB2YXIgZGlmZkJvdHRvbSA9IGhlaWdodEJpYXNEaWZmcy5iaWFzQ29tcGxlbWVudERpZmY7XG4gICAgX3AuYXV0b1BhZGRpbmcgPSBjb21wdXRlUGFkZGluZ1ZhbHVlcyhiYi53LCBiYi5oLCBwYXJlbnQucHN0eWxlKCdwYWRkaW5nJyksIHBhcmVudC5wc3R5bGUoJ3BhZGRpbmctcmVsYXRpdmUtdG8nKS52YWx1ZSk7XG4gICAgX3AuYXV0b1dpZHRoID0gTWF0aC5tYXgoYmIudywgbWluLndpZHRoLnZhbCk7XG4gICAgcG9zLnggPSAoLWRpZmZMZWZ0ICsgYmIueDEgKyBiYi54MiArIGRpZmZSaWdodCkgLyAyO1xuICAgIF9wLmF1dG9IZWlnaHQgPSBNYXRoLm1heChiYi5oLCBtaW4uaGVpZ2h0LnZhbCk7XG4gICAgcG9zLnkgPSAoLWRpZmZUb3AgKyBiYi55MSArIGJiLnkyICsgZGlmZkJvdHRvbSkgLyAyO1xuICB9XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5sZW5ndGg7IGkrKykge1xuICAgIHZhciBlbGUgPSB0aGlzW2ldO1xuICAgIHZhciBfcCA9IGVsZS5fcHJpdmF0ZTtcbiAgICBpZiAoIV9wLmNvbXBvdW5kQm91bmRzQ2xlYW4gfHwgZm9yY2UpIHtcbiAgICAgIHVwZGF0ZShlbGUpO1xuICAgICAgaWYgKCFjeS5iYXRjaGluZygpKSB7XG4gICAgICAgIF9wLmNvbXBvdW5kQm91bmRzQ2xlYW4gPSB0cnVlO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICByZXR1cm4gdGhpcztcbn07XG52YXIgbm9uaW5mID0gZnVuY3Rpb24gbm9uaW5mKHgpIHtcbiAgaWYgKHggPT09IEluZmluaXR5IHx8IHggPT09IC1JbmZpbml0eSkge1xuICAgIHJldHVybiAwO1xuICB9XG4gIHJldHVybiB4O1xufTtcbnZhciB1cGRhdGVCb3VuZHMgPSBmdW5jdGlvbiB1cGRhdGVCb3VuZHMoYiwgeDEsIHkxLCB4MiwgeTIpIHtcbiAgLy8gZG9uJ3QgdXBkYXRlIHdpdGggemVybyBhcmVhIGJveGVzXG4gIGlmICh4MiAtIHgxID09PSAwIHx8IHkyIC0geTEgPT09IDApIHtcbiAgICByZXR1cm47XG4gIH1cblxuICAvLyBkb24ndCB1cGRhdGUgd2l0aCBudWxsIGRpbVxuICBpZiAoeDEgPT0gbnVsbCB8fCB5MSA9PSBudWxsIHx8IHgyID09IG51bGwgfHwgeTIgPT0gbnVsbCkge1xuICAgIHJldHVybjtcbiAgfVxuICBiLngxID0geDEgPCBiLngxID8geDEgOiBiLngxO1xuICBiLngyID0geDIgPiBiLngyID8geDIgOiBiLngyO1xuICBiLnkxID0geTEgPCBiLnkxID8geTEgOiBiLnkxO1xuICBiLnkyID0geTIgPiBiLnkyID8geTIgOiBiLnkyO1xuICBiLncgPSBiLngyIC0gYi54MTtcbiAgYi5oID0gYi55MiAtIGIueTE7XG59O1xudmFyIHVwZGF0ZUJvdW5kc0Zyb21Cb3ggPSBmdW5jdGlvbiB1cGRhdGVCb3VuZHNGcm9tQm94KGIsIGIyKSB7XG4gIGlmIChiMiA9PSBudWxsKSB7XG4gICAgcmV0dXJuIGI7XG4gIH1cbiAgcmV0dXJuIHVwZGF0ZUJvdW5kcyhiLCBiMi54MSwgYjIueTEsIGIyLngyLCBiMi55Mik7XG59O1xudmFyIHByZWZpeGVkUHJvcGVydHkgPSBmdW5jdGlvbiBwcmVmaXhlZFByb3BlcnR5KG9iaiwgZmllbGQsIHByZWZpeCkge1xuICByZXR1cm4gZ2V0UHJlZml4ZWRQcm9wZXJ0eShvYmosIGZpZWxkLCBwcmVmaXgpO1xufTtcbnZhciB1cGRhdGVCb3VuZHNGcm9tQXJyb3cgPSBmdW5jdGlvbiB1cGRhdGVCb3VuZHNGcm9tQXJyb3coYm91bmRzLCBlbGUsIHByZWZpeCkge1xuICBpZiAoZWxlLmN5KCkuaGVhZGxlc3MoKSkge1xuICAgIHJldHVybjtcbiAgfVxuICB2YXIgX3AgPSBlbGUuX3ByaXZhdGU7XG4gIHZhciByc3R5bGUgPSBfcC5yc3R5bGU7XG4gIHZhciBoYWxmQXJXID0gcnN0eWxlLmFycm93V2lkdGggLyAyO1xuICB2YXIgYXJyb3dUeXBlID0gZWxlLnBzdHlsZShwcmVmaXggKyAnLWFycm93LXNoYXBlJykudmFsdWU7XG4gIHZhciB4O1xuICB2YXIgeTtcbiAgaWYgKGFycm93VHlwZSAhPT0gJ25vbmUnKSB7XG4gICAgaWYgKHByZWZpeCA9PT0gJ3NvdXJjZScpIHtcbiAgICAgIHggPSByc3R5bGUuc3JjWDtcbiAgICAgIHkgPSByc3R5bGUuc3JjWTtcbiAgICB9IGVsc2UgaWYgKHByZWZpeCA9PT0gJ3RhcmdldCcpIHtcbiAgICAgIHggPSByc3R5bGUudGd0WDtcbiAgICAgIHkgPSByc3R5bGUudGd0WTtcbiAgICB9IGVsc2Uge1xuICAgICAgeCA9IHJzdHlsZS5taWRYO1xuICAgICAgeSA9IHJzdHlsZS5taWRZO1xuICAgIH1cblxuICAgIC8vIGFsd2F5cyBzdG9yZSB0aGUgaW5kaXZpZHVhbCBhcnJvdyBib3VuZHNcbiAgICB2YXIgYmJzID0gX3AuYXJyb3dCb3VuZHMgPSBfcC5hcnJvd0JvdW5kcyB8fCB7fTtcbiAgICB2YXIgYmIgPSBiYnNbcHJlZml4XSA9IGJic1twcmVmaXhdIHx8IHt9O1xuICAgIGJiLngxID0geCAtIGhhbGZBclc7XG4gICAgYmIueTEgPSB5IC0gaGFsZkFyVztcbiAgICBiYi54MiA9IHggKyBoYWxmQXJXO1xuICAgIGJiLnkyID0geSArIGhhbGZBclc7XG4gICAgYmIudyA9IGJiLngyIC0gYmIueDE7XG4gICAgYmIuaCA9IGJiLnkyIC0gYmIueTE7XG4gICAgZXhwYW5kQm91bmRpbmdCb3goYmIsIDEpO1xuICAgIHVwZGF0ZUJvdW5kcyhib3VuZHMsIGJiLngxLCBiYi55MSwgYmIueDIsIGJiLnkyKTtcbiAgfVxufTtcbnZhciB1cGRhdGVCb3VuZHNGcm9tTGFiZWwgPSBmdW5jdGlvbiB1cGRhdGVCb3VuZHNGcm9tTGFiZWwoYm91bmRzLCBlbGUsIHByZWZpeCkge1xuICBpZiAoZWxlLmN5KCkuaGVhZGxlc3MoKSkge1xuICAgIHJldHVybjtcbiAgfVxuICB2YXIgcHJlZml4RGFzaDtcbiAgaWYgKHByZWZpeCkge1xuICAgIHByZWZpeERhc2ggPSBwcmVmaXggKyAnLSc7XG4gIH0gZWxzZSB7XG4gICAgcHJlZml4RGFzaCA9ICcnO1xuICB9XG4gIHZhciBfcCA9IGVsZS5fcHJpdmF0ZTtcbiAgdmFyIHJzdHlsZSA9IF9wLnJzdHlsZTtcbiAgdmFyIGxhYmVsID0gZWxlLnBzdHlsZShwcmVmaXhEYXNoICsgJ2xhYmVsJykuc3RyVmFsdWU7XG4gIGlmIChsYWJlbCkge1xuICAgIHZhciBoYWxpZ24gPSBlbGUucHN0eWxlKCd0ZXh0LWhhbGlnbicpO1xuICAgIHZhciB2YWxpZ24gPSBlbGUucHN0eWxlKCd0ZXh0LXZhbGlnbicpO1xuICAgIHZhciBsYWJlbFdpZHRoID0gcHJlZml4ZWRQcm9wZXJ0eShyc3R5bGUsICdsYWJlbFdpZHRoJywgcHJlZml4KTtcbiAgICB2YXIgbGFiZWxIZWlnaHQgPSBwcmVmaXhlZFByb3BlcnR5KHJzdHlsZSwgJ2xhYmVsSGVpZ2h0JywgcHJlZml4KTtcbiAgICB2YXIgbGFiZWxYID0gcHJlZml4ZWRQcm9wZXJ0eShyc3R5bGUsICdsYWJlbFgnLCBwcmVmaXgpO1xuICAgIHZhciBsYWJlbFkgPSBwcmVmaXhlZFByb3BlcnR5KHJzdHlsZSwgJ2xhYmVsWScsIHByZWZpeCk7XG4gICAgdmFyIG1hcmdpblggPSBlbGUucHN0eWxlKHByZWZpeERhc2ggKyAndGV4dC1tYXJnaW4teCcpLnBmVmFsdWU7XG4gICAgdmFyIG1hcmdpblkgPSBlbGUucHN0eWxlKHByZWZpeERhc2ggKyAndGV4dC1tYXJnaW4teScpLnBmVmFsdWU7XG4gICAgdmFyIGlzRWRnZSA9IGVsZS5pc0VkZ2UoKTtcbiAgICB2YXIgcm90YXRpb24gPSBlbGUucHN0eWxlKHByZWZpeERhc2ggKyAndGV4dC1yb3RhdGlvbicpO1xuICAgIHZhciBvdXRsaW5lV2lkdGggPSBlbGUucHN0eWxlKCd0ZXh0LW91dGxpbmUtd2lkdGgnKS5wZlZhbHVlO1xuICAgIHZhciBib3JkZXJXaWR0aCA9IGVsZS5wc3R5bGUoJ3RleHQtYm9yZGVyLXdpZHRoJykucGZWYWx1ZTtcbiAgICB2YXIgaGFsZkJvcmRlcldpZHRoID0gYm9yZGVyV2lkdGggLyAyO1xuICAgIHZhciBwYWRkaW5nID0gZWxlLnBzdHlsZSgndGV4dC1iYWNrZ3JvdW5kLXBhZGRpbmcnKS5wZlZhbHVlO1xuICAgIHZhciBtYXJnaW5PZkVycm9yID0gMjsgLy8gZXhwYW5kIHRvIHdvcmsgYXJvdW5kIGJyb3dzZXIgZGltZW5zaW9uIGluYWNjdXJhY2llc1xuXG4gICAgdmFyIGxoID0gbGFiZWxIZWlnaHQ7XG4gICAgdmFyIGx3ID0gbGFiZWxXaWR0aDtcbiAgICB2YXIgbHdfMiA9IGx3IC8gMjtcbiAgICB2YXIgbGhfMiA9IGxoIC8gMjtcbiAgICB2YXIgbHgxLCBseDIsIGx5MSwgbHkyO1xuICAgIGlmIChpc0VkZ2UpIHtcbiAgICAgIGx4MSA9IGxhYmVsWCAtIGx3XzI7XG4gICAgICBseDIgPSBsYWJlbFggKyBsd18yO1xuICAgICAgbHkxID0gbGFiZWxZIC0gbGhfMjtcbiAgICAgIGx5MiA9IGxhYmVsWSArIGxoXzI7XG4gICAgfSBlbHNlIHtcbiAgICAgIHN3aXRjaCAoaGFsaWduLnZhbHVlKSB7XG4gICAgICAgIGNhc2UgJ2xlZnQnOlxuICAgICAgICAgIGx4MSA9IGxhYmVsWCAtIGx3O1xuICAgICAgICAgIGx4MiA9IGxhYmVsWDtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAnY2VudGVyJzpcbiAgICAgICAgICBseDEgPSBsYWJlbFggLSBsd18yO1xuICAgICAgICAgIGx4MiA9IGxhYmVsWCArIGx3XzI7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgJ3JpZ2h0JzpcbiAgICAgICAgICBseDEgPSBsYWJlbFg7XG4gICAgICAgICAgbHgyID0gbGFiZWxYICsgbHc7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgICBzd2l0Y2ggKHZhbGlnbi52YWx1ZSkge1xuICAgICAgICBjYXNlICd0b3AnOlxuICAgICAgICAgIGx5MSA9IGxhYmVsWSAtIGxoO1xuICAgICAgICAgIGx5MiA9IGxhYmVsWTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAnY2VudGVyJzpcbiAgICAgICAgICBseTEgPSBsYWJlbFkgLSBsaF8yO1xuICAgICAgICAgIGx5MiA9IGxhYmVsWSArIGxoXzI7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgJ2JvdHRvbSc6XG4gICAgICAgICAgbHkxID0gbGFiZWxZO1xuICAgICAgICAgIGx5MiA9IGxhYmVsWSArIGxoO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIHNoaWZ0IGJ5IG1hcmdpbiBhbmQgZXhwYW5kIGJ5IG91dGxpbmUgYW5kIGJvcmRlclxuICAgIHZhciBsZWZ0UGFkID0gbWFyZ2luWCAtIE1hdGgubWF4KG91dGxpbmVXaWR0aCwgaGFsZkJvcmRlcldpZHRoKSAtIHBhZGRpbmcgLSBtYXJnaW5PZkVycm9yO1xuICAgIHZhciByaWdodFBhZCA9IG1hcmdpblggKyBNYXRoLm1heChvdXRsaW5lV2lkdGgsIGhhbGZCb3JkZXJXaWR0aCkgKyBwYWRkaW5nICsgbWFyZ2luT2ZFcnJvcjtcbiAgICB2YXIgdG9wUGFkID0gbWFyZ2luWSAtIE1hdGgubWF4KG91dGxpbmVXaWR0aCwgaGFsZkJvcmRlcldpZHRoKSAtIHBhZGRpbmcgLSBtYXJnaW5PZkVycm9yO1xuICAgIHZhciBib3RQYWQgPSBtYXJnaW5ZICsgTWF0aC5tYXgob3V0bGluZVdpZHRoLCBoYWxmQm9yZGVyV2lkdGgpICsgcGFkZGluZyArIG1hcmdpbk9mRXJyb3I7XG4gICAgbHgxICs9IGxlZnRQYWQ7XG4gICAgbHgyICs9IHJpZ2h0UGFkO1xuICAgIGx5MSArPSB0b3BQYWQ7XG4gICAgbHkyICs9IGJvdFBhZDtcblxuICAgIC8vIGFsd2F5cyBzdG9yZSB0aGUgdW5yb3RhdGVkIGxhYmVsIGJvdW5kcyBzZXBhcmF0ZWx5XG4gICAgdmFyIGJiUHJlZml4ID0gcHJlZml4IHx8ICdtYWluJztcbiAgICB2YXIgYmJzID0gX3AubGFiZWxCb3VuZHM7XG4gICAgdmFyIGJiID0gYmJzW2JiUHJlZml4XSA9IGJic1tiYlByZWZpeF0gfHwge307XG4gICAgYmIueDEgPSBseDE7XG4gICAgYmIueTEgPSBseTE7XG4gICAgYmIueDIgPSBseDI7XG4gICAgYmIueTIgPSBseTI7XG4gICAgYmIudyA9IGx4MiAtIGx4MTtcbiAgICBiYi5oID0gbHkyIC0gbHkxO1xuICAgIGJiLmxlZnRQYWQgPSBsZWZ0UGFkO1xuICAgIGJiLnJpZ2h0UGFkID0gcmlnaHRQYWQ7XG4gICAgYmIudG9wUGFkID0gdG9wUGFkO1xuICAgIGJiLmJvdFBhZCA9IGJvdFBhZDtcbiAgICB2YXIgaXNBdXRvcm90YXRlID0gaXNFZGdlICYmIHJvdGF0aW9uLnN0clZhbHVlID09PSAnYXV0b3JvdGF0ZSc7XG4gICAgdmFyIGlzUGZWYWx1ZSA9IHJvdGF0aW9uLnBmVmFsdWUgIT0gbnVsbCAmJiByb3RhdGlvbi5wZlZhbHVlICE9PSAwO1xuICAgIGlmIChpc0F1dG9yb3RhdGUgfHwgaXNQZlZhbHVlKSB7XG4gICAgICB2YXIgdGhldGEgPSBpc0F1dG9yb3RhdGUgPyBwcmVmaXhlZFByb3BlcnR5KF9wLnJzdHlsZSwgJ2xhYmVsQW5nbGUnLCBwcmVmaXgpIDogcm90YXRpb24ucGZWYWx1ZTtcbiAgICAgIHZhciBjb3MgPSBNYXRoLmNvcyh0aGV0YSk7XG4gICAgICB2YXIgc2luID0gTWF0aC5zaW4odGhldGEpO1xuXG4gICAgICAvLyByb3RhdGlvbiBwb2ludCAoZGVmYXVsdCB2YWx1ZSBmb3IgY2VudGVyLWNlbnRlcilcbiAgICAgIHZhciB4byA9IChseDEgKyBseDIpIC8gMjtcbiAgICAgIHZhciB5byA9IChseTEgKyBseTIpIC8gMjtcbiAgICAgIGlmICghaXNFZGdlKSB7XG4gICAgICAgIHN3aXRjaCAoaGFsaWduLnZhbHVlKSB7XG4gICAgICAgICAgY2FzZSAnbGVmdCc6XG4gICAgICAgICAgICB4byA9IGx4MjtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgJ3JpZ2h0JzpcbiAgICAgICAgICAgIHhvID0gbHgxO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgICAgc3dpdGNoICh2YWxpZ24udmFsdWUpIHtcbiAgICAgICAgICBjYXNlICd0b3AnOlxuICAgICAgICAgICAgeW8gPSBseTI7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlICdib3R0b20nOlxuICAgICAgICAgICAgeW8gPSBseTE7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgdmFyIHJvdGF0ZSA9IGZ1bmN0aW9uIHJvdGF0ZSh4LCB5KSB7XG4gICAgICAgIHggPSB4IC0geG87XG4gICAgICAgIHkgPSB5IC0geW87XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgeDogeCAqIGNvcyAtIHkgKiBzaW4gKyB4byxcbiAgICAgICAgICB5OiB4ICogc2luICsgeSAqIGNvcyArIHlvXG4gICAgICAgIH07XG4gICAgICB9O1xuICAgICAgdmFyIHB4MXkxID0gcm90YXRlKGx4MSwgbHkxKTtcbiAgICAgIHZhciBweDF5MiA9IHJvdGF0ZShseDEsIGx5Mik7XG4gICAgICB2YXIgcHgyeTEgPSByb3RhdGUobHgyLCBseTEpO1xuICAgICAgdmFyIHB4MnkyID0gcm90YXRlKGx4MiwgbHkyKTtcbiAgICAgIGx4MSA9IE1hdGgubWluKHB4MXkxLngsIHB4MXkyLngsIHB4MnkxLngsIHB4MnkyLngpO1xuICAgICAgbHgyID0gTWF0aC5tYXgocHgxeTEueCwgcHgxeTIueCwgcHgyeTEueCwgcHgyeTIueCk7XG4gICAgICBseTEgPSBNYXRoLm1pbihweDF5MS55LCBweDF5Mi55LCBweDJ5MS55LCBweDJ5Mi55KTtcbiAgICAgIGx5MiA9IE1hdGgubWF4KHB4MXkxLnksIHB4MXkyLnksIHB4MnkxLnksIHB4MnkyLnkpO1xuICAgIH1cbiAgICB2YXIgYmJQcmVmaXhSb3QgPSBiYlByZWZpeCArICdSb3QnO1xuICAgIHZhciBiYlJvdCA9IGJic1tiYlByZWZpeFJvdF0gPSBiYnNbYmJQcmVmaXhSb3RdIHx8IHt9O1xuICAgIGJiUm90LngxID0gbHgxO1xuICAgIGJiUm90LnkxID0gbHkxO1xuICAgIGJiUm90LngyID0gbHgyO1xuICAgIGJiUm90LnkyID0gbHkyO1xuICAgIGJiUm90LncgPSBseDIgLSBseDE7XG4gICAgYmJSb3QuaCA9IGx5MiAtIGx5MTtcbiAgICB1cGRhdGVCb3VuZHMoYm91bmRzLCBseDEsIGx5MSwgbHgyLCBseTIpO1xuICAgIHVwZGF0ZUJvdW5kcyhfcC5sYWJlbEJvdW5kcy5hbGwsIGx4MSwgbHkxLCBseDIsIGx5Mik7XG4gIH1cbiAgcmV0dXJuIGJvdW5kcztcbn07XG52YXIgdXBkYXRlQm91bmRzRnJvbU91dGxpbmUgPSBmdW5jdGlvbiB1cGRhdGVCb3VuZHNGcm9tT3V0bGluZShib3VuZHMsIGVsZSkge1xuICBpZiAoZWxlLmN5KCkuaGVhZGxlc3MoKSkge1xuICAgIHJldHVybjtcbiAgfVxuICB2YXIgb3V0bGluZU9wYWNpdHkgPSBlbGUucHN0eWxlKCdvdXRsaW5lLW9wYWNpdHknKS52YWx1ZTtcbiAgdmFyIG91dGxpbmVXaWR0aCA9IGVsZS5wc3R5bGUoJ291dGxpbmUtd2lkdGgnKS52YWx1ZTtcbiAgaWYgKG91dGxpbmVPcGFjaXR5ID4gMCAmJiBvdXRsaW5lV2lkdGggPiAwKSB7XG4gICAgdmFyIG91dGxpbmVPZmZzZXQgPSBlbGUucHN0eWxlKCdvdXRsaW5lLW9mZnNldCcpLnZhbHVlO1xuICAgIHZhciBub2RlU2hhcGUgPSBlbGUucHN0eWxlKCdzaGFwZScpLnZhbHVlO1xuICAgIHZhciBvdXRsaW5lU2l6ZSA9IG91dGxpbmVXaWR0aCArIG91dGxpbmVPZmZzZXQ7XG4gICAgdmFyIHNjYWxlWCA9IChib3VuZHMudyArIG91dGxpbmVTaXplICogMikgLyBib3VuZHMudztcbiAgICB2YXIgc2NhbGVZID0gKGJvdW5kcy5oICsgb3V0bGluZVNpemUgKiAyKSAvIGJvdW5kcy5oO1xuICAgIHZhciB4T2Zmc2V0ID0gMDtcbiAgICB2YXIgeU9mZnNldCA9IDA7XG4gICAgaWYgKFtcImRpYW1vbmRcIiwgXCJwZW50YWdvblwiLCBcInJvdW5kLXRyaWFuZ2xlXCJdLmluY2x1ZGVzKG5vZGVTaGFwZSkpIHtcbiAgICAgIHNjYWxlWCA9IChib3VuZHMudyArIG91dGxpbmVTaXplICogMi40KSAvIGJvdW5kcy53O1xuICAgICAgeU9mZnNldCA9IC1vdXRsaW5lU2l6ZSAvIDMuNjtcbiAgICB9IGVsc2UgaWYgKFtcImNvbmNhdmUtaGV4YWdvblwiLCBcInJob21ib2lkXCIsIFwicmlnaHQtcmhvbWJvaWRcIl0uaW5jbHVkZXMobm9kZVNoYXBlKSkge1xuICAgICAgc2NhbGVYID0gKGJvdW5kcy53ICsgb3V0bGluZVNpemUgKiAyLjQpIC8gYm91bmRzLnc7XG4gICAgfSBlbHNlIGlmIChub2RlU2hhcGUgPT09IFwic3RhclwiKSB7XG4gICAgICBzY2FsZVggPSAoYm91bmRzLncgKyBvdXRsaW5lU2l6ZSAqIDIuOCkgLyBib3VuZHMudztcbiAgICAgIHNjYWxlWSA9IChib3VuZHMuaCArIG91dGxpbmVTaXplICogMi42KSAvIGJvdW5kcy5oO1xuICAgICAgeU9mZnNldCA9IC1vdXRsaW5lU2l6ZSAvIDMuODtcbiAgICB9IGVsc2UgaWYgKG5vZGVTaGFwZSA9PT0gXCJ0cmlhbmdsZVwiKSB7XG4gICAgICBzY2FsZVggPSAoYm91bmRzLncgKyBvdXRsaW5lU2l6ZSAqIDIuOCkgLyBib3VuZHMudztcbiAgICAgIHNjYWxlWSA9IChib3VuZHMuaCArIG91dGxpbmVTaXplICogMi40KSAvIGJvdW5kcy5oO1xuICAgICAgeU9mZnNldCA9IC1vdXRsaW5lU2l6ZSAvIDEuNDtcbiAgICB9IGVsc2UgaWYgKG5vZGVTaGFwZSA9PT0gXCJ2ZWVcIikge1xuICAgICAgc2NhbGVYID0gKGJvdW5kcy53ICsgb3V0bGluZVNpemUgKiA0LjQpIC8gYm91bmRzLnc7XG4gICAgICBzY2FsZVkgPSAoYm91bmRzLmggKyBvdXRsaW5lU2l6ZSAqIDMuOCkgLyBib3VuZHMuaDtcbiAgICAgIHlPZmZzZXQgPSAtb3V0bGluZVNpemUgKiAuNTtcbiAgICB9XG4gICAgdmFyIGhEZWx0YSA9IGJvdW5kcy5oICogc2NhbGVZIC0gYm91bmRzLmg7XG4gICAgdmFyIHdEZWx0YSA9IGJvdW5kcy53ICogc2NhbGVYIC0gYm91bmRzLnc7XG4gICAgZXhwYW5kQm91bmRpbmdCb3hTaWRlcyhib3VuZHMsIFtNYXRoLmNlaWwoaERlbHRhIC8gMiksIE1hdGguY2VpbCh3RGVsdGEgLyAyKV0pO1xuICAgIGlmICh4T2Zmc2V0ICE9IDAgfHwgeU9mZnNldCAhPT0gMCkge1xuICAgICAgdmFyIG9Cb3VuZHMgPSBzaGlmdEJvdW5kaW5nQm94KGJvdW5kcywgeE9mZnNldCwgeU9mZnNldCk7XG4gICAgICB1cGRhdGVCb3VuZGluZ0JveChib3VuZHMsIG9Cb3VuZHMpO1xuICAgIH1cbiAgfVxufTtcblxuLy8gZ2V0IHRoZSBib3VuZGluZyBib3ggb2YgdGhlIGVsZW1lbnRzIChpbiByYXcgbW9kZWwgcG9zaXRpb24pXG52YXIgYm91bmRpbmdCb3hJbXBsID0gZnVuY3Rpb24gYm91bmRpbmdCb3hJbXBsKGVsZSwgb3B0aW9ucykge1xuICB2YXIgY3kgPSBlbGUuX3ByaXZhdGUuY3k7XG4gIHZhciBzdHlsZUVuYWJsZWQgPSBjeS5zdHlsZUVuYWJsZWQoKTtcbiAgdmFyIGhlYWRsZXNzID0gY3kuaGVhZGxlc3MoKTtcbiAgdmFyIGJvdW5kcyA9IG1ha2VCb3VuZGluZ0JveCgpO1xuICB2YXIgX3AgPSBlbGUuX3ByaXZhdGU7XG4gIHZhciBpc05vZGUgPSBlbGUuaXNOb2RlKCk7XG4gIHZhciBpc0VkZ2UgPSBlbGUuaXNFZGdlKCk7XG4gIHZhciBleDEsIGV4MiwgZXkxLCBleTI7IC8vIGV4dHJlbWEgb2YgYm9keSAvIGxpbmVzXG4gIHZhciB4LCB5OyAvLyBub2RlIHBvc1xuICB2YXIgcnN0eWxlID0gX3AucnN0eWxlO1xuICB2YXIgbWFudWFsRXhwYW5zaW9uID0gaXNOb2RlICYmIHN0eWxlRW5hYmxlZCA/IGVsZS5wc3R5bGUoJ2JvdW5kcy1leHBhbnNpb24nKS5wZlZhbHVlIDogWzBdO1xuXG4gIC8vIG11c3QgdXNlIGBkaXNwbGF5YCBwcm9wIG9ubHksIGFzIHJlYWRpbmcgYGNvbXBvdW5kLndpZHRoKClgIGNhdXNlcyByZWN1cnNpb25cbiAgLy8gKG90aGVyIGZhY3RvcnMgbGlrZSB3aWR0aCB2YWx1ZXMgd2lsbCBiZSBjb25zaWRlcmVkIGxhdGVyIGluIHRoaXMgZnVuY3Rpb24gYW55d2F5KVxuICB2YXIgaXNEaXNwbGF5ZWQgPSBmdW5jdGlvbiBpc0Rpc3BsYXllZChlbGUpIHtcbiAgICByZXR1cm4gZWxlLnBzdHlsZSgnZGlzcGxheScpLnZhbHVlICE9PSAnbm9uZSc7XG4gIH07XG4gIHZhciBkaXNwbGF5ZWQgPSAhc3R5bGVFbmFibGVkIHx8IGlzRGlzcGxheWVkKGVsZSlcblxuICAvLyBtdXN0IHRha2UgaW50byBhY2NvdW50IGNvbm5lY3RlZCBub2RlcyBiL2Mgb2YgaW1wbGljaXQgZWRnZSBoaWRpbmcgb24gZGlzcGxheTpub25lIG5vZGVcbiAgJiYgKCFpc0VkZ2UgfHwgaXNEaXNwbGF5ZWQoZWxlLnNvdXJjZSgpKSAmJiBpc0Rpc3BsYXllZChlbGUudGFyZ2V0KCkpKTtcbiAgaWYgKGRpc3BsYXllZCkge1xuICAgIC8vIGRpc3BsYXllZCBzdWZmaWNlcywgc2luY2Ugd2Ugd2lsbCBmaW5kIHplcm8gYXJlYSBlbGVzIGFueXdheVxuICAgIHZhciBvdmVybGF5T3BhY2l0eSA9IDA7XG4gICAgdmFyIG92ZXJsYXlQYWRkaW5nID0gMDtcbiAgICBpZiAoc3R5bGVFbmFibGVkICYmIG9wdGlvbnMuaW5jbHVkZU92ZXJsYXlzKSB7XG4gICAgICBvdmVybGF5T3BhY2l0eSA9IGVsZS5wc3R5bGUoJ292ZXJsYXktb3BhY2l0eScpLnZhbHVlO1xuICAgICAgaWYgKG92ZXJsYXlPcGFjaXR5ICE9PSAwKSB7XG4gICAgICAgIG92ZXJsYXlQYWRkaW5nID0gZWxlLnBzdHlsZSgnb3ZlcmxheS1wYWRkaW5nJykudmFsdWU7XG4gICAgICB9XG4gICAgfVxuICAgIHZhciB1bmRlcmxheU9wYWNpdHkgPSAwO1xuICAgIHZhciB1bmRlcmxheVBhZGRpbmcgPSAwO1xuICAgIGlmIChzdHlsZUVuYWJsZWQgJiYgb3B0aW9ucy5pbmNsdWRlVW5kZXJsYXlzKSB7XG4gICAgICB1bmRlcmxheU9wYWNpdHkgPSBlbGUucHN0eWxlKCd1bmRlcmxheS1vcGFjaXR5JykudmFsdWU7XG4gICAgICBpZiAodW5kZXJsYXlPcGFjaXR5ICE9PSAwKSB7XG4gICAgICAgIHVuZGVybGF5UGFkZGluZyA9IGVsZS5wc3R5bGUoJ3VuZGVybGF5LXBhZGRpbmcnKS52YWx1ZTtcbiAgICAgIH1cbiAgICB9XG4gICAgdmFyIHBhZGRpbmcgPSBNYXRoLm1heChvdmVybGF5UGFkZGluZywgdW5kZXJsYXlQYWRkaW5nKTtcbiAgICB2YXIgdyA9IDA7XG4gICAgdmFyIHdIYWxmID0gMDtcbiAgICBpZiAoc3R5bGVFbmFibGVkKSB7XG4gICAgICB3ID0gZWxlLnBzdHlsZSgnd2lkdGgnKS5wZlZhbHVlO1xuICAgICAgd0hhbGYgPSB3IC8gMjtcbiAgICB9XG4gICAgaWYgKGlzTm9kZSAmJiBvcHRpb25zLmluY2x1ZGVOb2Rlcykge1xuICAgICAgdmFyIHBvcyA9IGVsZS5wb3NpdGlvbigpO1xuICAgICAgeCA9IHBvcy54O1xuICAgICAgeSA9IHBvcy55O1xuICAgICAgdmFyIF93ID0gZWxlLm91dGVyV2lkdGgoKTtcbiAgICAgIHZhciBoYWxmVyA9IF93IC8gMjtcbiAgICAgIHZhciBoID0gZWxlLm91dGVySGVpZ2h0KCk7XG4gICAgICB2YXIgaGFsZkggPSBoIC8gMjtcblxuICAgICAgLy8gaGFuZGxlIG5vZGUgZGltZW5zaW9uc1xuICAgICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuXG4gICAgICBleDEgPSB4IC0gaGFsZlc7XG4gICAgICBleDIgPSB4ICsgaGFsZlc7XG4gICAgICBleTEgPSB5IC0gaGFsZkg7XG4gICAgICBleTIgPSB5ICsgaGFsZkg7XG4gICAgICB1cGRhdGVCb3VuZHMoYm91bmRzLCBleDEsIGV5MSwgZXgyLCBleTIpO1xuICAgICAgaWYgKHN0eWxlRW5hYmxlZCAmJiBvcHRpb25zLmluY2x1ZGVPdXRsaW5lcykge1xuICAgICAgICB1cGRhdGVCb3VuZHNGcm9tT3V0bGluZShib3VuZHMsIGVsZSk7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChpc0VkZ2UgJiYgb3B0aW9ucy5pbmNsdWRlRWRnZXMpIHtcbiAgICAgIGlmIChzdHlsZUVuYWJsZWQgJiYgIWhlYWRsZXNzKSB7XG4gICAgICAgIHZhciBjdXJ2ZVN0eWxlID0gZWxlLnBzdHlsZSgnY3VydmUtc3R5bGUnKS5zdHJWYWx1ZTtcblxuICAgICAgICAvLyBoYW5kbGUgZWRnZSBkaW1lbnNpb25zIChyb3VnaCBib3ggZXN0aW1hdGUpXG4gICAgICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cblxuICAgICAgICBleDEgPSBNYXRoLm1pbihyc3R5bGUuc3JjWCwgcnN0eWxlLm1pZFgsIHJzdHlsZS50Z3RYKTtcbiAgICAgICAgZXgyID0gTWF0aC5tYXgocnN0eWxlLnNyY1gsIHJzdHlsZS5taWRYLCByc3R5bGUudGd0WCk7XG4gICAgICAgIGV5MSA9IE1hdGgubWluKHJzdHlsZS5zcmNZLCByc3R5bGUubWlkWSwgcnN0eWxlLnRndFkpO1xuICAgICAgICBleTIgPSBNYXRoLm1heChyc3R5bGUuc3JjWSwgcnN0eWxlLm1pZFksIHJzdHlsZS50Z3RZKTtcblxuICAgICAgICAvLyB0YWtlIGludG8gYWNjb3VudCBlZGdlIHdpZHRoXG4gICAgICAgIGV4MSAtPSB3SGFsZjtcbiAgICAgICAgZXgyICs9IHdIYWxmO1xuICAgICAgICBleTEgLT0gd0hhbGY7XG4gICAgICAgIGV5MiArPSB3SGFsZjtcbiAgICAgICAgdXBkYXRlQm91bmRzKGJvdW5kcywgZXgxLCBleTEsIGV4MiwgZXkyKTtcblxuICAgICAgICAvLyBwcmVjaXNlIGVkZ2VzXG4gICAgICAgIC8vLy8vLy8vLy8vLy8vLy9cblxuICAgICAgICBpZiAoY3VydmVTdHlsZSA9PT0gJ2hheXN0YWNrJykge1xuICAgICAgICAgIHZhciBocHRzID0gcnN0eWxlLmhheXN0YWNrUHRzO1xuICAgICAgICAgIGlmIChocHRzICYmIGhwdHMubGVuZ3RoID09PSAyKSB7XG4gICAgICAgICAgICBleDEgPSBocHRzWzBdLng7XG4gICAgICAgICAgICBleTEgPSBocHRzWzBdLnk7XG4gICAgICAgICAgICBleDIgPSBocHRzWzFdLng7XG4gICAgICAgICAgICBleTIgPSBocHRzWzFdLnk7XG4gICAgICAgICAgICBpZiAoZXgxID4gZXgyKSB7XG4gICAgICAgICAgICAgIHZhciB0ZW1wID0gZXgxO1xuICAgICAgICAgICAgICBleDEgPSBleDI7XG4gICAgICAgICAgICAgIGV4MiA9IHRlbXA7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoZXkxID4gZXkyKSB7XG4gICAgICAgICAgICAgIHZhciBfdGVtcCA9IGV5MTtcbiAgICAgICAgICAgICAgZXkxID0gZXkyO1xuICAgICAgICAgICAgICBleTIgPSBfdGVtcDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHVwZGF0ZUJvdW5kcyhib3VuZHMsIGV4MSAtIHdIYWxmLCBleTEgLSB3SGFsZiwgZXgyICsgd0hhbGYsIGV5MiArIHdIYWxmKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSBpZiAoY3VydmVTdHlsZSA9PT0gJ2JlemllcicgfHwgY3VydmVTdHlsZSA9PT0gJ3VuYnVuZGxlZC1iZXppZXInIHx8IGN1cnZlU3R5bGUuZW5kc1dpdGgoJ3NlZ21lbnRzJykgfHwgY3VydmVTdHlsZS5lbmRzV2l0aCgndGF4aScpKSB7XG4gICAgICAgICAgdmFyIHB0cztcbiAgICAgICAgICBzd2l0Y2ggKGN1cnZlU3R5bGUpIHtcbiAgICAgICAgICAgIGNhc2UgJ2Jlemllcic6XG4gICAgICAgICAgICBjYXNlICd1bmJ1bmRsZWQtYmV6aWVyJzpcbiAgICAgICAgICAgICAgcHRzID0gcnN0eWxlLmJlemllclB0cztcbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICdzZWdtZW50cyc6XG4gICAgICAgICAgICBjYXNlICd0YXhpJzpcbiAgICAgICAgICAgIGNhc2UgJ3JvdW5kLXNlZ21lbnRzJzpcbiAgICAgICAgICAgIGNhc2UgJ3JvdW5kLXRheGknOlxuICAgICAgICAgICAgICBwdHMgPSByc3R5bGUubGluZVB0cztcbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmIChwdHMgIT0gbnVsbCkge1xuICAgICAgICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCBwdHMubGVuZ3RoOyBqKyspIHtcbiAgICAgICAgICAgICAgdmFyIHB0ID0gcHRzW2pdO1xuICAgICAgICAgICAgICBleDEgPSBwdC54IC0gd0hhbGY7XG4gICAgICAgICAgICAgIGV4MiA9IHB0LnggKyB3SGFsZjtcbiAgICAgICAgICAgICAgZXkxID0gcHQueSAtIHdIYWxmO1xuICAgICAgICAgICAgICBleTIgPSBwdC55ICsgd0hhbGY7XG4gICAgICAgICAgICAgIHVwZGF0ZUJvdW5kcyhib3VuZHMsIGV4MSwgZXkxLCBleDIsIGV5Mik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9IC8vIGJlemllci1saWtlIG9yIHNlZ21lbnQtbGlrZSBlZGdlXG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBoZWFkbGVzcyBvciBzdHlsZSBkaXNhYmxlZFxuXG4gICAgICAgIC8vIGZhbGxiYWNrIG9uIHNvdXJjZSBhbmQgdGFyZ2V0IHBvc2l0aW9uc1xuICAgICAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cblxuICAgICAgICB2YXIgbjEgPSBlbGUuc291cmNlKCk7XG4gICAgICAgIHZhciBuMXBvcyA9IG4xLnBvc2l0aW9uKCk7XG4gICAgICAgIHZhciBuMiA9IGVsZS50YXJnZXQoKTtcbiAgICAgICAgdmFyIG4ycG9zID0gbjIucG9zaXRpb24oKTtcbiAgICAgICAgZXgxID0gbjFwb3MueDtcbiAgICAgICAgZXgyID0gbjJwb3MueDtcbiAgICAgICAgZXkxID0gbjFwb3MueTtcbiAgICAgICAgZXkyID0gbjJwb3MueTtcbiAgICAgICAgaWYgKGV4MSA+IGV4Mikge1xuICAgICAgICAgIHZhciBfdGVtcDIgPSBleDE7XG4gICAgICAgICAgZXgxID0gZXgyO1xuICAgICAgICAgIGV4MiA9IF90ZW1wMjtcbiAgICAgICAgfVxuICAgICAgICBpZiAoZXkxID4gZXkyKSB7XG4gICAgICAgICAgdmFyIF90ZW1wMyA9IGV5MTtcbiAgICAgICAgICBleTEgPSBleTI7XG4gICAgICAgICAgZXkyID0gX3RlbXAzO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gdGFrZSBpbnRvIGFjY291bnQgZWRnZSB3aWR0aFxuICAgICAgICBleDEgLT0gd0hhbGY7XG4gICAgICAgIGV4MiArPSB3SGFsZjtcbiAgICAgICAgZXkxIC09IHdIYWxmO1xuICAgICAgICBleTIgKz0gd0hhbGY7XG4gICAgICAgIHVwZGF0ZUJvdW5kcyhib3VuZHMsIGV4MSwgZXkxLCBleDIsIGV5Mik7XG4gICAgICB9IC8vIGhlYWRsZXNzIG9yIHN0eWxlIGRpc2FibGVkXG4gICAgfSAvLyBlZGdlc1xuXG4gICAgLy8gaGFuZGxlIGVkZ2UgYXJyb3cgc2l6ZVxuICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cblxuICAgIGlmIChzdHlsZUVuYWJsZWQgJiYgb3B0aW9ucy5pbmNsdWRlRWRnZXMgJiYgaXNFZGdlKSB7XG4gICAgICB1cGRhdGVCb3VuZHNGcm9tQXJyb3coYm91bmRzLCBlbGUsICdtaWQtc291cmNlJyk7XG4gICAgICB1cGRhdGVCb3VuZHNGcm9tQXJyb3coYm91bmRzLCBlbGUsICdtaWQtdGFyZ2V0Jyk7XG4gICAgICB1cGRhdGVCb3VuZHNGcm9tQXJyb3coYm91bmRzLCBlbGUsICdzb3VyY2UnKTtcbiAgICAgIHVwZGF0ZUJvdW5kc0Zyb21BcnJvdyhib3VuZHMsIGVsZSwgJ3RhcmdldCcpO1xuICAgIH1cblxuICAgIC8vIGdob3N0XG4gICAgLy8vLy8vLy9cblxuICAgIGlmIChzdHlsZUVuYWJsZWQpIHtcbiAgICAgIHZhciBnaG9zdCA9IGVsZS5wc3R5bGUoJ2dob3N0JykudmFsdWUgPT09ICd5ZXMnO1xuICAgICAgaWYgKGdob3N0KSB7XG4gICAgICAgIHZhciBneCA9IGVsZS5wc3R5bGUoJ2dob3N0LW9mZnNldC14JykucGZWYWx1ZTtcbiAgICAgICAgdmFyIGd5ID0gZWxlLnBzdHlsZSgnZ2hvc3Qtb2Zmc2V0LXknKS5wZlZhbHVlO1xuICAgICAgICB1cGRhdGVCb3VuZHMoYm91bmRzLCBib3VuZHMueDEgKyBneCwgYm91bmRzLnkxICsgZ3ksIGJvdW5kcy54MiArIGd4LCBib3VuZHMueTIgKyBneSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gYWx3YXlzIHN0b3JlIHRoZSBib2R5IGJvdW5kcyBzZXBhcmF0ZWx5IGZyb20gdGhlIGxhYmVsc1xuICAgIHZhciBiYkJvZHkgPSBfcC5ib2R5Qm91bmRzID0gX3AuYm9keUJvdW5kcyB8fCB7fTtcbiAgICBhc3NpZ25Cb3VuZGluZ0JveChiYkJvZHksIGJvdW5kcyk7XG4gICAgZXhwYW5kQm91bmRpbmdCb3hTaWRlcyhiYkJvZHksIG1hbnVhbEV4cGFuc2lvbik7XG4gICAgZXhwYW5kQm91bmRpbmdCb3goYmJCb2R5LCAxKTsgLy8gZXhwYW5kIHRvIHdvcmsgYXJvdW5kIGJyb3dzZXIgZGltZW5zaW9uIGluYWNjdXJhY2llc1xuXG4gICAgLy8gb3ZlcmxheVxuICAgIC8vLy8vLy8vLy9cblxuICAgIGlmIChzdHlsZUVuYWJsZWQpIHtcbiAgICAgIGV4MSA9IGJvdW5kcy54MTtcbiAgICAgIGV4MiA9IGJvdW5kcy54MjtcbiAgICAgIGV5MSA9IGJvdW5kcy55MTtcbiAgICAgIGV5MiA9IGJvdW5kcy55MjtcbiAgICAgIHVwZGF0ZUJvdW5kcyhib3VuZHMsIGV4MSAtIHBhZGRpbmcsIGV5MSAtIHBhZGRpbmcsIGV4MiArIHBhZGRpbmcsIGV5MiArIHBhZGRpbmcpO1xuICAgIH1cblxuICAgIC8vIGFsd2F5cyBzdG9yZSB0aGUgYm9keSBib3VuZHMgc2VwYXJhdGVseSBmcm9tIHRoZSBsYWJlbHNcbiAgICB2YXIgYmJPdmVybGF5ID0gX3Aub3ZlcmxheUJvdW5kcyA9IF9wLm92ZXJsYXlCb3VuZHMgfHwge307XG4gICAgYXNzaWduQm91bmRpbmdCb3goYmJPdmVybGF5LCBib3VuZHMpO1xuICAgIGV4cGFuZEJvdW5kaW5nQm94U2lkZXMoYmJPdmVybGF5LCBtYW51YWxFeHBhbnNpb24pO1xuICAgIGV4cGFuZEJvdW5kaW5nQm94KGJiT3ZlcmxheSwgMSk7IC8vIGV4cGFuZCB0byB3b3JrIGFyb3VuZCBicm93c2VyIGRpbWVuc2lvbiBpbmFjY3VyYWNpZXNcblxuICAgIC8vIGhhbmRsZSBsYWJlbCBkaW1lbnNpb25zXG4gICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cblxuICAgIHZhciBiYkxhYmVscyA9IF9wLmxhYmVsQm91bmRzID0gX3AubGFiZWxCb3VuZHMgfHwge307XG4gICAgaWYgKGJiTGFiZWxzLmFsbCAhPSBudWxsKSB7XG4gICAgICBjbGVhckJvdW5kaW5nQm94KGJiTGFiZWxzLmFsbCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGJiTGFiZWxzLmFsbCA9IG1ha2VCb3VuZGluZ0JveCgpO1xuICAgIH1cbiAgICBpZiAoc3R5bGVFbmFibGVkICYmIG9wdGlvbnMuaW5jbHVkZUxhYmVscykge1xuICAgICAgaWYgKG9wdGlvbnMuaW5jbHVkZU1haW5MYWJlbHMpIHtcbiAgICAgICAgdXBkYXRlQm91bmRzRnJvbUxhYmVsKGJvdW5kcywgZWxlLCBudWxsKTtcbiAgICAgIH1cbiAgICAgIGlmIChpc0VkZ2UpIHtcbiAgICAgICAgaWYgKG9wdGlvbnMuaW5jbHVkZVNvdXJjZUxhYmVscykge1xuICAgICAgICAgIHVwZGF0ZUJvdW5kc0Zyb21MYWJlbChib3VuZHMsIGVsZSwgJ3NvdXJjZScpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChvcHRpb25zLmluY2x1ZGVUYXJnZXRMYWJlbHMpIHtcbiAgICAgICAgICB1cGRhdGVCb3VuZHNGcm9tTGFiZWwoYm91bmRzLCBlbGUsICd0YXJnZXQnKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gLy8gc3R5bGUgZW5hYmxlZCBmb3IgbGFiZWxzXG4gIH0gLy8gaWYgZGlzcGxheWVkXG5cbiAgYm91bmRzLngxID0gbm9uaW5mKGJvdW5kcy54MSk7XG4gIGJvdW5kcy55MSA9IG5vbmluZihib3VuZHMueTEpO1xuICBib3VuZHMueDIgPSBub25pbmYoYm91bmRzLngyKTtcbiAgYm91bmRzLnkyID0gbm9uaW5mKGJvdW5kcy55Mik7XG4gIGJvdW5kcy53ID0gbm9uaW5mKGJvdW5kcy54MiAtIGJvdW5kcy54MSk7XG4gIGJvdW5kcy5oID0gbm9uaW5mKGJvdW5kcy55MiAtIGJvdW5kcy55MSk7XG4gIGlmIChib3VuZHMudyA+IDAgJiYgYm91bmRzLmggPiAwICYmIGRpc3BsYXllZCkge1xuICAgIGV4cGFuZEJvdW5kaW5nQm94U2lkZXMoYm91bmRzLCBtYW51YWxFeHBhbnNpb24pO1xuXG4gICAgLy8gZXhwYW5kIGJvdW5kcyBieSAxIGJlY2F1c2UgYW50aWFsaWFzaW5nIGNhbiBpbmNyZWFzZSB0aGUgdmlzdWFsL2VmZmVjdGl2ZSBzaXplIGJ5IDEgb24gYWxsIHNpZGVzXG4gICAgZXhwYW5kQm91bmRpbmdCb3goYm91bmRzLCAxKTtcbiAgfVxuICByZXR1cm4gYm91bmRzO1xufTtcbnZhciBnZXRLZXkgPSBmdW5jdGlvbiBnZXRLZXkob3B0cykge1xuICB2YXIgaSA9IDA7XG4gIHZhciB0ZiA9IGZ1bmN0aW9uIHRmKHZhbCkge1xuICAgIHJldHVybiAodmFsID8gMSA6IDApIDw8IGkrKztcbiAgfTtcbiAgdmFyIGtleSA9IDA7XG4gIGtleSArPSB0ZihvcHRzLmluY3VkZU5vZGVzKTtcbiAga2V5ICs9IHRmKG9wdHMuaW5jbHVkZUVkZ2VzKTtcbiAga2V5ICs9IHRmKG9wdHMuaW5jbHVkZUxhYmVscyk7XG4gIGtleSArPSB0ZihvcHRzLmluY2x1ZGVNYWluTGFiZWxzKTtcbiAga2V5ICs9IHRmKG9wdHMuaW5jbHVkZVNvdXJjZUxhYmVscyk7XG4gIGtleSArPSB0ZihvcHRzLmluY2x1ZGVUYXJnZXRMYWJlbHMpO1xuICBrZXkgKz0gdGYob3B0cy5pbmNsdWRlT3ZlcmxheXMpO1xuICBrZXkgKz0gdGYob3B0cy5pbmNsdWRlT3V0bGluZXMpO1xuICByZXR1cm4ga2V5O1xufTtcbnZhciBnZXRCb3VuZGluZ0JveFBvc0tleSA9IGZ1bmN0aW9uIGdldEJvdW5kaW5nQm94UG9zS2V5KGVsZSkge1xuICBpZiAoZWxlLmlzRWRnZSgpKSB7XG4gICAgdmFyIHAxID0gZWxlLnNvdXJjZSgpLnBvc2l0aW9uKCk7XG4gICAgdmFyIHAyID0gZWxlLnRhcmdldCgpLnBvc2l0aW9uKCk7XG4gICAgdmFyIHIgPSBmdW5jdGlvbiByKHgpIHtcbiAgICAgIHJldHVybiBNYXRoLnJvdW5kKHgpO1xuICAgIH07XG4gICAgcmV0dXJuIGhhc2hJbnRzQXJyYXkoW3IocDEueCksIHIocDEueSksIHIocDIueCksIHIocDIueSldKTtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gMDtcbiAgfVxufTtcbnZhciBjYWNoZWRCb3VuZGluZ0JveEltcGwgPSBmdW5jdGlvbiBjYWNoZWRCb3VuZGluZ0JveEltcGwoZWxlLCBvcHRzKSB7XG4gIHZhciBfcCA9IGVsZS5fcHJpdmF0ZTtcbiAgdmFyIGJiO1xuICB2YXIgaXNFZGdlID0gZWxlLmlzRWRnZSgpO1xuICB2YXIga2V5ID0gb3B0cyA9PSBudWxsID8gZGVmQmJPcHRzS2V5IDogZ2V0S2V5KG9wdHMpO1xuICB2YXIgdXNpbmdEZWZPcHRzID0ga2V5ID09PSBkZWZCYk9wdHNLZXk7XG4gIHZhciBjdXJyUG9zS2V5ID0gZ2V0Qm91bmRpbmdCb3hQb3NLZXkoZWxlKTtcbiAgdmFyIGlzUG9zS2V5U2FtZSA9IF9wLmJiQ2FjaGVQb3NLZXkgPT09IGN1cnJQb3NLZXk7XG4gIHZhciB1c2VDYWNoZSA9IG9wdHMudXNlQ2FjaGU7XG4gIHZhciBpc0RpcnR5ID0gZnVuY3Rpb24gaXNEaXJ0eShlbGUpIHtcbiAgICByZXR1cm4gZWxlLl9wcml2YXRlLmJiQ2FjaGUgPT0gbnVsbCB8fCBlbGUuX3ByaXZhdGUuc3R5bGVEaXJ0eTtcbiAgfTtcbiAgdmFyIG5lZWRSZWNhbGMgPSAhdXNlQ2FjaGUgfHwgaXNEaXJ0eShlbGUpIHx8IGlzRWRnZSAmJiAoaXNEaXJ0eShlbGUuc291cmNlKCkpIHx8IGlzRGlydHkoZWxlLnRhcmdldCgpKSk7XG4gIGlmIChuZWVkUmVjYWxjKSB7XG4gICAgaWYgKCFpc1Bvc0tleVNhbWUpIHtcbiAgICAgIGVsZS5yZWNhbGN1bGF0ZVJlbmRlcmVkU3R5bGUodXNlQ2FjaGUpO1xuICAgIH1cbiAgICBiYiA9IGJvdW5kaW5nQm94SW1wbChlbGUsIGRlZkJiT3B0cyk7XG4gICAgX3AuYmJDYWNoZSA9IGJiO1xuICAgIF9wLmJiQ2FjaGVQb3NLZXkgPSBjdXJyUG9zS2V5O1xuICB9IGVsc2Uge1xuICAgIGJiID0gX3AuYmJDYWNoZTtcbiAgfVxuXG4gIC8vIG5vdCB1c2luZyBkZWYgb3B0cyA9PiBuZWVkIHRvIGJ1aWxkIHVwIGJiIGZyb20gY29tYmluYXRpb24gb2Ygc3ViIGJic1xuICBpZiAoIXVzaW5nRGVmT3B0cykge1xuICAgIHZhciBpc05vZGUgPSBlbGUuaXNOb2RlKCk7XG4gICAgYmIgPSBtYWtlQm91bmRpbmdCb3goKTtcbiAgICBpZiAob3B0cy5pbmNsdWRlTm9kZXMgJiYgaXNOb2RlIHx8IG9wdHMuaW5jbHVkZUVkZ2VzICYmICFpc05vZGUpIHtcbiAgICAgIGlmIChvcHRzLmluY2x1ZGVPdmVybGF5cykge1xuICAgICAgICB1cGRhdGVCb3VuZHNGcm9tQm94KGJiLCBfcC5vdmVybGF5Qm91bmRzKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHVwZGF0ZUJvdW5kc0Zyb21Cb3goYmIsIF9wLmJvZHlCb3VuZHMpO1xuICAgICAgfVxuICAgIH1cbiAgICBpZiAob3B0cy5pbmNsdWRlTGFiZWxzKSB7XG4gICAgICBpZiAob3B0cy5pbmNsdWRlTWFpbkxhYmVscyAmJiAoIWlzRWRnZSB8fCBvcHRzLmluY2x1ZGVTb3VyY2VMYWJlbHMgJiYgb3B0cy5pbmNsdWRlVGFyZ2V0TGFiZWxzKSkge1xuICAgICAgICB1cGRhdGVCb3VuZHNGcm9tQm94KGJiLCBfcC5sYWJlbEJvdW5kcy5hbGwpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaWYgKG9wdHMuaW5jbHVkZU1haW5MYWJlbHMpIHtcbiAgICAgICAgICB1cGRhdGVCb3VuZHNGcm9tQm94KGJiLCBfcC5sYWJlbEJvdW5kcy5tYWluUm90KTtcbiAgICAgICAgfVxuICAgICAgICBpZiAob3B0cy5pbmNsdWRlU291cmNlTGFiZWxzKSB7XG4gICAgICAgICAgdXBkYXRlQm91bmRzRnJvbUJveChiYiwgX3AubGFiZWxCb3VuZHMuc291cmNlUm90KTtcbiAgICAgICAgfVxuICAgICAgICBpZiAob3B0cy5pbmNsdWRlVGFyZ2V0TGFiZWxzKSB7XG4gICAgICAgICAgdXBkYXRlQm91bmRzRnJvbUJveChiYiwgX3AubGFiZWxCb3VuZHMudGFyZ2V0Um90KTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICBiYi53ID0gYmIueDIgLSBiYi54MTtcbiAgICBiYi5oID0gYmIueTIgLSBiYi55MTtcbiAgfVxuICByZXR1cm4gYmI7XG59O1xudmFyIGRlZkJiT3B0cyA9IHtcbiAgaW5jbHVkZU5vZGVzOiB0cnVlLFxuICBpbmNsdWRlRWRnZXM6IHRydWUsXG4gIGluY2x1ZGVMYWJlbHM6IHRydWUsXG4gIGluY2x1ZGVNYWluTGFiZWxzOiB0cnVlLFxuICBpbmNsdWRlU291cmNlTGFiZWxzOiB0cnVlLFxuICBpbmNsdWRlVGFyZ2V0TGFiZWxzOiB0cnVlLFxuICBpbmNsdWRlT3ZlcmxheXM6IHRydWUsXG4gIGluY2x1ZGVVbmRlcmxheXM6IHRydWUsXG4gIGluY2x1ZGVPdXRsaW5lczogdHJ1ZSxcbiAgdXNlQ2FjaGU6IHRydWVcbn07XG52YXIgZGVmQmJPcHRzS2V5ID0gZ2V0S2V5KGRlZkJiT3B0cyk7XG52YXIgZmlsbGVkQmJPcHRzID0gZGVmYXVsdHMkZyhkZWZCYk9wdHMpO1xuZWxlc2ZuJGIuYm91bmRpbmdCb3ggPSBmdW5jdGlvbiAob3B0aW9ucykge1xuICB2YXIgYm91bmRzO1xuXG4gIC8vIHRoZSBtYWluIHVzZWNhc2UgaXMgZWxlLmJvdW5kaW5nQm94KCkgZm9yIGEgc2luZ2xlIGVsZW1lbnQgd2l0aCBuby9kZWYgb3B0aW9uc1xuICAvLyBzcGVjaWZpZWQgcy50LiB0aGUgY2FjaGUgaXMgdXNlZCwgc28gY2hlY2sgZm9yIHRoaXMgY2FzZSB0byBtYWtlIGl0IGZhc3RlciBieVxuICAvLyBhdm9pZGluZyB0aGUgb3ZlcmhlYWQgb2YgdGhlIHJlc3Qgb2YgdGhlIGZ1bmN0aW9uXG4gIGlmICh0aGlzLmxlbmd0aCA9PT0gMSAmJiB0aGlzWzBdLl9wcml2YXRlLmJiQ2FjaGUgIT0gbnVsbCAmJiAhdGhpc1swXS5fcHJpdmF0ZS5zdHlsZURpcnR5ICYmIChvcHRpb25zID09PSB1bmRlZmluZWQgfHwgb3B0aW9ucy51c2VDYWNoZSA9PT0gdW5kZWZpbmVkIHx8IG9wdGlvbnMudXNlQ2FjaGUgPT09IHRydWUpKSB7XG4gICAgaWYgKG9wdGlvbnMgPT09IHVuZGVmaW5lZCkge1xuICAgICAgb3B0aW9ucyA9IGRlZkJiT3B0cztcbiAgICB9IGVsc2Uge1xuICAgICAgb3B0aW9ucyA9IGZpbGxlZEJiT3B0cyhvcHRpb25zKTtcbiAgICB9XG4gICAgYm91bmRzID0gY2FjaGVkQm91bmRpbmdCb3hJbXBsKHRoaXNbMF0sIG9wdGlvbnMpO1xuICB9IGVsc2Uge1xuICAgIGJvdW5kcyA9IG1ha2VCb3VuZGluZ0JveCgpO1xuICAgIG9wdGlvbnMgPSBvcHRpb25zIHx8IGRlZkJiT3B0cztcbiAgICB2YXIgb3B0cyA9IGZpbGxlZEJiT3B0cyhvcHRpb25zKTtcbiAgICB2YXIgZWxlcyA9IHRoaXM7XG4gICAgdmFyIGN5ID0gZWxlcy5jeSgpO1xuICAgIHZhciBzdHlsZUVuYWJsZWQgPSBjeS5zdHlsZUVuYWJsZWQoKTtcbiAgICBpZiAoc3R5bGVFbmFibGVkKSB7XG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGVsZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgdmFyIGVsZSA9IGVsZXNbaV07XG4gICAgICAgIHZhciBfcCA9IGVsZS5fcHJpdmF0ZTtcbiAgICAgICAgdmFyIGN1cnJQb3NLZXkgPSBnZXRCb3VuZGluZ0JveFBvc0tleShlbGUpO1xuICAgICAgICB2YXIgaXNQb3NLZXlTYW1lID0gX3AuYmJDYWNoZVBvc0tleSA9PT0gY3VyclBvc0tleTtcbiAgICAgICAgdmFyIHVzZUNhY2hlID0gb3B0cy51c2VDYWNoZSAmJiBpc1Bvc0tleVNhbWUgJiYgIV9wLnN0eWxlRGlydHk7XG4gICAgICAgIGVsZS5yZWNhbGN1bGF0ZVJlbmRlcmVkU3R5bGUodXNlQ2FjaGUpO1xuICAgICAgfVxuICAgIH1cbiAgICB0aGlzLnVwZGF0ZUNvbXBvdW5kQm91bmRzKCFvcHRpb25zLnVzZUNhY2hlKTtcbiAgICBmb3IgKHZhciBfaSA9IDA7IF9pIDwgZWxlcy5sZW5ndGg7IF9pKyspIHtcbiAgICAgIHZhciBfZWxlID0gZWxlc1tfaV07XG4gICAgICB1cGRhdGVCb3VuZHNGcm9tQm94KGJvdW5kcywgY2FjaGVkQm91bmRpbmdCb3hJbXBsKF9lbGUsIG9wdHMpKTtcbiAgICB9XG4gIH1cbiAgYm91bmRzLngxID0gbm9uaW5mKGJvdW5kcy54MSk7XG4gIGJvdW5kcy55MSA9IG5vbmluZihib3VuZHMueTEpO1xuICBib3VuZHMueDIgPSBub25pbmYoYm91bmRzLngyKTtcbiAgYm91bmRzLnkyID0gbm9uaW5mKGJvdW5kcy55Mik7XG4gIGJvdW5kcy53ID0gbm9uaW5mKGJvdW5kcy54MiAtIGJvdW5kcy54MSk7XG4gIGJvdW5kcy5oID0gbm9uaW5mKGJvdW5kcy55MiAtIGJvdW5kcy55MSk7XG4gIHJldHVybiBib3VuZHM7XG59O1xuZWxlc2ZuJGIuZGlydHlCb3VuZGluZ0JveENhY2hlID0gZnVuY3Rpb24gKCkge1xuICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMubGVuZ3RoOyBpKyspIHtcbiAgICB2YXIgX3AgPSB0aGlzW2ldLl9wcml2YXRlO1xuICAgIF9wLmJiQ2FjaGUgPSBudWxsO1xuICAgIF9wLmJiQ2FjaGVQb3NLZXkgPSBudWxsO1xuICAgIF9wLmJvZHlCb3VuZHMgPSBudWxsO1xuICAgIF9wLm92ZXJsYXlCb3VuZHMgPSBudWxsO1xuICAgIF9wLmxhYmVsQm91bmRzLmFsbCA9IG51bGw7XG4gICAgX3AubGFiZWxCb3VuZHMuc291cmNlID0gbnVsbDtcbiAgICBfcC5sYWJlbEJvdW5kcy50YXJnZXQgPSBudWxsO1xuICAgIF9wLmxhYmVsQm91bmRzLm1haW4gPSBudWxsO1xuICAgIF9wLmxhYmVsQm91bmRzLnNvdXJjZVJvdCA9IG51bGw7XG4gICAgX3AubGFiZWxCb3VuZHMudGFyZ2V0Um90ID0gbnVsbDtcbiAgICBfcC5sYWJlbEJvdW5kcy5tYWluUm90ID0gbnVsbDtcbiAgICBfcC5hcnJvd0JvdW5kcy5zb3VyY2UgPSBudWxsO1xuICAgIF9wLmFycm93Qm91bmRzLnRhcmdldCA9IG51bGw7XG4gICAgX3AuYXJyb3dCb3VuZHNbJ21pZC1zb3VyY2UnXSA9IG51bGw7XG4gICAgX3AuYXJyb3dCb3VuZHNbJ21pZC10YXJnZXQnXSA9IG51bGw7XG4gIH1cbiAgdGhpcy5lbWl0QW5kTm90aWZ5KCdib3VuZHMnKTtcbiAgcmV0dXJuIHRoaXM7XG59O1xuXG4vLyBwcml2YXRlIGhlbHBlciB0byBnZXQgYm91bmRpbmcgYm94IGZvciBjdXN0b20gbm9kZSBwb3NpdGlvbnNcbi8vIC0gZ29vZCBmb3IgcGVyZiBpbiBjZXJ0YWluIGNhc2VzIGJ1dCBjdXJyZW50bHkgcmVxdWlyZXMgZGlydHlpbmcgdGhlIHJlbmRlcmVkIHN0eWxlXG4vLyAtIHdvdWxkIGJlIGJldHRlciB0byBub3QgbW9kaWZ5IHRoZSBub2RlcyBidXQgdGhlIG5vZGVzIGFyZSByZWFkIGRpcmVjdGx5IGV2ZXJ5d2hlcmUgaW4gdGhlIHJlbmRlcmVyLi4uXG4vLyAtIHRyeSB0byB1c2UgZm9yIG9ubHkgdGhpbmdzIGxpa2UgZGlzY3JldGUgbGF5b3V0cyB3aGVyZSB0aGUgbm9kZSBwb3NpdGlvbiB3b3VsZCBjaGFuZ2UgYW55d2F5XG5lbGVzZm4kYi5ib3VuZGluZ0JveEF0ID0gZnVuY3Rpb24gKGZuKSB7XG4gIHZhciBub2RlcyA9IHRoaXMubm9kZXMoKTtcbiAgdmFyIGN5ID0gdGhpcy5jeSgpO1xuICB2YXIgaGFzQ29tcG91bmROb2RlcyA9IGN5Lmhhc0NvbXBvdW5kTm9kZXMoKTtcbiAgdmFyIHBhcmVudHMgPSBjeS5jb2xsZWN0aW9uKCk7XG4gIGlmIChoYXNDb21wb3VuZE5vZGVzKSB7XG4gICAgcGFyZW50cyA9IG5vZGVzLmZpbHRlcihmdW5jdGlvbiAobm9kZSkge1xuICAgICAgcmV0dXJuIG5vZGUuaXNQYXJlbnQoKTtcbiAgICB9KTtcbiAgICBub2RlcyA9IG5vZGVzLm5vdChwYXJlbnRzKTtcbiAgfVxuICBpZiAocGxhaW5PYmplY3QoZm4pKSB7XG4gICAgdmFyIG9iaiA9IGZuO1xuICAgIGZuID0gZnVuY3Rpb24gZm4oKSB7XG4gICAgICByZXR1cm4gb2JqO1xuICAgIH07XG4gIH1cbiAgdmFyIHN0b3JlT2xkUG9zID0gZnVuY3Rpb24gc3RvcmVPbGRQb3Mobm9kZSwgaSkge1xuICAgIHJldHVybiBub2RlLl9wcml2YXRlLmJiQXRPbGRQb3MgPSBmbihub2RlLCBpKTtcbiAgfTtcbiAgdmFyIGdldE9sZFBvcyA9IGZ1bmN0aW9uIGdldE9sZFBvcyhub2RlKSB7XG4gICAgcmV0dXJuIG5vZGUuX3ByaXZhdGUuYmJBdE9sZFBvcztcbiAgfTtcbiAgY3kuc3RhcnRCYXRjaCgpO1xuICBub2Rlcy5mb3JFYWNoKHN0b3JlT2xkUG9zKS5zaWxlbnRQb3NpdGlvbnMoZm4pO1xuICBpZiAoaGFzQ29tcG91bmROb2Rlcykge1xuICAgIHBhcmVudHMuZGlydHlDb21wb3VuZEJvdW5kc0NhY2hlKCk7XG4gICAgcGFyZW50cy5kaXJ0eUJvdW5kaW5nQm94Q2FjaGUoKTtcbiAgICBwYXJlbnRzLnVwZGF0ZUNvbXBvdW5kQm91bmRzKHRydWUpOyAvLyBmb3JjZSB1cGRhdGUgYi9jIHdlJ3JlIGluc2lkZSBhIGJhdGNoIGN5Y2xlXG4gIH1cbiAgdmFyIGJiID0gY29weUJvdW5kaW5nQm94KHRoaXMuYm91bmRpbmdCb3goe1xuICAgIHVzZUNhY2hlOiBmYWxzZVxuICB9KSk7XG4gIG5vZGVzLnNpbGVudFBvc2l0aW9ucyhnZXRPbGRQb3MpO1xuICBpZiAoaGFzQ29tcG91bmROb2Rlcykge1xuICAgIHBhcmVudHMuZGlydHlDb21wb3VuZEJvdW5kc0NhY2hlKCk7XG4gICAgcGFyZW50cy5kaXJ0eUJvdW5kaW5nQm94Q2FjaGUoKTtcbiAgICBwYXJlbnRzLnVwZGF0ZUNvbXBvdW5kQm91bmRzKHRydWUpOyAvLyBmb3JjZSB1cGRhdGUgYi9jIHdlJ3JlIGluc2lkZSBhIGJhdGNoIGN5Y2xlXG4gIH1cbiAgY3kuZW5kQmF0Y2goKTtcbiAgcmV0dXJuIGJiO1xufTtcbmZuJDMuYm91bmRpbmdib3ggPSBmbiQzLmJiID0gZm4kMy5ib3VuZGluZ0JveDtcbmZuJDMucmVuZGVyZWRCb3VuZGluZ2JveCA9IGZuJDMucmVuZGVyZWRCb3VuZGluZ0JveDtcbnZhciBib3VuZHMgPSBlbGVzZm4kYjtcblxudmFyIGZuJDIsIGVsZXNmbiRhO1xuZm4kMiA9IGVsZXNmbiRhID0ge307XG52YXIgZGVmaW5lRGltRm5zID0gZnVuY3Rpb24gZGVmaW5lRGltRm5zKG9wdHMpIHtcbiAgb3B0cy51cHBlcmNhc2VOYW1lID0gY2FwaXRhbGl6ZShvcHRzLm5hbWUpO1xuICBvcHRzLmF1dG9OYW1lID0gJ2F1dG8nICsgb3B0cy51cHBlcmNhc2VOYW1lO1xuICBvcHRzLmxhYmVsTmFtZSA9ICdsYWJlbCcgKyBvcHRzLnVwcGVyY2FzZU5hbWU7XG4gIG9wdHMub3V0ZXJOYW1lID0gJ291dGVyJyArIG9wdHMudXBwZXJjYXNlTmFtZTtcbiAgb3B0cy51cHBlcmNhc2VPdXRlck5hbWUgPSBjYXBpdGFsaXplKG9wdHMub3V0ZXJOYW1lKTtcbiAgZm4kMltvcHRzLm5hbWVdID0gZnVuY3Rpb24gZGltSW1wbCgpIHtcbiAgICB2YXIgZWxlID0gdGhpc1swXTtcbiAgICB2YXIgX3AgPSBlbGUuX3ByaXZhdGU7XG4gICAgdmFyIGN5ID0gX3AuY3k7XG4gICAgdmFyIHN0eWxlRW5hYmxlZCA9IGN5Ll9wcml2YXRlLnN0eWxlRW5hYmxlZDtcbiAgICBpZiAoZWxlKSB7XG4gICAgICBpZiAoc3R5bGVFbmFibGVkKSB7XG4gICAgICAgIGlmIChlbGUuaXNQYXJlbnQoKSkge1xuICAgICAgICAgIGVsZS51cGRhdGVDb21wb3VuZEJvdW5kcygpO1xuICAgICAgICAgIHJldHVybiBfcFtvcHRzLmF1dG9OYW1lXSB8fCAwO1xuICAgICAgICB9XG4gICAgICAgIHZhciBkID0gZWxlLnBzdHlsZShvcHRzLm5hbWUpO1xuICAgICAgICBzd2l0Y2ggKGQuc3RyVmFsdWUpIHtcbiAgICAgICAgICBjYXNlICdsYWJlbCc6XG4gICAgICAgICAgICBlbGUucmVjYWxjdWxhdGVSZW5kZXJlZFN0eWxlKCk7XG4gICAgICAgICAgICByZXR1cm4gX3AucnN0eWxlW29wdHMubGFiZWxOYW1lXSB8fCAwO1xuICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICByZXR1cm4gZC5wZlZhbHVlO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gMTtcbiAgICAgIH1cbiAgICB9XG4gIH07XG4gIGZuJDJbJ291dGVyJyArIG9wdHMudXBwZXJjYXNlTmFtZV0gPSBmdW5jdGlvbiBvdXRlckRpbUltcGwoKSB7XG4gICAgdmFyIGVsZSA9IHRoaXNbMF07XG4gICAgdmFyIF9wID0gZWxlLl9wcml2YXRlO1xuICAgIHZhciBjeSA9IF9wLmN5O1xuICAgIHZhciBzdHlsZUVuYWJsZWQgPSBjeS5fcHJpdmF0ZS5zdHlsZUVuYWJsZWQ7XG4gICAgaWYgKGVsZSkge1xuICAgICAgaWYgKHN0eWxlRW5hYmxlZCkge1xuICAgICAgICB2YXIgZGltID0gZWxlW29wdHMubmFtZV0oKTtcbiAgICAgICAgdmFyIGJvcmRlciA9IGVsZS5wc3R5bGUoJ2JvcmRlci13aWR0aCcpLnBmVmFsdWU7IC8vIG4uYi4gMS8yIGVhY2ggc2lkZVxuICAgICAgICB2YXIgcGFkZGluZyA9IDIgKiBlbGUucGFkZGluZygpO1xuICAgICAgICByZXR1cm4gZGltICsgYm9yZGVyICsgcGFkZGluZztcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiAxO1xuICAgICAgfVxuICAgIH1cbiAgfTtcbiAgZm4kMlsncmVuZGVyZWQnICsgb3B0cy51cHBlcmNhc2VOYW1lXSA9IGZ1bmN0aW9uIHJlbmRlcmVkRGltSW1wbCgpIHtcbiAgICB2YXIgZWxlID0gdGhpc1swXTtcbiAgICBpZiAoZWxlKSB7XG4gICAgICB2YXIgZCA9IGVsZVtvcHRzLm5hbWVdKCk7XG4gICAgICByZXR1cm4gZCAqIHRoaXMuY3koKS56b29tKCk7XG4gICAgfVxuICB9O1xuICBmbiQyWydyZW5kZXJlZCcgKyBvcHRzLnVwcGVyY2FzZU91dGVyTmFtZV0gPSBmdW5jdGlvbiByZW5kZXJlZE91dGVyRGltSW1wbCgpIHtcbiAgICB2YXIgZWxlID0gdGhpc1swXTtcbiAgICBpZiAoZWxlKSB7XG4gICAgICB2YXIgb2QgPSBlbGVbb3B0cy5vdXRlck5hbWVdKCk7XG4gICAgICByZXR1cm4gb2QgKiB0aGlzLmN5KCkuem9vbSgpO1xuICAgIH1cbiAgfTtcbn07XG5kZWZpbmVEaW1GbnMoe1xuICBuYW1lOiAnd2lkdGgnXG59KTtcbmRlZmluZURpbUZucyh7XG4gIG5hbWU6ICdoZWlnaHQnXG59KTtcbmVsZXNmbiRhLnBhZGRpbmcgPSBmdW5jdGlvbiAoKSB7XG4gIHZhciBlbGUgPSB0aGlzWzBdO1xuICB2YXIgX3AgPSBlbGUuX3ByaXZhdGU7XG4gIGlmIChlbGUuaXNQYXJlbnQoKSkge1xuICAgIGVsZS51cGRhdGVDb21wb3VuZEJvdW5kcygpO1xuICAgIGlmIChfcC5hdXRvUGFkZGluZyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICByZXR1cm4gX3AuYXV0b1BhZGRpbmc7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBlbGUucHN0eWxlKCdwYWRkaW5nJykucGZWYWx1ZTtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIGVsZS5wc3R5bGUoJ3BhZGRpbmcnKS5wZlZhbHVlO1xuICB9XG59O1xuZWxlc2ZuJGEucGFkZGVkSGVpZ2h0ID0gZnVuY3Rpb24gKCkge1xuICB2YXIgZWxlID0gdGhpc1swXTtcbiAgcmV0dXJuIGVsZS5oZWlnaHQoKSArIDIgKiBlbGUucGFkZGluZygpO1xufTtcbmVsZXNmbiRhLnBhZGRlZFdpZHRoID0gZnVuY3Rpb24gKCkge1xuICB2YXIgZWxlID0gdGhpc1swXTtcbiAgcmV0dXJuIGVsZS53aWR0aCgpICsgMiAqIGVsZS5wYWRkaW5nKCk7XG59O1xudmFyIHdpZHRoSGVpZ2h0ID0gZWxlc2ZuJGE7XG5cbnZhciBpZkVkZ2UgPSBmdW5jdGlvbiBpZkVkZ2UoZWxlLCBnZXRWYWx1ZSkge1xuICBpZiAoZWxlLmlzRWRnZSgpICYmIGVsZS50YWtlc1VwU3BhY2UoKSkge1xuICAgIHJldHVybiBnZXRWYWx1ZShlbGUpO1xuICB9XG59O1xudmFyIGlmRWRnZVJlbmRlcmVkUG9zaXRpb24gPSBmdW5jdGlvbiBpZkVkZ2VSZW5kZXJlZFBvc2l0aW9uKGVsZSwgZ2V0UG9pbnQpIHtcbiAgaWYgKGVsZS5pc0VkZ2UoKSAmJiBlbGUudGFrZXNVcFNwYWNlKCkpIHtcbiAgICB2YXIgY3kgPSBlbGUuY3koKTtcbiAgICByZXR1cm4gbW9kZWxUb1JlbmRlcmVkUG9zaXRpb24kMShnZXRQb2ludChlbGUpLCBjeS56b29tKCksIGN5LnBhbigpKTtcbiAgfVxufTtcbnZhciBpZkVkZ2VSZW5kZXJlZFBvc2l0aW9ucyA9IGZ1bmN0aW9uIGlmRWRnZVJlbmRlcmVkUG9zaXRpb25zKGVsZSwgZ2V0UG9pbnRzKSB7XG4gIGlmIChlbGUuaXNFZGdlKCkgJiYgZWxlLnRha2VzVXBTcGFjZSgpKSB7XG4gICAgdmFyIGN5ID0gZWxlLmN5KCk7XG4gICAgdmFyIHBhbiA9IGN5LnBhbigpO1xuICAgIHZhciB6b29tID0gY3kuem9vbSgpO1xuICAgIHJldHVybiBnZXRQb2ludHMoZWxlKS5tYXAoZnVuY3Rpb24gKHApIHtcbiAgICAgIHJldHVybiBtb2RlbFRvUmVuZGVyZWRQb3NpdGlvbiQxKHAsIHpvb20sIHBhbik7XG4gICAgfSk7XG4gIH1cbn07XG52YXIgY29udHJvbFBvaW50cyA9IGZ1bmN0aW9uIGNvbnRyb2xQb2ludHMoZWxlKSB7XG4gIHJldHVybiBlbGUucmVuZGVyZXIoKS5nZXRDb250cm9sUG9pbnRzKGVsZSk7XG59O1xudmFyIHNlZ21lbnRQb2ludHMgPSBmdW5jdGlvbiBzZWdtZW50UG9pbnRzKGVsZSkge1xuICByZXR1cm4gZWxlLnJlbmRlcmVyKCkuZ2V0U2VnbWVudFBvaW50cyhlbGUpO1xufTtcbnZhciBzb3VyY2VFbmRwb2ludCA9IGZ1bmN0aW9uIHNvdXJjZUVuZHBvaW50KGVsZSkge1xuICByZXR1cm4gZWxlLnJlbmRlcmVyKCkuZ2V0U291cmNlRW5kcG9pbnQoZWxlKTtcbn07XG52YXIgdGFyZ2V0RW5kcG9pbnQgPSBmdW5jdGlvbiB0YXJnZXRFbmRwb2ludChlbGUpIHtcbiAgcmV0dXJuIGVsZS5yZW5kZXJlcigpLmdldFRhcmdldEVuZHBvaW50KGVsZSk7XG59O1xudmFyIG1pZHBvaW50ID0gZnVuY3Rpb24gbWlkcG9pbnQoZWxlKSB7XG4gIHJldHVybiBlbGUucmVuZGVyZXIoKS5nZXRFZGdlTWlkcG9pbnQoZWxlKTtcbn07XG52YXIgcHRzID0ge1xuICBjb250cm9sUG9pbnRzOiB7XG4gICAgZ2V0OiBjb250cm9sUG9pbnRzLFxuICAgIG11bHQ6IHRydWVcbiAgfSxcbiAgc2VnbWVudFBvaW50czoge1xuICAgIGdldDogc2VnbWVudFBvaW50cyxcbiAgICBtdWx0OiB0cnVlXG4gIH0sXG4gIHNvdXJjZUVuZHBvaW50OiB7XG4gICAgZ2V0OiBzb3VyY2VFbmRwb2ludFxuICB9LFxuICB0YXJnZXRFbmRwb2ludDoge1xuICAgIGdldDogdGFyZ2V0RW5kcG9pbnRcbiAgfSxcbiAgbWlkcG9pbnQ6IHtcbiAgICBnZXQ6IG1pZHBvaW50XG4gIH1cbn07XG52YXIgcmVuZGVyZWROYW1lID0gZnVuY3Rpb24gcmVuZGVyZWROYW1lKG5hbWUpIHtcbiAgcmV0dXJuICdyZW5kZXJlZCcgKyBuYW1lWzBdLnRvVXBwZXJDYXNlKCkgKyBuYW1lLnN1YnN0cigxKTtcbn07XG52YXIgZWRnZVBvaW50cyA9IE9iamVjdC5rZXlzKHB0cykucmVkdWNlKGZ1bmN0aW9uIChvYmosIG5hbWUpIHtcbiAgdmFyIHNwZWMgPSBwdHNbbmFtZV07XG4gIHZhciByTmFtZSA9IHJlbmRlcmVkTmFtZShuYW1lKTtcbiAgb2JqW25hbWVdID0gZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiBpZkVkZ2UodGhpcywgc3BlYy5nZXQpO1xuICB9O1xuICBpZiAoc3BlYy5tdWx0KSB7XG4gICAgb2JqW3JOYW1lXSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIHJldHVybiBpZkVkZ2VSZW5kZXJlZFBvc2l0aW9ucyh0aGlzLCBzcGVjLmdldCk7XG4gICAgfTtcbiAgfSBlbHNlIHtcbiAgICBvYmpbck5hbWVdID0gZnVuY3Rpb24gKCkge1xuICAgICAgcmV0dXJuIGlmRWRnZVJlbmRlcmVkUG9zaXRpb24odGhpcywgc3BlYy5nZXQpO1xuICAgIH07XG4gIH1cbiAgcmV0dXJuIG9iajtcbn0sIHt9KTtcblxudmFyIGRpbWVuc2lvbnMgPSBleHRlbmQoe30sIHBvc2l0aW9uLCBib3VuZHMsIHdpZHRoSGVpZ2h0LCBlZGdlUG9pbnRzKTtcblxuLyohXG5FdmVudCBvYmplY3QgYmFzZWQgb24galF1ZXJ5IGV2ZW50cywgTUlUIGxpY2Vuc2VcblxuaHR0cHM6Ly9qcXVlcnkub3JnL2xpY2Vuc2UvXG5odHRwczovL3RsZHJsZWdhbC5jb20vbGljZW5zZS9taXQtbGljZW5zZVxuaHR0cHM6Ly9naXRodWIuY29tL2pxdWVyeS9qcXVlcnkvYmxvYi9tYXN0ZXIvc3JjL2V2ZW50LmpzXG4qL1xuXG52YXIgRXZlbnQgPSBmdW5jdGlvbiBFdmVudChzcmMsIHByb3BzKSB7XG4gIHRoaXMucmVjeWNsZShzcmMsIHByb3BzKTtcbn07XG5mdW5jdGlvbiByZXR1cm5GYWxzZSgpIHtcbiAgcmV0dXJuIGZhbHNlO1xufVxuZnVuY3Rpb24gcmV0dXJuVHJ1ZSgpIHtcbiAgcmV0dXJuIHRydWU7XG59XG5cbi8vIGh0dHA6Ly93d3cudzMub3JnL1RSLzIwMDMvV0QtRE9NLUxldmVsLTMtRXZlbnRzLTIwMDMwMzMxL2VjbWEtc2NyaXB0LWJpbmRpbmcuaHRtbFxuRXZlbnQucHJvdG90eXBlID0ge1xuICBpbnN0YW5jZVN0cmluZzogZnVuY3Rpb24gaW5zdGFuY2VTdHJpbmcoKSB7XG4gICAgcmV0dXJuICdldmVudCc7XG4gIH0sXG4gIHJlY3ljbGU6IGZ1bmN0aW9uIHJlY3ljbGUoc3JjLCBwcm9wcykge1xuICAgIHRoaXMuaXNJbW1lZGlhdGVQcm9wYWdhdGlvblN0b3BwZWQgPSB0aGlzLmlzUHJvcGFnYXRpb25TdG9wcGVkID0gdGhpcy5pc0RlZmF1bHRQcmV2ZW50ZWQgPSByZXR1cm5GYWxzZTtcbiAgICBpZiAoc3JjICE9IG51bGwgJiYgc3JjLnByZXZlbnREZWZhdWx0KSB7XG4gICAgICAvLyBCcm93c2VyIEV2ZW50IG9iamVjdFxuICAgICAgdGhpcy50eXBlID0gc3JjLnR5cGU7XG5cbiAgICAgIC8vIEV2ZW50cyBidWJibGluZyB1cCB0aGUgZG9jdW1lbnQgbWF5IGhhdmUgYmVlbiBtYXJrZWQgYXMgcHJldmVudGVkXG4gICAgICAvLyBieSBhIGhhbmRsZXIgbG93ZXIgZG93biB0aGUgdHJlZTsgcmVmbGVjdCB0aGUgY29ycmVjdCB2YWx1ZS5cbiAgICAgIHRoaXMuaXNEZWZhdWx0UHJldmVudGVkID0gc3JjLmRlZmF1bHRQcmV2ZW50ZWQgPyByZXR1cm5UcnVlIDogcmV0dXJuRmFsc2U7XG4gICAgfSBlbHNlIGlmIChzcmMgIT0gbnVsbCAmJiBzcmMudHlwZSkge1xuICAgICAgLy8gUGxhaW4gb2JqZWN0IGNvbnRhaW5pbmcgYWxsIGV2ZW50IGRldGFpbHNcbiAgICAgIHByb3BzID0gc3JjO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBFdmVudCBzdHJpbmdcbiAgICAgIHRoaXMudHlwZSA9IHNyYztcbiAgICB9XG5cbiAgICAvLyBQdXQgZXhwbGljaXRseSBwcm92aWRlZCBwcm9wZXJ0aWVzIG9udG8gdGhlIGV2ZW50IG9iamVjdFxuICAgIGlmIChwcm9wcyAhPSBudWxsKSB7XG4gICAgICAvLyBtb3JlIGVmZmljaWVudCB0byBtYW51YWxseSBjb3B5IGZpZWxkcyB3ZSB1c2VcbiAgICAgIHRoaXMub3JpZ2luYWxFdmVudCA9IHByb3BzLm9yaWdpbmFsRXZlbnQ7XG4gICAgICB0aGlzLnR5cGUgPSBwcm9wcy50eXBlICE9IG51bGwgPyBwcm9wcy50eXBlIDogdGhpcy50eXBlO1xuICAgICAgdGhpcy5jeSA9IHByb3BzLmN5O1xuICAgICAgdGhpcy50YXJnZXQgPSBwcm9wcy50YXJnZXQ7XG4gICAgICB0aGlzLnBvc2l0aW9uID0gcHJvcHMucG9zaXRpb247XG4gICAgICB0aGlzLnJlbmRlcmVkUG9zaXRpb24gPSBwcm9wcy5yZW5kZXJlZFBvc2l0aW9uO1xuICAgICAgdGhpcy5uYW1lc3BhY2UgPSBwcm9wcy5uYW1lc3BhY2U7XG4gICAgICB0aGlzLmxheW91dCA9IHByb3BzLmxheW91dDtcbiAgICB9XG4gICAgaWYgKHRoaXMuY3kgIT0gbnVsbCAmJiB0aGlzLnBvc2l0aW9uICE9IG51bGwgJiYgdGhpcy5yZW5kZXJlZFBvc2l0aW9uID09IG51bGwpIHtcbiAgICAgIC8vIGNyZWF0ZSBhIHJlbmRlcmVkIHBvc2l0aW9uIGJhc2VkIG9uIHRoZSBwYXNzZWQgcG9zaXRpb25cbiAgICAgIHZhciBwb3MgPSB0aGlzLnBvc2l0aW9uO1xuICAgICAgdmFyIHpvb20gPSB0aGlzLmN5Lnpvb20oKTtcbiAgICAgIHZhciBwYW4gPSB0aGlzLmN5LnBhbigpO1xuICAgICAgdGhpcy5yZW5kZXJlZFBvc2l0aW9uID0ge1xuICAgICAgICB4OiBwb3MueCAqIHpvb20gKyBwYW4ueCxcbiAgICAgICAgeTogcG9zLnkgKiB6b29tICsgcGFuLnlcbiAgICAgIH07XG4gICAgfVxuXG4gICAgLy8gQ3JlYXRlIGEgdGltZXN0YW1wIGlmIGluY29taW5nIGV2ZW50IGRvZXNuJ3QgaGF2ZSBvbmVcbiAgICB0aGlzLnRpbWVTdGFtcCA9IHNyYyAmJiBzcmMudGltZVN0YW1wIHx8IERhdGUubm93KCk7XG4gIH0sXG4gIHByZXZlbnREZWZhdWx0OiBmdW5jdGlvbiBwcmV2ZW50RGVmYXVsdCgpIHtcbiAgICB0aGlzLmlzRGVmYXVsdFByZXZlbnRlZCA9IHJldHVyblRydWU7XG4gICAgdmFyIGUgPSB0aGlzLm9yaWdpbmFsRXZlbnQ7XG4gICAgaWYgKCFlKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8gaWYgcHJldmVudERlZmF1bHQgZXhpc3RzIHJ1biBpdCBvbiB0aGUgb3JpZ2luYWwgZXZlbnRcbiAgICBpZiAoZS5wcmV2ZW50RGVmYXVsdCkge1xuICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIH1cbiAgfSxcbiAgc3RvcFByb3BhZ2F0aW9uOiBmdW5jdGlvbiBzdG9wUHJvcGFnYXRpb24oKSB7XG4gICAgdGhpcy5pc1Byb3BhZ2F0aW9uU3RvcHBlZCA9IHJldHVyblRydWU7XG4gICAgdmFyIGUgPSB0aGlzLm9yaWdpbmFsRXZlbnQ7XG4gICAgaWYgKCFlKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8gaWYgc3RvcFByb3BhZ2F0aW9uIGV4aXN0cyBydW4gaXQgb24gdGhlIG9yaWdpbmFsIGV2ZW50XG4gICAgaWYgKGUuc3RvcFByb3BhZ2F0aW9uKSB7XG4gICAgICBlLnN0b3BQcm9wYWdhdGlvbigpO1xuICAgIH1cbiAgfSxcbiAgc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uOiBmdW5jdGlvbiBzdG9wSW1tZWRpYXRlUHJvcGFnYXRpb24oKSB7XG4gICAgdGhpcy5pc0ltbWVkaWF0ZVByb3BhZ2F0aW9uU3RvcHBlZCA9IHJldHVyblRydWU7XG4gICAgdGhpcy5zdG9wUHJvcGFnYXRpb24oKTtcbiAgfSxcbiAgaXNEZWZhdWx0UHJldmVudGVkOiByZXR1cm5GYWxzZSxcbiAgaXNQcm9wYWdhdGlvblN0b3BwZWQ6IHJldHVybkZhbHNlLFxuICBpc0ltbWVkaWF0ZVByb3BhZ2F0aW9uU3RvcHBlZDogcmV0dXJuRmFsc2Vcbn07XG5cbnZhciBldmVudFJlZ2V4ID0gL14oW14uXSspKFxcLig/OlteLl0rKSk/JC87IC8vIHJlZ2V4IGZvciBtYXRjaGluZyBldmVudCBzdHJpbmdzIChlLmcuIFwiY2xpY2submFtZXNwYWNlXCIpXG52YXIgdW5pdmVyc2FsTmFtZXNwYWNlID0gJy4qJzsgLy8gbWF0Y2hlcyBhcyBpZiBubyBuYW1lc3BhY2Ugc3BlY2lmaWVkIGFuZCBwcmV2ZW50cyB1c2VycyBmcm9tIHVuYmluZGluZyBhY2NpZGVudGFsbHlcblxudmFyIGRlZmF1bHRzJDggPSB7XG4gIHF1YWxpZmllckNvbXBhcmU6IGZ1bmN0aW9uIHF1YWxpZmllckNvbXBhcmUocTEsIHEyKSB7XG4gICAgcmV0dXJuIHExID09PSBxMjtcbiAgfSxcbiAgZXZlbnRNYXRjaGVzOiBmdW5jdGlvbiBldmVudE1hdGNoZXMoLypjb250ZXh0LCBsaXN0ZW5lciwgZXZlbnRPYmoqL1xuICApIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfSxcbiAgYWRkRXZlbnRGaWVsZHM6IGZ1bmN0aW9uIGFkZEV2ZW50RmllbGRzKC8qY29udGV4dCwgZXZ0Ki9cbiAgKSB7fSxcbiAgY2FsbGJhY2tDb250ZXh0OiBmdW5jdGlvbiBjYWxsYmFja0NvbnRleHQoY29udGV4dCAvKiwgbGlzdGVuZXIsIGV2ZW50T2JqKi8pIHtcbiAgICByZXR1cm4gY29udGV4dDtcbiAgfSxcbiAgYmVmb3JlRW1pdDogZnVuY3Rpb24gYmVmb3JlRW1pdCgvKiBjb250ZXh0LCBsaXN0ZW5lciwgZXZlbnRPYmogKi9cbiAgKSB7fSxcbiAgYWZ0ZXJFbWl0OiBmdW5jdGlvbiBhZnRlckVtaXQoLyogY29udGV4dCwgbGlzdGVuZXIsIGV2ZW50T2JqICovXG4gICkge30sXG4gIGJ1YmJsZTogZnVuY3Rpb24gYnViYmxlKC8qY29udGV4dCovXG4gICkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfSxcbiAgcGFyZW50OiBmdW5jdGlvbiBwYXJlbnQoLypjb250ZXh0Ki9cbiAgKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH0sXG4gIGNvbnRleHQ6IG51bGxcbn07XG52YXIgZGVmYXVsdHNLZXlzID0gT2JqZWN0LmtleXMoZGVmYXVsdHMkOCk7XG52YXIgZW1wdHlPcHRzID0ge307XG5mdW5jdGlvbiBFbWl0dGVyKCkge1xuICB2YXIgb3B0cyA9IGFyZ3VtZW50cy5sZW5ndGggPiAwICYmIGFyZ3VtZW50c1swXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzBdIDogZW1wdHlPcHRzO1xuICB2YXIgY29udGV4dCA9IGFyZ3VtZW50cy5sZW5ndGggPiAxID8gYXJndW1lbnRzWzFdIDogdW5kZWZpbmVkO1xuICAvLyBtaWNyby1vcHRpbWlzYXRpb24gdnMgT2JqZWN0LmFzc2lnbigpIC0tIHJlZHVjZXMgRWxlbWVudCBpbnN0YW50aWF0aW9uIHRpbWVcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBkZWZhdWx0c0tleXMubGVuZ3RoOyBpKyspIHtcbiAgICB2YXIga2V5ID0gZGVmYXVsdHNLZXlzW2ldO1xuICAgIHRoaXNba2V5XSA9IG9wdHNba2V5XSB8fCBkZWZhdWx0cyQ4W2tleV07XG4gIH1cbiAgdGhpcy5jb250ZXh0ID0gY29udGV4dCB8fCB0aGlzLmNvbnRleHQ7XG4gIHRoaXMubGlzdGVuZXJzID0gW107XG4gIHRoaXMuZW1pdHRpbmcgPSAwO1xufVxudmFyIHAgPSBFbWl0dGVyLnByb3RvdHlwZTtcbnZhciBmb3JFYWNoRXZlbnQgPSBmdW5jdGlvbiBmb3JFYWNoRXZlbnQoc2VsZiwgaGFuZGxlciwgZXZlbnRzLCBxdWFsaWZpZXIsIGNhbGxiYWNrLCBjb25mLCBjb25mT3ZlcnJpZGVzKSB7XG4gIGlmIChmbiQ2KHF1YWxpZmllcikpIHtcbiAgICBjYWxsYmFjayA9IHF1YWxpZmllcjtcbiAgICBxdWFsaWZpZXIgPSBudWxsO1xuICB9XG4gIGlmIChjb25mT3ZlcnJpZGVzKSB7XG4gICAgaWYgKGNvbmYgPT0gbnVsbCkge1xuICAgICAgY29uZiA9IGNvbmZPdmVycmlkZXM7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbmYgPSBleHRlbmQoe30sIGNvbmYsIGNvbmZPdmVycmlkZXMpO1xuICAgIH1cbiAgfVxuICB2YXIgZXZlbnRMaXN0ID0gYXJyYXkoZXZlbnRzKSA/IGV2ZW50cyA6IGV2ZW50cy5zcGxpdCgvXFxzKy8pO1xuICBmb3IgKHZhciBpID0gMDsgaSA8IGV2ZW50TGlzdC5sZW5ndGg7IGkrKykge1xuICAgIHZhciBldnQgPSBldmVudExpc3RbaV07XG4gICAgaWYgKGVtcHR5U3RyaW5nKGV2dCkpIHtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cbiAgICB2YXIgbWF0Y2ggPSBldnQubWF0Y2goZXZlbnRSZWdleCk7IC8vIHR5cGVbLm5hbWVzcGFjZV1cblxuICAgIGlmIChtYXRjaCkge1xuICAgICAgdmFyIHR5cGUgPSBtYXRjaFsxXTtcbiAgICAgIHZhciBuYW1lc3BhY2UgPSBtYXRjaFsyXSA/IG1hdGNoWzJdIDogbnVsbDtcbiAgICAgIHZhciByZXQgPSBoYW5kbGVyKHNlbGYsIGV2dCwgdHlwZSwgbmFtZXNwYWNlLCBxdWFsaWZpZXIsIGNhbGxiYWNrLCBjb25mKTtcbiAgICAgIGlmIChyZXQgPT09IGZhbHNlKSB7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfSAvLyBhbGxvdyBleGl0aW5nIGVhcmx5XG4gICAgfVxuICB9XG59O1xudmFyIG1ha2VFdmVudE9iaiA9IGZ1bmN0aW9uIG1ha2VFdmVudE9iaihzZWxmLCBvYmopIHtcbiAgc2VsZi5hZGRFdmVudEZpZWxkcyhzZWxmLmNvbnRleHQsIG9iaik7XG4gIHJldHVybiBuZXcgRXZlbnQob2JqLnR5cGUsIG9iaik7XG59O1xudmFyIGZvckVhY2hFdmVudE9iaiA9IGZ1bmN0aW9uIGZvckVhY2hFdmVudE9iaihzZWxmLCBoYW5kbGVyLCBldmVudHMpIHtcbiAgaWYgKGV2ZW50KGV2ZW50cykpIHtcbiAgICBoYW5kbGVyKHNlbGYsIGV2ZW50cyk7XG4gICAgcmV0dXJuO1xuICB9IGVsc2UgaWYgKHBsYWluT2JqZWN0KGV2ZW50cykpIHtcbiAgICBoYW5kbGVyKHNlbGYsIG1ha2VFdmVudE9iaihzZWxmLCBldmVudHMpKTtcbiAgICByZXR1cm47XG4gIH1cbiAgdmFyIGV2ZW50TGlzdCA9IGFycmF5KGV2ZW50cykgPyBldmVudHMgOiBldmVudHMuc3BsaXQoL1xccysvKTtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBldmVudExpc3QubGVuZ3RoOyBpKyspIHtcbiAgICB2YXIgZXZ0ID0gZXZlbnRMaXN0W2ldO1xuICAgIGlmIChlbXB0eVN0cmluZyhldnQpKSB7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG4gICAgdmFyIG1hdGNoID0gZXZ0Lm1hdGNoKGV2ZW50UmVnZXgpOyAvLyB0eXBlWy5uYW1lc3BhY2VdXG5cbiAgICBpZiAobWF0Y2gpIHtcbiAgICAgIHZhciB0eXBlID0gbWF0Y2hbMV07XG4gICAgICB2YXIgbmFtZXNwYWNlID0gbWF0Y2hbMl0gPyBtYXRjaFsyXSA6IG51bGw7XG4gICAgICB2YXIgZXZlbnRPYmogPSBtYWtlRXZlbnRPYmooc2VsZiwge1xuICAgICAgICB0eXBlOiB0eXBlLFxuICAgICAgICBuYW1lc3BhY2U6IG5hbWVzcGFjZSxcbiAgICAgICAgdGFyZ2V0OiBzZWxmLmNvbnRleHRcbiAgICAgIH0pO1xuICAgICAgaGFuZGxlcihzZWxmLCBldmVudE9iaik7XG4gICAgfVxuICB9XG59O1xucC5vbiA9IHAuYWRkTGlzdGVuZXIgPSBmdW5jdGlvbiAoZXZlbnRzLCBxdWFsaWZpZXIsIGNhbGxiYWNrLCBjb25mLCBjb25mT3ZlcnJpZGVzKSB7XG4gIGZvckVhY2hFdmVudCh0aGlzLCBmdW5jdGlvbiAoc2VsZiwgZXZlbnQsIHR5cGUsIG5hbWVzcGFjZSwgcXVhbGlmaWVyLCBjYWxsYmFjaywgY29uZikge1xuICAgIGlmIChmbiQ2KGNhbGxiYWNrKSkge1xuICAgICAgc2VsZi5saXN0ZW5lcnMucHVzaCh7XG4gICAgICAgIGV2ZW50OiBldmVudCxcbiAgICAgICAgLy8gZnVsbCBldmVudCBzdHJpbmdcbiAgICAgICAgY2FsbGJhY2s6IGNhbGxiYWNrLFxuICAgICAgICAvLyBjYWxsYmFjayB0byBydW5cbiAgICAgICAgdHlwZTogdHlwZSxcbiAgICAgICAgLy8gdGhlIGV2ZW50IHR5cGUgKGUuZy4gJ2NsaWNrJylcbiAgICAgICAgbmFtZXNwYWNlOiBuYW1lc3BhY2UsXG4gICAgICAgIC8vIHRoZSBldmVudCBuYW1lc3BhY2UgKGUuZy4gXCIuZm9vXCIpXG4gICAgICAgIHF1YWxpZmllcjogcXVhbGlmaWVyLFxuICAgICAgICAvLyBhIHJlc3RyaWN0aW9uIG9uIHdoZXRoZXIgdG8gbWF0Y2ggdGhpcyBlbWl0dGVyXG4gICAgICAgIGNvbmY6IGNvbmYgLy8gYWRkaXRpb25hbCBjb25maWd1cmF0aW9uXG4gICAgICB9KTtcbiAgICB9XG4gIH0sIGV2ZW50cywgcXVhbGlmaWVyLCBjYWxsYmFjaywgY29uZiwgY29uZk92ZXJyaWRlcyk7XG4gIHJldHVybiB0aGlzO1xufTtcbnAub25lID0gZnVuY3Rpb24gKGV2ZW50cywgcXVhbGlmaWVyLCBjYWxsYmFjaywgY29uZikge1xuICByZXR1cm4gdGhpcy5vbihldmVudHMsIHF1YWxpZmllciwgY2FsbGJhY2ssIGNvbmYsIHtcbiAgICBvbmU6IHRydWVcbiAgfSk7XG59O1xucC5yZW1vdmVMaXN0ZW5lciA9IHAub2ZmID0gZnVuY3Rpb24gKGV2ZW50cywgcXVhbGlmaWVyLCBjYWxsYmFjaywgY29uZikge1xuICB2YXIgX3RoaXMgPSB0aGlzO1xuICBpZiAodGhpcy5lbWl0dGluZyAhPT0gMCkge1xuICAgIHRoaXMubGlzdGVuZXJzID0gY29weUFycmF5KHRoaXMubGlzdGVuZXJzKTtcbiAgfVxuICB2YXIgbGlzdGVuZXJzID0gdGhpcy5saXN0ZW5lcnM7XG4gIHZhciBfbG9vcCA9IGZ1bmN0aW9uIF9sb29wKGkpIHtcbiAgICB2YXIgbGlzdGVuZXIgPSBsaXN0ZW5lcnNbaV07XG4gICAgZm9yRWFjaEV2ZW50KF90aGlzLCBmdW5jdGlvbiAoc2VsZiwgZXZlbnQsIHR5cGUsIG5hbWVzcGFjZSwgcXVhbGlmaWVyLCBjYWxsYmFjayAvKiwgY29uZiovKSB7XG4gICAgICBpZiAoKGxpc3RlbmVyLnR5cGUgPT09IHR5cGUgfHwgZXZlbnRzID09PSAnKicpICYmICghbmFtZXNwYWNlICYmIGxpc3RlbmVyLm5hbWVzcGFjZSAhPT0gJy4qJyB8fCBsaXN0ZW5lci5uYW1lc3BhY2UgPT09IG5hbWVzcGFjZSkgJiYgKCFxdWFsaWZpZXIgfHwgc2VsZi5xdWFsaWZpZXJDb21wYXJlKGxpc3RlbmVyLnF1YWxpZmllciwgcXVhbGlmaWVyKSkgJiYgKCFjYWxsYmFjayB8fCBsaXN0ZW5lci5jYWxsYmFjayA9PT0gY2FsbGJhY2spKSB7XG4gICAgICAgIGxpc3RlbmVycy5zcGxpY2UoaSwgMSk7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICB9LCBldmVudHMsIHF1YWxpZmllciwgY2FsbGJhY2ssIGNvbmYpO1xuICB9O1xuICBmb3IgKHZhciBpID0gbGlzdGVuZXJzLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSB7XG4gICAgX2xvb3AoaSk7XG4gIH1cbiAgcmV0dXJuIHRoaXM7XG59O1xucC5yZW1vdmVBbGxMaXN0ZW5lcnMgPSBmdW5jdGlvbiAoKSB7XG4gIHJldHVybiB0aGlzLnJlbW92ZUxpc3RlbmVyKCcqJyk7XG59O1xucC5lbWl0ID0gcC50cmlnZ2VyID0gZnVuY3Rpb24gKGV2ZW50cywgZXh0cmFQYXJhbXMsIG1hbnVhbENhbGxiYWNrKSB7XG4gIHZhciBsaXN0ZW5lcnMgPSB0aGlzLmxpc3RlbmVycztcbiAgdmFyIG51bUxpc3RlbmVyc0JlZm9yZUVtaXQgPSBsaXN0ZW5lcnMubGVuZ3RoO1xuICB0aGlzLmVtaXR0aW5nKys7XG4gIGlmICghYXJyYXkoZXh0cmFQYXJhbXMpKSB7XG4gICAgZXh0cmFQYXJhbXMgPSBbZXh0cmFQYXJhbXNdO1xuICB9XG4gIGZvckVhY2hFdmVudE9iaih0aGlzLCBmdW5jdGlvbiAoc2VsZiwgZXZlbnRPYmopIHtcbiAgICBpZiAobWFudWFsQ2FsbGJhY2sgIT0gbnVsbCkge1xuICAgICAgbGlzdGVuZXJzID0gW3tcbiAgICAgICAgZXZlbnQ6IGV2ZW50T2JqLmV2ZW50LFxuICAgICAgICB0eXBlOiBldmVudE9iai50eXBlLFxuICAgICAgICBuYW1lc3BhY2U6IGV2ZW50T2JqLm5hbWVzcGFjZSxcbiAgICAgICAgY2FsbGJhY2s6IG1hbnVhbENhbGxiYWNrXG4gICAgICB9XTtcbiAgICAgIG51bUxpc3RlbmVyc0JlZm9yZUVtaXQgPSBsaXN0ZW5lcnMubGVuZ3RoO1xuICAgIH1cbiAgICB2YXIgX2xvb3AyID0gZnVuY3Rpb24gX2xvb3AyKCkge1xuICAgICAgdmFyIGxpc3RlbmVyID0gbGlzdGVuZXJzW2ldO1xuICAgICAgaWYgKGxpc3RlbmVyLnR5cGUgPT09IGV2ZW50T2JqLnR5cGUgJiYgKCFsaXN0ZW5lci5uYW1lc3BhY2UgfHwgbGlzdGVuZXIubmFtZXNwYWNlID09PSBldmVudE9iai5uYW1lc3BhY2UgfHwgbGlzdGVuZXIubmFtZXNwYWNlID09PSB1bml2ZXJzYWxOYW1lc3BhY2UpICYmIHNlbGYuZXZlbnRNYXRjaGVzKHNlbGYuY29udGV4dCwgbGlzdGVuZXIsIGV2ZW50T2JqKSkge1xuICAgICAgICB2YXIgYXJncyA9IFtldmVudE9ial07XG4gICAgICAgIGlmIChleHRyYVBhcmFtcyAhPSBudWxsKSB7XG4gICAgICAgICAgcHVzaChhcmdzLCBleHRyYVBhcmFtcyk7XG4gICAgICAgIH1cbiAgICAgICAgc2VsZi5iZWZvcmVFbWl0KHNlbGYuY29udGV4dCwgbGlzdGVuZXIsIGV2ZW50T2JqKTtcbiAgICAgICAgaWYgKGxpc3RlbmVyLmNvbmYgJiYgbGlzdGVuZXIuY29uZi5vbmUpIHtcbiAgICAgICAgICBzZWxmLmxpc3RlbmVycyA9IHNlbGYubGlzdGVuZXJzLmZpbHRlcihmdW5jdGlvbiAobCkge1xuICAgICAgICAgICAgcmV0dXJuIGwgIT09IGxpc3RlbmVyO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIHZhciBjb250ZXh0ID0gc2VsZi5jYWxsYmFja0NvbnRleHQoc2VsZi5jb250ZXh0LCBsaXN0ZW5lciwgZXZlbnRPYmopO1xuICAgICAgICB2YXIgcmV0ID0gbGlzdGVuZXIuY2FsbGJhY2suYXBwbHkoY29udGV4dCwgYXJncyk7XG4gICAgICAgIHNlbGYuYWZ0ZXJFbWl0KHNlbGYuY29udGV4dCwgbGlzdGVuZXIsIGV2ZW50T2JqKTtcbiAgICAgICAgaWYgKHJldCA9PT0gZmFsc2UpIHtcbiAgICAgICAgICBldmVudE9iai5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgICAgICBldmVudE9iai5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICB9XG4gICAgICB9IC8vIGlmIGxpc3RlbmVyIG1hdGNoZXNcbiAgICB9O1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbnVtTGlzdGVuZXJzQmVmb3JlRW1pdDsgaSsrKSB7XG4gICAgICBfbG9vcDIoKTtcbiAgICB9IC8vIGZvciBsaXN0ZW5lclxuXG4gICAgaWYgKHNlbGYuYnViYmxlKHNlbGYuY29udGV4dCkgJiYgIWV2ZW50T2JqLmlzUHJvcGFnYXRpb25TdG9wcGVkKCkpIHtcbiAgICAgIHNlbGYucGFyZW50KHNlbGYuY29udGV4dCkuZW1pdChldmVudE9iaiwgZXh0cmFQYXJhbXMpO1xuICAgIH1cbiAgfSwgZXZlbnRzKTtcbiAgdGhpcy5lbWl0dGluZy0tO1xuICByZXR1cm4gdGhpcztcbn07XG5cbnZhciBlbWl0dGVyT3B0aW9ucyQxID0ge1xuICBxdWFsaWZpZXJDb21wYXJlOiBmdW5jdGlvbiBxdWFsaWZpZXJDb21wYXJlKHNlbGVjdG9yMSwgc2VsZWN0b3IyKSB7XG4gICAgaWYgKHNlbGVjdG9yMSA9PSBudWxsIHx8IHNlbGVjdG9yMiA9PSBudWxsKSB7XG4gICAgICByZXR1cm4gc2VsZWN0b3IxID09IG51bGwgJiYgc2VsZWN0b3IyID09IG51bGw7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBzZWxlY3RvcjEuc2FtZVRleHQoc2VsZWN0b3IyKTtcbiAgICB9XG4gIH0sXG4gIGV2ZW50TWF0Y2hlczogZnVuY3Rpb24gZXZlbnRNYXRjaGVzKGVsZSwgbGlzdGVuZXIsIGV2ZW50T2JqKSB7XG4gICAgdmFyIHNlbGVjdG9yID0gbGlzdGVuZXIucXVhbGlmaWVyO1xuICAgIGlmIChzZWxlY3RvciAhPSBudWxsKSB7XG4gICAgICByZXR1cm4gZWxlICE9PSBldmVudE9iai50YXJnZXQgJiYgZWxlbWVudChldmVudE9iai50YXJnZXQpICYmIHNlbGVjdG9yLm1hdGNoZXMoZXZlbnRPYmoudGFyZ2V0KTtcbiAgICB9XG4gICAgcmV0dXJuIHRydWU7XG4gIH0sXG4gIGFkZEV2ZW50RmllbGRzOiBmdW5jdGlvbiBhZGRFdmVudEZpZWxkcyhlbGUsIGV2dCkge1xuICAgIGV2dC5jeSA9IGVsZS5jeSgpO1xuICAgIGV2dC50YXJnZXQgPSBlbGU7XG4gIH0sXG4gIGNhbGxiYWNrQ29udGV4dDogZnVuY3Rpb24gY2FsbGJhY2tDb250ZXh0KGVsZSwgbGlzdGVuZXIsIGV2ZW50T2JqKSB7XG4gICAgcmV0dXJuIGxpc3RlbmVyLnF1YWxpZmllciAhPSBudWxsID8gZXZlbnRPYmoudGFyZ2V0IDogZWxlO1xuICB9LFxuICBiZWZvcmVFbWl0OiBmdW5jdGlvbiBiZWZvcmVFbWl0KGNvbnRleHQsIGxpc3RlbmVyIC8qLCBldmVudE9iaiovKSB7XG4gICAgaWYgKGxpc3RlbmVyLmNvbmYgJiYgbGlzdGVuZXIuY29uZi5vbmNlKSB7XG4gICAgICBsaXN0ZW5lci5jb25mLm9uY2VDb2xsZWN0aW9uLnJlbW92ZUxpc3RlbmVyKGxpc3RlbmVyLmV2ZW50LCBsaXN0ZW5lci5xdWFsaWZpZXIsIGxpc3RlbmVyLmNhbGxiYWNrKTtcbiAgICB9XG4gIH0sXG4gIGJ1YmJsZTogZnVuY3Rpb24gYnViYmxlKCkge1xuICAgIHJldHVybiB0cnVlO1xuICB9LFxuICBwYXJlbnQ6IGZ1bmN0aW9uIHBhcmVudChlbGUpIHtcbiAgICByZXR1cm4gZWxlLmlzQ2hpbGQoKSA/IGVsZS5wYXJlbnQoKSA6IGVsZS5jeSgpO1xuICB9XG59O1xudmFyIGFyZ1NlbGVjdG9yJDEgPSBmdW5jdGlvbiBhcmdTZWxlY3RvcihhcmcpIHtcbiAgaWYgKHN0cmluZyhhcmcpKSB7XG4gICAgcmV0dXJuIG5ldyBTZWxlY3RvcihhcmcpO1xuICB9IGVsc2Uge1xuICAgIHJldHVybiBhcmc7XG4gIH1cbn07XG52YXIgZWxlc2ZuJDkgPSB7XG4gIGNyZWF0ZUVtaXR0ZXI6IGZ1bmN0aW9uIGNyZWF0ZUVtaXR0ZXIoKSB7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLmxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIgZWxlID0gdGhpc1tpXTtcbiAgICAgIHZhciBfcCA9IGVsZS5fcHJpdmF0ZTtcbiAgICAgIGlmICghX3AuZW1pdHRlcikge1xuICAgICAgICBfcC5lbWl0dGVyID0gbmV3IEVtaXR0ZXIoZW1pdHRlck9wdGlvbnMkMSwgZWxlKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHRoaXM7XG4gIH0sXG4gIGVtaXR0ZXI6IGZ1bmN0aW9uIGVtaXR0ZXIoKSB7XG4gICAgcmV0dXJuIHRoaXMuX3ByaXZhdGUuZW1pdHRlcjtcbiAgfSxcbiAgb246IGZ1bmN0aW9uIG9uKGV2ZW50cywgc2VsZWN0b3IsIGNhbGxiYWNrKSB7XG4gICAgdmFyIGFyZ1NlbCA9IGFyZ1NlbGVjdG9yJDEoc2VsZWN0b3IpO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIGVsZSA9IHRoaXNbaV07XG4gICAgICBlbGUuZW1pdHRlcigpLm9uKGV2ZW50cywgYXJnU2VsLCBjYWxsYmFjayk7XG4gICAgfVxuICAgIHJldHVybiB0aGlzO1xuICB9LFxuICByZW1vdmVMaXN0ZW5lcjogZnVuY3Rpb24gcmVtb3ZlTGlzdGVuZXIoZXZlbnRzLCBzZWxlY3RvciwgY2FsbGJhY2spIHtcbiAgICB2YXIgYXJnU2VsID0gYXJnU2VsZWN0b3IkMShzZWxlY3Rvcik7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLmxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIgZWxlID0gdGhpc1tpXTtcbiAgICAgIGVsZS5lbWl0dGVyKCkucmVtb3ZlTGlzdGVuZXIoZXZlbnRzLCBhcmdTZWwsIGNhbGxiYWNrKTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXM7XG4gIH0sXG4gIHJlbW92ZUFsbExpc3RlbmVyczogZnVuY3Rpb24gcmVtb3ZlQWxsTGlzdGVuZXJzKCkge1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIGVsZSA9IHRoaXNbaV07XG4gICAgICBlbGUuZW1pdHRlcigpLnJlbW92ZUFsbExpc3RlbmVycygpO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcztcbiAgfSxcbiAgb25lOiBmdW5jdGlvbiBvbmUoZXZlbnRzLCBzZWxlY3RvciwgY2FsbGJhY2spIHtcbiAgICB2YXIgYXJnU2VsID0gYXJnU2VsZWN0b3IkMShzZWxlY3Rvcik7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLmxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIgZWxlID0gdGhpc1tpXTtcbiAgICAgIGVsZS5lbWl0dGVyKCkub25lKGV2ZW50cywgYXJnU2VsLCBjYWxsYmFjayk7XG4gICAgfVxuICAgIHJldHVybiB0aGlzO1xuICB9LFxuICBvbmNlOiBmdW5jdGlvbiBvbmNlKGV2ZW50cywgc2VsZWN0b3IsIGNhbGxiYWNrKSB7XG4gICAgdmFyIGFyZ1NlbCA9IGFyZ1NlbGVjdG9yJDEoc2VsZWN0b3IpO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIGVsZSA9IHRoaXNbaV07XG4gICAgICBlbGUuZW1pdHRlcigpLm9uKGV2ZW50cywgYXJnU2VsLCBjYWxsYmFjaywge1xuICAgICAgICBvbmNlOiB0cnVlLFxuICAgICAgICBvbmNlQ29sbGVjdGlvbjogdGhpc1xuICAgICAgfSk7XG4gICAgfVxuICB9LFxuICBlbWl0OiBmdW5jdGlvbiBlbWl0KGV2ZW50cywgZXh0cmFQYXJhbXMpIHtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciBlbGUgPSB0aGlzW2ldO1xuICAgICAgZWxlLmVtaXR0ZXIoKS5lbWl0KGV2ZW50cywgZXh0cmFQYXJhbXMpO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcztcbiAgfSxcbiAgZW1pdEFuZE5vdGlmeTogZnVuY3Rpb24gZW1pdEFuZE5vdGlmeShldmVudCwgZXh0cmFQYXJhbXMpIHtcbiAgICAvLyBmb3IgaW50ZXJuYWwgdXNlIG9ubHlcbiAgICBpZiAodGhpcy5sZW5ndGggPT09IDApIHtcbiAgICAgIHJldHVybjtcbiAgICB9IC8vIGVtcHR5IGNvbGxlY3Rpb25zIGRvbid0IG5lZWQgdG8gbm90aWZ5IGFueXRoaW5nXG5cbiAgICAvLyBub3RpZnkgcmVuZGVyZXJcbiAgICB0aGlzLmN5KCkubm90aWZ5KGV2ZW50LCB0aGlzKTtcbiAgICB0aGlzLmVtaXQoZXZlbnQsIGV4dHJhUGFyYW1zKTtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxufTtcbmRlZmluZS5ldmVudEFsaWFzZXNPbihlbGVzZm4kOSk7XG5cbnZhciBlbGVzZm4kOCA9IHtcbiAgbm9kZXM6IGZ1bmN0aW9uIG5vZGVzKHNlbGVjdG9yKSB7XG4gICAgcmV0dXJuIHRoaXMuZmlsdGVyKGZ1bmN0aW9uIChlbGUpIHtcbiAgICAgIHJldHVybiBlbGUuaXNOb2RlKCk7XG4gICAgfSkuZmlsdGVyKHNlbGVjdG9yKTtcbiAgfSxcbiAgZWRnZXM6IGZ1bmN0aW9uIGVkZ2VzKHNlbGVjdG9yKSB7XG4gICAgcmV0dXJuIHRoaXMuZmlsdGVyKGZ1bmN0aW9uIChlbGUpIHtcbiAgICAgIHJldHVybiBlbGUuaXNFZGdlKCk7XG4gICAgfSkuZmlsdGVyKHNlbGVjdG9yKTtcbiAgfSxcbiAgLy8gaW50ZXJuYWwgaGVscGVyIHRvIGdldCBub2RlcyBhbmQgZWRnZXMgYXMgc2VwYXJhdGUgY29sbGVjdGlvbnMgd2l0aCBzaW5nbGUgaXRlcmF0aW9uIG92ZXIgZWxlbWVudHNcbiAgYnlHcm91cDogZnVuY3Rpb24gYnlHcm91cCgpIHtcbiAgICB2YXIgbm9kZXMgPSB0aGlzLnNwYXduKCk7XG4gICAgdmFyIGVkZ2VzID0gdGhpcy5zcGF3bigpO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIGVsZSA9IHRoaXNbaV07XG4gICAgICBpZiAoZWxlLmlzTm9kZSgpKSB7XG4gICAgICAgIG5vZGVzLnB1c2goZWxlKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGVkZ2VzLnB1c2goZWxlKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHtcbiAgICAgIG5vZGVzOiBub2RlcyxcbiAgICAgIGVkZ2VzOiBlZGdlc1xuICAgIH07XG4gIH0sXG4gIGZpbHRlcjogZnVuY3Rpb24gZmlsdGVyKF9maWx0ZXIsIHRoaXNBcmcpIHtcbiAgICBpZiAoX2ZpbHRlciA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAvLyBjaGVjayB0aGlzIGZpcnN0IGIvYyBpdCdzIHRoZSBtb3N0IGNvbW1vbi9wZXJmb3JtYW50IGNhc2VcbiAgICAgIHJldHVybiB0aGlzO1xuICAgIH0gZWxzZSBpZiAoc3RyaW5nKF9maWx0ZXIpIHx8IGVsZW1lbnRPckNvbGxlY3Rpb24oX2ZpbHRlcikpIHtcbiAgICAgIHJldHVybiBuZXcgU2VsZWN0b3IoX2ZpbHRlcikuZmlsdGVyKHRoaXMpO1xuICAgIH0gZWxzZSBpZiAoZm4kNihfZmlsdGVyKSkge1xuICAgICAgdmFyIGZpbHRlckVsZXMgPSB0aGlzLnNwYXduKCk7XG4gICAgICB2YXIgZWxlcyA9IHRoaXM7XG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGVsZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgdmFyIGVsZSA9IGVsZXNbaV07XG4gICAgICAgIHZhciBpbmNsdWRlID0gdGhpc0FyZyA/IF9maWx0ZXIuYXBwbHkodGhpc0FyZywgW2VsZSwgaSwgZWxlc10pIDogX2ZpbHRlcihlbGUsIGksIGVsZXMpO1xuICAgICAgICBpZiAoaW5jbHVkZSkge1xuICAgICAgICAgIGZpbHRlckVsZXMucHVzaChlbGUpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gZmlsdGVyRWxlcztcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuc3Bhd24oKTsgLy8gaWYgbm90IGhhbmRsZWQgYnkgYWJvdmUsIGdpdmUgJ2VtIGFuIGVtcHR5IGNvbGxlY3Rpb25cbiAgfSxcbiAgbm90OiBmdW5jdGlvbiBub3QodG9SZW1vdmUpIHtcbiAgICBpZiAoIXRvUmVtb3ZlKSB7XG4gICAgICByZXR1cm4gdGhpcztcbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKHN0cmluZyh0b1JlbW92ZSkpIHtcbiAgICAgICAgdG9SZW1vdmUgPSB0aGlzLmZpbHRlcih0b1JlbW92ZSk7XG4gICAgICB9XG4gICAgICB2YXIgZWxlbWVudHMgPSB0aGlzLnNwYXduKCk7XG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgdmFyIGVsZW1lbnQgPSB0aGlzW2ldO1xuICAgICAgICB2YXIgcmVtb3ZlID0gdG9SZW1vdmUuaGFzKGVsZW1lbnQpO1xuICAgICAgICBpZiAoIXJlbW92ZSkge1xuICAgICAgICAgIGVsZW1lbnRzLnB1c2goZWxlbWVudCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiBlbGVtZW50cztcbiAgICB9XG4gIH0sXG4gIGFic29sdXRlQ29tcGxlbWVudDogZnVuY3Rpb24gYWJzb2x1dGVDb21wbGVtZW50KCkge1xuICAgIHZhciBjeSA9IHRoaXMuY3koKTtcbiAgICByZXR1cm4gY3kubXV0YWJsZUVsZW1lbnRzKCkubm90KHRoaXMpO1xuICB9LFxuICBpbnRlcnNlY3Q6IGZ1bmN0aW9uIGludGVyc2VjdChvdGhlcikge1xuICAgIC8vIGlmIGEgc2VsZWN0b3IgaXMgc3BlY2lmaWVkLCB0aGVuIGZpbHRlciBieSBpdCBpbnN0ZWFkXG4gICAgaWYgKHN0cmluZyhvdGhlcikpIHtcbiAgICAgIHZhciBzZWxlY3RvciA9IG90aGVyO1xuICAgICAgcmV0dXJuIHRoaXMuZmlsdGVyKHNlbGVjdG9yKTtcbiAgICB9XG4gICAgdmFyIGVsZW1lbnRzID0gdGhpcy5zcGF3bigpO1xuICAgIHZhciBjb2wxID0gdGhpcztcbiAgICB2YXIgY29sMiA9IG90aGVyO1xuICAgIHZhciBjb2wxU21hbGxlciA9IHRoaXMubGVuZ3RoIDwgb3RoZXIubGVuZ3RoO1xuICAgIHZhciBjb2xTID0gY29sMVNtYWxsZXIgPyBjb2wxIDogY29sMjtcbiAgICB2YXIgY29sTCA9IGNvbDFTbWFsbGVyID8gY29sMiA6IGNvbDE7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBjb2xTLmxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIgZWxlID0gY29sU1tpXTtcbiAgICAgIGlmIChjb2xMLmhhcyhlbGUpKSB7XG4gICAgICAgIGVsZW1lbnRzLnB1c2goZWxlKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGVsZW1lbnRzO1xuICB9LFxuICB4b3I6IGZ1bmN0aW9uIHhvcihvdGhlcikge1xuICAgIHZhciBjeSA9IHRoaXMuX3ByaXZhdGUuY3k7XG4gICAgaWYgKHN0cmluZyhvdGhlcikpIHtcbiAgICAgIG90aGVyID0gY3kuJChvdGhlcik7XG4gICAgfVxuICAgIHZhciBlbGVtZW50cyA9IHRoaXMuc3Bhd24oKTtcbiAgICB2YXIgY29sMSA9IHRoaXM7XG4gICAgdmFyIGNvbDIgPSBvdGhlcjtcbiAgICB2YXIgYWRkID0gZnVuY3Rpb24gYWRkKGNvbCwgb3RoZXIpIHtcbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgY29sLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIHZhciBlbGUgPSBjb2xbaV07XG4gICAgICAgIHZhciBpZCA9IGVsZS5fcHJpdmF0ZS5kYXRhLmlkO1xuICAgICAgICB2YXIgaW5PdGhlciA9IG90aGVyLmhhc0VsZW1lbnRXaXRoSWQoaWQpO1xuICAgICAgICBpZiAoIWluT3RoZXIpIHtcbiAgICAgICAgICBlbGVtZW50cy5wdXNoKGVsZSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9O1xuICAgIGFkZChjb2wxLCBjb2wyKTtcbiAgICBhZGQoY29sMiwgY29sMSk7XG4gICAgcmV0dXJuIGVsZW1lbnRzO1xuICB9LFxuICBkaWZmOiBmdW5jdGlvbiBkaWZmKG90aGVyKSB7XG4gICAgdmFyIGN5ID0gdGhpcy5fcHJpdmF0ZS5jeTtcbiAgICBpZiAoc3RyaW5nKG90aGVyKSkge1xuICAgICAgb3RoZXIgPSBjeS4kKG90aGVyKTtcbiAgICB9XG4gICAgdmFyIGxlZnQgPSB0aGlzLnNwYXduKCk7XG4gICAgdmFyIHJpZ2h0ID0gdGhpcy5zcGF3bigpO1xuICAgIHZhciBib3RoID0gdGhpcy5zcGF3bigpO1xuICAgIHZhciBjb2wxID0gdGhpcztcbiAgICB2YXIgY29sMiA9IG90aGVyO1xuICAgIHZhciBhZGQgPSBmdW5jdGlvbiBhZGQoY29sLCBvdGhlciwgcmV0RWxlcykge1xuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBjb2wubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgdmFyIGVsZSA9IGNvbFtpXTtcbiAgICAgICAgdmFyIGlkID0gZWxlLl9wcml2YXRlLmRhdGEuaWQ7XG4gICAgICAgIHZhciBpbk90aGVyID0gb3RoZXIuaGFzRWxlbWVudFdpdGhJZChpZCk7XG4gICAgICAgIGlmIChpbk90aGVyKSB7XG4gICAgICAgICAgYm90aC5tZXJnZShlbGUpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJldEVsZXMucHVzaChlbGUpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfTtcbiAgICBhZGQoY29sMSwgY29sMiwgbGVmdCk7XG4gICAgYWRkKGNvbDIsIGNvbDEsIHJpZ2h0KTtcbiAgICByZXR1cm4ge1xuICAgICAgbGVmdDogbGVmdCxcbiAgICAgIHJpZ2h0OiByaWdodCxcbiAgICAgIGJvdGg6IGJvdGhcbiAgICB9O1xuICB9LFxuICBhZGQ6IGZ1bmN0aW9uIGFkZCh0b0FkZCkge1xuICAgIHZhciBjeSA9IHRoaXMuX3ByaXZhdGUuY3k7XG4gICAgaWYgKCF0b0FkZCkge1xuICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuICAgIGlmIChzdHJpbmcodG9BZGQpKSB7XG4gICAgICB2YXIgc2VsZWN0b3IgPSB0b0FkZDtcbiAgICAgIHRvQWRkID0gY3kubXV0YWJsZUVsZW1lbnRzKCkuZmlsdGVyKHNlbGVjdG9yKTtcbiAgICB9XG4gICAgdmFyIGVsZW1lbnRzID0gdGhpcy5zcGF3blNlbGYoKTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRvQWRkLmxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIgZWxlID0gdG9BZGRbaV07XG4gICAgICB2YXIgYWRkID0gIXRoaXMuaGFzKGVsZSk7XG4gICAgICBpZiAoYWRkKSB7XG4gICAgICAgIGVsZW1lbnRzLnB1c2goZWxlKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGVsZW1lbnRzO1xuICB9LFxuICAvLyBpbiBwbGFjZSBtZXJnZSBvbiBjYWxsaW5nIGNvbGxlY3Rpb25cbiAgbWVyZ2U6IGZ1bmN0aW9uIG1lcmdlKHRvQWRkKSB7XG4gICAgdmFyIF9wID0gdGhpcy5fcHJpdmF0ZTtcbiAgICB2YXIgY3kgPSBfcC5jeTtcbiAgICBpZiAoIXRvQWRkKSB7XG4gICAgICByZXR1cm4gdGhpcztcbiAgICB9XG4gICAgaWYgKHRvQWRkICYmIHN0cmluZyh0b0FkZCkpIHtcbiAgICAgIHZhciBzZWxlY3RvciA9IHRvQWRkO1xuICAgICAgdG9BZGQgPSBjeS5tdXRhYmxlRWxlbWVudHMoKS5maWx0ZXIoc2VsZWN0b3IpO1xuICAgIH1cbiAgICB2YXIgbWFwID0gX3AubWFwO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdG9BZGQubGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciB0b0FkZEVsZSA9IHRvQWRkW2ldO1xuICAgICAgdmFyIGlkID0gdG9BZGRFbGUuX3ByaXZhdGUuZGF0YS5pZDtcbiAgICAgIHZhciBhZGQgPSAhbWFwLmhhcyhpZCk7XG4gICAgICBpZiAoYWRkKSB7XG4gICAgICAgIHZhciBpbmRleCA9IHRoaXMubGVuZ3RoKys7XG4gICAgICAgIHRoaXNbaW5kZXhdID0gdG9BZGRFbGU7XG4gICAgICAgIG1hcC5zZXQoaWQsIHtcbiAgICAgICAgICBlbGU6IHRvQWRkRWxlLFxuICAgICAgICAgIGluZGV4OiBpbmRleFxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHRoaXM7IC8vIGNoYWluaW5nXG4gIH0sXG4gIHVubWVyZ2VBdDogZnVuY3Rpb24gdW5tZXJnZUF0KGkpIHtcbiAgICB2YXIgZWxlID0gdGhpc1tpXTtcbiAgICB2YXIgaWQgPSBlbGUuaWQoKTtcbiAgICB2YXIgX3AgPSB0aGlzLl9wcml2YXRlO1xuICAgIHZhciBtYXAgPSBfcC5tYXA7XG5cbiAgICAvLyByZW1vdmUgZWxlXG4gICAgdGhpc1tpXSA9IHVuZGVmaW5lZDtcbiAgICBtYXBbXCJkZWxldGVcIl0oaWQpO1xuICAgIHZhciB1bm1lcmdlZExhc3RFbGUgPSBpID09PSB0aGlzLmxlbmd0aCAtIDE7XG5cbiAgICAvLyByZXBsYWNlIGVtcHR5IHNwb3Qgd2l0aCBsYXN0IGVsZSBpbiBjb2xsZWN0aW9uXG4gICAgaWYgKHRoaXMubGVuZ3RoID4gMSAmJiAhdW5tZXJnZWRMYXN0RWxlKSB7XG4gICAgICB2YXIgbGFzdEVsZUkgPSB0aGlzLmxlbmd0aCAtIDE7XG4gICAgICB2YXIgbGFzdEVsZSA9IHRoaXNbbGFzdEVsZUldO1xuICAgICAgdmFyIGxhc3RFbGVJZCA9IGxhc3RFbGUuX3ByaXZhdGUuZGF0YS5pZDtcbiAgICAgIHRoaXNbbGFzdEVsZUldID0gdW5kZWZpbmVkO1xuICAgICAgdGhpc1tpXSA9IGxhc3RFbGU7XG4gICAgICBtYXAuc2V0KGxhc3RFbGVJZCwge1xuICAgICAgICBlbGU6IGxhc3RFbGUsXG4gICAgICAgIGluZGV4OiBpXG4gICAgICB9KTtcbiAgICB9XG5cbiAgICAvLyB0aGUgY29sbGVjdGlvbiBpcyBub3cgMSBlbGUgc21hbGxlclxuICAgIHRoaXMubGVuZ3RoLS07XG4gICAgcmV0dXJuIHRoaXM7XG4gIH0sXG4gIC8vIHJlbW92ZSBzaW5nbGUgZWxlIGluIHBsYWNlIGluIGNhbGxpbmcgY29sbGVjdGlvblxuICB1bm1lcmdlT25lOiBmdW5jdGlvbiB1bm1lcmdlT25lKGVsZSkge1xuICAgIGVsZSA9IGVsZVswXTtcbiAgICB2YXIgX3AgPSB0aGlzLl9wcml2YXRlO1xuICAgIHZhciBpZCA9IGVsZS5fcHJpdmF0ZS5kYXRhLmlkO1xuICAgIHZhciBtYXAgPSBfcC5tYXA7XG4gICAgdmFyIGVudHJ5ID0gbWFwLmdldChpZCk7XG4gICAgaWYgKCFlbnRyeSkge1xuICAgICAgcmV0dXJuIHRoaXM7IC8vIG5vIG5lZWQgdG8gcmVtb3ZlXG4gICAgfVxuICAgIHZhciBpID0gZW50cnkuaW5kZXg7XG4gICAgdGhpcy51bm1lcmdlQXQoaSk7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH0sXG4gIC8vIHJlbW92ZSBlbGVzIGluIHBsYWNlIG9uIGNhbGxpbmcgY29sbGVjdGlvblxuICB1bm1lcmdlOiBmdW5jdGlvbiB1bm1lcmdlKHRvUmVtb3ZlKSB7XG4gICAgdmFyIGN5ID0gdGhpcy5fcHJpdmF0ZS5jeTtcbiAgICBpZiAoIXRvUmVtb3ZlKSB7XG4gICAgICByZXR1cm4gdGhpcztcbiAgICB9XG4gICAgaWYgKHRvUmVtb3ZlICYmIHN0cmluZyh0b1JlbW92ZSkpIHtcbiAgICAgIHZhciBzZWxlY3RvciA9IHRvUmVtb3ZlO1xuICAgICAgdG9SZW1vdmUgPSBjeS5tdXRhYmxlRWxlbWVudHMoKS5maWx0ZXIoc2VsZWN0b3IpO1xuICAgIH1cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRvUmVtb3ZlLmxlbmd0aDsgaSsrKSB7XG4gICAgICB0aGlzLnVubWVyZ2VPbmUodG9SZW1vdmVbaV0pO1xuICAgIH1cbiAgICByZXR1cm4gdGhpczsgLy8gY2hhaW5pbmdcbiAgfSxcbiAgdW5tZXJnZUJ5OiBmdW5jdGlvbiB1bm1lcmdlQnkodG9SbUZuKSB7XG4gICAgZm9yICh2YXIgaSA9IHRoaXMubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIHtcbiAgICAgIHZhciBlbGUgPSB0aGlzW2ldO1xuICAgICAgaWYgKHRvUm1GbihlbGUpKSB7XG4gICAgICAgIHRoaXMudW5tZXJnZUF0KGkpO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gdGhpcztcbiAgfSxcbiAgbWFwOiBmdW5jdGlvbiBtYXAobWFwRm4sIHRoaXNBcmcpIHtcbiAgICB2YXIgYXJyID0gW107XG4gICAgdmFyIGVsZXMgPSB0aGlzO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZWxlcy5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIGVsZSA9IGVsZXNbaV07XG4gICAgICB2YXIgcmV0ID0gdGhpc0FyZyA/IG1hcEZuLmFwcGx5KHRoaXNBcmcsIFtlbGUsIGksIGVsZXNdKSA6IG1hcEZuKGVsZSwgaSwgZWxlcyk7XG4gICAgICBhcnIucHVzaChyZXQpO1xuICAgIH1cbiAgICByZXR1cm4gYXJyO1xuICB9LFxuICByZWR1Y2U6IGZ1bmN0aW9uIHJlZHVjZShmbiwgaW5pdGlhbFZhbHVlKSB7XG4gICAgdmFyIHZhbCA9IGluaXRpYWxWYWx1ZTtcbiAgICB2YXIgZWxlcyA9IHRoaXM7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBlbGVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICB2YWwgPSBmbih2YWwsIGVsZXNbaV0sIGksIGVsZXMpO1xuICAgIH1cbiAgICByZXR1cm4gdmFsO1xuICB9LFxuICBtYXg6IGZ1bmN0aW9uIG1heCh2YWxGbiwgdGhpc0FyZykge1xuICAgIHZhciBtYXggPSAtSW5maW5pdHk7XG4gICAgdmFyIG1heEVsZTtcbiAgICB2YXIgZWxlcyA9IHRoaXM7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBlbGVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIgZWxlID0gZWxlc1tpXTtcbiAgICAgIHZhciB2YWwgPSB0aGlzQXJnID8gdmFsRm4uYXBwbHkodGhpc0FyZywgW2VsZSwgaSwgZWxlc10pIDogdmFsRm4oZWxlLCBpLCBlbGVzKTtcbiAgICAgIGlmICh2YWwgPiBtYXgpIHtcbiAgICAgICAgbWF4ID0gdmFsO1xuICAgICAgICBtYXhFbGUgPSBlbGU7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiB7XG4gICAgICB2YWx1ZTogbWF4LFxuICAgICAgZWxlOiBtYXhFbGVcbiAgICB9O1xuICB9LFxuICBtaW46IGZ1bmN0aW9uIG1pbih2YWxGbiwgdGhpc0FyZykge1xuICAgIHZhciBtaW4gPSBJbmZpbml0eTtcbiAgICB2YXIgbWluRWxlO1xuICAgIHZhciBlbGVzID0gdGhpcztcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGVsZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciBlbGUgPSBlbGVzW2ldO1xuICAgICAgdmFyIHZhbCA9IHRoaXNBcmcgPyB2YWxGbi5hcHBseSh0aGlzQXJnLCBbZWxlLCBpLCBlbGVzXSkgOiB2YWxGbihlbGUsIGksIGVsZXMpO1xuICAgICAgaWYgKHZhbCA8IG1pbikge1xuICAgICAgICBtaW4gPSB2YWw7XG4gICAgICAgIG1pbkVsZSA9IGVsZTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHtcbiAgICAgIHZhbHVlOiBtaW4sXG4gICAgICBlbGU6IG1pbkVsZVxuICAgIH07XG4gIH1cbn07XG5cbi8vIGFsaWFzZXNcbnZhciBmbiQxID0gZWxlc2ZuJDg7XG5mbiQxWyd1J10gPSBmbiQxWyd8J10gPSBmbiQxWycrJ10gPSBmbiQxLnVuaW9uID0gZm4kMS5vciA9IGZuJDEuYWRkO1xuZm4kMVsnXFxcXCddID0gZm4kMVsnISddID0gZm4kMVsnLSddID0gZm4kMS5kaWZmZXJlbmNlID0gZm4kMS5yZWxhdGl2ZUNvbXBsZW1lbnQgPSBmbiQxLnN1YnRyYWN0ID0gZm4kMS5ub3Q7XG5mbiQxWyduJ10gPSBmbiQxWycmJ10gPSBmbiQxWycuJ10gPSBmbiQxLmFuZCA9IGZuJDEuaW50ZXJzZWN0aW9uID0gZm4kMS5pbnRlcnNlY3Q7XG5mbiQxWydeJ10gPSBmbiQxWycoKyknXSA9IGZuJDFbJygtKSddID0gZm4kMS5zeW1tZXRyaWNEaWZmZXJlbmNlID0gZm4kMS5zeW1kaWZmID0gZm4kMS54b3I7XG5mbiQxLmZuRmlsdGVyID0gZm4kMS5maWx0ZXJGbiA9IGZuJDEuc3RkRmlsdGVyID0gZm4kMS5maWx0ZXI7XG5mbiQxLmNvbXBsZW1lbnQgPSBmbiQxLmFic2NvbXAgPSBmbiQxLmFic29sdXRlQ29tcGxlbWVudDtcblxudmFyIGVsZXNmbiQ3ID0ge1xuICBpc05vZGU6IGZ1bmN0aW9uIGlzTm9kZSgpIHtcbiAgICByZXR1cm4gdGhpcy5ncm91cCgpID09PSAnbm9kZXMnO1xuICB9LFxuICBpc0VkZ2U6IGZ1bmN0aW9uIGlzRWRnZSgpIHtcbiAgICByZXR1cm4gdGhpcy5ncm91cCgpID09PSAnZWRnZXMnO1xuICB9LFxuICBpc0xvb3A6IGZ1bmN0aW9uIGlzTG9vcCgpIHtcbiAgICByZXR1cm4gdGhpcy5pc0VkZ2UoKSAmJiB0aGlzLnNvdXJjZSgpWzBdID09PSB0aGlzLnRhcmdldCgpWzBdO1xuICB9LFxuICBpc1NpbXBsZTogZnVuY3Rpb24gaXNTaW1wbGUoKSB7XG4gICAgcmV0dXJuIHRoaXMuaXNFZGdlKCkgJiYgdGhpcy5zb3VyY2UoKVswXSAhPT0gdGhpcy50YXJnZXQoKVswXTtcbiAgfSxcbiAgZ3JvdXA6IGZ1bmN0aW9uIGdyb3VwKCkge1xuICAgIHZhciBlbGUgPSB0aGlzWzBdO1xuICAgIGlmIChlbGUpIHtcbiAgICAgIHJldHVybiBlbGUuX3ByaXZhdGUuZ3JvdXA7XG4gICAgfVxuICB9XG59O1xuXG4vKipcbiAqICBFbGVtZW50cyBhcmUgZHJhd24gaW4gYSBzcGVjaWZpYyBvcmRlciBiYXNlZCBvbiBjb21wb3VuZCBkZXB0aCAobG93IHRvIGhpZ2gpLCB0aGUgZWxlbWVudCB0eXBlIChub2RlcyBhYm92ZSBlZGdlcyksXG4gKiAgYW5kIHotaW5kZXggKGxvdyB0byBoaWdoKS4gIFRoZXNlIHN0eWxlcyBhZmZlY3QgaG93IHRoaXMgYXBwbGllczpcbiAqXG4gKiAgei1jb21wb3VuZC1kZXB0aDogTWF5IGJlIGBib3R0b20gfCBvcnBoYW4gfCBhdXRvIHwgdG9wYC4gIFRoZSBmaXJzdCBkcmF3biBpcyBgYm90dG9tYCwgdGhlbiBgb3JwaGFuYCB3aGljaCBpcyB0aGVcbiAqICAgICAgc2FtZSBkZXB0aCBhcyB0aGUgcm9vdCBvZiB0aGUgY29tcG91bmQgZ3JhcGgsIGZvbGxvd2VkIGJ5IHRoZSBkZWZhdWx0IHZhbHVlIGBhdXRvYCB3aGljaCBkcmF3cyBpbiBvcmRlciBmcm9tXG4gKiAgICAgIHJvb3QgdG8gbGVhdmVzIG9mIHRoZSBjb21wb3VuZCBncmFwaC4gIFRoZSBsYXN0IGRyYXduIGlzIGB0b3BgLlxuICogIHotaW5kZXgtY29tcGFyZTogTWF5IGJlIGBhdXRvIHwgbWFudWFsYC4gIFRoZSBkZWZhdWx0IHZhbHVlIGlzIGBhdXRvYCB3aGljaCBhbHdheXMgZHJhd3MgZWRnZXMgdW5kZXIgbm9kZXMuXG4gKiAgICAgIGBtYW51YWxgIGlnbm9yZXMgdGhpcyBjb252ZW50aW9uIGFuZCBkcmF3cyBiYXNlZCBvbiB0aGUgYHotaW5kZXhgIHZhbHVlIHNldHRpbmcuXG4gKiAgei1pbmRleDogQW4gaW50ZWdlciB2YWx1ZSB0aGF0IGFmZmVjdHMgdGhlIHJlbGF0aXZlIGRyYXcgb3JkZXIgb2YgZWxlbWVudHMuICBJbiBnZW5lcmFsLCBhbiBlbGVtZW50IHdpdGggYSBoaWdoZXJcbiAqICAgICAgYHotaW5kZXhgIHdpbGwgYmUgZHJhd24gb24gdG9wIG9mIGFuIGVsZW1lbnQgd2l0aCBhIGxvd2VyIGB6LWluZGV4YC5cbiAqL1xudmFyIHpJbmRleFNvcnQgPSBmdW5jdGlvbiB6SW5kZXhTb3J0KGEsIGIpIHtcbiAgdmFyIGN5ID0gYS5jeSgpO1xuICB2YXIgaGFzQ29tcG91bmROb2RlcyA9IGN5Lmhhc0NvbXBvdW5kTm9kZXMoKTtcbiAgZnVuY3Rpb24gZ2V0RGVwdGgoZWxlKSB7XG4gICAgdmFyIHN0eWxlID0gZWxlLnBzdHlsZSgnei1jb21wb3VuZC1kZXB0aCcpO1xuICAgIGlmIChzdHlsZS52YWx1ZSA9PT0gJ2F1dG8nKSB7XG4gICAgICByZXR1cm4gaGFzQ29tcG91bmROb2RlcyA/IGVsZS56RGVwdGgoKSA6IDA7XG4gICAgfSBlbHNlIGlmIChzdHlsZS52YWx1ZSA9PT0gJ2JvdHRvbScpIHtcbiAgICAgIHJldHVybiAtMTtcbiAgICB9IGVsc2UgaWYgKHN0eWxlLnZhbHVlID09PSAndG9wJykge1xuICAgICAgcmV0dXJuIE1BWF9JTlQkMTtcbiAgICB9XG4gICAgLy8gJ29ycGhhbidcbiAgICByZXR1cm4gMDtcbiAgfVxuICB2YXIgZGVwdGhEaWZmID0gZ2V0RGVwdGgoYSkgLSBnZXREZXB0aChiKTtcbiAgaWYgKGRlcHRoRGlmZiAhPT0gMCkge1xuICAgIHJldHVybiBkZXB0aERpZmY7XG4gIH1cbiAgZnVuY3Rpb24gZ2V0RWxlRGVwdGgoZWxlKSB7XG4gICAgdmFyIHN0eWxlID0gZWxlLnBzdHlsZSgnei1pbmRleC1jb21wYXJlJyk7XG4gICAgaWYgKHN0eWxlLnZhbHVlID09PSAnYXV0bycpIHtcbiAgICAgIHJldHVybiBlbGUuaXNOb2RlKCkgPyAxIDogMDtcbiAgICB9XG4gICAgLy8gJ21hbnVhbCdcbiAgICByZXR1cm4gMDtcbiAgfVxuICB2YXIgZWxlRGlmZiA9IGdldEVsZURlcHRoKGEpIC0gZ2V0RWxlRGVwdGgoYik7XG4gIGlmIChlbGVEaWZmICE9PSAwKSB7XG4gICAgcmV0dXJuIGVsZURpZmY7XG4gIH1cbiAgdmFyIHpEaWZmID0gYS5wc3R5bGUoJ3otaW5kZXgnKS52YWx1ZSAtIGIucHN0eWxlKCd6LWluZGV4JykudmFsdWU7XG4gIGlmICh6RGlmZiAhPT0gMCkge1xuICAgIHJldHVybiB6RGlmZjtcbiAgfVxuICAvLyBjb21wYXJlIGluZGljZXMgaW4gdGhlIGNvcmUgKG9yZGVyIGFkZGVkIHRvIGdyYXBoIHcvIGxhc3Qgb24gdG9wKVxuICByZXR1cm4gYS5wb29sSW5kZXgoKSAtIGIucG9vbEluZGV4KCk7XG59O1xuXG52YXIgZWxlc2ZuJDYgPSB7XG4gIGZvckVhY2g6IGZ1bmN0aW9uIGZvckVhY2goZm4sIHRoaXNBcmcpIHtcbiAgICBpZiAoZm4kNihmbikpIHtcbiAgICAgIHZhciBOID0gdGhpcy5sZW5ndGg7XG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IE47IGkrKykge1xuICAgICAgICB2YXIgZWxlID0gdGhpc1tpXTtcbiAgICAgICAgdmFyIHJldCA9IHRoaXNBcmcgPyBmbi5hcHBseSh0aGlzQXJnLCBbZWxlLCBpLCB0aGlzXSkgOiBmbihlbGUsIGksIHRoaXMpO1xuICAgICAgICBpZiAocmV0ID09PSBmYWxzZSkge1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9IC8vIGV4aXQgZWFjaCBlYXJseSBvbiByZXR1cm4gZmFsc2VcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHRoaXM7XG4gIH0sXG4gIHRvQXJyYXk6IGZ1bmN0aW9uIHRvQXJyYXkoKSB7XG4gICAgdmFyIGFycmF5ID0gW107XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBhcnJheS5wdXNoKHRoaXNbaV0pO1xuICAgIH1cbiAgICByZXR1cm4gYXJyYXk7XG4gIH0sXG4gIHNsaWNlOiBmdW5jdGlvbiBzbGljZShzdGFydCwgZW5kKSB7XG4gICAgdmFyIGFycmF5ID0gW107XG4gICAgdmFyIHRoaXNTaXplID0gdGhpcy5sZW5ndGg7XG4gICAgaWYgKGVuZCA9PSBudWxsKSB7XG4gICAgICBlbmQgPSB0aGlzU2l6ZTtcbiAgICB9XG4gICAgaWYgKHN0YXJ0ID09IG51bGwpIHtcbiAgICAgIHN0YXJ0ID0gMDtcbiAgICB9XG4gICAgaWYgKHN0YXJ0IDwgMCkge1xuICAgICAgc3RhcnQgPSB0aGlzU2l6ZSArIHN0YXJ0O1xuICAgIH1cbiAgICBpZiAoZW5kIDwgMCkge1xuICAgICAgZW5kID0gdGhpc1NpemUgKyBlbmQ7XG4gICAgfVxuICAgIGZvciAodmFyIGkgPSBzdGFydDsgaSA+PSAwICYmIGkgPCBlbmQgJiYgaSA8IHRoaXNTaXplOyBpKyspIHtcbiAgICAgIGFycmF5LnB1c2godGhpc1tpXSk7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLnNwYXduKGFycmF5KTtcbiAgfSxcbiAgc2l6ZTogZnVuY3Rpb24gc2l6ZSgpIHtcbiAgICByZXR1cm4gdGhpcy5sZW5ndGg7XG4gIH0sXG4gIGVxOiBmdW5jdGlvbiBlcShpKSB7XG4gICAgcmV0dXJuIHRoaXNbaV0gfHwgdGhpcy5zcGF3bigpO1xuICB9LFxuICBmaXJzdDogZnVuY3Rpb24gZmlyc3QoKSB7XG4gICAgcmV0dXJuIHRoaXNbMF0gfHwgdGhpcy5zcGF3bigpO1xuICB9LFxuICBsYXN0OiBmdW5jdGlvbiBsYXN0KCkge1xuICAgIHJldHVybiB0aGlzW3RoaXMubGVuZ3RoIC0gMV0gfHwgdGhpcy5zcGF3bigpO1xuICB9LFxuICBlbXB0eTogZnVuY3Rpb24gZW1wdHkoKSB7XG4gICAgcmV0dXJuIHRoaXMubGVuZ3RoID09PSAwO1xuICB9LFxuICBub25lbXB0eTogZnVuY3Rpb24gbm9uZW1wdHkoKSB7XG4gICAgcmV0dXJuICF0aGlzLmVtcHR5KCk7XG4gIH0sXG4gIHNvcnQ6IGZ1bmN0aW9uIHNvcnQoc29ydEZuKSB7XG4gICAgaWYgKCFmbiQ2KHNvcnRGbikpIHtcbiAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cbiAgICB2YXIgc29ydGVkID0gdGhpcy50b0FycmF5KCkuc29ydChzb3J0Rm4pO1xuICAgIHJldHVybiB0aGlzLnNwYXduKHNvcnRlZCk7XG4gIH0sXG4gIHNvcnRCeVpJbmRleDogZnVuY3Rpb24gc29ydEJ5WkluZGV4KCkge1xuICAgIHJldHVybiB0aGlzLnNvcnQoekluZGV4U29ydCk7XG4gIH0sXG4gIHpEZXB0aDogZnVuY3Rpb24gekRlcHRoKCkge1xuICAgIHZhciBlbGUgPSB0aGlzWzBdO1xuICAgIGlmICghZWxlKSB7XG4gICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cblxuICAgIC8vIGxldCBjeSA9IGVsZS5jeSgpO1xuICAgIHZhciBfcCA9IGVsZS5fcHJpdmF0ZTtcbiAgICB2YXIgZ3JvdXAgPSBfcC5ncm91cDtcbiAgICBpZiAoZ3JvdXAgPT09ICdub2RlcycpIHtcbiAgICAgIHZhciBkZXB0aCA9IF9wLmRhdGEucGFyZW50ID8gZWxlLnBhcmVudHMoKS5zaXplKCkgOiAwO1xuICAgICAgaWYgKCFlbGUuaXNQYXJlbnQoKSkge1xuICAgICAgICByZXR1cm4gTUFYX0lOVCQxIC0gMTsgLy8gY2hpbGRsZXNzIG5vZGVzIGFsd2F5cyBvbiB0b3BcbiAgICAgIH1cbiAgICAgIHJldHVybiBkZXB0aDtcbiAgICB9IGVsc2Uge1xuICAgICAgdmFyIHNyYyA9IF9wLnNvdXJjZTtcbiAgICAgIHZhciB0Z3QgPSBfcC50YXJnZXQ7XG4gICAgICB2YXIgc3JjRGVwdGggPSBzcmMuekRlcHRoKCk7XG4gICAgICB2YXIgdGd0RGVwdGggPSB0Z3QuekRlcHRoKCk7XG4gICAgICByZXR1cm4gTWF0aC5tYXgoc3JjRGVwdGgsIHRndERlcHRoLCAwKTsgLy8gZGVwdGggb2YgZGVlcGVzdCBwYXJlbnRcbiAgICB9XG4gIH1cbn07XG5lbGVzZm4kNi5lYWNoID0gZWxlc2ZuJDYuZm9yRWFjaDtcbnZhciBkZWZpbmVTeW1ib2xJdGVyYXRvciA9IGZ1bmN0aW9uIGRlZmluZVN5bWJvbEl0ZXJhdG9yKCkge1xuICB2YXIgdHlwZW9mVW5kZWYgPSBcInVuZGVmaW5lZFwiIDtcbiAgdmFyIGlzSXRlcmF0b3JTdXBwb3J0ZWQgPSAodHlwZW9mIFN5bWJvbCA9PT0gXCJ1bmRlZmluZWRcIiA/IFwidW5kZWZpbmVkXCIgOiBfdHlwZW9mKFN5bWJvbCkpICE9IHR5cGVvZlVuZGVmICYmIF90eXBlb2YoU3ltYm9sLml0ZXJhdG9yKSAhPSB0eXBlb2ZVbmRlZjtcbiAgaWYgKGlzSXRlcmF0b3JTdXBwb3J0ZWQpIHtcbiAgICBlbGVzZm4kNltTeW1ib2wuaXRlcmF0b3JdID0gZnVuY3Rpb24gKCkge1xuICAgICAgdmFyIF90aGlzID0gdGhpcztcbiAgICAgIHZhciBlbnRyeSA9IHtcbiAgICAgICAgdmFsdWU6IHVuZGVmaW5lZCxcbiAgICAgICAgZG9uZTogZmFsc2VcbiAgICAgIH07XG4gICAgICB2YXIgaSA9IDA7XG4gICAgICB2YXIgbGVuZ3RoID0gdGhpcy5sZW5ndGg7XG4gICAgICByZXR1cm4gX2RlZmluZVByb3BlcnR5JDEoe1xuICAgICAgICBuZXh0OiBmdW5jdGlvbiBuZXh0KCkge1xuICAgICAgICAgIGlmIChpIDwgbGVuZ3RoKSB7XG4gICAgICAgICAgICBlbnRyeS52YWx1ZSA9IF90aGlzW2krK107XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGVudHJ5LnZhbHVlID0gdW5kZWZpbmVkO1xuICAgICAgICAgICAgZW50cnkuZG9uZSA9IHRydWU7XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiBlbnRyeTtcbiAgICAgICAgfVxuICAgICAgfSwgU3ltYm9sLml0ZXJhdG9yLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgICAgfSk7XG4gICAgfTtcbiAgfVxufTtcbmRlZmluZVN5bWJvbEl0ZXJhdG9yKCk7XG5cbnZhciBnZXRMYXlvdXREaW1lbnNpb25PcHRpb25zID0gZGVmYXVsdHMkZyh7XG4gIG5vZGVEaW1lbnNpb25zSW5jbHVkZUxhYmVsczogZmFsc2Vcbn0pO1xudmFyIGVsZXNmbiQ1ID0ge1xuICAvLyBDYWxjdWxhdGVzIGFuZCByZXR1cm5zIG5vZGUgZGltZW5zaW9ucyB7IHgsIHkgfSBiYXNlZCBvbiBvcHRpb25zIGdpdmVuXG4gIGxheW91dERpbWVuc2lvbnM6IGZ1bmN0aW9uIGxheW91dERpbWVuc2lvbnMob3B0aW9ucykge1xuICAgIG9wdGlvbnMgPSBnZXRMYXlvdXREaW1lbnNpb25PcHRpb25zKG9wdGlvbnMpO1xuICAgIHZhciBkaW1zO1xuICAgIGlmICghdGhpcy50YWtlc1VwU3BhY2UoKSkge1xuICAgICAgZGltcyA9IHtcbiAgICAgICAgdzogMCxcbiAgICAgICAgaDogMFxuICAgICAgfTtcbiAgICB9IGVsc2UgaWYgKG9wdGlvbnMubm9kZURpbWVuc2lvbnNJbmNsdWRlTGFiZWxzKSB7XG4gICAgICB2YXIgYmJEaW0gPSB0aGlzLmJvdW5kaW5nQm94KCk7XG4gICAgICBkaW1zID0ge1xuICAgICAgICB3OiBiYkRpbS53LFxuICAgICAgICBoOiBiYkRpbS5oXG4gICAgICB9O1xuICAgIH0gZWxzZSB7XG4gICAgICBkaW1zID0ge1xuICAgICAgICB3OiB0aGlzLm91dGVyV2lkdGgoKSxcbiAgICAgICAgaDogdGhpcy5vdXRlckhlaWdodCgpXG4gICAgICB9O1xuICAgIH1cblxuICAgIC8vIHNhbml0aXNlIHRoZSBkaW1lbnNpb25zIGZvciBleHRlcm5hbCBsYXlvdXRzIChhdm9pZCBkaXZpc2lvbiBieSB6ZXJvKVxuICAgIGlmIChkaW1zLncgPT09IDAgfHwgZGltcy5oID09PSAwKSB7XG4gICAgICBkaW1zLncgPSBkaW1zLmggPSAxO1xuICAgIH1cbiAgICByZXR1cm4gZGltcztcbiAgfSxcbiAgLy8gdXNpbmcgc3RhbmRhcmQgbGF5b3V0IG9wdGlvbnMsIGFwcGx5IHBvc2l0aW9uIGZ1bmN0aW9uICh3LyBvciB3L28gYW5pbWF0aW9uKVxuICBsYXlvdXRQb3NpdGlvbnM6IGZ1bmN0aW9uIGxheW91dFBvc2l0aW9ucyhsYXlvdXQsIG9wdGlvbnMsIGZuKSB7XG4gICAgdmFyIG5vZGVzID0gdGhpcy5ub2RlcygpLmZpbHRlcihmdW5jdGlvbiAobikge1xuICAgICAgcmV0dXJuICFuLmlzUGFyZW50KCk7XG4gICAgfSk7XG4gICAgdmFyIGN5ID0gdGhpcy5jeSgpO1xuICAgIHZhciBsYXlvdXRFbGVzID0gb3B0aW9ucy5lbGVzOyAvLyBub2RlcyAmIGVkZ2VzXG4gICAgdmFyIGdldE1lbW9pemVLZXkgPSBmdW5jdGlvbiBnZXRNZW1vaXplS2V5KG5vZGUpIHtcbiAgICAgIHJldHVybiBub2RlLmlkKCk7XG4gICAgfTtcbiAgICB2YXIgZm5NZW0gPSBtZW1vaXplKGZuLCBnZXRNZW1vaXplS2V5KTsgLy8gbWVtb2l6ZWQgdmVyc2lvbiBvZiBwb3NpdGlvbiBmdW5jdGlvblxuXG4gICAgbGF5b3V0LmVtaXQoe1xuICAgICAgdHlwZTogJ2xheW91dHN0YXJ0JyxcbiAgICAgIGxheW91dDogbGF5b3V0XG4gICAgfSk7XG4gICAgbGF5b3V0LmFuaW1hdGlvbnMgPSBbXTtcbiAgICB2YXIgY2FsY3VsYXRlU3BhY2luZyA9IGZ1bmN0aW9uIGNhbGN1bGF0ZVNwYWNpbmcoc3BhY2luZywgbm9kZXNCYiwgcG9zKSB7XG4gICAgICB2YXIgY2VudGVyID0ge1xuICAgICAgICB4OiBub2Rlc0JiLngxICsgbm9kZXNCYi53IC8gMixcbiAgICAgICAgeTogbm9kZXNCYi55MSArIG5vZGVzQmIuaCAvIDJcbiAgICAgIH07XG4gICAgICB2YXIgc3BhY2luZ1ZlY3RvciA9IHtcbiAgICAgICAgLy8gc2NhbGUgZnJvbSBjZW50ZXIgb2YgYm91bmRpbmcgYm94IChub3QgbmVjZXNzYXJpbHkgMCwwKVxuICAgICAgICB4OiAocG9zLnggLSBjZW50ZXIueCkgKiBzcGFjaW5nLFxuICAgICAgICB5OiAocG9zLnkgLSBjZW50ZXIueSkgKiBzcGFjaW5nXG4gICAgICB9O1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgeDogY2VudGVyLnggKyBzcGFjaW5nVmVjdG9yLngsXG4gICAgICAgIHk6IGNlbnRlci55ICsgc3BhY2luZ1ZlY3Rvci55XG4gICAgICB9O1xuICAgIH07XG4gICAgdmFyIHVzZVNwYWNpbmdGYWN0b3IgPSBvcHRpb25zLnNwYWNpbmdGYWN0b3IgJiYgb3B0aW9ucy5zcGFjaW5nRmFjdG9yICE9PSAxO1xuICAgIHZhciBzcGFjaW5nQmIgPSBmdW5jdGlvbiBzcGFjaW5nQmIoKSB7XG4gICAgICBpZiAoIXVzZVNwYWNpbmdGYWN0b3IpIHtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICB9XG4gICAgICB2YXIgYmIgPSBtYWtlQm91bmRpbmdCb3goKTtcbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbm9kZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgdmFyIG5vZGUgPSBub2Rlc1tpXTtcbiAgICAgICAgdmFyIHBvcyA9IGZuTWVtKG5vZGUsIGkpO1xuICAgICAgICBleHBhbmRCb3VuZGluZ0JveEJ5UG9pbnQoYmIsIHBvcy54LCBwb3MueSk7XG4gICAgICB9XG4gICAgICByZXR1cm4gYmI7XG4gICAgfTtcbiAgICB2YXIgYmIgPSBzcGFjaW5nQmIoKTtcbiAgICB2YXIgZ2V0RmluYWxQb3MgPSBtZW1vaXplKGZ1bmN0aW9uIChub2RlLCBpKSB7XG4gICAgICB2YXIgbmV3UG9zID0gZm5NZW0obm9kZSwgaSk7XG4gICAgICBpZiAodXNlU3BhY2luZ0ZhY3Rvcikge1xuICAgICAgICB2YXIgc3BhY2luZyA9IE1hdGguYWJzKG9wdGlvbnMuc3BhY2luZ0ZhY3Rvcik7XG4gICAgICAgIG5ld1BvcyA9IGNhbGN1bGF0ZVNwYWNpbmcoc3BhY2luZywgYmIsIG5ld1Bvcyk7XG4gICAgICB9XG4gICAgICBpZiAob3B0aW9ucy50cmFuc2Zvcm0gIT0gbnVsbCkge1xuICAgICAgICBuZXdQb3MgPSBvcHRpb25zLnRyYW5zZm9ybShub2RlLCBuZXdQb3MpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIG5ld1BvcztcbiAgICB9LCBnZXRNZW1vaXplS2V5KTtcbiAgICBpZiAob3B0aW9ucy5hbmltYXRlKSB7XG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IG5vZGVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIHZhciBub2RlID0gbm9kZXNbaV07XG4gICAgICAgIHZhciBuZXdQb3MgPSBnZXRGaW5hbFBvcyhub2RlLCBpKTtcbiAgICAgICAgdmFyIGFuaW1hdGVOb2RlID0gb3B0aW9ucy5hbmltYXRlRmlsdGVyID09IG51bGwgfHwgb3B0aW9ucy5hbmltYXRlRmlsdGVyKG5vZGUsIGkpO1xuICAgICAgICBpZiAoYW5pbWF0ZU5vZGUpIHtcbiAgICAgICAgICB2YXIgYW5pID0gbm9kZS5hbmltYXRpb24oe1xuICAgICAgICAgICAgcG9zaXRpb246IG5ld1BvcyxcbiAgICAgICAgICAgIGR1cmF0aW9uOiBvcHRpb25zLmFuaW1hdGlvbkR1cmF0aW9uLFxuICAgICAgICAgICAgZWFzaW5nOiBvcHRpb25zLmFuaW1hdGlvbkVhc2luZ1xuICAgICAgICAgIH0pO1xuICAgICAgICAgIGxheW91dC5hbmltYXRpb25zLnB1c2goYW5pKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBub2RlLnBvc2l0aW9uKG5ld1Bvcyk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmIChvcHRpb25zLmZpdCkge1xuICAgICAgICB2YXIgZml0QW5pID0gY3kuYW5pbWF0aW9uKHtcbiAgICAgICAgICBmaXQ6IHtcbiAgICAgICAgICAgIGJvdW5kaW5nQm94OiBsYXlvdXRFbGVzLmJvdW5kaW5nQm94QXQoZ2V0RmluYWxQb3MpLFxuICAgICAgICAgICAgcGFkZGluZzogb3B0aW9ucy5wYWRkaW5nXG4gICAgICAgICAgfSxcbiAgICAgICAgICBkdXJhdGlvbjogb3B0aW9ucy5hbmltYXRpb25EdXJhdGlvbixcbiAgICAgICAgICBlYXNpbmc6IG9wdGlvbnMuYW5pbWF0aW9uRWFzaW5nXG4gICAgICAgIH0pO1xuICAgICAgICBsYXlvdXQuYW5pbWF0aW9ucy5wdXNoKGZpdEFuaSk7XG4gICAgICB9IGVsc2UgaWYgKG9wdGlvbnMuem9vbSAhPT0gdW5kZWZpbmVkICYmIG9wdGlvbnMucGFuICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgdmFyIHpvb21QYW5BbmkgPSBjeS5hbmltYXRpb24oe1xuICAgICAgICAgIHpvb206IG9wdGlvbnMuem9vbSxcbiAgICAgICAgICBwYW46IG9wdGlvbnMucGFuLFxuICAgICAgICAgIGR1cmF0aW9uOiBvcHRpb25zLmFuaW1hdGlvbkR1cmF0aW9uLFxuICAgICAgICAgIGVhc2luZzogb3B0aW9ucy5hbmltYXRpb25FYXNpbmdcbiAgICAgICAgfSk7XG4gICAgICAgIGxheW91dC5hbmltYXRpb25zLnB1c2goem9vbVBhbkFuaSk7XG4gICAgICB9XG4gICAgICBsYXlvdXQuYW5pbWF0aW9ucy5mb3JFYWNoKGZ1bmN0aW9uIChhbmkpIHtcbiAgICAgICAgcmV0dXJuIGFuaS5wbGF5KCk7XG4gICAgICB9KTtcbiAgICAgIGxheW91dC5vbmUoJ2xheW91dHJlYWR5Jywgb3B0aW9ucy5yZWFkeSk7XG4gICAgICBsYXlvdXQuZW1pdCh7XG4gICAgICAgIHR5cGU6ICdsYXlvdXRyZWFkeScsXG4gICAgICAgIGxheW91dDogbGF5b3V0XG4gICAgICB9KTtcbiAgICAgIFByb21pc2UkMS5hbGwobGF5b3V0LmFuaW1hdGlvbnMubWFwKGZ1bmN0aW9uIChhbmkpIHtcbiAgICAgICAgcmV0dXJuIGFuaS5wcm9taXNlKCk7XG4gICAgICB9KSkudGhlbihmdW5jdGlvbiAoKSB7XG4gICAgICAgIGxheW91dC5vbmUoJ2xheW91dHN0b3AnLCBvcHRpb25zLnN0b3ApO1xuICAgICAgICBsYXlvdXQuZW1pdCh7XG4gICAgICAgICAgdHlwZTogJ2xheW91dHN0b3AnLFxuICAgICAgICAgIGxheW91dDogbGF5b3V0XG4gICAgICAgIH0pO1xuICAgICAgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIG5vZGVzLnBvc2l0aW9ucyhnZXRGaW5hbFBvcyk7XG4gICAgICBpZiAob3B0aW9ucy5maXQpIHtcbiAgICAgICAgY3kuZml0KG9wdGlvbnMuZWxlcywgb3B0aW9ucy5wYWRkaW5nKTtcbiAgICAgIH1cbiAgICAgIGlmIChvcHRpb25zLnpvb20gIT0gbnVsbCkge1xuICAgICAgICBjeS56b29tKG9wdGlvbnMuem9vbSk7XG4gICAgICB9XG4gICAgICBpZiAob3B0aW9ucy5wYW4pIHtcbiAgICAgICAgY3kucGFuKG9wdGlvbnMucGFuKTtcbiAgICAgIH1cbiAgICAgIGxheW91dC5vbmUoJ2xheW91dHJlYWR5Jywgb3B0aW9ucy5yZWFkeSk7XG4gICAgICBsYXlvdXQuZW1pdCh7XG4gICAgICAgIHR5cGU6ICdsYXlvdXRyZWFkeScsXG4gICAgICAgIGxheW91dDogbGF5b3V0XG4gICAgICB9KTtcbiAgICAgIGxheW91dC5vbmUoJ2xheW91dHN0b3AnLCBvcHRpb25zLnN0b3ApO1xuICAgICAgbGF5b3V0LmVtaXQoe1xuICAgICAgICB0eXBlOiAnbGF5b3V0c3RvcCcsXG4gICAgICAgIGxheW91dDogbGF5b3V0XG4gICAgICB9KTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXM7IC8vIGNoYWluaW5nXG4gIH0sXG4gIGxheW91dDogZnVuY3Rpb24gbGF5b3V0KG9wdGlvbnMpIHtcbiAgICB2YXIgY3kgPSB0aGlzLmN5KCk7XG4gICAgcmV0dXJuIGN5Lm1ha2VMYXlvdXQoZXh0ZW5kKHt9LCBvcHRpb25zLCB7XG4gICAgICBlbGVzOiB0aGlzXG4gICAgfSkpO1xuICB9XG59O1xuXG4vLyBhbGlhc2VzOlxuZWxlc2ZuJDUuY3JlYXRlTGF5b3V0ID0gZWxlc2ZuJDUubWFrZUxheW91dCA9IGVsZXNmbiQ1LmxheW91dDtcblxuZnVuY3Rpb24gc3R5bGVDYWNoZShrZXksIGZuLCBlbGUpIHtcbiAgdmFyIF9wID0gZWxlLl9wcml2YXRlO1xuICB2YXIgY2FjaGUgPSBfcC5zdHlsZUNhY2hlID0gX3Auc3R5bGVDYWNoZSB8fCBbXTtcbiAgdmFyIHZhbDtcbiAgaWYgKCh2YWwgPSBjYWNoZVtrZXldKSAhPSBudWxsKSB7XG4gICAgcmV0dXJuIHZhbDtcbiAgfSBlbHNlIHtcbiAgICB2YWwgPSBjYWNoZVtrZXldID0gZm4oZWxlKTtcbiAgICByZXR1cm4gdmFsO1xuICB9XG59XG5mdW5jdGlvbiBjYWNoZVN0eWxlRnVuY3Rpb24oa2V5LCBmbikge1xuICBrZXkgPSBoYXNoU3RyaW5nKGtleSk7XG4gIHJldHVybiBmdW5jdGlvbiBjYWNoZWRTdHlsZUZ1bmN0aW9uKGVsZSkge1xuICAgIHJldHVybiBzdHlsZUNhY2hlKGtleSwgZm4sIGVsZSk7XG4gIH07XG59XG5mdW5jdGlvbiBjYWNoZVByb3RvdHlwZVN0eWxlRnVuY3Rpb24oa2V5LCBmbikge1xuICBrZXkgPSBoYXNoU3RyaW5nKGtleSk7XG4gIHZhciBzZWxmRm4gPSBmdW5jdGlvbiBzZWxmRm4oZWxlKSB7XG4gICAgcmV0dXJuIGZuLmNhbGwoZWxlKTtcbiAgfTtcbiAgcmV0dXJuIGZ1bmN0aW9uIGNhY2hlZFByb3RvdHlwZVN0eWxlRnVuY3Rpb24oKSB7XG4gICAgdmFyIGVsZSA9IHRoaXNbMF07XG4gICAgaWYgKGVsZSkge1xuICAgICAgcmV0dXJuIHN0eWxlQ2FjaGUoa2V5LCBzZWxmRm4sIGVsZSk7XG4gICAgfVxuICB9O1xufVxudmFyIGVsZXNmbiQ0ID0ge1xuICByZWNhbGN1bGF0ZVJlbmRlcmVkU3R5bGU6IGZ1bmN0aW9uIHJlY2FsY3VsYXRlUmVuZGVyZWRTdHlsZSh1c2VDYWNoZSkge1xuICAgIHZhciBjeSA9IHRoaXMuY3koKTtcbiAgICB2YXIgcmVuZGVyZXIgPSBjeS5yZW5kZXJlcigpO1xuICAgIHZhciBzdHlsZUVuYWJsZWQgPSBjeS5zdHlsZUVuYWJsZWQoKTtcbiAgICBpZiAocmVuZGVyZXIgJiYgc3R5bGVFbmFibGVkKSB7XG4gICAgICByZW5kZXJlci5yZWNhbGN1bGF0ZVJlbmRlcmVkU3R5bGUodGhpcywgdXNlQ2FjaGUpO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcztcbiAgfSxcbiAgZGlydHlTdHlsZUNhY2hlOiBmdW5jdGlvbiBkaXJ0eVN0eWxlQ2FjaGUoKSB7XG4gICAgdmFyIGN5ID0gdGhpcy5jeSgpO1xuICAgIHZhciBkaXJ0eSA9IGZ1bmN0aW9uIGRpcnR5KGVsZSkge1xuICAgICAgcmV0dXJuIGVsZS5fcHJpdmF0ZS5zdHlsZUNhY2hlID0gbnVsbDtcbiAgICB9O1xuICAgIGlmIChjeS5oYXNDb21wb3VuZE5vZGVzKCkpIHtcbiAgICAgIHZhciBlbGVzO1xuICAgICAgZWxlcyA9IHRoaXMuc3Bhd25TZWxmKCkubWVyZ2UodGhpcy5kZXNjZW5kYW50cygpKS5tZXJnZSh0aGlzLnBhcmVudHMoKSk7XG4gICAgICBlbGVzLm1lcmdlKGVsZXMuY29ubmVjdGVkRWRnZXMoKSk7XG4gICAgICBlbGVzLmZvckVhY2goZGlydHkpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmZvckVhY2goZnVuY3Rpb24gKGVsZSkge1xuICAgICAgICBkaXJ0eShlbGUpO1xuICAgICAgICBlbGUuY29ubmVjdGVkRWRnZXMoKS5mb3JFYWNoKGRpcnR5KTtcbiAgICAgIH0pO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcztcbiAgfSxcbiAgLy8gZnVsbHkgdXBkYXRlcyAocmVjYWxjdWxhdGVzKSB0aGUgc3R5bGUgZm9yIHRoZSBlbGVtZW50c1xuICB1cGRhdGVTdHlsZTogZnVuY3Rpb24gdXBkYXRlU3R5bGUobm90aWZ5UmVuZGVyZXIpIHtcbiAgICB2YXIgY3kgPSB0aGlzLl9wcml2YXRlLmN5O1xuICAgIGlmICghY3kuc3R5bGVFbmFibGVkKCkpIHtcbiAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cbiAgICBpZiAoY3kuYmF0Y2hpbmcoKSkge1xuICAgICAgdmFyIGJFbGVzID0gY3kuX3ByaXZhdGUuYmF0Y2hTdHlsZUVsZXM7XG4gICAgICBiRWxlcy5tZXJnZSh0aGlzKTtcbiAgICAgIHJldHVybiB0aGlzOyAvLyBjaGFpbmluZyBhbmQgZXhpdCBlYXJseSB3aGVuIGJhdGNoaW5nXG4gICAgfVxuICAgIHZhciBoYXNDb21wb3VuZHMgPSBjeS5oYXNDb21wb3VuZE5vZGVzKCk7XG4gICAgdmFyIHVwZGF0ZWRFbGVzID0gdGhpcztcbiAgICBub3RpZnlSZW5kZXJlciA9IG5vdGlmeVJlbmRlcmVyIHx8IG5vdGlmeVJlbmRlcmVyID09PSB1bmRlZmluZWQgPyB0cnVlIDogZmFsc2U7XG4gICAgaWYgKGhhc0NvbXBvdW5kcykge1xuICAgICAgLy8gdGhlbiBhZGQgZXZlcnl0aGluZyB1cCBhbmQgZG93biBmb3IgY29tcG91bmQgc2VsZWN0b3IgY2hlY2tzXG4gICAgICB1cGRhdGVkRWxlcyA9IHRoaXMuc3Bhd25TZWxmKCkubWVyZ2UodGhpcy5kZXNjZW5kYW50cygpKS5tZXJnZSh0aGlzLnBhcmVudHMoKSk7XG4gICAgfVxuXG4gICAgLy8gbGV0IGNoYW5nZWRFbGVzID0gc3R5bGUuYXBwbHkoIHVwZGF0ZWRFbGVzICk7XG4gICAgdmFyIGNoYW5nZWRFbGVzID0gdXBkYXRlZEVsZXM7XG4gICAgaWYgKG5vdGlmeVJlbmRlcmVyKSB7XG4gICAgICBjaGFuZ2VkRWxlcy5lbWl0QW5kTm90aWZ5KCdzdHlsZScpOyAvLyBsZXQgcmVuZGVyZXIga25vdyB3ZSBjaGFuZ2VkIHN0eWxlXG4gICAgfSBlbHNlIHtcbiAgICAgIGNoYW5nZWRFbGVzLmVtaXQoJ3N0eWxlJyk7IC8vIGp1c3QgZmlyZSB0aGUgZXZlbnRcbiAgICB9XG4gICAgdXBkYXRlZEVsZXMuZm9yRWFjaChmdW5jdGlvbiAoZWxlKSB7XG4gICAgICByZXR1cm4gZWxlLl9wcml2YXRlLnN0eWxlRGlydHkgPSB0cnVlO1xuICAgIH0pO1xuICAgIHJldHVybiB0aGlzOyAvLyBjaGFpbmluZ1xuICB9LFxuICAvLyBwcml2YXRlOiBjbGVhcnMgZGlydHkgZmxhZyBhbmQgcmVjYWxjdWxhdGVzIHN0eWxlXG4gIGNsZWFuU3R5bGU6IGZ1bmN0aW9uIGNsZWFuU3R5bGUoKSB7XG4gICAgdmFyIGN5ID0gdGhpcy5jeSgpO1xuICAgIGlmICghY3kuc3R5bGVFbmFibGVkKCkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLmxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIgZWxlID0gdGhpc1tpXTtcbiAgICAgIGlmIChlbGUuX3ByaXZhdGUuc3R5bGVEaXJ0eSkge1xuICAgICAgICAvLyBuLmIuIHRoaXMgZmxhZyBzaG91bGQgYmUgc2V0IGJlZm9yZSBhcHBseSgpIHRvIGF2b2lkIHBvdGVudGlhbCBpbmZpbml0ZSByZWN1cnNpb25cbiAgICAgICAgZWxlLl9wcml2YXRlLnN0eWxlRGlydHkgPSBmYWxzZTtcbiAgICAgICAgY3kuc3R5bGUoKS5hcHBseShlbGUpO1xuICAgICAgfVxuICAgIH1cbiAgfSxcbiAgLy8gZ2V0IHRoZSBpbnRlcm5hbCBwYXJzZWQgc3R5bGUgb2JqZWN0IGZvciB0aGUgc3BlY2lmaWVkIHByb3BlcnR5XG4gIHBhcnNlZFN0eWxlOiBmdW5jdGlvbiBwYXJzZWRTdHlsZShwcm9wZXJ0eSkge1xuICAgIHZhciBpbmNsdWRlTm9uRGVmYXVsdCA9IGFyZ3VtZW50cy5sZW5ndGggPiAxICYmIGFyZ3VtZW50c1sxXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzFdIDogdHJ1ZTtcbiAgICB2YXIgZWxlID0gdGhpc1swXTtcbiAgICB2YXIgY3kgPSBlbGUuY3koKTtcbiAgICBpZiAoIWN5LnN0eWxlRW5hYmxlZCgpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmIChlbGUpIHtcbiAgICAgIC8vIHRoaXMuY2xlYW5TdHlsZSgpO1xuXG4gICAgICAvLyBJbmxpbmUgdGhlIGltcG9ydGFudCBwYXJ0IG9mIGNsZWFuU3R5bGUoKSwgZm9yIHJhdyBwZXJmb3JtYW5jZVxuICAgICAgaWYgKGVsZS5fcHJpdmF0ZS5zdHlsZURpcnR5KSB7XG4gICAgICAgIC8vIG4uYi4gdGhpcyBmbGFnIHNob3VsZCBiZSBzZXQgYmVmb3JlIGFwcGx5KCkgdG8gYXZvaWQgcG90ZW50aWFsIGluZmluaXRlIHJlY3Vyc2lvblxuICAgICAgICBlbGUuX3ByaXZhdGUuc3R5bGVEaXJ0eSA9IGZhbHNlO1xuICAgICAgICBjeS5zdHlsZSgpLmFwcGx5KGVsZSk7XG4gICAgICB9XG4gICAgICB2YXIgb3ZlcnJpZGRlblN0eWxlID0gZWxlLl9wcml2YXRlLnN0eWxlW3Byb3BlcnR5XTtcbiAgICAgIGlmIChvdmVycmlkZGVuU3R5bGUgIT0gbnVsbCkge1xuICAgICAgICByZXR1cm4gb3ZlcnJpZGRlblN0eWxlO1xuICAgICAgfSBlbHNlIGlmIChpbmNsdWRlTm9uRGVmYXVsdCkge1xuICAgICAgICByZXR1cm4gY3kuc3R5bGUoKS5nZXREZWZhdWx0UHJvcGVydHkocHJvcGVydHkpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICB9XG4gICAgfVxuICB9LFxuICBudW1lcmljU3R5bGU6IGZ1bmN0aW9uIG51bWVyaWNTdHlsZShwcm9wZXJ0eSkge1xuICAgIHZhciBlbGUgPSB0aGlzWzBdO1xuICAgIGlmICghZWxlLmN5KCkuc3R5bGVFbmFibGVkKCkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaWYgKGVsZSkge1xuICAgICAgdmFyIHBzdHlsZSA9IGVsZS5wc3R5bGUocHJvcGVydHkpO1xuICAgICAgcmV0dXJuIHBzdHlsZS5wZlZhbHVlICE9PSB1bmRlZmluZWQgPyBwc3R5bGUucGZWYWx1ZSA6IHBzdHlsZS52YWx1ZTtcbiAgICB9XG4gIH0sXG4gIG51bWVyaWNTdHlsZVVuaXRzOiBmdW5jdGlvbiBudW1lcmljU3R5bGVVbml0cyhwcm9wZXJ0eSkge1xuICAgIHZhciBlbGUgPSB0aGlzWzBdO1xuICAgIGlmICghZWxlLmN5KCkuc3R5bGVFbmFibGVkKCkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaWYgKGVsZSkge1xuICAgICAgcmV0dXJuIGVsZS5wc3R5bGUocHJvcGVydHkpLnVuaXRzO1xuICAgIH1cbiAgfSxcbiAgLy8gZ2V0IHRoZSBzcGVjaWZpZWQgY3NzIHByb3BlcnR5IGFzIGEgcmVuZGVyZWQgdmFsdWUgKGkuZS4gb24tc2NyZWVuIHZhbHVlKVxuICAvLyBvciBnZXQgdGhlIHdob2xlIHJlbmRlcmVkIHN0eWxlIGlmIG5vIHByb3BlcnR5IHNwZWNpZmllZCAoTkIgZG9lc24ndCBhbGxvdyBzZXR0aW5nKVxuICByZW5kZXJlZFN0eWxlOiBmdW5jdGlvbiByZW5kZXJlZFN0eWxlKHByb3BlcnR5KSB7XG4gICAgdmFyIGN5ID0gdGhpcy5jeSgpO1xuICAgIGlmICghY3kuc3R5bGVFbmFibGVkKCkpIHtcbiAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cbiAgICB2YXIgZWxlID0gdGhpc1swXTtcbiAgICBpZiAoZWxlKSB7XG4gICAgICByZXR1cm4gY3kuc3R5bGUoKS5nZXRSZW5kZXJlZFN0eWxlKGVsZSwgcHJvcGVydHkpO1xuICAgIH1cbiAgfSxcbiAgLy8gcmVhZCB0aGUgY2FsY3VsYXRlZCBjc3Mgc3R5bGUgb2YgdGhlIGVsZW1lbnQgb3Igb3ZlcnJpZGUgdGhlIHN0eWxlICh2aWEgYSBieXBhc3MpXG4gIHN0eWxlOiBmdW5jdGlvbiBzdHlsZShuYW1lLCB2YWx1ZSkge1xuICAgIHZhciBjeSA9IHRoaXMuY3koKTtcbiAgICBpZiAoIWN5LnN0eWxlRW5hYmxlZCgpKSB7XG4gICAgICByZXR1cm4gdGhpcztcbiAgICB9XG4gICAgdmFyIHVwZGF0ZVRyYW5zaXRpb25zID0gZmFsc2U7XG4gICAgdmFyIHN0eWxlID0gY3kuc3R5bGUoKTtcbiAgICBpZiAocGxhaW5PYmplY3QobmFtZSkpIHtcbiAgICAgIC8vIHRoZW4gZXh0ZW5kIHRoZSBieXBhc3NcbiAgICAgIHZhciBwcm9wcyA9IG5hbWU7XG4gICAgICBzdHlsZS5hcHBseUJ5cGFzcyh0aGlzLCBwcm9wcywgdXBkYXRlVHJhbnNpdGlvbnMpO1xuICAgICAgdGhpcy5lbWl0QW5kTm90aWZ5KCdzdHlsZScpOyAvLyBsZXQgdGhlIHJlbmRlcmVyIGtub3cgd2UndmUgdXBkYXRlZCBzdHlsZVxuICAgIH0gZWxzZSBpZiAoc3RyaW5nKG5hbWUpKSB7XG4gICAgICBpZiAodmFsdWUgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAvLyB0aGVuIGdldCB0aGUgcHJvcGVydHkgZnJvbSB0aGUgc3R5bGVcbiAgICAgICAgdmFyIGVsZSA9IHRoaXNbMF07XG4gICAgICAgIGlmIChlbGUpIHtcbiAgICAgICAgICByZXR1cm4gc3R5bGUuZ2V0U3R5bGVQcm9wZXJ0eVZhbHVlKGVsZSwgbmFtZSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgLy8gZW1wdHkgY29sbGVjdGlvbiA9PiBjYW4ndCBnZXQgYW55IHZhbHVlXG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyB0aGVuIHNldCB0aGUgYnlwYXNzIHdpdGggdGhlIHByb3BlcnR5IHZhbHVlXG4gICAgICAgIHN0eWxlLmFwcGx5QnlwYXNzKHRoaXMsIG5hbWUsIHZhbHVlLCB1cGRhdGVUcmFuc2l0aW9ucyk7XG4gICAgICAgIHRoaXMuZW1pdEFuZE5vdGlmeSgnc3R5bGUnKTsgLy8gbGV0IHRoZSByZW5kZXJlciBrbm93IHdlJ3ZlIHVwZGF0ZWQgc3R5bGVcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKG5hbWUgPT09IHVuZGVmaW5lZCkge1xuICAgICAgdmFyIF9lbGUgPSB0aGlzWzBdO1xuICAgICAgaWYgKF9lbGUpIHtcbiAgICAgICAgcmV0dXJuIHN0eWxlLmdldFJhd1N0eWxlKF9lbGUpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gZW1wdHkgY29sbGVjdGlvbiA9PiBjYW4ndCBnZXQgYW55IHZhbHVlXG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHRoaXM7IC8vIGNoYWluaW5nXG4gIH0sXG4gIHJlbW92ZVN0eWxlOiBmdW5jdGlvbiByZW1vdmVTdHlsZShuYW1lcykge1xuICAgIHZhciBjeSA9IHRoaXMuY3koKTtcbiAgICBpZiAoIWN5LnN0eWxlRW5hYmxlZCgpKSB7XG4gICAgICByZXR1cm4gdGhpcztcbiAgICB9XG4gICAgdmFyIHVwZGF0ZVRyYW5zaXRpb25zID0gZmFsc2U7XG4gICAgdmFyIHN0eWxlID0gY3kuc3R5bGUoKTtcbiAgICB2YXIgZWxlcyA9IHRoaXM7XG4gICAgaWYgKG5hbWVzID09PSB1bmRlZmluZWQpIHtcbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZWxlcy5sZW5ndGg7IGkrKykge1xuICAgICAgICB2YXIgZWxlID0gZWxlc1tpXTtcbiAgICAgICAgc3R5bGUucmVtb3ZlQWxsQnlwYXNzZXMoZWxlLCB1cGRhdGVUcmFuc2l0aW9ucyk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIG5hbWVzID0gbmFtZXMuc3BsaXQoL1xccysvKTtcbiAgICAgIGZvciAodmFyIF9pID0gMDsgX2kgPCBlbGVzLmxlbmd0aDsgX2krKykge1xuICAgICAgICB2YXIgX2VsZTIgPSBlbGVzW19pXTtcbiAgICAgICAgc3R5bGUucmVtb3ZlQnlwYXNzZXMoX2VsZTIsIG5hbWVzLCB1cGRhdGVUcmFuc2l0aW9ucyk7XG4gICAgICB9XG4gICAgfVxuICAgIHRoaXMuZW1pdEFuZE5vdGlmeSgnc3R5bGUnKTsgLy8gbGV0IHRoZSByZW5kZXJlciBrbm93IHdlJ3ZlIHVwZGF0ZWQgc3R5bGVcblxuICAgIHJldHVybiB0aGlzOyAvLyBjaGFpbmluZ1xuICB9LFxuICBzaG93OiBmdW5jdGlvbiBzaG93KCkge1xuICAgIHRoaXMuY3NzKCdkaXNwbGF5JywgJ2VsZW1lbnQnKTtcbiAgICByZXR1cm4gdGhpczsgLy8gY2hhaW5pbmdcbiAgfSxcbiAgaGlkZTogZnVuY3Rpb24gaGlkZSgpIHtcbiAgICB0aGlzLmNzcygnZGlzcGxheScsICdub25lJyk7XG4gICAgcmV0dXJuIHRoaXM7IC8vIGNoYWluaW5nXG4gIH0sXG4gIGVmZmVjdGl2ZU9wYWNpdHk6IGZ1bmN0aW9uIGVmZmVjdGl2ZU9wYWNpdHkoKSB7XG4gICAgdmFyIGN5ID0gdGhpcy5jeSgpO1xuICAgIGlmICghY3kuc3R5bGVFbmFibGVkKCkpIHtcbiAgICAgIHJldHVybiAxO1xuICAgIH1cbiAgICB2YXIgaGFzQ29tcG91bmROb2RlcyA9IGN5Lmhhc0NvbXBvdW5kTm9kZXMoKTtcbiAgICB2YXIgZWxlID0gdGhpc1swXTtcbiAgICBpZiAoZWxlKSB7XG4gICAgICB2YXIgX3AgPSBlbGUuX3ByaXZhdGU7XG4gICAgICB2YXIgcGFyZW50T3BhY2l0eSA9IGVsZS5wc3R5bGUoJ29wYWNpdHknKS52YWx1ZTtcbiAgICAgIGlmICghaGFzQ29tcG91bmROb2Rlcykge1xuICAgICAgICByZXR1cm4gcGFyZW50T3BhY2l0eTtcbiAgICAgIH1cbiAgICAgIHZhciBwYXJlbnRzID0gIV9wLmRhdGEucGFyZW50ID8gbnVsbCA6IGVsZS5wYXJlbnRzKCk7XG4gICAgICBpZiAocGFyZW50cykge1xuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHBhcmVudHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICB2YXIgcGFyZW50ID0gcGFyZW50c1tpXTtcbiAgICAgICAgICB2YXIgb3BhY2l0eSA9IHBhcmVudC5wc3R5bGUoJ29wYWNpdHknKS52YWx1ZTtcbiAgICAgICAgICBwYXJlbnRPcGFjaXR5ID0gb3BhY2l0eSAqIHBhcmVudE9wYWNpdHk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiBwYXJlbnRPcGFjaXR5O1xuICAgIH1cbiAgfSxcbiAgdHJhbnNwYXJlbnQ6IGZ1bmN0aW9uIHRyYW5zcGFyZW50KCkge1xuICAgIHZhciBjeSA9IHRoaXMuY3koKTtcbiAgICBpZiAoIWN5LnN0eWxlRW5hYmxlZCgpKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIHZhciBlbGUgPSB0aGlzWzBdO1xuICAgIHZhciBoYXNDb21wb3VuZE5vZGVzID0gZWxlLmN5KCkuaGFzQ29tcG91bmROb2RlcygpO1xuICAgIGlmIChlbGUpIHtcbiAgICAgIGlmICghaGFzQ29tcG91bmROb2Rlcykge1xuICAgICAgICByZXR1cm4gZWxlLnBzdHlsZSgnb3BhY2l0eScpLnZhbHVlID09PSAwO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIGVsZS5lZmZlY3RpdmVPcGFjaXR5KCkgPT09IDA7XG4gICAgICB9XG4gICAgfVxuICB9LFxuICBiYWNrZ3JvdW5kaW5nOiBmdW5jdGlvbiBiYWNrZ3JvdW5kaW5nKCkge1xuICAgIHZhciBjeSA9IHRoaXMuY3koKTtcbiAgICBpZiAoIWN5LnN0eWxlRW5hYmxlZCgpKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIHZhciBlbGUgPSB0aGlzWzBdO1xuICAgIHJldHVybiBlbGUuX3ByaXZhdGUuYmFja2dyb3VuZGluZyA/IHRydWUgOiBmYWxzZTtcbiAgfVxufTtcbmZ1bmN0aW9uIGNoZWNrQ29tcG91bmQoZWxlLCBwYXJlbnRPaykge1xuICB2YXIgX3AgPSBlbGUuX3ByaXZhdGU7XG4gIHZhciBwYXJlbnRzID0gX3AuZGF0YS5wYXJlbnQgPyBlbGUucGFyZW50cygpIDogbnVsbDtcbiAgaWYgKHBhcmVudHMpIHtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHBhcmVudHMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciBwYXJlbnQgPSBwYXJlbnRzW2ldO1xuICAgICAgaWYgKCFwYXJlbnRPayhwYXJlbnQpKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgcmV0dXJuIHRydWU7XG59XG5mdW5jdGlvbiBkZWZpbmVEZXJpdmVkU3RhdGVGdW5jdGlvbihzcGVjcykge1xuICB2YXIgb2sgPSBzcGVjcy5vaztcbiAgdmFyIGVkZ2VPa1ZpYU5vZGUgPSBzcGVjcy5lZGdlT2tWaWFOb2RlIHx8IHNwZWNzLm9rO1xuICB2YXIgcGFyZW50T2sgPSBzcGVjcy5wYXJlbnRPayB8fCBzcGVjcy5vaztcbiAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgY3kgPSB0aGlzLmN5KCk7XG4gICAgaWYgKCFjeS5zdHlsZUVuYWJsZWQoKSkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIHZhciBlbGUgPSB0aGlzWzBdO1xuICAgIHZhciBoYXNDb21wb3VuZE5vZGVzID0gY3kuaGFzQ29tcG91bmROb2RlcygpO1xuICAgIGlmIChlbGUpIHtcbiAgICAgIHZhciBfcCA9IGVsZS5fcHJpdmF0ZTtcbiAgICAgIGlmICghb2soZWxlKSkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gICAgICBpZiAoZWxlLmlzTm9kZSgpKSB7XG4gICAgICAgIHJldHVybiAhaGFzQ29tcG91bmROb2RlcyB8fCBjaGVja0NvbXBvdW5kKGVsZSwgcGFyZW50T2spO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdmFyIHNyYyA9IF9wLnNvdXJjZTtcbiAgICAgICAgdmFyIHRndCA9IF9wLnRhcmdldDtcbiAgICAgICAgcmV0dXJuIGVkZ2VPa1ZpYU5vZGUoc3JjKSAmJiAoIWhhc0NvbXBvdW5kTm9kZXMgfHwgY2hlY2tDb21wb3VuZChzcmMsIGVkZ2VPa1ZpYU5vZGUpKSAmJiAoc3JjID09PSB0Z3QgfHwgZWRnZU9rVmlhTm9kZSh0Z3QpICYmICghaGFzQ29tcG91bmROb2RlcyB8fCBjaGVja0NvbXBvdW5kKHRndCwgZWRnZU9rVmlhTm9kZSkpKTtcbiAgICAgIH1cbiAgICB9XG4gIH07XG59XG52YXIgZWxlVGFrZXNVcFNwYWNlID0gY2FjaGVTdHlsZUZ1bmN0aW9uKCdlbGVUYWtlc1VwU3BhY2UnLCBmdW5jdGlvbiAoZWxlKSB7XG4gIHJldHVybiBlbGUucHN0eWxlKCdkaXNwbGF5JykudmFsdWUgPT09ICdlbGVtZW50JyAmJiBlbGUud2lkdGgoKSAhPT0gMCAmJiAoZWxlLmlzTm9kZSgpID8gZWxlLmhlaWdodCgpICE9PSAwIDogdHJ1ZSk7XG59KTtcbmVsZXNmbiQ0LnRha2VzVXBTcGFjZSA9IGNhY2hlUHJvdG90eXBlU3R5bGVGdW5jdGlvbigndGFrZXNVcFNwYWNlJywgZGVmaW5lRGVyaXZlZFN0YXRlRnVuY3Rpb24oe1xuICBvazogZWxlVGFrZXNVcFNwYWNlXG59KSk7XG52YXIgZWxlSW50ZXJhY3RpdmUgPSBjYWNoZVN0eWxlRnVuY3Rpb24oJ2VsZUludGVyYWN0aXZlJywgZnVuY3Rpb24gKGVsZSkge1xuICByZXR1cm4gZWxlLnBzdHlsZSgnZXZlbnRzJykudmFsdWUgPT09ICd5ZXMnICYmIGVsZS5wc3R5bGUoJ3Zpc2liaWxpdHknKS52YWx1ZSA9PT0gJ3Zpc2libGUnICYmIGVsZVRha2VzVXBTcGFjZShlbGUpO1xufSk7XG52YXIgcGFyZW50SW50ZXJhY3RpdmUgPSBjYWNoZVN0eWxlRnVuY3Rpb24oJ3BhcmVudEludGVyYWN0aXZlJywgZnVuY3Rpb24gKHBhcmVudCkge1xuICByZXR1cm4gcGFyZW50LnBzdHlsZSgndmlzaWJpbGl0eScpLnZhbHVlID09PSAndmlzaWJsZScgJiYgZWxlVGFrZXNVcFNwYWNlKHBhcmVudCk7XG59KTtcbmVsZXNmbiQ0LmludGVyYWN0aXZlID0gY2FjaGVQcm90b3R5cGVTdHlsZUZ1bmN0aW9uKCdpbnRlcmFjdGl2ZScsIGRlZmluZURlcml2ZWRTdGF0ZUZ1bmN0aW9uKHtcbiAgb2s6IGVsZUludGVyYWN0aXZlLFxuICBwYXJlbnRPazogcGFyZW50SW50ZXJhY3RpdmUsXG4gIGVkZ2VPa1ZpYU5vZGU6IGVsZVRha2VzVXBTcGFjZVxufSkpO1xuZWxlc2ZuJDQubm9uaW50ZXJhY3RpdmUgPSBmdW5jdGlvbiAoKSB7XG4gIHZhciBlbGUgPSB0aGlzWzBdO1xuICBpZiAoZWxlKSB7XG4gICAgcmV0dXJuICFlbGUuaW50ZXJhY3RpdmUoKTtcbiAgfVxufTtcbnZhciBlbGVWaXNpYmxlID0gY2FjaGVTdHlsZUZ1bmN0aW9uKCdlbGVWaXNpYmxlJywgZnVuY3Rpb24gKGVsZSkge1xuICByZXR1cm4gZWxlLnBzdHlsZSgndmlzaWJpbGl0eScpLnZhbHVlID09PSAndmlzaWJsZScgJiYgZWxlLnBzdHlsZSgnb3BhY2l0eScpLnBmVmFsdWUgIT09IDAgJiYgZWxlVGFrZXNVcFNwYWNlKGVsZSk7XG59KTtcbnZhciBlZGdlVmlzaWJsZVZpYU5vZGUgPSBlbGVUYWtlc1VwU3BhY2U7XG5lbGVzZm4kNC52aXNpYmxlID0gY2FjaGVQcm90b3R5cGVTdHlsZUZ1bmN0aW9uKCd2aXNpYmxlJywgZGVmaW5lRGVyaXZlZFN0YXRlRnVuY3Rpb24oe1xuICBvazogZWxlVmlzaWJsZSxcbiAgZWRnZU9rVmlhTm9kZTogZWRnZVZpc2libGVWaWFOb2RlXG59KSk7XG5lbGVzZm4kNC5oaWRkZW4gPSBmdW5jdGlvbiAoKSB7XG4gIHZhciBlbGUgPSB0aGlzWzBdO1xuICBpZiAoZWxlKSB7XG4gICAgcmV0dXJuICFlbGUudmlzaWJsZSgpO1xuICB9XG59O1xuZWxlc2ZuJDQuaXNCdW5kbGVkQmV6aWVyID0gY2FjaGVQcm90b3R5cGVTdHlsZUZ1bmN0aW9uKCdpc0J1bmRsZWRCZXppZXInLCBmdW5jdGlvbiAoKSB7XG4gIGlmICghdGhpcy5jeSgpLnN0eWxlRW5hYmxlZCgpKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIHJldHVybiAhdGhpcy5yZW1vdmVkKCkgJiYgdGhpcy5wc3R5bGUoJ2N1cnZlLXN0eWxlJykudmFsdWUgPT09ICdiZXppZXInICYmIHRoaXMudGFrZXNVcFNwYWNlKCk7XG59KTtcbmVsZXNmbiQ0LmJ5cGFzcyA9IGVsZXNmbiQ0LmNzcyA9IGVsZXNmbiQ0LnN0eWxlO1xuZWxlc2ZuJDQucmVuZGVyZWRDc3MgPSBlbGVzZm4kNC5yZW5kZXJlZFN0eWxlO1xuZWxlc2ZuJDQucmVtb3ZlQnlwYXNzID0gZWxlc2ZuJDQucmVtb3ZlQ3NzID0gZWxlc2ZuJDQucmVtb3ZlU3R5bGU7XG5lbGVzZm4kNC5wc3R5bGUgPSBlbGVzZm4kNC5wYXJzZWRTdHlsZTtcblxudmFyIGVsZXNmbiQzID0ge307XG5mdW5jdGlvbiBkZWZpbmVTd2l0Y2hGdW5jdGlvbihwYXJhbXMpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgYXJncyA9IGFyZ3VtZW50cztcbiAgICB2YXIgY2hhbmdlZEVsZXMgPSBbXTtcblxuICAgIC8vIGUuZy4gY3kubm9kZXMoKS5zZWxlY3QoIGRhdGEsIGhhbmRsZXIgKVxuICAgIGlmIChhcmdzLmxlbmd0aCA9PT0gMikge1xuICAgICAgdmFyIGRhdGEgPSBhcmdzWzBdO1xuICAgICAgdmFyIGhhbmRsZXIgPSBhcmdzWzFdO1xuICAgICAgdGhpcy5vbihwYXJhbXMuZXZlbnQsIGRhdGEsIGhhbmRsZXIpO1xuICAgIH1cblxuICAgIC8vIGUuZy4gY3kubm9kZXMoKS5zZWxlY3QoIGhhbmRsZXIgKVxuICAgIGVsc2UgaWYgKGFyZ3MubGVuZ3RoID09PSAxICYmIGZuJDYoYXJnc1swXSkpIHtcbiAgICAgIHZhciBfaGFuZGxlciA9IGFyZ3NbMF07XG4gICAgICB0aGlzLm9uKHBhcmFtcy5ldmVudCwgX2hhbmRsZXIpO1xuICAgIH1cblxuICAgIC8vIGUuZy4gY3kubm9kZXMoKS5zZWxlY3QoKVxuICAgIC8vIGUuZy4gKHByaXZhdGUpIGN5Lm5vZGVzKCkuc2VsZWN0KFsndGFwc2VsZWN0J10pXG4gICAgZWxzZSBpZiAoYXJncy5sZW5ndGggPT09IDAgfHwgYXJncy5sZW5ndGggPT09IDEgJiYgYXJyYXkoYXJnc1swXSkpIHtcbiAgICAgIHZhciBhZGRsRXZlbnRzID0gYXJncy5sZW5ndGggPT09IDEgPyBhcmdzWzBdIDogbnVsbDtcbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5sZW5ndGg7IGkrKykge1xuICAgICAgICB2YXIgZWxlID0gdGhpc1tpXTtcbiAgICAgICAgdmFyIGFibGUgPSAhcGFyYW1zLmFibGVGaWVsZCB8fCBlbGUuX3ByaXZhdGVbcGFyYW1zLmFibGVGaWVsZF07XG4gICAgICAgIHZhciBjaGFuZ2VkID0gZWxlLl9wcml2YXRlW3BhcmFtcy5maWVsZF0gIT0gcGFyYW1zLnZhbHVlO1xuICAgICAgICBpZiAocGFyYW1zLm92ZXJyaWRlQWJsZSkge1xuICAgICAgICAgIHZhciBvdmVycmlkZUFibGUgPSBwYXJhbXMub3ZlcnJpZGVBYmxlKGVsZSk7XG4gICAgICAgICAgaWYgKG92ZXJyaWRlQWJsZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBhYmxlID0gb3ZlcnJpZGVBYmxlO1xuICAgICAgICAgICAgaWYgKCFvdmVycmlkZUFibGUpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgICAgICAgICB9IC8vIHRvIHNhdmUgY3ljbGVzIGFzc3VtZSBub3QgYWJsZSBmb3IgYWxsIG9uIG92ZXJyaWRlXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmIChhYmxlKSB7XG4gICAgICAgICAgZWxlLl9wcml2YXRlW3BhcmFtcy5maWVsZF0gPSBwYXJhbXMudmFsdWU7XG4gICAgICAgICAgaWYgKGNoYW5nZWQpIHtcbiAgICAgICAgICAgIGNoYW5nZWRFbGVzLnB1c2goZWxlKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHZhciBjaGFuZ2VkQ29sbCA9IHRoaXMuc3Bhd24oY2hhbmdlZEVsZXMpO1xuICAgICAgY2hhbmdlZENvbGwudXBkYXRlU3R5bGUoKTsgLy8gY2hhbmdlIG9mIHN0YXRlID0+IHBvc3NpYmxlIGNoYW5nZSBvZiBzdHlsZVxuICAgICAgY2hhbmdlZENvbGwuZW1pdChwYXJhbXMuZXZlbnQpO1xuICAgICAgaWYgKGFkZGxFdmVudHMpIHtcbiAgICAgICAgY2hhbmdlZENvbGwuZW1pdChhZGRsRXZlbnRzKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHRoaXM7XG4gIH07XG59XG5mdW5jdGlvbiBkZWZpbmVTd2l0Y2hTZXQocGFyYW1zKSB7XG4gIGVsZXNmbiQzW3BhcmFtcy5maWVsZF0gPSBmdW5jdGlvbiAoKSB7XG4gICAgdmFyIGVsZSA9IHRoaXNbMF07XG4gICAgaWYgKGVsZSkge1xuICAgICAgaWYgKHBhcmFtcy5vdmVycmlkZUZpZWxkKSB7XG4gICAgICAgIHZhciB2YWwgPSBwYXJhbXMub3ZlcnJpZGVGaWVsZChlbGUpO1xuICAgICAgICBpZiAodmFsICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICByZXR1cm4gdmFsO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gZWxlLl9wcml2YXRlW3BhcmFtcy5maWVsZF07XG4gICAgfVxuICB9O1xuICBlbGVzZm4kM1twYXJhbXMub25dID0gZGVmaW5lU3dpdGNoRnVuY3Rpb24oe1xuICAgIGV2ZW50OiBwYXJhbXMub24sXG4gICAgZmllbGQ6IHBhcmFtcy5maWVsZCxcbiAgICBhYmxlRmllbGQ6IHBhcmFtcy5hYmxlRmllbGQsXG4gICAgb3ZlcnJpZGVBYmxlOiBwYXJhbXMub3ZlcnJpZGVBYmxlLFxuICAgIHZhbHVlOiB0cnVlXG4gIH0pO1xuICBlbGVzZm4kM1twYXJhbXMub2ZmXSA9IGRlZmluZVN3aXRjaEZ1bmN0aW9uKHtcbiAgICBldmVudDogcGFyYW1zLm9mZixcbiAgICBmaWVsZDogcGFyYW1zLmZpZWxkLFxuICAgIGFibGVGaWVsZDogcGFyYW1zLmFibGVGaWVsZCxcbiAgICBvdmVycmlkZUFibGU6IHBhcmFtcy5vdmVycmlkZUFibGUsXG4gICAgdmFsdWU6IGZhbHNlXG4gIH0pO1xufVxuZGVmaW5lU3dpdGNoU2V0KHtcbiAgZmllbGQ6ICdsb2NrZWQnLFxuICBvdmVycmlkZUZpZWxkOiBmdW5jdGlvbiBvdmVycmlkZUZpZWxkKGVsZSkge1xuICAgIHJldHVybiBlbGUuY3koKS5hdXRvbG9jaygpID8gdHJ1ZSA6IHVuZGVmaW5lZDtcbiAgfSxcbiAgb246ICdsb2NrJyxcbiAgb2ZmOiAndW5sb2NrJ1xufSk7XG5kZWZpbmVTd2l0Y2hTZXQoe1xuICBmaWVsZDogJ2dyYWJiYWJsZScsXG4gIG92ZXJyaWRlRmllbGQ6IGZ1bmN0aW9uIG92ZXJyaWRlRmllbGQoZWxlKSB7XG4gICAgcmV0dXJuIGVsZS5jeSgpLmF1dG91bmdyYWJpZnkoKSB8fCBlbGUucGFubmFibGUoKSA/IGZhbHNlIDogdW5kZWZpbmVkO1xuICB9LFxuICBvbjogJ2dyYWJpZnknLFxuICBvZmY6ICd1bmdyYWJpZnknXG59KTtcbmRlZmluZVN3aXRjaFNldCh7XG4gIGZpZWxkOiAnc2VsZWN0ZWQnLFxuICBhYmxlRmllbGQ6ICdzZWxlY3RhYmxlJyxcbiAgb3ZlcnJpZGVBYmxlOiBmdW5jdGlvbiBvdmVycmlkZUFibGUoZWxlKSB7XG4gICAgcmV0dXJuIGVsZS5jeSgpLmF1dG91bnNlbGVjdGlmeSgpID8gZmFsc2UgOiB1bmRlZmluZWQ7XG4gIH0sXG4gIG9uOiAnc2VsZWN0JyxcbiAgb2ZmOiAndW5zZWxlY3QnXG59KTtcbmRlZmluZVN3aXRjaFNldCh7XG4gIGZpZWxkOiAnc2VsZWN0YWJsZScsXG4gIG92ZXJyaWRlRmllbGQ6IGZ1bmN0aW9uIG92ZXJyaWRlRmllbGQoZWxlKSB7XG4gICAgcmV0dXJuIGVsZS5jeSgpLmF1dG91bnNlbGVjdGlmeSgpID8gZmFsc2UgOiB1bmRlZmluZWQ7XG4gIH0sXG4gIG9uOiAnc2VsZWN0aWZ5JyxcbiAgb2ZmOiAndW5zZWxlY3RpZnknXG59KTtcbmVsZXNmbiQzLmRlc2VsZWN0ID0gZWxlc2ZuJDMudW5zZWxlY3Q7XG5lbGVzZm4kMy5ncmFiYmVkID0gZnVuY3Rpb24gKCkge1xuICB2YXIgZWxlID0gdGhpc1swXTtcbiAgaWYgKGVsZSkge1xuICAgIHJldHVybiBlbGUuX3ByaXZhdGUuZ3JhYmJlZDtcbiAgfVxufTtcbmRlZmluZVN3aXRjaFNldCh7XG4gIGZpZWxkOiAnYWN0aXZlJyxcbiAgb246ICdhY3RpdmF0ZScsXG4gIG9mZjogJ3VuYWN0aXZhdGUnXG59KTtcbmRlZmluZVN3aXRjaFNldCh7XG4gIGZpZWxkOiAncGFubmFibGUnLFxuICBvbjogJ3BhbmlmeScsXG4gIG9mZjogJ3VucGFuaWZ5J1xufSk7XG5lbGVzZm4kMy5pbmFjdGl2ZSA9IGZ1bmN0aW9uICgpIHtcbiAgdmFyIGVsZSA9IHRoaXNbMF07XG4gIGlmIChlbGUpIHtcbiAgICByZXR1cm4gIWVsZS5fcHJpdmF0ZS5hY3RpdmU7XG4gIH1cbn07XG5cbnZhciBlbGVzZm4kMiA9IHt9O1xuXG4vLyBEQUcgZnVuY3Rpb25zXG4vLy8vLy8vLy8vLy8vLy8vXG5cbnZhciBkZWZpbmVEYWdFeHRyZW1pdHkgPSBmdW5jdGlvbiBkZWZpbmVEYWdFeHRyZW1pdHkocGFyYW1zKSB7XG4gIHJldHVybiBmdW5jdGlvbiBkYWdFeHRyZW1pdHlJbXBsKHNlbGVjdG9yKSB7XG4gICAgdmFyIGVsZXMgPSB0aGlzO1xuICAgIHZhciByZXQgPSBbXTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGVsZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciBlbGUgPSBlbGVzW2ldO1xuICAgICAgaWYgKCFlbGUuaXNOb2RlKCkpIHtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG4gICAgICB2YXIgZGlzcXVhbGlmaWVkID0gZmFsc2U7XG4gICAgICB2YXIgZWRnZXMgPSBlbGUuY29ubmVjdGVkRWRnZXMoKTtcbiAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgZWRnZXMubGVuZ3RoOyBqKyspIHtcbiAgICAgICAgdmFyIGVkZ2UgPSBlZGdlc1tqXTtcbiAgICAgICAgdmFyIHNyYyA9IGVkZ2Uuc291cmNlKCk7XG4gICAgICAgIHZhciB0Z3QgPSBlZGdlLnRhcmdldCgpO1xuICAgICAgICBpZiAocGFyYW1zLm5vSW5jb21pbmdFZGdlcyAmJiB0Z3QgPT09IGVsZSAmJiBzcmMgIT09IGVsZSB8fCBwYXJhbXMubm9PdXRnb2luZ0VkZ2VzICYmIHNyYyA9PT0gZWxlICYmIHRndCAhPT0gZWxlKSB7XG4gICAgICAgICAgZGlzcXVhbGlmaWVkID0gdHJ1ZTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYgKCFkaXNxdWFsaWZpZWQpIHtcbiAgICAgICAgcmV0LnB1c2goZWxlKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuc3Bhd24ocmV0LCB0cnVlKS5maWx0ZXIoc2VsZWN0b3IpO1xuICB9O1xufTtcbnZhciBkZWZpbmVEYWdPbmVIb3AgPSBmdW5jdGlvbiBkZWZpbmVEYWdPbmVIb3AocGFyYW1zKSB7XG4gIHJldHVybiBmdW5jdGlvbiAoc2VsZWN0b3IpIHtcbiAgICB2YXIgZWxlcyA9IHRoaXM7XG4gICAgdmFyIG9FbGVzID0gW107XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBlbGVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIgZWxlID0gZWxlc1tpXTtcbiAgICAgIGlmICghZWxlLmlzTm9kZSgpKSB7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuICAgICAgdmFyIGVkZ2VzID0gZWxlLmNvbm5lY3RlZEVkZ2VzKCk7XG4gICAgICBmb3IgKHZhciBqID0gMDsgaiA8IGVkZ2VzLmxlbmd0aDsgaisrKSB7XG4gICAgICAgIHZhciBlZGdlID0gZWRnZXNbal07XG4gICAgICAgIHZhciBzcmMgPSBlZGdlLnNvdXJjZSgpO1xuICAgICAgICB2YXIgdGd0ID0gZWRnZS50YXJnZXQoKTtcbiAgICAgICAgaWYgKHBhcmFtcy5vdXRnb2luZyAmJiBzcmMgPT09IGVsZSkge1xuICAgICAgICAgIG9FbGVzLnB1c2goZWRnZSk7XG4gICAgICAgICAgb0VsZXMucHVzaCh0Z3QpO1xuICAgICAgICB9IGVsc2UgaWYgKHBhcmFtcy5pbmNvbWluZyAmJiB0Z3QgPT09IGVsZSkge1xuICAgICAgICAgIG9FbGVzLnB1c2goZWRnZSk7XG4gICAgICAgICAgb0VsZXMucHVzaChzcmMpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiB0aGlzLnNwYXduKG9FbGVzLCB0cnVlKS5maWx0ZXIoc2VsZWN0b3IpO1xuICB9O1xufTtcbnZhciBkZWZpbmVEYWdBbGxIb3BzID0gZnVuY3Rpb24gZGVmaW5lRGFnQWxsSG9wcyhwYXJhbXMpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIChzZWxlY3Rvcikge1xuICAgIHZhciBlbGVzID0gdGhpcztcbiAgICB2YXIgc0VsZXMgPSBbXTtcbiAgICB2YXIgc0VsZXNJZHMgPSB7fTtcbiAgICBmb3IgKDs7KSB7XG4gICAgICB2YXIgbmV4dCA9IHBhcmFtcy5vdXRnb2luZyA/IGVsZXMub3V0Z29lcnMoKSA6IGVsZXMuaW5jb21lcnMoKTtcbiAgICAgIGlmIChuZXh0Lmxlbmd0aCA9PT0gMCkge1xuICAgICAgICBicmVhaztcbiAgICAgIH0gLy8gZG9uZSBpZiBub25lIGxlZnRcblxuICAgICAgdmFyIG5ld05leHQgPSBmYWxzZTtcbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbmV4dC5sZW5ndGg7IGkrKykge1xuICAgICAgICB2YXIgbiA9IG5leHRbaV07XG4gICAgICAgIHZhciBuaWQgPSBuLmlkKCk7XG4gICAgICAgIGlmICghc0VsZXNJZHNbbmlkXSkge1xuICAgICAgICAgIHNFbGVzSWRzW25pZF0gPSB0cnVlO1xuICAgICAgICAgIHNFbGVzLnB1c2gobik7XG4gICAgICAgICAgbmV3TmV4dCA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmICghbmV3TmV4dCkge1xuICAgICAgICBicmVhaztcbiAgICAgIH0gLy8gZG9uZSBpZiB0b3VjaGVkIGFsbCBvdXRnb2VycyBhbHJlYWR5XG5cbiAgICAgIGVsZXMgPSBuZXh0O1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5zcGF3bihzRWxlcywgdHJ1ZSkuZmlsdGVyKHNlbGVjdG9yKTtcbiAgfTtcbn07XG5lbGVzZm4kMi5jbGVhclRyYXZlcnNhbENhY2hlID0gZnVuY3Rpb24gKCkge1xuICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMubGVuZ3RoOyBpKyspIHtcbiAgICB0aGlzW2ldLl9wcml2YXRlLnRyYXZlcnNhbENhY2hlID0gbnVsbDtcbiAgfVxufTtcbmV4dGVuZChlbGVzZm4kMiwge1xuICAvLyBnZXQgdGhlIHJvb3Qgbm9kZXMgaW4gdGhlIERBR1xuICByb290czogZGVmaW5lRGFnRXh0cmVtaXR5KHtcbiAgICBub0luY29taW5nRWRnZXM6IHRydWVcbiAgfSksXG4gIC8vIGdldCB0aGUgbGVhZiBub2RlcyBpbiB0aGUgREFHXG4gIGxlYXZlczogZGVmaW5lRGFnRXh0cmVtaXR5KHtcbiAgICBub091dGdvaW5nRWRnZXM6IHRydWVcbiAgfSksXG4gIC8vIG5vcm1hbGx5IGNhbGxlZCBjaGlsZHJlbiBpbiBncmFwaCB0aGVvcnlcbiAgLy8gdGhlc2Ugbm9kZXMgPWVkZ2VzPT4gb3V0Z29pbmcgbm9kZXNcbiAgb3V0Z29lcnM6IGNhY2hlKGRlZmluZURhZ09uZUhvcCh7XG4gICAgb3V0Z29pbmc6IHRydWVcbiAgfSksICdvdXRnb2VycycpLFxuICAvLyBha2EgREFHIGRlc2NlbmRhbnRzXG4gIHN1Y2Nlc3NvcnM6IGRlZmluZURhZ0FsbEhvcHMoe1xuICAgIG91dGdvaW5nOiB0cnVlXG4gIH0pLFxuICAvLyBub3JtYWxseSBjYWxsZWQgcGFyZW50cyBpbiBncmFwaCB0aGVvcnlcbiAgLy8gdGhlc2Ugbm9kZXMgPD1lZGdlcz0gaW5jb21pbmcgbm9kZXNcbiAgaW5jb21lcnM6IGNhY2hlKGRlZmluZURhZ09uZUhvcCh7XG4gICAgaW5jb21pbmc6IHRydWVcbiAgfSksICdpbmNvbWVycycpLFxuICAvLyBha2EgREFHIGFuY2VzdG9yc1xuICBwcmVkZWNlc3NvcnM6IGRlZmluZURhZ0FsbEhvcHMoe1xuICAgIH0pXG59KTtcblxuLy8gTmVpZ2hib3VyaG9vZCBmdW5jdGlvbnNcbi8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG5cbmV4dGVuZChlbGVzZm4kMiwge1xuICBuZWlnaGJvcmhvb2Q6IGNhY2hlKGZ1bmN0aW9uIChzZWxlY3Rvcikge1xuICAgIHZhciBlbGVtZW50cyA9IFtdO1xuICAgIHZhciBub2RlcyA9IHRoaXMubm9kZXMoKTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IG5vZGVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAvLyBmb3IgYWxsIG5vZGVzXG4gICAgICB2YXIgbm9kZSA9IG5vZGVzW2ldO1xuICAgICAgdmFyIGNvbm5lY3RlZEVkZ2VzID0gbm9kZS5jb25uZWN0ZWRFZGdlcygpO1xuXG4gICAgICAvLyBmb3IgZWFjaCBjb25uZWN0ZWQgZWRnZSwgYWRkIHRoZSBlZGdlIGFuZCB0aGUgb3RoZXIgbm9kZVxuICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCBjb25uZWN0ZWRFZGdlcy5sZW5ndGg7IGorKykge1xuICAgICAgICB2YXIgZWRnZSA9IGNvbm5lY3RlZEVkZ2VzW2pdO1xuICAgICAgICB2YXIgc3JjID0gZWRnZS5zb3VyY2UoKTtcbiAgICAgICAgdmFyIHRndCA9IGVkZ2UudGFyZ2V0KCk7XG4gICAgICAgIHZhciBvdGhlck5vZGUgPSBub2RlID09PSBzcmMgPyB0Z3QgOiBzcmM7XG5cbiAgICAgICAgLy8gbmVlZCBjaGVjayBpbiBjYXNlIG9mIGxvb3BcbiAgICAgICAgaWYgKG90aGVyTm9kZS5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgZWxlbWVudHMucHVzaChvdGhlck5vZGVbMF0pOyAvLyBhZGQgbm9kZSAxIGhvcCBhd2F5XG4gICAgICAgIH1cblxuICAgICAgICAvLyBhZGQgY29ubmVjdGVkIGVkZ2VcbiAgICAgICAgZWxlbWVudHMucHVzaChlZGdlWzBdKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuc3Bhd24oZWxlbWVudHMsIHRydWUpLmZpbHRlcihzZWxlY3Rvcik7XG4gIH0sICduZWlnaGJvcmhvb2QnKSxcbiAgY2xvc2VkTmVpZ2hib3Job29kOiBmdW5jdGlvbiBjbG9zZWROZWlnaGJvcmhvb2Qoc2VsZWN0b3IpIHtcbiAgICByZXR1cm4gdGhpcy5uZWlnaGJvcmhvb2QoKS5hZGQodGhpcykuZmlsdGVyKHNlbGVjdG9yKTtcbiAgfSxcbiAgb3Blbk5laWdoYm9yaG9vZDogZnVuY3Rpb24gb3Blbk5laWdoYm9yaG9vZChzZWxlY3Rvcikge1xuICAgIHJldHVybiB0aGlzLm5laWdoYm9yaG9vZChzZWxlY3Rvcik7XG4gIH1cbn0pO1xuXG4vLyBhbGlhc2VzXG5lbGVzZm4kMi5uZWlnaGJvdXJob29kID0gZWxlc2ZuJDIubmVpZ2hib3Job29kO1xuZWxlc2ZuJDIuY2xvc2VkTmVpZ2hib3VyaG9vZCA9IGVsZXNmbiQyLmNsb3NlZE5laWdoYm9yaG9vZDtcbmVsZXNmbiQyLm9wZW5OZWlnaGJvdXJob29kID0gZWxlc2ZuJDIub3Blbk5laWdoYm9yaG9vZDtcblxuLy8gRWRnZSBmdW5jdGlvbnNcbi8vLy8vLy8vLy8vLy8vLy8vXG5cbmV4dGVuZChlbGVzZm4kMiwge1xuICBzb3VyY2U6IGNhY2hlKGZ1bmN0aW9uIHNvdXJjZUltcGwoc2VsZWN0b3IpIHtcbiAgICB2YXIgZWxlID0gdGhpc1swXTtcbiAgICB2YXIgc3JjO1xuICAgIGlmIChlbGUpIHtcbiAgICAgIHNyYyA9IGVsZS5fcHJpdmF0ZS5zb3VyY2UgfHwgZWxlLmN5KCkuY29sbGVjdGlvbigpO1xuICAgIH1cbiAgICByZXR1cm4gc3JjICYmIHNlbGVjdG9yID8gc3JjLmZpbHRlcihzZWxlY3RvcikgOiBzcmM7XG4gIH0sICdzb3VyY2UnKSxcbiAgdGFyZ2V0OiBjYWNoZShmdW5jdGlvbiB0YXJnZXRJbXBsKHNlbGVjdG9yKSB7XG4gICAgdmFyIGVsZSA9IHRoaXNbMF07XG4gICAgdmFyIHRndDtcbiAgICBpZiAoZWxlKSB7XG4gICAgICB0Z3QgPSBlbGUuX3ByaXZhdGUudGFyZ2V0IHx8IGVsZS5jeSgpLmNvbGxlY3Rpb24oKTtcbiAgICB9XG4gICAgcmV0dXJuIHRndCAmJiBzZWxlY3RvciA/IHRndC5maWx0ZXIoc2VsZWN0b3IpIDogdGd0O1xuICB9LCAndGFyZ2V0JyksXG4gIHNvdXJjZXM6IGRlZmluZVNvdXJjZUZ1bmN0aW9uKHtcbiAgICBhdHRyOiAnc291cmNlJ1xuICB9KSxcbiAgdGFyZ2V0czogZGVmaW5lU291cmNlRnVuY3Rpb24oe1xuICAgIGF0dHI6ICd0YXJnZXQnXG4gIH0pXG59KTtcbmZ1bmN0aW9uIGRlZmluZVNvdXJjZUZ1bmN0aW9uKHBhcmFtcykge1xuICByZXR1cm4gZnVuY3Rpb24gc291cmNlSW1wbChzZWxlY3Rvcikge1xuICAgIHZhciBzb3VyY2VzID0gW107XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLmxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIgZWxlID0gdGhpc1tpXTtcbiAgICAgIHZhciBzcmMgPSBlbGUuX3ByaXZhdGVbcGFyYW1zLmF0dHJdO1xuICAgICAgaWYgKHNyYykge1xuICAgICAgICBzb3VyY2VzLnB1c2goc3JjKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuc3Bhd24oc291cmNlcywgdHJ1ZSkuZmlsdGVyKHNlbGVjdG9yKTtcbiAgfTtcbn1cbmV4dGVuZChlbGVzZm4kMiwge1xuICBlZGdlc1dpdGg6IGNhY2hlKGRlZmluZUVkZ2VzV2l0aEZ1bmN0aW9uKCksICdlZGdlc1dpdGgnKSxcbiAgZWRnZXNUbzogY2FjaGUoZGVmaW5lRWRnZXNXaXRoRnVuY3Rpb24oe1xuICAgIHRoaXNJc1NyYzogdHJ1ZVxuICB9KSwgJ2VkZ2VzVG8nKVxufSk7XG5mdW5jdGlvbiBkZWZpbmVFZGdlc1dpdGhGdW5jdGlvbihwYXJhbXMpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIGVkZ2VzV2l0aEltcGwob3RoZXJOb2Rlcykge1xuICAgIHZhciBlbGVtZW50cyA9IFtdO1xuICAgIHZhciBjeSA9IHRoaXMuX3ByaXZhdGUuY3k7XG4gICAgdmFyIHAgPSBwYXJhbXMgfHwge307XG5cbiAgICAvLyBnZXQgZWxlbWVudHMgaWYgYSBzZWxlY3RvciBpcyBzcGVjaWZpZWRcbiAgICBpZiAoc3RyaW5nKG90aGVyTm9kZXMpKSB7XG4gICAgICBvdGhlck5vZGVzID0gY3kuJChvdGhlck5vZGVzKTtcbiAgICB9XG4gICAgZm9yICh2YXIgaCA9IDA7IGggPCBvdGhlck5vZGVzLmxlbmd0aDsgaCsrKSB7XG4gICAgICB2YXIgZWRnZXMgPSBvdGhlck5vZGVzW2hdLl9wcml2YXRlLmVkZ2VzO1xuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBlZGdlcy5sZW5ndGg7IGkrKykge1xuICAgICAgICB2YXIgZWRnZSA9IGVkZ2VzW2ldO1xuICAgICAgICB2YXIgZWRnZURhdGEgPSBlZGdlLl9wcml2YXRlLmRhdGE7XG4gICAgICAgIHZhciB0aGlzVG9PdGhlciA9IHRoaXMuaGFzRWxlbWVudFdpdGhJZChlZGdlRGF0YS5zb3VyY2UpICYmIG90aGVyTm9kZXMuaGFzRWxlbWVudFdpdGhJZChlZGdlRGF0YS50YXJnZXQpO1xuICAgICAgICB2YXIgb3RoZXJUb1RoaXMgPSBvdGhlck5vZGVzLmhhc0VsZW1lbnRXaXRoSWQoZWRnZURhdGEuc291cmNlKSAmJiB0aGlzLmhhc0VsZW1lbnRXaXRoSWQoZWRnZURhdGEudGFyZ2V0KTtcbiAgICAgICAgdmFyIGVkZ2VDb25uZWN0c1RoaXNBbmRPdGhlciA9IHRoaXNUb090aGVyIHx8IG90aGVyVG9UaGlzO1xuICAgICAgICBpZiAoIWVkZ2VDb25uZWN0c1RoaXNBbmRPdGhlcikge1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG4gICAgICAgIGlmIChwLnRoaXNJc1NyYyB8fCBwLnRoaXNJc1RndCkge1xuICAgICAgICAgIGlmIChwLnRoaXNJc1NyYyAmJiAhdGhpc1RvT3RoZXIpIHtcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAocC50aGlzSXNUZ3QgJiYgIW90aGVyVG9UaGlzKSB7XG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZWxlbWVudHMucHVzaChlZGdlKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuc3Bhd24oZWxlbWVudHMsIHRydWUpO1xuICB9O1xufVxuZXh0ZW5kKGVsZXNmbiQyLCB7XG4gIGNvbm5lY3RlZEVkZ2VzOiBjYWNoZShmdW5jdGlvbiAoc2VsZWN0b3IpIHtcbiAgICB2YXIgcmV0RWxlcyA9IFtdO1xuICAgIHZhciBlbGVzID0gdGhpcztcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGVsZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciBub2RlID0gZWxlc1tpXTtcbiAgICAgIGlmICghbm9kZS5pc05vZGUoKSkge1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cbiAgICAgIHZhciBlZGdlcyA9IG5vZGUuX3ByaXZhdGUuZWRnZXM7XG4gICAgICBmb3IgKHZhciBqID0gMDsgaiA8IGVkZ2VzLmxlbmd0aDsgaisrKSB7XG4gICAgICAgIHZhciBlZGdlID0gZWRnZXNbal07XG4gICAgICAgIHJldEVsZXMucHVzaChlZGdlKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuc3Bhd24ocmV0RWxlcywgdHJ1ZSkuZmlsdGVyKHNlbGVjdG9yKTtcbiAgfSwgJ2Nvbm5lY3RlZEVkZ2VzJyksXG4gIGNvbm5lY3RlZE5vZGVzOiBjYWNoZShmdW5jdGlvbiAoc2VsZWN0b3IpIHtcbiAgICB2YXIgcmV0RWxlcyA9IFtdO1xuICAgIHZhciBlbGVzID0gdGhpcztcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGVsZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciBlZGdlID0gZWxlc1tpXTtcbiAgICAgIGlmICghZWRnZS5pc0VkZ2UoKSkge1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cbiAgICAgIHJldEVsZXMucHVzaChlZGdlLnNvdXJjZSgpWzBdKTtcbiAgICAgIHJldEVsZXMucHVzaChlZGdlLnRhcmdldCgpWzBdKTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuc3Bhd24ocmV0RWxlcywgdHJ1ZSkuZmlsdGVyKHNlbGVjdG9yKTtcbiAgfSwgJ2Nvbm5lY3RlZE5vZGVzJyksXG4gIHBhcmFsbGVsRWRnZXM6IGNhY2hlKGRlZmluZVBhcmFsbGVsRWRnZXNGdW5jdGlvbigpLCAncGFyYWxsZWxFZGdlcycpLFxuICBjb2RpcmVjdGVkRWRnZXM6IGNhY2hlKGRlZmluZVBhcmFsbGVsRWRnZXNGdW5jdGlvbih7XG4gICAgY29kaXJlY3RlZDogdHJ1ZVxuICB9KSwgJ2NvZGlyZWN0ZWRFZGdlcycpXG59KTtcbmZ1bmN0aW9uIGRlZmluZVBhcmFsbGVsRWRnZXNGdW5jdGlvbihwYXJhbXMpIHtcbiAgdmFyIGRlZmF1bHRzID0ge1xuICAgIGNvZGlyZWN0ZWQ6IGZhbHNlXG4gIH07XG4gIHBhcmFtcyA9IGV4dGVuZCh7fSwgZGVmYXVsdHMsIHBhcmFtcyk7XG4gIHJldHVybiBmdW5jdGlvbiBwYXJhbGxlbEVkZ2VzSW1wbChzZWxlY3Rvcikge1xuICAgIC8vIG1pY3JvLW9wdGltaXNlZCBmb3IgcmVuZGVyZXJcbiAgICB2YXIgZWxlbWVudHMgPSBbXTtcbiAgICB2YXIgZWRnZXMgPSB0aGlzLmVkZ2VzKCk7XG4gICAgdmFyIHAgPSBwYXJhbXM7XG5cbiAgICAvLyBsb29rIGF0IGFsbCB0aGUgZWRnZXMgaW4gdGhlIGNvbGxlY3Rpb25cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGVkZ2VzLmxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIgZWRnZTEgPSBlZGdlc1tpXTtcbiAgICAgIHZhciBlZGdlMV9wID0gZWRnZTEuX3ByaXZhdGU7XG4gICAgICB2YXIgc3JjMSA9IGVkZ2UxX3Auc291cmNlO1xuICAgICAgdmFyIHNyY2lkMSA9IHNyYzEuX3ByaXZhdGUuZGF0YS5pZDtcbiAgICAgIHZhciB0Z3RpZDEgPSBlZGdlMV9wLmRhdGEudGFyZ2V0O1xuICAgICAgdmFyIHNyY0VkZ2VzMSA9IHNyYzEuX3ByaXZhdGUuZWRnZXM7XG5cbiAgICAgIC8vIGxvb2sgYXQgZWRnZXMgY29ubmVjdGVkIHRvIHRoZSBzcmMgbm9kZSBvZiB0aGlzIGVkZ2VcbiAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgc3JjRWRnZXMxLmxlbmd0aDsgaisrKSB7XG4gICAgICAgIHZhciBlZGdlMiA9IHNyY0VkZ2VzMVtqXTtcbiAgICAgICAgdmFyIGVkZ2UyZGF0YSA9IGVkZ2UyLl9wcml2YXRlLmRhdGE7XG4gICAgICAgIHZhciB0Z3RpZDIgPSBlZGdlMmRhdGEudGFyZ2V0O1xuICAgICAgICB2YXIgc3JjaWQyID0gZWRnZTJkYXRhLnNvdXJjZTtcbiAgICAgICAgdmFyIGNvZGlyZWN0ZWQgPSB0Z3RpZDIgPT09IHRndGlkMSAmJiBzcmNpZDIgPT09IHNyY2lkMTtcbiAgICAgICAgdmFyIG9wcGRpcmVjdGVkID0gc3JjaWQxID09PSB0Z3RpZDIgJiYgdGd0aWQxID09PSBzcmNpZDI7XG4gICAgICAgIGlmIChwLmNvZGlyZWN0ZWQgJiYgY29kaXJlY3RlZCB8fCAhcC5jb2RpcmVjdGVkICYmIChjb2RpcmVjdGVkIHx8IG9wcGRpcmVjdGVkKSkge1xuICAgICAgICAgIGVsZW1lbnRzLnB1c2goZWRnZTIpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiB0aGlzLnNwYXduKGVsZW1lbnRzLCB0cnVlKS5maWx0ZXIoc2VsZWN0b3IpO1xuICB9O1xufVxuXG4vLyBNaXNjIGZ1bmN0aW9uc1xuLy8vLy8vLy8vLy8vLy8vLy9cblxuZXh0ZW5kKGVsZXNmbiQyLCB7XG4gIGNvbXBvbmVudHM6IGZ1bmN0aW9uIGNvbXBvbmVudHMocm9vdCkge1xuICAgIHZhciBzZWxmID0gdGhpcztcbiAgICB2YXIgY3kgPSBzZWxmLmN5KCk7XG4gICAgdmFyIHZpc2l0ZWQgPSBjeS5jb2xsZWN0aW9uKCk7XG4gICAgdmFyIHVudmlzaXRlZCA9IHJvb3QgPT0gbnVsbCA/IHNlbGYubm9kZXMoKSA6IHJvb3Qubm9kZXMoKTtcbiAgICB2YXIgY29tcG9uZW50cyA9IFtdO1xuICAgIGlmIChyb290ICE9IG51bGwgJiYgdW52aXNpdGVkLmVtcHR5KCkpIHtcbiAgICAgIC8vIHJvb3QgbWF5IGNvbnRhaW4gb25seSBlZGdlc1xuICAgICAgdW52aXNpdGVkID0gcm9vdC5zb3VyY2VzKCk7IC8vIGRvZXNuJ3QgbWF0dGVyIHdoaWNoIG5vZGUgdG8gdXNlICh1bmRpcmVjdGVkKSwgc28ganVzdCB1c2UgdGhlIHNvdXJjZSBzaWRlc1xuICAgIH1cbiAgICB2YXIgdmlzaXRJbkNvbXBvbmVudCA9IGZ1bmN0aW9uIHZpc2l0SW5Db21wb25lbnQobm9kZSwgY29tcG9uZW50KSB7XG4gICAgICB2aXNpdGVkLm1lcmdlKG5vZGUpO1xuICAgICAgdW52aXNpdGVkLnVubWVyZ2Uobm9kZSk7XG4gICAgICBjb21wb25lbnQubWVyZ2Uobm9kZSk7XG4gICAgfTtcbiAgICBpZiAodW52aXNpdGVkLmVtcHR5KCkpIHtcbiAgICAgIHJldHVybiBzZWxmLnNwYXduKCk7XG4gICAgfVxuICAgIHZhciBfbG9vcCA9IGZ1bmN0aW9uIF9sb29wKCkge1xuICAgICAgLy8gZWFjaCBpdGVyYXRpb24geWllbGRzIGEgY29tcG9uZW50XG4gICAgICB2YXIgY21wdCA9IGN5LmNvbGxlY3Rpb24oKTtcbiAgICAgIGNvbXBvbmVudHMucHVzaChjbXB0KTtcbiAgICAgIHZhciByb290ID0gdW52aXNpdGVkWzBdO1xuICAgICAgdmlzaXRJbkNvbXBvbmVudChyb290LCBjbXB0KTtcbiAgICAgIHNlbGYuYmZzKHtcbiAgICAgICAgZGlyZWN0ZWQ6IGZhbHNlLFxuICAgICAgICByb290czogcm9vdCxcbiAgICAgICAgdmlzaXQ6IGZ1bmN0aW9uIHZpc2l0KHYpIHtcbiAgICAgICAgICByZXR1cm4gdmlzaXRJbkNvbXBvbmVudCh2LCBjbXB0KTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgICBjbXB0LmZvckVhY2goZnVuY3Rpb24gKG5vZGUpIHtcbiAgICAgICAgbm9kZS5jb25uZWN0ZWRFZGdlcygpLmZvckVhY2goZnVuY3Rpb24gKGUpIHtcbiAgICAgICAgICAvLyBjb25uZWN0ZWRFZGdlcygpIHVzdWFsbHkgY2FjaGVkXG4gICAgICAgICAgaWYgKHNlbGYuaGFzKGUpICYmIGNtcHQuaGFzKGUuc291cmNlKCkpICYmIGNtcHQuaGFzKGUudGFyZ2V0KCkpKSB7XG4gICAgICAgICAgICAvLyBoYXMoKSBpcyBjaGVhcFxuICAgICAgICAgICAgY21wdC5tZXJnZShlKTsgLy8gZm9yRWFjaCgpIG9ubHkgY29uc2lkZXJzIG5vZGVzIC0tIHNldHMgTiBhdCBjYWxsIHRpbWVcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfSk7XG4gICAgfTtcbiAgICBkbyB7XG4gICAgICBfbG9vcCgpO1xuICAgIH0gd2hpbGUgKHVudmlzaXRlZC5sZW5ndGggPiAwKTtcbiAgICByZXR1cm4gY29tcG9uZW50cztcbiAgfSxcbiAgY29tcG9uZW50OiBmdW5jdGlvbiBjb21wb25lbnQoKSB7XG4gICAgdmFyIGVsZSA9IHRoaXNbMF07XG4gICAgcmV0dXJuIGVsZS5jeSgpLm11dGFibGVFbGVtZW50cygpLmNvbXBvbmVudHMoZWxlKVswXTtcbiAgfVxufSk7XG5lbGVzZm4kMi5jb21wb25lbnRzT2YgPSBlbGVzZm4kMi5jb21wb25lbnRzO1xuXG4vLyByZXByZXNlbnRzIGEgc2V0IG9mIG5vZGVzLCBlZGdlcywgb3IgYm90aCB0b2dldGhlclxudmFyIENvbGxlY3Rpb24gPSBmdW5jdGlvbiBDb2xsZWN0aW9uKGN5LCBlbGVtZW50cykge1xuICB2YXIgdW5pcXVlID0gYXJndW1lbnRzLmxlbmd0aCA+IDIgJiYgYXJndW1lbnRzWzJdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMl0gOiBmYWxzZTtcbiAgdmFyIHJlbW92ZWQgPSBhcmd1bWVudHMubGVuZ3RoID4gMyAmJiBhcmd1bWVudHNbM10gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1szXSA6IGZhbHNlO1xuICBpZiAoY3kgPT09IHVuZGVmaW5lZCkge1xuICAgIGVycm9yKCdBIGNvbGxlY3Rpb24gbXVzdCBoYXZlIGEgcmVmZXJlbmNlIHRvIHRoZSBjb3JlJyk7XG4gICAgcmV0dXJuO1xuICB9XG4gIHZhciBtYXAgPSBuZXcgTWFwJDEoKTtcbiAgdmFyIGNyZWF0ZWRFbGVtZW50cyA9IGZhbHNlO1xuICBpZiAoIWVsZW1lbnRzKSB7XG4gICAgZWxlbWVudHMgPSBbXTtcbiAgfSBlbHNlIGlmIChlbGVtZW50cy5sZW5ndGggPiAwICYmIHBsYWluT2JqZWN0KGVsZW1lbnRzWzBdKSAmJiAhZWxlbWVudChlbGVtZW50c1swXSkpIHtcbiAgICBjcmVhdGVkRWxlbWVudHMgPSB0cnVlO1xuXG4gICAgLy8gbWFrZSBlbGVtZW50cyBmcm9tIGpzb24gYW5kIHJlc3RvcmUgYWxsIGF0IG9uY2UgbGF0ZXJcbiAgICB2YXIgZWxlcyA9IFtdO1xuICAgIHZhciBlbGVzSWRzID0gbmV3IFNldCQxKCk7XG4gICAgZm9yICh2YXIgaSA9IDAsIGwgPSBlbGVtZW50cy5sZW5ndGg7IGkgPCBsOyBpKyspIHtcbiAgICAgIHZhciBqc29uID0gZWxlbWVudHNbaV07XG4gICAgICBpZiAoanNvbi5kYXRhID09IG51bGwpIHtcbiAgICAgICAganNvbi5kYXRhID0ge307XG4gICAgICB9XG4gICAgICB2YXIgX2RhdGEgPSBqc29uLmRhdGE7XG5cbiAgICAgIC8vIG1ha2Ugc3VyZSBuZXdseSBjcmVhdGVkIGVsZW1lbnRzIGhhdmUgdmFsaWQgaWRzXG4gICAgICBpZiAoX2RhdGEuaWQgPT0gbnVsbCkge1xuICAgICAgICBfZGF0YS5pZCA9IHV1aWQoKTtcbiAgICAgIH0gZWxzZSBpZiAoY3kuaGFzRWxlbWVudFdpdGhJZChfZGF0YS5pZCkgfHwgZWxlc0lkcy5oYXMoX2RhdGEuaWQpKSB7XG4gICAgICAgIGNvbnRpbnVlOyAvLyBjYW4ndCBjcmVhdGUgZWxlbWVudCBpZiBwcmlvciBpZCBhbHJlYWR5IGV4aXN0c1xuICAgICAgfVxuICAgICAgdmFyIGVsZSA9IG5ldyBFbGVtZW50KGN5LCBqc29uLCBmYWxzZSk7XG4gICAgICBlbGVzLnB1c2goZWxlKTtcbiAgICAgIGVsZXNJZHMuYWRkKF9kYXRhLmlkKTtcbiAgICB9XG4gICAgZWxlbWVudHMgPSBlbGVzO1xuICB9XG4gIHRoaXMubGVuZ3RoID0gMDtcbiAgZm9yICh2YXIgX2kgPSAwLCBfbCA9IGVsZW1lbnRzLmxlbmd0aDsgX2kgPCBfbDsgX2krKykge1xuICAgIHZhciBlbGVtZW50JDEgPSBlbGVtZW50c1tfaV1bMF07IC8vIFswXSBpbiBjYXNlIGVsZW1lbnRzIGlzIGFuIGFycmF5IG9mIGNvbGxlY3Rpb25zLCByYXRoZXIgdGhhbiBhcnJheSBvZiBlbGVtZW50c1xuICAgIGlmIChlbGVtZW50JDEgPT0gbnVsbCkge1xuICAgICAgY29udGludWU7XG4gICAgfVxuICAgIHZhciBpZCA9IGVsZW1lbnQkMS5fcHJpdmF0ZS5kYXRhLmlkO1xuICAgIGlmICghdW5pcXVlIHx8ICFtYXAuaGFzKGlkKSkge1xuICAgICAgaWYgKHVuaXF1ZSkge1xuICAgICAgICBtYXAuc2V0KGlkLCB7XG4gICAgICAgICAgaW5kZXg6IHRoaXMubGVuZ3RoLFxuICAgICAgICAgIGVsZTogZWxlbWVudCQxXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgICAgdGhpc1t0aGlzLmxlbmd0aF0gPSBlbGVtZW50JDE7XG4gICAgICB0aGlzLmxlbmd0aCsrO1xuICAgIH1cbiAgfVxuICB0aGlzLl9wcml2YXRlID0ge1xuICAgIGVsZXM6IHRoaXMsXG4gICAgY3k6IGN5LFxuICAgIGdldCBtYXAoKSB7XG4gICAgICBpZiAodGhpcy5sYXp5TWFwID09IG51bGwpIHtcbiAgICAgICAgdGhpcy5yZWJ1aWxkTWFwKCk7XG4gICAgICB9XG4gICAgICByZXR1cm4gdGhpcy5sYXp5TWFwO1xuICAgIH0sXG4gICAgc2V0IG1hcChtKSB7XG4gICAgICB0aGlzLmxhenlNYXAgPSBtO1xuICAgIH0sXG4gICAgcmVidWlsZE1hcDogZnVuY3Rpb24gcmVidWlsZE1hcCgpIHtcbiAgICAgIHZhciBtID0gdGhpcy5sYXp5TWFwID0gbmV3IE1hcCQxKCk7XG4gICAgICB2YXIgZWxlcyA9IHRoaXMuZWxlcztcbiAgICAgIGZvciAodmFyIF9pMiA9IDA7IF9pMiA8IGVsZXMubGVuZ3RoOyBfaTIrKykge1xuICAgICAgICB2YXIgX2VsZSA9IGVsZXNbX2kyXTtcbiAgICAgICAgbS5zZXQoX2VsZS5pZCgpLCB7XG4gICAgICAgICAgaW5kZXg6IF9pMixcbiAgICAgICAgICBlbGU6IF9lbGVcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfVxuICB9O1xuICBpZiAodW5pcXVlKSB7XG4gICAgdGhpcy5fcHJpdmF0ZS5tYXAgPSBtYXA7XG4gIH1cblxuICAvLyByZXN0b3JlIHRoZSBlbGVtZW50cyBpZiB3ZSBjcmVhdGVkIHRoZW0gZnJvbSBqc29uXG4gIGlmIChjcmVhdGVkRWxlbWVudHMgJiYgIXJlbW92ZWQpIHtcbiAgICB0aGlzLnJlc3RvcmUoKTtcbiAgfVxufTtcblxuLy8gRnVuY3Rpb25zXG4vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG5cbi8vIGtlZXAgdGhlIHByb3RvdHlwZXMgaW4gc3luYyAoYW4gZWxlbWVudCBoYXMgdGhlIHNhbWUgZnVuY3Rpb25zIGFzIGEgY29sbGVjdGlvbilcbi8vIGFuZCB1c2UgZWxlZm4gYW5kIGVsZXNmbiBhcyBzaG9ydGhhbmRzIHRvIHRoZSBwcm90b3R5cGVzXG52YXIgZWxlc2ZuJDEgPSBFbGVtZW50LnByb3RvdHlwZSA9IENvbGxlY3Rpb24ucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShBcnJheS5wcm90b3R5cGUpO1xuZWxlc2ZuJDEuaW5zdGFuY2VTdHJpbmcgPSBmdW5jdGlvbiAoKSB7XG4gIHJldHVybiAnY29sbGVjdGlvbic7XG59O1xuZWxlc2ZuJDEuc3Bhd24gPSBmdW5jdGlvbiAoZWxlcywgdW5pcXVlKSB7XG4gIHJldHVybiBuZXcgQ29sbGVjdGlvbih0aGlzLmN5KCksIGVsZXMsIHVuaXF1ZSk7XG59O1xuZWxlc2ZuJDEuc3Bhd25TZWxmID0gZnVuY3Rpb24gKCkge1xuICByZXR1cm4gdGhpcy5zcGF3bih0aGlzKTtcbn07XG5lbGVzZm4kMS5jeSA9IGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuIHRoaXMuX3ByaXZhdGUuY3k7XG59O1xuZWxlc2ZuJDEucmVuZGVyZXIgPSBmdW5jdGlvbiAoKSB7XG4gIHJldHVybiB0aGlzLl9wcml2YXRlLmN5LnJlbmRlcmVyKCk7XG59O1xuZWxlc2ZuJDEuZWxlbWVudCA9IGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuIHRoaXNbMF07XG59O1xuZWxlc2ZuJDEuY29sbGVjdGlvbiA9IGZ1bmN0aW9uICgpIHtcbiAgaWYgKGNvbGxlY3Rpb24odGhpcykpIHtcbiAgICByZXR1cm4gdGhpcztcbiAgfSBlbHNlIHtcbiAgICAvLyBhbiBlbGVtZW50XG4gICAgcmV0dXJuIG5ldyBDb2xsZWN0aW9uKHRoaXMuX3ByaXZhdGUuY3ksIFt0aGlzXSk7XG4gIH1cbn07XG5lbGVzZm4kMS51bmlxdWUgPSBmdW5jdGlvbiAoKSB7XG4gIHJldHVybiBuZXcgQ29sbGVjdGlvbih0aGlzLl9wcml2YXRlLmN5LCB0aGlzLCB0cnVlKTtcbn07XG5lbGVzZm4kMS5oYXNFbGVtZW50V2l0aElkID0gZnVuY3Rpb24gKGlkKSB7XG4gIGlkID0gJycgKyBpZDsgLy8gaWQgbXVzdCBiZSBzdHJpbmdcblxuICByZXR1cm4gdGhpcy5fcHJpdmF0ZS5tYXAuaGFzKGlkKTtcbn07XG5lbGVzZm4kMS5nZXRFbGVtZW50QnlJZCA9IGZ1bmN0aW9uIChpZCkge1xuICBpZCA9ICcnICsgaWQ7IC8vIGlkIG11c3QgYmUgc3RyaW5nXG5cbiAgdmFyIGN5ID0gdGhpcy5fcHJpdmF0ZS5jeTtcbiAgdmFyIGVudHJ5ID0gdGhpcy5fcHJpdmF0ZS5tYXAuZ2V0KGlkKTtcbiAgcmV0dXJuIGVudHJ5ID8gZW50cnkuZWxlIDogbmV3IENvbGxlY3Rpb24oY3kpOyAvLyBnZXQgZWxlIG9yIGVtcHR5IGNvbGxlY3Rpb25cbn07XG5lbGVzZm4kMS4kaWQgPSBlbGVzZm4kMS5nZXRFbGVtZW50QnlJZDtcbmVsZXNmbiQxLnBvb2xJbmRleCA9IGZ1bmN0aW9uICgpIHtcbiAgdmFyIGN5ID0gdGhpcy5fcHJpdmF0ZS5jeTtcbiAgdmFyIGVsZXMgPSBjeS5fcHJpdmF0ZS5lbGVtZW50cztcbiAgdmFyIGlkID0gdGhpc1swXS5fcHJpdmF0ZS5kYXRhLmlkO1xuICByZXR1cm4gZWxlcy5fcHJpdmF0ZS5tYXAuZ2V0KGlkKS5pbmRleDtcbn07XG5lbGVzZm4kMS5pbmRleE9mID0gZnVuY3Rpb24gKGVsZSkge1xuICB2YXIgaWQgPSBlbGVbMF0uX3ByaXZhdGUuZGF0YS5pZDtcbiAgcmV0dXJuIHRoaXMuX3ByaXZhdGUubWFwLmdldChpZCkuaW5kZXg7XG59O1xuZWxlc2ZuJDEuaW5kZXhPZklkID0gZnVuY3Rpb24gKGlkKSB7XG4gIGlkID0gJycgKyBpZDsgLy8gaWQgbXVzdCBiZSBzdHJpbmdcblxuICByZXR1cm4gdGhpcy5fcHJpdmF0ZS5tYXAuZ2V0KGlkKS5pbmRleDtcbn07XG5lbGVzZm4kMS5qc29uID0gZnVuY3Rpb24gKG9iaikge1xuICB2YXIgZWxlID0gdGhpcy5lbGVtZW50KCk7XG4gIHZhciBjeSA9IHRoaXMuY3koKTtcbiAgaWYgKGVsZSA9PSBudWxsICYmIG9iaikge1xuICAgIHJldHVybiB0aGlzO1xuICB9IC8vIGNhbid0IHNldCB0byBubyBlbGVzXG5cbiAgaWYgKGVsZSA9PSBudWxsKSB7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfSAvLyBjYW4ndCBnZXQgZnJvbSBubyBlbGVzXG5cbiAgdmFyIHAgPSBlbGUuX3ByaXZhdGU7XG4gIGlmIChwbGFpbk9iamVjdChvYmopKSB7XG4gICAgLy8gc2V0XG5cbiAgICBjeS5zdGFydEJhdGNoKCk7XG4gICAgaWYgKG9iai5kYXRhKSB7XG4gICAgICBlbGUuZGF0YShvYmouZGF0YSk7XG4gICAgICB2YXIgX2RhdGEyID0gcC5kYXRhO1xuICAgICAgaWYgKGVsZS5pc0VkZ2UoKSkge1xuICAgICAgICAvLyBzb3VyY2UgYW5kIHRhcmdldCBhcmUgaW1tdXRhYmxlIHZpYSBkYXRhKClcbiAgICAgICAgdmFyIG1vdmUgPSBmYWxzZTtcbiAgICAgICAgdmFyIHNwZWMgPSB7fTtcbiAgICAgICAgdmFyIHNyYyA9IG9iai5kYXRhLnNvdXJjZTtcbiAgICAgICAgdmFyIHRndCA9IG9iai5kYXRhLnRhcmdldDtcbiAgICAgICAgaWYgKHNyYyAhPSBudWxsICYmIHNyYyAhPSBfZGF0YTIuc291cmNlKSB7XG4gICAgICAgICAgc3BlYy5zb3VyY2UgPSAnJyArIHNyYzsgLy8gaWQgbXVzdCBiZSBzdHJpbmdcbiAgICAgICAgICBtb3ZlID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGd0ICE9IG51bGwgJiYgdGd0ICE9IF9kYXRhMi50YXJnZXQpIHtcbiAgICAgICAgICBzcGVjLnRhcmdldCA9ICcnICsgdGd0OyAvLyBpZCBtdXN0IGJlIHN0cmluZ1xuICAgICAgICAgIG1vdmUgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIGlmIChtb3ZlKSB7XG4gICAgICAgICAgZWxlID0gZWxlLm1vdmUoc3BlYyk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIHBhcmVudCBpcyBpbW11dGFibGUgdmlhIGRhdGEoKVxuICAgICAgICB2YXIgbmV3UGFyZW50VmFsU3BlY2QgPSAncGFyZW50JyBpbiBvYmouZGF0YTtcbiAgICAgICAgdmFyIHBhcmVudCA9IG9iai5kYXRhLnBhcmVudDtcbiAgICAgICAgaWYgKG5ld1BhcmVudFZhbFNwZWNkICYmIChwYXJlbnQgIT0gbnVsbCB8fCBfZGF0YTIucGFyZW50ICE9IG51bGwpICYmIHBhcmVudCAhPSBfZGF0YTIucGFyZW50KSB7XG4gICAgICAgICAgaWYgKHBhcmVudCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAvLyBjYW4ndCBzZXQgdW5kZWZpbmVkIGltcGVyYXRpdmVseSwgc28gdXNlIG51bGxcbiAgICAgICAgICAgIHBhcmVudCA9IG51bGw7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmIChwYXJlbnQgIT0gbnVsbCkge1xuICAgICAgICAgICAgcGFyZW50ID0gJycgKyBwYXJlbnQ7IC8vIGlkIG11c3QgYmUgc3RyaW5nXG4gICAgICAgICAgfVxuICAgICAgICAgIGVsZSA9IGVsZS5tb3ZlKHtcbiAgICAgICAgICAgIHBhcmVudDogcGFyZW50XG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKG9iai5wb3NpdGlvbikge1xuICAgICAgZWxlLnBvc2l0aW9uKG9iai5wb3NpdGlvbik7XG4gICAgfVxuXG4gICAgLy8gaWdub3JlIGdyb3VwIC0tIGltbXV0YWJsZVxuXG4gICAgdmFyIGNoZWNrU3dpdGNoID0gZnVuY3Rpb24gY2hlY2tTd2l0Y2goaywgdHJ1ZUZuTmFtZSwgZmFsc2VGbk5hbWUpIHtcbiAgICAgIHZhciBvYmpfayA9IG9ialtrXTtcbiAgICAgIGlmIChvYmpfayAhPSBudWxsICYmIG9ial9rICE9PSBwW2tdKSB7XG4gICAgICAgIGlmIChvYmpfaykge1xuICAgICAgICAgIGVsZVt0cnVlRm5OYW1lXSgpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGVsZVtmYWxzZUZuTmFtZV0oKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH07XG4gICAgY2hlY2tTd2l0Y2goJ3JlbW92ZWQnLCAncmVtb3ZlJywgJ3Jlc3RvcmUnKTtcbiAgICBjaGVja1N3aXRjaCgnc2VsZWN0ZWQnLCAnc2VsZWN0JywgJ3Vuc2VsZWN0Jyk7XG4gICAgY2hlY2tTd2l0Y2goJ3NlbGVjdGFibGUnLCAnc2VsZWN0aWZ5JywgJ3Vuc2VsZWN0aWZ5Jyk7XG4gICAgY2hlY2tTd2l0Y2goJ2xvY2tlZCcsICdsb2NrJywgJ3VubG9jaycpO1xuICAgIGNoZWNrU3dpdGNoKCdncmFiYmFibGUnLCAnZ3JhYmlmeScsICd1bmdyYWJpZnknKTtcbiAgICBjaGVja1N3aXRjaCgncGFubmFibGUnLCAncGFuaWZ5JywgJ3VucGFuaWZ5Jyk7XG4gICAgaWYgKG9iai5jbGFzc2VzICE9IG51bGwpIHtcbiAgICAgIGVsZS5jbGFzc2VzKG9iai5jbGFzc2VzKTtcbiAgICB9XG4gICAgY3kuZW5kQmF0Y2goKTtcbiAgICByZXR1cm4gdGhpcztcbiAgfSBlbHNlIGlmIChvYmogPT09IHVuZGVmaW5lZCkge1xuICAgIC8vIGdldFxuXG4gICAgdmFyIGpzb24gPSB7XG4gICAgICBkYXRhOiBjb3B5KHAuZGF0YSksXG4gICAgICBwb3NpdGlvbjogY29weShwLnBvc2l0aW9uKSxcbiAgICAgIGdyb3VwOiBwLmdyb3VwLFxuICAgICAgcmVtb3ZlZDogcC5yZW1vdmVkLFxuICAgICAgc2VsZWN0ZWQ6IHAuc2VsZWN0ZWQsXG4gICAgICBzZWxlY3RhYmxlOiBwLnNlbGVjdGFibGUsXG4gICAgICBsb2NrZWQ6IHAubG9ja2VkLFxuICAgICAgZ3JhYmJhYmxlOiBwLmdyYWJiYWJsZSxcbiAgICAgIHBhbm5hYmxlOiBwLnBhbm5hYmxlLFxuICAgICAgY2xhc3NlczogbnVsbFxuICAgIH07XG4gICAganNvbi5jbGFzc2VzID0gJyc7XG4gICAgdmFyIGkgPSAwO1xuICAgIHAuY2xhc3Nlcy5mb3JFYWNoKGZ1bmN0aW9uIChjbHMpIHtcbiAgICAgIHJldHVybiBqc29uLmNsYXNzZXMgKz0gaSsrID09PSAwID8gY2xzIDogJyAnICsgY2xzO1xuICAgIH0pO1xuICAgIHJldHVybiBqc29uO1xuICB9XG59O1xuZWxlc2ZuJDEuanNvbnMgPSBmdW5jdGlvbiAoKSB7XG4gIHZhciBqc29ucyA9IFtdO1xuICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMubGVuZ3RoOyBpKyspIHtcbiAgICB2YXIgZWxlID0gdGhpc1tpXTtcbiAgICB2YXIganNvbiA9IGVsZS5qc29uKCk7XG4gICAganNvbnMucHVzaChqc29uKTtcbiAgfVxuICByZXR1cm4ganNvbnM7XG59O1xuZWxlc2ZuJDEuY2xvbmUgPSBmdW5jdGlvbiAoKSB7XG4gIHZhciBjeSA9IHRoaXMuY3koKTtcbiAgdmFyIGVsZXNBcnIgPSBbXTtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLmxlbmd0aDsgaSsrKSB7XG4gICAgdmFyIGVsZSA9IHRoaXNbaV07XG4gICAgdmFyIGpzb24gPSBlbGUuanNvbigpO1xuICAgIHZhciBjbG9uZSA9IG5ldyBFbGVtZW50KGN5LCBqc29uLCBmYWxzZSk7IC8vIE5CIG5vIHJlc3RvcmVcblxuICAgIGVsZXNBcnIucHVzaChjbG9uZSk7XG4gIH1cbiAgcmV0dXJuIG5ldyBDb2xsZWN0aW9uKGN5LCBlbGVzQXJyKTtcbn07XG5lbGVzZm4kMS5jb3B5ID0gZWxlc2ZuJDEuY2xvbmU7XG5lbGVzZm4kMS5yZXN0b3JlID0gZnVuY3Rpb24gKCkge1xuICB2YXIgbm90aWZ5UmVuZGVyZXIgPSBhcmd1bWVudHMubGVuZ3RoID4gMCAmJiBhcmd1bWVudHNbMF0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1swXSA6IHRydWU7XG4gIHZhciBhZGRUb1Bvb2wgPSBhcmd1bWVudHMubGVuZ3RoID4gMSAmJiBhcmd1bWVudHNbMV0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1sxXSA6IHRydWU7XG4gIHZhciBzZWxmID0gdGhpcztcbiAgdmFyIGN5ID0gc2VsZi5jeSgpO1xuICB2YXIgY3lfcCA9IGN5Ll9wcml2YXRlO1xuXG4gIC8vIGNyZWF0ZSBhcnJheXMgb2Ygbm9kZXMgYW5kIGVkZ2VzLCBzaW5jZSB3ZSBuZWVkIHRvXG4gIC8vIHJlc3RvcmUgdGhlIG5vZGVzIGZpcnN0XG4gIHZhciBub2RlcyA9IFtdO1xuICB2YXIgZWRnZXMgPSBbXTtcbiAgdmFyIGVsZW1lbnRzO1xuICBmb3IgKHZhciBfaTMgPSAwLCBsID0gc2VsZi5sZW5ndGg7IF9pMyA8IGw7IF9pMysrKSB7XG4gICAgdmFyIGVsZSA9IHNlbGZbX2kzXTtcbiAgICBpZiAoYWRkVG9Qb29sICYmICFlbGUucmVtb3ZlZCgpKSB7XG4gICAgICAvLyBkb24ndCBuZWVkIHRvIGhhbmRsZSB0aGlzIGVsZVxuICAgICAgY29udGludWU7XG4gICAgfVxuXG4gICAgLy8ga2VlcCBub2RlcyBmaXJzdCBpbiB0aGUgYXJyYXkgYW5kIGVkZ2VzIGFmdGVyXG4gICAgaWYgKGVsZS5pc05vZGUoKSkge1xuICAgICAgLy8gcHV0IHRvIGZyb250IG9mIGFycmF5IGlmIG5vZGVcbiAgICAgIG5vZGVzLnB1c2goZWxlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gcHV0IHRvIGVuZCBvZiBhcnJheSBpZiBlZGdlXG4gICAgICBlZGdlcy5wdXNoKGVsZSk7XG4gICAgfVxuICB9XG4gIGVsZW1lbnRzID0gbm9kZXMuY29uY2F0KGVkZ2VzKTtcbiAgdmFyIGk7XG4gIHZhciByZW1vdmVGcm9tRWxlbWVudHMgPSBmdW5jdGlvbiByZW1vdmVGcm9tRWxlbWVudHMoKSB7XG4gICAgZWxlbWVudHMuc3BsaWNlKGksIDEpO1xuICAgIGktLTtcbiAgfTtcblxuICAvLyBub3csIHJlc3RvcmUgZWFjaCBlbGVtZW50XG4gIGZvciAoaSA9IDA7IGkgPCBlbGVtZW50cy5sZW5ndGg7IGkrKykge1xuICAgIHZhciBfZWxlMiA9IGVsZW1lbnRzW2ldO1xuICAgIHZhciBfcHJpdmF0ZSA9IF9lbGUyLl9wcml2YXRlO1xuICAgIHZhciBfZGF0YTMgPSBfcHJpdmF0ZS5kYXRhO1xuXG4gICAgLy8gdGhlIHRyYXZlcnNhbCBjYWNoZSBzaG91bGQgc3RhcnQgZnJlc2ggd2hlbiBlbGUgaXMgYWRkZWRcbiAgICBfZWxlMi5jbGVhclRyYXZlcnNhbENhY2hlKCk7XG5cbiAgICAvLyBzZXQgaWQgYW5kIHZhbGlkYXRlXG4gICAgaWYgKCFhZGRUb1Bvb2wgJiYgIV9wcml2YXRlLnJlbW92ZWQpIDsgZWxzZSBpZiAoX2RhdGEzLmlkID09PSB1bmRlZmluZWQpIHtcbiAgICAgIF9kYXRhMy5pZCA9IHV1aWQoKTtcbiAgICB9IGVsc2UgaWYgKG51bWJlciQxKF9kYXRhMy5pZCkpIHtcbiAgICAgIF9kYXRhMy5pZCA9ICcnICsgX2RhdGEzLmlkOyAvLyBub3cgaXQncyBhIHN0cmluZ1xuICAgIH0gZWxzZSBpZiAoZW1wdHlTdHJpbmcoX2RhdGEzLmlkKSB8fCAhc3RyaW5nKF9kYXRhMy5pZCkpIHtcbiAgICAgIGVycm9yKCdDYW4gbm90IGNyZWF0ZSBlbGVtZW50IHdpdGggaW52YWxpZCBzdHJpbmcgSUQgYCcgKyBfZGF0YTMuaWQgKyAnYCcpO1xuXG4gICAgICAvLyBjYW4ndCBjcmVhdGUgZWxlbWVudCBpZiBpdCBoYXMgZW1wdHkgc3RyaW5nIGFzIGlkIG9yIG5vbi1zdHJpbmcgaWRcbiAgICAgIHJlbW92ZUZyb21FbGVtZW50cygpO1xuICAgICAgY29udGludWU7XG4gICAgfSBlbHNlIGlmIChjeS5oYXNFbGVtZW50V2l0aElkKF9kYXRhMy5pZCkpIHtcbiAgICAgIGVycm9yKCdDYW4gbm90IGNyZWF0ZSBzZWNvbmQgZWxlbWVudCB3aXRoIElEIGAnICsgX2RhdGEzLmlkICsgJ2AnKTtcblxuICAgICAgLy8gY2FuJ3QgY3JlYXRlIGVsZW1lbnQgaWYgb25lIGFscmVhZHkgaGFzIHRoYXQgaWRcbiAgICAgIHJlbW92ZUZyb21FbGVtZW50cygpO1xuICAgICAgY29udGludWU7XG4gICAgfVxuICAgIHZhciBpZCA9IF9kYXRhMy5pZDsgLy8gaWQgaXMgZmluYWxpc2VkLCBub3cgbGV0J3Mga2VlcCBhIHJlZlxuXG4gICAgaWYgKF9lbGUyLmlzTm9kZSgpKSB7XG4gICAgICAvLyBleHRyYSBjaGVja3MgZm9yIG5vZGVzXG4gICAgICB2YXIgcG9zID0gX3ByaXZhdGUucG9zaXRpb247XG5cbiAgICAgIC8vIG1ha2Ugc3VyZSB0aGUgbm9kZXMgaGF2ZSBhIGRlZmluZWQgcG9zaXRpb25cblxuICAgICAgaWYgKHBvcy54ID09IG51bGwpIHtcbiAgICAgICAgcG9zLnggPSAwO1xuICAgICAgfVxuICAgICAgaWYgKHBvcy55ID09IG51bGwpIHtcbiAgICAgICAgcG9zLnkgPSAwO1xuICAgICAgfVxuICAgIH1cbiAgICBpZiAoX2VsZTIuaXNFZGdlKCkpIHtcbiAgICAgIC8vIGV4dHJhIGNoZWNrcyBmb3IgZWRnZXNcblxuICAgICAgdmFyIGVkZ2UgPSBfZWxlMjtcbiAgICAgIHZhciBmaWVsZHMgPSBbJ3NvdXJjZScsICd0YXJnZXQnXTtcbiAgICAgIHZhciBmaWVsZHNMZW5ndGggPSBmaWVsZHMubGVuZ3RoO1xuICAgICAgdmFyIGJhZFNvdXJjZU9yVGFyZ2V0ID0gZmFsc2U7XG4gICAgICBmb3IgKHZhciBqID0gMDsgaiA8IGZpZWxkc0xlbmd0aDsgaisrKSB7XG4gICAgICAgIHZhciBmaWVsZCA9IGZpZWxkc1tqXTtcbiAgICAgICAgdmFyIHZhbCA9IF9kYXRhM1tmaWVsZF07XG4gICAgICAgIGlmIChudW1iZXIkMSh2YWwpKSB7XG4gICAgICAgICAgdmFsID0gX2RhdGEzW2ZpZWxkXSA9ICcnICsgX2RhdGEzW2ZpZWxkXTsgLy8gbm93IHN0cmluZ1xuICAgICAgICB9XG4gICAgICAgIGlmICh2YWwgPT0gbnVsbCB8fCB2YWwgPT09ICcnKSB7XG4gICAgICAgICAgLy8gY2FuJ3QgY3JlYXRlIGlmIHNvdXJjZSBvciB0YXJnZXQgaXMgbm90IGRlZmluZWQgcHJvcGVybHlcbiAgICAgICAgICBlcnJvcignQ2FuIG5vdCBjcmVhdGUgZWRnZSBgJyArIGlkICsgJ2Agd2l0aCB1bnNwZWNpZmllZCAnICsgZmllbGQpO1xuICAgICAgICAgIGJhZFNvdXJjZU9yVGFyZ2V0ID0gdHJ1ZTtcbiAgICAgICAgfSBlbHNlIGlmICghY3kuaGFzRWxlbWVudFdpdGhJZCh2YWwpKSB7XG4gICAgICAgICAgLy8gY2FuJ3QgY3JlYXRlIGVkZ2UgaWYgb25lIG9mIGl0cyBub2RlcyBkb2Vzbid0IGV4aXN0XG4gICAgICAgICAgZXJyb3IoJ0NhbiBub3QgY3JlYXRlIGVkZ2UgYCcgKyBpZCArICdgIHdpdGggbm9uZXhpc3RhbnQgJyArIGZpZWxkICsgJyBgJyArIHZhbCArICdgJyk7XG4gICAgICAgICAgYmFkU291cmNlT3JUYXJnZXQgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAoYmFkU291cmNlT3JUYXJnZXQpIHtcbiAgICAgICAgcmVtb3ZlRnJvbUVsZW1lbnRzKCk7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfSAvLyBjYW4ndCBjcmVhdGUgdGhpc1xuXG4gICAgICB2YXIgc3JjID0gY3kuZ2V0RWxlbWVudEJ5SWQoX2RhdGEzLnNvdXJjZSk7XG4gICAgICB2YXIgdGd0ID0gY3kuZ2V0RWxlbWVudEJ5SWQoX2RhdGEzLnRhcmdldCk7XG5cbiAgICAgIC8vIG9ubHkgb25lIGVkZ2UgaW4gbm9kZSBpZiBsb29wXG4gICAgICBpZiAoc3JjLnNhbWUodGd0KSkge1xuICAgICAgICBzcmMuX3ByaXZhdGUuZWRnZXMucHVzaChlZGdlKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHNyYy5fcHJpdmF0ZS5lZGdlcy5wdXNoKGVkZ2UpO1xuICAgICAgICB0Z3QuX3ByaXZhdGUuZWRnZXMucHVzaChlZGdlKTtcbiAgICAgIH1cbiAgICAgIGVkZ2UuX3ByaXZhdGUuc291cmNlID0gc3JjO1xuICAgICAgZWRnZS5fcHJpdmF0ZS50YXJnZXQgPSB0Z3Q7XG4gICAgfSAvLyBpZiBpcyBlZGdlXG5cbiAgICAvLyBjcmVhdGUgbW9jayBpZHMgLyBpbmRleGVzIG1hcHMgZm9yIGVsZW1lbnQgc28gaXQgY2FuIGJlIHVzZWQgbGlrZSBjb2xsZWN0aW9uc1xuICAgIF9wcml2YXRlLm1hcCA9IG5ldyBNYXAkMSgpO1xuICAgIF9wcml2YXRlLm1hcC5zZXQoaWQsIHtcbiAgICAgIGVsZTogX2VsZTIsXG4gICAgICBpbmRleDogMFxuICAgIH0pO1xuICAgIF9wcml2YXRlLnJlbW92ZWQgPSBmYWxzZTtcbiAgICBpZiAoYWRkVG9Qb29sKSB7XG4gICAgICBjeS5hZGRUb1Bvb2woX2VsZTIpO1xuICAgIH1cbiAgfSAvLyBmb3IgZWFjaCBlbGVtZW50XG5cbiAgLy8gZG8gY29tcG91bmQgbm9kZSBzYW5pdHkgY2hlY2tzXG4gIGZvciAodmFyIF9pNCA9IDA7IF9pNCA8IG5vZGVzLmxlbmd0aDsgX2k0KyspIHtcbiAgICAvLyBlYWNoIG5vZGVcbiAgICB2YXIgbm9kZSA9IG5vZGVzW19pNF07XG4gICAgdmFyIF9kYXRhNCA9IG5vZGUuX3ByaXZhdGUuZGF0YTtcbiAgICBpZiAobnVtYmVyJDEoX2RhdGE0LnBhcmVudCkpIHtcbiAgICAgIC8vIHRoZW4gYXV0b21ha2Ugc3RyaW5nXG4gICAgICBfZGF0YTQucGFyZW50ID0gJycgKyBfZGF0YTQucGFyZW50O1xuICAgIH1cbiAgICB2YXIgcGFyZW50SWQgPSBfZGF0YTQucGFyZW50O1xuICAgIHZhciBzcGVjaWZpZWRQYXJlbnQgPSBwYXJlbnRJZCAhPSBudWxsO1xuICAgIGlmIChzcGVjaWZpZWRQYXJlbnQgfHwgbm9kZS5fcHJpdmF0ZS5wYXJlbnQpIHtcbiAgICAgIHZhciBwYXJlbnQgPSBub2RlLl9wcml2YXRlLnBhcmVudCA/IGN5LmNvbGxlY3Rpb24oKS5tZXJnZShub2RlLl9wcml2YXRlLnBhcmVudCkgOiBjeS5nZXRFbGVtZW50QnlJZChwYXJlbnRJZCk7XG4gICAgICBpZiAocGFyZW50LmVtcHR5KCkpIHtcbiAgICAgICAgLy8gbm9uLWV4aXN0YW50IHBhcmVudDsganVzdCByZW1vdmUgaXRcbiAgICAgICAgX2RhdGE0LnBhcmVudCA9IHVuZGVmaW5lZDtcbiAgICAgIH0gZWxzZSBpZiAocGFyZW50WzBdLnJlbW92ZWQoKSkge1xuICAgICAgICB3YXJuKCdOb2RlIGFkZGVkIHdpdGggbWlzc2luZyBwYXJlbnQsIHJlZmVyZW5jZSB0byBwYXJlbnQgcmVtb3ZlZCcpO1xuICAgICAgICBfZGF0YTQucGFyZW50ID0gdW5kZWZpbmVkO1xuICAgICAgICBub2RlLl9wcml2YXRlLnBhcmVudCA9IG51bGw7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB2YXIgc2VsZkFzUGFyZW50ID0gZmFsc2U7XG4gICAgICAgIHZhciBhbmNlc3RvciA9IHBhcmVudDtcbiAgICAgICAgd2hpbGUgKCFhbmNlc3Rvci5lbXB0eSgpKSB7XG4gICAgICAgICAgaWYgKG5vZGUuc2FtZShhbmNlc3RvcikpIHtcbiAgICAgICAgICAgIC8vIG1hcmsgc2VsZiBhcyBwYXJlbnQgYW5kIHJlbW92ZSBmcm9tIGRhdGFcbiAgICAgICAgICAgIHNlbGZBc1BhcmVudCA9IHRydWU7XG4gICAgICAgICAgICBfZGF0YTQucGFyZW50ID0gdW5kZWZpbmVkOyAvLyByZW1vdmUgcGFyZW50IHJlZmVyZW5jZVxuXG4gICAgICAgICAgICAvLyBleGl0IG9yIHdlIGxvb3AgZm9yZXZlclxuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuICAgICAgICAgIGFuY2VzdG9yID0gYW5jZXN0b3IucGFyZW50KCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFzZWxmQXNQYXJlbnQpIHtcbiAgICAgICAgICAvLyBjb25uZWN0IHdpdGggY2hpbGRyZW5cbiAgICAgICAgICBwYXJlbnRbMF0uX3ByaXZhdGUuY2hpbGRyZW4ucHVzaChub2RlKTtcbiAgICAgICAgICBub2RlLl9wcml2YXRlLnBhcmVudCA9IHBhcmVudFswXTtcblxuICAgICAgICAgIC8vIGxldCB0aGUgY29yZSBrbm93IHdlIGhhdmUgYSBjb21wb3VuZCBncmFwaFxuICAgICAgICAgIGN5X3AuaGFzQ29tcG91bmROb2RlcyA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgIH0gLy8gZWxzZVxuICAgIH0gLy8gaWYgc3BlY2lmaWVkIHBhcmVudFxuICB9IC8vIGZvciBlYWNoIG5vZGVcblxuICBpZiAoZWxlbWVudHMubGVuZ3RoID4gMCkge1xuICAgIHZhciByZXN0b3JlZCA9IGVsZW1lbnRzLmxlbmd0aCA9PT0gc2VsZi5sZW5ndGggPyBzZWxmIDogbmV3IENvbGxlY3Rpb24oY3ksIGVsZW1lbnRzKTtcbiAgICBmb3IgKHZhciBfaTUgPSAwOyBfaTUgPCByZXN0b3JlZC5sZW5ndGg7IF9pNSsrKSB7XG4gICAgICB2YXIgX2VsZTMgPSByZXN0b3JlZFtfaTVdO1xuICAgICAgaWYgKF9lbGUzLmlzTm9kZSgpKSB7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuXG4gICAgICAvLyBhZGRpbmcgYW4gZWRnZSBpbnZhbGlkYXRlcyB0aGUgdHJhdmVyc2FsIGNhY2hlcyBmb3IgdGhlIHBhcmFsbGVsIGVkZ2VzXG4gICAgICBfZWxlMy5wYXJhbGxlbEVkZ2VzKCkuY2xlYXJUcmF2ZXJzYWxDYWNoZSgpO1xuXG4gICAgICAvLyBhZGRpbmcgYW4gZWRnZSBpbnZhbGlkYXRlcyB0aGUgdHJhdmVyc2FsIGNhY2hlIGZvciB0aGUgY29ubmVjdGVkIG5vZGVzXG4gICAgICBfZWxlMy5zb3VyY2UoKS5jbGVhclRyYXZlcnNhbENhY2hlKCk7XG4gICAgICBfZWxlMy50YXJnZXQoKS5jbGVhclRyYXZlcnNhbENhY2hlKCk7XG4gICAgfVxuICAgIHZhciB0b1VwZGF0ZVN0eWxlO1xuICAgIGlmIChjeV9wLmhhc0NvbXBvdW5kTm9kZXMpIHtcbiAgICAgIHRvVXBkYXRlU3R5bGUgPSBjeS5jb2xsZWN0aW9uKCkubWVyZ2UocmVzdG9yZWQpLm1lcmdlKHJlc3RvcmVkLmNvbm5lY3RlZE5vZGVzKCkpLm1lcmdlKHJlc3RvcmVkLnBhcmVudCgpKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdG9VcGRhdGVTdHlsZSA9IHJlc3RvcmVkO1xuICAgIH1cbiAgICB0b1VwZGF0ZVN0eWxlLmRpcnR5Q29tcG91bmRCb3VuZHNDYWNoZSgpLmRpcnR5Qm91bmRpbmdCb3hDYWNoZSgpLnVwZGF0ZVN0eWxlKG5vdGlmeVJlbmRlcmVyKTtcbiAgICBpZiAobm90aWZ5UmVuZGVyZXIpIHtcbiAgICAgIHJlc3RvcmVkLmVtaXRBbmROb3RpZnkoJ2FkZCcpO1xuICAgIH0gZWxzZSBpZiAoYWRkVG9Qb29sKSB7XG4gICAgICByZXN0b3JlZC5lbWl0KCdhZGQnKTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHNlbGY7IC8vIGNoYWluYWJpbGl0eVxufTtcbmVsZXNmbiQxLnJlbW92ZWQgPSBmdW5jdGlvbiAoKSB7XG4gIHZhciBlbGUgPSB0aGlzWzBdO1xuICByZXR1cm4gZWxlICYmIGVsZS5fcHJpdmF0ZS5yZW1vdmVkO1xufTtcbmVsZXNmbiQxLmluc2lkZSA9IGZ1bmN0aW9uICgpIHtcbiAgdmFyIGVsZSA9IHRoaXNbMF07XG4gIHJldHVybiBlbGUgJiYgIWVsZS5fcHJpdmF0ZS5yZW1vdmVkO1xufTtcbmVsZXNmbiQxLnJlbW92ZSA9IGZ1bmN0aW9uICgpIHtcbiAgdmFyIG5vdGlmeVJlbmRlcmVyID0gYXJndW1lbnRzLmxlbmd0aCA+IDAgJiYgYXJndW1lbnRzWzBdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMF0gOiB0cnVlO1xuICB2YXIgcmVtb3ZlRnJvbVBvb2wgPSBhcmd1bWVudHMubGVuZ3RoID4gMSAmJiBhcmd1bWVudHNbMV0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1sxXSA6IHRydWU7XG4gIHZhciBzZWxmID0gdGhpcztcbiAgdmFyIGVsZXNUb1JlbW92ZSA9IFtdO1xuICB2YXIgZWxlc1RvUmVtb3ZlSWRzID0ge307XG4gIHZhciBjeSA9IHNlbGYuX3ByaXZhdGUuY3k7XG5cbiAgLy8gYWRkIGNvbm5lY3RlZCBlZGdlc1xuICBmdW5jdGlvbiBhZGRDb25uZWN0ZWRFZGdlcyhub2RlKSB7XG4gICAgdmFyIGVkZ2VzID0gbm9kZS5fcHJpdmF0ZS5lZGdlcztcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGVkZ2VzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBhZGQoZWRnZXNbaV0pO1xuICAgIH1cbiAgfVxuXG4gIC8vIGFkZCBkZXNjZW5kYW50IG5vZGVzXG4gIGZ1bmN0aW9uIGFkZENoaWxkcmVuKG5vZGUpIHtcbiAgICB2YXIgY2hpbGRyZW4gPSBub2RlLl9wcml2YXRlLmNoaWxkcmVuO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgY2hpbGRyZW4ubGVuZ3RoOyBpKyspIHtcbiAgICAgIGFkZChjaGlsZHJlbltpXSk7XG4gICAgfVxuICB9XG4gIGZ1bmN0aW9uIGFkZChlbGUpIHtcbiAgICB2YXIgYWxyZWFkeUFkZGVkID0gZWxlc1RvUmVtb3ZlSWRzW2VsZS5pZCgpXTtcbiAgICBpZiAocmVtb3ZlRnJvbVBvb2wgJiYgZWxlLnJlbW92ZWQoKSB8fCBhbHJlYWR5QWRkZWQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9IGVsc2Uge1xuICAgICAgZWxlc1RvUmVtb3ZlSWRzW2VsZS5pZCgpXSA9IHRydWU7XG4gICAgfVxuICAgIGlmIChlbGUuaXNOb2RlKCkpIHtcbiAgICAgIGVsZXNUb1JlbW92ZS5wdXNoKGVsZSk7IC8vIG5vZGVzIGFyZSByZW1vdmVkIGxhc3RcblxuICAgICAgYWRkQ29ubmVjdGVkRWRnZXMoZWxlKTtcbiAgICAgIGFkZENoaWxkcmVuKGVsZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGVsZXNUb1JlbW92ZS51bnNoaWZ0KGVsZSk7IC8vIGVkZ2VzIGFyZSByZW1vdmVkIGZpcnN0XG4gICAgfVxuICB9XG5cbiAgLy8gbWFrZSB0aGUgbGlzdCBvZiBlbGVtZW50cyB0byByZW1vdmVcbiAgLy8gKG1heSBiZSByZW1vdmluZyBtb3JlIHRoYW4gc3BlY2lmaWVkIGR1ZSB0byBjb25uZWN0ZWQgZWRnZXMgZXRjKVxuXG4gIGZvciAodmFyIGkgPSAwLCBsID0gc2VsZi5sZW5ndGg7IGkgPCBsOyBpKyspIHtcbiAgICB2YXIgZWxlID0gc2VsZltpXTtcbiAgICBhZGQoZWxlKTtcbiAgfVxuICBmdW5jdGlvbiByZW1vdmVFZGdlUmVmKG5vZGUsIGVkZ2UpIHtcbiAgICB2YXIgY29ubmVjdGVkRWRnZXMgPSBub2RlLl9wcml2YXRlLmVkZ2VzO1xuICAgIHJlbW92ZUZyb21BcnJheShjb25uZWN0ZWRFZGdlcywgZWRnZSk7XG5cbiAgICAvLyByZW1vdmluZyBhbiBlZGdlcyBpbnZhbGlkYXRlcyB0aGUgdHJhdmVyc2FsIGNhY2hlIGZvciBpdHMgbm9kZXNcbiAgICBub2RlLmNsZWFyVHJhdmVyc2FsQ2FjaGUoKTtcbiAgfVxuICBmdW5jdGlvbiByZW1vdmVQYXJhbGxlbFJlZihwbGxFZGdlKSB7XG4gICAgLy8gcmVtb3ZpbmcgYW4gZWRnZSBpbnZhbGlkYXRlcyB0aGUgdHJhdmVyc2FsIGNhY2hlcyBmb3IgdGhlIHBhcmFsbGVsIGVkZ2VzXG4gICAgcGxsRWRnZS5jbGVhclRyYXZlcnNhbENhY2hlKCk7XG4gIH1cbiAgdmFyIGFsdGVyZWRQYXJlbnRzID0gW107XG4gIGFsdGVyZWRQYXJlbnRzLmlkcyA9IHt9O1xuICBmdW5jdGlvbiByZW1vdmVDaGlsZFJlZihwYXJlbnQsIGVsZSkge1xuICAgIGVsZSA9IGVsZVswXTtcbiAgICBwYXJlbnQgPSBwYXJlbnRbMF07XG4gICAgdmFyIGNoaWxkcmVuID0gcGFyZW50Ll9wcml2YXRlLmNoaWxkcmVuO1xuICAgIHZhciBwaWQgPSBwYXJlbnQuaWQoKTtcbiAgICByZW1vdmVGcm9tQXJyYXkoY2hpbGRyZW4sIGVsZSk7IC8vIHJlbW92ZSBwYXJlbnQgPT4gY2hpbGQgcmVmXG5cbiAgICBlbGUuX3ByaXZhdGUucGFyZW50ID0gbnVsbDsgLy8gcmVtb3ZlIGNoaWxkID0+IHBhcmVudCByZWZcblxuICAgIGlmICghYWx0ZXJlZFBhcmVudHMuaWRzW3BpZF0pIHtcbiAgICAgIGFsdGVyZWRQYXJlbnRzLmlkc1twaWRdID0gdHJ1ZTtcbiAgICAgIGFsdGVyZWRQYXJlbnRzLnB1c2gocGFyZW50KTtcbiAgICB9XG4gIH1cbiAgc2VsZi5kaXJ0eUNvbXBvdW5kQm91bmRzQ2FjaGUoKTtcbiAgaWYgKHJlbW92ZUZyb21Qb29sKSB7XG4gICAgY3kucmVtb3ZlRnJvbVBvb2woZWxlc1RvUmVtb3ZlKTsgLy8gcmVtb3ZlIGZyb20gY29yZSBwb29sXG4gIH1cbiAgZm9yICh2YXIgX2k2ID0gMDsgX2k2IDwgZWxlc1RvUmVtb3ZlLmxlbmd0aDsgX2k2KyspIHtcbiAgICB2YXIgX2VsZTQgPSBlbGVzVG9SZW1vdmVbX2k2XTtcbiAgICBpZiAoX2VsZTQuaXNFZGdlKCkpIHtcbiAgICAgIC8vIHJlbW92ZSByZWZlcmVuY2VzIHRvIHRoaXMgZWRnZSBpbiBpdHMgY29ubmVjdGVkIG5vZGVzXG4gICAgICB2YXIgc3JjID0gX2VsZTQuc291cmNlKClbMF07XG4gICAgICB2YXIgdGd0ID0gX2VsZTQudGFyZ2V0KClbMF07XG4gICAgICByZW1vdmVFZGdlUmVmKHNyYywgX2VsZTQpO1xuICAgICAgcmVtb3ZlRWRnZVJlZih0Z3QsIF9lbGU0KTtcbiAgICAgIHZhciBwbGxFZGdlcyA9IF9lbGU0LnBhcmFsbGVsRWRnZXMoKTtcbiAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgcGxsRWRnZXMubGVuZ3RoOyBqKyspIHtcbiAgICAgICAgdmFyIHBsbEVkZ2UgPSBwbGxFZGdlc1tqXTtcbiAgICAgICAgcmVtb3ZlUGFyYWxsZWxSZWYocGxsRWRnZSk7XG4gICAgICAgIGlmIChwbGxFZGdlLmlzQnVuZGxlZEJlemllcigpKSB7XG4gICAgICAgICAgcGxsRWRnZS5kaXJ0eUJvdW5kaW5nQm94Q2FjaGUoKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICAvLyByZW1vdmUgcmVmZXJlbmNlIHRvIHBhcmVudFxuICAgICAgdmFyIHBhcmVudCA9IF9lbGU0LnBhcmVudCgpO1xuICAgICAgaWYgKHBhcmVudC5sZW5ndGggIT09IDApIHtcbiAgICAgICAgcmVtb3ZlQ2hpbGRSZWYocGFyZW50LCBfZWxlNCk7XG4gICAgICB9XG4gICAgfVxuICAgIGlmIChyZW1vdmVGcm9tUG9vbCkge1xuICAgICAgLy8gbWFyayBhcyByZW1vdmVkXG4gICAgICBfZWxlNC5fcHJpdmF0ZS5yZW1vdmVkID0gdHJ1ZTtcbiAgICB9XG4gIH1cblxuICAvLyBjaGVjayB0byBzZWUgaWYgd2UgaGF2ZSBhIGNvbXBvdW5kIGdyYXBoIG9yIG5vdFxuICB2YXIgZWxlc1N0aWxsSW5zaWRlID0gY3kuX3ByaXZhdGUuZWxlbWVudHM7XG4gIGN5Ll9wcml2YXRlLmhhc0NvbXBvdW5kTm9kZXMgPSBmYWxzZTtcbiAgZm9yICh2YXIgX2k3ID0gMDsgX2k3IDwgZWxlc1N0aWxsSW5zaWRlLmxlbmd0aDsgX2k3KyspIHtcbiAgICB2YXIgX2VsZTUgPSBlbGVzU3RpbGxJbnNpZGVbX2k3XTtcbiAgICBpZiAoX2VsZTUuaXNQYXJlbnQoKSkge1xuICAgICAgY3kuX3ByaXZhdGUuaGFzQ29tcG91bmROb2RlcyA9IHRydWU7XG4gICAgICBicmVhaztcbiAgICB9XG4gIH1cbiAgdmFyIHJlbW92ZWRFbGVtZW50cyA9IG5ldyBDb2xsZWN0aW9uKHRoaXMuY3koKSwgZWxlc1RvUmVtb3ZlKTtcbiAgaWYgKHJlbW92ZWRFbGVtZW50cy5zaXplKCkgPiAwKSB7XG4gICAgLy8gbXVzdCBtYW51YWxseSBub3RpZnkgc2luY2UgdHJpZ2dlciB3b24ndCBkbyB0aGlzIGF1dG9tYXRpY2FsbHkgb25jZSByZW1vdmVkXG5cbiAgICBpZiAobm90aWZ5UmVuZGVyZXIpIHtcbiAgICAgIHJlbW92ZWRFbGVtZW50cy5lbWl0QW5kTm90aWZ5KCdyZW1vdmUnKTtcbiAgICB9IGVsc2UgaWYgKHJlbW92ZUZyb21Qb29sKSB7XG4gICAgICByZW1vdmVkRWxlbWVudHMuZW1pdCgncmVtb3ZlJyk7XG4gICAgfVxuICB9XG5cbiAgLy8gdGhlIHBhcmVudHMgd2hvIHdlcmUgbW9kaWZpZWQgYnkgdGhlIHJlbW92YWwgbmVlZCB0aGVpciBzdHlsZSB1cGRhdGVkXG4gIGZvciAodmFyIF9pOCA9IDA7IF9pOCA8IGFsdGVyZWRQYXJlbnRzLmxlbmd0aDsgX2k4KyspIHtcbiAgICB2YXIgX2VsZTYgPSBhbHRlcmVkUGFyZW50c1tfaThdO1xuICAgIGlmICghcmVtb3ZlRnJvbVBvb2wgfHwgIV9lbGU2LnJlbW92ZWQoKSkge1xuICAgICAgX2VsZTYudXBkYXRlU3R5bGUoKTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHJlbW92ZWRFbGVtZW50cztcbn07XG5lbGVzZm4kMS5tb3ZlID0gZnVuY3Rpb24gKHN0cnVjdCkge1xuICB2YXIgY3kgPSB0aGlzLl9wcml2YXRlLmN5O1xuICB2YXIgZWxlcyA9IHRoaXM7XG5cbiAgLy8ganVzdCBjbGVhbiB1cCByZWZzLCBjYWNoZXMsIGV0Yy4gaW4gdGhlIHNhbWUgd2F5IGFzIHdoZW4gcmVtb3ZpbmcgYW5kIHRoZW4gcmVzdG9yaW5nXG4gIC8vIChvdXIgY2FsbHMgdG8gcmVtb3ZlL3Jlc3RvcmUgZG8gbm90IHJlbW92ZSBmcm9tIHRoZSBncmFwaCBvciBtYWtlIGV2ZW50cylcbiAgdmFyIG5vdGlmeVJlbmRlcmVyID0gZmFsc2U7XG4gIHZhciBtb2RpZnlQb29sID0gZmFsc2U7XG4gIHZhciB0b1N0cmluZyA9IGZ1bmN0aW9uIHRvU3RyaW5nKGlkKSB7XG4gICAgcmV0dXJuIGlkID09IG51bGwgPyBpZCA6ICcnICsgaWQ7XG4gIH07IC8vIGlkIG11c3QgYmUgc3RyaW5nXG5cbiAgaWYgKHN0cnVjdC5zb3VyY2UgIT09IHVuZGVmaW5lZCB8fCBzdHJ1Y3QudGFyZ2V0ICE9PSB1bmRlZmluZWQpIHtcbiAgICB2YXIgc3JjSWQgPSB0b1N0cmluZyhzdHJ1Y3Quc291cmNlKTtcbiAgICB2YXIgdGd0SWQgPSB0b1N0cmluZyhzdHJ1Y3QudGFyZ2V0KTtcbiAgICB2YXIgc3JjRXhpc3RzID0gc3JjSWQgIT0gbnVsbCAmJiBjeS5oYXNFbGVtZW50V2l0aElkKHNyY0lkKTtcbiAgICB2YXIgdGd0RXhpc3RzID0gdGd0SWQgIT0gbnVsbCAmJiBjeS5oYXNFbGVtZW50V2l0aElkKHRndElkKTtcbiAgICBpZiAoc3JjRXhpc3RzIHx8IHRndEV4aXN0cykge1xuICAgICAgY3kuYmF0Y2goZnVuY3Rpb24gKCkge1xuICAgICAgICAvLyBhdm9pZCBkdXBsaWNhdGUgc3R5bGUgdXBkYXRlc1xuICAgICAgICBlbGVzLnJlbW92ZShub3RpZnlSZW5kZXJlciwgbW9kaWZ5UG9vbCk7IC8vIGNsZWFuIHVwIHJlZnMgZXRjLlxuICAgICAgICBlbGVzLmVtaXRBbmROb3RpZnkoJ21vdmVvdXQnKTtcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBlbGVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgdmFyIGVsZSA9IGVsZXNbaV07XG4gICAgICAgICAgdmFyIF9kYXRhNSA9IGVsZS5fcHJpdmF0ZS5kYXRhO1xuICAgICAgICAgIGlmIChlbGUuaXNFZGdlKCkpIHtcbiAgICAgICAgICAgIGlmIChzcmNFeGlzdHMpIHtcbiAgICAgICAgICAgICAgX2RhdGE1LnNvdXJjZSA9IHNyY0lkO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHRndEV4aXN0cykge1xuICAgICAgICAgICAgICBfZGF0YTUudGFyZ2V0ID0gdGd0SWQ7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGVsZXMucmVzdG9yZShub3RpZnlSZW5kZXJlciwgbW9kaWZ5UG9vbCk7IC8vIG1ha2UgbmV3IHJlZnMsIHN0eWxlLCBldGMuXG4gICAgICB9KTtcbiAgICAgIGVsZXMuZW1pdEFuZE5vdGlmeSgnbW92ZScpO1xuICAgIH1cbiAgfSBlbHNlIGlmIChzdHJ1Y3QucGFyZW50ICE9PSB1bmRlZmluZWQpIHtcbiAgICAvLyBtb3ZlIG5vZGUgdG8gbmV3IHBhcmVudFxuICAgIHZhciBwYXJlbnRJZCA9IHRvU3RyaW5nKHN0cnVjdC5wYXJlbnQpO1xuICAgIHZhciBwYXJlbnRFeGlzdHMgPSBwYXJlbnRJZCA9PT0gbnVsbCB8fCBjeS5oYXNFbGVtZW50V2l0aElkKHBhcmVudElkKTtcbiAgICBpZiAocGFyZW50RXhpc3RzKSB7XG4gICAgICB2YXIgcGlkVG9Bc3NpZ24gPSBwYXJlbnRJZCA9PT0gbnVsbCA/IHVuZGVmaW5lZCA6IHBhcmVudElkO1xuICAgICAgY3kuYmF0Y2goZnVuY3Rpb24gKCkge1xuICAgICAgICAvLyBhdm9pZCBkdXBsaWNhdGUgc3R5bGUgdXBkYXRlc1xuICAgICAgICB2YXIgdXBkYXRlZCA9IGVsZXMucmVtb3ZlKG5vdGlmeVJlbmRlcmVyLCBtb2RpZnlQb29sKTsgLy8gY2xlYW4gdXAgcmVmcyBldGMuXG4gICAgICAgIHVwZGF0ZWQuZW1pdEFuZE5vdGlmeSgnbW92ZW91dCcpO1xuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGVsZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICB2YXIgZWxlID0gZWxlc1tpXTtcbiAgICAgICAgICB2YXIgX2RhdGE2ID0gZWxlLl9wcml2YXRlLmRhdGE7XG4gICAgICAgICAgaWYgKGVsZS5pc05vZGUoKSkge1xuICAgICAgICAgICAgX2RhdGE2LnBhcmVudCA9IHBpZFRvQXNzaWduO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICB1cGRhdGVkLnJlc3RvcmUobm90aWZ5UmVuZGVyZXIsIG1vZGlmeVBvb2wpOyAvLyBtYWtlIG5ldyByZWZzLCBzdHlsZSwgZXRjLlxuICAgICAgfSk7XG4gICAgICBlbGVzLmVtaXRBbmROb3RpZnkoJ21vdmUnKTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHRoaXM7XG59O1xuW2VsZXNmbiRqLCBlbGVzZm4kaSwgZWxlc2ZuJGgsIGVsZXNmbiRnLCBlbGVzZm4kZiwgZGF0YSwgZWxlc2ZuJGQsIGRpbWVuc2lvbnMsIGVsZXNmbiQ5LCBlbGVzZm4kOCwgZWxlc2ZuJDcsIGVsZXNmbiQ2LCBlbGVzZm4kNSwgZWxlc2ZuJDQsIGVsZXNmbiQzLCBlbGVzZm4kMl0uZm9yRWFjaChmdW5jdGlvbiAocHJvcHMpIHtcbiAgZXh0ZW5kKGVsZXNmbiQxLCBwcm9wcyk7XG59KTtcblxudmFyIGNvcmVmbiQ5ID0ge1xuICBhZGQ6IGZ1bmN0aW9uIGFkZChvcHRzKSB7XG4gICAgdmFyIGVsZW1lbnRzO1xuICAgIHZhciBjeSA9IHRoaXM7XG5cbiAgICAvLyBhZGQgdGhlIGVsZW1lbnRzXG4gICAgaWYgKGVsZW1lbnRPckNvbGxlY3Rpb24ob3B0cykpIHtcbiAgICAgIHZhciBlbGVzID0gb3B0cztcbiAgICAgIGlmIChlbGVzLl9wcml2YXRlLmN5ID09PSBjeSkge1xuICAgICAgICAvLyBzYW1lIGluc3RhbmNlID0+IGp1c3QgcmVzdG9yZVxuICAgICAgICBlbGVtZW50cyA9IGVsZXMucmVzdG9yZSgpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gb3RoZXJ3aXNlLCBjb3B5IGZyb20ganNvblxuICAgICAgICB2YXIganNvbnMgPSBbXTtcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBlbGVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgdmFyIGVsZSA9IGVsZXNbaV07XG4gICAgICAgICAganNvbnMucHVzaChlbGUuanNvbigpKTtcbiAgICAgICAgfVxuICAgICAgICBlbGVtZW50cyA9IG5ldyBDb2xsZWN0aW9uKGN5LCBqc29ucyk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gc3BlY2lmeSBhbiBhcnJheSBvZiBvcHRpb25zXG4gICAgZWxzZSBpZiAoYXJyYXkob3B0cykpIHtcbiAgICAgIHZhciBfanNvbnMgPSBvcHRzO1xuICAgICAgZWxlbWVudHMgPSBuZXcgQ29sbGVjdGlvbihjeSwgX2pzb25zKTtcbiAgICB9XG5cbiAgICAvLyBzcGVjaWZ5IHZpYSBvcHRzLm5vZGVzIGFuZCBvcHRzLmVkZ2VzXG4gICAgZWxzZSBpZiAocGxhaW5PYmplY3Qob3B0cykgJiYgKGFycmF5KG9wdHMubm9kZXMpIHx8IGFycmF5KG9wdHMuZWRnZXMpKSkge1xuICAgICAgdmFyIGVsZXNCeUdyb3VwID0gb3B0cztcbiAgICAgIHZhciBfanNvbnMyID0gW107XG4gICAgICB2YXIgZ3JzID0gWydub2RlcycsICdlZGdlcyddO1xuICAgICAgZm9yICh2YXIgX2kgPSAwLCBpbCA9IGdycy5sZW5ndGg7IF9pIDwgaWw7IF9pKyspIHtcbiAgICAgICAgdmFyIGdyb3VwID0gZ3JzW19pXTtcbiAgICAgICAgdmFyIGVsZXNBcnJheSA9IGVsZXNCeUdyb3VwW2dyb3VwXTtcbiAgICAgICAgaWYgKGFycmF5KGVsZXNBcnJheSkpIHtcbiAgICAgICAgICBmb3IgKHZhciBqID0gMCwgamwgPSBlbGVzQXJyYXkubGVuZ3RoOyBqIDwgamw7IGorKykge1xuICAgICAgICAgICAgdmFyIGpzb24gPSBleHRlbmQoe1xuICAgICAgICAgICAgICBncm91cDogZ3JvdXBcbiAgICAgICAgICAgIH0sIGVsZXNBcnJheVtqXSk7XG4gICAgICAgICAgICBfanNvbnMyLnB1c2goanNvbik7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICBlbGVtZW50cyA9IG5ldyBDb2xsZWN0aW9uKGN5LCBfanNvbnMyKTtcbiAgICB9XG5cbiAgICAvLyBzcGVjaWZ5IG9wdGlvbnMgZm9yIG9uZSBlbGVtZW50XG4gICAgZWxzZSB7XG4gICAgICB2YXIgX2pzb24gPSBvcHRzO1xuICAgICAgZWxlbWVudHMgPSBuZXcgRWxlbWVudChjeSwgX2pzb24pLmNvbGxlY3Rpb24oKTtcbiAgICB9XG4gICAgcmV0dXJuIGVsZW1lbnRzO1xuICB9LFxuICByZW1vdmU6IGZ1bmN0aW9uIHJlbW92ZShjb2xsZWN0aW9uKSB7XG4gICAgaWYgKGVsZW1lbnRPckNvbGxlY3Rpb24oY29sbGVjdGlvbikpIDsgZWxzZSBpZiAoc3RyaW5nKGNvbGxlY3Rpb24pKSB7XG4gICAgICB2YXIgc2VsZWN0b3IgPSBjb2xsZWN0aW9uO1xuICAgICAgY29sbGVjdGlvbiA9IHRoaXMuJChzZWxlY3Rvcik7XG4gICAgfVxuICAgIHJldHVybiBjb2xsZWN0aW9uLnJlbW92ZSgpO1xuICB9XG59O1xuXG4vKiBnbG9iYWwgRmxvYXQzMkFycmF5ICovXG5cbi8qISBCZXppZXIgY3VydmUgZnVuY3Rpb24gZ2VuZXJhdG9yLiBDb3B5cmlnaHQgR2FldGFuIFJlbmF1ZGVhdS4gTUlUIExpY2Vuc2U6IGh0dHA6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvTUlUX0xpY2Vuc2UgKi9cbmZ1bmN0aW9uIGdlbmVyYXRlQ3ViaWNCZXppZXIobVgxLCBtWTEsIG1YMiwgbVkyKSB7XG4gIHZhciBORVdUT05fSVRFUkFUSU9OUyA9IDQsXG4gICAgTkVXVE9OX01JTl9TTE9QRSA9IDAuMDAxLFxuICAgIFNVQkRJVklTSU9OX1BSRUNJU0lPTiA9IDAuMDAwMDAwMSxcbiAgICBTVUJESVZJU0lPTl9NQVhfSVRFUkFUSU9OUyA9IDEwLFxuICAgIGtTcGxpbmVUYWJsZVNpemUgPSAxMSxcbiAgICBrU2FtcGxlU3RlcFNpemUgPSAxLjAgLyAoa1NwbGluZVRhYmxlU2l6ZSAtIDEuMCksXG4gICAgZmxvYXQzMkFycmF5U3VwcG9ydGVkID0gdHlwZW9mIEZsb2F0MzJBcnJheSAhPT0gJ3VuZGVmaW5lZCc7XG5cbiAgLyogTXVzdCBjb250YWluIGZvdXIgYXJndW1lbnRzLiAqL1xuICBpZiAoYXJndW1lbnRzLmxlbmd0aCAhPT0gNCkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIC8qIEFyZ3VtZW50cyBtdXN0IGJlIG51bWJlcnMuICovXG4gIGZvciAodmFyIGkgPSAwOyBpIDwgNDsgKytpKSB7XG4gICAgaWYgKHR5cGVvZiBhcmd1bWVudHNbaV0gIT09IFwibnVtYmVyXCIgfHwgaXNOYU4oYXJndW1lbnRzW2ldKSB8fCAhaXNGaW5pdGUoYXJndW1lbnRzW2ldKSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfVxuXG4gIC8qIFggdmFsdWVzIG11c3QgYmUgaW4gdGhlIFswLCAxXSByYW5nZS4gKi9cbiAgbVgxID0gTWF0aC5taW4obVgxLCAxKTtcbiAgbVgyID0gTWF0aC5taW4obVgyLCAxKTtcbiAgbVgxID0gTWF0aC5tYXgobVgxLCAwKTtcbiAgbVgyID0gTWF0aC5tYXgobVgyLCAwKTtcbiAgdmFyIG1TYW1wbGVWYWx1ZXMgPSBmbG9hdDMyQXJyYXlTdXBwb3J0ZWQgPyBuZXcgRmxvYXQzMkFycmF5KGtTcGxpbmVUYWJsZVNpemUpIDogbmV3IEFycmF5KGtTcGxpbmVUYWJsZVNpemUpO1xuICBmdW5jdGlvbiBBKGFBMSwgYUEyKSB7XG4gICAgcmV0dXJuIDEuMCAtIDMuMCAqIGFBMiArIDMuMCAqIGFBMTtcbiAgfVxuICBmdW5jdGlvbiBCKGFBMSwgYUEyKSB7XG4gICAgcmV0dXJuIDMuMCAqIGFBMiAtIDYuMCAqIGFBMTtcbiAgfVxuICBmdW5jdGlvbiBDKGFBMSkge1xuICAgIHJldHVybiAzLjAgKiBhQTE7XG4gIH1cbiAgZnVuY3Rpb24gY2FsY0JlemllcihhVCwgYUExLCBhQTIpIHtcbiAgICByZXR1cm4gKChBKGFBMSwgYUEyKSAqIGFUICsgQihhQTEsIGFBMikpICogYVQgKyBDKGFBMSkpICogYVQ7XG4gIH1cbiAgZnVuY3Rpb24gZ2V0U2xvcGUoYVQsIGFBMSwgYUEyKSB7XG4gICAgcmV0dXJuIDMuMCAqIEEoYUExLCBhQTIpICogYVQgKiBhVCArIDIuMCAqIEIoYUExLCBhQTIpICogYVQgKyBDKGFBMSk7XG4gIH1cbiAgZnVuY3Rpb24gbmV3dG9uUmFwaHNvbkl0ZXJhdGUoYVgsIGFHdWVzc1QpIHtcbiAgICBmb3IgKHZhciBfaSA9IDA7IF9pIDwgTkVXVE9OX0lURVJBVElPTlM7ICsrX2kpIHtcbiAgICAgIHZhciBjdXJyZW50U2xvcGUgPSBnZXRTbG9wZShhR3Vlc3NULCBtWDEsIG1YMik7XG4gICAgICBpZiAoY3VycmVudFNsb3BlID09PSAwLjApIHtcbiAgICAgICAgcmV0dXJuIGFHdWVzc1Q7XG4gICAgICB9XG4gICAgICB2YXIgY3VycmVudFggPSBjYWxjQmV6aWVyKGFHdWVzc1QsIG1YMSwgbVgyKSAtIGFYO1xuICAgICAgYUd1ZXNzVCAtPSBjdXJyZW50WCAvIGN1cnJlbnRTbG9wZTtcbiAgICB9XG4gICAgcmV0dXJuIGFHdWVzc1Q7XG4gIH1cbiAgZnVuY3Rpb24gY2FsY1NhbXBsZVZhbHVlcygpIHtcbiAgICBmb3IgKHZhciBfaTIgPSAwOyBfaTIgPCBrU3BsaW5lVGFibGVTaXplOyArK19pMikge1xuICAgICAgbVNhbXBsZVZhbHVlc1tfaTJdID0gY2FsY0JlemllcihfaTIgKiBrU2FtcGxlU3RlcFNpemUsIG1YMSwgbVgyKTtcbiAgICB9XG4gIH1cbiAgZnVuY3Rpb24gYmluYXJ5U3ViZGl2aWRlKGFYLCBhQSwgYUIpIHtcbiAgICB2YXIgY3VycmVudFgsXG4gICAgICBjdXJyZW50VCxcbiAgICAgIGkgPSAwO1xuICAgIGRvIHtcbiAgICAgIGN1cnJlbnRUID0gYUEgKyAoYUIgLSBhQSkgLyAyLjA7XG4gICAgICBjdXJyZW50WCA9IGNhbGNCZXppZXIoY3VycmVudFQsIG1YMSwgbVgyKSAtIGFYO1xuICAgICAgaWYgKGN1cnJlbnRYID4gMC4wKSB7XG4gICAgICAgIGFCID0gY3VycmVudFQ7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBhQSA9IGN1cnJlbnRUO1xuICAgICAgfVxuICAgIH0gd2hpbGUgKE1hdGguYWJzKGN1cnJlbnRYKSA+IFNVQkRJVklTSU9OX1BSRUNJU0lPTiAmJiArK2kgPCBTVUJESVZJU0lPTl9NQVhfSVRFUkFUSU9OUyk7XG4gICAgcmV0dXJuIGN1cnJlbnRUO1xuICB9XG4gIGZ1bmN0aW9uIGdldFRGb3JYKGFYKSB7XG4gICAgdmFyIGludGVydmFsU3RhcnQgPSAwLjAsXG4gICAgICBjdXJyZW50U2FtcGxlID0gMSxcbiAgICAgIGxhc3RTYW1wbGUgPSBrU3BsaW5lVGFibGVTaXplIC0gMTtcbiAgICBmb3IgKDsgY3VycmVudFNhbXBsZSAhPT0gbGFzdFNhbXBsZSAmJiBtU2FtcGxlVmFsdWVzW2N1cnJlbnRTYW1wbGVdIDw9IGFYOyArK2N1cnJlbnRTYW1wbGUpIHtcbiAgICAgIGludGVydmFsU3RhcnQgKz0ga1NhbXBsZVN0ZXBTaXplO1xuICAgIH1cbiAgICAtLWN1cnJlbnRTYW1wbGU7XG4gICAgdmFyIGRpc3QgPSAoYVggLSBtU2FtcGxlVmFsdWVzW2N1cnJlbnRTYW1wbGVdKSAvIChtU2FtcGxlVmFsdWVzW2N1cnJlbnRTYW1wbGUgKyAxXSAtIG1TYW1wbGVWYWx1ZXNbY3VycmVudFNhbXBsZV0pLFxuICAgICAgZ3Vlc3NGb3JUID0gaW50ZXJ2YWxTdGFydCArIGRpc3QgKiBrU2FtcGxlU3RlcFNpemUsXG4gICAgICBpbml0aWFsU2xvcGUgPSBnZXRTbG9wZShndWVzc0ZvclQsIG1YMSwgbVgyKTtcbiAgICBpZiAoaW5pdGlhbFNsb3BlID49IE5FV1RPTl9NSU5fU0xPUEUpIHtcbiAgICAgIHJldHVybiBuZXd0b25SYXBoc29uSXRlcmF0ZShhWCwgZ3Vlc3NGb3JUKTtcbiAgICB9IGVsc2UgaWYgKGluaXRpYWxTbG9wZSA9PT0gMC4wKSB7XG4gICAgICByZXR1cm4gZ3Vlc3NGb3JUO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gYmluYXJ5U3ViZGl2aWRlKGFYLCBpbnRlcnZhbFN0YXJ0LCBpbnRlcnZhbFN0YXJ0ICsga1NhbXBsZVN0ZXBTaXplKTtcbiAgICB9XG4gIH1cbiAgdmFyIF9wcmVjb21wdXRlZCA9IGZhbHNlO1xuICBmdW5jdGlvbiBwcmVjb21wdXRlKCkge1xuICAgIF9wcmVjb21wdXRlZCA9IHRydWU7XG4gICAgaWYgKG1YMSAhPT0gbVkxIHx8IG1YMiAhPT0gbVkyKSB7XG4gICAgICBjYWxjU2FtcGxlVmFsdWVzKCk7XG4gICAgfVxuICB9XG4gIHZhciBmID0gZnVuY3Rpb24gZihhWCkge1xuICAgIGlmICghX3ByZWNvbXB1dGVkKSB7XG4gICAgICBwcmVjb21wdXRlKCk7XG4gICAgfVxuICAgIGlmIChtWDEgPT09IG1ZMSAmJiBtWDIgPT09IG1ZMikge1xuICAgICAgcmV0dXJuIGFYO1xuICAgIH1cbiAgICBpZiAoYVggPT09IDApIHtcbiAgICAgIHJldHVybiAwO1xuICAgIH1cbiAgICBpZiAoYVggPT09IDEpIHtcbiAgICAgIHJldHVybiAxO1xuICAgIH1cbiAgICByZXR1cm4gY2FsY0JlemllcihnZXRURm9yWChhWCksIG1ZMSwgbVkyKTtcbiAgfTtcbiAgZi5nZXRDb250cm9sUG9pbnRzID0gZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiBbe1xuICAgICAgeDogbVgxLFxuICAgICAgeTogbVkxXG4gICAgfSwge1xuICAgICAgeDogbVgyLFxuICAgICAgeTogbVkyXG4gICAgfV07XG4gIH07XG4gIHZhciBzdHIgPSBcImdlbmVyYXRlQmV6aWVyKFwiICsgW21YMSwgbVkxLCBtWDIsIG1ZMl0gKyBcIilcIjtcbiAgZi50b1N0cmluZyA9IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gc3RyO1xuICB9O1xuICByZXR1cm4gZjtcbn1cblxuLyohIFJ1bmdlLUt1dHRhIHNwcmluZyBwaHlzaWNzIGZ1bmN0aW9uIGdlbmVyYXRvci4gQWRhcHRlZCBmcm9tIEZyYW1lci5qcywgY29weXJpZ2h0IEtvZW4gQm9rLiBNSVQgTGljZW5zZTogaHR0cDovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9NSVRfTGljZW5zZSAqL1xuLyogR2l2ZW4gYSB0ZW5zaW9uLCBmcmljdGlvbiwgYW5kIGR1cmF0aW9uLCBhIHNpbXVsYXRpb24gYXQgNjBGUFMgd2lsbCBmaXJzdCBydW4gd2l0aG91dCBhIGRlZmluZWQgZHVyYXRpb24gaW4gb3JkZXIgdG8gY2FsY3VsYXRlIHRoZSBmdWxsIHBhdGguIEEgc2Vjb25kIHBhc3NcbiAgIHRoZW4gYWRqdXN0cyB0aGUgdGltZSBkZWx0YSAtLSB1c2luZyB0aGUgcmVsYXRpb24gYmV0d2VlbiBhY3R1YWwgdGltZSBhbmQgZHVyYXRpb24gLS0gdG8gY2FsY3VsYXRlIHRoZSBwYXRoIGZvciB0aGUgZHVyYXRpb24tY29uc3RyYWluZWQgYW5pbWF0aW9uLiAqL1xudmFyIGdlbmVyYXRlU3ByaW5nUks0ID0gZnVuY3Rpb24gKCkge1xuICBmdW5jdGlvbiBzcHJpbmdBY2NlbGVyYXRpb25Gb3JTdGF0ZShzdGF0ZSkge1xuICAgIHJldHVybiAtc3RhdGUudGVuc2lvbiAqIHN0YXRlLnggLSBzdGF0ZS5mcmljdGlvbiAqIHN0YXRlLnY7XG4gIH1cbiAgZnVuY3Rpb24gc3ByaW5nRXZhbHVhdGVTdGF0ZVdpdGhEZXJpdmF0aXZlKGluaXRpYWxTdGF0ZSwgZHQsIGRlcml2YXRpdmUpIHtcbiAgICB2YXIgc3RhdGUgPSB7XG4gICAgICB4OiBpbml0aWFsU3RhdGUueCArIGRlcml2YXRpdmUuZHggKiBkdCxcbiAgICAgIHY6IGluaXRpYWxTdGF0ZS52ICsgZGVyaXZhdGl2ZS5kdiAqIGR0LFxuICAgICAgdGVuc2lvbjogaW5pdGlhbFN0YXRlLnRlbnNpb24sXG4gICAgICBmcmljdGlvbjogaW5pdGlhbFN0YXRlLmZyaWN0aW9uXG4gICAgfTtcbiAgICByZXR1cm4ge1xuICAgICAgZHg6IHN0YXRlLnYsXG4gICAgICBkdjogc3ByaW5nQWNjZWxlcmF0aW9uRm9yU3RhdGUoc3RhdGUpXG4gICAgfTtcbiAgfVxuICBmdW5jdGlvbiBzcHJpbmdJbnRlZ3JhdGVTdGF0ZShzdGF0ZSwgZHQpIHtcbiAgICB2YXIgYSA9IHtcbiAgICAgICAgZHg6IHN0YXRlLnYsXG4gICAgICAgIGR2OiBzcHJpbmdBY2NlbGVyYXRpb25Gb3JTdGF0ZShzdGF0ZSlcbiAgICAgIH0sXG4gICAgICBiID0gc3ByaW5nRXZhbHVhdGVTdGF0ZVdpdGhEZXJpdmF0aXZlKHN0YXRlLCBkdCAqIDAuNSwgYSksXG4gICAgICBjID0gc3ByaW5nRXZhbHVhdGVTdGF0ZVdpdGhEZXJpdmF0aXZlKHN0YXRlLCBkdCAqIDAuNSwgYiksXG4gICAgICBkID0gc3ByaW5nRXZhbHVhdGVTdGF0ZVdpdGhEZXJpdmF0aXZlKHN0YXRlLCBkdCwgYyksXG4gICAgICBkeGR0ID0gMS4wIC8gNi4wICogKGEuZHggKyAyLjAgKiAoYi5keCArIGMuZHgpICsgZC5keCksXG4gICAgICBkdmR0ID0gMS4wIC8gNi4wICogKGEuZHYgKyAyLjAgKiAoYi5kdiArIGMuZHYpICsgZC5kdik7XG4gICAgc3RhdGUueCA9IHN0YXRlLnggKyBkeGR0ICogZHQ7XG4gICAgc3RhdGUudiA9IHN0YXRlLnYgKyBkdmR0ICogZHQ7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG4gIHJldHVybiBmdW5jdGlvbiBzcHJpbmdSSzRGYWN0b3J5KHRlbnNpb24sIGZyaWN0aW9uLCBkdXJhdGlvbikge1xuICAgIHZhciBpbml0U3RhdGUgPSB7XG4gICAgICAgIHg6IC0xLFxuICAgICAgICB2OiAwLFxuICAgICAgICB0ZW5zaW9uOiBudWxsLFxuICAgICAgICBmcmljdGlvbjogbnVsbFxuICAgICAgfSxcbiAgICAgIHBhdGggPSBbMF0sXG4gICAgICB0aW1lX2xhcHNlZCA9IDAsXG4gICAgICB0b2xlcmFuY2UgPSAxIC8gMTAwMDAsXG4gICAgICBEVCA9IDE2IC8gMTAwMCxcbiAgICAgIGhhdmVfZHVyYXRpb24sXG4gICAgICBkdCxcbiAgICAgIGxhc3Rfc3RhdGU7XG4gICAgdGVuc2lvbiA9IHBhcnNlRmxvYXQodGVuc2lvbikgfHwgNTAwO1xuICAgIGZyaWN0aW9uID0gcGFyc2VGbG9hdChmcmljdGlvbikgfHwgMjA7XG4gICAgZHVyYXRpb24gPSBkdXJhdGlvbiB8fCBudWxsO1xuICAgIGluaXRTdGF0ZS50ZW5zaW9uID0gdGVuc2lvbjtcbiAgICBpbml0U3RhdGUuZnJpY3Rpb24gPSBmcmljdGlvbjtcbiAgICBoYXZlX2R1cmF0aW9uID0gZHVyYXRpb24gIT09IG51bGw7XG5cbiAgICAvKiBDYWxjdWxhdGUgdGhlIGFjdHVhbCB0aW1lIGl0IHRha2VzIGZvciB0aGlzIGFuaW1hdGlvbiB0byBjb21wbGV0ZSB3aXRoIHRoZSBwcm92aWRlZCBjb25kaXRpb25zLiAqL1xuICAgIGlmIChoYXZlX2R1cmF0aW9uKSB7XG4gICAgICAvKiBSdW4gdGhlIHNpbXVsYXRpb24gd2l0aG91dCBhIGR1cmF0aW9uLiAqL1xuICAgICAgdGltZV9sYXBzZWQgPSBzcHJpbmdSSzRGYWN0b3J5KHRlbnNpb24sIGZyaWN0aW9uKTtcbiAgICAgIC8qIENvbXB1dGUgdGhlIGFkanVzdGVkIHRpbWUgZGVsdGEuICovXG4gICAgICBkdCA9IHRpbWVfbGFwc2VkIC8gZHVyYXRpb24gKiBEVDtcbiAgICB9IGVsc2Uge1xuICAgICAgZHQgPSBEVDtcbiAgICB9XG4gICAgZm9yICg7Oykge1xuICAgICAgLyogTmV4dC9zdGVwIGZ1bmN0aW9uIC4qL1xuICAgICAgbGFzdF9zdGF0ZSA9IHNwcmluZ0ludGVncmF0ZVN0YXRlKGxhc3Rfc3RhdGUgfHwgaW5pdFN0YXRlLCBkdCk7XG4gICAgICAvKiBTdG9yZSB0aGUgcG9zaXRpb24uICovXG4gICAgICBwYXRoLnB1c2goMSArIGxhc3Rfc3RhdGUueCk7XG4gICAgICB0aW1lX2xhcHNlZCArPSAxNjtcbiAgICAgIC8qIElmIHRoZSBjaGFuZ2UgdGhyZXNob2xkIGlzIHJlYWNoZWQsIGJyZWFrLiAqL1xuICAgICAgaWYgKCEoTWF0aC5hYnMobGFzdF9zdGF0ZS54KSA+IHRvbGVyYW5jZSAmJiBNYXRoLmFicyhsYXN0X3N0YXRlLnYpID4gdG9sZXJhbmNlKSkge1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvKiBJZiBkdXJhdGlvbiBpcyBub3QgZGVmaW5lZCwgcmV0dXJuIHRoZSBhY3R1YWwgdGltZSByZXF1aXJlZCBmb3IgY29tcGxldGluZyB0aGlzIGFuaW1hdGlvbi4gT3RoZXJ3aXNlLCByZXR1cm4gYSBjbG9zdXJlIHRoYXQgaG9sZHMgdGhlXG4gICAgICAgY29tcHV0ZWQgcGF0aCBhbmQgcmV0dXJucyBhIHNuYXBzaG90IG9mIHRoZSBwb3NpdGlvbiBhY2NvcmRpbmcgdG8gYSBnaXZlbiBwZXJjZW50Q29tcGxldGUuICovXG4gICAgcmV0dXJuICFoYXZlX2R1cmF0aW9uID8gdGltZV9sYXBzZWQgOiBmdW5jdGlvbiAocGVyY2VudENvbXBsZXRlKSB7XG4gICAgICByZXR1cm4gcGF0aFtwZXJjZW50Q29tcGxldGUgKiAocGF0aC5sZW5ndGggLSAxKSB8IDBdO1xuICAgIH07XG4gIH07XG59KCk7XG5cbnZhciBjdWJpY0JlemllciA9IGZ1bmN0aW9uIGN1YmljQmV6aWVyKHQxLCBwMSwgdDIsIHAyKSB7XG4gIHZhciBiZXppZXIgPSBnZW5lcmF0ZUN1YmljQmV6aWVyKHQxLCBwMSwgdDIsIHAyKTtcbiAgcmV0dXJuIGZ1bmN0aW9uIChzdGFydCwgZW5kLCBwZXJjZW50KSB7XG4gICAgcmV0dXJuIHN0YXJ0ICsgKGVuZCAtIHN0YXJ0KSAqIGJlemllcihwZXJjZW50KTtcbiAgfTtcbn07XG52YXIgZWFzaW5ncyA9IHtcbiAgJ2xpbmVhcic6IGZ1bmN0aW9uIGxpbmVhcihzdGFydCwgZW5kLCBwZXJjZW50KSB7XG4gICAgcmV0dXJuIHN0YXJ0ICsgKGVuZCAtIHN0YXJ0KSAqIHBlcmNlbnQ7XG4gIH0sXG4gIC8vIGRlZmF1bHQgZWFzaW5nc1xuICAnZWFzZSc6IGN1YmljQmV6aWVyKDAuMjUsIDAuMSwgMC4yNSwgMSksXG4gICdlYXNlLWluJzogY3ViaWNCZXppZXIoMC40MiwgMCwgMSwgMSksXG4gICdlYXNlLW91dCc6IGN1YmljQmV6aWVyKDAsIDAsIDAuNTgsIDEpLFxuICAnZWFzZS1pbi1vdXQnOiBjdWJpY0JlemllcigwLjQyLCAwLCAwLjU4LCAxKSxcbiAgLy8gc2luZVxuICAnZWFzZS1pbi1zaW5lJzogY3ViaWNCZXppZXIoMC40NywgMCwgMC43NDUsIDAuNzE1KSxcbiAgJ2Vhc2Utb3V0LXNpbmUnOiBjdWJpY0JlemllcigwLjM5LCAwLjU3NSwgMC41NjUsIDEpLFxuICAnZWFzZS1pbi1vdXQtc2luZSc6IGN1YmljQmV6aWVyKDAuNDQ1LCAwLjA1LCAwLjU1LCAwLjk1KSxcbiAgLy8gcXVhZFxuICAnZWFzZS1pbi1xdWFkJzogY3ViaWNCZXppZXIoMC41NSwgMC4wODUsIDAuNjgsIDAuNTMpLFxuICAnZWFzZS1vdXQtcXVhZCc6IGN1YmljQmV6aWVyKDAuMjUsIDAuNDYsIDAuNDUsIDAuOTQpLFxuICAnZWFzZS1pbi1vdXQtcXVhZCc6IGN1YmljQmV6aWVyKDAuNDU1LCAwLjAzLCAwLjUxNSwgMC45NTUpLFxuICAvLyBjdWJpY1xuICAnZWFzZS1pbi1jdWJpYyc6IGN1YmljQmV6aWVyKDAuNTUsIDAuMDU1LCAwLjY3NSwgMC4xOSksXG4gICdlYXNlLW91dC1jdWJpYyc6IGN1YmljQmV6aWVyKDAuMjE1LCAwLjYxLCAwLjM1NSwgMSksXG4gICdlYXNlLWluLW91dC1jdWJpYyc6IGN1YmljQmV6aWVyKDAuNjQ1LCAwLjA0NSwgMC4zNTUsIDEpLFxuICAvLyBxdWFydFxuICAnZWFzZS1pbi1xdWFydCc6IGN1YmljQmV6aWVyKDAuODk1LCAwLjAzLCAwLjY4NSwgMC4yMiksXG4gICdlYXNlLW91dC1xdWFydCc6IGN1YmljQmV6aWVyKDAuMTY1LCAwLjg0LCAwLjQ0LCAxKSxcbiAgJ2Vhc2UtaW4tb3V0LXF1YXJ0JzogY3ViaWNCZXppZXIoMC43NywgMCwgMC4xNzUsIDEpLFxuICAvLyBxdWludFxuICAnZWFzZS1pbi1xdWludCc6IGN1YmljQmV6aWVyKDAuNzU1LCAwLjA1LCAwLjg1NSwgMC4wNiksXG4gICdlYXNlLW91dC1xdWludCc6IGN1YmljQmV6aWVyKDAuMjMsIDEsIDAuMzIsIDEpLFxuICAnZWFzZS1pbi1vdXQtcXVpbnQnOiBjdWJpY0JlemllcigwLjg2LCAwLCAwLjA3LCAxKSxcbiAgLy8gZXhwb1xuICAnZWFzZS1pbi1leHBvJzogY3ViaWNCZXppZXIoMC45NSwgMC4wNSwgMC43OTUsIDAuMDM1KSxcbiAgJ2Vhc2Utb3V0LWV4cG8nOiBjdWJpY0JlemllcigwLjE5LCAxLCAwLjIyLCAxKSxcbiAgJ2Vhc2UtaW4tb3V0LWV4cG8nOiBjdWJpY0JlemllcigxLCAwLCAwLCAxKSxcbiAgLy8gY2lyY1xuICAnZWFzZS1pbi1jaXJjJzogY3ViaWNCZXppZXIoMC42LCAwLjA0LCAwLjk4LCAwLjMzNSksXG4gICdlYXNlLW91dC1jaXJjJzogY3ViaWNCZXppZXIoMC4wNzUsIDAuODIsIDAuMTY1LCAxKSxcbiAgJ2Vhc2UtaW4tb3V0LWNpcmMnOiBjdWJpY0JlemllcigwLjc4NSwgMC4xMzUsIDAuMTUsIDAuODYpLFxuICAvLyB1c2VyIHBhcmFtIGVhc2luZ3MuLi5cblxuICAnc3ByaW5nJzogZnVuY3Rpb24gc3ByaW5nKHRlbnNpb24sIGZyaWN0aW9uLCBkdXJhdGlvbikge1xuICAgIGlmIChkdXJhdGlvbiA9PT0gMCkge1xuICAgICAgLy8gY2FuJ3QgZ2V0IGEgc3ByaW5nIHcvIGR1cmF0aW9uIDBcbiAgICAgIHJldHVybiBlYXNpbmdzLmxpbmVhcjsgLy8gZHVyYXRpb24gMCA9PiBqdW1wIHRvIGVuZCBzbyBpbXBsIGRvZXNuJ3QgbWF0dGVyXG4gICAgfVxuICAgIHZhciBzcHJpbmcgPSBnZW5lcmF0ZVNwcmluZ1JLNCh0ZW5zaW9uLCBmcmljdGlvbiwgZHVyYXRpb24pO1xuICAgIHJldHVybiBmdW5jdGlvbiAoc3RhcnQsIGVuZCwgcGVyY2VudCkge1xuICAgICAgcmV0dXJuIHN0YXJ0ICsgKGVuZCAtIHN0YXJ0KSAqIHNwcmluZyhwZXJjZW50KTtcbiAgICB9O1xuICB9LFxuICAnY3ViaWMtYmV6aWVyJzogY3ViaWNCZXppZXJcbn07XG5cbmZ1bmN0aW9uIGdldEVhc2VkVmFsdWUodHlwZSwgc3RhcnQsIGVuZCwgcGVyY2VudCwgZWFzaW5nRm4pIHtcbiAgaWYgKHBlcmNlbnQgPT09IDEpIHtcbiAgICByZXR1cm4gZW5kO1xuICB9XG4gIGlmIChzdGFydCA9PT0gZW5kKSB7XG4gICAgcmV0dXJuIGVuZDtcbiAgfVxuICB2YXIgdmFsID0gZWFzaW5nRm4oc3RhcnQsIGVuZCwgcGVyY2VudCk7XG4gIGlmICh0eXBlID09IG51bGwpIHtcbiAgICByZXR1cm4gdmFsO1xuICB9XG4gIGlmICh0eXBlLnJvdW5kVmFsdWUgfHwgdHlwZS5jb2xvcikge1xuICAgIHZhbCA9IE1hdGgucm91bmQodmFsKTtcbiAgfVxuICBpZiAodHlwZS5taW4gIT09IHVuZGVmaW5lZCkge1xuICAgIHZhbCA9IE1hdGgubWF4KHZhbCwgdHlwZS5taW4pO1xuICB9XG4gIGlmICh0eXBlLm1heCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgdmFsID0gTWF0aC5taW4odmFsLCB0eXBlLm1heCk7XG4gIH1cbiAgcmV0dXJuIHZhbDtcbn1cbmZ1bmN0aW9uIGdldFZhbHVlKHByb3AsIHNwZWMpIHtcbiAgaWYgKHByb3AucGZWYWx1ZSAhPSBudWxsIHx8IHByb3AudmFsdWUgIT0gbnVsbCkge1xuICAgIGlmIChwcm9wLnBmVmFsdWUgIT0gbnVsbCAmJiAoc3BlYyA9PSBudWxsIHx8IHNwZWMudHlwZS51bml0cyAhPT0gJyUnKSkge1xuICAgICAgcmV0dXJuIHByb3AucGZWYWx1ZTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIHByb3AudmFsdWU7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIHJldHVybiBwcm9wO1xuICB9XG59XG5mdW5jdGlvbiBlYXNlKHN0YXJ0UHJvcCwgZW5kUHJvcCwgcGVyY2VudCwgZWFzaW5nRm4sIHByb3BTcGVjKSB7XG4gIHZhciB0eXBlID0gcHJvcFNwZWMgIT0gbnVsbCA/IHByb3BTcGVjLnR5cGUgOiBudWxsO1xuICBpZiAocGVyY2VudCA8IDApIHtcbiAgICBwZXJjZW50ID0gMDtcbiAgfSBlbHNlIGlmIChwZXJjZW50ID4gMSkge1xuICAgIHBlcmNlbnQgPSAxO1xuICB9XG4gIHZhciBzdGFydCA9IGdldFZhbHVlKHN0YXJ0UHJvcCwgcHJvcFNwZWMpO1xuICB2YXIgZW5kID0gZ2V0VmFsdWUoZW5kUHJvcCwgcHJvcFNwZWMpO1xuICBpZiAobnVtYmVyJDEoc3RhcnQpICYmIG51bWJlciQxKGVuZCkpIHtcbiAgICByZXR1cm4gZ2V0RWFzZWRWYWx1ZSh0eXBlLCBzdGFydCwgZW5kLCBwZXJjZW50LCBlYXNpbmdGbik7XG4gIH0gZWxzZSBpZiAoYXJyYXkoc3RhcnQpICYmIGFycmF5KGVuZCkpIHtcbiAgICB2YXIgZWFzZWRBcnIgPSBbXTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGVuZC5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIHNpID0gc3RhcnRbaV07XG4gICAgICB2YXIgZWkgPSBlbmRbaV07XG4gICAgICBpZiAoc2kgIT0gbnVsbCAmJiBlaSAhPSBudWxsKSB7XG4gICAgICAgIHZhciB2YWwgPSBnZXRFYXNlZFZhbHVlKHR5cGUsIHNpLCBlaSwgcGVyY2VudCwgZWFzaW5nRm4pO1xuICAgICAgICBlYXNlZEFyci5wdXNoKHZhbCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBlYXNlZEFyci5wdXNoKGVpKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGVhc2VkQXJyO1xuICB9XG4gIHJldHVybiB1bmRlZmluZWQ7XG59XG5cbmZ1bmN0aW9uIHN0ZXAkMShzZWxmLCBhbmksIG5vdywgaXNDb3JlKSB7XG4gIHZhciBpc0VsZXMgPSAhaXNDb3JlO1xuICB2YXIgX3AgPSBzZWxmLl9wcml2YXRlO1xuICB2YXIgYW5pX3AgPSBhbmkuX3ByaXZhdGU7XG4gIHZhciBwRWFzaW5nID0gYW5pX3AuZWFzaW5nO1xuICB2YXIgc3RhcnRUaW1lID0gYW5pX3Auc3RhcnRUaW1lO1xuICB2YXIgY3kgPSBpc0NvcmUgPyBzZWxmIDogc2VsZi5jeSgpO1xuICB2YXIgc3R5bGUgPSBjeS5zdHlsZSgpO1xuICBpZiAoIWFuaV9wLmVhc2luZ0ltcGwpIHtcbiAgICBpZiAocEVhc2luZyA9PSBudWxsKSB7XG4gICAgICAvLyB1c2UgZGVmYXVsdFxuICAgICAgYW5pX3AuZWFzaW5nSW1wbCA9IGVhc2luZ3NbJ2xpbmVhciddO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyB0aGVuIGRlZmluZSB3LyBuYW1lXG4gICAgICB2YXIgZWFzaW5nVmFscztcbiAgICAgIGlmIChzdHJpbmcocEVhc2luZykpIHtcbiAgICAgICAgdmFyIGVhc2luZ1Byb3AgPSBzdHlsZS5wYXJzZSgndHJhbnNpdGlvbi10aW1pbmctZnVuY3Rpb24nLCBwRWFzaW5nKTtcbiAgICAgICAgZWFzaW5nVmFscyA9IGVhc2luZ1Byb3AudmFsdWU7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyB0aGVuIGFzc3VtZSBwcmVwYXJzZWQgYXJyYXlcbiAgICAgICAgZWFzaW5nVmFscyA9IHBFYXNpbmc7XG4gICAgICB9XG4gICAgICB2YXIgbmFtZSwgYXJncztcbiAgICAgIGlmIChzdHJpbmcoZWFzaW5nVmFscykpIHtcbiAgICAgICAgbmFtZSA9IGVhc2luZ1ZhbHM7XG4gICAgICAgIGFyZ3MgPSBbXTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIG5hbWUgPSBlYXNpbmdWYWxzWzFdO1xuICAgICAgICBhcmdzID0gZWFzaW5nVmFscy5zbGljZSgyKS5tYXAoZnVuY3Rpb24gKG4pIHtcbiAgICAgICAgICByZXR1cm4gK247XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgICAgaWYgKGFyZ3MubGVuZ3RoID4gMCkge1xuICAgICAgICAvLyBjcmVhdGUgd2l0aCBhcmdzXG4gICAgICAgIGlmIChuYW1lID09PSAnc3ByaW5nJykge1xuICAgICAgICAgIGFyZ3MucHVzaChhbmlfcC5kdXJhdGlvbik7IC8vIG5lZWQgZHVyYXRpb24gdG8gZ2VuZXJhdGUgc3ByaW5nXG4gICAgICAgIH1cbiAgICAgICAgYW5pX3AuZWFzaW5nSW1wbCA9IGVhc2luZ3NbbmFtZV0uYXBwbHkobnVsbCwgYXJncyk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBzdGF0aWMgaW1wbCBieSBuYW1lXG4gICAgICAgIGFuaV9wLmVhc2luZ0ltcGwgPSBlYXNpbmdzW25hbWVdO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICB2YXIgZWFzaW5nID0gYW5pX3AuZWFzaW5nSW1wbDtcbiAgdmFyIHBlcmNlbnQ7XG4gIGlmIChhbmlfcC5kdXJhdGlvbiA9PT0gMCkge1xuICAgIHBlcmNlbnQgPSAxO1xuICB9IGVsc2Uge1xuICAgIHBlcmNlbnQgPSAobm93IC0gc3RhcnRUaW1lKSAvIGFuaV9wLmR1cmF0aW9uO1xuICB9XG4gIGlmIChhbmlfcC5hcHBseWluZykge1xuICAgIHBlcmNlbnQgPSBhbmlfcC5wcm9ncmVzcztcbiAgfVxuICBpZiAocGVyY2VudCA8IDApIHtcbiAgICBwZXJjZW50ID0gMDtcbiAgfSBlbHNlIGlmIChwZXJjZW50ID4gMSkge1xuICAgIHBlcmNlbnQgPSAxO1xuICB9XG4gIGlmIChhbmlfcC5kZWxheSA9PSBudWxsKSB7XG4gICAgLy8gdGhlbiB1cGRhdGVcblxuICAgIHZhciBzdGFydFBvcyA9IGFuaV9wLnN0YXJ0UG9zaXRpb247XG4gICAgdmFyIGVuZFBvcyA9IGFuaV9wLnBvc2l0aW9uO1xuICAgIGlmIChlbmRQb3MgJiYgaXNFbGVzICYmICFzZWxmLmxvY2tlZCgpKSB7XG4gICAgICB2YXIgbmV3UG9zID0ge307XG4gICAgICBpZiAodmFsaWQoc3RhcnRQb3MueCwgZW5kUG9zLngpKSB7XG4gICAgICAgIG5ld1Bvcy54ID0gZWFzZShzdGFydFBvcy54LCBlbmRQb3MueCwgcGVyY2VudCwgZWFzaW5nKTtcbiAgICAgIH1cbiAgICAgIGlmICh2YWxpZChzdGFydFBvcy55LCBlbmRQb3MueSkpIHtcbiAgICAgICAgbmV3UG9zLnkgPSBlYXNlKHN0YXJ0UG9zLnksIGVuZFBvcy55LCBwZXJjZW50LCBlYXNpbmcpO1xuICAgICAgfVxuICAgICAgc2VsZi5wb3NpdGlvbihuZXdQb3MpO1xuICAgIH1cbiAgICB2YXIgc3RhcnRQYW4gPSBhbmlfcC5zdGFydFBhbjtcbiAgICB2YXIgZW5kUGFuID0gYW5pX3AucGFuO1xuICAgIHZhciBwYW4gPSBfcC5wYW47XG4gICAgdmFyIGFuaW1hdGluZ1BhbiA9IGVuZFBhbiAhPSBudWxsICYmIGlzQ29yZTtcbiAgICBpZiAoYW5pbWF0aW5nUGFuKSB7XG4gICAgICBpZiAodmFsaWQoc3RhcnRQYW4ueCwgZW5kUGFuLngpKSB7XG4gICAgICAgIHBhbi54ID0gZWFzZShzdGFydFBhbi54LCBlbmRQYW4ueCwgcGVyY2VudCwgZWFzaW5nKTtcbiAgICAgIH1cbiAgICAgIGlmICh2YWxpZChzdGFydFBhbi55LCBlbmRQYW4ueSkpIHtcbiAgICAgICAgcGFuLnkgPSBlYXNlKHN0YXJ0UGFuLnksIGVuZFBhbi55LCBwZXJjZW50LCBlYXNpbmcpO1xuICAgICAgfVxuICAgICAgc2VsZi5lbWl0KCdwYW4nKTtcbiAgICB9XG4gICAgdmFyIHN0YXJ0Wm9vbSA9IGFuaV9wLnN0YXJ0Wm9vbTtcbiAgICB2YXIgZW5kWm9vbSA9IGFuaV9wLnpvb207XG4gICAgdmFyIGFuaW1hdGluZ1pvb20gPSBlbmRab29tICE9IG51bGwgJiYgaXNDb3JlO1xuICAgIGlmIChhbmltYXRpbmdab29tKSB7XG4gICAgICBpZiAodmFsaWQoc3RhcnRab29tLCBlbmRab29tKSkge1xuICAgICAgICBfcC56b29tID0gYm91bmQoX3AubWluWm9vbSwgZWFzZShzdGFydFpvb20sIGVuZFpvb20sIHBlcmNlbnQsIGVhc2luZyksIF9wLm1heFpvb20pO1xuICAgICAgfVxuICAgICAgc2VsZi5lbWl0KCd6b29tJyk7XG4gICAgfVxuICAgIGlmIChhbmltYXRpbmdQYW4gfHwgYW5pbWF0aW5nWm9vbSkge1xuICAgICAgc2VsZi5lbWl0KCd2aWV3cG9ydCcpO1xuICAgIH1cbiAgICB2YXIgcHJvcHMgPSBhbmlfcC5zdHlsZTtcbiAgICBpZiAocHJvcHMgJiYgcHJvcHMubGVuZ3RoID4gMCAmJiBpc0VsZXMpIHtcbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcHJvcHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgdmFyIHByb3AgPSBwcm9wc1tpXTtcbiAgICAgICAgdmFyIF9uYW1lID0gcHJvcC5uYW1lO1xuICAgICAgICB2YXIgZW5kID0gcHJvcDtcbiAgICAgICAgdmFyIHN0YXJ0ID0gYW5pX3Auc3RhcnRTdHlsZVtfbmFtZV07XG4gICAgICAgIHZhciBwcm9wU3BlYyA9IHN0eWxlLnByb3BlcnRpZXNbc3RhcnQubmFtZV07XG4gICAgICAgIHZhciBlYXNlZFZhbCA9IGVhc2Uoc3RhcnQsIGVuZCwgcGVyY2VudCwgZWFzaW5nLCBwcm9wU3BlYyk7XG4gICAgICAgIHN0eWxlLm92ZXJyaWRlQnlwYXNzKHNlbGYsIF9uYW1lLCBlYXNlZFZhbCk7XG4gICAgICB9IC8vIGZvciBwcm9wc1xuXG4gICAgICBzZWxmLmVtaXQoJ3N0eWxlJyk7XG4gICAgfSAvLyBpZlxuICB9XG4gIGFuaV9wLnByb2dyZXNzID0gcGVyY2VudDtcbiAgcmV0dXJuIHBlcmNlbnQ7XG59XG5mdW5jdGlvbiB2YWxpZChzdGFydCwgZW5kKSB7XG4gIGlmIChzdGFydCA9PSBudWxsIHx8IGVuZCA9PSBudWxsKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIGlmIChudW1iZXIkMShzdGFydCkgJiYgbnVtYmVyJDEoZW5kKSkge1xuICAgIHJldHVybiB0cnVlO1xuICB9IGVsc2UgaWYgKHN0YXJ0ICYmIGVuZCkge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG4gIHJldHVybiBmYWxzZTtcbn1cblxuZnVuY3Rpb24gc3RhcnRBbmltYXRpb24oc2VsZiwgYW5pLCBub3csIGlzQ29yZSkge1xuICB2YXIgYW5pX3AgPSBhbmkuX3ByaXZhdGU7XG4gIGFuaV9wLnN0YXJ0ZWQgPSB0cnVlO1xuICBhbmlfcC5zdGFydFRpbWUgPSBub3cgLSBhbmlfcC5wcm9ncmVzcyAqIGFuaV9wLmR1cmF0aW9uO1xufVxuXG5mdW5jdGlvbiBzdGVwQWxsKG5vdywgY3kpIHtcbiAgdmFyIGVsZXMgPSBjeS5fcHJpdmF0ZS5hbmlFbGVzO1xuICB2YXIgZG9uZUVsZXMgPSBbXTtcbiAgZnVuY3Rpb24gc3RlcE9uZShlbGUsIGlzQ29yZSkge1xuICAgIHZhciBfcCA9IGVsZS5fcHJpdmF0ZTtcbiAgICB2YXIgY3VycmVudCA9IF9wLmFuaW1hdGlvbi5jdXJyZW50O1xuICAgIHZhciBxdWV1ZSA9IF9wLmFuaW1hdGlvbi5xdWV1ZTtcbiAgICB2YXIgcmFuQW5pcyA9IGZhbHNlO1xuXG4gICAgLy8gaWYgbm90aGluZyBjdXJyZW50bHkgYW5pbWF0aW5nLCBnZXQgc29tZXRoaW5nIGZyb20gdGhlIHF1ZXVlXG4gICAgaWYgKGN1cnJlbnQubGVuZ3RoID09PSAwKSB7XG4gICAgICB2YXIgbmV4dCA9IHF1ZXVlLnNoaWZ0KCk7XG4gICAgICBpZiAobmV4dCkge1xuICAgICAgICBjdXJyZW50LnB1c2gobmV4dCk7XG4gICAgICB9XG4gICAgfVxuICAgIHZhciBjYWxsYmFja3MgPSBmdW5jdGlvbiBjYWxsYmFja3MoX2NhbGxiYWNrcykge1xuICAgICAgZm9yICh2YXIgaiA9IF9jYWxsYmFja3MubGVuZ3RoIC0gMTsgaiA+PSAwOyBqLS0pIHtcbiAgICAgICAgdmFyIGNiID0gX2NhbGxiYWNrc1tqXTtcbiAgICAgICAgY2IoKTtcbiAgICAgIH1cbiAgICAgIF9jYWxsYmFja3Muc3BsaWNlKDAsIF9jYWxsYmFja3MubGVuZ3RoKTtcbiAgICB9O1xuXG4gICAgLy8gc3RlcCBhbmQgcmVtb3ZlIGlmIGRvbmVcbiAgICBmb3IgKHZhciBpID0gY3VycmVudC5sZW5ndGggLSAxOyBpID49IDA7IGktLSkge1xuICAgICAgdmFyIGFuaSA9IGN1cnJlbnRbaV07XG4gICAgICB2YXIgYW5pX3AgPSBhbmkuX3ByaXZhdGU7XG4gICAgICBpZiAoYW5pX3Auc3RvcHBlZCkge1xuICAgICAgICBjdXJyZW50LnNwbGljZShpLCAxKTtcbiAgICAgICAgYW5pX3AuaG9va2VkID0gZmFsc2U7XG4gICAgICAgIGFuaV9wLnBsYXlpbmcgPSBmYWxzZTtcbiAgICAgICAgYW5pX3Auc3RhcnRlZCA9IGZhbHNlO1xuICAgICAgICBjYWxsYmFja3MoYW5pX3AuZnJhbWVzKTtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG4gICAgICBpZiAoIWFuaV9wLnBsYXlpbmcgJiYgIWFuaV9wLmFwcGx5aW5nKSB7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuXG4gICAgICAvLyBhbiBhcHBseSgpIHdoaWxlIHBsYXlpbmcgc2hvdWxkbid0IGRvIGFueXRoaW5nXG4gICAgICBpZiAoYW5pX3AucGxheWluZyAmJiBhbmlfcC5hcHBseWluZykge1xuICAgICAgICBhbmlfcC5hcHBseWluZyA9IGZhbHNlO1xuICAgICAgfVxuICAgICAgaWYgKCFhbmlfcC5zdGFydGVkKSB7XG4gICAgICAgIHN0YXJ0QW5pbWF0aW9uKGVsZSwgYW5pLCBub3cpO1xuICAgICAgfVxuICAgICAgc3RlcCQxKGVsZSwgYW5pLCBub3csIGlzQ29yZSk7XG4gICAgICBpZiAoYW5pX3AuYXBwbHlpbmcpIHtcbiAgICAgICAgYW5pX3AuYXBwbHlpbmcgPSBmYWxzZTtcbiAgICAgIH1cbiAgICAgIGNhbGxiYWNrcyhhbmlfcC5mcmFtZXMpO1xuICAgICAgaWYgKGFuaV9wLnN0ZXAgIT0gbnVsbCkge1xuICAgICAgICBhbmlfcC5zdGVwKG5vdyk7XG4gICAgICB9XG4gICAgICBpZiAoYW5pLmNvbXBsZXRlZCgpKSB7XG4gICAgICAgIGN1cnJlbnQuc3BsaWNlKGksIDEpO1xuICAgICAgICBhbmlfcC5ob29rZWQgPSBmYWxzZTtcbiAgICAgICAgYW5pX3AucGxheWluZyA9IGZhbHNlO1xuICAgICAgICBhbmlfcC5zdGFydGVkID0gZmFsc2U7XG4gICAgICAgIGNhbGxiYWNrcyhhbmlfcC5jb21wbGV0ZXMpO1xuICAgICAgfVxuICAgICAgcmFuQW5pcyA9IHRydWU7XG4gICAgfVxuICAgIGlmICghaXNDb3JlICYmIGN1cnJlbnQubGVuZ3RoID09PSAwICYmIHF1ZXVlLmxlbmd0aCA9PT0gMCkge1xuICAgICAgZG9uZUVsZXMucHVzaChlbGUpO1xuICAgIH1cbiAgICByZXR1cm4gcmFuQW5pcztcbiAgfSAvLyBzdGVwRWxlbWVudFxuXG4gIC8vIGhhbmRsZSBhbGwgZWxlc1xuICB2YXIgcmFuRWxlQW5pID0gZmFsc2U7XG4gIGZvciAodmFyIGUgPSAwOyBlIDwgZWxlcy5sZW5ndGg7IGUrKykge1xuICAgIHZhciBlbGUgPSBlbGVzW2VdO1xuICAgIHZhciBoYW5kbGVkVGhpc0VsZSA9IHN0ZXBPbmUoZWxlKTtcbiAgICByYW5FbGVBbmkgPSByYW5FbGVBbmkgfHwgaGFuZGxlZFRoaXNFbGU7XG4gIH0gLy8gZWFjaCBlbGVtZW50XG5cbiAgdmFyIHJhbkNvcmVBbmkgPSBzdGVwT25lKGN5LCB0cnVlKTtcblxuICAvLyBub3RpZnkgcmVuZGVyZXJcbiAgaWYgKHJhbkVsZUFuaSB8fCByYW5Db3JlQW5pKSB7XG4gICAgaWYgKGVsZXMubGVuZ3RoID4gMCkge1xuICAgICAgY3kubm90aWZ5KCdkcmF3JywgZWxlcyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGN5Lm5vdGlmeSgnZHJhdycpO1xuICAgIH1cbiAgfVxuXG4gIC8vIHJlbW92ZSBlbGVtZW50cyBmcm9tIGxpc3Qgb2YgY3VycmVudGx5IGFuaW1hdGluZyBpZiBpdHMgcXVldWVzIGFyZSBlbXB0eVxuICBlbGVzLnVubWVyZ2UoZG9uZUVsZXMpO1xuICBjeS5lbWl0KCdzdGVwJyk7XG59IC8vIHN0ZXBBbGxcblxudmFyIGNvcmVmbiQ4ID0ge1xuICAvLyBwdWxsIGluIGFuaW1hdGlvbiBmdW5jdGlvbnNcbiAgYW5pbWF0ZTogZGVmaW5lLmFuaW1hdGUoKSxcbiAgYW5pbWF0aW9uOiBkZWZpbmUuYW5pbWF0aW9uKCksXG4gIGFuaW1hdGVkOiBkZWZpbmUuYW5pbWF0ZWQoKSxcbiAgY2xlYXJRdWV1ZTogZGVmaW5lLmNsZWFyUXVldWUoKSxcbiAgZGVsYXk6IGRlZmluZS5kZWxheSgpLFxuICBkZWxheUFuaW1hdGlvbjogZGVmaW5lLmRlbGF5QW5pbWF0aW9uKCksXG4gIHN0b3A6IGRlZmluZS5zdG9wKCksXG4gIGFkZFRvQW5pbWF0aW9uUG9vbDogZnVuY3Rpb24gYWRkVG9BbmltYXRpb25Qb29sKGVsZXMpIHtcbiAgICB2YXIgY3kgPSB0aGlzO1xuICAgIGlmICghY3kuc3R5bGVFbmFibGVkKCkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9IC8vIHNhdmUgY3ljbGVzIHdoZW4gbm8gc3R5bGUgdXNlZFxuXG4gICAgY3kuX3ByaXZhdGUuYW5pRWxlcy5tZXJnZShlbGVzKTtcbiAgfSxcbiAgc3RvcEFuaW1hdGlvbkxvb3A6IGZ1bmN0aW9uIHN0b3BBbmltYXRpb25Mb29wKCkge1xuICAgIHRoaXMuX3ByaXZhdGUuYW5pbWF0aW9uc1J1bm5pbmcgPSBmYWxzZTtcbiAgfSxcbiAgc3RhcnRBbmltYXRpb25Mb29wOiBmdW5jdGlvbiBzdGFydEFuaW1hdGlvbkxvb3AoKSB7XG4gICAgdmFyIGN5ID0gdGhpcztcbiAgICBjeS5fcHJpdmF0ZS5hbmltYXRpb25zUnVubmluZyA9IHRydWU7XG4gICAgaWYgKCFjeS5zdHlsZUVuYWJsZWQoKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH0gLy8gc2F2ZSBjeWNsZXMgd2hlbiBubyBzdHlsZSB1c2VkXG5cbiAgICAvLyBOQiB0aGUgYW5pbWF0aW9uIGxvb3Agd2lsbCBleGVjIGluIGhlYWRsZXNzIGVudmlyb25tZW50cyBpZiBzdHlsZSBlbmFibGVkXG4gICAgLy8gYW5kIGV4cGxpY2l0IGN5LmRlc3Ryb3koKSBpcyBuZWNlc3NhcnkgdG8gc3RvcCB0aGUgbG9vcFxuXG4gICAgZnVuY3Rpb24gaGVhZGxlc3NTdGVwKCkge1xuICAgICAgaWYgKCFjeS5fcHJpdmF0ZS5hbmltYXRpb25zUnVubmluZykge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICByZXF1ZXN0QW5pbWF0aW9uRnJhbWUoZnVuY3Rpb24gYW5pbWF0aW9uU3RlcChub3cpIHtcbiAgICAgICAgc3RlcEFsbChub3csIGN5KTtcbiAgICAgICAgaGVhZGxlc3NTdGVwKCk7XG4gICAgICB9KTtcbiAgICB9XG4gICAgdmFyIHJlbmRlcmVyID0gY3kucmVuZGVyZXIoKTtcbiAgICBpZiAocmVuZGVyZXIgJiYgcmVuZGVyZXIuYmVmb3JlUmVuZGVyKSB7XG4gICAgICAvLyBsZXQgdGhlIHJlbmRlcmVyIHNjaGVkdWxlIGFuaW1hdGlvbnNcbiAgICAgIHJlbmRlcmVyLmJlZm9yZVJlbmRlcihmdW5jdGlvbiByZW5kZXJlckFuaW1hdGlvblN0ZXAod2lsbERyYXcsIG5vdykge1xuICAgICAgICBzdGVwQWxsKG5vdywgY3kpO1xuICAgICAgfSwgcmVuZGVyZXIuYmVmb3JlUmVuZGVyUHJpb3JpdGllcy5hbmltYXRpb25zKTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gbWFuYWdlIHRoZSBhbmltYXRpb24gbG9vcCBvdXJzZWx2ZXNcbiAgICAgIGhlYWRsZXNzU3RlcCgpOyAvLyBmaXJzdCBjYWxsXG4gICAgfVxuICB9XG59O1xuXG52YXIgZW1pdHRlck9wdGlvbnMgPSB7XG4gIHF1YWxpZmllckNvbXBhcmU6IGZ1bmN0aW9uIHF1YWxpZmllckNvbXBhcmUoc2VsZWN0b3IxLCBzZWxlY3RvcjIpIHtcbiAgICBpZiAoc2VsZWN0b3IxID09IG51bGwgfHwgc2VsZWN0b3IyID09IG51bGwpIHtcbiAgICAgIHJldHVybiBzZWxlY3RvcjEgPT0gbnVsbCAmJiBzZWxlY3RvcjIgPT0gbnVsbDtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIHNlbGVjdG9yMS5zYW1lVGV4dChzZWxlY3RvcjIpO1xuICAgIH1cbiAgfSxcbiAgZXZlbnRNYXRjaGVzOiBmdW5jdGlvbiBldmVudE1hdGNoZXMoY3ksIGxpc3RlbmVyLCBldmVudE9iaikge1xuICAgIHZhciBzZWxlY3RvciA9IGxpc3RlbmVyLnF1YWxpZmllcjtcbiAgICBpZiAoc2VsZWN0b3IgIT0gbnVsbCkge1xuICAgICAgcmV0dXJuIGN5ICE9PSBldmVudE9iai50YXJnZXQgJiYgZWxlbWVudChldmVudE9iai50YXJnZXQpICYmIHNlbGVjdG9yLm1hdGNoZXMoZXZlbnRPYmoudGFyZ2V0KTtcbiAgICB9XG4gICAgcmV0dXJuIHRydWU7XG4gIH0sXG4gIGFkZEV2ZW50RmllbGRzOiBmdW5jdGlvbiBhZGRFdmVudEZpZWxkcyhjeSwgZXZ0KSB7XG4gICAgZXZ0LmN5ID0gY3k7XG4gICAgZXZ0LnRhcmdldCA9IGN5O1xuICB9LFxuICBjYWxsYmFja0NvbnRleHQ6IGZ1bmN0aW9uIGNhbGxiYWNrQ29udGV4dChjeSwgbGlzdGVuZXIsIGV2ZW50T2JqKSB7XG4gICAgcmV0dXJuIGxpc3RlbmVyLnF1YWxpZmllciAhPSBudWxsID8gZXZlbnRPYmoudGFyZ2V0IDogY3k7XG4gIH1cbn07XG52YXIgYXJnU2VsZWN0b3IgPSBmdW5jdGlvbiBhcmdTZWxlY3RvcihhcmcpIHtcbiAgaWYgKHN0cmluZyhhcmcpKSB7XG4gICAgcmV0dXJuIG5ldyBTZWxlY3RvcihhcmcpO1xuICB9IGVsc2Uge1xuICAgIHJldHVybiBhcmc7XG4gIH1cbn07XG52YXIgZWxlc2ZuID0ge1xuICBjcmVhdGVFbWl0dGVyOiBmdW5jdGlvbiBjcmVhdGVFbWl0dGVyKCkge1xuICAgIHZhciBfcCA9IHRoaXMuX3ByaXZhdGU7XG4gICAgaWYgKCFfcC5lbWl0dGVyKSB7XG4gICAgICBfcC5lbWl0dGVyID0gbmV3IEVtaXR0ZXIoZW1pdHRlck9wdGlvbnMsIHRoaXMpO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcztcbiAgfSxcbiAgZW1pdHRlcjogZnVuY3Rpb24gZW1pdHRlcigpIHtcbiAgICByZXR1cm4gdGhpcy5fcHJpdmF0ZS5lbWl0dGVyO1xuICB9LFxuICBvbjogZnVuY3Rpb24gb24oZXZlbnRzLCBzZWxlY3RvciwgY2FsbGJhY2spIHtcbiAgICB0aGlzLmVtaXR0ZXIoKS5vbihldmVudHMsIGFyZ1NlbGVjdG9yKHNlbGVjdG9yKSwgY2FsbGJhY2spO1xuICAgIHJldHVybiB0aGlzO1xuICB9LFxuICByZW1vdmVMaXN0ZW5lcjogZnVuY3Rpb24gcmVtb3ZlTGlzdGVuZXIoZXZlbnRzLCBzZWxlY3RvciwgY2FsbGJhY2spIHtcbiAgICB0aGlzLmVtaXR0ZXIoKS5yZW1vdmVMaXN0ZW5lcihldmVudHMsIGFyZ1NlbGVjdG9yKHNlbGVjdG9yKSwgY2FsbGJhY2spO1xuICAgIHJldHVybiB0aGlzO1xuICB9LFxuICByZW1vdmVBbGxMaXN0ZW5lcnM6IGZ1bmN0aW9uIHJlbW92ZUFsbExpc3RlbmVycygpIHtcbiAgICB0aGlzLmVtaXR0ZXIoKS5yZW1vdmVBbGxMaXN0ZW5lcnMoKTtcbiAgICByZXR1cm4gdGhpcztcbiAgfSxcbiAgb25lOiBmdW5jdGlvbiBvbmUoZXZlbnRzLCBzZWxlY3RvciwgY2FsbGJhY2spIHtcbiAgICB0aGlzLmVtaXR0ZXIoKS5vbmUoZXZlbnRzLCBhcmdTZWxlY3RvcihzZWxlY3RvciksIGNhbGxiYWNrKTtcbiAgICByZXR1cm4gdGhpcztcbiAgfSxcbiAgb25jZTogZnVuY3Rpb24gb25jZShldmVudHMsIHNlbGVjdG9yLCBjYWxsYmFjaykge1xuICAgIHRoaXMuZW1pdHRlcigpLm9uZShldmVudHMsIGFyZ1NlbGVjdG9yKHNlbGVjdG9yKSwgY2FsbGJhY2spO1xuICAgIHJldHVybiB0aGlzO1xuICB9LFxuICBlbWl0OiBmdW5jdGlvbiBlbWl0KGV2ZW50cywgZXh0cmFQYXJhbXMpIHtcbiAgICB0aGlzLmVtaXR0ZXIoKS5lbWl0KGV2ZW50cywgZXh0cmFQYXJhbXMpO1xuICAgIHJldHVybiB0aGlzO1xuICB9LFxuICBlbWl0QW5kTm90aWZ5OiBmdW5jdGlvbiBlbWl0QW5kTm90aWZ5KGV2ZW50LCBlbGVzKSB7XG4gICAgdGhpcy5lbWl0KGV2ZW50KTtcbiAgICB0aGlzLm5vdGlmeShldmVudCwgZWxlcyk7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cbn07XG5kZWZpbmUuZXZlbnRBbGlhc2VzT24oZWxlc2ZuKTtcblxudmFyIGNvcmVmbiQ3ID0ge1xuICBwbmc6IGZ1bmN0aW9uIHBuZyhvcHRpb25zKSB7XG4gICAgdmFyIHJlbmRlcmVyID0gdGhpcy5fcHJpdmF0ZS5yZW5kZXJlcjtcbiAgICBvcHRpb25zID0gb3B0aW9ucyB8fCB7fTtcbiAgICByZXR1cm4gcmVuZGVyZXIucG5nKG9wdGlvbnMpO1xuICB9LFxuICBqcGc6IGZ1bmN0aW9uIGpwZyhvcHRpb25zKSB7XG4gICAgdmFyIHJlbmRlcmVyID0gdGhpcy5fcHJpdmF0ZS5yZW5kZXJlcjtcbiAgICBvcHRpb25zID0gb3B0aW9ucyB8fCB7fTtcbiAgICBvcHRpb25zLmJnID0gb3B0aW9ucy5iZyB8fCAnI2ZmZic7XG4gICAgcmV0dXJuIHJlbmRlcmVyLmpwZyhvcHRpb25zKTtcbiAgfVxufTtcbmNvcmVmbiQ3LmpwZWcgPSBjb3JlZm4kNy5qcGc7XG5cbnZhciBjb3JlZm4kNiA9IHtcbiAgbGF5b3V0OiBmdW5jdGlvbiBsYXlvdXQob3B0aW9ucykge1xuICAgIHZhciBjeSA9IHRoaXM7XG4gICAgaWYgKG9wdGlvbnMgPT0gbnVsbCkge1xuICAgICAgZXJyb3IoJ0xheW91dCBvcHRpb25zIG11c3QgYmUgc3BlY2lmaWVkIHRvIG1ha2UgYSBsYXlvdXQnKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaWYgKG9wdGlvbnMubmFtZSA9PSBudWxsKSB7XG4gICAgICBlcnJvcignQSBgbmFtZWAgbXVzdCBiZSBzcGVjaWZpZWQgdG8gbWFrZSBhIGxheW91dCcpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB2YXIgbmFtZSA9IG9wdGlvbnMubmFtZTtcbiAgICB2YXIgTGF5b3V0ID0gY3kuZXh0ZW5zaW9uKCdsYXlvdXQnLCBuYW1lKTtcbiAgICBpZiAoTGF5b3V0ID09IG51bGwpIHtcbiAgICAgIGVycm9yKCdObyBzdWNoIGxheW91dCBgJyArIG5hbWUgKyAnYCBmb3VuZC4gIERpZCB5b3UgZm9yZ2V0IHRvIGltcG9ydCBpdCBhbmQgYGN5dG9zY2FwZS51c2UoKWAgaXQ/Jyk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHZhciBlbGVzO1xuICAgIGlmIChzdHJpbmcob3B0aW9ucy5lbGVzKSkge1xuICAgICAgZWxlcyA9IGN5LiQob3B0aW9ucy5lbGVzKTtcbiAgICB9IGVsc2Uge1xuICAgICAgZWxlcyA9IG9wdGlvbnMuZWxlcyAhPSBudWxsID8gb3B0aW9ucy5lbGVzIDogY3kuJCgpO1xuICAgIH1cbiAgICB2YXIgbGF5b3V0ID0gbmV3IExheW91dChleHRlbmQoe30sIG9wdGlvbnMsIHtcbiAgICAgIGN5OiBjeSxcbiAgICAgIGVsZXM6IGVsZXNcbiAgICB9KSk7XG4gICAgcmV0dXJuIGxheW91dDtcbiAgfVxufTtcbmNvcmVmbiQ2LmNyZWF0ZUxheW91dCA9IGNvcmVmbiQ2Lm1ha2VMYXlvdXQgPSBjb3JlZm4kNi5sYXlvdXQ7XG5cbnZhciBjb3JlZm4kNSA9IHtcbiAgbm90aWZ5OiBmdW5jdGlvbiBub3RpZnkoZXZlbnROYW1lLCBldmVudEVsZXMpIHtcbiAgICB2YXIgX3AgPSB0aGlzLl9wcml2YXRlO1xuICAgIGlmICh0aGlzLmJhdGNoaW5nKCkpIHtcbiAgICAgIF9wLmJhdGNoTm90aWZpY2F0aW9ucyA9IF9wLmJhdGNoTm90aWZpY2F0aW9ucyB8fCB7fTtcbiAgICAgIHZhciBlbGVzID0gX3AuYmF0Y2hOb3RpZmljYXRpb25zW2V2ZW50TmFtZV0gPSBfcC5iYXRjaE5vdGlmaWNhdGlvbnNbZXZlbnROYW1lXSB8fCB0aGlzLmNvbGxlY3Rpb24oKTtcbiAgICAgIGlmIChldmVudEVsZXMgIT0gbnVsbCkge1xuICAgICAgICBlbGVzLm1lcmdlKGV2ZW50RWxlcyk7XG4gICAgICB9XG4gICAgICByZXR1cm47IC8vIG5vdGlmaWNhdGlvbnMgYXJlIGRpc2FibGVkIGR1cmluZyBiYXRjaGluZ1xuICAgIH1cbiAgICBpZiAoIV9wLm5vdGlmaWNhdGlvbnNFbmFibGVkKSB7XG4gICAgICByZXR1cm47XG4gICAgfSAvLyBleGl0IG9uIGRpc2FibGVkXG5cbiAgICB2YXIgcmVuZGVyZXIgPSB0aGlzLnJlbmRlcmVyKCk7XG5cbiAgICAvLyBleGl0IGlmIGRlc3Ryb3koKSBjYWxsZWQgb24gY29yZSBvciByZW5kZXJlciBpbiBiZXR3ZWVuIGZyYW1lcyAjMTQ5OSAjMTUyOFxuICAgIGlmICh0aGlzLmRlc3Ryb3llZCgpIHx8ICFyZW5kZXJlcikge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICByZW5kZXJlci5ub3RpZnkoZXZlbnROYW1lLCBldmVudEVsZXMpO1xuICB9LFxuICBub3RpZmljYXRpb25zOiBmdW5jdGlvbiBub3RpZmljYXRpb25zKGJvb2wpIHtcbiAgICB2YXIgcCA9IHRoaXMuX3ByaXZhdGU7XG4gICAgaWYgKGJvb2wgPT09IHVuZGVmaW5lZCkge1xuICAgICAgcmV0dXJuIHAubm90aWZpY2F0aW9uc0VuYWJsZWQ7XG4gICAgfSBlbHNlIHtcbiAgICAgIHAubm90aWZpY2F0aW9uc0VuYWJsZWQgPSBib29sID8gdHJ1ZSA6IGZhbHNlO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcztcbiAgfSxcbiAgbm9Ob3RpZmljYXRpb25zOiBmdW5jdGlvbiBub05vdGlmaWNhdGlvbnMoY2FsbGJhY2spIHtcbiAgICB0aGlzLm5vdGlmaWNhdGlvbnMoZmFsc2UpO1xuICAgIGNhbGxiYWNrKCk7XG4gICAgdGhpcy5ub3RpZmljYXRpb25zKHRydWUpO1xuICB9LFxuICBiYXRjaGluZzogZnVuY3Rpb24gYmF0Y2hpbmcoKSB7XG4gICAgcmV0dXJuIHRoaXMuX3ByaXZhdGUuYmF0Y2hDb3VudCA+IDA7XG4gIH0sXG4gIHN0YXJ0QmF0Y2g6IGZ1bmN0aW9uIHN0YXJ0QmF0Y2goKSB7XG4gICAgdmFyIF9wID0gdGhpcy5fcHJpdmF0ZTtcbiAgICBpZiAoX3AuYmF0Y2hDb3VudCA9PSBudWxsKSB7XG4gICAgICBfcC5iYXRjaENvdW50ID0gMDtcbiAgICB9XG4gICAgaWYgKF9wLmJhdGNoQ291bnQgPT09IDApIHtcbiAgICAgIF9wLmJhdGNoU3R5bGVFbGVzID0gdGhpcy5jb2xsZWN0aW9uKCk7XG4gICAgICBfcC5iYXRjaE5vdGlmaWNhdGlvbnMgPSB7fTtcbiAgICB9XG4gICAgX3AuYmF0Y2hDb3VudCsrO1xuICAgIHJldHVybiB0aGlzO1xuICB9LFxuICBlbmRCYXRjaDogZnVuY3Rpb24gZW5kQmF0Y2goKSB7XG4gICAgdmFyIF9wID0gdGhpcy5fcHJpdmF0ZTtcbiAgICBpZiAoX3AuYmF0Y2hDb3VudCA9PT0gMCkge1xuICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuICAgIF9wLmJhdGNoQ291bnQtLTtcbiAgICBpZiAoX3AuYmF0Y2hDb3VudCA9PT0gMCkge1xuICAgICAgLy8gdXBkYXRlIHN0eWxlIGZvciBkaXJ0eSBlbGVzXG4gICAgICBfcC5iYXRjaFN0eWxlRWxlcy51cGRhdGVTdHlsZSgpO1xuICAgICAgdmFyIHJlbmRlcmVyID0gdGhpcy5yZW5kZXJlcigpO1xuXG4gICAgICAvLyBub3RpZnkgdGhlIHJlbmRlcmVyIG9mIHF1ZXVlZCBlbGVzIGFuZCBldmVudCB0eXBlc1xuICAgICAgT2JqZWN0LmtleXMoX3AuYmF0Y2hOb3RpZmljYXRpb25zKS5mb3JFYWNoKGZ1bmN0aW9uIChldmVudE5hbWUpIHtcbiAgICAgICAgdmFyIGVsZXMgPSBfcC5iYXRjaE5vdGlmaWNhdGlvbnNbZXZlbnROYW1lXTtcbiAgICAgICAgaWYgKGVsZXMuZW1wdHkoKSkge1xuICAgICAgICAgIHJlbmRlcmVyLm5vdGlmeShldmVudE5hbWUpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJlbmRlcmVyLm5vdGlmeShldmVudE5hbWUsIGVsZXMpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXM7XG4gIH0sXG4gIGJhdGNoOiBmdW5jdGlvbiBiYXRjaChjYWxsYmFjaykge1xuICAgIHRoaXMuc3RhcnRCYXRjaCgpO1xuICAgIGNhbGxiYWNrKCk7XG4gICAgdGhpcy5lbmRCYXRjaCgpO1xuICAgIHJldHVybiB0aGlzO1xuICB9LFxuICAvLyBmb3IgYmFja3dhcmRzIGNvbXBhdGliaWxpdHlcbiAgYmF0Y2hEYXRhOiBmdW5jdGlvbiBiYXRjaERhdGEobWFwKSB7XG4gICAgdmFyIGN5ID0gdGhpcztcbiAgICByZXR1cm4gdGhpcy5iYXRjaChmdW5jdGlvbiAoKSB7XG4gICAgICB2YXIgaWRzID0gT2JqZWN0LmtleXMobWFwKTtcbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgaWRzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIHZhciBpZCA9IGlkc1tpXTtcbiAgICAgICAgdmFyIGRhdGEgPSBtYXBbaWRdO1xuICAgICAgICB2YXIgZWxlID0gY3kuZ2V0RWxlbWVudEJ5SWQoaWQpO1xuICAgICAgICBlbGUuZGF0YShkYXRhKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxufTtcblxudmFyIHJlbmRlcmVyRGVmYXVsdHMgPSBkZWZhdWx0cyRnKHtcbiAgaGlkZUVkZ2VzT25WaWV3cG9ydDogZmFsc2UsXG4gIHRleHR1cmVPblZpZXdwb3J0OiBmYWxzZSxcbiAgbW90aW9uQmx1cjogZmFsc2UsXG4gIG1vdGlvbkJsdXJPcGFjaXR5OiAwLjA1LFxuICBwaXhlbFJhdGlvOiB1bmRlZmluZWQsXG4gIGRlc2t0b3BUYXBUaHJlc2hvbGQ6IDQsXG4gIHRvdWNoVGFwVGhyZXNob2xkOiA4LFxuICB3aGVlbFNlbnNpdGl2aXR5OiAxLFxuICBkZWJ1ZzogZmFsc2UsXG4gIHNob3dGcHM6IGZhbHNlLFxuICAvLyB3ZWJnbCBvcHRpb25zXG4gIHdlYmdsOiBmYWxzZSxcbiAgd2ViZ2xEZWJ1ZzogZmFsc2UsXG4gIHdlYmdsRGVidWdTaG93QXRsYXNlczogZmFsc2UsXG4gIC8vIGRlZmF1bHRzIGdvb2QgZm9yIG1vYmlsZVxuICB3ZWJnbFRleFNpemU6IDIwNDgsXG4gIHdlYmdsVGV4Um93czogMzYsXG4gIHdlYmdsVGV4Um93c05vZGVzOiAxOCxcbiAgd2ViZ2xCYXRjaFNpemU6IDIwNDgsXG4gIHdlYmdsVGV4UGVyQmF0Y2g6IDE0LFxuICB3ZWJnbEJnQ29sb3I6IFsyNTUsIDI1NSwgMjU1XVxufSk7XG52YXIgY29yZWZuJDQgPSB7XG4gIHJlbmRlclRvOiBmdW5jdGlvbiByZW5kZXJUbyhjb250ZXh0LCB6b29tLCBwYW4sIHB4UmF0aW8pIHtcbiAgICB2YXIgciA9IHRoaXMuX3ByaXZhdGUucmVuZGVyZXI7XG4gICAgci5yZW5kZXJUbyhjb250ZXh0LCB6b29tLCBwYW4sIHB4UmF0aW8pO1xuICAgIHJldHVybiB0aGlzO1xuICB9LFxuICByZW5kZXJlcjogZnVuY3Rpb24gcmVuZGVyZXIoKSB7XG4gICAgcmV0dXJuIHRoaXMuX3ByaXZhdGUucmVuZGVyZXI7XG4gIH0sXG4gIGZvcmNlUmVuZGVyOiBmdW5jdGlvbiBmb3JjZVJlbmRlcigpIHtcbiAgICB0aGlzLm5vdGlmeSgnZHJhdycpO1xuICAgIHJldHVybiB0aGlzO1xuICB9LFxuICByZXNpemU6IGZ1bmN0aW9uIHJlc2l6ZSgpIHtcbiAgICB0aGlzLmludmFsaWRhdGVTaXplKCk7XG4gICAgdGhpcy5lbWl0QW5kTm90aWZ5KCdyZXNpemUnKTtcbiAgICByZXR1cm4gdGhpcztcbiAgfSxcbiAgaW5pdFJlbmRlcmVyOiBmdW5jdGlvbiBpbml0UmVuZGVyZXIob3B0aW9ucykge1xuICAgIHZhciBjeSA9IHRoaXM7XG4gICAgdmFyIFJlbmRlcmVyUHJvdG8gPSBjeS5leHRlbnNpb24oJ3JlbmRlcmVyJywgb3B0aW9ucy5uYW1lKTtcbiAgICBpZiAoUmVuZGVyZXJQcm90byA9PSBudWxsKSB7XG4gICAgICBlcnJvcihcIkNhbiBub3QgaW5pdGlhbGlzZTogTm8gc3VjaCByZW5kZXJlciBgXCIuY29uY2F0KG9wdGlvbnMubmFtZSwgXCJgIGZvdW5kLiBEaWQgeW91IGZvcmdldCB0byBpbXBvcnQgaXQgYW5kIGBjeXRvc2NhcGUudXNlKClgIGl0P1wiKSk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmIChvcHRpb25zLndoZWVsU2Vuc2l0aXZpdHkgIT09IHVuZGVmaW5lZCkge1xuICAgICAgd2FybihcIllvdSBoYXZlIHNldCBhIGN1c3RvbSB3aGVlbCBzZW5zaXRpdml0eS4gIFRoaXMgd2lsbCBtYWtlIHlvdXIgYXBwIHpvb20gdW5uYXR1cmFsbHkgd2hlbiB1c2luZyBtYWluc3RyZWFtIG1pY2UuICBZb3Ugc2hvdWxkIGNoYW5nZSB0aGlzIHZhbHVlIGZyb20gdGhlIGRlZmF1bHQgb25seSBpZiB5b3UgY2FuIGd1YXJhbnRlZSB0aGF0IGFsbCB5b3VyIHVzZXJzIHdpbGwgdXNlIHRoZSBzYW1lIGhhcmR3YXJlIGFuZCBPUyBjb25maWd1cmF0aW9uIGFzIHlvdXIgY3VycmVudCBtYWNoaW5lLlwiKTtcbiAgICB9XG4gICAgdmFyIHJPcHRzID0gcmVuZGVyZXJEZWZhdWx0cyhvcHRpb25zKTtcbiAgICByT3B0cy5jeSA9IGN5O1xuICAgIGN5Ll9wcml2YXRlLnJlbmRlcmVyID0gbmV3IFJlbmRlcmVyUHJvdG8ock9wdHMpO1xuICAgIHRoaXMubm90aWZ5KCdpbml0Jyk7XG4gIH0sXG4gIGRlc3Ryb3lSZW5kZXJlcjogZnVuY3Rpb24gZGVzdHJveVJlbmRlcmVyKCkge1xuICAgIHZhciBjeSA9IHRoaXM7XG4gICAgY3kubm90aWZ5KCdkZXN0cm95Jyk7IC8vIGRlc3Ryb3kgdGhlIHJlbmRlcmVyXG5cbiAgICB2YXIgZG9tRWxlID0gY3kuY29udGFpbmVyKCk7XG4gICAgaWYgKGRvbUVsZSkge1xuICAgICAgZG9tRWxlLl9jeXJlZyA9IG51bGw7XG4gICAgICB3aGlsZSAoZG9tRWxlLmNoaWxkTm9kZXMubGVuZ3RoID4gMCkge1xuICAgICAgICBkb21FbGUucmVtb3ZlQ2hpbGQoZG9tRWxlLmNoaWxkTm9kZXNbMF0pO1xuICAgICAgfVxuICAgIH1cbiAgICBjeS5fcHJpdmF0ZS5yZW5kZXJlciA9IG51bGw7IC8vIHRvIGJlIGV4dHJhIHNhZmUsIHJlbW92ZSB0aGUgcmVmXG4gICAgY3kubXV0YWJsZUVsZW1lbnRzKCkuZm9yRWFjaChmdW5jdGlvbiAoZWxlKSB7XG4gICAgICB2YXIgX3AgPSBlbGUuX3ByaXZhdGU7XG4gICAgICBfcC5yc2NyYXRjaCA9IHt9O1xuICAgICAgX3AucnN0eWxlID0ge307XG4gICAgICBfcC5hbmltYXRpb24uY3VycmVudCA9IFtdO1xuICAgICAgX3AuYW5pbWF0aW9uLnF1ZXVlID0gW107XG4gICAgfSk7XG4gIH0sXG4gIG9uUmVuZGVyOiBmdW5jdGlvbiBvblJlbmRlcihmbikge1xuICAgIHJldHVybiB0aGlzLm9uKCdyZW5kZXInLCBmbik7XG4gIH0sXG4gIG9mZlJlbmRlcjogZnVuY3Rpb24gb2ZmUmVuZGVyKGZuKSB7XG4gICAgcmV0dXJuIHRoaXMub2ZmKCdyZW5kZXInLCBmbik7XG4gIH1cbn07XG5jb3JlZm4kNC5pbnZhbGlkYXRlRGltZW5zaW9ucyA9IGNvcmVmbiQ0LnJlc2l6ZTtcblxudmFyIGNvcmVmbiQzID0ge1xuICAvLyBnZXQgYSBjb2xsZWN0aW9uXG4gIC8vIC0gZW1wdHkgY29sbGVjdGlvbiBvbiBubyBhcmdzXG4gIC8vIC0gY29sbGVjdGlvbiBvZiBlbGVtZW50cyBpbiB0aGUgZ3JhcGggb24gc2VsZWN0b3IgYXJnXG4gIC8vIC0gZ3VhcmFudGVlIGEgcmV0dXJuZWQgY29sbGVjdGlvbiB3aGVuIGVsZW1lbnRzIG9yIGNvbGxlY3Rpb24gc3BlY2lmaWVkXG4gIGNvbGxlY3Rpb246IGZ1bmN0aW9uIGNvbGxlY3Rpb24oZWxlcywgb3B0cykge1xuICAgIGlmIChzdHJpbmcoZWxlcykpIHtcbiAgICAgIHJldHVybiB0aGlzLiQoZWxlcyk7XG4gICAgfSBlbHNlIGlmIChlbGVtZW50T3JDb2xsZWN0aW9uKGVsZXMpKSB7XG4gICAgICByZXR1cm4gZWxlcy5jb2xsZWN0aW9uKCk7XG4gICAgfSBlbHNlIGlmIChhcnJheShlbGVzKSkge1xuICAgICAgaWYgKCFvcHRzKSB7XG4gICAgICAgIG9wdHMgPSB7fTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBuZXcgQ29sbGVjdGlvbih0aGlzLCBlbGVzLCBvcHRzLnVuaXF1ZSwgb3B0cy5yZW1vdmVkKTtcbiAgICB9XG4gICAgcmV0dXJuIG5ldyBDb2xsZWN0aW9uKHRoaXMpO1xuICB9LFxuICBub2RlczogZnVuY3Rpb24gbm9kZXMoc2VsZWN0b3IpIHtcbiAgICB2YXIgbm9kZXMgPSB0aGlzLiQoZnVuY3Rpb24gKGVsZSkge1xuICAgICAgcmV0dXJuIGVsZS5pc05vZGUoKTtcbiAgICB9KTtcbiAgICBpZiAoc2VsZWN0b3IpIHtcbiAgICAgIHJldHVybiBub2Rlcy5maWx0ZXIoc2VsZWN0b3IpO1xuICAgIH1cbiAgICByZXR1cm4gbm9kZXM7XG4gIH0sXG4gIGVkZ2VzOiBmdW5jdGlvbiBlZGdlcyhzZWxlY3Rvcikge1xuICAgIHZhciBlZGdlcyA9IHRoaXMuJChmdW5jdGlvbiAoZWxlKSB7XG4gICAgICByZXR1cm4gZWxlLmlzRWRnZSgpO1xuICAgIH0pO1xuICAgIGlmIChzZWxlY3Rvcikge1xuICAgICAgcmV0dXJuIGVkZ2VzLmZpbHRlcihzZWxlY3Rvcik7XG4gICAgfVxuICAgIHJldHVybiBlZGdlcztcbiAgfSxcbiAgLy8gc2VhcmNoIHRoZSBncmFwaCBsaWtlIGpRdWVyeVxuICAkOiBmdW5jdGlvbiAkKHNlbGVjdG9yKSB7XG4gICAgdmFyIGVsZXMgPSB0aGlzLl9wcml2YXRlLmVsZW1lbnRzO1xuICAgIGlmIChzZWxlY3Rvcikge1xuICAgICAgcmV0dXJuIGVsZXMuZmlsdGVyKHNlbGVjdG9yKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIGVsZXMuc3Bhd25TZWxmKCk7XG4gICAgfVxuICB9LFxuICBtdXRhYmxlRWxlbWVudHM6IGZ1bmN0aW9uIG11dGFibGVFbGVtZW50cygpIHtcbiAgICByZXR1cm4gdGhpcy5fcHJpdmF0ZS5lbGVtZW50cztcbiAgfVxufTtcblxuLy8gYWxpYXNlc1xuY29yZWZuJDMuZWxlbWVudHMgPSBjb3JlZm4kMy5maWx0ZXIgPSBjb3JlZm4kMy4kO1xuXG52YXIgc3R5Zm4kOCA9IHt9O1xuXG4vLyBrZXlzIGZvciBzdHlsZSBibG9ja3MsIGUuZy4gdHRmZnR0XG52YXIgVFJVRSA9ICd0JztcbnZhciBGQUxTRSA9ICdmJztcblxuLy8gKHBvdGVudGlhbGx5IGV4cGVuc2l2ZSBjYWxjdWxhdGlvbilcbi8vIGFwcGx5IHRoZSBzdHlsZSB0byB0aGUgZWxlbWVudCBiYXNlZCBvblxuLy8gLSBpdHMgYnlwYXNzXG4vLyAtIHdoYXQgc2VsZWN0b3JzIG1hdGNoIGl0XG5zdHlmbiQ4LmFwcGx5ID0gZnVuY3Rpb24gKGVsZXMpIHtcbiAgdmFyIHNlbGYgPSB0aGlzO1xuICB2YXIgX3AgPSBzZWxmLl9wcml2YXRlO1xuICB2YXIgY3kgPSBfcC5jeTtcbiAgdmFyIHVwZGF0ZWRFbGVzID0gY3kuY29sbGVjdGlvbigpO1xuICBmb3IgKHZhciBpZSA9IDA7IGllIDwgZWxlcy5sZW5ndGg7IGllKyspIHtcbiAgICB2YXIgZWxlID0gZWxlc1tpZV07XG4gICAgdmFyIGN4dE1ldGEgPSBzZWxmLmdldENvbnRleHRNZXRhKGVsZSk7XG4gICAgaWYgKGN4dE1ldGEuZW1wdHkpIHtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cbiAgICB2YXIgY3h0U3R5bGUgPSBzZWxmLmdldENvbnRleHRTdHlsZShjeHRNZXRhKTtcbiAgICB2YXIgYXBwID0gc2VsZi5hcHBseUNvbnRleHRTdHlsZShjeHRNZXRhLCBjeHRTdHlsZSwgZWxlKTtcbiAgICBpZiAoZWxlLl9wcml2YXRlLmFwcGxpZWRJbml0U3R5bGUpIHtcbiAgICAgIHNlbGYudXBkYXRlVHJhbnNpdGlvbnMoZWxlLCBhcHAuZGlmZlByb3BzKTtcbiAgICB9IGVsc2Uge1xuICAgICAgZWxlLl9wcml2YXRlLmFwcGxpZWRJbml0U3R5bGUgPSB0cnVlO1xuICAgIH1cbiAgICB2YXIgaGludHNEaWZmID0gc2VsZi51cGRhdGVTdHlsZUhpbnRzKGVsZSk7XG4gICAgaWYgKGhpbnRzRGlmZikge1xuICAgICAgdXBkYXRlZEVsZXMucHVzaChlbGUpO1xuICAgIH1cbiAgfSAvLyBmb3IgZWxlbWVudHNcblxuICByZXR1cm4gdXBkYXRlZEVsZXM7XG59O1xuc3R5Zm4kOC5nZXRQcm9wZXJ0aWVzRGlmZiA9IGZ1bmN0aW9uIChvbGRDeHRLZXksIG5ld0N4dEtleSkge1xuICB2YXIgc2VsZiA9IHRoaXM7XG4gIHZhciBjYWNoZSA9IHNlbGYuX3ByaXZhdGUucHJvcERpZmZzID0gc2VsZi5fcHJpdmF0ZS5wcm9wRGlmZnMgfHwge307XG4gIHZhciBkdWFsQ3h0S2V5ID0gb2xkQ3h0S2V5ICsgJy0nICsgbmV3Q3h0S2V5O1xuICB2YXIgY2FjaGVkVmFsID0gY2FjaGVbZHVhbEN4dEtleV07XG4gIGlmIChjYWNoZWRWYWwpIHtcbiAgICByZXR1cm4gY2FjaGVkVmFsO1xuICB9XG4gIHZhciBkaWZmUHJvcHMgPSBbXTtcbiAgdmFyIGFkZGVkUHJvcCA9IHt9O1xuICBmb3IgKHZhciBpID0gMDsgaSA8IHNlbGYubGVuZ3RoOyBpKyspIHtcbiAgICB2YXIgY3h0ID0gc2VsZltpXTtcbiAgICB2YXIgb2xkSGFzQ3h0ID0gb2xkQ3h0S2V5W2ldID09PSBUUlVFO1xuICAgIHZhciBuZXdIYXNDeHQgPSBuZXdDeHRLZXlbaV0gPT09IFRSVUU7XG4gICAgdmFyIGN4dEhhc0RpZmZlZCA9IG9sZEhhc0N4dCAhPT0gbmV3SGFzQ3h0O1xuICAgIHZhciBjeHRIYXNNYXBwZWRQcm9wcyA9IGN4dC5tYXBwZWRQcm9wZXJ0aWVzLmxlbmd0aCA+IDA7XG4gICAgaWYgKGN4dEhhc0RpZmZlZCB8fCBuZXdIYXNDeHQgJiYgY3h0SGFzTWFwcGVkUHJvcHMpIHtcbiAgICAgIHZhciBwcm9wcyA9IHVuZGVmaW5lZDtcbiAgICAgIGlmIChjeHRIYXNEaWZmZWQgJiYgY3h0SGFzTWFwcGVkUHJvcHMpIHtcbiAgICAgICAgcHJvcHMgPSBjeHQucHJvcGVydGllczsgLy8gc3VmZmljZXMgYi9jIG1hcHBlZFByb3BlcnRpZXMgaXMgYSBzdWJzZXQgb2YgcHJvcGVydGllc1xuICAgICAgfSBlbHNlIGlmIChjeHRIYXNEaWZmZWQpIHtcbiAgICAgICAgcHJvcHMgPSBjeHQucHJvcGVydGllczsgLy8gbmVlZCB0byBjaGVjayB0aGVtIGFsbFxuICAgICAgfSBlbHNlIGlmIChjeHRIYXNNYXBwZWRQcm9wcykge1xuICAgICAgICBwcm9wcyA9IGN4dC5tYXBwZWRQcm9wZXJ0aWVzOyAvLyBvbmx5IG5lZWQgdG8gY2hlY2sgbWFwcGVkXG4gICAgICB9XG4gICAgICBmb3IgKHZhciBqID0gMDsgaiA8IHByb3BzLmxlbmd0aDsgaisrKSB7XG4gICAgICAgIHZhciBwcm9wID0gcHJvcHNbal07XG4gICAgICAgIHZhciBuYW1lID0gcHJvcC5uYW1lO1xuXG4gICAgICAgIC8vIGlmIGEgbGF0ZXIgY29udGV4dCBvdmVycmlkZXMgdGhpcyBwcm9wZXJ0eSwgdGhlbiB0aGUgZmFjdCB0aGF0IHRoaXMgY29udGV4dCBoYXMgc3dpdGNoZWQvZGlmZmVkIGRvZXNuJ3QgbWF0dGVyXG4gICAgICAgIC8vIChzZW1pIGV4cGVuc2l2ZSBjaGVjayBzaW5jZSBpdCBtYWtlcyB0aGlzIGZ1bmN0aW9uIE8obl4yKSBvbiBjb250ZXh0IGxlbmd0aCwgYnV0IHdvcnRoIGl0IHNpbmNlIG92ZXJhbGwgcmVzdWx0XG4gICAgICAgIC8vIGlzIGNhY2hlZClcbiAgICAgICAgdmFyIGxhdGVyQ3h0T3ZlcnJpZGVzID0gZmFsc2U7XG4gICAgICAgIGZvciAodmFyIGsgPSBpICsgMTsgayA8IHNlbGYubGVuZ3RoOyBrKyspIHtcbiAgICAgICAgICB2YXIgbGF0ZXJDeHQgPSBzZWxmW2tdO1xuICAgICAgICAgIHZhciBoYXNMYXRlckN4dCA9IG5ld0N4dEtleVtrXSA9PT0gVFJVRTtcbiAgICAgICAgICBpZiAoIWhhc0xhdGVyQ3h0KSB7XG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICB9IC8vIGNhbid0IG92ZXJyaWRlIHVubGVzcyB0aGUgY29udGV4dCBpcyBhY3RpdmVcblxuICAgICAgICAgIGxhdGVyQ3h0T3ZlcnJpZGVzID0gbGF0ZXJDeHQucHJvcGVydGllc1twcm9wLm5hbWVdICE9IG51bGw7XG4gICAgICAgICAgaWYgKGxhdGVyQ3h0T3ZlcnJpZGVzKSB7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9IC8vIGV4aXQgZWFybHkgYXMgbG9uZyBhcyBvbmUgbGF0ZXIgY29udGV4dCBvdmVycmlkZXNcbiAgICAgICAgfVxuICAgICAgICBpZiAoIWFkZGVkUHJvcFtuYW1lXSAmJiAhbGF0ZXJDeHRPdmVycmlkZXMpIHtcbiAgICAgICAgICBhZGRlZFByb3BbbmFtZV0gPSB0cnVlO1xuICAgICAgICAgIGRpZmZQcm9wcy5wdXNoKG5hbWUpO1xuICAgICAgICB9XG4gICAgICB9IC8vIGZvciBwcm9wc1xuICAgIH0gLy8gaWZcbiAgfSAvLyBmb3IgY29udGV4dHNcblxuICBjYWNoZVtkdWFsQ3h0S2V5XSA9IGRpZmZQcm9wcztcbiAgcmV0dXJuIGRpZmZQcm9wcztcbn07XG5zdHlmbiQ4LmdldENvbnRleHRNZXRhID0gZnVuY3Rpb24gKGVsZSkge1xuICB2YXIgc2VsZiA9IHRoaXM7XG4gIHZhciBjeHRLZXkgPSAnJztcbiAgdmFyIGRpZmZQcm9wcztcbiAgdmFyIHByZXZLZXkgPSBlbGUuX3ByaXZhdGUuc3R5bGVDeHRLZXkgfHwgJyc7XG5cbiAgLy8gZ2V0IHRoZSBjeHQga2V5XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgc2VsZi5sZW5ndGg7IGkrKykge1xuICAgIHZhciBjb250ZXh0ID0gc2VsZltpXTtcbiAgICB2YXIgY29udGV4dFNlbGVjdG9yTWF0Y2hlcyA9IGNvbnRleHQuc2VsZWN0b3IgJiYgY29udGV4dC5zZWxlY3Rvci5tYXRjaGVzKGVsZSk7IC8vIE5COiBjb250ZXh0LnNlbGVjdG9yIG1heSBiZSBudWxsIGZvciAnY29yZSdcblxuICAgIGlmIChjb250ZXh0U2VsZWN0b3JNYXRjaGVzKSB7XG4gICAgICBjeHRLZXkgKz0gVFJVRTtcbiAgICB9IGVsc2Uge1xuICAgICAgY3h0S2V5ICs9IEZBTFNFO1xuICAgIH1cbiAgfSAvLyBmb3IgY29udGV4dFxuXG4gIGRpZmZQcm9wcyA9IHNlbGYuZ2V0UHJvcGVydGllc0RpZmYocHJldktleSwgY3h0S2V5KTtcbiAgZWxlLl9wcml2YXRlLnN0eWxlQ3h0S2V5ID0gY3h0S2V5O1xuICByZXR1cm4ge1xuICAgIGtleTogY3h0S2V5LFxuICAgIGRpZmZQcm9wTmFtZXM6IGRpZmZQcm9wcyxcbiAgICBlbXB0eTogZGlmZlByb3BzLmxlbmd0aCA9PT0gMFxuICB9O1xufTtcblxuLy8gZ2V0cyBhIGNvbXB1dGVkIGVsZSBzdHlsZSBvYmplY3QgYmFzZWQgb24gbWF0Y2hlZCBjb250ZXh0c1xuc3R5Zm4kOC5nZXRDb250ZXh0U3R5bGUgPSBmdW5jdGlvbiAoY3h0TWV0YSkge1xuICB2YXIgY3h0S2V5ID0gY3h0TWV0YS5rZXk7XG4gIHZhciBzZWxmID0gdGhpcztcbiAgdmFyIGN4dFN0eWxlcyA9IHRoaXMuX3ByaXZhdGUuY29udGV4dFN0eWxlcyA9IHRoaXMuX3ByaXZhdGUuY29udGV4dFN0eWxlcyB8fCB7fTtcblxuICAvLyBpZiBhbHJlYWR5IGNvbXB1dGVkIHN0eWxlLCByZXR1cm5lZCBjYWNoZWQgY29weVxuICBpZiAoY3h0U3R5bGVzW2N4dEtleV0pIHtcbiAgICByZXR1cm4gY3h0U3R5bGVzW2N4dEtleV07XG4gIH1cbiAgdmFyIHN0eWxlID0ge1xuICAgIF9wcml2YXRlOiB7XG4gICAgICBrZXk6IGN4dEtleVxuICAgIH1cbiAgfTtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBzZWxmLmxlbmd0aDsgaSsrKSB7XG4gICAgdmFyIGN4dCA9IHNlbGZbaV07XG4gICAgdmFyIGhhc0N4dCA9IGN4dEtleVtpXSA9PT0gVFJVRTtcbiAgICBpZiAoIWhhc0N4dCkge1xuICAgICAgY29udGludWU7XG4gICAgfVxuICAgIGZvciAodmFyIGogPSAwOyBqIDwgY3h0LnByb3BlcnRpZXMubGVuZ3RoOyBqKyspIHtcbiAgICAgIHZhciBwcm9wID0gY3h0LnByb3BlcnRpZXNbal07XG4gICAgICBzdHlsZVtwcm9wLm5hbWVdID0gcHJvcDtcbiAgICB9XG4gIH1cbiAgY3h0U3R5bGVzW2N4dEtleV0gPSBzdHlsZTtcbiAgcmV0dXJuIHN0eWxlO1xufTtcbnN0eWZuJDguYXBwbHlDb250ZXh0U3R5bGUgPSBmdW5jdGlvbiAoY3h0TWV0YSwgY3h0U3R5bGUsIGVsZSkge1xuICB2YXIgc2VsZiA9IHRoaXM7XG4gIHZhciBkaWZmUHJvcHMgPSBjeHRNZXRhLmRpZmZQcm9wTmFtZXM7XG4gIHZhciByZXREaWZmUHJvcHMgPSB7fTtcbiAgdmFyIHR5cGVzID0gc2VsZi50eXBlcztcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBkaWZmUHJvcHMubGVuZ3RoOyBpKyspIHtcbiAgICB2YXIgZGlmZlByb3BOYW1lID0gZGlmZlByb3BzW2ldO1xuICAgIHZhciBjeHRQcm9wID0gY3h0U3R5bGVbZGlmZlByb3BOYW1lXTtcbiAgICB2YXIgZWxlUHJvcCA9IGVsZS5wc3R5bGUoZGlmZlByb3BOYW1lKTtcbiAgICBpZiAoIWN4dFByb3ApIHtcbiAgICAgIC8vIG5vIGNvbnRleHQgcHJvcCBtZWFucyBkZWxldGVcbiAgICAgIGlmICghZWxlUHJvcCkge1xuICAgICAgICBjb250aW51ZTsgLy8gbm8gZXhpc3RpbmcgcHJvcCBtZWFucyBub3RoaW5nIG5lZWRzIHRvIGJlIHJlbW92ZWRcbiAgICAgICAgLy8gbmIgYWZmZWN0cyBpbml0aWFsIGFwcGxpY2F0aW9uIG9uIG1hcHBlZCB2YWx1ZXMgbGlrZSBjb250cm9sLXBvaW50LWRpc3RhbmNlc1xuICAgICAgfSBlbHNlIGlmIChlbGVQcm9wLmJ5cGFzcykge1xuICAgICAgICBjeHRQcm9wID0ge1xuICAgICAgICAgIG5hbWU6IGRpZmZQcm9wTmFtZSxcbiAgICAgICAgICBkZWxldGVCeXBhc3NlZDogdHJ1ZVxuICAgICAgICB9O1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY3h0UHJvcCA9IHtcbiAgICAgICAgICBuYW1lOiBkaWZmUHJvcE5hbWUsXG4gICAgICAgICAgXCJkZWxldGVcIjogdHJ1ZVxuICAgICAgICB9O1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIHNhdmUgY3ljbGVzIHdoZW4gdGhlIGNvbnRleHQgcHJvcCBkb2Vzbid0IG5lZWQgdG8gYmUgYXBwbGllZFxuICAgIGlmIChlbGVQcm9wID09PSBjeHRQcm9wKSB7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG5cbiAgICAvLyBzYXZlIGN5Y2xlcyB3aGVuIGEgbWFwcGVkIGNvbnRleHQgcHJvcCBkb2Vzbid0IG5lZWQgdG8gYmUgYXBwbGllZFxuICAgIGlmIChjeHRQcm9wLm1hcHBlZCA9PT0gdHlwZXMuZm4gLy8gY29udGV4dCBwcm9wIGlzIGZ1bmN0aW9uIG1hcHBlclxuICAgICYmIGVsZVByb3AgIT0gbnVsbCAvLyBzb21lIHByb3BzIGNhbiBiZSBudWxsIGV2ZW4gYnkgZGVmYXVsdCAoZS5nLiBhIHByb3AgdGhhdCBvdmVycmlkZXMgYW5vdGhlciBvbmUpXG4gICAgJiYgZWxlUHJvcC5tYXBwaW5nICE9IG51bGwgLy8gZWxlIHByb3AgaXMgYSBjb25jcmV0ZSB2YWx1ZSBmcm9tIGZyb20gYSBtYXBwZXJcbiAgICAmJiBlbGVQcm9wLm1hcHBpbmcudmFsdWUgPT09IGN4dFByb3AudmFsdWUgLy8gdGhlIGN1cnJlbnQgcHJvcCBvbiB0aGUgZWxlIGlzIGEgZmxhdCBwcm9wIHZhbHVlIGZvciB0aGUgZnVuY3Rpb24gbWFwcGVyXG4gICAgKSB7XG4gICAgICAvLyBOQiBkb24ndCB3cml0ZSB0byBjeHRQcm9wLCBhcyBpdCdzIHNoYXJlZCBhbW9uZyBlbGVzIChzdG9yZWQgaW4gc3R5bGVzaGVldClcbiAgICAgIHZhciBtYXBwaW5nID0gZWxlUHJvcC5tYXBwaW5nOyAvLyBjYW4gd3JpdGUgdG8gbWFwcGluZywgYXMgaXQncyBhIHBlci1lbGUgY29weVxuICAgICAgdmFyIGZuVmFsdWUgPSBtYXBwaW5nLmZuVmFsdWUgPSBjeHRQcm9wLnZhbHVlKGVsZSk7IC8vIHRlbXBvcmFyaWx5IGNhY2hlIHRoZSB2YWx1ZSBpbiBjYXNlIG9mIGEgbWlzc1xuXG4gICAgICBpZiAoZm5WYWx1ZSA9PT0gbWFwcGluZy5wcmV2Rm5WYWx1ZSkge1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cbiAgICB9XG4gICAgdmFyIHJldERpZmZQcm9wID0gcmV0RGlmZlByb3BzW2RpZmZQcm9wTmFtZV0gPSB7XG4gICAgICBwcmV2OiBlbGVQcm9wXG4gICAgfTtcbiAgICBzZWxmLmFwcGx5UGFyc2VkUHJvcGVydHkoZWxlLCBjeHRQcm9wKTtcbiAgICByZXREaWZmUHJvcC5uZXh0ID0gZWxlLnBzdHlsZShkaWZmUHJvcE5hbWUpO1xuICAgIGlmIChyZXREaWZmUHJvcC5uZXh0ICYmIHJldERpZmZQcm9wLm5leHQuYnlwYXNzKSB7XG4gICAgICByZXREaWZmUHJvcC5uZXh0ID0gcmV0RGlmZlByb3AubmV4dC5ieXBhc3NlZDtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHtcbiAgICBkaWZmUHJvcHM6IHJldERpZmZQcm9wc1xuICB9O1xufTtcbnN0eWZuJDgudXBkYXRlU3R5bGVIaW50cyA9IGZ1bmN0aW9uIChlbGUpIHtcbiAgdmFyIF9wID0gZWxlLl9wcml2YXRlO1xuICB2YXIgc2VsZiA9IHRoaXM7XG4gIHZhciBwcm9wTmFtZXMgPSBzZWxmLnByb3BlcnR5R3JvdXBOYW1lcztcbiAgdmFyIHByb3BHcktleXMgPSBzZWxmLnByb3BlcnR5R3JvdXBLZXlzO1xuICB2YXIgcHJvcEhhc2ggPSBmdW5jdGlvbiBwcm9wSGFzaChlbGUsIHByb3BOYW1lcywgc2VlZEtleSkge1xuICAgIHJldHVybiBzZWxmLmdldFByb3BlcnRpZXNIYXNoKGVsZSwgcHJvcE5hbWVzLCBzZWVkS2V5KTtcbiAgfTtcbiAgdmFyIG9sZFN0eWxlS2V5ID0gX3Auc3R5bGVLZXk7XG4gIGlmIChlbGUucmVtb3ZlZCgpKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIHZhciBpc05vZGUgPSBfcC5ncm91cCA9PT0gJ25vZGVzJztcblxuICAvLyBnZXQgdGhlIHN0eWxlIGtleSBoYXNoZXMgcGVyIHByb3AgZ3JvdXBcbiAgLy8gYnV0IGxhemlseSAtLSBvbmx5IHVzZSBub24tZGVmYXVsdCBwcm9wIHZhbHVlcyB0byByZWR1Y2UgdGhlIG51bWJlciBvZiBoYXNoZXNcbiAgLy9cblxuICB2YXIgb3ZlcnJpZGRlblN0eWxlcyA9IGVsZS5fcHJpdmF0ZS5zdHlsZTtcbiAgcHJvcE5hbWVzID0gT2JqZWN0LmtleXMob3ZlcnJpZGRlblN0eWxlcyk7XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgcHJvcEdyS2V5cy5sZW5ndGg7IGkrKykge1xuICAgIHZhciBncktleSA9IHByb3BHcktleXNbaV07XG4gICAgX3Auc3R5bGVLZXlzW2dyS2V5XSA9IFtERUZBVUxUX0hBU0hfU0VFRCwgREVGQVVMVF9IQVNIX1NFRURfQUxUXTtcbiAgfVxuICB2YXIgdXBkYXRlR3JLZXkxID0gZnVuY3Rpb24gdXBkYXRlR3JLZXkxKHZhbCwgZ3JLZXkpIHtcbiAgICByZXR1cm4gX3Auc3R5bGVLZXlzW2dyS2V5XVswXSA9IGhhc2hJbnQodmFsLCBfcC5zdHlsZUtleXNbZ3JLZXldWzBdKTtcbiAgfTtcbiAgdmFyIHVwZGF0ZUdyS2V5MiA9IGZ1bmN0aW9uIHVwZGF0ZUdyS2V5Mih2YWwsIGdyS2V5KSB7XG4gICAgcmV0dXJuIF9wLnN0eWxlS2V5c1tncktleV1bMV0gPSBoYXNoSW50QWx0KHZhbCwgX3Auc3R5bGVLZXlzW2dyS2V5XVsxXSk7XG4gIH07XG4gIHZhciB1cGRhdGVHcktleSA9IGZ1bmN0aW9uIHVwZGF0ZUdyS2V5KHZhbCwgZ3JLZXkpIHtcbiAgICB1cGRhdGVHcktleTEodmFsLCBncktleSk7XG4gICAgdXBkYXRlR3JLZXkyKHZhbCwgZ3JLZXkpO1xuICB9O1xuICB2YXIgdXBkYXRlR3JLZXlXU3RyID0gZnVuY3Rpb24gdXBkYXRlR3JLZXlXU3RyKHN0clZhbCwgZ3JLZXkpIHtcbiAgICBmb3IgKHZhciBqID0gMDsgaiA8IHN0clZhbC5sZW5ndGg7IGorKykge1xuICAgICAgdmFyIGNoID0gc3RyVmFsLmNoYXJDb2RlQXQoaik7XG4gICAgICB1cGRhdGVHcktleTEoY2gsIGdyS2V5KTtcbiAgICAgIHVwZGF0ZUdyS2V5MihjaCwgZ3JLZXkpO1xuICAgIH1cbiAgfTtcblxuICAvLyAtIGhhc2hpbmcgd29ya3Mgb24gMzIgYml0IGludHMgYi9jIHdlIHVzZSBiaXR3aXNlIG9wc1xuICAvLyAtIHNtYWxsIG51bWJlcnMgZ2V0IGN1dCBvZmYgKGUuZy4gMC4xMjMgaXMgc2VlbiBhcyAwIGJ5IHRoZSBoYXNoaW5nIGZ1bmN0aW9uKVxuICAvLyAtIHJhaXNlIHVwIHNtYWxsIG51bWJlcnMgc28gbW9yZSBzaWduaWZpY2FudCBkaWdpdHMgYXJlIHNlZW4gYnkgaGFzaGluZ1xuICAvLyAtIG1ha2Ugc21hbGwgbnVtYmVycyBsYXJnZXIgdGhhbiBhIG5vcm1hbCB2YWx1ZSB0byBhdm9pZCBjb2xsaXNpb25zXG4gIC8vIC0gd29ya3MgaW4gcHJhY3RpY2UgYW5kIGl0J3MgcmVsYXRpdmVseSBjaGVhcFxuICB2YXIgTiA9IDIwMDAwMDAwMDA7XG4gIHZhciBjbGVhbk51bSA9IGZ1bmN0aW9uIGNsZWFuTnVtKHZhbCkge1xuICAgIHJldHVybiAtMTI4IDwgdmFsICYmIHZhbCA8IDEyOCAmJiBNYXRoLmZsb29yKHZhbCkgIT09IHZhbCA/IE4gLSAodmFsICogMTAyNCB8IDApIDogdmFsO1xuICB9O1xuICBmb3IgKHZhciBfaSA9IDA7IF9pIDwgcHJvcE5hbWVzLmxlbmd0aDsgX2krKykge1xuICAgIHZhciBuYW1lID0gcHJvcE5hbWVzW19pXTtcbiAgICB2YXIgcGFyc2VkUHJvcCA9IG92ZXJyaWRkZW5TdHlsZXNbbmFtZV07XG4gICAgaWYgKHBhcnNlZFByb3AgPT0gbnVsbCkge1xuICAgICAgY29udGludWU7XG4gICAgfVxuICAgIHZhciBwcm9wSW5mbyA9IHRoaXMucHJvcGVydGllc1tuYW1lXTtcbiAgICB2YXIgdHlwZSA9IHByb3BJbmZvLnR5cGU7XG4gICAgdmFyIF9ncktleSA9IHByb3BJbmZvLmdyb3VwS2V5O1xuICAgIHZhciBub3JtYWxpemVkTnVtYmVyVmFsID0gdW5kZWZpbmVkO1xuICAgIGlmIChwcm9wSW5mby5oYXNoT3ZlcnJpZGUgIT0gbnVsbCkge1xuICAgICAgbm9ybWFsaXplZE51bWJlclZhbCA9IHByb3BJbmZvLmhhc2hPdmVycmlkZShlbGUsIHBhcnNlZFByb3ApO1xuICAgIH0gZWxzZSBpZiAocGFyc2VkUHJvcC5wZlZhbHVlICE9IG51bGwpIHtcbiAgICAgIG5vcm1hbGl6ZWROdW1iZXJWYWwgPSBwYXJzZWRQcm9wLnBmVmFsdWU7XG4gICAgfVxuXG4gICAgLy8gbWlnaHQgbm90IGJlIGEgbnVtYmVyIGlmIGl0IGFsbG93cyBlbnVtc1xuICAgIHZhciBudW1iZXJWYWwgPSBwcm9wSW5mby5lbnVtcyA9PSBudWxsID8gcGFyc2VkUHJvcC52YWx1ZSA6IG51bGw7XG4gICAgdmFyIGhhdmVOb3JtTnVtID0gbm9ybWFsaXplZE51bWJlclZhbCAhPSBudWxsO1xuICAgIHZhciBoYXZlVW5pdGVkTnVtID0gbnVtYmVyVmFsICE9IG51bGw7XG4gICAgdmFyIGhhdmVOdW0gPSBoYXZlTm9ybU51bSB8fCBoYXZlVW5pdGVkTnVtO1xuICAgIHZhciB1bml0cyA9IHBhcnNlZFByb3AudW5pdHM7XG5cbiAgICAvLyBudW1iZXJzIGFyZSBjaGVhcGVyIHRvIGhhc2ggdGhhbiBzdHJpbmdzXG4gICAgLy8gMSBoYXNoIG9wIHZzIG4gaGFzaCBvcHMgKGZvciBsZW5ndGggbiBzdHJpbmcpXG4gICAgaWYgKHR5cGUubnVtYmVyICYmIGhhdmVOdW0gJiYgIXR5cGUubXVsdGlwbGUpIHtcbiAgICAgIHZhciB2ID0gaGF2ZU5vcm1OdW0gPyBub3JtYWxpemVkTnVtYmVyVmFsIDogbnVtYmVyVmFsO1xuICAgICAgdXBkYXRlR3JLZXkoY2xlYW5OdW0odiksIF9ncktleSk7XG4gICAgICBpZiAoIWhhdmVOb3JtTnVtICYmIHVuaXRzICE9IG51bGwpIHtcbiAgICAgICAgdXBkYXRlR3JLZXlXU3RyKHVuaXRzLCBfZ3JLZXkpO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICB1cGRhdGVHcktleVdTdHIocGFyc2VkUHJvcC5zdHJWYWx1ZSwgX2dyS2V5KTtcbiAgICB9XG4gIH1cblxuICAvLyBvdmVyYWxsIHN0eWxlIGtleVxuICAvL1xuXG4gIHZhciBoYXNoID0gW0RFRkFVTFRfSEFTSF9TRUVELCBERUZBVUxUX0hBU0hfU0VFRF9BTFRdO1xuICBmb3IgKHZhciBfaTIgPSAwOyBfaTIgPCBwcm9wR3JLZXlzLmxlbmd0aDsgX2kyKyspIHtcbiAgICB2YXIgX2dyS2V5MiA9IHByb3BHcktleXNbX2kyXTtcbiAgICB2YXIgZ3JIYXNoID0gX3Auc3R5bGVLZXlzW19ncktleTJdO1xuICAgIGhhc2hbMF0gPSBoYXNoSW50KGdySGFzaFswXSwgaGFzaFswXSk7XG4gICAgaGFzaFsxXSA9IGhhc2hJbnRBbHQoZ3JIYXNoWzFdLCBoYXNoWzFdKTtcbiAgfVxuICBfcC5zdHlsZUtleSA9IGNvbWJpbmVIYXNoZXMoaGFzaFswXSwgaGFzaFsxXSk7XG5cbiAgLy8gbGFiZWwgZGltc1xuICAvL1xuXG4gIHZhciBzayA9IF9wLnN0eWxlS2V5cztcbiAgX3AubGFiZWxEaW1zS2V5ID0gY29tYmluZUhhc2hlc0FycmF5KHNrLmxhYmVsRGltZW5zaW9ucyk7XG4gIHZhciBsYWJlbEtleXMgPSBwcm9wSGFzaChlbGUsIFsnbGFiZWwnXSwgc2subGFiZWxEaW1lbnNpb25zKTtcbiAgX3AubGFiZWxLZXkgPSBjb21iaW5lSGFzaGVzQXJyYXkobGFiZWxLZXlzKTtcbiAgX3AubGFiZWxTdHlsZUtleSA9IGNvbWJpbmVIYXNoZXNBcnJheShoYXNoQXJyYXlzKHNrLmNvbW1vbkxhYmVsLCBsYWJlbEtleXMpKTtcbiAgaWYgKCFpc05vZGUpIHtcbiAgICB2YXIgc291cmNlTGFiZWxLZXlzID0gcHJvcEhhc2goZWxlLCBbJ3NvdXJjZS1sYWJlbCddLCBzay5sYWJlbERpbWVuc2lvbnMpO1xuICAgIF9wLnNvdXJjZUxhYmVsS2V5ID0gY29tYmluZUhhc2hlc0FycmF5KHNvdXJjZUxhYmVsS2V5cyk7XG4gICAgX3Auc291cmNlTGFiZWxTdHlsZUtleSA9IGNvbWJpbmVIYXNoZXNBcnJheShoYXNoQXJyYXlzKHNrLmNvbW1vbkxhYmVsLCBzb3VyY2VMYWJlbEtleXMpKTtcbiAgICB2YXIgdGFyZ2V0TGFiZWxLZXlzID0gcHJvcEhhc2goZWxlLCBbJ3RhcmdldC1sYWJlbCddLCBzay5sYWJlbERpbWVuc2lvbnMpO1xuICAgIF9wLnRhcmdldExhYmVsS2V5ID0gY29tYmluZUhhc2hlc0FycmF5KHRhcmdldExhYmVsS2V5cyk7XG4gICAgX3AudGFyZ2V0TGFiZWxTdHlsZUtleSA9IGNvbWJpbmVIYXNoZXNBcnJheShoYXNoQXJyYXlzKHNrLmNvbW1vbkxhYmVsLCB0YXJnZXRMYWJlbEtleXMpKTtcbiAgfVxuXG4gIC8vIG5vZGVcbiAgLy9cblxuICBpZiAoaXNOb2RlKSB7XG4gICAgdmFyIF9wJHN0eWxlS2V5cyA9IF9wLnN0eWxlS2V5cyxcbiAgICAgIG5vZGVCb2R5ID0gX3Akc3R5bGVLZXlzLm5vZGVCb2R5LFxuICAgICAgbm9kZUJvcmRlciA9IF9wJHN0eWxlS2V5cy5ub2RlQm9yZGVyLFxuICAgICAgbm9kZU91dGxpbmUgPSBfcCRzdHlsZUtleXMubm9kZU91dGxpbmUsXG4gICAgICBiYWNrZ3JvdW5kSW1hZ2UgPSBfcCRzdHlsZUtleXMuYmFja2dyb3VuZEltYWdlLFxuICAgICAgY29tcG91bmQgPSBfcCRzdHlsZUtleXMuY29tcG91bmQsXG4gICAgICBwaWUgPSBfcCRzdHlsZUtleXMucGllO1xuICAgIHZhciBub2RlS2V5cyA9IFtub2RlQm9keSwgbm9kZUJvcmRlciwgbm9kZU91dGxpbmUsIGJhY2tncm91bmRJbWFnZSwgY29tcG91bmQsIHBpZV0uZmlsdGVyKGZ1bmN0aW9uIChrKSB7XG4gICAgICByZXR1cm4gayAhPSBudWxsO1xuICAgIH0pLnJlZHVjZShoYXNoQXJyYXlzLCBbREVGQVVMVF9IQVNIX1NFRUQsIERFRkFVTFRfSEFTSF9TRUVEX0FMVF0pO1xuICAgIF9wLm5vZGVLZXkgPSBjb21iaW5lSGFzaGVzQXJyYXkobm9kZUtleXMpO1xuICAgIF9wLmhhc1BpZSA9IHBpZSAhPSBudWxsICYmIHBpZVswXSAhPT0gREVGQVVMVF9IQVNIX1NFRUQgJiYgcGllWzFdICE9PSBERUZBVUxUX0hBU0hfU0VFRF9BTFQ7XG4gIH1cbiAgcmV0dXJuIG9sZFN0eWxlS2V5ICE9PSBfcC5zdHlsZUtleTtcbn07XG5zdHlmbiQ4LmNsZWFyU3R5bGVIaW50cyA9IGZ1bmN0aW9uIChlbGUpIHtcbiAgdmFyIF9wID0gZWxlLl9wcml2YXRlO1xuICBfcC5zdHlsZUN4dEtleSA9ICcnO1xuICBfcC5zdHlsZUtleXMgPSB7fTtcbiAgX3Auc3R5bGVLZXkgPSBudWxsO1xuICBfcC5sYWJlbEtleSA9IG51bGw7XG4gIF9wLmxhYmVsU3R5bGVLZXkgPSBudWxsO1xuICBfcC5zb3VyY2VMYWJlbEtleSA9IG51bGw7XG4gIF9wLnNvdXJjZUxhYmVsU3R5bGVLZXkgPSBudWxsO1xuICBfcC50YXJnZXRMYWJlbEtleSA9IG51bGw7XG4gIF9wLnRhcmdldExhYmVsU3R5bGVLZXkgPSBudWxsO1xuICBfcC5ub2RlS2V5ID0gbnVsbDtcbiAgX3AuaGFzUGllID0gbnVsbDtcbn07XG5cbi8vIGFwcGx5IGEgcHJvcGVydHkgdG8gdGhlIHN0eWxlIChmb3IgaW50ZXJuYWwgdXNlKVxuLy8gcmV0dXJucyB3aGV0aGVyIGFwcGxpY2F0aW9uIHdhcyBzdWNjZXNzZnVsXG4vL1xuLy8gbm93LCB0aGlzIGZ1bmN0aW9uIGZsYXR0ZW5zIHRoZSBwcm9wZXJ0eSwgYW5kIGhlcmUncyBob3c6XG4vL1xuLy8gZm9yIHBhcnNlZFByb3A6eyBieXBhc3M6IHRydWUsIGRlbGV0ZUJ5cGFzczogdHJ1ZSB9XG4vLyBubyBwcm9wZXJ0eSBpcyBnZW5lcmF0ZWQsIGluc3RlYWQgdGhlIGJ5cGFzcyBwcm9wZXJ0eSBpbiB0aGVcbi8vIGVsZW1lbnQncyBzdHlsZSBpcyByZXBsYWNlZCBieSB3aGF0J3MgcG9pbnRlZCB0byBieSB0aGUgYGJ5cGFzc2VkYFxuLy8gZmllbGQgaW4gdGhlIGJ5cGFzcyBwcm9wZXJ0eSAoaS5lLiByZXN0b3JpbmcgdGhlIHByb3BlcnR5IHRoZVxuLy8gYnlwYXNzIHdhcyBvdmVycmlkaW5nKVxuLy9cbi8vIGZvciBwYXJzZWRQcm9wOnsgbWFwcGVkOiB0cnV0aHkgfVxuLy8gdGhlIGdlbmVyYXRlZCBmbGF0dGVuZWRQcm9wOnsgbWFwcGluZzogcHJvcCB9XG4vL1xuLy8gZm9yIHBhcnNlZFByb3A6eyBieXBhc3M6IHRydWUgfVxuLy8gdGhlIGdlbmVyYXRlZCBmbGF0dGVuZWRQcm9wOnsgYnlwYXNzZWQ6IHBhcnNlZFByb3AgfVxuc3R5Zm4kOC5hcHBseVBhcnNlZFByb3BlcnR5ID0gZnVuY3Rpb24gKGVsZSwgcGFyc2VkUHJvcCkge1xuICB2YXIgc2VsZiA9IHRoaXM7XG4gIHZhciBwcm9wID0gcGFyc2VkUHJvcDtcbiAgdmFyIHN0eWxlID0gZWxlLl9wcml2YXRlLnN0eWxlO1xuICB2YXIgZmxhdFByb3A7XG4gIHZhciB0eXBlcyA9IHNlbGYudHlwZXM7XG4gIHZhciB0eXBlID0gc2VsZi5wcm9wZXJ0aWVzW3Byb3AubmFtZV0udHlwZTtcbiAgdmFyIHByb3BJc0J5cGFzcyA9IHByb3AuYnlwYXNzO1xuICB2YXIgb3JpZ1Byb3AgPSBzdHlsZVtwcm9wLm5hbWVdO1xuICB2YXIgb3JpZ1Byb3BJc0J5cGFzcyA9IG9yaWdQcm9wICYmIG9yaWdQcm9wLmJ5cGFzcztcbiAgdmFyIF9wID0gZWxlLl9wcml2YXRlO1xuICB2YXIgZmxhdFByb3BNYXBwaW5nID0gJ21hcHBpbmcnO1xuICB2YXIgZ2V0VmFsID0gZnVuY3Rpb24gZ2V0VmFsKHApIHtcbiAgICBpZiAocCA9PSBudWxsKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9IGVsc2UgaWYgKHAucGZWYWx1ZSAhPSBudWxsKSB7XG4gICAgICByZXR1cm4gcC5wZlZhbHVlO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gcC52YWx1ZTtcbiAgICB9XG4gIH07XG4gIHZhciBjaGVja1RyaWdnZXJzID0gZnVuY3Rpb24gY2hlY2tUcmlnZ2VycygpIHtcbiAgICB2YXIgZnJvbVZhbCA9IGdldFZhbChvcmlnUHJvcCk7XG4gICAgdmFyIHRvVmFsID0gZ2V0VmFsKHByb3ApO1xuICAgIHNlbGYuY2hlY2tUcmlnZ2VycyhlbGUsIHByb3AubmFtZSwgZnJvbVZhbCwgdG9WYWwpO1xuICB9O1xuXG4gIC8vIGVkZ2Ugc2FuaXR5IGNoZWNrcyB0byBwcmV2ZW50IHRoZSBjbGllbnQgZnJvbSBtYWtpbmcgc2VyaW91cyBtaXN0YWtlc1xuICBpZiAocGFyc2VkUHJvcC5uYW1lID09PSAnY3VydmUtc3R5bGUnICYmIGVsZS5pc0VkZ2UoKSAmJiAoXG4gIC8vIGxvb3BzIG11c3QgYmUgYnVuZGxlZCBiZXppZXJzXG4gIHBhcnNlZFByb3AudmFsdWUgIT09ICdiZXppZXInICYmIGVsZS5pc0xvb3AoKSB8fFxuICAvLyBlZGdlcyBjb25uZWN0ZWQgdG8gY29tcG91bmQgbm9kZXMgY2FuIG5vdCBiZSBoYXlzdGFja3NcbiAgcGFyc2VkUHJvcC52YWx1ZSA9PT0gJ2hheXN0YWNrJyAmJiAoZWxlLnNvdXJjZSgpLmlzUGFyZW50KCkgfHwgZWxlLnRhcmdldCgpLmlzUGFyZW50KCkpKSkge1xuICAgIHByb3AgPSBwYXJzZWRQcm9wID0gdGhpcy5wYXJzZShwYXJzZWRQcm9wLm5hbWUsICdiZXppZXInLCBwcm9wSXNCeXBhc3MpO1xuICB9XG4gIGlmIChwcm9wW1wiZGVsZXRlXCJdKSB7XG4gICAgLy8gZGVsZXRlIHRoZSBwcm9wZXJ0eSBhbmQgdXNlIHRoZSBkZWZhdWx0IHZhbHVlIG9uIGZhbHNleSB2YWx1ZVxuICAgIHN0eWxlW3Byb3AubmFtZV0gPSB1bmRlZmluZWQ7XG4gICAgY2hlY2tUcmlnZ2VycygpO1xuICAgIHJldHVybiB0cnVlO1xuICB9XG4gIGlmIChwcm9wLmRlbGV0ZUJ5cGFzc2VkKSB7XG4gICAgLy8gZGVsZXRlIHRoZSBwcm9wZXJ0eSB0aGF0IHRoZVxuICAgIGlmICghb3JpZ1Byb3ApIHtcbiAgICAgIGNoZWNrVHJpZ2dlcnMoKTtcbiAgICAgIHJldHVybiB0cnVlOyAvLyBjYW4ndCBkZWxldGUgaWYgbm8gcHJvcFxuICAgIH0gZWxzZSBpZiAob3JpZ1Byb3AuYnlwYXNzKSB7XG4gICAgICAvLyBkZWxldGUgYnlwYXNzZWRcbiAgICAgIG9yaWdQcm9wLmJ5cGFzc2VkID0gdW5kZWZpbmVkO1xuICAgICAgY2hlY2tUcmlnZ2VycygpO1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBmYWxzZTsgLy8gd2UncmUgdW5zdWNjZXNzZnVsIGRlbGV0aW5nIHRoZSBieXBhc3NlZFxuICAgIH1cbiAgfVxuXG4gIC8vIGNoZWNrIGlmIHdlIG5lZWQgdG8gZGVsZXRlIHRoZSBjdXJyZW50IGJ5cGFzc1xuICBpZiAocHJvcC5kZWxldGVCeXBhc3MpIHtcbiAgICAvLyB0aGVuIHRoaXMgcHJvcGVydHkgaXMganVzdCBoZXJlIHRvIGluZGljYXRlIHdlIG5lZWQgdG8gZGVsZXRlXG4gICAgaWYgKCFvcmlnUHJvcCkge1xuICAgICAgY2hlY2tUcmlnZ2VycygpO1xuICAgICAgcmV0dXJuIHRydWU7IC8vIHByb3BlcnR5IGlzIGFscmVhZHkgbm90IGRlZmluZWRcbiAgICB9IGVsc2UgaWYgKG9yaWdQcm9wLmJ5cGFzcykge1xuICAgICAgLy8gdGhlbiByZXBsYWNlIHRoZSBieXBhc3MgcHJvcGVydHkgd2l0aCB0aGUgb3JpZ2luYWxcbiAgICAgIC8vIGJlY2F1c2UgdGhlIGJ5cGFzc2VkIHByb3BlcnR5IHdhcyBhbHJlYWR5IGFwcGxpZWQgKGFuZCB0aGVyZWZvcmUgcGFyc2VkKSwgd2UgY2FuIGp1c3QgcmVwbGFjZSBpdCAobm8gcmVhcHBseWluZyBuZWNlc3NhcnkpXG4gICAgICBzdHlsZVtwcm9wLm5hbWVdID0gb3JpZ1Byb3AuYnlwYXNzZWQ7XG4gICAgICBjaGVja1RyaWdnZXJzKCk7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIGZhbHNlOyAvLyB3ZSdyZSB1bnN1Y2Nlc3NmdWwgZGVsZXRpbmcgdGhlIGJ5cGFzc1xuICAgIH1cbiAgfVxuICB2YXIgcHJpbnRNYXBwaW5nRXJyID0gZnVuY3Rpb24gcHJpbnRNYXBwaW5nRXJyKCkge1xuICAgIHdhcm4oJ0RvIG5vdCBhc3NpZ24gbWFwcGluZ3MgdG8gZWxlbWVudHMgd2l0aG91dCBjb3JyZXNwb25kaW5nIGRhdGEgKGkuZS4gZWxlIGAnICsgZWxlLmlkKCkgKyAnYCBoYXMgbm8gbWFwcGluZyBmb3IgcHJvcGVydHkgYCcgKyBwcm9wLm5hbWUgKyAnYCB3aXRoIGRhdGEgZmllbGQgYCcgKyBwcm9wLmZpZWxkICsgJ2ApOyB0cnkgYSBgWycgKyBwcm9wLmZpZWxkICsgJ11gIHNlbGVjdG9yIHRvIGxpbWl0IHNjb3BlIHRvIGVsZW1lbnRzIHdpdGggYCcgKyBwcm9wLmZpZWxkICsgJ2AgZGVmaW5lZCcpO1xuICB9O1xuXG4gIC8vIHB1dCB0aGUgcHJvcGVydHkgaW4gdGhlIHN0eWxlIG9iamVjdHNcbiAgc3dpdGNoIChwcm9wLm1hcHBlZCkge1xuICAgIC8vIGZsYXR0ZW4gdGhlIHByb3BlcnR5IGlmIG1hcHBlZFxuICAgIGNhc2UgdHlwZXMubWFwRGF0YTpcbiAgICAgIHtcbiAgICAgICAgLy8gZmxhdHRlbiB0aGUgZmllbGQgKGUuZy4gZGF0YS5mb28uYmFyKVxuICAgICAgICB2YXIgZmllbGRzID0gcHJvcC5maWVsZC5zcGxpdCgnLicpO1xuICAgICAgICB2YXIgZmllbGRWYWwgPSBfcC5kYXRhO1xuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGZpZWxkcy5sZW5ndGggJiYgZmllbGRWYWw7IGkrKykge1xuICAgICAgICAgIHZhciBmaWVsZCA9IGZpZWxkc1tpXTtcbiAgICAgICAgICBmaWVsZFZhbCA9IGZpZWxkVmFsW2ZpZWxkXTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoZmllbGRWYWwgPT0gbnVsbCkge1xuICAgICAgICAgIHByaW50TWFwcGluZ0VycigpO1xuICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICB2YXIgcGVyY2VudDtcbiAgICAgICAgaWYgKCFudW1iZXIkMShmaWVsZFZhbCkpIHtcbiAgICAgICAgICAvLyB0aGVuIGRvbid0IGFwcGx5IGFuZCBmYWxsIGJhY2sgb24gdGhlIGV4aXN0aW5nIHN0eWxlXG4gICAgICAgICAgd2FybignRG8gbm90IHVzZSBjb250aW51b3VzIG1hcHBlcnMgd2l0aG91dCBzcGVjaWZ5aW5nIG51bWVyaWMgZGF0YSAoaS5lLiBgJyArIHByb3AuZmllbGQgKyAnOiAnICsgZmllbGRWYWwgKyAnYCBmb3IgYCcgKyBlbGUuaWQoKSArICdgIGlzIG5vbi1udW1lcmljKScpO1xuICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB2YXIgZmllbGRXaWR0aCA9IHByb3AuZmllbGRNYXggLSBwcm9wLmZpZWxkTWluO1xuICAgICAgICAgIGlmIChmaWVsZFdpZHRoID09PSAwKSB7XG4gICAgICAgICAgICAvLyBzYWZldHkgY2hlY2sgLS0gbm90IHN0cmljdGx5IG5lY2Vzc2FyeSBhcyBubyBwcm9wcyBvZiB6ZXJvIHJhbmdlIHNob3VsZCBiZSBwYXNzZWQgaGVyZVxuICAgICAgICAgICAgcGVyY2VudCA9IDA7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHBlcmNlbnQgPSAoZmllbGRWYWwgLSBwcm9wLmZpZWxkTWluKSAvIGZpZWxkV2lkdGg7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgLy8gbWFrZSBzdXJlIHRvIGJvdW5kIHBlcmNlbnQgdmFsdWVcbiAgICAgICAgaWYgKHBlcmNlbnQgPCAwKSB7XG4gICAgICAgICAgcGVyY2VudCA9IDA7XG4gICAgICAgIH0gZWxzZSBpZiAocGVyY2VudCA+IDEpIHtcbiAgICAgICAgICBwZXJjZW50ID0gMTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodHlwZS5jb2xvcikge1xuICAgICAgICAgIHZhciByMSA9IHByb3AudmFsdWVNaW5bMF07XG4gICAgICAgICAgdmFyIHIyID0gcHJvcC52YWx1ZU1heFswXTtcbiAgICAgICAgICB2YXIgZzEgPSBwcm9wLnZhbHVlTWluWzFdO1xuICAgICAgICAgIHZhciBnMiA9IHByb3AudmFsdWVNYXhbMV07XG4gICAgICAgICAgdmFyIGIxID0gcHJvcC52YWx1ZU1pblsyXTtcbiAgICAgICAgICB2YXIgYjIgPSBwcm9wLnZhbHVlTWF4WzJdO1xuICAgICAgICAgIHZhciBhMSA9IHByb3AudmFsdWVNaW5bM10gPT0gbnVsbCA/IDEgOiBwcm9wLnZhbHVlTWluWzNdO1xuICAgICAgICAgIHZhciBhMiA9IHByb3AudmFsdWVNYXhbM10gPT0gbnVsbCA/IDEgOiBwcm9wLnZhbHVlTWF4WzNdO1xuICAgICAgICAgIHZhciBjbHIgPSBbTWF0aC5yb3VuZChyMSArIChyMiAtIHIxKSAqIHBlcmNlbnQpLCBNYXRoLnJvdW5kKGcxICsgKGcyIC0gZzEpICogcGVyY2VudCksIE1hdGgucm91bmQoYjEgKyAoYjIgLSBiMSkgKiBwZXJjZW50KSwgTWF0aC5yb3VuZChhMSArIChhMiAtIGExKSAqIHBlcmNlbnQpXTtcbiAgICAgICAgICBmbGF0UHJvcCA9IHtcbiAgICAgICAgICAgIC8vIGNvbG91cnMgYXJlIHNpbXBsZSwgc28ganVzdCBjcmVhdGUgdGhlIGZsYXQgcHJvcGVydHkgaW5zdGVhZCBvZiBleHBlbnNpdmUgc3RyaW5nIHBhcnNpbmdcbiAgICAgICAgICAgIGJ5cGFzczogcHJvcC5ieXBhc3MsXG4gICAgICAgICAgICAvLyB3ZSdyZSBhIGJ5cGFzcyBpZiB0aGUgbWFwcGluZyBwcm9wZXJ0eSBpcyBhIGJ5cGFzc1xuICAgICAgICAgICAgbmFtZTogcHJvcC5uYW1lLFxuICAgICAgICAgICAgdmFsdWU6IGNscixcbiAgICAgICAgICAgIHN0clZhbHVlOiAncmdiKCcgKyBjbHJbMF0gKyAnLCAnICsgY2xyWzFdICsgJywgJyArIGNsclsyXSArICcpJ1xuICAgICAgICAgIH07XG4gICAgICAgIH0gZWxzZSBpZiAodHlwZS5udW1iZXIpIHtcbiAgICAgICAgICB2YXIgY2FsY1ZhbHVlID0gcHJvcC52YWx1ZU1pbiArIChwcm9wLnZhbHVlTWF4IC0gcHJvcC52YWx1ZU1pbikgKiBwZXJjZW50O1xuICAgICAgICAgIGZsYXRQcm9wID0gdGhpcy5wYXJzZShwcm9wLm5hbWUsIGNhbGNWYWx1ZSwgcHJvcC5ieXBhc3MsIGZsYXRQcm9wTWFwcGluZyk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmV0dXJuIGZhbHNlOyAvLyBjYW4gb25seSBtYXAgdG8gY29sb3VycyBhbmQgbnVtYmVyc1xuICAgICAgICB9XG4gICAgICAgIGlmICghZmxhdFByb3ApIHtcbiAgICAgICAgICAvLyBpZiB3ZSBjYW4ndCBmbGF0dGVuIHRoZSBwcm9wZXJ0eSwgdGhlbiBkb24ndCBhcHBseSB0aGUgcHJvcGVydHkgYW5kIGZhbGwgYmFjayBvbiB0aGUgZXhpc3Rpbmcgc3R5bGVcbiAgICAgICAgICBwcmludE1hcHBpbmdFcnIoKTtcbiAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgZmxhdFByb3AubWFwcGluZyA9IHByb3A7IC8vIGtlZXAgYSByZWZlcmVuY2UgdG8gdGhlIG1hcHBpbmdcbiAgICAgICAgcHJvcCA9IGZsYXRQcm9wOyAvLyB0aGUgZmxhdHRlbmVkIChtYXBwZWQpIHByb3BlcnR5IGlzIHRoZSBvbmUgd2Ugd2FudFxuXG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuXG4gICAgLy8gZGlyZWN0IG1hcHBpbmdcbiAgICBjYXNlIHR5cGVzLmRhdGE6XG4gICAgICB7XG4gICAgICAgIC8vIGZsYXR0ZW4gdGhlIGZpZWxkIChlLmcuIGRhdGEuZm9vLmJhcilcbiAgICAgICAgdmFyIF9maWVsZHMgPSBwcm9wLmZpZWxkLnNwbGl0KCcuJyk7XG4gICAgICAgIHZhciBfZmllbGRWYWwgPSBfcC5kYXRhO1xuICAgICAgICBmb3IgKHZhciBfaTMgPSAwOyBfaTMgPCBfZmllbGRzLmxlbmd0aCAmJiBfZmllbGRWYWw7IF9pMysrKSB7XG4gICAgICAgICAgdmFyIF9maWVsZCA9IF9maWVsZHNbX2kzXTtcbiAgICAgICAgICBfZmllbGRWYWwgPSBfZmllbGRWYWxbX2ZpZWxkXTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoX2ZpZWxkVmFsICE9IG51bGwpIHtcbiAgICAgICAgICBmbGF0UHJvcCA9IHRoaXMucGFyc2UocHJvcC5uYW1lLCBfZmllbGRWYWwsIHByb3AuYnlwYXNzLCBmbGF0UHJvcE1hcHBpbmcpO1xuICAgICAgICB9XG4gICAgICAgIGlmICghZmxhdFByb3ApIHtcbiAgICAgICAgICAvLyBpZiB3ZSBjYW4ndCBmbGF0dGVuIHRoZSBwcm9wZXJ0eSwgdGhlbiBkb24ndCBhcHBseSBhbmQgZmFsbCBiYWNrIG9uIHRoZSBleGlzdGluZyBzdHlsZVxuICAgICAgICAgIHByaW50TWFwcGluZ0VycigpO1xuICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICBmbGF0UHJvcC5tYXBwaW5nID0gcHJvcDsgLy8ga2VlcCBhIHJlZmVyZW5jZSB0byB0aGUgbWFwcGluZ1xuICAgICAgICBwcm9wID0gZmxhdFByb3A7IC8vIHRoZSBmbGF0dGVuZWQgKG1hcHBlZCkgcHJvcGVydHkgaXMgdGhlIG9uZSB3ZSB3YW50XG5cbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgY2FzZSB0eXBlcy5mbjpcbiAgICAgIHtcbiAgICAgICAgdmFyIGZuID0gcHJvcC52YWx1ZTtcbiAgICAgICAgdmFyIGZuUmV0VmFsID0gcHJvcC5mblZhbHVlICE9IG51bGwgPyBwcm9wLmZuVmFsdWUgOiBmbihlbGUpOyAvLyBjaGVjayBmb3IgY2FjaGVkIHZhbHVlIGJlZm9yZSBjYWxsaW5nIGZ1bmN0aW9uXG5cbiAgICAgICAgcHJvcC5wcmV2Rm5WYWx1ZSA9IGZuUmV0VmFsO1xuICAgICAgICBpZiAoZm5SZXRWYWwgPT0gbnVsbCkge1xuICAgICAgICAgIHdhcm4oJ0N1c3RvbSBmdW5jdGlvbiBtYXBwZXJzIG1heSBub3QgcmV0dXJuIG51bGwgKGkuZS4gYCcgKyBwcm9wLm5hbWUgKyAnYCBmb3IgZWxlIGAnICsgZWxlLmlkKCkgKyAnYCBpcyBudWxsKScpO1xuICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICBmbGF0UHJvcCA9IHRoaXMucGFyc2UocHJvcC5uYW1lLCBmblJldFZhbCwgcHJvcC5ieXBhc3MsIGZsYXRQcm9wTWFwcGluZyk7XG4gICAgICAgIGlmICghZmxhdFByb3ApIHtcbiAgICAgICAgICB3YXJuKCdDdXN0b20gZnVuY3Rpb24gbWFwcGVycyBtYXkgbm90IHJldHVybiBpbnZhbGlkIHZhbHVlcyBmb3IgdGhlIHByb3BlcnR5IHR5cGUgKGkuZS4gYCcgKyBwcm9wLm5hbWUgKyAnYCBmb3IgZWxlIGAnICsgZWxlLmlkKCkgKyAnYCBpcyBpbnZhbGlkKScpO1xuICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICBmbGF0UHJvcC5tYXBwaW5nID0gY29weShwcm9wKTsgLy8ga2VlcCBhIHJlZmVyZW5jZSB0byB0aGUgbWFwcGluZ1xuICAgICAgICBwcm9wID0gZmxhdFByb3A7IC8vIHRoZSBmbGF0dGVuZWQgKG1hcHBlZCkgcHJvcGVydHkgaXMgdGhlIG9uZSB3ZSB3YW50XG5cbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgY2FzZSB1bmRlZmluZWQ6XG4gICAgICBicmVhaztcbiAgICAvLyBqdXN0IHNldCB0aGUgcHJvcGVydHlcblxuICAgIGRlZmF1bHQ6XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgLy8gbm90IGEgdmFsaWQgbWFwcGluZ1xuICB9XG5cbiAgLy8gaWYgdGhlIHByb3BlcnR5IGlzIGEgYnlwYXNzIHByb3BlcnR5LCB0aGVuIGxpbmsgdGhlIHJlc3VsdGFudCBwcm9wZXJ0eSB0byB0aGUgb3JpZ2luYWwgb25lXG4gIGlmIChwcm9wSXNCeXBhc3MpIHtcbiAgICBpZiAob3JpZ1Byb3BJc0J5cGFzcykge1xuICAgICAgLy8gdGhlbiB0aGlzIGJ5cGFzcyBvdmVycmlkZXMgdGhlIGV4aXN0aW5nIG9uZVxuICAgICAgcHJvcC5ieXBhc3NlZCA9IG9yaWdQcm9wLmJ5cGFzc2VkOyAvLyBzdGVhbCBieXBhc3NlZCBwcm9wIGZyb20gb2xkIGJ5cGFzc1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyB0aGVuIGxpbmsgdGhlIG9yaWcgcHJvcCB0byB0aGUgbmV3IGJ5cGFzc1xuICAgICAgcHJvcC5ieXBhc3NlZCA9IG9yaWdQcm9wO1xuICAgIH1cbiAgICBzdHlsZVtwcm9wLm5hbWVdID0gcHJvcDsgLy8gYW5kIHNldFxuICB9IGVsc2Uge1xuICAgIC8vIHByb3AgaXMgbm90IGJ5cGFzc1xuICAgIGlmIChvcmlnUHJvcElzQnlwYXNzKSB7XG4gICAgICAvLyB0aGVuIGtlZXAgdGhlIG9yaWcgcHJvcCAoc2luY2UgaXQncyBhIGJ5cGFzcykgYW5kIGxpbmsgdG8gdGhlIG5ldyBwcm9wXG4gICAgICBvcmlnUHJvcC5ieXBhc3NlZCA9IHByb3A7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIHRoZW4ganVzdCByZXBsYWNlIHRoZSBvbGQgcHJvcCB3aXRoIHRoZSBuZXcgb25lXG4gICAgICBzdHlsZVtwcm9wLm5hbWVdID0gcHJvcDtcbiAgICB9XG4gIH1cbiAgY2hlY2tUcmlnZ2VycygpO1xuICByZXR1cm4gdHJ1ZTtcbn07XG5zdHlmbiQ4LmNsZWFuRWxlbWVudHMgPSBmdW5jdGlvbiAoZWxlcywga2VlcEJ5cGFzc2VzKSB7XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgZWxlcy5sZW5ndGg7IGkrKykge1xuICAgIHZhciBlbGUgPSBlbGVzW2ldO1xuICAgIHRoaXMuY2xlYXJTdHlsZUhpbnRzKGVsZSk7XG4gICAgZWxlLmRpcnR5Q29tcG91bmRCb3VuZHNDYWNoZSgpO1xuICAgIGVsZS5kaXJ0eUJvdW5kaW5nQm94Q2FjaGUoKTtcbiAgICBpZiAoIWtlZXBCeXBhc3Nlcykge1xuICAgICAgZWxlLl9wcml2YXRlLnN0eWxlID0ge307XG4gICAgfSBlbHNlIHtcbiAgICAgIHZhciBzdHlsZSA9IGVsZS5fcHJpdmF0ZS5zdHlsZTtcbiAgICAgIHZhciBwcm9wTmFtZXMgPSBPYmplY3Qua2V5cyhzdHlsZSk7XG4gICAgICBmb3IgKHZhciBqID0gMDsgaiA8IHByb3BOYW1lcy5sZW5ndGg7IGorKykge1xuICAgICAgICB2YXIgcHJvcE5hbWUgPSBwcm9wTmFtZXNbal07XG4gICAgICAgIHZhciBlbGVQcm9wID0gc3R5bGVbcHJvcE5hbWVdO1xuICAgICAgICBpZiAoZWxlUHJvcCAhPSBudWxsKSB7XG4gICAgICAgICAgaWYgKGVsZVByb3AuYnlwYXNzKSB7XG4gICAgICAgICAgICBlbGVQcm9wLmJ5cGFzc2VkID0gbnVsbDtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgc3R5bGVbcHJvcE5hbWVdID0gbnVsbDtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cbn07XG5cbi8vIHVwZGF0ZXMgdGhlIHZpc3VhbCBzdHlsZSBmb3IgYWxsIGVsZW1lbnRzICh1c2VmdWwgZm9yIG1hbnVhbCBzdHlsZSBtb2RpZmljYXRpb24gYWZ0ZXIgaW5pdClcbnN0eWZuJDgudXBkYXRlID0gZnVuY3Rpb24gKCkge1xuICB2YXIgY3kgPSB0aGlzLl9wcml2YXRlLmN5O1xuICB2YXIgZWxlcyA9IGN5Lm11dGFibGVFbGVtZW50cygpO1xuICBlbGVzLnVwZGF0ZVN0eWxlKCk7XG59O1xuXG4vLyBkaWZmUHJvcHMgOiB7IG5hbWUgPT4geyBwcmV2LCBuZXh0IH0gfVxuc3R5Zm4kOC51cGRhdGVUcmFuc2l0aW9ucyA9IGZ1bmN0aW9uIChlbGUsIGRpZmZQcm9wcykge1xuICB2YXIgc2VsZiA9IHRoaXM7XG4gIHZhciBfcCA9IGVsZS5fcHJpdmF0ZTtcbiAgdmFyIHByb3BzID0gZWxlLnBzdHlsZSgndHJhbnNpdGlvbi1wcm9wZXJ0eScpLnZhbHVlO1xuICB2YXIgZHVyYXRpb24gPSBlbGUucHN0eWxlKCd0cmFuc2l0aW9uLWR1cmF0aW9uJykucGZWYWx1ZTtcbiAgdmFyIGRlbGF5ID0gZWxlLnBzdHlsZSgndHJhbnNpdGlvbi1kZWxheScpLnBmVmFsdWU7XG4gIGlmIChwcm9wcy5sZW5ndGggPiAwICYmIGR1cmF0aW9uID4gMCkge1xuICAgIHZhciBzdHlsZSA9IHt9O1xuXG4gICAgLy8gYnVpbGQgdXAgdGhlIHN0eWxlIHRvIGFuaW1hdGUgdG93YXJkc1xuICAgIHZhciBhbnlQcmV2ID0gZmFsc2U7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBwcm9wcy5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIHByb3AgPSBwcm9wc1tpXTtcbiAgICAgIHZhciBzdHlQcm9wID0gZWxlLnBzdHlsZShwcm9wKTtcbiAgICAgIHZhciBkaWZmUHJvcCA9IGRpZmZQcm9wc1twcm9wXTtcbiAgICAgIGlmICghZGlmZlByb3ApIHtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG4gICAgICB2YXIgcHJldlByb3AgPSBkaWZmUHJvcC5wcmV2O1xuICAgICAgdmFyIGZyb21Qcm9wID0gcHJldlByb3A7XG4gICAgICB2YXIgdG9Qcm9wID0gZGlmZlByb3AubmV4dCAhPSBudWxsID8gZGlmZlByb3AubmV4dCA6IHN0eVByb3A7XG4gICAgICB2YXIgZGlmZiA9IGZhbHNlO1xuICAgICAgdmFyIGluaXRWYWwgPSB1bmRlZmluZWQ7XG4gICAgICB2YXIgaW5pdER0ID0gMC4wMDAwMDE7IC8vIGRlbHRhIHRpbWUgJSB2YWx1ZSBmb3IgaW5pdFZhbCAoYWxsb3dzIGFuaW1hdGluZyBvdXQgb2YgaW5pdCB6ZXJvIG9wYWNpdHkpXG5cbiAgICAgIGlmICghZnJvbVByb3ApIHtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG5cbiAgICAgIC8vIGNvbnNpZGVyIHB4IHZhbHVlc1xuICAgICAgaWYgKG51bWJlciQxKGZyb21Qcm9wLnBmVmFsdWUpICYmIG51bWJlciQxKHRvUHJvcC5wZlZhbHVlKSkge1xuICAgICAgICBkaWZmID0gdG9Qcm9wLnBmVmFsdWUgLSBmcm9tUHJvcC5wZlZhbHVlOyAvLyBub256ZXJvIGlzIHRydXRoeVxuICAgICAgICBpbml0VmFsID0gZnJvbVByb3AucGZWYWx1ZSArIGluaXREdCAqIGRpZmY7XG5cbiAgICAgICAgLy8gY29uc2lkZXIgbnVtZXJpY2FsIHZhbHVlc1xuICAgICAgfSBlbHNlIGlmIChudW1iZXIkMShmcm9tUHJvcC52YWx1ZSkgJiYgbnVtYmVyJDEodG9Qcm9wLnZhbHVlKSkge1xuICAgICAgICBkaWZmID0gdG9Qcm9wLnZhbHVlIC0gZnJvbVByb3AudmFsdWU7IC8vIG5vbnplcm8gaXMgdHJ1dGh5XG4gICAgICAgIGluaXRWYWwgPSBmcm9tUHJvcC52YWx1ZSArIGluaXREdCAqIGRpZmY7XG5cbiAgICAgICAgLy8gY29uc2lkZXIgY29sb3VyIHZhbHVlc1xuICAgICAgfSBlbHNlIGlmIChhcnJheShmcm9tUHJvcC52YWx1ZSkgJiYgYXJyYXkodG9Qcm9wLnZhbHVlKSkge1xuICAgICAgICBkaWZmID0gZnJvbVByb3AudmFsdWVbMF0gIT09IHRvUHJvcC52YWx1ZVswXSB8fCBmcm9tUHJvcC52YWx1ZVsxXSAhPT0gdG9Qcm9wLnZhbHVlWzFdIHx8IGZyb21Qcm9wLnZhbHVlWzJdICE9PSB0b1Byb3AudmFsdWVbMl07XG4gICAgICAgIGluaXRWYWwgPSBmcm9tUHJvcC5zdHJWYWx1ZTtcbiAgICAgIH1cblxuICAgICAgLy8gdGhlIHByZXZpb3VzIHZhbHVlIGlzIGdvb2QgZm9yIGFuIGFuaW1hdGlvbiBvbmx5IGlmIGl0J3MgZGlmZmVyZW50XG4gICAgICBpZiAoZGlmZikge1xuICAgICAgICBzdHlsZVtwcm9wXSA9IHRvUHJvcC5zdHJWYWx1ZTsgLy8gdG8gdmFsXG4gICAgICAgIHRoaXMuYXBwbHlCeXBhc3MoZWxlLCBwcm9wLCBpbml0VmFsKTsgLy8gZnJvbSB2YWxcbiAgICAgICAgYW55UHJldiA9IHRydWU7XG4gICAgICB9XG4gICAgfSAvLyBlbmQgaWYgcHJvcHMgYWxsb3cgYW5pXG5cbiAgICAvLyBjYW4ndCB0cmFuc2l0aW9uIGlmIHRoZXJlJ3Mgbm90aGluZyBwcmV2aW91cyB0byB0cmFuc2l0aW9uIGZyb21cbiAgICBpZiAoIWFueVByZXYpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgX3AudHJhbnNpdGlvbmluZyA9IHRydWU7XG4gICAgbmV3IFByb21pc2UkMShmdW5jdGlvbiAocmVzb2x2ZSkge1xuICAgICAgaWYgKGRlbGF5ID4gMCkge1xuICAgICAgICBlbGUuZGVsYXlBbmltYXRpb24oZGVsYXkpLnBsYXkoKS5wcm9taXNlKCkudGhlbihyZXNvbHZlKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJlc29sdmUoKTtcbiAgICAgIH1cbiAgICB9KS50aGVuKGZ1bmN0aW9uICgpIHtcbiAgICAgIHJldHVybiBlbGUuYW5pbWF0aW9uKHtcbiAgICAgICAgc3R5bGU6IHN0eWxlLFxuICAgICAgICBkdXJhdGlvbjogZHVyYXRpb24sXG4gICAgICAgIGVhc2luZzogZWxlLnBzdHlsZSgndHJhbnNpdGlvbi10aW1pbmctZnVuY3Rpb24nKS52YWx1ZSxcbiAgICAgICAgcXVldWU6IGZhbHNlXG4gICAgICB9KS5wbGF5KCkucHJvbWlzZSgpO1xuICAgIH0pLnRoZW4oZnVuY3Rpb24gKCkge1xuICAgICAgLy8gaWYoICFpc0J5cGFzcyApe1xuICAgICAgc2VsZi5yZW1vdmVCeXBhc3NlcyhlbGUsIHByb3BzKTtcbiAgICAgIGVsZS5lbWl0QW5kTm90aWZ5KCdzdHlsZScpO1xuICAgICAgLy8gfVxuXG4gICAgICBfcC50cmFuc2l0aW9uaW5nID0gZmFsc2U7XG4gICAgfSk7XG4gIH0gZWxzZSBpZiAoX3AudHJhbnNpdGlvbmluZykge1xuICAgIHRoaXMucmVtb3ZlQnlwYXNzZXMoZWxlLCBwcm9wcyk7XG4gICAgZWxlLmVtaXRBbmROb3RpZnkoJ3N0eWxlJyk7XG4gICAgX3AudHJhbnNpdGlvbmluZyA9IGZhbHNlO1xuICB9XG59O1xuc3R5Zm4kOC5jaGVja1RyaWdnZXIgPSBmdW5jdGlvbiAoZWxlLCBuYW1lLCBmcm9tVmFsdWUsIHRvVmFsdWUsIGdldFRyaWdnZXIsIG9uVHJpZ2dlcikge1xuICB2YXIgcHJvcCA9IHRoaXMucHJvcGVydGllc1tuYW1lXTtcbiAgdmFyIHRyaWdnZXJDaGVjayA9IGdldFRyaWdnZXIocHJvcCk7XG4gIGlmIChlbGUucmVtb3ZlZCgpKSB7XG4gICAgcmV0dXJuO1xuICB9XG4gIGlmICh0cmlnZ2VyQ2hlY2sgIT0gbnVsbCAmJiB0cmlnZ2VyQ2hlY2soZnJvbVZhbHVlLCB0b1ZhbHVlLCBlbGUpKSB7XG4gICAgb25UcmlnZ2VyKHByb3ApO1xuICB9XG59O1xuc3R5Zm4kOC5jaGVja1pPcmRlclRyaWdnZXIgPSBmdW5jdGlvbiAoZWxlLCBuYW1lLCBmcm9tVmFsdWUsIHRvVmFsdWUpIHtcbiAgdmFyIF90aGlzID0gdGhpcztcbiAgdGhpcy5jaGVja1RyaWdnZXIoZWxlLCBuYW1lLCBmcm9tVmFsdWUsIHRvVmFsdWUsIGZ1bmN0aW9uIChwcm9wKSB7XG4gICAgcmV0dXJuIHByb3AudHJpZ2dlcnNaT3JkZXI7XG4gIH0sIGZ1bmN0aW9uICgpIHtcbiAgICBfdGhpcy5fcHJpdmF0ZS5jeS5ub3RpZnkoJ3pvcmRlcicsIGVsZSk7XG4gIH0pO1xufTtcbnN0eWZuJDguY2hlY2tCb3VuZHNUcmlnZ2VyID0gZnVuY3Rpb24gKGVsZSwgbmFtZSwgZnJvbVZhbHVlLCB0b1ZhbHVlKSB7XG4gIHRoaXMuY2hlY2tUcmlnZ2VyKGVsZSwgbmFtZSwgZnJvbVZhbHVlLCB0b1ZhbHVlLCBmdW5jdGlvbiAocHJvcCkge1xuICAgIHJldHVybiBwcm9wLnRyaWdnZXJzQm91bmRzO1xuICB9LCBmdW5jdGlvbiAocHJvcCkge1xuICAgIGVsZS5kaXJ0eUNvbXBvdW5kQm91bmRzQ2FjaGUoKTtcbiAgICBlbGUuZGlydHlCb3VuZGluZ0JveENhY2hlKCk7XG4gIH0pO1xufTtcbnN0eWZuJDguY2hlY2tDb25uZWN0ZWRFZGdlc0JvdW5kc1RyaWdnZXIgPSBmdW5jdGlvbiAoZWxlLCBuYW1lLCBmcm9tVmFsdWUsIHRvVmFsdWUpIHtcbiAgdGhpcy5jaGVja1RyaWdnZXIoZWxlLCBuYW1lLCBmcm9tVmFsdWUsIHRvVmFsdWUsIGZ1bmN0aW9uIChwcm9wKSB7XG4gICAgcmV0dXJuIHByb3AudHJpZ2dlcnNCb3VuZHNPZkNvbm5lY3RlZEVkZ2VzO1xuICB9LCBmdW5jdGlvbiAocHJvcCkge1xuICAgIGVsZS5jb25uZWN0ZWRFZGdlcygpLmZvckVhY2goZnVuY3Rpb24gKGVkZ2UpIHtcbiAgICAgIGVkZ2UuZGlydHlCb3VuZGluZ0JveENhY2hlKCk7XG4gICAgfSk7XG4gIH0pO1xufTtcbnN0eWZuJDguY2hlY2tQYXJhbGxlbEVkZ2VzQm91bmRzVHJpZ2dlciA9IGZ1bmN0aW9uIChlbGUsIG5hbWUsIGZyb21WYWx1ZSwgdG9WYWx1ZSkge1xuICB0aGlzLmNoZWNrVHJpZ2dlcihlbGUsIG5hbWUsIGZyb21WYWx1ZSwgdG9WYWx1ZSwgZnVuY3Rpb24gKHByb3ApIHtcbiAgICByZXR1cm4gcHJvcC50cmlnZ2Vyc0JvdW5kc09mUGFyYWxsZWxFZGdlcztcbiAgfSwgZnVuY3Rpb24gKHByb3ApIHtcbiAgICBlbGUucGFyYWxsZWxFZGdlcygpLmZvckVhY2goZnVuY3Rpb24gKHBsbEVkZ2UpIHtcbiAgICAgIHBsbEVkZ2UuZGlydHlCb3VuZGluZ0JveENhY2hlKCk7XG4gICAgfSk7XG4gIH0pO1xufTtcbnN0eWZuJDguY2hlY2tUcmlnZ2VycyA9IGZ1bmN0aW9uIChlbGUsIG5hbWUsIGZyb21WYWx1ZSwgdG9WYWx1ZSkge1xuICBlbGUuZGlydHlTdHlsZUNhY2hlKCk7XG4gIHRoaXMuY2hlY2taT3JkZXJUcmlnZ2VyKGVsZSwgbmFtZSwgZnJvbVZhbHVlLCB0b1ZhbHVlKTtcbiAgdGhpcy5jaGVja0JvdW5kc1RyaWdnZXIoZWxlLCBuYW1lLCBmcm9tVmFsdWUsIHRvVmFsdWUpO1xuICB0aGlzLmNoZWNrQ29ubmVjdGVkRWRnZXNCb3VuZHNUcmlnZ2VyKGVsZSwgbmFtZSwgZnJvbVZhbHVlLCB0b1ZhbHVlKTtcbiAgdGhpcy5jaGVja1BhcmFsbGVsRWRnZXNCb3VuZHNUcmlnZ2VyKGVsZSwgbmFtZSwgZnJvbVZhbHVlLCB0b1ZhbHVlKTtcbn07XG5cbnZhciBzdHlmbiQ3ID0ge307XG5cbi8vIGJ5cGFzc2VzIGFyZSBhcHBsaWVkIHRvIGFuIGV4aXN0aW5nIHN0eWxlIG9uIGFuIGVsZW1lbnQsIGFuZCBqdXN0IHRhY2tlZCBvbiB0ZW1wb3JhcmlseVxuLy8gcmV0dXJucyB0cnVlIGlmZiBhcHBsaWNhdGlvbiB3YXMgc3VjY2Vzc2Z1bCBmb3IgYXQgbGVhc3QgMSBzcGVjaWZpZWQgcHJvcGVydHlcbnN0eWZuJDcuYXBwbHlCeXBhc3MgPSBmdW5jdGlvbiAoZWxlcywgbmFtZSwgdmFsdWUsIHVwZGF0ZVRyYW5zaXRpb25zKSB7XG4gIHZhciBzZWxmID0gdGhpcztcbiAgdmFyIHByb3BzID0gW107XG4gIHZhciBpc0J5cGFzcyA9IHRydWU7XG5cbiAgLy8gcHV0IGFsbCB0aGUgcHJvcGVydGllcyAoY2FuIHNwZWNpZnkgb25lIG9yIG1hbnkpIGluIGFuIGFycmF5IGFmdGVyIHBhcnNpbmcgdGhlbVxuICBpZiAobmFtZSA9PT0gJyonIHx8IG5hbWUgPT09ICcqKicpIHtcbiAgICAvLyBhcHBseSB0byBhbGwgcHJvcGVydHkgbmFtZXNcblxuICAgIGlmICh2YWx1ZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHNlbGYucHJvcGVydGllcy5sZW5ndGg7IGkrKykge1xuICAgICAgICB2YXIgcHJvcCA9IHNlbGYucHJvcGVydGllc1tpXTtcbiAgICAgICAgdmFyIF9uYW1lID0gcHJvcC5uYW1lO1xuICAgICAgICB2YXIgcGFyc2VkUHJvcCA9IHRoaXMucGFyc2UoX25hbWUsIHZhbHVlLCB0cnVlKTtcbiAgICAgICAgaWYgKHBhcnNlZFByb3ApIHtcbiAgICAgICAgICBwcm9wcy5wdXNoKHBhcnNlZFByb3ApO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9IGVsc2UgaWYgKHN0cmluZyhuYW1lKSkge1xuICAgIC8vIHRoZW4gcGFyc2UgdGhlIHNpbmdsZSBwcm9wZXJ0eVxuICAgIHZhciBfcGFyc2VkUHJvcCA9IHRoaXMucGFyc2UobmFtZSwgdmFsdWUsIHRydWUpO1xuICAgIGlmIChfcGFyc2VkUHJvcCkge1xuICAgICAgcHJvcHMucHVzaChfcGFyc2VkUHJvcCk7XG4gICAgfVxuICB9IGVsc2UgaWYgKHBsYWluT2JqZWN0KG5hbWUpKSB7XG4gICAgLy8gdGhlbiBwYXJzZSBlYWNoIHByb3BlcnR5XG4gICAgdmFyIHNwZWNpZmllZFByb3BzID0gbmFtZTtcbiAgICB1cGRhdGVUcmFuc2l0aW9ucyA9IHZhbHVlO1xuICAgIHZhciBuYW1lcyA9IE9iamVjdC5rZXlzKHNwZWNpZmllZFByb3BzKTtcbiAgICBmb3IgKHZhciBfaSA9IDA7IF9pIDwgbmFtZXMubGVuZ3RoOyBfaSsrKSB7XG4gICAgICB2YXIgX25hbWUyID0gbmFtZXNbX2ldO1xuICAgICAgdmFyIF92YWx1ZSA9IHNwZWNpZmllZFByb3BzW19uYW1lMl07XG4gICAgICBpZiAoX3ZhbHVlID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgLy8gdHJ5IGNhbWVsIGNhc2UgbmFtZSB0b29cbiAgICAgICAgX3ZhbHVlID0gc3BlY2lmaWVkUHJvcHNbZGFzaDJjYW1lbChfbmFtZTIpXTtcbiAgICAgIH1cbiAgICAgIGlmIChfdmFsdWUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICB2YXIgX3BhcnNlZFByb3AyID0gdGhpcy5wYXJzZShfbmFtZTIsIF92YWx1ZSwgdHJ1ZSk7XG4gICAgICAgIGlmIChfcGFyc2VkUHJvcDIpIHtcbiAgICAgICAgICBwcm9wcy5wdXNoKF9wYXJzZWRQcm9wMik7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgLy8gY2FuJ3QgZG8gYW55dGhpbmcgd2l0aG91dCB3ZWxsIGRlZmluZWQgcHJvcGVydGllc1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIC8vIHdlJ3ZlIGZhaWxlZCBpZiB0aGVyZSBhcmUgbm8gdmFsaWQgcHJvcGVydGllc1xuICBpZiAocHJvcHMubGVuZ3RoID09PSAwKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgLy8gbm93LCBhcHBseSB0aGUgYnlwYXNzIHByb3BlcnRpZXMgb24gdGhlIGVsZW1lbnRzXG4gIHZhciByZXQgPSBmYWxzZTsgLy8gcmV0dXJuIHRydWUgaWYgYXQgbGVhc3Qgb25lIHN1Y2Nlc2Z1bCBieXBhc3MgYXBwbGllZFxuICBmb3IgKHZhciBfaTIgPSAwOyBfaTIgPCBlbGVzLmxlbmd0aDsgX2kyKyspIHtcbiAgICAvLyBmb3IgZWFjaCBlbGVcbiAgICB2YXIgZWxlID0gZWxlc1tfaTJdO1xuICAgIHZhciBkaWZmUHJvcHMgPSB7fTtcbiAgICB2YXIgZGlmZlByb3AgPSB1bmRlZmluZWQ7XG4gICAgZm9yICh2YXIgaiA9IDA7IGogPCBwcm9wcy5sZW5ndGg7IGorKykge1xuICAgICAgLy8gZm9yIGVhY2ggcHJvcFxuICAgICAgdmFyIF9wcm9wID0gcHJvcHNbal07XG4gICAgICBpZiAodXBkYXRlVHJhbnNpdGlvbnMpIHtcbiAgICAgICAgdmFyIHByZXZQcm9wID0gZWxlLnBzdHlsZShfcHJvcC5uYW1lKTtcbiAgICAgICAgZGlmZlByb3AgPSBkaWZmUHJvcHNbX3Byb3AubmFtZV0gPSB7XG4gICAgICAgICAgcHJldjogcHJldlByb3BcbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICAgIHJldCA9IHRoaXMuYXBwbHlQYXJzZWRQcm9wZXJ0eShlbGUsIGNvcHkoX3Byb3ApKSB8fCByZXQ7XG4gICAgICBpZiAodXBkYXRlVHJhbnNpdGlvbnMpIHtcbiAgICAgICAgZGlmZlByb3AubmV4dCA9IGVsZS5wc3R5bGUoX3Byb3AubmFtZSk7XG4gICAgICB9XG4gICAgfSAvLyBmb3IgcHJvcHNcblxuICAgIGlmIChyZXQpIHtcbiAgICAgIHRoaXMudXBkYXRlU3R5bGVIaW50cyhlbGUpO1xuICAgIH1cbiAgICBpZiAodXBkYXRlVHJhbnNpdGlvbnMpIHtcbiAgICAgIHRoaXMudXBkYXRlVHJhbnNpdGlvbnMoZWxlLCBkaWZmUHJvcHMsIGlzQnlwYXNzKTtcbiAgICB9XG4gIH0gLy8gZm9yIGVsZXNcblxuICByZXR1cm4gcmV0O1xufTtcblxuLy8gb25seSB1c2VmdWwgaW4gc3BlY2lmaWMgY2FzZXMgbGlrZSBhbmltYXRpb25cbnN0eWZuJDcub3ZlcnJpZGVCeXBhc3MgPSBmdW5jdGlvbiAoZWxlcywgbmFtZSwgdmFsdWUpIHtcbiAgbmFtZSA9IGNhbWVsMmRhc2gobmFtZSk7XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgZWxlcy5sZW5ndGg7IGkrKykge1xuICAgIHZhciBlbGUgPSBlbGVzW2ldO1xuICAgIHZhciBwcm9wID0gZWxlLl9wcml2YXRlLnN0eWxlW25hbWVdO1xuICAgIHZhciB0eXBlID0gdGhpcy5wcm9wZXJ0aWVzW25hbWVdLnR5cGU7XG4gICAgdmFyIGlzQ29sb3IgPSB0eXBlLmNvbG9yO1xuICAgIHZhciBpc011bHRpID0gdHlwZS5tdXRpcGxlO1xuICAgIHZhciBvbGRWYWx1ZSA9ICFwcm9wID8gbnVsbCA6IHByb3AucGZWYWx1ZSAhPSBudWxsID8gcHJvcC5wZlZhbHVlIDogcHJvcC52YWx1ZTtcbiAgICBpZiAoIXByb3AgfHwgIXByb3AuYnlwYXNzKSB7XG4gICAgICAvLyBuZWVkIGEgYnlwYXNzIGlmIG9uZSBkb2Vzbid0IGV4aXN0XG4gICAgICB0aGlzLmFwcGx5QnlwYXNzKGVsZSwgbmFtZSwgdmFsdWUpO1xuICAgIH0gZWxzZSB7XG4gICAgICBwcm9wLnZhbHVlID0gdmFsdWU7XG4gICAgICBpZiAocHJvcC5wZlZhbHVlICE9IG51bGwpIHtcbiAgICAgICAgcHJvcC5wZlZhbHVlID0gdmFsdWU7XG4gICAgICB9XG4gICAgICBpZiAoaXNDb2xvcikge1xuICAgICAgICBwcm9wLnN0clZhbHVlID0gJ3JnYignICsgdmFsdWUuam9pbignLCcpICsgJyknO1xuICAgICAgfSBlbHNlIGlmIChpc011bHRpKSB7XG4gICAgICAgIHByb3Auc3RyVmFsdWUgPSB2YWx1ZS5qb2luKCcgJyk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBwcm9wLnN0clZhbHVlID0gJycgKyB2YWx1ZTtcbiAgICAgIH1cbiAgICAgIHRoaXMudXBkYXRlU3R5bGVIaW50cyhlbGUpO1xuICAgIH1cbiAgICB0aGlzLmNoZWNrVHJpZ2dlcnMoZWxlLCBuYW1lLCBvbGRWYWx1ZSwgdmFsdWUpO1xuICB9XG59O1xuc3R5Zm4kNy5yZW1vdmVBbGxCeXBhc3NlcyA9IGZ1bmN0aW9uIChlbGVzLCB1cGRhdGVUcmFuc2l0aW9ucykge1xuICByZXR1cm4gdGhpcy5yZW1vdmVCeXBhc3NlcyhlbGVzLCB0aGlzLnByb3BlcnR5TmFtZXMsIHVwZGF0ZVRyYW5zaXRpb25zKTtcbn07XG5zdHlmbiQ3LnJlbW92ZUJ5cGFzc2VzID0gZnVuY3Rpb24gKGVsZXMsIHByb3BzLCB1cGRhdGVUcmFuc2l0aW9ucykge1xuICB2YXIgaXNCeXBhc3MgPSB0cnVlO1xuICBmb3IgKHZhciBqID0gMDsgaiA8IGVsZXMubGVuZ3RoOyBqKyspIHtcbiAgICB2YXIgZWxlID0gZWxlc1tqXTtcbiAgICB2YXIgZGlmZlByb3BzID0ge307XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBwcm9wcy5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIG5hbWUgPSBwcm9wc1tpXTtcbiAgICAgIHZhciBwcm9wID0gdGhpcy5wcm9wZXJ0aWVzW25hbWVdO1xuICAgICAgdmFyIHByZXZQcm9wID0gZWxlLnBzdHlsZShwcm9wLm5hbWUpO1xuICAgICAgaWYgKCFwcmV2UHJvcCB8fCAhcHJldlByb3AuYnlwYXNzKSB7XG4gICAgICAgIC8vIGlmIGEgYnlwYXNzIGRvZXNuJ3QgZXhpc3QgZm9yIHRoZSBwcm9wLCBub3RoaW5nIG5lZWRzIHRvIGJlIHJlbW92ZWRcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG4gICAgICB2YXIgdmFsdWUgPSAnJzsgLy8gZW1wdHkgPT4gcmVtb3ZlIGJ5cGFzc1xuICAgICAgdmFyIHBhcnNlZFByb3AgPSB0aGlzLnBhcnNlKG5hbWUsIHZhbHVlLCB0cnVlKTtcbiAgICAgIHZhciBkaWZmUHJvcCA9IGRpZmZQcm9wc1twcm9wLm5hbWVdID0ge1xuICAgICAgICBwcmV2OiBwcmV2UHJvcFxuICAgICAgfTtcbiAgICAgIHRoaXMuYXBwbHlQYXJzZWRQcm9wZXJ0eShlbGUsIHBhcnNlZFByb3ApO1xuICAgICAgZGlmZlByb3AubmV4dCA9IGVsZS5wc3R5bGUocHJvcC5uYW1lKTtcbiAgICB9IC8vIGZvciBwcm9wc1xuXG4gICAgdGhpcy51cGRhdGVTdHlsZUhpbnRzKGVsZSk7XG4gICAgaWYgKHVwZGF0ZVRyYW5zaXRpb25zKSB7XG4gICAgICB0aGlzLnVwZGF0ZVRyYW5zaXRpb25zKGVsZSwgZGlmZlByb3BzLCBpc0J5cGFzcyk7XG4gICAgfVxuICB9IC8vIGZvciBlbGVzXG59O1xuXG52YXIgc3R5Zm4kNiA9IHt9O1xuXG4vLyBnZXRzIHdoYXQgYW4gZW0gc2l6ZSBjb3JyZXNwb25kcyB0byBpbiBwaXhlbHMgcmVsYXRpdmUgdG8gYSBkb20gZWxlbWVudFxuc3R5Zm4kNi5nZXRFbVNpemVJblBpeGVscyA9IGZ1bmN0aW9uICgpIHtcbiAgdmFyIHB4ID0gdGhpcy5jb250YWluZXJDc3MoJ2ZvbnQtc2l6ZScpO1xuICBpZiAocHggIT0gbnVsbCkge1xuICAgIHJldHVybiBwYXJzZUZsb2F0KHB4KTtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gMTsgLy8gZm9yIGhlYWRsZXNzXG4gIH1cbn07XG5cbi8vIGdldHMgY3NzIHByb3BlcnR5IGZyb20gdGhlIGNvcmUgY29udGFpbmVyXG5zdHlmbiQ2LmNvbnRhaW5lckNzcyA9IGZ1bmN0aW9uIChwcm9wTmFtZSkge1xuICB2YXIgY3kgPSB0aGlzLl9wcml2YXRlLmN5O1xuICB2YXIgZG9tRWxlbWVudCA9IGN5LmNvbnRhaW5lcigpO1xuICB2YXIgY29udGFpbmVyV2luZG93ID0gY3kud2luZG93KCk7XG4gIGlmIChjb250YWluZXJXaW5kb3cgJiYgZG9tRWxlbWVudCAmJiBjb250YWluZXJXaW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZSkge1xuICAgIHJldHVybiBjb250YWluZXJXaW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZShkb21FbGVtZW50KS5nZXRQcm9wZXJ0eVZhbHVlKHByb3BOYW1lKTtcbiAgfVxufTtcblxudmFyIHN0eWZuJDUgPSB7fTtcblxuLy8gZ2V0cyB0aGUgcmVuZGVyZWQgc3R5bGUgZm9yIGFuIGVsZW1lbnRcbnN0eWZuJDUuZ2V0UmVuZGVyZWRTdHlsZSA9IGZ1bmN0aW9uIChlbGUsIHByb3ApIHtcbiAgaWYgKHByb3ApIHtcbiAgICByZXR1cm4gdGhpcy5nZXRTdHlsZVByb3BlcnR5VmFsdWUoZWxlLCBwcm9wLCB0cnVlKTtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gdGhpcy5nZXRSYXdTdHlsZShlbGUsIHRydWUpO1xuICB9XG59O1xuXG4vLyBnZXRzIHRoZSByYXcgc3R5bGUgZm9yIGFuIGVsZW1lbnRcbnN0eWZuJDUuZ2V0UmF3U3R5bGUgPSBmdW5jdGlvbiAoZWxlLCBpc1JlbmRlcmVkVmFsKSB7XG4gIHZhciBzZWxmID0gdGhpcztcbiAgZWxlID0gZWxlWzBdOyAvLyBpbnN1cmUgaXQncyBhbiBlbGVtZW50XG5cbiAgaWYgKGVsZSkge1xuICAgIHZhciByc3R5bGUgPSB7fTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHNlbGYucHJvcGVydGllcy5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIHByb3AgPSBzZWxmLnByb3BlcnRpZXNbaV07XG4gICAgICB2YXIgdmFsID0gc2VsZi5nZXRTdHlsZVByb3BlcnR5VmFsdWUoZWxlLCBwcm9wLm5hbWUsIGlzUmVuZGVyZWRWYWwpO1xuICAgICAgaWYgKHZhbCAhPSBudWxsKSB7XG4gICAgICAgIHJzdHlsZVtwcm9wLm5hbWVdID0gdmFsO1xuICAgICAgICByc3R5bGVbZGFzaDJjYW1lbChwcm9wLm5hbWUpXSA9IHZhbDtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHJzdHlsZTtcbiAgfVxufTtcbnN0eWZuJDUuZ2V0SW5kZXhlZFN0eWxlID0gZnVuY3Rpb24gKGVsZSwgcHJvcGVydHksIHN1YnByb3BlcnR5LCBpbmRleCkge1xuICB2YXIgcHN0eWxlID0gZWxlLnBzdHlsZShwcm9wZXJ0eSlbc3VicHJvcGVydHldW2luZGV4XTtcbiAgcmV0dXJuIHBzdHlsZSAhPSBudWxsID8gcHN0eWxlIDogZWxlLmN5KCkuc3R5bGUoKS5nZXREZWZhdWx0UHJvcGVydHkocHJvcGVydHkpW3N1YnByb3BlcnR5XVswXTtcbn07XG5zdHlmbiQ1LmdldFN0eWxlUHJvcGVydHlWYWx1ZSA9IGZ1bmN0aW9uIChlbGUsIHByb3BOYW1lLCBpc1JlbmRlcmVkVmFsKSB7XG4gIHZhciBzZWxmID0gdGhpcztcbiAgZWxlID0gZWxlWzBdOyAvLyBpbnN1cmUgaXQncyBhbiBlbGVtZW50XG5cbiAgaWYgKGVsZSkge1xuICAgIHZhciBwcm9wID0gc2VsZi5wcm9wZXJ0aWVzW3Byb3BOYW1lXTtcbiAgICBpZiAocHJvcC5hbGlhcykge1xuICAgICAgcHJvcCA9IHByb3AucG9pbnRzVG87XG4gICAgfVxuICAgIHZhciB0eXBlID0gcHJvcC50eXBlO1xuICAgIHZhciBzdHlsZVByb3AgPSBlbGUucHN0eWxlKHByb3AubmFtZSk7XG4gICAgaWYgKHN0eWxlUHJvcCkge1xuICAgICAgdmFyIHZhbHVlID0gc3R5bGVQcm9wLnZhbHVlLFxuICAgICAgICB1bml0cyA9IHN0eWxlUHJvcC51bml0cyxcbiAgICAgICAgc3RyVmFsdWUgPSBzdHlsZVByb3Auc3RyVmFsdWU7XG4gICAgICBpZiAoaXNSZW5kZXJlZFZhbCAmJiB0eXBlLm51bWJlciAmJiB2YWx1ZSAhPSBudWxsICYmIG51bWJlciQxKHZhbHVlKSkge1xuICAgICAgICB2YXIgem9vbSA9IGVsZS5jeSgpLnpvb20oKTtcbiAgICAgICAgdmFyIGdldFJlbmRlcmVkVmFsdWUgPSBmdW5jdGlvbiBnZXRSZW5kZXJlZFZhbHVlKHZhbCkge1xuICAgICAgICAgIHJldHVybiB2YWwgKiB6b29tO1xuICAgICAgICB9O1xuICAgICAgICB2YXIgZ2V0VmFsdWVTdHJpbmdXaXRoVW5pdHMgPSBmdW5jdGlvbiBnZXRWYWx1ZVN0cmluZ1dpdGhVbml0cyh2YWwsIHVuaXRzKSB7XG4gICAgICAgICAgcmV0dXJuIGdldFJlbmRlcmVkVmFsdWUodmFsKSArIHVuaXRzO1xuICAgICAgICB9O1xuICAgICAgICB2YXIgaXNBcnJheVZhbHVlID0gYXJyYXkodmFsdWUpO1xuICAgICAgICB2YXIgaGF2ZVVuaXRzID0gaXNBcnJheVZhbHVlID8gdW5pdHMuZXZlcnkoZnVuY3Rpb24gKHUpIHtcbiAgICAgICAgICByZXR1cm4gdSAhPSBudWxsO1xuICAgICAgICB9KSA6IHVuaXRzICE9IG51bGw7XG4gICAgICAgIGlmIChoYXZlVW5pdHMpIHtcbiAgICAgICAgICBpZiAoaXNBcnJheVZhbHVlKSB7XG4gICAgICAgICAgICByZXR1cm4gdmFsdWUubWFwKGZ1bmN0aW9uICh2LCBpKSB7XG4gICAgICAgICAgICAgIHJldHVybiBnZXRWYWx1ZVN0cmluZ1dpdGhVbml0cyh2LCB1bml0c1tpXSk7XG4gICAgICAgICAgICB9KS5qb2luKCcgJyk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBnZXRWYWx1ZVN0cmluZ1dpdGhVbml0cyh2YWx1ZSwgdW5pdHMpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBpZiAoaXNBcnJheVZhbHVlKSB7XG4gICAgICAgICAgICByZXR1cm4gdmFsdWUubWFwKGZ1bmN0aW9uICh2KSB7XG4gICAgICAgICAgICAgIHJldHVybiBzdHJpbmcodikgPyB2IDogJycgKyBnZXRSZW5kZXJlZFZhbHVlKHYpO1xuICAgICAgICAgICAgfSkuam9pbignICcpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gJycgKyBnZXRSZW5kZXJlZFZhbHVlKHZhbHVlKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAoc3RyVmFsdWUgIT0gbnVsbCkge1xuICAgICAgICByZXR1cm4gc3RyVmFsdWU7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBudWxsO1xuICB9XG59O1xuc3R5Zm4kNS5nZXRBbmltYXRpb25TdGFydFN0eWxlID0gZnVuY3Rpb24gKGVsZSwgYW5pUHJvcHMpIHtcbiAgdmFyIHJzdHlsZSA9IHt9O1xuICBmb3IgKHZhciBpID0gMDsgaSA8IGFuaVByb3BzLmxlbmd0aDsgaSsrKSB7XG4gICAgdmFyIGFuaVByb3AgPSBhbmlQcm9wc1tpXTtcbiAgICB2YXIgbmFtZSA9IGFuaVByb3AubmFtZTtcbiAgICB2YXIgc3R5bGVQcm9wID0gZWxlLnBzdHlsZShuYW1lKTtcbiAgICBpZiAoc3R5bGVQcm9wICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIC8vIHRoZW4gbWFrZSBhIHByb3Agb2YgaXRcbiAgICAgIGlmIChwbGFpbk9iamVjdChzdHlsZVByb3ApKSB7XG4gICAgICAgIHN0eWxlUHJvcCA9IHRoaXMucGFyc2UobmFtZSwgc3R5bGVQcm9wLnN0clZhbHVlKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHN0eWxlUHJvcCA9IHRoaXMucGFyc2UobmFtZSwgc3R5bGVQcm9wKTtcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKHN0eWxlUHJvcCkge1xuICAgICAgcnN0eWxlW25hbWVdID0gc3R5bGVQcm9wO1xuICAgIH1cbiAgfVxuICByZXR1cm4gcnN0eWxlO1xufTtcbnN0eWZuJDUuZ2V0UHJvcHNMaXN0ID0gZnVuY3Rpb24gKHByb3BzT2JqKSB7XG4gIHZhciBzZWxmID0gdGhpcztcbiAgdmFyIHJzdHlsZSA9IFtdO1xuICB2YXIgc3R5bGUgPSBwcm9wc09iajtcbiAgdmFyIHByb3BzID0gc2VsZi5wcm9wZXJ0aWVzO1xuICBpZiAoc3R5bGUpIHtcbiAgICB2YXIgbmFtZXMgPSBPYmplY3Qua2V5cyhzdHlsZSk7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBuYW1lcy5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIG5hbWUgPSBuYW1lc1tpXTtcbiAgICAgIHZhciB2YWwgPSBzdHlsZVtuYW1lXTtcbiAgICAgIHZhciBwcm9wID0gcHJvcHNbbmFtZV0gfHwgcHJvcHNbY2FtZWwyZGFzaChuYW1lKV07XG4gICAgICB2YXIgc3R5bGVQcm9wID0gdGhpcy5wYXJzZShwcm9wLm5hbWUsIHZhbCk7XG4gICAgICBpZiAoc3R5bGVQcm9wKSB7XG4gICAgICAgIHJzdHlsZS5wdXNoKHN0eWxlUHJvcCk7XG4gICAgICB9XG4gICAgfVxuICB9XG4gIHJldHVybiByc3R5bGU7XG59O1xuc3R5Zm4kNS5nZXROb25EZWZhdWx0UHJvcGVydGllc0hhc2ggPSBmdW5jdGlvbiAoZWxlLCBwcm9wTmFtZXMsIHNlZWQpIHtcbiAgdmFyIGhhc2ggPSBzZWVkLnNsaWNlKCk7XG4gIHZhciBuYW1lLCB2YWwsIHN0clZhbCwgY2hWYWw7XG4gIHZhciBpLCBqO1xuICBmb3IgKGkgPSAwOyBpIDwgcHJvcE5hbWVzLmxlbmd0aDsgaSsrKSB7XG4gICAgbmFtZSA9IHByb3BOYW1lc1tpXTtcbiAgICB2YWwgPSBlbGUucHN0eWxlKG5hbWUsIGZhbHNlKTtcbiAgICBpZiAodmFsID09IG51bGwpIHtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH0gZWxzZSBpZiAodmFsLnBmVmFsdWUgIT0gbnVsbCkge1xuICAgICAgaGFzaFswXSA9IGhhc2hJbnQoY2hWYWwsIGhhc2hbMF0pO1xuICAgICAgaGFzaFsxXSA9IGhhc2hJbnRBbHQoY2hWYWwsIGhhc2hbMV0pO1xuICAgIH0gZWxzZSB7XG4gICAgICBzdHJWYWwgPSB2YWwuc3RyVmFsdWU7XG4gICAgICBmb3IgKGogPSAwOyBqIDwgc3RyVmFsLmxlbmd0aDsgaisrKSB7XG4gICAgICAgIGNoVmFsID0gc3RyVmFsLmNoYXJDb2RlQXQoaik7XG4gICAgICAgIGhhc2hbMF0gPSBoYXNoSW50KGNoVmFsLCBoYXNoWzBdKTtcbiAgICAgICAgaGFzaFsxXSA9IGhhc2hJbnRBbHQoY2hWYWwsIGhhc2hbMV0pO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICByZXR1cm4gaGFzaDtcbn07XG5zdHlmbiQ1LmdldFByb3BlcnRpZXNIYXNoID0gc3R5Zm4kNS5nZXROb25EZWZhdWx0UHJvcGVydGllc0hhc2g7XG5cbnZhciBzdHlmbiQ0ID0ge307XG5zdHlmbiQ0LmFwcGVuZEZyb21Kc29uID0gZnVuY3Rpb24gKGpzb24pIHtcbiAgdmFyIHN0eWxlID0gdGhpcztcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBqc29uLmxlbmd0aDsgaSsrKSB7XG4gICAgdmFyIGNvbnRleHQgPSBqc29uW2ldO1xuICAgIHZhciBzZWxlY3RvciA9IGNvbnRleHQuc2VsZWN0b3I7XG4gICAgdmFyIHByb3BzID0gY29udGV4dC5zdHlsZSB8fCBjb250ZXh0LmNzcztcbiAgICB2YXIgbmFtZXMgPSBPYmplY3Qua2V5cyhwcm9wcyk7XG4gICAgc3R5bGUuc2VsZWN0b3Ioc2VsZWN0b3IpOyAvLyBhcHBseSBzZWxlY3RvclxuXG4gICAgZm9yICh2YXIgaiA9IDA7IGogPCBuYW1lcy5sZW5ndGg7IGorKykge1xuICAgICAgdmFyIG5hbWUgPSBuYW1lc1tqXTtcbiAgICAgIHZhciB2YWx1ZSA9IHByb3BzW25hbWVdO1xuICAgICAgc3R5bGUuY3NzKG5hbWUsIHZhbHVlKTsgLy8gYXBwbHkgcHJvcGVydHlcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHN0eWxlO1xufTtcblxuLy8gYWNjZXNzaWJsZSBjeS5zdHlsZSgpIGZ1bmN0aW9uXG5zdHlmbiQ0LmZyb21Kc29uID0gZnVuY3Rpb24gKGpzb24pIHtcbiAgdmFyIHN0eWxlID0gdGhpcztcbiAgc3R5bGUucmVzZXRUb0RlZmF1bHQoKTtcbiAgc3R5bGUuYXBwZW5kRnJvbUpzb24oanNvbik7XG4gIHJldHVybiBzdHlsZTtcbn07XG5cbi8vIGdldCBqc29uIGZyb20gY3kuc3R5bGUoKSBhcGlcbnN0eWZuJDQuanNvbiA9IGZ1bmN0aW9uICgpIHtcbiAgdmFyIGpzb24gPSBbXTtcbiAgZm9yICh2YXIgaSA9IHRoaXMuZGVmYXVsdExlbmd0aDsgaSA8IHRoaXMubGVuZ3RoOyBpKyspIHtcbiAgICB2YXIgY3h0ID0gdGhpc1tpXTtcbiAgICB2YXIgc2VsZWN0b3IgPSBjeHQuc2VsZWN0b3I7XG4gICAgdmFyIHByb3BzID0gY3h0LnByb3BlcnRpZXM7XG4gICAgdmFyIGNzcyA9IHt9O1xuICAgIGZvciAodmFyIGogPSAwOyBqIDwgcHJvcHMubGVuZ3RoOyBqKyspIHtcbiAgICAgIHZhciBwcm9wID0gcHJvcHNbal07XG4gICAgICBjc3NbcHJvcC5uYW1lXSA9IHByb3Auc3RyVmFsdWU7XG4gICAgfVxuICAgIGpzb24ucHVzaCh7XG4gICAgICBzZWxlY3RvcjogIXNlbGVjdG9yID8gJ2NvcmUnIDogc2VsZWN0b3IudG9TdHJpbmcoKSxcbiAgICAgIHN0eWxlOiBjc3NcbiAgICB9KTtcbiAgfVxuICByZXR1cm4ganNvbjtcbn07XG5cbnZhciBzdHlmbiQzID0ge307XG5zdHlmbiQzLmFwcGVuZEZyb21TdHJpbmcgPSBmdW5jdGlvbiAoc3RyaW5nKSB7XG4gIHZhciBzZWxmID0gdGhpcztcbiAgdmFyIHN0eWxlID0gdGhpcztcbiAgdmFyIHJlbWFpbmluZyA9ICcnICsgc3RyaW5nO1xuICB2YXIgc2VsQW5kQmxvY2tTdHI7XG4gIHZhciBibG9ja1JlbTtcbiAgdmFyIHByb3BBbmRWYWxTdHI7XG5cbiAgLy8gcmVtb3ZlIGNvbW1lbnRzIGZyb20gdGhlIHN0eWxlIHN0cmluZ1xuICByZW1haW5pbmcgPSByZW1haW5pbmcucmVwbGFjZSgvWy9dWypdKFxcc3wuKSs/WypdWy9dL2csICcnKTtcbiAgZnVuY3Rpb24gcmVtb3ZlU2VsQW5kQmxvY2tGcm9tUmVtYWluaW5nKCkge1xuICAgIC8vIHJlbW92ZSB0aGUgcGFyc2VkIHNlbGVjdG9yIGFuZCBibG9jayBmcm9tIHRoZSByZW1haW5pbmcgdGV4dCB0byBwYXJzZVxuICAgIGlmIChyZW1haW5pbmcubGVuZ3RoID4gc2VsQW5kQmxvY2tTdHIubGVuZ3RoKSB7XG4gICAgICByZW1haW5pbmcgPSByZW1haW5pbmcuc3Vic3RyKHNlbEFuZEJsb2NrU3RyLmxlbmd0aCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJlbWFpbmluZyA9ICcnO1xuICAgIH1cbiAgfVxuICBmdW5jdGlvbiByZW1vdmVQcm9wQW5kVmFsRnJvbVJlbSgpIHtcbiAgICAvLyByZW1vdmUgdGhlIHBhcnNlZCBwcm9wZXJ0eSBhbmQgdmFsdWUgZnJvbSB0aGUgcmVtYWluaW5nIGJsb2NrIHRleHQgdG8gcGFyc2VcbiAgICBpZiAoYmxvY2tSZW0ubGVuZ3RoID4gcHJvcEFuZFZhbFN0ci5sZW5ndGgpIHtcbiAgICAgIGJsb2NrUmVtID0gYmxvY2tSZW0uc3Vic3RyKHByb3BBbmRWYWxTdHIubGVuZ3RoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgYmxvY2tSZW0gPSAnJztcbiAgICB9XG4gIH1cbiAgZm9yICg7Oykge1xuICAgIHZhciBub3RoaW5nTGVmdFRvUGFyc2UgPSByZW1haW5pbmcubWF0Y2goL15cXHMqJC8pO1xuICAgIGlmIChub3RoaW5nTGVmdFRvUGFyc2UpIHtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgICB2YXIgc2VsQW5kQmxvY2sgPSByZW1haW5pbmcubWF0Y2goL15cXHMqKCg/Oi58XFxzKSs/KVxccypcXHsoKD86LnxcXHMpKz8pXFx9Lyk7XG4gICAgaWYgKCFzZWxBbmRCbG9jaykge1xuICAgICAgd2FybignSGFsdGluZyBzdHlsZXNoZWV0IHBhcnNpbmc6IFN0cmluZyBzdHlsZXNoZWV0IGNvbnRhaW5zIG1vcmUgdG8gcGFyc2UgYnV0IG5vIHNlbGVjdG9yIGFuZCBibG9jayBmb3VuZCBpbjogJyArIHJlbWFpbmluZyk7XG4gICAgICBicmVhaztcbiAgICB9XG4gICAgc2VsQW5kQmxvY2tTdHIgPSBzZWxBbmRCbG9ja1swXTtcblxuICAgIC8vIHBhcnNlIHRoZSBzZWxlY3RvclxuICAgIHZhciBzZWxlY3RvclN0ciA9IHNlbEFuZEJsb2NrWzFdO1xuICAgIGlmIChzZWxlY3RvclN0ciAhPT0gJ2NvcmUnKSB7XG4gICAgICB2YXIgc2VsZWN0b3IgPSBuZXcgU2VsZWN0b3Ioc2VsZWN0b3JTdHIpO1xuICAgICAgaWYgKHNlbGVjdG9yLmludmFsaWQpIHtcbiAgICAgICAgd2FybignU2tpcHBpbmcgcGFyc2luZyBvZiBibG9jazogSW52YWxpZCBzZWxlY3RvciBmb3VuZCBpbiBzdHJpbmcgc3R5bGVzaGVldDogJyArIHNlbGVjdG9yU3RyKTtcblxuICAgICAgICAvLyBza2lwIHRoaXMgc2VsZWN0b3IgYW5kIGJsb2NrXG4gICAgICAgIHJlbW92ZVNlbEFuZEJsb2NrRnJvbVJlbWFpbmluZygpO1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBwYXJzZSB0aGUgYmxvY2sgb2YgcHJvcGVydGllcyBhbmQgdmFsdWVzXG4gICAgdmFyIGJsb2NrU3RyID0gc2VsQW5kQmxvY2tbMl07XG4gICAgdmFyIGludmFsaWRCbG9jayA9IGZhbHNlO1xuICAgIGJsb2NrUmVtID0gYmxvY2tTdHI7XG4gICAgdmFyIHByb3BzID0gW107XG4gICAgZm9yICg7Oykge1xuICAgICAgdmFyIF9ub3RoaW5nTGVmdFRvUGFyc2UgPSBibG9ja1JlbS5tYXRjaCgvXlxccyokLyk7XG4gICAgICBpZiAoX25vdGhpbmdMZWZ0VG9QYXJzZSkge1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICAgIHZhciBwcm9wQW5kVmFsID0gYmxvY2tSZW0ubWF0Y2goL15cXHMqKC4rPylcXHMqOlxccyooLis/KSg/Olxccyo7fFxccyokKS8pO1xuICAgICAgaWYgKCFwcm9wQW5kVmFsKSB7XG4gICAgICAgIHdhcm4oJ1NraXBwaW5nIHBhcnNpbmcgb2YgYmxvY2s6IEludmFsaWQgZm9ybWF0dGluZyBvZiBzdHlsZSBwcm9wZXJ0eSBhbmQgdmFsdWUgZGVmaW5pdGlvbnMgZm91bmQgaW46JyArIGJsb2NrU3RyKTtcbiAgICAgICAgaW52YWxpZEJsb2NrID0gdHJ1ZTtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgICBwcm9wQW5kVmFsU3RyID0gcHJvcEFuZFZhbFswXTtcbiAgICAgIHZhciBwcm9wU3RyID0gcHJvcEFuZFZhbFsxXTtcbiAgICAgIHZhciB2YWxTdHIgPSBwcm9wQW5kVmFsWzJdO1xuICAgICAgdmFyIHByb3AgPSBzZWxmLnByb3BlcnRpZXNbcHJvcFN0cl07XG4gICAgICBpZiAoIXByb3ApIHtcbiAgICAgICAgd2FybignU2tpcHBpbmcgcHJvcGVydHk6IEludmFsaWQgcHJvcGVydHkgbmFtZSBpbjogJyArIHByb3BBbmRWYWxTdHIpO1xuXG4gICAgICAgIC8vIHNraXAgdGhpcyBwcm9wZXJ0eSBpbiB0aGUgYmxvY2tcbiAgICAgICAgcmVtb3ZlUHJvcEFuZFZhbEZyb21SZW0oKTtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG4gICAgICB2YXIgcGFyc2VkUHJvcCA9IHN0eWxlLnBhcnNlKHByb3BTdHIsIHZhbFN0cik7XG4gICAgICBpZiAoIXBhcnNlZFByb3ApIHtcbiAgICAgICAgd2FybignU2tpcHBpbmcgcHJvcGVydHk6IEludmFsaWQgcHJvcGVydHkgZGVmaW5pdGlvbiBpbjogJyArIHByb3BBbmRWYWxTdHIpO1xuXG4gICAgICAgIC8vIHNraXAgdGhpcyBwcm9wZXJ0eSBpbiB0aGUgYmxvY2tcbiAgICAgICAgcmVtb3ZlUHJvcEFuZFZhbEZyb21SZW0oKTtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG4gICAgICBwcm9wcy5wdXNoKHtcbiAgICAgICAgbmFtZTogcHJvcFN0cixcbiAgICAgICAgdmFsOiB2YWxTdHJcbiAgICAgIH0pO1xuICAgICAgcmVtb3ZlUHJvcEFuZFZhbEZyb21SZW0oKTtcbiAgICB9XG4gICAgaWYgKGludmFsaWRCbG9jaykge1xuICAgICAgcmVtb3ZlU2VsQW5kQmxvY2tGcm9tUmVtYWluaW5nKCk7XG4gICAgICBicmVhaztcbiAgICB9XG5cbiAgICAvLyBwdXQgdGhlIHBhcnNlZCBibG9jayBpbiB0aGUgc3R5bGVcbiAgICBzdHlsZS5zZWxlY3RvcihzZWxlY3RvclN0cik7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBwcm9wcy5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIF9wcm9wID0gcHJvcHNbaV07XG4gICAgICBzdHlsZS5jc3MoX3Byb3AubmFtZSwgX3Byb3AudmFsKTtcbiAgICB9XG4gICAgcmVtb3ZlU2VsQW5kQmxvY2tGcm9tUmVtYWluaW5nKCk7XG4gIH1cbiAgcmV0dXJuIHN0eWxlO1xufTtcbnN0eWZuJDMuZnJvbVN0cmluZyA9IGZ1bmN0aW9uIChzdHJpbmcpIHtcbiAgdmFyIHN0eWxlID0gdGhpcztcbiAgc3R5bGUucmVzZXRUb0RlZmF1bHQoKTtcbiAgc3R5bGUuYXBwZW5kRnJvbVN0cmluZyhzdHJpbmcpO1xuICByZXR1cm4gc3R5bGU7XG59O1xuXG52YXIgc3R5Zm4kMiA9IHt9O1xuKGZ1bmN0aW9uICgpIHtcbiAgdmFyIG51bWJlciQxID0gbnVtYmVyO1xuICB2YXIgcmdiYSA9IHJnYmFOb0JhY2tSZWZzO1xuICB2YXIgaHNsYSA9IGhzbGFOb0JhY2tSZWZzO1xuICB2YXIgaGV4MyQxID0gaGV4MztcbiAgdmFyIGhleDYkMSA9IGhleDY7XG4gIHZhciBkYXRhID0gZnVuY3Rpb24gZGF0YShwcmVmaXgpIHtcbiAgICByZXR1cm4gJ14nICsgcHJlZml4ICsgJ1xcXFxzKlxcXFwoXFxcXHMqKFtcXFxcd1xcXFwuXSspXFxcXHMqXFxcXCkkJztcbiAgfTtcbiAgdmFyIG1hcERhdGEgPSBmdW5jdGlvbiBtYXBEYXRhKHByZWZpeCkge1xuICAgIHZhciBtYXBBcmcgPSBudW1iZXIkMSArICd8XFxcXHcrfCcgKyByZ2JhICsgJ3wnICsgaHNsYSArICd8JyArIGhleDMkMSArICd8JyArIGhleDYkMTtcbiAgICByZXR1cm4gJ14nICsgcHJlZml4ICsgJ1xcXFxzKlxcXFwoKFtcXFxcd1xcXFwuXSspXFxcXHMqXFxcXCxcXFxccyooJyArIG51bWJlciQxICsgJylcXFxccypcXFxcLFxcXFxzKignICsgbnVtYmVyJDEgKyAnKVxcXFxzKixcXFxccyooJyArIG1hcEFyZyArICcpXFxcXHMqXFxcXCxcXFxccyooJyArIG1hcEFyZyArICcpXFxcXCkkJztcbiAgfTtcbiAgdmFyIHVybFJlZ2V4ZXMgPSBbJ151cmxcXFxccypcXFxcKFxcXFxzKltcXCdcIl0/KC4rPylbXFwnXCJdP1xcXFxzKlxcXFwpJCcsICdeKG5vbmUpJCcsICdeKC4rKSQnXTtcblxuICAvLyBlYWNoIHZpc3VhbCBzdHlsZSBwcm9wZXJ0eSBoYXMgYSB0eXBlIGFuZCBuZWVkcyB0byBiZSB2YWxpZGF0ZWQgYWNjb3JkaW5nIHRvIGl0XG4gIHN0eWZuJDIudHlwZXMgPSB7XG4gICAgdGltZToge1xuICAgICAgbnVtYmVyOiB0cnVlLFxuICAgICAgbWluOiAwLFxuICAgICAgdW5pdHM6ICdzfG1zJyxcbiAgICAgIGltcGxpY2l0VW5pdHM6ICdtcydcbiAgICB9LFxuICAgIHBlcmNlbnQ6IHtcbiAgICAgIG51bWJlcjogdHJ1ZSxcbiAgICAgIG1pbjogMCxcbiAgICAgIG1heDogMTAwLFxuICAgICAgdW5pdHM6ICclJyxcbiAgICAgIGltcGxpY2l0VW5pdHM6ICclJ1xuICAgIH0sXG4gICAgcGVyY2VudGFnZXM6IHtcbiAgICAgIG51bWJlcjogdHJ1ZSxcbiAgICAgIG1pbjogMCxcbiAgICAgIG1heDogMTAwLFxuICAgICAgdW5pdHM6ICclJyxcbiAgICAgIGltcGxpY2l0VW5pdHM6ICclJyxcbiAgICAgIG11bHRpcGxlOiB0cnVlXG4gICAgfSxcbiAgICB6ZXJvT25lTnVtYmVyOiB7XG4gICAgICBudW1iZXI6IHRydWUsXG4gICAgICBtaW46IDAsXG4gICAgICBtYXg6IDEsXG4gICAgICB1bml0bGVzczogdHJ1ZVxuICAgIH0sXG4gICAgemVyb09uZU51bWJlcnM6IHtcbiAgICAgIG51bWJlcjogdHJ1ZSxcbiAgICAgIG1pbjogMCxcbiAgICAgIG1heDogMSxcbiAgICAgIHVuaXRsZXNzOiB0cnVlLFxuICAgICAgbXVsdGlwbGU6IHRydWVcbiAgICB9LFxuICAgIG5PbmVPbmVOdW1iZXI6IHtcbiAgICAgIG51bWJlcjogdHJ1ZSxcbiAgICAgIG1pbjogLTEsXG4gICAgICBtYXg6IDEsXG4gICAgICB1bml0bGVzczogdHJ1ZVxuICAgIH0sXG4gICAgbm9uTmVnYXRpdmVJbnQ6IHtcbiAgICAgIG51bWJlcjogdHJ1ZSxcbiAgICAgIG1pbjogMCxcbiAgICAgIGludGVnZXI6IHRydWUsXG4gICAgICB1bml0bGVzczogdHJ1ZVxuICAgIH0sXG4gICAgbm9uTmVnYXRpdmVOdW1iZXI6IHtcbiAgICAgIG51bWJlcjogdHJ1ZSxcbiAgICAgIG1pbjogMCxcbiAgICAgIHVuaXRsZXNzOiB0cnVlXG4gICAgfSxcbiAgICBwb3NpdGlvbjoge1xuICAgICAgZW51bXM6IFsncGFyZW50JywgJ29yaWdpbiddXG4gICAgfSxcbiAgICBub2RlU2l6ZToge1xuICAgICAgbnVtYmVyOiB0cnVlLFxuICAgICAgbWluOiAwLFxuICAgICAgZW51bXM6IFsnbGFiZWwnXVxuICAgIH0sXG4gICAgbnVtYmVyOiB7XG4gICAgICBudW1iZXI6IHRydWUsXG4gICAgICB1bml0bGVzczogdHJ1ZVxuICAgIH0sXG4gICAgbnVtYmVyczoge1xuICAgICAgbnVtYmVyOiB0cnVlLFxuICAgICAgdW5pdGxlc3M6IHRydWUsXG4gICAgICBtdWx0aXBsZTogdHJ1ZVxuICAgIH0sXG4gICAgcG9zaXRpdmVOdW1iZXI6IHtcbiAgICAgIG51bWJlcjogdHJ1ZSxcbiAgICAgIHVuaXRsZXNzOiB0cnVlLFxuICAgICAgbWluOiAwLFxuICAgICAgc3RyaWN0TWluOiB0cnVlXG4gICAgfSxcbiAgICBzaXplOiB7XG4gICAgICBudW1iZXI6IHRydWUsXG4gICAgICBtaW46IDBcbiAgICB9LFxuICAgIGJpZGlyZWN0aW9uYWxTaXplOiB7XG4gICAgICBudW1iZXI6IHRydWVcbiAgICB9LFxuICAgIC8vIGFsbG93cyBuZWdhdGl2ZVxuICAgIGJpZGlyZWN0aW9uYWxTaXplTWF5YmVQZXJjZW50OiB7XG4gICAgICBudW1iZXI6IHRydWUsXG4gICAgICBhbGxvd1BlcmNlbnQ6IHRydWVcbiAgICB9LFxuICAgIC8vIGFsbG93cyBuZWdhdGl2ZVxuICAgIGJpZGlyZWN0aW9uYWxTaXplczoge1xuICAgICAgbnVtYmVyOiB0cnVlLFxuICAgICAgbXVsdGlwbGU6IHRydWVcbiAgICB9LFxuICAgIC8vIGFsbG93cyBuZWdhdGl2ZVxuICAgIHNpemVNYXliZVBlcmNlbnQ6IHtcbiAgICAgIG51bWJlcjogdHJ1ZSxcbiAgICAgIG1pbjogMCxcbiAgICAgIGFsbG93UGVyY2VudDogdHJ1ZVxuICAgIH0sXG4gICAgYXhpc0RpcmVjdGlvbjoge1xuICAgICAgZW51bXM6IFsnaG9yaXpvbnRhbCcsICdsZWZ0d2FyZCcsICdyaWdodHdhcmQnLCAndmVydGljYWwnLCAndXB3YXJkJywgJ2Rvd253YXJkJywgJ2F1dG8nXVxuICAgIH0sXG4gICAgcGFkZGluZ1JlbGF0aXZlVG86IHtcbiAgICAgIGVudW1zOiBbJ3dpZHRoJywgJ2hlaWdodCcsICdhdmVyYWdlJywgJ21pbicsICdtYXgnXVxuICAgIH0sXG4gICAgYmdXSDoge1xuICAgICAgbnVtYmVyOiB0cnVlLFxuICAgICAgbWluOiAwLFxuICAgICAgYWxsb3dQZXJjZW50OiB0cnVlLFxuICAgICAgZW51bXM6IFsnYXV0byddLFxuICAgICAgbXVsdGlwbGU6IHRydWVcbiAgICB9LFxuICAgIGJnUG9zOiB7XG4gICAgICBudW1iZXI6IHRydWUsXG4gICAgICBhbGxvd1BlcmNlbnQ6IHRydWUsXG4gICAgICBtdWx0aXBsZTogdHJ1ZVxuICAgIH0sXG4gICAgYmdSZWxhdGl2ZVRvOiB7XG4gICAgICBlbnVtczogWydpbm5lcicsICdpbmNsdWRlLXBhZGRpbmcnXSxcbiAgICAgIG11bHRpcGxlOiB0cnVlXG4gICAgfSxcbiAgICBiZ1JlcGVhdDoge1xuICAgICAgZW51bXM6IFsncmVwZWF0JywgJ3JlcGVhdC14JywgJ3JlcGVhdC15JywgJ25vLXJlcGVhdCddLFxuICAgICAgbXVsdGlwbGU6IHRydWVcbiAgICB9LFxuICAgIGJnRml0OiB7XG4gICAgICBlbnVtczogWydub25lJywgJ2NvbnRhaW4nLCAnY292ZXInXSxcbiAgICAgIG11bHRpcGxlOiB0cnVlXG4gICAgfSxcbiAgICBiZ0Nyb3NzT3JpZ2luOiB7XG4gICAgICBlbnVtczogWydhbm9ueW1vdXMnLCAndXNlLWNyZWRlbnRpYWxzJywgJ251bGwnXSxcbiAgICAgIG11bHRpcGxlOiB0cnVlXG4gICAgfSxcbiAgICBiZ0NsaXA6IHtcbiAgICAgIGVudW1zOiBbJ25vbmUnLCAnbm9kZSddLFxuICAgICAgbXVsdGlwbGU6IHRydWVcbiAgICB9LFxuICAgIGJnQ29udGFpbm1lbnQ6IHtcbiAgICAgIGVudW1zOiBbJ2luc2lkZScsICdvdmVyJ10sXG4gICAgICBtdWx0aXBsZTogdHJ1ZVxuICAgIH0sXG4gICAgY29sb3I6IHtcbiAgICAgIGNvbG9yOiB0cnVlXG4gICAgfSxcbiAgICBjb2xvcnM6IHtcbiAgICAgIGNvbG9yOiB0cnVlLFxuICAgICAgbXVsdGlwbGU6IHRydWVcbiAgICB9LFxuICAgIGZpbGw6IHtcbiAgICAgIGVudW1zOiBbJ3NvbGlkJywgJ2xpbmVhci1ncmFkaWVudCcsICdyYWRpYWwtZ3JhZGllbnQnXVxuICAgIH0sXG4gICAgYm9vbDoge1xuICAgICAgZW51bXM6IFsneWVzJywgJ25vJ11cbiAgICB9LFxuICAgIGJvb2xzOiB7XG4gICAgICBlbnVtczogWyd5ZXMnLCAnbm8nXSxcbiAgICAgIG11bHRpcGxlOiB0cnVlXG4gICAgfSxcbiAgICBsaW5lU3R5bGU6IHtcbiAgICAgIGVudW1zOiBbJ3NvbGlkJywgJ2RvdHRlZCcsICdkYXNoZWQnXVxuICAgIH0sXG4gICAgbGluZUNhcDoge1xuICAgICAgZW51bXM6IFsnYnV0dCcsICdyb3VuZCcsICdzcXVhcmUnXVxuICAgIH0sXG4gICAgbGluZVBvc2l0aW9uOiB7XG4gICAgICBlbnVtczogWydjZW50ZXInLCAnaW5zaWRlJywgJ291dHNpZGUnXVxuICAgIH0sXG4gICAgbGluZUpvaW46IHtcbiAgICAgIGVudW1zOiBbJ3JvdW5kJywgJ2JldmVsJywgJ21pdGVyJ11cbiAgICB9LFxuICAgIGJvcmRlclN0eWxlOiB7XG4gICAgICBlbnVtczogWydzb2xpZCcsICdkb3R0ZWQnLCAnZGFzaGVkJywgJ2RvdWJsZSddXG4gICAgfSxcbiAgICBjdXJ2ZVN0eWxlOiB7XG4gICAgICBlbnVtczogWydiZXppZXInLCAndW5idW5kbGVkLWJlemllcicsICdoYXlzdGFjaycsICdzZWdtZW50cycsICdzdHJhaWdodCcsICdzdHJhaWdodC10cmlhbmdsZScsICd0YXhpJywgJ3JvdW5kLXNlZ21lbnRzJywgJ3JvdW5kLXRheGknXVxuICAgIH0sXG4gICAgcmFkaXVzVHlwZToge1xuICAgICAgZW51bXM6IFsnYXJjLXJhZGl1cycsICdpbmZsdWVuY2UtcmFkaXVzJ10sXG4gICAgICBtdWx0aXBsZTogdHJ1ZVxuICAgIH0sXG4gICAgZm9udEZhbWlseToge1xuICAgICAgcmVnZXg6ICdeKFtcXFxcdy0gXFxcXFwiXSsoPzpcXFxccyosXFxcXHMqW1xcXFx3LSBcXFxcXCJdKykqKSQnXG4gICAgfSxcbiAgICBmb250U3R5bGU6IHtcbiAgICAgIGVudW1zOiBbJ2l0YWxpYycsICdub3JtYWwnLCAnb2JsaXF1ZSddXG4gICAgfSxcbiAgICBmb250V2VpZ2h0OiB7XG4gICAgICBlbnVtczogWydub3JtYWwnLCAnYm9sZCcsICdib2xkZXInLCAnbGlnaHRlcicsICcxMDAnLCAnMjAwJywgJzMwMCcsICc0MDAnLCAnNTAwJywgJzYwMCcsICc4MDAnLCAnOTAwJywgMTAwLCAyMDAsIDMwMCwgNDAwLCA1MDAsIDYwMCwgNzAwLCA4MDAsIDkwMF1cbiAgICB9LFxuICAgIHRleHREZWNvcmF0aW9uOiB7XG4gICAgICBlbnVtczogWydub25lJywgJ3VuZGVybGluZScsICdvdmVybGluZScsICdsaW5lLXRocm91Z2gnXVxuICAgIH0sXG4gICAgdGV4dFRyYW5zZm9ybToge1xuICAgICAgZW51bXM6IFsnbm9uZScsICd1cHBlcmNhc2UnLCAnbG93ZXJjYXNlJ11cbiAgICB9LFxuICAgIHRleHRXcmFwOiB7XG4gICAgICBlbnVtczogWydub25lJywgJ3dyYXAnLCAnZWxsaXBzaXMnXVxuICAgIH0sXG4gICAgdGV4dE92ZXJmbG93V3JhcDoge1xuICAgICAgZW51bXM6IFsnd2hpdGVzcGFjZScsICdhbnl3aGVyZSddXG4gICAgfSxcbiAgICB0ZXh0QmFja2dyb3VuZFNoYXBlOiB7XG4gICAgICBlbnVtczogWydyZWN0YW5nbGUnLCAncm91bmRyZWN0YW5nbGUnLCAncm91bmQtcmVjdGFuZ2xlJ11cbiAgICB9LFxuICAgIG5vZGVTaGFwZToge1xuICAgICAgZW51bXM6IFsncmVjdGFuZ2xlJywgJ3JvdW5kcmVjdGFuZ2xlJywgJ3JvdW5kLXJlY3RhbmdsZScsICdjdXRyZWN0YW5nbGUnLCAnY3V0LXJlY3RhbmdsZScsICdib3R0b21yb3VuZHJlY3RhbmdsZScsICdib3R0b20tcm91bmQtcmVjdGFuZ2xlJywgJ2JhcnJlbCcsICdlbGxpcHNlJywgJ3RyaWFuZ2xlJywgJ3JvdW5kLXRyaWFuZ2xlJywgJ3NxdWFyZScsICdwZW50YWdvbicsICdyb3VuZC1wZW50YWdvbicsICdoZXhhZ29uJywgJ3JvdW5kLWhleGFnb24nLCAnY29uY2F2ZWhleGFnb24nLCAnY29uY2F2ZS1oZXhhZ29uJywgJ2hlcHRhZ29uJywgJ3JvdW5kLWhlcHRhZ29uJywgJ29jdGFnb24nLCAncm91bmQtb2N0YWdvbicsICd0YWcnLCAncm91bmQtdGFnJywgJ3N0YXInLCAnZGlhbW9uZCcsICdyb3VuZC1kaWFtb25kJywgJ3ZlZScsICdyaG9tYm9pZCcsICdyaWdodC1yaG9tYm9pZCcsICdwb2x5Z29uJ11cbiAgICB9LFxuICAgIG92ZXJsYXlTaGFwZToge1xuICAgICAgZW51bXM6IFsncm91bmRyZWN0YW5nbGUnLCAncm91bmQtcmVjdGFuZ2xlJywgJ2VsbGlwc2UnXVxuICAgIH0sXG4gICAgY29ybmVyUmFkaXVzOiB7XG4gICAgICBudW1iZXI6IHRydWUsXG4gICAgICBtaW46IDAsXG4gICAgICB1bml0czogJ3B4fGVtJyxcbiAgICAgIGltcGxpY2l0VW5pdHM6ICdweCcsXG4gICAgICBlbnVtczogWydhdXRvJ11cbiAgICB9LFxuICAgIGNvbXBvdW5kSW5jbHVkZUxhYmVsczoge1xuICAgICAgZW51bXM6IFsnaW5jbHVkZScsICdleGNsdWRlJ11cbiAgICB9LFxuICAgIGFycm93U2hhcGU6IHtcbiAgICAgIGVudW1zOiBbJ3RlZScsICd0cmlhbmdsZScsICd0cmlhbmdsZS10ZWUnLCAnY2lyY2xlLXRyaWFuZ2xlJywgJ3RyaWFuZ2xlLWNyb3NzJywgJ3RyaWFuZ2xlLWJhY2tjdXJ2ZScsICd2ZWUnLCAnc3F1YXJlJywgJ2NpcmNsZScsICdkaWFtb25kJywgJ2NoZXZyb24nLCAnbm9uZSddXG4gICAgfSxcbiAgICBhcnJvd0ZpbGw6IHtcbiAgICAgIGVudW1zOiBbJ2ZpbGxlZCcsICdob2xsb3cnXVxuICAgIH0sXG4gICAgYXJyb3dXaWR0aDoge1xuICAgICAgbnVtYmVyOiB0cnVlLFxuICAgICAgdW5pdHM6ICclfHB4fGVtJyxcbiAgICAgIGltcGxpY2l0VW5pdHM6ICdweCcsXG4gICAgICBlbnVtczogWydtYXRjaC1saW5lJ11cbiAgICB9LFxuICAgIGRpc3BsYXk6IHtcbiAgICAgIGVudW1zOiBbJ2VsZW1lbnQnLCAnbm9uZSddXG4gICAgfSxcbiAgICB2aXNpYmlsaXR5OiB7XG4gICAgICBlbnVtczogWydoaWRkZW4nLCAndmlzaWJsZSddXG4gICAgfSxcbiAgICB6Q29tcG91bmREZXB0aDoge1xuICAgICAgZW51bXM6IFsnYm90dG9tJywgJ29ycGhhbicsICdhdXRvJywgJ3RvcCddXG4gICAgfSxcbiAgICB6SW5kZXhDb21wYXJlOiB7XG4gICAgICBlbnVtczogWydhdXRvJywgJ21hbnVhbCddXG4gICAgfSxcbiAgICB2YWxpZ246IHtcbiAgICAgIGVudW1zOiBbJ3RvcCcsICdjZW50ZXInLCAnYm90dG9tJ11cbiAgICB9LFxuICAgIGhhbGlnbjoge1xuICAgICAgZW51bXM6IFsnbGVmdCcsICdjZW50ZXInLCAncmlnaHQnXVxuICAgIH0sXG4gICAganVzdGlmaWNhdGlvbjoge1xuICAgICAgZW51bXM6IFsnbGVmdCcsICdjZW50ZXInLCAncmlnaHQnLCAnYXV0byddXG4gICAgfSxcbiAgICB0ZXh0OiB7XG4gICAgICBzdHJpbmc6IHRydWVcbiAgICB9LFxuICAgIGRhdGE6IHtcbiAgICAgIG1hcHBpbmc6IHRydWUsXG4gICAgICByZWdleDogZGF0YSgnZGF0YScpXG4gICAgfSxcbiAgICBsYXlvdXREYXRhOiB7XG4gICAgICBtYXBwaW5nOiB0cnVlLFxuICAgICAgcmVnZXg6IGRhdGEoJ2xheW91dERhdGEnKVxuICAgIH0sXG4gICAgc2NyYXRjaDoge1xuICAgICAgbWFwcGluZzogdHJ1ZSxcbiAgICAgIHJlZ2V4OiBkYXRhKCdzY3JhdGNoJylcbiAgICB9LFxuICAgIG1hcERhdGE6IHtcbiAgICAgIG1hcHBpbmc6IHRydWUsXG4gICAgICByZWdleDogbWFwRGF0YSgnbWFwRGF0YScpXG4gICAgfSxcbiAgICBtYXBMYXlvdXREYXRhOiB7XG4gICAgICBtYXBwaW5nOiB0cnVlLFxuICAgICAgcmVnZXg6IG1hcERhdGEoJ21hcExheW91dERhdGEnKVxuICAgIH0sXG4gICAgbWFwU2NyYXRjaDoge1xuICAgICAgbWFwcGluZzogdHJ1ZSxcbiAgICAgIHJlZ2V4OiBtYXBEYXRhKCdtYXBTY3JhdGNoJylcbiAgICB9LFxuICAgIGZuOiB7XG4gICAgICBtYXBwaW5nOiB0cnVlLFxuICAgICAgZm46IHRydWVcbiAgICB9LFxuICAgIHVybDoge1xuICAgICAgcmVnZXhlczogdXJsUmVnZXhlcyxcbiAgICAgIHNpbmdsZVJlZ2V4TWF0Y2hWYWx1ZTogdHJ1ZVxuICAgIH0sXG4gICAgdXJsczoge1xuICAgICAgcmVnZXhlczogdXJsUmVnZXhlcyxcbiAgICAgIHNpbmdsZVJlZ2V4TWF0Y2hWYWx1ZTogdHJ1ZSxcbiAgICAgIG11bHRpcGxlOiB0cnVlXG4gICAgfSxcbiAgICBwcm9wTGlzdDoge1xuICAgICAgcHJvcExpc3Q6IHRydWVcbiAgICB9LFxuICAgIGFuZ2xlOiB7XG4gICAgICBudW1iZXI6IHRydWUsXG4gICAgICB1bml0czogJ2RlZ3xyYWQnLFxuICAgICAgaW1wbGljaXRVbml0czogJ3JhZCdcbiAgICB9LFxuICAgIHRleHRSb3RhdGlvbjoge1xuICAgICAgbnVtYmVyOiB0cnVlLFxuICAgICAgdW5pdHM6ICdkZWd8cmFkJyxcbiAgICAgIGltcGxpY2l0VW5pdHM6ICdyYWQnLFxuICAgICAgZW51bXM6IFsnbm9uZScsICdhdXRvcm90YXRlJ11cbiAgICB9LFxuICAgIHBvbHlnb25Qb2ludExpc3Q6IHtcbiAgICAgIG51bWJlcjogdHJ1ZSxcbiAgICAgIG11bHRpcGxlOiB0cnVlLFxuICAgICAgZXZlbk11bHRpcGxlOiB0cnVlLFxuICAgICAgbWluOiAtMSxcbiAgICAgIG1heDogMSxcbiAgICAgIHVuaXRsZXNzOiB0cnVlXG4gICAgfSxcbiAgICBlZGdlRGlzdGFuY2VzOiB7XG4gICAgICBlbnVtczogWydpbnRlcnNlY3Rpb24nLCAnbm9kZS1wb3NpdGlvbicsICdlbmRwb2ludHMnXVxuICAgIH0sXG4gICAgZWRnZUVuZHBvaW50OiB7XG4gICAgICBudW1iZXI6IHRydWUsXG4gICAgICBtdWx0aXBsZTogdHJ1ZSxcbiAgICAgIHVuaXRzOiAnJXxweHxlbXxkZWd8cmFkJyxcbiAgICAgIGltcGxpY2l0VW5pdHM6ICdweCcsXG4gICAgICBlbnVtczogWydpbnNpZGUtdG8tbm9kZScsICdvdXRzaWRlLXRvLW5vZGUnLCAnb3V0c2lkZS10by1ub2RlLW9yLWxhYmVsJywgJ291dHNpZGUtdG8tbGluZScsICdvdXRzaWRlLXRvLWxpbmUtb3ItbGFiZWwnXSxcbiAgICAgIHNpbmdsZUVudW06IHRydWUsXG4gICAgICB2YWxpZGF0ZTogZnVuY3Rpb24gdmFsaWRhdGUodmFsQXJyLCB1bml0c0Fycikge1xuICAgICAgICBzd2l0Y2ggKHZhbEFyci5sZW5ndGgpIHtcbiAgICAgICAgICBjYXNlIDI6XG4gICAgICAgICAgICAvLyBjYW4gYmUgJSBvciBweCBvbmx5XG4gICAgICAgICAgICByZXR1cm4gdW5pdHNBcnJbMF0gIT09ICdkZWcnICYmIHVuaXRzQXJyWzBdICE9PSAncmFkJyAmJiB1bml0c0FyclsxXSAhPT0gJ2RlZycgJiYgdW5pdHNBcnJbMV0gIT09ICdyYWQnO1xuICAgICAgICAgIGNhc2UgMTpcbiAgICAgICAgICAgIC8vIGNhbiBiZSBlbnVtLCBkZWcsIG9yIHJhZCBvbmx5XG4gICAgICAgICAgICByZXR1cm4gc3RyaW5nKHZhbEFyclswXSkgfHwgdW5pdHNBcnJbMF0gPT09ICdkZWcnIHx8IHVuaXRzQXJyWzBdID09PSAncmFkJztcbiAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSxcbiAgICBlYXNpbmc6IHtcbiAgICAgIHJlZ2V4ZXM6IFsnXihzcHJpbmcpXFxcXHMqXFxcXChcXFxccyooJyArIG51bWJlciQxICsgJylcXFxccyosXFxcXHMqKCcgKyBudW1iZXIkMSArICcpXFxcXHMqXFxcXCkkJywgJ14oY3ViaWMtYmV6aWVyKVxcXFxzKlxcXFwoXFxcXHMqKCcgKyBudW1iZXIkMSArICcpXFxcXHMqLFxcXFxzKignICsgbnVtYmVyJDEgKyAnKVxcXFxzKixcXFxccyooJyArIG51bWJlciQxICsgJylcXFxccyosXFxcXHMqKCcgKyBudW1iZXIkMSArICcpXFxcXHMqXFxcXCkkJ10sXG4gICAgICBlbnVtczogWydsaW5lYXInLCAnZWFzZScsICdlYXNlLWluJywgJ2Vhc2Utb3V0JywgJ2Vhc2UtaW4tb3V0JywgJ2Vhc2UtaW4tc2luZScsICdlYXNlLW91dC1zaW5lJywgJ2Vhc2UtaW4tb3V0LXNpbmUnLCAnZWFzZS1pbi1xdWFkJywgJ2Vhc2Utb3V0LXF1YWQnLCAnZWFzZS1pbi1vdXQtcXVhZCcsICdlYXNlLWluLWN1YmljJywgJ2Vhc2Utb3V0LWN1YmljJywgJ2Vhc2UtaW4tb3V0LWN1YmljJywgJ2Vhc2UtaW4tcXVhcnQnLCAnZWFzZS1vdXQtcXVhcnQnLCAnZWFzZS1pbi1vdXQtcXVhcnQnLCAnZWFzZS1pbi1xdWludCcsICdlYXNlLW91dC1xdWludCcsICdlYXNlLWluLW91dC1xdWludCcsICdlYXNlLWluLWV4cG8nLCAnZWFzZS1vdXQtZXhwbycsICdlYXNlLWluLW91dC1leHBvJywgJ2Vhc2UtaW4tY2lyYycsICdlYXNlLW91dC1jaXJjJywgJ2Vhc2UtaW4tb3V0LWNpcmMnXVxuICAgIH0sXG4gICAgZ3JhZGllbnREaXJlY3Rpb246IHtcbiAgICAgIGVudW1zOiBbJ3RvLWJvdHRvbScsICd0by10b3AnLCAndG8tbGVmdCcsICd0by1yaWdodCcsICd0by1ib3R0b20tcmlnaHQnLCAndG8tYm90dG9tLWxlZnQnLCAndG8tdG9wLXJpZ2h0JywgJ3RvLXRvcC1sZWZ0JywgJ3RvLXJpZ2h0LWJvdHRvbScsICd0by1sZWZ0LWJvdHRvbScsICd0by1yaWdodC10b3AnLCAndG8tbGVmdC10b3AnIC8vIGRpZmZlcmVudCBvcmRlclxuICAgICAgXVxuICAgIH0sXG4gICAgYm91bmRzRXhwYW5zaW9uOiB7XG4gICAgICBudW1iZXI6IHRydWUsXG4gICAgICBtdWx0aXBsZTogdHJ1ZSxcbiAgICAgIG1pbjogMCxcbiAgICAgIHZhbGlkYXRlOiBmdW5jdGlvbiB2YWxpZGF0ZSh2YWxBcnIpIHtcbiAgICAgICAgdmFyIGxlbmd0aCA9IHZhbEFyci5sZW5ndGg7XG4gICAgICAgIHJldHVybiBsZW5ndGggPT09IDEgfHwgbGVuZ3RoID09PSAyIHx8IGxlbmd0aCA9PT0gNDtcbiAgICAgIH1cbiAgICB9XG4gIH07XG4gIHZhciBkaWZmID0ge1xuICAgIHplcm9Ob25aZXJvOiBmdW5jdGlvbiB6ZXJvTm9uWmVybyh2YWwxLCB2YWwyKSB7XG4gICAgICBpZiAoKHZhbDEgPT0gbnVsbCB8fCB2YWwyID09IG51bGwpICYmIHZhbDEgIT09IHZhbDIpIHtcbiAgICAgICAgcmV0dXJuIHRydWU7IC8vIG51bGwgY2FzZXMgY291bGQgcmVwcmVzZW50IGFueSB2YWx1ZVxuICAgICAgfVxuICAgICAgaWYgKHZhbDEgPT0gMCAmJiB2YWwyICE9IDApIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9IGVsc2UgaWYgKHZhbDEgIT0gMCAmJiB2YWwyID09IDApIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gICAgfSxcbiAgICBhbnk6IGZ1bmN0aW9uIGFueSh2YWwxLCB2YWwyKSB7XG4gICAgICByZXR1cm4gdmFsMSAhPSB2YWwyO1xuICAgIH0sXG4gICAgZW1wdHlOb25FbXB0eTogZnVuY3Rpb24gZW1wdHlOb25FbXB0eShzdHIxLCBzdHIyKSB7XG4gICAgICB2YXIgZW1wdHkxID0gZW1wdHlTdHJpbmcoc3RyMSk7XG4gICAgICB2YXIgZW1wdHkyID0gZW1wdHlTdHJpbmcoc3RyMik7XG4gICAgICByZXR1cm4gZW1wdHkxICYmICFlbXB0eTIgfHwgIWVtcHR5MSAmJiBlbXB0eTI7XG4gICAgfVxuICB9O1xuXG4gIC8vIGRlZmluZSB2aXN1YWwgc3R5bGUgcHJvcGVydGllc1xuICAvL1xuICAvLyAtIG4uYi4gYWRkaW5nIGEgbmV3IGdyb3VwIG9mIHByb3BzIG1heSByZXF1aXJlIHVwZGF0ZXMgdG8gdXBkYXRlU3R5bGVIaW50cygpXG4gIC8vIC0gYWRkaW5nIG5ldyBwcm9wcyB0byBhbiBleGlzdGluZyBncm91cCBnZXRzIGhhbmRsZWQgYXV0b21hdGljYWxseVxuXG4gIHZhciB0ID0gc3R5Zm4kMi50eXBlcztcbiAgdmFyIG1haW5MYWJlbCA9IFt7XG4gICAgbmFtZTogJ2xhYmVsJyxcbiAgICB0eXBlOiB0LnRleHQsXG4gICAgdHJpZ2dlcnNCb3VuZHM6IGRpZmYuYW55LFxuICAgIHRyaWdnZXJzWk9yZGVyOiBkaWZmLmVtcHR5Tm9uRW1wdHlcbiAgfSwge1xuICAgIG5hbWU6ICd0ZXh0LXJvdGF0aW9uJyxcbiAgICB0eXBlOiB0LnRleHRSb3RhdGlvbixcbiAgICB0cmlnZ2Vyc0JvdW5kczogZGlmZi5hbnlcbiAgfSwge1xuICAgIG5hbWU6ICd0ZXh0LW1hcmdpbi14JyxcbiAgICB0eXBlOiB0LmJpZGlyZWN0aW9uYWxTaXplLFxuICAgIHRyaWdnZXJzQm91bmRzOiBkaWZmLmFueVxuICB9LCB7XG4gICAgbmFtZTogJ3RleHQtbWFyZ2luLXknLFxuICAgIHR5cGU6IHQuYmlkaXJlY3Rpb25hbFNpemUsXG4gICAgdHJpZ2dlcnNCb3VuZHM6IGRpZmYuYW55XG4gIH1dO1xuICB2YXIgc291cmNlTGFiZWwgPSBbe1xuICAgIG5hbWU6ICdzb3VyY2UtbGFiZWwnLFxuICAgIHR5cGU6IHQudGV4dCxcbiAgICB0cmlnZ2Vyc0JvdW5kczogZGlmZi5hbnlcbiAgfSwge1xuICAgIG5hbWU6ICdzb3VyY2UtdGV4dC1yb3RhdGlvbicsXG4gICAgdHlwZTogdC50ZXh0Um90YXRpb24sXG4gICAgdHJpZ2dlcnNCb3VuZHM6IGRpZmYuYW55XG4gIH0sIHtcbiAgICBuYW1lOiAnc291cmNlLXRleHQtbWFyZ2luLXgnLFxuICAgIHR5cGU6IHQuYmlkaXJlY3Rpb25hbFNpemUsXG4gICAgdHJpZ2dlcnNCb3VuZHM6IGRpZmYuYW55XG4gIH0sIHtcbiAgICBuYW1lOiAnc291cmNlLXRleHQtbWFyZ2luLXknLFxuICAgIHR5cGU6IHQuYmlkaXJlY3Rpb25hbFNpemUsXG4gICAgdHJpZ2dlcnNCb3VuZHM6IGRpZmYuYW55XG4gIH0sIHtcbiAgICBuYW1lOiAnc291cmNlLXRleHQtb2Zmc2V0JyxcbiAgICB0eXBlOiB0LnNpemUsXG4gICAgdHJpZ2dlcnNCb3VuZHM6IGRpZmYuYW55XG4gIH1dO1xuICB2YXIgdGFyZ2V0TGFiZWwgPSBbe1xuICAgIG5hbWU6ICd0YXJnZXQtbGFiZWwnLFxuICAgIHR5cGU6IHQudGV4dCxcbiAgICB0cmlnZ2Vyc0JvdW5kczogZGlmZi5hbnlcbiAgfSwge1xuICAgIG5hbWU6ICd0YXJnZXQtdGV4dC1yb3RhdGlvbicsXG4gICAgdHlwZTogdC50ZXh0Um90YXRpb24sXG4gICAgdHJpZ2dlcnNCb3VuZHM6IGRpZmYuYW55XG4gIH0sIHtcbiAgICBuYW1lOiAndGFyZ2V0LXRleHQtbWFyZ2luLXgnLFxuICAgIHR5cGU6IHQuYmlkaXJlY3Rpb25hbFNpemUsXG4gICAgdHJpZ2dlcnNCb3VuZHM6IGRpZmYuYW55XG4gIH0sIHtcbiAgICBuYW1lOiAndGFyZ2V0LXRleHQtbWFyZ2luLXknLFxuICAgIHR5cGU6IHQuYmlkaXJlY3Rpb25hbFNpemUsXG4gICAgdHJpZ2dlcnNCb3VuZHM6IGRpZmYuYW55XG4gIH0sIHtcbiAgICBuYW1lOiAndGFyZ2V0LXRleHQtb2Zmc2V0JyxcbiAgICB0eXBlOiB0LnNpemUsXG4gICAgdHJpZ2dlcnNCb3VuZHM6IGRpZmYuYW55XG4gIH1dO1xuICB2YXIgbGFiZWxEaW1lbnNpb25zID0gW3tcbiAgICBuYW1lOiAnZm9udC1mYW1pbHknLFxuICAgIHR5cGU6IHQuZm9udEZhbWlseSxcbiAgICB0cmlnZ2Vyc0JvdW5kczogZGlmZi5hbnlcbiAgfSwge1xuICAgIG5hbWU6ICdmb250LXN0eWxlJyxcbiAgICB0eXBlOiB0LmZvbnRTdHlsZSxcbiAgICB0cmlnZ2Vyc0JvdW5kczogZGlmZi5hbnlcbiAgfSwge1xuICAgIG5hbWU6ICdmb250LXdlaWdodCcsXG4gICAgdHlwZTogdC5mb250V2VpZ2h0LFxuICAgIHRyaWdnZXJzQm91bmRzOiBkaWZmLmFueVxuICB9LCB7XG4gICAgbmFtZTogJ2ZvbnQtc2l6ZScsXG4gICAgdHlwZTogdC5zaXplLFxuICAgIHRyaWdnZXJzQm91bmRzOiBkaWZmLmFueVxuICB9LCB7XG4gICAgbmFtZTogJ3RleHQtdHJhbnNmb3JtJyxcbiAgICB0eXBlOiB0LnRleHRUcmFuc2Zvcm0sXG4gICAgdHJpZ2dlcnNCb3VuZHM6IGRpZmYuYW55XG4gIH0sIHtcbiAgICBuYW1lOiAndGV4dC13cmFwJyxcbiAgICB0eXBlOiB0LnRleHRXcmFwLFxuICAgIHRyaWdnZXJzQm91bmRzOiBkaWZmLmFueVxuICB9LCB7XG4gICAgbmFtZTogJ3RleHQtb3ZlcmZsb3ctd3JhcCcsXG4gICAgdHlwZTogdC50ZXh0T3ZlcmZsb3dXcmFwLFxuICAgIHRyaWdnZXJzQm91bmRzOiBkaWZmLmFueVxuICB9LCB7XG4gICAgbmFtZTogJ3RleHQtbWF4LXdpZHRoJyxcbiAgICB0eXBlOiB0LnNpemUsXG4gICAgdHJpZ2dlcnNCb3VuZHM6IGRpZmYuYW55XG4gIH0sIHtcbiAgICBuYW1lOiAndGV4dC1vdXRsaW5lLXdpZHRoJyxcbiAgICB0eXBlOiB0LnNpemUsXG4gICAgdHJpZ2dlcnNCb3VuZHM6IGRpZmYuYW55XG4gIH0sIHtcbiAgICBuYW1lOiAnbGluZS1oZWlnaHQnLFxuICAgIHR5cGU6IHQucG9zaXRpdmVOdW1iZXIsXG4gICAgdHJpZ2dlcnNCb3VuZHM6IGRpZmYuYW55XG4gIH1dO1xuICB2YXIgY29tbW9uTGFiZWwgPSBbe1xuICAgIG5hbWU6ICd0ZXh0LXZhbGlnbicsXG4gICAgdHlwZTogdC52YWxpZ24sXG4gICAgdHJpZ2dlcnNCb3VuZHM6IGRpZmYuYW55XG4gIH0sIHtcbiAgICBuYW1lOiAndGV4dC1oYWxpZ24nLFxuICAgIHR5cGU6IHQuaGFsaWduLFxuICAgIHRyaWdnZXJzQm91bmRzOiBkaWZmLmFueVxuICB9LCB7XG4gICAgbmFtZTogJ2NvbG9yJyxcbiAgICB0eXBlOiB0LmNvbG9yXG4gIH0sIHtcbiAgICBuYW1lOiAndGV4dC1vdXRsaW5lLWNvbG9yJyxcbiAgICB0eXBlOiB0LmNvbG9yXG4gIH0sIHtcbiAgICBuYW1lOiAndGV4dC1vdXRsaW5lLW9wYWNpdHknLFxuICAgIHR5cGU6IHQuemVyb09uZU51bWJlclxuICB9LCB7XG4gICAgbmFtZTogJ3RleHQtYmFja2dyb3VuZC1jb2xvcicsXG4gICAgdHlwZTogdC5jb2xvclxuICB9LCB7XG4gICAgbmFtZTogJ3RleHQtYmFja2dyb3VuZC1vcGFjaXR5JyxcbiAgICB0eXBlOiB0Lnplcm9PbmVOdW1iZXJcbiAgfSwge1xuICAgIG5hbWU6ICd0ZXh0LWJhY2tncm91bmQtcGFkZGluZycsXG4gICAgdHlwZTogdC5zaXplLFxuICAgIHRyaWdnZXJzQm91bmRzOiBkaWZmLmFueVxuICB9LCB7XG4gICAgbmFtZTogJ3RleHQtYm9yZGVyLW9wYWNpdHknLFxuICAgIHR5cGU6IHQuemVyb09uZU51bWJlclxuICB9LCB7XG4gICAgbmFtZTogJ3RleHQtYm9yZGVyLWNvbG9yJyxcbiAgICB0eXBlOiB0LmNvbG9yXG4gIH0sIHtcbiAgICBuYW1lOiAndGV4dC1ib3JkZXItd2lkdGgnLFxuICAgIHR5cGU6IHQuc2l6ZSxcbiAgICB0cmlnZ2Vyc0JvdW5kczogZGlmZi5hbnlcbiAgfSwge1xuICAgIG5hbWU6ICd0ZXh0LWJvcmRlci1zdHlsZScsXG4gICAgdHlwZTogdC5ib3JkZXJTdHlsZSxcbiAgICB0cmlnZ2Vyc0JvdW5kczogZGlmZi5hbnlcbiAgfSwge1xuICAgIG5hbWU6ICd0ZXh0LWJhY2tncm91bmQtc2hhcGUnLFxuICAgIHR5cGU6IHQudGV4dEJhY2tncm91bmRTaGFwZSxcbiAgICB0cmlnZ2Vyc0JvdW5kczogZGlmZi5hbnlcbiAgfSwge1xuICAgIG5hbWU6ICd0ZXh0LWp1c3RpZmljYXRpb24nLFxuICAgIHR5cGU6IHQuanVzdGlmaWNhdGlvblxuICB9XTtcbiAgdmFyIGJlaGF2aW9yID0gW3tcbiAgICBuYW1lOiAnZXZlbnRzJyxcbiAgICB0eXBlOiB0LmJvb2wsXG4gICAgdHJpZ2dlcnNaT3JkZXI6IGRpZmYuYW55XG4gIH0sIHtcbiAgICBuYW1lOiAndGV4dC1ldmVudHMnLFxuICAgIHR5cGU6IHQuYm9vbCxcbiAgICB0cmlnZ2Vyc1pPcmRlcjogZGlmZi5hbnlcbiAgfV07XG4gIHZhciB2aXNpYmlsaXR5ID0gW3tcbiAgICBuYW1lOiAnZGlzcGxheScsXG4gICAgdHlwZTogdC5kaXNwbGF5LFxuICAgIHRyaWdnZXJzWk9yZGVyOiBkaWZmLmFueSxcbiAgICB0cmlnZ2Vyc0JvdW5kczogZGlmZi5hbnksXG4gICAgdHJpZ2dlcnNCb3VuZHNPZkNvbm5lY3RlZEVkZ2VzOiBkaWZmLmFueSxcbiAgICB0cmlnZ2Vyc0JvdW5kc09mUGFyYWxsZWxFZGdlczogZnVuY3Rpb24gdHJpZ2dlcnNCb3VuZHNPZlBhcmFsbGVsRWRnZXMoZnJvbVZhbHVlLCB0b1ZhbHVlLCBlbGUpIHtcbiAgICAgIGlmIChmcm9tVmFsdWUgPT09IHRvVmFsdWUpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuXG4gICAgICAvLyBvbmx5IGlmIGVkZ2UgaXMgYnVuZGxlZCBiZXppZXIgKHNvIGFzIG5vdCB0byBhZmZlY3QgcGVyZm9ybWFuY2Ugb2Ygb3RoZXIgZWRnZXMpXG4gICAgICByZXR1cm4gZWxlLnBzdHlsZSgnY3VydmUtc3R5bGUnKS52YWx1ZSA9PT0gJ2Jlemllcic7XG4gICAgfVxuICB9LCB7XG4gICAgbmFtZTogJ3Zpc2liaWxpdHknLFxuICAgIHR5cGU6IHQudmlzaWJpbGl0eSxcbiAgICB0cmlnZ2Vyc1pPcmRlcjogZGlmZi5hbnlcbiAgfSwge1xuICAgIG5hbWU6ICdvcGFjaXR5JyxcbiAgICB0eXBlOiB0Lnplcm9PbmVOdW1iZXIsXG4gICAgdHJpZ2dlcnNaT3JkZXI6IGRpZmYuemVyb05vblplcm9cbiAgfSwge1xuICAgIG5hbWU6ICd0ZXh0LW9wYWNpdHknLFxuICAgIHR5cGU6IHQuemVyb09uZU51bWJlclxuICB9LCB7XG4gICAgbmFtZTogJ21pbi16b29tZWQtZm9udC1zaXplJyxcbiAgICB0eXBlOiB0LnNpemVcbiAgfSwge1xuICAgIG5hbWU6ICd6LWNvbXBvdW5kLWRlcHRoJyxcbiAgICB0eXBlOiB0LnpDb21wb3VuZERlcHRoLFxuICAgIHRyaWdnZXJzWk9yZGVyOiBkaWZmLmFueVxuICB9LCB7XG4gICAgbmFtZTogJ3otaW5kZXgtY29tcGFyZScsXG4gICAgdHlwZTogdC56SW5kZXhDb21wYXJlLFxuICAgIHRyaWdnZXJzWk9yZGVyOiBkaWZmLmFueVxuICB9LCB7XG4gICAgbmFtZTogJ3otaW5kZXgnLFxuICAgIHR5cGU6IHQubnVtYmVyLFxuICAgIHRyaWdnZXJzWk9yZGVyOiBkaWZmLmFueVxuICB9XTtcbiAgdmFyIG92ZXJsYXkgPSBbe1xuICAgIG5hbWU6ICdvdmVybGF5LXBhZGRpbmcnLFxuICAgIHR5cGU6IHQuc2l6ZSxcbiAgICB0cmlnZ2Vyc0JvdW5kczogZGlmZi5hbnlcbiAgfSwge1xuICAgIG5hbWU6ICdvdmVybGF5LWNvbG9yJyxcbiAgICB0eXBlOiB0LmNvbG9yXG4gIH0sIHtcbiAgICBuYW1lOiAnb3ZlcmxheS1vcGFjaXR5JyxcbiAgICB0eXBlOiB0Lnplcm9PbmVOdW1iZXIsXG4gICAgdHJpZ2dlcnNCb3VuZHM6IGRpZmYuemVyb05vblplcm9cbiAgfSwge1xuICAgIG5hbWU6ICdvdmVybGF5LXNoYXBlJyxcbiAgICB0eXBlOiB0Lm92ZXJsYXlTaGFwZSxcbiAgICB0cmlnZ2Vyc0JvdW5kczogZGlmZi5hbnlcbiAgfSwge1xuICAgIG5hbWU6ICdvdmVybGF5LWNvcm5lci1yYWRpdXMnLFxuICAgIHR5cGU6IHQuY29ybmVyUmFkaXVzXG4gIH1dO1xuICB2YXIgdW5kZXJsYXkgPSBbe1xuICAgIG5hbWU6ICd1bmRlcmxheS1wYWRkaW5nJyxcbiAgICB0eXBlOiB0LnNpemUsXG4gICAgdHJpZ2dlcnNCb3VuZHM6IGRpZmYuYW55XG4gIH0sIHtcbiAgICBuYW1lOiAndW5kZXJsYXktY29sb3InLFxuICAgIHR5cGU6IHQuY29sb3JcbiAgfSwge1xuICAgIG5hbWU6ICd1bmRlcmxheS1vcGFjaXR5JyxcbiAgICB0eXBlOiB0Lnplcm9PbmVOdW1iZXIsXG4gICAgdHJpZ2dlcnNCb3VuZHM6IGRpZmYuemVyb05vblplcm9cbiAgfSwge1xuICAgIG5hbWU6ICd1bmRlcmxheS1zaGFwZScsXG4gICAgdHlwZTogdC5vdmVybGF5U2hhcGUsXG4gICAgdHJpZ2dlcnNCb3VuZHM6IGRpZmYuYW55XG4gIH0sIHtcbiAgICBuYW1lOiAndW5kZXJsYXktY29ybmVyLXJhZGl1cycsXG4gICAgdHlwZTogdC5jb3JuZXJSYWRpdXNcbiAgfV07XG4gIHZhciB0cmFuc2l0aW9uID0gW3tcbiAgICBuYW1lOiAndHJhbnNpdGlvbi1wcm9wZXJ0eScsXG4gICAgdHlwZTogdC5wcm9wTGlzdFxuICB9LCB7XG4gICAgbmFtZTogJ3RyYW5zaXRpb24tZHVyYXRpb24nLFxuICAgIHR5cGU6IHQudGltZVxuICB9LCB7XG4gICAgbmFtZTogJ3RyYW5zaXRpb24tZGVsYXknLFxuICAgIHR5cGU6IHQudGltZVxuICB9LCB7XG4gICAgbmFtZTogJ3RyYW5zaXRpb24tdGltaW5nLWZ1bmN0aW9uJyxcbiAgICB0eXBlOiB0LmVhc2luZ1xuICB9XTtcbiAgdmFyIG5vZGVTaXplSGFzaE92ZXJyaWRlID0gZnVuY3Rpb24gbm9kZVNpemVIYXNoT3ZlcnJpZGUoZWxlLCBwYXJzZWRQcm9wKSB7XG4gICAgaWYgKHBhcnNlZFByb3AudmFsdWUgPT09ICdsYWJlbCcpIHtcbiAgICAgIHJldHVybiAtZWxlLnBvb2xJbmRleCgpOyAvLyBubyBoYXNoIGtleSBoaXRzIGlzIHVzaW5nIGxhYmVsIHNpemUgKGhpdHJhdGUgZm9yIHBlcmYgcHJvYmFibHkgbG93IGFueXdheSlcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIHBhcnNlZFByb3AucGZWYWx1ZTtcbiAgICB9XG4gIH07XG4gIHZhciBub2RlQm9keSA9IFt7XG4gICAgbmFtZTogJ2hlaWdodCcsXG4gICAgdHlwZTogdC5ub2RlU2l6ZSxcbiAgICB0cmlnZ2Vyc0JvdW5kczogZGlmZi5hbnksXG4gICAgaGFzaE92ZXJyaWRlOiBub2RlU2l6ZUhhc2hPdmVycmlkZVxuICB9LCB7XG4gICAgbmFtZTogJ3dpZHRoJyxcbiAgICB0eXBlOiB0Lm5vZGVTaXplLFxuICAgIHRyaWdnZXJzQm91bmRzOiBkaWZmLmFueSxcbiAgICBoYXNoT3ZlcnJpZGU6IG5vZGVTaXplSGFzaE92ZXJyaWRlXG4gIH0sIHtcbiAgICBuYW1lOiAnc2hhcGUnLFxuICAgIHR5cGU6IHQubm9kZVNoYXBlLFxuICAgIHRyaWdnZXJzQm91bmRzOiBkaWZmLmFueVxuICB9LCB7XG4gICAgbmFtZTogJ3NoYXBlLXBvbHlnb24tcG9pbnRzJyxcbiAgICB0eXBlOiB0LnBvbHlnb25Qb2ludExpc3QsXG4gICAgdHJpZ2dlcnNCb3VuZHM6IGRpZmYuYW55XG4gIH0sIHtcbiAgICBuYW1lOiAnY29ybmVyLXJhZGl1cycsXG4gICAgdHlwZTogdC5jb3JuZXJSYWRpdXNcbiAgfSwge1xuICAgIG5hbWU6ICdiYWNrZ3JvdW5kLWNvbG9yJyxcbiAgICB0eXBlOiB0LmNvbG9yXG4gIH0sIHtcbiAgICBuYW1lOiAnYmFja2dyb3VuZC1maWxsJyxcbiAgICB0eXBlOiB0LmZpbGxcbiAgfSwge1xuICAgIG5hbWU6ICdiYWNrZ3JvdW5kLW9wYWNpdHknLFxuICAgIHR5cGU6IHQuemVyb09uZU51bWJlclxuICB9LCB7XG4gICAgbmFtZTogJ2JhY2tncm91bmQtYmxhY2tlbicsXG4gICAgdHlwZTogdC5uT25lT25lTnVtYmVyXG4gIH0sIHtcbiAgICBuYW1lOiAnYmFja2dyb3VuZC1ncmFkaWVudC1zdG9wLWNvbG9ycycsXG4gICAgdHlwZTogdC5jb2xvcnNcbiAgfSwge1xuICAgIG5hbWU6ICdiYWNrZ3JvdW5kLWdyYWRpZW50LXN0b3AtcG9zaXRpb25zJyxcbiAgICB0eXBlOiB0LnBlcmNlbnRhZ2VzXG4gIH0sIHtcbiAgICBuYW1lOiAnYmFja2dyb3VuZC1ncmFkaWVudC1kaXJlY3Rpb24nLFxuICAgIHR5cGU6IHQuZ3JhZGllbnREaXJlY3Rpb25cbiAgfSwge1xuICAgIG5hbWU6ICdwYWRkaW5nJyxcbiAgICB0eXBlOiB0LnNpemVNYXliZVBlcmNlbnQsXG4gICAgdHJpZ2dlcnNCb3VuZHM6IGRpZmYuYW55XG4gIH0sIHtcbiAgICBuYW1lOiAncGFkZGluZy1yZWxhdGl2ZS10bycsXG4gICAgdHlwZTogdC5wYWRkaW5nUmVsYXRpdmVUbyxcbiAgICB0cmlnZ2Vyc0JvdW5kczogZGlmZi5hbnlcbiAgfSwge1xuICAgIG5hbWU6ICdib3VuZHMtZXhwYW5zaW9uJyxcbiAgICB0eXBlOiB0LmJvdW5kc0V4cGFuc2lvbixcbiAgICB0cmlnZ2Vyc0JvdW5kczogZGlmZi5hbnlcbiAgfV07XG4gIHZhciBub2RlQm9yZGVyID0gW3tcbiAgICBuYW1lOiAnYm9yZGVyLWNvbG9yJyxcbiAgICB0eXBlOiB0LmNvbG9yXG4gIH0sIHtcbiAgICBuYW1lOiAnYm9yZGVyLW9wYWNpdHknLFxuICAgIHR5cGU6IHQuemVyb09uZU51bWJlclxuICB9LCB7XG4gICAgbmFtZTogJ2JvcmRlci13aWR0aCcsXG4gICAgdHlwZTogdC5zaXplLFxuICAgIHRyaWdnZXJzQm91bmRzOiBkaWZmLmFueVxuICB9LCB7XG4gICAgbmFtZTogJ2JvcmRlci1zdHlsZScsXG4gICAgdHlwZTogdC5ib3JkZXJTdHlsZVxuICB9LCB7XG4gICAgbmFtZTogJ2JvcmRlci1jYXAnLFxuICAgIHR5cGU6IHQubGluZUNhcFxuICB9LCB7XG4gICAgbmFtZTogJ2JvcmRlci1qb2luJyxcbiAgICB0eXBlOiB0LmxpbmVKb2luXG4gIH0sIHtcbiAgICBuYW1lOiAnYm9yZGVyLWRhc2gtcGF0dGVybicsXG4gICAgdHlwZTogdC5udW1iZXJzXG4gIH0sIHtcbiAgICBuYW1lOiAnYm9yZGVyLWRhc2gtb2Zmc2V0JyxcbiAgICB0eXBlOiB0Lm51bWJlclxuICB9LCB7XG4gICAgbmFtZTogJ2JvcmRlci1wb3NpdGlvbicsXG4gICAgdHlwZTogdC5saW5lUG9zaXRpb25cbiAgfV07XG4gIHZhciBub2RlT3V0bGluZSA9IFt7XG4gICAgbmFtZTogJ291dGxpbmUtY29sb3InLFxuICAgIHR5cGU6IHQuY29sb3JcbiAgfSwge1xuICAgIG5hbWU6ICdvdXRsaW5lLW9wYWNpdHknLFxuICAgIHR5cGU6IHQuemVyb09uZU51bWJlclxuICB9LCB7XG4gICAgbmFtZTogJ291dGxpbmUtd2lkdGgnLFxuICAgIHR5cGU6IHQuc2l6ZSxcbiAgICB0cmlnZ2Vyc0JvdW5kczogZGlmZi5hbnlcbiAgfSwge1xuICAgIG5hbWU6ICdvdXRsaW5lLXN0eWxlJyxcbiAgICB0eXBlOiB0LmJvcmRlclN0eWxlXG4gIH0sIHtcbiAgICBuYW1lOiAnb3V0bGluZS1vZmZzZXQnLFxuICAgIHR5cGU6IHQuc2l6ZSxcbiAgICB0cmlnZ2Vyc0JvdW5kczogZGlmZi5hbnlcbiAgfV07XG4gIHZhciBiYWNrZ3JvdW5kSW1hZ2UgPSBbe1xuICAgIG5hbWU6ICdiYWNrZ3JvdW5kLWltYWdlJyxcbiAgICB0eXBlOiB0LnVybHNcbiAgfSwge1xuICAgIG5hbWU6ICdiYWNrZ3JvdW5kLWltYWdlLWNyb3Nzb3JpZ2luJyxcbiAgICB0eXBlOiB0LmJnQ3Jvc3NPcmlnaW5cbiAgfSwge1xuICAgIG5hbWU6ICdiYWNrZ3JvdW5kLWltYWdlLW9wYWNpdHknLFxuICAgIHR5cGU6IHQuemVyb09uZU51bWJlcnNcbiAgfSwge1xuICAgIG5hbWU6ICdiYWNrZ3JvdW5kLWltYWdlLWNvbnRhaW5tZW50JyxcbiAgICB0eXBlOiB0LmJnQ29udGFpbm1lbnRcbiAgfSwge1xuICAgIG5hbWU6ICdiYWNrZ3JvdW5kLWltYWdlLXNtb290aGluZycsXG4gICAgdHlwZTogdC5ib29sc1xuICB9LCB7XG4gICAgbmFtZTogJ2JhY2tncm91bmQtcG9zaXRpb24teCcsXG4gICAgdHlwZTogdC5iZ1Bvc1xuICB9LCB7XG4gICAgbmFtZTogJ2JhY2tncm91bmQtcG9zaXRpb24teScsXG4gICAgdHlwZTogdC5iZ1Bvc1xuICB9LCB7XG4gICAgbmFtZTogJ2JhY2tncm91bmQtd2lkdGgtcmVsYXRpdmUtdG8nLFxuICAgIHR5cGU6IHQuYmdSZWxhdGl2ZVRvXG4gIH0sIHtcbiAgICBuYW1lOiAnYmFja2dyb3VuZC1oZWlnaHQtcmVsYXRpdmUtdG8nLFxuICAgIHR5cGU6IHQuYmdSZWxhdGl2ZVRvXG4gIH0sIHtcbiAgICBuYW1lOiAnYmFja2dyb3VuZC1yZXBlYXQnLFxuICAgIHR5cGU6IHQuYmdSZXBlYXRcbiAgfSwge1xuICAgIG5hbWU6ICdiYWNrZ3JvdW5kLWZpdCcsXG4gICAgdHlwZTogdC5iZ0ZpdFxuICB9LCB7XG4gICAgbmFtZTogJ2JhY2tncm91bmQtY2xpcCcsXG4gICAgdHlwZTogdC5iZ0NsaXBcbiAgfSwge1xuICAgIG5hbWU6ICdiYWNrZ3JvdW5kLXdpZHRoJyxcbiAgICB0eXBlOiB0LmJnV0hcbiAgfSwge1xuICAgIG5hbWU6ICdiYWNrZ3JvdW5kLWhlaWdodCcsXG4gICAgdHlwZTogdC5iZ1dIXG4gIH0sIHtcbiAgICBuYW1lOiAnYmFja2dyb3VuZC1vZmZzZXQteCcsXG4gICAgdHlwZTogdC5iZ1Bvc1xuICB9LCB7XG4gICAgbmFtZTogJ2JhY2tncm91bmQtb2Zmc2V0LXknLFxuICAgIHR5cGU6IHQuYmdQb3NcbiAgfV07XG4gIHZhciBjb21wb3VuZCA9IFt7XG4gICAgbmFtZTogJ3Bvc2l0aW9uJyxcbiAgICB0eXBlOiB0LnBvc2l0aW9uLFxuICAgIHRyaWdnZXJzQm91bmRzOiBkaWZmLmFueVxuICB9LCB7XG4gICAgbmFtZTogJ2NvbXBvdW5kLXNpemluZy13cnQtbGFiZWxzJyxcbiAgICB0eXBlOiB0LmNvbXBvdW5kSW5jbHVkZUxhYmVscyxcbiAgICB0cmlnZ2Vyc0JvdW5kczogZGlmZi5hbnlcbiAgfSwge1xuICAgIG5hbWU6ICdtaW4td2lkdGgnLFxuICAgIHR5cGU6IHQuc2l6ZSxcbiAgICB0cmlnZ2Vyc0JvdW5kczogZGlmZi5hbnlcbiAgfSwge1xuICAgIG5hbWU6ICdtaW4td2lkdGgtYmlhcy1sZWZ0JyxcbiAgICB0eXBlOiB0LnNpemVNYXliZVBlcmNlbnQsXG4gICAgdHJpZ2dlcnNCb3VuZHM6IGRpZmYuYW55XG4gIH0sIHtcbiAgICBuYW1lOiAnbWluLXdpZHRoLWJpYXMtcmlnaHQnLFxuICAgIHR5cGU6IHQuc2l6ZU1heWJlUGVyY2VudCxcbiAgICB0cmlnZ2Vyc0JvdW5kczogZGlmZi5hbnlcbiAgfSwge1xuICAgIG5hbWU6ICdtaW4taGVpZ2h0JyxcbiAgICB0eXBlOiB0LnNpemUsXG4gICAgdHJpZ2dlcnNCb3VuZHM6IGRpZmYuYW55XG4gIH0sIHtcbiAgICBuYW1lOiAnbWluLWhlaWdodC1iaWFzLXRvcCcsXG4gICAgdHlwZTogdC5zaXplTWF5YmVQZXJjZW50LFxuICAgIHRyaWdnZXJzQm91bmRzOiBkaWZmLmFueVxuICB9LCB7XG4gICAgbmFtZTogJ21pbi1oZWlnaHQtYmlhcy1ib3R0b20nLFxuICAgIHR5cGU6IHQuc2l6ZU1heWJlUGVyY2VudCxcbiAgICB0cmlnZ2Vyc0JvdW5kczogZGlmZi5hbnlcbiAgfV07XG4gIHZhciBlZGdlTGluZSA9IFt7XG4gICAgbmFtZTogJ2xpbmUtc3R5bGUnLFxuICAgIHR5cGU6IHQubGluZVN0eWxlXG4gIH0sIHtcbiAgICBuYW1lOiAnbGluZS1jb2xvcicsXG4gICAgdHlwZTogdC5jb2xvclxuICB9LCB7XG4gICAgbmFtZTogJ2xpbmUtZmlsbCcsXG4gICAgdHlwZTogdC5maWxsXG4gIH0sIHtcbiAgICBuYW1lOiAnbGluZS1jYXAnLFxuICAgIHR5cGU6IHQubGluZUNhcFxuICB9LCB7XG4gICAgbmFtZTogJ2xpbmUtb3BhY2l0eScsXG4gICAgdHlwZTogdC56ZXJvT25lTnVtYmVyXG4gIH0sIHtcbiAgICBuYW1lOiAnbGluZS1kYXNoLXBhdHRlcm4nLFxuICAgIHR5cGU6IHQubnVtYmVyc1xuICB9LCB7XG4gICAgbmFtZTogJ2xpbmUtZGFzaC1vZmZzZXQnLFxuICAgIHR5cGU6IHQubnVtYmVyXG4gIH0sIHtcbiAgICBuYW1lOiAnbGluZS1vdXRsaW5lLXdpZHRoJyxcbiAgICB0eXBlOiB0LnNpemVcbiAgfSwge1xuICAgIG5hbWU6ICdsaW5lLW91dGxpbmUtY29sb3InLFxuICAgIHR5cGU6IHQuY29sb3JcbiAgfSwge1xuICAgIG5hbWU6ICdsaW5lLWdyYWRpZW50LXN0b3AtY29sb3JzJyxcbiAgICB0eXBlOiB0LmNvbG9yc1xuICB9LCB7XG4gICAgbmFtZTogJ2xpbmUtZ3JhZGllbnQtc3RvcC1wb3NpdGlvbnMnLFxuICAgIHR5cGU6IHQucGVyY2VudGFnZXNcbiAgfSwge1xuICAgIG5hbWU6ICdjdXJ2ZS1zdHlsZScsXG4gICAgdHlwZTogdC5jdXJ2ZVN0eWxlLFxuICAgIHRyaWdnZXJzQm91bmRzOiBkaWZmLmFueSxcbiAgICB0cmlnZ2Vyc0JvdW5kc09mUGFyYWxsZWxFZGdlczogZnVuY3Rpb24gdHJpZ2dlcnNCb3VuZHNPZlBhcmFsbGVsRWRnZXMoZnJvbVZhbHVlLCB0b1ZhbHVlKSB7XG4gICAgICBpZiAoZnJvbVZhbHVlID09PSB0b1ZhbHVlKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH0gLy8gbXVzdCBoYXZlIGRpZmZcblxuICAgICAgcmV0dXJuIGZyb21WYWx1ZSA9PT0gJ2JlemllcicgfHxcbiAgICAgIC8vIHJlbW92ZSBmcm9tIGJ1bmRsZVxuICAgICAgdG9WYWx1ZSA9PT0gJ2Jlemllcic7IC8vIGFkZCB0byBidW5kbGVcbiAgICB9XG4gIH0sIHtcbiAgICBuYW1lOiAnaGF5c3RhY2stcmFkaXVzJyxcbiAgICB0eXBlOiB0Lnplcm9PbmVOdW1iZXIsXG4gICAgdHJpZ2dlcnNCb3VuZHM6IGRpZmYuYW55XG4gIH0sIHtcbiAgICBuYW1lOiAnc291cmNlLWVuZHBvaW50JyxcbiAgICB0eXBlOiB0LmVkZ2VFbmRwb2ludCxcbiAgICB0cmlnZ2Vyc0JvdW5kczogZGlmZi5hbnlcbiAgfSwge1xuICAgIG5hbWU6ICd0YXJnZXQtZW5kcG9pbnQnLFxuICAgIHR5cGU6IHQuZWRnZUVuZHBvaW50LFxuICAgIHRyaWdnZXJzQm91bmRzOiBkaWZmLmFueVxuICB9LCB7XG4gICAgbmFtZTogJ2NvbnRyb2wtcG9pbnQtc3RlcC1zaXplJyxcbiAgICB0eXBlOiB0LnNpemUsXG4gICAgdHJpZ2dlcnNCb3VuZHM6IGRpZmYuYW55XG4gIH0sIHtcbiAgICBuYW1lOiAnY29udHJvbC1wb2ludC1kaXN0YW5jZXMnLFxuICAgIHR5cGU6IHQuYmlkaXJlY3Rpb25hbFNpemVzLFxuICAgIHRyaWdnZXJzQm91bmRzOiBkaWZmLmFueVxuICB9LCB7XG4gICAgbmFtZTogJ2NvbnRyb2wtcG9pbnQtd2VpZ2h0cycsXG4gICAgdHlwZTogdC5udW1iZXJzLFxuICAgIHRyaWdnZXJzQm91bmRzOiBkaWZmLmFueVxuICB9LCB7XG4gICAgbmFtZTogJ3NlZ21lbnQtZGlzdGFuY2VzJyxcbiAgICB0eXBlOiB0LmJpZGlyZWN0aW9uYWxTaXplcyxcbiAgICB0cmlnZ2Vyc0JvdW5kczogZGlmZi5hbnlcbiAgfSwge1xuICAgIG5hbWU6ICdzZWdtZW50LXdlaWdodHMnLFxuICAgIHR5cGU6IHQubnVtYmVycyxcbiAgICB0cmlnZ2Vyc0JvdW5kczogZGlmZi5hbnlcbiAgfSwge1xuICAgIG5hbWU6ICdzZWdtZW50LXJhZGlpJyxcbiAgICB0eXBlOiB0Lm51bWJlcnMsXG4gICAgdHJpZ2dlcnNCb3VuZHM6IGRpZmYuYW55XG4gIH0sIHtcbiAgICBuYW1lOiAncmFkaXVzLXR5cGUnLFxuICAgIHR5cGU6IHQucmFkaXVzVHlwZSxcbiAgICB0cmlnZ2Vyc0JvdW5kczogZGlmZi5hbnlcbiAgfSwge1xuICAgIG5hbWU6ICd0YXhpLXR1cm4nLFxuICAgIHR5cGU6IHQuYmlkaXJlY3Rpb25hbFNpemVNYXliZVBlcmNlbnQsXG4gICAgdHJpZ2dlcnNCb3VuZHM6IGRpZmYuYW55XG4gIH0sIHtcbiAgICBuYW1lOiAndGF4aS10dXJuLW1pbi1kaXN0YW5jZScsXG4gICAgdHlwZTogdC5zaXplLFxuICAgIHRyaWdnZXJzQm91bmRzOiBkaWZmLmFueVxuICB9LCB7XG4gICAgbmFtZTogJ3RheGktZGlyZWN0aW9uJyxcbiAgICB0eXBlOiB0LmF4aXNEaXJlY3Rpb24sXG4gICAgdHJpZ2dlcnNCb3VuZHM6IGRpZmYuYW55XG4gIH0sIHtcbiAgICBuYW1lOiAndGF4aS1yYWRpdXMnLFxuICAgIHR5cGU6IHQubnVtYmVyLFxuICAgIHRyaWdnZXJzQm91bmRzOiBkaWZmLmFueVxuICB9LCB7XG4gICAgbmFtZTogJ2VkZ2UtZGlzdGFuY2VzJyxcbiAgICB0eXBlOiB0LmVkZ2VEaXN0YW5jZXMsXG4gICAgdHJpZ2dlcnNCb3VuZHM6IGRpZmYuYW55XG4gIH0sIHtcbiAgICBuYW1lOiAnYXJyb3ctc2NhbGUnLFxuICAgIHR5cGU6IHQucG9zaXRpdmVOdW1iZXIsXG4gICAgdHJpZ2dlcnNCb3VuZHM6IGRpZmYuYW55XG4gIH0sIHtcbiAgICBuYW1lOiAnbG9vcC1kaXJlY3Rpb24nLFxuICAgIHR5cGU6IHQuYW5nbGUsXG4gICAgdHJpZ2dlcnNCb3VuZHM6IGRpZmYuYW55XG4gIH0sIHtcbiAgICBuYW1lOiAnbG9vcC1zd2VlcCcsXG4gICAgdHlwZTogdC5hbmdsZSxcbiAgICB0cmlnZ2Vyc0JvdW5kczogZGlmZi5hbnlcbiAgfSwge1xuICAgIG5hbWU6ICdzb3VyY2UtZGlzdGFuY2UtZnJvbS1ub2RlJyxcbiAgICB0eXBlOiB0LnNpemUsXG4gICAgdHJpZ2dlcnNCb3VuZHM6IGRpZmYuYW55XG4gIH0sIHtcbiAgICBuYW1lOiAndGFyZ2V0LWRpc3RhbmNlLWZyb20tbm9kZScsXG4gICAgdHlwZTogdC5zaXplLFxuICAgIHRyaWdnZXJzQm91bmRzOiBkaWZmLmFueVxuICB9XTtcbiAgdmFyIGdob3N0ID0gW3tcbiAgICBuYW1lOiAnZ2hvc3QnLFxuICAgIHR5cGU6IHQuYm9vbCxcbiAgICB0cmlnZ2Vyc0JvdW5kczogZGlmZi5hbnlcbiAgfSwge1xuICAgIG5hbWU6ICdnaG9zdC1vZmZzZXQteCcsXG4gICAgdHlwZTogdC5iaWRpcmVjdGlvbmFsU2l6ZSxcbiAgICB0cmlnZ2Vyc0JvdW5kczogZGlmZi5hbnlcbiAgfSwge1xuICAgIG5hbWU6ICdnaG9zdC1vZmZzZXQteScsXG4gICAgdHlwZTogdC5iaWRpcmVjdGlvbmFsU2l6ZSxcbiAgICB0cmlnZ2Vyc0JvdW5kczogZGlmZi5hbnlcbiAgfSwge1xuICAgIG5hbWU6ICdnaG9zdC1vcGFjaXR5JyxcbiAgICB0eXBlOiB0Lnplcm9PbmVOdW1iZXJcbiAgfV07XG4gIHZhciBjb3JlID0gW3tcbiAgICBuYW1lOiAnc2VsZWN0aW9uLWJveC1jb2xvcicsXG4gICAgdHlwZTogdC5jb2xvclxuICB9LCB7XG4gICAgbmFtZTogJ3NlbGVjdGlvbi1ib3gtb3BhY2l0eScsXG4gICAgdHlwZTogdC56ZXJvT25lTnVtYmVyXG4gIH0sIHtcbiAgICBuYW1lOiAnc2VsZWN0aW9uLWJveC1ib3JkZXItY29sb3InLFxuICAgIHR5cGU6IHQuY29sb3JcbiAgfSwge1xuICAgIG5hbWU6ICdzZWxlY3Rpb24tYm94LWJvcmRlci13aWR0aCcsXG4gICAgdHlwZTogdC5zaXplXG4gIH0sIHtcbiAgICBuYW1lOiAnYWN0aXZlLWJnLWNvbG9yJyxcbiAgICB0eXBlOiB0LmNvbG9yXG4gIH0sIHtcbiAgICBuYW1lOiAnYWN0aXZlLWJnLW9wYWNpdHknLFxuICAgIHR5cGU6IHQuemVyb09uZU51bWJlclxuICB9LCB7XG4gICAgbmFtZTogJ2FjdGl2ZS1iZy1zaXplJyxcbiAgICB0eXBlOiB0LnNpemVcbiAgfSwge1xuICAgIG5hbWU6ICdvdXRzaWRlLXRleHR1cmUtYmctY29sb3InLFxuICAgIHR5cGU6IHQuY29sb3JcbiAgfSwge1xuICAgIG5hbWU6ICdvdXRzaWRlLXRleHR1cmUtYmctb3BhY2l0eScsXG4gICAgdHlwZTogdC56ZXJvT25lTnVtYmVyXG4gIH1dO1xuXG4gIC8vIHBpZSBiYWNrZ3JvdW5kcyBmb3Igbm9kZXNcbiAgdmFyIHBpZSA9IFtdO1xuICBzdHlmbiQyLnBpZUJhY2tncm91bmROID0gMTY7IC8vIGJlY2F1c2UgdGhlIHBpZSBwcm9wZXJ0aWVzIGFyZSBudW1iZXJlZCwgZ2l2ZSBhY2Nlc3MgdG8gYSBjb25zdGFudCBOIChmb3IgcmVuZGVyZXIgdXNlKVxuICBwaWUucHVzaCh7XG4gICAgbmFtZTogJ3BpZS1zaXplJyxcbiAgICB0eXBlOiB0LnNpemVNYXliZVBlcmNlbnRcbiAgfSk7XG4gIGZvciAodmFyIGkgPSAxOyBpIDw9IHN0eWZuJDIucGllQmFja2dyb3VuZE47IGkrKykge1xuICAgIHBpZS5wdXNoKHtcbiAgICAgIG5hbWU6ICdwaWUtJyArIGkgKyAnLWJhY2tncm91bmQtY29sb3InLFxuICAgICAgdHlwZTogdC5jb2xvclxuICAgIH0pO1xuICAgIHBpZS5wdXNoKHtcbiAgICAgIG5hbWU6ICdwaWUtJyArIGkgKyAnLWJhY2tncm91bmQtc2l6ZScsXG4gICAgICB0eXBlOiB0LnBlcmNlbnRcbiAgICB9KTtcbiAgICBwaWUucHVzaCh7XG4gICAgICBuYW1lOiAncGllLScgKyBpICsgJy1iYWNrZ3JvdW5kLW9wYWNpdHknLFxuICAgICAgdHlwZTogdC56ZXJvT25lTnVtYmVyXG4gICAgfSk7XG4gIH1cblxuICAvLyBlZGdlIGFycm93c1xuICB2YXIgZWRnZUFycm93ID0gW107XG4gIHZhciBhcnJvd1ByZWZpeGVzID0gc3R5Zm4kMi5hcnJvd1ByZWZpeGVzID0gWydzb3VyY2UnLCAnbWlkLXNvdXJjZScsICd0YXJnZXQnLCAnbWlkLXRhcmdldCddO1xuICBbe1xuICAgIG5hbWU6ICdhcnJvdy1zaGFwZScsXG4gICAgdHlwZTogdC5hcnJvd1NoYXBlLFxuICAgIHRyaWdnZXJzQm91bmRzOiBkaWZmLmFueVxuICB9LCB7XG4gICAgbmFtZTogJ2Fycm93LWNvbG9yJyxcbiAgICB0eXBlOiB0LmNvbG9yXG4gIH0sIHtcbiAgICBuYW1lOiAnYXJyb3ctZmlsbCcsXG4gICAgdHlwZTogdC5hcnJvd0ZpbGxcbiAgfSwge1xuICAgIG5hbWU6ICdhcnJvdy13aWR0aCcsXG4gICAgdHlwZTogdC5hcnJvd1dpZHRoXG4gIH1dLmZvckVhY2goZnVuY3Rpb24gKHByb3ApIHtcbiAgICBhcnJvd1ByZWZpeGVzLmZvckVhY2goZnVuY3Rpb24gKHByZWZpeCkge1xuICAgICAgdmFyIG5hbWUgPSBwcmVmaXggKyAnLScgKyBwcm9wLm5hbWU7XG4gICAgICB2YXIgdHlwZSA9IHByb3AudHlwZSxcbiAgICAgICAgdHJpZ2dlcnNCb3VuZHMgPSBwcm9wLnRyaWdnZXJzQm91bmRzO1xuICAgICAgZWRnZUFycm93LnB1c2goe1xuICAgICAgICBuYW1lOiBuYW1lLFxuICAgICAgICB0eXBlOiB0eXBlLFxuICAgICAgICB0cmlnZ2Vyc0JvdW5kczogdHJpZ2dlcnNCb3VuZHNcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9LCB7fSk7XG4gIHZhciBwcm9wcyA9IHN0eWZuJDIucHJvcGVydGllcyA9IFtdLmNvbmNhdChiZWhhdmlvciwgdHJhbnNpdGlvbiwgdmlzaWJpbGl0eSwgb3ZlcmxheSwgdW5kZXJsYXksIGdob3N0LCBjb21tb25MYWJlbCwgbGFiZWxEaW1lbnNpb25zLCBtYWluTGFiZWwsIHNvdXJjZUxhYmVsLCB0YXJnZXRMYWJlbCwgbm9kZUJvZHksIG5vZGVCb3JkZXIsIG5vZGVPdXRsaW5lLCBiYWNrZ3JvdW5kSW1hZ2UsIHBpZSwgY29tcG91bmQsIGVkZ2VMaW5lLCBlZGdlQXJyb3csIGNvcmUpO1xuICB2YXIgcHJvcEdyb3VwcyA9IHN0eWZuJDIucHJvcGVydHlHcm91cHMgPSB7XG4gICAgLy8gY29tbW9uIHRvIGFsbCBlbGVzXG4gICAgYmVoYXZpb3I6IGJlaGF2aW9yLFxuICAgIHRyYW5zaXRpb246IHRyYW5zaXRpb24sXG4gICAgdmlzaWJpbGl0eTogdmlzaWJpbGl0eSxcbiAgICBvdmVybGF5OiBvdmVybGF5LFxuICAgIHVuZGVybGF5OiB1bmRlcmxheSxcbiAgICBnaG9zdDogZ2hvc3QsXG4gICAgLy8gbGFiZWxzXG4gICAgY29tbW9uTGFiZWw6IGNvbW1vbkxhYmVsLFxuICAgIGxhYmVsRGltZW5zaW9uczogbGFiZWxEaW1lbnNpb25zLFxuICAgIG1haW5MYWJlbDogbWFpbkxhYmVsLFxuICAgIHNvdXJjZUxhYmVsOiBzb3VyY2VMYWJlbCxcbiAgICB0YXJnZXRMYWJlbDogdGFyZ2V0TGFiZWwsXG4gICAgLy8gbm9kZSBwcm9wc1xuICAgIG5vZGVCb2R5OiBub2RlQm9keSxcbiAgICBub2RlQm9yZGVyOiBub2RlQm9yZGVyLFxuICAgIG5vZGVPdXRsaW5lOiBub2RlT3V0bGluZSxcbiAgICBiYWNrZ3JvdW5kSW1hZ2U6IGJhY2tncm91bmRJbWFnZSxcbiAgICBwaWU6IHBpZSxcbiAgICBjb21wb3VuZDogY29tcG91bmQsXG4gICAgLy8gZWRnZSBwcm9wc1xuICAgIGVkZ2VMaW5lOiBlZGdlTGluZSxcbiAgICBlZGdlQXJyb3c6IGVkZ2VBcnJvdyxcbiAgICBjb3JlOiBjb3JlXG4gIH07XG4gIHZhciBwcm9wR3JvdXBOYW1lcyA9IHN0eWZuJDIucHJvcGVydHlHcm91cE5hbWVzID0ge307XG4gIHZhciBwcm9wR3JvdXBLZXlzID0gc3R5Zm4kMi5wcm9wZXJ0eUdyb3VwS2V5cyA9IE9iamVjdC5rZXlzKHByb3BHcm91cHMpO1xuICBwcm9wR3JvdXBLZXlzLmZvckVhY2goZnVuY3Rpb24gKGtleSkge1xuICAgIHByb3BHcm91cE5hbWVzW2tleV0gPSBwcm9wR3JvdXBzW2tleV0ubWFwKGZ1bmN0aW9uIChwcm9wKSB7XG4gICAgICByZXR1cm4gcHJvcC5uYW1lO1xuICAgIH0pO1xuICAgIHByb3BHcm91cHNba2V5XS5mb3JFYWNoKGZ1bmN0aW9uIChwcm9wKSB7XG4gICAgICByZXR1cm4gcHJvcC5ncm91cEtleSA9IGtleTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgLy8gZGVmaW5lIGFsaWFzZXNcbiAgdmFyIGFsaWFzZXMgPSBzdHlmbiQyLmFsaWFzZXMgPSBbe1xuICAgIG5hbWU6ICdjb250ZW50JyxcbiAgICBwb2ludHNUbzogJ2xhYmVsJ1xuICB9LCB7XG4gICAgbmFtZTogJ2NvbnRyb2wtcG9pbnQtZGlzdGFuY2UnLFxuICAgIHBvaW50c1RvOiAnY29udHJvbC1wb2ludC1kaXN0YW5jZXMnXG4gIH0sIHtcbiAgICBuYW1lOiAnY29udHJvbC1wb2ludC13ZWlnaHQnLFxuICAgIHBvaW50c1RvOiAnY29udHJvbC1wb2ludC13ZWlnaHRzJ1xuICB9LCB7XG4gICAgbmFtZTogJ3NlZ21lbnQtZGlzdGFuY2UnLFxuICAgIHBvaW50c1RvOiAnc2VnbWVudC1kaXN0YW5jZXMnXG4gIH0sIHtcbiAgICBuYW1lOiAnc2VnbWVudC13ZWlnaHQnLFxuICAgIHBvaW50c1RvOiAnc2VnbWVudC13ZWlnaHRzJ1xuICB9LCB7XG4gICAgbmFtZTogJ3NlZ21lbnQtcmFkaXVzJyxcbiAgICBwb2ludHNUbzogJ3NlZ21lbnQtcmFkaWknXG4gIH0sIHtcbiAgICBuYW1lOiAnZWRnZS10ZXh0LXJvdGF0aW9uJyxcbiAgICBwb2ludHNUbzogJ3RleHQtcm90YXRpb24nXG4gIH0sIHtcbiAgICBuYW1lOiAncGFkZGluZy1sZWZ0JyxcbiAgICBwb2ludHNUbzogJ3BhZGRpbmcnXG4gIH0sIHtcbiAgICBuYW1lOiAncGFkZGluZy1yaWdodCcsXG4gICAgcG9pbnRzVG86ICdwYWRkaW5nJ1xuICB9LCB7XG4gICAgbmFtZTogJ3BhZGRpbmctdG9wJyxcbiAgICBwb2ludHNUbzogJ3BhZGRpbmcnXG4gIH0sIHtcbiAgICBuYW1lOiAncGFkZGluZy1ib3R0b20nLFxuICAgIHBvaW50c1RvOiAncGFkZGluZydcbiAgfV07XG5cbiAgLy8gbGlzdCBvZiBwcm9wZXJ0eSBuYW1lc1xuICBzdHlmbiQyLnByb3BlcnR5TmFtZXMgPSBwcm9wcy5tYXAoZnVuY3Rpb24gKHApIHtcbiAgICByZXR1cm4gcC5uYW1lO1xuICB9KTtcblxuICAvLyBhbGxvdyBhY2Nlc3Mgb2YgcHJvcGVydGllcyBieSBuYW1lICggZS5nLiBzdHlsZS5wcm9wZXJ0aWVzLmhlaWdodCApXG4gIGZvciAodmFyIF9pID0gMDsgX2kgPCBwcm9wcy5sZW5ndGg7IF9pKyspIHtcbiAgICB2YXIgcHJvcCA9IHByb3BzW19pXTtcbiAgICBwcm9wc1twcm9wLm5hbWVdID0gcHJvcDsgLy8gYWxsb3cgbG9va3VwIGJ5IG5hbWVcbiAgfVxuXG4gIC8vIG1hcCBhbGlhc2VzXG4gIGZvciAodmFyIF9pMiA9IDA7IF9pMiA8IGFsaWFzZXMubGVuZ3RoOyBfaTIrKykge1xuICAgIHZhciBhbGlhcyA9IGFsaWFzZXNbX2kyXTtcbiAgICB2YXIgcG9pbnRzVG9Qcm9wID0gcHJvcHNbYWxpYXMucG9pbnRzVG9dO1xuICAgIHZhciBhbGlhc1Byb3AgPSB7XG4gICAgICBuYW1lOiBhbGlhcy5uYW1lLFxuICAgICAgYWxpYXM6IHRydWUsXG4gICAgICBwb2ludHNUbzogcG9pbnRzVG9Qcm9wXG4gICAgfTtcblxuICAgIC8vIGFkZCBhbGlhcyBwcm9wIGZvciBwYXJzaW5nXG4gICAgcHJvcHMucHVzaChhbGlhc1Byb3ApO1xuICAgIHByb3BzW2FsaWFzLm5hbWVdID0gYWxpYXNQcm9wOyAvLyBhbGxvdyBsb29rdXAgYnkgbmFtZVxuICB9XG59KSgpO1xuc3R5Zm4kMi5nZXREZWZhdWx0UHJvcGVydHkgPSBmdW5jdGlvbiAobmFtZSkge1xuICByZXR1cm4gdGhpcy5nZXREZWZhdWx0UHJvcGVydGllcygpW25hbWVdO1xufTtcbnN0eWZuJDIuZ2V0RGVmYXVsdFByb3BlcnRpZXMgPSBmdW5jdGlvbiAoKSB7XG4gIHZhciBfcCA9IHRoaXMuX3ByaXZhdGU7XG4gIGlmIChfcC5kZWZhdWx0UHJvcGVydGllcyAhPSBudWxsKSB7XG4gICAgcmV0dXJuIF9wLmRlZmF1bHRQcm9wZXJ0aWVzO1xuICB9XG4gIHZhciByYXdQcm9wcyA9IGV4dGVuZCh7XG4gICAgLy8gY29yZSBwcm9wc1xuICAgICdzZWxlY3Rpb24tYm94LWNvbG9yJzogJyNkZGQnLFxuICAgICdzZWxlY3Rpb24tYm94LW9wYWNpdHknOiAwLjY1LFxuICAgICdzZWxlY3Rpb24tYm94LWJvcmRlci1jb2xvcic6ICcjYWFhJyxcbiAgICAnc2VsZWN0aW9uLWJveC1ib3JkZXItd2lkdGgnOiAxLFxuICAgICdhY3RpdmUtYmctY29sb3InOiAnYmxhY2snLFxuICAgICdhY3RpdmUtYmctb3BhY2l0eSc6IDAuMTUsXG4gICAgJ2FjdGl2ZS1iZy1zaXplJzogMzAsXG4gICAgJ291dHNpZGUtdGV4dHVyZS1iZy1jb2xvcic6ICcjMDAwJyxcbiAgICAnb3V0c2lkZS10ZXh0dXJlLWJnLW9wYWNpdHknOiAwLjEyNSxcbiAgICAvLyBjb21tb24gbm9kZS9lZGdlIHByb3BzXG4gICAgJ2V2ZW50cyc6ICd5ZXMnLFxuICAgICd0ZXh0LWV2ZW50cyc6ICdubycsXG4gICAgJ3RleHQtdmFsaWduJzogJ3RvcCcsXG4gICAgJ3RleHQtaGFsaWduJzogJ2NlbnRlcicsXG4gICAgJ3RleHQtanVzdGlmaWNhdGlvbic6ICdhdXRvJyxcbiAgICAnbGluZS1oZWlnaHQnOiAxLFxuICAgICdjb2xvcic6ICcjMDAwJyxcbiAgICAndGV4dC1vdXRsaW5lLWNvbG9yJzogJyMwMDAnLFxuICAgICd0ZXh0LW91dGxpbmUtd2lkdGgnOiAwLFxuICAgICd0ZXh0LW91dGxpbmUtb3BhY2l0eSc6IDEsXG4gICAgJ3RleHQtb3BhY2l0eSc6IDEsXG4gICAgJ3RleHQtZGVjb3JhdGlvbic6ICdub25lJyxcbiAgICAndGV4dC10cmFuc2Zvcm0nOiAnbm9uZScsXG4gICAgJ3RleHQtd3JhcCc6ICdub25lJyxcbiAgICAndGV4dC1vdmVyZmxvdy13cmFwJzogJ3doaXRlc3BhY2UnLFxuICAgICd0ZXh0LW1heC13aWR0aCc6IDk5OTksXG4gICAgJ3RleHQtYmFja2dyb3VuZC1jb2xvcic6ICcjMDAwJyxcbiAgICAndGV4dC1iYWNrZ3JvdW5kLW9wYWNpdHknOiAwLFxuICAgICd0ZXh0LWJhY2tncm91bmQtc2hhcGUnOiAncmVjdGFuZ2xlJyxcbiAgICAndGV4dC1iYWNrZ3JvdW5kLXBhZGRpbmcnOiAwLFxuICAgICd0ZXh0LWJvcmRlci1vcGFjaXR5JzogMCxcbiAgICAndGV4dC1ib3JkZXItd2lkdGgnOiAwLFxuICAgICd0ZXh0LWJvcmRlci1zdHlsZSc6ICdzb2xpZCcsXG4gICAgJ3RleHQtYm9yZGVyLWNvbG9yJzogJyMwMDAnLFxuICAgICdmb250LWZhbWlseSc6ICdIZWx2ZXRpY2EgTmV1ZSwgSGVsdmV0aWNhLCBzYW5zLXNlcmlmJyxcbiAgICAnZm9udC1zdHlsZSc6ICdub3JtYWwnLFxuICAgICdmb250LXdlaWdodCc6ICdub3JtYWwnLFxuICAgICdmb250LXNpemUnOiAxNixcbiAgICAnbWluLXpvb21lZC1mb250LXNpemUnOiAwLFxuICAgICd0ZXh0LXJvdGF0aW9uJzogJ25vbmUnLFxuICAgICdzb3VyY2UtdGV4dC1yb3RhdGlvbic6ICdub25lJyxcbiAgICAndGFyZ2V0LXRleHQtcm90YXRpb24nOiAnbm9uZScsXG4gICAgJ3Zpc2liaWxpdHknOiAndmlzaWJsZScsXG4gICAgJ2Rpc3BsYXknOiAnZWxlbWVudCcsXG4gICAgJ29wYWNpdHknOiAxLFxuICAgICd6LWNvbXBvdW5kLWRlcHRoJzogJ2F1dG8nLFxuICAgICd6LWluZGV4LWNvbXBhcmUnOiAnYXV0bycsXG4gICAgJ3otaW5kZXgnOiAwLFxuICAgICdsYWJlbCc6ICcnLFxuICAgICd0ZXh0LW1hcmdpbi14JzogMCxcbiAgICAndGV4dC1tYXJnaW4teSc6IDAsXG4gICAgJ3NvdXJjZS1sYWJlbCc6ICcnLFxuICAgICdzb3VyY2UtdGV4dC1vZmZzZXQnOiAwLFxuICAgICdzb3VyY2UtdGV4dC1tYXJnaW4teCc6IDAsXG4gICAgJ3NvdXJjZS10ZXh0LW1hcmdpbi15JzogMCxcbiAgICAndGFyZ2V0LWxhYmVsJzogJycsXG4gICAgJ3RhcmdldC10ZXh0LW9mZnNldCc6IDAsXG4gICAgJ3RhcmdldC10ZXh0LW1hcmdpbi14JzogMCxcbiAgICAndGFyZ2V0LXRleHQtbWFyZ2luLXknOiAwLFxuICAgICdvdmVybGF5LW9wYWNpdHknOiAwLFxuICAgICdvdmVybGF5LWNvbG9yJzogJyMwMDAnLFxuICAgICdvdmVybGF5LXBhZGRpbmcnOiAxMCxcbiAgICAnb3ZlcmxheS1zaGFwZSc6ICdyb3VuZC1yZWN0YW5nbGUnLFxuICAgICdvdmVybGF5LWNvcm5lci1yYWRpdXMnOiAnYXV0bycsXG4gICAgJ3VuZGVybGF5LW9wYWNpdHknOiAwLFxuICAgICd1bmRlcmxheS1jb2xvcic6ICcjMDAwJyxcbiAgICAndW5kZXJsYXktcGFkZGluZyc6IDEwLFxuICAgICd1bmRlcmxheS1zaGFwZSc6ICdyb3VuZC1yZWN0YW5nbGUnLFxuICAgICd1bmRlcmxheS1jb3JuZXItcmFkaXVzJzogJ2F1dG8nLFxuICAgICd0cmFuc2l0aW9uLXByb3BlcnR5JzogJ25vbmUnLFxuICAgICd0cmFuc2l0aW9uLWR1cmF0aW9uJzogMCxcbiAgICAndHJhbnNpdGlvbi1kZWxheSc6IDAsXG4gICAgJ3RyYW5zaXRpb24tdGltaW5nLWZ1bmN0aW9uJzogJ2xpbmVhcicsXG4gICAgLy8gbm9kZSBwcm9wc1xuICAgICdiYWNrZ3JvdW5kLWJsYWNrZW4nOiAwLFxuICAgICdiYWNrZ3JvdW5kLWNvbG9yJzogJyM5OTknLFxuICAgICdiYWNrZ3JvdW5kLWZpbGwnOiAnc29saWQnLFxuICAgICdiYWNrZ3JvdW5kLW9wYWNpdHknOiAxLFxuICAgICdiYWNrZ3JvdW5kLWltYWdlJzogJ25vbmUnLFxuICAgICdiYWNrZ3JvdW5kLWltYWdlLWNyb3Nzb3JpZ2luJzogJ2Fub255bW91cycsXG4gICAgJ2JhY2tncm91bmQtaW1hZ2Utb3BhY2l0eSc6IDEsXG4gICAgJ2JhY2tncm91bmQtaW1hZ2UtY29udGFpbm1lbnQnOiAnaW5zaWRlJyxcbiAgICAnYmFja2dyb3VuZC1pbWFnZS1zbW9vdGhpbmcnOiAneWVzJyxcbiAgICAnYmFja2dyb3VuZC1wb3NpdGlvbi14JzogJzUwJScsXG4gICAgJ2JhY2tncm91bmQtcG9zaXRpb24teSc6ICc1MCUnLFxuICAgICdiYWNrZ3JvdW5kLW9mZnNldC14JzogMCxcbiAgICAnYmFja2dyb3VuZC1vZmZzZXQteSc6IDAsXG4gICAgJ2JhY2tncm91bmQtd2lkdGgtcmVsYXRpdmUtdG8nOiAnaW5jbHVkZS1wYWRkaW5nJyxcbiAgICAnYmFja2dyb3VuZC1oZWlnaHQtcmVsYXRpdmUtdG8nOiAnaW5jbHVkZS1wYWRkaW5nJyxcbiAgICAnYmFja2dyb3VuZC1yZXBlYXQnOiAnbm8tcmVwZWF0JyxcbiAgICAnYmFja2dyb3VuZC1maXQnOiAnbm9uZScsXG4gICAgJ2JhY2tncm91bmQtY2xpcCc6ICdub2RlJyxcbiAgICAnYmFja2dyb3VuZC13aWR0aCc6ICdhdXRvJyxcbiAgICAnYmFja2dyb3VuZC1oZWlnaHQnOiAnYXV0bycsXG4gICAgJ2JvcmRlci1jb2xvcic6ICcjMDAwJyxcbiAgICAnYm9yZGVyLW9wYWNpdHknOiAxLFxuICAgICdib3JkZXItd2lkdGgnOiAwLFxuICAgICdib3JkZXItc3R5bGUnOiAnc29saWQnLFxuICAgICdib3JkZXItZGFzaC1wYXR0ZXJuJzogWzQsIDJdLFxuICAgICdib3JkZXItZGFzaC1vZmZzZXQnOiAwLFxuICAgICdib3JkZXItY2FwJzogJ2J1dHQnLFxuICAgICdib3JkZXItam9pbic6ICdtaXRlcicsXG4gICAgJ2JvcmRlci1wb3NpdGlvbic6ICdjZW50ZXInLFxuICAgICdvdXRsaW5lLWNvbG9yJzogJyM5OTknLFxuICAgICdvdXRsaW5lLW9wYWNpdHknOiAxLFxuICAgICdvdXRsaW5lLXdpZHRoJzogMCxcbiAgICAnb3V0bGluZS1vZmZzZXQnOiAwLFxuICAgICdvdXRsaW5lLXN0eWxlJzogJ3NvbGlkJyxcbiAgICAnaGVpZ2h0JzogMzAsXG4gICAgJ3dpZHRoJzogMzAsXG4gICAgJ3NoYXBlJzogJ2VsbGlwc2UnLFxuICAgICdzaGFwZS1wb2x5Z29uLXBvaW50cyc6ICctMSwgLTEsICAgMSwgLTEsICAgMSwgMSwgICAtMSwgMScsXG4gICAgJ2Nvcm5lci1yYWRpdXMnOiAnYXV0bycsXG4gICAgJ2JvdW5kcy1leHBhbnNpb24nOiAwLFxuICAgIC8vIG5vZGUgZ3JhZGllbnRcbiAgICAnYmFja2dyb3VuZC1ncmFkaWVudC1kaXJlY3Rpb24nOiAndG8tYm90dG9tJyxcbiAgICAnYmFja2dyb3VuZC1ncmFkaWVudC1zdG9wLWNvbG9ycyc6ICcjOTk5JyxcbiAgICAnYmFja2dyb3VuZC1ncmFkaWVudC1zdG9wLXBvc2l0aW9ucyc6ICcwJScsXG4gICAgLy8gZ2hvc3QgcHJvcHNcbiAgICAnZ2hvc3QnOiAnbm8nLFxuICAgICdnaG9zdC1vZmZzZXQteSc6IDAsXG4gICAgJ2dob3N0LW9mZnNldC14JzogMCxcbiAgICAnZ2hvc3Qtb3BhY2l0eSc6IDAsXG4gICAgLy8gY29tcG91bmQgcHJvcHNcbiAgICAncGFkZGluZyc6IDAsXG4gICAgJ3BhZGRpbmctcmVsYXRpdmUtdG8nOiAnd2lkdGgnLFxuICAgICdwb3NpdGlvbic6ICdvcmlnaW4nLFxuICAgICdjb21wb3VuZC1zaXppbmctd3J0LWxhYmVscyc6ICdpbmNsdWRlJyxcbiAgICAnbWluLXdpZHRoJzogMCxcbiAgICAnbWluLXdpZHRoLWJpYXMtbGVmdCc6IDAsXG4gICAgJ21pbi13aWR0aC1iaWFzLXJpZ2h0JzogMCxcbiAgICAnbWluLWhlaWdodCc6IDAsXG4gICAgJ21pbi1oZWlnaHQtYmlhcy10b3AnOiAwLFxuICAgICdtaW4taGVpZ2h0LWJpYXMtYm90dG9tJzogMFxuICB9LCB7XG4gICAgLy8gbm9kZSBwaWUgYmdcbiAgICAncGllLXNpemUnOiAnMTAwJSdcbiAgfSwgW3tcbiAgICBuYW1lOiAncGllLXt7aX19LWJhY2tncm91bmQtY29sb3InLFxuICAgIHZhbHVlOiAnYmxhY2snXG4gIH0sIHtcbiAgICBuYW1lOiAncGllLXt7aX19LWJhY2tncm91bmQtc2l6ZScsXG4gICAgdmFsdWU6ICcwJSdcbiAgfSwge1xuICAgIG5hbWU6ICdwaWUte3tpfX0tYmFja2dyb3VuZC1vcGFjaXR5JyxcbiAgICB2YWx1ZTogMVxuICB9XS5yZWR1Y2UoZnVuY3Rpb24gKGNzcywgcHJvcCkge1xuICAgIGZvciAodmFyIGkgPSAxOyBpIDw9IHN0eWZuJDIucGllQmFja2dyb3VuZE47IGkrKykge1xuICAgICAgdmFyIG5hbWUgPSBwcm9wLm5hbWUucmVwbGFjZSgne3tpfX0nLCBpKTtcbiAgICAgIHZhciB2YWwgPSBwcm9wLnZhbHVlO1xuICAgICAgY3NzW25hbWVdID0gdmFsO1xuICAgIH1cbiAgICByZXR1cm4gY3NzO1xuICB9LCB7fSksIHtcbiAgICAvLyBlZGdlIHByb3BzXG4gICAgJ2xpbmUtc3R5bGUnOiAnc29saWQnLFxuICAgICdsaW5lLWNvbG9yJzogJyM5OTknLFxuICAgICdsaW5lLWZpbGwnOiAnc29saWQnLFxuICAgICdsaW5lLWNhcCc6ICdidXR0JyxcbiAgICAnbGluZS1vcGFjaXR5JzogMSxcbiAgICAnbGluZS1vdXRsaW5lLXdpZHRoJzogMCxcbiAgICAnbGluZS1vdXRsaW5lLWNvbG9yJzogJyMwMDAnLFxuICAgICdsaW5lLWdyYWRpZW50LXN0b3AtY29sb3JzJzogJyM5OTknLFxuICAgICdsaW5lLWdyYWRpZW50LXN0b3AtcG9zaXRpb25zJzogJzAlJyxcbiAgICAnY29udHJvbC1wb2ludC1zdGVwLXNpemUnOiA0MCxcbiAgICAnY29udHJvbC1wb2ludC13ZWlnaHRzJzogMC41LFxuICAgICdzZWdtZW50LXdlaWdodHMnOiAwLjUsXG4gICAgJ3NlZ21lbnQtZGlzdGFuY2VzJzogMjAsXG4gICAgJ3NlZ21lbnQtcmFkaWknOiAxNSxcbiAgICAncmFkaXVzLXR5cGUnOiAnYXJjLXJhZGl1cycsXG4gICAgJ3RheGktdHVybic6ICc1MCUnLFxuICAgICd0YXhpLXJhZGl1cyc6IDE1LFxuICAgICd0YXhpLXR1cm4tbWluLWRpc3RhbmNlJzogMTAsXG4gICAgJ3RheGktZGlyZWN0aW9uJzogJ2F1dG8nLFxuICAgICdlZGdlLWRpc3RhbmNlcyc6ICdpbnRlcnNlY3Rpb24nLFxuICAgICdjdXJ2ZS1zdHlsZSc6ICdoYXlzdGFjaycsXG4gICAgJ2hheXN0YWNrLXJhZGl1cyc6IDAsXG4gICAgJ2Fycm93LXNjYWxlJzogMSxcbiAgICAnbG9vcC1kaXJlY3Rpb24nOiAnLTQ1ZGVnJyxcbiAgICAnbG9vcC1zd2VlcCc6ICctOTBkZWcnLFxuICAgICdzb3VyY2UtZGlzdGFuY2UtZnJvbS1ub2RlJzogMCxcbiAgICAndGFyZ2V0LWRpc3RhbmNlLWZyb20tbm9kZSc6IDAsXG4gICAgJ3NvdXJjZS1lbmRwb2ludCc6ICdvdXRzaWRlLXRvLW5vZGUnLFxuICAgICd0YXJnZXQtZW5kcG9pbnQnOiAnb3V0c2lkZS10by1ub2RlJyxcbiAgICAnbGluZS1kYXNoLXBhdHRlcm4nOiBbNiwgM10sXG4gICAgJ2xpbmUtZGFzaC1vZmZzZXQnOiAwXG4gIH0sIFt7XG4gICAgbmFtZTogJ2Fycm93LXNoYXBlJyxcbiAgICB2YWx1ZTogJ25vbmUnXG4gIH0sIHtcbiAgICBuYW1lOiAnYXJyb3ctY29sb3InLFxuICAgIHZhbHVlOiAnIzk5OSdcbiAgfSwge1xuICAgIG5hbWU6ICdhcnJvdy1maWxsJyxcbiAgICB2YWx1ZTogJ2ZpbGxlZCdcbiAgfSwge1xuICAgIG5hbWU6ICdhcnJvdy13aWR0aCcsXG4gICAgdmFsdWU6IDFcbiAgfV0ucmVkdWNlKGZ1bmN0aW9uIChjc3MsIHByb3ApIHtcbiAgICBzdHlmbiQyLmFycm93UHJlZml4ZXMuZm9yRWFjaChmdW5jdGlvbiAocHJlZml4KSB7XG4gICAgICB2YXIgbmFtZSA9IHByZWZpeCArICctJyArIHByb3AubmFtZTtcbiAgICAgIHZhciB2YWwgPSBwcm9wLnZhbHVlO1xuICAgICAgY3NzW25hbWVdID0gdmFsO1xuICAgIH0pO1xuICAgIHJldHVybiBjc3M7XG4gIH0sIHt9KSk7XG4gIHZhciBwYXJzZWRQcm9wcyA9IHt9O1xuICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMucHJvcGVydGllcy5sZW5ndGg7IGkrKykge1xuICAgIHZhciBwcm9wID0gdGhpcy5wcm9wZXJ0aWVzW2ldO1xuICAgIGlmIChwcm9wLnBvaW50c1RvKSB7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG4gICAgdmFyIG5hbWUgPSBwcm9wLm5hbWU7XG4gICAgdmFyIHZhbCA9IHJhd1Byb3BzW25hbWVdO1xuICAgIHZhciBwYXJzZWRQcm9wID0gdGhpcy5wYXJzZShuYW1lLCB2YWwpO1xuICAgIHBhcnNlZFByb3BzW25hbWVdID0gcGFyc2VkUHJvcDtcbiAgfVxuICBfcC5kZWZhdWx0UHJvcGVydGllcyA9IHBhcnNlZFByb3BzO1xuICByZXR1cm4gX3AuZGVmYXVsdFByb3BlcnRpZXM7XG59O1xuc3R5Zm4kMi5hZGREZWZhdWx0U3R5bGVzaGVldCA9IGZ1bmN0aW9uICgpIHtcbiAgdGhpcy5zZWxlY3RvcignOnBhcmVudCcpLmNzcyh7XG4gICAgJ3NoYXBlJzogJ3JlY3RhbmdsZScsXG4gICAgJ3BhZGRpbmcnOiAxMCxcbiAgICAnYmFja2dyb3VuZC1jb2xvcic6ICcjZWVlJyxcbiAgICAnYm9yZGVyLWNvbG9yJzogJyNjY2MnLFxuICAgICdib3JkZXItd2lkdGgnOiAxXG4gIH0pLnNlbGVjdG9yKCdlZGdlJykuY3NzKHtcbiAgICAnd2lkdGgnOiAzXG4gIH0pLnNlbGVjdG9yKCc6bG9vcCcpLmNzcyh7XG4gICAgJ2N1cnZlLXN0eWxlJzogJ2JlemllcidcbiAgfSkuc2VsZWN0b3IoJ2VkZ2U6Y29tcG91bmQnKS5jc3Moe1xuICAgICdjdXJ2ZS1zdHlsZSc6ICdiZXppZXInLFxuICAgICdzb3VyY2UtZW5kcG9pbnQnOiAnb3V0c2lkZS10by1saW5lJyxcbiAgICAndGFyZ2V0LWVuZHBvaW50JzogJ291dHNpZGUtdG8tbGluZSdcbiAgfSkuc2VsZWN0b3IoJzpzZWxlY3RlZCcpLmNzcyh7XG4gICAgJ2JhY2tncm91bmQtY29sb3InOiAnIzAxNjlEOScsXG4gICAgJ2xpbmUtY29sb3InOiAnIzAxNjlEOScsXG4gICAgJ3NvdXJjZS1hcnJvdy1jb2xvcic6ICcjMDE2OUQ5JyxcbiAgICAndGFyZ2V0LWFycm93LWNvbG9yJzogJyMwMTY5RDknLFxuICAgICdtaWQtc291cmNlLWFycm93LWNvbG9yJzogJyMwMTY5RDknLFxuICAgICdtaWQtdGFyZ2V0LWFycm93LWNvbG9yJzogJyMwMTY5RDknXG4gIH0pLnNlbGVjdG9yKCc6cGFyZW50OnNlbGVjdGVkJykuY3NzKHtcbiAgICAnYmFja2dyb3VuZC1jb2xvcic6ICcjQ0NFMUY5JyxcbiAgICAnYm9yZGVyLWNvbG9yJzogJyNhZWM4ZTUnXG4gIH0pLnNlbGVjdG9yKCc6YWN0aXZlJykuY3NzKHtcbiAgICAnb3ZlcmxheS1jb2xvcic6ICdibGFjaycsXG4gICAgJ292ZXJsYXktcGFkZGluZyc6IDEwLFxuICAgICdvdmVybGF5LW9wYWNpdHknOiAwLjI1XG4gIH0pO1xuICB0aGlzLmRlZmF1bHRMZW5ndGggPSB0aGlzLmxlbmd0aDtcbn07XG5cbnZhciBzdHlmbiQxID0ge307XG5cbi8vIGEgY2FjaGluZyBsYXllciBmb3IgcHJvcGVydHkgcGFyc2luZ1xuc3R5Zm4kMS5wYXJzZSA9IGZ1bmN0aW9uIChuYW1lLCB2YWx1ZSwgcHJvcElzQnlwYXNzLCBwcm9wSXNGbGF0KSB7XG4gIHZhciBzZWxmID0gdGhpcztcblxuICAvLyBmdW5jdGlvbiB2YWx1ZXMgY2FuJ3QgYmUgY2FjaGVkIGluIGFsbCBjYXNlcywgYW5kIHRoZXJlIGlzbid0IG11Y2ggYmVuZWZpdCBvZiBjYWNoaW5nIHRoZW0gYW55d2F5XG4gIGlmIChmbiQ2KHZhbHVlKSkge1xuICAgIHJldHVybiBzZWxmLnBhcnNlSW1wbFdhcm4obmFtZSwgdmFsdWUsIHByb3BJc0J5cGFzcywgcHJvcElzRmxhdCk7XG4gIH1cbiAgdmFyIGZsYXRLZXkgPSBwcm9wSXNGbGF0ID09PSAnbWFwcGluZycgfHwgcHJvcElzRmxhdCA9PT0gdHJ1ZSB8fCBwcm9wSXNGbGF0ID09PSBmYWxzZSB8fCBwcm9wSXNGbGF0ID09IG51bGwgPyAnZG9udGNhcmUnIDogcHJvcElzRmxhdDtcbiAgdmFyIGJ5cGFzc0tleSA9IHByb3BJc0J5cGFzcyA/ICd0JyA6ICdmJztcbiAgdmFyIHZhbHVlS2V5ID0gJycgKyB2YWx1ZTtcbiAgdmFyIGFyZ0hhc2ggPSBoYXNoU3RyaW5ncyhuYW1lLCB2YWx1ZUtleSwgYnlwYXNzS2V5LCBmbGF0S2V5KTtcbiAgdmFyIHByb3BDYWNoZSA9IHNlbGYucHJvcENhY2hlID0gc2VsZi5wcm9wQ2FjaGUgfHwgW107XG4gIHZhciByZXQ7XG4gIGlmICghKHJldCA9IHByb3BDYWNoZVthcmdIYXNoXSkpIHtcbiAgICByZXQgPSBwcm9wQ2FjaGVbYXJnSGFzaF0gPSBzZWxmLnBhcnNlSW1wbFdhcm4obmFtZSwgdmFsdWUsIHByb3BJc0J5cGFzcywgcHJvcElzRmxhdCk7XG4gIH1cblxuICAvLyAtIGJ5cGFzc2VzIGNhbid0IGJlIHNoYXJlZCBiL2MgdGhlIHZhbHVlIGNhbiBiZSBjaGFuZ2VkIGJ5IGFuaW1hdGlvbnMgb3Igb3RoZXJ3aXNlIG92ZXJyaWRkZW5cbiAgLy8gLSBtYXBwaW5ncyBjYW4ndCBiZSBzaGFyZWQgYi9jIG1hcHBpbmdzIGFyZSBwZXItZWxlbWVudFxuICBpZiAocHJvcElzQnlwYXNzIHx8IHByb3BJc0ZsYXQgPT09ICdtYXBwaW5nJykge1xuICAgIC8vIG5lZWQgYSBjb3B5IHNpbmNlIHByb3BzIGFyZSBtdXRhdGVkIGxhdGVyIGluIHRoZWlyIGxpZmVjeWNsZXNcbiAgICByZXQgPSBjb3B5KHJldCk7XG4gICAgaWYgKHJldCkge1xuICAgICAgcmV0LnZhbHVlID0gY29weShyZXQudmFsdWUpOyAvLyBiZWNhdXNlIGl0IGNvdWxkIGJlIGFuIGFycmF5LCBlLmcuIGNvbG91clxuICAgIH1cbiAgfVxuICByZXR1cm4gcmV0O1xufTtcbnN0eWZuJDEucGFyc2VJbXBsV2FybiA9IGZ1bmN0aW9uIChuYW1lLCB2YWx1ZSwgcHJvcElzQnlwYXNzLCBwcm9wSXNGbGF0KSB7XG4gIHZhciBwcm9wID0gdGhpcy5wYXJzZUltcGwobmFtZSwgdmFsdWUsIHByb3BJc0J5cGFzcywgcHJvcElzRmxhdCk7XG4gIGlmICghcHJvcCAmJiB2YWx1ZSAhPSBudWxsKSB7XG4gICAgd2FybihcIlRoZSBzdHlsZSBwcm9wZXJ0eSBgXCIuY29uY2F0KG5hbWUsIFwiOiBcIikuY29uY2F0KHZhbHVlLCBcImAgaXMgaW52YWxpZFwiKSk7XG4gIH1cbiAgaWYgKHByb3AgJiYgKHByb3AubmFtZSA9PT0gJ3dpZHRoJyB8fCBwcm9wLm5hbWUgPT09ICdoZWlnaHQnKSAmJiB2YWx1ZSA9PT0gJ2xhYmVsJykge1xuICAgIHdhcm4oJ1RoZSBzdHlsZSB2YWx1ZSBvZiBgbGFiZWxgIGlzIGRlcHJlY2F0ZWQgZm9yIGAnICsgcHJvcC5uYW1lICsgJ2AnKTtcbiAgfVxuICByZXR1cm4gcHJvcDtcbn07XG5cbi8vIHBhcnNlIGEgcHJvcGVydHk7IHJldHVybiBudWxsIG9uIGludmFsaWQ7IHJldHVybiBwYXJzZWQgcHJvcGVydHkgb3RoZXJ3aXNlXG4vLyBmaWVsZHMgOlxuLy8gLSBuYW1lIDogdGhlIG5hbWUgb2YgdGhlIHByb3BlcnR5XG4vLyAtIHZhbHVlIDogdGhlIHBhcnNlZCwgbmF0aXZlLXR5cGVkIHZhbHVlIG9mIHRoZSBwcm9wZXJ0eVxuLy8gLSBzdHJWYWx1ZSA6IGEgc3RyaW5nIHZhbHVlIHRoYXQgcmVwcmVzZW50cyB0aGUgcHJvcGVydHkgdmFsdWUgaW4gdmFsaWQgY3NzXG4vLyAtIGJ5cGFzcyA6IHRydWUgaWZmIHRoZSBwcm9wZXJ0eSBpcyBhIGJ5cGFzcyBwcm9wZXJ0eVxuc3R5Zm4kMS5wYXJzZUltcGwgPSBmdW5jdGlvbiAobmFtZSwgdmFsdWUsIHByb3BJc0J5cGFzcywgcHJvcElzRmxhdCkge1xuICB2YXIgc2VsZiA9IHRoaXM7XG4gIG5hbWUgPSBjYW1lbDJkYXNoKG5hbWUpOyAvLyBtYWtlIHN1cmUgdGhlIHByb3BlcnR5IG5hbWUgaXMgaW4gZGFzaCBmb3JtIChlLmcuICdwcm9wZXJ0eS1uYW1lJyBub3QgJ3Byb3BlcnR5TmFtZScpXG5cbiAgdmFyIHByb3BlcnR5ID0gc2VsZi5wcm9wZXJ0aWVzW25hbWVdO1xuICB2YXIgcGFzc2VkVmFsdWUgPSB2YWx1ZTtcbiAgdmFyIHR5cGVzID0gc2VsZi50eXBlcztcbiAgaWYgKCFwcm9wZXJ0eSkge1xuICAgIHJldHVybiBudWxsO1xuICB9IC8vIHJldHVybiBudWxsIG9uIHByb3BlcnR5IG9mIHVua25vd24gbmFtZVxuICBpZiAodmFsdWUgPT09IHVuZGVmaW5lZCkge1xuICAgIHJldHVybiBudWxsO1xuICB9IC8vIGNhbid0IGFzc2lnbiB1bmRlZmluZWRcblxuICAvLyB0aGUgcHJvcGVydHkgbWF5IGJlIGFuIGFsaWFzXG4gIGlmIChwcm9wZXJ0eS5hbGlhcykge1xuICAgIHByb3BlcnR5ID0gcHJvcGVydHkucG9pbnRzVG87XG4gICAgbmFtZSA9IHByb3BlcnR5Lm5hbWU7XG4gIH1cbiAgdmFyIHZhbHVlSXNTdHJpbmcgPSBzdHJpbmcodmFsdWUpO1xuICBpZiAodmFsdWVJc1N0cmluZykge1xuICAgIC8vIHRyaW0gdGhlIHZhbHVlIHRvIG1ha2UgcGFyc2luZyBlYXNpZXJcbiAgICB2YWx1ZSA9IHZhbHVlLnRyaW0oKTtcbiAgfVxuICB2YXIgdHlwZSA9IHByb3BlcnR5LnR5cGU7XG4gIGlmICghdHlwZSkge1xuICAgIHJldHVybiBudWxsO1xuICB9IC8vIG5vIHR5cGUsIG5vIGx1Y2tcblxuICAvLyBjaGVjayBpZiBieXBhc3MgaXMgbnVsbCBvciBlbXB0eSBzdHJpbmcgKGkuZS4gaW5kaWNhdGlvbiB0byBkZWxldGUgYnlwYXNzIHByb3BlcnR5KVxuICBpZiAocHJvcElzQnlwYXNzICYmICh2YWx1ZSA9PT0gJycgfHwgdmFsdWUgPT09IG51bGwpKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIG5hbWU6IG5hbWUsXG4gICAgICB2YWx1ZTogdmFsdWUsXG4gICAgICBieXBhc3M6IHRydWUsXG4gICAgICBkZWxldGVCeXBhc3M6IHRydWVcbiAgICB9O1xuICB9XG5cbiAgLy8gY2hlY2sgaWYgdmFsdWUgaXMgYSBmdW5jdGlvbiB1c2VkIGFzIGEgbWFwcGVyXG4gIGlmIChmbiQ2KHZhbHVlKSkge1xuICAgIHJldHVybiB7XG4gICAgICBuYW1lOiBuYW1lLFxuICAgICAgdmFsdWU6IHZhbHVlLFxuICAgICAgc3RyVmFsdWU6ICdmbicsXG4gICAgICBtYXBwZWQ6IHR5cGVzLmZuLFxuICAgICAgYnlwYXNzOiBwcm9wSXNCeXBhc3NcbiAgICB9O1xuICB9XG5cbiAgLy8gY2hlY2sgaWYgdmFsdWUgaXMgbWFwcGVkXG4gIHZhciBkYXRhLCBtYXBEYXRhO1xuICBpZiAoIXZhbHVlSXNTdHJpbmcgfHwgcHJvcElzRmxhdCB8fCB2YWx1ZS5sZW5ndGggPCA3IHx8IHZhbHVlWzFdICE9PSAnYScpIDsgZWxzZSBpZiAodmFsdWUubGVuZ3RoID49IDcgJiYgdmFsdWVbMF0gPT09ICdkJyAmJiAoZGF0YSA9IG5ldyBSZWdFeHAodHlwZXMuZGF0YS5yZWdleCkuZXhlYyh2YWx1ZSkpKSB7XG4gICAgaWYgKHByb3BJc0J5cGFzcykge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH0gLy8gbWFwcGVycyBub3QgYWxsb3dlZCBpbiBieXBhc3NcblxuICAgIHZhciBtYXBwZWQgPSB0eXBlcy5kYXRhO1xuICAgIHJldHVybiB7XG4gICAgICBuYW1lOiBuYW1lLFxuICAgICAgdmFsdWU6IGRhdGEsXG4gICAgICBzdHJWYWx1ZTogJycgKyB2YWx1ZSxcbiAgICAgIG1hcHBlZDogbWFwcGVkLFxuICAgICAgZmllbGQ6IGRhdGFbMV0sXG4gICAgICBieXBhc3M6IHByb3BJc0J5cGFzc1xuICAgIH07XG4gIH0gZWxzZSBpZiAodmFsdWUubGVuZ3RoID49IDEwICYmIHZhbHVlWzBdID09PSAnbScgJiYgKG1hcERhdGEgPSBuZXcgUmVnRXhwKHR5cGVzLm1hcERhdGEucmVnZXgpLmV4ZWModmFsdWUpKSkge1xuICAgIGlmIChwcm9wSXNCeXBhc3MpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9IC8vIG1hcHBlcnMgbm90IGFsbG93ZWQgaW4gYnlwYXNzXG4gICAgaWYgKHR5cGUubXVsdGlwbGUpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9IC8vIGltcG9zc2libGUgdG8gbWFwIHRvIG51bVxuXG4gICAgdmFyIF9tYXBwZWQgPSB0eXBlcy5tYXBEYXRhO1xuXG4gICAgLy8gd2UgY2FuIG1hcCBvbmx5IGlmIHRoZSB0eXBlIGlzIGEgY29sb3VyIG9yIGEgbnVtYmVyXG4gICAgaWYgKCEodHlwZS5jb2xvciB8fCB0eXBlLm51bWJlcikpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgdmFyIHZhbHVlTWluID0gdGhpcy5wYXJzZShuYW1lLCBtYXBEYXRhWzRdKTsgLy8gcGFyc2UgdG8gdmFsaWRhdGVcbiAgICBpZiAoIXZhbHVlTWluIHx8IHZhbHVlTWluLm1hcHBlZCkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH0gLy8gY2FuJ3QgYmUgaW52YWxpZCBvciBtYXBwZWRcblxuICAgIHZhciB2YWx1ZU1heCA9IHRoaXMucGFyc2UobmFtZSwgbWFwRGF0YVs1XSk7IC8vIHBhcnNlIHRvIHZhbGlkYXRlXG4gICAgaWYgKCF2YWx1ZU1heCB8fCB2YWx1ZU1heC5tYXBwZWQpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9IC8vIGNhbid0IGJlIGludmFsaWQgb3IgbWFwcGVkXG5cbiAgICAvLyBjaGVjayBpZiB2YWx1ZU1pbiBhbmQgdmFsdWVNYXggYXJlIHRoZSBzYW1lXG4gICAgaWYgKHZhbHVlTWluLnBmVmFsdWUgPT09IHZhbHVlTWF4LnBmVmFsdWUgfHwgdmFsdWVNaW4uc3RyVmFsdWUgPT09IHZhbHVlTWF4LnN0clZhbHVlKSB7XG4gICAgICB3YXJuKCdgJyArIG5hbWUgKyAnOiAnICsgdmFsdWUgKyAnYCBpcyBub3QgYSB2YWxpZCBtYXBwZXIgYmVjYXVzZSB0aGUgb3V0cHV0IHJhbmdlIGlzIHplcm87IGNvbnZlcnRpbmcgdG8gYCcgKyBuYW1lICsgJzogJyArIHZhbHVlTWluLnN0clZhbHVlICsgJ2AnKTtcbiAgICAgIHJldHVybiB0aGlzLnBhcnNlKG5hbWUsIHZhbHVlTWluLnN0clZhbHVlKTsgLy8gY2FuJ3QgbWFrZSBtdWNoIG9mIGEgbWFwcGVyIHdpdGhvdXQgYSByYW5nZVxuICAgIH0gZWxzZSBpZiAodHlwZS5jb2xvcikge1xuICAgICAgdmFyIGMxID0gdmFsdWVNaW4udmFsdWU7XG4gICAgICB2YXIgYzIgPSB2YWx1ZU1heC52YWx1ZTtcbiAgICAgIHZhciBzYW1lID0gYzFbMF0gPT09IGMyWzBdIC8vIHJlZFxuICAgICAgJiYgYzFbMV0gPT09IGMyWzFdIC8vIGdyZWVuXG4gICAgICAmJiBjMVsyXSA9PT0gYzJbMl0gLy8gYmx1ZVxuICAgICAgJiYgKFxuICAgICAgLy8gb3B0aW9uYWwgYWxwaGFcbiAgICAgIGMxWzNdID09PSBjMlszXSAvLyBzYW1lIGFscGhhIG91dHJpZ2h0XG4gICAgICB8fCAoYzFbM10gPT0gbnVsbCB8fCBjMVszXSA9PT0gMSAvLyBmdWxsIG9wYWNpdHkgZm9yIGNvbG91ciAxP1xuICAgICAgKSAmJiAoYzJbM10gPT0gbnVsbCB8fCBjMlszXSA9PT0gMSkgLy8gZnVsbCBvcGFjaXR5IGZvciBjb2xvdXIgMj9cbiAgICAgICk7XG4gICAgICBpZiAoc2FtZSkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9IC8vIGNhbid0IG1ha2UgYSBtYXBwZXIgd2l0aG91dCBhIHJhbmdlXG4gICAgfVxuICAgIHJldHVybiB7XG4gICAgICBuYW1lOiBuYW1lLFxuICAgICAgdmFsdWU6IG1hcERhdGEsXG4gICAgICBzdHJWYWx1ZTogJycgKyB2YWx1ZSxcbiAgICAgIG1hcHBlZDogX21hcHBlZCxcbiAgICAgIGZpZWxkOiBtYXBEYXRhWzFdLFxuICAgICAgZmllbGRNaW46IHBhcnNlRmxvYXQobWFwRGF0YVsyXSksXG4gICAgICAvLyBtaW4gJiBtYXggYXJlIG51bWVyaWNcbiAgICAgIGZpZWxkTWF4OiBwYXJzZUZsb2F0KG1hcERhdGFbM10pLFxuICAgICAgdmFsdWVNaW46IHZhbHVlTWluLnZhbHVlLFxuICAgICAgdmFsdWVNYXg6IHZhbHVlTWF4LnZhbHVlLFxuICAgICAgYnlwYXNzOiBwcm9wSXNCeXBhc3NcbiAgICB9O1xuICB9XG4gIGlmICh0eXBlLm11bHRpcGxlICYmIHByb3BJc0ZsYXQgIT09ICdtdWx0aXBsZScpIHtcbiAgICB2YXIgdmFscztcbiAgICBpZiAodmFsdWVJc1N0cmluZykge1xuICAgICAgdmFscyA9IHZhbHVlLnNwbGl0KC9cXHMrLyk7XG4gICAgfSBlbHNlIGlmIChhcnJheSh2YWx1ZSkpIHtcbiAgICAgIHZhbHMgPSB2YWx1ZTtcbiAgICB9IGVsc2Uge1xuICAgICAgdmFscyA9IFt2YWx1ZV07XG4gICAgfVxuICAgIGlmICh0eXBlLmV2ZW5NdWx0aXBsZSAmJiB2YWxzLmxlbmd0aCAlIDIgIT09IDApIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICB2YXIgdmFsQXJyID0gW107XG4gICAgdmFyIHVuaXRzQXJyID0gW107XG4gICAgdmFyIHBmVmFsQXJyID0gW107XG4gICAgdmFyIHN0clZhbCA9ICcnO1xuICAgIHZhciBoYXNFbnVtID0gZmFsc2U7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB2YWxzLmxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIgcCA9IHNlbGYucGFyc2UobmFtZSwgdmFsc1tpXSwgcHJvcElzQnlwYXNzLCAnbXVsdGlwbGUnKTtcbiAgICAgIGhhc0VudW0gPSBoYXNFbnVtIHx8IHN0cmluZyhwLnZhbHVlKTtcbiAgICAgIHZhbEFyci5wdXNoKHAudmFsdWUpO1xuICAgICAgcGZWYWxBcnIucHVzaChwLnBmVmFsdWUgIT0gbnVsbCA/IHAucGZWYWx1ZSA6IHAudmFsdWUpO1xuICAgICAgdW5pdHNBcnIucHVzaChwLnVuaXRzKTtcbiAgICAgIHN0clZhbCArPSAoaSA+IDAgPyAnICcgOiAnJykgKyBwLnN0clZhbHVlO1xuICAgIH1cbiAgICBpZiAodHlwZS52YWxpZGF0ZSAmJiAhdHlwZS52YWxpZGF0ZSh2YWxBcnIsIHVuaXRzQXJyKSkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIGlmICh0eXBlLnNpbmdsZUVudW0gJiYgaGFzRW51bSkge1xuICAgICAgaWYgKHZhbEFyci5sZW5ndGggPT09IDEgJiYgc3RyaW5nKHZhbEFyclswXSkpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBuYW1lOiBuYW1lLFxuICAgICAgICAgIHZhbHVlOiB2YWxBcnJbMF0sXG4gICAgICAgICAgc3RyVmFsdWU6IHZhbEFyclswXSxcbiAgICAgICAgICBieXBhc3M6IHByb3BJc0J5cGFzc1xuICAgICAgICB9O1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiB7XG4gICAgICBuYW1lOiBuYW1lLFxuICAgICAgdmFsdWU6IHZhbEFycixcbiAgICAgIHBmVmFsdWU6IHBmVmFsQXJyLFxuICAgICAgc3RyVmFsdWU6IHN0clZhbCxcbiAgICAgIGJ5cGFzczogcHJvcElzQnlwYXNzLFxuICAgICAgdW5pdHM6IHVuaXRzQXJyXG4gICAgfTtcbiAgfVxuXG4gIC8vIHNldmVyYWwgdHlwZXMgYWxzbyBhbGxvdyBlbnVtc1xuICB2YXIgY2hlY2tFbnVtcyA9IGZ1bmN0aW9uIGNoZWNrRW51bXMoKSB7XG4gICAgZm9yICh2YXIgX2kgPSAwOyBfaSA8IHR5cGUuZW51bXMubGVuZ3RoOyBfaSsrKSB7XG4gICAgICB2YXIgZW4gPSB0eXBlLmVudW1zW19pXTtcbiAgICAgIGlmIChlbiA9PT0gdmFsdWUpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBuYW1lOiBuYW1lLFxuICAgICAgICAgIHZhbHVlOiB2YWx1ZSxcbiAgICAgICAgICBzdHJWYWx1ZTogJycgKyB2YWx1ZSxcbiAgICAgICAgICBieXBhc3M6IHByb3BJc0J5cGFzc1xuICAgICAgICB9O1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gbnVsbDtcbiAgfTtcblxuICAvLyBjaGVjayB0aGUgdHlwZSBhbmQgcmV0dXJuIHRoZSBhcHByb3ByaWF0ZSBvYmplY3RcbiAgaWYgKHR5cGUubnVtYmVyKSB7XG4gICAgdmFyIHVuaXRzO1xuICAgIHZhciBpbXBsaWNpdFVuaXRzID0gJ3B4JzsgLy8gbm90IHNldCA9PiBweFxuXG4gICAgaWYgKHR5cGUudW5pdHMpIHtcbiAgICAgIC8vIHVzZSBzcGVjaWZpZWQgdW5pdHMgaWYgc2V0XG4gICAgICB1bml0cyA9IHR5cGUudW5pdHM7XG4gICAgfVxuICAgIGlmICh0eXBlLmltcGxpY2l0VW5pdHMpIHtcbiAgICAgIGltcGxpY2l0VW5pdHMgPSB0eXBlLmltcGxpY2l0VW5pdHM7XG4gICAgfVxuICAgIGlmICghdHlwZS51bml0bGVzcykge1xuICAgICAgaWYgKHZhbHVlSXNTdHJpbmcpIHtcbiAgICAgICAgdmFyIHVuaXRzUmVnZXggPSAncHh8ZW0nICsgKHR5cGUuYWxsb3dQZXJjZW50ID8gJ3xcXFxcJScgOiAnJyk7XG4gICAgICAgIGlmICh1bml0cykge1xuICAgICAgICAgIHVuaXRzUmVnZXggPSB1bml0cztcbiAgICAgICAgfSAvLyBvbmx5IGFsbG93IGV4cGxpY2l0IHVuaXRzIGlmIHNvIHNldFxuICAgICAgICB2YXIgbWF0Y2ggPSB2YWx1ZS5tYXRjaCgnXignICsgbnVtYmVyICsgJykoJyArIHVuaXRzUmVnZXggKyAnKT8nICsgJyQnKTtcbiAgICAgICAgaWYgKG1hdGNoKSB7XG4gICAgICAgICAgdmFsdWUgPSBtYXRjaFsxXTtcbiAgICAgICAgICB1bml0cyA9IG1hdGNoWzJdIHx8IGltcGxpY2l0VW5pdHM7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAoIXVuaXRzIHx8IHR5cGUuaW1wbGljaXRVbml0cykge1xuICAgICAgICB1bml0cyA9IGltcGxpY2l0VW5pdHM7IC8vIGltcGxpY2l0bHkgcHggaWYgdW5zcGVjaWZpZWRcbiAgICAgIH1cbiAgICB9XG4gICAgdmFsdWUgPSBwYXJzZUZsb2F0KHZhbHVlKTtcblxuICAgIC8vIGlmIG5vdCBhIG51bWJlciBhbmQgZW51bXMgbm90IGFsbG93ZWQsIHRoZW4gdGhlIHZhbHVlIGlzIGludmFsaWRcbiAgICBpZiAoaXNOYU4odmFsdWUpICYmIHR5cGUuZW51bXMgPT09IHVuZGVmaW5lZCkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgLy8gY2hlY2sgaWYgdGhpcyBudW1iZXIgdHlwZSBhbHNvIGFjY2VwdHMgc3BlY2lhbCBrZXl3b3JkcyBpbiBwbGFjZSBvZiBudW1iZXJzXG4gICAgLy8gKGkuZS4gYGxlZnRgLCBgYXV0b2AsIGV0YylcbiAgICBpZiAoaXNOYU4odmFsdWUpICYmIHR5cGUuZW51bXMgIT09IHVuZGVmaW5lZCkge1xuICAgICAgdmFsdWUgPSBwYXNzZWRWYWx1ZTtcbiAgICAgIHJldHVybiBjaGVja0VudW1zKCk7XG4gICAgfVxuXG4gICAgLy8gY2hlY2sgaWYgdmFsdWUgbXVzdCBiZSBhbiBpbnRlZ2VyXG4gICAgaWYgKHR5cGUuaW50ZWdlciAmJiAhaW50ZWdlcih2YWx1ZSkpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIC8vIGNoZWNrIHZhbHVlIGlzIHdpdGhpbiByYW5nZVxuICAgIGlmICh0eXBlLm1pbiAhPT0gdW5kZWZpbmVkICYmICh2YWx1ZSA8IHR5cGUubWluIHx8IHR5cGUuc3RyaWN0TWluICYmIHZhbHVlID09PSB0eXBlLm1pbikgfHwgdHlwZS5tYXggIT09IHVuZGVmaW5lZCAmJiAodmFsdWUgPiB0eXBlLm1heCB8fCB0eXBlLnN0cmljdE1heCAmJiB2YWx1ZSA9PT0gdHlwZS5tYXgpKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgdmFyIHJldCA9IHtcbiAgICAgIG5hbWU6IG5hbWUsXG4gICAgICB2YWx1ZTogdmFsdWUsXG4gICAgICBzdHJWYWx1ZTogJycgKyB2YWx1ZSArICh1bml0cyA/IHVuaXRzIDogJycpLFxuICAgICAgdW5pdHM6IHVuaXRzLFxuICAgICAgYnlwYXNzOiBwcm9wSXNCeXBhc3NcbiAgICB9O1xuXG4gICAgLy8gbm9ybWFsaXNlIHZhbHVlIGluIHBpeGVsc1xuICAgIGlmICh0eXBlLnVuaXRsZXNzIHx8IHVuaXRzICE9PSAncHgnICYmIHVuaXRzICE9PSAnZW0nKSB7XG4gICAgICByZXQucGZWYWx1ZSA9IHZhbHVlO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXQucGZWYWx1ZSA9IHVuaXRzID09PSAncHgnIHx8ICF1bml0cyA/IHZhbHVlIDogdGhpcy5nZXRFbVNpemVJblBpeGVscygpICogdmFsdWU7XG4gICAgfVxuXG4gICAgLy8gbm9ybWFsaXNlIHZhbHVlIGluIG1zXG4gICAgaWYgKHVuaXRzID09PSAnbXMnIHx8IHVuaXRzID09PSAncycpIHtcbiAgICAgIHJldC5wZlZhbHVlID0gdW5pdHMgPT09ICdtcycgPyB2YWx1ZSA6IDEwMDAgKiB2YWx1ZTtcbiAgICB9XG5cbiAgICAvLyBub3JtYWxpc2UgdmFsdWUgaW4gcmFkXG4gICAgaWYgKHVuaXRzID09PSAnZGVnJyB8fCB1bml0cyA9PT0gJ3JhZCcpIHtcbiAgICAgIHJldC5wZlZhbHVlID0gdW5pdHMgPT09ICdyYWQnID8gdmFsdWUgOiBkZWcycmFkKHZhbHVlKTtcbiAgICB9XG5cbiAgICAvLyBub3JtYWxpemUgdmFsdWUgaW4gJVxuICAgIGlmICh1bml0cyA9PT0gJyUnKSB7XG4gICAgICByZXQucGZWYWx1ZSA9IHZhbHVlIC8gMTAwO1xuICAgIH1cbiAgICByZXR1cm4gcmV0O1xuICB9IGVsc2UgaWYgKHR5cGUucHJvcExpc3QpIHtcbiAgICB2YXIgcHJvcHMgPSBbXTtcbiAgICB2YXIgcHJvcHNTdHIgPSAnJyArIHZhbHVlO1xuICAgIGlmIChwcm9wc1N0ciA9PT0gJ25vbmUnKSA7IGVsc2Uge1xuICAgICAgLy8gZ28gb3ZlciBlYWNoIHByb3BcblxuICAgICAgdmFyIHByb3BzU3BsaXQgPSBwcm9wc1N0ci5zcGxpdCgvXFxzKixcXHMqfFxccysvKTtcbiAgICAgIGZvciAodmFyIF9pMiA9IDA7IF9pMiA8IHByb3BzU3BsaXQubGVuZ3RoOyBfaTIrKykge1xuICAgICAgICB2YXIgcHJvcE5hbWUgPSBwcm9wc1NwbGl0W19pMl0udHJpbSgpO1xuICAgICAgICBpZiAoc2VsZi5wcm9wZXJ0aWVzW3Byb3BOYW1lXSkge1xuICAgICAgICAgIHByb3BzLnB1c2gocHJvcE5hbWUpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHdhcm4oJ2AnICsgcHJvcE5hbWUgKyAnYCBpcyBub3QgYSB2YWxpZCBwcm9wZXJ0eSBuYW1lJyk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmIChwcm9wcy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiB7XG4gICAgICBuYW1lOiBuYW1lLFxuICAgICAgdmFsdWU6IHByb3BzLFxuICAgICAgc3RyVmFsdWU6IHByb3BzLmxlbmd0aCA9PT0gMCA/ICdub25lJyA6IHByb3BzLmpvaW4oJyAnKSxcbiAgICAgIGJ5cGFzczogcHJvcElzQnlwYXNzXG4gICAgfTtcbiAgfSBlbHNlIGlmICh0eXBlLmNvbG9yKSB7XG4gICAgdmFyIHR1cGxlID0gY29sb3IydHVwbGUodmFsdWUpO1xuICAgIGlmICghdHVwbGUpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICByZXR1cm4ge1xuICAgICAgbmFtZTogbmFtZSxcbiAgICAgIHZhbHVlOiB0dXBsZSxcbiAgICAgIHBmVmFsdWU6IHR1cGxlLFxuICAgICAgc3RyVmFsdWU6ICdyZ2IoJyArIHR1cGxlWzBdICsgJywnICsgdHVwbGVbMV0gKyAnLCcgKyB0dXBsZVsyXSArICcpJyxcbiAgICAgIC8vIG4uYi4gbm8gc3BhY2VzIGIvYyBvZiBtdWx0aXBsZSBzdXBwb3J0XG4gICAgICBieXBhc3M6IHByb3BJc0J5cGFzc1xuICAgIH07XG4gIH0gZWxzZSBpZiAodHlwZS5yZWdleCB8fCB0eXBlLnJlZ2V4ZXMpIHtcbiAgICAvLyBmaXJzdCBjaGVjayBlbnVtc1xuICAgIGlmICh0eXBlLmVudW1zKSB7XG4gICAgICB2YXIgZW51bVByb3AgPSBjaGVja0VudW1zKCk7XG4gICAgICBpZiAoZW51bVByb3ApIHtcbiAgICAgICAgcmV0dXJuIGVudW1Qcm9wO1xuICAgICAgfVxuICAgIH1cbiAgICB2YXIgcmVnZXhlcyA9IHR5cGUucmVnZXhlcyA/IHR5cGUucmVnZXhlcyA6IFt0eXBlLnJlZ2V4XTtcbiAgICBmb3IgKHZhciBfaTMgPSAwOyBfaTMgPCByZWdleGVzLmxlbmd0aDsgX2kzKyspIHtcbiAgICAgIHZhciByZWdleCA9IG5ldyBSZWdFeHAocmVnZXhlc1tfaTNdKTsgLy8gbWFrZSBhIHJlZ2V4IGZyb20gdGhlIHR5cGUgc3RyaW5nXG4gICAgICB2YXIgbSA9IHJlZ2V4LmV4ZWModmFsdWUpO1xuICAgICAgaWYgKG0pIHtcbiAgICAgICAgLy8gcmVnZXggbWF0Y2hlc1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIG5hbWU6IG5hbWUsXG4gICAgICAgICAgdmFsdWU6IHR5cGUuc2luZ2xlUmVnZXhNYXRjaFZhbHVlID8gbVsxXSA6IG0sXG4gICAgICAgICAgc3RyVmFsdWU6ICcnICsgdmFsdWUsXG4gICAgICAgICAgYnlwYXNzOiBwcm9wSXNCeXBhc3NcbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIG51bGw7IC8vIGRpZG4ndCBtYXRjaCBhbnlcbiAgfSBlbHNlIGlmICh0eXBlLnN0cmluZykge1xuICAgIC8vIGp1c3QgcmV0dXJuXG4gICAgcmV0dXJuIHtcbiAgICAgIG5hbWU6IG5hbWUsXG4gICAgICB2YWx1ZTogJycgKyB2YWx1ZSxcbiAgICAgIHN0clZhbHVlOiAnJyArIHZhbHVlLFxuICAgICAgYnlwYXNzOiBwcm9wSXNCeXBhc3NcbiAgICB9O1xuICB9IGVsc2UgaWYgKHR5cGUuZW51bXMpIHtcbiAgICAvLyBjaGVjayBlbnVtcyBsYXN0IGJlY2F1c2UgaXQncyBhIGNvbWJvIHR5cGUgaW4gb3RoZXJzXG4gICAgcmV0dXJuIGNoZWNrRW51bXMoKTtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gbnVsbDsgLy8gbm90IGEgdHlwZSB3ZSBjYW4gaGFuZGxlXG4gIH1cbn07XG5cbnZhciBfU3R5bGUgPSBmdW5jdGlvbiBTdHlsZShjeSkge1xuICBpZiAoISh0aGlzIGluc3RhbmNlb2YgX1N0eWxlKSkge1xuICAgIHJldHVybiBuZXcgX1N0eWxlKGN5KTtcbiAgfVxuICBpZiAoIWNvcmUoY3kpKSB7XG4gICAgZXJyb3IoJ0Egc3R5bGUgbXVzdCBoYXZlIGEgY29yZSByZWZlcmVuY2UnKTtcbiAgICByZXR1cm47XG4gIH1cbiAgdGhpcy5fcHJpdmF0ZSA9IHtcbiAgICBjeTogY3ksXG4gICAgY29yZVN0eWxlOiB7fVxuICB9O1xuICB0aGlzLmxlbmd0aCA9IDA7XG4gIHRoaXMucmVzZXRUb0RlZmF1bHQoKTtcbn07XG52YXIgc3R5Zm4gPSBfU3R5bGUucHJvdG90eXBlO1xuc3R5Zm4uaW5zdGFuY2VTdHJpbmcgPSBmdW5jdGlvbiAoKSB7XG4gIHJldHVybiAnc3R5bGUnO1xufTtcblxuLy8gcmVtb3ZlIGFsbCBjb250ZXh0c1xuc3R5Zm4uY2xlYXIgPSBmdW5jdGlvbiAoKSB7XG4gIHZhciBfcCA9IHRoaXMuX3ByaXZhdGU7XG4gIHZhciBjeSA9IF9wLmN5O1xuICB2YXIgZWxlcyA9IGN5LmVsZW1lbnRzKCk7XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5sZW5ndGg7IGkrKykge1xuICAgIHRoaXNbaV0gPSB1bmRlZmluZWQ7XG4gIH1cbiAgdGhpcy5sZW5ndGggPSAwO1xuICBfcC5jb250ZXh0U3R5bGVzID0ge307XG4gIF9wLnByb3BEaWZmcyA9IHt9O1xuICB0aGlzLmNsZWFuRWxlbWVudHMoZWxlcywgdHJ1ZSk7XG4gIGVsZXMuZm9yRWFjaChmdW5jdGlvbiAoZWxlKSB7XG4gICAgdmFyIGVsZV9wID0gZWxlWzBdLl9wcml2YXRlO1xuICAgIGVsZV9wLnN0eWxlRGlydHkgPSB0cnVlO1xuICAgIGVsZV9wLmFwcGxpZWRJbml0U3R5bGUgPSBmYWxzZTtcbiAgfSk7XG4gIHJldHVybiB0aGlzOyAvLyBjaGFpbmluZ1xufTtcbnN0eWZuLnJlc2V0VG9EZWZhdWx0ID0gZnVuY3Rpb24gKCkge1xuICB0aGlzLmNsZWFyKCk7XG4gIHRoaXMuYWRkRGVmYXVsdFN0eWxlc2hlZXQoKTtcbiAgcmV0dXJuIHRoaXM7XG59O1xuXG4vLyBidWlsZHMgYSBzdHlsZSBvYmplY3QgZm9yIHRoZSAnY29yZScgc2VsZWN0b3JcbnN0eWZuLmNvcmUgPSBmdW5jdGlvbiAocHJvcE5hbWUpIHtcbiAgcmV0dXJuIHRoaXMuX3ByaXZhdGUuY29yZVN0eWxlW3Byb3BOYW1lXSB8fCB0aGlzLmdldERlZmF1bHRQcm9wZXJ0eShwcm9wTmFtZSk7XG59O1xuXG4vLyBjcmVhdGUgYSBuZXcgY29udGV4dCBmcm9tIHRoZSBzcGVjaWZpZWQgc2VsZWN0b3Igc3RyaW5nIGFuZCBzd2l0Y2ggdG8gdGhhdCBjb250ZXh0XG5zdHlmbi5zZWxlY3RvciA9IGZ1bmN0aW9uIChzZWxlY3RvclN0cikge1xuICAvLyAnY29yZScgaXMgYSBzcGVjaWFsIGNhc2UgYW5kIGRvZXMgbm90IG5lZWQgYSBzZWxlY3RvclxuICB2YXIgc2VsZWN0b3IgPSBzZWxlY3RvclN0ciA9PT0gJ2NvcmUnID8gbnVsbCA6IG5ldyBTZWxlY3RvcihzZWxlY3RvclN0cik7XG4gIHZhciBpID0gdGhpcy5sZW5ndGgrKzsgLy8gbmV3IGNvbnRleHQgbWVhbnMgbmV3IGluZGV4XG4gIHRoaXNbaV0gPSB7XG4gICAgc2VsZWN0b3I6IHNlbGVjdG9yLFxuICAgIHByb3BlcnRpZXM6IFtdLFxuICAgIG1hcHBlZFByb3BlcnRpZXM6IFtdLFxuICAgIGluZGV4OiBpXG4gIH07XG4gIHJldHVybiB0aGlzOyAvLyBjaGFpbmluZ1xufTtcblxuLy8gYWRkIG9uZSBvciBtYW55IGNzcyBydWxlcyB0byB0aGUgY3VycmVudCBjb250ZXh0XG5zdHlmbi5jc3MgPSBmdW5jdGlvbiAoKSB7XG4gIHZhciBzZWxmID0gdGhpcztcbiAgdmFyIGFyZ3MgPSBhcmd1bWVudHM7XG4gIGlmIChhcmdzLmxlbmd0aCA9PT0gMSkge1xuICAgIHZhciBtYXAgPSBhcmdzWzBdO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgc2VsZi5wcm9wZXJ0aWVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIgcHJvcCA9IHNlbGYucHJvcGVydGllc1tpXTtcbiAgICAgIHZhciBtYXBWYWwgPSBtYXBbcHJvcC5uYW1lXTtcbiAgICAgIGlmIChtYXBWYWwgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICBtYXBWYWwgPSBtYXBbZGFzaDJjYW1lbChwcm9wLm5hbWUpXTtcbiAgICAgIH1cbiAgICAgIGlmIChtYXBWYWwgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICB0aGlzLmNzc1J1bGUocHJvcC5uYW1lLCBtYXBWYWwpO1xuICAgICAgfVxuICAgIH1cbiAgfSBlbHNlIGlmIChhcmdzLmxlbmd0aCA9PT0gMikge1xuICAgIHRoaXMuY3NzUnVsZShhcmdzWzBdLCBhcmdzWzFdKTtcbiAgfVxuXG4gIC8vIGRvIG5vdGhpbmcgaWYgYXJncyBhcmUgaW52YWxpZFxuXG4gIHJldHVybiB0aGlzOyAvLyBjaGFpbmluZ1xufTtcbnN0eWZuLnN0eWxlID0gc3R5Zm4uY3NzO1xuXG4vLyBhZGQgYSBzaW5nbGUgY3NzIHJ1bGUgdG8gdGhlIGN1cnJlbnQgY29udGV4dFxuc3R5Zm4uY3NzUnVsZSA9IGZ1bmN0aW9uIChuYW1lLCB2YWx1ZSkge1xuICAvLyBuYW1lLXZhbHVlIHBhaXJcbiAgdmFyIHByb3BlcnR5ID0gdGhpcy5wYXJzZShuYW1lLCB2YWx1ZSk7XG5cbiAgLy8gYWRkIHByb3BlcnR5IHRvIGN1cnJlbnQgY29udGV4dCBpZiB2YWxpZFxuICBpZiAocHJvcGVydHkpIHtcbiAgICB2YXIgaSA9IHRoaXMubGVuZ3RoIC0gMTtcbiAgICB0aGlzW2ldLnByb3BlcnRpZXMucHVzaChwcm9wZXJ0eSk7XG4gICAgdGhpc1tpXS5wcm9wZXJ0aWVzW3Byb3BlcnR5Lm5hbWVdID0gcHJvcGVydHk7IC8vIGFsbG93IGFjY2VzcyBieSBuYW1lIGFzIHdlbGxcblxuICAgIGlmIChwcm9wZXJ0eS5uYW1lLm1hdGNoKC9waWUtKFxcZCspLWJhY2tncm91bmQtc2l6ZS8pICYmIHByb3BlcnR5LnZhbHVlKSB7XG4gICAgICB0aGlzLl9wcml2YXRlLmhhc1BpZSA9IHRydWU7XG4gICAgfVxuICAgIGlmIChwcm9wZXJ0eS5tYXBwZWQpIHtcbiAgICAgIHRoaXNbaV0ubWFwcGVkUHJvcGVydGllcy5wdXNoKHByb3BlcnR5KTtcbiAgICB9XG5cbiAgICAvLyBhZGQgdG8gY29yZSBzdHlsZSBpZiBuZWNlc3NhcnlcbiAgICB2YXIgY3VycmVudFNlbGVjdG9ySXNDb3JlID0gIXRoaXNbaV0uc2VsZWN0b3I7XG4gICAgaWYgKGN1cnJlbnRTZWxlY3RvcklzQ29yZSkge1xuICAgICAgdGhpcy5fcHJpdmF0ZS5jb3JlU3R5bGVbcHJvcGVydHkubmFtZV0gPSBwcm9wZXJ0eTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHRoaXM7IC8vIGNoYWluaW5nXG59O1xuc3R5Zm4uYXBwZW5kID0gZnVuY3Rpb24gKHN0eWxlKSB7XG4gIGlmIChzdHlsZXNoZWV0KHN0eWxlKSkge1xuICAgIHN0eWxlLmFwcGVuZFRvU3R5bGUodGhpcyk7XG4gIH0gZWxzZSBpZiAoYXJyYXkoc3R5bGUpKSB7XG4gICAgdGhpcy5hcHBlbmRGcm9tSnNvbihzdHlsZSk7XG4gIH0gZWxzZSBpZiAoc3RyaW5nKHN0eWxlKSkge1xuICAgIHRoaXMuYXBwZW5kRnJvbVN0cmluZyhzdHlsZSk7XG4gIH0gLy8geW91IHByb2JhYmx5IHdvdWxkbid0IHdhbnQgdG8gYXBwZW5kIGEgU3R5bGUsIHNpbmNlIHlvdSdkIGR1cGxpY2F0ZSB0aGUgZGVmYXVsdCBwYXJ0c1xuXG4gIHJldHVybiB0aGlzO1xufTtcblxuLy8gc3RhdGljIGZ1bmN0aW9uXG5fU3R5bGUuZnJvbUpzb24gPSBmdW5jdGlvbiAoY3ksIGpzb24pIHtcbiAgdmFyIHN0eWxlID0gbmV3IF9TdHlsZShjeSk7XG4gIHN0eWxlLmZyb21Kc29uKGpzb24pO1xuICByZXR1cm4gc3R5bGU7XG59O1xuX1N0eWxlLmZyb21TdHJpbmcgPSBmdW5jdGlvbiAoY3ksIHN0cmluZykge1xuICByZXR1cm4gbmV3IF9TdHlsZShjeSkuZnJvbVN0cmluZyhzdHJpbmcpO1xufTtcbltzdHlmbiQ4LCBzdHlmbiQ3LCBzdHlmbiQ2LCBzdHlmbiQ1LCBzdHlmbiQ0LCBzdHlmbiQzLCBzdHlmbiQyLCBzdHlmbiQxXS5mb3JFYWNoKGZ1bmN0aW9uIChwcm9wcykge1xuICBleHRlbmQoc3R5Zm4sIHByb3BzKTtcbn0pO1xuX1N0eWxlLnR5cGVzID0gc3R5Zm4udHlwZXM7XG5fU3R5bGUucHJvcGVydGllcyA9IHN0eWZuLnByb3BlcnRpZXM7XG5fU3R5bGUucHJvcGVydHlHcm91cHMgPSBzdHlmbi5wcm9wZXJ0eUdyb3Vwcztcbl9TdHlsZS5wcm9wZXJ0eUdyb3VwTmFtZXMgPSBzdHlmbi5wcm9wZXJ0eUdyb3VwTmFtZXM7XG5fU3R5bGUucHJvcGVydHlHcm91cEtleXMgPSBzdHlmbi5wcm9wZXJ0eUdyb3VwS2V5cztcblxudmFyIGNvcmVmbiQyID0ge1xuICBzdHlsZTogZnVuY3Rpb24gc3R5bGUobmV3U3R5bGUpIHtcbiAgICBpZiAobmV3U3R5bGUpIHtcbiAgICAgIHZhciBzID0gdGhpcy5zZXRTdHlsZShuZXdTdHlsZSk7XG4gICAgICBzLnVwZGF0ZSgpO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5fcHJpdmF0ZS5zdHlsZTtcbiAgfSxcbiAgc2V0U3R5bGU6IGZ1bmN0aW9uIHNldFN0eWxlKHN0eWxlKSB7XG4gICAgdmFyIF9wID0gdGhpcy5fcHJpdmF0ZTtcbiAgICBpZiAoc3R5bGVzaGVldChzdHlsZSkpIHtcbiAgICAgIF9wLnN0eWxlID0gc3R5bGUuZ2VuZXJhdGVTdHlsZSh0aGlzKTtcbiAgICB9IGVsc2UgaWYgKGFycmF5KHN0eWxlKSkge1xuICAgICAgX3Auc3R5bGUgPSBfU3R5bGUuZnJvbUpzb24odGhpcywgc3R5bGUpO1xuICAgIH0gZWxzZSBpZiAoc3RyaW5nKHN0eWxlKSkge1xuICAgICAgX3Auc3R5bGUgPSBfU3R5bGUuZnJvbVN0cmluZyh0aGlzLCBzdHlsZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIF9wLnN0eWxlID0gX1N0eWxlKHRoaXMpO1xuICAgIH1cbiAgICByZXR1cm4gX3Auc3R5bGU7XG4gIH0sXG4gIC8vIGUuZy4gY3kuZGF0YSgpIGNoYW5nZWQgPT4gcmVjYWxjIGVsZSBtYXBwZXJzXG4gIHVwZGF0ZVN0eWxlOiBmdW5jdGlvbiB1cGRhdGVTdHlsZSgpIHtcbiAgICB0aGlzLm11dGFibGVFbGVtZW50cygpLnVwZGF0ZVN0eWxlKCk7IC8vIGp1c3Qgc2VuZCB0byBhbGwgZWxlc1xuICB9XG59O1xuXG52YXIgZGVmYXVsdFNlbGVjdGlvblR5cGUgPSAnc2luZ2xlJztcbnZhciBjb3JlZm4kMSA9IHtcbiAgYXV0b2xvY2s6IGZ1bmN0aW9uIGF1dG9sb2NrKGJvb2wpIHtcbiAgICBpZiAoYm9vbCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aGlzLl9wcml2YXRlLmF1dG9sb2NrID0gYm9vbCA/IHRydWUgOiBmYWxzZTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIHRoaXMuX3ByaXZhdGUuYXV0b2xvY2s7XG4gICAgfVxuICAgIHJldHVybiB0aGlzOyAvLyBjaGFpbmluZ1xuICB9LFxuICBhdXRvdW5ncmFiaWZ5OiBmdW5jdGlvbiBhdXRvdW5ncmFiaWZ5KGJvb2wpIHtcbiAgICBpZiAoYm9vbCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aGlzLl9wcml2YXRlLmF1dG91bmdyYWJpZnkgPSBib29sID8gdHJ1ZSA6IGZhbHNlO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gdGhpcy5fcHJpdmF0ZS5hdXRvdW5ncmFiaWZ5O1xuICAgIH1cbiAgICByZXR1cm4gdGhpczsgLy8gY2hhaW5pbmdcbiAgfSxcbiAgYXV0b3Vuc2VsZWN0aWZ5OiBmdW5jdGlvbiBhdXRvdW5zZWxlY3RpZnkoYm9vbCkge1xuICAgIGlmIChib29sICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHRoaXMuX3ByaXZhdGUuYXV0b3Vuc2VsZWN0aWZ5ID0gYm9vbCA/IHRydWUgOiBmYWxzZTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIHRoaXMuX3ByaXZhdGUuYXV0b3Vuc2VsZWN0aWZ5O1xuICAgIH1cbiAgICByZXR1cm4gdGhpczsgLy8gY2hhaW5pbmdcbiAgfSxcbiAgc2VsZWN0aW9uVHlwZTogZnVuY3Rpb24gc2VsZWN0aW9uVHlwZShzZWxUeXBlKSB7XG4gICAgdmFyIF9wID0gdGhpcy5fcHJpdmF0ZTtcbiAgICBpZiAoX3Auc2VsZWN0aW9uVHlwZSA9PSBudWxsKSB7XG4gICAgICBfcC5zZWxlY3Rpb25UeXBlID0gZGVmYXVsdFNlbGVjdGlvblR5cGU7XG4gICAgfVxuICAgIGlmIChzZWxUeXBlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGlmIChzZWxUeXBlID09PSAnYWRkaXRpdmUnIHx8IHNlbFR5cGUgPT09ICdzaW5nbGUnKSB7XG4gICAgICAgIF9wLnNlbGVjdGlvblR5cGUgPSBzZWxUeXBlO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gX3Auc2VsZWN0aW9uVHlwZTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXM7XG4gIH0sXG4gIHBhbm5pbmdFbmFibGVkOiBmdW5jdGlvbiBwYW5uaW5nRW5hYmxlZChib29sKSB7XG4gICAgaWYgKGJvb2wgIT09IHVuZGVmaW5lZCkge1xuICAgICAgdGhpcy5fcHJpdmF0ZS5wYW5uaW5nRW5hYmxlZCA9IGJvb2wgPyB0cnVlIDogZmFsc2U7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiB0aGlzLl9wcml2YXRlLnBhbm5pbmdFbmFibGVkO1xuICAgIH1cbiAgICByZXR1cm4gdGhpczsgLy8gY2hhaW5pbmdcbiAgfSxcbiAgdXNlclBhbm5pbmdFbmFibGVkOiBmdW5jdGlvbiB1c2VyUGFubmluZ0VuYWJsZWQoYm9vbCkge1xuICAgIGlmIChib29sICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHRoaXMuX3ByaXZhdGUudXNlclBhbm5pbmdFbmFibGVkID0gYm9vbCA/IHRydWUgOiBmYWxzZTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIHRoaXMuX3ByaXZhdGUudXNlclBhbm5pbmdFbmFibGVkO1xuICAgIH1cbiAgICByZXR1cm4gdGhpczsgLy8gY2hhaW5pbmdcbiAgfSxcbiAgem9vbWluZ0VuYWJsZWQ6IGZ1bmN0aW9uIHpvb21pbmdFbmFibGVkKGJvb2wpIHtcbiAgICBpZiAoYm9vbCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aGlzLl9wcml2YXRlLnpvb21pbmdFbmFibGVkID0gYm9vbCA/IHRydWUgOiBmYWxzZTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIHRoaXMuX3ByaXZhdGUuem9vbWluZ0VuYWJsZWQ7XG4gICAgfVxuICAgIHJldHVybiB0aGlzOyAvLyBjaGFpbmluZ1xuICB9LFxuICB1c2VyWm9vbWluZ0VuYWJsZWQ6IGZ1bmN0aW9uIHVzZXJab29taW5nRW5hYmxlZChib29sKSB7XG4gICAgaWYgKGJvb2wgIT09IHVuZGVmaW5lZCkge1xuICAgICAgdGhpcy5fcHJpdmF0ZS51c2VyWm9vbWluZ0VuYWJsZWQgPSBib29sID8gdHJ1ZSA6IGZhbHNlO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gdGhpcy5fcHJpdmF0ZS51c2VyWm9vbWluZ0VuYWJsZWQ7XG4gICAgfVxuICAgIHJldHVybiB0aGlzOyAvLyBjaGFpbmluZ1xuICB9LFxuICBib3hTZWxlY3Rpb25FbmFibGVkOiBmdW5jdGlvbiBib3hTZWxlY3Rpb25FbmFibGVkKGJvb2wpIHtcbiAgICBpZiAoYm9vbCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aGlzLl9wcml2YXRlLmJveFNlbGVjdGlvbkVuYWJsZWQgPSBib29sID8gdHJ1ZSA6IGZhbHNlO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gdGhpcy5fcHJpdmF0ZS5ib3hTZWxlY3Rpb25FbmFibGVkO1xuICAgIH1cbiAgICByZXR1cm4gdGhpczsgLy8gY2hhaW5pbmdcbiAgfSxcbiAgcGFuOiBmdW5jdGlvbiBwYW4oKSB7XG4gICAgdmFyIGFyZ3MgPSBhcmd1bWVudHM7XG4gICAgdmFyIHBhbiA9IHRoaXMuX3ByaXZhdGUucGFuO1xuICAgIHZhciBkaW0sIHZhbCwgZGltcywgeCwgeTtcbiAgICBzd2l0Y2ggKGFyZ3MubGVuZ3RoKSB7XG4gICAgICBjYXNlIDA6XG4gICAgICAgIC8vIC5wYW4oKVxuICAgICAgICByZXR1cm4gcGFuO1xuICAgICAgY2FzZSAxOlxuICAgICAgICBpZiAoc3RyaW5nKGFyZ3NbMF0pKSB7XG4gICAgICAgICAgLy8gLnBhbigneCcpXG4gICAgICAgICAgZGltID0gYXJnc1swXTtcbiAgICAgICAgICByZXR1cm4gcGFuW2RpbV07XG4gICAgICAgIH0gZWxzZSBpZiAocGxhaW5PYmplY3QoYXJnc1swXSkpIHtcbiAgICAgICAgICAvLyAucGFuKHsgeDogMCwgeTogMTAwIH0pXG4gICAgICAgICAgaWYgKCF0aGlzLl9wcml2YXRlLnBhbm5pbmdFbmFibGVkKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcztcbiAgICAgICAgICB9XG4gICAgICAgICAgZGltcyA9IGFyZ3NbMF07XG4gICAgICAgICAgeCA9IGRpbXMueDtcbiAgICAgICAgICB5ID0gZGltcy55O1xuICAgICAgICAgIGlmIChudW1iZXIkMSh4KSkge1xuICAgICAgICAgICAgcGFuLnggPSB4O1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAobnVtYmVyJDEoeSkpIHtcbiAgICAgICAgICAgIHBhbi55ID0geTtcbiAgICAgICAgICB9XG4gICAgICAgICAgdGhpcy5lbWl0KCdwYW4gdmlld3BvcnQnKTtcbiAgICAgICAgfVxuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgMjpcbiAgICAgICAgLy8gLnBhbigneCcsIDEwMClcbiAgICAgICAgaWYgKCF0aGlzLl9wcml2YXRlLnBhbm5pbmdFbmFibGVkKSB7XG4gICAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgICAgIH1cbiAgICAgICAgZGltID0gYXJnc1swXTtcbiAgICAgICAgdmFsID0gYXJnc1sxXTtcbiAgICAgICAgaWYgKChkaW0gPT09ICd4JyB8fCBkaW0gPT09ICd5JykgJiYgbnVtYmVyJDEodmFsKSkge1xuICAgICAgICAgIHBhbltkaW1dID0gdmFsO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuZW1pdCgncGFuIHZpZXdwb3J0Jyk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgLy8gaW52YWxpZFxuICAgIH1cbiAgICB0aGlzLm5vdGlmeSgndmlld3BvcnQnKTtcbiAgICByZXR1cm4gdGhpczsgLy8gY2hhaW5pbmdcbiAgfSxcbiAgcGFuQnk6IGZ1bmN0aW9uIHBhbkJ5KGFyZzAsIGFyZzEpIHtcbiAgICB2YXIgYXJncyA9IGFyZ3VtZW50cztcbiAgICB2YXIgcGFuID0gdGhpcy5fcHJpdmF0ZS5wYW47XG4gICAgdmFyIGRpbSwgdmFsLCBkaW1zLCB4LCB5O1xuICAgIGlmICghdGhpcy5fcHJpdmF0ZS5wYW5uaW5nRW5hYmxlZCkge1xuICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuICAgIHN3aXRjaCAoYXJncy5sZW5ndGgpIHtcbiAgICAgIGNhc2UgMTpcbiAgICAgICAgaWYgKHBsYWluT2JqZWN0KGFyZzApKSB7XG4gICAgICAgICAgLy8gLnBhbkJ5KHsgeDogMCwgeTogMTAwIH0pXG4gICAgICAgICAgZGltcyA9IGFyZ3NbMF07XG4gICAgICAgICAgeCA9IGRpbXMueDtcbiAgICAgICAgICB5ID0gZGltcy55O1xuICAgICAgICAgIGlmIChudW1iZXIkMSh4KSkge1xuICAgICAgICAgICAgcGFuLnggKz0geDtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKG51bWJlciQxKHkpKSB7XG4gICAgICAgICAgICBwYW4ueSArPSB5O1xuICAgICAgICAgIH1cbiAgICAgICAgICB0aGlzLmVtaXQoJ3BhbiB2aWV3cG9ydCcpO1xuICAgICAgICB9XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAyOlxuICAgICAgICAvLyAucGFuQnkoJ3gnLCAxMDApXG4gICAgICAgIGRpbSA9IGFyZzA7XG4gICAgICAgIHZhbCA9IGFyZzE7XG4gICAgICAgIGlmICgoZGltID09PSAneCcgfHwgZGltID09PSAneScpICYmIG51bWJlciQxKHZhbCkpIHtcbiAgICAgICAgICBwYW5bZGltXSArPSB2YWw7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5lbWl0KCdwYW4gdmlld3BvcnQnKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICAvLyBpbnZhbGlkXG4gICAgfVxuICAgIHRoaXMubm90aWZ5KCd2aWV3cG9ydCcpO1xuICAgIHJldHVybiB0aGlzOyAvLyBjaGFpbmluZ1xuICB9LFxuICBnYzogZnVuY3Rpb24gZ2MoKSB7XG4gICAgdGhpcy5ub3RpZnkoJ2djJyk7XG4gIH0sXG4gIGZpdDogZnVuY3Rpb24gZml0KGVsZW1lbnRzLCBwYWRkaW5nKSB7XG4gICAgdmFyIHZpZXdwb3J0U3RhdGUgPSB0aGlzLmdldEZpdFZpZXdwb3J0KGVsZW1lbnRzLCBwYWRkaW5nKTtcbiAgICBpZiAodmlld3BvcnRTdGF0ZSkge1xuICAgICAgdmFyIF9wID0gdGhpcy5fcHJpdmF0ZTtcbiAgICAgIF9wLnpvb20gPSB2aWV3cG9ydFN0YXRlLnpvb207XG4gICAgICBfcC5wYW4gPSB2aWV3cG9ydFN0YXRlLnBhbjtcbiAgICAgIHRoaXMuZW1pdCgncGFuIHpvb20gdmlld3BvcnQnKTtcbiAgICAgIHRoaXMubm90aWZ5KCd2aWV3cG9ydCcpO1xuICAgIH1cbiAgICByZXR1cm4gdGhpczsgLy8gY2hhaW5pbmdcbiAgfSxcbiAgZ2V0Rml0Vmlld3BvcnQ6IGZ1bmN0aW9uIGdldEZpdFZpZXdwb3J0KGVsZW1lbnRzLCBwYWRkaW5nKSB7XG4gICAgaWYgKG51bWJlciQxKGVsZW1lbnRzKSAmJiBwYWRkaW5nID09PSB1bmRlZmluZWQpIHtcbiAgICAgIC8vIGVsZW1lbnRzIGlzIG9wdGlvbmFsXG4gICAgICBwYWRkaW5nID0gZWxlbWVudHM7XG4gICAgICBlbGVtZW50cyA9IHVuZGVmaW5lZDtcbiAgICB9XG4gICAgaWYgKCF0aGlzLl9wcml2YXRlLnBhbm5pbmdFbmFibGVkIHx8ICF0aGlzLl9wcml2YXRlLnpvb21pbmdFbmFibGVkKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHZhciBiYjtcbiAgICBpZiAoc3RyaW5nKGVsZW1lbnRzKSkge1xuICAgICAgdmFyIHNlbCA9IGVsZW1lbnRzO1xuICAgICAgZWxlbWVudHMgPSB0aGlzLiQoc2VsKTtcbiAgICB9IGVsc2UgaWYgKGJvdW5kaW5nQm94KGVsZW1lbnRzKSkge1xuICAgICAgLy8gYXNzdW1lIGJiXG4gICAgICB2YXIgYmJlID0gZWxlbWVudHM7XG4gICAgICBiYiA9IHtcbiAgICAgICAgeDE6IGJiZS54MSxcbiAgICAgICAgeTE6IGJiZS55MSxcbiAgICAgICAgeDI6IGJiZS54MixcbiAgICAgICAgeTI6IGJiZS55MlxuICAgICAgfTtcbiAgICAgIGJiLncgPSBiYi54MiAtIGJiLngxO1xuICAgICAgYmIuaCA9IGJiLnkyIC0gYmIueTE7XG4gICAgfSBlbHNlIGlmICghZWxlbWVudE9yQ29sbGVjdGlvbihlbGVtZW50cykpIHtcbiAgICAgIGVsZW1lbnRzID0gdGhpcy5tdXRhYmxlRWxlbWVudHMoKTtcbiAgICB9XG4gICAgaWYgKGVsZW1lbnRPckNvbGxlY3Rpb24oZWxlbWVudHMpICYmIGVsZW1lbnRzLmVtcHR5KCkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9IC8vIGNhbid0IGZpdCB0byBub3RoaW5nXG5cbiAgICBiYiA9IGJiIHx8IGVsZW1lbnRzLmJvdW5kaW5nQm94KCk7XG4gICAgdmFyIHcgPSB0aGlzLndpZHRoKCk7XG4gICAgdmFyIGggPSB0aGlzLmhlaWdodCgpO1xuICAgIHZhciB6b29tO1xuICAgIHBhZGRpbmcgPSBudW1iZXIkMShwYWRkaW5nKSA/IHBhZGRpbmcgOiAwO1xuICAgIGlmICghaXNOYU4odykgJiYgIWlzTmFOKGgpICYmIHcgPiAwICYmIGggPiAwICYmICFpc05hTihiYi53KSAmJiAhaXNOYU4oYmIuaCkgJiYgYmIudyA+IDAgJiYgYmIuaCA+IDApIHtcbiAgICAgIHpvb20gPSBNYXRoLm1pbigodyAtIDIgKiBwYWRkaW5nKSAvIGJiLncsIChoIC0gMiAqIHBhZGRpbmcpIC8gYmIuaCk7XG5cbiAgICAgIC8vIGNyb3Agem9vbVxuICAgICAgem9vbSA9IHpvb20gPiB0aGlzLl9wcml2YXRlLm1heFpvb20gPyB0aGlzLl9wcml2YXRlLm1heFpvb20gOiB6b29tO1xuICAgICAgem9vbSA9IHpvb20gPCB0aGlzLl9wcml2YXRlLm1pblpvb20gPyB0aGlzLl9wcml2YXRlLm1pblpvb20gOiB6b29tO1xuICAgICAgdmFyIHBhbiA9IHtcbiAgICAgICAgLy8gbm93IHBhbiB0byBtaWRkbGVcbiAgICAgICAgeDogKHcgLSB6b29tICogKGJiLngxICsgYmIueDIpKSAvIDIsXG4gICAgICAgIHk6IChoIC0gem9vbSAqIChiYi55MSArIGJiLnkyKSkgLyAyXG4gICAgICB9O1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgem9vbTogem9vbSxcbiAgICAgICAgcGFuOiBwYW5cbiAgICAgIH07XG4gICAgfVxuICAgIHJldHVybjtcbiAgfSxcbiAgem9vbVJhbmdlOiBmdW5jdGlvbiB6b29tUmFuZ2UobWluLCBtYXgpIHtcbiAgICB2YXIgX3AgPSB0aGlzLl9wcml2YXRlO1xuICAgIGlmIChtYXggPT0gbnVsbCkge1xuICAgICAgdmFyIG9wdHMgPSBtaW47XG4gICAgICBtaW4gPSBvcHRzLm1pbjtcbiAgICAgIG1heCA9IG9wdHMubWF4O1xuICAgIH1cbiAgICBpZiAobnVtYmVyJDEobWluKSAmJiBudW1iZXIkMShtYXgpICYmIG1pbiA8PSBtYXgpIHtcbiAgICAgIF9wLm1pblpvb20gPSBtaW47XG4gICAgICBfcC5tYXhab29tID0gbWF4O1xuICAgIH0gZWxzZSBpZiAobnVtYmVyJDEobWluKSAmJiBtYXggPT09IHVuZGVmaW5lZCAmJiBtaW4gPD0gX3AubWF4Wm9vbSkge1xuICAgICAgX3AubWluWm9vbSA9IG1pbjtcbiAgICB9IGVsc2UgaWYgKG51bWJlciQxKG1heCkgJiYgbWluID09PSB1bmRlZmluZWQgJiYgbWF4ID49IF9wLm1pblpvb20pIHtcbiAgICAgIF9wLm1heFpvb20gPSBtYXg7XG4gICAgfVxuICAgIHJldHVybiB0aGlzO1xuICB9LFxuICBtaW5ab29tOiBmdW5jdGlvbiBtaW5ab29tKHpvb20pIHtcbiAgICBpZiAoem9vbSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICByZXR1cm4gdGhpcy5fcHJpdmF0ZS5taW5ab29tO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gdGhpcy56b29tUmFuZ2Uoe1xuICAgICAgICBtaW46IHpvb21cbiAgICAgIH0pO1xuICAgIH1cbiAgfSxcbiAgbWF4Wm9vbTogZnVuY3Rpb24gbWF4Wm9vbSh6b29tKSB7XG4gICAgaWYgKHpvb20gPT09IHVuZGVmaW5lZCkge1xuICAgICAgcmV0dXJuIHRoaXMuX3ByaXZhdGUubWF4Wm9vbTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIHRoaXMuem9vbVJhbmdlKHtcbiAgICAgICAgbWF4OiB6b29tXG4gICAgICB9KTtcbiAgICB9XG4gIH0sXG4gIGdldFpvb21lZFZpZXdwb3J0OiBmdW5jdGlvbiBnZXRab29tZWRWaWV3cG9ydChwYXJhbXMpIHtcbiAgICB2YXIgX3AgPSB0aGlzLl9wcml2YXRlO1xuICAgIHZhciBjdXJyZW50UGFuID0gX3AucGFuO1xuICAgIHZhciBjdXJyZW50Wm9vbSA9IF9wLnpvb207XG4gICAgdmFyIHBvczsgLy8gaW4gcmVuZGVyZWQgcHhcbiAgICB2YXIgem9vbTtcbiAgICB2YXIgYmFpbCA9IGZhbHNlO1xuICAgIGlmICghX3Auem9vbWluZ0VuYWJsZWQpIHtcbiAgICAgIC8vIHpvb21pbmcgZGlzYWJsZWRcbiAgICAgIGJhaWwgPSB0cnVlO1xuICAgIH1cbiAgICBpZiAobnVtYmVyJDEocGFyYW1zKSkge1xuICAgICAgLy8gdGhlbiBzZXQgdGhlIHpvb21cbiAgICAgIHpvb20gPSBwYXJhbXM7XG4gICAgfSBlbHNlIGlmIChwbGFpbk9iamVjdChwYXJhbXMpKSB7XG4gICAgICAvLyB0aGVuIHpvb20gYWJvdXQgYSBwb2ludFxuICAgICAgem9vbSA9IHBhcmFtcy5sZXZlbDtcbiAgICAgIGlmIChwYXJhbXMucG9zaXRpb24gIT0gbnVsbCkge1xuICAgICAgICBwb3MgPSBtb2RlbFRvUmVuZGVyZWRQb3NpdGlvbiQxKHBhcmFtcy5wb3NpdGlvbiwgY3VycmVudFpvb20sIGN1cnJlbnRQYW4pO1xuICAgICAgfSBlbHNlIGlmIChwYXJhbXMucmVuZGVyZWRQb3NpdGlvbiAhPSBudWxsKSB7XG4gICAgICAgIHBvcyA9IHBhcmFtcy5yZW5kZXJlZFBvc2l0aW9uO1xuICAgICAgfVxuICAgICAgaWYgKHBvcyAhPSBudWxsICYmICFfcC5wYW5uaW5nRW5hYmxlZCkge1xuICAgICAgICAvLyBwYW5uaW5nIGRpc2FibGVkXG4gICAgICAgIGJhaWwgPSB0cnVlO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIGNyb3Agem9vbVxuICAgIHpvb20gPSB6b29tID4gX3AubWF4Wm9vbSA/IF9wLm1heFpvb20gOiB6b29tO1xuICAgIHpvb20gPSB6b29tIDwgX3AubWluWm9vbSA/IF9wLm1pblpvb20gOiB6b29tO1xuXG4gICAgLy8gY2FuJ3Qgem9vbSB3aXRoIGludmFsaWQgcGFyYW1zXG4gICAgaWYgKGJhaWwgfHwgIW51bWJlciQxKHpvb20pIHx8IHpvb20gPT09IGN1cnJlbnRab29tIHx8IHBvcyAhPSBudWxsICYmICghbnVtYmVyJDEocG9zLngpIHx8ICFudW1iZXIkMShwb3MueSkpKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgaWYgKHBvcyAhPSBudWxsKSB7XG4gICAgICAvLyBzZXQgem9vbSBhYm91dCBwb3NpdGlvblxuICAgICAgdmFyIHBhbjEgPSBjdXJyZW50UGFuO1xuICAgICAgdmFyIHpvb20xID0gY3VycmVudFpvb207XG4gICAgICB2YXIgem9vbTIgPSB6b29tO1xuICAgICAgdmFyIHBhbjIgPSB7XG4gICAgICAgIHg6IC16b29tMiAvIHpvb20xICogKHBvcy54IC0gcGFuMS54KSArIHBvcy54LFxuICAgICAgICB5OiAtem9vbTIgLyB6b29tMSAqIChwb3MueSAtIHBhbjEueSkgKyBwb3MueVxuICAgICAgfTtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHpvb21lZDogdHJ1ZSxcbiAgICAgICAgcGFubmVkOiB0cnVlLFxuICAgICAgICB6b29tOiB6b29tMixcbiAgICAgICAgcGFuOiBwYW4yXG4gICAgICB9O1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBqdXN0IHNldCB0aGUgem9vbVxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgem9vbWVkOiB0cnVlLFxuICAgICAgICBwYW5uZWQ6IGZhbHNlLFxuICAgICAgICB6b29tOiB6b29tLFxuICAgICAgICBwYW46IGN1cnJlbnRQYW5cbiAgICAgIH07XG4gICAgfVxuICB9LFxuICB6b29tOiBmdW5jdGlvbiB6b29tKHBhcmFtcykge1xuICAgIGlmIChwYXJhbXMgPT09IHVuZGVmaW5lZCkge1xuICAgICAgLy8gZ2V0XG4gICAgICByZXR1cm4gdGhpcy5fcHJpdmF0ZS56b29tO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBzZXRcbiAgICAgIHZhciB2cCA9IHRoaXMuZ2V0Wm9vbWVkVmlld3BvcnQocGFyYW1zKTtcbiAgICAgIHZhciBfcCA9IHRoaXMuX3ByaXZhdGU7XG4gICAgICBpZiAodnAgPT0gbnVsbCB8fCAhdnAuem9vbWVkKSB7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgICAgfVxuICAgICAgX3Auem9vbSA9IHZwLnpvb207XG4gICAgICBpZiAodnAucGFubmVkKSB7XG4gICAgICAgIF9wLnBhbi54ID0gdnAucGFuLng7XG4gICAgICAgIF9wLnBhbi55ID0gdnAucGFuLnk7XG4gICAgICB9XG4gICAgICB0aGlzLmVtaXQoJ3pvb20nICsgKHZwLnBhbm5lZCA/ICcgcGFuJyA6ICcnKSArICcgdmlld3BvcnQnKTtcbiAgICAgIHRoaXMubm90aWZ5KCd2aWV3cG9ydCcpO1xuICAgICAgcmV0dXJuIHRoaXM7IC8vIGNoYWluaW5nXG4gICAgfVxuICB9LFxuICB2aWV3cG9ydDogZnVuY3Rpb24gdmlld3BvcnQob3B0cykge1xuICAgIHZhciBfcCA9IHRoaXMuX3ByaXZhdGU7XG4gICAgdmFyIHpvb21EZWZkID0gdHJ1ZTtcbiAgICB2YXIgcGFuRGVmZCA9IHRydWU7XG4gICAgdmFyIGV2ZW50cyA9IFtdOyAvLyB0byB0cmlnZ2VyXG4gICAgdmFyIHpvb21GYWlsZWQgPSBmYWxzZTtcbiAgICB2YXIgcGFuRmFpbGVkID0gZmFsc2U7XG4gICAgaWYgKCFvcHRzKSB7XG4gICAgICByZXR1cm4gdGhpcztcbiAgICB9XG4gICAgaWYgKCFudW1iZXIkMShvcHRzLnpvb20pKSB7XG4gICAgICB6b29tRGVmZCA9IGZhbHNlO1xuICAgIH1cbiAgICBpZiAoIXBsYWluT2JqZWN0KG9wdHMucGFuKSkge1xuICAgICAgcGFuRGVmZCA9IGZhbHNlO1xuICAgIH1cbiAgICBpZiAoIXpvb21EZWZkICYmICFwYW5EZWZkKSB7XG4gICAgICByZXR1cm4gdGhpcztcbiAgICB9XG4gICAgaWYgKHpvb21EZWZkKSB7XG4gICAgICB2YXIgeiA9IG9wdHMuem9vbTtcbiAgICAgIGlmICh6IDwgX3AubWluWm9vbSB8fCB6ID4gX3AubWF4Wm9vbSB8fCAhX3Auem9vbWluZ0VuYWJsZWQpIHtcbiAgICAgICAgem9vbUZhaWxlZCA9IHRydWU7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBfcC56b29tID0gejtcbiAgICAgICAgZXZlbnRzLnB1c2goJ3pvb20nKTtcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKHBhbkRlZmQgJiYgKCF6b29tRmFpbGVkIHx8ICFvcHRzLmNhbmNlbE9uRmFpbGVkWm9vbSkgJiYgX3AucGFubmluZ0VuYWJsZWQpIHtcbiAgICAgIHZhciBwID0gb3B0cy5wYW47XG4gICAgICBpZiAobnVtYmVyJDEocC54KSkge1xuICAgICAgICBfcC5wYW4ueCA9IHAueDtcbiAgICAgICAgcGFuRmFpbGVkID0gZmFsc2U7XG4gICAgICB9XG4gICAgICBpZiAobnVtYmVyJDEocC55KSkge1xuICAgICAgICBfcC5wYW4ueSA9IHAueTtcbiAgICAgICAgcGFuRmFpbGVkID0gZmFsc2U7XG4gICAgICB9XG4gICAgICBpZiAoIXBhbkZhaWxlZCkge1xuICAgICAgICBldmVudHMucHVzaCgncGFuJyk7XG4gICAgICB9XG4gICAgfVxuICAgIGlmIChldmVudHMubGVuZ3RoID4gMCkge1xuICAgICAgZXZlbnRzLnB1c2goJ3ZpZXdwb3J0Jyk7XG4gICAgICB0aGlzLmVtaXQoZXZlbnRzLmpvaW4oJyAnKSk7XG4gICAgICB0aGlzLm5vdGlmeSgndmlld3BvcnQnKTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXM7IC8vIGNoYWluaW5nXG4gIH0sXG4gIGNlbnRlcjogZnVuY3Rpb24gY2VudGVyKGVsZW1lbnRzKSB7XG4gICAgdmFyIHBhbiA9IHRoaXMuZ2V0Q2VudGVyUGFuKGVsZW1lbnRzKTtcbiAgICBpZiAocGFuKSB7XG4gICAgICB0aGlzLl9wcml2YXRlLnBhbiA9IHBhbjtcbiAgICAgIHRoaXMuZW1pdCgncGFuIHZpZXdwb3J0Jyk7XG4gICAgICB0aGlzLm5vdGlmeSgndmlld3BvcnQnKTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXM7IC8vIGNoYWluaW5nXG4gIH0sXG4gIGdldENlbnRlclBhbjogZnVuY3Rpb24gZ2V0Q2VudGVyUGFuKGVsZW1lbnRzLCB6b29tKSB7XG4gICAgaWYgKCF0aGlzLl9wcml2YXRlLnBhbm5pbmdFbmFibGVkKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmIChzdHJpbmcoZWxlbWVudHMpKSB7XG4gICAgICB2YXIgc2VsZWN0b3IgPSBlbGVtZW50cztcbiAgICAgIGVsZW1lbnRzID0gdGhpcy5tdXRhYmxlRWxlbWVudHMoKS5maWx0ZXIoc2VsZWN0b3IpO1xuICAgIH0gZWxzZSBpZiAoIWVsZW1lbnRPckNvbGxlY3Rpb24oZWxlbWVudHMpKSB7XG4gICAgICBlbGVtZW50cyA9IHRoaXMubXV0YWJsZUVsZW1lbnRzKCk7XG4gICAgfVxuICAgIGlmIChlbGVtZW50cy5sZW5ndGggPT09IDApIHtcbiAgICAgIHJldHVybjtcbiAgICB9IC8vIGNhbid0IGNlbnRyZSBwYW4gdG8gbm90aGluZ1xuXG4gICAgdmFyIGJiID0gZWxlbWVudHMuYm91bmRpbmdCb3goKTtcbiAgICB2YXIgdyA9IHRoaXMud2lkdGgoKTtcbiAgICB2YXIgaCA9IHRoaXMuaGVpZ2h0KCk7XG4gICAgem9vbSA9IHpvb20gPT09IHVuZGVmaW5lZCA/IHRoaXMuX3ByaXZhdGUuem9vbSA6IHpvb207XG4gICAgdmFyIHBhbiA9IHtcbiAgICAgIC8vIG1pZGRsZVxuICAgICAgeDogKHcgLSB6b29tICogKGJiLngxICsgYmIueDIpKSAvIDIsXG4gICAgICB5OiAoaCAtIHpvb20gKiAoYmIueTEgKyBiYi55MikpIC8gMlxuICAgIH07XG4gICAgcmV0dXJuIHBhbjtcbiAgfSxcbiAgcmVzZXQ6IGZ1bmN0aW9uIHJlc2V0KCkge1xuICAgIGlmICghdGhpcy5fcHJpdmF0ZS5wYW5uaW5nRW5hYmxlZCB8fCAhdGhpcy5fcHJpdmF0ZS56b29taW5nRW5hYmxlZCkge1xuICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuICAgIHRoaXMudmlld3BvcnQoe1xuICAgICAgcGFuOiB7XG4gICAgICAgIHg6IDAsXG4gICAgICAgIHk6IDBcbiAgICAgIH0sXG4gICAgICB6b29tOiAxXG4gICAgfSk7XG4gICAgcmV0dXJuIHRoaXM7IC8vIGNoYWluaW5nXG4gIH0sXG4gIGludmFsaWRhdGVTaXplOiBmdW5jdGlvbiBpbnZhbGlkYXRlU2l6ZSgpIHtcbiAgICB0aGlzLl9wcml2YXRlLnNpemVDYWNoZSA9IG51bGw7XG4gIH0sXG4gIHNpemU6IGZ1bmN0aW9uIHNpemUoKSB7XG4gICAgdmFyIF9wID0gdGhpcy5fcHJpdmF0ZTtcbiAgICB2YXIgY29udGFpbmVyID0gX3AuY29udGFpbmVyO1xuICAgIHZhciBjeSA9IHRoaXM7XG4gICAgcmV0dXJuIF9wLnNpemVDYWNoZSA9IF9wLnNpemVDYWNoZSB8fCAoY29udGFpbmVyID8gZnVuY3Rpb24gKCkge1xuICAgICAgdmFyIHN0eWxlID0gY3kud2luZG93KCkuZ2V0Q29tcHV0ZWRTdHlsZShjb250YWluZXIpO1xuICAgICAgdmFyIHZhbCA9IGZ1bmN0aW9uIHZhbChuYW1lKSB7XG4gICAgICAgIHJldHVybiBwYXJzZUZsb2F0KHN0eWxlLmdldFByb3BlcnR5VmFsdWUobmFtZSkpO1xuICAgICAgfTtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHdpZHRoOiBjb250YWluZXIuY2xpZW50V2lkdGggLSB2YWwoJ3BhZGRpbmctbGVmdCcpIC0gdmFsKCdwYWRkaW5nLXJpZ2h0JyksXG4gICAgICAgIGhlaWdodDogY29udGFpbmVyLmNsaWVudEhlaWdodCAtIHZhbCgncGFkZGluZy10b3AnKSAtIHZhbCgncGFkZGluZy1ib3R0b20nKVxuICAgICAgfTtcbiAgICB9KCkgOiB7XG4gICAgICAvLyBmYWxsYmFjayBpZiBubyBjb250YWluZXIgKG5vdCAwIGIvYyBjYW4gYmUgdXNlZCBmb3IgZGl2aWRpbmcgZXRjKVxuICAgICAgd2lkdGg6IDEsXG4gICAgICBoZWlnaHQ6IDFcbiAgICB9KTtcbiAgfSxcbiAgd2lkdGg6IGZ1bmN0aW9uIHdpZHRoKCkge1xuICAgIHJldHVybiB0aGlzLnNpemUoKS53aWR0aDtcbiAgfSxcbiAgaGVpZ2h0OiBmdW5jdGlvbiBoZWlnaHQoKSB7XG4gICAgcmV0dXJuIHRoaXMuc2l6ZSgpLmhlaWdodDtcbiAgfSxcbiAgZXh0ZW50OiBmdW5jdGlvbiBleHRlbnQoKSB7XG4gICAgdmFyIHBhbiA9IHRoaXMuX3ByaXZhdGUucGFuO1xuICAgIHZhciB6b29tID0gdGhpcy5fcHJpdmF0ZS56b29tO1xuICAgIHZhciByYiA9IHRoaXMucmVuZGVyZWRFeHRlbnQoKTtcbiAgICB2YXIgYiA9IHtcbiAgICAgIHgxOiAocmIueDEgLSBwYW4ueCkgLyB6b29tLFxuICAgICAgeDI6IChyYi54MiAtIHBhbi54KSAvIHpvb20sXG4gICAgICB5MTogKHJiLnkxIC0gcGFuLnkpIC8gem9vbSxcbiAgICAgIHkyOiAocmIueTIgLSBwYW4ueSkgLyB6b29tXG4gICAgfTtcbiAgICBiLncgPSBiLngyIC0gYi54MTtcbiAgICBiLmggPSBiLnkyIC0gYi55MTtcbiAgICByZXR1cm4gYjtcbiAgfSxcbiAgcmVuZGVyZWRFeHRlbnQ6IGZ1bmN0aW9uIHJlbmRlcmVkRXh0ZW50KCkge1xuICAgIHZhciB3aWR0aCA9IHRoaXMud2lkdGgoKTtcbiAgICB2YXIgaGVpZ2h0ID0gdGhpcy5oZWlnaHQoKTtcbiAgICByZXR1cm4ge1xuICAgICAgeDE6IDAsXG4gICAgICB5MTogMCxcbiAgICAgIHgyOiB3aWR0aCxcbiAgICAgIHkyOiBoZWlnaHQsXG4gICAgICB3OiB3aWR0aCxcbiAgICAgIGg6IGhlaWdodFxuICAgIH07XG4gIH0sXG4gIG11bHRpQ2xpY2tEZWJvdW5jZVRpbWU6IGZ1bmN0aW9uIG11bHRpQ2xpY2tEZWJvdW5jZVRpbWUoX2ludCkge1xuICAgIGlmIChfaW50KSB0aGlzLl9wcml2YXRlLm11bHRpQ2xpY2tEZWJvdW5jZVRpbWUgPSBfaW50O2Vsc2UgcmV0dXJuIHRoaXMuX3ByaXZhdGUubXVsdGlDbGlja0RlYm91bmNlVGltZTtcbiAgICByZXR1cm4gdGhpczsgLy8gY2hhaW5pbmdcbiAgfVxufTtcblxuLy8gYWxpYXNlc1xuY29yZWZuJDEuY2VudHJlID0gY29yZWZuJDEuY2VudGVyO1xuXG4vLyBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eVxuY29yZWZuJDEuYXV0b2xvY2tOb2RlcyA9IGNvcmVmbiQxLmF1dG9sb2NrO1xuY29yZWZuJDEuYXV0b3VuZ3JhYmlmeU5vZGVzID0gY29yZWZuJDEuYXV0b3VuZ3JhYmlmeTtcblxudmFyIGZuID0ge1xuICBkYXRhOiBkZWZpbmUuZGF0YSh7XG4gICAgZmllbGQ6ICdkYXRhJyxcbiAgICBiaW5kaW5nRXZlbnQ6ICdkYXRhJyxcbiAgICBhbGxvd0JpbmRpbmc6IHRydWUsXG4gICAgYWxsb3dTZXR0aW5nOiB0cnVlLFxuICAgIHNldHRpbmdFdmVudDogJ2RhdGEnLFxuICAgIHNldHRpbmdUcmlnZ2Vyc0V2ZW50OiB0cnVlLFxuICAgIHRyaWdnZXJGbk5hbWU6ICd0cmlnZ2VyJyxcbiAgICBhbGxvd0dldHRpbmc6IHRydWUsXG4gICAgdXBkYXRlU3R5bGU6IHRydWVcbiAgfSksXG4gIHJlbW92ZURhdGE6IGRlZmluZS5yZW1vdmVEYXRhKHtcbiAgICBmaWVsZDogJ2RhdGEnLFxuICAgIGV2ZW50OiAnZGF0YScsXG4gICAgdHJpZ2dlckZuTmFtZTogJ3RyaWdnZXInLFxuICAgIHRyaWdnZXJFdmVudDogdHJ1ZSxcbiAgICB1cGRhdGVTdHlsZTogdHJ1ZVxuICB9KSxcbiAgc2NyYXRjaDogZGVmaW5lLmRhdGEoe1xuICAgIGZpZWxkOiAnc2NyYXRjaCcsXG4gICAgYmluZGluZ0V2ZW50OiAnc2NyYXRjaCcsXG4gICAgYWxsb3dCaW5kaW5nOiB0cnVlLFxuICAgIGFsbG93U2V0dGluZzogdHJ1ZSxcbiAgICBzZXR0aW5nRXZlbnQ6ICdzY3JhdGNoJyxcbiAgICBzZXR0aW5nVHJpZ2dlcnNFdmVudDogdHJ1ZSxcbiAgICB0cmlnZ2VyRm5OYW1lOiAndHJpZ2dlcicsXG4gICAgYWxsb3dHZXR0aW5nOiB0cnVlLFxuICAgIHVwZGF0ZVN0eWxlOiB0cnVlXG4gIH0pLFxuICByZW1vdmVTY3JhdGNoOiBkZWZpbmUucmVtb3ZlRGF0YSh7XG4gICAgZmllbGQ6ICdzY3JhdGNoJyxcbiAgICBldmVudDogJ3NjcmF0Y2gnLFxuICAgIHRyaWdnZXJGbk5hbWU6ICd0cmlnZ2VyJyxcbiAgICB0cmlnZ2VyRXZlbnQ6IHRydWUsXG4gICAgdXBkYXRlU3R5bGU6IHRydWVcbiAgfSlcbn07XG5cbi8vIGFsaWFzZXNcbmZuLmF0dHIgPSBmbi5kYXRhO1xuZm4ucmVtb3ZlQXR0ciA9IGZuLnJlbW92ZURhdGE7XG5cbnZhciBDb3JlID0gZnVuY3Rpb24gQ29yZShvcHRzKSB7XG4gIHZhciBjeSA9IHRoaXM7XG4gIG9wdHMgPSBleHRlbmQoe30sIG9wdHMpO1xuICB2YXIgY29udGFpbmVyID0gb3B0cy5jb250YWluZXI7XG5cbiAgLy8gYWxsb3cgZm9yIHBhc3NpbmcgYSB3cmFwcGVkIGpxdWVyeSBvYmplY3RcbiAgLy8gZS5nLiBjeXRvc2NhcGUoeyBjb250YWluZXI6ICQoJyNjeScpIH0pXG4gIGlmIChjb250YWluZXIgJiYgIWh0bWxFbGVtZW50KGNvbnRhaW5lcikgJiYgaHRtbEVsZW1lbnQoY29udGFpbmVyWzBdKSkge1xuICAgIGNvbnRhaW5lciA9IGNvbnRhaW5lclswXTtcbiAgfVxuICB2YXIgcmVnID0gY29udGFpbmVyID8gY29udGFpbmVyLl9jeXJlZyA6IG51bGw7IC8vIGUuZy4gYWxyZWFkeSByZWdpc3RlcmVkIHNvbWUgaW5mbyAoZS5nLiByZWFkaWVzKSB2aWEganF1ZXJ5XG4gIHJlZyA9IHJlZyB8fCB7fTtcbiAgaWYgKHJlZyAmJiByZWcuY3kpIHtcbiAgICByZWcuY3kuZGVzdHJveSgpO1xuICAgIHJlZyA9IHt9OyAvLyBvbGQgaW5zdGFuY2UgPT4gcmVwbGFjZSByZWcgY29tcGxldGVseVxuICB9XG4gIHZhciByZWFkaWVzID0gcmVnLnJlYWRpZXMgPSByZWcucmVhZGllcyB8fCBbXTtcbiAgaWYgKGNvbnRhaW5lcikge1xuICAgIGNvbnRhaW5lci5fY3lyZWcgPSByZWc7XG4gIH0gLy8gbWFrZSBzdXJlIGNvbnRhaW5lciBhc3NvYydkIHJlZyBwb2ludHMgdG8gdGhpcyBjeVxuICByZWcuY3kgPSBjeTtcbiAgdmFyIGhlYWQgPSBfd2luZG93ICE9PSB1bmRlZmluZWQgJiYgY29udGFpbmVyICE9PSB1bmRlZmluZWQgJiYgIW9wdHMuaGVhZGxlc3M7XG4gIHZhciBvcHRpb25zID0gb3B0cztcbiAgb3B0aW9ucy5sYXlvdXQgPSBleHRlbmQoe1xuICAgIG5hbWU6IGhlYWQgPyAnZ3JpZCcgOiAnbnVsbCdcbiAgfSwgb3B0aW9ucy5sYXlvdXQpO1xuICBvcHRpb25zLnJlbmRlcmVyID0gZXh0ZW5kKHtcbiAgICBuYW1lOiBoZWFkID8gJ2NhbnZhcycgOiAnbnVsbCdcbiAgfSwgb3B0aW9ucy5yZW5kZXJlcik7XG4gIHZhciBkZWZWYWwgPSBmdW5jdGlvbiBkZWZWYWwoZGVmLCB2YWwsIGFsdFZhbCkge1xuICAgIGlmICh2YWwgIT09IHVuZGVmaW5lZCkge1xuICAgICAgcmV0dXJuIHZhbDtcbiAgICB9IGVsc2UgaWYgKGFsdFZhbCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICByZXR1cm4gYWx0VmFsO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gZGVmO1xuICAgIH1cbiAgfTtcbiAgdmFyIF9wID0gdGhpcy5fcHJpdmF0ZSA9IHtcbiAgICBjb250YWluZXI6IGNvbnRhaW5lcixcbiAgICAvLyBodG1sIGRvbSBlbGUgY29udGFpbmVyXG4gICAgcmVhZHk6IGZhbHNlLFxuICAgIC8vIHdoZXRoZXIgcmVhZHkgaGFzIGJlZW4gdHJpZ2dlcmVkXG4gICAgb3B0aW9uczogb3B0aW9ucyxcbiAgICAvLyBjYWNoZWQgb3B0aW9uc1xuICAgIGVsZW1lbnRzOiBuZXcgQ29sbGVjdGlvbih0aGlzKSxcbiAgICAvLyBlbGVtZW50cyBpbiB0aGUgZ3JhcGhcbiAgICBsaXN0ZW5lcnM6IFtdLFxuICAgIC8vIGxpc3Qgb2YgbGlzdGVuZXJzXG4gICAgYW5pRWxlczogbmV3IENvbGxlY3Rpb24odGhpcyksXG4gICAgLy8gZWxlbWVudHMgYmVpbmcgYW5pbWF0ZWRcbiAgICBkYXRhOiBvcHRpb25zLmRhdGEgfHwge30sXG4gICAgLy8gZGF0YSBmb3IgdGhlIGNvcmVcbiAgICBzY3JhdGNoOiB7fSxcbiAgICAvLyBzY3JhdGNoIG9iamVjdCBmb3IgY29yZVxuICAgIGxheW91dDogbnVsbCxcbiAgICByZW5kZXJlcjogbnVsbCxcbiAgICBkZXN0cm95ZWQ6IGZhbHNlLFxuICAgIC8vIHdoZXRoZXIgZGVzdHJveSB3YXMgY2FsbGVkXG4gICAgbm90aWZpY2F0aW9uc0VuYWJsZWQ6IHRydWUsXG4gICAgLy8gd2hldGhlciBub3RpZmljYXRpb25zIGFyZSBzZW50IHRvIHRoZSByZW5kZXJlclxuICAgIG1pblpvb206IDFlLTUwLFxuICAgIG1heFpvb206IDFlNTAsXG4gICAgem9vbWluZ0VuYWJsZWQ6IGRlZlZhbCh0cnVlLCBvcHRpb25zLnpvb21pbmdFbmFibGVkKSxcbiAgICB1c2VyWm9vbWluZ0VuYWJsZWQ6IGRlZlZhbCh0cnVlLCBvcHRpb25zLnVzZXJab29taW5nRW5hYmxlZCksXG4gICAgcGFubmluZ0VuYWJsZWQ6IGRlZlZhbCh0cnVlLCBvcHRpb25zLnBhbm5pbmdFbmFibGVkKSxcbiAgICB1c2VyUGFubmluZ0VuYWJsZWQ6IGRlZlZhbCh0cnVlLCBvcHRpb25zLnVzZXJQYW5uaW5nRW5hYmxlZCksXG4gICAgYm94U2VsZWN0aW9uRW5hYmxlZDogZGVmVmFsKHRydWUsIG9wdGlvbnMuYm94U2VsZWN0aW9uRW5hYmxlZCksXG4gICAgYXV0b2xvY2s6IGRlZlZhbChmYWxzZSwgb3B0aW9ucy5hdXRvbG9jaywgb3B0aW9ucy5hdXRvbG9ja05vZGVzKSxcbiAgICBhdXRvdW5ncmFiaWZ5OiBkZWZWYWwoZmFsc2UsIG9wdGlvbnMuYXV0b3VuZ3JhYmlmeSwgb3B0aW9ucy5hdXRvdW5ncmFiaWZ5Tm9kZXMpLFxuICAgIGF1dG91bnNlbGVjdGlmeTogZGVmVmFsKGZhbHNlLCBvcHRpb25zLmF1dG91bnNlbGVjdGlmeSksXG4gICAgc3R5bGVFbmFibGVkOiBvcHRpb25zLnN0eWxlRW5hYmxlZCA9PT0gdW5kZWZpbmVkID8gaGVhZCA6IG9wdGlvbnMuc3R5bGVFbmFibGVkLFxuICAgIHpvb206IG51bWJlciQxKG9wdGlvbnMuem9vbSkgPyBvcHRpb25zLnpvb20gOiAxLFxuICAgIHBhbjoge1xuICAgICAgeDogcGxhaW5PYmplY3Qob3B0aW9ucy5wYW4pICYmIG51bWJlciQxKG9wdGlvbnMucGFuLngpID8gb3B0aW9ucy5wYW4ueCA6IDAsXG4gICAgICB5OiBwbGFpbk9iamVjdChvcHRpb25zLnBhbikgJiYgbnVtYmVyJDEob3B0aW9ucy5wYW4ueSkgPyBvcHRpb25zLnBhbi55IDogMFxuICAgIH0sXG4gICAgYW5pbWF0aW9uOiB7XG4gICAgICAvLyBvYmplY3QgZm9yIGN1cnJlbnRseS1ydW5uaW5nIGFuaW1hdGlvbnNcbiAgICAgIGN1cnJlbnQ6IFtdLFxuICAgICAgcXVldWU6IFtdXG4gICAgfSxcbiAgICBoYXNDb21wb3VuZE5vZGVzOiBmYWxzZSxcbiAgICBtdWx0aUNsaWNrRGVib3VuY2VUaW1lOiBkZWZWYWwoMjUwLCBvcHRpb25zLm11bHRpQ2xpY2tEZWJvdW5jZVRpbWUpXG4gIH07XG4gIHRoaXMuY3JlYXRlRW1pdHRlcigpO1xuXG4gIC8vIHNldCBzZWxlY3Rpb24gdHlwZVxuICB0aGlzLnNlbGVjdGlvblR5cGUob3B0aW9ucy5zZWxlY3Rpb25UeXBlKTtcblxuICAvLyBpbml0IHpvb20gYm91bmRzXG4gIHRoaXMuem9vbVJhbmdlKHtcbiAgICBtaW46IG9wdGlvbnMubWluWm9vbSxcbiAgICBtYXg6IG9wdGlvbnMubWF4Wm9vbVxuICB9KTtcbiAgdmFyIGxvYWRFeHREYXRhID0gZnVuY3Rpb24gbG9hZEV4dERhdGEoZXh0RGF0YSwgbmV4dCkge1xuICAgIHZhciBhbnlJc1Byb21pc2UgPSBleHREYXRhLnNvbWUocHJvbWlzZSk7XG4gICAgaWYgKGFueUlzUHJvbWlzZSkge1xuICAgICAgcmV0dXJuIFByb21pc2UkMS5hbGwoZXh0RGF0YSkudGhlbihuZXh0KTsgLy8gbG9hZCBhbGwgZGF0YSBhc3luY2hyb25vdXNseSwgdGhlbiBleGVjIHJlc3Qgb2YgaW5pdFxuICAgIH0gZWxzZSB7XG4gICAgICBuZXh0KGV4dERhdGEpOyAvLyBleGVjIHN5bmNocm9ub3VzbHkgZm9yIGNvbnZlbmllbmNlXG4gICAgfVxuICB9O1xuXG4gIC8vIHN0YXJ0IHdpdGggdGhlIGRlZmF1bHQgc3R5bGVzaGVldCBzbyB3ZSBoYXZlIHNvbWV0aGluZyBiZWZvcmUgbG9hZGluZyBhbiBleHRlcm5hbCBzdHlsZXNoZWV0XG4gIGlmIChfcC5zdHlsZUVuYWJsZWQpIHtcbiAgICBjeS5zZXRTdHlsZShbXSk7XG4gIH1cblxuICAvLyBjcmVhdGUgdGhlIHJlbmRlcmVyXG4gIHZhciByZW5kZXJlck9wdGlvbnMgPSBleHRlbmQoe30sIG9wdGlvbnMsIG9wdGlvbnMucmVuZGVyZXIpOyAvLyBhbGxvdyByZW5kZXJpbmcgaGludHMgaW4gdG9wIGxldmVsIG9wdGlvbnNcbiAgY3kuaW5pdFJlbmRlcmVyKHJlbmRlcmVyT3B0aW9ucyk7XG4gIHZhciBzZXRFbGVzQW5kTGF5b3V0ID0gZnVuY3Rpb24gc2V0RWxlc0FuZExheW91dChlbGVtZW50cywgb25sb2FkLCBvbmRvbmUpIHtcbiAgICBjeS5ub3RpZmljYXRpb25zKGZhbHNlKTtcblxuICAgIC8vIHJlbW92ZSBvbGQgZWxlbWVudHNcbiAgICB2YXIgb2xkRWxlcyA9IGN5Lm11dGFibGVFbGVtZW50cygpO1xuICAgIGlmIChvbGRFbGVzLmxlbmd0aCA+IDApIHtcbiAgICAgIG9sZEVsZXMucmVtb3ZlKCk7XG4gICAgfVxuICAgIGlmIChlbGVtZW50cyAhPSBudWxsKSB7XG4gICAgICBpZiAocGxhaW5PYmplY3QoZWxlbWVudHMpIHx8IGFycmF5KGVsZW1lbnRzKSkge1xuICAgICAgICBjeS5hZGQoZWxlbWVudHMpO1xuICAgICAgfVxuICAgIH1cbiAgICBjeS5vbmUoJ2xheW91dHJlYWR5JywgZnVuY3Rpb24gKGUpIHtcbiAgICAgIGN5Lm5vdGlmaWNhdGlvbnModHJ1ZSk7XG4gICAgICBjeS5lbWl0KGUpOyAvLyB3ZSBtaXNzZWQgdGhpcyBldmVudCBieSB0dXJuaW5nIG5vdGlmaWNhdGlvbnMgb2ZmLCBzbyBwYXNzIGl0IG9uXG5cbiAgICAgIGN5Lm9uZSgnbG9hZCcsIG9ubG9hZCk7XG4gICAgICBjeS5lbWl0QW5kTm90aWZ5KCdsb2FkJyk7XG4gICAgfSkub25lKCdsYXlvdXRzdG9wJywgZnVuY3Rpb24gKCkge1xuICAgICAgY3kub25lKCdkb25lJywgb25kb25lKTtcbiAgICAgIGN5LmVtaXQoJ2RvbmUnKTtcbiAgICB9KTtcbiAgICB2YXIgbGF5b3V0T3B0cyA9IGV4dGVuZCh7fSwgY3kuX3ByaXZhdGUub3B0aW9ucy5sYXlvdXQpO1xuICAgIGxheW91dE9wdHMuZWxlcyA9IGN5LmVsZW1lbnRzKCk7XG4gICAgY3kubGF5b3V0KGxheW91dE9wdHMpLnJ1bigpO1xuICB9O1xuICBsb2FkRXh0RGF0YShbb3B0aW9ucy5zdHlsZSwgb3B0aW9ucy5lbGVtZW50c10sIGZ1bmN0aW9uICh0aGVucykge1xuICAgIHZhciBpbml0U3R5bGUgPSB0aGVuc1swXTtcbiAgICB2YXIgaW5pdEVsZXMgPSB0aGVuc1sxXTtcblxuICAgIC8vIGluaXQgc3R5bGVcbiAgICBpZiAoX3Auc3R5bGVFbmFibGVkKSB7XG4gICAgICBjeS5zdHlsZSgpLmFwcGVuZChpbml0U3R5bGUpO1xuICAgIH1cblxuICAgIC8vIGluaXRpYWwgbG9hZFxuICAgIHNldEVsZXNBbmRMYXlvdXQoaW5pdEVsZXMsIGZ1bmN0aW9uICgpIHtcbiAgICAgIC8vIG9ucmVhZHlcbiAgICAgIGN5LnN0YXJ0QW5pbWF0aW9uTG9vcCgpO1xuICAgICAgX3AucmVhZHkgPSB0cnVlO1xuXG4gICAgICAvLyBpZiBhIHJlYWR5IGNhbGxiYWNrIGlzIHNwZWNpZmllZCBhcyBhbiBvcHRpb24sIHRoZSBiaW5kIGl0XG4gICAgICBpZiAoZm4kNihvcHRpb25zLnJlYWR5KSkge1xuICAgICAgICBjeS5vbigncmVhZHknLCBvcHRpb25zLnJlYWR5KTtcbiAgICAgIH1cblxuICAgICAgLy8gYmluZCBhbGwgdGhlIHJlYWR5IGhhbmRsZXJzIHJlZ2lzdGVyZWQgYmVmb3JlIGNyZWF0aW5nIHRoaXMgaW5zdGFuY2VcbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcmVhZGllcy5sZW5ndGg7IGkrKykge1xuICAgICAgICB2YXIgZm4gPSByZWFkaWVzW2ldO1xuICAgICAgICBjeS5vbigncmVhZHknLCBmbik7XG4gICAgICB9XG4gICAgICBpZiAocmVnKSB7XG4gICAgICAgIHJlZy5yZWFkaWVzID0gW107XG4gICAgICB9IC8vIGNsZWFyIGIvYyB3ZSd2ZSBib3VuZCB0aGVtIGFsbCBhbmQgZG9uJ3Qgd2FudCB0byBrZWVwIGl0IGFyb3VuZCBpbiBjYXNlIGEgbmV3IGNvcmUgdXNlcyB0aGUgc2FtZSBkaXYgZXRjXG5cbiAgICAgIGN5LmVtaXQoJ3JlYWR5Jyk7XG4gICAgfSwgb3B0aW9ucy5kb25lKTtcbiAgfSk7XG59O1xudmFyIGNvcmVmbiA9IENvcmUucHJvdG90eXBlOyAvLyBzaG9ydCBhbGlhc1xuXG5leHRlbmQoY29yZWZuLCB7XG4gIGluc3RhbmNlU3RyaW5nOiBmdW5jdGlvbiBpbnN0YW5jZVN0cmluZygpIHtcbiAgICByZXR1cm4gJ2NvcmUnO1xuICB9LFxuICBpc1JlYWR5OiBmdW5jdGlvbiBpc1JlYWR5KCkge1xuICAgIHJldHVybiB0aGlzLl9wcml2YXRlLnJlYWR5O1xuICB9LFxuICBkZXN0cm95ZWQ6IGZ1bmN0aW9uIGRlc3Ryb3llZCgpIHtcbiAgICByZXR1cm4gdGhpcy5fcHJpdmF0ZS5kZXN0cm95ZWQ7XG4gIH0sXG4gIHJlYWR5OiBmdW5jdGlvbiByZWFkeShmbikge1xuICAgIGlmICh0aGlzLmlzUmVhZHkoKSkge1xuICAgICAgdGhpcy5lbWl0dGVyKCkuZW1pdCgncmVhZHknLCBbXSwgZm4pOyAvLyBqdXN0IGNhbGxzIGZuIGFzIHRob3VnaCB0cmlnZ2VyZWQgdmlhIHJlYWR5IGV2ZW50XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMub24oJ3JlYWR5JywgZm4pO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcztcbiAgfSxcbiAgZGVzdHJveTogZnVuY3Rpb24gZGVzdHJveSgpIHtcbiAgICB2YXIgY3kgPSB0aGlzO1xuICAgIGlmIChjeS5kZXN0cm95ZWQoKSkgcmV0dXJuO1xuICAgIGN5LnN0b3BBbmltYXRpb25Mb29wKCk7XG4gICAgY3kuZGVzdHJveVJlbmRlcmVyKCk7XG4gICAgdGhpcy5lbWl0KCdkZXN0cm95Jyk7XG4gICAgY3kuX3ByaXZhdGUuZGVzdHJveWVkID0gdHJ1ZTtcbiAgICByZXR1cm4gY3k7XG4gIH0sXG4gIGhhc0VsZW1lbnRXaXRoSWQ6IGZ1bmN0aW9uIGhhc0VsZW1lbnRXaXRoSWQoaWQpIHtcbiAgICByZXR1cm4gdGhpcy5fcHJpdmF0ZS5lbGVtZW50cy5oYXNFbGVtZW50V2l0aElkKGlkKTtcbiAgfSxcbiAgZ2V0RWxlbWVudEJ5SWQ6IGZ1bmN0aW9uIGdldEVsZW1lbnRCeUlkKGlkKSB7XG4gICAgcmV0dXJuIHRoaXMuX3ByaXZhdGUuZWxlbWVudHMuZ2V0RWxlbWVudEJ5SWQoaWQpO1xuICB9LFxuICBoYXNDb21wb3VuZE5vZGVzOiBmdW5jdGlvbiBoYXNDb21wb3VuZE5vZGVzKCkge1xuICAgIHJldHVybiB0aGlzLl9wcml2YXRlLmhhc0NvbXBvdW5kTm9kZXM7XG4gIH0sXG4gIGhlYWRsZXNzOiBmdW5jdGlvbiBoZWFkbGVzcygpIHtcbiAgICByZXR1cm4gdGhpcy5fcHJpdmF0ZS5yZW5kZXJlci5pc0hlYWRsZXNzKCk7XG4gIH0sXG4gIHN0eWxlRW5hYmxlZDogZnVuY3Rpb24gc3R5bGVFbmFibGVkKCkge1xuICAgIHJldHVybiB0aGlzLl9wcml2YXRlLnN0eWxlRW5hYmxlZDtcbiAgfSxcbiAgYWRkVG9Qb29sOiBmdW5jdGlvbiBhZGRUb1Bvb2woZWxlcykge1xuICAgIHRoaXMuX3ByaXZhdGUuZWxlbWVudHMubWVyZ2UoZWxlcyk7XG4gICAgcmV0dXJuIHRoaXM7IC8vIGNoYWluaW5nXG4gIH0sXG4gIHJlbW92ZUZyb21Qb29sOiBmdW5jdGlvbiByZW1vdmVGcm9tUG9vbChlbGVzKSB7XG4gICAgdGhpcy5fcHJpdmF0ZS5lbGVtZW50cy51bm1lcmdlKGVsZXMpO1xuICAgIHJldHVybiB0aGlzO1xuICB9LFxuICBjb250YWluZXI6IGZ1bmN0aW9uIGNvbnRhaW5lcigpIHtcbiAgICByZXR1cm4gdGhpcy5fcHJpdmF0ZS5jb250YWluZXIgfHwgbnVsbDtcbiAgfSxcbiAgd2luZG93OiBmdW5jdGlvbiB3aW5kb3coKSB7XG4gICAgdmFyIGNvbnRhaW5lciA9IHRoaXMuX3ByaXZhdGUuY29udGFpbmVyO1xuICAgIGlmIChjb250YWluZXIgPT0gbnVsbCkgcmV0dXJuIF93aW5kb3c7XG4gICAgdmFyIG93bmVyRG9jdW1lbnQgPSB0aGlzLl9wcml2YXRlLmNvbnRhaW5lci5vd25lckRvY3VtZW50O1xuICAgIGlmIChvd25lckRvY3VtZW50ID09PSB1bmRlZmluZWQgfHwgb3duZXJEb2N1bWVudCA9PSBudWxsKSB7XG4gICAgICByZXR1cm4gX3dpbmRvdztcbiAgICB9XG4gICAgcmV0dXJuIG93bmVyRG9jdW1lbnQuZGVmYXVsdFZpZXcgfHwgX3dpbmRvdztcbiAgfSxcbiAgbW91bnQ6IGZ1bmN0aW9uIG1vdW50KGNvbnRhaW5lcikge1xuICAgIGlmIChjb250YWluZXIgPT0gbnVsbCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB2YXIgY3kgPSB0aGlzO1xuICAgIHZhciBfcCA9IGN5Ll9wcml2YXRlO1xuICAgIHZhciBvcHRpb25zID0gX3Aub3B0aW9ucztcbiAgICBpZiAoIWh0bWxFbGVtZW50KGNvbnRhaW5lcikgJiYgaHRtbEVsZW1lbnQoY29udGFpbmVyWzBdKSkge1xuICAgICAgY29udGFpbmVyID0gY29udGFpbmVyWzBdO1xuICAgIH1cbiAgICBjeS5zdG9wQW5pbWF0aW9uTG9vcCgpO1xuICAgIGN5LmRlc3Ryb3lSZW5kZXJlcigpO1xuICAgIF9wLmNvbnRhaW5lciA9IGNvbnRhaW5lcjtcbiAgICBfcC5zdHlsZUVuYWJsZWQgPSB0cnVlO1xuICAgIGN5LmludmFsaWRhdGVTaXplKCk7XG4gICAgY3kuaW5pdFJlbmRlcmVyKGV4dGVuZCh7fSwgb3B0aW9ucywgb3B0aW9ucy5yZW5kZXJlciwge1xuICAgICAgLy8gYWxsb3cgY3VzdG9tIHJlbmRlcmVyIG5hbWUgdG8gYmUgcmUtdXNlZCwgb3RoZXJ3aXNlIHVzZSBjYW52YXNcbiAgICAgIG5hbWU6IG9wdGlvbnMucmVuZGVyZXIubmFtZSA9PT0gJ251bGwnID8gJ2NhbnZhcycgOiBvcHRpb25zLnJlbmRlcmVyLm5hbWVcbiAgICB9KSk7XG4gICAgY3kuc3RhcnRBbmltYXRpb25Mb29wKCk7XG4gICAgY3kuc3R5bGUob3B0aW9ucy5zdHlsZSk7XG4gICAgY3kuZW1pdCgnbW91bnQnKTtcbiAgICByZXR1cm4gY3k7XG4gIH0sXG4gIHVubW91bnQ6IGZ1bmN0aW9uIHVubW91bnQoKSB7XG4gICAgdmFyIGN5ID0gdGhpcztcbiAgICBjeS5zdG9wQW5pbWF0aW9uTG9vcCgpO1xuICAgIGN5LmRlc3Ryb3lSZW5kZXJlcigpO1xuICAgIGN5LmluaXRSZW5kZXJlcih7XG4gICAgICBuYW1lOiAnbnVsbCdcbiAgICB9KTtcbiAgICBjeS5lbWl0KCd1bm1vdW50Jyk7XG4gICAgcmV0dXJuIGN5O1xuICB9LFxuICBvcHRpb25zOiBmdW5jdGlvbiBvcHRpb25zKCkge1xuICAgIHJldHVybiBjb3B5KHRoaXMuX3ByaXZhdGUub3B0aW9ucyk7XG4gIH0sXG4gIGpzb246IGZ1bmN0aW9uIGpzb24ob2JqKSB7XG4gICAgdmFyIGN5ID0gdGhpcztcbiAgICB2YXIgX3AgPSBjeS5fcHJpdmF0ZTtcbiAgICB2YXIgZWxlcyA9IGN5Lm11dGFibGVFbGVtZW50cygpO1xuICAgIHZhciBnZXRGcmVzaFJlZiA9IGZ1bmN0aW9uIGdldEZyZXNoUmVmKGVsZSkge1xuICAgICAgcmV0dXJuIGN5LmdldEVsZW1lbnRCeUlkKGVsZS5pZCgpKTtcbiAgICB9O1xuICAgIGlmIChwbGFpbk9iamVjdChvYmopKSB7XG4gICAgICAvLyBzZXRcblxuICAgICAgY3kuc3RhcnRCYXRjaCgpO1xuICAgICAgaWYgKG9iai5lbGVtZW50cykge1xuICAgICAgICB2YXIgaWRJbkpzb24gPSB7fTtcbiAgICAgICAgdmFyIHVwZGF0ZUVsZXMgPSBmdW5jdGlvbiB1cGRhdGVFbGVzKGpzb25zLCBncikge1xuICAgICAgICAgIHZhciB0b0FkZCA9IFtdO1xuICAgICAgICAgIHZhciB0b01vZCA9IFtdO1xuICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwganNvbnMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIHZhciBqc29uID0ganNvbnNbaV07XG4gICAgICAgICAgICBpZiAoIWpzb24uZGF0YS5pZCkge1xuICAgICAgICAgICAgICB3YXJuKCdjeS5qc29uKCkgY2Fubm90IGhhbmRsZSBlbGVtZW50cyB3aXRob3V0IGFuIElEIGF0dHJpYnV0ZScpO1xuICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHZhciBpZCA9ICcnICsganNvbi5kYXRhLmlkOyAvLyBpZCBtdXN0IGJlIHN0cmluZ1xuICAgICAgICAgICAgdmFyIGVsZSA9IGN5LmdldEVsZW1lbnRCeUlkKGlkKTtcbiAgICAgICAgICAgIGlkSW5Kc29uW2lkXSA9IHRydWU7XG4gICAgICAgICAgICBpZiAoZWxlLmxlbmd0aCAhPT0gMCkge1xuICAgICAgICAgICAgICAvLyBleGlzdGluZyBlbGVtZW50IHNob3VsZCBiZSB1cGRhdGVkXG4gICAgICAgICAgICAgIHRvTW9kLnB1c2goe1xuICAgICAgICAgICAgICAgIGVsZTogZWxlLFxuICAgICAgICAgICAgICAgIGpzb246IGpzb25cbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAvLyBvdGhlcndpc2Ugc2hvdWxkIGJlIGFkZGVkXG4gICAgICAgICAgICAgIGlmIChncikge1xuICAgICAgICAgICAgICAgIGpzb24uZ3JvdXAgPSBncjtcbiAgICAgICAgICAgICAgICB0b0FkZC5wdXNoKGpzb24pO1xuICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHRvQWRkLnB1c2goanNvbik7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgY3kuYWRkKHRvQWRkKTtcbiAgICAgICAgICBmb3IgKHZhciBfaSA9IDA7IF9pIDwgdG9Nb2QubGVuZ3RoOyBfaSsrKSB7XG4gICAgICAgICAgICB2YXIgX3RvTW9kJF9pID0gdG9Nb2RbX2ldLFxuICAgICAgICAgICAgICBfZWxlID0gX3RvTW9kJF9pLmVsZSxcbiAgICAgICAgICAgICAgX2pzb24gPSBfdG9Nb2QkX2kuanNvbjtcbiAgICAgICAgICAgIF9lbGUuanNvbihfanNvbik7XG4gICAgICAgICAgfVxuICAgICAgICB9O1xuICAgICAgICBpZiAoYXJyYXkob2JqLmVsZW1lbnRzKSkge1xuICAgICAgICAgIC8vIGVsZW1lbnRzOiBbXVxuICAgICAgICAgIHVwZGF0ZUVsZXMob2JqLmVsZW1lbnRzKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAvLyBlbGVtZW50czogeyBub2RlczogW10sIGVkZ2VzOiBbXSB9XG4gICAgICAgICAgdmFyIGdycyA9IFsnbm9kZXMnLCAnZWRnZXMnXTtcbiAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGdycy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgdmFyIGdyID0gZ3JzW2ldO1xuICAgICAgICAgICAgdmFyIGVsZW1lbnRzID0gb2JqLmVsZW1lbnRzW2dyXTtcbiAgICAgICAgICAgIGlmIChhcnJheShlbGVtZW50cykpIHtcbiAgICAgICAgICAgICAgdXBkYXRlRWxlcyhlbGVtZW50cywgZ3IpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICB2YXIgcGFyZW50c1RvUmVtb3ZlID0gY3kuY29sbGVjdGlvbigpO1xuICAgICAgICBlbGVzLmZpbHRlcihmdW5jdGlvbiAoZWxlKSB7XG4gICAgICAgICAgcmV0dXJuICFpZEluSnNvbltlbGUuaWQoKV07XG4gICAgICAgIH0pLmZvckVhY2goZnVuY3Rpb24gKGVsZSkge1xuICAgICAgICAgIGlmIChlbGUuaXNQYXJlbnQoKSkge1xuICAgICAgICAgICAgcGFyZW50c1RvUmVtb3ZlLm1lcmdlKGVsZSk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGVsZS5yZW1vdmUoKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuXG4gICAgICAgIC8vIHNvIHRoYXQgY2hpbGRyZW4gYXJlIG5vdCByZW1vdmVkIHcvcGFyZW50XG4gICAgICAgIHBhcmVudHNUb1JlbW92ZS5mb3JFYWNoKGZ1bmN0aW9uIChlbGUpIHtcbiAgICAgICAgICByZXR1cm4gZWxlLmNoaWxkcmVuKCkubW92ZSh7XG4gICAgICAgICAgICBwYXJlbnQ6IG51bGxcbiAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgLy8gaW50ZXJtZWRpYXRlIHBhcmVudHMgbWF5IGJlIG1vdmVkIGJ5IHByaW9yIGxpbmUsIHNvIG1ha2Ugc3VyZSB3ZSByZW1vdmUgYnkgZnJlc2ggcmVmc1xuICAgICAgICBwYXJlbnRzVG9SZW1vdmUuZm9yRWFjaChmdW5jdGlvbiAoZWxlKSB7XG4gICAgICAgICAgcmV0dXJuIGdldEZyZXNoUmVmKGVsZSkucmVtb3ZlKCk7XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgICAgaWYgKG9iai5zdHlsZSkge1xuICAgICAgICBjeS5zdHlsZShvYmouc3R5bGUpO1xuICAgICAgfVxuICAgICAgaWYgKG9iai56b29tICE9IG51bGwgJiYgb2JqLnpvb20gIT09IF9wLnpvb20pIHtcbiAgICAgICAgY3kuem9vbShvYmouem9vbSk7XG4gICAgICB9XG4gICAgICBpZiAob2JqLnBhbikge1xuICAgICAgICBpZiAob2JqLnBhbi54ICE9PSBfcC5wYW4ueCB8fCBvYmoucGFuLnkgIT09IF9wLnBhbi55KSB7XG4gICAgICAgICAgY3kucGFuKG9iai5wYW4pO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAob2JqLmRhdGEpIHtcbiAgICAgICAgY3kuZGF0YShvYmouZGF0YSk7XG4gICAgICB9XG4gICAgICB2YXIgZmllbGRzID0gWydtaW5ab29tJywgJ21heFpvb20nLCAnem9vbWluZ0VuYWJsZWQnLCAndXNlclpvb21pbmdFbmFibGVkJywgJ3Bhbm5pbmdFbmFibGVkJywgJ3VzZXJQYW5uaW5nRW5hYmxlZCcsICdib3hTZWxlY3Rpb25FbmFibGVkJywgJ2F1dG9sb2NrJywgJ2F1dG91bmdyYWJpZnknLCAnYXV0b3Vuc2VsZWN0aWZ5JywgJ211bHRpQ2xpY2tEZWJvdW5jZVRpbWUnXTtcbiAgICAgIGZvciAodmFyIF9pMiA9IDA7IF9pMiA8IGZpZWxkcy5sZW5ndGg7IF9pMisrKSB7XG4gICAgICAgIHZhciBmID0gZmllbGRzW19pMl07XG4gICAgICAgIGlmIChvYmpbZl0gIT0gbnVsbCkge1xuICAgICAgICAgIGN5W2ZdKG9ialtmXSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGN5LmVuZEJhdGNoKCk7XG4gICAgICByZXR1cm4gdGhpczsgLy8gY2hhaW5pbmdcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gZ2V0XG4gICAgICB2YXIgZmxhdCA9ICEhb2JqO1xuICAgICAgdmFyIGpzb24gPSB7fTtcbiAgICAgIGlmIChmbGF0KSB7XG4gICAgICAgIGpzb24uZWxlbWVudHMgPSB0aGlzLmVsZW1lbnRzKCkubWFwKGZ1bmN0aW9uIChlbGUpIHtcbiAgICAgICAgICByZXR1cm4gZWxlLmpzb24oKTtcbiAgICAgICAgfSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBqc29uLmVsZW1lbnRzID0ge307XG4gICAgICAgIGVsZXMuZm9yRWFjaChmdW5jdGlvbiAoZWxlKSB7XG4gICAgICAgICAgdmFyIGdyb3VwID0gZWxlLmdyb3VwKCk7XG4gICAgICAgICAgaWYgKCFqc29uLmVsZW1lbnRzW2dyb3VwXSkge1xuICAgICAgICAgICAganNvbi5lbGVtZW50c1tncm91cF0gPSBbXTtcbiAgICAgICAgICB9XG4gICAgICAgICAganNvbi5lbGVtZW50c1tncm91cF0ucHVzaChlbGUuanNvbigpKTtcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgICBpZiAodGhpcy5fcHJpdmF0ZS5zdHlsZUVuYWJsZWQpIHtcbiAgICAgICAganNvbi5zdHlsZSA9IGN5LnN0eWxlKCkuanNvbigpO1xuICAgICAgfVxuICAgICAganNvbi5kYXRhID0gY29weShjeS5kYXRhKCkpO1xuICAgICAgdmFyIG9wdGlvbnMgPSBfcC5vcHRpb25zO1xuICAgICAganNvbi56b29taW5nRW5hYmxlZCA9IF9wLnpvb21pbmdFbmFibGVkO1xuICAgICAganNvbi51c2VyWm9vbWluZ0VuYWJsZWQgPSBfcC51c2VyWm9vbWluZ0VuYWJsZWQ7XG4gICAgICBqc29uLnpvb20gPSBfcC56b29tO1xuICAgICAganNvbi5taW5ab29tID0gX3AubWluWm9vbTtcbiAgICAgIGpzb24ubWF4Wm9vbSA9IF9wLm1heFpvb207XG4gICAgICBqc29uLnBhbm5pbmdFbmFibGVkID0gX3AucGFubmluZ0VuYWJsZWQ7XG4gICAgICBqc29uLnVzZXJQYW5uaW5nRW5hYmxlZCA9IF9wLnVzZXJQYW5uaW5nRW5hYmxlZDtcbiAgICAgIGpzb24ucGFuID0gY29weShfcC5wYW4pO1xuICAgICAganNvbi5ib3hTZWxlY3Rpb25FbmFibGVkID0gX3AuYm94U2VsZWN0aW9uRW5hYmxlZDtcbiAgICAgIGpzb24ucmVuZGVyZXIgPSBjb3B5KG9wdGlvbnMucmVuZGVyZXIpO1xuICAgICAganNvbi5oaWRlRWRnZXNPblZpZXdwb3J0ID0gb3B0aW9ucy5oaWRlRWRnZXNPblZpZXdwb3J0O1xuICAgICAganNvbi50ZXh0dXJlT25WaWV3cG9ydCA9IG9wdGlvbnMudGV4dHVyZU9uVmlld3BvcnQ7XG4gICAgICBqc29uLndoZWVsU2Vuc2l0aXZpdHkgPSBvcHRpb25zLndoZWVsU2Vuc2l0aXZpdHk7XG4gICAgICBqc29uLm1vdGlvbkJsdXIgPSBvcHRpb25zLm1vdGlvbkJsdXI7XG4gICAgICBqc29uLm11bHRpQ2xpY2tEZWJvdW5jZVRpbWUgPSBvcHRpb25zLm11bHRpQ2xpY2tEZWJvdW5jZVRpbWU7XG4gICAgICByZXR1cm4ganNvbjtcbiAgICB9XG4gIH1cbn0pO1xuY29yZWZuLiRpZCA9IGNvcmVmbi5nZXRFbGVtZW50QnlJZDtcbltjb3JlZm4kOSwgY29yZWZuJDgsIGVsZXNmbiwgY29yZWZuJDcsIGNvcmVmbiQ2LCBjb3JlZm4kNSwgY29yZWZuJDQsIGNvcmVmbiQzLCBjb3JlZm4kMiwgY29yZWZuJDEsIGZuXS5mb3JFYWNoKGZ1bmN0aW9uIChwcm9wcykge1xuICBleHRlbmQoY29yZWZuLCBwcm9wcyk7XG59KTtcblxuLyogZXNsaW50LWRpc2FibGUgbm8tdW51c2VkLXZhcnMgKi9cbnZhciBkZWZhdWx0cyQ3ID0ge1xuICBmaXQ6IHRydWUsXG4gIC8vIHdoZXRoZXIgdG8gZml0IHRoZSB2aWV3cG9ydCB0byB0aGUgZ3JhcGhcbiAgZGlyZWN0ZWQ6IGZhbHNlLFxuICAvLyB3aGV0aGVyIHRoZSB0cmVlIGlzIGRpcmVjdGVkIGRvd253YXJkcyAob3IgZWRnZXMgY2FuIHBvaW50IGluIGFueSBkaXJlY3Rpb24gaWYgZmFsc2UpXG4gIHBhZGRpbmc6IDMwLFxuICAvLyBwYWRkaW5nIG9uIGZpdFxuICBjaXJjbGU6IGZhbHNlLFxuICAvLyBwdXQgZGVwdGhzIGluIGNvbmNlbnRyaWMgY2lyY2xlcyBpZiB0cnVlLCBwdXQgZGVwdGhzIHRvcCBkb3duIGlmIGZhbHNlXG4gIGdyaWQ6IGZhbHNlLFxuICAvLyB3aGV0aGVyIHRvIGNyZWF0ZSBhbiBldmVuIGdyaWQgaW50byB3aGljaCB0aGUgREFHIGlzIHBsYWNlZCAoY2lyY2xlOmZhbHNlIG9ubHkpXG4gIHNwYWNpbmdGYWN0b3I6IDEuNzUsXG4gIC8vIHBvc2l0aXZlIHNwYWNpbmcgZmFjdG9yLCBsYXJnZXIgPT4gbW9yZSBzcGFjZSBiZXR3ZWVuIG5vZGVzIChOLkIuIG4vYSBpZiBjYXVzZXMgb3ZlcmxhcClcbiAgYm91bmRpbmdCb3g6IHVuZGVmaW5lZCxcbiAgLy8gY29uc3RyYWluIGxheW91dCBib3VuZHM7IHsgeDEsIHkxLCB4MiwgeTIgfSBvciB7IHgxLCB5MSwgdywgaCB9XG4gIGF2b2lkT3ZlcmxhcDogdHJ1ZSxcbiAgLy8gcHJldmVudHMgbm9kZSBvdmVybGFwLCBtYXkgb3ZlcmZsb3cgYm91bmRpbmdCb3ggaWYgbm90IGVub3VnaCBzcGFjZVxuICBub2RlRGltZW5zaW9uc0luY2x1ZGVMYWJlbHM6IGZhbHNlLFxuICAvLyBFeGNsdWRlcyB0aGUgbGFiZWwgd2hlbiBjYWxjdWxhdGluZyBub2RlIGJvdW5kaW5nIGJveGVzIGZvciB0aGUgbGF5b3V0IGFsZ29yaXRobVxuICByb290czogdW5kZWZpbmVkLFxuICAvLyB0aGUgcm9vdHMgb2YgdGhlIHRyZWVzXG4gIGRlcHRoU29ydDogdW5kZWZpbmVkLFxuICAvLyBhIHNvcnRpbmcgZnVuY3Rpb24gdG8gb3JkZXIgbm9kZXMgYXQgZXF1YWwgZGVwdGguIGUuZy4gZnVuY3Rpb24oYSwgYil7IHJldHVybiBhLmRhdGEoJ3dlaWdodCcpIC0gYi5kYXRhKCd3ZWlnaHQnKSB9XG4gIGFuaW1hdGU6IGZhbHNlLFxuICAvLyB3aGV0aGVyIHRvIHRyYW5zaXRpb24gdGhlIG5vZGUgcG9zaXRpb25zXG4gIGFuaW1hdGlvbkR1cmF0aW9uOiA1MDAsXG4gIC8vIGR1cmF0aW9uIG9mIGFuaW1hdGlvbiBpbiBtcyBpZiBlbmFibGVkXG4gIGFuaW1hdGlvbkVhc2luZzogdW5kZWZpbmVkLFxuICAvLyBlYXNpbmcgb2YgYW5pbWF0aW9uIGlmIGVuYWJsZWQsXG4gIGFuaW1hdGVGaWx0ZXI6IGZ1bmN0aW9uIGFuaW1hdGVGaWx0ZXIobm9kZSwgaSkge1xuICAgIHJldHVybiB0cnVlO1xuICB9LFxuICAvLyBhIGZ1bmN0aW9uIHRoYXQgZGV0ZXJtaW5lcyB3aGV0aGVyIHRoZSBub2RlIHNob3VsZCBiZSBhbmltYXRlZC4gIEFsbCBub2RlcyBhbmltYXRlZCBieSBkZWZhdWx0IG9uIGFuaW1hdGUgZW5hYmxlZC4gIE5vbi1hbmltYXRlZCBub2RlcyBhcmUgcG9zaXRpb25lZCBpbW1lZGlhdGVseSB3aGVuIHRoZSBsYXlvdXQgc3RhcnRzXG4gIHJlYWR5OiB1bmRlZmluZWQsXG4gIC8vIGNhbGxiYWNrIG9uIGxheW91dHJlYWR5XG4gIHN0b3A6IHVuZGVmaW5lZCxcbiAgLy8gY2FsbGJhY2sgb24gbGF5b3V0c3RvcFxuICB0cmFuc2Zvcm06IGZ1bmN0aW9uIHRyYW5zZm9ybShub2RlLCBwb3NpdGlvbikge1xuICAgIHJldHVybiBwb3NpdGlvbjtcbiAgfSAvLyB0cmFuc2Zvcm0gYSBnaXZlbiBub2RlIHBvc2l0aW9uLiBVc2VmdWwgZm9yIGNoYW5naW5nIGZsb3cgZGlyZWN0aW9uIGluIGRpc2NyZXRlIGxheW91dHNcbn07XG52YXIgZGVwcmVjYXRlZE9wdGlvbkRlZmF1bHRzID0ge1xuICBtYXhpbWFsOiBmYWxzZSxcbiAgLy8gd2hldGhlciB0byBzaGlmdCBub2RlcyBkb3duIHRoZWlyIG5hdHVyYWwgQkZTIGRlcHRocyBpbiBvcmRlciB0byBhdm9pZCB1cHdhcmRzIGVkZ2VzIChEQUdTIG9ubHkpOyBzZXR0aW5nIGFjeWNsaWMgdG8gdHJ1ZSBzZXRzIG1heGltYWwgdG8gdHJ1ZSBhbHNvXG4gIGFjeWNsaWM6IGZhbHNlIC8vIHdoZXRoZXIgdGhlIHRyZWUgaXMgYWN5Y2xpYyBhbmQgdGh1cyBhIG5vZGUgY291bGQgYmUgc2hpZnRlZCAoZHVlIHRvIHRoZSBtYXhpbWFsIG9wdGlvbikgbXVsdGlwbGUgdGltZXMgd2l0aG91dCBjYXVzaW5nIGFuIGluZmluaXRlIGxvb3A7IHNldHRpbmcgdG8gdHJ1ZSBzZXRzIG1heGltYWwgdG8gdHJ1ZSBhbHNvOyBpZiB5b3UgYXJlIHVuY2VydGFpbiB3aGV0aGVyIGEgdHJlZSBpcyBhY3ljbGljLCBzZXQgdG8gZmFsc2UgdG8gYXZvaWQgcG90ZW50aWFsIGluZmluaXRlIGxvb3BzXG59O1xuXG4vKiBlc2xpbnQtZW5hYmxlICovXG5cbnZhciBnZXRJbmZvID0gZnVuY3Rpb24gZ2V0SW5mbyhlbGUpIHtcbiAgcmV0dXJuIGVsZS5zY3JhdGNoKCdicmVhZHRoZmlyc3QnKTtcbn07XG52YXIgc2V0SW5mbyA9IGZ1bmN0aW9uIHNldEluZm8oZWxlLCBvYmopIHtcbiAgcmV0dXJuIGVsZS5zY3JhdGNoKCdicmVhZHRoZmlyc3QnLCBvYmopO1xufTtcbmZ1bmN0aW9uIEJyZWFkdGhGaXJzdExheW91dChvcHRpb25zKSB7XG4gIHRoaXMub3B0aW9ucyA9IGV4dGVuZCh7fSwgZGVmYXVsdHMkNywgZGVwcmVjYXRlZE9wdGlvbkRlZmF1bHRzLCBvcHRpb25zKTtcbn1cbkJyZWFkdGhGaXJzdExheW91dC5wcm90b3R5cGUucnVuID0gZnVuY3Rpb24gKCkge1xuICB2YXIgb3B0aW9ucyA9IHRoaXMub3B0aW9ucztcbiAgdmFyIGN5ID0gb3B0aW9ucy5jeTtcbiAgdmFyIGVsZXMgPSBvcHRpb25zLmVsZXM7XG4gIHZhciBub2RlcyA9IGVsZXMubm9kZXMoKS5maWx0ZXIoZnVuY3Rpb24gKG4pIHtcbiAgICByZXR1cm4gbi5pc0NoaWxkbGVzcygpO1xuICB9KTtcbiAgdmFyIGdyYXBoID0gZWxlcztcbiAgdmFyIGRpcmVjdGVkID0gb3B0aW9ucy5kaXJlY3RlZDtcbiAgdmFyIG1heGltYWwgPSBvcHRpb25zLmFjeWNsaWMgfHwgb3B0aW9ucy5tYXhpbWFsIHx8IG9wdGlvbnMubWF4aW1hbEFkanVzdG1lbnRzID4gMDsgLy8gbWF4aW1hbEFkanVzdG1lbnRzIGZvciBjb21wYXQuIHcvIG9sZCBjb2RlOyBhbHNvLCBzZXR0aW5nIGFjeWNsaWMgdG8gdHJ1ZSBzZXRzIG1heGltYWwgdG8gdHJ1ZVxuXG4gIHZhciBoYXNCb3VuZGluZ0JveCA9ICEhb3B0aW9ucy5ib3VuZGluZ0JveDtcbiAgdmFyIGN5RXh0ZW50ID0gY3kuZXh0ZW50KCk7XG4gIHZhciBiYiA9IG1ha2VCb3VuZGluZ0JveChoYXNCb3VuZGluZ0JveCA/IG9wdGlvbnMuYm91bmRpbmdCb3ggOiB7XG4gICAgeDE6IGN5RXh0ZW50LngxLFxuICAgIHkxOiBjeUV4dGVudC55MSxcbiAgICB3OiBjeUV4dGVudC53LFxuICAgIGg6IGN5RXh0ZW50LmhcbiAgfSk7XG4gIHZhciByb290cztcbiAgaWYgKGVsZW1lbnRPckNvbGxlY3Rpb24ob3B0aW9ucy5yb290cykpIHtcbiAgICByb290cyA9IG9wdGlvbnMucm9vdHM7XG4gIH0gZWxzZSBpZiAoYXJyYXkob3B0aW9ucy5yb290cykpIHtcbiAgICB2YXIgcm9vdHNBcnJheSA9IFtdO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgb3B0aW9ucy5yb290cy5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIGlkID0gb3B0aW9ucy5yb290c1tpXTtcbiAgICAgIHZhciBlbGUgPSBjeS5nZXRFbGVtZW50QnlJZChpZCk7XG4gICAgICByb290c0FycmF5LnB1c2goZWxlKTtcbiAgICB9XG4gICAgcm9vdHMgPSBjeS5jb2xsZWN0aW9uKHJvb3RzQXJyYXkpO1xuICB9IGVsc2UgaWYgKHN0cmluZyhvcHRpb25zLnJvb3RzKSkge1xuICAgIHJvb3RzID0gY3kuJChvcHRpb25zLnJvb3RzKTtcbiAgfSBlbHNlIHtcbiAgICBpZiAoZGlyZWN0ZWQpIHtcbiAgICAgIHJvb3RzID0gbm9kZXMucm9vdHMoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdmFyIGNvbXBvbmVudHMgPSBlbGVzLmNvbXBvbmVudHMoKTtcbiAgICAgIHJvb3RzID0gY3kuY29sbGVjdGlvbigpO1xuICAgICAgdmFyIF9sb29wID0gZnVuY3Rpb24gX2xvb3AoKSB7XG4gICAgICAgIHZhciBjb21wID0gY29tcG9uZW50c1tfaV07XG4gICAgICAgIHZhciBtYXhEZWdyZWUgPSBjb21wLm1heERlZ3JlZShmYWxzZSk7XG4gICAgICAgIHZhciBjb21wUm9vdHMgPSBjb21wLmZpbHRlcihmdW5jdGlvbiAoZWxlKSB7XG4gICAgICAgICAgcmV0dXJuIGVsZS5kZWdyZWUoZmFsc2UpID09PSBtYXhEZWdyZWU7XG4gICAgICAgIH0pO1xuICAgICAgICByb290cyA9IHJvb3RzLmFkZChjb21wUm9vdHMpO1xuICAgICAgfTtcbiAgICAgIGZvciAodmFyIF9pID0gMDsgX2kgPCBjb21wb25lbnRzLmxlbmd0aDsgX2krKykge1xuICAgICAgICBfbG9vcCgpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICB2YXIgZGVwdGhzID0gW107XG4gIHZhciBmb3VuZEJ5QmZzID0ge307XG4gIHZhciBhZGRUb0RlcHRoID0gZnVuY3Rpb24gYWRkVG9EZXB0aChlbGUsIGQpIHtcbiAgICBpZiAoZGVwdGhzW2RdID09IG51bGwpIHtcbiAgICAgIGRlcHRoc1tkXSA9IFtdO1xuICAgIH1cbiAgICB2YXIgaSA9IGRlcHRoc1tkXS5sZW5ndGg7XG4gICAgZGVwdGhzW2RdLnB1c2goZWxlKTtcbiAgICBzZXRJbmZvKGVsZSwge1xuICAgICAgaW5kZXg6IGksXG4gICAgICBkZXB0aDogZFxuICAgIH0pO1xuICB9O1xuICB2YXIgY2hhbmdlRGVwdGggPSBmdW5jdGlvbiBjaGFuZ2VEZXB0aChlbGUsIG5ld0RlcHRoKSB7XG4gICAgdmFyIF9nZXRJbmZvID0gZ2V0SW5mbyhlbGUpLFxuICAgICAgZGVwdGggPSBfZ2V0SW5mby5kZXB0aCxcbiAgICAgIGluZGV4ID0gX2dldEluZm8uaW5kZXg7XG4gICAgZGVwdGhzW2RlcHRoXVtpbmRleF0gPSBudWxsO1xuXG4gICAgLy8gYWRkIG9ubHkgY2hpbGRsZXNzIG5vZGVzXG4gICAgaWYgKGVsZS5pc0NoaWxkbGVzcygpKSBhZGRUb0RlcHRoKGVsZSwgbmV3RGVwdGgpO1xuICB9O1xuXG4gIC8vIGZpbmQgdGhlIGRlcHRocyBvZiB0aGUgbm9kZXNcbiAgZ3JhcGguYmZzKHtcbiAgICByb290czogcm9vdHMsXG4gICAgZGlyZWN0ZWQ6IG9wdGlvbnMuZGlyZWN0ZWQsXG4gICAgdmlzaXQ6IGZ1bmN0aW9uIHZpc2l0KG5vZGUsIGVkZ2UsIHBOb2RlLCBpLCBkZXB0aCkge1xuICAgICAgdmFyIGVsZSA9IG5vZGVbMF07XG4gICAgICB2YXIgaWQgPSBlbGUuaWQoKTtcblxuICAgICAgLy8gYWRkIG9ubHkgY2hpbGRsZXNzIG5vZGVzXG4gICAgICBpZiAoZWxlLmlzQ2hpbGRsZXNzKCkpIGFkZFRvRGVwdGgoZWxlLCBkZXB0aCk7XG4gICAgICBmb3VuZEJ5QmZzW2lkXSA9IHRydWU7XG4gICAgfVxuICB9KTtcblxuICAvLyBjaGVjayBmb3Igbm9kZXMgbm90IGZvdW5kIGJ5IGJmc1xuICB2YXIgb3JwaGFuTm9kZXMgPSBbXTtcbiAgZm9yICh2YXIgX2kyID0gMDsgX2kyIDwgbm9kZXMubGVuZ3RoOyBfaTIrKykge1xuICAgIHZhciBfZWxlID0gbm9kZXNbX2kyXTtcbiAgICBpZiAoZm91bmRCeUJmc1tfZWxlLmlkKCldKSB7XG4gICAgICBjb250aW51ZTtcbiAgICB9IGVsc2Uge1xuICAgICAgb3JwaGFuTm9kZXMucHVzaChfZWxlKTtcbiAgICB9XG4gIH1cblxuICAvLyBhc3NpZ24gdGhlIG5vZGVzIGEgZGVwdGggYW5kIGluZGV4XG4gIHZhciBhc3NpZ25EZXB0aHNBdCA9IGZ1bmN0aW9uIGFzc2lnbkRlcHRoc0F0KGkpIHtcbiAgICB2YXIgZWxlcyA9IGRlcHRoc1tpXTtcbiAgICBmb3IgKHZhciBqID0gMDsgaiA8IGVsZXMubGVuZ3RoOyBqKyspIHtcbiAgICAgIHZhciBfZWxlMiA9IGVsZXNbal07XG4gICAgICBpZiAoX2VsZTIgPT0gbnVsbCkge1xuICAgICAgICBlbGVzLnNwbGljZShqLCAxKTtcbiAgICAgICAgai0tO1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cbiAgICAgIHNldEluZm8oX2VsZTIsIHtcbiAgICAgICAgZGVwdGg6IGksXG4gICAgICAgIGluZGV4OiBqXG4gICAgICB9KTtcbiAgICB9XG4gIH07XG4gIHZhciBhZGp1c3RNYXhpbWFsbHkgPSBmdW5jdGlvbiBhZGp1c3RNYXhpbWFsbHkoZWxlLCBzaGlmdGVkKSB7XG4gICAgdmFyIGVJbmZvID0gZ2V0SW5mbyhlbGUpO1xuICAgIHZhciBpbmNvbWVycyA9IGVsZS5pbmNvbWVycygpLmZpbHRlcihmdW5jdGlvbiAoZWwpIHtcbiAgICAgIHJldHVybiBlbC5pc05vZGUoKSAmJiBlbGVzLmhhcyhlbCk7XG4gICAgfSk7XG4gICAgdmFyIG1heERlcHRoID0gLTE7XG4gICAgdmFyIGlkID0gZWxlLmlkKCk7XG4gICAgZm9yICh2YXIgayA9IDA7IGsgPCBpbmNvbWVycy5sZW5ndGg7IGsrKykge1xuICAgICAgdmFyIGluY21yID0gaW5jb21lcnNba107XG4gICAgICB2YXIgaUluZm8gPSBnZXRJbmZvKGluY21yKTtcbiAgICAgIG1heERlcHRoID0gTWF0aC5tYXgobWF4RGVwdGgsIGlJbmZvLmRlcHRoKTtcbiAgICB9XG4gICAgaWYgKGVJbmZvLmRlcHRoIDw9IG1heERlcHRoKSB7XG4gICAgICBpZiAoIW9wdGlvbnMuYWN5Y2xpYyAmJiBzaGlmdGVkW2lkXSkge1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIH1cbiAgICAgIHZhciBuZXdEZXB0aCA9IG1heERlcHRoICsgMTtcbiAgICAgIGNoYW5nZURlcHRoKGVsZSwgbmV3RGVwdGgpO1xuICAgICAgc2hpZnRlZFtpZF0gPSBuZXdEZXB0aDtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG4gIH07XG5cbiAgLy8gZm9yIHRoZSBkaXJlY3RlZCBjYXNlLCB0cnkgdG8gbWFrZSB0aGUgZWRnZXMgYWxsIGdvIGRvd24gKGkuZS4gZGVwdGggaSA9PiBkZXB0aCBpICsgMSlcbiAgaWYgKGRpcmVjdGVkICYmIG1heGltYWwpIHtcbiAgICB2YXIgUSA9IFtdO1xuICAgIHZhciBzaGlmdGVkID0ge307XG4gICAgdmFyIGVucXVldWUgPSBmdW5jdGlvbiBlbnF1ZXVlKG4pIHtcbiAgICAgIHJldHVybiBRLnB1c2gobik7XG4gICAgfTtcbiAgICB2YXIgZGVxdWV1ZSA9IGZ1bmN0aW9uIGRlcXVldWUoKSB7XG4gICAgICByZXR1cm4gUS5zaGlmdCgpO1xuICAgIH07XG4gICAgbm9kZXMuZm9yRWFjaChmdW5jdGlvbiAobikge1xuICAgICAgcmV0dXJuIFEucHVzaChuKTtcbiAgICB9KTtcbiAgICB3aGlsZSAoUS5sZW5ndGggPiAwKSB7XG4gICAgICB2YXIgX2VsZTMgPSBkZXF1ZXVlKCk7XG4gICAgICB2YXIgZGlkU2hpZnQgPSBhZGp1c3RNYXhpbWFsbHkoX2VsZTMsIHNoaWZ0ZWQpO1xuICAgICAgaWYgKGRpZFNoaWZ0KSB7XG4gICAgICAgIF9lbGUzLm91dGdvZXJzKCkuZmlsdGVyKGZ1bmN0aW9uIChlbCkge1xuICAgICAgICAgIHJldHVybiBlbC5pc05vZGUoKSAmJiBlbGVzLmhhcyhlbCk7XG4gICAgICAgIH0pLmZvckVhY2goZW5xdWV1ZSk7XG4gICAgICB9IGVsc2UgaWYgKGRpZFNoaWZ0ID09PSBudWxsKSB7XG4gICAgICAgIHdhcm4oJ0RldGVjdGVkIGRvdWJsZSBtYXhpbWFsIHNoaWZ0IGZvciBub2RlIGAnICsgX2VsZTMuaWQoKSArICdgLiAgQmFpbGluZyBtYXhpbWFsIGFkanVzdG1lbnQgZHVlIHRvIGN5Y2xlLiAgVXNlIGBvcHRpb25zLm1heGltYWw6IHRydWVgIG9ubHkgb24gREFHcy4nKTtcbiAgICAgICAgYnJlYWs7IC8vIGV4aXQgb24gZmFpbHVyZVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8vIGZpbmQgbWluIGRpc3RhbmNlIHdlIG5lZWQgdG8gbGVhdmUgYmV0d2VlbiBub2Rlc1xuICB2YXIgbWluRGlzdGFuY2UgPSAwO1xuICBpZiAob3B0aW9ucy5hdm9pZE92ZXJsYXApIHtcbiAgICBmb3IgKHZhciBfaTMgPSAwOyBfaTMgPCBub2Rlcy5sZW5ndGg7IF9pMysrKSB7XG4gICAgICB2YXIgbiA9IG5vZGVzW19pM107XG4gICAgICB2YXIgbmJiID0gbi5sYXlvdXREaW1lbnNpb25zKG9wdGlvbnMpO1xuICAgICAgdmFyIHcgPSBuYmIudztcbiAgICAgIHZhciBoID0gbmJiLmg7XG4gICAgICBtaW5EaXN0YW5jZSA9IE1hdGgubWF4KG1pbkRpc3RhbmNlLCB3LCBoKTtcbiAgICB9XG4gIH1cblxuICAvLyBnZXQgdGhlIHdlaWdodGVkIHBlcmNlbnQgZm9yIGFuIGVsZW1lbnQgYmFzZWQgb24gaXRzIGNvbm5lY3Rpdml0eSB0byBvdGhlciBsZXZlbHNcbiAgdmFyIGNhY2hlZFdlaWdodGVkUGVyY2VudCA9IHt9O1xuICB2YXIgZ2V0V2VpZ2h0ZWRQZXJjZW50ID0gZnVuY3Rpb24gZ2V0V2VpZ2h0ZWRQZXJjZW50KGVsZSkge1xuICAgIGlmIChjYWNoZWRXZWlnaHRlZFBlcmNlbnRbZWxlLmlkKCldKSB7XG4gICAgICByZXR1cm4gY2FjaGVkV2VpZ2h0ZWRQZXJjZW50W2VsZS5pZCgpXTtcbiAgICB9XG4gICAgdmFyIGVsZURlcHRoID0gZ2V0SW5mbyhlbGUpLmRlcHRoO1xuICAgIHZhciBuZWlnaGJvcnMgPSBlbGUubmVpZ2hib3Job29kKCk7XG4gICAgdmFyIHBlcmNlbnQgPSAwO1xuICAgIHZhciBzYW1wbGVzID0gMDtcbiAgICBmb3IgKHZhciBfaTQgPSAwOyBfaTQgPCBuZWlnaGJvcnMubGVuZ3RoOyBfaTQrKykge1xuICAgICAgdmFyIG5laWdoYm9yID0gbmVpZ2hib3JzW19pNF07XG4gICAgICBpZiAobmVpZ2hib3IuaXNFZGdlKCkgfHwgbmVpZ2hib3IuaXNQYXJlbnQoKSB8fCAhbm9kZXMuaGFzKG5laWdoYm9yKSkge1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cbiAgICAgIHZhciBiZiA9IGdldEluZm8obmVpZ2hib3IpO1xuICAgICAgaWYgKGJmID09IG51bGwpIHtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG4gICAgICB2YXIgaW5kZXggPSBiZi5pbmRleDtcbiAgICAgIHZhciBkZXB0aCA9IGJmLmRlcHRoO1xuXG4gICAgICAvLyB1bmFzc2lnbmVkIG5laWdoYm91cnMgc2hvdWxkbid0IGFmZmVjdCB0aGUgb3JkZXJpbmdcbiAgICAgIGlmIChpbmRleCA9PSBudWxsIHx8IGRlcHRoID09IG51bGwpIHtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG4gICAgICB2YXIgbkRlcHRoID0gZGVwdGhzW2RlcHRoXS5sZW5ndGg7XG4gICAgICBpZiAoZGVwdGggPCBlbGVEZXB0aCkge1xuICAgICAgICAvLyBvbmx5IGdldCBpbmZsdWVuY2VkIGJ5IGVsZW1lbnRzIGFib3ZlXG4gICAgICAgIHBlcmNlbnQgKz0gaW5kZXggLyBuRGVwdGg7XG4gICAgICAgIHNhbXBsZXMrKztcbiAgICAgIH1cbiAgICB9XG4gICAgc2FtcGxlcyA9IE1hdGgubWF4KDEsIHNhbXBsZXMpO1xuICAgIHBlcmNlbnQgPSBwZXJjZW50IC8gc2FtcGxlcztcbiAgICBpZiAoc2FtcGxlcyA9PT0gMCkge1xuICAgICAgLy8gcHV0IGxvbmUgbm9kZXMgYXQgdGhlIHN0YXJ0XG4gICAgICBwZXJjZW50ID0gMDtcbiAgICB9XG4gICAgY2FjaGVkV2VpZ2h0ZWRQZXJjZW50W2VsZS5pZCgpXSA9IHBlcmNlbnQ7XG4gICAgcmV0dXJuIHBlcmNlbnQ7XG4gIH07XG5cbiAgLy8gcmVhcnJhbmdlIHRoZSBpbmRpY2VzIGluIGVhY2ggZGVwdGggbGV2ZWwgYmFzZWQgb24gY29ubmVjdGl2aXR5XG4gIHZhciBzb3J0Rm4gPSBmdW5jdGlvbiBzb3J0Rm4oYSwgYikge1xuICAgIHZhciBhcGN0ID0gZ2V0V2VpZ2h0ZWRQZXJjZW50KGEpO1xuICAgIHZhciBicGN0ID0gZ2V0V2VpZ2h0ZWRQZXJjZW50KGIpO1xuICAgIHZhciBkaWZmID0gYXBjdCAtIGJwY3Q7XG4gICAgaWYgKGRpZmYgPT09IDApIHtcbiAgICAgIHJldHVybiBhc2NlbmRpbmcoYS5pZCgpLCBiLmlkKCkpOyAvLyBtYWtlIHN1cmUgc29ydCBkb2Vzbid0IGhhdmUgZG9uJ3QtY2FyZSBjb21wYXJpc29uc1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gZGlmZjtcbiAgICB9XG4gIH07XG4gIGlmIChvcHRpb25zLmRlcHRoU29ydCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgc29ydEZuID0gb3B0aW9ucy5kZXB0aFNvcnQ7XG4gIH1cbiAgdmFyIGRlcHRoc0xlbiA9IGRlcHRocy5sZW5ndGg7XG5cbiAgLy8gc29ydCBlYWNoIGxldmVsIHRvIG1ha2UgY29ubmVjdGVkIG5vZGVzIGNsb3NlclxuICBmb3IgKHZhciBfaTUgPSAwOyBfaTUgPCBkZXB0aHNMZW47IF9pNSsrKSB7XG4gICAgZGVwdGhzW19pNV0uc29ydChzb3J0Rm4pO1xuICAgIGFzc2lnbkRlcHRoc0F0KF9pNSk7XG4gIH1cblxuICAvLyBhc3NpZ24gb3JwaGFuIG5vZGVzIHRvIGEgbmV3IHRvcC1sZXZlbCBkZXB0aFxuICB2YXIgb3JwaGFuRGVwdGggPSBbXTtcbiAgZm9yICh2YXIgX2k2ID0gMDsgX2k2IDwgb3JwaGFuTm9kZXMubGVuZ3RoOyBfaTYrKykge1xuICAgIG9ycGhhbkRlcHRoLnB1c2gob3JwaGFuTm9kZXNbX2k2XSk7XG4gIH1cbiAgdmFyIGFzc2lnbkRlcHRocyA9IGZ1bmN0aW9uIGFzc2lnbkRlcHRocygpIHtcbiAgICBmb3IgKHZhciBfaTcgPSAwOyBfaTcgPCBkZXB0aHNMZW47IF9pNysrKSB7XG4gICAgICBhc3NpZ25EZXB0aHNBdChfaTcpO1xuICAgIH1cbiAgfTtcblxuICAvLyBhZGQgYSBuZXcgdG9wLWxldmVsIGRlcHRoIG9ubHkgd2hlbiB0aGVyZSBhcmUgb3JwaGFuIG5vZGVzXG4gIGlmIChvcnBoYW5EZXB0aC5sZW5ndGgpIHtcbiAgICBkZXB0aHMudW5zaGlmdChvcnBoYW5EZXB0aCk7XG4gICAgZGVwdGhzTGVuID0gZGVwdGhzLmxlbmd0aDtcbiAgICBhc3NpZ25EZXB0aHMoKTtcbiAgfVxuICB2YXIgYmlnZ2VzdERlcHRoU2l6ZSA9IDA7XG4gIGZvciAodmFyIF9pOCA9IDA7IF9pOCA8IGRlcHRoc0xlbjsgX2k4KyspIHtcbiAgICBiaWdnZXN0RGVwdGhTaXplID0gTWF0aC5tYXgoZGVwdGhzW19pOF0ubGVuZ3RoLCBiaWdnZXN0RGVwdGhTaXplKTtcbiAgfVxuICB2YXIgY2VudGVyID0ge1xuICAgIHg6IGJiLngxICsgYmIudyAvIDIsXG4gICAgeTogYmIueTEgKyBiYi5oIC8gMlxuICB9O1xuXG4gIC8vIGF2ZXJhZ2Ugbm9kZSBzaXplXG4gIHZhciBhdmVOb2RlU2l6ZSA9IG5vZGVzLnJlZHVjZShmdW5jdGlvbiAoYWNjLCBub2RlKSB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uIChib3gpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHc6IGFjYy53ID09PSAtMSA/IGJveC53IDogKGFjYy53ICsgYm94LncpIC8gMixcbiAgICAgICAgaDogYWNjLmggPT09IC0xID8gYm94LmggOiAoYWNjLmggKyBib3guaCkgLyAyXG4gICAgICB9O1xuICAgIH0obm9kZS5ib3VuZGluZ0JveCh7XG4gICAgICBpbmNsdWRlTGFiZWxzOiBvcHRpb25zLm5vZGVEaW1lbnNpb25zSW5jbHVkZUxhYmVsc1xuICAgIH0pKTtcbiAgfSwge1xuICAgIHc6IC0xLFxuICAgIGg6IC0xXG4gIH0pO1xuICB2YXIgZGlzdGFuY2VZID0gTWF0aC5tYXgoXG4gIC8vIG9ubHkgb25lIGRlcHRoXG4gIGRlcHRoc0xlbiA9PT0gMSA/IDAgOlxuICAvLyBpbnNpZGUgYSBib3VuZGluZyBib3gsIG5vIG5lZWQgZm9yIHRvcCAmIGJvdHRvbSBwYWRkaW5nXG4gIGhhc0JvdW5kaW5nQm94ID8gKGJiLmggLSBvcHRpb25zLnBhZGRpbmcgKiAyIC0gYXZlTm9kZVNpemUuaCkgLyAoZGVwdGhzTGVuIC0gMSkgOiAoYmIuaCAtIG9wdGlvbnMucGFkZGluZyAqIDIgLSBhdmVOb2RlU2l6ZS5oKSAvIChkZXB0aHNMZW4gKyAxKSwgbWluRGlzdGFuY2UpO1xuICB2YXIgbWF4RGVwdGhTaXplID0gZGVwdGhzLnJlZHVjZShmdW5jdGlvbiAobWF4LCBlbGVzKSB7XG4gICAgcmV0dXJuIE1hdGgubWF4KG1heCwgZWxlcy5sZW5ndGgpO1xuICB9LCAwKTtcbiAgdmFyIGdldFBvc2l0aW9uID0gZnVuY3Rpb24gZ2V0UG9zaXRpb24oZWxlKSB7XG4gICAgdmFyIF9nZXRJbmZvMiA9IGdldEluZm8oZWxlKSxcbiAgICAgIGRlcHRoID0gX2dldEluZm8yLmRlcHRoLFxuICAgICAgaW5kZXggPSBfZ2V0SW5mbzIuaW5kZXg7XG4gICAgaWYgKG9wdGlvbnMuY2lyY2xlKSB7XG4gICAgICB2YXIgcmFkaXVzU3RlcFNpemUgPSBNYXRoLm1pbihiYi53IC8gMiAvIGRlcHRoc0xlbiwgYmIuaCAvIDIgLyBkZXB0aHNMZW4pO1xuICAgICAgcmFkaXVzU3RlcFNpemUgPSBNYXRoLm1heChyYWRpdXNTdGVwU2l6ZSwgbWluRGlzdGFuY2UpO1xuICAgICAgdmFyIHJhZGl1cyA9IHJhZGl1c1N0ZXBTaXplICogZGVwdGggKyByYWRpdXNTdGVwU2l6ZSAtIChkZXB0aHNMZW4gPiAwICYmIGRlcHRoc1swXS5sZW5ndGggPD0gMyA/IHJhZGl1c1N0ZXBTaXplIC8gMiA6IDApO1xuICAgICAgdmFyIHRoZXRhID0gMiAqIE1hdGguUEkgLyBkZXB0aHNbZGVwdGhdLmxlbmd0aCAqIGluZGV4O1xuICAgICAgaWYgKGRlcHRoID09PSAwICYmIGRlcHRoc1swXS5sZW5ndGggPT09IDEpIHtcbiAgICAgICAgcmFkaXVzID0gMTtcbiAgICAgIH1cbiAgICAgIHJldHVybiB7XG4gICAgICAgIHg6IGNlbnRlci54ICsgcmFkaXVzICogTWF0aC5jb3ModGhldGEpLFxuICAgICAgICB5OiBjZW50ZXIueSArIHJhZGl1cyAqIE1hdGguc2luKHRoZXRhKVxuICAgICAgfTtcbiAgICB9IGVsc2Uge1xuICAgICAgdmFyIGRlcHRoU2l6ZSA9IGRlcHRoc1tkZXB0aF0ubGVuZ3RoO1xuICAgICAgdmFyIGRpc3RhbmNlWCA9IE1hdGgubWF4KFxuICAgICAgLy8gb25seSBvbmUgZGVwdGhcbiAgICAgIGRlcHRoU2l6ZSA9PT0gMSA/IDAgOlxuICAgICAgLy8gaW5zaWRlIGEgYm91bmRpbmcgYm94LCBubyBuZWVkIGZvciBsZWZ0ICYgcmlnaHQgcGFkZGluZ1xuICAgICAgaGFzQm91bmRpbmdCb3ggPyAoYmIudyAtIG9wdGlvbnMucGFkZGluZyAqIDIgLSBhdmVOb2RlU2l6ZS53KSAvICgob3B0aW9ucy5ncmlkID8gbWF4RGVwdGhTaXplIDogZGVwdGhTaXplKSAtIDEpIDogKGJiLncgLSBvcHRpb25zLnBhZGRpbmcgKiAyIC0gYXZlTm9kZVNpemUudykgLyAoKG9wdGlvbnMuZ3JpZCA/IG1heERlcHRoU2l6ZSA6IGRlcHRoU2l6ZSkgKyAxKSwgbWluRGlzdGFuY2UpO1xuICAgICAgdmFyIGVwb3MgPSB7XG4gICAgICAgIHg6IGNlbnRlci54ICsgKGluZGV4ICsgMSAtIChkZXB0aFNpemUgKyAxKSAvIDIpICogZGlzdGFuY2VYLFxuICAgICAgICB5OiBjZW50ZXIueSArIChkZXB0aCArIDEgLSAoZGVwdGhzTGVuICsgMSkgLyAyKSAqIGRpc3RhbmNlWVxuICAgICAgfTtcbiAgICAgIHJldHVybiBlcG9zO1xuICAgIH1cbiAgfTtcbiAgZWxlcy5ub2RlcygpLmxheW91dFBvc2l0aW9ucyh0aGlzLCBvcHRpb25zLCBnZXRQb3NpdGlvbik7XG4gIHJldHVybiB0aGlzOyAvLyBjaGFpbmluZ1xufTtcblxudmFyIGRlZmF1bHRzJDYgPSB7XG4gIGZpdDogdHJ1ZSxcbiAgLy8gd2hldGhlciB0byBmaXQgdGhlIHZpZXdwb3J0IHRvIHRoZSBncmFwaFxuICBwYWRkaW5nOiAzMCxcbiAgLy8gdGhlIHBhZGRpbmcgb24gZml0XG4gIGJvdW5kaW5nQm94OiB1bmRlZmluZWQsXG4gIC8vIGNvbnN0cmFpbiBsYXlvdXQgYm91bmRzOyB7IHgxLCB5MSwgeDIsIHkyIH0gb3IgeyB4MSwgeTEsIHcsIGggfVxuICBhdm9pZE92ZXJsYXA6IHRydWUsXG4gIC8vIHByZXZlbnRzIG5vZGUgb3ZlcmxhcCwgbWF5IG92ZXJmbG93IGJvdW5kaW5nQm94IGFuZCByYWRpdXMgaWYgbm90IGVub3VnaCBzcGFjZVxuICBub2RlRGltZW5zaW9uc0luY2x1ZGVMYWJlbHM6IGZhbHNlLFxuICAvLyBFeGNsdWRlcyB0aGUgbGFiZWwgd2hlbiBjYWxjdWxhdGluZyBub2RlIGJvdW5kaW5nIGJveGVzIGZvciB0aGUgbGF5b3V0IGFsZ29yaXRobVxuICBzcGFjaW5nRmFjdG9yOiB1bmRlZmluZWQsXG4gIC8vIEFwcGxpZXMgYSBtdWx0aXBsaWNhdGl2ZSBmYWN0b3IgKD4wKSB0byBleHBhbmQgb3IgY29tcHJlc3MgdGhlIG92ZXJhbGwgYXJlYSB0aGF0IHRoZSBub2RlcyB0YWtlIHVwXG4gIHJhZGl1czogdW5kZWZpbmVkLFxuICAvLyB0aGUgcmFkaXVzIG9mIHRoZSBjaXJjbGVcbiAgc3RhcnRBbmdsZTogMyAvIDIgKiBNYXRoLlBJLFxuICAvLyB3aGVyZSBub2RlcyBzdGFydCBpbiByYWRpYW5zXG4gIHN3ZWVwOiB1bmRlZmluZWQsXG4gIC8vIGhvdyBtYW55IHJhZGlhbnMgc2hvdWxkIGJlIGJldHdlZW4gdGhlIGZpcnN0IGFuZCBsYXN0IG5vZGUgKGRlZmF1bHRzIHRvIGZ1bGwgY2lyY2xlKVxuICBjbG9ja3dpc2U6IHRydWUsXG4gIC8vIHdoZXRoZXIgdGhlIGxheW91dCBzaG91bGQgZ28gY2xvY2t3aXNlICh0cnVlKSBvciBjb3VudGVyY2xvY2t3aXNlL2FudGljbG9ja3dpc2UgKGZhbHNlKVxuICBzb3J0OiB1bmRlZmluZWQsXG4gIC8vIGEgc29ydGluZyBmdW5jdGlvbiB0byBvcmRlciB0aGUgbm9kZXM7IGUuZy4gZnVuY3Rpb24oYSwgYil7IHJldHVybiBhLmRhdGEoJ3dlaWdodCcpIC0gYi5kYXRhKCd3ZWlnaHQnKSB9XG4gIGFuaW1hdGU6IGZhbHNlLFxuICAvLyB3aGV0aGVyIHRvIHRyYW5zaXRpb24gdGhlIG5vZGUgcG9zaXRpb25zXG4gIGFuaW1hdGlvbkR1cmF0aW9uOiA1MDAsXG4gIC8vIGR1cmF0aW9uIG9mIGFuaW1hdGlvbiBpbiBtcyBpZiBlbmFibGVkXG4gIGFuaW1hdGlvbkVhc2luZzogdW5kZWZpbmVkLFxuICAvLyBlYXNpbmcgb2YgYW5pbWF0aW9uIGlmIGVuYWJsZWRcbiAgYW5pbWF0ZUZpbHRlcjogZnVuY3Rpb24gYW5pbWF0ZUZpbHRlcihub2RlLCBpKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH0sXG4gIC8vIGEgZnVuY3Rpb24gdGhhdCBkZXRlcm1pbmVzIHdoZXRoZXIgdGhlIG5vZGUgc2hvdWxkIGJlIGFuaW1hdGVkLiAgQWxsIG5vZGVzIGFuaW1hdGVkIGJ5IGRlZmF1bHQgb24gYW5pbWF0ZSBlbmFibGVkLiAgTm9uLWFuaW1hdGVkIG5vZGVzIGFyZSBwb3NpdGlvbmVkIGltbWVkaWF0ZWx5IHdoZW4gdGhlIGxheW91dCBzdGFydHNcbiAgcmVhZHk6IHVuZGVmaW5lZCxcbiAgLy8gY2FsbGJhY2sgb24gbGF5b3V0cmVhZHlcbiAgc3RvcDogdW5kZWZpbmVkLFxuICAvLyBjYWxsYmFjayBvbiBsYXlvdXRzdG9wXG4gIHRyYW5zZm9ybTogZnVuY3Rpb24gdHJhbnNmb3JtKG5vZGUsIHBvc2l0aW9uKSB7XG4gICAgcmV0dXJuIHBvc2l0aW9uO1xuICB9IC8vIHRyYW5zZm9ybSBhIGdpdmVuIG5vZGUgcG9zaXRpb24uIFVzZWZ1bCBmb3IgY2hhbmdpbmcgZmxvdyBkaXJlY3Rpb24gaW4gZGlzY3JldGUgbGF5b3V0cyBcbn07XG5mdW5jdGlvbiBDaXJjbGVMYXlvdXQob3B0aW9ucykge1xuICB0aGlzLm9wdGlvbnMgPSBleHRlbmQoe30sIGRlZmF1bHRzJDYsIG9wdGlvbnMpO1xufVxuQ2lyY2xlTGF5b3V0LnByb3RvdHlwZS5ydW4gPSBmdW5jdGlvbiAoKSB7XG4gIHZhciBwYXJhbXMgPSB0aGlzLm9wdGlvbnM7XG4gIHZhciBvcHRpb25zID0gcGFyYW1zO1xuICB2YXIgY3kgPSBwYXJhbXMuY3k7XG4gIHZhciBlbGVzID0gb3B0aW9ucy5lbGVzO1xuICB2YXIgY2xvY2t3aXNlID0gb3B0aW9ucy5jb3VudGVyY2xvY2t3aXNlICE9PSB1bmRlZmluZWQgPyAhb3B0aW9ucy5jb3VudGVyY2xvY2t3aXNlIDogb3B0aW9ucy5jbG9ja3dpc2U7XG4gIHZhciBub2RlcyA9IGVsZXMubm9kZXMoKS5ub3QoJzpwYXJlbnQnKTtcbiAgaWYgKG9wdGlvbnMuc29ydCkge1xuICAgIG5vZGVzID0gbm9kZXMuc29ydChvcHRpb25zLnNvcnQpO1xuICB9XG4gIHZhciBiYiA9IG1ha2VCb3VuZGluZ0JveChvcHRpb25zLmJvdW5kaW5nQm94ID8gb3B0aW9ucy5ib3VuZGluZ0JveCA6IHtcbiAgICB4MTogMCxcbiAgICB5MTogMCxcbiAgICB3OiBjeS53aWR0aCgpLFxuICAgIGg6IGN5LmhlaWdodCgpXG4gIH0pO1xuICB2YXIgY2VudGVyID0ge1xuICAgIHg6IGJiLngxICsgYmIudyAvIDIsXG4gICAgeTogYmIueTEgKyBiYi5oIC8gMlxuICB9O1xuICB2YXIgc3dlZXAgPSBvcHRpb25zLnN3ZWVwID09PSB1bmRlZmluZWQgPyAyICogTWF0aC5QSSAtIDIgKiBNYXRoLlBJIC8gbm9kZXMubGVuZ3RoIDogb3B0aW9ucy5zd2VlcDtcbiAgdmFyIGRUaGV0YSA9IHN3ZWVwIC8gTWF0aC5tYXgoMSwgbm9kZXMubGVuZ3RoIC0gMSk7XG4gIHZhciByO1xuICB2YXIgbWluRGlzdGFuY2UgPSAwO1xuICBmb3IgKHZhciBpID0gMDsgaSA8IG5vZGVzLmxlbmd0aDsgaSsrKSB7XG4gICAgdmFyIG4gPSBub2Rlc1tpXTtcbiAgICB2YXIgbmJiID0gbi5sYXlvdXREaW1lbnNpb25zKG9wdGlvbnMpO1xuICAgIHZhciB3ID0gbmJiLnc7XG4gICAgdmFyIGggPSBuYmIuaDtcbiAgICBtaW5EaXN0YW5jZSA9IE1hdGgubWF4KG1pbkRpc3RhbmNlLCB3LCBoKTtcbiAgfVxuICBpZiAobnVtYmVyJDEob3B0aW9ucy5yYWRpdXMpKSB7XG4gICAgciA9IG9wdGlvbnMucmFkaXVzO1xuICB9IGVsc2UgaWYgKG5vZGVzLmxlbmd0aCA8PSAxKSB7XG4gICAgciA9IDA7XG4gIH0gZWxzZSB7XG4gICAgciA9IE1hdGgubWluKGJiLmgsIGJiLncpIC8gMiAtIG1pbkRpc3RhbmNlO1xuICB9XG5cbiAgLy8gY2FsY3VsYXRlIHRoZSByYWRpdXNcbiAgaWYgKG5vZGVzLmxlbmd0aCA+IDEgJiYgb3B0aW9ucy5hdm9pZE92ZXJsYXApIHtcbiAgICAvLyBidXQgb25seSBpZiBtb3JlIHRoYW4gb25lIG5vZGUgKGNhbid0IG92ZXJsYXApXG4gICAgbWluRGlzdGFuY2UgKj0gMS43NTsgLy8ganVzdCB0byBoYXZlIHNvbWUgbmljZSBzcGFjaW5nXG5cbiAgICB2YXIgZGNvcyA9IE1hdGguY29zKGRUaGV0YSkgLSBNYXRoLmNvcygwKTtcbiAgICB2YXIgZHNpbiA9IE1hdGguc2luKGRUaGV0YSkgLSBNYXRoLnNpbigwKTtcbiAgICB2YXIgck1pbiA9IE1hdGguc3FydChtaW5EaXN0YW5jZSAqIG1pbkRpc3RhbmNlIC8gKGRjb3MgKiBkY29zICsgZHNpbiAqIGRzaW4pKTsgLy8gcy50LiBubyBub2RlcyBvdmVybGFwcGluZ1xuICAgIHIgPSBNYXRoLm1heChyTWluLCByKTtcbiAgfVxuICB2YXIgZ2V0UG9zID0gZnVuY3Rpb24gZ2V0UG9zKGVsZSwgaSkge1xuICAgIHZhciB0aGV0YSA9IG9wdGlvbnMuc3RhcnRBbmdsZSArIGkgKiBkVGhldGEgKiAoY2xvY2t3aXNlID8gMSA6IC0xKTtcbiAgICB2YXIgcnggPSByICogTWF0aC5jb3ModGhldGEpO1xuICAgIHZhciByeSA9IHIgKiBNYXRoLnNpbih0aGV0YSk7XG4gICAgdmFyIHBvcyA9IHtcbiAgICAgIHg6IGNlbnRlci54ICsgcngsXG4gICAgICB5OiBjZW50ZXIueSArIHJ5XG4gICAgfTtcbiAgICByZXR1cm4gcG9zO1xuICB9O1xuICBlbGVzLm5vZGVzKCkubGF5b3V0UG9zaXRpb25zKHRoaXMsIG9wdGlvbnMsIGdldFBvcyk7XG4gIHJldHVybiB0aGlzOyAvLyBjaGFpbmluZ1xufTtcblxudmFyIGRlZmF1bHRzJDUgPSB7XG4gIGZpdDogdHJ1ZSxcbiAgLy8gd2hldGhlciB0byBmaXQgdGhlIHZpZXdwb3J0IHRvIHRoZSBncmFwaFxuICBwYWRkaW5nOiAzMCxcbiAgLy8gdGhlIHBhZGRpbmcgb24gZml0XG4gIHN0YXJ0QW5nbGU6IDMgLyAyICogTWF0aC5QSSxcbiAgLy8gd2hlcmUgbm9kZXMgc3RhcnQgaW4gcmFkaWFuc1xuICBzd2VlcDogdW5kZWZpbmVkLFxuICAvLyBob3cgbWFueSByYWRpYW5zIHNob3VsZCBiZSBiZXR3ZWVuIHRoZSBmaXJzdCBhbmQgbGFzdCBub2RlIChkZWZhdWx0cyB0byBmdWxsIGNpcmNsZSlcbiAgY2xvY2t3aXNlOiB0cnVlLFxuICAvLyB3aGV0aGVyIHRoZSBsYXlvdXQgc2hvdWxkIGdvIGNsb2Nrd2lzZSAodHJ1ZSkgb3IgY291bnRlcmNsb2Nrd2lzZS9hbnRpY2xvY2t3aXNlIChmYWxzZSlcbiAgZXF1aWRpc3RhbnQ6IGZhbHNlLFxuICAvLyB3aGV0aGVyIGxldmVscyBoYXZlIGFuIGVxdWFsIHJhZGlhbCBkaXN0YW5jZSBiZXR3ZW4gdGhlbSwgbWF5IGNhdXNlIGJvdW5kaW5nIGJveCBvdmVyZmxvd1xuICBtaW5Ob2RlU3BhY2luZzogMTAsXG4gIC8vIG1pbiBzcGFjaW5nIGJldHdlZW4gb3V0c2lkZSBvZiBub2RlcyAodXNlZCBmb3IgcmFkaXVzIGFkanVzdG1lbnQpXG4gIGJvdW5kaW5nQm94OiB1bmRlZmluZWQsXG4gIC8vIGNvbnN0cmFpbiBsYXlvdXQgYm91bmRzOyB7IHgxLCB5MSwgeDIsIHkyIH0gb3IgeyB4MSwgeTEsIHcsIGggfVxuICBhdm9pZE92ZXJsYXA6IHRydWUsXG4gIC8vIHByZXZlbnRzIG5vZGUgb3ZlcmxhcCwgbWF5IG92ZXJmbG93IGJvdW5kaW5nQm94IGlmIG5vdCBlbm91Z2ggc3BhY2VcbiAgbm9kZURpbWVuc2lvbnNJbmNsdWRlTGFiZWxzOiBmYWxzZSxcbiAgLy8gRXhjbHVkZXMgdGhlIGxhYmVsIHdoZW4gY2FsY3VsYXRpbmcgbm9kZSBib3VuZGluZyBib3hlcyBmb3IgdGhlIGxheW91dCBhbGdvcml0aG1cbiAgaGVpZ2h0OiB1bmRlZmluZWQsXG4gIC8vIGhlaWdodCBvZiBsYXlvdXQgYXJlYSAob3ZlcnJpZGVzIGNvbnRhaW5lciBoZWlnaHQpXG4gIHdpZHRoOiB1bmRlZmluZWQsXG4gIC8vIHdpZHRoIG9mIGxheW91dCBhcmVhIChvdmVycmlkZXMgY29udGFpbmVyIHdpZHRoKVxuICBzcGFjaW5nRmFjdG9yOiB1bmRlZmluZWQsXG4gIC8vIEFwcGxpZXMgYSBtdWx0aXBsaWNhdGl2ZSBmYWN0b3IgKD4wKSB0byBleHBhbmQgb3IgY29tcHJlc3MgdGhlIG92ZXJhbGwgYXJlYSB0aGF0IHRoZSBub2RlcyB0YWtlIHVwXG4gIGNvbmNlbnRyaWM6IGZ1bmN0aW9uIGNvbmNlbnRyaWMobm9kZSkge1xuICAgIC8vIHJldHVybnMgbnVtZXJpYyB2YWx1ZSBmb3IgZWFjaCBub2RlLCBwbGFjaW5nIGhpZ2hlciBub2RlcyBpbiBsZXZlbHMgdG93YXJkcyB0aGUgY2VudHJlXG4gICAgcmV0dXJuIG5vZGUuZGVncmVlKCk7XG4gIH0sXG4gIGxldmVsV2lkdGg6IGZ1bmN0aW9uIGxldmVsV2lkdGgobm9kZXMpIHtcbiAgICAvLyB0aGUgdmFyaWF0aW9uIG9mIGNvbmNlbnRyaWMgdmFsdWVzIGluIGVhY2ggbGV2ZWxcbiAgICByZXR1cm4gbm9kZXMubWF4RGVncmVlKCkgLyA0O1xuICB9LFxuICBhbmltYXRlOiBmYWxzZSxcbiAgLy8gd2hldGhlciB0byB0cmFuc2l0aW9uIHRoZSBub2RlIHBvc2l0aW9uc1xuICBhbmltYXRpb25EdXJhdGlvbjogNTAwLFxuICAvLyBkdXJhdGlvbiBvZiBhbmltYXRpb24gaW4gbXMgaWYgZW5hYmxlZFxuICBhbmltYXRpb25FYXNpbmc6IHVuZGVmaW5lZCxcbiAgLy8gZWFzaW5nIG9mIGFuaW1hdGlvbiBpZiBlbmFibGVkXG4gIGFuaW1hdGVGaWx0ZXI6IGZ1bmN0aW9uIGFuaW1hdGVGaWx0ZXIobm9kZSwgaSkge1xuICAgIHJldHVybiB0cnVlO1xuICB9LFxuICAvLyBhIGZ1bmN0aW9uIHRoYXQgZGV0ZXJtaW5lcyB3aGV0aGVyIHRoZSBub2RlIHNob3VsZCBiZSBhbmltYXRlZC4gIEFsbCBub2RlcyBhbmltYXRlZCBieSBkZWZhdWx0IG9uIGFuaW1hdGUgZW5hYmxlZC4gIE5vbi1hbmltYXRlZCBub2RlcyBhcmUgcG9zaXRpb25lZCBpbW1lZGlhdGVseSB3aGVuIHRoZSBsYXlvdXQgc3RhcnRzXG4gIHJlYWR5OiB1bmRlZmluZWQsXG4gIC8vIGNhbGxiYWNrIG9uIGxheW91dHJlYWR5XG4gIHN0b3A6IHVuZGVmaW5lZCxcbiAgLy8gY2FsbGJhY2sgb24gbGF5b3V0c3RvcFxuICB0cmFuc2Zvcm06IGZ1bmN0aW9uIHRyYW5zZm9ybShub2RlLCBwb3NpdGlvbikge1xuICAgIHJldHVybiBwb3NpdGlvbjtcbiAgfSAvLyB0cmFuc2Zvcm0gYSBnaXZlbiBub2RlIHBvc2l0aW9uLiBVc2VmdWwgZm9yIGNoYW5naW5nIGZsb3cgZGlyZWN0aW9uIGluIGRpc2NyZXRlIGxheW91dHNcbn07XG5mdW5jdGlvbiBDb25jZW50cmljTGF5b3V0KG9wdGlvbnMpIHtcbiAgdGhpcy5vcHRpb25zID0gZXh0ZW5kKHt9LCBkZWZhdWx0cyQ1LCBvcHRpb25zKTtcbn1cbkNvbmNlbnRyaWNMYXlvdXQucHJvdG90eXBlLnJ1biA9IGZ1bmN0aW9uICgpIHtcbiAgdmFyIHBhcmFtcyA9IHRoaXMub3B0aW9ucztcbiAgdmFyIG9wdGlvbnMgPSBwYXJhbXM7XG4gIHZhciBjbG9ja3dpc2UgPSBvcHRpb25zLmNvdW50ZXJjbG9ja3dpc2UgIT09IHVuZGVmaW5lZCA/ICFvcHRpb25zLmNvdW50ZXJjbG9ja3dpc2UgOiBvcHRpb25zLmNsb2Nrd2lzZTtcbiAgdmFyIGN5ID0gcGFyYW1zLmN5O1xuICB2YXIgZWxlcyA9IG9wdGlvbnMuZWxlcztcbiAgdmFyIG5vZGVzID0gZWxlcy5ub2RlcygpLm5vdCgnOnBhcmVudCcpO1xuICB2YXIgYmIgPSBtYWtlQm91bmRpbmdCb3gob3B0aW9ucy5ib3VuZGluZ0JveCA/IG9wdGlvbnMuYm91bmRpbmdCb3ggOiB7XG4gICAgeDE6IDAsXG4gICAgeTE6IDAsXG4gICAgdzogY3kud2lkdGgoKSxcbiAgICBoOiBjeS5oZWlnaHQoKVxuICB9KTtcbiAgdmFyIGNlbnRlciA9IHtcbiAgICB4OiBiYi54MSArIGJiLncgLyAyLFxuICAgIHk6IGJiLnkxICsgYmIuaCAvIDJcbiAgfTtcbiAgdmFyIG5vZGVWYWx1ZXMgPSBbXTsgLy8geyBub2RlLCB2YWx1ZSB9XG4gIHZhciBtYXhOb2RlU2l6ZSA9IDA7XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgbm9kZXMubGVuZ3RoOyBpKyspIHtcbiAgICB2YXIgbm9kZSA9IG5vZGVzW2ldO1xuICAgIHZhciB2YWx1ZSA9IHVuZGVmaW5lZDtcblxuICAgIC8vIGNhbGN1bGF0ZSB0aGUgbm9kZSB2YWx1ZVxuICAgIHZhbHVlID0gb3B0aW9ucy5jb25jZW50cmljKG5vZGUpO1xuICAgIG5vZGVWYWx1ZXMucHVzaCh7XG4gICAgICB2YWx1ZTogdmFsdWUsXG4gICAgICBub2RlOiBub2RlXG4gICAgfSk7XG5cbiAgICAvLyBmb3Igc3R5bGUgbWFwcGluZ1xuICAgIG5vZGUuX3ByaXZhdGUuc2NyYXRjaC5jb25jZW50cmljID0gdmFsdWU7XG4gIH1cblxuICAvLyBpbiBjYXNlIHdlIHVzZWQgdGhlIGBjb25jZW50cmljYCBpbiBzdHlsZVxuICBub2Rlcy51cGRhdGVTdHlsZSgpO1xuXG4gIC8vIGNhbGN1bGF0ZSBtYXggc2l6ZSBub3cgYmFzZWQgb24gcG90ZW50aWFsbHkgdXBkYXRlZCBtYXBwZXJzXG4gIGZvciAodmFyIF9pID0gMDsgX2kgPCBub2Rlcy5sZW5ndGg7IF9pKyspIHtcbiAgICB2YXIgX25vZGUgPSBub2Rlc1tfaV07XG4gICAgdmFyIG5iYiA9IF9ub2RlLmxheW91dERpbWVuc2lvbnMob3B0aW9ucyk7XG4gICAgbWF4Tm9kZVNpemUgPSBNYXRoLm1heChtYXhOb2RlU2l6ZSwgbmJiLncsIG5iYi5oKTtcbiAgfVxuXG4gIC8vIHNvcnQgbm9kZSB2YWx1ZXMgaW4gZGVzY3JlYXNpbmcgb3JkZXJcbiAgbm9kZVZhbHVlcy5zb3J0KGZ1bmN0aW9uIChhLCBiKSB7XG4gICAgcmV0dXJuIGIudmFsdWUgLSBhLnZhbHVlO1xuICB9KTtcbiAgdmFyIGxldmVsV2lkdGggPSBvcHRpb25zLmxldmVsV2lkdGgobm9kZXMpO1xuXG4gIC8vIHB1dCB0aGUgdmFsdWVzIGludG8gbGV2ZWxzXG4gIHZhciBsZXZlbHMgPSBbW11dO1xuICB2YXIgY3VycmVudExldmVsID0gbGV2ZWxzWzBdO1xuICBmb3IgKHZhciBfaTIgPSAwOyBfaTIgPCBub2RlVmFsdWVzLmxlbmd0aDsgX2kyKyspIHtcbiAgICB2YXIgdmFsID0gbm9kZVZhbHVlc1tfaTJdO1xuICAgIGlmIChjdXJyZW50TGV2ZWwubGVuZ3RoID4gMCkge1xuICAgICAgdmFyIGRpZmYgPSBNYXRoLmFicyhjdXJyZW50TGV2ZWxbMF0udmFsdWUgLSB2YWwudmFsdWUpO1xuICAgICAgaWYgKGRpZmYgPj0gbGV2ZWxXaWR0aCkge1xuICAgICAgICBjdXJyZW50TGV2ZWwgPSBbXTtcbiAgICAgICAgbGV2ZWxzLnB1c2goY3VycmVudExldmVsKTtcbiAgICAgIH1cbiAgICB9XG4gICAgY3VycmVudExldmVsLnB1c2godmFsKTtcbiAgfVxuXG4gIC8vIGNyZWF0ZSBwb3NpdGlvbnMgZnJvbSBsZXZlbHNcblxuICB2YXIgbWluRGlzdCA9IG1heE5vZGVTaXplICsgb3B0aW9ucy5taW5Ob2RlU3BhY2luZzsgLy8gbWluIGRpc3QgYmV0d2VlbiBub2Rlc1xuXG4gIGlmICghb3B0aW9ucy5hdm9pZE92ZXJsYXApIHtcbiAgICAvLyB0aGVuIHN0cmljdGx5IGNvbnN0cmFpbiB0byBiYlxuICAgIHZhciBmaXJzdEx2bEhhc011bHRpID0gbGV2ZWxzLmxlbmd0aCA+IDAgJiYgbGV2ZWxzWzBdLmxlbmd0aCA+IDE7XG4gICAgdmFyIG1heFIgPSBNYXRoLm1pbihiYi53LCBiYi5oKSAvIDIgLSBtaW5EaXN0O1xuICAgIHZhciByU3RlcCA9IG1heFIgLyAobGV2ZWxzLmxlbmd0aCArIGZpcnN0THZsSGFzTXVsdGkgPyAxIDogMCk7XG4gICAgbWluRGlzdCA9IE1hdGgubWluKG1pbkRpc3QsIHJTdGVwKTtcbiAgfVxuXG4gIC8vIGZpbmQgdGhlIG1ldHJpY3MgZm9yIGVhY2ggbGV2ZWxcbiAgdmFyIHIgPSAwO1xuICBmb3IgKHZhciBfaTMgPSAwOyBfaTMgPCBsZXZlbHMubGVuZ3RoOyBfaTMrKykge1xuICAgIHZhciBsZXZlbCA9IGxldmVsc1tfaTNdO1xuICAgIHZhciBzd2VlcCA9IG9wdGlvbnMuc3dlZXAgPT09IHVuZGVmaW5lZCA/IDIgKiBNYXRoLlBJIC0gMiAqIE1hdGguUEkgLyBsZXZlbC5sZW5ndGggOiBvcHRpb25zLnN3ZWVwO1xuICAgIHZhciBkVGhldGEgPSBsZXZlbC5kVGhldGEgPSBzd2VlcCAvIE1hdGgubWF4KDEsIGxldmVsLmxlbmd0aCAtIDEpO1xuXG4gICAgLy8gY2FsY3VsYXRlIHRoZSByYWRpdXNcbiAgICBpZiAobGV2ZWwubGVuZ3RoID4gMSAmJiBvcHRpb25zLmF2b2lkT3ZlcmxhcCkge1xuICAgICAgLy8gYnV0IG9ubHkgaWYgbW9yZSB0aGFuIG9uZSBub2RlIChjYW4ndCBvdmVybGFwKVxuICAgICAgdmFyIGRjb3MgPSBNYXRoLmNvcyhkVGhldGEpIC0gTWF0aC5jb3MoMCk7XG4gICAgICB2YXIgZHNpbiA9IE1hdGguc2luKGRUaGV0YSkgLSBNYXRoLnNpbigwKTtcbiAgICAgIHZhciByTWluID0gTWF0aC5zcXJ0KG1pbkRpc3QgKiBtaW5EaXN0IC8gKGRjb3MgKiBkY29zICsgZHNpbiAqIGRzaW4pKTsgLy8gcy50LiBubyBub2RlcyBvdmVybGFwcGluZ1xuXG4gICAgICByID0gTWF0aC5tYXgock1pbiwgcik7XG4gICAgfVxuICAgIGxldmVsLnIgPSByO1xuICAgIHIgKz0gbWluRGlzdDtcbiAgfVxuICBpZiAob3B0aW9ucy5lcXVpZGlzdGFudCkge1xuICAgIHZhciByRGVsdGFNYXggPSAwO1xuICAgIHZhciBfciA9IDA7XG4gICAgZm9yICh2YXIgX2k0ID0gMDsgX2k0IDwgbGV2ZWxzLmxlbmd0aDsgX2k0KyspIHtcbiAgICAgIHZhciBfbGV2ZWwgPSBsZXZlbHNbX2k0XTtcbiAgICAgIHZhciByRGVsdGEgPSBfbGV2ZWwuciAtIF9yO1xuICAgICAgckRlbHRhTWF4ID0gTWF0aC5tYXgockRlbHRhTWF4LCByRGVsdGEpO1xuICAgIH1cbiAgICBfciA9IDA7XG4gICAgZm9yICh2YXIgX2k1ID0gMDsgX2k1IDwgbGV2ZWxzLmxlbmd0aDsgX2k1KyspIHtcbiAgICAgIHZhciBfbGV2ZWwyID0gbGV2ZWxzW19pNV07XG4gICAgICBpZiAoX2k1ID09PSAwKSB7XG4gICAgICAgIF9yID0gX2xldmVsMi5yO1xuICAgICAgfVxuICAgICAgX2xldmVsMi5yID0gX3I7XG4gICAgICBfciArPSByRGVsdGFNYXg7XG4gICAgfVxuICB9XG5cbiAgLy8gY2FsY3VsYXRlIHRoZSBub2RlIHBvc2l0aW9uc1xuICB2YXIgcG9zID0ge307IC8vIGlkID0+IHBvc2l0aW9uXG4gIGZvciAodmFyIF9pNiA9IDA7IF9pNiA8IGxldmVscy5sZW5ndGg7IF9pNisrKSB7XG4gICAgdmFyIF9sZXZlbDMgPSBsZXZlbHNbX2k2XTtcbiAgICB2YXIgX2RUaGV0YSA9IF9sZXZlbDMuZFRoZXRhO1xuICAgIHZhciBfcjIgPSBfbGV2ZWwzLnI7XG4gICAgZm9yICh2YXIgaiA9IDA7IGogPCBfbGV2ZWwzLmxlbmd0aDsgaisrKSB7XG4gICAgICB2YXIgX3ZhbCA9IF9sZXZlbDNbal07XG4gICAgICB2YXIgdGhldGEgPSBvcHRpb25zLnN0YXJ0QW5nbGUgKyAoY2xvY2t3aXNlID8gMSA6IC0xKSAqIF9kVGhldGEgKiBqO1xuICAgICAgdmFyIHAgPSB7XG4gICAgICAgIHg6IGNlbnRlci54ICsgX3IyICogTWF0aC5jb3ModGhldGEpLFxuICAgICAgICB5OiBjZW50ZXIueSArIF9yMiAqIE1hdGguc2luKHRoZXRhKVxuICAgICAgfTtcbiAgICAgIHBvc1tfdmFsLm5vZGUuaWQoKV0gPSBwO1xuICAgIH1cbiAgfVxuXG4gIC8vIHBvc2l0aW9uIHRoZSBub2Rlc1xuICBlbGVzLm5vZGVzKCkubGF5b3V0UG9zaXRpb25zKHRoaXMsIG9wdGlvbnMsIGZ1bmN0aW9uIChlbGUpIHtcbiAgICB2YXIgaWQgPSBlbGUuaWQoKTtcbiAgICByZXR1cm4gcG9zW2lkXTtcbiAgfSk7XG4gIHJldHVybiB0aGlzOyAvLyBjaGFpbmluZ1xufTtcblxuLypcblRoZSBDb1NFIGxheW91dCB3YXMgd3JpdHRlbiBieSBHZXJhcmRvIEh1Y2suXG5odHRwczovL3d3dy5saW5rZWRpbi5jb20vaW4vZ2VyYXJkb2h1Y2svXG5cbkJhc2VkIG9uIHRoZSBmb2xsb3dpbmcgYXJ0aWNsZTpcbmh0dHA6Ly9kbC5hY20ub3JnL2NpdGF0aW9uLmNmbT9pZD0xNDk4MDQ3XG5cbk1vZGlmaWNhdGlvbnMgdHJhY2tlZCBvbiBHaXRodWIuXG4qL1xuXG52YXIgREVCVUc7XG5cbi8qKlxuICogQGJyaWVmIDogIGRlZmF1bHQgbGF5b3V0IG9wdGlvbnNcbiAqL1xudmFyIGRlZmF1bHRzJDQgPSB7XG4gIC8vIENhbGxlZCBvbiBgbGF5b3V0cmVhZHlgXG4gIHJlYWR5OiBmdW5jdGlvbiByZWFkeSgpIHt9LFxuICAvLyBDYWxsZWQgb24gYGxheW91dHN0b3BgXG4gIHN0b3A6IGZ1bmN0aW9uIHN0b3AoKSB7fSxcbiAgLy8gV2hldGhlciB0byBhbmltYXRlIHdoaWxlIHJ1bm5pbmcgdGhlIGxheW91dFxuICAvLyB0cnVlIDogQW5pbWF0ZSBjb250aW51b3VzbHkgYXMgdGhlIGxheW91dCBpcyBydW5uaW5nXG4gIC8vIGZhbHNlIDogSnVzdCBzaG93IHRoZSBlbmQgcmVzdWx0XG4gIC8vICdlbmQnIDogQW5pbWF0ZSB3aXRoIHRoZSBlbmQgcmVzdWx0LCBmcm9tIHRoZSBpbml0aWFsIHBvc2l0aW9ucyB0byB0aGUgZW5kIHBvc2l0aW9uc1xuICBhbmltYXRlOiB0cnVlLFxuICAvLyBFYXNpbmcgb2YgdGhlIGFuaW1hdGlvbiBmb3IgYW5pbWF0ZTonZW5kJ1xuICBhbmltYXRpb25FYXNpbmc6IHVuZGVmaW5lZCxcbiAgLy8gVGhlIGR1cmF0aW9uIG9mIHRoZSBhbmltYXRpb24gZm9yIGFuaW1hdGU6J2VuZCdcbiAgYW5pbWF0aW9uRHVyYXRpb246IHVuZGVmaW5lZCxcbiAgLy8gQSBmdW5jdGlvbiB0aGF0IGRldGVybWluZXMgd2hldGhlciB0aGUgbm9kZSBzaG91bGQgYmUgYW5pbWF0ZWRcbiAgLy8gQWxsIG5vZGVzIGFuaW1hdGVkIGJ5IGRlZmF1bHQgb24gYW5pbWF0ZSBlbmFibGVkXG4gIC8vIE5vbi1hbmltYXRlZCBub2RlcyBhcmUgcG9zaXRpb25lZCBpbW1lZGlhdGVseSB3aGVuIHRoZSBsYXlvdXQgc3RhcnRzXG4gIGFuaW1hdGVGaWx0ZXI6IGZ1bmN0aW9uIGFuaW1hdGVGaWx0ZXIobm9kZSwgaSkge1xuICAgIHJldHVybiB0cnVlO1xuICB9LFxuICAvLyBUaGUgbGF5b3V0IGFuaW1hdGVzIG9ubHkgYWZ0ZXIgdGhpcyBtYW55IG1pbGxpc2Vjb25kcyBmb3IgYW5pbWF0ZTp0cnVlXG4gIC8vIChwcmV2ZW50cyBmbGFzaGluZyBvbiBmYXN0IHJ1bnMpXG4gIGFuaW1hdGlvblRocmVzaG9sZDogMjUwLFxuICAvLyBOdW1iZXIgb2YgaXRlcmF0aW9ucyBiZXR3ZWVuIGNvbnNlY3V0aXZlIHNjcmVlbiBwb3NpdGlvbnMgdXBkYXRlXG4gIHJlZnJlc2g6IDIwLFxuICAvLyBXaGV0aGVyIHRvIGZpdCB0aGUgbmV0d29yayB2aWV3IGFmdGVyIHdoZW4gZG9uZVxuICBmaXQ6IHRydWUsXG4gIC8vIFBhZGRpbmcgb24gZml0XG4gIHBhZGRpbmc6IDMwLFxuICAvLyBDb25zdHJhaW4gbGF5b3V0IGJvdW5kczsgeyB4MSwgeTEsIHgyLCB5MiB9IG9yIHsgeDEsIHkxLCB3LCBoIH1cbiAgYm91bmRpbmdCb3g6IHVuZGVmaW5lZCxcbiAgLy8gRXhjbHVkZXMgdGhlIGxhYmVsIHdoZW4gY2FsY3VsYXRpbmcgbm9kZSBib3VuZGluZyBib3hlcyBmb3IgdGhlIGxheW91dCBhbGdvcml0aG1cbiAgbm9kZURpbWVuc2lvbnNJbmNsdWRlTGFiZWxzOiBmYWxzZSxcbiAgLy8gUmFuZG9taXplIHRoZSBpbml0aWFsIHBvc2l0aW9ucyBvZiB0aGUgbm9kZXMgKHRydWUpIG9yIHVzZSBleGlzdGluZyBwb3NpdGlvbnMgKGZhbHNlKVxuICByYW5kb21pemU6IGZhbHNlLFxuICAvLyBFeHRyYSBzcGFjaW5nIGJldHdlZW4gY29tcG9uZW50cyBpbiBub24tY29tcG91bmQgZ3JhcGhzXG4gIGNvbXBvbmVudFNwYWNpbmc6IDQwLFxuICAvLyBOb2RlIHJlcHVsc2lvbiAobm9uIG92ZXJsYXBwaW5nKSBtdWx0aXBsaWVyXG4gIG5vZGVSZXB1bHNpb246IGZ1bmN0aW9uIG5vZGVSZXB1bHNpb24obm9kZSkge1xuICAgIHJldHVybiAyMDQ4O1xuICB9LFxuICAvLyBOb2RlIHJlcHVsc2lvbiAob3ZlcmxhcHBpbmcpIG11bHRpcGxpZXJcbiAgbm9kZU92ZXJsYXA6IDQsXG4gIC8vIElkZWFsIGVkZ2UgKG5vbiBuZXN0ZWQpIGxlbmd0aFxuICBpZGVhbEVkZ2VMZW5ndGg6IGZ1bmN0aW9uIGlkZWFsRWRnZUxlbmd0aChlZGdlKSB7XG4gICAgcmV0dXJuIDMyO1xuICB9LFxuICAvLyBEaXZpc29yIHRvIGNvbXB1dGUgZWRnZSBmb3JjZXNcbiAgZWRnZUVsYXN0aWNpdHk6IGZ1bmN0aW9uIGVkZ2VFbGFzdGljaXR5KGVkZ2UpIHtcbiAgICByZXR1cm4gMzI7XG4gIH0sXG4gIC8vIE5lc3RpbmcgZmFjdG9yIChtdWx0aXBsaWVyKSB0byBjb21wdXRlIGlkZWFsIGVkZ2UgbGVuZ3RoIGZvciBuZXN0ZWQgZWRnZXNcbiAgbmVzdGluZ0ZhY3RvcjogMS4yLFxuICAvLyBHcmF2aXR5IGZvcmNlIChjb25zdGFudClcbiAgZ3Jhdml0eTogMSxcbiAgLy8gTWF4aW11bSBudW1iZXIgb2YgaXRlcmF0aW9ucyB0byBwZXJmb3JtXG4gIG51bUl0ZXI6IDEwMDAsXG4gIC8vIEluaXRpYWwgdGVtcGVyYXR1cmUgKG1heGltdW0gbm9kZSBkaXNwbGFjZW1lbnQpXG4gIGluaXRpYWxUZW1wOiAxMDAwLFxuICAvLyBDb29saW5nIGZhY3RvciAoaG93IHRoZSB0ZW1wZXJhdHVyZSBpcyByZWR1Y2VkIGJldHdlZW4gY29uc2VjdXRpdmUgaXRlcmF0aW9uc1xuICBjb29saW5nRmFjdG9yOiAwLjk5LFxuICAvLyBMb3dlciB0ZW1wZXJhdHVyZSB0aHJlc2hvbGQgKGJlbG93IHRoaXMgcG9pbnQgdGhlIGxheW91dCB3aWxsIGVuZClcbiAgbWluVGVtcDogMS4wXG59O1xuXG4vKipcbiAqIEBicmllZiAgICAgICA6IGNvbnN0cnVjdG9yXG4gKiBAYXJnIG9wdGlvbnMgOiBvYmplY3QgY29udGFpbmluZyBsYXlvdXQgb3B0aW9uc1xuICovXG5mdW5jdGlvbiBDb3NlTGF5b3V0KG9wdGlvbnMpIHtcbiAgdGhpcy5vcHRpb25zID0gZXh0ZW5kKHt9LCBkZWZhdWx0cyQ0LCBvcHRpb25zKTtcbiAgdGhpcy5vcHRpb25zLmxheW91dCA9IHRoaXM7XG5cbiAgLy8gRXhjbHVkZSBhbnkgZWRnZSB0aGF0IGhhcyBhIHNvdXJjZSBvciB0YXJnZXQgbm9kZSB0aGF0IGlzIG5vdCBpbiB0aGUgc2V0IG9mIHBhc3NlZC1pbiBub2Rlc1xuICB2YXIgbm9kZXMgPSB0aGlzLm9wdGlvbnMuZWxlcy5ub2RlcygpO1xuICB2YXIgZWRnZXMgPSB0aGlzLm9wdGlvbnMuZWxlcy5lZGdlcygpO1xuICB2YXIgbm90RWRnZXMgPSBlZGdlcy5maWx0ZXIoZnVuY3Rpb24gKGUpIHtcbiAgICB2YXIgc291cmNlSWQgPSBlLnNvdXJjZSgpLmRhdGEoJ2lkJyk7XG4gICAgdmFyIHRhcmdldElkID0gZS50YXJnZXQoKS5kYXRhKCdpZCcpO1xuICAgIHZhciBoYXNTb3VyY2UgPSBub2Rlcy5zb21lKGZ1bmN0aW9uIChuKSB7XG4gICAgICByZXR1cm4gbi5kYXRhKCdpZCcpID09PSBzb3VyY2VJZDtcbiAgICB9KTtcbiAgICB2YXIgaGFzVGFyZ2V0ID0gbm9kZXMuc29tZShmdW5jdGlvbiAobikge1xuICAgICAgcmV0dXJuIG4uZGF0YSgnaWQnKSA9PT0gdGFyZ2V0SWQ7XG4gICAgfSk7XG4gICAgcmV0dXJuICFoYXNTb3VyY2UgfHwgIWhhc1RhcmdldDtcbiAgfSk7XG4gIHRoaXMub3B0aW9ucy5lbGVzID0gdGhpcy5vcHRpb25zLmVsZXMubm90KG5vdEVkZ2VzKTtcbn1cblxuLyoqXG4gKiBAYnJpZWYgOiBydW5zIHRoZSBsYXlvdXRcbiAqL1xuQ29zZUxheW91dC5wcm90b3R5cGUucnVuID0gZnVuY3Rpb24gKCkge1xuICB2YXIgb3B0aW9ucyA9IHRoaXMub3B0aW9ucztcbiAgdmFyIGN5ID0gb3B0aW9ucy5jeTtcbiAgdmFyIGxheW91dCA9IHRoaXM7XG4gIGxheW91dC5zdG9wcGVkID0gZmFsc2U7XG4gIGlmIChvcHRpb25zLmFuaW1hdGUgPT09IHRydWUgfHwgb3B0aW9ucy5hbmltYXRlID09PSBmYWxzZSkge1xuICAgIGxheW91dC5lbWl0KHtcbiAgICAgIHR5cGU6ICdsYXlvdXRzdGFydCcsXG4gICAgICBsYXlvdXQ6IGxheW91dFxuICAgIH0pO1xuICB9XG5cbiAgLy8gU2V0IERFQlVHIC0gR2xvYmFsIHZhcmlhYmxlXG4gIGlmICh0cnVlID09PSBvcHRpb25zLmRlYnVnKSB7XG4gICAgREVCVUcgPSB0cnVlO1xuICB9IGVsc2Uge1xuICAgIERFQlVHID0gZmFsc2U7XG4gIH1cblxuICAvLyBJbml0aWFsaXplIGxheW91dCBpbmZvXG4gIHZhciBsYXlvdXRJbmZvID0gY3JlYXRlTGF5b3V0SW5mbyhjeSwgbGF5b3V0LCBvcHRpb25zKTtcblxuICAvLyBTaG93IExheW91dEluZm8gY29udGVudHMgaWYgZGVidWdnaW5nXG4gIGlmIChERUJVRykge1xuICAgIHByaW50TGF5b3V0SW5mbyhsYXlvdXRJbmZvKTtcbiAgfVxuXG4gIC8vIElmIHJlcXVpcmVkLCByYW5kb21pemUgbm9kZSBwb3NpdGlvbnNcbiAgaWYgKG9wdGlvbnMucmFuZG9taXplKSB7XG4gICAgcmFuZG9taXplUG9zaXRpb25zKGxheW91dEluZm8pO1xuICB9XG4gIHZhciBzdGFydFRpbWUgPSBwZXJmb3JtYW5jZU5vdygpO1xuICB2YXIgcmVmcmVzaCA9IGZ1bmN0aW9uIHJlZnJlc2goKSB7XG4gICAgcmVmcmVzaFBvc2l0aW9ucyhsYXlvdXRJbmZvLCBjeSwgb3B0aW9ucyk7XG5cbiAgICAvLyBGaXQgdGhlIGdyYXBoIGlmIG5lY2Vzc2FyeVxuICAgIGlmICh0cnVlID09PSBvcHRpb25zLmZpdCkge1xuICAgICAgY3kuZml0KG9wdGlvbnMucGFkZGluZyk7XG4gICAgfVxuICB9O1xuICB2YXIgbWFpbkxvb3AgPSBmdW5jdGlvbiBtYWluTG9vcChpKSB7XG4gICAgaWYgKGxheW91dC5zdG9wcGVkIHx8IGkgPj0gb3B0aW9ucy5udW1JdGVyKSB7XG4gICAgICAvLyBsb2dEZWJ1ZyhcIkxheW91dCBtYW51YWxseSBzdG9wcGVkLiBTdG9wcGluZyBjb21wdXRhdGlvbiBpbiBzdGVwIFwiICsgaSk7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgLy8gRG8gb25lIHN0ZXAgaW4gdGhlIHBoaXNpY2FsIHNpbXVsYXRpb25cbiAgICBzdGVwKGxheW91dEluZm8sIG9wdGlvbnMpO1xuXG4gICAgLy8gVXBkYXRlIHRlbXBlcmF0dXJlXG4gICAgbGF5b3V0SW5mby50ZW1wZXJhdHVyZSA9IGxheW91dEluZm8udGVtcGVyYXR1cmUgKiBvcHRpb25zLmNvb2xpbmdGYWN0b3I7XG4gICAgLy8gbG9nRGVidWcoXCJOZXcgdGVtcGVyYXR1cmU6IFwiICsgbGF5b3V0SW5mby50ZW1wZXJhdHVyZSk7XG5cbiAgICBpZiAobGF5b3V0SW5mby50ZW1wZXJhdHVyZSA8IG9wdGlvbnMubWluVGVtcCkge1xuICAgICAgLy8gbG9nRGVidWcoXCJUZW1wZXJhdHVyZSBkcm9wIGJlbG93IG1pbmltdW0gdGhyZXNob2xkLiBTdG9wcGluZyBjb21wdXRhdGlvbiBpbiBzdGVwIFwiICsgaSk7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIHJldHVybiB0cnVlO1xuICB9O1xuICB2YXIgZG9uZSA9IGZ1bmN0aW9uIGRvbmUoKSB7XG4gICAgaWYgKG9wdGlvbnMuYW5pbWF0ZSA9PT0gdHJ1ZSB8fCBvcHRpb25zLmFuaW1hdGUgPT09IGZhbHNlKSB7XG4gICAgICByZWZyZXNoKCk7XG5cbiAgICAgIC8vIExheW91dCBoYXMgZmluaXNoZWRcbiAgICAgIGxheW91dC5vbmUoJ2xheW91dHN0b3AnLCBvcHRpb25zLnN0b3ApO1xuICAgICAgbGF5b3V0LmVtaXQoe1xuICAgICAgICB0eXBlOiAnbGF5b3V0c3RvcCcsXG4gICAgICAgIGxheW91dDogbGF5b3V0XG4gICAgICB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgdmFyIG5vZGVzID0gb3B0aW9ucy5lbGVzLm5vZGVzKCk7XG4gICAgICB2YXIgZ2V0U2NhbGVkUG9zID0gZ2V0U2NhbGVJbkJvdW5kc0ZuKGxheW91dEluZm8sIG9wdGlvbnMsIG5vZGVzKTtcbiAgICAgIG5vZGVzLmxheW91dFBvc2l0aW9ucyhsYXlvdXQsIG9wdGlvbnMsIGdldFNjYWxlZFBvcyk7XG4gICAgfVxuICB9O1xuICB2YXIgaSA9IDA7XG4gIHZhciBsb29wUmV0ID0gdHJ1ZTtcbiAgaWYgKG9wdGlvbnMuYW5pbWF0ZSA9PT0gdHJ1ZSkge1xuICAgIHZhciBfZnJhbWUgPSBmdW5jdGlvbiBmcmFtZSgpIHtcbiAgICAgIHZhciBmID0gMDtcbiAgICAgIHdoaWxlIChsb29wUmV0ICYmIGYgPCBvcHRpb25zLnJlZnJlc2gpIHtcbiAgICAgICAgbG9vcFJldCA9IG1haW5Mb29wKGkpO1xuICAgICAgICBpKys7XG4gICAgICAgIGYrKztcbiAgICAgIH1cbiAgICAgIGlmICghbG9vcFJldCkge1xuICAgICAgICAvLyBpdCdzIGRvbmVcbiAgICAgICAgc2VwYXJhdGVDb21wb25lbnRzKGxheW91dEluZm8sIG9wdGlvbnMpO1xuICAgICAgICBkb25lKCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB2YXIgbm93ID0gcGVyZm9ybWFuY2VOb3coKTtcbiAgICAgICAgaWYgKG5vdyAtIHN0YXJ0VGltZSA+PSBvcHRpb25zLmFuaW1hdGlvblRocmVzaG9sZCkge1xuICAgICAgICAgIHJlZnJlc2goKTtcbiAgICAgICAgfVxuICAgICAgICByZXF1ZXN0QW5pbWF0aW9uRnJhbWUoX2ZyYW1lKTtcbiAgICAgIH1cbiAgICB9O1xuICAgIF9mcmFtZSgpO1xuICB9IGVsc2Uge1xuICAgIHdoaWxlIChsb29wUmV0KSB7XG4gICAgICBsb29wUmV0ID0gbWFpbkxvb3AoaSk7XG4gICAgICBpKys7XG4gICAgfVxuICAgIHNlcGFyYXRlQ29tcG9uZW50cyhsYXlvdXRJbmZvLCBvcHRpb25zKTtcbiAgICBkb25lKCk7XG4gIH1cbiAgcmV0dXJuIHRoaXM7IC8vIGNoYWluaW5nXG59O1xuXG4vKipcbiAqIEBicmllZiA6IGNhbGxlZCBvbiBjb250aW51b3VzIGxheW91dHMgdG8gc3RvcCB0aGVtIGJlZm9yZSB0aGV5IGZpbmlzaFxuICovXG5Db3NlTGF5b3V0LnByb3RvdHlwZS5zdG9wID0gZnVuY3Rpb24gKCkge1xuICB0aGlzLnN0b3BwZWQgPSB0cnVlO1xuICBpZiAodGhpcy50aHJlYWQpIHtcbiAgICB0aGlzLnRocmVhZC5zdG9wKCk7XG4gIH1cbiAgdGhpcy5lbWl0KCdsYXlvdXRzdG9wJyk7XG4gIHJldHVybiB0aGlzOyAvLyBjaGFpbmluZ1xufTtcbkNvc2VMYXlvdXQucHJvdG90eXBlLmRlc3Ryb3kgPSBmdW5jdGlvbiAoKSB7XG4gIGlmICh0aGlzLnRocmVhZCkge1xuICAgIHRoaXMudGhyZWFkLnN0b3AoKTtcbiAgfVxuICByZXR1cm4gdGhpczsgLy8gY2hhaW5pbmdcbn07XG5cbi8qKlxuICogQGJyaWVmICAgICA6IENyZWF0ZXMgYW4gb2JqZWN0IHdoaWNoIGlzIGNvbnRhaW5zIGFsbCB0aGUgZGF0YVxuICogICAgICAgICAgICAgIHVzZWQgaW4gdGhlIGxheW91dCBwcm9jZXNzXG4gKiBAYXJnIGN5ICAgIDogY3l0b3NjYXBlLmpzIG9iamVjdFxuICogQHJldHVybiAgICA6IGxheW91dEluZm8gb2JqZWN0IGluaXRpYWxpemVkXG4gKi9cbnZhciBjcmVhdGVMYXlvdXRJbmZvID0gZnVuY3Rpb24gY3JlYXRlTGF5b3V0SW5mbyhjeSwgbGF5b3V0LCBvcHRpb25zKSB7XG4gIC8vIFNob3J0Y3V0XG4gIHZhciBlZGdlcyA9IG9wdGlvbnMuZWxlcy5lZGdlcygpO1xuICB2YXIgbm9kZXMgPSBvcHRpb25zLmVsZXMubm9kZXMoKTtcbiAgdmFyIGJiID0gbWFrZUJvdW5kaW5nQm94KG9wdGlvbnMuYm91bmRpbmdCb3ggPyBvcHRpb25zLmJvdW5kaW5nQm94IDoge1xuICAgIHgxOiAwLFxuICAgIHkxOiAwLFxuICAgIHc6IGN5LndpZHRoKCksXG4gICAgaDogY3kuaGVpZ2h0KClcbiAgfSk7XG4gIHZhciBsYXlvdXRJbmZvID0ge1xuICAgIGlzQ29tcG91bmQ6IGN5Lmhhc0NvbXBvdW5kTm9kZXMoKSxcbiAgICBsYXlvdXROb2RlczogW10sXG4gICAgaWRUb0luZGV4OiB7fSxcbiAgICBub2RlU2l6ZTogbm9kZXMuc2l6ZSgpLFxuICAgIGdyYXBoU2V0OiBbXSxcbiAgICBpbmRleFRvR3JhcGg6IFtdLFxuICAgIGxheW91dEVkZ2VzOiBbXSxcbiAgICBlZGdlU2l6ZTogZWRnZXMuc2l6ZSgpLFxuICAgIHRlbXBlcmF0dXJlOiBvcHRpb25zLmluaXRpYWxUZW1wLFxuICAgIGNsaWVudFdpZHRoOiBiYi53LFxuICAgIGNsaWVudEhlaWdodDogYmIuaCxcbiAgICBib3VuZGluZ0JveDogYmJcbiAgfTtcbiAgdmFyIGNvbXBvbmVudHMgPSBvcHRpb25zLmVsZXMuY29tcG9uZW50cygpO1xuICB2YXIgaWQyY21wdElkID0ge307XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgY29tcG9uZW50cy5sZW5ndGg7IGkrKykge1xuICAgIHZhciBjb21wb25lbnQgPSBjb21wb25lbnRzW2ldO1xuICAgIGZvciAodmFyIGogPSAwOyBqIDwgY29tcG9uZW50Lmxlbmd0aDsgaisrKSB7XG4gICAgICB2YXIgbm9kZSA9IGNvbXBvbmVudFtqXTtcbiAgICAgIGlkMmNtcHRJZFtub2RlLmlkKCldID0gaTtcbiAgICB9XG4gIH1cblxuICAvLyBJdGVyYXRlIG92ZXIgYWxsIG5vZGVzLCBjcmVhdGluZyBsYXlvdXQgbm9kZXNcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBsYXlvdXRJbmZvLm5vZGVTaXplOyBpKyspIHtcbiAgICB2YXIgbiA9IG5vZGVzW2ldO1xuICAgIHZhciBuYmIgPSBuLmxheW91dERpbWVuc2lvbnMob3B0aW9ucyk7XG4gICAgdmFyIHRlbXBOb2RlID0ge307XG4gICAgdGVtcE5vZGUuaXNMb2NrZWQgPSBuLmxvY2tlZCgpO1xuICAgIHRlbXBOb2RlLmlkID0gbi5kYXRhKCdpZCcpO1xuICAgIHRlbXBOb2RlLnBhcmVudElkID0gbi5kYXRhKCdwYXJlbnQnKTtcbiAgICB0ZW1wTm9kZS5jbXB0SWQgPSBpZDJjbXB0SWRbbi5pZCgpXTtcbiAgICB0ZW1wTm9kZS5jaGlsZHJlbiA9IFtdO1xuICAgIHRlbXBOb2RlLnBvc2l0aW9uWCA9IG4ucG9zaXRpb24oJ3gnKTtcbiAgICB0ZW1wTm9kZS5wb3NpdGlvblkgPSBuLnBvc2l0aW9uKCd5Jyk7XG4gICAgdGVtcE5vZGUub2Zmc2V0WCA9IDA7XG4gICAgdGVtcE5vZGUub2Zmc2V0WSA9IDA7XG4gICAgdGVtcE5vZGUuaGVpZ2h0ID0gbmJiLnc7XG4gICAgdGVtcE5vZGUud2lkdGggPSBuYmIuaDtcbiAgICB0ZW1wTm9kZS5tYXhYID0gdGVtcE5vZGUucG9zaXRpb25YICsgdGVtcE5vZGUud2lkdGggLyAyO1xuICAgIHRlbXBOb2RlLm1pblggPSB0ZW1wTm9kZS5wb3NpdGlvblggLSB0ZW1wTm9kZS53aWR0aCAvIDI7XG4gICAgdGVtcE5vZGUubWF4WSA9IHRlbXBOb2RlLnBvc2l0aW9uWSArIHRlbXBOb2RlLmhlaWdodCAvIDI7XG4gICAgdGVtcE5vZGUubWluWSA9IHRlbXBOb2RlLnBvc2l0aW9uWSAtIHRlbXBOb2RlLmhlaWdodCAvIDI7XG4gICAgdGVtcE5vZGUucGFkTGVmdCA9IHBhcnNlRmxvYXQobi5zdHlsZSgncGFkZGluZycpKTtcbiAgICB0ZW1wTm9kZS5wYWRSaWdodCA9IHBhcnNlRmxvYXQobi5zdHlsZSgncGFkZGluZycpKTtcbiAgICB0ZW1wTm9kZS5wYWRUb3AgPSBwYXJzZUZsb2F0KG4uc3R5bGUoJ3BhZGRpbmcnKSk7XG4gICAgdGVtcE5vZGUucGFkQm90dG9tID0gcGFyc2VGbG9hdChuLnN0eWxlKCdwYWRkaW5nJykpO1xuXG4gICAgLy8gZm9yY2VzXG4gICAgdGVtcE5vZGUubm9kZVJlcHVsc2lvbiA9IGZuJDYob3B0aW9ucy5ub2RlUmVwdWxzaW9uKSA/IG9wdGlvbnMubm9kZVJlcHVsc2lvbihuKSA6IG9wdGlvbnMubm9kZVJlcHVsc2lvbjtcblxuICAgIC8vIEFkZCBuZXcgbm9kZVxuICAgIGxheW91dEluZm8ubGF5b3V0Tm9kZXMucHVzaCh0ZW1wTm9kZSk7XG4gICAgLy8gQWRkIGVudHJ5IHRvIGlkLWluZGV4IG1hcFxuICAgIGxheW91dEluZm8uaWRUb0luZGV4W3RlbXBOb2RlLmlkXSA9IGk7XG4gIH1cblxuICAvLyBJbmxpbmUgaW1wbGVtZW50YXRpb24gb2YgYSBxdWV1ZSwgdXNlZCBmb3IgdHJhdmVyc2luZyB0aGUgZ3JhcGggaW4gQkZTIG9yZGVyXG4gIHZhciBxdWV1ZSA9IFtdO1xuICB2YXIgc3RhcnQgPSAwOyAvLyBQb2ludHMgdG8gdGhlIHN0YXJ0IHRoZSBxdWV1ZVxuICB2YXIgZW5kID0gLTE7IC8vIFBvaW50cyB0byB0aGUgZW5kIG9mIHRoZSBxdWV1ZVxuXG4gIHZhciB0ZW1wR3JhcGggPSBbXTtcblxuICAvLyBTZWNvbmQgcGFzcyB0byBhZGQgY2hpbGQgaW5mb3JtYXRpb24gYW5kXG4gIC8vIGluaXRpYWxpemUgcXVldWUgZm9yIGhpZXJhcmNoaWNhbCB0cmF2ZXJzYWxcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBsYXlvdXRJbmZvLm5vZGVTaXplOyBpKyspIHtcbiAgICB2YXIgbiA9IGxheW91dEluZm8ubGF5b3V0Tm9kZXNbaV07XG4gICAgdmFyIHBfaWQgPSBuLnBhcmVudElkO1xuICAgIC8vIENoZWNrIGlmIG5vZGUgbiBoYXMgYSBwYXJlbnQgbm9kZVxuICAgIGlmIChudWxsICE9IHBfaWQpIHtcbiAgICAgIC8vIEFkZCBub2RlIElkIHRvIHBhcmVudCdzIGxpc3Qgb2YgY2hpbGRyZW5cbiAgICAgIGxheW91dEluZm8ubGF5b3V0Tm9kZXNbbGF5b3V0SW5mby5pZFRvSW5kZXhbcF9pZF1dLmNoaWxkcmVuLnB1c2gobi5pZCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIElmIGEgbm9kZSBkb2Vzbid0IGhhdmUgYSBwYXJlbnQsIHRoZW4gaXQncyBpbiB0aGUgcm9vdCBncmFwaFxuICAgICAgcXVldWVbKytlbmRdID0gbi5pZDtcbiAgICAgIHRlbXBHcmFwaC5wdXNoKG4uaWQpO1xuICAgIH1cbiAgfVxuXG4gIC8vIEFkZCByb290IGdyYXBoIHRvIGdyYXBoU2V0XG4gIGxheW91dEluZm8uZ3JhcGhTZXQucHVzaCh0ZW1wR3JhcGgpO1xuXG4gIC8vIFRyYXZlcnNlIHRoZSBncmFwaCwgbGV2ZWwgYnkgbGV2ZWwsXG4gIHdoaWxlIChzdGFydCA8PSBlbmQpIHtcbiAgICAvLyBHZXQgdGhlIG5vZGUgdG8gdmlzaXQgYW5kIHJlbW92ZSBpdCBmcm9tIHF1ZXVlXG4gICAgdmFyIG5vZGVfaWQgPSBxdWV1ZVtzdGFydCsrXTtcbiAgICB2YXIgbm9kZV9peCA9IGxheW91dEluZm8uaWRUb0luZGV4W25vZGVfaWRdO1xuICAgIHZhciBub2RlID0gbGF5b3V0SW5mby5sYXlvdXROb2Rlc1tub2RlX2l4XTtcbiAgICB2YXIgY2hpbGRyZW4gPSBub2RlLmNoaWxkcmVuO1xuICAgIGlmIChjaGlsZHJlbi5sZW5ndGggPiAwKSB7XG4gICAgICAvLyBBZGQgY2hpbGRyZW4gbm9kZXMgYXMgYSBuZXcgZ3JhcGggdG8gZ3JhcGggc2V0XG4gICAgICBsYXlvdXRJbmZvLmdyYXBoU2V0LnB1c2goY2hpbGRyZW4pO1xuICAgICAgLy8gQWRkIGNoaWxkcmVuIHRvIHF1ZSBxdWV1ZSB0byBiZSB2aXNpdGVkXG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGNoaWxkcmVuLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIHF1ZXVlWysrZW5kXSA9IGNoaWxkcmVuW2ldO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8vIENyZWF0ZSBpbmRleFRvR3JhcGggbWFwXG4gIGZvciAodmFyIGkgPSAwOyBpIDwgbGF5b3V0SW5mby5ncmFwaFNldC5sZW5ndGg7IGkrKykge1xuICAgIHZhciBncmFwaCA9IGxheW91dEluZm8uZ3JhcGhTZXRbaV07XG4gICAgZm9yICh2YXIgaiA9IDA7IGogPCBncmFwaC5sZW5ndGg7IGorKykge1xuICAgICAgdmFyIGluZGV4ID0gbGF5b3V0SW5mby5pZFRvSW5kZXhbZ3JhcGhbal1dO1xuICAgICAgbGF5b3V0SW5mby5pbmRleFRvR3JhcGhbaW5kZXhdID0gaTtcbiAgICB9XG4gIH1cblxuICAvLyBJdGVyYXRlIG92ZXIgYWxsIGVkZ2VzLCBjcmVhdGluZyBMYXlvdXQgRWRnZXNcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBsYXlvdXRJbmZvLmVkZ2VTaXplOyBpKyspIHtcbiAgICB2YXIgZSA9IGVkZ2VzW2ldO1xuICAgIHZhciB0ZW1wRWRnZSA9IHt9O1xuICAgIHRlbXBFZGdlLmlkID0gZS5kYXRhKCdpZCcpO1xuICAgIHRlbXBFZGdlLnNvdXJjZUlkID0gZS5kYXRhKCdzb3VyY2UnKTtcbiAgICB0ZW1wRWRnZS50YXJnZXRJZCA9IGUuZGF0YSgndGFyZ2V0Jyk7XG5cbiAgICAvLyBDb21wdXRlIGlkZWFsIGxlbmd0aFxuICAgIHZhciBpZGVhbExlbmd0aCA9IGZuJDYob3B0aW9ucy5pZGVhbEVkZ2VMZW5ndGgpID8gb3B0aW9ucy5pZGVhbEVkZ2VMZW5ndGgoZSkgOiBvcHRpb25zLmlkZWFsRWRnZUxlbmd0aDtcbiAgICB2YXIgZWxhc3RpY2l0eSA9IGZuJDYob3B0aW9ucy5lZGdlRWxhc3RpY2l0eSkgPyBvcHRpb25zLmVkZ2VFbGFzdGljaXR5KGUpIDogb3B0aW9ucy5lZGdlRWxhc3RpY2l0eTtcblxuICAgIC8vIENoZWNrIGlmIGl0J3MgYW4gaW50ZXIgZ3JhcGggZWRnZVxuICAgIHZhciBzb3VyY2VJeCA9IGxheW91dEluZm8uaWRUb0luZGV4W3RlbXBFZGdlLnNvdXJjZUlkXTtcbiAgICB2YXIgdGFyZ2V0SXggPSBsYXlvdXRJbmZvLmlkVG9JbmRleFt0ZW1wRWRnZS50YXJnZXRJZF07XG4gICAgdmFyIHNvdXJjZUdyYXBoID0gbGF5b3V0SW5mby5pbmRleFRvR3JhcGhbc291cmNlSXhdO1xuICAgIHZhciB0YXJnZXRHcmFwaCA9IGxheW91dEluZm8uaW5kZXhUb0dyYXBoW3RhcmdldEl4XTtcbiAgICBpZiAoc291cmNlR3JhcGggIT0gdGFyZ2V0R3JhcGgpIHtcbiAgICAgIC8vIEZpbmQgbG93ZXN0IGNvbW1vbiBncmFwaCBhbmNlc3RvclxuICAgICAgdmFyIGxjYSA9IGZpbmRMQ0EodGVtcEVkZ2Uuc291cmNlSWQsIHRlbXBFZGdlLnRhcmdldElkLCBsYXlvdXRJbmZvKTtcblxuICAgICAgLy8gQ29tcHV0ZSBzdW0gb2Ygbm9kZSBkZXB0aHMsIHJlbGF0aXZlIHRvIGxjYSBncmFwaFxuICAgICAgdmFyIGxjYUdyYXBoID0gbGF5b3V0SW5mby5ncmFwaFNldFtsY2FdO1xuICAgICAgdmFyIGRlcHRoID0gMDtcblxuICAgICAgLy8gU291cmNlIGRlcHRoXG4gICAgICB2YXIgdGVtcE5vZGUgPSBsYXlvdXRJbmZvLmxheW91dE5vZGVzW3NvdXJjZUl4XTtcbiAgICAgIHdoaWxlICgtMSA9PT0gbGNhR3JhcGguaW5kZXhPZih0ZW1wTm9kZS5pZCkpIHtcbiAgICAgICAgdGVtcE5vZGUgPSBsYXlvdXRJbmZvLmxheW91dE5vZGVzW2xheW91dEluZm8uaWRUb0luZGV4W3RlbXBOb2RlLnBhcmVudElkXV07XG4gICAgICAgIGRlcHRoKys7XG4gICAgICB9XG5cbiAgICAgIC8vIFRhcmdldCBkZXB0aFxuICAgICAgdGVtcE5vZGUgPSBsYXlvdXRJbmZvLmxheW91dE5vZGVzW3RhcmdldEl4XTtcbiAgICAgIHdoaWxlICgtMSA9PT0gbGNhR3JhcGguaW5kZXhPZih0ZW1wTm9kZS5pZCkpIHtcbiAgICAgICAgdGVtcE5vZGUgPSBsYXlvdXRJbmZvLmxheW91dE5vZGVzW2xheW91dEluZm8uaWRUb0luZGV4W3RlbXBOb2RlLnBhcmVudElkXV07XG4gICAgICAgIGRlcHRoKys7XG4gICAgICB9XG5cbiAgICAgIC8vIGxvZ0RlYnVnKCdMQ0Egb2Ygbm9kZXMgJyArIHRlbXBFZGdlLnNvdXJjZUlkICsgJyBhbmQgJyArIHRlbXBFZGdlLnRhcmdldElkICtcbiAgICAgIC8vICBcIi4gSW5kZXg6IFwiICsgbGNhICsgXCIgQ29udGVudHM6IFwiICsgbGNhR3JhcGgudG9TdHJpbmcoKSArXG4gICAgICAvLyAgXCIuIERlcHRoOiBcIiArIGRlcHRoKTtcblxuICAgICAgLy8gVXBkYXRlIGlkZWFsTGVuZ3RoXG4gICAgICBpZGVhbExlbmd0aCAqPSBkZXB0aCAqIG9wdGlvbnMubmVzdGluZ0ZhY3RvcjtcbiAgICB9XG4gICAgdGVtcEVkZ2UuaWRlYWxMZW5ndGggPSBpZGVhbExlbmd0aDtcbiAgICB0ZW1wRWRnZS5lbGFzdGljaXR5ID0gZWxhc3RpY2l0eTtcbiAgICBsYXlvdXRJbmZvLmxheW91dEVkZ2VzLnB1c2godGVtcEVkZ2UpO1xuICB9XG5cbiAgLy8gRmluYWxseSwgcmV0dXJuIGxheW91dEluZm8gb2JqZWN0XG4gIHJldHVybiBsYXlvdXRJbmZvO1xufTtcblxuLyoqXG4gKiBAYnJpZWYgOiBUaGlzIGZ1bmN0aW9uIGZpbmRzIHRoZSBpbmRleCBvZiB0aGUgbG93ZXN0IGNvbW1vblxuICogICAgICAgICAgZ3JhcGggYW5jZXN0b3IgYmV0d2VlbiAyIG5vZGVzIGluIHRoZSBzdWJ0cmVlXG4gKiAgICAgICAgICAoZnJvbSB0aGUgZ3JhcGggaGllcmFyY2h5IGluZHVjZWQgdHJlZSkgd2hvc2VcbiAqICAgICAgICAgIHJvb3QgaXMgZ3JhcGhJeFxuICpcbiAqIEBhcmcgbm9kZTE6IG5vZGUxJ3MgSURcbiAqIEBhcmcgbm9kZTI6IG5vZGUyJ3MgSURcbiAqIEBhcmcgbGF5b3V0SW5mbzogbGF5b3V0SW5mbyBvYmplY3RcbiAqXG4gKi9cbnZhciBmaW5kTENBID0gZnVuY3Rpb24gZmluZExDQShub2RlMSwgbm9kZTIsIGxheW91dEluZm8pIHtcbiAgLy8gRmluZCB0aGVpciBjb21tb24gYW5jZXN0ZXIsIHN0YXJ0aW5nIGZyb20gdGhlIHJvb3QgZ3JhcGhcbiAgdmFyIHJlcyA9IF9maW5kTENBX2F1eChub2RlMSwgbm9kZTIsIDAsIGxheW91dEluZm8pO1xuICBpZiAoMiA+IHJlcy5jb3VudCkge1xuICAgIC8vIElmIGF1eCBmdW5jdGlvbiBjb3VsZG4ndCBmaW5kIHRoZSBjb21tb24gYW5jZXN0ZXIsXG4gICAgLy8gdGhlbiBpdCBpcyB0aGUgcm9vdCBncmFwaFxuICAgIHJldHVybiAwO1xuICB9IGVsc2Uge1xuICAgIHJldHVybiByZXMuZ3JhcGg7XG4gIH1cbn07XG5cbi8qKlxuICogQGJyaWVmICAgICAgICAgIDogQXV4aWxpYXJ5IGZ1bmN0aW9uIHVzZWQgZm9yIExDQSBjb21wdXRhdGlvblxuICpcbiAqIEBhcmcgbm9kZTEgICAgICA6IG5vZGUxJ3MgSURcbiAqIEBhcmcgbm9kZTIgICAgICA6IG5vZGUyJ3MgSURcbiAqIEBhcmcgZ3JhcGhJeCAgICA6IHN1YmdyYXBoIGluZGV4XG4gKiBAYXJnIGxheW91dEluZm8gOiBsYXlvdXRJbmZvIG9iamVjdFxuICpcbiAqIEByZXR1cm4gICAgICAgICA6IG9iamVjdCBvZiB0aGUgZm9ybSB7Y291bnQ6IFgsIGdyYXBoOiBZfSwgd2hlcmU6XG4gKiAgICAgICAgICAgICAgICAgICBYIGlzIHRoZSBudW1iZXIgb2YgYW5jZXN0b3JzIChtYXg6IDIpIGZvdW5kIGluXG4gKiAgICAgICAgICAgICAgICAgICBncmFwaEl4IChhbmQgaXQncyBzdWJncmFwaHMpLFxuICogICAgICAgICAgICAgICAgICAgWSBpcyB0aGUgZ3JhcGggaW5kZXggb2YgdGhlIGxvd2VzdCBncmFwaCBjb250YWluaW5nXG4gKiAgICAgICAgICAgICAgICAgICBhbGwgWCBub2Rlc1xuICovXG52YXIgX2ZpbmRMQ0FfYXV4ID0gZnVuY3Rpb24gZmluZExDQV9hdXgobm9kZTEsIG5vZGUyLCBncmFwaEl4LCBsYXlvdXRJbmZvKSB7XG4gIHZhciBncmFwaCA9IGxheW91dEluZm8uZ3JhcGhTZXRbZ3JhcGhJeF07XG4gIC8vIElmIGJvdGggbm9kZXMgYmVsb25ncyB0byBncmFwaEl4XG4gIGlmICgtMSA8IGdyYXBoLmluZGV4T2Yobm9kZTEpICYmIC0xIDwgZ3JhcGguaW5kZXhPZihub2RlMikpIHtcbiAgICByZXR1cm4ge1xuICAgICAgY291bnQ6IDIsXG4gICAgICBncmFwaDogZ3JhcGhJeFxuICAgIH07XG4gIH1cblxuICAvLyBNYWtlIHJlY3Vyc2l2ZSBjYWxscyBmb3IgYWxsIHN1YmdyYXBoc1xuICB2YXIgYyA9IDA7XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgZ3JhcGgubGVuZ3RoOyBpKyspIHtcbiAgICB2YXIgbm9kZUlkID0gZ3JhcGhbaV07XG4gICAgdmFyIG5vZGVJeCA9IGxheW91dEluZm8uaWRUb0luZGV4W25vZGVJZF07XG4gICAgdmFyIGNoaWxkcmVuID0gbGF5b3V0SW5mby5sYXlvdXROb2Rlc1tub2RlSXhdLmNoaWxkcmVuO1xuXG4gICAgLy8gSWYgdGhlIG5vZGUgaGFzIG5vIGNoaWxkLCBza2lwIGl0XG4gICAgaWYgKDAgPT09IGNoaWxkcmVuLmxlbmd0aCkge1xuICAgICAgY29udGludWU7XG4gICAgfVxuICAgIHZhciBjaGlsZEdyYXBoSXggPSBsYXlvdXRJbmZvLmluZGV4VG9HcmFwaFtsYXlvdXRJbmZvLmlkVG9JbmRleFtjaGlsZHJlblswXV1dO1xuICAgIHZhciByZXN1bHQgPSBfZmluZExDQV9hdXgobm9kZTEsIG5vZGUyLCBjaGlsZEdyYXBoSXgsIGxheW91dEluZm8pO1xuICAgIGlmICgwID09PSByZXN1bHQuY291bnQpIHtcbiAgICAgIC8vIE5laXRoZXIgbm9kZTEgbm9yIG5vZGUyIGFyZSBwcmVzZW50IGluIHRoaXMgc3ViZ3JhcGhcbiAgICAgIGNvbnRpbnVlO1xuICAgIH0gZWxzZSBpZiAoMSA9PT0gcmVzdWx0LmNvdW50KSB7XG4gICAgICAvLyBPbmUgb2YgKG5vZGUxLCBub2RlMikgaXMgcHJlc2VudCBpbiB0aGlzIHN1YmdyYXBoXG4gICAgICBjKys7XG4gICAgICBpZiAoMiA9PT0gYykge1xuICAgICAgICAvLyBXZSd2ZSBhbHJlYWR5IGZvdW5kIGJvdGggbm9kZXMsIG5vIG5lZWQgdG8ga2VlcCBzZWFyY2hpbmdcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIEJvdGggbm9kZXMgYXJlIHByZXNlbnQgaW4gdGhpcyBzdWJncmFwaFxuICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHtcbiAgICBjb3VudDogYyxcbiAgICBncmFwaDogZ3JhcGhJeFxuICB9O1xufTtcblxuLyoqXG4gKiBAYnJpZWY6IHByaW50c0xheW91dEluZm8gaW50byBqcyBjb25zb2xlXG4gKiAgICAgICAgIE9ubHkgdXNlZCBmb3IgZGViYnVnaW5nXG4gKi9cbnZhciBwcmludExheW91dEluZm87IFxuXG4vKipcbiAqIEBicmllZiA6IFJhbmRvbWl6ZXMgdGhlIHBvc2l0aW9uIG9mIGFsbCBub2Rlc1xuICovXG52YXIgcmFuZG9taXplUG9zaXRpb25zID0gZnVuY3Rpb24gcmFuZG9taXplUG9zaXRpb25zKGxheW91dEluZm8sIGN5KSB7XG4gIHZhciB3aWR0aCA9IGxheW91dEluZm8uY2xpZW50V2lkdGg7XG4gIHZhciBoZWlnaHQgPSBsYXlvdXRJbmZvLmNsaWVudEhlaWdodDtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBsYXlvdXRJbmZvLm5vZGVTaXplOyBpKyspIHtcbiAgICB2YXIgbiA9IGxheW91dEluZm8ubGF5b3V0Tm9kZXNbaV07XG5cbiAgICAvLyBObyBuZWVkIHRvIHJhbmRvbWl6ZSBjb21wb3VuZCBub2RlcyBvciBsb2NrZWQgbm9kZXNcbiAgICBpZiAoMCA9PT0gbi5jaGlsZHJlbi5sZW5ndGggJiYgIW4uaXNMb2NrZWQpIHtcbiAgICAgIG4ucG9zaXRpb25YID0gTWF0aC5yYW5kb20oKSAqIHdpZHRoO1xuICAgICAgbi5wb3NpdGlvblkgPSBNYXRoLnJhbmRvbSgpICogaGVpZ2h0O1xuICAgIH1cbiAgfVxufTtcbnZhciBnZXRTY2FsZUluQm91bmRzRm4gPSBmdW5jdGlvbiBnZXRTY2FsZUluQm91bmRzRm4obGF5b3V0SW5mbywgb3B0aW9ucywgbm9kZXMpIHtcbiAgdmFyIGJiID0gbGF5b3V0SW5mby5ib3VuZGluZ0JveDtcbiAgdmFyIGNvc2VCQiA9IHtcbiAgICB4MTogSW5maW5pdHksXG4gICAgeDI6IC1JbmZpbml0eSxcbiAgICB5MTogSW5maW5pdHksXG4gICAgeTI6IC1JbmZpbml0eVxuICB9O1xuICBpZiAob3B0aW9ucy5ib3VuZGluZ0JveCkge1xuICAgIG5vZGVzLmZvckVhY2goZnVuY3Rpb24gKG5vZGUpIHtcbiAgICAgIHZhciBsbm9kZSA9IGxheW91dEluZm8ubGF5b3V0Tm9kZXNbbGF5b3V0SW5mby5pZFRvSW5kZXhbbm9kZS5kYXRhKCdpZCcpXV07XG4gICAgICBjb3NlQkIueDEgPSBNYXRoLm1pbihjb3NlQkIueDEsIGxub2RlLnBvc2l0aW9uWCk7XG4gICAgICBjb3NlQkIueDIgPSBNYXRoLm1heChjb3NlQkIueDIsIGxub2RlLnBvc2l0aW9uWCk7XG4gICAgICBjb3NlQkIueTEgPSBNYXRoLm1pbihjb3NlQkIueTEsIGxub2RlLnBvc2l0aW9uWSk7XG4gICAgICBjb3NlQkIueTIgPSBNYXRoLm1heChjb3NlQkIueTIsIGxub2RlLnBvc2l0aW9uWSk7XG4gICAgfSk7XG4gICAgY29zZUJCLncgPSBjb3NlQkIueDIgLSBjb3NlQkIueDE7XG4gICAgY29zZUJCLmggPSBjb3NlQkIueTIgLSBjb3NlQkIueTE7XG4gIH1cbiAgcmV0dXJuIGZ1bmN0aW9uIChlbGUsIGkpIHtcbiAgICB2YXIgbG5vZGUgPSBsYXlvdXRJbmZvLmxheW91dE5vZGVzW2xheW91dEluZm8uaWRUb0luZGV4W2VsZS5kYXRhKCdpZCcpXV07XG4gICAgaWYgKG9wdGlvbnMuYm91bmRpbmdCb3gpIHtcbiAgICAgIC8vIHRoZW4gYWRkIGV4dHJhIGJvdW5kaW5nIGJveCBjb25zdHJhaW50XG4gICAgICB2YXIgcGN0WCA9IChsbm9kZS5wb3NpdGlvblggLSBjb3NlQkIueDEpIC8gY29zZUJCLnc7XG4gICAgICB2YXIgcGN0WSA9IChsbm9kZS5wb3NpdGlvblkgLSBjb3NlQkIueTEpIC8gY29zZUJCLmg7XG4gICAgICByZXR1cm4ge1xuICAgICAgICB4OiBiYi54MSArIHBjdFggKiBiYi53LFxuICAgICAgICB5OiBiYi55MSArIHBjdFkgKiBiYi5oXG4gICAgICB9O1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICB4OiBsbm9kZS5wb3NpdGlvblgsXG4gICAgICAgIHk6IGxub2RlLnBvc2l0aW9uWVxuICAgICAgfTtcbiAgICB9XG4gIH07XG59O1xuXG4vKipcbiAqIEBicmllZiAgICAgICAgICA6IFVwZGF0ZXMgdGhlIHBvc2l0aW9ucyBvZiBub2RlcyBpbiB0aGUgbmV0d29ya1xuICogQGFyZyBsYXlvdXRJbmZvIDogTGF5b3V0SW5mbyBvYmplY3RcbiAqIEBhcmcgY3kgICAgICAgICA6IEN5dG9zY2FwZSBvYmplY3RcbiAqIEBhcmcgb3B0aW9ucyAgICA6IExheW91dCBvcHRpb25zXG4gKi9cbnZhciByZWZyZXNoUG9zaXRpb25zID0gZnVuY3Rpb24gcmVmcmVzaFBvc2l0aW9ucyhsYXlvdXRJbmZvLCBjeSwgb3B0aW9ucykge1xuICAvLyB2YXIgcyA9ICdSZWZyZXNoaW5nIHBvc2l0aW9ucyc7XG4gIC8vIGxvZ0RlYnVnKHMpO1xuXG4gIHZhciBsYXlvdXQgPSBvcHRpb25zLmxheW91dDtcbiAgdmFyIG5vZGVzID0gb3B0aW9ucy5lbGVzLm5vZGVzKCk7XG4gIHZhciBnZXRTY2FsZWRQb3MgPSBnZXRTY2FsZUluQm91bmRzRm4obGF5b3V0SW5mbywgb3B0aW9ucywgbm9kZXMpO1xuICBub2Rlcy5wb3NpdGlvbnMoZ2V0U2NhbGVkUG9zKTtcblxuICAvLyBUcmlnZ2VyIGxheW91dFJlYWR5IG9ubHkgb24gZmlyc3QgY2FsbFxuICBpZiAodHJ1ZSAhPT0gbGF5b3V0SW5mby5yZWFkeSkge1xuICAgIC8vIHMgPSAnVHJpZ2dlcmluZyBsYXlvdXRyZWFkeSc7XG4gICAgLy8gbG9nRGVidWcocyk7XG4gICAgbGF5b3V0SW5mby5yZWFkeSA9IHRydWU7XG4gICAgbGF5b3V0Lm9uZSgnbGF5b3V0cmVhZHknLCBvcHRpb25zLnJlYWR5KTtcbiAgICBsYXlvdXQuZW1pdCh7XG4gICAgICB0eXBlOiAnbGF5b3V0cmVhZHknLFxuICAgICAgbGF5b3V0OiB0aGlzXG4gICAgfSk7XG4gIH1cbn07XG5cbi8qKlxuICogQGJyaWVmIDogTG9ncyBhIGRlYnVnIG1lc3NhZ2UgaW4gSlMgY29uc29sZSwgaWYgREVCVUcgaXMgT05cbiAqL1xuLy8gdmFyIGxvZ0RlYnVnID0gZnVuY3Rpb24odGV4dCkge1xuLy8gICBpZiAoREVCVUcpIHtcbi8vICAgICBjb25zb2xlLmRlYnVnKHRleHQpO1xuLy8gICB9XG4vLyB9O1xuXG4vKipcbiAqIEBicmllZiAgICAgICAgICA6IFBlcmZvcm1zIG9uZSBpdGVyYXRpb24gb2YgdGhlIHBoeXNpY2FsIHNpbXVsYXRpb25cbiAqIEBhcmcgbGF5b3V0SW5mbyA6IExheW91dEluZm8gb2JqZWN0IGFscmVhZHkgaW5pdGlhbGl6ZWRcbiAqIEBhcmcgY3kgICAgICAgICA6IEN5dG9zY2FwZSBvYmplY3RcbiAqIEBhcmcgb3B0aW9ucyAgICA6IExheW91dCBvcHRpb25zXG4gKi9cbnZhciBzdGVwID0gZnVuY3Rpb24gc3RlcChsYXlvdXRJbmZvLCBvcHRpb25zLCBfc3RlcCkge1xuICAvLyB2YXIgcyA9IFwiXFxuXFxuIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjI1wiO1xuICAvLyBzICs9IFwiXFxuU1RFUDogXCIgKyBzdGVwO1xuICAvLyBzICs9IFwiXFxuIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjI1xcblwiO1xuICAvLyBsb2dEZWJ1ZyhzKTtcblxuICAvLyBDYWxjdWxhdGUgbm9kZSByZXB1bHNpb25zXG4gIGNhbGN1bGF0ZU5vZGVGb3JjZXMobGF5b3V0SW5mbywgb3B0aW9ucyk7XG4gIC8vIENhbGN1bGF0ZSBlZGdlIGZvcmNlc1xuICBjYWxjdWxhdGVFZGdlRm9yY2VzKGxheW91dEluZm8pO1xuICAvLyBDYWxjdWxhdGUgZ3Jhdml0eSBmb3JjZXNcbiAgY2FsY3VsYXRlR3Jhdml0eUZvcmNlcyhsYXlvdXRJbmZvLCBvcHRpb25zKTtcbiAgLy8gUHJvcGFnYXRlIGZvcmNlcyBmcm9tIHBhcmVudCB0byBjaGlsZFxuICBwcm9wYWdhdGVGb3JjZXMobGF5b3V0SW5mbyk7XG4gIC8vIFVwZGF0ZSBwb3NpdGlvbnMgYmFzZWQgb24gY2FsY3VsYXRlZCBmb3JjZXNcbiAgdXBkYXRlUG9zaXRpb25zKGxheW91dEluZm8pO1xufTtcblxuLyoqXG4gKiBAYnJpZWYgOiBDb21wdXRlcyB0aGUgbm9kZSByZXB1bHNpb24gZm9yY2VzXG4gKi9cbnZhciBjYWxjdWxhdGVOb2RlRm9yY2VzID0gZnVuY3Rpb24gY2FsY3VsYXRlTm9kZUZvcmNlcyhsYXlvdXRJbmZvLCBvcHRpb25zKSB7XG4gIC8vIEdvIHRocm91Z2ggZWFjaCBvZiB0aGUgZ3JhcGhzIGluIGdyYXBoU2V0XG4gIC8vIE5vZGVzIG9ubHkgcmVwZWwgZWFjaCBvdGhlciBpZiB0aGV5IGJlbG9uZyB0byB0aGUgc2FtZSBncmFwaFxuICAvLyB2YXIgcyA9ICdjYWxjdWxhdGVOb2RlRm9yY2VzJztcbiAgLy8gbG9nRGVidWcocyk7XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgbGF5b3V0SW5mby5ncmFwaFNldC5sZW5ndGg7IGkrKykge1xuICAgIHZhciBncmFwaCA9IGxheW91dEluZm8uZ3JhcGhTZXRbaV07XG4gICAgdmFyIG51bU5vZGVzID0gZ3JhcGgubGVuZ3RoO1xuXG4gICAgLy8gcyA9IFwiU2V0OiBcIiArIGdyYXBoLnRvU3RyaW5nKCk7XG4gICAgLy8gbG9nRGVidWcocyk7XG5cbiAgICAvLyBOb3cgZ2V0IGFsbCB0aGUgcGFpcnMgb2Ygbm9kZXNcbiAgICAvLyBPbmx5IGdldCBlYWNoIHBhaXIgb25jZSwgKEEsIEIpID0gKEIsIEEpXG4gICAgZm9yICh2YXIgaiA9IDA7IGogPCBudW1Ob2RlczsgaisrKSB7XG4gICAgICB2YXIgbm9kZTEgPSBsYXlvdXRJbmZvLmxheW91dE5vZGVzW2xheW91dEluZm8uaWRUb0luZGV4W2dyYXBoW2pdXV07XG4gICAgICBmb3IgKHZhciBrID0gaiArIDE7IGsgPCBudW1Ob2RlczsgaysrKSB7XG4gICAgICAgIHZhciBub2RlMiA9IGxheW91dEluZm8ubGF5b3V0Tm9kZXNbbGF5b3V0SW5mby5pZFRvSW5kZXhbZ3JhcGhba11dXTtcbiAgICAgICAgbm9kZVJlcHVsc2lvbihub2RlMSwgbm9kZTIsIGxheW91dEluZm8sIG9wdGlvbnMpO1xuICAgICAgfVxuICAgIH1cbiAgfVxufTtcbnZhciByYW5kb21EaXN0YW5jZSA9IGZ1bmN0aW9uIHJhbmRvbURpc3RhbmNlKG1heCkge1xuICByZXR1cm4gLTEgKyAyICogbWF4ICogTWF0aC5yYW5kb20oKTtcbn07XG5cbi8qKlxuICogQGJyaWVmIDogQ29tcHV0ZSB0aGUgbm9kZSByZXB1bHNpb24gZm9yY2VzIGJldHdlZW4gYSBwYWlyIG9mIG5vZGVzXG4gKi9cbnZhciBub2RlUmVwdWxzaW9uID0gZnVuY3Rpb24gbm9kZVJlcHVsc2lvbihub2RlMSwgbm9kZTIsIGxheW91dEluZm8sIG9wdGlvbnMpIHtcbiAgLy8gdmFyIHMgPSBcIk5vZGUgcmVwdWxzaW9uLiBOb2RlMTogXCIgKyBub2RlMS5pZCArIFwiIE5vZGUyOiBcIiArIG5vZGUyLmlkO1xuXG4gIHZhciBjbXB0SWQxID0gbm9kZTEuY21wdElkO1xuICB2YXIgY21wdElkMiA9IG5vZGUyLmNtcHRJZDtcbiAgaWYgKGNtcHRJZDEgIT09IGNtcHRJZDIgJiYgIWxheW91dEluZm8uaXNDb21wb3VuZCkge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIC8vIEdldCBkaXJlY3Rpb24gb2YgbGluZSBjb25uZWN0aW5nIGJvdGggbm9kZSBjZW50ZXJzXG4gIHZhciBkaXJlY3Rpb25YID0gbm9kZTIucG9zaXRpb25YIC0gbm9kZTEucG9zaXRpb25YO1xuICB2YXIgZGlyZWN0aW9uWSA9IG5vZGUyLnBvc2l0aW9uWSAtIG5vZGUxLnBvc2l0aW9uWTtcbiAgdmFyIG1heFJhbmREaXN0ID0gMTtcbiAgLy8gcyArPSBcIlxcbmRpcmVjdGlvblg6IFwiICsgZGlyZWN0aW9uWCArIFwiLCBkaXJlY3Rpb25ZOiBcIiArIGRpcmVjdGlvblk7XG5cbiAgLy8gSWYgYm90aCBjZW50ZXJzIGFyZSB0aGUgc2FtZSwgYXBwbHkgYSByYW5kb20gZm9yY2VcbiAgaWYgKDAgPT09IGRpcmVjdGlvblggJiYgMCA9PT0gZGlyZWN0aW9uWSkge1xuICAgIGRpcmVjdGlvblggPSByYW5kb21EaXN0YW5jZShtYXhSYW5kRGlzdCk7XG4gICAgZGlyZWN0aW9uWSA9IHJhbmRvbURpc3RhbmNlKG1heFJhbmREaXN0KTtcbiAgfVxuICB2YXIgb3ZlcmxhcCA9IG5vZGVzT3ZlcmxhcChub2RlMSwgbm9kZTIsIGRpcmVjdGlvblgsIGRpcmVjdGlvblkpO1xuICBpZiAob3ZlcmxhcCA+IDApIHtcbiAgICAvLyBzICs9IFwiXFxuTm9kZXMgRE8gb3ZlcmxhcC5cIjtcbiAgICAvLyBzICs9IFwiXFxuT3ZlcmxhcDogXCIgKyBvdmVybGFwO1xuICAgIC8vIElmIG5vZGVzIG92ZXJsYXAsIHJlcHVsc2lvbiBmb3JjZSBpcyBwcm9wb3J0aW9uYWxcbiAgICAvLyB0byB0aGUgb3ZlcmxhcFxuICAgIHZhciBmb3JjZSA9IG9wdGlvbnMubm9kZU92ZXJsYXAgKiBvdmVybGFwO1xuXG4gICAgLy8gQ29tcHV0ZSB0aGUgbW9kdWxlIGFuZCBjb21wb25lbnRzIG9mIHRoZSBmb3JjZSB2ZWN0b3JcbiAgICB2YXIgZGlzdGFuY2UgPSBNYXRoLnNxcnQoZGlyZWN0aW9uWCAqIGRpcmVjdGlvblggKyBkaXJlY3Rpb25ZICogZGlyZWN0aW9uWSk7XG4gICAgLy8gcyArPSBcIlxcbkRpc3RhbmNlOiBcIiArIGRpc3RhbmNlO1xuICAgIHZhciBmb3JjZVggPSBmb3JjZSAqIGRpcmVjdGlvblggLyBkaXN0YW5jZTtcbiAgICB2YXIgZm9yY2VZID0gZm9yY2UgKiBkaXJlY3Rpb25ZIC8gZGlzdGFuY2U7XG4gIH0gZWxzZSB7XG4gICAgLy8gcyArPSBcIlxcbk5vZGVzIGRvIE5PVCBvdmVybGFwLlwiO1xuICAgIC8vIElmIHRoZXJlJ3Mgbm8gb3ZlcmxhcCwgZm9yY2UgaXMgaW52ZXJzZWx5IHByb3BvcnRpb25hbFxuICAgIC8vIHRvIHNxdWFyZWQgZGlzdGFuY2VcblxuICAgIC8vIEdldCBjbGlwcGluZyBwb2ludHMgZm9yIGJvdGggbm9kZXNcbiAgICB2YXIgcG9pbnQxID0gZmluZENsaXBwaW5nUG9pbnQobm9kZTEsIGRpcmVjdGlvblgsIGRpcmVjdGlvblkpO1xuICAgIHZhciBwb2ludDIgPSBmaW5kQ2xpcHBpbmdQb2ludChub2RlMiwgLTEgKiBkaXJlY3Rpb25YLCAtMSAqIGRpcmVjdGlvblkpO1xuXG4gICAgLy8gVXNlIGNsaXBwaW5nIHBvaW50cyB0byBjb21wdXRlIGRpc3RhbmNlXG4gICAgdmFyIGRpc3RhbmNlWCA9IHBvaW50Mi54IC0gcG9pbnQxLng7XG4gICAgdmFyIGRpc3RhbmNlWSA9IHBvaW50Mi55IC0gcG9pbnQxLnk7XG4gICAgdmFyIGRpc3RhbmNlU3FyID0gZGlzdGFuY2VYICogZGlzdGFuY2VYICsgZGlzdGFuY2VZICogZGlzdGFuY2VZO1xuICAgIHZhciBkaXN0YW5jZSA9IE1hdGguc3FydChkaXN0YW5jZVNxcik7XG4gICAgLy8gcyArPSBcIlxcbkRpc3RhbmNlOiBcIiArIGRpc3RhbmNlO1xuXG4gICAgLy8gQ29tcHV0ZSB0aGUgbW9kdWxlIGFuZCBjb21wb25lbnRzIG9mIHRoZSBmb3JjZSB2ZWN0b3JcbiAgICB2YXIgZm9yY2UgPSAobm9kZTEubm9kZVJlcHVsc2lvbiArIG5vZGUyLm5vZGVSZXB1bHNpb24pIC8gZGlzdGFuY2VTcXI7XG4gICAgdmFyIGZvcmNlWCA9IGZvcmNlICogZGlzdGFuY2VYIC8gZGlzdGFuY2U7XG4gICAgdmFyIGZvcmNlWSA9IGZvcmNlICogZGlzdGFuY2VZIC8gZGlzdGFuY2U7XG4gIH1cblxuICAvLyBBcHBseSBmb3JjZVxuICBpZiAoIW5vZGUxLmlzTG9ja2VkKSB7XG4gICAgbm9kZTEub2Zmc2V0WCAtPSBmb3JjZVg7XG4gICAgbm9kZTEub2Zmc2V0WSAtPSBmb3JjZVk7XG4gIH1cbiAgaWYgKCFub2RlMi5pc0xvY2tlZCkge1xuICAgIG5vZGUyLm9mZnNldFggKz0gZm9yY2VYO1xuICAgIG5vZGUyLm9mZnNldFkgKz0gZm9yY2VZO1xuICB9XG5cbiAgLy8gcyArPSBcIlxcbkZvcmNlWDogXCIgKyBmb3JjZVggKyBcIiBGb3JjZVk6IFwiICsgZm9yY2VZO1xuICAvLyBsb2dEZWJ1ZyhzKTtcblxuICByZXR1cm47XG59O1xuXG4vKipcbiAqIEBicmllZiAgOiBEZXRlcm1pbmVzIHdoZXRoZXIgdHdvIG5vZGVzIG92ZXJsYXAgb3Igbm90XG4gKiBAcmV0dXJuIDogQW1vdW50IG9mIG92ZXJsYXBwaW5nICgwID0+IG5vIG92ZXJsYXApXG4gKi9cbnZhciBub2Rlc092ZXJsYXAgPSBmdW5jdGlvbiBub2Rlc092ZXJsYXAobm9kZTEsIG5vZGUyLCBkWCwgZFkpIHtcbiAgaWYgKGRYID4gMCkge1xuICAgIHZhciBvdmVybGFwWCA9IG5vZGUxLm1heFggLSBub2RlMi5taW5YO1xuICB9IGVsc2Uge1xuICAgIHZhciBvdmVybGFwWCA9IG5vZGUyLm1heFggLSBub2RlMS5taW5YO1xuICB9XG4gIGlmIChkWSA+IDApIHtcbiAgICB2YXIgb3ZlcmxhcFkgPSBub2RlMS5tYXhZIC0gbm9kZTIubWluWTtcbiAgfSBlbHNlIHtcbiAgICB2YXIgb3ZlcmxhcFkgPSBub2RlMi5tYXhZIC0gbm9kZTEubWluWTtcbiAgfVxuICBpZiAob3ZlcmxhcFggPj0gMCAmJiBvdmVybGFwWSA+PSAwKSB7XG4gICAgcmV0dXJuIE1hdGguc3FydChvdmVybGFwWCAqIG92ZXJsYXBYICsgb3ZlcmxhcFkgKiBvdmVybGFwWSk7XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIDA7XG4gIH1cbn07XG5cbi8qKlxuICogQGJyaWVmIDogRmluZHMgdGhlIHBvaW50IGluIHdoaWNoIGFuIGVkZ2UgKGRpcmVjdGlvbiBkWCwgZFkpIGludGVyc2VjdHNcbiAqICAgICAgICAgIHRoZSByZWN0YW5ndWxhciBib3VuZGluZyBib3ggb2YgaXQncyBzb3VyY2UvdGFyZ2V0IG5vZGVcbiAqL1xudmFyIGZpbmRDbGlwcGluZ1BvaW50ID0gZnVuY3Rpb24gZmluZENsaXBwaW5nUG9pbnQobm9kZSwgZFgsIGRZKSB7XG4gIC8vIFNob3JjdXRzXG4gIHZhciBYID0gbm9kZS5wb3NpdGlvblg7XG4gIHZhciBZID0gbm9kZS5wb3NpdGlvblk7XG4gIHZhciBIID0gbm9kZS5oZWlnaHQgfHwgMTtcbiAgdmFyIFcgPSBub2RlLndpZHRoIHx8IDE7XG4gIHZhciBkaXJTbG9wZSA9IGRZIC8gZFg7XG4gIHZhciBub2RlU2xvcGUgPSBIIC8gVztcblxuICAvLyB2YXIgcyA9ICdDb21wdXRpbmcgY2xpcHBpbmcgcG9pbnQgb2Ygbm9kZSAnICsgbm9kZS5pZCArXG4gIC8vICAgXCIgLiBIZWlnaHQ6ICBcIiArIEggKyBcIiwgV2lkdGg6IFwiICsgVyArXG4gIC8vICAgXCJcXG5EaXJlY3Rpb24gXCIgKyBkWCArIFwiLCBcIiArIGRZO1xuICAvL1xuICAvLyBDb21wdXRlIGludGVyc2VjdGlvblxuICB2YXIgcmVzID0ge307XG5cbiAgLy8gQ2FzZTogVmVydGljYWwgZGlyZWN0aW9uICh1cClcbiAgaWYgKDAgPT09IGRYICYmIDAgPCBkWSkge1xuICAgIHJlcy54ID0gWDtcbiAgICAvLyBzICs9IFwiXFxuVXAgZGlyZWN0aW9uXCI7XG4gICAgcmVzLnkgPSBZICsgSCAvIDI7XG4gICAgcmV0dXJuIHJlcztcbiAgfVxuXG4gIC8vIENhc2U6IFZlcnRpY2FsIGRpcmVjdGlvbiAoZG93bilcbiAgaWYgKDAgPT09IGRYICYmIDAgPiBkWSkge1xuICAgIHJlcy54ID0gWDtcbiAgICByZXMueSA9IFkgKyBIIC8gMjtcbiAgICAvLyBzICs9IFwiXFxuRG93biBkaXJlY3Rpb25cIjtcblxuICAgIHJldHVybiByZXM7XG4gIH1cblxuICAvLyBDYXNlOiBJbnRlcnNlY3RzIHRoZSByaWdodCBib3JkZXJcbiAgaWYgKDAgPCBkWCAmJiAtMSAqIG5vZGVTbG9wZSA8PSBkaXJTbG9wZSAmJiBkaXJTbG9wZSA8PSBub2RlU2xvcGUpIHtcbiAgICByZXMueCA9IFggKyBXIC8gMjtcbiAgICByZXMueSA9IFkgKyBXICogZFkgLyAyIC8gZFg7XG4gICAgLy8gcyArPSBcIlxcblJpZ2h0Ym9yZGVyXCI7XG5cbiAgICByZXR1cm4gcmVzO1xuICB9XG5cbiAgLy8gQ2FzZTogSW50ZXJzZWN0cyB0aGUgbGVmdCBib3JkZXJcbiAgaWYgKDAgPiBkWCAmJiAtMSAqIG5vZGVTbG9wZSA8PSBkaXJTbG9wZSAmJiBkaXJTbG9wZSA8PSBub2RlU2xvcGUpIHtcbiAgICByZXMueCA9IFggLSBXIC8gMjtcbiAgICByZXMueSA9IFkgLSBXICogZFkgLyAyIC8gZFg7XG4gICAgLy8gcyArPSBcIlxcbkxlZnRib3JkZXJcIjtcblxuICAgIHJldHVybiByZXM7XG4gIH1cblxuICAvLyBDYXNlOiBJbnRlcnNlY3RzIHRoZSB0b3AgYm9yZGVyXG4gIGlmICgwIDwgZFkgJiYgKGRpclNsb3BlIDw9IC0xICogbm9kZVNsb3BlIHx8IGRpclNsb3BlID49IG5vZGVTbG9wZSkpIHtcbiAgICByZXMueCA9IFggKyBIICogZFggLyAyIC8gZFk7XG4gICAgcmVzLnkgPSBZICsgSCAvIDI7XG4gICAgLy8gcyArPSBcIlxcblRvcCBib3JkZXJcIjtcblxuICAgIHJldHVybiByZXM7XG4gIH1cblxuICAvLyBDYXNlOiBJbnRlcnNlY3RzIHRoZSBib3R0b20gYm9yZGVyXG4gIGlmICgwID4gZFkgJiYgKGRpclNsb3BlIDw9IC0xICogbm9kZVNsb3BlIHx8IGRpclNsb3BlID49IG5vZGVTbG9wZSkpIHtcbiAgICByZXMueCA9IFggLSBIICogZFggLyAyIC8gZFk7XG4gICAgcmVzLnkgPSBZIC0gSCAvIDI7XG4gICAgLy8gcyArPSBcIlxcbkJvdHRvbSBib3JkZXJcIjtcblxuICAgIHJldHVybiByZXM7XG4gIH1cblxuICAvLyBzICs9IFwiXFxuQ2xpcHBpbmcgcG9pbnQgZm91bmQgYXQgXCIgKyByZXMueCArIFwiLCBcIiArIHJlcy55O1xuICAvLyBsb2dEZWJ1ZyhzKTtcbiAgcmV0dXJuIHJlcztcbn07XG5cbi8qKlxuICogQGJyaWVmIDogQ2FsY3VsYXRlcyBhbGwgZWRnZSBmb3JjZXNcbiAqL1xudmFyIGNhbGN1bGF0ZUVkZ2VGb3JjZXMgPSBmdW5jdGlvbiBjYWxjdWxhdGVFZGdlRm9yY2VzKGxheW91dEluZm8sIG9wdGlvbnMpIHtcbiAgLy8gSXRlcmF0ZSBvdmVyIGFsbCBlZGdlc1xuICBmb3IgKHZhciBpID0gMDsgaSA8IGxheW91dEluZm8uZWRnZVNpemU7IGkrKykge1xuICAgIC8vIEdldCBlZGdlLCBzb3VyY2UgJiB0YXJnZXQgbm9kZXNcbiAgICB2YXIgZWRnZSA9IGxheW91dEluZm8ubGF5b3V0RWRnZXNbaV07XG4gICAgdmFyIHNvdXJjZUl4ID0gbGF5b3V0SW5mby5pZFRvSW5kZXhbZWRnZS5zb3VyY2VJZF07XG4gICAgdmFyIHNvdXJjZSA9IGxheW91dEluZm8ubGF5b3V0Tm9kZXNbc291cmNlSXhdO1xuICAgIHZhciB0YXJnZXRJeCA9IGxheW91dEluZm8uaWRUb0luZGV4W2VkZ2UudGFyZ2V0SWRdO1xuICAgIHZhciB0YXJnZXQgPSBsYXlvdXRJbmZvLmxheW91dE5vZGVzW3RhcmdldEl4XTtcblxuICAgIC8vIEdldCBkaXJlY3Rpb24gb2YgbGluZSBjb25uZWN0aW5nIGJvdGggbm9kZSBjZW50ZXJzXG4gICAgdmFyIGRpcmVjdGlvblggPSB0YXJnZXQucG9zaXRpb25YIC0gc291cmNlLnBvc2l0aW9uWDtcbiAgICB2YXIgZGlyZWN0aW9uWSA9IHRhcmdldC5wb3NpdGlvblkgLSBzb3VyY2UucG9zaXRpb25ZO1xuXG4gICAgLy8gSWYgYm90aCBjZW50ZXJzIGFyZSB0aGUgc2FtZSwgZG8gbm90aGluZy5cbiAgICAvLyBBIHJhbmRvbSBmb3JjZSBoYXMgYWxyZWFkeSBiZWVuIGFwcGxpZWQgYXMgbm9kZSByZXB1bHNpb25cbiAgICBpZiAoMCA9PT0gZGlyZWN0aW9uWCAmJiAwID09PSBkaXJlY3Rpb25ZKSB7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG5cbiAgICAvLyBHZXQgY2xpcHBpbmcgcG9pbnRzIGZvciBib3RoIG5vZGVzXG4gICAgdmFyIHBvaW50MSA9IGZpbmRDbGlwcGluZ1BvaW50KHNvdXJjZSwgZGlyZWN0aW9uWCwgZGlyZWN0aW9uWSk7XG4gICAgdmFyIHBvaW50MiA9IGZpbmRDbGlwcGluZ1BvaW50KHRhcmdldCwgLTEgKiBkaXJlY3Rpb25YLCAtMSAqIGRpcmVjdGlvblkpO1xuICAgIHZhciBseCA9IHBvaW50Mi54IC0gcG9pbnQxLng7XG4gICAgdmFyIGx5ID0gcG9pbnQyLnkgLSBwb2ludDEueTtcbiAgICB2YXIgbCA9IE1hdGguc3FydChseCAqIGx4ICsgbHkgKiBseSk7XG4gICAgdmFyIGZvcmNlID0gTWF0aC5wb3coZWRnZS5pZGVhbExlbmd0aCAtIGwsIDIpIC8gZWRnZS5lbGFzdGljaXR5O1xuICAgIGlmICgwICE9PSBsKSB7XG4gICAgICB2YXIgZm9yY2VYID0gZm9yY2UgKiBseCAvIGw7XG4gICAgICB2YXIgZm9yY2VZID0gZm9yY2UgKiBseSAvIGw7XG4gICAgfSBlbHNlIHtcbiAgICAgIHZhciBmb3JjZVggPSAwO1xuICAgICAgdmFyIGZvcmNlWSA9IDA7XG4gICAgfVxuXG4gICAgLy8gQWRkIHRoaXMgZm9yY2UgdG8gdGFyZ2V0IGFuZCBzb3VyY2Ugbm9kZXNcbiAgICBpZiAoIXNvdXJjZS5pc0xvY2tlZCkge1xuICAgICAgc291cmNlLm9mZnNldFggKz0gZm9yY2VYO1xuICAgICAgc291cmNlLm9mZnNldFkgKz0gZm9yY2VZO1xuICAgIH1cbiAgICBpZiAoIXRhcmdldC5pc0xvY2tlZCkge1xuICAgICAgdGFyZ2V0Lm9mZnNldFggLT0gZm9yY2VYO1xuICAgICAgdGFyZ2V0Lm9mZnNldFkgLT0gZm9yY2VZO1xuICAgIH1cblxuICAgIC8vIHZhciBzID0gJ0VkZ2UgZm9yY2UgYmV0d2VlbiBub2RlcyAnICsgc291cmNlLmlkICsgJyBhbmQgJyArIHRhcmdldC5pZDtcbiAgICAvLyBzICs9IFwiXFxuRGlzdGFuY2U6IFwiICsgbCArIFwiIEZvcmNlOiAoXCIgKyBmb3JjZVggKyBcIiwgXCIgKyBmb3JjZVkgKyBcIilcIjtcbiAgICAvLyBsb2dEZWJ1ZyhzKTtcbiAgfVxufTtcblxuLyoqXG4gKiBAYnJpZWYgOiBDb21wdXRlcyBncmF2aXR5IGZvcmNlcyBmb3IgYWxsIG5vZGVzXG4gKi9cbnZhciBjYWxjdWxhdGVHcmF2aXR5Rm9yY2VzID0gZnVuY3Rpb24gY2FsY3VsYXRlR3Jhdml0eUZvcmNlcyhsYXlvdXRJbmZvLCBvcHRpb25zKSB7XG4gIGlmIChvcHRpb25zLmdyYXZpdHkgPT09IDApIHtcbiAgICByZXR1cm47XG4gIH1cbiAgdmFyIGRpc3RUaHJlc2hvbGQgPSAxO1xuXG4gIC8vIHZhciBzID0gJ2NhbGN1bGF0ZUdyYXZpdHlGb3JjZXMnO1xuICAvLyBsb2dEZWJ1ZyhzKTtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBsYXlvdXRJbmZvLmdyYXBoU2V0Lmxlbmd0aDsgaSsrKSB7XG4gICAgdmFyIGdyYXBoID0gbGF5b3V0SW5mby5ncmFwaFNldFtpXTtcbiAgICB2YXIgbnVtTm9kZXMgPSBncmFwaC5sZW5ndGg7XG5cbiAgICAvLyBzID0gXCJTZXQ6IFwiICsgZ3JhcGgudG9TdHJpbmcoKTtcbiAgICAvLyBsb2dEZWJ1ZyhzKTtcblxuICAgIC8vIENvbXB1dGUgZ3JhcGggY2VudGVyXG4gICAgaWYgKDAgPT09IGkpIHtcbiAgICAgIHZhciBjZW50ZXJYID0gbGF5b3V0SW5mby5jbGllbnRIZWlnaHQgLyAyO1xuICAgICAgdmFyIGNlbnRlclkgPSBsYXlvdXRJbmZvLmNsaWVudFdpZHRoIC8gMjtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gR2V0IFBhcmVudCBub2RlIGZvciB0aGlzIGdyYXBoLCBhbmQgdXNlIGl0cyBwb3NpdGlvbiBhcyBjZW50ZXJcbiAgICAgIHZhciB0ZW1wID0gbGF5b3V0SW5mby5sYXlvdXROb2Rlc1tsYXlvdXRJbmZvLmlkVG9JbmRleFtncmFwaFswXV1dO1xuICAgICAgdmFyIHBhcmVudCA9IGxheW91dEluZm8ubGF5b3V0Tm9kZXNbbGF5b3V0SW5mby5pZFRvSW5kZXhbdGVtcC5wYXJlbnRJZF1dO1xuICAgICAgdmFyIGNlbnRlclggPSBwYXJlbnQucG9zaXRpb25YO1xuICAgICAgdmFyIGNlbnRlclkgPSBwYXJlbnQucG9zaXRpb25ZO1xuICAgIH1cbiAgICAvLyBzID0gXCJDZW50ZXIgZm91bmQgYXQ6IFwiICsgY2VudGVyWCArIFwiLCBcIiArIGNlbnRlclk7XG4gICAgLy8gbG9nRGVidWcocyk7XG5cbiAgICAvLyBBcHBseSBmb3JjZSB0byBhbGwgbm9kZXMgaW4gZ3JhcGhcbiAgICBmb3IgKHZhciBqID0gMDsgaiA8IG51bU5vZGVzOyBqKyspIHtcbiAgICAgIHZhciBub2RlID0gbGF5b3V0SW5mby5sYXlvdXROb2Rlc1tsYXlvdXRJbmZvLmlkVG9JbmRleFtncmFwaFtqXV1dO1xuICAgICAgLy8gcyA9IFwiTm9kZTogXCIgKyBub2RlLmlkO1xuXG4gICAgICBpZiAobm9kZS5pc0xvY2tlZCkge1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cbiAgICAgIHZhciBkeCA9IGNlbnRlclggLSBub2RlLnBvc2l0aW9uWDtcbiAgICAgIHZhciBkeSA9IGNlbnRlclkgLSBub2RlLnBvc2l0aW9uWTtcbiAgICAgIHZhciBkID0gTWF0aC5zcXJ0KGR4ICogZHggKyBkeSAqIGR5KTtcbiAgICAgIGlmIChkID4gZGlzdFRocmVzaG9sZCkge1xuICAgICAgICB2YXIgZnggPSBvcHRpb25zLmdyYXZpdHkgKiBkeCAvIGQ7XG4gICAgICAgIHZhciBmeSA9IG9wdGlvbnMuZ3Jhdml0eSAqIGR5IC8gZDtcbiAgICAgICAgbm9kZS5vZmZzZXRYICs9IGZ4O1xuICAgICAgICBub2RlLm9mZnNldFkgKz0gZnk7XG4gICAgICAgIC8vIHMgKz0gXCI6IEFwcGxpZWQgZm9yY2U6IFwiICsgZnggKyBcIiwgXCIgKyBmeTtcbiAgICAgIH1cbiAgICAgIC8vIGxvZ0RlYnVnKHMpO1xuICAgIH1cbiAgfVxufTtcblxuLyoqXG4gKiBAYnJpZWYgICAgICAgICAgOiBUaGlzIGZ1bmN0aW9uIHByb3BhZ2F0ZXMgdGhlIGV4aXN0aW5nIG9mZnNldHMgZnJvbVxuICogICAgICAgICAgICAgICAgICAgcGFyZW50IG5vZGVzIHRvIGl0cyBkZXNjZW5kZW50cy5cbiAqIEBhcmcgbGF5b3V0SW5mbyA6IGxheW91dEluZm8gT2JqZWN0XG4gKiBAYXJnIGN5ICAgICAgICAgOiBjeXRvc2NhcGUgT2JqZWN0XG4gKiBAYXJnIG9wdGlvbnMgICAgOiBMYXlvdXQgb3B0aW9uc1xuICovXG52YXIgcHJvcGFnYXRlRm9yY2VzID0gZnVuY3Rpb24gcHJvcGFnYXRlRm9yY2VzKGxheW91dEluZm8sIG9wdGlvbnMpIHtcbiAgLy8gSW5saW5lIGltcGxlbWVudGF0aW9uIG9mIGEgcXVldWUsIHVzZWQgZm9yIHRyYXZlcnNpbmcgdGhlIGdyYXBoIGluIEJGUyBvcmRlclxuICB2YXIgcXVldWUgPSBbXTtcbiAgdmFyIHN0YXJ0ID0gMDsgLy8gUG9pbnRzIHRvIHRoZSBzdGFydCB0aGUgcXVldWVcbiAgdmFyIGVuZCA9IC0xOyAvLyBQb2ludHMgdG8gdGhlIGVuZCBvZiB0aGUgcXVldWVcblxuICAvLyBsb2dEZWJ1ZygncHJvcGFnYXRlRm9yY2VzJyk7XG5cbiAgLy8gU3RhcnQgYnkgdmlzaXRpbmcgdGhlIG5vZGVzIGluIHRoZSByb290IGdyYXBoXG4gIHF1ZXVlLnB1c2guYXBwbHkocXVldWUsIGxheW91dEluZm8uZ3JhcGhTZXRbMF0pO1xuICBlbmQgKz0gbGF5b3V0SW5mby5ncmFwaFNldFswXS5sZW5ndGg7XG5cbiAgLy8gVHJhdmVyc2UgdGhlIGdyYXBoLCBsZXZlbCBieSBsZXZlbCxcbiAgd2hpbGUgKHN0YXJ0IDw9IGVuZCkge1xuICAgIC8vIEdldCB0aGUgbm9kZSB0byB2aXNpdCBhbmQgcmVtb3ZlIGl0IGZyb20gcXVldWVcbiAgICB2YXIgbm9kZUlkID0gcXVldWVbc3RhcnQrK107XG4gICAgdmFyIG5vZGVJbmRleCA9IGxheW91dEluZm8uaWRUb0luZGV4W25vZGVJZF07XG4gICAgdmFyIG5vZGUgPSBsYXlvdXRJbmZvLmxheW91dE5vZGVzW25vZGVJbmRleF07XG4gICAgdmFyIGNoaWxkcmVuID0gbm9kZS5jaGlsZHJlbjtcblxuICAgIC8vIFdlIG9ubHkgbmVlZCB0byBwcm9jZXNzIHRoZSBub2RlIGlmIGl0J3MgY29tcG91bmRcbiAgICBpZiAoMCA8IGNoaWxkcmVuLmxlbmd0aCAmJiAhbm9kZS5pc0xvY2tlZCkge1xuICAgICAgdmFyIG9mZlggPSBub2RlLm9mZnNldFg7XG4gICAgICB2YXIgb2ZmWSA9IG5vZGUub2Zmc2V0WTtcblxuICAgICAgLy8gdmFyIHMgPSBcIlByb3BhZ2F0aW5nIG9mZnNldCBmcm9tIHBhcmVudCBub2RlIDogXCIgKyBub2RlLmlkICtcbiAgICAgIC8vICAgXCIuIE9mZnNldFg6IFwiICsgb2ZmWCArIFwiLiBPZmZzZXRZOiBcIiArIG9mZlk7XG4gICAgICAvLyBzICs9IFwiXFxuIENoaWxkcmVuOiBcIiArIGNoaWxkcmVuLnRvU3RyaW5nKCk7XG4gICAgICAvLyBsb2dEZWJ1ZyhzKTtcblxuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBjaGlsZHJlbi5sZW5ndGg7IGkrKykge1xuICAgICAgICB2YXIgY2hpbGROb2RlID0gbGF5b3V0SW5mby5sYXlvdXROb2Rlc1tsYXlvdXRJbmZvLmlkVG9JbmRleFtjaGlsZHJlbltpXV1dO1xuICAgICAgICAvLyBQcm9wYWdhdGUgb2Zmc2V0XG4gICAgICAgIGNoaWxkTm9kZS5vZmZzZXRYICs9IG9mZlg7XG4gICAgICAgIGNoaWxkTm9kZS5vZmZzZXRZICs9IG9mZlk7XG4gICAgICAgIC8vIEFkZCBjaGlsZHJlbiB0byBxdWV1ZSB0byBiZSB2aXNpdGVkXG4gICAgICAgIHF1ZXVlWysrZW5kXSA9IGNoaWxkcmVuW2ldO1xuICAgICAgfVxuXG4gICAgICAvLyBSZXNldCBwYXJlbnQgb2Zmc2V0c1xuICAgICAgbm9kZS5vZmZzZXRYID0gMDtcbiAgICAgIG5vZGUub2Zmc2V0WSA9IDA7XG4gICAgfVxuICB9XG59O1xuXG4vKipcbiAqIEBicmllZiA6IFVwZGF0ZXMgdGhlIGxheW91dCBtb2RlbCBwb3NpdGlvbnMsIGJhc2VkIG9uXG4gKiAgICAgICAgICB0aGUgYWNjdW11bGF0ZWQgZm9yY2VzXG4gKi9cbnZhciB1cGRhdGVQb3NpdGlvbnMgPSBmdW5jdGlvbiB1cGRhdGVQb3NpdGlvbnMobGF5b3V0SW5mbywgb3B0aW9ucykge1xuICAvLyB2YXIgcyA9ICdVcGRhdGluZyBwb3NpdGlvbnMnO1xuICAvLyBsb2dEZWJ1ZyhzKTtcblxuICAvLyBSZXNldCBib3VuZGFyaWVzIGZvciBjb21wb3VuZCBub2Rlc1xuICBmb3IgKHZhciBpID0gMDsgaSA8IGxheW91dEluZm8ubm9kZVNpemU7IGkrKykge1xuICAgIHZhciBuID0gbGF5b3V0SW5mby5sYXlvdXROb2Rlc1tpXTtcbiAgICBpZiAoMCA8IG4uY2hpbGRyZW4ubGVuZ3RoKSB7XG4gICAgICAvLyBsb2dEZWJ1ZyhcIlJlc2V0dGluZyBib3VuZGFyaWVzIG9mIGNvbXBvdW5kIG5vZGU6IFwiICsgbi5pZCk7XG4gICAgICBuLm1heFggPSB1bmRlZmluZWQ7XG4gICAgICBuLm1pblggPSB1bmRlZmluZWQ7XG4gICAgICBuLm1heFkgPSB1bmRlZmluZWQ7XG4gICAgICBuLm1pblkgPSB1bmRlZmluZWQ7XG4gICAgfVxuICB9XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgbGF5b3V0SW5mby5ub2RlU2l6ZTsgaSsrKSB7XG4gICAgdmFyIG4gPSBsYXlvdXRJbmZvLmxheW91dE5vZGVzW2ldO1xuICAgIGlmICgwIDwgbi5jaGlsZHJlbi5sZW5ndGggfHwgbi5pc0xvY2tlZCkge1xuICAgICAgLy8gTm8gbmVlZCB0byBzZXQgY29tcG91bmQgb3IgbG9ja2VkIG5vZGUgcG9zaXRpb25cbiAgICAgIC8vIGxvZ0RlYnVnKFwiU2tpcHBpbmcgcG9zaXRpb24gdXBkYXRlIG9mIG5vZGU6IFwiICsgbi5pZCk7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG4gICAgLy8gcyA9IFwiTm9kZTogXCIgKyBuLmlkICsgXCIgUHJldmlvdXMgcG9zaXRpb246IChcIiArXG4gICAgLy8gbi5wb3NpdGlvblggKyBcIiwgXCIgKyBuLnBvc2l0aW9uWSArIFwiKS5cIjtcblxuICAgIC8vIExpbWl0IGRpc3BsYWNlbWVudCBpbiBvcmRlciB0byBpbXByb3ZlIHN0YWJpbGl0eVxuICAgIHZhciB0ZW1wRm9yY2UgPSBsaW1pdEZvcmNlKG4ub2Zmc2V0WCwgbi5vZmZzZXRZLCBsYXlvdXRJbmZvLnRlbXBlcmF0dXJlKTtcbiAgICBuLnBvc2l0aW9uWCArPSB0ZW1wRm9yY2UueDtcbiAgICBuLnBvc2l0aW9uWSArPSB0ZW1wRm9yY2UueTtcbiAgICBuLm9mZnNldFggPSAwO1xuICAgIG4ub2Zmc2V0WSA9IDA7XG4gICAgbi5taW5YID0gbi5wb3NpdGlvblggLSBuLndpZHRoO1xuICAgIG4ubWF4WCA9IG4ucG9zaXRpb25YICsgbi53aWR0aDtcbiAgICBuLm1pblkgPSBuLnBvc2l0aW9uWSAtIG4uaGVpZ2h0O1xuICAgIG4ubWF4WSA9IG4ucG9zaXRpb25ZICsgbi5oZWlnaHQ7XG4gICAgLy8gcyArPSBcIiBOZXcgUG9zaXRpb246IChcIiArIG4ucG9zaXRpb25YICsgXCIsIFwiICsgbi5wb3NpdGlvblkgKyBcIikuXCI7XG4gICAgLy8gbG9nRGVidWcocyk7XG5cbiAgICAvLyBVcGRhdGUgYW5jZXN0cnkgYm91ZGFyaWVzXG4gICAgX3VwZGF0ZUFuY2VzdHJ5Qm91bmRhcmllcyhuLCBsYXlvdXRJbmZvKTtcbiAgfVxuXG4gIC8vIFVwZGF0ZSBzaXplLCBwb3NpdGlvbiBvZiBjb21wdW5kIG5vZGVzXG4gIGZvciAodmFyIGkgPSAwOyBpIDwgbGF5b3V0SW5mby5ub2RlU2l6ZTsgaSsrKSB7XG4gICAgdmFyIG4gPSBsYXlvdXRJbmZvLmxheW91dE5vZGVzW2ldO1xuICAgIGlmICgwIDwgbi5jaGlsZHJlbi5sZW5ndGggJiYgIW4uaXNMb2NrZWQpIHtcbiAgICAgIG4ucG9zaXRpb25YID0gKG4ubWF4WCArIG4ubWluWCkgLyAyO1xuICAgICAgbi5wb3NpdGlvblkgPSAobi5tYXhZICsgbi5taW5ZKSAvIDI7XG4gICAgICBuLndpZHRoID0gbi5tYXhYIC0gbi5taW5YO1xuICAgICAgbi5oZWlnaHQgPSBuLm1heFkgLSBuLm1pblk7XG4gICAgICAvLyBzID0gXCJVcGRhdGluZyBwb3NpdGlvbiwgc2l6ZSBvZiBjb21wb3VuZCBub2RlIFwiICsgbi5pZDtcbiAgICAgIC8vIHMgKz0gXCJcXG5Qb3NpdGlvblg6IFwiICsgbi5wb3NpdGlvblggKyBcIiwgUG9zaXRpb25ZOiBcIiArIG4ucG9zaXRpb25ZO1xuICAgICAgLy8gcyArPSBcIlxcbldpZHRoOiBcIiArIG4ud2lkdGggKyBcIiwgSGVpZ2h0OiBcIiArIG4uaGVpZ2h0O1xuICAgICAgLy8gbG9nRGVidWcocyk7XG4gICAgfVxuICB9XG59O1xuXG4vKipcbiAqIEBicmllZiA6IExpbWl0cyBhIGZvcmNlIChmb3JjZVgsIGZvcmNlWSkgdG8gYmUgbm90XG4gKiAgICAgICAgICBncmVhdGVyIChpbiBtb2R1bG8pIHRoYW4gbWF4LlxuIDggICAgICAgICAgUHJlc2VydmVzIGZvcmNlIGRpcmVjdGlvbi5cbiAgKi9cbnZhciBsaW1pdEZvcmNlID0gZnVuY3Rpb24gbGltaXRGb3JjZShmb3JjZVgsIGZvcmNlWSwgbWF4KSB7XG4gIC8vIHZhciBzID0gXCJMaW1pdGluZyBmb3JjZTogKFwiICsgZm9yY2VYICsgXCIsIFwiICsgZm9yY2VZICsgXCIpLiBNYXg6IFwiICsgbWF4O1xuICB2YXIgZm9yY2UgPSBNYXRoLnNxcnQoZm9yY2VYICogZm9yY2VYICsgZm9yY2VZICogZm9yY2VZKTtcbiAgaWYgKGZvcmNlID4gbWF4KSB7XG4gICAgdmFyIHJlcyA9IHtcbiAgICAgIHg6IG1heCAqIGZvcmNlWCAvIGZvcmNlLFxuICAgICAgeTogbWF4ICogZm9yY2VZIC8gZm9yY2VcbiAgICB9O1xuICB9IGVsc2Uge1xuICAgIHZhciByZXMgPSB7XG4gICAgICB4OiBmb3JjZVgsXG4gICAgICB5OiBmb3JjZVlcbiAgICB9O1xuICB9XG5cbiAgLy8gcyArPSBcIi5cXG5SZXN1bHQ6IChcIiArIHJlcy54ICsgXCIsIFwiICsgcmVzLnkgKyBcIilcIjtcbiAgLy8gbG9nRGVidWcocyk7XG5cbiAgcmV0dXJuIHJlcztcbn07XG5cbi8qKlxuICogQGJyaWVmIDogRnVuY3Rpb24gdXNlZCBmb3Iga2VlcGluZyB0cmFjayBvZiBjb21wb3VuZCBub2RlXG4gKiAgICAgICAgICBzaXplcywgc2luY2UgdGhleSBzaG91bGQgYm91bmQgYWxsIHRoZWlyIHN1Ym5vZGVzLlxuICovXG52YXIgX3VwZGF0ZUFuY2VzdHJ5Qm91bmRhcmllcyA9IGZ1bmN0aW9uIHVwZGF0ZUFuY2VzdHJ5Qm91bmRhcmllcyhub2RlLCBsYXlvdXRJbmZvKSB7XG4gIC8vIHZhciBzID0gXCJQcm9wYWdhdGluZyBuZXcgcG9zaXRpb24vc2l6ZSBvZiBub2RlIFwiICsgbm9kZS5pZDtcbiAgdmFyIHBhcmVudElkID0gbm9kZS5wYXJlbnRJZDtcbiAgaWYgKG51bGwgPT0gcGFyZW50SWQpIHtcbiAgICAvLyBJZiB0aGVyZSdzIG5vIHBhcmVudCwgd2UgYXJlIGRvbmVcbiAgICAvLyBzICs9IFwiLiBObyBwYXJlbnQgbm9kZS5cIjtcbiAgICAvLyBsb2dEZWJ1ZyhzKTtcbiAgICByZXR1cm47XG4gIH1cblxuICAvLyBHZXQgUGFyZW50IE5vZGVcbiAgdmFyIHAgPSBsYXlvdXRJbmZvLmxheW91dE5vZGVzW2xheW91dEluZm8uaWRUb0luZGV4W3BhcmVudElkXV07XG4gIHZhciBmbGFnID0gZmFsc2U7XG5cbiAgLy8gTWF4WFxuICBpZiAobnVsbCA9PSBwLm1heFggfHwgbm9kZS5tYXhYICsgcC5wYWRSaWdodCA+IHAubWF4WCkge1xuICAgIHAubWF4WCA9IG5vZGUubWF4WCArIHAucGFkUmlnaHQ7XG4gICAgZmxhZyA9IHRydWU7XG4gICAgLy8gcyArPSBcIlxcbk5ldyBtYXhYIGZvciBwYXJlbnQgbm9kZSBcIiArIHAuaWQgKyBcIjogXCIgKyBwLm1heFg7XG4gIH1cblxuICAvLyBNaW5YXG4gIGlmIChudWxsID09IHAubWluWCB8fCBub2RlLm1pblggLSBwLnBhZExlZnQgPCBwLm1pblgpIHtcbiAgICBwLm1pblggPSBub2RlLm1pblggLSBwLnBhZExlZnQ7XG4gICAgZmxhZyA9IHRydWU7XG4gICAgLy8gcyArPSBcIlxcbk5ldyBtaW5YIGZvciBwYXJlbnQgbm9kZSBcIiArIHAuaWQgKyBcIjogXCIgKyBwLm1pblg7XG4gIH1cblxuICAvLyBNYXhZXG4gIGlmIChudWxsID09IHAubWF4WSB8fCBub2RlLm1heFkgKyBwLnBhZEJvdHRvbSA+IHAubWF4WSkge1xuICAgIHAubWF4WSA9IG5vZGUubWF4WSArIHAucGFkQm90dG9tO1xuICAgIGZsYWcgPSB0cnVlO1xuICAgIC8vIHMgKz0gXCJcXG5OZXcgbWF4WSBmb3IgcGFyZW50IG5vZGUgXCIgKyBwLmlkICsgXCI6IFwiICsgcC5tYXhZO1xuICB9XG5cbiAgLy8gTWluWVxuICBpZiAobnVsbCA9PSBwLm1pblkgfHwgbm9kZS5taW5ZIC0gcC5wYWRUb3AgPCBwLm1pblkpIHtcbiAgICBwLm1pblkgPSBub2RlLm1pblkgLSBwLnBhZFRvcDtcbiAgICBmbGFnID0gdHJ1ZTtcbiAgICAvLyBzICs9IFwiXFxuTmV3IG1pblkgZm9yIHBhcmVudCBub2RlIFwiICsgcC5pZCArIFwiOiBcIiArIHAubWluWTtcbiAgfVxuXG4gIC8vIElmIHVwZGF0ZWQgYm91bmRhcmllcywgcHJvcGFnYXRlIGNoYW5nZXMgdXB3YXJkXG4gIGlmIChmbGFnKSB7XG4gICAgLy8gbG9nRGVidWcocyk7XG4gICAgcmV0dXJuIF91cGRhdGVBbmNlc3RyeUJvdW5kYXJpZXMocCwgbGF5b3V0SW5mbyk7XG4gIH1cblxuICAvLyBzICs9IFwiLiBObyBjaGFuZ2VzIGluIGJvdW5kYXJpZXMvcG9zaXRpb24gb2YgcGFyZW50IG5vZGUgXCIgKyBwLmlkO1xuICAvLyBsb2dEZWJ1ZyhzKTtcbiAgcmV0dXJuO1xufTtcbnZhciBzZXBhcmF0ZUNvbXBvbmVudHMgPSBmdW5jdGlvbiBzZXBhcmF0ZUNvbXBvbmVudHMobGF5b3V0SW5mbywgb3B0aW9ucykge1xuICB2YXIgbm9kZXMgPSBsYXlvdXRJbmZvLmxheW91dE5vZGVzO1xuICB2YXIgY29tcG9uZW50cyA9IFtdO1xuICBmb3IgKHZhciBpID0gMDsgaSA8IG5vZGVzLmxlbmd0aDsgaSsrKSB7XG4gICAgdmFyIG5vZGUgPSBub2Rlc1tpXTtcbiAgICB2YXIgY2lkID0gbm9kZS5jbXB0SWQ7XG4gICAgdmFyIGNvbXBvbmVudCA9IGNvbXBvbmVudHNbY2lkXSA9IGNvbXBvbmVudHNbY2lkXSB8fCBbXTtcbiAgICBjb21wb25lbnQucHVzaChub2RlKTtcbiAgfVxuICB2YXIgdG90YWxBID0gMDtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBjb21wb25lbnRzLmxlbmd0aDsgaSsrKSB7XG4gICAgdmFyIGMgPSBjb21wb25lbnRzW2ldO1xuICAgIGlmICghYykge1xuICAgICAgY29udGludWU7XG4gICAgfVxuICAgIGMueDEgPSBJbmZpbml0eTtcbiAgICBjLngyID0gLUluZmluaXR5O1xuICAgIGMueTEgPSBJbmZpbml0eTtcbiAgICBjLnkyID0gLUluZmluaXR5O1xuICAgIGZvciAodmFyIGogPSAwOyBqIDwgYy5sZW5ndGg7IGorKykge1xuICAgICAgdmFyIG4gPSBjW2pdO1xuICAgICAgYy54MSA9IE1hdGgubWluKGMueDEsIG4ucG9zaXRpb25YIC0gbi53aWR0aCAvIDIpO1xuICAgICAgYy54MiA9IE1hdGgubWF4KGMueDIsIG4ucG9zaXRpb25YICsgbi53aWR0aCAvIDIpO1xuICAgICAgYy55MSA9IE1hdGgubWluKGMueTEsIG4ucG9zaXRpb25ZIC0gbi5oZWlnaHQgLyAyKTtcbiAgICAgIGMueTIgPSBNYXRoLm1heChjLnkyLCBuLnBvc2l0aW9uWSArIG4uaGVpZ2h0IC8gMik7XG4gICAgfVxuICAgIGMudyA9IGMueDIgLSBjLngxO1xuICAgIGMuaCA9IGMueTIgLSBjLnkxO1xuICAgIHRvdGFsQSArPSBjLncgKiBjLmg7XG4gIH1cbiAgY29tcG9uZW50cy5zb3J0KGZ1bmN0aW9uIChjMSwgYzIpIHtcbiAgICByZXR1cm4gYzIudyAqIGMyLmggLSBjMS53ICogYzEuaDtcbiAgfSk7XG4gIHZhciB4ID0gMDtcbiAgdmFyIHkgPSAwO1xuICB2YXIgdXNlZFcgPSAwO1xuICB2YXIgcm93SCA9IDA7XG4gIHZhciBtYXhSb3dXID0gTWF0aC5zcXJ0KHRvdGFsQSkgKiBsYXlvdXRJbmZvLmNsaWVudFdpZHRoIC8gbGF5b3V0SW5mby5jbGllbnRIZWlnaHQ7XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgY29tcG9uZW50cy5sZW5ndGg7IGkrKykge1xuICAgIHZhciBjID0gY29tcG9uZW50c1tpXTtcbiAgICBpZiAoIWMpIHtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cbiAgICBmb3IgKHZhciBqID0gMDsgaiA8IGMubGVuZ3RoOyBqKyspIHtcbiAgICAgIHZhciBuID0gY1tqXTtcbiAgICAgIGlmICghbi5pc0xvY2tlZCkge1xuICAgICAgICBuLnBvc2l0aW9uWCArPSB4IC0gYy54MTtcbiAgICAgICAgbi5wb3NpdGlvblkgKz0geSAtIGMueTE7XG4gICAgICB9XG4gICAgfVxuICAgIHggKz0gYy53ICsgb3B0aW9ucy5jb21wb25lbnRTcGFjaW5nO1xuICAgIHVzZWRXICs9IGMudyArIG9wdGlvbnMuY29tcG9uZW50U3BhY2luZztcbiAgICByb3dIID0gTWF0aC5tYXgocm93SCwgYy5oKTtcbiAgICBpZiAodXNlZFcgPiBtYXhSb3dXKSB7XG4gICAgICB5ICs9IHJvd0ggKyBvcHRpb25zLmNvbXBvbmVudFNwYWNpbmc7XG4gICAgICB4ID0gMDtcbiAgICAgIHVzZWRXID0gMDtcbiAgICAgIHJvd0ggPSAwO1xuICAgIH1cbiAgfVxufTtcblxudmFyIGRlZmF1bHRzJDMgPSB7XG4gIGZpdDogdHJ1ZSxcbiAgLy8gd2hldGhlciB0byBmaXQgdGhlIHZpZXdwb3J0IHRvIHRoZSBncmFwaFxuICBwYWRkaW5nOiAzMCxcbiAgLy8gcGFkZGluZyB1c2VkIG9uIGZpdFxuICBib3VuZGluZ0JveDogdW5kZWZpbmVkLFxuICAvLyBjb25zdHJhaW4gbGF5b3V0IGJvdW5kczsgeyB4MSwgeTEsIHgyLCB5MiB9IG9yIHsgeDEsIHkxLCB3LCBoIH1cbiAgYXZvaWRPdmVybGFwOiB0cnVlLFxuICAvLyBwcmV2ZW50cyBub2RlIG92ZXJsYXAsIG1heSBvdmVyZmxvdyBib3VuZGluZ0JveCBpZiBub3QgZW5vdWdoIHNwYWNlXG4gIGF2b2lkT3ZlcmxhcFBhZGRpbmc6IDEwLFxuICAvLyBleHRyYSBzcGFjaW5nIGFyb3VuZCBub2RlcyB3aGVuIGF2b2lkT3ZlcmxhcDogdHJ1ZVxuICBub2RlRGltZW5zaW9uc0luY2x1ZGVMYWJlbHM6IGZhbHNlLFxuICAvLyBFeGNsdWRlcyB0aGUgbGFiZWwgd2hlbiBjYWxjdWxhdGluZyBub2RlIGJvdW5kaW5nIGJveGVzIGZvciB0aGUgbGF5b3V0IGFsZ29yaXRobVxuICBzcGFjaW5nRmFjdG9yOiB1bmRlZmluZWQsXG4gIC8vIEFwcGxpZXMgYSBtdWx0aXBsaWNhdGl2ZSBmYWN0b3IgKD4wKSB0byBleHBhbmQgb3IgY29tcHJlc3MgdGhlIG92ZXJhbGwgYXJlYSB0aGF0IHRoZSBub2RlcyB0YWtlIHVwXG4gIGNvbmRlbnNlOiBmYWxzZSxcbiAgLy8gdXNlcyBhbGwgYXZhaWxhYmxlIHNwYWNlIG9uIGZhbHNlLCB1c2VzIG1pbmltYWwgc3BhY2Ugb24gdHJ1ZVxuICByb3dzOiB1bmRlZmluZWQsXG4gIC8vIGZvcmNlIG51bSBvZiByb3dzIGluIHRoZSBncmlkXG4gIGNvbHM6IHVuZGVmaW5lZCxcbiAgLy8gZm9yY2UgbnVtIG9mIGNvbHVtbnMgaW4gdGhlIGdyaWRcbiAgcG9zaXRpb246IGZ1bmN0aW9uIHBvc2l0aW9uKG5vZGUpIHt9LFxuICAvLyByZXR1cm5zIHsgcm93LCBjb2wgfSBmb3IgZWxlbWVudFxuICBzb3J0OiB1bmRlZmluZWQsXG4gIC8vIGEgc29ydGluZyBmdW5jdGlvbiB0byBvcmRlciB0aGUgbm9kZXM7IGUuZy4gZnVuY3Rpb24oYSwgYil7IHJldHVybiBhLmRhdGEoJ3dlaWdodCcpIC0gYi5kYXRhKCd3ZWlnaHQnKSB9XG4gIGFuaW1hdGU6IGZhbHNlLFxuICAvLyB3aGV0aGVyIHRvIHRyYW5zaXRpb24gdGhlIG5vZGUgcG9zaXRpb25zXG4gIGFuaW1hdGlvbkR1cmF0aW9uOiA1MDAsXG4gIC8vIGR1cmF0aW9uIG9mIGFuaW1hdGlvbiBpbiBtcyBpZiBlbmFibGVkXG4gIGFuaW1hdGlvbkVhc2luZzogdW5kZWZpbmVkLFxuICAvLyBlYXNpbmcgb2YgYW5pbWF0aW9uIGlmIGVuYWJsZWRcbiAgYW5pbWF0ZUZpbHRlcjogZnVuY3Rpb24gYW5pbWF0ZUZpbHRlcihub2RlLCBpKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH0sXG4gIC8vIGEgZnVuY3Rpb24gdGhhdCBkZXRlcm1pbmVzIHdoZXRoZXIgdGhlIG5vZGUgc2hvdWxkIGJlIGFuaW1hdGVkLiAgQWxsIG5vZGVzIGFuaW1hdGVkIGJ5IGRlZmF1bHQgb24gYW5pbWF0ZSBlbmFibGVkLiAgTm9uLWFuaW1hdGVkIG5vZGVzIGFyZSBwb3NpdGlvbmVkIGltbWVkaWF0ZWx5IHdoZW4gdGhlIGxheW91dCBzdGFydHNcbiAgcmVhZHk6IHVuZGVmaW5lZCxcbiAgLy8gY2FsbGJhY2sgb24gbGF5b3V0cmVhZHlcbiAgc3RvcDogdW5kZWZpbmVkLFxuICAvLyBjYWxsYmFjayBvbiBsYXlvdXRzdG9wXG4gIHRyYW5zZm9ybTogZnVuY3Rpb24gdHJhbnNmb3JtKG5vZGUsIHBvc2l0aW9uKSB7XG4gICAgcmV0dXJuIHBvc2l0aW9uO1xuICB9IC8vIHRyYW5zZm9ybSBhIGdpdmVuIG5vZGUgcG9zaXRpb24uIFVzZWZ1bCBmb3IgY2hhbmdpbmcgZmxvdyBkaXJlY3Rpb24gaW4gZGlzY3JldGUgbGF5b3V0cyBcbn07XG5mdW5jdGlvbiBHcmlkTGF5b3V0KG9wdGlvbnMpIHtcbiAgdGhpcy5vcHRpb25zID0gZXh0ZW5kKHt9LCBkZWZhdWx0cyQzLCBvcHRpb25zKTtcbn1cbkdyaWRMYXlvdXQucHJvdG90eXBlLnJ1biA9IGZ1bmN0aW9uICgpIHtcbiAgdmFyIHBhcmFtcyA9IHRoaXMub3B0aW9ucztcbiAgdmFyIG9wdGlvbnMgPSBwYXJhbXM7XG4gIHZhciBjeSA9IHBhcmFtcy5jeTtcbiAgdmFyIGVsZXMgPSBvcHRpb25zLmVsZXM7XG4gIHZhciBub2RlcyA9IGVsZXMubm9kZXMoKS5ub3QoJzpwYXJlbnQnKTtcbiAgaWYgKG9wdGlvbnMuc29ydCkge1xuICAgIG5vZGVzID0gbm9kZXMuc29ydChvcHRpb25zLnNvcnQpO1xuICB9XG4gIHZhciBiYiA9IG1ha2VCb3VuZGluZ0JveChvcHRpb25zLmJvdW5kaW5nQm94ID8gb3B0aW9ucy5ib3VuZGluZ0JveCA6IHtcbiAgICB4MTogMCxcbiAgICB5MTogMCxcbiAgICB3OiBjeS53aWR0aCgpLFxuICAgIGg6IGN5LmhlaWdodCgpXG4gIH0pO1xuICBpZiAoYmIuaCA9PT0gMCB8fCBiYi53ID09PSAwKSB7XG4gICAgZWxlcy5ub2RlcygpLmxheW91dFBvc2l0aW9ucyh0aGlzLCBvcHRpb25zLCBmdW5jdGlvbiAoZWxlKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICB4OiBiYi54MSxcbiAgICAgICAgeTogYmIueTFcbiAgICAgIH07XG4gICAgfSk7XG4gIH0gZWxzZSB7XG4gICAgLy8gd2lkdGgvaGVpZ2h0ICogc3BsaXRzXjIgPSBjZWxscyB3aGVyZSBzcGxpdHMgaXMgbnVtYmVyIG9mIHRpbWVzIHRvIHNwbGl0IHdpZHRoXG4gICAgdmFyIGNlbGxzID0gbm9kZXMuc2l6ZSgpO1xuICAgIHZhciBzcGxpdHMgPSBNYXRoLnNxcnQoY2VsbHMgKiBiYi5oIC8gYmIudyk7XG4gICAgdmFyIHJvd3MgPSBNYXRoLnJvdW5kKHNwbGl0cyk7XG4gICAgdmFyIGNvbHMgPSBNYXRoLnJvdW5kKGJiLncgLyBiYi5oICogc3BsaXRzKTtcbiAgICB2YXIgc21hbGwgPSBmdW5jdGlvbiBzbWFsbCh2YWwpIHtcbiAgICAgIGlmICh2YWwgPT0gbnVsbCkge1xuICAgICAgICByZXR1cm4gTWF0aC5taW4ocm93cywgY29scyk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB2YXIgbWluID0gTWF0aC5taW4ocm93cywgY29scyk7XG4gICAgICAgIGlmIChtaW4gPT0gcm93cykge1xuICAgICAgICAgIHJvd3MgPSB2YWw7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgY29scyA9IHZhbDtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH07XG4gICAgdmFyIGxhcmdlID0gZnVuY3Rpb24gbGFyZ2UodmFsKSB7XG4gICAgICBpZiAodmFsID09IG51bGwpIHtcbiAgICAgICAgcmV0dXJuIE1hdGgubWF4KHJvd3MsIGNvbHMpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdmFyIG1heCA9IE1hdGgubWF4KHJvd3MsIGNvbHMpO1xuICAgICAgICBpZiAobWF4ID09IHJvd3MpIHtcbiAgICAgICAgICByb3dzID0gdmFsO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGNvbHMgPSB2YWw7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9O1xuICAgIHZhciBvUm93cyA9IG9wdGlvbnMucm93cztcbiAgICB2YXIgb0NvbHMgPSBvcHRpb25zLmNvbHMgIT0gbnVsbCA/IG9wdGlvbnMuY29scyA6IG9wdGlvbnMuY29sdW1ucztcblxuICAgIC8vIGlmIHJvd3Mgb3IgY29sdW1ucyB3ZXJlIHNldCBpbiBvcHRpb25zLCB1c2UgdGhvc2UgdmFsdWVzXG4gICAgaWYgKG9Sb3dzICE9IG51bGwgJiYgb0NvbHMgIT0gbnVsbCkge1xuICAgICAgcm93cyA9IG9Sb3dzO1xuICAgICAgY29scyA9IG9Db2xzO1xuICAgIH0gZWxzZSBpZiAob1Jvd3MgIT0gbnVsbCAmJiBvQ29scyA9PSBudWxsKSB7XG4gICAgICByb3dzID0gb1Jvd3M7XG4gICAgICBjb2xzID0gTWF0aC5jZWlsKGNlbGxzIC8gcm93cyk7XG4gICAgfSBlbHNlIGlmIChvUm93cyA9PSBudWxsICYmIG9Db2xzICE9IG51bGwpIHtcbiAgICAgIGNvbHMgPSBvQ29scztcbiAgICAgIHJvd3MgPSBNYXRoLmNlaWwoY2VsbHMgLyBjb2xzKTtcbiAgICB9XG5cbiAgICAvLyBvdGhlcndpc2UgdXNlIHRoZSBhdXRvbWF0aWMgdmFsdWVzIGFuZCBhZGp1c3QgYWNjb3JkaW5nbHlcblxuICAgIC8vIGlmIHJvdW5kaW5nIHdhcyB1cCwgc2VlIGlmIHdlIGNhbiByZWR1Y2Ugcm93cyBvciBjb2x1bW5zXG4gICAgZWxzZSBpZiAoY29scyAqIHJvd3MgPiBjZWxscykge1xuICAgICAgdmFyIHNtID0gc21hbGwoKTtcbiAgICAgIHZhciBsZyA9IGxhcmdlKCk7XG5cbiAgICAgIC8vIHJlZHVjaW5nIHRoZSBzbWFsbCBzaWRlIHRha2VzIGF3YXkgdGhlIG1vc3QgY2VsbHMsIHNvIHRyeSBpdCBmaXJzdFxuICAgICAgaWYgKChzbSAtIDEpICogbGcgPj0gY2VsbHMpIHtcbiAgICAgICAgc21hbGwoc20gLSAxKTtcbiAgICAgIH0gZWxzZSBpZiAoKGxnIC0gMSkgKiBzbSA+PSBjZWxscykge1xuICAgICAgICBsYXJnZShsZyAtIDEpO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICAvLyBpZiByb3VuZGluZyB3YXMgdG9vIGxvdywgYWRkIHJvd3Mgb3IgY29sdW1uc1xuICAgICAgd2hpbGUgKGNvbHMgKiByb3dzIDwgY2VsbHMpIHtcbiAgICAgICAgdmFyIF9zbSA9IHNtYWxsKCk7XG4gICAgICAgIHZhciBfbGcgPSBsYXJnZSgpO1xuXG4gICAgICAgIC8vIHRyeSB0byBhZGQgdG8gbGFyZ2VyIHNpZGUgZmlyc3QgKGFkZHMgbGVzcyBpbiBtdWx0aXBsaWNhdGlvbilcbiAgICAgICAgaWYgKChfbGcgKyAxKSAqIF9zbSA+PSBjZWxscykge1xuICAgICAgICAgIGxhcmdlKF9sZyArIDEpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHNtYWxsKF9zbSArIDEpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIHZhciBjZWxsV2lkdGggPSBiYi53IC8gY29scztcbiAgICB2YXIgY2VsbEhlaWdodCA9IGJiLmggLyByb3dzO1xuICAgIGlmIChvcHRpb25zLmNvbmRlbnNlKSB7XG4gICAgICBjZWxsV2lkdGggPSAwO1xuICAgICAgY2VsbEhlaWdodCA9IDA7XG4gICAgfVxuICAgIGlmIChvcHRpb25zLmF2b2lkT3ZlcmxhcCkge1xuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBub2Rlcy5sZW5ndGg7IGkrKykge1xuICAgICAgICB2YXIgbm9kZSA9IG5vZGVzW2ldO1xuICAgICAgICB2YXIgcG9zID0gbm9kZS5fcHJpdmF0ZS5wb3NpdGlvbjtcbiAgICAgICAgaWYgKHBvcy54ID09IG51bGwgfHwgcG9zLnkgPT0gbnVsbCkge1xuICAgICAgICAgIC8vIGZvciBiYlxuICAgICAgICAgIHBvcy54ID0gMDtcbiAgICAgICAgICBwb3MueSA9IDA7XG4gICAgICAgIH1cbiAgICAgICAgdmFyIG5iYiA9IG5vZGUubGF5b3V0RGltZW5zaW9ucyhvcHRpb25zKTtcbiAgICAgICAgdmFyIHAgPSBvcHRpb25zLmF2b2lkT3ZlcmxhcFBhZGRpbmc7XG4gICAgICAgIHZhciB3ID0gbmJiLncgKyBwO1xuICAgICAgICB2YXIgaCA9IG5iYi5oICsgcDtcbiAgICAgICAgY2VsbFdpZHRoID0gTWF0aC5tYXgoY2VsbFdpZHRoLCB3KTtcbiAgICAgICAgY2VsbEhlaWdodCA9IE1hdGgubWF4KGNlbGxIZWlnaHQsIGgpO1xuICAgICAgfVxuICAgIH1cbiAgICB2YXIgY2VsbFVzZWQgPSB7fTsgLy8gZS5nLiAnYy0wLTInID0+IHRydWVcblxuICAgIHZhciB1c2VkID0gZnVuY3Rpb24gdXNlZChyb3csIGNvbCkge1xuICAgICAgcmV0dXJuIGNlbGxVc2VkWydjLScgKyByb3cgKyAnLScgKyBjb2xdID8gdHJ1ZSA6IGZhbHNlO1xuICAgIH07XG4gICAgdmFyIHVzZSA9IGZ1bmN0aW9uIHVzZShyb3csIGNvbCkge1xuICAgICAgY2VsbFVzZWRbJ2MtJyArIHJvdyArICctJyArIGNvbF0gPSB0cnVlO1xuICAgIH07XG5cbiAgICAvLyB0byBrZWVwIHRyYWNrIG9mIGN1cnJlbnQgY2VsbCBwb3NpdGlvblxuICAgIHZhciByb3cgPSAwO1xuICAgIHZhciBjb2wgPSAwO1xuICAgIHZhciBtb3ZlVG9OZXh0Q2VsbCA9IGZ1bmN0aW9uIG1vdmVUb05leHRDZWxsKCkge1xuICAgICAgY29sKys7XG4gICAgICBpZiAoY29sID49IGNvbHMpIHtcbiAgICAgICAgY29sID0gMDtcbiAgICAgICAgcm93Kys7XG4gICAgICB9XG4gICAgfTtcblxuICAgIC8vIGdldCBhIGNhY2hlIG9mIGFsbCB0aGUgbWFudWFsIHBvc2l0aW9uc1xuICAgIHZhciBpZDJtYW5Qb3MgPSB7fTtcbiAgICBmb3IgKHZhciBfaSA9IDA7IF9pIDwgbm9kZXMubGVuZ3RoOyBfaSsrKSB7XG4gICAgICB2YXIgX25vZGUgPSBub2Rlc1tfaV07XG4gICAgICB2YXIgcmNQb3MgPSBvcHRpb25zLnBvc2l0aW9uKF9ub2RlKTtcbiAgICAgIGlmIChyY1BvcyAmJiAocmNQb3Mucm93ICE9PSB1bmRlZmluZWQgfHwgcmNQb3MuY29sICE9PSB1bmRlZmluZWQpKSB7XG4gICAgICAgIC8vIG11c3QgaGF2ZSBhdCBsZWFzdCByb3cgb3IgY29sIGRlZidkXG4gICAgICAgIHZhciBfcG9zID0ge1xuICAgICAgICAgIHJvdzogcmNQb3Mucm93LFxuICAgICAgICAgIGNvbDogcmNQb3MuY29sXG4gICAgICAgIH07XG4gICAgICAgIGlmIChfcG9zLmNvbCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgLy8gZmluZCB1bnVzZWQgY29sXG4gICAgICAgICAgX3Bvcy5jb2wgPSAwO1xuICAgICAgICAgIHdoaWxlICh1c2VkKF9wb3Mucm93LCBfcG9zLmNvbCkpIHtcbiAgICAgICAgICAgIF9wb3MuY29sKys7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2UgaWYgKF9wb3Mucm93ID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAvLyBmaW5kIHVudXNlZCByb3dcbiAgICAgICAgICBfcG9zLnJvdyA9IDA7XG4gICAgICAgICAgd2hpbGUgKHVzZWQoX3Bvcy5yb3csIF9wb3MuY29sKSkge1xuICAgICAgICAgICAgX3Bvcy5yb3crKztcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWQybWFuUG9zW19ub2RlLmlkKCldID0gX3BvcztcbiAgICAgICAgdXNlKF9wb3Mucm93LCBfcG9zLmNvbCk7XG4gICAgICB9XG4gICAgfVxuICAgIHZhciBnZXRQb3MgPSBmdW5jdGlvbiBnZXRQb3MoZWxlbWVudCwgaSkge1xuICAgICAgdmFyIHgsIHk7XG4gICAgICBpZiAoZWxlbWVudC5sb2NrZWQoKSB8fCBlbGVtZW50LmlzUGFyZW50KCkpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuXG4gICAgICAvLyBzZWUgaWYgd2UgaGF2ZSBhIG1hbnVhbCBwb3NpdGlvbiBzZXRcbiAgICAgIHZhciByY1BvcyA9IGlkMm1hblBvc1tlbGVtZW50LmlkKCldO1xuICAgICAgaWYgKHJjUG9zKSB7XG4gICAgICAgIHggPSByY1Bvcy5jb2wgKiBjZWxsV2lkdGggKyBjZWxsV2lkdGggLyAyICsgYmIueDE7XG4gICAgICAgIHkgPSByY1Bvcy5yb3cgKiBjZWxsSGVpZ2h0ICsgY2VsbEhlaWdodCAvIDIgKyBiYi55MTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIG90aGVyd2lzZSBzZXQgYXV0b21hdGljYWxseVxuXG4gICAgICAgIHdoaWxlICh1c2VkKHJvdywgY29sKSkge1xuICAgICAgICAgIG1vdmVUb05leHRDZWxsKCk7XG4gICAgICAgIH1cbiAgICAgICAgeCA9IGNvbCAqIGNlbGxXaWR0aCArIGNlbGxXaWR0aCAvIDIgKyBiYi54MTtcbiAgICAgICAgeSA9IHJvdyAqIGNlbGxIZWlnaHQgKyBjZWxsSGVpZ2h0IC8gMiArIGJiLnkxO1xuICAgICAgICB1c2Uocm93LCBjb2wpO1xuICAgICAgICBtb3ZlVG9OZXh0Q2VsbCgpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgeDogeCxcbiAgICAgICAgeTogeVxuICAgICAgfTtcbiAgICB9O1xuICAgIG5vZGVzLmxheW91dFBvc2l0aW9ucyh0aGlzLCBvcHRpb25zLCBnZXRQb3MpO1xuICB9XG4gIHJldHVybiB0aGlzOyAvLyBjaGFpbmluZ1xufTtcblxuLy8gZGVmYXVsdCBsYXlvdXQgb3B0aW9uc1xudmFyIGRlZmF1bHRzJDIgPSB7XG4gIHJlYWR5OiBmdW5jdGlvbiByZWFkeSgpIHt9LFxuICAvLyBvbiBsYXlvdXRyZWFkeVxuICBzdG9wOiBmdW5jdGlvbiBzdG9wKCkge30gLy8gb24gbGF5b3V0c3RvcFxufTtcblxuLy8gY29uc3RydWN0b3Jcbi8vIG9wdGlvbnMgOiBvYmplY3QgY29udGFpbmluZyBsYXlvdXQgb3B0aW9uc1xuZnVuY3Rpb24gTnVsbExheW91dChvcHRpb25zKSB7XG4gIHRoaXMub3B0aW9ucyA9IGV4dGVuZCh7fSwgZGVmYXVsdHMkMiwgb3B0aW9ucyk7XG59XG5cbi8vIHJ1bnMgdGhlIGxheW91dFxuTnVsbExheW91dC5wcm90b3R5cGUucnVuID0gZnVuY3Rpb24gKCkge1xuICB2YXIgb3B0aW9ucyA9IHRoaXMub3B0aW9ucztcbiAgdmFyIGVsZXMgPSBvcHRpb25zLmVsZXM7IC8vIGVsZW1lbnRzIHRvIGNvbnNpZGVyIGluIHRoZSBsYXlvdXRcbiAgdmFyIGxheW91dCA9IHRoaXM7XG5cbiAgLy8gY3kgaXMgYXV0b21hdGljYWxseSBwb3B1bGF0ZWQgZm9yIHVzIGluIHRoZSBjb25zdHJ1Y3RvclxuICAvLyAoZGlzYWJsZSBlc2xpbnQgZm9yIG5leHQgbGluZSBhcyB0aGlzIHNlcnZlcyBhcyBleGFtcGxlIGxheW91dCBjb2RlIHRvIGV4dGVybmFsIGRldmVsb3BlcnMpXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11bnVzZWQtdmFyc1xuICBvcHRpb25zLmN5O1xuICBsYXlvdXQuZW1pdCgnbGF5b3V0c3RhcnQnKTtcblxuICAvLyBwdXRzIGFsbCBub2RlcyBhdCAoMCwgMClcbiAgLy8gbi5iLiBtb3N0IGxheW91dHMgd291bGQgdXNlIGxheW91dFBvc2l0aW9ucygpLCBpbnN0ZWFkIG9mIHBvc2l0aW9ucygpIGFuZCBtYW51YWwgZXZlbnRzXG4gIGVsZXMubm9kZXMoKS5wb3NpdGlvbnMoZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiB7XG4gICAgICB4OiAwLFxuICAgICAgeTogMFxuICAgIH07XG4gIH0pO1xuXG4gIC8vIHRyaWdnZXIgbGF5b3V0cmVhZHkgd2hlbiBlYWNoIG5vZGUgaGFzIGhhZCBpdHMgcG9zaXRpb24gc2V0IGF0IGxlYXN0IG9uY2VcbiAgbGF5b3V0Lm9uZSgnbGF5b3V0cmVhZHknLCBvcHRpb25zLnJlYWR5KTtcbiAgbGF5b3V0LmVtaXQoJ2xheW91dHJlYWR5Jyk7XG5cbiAgLy8gdHJpZ2dlciBsYXlvdXRzdG9wIHdoZW4gdGhlIGxheW91dCBzdG9wcyAoZS5nLiBmaW5pc2hlcylcbiAgbGF5b3V0Lm9uZSgnbGF5b3V0c3RvcCcsIG9wdGlvbnMuc3RvcCk7XG4gIGxheW91dC5lbWl0KCdsYXlvdXRzdG9wJyk7XG4gIHJldHVybiB0aGlzOyAvLyBjaGFpbmluZ1xufTtcblxuLy8gY2FsbGVkIG9uIGNvbnRpbnVvdXMgbGF5b3V0cyB0byBzdG9wIHRoZW0gYmVmb3JlIHRoZXkgZmluaXNoXG5OdWxsTGF5b3V0LnByb3RvdHlwZS5zdG9wID0gZnVuY3Rpb24gKCkge1xuICByZXR1cm4gdGhpczsgLy8gY2hhaW5pbmdcbn07XG5cbnZhciBkZWZhdWx0cyQxID0ge1xuICBwb3NpdGlvbnM6IHVuZGVmaW5lZCxcbiAgLy8gbWFwIG9mIChub2RlIGlkKSA9PiAocG9zaXRpb24gb2JqKTsgb3IgZnVuY3Rpb24obm9kZSl7IHJldHVybiBzb21Qb3M7IH1cbiAgem9vbTogdW5kZWZpbmVkLFxuICAvLyB0aGUgem9vbSBsZXZlbCB0byBzZXQgKHByb2Igd2FudCBmaXQgPSBmYWxzZSBpZiBzZXQpXG4gIHBhbjogdW5kZWZpbmVkLFxuICAvLyB0aGUgcGFuIGxldmVsIHRvIHNldCAocHJvYiB3YW50IGZpdCA9IGZhbHNlIGlmIHNldClcbiAgZml0OiB0cnVlLFxuICAvLyB3aGV0aGVyIHRvIGZpdCB0byB2aWV3cG9ydFxuICBwYWRkaW5nOiAzMCxcbiAgLy8gcGFkZGluZyBvbiBmaXRcbiAgc3BhY2luZ0ZhY3RvcjogdW5kZWZpbmVkLFxuICAvLyBBcHBsaWVzIGEgbXVsdGlwbGljYXRpdmUgZmFjdG9yICg+MCkgdG8gZXhwYW5kIG9yIGNvbXByZXNzIHRoZSBvdmVyYWxsIGFyZWEgdGhhdCB0aGUgbm9kZXMgdGFrZSB1cFxuICBhbmltYXRlOiBmYWxzZSxcbiAgLy8gd2hldGhlciB0byB0cmFuc2l0aW9uIHRoZSBub2RlIHBvc2l0aW9uc1xuICBhbmltYXRpb25EdXJhdGlvbjogNTAwLFxuICAvLyBkdXJhdGlvbiBvZiBhbmltYXRpb24gaW4gbXMgaWYgZW5hYmxlZFxuICBhbmltYXRpb25FYXNpbmc6IHVuZGVmaW5lZCxcbiAgLy8gZWFzaW5nIG9mIGFuaW1hdGlvbiBpZiBlbmFibGVkXG4gIGFuaW1hdGVGaWx0ZXI6IGZ1bmN0aW9uIGFuaW1hdGVGaWx0ZXIobm9kZSwgaSkge1xuICAgIHJldHVybiB0cnVlO1xuICB9LFxuICAvLyBhIGZ1bmN0aW9uIHRoYXQgZGV0ZXJtaW5lcyB3aGV0aGVyIHRoZSBub2RlIHNob3VsZCBiZSBhbmltYXRlZC4gIEFsbCBub2RlcyBhbmltYXRlZCBieSBkZWZhdWx0IG9uIGFuaW1hdGUgZW5hYmxlZC4gIE5vbi1hbmltYXRlZCBub2RlcyBhcmUgcG9zaXRpb25lZCBpbW1lZGlhdGVseSB3aGVuIHRoZSBsYXlvdXQgc3RhcnRzXG4gIHJlYWR5OiB1bmRlZmluZWQsXG4gIC8vIGNhbGxiYWNrIG9uIGxheW91dHJlYWR5XG4gIHN0b3A6IHVuZGVmaW5lZCxcbiAgLy8gY2FsbGJhY2sgb24gbGF5b3V0c3RvcFxuICB0cmFuc2Zvcm06IGZ1bmN0aW9uIHRyYW5zZm9ybShub2RlLCBwb3NpdGlvbikge1xuICAgIHJldHVybiBwb3NpdGlvbjtcbiAgfSAvLyB0cmFuc2Zvcm0gYSBnaXZlbiBub2RlIHBvc2l0aW9uLiBVc2VmdWwgZm9yIGNoYW5naW5nIGZsb3cgZGlyZWN0aW9uIGluIGRpc2NyZXRlIGxheW91dHNcbn07XG5mdW5jdGlvbiBQcmVzZXRMYXlvdXQob3B0aW9ucykge1xuICB0aGlzLm9wdGlvbnMgPSBleHRlbmQoe30sIGRlZmF1bHRzJDEsIG9wdGlvbnMpO1xufVxuUHJlc2V0TGF5b3V0LnByb3RvdHlwZS5ydW4gPSBmdW5jdGlvbiAoKSB7XG4gIHZhciBvcHRpb25zID0gdGhpcy5vcHRpb25zO1xuICB2YXIgZWxlcyA9IG9wdGlvbnMuZWxlcztcbiAgdmFyIG5vZGVzID0gZWxlcy5ub2RlcygpO1xuICB2YXIgcG9zSXNGbiA9IGZuJDYob3B0aW9ucy5wb3NpdGlvbnMpO1xuICBmdW5jdGlvbiBnZXRQb3NpdGlvbihub2RlKSB7XG4gICAgaWYgKG9wdGlvbnMucG9zaXRpb25zID09IG51bGwpIHtcbiAgICAgIHJldHVybiBjb3B5UG9zaXRpb24obm9kZS5wb3NpdGlvbigpKTtcbiAgICB9XG4gICAgaWYgKHBvc0lzRm4pIHtcbiAgICAgIHJldHVybiBvcHRpb25zLnBvc2l0aW9ucyhub2RlKTtcbiAgICB9XG4gICAgdmFyIHBvcyA9IG9wdGlvbnMucG9zaXRpb25zW25vZGUuX3ByaXZhdGUuZGF0YS5pZF07XG4gICAgaWYgKHBvcyA9PSBudWxsKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgcmV0dXJuIHBvcztcbiAgfVxuICBub2Rlcy5sYXlvdXRQb3NpdGlvbnModGhpcywgb3B0aW9ucywgZnVuY3Rpb24gKG5vZGUsIGkpIHtcbiAgICB2YXIgcG9zaXRpb24gPSBnZXRQb3NpdGlvbihub2RlKTtcbiAgICBpZiAobm9kZS5sb2NrZWQoKSB8fCBwb3NpdGlvbiA9PSBudWxsKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIHJldHVybiBwb3NpdGlvbjtcbiAgfSk7XG4gIHJldHVybiB0aGlzOyAvLyBjaGFpbmluZ1xufTtcblxudmFyIGRlZmF1bHRzID0ge1xuICBmaXQ6IHRydWUsXG4gIC8vIHdoZXRoZXIgdG8gZml0IHRvIHZpZXdwb3J0XG4gIHBhZGRpbmc6IDMwLFxuICAvLyBmaXQgcGFkZGluZ1xuICBib3VuZGluZ0JveDogdW5kZWZpbmVkLFxuICAvLyBjb25zdHJhaW4gbGF5b3V0IGJvdW5kczsgeyB4MSwgeTEsIHgyLCB5MiB9IG9yIHsgeDEsIHkxLCB3LCBoIH1cbiAgYW5pbWF0ZTogZmFsc2UsXG4gIC8vIHdoZXRoZXIgdG8gdHJhbnNpdGlvbiB0aGUgbm9kZSBwb3NpdGlvbnNcbiAgYW5pbWF0aW9uRHVyYXRpb246IDUwMCxcbiAgLy8gZHVyYXRpb24gb2YgYW5pbWF0aW9uIGluIG1zIGlmIGVuYWJsZWRcbiAgYW5pbWF0aW9uRWFzaW5nOiB1bmRlZmluZWQsXG4gIC8vIGVhc2luZyBvZiBhbmltYXRpb24gaWYgZW5hYmxlZFxuICBhbmltYXRlRmlsdGVyOiBmdW5jdGlvbiBhbmltYXRlRmlsdGVyKG5vZGUsIGkpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfSxcbiAgLy8gYSBmdW5jdGlvbiB0aGF0IGRldGVybWluZXMgd2hldGhlciB0aGUgbm9kZSBzaG91bGQgYmUgYW5pbWF0ZWQuICBBbGwgbm9kZXMgYW5pbWF0ZWQgYnkgZGVmYXVsdCBvbiBhbmltYXRlIGVuYWJsZWQuICBOb24tYW5pbWF0ZWQgbm9kZXMgYXJlIHBvc2l0aW9uZWQgaW1tZWRpYXRlbHkgd2hlbiB0aGUgbGF5b3V0IHN0YXJ0c1xuICByZWFkeTogdW5kZWZpbmVkLFxuICAvLyBjYWxsYmFjayBvbiBsYXlvdXRyZWFkeVxuICBzdG9wOiB1bmRlZmluZWQsXG4gIC8vIGNhbGxiYWNrIG9uIGxheW91dHN0b3BcbiAgdHJhbnNmb3JtOiBmdW5jdGlvbiB0cmFuc2Zvcm0obm9kZSwgcG9zaXRpb24pIHtcbiAgICByZXR1cm4gcG9zaXRpb247XG4gIH0gLy8gdHJhbnNmb3JtIGEgZ2l2ZW4gbm9kZSBwb3NpdGlvbi4gVXNlZnVsIGZvciBjaGFuZ2luZyBmbG93IGRpcmVjdGlvbiBpbiBkaXNjcmV0ZSBsYXlvdXRzIFxufTtcbmZ1bmN0aW9uIFJhbmRvbUxheW91dChvcHRpb25zKSB7XG4gIHRoaXMub3B0aW9ucyA9IGV4dGVuZCh7fSwgZGVmYXVsdHMsIG9wdGlvbnMpO1xufVxuUmFuZG9tTGF5b3V0LnByb3RvdHlwZS5ydW4gPSBmdW5jdGlvbiAoKSB7XG4gIHZhciBvcHRpb25zID0gdGhpcy5vcHRpb25zO1xuICB2YXIgY3kgPSBvcHRpb25zLmN5O1xuICB2YXIgZWxlcyA9IG9wdGlvbnMuZWxlcztcbiAgdmFyIGJiID0gbWFrZUJvdW5kaW5nQm94KG9wdGlvbnMuYm91bmRpbmdCb3ggPyBvcHRpb25zLmJvdW5kaW5nQm94IDoge1xuICAgIHgxOiAwLFxuICAgIHkxOiAwLFxuICAgIHc6IGN5LndpZHRoKCksXG4gICAgaDogY3kuaGVpZ2h0KClcbiAgfSk7XG4gIHZhciBnZXRQb3MgPSBmdW5jdGlvbiBnZXRQb3Mobm9kZSwgaSkge1xuICAgIHJldHVybiB7XG4gICAgICB4OiBiYi54MSArIE1hdGgucm91bmQoTWF0aC5yYW5kb20oKSAqIGJiLncpLFxuICAgICAgeTogYmIueTEgKyBNYXRoLnJvdW5kKE1hdGgucmFuZG9tKCkgKiBiYi5oKVxuICAgIH07XG4gIH07XG4gIGVsZXMubm9kZXMoKS5sYXlvdXRQb3NpdGlvbnModGhpcywgb3B0aW9ucywgZ2V0UG9zKTtcbiAgcmV0dXJuIHRoaXM7IC8vIGNoYWluaW5nXG59O1xuXG52YXIgbGF5b3V0ID0gW3tcbiAgbmFtZTogJ2JyZWFkdGhmaXJzdCcsXG4gIGltcGw6IEJyZWFkdGhGaXJzdExheW91dFxufSwge1xuICBuYW1lOiAnY2lyY2xlJyxcbiAgaW1wbDogQ2lyY2xlTGF5b3V0XG59LCB7XG4gIG5hbWU6ICdjb25jZW50cmljJyxcbiAgaW1wbDogQ29uY2VudHJpY0xheW91dFxufSwge1xuICBuYW1lOiAnY29zZScsXG4gIGltcGw6IENvc2VMYXlvdXRcbn0sIHtcbiAgbmFtZTogJ2dyaWQnLFxuICBpbXBsOiBHcmlkTGF5b3V0XG59LCB7XG4gIG5hbWU6ICdudWxsJyxcbiAgaW1wbDogTnVsbExheW91dFxufSwge1xuICBuYW1lOiAncHJlc2V0JyxcbiAgaW1wbDogUHJlc2V0TGF5b3V0XG59LCB7XG4gIG5hbWU6ICdyYW5kb20nLFxuICBpbXBsOiBSYW5kb21MYXlvdXRcbn1dO1xuXG5mdW5jdGlvbiBOdWxsUmVuZGVyZXIob3B0aW9ucykge1xuICB0aGlzLm9wdGlvbnMgPSBvcHRpb25zO1xuICB0aGlzLm5vdGlmaWNhdGlvbnMgPSAwOyAvLyBmb3IgdGVzdGluZ1xufVxudmFyIG5vb3AgPSBmdW5jdGlvbiBub29wKCkge307XG52YXIgdGhyb3dJbWdFcnIgPSBmdW5jdGlvbiB0aHJvd0ltZ0VycigpIHtcbiAgdGhyb3cgbmV3IEVycm9yKCdBIGhlYWRsZXNzIGluc3RhbmNlIGNhbiBub3QgcmVuZGVyIGltYWdlcycpO1xufTtcbk51bGxSZW5kZXJlci5wcm90b3R5cGUgPSB7XG4gIHJlY2FsY3VsYXRlUmVuZGVyZWRTdHlsZTogbm9vcCxcbiAgbm90aWZ5OiBmdW5jdGlvbiBub3RpZnkoKSB7XG4gICAgdGhpcy5ub3RpZmljYXRpb25zKys7XG4gIH0sXG4gIGluaXQ6IG5vb3AsXG4gIGlzSGVhZGxlc3M6IGZ1bmN0aW9uIGlzSGVhZGxlc3MoKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH0sXG4gIHBuZzogdGhyb3dJbWdFcnIsXG4gIGpwZzogdGhyb3dJbWdFcnJcbn07XG5cbnZhciBCUnAkZiA9IHt9O1xuQlJwJGYuYXJyb3dTaGFwZVdpZHRoID0gMC4zO1xuQlJwJGYucmVnaXN0ZXJBcnJvd1NoYXBlcyA9IGZ1bmN0aW9uICgpIHtcbiAgdmFyIGFycm93U2hhcGVzID0gdGhpcy5hcnJvd1NoYXBlcyA9IHt9O1xuICB2YXIgcmVuZGVyZXIgPSB0aGlzO1xuXG4gIC8vIENvbnRyYWN0IGZvciBhcnJvdyBzaGFwZXM6XG4gIC8vIDAsIDAgaXMgYXJyb3cgdGlwXG4gIC8vICgwLCAxKSBpcyBkaXJlY3Rpb24gdG93YXJkcyBub2RlXG4gIC8vICgxLCAwKSBpcyByaWdodFxuICAvL1xuICAvLyBmdW5jdGlvbmFsIGFwaTpcbiAgLy8gY29sbGlkZTogY2hlY2sgeCwgeSBpbiBzaGFwZVxuICAvLyByb3VnaENvbGxpZGU6IGNhbGxlZCBiZWZvcmUgY29sbGlkZSwgbm8gZmFsc2UgbmVnYXRpdmVzXG4gIC8vIGRyYXc6IGRyYXdcbiAgLy8gc3BhY2luZzogZGlzdChhcnJvd1RpcCwgbm9kZUJvdW5kYXJ5KVxuICAvLyBnYXA6IGRpc3QoZWRnZVRpcCwgbm9kZUJvdW5kYXJ5KSwgZWRnZVRpcCBtYXkgIT0gYXJyb3dUaXBcblxuICB2YXIgYmJDb2xsaWRlID0gZnVuY3Rpb24gYmJDb2xsaWRlKHgsIHksIHNpemUsIGFuZ2xlLCB0cmFuc2xhdGlvbiwgZWRnZVdpZHRoLCBwYWRkaW5nKSB7XG4gICAgdmFyIHgxID0gdHJhbnNsYXRpb24ueCAtIHNpemUgLyAyIC0gcGFkZGluZztcbiAgICB2YXIgeDIgPSB0cmFuc2xhdGlvbi54ICsgc2l6ZSAvIDIgKyBwYWRkaW5nO1xuICAgIHZhciB5MSA9IHRyYW5zbGF0aW9uLnkgLSBzaXplIC8gMiAtIHBhZGRpbmc7XG4gICAgdmFyIHkyID0gdHJhbnNsYXRpb24ueSArIHNpemUgLyAyICsgcGFkZGluZztcbiAgICB2YXIgaW5zaWRlID0geDEgPD0geCAmJiB4IDw9IHgyICYmIHkxIDw9IHkgJiYgeSA8PSB5MjtcbiAgICByZXR1cm4gaW5zaWRlO1xuICB9O1xuICB2YXIgdHJhbnNmb3JtID0gZnVuY3Rpb24gdHJhbnNmb3JtKHgsIHksIHNpemUsIGFuZ2xlLCB0cmFuc2xhdGlvbikge1xuICAgIHZhciB4Um90YXRlZCA9IHggKiBNYXRoLmNvcyhhbmdsZSkgLSB5ICogTWF0aC5zaW4oYW5nbGUpO1xuICAgIHZhciB5Um90YXRlZCA9IHggKiBNYXRoLnNpbihhbmdsZSkgKyB5ICogTWF0aC5jb3MoYW5nbGUpO1xuICAgIHZhciB4U2NhbGVkID0geFJvdGF0ZWQgKiBzaXplO1xuICAgIHZhciB5U2NhbGVkID0geVJvdGF0ZWQgKiBzaXplO1xuICAgIHZhciB4VHJhbnNsYXRlZCA9IHhTY2FsZWQgKyB0cmFuc2xhdGlvbi54O1xuICAgIHZhciB5VHJhbnNsYXRlZCA9IHlTY2FsZWQgKyB0cmFuc2xhdGlvbi55O1xuICAgIHJldHVybiB7XG4gICAgICB4OiB4VHJhbnNsYXRlZCxcbiAgICAgIHk6IHlUcmFuc2xhdGVkXG4gICAgfTtcbiAgfTtcbiAgdmFyIHRyYW5zZm9ybVBvaW50cyA9IGZ1bmN0aW9uIHRyYW5zZm9ybVBvaW50cyhwdHMsIHNpemUsIGFuZ2xlLCB0cmFuc2xhdGlvbikge1xuICAgIHZhciByZXRQdHMgPSBbXTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHB0cy5sZW5ndGg7IGkgKz0gMikge1xuICAgICAgdmFyIHggPSBwdHNbaV07XG4gICAgICB2YXIgeSA9IHB0c1tpICsgMV07XG4gICAgICByZXRQdHMucHVzaCh0cmFuc2Zvcm0oeCwgeSwgc2l6ZSwgYW5nbGUsIHRyYW5zbGF0aW9uKSk7XG4gICAgfVxuICAgIHJldHVybiByZXRQdHM7XG4gIH07XG4gIHZhciBwb2ludHNUb0FyciA9IGZ1bmN0aW9uIHBvaW50c1RvQXJyKHB0cykge1xuICAgIHZhciByZXQgPSBbXTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHB0cy5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIHAgPSBwdHNbaV07XG4gICAgICByZXQucHVzaChwLngsIHAueSk7XG4gICAgfVxuICAgIHJldHVybiByZXQ7XG4gIH07XG4gIHZhciBzdGFuZGFyZEdhcCA9IGZ1bmN0aW9uIHN0YW5kYXJkR2FwKGVkZ2UpIHtcbiAgICByZXR1cm4gZWRnZS5wc3R5bGUoJ3dpZHRoJykucGZWYWx1ZSAqIGVkZ2UucHN0eWxlKCdhcnJvdy1zY2FsZScpLnBmVmFsdWUgKiAyO1xuICB9O1xuICB2YXIgZGVmaW5lQXJyb3dTaGFwZSA9IGZ1bmN0aW9uIGRlZmluZUFycm93U2hhcGUobmFtZSwgZGVmbikge1xuICAgIGlmIChzdHJpbmcoZGVmbikpIHtcbiAgICAgIGRlZm4gPSBhcnJvd1NoYXBlc1tkZWZuXTtcbiAgICB9XG4gICAgYXJyb3dTaGFwZXNbbmFtZV0gPSBleHRlbmQoe1xuICAgICAgbmFtZTogbmFtZSxcbiAgICAgIHBvaW50czogWy0wLjE1LCAtMC4zLCAwLjE1LCAtMC4zLCAwLjE1LCAwLjMsIC0wLjE1LCAwLjNdLFxuICAgICAgY29sbGlkZTogZnVuY3Rpb24gY29sbGlkZSh4LCB5LCBzaXplLCBhbmdsZSwgdHJhbnNsYXRpb24sIHBhZGRpbmcpIHtcbiAgICAgICAgdmFyIHBvaW50cyA9IHBvaW50c1RvQXJyKHRyYW5zZm9ybVBvaW50cyh0aGlzLnBvaW50cywgc2l6ZSArIDIgKiBwYWRkaW5nLCBhbmdsZSwgdHJhbnNsYXRpb24pKTtcbiAgICAgICAgdmFyIGluc2lkZSA9IHBvaW50SW5zaWRlUG9seWdvblBvaW50cyh4LCB5LCBwb2ludHMpO1xuICAgICAgICByZXR1cm4gaW5zaWRlO1xuICAgICAgfSxcbiAgICAgIHJvdWdoQ29sbGlkZTogYmJDb2xsaWRlLFxuICAgICAgZHJhdzogZnVuY3Rpb24gZHJhdyhjb250ZXh0LCBzaXplLCBhbmdsZSwgdHJhbnNsYXRpb24pIHtcbiAgICAgICAgdmFyIHBvaW50cyA9IHRyYW5zZm9ybVBvaW50cyh0aGlzLnBvaW50cywgc2l6ZSwgYW5nbGUsIHRyYW5zbGF0aW9uKTtcbiAgICAgICAgcmVuZGVyZXIuYXJyb3dTaGFwZUltcGwoJ3BvbHlnb24nKShjb250ZXh0LCBwb2ludHMpO1xuICAgICAgfSxcbiAgICAgIHNwYWNpbmc6IGZ1bmN0aW9uIHNwYWNpbmcoZWRnZSkge1xuICAgICAgICByZXR1cm4gMDtcbiAgICAgIH0sXG4gICAgICBnYXA6IHN0YW5kYXJkR2FwXG4gICAgfSwgZGVmbik7XG4gIH07XG4gIGRlZmluZUFycm93U2hhcGUoJ25vbmUnLCB7XG4gICAgY29sbGlkZTogZmFsc2lmeSxcbiAgICByb3VnaENvbGxpZGU6IGZhbHNpZnksXG4gICAgZHJhdzogbm9vcCQxLFxuICAgIHNwYWNpbmc6IHplcm9pZnksXG4gICAgZ2FwOiB6ZXJvaWZ5XG4gIH0pO1xuICBkZWZpbmVBcnJvd1NoYXBlKCd0cmlhbmdsZScsIHtcbiAgICBwb2ludHM6IFstMC4xNSwgLTAuMywgMCwgMCwgMC4xNSwgLTAuM11cbiAgfSk7XG4gIGRlZmluZUFycm93U2hhcGUoJ2Fycm93JywgJ3RyaWFuZ2xlJyk7XG4gIGRlZmluZUFycm93U2hhcGUoJ3RyaWFuZ2xlLWJhY2tjdXJ2ZScsIHtcbiAgICBwb2ludHM6IGFycm93U2hhcGVzWyd0cmlhbmdsZSddLnBvaW50cyxcbiAgICBjb250cm9sUG9pbnQ6IFswLCAtMC4xNV0sXG4gICAgcm91Z2hDb2xsaWRlOiBiYkNvbGxpZGUsXG4gICAgZHJhdzogZnVuY3Rpb24gZHJhdyhjb250ZXh0LCBzaXplLCBhbmdsZSwgdHJhbnNsYXRpb24sIGVkZ2VXaWR0aCkge1xuICAgICAgdmFyIHB0c1RyYW5zID0gdHJhbnNmb3JtUG9pbnRzKHRoaXMucG9pbnRzLCBzaXplLCBhbmdsZSwgdHJhbnNsYXRpb24pO1xuICAgICAgdmFyIGN0cmxQdCA9IHRoaXMuY29udHJvbFBvaW50O1xuICAgICAgdmFyIGN0cmxQdFRyYW5zID0gdHJhbnNmb3JtKGN0cmxQdFswXSwgY3RybFB0WzFdLCBzaXplLCBhbmdsZSwgdHJhbnNsYXRpb24pO1xuICAgICAgcmVuZGVyZXIuYXJyb3dTaGFwZUltcGwodGhpcy5uYW1lKShjb250ZXh0LCBwdHNUcmFucywgY3RybFB0VHJhbnMpO1xuICAgIH0sXG4gICAgZ2FwOiBmdW5jdGlvbiBnYXAoZWRnZSkge1xuICAgICAgcmV0dXJuIHN0YW5kYXJkR2FwKGVkZ2UpICogMC44O1xuICAgIH1cbiAgfSk7XG4gIGRlZmluZUFycm93U2hhcGUoJ3RyaWFuZ2xlLXRlZScsIHtcbiAgICBwb2ludHM6IFswLCAwLCAwLjE1LCAtMC4zLCAtMC4xNSwgLTAuMywgMCwgMF0sXG4gICAgcG9pbnRzVGVlOiBbLTAuMTUsIC0wLjQsIC0wLjE1LCAtMC41LCAwLjE1LCAtMC41LCAwLjE1LCAtMC40XSxcbiAgICBjb2xsaWRlOiBmdW5jdGlvbiBjb2xsaWRlKHgsIHksIHNpemUsIGFuZ2xlLCB0cmFuc2xhdGlvbiwgZWRnZVdpZHRoLCBwYWRkaW5nKSB7XG4gICAgICB2YXIgdHJpUHRzID0gcG9pbnRzVG9BcnIodHJhbnNmb3JtUG9pbnRzKHRoaXMucG9pbnRzLCBzaXplICsgMiAqIHBhZGRpbmcsIGFuZ2xlLCB0cmFuc2xhdGlvbikpO1xuICAgICAgdmFyIHRlZVB0cyA9IHBvaW50c1RvQXJyKHRyYW5zZm9ybVBvaW50cyh0aGlzLnBvaW50c1RlZSwgc2l6ZSArIDIgKiBwYWRkaW5nLCBhbmdsZSwgdHJhbnNsYXRpb24pKTtcbiAgICAgIHZhciBpbnNpZGUgPSBwb2ludEluc2lkZVBvbHlnb25Qb2ludHMoeCwgeSwgdHJpUHRzKSB8fCBwb2ludEluc2lkZVBvbHlnb25Qb2ludHMoeCwgeSwgdGVlUHRzKTtcbiAgICAgIHJldHVybiBpbnNpZGU7XG4gICAgfSxcbiAgICBkcmF3OiBmdW5jdGlvbiBkcmF3KGNvbnRleHQsIHNpemUsIGFuZ2xlLCB0cmFuc2xhdGlvbiwgZWRnZVdpZHRoKSB7XG4gICAgICB2YXIgdHJpUHRzID0gdHJhbnNmb3JtUG9pbnRzKHRoaXMucG9pbnRzLCBzaXplLCBhbmdsZSwgdHJhbnNsYXRpb24pO1xuICAgICAgdmFyIHRlZVB0cyA9IHRyYW5zZm9ybVBvaW50cyh0aGlzLnBvaW50c1RlZSwgc2l6ZSwgYW5nbGUsIHRyYW5zbGF0aW9uKTtcbiAgICAgIHJlbmRlcmVyLmFycm93U2hhcGVJbXBsKHRoaXMubmFtZSkoY29udGV4dCwgdHJpUHRzLCB0ZWVQdHMpO1xuICAgIH1cbiAgfSk7XG4gIGRlZmluZUFycm93U2hhcGUoJ2NpcmNsZS10cmlhbmdsZScsIHtcbiAgICByYWRpdXM6IDAuMTUsXG4gICAgcG9pbnRzVHI6IFswLCAtMC4xNSwgMC4xNSwgLTAuNDUsIC0wLjE1LCAtMC40NSwgMCwgLTAuMTVdLFxuICAgIGNvbGxpZGU6IGZ1bmN0aW9uIGNvbGxpZGUoeCwgeSwgc2l6ZSwgYW5nbGUsIHRyYW5zbGF0aW9uLCBlZGdlV2lkdGgsIHBhZGRpbmcpIHtcbiAgICAgIHZhciB0ID0gdHJhbnNsYXRpb247XG4gICAgICB2YXIgY2lyY2xlSW5zaWRlID0gTWF0aC5wb3codC54IC0geCwgMikgKyBNYXRoLnBvdyh0LnkgLSB5LCAyKSA8PSBNYXRoLnBvdygoc2l6ZSArIDIgKiBwYWRkaW5nKSAqIHRoaXMucmFkaXVzLCAyKTtcbiAgICAgIHZhciB0cmlQdHMgPSBwb2ludHNUb0Fycih0cmFuc2Zvcm1Qb2ludHModGhpcy5wb2ludHMsIHNpemUgKyAyICogcGFkZGluZywgYW5nbGUsIHRyYW5zbGF0aW9uKSk7XG4gICAgICByZXR1cm4gcG9pbnRJbnNpZGVQb2x5Z29uUG9pbnRzKHgsIHksIHRyaVB0cykgfHwgY2lyY2xlSW5zaWRlO1xuICAgIH0sXG4gICAgZHJhdzogZnVuY3Rpb24gZHJhdyhjb250ZXh0LCBzaXplLCBhbmdsZSwgdHJhbnNsYXRpb24sIGVkZ2VXaWR0aCkge1xuICAgICAgdmFyIHRyaVB0cyA9IHRyYW5zZm9ybVBvaW50cyh0aGlzLnBvaW50c1RyLCBzaXplLCBhbmdsZSwgdHJhbnNsYXRpb24pO1xuICAgICAgcmVuZGVyZXIuYXJyb3dTaGFwZUltcGwodGhpcy5uYW1lKShjb250ZXh0LCB0cmlQdHMsIHRyYW5zbGF0aW9uLngsIHRyYW5zbGF0aW9uLnksIHRoaXMucmFkaXVzICogc2l6ZSk7XG4gICAgfSxcbiAgICBzcGFjaW5nOiBmdW5jdGlvbiBzcGFjaW5nKGVkZ2UpIHtcbiAgICAgIHJldHVybiByZW5kZXJlci5nZXRBcnJvd1dpZHRoKGVkZ2UucHN0eWxlKCd3aWR0aCcpLnBmVmFsdWUsIGVkZ2UucHN0eWxlKCdhcnJvdy1zY2FsZScpLnZhbHVlKSAqIHRoaXMucmFkaXVzO1xuICAgIH1cbiAgfSk7XG4gIGRlZmluZUFycm93U2hhcGUoJ3RyaWFuZ2xlLWNyb3NzJywge1xuICAgIHBvaW50czogWzAsIDAsIDAuMTUsIC0wLjMsIC0wLjE1LCAtMC4zLCAwLCAwXSxcbiAgICBiYXNlQ3Jvc3NMaW5lUHRzOiBbLTAuMTUsIC0wLjQsXG4gICAgLy8gZmlyc3QgaGFsZiBvZiB0aGUgcmVjdGFuZ2xlXG4gICAgLTAuMTUsIC0wLjQsIDAuMTUsIC0wLjQsXG4gICAgLy8gc2Vjb25kIGhhbGYgb2YgdGhlIHJlY3RhbmdsZVxuICAgIDAuMTUsIC0wLjRdLFxuICAgIGNyb3NzTGluZVB0czogZnVuY3Rpb24gY3Jvc3NMaW5lUHRzKHNpemUsIGVkZ2VXaWR0aCkge1xuICAgICAgLy8gc2hpZnQgcG9pbnRzIHNvIHRoYXQgdGhlIGRpc3RhbmNlIGJldHdlZW4gdGhlIGNyb3NzIHBvaW50cyBtYXRjaGVzIGVkZ2Ugd2lkdGhcbiAgICAgIHZhciBwID0gdGhpcy5iYXNlQ3Jvc3NMaW5lUHRzLnNsaWNlKCk7XG4gICAgICB2YXIgc2hpZnRGYWN0b3IgPSBlZGdlV2lkdGggLyBzaXplO1xuICAgICAgdmFyIHkwID0gMztcbiAgICAgIHZhciB5MSA9IDU7XG4gICAgICBwW3kwXSA9IHBbeTBdIC0gc2hpZnRGYWN0b3I7XG4gICAgICBwW3kxXSA9IHBbeTFdIC0gc2hpZnRGYWN0b3I7XG4gICAgICByZXR1cm4gcDtcbiAgICB9LFxuICAgIGNvbGxpZGU6IGZ1bmN0aW9uIGNvbGxpZGUoeCwgeSwgc2l6ZSwgYW5nbGUsIHRyYW5zbGF0aW9uLCBlZGdlV2lkdGgsIHBhZGRpbmcpIHtcbiAgICAgIHZhciB0cmlQdHMgPSBwb2ludHNUb0Fycih0cmFuc2Zvcm1Qb2ludHModGhpcy5wb2ludHMsIHNpemUgKyAyICogcGFkZGluZywgYW5nbGUsIHRyYW5zbGF0aW9uKSk7XG4gICAgICB2YXIgdGVlUHRzID0gcG9pbnRzVG9BcnIodHJhbnNmb3JtUG9pbnRzKHRoaXMuY3Jvc3NMaW5lUHRzKHNpemUsIGVkZ2VXaWR0aCksIHNpemUgKyAyICogcGFkZGluZywgYW5nbGUsIHRyYW5zbGF0aW9uKSk7XG4gICAgICB2YXIgaW5zaWRlID0gcG9pbnRJbnNpZGVQb2x5Z29uUG9pbnRzKHgsIHksIHRyaVB0cykgfHwgcG9pbnRJbnNpZGVQb2x5Z29uUG9pbnRzKHgsIHksIHRlZVB0cyk7XG4gICAgICByZXR1cm4gaW5zaWRlO1xuICAgIH0sXG4gICAgZHJhdzogZnVuY3Rpb24gZHJhdyhjb250ZXh0LCBzaXplLCBhbmdsZSwgdHJhbnNsYXRpb24sIGVkZ2VXaWR0aCkge1xuICAgICAgdmFyIHRyaVB0cyA9IHRyYW5zZm9ybVBvaW50cyh0aGlzLnBvaW50cywgc2l6ZSwgYW5nbGUsIHRyYW5zbGF0aW9uKTtcbiAgICAgIHZhciBjcm9zc0xpbmVQdHMgPSB0cmFuc2Zvcm1Qb2ludHModGhpcy5jcm9zc0xpbmVQdHMoc2l6ZSwgZWRnZVdpZHRoKSwgc2l6ZSwgYW5nbGUsIHRyYW5zbGF0aW9uKTtcbiAgICAgIHJlbmRlcmVyLmFycm93U2hhcGVJbXBsKHRoaXMubmFtZSkoY29udGV4dCwgdHJpUHRzLCBjcm9zc0xpbmVQdHMpO1xuICAgIH1cbiAgfSk7XG4gIGRlZmluZUFycm93U2hhcGUoJ3ZlZScsIHtcbiAgICBwb2ludHM6IFstMC4xNSwgLTAuMywgMCwgMCwgMC4xNSwgLTAuMywgMCwgLTAuMTVdLFxuICAgIGdhcDogZnVuY3Rpb24gZ2FwKGVkZ2UpIHtcbiAgICAgIHJldHVybiBzdGFuZGFyZEdhcChlZGdlKSAqIDAuNTI1O1xuICAgIH1cbiAgfSk7XG4gIGRlZmluZUFycm93U2hhcGUoJ2NpcmNsZScsIHtcbiAgICByYWRpdXM6IDAuMTUsXG4gICAgY29sbGlkZTogZnVuY3Rpb24gY29sbGlkZSh4LCB5LCBzaXplLCBhbmdsZSwgdHJhbnNsYXRpb24sIGVkZ2VXaWR0aCwgcGFkZGluZykge1xuICAgICAgdmFyIHQgPSB0cmFuc2xhdGlvbjtcbiAgICAgIHZhciBpbnNpZGUgPSBNYXRoLnBvdyh0LnggLSB4LCAyKSArIE1hdGgucG93KHQueSAtIHksIDIpIDw9IE1hdGgucG93KChzaXplICsgMiAqIHBhZGRpbmcpICogdGhpcy5yYWRpdXMsIDIpO1xuICAgICAgcmV0dXJuIGluc2lkZTtcbiAgICB9LFxuICAgIGRyYXc6IGZ1bmN0aW9uIGRyYXcoY29udGV4dCwgc2l6ZSwgYW5nbGUsIHRyYW5zbGF0aW9uLCBlZGdlV2lkdGgpIHtcbiAgICAgIHJlbmRlcmVyLmFycm93U2hhcGVJbXBsKHRoaXMubmFtZSkoY29udGV4dCwgdHJhbnNsYXRpb24ueCwgdHJhbnNsYXRpb24ueSwgdGhpcy5yYWRpdXMgKiBzaXplKTtcbiAgICB9LFxuICAgIHNwYWNpbmc6IGZ1bmN0aW9uIHNwYWNpbmcoZWRnZSkge1xuICAgICAgcmV0dXJuIHJlbmRlcmVyLmdldEFycm93V2lkdGgoZWRnZS5wc3R5bGUoJ3dpZHRoJykucGZWYWx1ZSwgZWRnZS5wc3R5bGUoJ2Fycm93LXNjYWxlJykudmFsdWUpICogdGhpcy5yYWRpdXM7XG4gICAgfVxuICB9KTtcbiAgZGVmaW5lQXJyb3dTaGFwZSgndGVlJywge1xuICAgIHBvaW50czogWy0wLjE1LCAwLCAtMC4xNSwgLTAuMSwgMC4xNSwgLTAuMSwgMC4xNSwgMF0sXG4gICAgc3BhY2luZzogZnVuY3Rpb24gc3BhY2luZyhlZGdlKSB7XG4gICAgICByZXR1cm4gMTtcbiAgICB9LFxuICAgIGdhcDogZnVuY3Rpb24gZ2FwKGVkZ2UpIHtcbiAgICAgIHJldHVybiAxO1xuICAgIH1cbiAgfSk7XG4gIGRlZmluZUFycm93U2hhcGUoJ3NxdWFyZScsIHtcbiAgICBwb2ludHM6IFstMC4xNSwgMC4wMCwgMC4xNSwgMC4wMCwgMC4xNSwgLTAuMywgLTAuMTUsIC0wLjNdXG4gIH0pO1xuICBkZWZpbmVBcnJvd1NoYXBlKCdkaWFtb25kJywge1xuICAgIHBvaW50czogWy0wLjE1LCAtMC4xNSwgMCwgLTAuMywgMC4xNSwgLTAuMTUsIDAsIDBdLFxuICAgIGdhcDogZnVuY3Rpb24gZ2FwKGVkZ2UpIHtcbiAgICAgIHJldHVybiBlZGdlLnBzdHlsZSgnd2lkdGgnKS5wZlZhbHVlICogZWRnZS5wc3R5bGUoJ2Fycm93LXNjYWxlJykudmFsdWU7XG4gICAgfVxuICB9KTtcbiAgZGVmaW5lQXJyb3dTaGFwZSgnY2hldnJvbicsIHtcbiAgICBwb2ludHM6IFswLCAwLCAtMC4xNSwgLTAuMTUsIC0wLjEsIC0wLjIsIDAsIC0wLjEsIDAuMSwgLTAuMiwgMC4xNSwgLTAuMTVdLFxuICAgIGdhcDogZnVuY3Rpb24gZ2FwKGVkZ2UpIHtcbiAgICAgIHJldHVybiAwLjk1ICogZWRnZS5wc3R5bGUoJ3dpZHRoJykucGZWYWx1ZSAqIGVkZ2UucHN0eWxlKCdhcnJvdy1zY2FsZScpLnZhbHVlO1xuICAgIH1cbiAgfSk7XG59O1xuXG52YXIgQlJwJGUgPSB7fTtcblxuLy8gUHJvamVjdCBtb3VzZVxuQlJwJGUucHJvamVjdEludG9WaWV3cG9ydCA9IGZ1bmN0aW9uIChjbGllbnRYLCBjbGllbnRZKSB7XG4gIHZhciBjeSA9IHRoaXMuY3k7XG4gIHZhciBvZmZzZXRzID0gdGhpcy5maW5kQ29udGFpbmVyQ2xpZW50Q29vcmRzKCk7XG4gIHZhciBvZmZzZXRMZWZ0ID0gb2Zmc2V0c1swXTtcbiAgdmFyIG9mZnNldFRvcCA9IG9mZnNldHNbMV07XG4gIHZhciBzY2FsZSA9IG9mZnNldHNbNF07XG4gIHZhciBwYW4gPSBjeS5wYW4oKTtcbiAgdmFyIHpvb20gPSBjeS56b29tKCk7XG4gIHZhciB4ID0gKChjbGllbnRYIC0gb2Zmc2V0TGVmdCkgLyBzY2FsZSAtIHBhbi54KSAvIHpvb207XG4gIHZhciB5ID0gKChjbGllbnRZIC0gb2Zmc2V0VG9wKSAvIHNjYWxlIC0gcGFuLnkpIC8gem9vbTtcbiAgcmV0dXJuIFt4LCB5XTtcbn07XG5CUnAkZS5maW5kQ29udGFpbmVyQ2xpZW50Q29vcmRzID0gZnVuY3Rpb24gKCkge1xuICBpZiAodGhpcy5jb250YWluZXJCQikge1xuICAgIHJldHVybiB0aGlzLmNvbnRhaW5lckJCO1xuICB9XG4gIHZhciBjb250YWluZXIgPSB0aGlzLmNvbnRhaW5lcjtcbiAgdmFyIHJlY3QgPSBjb250YWluZXIuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gIHZhciBzdHlsZSA9IHRoaXMuY3kud2luZG93KCkuZ2V0Q29tcHV0ZWRTdHlsZShjb250YWluZXIpO1xuICB2YXIgc3R5bGVWYWx1ZSA9IGZ1bmN0aW9uIHN0eWxlVmFsdWUobmFtZSkge1xuICAgIHJldHVybiBwYXJzZUZsb2F0KHN0eWxlLmdldFByb3BlcnR5VmFsdWUobmFtZSkpO1xuICB9O1xuICB2YXIgcGFkZGluZyA9IHtcbiAgICBsZWZ0OiBzdHlsZVZhbHVlKCdwYWRkaW5nLWxlZnQnKSxcbiAgICByaWdodDogc3R5bGVWYWx1ZSgncGFkZGluZy1yaWdodCcpLFxuICAgIHRvcDogc3R5bGVWYWx1ZSgncGFkZGluZy10b3AnKSxcbiAgICBib3R0b206IHN0eWxlVmFsdWUoJ3BhZGRpbmctYm90dG9tJylcbiAgfTtcbiAgdmFyIGJvcmRlciA9IHtcbiAgICBsZWZ0OiBzdHlsZVZhbHVlKCdib3JkZXItbGVmdC13aWR0aCcpLFxuICAgIHJpZ2h0OiBzdHlsZVZhbHVlKCdib3JkZXItcmlnaHQtd2lkdGgnKSxcbiAgICB0b3A6IHN0eWxlVmFsdWUoJ2JvcmRlci10b3Atd2lkdGgnKSxcbiAgICBib3R0b206IHN0eWxlVmFsdWUoJ2JvcmRlci1ib3R0b20td2lkdGgnKVxuICB9O1xuICB2YXIgY2xpZW50V2lkdGggPSBjb250YWluZXIuY2xpZW50V2lkdGg7XG4gIHZhciBjbGllbnRIZWlnaHQgPSBjb250YWluZXIuY2xpZW50SGVpZ2h0O1xuICB2YXIgcGFkZGluZ0hvciA9IHBhZGRpbmcubGVmdCArIHBhZGRpbmcucmlnaHQ7XG4gIHZhciBwYWRkaW5nVmVyID0gcGFkZGluZy50b3AgKyBwYWRkaW5nLmJvdHRvbTtcbiAgdmFyIGJvcmRlckhvciA9IGJvcmRlci5sZWZ0ICsgYm9yZGVyLnJpZ2h0O1xuICB2YXIgc2NhbGUgPSByZWN0LndpZHRoIC8gKGNsaWVudFdpZHRoICsgYm9yZGVySG9yKTtcbiAgdmFyIHVuc2NhbGVkVyA9IGNsaWVudFdpZHRoIC0gcGFkZGluZ0hvcjtcbiAgdmFyIHVuc2NhbGVkSCA9IGNsaWVudEhlaWdodCAtIHBhZGRpbmdWZXI7XG4gIHZhciBsZWZ0ID0gcmVjdC5sZWZ0ICsgcGFkZGluZy5sZWZ0ICsgYm9yZGVyLmxlZnQ7XG4gIHZhciB0b3AgPSByZWN0LnRvcCArIHBhZGRpbmcudG9wICsgYm9yZGVyLnRvcDtcbiAgcmV0dXJuIHRoaXMuY29udGFpbmVyQkIgPSBbbGVmdCwgdG9wLCB1bnNjYWxlZFcsIHVuc2NhbGVkSCwgc2NhbGVdO1xufTtcbkJScCRlLmludmFsaWRhdGVDb250YWluZXJDbGllbnRDb29yZHNDYWNoZSA9IGZ1bmN0aW9uICgpIHtcbiAgdGhpcy5jb250YWluZXJCQiA9IG51bGw7XG59O1xuQlJwJGUuZmluZE5lYXJlc3RFbGVtZW50ID0gZnVuY3Rpb24gKHgsIHksIGludGVyYWN0aXZlRWxlbWVudHNPbmx5LCBpc1RvdWNoKSB7XG4gIHJldHVybiB0aGlzLmZpbmROZWFyZXN0RWxlbWVudHMoeCwgeSwgaW50ZXJhY3RpdmVFbGVtZW50c09ubHksIGlzVG91Y2gpWzBdO1xufTtcbkJScCRlLmZpbmROZWFyZXN0RWxlbWVudHMgPSBmdW5jdGlvbiAoeCwgeSwgaW50ZXJhY3RpdmVFbGVtZW50c09ubHksIGlzVG91Y2gpIHtcbiAgdmFyIHNlbGYgPSB0aGlzO1xuICB2YXIgciA9IHRoaXM7XG4gIHZhciBlbGVzID0gci5nZXRDYWNoZWRaU29ydGVkRWxlcygpO1xuICB2YXIgbmVhciA9IFtdOyAvLyAxIG5vZGUgbWF4LCAxIGVkZ2UgbWF4XG4gIHZhciB6b29tID0gci5jeS56b29tKCk7XG4gIHZhciBoYXNDb21wb3VuZHMgPSByLmN5Lmhhc0NvbXBvdW5kTm9kZXMoKTtcbiAgdmFyIGVkZ2VUaHJlc2hvbGQgPSAoaXNUb3VjaCA/IDI0IDogOCkgLyB6b29tO1xuICB2YXIgbm9kZVRocmVzaG9sZCA9IChpc1RvdWNoID8gOCA6IDIpIC8gem9vbTtcbiAgdmFyIGxhYmVsVGhyZXNob2xkID0gKGlzVG91Y2ggPyA4IDogMikgLyB6b29tO1xuICB2YXIgbWluU3FEaXN0ID0gSW5maW5pdHk7XG4gIHZhciBuZWFyRWRnZTtcbiAgdmFyIG5lYXJOb2RlO1xuICBpZiAoaW50ZXJhY3RpdmVFbGVtZW50c09ubHkpIHtcbiAgICBlbGVzID0gZWxlcy5pbnRlcmFjdGl2ZTtcbiAgfVxuICBmdW5jdGlvbiBhZGRFbGUoZWxlLCBzcURpc3QpIHtcbiAgICBpZiAoZWxlLmlzTm9kZSgpKSB7XG4gICAgICBpZiAobmVhck5vZGUpIHtcbiAgICAgICAgcmV0dXJuOyAvLyBjYW4ndCByZXBsYWNlIG5vZGVcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIG5lYXJOb2RlID0gZWxlO1xuICAgICAgICBuZWFyLnB1c2goZWxlKTtcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKGVsZS5pc0VkZ2UoKSAmJiAoc3FEaXN0ID09IG51bGwgfHwgc3FEaXN0IDwgbWluU3FEaXN0KSkge1xuICAgICAgaWYgKG5lYXJFZGdlKSB7XG4gICAgICAgIC8vIHRoZW4gcmVwbGFjZSBleGlzdGluZyBlZGdlXG4gICAgICAgIC8vIGNhbiByZXBsYWNlIG9ubHkgaWYgc2FtZSB6LWluZGV4XG4gICAgICAgIGlmIChuZWFyRWRnZS5wc3R5bGUoJ3otY29tcG91bmQtZGVwdGgnKS52YWx1ZSA9PT0gZWxlLnBzdHlsZSgnei1jb21wb3VuZC1kZXB0aCcpLnZhbHVlICYmIG5lYXJFZGdlLnBzdHlsZSgnei1jb21wb3VuZC1kZXB0aCcpLnZhbHVlID09PSBlbGUucHN0eWxlKCd6LWNvbXBvdW5kLWRlcHRoJykudmFsdWUpIHtcbiAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IG5lYXIubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGlmIChuZWFyW2ldLmlzRWRnZSgpKSB7XG4gICAgICAgICAgICAgIG5lYXJbaV0gPSBlbGU7XG4gICAgICAgICAgICAgIG5lYXJFZGdlID0gZWxlO1xuICAgICAgICAgICAgICBtaW5TcURpc3QgPSBzcURpc3QgIT0gbnVsbCA/IHNxRGlzdCA6IG1pblNxRGlzdDtcbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBuZWFyLnB1c2goZWxlKTtcbiAgICAgICAgbmVhckVkZ2UgPSBlbGU7XG4gICAgICAgIG1pblNxRGlzdCA9IHNxRGlzdCAhPSBudWxsID8gc3FEaXN0IDogbWluU3FEaXN0O1xuICAgICAgfVxuICAgIH1cbiAgfVxuICBmdW5jdGlvbiBjaGVja05vZGUobm9kZSkge1xuICAgIHZhciB3aWR0aCA9IG5vZGUub3V0ZXJXaWR0aCgpICsgMiAqIG5vZGVUaHJlc2hvbGQ7XG4gICAgdmFyIGhlaWdodCA9IG5vZGUub3V0ZXJIZWlnaHQoKSArIDIgKiBub2RlVGhyZXNob2xkO1xuICAgIHZhciBodyA9IHdpZHRoIC8gMjtcbiAgICB2YXIgaGggPSBoZWlnaHQgLyAyO1xuICAgIHZhciBwb3MgPSBub2RlLnBvc2l0aW9uKCk7XG4gICAgdmFyIGNvcm5lclJhZGl1cyA9IG5vZGUucHN0eWxlKCdjb3JuZXItcmFkaXVzJykudmFsdWUgPT09ICdhdXRvJyA/ICdhdXRvJyA6IG5vZGUucHN0eWxlKCdjb3JuZXItcmFkaXVzJykucGZWYWx1ZTtcbiAgICB2YXIgcnMgPSBub2RlLl9wcml2YXRlLnJzY3JhdGNoO1xuICAgIGlmIChwb3MueCAtIGh3IDw9IHggJiYgeCA8PSBwb3MueCArIGh3IC8vIGJiIGNoZWNrIHhcbiAgICAmJiBwb3MueSAtIGhoIDw9IHkgJiYgeSA8PSBwb3MueSArIGhoIC8vIGJiIGNoZWNrIHlcbiAgICApIHtcbiAgICAgIHZhciBzaGFwZSA9IHIubm9kZVNoYXBlc1tzZWxmLmdldE5vZGVTaGFwZShub2RlKV07XG4gICAgICBpZiAoc2hhcGUuY2hlY2tQb2ludCh4LCB5LCAwLCB3aWR0aCwgaGVpZ2h0LCBwb3MueCwgcG9zLnksIGNvcm5lclJhZGl1cywgcnMpKSB7XG4gICAgICAgIGFkZEVsZShub2RlLCAwKTtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG4gICAgfVxuICB9XG4gIGZ1bmN0aW9uIGNoZWNrRWRnZShlZGdlKSB7XG4gICAgdmFyIF9wID0gZWRnZS5fcHJpdmF0ZTtcbiAgICB2YXIgcnMgPSBfcC5yc2NyYXRjaDtcbiAgICB2YXIgc3R5bGVXaWR0aCA9IGVkZ2UucHN0eWxlKCd3aWR0aCcpLnBmVmFsdWU7XG4gICAgdmFyIHNjYWxlID0gZWRnZS5wc3R5bGUoJ2Fycm93LXNjYWxlJykudmFsdWU7XG4gICAgdmFyIHdpZHRoID0gc3R5bGVXaWR0aCAvIDIgKyBlZGdlVGhyZXNob2xkOyAvLyBtb3JlIGxpa2UgYSBkaXN0YW5jZSByYWRpdXMgZnJvbSBjZW50cmVcbiAgICB2YXIgd2lkdGhTcSA9IHdpZHRoICogd2lkdGg7XG4gICAgdmFyIHdpZHRoMiA9IHdpZHRoICogMjtcbiAgICB2YXIgc3JjID0gX3Auc291cmNlO1xuICAgIHZhciB0Z3QgPSBfcC50YXJnZXQ7XG4gICAgdmFyIHNxRGlzdDtcbiAgICBpZiAocnMuZWRnZVR5cGUgPT09ICdzZWdtZW50cycgfHwgcnMuZWRnZVR5cGUgPT09ICdzdHJhaWdodCcgfHwgcnMuZWRnZVR5cGUgPT09ICdoYXlzdGFjaycpIHtcbiAgICAgIHZhciBwdHMgPSBycy5hbGxwdHM7XG4gICAgICBmb3IgKHZhciBpID0gMDsgaSArIDMgPCBwdHMubGVuZ3RoOyBpICs9IDIpIHtcbiAgICAgICAgaWYgKGluTGluZVZpY2luaXR5KHgsIHksIHB0c1tpXSwgcHRzW2kgKyAxXSwgcHRzW2kgKyAyXSwgcHRzW2kgKyAzXSwgd2lkdGgyKSAmJiB3aWR0aFNxID4gKHNxRGlzdCA9IHNxZGlzdFRvRmluaXRlTGluZSh4LCB5LCBwdHNbaV0sIHB0c1tpICsgMV0sIHB0c1tpICsgMl0sIHB0c1tpICsgM10pKSkge1xuICAgICAgICAgIGFkZEVsZShlZGdlLCBzcURpc3QpO1xuICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChycy5lZGdlVHlwZSA9PT0gJ2JlemllcicgfHwgcnMuZWRnZVR5cGUgPT09ICdtdWx0aWJlemllcicgfHwgcnMuZWRnZVR5cGUgPT09ICdzZWxmJyB8fCBycy5lZGdlVHlwZSA9PT0gJ2NvbXBvdW5kJykge1xuICAgICAgdmFyIHB0cyA9IHJzLmFsbHB0cztcbiAgICAgIGZvciAodmFyIGkgPSAwOyBpICsgNSA8IHJzLmFsbHB0cy5sZW5ndGg7IGkgKz0gNCkge1xuICAgICAgICBpZiAoaW5CZXppZXJWaWNpbml0eSh4LCB5LCBwdHNbaV0sIHB0c1tpICsgMV0sIHB0c1tpICsgMl0sIHB0c1tpICsgM10sIHB0c1tpICsgNF0sIHB0c1tpICsgNV0sIHdpZHRoMikgJiYgd2lkdGhTcSA+IChzcURpc3QgPSBzcWRpc3RUb1F1YWRyYXRpY0Jlemllcih4LCB5LCBwdHNbaV0sIHB0c1tpICsgMV0sIHB0c1tpICsgMl0sIHB0c1tpICsgM10sIHB0c1tpICsgNF0sIHB0c1tpICsgNV0pKSkge1xuICAgICAgICAgIGFkZEVsZShlZGdlLCBzcURpc3QpO1xuICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gaWYgd2UncmUgY2xvc2UgdG8gdGhlIGVkZ2UgYnV0IGRpZG4ndCBoaXQgaXQsIG1heWJlIHdlIGhpdCBpdHMgYXJyb3dzXG5cbiAgICB2YXIgc3JjID0gc3JjIHx8IF9wLnNvdXJjZTtcbiAgICB2YXIgdGd0ID0gdGd0IHx8IF9wLnRhcmdldDtcbiAgICB2YXIgYXJTaXplID0gc2VsZi5nZXRBcnJvd1dpZHRoKHN0eWxlV2lkdGgsIHNjYWxlKTtcbiAgICB2YXIgYXJyb3dzID0gW3tcbiAgICAgIG5hbWU6ICdzb3VyY2UnLFxuICAgICAgeDogcnMuYXJyb3dTdGFydFgsXG4gICAgICB5OiBycy5hcnJvd1N0YXJ0WSxcbiAgICAgIGFuZ2xlOiBycy5zcmNBcnJvd0FuZ2xlXG4gICAgfSwge1xuICAgICAgbmFtZTogJ3RhcmdldCcsXG4gICAgICB4OiBycy5hcnJvd0VuZFgsXG4gICAgICB5OiBycy5hcnJvd0VuZFksXG4gICAgICBhbmdsZTogcnMudGd0QXJyb3dBbmdsZVxuICAgIH0sIHtcbiAgICAgIG5hbWU6ICdtaWQtc291cmNlJyxcbiAgICAgIHg6IHJzLm1pZFgsXG4gICAgICB5OiBycy5taWRZLFxuICAgICAgYW5nbGU6IHJzLm1pZHNyY0Fycm93QW5nbGVcbiAgICB9LCB7XG4gICAgICBuYW1lOiAnbWlkLXRhcmdldCcsXG4gICAgICB4OiBycy5taWRYLFxuICAgICAgeTogcnMubWlkWSxcbiAgICAgIGFuZ2xlOiBycy5taWR0Z3RBcnJvd0FuZ2xlXG4gICAgfV07XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBhcnJvd3MubGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciBhciA9IGFycm93c1tpXTtcbiAgICAgIHZhciBzaGFwZSA9IHIuYXJyb3dTaGFwZXNbZWRnZS5wc3R5bGUoYXIubmFtZSArICctYXJyb3ctc2hhcGUnKS52YWx1ZV07XG4gICAgICB2YXIgZWRnZVdpZHRoID0gZWRnZS5wc3R5bGUoJ3dpZHRoJykucGZWYWx1ZTtcbiAgICAgIGlmIChzaGFwZS5yb3VnaENvbGxpZGUoeCwgeSwgYXJTaXplLCBhci5hbmdsZSwge1xuICAgICAgICB4OiBhci54LFxuICAgICAgICB5OiBhci55XG4gICAgICB9LCBlZGdlV2lkdGgsIGVkZ2VUaHJlc2hvbGQpICYmIHNoYXBlLmNvbGxpZGUoeCwgeSwgYXJTaXplLCBhci5hbmdsZSwge1xuICAgICAgICB4OiBhci54LFxuICAgICAgICB5OiBhci55XG4gICAgICB9LCBlZGdlV2lkdGgsIGVkZ2VUaHJlc2hvbGQpKSB7XG4gICAgICAgIGFkZEVsZShlZGdlKTtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gZm9yIGNvbXBvdW5kIGdyYXBocywgaGl0dGluZyBlZGdlIG1heSBhY3R1YWxseSB3YW50IGEgY29ubmVjdGVkIG5vZGUgaW5zdGVhZCAoYi9jIGVkZ2UgbWF5IGhhdmUgZ3JlYXRlciB6LWluZGV4IHByZWNlZGVuY2UpXG4gICAgaWYgKGhhc0NvbXBvdW5kcyAmJiBuZWFyLmxlbmd0aCA+IDApIHtcbiAgICAgIGNoZWNrTm9kZShzcmMpO1xuICAgICAgY2hlY2tOb2RlKHRndCk7XG4gICAgfVxuICB9XG4gIGZ1bmN0aW9uIHByZXByb3Aob2JqLCBuYW1lLCBwcmUpIHtcbiAgICByZXR1cm4gZ2V0UHJlZml4ZWRQcm9wZXJ0eShvYmosIG5hbWUsIHByZSk7XG4gIH1cbiAgZnVuY3Rpb24gY2hlY2tMYWJlbChlbGUsIHByZWZpeCkge1xuICAgIHZhciBfcCA9IGVsZS5fcHJpdmF0ZTtcbiAgICB2YXIgdGggPSBsYWJlbFRocmVzaG9sZDtcbiAgICB2YXIgcHJlZml4RGFzaDtcbiAgICBpZiAocHJlZml4KSB7XG4gICAgICBwcmVmaXhEYXNoID0gcHJlZml4ICsgJy0nO1xuICAgIH0gZWxzZSB7XG4gICAgICBwcmVmaXhEYXNoID0gJyc7XG4gICAgfVxuICAgIGVsZS5ib3VuZGluZ0JveCgpO1xuICAgIHZhciBiYiA9IF9wLmxhYmVsQm91bmRzW3ByZWZpeCB8fCAnbWFpbiddO1xuICAgIHZhciB0ZXh0ID0gZWxlLnBzdHlsZShwcmVmaXhEYXNoICsgJ2xhYmVsJykudmFsdWU7XG4gICAgdmFyIGV2ZW50c0VuYWJsZWQgPSBlbGUucHN0eWxlKCd0ZXh0LWV2ZW50cycpLnN0clZhbHVlID09PSAneWVzJztcbiAgICBpZiAoIWV2ZW50c0VuYWJsZWQgfHwgIXRleHQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdmFyIGx4ID0gcHJlcHJvcChfcC5yc2NyYXRjaCwgJ2xhYmVsWCcsIHByZWZpeCk7XG4gICAgdmFyIGx5ID0gcHJlcHJvcChfcC5yc2NyYXRjaCwgJ2xhYmVsWScsIHByZWZpeCk7XG4gICAgdmFyIHRoZXRhID0gcHJlcHJvcChfcC5yc2NyYXRjaCwgJ2xhYmVsQW5nbGUnLCBwcmVmaXgpO1xuICAgIHZhciBveCA9IGVsZS5wc3R5bGUocHJlZml4RGFzaCArICd0ZXh0LW1hcmdpbi14JykucGZWYWx1ZTtcbiAgICB2YXIgb3kgPSBlbGUucHN0eWxlKHByZWZpeERhc2ggKyAndGV4dC1tYXJnaW4teScpLnBmVmFsdWU7XG4gICAgdmFyIGx4MSA9IGJiLngxIC0gdGggLSBveDsgLy8gKC1veCwgLW95KSBhcyBiYiBhbHJlYWR5IGluY2x1ZGVzIG1hcmdpblxuICAgIHZhciBseDIgPSBiYi54MiArIHRoIC0gb3g7IC8vIGFuZCByb3RhdGlvbiBpcyBhYm91dCAobHgsIGx5KVxuICAgIHZhciBseTEgPSBiYi55MSAtIHRoIC0gb3k7XG4gICAgdmFyIGx5MiA9IGJiLnkyICsgdGggLSBveTtcbiAgICBpZiAodGhldGEpIHtcbiAgICAgIHZhciBjb3MgPSBNYXRoLmNvcyh0aGV0YSk7XG4gICAgICB2YXIgc2luID0gTWF0aC5zaW4odGhldGEpO1xuICAgICAgdmFyIHJvdGF0ZSA9IGZ1bmN0aW9uIHJvdGF0ZSh4LCB5KSB7XG4gICAgICAgIHggPSB4IC0gbHg7XG4gICAgICAgIHkgPSB5IC0gbHk7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgeDogeCAqIGNvcyAtIHkgKiBzaW4gKyBseCxcbiAgICAgICAgICB5OiB4ICogc2luICsgeSAqIGNvcyArIGx5XG4gICAgICAgIH07XG4gICAgICB9O1xuICAgICAgdmFyIHB4MXkxID0gcm90YXRlKGx4MSwgbHkxKTtcbiAgICAgIHZhciBweDF5MiA9IHJvdGF0ZShseDEsIGx5Mik7XG4gICAgICB2YXIgcHgyeTEgPSByb3RhdGUobHgyLCBseTEpO1xuICAgICAgdmFyIHB4MnkyID0gcm90YXRlKGx4MiwgbHkyKTtcbiAgICAgIHZhciBwb2ludHMgPSBbXG4gICAgICAvLyB3aXRoIHRoZSBtYXJnaW4gYWRkZWQgYWZ0ZXIgdGhlIHJvdGF0aW9uIGlzIGFwcGxpZWRcbiAgICAgIHB4MXkxLnggKyBveCwgcHgxeTEueSArIG95LCBweDJ5MS54ICsgb3gsIHB4MnkxLnkgKyBveSwgcHgyeTIueCArIG94LCBweDJ5Mi55ICsgb3ksIHB4MXkyLnggKyBveCwgcHgxeTIueSArIG95XTtcbiAgICAgIGlmIChwb2ludEluc2lkZVBvbHlnb25Qb2ludHMoeCwgeSwgcG9pbnRzKSkge1xuICAgICAgICBhZGRFbGUoZWxlKTtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIGRvIGEgY2hlYXBlciBiYiBjaGVja1xuICAgICAgaWYgKGluQm91bmRpbmdCb3goYmIsIHgsIHkpKSB7XG4gICAgICAgIGFkZEVsZShlbGUpO1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgZm9yICh2YXIgaSA9IGVsZXMubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIHtcbiAgICAvLyByZXZlcnNlIG9yZGVyIGZvciBwcmVjZWRlbmNlXG4gICAgdmFyIGVsZSA9IGVsZXNbaV07XG4gICAgaWYgKGVsZS5pc05vZGUoKSkge1xuICAgICAgY2hlY2tOb2RlKGVsZSkgfHwgY2hlY2tMYWJlbChlbGUpO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyB0aGVuIGVkZ2VcbiAgICAgIGNoZWNrRWRnZShlbGUpIHx8IGNoZWNrTGFiZWwoZWxlKSB8fCBjaGVja0xhYmVsKGVsZSwgJ3NvdXJjZScpIHx8IGNoZWNrTGFiZWwoZWxlLCAndGFyZ2V0Jyk7XG4gICAgfVxuICB9XG4gIHJldHVybiBuZWFyO1xufTtcblxuLy8gJ0dpdmUgbWUgZXZlcnl0aGluZyBmcm9tIHRoaXMgYm94J1xuQlJwJGUuZ2V0QWxsSW5Cb3ggPSBmdW5jdGlvbiAoeDEsIHkxLCB4MiwgeTIpIHtcbiAgdmFyIGVsZXMgPSB0aGlzLmdldENhY2hlZFpTb3J0ZWRFbGVzKCkuaW50ZXJhY3RpdmU7XG4gIHZhciBib3ggPSBbXTtcbiAgdmFyIHgxYyA9IE1hdGgubWluKHgxLCB4Mik7XG4gIHZhciB4MmMgPSBNYXRoLm1heCh4MSwgeDIpO1xuICB2YXIgeTFjID0gTWF0aC5taW4oeTEsIHkyKTtcbiAgdmFyIHkyYyA9IE1hdGgubWF4KHkxLCB5Mik7XG4gIHgxID0geDFjO1xuICB4MiA9IHgyYztcbiAgeTEgPSB5MWM7XG4gIHkyID0geTJjO1xuICB2YXIgYm94QmIgPSBtYWtlQm91bmRpbmdCb3goe1xuICAgIHgxOiB4MSxcbiAgICB5MTogeTEsXG4gICAgeDI6IHgyLFxuICAgIHkyOiB5MlxuICB9KTtcbiAgZm9yICh2YXIgZSA9IDA7IGUgPCBlbGVzLmxlbmd0aDsgZSsrKSB7XG4gICAgdmFyIGVsZSA9IGVsZXNbZV07XG4gICAgaWYgKGVsZS5pc05vZGUoKSkge1xuICAgICAgdmFyIG5vZGUgPSBlbGU7XG4gICAgICB2YXIgbm9kZUJiID0gbm9kZS5ib3VuZGluZ0JveCh7XG4gICAgICAgIGluY2x1ZGVOb2RlczogdHJ1ZSxcbiAgICAgICAgaW5jbHVkZUVkZ2VzOiBmYWxzZSxcbiAgICAgICAgaW5jbHVkZUxhYmVsczogZmFsc2VcbiAgICAgIH0pO1xuICAgICAgaWYgKGJvdW5kaW5nQm94ZXNJbnRlcnNlY3QoYm94QmIsIG5vZGVCYikgJiYgIWJvdW5kaW5nQm94SW5Cb3VuZGluZ0JveChub2RlQmIsIGJveEJiKSkge1xuICAgICAgICBib3gucHVzaChub2RlKTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgdmFyIGVkZ2UgPSBlbGU7XG4gICAgICB2YXIgX3AgPSBlZGdlLl9wcml2YXRlO1xuICAgICAgdmFyIHJzID0gX3AucnNjcmF0Y2g7XG4gICAgICBpZiAocnMuc3RhcnRYICE9IG51bGwgJiYgcnMuc3RhcnRZICE9IG51bGwgJiYgIWluQm91bmRpbmdCb3goYm94QmIsIHJzLnN0YXJ0WCwgcnMuc3RhcnRZKSkge1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cbiAgICAgIGlmIChycy5lbmRYICE9IG51bGwgJiYgcnMuZW5kWSAhPSBudWxsICYmICFpbkJvdW5kaW5nQm94KGJveEJiLCBycy5lbmRYLCBycy5lbmRZKSkge1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cbiAgICAgIGlmIChycy5lZGdlVHlwZSA9PT0gJ2JlemllcicgfHwgcnMuZWRnZVR5cGUgPT09ICdtdWx0aWJlemllcicgfHwgcnMuZWRnZVR5cGUgPT09ICdzZWxmJyB8fCBycy5lZGdlVHlwZSA9PT0gJ2NvbXBvdW5kJyB8fCBycy5lZGdlVHlwZSA9PT0gJ3NlZ21lbnRzJyB8fCBycy5lZGdlVHlwZSA9PT0gJ2hheXN0YWNrJykge1xuICAgICAgICB2YXIgcHRzID0gX3AucnN0eWxlLmJlemllclB0cyB8fCBfcC5yc3R5bGUubGluZVB0cyB8fCBfcC5yc3R5bGUuaGF5c3RhY2tQdHM7XG4gICAgICAgIHZhciBhbGxJbnNpZGUgPSB0cnVlO1xuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHB0cy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgIGlmICghcG9pbnRJbkJvdW5kaW5nQm94KGJveEJiLCBwdHNbaV0pKSB7XG4gICAgICAgICAgICBhbGxJbnNpZGUgPSBmYWxzZTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAoYWxsSW5zaWRlKSB7XG4gICAgICAgICAgYm94LnB1c2goZWRnZSk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAocnMuZWRnZVR5cGUgPT09ICdoYXlzdGFjaycgfHwgcnMuZWRnZVR5cGUgPT09ICdzdHJhaWdodCcpIHtcbiAgICAgICAgYm94LnB1c2goZWRnZSk7XG4gICAgICB9XG4gICAgfVxuICB9XG4gIHJldHVybiBib3g7XG59O1xuXG52YXIgQlJwJGQgPSB7fTtcbkJScCRkLmNhbGN1bGF0ZUFycm93QW5nbGVzID0gZnVuY3Rpb24gKGVkZ2UpIHtcbiAgdmFyIHJzID0gZWRnZS5fcHJpdmF0ZS5yc2NyYXRjaDtcbiAgdmFyIGlzSGF5c3RhY2sgPSBycy5lZGdlVHlwZSA9PT0gJ2hheXN0YWNrJztcbiAgdmFyIGlzQmV6aWVyID0gcnMuZWRnZVR5cGUgPT09ICdiZXppZXInO1xuICB2YXIgaXNNdWx0aWJlemllciA9IHJzLmVkZ2VUeXBlID09PSAnbXVsdGliZXppZXInO1xuICB2YXIgaXNTZWdtZW50cyA9IHJzLmVkZ2VUeXBlID09PSAnc2VnbWVudHMnO1xuICB2YXIgaXNDb21wb3VuZCA9IHJzLmVkZ2VUeXBlID09PSAnY29tcG91bmQnO1xuICB2YXIgaXNTZWxmID0gcnMuZWRnZVR5cGUgPT09ICdzZWxmJztcblxuICAvLyBEaXNwbGFjZW1lbnQgZ2l2ZXMgZGlyZWN0aW9uIGZvciBhcnJvd2hlYWQgb3JpZW50YXRpb25cbiAgdmFyIGRpc3BYLCBkaXNwWTtcbiAgdmFyIHN0YXJ0WCwgc3RhcnRZLCBlbmRYLCBlbmRZLCBtaWRYLCBtaWRZO1xuICBpZiAoaXNIYXlzdGFjaykge1xuICAgIHN0YXJ0WCA9IHJzLmhheXN0YWNrUHRzWzBdO1xuICAgIHN0YXJ0WSA9IHJzLmhheXN0YWNrUHRzWzFdO1xuICAgIGVuZFggPSBycy5oYXlzdGFja1B0c1syXTtcbiAgICBlbmRZID0gcnMuaGF5c3RhY2tQdHNbM107XG4gIH0gZWxzZSB7XG4gICAgc3RhcnRYID0gcnMuYXJyb3dTdGFydFg7XG4gICAgc3RhcnRZID0gcnMuYXJyb3dTdGFydFk7XG4gICAgZW5kWCA9IHJzLmFycm93RW5kWDtcbiAgICBlbmRZID0gcnMuYXJyb3dFbmRZO1xuICB9XG4gIG1pZFggPSBycy5taWRYO1xuICBtaWRZID0gcnMubWlkWTtcblxuICAvLyBzb3VyY2VcbiAgLy9cblxuICBpZiAoaXNTZWdtZW50cykge1xuICAgIGRpc3BYID0gc3RhcnRYIC0gcnMuc2VncHRzWzBdO1xuICAgIGRpc3BZID0gc3RhcnRZIC0gcnMuc2VncHRzWzFdO1xuICB9IGVsc2UgaWYgKGlzTXVsdGliZXppZXIgfHwgaXNDb21wb3VuZCB8fCBpc1NlbGYgfHwgaXNCZXppZXIpIHtcbiAgICB2YXIgcHRzID0gcnMuYWxscHRzO1xuICAgIHZhciBiWCA9IHFiZXppZXJBdChwdHNbMF0sIHB0c1syXSwgcHRzWzRdLCAwLjEpO1xuICAgIHZhciBiWSA9IHFiZXppZXJBdChwdHNbMV0sIHB0c1szXSwgcHRzWzVdLCAwLjEpO1xuICAgIGRpc3BYID0gc3RhcnRYIC0gYlg7XG4gICAgZGlzcFkgPSBzdGFydFkgLSBiWTtcbiAgfSBlbHNlIHtcbiAgICBkaXNwWCA9IHN0YXJ0WCAtIG1pZFg7XG4gICAgZGlzcFkgPSBzdGFydFkgLSBtaWRZO1xuICB9XG4gIHJzLnNyY0Fycm93QW5nbGUgPSBnZXRBbmdsZUZyb21EaXNwKGRpc3BYLCBkaXNwWSk7XG5cbiAgLy8gbWlkIHRhcmdldFxuICAvL1xuXG4gIHZhciBtaWRYID0gcnMubWlkWDtcbiAgdmFyIG1pZFkgPSBycy5taWRZO1xuICBpZiAoaXNIYXlzdGFjaykge1xuICAgIG1pZFggPSAoc3RhcnRYICsgZW5kWCkgLyAyO1xuICAgIG1pZFkgPSAoc3RhcnRZICsgZW5kWSkgLyAyO1xuICB9XG4gIGRpc3BYID0gZW5kWCAtIHN0YXJ0WDtcbiAgZGlzcFkgPSBlbmRZIC0gc3RhcnRZO1xuICBpZiAoaXNTZWdtZW50cykge1xuICAgIHZhciBwdHMgPSBycy5hbGxwdHM7XG4gICAgaWYgKHB0cy5sZW5ndGggLyAyICUgMiA9PT0gMCkge1xuICAgICAgdmFyIGkyID0gcHRzLmxlbmd0aCAvIDI7XG4gICAgICB2YXIgaTEgPSBpMiAtIDI7XG4gICAgICBkaXNwWCA9IHB0c1tpMl0gLSBwdHNbaTFdO1xuICAgICAgZGlzcFkgPSBwdHNbaTIgKyAxXSAtIHB0c1tpMSArIDFdO1xuICAgIH0gZWxzZSBpZiAocnMuaXNSb3VuZCkge1xuICAgICAgZGlzcFggPSBycy5taWRWZWN0b3JbMV07XG4gICAgICBkaXNwWSA9IC1ycy5taWRWZWN0b3JbMF07XG4gICAgfSBlbHNlIHtcbiAgICAgIHZhciBpMiA9IHB0cy5sZW5ndGggLyAyIC0gMTtcbiAgICAgIHZhciBpMSA9IGkyIC0gMjtcbiAgICAgIGRpc3BYID0gcHRzW2kyXSAtIHB0c1tpMV07XG4gICAgICBkaXNwWSA9IHB0c1tpMiArIDFdIC0gcHRzW2kxICsgMV07XG4gICAgfVxuICB9IGVsc2UgaWYgKGlzTXVsdGliZXppZXIgfHwgaXNDb21wb3VuZCB8fCBpc1NlbGYpIHtcbiAgICB2YXIgcHRzID0gcnMuYWxscHRzO1xuICAgIHZhciBjcHRzID0gcnMuY3RybHB0cztcbiAgICB2YXIgYnAweCwgYnAweTtcbiAgICB2YXIgYnAxeCwgYnAxeTtcbiAgICBpZiAoY3B0cy5sZW5ndGggLyAyICUgMiA9PT0gMCkge1xuICAgICAgdmFyIHAwID0gcHRzLmxlbmd0aCAvIDIgLSAxOyAvLyBzdGFydHB0XG4gICAgICB2YXIgaWMgPSBwMCArIDI7XG4gICAgICB2YXIgcDEgPSBpYyArIDI7XG4gICAgICBicDB4ID0gcWJlemllckF0KHB0c1twMF0sIHB0c1tpY10sIHB0c1twMV0sIDAuMCk7XG4gICAgICBicDB5ID0gcWJlemllckF0KHB0c1twMCArIDFdLCBwdHNbaWMgKyAxXSwgcHRzW3AxICsgMV0sIDAuMCk7XG4gICAgICBicDF4ID0gcWJlemllckF0KHB0c1twMF0sIHB0c1tpY10sIHB0c1twMV0sIDAuMDAwMSk7XG4gICAgICBicDF5ID0gcWJlemllckF0KHB0c1twMCArIDFdLCBwdHNbaWMgKyAxXSwgcHRzW3AxICsgMV0sIDAuMDAwMSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHZhciBpYyA9IHB0cy5sZW5ndGggLyAyIC0gMTsgLy8gY3RycHRcbiAgICAgIHZhciBwMCA9IGljIC0gMjsgLy8gc3RhcnRwdFxuICAgICAgdmFyIHAxID0gaWMgKyAyOyAvLyBlbmRwdFxuXG4gICAgICBicDB4ID0gcWJlemllckF0KHB0c1twMF0sIHB0c1tpY10sIHB0c1twMV0sIDAuNDk5OSk7XG4gICAgICBicDB5ID0gcWJlemllckF0KHB0c1twMCArIDFdLCBwdHNbaWMgKyAxXSwgcHRzW3AxICsgMV0sIDAuNDk5OSk7XG4gICAgICBicDF4ID0gcWJlemllckF0KHB0c1twMF0sIHB0c1tpY10sIHB0c1twMV0sIDAuNSk7XG4gICAgICBicDF5ID0gcWJlemllckF0KHB0c1twMCArIDFdLCBwdHNbaWMgKyAxXSwgcHRzW3AxICsgMV0sIDAuNSk7XG4gICAgfVxuICAgIGRpc3BYID0gYnAxeCAtIGJwMHg7XG4gICAgZGlzcFkgPSBicDF5IC0gYnAweTtcbiAgfVxuICBycy5taWR0Z3RBcnJvd0FuZ2xlID0gZ2V0QW5nbGVGcm9tRGlzcChkaXNwWCwgZGlzcFkpO1xuICBycy5taWREaXNwWCA9IGRpc3BYO1xuICBycy5taWREaXNwWSA9IGRpc3BZO1xuXG4gIC8vIG1pZCBzb3VyY2VcbiAgLy9cblxuICBkaXNwWCAqPSAtMTtcbiAgZGlzcFkgKj0gLTE7XG4gIGlmIChpc1NlZ21lbnRzKSB7XG4gICAgdmFyIHB0cyA9IHJzLmFsbHB0cztcbiAgICBpZiAocHRzLmxlbmd0aCAvIDIgJSAyID09PSAwKSA7IGVsc2UgaWYgKCFycy5pc1JvdW5kKSB7XG4gICAgICB2YXIgaTIgPSBwdHMubGVuZ3RoIC8gMiAtIDE7XG4gICAgICB2YXIgaTMgPSBpMiArIDI7XG4gICAgICBkaXNwWCA9IC0ocHRzW2kzXSAtIHB0c1tpMl0pO1xuICAgICAgZGlzcFkgPSAtKHB0c1tpMyArIDFdIC0gcHRzW2kyICsgMV0pO1xuICAgIH1cbiAgfVxuICBycy5taWRzcmNBcnJvd0FuZ2xlID0gZ2V0QW5nbGVGcm9tRGlzcChkaXNwWCwgZGlzcFkpO1xuXG4gIC8vIHRhcmdldFxuICAvL1xuXG4gIGlmIChpc1NlZ21lbnRzKSB7XG4gICAgZGlzcFggPSBlbmRYIC0gcnMuc2VncHRzW3JzLnNlZ3B0cy5sZW5ndGggLSAyXTtcbiAgICBkaXNwWSA9IGVuZFkgLSBycy5zZWdwdHNbcnMuc2VncHRzLmxlbmd0aCAtIDFdO1xuICB9IGVsc2UgaWYgKGlzTXVsdGliZXppZXIgfHwgaXNDb21wb3VuZCB8fCBpc1NlbGYgfHwgaXNCZXppZXIpIHtcbiAgICB2YXIgcHRzID0gcnMuYWxscHRzO1xuICAgIHZhciBsID0gcHRzLmxlbmd0aDtcbiAgICB2YXIgYlggPSBxYmV6aWVyQXQocHRzW2wgLSA2XSwgcHRzW2wgLSA0XSwgcHRzW2wgLSAyXSwgMC45KTtcbiAgICB2YXIgYlkgPSBxYmV6aWVyQXQocHRzW2wgLSA1XSwgcHRzW2wgLSAzXSwgcHRzW2wgLSAxXSwgMC45KTtcbiAgICBkaXNwWCA9IGVuZFggLSBiWDtcbiAgICBkaXNwWSA9IGVuZFkgLSBiWTtcbiAgfSBlbHNlIHtcbiAgICBkaXNwWCA9IGVuZFggLSBtaWRYO1xuICAgIGRpc3BZID0gZW5kWSAtIG1pZFk7XG4gIH1cbiAgcnMudGd0QXJyb3dBbmdsZSA9IGdldEFuZ2xlRnJvbURpc3AoZGlzcFgsIGRpc3BZKTtcbn07XG5CUnAkZC5nZXRBcnJvd1dpZHRoID0gQlJwJGQuZ2V0QXJyb3dIZWlnaHQgPSBmdW5jdGlvbiAoZWRnZVdpZHRoLCBzY2FsZSkge1xuICB2YXIgY2FjaGUgPSB0aGlzLmFycm93V2lkdGhDYWNoZSA9IHRoaXMuYXJyb3dXaWR0aENhY2hlIHx8IHt9O1xuICB2YXIgY2FjaGVkVmFsID0gY2FjaGVbZWRnZVdpZHRoICsgJywgJyArIHNjYWxlXTtcbiAgaWYgKGNhY2hlZFZhbCkge1xuICAgIHJldHVybiBjYWNoZWRWYWw7XG4gIH1cbiAgY2FjaGVkVmFsID0gTWF0aC5tYXgoTWF0aC5wb3coZWRnZVdpZHRoICogMTMuMzcsIDAuOSksIDI5KSAqIHNjYWxlO1xuICBjYWNoZVtlZGdlV2lkdGggKyAnLCAnICsgc2NhbGVdID0gY2FjaGVkVmFsO1xuICByZXR1cm4gY2FjaGVkVmFsO1xufTtcblxuLyoqXG4gKiBFeHBsYWluZWQgYnkgQmxpbmRtYW42NyBhdCBodHRwczovL3N0YWNrb3ZlcmZsb3cuY29tL2EvNDQ4NTY5MjUvMTEwMjg4MjhcbiAqL1xuXG4vLyBEZWNsYXJlIHJldXNlZCB2YXJpYWJsZSB0byBhdm9pZCByZWFsbG9jYXRpbmcgdmFyaWFibGVzIGV2ZXJ5IHRpbWUgdGhlIGZ1bmN0aW9uIGlzIGNhbGxlZFxudmFyIHgsXG4gIHksXG4gIHYxID0ge30sXG4gIHYyID0ge30sXG4gIHNpbkEsXG4gIHNpbkE5MCxcbiAgcmFkRGlyZWN0aW9uLFxuICBkcmF3RGlyZWN0aW9uLFxuICBhbmdsZSxcbiAgaGFsZkFuZ2xlLFxuICBjUmFkaXVzLFxuICBsZW5PdXQsXG4gIHJhZGl1cyxcbiAgbGltaXQ7XG52YXIgc3RhcnRYLCBzdGFydFksIHN0b3BYLCBzdG9wWTtcbnZhciBsYXN0UG9pbnQ7XG5cbi8vIGNvbnZlcnQgMiBwb2ludHMgaW50byB2ZWN0b3IgZm9ybSwgcG9sYXIgZm9ybSwgYW5kIG5vcm1hbGlzZWRcbnZhciBhc1ZlYyA9IGZ1bmN0aW9uIGFzVmVjKHAsIHBwLCB2KSB7XG4gIHYueCA9IHBwLnggLSBwLng7XG4gIHYueSA9IHBwLnkgLSBwLnk7XG4gIHYubGVuID0gTWF0aC5zcXJ0KHYueCAqIHYueCArIHYueSAqIHYueSk7XG4gIHYubnggPSB2LnggLyB2LmxlbjtcbiAgdi5ueSA9IHYueSAvIHYubGVuO1xuICB2LmFuZyA9IE1hdGguYXRhbjIodi5ueSwgdi5ueCk7XG59O1xudmFyIGludmVydFZlYyA9IGZ1bmN0aW9uIGludmVydFZlYyhvcmlnaW5hbFYsIGludmVydGVkVikge1xuICBpbnZlcnRlZFYueCA9IG9yaWdpbmFsVi54ICogLTE7XG4gIGludmVydGVkVi55ID0gb3JpZ2luYWxWLnkgKiAtMTtcbiAgaW52ZXJ0ZWRWLm54ID0gb3JpZ2luYWxWLm54ICogLTE7XG4gIGludmVydGVkVi5ueSA9IG9yaWdpbmFsVi5ueSAqIC0xO1xuICBpbnZlcnRlZFYuYW5nID0gb3JpZ2luYWxWLmFuZyA+IDAgPyAtKE1hdGguUEkgLSBvcmlnaW5hbFYuYW5nKSA6IE1hdGguUEkgKyBvcmlnaW5hbFYuYW5nO1xufTtcbnZhciBjYWxjQ29ybmVyQXJjID0gZnVuY3Rpb24gY2FsY0Nvcm5lckFyYyhwcmV2aW91c1BvaW50LCBjdXJyZW50UG9pbnQsIG5leHRQb2ludCwgcmFkaXVzTWF4LCBpc0FyY1JhZGl1cykge1xuICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gIC8vIFBhcnQgMVxuICBwcmV2aW91c1BvaW50ICE9PSBsYXN0UG9pbnQgPyBhc1ZlYyhjdXJyZW50UG9pbnQsIHByZXZpb3VzUG9pbnQsIHYxKSA6IGludmVydFZlYyh2MiwgdjEpOyAvLyBBdm9pZCByZWNhbGN1bGF0aW5nIHZlYyBpZiBpdCBpcyB0aGUgaW52ZXJ0IG9mIHRoZSBsYXN0IG9uZSBjYWxjdWxhdGVkXG4gIGFzVmVjKGN1cnJlbnRQb2ludCwgbmV4dFBvaW50LCB2Mik7XG4gIHNpbkEgPSB2MS5ueCAqIHYyLm55IC0gdjEubnkgKiB2Mi5ueDtcbiAgc2luQTkwID0gdjEubnggKiB2Mi5ueCAtIHYxLm55ICogLXYyLm55O1xuICBhbmdsZSA9IE1hdGguYXNpbihNYXRoLm1heCgtMSwgTWF0aC5taW4oMSwgc2luQSkpKTtcbiAgaWYgKE1hdGguYWJzKGFuZ2xlKSA8IDFlLTYpIHtcbiAgICB4ID0gY3VycmVudFBvaW50Lng7XG4gICAgeSA9IGN1cnJlbnRQb2ludC55O1xuICAgIGNSYWRpdXMgPSByYWRpdXMgPSAwO1xuICAgIHJldHVybjtcbiAgfVxuICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gIHJhZERpcmVjdGlvbiA9IDE7XG4gIGRyYXdEaXJlY3Rpb24gPSBmYWxzZTtcbiAgaWYgKHNpbkE5MCA8IDApIHtcbiAgICBpZiAoYW5nbGUgPCAwKSB7XG4gICAgICBhbmdsZSA9IE1hdGguUEkgKyBhbmdsZTtcbiAgICB9IGVsc2Uge1xuICAgICAgYW5nbGUgPSBNYXRoLlBJIC0gYW5nbGU7XG4gICAgICByYWREaXJlY3Rpb24gPSAtMTtcbiAgICAgIGRyYXdEaXJlY3Rpb24gPSB0cnVlO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICBpZiAoYW5nbGUgPiAwKSB7XG4gICAgICByYWREaXJlY3Rpb24gPSAtMTtcbiAgICAgIGRyYXdEaXJlY3Rpb24gPSB0cnVlO1xuICAgIH1cbiAgfVxuICBpZiAoY3VycmVudFBvaW50LnJhZGl1cyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgcmFkaXVzID0gY3VycmVudFBvaW50LnJhZGl1cztcbiAgfSBlbHNlIHtcbiAgICByYWRpdXMgPSByYWRpdXNNYXg7XG4gIH1cbiAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAvLyBQYXJ0IDJcbiAgaGFsZkFuZ2xlID0gYW5nbGUgLyAyO1xuICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbiAgbGltaXQgPSBNYXRoLm1pbih2MS5sZW4gLyAyLCB2Mi5sZW4gLyAyKTtcbiAgaWYgKGlzQXJjUmFkaXVzKSB7XG4gICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAgIC8vIFBhcnQgM1xuICAgIGxlbk91dCA9IE1hdGguYWJzKE1hdGguY29zKGhhbGZBbmdsZSkgKiByYWRpdXMgLyBNYXRoLnNpbihoYWxmQW5nbGUpKTtcblxuICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgICAvLyBTcGVjaWFsIHBhcnQgQVxuICAgIGlmIChsZW5PdXQgPiBsaW1pdCkge1xuICAgICAgbGVuT3V0ID0gbGltaXQ7XG4gICAgICBjUmFkaXVzID0gTWF0aC5hYnMobGVuT3V0ICogTWF0aC5zaW4oaGFsZkFuZ2xlKSAvIE1hdGguY29zKGhhbGZBbmdsZSkpO1xuICAgIH0gZWxzZSB7XG4gICAgICBjUmFkaXVzID0gcmFkaXVzO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICBsZW5PdXQgPSBNYXRoLm1pbihsaW1pdCwgcmFkaXVzKTtcbiAgICBjUmFkaXVzID0gTWF0aC5hYnMobGVuT3V0ICogTWF0aC5zaW4oaGFsZkFuZ2xlKSAvIE1hdGguY29zKGhhbGZBbmdsZSkpO1xuICB9XG4gIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gIC8vIFBhcnQgNFxuICBzdG9wWCA9IGN1cnJlbnRQb2ludC54ICsgdjIubnggKiBsZW5PdXQ7XG4gIHN0b3BZID0gY3VycmVudFBvaW50LnkgKyB2Mi5ueSAqIGxlbk91dDtcbiAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAvLyBQYXJ0IDVcbiAgeCA9IHN0b3BYIC0gdjIubnkgKiBjUmFkaXVzICogcmFkRGlyZWN0aW9uO1xuICB5ID0gc3RvcFkgKyB2Mi5ueCAqIGNSYWRpdXMgKiByYWREaXJlY3Rpb247XG4gIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgLy8gQWRkaXRpb25hbCBQYXJ0IDogY2FsY3VsYXRlIHN0YXJ0IHBvaW50IEVcbiAgc3RhcnRYID0gY3VycmVudFBvaW50LnggKyB2MS5ueCAqIGxlbk91dDtcbiAgc3RhcnRZID0gY3VycmVudFBvaW50LnkgKyB2MS5ueSAqIGxlbk91dDtcblxuICAvLyBTYXZlIGxhc3QgcG9pbnQgdG8gYXZvaWQgcmVjYWxjdWxhdGluZyB2ZWN0b3Igd2hlbiBub3QgbmVlZGVkXG4gIGxhc3RQb2ludCA9IGN1cnJlbnRQb2ludDtcbn07XG5cbi8qKlxuICogRHJhdyBjb3JuZXIgcHJvdmlkZWQgYnkge0BsaW5rIGdldFJvdW5kQ29ybmVyfVxuICpcbiAqIEBwYXJhbSBjdHggOkNhbnZhc1JlbmRlcmluZ0NvbnRleHQyRFxuICogQHBhcmFtIHJvdW5kQ29ybmVyIHt7Y3g6bnVtYmVyLCBjeTpudW1iZXIsIHJhZGl1czpudW1iZXIsIGVuZEFuZ2xlOiBudW1iZXIsIHN0YXJ0QW5nbGU6IG51bWJlciwgY291bnRlckNsb2Nrd2lzZTogYm9vbGVhbn19XG4gKi9cbmZ1bmN0aW9uIGRyYXdQcmVwYXJlZFJvdW5kQ29ybmVyKGN0eCwgcm91bmRDb3JuZXIpIHtcbiAgaWYgKHJvdW5kQ29ybmVyLnJhZGl1cyA9PT0gMCkgY3R4LmxpbmVUbyhyb3VuZENvcm5lci5jeCwgcm91bmRDb3JuZXIuY3kpO2Vsc2UgY3R4LmFyYyhyb3VuZENvcm5lci5jeCwgcm91bmRDb3JuZXIuY3ksIHJvdW5kQ29ybmVyLnJhZGl1cywgcm91bmRDb3JuZXIuc3RhcnRBbmdsZSwgcm91bmRDb3JuZXIuZW5kQW5nbGUsIHJvdW5kQ29ybmVyLmNvdW50ZXJDbG9ja3dpc2UpO1xufVxuXG4vKipcbiAqIEdldCByb3VuZCBjb3JuZXIgZnJvbSBhIHBvaW50IGFuZCBpdHMgcHJldmlvdXMgYW5kIG5leHQgbmVpZ2hib3VycyBpbiBhIHBhdGhcbiAqXG4gKiBAcGFyYW0gcHJldmlvdXNQb2ludCB7e3g6IG51bWJlciwgeTpudW1iZXIsIHJhZGl1czogbnVtYmVyP319XG4gKiBAcGFyYW0gY3VycmVudFBvaW50IHt7eDogbnVtYmVyLCB5Om51bWJlciwgcmFkaXVzOiBudW1iZXI/fX1cbiAqIEBwYXJhbSBuZXh0UG9pbnQge3t4OiBudW1iZXIsIHk6bnVtYmVyLCByYWRpdXM6IG51bWJlcj99fVxuICogQHBhcmFtIHJhZGl1c01heCA6bnVtYmVyXG4gKiBAcGFyYW0gaXNBcmNSYWRpdXMgOmJvb2xlYW5cbiAqIEByZXR1cm4ge3tcbiAqIGN4Om51bWJlciwgY3k6bnVtYmVyLCByYWRpdXM6bnVtYmVyLFxuICogc3RhcnRYOm51bWJlciwgc3RhcnRZOm51bWJlcixcbiAqIHN0b3BYOm51bWJlciwgc3RvcFk6IG51bWJlcixcbiAqIGVuZEFuZ2xlOiBudW1iZXIsIHN0YXJ0QW5nbGU6IG51bWJlciwgY291bnRlckNsb2Nrd2lzZTogYm9vbGVhblxuICogfX1cbiAqL1xuZnVuY3Rpb24gZ2V0Um91bmRDb3JuZXIocHJldmlvdXNQb2ludCwgY3VycmVudFBvaW50LCBuZXh0UG9pbnQsIHJhZGl1c01heCkge1xuICB2YXIgaXNBcmNSYWRpdXMgPSBhcmd1bWVudHMubGVuZ3RoID4gNCAmJiBhcmd1bWVudHNbNF0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1s0XSA6IHRydWU7XG4gIGlmIChyYWRpdXNNYXggPT09IDAgfHwgY3VycmVudFBvaW50LnJhZGl1cyA9PT0gMCkgcmV0dXJuIHtcbiAgICBjeDogY3VycmVudFBvaW50LngsXG4gICAgY3k6IGN1cnJlbnRQb2ludC55LFxuICAgIHJhZGl1czogMCxcbiAgICBzdGFydFg6IGN1cnJlbnRQb2ludC54LFxuICAgIHN0YXJ0WTogY3VycmVudFBvaW50LnksXG4gICAgc3RvcFg6IGN1cnJlbnRQb2ludC54LFxuICAgIHN0b3BZOiBjdXJyZW50UG9pbnQueSxcbiAgICBzdGFydEFuZ2xlOiB1bmRlZmluZWQsXG4gICAgZW5kQW5nbGU6IHVuZGVmaW5lZCxcbiAgICBjb3VudGVyQ2xvY2t3aXNlOiB1bmRlZmluZWRcbiAgfTtcbiAgY2FsY0Nvcm5lckFyYyhwcmV2aW91c1BvaW50LCBjdXJyZW50UG9pbnQsIG5leHRQb2ludCwgcmFkaXVzTWF4LCBpc0FyY1JhZGl1cyk7XG4gIHJldHVybiB7XG4gICAgY3g6IHgsXG4gICAgY3k6IHksXG4gICAgcmFkaXVzOiBjUmFkaXVzLFxuICAgIHN0YXJ0WDogc3RhcnRYLFxuICAgIHN0YXJ0WTogc3RhcnRZLFxuICAgIHN0b3BYOiBzdG9wWCxcbiAgICBzdG9wWTogc3RvcFksXG4gICAgc3RhcnRBbmdsZTogdjEuYW5nICsgTWF0aC5QSSAvIDIgKiByYWREaXJlY3Rpb24sXG4gICAgZW5kQW5nbGU6IHYyLmFuZyAtIE1hdGguUEkgLyAyICogcmFkRGlyZWN0aW9uLFxuICAgIGNvdW50ZXJDbG9ja3dpc2U6IGRyYXdEaXJlY3Rpb25cbiAgfTtcbn1cblxudmFyIEJScCRjID0ge307XG5CUnAkYy5maW5kTWlkcHRQdHNFdGMgPSBmdW5jdGlvbiAoZWRnZSwgcGFpckluZm8pIHtcbiAgdmFyIHBvc1B0cyA9IHBhaXJJbmZvLnBvc1B0cyxcbiAgICBpbnRlcnNlY3Rpb25QdHMgPSBwYWlySW5mby5pbnRlcnNlY3Rpb25QdHMsXG4gICAgdmVjdG9yTm9ybUludmVyc2UgPSBwYWlySW5mby52ZWN0b3JOb3JtSW52ZXJzZTtcbiAgdmFyIG1pZHB0UHRzO1xuXG4gIC8vIG4uYi4gYXNzdW1lcyBhbGwgZWRnZXMgaW4gYmV6aWVyIGJ1bmRsZSBoYXZlIHNhbWUgZW5kcG9pbnRzIHNwZWNpZmllZFxuICB2YXIgc3JjTWFuRW5kcHQgPSBlZGdlLnBzdHlsZSgnc291cmNlLWVuZHBvaW50Jyk7XG4gIHZhciB0Z3RNYW5FbmRwdCA9IGVkZ2UucHN0eWxlKCd0YXJnZXQtZW5kcG9pbnQnKTtcbiAgdmFyIGhhdmVNYW51YWxFbmRQdHMgPSBzcmNNYW5FbmRwdC51bml0cyAhPSBudWxsICYmIHRndE1hbkVuZHB0LnVuaXRzICE9IG51bGw7XG4gIHZhciByZWNhbGNWZWN0b3JOb3JtSW52ZXJzZSA9IGZ1bmN0aW9uIHJlY2FsY1ZlY3Rvck5vcm1JbnZlcnNlKHgxLCB5MSwgeDIsIHkyKSB7XG4gICAgdmFyIGR5ID0geTIgLSB5MTtcbiAgICB2YXIgZHggPSB4MiAtIHgxO1xuICAgIHZhciBsID0gTWF0aC5zcXJ0KGR4ICogZHggKyBkeSAqIGR5KTtcbiAgICByZXR1cm4ge1xuICAgICAgeDogLWR5IC8gbCxcbiAgICAgIHk6IGR4IC8gbFxuICAgIH07XG4gIH07XG4gIHZhciBlZGdlRGlzdGFuY2VzID0gZWRnZS5wc3R5bGUoJ2VkZ2UtZGlzdGFuY2VzJykudmFsdWU7XG4gIHN3aXRjaCAoZWRnZURpc3RhbmNlcykge1xuICAgIGNhc2UgJ25vZGUtcG9zaXRpb24nOlxuICAgICAgbWlkcHRQdHMgPSBwb3NQdHM7XG4gICAgICBicmVhaztcbiAgICBjYXNlICdpbnRlcnNlY3Rpb24nOlxuICAgICAgbWlkcHRQdHMgPSBpbnRlcnNlY3Rpb25QdHM7XG4gICAgICBicmVhaztcbiAgICBjYXNlICdlbmRwb2ludHMnOlxuICAgICAge1xuICAgICAgICBpZiAoaGF2ZU1hbnVhbEVuZFB0cykge1xuICAgICAgICAgIHZhciBfdGhpcyRtYW51YWxFbmRwdFRvUHggPSB0aGlzLm1hbnVhbEVuZHB0VG9QeChlZGdlLnNvdXJjZSgpWzBdLCBzcmNNYW5FbmRwdCksXG4gICAgICAgICAgICBfdGhpcyRtYW51YWxFbmRwdFRvUHgyID0gX3NsaWNlZFRvQXJyYXkoX3RoaXMkbWFudWFsRW5kcHRUb1B4LCAyKSxcbiAgICAgICAgICAgIHgxID0gX3RoaXMkbWFudWFsRW5kcHRUb1B4MlswXSxcbiAgICAgICAgICAgIHkxID0gX3RoaXMkbWFudWFsRW5kcHRUb1B4MlsxXTtcbiAgICAgICAgICB2YXIgX3RoaXMkbWFudWFsRW5kcHRUb1B4MyA9IHRoaXMubWFudWFsRW5kcHRUb1B4KGVkZ2UudGFyZ2V0KClbMF0sIHRndE1hbkVuZHB0KSxcbiAgICAgICAgICAgIF90aGlzJG1hbnVhbEVuZHB0VG9QeDQgPSBfc2xpY2VkVG9BcnJheShfdGhpcyRtYW51YWxFbmRwdFRvUHgzLCAyKSxcbiAgICAgICAgICAgIHgyID0gX3RoaXMkbWFudWFsRW5kcHRUb1B4NFswXSxcbiAgICAgICAgICAgIHkyID0gX3RoaXMkbWFudWFsRW5kcHRUb1B4NFsxXTtcbiAgICAgICAgICB2YXIgZW5kUHRzID0ge1xuICAgICAgICAgICAgeDE6IHgxLFxuICAgICAgICAgICAgeTE6IHkxLFxuICAgICAgICAgICAgeDI6IHgyLFxuICAgICAgICAgICAgeTI6IHkyXG4gICAgICAgICAgfTtcbiAgICAgICAgICB2ZWN0b3JOb3JtSW52ZXJzZSA9IHJlY2FsY1ZlY3Rvck5vcm1JbnZlcnNlKHgxLCB5MSwgeDIsIHkyKTtcbiAgICAgICAgICBtaWRwdFB0cyA9IGVuZFB0cztcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB3YXJuKFwiRWRnZSBcIi5jb25jYXQoZWRnZS5pZCgpLCBcIiBoYXMgZWRnZS1kaXN0YW5jZXM6ZW5kcG9pbnRzIHNwZWNpZmllZCB3aXRob3V0IG1hbnVhbCBlbmRwb2ludHMgc3BlY2lmaWVkIHZpYSBzb3VyY2UtZW5kcG9pbnQgYW5kIHRhcmdldC1lbmRwb2ludC4gIEZhbGxpbmcgYmFjayBvbiBlZGdlLWRpc3RhbmNlczppbnRlcnNlY3Rpb24gKGRlZmF1bHQpLlwiKSk7XG4gICAgICAgICAgbWlkcHRQdHMgPSBpbnRlcnNlY3Rpb25QdHM7IC8vIGJhY2sgdG8gZGVmYXVsdFxuICAgICAgICB9XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICB9XG4gIHJldHVybiB7XG4gICAgbWlkcHRQdHM6IG1pZHB0UHRzLFxuICAgIHZlY3Rvck5vcm1JbnZlcnNlOiB2ZWN0b3JOb3JtSW52ZXJzZVxuICB9O1xufTtcbkJScCRjLmZpbmRIYXlzdGFja1BvaW50cyA9IGZ1bmN0aW9uIChlZGdlcykge1xuICBmb3IgKHZhciBpID0gMDsgaSA8IGVkZ2VzLmxlbmd0aDsgaSsrKSB7XG4gICAgdmFyIGVkZ2UgPSBlZGdlc1tpXTtcbiAgICB2YXIgX3AgPSBlZGdlLl9wcml2YXRlO1xuICAgIHZhciBycyA9IF9wLnJzY3JhdGNoO1xuICAgIGlmICghcnMuaGF5c3RhY2spIHtcbiAgICAgIHZhciBhbmdsZSA9IE1hdGgucmFuZG9tKCkgKiAyICogTWF0aC5QSTtcbiAgICAgIHJzLnNvdXJjZSA9IHtcbiAgICAgICAgeDogTWF0aC5jb3MoYW5nbGUpLFxuICAgICAgICB5OiBNYXRoLnNpbihhbmdsZSlcbiAgICAgIH07XG4gICAgICBhbmdsZSA9IE1hdGgucmFuZG9tKCkgKiAyICogTWF0aC5QSTtcbiAgICAgIHJzLnRhcmdldCA9IHtcbiAgICAgICAgeDogTWF0aC5jb3MoYW5nbGUpLFxuICAgICAgICB5OiBNYXRoLnNpbihhbmdsZSlcbiAgICAgIH07XG4gICAgfVxuICAgIHZhciBzcmMgPSBfcC5zb3VyY2U7XG4gICAgdmFyIHRndCA9IF9wLnRhcmdldDtcbiAgICB2YXIgc3JjUG9zID0gc3JjLnBvc2l0aW9uKCk7XG4gICAgdmFyIHRndFBvcyA9IHRndC5wb3NpdGlvbigpO1xuICAgIHZhciBzcmNXID0gc3JjLndpZHRoKCk7XG4gICAgdmFyIHRndFcgPSB0Z3Qud2lkdGgoKTtcbiAgICB2YXIgc3JjSCA9IHNyYy5oZWlnaHQoKTtcbiAgICB2YXIgdGd0SCA9IHRndC5oZWlnaHQoKTtcbiAgICB2YXIgcmFkaXVzID0gZWRnZS5wc3R5bGUoJ2hheXN0YWNrLXJhZGl1cycpLnZhbHVlO1xuICAgIHZhciBoYWxmUmFkaXVzID0gcmFkaXVzIC8gMjsgLy8gYi9jIGhhdmUgdG8gaGFsZiB3aWR0aC9oZWlnaHRcblxuICAgIHJzLmhheXN0YWNrUHRzID0gcnMuYWxscHRzID0gW3JzLnNvdXJjZS54ICogc3JjVyAqIGhhbGZSYWRpdXMgKyBzcmNQb3MueCwgcnMuc291cmNlLnkgKiBzcmNIICogaGFsZlJhZGl1cyArIHNyY1Bvcy55LCBycy50YXJnZXQueCAqIHRndFcgKiBoYWxmUmFkaXVzICsgdGd0UG9zLngsIHJzLnRhcmdldC55ICogdGd0SCAqIGhhbGZSYWRpdXMgKyB0Z3RQb3MueV07XG4gICAgcnMubWlkWCA9IChycy5hbGxwdHNbMF0gKyBycy5hbGxwdHNbMl0pIC8gMjtcbiAgICBycy5taWRZID0gKHJzLmFsbHB0c1sxXSArIHJzLmFsbHB0c1szXSkgLyAyO1xuXG4gICAgLy8gYWx3YXlzIG92ZXJyaWRlIGFzIGhheXN0YWNrIGluIGNhc2Ugc2V0IHRvIGRpZmZlcmVudCB0eXBlIHByZXZpb3VzbHlcbiAgICBycy5lZGdlVHlwZSA9ICdoYXlzdGFjayc7XG4gICAgcnMuaGF5c3RhY2sgPSB0cnVlO1xuICAgIHRoaXMuc3RvcmVFZGdlUHJvamVjdGlvbnMoZWRnZSk7XG4gICAgdGhpcy5jYWxjdWxhdGVBcnJvd0FuZ2xlcyhlZGdlKTtcbiAgICB0aGlzLnJlY2FsY3VsYXRlRWRnZUxhYmVsUHJvamVjdGlvbnMoZWRnZSk7XG4gICAgdGhpcy5jYWxjdWxhdGVMYWJlbEFuZ2xlcyhlZGdlKTtcbiAgfVxufTtcbkJScCRjLmZpbmRTZWdtZW50c1BvaW50cyA9IGZ1bmN0aW9uIChlZGdlLCBwYWlySW5mbykge1xuICAvLyBTZWdtZW50cyAobXVsdGlwbGUgc3RyYWlnaHQgbGluZXMpXG5cbiAgdmFyIHJzID0gZWRnZS5fcHJpdmF0ZS5yc2NyYXRjaDtcbiAgdmFyIHNlZ21lbnRXcyA9IGVkZ2UucHN0eWxlKCdzZWdtZW50LXdlaWdodHMnKTtcbiAgdmFyIHNlZ21lbnREcyA9IGVkZ2UucHN0eWxlKCdzZWdtZW50LWRpc3RhbmNlcycpO1xuICB2YXIgc2VnbWVudFJzID0gZWRnZS5wc3R5bGUoJ3NlZ21lbnQtcmFkaWknKTtcbiAgdmFyIHNlZ21lbnRUcyA9IGVkZ2UucHN0eWxlKCdyYWRpdXMtdHlwZScpO1xuICB2YXIgc2VnbWVudHNOID0gTWF0aC5taW4oc2VnbWVudFdzLnBmVmFsdWUubGVuZ3RoLCBzZWdtZW50RHMucGZWYWx1ZS5sZW5ndGgpO1xuICB2YXIgbGFzdFJhZGl1cyA9IHNlZ21lbnRScy5wZlZhbHVlW3NlZ21lbnRScy5wZlZhbHVlLmxlbmd0aCAtIDFdO1xuICB2YXIgbGFzdFJhZGl1c1R5cGUgPSBzZWdtZW50VHMucGZWYWx1ZVtzZWdtZW50VHMucGZWYWx1ZS5sZW5ndGggLSAxXTtcbiAgcnMuZWRnZVR5cGUgPSAnc2VnbWVudHMnO1xuICBycy5zZWdwdHMgPSBbXTtcbiAgcnMucmFkaWkgPSBbXTtcbiAgcnMuaXNBcmNSYWRpdXMgPSBbXTtcbiAgZm9yICh2YXIgcyA9IDA7IHMgPCBzZWdtZW50c047IHMrKykge1xuICAgIHZhciB3ID0gc2VnbWVudFdzLnBmVmFsdWVbc107XG4gICAgdmFyIGQgPSBzZWdtZW50RHMucGZWYWx1ZVtzXTtcbiAgICB2YXIgdzEgPSAxIC0gdztcbiAgICB2YXIgdzIgPSB3O1xuICAgIHZhciBfdGhpcyRmaW5kTWlkcHRQdHNFdGMgPSB0aGlzLmZpbmRNaWRwdFB0c0V0YyhlZGdlLCBwYWlySW5mbyksXG4gICAgICBtaWRwdFB0cyA9IF90aGlzJGZpbmRNaWRwdFB0c0V0Yy5taWRwdFB0cyxcbiAgICAgIHZlY3Rvck5vcm1JbnZlcnNlID0gX3RoaXMkZmluZE1pZHB0UHRzRXRjLnZlY3Rvck5vcm1JbnZlcnNlO1xuICAgIHZhciBhZGp1c3RlZE1pZHB0ID0ge1xuICAgICAgeDogbWlkcHRQdHMueDEgKiB3MSArIG1pZHB0UHRzLngyICogdzIsXG4gICAgICB5OiBtaWRwdFB0cy55MSAqIHcxICsgbWlkcHRQdHMueTIgKiB3MlxuICAgIH07XG4gICAgcnMuc2VncHRzLnB1c2goYWRqdXN0ZWRNaWRwdC54ICsgdmVjdG9yTm9ybUludmVyc2UueCAqIGQsIGFkanVzdGVkTWlkcHQueSArIHZlY3Rvck5vcm1JbnZlcnNlLnkgKiBkKTtcbiAgICBycy5yYWRpaS5wdXNoKHNlZ21lbnRScy5wZlZhbHVlW3NdICE9PSB1bmRlZmluZWQgPyBzZWdtZW50UnMucGZWYWx1ZVtzXSA6IGxhc3RSYWRpdXMpO1xuICAgIHJzLmlzQXJjUmFkaXVzLnB1c2goKHNlZ21lbnRUcy5wZlZhbHVlW3NdICE9PSB1bmRlZmluZWQgPyBzZWdtZW50VHMucGZWYWx1ZVtzXSA6IGxhc3RSYWRpdXNUeXBlKSA9PT0gJ2FyYy1yYWRpdXMnKTtcbiAgfVxufTtcbkJScCRjLmZpbmRMb29wUG9pbnRzID0gZnVuY3Rpb24gKGVkZ2UsIHBhaXJJbmZvLCBpLCBlZGdlSXNVbmJ1bmRsZWQpIHtcbiAgLy8gU2VsZi1lZGdlXG5cbiAgdmFyIHJzID0gZWRnZS5fcHJpdmF0ZS5yc2NyYXRjaDtcbiAgdmFyIGRpckNvdW50cyA9IHBhaXJJbmZvLmRpckNvdW50cyxcbiAgICBzcmNQb3MgPSBwYWlySW5mby5zcmNQb3M7XG4gIHZhciBjdHJscHREaXN0cyA9IGVkZ2UucHN0eWxlKCdjb250cm9sLXBvaW50LWRpc3RhbmNlcycpO1xuICB2YXIgY3RybHB0RGlzdCA9IGN0cmxwdERpc3RzID8gY3RybHB0RGlzdHMucGZWYWx1ZVswXSA6IHVuZGVmaW5lZDtcbiAgdmFyIGxvb3BEaXIgPSBlZGdlLnBzdHlsZSgnbG9vcC1kaXJlY3Rpb24nKS5wZlZhbHVlO1xuICB2YXIgbG9vcFN3cCA9IGVkZ2UucHN0eWxlKCdsb29wLXN3ZWVwJykucGZWYWx1ZTtcbiAgdmFyIHN0ZXBTaXplID0gZWRnZS5wc3R5bGUoJ2NvbnRyb2wtcG9pbnQtc3RlcC1zaXplJykucGZWYWx1ZTtcbiAgcnMuZWRnZVR5cGUgPSAnc2VsZic7XG4gIHZhciBqID0gaTtcbiAgdmFyIGxvb3BEaXN0ID0gc3RlcFNpemU7XG4gIGlmIChlZGdlSXNVbmJ1bmRsZWQpIHtcbiAgICBqID0gMDtcbiAgICBsb29wRGlzdCA9IGN0cmxwdERpc3Q7XG4gIH1cbiAgdmFyIGxvb3BBbmdsZSA9IGxvb3BEaXIgLSBNYXRoLlBJIC8gMjtcbiAgdmFyIG91dEFuZ2xlID0gbG9vcEFuZ2xlIC0gbG9vcFN3cCAvIDI7XG4gIHZhciBpbkFuZ2xlID0gbG9vcEFuZ2xlICsgbG9vcFN3cCAvIDI7XG5cbiAgLy8gaW5jcmVhc2UgYnkgc3RlcCBzaXplIGZvciBvdmVybGFwcGluZyBsb29wcywga2V5ZWQgb24gZGlyZWN0aW9uIGFuZCBzd2VlcCB2YWx1ZXNcbiAgdmFyIGRjID0gU3RyaW5nKGxvb3BEaXIgKyAnXycgKyBsb29wU3dwKTtcbiAgaiA9IGRpckNvdW50c1tkY10gPT09IHVuZGVmaW5lZCA/IGRpckNvdW50c1tkY10gPSAwIDogKytkaXJDb3VudHNbZGNdO1xuICBycy5jdHJscHRzID0gW3NyY1Bvcy54ICsgTWF0aC5jb3Mob3V0QW5nbGUpICogMS40ICogbG9vcERpc3QgKiAoaiAvIDMgKyAxKSwgc3JjUG9zLnkgKyBNYXRoLnNpbihvdXRBbmdsZSkgKiAxLjQgKiBsb29wRGlzdCAqIChqIC8gMyArIDEpLCBzcmNQb3MueCArIE1hdGguY29zKGluQW5nbGUpICogMS40ICogbG9vcERpc3QgKiAoaiAvIDMgKyAxKSwgc3JjUG9zLnkgKyBNYXRoLnNpbihpbkFuZ2xlKSAqIDEuNCAqIGxvb3BEaXN0ICogKGogLyAzICsgMSldO1xufTtcbkJScCRjLmZpbmRDb21wb3VuZExvb3BQb2ludHMgPSBmdW5jdGlvbiAoZWRnZSwgcGFpckluZm8sIGksIGVkZ2VJc1VuYnVuZGxlZCkge1xuICAvLyBDb21wb3VuZCBlZGdlXG5cbiAgdmFyIHJzID0gZWRnZS5fcHJpdmF0ZS5yc2NyYXRjaDtcbiAgcnMuZWRnZVR5cGUgPSAnY29tcG91bmQnO1xuICB2YXIgc3JjUG9zID0gcGFpckluZm8uc3JjUG9zLFxuICAgIHRndFBvcyA9IHBhaXJJbmZvLnRndFBvcyxcbiAgICBzcmNXID0gcGFpckluZm8uc3JjVyxcbiAgICBzcmNIID0gcGFpckluZm8uc3JjSCxcbiAgICB0Z3RXID0gcGFpckluZm8udGd0VyxcbiAgICB0Z3RIID0gcGFpckluZm8udGd0SDtcbiAgdmFyIHN0ZXBTaXplID0gZWRnZS5wc3R5bGUoJ2NvbnRyb2wtcG9pbnQtc3RlcC1zaXplJykucGZWYWx1ZTtcbiAgdmFyIGN0cmxwdERpc3RzID0gZWRnZS5wc3R5bGUoJ2NvbnRyb2wtcG9pbnQtZGlzdGFuY2VzJyk7XG4gIHZhciBjdHJscHREaXN0ID0gY3RybHB0RGlzdHMgPyBjdHJscHREaXN0cy5wZlZhbHVlWzBdIDogdW5kZWZpbmVkO1xuICB2YXIgaiA9IGk7XG4gIHZhciBsb29wRGlzdCA9IHN0ZXBTaXplO1xuICBpZiAoZWRnZUlzVW5idW5kbGVkKSB7XG4gICAgaiA9IDA7XG4gICAgbG9vcERpc3QgPSBjdHJscHREaXN0O1xuICB9XG4gIHZhciBsb29wVyA9IDUwO1xuICB2YXIgbG9vcGFQb3MgPSB7XG4gICAgeDogc3JjUG9zLnggLSBzcmNXIC8gMixcbiAgICB5OiBzcmNQb3MueSAtIHNyY0ggLyAyXG4gIH07XG4gIHZhciBsb29wYlBvcyA9IHtcbiAgICB4OiB0Z3RQb3MueCAtIHRndFcgLyAyLFxuICAgIHk6IHRndFBvcy55IC0gdGd0SCAvIDJcbiAgfTtcbiAgdmFyIGxvb3BQb3MgPSB7XG4gICAgeDogTWF0aC5taW4obG9vcGFQb3MueCwgbG9vcGJQb3MueCksXG4gICAgeTogTWF0aC5taW4obG9vcGFQb3MueSwgbG9vcGJQb3MueSlcbiAgfTtcblxuICAvLyBhdm9pZHMgY2FzZXMgd2l0aCBpbXBvc3NpYmxlIGJlemllcnNcbiAgdmFyIG1pbkNvbXBvdW5kU3RyZXRjaCA9IDAuNTtcbiAgdmFyIGNvbXBvdW5kU3RyZXRjaEEgPSBNYXRoLm1heChtaW5Db21wb3VuZFN0cmV0Y2gsIE1hdGgubG9nKHNyY1cgKiAwLjAxKSk7XG4gIHZhciBjb21wb3VuZFN0cmV0Y2hCID0gTWF0aC5tYXgobWluQ29tcG91bmRTdHJldGNoLCBNYXRoLmxvZyh0Z3RXICogMC4wMSkpO1xuICBycy5jdHJscHRzID0gW2xvb3BQb3MueCwgbG9vcFBvcy55IC0gKDEgKyBNYXRoLnBvdyhsb29wVywgMS4xMikgLyAxMDApICogbG9vcERpc3QgKiAoaiAvIDMgKyAxKSAqIGNvbXBvdW5kU3RyZXRjaEEsIGxvb3BQb3MueCAtICgxICsgTWF0aC5wb3cobG9vcFcsIDEuMTIpIC8gMTAwKSAqIGxvb3BEaXN0ICogKGogLyAzICsgMSkgKiBjb21wb3VuZFN0cmV0Y2hCLCBsb29wUG9zLnldO1xufTtcbkJScCRjLmZpbmRTdHJhaWdodEVkZ2VQb2ludHMgPSBmdW5jdGlvbiAoZWRnZSkge1xuICAvLyBTdHJhaWdodCBlZGdlIHdpdGhpbiBidW5kbGVcblxuICBlZGdlLl9wcml2YXRlLnJzY3JhdGNoLmVkZ2VUeXBlID0gJ3N0cmFpZ2h0Jztcbn07XG5CUnAkYy5maW5kQmV6aWVyUG9pbnRzID0gZnVuY3Rpb24gKGVkZ2UsIHBhaXJJbmZvLCBpLCBlZGdlSXNVbmJ1bmRsZWQsIGVkZ2VJc1N3YXBwZWQpIHtcbiAgdmFyIHJzID0gZWRnZS5fcHJpdmF0ZS5yc2NyYXRjaDtcbiAgdmFyIHN0ZXBTaXplID0gZWRnZS5wc3R5bGUoJ2NvbnRyb2wtcG9pbnQtc3RlcC1zaXplJykucGZWYWx1ZTtcbiAgdmFyIGN0cmxwdERpc3RzID0gZWRnZS5wc3R5bGUoJ2NvbnRyb2wtcG9pbnQtZGlzdGFuY2VzJyk7XG4gIHZhciBjdHJscHRXcyA9IGVkZ2UucHN0eWxlKCdjb250cm9sLXBvaW50LXdlaWdodHMnKTtcbiAgdmFyIGJlemllck4gPSBjdHJscHREaXN0cyAmJiBjdHJscHRXcyA/IE1hdGgubWluKGN0cmxwdERpc3RzLnZhbHVlLmxlbmd0aCwgY3RybHB0V3MudmFsdWUubGVuZ3RoKSA6IDE7XG4gIHZhciBjdHJscHREaXN0ID0gY3RybHB0RGlzdHMgPyBjdHJscHREaXN0cy5wZlZhbHVlWzBdIDogdW5kZWZpbmVkO1xuICB2YXIgY3RybHB0V2VpZ2h0ID0gY3RybHB0V3MudmFsdWVbMF07XG5cbiAgLy8gKE11bHRpKWJlemllclxuXG4gIHZhciBtdWx0aSA9IGVkZ2VJc1VuYnVuZGxlZDtcbiAgcnMuZWRnZVR5cGUgPSBtdWx0aSA/ICdtdWx0aWJlemllcicgOiAnYmV6aWVyJztcbiAgcnMuY3RybHB0cyA9IFtdO1xuICBmb3IgKHZhciBiID0gMDsgYiA8IGJlemllck47IGIrKykge1xuICAgIHZhciBub3JtY3RybHB0RGlzdCA9ICgwLjUgLSBwYWlySW5mby5lbGVzLmxlbmd0aCAvIDIgKyBpKSAqIHN0ZXBTaXplICogKGVkZ2VJc1N3YXBwZWQgPyAtMSA6IDEpO1xuICAgIHZhciBtYW5jdHJscHREaXN0ID0gdW5kZWZpbmVkO1xuICAgIHZhciBzaWduID0gc2lnbnVtKG5vcm1jdHJscHREaXN0KTtcbiAgICBpZiAobXVsdGkpIHtcbiAgICAgIGN0cmxwdERpc3QgPSBjdHJscHREaXN0cyA/IGN0cmxwdERpc3RzLnBmVmFsdWVbYl0gOiBzdGVwU2l6ZTsgLy8gZmFsbCBiYWNrIG9uIHN0ZXAgc2l6ZVxuICAgICAgY3RybHB0V2VpZ2h0ID0gY3RybHB0V3MudmFsdWVbYl07XG4gICAgfVxuICAgIGlmIChlZGdlSXNVbmJ1bmRsZWQpIHtcbiAgICAgIC8vIG11bHRpIG9yIHNpbmdsZSB1bmJ1bmRsZWRcbiAgICAgIG1hbmN0cmxwdERpc3QgPSBjdHJscHREaXN0O1xuICAgIH0gZWxzZSB7XG4gICAgICBtYW5jdHJscHREaXN0ID0gY3RybHB0RGlzdCAhPT0gdW5kZWZpbmVkID8gc2lnbiAqIGN0cmxwdERpc3QgOiB1bmRlZmluZWQ7XG4gICAgfVxuICAgIHZhciBkaXN0YW5jZUZyb21NaWRwb2ludCA9IG1hbmN0cmxwdERpc3QgIT09IHVuZGVmaW5lZCA/IG1hbmN0cmxwdERpc3QgOiBub3JtY3RybHB0RGlzdDtcbiAgICB2YXIgdzEgPSAxIC0gY3RybHB0V2VpZ2h0O1xuICAgIHZhciB3MiA9IGN0cmxwdFdlaWdodDtcbiAgICB2YXIgX3RoaXMkZmluZE1pZHB0UHRzRXRjMiA9IHRoaXMuZmluZE1pZHB0UHRzRXRjKGVkZ2UsIHBhaXJJbmZvKSxcbiAgICAgIG1pZHB0UHRzID0gX3RoaXMkZmluZE1pZHB0UHRzRXRjMi5taWRwdFB0cyxcbiAgICAgIHZlY3Rvck5vcm1JbnZlcnNlID0gX3RoaXMkZmluZE1pZHB0UHRzRXRjMi52ZWN0b3JOb3JtSW52ZXJzZTtcbiAgICB2YXIgYWRqdXN0ZWRNaWRwdCA9IHtcbiAgICAgIHg6IG1pZHB0UHRzLngxICogdzEgKyBtaWRwdFB0cy54MiAqIHcyLFxuICAgICAgeTogbWlkcHRQdHMueTEgKiB3MSArIG1pZHB0UHRzLnkyICogdzJcbiAgICB9O1xuICAgIHJzLmN0cmxwdHMucHVzaChhZGp1c3RlZE1pZHB0LnggKyB2ZWN0b3JOb3JtSW52ZXJzZS54ICogZGlzdGFuY2VGcm9tTWlkcG9pbnQsIGFkanVzdGVkTWlkcHQueSArIHZlY3Rvck5vcm1JbnZlcnNlLnkgKiBkaXN0YW5jZUZyb21NaWRwb2ludCk7XG4gIH1cbn07XG5CUnAkYy5maW5kVGF4aVBvaW50cyA9IGZ1bmN0aW9uIChlZGdlLCBwYWlySW5mbykge1xuICAvLyBUYXhpY2FiIGdlb21ldHJ5IHdpdGggdHdvIHR1cm5zIG1heGltdW1cblxuICB2YXIgcnMgPSBlZGdlLl9wcml2YXRlLnJzY3JhdGNoO1xuICBycy5lZGdlVHlwZSA9ICdzZWdtZW50cyc7XG4gIHZhciBWRVJUSUNBTCA9ICd2ZXJ0aWNhbCc7XG4gIHZhciBIT1JJWk9OVEFMID0gJ2hvcml6b250YWwnO1xuICB2YXIgTEVGVFdBUkQgPSAnbGVmdHdhcmQnO1xuICB2YXIgUklHSFRXQVJEID0gJ3JpZ2h0d2FyZCc7XG4gIHZhciBET1dOV0FSRCA9ICdkb3dud2FyZCc7XG4gIHZhciBVUFdBUkQgPSAndXB3YXJkJztcbiAgdmFyIEFVVE8gPSAnYXV0byc7XG4gIHZhciBwb3NQdHMgPSBwYWlySW5mby5wb3NQdHMsXG4gICAgc3JjVyA9IHBhaXJJbmZvLnNyY1csXG4gICAgc3JjSCA9IHBhaXJJbmZvLnNyY0gsXG4gICAgdGd0VyA9IHBhaXJJbmZvLnRndFcsXG4gICAgdGd0SCA9IHBhaXJJbmZvLnRndEg7XG4gIHZhciBlZGdlRGlzdGFuY2VzID0gZWRnZS5wc3R5bGUoJ2VkZ2UtZGlzdGFuY2VzJykudmFsdWU7XG4gIHZhciBkSW5jbHVkZXNOb2RlQm9keSA9IGVkZ2VEaXN0YW5jZXMgIT09ICdub2RlLXBvc2l0aW9uJztcbiAgdmFyIHRheGlEaXIgPSBlZGdlLnBzdHlsZSgndGF4aS1kaXJlY3Rpb24nKS52YWx1ZTtcbiAgdmFyIHJhd1RheGlEaXIgPSB0YXhpRGlyOyAvLyB1bnByb2Nlc3NlZCB2YWx1ZVxuICB2YXIgdGF4aVR1cm4gPSBlZGdlLnBzdHlsZSgndGF4aS10dXJuJyk7XG4gIHZhciB0dXJuSXNQZXJjZW50ID0gdGF4aVR1cm4udW5pdHMgPT09ICclJztcbiAgdmFyIHRheGlUdXJuUGZWYWwgPSB0YXhpVHVybi5wZlZhbHVlO1xuICB2YXIgdHVybklzTmVnYXRpdmUgPSB0YXhpVHVyblBmVmFsIDwgMDsgLy8gaS5lLiBmcm9tIHRhcmdldCBzaWRlXG4gIHZhciBtaW5EID0gZWRnZS5wc3R5bGUoJ3RheGktdHVybi1taW4tZGlzdGFuY2UnKS5wZlZhbHVlO1xuICB2YXIgZHcgPSBkSW5jbHVkZXNOb2RlQm9keSA/IChzcmNXICsgdGd0VykgLyAyIDogMDtcbiAgdmFyIGRoID0gZEluY2x1ZGVzTm9kZUJvZHkgPyAoc3JjSCArIHRndEgpIC8gMiA6IDA7XG4gIHZhciBwZHggPSBwb3NQdHMueDIgLSBwb3NQdHMueDE7XG4gIHZhciBwZHkgPSBwb3NQdHMueTIgLSBwb3NQdHMueTE7XG5cbiAgLy8gdGFrZSBhd2F5IHRoZSBlZmZlY3RpdmUgdy9oIGZyb20gdGhlIG1hZ25pdHVkZSBvZiB0aGUgZGVsdGEgdmFsdWVcbiAgdmFyIHN1YkRXSCA9IGZ1bmN0aW9uIHN1YkRXSChkeHksIGR3aCkge1xuICAgIGlmIChkeHkgPiAwKSB7XG4gICAgICByZXR1cm4gTWF0aC5tYXgoZHh5IC0gZHdoLCAwKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIE1hdGgubWluKGR4eSArIGR3aCwgMCk7XG4gICAgfVxuICB9O1xuICB2YXIgZHggPSBzdWJEV0gocGR4LCBkdyk7XG4gIHZhciBkeSA9IHN1YkRXSChwZHksIGRoKTtcbiAgdmFyIGlzRXhwbGljaXREaXIgPSBmYWxzZTtcbiAgaWYgKHJhd1RheGlEaXIgPT09IEFVVE8pIHtcbiAgICB0YXhpRGlyID0gTWF0aC5hYnMoZHgpID4gTWF0aC5hYnMoZHkpID8gSE9SSVpPTlRBTCA6IFZFUlRJQ0FMO1xuICB9IGVsc2UgaWYgKHJhd1RheGlEaXIgPT09IFVQV0FSRCB8fCByYXdUYXhpRGlyID09PSBET1dOV0FSRCkge1xuICAgIHRheGlEaXIgPSBWRVJUSUNBTDtcbiAgICBpc0V4cGxpY2l0RGlyID0gdHJ1ZTtcbiAgfSBlbHNlIGlmIChyYXdUYXhpRGlyID09PSBMRUZUV0FSRCB8fCByYXdUYXhpRGlyID09PSBSSUdIVFdBUkQpIHtcbiAgICB0YXhpRGlyID0gSE9SSVpPTlRBTDtcbiAgICBpc0V4cGxpY2l0RGlyID0gdHJ1ZTtcbiAgfVxuICB2YXIgaXNWZXJ0ID0gdGF4aURpciA9PT0gVkVSVElDQUw7XG4gIHZhciBsID0gaXNWZXJ0ID8gZHkgOiBkeDtcbiAgdmFyIHBsID0gaXNWZXJ0ID8gcGR5IDogcGR4O1xuICB2YXIgc2duTCA9IHNpZ251bShwbCk7XG4gIHZhciBmb3JjZWREaXIgPSBmYWxzZTtcbiAgaWYgKCEoaXNFeHBsaWNpdERpciAmJiAodHVybklzUGVyY2VudCB8fCB0dXJuSXNOZWdhdGl2ZSkpIC8vIGZvcmNpbmcgaW4gdGhpcyBjYXNlIHdvdWxkIGNhdXNlIHdlaXJkIGdyb3dpbmcgaW4gdGhlIG9wcG9zaXRlIGRpcmVjdGlvblxuICAmJiAocmF3VGF4aURpciA9PT0gRE9XTldBUkQgJiYgcGwgPCAwIHx8IHJhd1RheGlEaXIgPT09IFVQV0FSRCAmJiBwbCA+IDAgfHwgcmF3VGF4aURpciA9PT0gTEVGVFdBUkQgJiYgcGwgPiAwIHx8IHJhd1RheGlEaXIgPT09IFJJR0hUV0FSRCAmJiBwbCA8IDApKSB7XG4gICAgc2duTCAqPSAtMTtcbiAgICBsID0gc2duTCAqIE1hdGguYWJzKGwpO1xuICAgIGZvcmNlZERpciA9IHRydWU7XG4gIH1cbiAgdmFyIGQ7XG4gIGlmICh0dXJuSXNQZXJjZW50KSB7XG4gICAgdmFyIHAgPSB0YXhpVHVyblBmVmFsIDwgMCA/IDEgKyB0YXhpVHVyblBmVmFsIDogdGF4aVR1cm5QZlZhbDtcbiAgICBkID0gcCAqIGw7XG4gIH0gZWxzZSB7XG4gICAgdmFyIGsgPSB0YXhpVHVyblBmVmFsIDwgMCA/IGwgOiAwO1xuICAgIGQgPSBrICsgdGF4aVR1cm5QZlZhbCAqIHNnbkw7XG4gIH1cbiAgdmFyIGdldElzVG9vQ2xvc2UgPSBmdW5jdGlvbiBnZXRJc1Rvb0Nsb3NlKGQpIHtcbiAgICByZXR1cm4gTWF0aC5hYnMoZCkgPCBtaW5EIHx8IE1hdGguYWJzKGQpID49IE1hdGguYWJzKGwpO1xuICB9O1xuICB2YXIgaXNUb29DbG9zZVNyYyA9IGdldElzVG9vQ2xvc2UoZCk7XG4gIHZhciBpc1Rvb0Nsb3NlVGd0ID0gZ2V0SXNUb29DbG9zZShNYXRoLmFicyhsKSAtIE1hdGguYWJzKGQpKTtcbiAgdmFyIGlzVG9vQ2xvc2UgPSBpc1Rvb0Nsb3NlU3JjIHx8IGlzVG9vQ2xvc2VUZ3Q7XG4gIGlmIChpc1Rvb0Nsb3NlICYmICFmb3JjZWREaXIpIHtcbiAgICAvLyBub24taWRlYWwgcm91dGluZ1xuICAgIGlmIChpc1ZlcnQpIHtcbiAgICAgIC8vIHZlcnRpY2FsIGZhbGxiYWNrc1xuICAgICAgdmFyIGxTaGFwZUluc2lkZVNyYyA9IE1hdGguYWJzKHBsKSA8PSBzcmNIIC8gMjtcbiAgICAgIHZhciBsU2hhcGVJbnNpZGVUZ3QgPSBNYXRoLmFicyhwZHgpIDw9IHRndFcgLyAyO1xuICAgICAgaWYgKGxTaGFwZUluc2lkZVNyYykge1xuICAgICAgICAvLyBob3Jpem9udGFsIFotc2hhcGUgKGRpcmVjdGlvbiBub3QgcmVzcGVjdGVkKVxuICAgICAgICB2YXIgeCA9IChwb3NQdHMueDEgKyBwb3NQdHMueDIpIC8gMjtcbiAgICAgICAgdmFyIHkxID0gcG9zUHRzLnkxLFxuICAgICAgICAgIHkyID0gcG9zUHRzLnkyO1xuICAgICAgICBycy5zZWdwdHMgPSBbeCwgeTEsIHgsIHkyXTtcbiAgICAgIH0gZWxzZSBpZiAobFNoYXBlSW5zaWRlVGd0KSB7XG4gICAgICAgIC8vIHZlcnRpY2FsIFotc2hhcGUgKGRpc3RhbmNlIG5vdCByZXNwZWN0ZWQpXG4gICAgICAgIHZhciB5ID0gKHBvc1B0cy55MSArIHBvc1B0cy55MikgLyAyO1xuICAgICAgICB2YXIgeDEgPSBwb3NQdHMueDEsXG4gICAgICAgICAgeDIgPSBwb3NQdHMueDI7XG4gICAgICAgIHJzLnNlZ3B0cyA9IFt4MSwgeSwgeDIsIHldO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gTC1zaGFwZSBmYWxsYmFjayAodHVybiBkaXN0YW5jZSBub3QgcmVzcGVjdGVkLCBidXQgd29ya3Mgd2VsbCB3aXRoIHRyZWUgc2libGluZ3MpXG4gICAgICAgIHJzLnNlZ3B0cyA9IFtwb3NQdHMueDEsIHBvc1B0cy55Ml07XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIGhvcml6b250YWwgZmFsbGJhY2tzXG4gICAgICB2YXIgX2xTaGFwZUluc2lkZVNyYyA9IE1hdGguYWJzKHBsKSA8PSBzcmNXIC8gMjtcbiAgICAgIHZhciBfbFNoYXBlSW5zaWRlVGd0ID0gTWF0aC5hYnMocGR5KSA8PSB0Z3RIIC8gMjtcbiAgICAgIGlmIChfbFNoYXBlSW5zaWRlU3JjKSB7XG4gICAgICAgIC8vIHZlcnRpY2FsIFotc2hhcGUgKGRpcmVjdGlvbiBub3QgcmVzcGVjdGVkKVxuICAgICAgICB2YXIgX3kgPSAocG9zUHRzLnkxICsgcG9zUHRzLnkyKSAvIDI7XG4gICAgICAgIHZhciBfeCA9IHBvc1B0cy54MSxcbiAgICAgICAgICBfeDIgPSBwb3NQdHMueDI7XG4gICAgICAgIHJzLnNlZ3B0cyA9IFtfeCwgX3ksIF94MiwgX3ldO1xuICAgICAgfSBlbHNlIGlmIChfbFNoYXBlSW5zaWRlVGd0KSB7XG4gICAgICAgIC8vIGhvcml6b250YWwgWi1zaGFwZSAodHVybiBkaXN0YW5jZSBub3QgcmVzcGVjdGVkKVxuICAgICAgICB2YXIgX3gzID0gKHBvc1B0cy54MSArIHBvc1B0cy54MikgLyAyO1xuICAgICAgICB2YXIgX3kyID0gcG9zUHRzLnkxLFxuICAgICAgICAgIF95MyA9IHBvc1B0cy55MjtcbiAgICAgICAgcnMuc2VncHRzID0gW194MywgX3kyLCBfeDMsIF95M107XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBMLXNoYXBlICh0dXJuIGRpc3RhbmNlIG5vdCByZXNwZWN0ZWQsIGJ1dCB3b3JrcyB3ZWxsIGZvciB0cmVlIHNpYmxpbmdzKVxuICAgICAgICBycy5zZWdwdHMgPSBbcG9zUHRzLngyLCBwb3NQdHMueTFdO1xuICAgICAgfVxuICAgIH1cbiAgfSBlbHNlIHtcbiAgICAvLyBpZGVhbCByb3V0aW5nXG4gICAgaWYgKGlzVmVydCkge1xuICAgICAgdmFyIF95NCA9IHBvc1B0cy55MSArIGQgKyAoZEluY2x1ZGVzTm9kZUJvZHkgPyBzcmNIIC8gMiAqIHNnbkwgOiAwKTtcbiAgICAgIHZhciBfeDQgPSBwb3NQdHMueDEsXG4gICAgICAgIF94NSA9IHBvc1B0cy54MjtcbiAgICAgIHJzLnNlZ3B0cyA9IFtfeDQsIF95NCwgX3g1LCBfeTRdO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBob3Jpem9udGFsXG4gICAgICB2YXIgX3g2ID0gcG9zUHRzLngxICsgZCArIChkSW5jbHVkZXNOb2RlQm9keSA/IHNyY1cgLyAyICogc2duTCA6IDApO1xuICAgICAgdmFyIF95NSA9IHBvc1B0cy55MSxcbiAgICAgICAgX3k2ID0gcG9zUHRzLnkyO1xuICAgICAgcnMuc2VncHRzID0gW194NiwgX3k1LCBfeDYsIF95Nl07XG4gICAgfVxuICB9XG4gIGlmIChycy5pc1JvdW5kKSB7XG4gICAgdmFyIHJhZGl1cyA9IGVkZ2UucHN0eWxlKCd0YXhpLXJhZGl1cycpLnZhbHVlO1xuICAgIHZhciBpc0FyY1JhZGl1cyA9IGVkZ2UucHN0eWxlKCdyYWRpdXMtdHlwZScpLnZhbHVlWzBdID09PSAnYXJjLXJhZGl1cyc7XG4gICAgcnMucmFkaWkgPSBuZXcgQXJyYXkocnMuc2VncHRzLmxlbmd0aCAvIDIpLmZpbGwocmFkaXVzKTtcbiAgICBycy5pc0FyY1JhZGl1cyA9IG5ldyBBcnJheShycy5zZWdwdHMubGVuZ3RoIC8gMikuZmlsbChpc0FyY1JhZGl1cyk7XG4gIH1cbn07XG5CUnAkYy50cnlUb0NvcnJlY3RJbnZhbGlkUG9pbnRzID0gZnVuY3Rpb24gKGVkZ2UsIHBhaXJJbmZvKSB7XG4gIHZhciBycyA9IGVkZ2UuX3ByaXZhdGUucnNjcmF0Y2g7XG5cbiAgLy8gY2FuIG9ubHkgY29ycmVjdCBiZXppZXJzIGZvciBub3cuLi5cbiAgaWYgKHJzLmVkZ2VUeXBlID09PSAnYmV6aWVyJykge1xuICAgIHZhciBzcmNQb3MgPSBwYWlySW5mby5zcmNQb3MsXG4gICAgICB0Z3RQb3MgPSBwYWlySW5mby50Z3RQb3MsXG4gICAgICBzcmNXID0gcGFpckluZm8uc3JjVyxcbiAgICAgIHNyY0ggPSBwYWlySW5mby5zcmNILFxuICAgICAgdGd0VyA9IHBhaXJJbmZvLnRndFcsXG4gICAgICB0Z3RIID0gcGFpckluZm8udGd0SCxcbiAgICAgIHNyY1NoYXBlID0gcGFpckluZm8uc3JjU2hhcGUsXG4gICAgICB0Z3RTaGFwZSA9IHBhaXJJbmZvLnRndFNoYXBlLFxuICAgICAgc3JjQ29ybmVyUmFkaXVzID0gcGFpckluZm8uc3JjQ29ybmVyUmFkaXVzLFxuICAgICAgdGd0Q29ybmVyUmFkaXVzID0gcGFpckluZm8udGd0Q29ybmVyUmFkaXVzLFxuICAgICAgc3JjUnMgPSBwYWlySW5mby5zcmNScyxcbiAgICAgIHRndFJzID0gcGFpckluZm8udGd0UnM7XG4gICAgdmFyIGJhZFN0YXJ0ID0gIW51bWJlciQxKHJzLnN0YXJ0WCkgfHwgIW51bWJlciQxKHJzLnN0YXJ0WSk7XG4gICAgdmFyIGJhZEFTdGFydCA9ICFudW1iZXIkMShycy5hcnJvd1N0YXJ0WCkgfHwgIW51bWJlciQxKHJzLmFycm93U3RhcnRZKTtcbiAgICB2YXIgYmFkRW5kID0gIW51bWJlciQxKHJzLmVuZFgpIHx8ICFudW1iZXIkMShycy5lbmRZKTtcbiAgICB2YXIgYmFkQUVuZCA9ICFudW1iZXIkMShycy5hcnJvd0VuZFgpIHx8ICFudW1iZXIkMShycy5hcnJvd0VuZFkpO1xuICAgIHZhciBtaW5DcEFEaXN0RmFjdG9yID0gMztcbiAgICB2YXIgYXJyb3dXID0gdGhpcy5nZXRBcnJvd1dpZHRoKGVkZ2UucHN0eWxlKCd3aWR0aCcpLnBmVmFsdWUsIGVkZ2UucHN0eWxlKCdhcnJvdy1zY2FsZScpLnZhbHVlKSAqIHRoaXMuYXJyb3dTaGFwZVdpZHRoO1xuICAgIHZhciBtaW5DcEFEaXN0ID0gbWluQ3BBRGlzdEZhY3RvciAqIGFycm93VztcbiAgICB2YXIgc3RhcnRBQ3BEaXN0ID0gZGlzdCh7XG4gICAgICB4OiBycy5jdHJscHRzWzBdLFxuICAgICAgeTogcnMuY3RybHB0c1sxXVxuICAgIH0sIHtcbiAgICAgIHg6IHJzLnN0YXJ0WCxcbiAgICAgIHk6IHJzLnN0YXJ0WVxuICAgIH0pO1xuICAgIHZhciBjbG9zZVN0YXJ0QUNwID0gc3RhcnRBQ3BEaXN0IDwgbWluQ3BBRGlzdDtcbiAgICB2YXIgZW5kQUNwRGlzdCA9IGRpc3Qoe1xuICAgICAgeDogcnMuY3RybHB0c1swXSxcbiAgICAgIHk6IHJzLmN0cmxwdHNbMV1cbiAgICB9LCB7XG4gICAgICB4OiBycy5lbmRYLFxuICAgICAgeTogcnMuZW5kWVxuICAgIH0pO1xuICAgIHZhciBjbG9zZUVuZEFDcCA9IGVuZEFDcERpc3QgPCBtaW5DcEFEaXN0O1xuICAgIHZhciBvdmVybGFwcGluZyA9IGZhbHNlO1xuICAgIGlmIChiYWRTdGFydCB8fCBiYWRBU3RhcnQgfHwgY2xvc2VTdGFydEFDcCkge1xuICAgICAgb3ZlcmxhcHBpbmcgPSB0cnVlO1xuXG4gICAgICAvLyBwcm9qZWN0IGNvbnRyb2wgcG9pbnQgYWxvbmcgbGluZSBmcm9tIHNyYyBjZW50cmUgdG8gb3V0c2lkZSB0aGUgc3JjIHNoYXBlXG4gICAgICAvLyAob3RoZXJ3aXNlIGludGVyc2VjdGlvbiB3aWxsIHlpZWxkIG5vdGhpbmcpXG4gICAgICB2YXIgY3BEID0ge1xuICAgICAgICAvLyBkZWx0YVxuICAgICAgICB4OiBycy5jdHJscHRzWzBdIC0gc3JjUG9zLngsXG4gICAgICAgIHk6IHJzLmN0cmxwdHNbMV0gLSBzcmNQb3MueVxuICAgICAgfTtcbiAgICAgIHZhciBjcEwgPSBNYXRoLnNxcnQoY3BELnggKiBjcEQueCArIGNwRC55ICogY3BELnkpOyAvLyBsZW5ndGggb2YgbGluZVxuICAgICAgdmFyIGNwTSA9IHtcbiAgICAgICAgLy8gbm9ybWFsaXNlZCBkZWx0YVxuICAgICAgICB4OiBjcEQueCAvIGNwTCxcbiAgICAgICAgeTogY3BELnkgLyBjcExcbiAgICAgIH07XG4gICAgICB2YXIgcmFkaXVzID0gTWF0aC5tYXgoc3JjVywgc3JjSCk7XG4gICAgICB2YXIgY3BQcm9qID0ge1xuICAgICAgICAvLyAqMiByYWRpdXMgZ3VhcmFudGVlcyBvdXRzaWRlIHNoYXBlXG4gICAgICAgIHg6IHJzLmN0cmxwdHNbMF0gKyBjcE0ueCAqIDIgKiByYWRpdXMsXG4gICAgICAgIHk6IHJzLmN0cmxwdHNbMV0gKyBjcE0ueSAqIDIgKiByYWRpdXNcbiAgICAgIH07XG4gICAgICB2YXIgc3JjQ3RybFB0SW50biA9IHNyY1NoYXBlLmludGVyc2VjdExpbmUoc3JjUG9zLngsIHNyY1Bvcy55LCBzcmNXLCBzcmNILCBjcFByb2oueCwgY3BQcm9qLnksIDAsIHNyY0Nvcm5lclJhZGl1cywgc3JjUnMpO1xuICAgICAgaWYgKGNsb3NlU3RhcnRBQ3ApIHtcbiAgICAgICAgcnMuY3RybHB0c1swXSA9IHJzLmN0cmxwdHNbMF0gKyBjcE0ueCAqIChtaW5DcEFEaXN0IC0gc3RhcnRBQ3BEaXN0KTtcbiAgICAgICAgcnMuY3RybHB0c1sxXSA9IHJzLmN0cmxwdHNbMV0gKyBjcE0ueSAqIChtaW5DcEFEaXN0IC0gc3RhcnRBQ3BEaXN0KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJzLmN0cmxwdHNbMF0gPSBzcmNDdHJsUHRJbnRuWzBdICsgY3BNLnggKiBtaW5DcEFEaXN0O1xuICAgICAgICBycy5jdHJscHRzWzFdID0gc3JjQ3RybFB0SW50blsxXSArIGNwTS55ICogbWluQ3BBRGlzdDtcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKGJhZEVuZCB8fCBiYWRBRW5kIHx8IGNsb3NlRW5kQUNwKSB7XG4gICAgICBvdmVybGFwcGluZyA9IHRydWU7XG5cbiAgICAgIC8vIHByb2plY3QgY29udHJvbCBwb2ludCBhbG9uZyBsaW5lIGZyb20gdGd0IGNlbnRyZSB0byBvdXRzaWRlIHRoZSB0Z3Qgc2hhcGVcbiAgICAgIC8vIChvdGhlcndpc2UgaW50ZXJzZWN0aW9uIHdpbGwgeWllbGQgbm90aGluZylcbiAgICAgIHZhciBfY3BEID0ge1xuICAgICAgICAvLyBkZWx0YVxuICAgICAgICB4OiBycy5jdHJscHRzWzBdIC0gdGd0UG9zLngsXG4gICAgICAgIHk6IHJzLmN0cmxwdHNbMV0gLSB0Z3RQb3MueVxuICAgICAgfTtcbiAgICAgIHZhciBfY3BMID0gTWF0aC5zcXJ0KF9jcEQueCAqIF9jcEQueCArIF9jcEQueSAqIF9jcEQueSk7IC8vIGxlbmd0aCBvZiBsaW5lXG4gICAgICB2YXIgX2NwTSA9IHtcbiAgICAgICAgLy8gbm9ybWFsaXNlZCBkZWx0YVxuICAgICAgICB4OiBfY3BELnggLyBfY3BMLFxuICAgICAgICB5OiBfY3BELnkgLyBfY3BMXG4gICAgICB9O1xuICAgICAgdmFyIF9yYWRpdXMgPSBNYXRoLm1heChzcmNXLCBzcmNIKTtcbiAgICAgIHZhciBfY3BQcm9qID0ge1xuICAgICAgICAvLyAqMiByYWRpdXMgZ3VhcmFudGVlcyBvdXRzaWRlIHNoYXBlXG4gICAgICAgIHg6IHJzLmN0cmxwdHNbMF0gKyBfY3BNLnggKiAyICogX3JhZGl1cyxcbiAgICAgICAgeTogcnMuY3RybHB0c1sxXSArIF9jcE0ueSAqIDIgKiBfcmFkaXVzXG4gICAgICB9O1xuICAgICAgdmFyIHRndEN0cmxQdEludG4gPSB0Z3RTaGFwZS5pbnRlcnNlY3RMaW5lKHRndFBvcy54LCB0Z3RQb3MueSwgdGd0VywgdGd0SCwgX2NwUHJvai54LCBfY3BQcm9qLnksIDAsIHRndENvcm5lclJhZGl1cywgdGd0UnMpO1xuICAgICAgaWYgKGNsb3NlRW5kQUNwKSB7XG4gICAgICAgIHJzLmN0cmxwdHNbMF0gPSBycy5jdHJscHRzWzBdICsgX2NwTS54ICogKG1pbkNwQURpc3QgLSBlbmRBQ3BEaXN0KTtcbiAgICAgICAgcnMuY3RybHB0c1sxXSA9IHJzLmN0cmxwdHNbMV0gKyBfY3BNLnkgKiAobWluQ3BBRGlzdCAtIGVuZEFDcERpc3QpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcnMuY3RybHB0c1swXSA9IHRndEN0cmxQdEludG5bMF0gKyBfY3BNLnggKiBtaW5DcEFEaXN0O1xuICAgICAgICBycy5jdHJscHRzWzFdID0gdGd0Q3RybFB0SW50blsxXSArIF9jcE0ueSAqIG1pbkNwQURpc3Q7XG4gICAgICB9XG4gICAgfVxuICAgIGlmIChvdmVybGFwcGluZykge1xuICAgICAgLy8gcmVjYWxjIGVuZHB0c1xuICAgICAgdGhpcy5maW5kRW5kcG9pbnRzKGVkZ2UpO1xuICAgIH1cbiAgfVxufTtcbkJScCRjLnN0b3JlQWxscHRzID0gZnVuY3Rpb24gKGVkZ2UpIHtcbiAgdmFyIHJzID0gZWRnZS5fcHJpdmF0ZS5yc2NyYXRjaDtcbiAgaWYgKHJzLmVkZ2VUeXBlID09PSAnbXVsdGliZXppZXInIHx8IHJzLmVkZ2VUeXBlID09PSAnYmV6aWVyJyB8fCBycy5lZGdlVHlwZSA9PT0gJ3NlbGYnIHx8IHJzLmVkZ2VUeXBlID09PSAnY29tcG91bmQnKSB7XG4gICAgcnMuYWxscHRzID0gW107XG4gICAgcnMuYWxscHRzLnB1c2gocnMuc3RhcnRYLCBycy5zdGFydFkpO1xuICAgIGZvciAodmFyIGIgPSAwOyBiICsgMSA8IHJzLmN0cmxwdHMubGVuZ3RoOyBiICs9IDIpIHtcbiAgICAgIC8vIGN0cmwgcHQgaXRzZWxmXG4gICAgICBycy5hbGxwdHMucHVzaChycy5jdHJscHRzW2JdLCBycy5jdHJscHRzW2IgKyAxXSk7XG5cbiAgICAgIC8vIHRoZSBtaWRwdCBiZXR3ZWVuIGN0cmxwdHMgYXMgaW50ZXJtZWRpYXRlIGRlc3RpbmF0aW9uIHB0c1xuICAgICAgaWYgKGIgKyAzIDwgcnMuY3RybHB0cy5sZW5ndGgpIHtcbiAgICAgICAgcnMuYWxscHRzLnB1c2goKHJzLmN0cmxwdHNbYl0gKyBycy5jdHJscHRzW2IgKyAyXSkgLyAyLCAocnMuY3RybHB0c1tiICsgMV0gKyBycy5jdHJscHRzW2IgKyAzXSkgLyAyKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcnMuYWxscHRzLnB1c2gocnMuZW5kWCwgcnMuZW5kWSk7XG4gICAgdmFyIG0sIG10O1xuICAgIGlmIChycy5jdHJscHRzLmxlbmd0aCAvIDIgJSAyID09PSAwKSB7XG4gICAgICBtID0gcnMuYWxscHRzLmxlbmd0aCAvIDIgLSAxO1xuICAgICAgcnMubWlkWCA9IHJzLmFsbHB0c1ttXTtcbiAgICAgIHJzLm1pZFkgPSBycy5hbGxwdHNbbSArIDFdO1xuICAgIH0gZWxzZSB7XG4gICAgICBtID0gcnMuYWxscHRzLmxlbmd0aCAvIDIgLSAzO1xuICAgICAgbXQgPSAwLjU7XG4gICAgICBycy5taWRYID0gcWJlemllckF0KHJzLmFsbHB0c1ttXSwgcnMuYWxscHRzW20gKyAyXSwgcnMuYWxscHRzW20gKyA0XSwgbXQpO1xuICAgICAgcnMubWlkWSA9IHFiZXppZXJBdChycy5hbGxwdHNbbSArIDFdLCBycy5hbGxwdHNbbSArIDNdLCBycy5hbGxwdHNbbSArIDVdLCBtdCk7XG4gICAgfVxuICB9IGVsc2UgaWYgKHJzLmVkZ2VUeXBlID09PSAnc3RyYWlnaHQnKSB7XG4gICAgLy8gbmVlZCB0byBjYWxjIHRoZXNlIGFmdGVyIGVuZHB0c1xuICAgIHJzLmFsbHB0cyA9IFtycy5zdGFydFgsIHJzLnN0YXJ0WSwgcnMuZW5kWCwgcnMuZW5kWV07XG5cbiAgICAvLyBkZWZhdWx0IG1pZHB0IGZvciBsYWJlbHMgZXRjXG4gICAgcnMubWlkWCA9IChycy5zdGFydFggKyBycy5lbmRYICsgcnMuYXJyb3dTdGFydFggKyBycy5hcnJvd0VuZFgpIC8gNDtcbiAgICBycy5taWRZID0gKHJzLnN0YXJ0WSArIHJzLmVuZFkgKyBycy5hcnJvd1N0YXJ0WSArIHJzLmFycm93RW5kWSkgLyA0O1xuICB9IGVsc2UgaWYgKHJzLmVkZ2VUeXBlID09PSAnc2VnbWVudHMnKSB7XG4gICAgcnMuYWxscHRzID0gW107XG4gICAgcnMuYWxscHRzLnB1c2gocnMuc3RhcnRYLCBycy5zdGFydFkpO1xuICAgIHJzLmFsbHB0cy5wdXNoLmFwcGx5KHJzLmFsbHB0cywgcnMuc2VncHRzKTtcbiAgICBycy5hbGxwdHMucHVzaChycy5lbmRYLCBycy5lbmRZKTtcbiAgICBpZiAocnMuaXNSb3VuZCkge1xuICAgICAgcnMucm91bmRDb3JuZXJzID0gW107XG4gICAgICBmb3IgKHZhciBpID0gMjsgaSArIDMgPCBycy5hbGxwdHMubGVuZ3RoOyBpICs9IDIpIHtcbiAgICAgICAgdmFyIHJhZGl1cyA9IHJzLnJhZGlpW2kgLyAyIC0gMV07XG4gICAgICAgIHZhciBpc0FyY1JhZGl1cyA9IHJzLmlzQXJjUmFkaXVzW2kgLyAyIC0gMV07XG4gICAgICAgIHJzLnJvdW5kQ29ybmVycy5wdXNoKGdldFJvdW5kQ29ybmVyKHtcbiAgICAgICAgICB4OiBycy5hbGxwdHNbaSAtIDJdLFxuICAgICAgICAgIHk6IHJzLmFsbHB0c1tpIC0gMV1cbiAgICAgICAgfSwge1xuICAgICAgICAgIHg6IHJzLmFsbHB0c1tpXSxcbiAgICAgICAgICB5OiBycy5hbGxwdHNbaSArIDFdLFxuICAgICAgICAgIHJhZGl1czogcmFkaXVzXG4gICAgICAgIH0sIHtcbiAgICAgICAgICB4OiBycy5hbGxwdHNbaSArIDJdLFxuICAgICAgICAgIHk6IHJzLmFsbHB0c1tpICsgM11cbiAgICAgICAgfSwgcmFkaXVzLCBpc0FyY1JhZGl1cykpO1xuICAgICAgfVxuICAgIH1cbiAgICBpZiAocnMuc2VncHRzLmxlbmd0aCAlIDQgPT09IDApIHtcbiAgICAgIHZhciBpMiA9IHJzLnNlZ3B0cy5sZW5ndGggLyAyO1xuICAgICAgdmFyIGkxID0gaTIgLSAyO1xuICAgICAgcnMubWlkWCA9IChycy5zZWdwdHNbaTFdICsgcnMuc2VncHRzW2kyXSkgLyAyO1xuICAgICAgcnMubWlkWSA9IChycy5zZWdwdHNbaTEgKyAxXSArIHJzLnNlZ3B0c1tpMiArIDFdKSAvIDI7XG4gICAgfSBlbHNlIHtcbiAgICAgIHZhciBfaSA9IHJzLnNlZ3B0cy5sZW5ndGggLyAyIC0gMTtcbiAgICAgIGlmICghcnMuaXNSb3VuZCkge1xuICAgICAgICBycy5taWRYID0gcnMuc2VncHRzW19pXTtcbiAgICAgICAgcnMubWlkWSA9IHJzLnNlZ3B0c1tfaSArIDFdO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdmFyIHBvaW50ID0ge1xuICAgICAgICAgIHg6IHJzLnNlZ3B0c1tfaV0sXG4gICAgICAgICAgeTogcnMuc2VncHRzW19pICsgMV1cbiAgICAgICAgfTtcbiAgICAgICAgdmFyIGNvcm5lciA9IHJzLnJvdW5kQ29ybmVyc1tfaSAvIDJdO1xuICAgICAgICBpZiAoY29ybmVyLnJhZGl1cyA9PT0gMCkge1xuICAgICAgICAgIC8vIE9uIGNvbGxpbmVhciBwb2ludHNcbiAgICAgICAgICB2YXIgbmV4dFBvaW50ID0ge1xuICAgICAgICAgICAgeDogcnMuc2VncHRzW19pICsgMl0sXG4gICAgICAgICAgICB5OiBycy5zZWdwdHNbX2kgKyAzXVxuICAgICAgICAgIH07XG4gICAgICAgICAgcnMubWlkWCA9IHBvaW50Lng7XG4gICAgICAgICAgcnMubWlkWSA9IHBvaW50Lnk7XG4gICAgICAgICAgcnMubWlkVmVjdG9yID0gW3BvaW50LnkgLSBuZXh0UG9pbnQueSwgbmV4dFBvaW50LnggLSBwb2ludC54XTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAvLyBPbiByb3VuZGVkIHBvaW50c1xuICAgICAgICAgIHZhciB2ID0gW3BvaW50LnggLSBjb3JuZXIuY3gsIHBvaW50LnkgLSBjb3JuZXIuY3ldO1xuICAgICAgICAgIHZhciBmYWN0b3IgPSBjb3JuZXIucmFkaXVzIC8gTWF0aC5zcXJ0KE1hdGgucG93KHZbMF0sIDIpICsgTWF0aC5wb3codlsxXSwgMikpO1xuICAgICAgICAgIHYgPSB2Lm1hcChmdW5jdGlvbiAoYykge1xuICAgICAgICAgICAgcmV0dXJuIGMgKiBmYWN0b3I7XG4gICAgICAgICAgfSk7XG4gICAgICAgICAgcnMubWlkWCA9IGNvcm5lci5jeCArIHZbMF07XG4gICAgICAgICAgcnMubWlkWSA9IGNvcm5lci5jeSArIHZbMV07XG4gICAgICAgICAgcnMubWlkVmVjdG9yID0gdjtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxufTtcbkJScCRjLmNoZWNrRm9ySW52YWxpZEVkZ2VXYXJuaW5nID0gZnVuY3Rpb24gKGVkZ2UpIHtcbiAgdmFyIHJzID0gZWRnZVswXS5fcHJpdmF0ZS5yc2NyYXRjaDtcbiAgaWYgKHJzLm5vZGVzT3ZlcmxhcCB8fCBudW1iZXIkMShycy5zdGFydFgpICYmIG51bWJlciQxKHJzLnN0YXJ0WSkgJiYgbnVtYmVyJDEocnMuZW5kWCkgJiYgbnVtYmVyJDEocnMuZW5kWSkpIHtcbiAgICBycy5sb2dnZWRFcnIgPSBmYWxzZTtcbiAgfSBlbHNlIHtcbiAgICBpZiAoIXJzLmxvZ2dlZEVycikge1xuICAgICAgcnMubG9nZ2VkRXJyID0gdHJ1ZTtcbiAgICAgIHdhcm4oJ0VkZ2UgYCcgKyBlZGdlLmlkKCkgKyAnYCBoYXMgaW52YWxpZCBlbmRwb2ludHMgYW5kIHNvIGl0IGlzIGltcG9zc2libGUgdG8gZHJhdy4gIEFkanVzdCB5b3VyIGVkZ2Ugc3R5bGUgKGUuZy4gY29udHJvbCBwb2ludHMpIGFjY29yZGluZ2x5IG9yIHVzZSBhbiBhbHRlcm5hdGl2ZSBlZGdlIHR5cGUuICBUaGlzIGlzIGV4cGVjdGVkIGJlaGF2aW91ciB3aGVuIHRoZSBzb3VyY2Ugbm9kZSBhbmQgdGhlIHRhcmdldCBub2RlIG92ZXJsYXAuJyk7XG4gICAgfVxuICB9XG59O1xuQlJwJGMuZmluZEVkZ2VDb250cm9sUG9pbnRzID0gZnVuY3Rpb24gKGVkZ2VzKSB7XG4gIHZhciBfdGhpcyA9IHRoaXM7XG4gIGlmICghZWRnZXMgfHwgZWRnZXMubGVuZ3RoID09PSAwKSB7XG4gICAgcmV0dXJuO1xuICB9XG4gIHZhciByID0gdGhpcztcbiAgdmFyIGN5ID0gci5jeTtcbiAgdmFyIGhhc0NvbXBvdW5kcyA9IGN5Lmhhc0NvbXBvdW5kTm9kZXMoKTtcbiAgdmFyIGhhc2hUYWJsZSA9IG5ldyBNYXAkMSgpO1xuICB2YXIgZ2V0S2V5ID0gZnVuY3Rpb24gZ2V0S2V5KHBhaXJJZCwgZWRnZUlzVW5idW5kbGVkKSB7XG4gICAgcmV0dXJuIFtdLmNvbmNhdChfdG9Db25zdW1hYmxlQXJyYXkocGFpcklkKSwgW2VkZ2VJc1VuYnVuZGxlZCA/IDEgOiAwXSkuam9pbignLScpO1xuICB9O1xuICB2YXIgcGFpcklkcyA9IFtdO1xuICB2YXIgaGF5c3RhY2tFZGdlcyA9IFtdO1xuXG4gIC8vIGNyZWF0ZSBhIHRhYmxlIG9mIGVkZ2UgKHNyYywgdGd0KSA9PiBsaXN0IG9mIGVkZ2VzIGJldHdlZW4gdGhlbVxuICBmb3IgKHZhciBpID0gMDsgaSA8IGVkZ2VzLmxlbmd0aDsgaSsrKSB7XG4gICAgdmFyIGVkZ2UgPSBlZGdlc1tpXTtcbiAgICB2YXIgX3AgPSBlZGdlLl9wcml2YXRlO1xuICAgIHZhciBjdXJ2ZVN0eWxlID0gZWRnZS5wc3R5bGUoJ2N1cnZlLXN0eWxlJykudmFsdWU7XG5cbiAgICAvLyBpZ25vcmUgZWRnZXMgd2hvIGFyZSBub3QgdG8gYmUgZGlzcGxheWVkXG4gICAgLy8gdGhleSBzaG91bGRuJ3QgdGFrZSB1cCBzcGFjZVxuICAgIGlmIChlZGdlLnJlbW92ZWQoKSB8fCAhZWRnZS50YWtlc1VwU3BhY2UoKSkge1xuICAgICAgY29udGludWU7XG4gICAgfVxuICAgIGlmIChjdXJ2ZVN0eWxlID09PSAnaGF5c3RhY2snKSB7XG4gICAgICBoYXlzdGFja0VkZ2VzLnB1c2goZWRnZSk7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG4gICAgdmFyIGVkZ2VJc1VuYnVuZGxlZCA9IGN1cnZlU3R5bGUgPT09ICd1bmJ1bmRsZWQtYmV6aWVyJyB8fCBjdXJ2ZVN0eWxlLmVuZHNXaXRoKCdzZWdtZW50cycpIHx8IGN1cnZlU3R5bGUgPT09ICdzdHJhaWdodCcgfHwgY3VydmVTdHlsZSA9PT0gJ3N0cmFpZ2h0LXRyaWFuZ2xlJyB8fCBjdXJ2ZVN0eWxlLmVuZHNXaXRoKCd0YXhpJyk7XG4gICAgdmFyIGVkZ2VJc0JlemllciA9IGN1cnZlU3R5bGUgPT09ICd1bmJ1bmRsZWQtYmV6aWVyJyB8fCBjdXJ2ZVN0eWxlID09PSAnYmV6aWVyJztcbiAgICB2YXIgc3JjID0gX3Auc291cmNlO1xuICAgIHZhciB0Z3QgPSBfcC50YXJnZXQ7XG4gICAgdmFyIHNyY0luZGV4ID0gc3JjLnBvb2xJbmRleCgpO1xuICAgIHZhciB0Z3RJbmRleCA9IHRndC5wb29sSW5kZXgoKTtcbiAgICB2YXIgcGFpcklkID0gW3NyY0luZGV4LCB0Z3RJbmRleF0uc29ydCgpO1xuICAgIHZhciBrZXkgPSBnZXRLZXkocGFpcklkLCBlZGdlSXNVbmJ1bmRsZWQpO1xuICAgIHZhciB0YWJsZUVudHJ5ID0gaGFzaFRhYmxlLmdldChrZXkpO1xuICAgIGlmICh0YWJsZUVudHJ5ID09IG51bGwpIHtcbiAgICAgIHRhYmxlRW50cnkgPSB7XG4gICAgICAgIGVsZXM6IFtdXG4gICAgICB9O1xuICAgICAgcGFpcklkcy5wdXNoKHtcbiAgICAgICAgcGFpcklkOiBwYWlySWQsXG4gICAgICAgIGVkZ2VJc1VuYnVuZGxlZDogZWRnZUlzVW5idW5kbGVkXG4gICAgICB9KTtcbiAgICAgIGhhc2hUYWJsZS5zZXQoa2V5LCB0YWJsZUVudHJ5KTtcbiAgICB9XG4gICAgdGFibGVFbnRyeS5lbGVzLnB1c2goZWRnZSk7XG4gICAgaWYgKGVkZ2VJc1VuYnVuZGxlZCkge1xuICAgICAgdGFibGVFbnRyeS5oYXNVbmJ1bmRsZWQgPSB0cnVlO1xuICAgIH1cbiAgICBpZiAoZWRnZUlzQmV6aWVyKSB7XG4gICAgICB0YWJsZUVudHJ5Lmhhc0JlemllciA9IHRydWU7XG4gICAgfVxuICB9XG5cbiAgLy8gZm9yIGVhY2ggcGFpciAoc3JjLCB0Z3QpLCBjcmVhdGUgdGhlIGN0cmwgcHRzXG4gIC8vIE5lc3RlZCBmb3IgbG9vcCBpcyBPSzsgdG90YWwgbnVtYmVyIG9mIGl0ZXJhdGlvbnMgZm9yIGJvdGggbG9vcHMgPSBlZGdlQ291bnRcbiAgdmFyIF9sb29wID0gZnVuY3Rpb24gX2xvb3AoKSB7XG4gICAgdmFyIF9wYWlySWRzJHAgPSBwYWlySWRzW3BdLFxuICAgICAgcGFpcklkID0gX3BhaXJJZHMkcC5wYWlySWQsXG4gICAgICBlZGdlSXNVbmJ1bmRsZWQgPSBfcGFpcklkcyRwLmVkZ2VJc1VuYnVuZGxlZDtcbiAgICB2YXIga2V5ID0gZ2V0S2V5KHBhaXJJZCwgZWRnZUlzVW5idW5kbGVkKTtcbiAgICB2YXIgcGFpckluZm8gPSBoYXNoVGFibGUuZ2V0KGtleSk7XG4gICAgdmFyIHN3YXBwZWRwYWlySW5mbztcbiAgICBpZiAoIXBhaXJJbmZvLmhhc1VuYnVuZGxlZCkge1xuICAgICAgdmFyIHBsbEVkZ2VzID0gcGFpckluZm8uZWxlc1swXS5wYXJhbGxlbEVkZ2VzKCkuZmlsdGVyKGZ1bmN0aW9uIChlKSB7XG4gICAgICAgIHJldHVybiBlLmlzQnVuZGxlZEJlemllcigpO1xuICAgICAgfSk7XG4gICAgICBjbGVhckFycmF5KHBhaXJJbmZvLmVsZXMpO1xuICAgICAgcGxsRWRnZXMuZm9yRWFjaChmdW5jdGlvbiAoZWRnZSkge1xuICAgICAgICByZXR1cm4gcGFpckluZm8uZWxlcy5wdXNoKGVkZ2UpO1xuICAgICAgfSk7XG5cbiAgICAgIC8vIGZvciBlYWNoIHBhaXIgaWQsIHRoZSBlZGdlcyBzaG91bGQgYmUgc29ydGVkIGJ5IGluZGV4XG4gICAgICBwYWlySW5mby5lbGVzLnNvcnQoZnVuY3Rpb24gKGVkZ2UxLCBlZGdlMikge1xuICAgICAgICByZXR1cm4gZWRnZTEucG9vbEluZGV4KCkgLSBlZGdlMi5wb29sSW5kZXgoKTtcbiAgICAgIH0pO1xuICAgIH1cbiAgICB2YXIgZmlyc3RFZGdlID0gcGFpckluZm8uZWxlc1swXTtcbiAgICB2YXIgc3JjID0gZmlyc3RFZGdlLnNvdXJjZSgpO1xuICAgIHZhciB0Z3QgPSBmaXJzdEVkZ2UudGFyZ2V0KCk7XG5cbiAgICAvLyBtYWtlIHN1cmUgc3JjL3RndCBkaXN0aW5jdGlvbiBpcyBjb25zaXN0ZW50IHcuci50LiBwYWlySWRcbiAgICBpZiAoc3JjLnBvb2xJbmRleCgpID4gdGd0LnBvb2xJbmRleCgpKSB7XG4gICAgICB2YXIgdGVtcCA9IHNyYztcbiAgICAgIHNyYyA9IHRndDtcbiAgICAgIHRndCA9IHRlbXA7XG4gICAgfVxuICAgIHZhciBzcmNQb3MgPSBwYWlySW5mby5zcmNQb3MgPSBzcmMucG9zaXRpb24oKTtcbiAgICB2YXIgdGd0UG9zID0gcGFpckluZm8udGd0UG9zID0gdGd0LnBvc2l0aW9uKCk7XG4gICAgdmFyIHNyY1cgPSBwYWlySW5mby5zcmNXID0gc3JjLm91dGVyV2lkdGgoKTtcbiAgICB2YXIgc3JjSCA9IHBhaXJJbmZvLnNyY0ggPSBzcmMub3V0ZXJIZWlnaHQoKTtcbiAgICB2YXIgdGd0VyA9IHBhaXJJbmZvLnRndFcgPSB0Z3Qub3V0ZXJXaWR0aCgpO1xuICAgIHZhciB0Z3RIID0gcGFpckluZm8udGd0SCA9IHRndC5vdXRlckhlaWdodCgpO1xuICAgIHZhciBzcmNTaGFwZSA9IHBhaXJJbmZvLnNyY1NoYXBlID0gci5ub2RlU2hhcGVzW190aGlzLmdldE5vZGVTaGFwZShzcmMpXTtcbiAgICB2YXIgdGd0U2hhcGUgPSBwYWlySW5mby50Z3RTaGFwZSA9IHIubm9kZVNoYXBlc1tfdGhpcy5nZXROb2RlU2hhcGUodGd0KV07XG4gICAgdmFyIHNyY0Nvcm5lclJhZGl1cyA9IHBhaXJJbmZvLnNyY0Nvcm5lclJhZGl1cyA9IHNyYy5wc3R5bGUoJ2Nvcm5lci1yYWRpdXMnKS52YWx1ZSA9PT0gJ2F1dG8nID8gJ2F1dG8nIDogc3JjLnBzdHlsZSgnY29ybmVyLXJhZGl1cycpLnBmVmFsdWU7XG4gICAgdmFyIHRndENvcm5lclJhZGl1cyA9IHBhaXJJbmZvLnRndENvcm5lclJhZGl1cyA9IHRndC5wc3R5bGUoJ2Nvcm5lci1yYWRpdXMnKS52YWx1ZSA9PT0gJ2F1dG8nID8gJ2F1dG8nIDogdGd0LnBzdHlsZSgnY29ybmVyLXJhZGl1cycpLnBmVmFsdWU7XG4gICAgdmFyIHRndFJzID0gcGFpckluZm8udGd0UnMgPSB0Z3QuX3ByaXZhdGUucnNjcmF0Y2g7XG4gICAgdmFyIHNyY1JzID0gcGFpckluZm8uc3JjUnMgPSBzcmMuX3ByaXZhdGUucnNjcmF0Y2g7XG4gICAgcGFpckluZm8uZGlyQ291bnRzID0ge1xuICAgICAgJ25vcnRoJzogMCxcbiAgICAgICd3ZXN0JzogMCxcbiAgICAgICdzb3V0aCc6IDAsXG4gICAgICAnZWFzdCc6IDAsXG4gICAgICAnbm9ydGh3ZXN0JzogMCxcbiAgICAgICdzb3V0aHdlc3QnOiAwLFxuICAgICAgJ25vcnRoZWFzdCc6IDAsXG4gICAgICAnc291dGhlYXN0JzogMFxuICAgIH07XG4gICAgZm9yICh2YXIgX2kyID0gMDsgX2kyIDwgcGFpckluZm8uZWxlcy5sZW5ndGg7IF9pMisrKSB7XG4gICAgICB2YXIgX2VkZ2UgPSBwYWlySW5mby5lbGVzW19pMl07XG4gICAgICB2YXIgcnMgPSBfZWRnZVswXS5fcHJpdmF0ZS5yc2NyYXRjaDtcbiAgICAgIHZhciBfY3VydmVTdHlsZSA9IF9lZGdlLnBzdHlsZSgnY3VydmUtc3R5bGUnKS52YWx1ZTtcbiAgICAgIHZhciBfZWRnZUlzVW5idW5kbGVkID0gX2N1cnZlU3R5bGUgPT09ICd1bmJ1bmRsZWQtYmV6aWVyJyB8fCBfY3VydmVTdHlsZS5lbmRzV2l0aCgnc2VnbWVudHMnKSB8fCBfY3VydmVTdHlsZS5lbmRzV2l0aCgndGF4aScpO1xuXG4gICAgICAvLyB3aGV0aGVyIHRoZSBub3JtYWxpc2VkIHBhaXIgb3JkZXIgaXMgdGhlIHJldmVyc2Ugb2YgdGhlIGVkZ2UncyBzcmMtdGd0IG9yZGVyXG4gICAgICB2YXIgZWRnZUlzU3dhcHBlZCA9ICFzcmMuc2FtZShfZWRnZS5zb3VyY2UoKSk7XG4gICAgICBpZiAoIXBhaXJJbmZvLmNhbGN1bGF0ZWRJbnRlcnNlY3Rpb24gJiYgc3JjICE9PSB0Z3QgJiYgKHBhaXJJbmZvLmhhc0JlemllciB8fCBwYWlySW5mby5oYXNVbmJ1bmRsZWQpKSB7XG4gICAgICAgIHBhaXJJbmZvLmNhbGN1bGF0ZWRJbnRlcnNlY3Rpb24gPSB0cnVlO1xuXG4gICAgICAgIC8vIHB0IG91dHNpZGUgc3JjIHNoYXBlIHRvIGNhbGMgZGlzdGFuY2UvZGlzcGxhY2VtZW50IGZyb20gc3JjIHRvIHRndFxuICAgICAgICB2YXIgc3JjT3V0c2lkZSA9IHNyY1NoYXBlLmludGVyc2VjdExpbmUoc3JjUG9zLngsIHNyY1Bvcy55LCBzcmNXLCBzcmNILCB0Z3RQb3MueCwgdGd0UG9zLnksIDAsIHNyY0Nvcm5lclJhZGl1cywgc3JjUnMpO1xuICAgICAgICB2YXIgc3JjSW50biA9IHBhaXJJbmZvLnNyY0ludG4gPSBzcmNPdXRzaWRlO1xuXG4gICAgICAgIC8vIHB0IG91dHNpZGUgdGd0IHNoYXBlIHRvIGNhbGMgZGlzdGFuY2UvZGlzcGxhY2VtZW50IGZyb20gc3JjIHRvIHRndFxuICAgICAgICB2YXIgdGd0T3V0c2lkZSA9IHRndFNoYXBlLmludGVyc2VjdExpbmUodGd0UG9zLngsIHRndFBvcy55LCB0Z3RXLCB0Z3RILCBzcmNQb3MueCwgc3JjUG9zLnksIDAsIHRndENvcm5lclJhZGl1cywgdGd0UnMpO1xuICAgICAgICB2YXIgdGd0SW50biA9IHBhaXJJbmZvLnRndEludG4gPSB0Z3RPdXRzaWRlO1xuICAgICAgICB2YXIgaW50ZXJzZWN0aW9uUHRzID0gcGFpckluZm8uaW50ZXJzZWN0aW9uUHRzID0ge1xuICAgICAgICAgIHgxOiBzcmNPdXRzaWRlWzBdLFxuICAgICAgICAgIHgyOiB0Z3RPdXRzaWRlWzBdLFxuICAgICAgICAgIHkxOiBzcmNPdXRzaWRlWzFdLFxuICAgICAgICAgIHkyOiB0Z3RPdXRzaWRlWzFdXG4gICAgICAgIH07XG4gICAgICAgIHZhciBwb3NQdHMgPSBwYWlySW5mby5wb3NQdHMgPSB7XG4gICAgICAgICAgeDE6IHNyY1Bvcy54LFxuICAgICAgICAgIHgyOiB0Z3RQb3MueCxcbiAgICAgICAgICB5MTogc3JjUG9zLnksXG4gICAgICAgICAgeTI6IHRndFBvcy55XG4gICAgICAgIH07XG4gICAgICAgIHZhciBkeSA9IHRndE91dHNpZGVbMV0gLSBzcmNPdXRzaWRlWzFdO1xuICAgICAgICB2YXIgZHggPSB0Z3RPdXRzaWRlWzBdIC0gc3JjT3V0c2lkZVswXTtcbiAgICAgICAgdmFyIGwgPSBNYXRoLnNxcnQoZHggKiBkeCArIGR5ICogZHkpO1xuICAgICAgICB2YXIgdmVjdG9yID0gcGFpckluZm8udmVjdG9yID0ge1xuICAgICAgICAgIHg6IGR4LFxuICAgICAgICAgIHk6IGR5XG4gICAgICAgIH07XG4gICAgICAgIHZhciB2ZWN0b3JOb3JtID0gcGFpckluZm8udmVjdG9yTm9ybSA9IHtcbiAgICAgICAgICB4OiB2ZWN0b3IueCAvIGwsXG4gICAgICAgICAgeTogdmVjdG9yLnkgLyBsXG4gICAgICAgIH07XG4gICAgICAgIHZhciB2ZWN0b3JOb3JtSW52ZXJzZSA9IHtcbiAgICAgICAgICB4OiAtdmVjdG9yTm9ybS55LFxuICAgICAgICAgIHk6IHZlY3Rvck5vcm0ueFxuICAgICAgICB9O1xuXG4gICAgICAgIC8vIGlmIG5vZGUgc2hhcGVzIG92ZXJsYXAsIHRoZW4gbm8gY3RybCBwdHMgdG8gZHJhd1xuICAgICAgICBwYWlySW5mby5ub2Rlc092ZXJsYXAgPSAhbnVtYmVyJDEobCkgfHwgdGd0U2hhcGUuY2hlY2tQb2ludChzcmNPdXRzaWRlWzBdLCBzcmNPdXRzaWRlWzFdLCAwLCB0Z3RXLCB0Z3RILCB0Z3RQb3MueCwgdGd0UG9zLnksIHRndENvcm5lclJhZGl1cywgdGd0UnMpIHx8IHNyY1NoYXBlLmNoZWNrUG9pbnQodGd0T3V0c2lkZVswXSwgdGd0T3V0c2lkZVsxXSwgMCwgc3JjVywgc3JjSCwgc3JjUG9zLngsIHNyY1Bvcy55LCBzcmNDb3JuZXJSYWRpdXMsIHNyY1JzKTtcbiAgICAgICAgcGFpckluZm8udmVjdG9yTm9ybUludmVyc2UgPSB2ZWN0b3JOb3JtSW52ZXJzZTtcbiAgICAgICAgc3dhcHBlZHBhaXJJbmZvID0ge1xuICAgICAgICAgIG5vZGVzT3ZlcmxhcDogcGFpckluZm8ubm9kZXNPdmVybGFwLFxuICAgICAgICAgIGRpckNvdW50czogcGFpckluZm8uZGlyQ291bnRzLFxuICAgICAgICAgIGNhbGN1bGF0ZWRJbnRlcnNlY3Rpb246IHRydWUsXG4gICAgICAgICAgaGFzQmV6aWVyOiBwYWlySW5mby5oYXNCZXppZXIsXG4gICAgICAgICAgaGFzVW5idW5kbGVkOiBwYWlySW5mby5oYXNVbmJ1bmRsZWQsXG4gICAgICAgICAgZWxlczogcGFpckluZm8uZWxlcyxcbiAgICAgICAgICBzcmNQb3M6IHRndFBvcyxcbiAgICAgICAgICBzcmNSczogdGd0UnMsXG4gICAgICAgICAgdGd0UG9zOiBzcmNQb3MsXG4gICAgICAgICAgdGd0UnM6IHNyY1JzLFxuICAgICAgICAgIHNyY1c6IHRndFcsXG4gICAgICAgICAgc3JjSDogdGd0SCxcbiAgICAgICAgICB0Z3RXOiBzcmNXLFxuICAgICAgICAgIHRndEg6IHNyY0gsXG4gICAgICAgICAgc3JjSW50bjogdGd0SW50bixcbiAgICAgICAgICB0Z3RJbnRuOiBzcmNJbnRuLFxuICAgICAgICAgIHNyY1NoYXBlOiB0Z3RTaGFwZSxcbiAgICAgICAgICB0Z3RTaGFwZTogc3JjU2hhcGUsXG4gICAgICAgICAgcG9zUHRzOiB7XG4gICAgICAgICAgICB4MTogcG9zUHRzLngyLFxuICAgICAgICAgICAgeTE6IHBvc1B0cy55MixcbiAgICAgICAgICAgIHgyOiBwb3NQdHMueDEsXG4gICAgICAgICAgICB5MjogcG9zUHRzLnkxXG4gICAgICAgICAgfSxcbiAgICAgICAgICBpbnRlcnNlY3Rpb25QdHM6IHtcbiAgICAgICAgICAgIHgxOiBpbnRlcnNlY3Rpb25QdHMueDIsXG4gICAgICAgICAgICB5MTogaW50ZXJzZWN0aW9uUHRzLnkyLFxuICAgICAgICAgICAgeDI6IGludGVyc2VjdGlvblB0cy54MSxcbiAgICAgICAgICAgIHkyOiBpbnRlcnNlY3Rpb25QdHMueTFcbiAgICAgICAgICB9LFxuICAgICAgICAgIHZlY3Rvcjoge1xuICAgICAgICAgICAgeDogLXZlY3Rvci54LFxuICAgICAgICAgICAgeTogLXZlY3Rvci55XG4gICAgICAgICAgfSxcbiAgICAgICAgICB2ZWN0b3JOb3JtOiB7XG4gICAgICAgICAgICB4OiAtdmVjdG9yTm9ybS54LFxuICAgICAgICAgICAgeTogLXZlY3Rvck5vcm0ueVxuICAgICAgICAgIH0sXG4gICAgICAgICAgdmVjdG9yTm9ybUludmVyc2U6IHtcbiAgICAgICAgICAgIHg6IC12ZWN0b3JOb3JtSW52ZXJzZS54LFxuICAgICAgICAgICAgeTogLXZlY3Rvck5vcm1JbnZlcnNlLnlcbiAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgICB9XG4gICAgICB2YXIgcGFzc2VkUGFpckluZm8gPSBlZGdlSXNTd2FwcGVkID8gc3dhcHBlZHBhaXJJbmZvIDogcGFpckluZm87XG4gICAgICBycy5ub2Rlc092ZXJsYXAgPSBwYXNzZWRQYWlySW5mby5ub2Rlc092ZXJsYXA7XG4gICAgICBycy5zcmNJbnRuID0gcGFzc2VkUGFpckluZm8uc3JjSW50bjtcbiAgICAgIHJzLnRndEludG4gPSBwYXNzZWRQYWlySW5mby50Z3RJbnRuO1xuICAgICAgcnMuaXNSb3VuZCA9IF9jdXJ2ZVN0eWxlLnN0YXJ0c1dpdGgoJ3JvdW5kJyk7XG4gICAgICBpZiAoaGFzQ29tcG91bmRzICYmIChzcmMuaXNQYXJlbnQoKSB8fCBzcmMuaXNDaGlsZCgpIHx8IHRndC5pc1BhcmVudCgpIHx8IHRndC5pc0NoaWxkKCkpICYmIChzcmMucGFyZW50cygpLmFueVNhbWUodGd0KSB8fCB0Z3QucGFyZW50cygpLmFueVNhbWUoc3JjKSB8fCBzcmMuc2FtZSh0Z3QpICYmIHNyYy5pc1BhcmVudCgpKSkge1xuICAgICAgICBfdGhpcy5maW5kQ29tcG91bmRMb29wUG9pbnRzKF9lZGdlLCBwYXNzZWRQYWlySW5mbywgX2kyLCBfZWRnZUlzVW5idW5kbGVkKTtcbiAgICAgIH0gZWxzZSBpZiAoc3JjID09PSB0Z3QpIHtcbiAgICAgICAgX3RoaXMuZmluZExvb3BQb2ludHMoX2VkZ2UsIHBhc3NlZFBhaXJJbmZvLCBfaTIsIF9lZGdlSXNVbmJ1bmRsZWQpO1xuICAgICAgfSBlbHNlIGlmIChfY3VydmVTdHlsZS5lbmRzV2l0aCgnc2VnbWVudHMnKSkge1xuICAgICAgICBfdGhpcy5maW5kU2VnbWVudHNQb2ludHMoX2VkZ2UsIHBhc3NlZFBhaXJJbmZvKTtcbiAgICAgIH0gZWxzZSBpZiAoX2N1cnZlU3R5bGUuZW5kc1dpdGgoJ3RheGknKSkge1xuICAgICAgICBfdGhpcy5maW5kVGF4aVBvaW50cyhfZWRnZSwgcGFzc2VkUGFpckluZm8pO1xuICAgICAgfSBlbHNlIGlmIChfY3VydmVTdHlsZSA9PT0gJ3N0cmFpZ2h0JyB8fCAhX2VkZ2VJc1VuYnVuZGxlZCAmJiBwYWlySW5mby5lbGVzLmxlbmd0aCAlIDIgPT09IDEgJiYgX2kyID09PSBNYXRoLmZsb29yKHBhaXJJbmZvLmVsZXMubGVuZ3RoIC8gMikpIHtcbiAgICAgICAgX3RoaXMuZmluZFN0cmFpZ2h0RWRnZVBvaW50cyhfZWRnZSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBfdGhpcy5maW5kQmV6aWVyUG9pbnRzKF9lZGdlLCBwYXNzZWRQYWlySW5mbywgX2kyLCBfZWRnZUlzVW5idW5kbGVkLCBlZGdlSXNTd2FwcGVkKTtcbiAgICAgIH1cbiAgICAgIF90aGlzLmZpbmRFbmRwb2ludHMoX2VkZ2UpO1xuICAgICAgX3RoaXMudHJ5VG9Db3JyZWN0SW52YWxpZFBvaW50cyhfZWRnZSwgcGFzc2VkUGFpckluZm8pO1xuICAgICAgX3RoaXMuY2hlY2tGb3JJbnZhbGlkRWRnZVdhcm5pbmcoX2VkZ2UpO1xuICAgICAgX3RoaXMuc3RvcmVBbGxwdHMoX2VkZ2UpO1xuICAgICAgX3RoaXMuc3RvcmVFZGdlUHJvamVjdGlvbnMoX2VkZ2UpO1xuICAgICAgX3RoaXMuY2FsY3VsYXRlQXJyb3dBbmdsZXMoX2VkZ2UpO1xuICAgICAgX3RoaXMucmVjYWxjdWxhdGVFZGdlTGFiZWxQcm9qZWN0aW9ucyhfZWRnZSk7XG4gICAgICBfdGhpcy5jYWxjdWxhdGVMYWJlbEFuZ2xlcyhfZWRnZSk7XG4gICAgfSAvLyBmb3IgcGFpciBlZGdlc1xuICB9O1xuICBmb3IgKHZhciBwID0gMDsgcCA8IHBhaXJJZHMubGVuZ3RoOyBwKyspIHtcbiAgICBfbG9vcCgpO1xuICB9IC8vIGZvciBwYWlyIGlkc1xuXG4gIC8vIGhheXN0YWNrcyBhdm9pZCB0aGUgZXhwZW5zZSBvZiBwYWlySW5mbyBzdHVmZiAoaW50ZXJzZWN0aW9ucyBldGMuKVxuICB0aGlzLmZpbmRIYXlzdGFja1BvaW50cyhoYXlzdGFja0VkZ2VzKTtcbn07XG5mdW5jdGlvbiBnZXRQdHMocHRzKSB7XG4gIHZhciByZXRQdHMgPSBbXTtcbiAgaWYgKHB0cyA9PSBudWxsKSB7XG4gICAgcmV0dXJuO1xuICB9XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgcHRzLmxlbmd0aDsgaSArPSAyKSB7XG4gICAgdmFyIHggPSBwdHNbaV07XG4gICAgdmFyIHkgPSBwdHNbaSArIDFdO1xuICAgIHJldFB0cy5wdXNoKHtcbiAgICAgIHg6IHgsXG4gICAgICB5OiB5XG4gICAgfSk7XG4gIH1cbiAgcmV0dXJuIHJldFB0cztcbn1cbkJScCRjLmdldFNlZ21lbnRQb2ludHMgPSBmdW5jdGlvbiAoZWRnZSkge1xuICB2YXIgcnMgPSBlZGdlWzBdLl9wcml2YXRlLnJzY3JhdGNoO1xuICB0aGlzLnJlY2FsY3VsYXRlUmVuZGVyZWRTdHlsZShlZGdlKTtcbiAgdmFyIHR5cGUgPSBycy5lZGdlVHlwZTtcbiAgaWYgKHR5cGUgPT09ICdzZWdtZW50cycpIHtcbiAgICByZXR1cm4gZ2V0UHRzKHJzLnNlZ3B0cyk7XG4gIH1cbn07XG5CUnAkYy5nZXRDb250cm9sUG9pbnRzID0gZnVuY3Rpb24gKGVkZ2UpIHtcbiAgdmFyIHJzID0gZWRnZVswXS5fcHJpdmF0ZS5yc2NyYXRjaDtcbiAgdGhpcy5yZWNhbGN1bGF0ZVJlbmRlcmVkU3R5bGUoZWRnZSk7XG4gIHZhciB0eXBlID0gcnMuZWRnZVR5cGU7XG4gIGlmICh0eXBlID09PSAnYmV6aWVyJyB8fCB0eXBlID09PSAnbXVsdGliZXppZXInIHx8IHR5cGUgPT09ICdzZWxmJyB8fCB0eXBlID09PSAnY29tcG91bmQnKSB7XG4gICAgcmV0dXJuIGdldFB0cyhycy5jdHJscHRzKTtcbiAgfVxufTtcbkJScCRjLmdldEVkZ2VNaWRwb2ludCA9IGZ1bmN0aW9uIChlZGdlKSB7XG4gIHZhciBycyA9IGVkZ2VbMF0uX3ByaXZhdGUucnNjcmF0Y2g7XG4gIHRoaXMucmVjYWxjdWxhdGVSZW5kZXJlZFN0eWxlKGVkZ2UpO1xuICByZXR1cm4ge1xuICAgIHg6IHJzLm1pZFgsXG4gICAgeTogcnMubWlkWVxuICB9O1xufTtcblxudmFyIEJScCRiID0ge307XG5CUnAkYi5tYW51YWxFbmRwdFRvUHggPSBmdW5jdGlvbiAobm9kZSwgcHJvcCkge1xuICB2YXIgciA9IHRoaXM7XG4gIHZhciBucG9zID0gbm9kZS5wb3NpdGlvbigpO1xuICB2YXIgdyA9IG5vZGUub3V0ZXJXaWR0aCgpO1xuICB2YXIgaCA9IG5vZGUub3V0ZXJIZWlnaHQoKTtcbiAgdmFyIHJzID0gbm9kZS5fcHJpdmF0ZS5yc2NyYXRjaDtcbiAgaWYgKHByb3AudmFsdWUubGVuZ3RoID09PSAyKSB7XG4gICAgdmFyIHAgPSBbcHJvcC5wZlZhbHVlWzBdLCBwcm9wLnBmVmFsdWVbMV1dO1xuICAgIGlmIChwcm9wLnVuaXRzWzBdID09PSAnJScpIHtcbiAgICAgIHBbMF0gPSBwWzBdICogdztcbiAgICB9XG4gICAgaWYgKHByb3AudW5pdHNbMV0gPT09ICclJykge1xuICAgICAgcFsxXSA9IHBbMV0gKiBoO1xuICAgIH1cbiAgICBwWzBdICs9IG5wb3MueDtcbiAgICBwWzFdICs9IG5wb3MueTtcbiAgICByZXR1cm4gcDtcbiAgfSBlbHNlIHtcbiAgICB2YXIgYW5nbGUgPSBwcm9wLnBmVmFsdWVbMF07XG4gICAgYW5nbGUgPSAtTWF0aC5QSSAvIDIgKyBhbmdsZTsgLy8gc3RhcnQgYXQgMTIgbydjbG9ja1xuXG4gICAgdmFyIGwgPSAyICogTWF0aC5tYXgodywgaCk7XG4gICAgdmFyIF9wID0gW25wb3MueCArIE1hdGguY29zKGFuZ2xlKSAqIGwsIG5wb3MueSArIE1hdGguc2luKGFuZ2xlKSAqIGxdO1xuICAgIHJldHVybiByLm5vZGVTaGFwZXNbdGhpcy5nZXROb2RlU2hhcGUobm9kZSldLmludGVyc2VjdExpbmUobnBvcy54LCBucG9zLnksIHcsIGgsIF9wWzBdLCBfcFsxXSwgMCwgbm9kZS5wc3R5bGUoJ2Nvcm5lci1yYWRpdXMnKS52YWx1ZSA9PT0gJ2F1dG8nID8gJ2F1dG8nIDogbm9kZS5wc3R5bGUoJ2Nvcm5lci1yYWRpdXMnKS5wZlZhbHVlLCBycyk7XG4gIH1cbn07XG5CUnAkYi5maW5kRW5kcG9pbnRzID0gZnVuY3Rpb24gKGVkZ2UpIHtcbiAgdmFyIHIgPSB0aGlzO1xuICB2YXIgaW50ZXJzZWN0O1xuICB2YXIgc291cmNlID0gZWRnZS5zb3VyY2UoKVswXTtcbiAgdmFyIHRhcmdldCA9IGVkZ2UudGFyZ2V0KClbMF07XG4gIHZhciBzcmNQb3MgPSBzb3VyY2UucG9zaXRpb24oKTtcbiAgdmFyIHRndFBvcyA9IHRhcmdldC5wb3NpdGlvbigpO1xuICB2YXIgdGd0QXJTaGFwZSA9IGVkZ2UucHN0eWxlKCd0YXJnZXQtYXJyb3ctc2hhcGUnKS52YWx1ZTtcbiAgdmFyIHNyY0FyU2hhcGUgPSBlZGdlLnBzdHlsZSgnc291cmNlLWFycm93LXNoYXBlJykudmFsdWU7XG4gIHZhciB0Z3REaXN0ID0gZWRnZS5wc3R5bGUoJ3RhcmdldC1kaXN0YW5jZS1mcm9tLW5vZGUnKS5wZlZhbHVlO1xuICB2YXIgc3JjRGlzdCA9IGVkZ2UucHN0eWxlKCdzb3VyY2UtZGlzdGFuY2UtZnJvbS1ub2RlJykucGZWYWx1ZTtcbiAgdmFyIHNyY1JzID0gc291cmNlLl9wcml2YXRlLnJzY3JhdGNoO1xuICB2YXIgdGd0UnMgPSB0YXJnZXQuX3ByaXZhdGUucnNjcmF0Y2g7XG4gIHZhciBjdXJ2ZVN0eWxlID0gZWRnZS5wc3R5bGUoJ2N1cnZlLXN0eWxlJykudmFsdWU7XG4gIHZhciBycyA9IGVkZ2UuX3ByaXZhdGUucnNjcmF0Y2g7XG4gIHZhciBldCA9IHJzLmVkZ2VUeXBlO1xuICB2YXIgdGF4aSA9IGN1cnZlU3R5bGUgPT09ICd0YXhpJztcbiAgdmFyIHNlbGYgPSBldCA9PT0gJ3NlbGYnIHx8IGV0ID09PSAnY29tcG91bmQnO1xuICB2YXIgYmV6aWVyID0gZXQgPT09ICdiZXppZXInIHx8IGV0ID09PSAnbXVsdGliZXppZXInIHx8IHNlbGY7XG4gIHZhciBtdWx0aSA9IGV0ICE9PSAnYmV6aWVyJztcbiAgdmFyIGxpbmVzID0gZXQgPT09ICdzdHJhaWdodCcgfHwgZXQgPT09ICdzZWdtZW50cyc7XG4gIHZhciBzZWdtZW50cyA9IGV0ID09PSAnc2VnbWVudHMnO1xuICB2YXIgaGFzRW5kcHRzID0gYmV6aWVyIHx8IG11bHRpIHx8IGxpbmVzO1xuICB2YXIgb3ZlcnJpZGVFbmRwdHMgPSBzZWxmIHx8IHRheGk7XG4gIHZhciBzcmNNYW5FbmRwdCA9IGVkZ2UucHN0eWxlKCdzb3VyY2UtZW5kcG9pbnQnKTtcbiAgdmFyIHNyY01hbkVuZHB0VmFsID0gb3ZlcnJpZGVFbmRwdHMgPyAnb3V0c2lkZS10by1ub2RlJyA6IHNyY01hbkVuZHB0LnZhbHVlO1xuICB2YXIgc3JjQ29ybmVyUmFkaXVzID0gc291cmNlLnBzdHlsZSgnY29ybmVyLXJhZGl1cycpLnZhbHVlID09PSAnYXV0bycgPyAnYXV0bycgOiBzb3VyY2UucHN0eWxlKCdjb3JuZXItcmFkaXVzJykucGZWYWx1ZTtcbiAgdmFyIHRndE1hbkVuZHB0ID0gZWRnZS5wc3R5bGUoJ3RhcmdldC1lbmRwb2ludCcpO1xuICB2YXIgdGd0TWFuRW5kcHRWYWwgPSBvdmVycmlkZUVuZHB0cyA/ICdvdXRzaWRlLXRvLW5vZGUnIDogdGd0TWFuRW5kcHQudmFsdWU7XG4gIHZhciB0Z3RDb3JuZXJSYWRpdXMgPSB0YXJnZXQucHN0eWxlKCdjb3JuZXItcmFkaXVzJykudmFsdWUgPT09ICdhdXRvJyA/ICdhdXRvJyA6IHRhcmdldC5wc3R5bGUoJ2Nvcm5lci1yYWRpdXMnKS5wZlZhbHVlO1xuICBycy5zcmNNYW5FbmRwdCA9IHNyY01hbkVuZHB0O1xuICBycy50Z3RNYW5FbmRwdCA9IHRndE1hbkVuZHB0O1xuICB2YXIgcDE7IC8vIGxhc3Qga25vd24gcG9pbnQgb2YgZWRnZSBvbiB0YXJnZXQgc2lkZVxuICB2YXIgcDI7IC8vIGxhc3Qga25vd24gcG9pbnQgb2YgZWRnZSBvbiBzb3VyY2Ugc2lkZVxuXG4gIHZhciBwMV9pOyAvLyBwb2ludCB0byBpbnRlcnNlY3Qgd2l0aCB0YXJnZXQgc2hhcGVcbiAgdmFyIHAyX2k7IC8vIHBvaW50IHRvIGludGVyc2VjdCB3aXRoIHNvdXJjZSBzaGFwZVxuXG4gIGlmIChiZXppZXIpIHtcbiAgICB2YXIgY3BTdGFydCA9IFtycy5jdHJscHRzWzBdLCBycy5jdHJscHRzWzFdXTtcbiAgICB2YXIgY3BFbmQgPSBtdWx0aSA/IFtycy5jdHJscHRzW3JzLmN0cmxwdHMubGVuZ3RoIC0gMl0sIHJzLmN0cmxwdHNbcnMuY3RybHB0cy5sZW5ndGggLSAxXV0gOiBjcFN0YXJ0O1xuICAgIHAxID0gY3BFbmQ7XG4gICAgcDIgPSBjcFN0YXJ0O1xuICB9IGVsc2UgaWYgKGxpbmVzKSB7XG4gICAgdmFyIHNyY0Fycm93RnJvbVB0ID0gIXNlZ21lbnRzID8gW3RndFBvcy54LCB0Z3RQb3MueV0gOiBycy5zZWdwdHMuc2xpY2UoMCwgMik7XG4gICAgdmFyIHRndEFycm93RnJvbVB0ID0gIXNlZ21lbnRzID8gW3NyY1Bvcy54LCBzcmNQb3MueV0gOiBycy5zZWdwdHMuc2xpY2UocnMuc2VncHRzLmxlbmd0aCAtIDIpO1xuICAgIHAxID0gdGd0QXJyb3dGcm9tUHQ7XG4gICAgcDIgPSBzcmNBcnJvd0Zyb21QdDtcbiAgfVxuICBpZiAodGd0TWFuRW5kcHRWYWwgPT09ICdpbnNpZGUtdG8tbm9kZScpIHtcbiAgICBpbnRlcnNlY3QgPSBbdGd0UG9zLngsIHRndFBvcy55XTtcbiAgfSBlbHNlIGlmICh0Z3RNYW5FbmRwdC51bml0cykge1xuICAgIGludGVyc2VjdCA9IHRoaXMubWFudWFsRW5kcHRUb1B4KHRhcmdldCwgdGd0TWFuRW5kcHQpO1xuICB9IGVsc2UgaWYgKHRndE1hbkVuZHB0VmFsID09PSAnb3V0c2lkZS10by1saW5lJykge1xuICAgIGludGVyc2VjdCA9IHJzLnRndEludG47IC8vIHVzZSBjYWNoZWQgdmFsdWUgZnJvbSBjdHJscHQgY2FsY1xuICB9IGVsc2Uge1xuICAgIGlmICh0Z3RNYW5FbmRwdFZhbCA9PT0gJ291dHNpZGUtdG8tbm9kZScgfHwgdGd0TWFuRW5kcHRWYWwgPT09ICdvdXRzaWRlLXRvLW5vZGUtb3ItbGFiZWwnKSB7XG4gICAgICBwMV9pID0gcDE7XG4gICAgfSBlbHNlIGlmICh0Z3RNYW5FbmRwdFZhbCA9PT0gJ291dHNpZGUtdG8tbGluZScgfHwgdGd0TWFuRW5kcHRWYWwgPT09ICdvdXRzaWRlLXRvLWxpbmUtb3ItbGFiZWwnKSB7XG4gICAgICBwMV9pID0gW3NyY1Bvcy54LCBzcmNQb3MueV07XG4gICAgfVxuICAgIGludGVyc2VjdCA9IHIubm9kZVNoYXBlc1t0aGlzLmdldE5vZGVTaGFwZSh0YXJnZXQpXS5pbnRlcnNlY3RMaW5lKHRndFBvcy54LCB0Z3RQb3MueSwgdGFyZ2V0Lm91dGVyV2lkdGgoKSwgdGFyZ2V0Lm91dGVySGVpZ2h0KCksIHAxX2lbMF0sIHAxX2lbMV0sIDAsIHRndENvcm5lclJhZGl1cywgdGd0UnMpO1xuICAgIGlmICh0Z3RNYW5FbmRwdFZhbCA9PT0gJ291dHNpZGUtdG8tbm9kZS1vci1sYWJlbCcgfHwgdGd0TWFuRW5kcHRWYWwgPT09ICdvdXRzaWRlLXRvLWxpbmUtb3ItbGFiZWwnKSB7XG4gICAgICB2YXIgdHJzID0gdGFyZ2V0Ll9wcml2YXRlLnJzY3JhdGNoO1xuICAgICAgdmFyIGx3ID0gdHJzLmxhYmVsV2lkdGg7XG4gICAgICB2YXIgbGggPSB0cnMubGFiZWxIZWlnaHQ7XG4gICAgICB2YXIgbHggPSB0cnMubGFiZWxYO1xuICAgICAgdmFyIGx5ID0gdHJzLmxhYmVsWTtcbiAgICAgIHZhciBsdzIgPSBsdyAvIDI7XG4gICAgICB2YXIgbGgyID0gbGggLyAyO1xuICAgICAgdmFyIHZhID0gdGFyZ2V0LnBzdHlsZSgndGV4dC12YWxpZ24nKS52YWx1ZTtcbiAgICAgIGlmICh2YSA9PT0gJ3RvcCcpIHtcbiAgICAgICAgbHkgLT0gbGgyO1xuICAgICAgfSBlbHNlIGlmICh2YSA9PT0gJ2JvdHRvbScpIHtcbiAgICAgICAgbHkgKz0gbGgyO1xuICAgICAgfVxuICAgICAgdmFyIGhhID0gdGFyZ2V0LnBzdHlsZSgndGV4dC1oYWxpZ24nKS52YWx1ZTtcbiAgICAgIGlmIChoYSA9PT0gJ2xlZnQnKSB7XG4gICAgICAgIGx4IC09IGx3MjtcbiAgICAgIH0gZWxzZSBpZiAoaGEgPT09ICdyaWdodCcpIHtcbiAgICAgICAgbHggKz0gbHcyO1xuICAgICAgfVxuICAgICAgdmFyIGxhYmVsSW50ZXJzZWN0ID0gcG9seWdvbkludGVyc2VjdExpbmUocDFfaVswXSwgcDFfaVsxXSwgW2x4IC0gbHcyLCBseSAtIGxoMiwgbHggKyBsdzIsIGx5IC0gbGgyLCBseCArIGx3MiwgbHkgKyBsaDIsIGx4IC0gbHcyLCBseSArIGxoMl0sIHRndFBvcy54LCB0Z3RQb3MueSk7XG4gICAgICBpZiAobGFiZWxJbnRlcnNlY3QubGVuZ3RoID4gMCkge1xuICAgICAgICB2YXIgcmVmUHQgPSBzcmNQb3M7XG4gICAgICAgIHZhciBpbnRTcWRpc3QgPSBzcWRpc3QocmVmUHQsIGFycmF5MnBvaW50KGludGVyc2VjdCkpO1xuICAgICAgICB2YXIgbGFiSW50U3FkaXN0ID0gc3FkaXN0KHJlZlB0LCBhcnJheTJwb2ludChsYWJlbEludGVyc2VjdCkpO1xuICAgICAgICB2YXIgbWluU3FEaXN0ID0gaW50U3FkaXN0O1xuICAgICAgICBpZiAobGFiSW50U3FkaXN0IDwgaW50U3FkaXN0KSB7XG4gICAgICAgICAgaW50ZXJzZWN0ID0gbGFiZWxJbnRlcnNlY3Q7XG4gICAgICAgICAgbWluU3FEaXN0ID0gbGFiSW50U3FkaXN0O1xuICAgICAgICB9XG4gICAgICAgIGlmIChsYWJlbEludGVyc2VjdC5sZW5ndGggPiAyKSB7XG4gICAgICAgICAgdmFyIGxhYkludDJTcURpc3QgPSBzcWRpc3QocmVmUHQsIHtcbiAgICAgICAgICAgIHg6IGxhYmVsSW50ZXJzZWN0WzJdLFxuICAgICAgICAgICAgeTogbGFiZWxJbnRlcnNlY3RbM11cbiAgICAgICAgICB9KTtcbiAgICAgICAgICBpZiAobGFiSW50MlNxRGlzdCA8IG1pblNxRGlzdCkge1xuICAgICAgICAgICAgaW50ZXJzZWN0ID0gW2xhYmVsSW50ZXJzZWN0WzJdLCBsYWJlbEludGVyc2VjdFszXV07XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG4gIHZhciBhcnJvd0VuZCA9IHNob3J0ZW5JbnRlcnNlY3Rpb24oaW50ZXJzZWN0LCBwMSwgci5hcnJvd1NoYXBlc1t0Z3RBclNoYXBlXS5zcGFjaW5nKGVkZ2UpICsgdGd0RGlzdCk7XG4gIHZhciBlZGdlRW5kID0gc2hvcnRlbkludGVyc2VjdGlvbihpbnRlcnNlY3QsIHAxLCByLmFycm93U2hhcGVzW3RndEFyU2hhcGVdLmdhcChlZGdlKSArIHRndERpc3QpO1xuICBycy5lbmRYID0gZWRnZUVuZFswXTtcbiAgcnMuZW5kWSA9IGVkZ2VFbmRbMV07XG4gIHJzLmFycm93RW5kWCA9IGFycm93RW5kWzBdO1xuICBycy5hcnJvd0VuZFkgPSBhcnJvd0VuZFsxXTtcbiAgaWYgKHNyY01hbkVuZHB0VmFsID09PSAnaW5zaWRlLXRvLW5vZGUnKSB7XG4gICAgaW50ZXJzZWN0ID0gW3NyY1Bvcy54LCBzcmNQb3MueV07XG4gIH0gZWxzZSBpZiAoc3JjTWFuRW5kcHQudW5pdHMpIHtcbiAgICBpbnRlcnNlY3QgPSB0aGlzLm1hbnVhbEVuZHB0VG9QeChzb3VyY2UsIHNyY01hbkVuZHB0KTtcbiAgfSBlbHNlIGlmIChzcmNNYW5FbmRwdFZhbCA9PT0gJ291dHNpZGUtdG8tbGluZScpIHtcbiAgICBpbnRlcnNlY3QgPSBycy5zcmNJbnRuOyAvLyB1c2UgY2FjaGVkIHZhbHVlIGZyb20gY3RybHB0IGNhbGNcbiAgfSBlbHNlIHtcbiAgICBpZiAoc3JjTWFuRW5kcHRWYWwgPT09ICdvdXRzaWRlLXRvLW5vZGUnIHx8IHNyY01hbkVuZHB0VmFsID09PSAnb3V0c2lkZS10by1ub2RlLW9yLWxhYmVsJykge1xuICAgICAgcDJfaSA9IHAyO1xuICAgIH0gZWxzZSBpZiAoc3JjTWFuRW5kcHRWYWwgPT09ICdvdXRzaWRlLXRvLWxpbmUnIHx8IHNyY01hbkVuZHB0VmFsID09PSAnb3V0c2lkZS10by1saW5lLW9yLWxhYmVsJykge1xuICAgICAgcDJfaSA9IFt0Z3RQb3MueCwgdGd0UG9zLnldO1xuICAgIH1cbiAgICBpbnRlcnNlY3QgPSByLm5vZGVTaGFwZXNbdGhpcy5nZXROb2RlU2hhcGUoc291cmNlKV0uaW50ZXJzZWN0TGluZShzcmNQb3MueCwgc3JjUG9zLnksIHNvdXJjZS5vdXRlcldpZHRoKCksIHNvdXJjZS5vdXRlckhlaWdodCgpLCBwMl9pWzBdLCBwMl9pWzFdLCAwLCBzcmNDb3JuZXJSYWRpdXMsIHNyY1JzKTtcbiAgICBpZiAoc3JjTWFuRW5kcHRWYWwgPT09ICdvdXRzaWRlLXRvLW5vZGUtb3ItbGFiZWwnIHx8IHNyY01hbkVuZHB0VmFsID09PSAnb3V0c2lkZS10by1saW5lLW9yLWxhYmVsJykge1xuICAgICAgdmFyIHNycyA9IHNvdXJjZS5fcHJpdmF0ZS5yc2NyYXRjaDtcbiAgICAgIHZhciBfbHcgPSBzcnMubGFiZWxXaWR0aDtcbiAgICAgIHZhciBfbGggPSBzcnMubGFiZWxIZWlnaHQ7XG4gICAgICB2YXIgX2x4ID0gc3JzLmxhYmVsWDtcbiAgICAgIHZhciBfbHkgPSBzcnMubGFiZWxZO1xuICAgICAgdmFyIF9sdzIgPSBfbHcgLyAyO1xuICAgICAgdmFyIF9saDIgPSBfbGggLyAyO1xuICAgICAgdmFyIF92YSA9IHNvdXJjZS5wc3R5bGUoJ3RleHQtdmFsaWduJykudmFsdWU7XG4gICAgICBpZiAoX3ZhID09PSAndG9wJykge1xuICAgICAgICBfbHkgLT0gX2xoMjtcbiAgICAgIH0gZWxzZSBpZiAoX3ZhID09PSAnYm90dG9tJykge1xuICAgICAgICBfbHkgKz0gX2xoMjtcbiAgICAgIH1cbiAgICAgIHZhciBfaGEgPSBzb3VyY2UucHN0eWxlKCd0ZXh0LWhhbGlnbicpLnZhbHVlO1xuICAgICAgaWYgKF9oYSA9PT0gJ2xlZnQnKSB7XG4gICAgICAgIF9seCAtPSBfbHcyO1xuICAgICAgfSBlbHNlIGlmIChfaGEgPT09ICdyaWdodCcpIHtcbiAgICAgICAgX2x4ICs9IF9sdzI7XG4gICAgICB9XG4gICAgICB2YXIgX2xhYmVsSW50ZXJzZWN0ID0gcG9seWdvbkludGVyc2VjdExpbmUocDJfaVswXSwgcDJfaVsxXSwgW19seCAtIF9sdzIsIF9seSAtIF9saDIsIF9seCArIF9sdzIsIF9seSAtIF9saDIsIF9seCArIF9sdzIsIF9seSArIF9saDIsIF9seCAtIF9sdzIsIF9seSArIF9saDJdLCBzcmNQb3MueCwgc3JjUG9zLnkpO1xuICAgICAgaWYgKF9sYWJlbEludGVyc2VjdC5sZW5ndGggPiAwKSB7XG4gICAgICAgIHZhciBfcmVmUHQgPSB0Z3RQb3M7XG4gICAgICAgIHZhciBfaW50U3FkaXN0ID0gc3FkaXN0KF9yZWZQdCwgYXJyYXkycG9pbnQoaW50ZXJzZWN0KSk7XG4gICAgICAgIHZhciBfbGFiSW50U3FkaXN0ID0gc3FkaXN0KF9yZWZQdCwgYXJyYXkycG9pbnQoX2xhYmVsSW50ZXJzZWN0KSk7XG4gICAgICAgIHZhciBfbWluU3FEaXN0ID0gX2ludFNxZGlzdDtcbiAgICAgICAgaWYgKF9sYWJJbnRTcWRpc3QgPCBfaW50U3FkaXN0KSB7XG4gICAgICAgICAgaW50ZXJzZWN0ID0gW19sYWJlbEludGVyc2VjdFswXSwgX2xhYmVsSW50ZXJzZWN0WzFdXTtcbiAgICAgICAgICBfbWluU3FEaXN0ID0gX2xhYkludFNxZGlzdDtcbiAgICAgICAgfVxuICAgICAgICBpZiAoX2xhYmVsSW50ZXJzZWN0Lmxlbmd0aCA+IDIpIHtcbiAgICAgICAgICB2YXIgX2xhYkludDJTcURpc3QgPSBzcWRpc3QoX3JlZlB0LCB7XG4gICAgICAgICAgICB4OiBfbGFiZWxJbnRlcnNlY3RbMl0sXG4gICAgICAgICAgICB5OiBfbGFiZWxJbnRlcnNlY3RbM11cbiAgICAgICAgICB9KTtcbiAgICAgICAgICBpZiAoX2xhYkludDJTcURpc3QgPCBfbWluU3FEaXN0KSB7XG4gICAgICAgICAgICBpbnRlcnNlY3QgPSBbX2xhYmVsSW50ZXJzZWN0WzJdLCBfbGFiZWxJbnRlcnNlY3RbM11dO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuICB2YXIgYXJyb3dTdGFydCA9IHNob3J0ZW5JbnRlcnNlY3Rpb24oaW50ZXJzZWN0LCBwMiwgci5hcnJvd1NoYXBlc1tzcmNBclNoYXBlXS5zcGFjaW5nKGVkZ2UpICsgc3JjRGlzdCk7XG4gIHZhciBlZGdlU3RhcnQgPSBzaG9ydGVuSW50ZXJzZWN0aW9uKGludGVyc2VjdCwgcDIsIHIuYXJyb3dTaGFwZXNbc3JjQXJTaGFwZV0uZ2FwKGVkZ2UpICsgc3JjRGlzdCk7XG4gIHJzLnN0YXJ0WCA9IGVkZ2VTdGFydFswXTtcbiAgcnMuc3RhcnRZID0gZWRnZVN0YXJ0WzFdO1xuICBycy5hcnJvd1N0YXJ0WCA9IGFycm93U3RhcnRbMF07XG4gIHJzLmFycm93U3RhcnRZID0gYXJyb3dTdGFydFsxXTtcbiAgaWYgKGhhc0VuZHB0cykge1xuICAgIGlmICghbnVtYmVyJDEocnMuc3RhcnRYKSB8fCAhbnVtYmVyJDEocnMuc3RhcnRZKSB8fCAhbnVtYmVyJDEocnMuZW5kWCkgfHwgIW51bWJlciQxKHJzLmVuZFkpKSB7XG4gICAgICBycy5iYWRMaW5lID0gdHJ1ZTtcbiAgICB9IGVsc2Uge1xuICAgICAgcnMuYmFkTGluZSA9IGZhbHNlO1xuICAgIH1cbiAgfVxufTtcbkJScCRiLmdldFNvdXJjZUVuZHBvaW50ID0gZnVuY3Rpb24gKGVkZ2UpIHtcbiAgdmFyIHJzID0gZWRnZVswXS5fcHJpdmF0ZS5yc2NyYXRjaDtcbiAgdGhpcy5yZWNhbGN1bGF0ZVJlbmRlcmVkU3R5bGUoZWRnZSk7XG4gIHN3aXRjaCAocnMuZWRnZVR5cGUpIHtcbiAgICBjYXNlICdoYXlzdGFjayc6XG4gICAgICByZXR1cm4ge1xuICAgICAgICB4OiBycy5oYXlzdGFja1B0c1swXSxcbiAgICAgICAgeTogcnMuaGF5c3RhY2tQdHNbMV1cbiAgICAgIH07XG4gICAgZGVmYXVsdDpcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHg6IHJzLmFycm93U3RhcnRYLFxuICAgICAgICB5OiBycy5hcnJvd1N0YXJ0WVxuICAgICAgfTtcbiAgfVxufTtcbkJScCRiLmdldFRhcmdldEVuZHBvaW50ID0gZnVuY3Rpb24gKGVkZ2UpIHtcbiAgdmFyIHJzID0gZWRnZVswXS5fcHJpdmF0ZS5yc2NyYXRjaDtcbiAgdGhpcy5yZWNhbGN1bGF0ZVJlbmRlcmVkU3R5bGUoZWRnZSk7XG4gIHN3aXRjaCAocnMuZWRnZVR5cGUpIHtcbiAgICBjYXNlICdoYXlzdGFjayc6XG4gICAgICByZXR1cm4ge1xuICAgICAgICB4OiBycy5oYXlzdGFja1B0c1syXSxcbiAgICAgICAgeTogcnMuaGF5c3RhY2tQdHNbM11cbiAgICAgIH07XG4gICAgZGVmYXVsdDpcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHg6IHJzLmFycm93RW5kWCxcbiAgICAgICAgeTogcnMuYXJyb3dFbmRZXG4gICAgICB9O1xuICB9XG59O1xuXG52YXIgQlJwJGEgPSB7fTtcbmZ1bmN0aW9uIHB1c2hCZXppZXJQdHMociwgZWRnZSwgcHRzKSB7XG4gIHZhciBxYmV6aWVyQXQkMSA9IGZ1bmN0aW9uIHFiZXppZXJBdCQxKHAxLCBwMiwgcDMsIHQpIHtcbiAgICByZXR1cm4gcWJlemllckF0KHAxLCBwMiwgcDMsIHQpO1xuICB9O1xuICB2YXIgX3AgPSBlZGdlLl9wcml2YXRlO1xuICB2YXIgYnB0cyA9IF9wLnJzdHlsZS5iZXppZXJQdHM7XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgci5iZXppZXJQcm9qUGN0cy5sZW5ndGg7IGkrKykge1xuICAgIHZhciBwID0gci5iZXppZXJQcm9qUGN0c1tpXTtcbiAgICBicHRzLnB1c2goe1xuICAgICAgeDogcWJlemllckF0JDEocHRzWzBdLCBwdHNbMl0sIHB0c1s0XSwgcCksXG4gICAgICB5OiBxYmV6aWVyQXQkMShwdHNbMV0sIHB0c1szXSwgcHRzWzVdLCBwKVxuICAgIH0pO1xuICB9XG59XG5CUnAkYS5zdG9yZUVkZ2VQcm9qZWN0aW9ucyA9IGZ1bmN0aW9uIChlZGdlKSB7XG4gIHZhciBfcCA9IGVkZ2UuX3ByaXZhdGU7XG4gIHZhciBycyA9IF9wLnJzY3JhdGNoO1xuICB2YXIgZXQgPSBycy5lZGdlVHlwZTtcblxuICAvLyBjbGVhciB0aGUgY2FjaGVkIHBvaW50cyBzdGF0ZVxuICBfcC5yc3R5bGUuYmV6aWVyUHRzID0gbnVsbDtcbiAgX3AucnN0eWxlLmxpbmVQdHMgPSBudWxsO1xuICBfcC5yc3R5bGUuaGF5c3RhY2tQdHMgPSBudWxsO1xuICBpZiAoZXQgPT09ICdtdWx0aWJlemllcicgfHwgZXQgPT09ICdiZXppZXInIHx8IGV0ID09PSAnc2VsZicgfHwgZXQgPT09ICdjb21wb3VuZCcpIHtcbiAgICBfcC5yc3R5bGUuYmV6aWVyUHRzID0gW107XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgKyA1IDwgcnMuYWxscHRzLmxlbmd0aDsgaSArPSA0KSB7XG4gICAgICBwdXNoQmV6aWVyUHRzKHRoaXMsIGVkZ2UsIHJzLmFsbHB0cy5zbGljZShpLCBpICsgNikpO1xuICAgIH1cbiAgfSBlbHNlIGlmIChldCA9PT0gJ3NlZ21lbnRzJykge1xuICAgIHZhciBscHRzID0gX3AucnN0eWxlLmxpbmVQdHMgPSBbXTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSArIDEgPCBycy5hbGxwdHMubGVuZ3RoOyBpICs9IDIpIHtcbiAgICAgIGxwdHMucHVzaCh7XG4gICAgICAgIHg6IHJzLmFsbHB0c1tpXSxcbiAgICAgICAgeTogcnMuYWxscHRzW2kgKyAxXVxuICAgICAgfSk7XG4gICAgfVxuICB9IGVsc2UgaWYgKGV0ID09PSAnaGF5c3RhY2snKSB7XG4gICAgdmFyIGhwdHMgPSBycy5oYXlzdGFja1B0cztcbiAgICBfcC5yc3R5bGUuaGF5c3RhY2tQdHMgPSBbe1xuICAgICAgeDogaHB0c1swXSxcbiAgICAgIHk6IGhwdHNbMV1cbiAgICB9LCB7XG4gICAgICB4OiBocHRzWzJdLFxuICAgICAgeTogaHB0c1szXVxuICAgIH1dO1xuICB9XG4gIF9wLnJzdHlsZS5hcnJvd1dpZHRoID0gdGhpcy5nZXRBcnJvd1dpZHRoKGVkZ2UucHN0eWxlKCd3aWR0aCcpLnBmVmFsdWUsIGVkZ2UucHN0eWxlKCdhcnJvdy1zY2FsZScpLnZhbHVlKSAqIHRoaXMuYXJyb3dTaGFwZVdpZHRoO1xufTtcbkJScCRhLnJlY2FsY3VsYXRlRWRnZVByb2plY3Rpb25zID0gZnVuY3Rpb24gKGVkZ2VzKSB7XG4gIHRoaXMuZmluZEVkZ2VDb250cm9sUG9pbnRzKGVkZ2VzKTtcbn07XG5cbnZhciBCUnAkOSA9IHt9O1xuQlJwJDkucmVjYWxjdWxhdGVOb2RlTGFiZWxQcm9qZWN0aW9uID0gZnVuY3Rpb24gKG5vZGUpIHtcbiAgdmFyIGNvbnRlbnQgPSBub2RlLnBzdHlsZSgnbGFiZWwnKS5zdHJWYWx1ZTtcbiAgaWYgKGVtcHR5U3RyaW5nKGNvbnRlbnQpKSB7XG4gICAgcmV0dXJuO1xuICB9XG4gIHZhciB0ZXh0WCwgdGV4dFk7XG4gIHZhciBfcCA9IG5vZGUuX3ByaXZhdGU7XG4gIHZhciBub2RlV2lkdGggPSBub2RlLndpZHRoKCk7XG4gIHZhciBub2RlSGVpZ2h0ID0gbm9kZS5oZWlnaHQoKTtcbiAgdmFyIHBhZGRpbmcgPSBub2RlLnBhZGRpbmcoKTtcbiAgdmFyIG5vZGVQb3MgPSBub2RlLnBvc2l0aW9uKCk7XG4gIHZhciB0ZXh0SGFsaWduID0gbm9kZS5wc3R5bGUoJ3RleHQtaGFsaWduJykuc3RyVmFsdWU7XG4gIHZhciB0ZXh0VmFsaWduID0gbm9kZS5wc3R5bGUoJ3RleHQtdmFsaWduJykuc3RyVmFsdWU7XG4gIHZhciBycyA9IF9wLnJzY3JhdGNoO1xuICB2YXIgcnN0eWxlID0gX3AucnN0eWxlO1xuICBzd2l0Y2ggKHRleHRIYWxpZ24pIHtcbiAgICBjYXNlICdsZWZ0JzpcbiAgICAgIHRleHRYID0gbm9kZVBvcy54IC0gbm9kZVdpZHRoIC8gMiAtIHBhZGRpbmc7XG4gICAgICBicmVhaztcbiAgICBjYXNlICdyaWdodCc6XG4gICAgICB0ZXh0WCA9IG5vZGVQb3MueCArIG5vZGVXaWR0aCAvIDIgKyBwYWRkaW5nO1xuICAgICAgYnJlYWs7XG4gICAgZGVmYXVsdDpcbiAgICAgIC8vIGUuZy4gY2VudGVyXG4gICAgICB0ZXh0WCA9IG5vZGVQb3MueDtcbiAgfVxuICBzd2l0Y2ggKHRleHRWYWxpZ24pIHtcbiAgICBjYXNlICd0b3AnOlxuICAgICAgdGV4dFkgPSBub2RlUG9zLnkgLSBub2RlSGVpZ2h0IC8gMiAtIHBhZGRpbmc7XG4gICAgICBicmVhaztcbiAgICBjYXNlICdib3R0b20nOlxuICAgICAgdGV4dFkgPSBub2RlUG9zLnkgKyBub2RlSGVpZ2h0IC8gMiArIHBhZGRpbmc7XG4gICAgICBicmVhaztcbiAgICBkZWZhdWx0OlxuICAgICAgLy8gZS5nLiBtaWRkbGVcbiAgICAgIHRleHRZID0gbm9kZVBvcy55O1xuICB9XG4gIHJzLmxhYmVsWCA9IHRleHRYO1xuICBycy5sYWJlbFkgPSB0ZXh0WTtcbiAgcnN0eWxlLmxhYmVsWCA9IHRleHRYO1xuICByc3R5bGUubGFiZWxZID0gdGV4dFk7XG4gIHRoaXMuY2FsY3VsYXRlTGFiZWxBbmdsZXMobm9kZSk7XG4gIHRoaXMuYXBwbHlMYWJlbERpbWVuc2lvbnMobm9kZSk7XG59O1xudmFyIGxpbmVBbmdsZUZyb21EZWx0YSA9IGZ1bmN0aW9uIGxpbmVBbmdsZUZyb21EZWx0YShkeCwgZHkpIHtcbiAgdmFyIGFuZ2xlID0gTWF0aC5hdGFuKGR5IC8gZHgpO1xuICBpZiAoZHggPT09IDAgJiYgYW5nbGUgPCAwKSB7XG4gICAgYW5nbGUgPSBhbmdsZSAqIC0xO1xuICB9XG4gIHJldHVybiBhbmdsZTtcbn07XG52YXIgbGluZUFuZ2xlID0gZnVuY3Rpb24gbGluZUFuZ2xlKHAwLCBwMSkge1xuICB2YXIgZHggPSBwMS54IC0gcDAueDtcbiAgdmFyIGR5ID0gcDEueSAtIHAwLnk7XG4gIHJldHVybiBsaW5lQW5nbGVGcm9tRGVsdGEoZHgsIGR5KTtcbn07XG52YXIgYmV6aWVyQW5nbGUgPSBmdW5jdGlvbiBiZXppZXJBbmdsZShwMCwgcDEsIHAyLCB0KSB7XG4gIHZhciB0MCA9IGJvdW5kKDAsIHQgLSAwLjAwMSwgMSk7XG4gIHZhciB0MSA9IGJvdW5kKDAsIHQgKyAwLjAwMSwgMSk7XG4gIHZhciBscDAgPSBxYmV6aWVyUHRBdChwMCwgcDEsIHAyLCB0MCk7XG4gIHZhciBscDEgPSBxYmV6aWVyUHRBdChwMCwgcDEsIHAyLCB0MSk7XG4gIHJldHVybiBsaW5lQW5nbGUobHAwLCBscDEpO1xufTtcbkJScCQ5LnJlY2FsY3VsYXRlRWRnZUxhYmVsUHJvamVjdGlvbnMgPSBmdW5jdGlvbiAoZWRnZSkge1xuICB2YXIgcDtcbiAgdmFyIF9wID0gZWRnZS5fcHJpdmF0ZTtcbiAgdmFyIHJzID0gX3AucnNjcmF0Y2g7XG4gIHZhciByID0gdGhpcztcbiAgdmFyIGNvbnRlbnQgPSB7XG4gICAgbWlkOiBlZGdlLnBzdHlsZSgnbGFiZWwnKS5zdHJWYWx1ZSxcbiAgICBzb3VyY2U6IGVkZ2UucHN0eWxlKCdzb3VyY2UtbGFiZWwnKS5zdHJWYWx1ZSxcbiAgICB0YXJnZXQ6IGVkZ2UucHN0eWxlKCd0YXJnZXQtbGFiZWwnKS5zdHJWYWx1ZVxuICB9O1xuICBpZiAoY29udGVudC5taWQgfHwgY29udGVudC5zb3VyY2UgfHwgY29udGVudC50YXJnZXQpIDsgZWxzZSB7XG4gICAgcmV0dXJuOyAvLyBubyBsYWJlbHMgPT4gbm8gY2FsY3NcbiAgfVxuXG4gIC8vIGFkZCBjZW50ZXIgcG9pbnQgdG8gc3R5bGUgc28gYm91bmRpbmcgYm94IGNhbGN1bGF0aW9ucyBjYW4gdXNlIGl0XG4gIC8vXG4gIHAgPSB7XG4gICAgeDogcnMubWlkWCxcbiAgICB5OiBycy5taWRZXG4gIH07XG4gIHZhciBzZXRScyA9IGZ1bmN0aW9uIHNldFJzKHByb3BOYW1lLCBwcmVmaXgsIHZhbHVlKSB7XG4gICAgc2V0UHJlZml4ZWRQcm9wZXJ0eShfcC5yc2NyYXRjaCwgcHJvcE5hbWUsIHByZWZpeCwgdmFsdWUpO1xuICAgIHNldFByZWZpeGVkUHJvcGVydHkoX3AucnN0eWxlLCBwcm9wTmFtZSwgcHJlZml4LCB2YWx1ZSk7XG4gIH07XG4gIHNldFJzKCdsYWJlbFgnLCBudWxsLCBwLngpO1xuICBzZXRScygnbGFiZWxZJywgbnVsbCwgcC55KTtcbiAgdmFyIG1pZEFuZ2xlID0gbGluZUFuZ2xlRnJvbURlbHRhKHJzLm1pZERpc3BYLCBycy5taWREaXNwWSk7XG4gIHNldFJzKCdsYWJlbEF1dG9BbmdsZScsIG51bGwsIG1pZEFuZ2xlKTtcbiAgdmFyIF9jcmVhdGVDb250cm9sUG9pbnRJbmZvID0gZnVuY3Rpb24gY3JlYXRlQ29udHJvbFBvaW50SW5mbygpIHtcbiAgICBpZiAoX2NyZWF0ZUNvbnRyb2xQb2ludEluZm8uY2FjaGUpIHtcbiAgICAgIHJldHVybiBfY3JlYXRlQ29udHJvbFBvaW50SW5mby5jYWNoZTtcbiAgICB9IC8vIHVzZSBjYWNoZSBzbyBvbmx5IDF4IHBlciBlZGdlXG5cbiAgICB2YXIgY3RybHB0cyA9IFtdO1xuXG4gICAgLy8gc3RvcmUgZWFjaCBjdHJscHQgaW5mbyBpbml0XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgKyA1IDwgcnMuYWxscHRzLmxlbmd0aDsgaSArPSA0KSB7XG4gICAgICB2YXIgcDAgPSB7XG4gICAgICAgIHg6IHJzLmFsbHB0c1tpXSxcbiAgICAgICAgeTogcnMuYWxscHRzW2kgKyAxXVxuICAgICAgfTtcbiAgICAgIHZhciBwMSA9IHtcbiAgICAgICAgeDogcnMuYWxscHRzW2kgKyAyXSxcbiAgICAgICAgeTogcnMuYWxscHRzW2kgKyAzXVxuICAgICAgfTsgLy8gY3RybHB0XG4gICAgICB2YXIgcDIgPSB7XG4gICAgICAgIHg6IHJzLmFsbHB0c1tpICsgNF0sXG4gICAgICAgIHk6IHJzLmFsbHB0c1tpICsgNV1cbiAgICAgIH07XG4gICAgICBjdHJscHRzLnB1c2goe1xuICAgICAgICBwMDogcDAsXG4gICAgICAgIHAxOiBwMSxcbiAgICAgICAgcDI6IHAyLFxuICAgICAgICBzdGFydERpc3Q6IDAsXG4gICAgICAgIGxlbmd0aDogMCxcbiAgICAgICAgc2VnbWVudHM6IFtdXG4gICAgICB9KTtcbiAgICB9XG4gICAgdmFyIGJwdHMgPSBfcC5yc3R5bGUuYmV6aWVyUHRzO1xuICAgIHZhciBuUHJvanMgPSByLmJlemllclByb2pQY3RzLmxlbmd0aDtcbiAgICBmdW5jdGlvbiBhZGRTZWdtZW50KGNwLCBwMCwgcDEsIHQwLCB0MSkge1xuICAgICAgdmFyIGxlbmd0aCA9IGRpc3QocDAsIHAxKTtcbiAgICAgIHZhciBwcmV2U2VnbWVudCA9IGNwLnNlZ21lbnRzW2NwLnNlZ21lbnRzLmxlbmd0aCAtIDFdO1xuICAgICAgdmFyIHNlZ21lbnQgPSB7XG4gICAgICAgIHAwOiBwMCxcbiAgICAgICAgcDE6IHAxLFxuICAgICAgICB0MDogdDAsXG4gICAgICAgIHQxOiB0MSxcbiAgICAgICAgc3RhcnREaXN0OiBwcmV2U2VnbWVudCA/IHByZXZTZWdtZW50LnN0YXJ0RGlzdCArIHByZXZTZWdtZW50Lmxlbmd0aCA6IDAsXG4gICAgICAgIGxlbmd0aDogbGVuZ3RoXG4gICAgICB9O1xuICAgICAgY3Auc2VnbWVudHMucHVzaChzZWdtZW50KTtcbiAgICAgIGNwLmxlbmd0aCArPSBsZW5ndGg7XG4gICAgfVxuXG4gICAgLy8gdXBkYXRlIGVhY2ggY3RybHB0IHdpdGggc2VnbWVudCBpbmZvXG4gICAgZm9yICh2YXIgX2kgPSAwOyBfaSA8IGN0cmxwdHMubGVuZ3RoOyBfaSsrKSB7XG4gICAgICB2YXIgY3AgPSBjdHJscHRzW19pXTtcbiAgICAgIHZhciBwcmV2Q3AgPSBjdHJscHRzW19pIC0gMV07XG4gICAgICBpZiAocHJldkNwKSB7XG4gICAgICAgIGNwLnN0YXJ0RGlzdCA9IHByZXZDcC5zdGFydERpc3QgKyBwcmV2Q3AubGVuZ3RoO1xuICAgICAgfVxuICAgICAgYWRkU2VnbWVudChjcCwgY3AucDAsIGJwdHNbX2kgKiBuUHJvanNdLCAwLCByLmJlemllclByb2pQY3RzWzBdKTsgLy8gZmlyc3RcblxuICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCBuUHJvanMgLSAxOyBqKyspIHtcbiAgICAgICAgYWRkU2VnbWVudChjcCwgYnB0c1tfaSAqIG5Qcm9qcyArIGpdLCBicHRzW19pICogblByb2pzICsgaiArIDFdLCByLmJlemllclByb2pQY3RzW2pdLCByLmJlemllclByb2pQY3RzW2ogKyAxXSk7XG4gICAgICB9XG4gICAgICBhZGRTZWdtZW50KGNwLCBicHRzW19pICogblByb2pzICsgblByb2pzIC0gMV0sIGNwLnAyLCByLmJlemllclByb2pQY3RzW25Qcm9qcyAtIDFdLCAxKTsgLy8gbGFzdFxuICAgIH1cbiAgICByZXR1cm4gX2NyZWF0ZUNvbnRyb2xQb2ludEluZm8uY2FjaGUgPSBjdHJscHRzO1xuICB9O1xuICB2YXIgY2FsY3VsYXRlRW5kUHJvamVjdGlvbiA9IGZ1bmN0aW9uIGNhbGN1bGF0ZUVuZFByb2plY3Rpb24ocHJlZml4KSB7XG4gICAgdmFyIGFuZ2xlO1xuICAgIHZhciBpc1NyYyA9IHByZWZpeCA9PT0gJ3NvdXJjZSc7XG4gICAgaWYgKCFjb250ZW50W3ByZWZpeF0pIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdmFyIG9mZnNldCA9IGVkZ2UucHN0eWxlKHByZWZpeCArICctdGV4dC1vZmZzZXQnKS5wZlZhbHVlO1xuICAgIHN3aXRjaCAocnMuZWRnZVR5cGUpIHtcbiAgICAgIGNhc2UgJ3NlbGYnOlxuICAgICAgY2FzZSAnY29tcG91bmQnOlxuICAgICAgY2FzZSAnYmV6aWVyJzpcbiAgICAgIGNhc2UgJ211bHRpYmV6aWVyJzpcbiAgICAgICAge1xuICAgICAgICAgIHZhciBjcHMgPSBfY3JlYXRlQ29udHJvbFBvaW50SW5mbygpO1xuICAgICAgICAgIHZhciBzZWxlY3RlZDtcbiAgICAgICAgICB2YXIgc3RhcnREaXN0ID0gMDtcbiAgICAgICAgICB2YXIgdG90YWxEaXN0ID0gMDtcblxuICAgICAgICAgIC8vIGZpbmQgdGhlIHNlZ21lbnQgd2UncmUgb25cbiAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGNwcy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgdmFyIF9jcCA9IGNwc1tpc1NyYyA/IGkgOiBjcHMubGVuZ3RoIC0gMSAtIGldO1xuICAgICAgICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCBfY3Auc2VnbWVudHMubGVuZ3RoOyBqKyspIHtcbiAgICAgICAgICAgICAgdmFyIF9zZWcgPSBfY3Auc2VnbWVudHNbaXNTcmMgPyBqIDogX2NwLnNlZ21lbnRzLmxlbmd0aCAtIDEgLSBqXTtcbiAgICAgICAgICAgICAgdmFyIGxhc3RTZWcgPSBpID09PSBjcHMubGVuZ3RoIC0gMSAmJiBqID09PSBfY3Auc2VnbWVudHMubGVuZ3RoIC0gMTtcbiAgICAgICAgICAgICAgc3RhcnREaXN0ID0gdG90YWxEaXN0O1xuICAgICAgICAgICAgICB0b3RhbERpc3QgKz0gX3NlZy5sZW5ndGg7XG4gICAgICAgICAgICAgIGlmICh0b3RhbERpc3QgPj0gb2Zmc2V0IHx8IGxhc3RTZWcpIHtcbiAgICAgICAgICAgICAgICBzZWxlY3RlZCA9IHtcbiAgICAgICAgICAgICAgICAgIGNwOiBfY3AsXG4gICAgICAgICAgICAgICAgICBzZWdtZW50OiBfc2VnXG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHNlbGVjdGVkKSB7XG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICB2YXIgY3AgPSBzZWxlY3RlZC5jcDtcbiAgICAgICAgICB2YXIgc2VnID0gc2VsZWN0ZWQuc2VnbWVudDtcbiAgICAgICAgICB2YXIgdFNlZ21lbnQgPSAob2Zmc2V0IC0gc3RhcnREaXN0KSAvIHNlZy5sZW5ndGg7XG4gICAgICAgICAgdmFyIHNlZ0R0ID0gc2VnLnQxIC0gc2VnLnQwO1xuICAgICAgICAgIHZhciB0ID0gaXNTcmMgPyBzZWcudDAgKyBzZWdEdCAqIHRTZWdtZW50IDogc2VnLnQxIC0gc2VnRHQgKiB0U2VnbWVudDtcbiAgICAgICAgICB0ID0gYm91bmQoMCwgdCwgMSk7XG4gICAgICAgICAgcCA9IHFiZXppZXJQdEF0KGNwLnAwLCBjcC5wMSwgY3AucDIsIHQpO1xuICAgICAgICAgIGFuZ2xlID0gYmV6aWVyQW5nbGUoY3AucDAsIGNwLnAxLCBjcC5wMiwgdCk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgIGNhc2UgJ3N0cmFpZ2h0JzpcbiAgICAgIGNhc2UgJ3NlZ21lbnRzJzpcbiAgICAgIGNhc2UgJ2hheXN0YWNrJzpcbiAgICAgICAge1xuICAgICAgICAgIHZhciBkID0gMCxcbiAgICAgICAgICAgIGRpLFxuICAgICAgICAgICAgZDA7XG4gICAgICAgICAgdmFyIHAwLCBwMTtcbiAgICAgICAgICB2YXIgbCA9IHJzLmFsbHB0cy5sZW5ndGg7XG4gICAgICAgICAgZm9yICh2YXIgX2kyID0gMDsgX2kyICsgMyA8IGw7IF9pMiArPSAyKSB7XG4gICAgICAgICAgICBpZiAoaXNTcmMpIHtcbiAgICAgICAgICAgICAgcDAgPSB7XG4gICAgICAgICAgICAgICAgeDogcnMuYWxscHRzW19pMl0sXG4gICAgICAgICAgICAgICAgeTogcnMuYWxscHRzW19pMiArIDFdXG4gICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgIHAxID0ge1xuICAgICAgICAgICAgICAgIHg6IHJzLmFsbHB0c1tfaTIgKyAyXSxcbiAgICAgICAgICAgICAgICB5OiBycy5hbGxwdHNbX2kyICsgM11cbiAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIHAwID0ge1xuICAgICAgICAgICAgICAgIHg6IHJzLmFsbHB0c1tsIC0gMiAtIF9pMl0sXG4gICAgICAgICAgICAgICAgeTogcnMuYWxscHRzW2wgLSAxIC0gX2kyXVxuICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICBwMSA9IHtcbiAgICAgICAgICAgICAgICB4OiBycy5hbGxwdHNbbCAtIDQgLSBfaTJdLFxuICAgICAgICAgICAgICAgIHk6IHJzLmFsbHB0c1tsIC0gMyAtIF9pMl1cbiAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGRpID0gZGlzdChwMCwgcDEpO1xuICAgICAgICAgICAgZDAgPSBkO1xuICAgICAgICAgICAgZCArPSBkaTtcbiAgICAgICAgICAgIGlmIChkID49IG9mZnNldCkge1xuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgdmFyIHBEID0gb2Zmc2V0IC0gZDA7XG4gICAgICAgICAgdmFyIF90ID0gcEQgLyBkaTtcbiAgICAgICAgICBfdCA9IGJvdW5kKDAsIF90LCAxKTtcbiAgICAgICAgICBwID0gbGluZUF0KHAwLCBwMSwgX3QpO1xuICAgICAgICAgIGFuZ2xlID0gbGluZUFuZ2xlKHAwLCBwMSk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICB9XG4gICAgc2V0UnMoJ2xhYmVsWCcsIHByZWZpeCwgcC54KTtcbiAgICBzZXRScygnbGFiZWxZJywgcHJlZml4LCBwLnkpO1xuICAgIHNldFJzKCdsYWJlbEF1dG9BbmdsZScsIHByZWZpeCwgYW5nbGUpO1xuICB9O1xuICBjYWxjdWxhdGVFbmRQcm9qZWN0aW9uKCdzb3VyY2UnKTtcbiAgY2FsY3VsYXRlRW5kUHJvamVjdGlvbigndGFyZ2V0Jyk7XG4gIHRoaXMuYXBwbHlMYWJlbERpbWVuc2lvbnMoZWRnZSk7XG59O1xuQlJwJDkuYXBwbHlMYWJlbERpbWVuc2lvbnMgPSBmdW5jdGlvbiAoZWxlKSB7XG4gIHRoaXMuYXBwbHlQcmVmaXhlZExhYmVsRGltZW5zaW9ucyhlbGUpO1xuICBpZiAoZWxlLmlzRWRnZSgpKSB7XG4gICAgdGhpcy5hcHBseVByZWZpeGVkTGFiZWxEaW1lbnNpb25zKGVsZSwgJ3NvdXJjZScpO1xuICAgIHRoaXMuYXBwbHlQcmVmaXhlZExhYmVsRGltZW5zaW9ucyhlbGUsICd0YXJnZXQnKTtcbiAgfVxufTtcbkJScCQ5LmFwcGx5UHJlZml4ZWRMYWJlbERpbWVuc2lvbnMgPSBmdW5jdGlvbiAoZWxlLCBwcmVmaXgpIHtcbiAgdmFyIF9wID0gZWxlLl9wcml2YXRlO1xuICB2YXIgdGV4dCA9IHRoaXMuZ2V0TGFiZWxUZXh0KGVsZSwgcHJlZml4KTtcbiAgdmFyIGxhYmVsRGltcyA9IHRoaXMuY2FsY3VsYXRlTGFiZWxEaW1lbnNpb25zKGVsZSwgdGV4dCk7XG4gIHZhciBsaW5lSGVpZ2h0ID0gZWxlLnBzdHlsZSgnbGluZS1oZWlnaHQnKS5wZlZhbHVlO1xuICB2YXIgdGV4dFdyYXAgPSBlbGUucHN0eWxlKCd0ZXh0LXdyYXAnKS5zdHJWYWx1ZTtcbiAgdmFyIGxpbmVzID0gZ2V0UHJlZml4ZWRQcm9wZXJ0eShfcC5yc2NyYXRjaCwgJ2xhYmVsV3JhcENhY2hlZExpbmVzJywgcHJlZml4KSB8fCBbXTtcbiAgdmFyIG51bUxpbmVzID0gdGV4dFdyYXAgIT09ICd3cmFwJyA/IDEgOiBNYXRoLm1heChsaW5lcy5sZW5ndGgsIDEpO1xuICB2YXIgbm9ybVBlckxpbmVIZWlnaHQgPSBsYWJlbERpbXMuaGVpZ2h0IC8gbnVtTGluZXM7XG4gIHZhciBsYWJlbExpbmVIZWlnaHQgPSBub3JtUGVyTGluZUhlaWdodCAqIGxpbmVIZWlnaHQ7XG4gIHZhciB3aWR0aCA9IGxhYmVsRGltcy53aWR0aDtcbiAgdmFyIGhlaWdodCA9IGxhYmVsRGltcy5oZWlnaHQgKyAobnVtTGluZXMgLSAxKSAqIChsaW5lSGVpZ2h0IC0gMSkgKiBub3JtUGVyTGluZUhlaWdodDtcbiAgc2V0UHJlZml4ZWRQcm9wZXJ0eShfcC5yc3R5bGUsICdsYWJlbFdpZHRoJywgcHJlZml4LCB3aWR0aCk7XG4gIHNldFByZWZpeGVkUHJvcGVydHkoX3AucnNjcmF0Y2gsICdsYWJlbFdpZHRoJywgcHJlZml4LCB3aWR0aCk7XG4gIHNldFByZWZpeGVkUHJvcGVydHkoX3AucnN0eWxlLCAnbGFiZWxIZWlnaHQnLCBwcmVmaXgsIGhlaWdodCk7XG4gIHNldFByZWZpeGVkUHJvcGVydHkoX3AucnNjcmF0Y2gsICdsYWJlbEhlaWdodCcsIHByZWZpeCwgaGVpZ2h0KTtcbiAgc2V0UHJlZml4ZWRQcm9wZXJ0eShfcC5yc2NyYXRjaCwgJ2xhYmVsTGluZUhlaWdodCcsIHByZWZpeCwgbGFiZWxMaW5lSGVpZ2h0KTtcbn07XG5CUnAkOS5nZXRMYWJlbFRleHQgPSBmdW5jdGlvbiAoZWxlLCBwcmVmaXgpIHtcbiAgdmFyIF9wID0gZWxlLl9wcml2YXRlO1xuICB2YXIgcGZkID0gcHJlZml4ID8gcHJlZml4ICsgJy0nIDogJyc7XG4gIHZhciB0ZXh0ID0gZWxlLnBzdHlsZShwZmQgKyAnbGFiZWwnKS5zdHJWYWx1ZTtcbiAgdmFyIHRleHRUcmFuc2Zvcm0gPSBlbGUucHN0eWxlKCd0ZXh0LXRyYW5zZm9ybScpLnZhbHVlO1xuICB2YXIgcnNjcmF0Y2ggPSBmdW5jdGlvbiByc2NyYXRjaChwcm9wTmFtZSwgdmFsdWUpIHtcbiAgICBpZiAodmFsdWUpIHtcbiAgICAgIHNldFByZWZpeGVkUHJvcGVydHkoX3AucnNjcmF0Y2gsIHByb3BOYW1lLCBwcmVmaXgsIHZhbHVlKTtcbiAgICAgIHJldHVybiB2YWx1ZTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIGdldFByZWZpeGVkUHJvcGVydHkoX3AucnNjcmF0Y2gsIHByb3BOYW1lLCBwcmVmaXgpO1xuICAgIH1cbiAgfTtcblxuICAvLyBmb3IgZW1wdHkgdGV4dCwgc2tpcCBhbGwgcHJvY2Vzc2luZ1xuICBpZiAoIXRleHQpIHtcbiAgICByZXR1cm4gJyc7XG4gIH1cbiAgaWYgKHRleHRUcmFuc2Zvcm0gPT0gJ25vbmUnKSA7IGVsc2UgaWYgKHRleHRUcmFuc2Zvcm0gPT0gJ3VwcGVyY2FzZScpIHtcbiAgICB0ZXh0ID0gdGV4dC50b1VwcGVyQ2FzZSgpO1xuICB9IGVsc2UgaWYgKHRleHRUcmFuc2Zvcm0gPT0gJ2xvd2VyY2FzZScpIHtcbiAgICB0ZXh0ID0gdGV4dC50b0xvd2VyQ2FzZSgpO1xuICB9XG4gIHZhciB3cmFwU3R5bGUgPSBlbGUucHN0eWxlKCd0ZXh0LXdyYXAnKS52YWx1ZTtcbiAgaWYgKHdyYXBTdHlsZSA9PT0gJ3dyYXAnKSB7XG4gICAgdmFyIGxhYmVsS2V5ID0gcnNjcmF0Y2goJ2xhYmVsS2V5Jyk7XG5cbiAgICAvLyBzYXZlIHJlY2FsYyBpZiB0aGUgbGFiZWwgaXMgdGhlIHNhbWUgYXMgYmVmb3JlXG4gICAgaWYgKGxhYmVsS2V5ICE9IG51bGwgJiYgcnNjcmF0Y2goJ2xhYmVsV3JhcEtleScpID09PSBsYWJlbEtleSkge1xuICAgICAgcmV0dXJuIHJzY3JhdGNoKCdsYWJlbFdyYXBDYWNoZWRUZXh0Jyk7XG4gICAgfVxuICAgIHZhciB6d3NwID0gXCJcXHUyMDBCXCI7XG4gICAgdmFyIGxpbmVzID0gdGV4dC5zcGxpdCgnXFxuJyk7XG4gICAgdmFyIG1heFcgPSBlbGUucHN0eWxlKCd0ZXh0LW1heC13aWR0aCcpLnBmVmFsdWU7XG4gICAgdmFyIG92ZXJmbG93ID0gZWxlLnBzdHlsZSgndGV4dC1vdmVyZmxvdy13cmFwJykudmFsdWU7XG4gICAgdmFyIG92ZXJmbG93QW55ID0gb3ZlcmZsb3cgPT09ICdhbnl3aGVyZSc7XG4gICAgdmFyIHdyYXBwZWRMaW5lcyA9IFtdO1xuICAgIHZhciBzZXBhcmF0b3JSZWdleCA9IC9bXFxzXFx1MjAwYl0rfCQvZzsgLy8gSW5jbHVkZSBlbmQgb2Ygc3RyaW5nIHRvIGFkZCBsYXN0IHdvcmRcblxuICAgIGZvciAodmFyIGwgPSAwOyBsIDwgbGluZXMubGVuZ3RoOyBsKyspIHtcbiAgICAgIHZhciBsaW5lID0gbGluZXNbbF07XG4gICAgICB2YXIgbGluZURpbXMgPSB0aGlzLmNhbGN1bGF0ZUxhYmVsRGltZW5zaW9ucyhlbGUsIGxpbmUpO1xuICAgICAgdmFyIGxpbmVXID0gbGluZURpbXMud2lkdGg7XG4gICAgICBpZiAob3ZlcmZsb3dBbnkpIHtcbiAgICAgICAgdmFyIHByb2Nlc3NlZExpbmUgPSBsaW5lLnNwbGl0KCcnKS5qb2luKHp3c3ApO1xuICAgICAgICBsaW5lID0gcHJvY2Vzc2VkTGluZTtcbiAgICAgIH1cbiAgICAgIGlmIChsaW5lVyA+IG1heFcpIHtcbiAgICAgICAgLy8gbGluZSBpcyB0b28gbG9uZ1xuICAgICAgICB2YXIgc2VwYXJhdG9yTWF0Y2hlcyA9IGxpbmUubWF0Y2hBbGwoc2VwYXJhdG9yUmVnZXgpO1xuICAgICAgICB2YXIgc3VibGluZSA9ICcnO1xuICAgICAgICB2YXIgcHJldmlvdXNJbmRleCA9IDA7XG4gICAgICAgIC8vIEFkZCBmYWtlIG1hdGNoXG4gICAgICAgIHZhciBfaXRlcmF0b3IgPSBfY3JlYXRlRm9yT2ZJdGVyYXRvckhlbHBlcihzZXBhcmF0b3JNYXRjaGVzKSxcbiAgICAgICAgICBfc3RlcDtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBmb3IgKF9pdGVyYXRvci5zKCk7ICEoX3N0ZXAgPSBfaXRlcmF0b3IubigpKS5kb25lOykge1xuICAgICAgICAgICAgdmFyIHNlcGFyYXRvck1hdGNoID0gX3N0ZXAudmFsdWU7XG4gICAgICAgICAgICB2YXIgd29yZFNlcGFyYXRvciA9IHNlcGFyYXRvck1hdGNoWzBdO1xuICAgICAgICAgICAgdmFyIHdvcmQgPSBsaW5lLnN1YnN0cmluZyhwcmV2aW91c0luZGV4LCBzZXBhcmF0b3JNYXRjaC5pbmRleCk7XG4gICAgICAgICAgICBwcmV2aW91c0luZGV4ID0gc2VwYXJhdG9yTWF0Y2guaW5kZXggKyB3b3JkU2VwYXJhdG9yLmxlbmd0aDtcbiAgICAgICAgICAgIHZhciB0ZXN0TGluZSA9IHN1YmxpbmUubGVuZ3RoID09PSAwID8gd29yZCA6IHN1YmxpbmUgKyB3b3JkICsgd29yZFNlcGFyYXRvcjtcbiAgICAgICAgICAgIHZhciB0ZXN0RGltcyA9IHRoaXMuY2FsY3VsYXRlTGFiZWxEaW1lbnNpb25zKGVsZSwgdGVzdExpbmUpO1xuICAgICAgICAgICAgdmFyIHRlc3RXID0gdGVzdERpbXMud2lkdGg7XG4gICAgICAgICAgICBpZiAodGVzdFcgPD0gbWF4Vykge1xuICAgICAgICAgICAgICAvLyB3b3JkIGZpdHMgb24gY3VycmVudCBsaW5lXG4gICAgICAgICAgICAgIHN1YmxpbmUgKz0gd29yZCArIHdvcmRTZXBhcmF0b3I7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAvLyB3b3JkIHN0YXJ0cyBuZXcgbGluZVxuICAgICAgICAgICAgICBpZiAoc3VibGluZSkge1xuICAgICAgICAgICAgICAgIHdyYXBwZWRMaW5lcy5wdXNoKHN1YmxpbmUpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIHN1YmxpbmUgPSB3b3JkICsgd29yZFNlcGFyYXRvcjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG5cbiAgICAgICAgICAvLyBpZiB0aGVyZSdzIHJlbWFpbmluZyB0ZXh0LCBwdXQgaXQgaW4gYSB3cmFwcGVkIGxpbmVcbiAgICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgX2l0ZXJhdG9yLmUoZXJyKTtcbiAgICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgICBfaXRlcmF0b3IuZigpO1xuICAgICAgICB9XG4gICAgICAgIGlmICghc3VibGluZS5tYXRjaCgvXltcXHNcXHUyMDBiXSskLykpIHtcbiAgICAgICAgICB3cmFwcGVkTGluZXMucHVzaChzdWJsaW5lKTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gbGluZSBpcyBhbHJlYWR5IHNob3J0IGVub3VnaFxuICAgICAgICB3cmFwcGVkTGluZXMucHVzaChsaW5lKTtcbiAgICAgIH1cbiAgICB9IC8vIGZvclxuXG4gICAgcnNjcmF0Y2goJ2xhYmVsV3JhcENhY2hlZExpbmVzJywgd3JhcHBlZExpbmVzKTtcbiAgICB0ZXh0ID0gcnNjcmF0Y2goJ2xhYmVsV3JhcENhY2hlZFRleHQnLCB3cmFwcGVkTGluZXMuam9pbignXFxuJykpO1xuICAgIHJzY3JhdGNoKCdsYWJlbFdyYXBLZXknLCBsYWJlbEtleSk7XG4gIH0gZWxzZSBpZiAod3JhcFN0eWxlID09PSAnZWxsaXBzaXMnKSB7XG4gICAgdmFyIF9tYXhXID0gZWxlLnBzdHlsZSgndGV4dC1tYXgtd2lkdGgnKS5wZlZhbHVlO1xuICAgIHZhciBlbGxpcHNpemVkID0gJyc7XG4gICAgdmFyIGVsbGlwc2lzID0gXCJcXHUyMDI2XCI7XG4gICAgdmFyIGluY0xhc3RDaCA9IGZhbHNlO1xuICAgIGlmICh0aGlzLmNhbGN1bGF0ZUxhYmVsRGltZW5zaW9ucyhlbGUsIHRleHQpLndpZHRoIDwgX21heFcpIHtcbiAgICAgIC8vIHRoZSBsYWJlbCBhbHJlYWR5IGZpdHNcbiAgICAgIHJldHVybiB0ZXh0O1xuICAgIH1cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRleHQubGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciB3aWR0aFdpdGhOZXh0Q2ggPSB0aGlzLmNhbGN1bGF0ZUxhYmVsRGltZW5zaW9ucyhlbGUsIGVsbGlwc2l6ZWQgKyB0ZXh0W2ldICsgZWxsaXBzaXMpLndpZHRoO1xuICAgICAgaWYgKHdpZHRoV2l0aE5leHRDaCA+IF9tYXhXKSB7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgICAgZWxsaXBzaXplZCArPSB0ZXh0W2ldO1xuICAgICAgaWYgKGkgPT09IHRleHQubGVuZ3RoIC0gMSkge1xuICAgICAgICBpbmNMYXN0Q2ggPSB0cnVlO1xuICAgICAgfVxuICAgIH1cbiAgICBpZiAoIWluY0xhc3RDaCkge1xuICAgICAgZWxsaXBzaXplZCArPSBlbGxpcHNpcztcbiAgICB9XG4gICAgcmV0dXJuIGVsbGlwc2l6ZWQ7XG4gIH0gLy8gaWYgZWxsaXBzaXplXG5cbiAgcmV0dXJuIHRleHQ7XG59O1xuQlJwJDkuZ2V0TGFiZWxKdXN0aWZpY2F0aW9uID0gZnVuY3Rpb24gKGVsZSkge1xuICB2YXIganVzdGlmaWNhdGlvbiA9IGVsZS5wc3R5bGUoJ3RleHQtanVzdGlmaWNhdGlvbicpLnN0clZhbHVlO1xuICB2YXIgdGV4dEhhbGlnbiA9IGVsZS5wc3R5bGUoJ3RleHQtaGFsaWduJykuc3RyVmFsdWU7XG4gIGlmIChqdXN0aWZpY2F0aW9uID09PSAnYXV0bycpIHtcbiAgICBpZiAoZWxlLmlzTm9kZSgpKSB7XG4gICAgICBzd2l0Y2ggKHRleHRIYWxpZ24pIHtcbiAgICAgICAgY2FzZSAnbGVmdCc6XG4gICAgICAgICAgcmV0dXJuICdyaWdodCc7XG4gICAgICAgIGNhc2UgJ3JpZ2h0JzpcbiAgICAgICAgICByZXR1cm4gJ2xlZnQnO1xuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIHJldHVybiAnY2VudGVyJztcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuICdjZW50ZXInO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICByZXR1cm4ganVzdGlmaWNhdGlvbjtcbiAgfVxufTtcbkJScCQ5LmNhbGN1bGF0ZUxhYmVsRGltZW5zaW9ucyA9IGZ1bmN0aW9uIChlbGUsIHRleHQpIHtcbiAgdmFyIHIgPSB0aGlzO1xuICB2YXIgY29udGFpbmVyV2luZG93ID0gci5jeS53aW5kb3coKTtcbiAgdmFyIGRvY3VtZW50ID0gY29udGFpbmVyV2luZG93LmRvY3VtZW50O1xuICB2YXIgY2FjaGVLZXkgPSBoYXNoU3RyaW5nKHRleHQsIGVsZS5fcHJpdmF0ZS5sYWJlbERpbXNLZXkpO1xuICB2YXIgY2FjaGUgPSByLmxhYmVsRGltQ2FjaGUgfHwgKHIubGFiZWxEaW1DYWNoZSA9IFtdKTtcbiAgdmFyIGV4aXN0aW5nVmFsID0gY2FjaGVbY2FjaGVLZXldO1xuICBpZiAoZXhpc3RpbmdWYWwgIT0gbnVsbCkge1xuICAgIHJldHVybiBleGlzdGluZ1ZhbDtcbiAgfVxuICB2YXIgcGFkZGluZyA9IDA7IC8vIGFkZCBwYWRkaW5nIGFyb3VuZCB0ZXh0IGRpbXMsIGFzIHRoZSBtZWFzdXJlbWVudCBpc24ndCB0aGF0IGFjY3VyYXRlXG4gIHZhciBmU3R5bGUgPSBlbGUucHN0eWxlKCdmb250LXN0eWxlJykuc3RyVmFsdWU7XG4gIHZhciBzaXplID0gZWxlLnBzdHlsZSgnZm9udC1zaXplJykucGZWYWx1ZTtcbiAgdmFyIGZhbWlseSA9IGVsZS5wc3R5bGUoJ2ZvbnQtZmFtaWx5Jykuc3RyVmFsdWU7XG4gIHZhciB3ZWlnaHQgPSBlbGUucHN0eWxlKCdmb250LXdlaWdodCcpLnN0clZhbHVlO1xuICB2YXIgY2FudmFzID0gdGhpcy5sYWJlbENhbGNDYW52YXM7XG4gIHZhciBjMmQgPSB0aGlzLmxhYmVsQ2FsY0NhbnZhc0NvbnRleHQ7XG4gIGlmICghY2FudmFzKSB7XG4gICAgY2FudmFzID0gdGhpcy5sYWJlbENhbGNDYW52YXMgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdjYW52YXMnKTtcbiAgICBjMmQgPSB0aGlzLmxhYmVsQ2FsY0NhbnZhc0NvbnRleHQgPSBjYW52YXMuZ2V0Q29udGV4dCgnMmQnKTtcbiAgICB2YXIgZHMgPSBjYW52YXMuc3R5bGU7XG4gICAgZHMucG9zaXRpb24gPSAnYWJzb2x1dGUnO1xuICAgIGRzLmxlZnQgPSAnLTk5OTlweCc7XG4gICAgZHMudG9wID0gJy05OTk5cHgnO1xuICAgIGRzLnpJbmRleCA9ICctMSc7XG4gICAgZHMudmlzaWJpbGl0eSA9ICdoaWRkZW4nO1xuICAgIGRzLnBvaW50ZXJFdmVudHMgPSAnbm9uZSc7XG4gIH1cbiAgYzJkLmZvbnQgPSBcIlwiLmNvbmNhdChmU3R5bGUsIFwiIFwiKS5jb25jYXQod2VpZ2h0LCBcIiBcIikuY29uY2F0KHNpemUsIFwicHggXCIpLmNvbmNhdChmYW1pbHkpO1xuICB2YXIgd2lkdGggPSAwO1xuICB2YXIgaGVpZ2h0ID0gMDtcbiAgdmFyIGxpbmVzID0gdGV4dC5zcGxpdCgnXFxuJyk7XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgbGluZXMubGVuZ3RoOyBpKyspIHtcbiAgICB2YXIgbGluZSA9IGxpbmVzW2ldO1xuICAgIHZhciBtZXRyaWNzID0gYzJkLm1lYXN1cmVUZXh0KGxpbmUpO1xuICAgIHZhciB3ID0gTWF0aC5jZWlsKG1ldHJpY3Mud2lkdGgpO1xuICAgIHZhciBoID0gc2l6ZTtcbiAgICB3aWR0aCA9IE1hdGgubWF4KHcsIHdpZHRoKTtcbiAgICBoZWlnaHQgKz0gaDtcbiAgfVxuICB3aWR0aCArPSBwYWRkaW5nO1xuICBoZWlnaHQgKz0gcGFkZGluZztcbiAgcmV0dXJuIGNhY2hlW2NhY2hlS2V5XSA9IHtcbiAgICB3aWR0aDogd2lkdGgsXG4gICAgaGVpZ2h0OiBoZWlnaHRcbiAgfTtcbn07XG5CUnAkOS5jYWxjdWxhdGVMYWJlbEFuZ2xlID0gZnVuY3Rpb24gKGVsZSwgcHJlZml4KSB7XG4gIHZhciBfcCA9IGVsZS5fcHJpdmF0ZTtcbiAgdmFyIHJzID0gX3AucnNjcmF0Y2g7XG4gIHZhciBpc0VkZ2UgPSBlbGUuaXNFZGdlKCk7XG4gIHZhciBwcmVmaXhEYXNoID0gcHJlZml4ID8gcHJlZml4ICsgJy0nIDogJyc7XG4gIHZhciByb3QgPSBlbGUucHN0eWxlKHByZWZpeERhc2ggKyAndGV4dC1yb3RhdGlvbicpO1xuICB2YXIgcm90U3RyID0gcm90LnN0clZhbHVlO1xuICBpZiAocm90U3RyID09PSAnbm9uZScpIHtcbiAgICByZXR1cm4gMDtcbiAgfSBlbHNlIGlmIChpc0VkZ2UgJiYgcm90U3RyID09PSAnYXV0b3JvdGF0ZScpIHtcbiAgICByZXR1cm4gcnMubGFiZWxBdXRvQW5nbGU7XG4gIH0gZWxzZSBpZiAocm90U3RyID09PSAnYXV0b3JvdGF0ZScpIHtcbiAgICByZXR1cm4gMDtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gcm90LnBmVmFsdWU7XG4gIH1cbn07XG5CUnAkOS5jYWxjdWxhdGVMYWJlbEFuZ2xlcyA9IGZ1bmN0aW9uIChlbGUpIHtcbiAgdmFyIHIgPSB0aGlzO1xuICB2YXIgaXNFZGdlID0gZWxlLmlzRWRnZSgpO1xuICB2YXIgX3AgPSBlbGUuX3ByaXZhdGU7XG4gIHZhciBycyA9IF9wLnJzY3JhdGNoO1xuICBycy5sYWJlbEFuZ2xlID0gci5jYWxjdWxhdGVMYWJlbEFuZ2xlKGVsZSk7XG4gIGlmIChpc0VkZ2UpIHtcbiAgICBycy5zb3VyY2VMYWJlbEFuZ2xlID0gci5jYWxjdWxhdGVMYWJlbEFuZ2xlKGVsZSwgJ3NvdXJjZScpO1xuICAgIHJzLnRhcmdldExhYmVsQW5nbGUgPSByLmNhbGN1bGF0ZUxhYmVsQW5nbGUoZWxlLCAndGFyZ2V0Jyk7XG4gIH1cbn07XG5cbnZhciBCUnAkOCA9IHt9O1xudmFyIFRPT19TTUFMTF9DVVRfUkVDVCA9IDI4O1xudmFyIHdhcm5lZEN1dFJlY3QgPSBmYWxzZTtcbkJScCQ4LmdldE5vZGVTaGFwZSA9IGZ1bmN0aW9uIChub2RlKSB7XG4gIHZhciByID0gdGhpcztcbiAgdmFyIHNoYXBlID0gbm9kZS5wc3R5bGUoJ3NoYXBlJykudmFsdWU7XG4gIGlmIChzaGFwZSA9PT0gJ2N1dHJlY3RhbmdsZScgJiYgKG5vZGUud2lkdGgoKSA8IFRPT19TTUFMTF9DVVRfUkVDVCB8fCBub2RlLmhlaWdodCgpIDwgVE9PX1NNQUxMX0NVVF9SRUNUKSkge1xuICAgIGlmICghd2FybmVkQ3V0UmVjdCkge1xuICAgICAgd2FybignVGhlIGBjdXRyZWN0YW5nbGVgIG5vZGUgc2hhcGUgY2FuIG5vdCBiZSB1c2VkIGF0IHNtYWxsIHNpemVzIHNvIGByZWN0YW5nbGVgIGlzIHVzZWQgaW5zdGVhZCcpO1xuICAgICAgd2FybmVkQ3V0UmVjdCA9IHRydWU7XG4gICAgfVxuICAgIHJldHVybiAncmVjdGFuZ2xlJztcbiAgfVxuICBpZiAobm9kZS5pc1BhcmVudCgpKSB7XG4gICAgaWYgKHNoYXBlID09PSAncmVjdGFuZ2xlJyB8fCBzaGFwZSA9PT0gJ3JvdW5kcmVjdGFuZ2xlJyB8fCBzaGFwZSA9PT0gJ3JvdW5kLXJlY3RhbmdsZScgfHwgc2hhcGUgPT09ICdjdXRyZWN0YW5nbGUnIHx8IHNoYXBlID09PSAnY3V0LXJlY3RhbmdsZScgfHwgc2hhcGUgPT09ICdiYXJyZWwnKSB7XG4gICAgICByZXR1cm4gc2hhcGU7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiAncmVjdGFuZ2xlJztcbiAgICB9XG4gIH1cbiAgaWYgKHNoYXBlID09PSAncG9seWdvbicpIHtcbiAgICB2YXIgcG9pbnRzID0gbm9kZS5wc3R5bGUoJ3NoYXBlLXBvbHlnb24tcG9pbnRzJykudmFsdWU7XG4gICAgcmV0dXJuIHIubm9kZVNoYXBlcy5tYWtlUG9seWdvbihwb2ludHMpLm5hbWU7XG4gIH1cbiAgcmV0dXJuIHNoYXBlO1xufTtcblxudmFyIEJScCQ3ID0ge307XG5CUnAkNy5yZWdpc3RlckNhbGN1bGF0aW9uTGlzdGVuZXJzID0gZnVuY3Rpb24gKCkge1xuICB2YXIgY3kgPSB0aGlzLmN5O1xuICB2YXIgZWxlc1RvVXBkYXRlID0gY3kuY29sbGVjdGlvbigpO1xuICB2YXIgciA9IHRoaXM7XG4gIHZhciBlbnF1ZXVlID0gZnVuY3Rpb24gZW5xdWV1ZShlbGVzKSB7XG4gICAgdmFyIGRpcnR5U3R5bGVDYWNoZXMgPSBhcmd1bWVudHMubGVuZ3RoID4gMSAmJiBhcmd1bWVudHNbMV0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1sxXSA6IHRydWU7XG4gICAgZWxlc1RvVXBkYXRlLm1lcmdlKGVsZXMpO1xuICAgIGlmIChkaXJ0eVN0eWxlQ2FjaGVzKSB7XG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGVsZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgdmFyIGVsZSA9IGVsZXNbaV07XG4gICAgICAgIHZhciBfcCA9IGVsZS5fcHJpdmF0ZTtcbiAgICAgICAgdmFyIHJzdHlsZSA9IF9wLnJzdHlsZTtcbiAgICAgICAgcnN0eWxlLmNsZWFuID0gZmFsc2U7XG4gICAgICAgIHJzdHlsZS5jbGVhbkNvbm5lY3RlZCA9IGZhbHNlO1xuICAgICAgfVxuICAgIH1cbiAgfTtcbiAgci5iaW5kZXIoY3kpLm9uKCdib3VuZHMuKiBkaXJ0eS4qJywgZnVuY3Rpb24gb25EaXJ0eUJvdW5kcyhlKSB7XG4gICAgdmFyIGVsZSA9IGUudGFyZ2V0O1xuICAgIGVucXVldWUoZWxlKTtcbiAgfSkub24oJ3N0eWxlLiogYmFja2dyb3VuZC4qJywgZnVuY3Rpb24gb25EaXJ0eVN0eWxlKGUpIHtcbiAgICB2YXIgZWxlID0gZS50YXJnZXQ7XG4gICAgZW5xdWV1ZShlbGUsIGZhbHNlKTtcbiAgfSk7XG4gIHZhciB1cGRhdGVFbGVDYWxjcyA9IGZ1bmN0aW9uIHVwZGF0ZUVsZUNhbGNzKHdpbGxEcmF3KSB7XG4gICAgaWYgKHdpbGxEcmF3KSB7XG4gICAgICB2YXIgZm5zID0gci5vblVwZGF0ZUVsZUNhbGNzRm5zO1xuXG4gICAgICAvLyBiZWNhdXNlIHdlIG5lZWQgdG8gaGF2ZSB1cC10by1kYXRlIHN0eWxlIChlLmcuIHN0eWxlc2hlZXQgbWFwcGVycylcbiAgICAgIC8vIGJlZm9yZSBjYWxjdWxhdGluZyByZW5kZXJlZCBzdHlsZSAoYW5kIHBzdHlsZSBtaWdodCBub3QgYmUgY2FsbGVkIHlldClcbiAgICAgIGVsZXNUb1VwZGF0ZS5jbGVhblN0eWxlKCk7XG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGVsZXNUb1VwZGF0ZS5sZW5ndGg7IGkrKykge1xuICAgICAgICB2YXIgZWxlID0gZWxlc1RvVXBkYXRlW2ldO1xuICAgICAgICB2YXIgcnN0eWxlID0gZWxlLl9wcml2YXRlLnJzdHlsZTtcbiAgICAgICAgaWYgKGVsZS5pc05vZGUoKSAmJiAhcnN0eWxlLmNsZWFuQ29ubmVjdGVkKSB7XG4gICAgICAgICAgZW5xdWV1ZShlbGUuY29ubmVjdGVkRWRnZXMoKSk7XG4gICAgICAgICAgcnN0eWxlLmNsZWFuQ29ubmVjdGVkID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYgKGZucykge1xuICAgICAgICBmb3IgKHZhciBfaSA9IDA7IF9pIDwgZm5zLmxlbmd0aDsgX2krKykge1xuICAgICAgICAgIHZhciBmbiA9IGZuc1tfaV07XG4gICAgICAgICAgZm4od2lsbERyYXcsIGVsZXNUb1VwZGF0ZSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHIucmVjYWxjdWxhdGVSZW5kZXJlZFN0eWxlKGVsZXNUb1VwZGF0ZSk7XG4gICAgICBlbGVzVG9VcGRhdGUgPSBjeS5jb2xsZWN0aW9uKCk7XG4gICAgfVxuICB9O1xuICByLmZsdXNoUmVuZGVyZWRTdHlsZVF1ZXVlID0gZnVuY3Rpb24gKCkge1xuICAgIHVwZGF0ZUVsZUNhbGNzKHRydWUpO1xuICB9O1xuICByLmJlZm9yZVJlbmRlcih1cGRhdGVFbGVDYWxjcywgci5iZWZvcmVSZW5kZXJQcmlvcml0aWVzLmVsZUNhbGNzKTtcbn07XG5CUnAkNy5vblVwZGF0ZUVsZUNhbGNzID0gZnVuY3Rpb24gKGZuKSB7XG4gIHZhciBmbnMgPSB0aGlzLm9uVXBkYXRlRWxlQ2FsY3NGbnMgPSB0aGlzLm9uVXBkYXRlRWxlQ2FsY3NGbnMgfHwgW107XG4gIGZucy5wdXNoKGZuKTtcbn07XG5CUnAkNy5yZWNhbGN1bGF0ZVJlbmRlcmVkU3R5bGUgPSBmdW5jdGlvbiAoZWxlcywgdXNlQ2FjaGUpIHtcbiAgdmFyIGlzQ2xlYW5Db25uZWN0ZWQgPSBmdW5jdGlvbiBpc0NsZWFuQ29ubmVjdGVkKGVsZSkge1xuICAgIHJldHVybiBlbGUuX3ByaXZhdGUucnN0eWxlLmNsZWFuQ29ubmVjdGVkO1xuICB9O1xuICBpZiAoZWxlcy5sZW5ndGggPT09IDApIHtcbiAgICByZXR1cm47XG4gIH1cbiAgdmFyIGVkZ2VzID0gW107XG4gIHZhciBub2RlcyA9IFtdO1xuXG4gIC8vIHRoZSByZW5kZXJlciBjYW4ndCBiZSB1c2VkIGZvciBjYWxjcyB3aGVuIGRlc3Ryb3llZCwgZS5nLiBlbGUuYm91bmRpbmdCb3goKVxuICBpZiAodGhpcy5kZXN0cm95ZWQpIHtcbiAgICByZXR1cm47XG4gIH1cblxuICAvLyB1c2UgY2FjaGUgYnkgZGVmYXVsdCBmb3IgcGVyZlxuICBpZiAodXNlQ2FjaGUgPT09IHVuZGVmaW5lZCkge1xuICAgIHVzZUNhY2hlID0gdHJ1ZTtcbiAgfVxuICBmb3IgKHZhciBpID0gMDsgaSA8IGVsZXMubGVuZ3RoOyBpKyspIHtcbiAgICB2YXIgZWxlID0gZWxlc1tpXTtcbiAgICB2YXIgX3AgPSBlbGUuX3ByaXZhdGU7XG4gICAgdmFyIHJzdHlsZSA9IF9wLnJzdHlsZTtcblxuICAgIC8vIGFuIGVkZ2UgbWF5IGJlIGltcGxpY2l0bHkgZGlydHkgYi9jIG9mIG9uZSBvZiBpdHMgY29ubmVjdGVkIG5vZGVzXG4gICAgLy8gKGFuZCBhIHJlcXVlc3QgZm9yIHJlY2FsYyBtYXkgY29tZSBpbiBiZXR3ZWVuIGZyYW1lcylcbiAgICBpZiAoZWxlLmlzRWRnZSgpICYmICghaXNDbGVhbkNvbm5lY3RlZChlbGUuc291cmNlKCkpIHx8ICFpc0NsZWFuQ29ubmVjdGVkKGVsZS50YXJnZXQoKSkpKSB7XG4gICAgICByc3R5bGUuY2xlYW4gPSBmYWxzZTtcbiAgICB9XG4gICAgaWYgKGVsZS5pc0VkZ2UoKSAmJiBlbGUuaXNCdW5kbGVkQmV6aWVyKCkpIHtcbiAgICAgIGlmIChlbGUucGFyYWxsZWxFZGdlcygpLnNvbWUoZnVuY3Rpb24gKGVsZSkge1xuICAgICAgICByZXR1cm4gIWVsZS5fcHJpdmF0ZS5yc3R5bGUuY2xlYW4gJiYgZWxlLmlzQnVuZGxlZEJlemllcigpO1xuICAgICAgfSkpIHtcbiAgICAgICAgcnN0eWxlLmNsZWFuID0gZmFsc2U7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gb25seSB1cGRhdGUgaWYgZGlydHkgYW5kIGluIGdyYXBoXG4gICAgaWYgKHVzZUNhY2hlICYmIHJzdHlsZS5jbGVhbiB8fCBlbGUucmVtb3ZlZCgpKSB7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG5cbiAgICAvLyBvbmx5IHVwZGF0ZSBpZiBub3QgZGlzcGxheTogbm9uZVxuICAgIGlmIChlbGUucHN0eWxlKCdkaXNwbGF5JykudmFsdWUgPT09ICdub25lJykge1xuICAgICAgY29udGludWU7XG4gICAgfVxuICAgIGlmIChfcC5ncm91cCA9PT0gJ25vZGVzJykge1xuICAgICAgbm9kZXMucHVzaChlbGUpO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBlZGdlc1xuICAgICAgZWRnZXMucHVzaChlbGUpO1xuICAgIH1cbiAgICByc3R5bGUuY2xlYW4gPSB0cnVlO1xuICB9XG5cbiAgLy8gdXBkYXRlIG5vZGUgZGF0YSBmcm9tIHByb2plY3Rpb25zXG4gIGZvciAodmFyIF9pMiA9IDA7IF9pMiA8IG5vZGVzLmxlbmd0aDsgX2kyKyspIHtcbiAgICB2YXIgX2VsZSA9IG5vZGVzW19pMl07XG4gICAgdmFyIF9wMiA9IF9lbGUuX3ByaXZhdGU7XG4gICAgdmFyIF9yc3R5bGUgPSBfcDIucnN0eWxlO1xuICAgIHZhciBwb3MgPSBfZWxlLnBvc2l0aW9uKCk7XG4gICAgdGhpcy5yZWNhbGN1bGF0ZU5vZGVMYWJlbFByb2plY3Rpb24oX2VsZSk7XG4gICAgX3JzdHlsZS5ub2RlWCA9IHBvcy54O1xuICAgIF9yc3R5bGUubm9kZVkgPSBwb3MueTtcbiAgICBfcnN0eWxlLm5vZGVXID0gX2VsZS5wc3R5bGUoJ3dpZHRoJykucGZWYWx1ZTtcbiAgICBfcnN0eWxlLm5vZGVIID0gX2VsZS5wc3R5bGUoJ2hlaWdodCcpLnBmVmFsdWU7XG4gIH1cbiAgdGhpcy5yZWNhbGN1bGF0ZUVkZ2VQcm9qZWN0aW9ucyhlZGdlcyk7XG5cbiAgLy8gdXBkYXRlIGVkZ2UgZGF0YSBmcm9tIHByb2plY3Rpb25zXG4gIGZvciAodmFyIF9pMyA9IDA7IF9pMyA8IGVkZ2VzLmxlbmd0aDsgX2kzKyspIHtcbiAgICB2YXIgX2VsZTIgPSBlZGdlc1tfaTNdO1xuICAgIHZhciBfcDMgPSBfZWxlMi5fcHJpdmF0ZTtcbiAgICB2YXIgX3JzdHlsZTIgPSBfcDMucnN0eWxlO1xuICAgIHZhciBycyA9IF9wMy5yc2NyYXRjaDtcblxuICAgIC8vIHVwZGF0ZSByc3R5bGUgcG9zaXRpb25zXG4gICAgX3JzdHlsZTIuc3JjWCA9IHJzLmFycm93U3RhcnRYO1xuICAgIF9yc3R5bGUyLnNyY1kgPSBycy5hcnJvd1N0YXJ0WTtcbiAgICBfcnN0eWxlMi50Z3RYID0gcnMuYXJyb3dFbmRYO1xuICAgIF9yc3R5bGUyLnRndFkgPSBycy5hcnJvd0VuZFk7XG4gICAgX3JzdHlsZTIubWlkWCA9IHJzLm1pZFg7XG4gICAgX3JzdHlsZTIubWlkWSA9IHJzLm1pZFk7XG4gICAgX3JzdHlsZTIubGFiZWxBbmdsZSA9IHJzLmxhYmVsQW5nbGU7XG4gICAgX3JzdHlsZTIuc291cmNlTGFiZWxBbmdsZSA9IHJzLnNvdXJjZUxhYmVsQW5nbGU7XG4gICAgX3JzdHlsZTIudGFyZ2V0TGFiZWxBbmdsZSA9IHJzLnRhcmdldExhYmVsQW5nbGU7XG4gIH1cbn07XG5cbnZhciBCUnAkNiA9IHt9O1xuQlJwJDYudXBkYXRlQ2FjaGVkR3JhYmJlZEVsZXMgPSBmdW5jdGlvbiAoKSB7XG4gIHZhciBlbGVzID0gdGhpcy5jYWNoZWRaU29ydGVkRWxlcztcbiAgaWYgKCFlbGVzKSB7XG4gICAgLy8ganVzdCBsZXQgdGhpcyBiZSByZWNhbGN1bGF0ZWQgb24gdGhlIG5leHQgeiBzb3J0IHRpY2tcbiAgICByZXR1cm47XG4gIH1cbiAgZWxlcy5kcmFnID0gW107XG4gIGVsZXMubm9uZHJhZyA9IFtdO1xuICB2YXIgZ3JhYlRhcmdldHMgPSBbXTtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBlbGVzLmxlbmd0aDsgaSsrKSB7XG4gICAgdmFyIGVsZSA9IGVsZXNbaV07XG4gICAgdmFyIHJzID0gZWxlLl9wcml2YXRlLnJzY3JhdGNoO1xuICAgIGlmIChlbGUuZ3JhYmJlZCgpICYmICFlbGUuaXNQYXJlbnQoKSkge1xuICAgICAgZ3JhYlRhcmdldHMucHVzaChlbGUpO1xuICAgIH0gZWxzZSBpZiAocnMuaW5EcmFnTGF5ZXIpIHtcbiAgICAgIGVsZXMuZHJhZy5wdXNoKGVsZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGVsZXMubm9uZHJhZy5wdXNoKGVsZSk7XG4gICAgfVxuICB9XG5cbiAgLy8gcHV0IHRoZSBncmFiIHRhcmdldCBub2RlcyBsYXN0IHNvIGl0J3Mgb24gdG9wIG9mIGl0cyBuZWlnaGJvdXJob29kXG4gIGZvciAodmFyIGkgPSAwOyBpIDwgZ3JhYlRhcmdldHMubGVuZ3RoOyBpKyspIHtcbiAgICB2YXIgZWxlID0gZ3JhYlRhcmdldHNbaV07XG4gICAgZWxlcy5kcmFnLnB1c2goZWxlKTtcbiAgfVxufTtcbkJScCQ2LmludmFsaWRhdGVDYWNoZWRaU29ydGVkRWxlcyA9IGZ1bmN0aW9uICgpIHtcbiAgdGhpcy5jYWNoZWRaU29ydGVkRWxlcyA9IG51bGw7XG59O1xuQlJwJDYuZ2V0Q2FjaGVkWlNvcnRlZEVsZXMgPSBmdW5jdGlvbiAoZm9yY2VSZWNhbGMpIHtcbiAgaWYgKGZvcmNlUmVjYWxjIHx8ICF0aGlzLmNhY2hlZFpTb3J0ZWRFbGVzKSB7XG4gICAgdmFyIGVsZXMgPSB0aGlzLmN5Lm11dGFibGVFbGVtZW50cygpLnRvQXJyYXkoKTtcbiAgICBlbGVzLnNvcnQoekluZGV4U29ydCk7XG4gICAgZWxlcy5pbnRlcmFjdGl2ZSA9IGVsZXMuZmlsdGVyKGZ1bmN0aW9uIChlbGUpIHtcbiAgICAgIHJldHVybiBlbGUuaW50ZXJhY3RpdmUoKTtcbiAgICB9KTtcbiAgICB0aGlzLmNhY2hlZFpTb3J0ZWRFbGVzID0gZWxlcztcbiAgICB0aGlzLnVwZGF0ZUNhY2hlZEdyYWJiZWRFbGVzKCk7XG4gIH0gZWxzZSB7XG4gICAgZWxlcyA9IHRoaXMuY2FjaGVkWlNvcnRlZEVsZXM7XG4gIH1cbiAgcmV0dXJuIGVsZXM7XG59O1xuXG52YXIgQlJwJDUgPSB7fTtcbltCUnAkZSwgQlJwJGQsIEJScCRjLCBCUnAkYiwgQlJwJGEsIEJScCQ5LCBCUnAkOCwgQlJwJDcsIEJScCQ2XS5mb3JFYWNoKGZ1bmN0aW9uIChwcm9wcykge1xuICBleHRlbmQoQlJwJDUsIHByb3BzKTtcbn0pO1xuXG52YXIgQlJwJDQgPSB7fTtcbkJScCQ0LmdldENhY2hlZEltYWdlID0gZnVuY3Rpb24gKHVybCwgY3Jvc3NPcmlnaW4sIG9uTG9hZCkge1xuICB2YXIgciA9IHRoaXM7XG4gIHZhciBpbWFnZUNhY2hlID0gci5pbWFnZUNhY2hlID0gci5pbWFnZUNhY2hlIHx8IHt9O1xuICB2YXIgY2FjaGUgPSBpbWFnZUNhY2hlW3VybF07XG4gIGlmIChjYWNoZSkge1xuICAgIGlmICghY2FjaGUuaW1hZ2UuY29tcGxldGUpIHtcbiAgICAgIGNhY2hlLmltYWdlLmFkZEV2ZW50TGlzdGVuZXIoJ2xvYWQnLCBvbkxvYWQpO1xuICAgIH1cbiAgICByZXR1cm4gY2FjaGUuaW1hZ2U7XG4gIH0gZWxzZSB7XG4gICAgY2FjaGUgPSBpbWFnZUNhY2hlW3VybF0gPSBpbWFnZUNhY2hlW3VybF0gfHwge307XG4gICAgdmFyIGltYWdlID0gY2FjaGUuaW1hZ2UgPSBuZXcgSW1hZ2UoKTsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby11bmRlZlxuXG4gICAgaW1hZ2UuYWRkRXZlbnRMaXN0ZW5lcignbG9hZCcsIG9uTG9hZCk7XG4gICAgaW1hZ2UuYWRkRXZlbnRMaXN0ZW5lcignZXJyb3InLCBmdW5jdGlvbiAoKSB7XG4gICAgICBpbWFnZS5lcnJvciA9IHRydWU7XG4gICAgfSk7XG5cbiAgICAvLyAjMTU4MiBzYWZhcmkgZG9lc24ndCBsb2FkIGRhdGEgdXJpcyB3aXRoIGNyb3NzT3JpZ2luIHByb3Blcmx5XG4gICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEyMzk3OFxuICAgIHZhciBkYXRhVXJpUHJlZml4ID0gJ2RhdGE6JztcbiAgICB2YXIgaXNEYXRhVXJpID0gdXJsLnN1YnN0cmluZygwLCBkYXRhVXJpUHJlZml4Lmxlbmd0aCkudG9Mb3dlckNhc2UoKSA9PT0gZGF0YVVyaVByZWZpeDtcbiAgICBpZiAoIWlzRGF0YVVyaSkge1xuICAgICAgLy8gaWYgY3Jvc3NvcmlnaW4gaXMgJ251bGwnKHN0cmluZ2lmaWVkKSwgdGhlbiBtYW51YWxseSBzZXQgaXQgdG8gbnVsbCBcbiAgICAgIGNyb3NzT3JpZ2luID0gY3Jvc3NPcmlnaW4gPT09ICdudWxsJyA/IG51bGwgOiBjcm9zc09yaWdpbjtcbiAgICAgIGltYWdlLmNyb3NzT3JpZ2luID0gY3Jvc3NPcmlnaW47IC8vIHByZXZlbnQgdGFpbnRlZCBjYW52YXNcbiAgICB9XG4gICAgaW1hZ2Uuc3JjID0gdXJsO1xuICAgIHJldHVybiBpbWFnZTtcbiAgfVxufTtcblxudmFyIEJScCQzID0ge307XG5cbi8qIGdsb2JhbCBkb2N1bWVudCwgUmVzaXplT2JzZXJ2ZXIsIE11dGF0aW9uT2JzZXJ2ZXIgKi9cblxuQlJwJDMucmVnaXN0ZXJCaW5kaW5nID0gZnVuY3Rpb24gKHRhcmdldCwgZXZlbnQsIGhhbmRsZXIsIHVzZUNhcHR1cmUpIHtcbiAgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby11bnVzZWQtdmFyc1xuICB2YXIgYXJncyA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5hcHBseShhcmd1bWVudHMsIFsxXSk7IC8vIGNvcHlcblxuICBpZiAoQXJyYXkuaXNBcnJheSh0YXJnZXQpKSB7XG4gICAgdmFyIHJlcyA9IFtdO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGFyZ2V0Lmxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIgdCA9IHRhcmdldFtpXTtcbiAgICAgIGlmICh0ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgdmFyIGIgPSB0aGlzLmJpbmRlcih0KTtcbiAgICAgICAgcmVzLnB1c2goYi5vbi5hcHBseShiLCBhcmdzKSk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiByZXM7XG4gIH1cbiAgdmFyIGIgPSB0aGlzLmJpbmRlcih0YXJnZXQpO1xuICByZXR1cm4gYi5vbi5hcHBseShiLCBhcmdzKTtcbn07XG5CUnAkMy5iaW5kZXIgPSBmdW5jdGlvbiAodGd0KSB7XG4gIHZhciByID0gdGhpcztcbiAgdmFyIGNvbnRhaW5lcldpbmRvdyA9IHIuY3kud2luZG93KCk7XG4gIHZhciB0Z3RJc0RvbSA9IHRndCA9PT0gY29udGFpbmVyV2luZG93IHx8IHRndCA9PT0gY29udGFpbmVyV2luZG93LmRvY3VtZW50IHx8IHRndCA9PT0gY29udGFpbmVyV2luZG93LmRvY3VtZW50LmJvZHkgfHwgZG9tRWxlbWVudCh0Z3QpO1xuICBpZiAoci5zdXBwb3J0c1Bhc3NpdmVFdmVudHMgPT0gbnVsbCkge1xuICAgIC8vIGZyb20gaHR0cHM6Ly9naXRodWIuY29tL1dJQ0cvRXZlbnRMaXN0ZW5lck9wdGlvbnMvYmxvYi9naC1wYWdlcy9leHBsYWluZXIubWQjZmVhdHVyZS1kZXRlY3Rpb25cbiAgICB2YXIgc3VwcG9ydHNQYXNzaXZlID0gZmFsc2U7XG4gICAgdHJ5IHtcbiAgICAgIHZhciBvcHRzID0gT2JqZWN0LmRlZmluZVByb3BlcnR5KHt9LCAncGFzc2l2ZScsIHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgICAgICAgc3VwcG9ydHNQYXNzaXZlID0gdHJ1ZTtcbiAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgICBjb250YWluZXJXaW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigndGVzdCcsIG51bGwsIG9wdHMpO1xuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgLy8gbm90IHN1cHBvcnRlZFxuICAgIH1cbiAgICByLnN1cHBvcnRzUGFzc2l2ZUV2ZW50cyA9IHN1cHBvcnRzUGFzc2l2ZTtcbiAgfVxuICB2YXIgb24gPSBmdW5jdGlvbiBvbihldmVudCwgaGFuZGxlciwgdXNlQ2FwdHVyZSkge1xuICAgIHZhciBhcmdzID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzKTtcbiAgICBpZiAodGd0SXNEb20gJiYgci5zdXBwb3J0c1Bhc3NpdmVFdmVudHMpIHtcbiAgICAgIC8vIHJlcGxhY2UgdXNlQ2FwdHVyZSB3LyBvcHRzIG9ialxuICAgICAgYXJnc1syXSA9IHtcbiAgICAgICAgY2FwdHVyZTogdXNlQ2FwdHVyZSAhPSBudWxsID8gdXNlQ2FwdHVyZSA6IGZhbHNlLFxuICAgICAgICBwYXNzaXZlOiBmYWxzZSxcbiAgICAgICAgb25jZTogZmFsc2VcbiAgICAgIH07XG4gICAgfVxuICAgIHIuYmluZGluZ3MucHVzaCh7XG4gICAgICB0YXJnZXQ6IHRndCxcbiAgICAgIGFyZ3M6IGFyZ3NcbiAgICB9KTtcbiAgICAodGd0LmFkZEV2ZW50TGlzdGVuZXIgfHwgdGd0Lm9uKS5hcHBseSh0Z3QsIGFyZ3MpO1xuICAgIHJldHVybiB0aGlzO1xuICB9O1xuICByZXR1cm4ge1xuICAgIG9uOiBvbixcbiAgICBhZGRFdmVudExpc3RlbmVyOiBvbixcbiAgICBhZGRMaXN0ZW5lcjogb24sXG4gICAgYmluZDogb25cbiAgfTtcbn07XG5CUnAkMy5ub2RlSXNEcmFnZ2FibGUgPSBmdW5jdGlvbiAobm9kZSkge1xuICByZXR1cm4gbm9kZSAmJiBub2RlLmlzTm9kZSgpICYmICFub2RlLmxvY2tlZCgpICYmIG5vZGUuZ3JhYmJhYmxlKCk7XG59O1xuQlJwJDMubm9kZUlzR3JhYmJhYmxlID0gZnVuY3Rpb24gKG5vZGUpIHtcbiAgcmV0dXJuIHRoaXMubm9kZUlzRHJhZ2dhYmxlKG5vZGUpICYmIG5vZGUuaW50ZXJhY3RpdmUoKTtcbn07XG5CUnAkMy5sb2FkID0gZnVuY3Rpb24gKCkge1xuICB2YXIgciA9IHRoaXM7XG4gIHZhciBjb250YWluZXJXaW5kb3cgPSByLmN5LndpbmRvdygpO1xuICB2YXIgaXNTZWxlY3RlZCA9IGZ1bmN0aW9uIGlzU2VsZWN0ZWQoZWxlKSB7XG4gICAgcmV0dXJuIGVsZS5zZWxlY3RlZCgpO1xuICB9O1xuICB2YXIgZ2V0U2hhZG93Um9vdCA9IGZ1bmN0aW9uIGdldFNoYWRvd1Jvb3QoZWxlbWVudCkge1xuICAgIHZhciByb290Tm9kZSA9IGVsZW1lbnQuZ2V0Um9vdE5vZGUoKTtcbiAgICAvLyBDaGVjayBpZiB0aGUgcm9vdCBub2RlIGlzIGEgc2hhZG93IHJvb3RcbiAgICBpZiAocm9vdE5vZGUgJiYgcm9vdE5vZGUubm9kZVR5cGUgPT09IDExICYmIHJvb3ROb2RlLmhvc3QgIT09IHVuZGVmaW5lZCkge1xuICAgICAgcmV0dXJuIHJvb3ROb2RlO1xuICAgIH1cbiAgfTtcbiAgdmFyIHRyaWdnZXJFdmVudHMgPSBmdW5jdGlvbiB0cmlnZ2VyRXZlbnRzKHRhcmdldCwgbmFtZXMsIGUsIHBvc2l0aW9uKSB7XG4gICAgaWYgKHRhcmdldCA9PSBudWxsKSB7XG4gICAgICB0YXJnZXQgPSByLmN5O1xuICAgIH1cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IG5hbWVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIgbmFtZSA9IG5hbWVzW2ldO1xuICAgICAgdGFyZ2V0LmVtaXQoe1xuICAgICAgICBvcmlnaW5hbEV2ZW50OiBlLFxuICAgICAgICB0eXBlOiBuYW1lLFxuICAgICAgICBwb3NpdGlvbjogcG9zaXRpb25cbiAgICAgIH0pO1xuICAgIH1cbiAgfTtcbiAgdmFyIGlzTXVsdFNlbEtleURvd24gPSBmdW5jdGlvbiBpc011bHRTZWxLZXlEb3duKGUpIHtcbiAgICByZXR1cm4gZS5zaGlmdEtleSB8fCBlLm1ldGFLZXkgfHwgZS5jdHJsS2V5OyAvLyBtYXliZSBlLmFsdEtleVxuICB9O1xuICB2YXIgYWxsb3dQYW5uaW5nUGFzc3Rocm91Z2ggPSBmdW5jdGlvbiBhbGxvd1Bhbm5pbmdQYXNzdGhyb3VnaChkb3duLCBkb3ducykge1xuICAgIHZhciBhbGxvd1Bhc3N0aHJvdWdoID0gdHJ1ZTtcbiAgICBpZiAoci5jeS5oYXNDb21wb3VuZE5vZGVzKCkgJiYgZG93biAmJiBkb3duLnBhbm5hYmxlKCkpIHtcbiAgICAgIC8vIGEgZ3JhYmJhYmxlIGNvbXBvdW5kIG5vZGUgYmVsb3cgdGhlIGVsZSA9PiBubyBwYXNzdGhyb3VnaCBwYW5uaW5nXG4gICAgICBmb3IgKHZhciBpID0gMDsgZG93bnMgJiYgaSA8IGRvd25zLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIHZhciBkb3duID0gZG93bnNbaV07XG5cbiAgICAgICAgLy9pZiBhbnkgcGFyZW50IG5vZGUgaW4gZXZlbnQgaGllcmFyY2h5IGlzbid0IHBhbm5hYmxlLCByZWplY3QgcGFzc3Rocm91Z2hcbiAgICAgICAgaWYgKGRvd24uaXNOb2RlKCkgJiYgZG93bi5pc1BhcmVudCgpICYmICFkb3duLnBhbm5hYmxlKCkpIHtcbiAgICAgICAgICBhbGxvd1Bhc3N0aHJvdWdoID0gZmFsc2U7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgYWxsb3dQYXNzdGhyb3VnaCA9IHRydWU7XG4gICAgfVxuICAgIHJldHVybiBhbGxvd1Bhc3N0aHJvdWdoO1xuICB9O1xuICB2YXIgc2V0R3JhYmJlZCA9IGZ1bmN0aW9uIHNldEdyYWJiZWQoZWxlKSB7XG4gICAgZWxlWzBdLl9wcml2YXRlLmdyYWJiZWQgPSB0cnVlO1xuICB9O1xuICB2YXIgc2V0RnJlZWQgPSBmdW5jdGlvbiBzZXRGcmVlZChlbGUpIHtcbiAgICBlbGVbMF0uX3ByaXZhdGUuZ3JhYmJlZCA9IGZhbHNlO1xuICB9O1xuICB2YXIgc2V0SW5EcmFnTGF5ZXIgPSBmdW5jdGlvbiBzZXRJbkRyYWdMYXllcihlbGUpIHtcbiAgICBlbGVbMF0uX3ByaXZhdGUucnNjcmF0Y2guaW5EcmFnTGF5ZXIgPSB0cnVlO1xuICB9O1xuICB2YXIgc2V0T3V0RHJhZ0xheWVyID0gZnVuY3Rpb24gc2V0T3V0RHJhZ0xheWVyKGVsZSkge1xuICAgIGVsZVswXS5fcHJpdmF0ZS5yc2NyYXRjaC5pbkRyYWdMYXllciA9IGZhbHNlO1xuICB9O1xuICB2YXIgc2V0R3JhYlRhcmdldCA9IGZ1bmN0aW9uIHNldEdyYWJUYXJnZXQoZWxlKSB7XG4gICAgZWxlWzBdLl9wcml2YXRlLnJzY3JhdGNoLmlzR3JhYlRhcmdldCA9IHRydWU7XG4gIH07XG4gIHZhciByZW1vdmVHcmFiVGFyZ2V0ID0gZnVuY3Rpb24gcmVtb3ZlR3JhYlRhcmdldChlbGUpIHtcbiAgICBlbGVbMF0uX3ByaXZhdGUucnNjcmF0Y2guaXNHcmFiVGFyZ2V0ID0gZmFsc2U7XG4gIH07XG4gIHZhciBhZGRUb0RyYWdMaXN0ID0gZnVuY3Rpb24gYWRkVG9EcmFnTGlzdChlbGUsIG9wdHMpIHtcbiAgICB2YXIgbGlzdCA9IG9wdHMuYWRkVG9MaXN0O1xuICAgIHZhciBsaXN0SGFzRWxlID0gbGlzdC5oYXMoZWxlKTtcbiAgICBpZiAoIWxpc3RIYXNFbGUgJiYgZWxlLmdyYWJiYWJsZSgpICYmICFlbGUubG9ja2VkKCkpIHtcbiAgICAgIGxpc3QubWVyZ2UoZWxlKTtcbiAgICAgIHNldEdyYWJiZWQoZWxlKTtcbiAgICB9XG4gIH07XG5cbiAgLy8gaGVscGVyIGZ1bmN0aW9uIHRvIGRldGVybWluZSB3aGljaCBjaGlsZCBub2RlcyBhbmQgaW5uZXIgZWRnZXNcbiAgLy8gb2YgYSBjb21wb3VuZCBub2RlIHRvIGJlIGRyYWdnZWQgYXMgd2VsbCBhcyB0aGUgZ3JhYmJlZCBhbmQgc2VsZWN0ZWQgbm9kZXNcbiAgdmFyIGFkZERlc2NlbmRhbnRzVG9EcmFnID0gZnVuY3Rpb24gYWRkRGVzY2VuZGFudHNUb0RyYWcobm9kZSwgb3B0cykge1xuICAgIGlmICghbm9kZS5jeSgpLmhhc0NvbXBvdW5kTm9kZXMoKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAob3B0cy5pbkRyYWdMYXllciA9PSBudWxsICYmIG9wdHMuYWRkVG9MaXN0ID09IG51bGwpIHtcbiAgICAgIHJldHVybjtcbiAgICB9IC8vIG5vdGhpbmcgdG8gZG9cblxuICAgIHZhciBpbm5lck5vZGVzID0gbm9kZS5kZXNjZW5kYW50cygpO1xuICAgIGlmIChvcHRzLmluRHJhZ0xheWVyKSB7XG4gICAgICBpbm5lck5vZGVzLmZvckVhY2goc2V0SW5EcmFnTGF5ZXIpO1xuICAgICAgaW5uZXJOb2Rlcy5jb25uZWN0ZWRFZGdlcygpLmZvckVhY2goc2V0SW5EcmFnTGF5ZXIpO1xuICAgIH1cbiAgICBpZiAob3B0cy5hZGRUb0xpc3QpIHtcbiAgICAgIGFkZFRvRHJhZ0xpc3QoaW5uZXJOb2Rlcywgb3B0cyk7XG4gICAgfVxuICB9O1xuXG4gIC8vIGFkZHMgdGhlIGdpdmVuIG5vZGVzIGFuZCBpdHMgbmVpZ2hib3VyaG9vZCB0byB0aGUgZHJhZyBsYXllclxuICB2YXIgYWRkTm9kZXNUb0RyYWcgPSBmdW5jdGlvbiBhZGROb2Rlc1RvRHJhZyhub2Rlcywgb3B0cykge1xuICAgIG9wdHMgPSBvcHRzIHx8IHt9O1xuICAgIHZhciBoYXNDb21wb3VuZE5vZGVzID0gbm9kZXMuY3koKS5oYXNDb21wb3VuZE5vZGVzKCk7XG4gICAgaWYgKG9wdHMuaW5EcmFnTGF5ZXIpIHtcbiAgICAgIG5vZGVzLmZvckVhY2goc2V0SW5EcmFnTGF5ZXIpO1xuICAgICAgbm9kZXMubmVpZ2hib3Job29kKCkuc3RkRmlsdGVyKGZ1bmN0aW9uIChlbGUpIHtcbiAgICAgICAgcmV0dXJuICFoYXNDb21wb3VuZE5vZGVzIHx8IGVsZS5pc0VkZ2UoKTtcbiAgICAgIH0pLmZvckVhY2goc2V0SW5EcmFnTGF5ZXIpO1xuICAgIH1cbiAgICBpZiAob3B0cy5hZGRUb0xpc3QpIHtcbiAgICAgIG5vZGVzLmZvckVhY2goZnVuY3Rpb24gKGVsZSkge1xuICAgICAgICBhZGRUb0RyYWdMaXN0KGVsZSwgb3B0cyk7XG4gICAgICB9KTtcbiAgICB9XG4gICAgYWRkRGVzY2VuZGFudHNUb0RyYWcobm9kZXMsIG9wdHMpOyAvLyBhbHdheXMgYWRkIHRvIGRyYWdcblxuICAgIC8vIGFsc28gYWRkIG5vZGVzIGFuZCBlZGdlcyByZWxhdGVkIHRvIHRoZSB0b3Btb3N0IGFuY2VzdG9yXG4gICAgdXBkYXRlQW5jZXN0b3JzSW5EcmFnTGF5ZXIobm9kZXMsIHtcbiAgICAgIGluRHJhZ0xheWVyOiBvcHRzLmluRHJhZ0xheWVyXG4gICAgfSk7XG4gICAgci51cGRhdGVDYWNoZWRHcmFiYmVkRWxlcygpO1xuICB9O1xuICB2YXIgYWRkTm9kZVRvRHJhZyA9IGFkZE5vZGVzVG9EcmFnO1xuICB2YXIgZnJlZURyYWdnZWRFbGVtZW50cyA9IGZ1bmN0aW9uIGZyZWVEcmFnZ2VkRWxlbWVudHMoZ3JhYmJlZEVsZXMpIHtcbiAgICBpZiAoIWdyYWJiZWRFbGVzKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8ganVzdCBnbyBvdmVyIGFsbCBlbGVtZW50cyByYXRoZXIgdGhhbiBkb2luZyBhIGJ1bmNoIG9mIChwb3NzaWJseSBleHBlbnNpdmUpIHRyYXZlcnNhbHNcbiAgICByLmdldENhY2hlZFpTb3J0ZWRFbGVzKCkuZm9yRWFjaChmdW5jdGlvbiAoZWxlKSB7XG4gICAgICBzZXRGcmVlZChlbGUpO1xuICAgICAgc2V0T3V0RHJhZ0xheWVyKGVsZSk7XG4gICAgICByZW1vdmVHcmFiVGFyZ2V0KGVsZSk7XG4gICAgfSk7XG4gICAgci51cGRhdGVDYWNoZWRHcmFiYmVkRWxlcygpO1xuICB9O1xuXG4gIC8vIGhlbHBlciBmdW5jdGlvbiB0byBkZXRlcm1pbmUgd2hpY2ggYW5jZXN0b3Igbm9kZXMgYW5kIGVkZ2VzIHNob3VsZCBnb1xuICAvLyB0byB0aGUgZHJhZyBsYXllciAob3Igc2hvdWxkIGJlIHJlbW92ZWQgZnJvbSBkcmFnIGxheWVyKS5cbiAgdmFyIHVwZGF0ZUFuY2VzdG9yc0luRHJhZ0xheWVyID0gZnVuY3Rpb24gdXBkYXRlQW5jZXN0b3JzSW5EcmFnTGF5ZXIobm9kZSwgb3B0cykge1xuICAgIGlmIChvcHRzLmluRHJhZ0xheWVyID09IG51bGwgJiYgb3B0cy5hZGRUb0xpc3QgPT0gbnVsbCkge1xuICAgICAgcmV0dXJuO1xuICAgIH0gLy8gbm90aGluZyB0byBkb1xuXG4gICAgaWYgKCFub2RlLmN5KCkuaGFzQ29tcG91bmROb2RlcygpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8gZmluZCB0b3AtbGV2ZWwgcGFyZW50XG4gICAgdmFyIHBhcmVudCA9IG5vZGUuYW5jZXN0b3JzKCkub3JwaGFucygpO1xuXG4gICAgLy8gbm8gcGFyZW50IG5vZGU6IG5vIG5vZGVzIHRvIGFkZCB0byB0aGUgZHJhZyBsYXllclxuICAgIGlmIChwYXJlbnQuc2FtZShub2RlKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB2YXIgbm9kZXMgPSBwYXJlbnQuZGVzY2VuZGFudHMoKS5zcGF3blNlbGYoKS5tZXJnZShwYXJlbnQpLnVubWVyZ2Uobm9kZSkudW5tZXJnZShub2RlLmRlc2NlbmRhbnRzKCkpO1xuICAgIHZhciBlZGdlcyA9IG5vZGVzLmNvbm5lY3RlZEVkZ2VzKCk7XG4gICAgaWYgKG9wdHMuaW5EcmFnTGF5ZXIpIHtcbiAgICAgIGVkZ2VzLmZvckVhY2goc2V0SW5EcmFnTGF5ZXIpO1xuICAgICAgbm9kZXMuZm9yRWFjaChzZXRJbkRyYWdMYXllcik7XG4gICAgfVxuICAgIGlmIChvcHRzLmFkZFRvTGlzdCkge1xuICAgICAgbm9kZXMuZm9yRWFjaChmdW5jdGlvbiAoZWxlKSB7XG4gICAgICAgIGFkZFRvRHJhZ0xpc3QoZWxlLCBvcHRzKTtcbiAgICAgIH0pO1xuICAgIH1cbiAgfTtcbiAgdmFyIGJsdXJBY3RpdmVEb21FbGVtZW50ID0gZnVuY3Rpb24gYmx1ckFjdGl2ZURvbUVsZW1lbnQoKSB7XG4gICAgaWYgKGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQgIT0gbnVsbCAmJiBkb2N1bWVudC5hY3RpdmVFbGVtZW50LmJsdXIgIT0gbnVsbCkge1xuICAgICAgZG9jdW1lbnQuYWN0aXZlRWxlbWVudC5ibHVyKCk7XG4gICAgfVxuICB9O1xuICB2YXIgaGF2ZU11dGF0aW9uc0FwaSA9IHR5cGVvZiBNdXRhdGlvbk9ic2VydmVyICE9PSAndW5kZWZpbmVkJztcbiAgdmFyIGhhdmVSZXNpemVPYnNlcnZlckFwaSA9IHR5cGVvZiBSZXNpemVPYnNlcnZlciAhPT0gJ3VuZGVmaW5lZCc7XG5cbiAgLy8gd2F0Y2ggZm9yIHdoZW4gdGhlIGN5IGNvbnRhaW5lciBpcyByZW1vdmVkIGZyb20gdGhlIGRvbVxuICBpZiAoaGF2ZU11dGF0aW9uc0FwaSkge1xuICAgIHIucmVtb3ZlT2JzZXJ2ZXIgPSBuZXcgTXV0YXRpb25PYnNlcnZlcihmdW5jdGlvbiAobXV0bnMpIHtcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tdW5kZWZcbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbXV0bnMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgdmFyIG11dG4gPSBtdXRuc1tpXTtcbiAgICAgICAgdmFyIHJOb2RlcyA9IG11dG4ucmVtb3ZlZE5vZGVzO1xuICAgICAgICBpZiAock5vZGVzKSB7XG4gICAgICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCByTm9kZXMubGVuZ3RoOyBqKyspIHtcbiAgICAgICAgICAgIHZhciByTm9kZSA9IHJOb2Rlc1tqXTtcbiAgICAgICAgICAgIGlmIChyTm9kZSA9PT0gci5jb250YWluZXIpIHtcbiAgICAgICAgICAgICAgci5kZXN0cm95KCk7XG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pO1xuICAgIGlmIChyLmNvbnRhaW5lci5wYXJlbnROb2RlKSB7XG4gICAgICByLnJlbW92ZU9ic2VydmVyLm9ic2VydmUoci5jb250YWluZXIucGFyZW50Tm9kZSwge1xuICAgICAgICBjaGlsZExpc3Q6IHRydWVcbiAgICAgIH0pO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICByLnJlZ2lzdGVyQmluZGluZyhyLmNvbnRhaW5lciwgJ0RPTU5vZGVSZW1vdmVkJywgZnVuY3Rpb24gKGUpIHtcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tdW51c2VkLXZhcnNcbiAgICAgIHIuZGVzdHJveSgpO1xuICAgIH0pO1xuICB9XG4gIHZhciBvblJlc2l6ZSA9IGRlYm91bmNlKGZ1bmN0aW9uICgpIHtcbiAgICByLmN5LnJlc2l6ZSgpO1xuICB9LCAxMDApO1xuICBpZiAoaGF2ZU11dGF0aW9uc0FwaSkge1xuICAgIHIuc3R5bGVPYnNlcnZlciA9IG5ldyBNdXRhdGlvbk9ic2VydmVyKG9uUmVzaXplKTsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby11bmRlZlxuXG4gICAgci5zdHlsZU9ic2VydmVyLm9ic2VydmUoci5jb250YWluZXIsIHtcbiAgICAgIGF0dHJpYnV0ZXM6IHRydWVcbiAgICB9KTtcbiAgfVxuXG4gIC8vIGF1dG8gcmVzaXplXG4gIHIucmVnaXN0ZXJCaW5kaW5nKGNvbnRhaW5lcldpbmRvdywgJ3Jlc2l6ZScsIG9uUmVzaXplKTsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby11bmRlZlxuXG4gIGlmIChoYXZlUmVzaXplT2JzZXJ2ZXJBcGkpIHtcbiAgICByLnJlc2l6ZU9ic2VydmVyID0gbmV3IFJlc2l6ZU9ic2VydmVyKG9uUmVzaXplKTsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby11bmRlZlxuXG4gICAgci5yZXNpemVPYnNlcnZlci5vYnNlcnZlKHIuY29udGFpbmVyKTtcbiAgfVxuICB2YXIgZm9yRWFjaFVwID0gZnVuY3Rpb24gZm9yRWFjaFVwKGRvbUVsZSwgZm4pIHtcbiAgICB3aGlsZSAoZG9tRWxlICE9IG51bGwpIHtcbiAgICAgIGZuKGRvbUVsZSk7XG4gICAgICBkb21FbGUgPSBkb21FbGUucGFyZW50Tm9kZTtcbiAgICB9XG4gIH07XG4gIHZhciBpbnZhbGlkYXRlQ29vcmRzID0gZnVuY3Rpb24gaW52YWxpZGF0ZUNvb3JkcygpIHtcbiAgICByLmludmFsaWRhdGVDb250YWluZXJDbGllbnRDb29yZHNDYWNoZSgpO1xuICB9O1xuICBmb3JFYWNoVXAoci5jb250YWluZXIsIGZ1bmN0aW9uIChkb21FbGUpIHtcbiAgICByLnJlZ2lzdGVyQmluZGluZyhkb21FbGUsICd0cmFuc2l0aW9uZW5kJywgaW52YWxpZGF0ZUNvb3Jkcyk7XG4gICAgci5yZWdpc3RlckJpbmRpbmcoZG9tRWxlLCAnYW5pbWF0aW9uZW5kJywgaW52YWxpZGF0ZUNvb3Jkcyk7XG4gICAgci5yZWdpc3RlckJpbmRpbmcoZG9tRWxlLCAnc2Nyb2xsJywgaW52YWxpZGF0ZUNvb3Jkcyk7XG4gIH0pO1xuXG4gIC8vIHN0b3AgcmlnaHQgY2xpY2sgbWVudSBmcm9tIGFwcGVhcmluZyBvbiBjeVxuICByLnJlZ2lzdGVyQmluZGluZyhyLmNvbnRhaW5lciwgJ2NvbnRleHRtZW51JywgZnVuY3Rpb24gKGUpIHtcbiAgICBlLnByZXZlbnREZWZhdWx0KCk7XG4gIH0pO1xuICB2YXIgaW5Cb3hTZWxlY3Rpb24gPSBmdW5jdGlvbiBpbkJveFNlbGVjdGlvbigpIHtcbiAgICByZXR1cm4gci5zZWxlY3Rpb25bNF0gIT09IDA7XG4gIH07XG4gIHZhciBldmVudEluQ29udGFpbmVyID0gZnVuY3Rpb24gZXZlbnRJbkNvbnRhaW5lcihlKSB7XG4gICAgLy8gc2F2ZSBjeWNsZXMgaWYgbW91c2UgZXZlbnRzIGFyZW4ndCB0byBiZSBjYXB0dXJlZFxuICAgIHZhciBjb250YWluZXJQYWdlQ29vcmRzID0gci5maW5kQ29udGFpbmVyQ2xpZW50Q29vcmRzKCk7XG4gICAgdmFyIHggPSBjb250YWluZXJQYWdlQ29vcmRzWzBdO1xuICAgIHZhciB5ID0gY29udGFpbmVyUGFnZUNvb3Jkc1sxXTtcbiAgICB2YXIgd2lkdGggPSBjb250YWluZXJQYWdlQ29vcmRzWzJdO1xuICAgIHZhciBoZWlnaHQgPSBjb250YWluZXJQYWdlQ29vcmRzWzNdO1xuICAgIHZhciBwb3NpdGlvbnMgPSBlLnRvdWNoZXMgPyBlLnRvdWNoZXMgOiBbZV07XG4gICAgdmFyIGF0TGVhc3RPbmVQb3NJbnNpZGUgPSBmYWxzZTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHBvc2l0aW9ucy5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIHAgPSBwb3NpdGlvbnNbaV07XG4gICAgICBpZiAoeCA8PSBwLmNsaWVudFggJiYgcC5jbGllbnRYIDw9IHggKyB3aWR0aCAmJiB5IDw9IHAuY2xpZW50WSAmJiBwLmNsaWVudFkgPD0geSArIGhlaWdodCkge1xuICAgICAgICBhdExlYXN0T25lUG9zSW5zaWRlID0gdHJ1ZTtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfVxuICAgIGlmICghYXRMZWFzdE9uZVBvc0luc2lkZSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICB2YXIgY29udGFpbmVyID0gci5jb250YWluZXI7XG4gICAgdmFyIHRhcmdldCA9IGUudGFyZ2V0O1xuICAgIHZhciB0UGFyZW50ID0gdGFyZ2V0LnBhcmVudE5vZGU7XG4gICAgdmFyIGNvbnRhaW5lcklzVGFyZ2V0ID0gZmFsc2U7XG4gICAgd2hpbGUgKHRQYXJlbnQpIHtcbiAgICAgIGlmICh0UGFyZW50ID09PSBjb250YWluZXIpIHtcbiAgICAgICAgY29udGFpbmVySXNUYXJnZXQgPSB0cnVlO1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICAgIHRQYXJlbnQgPSB0UGFyZW50LnBhcmVudE5vZGU7XG4gICAgfVxuICAgIGlmICghY29udGFpbmVySXNUYXJnZXQpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9IC8vIGlmIHRhcmdldCBpcyBvdXRpc2RlIGN5IGNvbnRhaW5lciwgdGhlbiB0aGlzIGV2ZW50IGlzIG5vdCBmb3IgdXNcblxuICAgIHJldHVybiB0cnVlO1xuICB9O1xuXG4gIC8vIFByaW1hcnkga2V5XG4gIHIucmVnaXN0ZXJCaW5kaW5nKHIuY29udGFpbmVyLCAnbW91c2Vkb3duJywgZnVuY3Rpb24gbW91c2Vkb3duSGFuZGxlcihlKSB7XG4gICAgaWYgKCFldmVudEluQ29udGFpbmVyKGUpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8gZHVyaW5nIGxlZnQgbW91c2UgYnV0dG9uIGdlc3R1cmVzLCBpZ25vcmUgb3RoZXIgYnV0dG9uc1xuICAgIGlmIChyLmhvdmVyRGF0YS53aGljaCA9PT0gMSAmJiBlLndoaWNoICE9PSAxKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgICBibHVyQWN0aXZlRG9tRWxlbWVudCgpO1xuICAgIHIuaG92ZXJEYXRhLmNhcHR1cmUgPSB0cnVlO1xuICAgIHIuaG92ZXJEYXRhLndoaWNoID0gZS53aGljaDtcbiAgICB2YXIgY3kgPSByLmN5O1xuICAgIHZhciBncG9zID0gW2UuY2xpZW50WCwgZS5jbGllbnRZXTtcbiAgICB2YXIgcG9zID0gci5wcm9qZWN0SW50b1ZpZXdwb3J0KGdwb3NbMF0sIGdwb3NbMV0pO1xuICAgIHZhciBzZWxlY3QgPSByLnNlbGVjdGlvbjtcbiAgICB2YXIgbmVhcnMgPSByLmZpbmROZWFyZXN0RWxlbWVudHMocG9zWzBdLCBwb3NbMV0sIHRydWUsIGZhbHNlKTtcbiAgICB2YXIgbmVhciA9IG5lYXJzWzBdO1xuICAgIHZhciBkcmFnZ2VkRWxlbWVudHMgPSByLmRyYWdEYXRhLnBvc3NpYmxlRHJhZ0VsZW1lbnRzO1xuICAgIHIuaG92ZXJEYXRhLm1kb3duUG9zID0gcG9zO1xuICAgIHIuaG92ZXJEYXRhLm1kb3duR1BvcyA9IGdwb3M7XG4gICAgdmFyIGNoZWNrRm9yVGFwaG9sZCA9IGZ1bmN0aW9uIGNoZWNrRm9yVGFwaG9sZCgpIHtcbiAgICAgIHIuaG92ZXJEYXRhLnRhcGhvbGRDYW5jZWxsZWQgPSBmYWxzZTtcbiAgICAgIGNsZWFyVGltZW91dChyLmhvdmVyRGF0YS50YXBob2xkVGltZW91dCk7XG4gICAgICByLmhvdmVyRGF0YS50YXBob2xkVGltZW91dCA9IHNldFRpbWVvdXQoZnVuY3Rpb24gKCkge1xuICAgICAgICBpZiAoci5ob3ZlckRhdGEudGFwaG9sZENhbmNlbGxlZCkge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB2YXIgZWxlID0gci5ob3ZlckRhdGEuZG93bjtcbiAgICAgICAgICBpZiAoZWxlKSB7XG4gICAgICAgICAgICBlbGUuZW1pdCh7XG4gICAgICAgICAgICAgIG9yaWdpbmFsRXZlbnQ6IGUsXG4gICAgICAgICAgICAgIHR5cGU6ICd0YXBob2xkJyxcbiAgICAgICAgICAgICAgcG9zaXRpb246IHtcbiAgICAgICAgICAgICAgICB4OiBwb3NbMF0sXG4gICAgICAgICAgICAgICAgeTogcG9zWzFdXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjeS5lbWl0KHtcbiAgICAgICAgICAgICAgb3JpZ2luYWxFdmVudDogZSxcbiAgICAgICAgICAgICAgdHlwZTogJ3RhcGhvbGQnLFxuICAgICAgICAgICAgICBwb3NpdGlvbjoge1xuICAgICAgICAgICAgICAgIHg6IHBvc1swXSxcbiAgICAgICAgICAgICAgICB5OiBwb3NbMV1cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9LCByLnRhcGhvbGREdXJhdGlvbik7XG4gICAgfTtcblxuICAgIC8vIFJpZ2h0IGNsaWNrIGJ1dHRvblxuICAgIGlmIChlLndoaWNoID09IDMpIHtcbiAgICAgIHIuaG92ZXJEYXRhLmN4dFN0YXJ0ZWQgPSB0cnVlO1xuICAgICAgdmFyIGN4dEV2dCA9IHtcbiAgICAgICAgb3JpZ2luYWxFdmVudDogZSxcbiAgICAgICAgdHlwZTogJ2N4dHRhcHN0YXJ0JyxcbiAgICAgICAgcG9zaXRpb246IHtcbiAgICAgICAgICB4OiBwb3NbMF0sXG4gICAgICAgICAgeTogcG9zWzFdXG4gICAgICAgIH1cbiAgICAgIH07XG4gICAgICBpZiAobmVhcikge1xuICAgICAgICBuZWFyLmFjdGl2YXRlKCk7XG4gICAgICAgIG5lYXIuZW1pdChjeHRFdnQpO1xuICAgICAgICByLmhvdmVyRGF0YS5kb3duID0gbmVhcjtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGN5LmVtaXQoY3h0RXZ0KTtcbiAgICAgIH1cbiAgICAgIHIuaG92ZXJEYXRhLmRvd25UaW1lID0gbmV3IERhdGUoKS5nZXRUaW1lKCk7XG4gICAgICByLmhvdmVyRGF0YS5jeHREcmFnZ2VkID0gZmFsc2U7XG5cbiAgICAgIC8vIFByaW1hcnkgYnV0dG9uXG4gICAgfSBlbHNlIGlmIChlLndoaWNoID09IDEpIHtcbiAgICAgIGlmIChuZWFyKSB7XG4gICAgICAgIG5lYXIuYWN0aXZhdGUoKTtcbiAgICAgIH1cblxuICAgICAgLy8gRWxlbWVudCBkcmFnZ2luZ1xuICAgICAge1xuICAgICAgICAvLyBJZiBzb21ldGhpbmcgaXMgdW5kZXIgdGhlIGN1cnNvciBhbmQgaXQgaXMgZHJhZ2dhYmxlLCBwcmVwYXJlIHRvIGdyYWIgaXRcbiAgICAgICAgaWYgKG5lYXIgIT0gbnVsbCkge1xuICAgICAgICAgIGlmIChyLm5vZGVJc0dyYWJiYWJsZShuZWFyKSkge1xuICAgICAgICAgICAgdmFyIG1ha2VFdmVudCA9IGZ1bmN0aW9uIG1ha2VFdmVudCh0eXBlKSB7XG4gICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgb3JpZ2luYWxFdmVudDogZSxcbiAgICAgICAgICAgICAgICB0eXBlOiB0eXBlLFxuICAgICAgICAgICAgICAgIHBvc2l0aW9uOiB7XG4gICAgICAgICAgICAgICAgICB4OiBwb3NbMF0sXG4gICAgICAgICAgICAgICAgICB5OiBwb3NbMV1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH07XG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgdmFyIHRyaWdnZXJHcmFiID0gZnVuY3Rpb24gdHJpZ2dlckdyYWIoZWxlKSB7XG4gICAgICAgICAgICAgIGVsZS5lbWl0KG1ha2VFdmVudCgnZ3JhYicpKTtcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICBzZXRHcmFiVGFyZ2V0KG5lYXIpO1xuICAgICAgICAgICAgaWYgKCFuZWFyLnNlbGVjdGVkKCkpIHtcbiAgICAgICAgICAgICAgZHJhZ2dlZEVsZW1lbnRzID0gci5kcmFnRGF0YS5wb3NzaWJsZURyYWdFbGVtZW50cyA9IGN5LmNvbGxlY3Rpb24oKTtcbiAgICAgICAgICAgICAgYWRkTm9kZVRvRHJhZyhuZWFyLCB7XG4gICAgICAgICAgICAgICAgYWRkVG9MaXN0OiBkcmFnZ2VkRWxlbWVudHNcbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgIG5lYXIuZW1pdChtYWtlRXZlbnQoJ2dyYWJvbicpKS5lbWl0KG1ha2VFdmVudCgnZ3JhYicpKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIGRyYWdnZWRFbGVtZW50cyA9IHIuZHJhZ0RhdGEucG9zc2libGVEcmFnRWxlbWVudHMgPSBjeS5jb2xsZWN0aW9uKCk7XG4gICAgICAgICAgICAgIHZhciBzZWxlY3RlZE5vZGVzID0gY3kuJChmdW5jdGlvbiAoZWxlKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGVsZS5pc05vZGUoKSAmJiBlbGUuc2VsZWN0ZWQoKSAmJiByLm5vZGVJc0dyYWJiYWJsZShlbGUpO1xuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgYWRkTm9kZXNUb0RyYWcoc2VsZWN0ZWROb2Rlcywge1xuICAgICAgICAgICAgICAgIGFkZFRvTGlzdDogZHJhZ2dlZEVsZW1lbnRzXG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICBuZWFyLmVtaXQobWFrZUV2ZW50KCdncmFib24nKSk7XG4gICAgICAgICAgICAgIHNlbGVjdGVkTm9kZXMuZm9yRWFjaCh0cmlnZ2VyR3JhYik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByLnJlZHJhd0hpbnQoJ2VsZXMnLCB0cnVlKTtcbiAgICAgICAgICAgIHIucmVkcmF3SGludCgnZHJhZycsIHRydWUpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByLmhvdmVyRGF0YS5kb3duID0gbmVhcjtcbiAgICAgICAgci5ob3ZlckRhdGEuZG93bnMgPSBuZWFycztcbiAgICAgICAgci5ob3ZlckRhdGEuZG93blRpbWUgPSBuZXcgRGF0ZSgpLmdldFRpbWUoKTtcbiAgICAgIH1cbiAgICAgIHRyaWdnZXJFdmVudHMobmVhciwgWydtb3VzZWRvd24nLCAndGFwc3RhcnQnLCAndm1vdXNlZG93biddLCBlLCB7XG4gICAgICAgIHg6IHBvc1swXSxcbiAgICAgICAgeTogcG9zWzFdXG4gICAgICB9KTtcbiAgICAgIGlmIChuZWFyID09IG51bGwpIHtcbiAgICAgICAgc2VsZWN0WzRdID0gMTtcbiAgICAgICAgci5kYXRhLmJnQWN0aXZlUG9zaXN0aW9uID0ge1xuICAgICAgICAgIHg6IHBvc1swXSxcbiAgICAgICAgICB5OiBwb3NbMV1cbiAgICAgICAgfTtcbiAgICAgICAgci5yZWRyYXdIaW50KCdzZWxlY3QnLCB0cnVlKTtcbiAgICAgICAgci5yZWRyYXcoKTtcbiAgICAgIH0gZWxzZSBpZiAobmVhci5wYW5uYWJsZSgpKSB7XG4gICAgICAgIHNlbGVjdFs0XSA9IDE7IC8vIGZvciBmdXR1cmUgcGFuXG4gICAgICB9XG4gICAgICBjaGVja0ZvclRhcGhvbGQoKTtcbiAgICB9XG5cbiAgICAvLyBJbml0aWFsaXplIHNlbGVjdGlvbiBib3ggY29vcmRpbmF0ZXNcbiAgICBzZWxlY3RbMF0gPSBzZWxlY3RbMl0gPSBwb3NbMF07XG4gICAgc2VsZWN0WzFdID0gc2VsZWN0WzNdID0gcG9zWzFdO1xuICB9LCBmYWxzZSk7XG4gIHZhciBzaGFkb3dSb290ID0gZ2V0U2hhZG93Um9vdChyLmNvbnRhaW5lcik7XG4gIHIucmVnaXN0ZXJCaW5kaW5nKFtjb250YWluZXJXaW5kb3csIHNoYWRvd1Jvb3RdLCAnbW91c2Vtb3ZlJywgZnVuY3Rpb24gbW91c2Vtb3ZlSGFuZGxlcihlKSB7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby11bmRlZlxuICAgIHZhciBjYXB0dXJlID0gci5ob3ZlckRhdGEuY2FwdHVyZTtcbiAgICBpZiAoIWNhcHR1cmUgJiYgIWV2ZW50SW5Db250YWluZXIoZSkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdmFyIHByZXZlbnREZWZhdWx0ID0gZmFsc2U7XG4gICAgdmFyIGN5ID0gci5jeTtcbiAgICB2YXIgem9vbSA9IGN5Lnpvb20oKTtcbiAgICB2YXIgZ3BvcyA9IFtlLmNsaWVudFgsIGUuY2xpZW50WV07XG4gICAgdmFyIHBvcyA9IHIucHJvamVjdEludG9WaWV3cG9ydChncG9zWzBdLCBncG9zWzFdKTtcbiAgICB2YXIgbWRvd25Qb3MgPSByLmhvdmVyRGF0YS5tZG93blBvcztcbiAgICB2YXIgbWRvd25HUG9zID0gci5ob3ZlckRhdGEubWRvd25HUG9zO1xuICAgIHZhciBzZWxlY3QgPSByLnNlbGVjdGlvbjtcbiAgICB2YXIgbmVhciA9IG51bGw7XG4gICAgaWYgKCFyLmhvdmVyRGF0YS5kcmFnZ2luZ0VsZXMgJiYgIXIuaG92ZXJEYXRhLmRyYWdnaW5nICYmICFyLmhvdmVyRGF0YS5zZWxlY3RpbmcpIHtcbiAgICAgIG5lYXIgPSByLmZpbmROZWFyZXN0RWxlbWVudChwb3NbMF0sIHBvc1sxXSwgdHJ1ZSwgZmFsc2UpO1xuICAgIH1cbiAgICB2YXIgbGFzdCA9IHIuaG92ZXJEYXRhLmxhc3Q7XG4gICAgdmFyIGRvd24gPSByLmhvdmVyRGF0YS5kb3duO1xuICAgIHZhciBkaXNwID0gW3Bvc1swXSAtIHNlbGVjdFsyXSwgcG9zWzFdIC0gc2VsZWN0WzNdXTtcbiAgICB2YXIgZHJhZ2dlZEVsZW1lbnRzID0gci5kcmFnRGF0YS5wb3NzaWJsZURyYWdFbGVtZW50cztcbiAgICB2YXIgaXNPdmVyVGhyZXNob2xkRHJhZztcbiAgICBpZiAobWRvd25HUG9zKSB7XG4gICAgICB2YXIgZHggPSBncG9zWzBdIC0gbWRvd25HUG9zWzBdO1xuICAgICAgdmFyIGR4MiA9IGR4ICogZHg7XG4gICAgICB2YXIgZHkgPSBncG9zWzFdIC0gbWRvd25HUG9zWzFdO1xuICAgICAgdmFyIGR5MiA9IGR5ICogZHk7XG4gICAgICB2YXIgZGlzdDIgPSBkeDIgKyBkeTI7XG4gICAgICByLmhvdmVyRGF0YS5pc092ZXJUaHJlc2hvbGREcmFnID0gaXNPdmVyVGhyZXNob2xkRHJhZyA9IGRpc3QyID49IHIuZGVza3RvcFRhcFRocmVzaG9sZDI7XG4gICAgfVxuICAgIHZhciBtdWx0U2VsS2V5RG93biA9IGlzTXVsdFNlbEtleURvd24oZSk7XG4gICAgaWYgKGlzT3ZlclRocmVzaG9sZERyYWcpIHtcbiAgICAgIHIuaG92ZXJEYXRhLnRhcGhvbGRDYW5jZWxsZWQgPSB0cnVlO1xuICAgIH1cbiAgICB2YXIgdXBkYXRlRHJhZ0RlbHRhID0gZnVuY3Rpb24gdXBkYXRlRHJhZ0RlbHRhKCkge1xuICAgICAgdmFyIGRyYWdEZWx0YSA9IHIuaG92ZXJEYXRhLmRyYWdEZWx0YSA9IHIuaG92ZXJEYXRhLmRyYWdEZWx0YSB8fCBbXTtcbiAgICAgIGlmIChkcmFnRGVsdGEubGVuZ3RoID09PSAwKSB7XG4gICAgICAgIGRyYWdEZWx0YS5wdXNoKGRpc3BbMF0pO1xuICAgICAgICBkcmFnRGVsdGEucHVzaChkaXNwWzFdKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGRyYWdEZWx0YVswXSArPSBkaXNwWzBdO1xuICAgICAgICBkcmFnRGVsdGFbMV0gKz0gZGlzcFsxXTtcbiAgICAgIH1cbiAgICB9O1xuICAgIHByZXZlbnREZWZhdWx0ID0gdHJ1ZTtcbiAgICB0cmlnZ2VyRXZlbnRzKG5lYXIsIFsnbW91c2Vtb3ZlJywgJ3Ztb3VzZW1vdmUnLCAndGFwZHJhZyddLCBlLCB7XG4gICAgICB4OiBwb3NbMF0sXG4gICAgICB5OiBwb3NbMV1cbiAgICB9KTtcbiAgICB2YXIgZ29JbnRvQm94TW9kZSA9IGZ1bmN0aW9uIGdvSW50b0JveE1vZGUoKSB7XG4gICAgICByLmRhdGEuYmdBY3RpdmVQb3Npc3Rpb24gPSB1bmRlZmluZWQ7XG4gICAgICBpZiAoIXIuaG92ZXJEYXRhLnNlbGVjdGluZykge1xuICAgICAgICBjeS5lbWl0KHtcbiAgICAgICAgICBvcmlnaW5hbEV2ZW50OiBlLFxuICAgICAgICAgIHR5cGU6ICdib3hzdGFydCcsXG4gICAgICAgICAgcG9zaXRpb246IHtcbiAgICAgICAgICAgIHg6IHBvc1swXSxcbiAgICAgICAgICAgIHk6IHBvc1sxXVxuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgICBzZWxlY3RbNF0gPSAxO1xuICAgICAgci5ob3ZlckRhdGEuc2VsZWN0aW5nID0gdHJ1ZTtcbiAgICAgIHIucmVkcmF3SGludCgnc2VsZWN0JywgdHJ1ZSk7XG4gICAgICByLnJlZHJhdygpO1xuICAgIH07XG5cbiAgICAvLyB0cmlnZ2VyIGNvbnRleHQgZHJhZyBpZiBybW91c2UgZG93blxuICAgIGlmIChyLmhvdmVyRGF0YS53aGljaCA9PT0gMykge1xuICAgICAgLy8gYnV0IG9ubHkgaWYgb3ZlciB0aHJlc2hvbGRcbiAgICAgIGlmIChpc092ZXJUaHJlc2hvbGREcmFnKSB7XG4gICAgICAgIHZhciBjeHRFdnQgPSB7XG4gICAgICAgICAgb3JpZ2luYWxFdmVudDogZSxcbiAgICAgICAgICB0eXBlOiAnY3h0ZHJhZycsXG4gICAgICAgICAgcG9zaXRpb246IHtcbiAgICAgICAgICAgIHg6IHBvc1swXSxcbiAgICAgICAgICAgIHk6IHBvc1sxXVxuICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICAgICAgaWYgKGRvd24pIHtcbiAgICAgICAgICBkb3duLmVtaXQoY3h0RXZ0KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBjeS5lbWl0KGN4dEV2dCk7XG4gICAgICAgIH1cbiAgICAgICAgci5ob3ZlckRhdGEuY3h0RHJhZ2dlZCA9IHRydWU7XG4gICAgICAgIGlmICghci5ob3ZlckRhdGEuY3h0T3ZlciB8fCBuZWFyICE9PSByLmhvdmVyRGF0YS5jeHRPdmVyKSB7XG4gICAgICAgICAgaWYgKHIuaG92ZXJEYXRhLmN4dE92ZXIpIHtcbiAgICAgICAgICAgIHIuaG92ZXJEYXRhLmN4dE92ZXIuZW1pdCh7XG4gICAgICAgICAgICAgIG9yaWdpbmFsRXZlbnQ6IGUsXG4gICAgICAgICAgICAgIHR5cGU6ICdjeHRkcmFnb3V0JyxcbiAgICAgICAgICAgICAgcG9zaXRpb246IHtcbiAgICAgICAgICAgICAgICB4OiBwb3NbMF0sXG4gICAgICAgICAgICAgICAgeTogcG9zWzFdXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH1cbiAgICAgICAgICByLmhvdmVyRGF0YS5jeHRPdmVyID0gbmVhcjtcbiAgICAgICAgICBpZiAobmVhcikge1xuICAgICAgICAgICAgbmVhci5lbWl0KHtcbiAgICAgICAgICAgICAgb3JpZ2luYWxFdmVudDogZSxcbiAgICAgICAgICAgICAgdHlwZTogJ2N4dGRyYWdvdmVyJyxcbiAgICAgICAgICAgICAgcG9zaXRpb246IHtcbiAgICAgICAgICAgICAgICB4OiBwb3NbMF0sXG4gICAgICAgICAgICAgICAgeTogcG9zWzFdXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICAvLyBDaGVjayBpZiB3ZSBhcmUgZHJhZyBwYW5uaW5nIHRoZSBlbnRpcmUgZ3JhcGhcbiAgICB9IGVsc2UgaWYgKHIuaG92ZXJEYXRhLmRyYWdnaW5nKSB7XG4gICAgICBwcmV2ZW50RGVmYXVsdCA9IHRydWU7XG4gICAgICBpZiAoY3kucGFubmluZ0VuYWJsZWQoKSAmJiBjeS51c2VyUGFubmluZ0VuYWJsZWQoKSkge1xuICAgICAgICB2YXIgZGVsdGFQO1xuICAgICAgICBpZiAoci5ob3ZlckRhdGEuanVzdFN0YXJ0ZWRQYW4pIHtcbiAgICAgICAgICB2YXIgbWRQb3MgPSByLmhvdmVyRGF0YS5tZG93blBvcztcbiAgICAgICAgICBkZWx0YVAgPSB7XG4gICAgICAgICAgICB4OiAocG9zWzBdIC0gbWRQb3NbMF0pICogem9vbSxcbiAgICAgICAgICAgIHk6IChwb3NbMV0gLSBtZFBvc1sxXSkgKiB6b29tXG4gICAgICAgICAgfTtcbiAgICAgICAgICByLmhvdmVyRGF0YS5qdXN0U3RhcnRlZFBhbiA9IGZhbHNlO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGRlbHRhUCA9IHtcbiAgICAgICAgICAgIHg6IGRpc3BbMF0gKiB6b29tLFxuICAgICAgICAgICAgeTogZGlzcFsxXSAqIHpvb21cbiAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICAgIGN5LnBhbkJ5KGRlbHRhUCk7XG4gICAgICAgIGN5LmVtaXQoJ2RyYWdwYW4nKTtcbiAgICAgICAgci5ob3ZlckRhdGEuZHJhZ2dlZCA9IHRydWU7XG4gICAgICB9XG5cbiAgICAgIC8vIE5lZWRzIHJlcHJvamVjdCBkdWUgdG8gcGFuIGNoYW5naW5nIHZpZXdwb3J0XG4gICAgICBwb3MgPSByLnByb2plY3RJbnRvVmlld3BvcnQoZS5jbGllbnRYLCBlLmNsaWVudFkpO1xuXG4gICAgICAvLyBDaGVja3MgcHJpbWFyeSBidXR0b24gZG93biAmIG91dCBvZiB0aW1lICYgbW91c2Ugbm90IG1vdmVkIG11Y2hcbiAgICB9IGVsc2UgaWYgKHNlbGVjdFs0XSA9PSAxICYmIChkb3duID09IG51bGwgfHwgZG93bi5wYW5uYWJsZSgpKSkge1xuICAgICAgaWYgKGlzT3ZlclRocmVzaG9sZERyYWcpIHtcbiAgICAgICAgaWYgKCFyLmhvdmVyRGF0YS5kcmFnZ2luZyAmJiBjeS5ib3hTZWxlY3Rpb25FbmFibGVkKCkgJiYgKG11bHRTZWxLZXlEb3duIHx8ICFjeS5wYW5uaW5nRW5hYmxlZCgpIHx8ICFjeS51c2VyUGFubmluZ0VuYWJsZWQoKSkpIHtcbiAgICAgICAgICBnb0ludG9Cb3hNb2RlKCk7XG4gICAgICAgIH0gZWxzZSBpZiAoIXIuaG92ZXJEYXRhLnNlbGVjdGluZyAmJiBjeS5wYW5uaW5nRW5hYmxlZCgpICYmIGN5LnVzZXJQYW5uaW5nRW5hYmxlZCgpKSB7XG4gICAgICAgICAgdmFyIGFsbG93UGFzc3Rocm91Z2ggPSBhbGxvd1Bhbm5pbmdQYXNzdGhyb3VnaChkb3duLCByLmhvdmVyRGF0YS5kb3ducyk7XG4gICAgICAgICAgaWYgKGFsbG93UGFzc3Rocm91Z2gpIHtcbiAgICAgICAgICAgIHIuaG92ZXJEYXRhLmRyYWdnaW5nID0gdHJ1ZTtcbiAgICAgICAgICAgIHIuaG92ZXJEYXRhLmp1c3RTdGFydGVkUGFuID0gdHJ1ZTtcbiAgICAgICAgICAgIHNlbGVjdFs0XSA9IDA7XG4gICAgICAgICAgICByLmRhdGEuYmdBY3RpdmVQb3Npc3Rpb24gPSBhcnJheTJwb2ludChtZG93blBvcyk7XG4gICAgICAgICAgICByLnJlZHJhd0hpbnQoJ3NlbGVjdCcsIHRydWUpO1xuICAgICAgICAgICAgci5yZWRyYXcoKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGRvd24gJiYgZG93bi5wYW5uYWJsZSgpICYmIGRvd24uYWN0aXZlKCkpIHtcbiAgICAgICAgICBkb3duLnVuYWN0aXZhdGUoKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBpZiAoZG93biAmJiBkb3duLnBhbm5hYmxlKCkgJiYgZG93bi5hY3RpdmUoKSkge1xuICAgICAgICBkb3duLnVuYWN0aXZhdGUoKTtcbiAgICAgIH1cbiAgICAgIGlmICgoIWRvd24gfHwgIWRvd24uZ3JhYmJlZCgpKSAmJiBuZWFyICE9IGxhc3QpIHtcbiAgICAgICAgaWYgKGxhc3QpIHtcbiAgICAgICAgICB0cmlnZ2VyRXZlbnRzKGxhc3QsIFsnbW91c2VvdXQnLCAndGFwZHJhZ291dCddLCBlLCB7XG4gICAgICAgICAgICB4OiBwb3NbMF0sXG4gICAgICAgICAgICB5OiBwb3NbMV1cbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBpZiAobmVhcikge1xuICAgICAgICAgIHRyaWdnZXJFdmVudHMobmVhciwgWydtb3VzZW92ZXInLCAndGFwZHJhZ292ZXInXSwgZSwge1xuICAgICAgICAgICAgeDogcG9zWzBdLFxuICAgICAgICAgICAgeTogcG9zWzFdXG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgci5ob3ZlckRhdGEubGFzdCA9IG5lYXI7XG4gICAgICB9XG4gICAgICBpZiAoZG93bikge1xuICAgICAgICBpZiAoaXNPdmVyVGhyZXNob2xkRHJhZykge1xuICAgICAgICAgIC8vIHRoZW4gd2UgY2FuIHRha2UgYWN0aW9uXG5cbiAgICAgICAgICBpZiAoY3kuYm94U2VsZWN0aW9uRW5hYmxlZCgpICYmIG11bHRTZWxLZXlEb3duKSB7XG4gICAgICAgICAgICAvLyB0aGVuIHNlbGVjdGlvbiBvdmVycmlkZXNcbiAgICAgICAgICAgIGlmIChkb3duICYmIGRvd24uZ3JhYmJlZCgpKSB7XG4gICAgICAgICAgICAgIGZyZWVEcmFnZ2VkRWxlbWVudHMoZHJhZ2dlZEVsZW1lbnRzKTtcbiAgICAgICAgICAgICAgZG93bi5lbWl0KCdmcmVlb24nKTtcbiAgICAgICAgICAgICAgZHJhZ2dlZEVsZW1lbnRzLmVtaXQoJ2ZyZWUnKTtcbiAgICAgICAgICAgICAgaWYgKHIuZHJhZ0RhdGEuZGlkRHJhZykge1xuICAgICAgICAgICAgICAgIGRvd24uZW1pdCgnZHJhZ2ZyZWVvbicpO1xuICAgICAgICAgICAgICAgIGRyYWdnZWRFbGVtZW50cy5lbWl0KCdkcmFnZnJlZScpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBnb0ludG9Cb3hNb2RlKCk7XG4gICAgICAgICAgfSBlbHNlIGlmIChkb3duICYmIGRvd24uZ3JhYmJlZCgpICYmIHIubm9kZUlzRHJhZ2dhYmxlKGRvd24pKSB7XG4gICAgICAgICAgICAvLyBkcmFnIG5vZGVcbiAgICAgICAgICAgIHZhciBqdXN0U3RhcnRlZERyYWcgPSAhci5kcmFnRGF0YS5kaWREcmFnO1xuICAgICAgICAgICAgaWYgKGp1c3RTdGFydGVkRHJhZykge1xuICAgICAgICAgICAgICByLnJlZHJhd0hpbnQoJ2VsZXMnLCB0cnVlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHIuZHJhZ0RhdGEuZGlkRHJhZyA9IHRydWU7IC8vIGluZGljYXRlIHRoYXQgd2UgYWN0dWFsbHkgZGlkIGRyYWcgdGhlIG5vZGVcblxuICAgICAgICAgICAgLy8gbm93LCBhZGQgdGhlIGVsZW1lbnRzIHRvIHRoZSBkcmFnIGxheWVyIGlmIG5vdCBkb25lIGFscmVhZHlcbiAgICAgICAgICAgIGlmICghci5ob3ZlckRhdGEuZHJhZ2dpbmdFbGVzKSB7XG4gICAgICAgICAgICAgIGFkZE5vZGVzVG9EcmFnKGRyYWdnZWRFbGVtZW50cywge1xuICAgICAgICAgICAgICAgIGluRHJhZ0xheWVyOiB0cnVlXG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdmFyIHRvdGFsU2hpZnQgPSB7XG4gICAgICAgICAgICAgIHg6IDAsXG4gICAgICAgICAgICAgIHk6IDBcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICBpZiAobnVtYmVyJDEoZGlzcFswXSkgJiYgbnVtYmVyJDEoZGlzcFsxXSkpIHtcbiAgICAgICAgICAgICAgdG90YWxTaGlmdC54ICs9IGRpc3BbMF07XG4gICAgICAgICAgICAgIHRvdGFsU2hpZnQueSArPSBkaXNwWzFdO1xuICAgICAgICAgICAgICBpZiAoanVzdFN0YXJ0ZWREcmFnKSB7XG4gICAgICAgICAgICAgICAgdmFyIGRyYWdEZWx0YSA9IHIuaG92ZXJEYXRhLmRyYWdEZWx0YTtcbiAgICAgICAgICAgICAgICBpZiAoZHJhZ0RlbHRhICYmIG51bWJlciQxKGRyYWdEZWx0YVswXSkgJiYgbnVtYmVyJDEoZHJhZ0RlbHRhWzFdKSkge1xuICAgICAgICAgICAgICAgICAgdG90YWxTaGlmdC54ICs9IGRyYWdEZWx0YVswXTtcbiAgICAgICAgICAgICAgICAgIHRvdGFsU2hpZnQueSArPSBkcmFnRGVsdGFbMV07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByLmhvdmVyRGF0YS5kcmFnZ2luZ0VsZXMgPSB0cnVlO1xuICAgICAgICAgICAgZHJhZ2dlZEVsZW1lbnRzLnNpbGVudFNoaWZ0KHRvdGFsU2hpZnQpLmVtaXQoJ3Bvc2l0aW9uIGRyYWcnKTtcbiAgICAgICAgICAgIHIucmVkcmF3SGludCgnZHJhZycsIHRydWUpO1xuICAgICAgICAgICAgci5yZWRyYXcoKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgLy8gb3RoZXJ3aXNlIHNhdmUgZHJhZyBkZWx0YSBmb3Igd2hlbiB3ZSBhY3R1YWxseSBzdGFydCBkcmFnZ2luZyBzbyB0aGUgcmVsYXRpdmUgZ3JhYiBwb3MgaXMgY29uc3RhbnRcbiAgICAgICAgICB1cGRhdGVEcmFnRGVsdGEoKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICAvLyBwcmV2ZW50IHRoZSBkcmFnZ2luZyBmcm9tIHRyaWdnZXJpbmcgdGV4dCBzZWxlY3Rpb24gb24gdGhlIHBhZ2VcbiAgICAgIHByZXZlbnREZWZhdWx0ID0gdHJ1ZTtcbiAgICB9XG4gICAgc2VsZWN0WzJdID0gcG9zWzBdO1xuICAgIHNlbGVjdFszXSA9IHBvc1sxXTtcbiAgICBpZiAocHJldmVudERlZmF1bHQpIHtcbiAgICAgIGlmIChlLnN0b3BQcm9wYWdhdGlvbikgZS5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgIGlmIChlLnByZXZlbnREZWZhdWx0KSBlLnByZXZlbnREZWZhdWx0KCk7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICB9LCBmYWxzZSk7XG4gIHZhciBjbGlja1RpbWVvdXQsIGRpZERvdWJsZUNsaWNrLCBwcmV2Q2xpY2tUaW1lU3RhbXA7XG4gIHIucmVnaXN0ZXJCaW5kaW5nKGNvbnRhaW5lcldpbmRvdywgJ21vdXNldXAnLCBmdW5jdGlvbiBtb3VzZXVwSGFuZGxlcihlKSB7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby11bmRlZlxuICAgIC8vIGR1cmluZyBsZWZ0IG1vdXNlIGJ1dHRvbiBnZXN0dXJlcywgaWdub3JlIG90aGVyIGJ1dHRvbnNcbiAgICBpZiAoci5ob3ZlckRhdGEud2hpY2ggPT09IDEgJiYgZS53aGljaCAhPT0gMSAmJiByLmhvdmVyRGF0YS5jYXB0dXJlKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHZhciBjYXB0dXJlID0gci5ob3ZlckRhdGEuY2FwdHVyZTtcbiAgICBpZiAoIWNhcHR1cmUpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgci5ob3ZlckRhdGEuY2FwdHVyZSA9IGZhbHNlO1xuICAgIHZhciBjeSA9IHIuY3k7XG4gICAgdmFyIHBvcyA9IHIucHJvamVjdEludG9WaWV3cG9ydChlLmNsaWVudFgsIGUuY2xpZW50WSk7XG4gICAgdmFyIHNlbGVjdCA9IHIuc2VsZWN0aW9uO1xuICAgIHZhciBuZWFyID0gci5maW5kTmVhcmVzdEVsZW1lbnQocG9zWzBdLCBwb3NbMV0sIHRydWUsIGZhbHNlKTtcbiAgICB2YXIgZHJhZ2dlZEVsZW1lbnRzID0gci5kcmFnRGF0YS5wb3NzaWJsZURyYWdFbGVtZW50cztcbiAgICB2YXIgZG93biA9IHIuaG92ZXJEYXRhLmRvd247XG4gICAgdmFyIG11bHRTZWxLZXlEb3duID0gaXNNdWx0U2VsS2V5RG93bihlKTtcbiAgICBpZiAoci5kYXRhLmJnQWN0aXZlUG9zaXN0aW9uKSB7XG4gICAgICByLnJlZHJhd0hpbnQoJ3NlbGVjdCcsIHRydWUpO1xuICAgICAgci5yZWRyYXcoKTtcbiAgICB9XG4gICAgci5ob3ZlckRhdGEudGFwaG9sZENhbmNlbGxlZCA9IHRydWU7XG4gICAgci5kYXRhLmJnQWN0aXZlUG9zaXN0aW9uID0gdW5kZWZpbmVkOyAvLyBub3QgYWN0aXZlIGJnIG5vd1xuXG4gICAgaWYgKGRvd24pIHtcbiAgICAgIGRvd24udW5hY3RpdmF0ZSgpO1xuICAgIH1cbiAgICBpZiAoci5ob3ZlckRhdGEud2hpY2ggPT09IDMpIHtcbiAgICAgIHZhciBjeHRFdnQgPSB7XG4gICAgICAgIG9yaWdpbmFsRXZlbnQ6IGUsXG4gICAgICAgIHR5cGU6ICdjeHR0YXBlbmQnLFxuICAgICAgICBwb3NpdGlvbjoge1xuICAgICAgICAgIHg6IHBvc1swXSxcbiAgICAgICAgICB5OiBwb3NbMV1cbiAgICAgICAgfVxuICAgICAgfTtcbiAgICAgIGlmIChkb3duKSB7XG4gICAgICAgIGRvd24uZW1pdChjeHRFdnQpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY3kuZW1pdChjeHRFdnQpO1xuICAgICAgfVxuICAgICAgaWYgKCFyLmhvdmVyRGF0YS5jeHREcmFnZ2VkKSB7XG4gICAgICAgIHZhciBjeHRUYXAgPSB7XG4gICAgICAgICAgb3JpZ2luYWxFdmVudDogZSxcbiAgICAgICAgICB0eXBlOiAnY3h0dGFwJyxcbiAgICAgICAgICBwb3NpdGlvbjoge1xuICAgICAgICAgICAgeDogcG9zWzBdLFxuICAgICAgICAgICAgeTogcG9zWzFdXG4gICAgICAgICAgfVxuICAgICAgICB9O1xuICAgICAgICBpZiAoZG93bikge1xuICAgICAgICAgIGRvd24uZW1pdChjeHRUYXApO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGN5LmVtaXQoY3h0VGFwKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgci5ob3ZlckRhdGEuY3h0RHJhZ2dlZCA9IGZhbHNlO1xuICAgICAgci5ob3ZlckRhdGEud2hpY2ggPSBudWxsO1xuICAgIH0gZWxzZSBpZiAoci5ob3ZlckRhdGEud2hpY2ggPT09IDEpIHtcbiAgICAgIHRyaWdnZXJFdmVudHMobmVhciwgWydtb3VzZXVwJywgJ3RhcGVuZCcsICd2bW91c2V1cCddLCBlLCB7XG4gICAgICAgIHg6IHBvc1swXSxcbiAgICAgICAgeTogcG9zWzFdXG4gICAgICB9KTtcbiAgICAgIGlmICghci5kcmFnRGF0YS5kaWREcmFnICYmXG4gICAgICAvLyBkaWRuJ3QgbW92ZSBhIG5vZGUgYXJvdW5kXG4gICAgICAhci5ob3ZlckRhdGEuZHJhZ2dlZCAmJlxuICAgICAgLy8gZGlkbid0IHBhblxuICAgICAgIXIuaG92ZXJEYXRhLnNlbGVjdGluZyAmJlxuICAgICAgLy8gbm90IGJveCBzZWxlY3Rpb25cbiAgICAgICFyLmhvdmVyRGF0YS5pc092ZXJUaHJlc2hvbGREcmFnIC8vIGRpZG4ndCBtb3ZlIHRvbyBtdWNoXG4gICAgICApIHtcbiAgICAgICAgdHJpZ2dlckV2ZW50cyhkb3duLCBbXCJjbGlja1wiLCBcInRhcFwiLCBcInZjbGlja1wiXSwgZSwge1xuICAgICAgICAgIHg6IHBvc1swXSxcbiAgICAgICAgICB5OiBwb3NbMV1cbiAgICAgICAgfSk7XG4gICAgICAgIGRpZERvdWJsZUNsaWNrID0gZmFsc2U7XG4gICAgICAgIGlmIChlLnRpbWVTdGFtcCAtIHByZXZDbGlja1RpbWVTdGFtcCA8PSBjeS5tdWx0aUNsaWNrRGVib3VuY2VUaW1lKCkpIHtcbiAgICAgICAgICBjbGlja1RpbWVvdXQgJiYgY2xlYXJUaW1lb3V0KGNsaWNrVGltZW91dCk7XG4gICAgICAgICAgZGlkRG91YmxlQ2xpY2sgPSB0cnVlO1xuICAgICAgICAgIHByZXZDbGlja1RpbWVTdGFtcCA9IG51bGw7XG4gICAgICAgICAgdHJpZ2dlckV2ZW50cyhkb3duLCBbXCJkYmxjbGlja1wiLCBcImRibHRhcFwiLCBcInZkYmxjbGlja1wiXSwgZSwge1xuICAgICAgICAgICAgeDogcG9zWzBdLFxuICAgICAgICAgICAgeTogcG9zWzFdXG4gICAgICAgICAgfSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgY2xpY2tUaW1lb3V0ID0gc2V0VGltZW91dChmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBpZiAoZGlkRG91YmxlQ2xpY2spIHJldHVybjtcbiAgICAgICAgICAgIHRyaWdnZXJFdmVudHMoZG93biwgW1wib25lY2xpY2tcIiwgXCJvbmV0YXBcIiwgXCJ2b25lY2xpY2tcIl0sIGUsIHtcbiAgICAgICAgICAgICAgeDogcG9zWzBdLFxuICAgICAgICAgICAgICB5OiBwb3NbMV1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH0sIGN5Lm11bHRpQ2xpY2tEZWJvdW5jZVRpbWUoKSk7XG4gICAgICAgICAgcHJldkNsaWNrVGltZVN0YW1wID0gZS50aW1lU3RhbXA7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgLy8gRGVzZWxlY3QgYWxsIGVsZW1lbnRzIGlmIG5vdGhpbmcgaXMgY3VycmVudGx5IHVuZGVyIHRoZSBtb3VzZSBjdXJzb3IgYW5kIHdlIGFyZW4ndCBkcmFnZ2luZyBzb21ldGhpbmdcbiAgICAgIGlmIChkb3duID09IG51bGwgLy8gbm90IG1vdXNlZG93biBvbiBub2RlXG4gICAgICAmJiAhci5kcmFnRGF0YS5kaWREcmFnIC8vIGRpZG4ndCBtb3ZlIHRoZSBub2RlIGFyb3VuZFxuICAgICAgJiYgIXIuaG92ZXJEYXRhLnNlbGVjdGluZyAvLyBub3QgYm94IHNlbGVjdGlvblxuICAgICAgJiYgIXIuaG92ZXJEYXRhLmRyYWdnZWQgLy8gZGlkbid0IHBhblxuICAgICAgJiYgIWlzTXVsdFNlbEtleURvd24oZSkpIHtcbiAgICAgICAgY3kuJChpc1NlbGVjdGVkKS51bnNlbGVjdChbJ3RhcHVuc2VsZWN0J10pO1xuICAgICAgICBpZiAoZHJhZ2dlZEVsZW1lbnRzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICByLnJlZHJhd0hpbnQoJ2VsZXMnLCB0cnVlKTtcbiAgICAgICAgfVxuICAgICAgICByLmRyYWdEYXRhLnBvc3NpYmxlRHJhZ0VsZW1lbnRzID0gZHJhZ2dlZEVsZW1lbnRzID0gY3kuY29sbGVjdGlvbigpO1xuICAgICAgfVxuXG4gICAgICAvLyBTaW5nbGUgc2VsZWN0aW9uXG4gICAgICBpZiAobmVhciA9PSBkb3duICYmICFyLmRyYWdEYXRhLmRpZERyYWcgJiYgIXIuaG92ZXJEYXRhLnNlbGVjdGluZykge1xuICAgICAgICBpZiAobmVhciAhPSBudWxsICYmIG5lYXIuX3ByaXZhdGUuc2VsZWN0YWJsZSkge1xuICAgICAgICAgIGlmIChyLmhvdmVyRGF0YS5kcmFnZ2luZykgOyBlbHNlIGlmIChjeS5zZWxlY3Rpb25UeXBlKCkgPT09ICdhZGRpdGl2ZScgfHwgbXVsdFNlbEtleURvd24pIHtcbiAgICAgICAgICAgIGlmIChuZWFyLnNlbGVjdGVkKCkpIHtcbiAgICAgICAgICAgICAgbmVhci51bnNlbGVjdChbJ3RhcHVuc2VsZWN0J10pO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgbmVhci5zZWxlY3QoWyd0YXBzZWxlY3QnXSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGlmICghbXVsdFNlbEtleURvd24pIHtcbiAgICAgICAgICAgICAgY3kuJChpc1NlbGVjdGVkKS51bm1lcmdlKG5lYXIpLnVuc2VsZWN0KFsndGFwdW5zZWxlY3QnXSk7XG4gICAgICAgICAgICAgIG5lYXIuc2VsZWN0KFsndGFwc2VsZWN0J10pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICByLnJlZHJhd0hpbnQoJ2VsZXMnLCB0cnVlKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYgKHIuaG92ZXJEYXRhLnNlbGVjdGluZykge1xuICAgICAgICB2YXIgYm94ID0gY3kuY29sbGVjdGlvbihyLmdldEFsbEluQm94KHNlbGVjdFswXSwgc2VsZWN0WzFdLCBzZWxlY3RbMl0sIHNlbGVjdFszXSkpO1xuICAgICAgICByLnJlZHJhd0hpbnQoJ3NlbGVjdCcsIHRydWUpO1xuICAgICAgICBpZiAoYm94Lmxlbmd0aCA+IDApIHtcbiAgICAgICAgICByLnJlZHJhd0hpbnQoJ2VsZXMnLCB0cnVlKTtcbiAgICAgICAgfVxuICAgICAgICBjeS5lbWl0KHtcbiAgICAgICAgICB0eXBlOiAnYm94ZW5kJyxcbiAgICAgICAgICBvcmlnaW5hbEV2ZW50OiBlLFxuICAgICAgICAgIHBvc2l0aW9uOiB7XG4gICAgICAgICAgICB4OiBwb3NbMF0sXG4gICAgICAgICAgICB5OiBwb3NbMV1cbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgICB2YXIgZWxlV291bGRCZVNlbGVjdGVkID0gZnVuY3Rpb24gZWxlV291bGRCZVNlbGVjdGVkKGVsZSkge1xuICAgICAgICAgIHJldHVybiBlbGUuc2VsZWN0YWJsZSgpICYmICFlbGUuc2VsZWN0ZWQoKTtcbiAgICAgICAgfTtcbiAgICAgICAgaWYgKGN5LnNlbGVjdGlvblR5cGUoKSA9PT0gJ2FkZGl0aXZlJykge1xuICAgICAgICAgIGJveC5lbWl0KCdib3gnKS5zdGRGaWx0ZXIoZWxlV291bGRCZVNlbGVjdGVkKS5zZWxlY3QoKS5lbWl0KCdib3hzZWxlY3QnKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBpZiAoIW11bHRTZWxLZXlEb3duKSB7XG4gICAgICAgICAgICBjeS4kKGlzU2VsZWN0ZWQpLnVubWVyZ2UoYm94KS51bnNlbGVjdCgpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBib3guZW1pdCgnYm94Jykuc3RkRmlsdGVyKGVsZVdvdWxkQmVTZWxlY3RlZCkuc2VsZWN0KCkuZW1pdCgnYm94c2VsZWN0Jyk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBhbHdheXMgbmVlZCByZWRyYXcgaW4gY2FzZSBlbGVzIHVuc2VsZWN0YWJsZVxuICAgICAgICByLnJlZHJhdygpO1xuICAgICAgfVxuXG4gICAgICAvLyBDYW5jZWwgZHJhZyBwYW5cbiAgICAgIGlmIChyLmhvdmVyRGF0YS5kcmFnZ2luZykge1xuICAgICAgICByLmhvdmVyRGF0YS5kcmFnZ2luZyA9IGZhbHNlO1xuICAgICAgICByLnJlZHJhd0hpbnQoJ3NlbGVjdCcsIHRydWUpO1xuICAgICAgICByLnJlZHJhd0hpbnQoJ2VsZXMnLCB0cnVlKTtcbiAgICAgICAgci5yZWRyYXcoKTtcbiAgICAgIH1cbiAgICAgIGlmICghc2VsZWN0WzRdKSB7XG4gICAgICAgIHIucmVkcmF3SGludCgnZHJhZycsIHRydWUpO1xuICAgICAgICByLnJlZHJhd0hpbnQoJ2VsZXMnLCB0cnVlKTtcbiAgICAgICAgdmFyIGRvd25XYXNHcmFiYmVkID0gZG93biAmJiBkb3duLmdyYWJiZWQoKTtcbiAgICAgICAgZnJlZURyYWdnZWRFbGVtZW50cyhkcmFnZ2VkRWxlbWVudHMpO1xuICAgICAgICBpZiAoZG93bldhc0dyYWJiZWQpIHtcbiAgICAgICAgICBkb3duLmVtaXQoJ2ZyZWVvbicpO1xuICAgICAgICAgIGRyYWdnZWRFbGVtZW50cy5lbWl0KCdmcmVlJyk7XG4gICAgICAgICAgaWYgKHIuZHJhZ0RhdGEuZGlkRHJhZykge1xuICAgICAgICAgICAgZG93bi5lbWl0KCdkcmFnZnJlZW9uJyk7XG4gICAgICAgICAgICBkcmFnZ2VkRWxlbWVudHMuZW1pdCgnZHJhZ2ZyZWUnKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IC8vIGVsc2Ugbm90IHJpZ2h0IG1vdXNlXG5cbiAgICBzZWxlY3RbNF0gPSAwO1xuICAgIHIuaG92ZXJEYXRhLmRvd24gPSBudWxsO1xuICAgIHIuaG92ZXJEYXRhLmN4dFN0YXJ0ZWQgPSBmYWxzZTtcbiAgICByLmhvdmVyRGF0YS5kcmFnZ2luZ0VsZXMgPSBmYWxzZTtcbiAgICByLmhvdmVyRGF0YS5zZWxlY3RpbmcgPSBmYWxzZTtcbiAgICByLmhvdmVyRGF0YS5pc092ZXJUaHJlc2hvbGREcmFnID0gZmFsc2U7XG4gICAgci5kcmFnRGF0YS5kaWREcmFnID0gZmFsc2U7XG4gICAgci5ob3ZlckRhdGEuZHJhZ2dlZCA9IGZhbHNlO1xuICAgIHIuaG92ZXJEYXRhLmRyYWdEZWx0YSA9IFtdO1xuICAgIHIuaG92ZXJEYXRhLm1kb3duUG9zID0gbnVsbDtcbiAgICByLmhvdmVyRGF0YS5tZG93bkdQb3MgPSBudWxsO1xuICAgIHIuaG92ZXJEYXRhLndoaWNoID0gbnVsbDtcbiAgfSwgZmFsc2UpO1xuICB2YXIgd2hlZWxIYW5kbGVyID0gZnVuY3Rpb24gd2hlZWxIYW5kbGVyKGUpIHtcbiAgICBpZiAoci5zY3JvbGxpbmdQYWdlKSB7XG4gICAgICByZXR1cm47XG4gICAgfSAvLyB3aGlsZSBzY3JvbGxpbmcsIGlnbm9yZSB3aGVlbC10by16b29tXG5cbiAgICB2YXIgY3kgPSByLmN5O1xuICAgIHZhciB6b29tID0gY3kuem9vbSgpO1xuICAgIHZhciBwYW4gPSBjeS5wYW4oKTtcbiAgICB2YXIgcG9zID0gci5wcm9qZWN0SW50b1ZpZXdwb3J0KGUuY2xpZW50WCwgZS5jbGllbnRZKTtcbiAgICB2YXIgcnBvcyA9IFtwb3NbMF0gKiB6b29tICsgcGFuLngsIHBvc1sxXSAqIHpvb20gKyBwYW4ueV07XG4gICAgaWYgKHIuaG92ZXJEYXRhLmRyYWdnaW5nRWxlcyB8fCByLmhvdmVyRGF0YS5kcmFnZ2luZyB8fCByLmhvdmVyRGF0YS5jeHRTdGFydGVkIHx8IGluQm94U2VsZWN0aW9uKCkpIHtcbiAgICAgIC8vIGlmIHBhbiBkcmFnZ2luZyBvciBjeHQgZHJhZ2dpbmcsIHdoZWVsIG1vdmVtZW50cyBtYWtlIG5vIHpvb21cbiAgICAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaWYgKGN5LnBhbm5pbmdFbmFibGVkKCkgJiYgY3kudXNlclBhbm5pbmdFbmFibGVkKCkgJiYgY3kuem9vbWluZ0VuYWJsZWQoKSAmJiBjeS51c2VyWm9vbWluZ0VuYWJsZWQoKSkge1xuICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgci5kYXRhLndoZWVsWm9vbWluZyA9IHRydWU7XG4gICAgICBjbGVhclRpbWVvdXQoci5kYXRhLndoZWVsVGltZW91dCk7XG4gICAgICByLmRhdGEud2hlZWxUaW1lb3V0ID0gc2V0VGltZW91dChmdW5jdGlvbiAoKSB7XG4gICAgICAgIHIuZGF0YS53aGVlbFpvb21pbmcgPSBmYWxzZTtcbiAgICAgICAgci5yZWRyYXdIaW50KCdlbGVzJywgdHJ1ZSk7XG4gICAgICAgIHIucmVkcmF3KCk7XG4gICAgICB9LCAxNTApO1xuICAgICAgdmFyIGRpZmY7XG4gICAgICBpZiAoZS5kZWx0YVkgIT0gbnVsbCkge1xuICAgICAgICBkaWZmID0gZS5kZWx0YVkgLyAtMjUwO1xuICAgICAgfSBlbHNlIGlmIChlLndoZWVsRGVsdGFZICE9IG51bGwpIHtcbiAgICAgICAgZGlmZiA9IGUud2hlZWxEZWx0YVkgLyAxMDAwO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZGlmZiA9IGUud2hlZWxEZWx0YSAvIDEwMDA7XG4gICAgICB9XG4gICAgICBkaWZmID0gZGlmZiAqIHIud2hlZWxTZW5zaXRpdml0eTtcbiAgICAgIHZhciBuZWVkc1doZWVsRml4ID0gZS5kZWx0YU1vZGUgPT09IDE7XG4gICAgICBpZiAobmVlZHNXaGVlbEZpeCkge1xuICAgICAgICAvLyBmaXhlcyBzbG93IHdoZWVsIGV2ZW50cyBvbiBmZi9saW51eCBhbmQgZmYvd2luZG93c1xuICAgICAgICBkaWZmICo9IDMzO1xuICAgICAgfVxuICAgICAgdmFyIG5ld1pvb20gPSBjeS56b29tKCkgKiBNYXRoLnBvdygxMCwgZGlmZik7XG4gICAgICBpZiAoZS50eXBlID09PSAnZ2VzdHVyZWNoYW5nZScpIHtcbiAgICAgICAgbmV3Wm9vbSA9IHIuZ2VzdHVyZVN0YXJ0Wm9vbSAqIGUuc2NhbGU7XG4gICAgICB9XG4gICAgICBjeS56b29tKHtcbiAgICAgICAgbGV2ZWw6IG5ld1pvb20sXG4gICAgICAgIHJlbmRlcmVkUG9zaXRpb246IHtcbiAgICAgICAgICB4OiBycG9zWzBdLFxuICAgICAgICAgIHk6IHJwb3NbMV1cbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgICBjeS5lbWl0KGUudHlwZSA9PT0gJ2dlc3R1cmVjaGFuZ2UnID8gJ3BpbmNoem9vbScgOiAnc2Nyb2xsem9vbScpO1xuICAgIH1cbiAgfTtcblxuICAvLyBGdW5jdGlvbnMgdG8gaGVscCB3aXRoIHdoZXRoZXIgbW91c2Ugd2hlZWwgc2hvdWxkIHRyaWdnZXIgem9vbWluZ1xuICAvLyAtLVxuICByLnJlZ2lzdGVyQmluZGluZyhyLmNvbnRhaW5lciwgJ3doZWVsJywgd2hlZWxIYW5kbGVyLCB0cnVlKTtcblxuICAvLyBkaXNhYmxlIG5vbnN0YW5kYXJkIHdoZWVsIGV2ZW50c1xuICAvLyByLnJlZ2lzdGVyQmluZGluZyhyLmNvbnRhaW5lciwgJ21vdXNld2hlZWwnLCB3aGVlbEhhbmRsZXIsIHRydWUpO1xuICAvLyByLnJlZ2lzdGVyQmluZGluZyhyLmNvbnRhaW5lciwgJ0RPTU1vdXNlU2Nyb2xsJywgd2hlZWxIYW5kbGVyLCB0cnVlKTtcbiAgLy8gci5yZWdpc3RlckJpbmRpbmcoci5jb250YWluZXIsICdNb3pNb3VzZVBpeGVsU2Nyb2xsJywgd2hlZWxIYW5kbGVyLCB0cnVlKTsgLy8gb2xkZXIgZmlyZWZveFxuXG4gIHIucmVnaXN0ZXJCaW5kaW5nKGNvbnRhaW5lcldpbmRvdywgJ3Njcm9sbCcsIGZ1bmN0aW9uIHNjcm9sbEhhbmRsZXIoZSkge1xuICAgIC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tdW51c2VkLXZhcnNcbiAgICByLnNjcm9sbGluZ1BhZ2UgPSB0cnVlO1xuICAgIGNsZWFyVGltZW91dChyLnNjcm9sbGluZ1BhZ2VUaW1lb3V0KTtcbiAgICByLnNjcm9sbGluZ1BhZ2VUaW1lb3V0ID0gc2V0VGltZW91dChmdW5jdGlvbiAoKSB7XG4gICAgICByLnNjcm9sbGluZ1BhZ2UgPSBmYWxzZTtcbiAgICB9LCAyNTApO1xuICB9LCB0cnVlKTtcblxuICAvLyBkZXNrdG9wIHNhZmFyaSBwaW5jaCB0byB6b29tIHN0YXJ0XG4gIHIucmVnaXN0ZXJCaW5kaW5nKHIuY29udGFpbmVyLCAnZ2VzdHVyZXN0YXJ0JywgZnVuY3Rpb24gZ2VzdHVyZVN0YXJ0SGFuZGxlcihlKSB7XG4gICAgci5nZXN0dXJlU3RhcnRab29tID0gci5jeS56b29tKCk7XG4gICAgaWYgKCFyLmhhc1RvdWNoU3RhcnRlZCkge1xuICAgICAgLy8gZG9uJ3QgYWZmZWN0IHRvdWNoIGRldmljZXMgbGlrZSBpcGhvbmVcbiAgICAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgICB9XG4gIH0sIHRydWUpO1xuICByLnJlZ2lzdGVyQmluZGluZyhyLmNvbnRhaW5lciwgJ2dlc3R1cmVjaGFuZ2UnLCBmdW5jdGlvbiAoZSkge1xuICAgIGlmICghci5oYXNUb3VjaFN0YXJ0ZWQpIHtcbiAgICAgIC8vIGRvbid0IGFmZmVjdCB0b3VjaCBkZXZpY2VzIGxpa2UgaXBob25lXG4gICAgICB3aGVlbEhhbmRsZXIoZSk7XG4gICAgfVxuICB9LCB0cnVlKTtcblxuICAvLyBGdW5jdGlvbnMgdG8gaGVscCB3aXRoIGhhbmRsaW5nIG1vdXNlb3V0L21vdXNlb3ZlciBvbiB0aGUgQ3l0b3NjYXBlIGNvbnRhaW5lclxuICAvLyBIYW5kbGUgbW91c2VvdXQgb24gQ3l0b3NjYXBlIGNvbnRhaW5lclxuICByLnJlZ2lzdGVyQmluZGluZyhyLmNvbnRhaW5lciwgJ21vdXNlb3V0JywgZnVuY3Rpb24gbW91c2VPdXRIYW5kbGVyKGUpIHtcbiAgICB2YXIgcG9zID0gci5wcm9qZWN0SW50b1ZpZXdwb3J0KGUuY2xpZW50WCwgZS5jbGllbnRZKTtcbiAgICByLmN5LmVtaXQoe1xuICAgICAgb3JpZ2luYWxFdmVudDogZSxcbiAgICAgIHR5cGU6ICdtb3VzZW91dCcsXG4gICAgICBwb3NpdGlvbjoge1xuICAgICAgICB4OiBwb3NbMF0sXG4gICAgICAgIHk6IHBvc1sxXVxuICAgICAgfVxuICAgIH0pO1xuICB9LCBmYWxzZSk7XG4gIHIucmVnaXN0ZXJCaW5kaW5nKHIuY29udGFpbmVyLCAnbW91c2VvdmVyJywgZnVuY3Rpb24gbW91c2VPdmVySGFuZGxlcihlKSB7XG4gICAgdmFyIHBvcyA9IHIucHJvamVjdEludG9WaWV3cG9ydChlLmNsaWVudFgsIGUuY2xpZW50WSk7XG4gICAgci5jeS5lbWl0KHtcbiAgICAgIG9yaWdpbmFsRXZlbnQ6IGUsXG4gICAgICB0eXBlOiAnbW91c2VvdmVyJyxcbiAgICAgIHBvc2l0aW9uOiB7XG4gICAgICAgIHg6IHBvc1swXSxcbiAgICAgICAgeTogcG9zWzFdXG4gICAgICB9XG4gICAgfSk7XG4gIH0sIGZhbHNlKTtcbiAgdmFyIGYxeDEsIGYxeTEsIGYyeDEsIGYyeTE7IC8vIHN0YXJ0aW5nIHBvaW50cyBmb3IgcGluY2gtdG8tem9vbVxuICB2YXIgZGlzdGFuY2UxLCBkaXN0YW5jZTFTcTsgLy8gaW5pdGlhbCBkaXN0YW5jZSBiZXR3ZWVuIGZpbmdlciAxIGFuZCBmaW5nZXIgMiBmb3IgcGluY2gtdG8tem9vbVxuICB2YXIgY2VudGVyMSwgbW9kZWxDZW50ZXIxOyAvLyBjZW50ZXIgcG9pbnQgb24gc3RhcnQgcGluY2ggdG8gem9vbVxuICB2YXIgb2Zmc2V0TGVmdCwgb2Zmc2V0VG9wO1xuICB2YXIgY29udGFpbmVyV2lkdGgsIGNvbnRhaW5lckhlaWdodDtcbiAgdmFyIHR3b0ZpbmdlcnNTdGFydEluc2lkZTtcbiAgdmFyIGRpc3RhbmNlID0gZnVuY3Rpb24gZGlzdGFuY2UoeDEsIHkxLCB4MiwgeTIpIHtcbiAgICByZXR1cm4gTWF0aC5zcXJ0KCh4MiAtIHgxKSAqICh4MiAtIHgxKSArICh5MiAtIHkxKSAqICh5MiAtIHkxKSk7XG4gIH07XG4gIHZhciBkaXN0YW5jZVNxID0gZnVuY3Rpb24gZGlzdGFuY2VTcSh4MSwgeTEsIHgyLCB5Mikge1xuICAgIHJldHVybiAoeDIgLSB4MSkgKiAoeDIgLSB4MSkgKyAoeTIgLSB5MSkgKiAoeTIgLSB5MSk7XG4gIH07XG4gIHZhciB0b3VjaHN0YXJ0SGFuZGxlcjtcbiAgci5yZWdpc3RlckJpbmRpbmcoci5jb250YWluZXIsICd0b3VjaHN0YXJ0JywgdG91Y2hzdGFydEhhbmRsZXIgPSBmdW5jdGlvbiB0b3VjaHN0YXJ0SGFuZGxlcihlKSB7XG4gICAgci5oYXNUb3VjaFN0YXJ0ZWQgPSB0cnVlO1xuICAgIGlmICghZXZlbnRJbkNvbnRhaW5lcihlKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBibHVyQWN0aXZlRG9tRWxlbWVudCgpO1xuICAgIHIudG91Y2hEYXRhLmNhcHR1cmUgPSB0cnVlO1xuICAgIHIuZGF0YS5iZ0FjdGl2ZVBvc2lzdGlvbiA9IHVuZGVmaW5lZDtcbiAgICB2YXIgY3kgPSByLmN5O1xuICAgIHZhciBub3cgPSByLnRvdWNoRGF0YS5ub3c7XG4gICAgdmFyIGVhcmxpZXIgPSByLnRvdWNoRGF0YS5lYXJsaWVyO1xuICAgIGlmIChlLnRvdWNoZXNbMF0pIHtcbiAgICAgIHZhciBwb3MgPSByLnByb2plY3RJbnRvVmlld3BvcnQoZS50b3VjaGVzWzBdLmNsaWVudFgsIGUudG91Y2hlc1swXS5jbGllbnRZKTtcbiAgICAgIG5vd1swXSA9IHBvc1swXTtcbiAgICAgIG5vd1sxXSA9IHBvc1sxXTtcbiAgICB9XG4gICAgaWYgKGUudG91Y2hlc1sxXSkge1xuICAgICAgdmFyIHBvcyA9IHIucHJvamVjdEludG9WaWV3cG9ydChlLnRvdWNoZXNbMV0uY2xpZW50WCwgZS50b3VjaGVzWzFdLmNsaWVudFkpO1xuICAgICAgbm93WzJdID0gcG9zWzBdO1xuICAgICAgbm93WzNdID0gcG9zWzFdO1xuICAgIH1cbiAgICBpZiAoZS50b3VjaGVzWzJdKSB7XG4gICAgICB2YXIgcG9zID0gci5wcm9qZWN0SW50b1ZpZXdwb3J0KGUudG91Y2hlc1syXS5jbGllbnRYLCBlLnRvdWNoZXNbMl0uY2xpZW50WSk7XG4gICAgICBub3dbNF0gPSBwb3NbMF07XG4gICAgICBub3dbNV0gPSBwb3NbMV07XG4gICAgfVxuXG4gICAgLy8gcmVjb3JkIHN0YXJ0aW5nIHBvaW50cyBmb3IgcGluY2gtdG8tem9vbVxuICAgIGlmIChlLnRvdWNoZXNbMV0pIHtcbiAgICAgIHIudG91Y2hEYXRhLnNpbmdsZVRvdWNoTW92ZWQgPSB0cnVlO1xuICAgICAgZnJlZURyYWdnZWRFbGVtZW50cyhyLmRyYWdEYXRhLnRvdWNoRHJhZ0VsZXMpO1xuICAgICAgdmFyIG9mZnNldHMgPSByLmZpbmRDb250YWluZXJDbGllbnRDb29yZHMoKTtcbiAgICAgIG9mZnNldExlZnQgPSBvZmZzZXRzWzBdO1xuICAgICAgb2Zmc2V0VG9wID0gb2Zmc2V0c1sxXTtcbiAgICAgIGNvbnRhaW5lcldpZHRoID0gb2Zmc2V0c1syXTtcbiAgICAgIGNvbnRhaW5lckhlaWdodCA9IG9mZnNldHNbM107XG4gICAgICBmMXgxID0gZS50b3VjaGVzWzBdLmNsaWVudFggLSBvZmZzZXRMZWZ0O1xuICAgICAgZjF5MSA9IGUudG91Y2hlc1swXS5jbGllbnRZIC0gb2Zmc2V0VG9wO1xuICAgICAgZjJ4MSA9IGUudG91Y2hlc1sxXS5jbGllbnRYIC0gb2Zmc2V0TGVmdDtcbiAgICAgIGYyeTEgPSBlLnRvdWNoZXNbMV0uY2xpZW50WSAtIG9mZnNldFRvcDtcbiAgICAgIHR3b0ZpbmdlcnNTdGFydEluc2lkZSA9IDAgPD0gZjF4MSAmJiBmMXgxIDw9IGNvbnRhaW5lcldpZHRoICYmIDAgPD0gZjJ4MSAmJiBmMngxIDw9IGNvbnRhaW5lcldpZHRoICYmIDAgPD0gZjF5MSAmJiBmMXkxIDw9IGNvbnRhaW5lckhlaWdodCAmJiAwIDw9IGYyeTEgJiYgZjJ5MSA8PSBjb250YWluZXJIZWlnaHQ7XG4gICAgICB2YXIgcGFuID0gY3kucGFuKCk7XG4gICAgICB2YXIgem9vbSA9IGN5Lnpvb20oKTtcbiAgICAgIGRpc3RhbmNlMSA9IGRpc3RhbmNlKGYxeDEsIGYxeTEsIGYyeDEsIGYyeTEpO1xuICAgICAgZGlzdGFuY2UxU3EgPSBkaXN0YW5jZVNxKGYxeDEsIGYxeTEsIGYyeDEsIGYyeTEpO1xuICAgICAgY2VudGVyMSA9IFsoZjF4MSArIGYyeDEpIC8gMiwgKGYxeTEgKyBmMnkxKSAvIDJdO1xuICAgICAgbW9kZWxDZW50ZXIxID0gWyhjZW50ZXIxWzBdIC0gcGFuLngpIC8gem9vbSwgKGNlbnRlcjFbMV0gLSBwYW4ueSkgLyB6b29tXTtcblxuICAgICAgLy8gY29uc2lkZXIgY29udGV4dCB0YXBcbiAgICAgIHZhciBjeHREaXN0VGhyZXNob2xkID0gMjAwO1xuICAgICAgdmFyIGN4dERpc3RUaHJlc2hvbGRTcSA9IGN4dERpc3RUaHJlc2hvbGQgKiBjeHREaXN0VGhyZXNob2xkO1xuICAgICAgaWYgKGRpc3RhbmNlMVNxIDwgY3h0RGlzdFRocmVzaG9sZFNxICYmICFlLnRvdWNoZXNbMl0pIHtcbiAgICAgICAgdmFyIG5lYXIxID0gci5maW5kTmVhcmVzdEVsZW1lbnQobm93WzBdLCBub3dbMV0sIHRydWUsIHRydWUpO1xuICAgICAgICB2YXIgbmVhcjIgPSByLmZpbmROZWFyZXN0RWxlbWVudChub3dbMl0sIG5vd1szXSwgdHJ1ZSwgdHJ1ZSk7XG4gICAgICAgIGlmIChuZWFyMSAmJiBuZWFyMS5pc05vZGUoKSkge1xuICAgICAgICAgIG5lYXIxLmFjdGl2YXRlKCkuZW1pdCh7XG4gICAgICAgICAgICBvcmlnaW5hbEV2ZW50OiBlLFxuICAgICAgICAgICAgdHlwZTogJ2N4dHRhcHN0YXJ0JyxcbiAgICAgICAgICAgIHBvc2l0aW9uOiB7XG4gICAgICAgICAgICAgIHg6IG5vd1swXSxcbiAgICAgICAgICAgICAgeTogbm93WzFdXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSk7XG4gICAgICAgICAgci50b3VjaERhdGEuc3RhcnQgPSBuZWFyMTtcbiAgICAgICAgfSBlbHNlIGlmIChuZWFyMiAmJiBuZWFyMi5pc05vZGUoKSkge1xuICAgICAgICAgIG5lYXIyLmFjdGl2YXRlKCkuZW1pdCh7XG4gICAgICAgICAgICBvcmlnaW5hbEV2ZW50OiBlLFxuICAgICAgICAgICAgdHlwZTogJ2N4dHRhcHN0YXJ0JyxcbiAgICAgICAgICAgIHBvc2l0aW9uOiB7XG4gICAgICAgICAgICAgIHg6IG5vd1swXSxcbiAgICAgICAgICAgICAgeTogbm93WzFdXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSk7XG4gICAgICAgICAgci50b3VjaERhdGEuc3RhcnQgPSBuZWFyMjtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBjeS5lbWl0KHtcbiAgICAgICAgICAgIG9yaWdpbmFsRXZlbnQ6IGUsXG4gICAgICAgICAgICB0eXBlOiAnY3h0dGFwc3RhcnQnLFxuICAgICAgICAgICAgcG9zaXRpb246IHtcbiAgICAgICAgICAgICAgeDogbm93WzBdLFxuICAgICAgICAgICAgICB5OiBub3dbMV1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoci50b3VjaERhdGEuc3RhcnQpIHtcbiAgICAgICAgICByLnRvdWNoRGF0YS5zdGFydC5fcHJpdmF0ZS5ncmFiYmVkID0gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgci50b3VjaERhdGEuY3h0ID0gdHJ1ZTtcbiAgICAgICAgci50b3VjaERhdGEuY3h0RHJhZ2dlZCA9IGZhbHNlO1xuICAgICAgICByLmRhdGEuYmdBY3RpdmVQb3Npc3Rpb24gPSB1bmRlZmluZWQ7XG4gICAgICAgIHIucmVkcmF3KCk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKGUudG91Y2hlc1syXSkge1xuICAgICAgLy8gaWdub3JlXG5cbiAgICAgIC8vIHNhZmFyaSBvbiBpb3MgcGFucyB0aGUgcGFnZSBvdGhlcndpc2UgKG5vcm1hbGx5IHlvdSBzaG91bGQgYmUgYWJsZSB0byBwcmV2ZW50ZGVmYXVsdCBvbiB0b3VjaG1vdmUuLi4pXG4gICAgICBpZiAoY3kuYm94U2VsZWN0aW9uRW5hYmxlZCgpKSB7XG4gICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKGUudG91Y2hlc1sxXSkgOyBlbHNlIGlmIChlLnRvdWNoZXNbMF0pIHtcbiAgICAgIHZhciBuZWFycyA9IHIuZmluZE5lYXJlc3RFbGVtZW50cyhub3dbMF0sIG5vd1sxXSwgdHJ1ZSwgdHJ1ZSk7XG4gICAgICB2YXIgbmVhciA9IG5lYXJzWzBdO1xuICAgICAgaWYgKG5lYXIgIT0gbnVsbCkge1xuICAgICAgICBuZWFyLmFjdGl2YXRlKCk7XG4gICAgICAgIHIudG91Y2hEYXRhLnN0YXJ0ID0gbmVhcjtcbiAgICAgICAgci50b3VjaERhdGEuc3RhcnRzID0gbmVhcnM7XG4gICAgICAgIGlmIChyLm5vZGVJc0dyYWJiYWJsZShuZWFyKSkge1xuICAgICAgICAgIHZhciBkcmFnZ2VkRWxlcyA9IHIuZHJhZ0RhdGEudG91Y2hEcmFnRWxlcyA9IGN5LmNvbGxlY3Rpb24oKTtcbiAgICAgICAgICB2YXIgc2VsZWN0ZWROb2RlcyA9IG51bGw7XG4gICAgICAgICAgci5yZWRyYXdIaW50KCdlbGVzJywgdHJ1ZSk7XG4gICAgICAgICAgci5yZWRyYXdIaW50KCdkcmFnJywgdHJ1ZSk7XG4gICAgICAgICAgaWYgKG5lYXIuc2VsZWN0ZWQoKSkge1xuICAgICAgICAgICAgLy8gcmVzZXQgZHJhZyBlbGVtZW50cywgc2luY2UgbmVhciB3aWxsIGJlIGFkZGVkIGFnYWluXG5cbiAgICAgICAgICAgIHNlbGVjdGVkTm9kZXMgPSBjeS4kKGZ1bmN0aW9uIChlbGUpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIGVsZS5zZWxlY3RlZCgpICYmIHIubm9kZUlzR3JhYmJhYmxlKGVsZSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGFkZE5vZGVzVG9EcmFnKHNlbGVjdGVkTm9kZXMsIHtcbiAgICAgICAgICAgICAgYWRkVG9MaXN0OiBkcmFnZ2VkRWxlc1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGFkZE5vZGVUb0RyYWcobmVhciwge1xuICAgICAgICAgICAgICBhZGRUb0xpc3Q6IGRyYWdnZWRFbGVzXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9XG4gICAgICAgICAgc2V0R3JhYlRhcmdldChuZWFyKTtcbiAgICAgICAgICB2YXIgbWFrZUV2ZW50ID0gZnVuY3Rpb24gbWFrZUV2ZW50KHR5cGUpIHtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgIG9yaWdpbmFsRXZlbnQ6IGUsXG4gICAgICAgICAgICAgIHR5cGU6IHR5cGUsXG4gICAgICAgICAgICAgIHBvc2l0aW9uOiB7XG4gICAgICAgICAgICAgICAgeDogbm93WzBdLFxuICAgICAgICAgICAgICAgIHk6IG5vd1sxXVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9O1xuICAgICAgICAgIH07XG4gICAgICAgICAgbmVhci5lbWl0KG1ha2VFdmVudCgnZ3JhYm9uJykpO1xuICAgICAgICAgIGlmIChzZWxlY3RlZE5vZGVzKSB7XG4gICAgICAgICAgICBzZWxlY3RlZE5vZGVzLmZvckVhY2goZnVuY3Rpb24gKG4pIHtcbiAgICAgICAgICAgICAgbi5lbWl0KG1ha2VFdmVudCgnZ3JhYicpKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBuZWFyLmVtaXQobWFrZUV2ZW50KCdncmFiJykpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgdHJpZ2dlckV2ZW50cyhuZWFyLCBbJ3RvdWNoc3RhcnQnLCAndGFwc3RhcnQnLCAndm1vdXNlZG93biddLCBlLCB7XG4gICAgICAgIHg6IG5vd1swXSxcbiAgICAgICAgeTogbm93WzFdXG4gICAgICB9KTtcbiAgICAgIGlmIChuZWFyID09IG51bGwpIHtcbiAgICAgICAgci5kYXRhLmJnQWN0aXZlUG9zaXN0aW9uID0ge1xuICAgICAgICAgIHg6IHBvc1swXSxcbiAgICAgICAgICB5OiBwb3NbMV1cbiAgICAgICAgfTtcbiAgICAgICAgci5yZWRyYXdIaW50KCdzZWxlY3QnLCB0cnVlKTtcbiAgICAgICAgci5yZWRyYXcoKTtcbiAgICAgIH1cblxuICAgICAgLy8gVGFwLCB0YXBob2xkXG4gICAgICAvLyAtLS0tLVxuXG4gICAgICByLnRvdWNoRGF0YS5zaW5nbGVUb3VjaE1vdmVkID0gZmFsc2U7XG4gICAgICByLnRvdWNoRGF0YS5zaW5nbGVUb3VjaFN0YXJ0VGltZSA9ICtuZXcgRGF0ZSgpO1xuICAgICAgY2xlYXJUaW1lb3V0KHIudG91Y2hEYXRhLnRhcGhvbGRUaW1lb3V0KTtcbiAgICAgIHIudG91Y2hEYXRhLnRhcGhvbGRUaW1lb3V0ID0gc2V0VGltZW91dChmdW5jdGlvbiAoKSB7XG4gICAgICAgIGlmIChyLnRvdWNoRGF0YS5zaW5nbGVUb3VjaE1vdmVkID09PSBmYWxzZSAmJiAhci5waW5jaGluZyAvLyBpZiBwaW5jaGluZywgdGhlbiB0YXBob2xkIHVuc2VsZWN0IHNob3VsZG4ndCB0YWtlIGVmZmVjdFxuICAgICAgICAmJiAhci50b3VjaERhdGEuc2VsZWN0aW5nIC8vIGJveCBzZWxlY3Rpb24gc2hvdWxkbid0IGFsbG93IHRhcGhvbGQgdGhyb3VnaFxuICAgICAgICApIHtcbiAgICAgICAgICB0cmlnZ2VyRXZlbnRzKHIudG91Y2hEYXRhLnN0YXJ0LCBbJ3RhcGhvbGQnXSwgZSwge1xuICAgICAgICAgICAgeDogbm93WzBdLFxuICAgICAgICAgICAgeTogbm93WzFdXG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgIH0sIHIudGFwaG9sZER1cmF0aW9uKTtcbiAgICB9XG4gICAgaWYgKGUudG91Y2hlcy5sZW5ndGggPj0gMSkge1xuICAgICAgdmFyIHNQb3MgPSByLnRvdWNoRGF0YS5zdGFydFBvc2l0aW9uID0gW251bGwsIG51bGwsIG51bGwsIG51bGwsIG51bGwsIG51bGxdO1xuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBub3cubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgc1Bvc1tpXSA9IGVhcmxpZXJbaV0gPSBub3dbaV07XG4gICAgICB9XG4gICAgICB2YXIgdG91Y2gwID0gZS50b3VjaGVzWzBdO1xuICAgICAgci50b3VjaERhdGEuc3RhcnRHUG9zaXRpb24gPSBbdG91Y2gwLmNsaWVudFgsIHRvdWNoMC5jbGllbnRZXTtcbiAgICB9XG4gIH0sIGZhbHNlKTtcbiAgdmFyIHRvdWNobW92ZUhhbmRsZXI7XG4gIHIucmVnaXN0ZXJCaW5kaW5nKGNvbnRhaW5lcldpbmRvdywgJ3RvdWNobW92ZScsIHRvdWNobW92ZUhhbmRsZXIgPSBmdW5jdGlvbiB0b3VjaG1vdmVIYW5kbGVyKGUpIHtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLXVuZGVmXG4gICAgdmFyIGNhcHR1cmUgPSByLnRvdWNoRGF0YS5jYXB0dXJlO1xuICAgIGlmICghY2FwdHVyZSAmJiAhZXZlbnRJbkNvbnRhaW5lcihlKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB2YXIgc2VsZWN0ID0gci5zZWxlY3Rpb247XG4gICAgdmFyIGN5ID0gci5jeTtcbiAgICB2YXIgbm93ID0gci50b3VjaERhdGEubm93O1xuICAgIHZhciBlYXJsaWVyID0gci50b3VjaERhdGEuZWFybGllcjtcbiAgICB2YXIgem9vbSA9IGN5Lnpvb20oKTtcbiAgICBpZiAoZS50b3VjaGVzWzBdKSB7XG4gICAgICB2YXIgcG9zID0gci5wcm9qZWN0SW50b1ZpZXdwb3J0KGUudG91Y2hlc1swXS5jbGllbnRYLCBlLnRvdWNoZXNbMF0uY2xpZW50WSk7XG4gICAgICBub3dbMF0gPSBwb3NbMF07XG4gICAgICBub3dbMV0gPSBwb3NbMV07XG4gICAgfVxuICAgIGlmIChlLnRvdWNoZXNbMV0pIHtcbiAgICAgIHZhciBwb3MgPSByLnByb2plY3RJbnRvVmlld3BvcnQoZS50b3VjaGVzWzFdLmNsaWVudFgsIGUudG91Y2hlc1sxXS5jbGllbnRZKTtcbiAgICAgIG5vd1syXSA9IHBvc1swXTtcbiAgICAgIG5vd1szXSA9IHBvc1sxXTtcbiAgICB9XG4gICAgaWYgKGUudG91Y2hlc1syXSkge1xuICAgICAgdmFyIHBvcyA9IHIucHJvamVjdEludG9WaWV3cG9ydChlLnRvdWNoZXNbMl0uY2xpZW50WCwgZS50b3VjaGVzWzJdLmNsaWVudFkpO1xuICAgICAgbm93WzRdID0gcG9zWzBdO1xuICAgICAgbm93WzVdID0gcG9zWzFdO1xuICAgIH1cbiAgICB2YXIgc3RhcnRHUG9zID0gci50b3VjaERhdGEuc3RhcnRHUG9zaXRpb247XG4gICAgdmFyIGlzT3ZlclRocmVzaG9sZERyYWc7XG4gICAgaWYgKGNhcHR1cmUgJiYgZS50b3VjaGVzWzBdICYmIHN0YXJ0R1Bvcykge1xuICAgICAgdmFyIGRpc3AgPSBbXTtcbiAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgbm93Lmxlbmd0aDsgaisrKSB7XG4gICAgICAgIGRpc3Bbal0gPSBub3dbal0gLSBlYXJsaWVyW2pdO1xuICAgICAgfVxuICAgICAgdmFyIGR4ID0gZS50b3VjaGVzWzBdLmNsaWVudFggLSBzdGFydEdQb3NbMF07XG4gICAgICB2YXIgZHgyID0gZHggKiBkeDtcbiAgICAgIHZhciBkeSA9IGUudG91Y2hlc1swXS5jbGllbnRZIC0gc3RhcnRHUG9zWzFdO1xuICAgICAgdmFyIGR5MiA9IGR5ICogZHk7XG4gICAgICB2YXIgZGlzdDIgPSBkeDIgKyBkeTI7XG4gICAgICBpc092ZXJUaHJlc2hvbGREcmFnID0gZGlzdDIgPj0gci50b3VjaFRhcFRocmVzaG9sZDI7XG4gICAgfVxuXG4gICAgLy8gY29udGV4dCBzd2lwZSBjYW5jZWxsaW5nXG4gICAgaWYgKGNhcHR1cmUgJiYgci50b3VjaERhdGEuY3h0KSB7XG4gICAgICBlLnByZXZlbnREZWZhdWx0KCk7XG4gICAgICB2YXIgZjF4MiA9IGUudG91Y2hlc1swXS5jbGllbnRYIC0gb2Zmc2V0TGVmdCxcbiAgICAgICAgZjF5MiA9IGUudG91Y2hlc1swXS5jbGllbnRZIC0gb2Zmc2V0VG9wO1xuICAgICAgdmFyIGYyeDIgPSBlLnRvdWNoZXNbMV0uY2xpZW50WCAtIG9mZnNldExlZnQsXG4gICAgICAgIGYyeTIgPSBlLnRvdWNoZXNbMV0uY2xpZW50WSAtIG9mZnNldFRvcDtcbiAgICAgIC8vIHZhciBkaXN0YW5jZTIgPSBkaXN0YW5jZSggZjF4MiwgZjF5MiwgZjJ4MiwgZjJ5MiApO1xuICAgICAgdmFyIGRpc3RhbmNlMlNxID0gZGlzdGFuY2VTcShmMXgyLCBmMXkyLCBmMngyLCBmMnkyKTtcbiAgICAgIHZhciBmYWN0b3JTcSA9IGRpc3RhbmNlMlNxIC8gZGlzdGFuY2UxU3E7XG4gICAgICB2YXIgZGlzdFRocmVzaG9sZCA9IDE1MDtcbiAgICAgIHZhciBkaXN0VGhyZXNob2xkU3EgPSBkaXN0VGhyZXNob2xkICogZGlzdFRocmVzaG9sZDtcbiAgICAgIHZhciBmYWN0b3JUaHJlc2hvbGQgPSAxLjU7XG4gICAgICB2YXIgZmFjdG9yVGhyZXNob2xkU3EgPSBmYWN0b3JUaHJlc2hvbGQgKiBmYWN0b3JUaHJlc2hvbGQ7XG5cbiAgICAgIC8vIGNhbmNlbCBjdHggZ2VzdHVyZXMgaWYgdGhlIGRpc3RhbmNlIGIvdCB0aGUgZmluZ2VycyBpbmNyZWFzZXNcbiAgICAgIGlmIChmYWN0b3JTcSA+PSBmYWN0b3JUaHJlc2hvbGRTcSB8fCBkaXN0YW5jZTJTcSA+PSBkaXN0VGhyZXNob2xkU3EpIHtcbiAgICAgICAgci50b3VjaERhdGEuY3h0ID0gZmFsc2U7XG4gICAgICAgIHIuZGF0YS5iZ0FjdGl2ZVBvc2lzdGlvbiA9IHVuZGVmaW5lZDtcbiAgICAgICAgci5yZWRyYXdIaW50KCdzZWxlY3QnLCB0cnVlKTtcbiAgICAgICAgdmFyIGN4dEV2dCA9IHtcbiAgICAgICAgICBvcmlnaW5hbEV2ZW50OiBlLFxuICAgICAgICAgIHR5cGU6ICdjeHR0YXBlbmQnLFxuICAgICAgICAgIHBvc2l0aW9uOiB7XG4gICAgICAgICAgICB4OiBub3dbMF0sXG4gICAgICAgICAgICB5OiBub3dbMV1cbiAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgICAgIGlmIChyLnRvdWNoRGF0YS5zdGFydCkge1xuICAgICAgICAgIHIudG91Y2hEYXRhLnN0YXJ0LnVuYWN0aXZhdGUoKS5lbWl0KGN4dEV2dCk7XG4gICAgICAgICAgci50b3VjaERhdGEuc3RhcnQgPSBudWxsO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGN5LmVtaXQoY3h0RXZ0KTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIC8vIGNvbnRleHQgc3dpcGVcbiAgICBpZiAoY2FwdHVyZSAmJiByLnRvdWNoRGF0YS5jeHQpIHtcbiAgICAgIHZhciBjeHRFdnQgPSB7XG4gICAgICAgIG9yaWdpbmFsRXZlbnQ6IGUsXG4gICAgICAgIHR5cGU6ICdjeHRkcmFnJyxcbiAgICAgICAgcG9zaXRpb246IHtcbiAgICAgICAgICB4OiBub3dbMF0sXG4gICAgICAgICAgeTogbm93WzFdXG4gICAgICAgIH1cbiAgICAgIH07XG4gICAgICByLmRhdGEuYmdBY3RpdmVQb3Npc3Rpb24gPSB1bmRlZmluZWQ7XG4gICAgICByLnJlZHJhd0hpbnQoJ3NlbGVjdCcsIHRydWUpO1xuICAgICAgaWYgKHIudG91Y2hEYXRhLnN0YXJ0KSB7XG4gICAgICAgIHIudG91Y2hEYXRhLnN0YXJ0LmVtaXQoY3h0RXZ0KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGN5LmVtaXQoY3h0RXZ0KTtcbiAgICAgIH1cbiAgICAgIGlmIChyLnRvdWNoRGF0YS5zdGFydCkge1xuICAgICAgICByLnRvdWNoRGF0YS5zdGFydC5fcHJpdmF0ZS5ncmFiYmVkID0gZmFsc2U7XG4gICAgICB9XG4gICAgICByLnRvdWNoRGF0YS5jeHREcmFnZ2VkID0gdHJ1ZTtcbiAgICAgIHZhciBuZWFyID0gci5maW5kTmVhcmVzdEVsZW1lbnQobm93WzBdLCBub3dbMV0sIHRydWUsIHRydWUpO1xuICAgICAgaWYgKCFyLnRvdWNoRGF0YS5jeHRPdmVyIHx8IG5lYXIgIT09IHIudG91Y2hEYXRhLmN4dE92ZXIpIHtcbiAgICAgICAgaWYgKHIudG91Y2hEYXRhLmN4dE92ZXIpIHtcbiAgICAgICAgICByLnRvdWNoRGF0YS5jeHRPdmVyLmVtaXQoe1xuICAgICAgICAgICAgb3JpZ2luYWxFdmVudDogZSxcbiAgICAgICAgICAgIHR5cGU6ICdjeHRkcmFnb3V0JyxcbiAgICAgICAgICAgIHBvc2l0aW9uOiB7XG4gICAgICAgICAgICAgIHg6IG5vd1swXSxcbiAgICAgICAgICAgICAgeTogbm93WzFdXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgci50b3VjaERhdGEuY3h0T3ZlciA9IG5lYXI7XG4gICAgICAgIGlmIChuZWFyKSB7XG4gICAgICAgICAgbmVhci5lbWl0KHtcbiAgICAgICAgICAgIG9yaWdpbmFsRXZlbnQ6IGUsXG4gICAgICAgICAgICB0eXBlOiAnY3h0ZHJhZ292ZXInLFxuICAgICAgICAgICAgcG9zaXRpb246IHtcbiAgICAgICAgICAgICAgeDogbm93WzBdLFxuICAgICAgICAgICAgICB5OiBub3dbMV1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICAvLyBib3ggc2VsZWN0aW9uXG4gICAgfSBlbHNlIGlmIChjYXB0dXJlICYmIGUudG91Y2hlc1syXSAmJiBjeS5ib3hTZWxlY3Rpb25FbmFibGVkKCkpIHtcbiAgICAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgICAgIHIuZGF0YS5iZ0FjdGl2ZVBvc2lzdGlvbiA9IHVuZGVmaW5lZDtcbiAgICAgIHRoaXMubGFzdFRocmVlVG91Y2ggPSArbmV3IERhdGUoKTtcbiAgICAgIGlmICghci50b3VjaERhdGEuc2VsZWN0aW5nKSB7XG4gICAgICAgIGN5LmVtaXQoe1xuICAgICAgICAgIG9yaWdpbmFsRXZlbnQ6IGUsXG4gICAgICAgICAgdHlwZTogJ2JveHN0YXJ0JyxcbiAgICAgICAgICBwb3NpdGlvbjoge1xuICAgICAgICAgICAgeDogbm93WzBdLFxuICAgICAgICAgICAgeTogbm93WzFdXG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICAgIHIudG91Y2hEYXRhLnNlbGVjdGluZyA9IHRydWU7XG4gICAgICByLnRvdWNoRGF0YS5kaWRTZWxlY3QgPSB0cnVlO1xuICAgICAgc2VsZWN0WzRdID0gMTtcbiAgICAgIGlmICghc2VsZWN0IHx8IHNlbGVjdC5sZW5ndGggPT09IDAgfHwgc2VsZWN0WzBdID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgc2VsZWN0WzBdID0gKG5vd1swXSArIG5vd1syXSArIG5vd1s0XSkgLyAzO1xuICAgICAgICBzZWxlY3RbMV0gPSAobm93WzFdICsgbm93WzNdICsgbm93WzVdKSAvIDM7XG4gICAgICAgIHNlbGVjdFsyXSA9IChub3dbMF0gKyBub3dbMl0gKyBub3dbNF0pIC8gMyArIDE7XG4gICAgICAgIHNlbGVjdFszXSA9IChub3dbMV0gKyBub3dbM10gKyBub3dbNV0pIC8gMyArIDE7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBzZWxlY3RbMl0gPSAobm93WzBdICsgbm93WzJdICsgbm93WzRdKSAvIDM7XG4gICAgICAgIHNlbGVjdFszXSA9IChub3dbMV0gKyBub3dbM10gKyBub3dbNV0pIC8gMztcbiAgICAgIH1cbiAgICAgIHIucmVkcmF3SGludCgnc2VsZWN0JywgdHJ1ZSk7XG4gICAgICByLnJlZHJhdygpO1xuXG4gICAgICAvLyBwaW5jaCB0byB6b29tXG4gICAgfSBlbHNlIGlmIChjYXB0dXJlICYmIGUudG91Y2hlc1sxXSAmJiAhci50b3VjaERhdGEuZGlkU2VsZWN0IC8vIGRvbid0IGFsbG93IGJveCBzZWxlY3Rpb24gdG8gZGVncmFkZSB0byBwaW5jaC10by16b29tXG4gICAgJiYgY3kuem9vbWluZ0VuYWJsZWQoKSAmJiBjeS5wYW5uaW5nRW5hYmxlZCgpICYmIGN5LnVzZXJab29taW5nRW5hYmxlZCgpICYmIGN5LnVzZXJQYW5uaW5nRW5hYmxlZCgpKSB7XG4gICAgICAvLyB0d28gZmluZ2VycyA9PiBwaW5jaCB0byB6b29tXG4gICAgICBlLnByZXZlbnREZWZhdWx0KCk7XG4gICAgICByLmRhdGEuYmdBY3RpdmVQb3Npc3Rpb24gPSB1bmRlZmluZWQ7XG4gICAgICByLnJlZHJhd0hpbnQoJ3NlbGVjdCcsIHRydWUpO1xuICAgICAgdmFyIGRyYWdnZWRFbGVzID0gci5kcmFnRGF0YS50b3VjaERyYWdFbGVzO1xuICAgICAgaWYgKGRyYWdnZWRFbGVzKSB7XG4gICAgICAgIHIucmVkcmF3SGludCgnZHJhZycsIHRydWUpO1xuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGRyYWdnZWRFbGVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgdmFyIGRlX3AgPSBkcmFnZ2VkRWxlc1tpXS5fcHJpdmF0ZTtcbiAgICAgICAgICBkZV9wLmdyYWJiZWQgPSBmYWxzZTtcbiAgICAgICAgICBkZV9wLnJzY3JhdGNoLmluRHJhZ0xheWVyID0gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHZhciBfc3RhcnQgPSByLnRvdWNoRGF0YS5zdGFydDtcblxuICAgICAgLy8gKHgyLCB5MikgZm9yIGZpbmdlcnMgMSBhbmQgMlxuICAgICAgdmFyIGYxeDIgPSBlLnRvdWNoZXNbMF0uY2xpZW50WCAtIG9mZnNldExlZnQsXG4gICAgICAgIGYxeTIgPSBlLnRvdWNoZXNbMF0uY2xpZW50WSAtIG9mZnNldFRvcDtcbiAgICAgIHZhciBmMngyID0gZS50b3VjaGVzWzFdLmNsaWVudFggLSBvZmZzZXRMZWZ0LFxuICAgICAgICBmMnkyID0gZS50b3VjaGVzWzFdLmNsaWVudFkgLSBvZmZzZXRUb3A7XG4gICAgICB2YXIgZGlzdGFuY2UyID0gZGlzdGFuY2UoZjF4MiwgZjF5MiwgZjJ4MiwgZjJ5Mik7XG4gICAgICAvLyB2YXIgZGlzdGFuY2UyU3EgPSBkaXN0YW5jZVNxKCBmMXgyLCBmMXkyLCBmMngyLCBmMnkyICk7XG4gICAgICAvLyB2YXIgZmFjdG9yID0gTWF0aC5zcXJ0KCBkaXN0YW5jZTJTcSApIC8gTWF0aC5zcXJ0KCBkaXN0YW5jZTFTcSApO1xuICAgICAgdmFyIGZhY3RvciA9IGRpc3RhbmNlMiAvIGRpc3RhbmNlMTtcbiAgICAgIGlmICh0d29GaW5nZXJzU3RhcnRJbnNpZGUpIHtcbiAgICAgICAgLy8gZGVsdGEgZmluZ2VyMVxuICAgICAgICB2YXIgZGYxeCA9IGYxeDIgLSBmMXgxO1xuICAgICAgICB2YXIgZGYxeSA9IGYxeTIgLSBmMXkxO1xuXG4gICAgICAgIC8vIGRlbHRhIGZpbmdlciAyXG4gICAgICAgIHZhciBkZjJ4ID0gZjJ4MiAtIGYyeDE7XG4gICAgICAgIHZhciBkZjJ5ID0gZjJ5MiAtIGYyeTE7XG5cbiAgICAgICAgLy8gdHJhbnNsYXRpb24gaXMgdGhlIG5vcm1hbGlzZWQgdmVjdG9yIG9mIHRoZSB0d28gZmluZ2VycyBtb3ZlbWVudFxuICAgICAgICAvLyBpLmUuIHNvIHBpbmNoaW5nIGNhbmNlbHMgb3V0IGFuZCBtb3ZpbmcgdG9nZXRoZXIgcGFuc1xuICAgICAgICB2YXIgdHggPSAoZGYxeCArIGRmMngpIC8gMjtcbiAgICAgICAgdmFyIHR5ID0gKGRmMXkgKyBkZjJ5KSAvIDI7XG5cbiAgICAgICAgLy8gbm93IGNhbGN1bGF0ZSB0aGUgem9vbVxuICAgICAgICB2YXIgem9vbTEgPSBjeS56b29tKCk7XG4gICAgICAgIHZhciB6b29tMiA9IHpvb20xICogZmFjdG9yO1xuICAgICAgICB2YXIgcGFuMSA9IGN5LnBhbigpO1xuXG4gICAgICAgIC8vIHRoZSBtb2RlbCBjZW50ZXIgcG9pbnQgY29udmVydGVkIHRvIHRoZSBjdXJyZW50IHJlbmRlcmVkIHBvc1xuICAgICAgICB2YXIgY3RyeCA9IG1vZGVsQ2VudGVyMVswXSAqIHpvb20xICsgcGFuMS54O1xuICAgICAgICB2YXIgY3RyeSA9IG1vZGVsQ2VudGVyMVsxXSAqIHpvb20xICsgcGFuMS55O1xuICAgICAgICB2YXIgcGFuMiA9IHtcbiAgICAgICAgICB4OiAtem9vbTIgLyB6b29tMSAqIChjdHJ4IC0gcGFuMS54IC0gdHgpICsgY3RyeCxcbiAgICAgICAgICB5OiAtem9vbTIgLyB6b29tMSAqIChjdHJ5IC0gcGFuMS55IC0gdHkpICsgY3RyeVxuICAgICAgICB9O1xuXG4gICAgICAgIC8vIHJlbW92ZSBkcmFnZ2VkIGVsZXNcbiAgICAgICAgaWYgKF9zdGFydCAmJiBfc3RhcnQuYWN0aXZlKCkpIHtcbiAgICAgICAgICB2YXIgZHJhZ2dlZEVsZXMgPSByLmRyYWdEYXRhLnRvdWNoRHJhZ0VsZXM7XG4gICAgICAgICAgZnJlZURyYWdnZWRFbGVtZW50cyhkcmFnZ2VkRWxlcyk7XG4gICAgICAgICAgci5yZWRyYXdIaW50KCdkcmFnJywgdHJ1ZSk7XG4gICAgICAgICAgci5yZWRyYXdIaW50KCdlbGVzJywgdHJ1ZSk7XG4gICAgICAgICAgX3N0YXJ0LnVuYWN0aXZhdGUoKS5lbWl0KCdmcmVlb24nKTtcbiAgICAgICAgICBkcmFnZ2VkRWxlcy5lbWl0KCdmcmVlJyk7XG4gICAgICAgICAgaWYgKHIuZHJhZ0RhdGEuZGlkRHJhZykge1xuICAgICAgICAgICAgX3N0YXJ0LmVtaXQoJ2RyYWdmcmVlb24nKTtcbiAgICAgICAgICAgIGRyYWdnZWRFbGVzLmVtaXQoJ2RyYWdmcmVlJyk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGN5LnZpZXdwb3J0KHtcbiAgICAgICAgICB6b29tOiB6b29tMixcbiAgICAgICAgICBwYW46IHBhbjIsXG4gICAgICAgICAgY2FuY2VsT25GYWlsZWRab29tOiB0cnVlXG4gICAgICAgIH0pO1xuICAgICAgICBjeS5lbWl0KCdwaW5jaHpvb20nKTtcbiAgICAgICAgZGlzdGFuY2UxID0gZGlzdGFuY2UyO1xuICAgICAgICBmMXgxID0gZjF4MjtcbiAgICAgICAgZjF5MSA9IGYxeTI7XG4gICAgICAgIGYyeDEgPSBmMngyO1xuICAgICAgICBmMnkxID0gZjJ5MjtcbiAgICAgICAgci5waW5jaGluZyA9IHRydWU7XG4gICAgICB9XG5cbiAgICAgIC8vIFJlLXByb2plY3RcbiAgICAgIGlmIChlLnRvdWNoZXNbMF0pIHtcbiAgICAgICAgdmFyIHBvcyA9IHIucHJvamVjdEludG9WaWV3cG9ydChlLnRvdWNoZXNbMF0uY2xpZW50WCwgZS50b3VjaGVzWzBdLmNsaWVudFkpO1xuICAgICAgICBub3dbMF0gPSBwb3NbMF07XG4gICAgICAgIG5vd1sxXSA9IHBvc1sxXTtcbiAgICAgIH1cbiAgICAgIGlmIChlLnRvdWNoZXNbMV0pIHtcbiAgICAgICAgdmFyIHBvcyA9IHIucHJvamVjdEludG9WaWV3cG9ydChlLnRvdWNoZXNbMV0uY2xpZW50WCwgZS50b3VjaGVzWzFdLmNsaWVudFkpO1xuICAgICAgICBub3dbMl0gPSBwb3NbMF07XG4gICAgICAgIG5vd1szXSA9IHBvc1sxXTtcbiAgICAgIH1cbiAgICAgIGlmIChlLnRvdWNoZXNbMl0pIHtcbiAgICAgICAgdmFyIHBvcyA9IHIucHJvamVjdEludG9WaWV3cG9ydChlLnRvdWNoZXNbMl0uY2xpZW50WCwgZS50b3VjaGVzWzJdLmNsaWVudFkpO1xuICAgICAgICBub3dbNF0gPSBwb3NbMF07XG4gICAgICAgIG5vd1s1XSA9IHBvc1sxXTtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKGUudG91Y2hlc1swXSAmJiAhci50b3VjaERhdGEuZGlkU2VsZWN0IC8vIGRvbid0IGFsbG93IGJveCBzZWxlY3Rpb24gdG8gZGVncmFkZSB0byBzaW5nbGUgZmluZ2VyIGV2ZW50cyBsaWtlIHBhbm5pbmdcbiAgICApIHtcbiAgICAgIHZhciBzdGFydCA9IHIudG91Y2hEYXRhLnN0YXJ0O1xuICAgICAgdmFyIGxhc3QgPSByLnRvdWNoRGF0YS5sYXN0O1xuICAgICAgdmFyIG5lYXI7XG4gICAgICBpZiAoIXIuaG92ZXJEYXRhLmRyYWdnaW5nRWxlcyAmJiAhci5zd2lwZVBhbm5pbmcpIHtcbiAgICAgICAgbmVhciA9IHIuZmluZE5lYXJlc3RFbGVtZW50KG5vd1swXSwgbm93WzFdLCB0cnVlLCB0cnVlKTtcbiAgICAgIH1cbiAgICAgIGlmIChjYXB0dXJlICYmIHN0YXJ0ICE9IG51bGwpIHtcbiAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgfVxuXG4gICAgICAvLyBkcmFnZ2luZyBub2Rlc1xuICAgICAgaWYgKGNhcHR1cmUgJiYgc3RhcnQgIT0gbnVsbCAmJiByLm5vZGVJc0RyYWdnYWJsZShzdGFydCkpIHtcbiAgICAgICAgaWYgKGlzT3ZlclRocmVzaG9sZERyYWcpIHtcbiAgICAgICAgICAvLyB0aGVuIGRyYWdnaW5nIGNhbiBoYXBwZW5cbiAgICAgICAgICB2YXIgZHJhZ2dlZEVsZXMgPSByLmRyYWdEYXRhLnRvdWNoRHJhZ0VsZXM7XG4gICAgICAgICAgdmFyIGp1c3RTdGFydGVkRHJhZyA9ICFyLmRyYWdEYXRhLmRpZERyYWc7XG4gICAgICAgICAgaWYgKGp1c3RTdGFydGVkRHJhZykge1xuICAgICAgICAgICAgYWRkTm9kZXNUb0RyYWcoZHJhZ2dlZEVsZXMsIHtcbiAgICAgICAgICAgICAgaW5EcmFnTGF5ZXI6IHRydWVcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH1cbiAgICAgICAgICByLmRyYWdEYXRhLmRpZERyYWcgPSB0cnVlO1xuICAgICAgICAgIHZhciB0b3RhbFNoaWZ0ID0ge1xuICAgICAgICAgICAgeDogMCxcbiAgICAgICAgICAgIHk6IDBcbiAgICAgICAgICB9O1xuICAgICAgICAgIGlmIChudW1iZXIkMShkaXNwWzBdKSAmJiBudW1iZXIkMShkaXNwWzFdKSkge1xuICAgICAgICAgICAgdG90YWxTaGlmdC54ICs9IGRpc3BbMF07XG4gICAgICAgICAgICB0b3RhbFNoaWZ0LnkgKz0gZGlzcFsxXTtcbiAgICAgICAgICAgIGlmIChqdXN0U3RhcnRlZERyYWcpIHtcbiAgICAgICAgICAgICAgci5yZWRyYXdIaW50KCdlbGVzJywgdHJ1ZSk7XG4gICAgICAgICAgICAgIHZhciBkcmFnRGVsdGEgPSByLnRvdWNoRGF0YS5kcmFnRGVsdGE7XG4gICAgICAgICAgICAgIGlmIChkcmFnRGVsdGEgJiYgbnVtYmVyJDEoZHJhZ0RlbHRhWzBdKSAmJiBudW1iZXIkMShkcmFnRGVsdGFbMV0pKSB7XG4gICAgICAgICAgICAgICAgdG90YWxTaGlmdC54ICs9IGRyYWdEZWx0YVswXTtcbiAgICAgICAgICAgICAgICB0b3RhbFNoaWZ0LnkgKz0gZHJhZ0RlbHRhWzFdO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIHIuaG92ZXJEYXRhLmRyYWdnaW5nRWxlcyA9IHRydWU7XG4gICAgICAgICAgZHJhZ2dlZEVsZXMuc2lsZW50U2hpZnQodG90YWxTaGlmdCkuZW1pdCgncG9zaXRpb24gZHJhZycpO1xuICAgICAgICAgIHIucmVkcmF3SGludCgnZHJhZycsIHRydWUpO1xuICAgICAgICAgIGlmIChyLnRvdWNoRGF0YS5zdGFydFBvc2l0aW9uWzBdID09IGVhcmxpZXJbMF0gJiYgci50b3VjaERhdGEuc3RhcnRQb3NpdGlvblsxXSA9PSBlYXJsaWVyWzFdKSB7XG4gICAgICAgICAgICByLnJlZHJhd0hpbnQoJ2VsZXMnLCB0cnVlKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgci5yZWRyYXcoKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAvLyBvdGhlcndpc2Uga2VlcCB0cmFjayBvZiBkcmFnIGRlbHRhIGZvciBsYXRlclxuICAgICAgICAgIHZhciBkcmFnRGVsdGEgPSByLnRvdWNoRGF0YS5kcmFnRGVsdGEgPSByLnRvdWNoRGF0YS5kcmFnRGVsdGEgfHwgW107XG4gICAgICAgICAgaWYgKGRyYWdEZWx0YS5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgIGRyYWdEZWx0YS5wdXNoKGRpc3BbMF0pO1xuICAgICAgICAgICAgZHJhZ0RlbHRhLnB1c2goZGlzcFsxXSk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGRyYWdEZWx0YVswXSArPSBkaXNwWzBdO1xuICAgICAgICAgICAgZHJhZ0RlbHRhWzFdICs9IGRpc3BbMV07XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIC8vIHRvdWNobW92ZVxuICAgICAge1xuICAgICAgICB0cmlnZ2VyRXZlbnRzKHN0YXJ0IHx8IG5lYXIsIFsndG91Y2htb3ZlJywgJ3RhcGRyYWcnLCAndm1vdXNlbW92ZSddLCBlLCB7XG4gICAgICAgICAgeDogbm93WzBdLFxuICAgICAgICAgIHk6IG5vd1sxXVxuICAgICAgICB9KTtcbiAgICAgICAgaWYgKCghc3RhcnQgfHwgIXN0YXJ0LmdyYWJiZWQoKSkgJiYgbmVhciAhPSBsYXN0KSB7XG4gICAgICAgICAgaWYgKGxhc3QpIHtcbiAgICAgICAgICAgIGxhc3QuZW1pdCh7XG4gICAgICAgICAgICAgIG9yaWdpbmFsRXZlbnQ6IGUsXG4gICAgICAgICAgICAgIHR5cGU6ICd0YXBkcmFnb3V0JyxcbiAgICAgICAgICAgICAgcG9zaXRpb246IHtcbiAgICAgICAgICAgICAgICB4OiBub3dbMF0sXG4gICAgICAgICAgICAgICAgeTogbm93WzFdXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAobmVhcikge1xuICAgICAgICAgICAgbmVhci5lbWl0KHtcbiAgICAgICAgICAgICAgb3JpZ2luYWxFdmVudDogZSxcbiAgICAgICAgICAgICAgdHlwZTogJ3RhcGRyYWdvdmVyJyxcbiAgICAgICAgICAgICAgcG9zaXRpb246IHtcbiAgICAgICAgICAgICAgICB4OiBub3dbMF0sXG4gICAgICAgICAgICAgICAgeTogbm93WzFdXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByLnRvdWNoRGF0YS5sYXN0ID0gbmVhcjtcbiAgICAgIH1cblxuICAgICAgLy8gY2hlY2sgdG8gY2FuY2VsIHRhcGhvbGRcbiAgICAgIGlmIChjYXB0dXJlKSB7XG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbm93Lmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgaWYgKG5vd1tpXSAmJiByLnRvdWNoRGF0YS5zdGFydFBvc2l0aW9uW2ldICYmIGlzT3ZlclRocmVzaG9sZERyYWcpIHtcbiAgICAgICAgICAgIHIudG91Y2hEYXRhLnNpbmdsZVRvdWNoTW92ZWQgPSB0cnVlO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICAvLyBwYW5uaW5nXG4gICAgICBpZiAoY2FwdHVyZSAmJiAoc3RhcnQgPT0gbnVsbCB8fCBzdGFydC5wYW5uYWJsZSgpKSAmJiBjeS5wYW5uaW5nRW5hYmxlZCgpICYmIGN5LnVzZXJQYW5uaW5nRW5hYmxlZCgpKSB7XG4gICAgICAgIHZhciBhbGxvd1Bhc3N0aHJvdWdoID0gYWxsb3dQYW5uaW5nUGFzc3Rocm91Z2goc3RhcnQsIHIudG91Y2hEYXRhLnN0YXJ0cyk7XG4gICAgICAgIGlmIChhbGxvd1Bhc3N0aHJvdWdoKSB7XG4gICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgIGlmICghci5kYXRhLmJnQWN0aXZlUG9zaXN0aW9uKSB7XG4gICAgICAgICAgICByLmRhdGEuYmdBY3RpdmVQb3Npc3Rpb24gPSBhcnJheTJwb2ludChyLnRvdWNoRGF0YS5zdGFydFBvc2l0aW9uKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKHIuc3dpcGVQYW5uaW5nKSB7XG4gICAgICAgICAgICBjeS5wYW5CeSh7XG4gICAgICAgICAgICAgIHg6IGRpc3BbMF0gKiB6b29tLFxuICAgICAgICAgICAgICB5OiBkaXNwWzFdICogem9vbVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBjeS5lbWl0KCdkcmFncGFuJyk7XG4gICAgICAgICAgfSBlbHNlIGlmIChpc092ZXJUaHJlc2hvbGREcmFnKSB7XG4gICAgICAgICAgICByLnN3aXBlUGFubmluZyA9IHRydWU7XG4gICAgICAgICAgICBjeS5wYW5CeSh7XG4gICAgICAgICAgICAgIHg6IGR4ICogem9vbSxcbiAgICAgICAgICAgICAgeTogZHkgKiB6b29tXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGN5LmVtaXQoJ2RyYWdwYW4nKTtcbiAgICAgICAgICAgIGlmIChzdGFydCkge1xuICAgICAgICAgICAgICBzdGFydC51bmFjdGl2YXRlKCk7XG4gICAgICAgICAgICAgIHIucmVkcmF3SGludCgnc2VsZWN0JywgdHJ1ZSk7XG4gICAgICAgICAgICAgIHIudG91Y2hEYXRhLnN0YXJ0ID0gbnVsbDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICAvLyBSZS1wcm9qZWN0XG4gICAgICAgIHZhciBwb3MgPSByLnByb2plY3RJbnRvVmlld3BvcnQoZS50b3VjaGVzWzBdLmNsaWVudFgsIGUudG91Y2hlc1swXS5jbGllbnRZKTtcbiAgICAgICAgbm93WzBdID0gcG9zWzBdO1xuICAgICAgICBub3dbMV0gPSBwb3NbMV07XG4gICAgICB9XG4gICAgfVxuICAgIGZvciAodmFyIGogPSAwOyBqIDwgbm93Lmxlbmd0aDsgaisrKSB7XG4gICAgICBlYXJsaWVyW2pdID0gbm93W2pdO1xuICAgIH1cblxuICAgIC8vIHRoZSBhY3RpdmUgYmcgaW5kaWNhdG9yIHNob3VsZCBiZSByZW1vdmVkIHdoZW4gbWFraW5nIGEgc3dpcGUgdGhhdCBpcyBuZWl0aGVyIGZvciBkcmFnZ2luZyBub2RlcyBvciBwYW5uaW5nXG4gICAgaWYgKGNhcHR1cmUgJiYgZS50b3VjaGVzLmxlbmd0aCA+IDAgJiYgIXIuaG92ZXJEYXRhLmRyYWdnaW5nRWxlcyAmJiAhci5zd2lwZVBhbm5pbmcgJiYgci5kYXRhLmJnQWN0aXZlUG9zaXN0aW9uICE9IG51bGwpIHtcbiAgICAgIHIuZGF0YS5iZ0FjdGl2ZVBvc2lzdGlvbiA9IHVuZGVmaW5lZDtcbiAgICAgIHIucmVkcmF3SGludCgnc2VsZWN0JywgdHJ1ZSk7XG4gICAgICByLnJlZHJhdygpO1xuICAgIH1cbiAgfSwgZmFsc2UpO1xuICB2YXIgdG91Y2hjYW5jZWxIYW5kbGVyO1xuICByLnJlZ2lzdGVyQmluZGluZyhjb250YWluZXJXaW5kb3csICd0b3VjaGNhbmNlbCcsIHRvdWNoY2FuY2VsSGFuZGxlciA9IGZ1bmN0aW9uIHRvdWNoY2FuY2VsSGFuZGxlcihlKSB7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby11bnVzZWQtdmFyc1xuICAgIHZhciBzdGFydCA9IHIudG91Y2hEYXRhLnN0YXJ0O1xuICAgIHIudG91Y2hEYXRhLmNhcHR1cmUgPSBmYWxzZTtcbiAgICBpZiAoc3RhcnQpIHtcbiAgICAgIHN0YXJ0LnVuYWN0aXZhdGUoKTtcbiAgICB9XG4gIH0pO1xuICB2YXIgdG91Y2hlbmRIYW5kbGVyLCBkaWREb3VibGVUb3VjaCwgdG91Y2hUaW1lb3V0LCBwcmV2VG91Y2hUaW1lU3RhbXA7XG4gIHIucmVnaXN0ZXJCaW5kaW5nKGNvbnRhaW5lcldpbmRvdywgJ3RvdWNoZW5kJywgdG91Y2hlbmRIYW5kbGVyID0gZnVuY3Rpb24gdG91Y2hlbmRIYW5kbGVyKGUpIHtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLXVudXNlZC12YXJzXG4gICAgdmFyIHN0YXJ0ID0gci50b3VjaERhdGEuc3RhcnQ7XG4gICAgdmFyIGNhcHR1cmUgPSByLnRvdWNoRGF0YS5jYXB0dXJlO1xuICAgIGlmIChjYXB0dXJlKSB7XG4gICAgICBpZiAoZS50b3VjaGVzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICByLnRvdWNoRGF0YS5jYXB0dXJlID0gZmFsc2U7XG4gICAgICB9XG4gICAgICBlLnByZXZlbnREZWZhdWx0KCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdmFyIHNlbGVjdCA9IHIuc2VsZWN0aW9uO1xuICAgIHIuc3dpcGVQYW5uaW5nID0gZmFsc2U7XG4gICAgci5ob3ZlckRhdGEuZHJhZ2dpbmdFbGVzID0gZmFsc2U7XG4gICAgdmFyIGN5ID0gci5jeTtcbiAgICB2YXIgem9vbSA9IGN5Lnpvb20oKTtcbiAgICB2YXIgbm93ID0gci50b3VjaERhdGEubm93O1xuICAgIHZhciBlYXJsaWVyID0gci50b3VjaERhdGEuZWFybGllcjtcbiAgICBpZiAoZS50b3VjaGVzWzBdKSB7XG4gICAgICB2YXIgcG9zID0gci5wcm9qZWN0SW50b1ZpZXdwb3J0KGUudG91Y2hlc1swXS5jbGllbnRYLCBlLnRvdWNoZXNbMF0uY2xpZW50WSk7XG4gICAgICBub3dbMF0gPSBwb3NbMF07XG4gICAgICBub3dbMV0gPSBwb3NbMV07XG4gICAgfVxuICAgIGlmIChlLnRvdWNoZXNbMV0pIHtcbiAgICAgIHZhciBwb3MgPSByLnByb2plY3RJbnRvVmlld3BvcnQoZS50b3VjaGVzWzFdLmNsaWVudFgsIGUudG91Y2hlc1sxXS5jbGllbnRZKTtcbiAgICAgIG5vd1syXSA9IHBvc1swXTtcbiAgICAgIG5vd1szXSA9IHBvc1sxXTtcbiAgICB9XG4gICAgaWYgKGUudG91Y2hlc1syXSkge1xuICAgICAgdmFyIHBvcyA9IHIucHJvamVjdEludG9WaWV3cG9ydChlLnRvdWNoZXNbMl0uY2xpZW50WCwgZS50b3VjaGVzWzJdLmNsaWVudFkpO1xuICAgICAgbm93WzRdID0gcG9zWzBdO1xuICAgICAgbm93WzVdID0gcG9zWzFdO1xuICAgIH1cbiAgICBpZiAoc3RhcnQpIHtcbiAgICAgIHN0YXJ0LnVuYWN0aXZhdGUoKTtcbiAgICB9XG4gICAgdmFyIGN0eFRhcGVuZDtcbiAgICBpZiAoci50b3VjaERhdGEuY3h0KSB7XG4gICAgICBjdHhUYXBlbmQgPSB7XG4gICAgICAgIG9yaWdpbmFsRXZlbnQ6IGUsXG4gICAgICAgIHR5cGU6ICdjeHR0YXBlbmQnLFxuICAgICAgICBwb3NpdGlvbjoge1xuICAgICAgICAgIHg6IG5vd1swXSxcbiAgICAgICAgICB5OiBub3dbMV1cbiAgICAgICAgfVxuICAgICAgfTtcbiAgICAgIGlmIChzdGFydCkge1xuICAgICAgICBzdGFydC5lbWl0KGN0eFRhcGVuZCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjeS5lbWl0KGN0eFRhcGVuZCk7XG4gICAgICB9XG4gICAgICBpZiAoIXIudG91Y2hEYXRhLmN4dERyYWdnZWQpIHtcbiAgICAgICAgdmFyIGN0eFRhcCA9IHtcbiAgICAgICAgICBvcmlnaW5hbEV2ZW50OiBlLFxuICAgICAgICAgIHR5cGU6ICdjeHR0YXAnLFxuICAgICAgICAgIHBvc2l0aW9uOiB7XG4gICAgICAgICAgICB4OiBub3dbMF0sXG4gICAgICAgICAgICB5OiBub3dbMV1cbiAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgICAgIGlmIChzdGFydCkge1xuICAgICAgICAgIHN0YXJ0LmVtaXQoY3R4VGFwKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBjeS5lbWl0KGN0eFRhcCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmIChyLnRvdWNoRGF0YS5zdGFydCkge1xuICAgICAgICByLnRvdWNoRGF0YS5zdGFydC5fcHJpdmF0ZS5ncmFiYmVkID0gZmFsc2U7XG4gICAgICB9XG4gICAgICByLnRvdWNoRGF0YS5jeHQgPSBmYWxzZTtcbiAgICAgIHIudG91Y2hEYXRhLnN0YXJ0ID0gbnVsbDtcbiAgICAgIHIucmVkcmF3KCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8gbm8gbW9yZSBib3ggc2VsZWN0aW9uIGlmIHdlIGRvbid0IGhhdmUgdGhyZWUgZmluZ2Vyc1xuICAgIGlmICghZS50b3VjaGVzWzJdICYmIGN5LmJveFNlbGVjdGlvbkVuYWJsZWQoKSAmJiByLnRvdWNoRGF0YS5zZWxlY3RpbmcpIHtcbiAgICAgIHIudG91Y2hEYXRhLnNlbGVjdGluZyA9IGZhbHNlO1xuICAgICAgdmFyIGJveCA9IGN5LmNvbGxlY3Rpb24oci5nZXRBbGxJbkJveChzZWxlY3RbMF0sIHNlbGVjdFsxXSwgc2VsZWN0WzJdLCBzZWxlY3RbM10pKTtcbiAgICAgIHNlbGVjdFswXSA9IHVuZGVmaW5lZDtcbiAgICAgIHNlbGVjdFsxXSA9IHVuZGVmaW5lZDtcbiAgICAgIHNlbGVjdFsyXSA9IHVuZGVmaW5lZDtcbiAgICAgIHNlbGVjdFszXSA9IHVuZGVmaW5lZDtcbiAgICAgIHNlbGVjdFs0XSA9IDA7XG4gICAgICByLnJlZHJhd0hpbnQoJ3NlbGVjdCcsIHRydWUpO1xuICAgICAgY3kuZW1pdCh7XG4gICAgICAgIHR5cGU6ICdib3hlbmQnLFxuICAgICAgICBvcmlnaW5hbEV2ZW50OiBlLFxuICAgICAgICBwb3NpdGlvbjoge1xuICAgICAgICAgIHg6IG5vd1swXSxcbiAgICAgICAgICB5OiBub3dbMV1cbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgICB2YXIgZWxlV291bGRCZVNlbGVjdGVkID0gZnVuY3Rpb24gZWxlV291bGRCZVNlbGVjdGVkKGVsZSkge1xuICAgICAgICByZXR1cm4gZWxlLnNlbGVjdGFibGUoKSAmJiAhZWxlLnNlbGVjdGVkKCk7XG4gICAgICB9O1xuICAgICAgYm94LmVtaXQoJ2JveCcpLnN0ZEZpbHRlcihlbGVXb3VsZEJlU2VsZWN0ZWQpLnNlbGVjdCgpLmVtaXQoJ2JveHNlbGVjdCcpO1xuICAgICAgaWYgKGJveC5ub25lbXB0eSgpKSB7XG4gICAgICAgIHIucmVkcmF3SGludCgnZWxlcycsIHRydWUpO1xuICAgICAgfVxuICAgICAgci5yZWRyYXcoKTtcbiAgICB9XG4gICAgaWYgKHN0YXJ0ICE9IG51bGwpIHtcbiAgICAgIHN0YXJ0LnVuYWN0aXZhdGUoKTtcbiAgICB9XG4gICAgaWYgKGUudG91Y2hlc1syXSkge1xuICAgICAgci5kYXRhLmJnQWN0aXZlUG9zaXN0aW9uID0gdW5kZWZpbmVkO1xuICAgICAgci5yZWRyYXdIaW50KCdzZWxlY3QnLCB0cnVlKTtcbiAgICB9IGVsc2UgaWYgKGUudG91Y2hlc1sxXSkgOyBlbHNlIGlmIChlLnRvdWNoZXNbMF0pIDsgZWxzZSBpZiAoIWUudG91Y2hlc1swXSkge1xuICAgICAgci5kYXRhLmJnQWN0aXZlUG9zaXN0aW9uID0gdW5kZWZpbmVkO1xuICAgICAgci5yZWRyYXdIaW50KCdzZWxlY3QnLCB0cnVlKTtcbiAgICAgIHZhciBkcmFnZ2VkRWxlcyA9IHIuZHJhZ0RhdGEudG91Y2hEcmFnRWxlcztcbiAgICAgIGlmIChzdGFydCAhPSBudWxsKSB7XG4gICAgICAgIHZhciBzdGFydFdhc0dyYWJiZWQgPSBzdGFydC5fcHJpdmF0ZS5ncmFiYmVkO1xuICAgICAgICBmcmVlRHJhZ2dlZEVsZW1lbnRzKGRyYWdnZWRFbGVzKTtcbiAgICAgICAgci5yZWRyYXdIaW50KCdkcmFnJywgdHJ1ZSk7XG4gICAgICAgIHIucmVkcmF3SGludCgnZWxlcycsIHRydWUpO1xuICAgICAgICBpZiAoc3RhcnRXYXNHcmFiYmVkKSB7XG4gICAgICAgICAgc3RhcnQuZW1pdCgnZnJlZW9uJyk7XG4gICAgICAgICAgZHJhZ2dlZEVsZXMuZW1pdCgnZnJlZScpO1xuICAgICAgICAgIGlmIChyLmRyYWdEYXRhLmRpZERyYWcpIHtcbiAgICAgICAgICAgIHN0YXJ0LmVtaXQoJ2RyYWdmcmVlb24nKTtcbiAgICAgICAgICAgIGRyYWdnZWRFbGVzLmVtaXQoJ2RyYWdmcmVlJyk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHRyaWdnZXJFdmVudHMoc3RhcnQsIFsndG91Y2hlbmQnLCAndGFwZW5kJywgJ3Ztb3VzZXVwJywgJ3RhcGRyYWdvdXQnXSwgZSwge1xuICAgICAgICAgIHg6IG5vd1swXSxcbiAgICAgICAgICB5OiBub3dbMV1cbiAgICAgICAgfSk7XG4gICAgICAgIHN0YXJ0LnVuYWN0aXZhdGUoKTtcbiAgICAgICAgci50b3VjaERhdGEuc3RhcnQgPSBudWxsO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdmFyIG5lYXIgPSByLmZpbmROZWFyZXN0RWxlbWVudChub3dbMF0sIG5vd1sxXSwgdHJ1ZSwgdHJ1ZSk7XG4gICAgICAgIHRyaWdnZXJFdmVudHMobmVhciwgWyd0b3VjaGVuZCcsICd0YXBlbmQnLCAndm1vdXNldXAnLCAndGFwZHJhZ291dCddLCBlLCB7XG4gICAgICAgICAgeDogbm93WzBdLFxuICAgICAgICAgIHk6IG5vd1sxXVxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICAgIHZhciBkeCA9IHIudG91Y2hEYXRhLnN0YXJ0UG9zaXRpb25bMF0gLSBub3dbMF07XG4gICAgICB2YXIgZHgyID0gZHggKiBkeDtcbiAgICAgIHZhciBkeSA9IHIudG91Y2hEYXRhLnN0YXJ0UG9zaXRpb25bMV0gLSBub3dbMV07XG4gICAgICB2YXIgZHkyID0gZHkgKiBkeTtcbiAgICAgIHZhciBkaXN0MiA9IGR4MiArIGR5MjtcbiAgICAgIHZhciByZGlzdDIgPSBkaXN0MiAqIHpvb20gKiB6b29tO1xuXG4gICAgICAvLyBUYXAgZXZlbnQsIHJvdWdobHkgc2FtZSBhcyBtb3VzZSBjbGljayBldmVudCBmb3IgdG91Y2hcbiAgICAgIGlmICghci50b3VjaERhdGEuc2luZ2xlVG91Y2hNb3ZlZCkge1xuICAgICAgICBpZiAoIXN0YXJ0KSB7XG4gICAgICAgICAgY3kuJCgnOnNlbGVjdGVkJykudW5zZWxlY3QoWyd0YXB1bnNlbGVjdCddKTtcbiAgICAgICAgfVxuICAgICAgICB0cmlnZ2VyRXZlbnRzKHN0YXJ0LCBbJ3RhcCcsICd2Y2xpY2snXSwgZSwge1xuICAgICAgICAgIHg6IG5vd1swXSxcbiAgICAgICAgICB5OiBub3dbMV1cbiAgICAgICAgfSk7XG4gICAgICAgIGRpZERvdWJsZVRvdWNoID0gZmFsc2U7XG4gICAgICAgIGlmIChlLnRpbWVTdGFtcCAtIHByZXZUb3VjaFRpbWVTdGFtcCA8PSBjeS5tdWx0aUNsaWNrRGVib3VuY2VUaW1lKCkpIHtcbiAgICAgICAgICB0b3VjaFRpbWVvdXQgJiYgY2xlYXJUaW1lb3V0KHRvdWNoVGltZW91dCk7XG4gICAgICAgICAgZGlkRG91YmxlVG91Y2ggPSB0cnVlO1xuICAgICAgICAgIHByZXZUb3VjaFRpbWVTdGFtcCA9IG51bGw7XG4gICAgICAgICAgdHJpZ2dlckV2ZW50cyhzdGFydCwgWydkYmx0YXAnLCAndmRibGNsaWNrJ10sIGUsIHtcbiAgICAgICAgICAgIHg6IG5vd1swXSxcbiAgICAgICAgICAgIHk6IG5vd1sxXVxuICAgICAgICAgIH0pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRvdWNoVGltZW91dCA9IHNldFRpbWVvdXQoZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgaWYgKGRpZERvdWJsZVRvdWNoKSByZXR1cm47XG4gICAgICAgICAgICB0cmlnZ2VyRXZlbnRzKHN0YXJ0LCBbJ29uZXRhcCcsICd2b25lY2xpY2snXSwgZSwge1xuICAgICAgICAgICAgICB4OiBub3dbMF0sXG4gICAgICAgICAgICAgIHk6IG5vd1sxXVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfSwgY3kubXVsdGlDbGlja0RlYm91bmNlVGltZSgpKTtcbiAgICAgICAgICBwcmV2VG91Y2hUaW1lU3RhbXAgPSBlLnRpbWVTdGFtcDtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICAvLyBQcmVwYXJlIHRvIHNlbGVjdCB0aGUgY3VycmVudGx5IHRvdWNoZWQgbm9kZSwgb25seSBpZiBpdCBoYXNuJ3QgYmVlbiBkcmFnZ2VkIHBhc3QgYSBjZXJ0YWluIGRpc3RhbmNlXG4gICAgICBpZiAoc3RhcnQgIT0gbnVsbCAmJiAhci5kcmFnRGF0YS5kaWREcmFnIC8vIGRpZG4ndCBkcmFnIG5vZGVzIGFyb3VuZFxuICAgICAgJiYgc3RhcnQuX3ByaXZhdGUuc2VsZWN0YWJsZSAmJiByZGlzdDIgPCByLnRvdWNoVGFwVGhyZXNob2xkMiAmJiAhci5waW5jaGluZyAvLyBwaW5jaCB0byB6b29tIHNob3VsZCBub3QgYWZmZWN0IHNlbGVjdGlvblxuICAgICAgKSB7XG4gICAgICAgIGlmIChjeS5zZWxlY3Rpb25UeXBlKCkgPT09ICdzaW5nbGUnKSB7XG4gICAgICAgICAgY3kuJChpc1NlbGVjdGVkKS51bm1lcmdlKHN0YXJ0KS51bnNlbGVjdChbJ3RhcHVuc2VsZWN0J10pO1xuICAgICAgICAgIHN0YXJ0LnNlbGVjdChbJ3RhcHNlbGVjdCddKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBpZiAoc3RhcnQuc2VsZWN0ZWQoKSkge1xuICAgICAgICAgICAgc3RhcnQudW5zZWxlY3QoWyd0YXB1bnNlbGVjdCddKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgc3RhcnQuc2VsZWN0KFsndGFwc2VsZWN0J10pO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByLnJlZHJhd0hpbnQoJ2VsZXMnLCB0cnVlKTtcbiAgICAgIH1cbiAgICAgIHIudG91Y2hEYXRhLnNpbmdsZVRvdWNoTW92ZWQgPSB0cnVlO1xuICAgIH1cbiAgICBmb3IgKHZhciBqID0gMDsgaiA8IG5vdy5sZW5ndGg7IGorKykge1xuICAgICAgZWFybGllcltqXSA9IG5vd1tqXTtcbiAgICB9XG4gICAgci5kcmFnRGF0YS5kaWREcmFnID0gZmFsc2U7IC8vIHJlc2V0IGZvciBuZXh0IHRvdWNoc3RhcnRcblxuICAgIGlmIChlLnRvdWNoZXMubGVuZ3RoID09PSAwKSB7XG4gICAgICByLnRvdWNoRGF0YS5kcmFnRGVsdGEgPSBbXTtcbiAgICAgIHIudG91Y2hEYXRhLnN0YXJ0UG9zaXRpb24gPSBbbnVsbCwgbnVsbCwgbnVsbCwgbnVsbCwgbnVsbCwgbnVsbF07XG4gICAgICByLnRvdWNoRGF0YS5zdGFydEdQb3NpdGlvbiA9IG51bGw7XG4gICAgICByLnRvdWNoRGF0YS5kaWRTZWxlY3QgPSBmYWxzZTtcbiAgICB9XG4gICAgaWYgKGUudG91Y2hlcy5sZW5ndGggPCAyKSB7XG4gICAgICBpZiAoZS50b3VjaGVzLmxlbmd0aCA9PT0gMSkge1xuICAgICAgICAvLyB0aGUgb2xkIHN0YXJ0IGdsb2JhbCBwb3MnbiBtYXkgbm90IGJlIHRoZSBzYW1lIGZpbmdlciB0aGF0IHJlbWFpbnNcbiAgICAgICAgci50b3VjaERhdGEuc3RhcnRHUG9zaXRpb24gPSBbZS50b3VjaGVzWzBdLmNsaWVudFgsIGUudG91Y2hlc1swXS5jbGllbnRZXTtcbiAgICAgIH1cbiAgICAgIHIucGluY2hpbmcgPSBmYWxzZTtcbiAgICAgIHIucmVkcmF3SGludCgnZWxlcycsIHRydWUpO1xuICAgICAgci5yZWRyYXcoKTtcbiAgICB9XG5cbiAgICAvL3IucmVkcmF3KCk7XG4gIH0sIGZhbHNlKTtcblxuICAvLyBmYWxsYmFjayBjb21wYXRpYmlsaXR5IGxheWVyIGZvciBtcyBwb2ludGVyIGV2ZW50c1xuICBpZiAodHlwZW9mIFRvdWNoRXZlbnQgPT09ICd1bmRlZmluZWQnKSB7XG4gICAgdmFyIHBvaW50ZXJzID0gW107XG4gICAgdmFyIG1ha2VUb3VjaCA9IGZ1bmN0aW9uIG1ha2VUb3VjaChlKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBjbGllbnRYOiBlLmNsaWVudFgsXG4gICAgICAgIGNsaWVudFk6IGUuY2xpZW50WSxcbiAgICAgICAgZm9yY2U6IDEsXG4gICAgICAgIGlkZW50aWZpZXI6IGUucG9pbnRlcklkLFxuICAgICAgICBwYWdlWDogZS5wYWdlWCxcbiAgICAgICAgcGFnZVk6IGUucGFnZVksXG4gICAgICAgIHJhZGl1c1g6IGUud2lkdGggLyAyLFxuICAgICAgICByYWRpdXNZOiBlLmhlaWdodCAvIDIsXG4gICAgICAgIHNjcmVlblg6IGUuc2NyZWVuWCxcbiAgICAgICAgc2NyZWVuWTogZS5zY3JlZW5ZLFxuICAgICAgICB0YXJnZXQ6IGUudGFyZ2V0XG4gICAgICB9O1xuICAgIH07XG4gICAgdmFyIG1ha2VQb2ludGVyID0gZnVuY3Rpb24gbWFrZVBvaW50ZXIoZSkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgZXZlbnQ6IGUsXG4gICAgICAgIHRvdWNoOiBtYWtlVG91Y2goZSlcbiAgICAgIH07XG4gICAgfTtcbiAgICB2YXIgYWRkUG9pbnRlciA9IGZ1bmN0aW9uIGFkZFBvaW50ZXIoZSkge1xuICAgICAgcG9pbnRlcnMucHVzaChtYWtlUG9pbnRlcihlKSk7XG4gICAgfTtcbiAgICB2YXIgcmVtb3ZlUG9pbnRlciA9IGZ1bmN0aW9uIHJlbW92ZVBvaW50ZXIoZSkge1xuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBwb2ludGVycy5sZW5ndGg7IGkrKykge1xuICAgICAgICB2YXIgcCA9IHBvaW50ZXJzW2ldO1xuICAgICAgICBpZiAocC5ldmVudC5wb2ludGVySWQgPT09IGUucG9pbnRlcklkKSB7XG4gICAgICAgICAgcG9pbnRlcnMuc3BsaWNlKGksIDEpO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH07XG4gICAgdmFyIHVwZGF0ZVBvaW50ZXIgPSBmdW5jdGlvbiB1cGRhdGVQb2ludGVyKGUpIHtcbiAgICAgIHZhciBwID0gcG9pbnRlcnMuZmlsdGVyKGZ1bmN0aW9uIChwKSB7XG4gICAgICAgIHJldHVybiBwLmV2ZW50LnBvaW50ZXJJZCA9PT0gZS5wb2ludGVySWQ7XG4gICAgICB9KVswXTtcbiAgICAgIHAuZXZlbnQgPSBlO1xuICAgICAgcC50b3VjaCA9IG1ha2VUb3VjaChlKTtcbiAgICB9O1xuICAgIHZhciBhZGRUb3VjaGVzVG9FdmVudCA9IGZ1bmN0aW9uIGFkZFRvdWNoZXNUb0V2ZW50KGUpIHtcbiAgICAgIGUudG91Y2hlcyA9IHBvaW50ZXJzLm1hcChmdW5jdGlvbiAocCkge1xuICAgICAgICByZXR1cm4gcC50b3VjaDtcbiAgICAgIH0pO1xuICAgIH07XG4gICAgdmFyIHBvaW50ZXJJc01vdXNlID0gZnVuY3Rpb24gcG9pbnRlcklzTW91c2UoZSkge1xuICAgICAgcmV0dXJuIGUucG9pbnRlclR5cGUgPT09ICdtb3VzZScgfHwgZS5wb2ludGVyVHlwZSA9PT0gNDtcbiAgICB9O1xuICAgIHIucmVnaXN0ZXJCaW5kaW5nKHIuY29udGFpbmVyLCAncG9pbnRlcmRvd24nLCBmdW5jdGlvbiAoZSkge1xuICAgICAgaWYgKHBvaW50ZXJJc01vdXNlKGUpKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH0gLy8gbW91c2UgYWxyZWFkeSBoYW5kbGVkXG5cbiAgICAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgICAgIGFkZFBvaW50ZXIoZSk7XG4gICAgICBhZGRUb3VjaGVzVG9FdmVudChlKTtcbiAgICAgIHRvdWNoc3RhcnRIYW5kbGVyKGUpO1xuICAgIH0pO1xuICAgIHIucmVnaXN0ZXJCaW5kaW5nKHIuY29udGFpbmVyLCAncG9pbnRlcnVwJywgZnVuY3Rpb24gKGUpIHtcbiAgICAgIGlmIChwb2ludGVySXNNb3VzZShlKSkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9IC8vIG1vdXNlIGFscmVhZHkgaGFuZGxlZFxuXG4gICAgICByZW1vdmVQb2ludGVyKGUpO1xuICAgICAgYWRkVG91Y2hlc1RvRXZlbnQoZSk7XG4gICAgICB0b3VjaGVuZEhhbmRsZXIoZSk7XG4gICAgfSk7XG4gICAgci5yZWdpc3RlckJpbmRpbmcoci5jb250YWluZXIsICdwb2ludGVyY2FuY2VsJywgZnVuY3Rpb24gKGUpIHtcbiAgICAgIGlmIChwb2ludGVySXNNb3VzZShlKSkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9IC8vIG1vdXNlIGFscmVhZHkgaGFuZGxlZFxuXG4gICAgICByZW1vdmVQb2ludGVyKGUpO1xuICAgICAgYWRkVG91Y2hlc1RvRXZlbnQoZSk7XG4gICAgICB0b3VjaGNhbmNlbEhhbmRsZXIoZSk7XG4gICAgfSk7XG4gICAgci5yZWdpc3RlckJpbmRpbmcoci5jb250YWluZXIsICdwb2ludGVybW92ZScsIGZ1bmN0aW9uIChlKSB7XG4gICAgICBpZiAocG9pbnRlcklzTW91c2UoZSkpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfSAvLyBtb3VzZSBhbHJlYWR5IGhhbmRsZWRcblxuICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgdXBkYXRlUG9pbnRlcihlKTtcbiAgICAgIGFkZFRvdWNoZXNUb0V2ZW50KGUpO1xuICAgICAgdG91Y2htb3ZlSGFuZGxlcihlKTtcbiAgICB9KTtcbiAgfVxufTtcblxudmFyIEJScCQyID0ge307XG5CUnAkMi5nZW5lcmF0ZVBvbHlnb24gPSBmdW5jdGlvbiAobmFtZSwgcG9pbnRzKSB7XG4gIHJldHVybiB0aGlzLm5vZGVTaGFwZXNbbmFtZV0gPSB7XG4gICAgcmVuZGVyZXI6IHRoaXMsXG4gICAgbmFtZTogbmFtZSxcbiAgICBwb2ludHM6IHBvaW50cyxcbiAgICBkcmF3OiBmdW5jdGlvbiBkcmF3KGNvbnRleHQsIGNlbnRlclgsIGNlbnRlclksIHdpZHRoLCBoZWlnaHQsIGNvcm5lclJhZGl1cykge1xuICAgICAgdGhpcy5yZW5kZXJlci5ub2RlU2hhcGVJbXBsKCdwb2x5Z29uJywgY29udGV4dCwgY2VudGVyWCwgY2VudGVyWSwgd2lkdGgsIGhlaWdodCwgdGhpcy5wb2ludHMpO1xuICAgIH0sXG4gICAgaW50ZXJzZWN0TGluZTogZnVuY3Rpb24gaW50ZXJzZWN0TGluZShub2RlWCwgbm9kZVksIHdpZHRoLCBoZWlnaHQsIHgsIHksIHBhZGRpbmcsIGNvcm5lclJhZGl1cykge1xuICAgICAgcmV0dXJuIHBvbHlnb25JbnRlcnNlY3RMaW5lKHgsIHksIHRoaXMucG9pbnRzLCBub2RlWCwgbm9kZVksIHdpZHRoIC8gMiwgaGVpZ2h0IC8gMiwgcGFkZGluZyk7XG4gICAgfSxcbiAgICBjaGVja1BvaW50OiBmdW5jdGlvbiBjaGVja1BvaW50KHgsIHksIHBhZGRpbmcsIHdpZHRoLCBoZWlnaHQsIGNlbnRlclgsIGNlbnRlclksIGNvcm5lclJhZGl1cykge1xuICAgICAgcmV0dXJuIHBvaW50SW5zaWRlUG9seWdvbih4LCB5LCB0aGlzLnBvaW50cywgY2VudGVyWCwgY2VudGVyWSwgd2lkdGgsIGhlaWdodCwgWzAsIC0xXSwgcGFkZGluZyk7XG4gICAgfVxuICB9O1xufTtcbkJScCQyLmdlbmVyYXRlRWxsaXBzZSA9IGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuIHRoaXMubm9kZVNoYXBlc1snZWxsaXBzZSddID0ge1xuICAgIHJlbmRlcmVyOiB0aGlzLFxuICAgIG5hbWU6ICdlbGxpcHNlJyxcbiAgICBkcmF3OiBmdW5jdGlvbiBkcmF3KGNvbnRleHQsIGNlbnRlclgsIGNlbnRlclksIHdpZHRoLCBoZWlnaHQsIGNvcm5lclJhZGl1cykge1xuICAgICAgdGhpcy5yZW5kZXJlci5ub2RlU2hhcGVJbXBsKHRoaXMubmFtZSwgY29udGV4dCwgY2VudGVyWCwgY2VudGVyWSwgd2lkdGgsIGhlaWdodCk7XG4gICAgfSxcbiAgICBpbnRlcnNlY3RMaW5lOiBmdW5jdGlvbiBpbnRlcnNlY3RMaW5lKG5vZGVYLCBub2RlWSwgd2lkdGgsIGhlaWdodCwgeCwgeSwgcGFkZGluZywgY29ybmVyUmFkaXVzKSB7XG4gICAgICByZXR1cm4gaW50ZXJzZWN0TGluZUVsbGlwc2UoeCwgeSwgbm9kZVgsIG5vZGVZLCB3aWR0aCAvIDIgKyBwYWRkaW5nLCBoZWlnaHQgLyAyICsgcGFkZGluZyk7XG4gICAgfSxcbiAgICBjaGVja1BvaW50OiBmdW5jdGlvbiBjaGVja1BvaW50KHgsIHksIHBhZGRpbmcsIHdpZHRoLCBoZWlnaHQsIGNlbnRlclgsIGNlbnRlclksIGNvcm5lclJhZGl1cykge1xuICAgICAgcmV0dXJuIGNoZWNrSW5FbGxpcHNlKHgsIHksIHdpZHRoLCBoZWlnaHQsIGNlbnRlclgsIGNlbnRlclksIHBhZGRpbmcpO1xuICAgIH1cbiAgfTtcbn07XG5CUnAkMi5nZW5lcmF0ZVJvdW5kUG9seWdvbiA9IGZ1bmN0aW9uIChuYW1lLCBwb2ludHMpIHtcbiAgcmV0dXJuIHRoaXMubm9kZVNoYXBlc1tuYW1lXSA9IHtcbiAgICByZW5kZXJlcjogdGhpcyxcbiAgICBuYW1lOiBuYW1lLFxuICAgIHBvaW50czogcG9pbnRzLFxuICAgIGdldE9yQ3JlYXRlQ29ybmVyczogZnVuY3Rpb24gZ2V0T3JDcmVhdGVDb3JuZXJzKGNlbnRlclgsIGNlbnRlclksIHdpZHRoLCBoZWlnaHQsIGNvcm5lclJhZGl1cywgcnMsIGZpZWxkKSB7XG4gICAgICBpZiAocnNbZmllbGRdICE9PSB1bmRlZmluZWQgJiYgcnNbZmllbGQgKyAnLWN4J10gPT09IGNlbnRlclggJiYgcnNbZmllbGQgKyAnLWN5J10gPT09IGNlbnRlclkpIHtcbiAgICAgICAgcmV0dXJuIHJzW2ZpZWxkXTtcbiAgICAgIH1cbiAgICAgIHJzW2ZpZWxkXSA9IG5ldyBBcnJheShwb2ludHMubGVuZ3RoIC8gMik7XG4gICAgICByc1tmaWVsZCArICctY3gnXSA9IGNlbnRlclg7XG4gICAgICByc1tmaWVsZCArICctY3knXSA9IGNlbnRlclk7XG4gICAgICB2YXIgaGFsZlcgPSB3aWR0aCAvIDI7XG4gICAgICB2YXIgaGFsZkggPSBoZWlnaHQgLyAyO1xuICAgICAgY29ybmVyUmFkaXVzID0gY29ybmVyUmFkaXVzID09PSAnYXV0bycgPyBnZXRSb3VuZFBvbHlnb25SYWRpdXMod2lkdGgsIGhlaWdodCkgOiBjb3JuZXJSYWRpdXM7XG4gICAgICB2YXIgcCA9IG5ldyBBcnJheShwb2ludHMubGVuZ3RoIC8gMik7XG4gICAgICBmb3IgKHZhciBfaSA9IDA7IF9pIDwgcG9pbnRzLmxlbmd0aCAvIDI7IF9pKyspIHtcbiAgICAgICAgcFtfaV0gPSB7XG4gICAgICAgICAgeDogY2VudGVyWCArIGhhbGZXICogcG9pbnRzW19pICogMl0sXG4gICAgICAgICAgeTogY2VudGVyWSArIGhhbGZIICogcG9pbnRzW19pICogMiArIDFdXG4gICAgICAgIH07XG4gICAgICB9XG4gICAgICB2YXIgaSxcbiAgICAgICAgcDEsXG4gICAgICAgIHAyLFxuICAgICAgICBwMyxcbiAgICAgICAgbGVuID0gcC5sZW5ndGg7XG4gICAgICBwMSA9IHBbbGVuIC0gMV07XG4gICAgICAvLyBmb3IgZWFjaCBwb2ludFxuICAgICAgZm9yIChpID0gMDsgaSA8IGxlbjsgaSsrKSB7XG4gICAgICAgIHAyID0gcFtpICUgbGVuXTtcbiAgICAgICAgcDMgPSBwWyhpICsgMSkgJSBsZW5dO1xuICAgICAgICByc1tmaWVsZF1baV0gPSBnZXRSb3VuZENvcm5lcihwMSwgcDIsIHAzLCBjb3JuZXJSYWRpdXMpO1xuICAgICAgICBwMSA9IHAyO1xuICAgICAgICBwMiA9IHAzO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHJzW2ZpZWxkXTtcbiAgICB9LFxuICAgIGRyYXc6IGZ1bmN0aW9uIGRyYXcoY29udGV4dCwgY2VudGVyWCwgY2VudGVyWSwgd2lkdGgsIGhlaWdodCwgY29ybmVyUmFkaXVzLCBycykge1xuICAgICAgdGhpcy5yZW5kZXJlci5ub2RlU2hhcGVJbXBsKCdyb3VuZC1wb2x5Z29uJywgY29udGV4dCwgY2VudGVyWCwgY2VudGVyWSwgd2lkdGgsIGhlaWdodCwgdGhpcy5wb2ludHMsIHRoaXMuZ2V0T3JDcmVhdGVDb3JuZXJzKGNlbnRlclgsIGNlbnRlclksIHdpZHRoLCBoZWlnaHQsIGNvcm5lclJhZGl1cywgcnMsICdkcmF3Q29ybmVycycpKTtcbiAgICB9LFxuICAgIGludGVyc2VjdExpbmU6IGZ1bmN0aW9uIGludGVyc2VjdExpbmUobm9kZVgsIG5vZGVZLCB3aWR0aCwgaGVpZ2h0LCB4LCB5LCBwYWRkaW5nLCBjb3JuZXJSYWRpdXMsIHJzKSB7XG4gICAgICByZXR1cm4gcm91bmRQb2x5Z29uSW50ZXJzZWN0TGluZSh4LCB5LCB0aGlzLnBvaW50cywgbm9kZVgsIG5vZGVZLCB3aWR0aCwgaGVpZ2h0LCBwYWRkaW5nLCB0aGlzLmdldE9yQ3JlYXRlQ29ybmVycyhub2RlWCwgbm9kZVksIHdpZHRoLCBoZWlnaHQsIGNvcm5lclJhZGl1cywgcnMsICdjb3JuZXJzJykpO1xuICAgIH0sXG4gICAgY2hlY2tQb2ludDogZnVuY3Rpb24gY2hlY2tQb2ludCh4LCB5LCBwYWRkaW5nLCB3aWR0aCwgaGVpZ2h0LCBjZW50ZXJYLCBjZW50ZXJZLCBjb3JuZXJSYWRpdXMsIHJzKSB7XG4gICAgICByZXR1cm4gcG9pbnRJbnNpZGVSb3VuZFBvbHlnb24oeCwgeSwgdGhpcy5wb2ludHMsIGNlbnRlclgsIGNlbnRlclksIHdpZHRoLCBoZWlnaHQsIHRoaXMuZ2V0T3JDcmVhdGVDb3JuZXJzKGNlbnRlclgsIGNlbnRlclksIHdpZHRoLCBoZWlnaHQsIGNvcm5lclJhZGl1cywgcnMsICdjb3JuZXJzJykpO1xuICAgIH1cbiAgfTtcbn07XG5CUnAkMi5nZW5lcmF0ZVJvdW5kUmVjdGFuZ2xlID0gZnVuY3Rpb24gKCkge1xuICByZXR1cm4gdGhpcy5ub2RlU2hhcGVzWydyb3VuZC1yZWN0YW5nbGUnXSA9IHRoaXMubm9kZVNoYXBlc1sncm91bmRyZWN0YW5nbGUnXSA9IHtcbiAgICByZW5kZXJlcjogdGhpcyxcbiAgICBuYW1lOiAncm91bmQtcmVjdGFuZ2xlJyxcbiAgICBwb2ludHM6IGdlbmVyYXRlVW5pdE5nb25Qb2ludHNGaXRUb1NxdWFyZSg0LCAwKSxcbiAgICBkcmF3OiBmdW5jdGlvbiBkcmF3KGNvbnRleHQsIGNlbnRlclgsIGNlbnRlclksIHdpZHRoLCBoZWlnaHQsIGNvcm5lclJhZGl1cykge1xuICAgICAgdGhpcy5yZW5kZXJlci5ub2RlU2hhcGVJbXBsKHRoaXMubmFtZSwgY29udGV4dCwgY2VudGVyWCwgY2VudGVyWSwgd2lkdGgsIGhlaWdodCwgdGhpcy5wb2ludHMsIGNvcm5lclJhZGl1cyk7XG4gICAgfSxcbiAgICBpbnRlcnNlY3RMaW5lOiBmdW5jdGlvbiBpbnRlcnNlY3RMaW5lKG5vZGVYLCBub2RlWSwgd2lkdGgsIGhlaWdodCwgeCwgeSwgcGFkZGluZywgY29ybmVyUmFkaXVzKSB7XG4gICAgICByZXR1cm4gcm91bmRSZWN0YW5nbGVJbnRlcnNlY3RMaW5lKHgsIHksIG5vZGVYLCBub2RlWSwgd2lkdGgsIGhlaWdodCwgcGFkZGluZywgY29ybmVyUmFkaXVzKTtcbiAgICB9LFxuICAgIGNoZWNrUG9pbnQ6IGZ1bmN0aW9uIGNoZWNrUG9pbnQoeCwgeSwgcGFkZGluZywgd2lkdGgsIGhlaWdodCwgY2VudGVyWCwgY2VudGVyWSwgY29ybmVyUmFkaXVzKSB7XG4gICAgICB2YXIgaGFsZldpZHRoID0gd2lkdGggLyAyO1xuICAgICAgdmFyIGhhbGZIZWlnaHQgPSBoZWlnaHQgLyAyO1xuICAgICAgY29ybmVyUmFkaXVzID0gY29ybmVyUmFkaXVzID09PSAnYXV0bycgPyBnZXRSb3VuZFJlY3RhbmdsZVJhZGl1cyh3aWR0aCwgaGVpZ2h0KSA6IGNvcm5lclJhZGl1cztcbiAgICAgIGNvcm5lclJhZGl1cyA9IE1hdGgubWluKGhhbGZXaWR0aCwgaGFsZkhlaWdodCwgY29ybmVyUmFkaXVzKTtcbiAgICAgIHZhciBkaWFtID0gY29ybmVyUmFkaXVzICogMjtcblxuICAgICAgLy8gQ2hlY2sgaEJveFxuICAgICAgaWYgKHBvaW50SW5zaWRlUG9seWdvbih4LCB5LCB0aGlzLnBvaW50cywgY2VudGVyWCwgY2VudGVyWSwgd2lkdGgsIGhlaWdodCAtIGRpYW0sIFswLCAtMV0sIHBhZGRpbmcpKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuXG4gICAgICAvLyBDaGVjayB2Qm94XG4gICAgICBpZiAocG9pbnRJbnNpZGVQb2x5Z29uKHgsIHksIHRoaXMucG9pbnRzLCBjZW50ZXJYLCBjZW50ZXJZLCB3aWR0aCAtIGRpYW0sIGhlaWdodCwgWzAsIC0xXSwgcGFkZGluZykpIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG5cbiAgICAgIC8vIENoZWNrIHRvcCBsZWZ0IHF1YXJ0ZXIgY2lyY2xlXG4gICAgICBpZiAoY2hlY2tJbkVsbGlwc2UoeCwgeSwgZGlhbSwgZGlhbSwgY2VudGVyWCAtIGhhbGZXaWR0aCArIGNvcm5lclJhZGl1cywgY2VudGVyWSAtIGhhbGZIZWlnaHQgKyBjb3JuZXJSYWRpdXMsIHBhZGRpbmcpKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuXG4gICAgICAvLyBDaGVjayB0b3AgcmlnaHQgcXVhcnRlciBjaXJjbGVcbiAgICAgIGlmIChjaGVja0luRWxsaXBzZSh4LCB5LCBkaWFtLCBkaWFtLCBjZW50ZXJYICsgaGFsZldpZHRoIC0gY29ybmVyUmFkaXVzLCBjZW50ZXJZIC0gaGFsZkhlaWdodCArIGNvcm5lclJhZGl1cywgcGFkZGluZykpIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG5cbiAgICAgIC8vIENoZWNrIGJvdHRvbSByaWdodCBxdWFydGVyIGNpcmNsZVxuICAgICAgaWYgKGNoZWNrSW5FbGxpcHNlKHgsIHksIGRpYW0sIGRpYW0sIGNlbnRlclggKyBoYWxmV2lkdGggLSBjb3JuZXJSYWRpdXMsIGNlbnRlclkgKyBoYWxmSGVpZ2h0IC0gY29ybmVyUmFkaXVzLCBwYWRkaW5nKSkge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cblxuICAgICAgLy8gQ2hlY2sgYm90dG9tIGxlZnQgcXVhcnRlciBjaXJjbGVcbiAgICAgIGlmIChjaGVja0luRWxsaXBzZSh4LCB5LCBkaWFtLCBkaWFtLCBjZW50ZXJYIC0gaGFsZldpZHRoICsgY29ybmVyUmFkaXVzLCBjZW50ZXJZICsgaGFsZkhlaWdodCAtIGNvcm5lclJhZGl1cywgcGFkZGluZykpIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICB9O1xufTtcbkJScCQyLmdlbmVyYXRlQ3V0UmVjdGFuZ2xlID0gZnVuY3Rpb24gKCkge1xuICByZXR1cm4gdGhpcy5ub2RlU2hhcGVzWydjdXQtcmVjdGFuZ2xlJ10gPSB0aGlzLm5vZGVTaGFwZXNbJ2N1dHJlY3RhbmdsZSddID0ge1xuICAgIHJlbmRlcmVyOiB0aGlzLFxuICAgIG5hbWU6ICdjdXQtcmVjdGFuZ2xlJyxcbiAgICBjb3JuZXJMZW5ndGg6IGdldEN1dFJlY3RhbmdsZUNvcm5lckxlbmd0aCgpLFxuICAgIHBvaW50czogZ2VuZXJhdGVVbml0TmdvblBvaW50c0ZpdFRvU3F1YXJlKDQsIDApLFxuICAgIGRyYXc6IGZ1bmN0aW9uIGRyYXcoY29udGV4dCwgY2VudGVyWCwgY2VudGVyWSwgd2lkdGgsIGhlaWdodCwgY29ybmVyUmFkaXVzKSB7XG4gICAgICB0aGlzLnJlbmRlcmVyLm5vZGVTaGFwZUltcGwodGhpcy5uYW1lLCBjb250ZXh0LCBjZW50ZXJYLCBjZW50ZXJZLCB3aWR0aCwgaGVpZ2h0LCBudWxsLCBjb3JuZXJSYWRpdXMpO1xuICAgIH0sXG4gICAgZ2VuZXJhdGVDdXRUcmlhbmdsZVB0czogZnVuY3Rpb24gZ2VuZXJhdGVDdXRUcmlhbmdsZVB0cyh3aWR0aCwgaGVpZ2h0LCBjZW50ZXJYLCBjZW50ZXJZLCBjb3JuZXJSYWRpdXMpIHtcbiAgICAgIHZhciBjbCA9IGNvcm5lclJhZGl1cyA9PT0gJ2F1dG8nID8gdGhpcy5jb3JuZXJMZW5ndGggOiBjb3JuZXJSYWRpdXM7XG4gICAgICB2YXIgaGggPSBoZWlnaHQgLyAyO1xuICAgICAgdmFyIGh3ID0gd2lkdGggLyAyO1xuICAgICAgdmFyIHhCZWdpbiA9IGNlbnRlclggLSBodztcbiAgICAgIHZhciB4RW5kID0gY2VudGVyWCArIGh3O1xuICAgICAgdmFyIHlCZWdpbiA9IGNlbnRlclkgLSBoaDtcbiAgICAgIHZhciB5RW5kID0gY2VudGVyWSArIGhoO1xuXG4gICAgICAvLyBwb2ludHMgYXJlIGluIGNsb2Nrd2lzZSBvcmRlciwgaW5uZXIgKGltYWdpbmFyeSkgdHJpYW5nbGUgcHQgb24gWzQsIDVdXG4gICAgICByZXR1cm4ge1xuICAgICAgICB0b3BMZWZ0OiBbeEJlZ2luLCB5QmVnaW4gKyBjbCwgeEJlZ2luICsgY2wsIHlCZWdpbiwgeEJlZ2luICsgY2wsIHlCZWdpbiArIGNsXSxcbiAgICAgICAgdG9wUmlnaHQ6IFt4RW5kIC0gY2wsIHlCZWdpbiwgeEVuZCwgeUJlZ2luICsgY2wsIHhFbmQgLSBjbCwgeUJlZ2luICsgY2xdLFxuICAgICAgICBib3R0b21SaWdodDogW3hFbmQsIHlFbmQgLSBjbCwgeEVuZCAtIGNsLCB5RW5kLCB4RW5kIC0gY2wsIHlFbmQgLSBjbF0sXG4gICAgICAgIGJvdHRvbUxlZnQ6IFt4QmVnaW4gKyBjbCwgeUVuZCwgeEJlZ2luLCB5RW5kIC0gY2wsIHhCZWdpbiArIGNsLCB5RW5kIC0gY2xdXG4gICAgICB9O1xuICAgIH0sXG4gICAgaW50ZXJzZWN0TGluZTogZnVuY3Rpb24gaW50ZXJzZWN0TGluZShub2RlWCwgbm9kZVksIHdpZHRoLCBoZWlnaHQsIHgsIHksIHBhZGRpbmcsIGNvcm5lclJhZGl1cykge1xuICAgICAgdmFyIGNQdHMgPSB0aGlzLmdlbmVyYXRlQ3V0VHJpYW5nbGVQdHMod2lkdGggKyAyICogcGFkZGluZywgaGVpZ2h0ICsgMiAqIHBhZGRpbmcsIG5vZGVYLCBub2RlWSwgY29ybmVyUmFkaXVzKTtcbiAgICAgIHZhciBwdHMgPSBbXS5jb25jYXQuYXBwbHkoW10sIFtjUHRzLnRvcExlZnQuc3BsaWNlKDAsIDQpLCBjUHRzLnRvcFJpZ2h0LnNwbGljZSgwLCA0KSwgY1B0cy5ib3R0b21SaWdodC5zcGxpY2UoMCwgNCksIGNQdHMuYm90dG9tTGVmdC5zcGxpY2UoMCwgNCldKTtcbiAgICAgIHJldHVybiBwb2x5Z29uSW50ZXJzZWN0TGluZSh4LCB5LCBwdHMsIG5vZGVYLCBub2RlWSk7XG4gICAgfSxcbiAgICBjaGVja1BvaW50OiBmdW5jdGlvbiBjaGVja1BvaW50KHgsIHksIHBhZGRpbmcsIHdpZHRoLCBoZWlnaHQsIGNlbnRlclgsIGNlbnRlclksIGNvcm5lclJhZGl1cykge1xuICAgICAgdmFyIGNsID0gY29ybmVyUmFkaXVzID09PSAnYXV0bycgPyB0aGlzLmNvcm5lckxlbmd0aCA6IGNvcm5lclJhZGl1cztcbiAgICAgIC8vIENoZWNrIGhCb3hcbiAgICAgIGlmIChwb2ludEluc2lkZVBvbHlnb24oeCwgeSwgdGhpcy5wb2ludHMsIGNlbnRlclgsIGNlbnRlclksIHdpZHRoLCBoZWlnaHQgLSAyICogY2wsIFswLCAtMV0sIHBhZGRpbmcpKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuXG4gICAgICAvLyBDaGVjayB2Qm94XG4gICAgICBpZiAocG9pbnRJbnNpZGVQb2x5Z29uKHgsIHksIHRoaXMucG9pbnRzLCBjZW50ZXJYLCBjZW50ZXJZLCB3aWR0aCAtIDIgKiBjbCwgaGVpZ2h0LCBbMCwgLTFdLCBwYWRkaW5nKSkge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cbiAgICAgIHZhciBjdXRUcmlhbmdsZVB0cyA9IHRoaXMuZ2VuZXJhdGVDdXRUcmlhbmdsZVB0cyh3aWR0aCwgaGVpZ2h0LCBjZW50ZXJYLCBjZW50ZXJZKTtcbiAgICAgIHJldHVybiBwb2ludEluc2lkZVBvbHlnb25Qb2ludHMoeCwgeSwgY3V0VHJpYW5nbGVQdHMudG9wTGVmdCkgfHwgcG9pbnRJbnNpZGVQb2x5Z29uUG9pbnRzKHgsIHksIGN1dFRyaWFuZ2xlUHRzLnRvcFJpZ2h0KSB8fCBwb2ludEluc2lkZVBvbHlnb25Qb2ludHMoeCwgeSwgY3V0VHJpYW5nbGVQdHMuYm90dG9tUmlnaHQpIHx8IHBvaW50SW5zaWRlUG9seWdvblBvaW50cyh4LCB5LCBjdXRUcmlhbmdsZVB0cy5ib3R0b21MZWZ0KTtcbiAgICB9XG4gIH07XG59O1xuQlJwJDIuZ2VuZXJhdGVCYXJyZWwgPSBmdW5jdGlvbiAoKSB7XG4gIHJldHVybiB0aGlzLm5vZGVTaGFwZXNbJ2JhcnJlbCddID0ge1xuICAgIHJlbmRlcmVyOiB0aGlzLFxuICAgIG5hbWU6ICdiYXJyZWwnLFxuICAgIHBvaW50czogZ2VuZXJhdGVVbml0TmdvblBvaW50c0ZpdFRvU3F1YXJlKDQsIDApLFxuICAgIGRyYXc6IGZ1bmN0aW9uIGRyYXcoY29udGV4dCwgY2VudGVyWCwgY2VudGVyWSwgd2lkdGgsIGhlaWdodCwgY29ybmVyUmFkaXVzKSB7XG4gICAgICB0aGlzLnJlbmRlcmVyLm5vZGVTaGFwZUltcGwodGhpcy5uYW1lLCBjb250ZXh0LCBjZW50ZXJYLCBjZW50ZXJZLCB3aWR0aCwgaGVpZ2h0KTtcbiAgICB9LFxuICAgIGludGVyc2VjdExpbmU6IGZ1bmN0aW9uIGludGVyc2VjdExpbmUobm9kZVgsIG5vZGVZLCB3aWR0aCwgaGVpZ2h0LCB4LCB5LCBwYWRkaW5nLCBjb3JuZXJSYWRpdXMpIHtcbiAgICAgIC8vIHVzZSB0d28gZml4ZWQgdCB2YWx1ZXMgZm9yIHRoZSBiZXppZXIgY3VydmUgYXBwcm94aW1hdGlvblxuXG4gICAgICB2YXIgdDAgPSAwLjE1O1xuICAgICAgdmFyIHQxID0gMC41O1xuICAgICAgdmFyIHQyID0gMC44NTtcbiAgICAgIHZhciBiUHRzID0gdGhpcy5nZW5lcmF0ZUJhcnJlbEJlemllclB0cyh3aWR0aCArIDIgKiBwYWRkaW5nLCBoZWlnaHQgKyAyICogcGFkZGluZywgbm9kZVgsIG5vZGVZKTtcbiAgICAgIHZhciBhcHByb3hpbWF0ZUJhcnJlbEN1cnZlUHRzID0gZnVuY3Rpb24gYXBwcm94aW1hdGVCYXJyZWxDdXJ2ZVB0cyhwdHMpIHtcbiAgICAgICAgLy8gYXBwcm94aW1hdGUgY3VydmUgcHRzIGJhc2VkIG9uIHRoZSB0d28gdCB2YWx1ZXNcbiAgICAgICAgdmFyIG0wID0gcWJlemllclB0QXQoe1xuICAgICAgICAgIHg6IHB0c1swXSxcbiAgICAgICAgICB5OiBwdHNbMV1cbiAgICAgICAgfSwge1xuICAgICAgICAgIHg6IHB0c1syXSxcbiAgICAgICAgICB5OiBwdHNbM11cbiAgICAgICAgfSwge1xuICAgICAgICAgIHg6IHB0c1s0XSxcbiAgICAgICAgICB5OiBwdHNbNV1cbiAgICAgICAgfSwgdDApO1xuICAgICAgICB2YXIgbTEgPSBxYmV6aWVyUHRBdCh7XG4gICAgICAgICAgeDogcHRzWzBdLFxuICAgICAgICAgIHk6IHB0c1sxXVxuICAgICAgICB9LCB7XG4gICAgICAgICAgeDogcHRzWzJdLFxuICAgICAgICAgIHk6IHB0c1szXVxuICAgICAgICB9LCB7XG4gICAgICAgICAgeDogcHRzWzRdLFxuICAgICAgICAgIHk6IHB0c1s1XVxuICAgICAgICB9LCB0MSk7XG4gICAgICAgIHZhciBtMiA9IHFiZXppZXJQdEF0KHtcbiAgICAgICAgICB4OiBwdHNbMF0sXG4gICAgICAgICAgeTogcHRzWzFdXG4gICAgICAgIH0sIHtcbiAgICAgICAgICB4OiBwdHNbMl0sXG4gICAgICAgICAgeTogcHRzWzNdXG4gICAgICAgIH0sIHtcbiAgICAgICAgICB4OiBwdHNbNF0sXG4gICAgICAgICAgeTogcHRzWzVdXG4gICAgICAgIH0sIHQyKTtcbiAgICAgICAgcmV0dXJuIFtwdHNbMF0sIHB0c1sxXSwgbTAueCwgbTAueSwgbTEueCwgbTEueSwgbTIueCwgbTIueSwgcHRzWzRdLCBwdHNbNV1dO1xuICAgICAgfTtcbiAgICAgIHZhciBwdHMgPSBbXS5jb25jYXQoYXBwcm94aW1hdGVCYXJyZWxDdXJ2ZVB0cyhiUHRzLnRvcExlZnQpLCBhcHByb3hpbWF0ZUJhcnJlbEN1cnZlUHRzKGJQdHMudG9wUmlnaHQpLCBhcHByb3hpbWF0ZUJhcnJlbEN1cnZlUHRzKGJQdHMuYm90dG9tUmlnaHQpLCBhcHByb3hpbWF0ZUJhcnJlbEN1cnZlUHRzKGJQdHMuYm90dG9tTGVmdCkpO1xuICAgICAgcmV0dXJuIHBvbHlnb25JbnRlcnNlY3RMaW5lKHgsIHksIHB0cywgbm9kZVgsIG5vZGVZKTtcbiAgICB9LFxuICAgIGdlbmVyYXRlQmFycmVsQmV6aWVyUHRzOiBmdW5jdGlvbiBnZW5lcmF0ZUJhcnJlbEJlemllclB0cyh3aWR0aCwgaGVpZ2h0LCBjZW50ZXJYLCBjZW50ZXJZKSB7XG4gICAgICB2YXIgaGggPSBoZWlnaHQgLyAyO1xuICAgICAgdmFyIGh3ID0gd2lkdGggLyAyO1xuICAgICAgdmFyIHhCZWdpbiA9IGNlbnRlclggLSBodztcbiAgICAgIHZhciB4RW5kID0gY2VudGVyWCArIGh3O1xuICAgICAgdmFyIHlCZWdpbiA9IGNlbnRlclkgLSBoaDtcbiAgICAgIHZhciB5RW5kID0gY2VudGVyWSArIGhoO1xuICAgICAgdmFyIGN1cnZlQ29uc3RhbnRzID0gZ2V0QmFycmVsQ3VydmVDb25zdGFudHMod2lkdGgsIGhlaWdodCk7XG4gICAgICB2YXIgaE9mZnNldCA9IGN1cnZlQ29uc3RhbnRzLmhlaWdodE9mZnNldDtcbiAgICAgIHZhciB3T2Zmc2V0ID0gY3VydmVDb25zdGFudHMud2lkdGhPZmZzZXQ7XG4gICAgICB2YXIgY3RybFB0WE9mZnNldCA9IGN1cnZlQ29uc3RhbnRzLmN0cmxQdE9mZnNldFBjdCAqIHdpZHRoO1xuXG4gICAgICAvLyBwb2ludHMgYXJlIGluIGNsb2Nrd2lzZSBvcmRlciwgaW5uZXIgKGltYWdpbmFyeSkgY29udHJvbCBwdCBvbiBbNCwgNV1cbiAgICAgIHZhciBwdHMgPSB7XG4gICAgICAgIHRvcExlZnQ6IFt4QmVnaW4sIHlCZWdpbiArIGhPZmZzZXQsIHhCZWdpbiArIGN0cmxQdFhPZmZzZXQsIHlCZWdpbiwgeEJlZ2luICsgd09mZnNldCwgeUJlZ2luXSxcbiAgICAgICAgdG9wUmlnaHQ6IFt4RW5kIC0gd09mZnNldCwgeUJlZ2luLCB4RW5kIC0gY3RybFB0WE9mZnNldCwgeUJlZ2luLCB4RW5kLCB5QmVnaW4gKyBoT2Zmc2V0XSxcbiAgICAgICAgYm90dG9tUmlnaHQ6IFt4RW5kLCB5RW5kIC0gaE9mZnNldCwgeEVuZCAtIGN0cmxQdFhPZmZzZXQsIHlFbmQsIHhFbmQgLSB3T2Zmc2V0LCB5RW5kXSxcbiAgICAgICAgYm90dG9tTGVmdDogW3hCZWdpbiArIHdPZmZzZXQsIHlFbmQsIHhCZWdpbiArIGN0cmxQdFhPZmZzZXQsIHlFbmQsIHhCZWdpbiwgeUVuZCAtIGhPZmZzZXRdXG4gICAgICB9O1xuICAgICAgcHRzLnRvcExlZnQuaXNUb3AgPSB0cnVlO1xuICAgICAgcHRzLnRvcFJpZ2h0LmlzVG9wID0gdHJ1ZTtcbiAgICAgIHB0cy5ib3R0b21MZWZ0LmlzQm90dG9tID0gdHJ1ZTtcbiAgICAgIHB0cy5ib3R0b21SaWdodC5pc0JvdHRvbSA9IHRydWU7XG4gICAgICByZXR1cm4gcHRzO1xuICAgIH0sXG4gICAgY2hlY2tQb2ludDogZnVuY3Rpb24gY2hlY2tQb2ludCh4LCB5LCBwYWRkaW5nLCB3aWR0aCwgaGVpZ2h0LCBjZW50ZXJYLCBjZW50ZXJZLCBjb3JuZXJSYWRpdXMpIHtcbiAgICAgIHZhciBjdXJ2ZUNvbnN0YW50cyA9IGdldEJhcnJlbEN1cnZlQ29uc3RhbnRzKHdpZHRoLCBoZWlnaHQpO1xuICAgICAgdmFyIGhPZmZzZXQgPSBjdXJ2ZUNvbnN0YW50cy5oZWlnaHRPZmZzZXQ7XG4gICAgICB2YXIgd09mZnNldCA9IGN1cnZlQ29uc3RhbnRzLndpZHRoT2Zmc2V0O1xuXG4gICAgICAvLyBDaGVjayBoQm94XG4gICAgICBpZiAocG9pbnRJbnNpZGVQb2x5Z29uKHgsIHksIHRoaXMucG9pbnRzLCBjZW50ZXJYLCBjZW50ZXJZLCB3aWR0aCwgaGVpZ2h0IC0gMiAqIGhPZmZzZXQsIFswLCAtMV0sIHBhZGRpbmcpKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuXG4gICAgICAvLyBDaGVjayB2Qm94XG4gICAgICBpZiAocG9pbnRJbnNpZGVQb2x5Z29uKHgsIHksIHRoaXMucG9pbnRzLCBjZW50ZXJYLCBjZW50ZXJZLCB3aWR0aCAtIDIgKiB3T2Zmc2V0LCBoZWlnaHQsIFswLCAtMV0sIHBhZGRpbmcpKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgICAgdmFyIGJhcnJlbEN1cnZlUHRzID0gdGhpcy5nZW5lcmF0ZUJhcnJlbEJlemllclB0cyh3aWR0aCwgaGVpZ2h0LCBjZW50ZXJYLCBjZW50ZXJZKTtcbiAgICAgIHZhciBnZXRDdXJ2ZVQgPSBmdW5jdGlvbiBnZXRDdXJ2ZVQoeCwgeSwgY3VydmVQdHMpIHtcbiAgICAgICAgdmFyIHgwID0gY3VydmVQdHNbNF07XG4gICAgICAgIHZhciB4MSA9IGN1cnZlUHRzWzJdO1xuICAgICAgICB2YXIgeDIgPSBjdXJ2ZVB0c1swXTtcbiAgICAgICAgdmFyIHkwID0gY3VydmVQdHNbNV07XG4gICAgICAgIC8vIHZhciB5MSA9IGN1cnZlUHRzWyAzIF07XG4gICAgICAgIHZhciB5MiA9IGN1cnZlUHRzWzFdO1xuICAgICAgICB2YXIgeE1pbiA9IE1hdGgubWluKHgwLCB4Mik7XG4gICAgICAgIHZhciB4TWF4ID0gTWF0aC5tYXgoeDAsIHgyKTtcbiAgICAgICAgdmFyIHlNaW4gPSBNYXRoLm1pbih5MCwgeTIpO1xuICAgICAgICB2YXIgeU1heCA9IE1hdGgubWF4KHkwLCB5Mik7XG4gICAgICAgIGlmICh4TWluIDw9IHggJiYgeCA8PSB4TWF4ICYmIHlNaW4gPD0geSAmJiB5IDw9IHlNYXgpIHtcbiAgICAgICAgICB2YXIgY29lZmYgPSBiZXppZXJQdHNUb1F1YWRDb2VmZih4MCwgeDEsIHgyKTtcbiAgICAgICAgICB2YXIgcm9vdHMgPSBzb2x2ZVF1YWRyYXRpYyhjb2VmZlswXSwgY29lZmZbMV0sIGNvZWZmWzJdLCB4KTtcbiAgICAgICAgICB2YXIgdmFsaWRSb290cyA9IHJvb3RzLmZpbHRlcihmdW5jdGlvbiAocikge1xuICAgICAgICAgICAgcmV0dXJuIDAgPD0gciAmJiByIDw9IDE7XG4gICAgICAgICAgfSk7XG4gICAgICAgICAgaWYgKHZhbGlkUm9vdHMubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgcmV0dXJuIHZhbGlkUm9vdHNbMF07XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfTtcbiAgICAgIHZhciBjdXJ2ZVJlZ2lvbnMgPSBPYmplY3Qua2V5cyhiYXJyZWxDdXJ2ZVB0cyk7XG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGN1cnZlUmVnaW9ucy5sZW5ndGg7IGkrKykge1xuICAgICAgICB2YXIgY29ybmVyID0gY3VydmVSZWdpb25zW2ldO1xuICAgICAgICB2YXIgY29ybmVyUHRzID0gYmFycmVsQ3VydmVQdHNbY29ybmVyXTtcbiAgICAgICAgdmFyIHQgPSBnZXRDdXJ2ZVQoeCwgeSwgY29ybmVyUHRzKTtcbiAgICAgICAgaWYgKHQgPT0gbnVsbCkge1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG4gICAgICAgIHZhciB5MCA9IGNvcm5lclB0c1s1XTtcbiAgICAgICAgdmFyIHkxID0gY29ybmVyUHRzWzNdO1xuICAgICAgICB2YXIgeTIgPSBjb3JuZXJQdHNbMV07XG4gICAgICAgIHZhciBiZXpZID0gcWJlemllckF0KHkwLCB5MSwgeTIsIHQpO1xuICAgICAgICBpZiAoY29ybmVyUHRzLmlzVG9wICYmIGJlelkgPD0geSkge1xuICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIGlmIChjb3JuZXJQdHMuaXNCb3R0b20gJiYgeSA8PSBiZXpZKSB7XG4gICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gIH07XG59O1xuQlJwJDIuZ2VuZXJhdGVCb3R0b21Sb3VuZHJlY3RhbmdsZSA9IGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuIHRoaXMubm9kZVNoYXBlc1snYm90dG9tLXJvdW5kLXJlY3RhbmdsZSddID0gdGhpcy5ub2RlU2hhcGVzWydib3R0b21yb3VuZHJlY3RhbmdsZSddID0ge1xuICAgIHJlbmRlcmVyOiB0aGlzLFxuICAgIG5hbWU6ICdib3R0b20tcm91bmQtcmVjdGFuZ2xlJyxcbiAgICBwb2ludHM6IGdlbmVyYXRlVW5pdE5nb25Qb2ludHNGaXRUb1NxdWFyZSg0LCAwKSxcbiAgICBkcmF3OiBmdW5jdGlvbiBkcmF3KGNvbnRleHQsIGNlbnRlclgsIGNlbnRlclksIHdpZHRoLCBoZWlnaHQsIGNvcm5lclJhZGl1cykge1xuICAgICAgdGhpcy5yZW5kZXJlci5ub2RlU2hhcGVJbXBsKHRoaXMubmFtZSwgY29udGV4dCwgY2VudGVyWCwgY2VudGVyWSwgd2lkdGgsIGhlaWdodCwgdGhpcy5wb2ludHMsIGNvcm5lclJhZGl1cyk7XG4gICAgfSxcbiAgICBpbnRlcnNlY3RMaW5lOiBmdW5jdGlvbiBpbnRlcnNlY3RMaW5lKG5vZGVYLCBub2RlWSwgd2lkdGgsIGhlaWdodCwgeCwgeSwgcGFkZGluZywgY29ybmVyUmFkaXVzKSB7XG4gICAgICB2YXIgdG9wU3RhcnRYID0gbm9kZVggLSAod2lkdGggLyAyICsgcGFkZGluZyk7XG4gICAgICB2YXIgdG9wU3RhcnRZID0gbm9kZVkgLSAoaGVpZ2h0IC8gMiArIHBhZGRpbmcpO1xuICAgICAgdmFyIHRvcEVuZFkgPSB0b3BTdGFydFk7XG4gICAgICB2YXIgdG9wRW5kWCA9IG5vZGVYICsgKHdpZHRoIC8gMiArIHBhZGRpbmcpO1xuICAgICAgdmFyIHRvcEludGVyc2VjdGlvbnMgPSBmaW5pdGVMaW5lc0ludGVyc2VjdCh4LCB5LCBub2RlWCwgbm9kZVksIHRvcFN0YXJ0WCwgdG9wU3RhcnRZLCB0b3BFbmRYLCB0b3BFbmRZLCBmYWxzZSk7XG4gICAgICBpZiAodG9wSW50ZXJzZWN0aW9ucy5sZW5ndGggPiAwKSB7XG4gICAgICAgIHJldHVybiB0b3BJbnRlcnNlY3Rpb25zO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHJvdW5kUmVjdGFuZ2xlSW50ZXJzZWN0TGluZSh4LCB5LCBub2RlWCwgbm9kZVksIHdpZHRoLCBoZWlnaHQsIHBhZGRpbmcsIGNvcm5lclJhZGl1cyk7XG4gICAgfSxcbiAgICBjaGVja1BvaW50OiBmdW5jdGlvbiBjaGVja1BvaW50KHgsIHksIHBhZGRpbmcsIHdpZHRoLCBoZWlnaHQsIGNlbnRlclgsIGNlbnRlclksIGNvcm5lclJhZGl1cykge1xuICAgICAgY29ybmVyUmFkaXVzID0gY29ybmVyUmFkaXVzID09PSAnYXV0bycgPyBnZXRSb3VuZFJlY3RhbmdsZVJhZGl1cyh3aWR0aCwgaGVpZ2h0KSA6IGNvcm5lclJhZGl1cztcbiAgICAgIHZhciBkaWFtID0gMiAqIGNvcm5lclJhZGl1cztcblxuICAgICAgLy8gQ2hlY2sgaEJveFxuICAgICAgaWYgKHBvaW50SW5zaWRlUG9seWdvbih4LCB5LCB0aGlzLnBvaW50cywgY2VudGVyWCwgY2VudGVyWSwgd2lkdGgsIGhlaWdodCAtIGRpYW0sIFswLCAtMV0sIHBhZGRpbmcpKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuXG4gICAgICAvLyBDaGVjayB2Qm94XG4gICAgICBpZiAocG9pbnRJbnNpZGVQb2x5Z29uKHgsIHksIHRoaXMucG9pbnRzLCBjZW50ZXJYLCBjZW50ZXJZLCB3aWR0aCAtIGRpYW0sIGhlaWdodCwgWzAsIC0xXSwgcGFkZGluZykpIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG5cbiAgICAgIC8vIGNoZWNrIG5vbi1yb3VuZGVkIHRvcCBzaWRlXG4gICAgICB2YXIgb3V0ZXJXaWR0aCA9IHdpZHRoIC8gMiArIDIgKiBwYWRkaW5nO1xuICAgICAgdmFyIG91dGVySGVpZ2h0ID0gaGVpZ2h0IC8gMiArIDIgKiBwYWRkaW5nO1xuICAgICAgdmFyIHBvaW50cyA9IFtjZW50ZXJYIC0gb3V0ZXJXaWR0aCwgY2VudGVyWSAtIG91dGVySGVpZ2h0LCBjZW50ZXJYIC0gb3V0ZXJXaWR0aCwgY2VudGVyWSwgY2VudGVyWCArIG91dGVyV2lkdGgsIGNlbnRlclksIGNlbnRlclggKyBvdXRlcldpZHRoLCBjZW50ZXJZIC0gb3V0ZXJIZWlnaHRdO1xuICAgICAgaWYgKHBvaW50SW5zaWRlUG9seWdvblBvaW50cyh4LCB5LCBwb2ludHMpKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuXG4gICAgICAvLyBDaGVjayBib3R0b20gcmlnaHQgcXVhcnRlciBjaXJjbGVcbiAgICAgIGlmIChjaGVja0luRWxsaXBzZSh4LCB5LCBkaWFtLCBkaWFtLCBjZW50ZXJYICsgd2lkdGggLyAyIC0gY29ybmVyUmFkaXVzLCBjZW50ZXJZICsgaGVpZ2h0IC8gMiAtIGNvcm5lclJhZGl1cywgcGFkZGluZykpIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG5cbiAgICAgIC8vIENoZWNrIGJvdHRvbSBsZWZ0IHF1YXJ0ZXIgY2lyY2xlXG4gICAgICBpZiAoY2hlY2tJbkVsbGlwc2UoeCwgeSwgZGlhbSwgZGlhbSwgY2VudGVyWCAtIHdpZHRoIC8gMiArIGNvcm5lclJhZGl1cywgY2VudGVyWSArIGhlaWdodCAvIDIgLSBjb3JuZXJSYWRpdXMsIHBhZGRpbmcpKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfTtcbn07XG5CUnAkMi5yZWdpc3Rlck5vZGVTaGFwZXMgPSBmdW5jdGlvbiAoKSB7XG4gIHZhciBub2RlU2hhcGVzID0gdGhpcy5ub2RlU2hhcGVzID0ge307XG4gIHZhciByZW5kZXJlciA9IHRoaXM7XG4gIHRoaXMuZ2VuZXJhdGVFbGxpcHNlKCk7XG4gIHRoaXMuZ2VuZXJhdGVQb2x5Z29uKCd0cmlhbmdsZScsIGdlbmVyYXRlVW5pdE5nb25Qb2ludHNGaXRUb1NxdWFyZSgzLCAwKSk7XG4gIHRoaXMuZ2VuZXJhdGVSb3VuZFBvbHlnb24oJ3JvdW5kLXRyaWFuZ2xlJywgZ2VuZXJhdGVVbml0TmdvblBvaW50c0ZpdFRvU3F1YXJlKDMsIDApKTtcbiAgdGhpcy5nZW5lcmF0ZVBvbHlnb24oJ3JlY3RhbmdsZScsIGdlbmVyYXRlVW5pdE5nb25Qb2ludHNGaXRUb1NxdWFyZSg0LCAwKSk7XG4gIG5vZGVTaGFwZXNbJ3NxdWFyZSddID0gbm9kZVNoYXBlc1sncmVjdGFuZ2xlJ107XG4gIHRoaXMuZ2VuZXJhdGVSb3VuZFJlY3RhbmdsZSgpO1xuICB0aGlzLmdlbmVyYXRlQ3V0UmVjdGFuZ2xlKCk7XG4gIHRoaXMuZ2VuZXJhdGVCYXJyZWwoKTtcbiAgdGhpcy5nZW5lcmF0ZUJvdHRvbVJvdW5kcmVjdGFuZ2xlKCk7XG4gIHtcbiAgICB2YXIgZGlhbW9uZFBvaW50cyA9IFswLCAxLCAxLCAwLCAwLCAtMSwgLTEsIDBdO1xuICAgIHRoaXMuZ2VuZXJhdGVQb2x5Z29uKCdkaWFtb25kJywgZGlhbW9uZFBvaW50cyk7XG4gICAgdGhpcy5nZW5lcmF0ZVJvdW5kUG9seWdvbigncm91bmQtZGlhbW9uZCcsIGRpYW1vbmRQb2ludHMpO1xuICB9XG4gIHRoaXMuZ2VuZXJhdGVQb2x5Z29uKCdwZW50YWdvbicsIGdlbmVyYXRlVW5pdE5nb25Qb2ludHNGaXRUb1NxdWFyZSg1LCAwKSk7XG4gIHRoaXMuZ2VuZXJhdGVSb3VuZFBvbHlnb24oJ3JvdW5kLXBlbnRhZ29uJywgZ2VuZXJhdGVVbml0TmdvblBvaW50c0ZpdFRvU3F1YXJlKDUsIDApKTtcbiAgdGhpcy5nZW5lcmF0ZVBvbHlnb24oJ2hleGFnb24nLCBnZW5lcmF0ZVVuaXROZ29uUG9pbnRzRml0VG9TcXVhcmUoNiwgMCkpO1xuICB0aGlzLmdlbmVyYXRlUm91bmRQb2x5Z29uKCdyb3VuZC1oZXhhZ29uJywgZ2VuZXJhdGVVbml0TmdvblBvaW50c0ZpdFRvU3F1YXJlKDYsIDApKTtcbiAgdGhpcy5nZW5lcmF0ZVBvbHlnb24oJ2hlcHRhZ29uJywgZ2VuZXJhdGVVbml0TmdvblBvaW50c0ZpdFRvU3F1YXJlKDcsIDApKTtcbiAgdGhpcy5nZW5lcmF0ZVJvdW5kUG9seWdvbigncm91bmQtaGVwdGFnb24nLCBnZW5lcmF0ZVVuaXROZ29uUG9pbnRzRml0VG9TcXVhcmUoNywgMCkpO1xuICB0aGlzLmdlbmVyYXRlUG9seWdvbignb2N0YWdvbicsIGdlbmVyYXRlVW5pdE5nb25Qb2ludHNGaXRUb1NxdWFyZSg4LCAwKSk7XG4gIHRoaXMuZ2VuZXJhdGVSb3VuZFBvbHlnb24oJ3JvdW5kLW9jdGFnb24nLCBnZW5lcmF0ZVVuaXROZ29uUG9pbnRzRml0VG9TcXVhcmUoOCwgMCkpO1xuICB2YXIgc3RhcjVQb2ludHMgPSBuZXcgQXJyYXkoMjApO1xuICB7XG4gICAgdmFyIG91dGVyUG9pbnRzID0gZ2VuZXJhdGVVbml0TmdvblBvaW50cyg1LCAwKTtcbiAgICB2YXIgaW5uZXJQb2ludHMgPSBnZW5lcmF0ZVVuaXROZ29uUG9pbnRzKDUsIE1hdGguUEkgLyA1KTtcblxuICAgIC8vIE91dGVyIHJhZGl1cyBpcyAxOyBpbm5lciByYWRpdXMgb2Ygc3RhciBpcyBzbWFsbGVyXG4gICAgdmFyIGlubmVyUmFkaXVzID0gMC41ICogKDMgLSBNYXRoLnNxcnQoNSkpO1xuICAgIGlubmVyUmFkaXVzICo9IDEuNTc7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBpbm5lclBvaW50cy5sZW5ndGggLyAyOyBpKyspIHtcbiAgICAgIGlubmVyUG9pbnRzW2kgKiAyXSAqPSBpbm5lclJhZGl1cztcbiAgICAgIGlubmVyUG9pbnRzW2kgKiAyICsgMV0gKj0gaW5uZXJSYWRpdXM7XG4gICAgfVxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgMjAgLyA0OyBpKyspIHtcbiAgICAgIHN0YXI1UG9pbnRzW2kgKiA0XSA9IG91dGVyUG9pbnRzW2kgKiAyXTtcbiAgICAgIHN0YXI1UG9pbnRzW2kgKiA0ICsgMV0gPSBvdXRlclBvaW50c1tpICogMiArIDFdO1xuICAgICAgc3RhcjVQb2ludHNbaSAqIDQgKyAyXSA9IGlubmVyUG9pbnRzW2kgKiAyXTtcbiAgICAgIHN0YXI1UG9pbnRzW2kgKiA0ICsgM10gPSBpbm5lclBvaW50c1tpICogMiArIDFdO1xuICAgIH1cbiAgfVxuICBzdGFyNVBvaW50cyA9IGZpdFBvbHlnb25Ub1NxdWFyZShzdGFyNVBvaW50cyk7XG4gIHRoaXMuZ2VuZXJhdGVQb2x5Z29uKCdzdGFyJywgc3RhcjVQb2ludHMpO1xuICB0aGlzLmdlbmVyYXRlUG9seWdvbigndmVlJywgWy0xLCAtMSwgMCwgLTAuMzMzLCAxLCAtMSwgMCwgMV0pO1xuICB0aGlzLmdlbmVyYXRlUG9seWdvbigncmhvbWJvaWQnLCBbLTEsIC0xLCAwLjMzMywgLTEsIDEsIDEsIC0wLjMzMywgMV0pO1xuICB0aGlzLmdlbmVyYXRlUG9seWdvbigncmlnaHQtcmhvbWJvaWQnLCBbLTAuMzMzLCAtMSwgMSwgLTEsIDAuMzMzLCAxLCAtMSwgMV0pO1xuICB0aGlzLm5vZGVTaGFwZXNbJ2NvbmNhdmVoZXhhZ29uJ10gPSB0aGlzLmdlbmVyYXRlUG9seWdvbignY29uY2F2ZS1oZXhhZ29uJywgWy0xLCAtMC45NSwgLTAuNzUsIDAsIC0xLCAwLjk1LCAxLCAwLjk1LCAwLjc1LCAwLCAxLCAtMC45NV0pO1xuICB7XG4gICAgdmFyIHRhZ1BvaW50cyA9IFstMSwgLTEsIDAuMjUsIC0xLCAxLCAwLCAwLjI1LCAxLCAtMSwgMV07XG4gICAgdGhpcy5nZW5lcmF0ZVBvbHlnb24oJ3RhZycsIHRhZ1BvaW50cyk7XG4gICAgdGhpcy5nZW5lcmF0ZVJvdW5kUG9seWdvbigncm91bmQtdGFnJywgdGFnUG9pbnRzKTtcbiAgfVxuICBub2RlU2hhcGVzLm1ha2VQb2x5Z29uID0gZnVuY3Rpb24gKHBvaW50cykge1xuICAgIC8vIHVzZSBjYWNoaW5nIG9uIHVzZXItc3BlY2lmaWVkIHBvbHlnb25zIHNvIHRoZXkgYXJlIGFzIGZhc3QgYXMgbmF0aXZlIHNoYXBlc1xuXG4gICAgdmFyIGtleSA9IHBvaW50cy5qb2luKCckJyk7XG4gICAgdmFyIG5hbWUgPSAncG9seWdvbi0nICsga2V5O1xuICAgIHZhciBzaGFwZTtcbiAgICBpZiAoc2hhcGUgPSB0aGlzW25hbWVdKSB7XG4gICAgICAvLyBnb3QgY2FjaGVkIHNoYXBlXG4gICAgICByZXR1cm4gc2hhcGU7XG4gICAgfVxuXG4gICAgLy8gY3JlYXRlIGFuZCBjYWNoZSBuZXcgc2hhcGVcbiAgICByZXR1cm4gcmVuZGVyZXIuZ2VuZXJhdGVQb2x5Z29uKG5hbWUsIHBvaW50cyk7XG4gIH07XG59O1xuXG52YXIgQlJwJDEgPSB7fTtcbkJScCQxLnRpbWVUb1JlbmRlciA9IGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuIHRoaXMucmVkcmF3VG90YWxUaW1lIC8gdGhpcy5yZWRyYXdDb3VudDtcbn07XG5CUnAkMS5yZWRyYXcgPSBmdW5jdGlvbiAob3B0aW9ucykge1xuICBvcHRpb25zID0gb3B0aW9ucyB8fCBzdGF0aWNFbXB0eU9iamVjdCgpO1xuICB2YXIgciA9IHRoaXM7XG4gIGlmIChyLmF2ZXJhZ2VSZWRyYXdUaW1lID09PSB1bmRlZmluZWQpIHtcbiAgICByLmF2ZXJhZ2VSZWRyYXdUaW1lID0gMDtcbiAgfVxuICBpZiAoci5sYXN0UmVkcmF3VGltZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgci5sYXN0UmVkcmF3VGltZSA9IDA7XG4gIH1cbiAgaWYgKHIubGFzdERyYXdUaW1lID09PSB1bmRlZmluZWQpIHtcbiAgICByLmxhc3REcmF3VGltZSA9IDA7XG4gIH1cbiAgci5yZXF1ZXN0ZWRGcmFtZSA9IHRydWU7XG4gIHIucmVuZGVyT3B0aW9ucyA9IG9wdGlvbnM7XG59O1xuQlJwJDEuYmVmb3JlUmVuZGVyID0gZnVuY3Rpb24gKGZuLCBwcmlvcml0eSkge1xuICAvLyB0aGUgcmVuZGVyZXIgY2FuJ3QgYWRkIHRpY2sgY2FsbGJhY2tzIHdoZW4gZGVzdHJveWVkXG4gIGlmICh0aGlzLmRlc3Ryb3llZCkge1xuICAgIHJldHVybjtcbiAgfVxuICBpZiAocHJpb3JpdHkgPT0gbnVsbCkge1xuICAgIGVycm9yKCdQcmlvcml0eSBpcyBub3Qgb3B0aW9uYWwgZm9yIGJlZm9yZVJlbmRlcicpO1xuICB9XG4gIHZhciBjYnMgPSB0aGlzLmJlZm9yZVJlbmRlckNhbGxiYWNrcztcbiAgY2JzLnB1c2goe1xuICAgIGZuOiBmbixcbiAgICBwcmlvcml0eTogcHJpb3JpdHlcbiAgfSk7XG5cbiAgLy8gaGlnaGVyIHByaW9yaXR5IGNhbGxiYWNrcyBleGVjdXRlZCBmaXJzdFxuICBjYnMuc29ydChmdW5jdGlvbiAoYSwgYikge1xuICAgIHJldHVybiBiLnByaW9yaXR5IC0gYS5wcmlvcml0eTtcbiAgfSk7XG59O1xudmFyIGJlZm9yZVJlbmRlckNhbGxiYWNrcyA9IGZ1bmN0aW9uIGJlZm9yZVJlbmRlckNhbGxiYWNrcyhyLCB3aWxsRHJhdywgc3RhcnRUaW1lKSB7XG4gIHZhciBjYnMgPSByLmJlZm9yZVJlbmRlckNhbGxiYWNrcztcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBjYnMubGVuZ3RoOyBpKyspIHtcbiAgICBjYnNbaV0uZm4od2lsbERyYXcsIHN0YXJ0VGltZSk7XG4gIH1cbn07XG5CUnAkMS5zdGFydFJlbmRlckxvb3AgPSBmdW5jdGlvbiAoKSB7XG4gIHZhciByID0gdGhpcztcbiAgdmFyIGN5ID0gci5jeTtcbiAgaWYgKHIucmVuZGVyTG9vcFN0YXJ0ZWQpIHtcbiAgICByZXR1cm47XG4gIH0gZWxzZSB7XG4gICAgci5yZW5kZXJMb29wU3RhcnRlZCA9IHRydWU7XG4gIH1cbiAgdmFyIF9yZW5kZXJGbiA9IGZ1bmN0aW9uIHJlbmRlckZuKHJlcXVlc3RUaW1lKSB7XG4gICAgaWYgKHIuZGVzdHJveWVkKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmIChjeS5iYXRjaGluZygpKSA7IGVsc2UgaWYgKHIucmVxdWVzdGVkRnJhbWUgJiYgIXIuc2tpcEZyYW1lKSB7XG4gICAgICBiZWZvcmVSZW5kZXJDYWxsYmFja3MociwgdHJ1ZSwgcmVxdWVzdFRpbWUpO1xuICAgICAgdmFyIHN0YXJ0VGltZSA9IHBlcmZvcm1hbmNlTm93KCk7XG4gICAgICByLnJlbmRlcihyLnJlbmRlck9wdGlvbnMpO1xuICAgICAgdmFyIGVuZFRpbWUgPSByLmxhc3REcmF3VGltZSA9IHBlcmZvcm1hbmNlTm93KCk7XG4gICAgICBpZiAoci5hdmVyYWdlUmVkcmF3VGltZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHIuYXZlcmFnZVJlZHJhd1RpbWUgPSBlbmRUaW1lIC0gc3RhcnRUaW1lO1xuICAgICAgfVxuICAgICAgaWYgKHIucmVkcmF3Q291bnQgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICByLnJlZHJhd0NvdW50ID0gMDtcbiAgICAgIH1cbiAgICAgIHIucmVkcmF3Q291bnQrKztcbiAgICAgIGlmIChyLnJlZHJhd1RvdGFsVGltZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHIucmVkcmF3VG90YWxUaW1lID0gMDtcbiAgICAgIH1cbiAgICAgIHZhciBkdXJhdGlvbiA9IGVuZFRpbWUgLSBzdGFydFRpbWU7XG4gICAgICByLnJlZHJhd1RvdGFsVGltZSArPSBkdXJhdGlvbjtcbiAgICAgIHIubGFzdFJlZHJhd1RpbWUgPSBkdXJhdGlvbjtcblxuICAgICAgLy8gdXNlIGEgd2VpZ2h0ZWQgYXZlcmFnZSB3aXRoIGEgYmlhcyBmcm9tIHRoZSBwcmV2aW91cyBhdmVyYWdlIHNvIHdlIGRvbid0IHNwaWtlIHNvIGVhc2lseVxuICAgICAgci5hdmVyYWdlUmVkcmF3VGltZSA9IHIuYXZlcmFnZVJlZHJhd1RpbWUgLyAyICsgZHVyYXRpb24gLyAyO1xuICAgICAgci5yZXF1ZXN0ZWRGcmFtZSA9IGZhbHNlO1xuICAgIH0gZWxzZSB7XG4gICAgICBiZWZvcmVSZW5kZXJDYWxsYmFja3MociwgZmFsc2UsIHJlcXVlc3RUaW1lKTtcbiAgICB9XG4gICAgci5za2lwRnJhbWUgPSBmYWxzZTtcbiAgICByZXF1ZXN0QW5pbWF0aW9uRnJhbWUoX3JlbmRlckZuKTtcbiAgfTtcbiAgcmVxdWVzdEFuaW1hdGlvbkZyYW1lKF9yZW5kZXJGbik7XG59O1xuXG52YXIgQmFzZVJlbmRlcmVyID0gZnVuY3Rpb24gQmFzZVJlbmRlcmVyKG9wdGlvbnMpIHtcbiAgdGhpcy5pbml0KG9wdGlvbnMpO1xufTtcbnZhciBCUiA9IEJhc2VSZW5kZXJlcjtcbnZhciBCUnAgPSBCUi5wcm90b3R5cGU7XG5CUnAuY2xpZW50RnVuY3Rpb25zID0gWydyZWRyYXdIaW50JywgJ3JlbmRlcicsICdyZW5kZXJUbycsICdtYXRjaENhbnZhc1NpemUnLCAnbm9kZVNoYXBlSW1wbCcsICdhcnJvd1NoYXBlSW1wbCddO1xuQlJwLmluaXQgPSBmdW5jdGlvbiAob3B0aW9ucykge1xuICB2YXIgciA9IHRoaXM7XG4gIHIub3B0aW9ucyA9IG9wdGlvbnM7XG4gIHIuY3kgPSBvcHRpb25zLmN5O1xuICB2YXIgY3RyID0gci5jb250YWluZXIgPSBvcHRpb25zLmN5LmNvbnRhaW5lcigpO1xuICB2YXIgY29udGFpbmVyV2luZG93ID0gci5jeS53aW5kb3coKTtcblxuICAvLyBwcmVwZW5kIGEgc3R5bGVzaGVldCBpbiB0aGUgaGVhZCBzdWNoIHRoYXRcbiAgaWYgKGNvbnRhaW5lcldpbmRvdykge1xuICAgIHZhciBkb2N1bWVudCA9IGNvbnRhaW5lcldpbmRvdy5kb2N1bWVudDtcbiAgICB2YXIgaGVhZCA9IGRvY3VtZW50LmhlYWQ7XG4gICAgdmFyIHN0eWxlc2hlZXRJZCA9ICdfX19fX19fX19fY3l0b3NjYXBlX3N0eWxlc2hlZXQnO1xuICAgIHZhciBjbGFzc05hbWUgPSAnX19fX19fX19fX2N5dG9zY2FwZV9jb250YWluZXInO1xuICAgIHZhciBzdHlsZXNoZWV0QWxyZWFkeUV4aXN0cyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKHN0eWxlc2hlZXRJZCkgIT0gbnVsbDtcbiAgICBpZiAoY3RyLmNsYXNzTmFtZS5pbmRleE9mKGNsYXNzTmFtZSkgPCAwKSB7XG4gICAgICBjdHIuY2xhc3NOYW1lID0gKGN0ci5jbGFzc05hbWUgfHwgJycpICsgJyAnICsgY2xhc3NOYW1lO1xuICAgIH1cbiAgICBpZiAoIXN0eWxlc2hlZXRBbHJlYWR5RXhpc3RzKSB7XG4gICAgICB2YXIgc3R5bGVzaGVldCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3N0eWxlJyk7XG4gICAgICBzdHlsZXNoZWV0LmlkID0gc3R5bGVzaGVldElkO1xuICAgICAgc3R5bGVzaGVldC50ZXh0Q29udGVudCA9ICcuJyArIGNsYXNzTmFtZSArICcgeyBwb3NpdGlvbjogcmVsYXRpdmU7IH0nO1xuICAgICAgaGVhZC5pbnNlcnRCZWZvcmUoc3R5bGVzaGVldCwgaGVhZC5jaGlsZHJlblswXSk7IC8vIGZpcnN0IHNvIGxvd2VzdCBwcmlvcml0eVxuICAgIH1cbiAgICB2YXIgY29tcHV0ZWRTdHlsZSA9IGNvbnRhaW5lcldpbmRvdy5nZXRDb21wdXRlZFN0eWxlKGN0cik7XG4gICAgdmFyIHBvc2l0aW9uID0gY29tcHV0ZWRTdHlsZS5nZXRQcm9wZXJ0eVZhbHVlKCdwb3NpdGlvbicpO1xuICAgIGlmIChwb3NpdGlvbiA9PT0gJ3N0YXRpYycpIHtcbiAgICAgIHdhcm4oJ0EgQ3l0b3NjYXBlIGNvbnRhaW5lciBoYXMgc3R5bGUgcG9zaXRpb246c3RhdGljIGFuZCBzbyBjYW4gbm90IHVzZSBVSSBleHRlbnNpb25zIHByb3Blcmx5Jyk7XG4gICAgfVxuICB9XG4gIHIuc2VsZWN0aW9uID0gW3VuZGVmaW5lZCwgdW5kZWZpbmVkLCB1bmRlZmluZWQsIHVuZGVmaW5lZCwgMF07IC8vIENvb3JkaW5hdGVzIGZvciBzZWxlY3Rpb24gYm94LCBwbHVzIGVuYWJsZWQgZmxhZ1xuXG4gIHIuYmV6aWVyUHJvalBjdHMgPSBbMC4wNSwgMC4yMjUsIDAuNCwgMC41LCAwLjYsIDAuNzc1LCAwLjk1XTtcblxuICAvLy0tUG9pbnRlci1yZWxhdGVkIGRhdGFcbiAgci5ob3ZlckRhdGEgPSB7XG4gICAgZG93bjogbnVsbCxcbiAgICBsYXN0OiBudWxsLFxuICAgIGRvd25UaW1lOiBudWxsLFxuICAgIHRyaWdnZXJNb2RlOiBudWxsLFxuICAgIGRyYWdnaW5nOiBmYWxzZSxcbiAgICBpbml0aWFsUGFuOiBbbnVsbCwgbnVsbF0sXG4gICAgY2FwdHVyZTogZmFsc2VcbiAgfTtcbiAgci5kcmFnRGF0YSA9IHtcbiAgICBwb3NzaWJsZURyYWdFbGVtZW50czogW11cbiAgfTtcbiAgci50b3VjaERhdGEgPSB7XG4gICAgc3RhcnQ6IG51bGwsXG4gICAgY2FwdHVyZTogZmFsc2UsXG4gICAgLy8gVGhlc2UgMyBmaWVsZHMgcmVsYXRlZCB0byB0YXAsIHRhcGhvbGQgZXZlbnRzXG4gICAgc3RhcnRQb3NpdGlvbjogW251bGwsIG51bGwsIG51bGwsIG51bGwsIG51bGwsIG51bGxdLFxuICAgIHNpbmdsZVRvdWNoU3RhcnRUaW1lOiBudWxsLFxuICAgIHNpbmdsZVRvdWNoTW92ZWQ6IHRydWUsXG4gICAgbm93OiBbbnVsbCwgbnVsbCwgbnVsbCwgbnVsbCwgbnVsbCwgbnVsbF0sXG4gICAgZWFybGllcjogW251bGwsIG51bGwsIG51bGwsIG51bGwsIG51bGwsIG51bGxdXG4gIH07XG4gIHIucmVkcmF3cyA9IDA7XG4gIHIuc2hvd0ZwcyA9IG9wdGlvbnMuc2hvd0ZwcztcbiAgci5kZWJ1ZyA9IG9wdGlvbnMuZGVidWc7XG4gIHIud2ViZ2wgPSBvcHRpb25zLndlYmdsO1xuICByLmhpZGVFZGdlc09uVmlld3BvcnQgPSBvcHRpb25zLmhpZGVFZGdlc09uVmlld3BvcnQ7XG4gIHIudGV4dHVyZU9uVmlld3BvcnQgPSBvcHRpb25zLnRleHR1cmVPblZpZXdwb3J0O1xuICByLndoZWVsU2Vuc2l0aXZpdHkgPSBvcHRpb25zLndoZWVsU2Vuc2l0aXZpdHk7XG4gIHIubW90aW9uQmx1ckVuYWJsZWQgPSBvcHRpb25zLm1vdGlvbkJsdXI7IC8vIG9uIGJ5IGRlZmF1bHRcbiAgci5mb3JjZWRQaXhlbFJhdGlvID0gbnVtYmVyJDEob3B0aW9ucy5waXhlbFJhdGlvKSA/IG9wdGlvbnMucGl4ZWxSYXRpbyA6IG51bGw7XG4gIHIubW90aW9uQmx1ciA9IG9wdGlvbnMubW90aW9uQmx1cjsgLy8gZm9yIGluaXRpYWwga2ljayBvZmZcbiAgci5tb3Rpb25CbHVyT3BhY2l0eSA9IG9wdGlvbnMubW90aW9uQmx1ck9wYWNpdHk7XG4gIHIubW90aW9uQmx1clRyYW5zcGFyZW5jeSA9IDEgLSByLm1vdGlvbkJsdXJPcGFjaXR5O1xuICByLm1vdGlvbkJsdXJQeFJhdGlvID0gMTtcbiAgci5tYlB4UkJsdXJyeSA9IDE7IC8vMC44O1xuICByLm1pbk1iTG93UXVhbEZyYW1lcyA9IDQ7XG4gIHIuZnVsbFF1YWxpdHlNYiA9IGZhbHNlO1xuICByLmNsZWFyZWRGb3JNb3Rpb25CbHVyID0gW107XG4gIHIuZGVza3RvcFRhcFRocmVzaG9sZCA9IG9wdGlvbnMuZGVza3RvcFRhcFRocmVzaG9sZDtcbiAgci5kZXNrdG9wVGFwVGhyZXNob2xkMiA9IG9wdGlvbnMuZGVza3RvcFRhcFRocmVzaG9sZCAqIG9wdGlvbnMuZGVza3RvcFRhcFRocmVzaG9sZDtcbiAgci50b3VjaFRhcFRocmVzaG9sZCA9IG9wdGlvbnMudG91Y2hUYXBUaHJlc2hvbGQ7XG4gIHIudG91Y2hUYXBUaHJlc2hvbGQyID0gb3B0aW9ucy50b3VjaFRhcFRocmVzaG9sZCAqIG9wdGlvbnMudG91Y2hUYXBUaHJlc2hvbGQ7XG4gIHIudGFwaG9sZER1cmF0aW9uID0gNTAwO1xuICByLmJpbmRpbmdzID0gW107XG4gIHIuYmVmb3JlUmVuZGVyQ2FsbGJhY2tzID0gW107XG4gIHIuYmVmb3JlUmVuZGVyUHJpb3JpdGllcyA9IHtcbiAgICAvLyBoaWdoZXIgcHJpb3JpdHkgZXhlY3MgYmVmb3JlIGxvd2VyIG9uZVxuICAgIGFuaW1hdGlvbnM6IDQwMCxcbiAgICBlbGVDYWxjczogMzAwLFxuICAgIGVsZVR4ckRlcTogMjAwLFxuICAgIGx5clR4ckRlcTogMTUwLFxuICAgIGx5clR4clNraXA6IDEwMFxuICB9O1xuICByLnJlZ2lzdGVyTm9kZVNoYXBlcygpO1xuICByLnJlZ2lzdGVyQXJyb3dTaGFwZXMoKTtcbiAgci5yZWdpc3RlckNhbGN1bGF0aW9uTGlzdGVuZXJzKCk7XG59O1xuQlJwLm5vdGlmeSA9IGZ1bmN0aW9uIChldmVudE5hbWUsIGVsZXMpIHtcbiAgdmFyIHIgPSB0aGlzO1xuICB2YXIgY3kgPSByLmN5O1xuXG4gIC8vIHRoZSByZW5kZXJlciBjYW4ndCBiZSBub3RpZmllZCBhZnRlciBpdCdzIGRlc3Ryb3llZFxuICBpZiAodGhpcy5kZXN0cm95ZWQpIHtcbiAgICByZXR1cm47XG4gIH1cbiAgaWYgKGV2ZW50TmFtZSA9PT0gJ2luaXQnKSB7XG4gICAgci5sb2FkKCk7XG4gICAgcmV0dXJuO1xuICB9XG4gIGlmIChldmVudE5hbWUgPT09ICdkZXN0cm95Jykge1xuICAgIHIuZGVzdHJveSgpO1xuICAgIHJldHVybjtcbiAgfVxuICBpZiAoZXZlbnROYW1lID09PSAnYWRkJyB8fCBldmVudE5hbWUgPT09ICdyZW1vdmUnIHx8IGV2ZW50TmFtZSA9PT0gJ21vdmUnICYmIGN5Lmhhc0NvbXBvdW5kTm9kZXMoKSB8fCBldmVudE5hbWUgPT09ICdsb2FkJyB8fCBldmVudE5hbWUgPT09ICd6b3JkZXInIHx8IGV2ZW50TmFtZSA9PT0gJ21vdW50Jykge1xuICAgIHIuaW52YWxpZGF0ZUNhY2hlZFpTb3J0ZWRFbGVzKCk7XG4gIH1cbiAgaWYgKGV2ZW50TmFtZSA9PT0gJ3ZpZXdwb3J0Jykge1xuICAgIHIucmVkcmF3SGludCgnc2VsZWN0JywgdHJ1ZSk7XG4gIH1cbiAgaWYgKGV2ZW50TmFtZSA9PT0gJ2djJykge1xuICAgIHIucmVkcmF3SGludCgnZ2MnLCB0cnVlKTtcbiAgfVxuICBpZiAoZXZlbnROYW1lID09PSAnbG9hZCcgfHwgZXZlbnROYW1lID09PSAncmVzaXplJyB8fCBldmVudE5hbWUgPT09ICdtb3VudCcpIHtcbiAgICByLmludmFsaWRhdGVDb250YWluZXJDbGllbnRDb29yZHNDYWNoZSgpO1xuICAgIHIubWF0Y2hDYW52YXNTaXplKHIuY29udGFpbmVyKTtcbiAgfVxuICByLnJlZHJhd0hpbnQoJ2VsZXMnLCB0cnVlKTtcbiAgci5yZWRyYXdIaW50KCdkcmFnJywgdHJ1ZSk7XG4gIHRoaXMuc3RhcnRSZW5kZXJMb29wKCk7XG4gIHRoaXMucmVkcmF3KCk7XG59O1xuQlJwLmRlc3Ryb3kgPSBmdW5jdGlvbiAoKSB7XG4gIHZhciByID0gdGhpcztcbiAgci5kZXN0cm95ZWQgPSB0cnVlO1xuICByLmN5LnN0b3BBbmltYXRpb25Mb29wKCk7XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgci5iaW5kaW5ncy5sZW5ndGg7IGkrKykge1xuICAgIHZhciBiaW5kaW5nID0gci5iaW5kaW5nc1tpXTtcbiAgICB2YXIgYiA9IGJpbmRpbmc7XG4gICAgdmFyIHRndCA9IGIudGFyZ2V0O1xuICAgICh0Z3Qub2ZmIHx8IHRndC5yZW1vdmVFdmVudExpc3RlbmVyKS5hcHBseSh0Z3QsIGIuYXJncyk7XG4gIH1cbiAgci5iaW5kaW5ncyA9IFtdO1xuICByLmJlZm9yZVJlbmRlckNhbGxiYWNrcyA9IFtdO1xuICByLm9uVXBkYXRlRWxlQ2FsY3NGbnMgPSBbXTtcbiAgaWYgKHIucmVtb3ZlT2JzZXJ2ZXIpIHtcbiAgICByLnJlbW92ZU9ic2VydmVyLmRpc2Nvbm5lY3QoKTtcbiAgfVxuICBpZiAoci5zdHlsZU9ic2VydmVyKSB7XG4gICAgci5zdHlsZU9ic2VydmVyLmRpc2Nvbm5lY3QoKTtcbiAgfVxuICBpZiAoci5yZXNpemVPYnNlcnZlcikge1xuICAgIHIucmVzaXplT2JzZXJ2ZXIuZGlzY29ubmVjdCgpO1xuICB9XG4gIGlmIChyLmxhYmVsQ2FsY0Rpdikge1xuICAgIHRyeSB7XG4gICAgICBkb2N1bWVudC5ib2R5LnJlbW92ZUNoaWxkKHIubGFiZWxDYWxjRGl2KTsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby11bmRlZlxuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIC8vIGllMTAgaXNzdWUgIzEwMTRcbiAgICB9XG4gIH1cbn07XG5CUnAuaXNIZWFkbGVzcyA9IGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuIGZhbHNlO1xufTtcbltCUnAkZiwgQlJwJDUsIEJScCQ0LCBCUnAkMywgQlJwJDIsIEJScCQxXS5mb3JFYWNoKGZ1bmN0aW9uIChwcm9wcykge1xuICBleHRlbmQoQlJwLCBwcm9wcyk7XG59KTtcblxudmFyIGZ1bGxGcHNUaW1lID0gMTAwMCAvIDYwOyAvLyBhc3N1bWUgNjAgZnJhbWVzIHBlciBzZWNvbmRcblxudmFyIGRlZnMgPSB7XG4gIHNldHVwRGVxdWV1ZWluZzogZnVuY3Rpb24gc2V0dXBEZXF1ZXVlaW5nKG9wdHMpIHtcbiAgICByZXR1cm4gZnVuY3Rpb24gc2V0dXBEZXF1ZXVlaW5nSW1wbCgpIHtcbiAgICAgIHZhciBzZWxmID0gdGhpcztcbiAgICAgIHZhciByID0gdGhpcy5yZW5kZXJlcjtcbiAgICAgIGlmIChzZWxmLmRlcXVldWVpbmdTZXR1cCkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBzZWxmLmRlcXVldWVpbmdTZXR1cCA9IHRydWU7XG4gICAgICB9XG4gICAgICB2YXIgcXVldWVSZWRyYXcgPSBkZWJvdW5jZShmdW5jdGlvbiAoKSB7XG4gICAgICAgIHIucmVkcmF3SGludCgnZWxlcycsIHRydWUpO1xuICAgICAgICByLnJlZHJhd0hpbnQoJ2RyYWcnLCB0cnVlKTtcbiAgICAgICAgci5yZWRyYXcoKTtcbiAgICAgIH0sIG9wdHMuZGVxUmVkcmF3VGhyZXNob2xkKTtcbiAgICAgIHZhciBkZXF1ZXVlID0gZnVuY3Rpb24gZGVxdWV1ZSh3aWxsRHJhdywgZnJhbWVTdGFydFRpbWUpIHtcbiAgICAgICAgdmFyIHN0YXJ0VGltZSA9IHBlcmZvcm1hbmNlTm93KCk7XG4gICAgICAgIHZhciBhdmdSZW5kZXJUaW1lID0gci5hdmVyYWdlUmVkcmF3VGltZTtcbiAgICAgICAgdmFyIHJlbmRlclRpbWUgPSByLmxhc3RSZWRyYXdUaW1lO1xuICAgICAgICB2YXIgZGVxZCA9IFtdO1xuICAgICAgICB2YXIgZXh0ZW50ID0gci5jeS5leHRlbnQoKTtcbiAgICAgICAgdmFyIHBpeGVsUmF0aW8gPSByLmdldFBpeGVsUmF0aW8oKTtcblxuICAgICAgICAvLyBpZiB3ZSBhcmVuJ3QgaW4gYSB0aWNrIHRoYXQgY2F1c2VzIGEgZHJhdywgdGhlbiB0aGUgcmVuZGVyZWQgc3R5bGVcbiAgICAgICAgLy8gcXVldWUgd29uJ3QgYXV0b21hdGljYWxseSBiZSBmbHVzaGVkIGJlZm9yZSBkZXF1ZXVlaW5nIHN0YXJ0c1xuICAgICAgICBpZiAoIXdpbGxEcmF3KSB7XG4gICAgICAgICAgci5mbHVzaFJlbmRlcmVkU3R5bGVRdWV1ZSgpO1xuICAgICAgICB9XG4gICAgICAgIHdoaWxlICh0cnVlKSB7XG4gICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1jb25zdGFudC1jb25kaXRpb25cbiAgICAgICAgICB2YXIgbm93ID0gcGVyZm9ybWFuY2VOb3coKTtcbiAgICAgICAgICB2YXIgZHVyYXRpb24gPSBub3cgLSBzdGFydFRpbWU7XG4gICAgICAgICAgdmFyIGZyYW1lRHVyYXRpb24gPSBub3cgLSBmcmFtZVN0YXJ0VGltZTtcbiAgICAgICAgICBpZiAocmVuZGVyVGltZSA8IGZ1bGxGcHNUaW1lKSB7XG4gICAgICAgICAgICAvLyBpZiB3ZSdyZSByZW5kZXJpbmcgZmFzdGVyIHRoYW4gdGhlIGlkZWFsIGZwcywgdGhlbiBkbyBkZXF1ZXVlaW5nXG4gICAgICAgICAgICAvLyBkdXJpbmcgYWxsIG9mIHRoZSByZW1haW5pbmcgZnJhbWUgdGltZVxuXG4gICAgICAgICAgICB2YXIgdGltZUF2YWlsYWJsZSA9IGZ1bGxGcHNUaW1lIC0gKHdpbGxEcmF3ID8gYXZnUmVuZGVyVGltZSA6IDApO1xuICAgICAgICAgICAgaWYgKGZyYW1lRHVyYXRpb24gPj0gb3B0cy5kZXFGYXN0Q29zdCAqIHRpbWVBdmFpbGFibGUpIHtcbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGlmICh3aWxsRHJhdykge1xuICAgICAgICAgICAgICBpZiAoZHVyYXRpb24gPj0gb3B0cy5kZXFDb3N0ICogcmVuZGVyVGltZSB8fCBkdXJhdGlvbiA+PSBvcHRzLmRlcUF2Z0Nvc3QgKiBhdmdSZW5kZXJUaW1lKSB7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSBpZiAoZnJhbWVEdXJhdGlvbiA+PSBvcHRzLmRlcU5vRHJhd0Nvc3QgKiBmdWxsRnBzVGltZSkge1xuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgdmFyIHRoaXNEZXFkID0gb3B0cy5kZXEoc2VsZiwgcGl4ZWxSYXRpbywgZXh0ZW50KTtcbiAgICAgICAgICBpZiAodGhpc0RlcWQubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzRGVxZC5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICBkZXFkLnB1c2godGhpc0RlcWRbaV0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICAvLyBjYWxsYmFja3Mgb24gZGVxdWV1ZVxuICAgICAgICBpZiAoZGVxZC5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgb3B0cy5vbkRlcWQoc2VsZiwgZGVxZCk7XG4gICAgICAgICAgaWYgKCF3aWxsRHJhdyAmJiBvcHRzLnNob3VsZFJlZHJhdyhzZWxmLCBkZXFkLCBwaXhlbFJhdGlvLCBleHRlbnQpKSB7XG4gICAgICAgICAgICBxdWV1ZVJlZHJhdygpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfTtcbiAgICAgIHZhciBwcmlvcml0eSA9IG9wdHMucHJpb3JpdHkgfHwgbm9vcCQxO1xuICAgICAgci5iZWZvcmVSZW5kZXIoZGVxdWV1ZSwgcHJpb3JpdHkoc2VsZikpO1xuICAgIH07XG4gIH1cbn07XG5cbi8vIEFsbG93cyBsb29rdXBzIGZvciAoZWxlLCBsdmwpID0+IGNhY2hlLlxuLy8gVXNlcyBrZXlzIHNvIGVsZW1lbnRzIG1heSBzaGFyZSB0aGUgc2FtZSBjYWNoZS5cbnZhciBFbGVtZW50VGV4dHVyZUNhY2hlTG9va3VwID0gLyojX19QVVJFX18qL2Z1bmN0aW9uICgpIHtcbiAgZnVuY3Rpb24gRWxlbWVudFRleHR1cmVDYWNoZUxvb2t1cChnZXRLZXkpIHtcbiAgICB2YXIgZG9lc0VsZUludmFsaWRhdGVLZXkgPSBhcmd1bWVudHMubGVuZ3RoID4gMSAmJiBhcmd1bWVudHNbMV0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1sxXSA6IGZhbHNpZnk7XG4gICAgX2NsYXNzQ2FsbENoZWNrKHRoaXMsIEVsZW1lbnRUZXh0dXJlQ2FjaGVMb29rdXApO1xuICAgIHRoaXMuaWRzQnlLZXkgPSBuZXcgTWFwJDEoKTtcbiAgICB0aGlzLmtleUZvcklkID0gbmV3IE1hcCQxKCk7XG4gICAgdGhpcy5jYWNoZXNCeUx2bCA9IG5ldyBNYXAkMSgpO1xuICAgIHRoaXMubHZscyA9IFtdO1xuICAgIHRoaXMuZ2V0S2V5ID0gZ2V0S2V5O1xuICAgIHRoaXMuZG9lc0VsZUludmFsaWRhdGVLZXkgPSBkb2VzRWxlSW52YWxpZGF0ZUtleTtcbiAgfVxuICByZXR1cm4gX2NyZWF0ZUNsYXNzKEVsZW1lbnRUZXh0dXJlQ2FjaGVMb29rdXAsIFt7XG4gICAga2V5OiBcImdldElkc0ZvclwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBnZXRJZHNGb3Ioa2V5KSB7XG4gICAgICBpZiAoa2V5ID09IG51bGwpIHtcbiAgICAgICAgZXJyb3IoXCJDYW4gbm90IGdldCBpZCBsaXN0IGZvciBudWxsIGtleVwiKTtcbiAgICAgIH1cbiAgICAgIHZhciBpZHNCeUtleSA9IHRoaXMuaWRzQnlLZXk7XG4gICAgICB2YXIgaWRzID0gdGhpcy5pZHNCeUtleS5nZXQoa2V5KTtcbiAgICAgIGlmICghaWRzKSB7XG4gICAgICAgIGlkcyA9IG5ldyBTZXQkMSgpO1xuICAgICAgICBpZHNCeUtleS5zZXQoa2V5LCBpZHMpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGlkcztcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwiYWRkSWRGb3JLZXlcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gYWRkSWRGb3JLZXkoa2V5LCBpZCkge1xuICAgICAgaWYgKGtleSAhPSBudWxsKSB7XG4gICAgICAgIHRoaXMuZ2V0SWRzRm9yKGtleSkuYWRkKGlkKTtcbiAgICAgIH1cbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwiZGVsZXRlSWRGb3JLZXlcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gZGVsZXRlSWRGb3JLZXkoa2V5LCBpZCkge1xuICAgICAgaWYgKGtleSAhPSBudWxsKSB7XG4gICAgICAgIHRoaXMuZ2V0SWRzRm9yKGtleSlbXCJkZWxldGVcIl0oaWQpO1xuICAgICAgfVxuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJnZXROdW1iZXJPZklkc0ZvcktleVwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBnZXROdW1iZXJPZklkc0ZvcktleShrZXkpIHtcbiAgICAgIGlmIChrZXkgPT0gbnVsbCkge1xuICAgICAgICByZXR1cm4gMDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiB0aGlzLmdldElkc0ZvcihrZXkpLnNpemU7XG4gICAgICB9XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcInVwZGF0ZUtleU1hcHBpbmdGb3JcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gdXBkYXRlS2V5TWFwcGluZ0ZvcihlbGUpIHtcbiAgICAgIHZhciBpZCA9IGVsZS5pZCgpO1xuICAgICAgdmFyIHByZXZLZXkgPSB0aGlzLmtleUZvcklkLmdldChpZCk7XG4gICAgICB2YXIgY3VycktleSA9IHRoaXMuZ2V0S2V5KGVsZSk7XG4gICAgICB0aGlzLmRlbGV0ZUlkRm9yS2V5KHByZXZLZXksIGlkKTtcbiAgICAgIHRoaXMuYWRkSWRGb3JLZXkoY3VycktleSwgaWQpO1xuICAgICAgdGhpcy5rZXlGb3JJZC5zZXQoaWQsIGN1cnJLZXkpO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJkZWxldGVLZXlNYXBwaW5nRm9yXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGRlbGV0ZUtleU1hcHBpbmdGb3IoZWxlKSB7XG4gICAgICB2YXIgaWQgPSBlbGUuaWQoKTtcbiAgICAgIHZhciBwcmV2S2V5ID0gdGhpcy5rZXlGb3JJZC5nZXQoaWQpO1xuICAgICAgdGhpcy5kZWxldGVJZEZvcktleShwcmV2S2V5LCBpZCk7XG4gICAgICB0aGlzLmtleUZvcklkW1wiZGVsZXRlXCJdKGlkKTtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwia2V5SGFzQ2hhbmdlZEZvclwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBrZXlIYXNDaGFuZ2VkRm9yKGVsZSkge1xuICAgICAgdmFyIGlkID0gZWxlLmlkKCk7XG4gICAgICB2YXIgcHJldktleSA9IHRoaXMua2V5Rm9ySWQuZ2V0KGlkKTtcbiAgICAgIHZhciBuZXdLZXkgPSB0aGlzLmdldEtleShlbGUpO1xuICAgICAgcmV0dXJuIHByZXZLZXkgIT09IG5ld0tleTtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwiaXNJbnZhbGlkXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGlzSW52YWxpZChlbGUpIHtcbiAgICAgIHJldHVybiB0aGlzLmtleUhhc0NoYW5nZWRGb3IoZWxlKSB8fCB0aGlzLmRvZXNFbGVJbnZhbGlkYXRlS2V5KGVsZSk7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcImdldENhY2hlc0F0XCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGdldENhY2hlc0F0KGx2bCkge1xuICAgICAgdmFyIGNhY2hlc0J5THZsID0gdGhpcy5jYWNoZXNCeUx2bCxcbiAgICAgICAgbHZscyA9IHRoaXMubHZscztcbiAgICAgIHZhciBjYWNoZXMgPSBjYWNoZXNCeUx2bC5nZXQobHZsKTtcbiAgICAgIGlmICghY2FjaGVzKSB7XG4gICAgICAgIGNhY2hlcyA9IG5ldyBNYXAkMSgpO1xuICAgICAgICBjYWNoZXNCeUx2bC5zZXQobHZsLCBjYWNoZXMpO1xuICAgICAgICBsdmxzLnB1c2gobHZsKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBjYWNoZXM7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcImdldENhY2hlXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGdldENhY2hlKGtleSwgbHZsKSB7XG4gICAgICByZXR1cm4gdGhpcy5nZXRDYWNoZXNBdChsdmwpLmdldChrZXkpO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJnZXRcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gZ2V0KGVsZSwgbHZsKSB7XG4gICAgICB2YXIga2V5ID0gdGhpcy5nZXRLZXkoZWxlKTtcbiAgICAgIHZhciBjYWNoZSA9IHRoaXMuZ2V0Q2FjaGUoa2V5LCBsdmwpO1xuXG4gICAgICAvLyBnZXR0aW5nIGZvciBhbiBlbGVtZW50IG1heSBuZWVkIHRvIGFkZCB0byB0aGUgaWQgbGlzdCBiL2MgZWxlcyBjYW4gc2hhcmUga2V5c1xuICAgICAgaWYgKGNhY2hlICE9IG51bGwpIHtcbiAgICAgICAgdGhpcy51cGRhdGVLZXlNYXBwaW5nRm9yKGVsZSk7XG4gICAgICB9XG4gICAgICByZXR1cm4gY2FjaGU7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcImdldEZvckNhY2hlZEtleVwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBnZXRGb3JDYWNoZWRLZXkoZWxlLCBsdmwpIHtcbiAgICAgIHZhciBrZXkgPSB0aGlzLmtleUZvcklkLmdldChlbGUuaWQoKSk7IC8vIG4uYi4gdXNlIGNhY2hlZCBrZXksIG5vdCBuZXdseSBjb21wdXRlZCBrZXlcbiAgICAgIHZhciBjYWNoZSA9IHRoaXMuZ2V0Q2FjaGUoa2V5LCBsdmwpO1xuICAgICAgcmV0dXJuIGNhY2hlO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJoYXNDYWNoZVwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBoYXNDYWNoZShrZXksIGx2bCkge1xuICAgICAgcmV0dXJuIHRoaXMuZ2V0Q2FjaGVzQXQobHZsKS5oYXMoa2V5KTtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwiaGFzXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGhhcyhlbGUsIGx2bCkge1xuICAgICAgdmFyIGtleSA9IHRoaXMuZ2V0S2V5KGVsZSk7XG4gICAgICByZXR1cm4gdGhpcy5oYXNDYWNoZShrZXksIGx2bCk7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcInNldENhY2hlXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIHNldENhY2hlKGtleSwgbHZsLCBjYWNoZSkge1xuICAgICAgY2FjaGUua2V5ID0ga2V5O1xuICAgICAgdGhpcy5nZXRDYWNoZXNBdChsdmwpLnNldChrZXksIGNhY2hlKTtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwic2V0XCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIHNldChlbGUsIGx2bCwgY2FjaGUpIHtcbiAgICAgIHZhciBrZXkgPSB0aGlzLmdldEtleShlbGUpO1xuICAgICAgdGhpcy5zZXRDYWNoZShrZXksIGx2bCwgY2FjaGUpO1xuICAgICAgdGhpcy51cGRhdGVLZXlNYXBwaW5nRm9yKGVsZSk7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcImRlbGV0ZUNhY2hlXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGRlbGV0ZUNhY2hlKGtleSwgbHZsKSB7XG4gICAgICB0aGlzLmdldENhY2hlc0F0KGx2bClbXCJkZWxldGVcIl0oa2V5KTtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwiZGVsZXRlXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIF9kZWxldGUoZWxlLCBsdmwpIHtcbiAgICAgIHZhciBrZXkgPSB0aGlzLmdldEtleShlbGUpO1xuICAgICAgdGhpcy5kZWxldGVDYWNoZShrZXksIGx2bCk7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcImludmFsaWRhdGVLZXlcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gaW52YWxpZGF0ZUtleShrZXkpIHtcbiAgICAgIHZhciBfdGhpcyA9IHRoaXM7XG4gICAgICB0aGlzLmx2bHMuZm9yRWFjaChmdW5jdGlvbiAobHZsKSB7XG4gICAgICAgIHJldHVybiBfdGhpcy5kZWxldGVDYWNoZShrZXksIGx2bCk7XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICAvLyByZXR1cm5zIHRydWUgaWYgbm8gb3RoZXIgZWxlcyByZWZlcmVuY2UgdGhlIGludmFsaWRhdGVkIGNhY2hlIChuLmIuIG90aGVyIGVsZXMgbWF5IG5lZWQgdGhlIGNhY2hlIHdpdGggdGhlIHNhbWUga2V5KVxuICB9LCB7XG4gICAga2V5OiBcImludmFsaWRhdGVcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gaW52YWxpZGF0ZShlbGUpIHtcbiAgICAgIHZhciBpZCA9IGVsZS5pZCgpO1xuICAgICAgdmFyIGtleSA9IHRoaXMua2V5Rm9ySWQuZ2V0KGlkKTsgLy8gbi5iLiB1c2Ugc3RvcmVkIGtleSByYXRoZXIgdGhhbiBjdXJyZW50IChwb3RlbnRpYWwga2V5KVxuXG4gICAgICB0aGlzLmRlbGV0ZUtleU1hcHBpbmdGb3IoZWxlKTtcbiAgICAgIHZhciBlbnRpcmVLZXlJbnZhbGlkYXRlZCA9IHRoaXMuZG9lc0VsZUludmFsaWRhdGVLZXkoZWxlKTtcbiAgICAgIGlmIChlbnRpcmVLZXlJbnZhbGlkYXRlZCkge1xuICAgICAgICAvLyBjbGVhciBtYXBwaW5nIGZvciBjdXJyZW50IGtleVxuICAgICAgICB0aGlzLmludmFsaWRhdGVLZXkoa2V5KTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBlbnRpcmVLZXlJbnZhbGlkYXRlZCB8fCB0aGlzLmdldE51bWJlck9mSWRzRm9yS2V5KGtleSkgPT09IDA7XG4gICAgfVxuICB9XSk7XG59KCk7XG5cbnZhciBtaW5UeHJIID0gMjU7IC8vIHRoZSBzaXplIG9mIHRoZSB0ZXh0dXJlIGNhY2hlIGZvciBzbWFsbCBoZWlnaHQgZWxlcyAoc3BlY2lhbCBjYXNlKVxudmFyIHR4clN0ZXBIID0gNTA7IC8vIHRoZSBtaW4gc2l6ZSBvZiB0aGUgcmVndWxhciBjYWNoZSwgYW5kIHRoZSBzaXplIGl0IGluY3JlYXNlcyB3aXRoIGVhY2ggc3RlcCB1cFxudmFyIG1pbkx2bCQxID0gLTQ7IC8vIHdoZW4gc2NhbGluZyBzbWFsbGVyIHRoYW4gdGhhdCB3ZSBkb24ndCBuZWVkIHRvIHJlLXJlbmRlclxudmFyIG1heEx2bCQxID0gMzsgLy8gd2hlbiBsYXJnZXIgdGhhbiB0aGlzIHNjYWxlIGp1c3QgcmVuZGVyIGRpcmVjdGx5IChjYWNoaW5nIGlzIG5vdCBoZWxwZnVsKVxudmFyIG1heFpvb20kMSA9IDcuOTk7IC8vIGJleW9uZCB0aGlzIHpvb20gbGV2ZWwsIGxheWVyZWQgdGV4dHVyZXMgYXJlIG5vdCB1c2VkXG52YXIgZWxlVHhyU3BhY2luZyA9IDg7IC8vIHNwYWNpbmcgYmV0d2VlbiBlbGVtZW50cyBvbiB0ZXh0dXJlcyB0byBhdm9pZCBibGl0dGluZyBvdmVybGFwc1xudmFyIGRlZlR4cldpZHRoID0gMTAyNDsgLy8gZGVmYXVsdC9taW5pbXVtIHRleHR1cmUgd2lkdGhcbnZhciBtYXhUeHJXID0gMTAyNDsgLy8gdGhlIG1heGltdW0gd2lkdGggb2YgYSB0ZXh0dXJlXG52YXIgbWF4VHhySCA9IDEwMjQ7IC8vIHRoZSBtYXhpbXVtIGhlaWdodCBvZiBhIHRleHR1cmVcbnZhciBtaW5VdGlsaXR5ID0gMC4yOyAvLyBpZiB1c2FnZSBvZiB0ZXh0dXJlIGlzIGxlc3MgdGhhbiB0aGlzLCBpdCBpcyByZXRpcmVkXG52YXIgbWF4RnVsbG5lc3MgPSAwLjg7IC8vIGZ1bGxuZXNzIG9mIHRleHR1cmUgYWZ0ZXIgd2hpY2ggcXVldWUgcmVtb3ZhbCBpcyBjaGVja2VkXG52YXIgbWF4RnVsbG5lc3NDaGVja3MgPSAxMDsgLy8gZGVxdWV1ZWQgYWZ0ZXIgdGhpcyBtYW55IGNoZWNrc1xudmFyIGRlcUNvc3QkMSA9IDAuMTU7IC8vICUgb2YgYWRkJ2wgcmVuZGVyaW5nIGNvc3QgYWxsb3dlZCBmb3IgZGVxdWV1aW5nIGVsZSBjYWNoZXMgZWFjaCBmcmFtZVxudmFyIGRlcUF2Z0Nvc3QkMSA9IDAuMTsgLy8gJSBvZiBhZGQnbCByZW5kZXJpbmcgY29zdCBjb21wYXJlZCB0byBhdmVyYWdlIG92ZXJhbGwgcmVkcmF3IHRpbWVcbnZhciBkZXFOb0RyYXdDb3N0JDEgPSAwLjk7IC8vICUgb2YgYXZnIGZyYW1lIHRpbWUgdGhhdCBjYW4gYmUgdXNlZCBmb3IgZGVxdWV1ZWluZyB3aGVuIG5vdCBkcmF3aW5nXG52YXIgZGVxRmFzdENvc3QkMSA9IDAuOTsgLy8gJSBvZiBmcmFtZSB0aW1lIHRvIGJlIHVzZWQgd2hlbiA+NjBmcHNcbnZhciBkZXFSZWRyYXdUaHJlc2hvbGQkMSA9IDEwMDsgLy8gdGltZSB0byBiYXRjaCByZWRyYXdzIHRvZ2V0aGVyIGZyb20gZGVxdWV1ZWluZyB0byBhbGxvdyBtb3JlIGRlcXVldWVpbmcgY2FsY3MgdG8gaGFwcGVuIGluIHRoZSBtZWFud2hpbGVcbnZhciBtYXhEZXFTaXplJDEgPSAxOyAvLyBudW1iZXIgb2YgZWxlcyB0byBkZXF1ZXVlIGFuZCByZW5kZXIgYXQgaGlnaGVyIHRleHR1cmUgaW4gZWFjaCBiYXRjaFxuXG52YXIgZ2V0VHhyUmVhc29ucyA9IHtcbiAgZGVxdWV1ZTogJ2RlcXVldWUnLFxuICBkb3duc2NhbGU6ICdkb3duc2NhbGUnLFxuICBoaWdoUXVhbGl0eTogJ2hpZ2hRdWFsaXR5J1xufTtcbnZhciBpbml0RGVmYXVsdHMgPSBkZWZhdWx0cyRnKHtcbiAgZ2V0S2V5OiBudWxsLFxuICBkb2VzRWxlSW52YWxpZGF0ZUtleTogZmFsc2lmeSxcbiAgZHJhd0VsZW1lbnQ6IG51bGwsXG4gIGdldEJvdW5kaW5nQm94OiBudWxsLFxuICBnZXRSb3RhdGlvblBvaW50OiBudWxsLFxuICBnZXRSb3RhdGlvbk9mZnNldDogbnVsbCxcbiAgaXNWaXNpYmxlOiB0cnVlaWZ5LFxuICBhbGxvd0VkZ2VUeHJDYWNoaW5nOiB0cnVlLFxuICBhbGxvd1BhcmVudFR4ckNhY2hpbmc6IHRydWVcbn0pO1xudmFyIEVsZW1lbnRUZXh0dXJlQ2FjaGUgPSBmdW5jdGlvbiBFbGVtZW50VGV4dHVyZUNhY2hlKHJlbmRlcmVyLCBpbml0T3B0aW9ucykge1xuICB2YXIgc2VsZiA9IHRoaXM7XG4gIHNlbGYucmVuZGVyZXIgPSByZW5kZXJlcjtcbiAgc2VsZi5vbkRlcXVldWVzID0gW107XG4gIHZhciBvcHRzID0gaW5pdERlZmF1bHRzKGluaXRPcHRpb25zKTtcbiAgZXh0ZW5kKHNlbGYsIG9wdHMpO1xuICBzZWxmLmxvb2t1cCA9IG5ldyBFbGVtZW50VGV4dHVyZUNhY2hlTG9va3VwKG9wdHMuZ2V0S2V5LCBvcHRzLmRvZXNFbGVJbnZhbGlkYXRlS2V5KTtcbiAgc2VsZi5zZXR1cERlcXVldWVpbmcoKTtcbn07XG52YXIgRVRDcCA9IEVsZW1lbnRUZXh0dXJlQ2FjaGUucHJvdG90eXBlO1xuRVRDcC5yZWFzb25zID0gZ2V0VHhyUmVhc29ucztcblxuLy8gdGhlIGxpc3Qgb2YgdGV4dHVyZXMgaW4gd2hpY2ggbmV3IHN1YnRleHR1cmVzIGZvciBlbGVtZW50cyBjYW4gYmUgcGxhY2VkXG5FVENwLmdldFRleHR1cmVRdWV1ZSA9IGZ1bmN0aW9uICh0eHJIKSB7XG4gIHZhciBzZWxmID0gdGhpcztcbiAgc2VsZi5lbGVJbWdDYWNoZXMgPSBzZWxmLmVsZUltZ0NhY2hlcyB8fCB7fTtcbiAgcmV0dXJuIHNlbGYuZWxlSW1nQ2FjaGVzW3R4ckhdID0gc2VsZi5lbGVJbWdDYWNoZXNbdHhySF0gfHwgW107XG59O1xuXG4vLyB0aGUgbGlzdCBvZiB1c3VzZWQgdGV4dHVyZXMgd2hpY2ggY2FuIGJlIHJlY3ljbGVkIChpbiB1c2UgaW4gdGV4dHVyZSBxdWV1ZSlcbkVUQ3AuZ2V0UmV0aXJlZFRleHR1cmVRdWV1ZSA9IGZ1bmN0aW9uICh0eHJIKSB7XG4gIHZhciBzZWxmID0gdGhpcztcbiAgdmFyIHJ0eHRyUXMgPSBzZWxmLmVsZUltZ0NhY2hlcy5yZXRpcmVkID0gc2VsZi5lbGVJbWdDYWNoZXMucmV0aXJlZCB8fCB7fTtcbiAgdmFyIHJ0eHRyUSA9IHJ0eHRyUXNbdHhySF0gPSBydHh0clFzW3R4ckhdIHx8IFtdO1xuICByZXR1cm4gcnR4dHJRO1xufTtcblxuLy8gcXVldWUgb2YgZWxlbWVudCBkcmF3IHJlcXVlc3RzIGF0IGRpZmZlcmVudCBzY2FsZSBsZXZlbHNcbkVUQ3AuZ2V0RWxlbWVudFF1ZXVlID0gZnVuY3Rpb24gKCkge1xuICB2YXIgc2VsZiA9IHRoaXM7XG4gIHZhciBxID0gc2VsZi5lbGVDYWNoZVF1ZXVlID0gc2VsZi5lbGVDYWNoZVF1ZXVlIHx8IG5ldyBIZWFwKGZ1bmN0aW9uIChhLCBiKSB7XG4gICAgcmV0dXJuIGIucmVxcyAtIGEucmVxcztcbiAgfSk7XG4gIHJldHVybiBxO1xufTtcblxuLy8gcXVldWUgb2YgZWxlbWVudCBkcmF3IHJlcXVlc3RzIGF0IGRpZmZlcmVudCBzY2FsZSBsZXZlbHMgKGVsZW1lbnQgaWQgbG9va3VwKVxuRVRDcC5nZXRFbGVtZW50S2V5VG9RdWV1ZSA9IGZ1bmN0aW9uICgpIHtcbiAgdmFyIHNlbGYgPSB0aGlzO1xuICB2YXIgazJxID0gc2VsZi5lbGVLZXlUb0NhY2hlUXVldWUgPSBzZWxmLmVsZUtleVRvQ2FjaGVRdWV1ZSB8fCB7fTtcbiAgcmV0dXJuIGsycTtcbn07XG5FVENwLmdldEVsZW1lbnQgPSBmdW5jdGlvbiAoZWxlLCBiYiwgcHhSYXRpbywgbHZsLCByZWFzb24pIHtcbiAgdmFyIHNlbGYgPSB0aGlzO1xuICB2YXIgciA9IHRoaXMucmVuZGVyZXI7XG4gIHZhciB6b29tID0gci5jeS56b29tKCk7XG4gIHZhciBsb29rdXAgPSB0aGlzLmxvb2t1cDtcbiAgaWYgKCFiYiB8fCBiYi53ID09PSAwIHx8IGJiLmggPT09IDAgfHwgaXNOYU4oYmIudykgfHwgaXNOYU4oYmIuaCkgfHwgIWVsZS52aXNpYmxlKCkgfHwgZWxlLnJlbW92ZWQoKSkge1xuICAgIHJldHVybiBudWxsO1xuICB9XG4gIGlmICghc2VsZi5hbGxvd0VkZ2VUeHJDYWNoaW5nICYmIGVsZS5pc0VkZ2UoKSB8fCAhc2VsZi5hbGxvd1BhcmVudFR4ckNhY2hpbmcgJiYgZWxlLmlzUGFyZW50KCkpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuICBpZiAobHZsID09IG51bGwpIHtcbiAgICBsdmwgPSBNYXRoLmNlaWwobG9nMih6b29tICogcHhSYXRpbykpO1xuICB9XG4gIGlmIChsdmwgPCBtaW5MdmwkMSkge1xuICAgIGx2bCA9IG1pbkx2bCQxO1xuICB9IGVsc2UgaWYgKHpvb20gPj0gbWF4Wm9vbSQxIHx8IGx2bCA+IG1heEx2bCQxKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cbiAgdmFyIHNjYWxlID0gTWF0aC5wb3coMiwgbHZsKTtcbiAgdmFyIGVsZVNjYWxlZEggPSBiYi5oICogc2NhbGU7XG4gIHZhciBlbGVTY2FsZWRXID0gYmIudyAqIHNjYWxlO1xuICB2YXIgc2NhbGVkTGFiZWxTaG93biA9IHIuZWxlVGV4dEJpZ2dlclRoYW5NaW4oZWxlLCBzY2FsZSk7XG4gIGlmICghdGhpcy5pc1Zpc2libGUoZWxlLCBzY2FsZWRMYWJlbFNob3duKSkge1xuICAgIHJldHVybiBudWxsO1xuICB9XG4gIHZhciBlbGVDYWNoZSA9IGxvb2t1cC5nZXQoZWxlLCBsdmwpO1xuXG4gIC8vIGlmIHRoaXMgZ2V0IHdhcyBvbiBhbiB1bnVzZWQvaW52YWxpZGF0ZWQgY2FjaGUsIHRoZW4gcmVzdG9yZSB0aGUgdGV4dHVyZSB1c2FnZSBtZXRyaWNcbiAgaWYgKGVsZUNhY2hlICYmIGVsZUNhY2hlLmludmFsaWRhdGVkKSB7XG4gICAgZWxlQ2FjaGUuaW52YWxpZGF0ZWQgPSBmYWxzZTtcbiAgICBlbGVDYWNoZS50ZXh0dXJlLmludmFsaWRhdGVkV2lkdGggLT0gZWxlQ2FjaGUud2lkdGg7XG4gIH1cbiAgaWYgKGVsZUNhY2hlKSB7XG4gICAgcmV0dXJuIGVsZUNhY2hlO1xuICB9XG4gIHZhciB0eHJIOyAvLyB3aGljaCB0ZXh0dXJlIGhlaWdodCB0aGlzIGVsZSBiZWxvbmdzIHRvXG5cbiAgaWYgKGVsZVNjYWxlZEggPD0gbWluVHhySCkge1xuICAgIHR4ckggPSBtaW5UeHJIO1xuICB9IGVsc2UgaWYgKGVsZVNjYWxlZEggPD0gdHhyU3RlcEgpIHtcbiAgICB0eHJIID0gdHhyU3RlcEg7XG4gIH0gZWxzZSB7XG4gICAgdHhySCA9IE1hdGguY2VpbChlbGVTY2FsZWRIIC8gdHhyU3RlcEgpICogdHhyU3RlcEg7XG4gIH1cbiAgaWYgKGVsZVNjYWxlZEggPiBtYXhUeHJIIHx8IGVsZVNjYWxlZFcgPiBtYXhUeHJXKSB7XG4gICAgcmV0dXJuIG51bGw7IC8vIGNhY2hpbmcgbGFyZ2UgZWxlbWVudHMgaXMgbm90IGVmZmljaWVudFxuICB9XG4gIHZhciB0eHJRID0gc2VsZi5nZXRUZXh0dXJlUXVldWUodHhySCk7XG5cbiAgLy8gZmlyc3QgdHJ5IHRoZSBzZWNvbmQgbGFzdCBvbmUgaW4gY2FzZSBpdCBoYXMgc3BhY2UgYXQgdGhlIGVuZFxuICB2YXIgdHhyID0gdHhyUVt0eHJRLmxlbmd0aCAtIDJdO1xuICB2YXIgYWRkTmV3VHhyID0gZnVuY3Rpb24gYWRkTmV3VHhyKCkge1xuICAgIHJldHVybiBzZWxmLnJlY3ljbGVUZXh0dXJlKHR4ckgsIGVsZVNjYWxlZFcpIHx8IHNlbGYuYWRkVGV4dHVyZSh0eHJILCBlbGVTY2FsZWRXKTtcbiAgfTtcblxuICAvLyB0cnkgdGhlIGxhc3Qgb25lIGlmIHRoZXJlIGlzIG5vIHNlY29uZCBsYXN0IG9uZVxuICBpZiAoIXR4cikge1xuICAgIHR4ciA9IHR4clFbdHhyUS5sZW5ndGggLSAxXTtcbiAgfVxuXG4gIC8vIGlmIHRoZSBsYXN0IG9uZSBkb2Vzbid0IGV4aXN0LCB3ZSBuZWVkIGEgZmlyc3Qgb25lXG4gIGlmICghdHhyKSB7XG4gICAgdHhyID0gYWRkTmV3VHhyKCk7XG4gIH1cblxuICAvLyBpZiB0aGVyZSdzIG5vIHJvb20gaW4gdGhlIGN1cnJlbnQgdGV4dHVyZSwgd2UgbmVlZCBhIG5ldyBvbmVcbiAgaWYgKHR4ci53aWR0aCAtIHR4ci51c2VkV2lkdGggPCBlbGVTY2FsZWRXKSB7XG4gICAgdHhyID0gYWRkTmV3VHhyKCk7XG4gIH1cbiAgdmFyIHNjYWxhYmxlRnJvbSA9IGZ1bmN0aW9uIHNjYWxhYmxlRnJvbShvdGhlckNhY2hlKSB7XG4gICAgcmV0dXJuIG90aGVyQ2FjaGUgJiYgb3RoZXJDYWNoZS5zY2FsZWRMYWJlbFNob3duID09PSBzY2FsZWRMYWJlbFNob3duO1xuICB9O1xuICB2YXIgZGVxaW5nID0gcmVhc29uICYmIHJlYXNvbiA9PT0gZ2V0VHhyUmVhc29ucy5kZXF1ZXVlO1xuICB2YXIgaGlnaFF1YWxpdHlSZXEgPSByZWFzb24gJiYgcmVhc29uID09PSBnZXRUeHJSZWFzb25zLmhpZ2hRdWFsaXR5O1xuICB2YXIgZG93bnNjYWxlUmVxID0gcmVhc29uICYmIHJlYXNvbiA9PT0gZ2V0VHhyUmVhc29ucy5kb3duc2NhbGU7XG4gIHZhciBoaWdoZXJDYWNoZTsgLy8gdGhlIG5lYXJlc3QgY2FjaGUgd2l0aCBhIGhpZ2hlciBsZXZlbFxuICBmb3IgKHZhciBsID0gbHZsICsgMTsgbCA8PSBtYXhMdmwkMTsgbCsrKSB7XG4gICAgdmFyIGMgPSBsb29rdXAuZ2V0KGVsZSwgbCk7XG4gICAgaWYgKGMpIHtcbiAgICAgIGhpZ2hlckNhY2hlID0gYztcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgfVxuICB2YXIgb25lVXBDYWNoZSA9IGhpZ2hlckNhY2hlICYmIGhpZ2hlckNhY2hlLmxldmVsID09PSBsdmwgKyAxID8gaGlnaGVyQ2FjaGUgOiBudWxsO1xuICB2YXIgZG93bnNjYWxlID0gZnVuY3Rpb24gZG93bnNjYWxlKCkge1xuICAgIHR4ci5jb250ZXh0LmRyYXdJbWFnZShvbmVVcENhY2hlLnRleHR1cmUuY2FudmFzLCBvbmVVcENhY2hlLngsIDAsIG9uZVVwQ2FjaGUud2lkdGgsIG9uZVVwQ2FjaGUuaGVpZ2h0LCB0eHIudXNlZFdpZHRoLCAwLCBlbGVTY2FsZWRXLCBlbGVTY2FsZWRIKTtcbiAgfTtcblxuICAvLyByZXNldCBlbGUgYXJlYSBpbiB0ZXh0dXJlXG4gIHR4ci5jb250ZXh0LnNldFRyYW5zZm9ybSgxLCAwLCAwLCAxLCAwLCAwKTtcbiAgdHhyLmNvbnRleHQuY2xlYXJSZWN0KHR4ci51c2VkV2lkdGgsIDAsIGVsZVNjYWxlZFcsIHR4ckgpO1xuICBpZiAoc2NhbGFibGVGcm9tKG9uZVVwQ2FjaGUpKSB7XG4gICAgLy8gdGhlbiB3ZSBjYW4gcmVsYXRpdmVseSBjaGVhcGx5IHJlc2NhbGUgdGhlIGV4aXN0aW5nIGltYWdlIHcvbyByZXJlbmRlcmluZ1xuICAgIGRvd25zY2FsZSgpO1xuICB9IGVsc2UgaWYgKHNjYWxhYmxlRnJvbShoaWdoZXJDYWNoZSkpIHtcbiAgICAvLyB0aGVuIHVzZSB0aGUgaGlnaGVyIGNhY2hlIGZvciBub3cgYW5kIHF1ZXVlIHRoZSBuZXh0IGxldmVsIGRvd25cbiAgICAvLyB0byBjaGVhcGx5IHNjYWxlIHRvd2FyZHMgdGhlIHNtYWxsZXIgbGV2ZWxcblxuICAgIGlmIChoaWdoUXVhbGl0eVJlcSkge1xuICAgICAgZm9yICh2YXIgX2wgPSBoaWdoZXJDYWNoZS5sZXZlbDsgX2wgPiBsdmw7IF9sLS0pIHtcbiAgICAgICAgb25lVXBDYWNoZSA9IHNlbGYuZ2V0RWxlbWVudChlbGUsIGJiLCBweFJhdGlvLCBfbCwgZ2V0VHhyUmVhc29ucy5kb3duc2NhbGUpO1xuICAgICAgfVxuICAgICAgZG93bnNjYWxlKCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHNlbGYucXVldWVFbGVtZW50KGVsZSwgaGlnaGVyQ2FjaGUubGV2ZWwgLSAxKTtcbiAgICAgIHJldHVybiBoaWdoZXJDYWNoZTtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgdmFyIGxvd2VyQ2FjaGU7IC8vIHRoZSBuZWFyZXN0IGNhY2hlIHdpdGggYSBsb3dlciBsZXZlbFxuICAgIGlmICghZGVxaW5nICYmICFoaWdoUXVhbGl0eVJlcSAmJiAhZG93bnNjYWxlUmVxKSB7XG4gICAgICBmb3IgKHZhciBfbDIgPSBsdmwgLSAxOyBfbDIgPj0gbWluTHZsJDE7IF9sMi0tKSB7XG4gICAgICAgIHZhciBfYyA9IGxvb2t1cC5nZXQoZWxlLCBfbDIpO1xuICAgICAgICBpZiAoX2MpIHtcbiAgICAgICAgICBsb3dlckNhY2hlID0gX2M7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKHNjYWxhYmxlRnJvbShsb3dlckNhY2hlKSkge1xuICAgICAgLy8gdGhlbiB1c2UgdGhlIGxvd2VyIHF1YWxpdHkgY2FjaGUgZm9yIG5vdyBhbmQgcXVldWUgdGhlIGJldHRlciBvbmUgZm9yIGxhdGVyXG5cbiAgICAgIHNlbGYucXVldWVFbGVtZW50KGVsZSwgbHZsKTtcbiAgICAgIHJldHVybiBsb3dlckNhY2hlO1xuICAgIH1cbiAgICB0eHIuY29udGV4dC50cmFuc2xhdGUodHhyLnVzZWRXaWR0aCwgMCk7XG4gICAgdHhyLmNvbnRleHQuc2NhbGUoc2NhbGUsIHNjYWxlKTtcbiAgICB0aGlzLmRyYXdFbGVtZW50KHR4ci5jb250ZXh0LCBlbGUsIGJiLCBzY2FsZWRMYWJlbFNob3duLCBmYWxzZSk7XG4gICAgdHhyLmNvbnRleHQuc2NhbGUoMSAvIHNjYWxlLCAxIC8gc2NhbGUpO1xuICAgIHR4ci5jb250ZXh0LnRyYW5zbGF0ZSgtdHhyLnVzZWRXaWR0aCwgMCk7XG4gIH1cbiAgZWxlQ2FjaGUgPSB7XG4gICAgeDogdHhyLnVzZWRXaWR0aCxcbiAgICB0ZXh0dXJlOiB0eHIsXG4gICAgbGV2ZWw6IGx2bCxcbiAgICBzY2FsZTogc2NhbGUsXG4gICAgd2lkdGg6IGVsZVNjYWxlZFcsXG4gICAgaGVpZ2h0OiBlbGVTY2FsZWRILFxuICAgIHNjYWxlZExhYmVsU2hvd246IHNjYWxlZExhYmVsU2hvd25cbiAgfTtcbiAgdHhyLnVzZWRXaWR0aCArPSBNYXRoLmNlaWwoZWxlU2NhbGVkVyArIGVsZVR4clNwYWNpbmcpO1xuICB0eHIuZWxlQ2FjaGVzLnB1c2goZWxlQ2FjaGUpO1xuICBsb29rdXAuc2V0KGVsZSwgbHZsLCBlbGVDYWNoZSk7XG4gIHNlbGYuY2hlY2tUZXh0dXJlRnVsbG5lc3ModHhyKTtcbiAgcmV0dXJuIGVsZUNhY2hlO1xufTtcbkVUQ3AuaW52YWxpZGF0ZUVsZW1lbnRzID0gZnVuY3Rpb24gKGVsZXMpIHtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBlbGVzLmxlbmd0aDsgaSsrKSB7XG4gICAgdGhpcy5pbnZhbGlkYXRlRWxlbWVudChlbGVzW2ldKTtcbiAgfVxufTtcbkVUQ3AuaW52YWxpZGF0ZUVsZW1lbnQgPSBmdW5jdGlvbiAoZWxlKSB7XG4gIHZhciBzZWxmID0gdGhpcztcbiAgdmFyIGxvb2t1cCA9IHNlbGYubG9va3VwO1xuICB2YXIgY2FjaGVzID0gW107XG4gIHZhciBpbnZhbGlkID0gbG9va3VwLmlzSW52YWxpZChlbGUpO1xuICBpZiAoIWludmFsaWQpIHtcbiAgICByZXR1cm47IC8vIG92ZXJyaWRlIHRoZSBpbnZhbGlkYXRpb24gcmVxdWVzdCBpZiB0aGUgZWxlbWVudCBrZXkgaGFzIG5vdCBjaGFuZ2VkXG4gIH1cbiAgZm9yICh2YXIgbHZsID0gbWluTHZsJDE7IGx2bCA8PSBtYXhMdmwkMTsgbHZsKyspIHtcbiAgICB2YXIgY2FjaGUgPSBsb29rdXAuZ2V0Rm9yQ2FjaGVkS2V5KGVsZSwgbHZsKTtcbiAgICBpZiAoY2FjaGUpIHtcbiAgICAgIGNhY2hlcy5wdXNoKGNhY2hlKTtcbiAgICB9XG4gIH1cbiAgdmFyIG5vT3RoZXJFbGVzVXNlQ2FjaGUgPSBsb29rdXAuaW52YWxpZGF0ZShlbGUpO1xuICBpZiAobm9PdGhlckVsZXNVc2VDYWNoZSkge1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgY2FjaGVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIgX2NhY2hlID0gY2FjaGVzW2ldO1xuICAgICAgdmFyIHR4ciA9IF9jYWNoZS50ZXh0dXJlO1xuXG4gICAgICAvLyByZW1vdmUgc3BhY2UgZnJvbSB0aGUgdGV4dHVyZSBpdCBiZWxvbmdzIHRvXG4gICAgICB0eHIuaW52YWxpZGF0ZWRXaWR0aCArPSBfY2FjaGUud2lkdGg7XG5cbiAgICAgIC8vIG1hcmsgdGhlIGNhY2hlIGFzIGludmFsaWRhdGVkXG4gICAgICBfY2FjaGUuaW52YWxpZGF0ZWQgPSB0cnVlO1xuXG4gICAgICAvLyByZXRpcmUgdGhlIHRleHR1cmUgaWYgaXRzIHV0aWxpdHkgaXMgbG93XG4gICAgICBzZWxmLmNoZWNrVGV4dHVyZVV0aWxpdHkodHhyKTtcbiAgICB9XG4gIH1cblxuICAvLyByZW1vdmUgZnJvbSBxdWV1ZSBzaW5jZSB0aGUgb2xkIHJlcSB3YXMgZm9yIHRoZSBvbGQgc3RhdGVcbiAgc2VsZi5yZW1vdmVGcm9tUXVldWUoZWxlKTtcbn07XG5FVENwLmNoZWNrVGV4dHVyZVV0aWxpdHkgPSBmdW5jdGlvbiAodHhyKSB7XG4gIC8vIGludmFsaWRhdGUgYWxsIGVudHJpZXMgaW4gdGhlIGNhY2hlIGlmIHRoZSBjYWNoZSBzaXplIGlzIHNtYWxsXG4gIGlmICh0eHIuaW52YWxpZGF0ZWRXaWR0aCA+PSBtaW5VdGlsaXR5ICogdHhyLndpZHRoKSB7XG4gICAgdGhpcy5yZXRpcmVUZXh0dXJlKHR4cik7XG4gIH1cbn07XG5FVENwLmNoZWNrVGV4dHVyZUZ1bGxuZXNzID0gZnVuY3Rpb24gKHR4cikge1xuICAvLyBpZiB0ZXh0dXJlIGhhcyBiZWVuIG1vc3RseSBmaWxsZWQgYW5kIHBhc3NlZCBvdmVyIHNldmVyYWwgdGltZXMsIHJlbW92ZVxuICAvLyBpdCBmcm9tIHRoZSBxdWV1ZSBzbyB3ZSBkb24ndCBuZWVkIHRvIHdhc3RlIHRpbWUgbG9va2luZyBhdCBpdCB0byBwdXQgbmV3IHRoaW5nc1xuXG4gIHZhciBzZWxmID0gdGhpcztcbiAgdmFyIHR4clEgPSBzZWxmLmdldFRleHR1cmVRdWV1ZSh0eHIuaGVpZ2h0KTtcbiAgaWYgKHR4ci51c2VkV2lkdGggLyB0eHIud2lkdGggPiBtYXhGdWxsbmVzcyAmJiB0eHIuZnVsbG5lc3NDaGVja3MgPj0gbWF4RnVsbG5lc3NDaGVja3MpIHtcbiAgICByZW1vdmVGcm9tQXJyYXkodHhyUSwgdHhyKTtcbiAgfSBlbHNlIHtcbiAgICB0eHIuZnVsbG5lc3NDaGVja3MrKztcbiAgfVxufTtcbkVUQ3AucmV0aXJlVGV4dHVyZSA9IGZ1bmN0aW9uICh0eHIpIHtcbiAgdmFyIHNlbGYgPSB0aGlzO1xuICB2YXIgdHhySCA9IHR4ci5oZWlnaHQ7XG4gIHZhciB0eHJRID0gc2VsZi5nZXRUZXh0dXJlUXVldWUodHhySCk7XG4gIHZhciBsb29rdXAgPSB0aGlzLmxvb2t1cDtcblxuICAvLyByZXRpcmUgdGhlIHRleHR1cmUgZnJvbSB0aGUgYWN0aXZlIC8gc2VhcmNoYWJsZSBxdWV1ZTpcblxuICByZW1vdmVGcm9tQXJyYXkodHhyUSwgdHhyKTtcbiAgdHhyLnJldGlyZWQgPSB0cnVlO1xuXG4gIC8vIHJlbW92ZSB0aGUgcmVmcyBmcm9tIHRoZSBlbGVzIHRvIHRoZSBjYWNoZXM6XG5cbiAgdmFyIGVsZUNhY2hlcyA9IHR4ci5lbGVDYWNoZXM7XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgZWxlQ2FjaGVzLmxlbmd0aDsgaSsrKSB7XG4gICAgdmFyIGVsZUNhY2hlID0gZWxlQ2FjaGVzW2ldO1xuICAgIGxvb2t1cC5kZWxldGVDYWNoZShlbGVDYWNoZS5rZXksIGVsZUNhY2hlLmxldmVsKTtcbiAgfVxuICBjbGVhckFycmF5KGVsZUNhY2hlcyk7XG5cbiAgLy8gYWRkIHRoZSB0ZXh0dXJlIHRvIGEgcmV0aXJlZCBxdWV1ZSBzbyBpdCBjYW4gYmUgcmVjeWNsZWQgaW4gZnV0dXJlOlxuXG4gIHZhciBydHh0clEgPSBzZWxmLmdldFJldGlyZWRUZXh0dXJlUXVldWUodHhySCk7XG4gIHJ0eHRyUS5wdXNoKHR4cik7XG59O1xuRVRDcC5hZGRUZXh0dXJlID0gZnVuY3Rpb24gKHR4ckgsIG1pblcpIHtcbiAgdmFyIHNlbGYgPSB0aGlzO1xuICB2YXIgdHhyUSA9IHNlbGYuZ2V0VGV4dHVyZVF1ZXVlKHR4ckgpO1xuICB2YXIgdHhyID0ge307XG4gIHR4clEucHVzaCh0eHIpO1xuICB0eHIuZWxlQ2FjaGVzID0gW107XG4gIHR4ci5oZWlnaHQgPSB0eHJIO1xuICB0eHIud2lkdGggPSBNYXRoLm1heChkZWZUeHJXaWR0aCwgbWluVyk7XG4gIHR4ci51c2VkV2lkdGggPSAwO1xuICB0eHIuaW52YWxpZGF0ZWRXaWR0aCA9IDA7XG4gIHR4ci5mdWxsbmVzc0NoZWNrcyA9IDA7XG4gIHR4ci5jYW52YXMgPSBzZWxmLnJlbmRlcmVyLm1ha2VPZmZzY3JlZW5DYW52YXModHhyLndpZHRoLCB0eHIuaGVpZ2h0KTtcbiAgdHhyLmNvbnRleHQgPSB0eHIuY2FudmFzLmdldENvbnRleHQoJzJkJyk7XG4gIHJldHVybiB0eHI7XG59O1xuRVRDcC5yZWN5Y2xlVGV4dHVyZSA9IGZ1bmN0aW9uICh0eHJILCBtaW5XKSB7XG4gIHZhciBzZWxmID0gdGhpcztcbiAgdmFyIHR4clEgPSBzZWxmLmdldFRleHR1cmVRdWV1ZSh0eHJIKTtcbiAgdmFyIHJ0eHRyUSA9IHNlbGYuZ2V0UmV0aXJlZFRleHR1cmVRdWV1ZSh0eHJIKTtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBydHh0clEubGVuZ3RoOyBpKyspIHtcbiAgICB2YXIgdHhyID0gcnR4dHJRW2ldO1xuICAgIGlmICh0eHIud2lkdGggPj0gbWluVykge1xuICAgICAgdHhyLnJldGlyZWQgPSBmYWxzZTtcbiAgICAgIHR4ci51c2VkV2lkdGggPSAwO1xuICAgICAgdHhyLmludmFsaWRhdGVkV2lkdGggPSAwO1xuICAgICAgdHhyLmZ1bGxuZXNzQ2hlY2tzID0gMDtcbiAgICAgIGNsZWFyQXJyYXkodHhyLmVsZUNhY2hlcyk7XG4gICAgICB0eHIuY29udGV4dC5zZXRUcmFuc2Zvcm0oMSwgMCwgMCwgMSwgMCwgMCk7XG4gICAgICB0eHIuY29udGV4dC5jbGVhclJlY3QoMCwgMCwgdHhyLndpZHRoLCB0eHIuaGVpZ2h0KTtcbiAgICAgIHJlbW92ZUZyb21BcnJheShydHh0clEsIHR4cik7XG4gICAgICB0eHJRLnB1c2godHhyKTtcbiAgICAgIHJldHVybiB0eHI7XG4gICAgfVxuICB9XG59O1xuRVRDcC5xdWV1ZUVsZW1lbnQgPSBmdW5jdGlvbiAoZWxlLCBsdmwpIHtcbiAgdmFyIHNlbGYgPSB0aGlzO1xuICB2YXIgcSA9IHNlbGYuZ2V0RWxlbWVudFF1ZXVlKCk7XG4gIHZhciBrMnEgPSBzZWxmLmdldEVsZW1lbnRLZXlUb1F1ZXVlKCk7XG4gIHZhciBrZXkgPSB0aGlzLmdldEtleShlbGUpO1xuICB2YXIgZXhpc3RpbmdSZXEgPSBrMnFba2V5XTtcbiAgaWYgKGV4aXN0aW5nUmVxKSB7XG4gICAgLy8gdXNlIHRoZSBtYXggbHZsIGIvYyBpbiBiZXR3ZWVuIGx2bHMgYXJlIGNoZWFwIHRvIG1ha2VcbiAgICBleGlzdGluZ1JlcS5sZXZlbCA9IE1hdGgubWF4KGV4aXN0aW5nUmVxLmxldmVsLCBsdmwpO1xuICAgIGV4aXN0aW5nUmVxLmVsZXMubWVyZ2UoZWxlKTtcbiAgICBleGlzdGluZ1JlcS5yZXFzKys7XG4gICAgcS51cGRhdGVJdGVtKGV4aXN0aW5nUmVxKTtcbiAgfSBlbHNlIHtcbiAgICB2YXIgcmVxID0ge1xuICAgICAgZWxlczogZWxlLnNwYXduKCkubWVyZ2UoZWxlKSxcbiAgICAgIGxldmVsOiBsdmwsXG4gICAgICByZXFzOiAxLFxuICAgICAga2V5OiBrZXlcbiAgICB9O1xuICAgIHEucHVzaChyZXEpO1xuICAgIGsycVtrZXldID0gcmVxO1xuICB9XG59O1xuRVRDcC5kZXF1ZXVlID0gZnVuY3Rpb24gKHB4UmF0aW8gLyosIGV4dGVudCovKSB7XG4gIHZhciBzZWxmID0gdGhpcztcbiAgdmFyIHEgPSBzZWxmLmdldEVsZW1lbnRRdWV1ZSgpO1xuICB2YXIgazJxID0gc2VsZi5nZXRFbGVtZW50S2V5VG9RdWV1ZSgpO1xuICB2YXIgZGVxdWV1ZWQgPSBbXTtcbiAgdmFyIGxvb2t1cCA9IHNlbGYubG9va3VwO1xuICBmb3IgKHZhciBpID0gMDsgaSA8IG1heERlcVNpemUkMTsgaSsrKSB7XG4gICAgaWYgKHEuc2l6ZSgpID4gMCkge1xuICAgICAgdmFyIHJlcSA9IHEucG9wKCk7XG4gICAgICB2YXIga2V5ID0gcmVxLmtleTtcbiAgICAgIHZhciBlbGUgPSByZXEuZWxlc1swXTsgLy8gYWxsIGVsZXMgaGF2ZSB0aGUgc2FtZSBrZXlcbiAgICAgIHZhciBjYWNoZUV4aXN0cyA9IGxvb2t1cC5oYXNDYWNoZShlbGUsIHJlcS5sZXZlbCk7XG5cbiAgICAgIC8vIGNsZWFyIG91dCB0aGUga2V5IHRvIHJlcSBsb29rdXBcbiAgICAgIGsycVtrZXldID0gbnVsbDtcblxuICAgICAgLy8gZGVxdWV1ZWluZyBpc24ndCBuZWNlc3Nhcnkgd2l0aCBhbiBleGlzdGluZyBjYWNoZVxuICAgICAgaWYgKGNhY2hlRXhpc3RzKSB7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuICAgICAgZGVxdWV1ZWQucHVzaChyZXEpO1xuICAgICAgdmFyIGJiID0gc2VsZi5nZXRCb3VuZGluZ0JveChlbGUpO1xuICAgICAgc2VsZi5nZXRFbGVtZW50KGVsZSwgYmIsIHB4UmF0aW8sIHJlcS5sZXZlbCwgZ2V0VHhyUmVhc29ucy5kZXF1ZXVlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgYnJlYWs7XG4gICAgfVxuICB9XG4gIHJldHVybiBkZXF1ZXVlZDtcbn07XG5FVENwLnJlbW92ZUZyb21RdWV1ZSA9IGZ1bmN0aW9uIChlbGUpIHtcbiAgdmFyIHNlbGYgPSB0aGlzO1xuICB2YXIgcSA9IHNlbGYuZ2V0RWxlbWVudFF1ZXVlKCk7XG4gIHZhciBrMnEgPSBzZWxmLmdldEVsZW1lbnRLZXlUb1F1ZXVlKCk7XG4gIHZhciBrZXkgPSB0aGlzLmdldEtleShlbGUpO1xuICB2YXIgcmVxID0gazJxW2tleV07XG4gIGlmIChyZXEgIT0gbnVsbCkge1xuICAgIGlmIChyZXEuZWxlcy5sZW5ndGggPT09IDEpIHtcbiAgICAgIC8vIHJlbW92ZSBpZiBsYXN0IGVsZSBpbiB0aGUgcmVxXG4gICAgICAvLyBicmluZyB0byBmcm9udCBvZiBxdWV1ZVxuICAgICAgcmVxLnJlcXMgPSBNQVhfSU5UJDE7XG4gICAgICBxLnVwZGF0ZUl0ZW0ocmVxKTtcbiAgICAgIHEucG9wKCk7IC8vIHJlbW92ZSBmcm9tIHF1ZXVlXG5cbiAgICAgIGsycVtrZXldID0gbnVsbDsgLy8gcmVtb3ZlIGZyb20gbG9va3VwIG1hcFxuICAgIH0gZWxzZSB7XG4gICAgICAvLyBvdGhlcndpc2UganVzdCByZW1vdmUgZWxlIGZyb20gcmVxXG4gICAgICByZXEuZWxlcy51bm1lcmdlKGVsZSk7XG4gICAgfVxuICB9XG59O1xuRVRDcC5vbkRlcXVldWUgPSBmdW5jdGlvbiAoZm4pIHtcbiAgdGhpcy5vbkRlcXVldWVzLnB1c2goZm4pO1xufTtcbkVUQ3Aub2ZmRGVxdWV1ZSA9IGZ1bmN0aW9uIChmbikge1xuICByZW1vdmVGcm9tQXJyYXkodGhpcy5vbkRlcXVldWVzLCBmbik7XG59O1xuRVRDcC5zZXR1cERlcXVldWVpbmcgPSBkZWZzLnNldHVwRGVxdWV1ZWluZyh7XG4gIGRlcVJlZHJhd1RocmVzaG9sZDogZGVxUmVkcmF3VGhyZXNob2xkJDEsXG4gIGRlcUNvc3Q6IGRlcUNvc3QkMSxcbiAgZGVxQXZnQ29zdDogZGVxQXZnQ29zdCQxLFxuICBkZXFOb0RyYXdDb3N0OiBkZXFOb0RyYXdDb3N0JDEsXG4gIGRlcUZhc3RDb3N0OiBkZXFGYXN0Q29zdCQxLFxuICBkZXE6IGZ1bmN0aW9uIGRlcShzZWxmLCBweFJhdGlvLCBleHRlbnQpIHtcbiAgICByZXR1cm4gc2VsZi5kZXF1ZXVlKHB4UmF0aW8sIGV4dGVudCk7XG4gIH0sXG4gIG9uRGVxZDogZnVuY3Rpb24gb25EZXFkKHNlbGYsIGRlcWQpIHtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHNlbGYub25EZXF1ZXVlcy5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIGZuID0gc2VsZi5vbkRlcXVldWVzW2ldO1xuICAgICAgZm4oZGVxZCk7XG4gICAgfVxuICB9LFxuICBzaG91bGRSZWRyYXc6IGZ1bmN0aW9uIHNob3VsZFJlZHJhdyhzZWxmLCBkZXFkLCBweFJhdGlvLCBleHRlbnQpIHtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGRlcWQubGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciBlbGVzID0gZGVxZFtpXS5lbGVzO1xuICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCBlbGVzLmxlbmd0aDsgaisrKSB7XG4gICAgICAgIHZhciBiYiA9IGVsZXNbal0uYm91bmRpbmdCb3goKTtcbiAgICAgICAgaWYgKGJvdW5kaW5nQm94ZXNJbnRlcnNlY3QoYmIsIGV4dGVudCkpIHtcbiAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG4gIH0sXG4gIHByaW9yaXR5OiBmdW5jdGlvbiBwcmlvcml0eShzZWxmKSB7XG4gICAgcmV0dXJuIHNlbGYucmVuZGVyZXIuYmVmb3JlUmVuZGVyUHJpb3JpdGllcy5lbGVUeHJEZXE7XG4gIH1cbn0pO1xuXG52YXIgZGVmTnVtTGF5ZXJzID0gMTsgLy8gZGVmYXVsdCBudW1iZXIgb2YgbGF5ZXJzIHRvIHVzZVxudmFyIG1pbkx2bCA9IC00OyAvLyB3aGVuIHNjYWxpbmcgc21hbGxlciB0aGFuIHRoYXQgd2UgZG9uJ3QgbmVlZCB0byByZS1yZW5kZXJcbnZhciBtYXhMdmwgPSAyOyAvLyB3aGVuIGxhcmdlciB0aGFuIHRoaXMgc2NhbGUganVzdCByZW5kZXIgZGlyZWN0bHkgKGNhY2hpbmcgaXMgbm90IGhlbHBmdWwpXG52YXIgbWF4Wm9vbSA9IDMuOTk7IC8vIGJleW9uZCB0aGlzIHpvb20gbGV2ZWwsIGxheWVyZWQgdGV4dHVyZXMgYXJlIG5vdCB1c2VkXG52YXIgZGVxUmVkcmF3VGhyZXNob2xkID0gNTA7IC8vIHRpbWUgdG8gYmF0Y2ggcmVkcmF3cyB0b2dldGhlciBmcm9tIGRlcXVldWVpbmcgdG8gYWxsb3cgbW9yZSBkZXF1ZXVlaW5nIGNhbGNzIHRvIGhhcHBlbiBpbiB0aGUgbWVhbndoaWxlXG52YXIgcmVmaW5lRWxlRGVib3VuY2VUaW1lID0gNTA7IC8vIHRpbWUgdG8gZGVib3VuY2Ugc2hhcnBlciBlbGUgdGV4dHVyZSB1cGRhdGVzXG52YXIgZGVxQ29zdCA9IDAuMTU7IC8vICUgb2YgYWRkJ2wgcmVuZGVyaW5nIGNvc3QgYWxsb3dlZCBmb3IgZGVxdWV1aW5nIGVsZSBjYWNoZXMgZWFjaCBmcmFtZVxudmFyIGRlcUF2Z0Nvc3QgPSAwLjE7IC8vICUgb2YgYWRkJ2wgcmVuZGVyaW5nIGNvc3QgY29tcGFyZWQgdG8gYXZlcmFnZSBvdmVyYWxsIHJlZHJhdyB0aW1lXG52YXIgZGVxTm9EcmF3Q29zdCA9IDAuOTsgLy8gJSBvZiBhdmcgZnJhbWUgdGltZSB0aGF0IGNhbiBiZSB1c2VkIGZvciBkZXF1ZXVlaW5nIHdoZW4gbm90IGRyYXdpbmdcbnZhciBkZXFGYXN0Q29zdCA9IDAuOTsgLy8gJSBvZiBmcmFtZSB0aW1lIHRvIGJlIHVzZWQgd2hlbiA+NjBmcHNcbnZhciBtYXhEZXFTaXplID0gMTsgLy8gbnVtYmVyIG9mIGVsZXMgdG8gZGVxdWV1ZSBhbmQgcmVuZGVyIGF0IGhpZ2hlciB0ZXh0dXJlIGluIGVhY2ggYmF0Y2hcbnZhciBpbnZhbGlkVGhyZXNob2xkID0gMjUwOyAvLyB0aW1lIHRocmVzaG9sZCBmb3IgZGlzYWJsaW5nIGIvYyBvZiBpbnZhbGlkYXRpb25zXG52YXIgbWF4TGF5ZXJBcmVhID0gNDAwMCAqIDQwMDA7IC8vIGxheWVycyBjYW4ndCBiZSBiaWdnZXIgdGhhbiB0aGlzXG52YXIgbWF4TGF5ZXJEaW0gPSAzMjc2NzsgLy8gbWF4aW11bSBzaXplIGZvciB0aGUgd2lkdGgvaGVpZ2h0IG9mIGxheWVyIGNhbnZhc2VzXG52YXIgdXNlSGlnaFF1YWxpdHlFbGVUeHJSZXFzID0gdHJ1ZTsgLy8gd2hldGhlciB0byB1c2UgaGlnaCBxdWFsaXR5IGVsZSB0eHIgcmVxdWVzdHMgKGdlbmVyYWxseSBmYXN0ZXIgYW5kIGNoZWFwZXIgaW4gdGhlIGxvbmd0ZXJtKVxuXG4vLyB2YXIgbG9nID0gZnVuY3Rpb24oKXsgY29uc29sZS5sb2cuYXBwbHkoIGNvbnNvbGUsIGFyZ3VtZW50cyApOyB9O1xuXG52YXIgTGF5ZXJlZFRleHR1cmVDYWNoZSA9IGZ1bmN0aW9uIExheWVyZWRUZXh0dXJlQ2FjaGUocmVuZGVyZXIpIHtcbiAgdmFyIHNlbGYgPSB0aGlzO1xuICB2YXIgciA9IHNlbGYucmVuZGVyZXIgPSByZW5kZXJlcjtcbiAgdmFyIGN5ID0gci5jeTtcbiAgc2VsZi5sYXllcnNCeUxldmVsID0ge307IC8vIGUuZy4gMiA9PiBbIGxheWVyMSwgbGF5ZXIyLCAuLi4sIGxheWVyTiBdXG5cbiAgc2VsZi5maXJzdEdldCA9IHRydWU7XG4gIHNlbGYubGFzdEludmFsaWRhdGlvblRpbWUgPSBwZXJmb3JtYW5jZU5vdygpIC0gMiAqIGludmFsaWRUaHJlc2hvbGQ7XG4gIHNlbGYuc2tpcHBpbmcgPSBmYWxzZTtcbiAgc2VsZi5lbGVUeHJEZXFzID0gY3kuY29sbGVjdGlvbigpO1xuICBzZWxmLnNjaGVkdWxlRWxlbWVudFJlZmluZW1lbnQgPSBkZWJvdW5jZShmdW5jdGlvbiAoKSB7XG4gICAgc2VsZi5yZWZpbmVFbGVtZW50VGV4dHVyZXMoc2VsZi5lbGVUeHJEZXFzKTtcbiAgICBzZWxmLmVsZVR4ckRlcXMudW5tZXJnZShzZWxmLmVsZVR4ckRlcXMpO1xuICB9LCByZWZpbmVFbGVEZWJvdW5jZVRpbWUpO1xuICByLmJlZm9yZVJlbmRlcihmdW5jdGlvbiAod2lsbERyYXcsIG5vdykge1xuICAgIGlmIChub3cgLSBzZWxmLmxhc3RJbnZhbGlkYXRpb25UaW1lIDw9IGludmFsaWRUaHJlc2hvbGQpIHtcbiAgICAgIHNlbGYuc2tpcHBpbmcgPSB0cnVlO1xuICAgIH0gZWxzZSB7XG4gICAgICBzZWxmLnNraXBwaW5nID0gZmFsc2U7XG4gICAgfVxuICB9LCByLmJlZm9yZVJlbmRlclByaW9yaXRpZXMubHlyVHhyU2tpcCk7XG4gIHZhciBxU29ydCA9IGZ1bmN0aW9uIHFTb3J0KGEsIGIpIHtcbiAgICByZXR1cm4gYi5yZXFzIC0gYS5yZXFzO1xuICB9O1xuICBzZWxmLmxheWVyc1F1ZXVlID0gbmV3IEhlYXAocVNvcnQpO1xuICBzZWxmLnNldHVwRGVxdWV1ZWluZygpO1xufTtcbnZhciBMVENwID0gTGF5ZXJlZFRleHR1cmVDYWNoZS5wcm90b3R5cGU7XG52YXIgbGF5ZXJJZFBvb2wgPSAwO1xudmFyIE1BWF9JTlQgPSBNYXRoLnBvdygyLCA1MykgLSAxO1xuTFRDcC5tYWtlTGF5ZXIgPSBmdW5jdGlvbiAoYmIsIGx2bCkge1xuICB2YXIgc2NhbGUgPSBNYXRoLnBvdygyLCBsdmwpO1xuICB2YXIgdyA9IE1hdGguY2VpbChiYi53ICogc2NhbGUpO1xuICB2YXIgaCA9IE1hdGguY2VpbChiYi5oICogc2NhbGUpO1xuICB2YXIgY2FudmFzID0gdGhpcy5yZW5kZXJlci5tYWtlT2Zmc2NyZWVuQ2FudmFzKHcsIGgpO1xuICB2YXIgbGF5ZXIgPSB7XG4gICAgaWQ6IGxheWVySWRQb29sID0gKytsYXllcklkUG9vbCAlIE1BWF9JTlQsXG4gICAgYmI6IGJiLFxuICAgIGxldmVsOiBsdmwsXG4gICAgd2lkdGg6IHcsXG4gICAgaGVpZ2h0OiBoLFxuICAgIGNhbnZhczogY2FudmFzLFxuICAgIGNvbnRleHQ6IGNhbnZhcy5nZXRDb250ZXh0KCcyZCcpLFxuICAgIGVsZXM6IFtdLFxuICAgIGVsZXNRdWV1ZTogW10sXG4gICAgcmVxczogMFxuICB9O1xuXG4gIC8vIGxvZygnbWFrZSBsYXllciAlcyB3aXRoIHcgJXMgYW5kIGggJXMgYW5kIGx2bCAlcycsIGxheWVyLmlkLCBsYXllci53aWR0aCwgbGF5ZXIuaGVpZ2h0LCBsYXllci5sZXZlbCk7XG5cbiAgdmFyIGN4dCA9IGxheWVyLmNvbnRleHQ7XG4gIHZhciBkeCA9IC1sYXllci5iYi54MTtcbiAgdmFyIGR5ID0gLWxheWVyLmJiLnkxO1xuXG4gIC8vIGRvIHRoZSB0cmFuc2Zvcm0gb24gY3JlYXRpb24gdG8gc2F2ZSBjeWNsZXMgKGl0J3MgdGhlIHNhbWUgZm9yIGFsbCBlbGVzKVxuICBjeHQuc2NhbGUoc2NhbGUsIHNjYWxlKTtcbiAgY3h0LnRyYW5zbGF0ZShkeCwgZHkpO1xuICByZXR1cm4gbGF5ZXI7XG59O1xuTFRDcC5nZXRMYXllcnMgPSBmdW5jdGlvbiAoZWxlcywgcHhSYXRpbywgbHZsKSB7XG4gIHZhciBzZWxmID0gdGhpcztcbiAgdmFyIHIgPSBzZWxmLnJlbmRlcmVyO1xuICB2YXIgY3kgPSByLmN5O1xuICB2YXIgem9vbSA9IGN5Lnpvb20oKTtcbiAgdmFyIGZpcnN0R2V0ID0gc2VsZi5maXJzdEdldDtcbiAgc2VsZi5maXJzdEdldCA9IGZhbHNlO1xuXG4gIC8vIGxvZygnLS1cXG5nZXQgbGF5ZXJzIHdpdGggJXMgZWxlcycsIGVsZXMubGVuZ3RoKTtcbiAgLy9sb2cgZWxlcy5tYXAoZnVuY3Rpb24oZWxlKXsgcmV0dXJuIGVsZS5pZCgpIH0pICk7XG5cbiAgaWYgKGx2bCA9PSBudWxsKSB7XG4gICAgbHZsID0gTWF0aC5jZWlsKGxvZzIoem9vbSAqIHB4UmF0aW8pKTtcbiAgICBpZiAobHZsIDwgbWluTHZsKSB7XG4gICAgICBsdmwgPSBtaW5Mdmw7XG4gICAgfSBlbHNlIGlmICh6b29tID49IG1heFpvb20gfHwgbHZsID4gbWF4THZsKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gIH1cbiAgc2VsZi52YWxpZGF0ZUxheWVyc0VsZXNPcmRlcmluZyhsdmwsIGVsZXMpO1xuICB2YXIgbGF5ZXJzQnlMdmwgPSBzZWxmLmxheWVyc0J5TGV2ZWw7XG4gIHZhciBzY2FsZSA9IE1hdGgucG93KDIsIGx2bCk7XG4gIHZhciBsYXllcnMgPSBsYXllcnNCeUx2bFtsdmxdID0gbGF5ZXJzQnlMdmxbbHZsXSB8fCBbXTtcbiAgdmFyIGJiO1xuICB2YXIgbHZsQ29tcGxldGUgPSBzZWxmLmxldmVsSXNDb21wbGV0ZShsdmwsIGVsZXMpO1xuICB2YXIgdG1wTGF5ZXJzO1xuICB2YXIgY2hlY2tUZW1wTGV2ZWxzID0gZnVuY3Rpb24gY2hlY2tUZW1wTGV2ZWxzKCkge1xuICAgIHZhciBjYW5Vc2VBc1RtcEx2bCA9IGZ1bmN0aW9uIGNhblVzZUFzVG1wTHZsKGwpIHtcbiAgICAgIHNlbGYudmFsaWRhdGVMYXllcnNFbGVzT3JkZXJpbmcobCwgZWxlcyk7XG4gICAgICBpZiAoc2VsZi5sZXZlbElzQ29tcGxldGUobCwgZWxlcykpIHtcbiAgICAgICAgdG1wTGF5ZXJzID0gbGF5ZXJzQnlMdmxbbF07XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgIH07XG4gICAgdmFyIGNoZWNrTHZscyA9IGZ1bmN0aW9uIGNoZWNrTHZscyhkaXIpIHtcbiAgICAgIGlmICh0bXBMYXllcnMpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgZm9yICh2YXIgbCA9IGx2bCArIGRpcjsgbWluTHZsIDw9IGwgJiYgbCA8PSBtYXhMdmw7IGwgKz0gZGlyKSB7XG4gICAgICAgIGlmIChjYW5Vc2VBc1RtcEx2bChsKSkge1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfTtcbiAgICBjaGVja0x2bHMoMSk7XG4gICAgY2hlY2tMdmxzKC0xKTtcblxuICAgIC8vIHJlbW92ZSB0aGUgaW52YWxpZCBsYXllcnM7IHRoZXkgd2lsbCBiZSByZXBsYWNlZCBhcyBuZWVkZWQgbGF0ZXIgaW4gdGhpcyBmdW5jdGlvblxuICAgIGZvciAodmFyIGkgPSBsYXllcnMubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIHtcbiAgICAgIHZhciBsYXllciA9IGxheWVyc1tpXTtcbiAgICAgIGlmIChsYXllci5pbnZhbGlkKSB7XG4gICAgICAgIHJlbW92ZUZyb21BcnJheShsYXllcnMsIGxheWVyKTtcbiAgICAgIH1cbiAgICB9XG4gIH07XG4gIGlmICghbHZsQ29tcGxldGUpIHtcbiAgICAvLyBpZiB0aGUgY3VycmVudCBsZXZlbCBpcyBpbmNvbXBsZXRlLCB0aGVuIHVzZSB0aGUgY2xvc2VzdCwgYmVzdCBxdWFsaXR5IGxheWVyc2V0IHRlbXBvcmFyaWx5XG4gICAgLy8gYW5kIGxhdGVyIHF1ZXVlIHRoZSBjdXJyZW50IGxheWVyc2V0IHNvIHdlIGNhbiBnZXQgdGhlIHByb3BlciBxdWFsaXR5IGxldmVsIHNvb25cblxuICAgIGNoZWNrVGVtcExldmVscygpO1xuICB9IGVsc2Uge1xuICAgIC8vIGxvZygnbGV2ZWwgY29tcGxldGUsIHVzaW5nIGV4aXN0aW5nIGxheWVyc1xcbi0tJyk7XG4gICAgcmV0dXJuIGxheWVycztcbiAgfVxuICB2YXIgZ2V0QmIgPSBmdW5jdGlvbiBnZXRCYigpIHtcbiAgICBpZiAoIWJiKSB7XG4gICAgICBiYiA9IG1ha2VCb3VuZGluZ0JveCgpO1xuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBlbGVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIHVwZGF0ZUJvdW5kaW5nQm94KGJiLCBlbGVzW2ldLmJvdW5kaW5nQm94KCkpO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gYmI7XG4gIH07XG4gIHZhciBtYWtlTGF5ZXIgPSBmdW5jdGlvbiBtYWtlTGF5ZXIob3B0cykge1xuICAgIG9wdHMgPSBvcHRzIHx8IHt9O1xuICAgIHZhciBhZnRlciA9IG9wdHMuYWZ0ZXI7XG4gICAgZ2V0QmIoKTtcbiAgICB2YXIgdyA9IE1hdGguY2VpbChiYi53ICogc2NhbGUpO1xuICAgIHZhciBoID0gTWF0aC5jZWlsKGJiLmggKiBzY2FsZSk7XG4gICAgaWYgKHcgPiBtYXhMYXllckRpbSB8fCBoID4gbWF4TGF5ZXJEaW0pIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICB2YXIgYXJlYSA9IHcgKiBoO1xuICAgIGlmIChhcmVhID4gbWF4TGF5ZXJBcmVhKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgdmFyIGxheWVyID0gc2VsZi5tYWtlTGF5ZXIoYmIsIGx2bCk7XG4gICAgaWYgKGFmdGVyICE9IG51bGwpIHtcbiAgICAgIHZhciBpbmRleCA9IGxheWVycy5pbmRleE9mKGFmdGVyKSArIDE7XG4gICAgICBsYXllcnMuc3BsaWNlKGluZGV4LCAwLCBsYXllcik7XG4gICAgfSBlbHNlIGlmIChvcHRzLmluc2VydCA9PT0gdW5kZWZpbmVkIHx8IG9wdHMuaW5zZXJ0KSB7XG4gICAgICAvLyBubyBhZnRlciBzcGVjaWZpZWQgPT4gZmlyc3QgbGF5ZXIgbWFkZSBzbyBwdXQgYXQgc3RhcnRcbiAgICAgIGxheWVycy51bnNoaWZ0KGxheWVyKTtcbiAgICB9XG5cbiAgICAvLyBpZiggdG1wTGF5ZXJzICl7XG4gICAgLy9zZWxmLnF1ZXVlTGF5ZXIoIGxheWVyICk7XG4gICAgLy8gfVxuXG4gICAgcmV0dXJuIGxheWVyO1xuICB9O1xuICBpZiAoc2VsZi5za2lwcGluZyAmJiAhZmlyc3RHZXQpIHtcbiAgICAvLyBsb2coJ3NraXAgbGF5ZXJzJyk7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICAvLyBsb2coJ2RvIGxheWVycycpO1xuXG4gIHZhciBsYXllciA9IG51bGw7XG4gIHZhciBtYXhFbGVzUGVyTGF5ZXIgPSBlbGVzLmxlbmd0aCAvIGRlZk51bUxheWVycztcbiAgdmFyIGFsbG93TGF6eVF1ZXVlaW5nID0gIWZpcnN0R2V0O1xuICBmb3IgKHZhciBpID0gMDsgaSA8IGVsZXMubGVuZ3RoOyBpKyspIHtcbiAgICB2YXIgZWxlID0gZWxlc1tpXTtcbiAgICB2YXIgcnMgPSBlbGUuX3ByaXZhdGUucnNjcmF0Y2g7XG4gICAgdmFyIGNhY2hlcyA9IHJzLmltZ0xheWVyQ2FjaGVzID0gcnMuaW1nTGF5ZXJDYWNoZXMgfHwge307XG5cbiAgICAvLyBsb2coJ2xvb2sgYXQgZWxlJywgZWxlLmlkKCkpO1xuXG4gICAgdmFyIGV4aXN0aW5nTGF5ZXIgPSBjYWNoZXNbbHZsXTtcbiAgICBpZiAoZXhpc3RpbmdMYXllcikge1xuICAgICAgLy8gcmV1c2UgbGF5ZXIgZm9yIGxhdGVyIGVsZXNcbiAgICAgIC8vIGxvZygncmV1c2UgbGF5ZXIgZm9yJywgZWxlLmlkKCkpO1xuICAgICAgbGF5ZXIgPSBleGlzdGluZ0xheWVyO1xuICAgICAgY29udGludWU7XG4gICAgfVxuICAgIGlmICghbGF5ZXIgfHwgbGF5ZXIuZWxlcy5sZW5ndGggPj0gbWF4RWxlc1BlckxheWVyIHx8ICFib3VuZGluZ0JveEluQm91bmRpbmdCb3gobGF5ZXIuYmIsIGVsZS5ib3VuZGluZ0JveCgpKSkge1xuICAgICAgLy8gbG9nKCdtYWtlIG5ldyBsYXllciBmb3IgZWxlICVzJywgZWxlLmlkKCkpO1xuXG4gICAgICBsYXllciA9IG1ha2VMYXllcih7XG4gICAgICAgIGluc2VydDogdHJ1ZSxcbiAgICAgICAgYWZ0ZXI6IGxheWVyXG4gICAgICB9KTtcblxuICAgICAgLy8gaWYgbm93IGxheWVyIGNhbiBiZSBidWlsdCB0aGVuIHdlIGNhbid0IHVzZSBsYXllcnMgYXQgdGhpcyBsZXZlbFxuICAgICAgaWYgKCFsYXllcikge1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIH1cblxuICAgICAgLy8gbG9nKCduZXcgbGF5ZXIgd2l0aCBpZCAlcycsIGxheWVyLmlkKTtcbiAgICB9XG4gICAgaWYgKHRtcExheWVycyB8fCBhbGxvd0xhenlRdWV1ZWluZykge1xuICAgICAgLy8gbG9nKCdxdWV1ZSBlbGUgJXMgaW4gbGF5ZXIgJXMnLCBlbGUuaWQoKSwgbGF5ZXIuaWQpO1xuICAgICAgc2VsZi5xdWV1ZUxheWVyKGxheWVyLCBlbGUpO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBsb2coJ2RyYXcgZWxlICVzIGluIGxheWVyICVzJywgZWxlLmlkKCksIGxheWVyLmlkKTtcbiAgICAgIHNlbGYuZHJhd0VsZUluTGF5ZXIobGF5ZXIsIGVsZSwgbHZsLCBweFJhdGlvKTtcbiAgICB9XG4gICAgbGF5ZXIuZWxlcy5wdXNoKGVsZSk7XG4gICAgY2FjaGVzW2x2bF0gPSBsYXllcjtcbiAgfVxuXG4gIC8vIGxvZygnLS0nKTtcblxuICBpZiAodG1wTGF5ZXJzKSB7XG4gICAgLy8gdGhlbiB3ZSBvbmx5IHF1ZXVlZCB0aGUgY3VycmVudCBsYXllcnNldCBhbmQgY2FuJ3QgZHJhdyBpdCB5ZXRcbiAgICByZXR1cm4gdG1wTGF5ZXJzO1xuICB9XG4gIGlmIChhbGxvd0xhenlRdWV1ZWluZykge1xuICAgIC8vIGxvZygnbGF6eSBxdWV1ZSBsZXZlbCcsIGx2bCk7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cbiAgcmV0dXJuIGxheWVycztcbn07XG5cbi8vIGEgbGF5ZXIgbWF5IHdhbnQgdG8gdXNlIGFuIGVsZSBjYWNoZSBvZiBhIGhpZ2hlciBsZXZlbCB0byBhdm9pZCBibHVycmluZXNzXG4vLyBzbyB0aGUgbGF5ZXIgbGV2ZWwgbWlnaHQgbm90IGVxdWFsIHRoZSBlbGUgbGV2ZWxcbkxUQ3AuZ2V0RWxlTGV2ZWxGb3JMYXllckxldmVsID0gZnVuY3Rpb24gKGx2bCwgcHhSYXRpbykge1xuICByZXR1cm4gbHZsO1xufTtcbkxUQ3AuZHJhd0VsZUluTGF5ZXIgPSBmdW5jdGlvbiAobGF5ZXIsIGVsZSwgbHZsLCBweFJhdGlvKSB7XG4gIHZhciBzZWxmID0gdGhpcztcbiAgdmFyIHIgPSB0aGlzLnJlbmRlcmVyO1xuICB2YXIgY29udGV4dCA9IGxheWVyLmNvbnRleHQ7XG4gIHZhciBiYiA9IGVsZS5ib3VuZGluZ0JveCgpO1xuICBpZiAoYmIudyA9PT0gMCB8fCBiYi5oID09PSAwIHx8ICFlbGUudmlzaWJsZSgpKSB7XG4gICAgcmV0dXJuO1xuICB9XG4gIGx2bCA9IHNlbGYuZ2V0RWxlTGV2ZWxGb3JMYXllckxldmVsKGx2bCwgcHhSYXRpbyk7XG4gIHtcbiAgICByLnNldEltZ1Ntb290aGluZyhjb250ZXh0LCBmYWxzZSk7XG4gIH1cbiAge1xuICAgIHIuZHJhd0NhY2hlZEVsZW1lbnQoY29udGV4dCwgZWxlLCBudWxsLCBudWxsLCBsdmwsIHVzZUhpZ2hRdWFsaXR5RWxlVHhyUmVxcyk7XG4gIH1cbiAge1xuICAgIHIuc2V0SW1nU21vb3RoaW5nKGNvbnRleHQsIHRydWUpO1xuICB9XG59O1xuTFRDcC5sZXZlbElzQ29tcGxldGUgPSBmdW5jdGlvbiAobHZsLCBlbGVzKSB7XG4gIHZhciBzZWxmID0gdGhpcztcbiAgdmFyIGxheWVycyA9IHNlbGYubGF5ZXJzQnlMZXZlbFtsdmxdO1xuICBpZiAoIWxheWVycyB8fCBsYXllcnMubGVuZ3RoID09PSAwKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIHZhciBudW1FbGVzSW5MYXllcnMgPSAwO1xuICBmb3IgKHZhciBpID0gMDsgaSA8IGxheWVycy5sZW5ndGg7IGkrKykge1xuICAgIHZhciBsYXllciA9IGxheWVyc1tpXTtcblxuICAgIC8vIGlmIHRoZXJlIGFyZSBhbnkgZWxlcyBuZWVkZWQgdG8gYmUgZHJhd24geWV0LCB0aGUgbGV2ZWwgaXMgbm90IGNvbXBsZXRlXG4gICAgaWYgKGxheWVyLnJlcXMgPiAwKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgLy8gaWYgdGhlIGxheWVyIGlzIGludmFsaWQsIHRoZSBsZXZlbCBpcyBub3QgY29tcGxldGVcbiAgICBpZiAobGF5ZXIuaW52YWxpZCkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICBudW1FbGVzSW5MYXllcnMgKz0gbGF5ZXIuZWxlcy5sZW5ndGg7XG4gIH1cblxuICAvLyB3ZSBzaG91bGQgaGF2ZSBleGFjdGx5IHRoZSBudW1iZXIgb2YgZWxlcyBwYXNzZWQgaW4gdG8gYmUgY29tcGxldGVcbiAgaWYgKG51bUVsZXNJbkxheWVycyAhPT0gZWxlcy5sZW5ndGgpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgcmV0dXJuIHRydWU7XG59O1xuTFRDcC52YWxpZGF0ZUxheWVyc0VsZXNPcmRlcmluZyA9IGZ1bmN0aW9uIChsdmwsIGVsZXMpIHtcbiAgdmFyIGxheWVycyA9IHRoaXMubGF5ZXJzQnlMZXZlbFtsdmxdO1xuICBpZiAoIWxheWVycykge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIC8vIGlmIGluIGEgbGF5ZXIgdGhlIGVsZXMgYXJlIG5vdCBpbiB0aGUgc2FtZSBvcmRlciwgdGhlbiB0aGUgbGF5ZXIgaXMgaW52YWxpZFxuICAvLyAoaS5lLiB0aGVyZSBpcyBhbiBlbGUgaW4gYmV0d2VlbiB0aGUgZWxlcyBpbiB0aGUgbGF5ZXIpXG5cbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBsYXllcnMubGVuZ3RoOyBpKyspIHtcbiAgICB2YXIgbGF5ZXIgPSBsYXllcnNbaV07XG4gICAgdmFyIG9mZnNldCA9IC0xO1xuXG4gICAgLy8gZmluZCB0aGUgb2Zmc2V0XG4gICAgZm9yICh2YXIgaiA9IDA7IGogPCBlbGVzLmxlbmd0aDsgaisrKSB7XG4gICAgICBpZiAobGF5ZXIuZWxlc1swXSA9PT0gZWxlc1tqXSkge1xuICAgICAgICBvZmZzZXQgPSBqO1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKG9mZnNldCA8IDApIHtcbiAgICAgIC8vIHRoZW4gdGhlIGxheWVyIGhhcyBub25leGlzdGVudCBlbGVtZW50cyBhbmQgaXMgaW52YWxpZFxuICAgICAgdGhpcy5pbnZhbGlkYXRlTGF5ZXIobGF5ZXIpO1xuICAgICAgY29udGludWU7XG4gICAgfVxuXG4gICAgLy8gdGhlIGVsZXMgaW4gdGhlIGxheWVyIG11c3QgYmUgaW4gdGhlIHNhbWUgY29udGludW91cyBvcmRlciwgZWxzZSB0aGUgbGF5ZXIgaXMgaW52YWxpZFxuXG4gICAgdmFyIG8gPSBvZmZzZXQ7XG4gICAgZm9yICh2YXIgaiA9IDA7IGogPCBsYXllci5lbGVzLmxlbmd0aDsgaisrKSB7XG4gICAgICBpZiAobGF5ZXIuZWxlc1tqXSAhPT0gZWxlc1tvICsgal0pIHtcbiAgICAgICAgLy8gbG9nKCdpbnZhbGlkYXRlIGJhc2VkIG9uIG9yZGVyaW5nJywgbGF5ZXIuaWQpO1xuXG4gICAgICAgIHRoaXMuaW52YWxpZGF0ZUxheWVyKGxheWVyKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfVxuICB9XG59O1xuTFRDcC51cGRhdGVFbGVtZW50c0luTGF5ZXJzID0gZnVuY3Rpb24gKGVsZXMsIHVwZGF0ZSkge1xuICB2YXIgc2VsZiA9IHRoaXM7XG4gIHZhciBpc0VsZXMgPSBlbGVtZW50KGVsZXNbMF0pO1xuXG4gIC8vIGNvbGxlY3QgdWRwYXRlZCBlbGVtZW50cyAoY2FzY2FkZWQgZnJvbSB0aGUgbGF5ZXJzKSBhbmQgdXBkYXRlIGVhY2hcbiAgLy8gbGF5ZXIgaXRzZWxmIGFsb25nIHRoZSB3YXlcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBlbGVzLmxlbmd0aDsgaSsrKSB7XG4gICAgdmFyIHJlcSA9IGlzRWxlcyA/IG51bGwgOiBlbGVzW2ldO1xuICAgIHZhciBlbGUgPSBpc0VsZXMgPyBlbGVzW2ldIDogZWxlc1tpXS5lbGU7XG4gICAgdmFyIHJzID0gZWxlLl9wcml2YXRlLnJzY3JhdGNoO1xuICAgIHZhciBjYWNoZXMgPSBycy5pbWdMYXllckNhY2hlcyA9IHJzLmltZ0xheWVyQ2FjaGVzIHx8IHt9O1xuICAgIGZvciAodmFyIGwgPSBtaW5Mdmw7IGwgPD0gbWF4THZsOyBsKyspIHtcbiAgICAgIHZhciBsYXllciA9IGNhY2hlc1tsXTtcbiAgICAgIGlmICghbGF5ZXIpIHtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG5cbiAgICAgIC8vIGlmIHVwZGF0ZSBpcyBhIHJlcXVlc3QgZnJvbSB0aGUgZWxlIGNhY2hlLCB0aGVuIGl0IGFmZmVjdHMgb25seVxuICAgICAgLy8gdGhlIG1hdGNoaW5nIGxldmVsXG4gICAgICBpZiAocmVxICYmIHNlbGYuZ2V0RWxlTGV2ZWxGb3JMYXllckxldmVsKGxheWVyLmxldmVsKSAhPT0gcmVxLmxldmVsKSB7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuICAgICAgdXBkYXRlKGxheWVyLCBlbGUsIHJlcSk7XG4gICAgfVxuICB9XG59O1xuTFRDcC5oYXZlTGF5ZXJzID0gZnVuY3Rpb24gKCkge1xuICB2YXIgc2VsZiA9IHRoaXM7XG4gIHZhciBoYXZlTGF5ZXJzID0gZmFsc2U7XG4gIGZvciAodmFyIGwgPSBtaW5Mdmw7IGwgPD0gbWF4THZsOyBsKyspIHtcbiAgICB2YXIgbGF5ZXJzID0gc2VsZi5sYXllcnNCeUxldmVsW2xdO1xuICAgIGlmIChsYXllcnMgJiYgbGF5ZXJzLmxlbmd0aCA+IDApIHtcbiAgICAgIGhhdmVMYXllcnMgPSB0cnVlO1xuICAgICAgYnJlYWs7XG4gICAgfVxuICB9XG4gIHJldHVybiBoYXZlTGF5ZXJzO1xufTtcbkxUQ3AuaW52YWxpZGF0ZUVsZW1lbnRzID0gZnVuY3Rpb24gKGVsZXMpIHtcbiAgdmFyIHNlbGYgPSB0aGlzO1xuICBpZiAoZWxlcy5sZW5ndGggPT09IDApIHtcbiAgICByZXR1cm47XG4gIH1cbiAgc2VsZi5sYXN0SW52YWxpZGF0aW9uVGltZSA9IHBlcmZvcm1hbmNlTm93KCk7XG5cbiAgLy8gbG9nKCd1cGRhdGUgaW52YWxpZGF0ZSBsYXllciB0aW1lIGZyb20gZWxlcycpO1xuXG4gIGlmIChlbGVzLmxlbmd0aCA9PT0gMCB8fCAhc2VsZi5oYXZlTGF5ZXJzKCkpIHtcbiAgICByZXR1cm47XG4gIH1cbiAgc2VsZi51cGRhdGVFbGVtZW50c0luTGF5ZXJzKGVsZXMsIGZ1bmN0aW9uIGludmFsQXNzb2NMYXllcnMobGF5ZXIsIGVsZSwgcmVxKSB7XG4gICAgc2VsZi5pbnZhbGlkYXRlTGF5ZXIobGF5ZXIpO1xuICB9KTtcbn07XG5MVENwLmludmFsaWRhdGVMYXllciA9IGZ1bmN0aW9uIChsYXllcikge1xuICAvLyBsb2coJ3VwZGF0ZSBpbnZhbGlkYXRlIGxheWVyIHRpbWUnKTtcblxuICB0aGlzLmxhc3RJbnZhbGlkYXRpb25UaW1lID0gcGVyZm9ybWFuY2VOb3coKTtcbiAgaWYgKGxheWVyLmludmFsaWQpIHtcbiAgICByZXR1cm47XG4gIH0gLy8gc2F2ZSBjeWNsZXNcblxuICB2YXIgbHZsID0gbGF5ZXIubGV2ZWw7XG4gIHZhciBlbGVzID0gbGF5ZXIuZWxlcztcbiAgdmFyIGxheWVycyA9IHRoaXMubGF5ZXJzQnlMZXZlbFtsdmxdO1xuXG4gIC8vIGxvZygnaW52YWxpZGF0ZSBsYXllcicsIGxheWVyLmlkICk7XG5cbiAgcmVtb3ZlRnJvbUFycmF5KGxheWVycywgbGF5ZXIpO1xuICAvLyBsYXllci5lbGVzID0gW107XG5cbiAgbGF5ZXIuZWxlc1F1ZXVlID0gW107XG4gIGxheWVyLmludmFsaWQgPSB0cnVlO1xuICBpZiAobGF5ZXIucmVwbGFjZW1lbnQpIHtcbiAgICBsYXllci5yZXBsYWNlbWVudC5pbnZhbGlkID0gdHJ1ZTtcbiAgfVxuICBmb3IgKHZhciBpID0gMDsgaSA8IGVsZXMubGVuZ3RoOyBpKyspIHtcbiAgICB2YXIgY2FjaGVzID0gZWxlc1tpXS5fcHJpdmF0ZS5yc2NyYXRjaC5pbWdMYXllckNhY2hlcztcbiAgICBpZiAoY2FjaGVzKSB7XG4gICAgICBjYWNoZXNbbHZsXSA9IG51bGw7XG4gICAgfVxuICB9XG59O1xuTFRDcC5yZWZpbmVFbGVtZW50VGV4dHVyZXMgPSBmdW5jdGlvbiAoZWxlcykge1xuICB2YXIgc2VsZiA9IHRoaXM7XG5cbiAgLy8gbG9nKCdyZWZpbmUnLCBlbGVzLmxlbmd0aCk7XG5cbiAgc2VsZi51cGRhdGVFbGVtZW50c0luTGF5ZXJzKGVsZXMsIGZ1bmN0aW9uIHJlZmluZUVhY2hFbGUobGF5ZXIsIGVsZSwgcmVxKSB7XG4gICAgdmFyIHJMeXIgPSBsYXllci5yZXBsYWNlbWVudDtcbiAgICBpZiAoIXJMeXIpIHtcbiAgICAgIHJMeXIgPSBsYXllci5yZXBsYWNlbWVudCA9IHNlbGYubWFrZUxheWVyKGxheWVyLmJiLCBsYXllci5sZXZlbCk7XG4gICAgICByTHlyLnJlcGxhY2VzID0gbGF5ZXI7XG4gICAgICByTHlyLmVsZXMgPSBsYXllci5lbGVzO1xuXG4gICAgICAvLyBsb2coJ21ha2UgcmVwbGFjZW1lbnQgbGF5ZXIgJXMgZm9yICVzIHdpdGggbGV2ZWwgJXMnLCByTHlyLmlkLCBsYXllci5pZCwgckx5ci5sZXZlbCk7XG4gICAgfVxuICAgIGlmICghckx5ci5yZXFzKSB7XG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHJMeXIuZWxlcy5sZW5ndGg7IGkrKykge1xuICAgICAgICBzZWxmLnF1ZXVlTGF5ZXIockx5ciwgckx5ci5lbGVzW2ldKTtcbiAgICAgIH1cblxuICAgICAgLy8gbG9nKCdxdWV1ZSByZXBsYWNlbWVudCBsYXllciByZWZpbmVtZW50Jywgckx5ci5pZCk7XG4gICAgfVxuICB9KTtcbn07XG5MVENwLmVucXVldWVFbGVtZW50UmVmaW5lbWVudCA9IGZ1bmN0aW9uIChlbGUpIHtcbiAgdGhpcy5lbGVUeHJEZXFzLm1lcmdlKGVsZSk7XG4gIHRoaXMuc2NoZWR1bGVFbGVtZW50UmVmaW5lbWVudCgpO1xufTtcbkxUQ3AucXVldWVMYXllciA9IGZ1bmN0aW9uIChsYXllciwgZWxlKSB7XG4gIHZhciBzZWxmID0gdGhpcztcbiAgdmFyIHEgPSBzZWxmLmxheWVyc1F1ZXVlO1xuICB2YXIgZWxlc1EgPSBsYXllci5lbGVzUXVldWU7XG4gIHZhciBoYXNJZCA9IGVsZXNRLmhhc0lkID0gZWxlc1EuaGFzSWQgfHwge307XG5cbiAgLy8gaWYgYSBsYXllciBpcyBnb2luZyB0byBiZSByZXBsYWNlZCwgcXVldWluZyBpcyBhIHdhc3RlIG9mIHRpbWVcbiAgaWYgKGxheWVyLnJlcGxhY2VtZW50KSB7XG4gICAgcmV0dXJuO1xuICB9XG4gIGlmIChlbGUpIHtcbiAgICBpZiAoaGFzSWRbZWxlLmlkKCldKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGVsZXNRLnB1c2goZWxlKTtcbiAgICBoYXNJZFtlbGUuaWQoKV0gPSB0cnVlO1xuICB9XG4gIGlmIChsYXllci5yZXFzKSB7XG4gICAgbGF5ZXIucmVxcysrO1xuICAgIHEudXBkYXRlSXRlbShsYXllcik7XG4gIH0gZWxzZSB7XG4gICAgbGF5ZXIucmVxcyA9IDE7XG4gICAgcS5wdXNoKGxheWVyKTtcbiAgfVxufTtcbkxUQ3AuZGVxdWV1ZSA9IGZ1bmN0aW9uIChweFJhdGlvKSB7XG4gIHZhciBzZWxmID0gdGhpcztcbiAgdmFyIHEgPSBzZWxmLmxheWVyc1F1ZXVlO1xuICB2YXIgZGVxZCA9IFtdO1xuICB2YXIgZWxlRGVxcyA9IDA7XG4gIHdoaWxlIChlbGVEZXFzIDwgbWF4RGVxU2l6ZSkge1xuICAgIGlmIChxLnNpemUoKSA9PT0gMCkge1xuICAgICAgYnJlYWs7XG4gICAgfVxuICAgIHZhciBsYXllciA9IHEucGVlaygpO1xuXG4gICAgLy8gaWYgYSBsYXllciBoYXMgYmVlbiBvciB3aWxsIGJlIHJlcGxhY2VkLCB0aGVuIGRvbid0IHdhc3RlIHRpbWUgd2l0aCBpdFxuICAgIGlmIChsYXllci5yZXBsYWNlbWVudCkge1xuICAgICAgLy8gbG9nKCdsYXllciAlcyBpbiBxdWV1ZSBza2lwcGVkIGIvYyBpdCBhbHJlYWR5IGhhcyBhIHJlcGxhY2VtZW50JywgbGF5ZXIuaWQpO1xuICAgICAgcS5wb3AoKTtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cblxuICAgIC8vIGlmIHRoaXMgaXMgYSByZXBsYWNlbWVudCBsYXllciB0aGF0IGhhcyBiZWVuIHN1cGVyY2VkZWQsIHRoZW4gZm9yZ2V0IGl0XG4gICAgaWYgKGxheWVyLnJlcGxhY2VzICYmIGxheWVyICE9PSBsYXllci5yZXBsYWNlcy5yZXBsYWNlbWVudCkge1xuICAgICAgLy8gbG9nKCdsYXllciBpcyBubyBsb25nZXIgdGhlIG1vc3QgdXB0b2RhdGUgcmVwbGFjZW1lbnQ7IGRlcXVldWVkJywgbGF5ZXIuaWQpXG4gICAgICBxLnBvcCgpO1xuICAgICAgY29udGludWU7XG4gICAgfVxuICAgIGlmIChsYXllci5pbnZhbGlkKSB7XG4gICAgICAvLyBsb2coJ3JlcGxhY2VtZW50IGxheWVyICVzIGlzIGludmFsaWQ7IGRlcXVldWVkJywgbGF5ZXIuaWQpO1xuICAgICAgcS5wb3AoKTtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cbiAgICB2YXIgZWxlID0gbGF5ZXIuZWxlc1F1ZXVlLnNoaWZ0KCk7XG4gICAgaWYgKGVsZSkge1xuICAgICAgLy8gbG9nKCdkZXF1ZXVlIGxheWVyICVzJywgbGF5ZXIuaWQpO1xuXG4gICAgICBzZWxmLmRyYXdFbGVJbkxheWVyKGxheWVyLCBlbGUsIGxheWVyLmxldmVsLCBweFJhdGlvKTtcbiAgICAgIGVsZURlcXMrKztcbiAgICB9XG4gICAgaWYgKGRlcWQubGVuZ3RoID09PSAwKSB7XG4gICAgICAvLyB3ZSBuZWVkIG9ubHkgb25lIGVudHJ5IGluIGRlcWQgdG8gcXVldWUgcmVkcmF3aW5nIGV0Y1xuICAgICAgZGVxZC5wdXNoKHRydWUpO1xuICAgIH1cblxuICAgIC8vIGlmIHRoZSBsYXllciBoYXMgYWxsIGl0cyBlbGVzIGRvbmUsIHRoZW4gcmVtb3ZlIGZyb20gdGhlIHF1ZXVlXG4gICAgaWYgKGxheWVyLmVsZXNRdWV1ZS5sZW5ndGggPT09IDApIHtcbiAgICAgIHEucG9wKCk7XG4gICAgICBsYXllci5yZXFzID0gMDtcblxuICAgICAgLy8gbG9nKCdkZXF1ZXVlIG9mIGxheWVyICVzIGNvbXBsZXRlJywgbGF5ZXIuaWQpO1xuXG4gICAgICAvLyB3aGVuIGEgcmVwbGFjZW1lbnQgbGF5ZXIgaXMgZGVxdWV1ZWQsIGl0IHJlcGxhY2VzIHRoZSBvbGQgbGF5ZXIgaW4gdGhlIGxldmVsXG4gICAgICBpZiAobGF5ZXIucmVwbGFjZXMpIHtcbiAgICAgICAgc2VsZi5hcHBseUxheWVyUmVwbGFjZW1lbnQobGF5ZXIpO1xuICAgICAgfVxuICAgICAgc2VsZi5yZXF1ZXN0UmVkcmF3KCk7XG4gICAgfVxuICB9XG4gIHJldHVybiBkZXFkO1xufTtcbkxUQ3AuYXBwbHlMYXllclJlcGxhY2VtZW50ID0gZnVuY3Rpb24gKGxheWVyKSB7XG4gIHZhciBzZWxmID0gdGhpcztcbiAgdmFyIGxheWVyc0luTGV2ZWwgPSBzZWxmLmxheWVyc0J5TGV2ZWxbbGF5ZXIubGV2ZWxdO1xuICB2YXIgcmVwbGFjZWQgPSBsYXllci5yZXBsYWNlcztcbiAgdmFyIGluZGV4ID0gbGF5ZXJzSW5MZXZlbC5pbmRleE9mKHJlcGxhY2VkKTtcblxuICAvLyBpZiB0aGUgcmVwbGFjZWQgbGF5ZXIgaXMgbm90IGluIHRoZSBhY3RpdmUgbGlzdCBmb3IgdGhlIGxldmVsLCB0aGVuIHJlcGxhY2luZ1xuICAvLyByZWZzIHdvdWxkIGJlIGEgbWlzdGFrZSAoaS5lLiBvdmVyd3JpdGluZyB0aGUgdHJ1ZSBhY3RpdmUgbGF5ZXIpXG4gIGlmIChpbmRleCA8IDAgfHwgcmVwbGFjZWQuaW52YWxpZCkge1xuICAgIC8vIGxvZygncmVwbGFjZW1lbnQgbGF5ZXIgd291bGQgaGF2ZSBubyBlZmZlY3QnLCBsYXllci5pZCk7XG4gICAgcmV0dXJuO1xuICB9XG4gIGxheWVyc0luTGV2ZWxbaW5kZXhdID0gbGF5ZXI7IC8vIHJlcGxhY2UgbGV2ZWwgcmVmXG5cbiAgLy8gcmVwbGFjZSByZWZzIGluIGVsZXNcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBsYXllci5lbGVzLmxlbmd0aDsgaSsrKSB7XG4gICAgdmFyIF9wID0gbGF5ZXIuZWxlc1tpXS5fcHJpdmF0ZTtcbiAgICB2YXIgY2FjaGUgPSBfcC5pbWdMYXllckNhY2hlcyA9IF9wLmltZ0xheWVyQ2FjaGVzIHx8IHt9O1xuICAgIGlmIChjYWNoZSkge1xuICAgICAgY2FjaGVbbGF5ZXIubGV2ZWxdID0gbGF5ZXI7XG4gICAgfVxuICB9XG5cbiAgLy8gbG9nKCdhcHBseSByZXBsYWNlbWVudCBsYXllciAlcyBvdmVyICVzJywgbGF5ZXIuaWQsIHJlcGxhY2VkLmlkKTtcblxuICBzZWxmLnJlcXVlc3RSZWRyYXcoKTtcbn07XG5MVENwLnJlcXVlc3RSZWRyYXcgPSBkZWJvdW5jZShmdW5jdGlvbiAoKSB7XG4gIHZhciByID0gdGhpcy5yZW5kZXJlcjtcbiAgci5yZWRyYXdIaW50KCdlbGVzJywgdHJ1ZSk7XG4gIHIucmVkcmF3SGludCgnZHJhZycsIHRydWUpO1xuICByLnJlZHJhdygpO1xufSwgMTAwKTtcbkxUQ3Auc2V0dXBEZXF1ZXVlaW5nID0gZGVmcy5zZXR1cERlcXVldWVpbmcoe1xuICBkZXFSZWRyYXdUaHJlc2hvbGQ6IGRlcVJlZHJhd1RocmVzaG9sZCxcbiAgZGVxQ29zdDogZGVxQ29zdCxcbiAgZGVxQXZnQ29zdDogZGVxQXZnQ29zdCxcbiAgZGVxTm9EcmF3Q29zdDogZGVxTm9EcmF3Q29zdCxcbiAgZGVxRmFzdENvc3Q6IGRlcUZhc3RDb3N0LFxuICBkZXE6IGZ1bmN0aW9uIGRlcShzZWxmLCBweFJhdGlvKSB7XG4gICAgcmV0dXJuIHNlbGYuZGVxdWV1ZShweFJhdGlvKTtcbiAgfSxcbiAgb25EZXFkOiBub29wJDEsXG4gIHNob3VsZFJlZHJhdzogdHJ1ZWlmeSxcbiAgcHJpb3JpdHk6IGZ1bmN0aW9uIHByaW9yaXR5KHNlbGYpIHtcbiAgICByZXR1cm4gc2VsZi5yZW5kZXJlci5iZWZvcmVSZW5kZXJQcmlvcml0aWVzLmx5clR4ckRlcTtcbiAgfVxufSk7XG5cbnZhciBDUnAkYiA9IHt9O1xudmFyIGltcGw7XG5mdW5jdGlvbiBwb2x5Z29uKGNvbnRleHQsIHBvaW50cykge1xuICBmb3IgKHZhciBpID0gMDsgaSA8IHBvaW50cy5sZW5ndGg7IGkrKykge1xuICAgIHZhciBwdCA9IHBvaW50c1tpXTtcbiAgICBjb250ZXh0LmxpbmVUbyhwdC54LCBwdC55KTtcbiAgfVxufVxuZnVuY3Rpb24gdHJpYW5nbGVCYWNrY3VydmUoY29udGV4dCwgcG9pbnRzLCBjb250cm9sUG9pbnQpIHtcbiAgdmFyIGZpcnN0UHQ7XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgcG9pbnRzLmxlbmd0aDsgaSsrKSB7XG4gICAgdmFyIHB0ID0gcG9pbnRzW2ldO1xuICAgIGlmIChpID09PSAwKSB7XG4gICAgICBmaXJzdFB0ID0gcHQ7XG4gICAgfVxuICAgIGNvbnRleHQubGluZVRvKHB0LngsIHB0LnkpO1xuICB9XG4gIGNvbnRleHQucXVhZHJhdGljQ3VydmVUbyhjb250cm9sUG9pbnQueCwgY29udHJvbFBvaW50LnksIGZpcnN0UHQueCwgZmlyc3RQdC55KTtcbn1cbmZ1bmN0aW9uIHRyaWFuZ2xlVGVlKGNvbnRleHQsIHRyaWFuZ2xlUG9pbnRzLCB0ZWVQb2ludHMpIHtcbiAgaWYgKGNvbnRleHQuYmVnaW5QYXRoKSB7XG4gICAgY29udGV4dC5iZWdpblBhdGgoKTtcbiAgfVxuICB2YXIgdHJpUHRzID0gdHJpYW5nbGVQb2ludHM7XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgdHJpUHRzLmxlbmd0aDsgaSsrKSB7XG4gICAgdmFyIHB0ID0gdHJpUHRzW2ldO1xuICAgIGNvbnRleHQubGluZVRvKHB0LngsIHB0LnkpO1xuICB9XG4gIHZhciB0ZWVQdHMgPSB0ZWVQb2ludHM7XG4gIHZhciBmaXJzdFRlZVB0ID0gdGVlUG9pbnRzWzBdO1xuICBjb250ZXh0Lm1vdmVUbyhmaXJzdFRlZVB0LngsIGZpcnN0VGVlUHQueSk7XG4gIGZvciAodmFyIGkgPSAxOyBpIDwgdGVlUHRzLmxlbmd0aDsgaSsrKSB7XG4gICAgdmFyIHB0ID0gdGVlUHRzW2ldO1xuICAgIGNvbnRleHQubGluZVRvKHB0LngsIHB0LnkpO1xuICB9XG4gIGlmIChjb250ZXh0LmNsb3NlUGF0aCkge1xuICAgIGNvbnRleHQuY2xvc2VQYXRoKCk7XG4gIH1cbn1cbmZ1bmN0aW9uIGNpcmNsZVRyaWFuZ2xlKGNvbnRleHQsIHRyaWFuZ2xlUG9pbnRzLCByeCwgcnksIHIpIHtcbiAgaWYgKGNvbnRleHQuYmVnaW5QYXRoKSB7XG4gICAgY29udGV4dC5iZWdpblBhdGgoKTtcbiAgfVxuICBjb250ZXh0LmFyYyhyeCwgcnksIHIsIDAsIE1hdGguUEkgKiAyLCBmYWxzZSk7XG4gIHZhciB0cmlQdHMgPSB0cmlhbmdsZVBvaW50cztcbiAgdmFyIGZpcnN0VHJQdCA9IHRyaVB0c1swXTtcbiAgY29udGV4dC5tb3ZlVG8oZmlyc3RUclB0LngsIGZpcnN0VHJQdC55KTtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCB0cmlQdHMubGVuZ3RoOyBpKyspIHtcbiAgICB2YXIgcHQgPSB0cmlQdHNbaV07XG4gICAgY29udGV4dC5saW5lVG8ocHQueCwgcHQueSk7XG4gIH1cbiAgaWYgKGNvbnRleHQuY2xvc2VQYXRoKSB7XG4gICAgY29udGV4dC5jbG9zZVBhdGgoKTtcbiAgfVxufVxuZnVuY3Rpb24gY2lyY2xlKGNvbnRleHQsIHJ4LCByeSwgcikge1xuICBjb250ZXh0LmFyYyhyeCwgcnksIHIsIDAsIE1hdGguUEkgKiAyLCBmYWxzZSk7XG59XG5DUnAkYi5hcnJvd1NoYXBlSW1wbCA9IGZ1bmN0aW9uIChuYW1lKSB7XG4gIHJldHVybiAoaW1wbCB8fCAoaW1wbCA9IHtcbiAgICAncG9seWdvbic6IHBvbHlnb24sXG4gICAgJ3RyaWFuZ2xlLWJhY2tjdXJ2ZSc6IHRyaWFuZ2xlQmFja2N1cnZlLFxuICAgICd0cmlhbmdsZS10ZWUnOiB0cmlhbmdsZVRlZSxcbiAgICAnY2lyY2xlLXRyaWFuZ2xlJzogY2lyY2xlVHJpYW5nbGUsXG4gICAgJ3RyaWFuZ2xlLWNyb3NzJzogdHJpYW5nbGVUZWUsXG4gICAgJ2NpcmNsZSc6IGNpcmNsZVxuICB9KSlbbmFtZV07XG59O1xuXG52YXIgQ1JwJGEgPSB7fTtcbkNScCRhLmRyYXdFbGVtZW50ID0gZnVuY3Rpb24gKGNvbnRleHQsIGVsZSwgc2hpZnRUb09yaWdpbldpdGhCYiwgc2hvd0xhYmVsLCBzaG93T3ZlcmxheSwgc2hvd09wYWNpdHkpIHtcbiAgdmFyIHIgPSB0aGlzO1xuICBpZiAoZWxlLmlzTm9kZSgpKSB7XG4gICAgci5kcmF3Tm9kZShjb250ZXh0LCBlbGUsIHNoaWZ0VG9PcmlnaW5XaXRoQmIsIHNob3dMYWJlbCwgc2hvd092ZXJsYXksIHNob3dPcGFjaXR5KTtcbiAgfSBlbHNlIHtcbiAgICByLmRyYXdFZGdlKGNvbnRleHQsIGVsZSwgc2hpZnRUb09yaWdpbldpdGhCYiwgc2hvd0xhYmVsLCBzaG93T3ZlcmxheSwgc2hvd09wYWNpdHkpO1xuICB9XG59O1xuQ1JwJGEuZHJhd0VsZW1lbnRPdmVybGF5ID0gZnVuY3Rpb24gKGNvbnRleHQsIGVsZSkge1xuICB2YXIgciA9IHRoaXM7XG4gIGlmIChlbGUuaXNOb2RlKCkpIHtcbiAgICByLmRyYXdOb2RlT3ZlcmxheShjb250ZXh0LCBlbGUpO1xuICB9IGVsc2Uge1xuICAgIHIuZHJhd0VkZ2VPdmVybGF5KGNvbnRleHQsIGVsZSk7XG4gIH1cbn07XG5DUnAkYS5kcmF3RWxlbWVudFVuZGVybGF5ID0gZnVuY3Rpb24gKGNvbnRleHQsIGVsZSkge1xuICB2YXIgciA9IHRoaXM7XG4gIGlmIChlbGUuaXNOb2RlKCkpIHtcbiAgICByLmRyYXdOb2RlVW5kZXJsYXkoY29udGV4dCwgZWxlKTtcbiAgfSBlbHNlIHtcbiAgICByLmRyYXdFZGdlVW5kZXJsYXkoY29udGV4dCwgZWxlKTtcbiAgfVxufTtcbkNScCRhLmRyYXdDYWNoZWRFbGVtZW50UG9ydGlvbiA9IGZ1bmN0aW9uIChjb250ZXh0LCBlbGUsIGVsZVR4ckNhY2hlLCBweFJhdGlvLCBsdmwsIHJlYXNvbiwgZ2V0Um90YXRpb24sIGdldE9wYWNpdHkpIHtcbiAgdmFyIHIgPSB0aGlzO1xuICB2YXIgYmIgPSBlbGVUeHJDYWNoZS5nZXRCb3VuZGluZ0JveChlbGUpO1xuICBpZiAoYmIudyA9PT0gMCB8fCBiYi5oID09PSAwKSB7XG4gICAgcmV0dXJuO1xuICB9IC8vIGlnbm9yZSB6ZXJvIHNpemUgY2FzZVxuXG4gIHZhciBlbGVDYWNoZSA9IGVsZVR4ckNhY2hlLmdldEVsZW1lbnQoZWxlLCBiYiwgcHhSYXRpbywgbHZsLCByZWFzb24pO1xuICBpZiAoZWxlQ2FjaGUgIT0gbnVsbCkge1xuICAgIHZhciBvcGFjaXR5ID0gZ2V0T3BhY2l0eShyLCBlbGUpO1xuICAgIGlmIChvcGFjaXR5ID09PSAwKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHZhciB0aGV0YSA9IGdldFJvdGF0aW9uKHIsIGVsZSk7XG4gICAgdmFyIHgxID0gYmIueDEsXG4gICAgICB5MSA9IGJiLnkxLFxuICAgICAgdyA9IGJiLncsXG4gICAgICBoID0gYmIuaDtcbiAgICB2YXIgeCwgeSwgc3gsIHN5LCBzbW9vdGg7XG4gICAgaWYgKHRoZXRhICE9PSAwKSB7XG4gICAgICB2YXIgcm90UHQgPSBlbGVUeHJDYWNoZS5nZXRSb3RhdGlvblBvaW50KGVsZSk7XG4gICAgICBzeCA9IHJvdFB0Lng7XG4gICAgICBzeSA9IHJvdFB0Lnk7XG4gICAgICBjb250ZXh0LnRyYW5zbGF0ZShzeCwgc3kpO1xuICAgICAgY29udGV4dC5yb3RhdGUodGhldGEpO1xuICAgICAgc21vb3RoID0gci5nZXRJbWdTbW9vdGhpbmcoY29udGV4dCk7XG4gICAgICBpZiAoIXNtb290aCkge1xuICAgICAgICByLnNldEltZ1Ntb290aGluZyhjb250ZXh0LCB0cnVlKTtcbiAgICAgIH1cbiAgICAgIHZhciBvZmYgPSBlbGVUeHJDYWNoZS5nZXRSb3RhdGlvbk9mZnNldChlbGUpO1xuICAgICAgeCA9IG9mZi54O1xuICAgICAgeSA9IG9mZi55O1xuICAgIH0gZWxzZSB7XG4gICAgICB4ID0geDE7XG4gICAgICB5ID0geTE7XG4gICAgfVxuICAgIHZhciBvbGRHbG9iYWxBbHBoYTtcbiAgICBpZiAob3BhY2l0eSAhPT0gMSkge1xuICAgICAgb2xkR2xvYmFsQWxwaGEgPSBjb250ZXh0Lmdsb2JhbEFscGhhO1xuICAgICAgY29udGV4dC5nbG9iYWxBbHBoYSA9IG9sZEdsb2JhbEFscGhhICogb3BhY2l0eTtcbiAgICB9XG4gICAgY29udGV4dC5kcmF3SW1hZ2UoZWxlQ2FjaGUudGV4dHVyZS5jYW52YXMsIGVsZUNhY2hlLngsIDAsIGVsZUNhY2hlLndpZHRoLCBlbGVDYWNoZS5oZWlnaHQsIHgsIHksIHcsIGgpO1xuICAgIGlmIChvcGFjaXR5ICE9PSAxKSB7XG4gICAgICBjb250ZXh0Lmdsb2JhbEFscGhhID0gb2xkR2xvYmFsQWxwaGE7XG4gICAgfVxuICAgIGlmICh0aGV0YSAhPT0gMCkge1xuICAgICAgY29udGV4dC5yb3RhdGUoLXRoZXRhKTtcbiAgICAgIGNvbnRleHQudHJhbnNsYXRlKC1zeCwgLXN5KTtcbiAgICAgIGlmICghc21vb3RoKSB7XG4gICAgICAgIHIuc2V0SW1nU21vb3RoaW5nKGNvbnRleHQsIGZhbHNlKTtcbiAgICAgIH1cbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgZWxlVHhyQ2FjaGUuZHJhd0VsZW1lbnQoY29udGV4dCwgZWxlKTsgLy8gZGlyZWN0IGRyYXcgZmFsbGJhY2tcbiAgfVxufTtcbnZhciBnZXRaZXJvUm90YXRpb24gPSBmdW5jdGlvbiBnZXRaZXJvUm90YXRpb24oKSB7XG4gIHJldHVybiAwO1xufTtcbnZhciBnZXRMYWJlbFJvdGF0aW9uID0gZnVuY3Rpb24gZ2V0TGFiZWxSb3RhdGlvbihyLCBlbGUpIHtcbiAgcmV0dXJuIHIuZ2V0VGV4dEFuZ2xlKGVsZSwgbnVsbCk7XG59O1xudmFyIGdldFNvdXJjZUxhYmVsUm90YXRpb24gPSBmdW5jdGlvbiBnZXRTb3VyY2VMYWJlbFJvdGF0aW9uKHIsIGVsZSkge1xuICByZXR1cm4gci5nZXRUZXh0QW5nbGUoZWxlLCAnc291cmNlJyk7XG59O1xudmFyIGdldFRhcmdldExhYmVsUm90YXRpb24gPSBmdW5jdGlvbiBnZXRUYXJnZXRMYWJlbFJvdGF0aW9uKHIsIGVsZSkge1xuICByZXR1cm4gci5nZXRUZXh0QW5nbGUoZWxlLCAndGFyZ2V0Jyk7XG59O1xudmFyIGdldE9wYWNpdHkgPSBmdW5jdGlvbiBnZXRPcGFjaXR5KHIsIGVsZSkge1xuICByZXR1cm4gZWxlLmVmZmVjdGl2ZU9wYWNpdHkoKTtcbn07XG52YXIgZ2V0VGV4dE9wYWNpdHkgPSBmdW5jdGlvbiBnZXRUZXh0T3BhY2l0eShlLCBlbGUpIHtcbiAgcmV0dXJuIGVsZS5wc3R5bGUoJ3RleHQtb3BhY2l0eScpLnBmVmFsdWUgKiBlbGUuZWZmZWN0aXZlT3BhY2l0eSgpO1xufTtcbkNScCRhLmRyYXdDYWNoZWRFbGVtZW50ID0gZnVuY3Rpb24gKGNvbnRleHQsIGVsZSwgcHhSYXRpbywgZXh0ZW50LCBsdmwsIHJlcXVlc3RIaWdoUXVhbGl0eSkge1xuICB2YXIgciA9IHRoaXM7XG4gIHZhciBfciRkYXRhID0gci5kYXRhLFxuICAgIGVsZVR4ckNhY2hlID0gX3IkZGF0YS5lbGVUeHJDYWNoZSxcbiAgICBsYmxUeHJDYWNoZSA9IF9yJGRhdGEubGJsVHhyQ2FjaGUsXG4gICAgc2xiVHhyQ2FjaGUgPSBfciRkYXRhLnNsYlR4ckNhY2hlLFxuICAgIHRsYlR4ckNhY2hlID0gX3IkZGF0YS50bGJUeHJDYWNoZTtcbiAgdmFyIGJiID0gZWxlLmJvdW5kaW5nQm94KCk7XG4gIHZhciByZWFzb24gPSByZXF1ZXN0SGlnaFF1YWxpdHkgPT09IHRydWUgPyBlbGVUeHJDYWNoZS5yZWFzb25zLmhpZ2hRdWFsaXR5IDogbnVsbDtcbiAgaWYgKGJiLncgPT09IDAgfHwgYmIuaCA9PT0gMCB8fCAhZWxlLnZpc2libGUoKSkge1xuICAgIHJldHVybjtcbiAgfVxuICBpZiAoIWV4dGVudCB8fCBib3VuZGluZ0JveGVzSW50ZXJzZWN0KGJiLCBleHRlbnQpKSB7XG4gICAgdmFyIGlzRWRnZSA9IGVsZS5pc0VkZ2UoKTtcbiAgICB2YXIgYmFkTGluZSA9IGVsZS5lbGVtZW50KCkuX3ByaXZhdGUucnNjcmF0Y2guYmFkTGluZTtcbiAgICByLmRyYXdFbGVtZW50VW5kZXJsYXkoY29udGV4dCwgZWxlKTtcbiAgICByLmRyYXdDYWNoZWRFbGVtZW50UG9ydGlvbihjb250ZXh0LCBlbGUsIGVsZVR4ckNhY2hlLCBweFJhdGlvLCBsdmwsIHJlYXNvbiwgZ2V0WmVyb1JvdGF0aW9uLCBnZXRPcGFjaXR5KTtcbiAgICBpZiAoIWlzRWRnZSB8fCAhYmFkTGluZSkge1xuICAgICAgci5kcmF3Q2FjaGVkRWxlbWVudFBvcnRpb24oY29udGV4dCwgZWxlLCBsYmxUeHJDYWNoZSwgcHhSYXRpbywgbHZsLCByZWFzb24sIGdldExhYmVsUm90YXRpb24sIGdldFRleHRPcGFjaXR5KTtcbiAgICB9XG4gICAgaWYgKGlzRWRnZSAmJiAhYmFkTGluZSkge1xuICAgICAgci5kcmF3Q2FjaGVkRWxlbWVudFBvcnRpb24oY29udGV4dCwgZWxlLCBzbGJUeHJDYWNoZSwgcHhSYXRpbywgbHZsLCByZWFzb24sIGdldFNvdXJjZUxhYmVsUm90YXRpb24sIGdldFRleHRPcGFjaXR5KTtcbiAgICAgIHIuZHJhd0NhY2hlZEVsZW1lbnRQb3J0aW9uKGNvbnRleHQsIGVsZSwgdGxiVHhyQ2FjaGUsIHB4UmF0aW8sIGx2bCwgcmVhc29uLCBnZXRUYXJnZXRMYWJlbFJvdGF0aW9uLCBnZXRUZXh0T3BhY2l0eSk7XG4gICAgfVxuICAgIHIuZHJhd0VsZW1lbnRPdmVybGF5KGNvbnRleHQsIGVsZSk7XG4gIH1cbn07XG5DUnAkYS5kcmF3RWxlbWVudHMgPSBmdW5jdGlvbiAoY29udGV4dCwgZWxlcykge1xuICB2YXIgciA9IHRoaXM7XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgZWxlcy5sZW5ndGg7IGkrKykge1xuICAgIHZhciBlbGUgPSBlbGVzW2ldO1xuICAgIHIuZHJhd0VsZW1lbnQoY29udGV4dCwgZWxlKTtcbiAgfVxufTtcbkNScCRhLmRyYXdDYWNoZWRFbGVtZW50cyA9IGZ1bmN0aW9uIChjb250ZXh0LCBlbGVzLCBweFJhdGlvLCBleHRlbnQpIHtcbiAgdmFyIHIgPSB0aGlzO1xuICBmb3IgKHZhciBpID0gMDsgaSA8IGVsZXMubGVuZ3RoOyBpKyspIHtcbiAgICB2YXIgZWxlID0gZWxlc1tpXTtcbiAgICByLmRyYXdDYWNoZWRFbGVtZW50KGNvbnRleHQsIGVsZSwgcHhSYXRpbywgZXh0ZW50KTtcbiAgfVxufTtcbkNScCRhLmRyYXdDYWNoZWROb2RlcyA9IGZ1bmN0aW9uIChjb250ZXh0LCBlbGVzLCBweFJhdGlvLCBleHRlbnQpIHtcbiAgdmFyIHIgPSB0aGlzO1xuICBmb3IgKHZhciBpID0gMDsgaSA8IGVsZXMubGVuZ3RoOyBpKyspIHtcbiAgICB2YXIgZWxlID0gZWxlc1tpXTtcbiAgICBpZiAoIWVsZS5pc05vZGUoKSkge1xuICAgICAgY29udGludWU7XG4gICAgfVxuICAgIHIuZHJhd0NhY2hlZEVsZW1lbnQoY29udGV4dCwgZWxlLCBweFJhdGlvLCBleHRlbnQpO1xuICB9XG59O1xuQ1JwJGEuZHJhd0xheWVyZWRFbGVtZW50cyA9IGZ1bmN0aW9uIChjb250ZXh0LCBlbGVzLCBweFJhdGlvLCBleHRlbnQpIHtcbiAgdmFyIHIgPSB0aGlzO1xuICB2YXIgbGF5ZXJzID0gci5kYXRhLmx5clR4ckNhY2hlLmdldExheWVycyhlbGVzLCBweFJhdGlvKTtcbiAgaWYgKGxheWVycykge1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGF5ZXJzLmxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIgbGF5ZXIgPSBsYXllcnNbaV07XG4gICAgICB2YXIgYmIgPSBsYXllci5iYjtcbiAgICAgIGlmIChiYi53ID09PSAwIHx8IGJiLmggPT09IDApIHtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG4gICAgICBjb250ZXh0LmRyYXdJbWFnZShsYXllci5jYW52YXMsIGJiLngxLCBiYi55MSwgYmIudywgYmIuaCk7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIC8vIGZhbGwgYmFjayBvbiBwbGFpbiBjYWNoaW5nIGlmIG5vIGxheWVyc1xuICAgIHIuZHJhd0NhY2hlZEVsZW1lbnRzKGNvbnRleHQsIGVsZXMsIHB4UmF0aW8sIGV4dGVudCk7XG4gIH1cbn07XG5cbnZhciBDUnAkOSA9IHt9O1xuQ1JwJDkuZHJhd0VkZ2UgPSBmdW5jdGlvbiAoY29udGV4dCwgZWRnZSwgc2hpZnRUb09yaWdpbldpdGhCYikge1xuICB2YXIgZHJhd0xhYmVsID0gYXJndW1lbnRzLmxlbmd0aCA+IDMgJiYgYXJndW1lbnRzWzNdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbM10gOiB0cnVlO1xuICB2YXIgc2hvdWxkRHJhd092ZXJsYXkgPSBhcmd1bWVudHMubGVuZ3RoID4gNCAmJiBhcmd1bWVudHNbNF0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1s0XSA6IHRydWU7XG4gIHZhciBzaG91bGREcmF3T3BhY2l0eSA9IGFyZ3VtZW50cy5sZW5ndGggPiA1ICYmIGFyZ3VtZW50c1s1XSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzVdIDogdHJ1ZTtcbiAgdmFyIHIgPSB0aGlzO1xuICB2YXIgcnMgPSBlZGdlLl9wcml2YXRlLnJzY3JhdGNoO1xuICBpZiAoc2hvdWxkRHJhd09wYWNpdHkgJiYgIWVkZ2UudmlzaWJsZSgpKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgLy8gaWYgYmV6aWVyIGN0cmwgcHRzIGNhbiBub3QgYmUgY2FsY3VsYXRlZCwgdGhlbiBkaWVcbiAgaWYgKHJzLmJhZExpbmUgfHwgcnMuYWxscHRzID09IG51bGwgfHwgaXNOYU4ocnMuYWxscHRzWzBdKSkge1xuICAgIC8vIGlzTmFOIGluIGNhc2UgZWRnZSBpcyBpbXBvc3NpYmxlIGFuZCBicm93c2VyIGJ1Z3MgKGUuZy4gc2FmYXJpKVxuICAgIHJldHVybjtcbiAgfVxuICB2YXIgYmI7XG4gIGlmIChzaGlmdFRvT3JpZ2luV2l0aEJiKSB7XG4gICAgYmIgPSBzaGlmdFRvT3JpZ2luV2l0aEJiO1xuICAgIGNvbnRleHQudHJhbnNsYXRlKC1iYi54MSwgLWJiLnkxKTtcbiAgfVxuICB2YXIgb3BhY2l0eSA9IHNob3VsZERyYXdPcGFjaXR5ID8gZWRnZS5wc3R5bGUoJ29wYWNpdHknKS52YWx1ZSA6IDE7XG4gIHZhciBsaW5lT3BhY2l0eSA9IHNob3VsZERyYXdPcGFjaXR5ID8gZWRnZS5wc3R5bGUoJ2xpbmUtb3BhY2l0eScpLnZhbHVlIDogMTtcbiAgdmFyIGN1cnZlU3R5bGUgPSBlZGdlLnBzdHlsZSgnY3VydmUtc3R5bGUnKS52YWx1ZTtcbiAgdmFyIGxpbmVTdHlsZSA9IGVkZ2UucHN0eWxlKCdsaW5lLXN0eWxlJykudmFsdWU7XG4gIHZhciBlZGdlV2lkdGggPSBlZGdlLnBzdHlsZSgnd2lkdGgnKS5wZlZhbHVlO1xuICB2YXIgbGluZUNhcCA9IGVkZ2UucHN0eWxlKCdsaW5lLWNhcCcpLnZhbHVlO1xuICB2YXIgbGluZU91dGxpbmVXaWR0aCA9IGVkZ2UucHN0eWxlKCdsaW5lLW91dGxpbmUtd2lkdGgnKS52YWx1ZTtcbiAgdmFyIGxpbmVPdXRsaW5lQ29sb3IgPSBlZGdlLnBzdHlsZSgnbGluZS1vdXRsaW5lLWNvbG9yJykudmFsdWU7XG4gIHZhciBlZmZlY3RpdmVMaW5lT3BhY2l0eSA9IG9wYWNpdHkgKiBsaW5lT3BhY2l0eTtcbiAgLy8gc2VwYXJhdGUgYXJyb3cgb3BhY2l0eSB3b3VsZCByZXF1aXJlIGFycm93LW9wYWNpdHkgcHJvcGVydHlcbiAgdmFyIGVmZmVjdGl2ZUFycm93T3BhY2l0eSA9IG9wYWNpdHkgKiBsaW5lT3BhY2l0eTtcbiAgdmFyIGRyYXdMaW5lID0gZnVuY3Rpb24gZHJhd0xpbmUoKSB7XG4gICAgdmFyIHN0cm9rZU9wYWNpdHkgPSBhcmd1bWVudHMubGVuZ3RoID4gMCAmJiBhcmd1bWVudHNbMF0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1swXSA6IGVmZmVjdGl2ZUxpbmVPcGFjaXR5O1xuICAgIGlmIChjdXJ2ZVN0eWxlID09PSAnc3RyYWlnaHQtdHJpYW5nbGUnKSB7XG4gICAgICByLmVsZVN0cm9rZVN0eWxlKGNvbnRleHQsIGVkZ2UsIHN0cm9rZU9wYWNpdHkpO1xuICAgICAgci5kcmF3RWRnZVRyaWFuZ2xlUGF0aChlZGdlLCBjb250ZXh0LCBycy5hbGxwdHMpO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb250ZXh0LmxpbmVXaWR0aCA9IGVkZ2VXaWR0aDtcbiAgICAgIGNvbnRleHQubGluZUNhcCA9IGxpbmVDYXA7XG4gICAgICByLmVsZVN0cm9rZVN0eWxlKGNvbnRleHQsIGVkZ2UsIHN0cm9rZU9wYWNpdHkpO1xuICAgICAgci5kcmF3RWRnZVBhdGgoZWRnZSwgY29udGV4dCwgcnMuYWxscHRzLCBsaW5lU3R5bGUpO1xuICAgICAgY29udGV4dC5saW5lQ2FwID0gJ2J1dHQnOyAvLyByZXNldCBmb3Igb3RoZXIgZHJhd2luZyBmdW5jdGlvbnNcbiAgICB9XG4gIH07XG4gIHZhciBkcmF3TGluZU91dGxpbmUgPSBmdW5jdGlvbiBkcmF3TGluZU91dGxpbmUoKSB7XG4gICAgdmFyIHN0cm9rZU9wYWNpdHkgPSBhcmd1bWVudHMubGVuZ3RoID4gMCAmJiBhcmd1bWVudHNbMF0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1swXSA6IGVmZmVjdGl2ZUxpbmVPcGFjaXR5O1xuICAgIGNvbnRleHQubGluZVdpZHRoID0gZWRnZVdpZHRoICsgbGluZU91dGxpbmVXaWR0aDtcbiAgICBjb250ZXh0LmxpbmVDYXAgPSBsaW5lQ2FwO1xuICAgIGlmIChsaW5lT3V0bGluZVdpZHRoID4gMCkge1xuICAgICAgci5jb2xvclN0cm9rZVN0eWxlKGNvbnRleHQsIGxpbmVPdXRsaW5lQ29sb3JbMF0sIGxpbmVPdXRsaW5lQ29sb3JbMV0sIGxpbmVPdXRsaW5lQ29sb3JbMl0sIHN0cm9rZU9wYWNpdHkpO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBkbyBub3QgZHJhdyBhbnkgbGluZU91dGxpbmVcbiAgICAgIGNvbnRleHQubGluZUNhcCA9ICdidXR0JzsgLy8gcmVzZXQgZm9yIG90aGVyIGRyYXdpbmcgZnVuY3Rpb25zXG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmIChjdXJ2ZVN0eWxlID09PSAnc3RyYWlnaHQtdHJpYW5nbGUnKSB7XG4gICAgICByLmRyYXdFZGdlVHJpYW5nbGVQYXRoKGVkZ2UsIGNvbnRleHQsIHJzLmFsbHB0cyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHIuZHJhd0VkZ2VQYXRoKGVkZ2UsIGNvbnRleHQsIHJzLmFsbHB0cywgbGluZVN0eWxlKTtcbiAgICAgIGNvbnRleHQubGluZUNhcCA9ICdidXR0JzsgLy8gcmVzZXQgZm9yIG90aGVyIGRyYXdpbmcgZnVuY3Rpb25zXG4gICAgfVxuICB9O1xuICB2YXIgZHJhd092ZXJsYXkgPSBmdW5jdGlvbiBkcmF3T3ZlcmxheSgpIHtcbiAgICBpZiAoIXNob3VsZERyYXdPdmVybGF5KSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHIuZHJhd0VkZ2VPdmVybGF5KGNvbnRleHQsIGVkZ2UpO1xuICB9O1xuICB2YXIgZHJhd1VuZGVybGF5ID0gZnVuY3Rpb24gZHJhd1VuZGVybGF5KCkge1xuICAgIGlmICghc2hvdWxkRHJhd092ZXJsYXkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgci5kcmF3RWRnZVVuZGVybGF5KGNvbnRleHQsIGVkZ2UpO1xuICB9O1xuICB2YXIgZHJhd0Fycm93cyA9IGZ1bmN0aW9uIGRyYXdBcnJvd3MoKSB7XG4gICAgdmFyIGFycm93T3BhY2l0eSA9IGFyZ3VtZW50cy5sZW5ndGggPiAwICYmIGFyZ3VtZW50c1swXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzBdIDogZWZmZWN0aXZlQXJyb3dPcGFjaXR5O1xuICAgIHIuZHJhd0Fycm93aGVhZHMoY29udGV4dCwgZWRnZSwgYXJyb3dPcGFjaXR5KTtcbiAgfTtcbiAgdmFyIGRyYXdUZXh0ID0gZnVuY3Rpb24gZHJhd1RleHQoKSB7XG4gICAgci5kcmF3RWxlbWVudFRleHQoY29udGV4dCwgZWRnZSwgbnVsbCwgZHJhd0xhYmVsKTtcbiAgfTtcbiAgY29udGV4dC5saW5lSm9pbiA9ICdyb3VuZCc7XG4gIHZhciBnaG9zdCA9IGVkZ2UucHN0eWxlKCdnaG9zdCcpLnZhbHVlID09PSAneWVzJztcbiAgaWYgKGdob3N0KSB7XG4gICAgdmFyIGd4ID0gZWRnZS5wc3R5bGUoJ2dob3N0LW9mZnNldC14JykucGZWYWx1ZTtcbiAgICB2YXIgZ3kgPSBlZGdlLnBzdHlsZSgnZ2hvc3Qtb2Zmc2V0LXknKS5wZlZhbHVlO1xuICAgIHZhciBnaG9zdE9wYWNpdHkgPSBlZGdlLnBzdHlsZSgnZ2hvc3Qtb3BhY2l0eScpLnZhbHVlO1xuICAgIHZhciBlZmZlY3RpdmVHaG9zdE9wYWNpdHkgPSBlZmZlY3RpdmVMaW5lT3BhY2l0eSAqIGdob3N0T3BhY2l0eTtcbiAgICBjb250ZXh0LnRyYW5zbGF0ZShneCwgZ3kpO1xuICAgIGRyYXdMaW5lKGVmZmVjdGl2ZUdob3N0T3BhY2l0eSk7XG4gICAgZHJhd0Fycm93cyhlZmZlY3RpdmVHaG9zdE9wYWNpdHkpO1xuICAgIGNvbnRleHQudHJhbnNsYXRlKC1neCwgLWd5KTtcbiAgfSBlbHNlIHtcbiAgICBkcmF3TGluZU91dGxpbmUoKTtcbiAgfVxuICBkcmF3VW5kZXJsYXkoKTtcbiAgZHJhd0xpbmUoKTtcbiAgZHJhd0Fycm93cygpO1xuICBkcmF3T3ZlcmxheSgpO1xuICBkcmF3VGV4dCgpO1xuICBpZiAoc2hpZnRUb09yaWdpbldpdGhCYikge1xuICAgIGNvbnRleHQudHJhbnNsYXRlKGJiLngxLCBiYi55MSk7XG4gIH1cbn07XG52YXIgZHJhd0VkZ2VPdmVybGF5VW5kZXJsYXkgPSBmdW5jdGlvbiBkcmF3RWRnZU92ZXJsYXlVbmRlcmxheShvdmVybGF5T3JVbmRlcmxheSkge1xuICBpZiAoIVsnb3ZlcmxheScsICd1bmRlcmxheSddLmluY2x1ZGVzKG92ZXJsYXlPclVuZGVybGF5KSkge1xuICAgIHRocm93IG5ldyBFcnJvcignSW52YWxpZCBzdGF0ZScpO1xuICB9XG4gIHJldHVybiBmdW5jdGlvbiAoY29udGV4dCwgZWRnZSkge1xuICAgIGlmICghZWRnZS52aXNpYmxlKCkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdmFyIG9wYWNpdHkgPSBlZGdlLnBzdHlsZShcIlwiLmNvbmNhdChvdmVybGF5T3JVbmRlcmxheSwgXCItb3BhY2l0eVwiKSkudmFsdWU7XG4gICAgaWYgKG9wYWNpdHkgPT09IDApIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdmFyIHIgPSB0aGlzO1xuICAgIHZhciB1c2VQYXRocyA9IHIudXNlUGF0aHMoKTtcbiAgICB2YXIgcnMgPSBlZGdlLl9wcml2YXRlLnJzY3JhdGNoO1xuICAgIHZhciBwYWRkaW5nID0gZWRnZS5wc3R5bGUoXCJcIi5jb25jYXQob3ZlcmxheU9yVW5kZXJsYXksIFwiLXBhZGRpbmdcIikpLnBmVmFsdWU7XG4gICAgdmFyIHdpZHRoID0gMiAqIHBhZGRpbmc7XG4gICAgdmFyIGNvbG9yID0gZWRnZS5wc3R5bGUoXCJcIi5jb25jYXQob3ZlcmxheU9yVW5kZXJsYXksIFwiLWNvbG9yXCIpKS52YWx1ZTtcbiAgICBjb250ZXh0LmxpbmVXaWR0aCA9IHdpZHRoO1xuICAgIGlmIChycy5lZGdlVHlwZSA9PT0gJ3NlbGYnICYmICF1c2VQYXRocykge1xuICAgICAgY29udGV4dC5saW5lQ2FwID0gJ2J1dHQnO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb250ZXh0LmxpbmVDYXAgPSAncm91bmQnO1xuICAgIH1cbiAgICByLmNvbG9yU3Ryb2tlU3R5bGUoY29udGV4dCwgY29sb3JbMF0sIGNvbG9yWzFdLCBjb2xvclsyXSwgb3BhY2l0eSk7XG4gICAgci5kcmF3RWRnZVBhdGgoZWRnZSwgY29udGV4dCwgcnMuYWxscHRzLCAnc29saWQnKTtcbiAgfTtcbn07XG5DUnAkOS5kcmF3RWRnZU92ZXJsYXkgPSBkcmF3RWRnZU92ZXJsYXlVbmRlcmxheSgnb3ZlcmxheScpO1xuQ1JwJDkuZHJhd0VkZ2VVbmRlcmxheSA9IGRyYXdFZGdlT3ZlcmxheVVuZGVybGF5KCd1bmRlcmxheScpO1xuQ1JwJDkuZHJhd0VkZ2VQYXRoID0gZnVuY3Rpb24gKGVkZ2UsIGNvbnRleHQsIHB0cywgdHlwZSkge1xuICB2YXIgcnMgPSBlZGdlLl9wcml2YXRlLnJzY3JhdGNoO1xuICB2YXIgY2FudmFzQ3h0ID0gY29udGV4dDtcbiAgdmFyIHBhdGg7XG4gIHZhciBwYXRoQ2FjaGVIaXQgPSBmYWxzZTtcbiAgdmFyIHVzZVBhdGhzID0gdGhpcy51c2VQYXRocygpO1xuICB2YXIgbGluZURhc2hQYXR0ZXJuID0gZWRnZS5wc3R5bGUoJ2xpbmUtZGFzaC1wYXR0ZXJuJykucGZWYWx1ZTtcbiAgdmFyIGxpbmVEYXNoT2Zmc2V0ID0gZWRnZS5wc3R5bGUoJ2xpbmUtZGFzaC1vZmZzZXQnKS5wZlZhbHVlO1xuICBpZiAodXNlUGF0aHMpIHtcbiAgICB2YXIgcGF0aENhY2hlS2V5ID0gcHRzLmpvaW4oJyQnKTtcbiAgICB2YXIga2V5TWF0Y2hlcyA9IHJzLnBhdGhDYWNoZUtleSAmJiBycy5wYXRoQ2FjaGVLZXkgPT09IHBhdGhDYWNoZUtleTtcbiAgICBpZiAoa2V5TWF0Y2hlcykge1xuICAgICAgcGF0aCA9IGNvbnRleHQgPSBycy5wYXRoQ2FjaGU7XG4gICAgICBwYXRoQ2FjaGVIaXQgPSB0cnVlO1xuICAgIH0gZWxzZSB7XG4gICAgICBwYXRoID0gY29udGV4dCA9IG5ldyBQYXRoMkQoKTtcbiAgICAgIHJzLnBhdGhDYWNoZUtleSA9IHBhdGhDYWNoZUtleTtcbiAgICAgIHJzLnBhdGhDYWNoZSA9IHBhdGg7XG4gICAgfVxuICB9XG4gIGlmIChjYW52YXNDeHQuc2V0TGluZURhc2gpIHtcbiAgICAvLyBmb3IgdmVyeSBvdXRvZmRhdGUgYnJvd3NlcnNcbiAgICBzd2l0Y2ggKHR5cGUpIHtcbiAgICAgIGNhc2UgJ2RvdHRlZCc6XG4gICAgICAgIGNhbnZhc0N4dC5zZXRMaW5lRGFzaChbMSwgMV0pO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ2Rhc2hlZCc6XG4gICAgICAgIGNhbnZhc0N4dC5zZXRMaW5lRGFzaChsaW5lRGFzaFBhdHRlcm4pO1xuICAgICAgICBjYW52YXNDeHQubGluZURhc2hPZmZzZXQgPSBsaW5lRGFzaE9mZnNldDtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICdzb2xpZCc6XG4gICAgICAgIGNhbnZhc0N4dC5zZXRMaW5lRGFzaChbXSk7XG4gICAgICAgIGJyZWFrO1xuICAgIH1cbiAgfVxuICBpZiAoIXBhdGhDYWNoZUhpdCAmJiAhcnMuYmFkTGluZSkge1xuICAgIGlmIChjb250ZXh0LmJlZ2luUGF0aCkge1xuICAgICAgY29udGV4dC5iZWdpblBhdGgoKTtcbiAgICB9XG4gICAgY29udGV4dC5tb3ZlVG8ocHRzWzBdLCBwdHNbMV0pO1xuICAgIHN3aXRjaCAocnMuZWRnZVR5cGUpIHtcbiAgICAgIGNhc2UgJ2Jlemllcic6XG4gICAgICBjYXNlICdzZWxmJzpcbiAgICAgIGNhc2UgJ2NvbXBvdW5kJzpcbiAgICAgIGNhc2UgJ211bHRpYmV6aWVyJzpcbiAgICAgICAgZm9yICh2YXIgaSA9IDI7IGkgKyAzIDwgcHRzLmxlbmd0aDsgaSArPSA0KSB7XG4gICAgICAgICAgY29udGV4dC5xdWFkcmF0aWNDdXJ2ZVRvKHB0c1tpXSwgcHRzW2kgKyAxXSwgcHRzW2kgKyAyXSwgcHRzW2kgKyAzXSk7XG4gICAgICAgIH1cbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICdzdHJhaWdodCc6XG4gICAgICBjYXNlICdoYXlzdGFjayc6XG4gICAgICAgIGZvciAodmFyIF9pID0gMjsgX2kgKyAxIDwgcHRzLmxlbmd0aDsgX2kgKz0gMikge1xuICAgICAgICAgIGNvbnRleHQubGluZVRvKHB0c1tfaV0sIHB0c1tfaSArIDFdKTtcbiAgICAgICAgfVxuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ3NlZ21lbnRzJzpcbiAgICAgICAgaWYgKHJzLmlzUm91bmQpIHtcbiAgICAgICAgICB2YXIgX2l0ZXJhdG9yID0gX2NyZWF0ZUZvck9mSXRlcmF0b3JIZWxwZXIocnMucm91bmRDb3JuZXJzKSxcbiAgICAgICAgICAgIF9zdGVwO1xuICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICBmb3IgKF9pdGVyYXRvci5zKCk7ICEoX3N0ZXAgPSBfaXRlcmF0b3IubigpKS5kb25lOykge1xuICAgICAgICAgICAgICB2YXIgY29ybmVyID0gX3N0ZXAudmFsdWU7XG4gICAgICAgICAgICAgIGRyYXdQcmVwYXJlZFJvdW5kQ29ybmVyKGNvbnRleHQsIGNvcm5lcik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgICBfaXRlcmF0b3IuZShlcnIpO1xuICAgICAgICAgIH0gZmluYWxseSB7XG4gICAgICAgICAgICBfaXRlcmF0b3IuZigpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBjb250ZXh0LmxpbmVUbyhwdHNbcHRzLmxlbmd0aCAtIDJdLCBwdHNbcHRzLmxlbmd0aCAtIDFdKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBmb3IgKHZhciBfaTIgPSAyOyBfaTIgKyAxIDwgcHRzLmxlbmd0aDsgX2kyICs9IDIpIHtcbiAgICAgICAgICAgIGNvbnRleHQubGluZVRvKHB0c1tfaTJdLCBwdHNbX2kyICsgMV0pO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBicmVhaztcbiAgICB9XG4gIH1cbiAgY29udGV4dCA9IGNhbnZhc0N4dDtcbiAgaWYgKHVzZVBhdGhzKSB7XG4gICAgY29udGV4dC5zdHJva2UocGF0aCk7XG4gIH0gZWxzZSB7XG4gICAgY29udGV4dC5zdHJva2UoKTtcbiAgfVxuXG4gIC8vIHJlc2V0IGFueSBsaW5lIGRhc2hlc1xuICBpZiAoY29udGV4dC5zZXRMaW5lRGFzaCkge1xuICAgIC8vIGZvciB2ZXJ5IG91dG9mZGF0ZSBicm93c2Vyc1xuICAgIGNvbnRleHQuc2V0TGluZURhc2goW10pO1xuICB9XG59O1xuQ1JwJDkuZHJhd0VkZ2VUcmlhbmdsZVBhdGggPSBmdW5jdGlvbiAoZWRnZSwgY29udGV4dCwgcHRzKSB7XG4gIC8vIHVzZSBsaW5lIHN0cm9rZSBzdHlsZSBmb3IgdHJpYW5nbGUgZmlsbCBzdHlsZVxuICBjb250ZXh0LmZpbGxTdHlsZSA9IGNvbnRleHQuc3Ryb2tlU3R5bGU7XG4gIHZhciBlZGdlV2lkdGggPSBlZGdlLnBzdHlsZSgnd2lkdGgnKS5wZlZhbHVlO1xuICBmb3IgKHZhciBpID0gMDsgaSArIDEgPCBwdHMubGVuZ3RoOyBpICs9IDIpIHtcbiAgICB2YXIgdmVjdG9yID0gW3B0c1tpICsgMl0gLSBwdHNbaV0sIHB0c1tpICsgM10gLSBwdHNbaSArIDFdXTtcbiAgICB2YXIgbGVuZ3RoID0gTWF0aC5zcXJ0KHZlY3RvclswXSAqIHZlY3RvclswXSArIHZlY3RvclsxXSAqIHZlY3RvclsxXSk7XG4gICAgdmFyIG5vcm1hbCA9IFt2ZWN0b3JbMV0gLyBsZW5ndGgsIC12ZWN0b3JbMF0gLyBsZW5ndGhdO1xuICAgIHZhciB0cmlhbmdsZUhlYWQgPSBbbm9ybWFsWzBdICogZWRnZVdpZHRoIC8gMiwgbm9ybWFsWzFdICogZWRnZVdpZHRoIC8gMl07XG4gICAgY29udGV4dC5iZWdpblBhdGgoKTtcbiAgICBjb250ZXh0Lm1vdmVUbyhwdHNbaV0gLSB0cmlhbmdsZUhlYWRbMF0sIHB0c1tpICsgMV0gLSB0cmlhbmdsZUhlYWRbMV0pO1xuICAgIGNvbnRleHQubGluZVRvKHB0c1tpXSArIHRyaWFuZ2xlSGVhZFswXSwgcHRzW2kgKyAxXSArIHRyaWFuZ2xlSGVhZFsxXSk7XG4gICAgY29udGV4dC5saW5lVG8ocHRzW2kgKyAyXSwgcHRzW2kgKyAzXSk7XG4gICAgY29udGV4dC5jbG9zZVBhdGgoKTtcbiAgICBjb250ZXh0LmZpbGwoKTtcbiAgfVxufTtcbkNScCQ5LmRyYXdBcnJvd2hlYWRzID0gZnVuY3Rpb24gKGNvbnRleHQsIGVkZ2UsIG9wYWNpdHkpIHtcbiAgdmFyIHJzID0gZWRnZS5fcHJpdmF0ZS5yc2NyYXRjaDtcbiAgdmFyIGlzSGF5c3RhY2sgPSBycy5lZGdlVHlwZSA9PT0gJ2hheXN0YWNrJztcbiAgaWYgKCFpc0hheXN0YWNrKSB7XG4gICAgdGhpcy5kcmF3QXJyb3doZWFkKGNvbnRleHQsIGVkZ2UsICdzb3VyY2UnLCBycy5hcnJvd1N0YXJ0WCwgcnMuYXJyb3dTdGFydFksIHJzLnNyY0Fycm93QW5nbGUsIG9wYWNpdHkpO1xuICB9XG4gIHRoaXMuZHJhd0Fycm93aGVhZChjb250ZXh0LCBlZGdlLCAnbWlkLXRhcmdldCcsIHJzLm1pZFgsIHJzLm1pZFksIHJzLm1pZHRndEFycm93QW5nbGUsIG9wYWNpdHkpO1xuICB0aGlzLmRyYXdBcnJvd2hlYWQoY29udGV4dCwgZWRnZSwgJ21pZC1zb3VyY2UnLCBycy5taWRYLCBycy5taWRZLCBycy5taWRzcmNBcnJvd0FuZ2xlLCBvcGFjaXR5KTtcbiAgaWYgKCFpc0hheXN0YWNrKSB7XG4gICAgdGhpcy5kcmF3QXJyb3doZWFkKGNvbnRleHQsIGVkZ2UsICd0YXJnZXQnLCBycy5hcnJvd0VuZFgsIHJzLmFycm93RW5kWSwgcnMudGd0QXJyb3dBbmdsZSwgb3BhY2l0eSk7XG4gIH1cbn07XG5DUnAkOS5kcmF3QXJyb3doZWFkID0gZnVuY3Rpb24gKGNvbnRleHQsIGVkZ2UsIHByZWZpeCwgeCwgeSwgYW5nbGUsIG9wYWNpdHkpIHtcbiAgaWYgKGlzTmFOKHgpIHx8IHggPT0gbnVsbCB8fCBpc05hTih5KSB8fCB5ID09IG51bGwgfHwgaXNOYU4oYW5nbGUpIHx8IGFuZ2xlID09IG51bGwpIHtcbiAgICByZXR1cm47XG4gIH1cbiAgdmFyIHNlbGYgPSB0aGlzO1xuICB2YXIgYXJyb3dTaGFwZSA9IGVkZ2UucHN0eWxlKHByZWZpeCArICctYXJyb3ctc2hhcGUnKS52YWx1ZTtcbiAgaWYgKGFycm93U2hhcGUgPT09ICdub25lJykge1xuICAgIHJldHVybjtcbiAgfVxuICB2YXIgYXJyb3dDbGVhckZpbGwgPSBlZGdlLnBzdHlsZShwcmVmaXggKyAnLWFycm93LWZpbGwnKS52YWx1ZSA9PT0gJ2hvbGxvdycgPyAnYm90aCcgOiAnZmlsbGVkJztcbiAgdmFyIGFycm93RmlsbCA9IGVkZ2UucHN0eWxlKHByZWZpeCArICctYXJyb3ctZmlsbCcpLnZhbHVlO1xuICB2YXIgZWRnZVdpZHRoID0gZWRnZS5wc3R5bGUoJ3dpZHRoJykucGZWYWx1ZTtcbiAgdmFyIHBBcnJvd1dpZHRoID0gZWRnZS5wc3R5bGUocHJlZml4ICsgJy1hcnJvdy13aWR0aCcpO1xuICB2YXIgYXJyb3dXaWR0aCA9IHBBcnJvd1dpZHRoLnZhbHVlID09PSAnbWF0Y2gtbGluZScgPyBlZGdlV2lkdGggOiBwQXJyb3dXaWR0aC5wZlZhbHVlO1xuICBpZiAocEFycm93V2lkdGgudW5pdHMgPT09ICclJykgYXJyb3dXaWR0aCAqPSBlZGdlV2lkdGg7XG4gIHZhciBlZGdlT3BhY2l0eSA9IGVkZ2UucHN0eWxlKCdvcGFjaXR5JykudmFsdWU7XG4gIGlmIChvcGFjaXR5ID09PSB1bmRlZmluZWQpIHtcbiAgICBvcGFjaXR5ID0gZWRnZU9wYWNpdHk7XG4gIH1cbiAgdmFyIGdjbyA9IGNvbnRleHQuZ2xvYmFsQ29tcG9zaXRlT3BlcmF0aW9uO1xuICBpZiAob3BhY2l0eSAhPT0gMSB8fCBhcnJvd0ZpbGwgPT09ICdob2xsb3cnKSB7XG4gICAgLy8gdGhlbiBleHRyYSBjbGVhciBpcyBuZWVkZWRcbiAgICBjb250ZXh0Lmdsb2JhbENvbXBvc2l0ZU9wZXJhdGlvbiA9ICdkZXN0aW5hdGlvbi1vdXQnO1xuICAgIHNlbGYuY29sb3JGaWxsU3R5bGUoY29udGV4dCwgMjU1LCAyNTUsIDI1NSwgMSk7XG4gICAgc2VsZi5jb2xvclN0cm9rZVN0eWxlKGNvbnRleHQsIDI1NSwgMjU1LCAyNTUsIDEpO1xuICAgIHNlbGYuZHJhd0Fycm93U2hhcGUoZWRnZSwgY29udGV4dCwgYXJyb3dDbGVhckZpbGwsIGVkZ2VXaWR0aCwgYXJyb3dTaGFwZSwgYXJyb3dXaWR0aCwgeCwgeSwgYW5nbGUpO1xuICAgIGNvbnRleHQuZ2xvYmFsQ29tcG9zaXRlT3BlcmF0aW9uID0gZ2NvO1xuICB9IC8vIG90aGVyd2lzZSwgdGhlIG9wYXF1ZSBhcnJvdyBjbGVhcnMgaXQgZm9yIGZyZWUgOilcblxuICB2YXIgY29sb3IgPSBlZGdlLnBzdHlsZShwcmVmaXggKyAnLWFycm93LWNvbG9yJykudmFsdWU7XG4gIHNlbGYuY29sb3JGaWxsU3R5bGUoY29udGV4dCwgY29sb3JbMF0sIGNvbG9yWzFdLCBjb2xvclsyXSwgb3BhY2l0eSk7XG4gIHNlbGYuY29sb3JTdHJva2VTdHlsZShjb250ZXh0LCBjb2xvclswXSwgY29sb3JbMV0sIGNvbG9yWzJdLCBvcGFjaXR5KTtcbiAgc2VsZi5kcmF3QXJyb3dTaGFwZShlZGdlLCBjb250ZXh0LCBhcnJvd0ZpbGwsIGVkZ2VXaWR0aCwgYXJyb3dTaGFwZSwgYXJyb3dXaWR0aCwgeCwgeSwgYW5nbGUpO1xufTtcbkNScCQ5LmRyYXdBcnJvd1NoYXBlID0gZnVuY3Rpb24gKGVkZ2UsIGNvbnRleHQsIGZpbGwsIGVkZ2VXaWR0aCwgc2hhcGUsIHNoYXBlV2lkdGgsIHgsIHksIGFuZ2xlKSB7XG4gIHZhciByID0gdGhpcztcbiAgdmFyIHVzZVBhdGhzID0gdGhpcy51c2VQYXRocygpICYmIHNoYXBlICE9PSAndHJpYW5nbGUtY3Jvc3MnO1xuICB2YXIgcGF0aENhY2hlSGl0ID0gZmFsc2U7XG4gIHZhciBwYXRoO1xuICB2YXIgY2FudmFzQ29udGV4dCA9IGNvbnRleHQ7XG4gIHZhciB0cmFuc2xhdGlvbiA9IHtcbiAgICB4OiB4LFxuICAgIHk6IHlcbiAgfTtcbiAgdmFyIHNjYWxlID0gZWRnZS5wc3R5bGUoJ2Fycm93LXNjYWxlJykudmFsdWU7XG4gIHZhciBzaXplID0gdGhpcy5nZXRBcnJvd1dpZHRoKGVkZ2VXaWR0aCwgc2NhbGUpO1xuICB2YXIgc2hhcGVJbXBsID0gci5hcnJvd1NoYXBlc1tzaGFwZV07XG4gIGlmICh1c2VQYXRocykge1xuICAgIHZhciBjYWNoZSA9IHIuYXJyb3dQYXRoQ2FjaGUgPSByLmFycm93UGF0aENhY2hlIHx8IFtdO1xuICAgIHZhciBrZXkgPSBoYXNoU3RyaW5nKHNoYXBlKTtcbiAgICB2YXIgY2FjaGVkUGF0aCA9IGNhY2hlW2tleV07XG4gICAgaWYgKGNhY2hlZFBhdGggIT0gbnVsbCkge1xuICAgICAgcGF0aCA9IGNvbnRleHQgPSBjYWNoZWRQYXRoO1xuICAgICAgcGF0aENhY2hlSGl0ID0gdHJ1ZTtcbiAgICB9IGVsc2Uge1xuICAgICAgcGF0aCA9IGNvbnRleHQgPSBuZXcgUGF0aDJEKCk7XG4gICAgICBjYWNoZVtrZXldID0gcGF0aDtcbiAgICB9XG4gIH1cbiAgaWYgKCFwYXRoQ2FjaGVIaXQpIHtcbiAgICBpZiAoY29udGV4dC5iZWdpblBhdGgpIHtcbiAgICAgIGNvbnRleHQuYmVnaW5QYXRoKCk7XG4gICAgfVxuICAgIGlmICh1c2VQYXRocykge1xuICAgICAgLy8gc3RvcmUgaW4gdGhlIHBhdGggY2FjaGUgd2l0aCB2YWx1ZXMgZWFzaWx5IG1hbmlwdWxhdGVkIGxhdGVyXG4gICAgICBzaGFwZUltcGwuZHJhdyhjb250ZXh0LCAxLCAwLCB7XG4gICAgICAgIHg6IDAsXG4gICAgICAgIHk6IDBcbiAgICAgIH0sIDEpO1xuICAgIH0gZWxzZSB7XG4gICAgICBzaGFwZUltcGwuZHJhdyhjb250ZXh0LCBzaXplLCBhbmdsZSwgdHJhbnNsYXRpb24sIGVkZ2VXaWR0aCk7XG4gICAgfVxuICAgIGlmIChjb250ZXh0LmNsb3NlUGF0aCkge1xuICAgICAgY29udGV4dC5jbG9zZVBhdGgoKTtcbiAgICB9XG4gIH1cbiAgY29udGV4dCA9IGNhbnZhc0NvbnRleHQ7XG4gIGlmICh1c2VQYXRocykge1xuICAgIC8vIHNldCB0cmFuc2Zvcm0gdG8gYXJyb3cgcG9zaXRpb24vb3JpZW50YXRpb25cbiAgICBjb250ZXh0LnRyYW5zbGF0ZSh4LCB5KTtcbiAgICBjb250ZXh0LnJvdGF0ZShhbmdsZSk7XG4gICAgY29udGV4dC5zY2FsZShzaXplLCBzaXplKTtcbiAgfVxuICBpZiAoZmlsbCA9PT0gJ2ZpbGxlZCcgfHwgZmlsbCA9PT0gJ2JvdGgnKSB7XG4gICAgaWYgKHVzZVBhdGhzKSB7XG4gICAgICBjb250ZXh0LmZpbGwocGF0aCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnRleHQuZmlsbCgpO1xuICAgIH1cbiAgfVxuICBpZiAoZmlsbCA9PT0gJ2hvbGxvdycgfHwgZmlsbCA9PT0gJ2JvdGgnKSB7XG4gICAgY29udGV4dC5saW5lV2lkdGggPSBzaGFwZVdpZHRoIC8gKHVzZVBhdGhzID8gc2l6ZSA6IDEpO1xuICAgIGNvbnRleHQubGluZUpvaW4gPSAnbWl0ZXInO1xuICAgIGlmICh1c2VQYXRocykge1xuICAgICAgY29udGV4dC5zdHJva2UocGF0aCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnRleHQuc3Ryb2tlKCk7XG4gICAgfVxuICB9XG4gIGlmICh1c2VQYXRocykge1xuICAgIC8vIHJlc2V0IHRyYW5zZm9ybSBieSBhcHBseWluZyBpbnZlcnNlXG4gICAgY29udGV4dC5zY2FsZSgxIC8gc2l6ZSwgMSAvIHNpemUpO1xuICAgIGNvbnRleHQucm90YXRlKC1hbmdsZSk7XG4gICAgY29udGV4dC50cmFuc2xhdGUoLXgsIC15KTtcbiAgfVxufTtcblxudmFyIENScCQ4ID0ge307XG5DUnAkOC5zYWZlRHJhd0ltYWdlID0gZnVuY3Rpb24gKGNvbnRleHQsIGltZywgaXgsIGl5LCBpdywgaWgsIHgsIHksIHcsIGgpIHtcbiAgLy8gZGV0ZWN0IHByb2JsZW1hdGljIGNhc2VzIGZvciBvbGQgYnJvd3NlcnMgd2l0aCBiYWQgaW1hZ2VzIChjaGVhcGVyIHRoYW4gdHJ5LWNhdGNoKVxuICBpZiAoaXcgPD0gMCB8fCBpaCA8PSAwIHx8IHcgPD0gMCB8fCBoIDw9IDApIHtcbiAgICByZXR1cm47XG4gIH1cbiAgdHJ5IHtcbiAgICBjb250ZXh0LmRyYXdJbWFnZShpbWcsIGl4LCBpeSwgaXcsIGloLCB4LCB5LCB3LCBoKTtcbiAgfSBjYXRjaCAoZSkge1xuICAgIHdhcm4oZSk7XG4gIH1cbn07XG5DUnAkOC5kcmF3SW5zY3JpYmVkSW1hZ2UgPSBmdW5jdGlvbiAoY29udGV4dCwgaW1nLCBub2RlLCBpbmRleCwgbm9kZU9wYWNpdHkpIHtcbiAgdmFyIHIgPSB0aGlzO1xuICB2YXIgcG9zID0gbm9kZS5wb3NpdGlvbigpO1xuICB2YXIgbm9kZVggPSBwb3MueDtcbiAgdmFyIG5vZGVZID0gcG9zLnk7XG4gIHZhciBzdHlsZU9iaiA9IG5vZGUuY3koKS5zdHlsZSgpO1xuICB2YXIgZ2V0SW5kZXhlZFN0eWxlID0gc3R5bGVPYmouZ2V0SW5kZXhlZFN0eWxlLmJpbmQoc3R5bGVPYmopO1xuICB2YXIgZml0ID0gZ2V0SW5kZXhlZFN0eWxlKG5vZGUsICdiYWNrZ3JvdW5kLWZpdCcsICd2YWx1ZScsIGluZGV4KTtcbiAgdmFyIHJlcGVhdCA9IGdldEluZGV4ZWRTdHlsZShub2RlLCAnYmFja2dyb3VuZC1yZXBlYXQnLCAndmFsdWUnLCBpbmRleCk7XG4gIHZhciBub2RlVyA9IG5vZGUud2lkdGgoKTtcbiAgdmFyIG5vZGVIID0gbm9kZS5oZWlnaHQoKTtcbiAgdmFyIHBhZGRpbmdYMiA9IG5vZGUucGFkZGluZygpICogMjtcbiAgdmFyIG5vZGVUVyA9IG5vZGVXICsgKGdldEluZGV4ZWRTdHlsZShub2RlLCAnYmFja2dyb3VuZC13aWR0aC1yZWxhdGl2ZS10bycsICd2YWx1ZScsIGluZGV4KSA9PT0gJ2lubmVyJyA/IDAgOiBwYWRkaW5nWDIpO1xuICB2YXIgbm9kZVRIID0gbm9kZUggKyAoZ2V0SW5kZXhlZFN0eWxlKG5vZGUsICdiYWNrZ3JvdW5kLWhlaWdodC1yZWxhdGl2ZS10bycsICd2YWx1ZScsIGluZGV4KSA9PT0gJ2lubmVyJyA/IDAgOiBwYWRkaW5nWDIpO1xuICB2YXIgcnMgPSBub2RlLl9wcml2YXRlLnJzY3JhdGNoO1xuICB2YXIgY2xpcCA9IGdldEluZGV4ZWRTdHlsZShub2RlLCAnYmFja2dyb3VuZC1jbGlwJywgJ3ZhbHVlJywgaW5kZXgpO1xuICB2YXIgc2hvdWxkQ2xpcCA9IGNsaXAgPT09ICdub2RlJztcbiAgdmFyIGltZ09wYWNpdHkgPSBnZXRJbmRleGVkU3R5bGUobm9kZSwgJ2JhY2tncm91bmQtaW1hZ2Utb3BhY2l0eScsICd2YWx1ZScsIGluZGV4KSAqIG5vZGVPcGFjaXR5O1xuICB2YXIgc21vb3RoID0gZ2V0SW5kZXhlZFN0eWxlKG5vZGUsICdiYWNrZ3JvdW5kLWltYWdlLXNtb290aGluZycsICd2YWx1ZScsIGluZGV4KTtcbiAgdmFyIGNvcm5lclJhZGl1cyA9IG5vZGUucHN0eWxlKCdjb3JuZXItcmFkaXVzJykudmFsdWU7XG4gIGlmIChjb3JuZXJSYWRpdXMgIT09ICdhdXRvJykgY29ybmVyUmFkaXVzID0gbm9kZS5wc3R5bGUoJ2Nvcm5lci1yYWRpdXMnKS5wZlZhbHVlO1xuICB2YXIgaW1nVyA9IGltZy53aWR0aCB8fCBpbWcuY2FjaGVkVztcbiAgdmFyIGltZ0ggPSBpbWcuaGVpZ2h0IHx8IGltZy5jYWNoZWRIO1xuXG4gIC8vIHdvcmthcm91bmQgZm9yIGJyb2tlbiBicm93c2VycyBsaWtlIGllXG4gIGlmIChudWxsID09IGltZ1cgfHwgbnVsbCA9PSBpbWdIKSB7XG4gICAgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChpbWcpOyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLXVuZGVmXG5cbiAgICBpbWdXID0gaW1nLmNhY2hlZFcgPSBpbWcud2lkdGggfHwgaW1nLm9mZnNldFdpZHRoO1xuICAgIGltZ0ggPSBpbWcuY2FjaGVkSCA9IGltZy5oZWlnaHQgfHwgaW1nLm9mZnNldEhlaWdodDtcbiAgICBkb2N1bWVudC5ib2R5LnJlbW92ZUNoaWxkKGltZyk7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tdW5kZWZcbiAgfVxuICB2YXIgdyA9IGltZ1c7XG4gIHZhciBoID0gaW1nSDtcbiAgaWYgKGdldEluZGV4ZWRTdHlsZShub2RlLCAnYmFja2dyb3VuZC13aWR0aCcsICd2YWx1ZScsIGluZGV4KSAhPT0gJ2F1dG8nKSB7XG4gICAgaWYgKGdldEluZGV4ZWRTdHlsZShub2RlLCAnYmFja2dyb3VuZC13aWR0aCcsICd1bml0cycsIGluZGV4KSA9PT0gJyUnKSB7XG4gICAgICB3ID0gZ2V0SW5kZXhlZFN0eWxlKG5vZGUsICdiYWNrZ3JvdW5kLXdpZHRoJywgJ3BmVmFsdWUnLCBpbmRleCkgKiBub2RlVFc7XG4gICAgfSBlbHNlIHtcbiAgICAgIHcgPSBnZXRJbmRleGVkU3R5bGUobm9kZSwgJ2JhY2tncm91bmQtd2lkdGgnLCAncGZWYWx1ZScsIGluZGV4KTtcbiAgICB9XG4gIH1cbiAgaWYgKGdldEluZGV4ZWRTdHlsZShub2RlLCAnYmFja2dyb3VuZC1oZWlnaHQnLCAndmFsdWUnLCBpbmRleCkgIT09ICdhdXRvJykge1xuICAgIGlmIChnZXRJbmRleGVkU3R5bGUobm9kZSwgJ2JhY2tncm91bmQtaGVpZ2h0JywgJ3VuaXRzJywgaW5kZXgpID09PSAnJScpIHtcbiAgICAgIGggPSBnZXRJbmRleGVkU3R5bGUobm9kZSwgJ2JhY2tncm91bmQtaGVpZ2h0JywgJ3BmVmFsdWUnLCBpbmRleCkgKiBub2RlVEg7XG4gICAgfSBlbHNlIHtcbiAgICAgIGggPSBnZXRJbmRleGVkU3R5bGUobm9kZSwgJ2JhY2tncm91bmQtaGVpZ2h0JywgJ3BmVmFsdWUnLCBpbmRleCk7XG4gICAgfVxuICB9XG4gIGlmICh3ID09PSAwIHx8IGggPT09IDApIHtcbiAgICByZXR1cm47IC8vIG5vIHBvaW50IGluIGRyYXdpbmcgZW1wdHkgaW1hZ2UgKGFuZCBjaHJvbWUgaXMgYnJva2VuIGluIHRoaXMgY2FzZSlcbiAgfVxuICBpZiAoZml0ID09PSAnY29udGFpbicpIHtcbiAgICB2YXIgc2NhbGUgPSBNYXRoLm1pbihub2RlVFcgLyB3LCBub2RlVEggLyBoKTtcbiAgICB3ICo9IHNjYWxlO1xuICAgIGggKj0gc2NhbGU7XG4gIH0gZWxzZSBpZiAoZml0ID09PSAnY292ZXInKSB7XG4gICAgdmFyIHNjYWxlID0gTWF0aC5tYXgobm9kZVRXIC8gdywgbm9kZVRIIC8gaCk7XG4gICAgdyAqPSBzY2FsZTtcbiAgICBoICo9IHNjYWxlO1xuICB9XG4gIHZhciB4ID0gbm9kZVggLSBub2RlVFcgLyAyOyAvLyBsZWZ0XG4gIHZhciBwb3NYVW5pdHMgPSBnZXRJbmRleGVkU3R5bGUobm9kZSwgJ2JhY2tncm91bmQtcG9zaXRpb24teCcsICd1bml0cycsIGluZGV4KTtcbiAgdmFyIHBvc1hQZlZhbCA9IGdldEluZGV4ZWRTdHlsZShub2RlLCAnYmFja2dyb3VuZC1wb3NpdGlvbi14JywgJ3BmVmFsdWUnLCBpbmRleCk7XG4gIGlmIChwb3NYVW5pdHMgPT09ICclJykge1xuICAgIHggKz0gKG5vZGVUVyAtIHcpICogcG9zWFBmVmFsO1xuICB9IGVsc2Uge1xuICAgIHggKz0gcG9zWFBmVmFsO1xuICB9XG4gIHZhciBvZmZYVW5pdHMgPSBnZXRJbmRleGVkU3R5bGUobm9kZSwgJ2JhY2tncm91bmQtb2Zmc2V0LXgnLCAndW5pdHMnLCBpbmRleCk7XG4gIHZhciBvZmZYUGZWYWwgPSBnZXRJbmRleGVkU3R5bGUobm9kZSwgJ2JhY2tncm91bmQtb2Zmc2V0LXgnLCAncGZWYWx1ZScsIGluZGV4KTtcbiAgaWYgKG9mZlhVbml0cyA9PT0gJyUnKSB7XG4gICAgeCArPSAobm9kZVRXIC0gdykgKiBvZmZYUGZWYWw7XG4gIH0gZWxzZSB7XG4gICAgeCArPSBvZmZYUGZWYWw7XG4gIH1cbiAgdmFyIHkgPSBub2RlWSAtIG5vZGVUSCAvIDI7IC8vIHRvcFxuICB2YXIgcG9zWVVuaXRzID0gZ2V0SW5kZXhlZFN0eWxlKG5vZGUsICdiYWNrZ3JvdW5kLXBvc2l0aW9uLXknLCAndW5pdHMnLCBpbmRleCk7XG4gIHZhciBwb3NZUGZWYWwgPSBnZXRJbmRleGVkU3R5bGUobm9kZSwgJ2JhY2tncm91bmQtcG9zaXRpb24teScsICdwZlZhbHVlJywgaW5kZXgpO1xuICBpZiAocG9zWVVuaXRzID09PSAnJScpIHtcbiAgICB5ICs9IChub2RlVEggLSBoKSAqIHBvc1lQZlZhbDtcbiAgfSBlbHNlIHtcbiAgICB5ICs9IHBvc1lQZlZhbDtcbiAgfVxuICB2YXIgb2ZmWVVuaXRzID0gZ2V0SW5kZXhlZFN0eWxlKG5vZGUsICdiYWNrZ3JvdW5kLW9mZnNldC15JywgJ3VuaXRzJywgaW5kZXgpO1xuICB2YXIgb2ZmWVBmVmFsID0gZ2V0SW5kZXhlZFN0eWxlKG5vZGUsICdiYWNrZ3JvdW5kLW9mZnNldC15JywgJ3BmVmFsdWUnLCBpbmRleCk7XG4gIGlmIChvZmZZVW5pdHMgPT09ICclJykge1xuICAgIHkgKz0gKG5vZGVUSCAtIGgpICogb2ZmWVBmVmFsO1xuICB9IGVsc2Uge1xuICAgIHkgKz0gb2ZmWVBmVmFsO1xuICB9XG4gIGlmIChycy5wYXRoQ2FjaGUpIHtcbiAgICB4IC09IG5vZGVYO1xuICAgIHkgLT0gbm9kZVk7XG4gICAgbm9kZVggPSAwO1xuICAgIG5vZGVZID0gMDtcbiAgfVxuICB2YXIgZ0FscGhhID0gY29udGV4dC5nbG9iYWxBbHBoYTtcbiAgY29udGV4dC5nbG9iYWxBbHBoYSA9IGltZ09wYWNpdHk7XG4gIHZhciBzbW9vdGhpbmdFbmFibGVkID0gci5nZXRJbWdTbW9vdGhpbmcoY29udGV4dCk7XG4gIHZhciBpc1Ntb290aGluZ1N3aXRjaGVkID0gZmFsc2U7XG4gIGlmIChzbW9vdGggPT09ICdubycgJiYgc21vb3RoaW5nRW5hYmxlZCkge1xuICAgIHIuc2V0SW1nU21vb3RoaW5nKGNvbnRleHQsIGZhbHNlKTtcbiAgICBpc1Ntb290aGluZ1N3aXRjaGVkID0gdHJ1ZTtcbiAgfSBlbHNlIGlmIChzbW9vdGggPT09ICd5ZXMnICYmICFzbW9vdGhpbmdFbmFibGVkKSB7XG4gICAgci5zZXRJbWdTbW9vdGhpbmcoY29udGV4dCwgdHJ1ZSk7XG4gICAgaXNTbW9vdGhpbmdTd2l0Y2hlZCA9IHRydWU7XG4gIH1cbiAgaWYgKHJlcGVhdCA9PT0gJ25vLXJlcGVhdCcpIHtcbiAgICBpZiAoc2hvdWxkQ2xpcCkge1xuICAgICAgY29udGV4dC5zYXZlKCk7XG4gICAgICBpZiAocnMucGF0aENhY2hlKSB7XG4gICAgICAgIGNvbnRleHQuY2xpcChycy5wYXRoQ2FjaGUpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgci5ub2RlU2hhcGVzW3IuZ2V0Tm9kZVNoYXBlKG5vZGUpXS5kcmF3KGNvbnRleHQsIG5vZGVYLCBub2RlWSwgbm9kZVRXLCBub2RlVEgsIGNvcm5lclJhZGl1cywgcnMpO1xuICAgICAgICBjb250ZXh0LmNsaXAoKTtcbiAgICAgIH1cbiAgICB9XG4gICAgci5zYWZlRHJhd0ltYWdlKGNvbnRleHQsIGltZywgMCwgMCwgaW1nVywgaW1nSCwgeCwgeSwgdywgaCk7XG4gICAgaWYgKHNob3VsZENsaXApIHtcbiAgICAgIGNvbnRleHQucmVzdG9yZSgpO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICB2YXIgcGF0dGVybiA9IGNvbnRleHQuY3JlYXRlUGF0dGVybihpbWcsIHJlcGVhdCk7XG4gICAgY29udGV4dC5maWxsU3R5bGUgPSBwYXR0ZXJuO1xuICAgIHIubm9kZVNoYXBlc1tyLmdldE5vZGVTaGFwZShub2RlKV0uZHJhdyhjb250ZXh0LCBub2RlWCwgbm9kZVksIG5vZGVUVywgbm9kZVRILCBjb3JuZXJSYWRpdXMsIHJzKTtcbiAgICBjb250ZXh0LnRyYW5zbGF0ZSh4LCB5KTtcbiAgICBjb250ZXh0LmZpbGwoKTtcbiAgICBjb250ZXh0LnRyYW5zbGF0ZSgteCwgLXkpO1xuICB9XG4gIGNvbnRleHQuZ2xvYmFsQWxwaGEgPSBnQWxwaGE7XG4gIGlmIChpc1Ntb290aGluZ1N3aXRjaGVkKSB7XG4gICAgci5zZXRJbWdTbW9vdGhpbmcoY29udGV4dCwgc21vb3RoaW5nRW5hYmxlZCk7XG4gIH1cbn07XG5cbnZhciBDUnAkNyA9IHt9O1xuQ1JwJDcuZWxlVGV4dEJpZ2dlclRoYW5NaW4gPSBmdW5jdGlvbiAoZWxlLCBzY2FsZSkge1xuICBpZiAoIXNjYWxlKSB7XG4gICAgdmFyIHpvb20gPSBlbGUuY3koKS56b29tKCk7XG4gICAgdmFyIHB4UmF0aW8gPSB0aGlzLmdldFBpeGVsUmF0aW8oKTtcbiAgICB2YXIgbHZsID0gTWF0aC5jZWlsKGxvZzIoem9vbSAqIHB4UmF0aW8pKTsgLy8gdGhlIGVmZmVjdGl2ZSB0ZXh0dXJlIGxldmVsXG5cbiAgICBzY2FsZSA9IE1hdGgucG93KDIsIGx2bCk7XG4gIH1cbiAgdmFyIGNvbXB1dGVkU2l6ZSA9IGVsZS5wc3R5bGUoJ2ZvbnQtc2l6ZScpLnBmVmFsdWUgKiBzY2FsZTtcbiAgdmFyIG1pblNpemUgPSBlbGUucHN0eWxlKCdtaW4tem9vbWVkLWZvbnQtc2l6ZScpLnBmVmFsdWU7XG4gIGlmIChjb21wdXRlZFNpemUgPCBtaW5TaXplKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIHJldHVybiB0cnVlO1xufTtcbkNScCQ3LmRyYXdFbGVtZW50VGV4dCA9IGZ1bmN0aW9uIChjb250ZXh0LCBlbGUsIHNoaWZ0VG9PcmlnaW5XaXRoQmIsIGZvcmNlLCBwcmVmaXgpIHtcbiAgdmFyIHVzZUVsZU9wYWNpdHkgPSBhcmd1bWVudHMubGVuZ3RoID4gNSAmJiBhcmd1bWVudHNbNV0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1s1XSA6IHRydWU7XG4gIHZhciByID0gdGhpcztcbiAgaWYgKGZvcmNlID09IG51bGwpIHtcbiAgICBpZiAodXNlRWxlT3BhY2l0eSAmJiAhci5lbGVUZXh0QmlnZ2VyVGhhbk1pbihlbGUpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICB9IGVsc2UgaWYgKGZvcmNlID09PSBmYWxzZSkge1xuICAgIHJldHVybjtcbiAgfVxuICBpZiAoZWxlLmlzTm9kZSgpKSB7XG4gICAgdmFyIGxhYmVsID0gZWxlLnBzdHlsZSgnbGFiZWwnKTtcbiAgICBpZiAoIWxhYmVsIHx8ICFsYWJlbC52YWx1ZSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB2YXIganVzdGlmaWNhdGlvbiA9IHIuZ2V0TGFiZWxKdXN0aWZpY2F0aW9uKGVsZSk7XG4gICAgY29udGV4dC50ZXh0QWxpZ24gPSBqdXN0aWZpY2F0aW9uO1xuICAgIGNvbnRleHQudGV4dEJhc2VsaW5lID0gJ2JvdHRvbSc7XG4gIH0gZWxzZSB7XG4gICAgdmFyIGJhZExpbmUgPSBlbGUuZWxlbWVudCgpLl9wcml2YXRlLnJzY3JhdGNoLmJhZExpbmU7XG4gICAgdmFyIF9sYWJlbCA9IGVsZS5wc3R5bGUoJ2xhYmVsJyk7XG4gICAgdmFyIHNyY0xhYmVsID0gZWxlLnBzdHlsZSgnc291cmNlLWxhYmVsJyk7XG4gICAgdmFyIHRndExhYmVsID0gZWxlLnBzdHlsZSgndGFyZ2V0LWxhYmVsJyk7XG4gICAgaWYgKGJhZExpbmUgfHwgKCFfbGFiZWwgfHwgIV9sYWJlbC52YWx1ZSkgJiYgKCFzcmNMYWJlbCB8fCAhc3JjTGFiZWwudmFsdWUpICYmICghdGd0TGFiZWwgfHwgIXRndExhYmVsLnZhbHVlKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb250ZXh0LnRleHRBbGlnbiA9ICdjZW50ZXInO1xuICAgIGNvbnRleHQudGV4dEJhc2VsaW5lID0gJ2JvdHRvbSc7XG4gIH1cbiAgdmFyIGFwcGx5Um90YXRpb24gPSAhc2hpZnRUb09yaWdpbldpdGhCYjtcbiAgdmFyIGJiO1xuICBpZiAoc2hpZnRUb09yaWdpbldpdGhCYikge1xuICAgIGJiID0gc2hpZnRUb09yaWdpbldpdGhCYjtcbiAgICBjb250ZXh0LnRyYW5zbGF0ZSgtYmIueDEsIC1iYi55MSk7XG4gIH1cbiAgaWYgKHByZWZpeCA9PSBudWxsKSB7XG4gICAgci5kcmF3VGV4dChjb250ZXh0LCBlbGUsIG51bGwsIGFwcGx5Um90YXRpb24sIHVzZUVsZU9wYWNpdHkpO1xuICAgIGlmIChlbGUuaXNFZGdlKCkpIHtcbiAgICAgIHIuZHJhd1RleHQoY29udGV4dCwgZWxlLCAnc291cmNlJywgYXBwbHlSb3RhdGlvbiwgdXNlRWxlT3BhY2l0eSk7XG4gICAgICByLmRyYXdUZXh0KGNvbnRleHQsIGVsZSwgJ3RhcmdldCcsIGFwcGx5Um90YXRpb24sIHVzZUVsZU9wYWNpdHkpO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICByLmRyYXdUZXh0KGNvbnRleHQsIGVsZSwgcHJlZml4LCBhcHBseVJvdGF0aW9uLCB1c2VFbGVPcGFjaXR5KTtcbiAgfVxuICBpZiAoc2hpZnRUb09yaWdpbldpdGhCYikge1xuICAgIGNvbnRleHQudHJhbnNsYXRlKGJiLngxLCBiYi55MSk7XG4gIH1cbn07XG5DUnAkNy5nZXRGb250Q2FjaGUgPSBmdW5jdGlvbiAoY29udGV4dCkge1xuICB2YXIgY2FjaGU7XG4gIHRoaXMuZm9udENhY2hlcyA9IHRoaXMuZm9udENhY2hlcyB8fCBbXTtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLmZvbnRDYWNoZXMubGVuZ3RoOyBpKyspIHtcbiAgICBjYWNoZSA9IHRoaXMuZm9udENhY2hlc1tpXTtcbiAgICBpZiAoY2FjaGUuY29udGV4dCA9PT0gY29udGV4dCkge1xuICAgICAgcmV0dXJuIGNhY2hlO1xuICAgIH1cbiAgfVxuICBjYWNoZSA9IHtcbiAgICBjb250ZXh0OiBjb250ZXh0XG4gIH07XG4gIHRoaXMuZm9udENhY2hlcy5wdXNoKGNhY2hlKTtcbiAgcmV0dXJuIGNhY2hlO1xufTtcblxuLy8gc2V0IHVwIGNhbnZhcyBjb250ZXh0IHdpdGggZm9udFxuLy8gcmV0dXJucyB0cmFuc2Zvcm1lZCB0ZXh0IHN0cmluZ1xuQ1JwJDcuc2V0dXBUZXh0U3R5bGUgPSBmdW5jdGlvbiAoY29udGV4dCwgZWxlKSB7XG4gIHZhciB1c2VFbGVPcGFjaXR5ID0gYXJndW1lbnRzLmxlbmd0aCA+IDIgJiYgYXJndW1lbnRzWzJdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMl0gOiB0cnVlO1xuICAvLyBGb250IHN0eWxlXG4gIHZhciBsYWJlbFN0eWxlID0gZWxlLnBzdHlsZSgnZm9udC1zdHlsZScpLnN0clZhbHVlO1xuICB2YXIgbGFiZWxTaXplID0gZWxlLnBzdHlsZSgnZm9udC1zaXplJykucGZWYWx1ZSArICdweCc7XG4gIHZhciBsYWJlbEZhbWlseSA9IGVsZS5wc3R5bGUoJ2ZvbnQtZmFtaWx5Jykuc3RyVmFsdWU7XG4gIHZhciBsYWJlbFdlaWdodCA9IGVsZS5wc3R5bGUoJ2ZvbnQtd2VpZ2h0Jykuc3RyVmFsdWU7XG4gIHZhciBvcGFjaXR5ID0gdXNlRWxlT3BhY2l0eSA/IGVsZS5lZmZlY3RpdmVPcGFjaXR5KCkgKiBlbGUucHN0eWxlKCd0ZXh0LW9wYWNpdHknKS52YWx1ZSA6IDE7XG4gIHZhciBvdXRsaW5lT3BhY2l0eSA9IGVsZS5wc3R5bGUoJ3RleHQtb3V0bGluZS1vcGFjaXR5JykudmFsdWUgKiBvcGFjaXR5O1xuICB2YXIgY29sb3IgPSBlbGUucHN0eWxlKCdjb2xvcicpLnZhbHVlO1xuICB2YXIgb3V0bGluZUNvbG9yID0gZWxlLnBzdHlsZSgndGV4dC1vdXRsaW5lLWNvbG9yJykudmFsdWU7XG4gIGNvbnRleHQuZm9udCA9IGxhYmVsU3R5bGUgKyAnICcgKyBsYWJlbFdlaWdodCArICcgJyArIGxhYmVsU2l6ZSArICcgJyArIGxhYmVsRmFtaWx5O1xuICBjb250ZXh0LmxpbmVKb2luID0gJ3JvdW5kJzsgLy8gc28gdGV4dCBvdXRsaW5lcyBhcmVuJ3QgamFnZ2VkXG5cbiAgdGhpcy5jb2xvckZpbGxTdHlsZShjb250ZXh0LCBjb2xvclswXSwgY29sb3JbMV0sIGNvbG9yWzJdLCBvcGFjaXR5KTtcbiAgdGhpcy5jb2xvclN0cm9rZVN0eWxlKGNvbnRleHQsIG91dGxpbmVDb2xvclswXSwgb3V0bGluZUNvbG9yWzFdLCBvdXRsaW5lQ29sb3JbMl0sIG91dGxpbmVPcGFjaXR5KTtcbn07XG5cbi8vIFRPRE8gZW5zdXJlIHJlLXVzZWRcbmZ1bmN0aW9uIHJvdW5kUmVjdChjdHgsIHgsIHksIHdpZHRoLCBoZWlnaHQpIHtcbiAgdmFyIHJhZGl1cyA9IGFyZ3VtZW50cy5sZW5ndGggPiA1ICYmIGFyZ3VtZW50c1s1XSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzVdIDogNTtcbiAgdmFyIHN0cm9rZSA9IGFyZ3VtZW50cy5sZW5ndGggPiA2ID8gYXJndW1lbnRzWzZdIDogdW5kZWZpbmVkO1xuICBjdHguYmVnaW5QYXRoKCk7XG4gIGN0eC5tb3ZlVG8oeCArIHJhZGl1cywgeSk7XG4gIGN0eC5saW5lVG8oeCArIHdpZHRoIC0gcmFkaXVzLCB5KTtcbiAgY3R4LnF1YWRyYXRpY0N1cnZlVG8oeCArIHdpZHRoLCB5LCB4ICsgd2lkdGgsIHkgKyByYWRpdXMpO1xuICBjdHgubGluZVRvKHggKyB3aWR0aCwgeSArIGhlaWdodCAtIHJhZGl1cyk7XG4gIGN0eC5xdWFkcmF0aWNDdXJ2ZVRvKHggKyB3aWR0aCwgeSArIGhlaWdodCwgeCArIHdpZHRoIC0gcmFkaXVzLCB5ICsgaGVpZ2h0KTtcbiAgY3R4LmxpbmVUbyh4ICsgcmFkaXVzLCB5ICsgaGVpZ2h0KTtcbiAgY3R4LnF1YWRyYXRpY0N1cnZlVG8oeCwgeSArIGhlaWdodCwgeCwgeSArIGhlaWdodCAtIHJhZGl1cyk7XG4gIGN0eC5saW5lVG8oeCwgeSArIHJhZGl1cyk7XG4gIGN0eC5xdWFkcmF0aWNDdXJ2ZVRvKHgsIHksIHggKyByYWRpdXMsIHkpO1xuICBjdHguY2xvc2VQYXRoKCk7XG4gIGlmIChzdHJva2UpIGN0eC5zdHJva2UoKTtlbHNlIGN0eC5maWxsKCk7XG59XG5DUnAkNy5nZXRUZXh0QW5nbGUgPSBmdW5jdGlvbiAoZWxlLCBwcmVmaXgpIHtcbiAgdmFyIHRoZXRhO1xuICB2YXIgX3AgPSBlbGUuX3ByaXZhdGU7XG4gIHZhciByc2NyYXRjaCA9IF9wLnJzY3JhdGNoO1xuICB2YXIgcGRhc2ggPSBwcmVmaXggPyBwcmVmaXggKyAnLScgOiAnJztcbiAgdmFyIHJvdGF0aW9uID0gZWxlLnBzdHlsZShwZGFzaCArICd0ZXh0LXJvdGF0aW9uJyk7XG4gIGlmIChyb3RhdGlvbi5zdHJWYWx1ZSA9PT0gJ2F1dG9yb3RhdGUnKSB7XG4gICAgdmFyIHRleHRBbmdsZSA9IGdldFByZWZpeGVkUHJvcGVydHkocnNjcmF0Y2gsICdsYWJlbEFuZ2xlJywgcHJlZml4KTtcbiAgICB0aGV0YSA9IGVsZS5pc0VkZ2UoKSA/IHRleHRBbmdsZSA6IDA7XG4gIH0gZWxzZSBpZiAocm90YXRpb24uc3RyVmFsdWUgPT09ICdub25lJykge1xuICAgIHRoZXRhID0gMDtcbiAgfSBlbHNlIHtcbiAgICB0aGV0YSA9IHJvdGF0aW9uLnBmVmFsdWU7XG4gIH1cbiAgcmV0dXJuIHRoZXRhO1xufTtcbkNScCQ3LmRyYXdUZXh0ID0gZnVuY3Rpb24gKGNvbnRleHQsIGVsZSwgcHJlZml4KSB7XG4gIHZhciBhcHBseVJvdGF0aW9uID0gYXJndW1lbnRzLmxlbmd0aCA+IDMgJiYgYXJndW1lbnRzWzNdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbM10gOiB0cnVlO1xuICB2YXIgdXNlRWxlT3BhY2l0eSA9IGFyZ3VtZW50cy5sZW5ndGggPiA0ICYmIGFyZ3VtZW50c1s0XSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzRdIDogdHJ1ZTtcbiAgdmFyIF9wID0gZWxlLl9wcml2YXRlO1xuICB2YXIgcnNjcmF0Y2ggPSBfcC5yc2NyYXRjaDtcbiAgdmFyIHBhcmVudE9wYWNpdHkgPSB1c2VFbGVPcGFjaXR5ID8gZWxlLmVmZmVjdGl2ZU9wYWNpdHkoKSA6IDE7XG4gIGlmICh1c2VFbGVPcGFjaXR5ICYmIChwYXJlbnRPcGFjaXR5ID09PSAwIHx8IGVsZS5wc3R5bGUoJ3RleHQtb3BhY2l0eScpLnZhbHVlID09PSAwKSkge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIC8vIHVzZSAnbWFpbicgYXMgYW4gYWxpYXMgZm9yIHRoZSBtYWluIGxhYmVsIChpLmUuIG51bGwgcHJlZml4KVxuICBpZiAocHJlZml4ID09PSAnbWFpbicpIHtcbiAgICBwcmVmaXggPSBudWxsO1xuICB9XG4gIHZhciB0ZXh0WCA9IGdldFByZWZpeGVkUHJvcGVydHkocnNjcmF0Y2gsICdsYWJlbFgnLCBwcmVmaXgpO1xuICB2YXIgdGV4dFkgPSBnZXRQcmVmaXhlZFByb3BlcnR5KHJzY3JhdGNoLCAnbGFiZWxZJywgcHJlZml4KTtcbiAgdmFyIG9yZ1RleHRYLCBvcmdUZXh0WTsgLy8gdXNlZCBmb3Igcm90YXRpb25cbiAgdmFyIHRleHQgPSB0aGlzLmdldExhYmVsVGV4dChlbGUsIHByZWZpeCk7XG4gIGlmICh0ZXh0ICE9IG51bGwgJiYgdGV4dCAhPT0gJycgJiYgIWlzTmFOKHRleHRYKSAmJiAhaXNOYU4odGV4dFkpKSB7XG4gICAgdGhpcy5zZXR1cFRleHRTdHlsZShjb250ZXh0LCBlbGUsIHVzZUVsZU9wYWNpdHkpO1xuICAgIHZhciBwZGFzaCA9IHByZWZpeCA/IHByZWZpeCArICctJyA6ICcnO1xuICAgIHZhciB0ZXh0VyA9IGdldFByZWZpeGVkUHJvcGVydHkocnNjcmF0Y2gsICdsYWJlbFdpZHRoJywgcHJlZml4KTtcbiAgICB2YXIgdGV4dEggPSBnZXRQcmVmaXhlZFByb3BlcnR5KHJzY3JhdGNoLCAnbGFiZWxIZWlnaHQnLCBwcmVmaXgpO1xuICAgIHZhciBtYXJnaW5YID0gZWxlLnBzdHlsZShwZGFzaCArICd0ZXh0LW1hcmdpbi14JykucGZWYWx1ZTtcbiAgICB2YXIgbWFyZ2luWSA9IGVsZS5wc3R5bGUocGRhc2ggKyAndGV4dC1tYXJnaW4teScpLnBmVmFsdWU7XG4gICAgdmFyIGlzRWRnZSA9IGVsZS5pc0VkZ2UoKTtcbiAgICB2YXIgaGFsaWduID0gZWxlLnBzdHlsZSgndGV4dC1oYWxpZ24nKS52YWx1ZTtcbiAgICB2YXIgdmFsaWduID0gZWxlLnBzdHlsZSgndGV4dC12YWxpZ24nKS52YWx1ZTtcbiAgICBpZiAoaXNFZGdlKSB7XG4gICAgICBoYWxpZ24gPSAnY2VudGVyJztcbiAgICAgIHZhbGlnbiA9ICdjZW50ZXInO1xuICAgIH1cbiAgICB0ZXh0WCArPSBtYXJnaW5YO1xuICAgIHRleHRZICs9IG1hcmdpblk7XG4gICAgdmFyIHRoZXRhO1xuICAgIGlmICghYXBwbHlSb3RhdGlvbikge1xuICAgICAgdGhldGEgPSAwO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGV0YSA9IHRoaXMuZ2V0VGV4dEFuZ2xlKGVsZSwgcHJlZml4KTtcbiAgICB9XG4gICAgaWYgKHRoZXRhICE9PSAwKSB7XG4gICAgICBvcmdUZXh0WCA9IHRleHRYO1xuICAgICAgb3JnVGV4dFkgPSB0ZXh0WTtcbiAgICAgIGNvbnRleHQudHJhbnNsYXRlKG9yZ1RleHRYLCBvcmdUZXh0WSk7XG4gICAgICBjb250ZXh0LnJvdGF0ZSh0aGV0YSk7XG4gICAgICB0ZXh0WCA9IDA7XG4gICAgICB0ZXh0WSA9IDA7XG4gICAgfVxuICAgIHN3aXRjaCAodmFsaWduKSB7XG4gICAgICBjYXNlICd0b3AnOlxuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ2NlbnRlcic6XG4gICAgICAgIHRleHRZICs9IHRleHRIIC8gMjtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICdib3R0b20nOlxuICAgICAgICB0ZXh0WSArPSB0ZXh0SDtcbiAgICAgICAgYnJlYWs7XG4gICAgfVxuICAgIHZhciBiYWNrZ3JvdW5kT3BhY2l0eSA9IGVsZS5wc3R5bGUoJ3RleHQtYmFja2dyb3VuZC1vcGFjaXR5JykudmFsdWU7XG4gICAgdmFyIGJvcmRlck9wYWNpdHkgPSBlbGUucHN0eWxlKCd0ZXh0LWJvcmRlci1vcGFjaXR5JykudmFsdWU7XG4gICAgdmFyIHRleHRCb3JkZXJXaWR0aCA9IGVsZS5wc3R5bGUoJ3RleHQtYm9yZGVyLXdpZHRoJykucGZWYWx1ZTtcbiAgICB2YXIgYmFja2dyb3VuZFBhZGRpbmcgPSBlbGUucHN0eWxlKCd0ZXh0LWJhY2tncm91bmQtcGFkZGluZycpLnBmVmFsdWU7XG4gICAgdmFyIHN0eWxlU2hhcGUgPSBlbGUucHN0eWxlKCd0ZXh0LWJhY2tncm91bmQtc2hhcGUnKS5zdHJWYWx1ZTtcbiAgICB2YXIgcm91bmRlZCA9IHN0eWxlU2hhcGUuaW5kZXhPZigncm91bmQnKSA9PT0gMDtcbiAgICB2YXIgcm91bmRSYWRpdXMgPSAyO1xuICAgIGlmIChiYWNrZ3JvdW5kT3BhY2l0eSA+IDAgfHwgdGV4dEJvcmRlcldpZHRoID4gMCAmJiBib3JkZXJPcGFjaXR5ID4gMCkge1xuICAgICAgdmFyIGJnWCA9IHRleHRYIC0gYmFja2dyb3VuZFBhZGRpbmc7XG4gICAgICBzd2l0Y2ggKGhhbGlnbikge1xuICAgICAgICBjYXNlICdsZWZ0JzpcbiAgICAgICAgICBiZ1ggLT0gdGV4dFc7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgJ2NlbnRlcic6XG4gICAgICAgICAgYmdYIC09IHRleHRXIC8gMjtcbiAgICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICAgIHZhciBiZ1kgPSB0ZXh0WSAtIHRleHRIIC0gYmFja2dyb3VuZFBhZGRpbmc7XG4gICAgICB2YXIgYmdXID0gdGV4dFcgKyAyICogYmFja2dyb3VuZFBhZGRpbmc7XG4gICAgICB2YXIgYmdIID0gdGV4dEggKyAyICogYmFja2dyb3VuZFBhZGRpbmc7XG4gICAgICBpZiAoYmFja2dyb3VuZE9wYWNpdHkgPiAwKSB7XG4gICAgICAgIHZhciB0ZXh0RmlsbCA9IGNvbnRleHQuZmlsbFN0eWxlO1xuICAgICAgICB2YXIgdGV4dEJhY2tncm91bmRDb2xvciA9IGVsZS5wc3R5bGUoJ3RleHQtYmFja2dyb3VuZC1jb2xvcicpLnZhbHVlO1xuICAgICAgICBjb250ZXh0LmZpbGxTdHlsZSA9ICdyZ2JhKCcgKyB0ZXh0QmFja2dyb3VuZENvbG9yWzBdICsgJywnICsgdGV4dEJhY2tncm91bmRDb2xvclsxXSArICcsJyArIHRleHRCYWNrZ3JvdW5kQ29sb3JbMl0gKyAnLCcgKyBiYWNrZ3JvdW5kT3BhY2l0eSAqIHBhcmVudE9wYWNpdHkgKyAnKSc7XG4gICAgICAgIGlmIChyb3VuZGVkKSB7XG4gICAgICAgICAgcm91bmRSZWN0KGNvbnRleHQsIGJnWCwgYmdZLCBiZ1csIGJnSCwgcm91bmRSYWRpdXMpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGNvbnRleHQuZmlsbFJlY3QoYmdYLCBiZ1ksIGJnVywgYmdIKTtcbiAgICAgICAgfVxuICAgICAgICBjb250ZXh0LmZpbGxTdHlsZSA9IHRleHRGaWxsO1xuICAgICAgfVxuICAgICAgaWYgKHRleHRCb3JkZXJXaWR0aCA+IDAgJiYgYm9yZGVyT3BhY2l0eSA+IDApIHtcbiAgICAgICAgdmFyIHRleHRTdHJva2UgPSBjb250ZXh0LnN0cm9rZVN0eWxlO1xuICAgICAgICB2YXIgdGV4dExpbmVXaWR0aCA9IGNvbnRleHQubGluZVdpZHRoO1xuICAgICAgICB2YXIgdGV4dEJvcmRlckNvbG9yID0gZWxlLnBzdHlsZSgndGV4dC1ib3JkZXItY29sb3InKS52YWx1ZTtcbiAgICAgICAgdmFyIHRleHRCb3JkZXJTdHlsZSA9IGVsZS5wc3R5bGUoJ3RleHQtYm9yZGVyLXN0eWxlJykudmFsdWU7XG4gICAgICAgIGNvbnRleHQuc3Ryb2tlU3R5bGUgPSAncmdiYSgnICsgdGV4dEJvcmRlckNvbG9yWzBdICsgJywnICsgdGV4dEJvcmRlckNvbG9yWzFdICsgJywnICsgdGV4dEJvcmRlckNvbG9yWzJdICsgJywnICsgYm9yZGVyT3BhY2l0eSAqIHBhcmVudE9wYWNpdHkgKyAnKSc7XG4gICAgICAgIGNvbnRleHQubGluZVdpZHRoID0gdGV4dEJvcmRlcldpZHRoO1xuICAgICAgICBpZiAoY29udGV4dC5zZXRMaW5lRGFzaCkge1xuICAgICAgICAgIC8vIGZvciB2ZXJ5IG91dG9mZGF0ZSBicm93c2Vyc1xuICAgICAgICAgIHN3aXRjaCAodGV4dEJvcmRlclN0eWxlKSB7XG4gICAgICAgICAgICBjYXNlICdkb3R0ZWQnOlxuICAgICAgICAgICAgICBjb250ZXh0LnNldExpbmVEYXNoKFsxLCAxXSk7XG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAnZGFzaGVkJzpcbiAgICAgICAgICAgICAgY29udGV4dC5zZXRMaW5lRGFzaChbNCwgMl0pO1xuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ2RvdWJsZSc6XG4gICAgICAgICAgICAgIGNvbnRleHQubGluZVdpZHRoID0gdGV4dEJvcmRlcldpZHRoIC8gNDsgLy8gNTAlIHJlc2VydmVkIGZvciB3aGl0ZSBiZXR3ZWVuIHRoZSB0d28gYm9yZGVyc1xuICAgICAgICAgICAgICBjb250ZXh0LnNldExpbmVEYXNoKFtdKTtcbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICdzb2xpZCc6XG4gICAgICAgICAgICAgIGNvbnRleHQuc2V0TGluZURhc2goW10pO1xuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHJvdW5kZWQpIHtcbiAgICAgICAgICByb3VuZFJlY3QoY29udGV4dCwgYmdYLCBiZ1ksIGJnVywgYmdILCByb3VuZFJhZGl1cywgJ3N0cm9rZScpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGNvbnRleHQuc3Ryb2tlUmVjdChiZ1gsIGJnWSwgYmdXLCBiZ0gpO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0ZXh0Qm9yZGVyU3R5bGUgPT09ICdkb3VibGUnKSB7XG4gICAgICAgICAgdmFyIHdoaXRlV2lkdGggPSB0ZXh0Qm9yZGVyV2lkdGggLyAyO1xuICAgICAgICAgIGlmIChyb3VuZGVkKSB7XG4gICAgICAgICAgICByb3VuZFJlY3QoY29udGV4dCwgYmdYICsgd2hpdGVXaWR0aCwgYmdZICsgd2hpdGVXaWR0aCwgYmdXIC0gd2hpdGVXaWR0aCAqIDIsIGJnSCAtIHdoaXRlV2lkdGggKiAyLCByb3VuZFJhZGl1cywgJ3N0cm9rZScpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjb250ZXh0LnN0cm9rZVJlY3QoYmdYICsgd2hpdGVXaWR0aCwgYmdZICsgd2hpdGVXaWR0aCwgYmdXIC0gd2hpdGVXaWR0aCAqIDIsIGJnSCAtIHdoaXRlV2lkdGggKiAyKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGNvbnRleHQuc2V0TGluZURhc2gpIHtcbiAgICAgICAgICAvLyBmb3IgdmVyeSBvdXRvZmRhdGUgYnJvd3NlcnNcbiAgICAgICAgICBjb250ZXh0LnNldExpbmVEYXNoKFtdKTtcbiAgICAgICAgfVxuICAgICAgICBjb250ZXh0LmxpbmVXaWR0aCA9IHRleHRMaW5lV2lkdGg7XG4gICAgICAgIGNvbnRleHQuc3Ryb2tlU3R5bGUgPSB0ZXh0U3Ryb2tlO1xuICAgICAgfVxuICAgIH1cbiAgICB2YXIgbGluZVdpZHRoID0gMiAqIGVsZS5wc3R5bGUoJ3RleHQtb3V0bGluZS13aWR0aCcpLnBmVmFsdWU7IC8vICoyIGIvYyB0aGUgc3Ryb2tlIGlzIGRyYXduIGNlbnRyZWQgb24gdGhlIG1pZGRsZVxuXG4gICAgaWYgKGxpbmVXaWR0aCA+IDApIHtcbiAgICAgIGNvbnRleHQubGluZVdpZHRoID0gbGluZVdpZHRoO1xuICAgIH1cbiAgICBpZiAoZWxlLnBzdHlsZSgndGV4dC13cmFwJykudmFsdWUgPT09ICd3cmFwJykge1xuICAgICAgdmFyIGxpbmVzID0gZ2V0UHJlZml4ZWRQcm9wZXJ0eShyc2NyYXRjaCwgJ2xhYmVsV3JhcENhY2hlZExpbmVzJywgcHJlZml4KTtcbiAgICAgIHZhciBsaW5lSGVpZ2h0ID0gZ2V0UHJlZml4ZWRQcm9wZXJ0eShyc2NyYXRjaCwgJ2xhYmVsTGluZUhlaWdodCcsIHByZWZpeCk7XG4gICAgICB2YXIgaGFsZlRleHRXID0gdGV4dFcgLyAyO1xuICAgICAgdmFyIGp1c3RpZmljYXRpb24gPSB0aGlzLmdldExhYmVsSnVzdGlmaWNhdGlvbihlbGUpO1xuICAgICAgaWYgKGp1c3RpZmljYXRpb24gPT09ICdhdXRvJykgOyBlbHNlIGlmIChoYWxpZ24gPT09ICdsZWZ0Jykge1xuICAgICAgICAvLyBhdXRvIGp1c3RpZmljYXRpb24gOiByaWdodFxuICAgICAgICBpZiAoanVzdGlmaWNhdGlvbiA9PT0gJ2xlZnQnKSB7XG4gICAgICAgICAgdGV4dFggKz0gLXRleHRXO1xuICAgICAgICB9IGVsc2UgaWYgKGp1c3RpZmljYXRpb24gPT09ICdjZW50ZXInKSB7XG4gICAgICAgICAgdGV4dFggKz0gLWhhbGZUZXh0VztcbiAgICAgICAgfSAvLyBlbHNlIHNhbWUgYXMgYXV0b1xuICAgICAgfSBlbHNlIGlmIChoYWxpZ24gPT09ICdjZW50ZXInKSB7XG4gICAgICAgIC8vIGF1dG8ganVzdGZpY2F0aW9uIDogY2VudGVyXG4gICAgICAgIGlmIChqdXN0aWZpY2F0aW9uID09PSAnbGVmdCcpIHtcbiAgICAgICAgICB0ZXh0WCArPSAtaGFsZlRleHRXO1xuICAgICAgICB9IGVsc2UgaWYgKGp1c3RpZmljYXRpb24gPT09ICdyaWdodCcpIHtcbiAgICAgICAgICB0ZXh0WCArPSBoYWxmVGV4dFc7XG4gICAgICAgIH0gLy8gZWxzZSBzYW1lIGFzIGF1dG9cbiAgICAgIH0gZWxzZSBpZiAoaGFsaWduID09PSAncmlnaHQnKSB7XG4gICAgICAgIC8vIGF1dG8ganVzdGlmaWNhdGlvbiA6IGxlZnRcbiAgICAgICAgaWYgKGp1c3RpZmljYXRpb24gPT09ICdjZW50ZXInKSB7XG4gICAgICAgICAgdGV4dFggKz0gaGFsZlRleHRXO1xuICAgICAgICB9IGVsc2UgaWYgKGp1c3RpZmljYXRpb24gPT09ICdyaWdodCcpIHtcbiAgICAgICAgICB0ZXh0WCArPSB0ZXh0VztcbiAgICAgICAgfSAvLyBlbHNlIHNhbWUgYXMgYXV0b1xuICAgICAgfVxuICAgICAgc3dpdGNoICh2YWxpZ24pIHtcbiAgICAgICAgY2FzZSAndG9wJzpcbiAgICAgICAgICB0ZXh0WSAtPSAobGluZXMubGVuZ3RoIC0gMSkgKiBsaW5lSGVpZ2h0O1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlICdjZW50ZXInOlxuICAgICAgICBjYXNlICdib3R0b20nOlxuICAgICAgICAgIHRleHRZIC09IChsaW5lcy5sZW5ndGggLSAxKSAqIGxpbmVIZWlnaHQ7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgICBmb3IgKHZhciBsID0gMDsgbCA8IGxpbmVzLmxlbmd0aDsgbCsrKSB7XG4gICAgICAgIGlmIChsaW5lV2lkdGggPiAwKSB7XG4gICAgICAgICAgY29udGV4dC5zdHJva2VUZXh0KGxpbmVzW2xdLCB0ZXh0WCwgdGV4dFkpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnRleHQuZmlsbFRleHQobGluZXNbbF0sIHRleHRYLCB0ZXh0WSk7XG4gICAgICAgIHRleHRZICs9IGxpbmVIZWlnaHQ7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmIChsaW5lV2lkdGggPiAwKSB7XG4gICAgICAgIGNvbnRleHQuc3Ryb2tlVGV4dCh0ZXh0LCB0ZXh0WCwgdGV4dFkpO1xuICAgICAgfVxuICAgICAgY29udGV4dC5maWxsVGV4dCh0ZXh0LCB0ZXh0WCwgdGV4dFkpO1xuICAgIH1cbiAgICBpZiAodGhldGEgIT09IDApIHtcbiAgICAgIGNvbnRleHQucm90YXRlKC10aGV0YSk7XG4gICAgICBjb250ZXh0LnRyYW5zbGF0ZSgtb3JnVGV4dFgsIC1vcmdUZXh0WSk7XG4gICAgfVxuICB9XG59O1xuXG4vKiBnbG9iYWwgUGF0aDJEICovXG5cbnZhciBDUnAkNiA9IHt9O1xuQ1JwJDYuZHJhd05vZGUgPSBmdW5jdGlvbiAoY29udGV4dCwgbm9kZSwgc2hpZnRUb09yaWdpbldpdGhCYikge1xuICB2YXIgZHJhd0xhYmVsID0gYXJndW1lbnRzLmxlbmd0aCA+IDMgJiYgYXJndW1lbnRzWzNdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbM10gOiB0cnVlO1xuICB2YXIgc2hvdWxkRHJhd092ZXJsYXkgPSBhcmd1bWVudHMubGVuZ3RoID4gNCAmJiBhcmd1bWVudHNbNF0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1s0XSA6IHRydWU7XG4gIHZhciBzaG91bGREcmF3T3BhY2l0eSA9IGFyZ3VtZW50cy5sZW5ndGggPiA1ICYmIGFyZ3VtZW50c1s1XSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzVdIDogdHJ1ZTtcbiAgdmFyIHIgPSB0aGlzO1xuICB2YXIgbm9kZVdpZHRoLCBub2RlSGVpZ2h0O1xuICB2YXIgX3AgPSBub2RlLl9wcml2YXRlO1xuICB2YXIgcnMgPSBfcC5yc2NyYXRjaDtcbiAgdmFyIHBvcyA9IG5vZGUucG9zaXRpb24oKTtcbiAgaWYgKCFudW1iZXIkMShwb3MueCkgfHwgIW51bWJlciQxKHBvcy55KSkge1xuICAgIHJldHVybjsgLy8gY2FuJ3QgZHJhdyBub2RlIHdpdGggdW5kZWZpbmVkIHBvc2l0aW9uXG4gIH1cbiAgaWYgKHNob3VsZERyYXdPcGFjaXR5ICYmICFub2RlLnZpc2libGUoKSkge1xuICAgIHJldHVybjtcbiAgfVxuICB2YXIgZWxlT3BhY2l0eSA9IHNob3VsZERyYXdPcGFjaXR5ID8gbm9kZS5lZmZlY3RpdmVPcGFjaXR5KCkgOiAxO1xuICB2YXIgdXNlUGF0aHMgPSByLnVzZVBhdGhzKCk7XG4gIHZhciBwYXRoO1xuICB2YXIgcGF0aENhY2hlSGl0ID0gZmFsc2U7XG4gIHZhciBwYWRkaW5nID0gbm9kZS5wYWRkaW5nKCk7XG4gIG5vZGVXaWR0aCA9IG5vZGUud2lkdGgoKSArIDIgKiBwYWRkaW5nO1xuICBub2RlSGVpZ2h0ID0gbm9kZS5oZWlnaHQoKSArIDIgKiBwYWRkaW5nO1xuXG4gIC8vXG4gIC8vIHNldHVwIHNoaWZ0XG5cbiAgdmFyIGJiO1xuICBpZiAoc2hpZnRUb09yaWdpbldpdGhCYikge1xuICAgIGJiID0gc2hpZnRUb09yaWdpbldpdGhCYjtcbiAgICBjb250ZXh0LnRyYW5zbGF0ZSgtYmIueDEsIC1iYi55MSk7XG4gIH1cblxuICAvL1xuICAvLyBsb2FkIGJnIGltYWdlXG5cbiAgdmFyIGJnSW1nUHJvcCA9IG5vZGUucHN0eWxlKCdiYWNrZ3JvdW5kLWltYWdlJyk7XG4gIHZhciB1cmxzID0gYmdJbWdQcm9wLnZhbHVlO1xuICB2YXIgdXJsRGVmaW5lZCA9IG5ldyBBcnJheSh1cmxzLmxlbmd0aCk7XG4gIHZhciBpbWFnZSA9IG5ldyBBcnJheSh1cmxzLmxlbmd0aCk7XG4gIHZhciBudW1JbWFnZXMgPSAwO1xuICBmb3IgKHZhciBpID0gMDsgaSA8IHVybHMubGVuZ3RoOyBpKyspIHtcbiAgICB2YXIgdXJsID0gdXJsc1tpXTtcbiAgICB2YXIgZGVmZCA9IHVybERlZmluZWRbaV0gPSB1cmwgIT0gbnVsbCAmJiB1cmwgIT09ICdub25lJztcbiAgICBpZiAoZGVmZCkge1xuICAgICAgdmFyIGJnSW1nQ3Jvc3NPcmlnaW4gPSBub2RlLmN5KCkuc3R5bGUoKS5nZXRJbmRleGVkU3R5bGUobm9kZSwgJ2JhY2tncm91bmQtaW1hZ2UtY3Jvc3NvcmlnaW4nLCAndmFsdWUnLCBpKTtcbiAgICAgIG51bUltYWdlcysrO1xuXG4gICAgICAvLyBnZXQgaW1hZ2UsIGFuZCBpZiBub3QgbG9hZGVkIHRoZW4gYXNrIHRvIHJlZHJhdyB3aGVuIGxhdGVyIGxvYWRlZFxuICAgICAgaW1hZ2VbaV0gPSByLmdldENhY2hlZEltYWdlKHVybCwgYmdJbWdDcm9zc09yaWdpbiwgZnVuY3Rpb24gKCkge1xuICAgICAgICBfcC5iYWNrZ3JvdW5kVGltZXN0YW1wID0gRGF0ZS5ub3coKTtcbiAgICAgICAgbm9kZS5lbWl0QW5kTm90aWZ5KCdiYWNrZ3JvdW5kJyk7XG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICAvL1xuICAvLyBzZXR1cCBzdHlsZXNcblxuICB2YXIgZGFya25lc3MgPSBub2RlLnBzdHlsZSgnYmFja2dyb3VuZC1ibGFja2VuJykudmFsdWU7XG4gIHZhciBib3JkZXJXaWR0aCA9IG5vZGUucHN0eWxlKCdib3JkZXItd2lkdGgnKS5wZlZhbHVlO1xuICB2YXIgYmdPcGFjaXR5ID0gbm9kZS5wc3R5bGUoJ2JhY2tncm91bmQtb3BhY2l0eScpLnZhbHVlICogZWxlT3BhY2l0eTtcbiAgdmFyIGJvcmRlckNvbG9yID0gbm9kZS5wc3R5bGUoJ2JvcmRlci1jb2xvcicpLnZhbHVlO1xuICB2YXIgYm9yZGVyU3R5bGUgPSBub2RlLnBzdHlsZSgnYm9yZGVyLXN0eWxlJykudmFsdWU7XG4gIHZhciBib3JkZXJKb2luID0gbm9kZS5wc3R5bGUoJ2JvcmRlci1qb2luJykudmFsdWU7XG4gIHZhciBib3JkZXJDYXAgPSBub2RlLnBzdHlsZSgnYm9yZGVyLWNhcCcpLnZhbHVlO1xuICB2YXIgYm9yZGVyUG9zaXRpb24gPSBub2RlLnBzdHlsZSgnYm9yZGVyLXBvc2l0aW9uJykudmFsdWU7XG4gIHZhciBib3JkZXJQYXR0ZXJuID0gbm9kZS5wc3R5bGUoJ2JvcmRlci1kYXNoLXBhdHRlcm4nKS5wZlZhbHVlO1xuICB2YXIgYm9yZGVyT2Zmc2V0ID0gbm9kZS5wc3R5bGUoJ2JvcmRlci1kYXNoLW9mZnNldCcpLnBmVmFsdWU7XG4gIHZhciBib3JkZXJPcGFjaXR5ID0gbm9kZS5wc3R5bGUoJ2JvcmRlci1vcGFjaXR5JykudmFsdWUgKiBlbGVPcGFjaXR5O1xuICB2YXIgb3V0bGluZVdpZHRoID0gbm9kZS5wc3R5bGUoJ291dGxpbmUtd2lkdGgnKS5wZlZhbHVlO1xuICB2YXIgb3V0bGluZUNvbG9yID0gbm9kZS5wc3R5bGUoJ291dGxpbmUtY29sb3InKS52YWx1ZTtcbiAgdmFyIG91dGxpbmVTdHlsZSA9IG5vZGUucHN0eWxlKCdvdXRsaW5lLXN0eWxlJykudmFsdWU7XG4gIHZhciBvdXRsaW5lT3BhY2l0eSA9IG5vZGUucHN0eWxlKCdvdXRsaW5lLW9wYWNpdHknKS52YWx1ZSAqIGVsZU9wYWNpdHk7XG4gIHZhciBvdXRsaW5lT2Zmc2V0ID0gbm9kZS5wc3R5bGUoJ291dGxpbmUtb2Zmc2V0JykudmFsdWU7XG4gIHZhciBjb3JuZXJSYWRpdXMgPSBub2RlLnBzdHlsZSgnY29ybmVyLXJhZGl1cycpLnZhbHVlO1xuICBpZiAoY29ybmVyUmFkaXVzICE9PSAnYXV0bycpIGNvcm5lclJhZGl1cyA9IG5vZGUucHN0eWxlKCdjb3JuZXItcmFkaXVzJykucGZWYWx1ZTtcbiAgdmFyIHNldHVwU2hhcGVDb2xvciA9IGZ1bmN0aW9uIHNldHVwU2hhcGVDb2xvcigpIHtcbiAgICB2YXIgYmdPcHkgPSBhcmd1bWVudHMubGVuZ3RoID4gMCAmJiBhcmd1bWVudHNbMF0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1swXSA6IGJnT3BhY2l0eTtcbiAgICByLmVsZUZpbGxTdHlsZShjb250ZXh0LCBub2RlLCBiZ09weSk7XG4gIH07XG4gIHZhciBzZXR1cEJvcmRlckNvbG9yID0gZnVuY3Rpb24gc2V0dXBCb3JkZXJDb2xvcigpIHtcbiAgICB2YXIgYmRyT3B5ID0gYXJndW1lbnRzLmxlbmd0aCA+IDAgJiYgYXJndW1lbnRzWzBdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMF0gOiBib3JkZXJPcGFjaXR5O1xuICAgIHIuY29sb3JTdHJva2VTdHlsZShjb250ZXh0LCBib3JkZXJDb2xvclswXSwgYm9yZGVyQ29sb3JbMV0sIGJvcmRlckNvbG9yWzJdLCBiZHJPcHkpO1xuICB9O1xuICB2YXIgc2V0dXBPdXRsaW5lQ29sb3IgPSBmdW5jdGlvbiBzZXR1cE91dGxpbmVDb2xvcigpIHtcbiAgICB2YXIgb3Rsbk9weSA9IGFyZ3VtZW50cy5sZW5ndGggPiAwICYmIGFyZ3VtZW50c1swXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzBdIDogb3V0bGluZU9wYWNpdHk7XG4gICAgci5jb2xvclN0cm9rZVN0eWxlKGNvbnRleHQsIG91dGxpbmVDb2xvclswXSwgb3V0bGluZUNvbG9yWzFdLCBvdXRsaW5lQ29sb3JbMl0sIG90bG5PcHkpO1xuICB9O1xuXG4gIC8vXG4gIC8vIHNldHVwIHNoYXBlXG5cbiAgdmFyIGdldFBhdGggPSBmdW5jdGlvbiBnZXRQYXRoKHdpZHRoLCBoZWlnaHQsIHNoYXBlLCBwb2ludHMpIHtcbiAgICB2YXIgcGF0aENhY2hlID0gci5ub2RlUGF0aENhY2hlID0gci5ub2RlUGF0aENhY2hlIHx8IFtdO1xuICAgIHZhciBrZXkgPSBoYXNoU3RyaW5ncyhzaGFwZSA9PT0gJ3BvbHlnb24nID8gc2hhcGUgKyAnLCcgKyBwb2ludHMuam9pbignLCcpIDogc2hhcGUsICcnICsgaGVpZ2h0LCAnJyArIHdpZHRoLCAnJyArIGNvcm5lclJhZGl1cyk7XG4gICAgdmFyIGNhY2hlZFBhdGggPSBwYXRoQ2FjaGVba2V5XTtcbiAgICB2YXIgcGF0aDtcbiAgICB2YXIgY2FjaGVIaXQgPSBmYWxzZTtcbiAgICBpZiAoY2FjaGVkUGF0aCAhPSBudWxsKSB7XG4gICAgICBwYXRoID0gY2FjaGVkUGF0aDtcbiAgICAgIGNhY2hlSGl0ID0gdHJ1ZTtcbiAgICAgIHJzLnBhdGhDYWNoZSA9IHBhdGg7XG4gICAgfSBlbHNlIHtcbiAgICAgIHBhdGggPSBuZXcgUGF0aDJEKCk7XG4gICAgICBwYXRoQ2FjaGVba2V5XSA9IHJzLnBhdGhDYWNoZSA9IHBhdGg7XG4gICAgfVxuICAgIHJldHVybiB7XG4gICAgICBwYXRoOiBwYXRoLFxuICAgICAgY2FjaGVIaXQ6IGNhY2hlSGl0XG4gICAgfTtcbiAgfTtcbiAgdmFyIHN0eWxlU2hhcGUgPSBub2RlLnBzdHlsZSgnc2hhcGUnKS5zdHJWYWx1ZTtcbiAgdmFyIHNoYXBlUHRzID0gbm9kZS5wc3R5bGUoJ3NoYXBlLXBvbHlnb24tcG9pbnRzJykucGZWYWx1ZTtcbiAgaWYgKHVzZVBhdGhzKSB7XG4gICAgY29udGV4dC50cmFuc2xhdGUocG9zLngsIHBvcy55KTtcbiAgICB2YXIgc2hhcGVQYXRoID0gZ2V0UGF0aChub2RlV2lkdGgsIG5vZGVIZWlnaHQsIHN0eWxlU2hhcGUsIHNoYXBlUHRzKTtcbiAgICBwYXRoID0gc2hhcGVQYXRoLnBhdGg7XG4gICAgcGF0aENhY2hlSGl0ID0gc2hhcGVQYXRoLmNhY2hlSGl0O1xuICB9XG4gIHZhciBkcmF3U2hhcGUgPSBmdW5jdGlvbiBkcmF3U2hhcGUoKSB7XG4gICAgaWYgKCFwYXRoQ2FjaGVIaXQpIHtcbiAgICAgIHZhciBucG9zID0gcG9zO1xuICAgICAgaWYgKHVzZVBhdGhzKSB7XG4gICAgICAgIG5wb3MgPSB7XG4gICAgICAgICAgeDogMCxcbiAgICAgICAgICB5OiAwXG4gICAgICAgIH07XG4gICAgICB9XG4gICAgICByLm5vZGVTaGFwZXNbci5nZXROb2RlU2hhcGUobm9kZSldLmRyYXcocGF0aCB8fCBjb250ZXh0LCBucG9zLngsIG5wb3MueSwgbm9kZVdpZHRoLCBub2RlSGVpZ2h0LCBjb3JuZXJSYWRpdXMsIHJzKTtcbiAgICB9XG4gICAgaWYgKHVzZVBhdGhzKSB7XG4gICAgICBjb250ZXh0LmZpbGwocGF0aCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnRleHQuZmlsbCgpO1xuICAgIH1cbiAgfTtcbiAgdmFyIGRyYXdJbWFnZXMgPSBmdW5jdGlvbiBkcmF3SW1hZ2VzKCkge1xuICAgIHZhciBub2RlT3BhY2l0eSA9IGFyZ3VtZW50cy5sZW5ndGggPiAwICYmIGFyZ3VtZW50c1swXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzBdIDogZWxlT3BhY2l0eTtcbiAgICB2YXIgaW5zaWRlID0gYXJndW1lbnRzLmxlbmd0aCA+IDEgJiYgYXJndW1lbnRzWzFdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMV0gOiB0cnVlO1xuICAgIHZhciBwcmV2QmdpbmcgPSBfcC5iYWNrZ3JvdW5kaW5nO1xuICAgIHZhciB0b3RhbENvbXBsZXRlZCA9IDA7XG4gICAgZm9yICh2YXIgX2kgPSAwOyBfaSA8IGltYWdlLmxlbmd0aDsgX2krKykge1xuICAgICAgdmFyIGJnQ29udGFpbm1lbnQgPSBub2RlLmN5KCkuc3R5bGUoKS5nZXRJbmRleGVkU3R5bGUobm9kZSwgJ2JhY2tncm91bmQtaW1hZ2UtY29udGFpbm1lbnQnLCAndmFsdWUnLCBfaSk7XG4gICAgICBpZiAoaW5zaWRlICYmIGJnQ29udGFpbm1lbnQgPT09ICdvdmVyJyB8fCAhaW5zaWRlICYmIGJnQ29udGFpbm1lbnQgPT09ICdpbnNpZGUnKSB7XG4gICAgICAgIHRvdGFsQ29tcGxldGVkKys7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuICAgICAgaWYgKHVybERlZmluZWRbX2ldICYmIGltYWdlW19pXS5jb21wbGV0ZSAmJiAhaW1hZ2VbX2ldLmVycm9yKSB7XG4gICAgICAgIHRvdGFsQ29tcGxldGVkKys7XG4gICAgICAgIHIuZHJhd0luc2NyaWJlZEltYWdlKGNvbnRleHQsIGltYWdlW19pXSwgbm9kZSwgX2ksIG5vZGVPcGFjaXR5KTtcbiAgICAgIH1cbiAgICB9XG4gICAgX3AuYmFja2dyb3VuZGluZyA9ICEodG90YWxDb21wbGV0ZWQgPT09IG51bUltYWdlcyk7XG4gICAgaWYgKHByZXZCZ2luZyAhPT0gX3AuYmFja2dyb3VuZGluZykge1xuICAgICAgLy8gdXBkYXRlIHN0eWxlIGIvYyA6YmFja2dyb3VuZGluZyBzdGF0ZSBjaGFuZ2VkXG4gICAgICBub2RlLnVwZGF0ZVN0eWxlKGZhbHNlKTtcbiAgICB9XG4gIH07XG4gIHZhciBkcmF3UGllID0gZnVuY3Rpb24gZHJhd1BpZSgpIHtcbiAgICB2YXIgcmVkcmF3U2hhcGUgPSBhcmd1bWVudHMubGVuZ3RoID4gMCAmJiBhcmd1bWVudHNbMF0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1swXSA6IGZhbHNlO1xuICAgIHZhciBwaWVPcGFjaXR5ID0gYXJndW1lbnRzLmxlbmd0aCA+IDEgJiYgYXJndW1lbnRzWzFdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMV0gOiBlbGVPcGFjaXR5O1xuICAgIGlmIChyLmhhc1BpZShub2RlKSkge1xuICAgICAgci5kcmF3UGllKGNvbnRleHQsIG5vZGUsIHBpZU9wYWNpdHkpO1xuXG4gICAgICAvLyByZWRyYXcvcmVzdG9yZSBwYXRoIGlmIHN0ZXBzIGFmdGVyIHBpZSBuZWVkIGl0XG4gICAgICBpZiAocmVkcmF3U2hhcGUpIHtcbiAgICAgICAgaWYgKCF1c2VQYXRocykge1xuICAgICAgICAgIHIubm9kZVNoYXBlc1tyLmdldE5vZGVTaGFwZShub2RlKV0uZHJhdyhjb250ZXh0LCBwb3MueCwgcG9zLnksIG5vZGVXaWR0aCwgbm9kZUhlaWdodCwgY29ybmVyUmFkaXVzLCBycyk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH07XG4gIHZhciBkYXJrZW4gPSBmdW5jdGlvbiBkYXJrZW4oKSB7XG4gICAgdmFyIGRhcmtlbk9wYWNpdHkgPSBhcmd1bWVudHMubGVuZ3RoID4gMCAmJiBhcmd1bWVudHNbMF0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1swXSA6IGVsZU9wYWNpdHk7XG4gICAgdmFyIG9wYWNpdHkgPSAoZGFya25lc3MgPiAwID8gZGFya25lc3MgOiAtZGFya25lc3MpICogZGFya2VuT3BhY2l0eTtcbiAgICB2YXIgYyA9IGRhcmtuZXNzID4gMCA/IDAgOiAyNTU7XG4gICAgaWYgKGRhcmtuZXNzICE9PSAwKSB7XG4gICAgICByLmNvbG9yRmlsbFN0eWxlKGNvbnRleHQsIGMsIGMsIGMsIG9wYWNpdHkpO1xuICAgICAgaWYgKHVzZVBhdGhzKSB7XG4gICAgICAgIGNvbnRleHQuZmlsbChwYXRoKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnRleHQuZmlsbCgpO1xuICAgICAgfVxuICAgIH1cbiAgfTtcbiAgdmFyIGRyYXdCb3JkZXIgPSBmdW5jdGlvbiBkcmF3Qm9yZGVyKCkge1xuICAgIGlmIChib3JkZXJXaWR0aCA+IDApIHtcbiAgICAgIGNvbnRleHQubGluZVdpZHRoID0gYm9yZGVyV2lkdGg7XG4gICAgICBjb250ZXh0LmxpbmVDYXAgPSBib3JkZXJDYXA7XG4gICAgICBjb250ZXh0LmxpbmVKb2luID0gYm9yZGVySm9pbjtcbiAgICAgIGlmIChjb250ZXh0LnNldExpbmVEYXNoKSB7XG4gICAgICAgIC8vIGZvciB2ZXJ5IG91dG9mZGF0ZSBicm93c2Vyc1xuICAgICAgICBzd2l0Y2ggKGJvcmRlclN0eWxlKSB7XG4gICAgICAgICAgY2FzZSAnZG90dGVkJzpcbiAgICAgICAgICAgIGNvbnRleHQuc2V0TGluZURhc2goWzEsIDFdKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgJ2Rhc2hlZCc6XG4gICAgICAgICAgICBjb250ZXh0LnNldExpbmVEYXNoKGJvcmRlclBhdHRlcm4pO1xuICAgICAgICAgICAgY29udGV4dC5saW5lRGFzaE9mZnNldCA9IGJvcmRlck9mZnNldDtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgJ3NvbGlkJzpcbiAgICAgICAgICBjYXNlICdkb3VibGUnOlxuICAgICAgICAgICAgY29udGV4dC5zZXRMaW5lRGFzaChbXSk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYgKGJvcmRlclBvc2l0aW9uICE9PSAnY2VudGVyJykge1xuICAgICAgICBjb250ZXh0LnNhdmUoKTtcbiAgICAgICAgY29udGV4dC5saW5lV2lkdGggKj0gMjtcbiAgICAgICAgaWYgKGJvcmRlclBvc2l0aW9uID09PSAnaW5zaWRlJykge1xuICAgICAgICAgIHVzZVBhdGhzID8gY29udGV4dC5jbGlwKHBhdGgpIDogY29udGV4dC5jbGlwKCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdmFyIHJlZ2lvbiA9IG5ldyBQYXRoMkQoKTtcbiAgICAgICAgICByZWdpb24ucmVjdCgtbm9kZVdpZHRoIC8gMiAtIGJvcmRlcldpZHRoLCAtbm9kZUhlaWdodCAvIDIgLSBib3JkZXJXaWR0aCwgbm9kZVdpZHRoICsgMiAqIGJvcmRlcldpZHRoLCBub2RlSGVpZ2h0ICsgMiAqIGJvcmRlcldpZHRoKTtcbiAgICAgICAgICByZWdpb24uYWRkUGF0aChwYXRoKTtcbiAgICAgICAgICBjb250ZXh0LmNsaXAocmVnaW9uLCAnZXZlbm9kZCcpO1xuICAgICAgICB9XG4gICAgICAgIHVzZVBhdGhzID8gY29udGV4dC5zdHJva2UocGF0aCkgOiBjb250ZXh0LnN0cm9rZSgpO1xuICAgICAgICBjb250ZXh0LnJlc3RvcmUoKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHVzZVBhdGhzID8gY29udGV4dC5zdHJva2UocGF0aCkgOiBjb250ZXh0LnN0cm9rZSgpO1xuICAgICAgfVxuICAgICAgaWYgKGJvcmRlclN0eWxlID09PSAnZG91YmxlJykge1xuICAgICAgICBjb250ZXh0LmxpbmVXaWR0aCA9IGJvcmRlcldpZHRoIC8gMztcbiAgICAgICAgdmFyIGdjbyA9IGNvbnRleHQuZ2xvYmFsQ29tcG9zaXRlT3BlcmF0aW9uO1xuICAgICAgICBjb250ZXh0Lmdsb2JhbENvbXBvc2l0ZU9wZXJhdGlvbiA9ICdkZXN0aW5hdGlvbi1vdXQnO1xuICAgICAgICBpZiAodXNlUGF0aHMpIHtcbiAgICAgICAgICBjb250ZXh0LnN0cm9rZShwYXRoKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBjb250ZXh0LnN0cm9rZSgpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnRleHQuZ2xvYmFsQ29tcG9zaXRlT3BlcmF0aW9uID0gZ2NvO1xuICAgICAgfVxuXG4gICAgICAvLyByZXNldCBpbiBjYXNlIHdlIGNoYW5nZWQgdGhlIGJvcmRlciBzdHlsZVxuICAgICAgaWYgKGNvbnRleHQuc2V0TGluZURhc2gpIHtcbiAgICAgICAgLy8gZm9yIHZlcnkgb3V0b2ZkYXRlIGJyb3dzZXJzXG4gICAgICAgIGNvbnRleHQuc2V0TGluZURhc2goW10pO1xuICAgICAgfVxuICAgIH1cbiAgfTtcbiAgdmFyIGRyYXdPdXRsaW5lID0gZnVuY3Rpb24gZHJhd091dGxpbmUoKSB7XG4gICAgaWYgKG91dGxpbmVXaWR0aCA+IDApIHtcbiAgICAgIGNvbnRleHQubGluZVdpZHRoID0gb3V0bGluZVdpZHRoO1xuICAgICAgY29udGV4dC5saW5lQ2FwID0gJ2J1dHQnO1xuICAgICAgaWYgKGNvbnRleHQuc2V0TGluZURhc2gpIHtcbiAgICAgICAgLy8gZm9yIHZlcnkgb3V0b2ZkYXRlIGJyb3dzZXJzXG4gICAgICAgIHN3aXRjaCAob3V0bGluZVN0eWxlKSB7XG4gICAgICAgICAgY2FzZSAnZG90dGVkJzpcbiAgICAgICAgICAgIGNvbnRleHQuc2V0TGluZURhc2goWzEsIDFdKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgJ2Rhc2hlZCc6XG4gICAgICAgICAgICBjb250ZXh0LnNldExpbmVEYXNoKFs0LCAyXSk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlICdzb2xpZCc6XG4gICAgICAgICAgY2FzZSAnZG91YmxlJzpcbiAgICAgICAgICAgIGNvbnRleHQuc2V0TGluZURhc2goW10pO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHZhciBucG9zID0gcG9zO1xuICAgICAgaWYgKHVzZVBhdGhzKSB7XG4gICAgICAgIG5wb3MgPSB7XG4gICAgICAgICAgeDogMCxcbiAgICAgICAgICB5OiAwXG4gICAgICAgIH07XG4gICAgICB9XG4gICAgICB2YXIgc2hhcGUgPSByLmdldE5vZGVTaGFwZShub2RlKTtcbiAgICAgIHZhciBiV2lkdGggPSBib3JkZXJXaWR0aDtcbiAgICAgIGlmIChib3JkZXJQb3NpdGlvbiA9PT0gJ2luc2lkZScpIGJXaWR0aCA9IDA7XG4gICAgICBpZiAoYm9yZGVyUG9zaXRpb24gPT09ICdvdXRzaWRlJykgYldpZHRoICo9IDI7XG4gICAgICB2YXIgc2NhbGVYID0gKG5vZGVXaWR0aCArIGJXaWR0aCArIChvdXRsaW5lV2lkdGggKyBvdXRsaW5lT2Zmc2V0KSkgLyBub2RlV2lkdGg7XG4gICAgICB2YXIgc2NhbGVZID0gKG5vZGVIZWlnaHQgKyBiV2lkdGggKyAob3V0bGluZVdpZHRoICsgb3V0bGluZU9mZnNldCkpIC8gbm9kZUhlaWdodDtcbiAgICAgIHZhciBzV2lkdGggPSBub2RlV2lkdGggKiBzY2FsZVg7XG4gICAgICB2YXIgc0hlaWdodCA9IG5vZGVIZWlnaHQgKiBzY2FsZVk7XG4gICAgICB2YXIgcG9pbnRzID0gci5ub2RlU2hhcGVzW3NoYXBlXS5wb2ludHM7XG4gICAgICB2YXIgX3BhdGg7XG4gICAgICBpZiAodXNlUGF0aHMpIHtcbiAgICAgICAgdmFyIG91dGxpbmVQYXRoID0gZ2V0UGF0aChzV2lkdGgsIHNIZWlnaHQsIHNoYXBlLCBwb2ludHMpO1xuICAgICAgICBfcGF0aCA9IG91dGxpbmVQYXRoLnBhdGg7XG4gICAgICB9XG5cbiAgICAgIC8vIGRyYXcgdGhlIG91dGxpbmUgcGF0aCwgZWl0aGVyIGJ5IHVzaW5nIGV4cGFuZGVkIHBvaW50cyBvciBieSBzY2FsaW5nIFxuICAgICAgLy8gdGhlIGRpbWVuc2lvbnMsIGRlcGVuZGluZyBvbiBzaGFwZVxuICAgICAgaWYgKHNoYXBlID09PSBcImVsbGlwc2VcIikge1xuICAgICAgICByLmRyYXdFbGxpcHNlUGF0aChfcGF0aCB8fCBjb250ZXh0LCBucG9zLngsIG5wb3MueSwgc1dpZHRoLCBzSGVpZ2h0KTtcbiAgICAgIH0gZWxzZSBpZiAoWydyb3VuZC1kaWFtb25kJywgJ3JvdW5kLWhlcHRhZ29uJywgJ3JvdW5kLWhleGFnb24nLCAncm91bmQtb2N0YWdvbicsICdyb3VuZC1wZW50YWdvbicsICdyb3VuZC1wb2x5Z29uJywgJ3JvdW5kLXRyaWFuZ2xlJywgJ3JvdW5kLXRhZyddLmluY2x1ZGVzKHNoYXBlKSkge1xuICAgICAgICB2YXIgc011bHQgPSAwO1xuICAgICAgICB2YXIgb2Zmc2V0WCA9IDA7XG4gICAgICAgIHZhciBvZmZzZXRZID0gMDtcbiAgICAgICAgaWYgKHNoYXBlID09PSAncm91bmQtZGlhbW9uZCcpIHtcbiAgICAgICAgICBzTXVsdCA9IChiV2lkdGggKyBvdXRsaW5lT2Zmc2V0ICsgb3V0bGluZVdpZHRoKSAqIDEuNDtcbiAgICAgICAgfSBlbHNlIGlmIChzaGFwZSA9PT0gJ3JvdW5kLWhlcHRhZ29uJykge1xuICAgICAgICAgIHNNdWx0ID0gKGJXaWR0aCArIG91dGxpbmVPZmZzZXQgKyBvdXRsaW5lV2lkdGgpICogMS4wNzU7XG4gICAgICAgICAgb2Zmc2V0WSA9IC0oYldpZHRoIC8gMiArIG91dGxpbmVPZmZzZXQgKyBvdXRsaW5lV2lkdGgpIC8gMzU7XG4gICAgICAgIH0gZWxzZSBpZiAoc2hhcGUgPT09ICdyb3VuZC1oZXhhZ29uJykge1xuICAgICAgICAgIHNNdWx0ID0gKGJXaWR0aCArIG91dGxpbmVPZmZzZXQgKyBvdXRsaW5lV2lkdGgpICogMS4xMjtcbiAgICAgICAgfSBlbHNlIGlmIChzaGFwZSA9PT0gJ3JvdW5kLXBlbnRhZ29uJykge1xuICAgICAgICAgIHNNdWx0ID0gKGJXaWR0aCArIG91dGxpbmVPZmZzZXQgKyBvdXRsaW5lV2lkdGgpICogMS4xMztcbiAgICAgICAgICBvZmZzZXRZID0gLShiV2lkdGggLyAyICsgb3V0bGluZU9mZnNldCArIG91dGxpbmVXaWR0aCkgLyAxNTtcbiAgICAgICAgfSBlbHNlIGlmIChzaGFwZSA9PT0gJ3JvdW5kLXRhZycpIHtcbiAgICAgICAgICBzTXVsdCA9IChiV2lkdGggKyBvdXRsaW5lT2Zmc2V0ICsgb3V0bGluZVdpZHRoKSAqIDEuMTI7XG4gICAgICAgICAgb2Zmc2V0WCA9IChiV2lkdGggLyAyICsgb3V0bGluZVdpZHRoICsgb3V0bGluZU9mZnNldCkgKiAuMDc7XG4gICAgICAgIH0gZWxzZSBpZiAoc2hhcGUgPT09ICdyb3VuZC10cmlhbmdsZScpIHtcbiAgICAgICAgICBzTXVsdCA9IChiV2lkdGggKyBvdXRsaW5lT2Zmc2V0ICsgb3V0bGluZVdpZHRoKSAqIChNYXRoLlBJIC8gMik7XG4gICAgICAgICAgb2Zmc2V0WSA9IC0oYldpZHRoICsgb3V0bGluZU9mZnNldCAvIDIgKyBvdXRsaW5lV2lkdGgpIC8gTWF0aC5QSTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoc011bHQgIT09IDApIHtcbiAgICAgICAgICBzY2FsZVggPSAobm9kZVdpZHRoICsgc011bHQpIC8gbm9kZVdpZHRoO1xuICAgICAgICAgIHNXaWR0aCA9IG5vZGVXaWR0aCAqIHNjYWxlWDtcbiAgICAgICAgICBpZiAoIVsncm91bmQtaGV4YWdvbicsICdyb3VuZC10YWcnXS5pbmNsdWRlcyhzaGFwZSkpIHtcbiAgICAgICAgICAgIHNjYWxlWSA9IChub2RlSGVpZ2h0ICsgc011bHQpIC8gbm9kZUhlaWdodDtcbiAgICAgICAgICAgIHNIZWlnaHQgPSBub2RlSGVpZ2h0ICogc2NhbGVZO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBjb3JuZXJSYWRpdXMgPSBjb3JuZXJSYWRpdXMgPT09ICdhdXRvJyA/IGdldFJvdW5kUG9seWdvblJhZGl1cyhzV2lkdGgsIHNIZWlnaHQpIDogY29ybmVyUmFkaXVzO1xuICAgICAgICB2YXIgaGFsZlcgPSBzV2lkdGggLyAyO1xuICAgICAgICB2YXIgaGFsZkggPSBzSGVpZ2h0IC8gMjtcbiAgICAgICAgdmFyIHJhZGl1cyA9IGNvcm5lclJhZGl1cyArIChiV2lkdGggKyBvdXRsaW5lV2lkdGggKyBvdXRsaW5lT2Zmc2V0KSAvIDI7XG4gICAgICAgIHZhciBwID0gbmV3IEFycmF5KHBvaW50cy5sZW5ndGggLyAyKTtcbiAgICAgICAgdmFyIGNvcm5lcnMgPSBuZXcgQXJyYXkocG9pbnRzLmxlbmd0aCAvIDIpO1xuICAgICAgICBmb3IgKHZhciBfaTIgPSAwOyBfaTIgPCBwb2ludHMubGVuZ3RoIC8gMjsgX2kyKyspIHtcbiAgICAgICAgICBwW19pMl0gPSB7XG4gICAgICAgICAgICB4OiBucG9zLnggKyBvZmZzZXRYICsgaGFsZlcgKiBwb2ludHNbX2kyICogMl0sXG4gICAgICAgICAgICB5OiBucG9zLnkgKyBvZmZzZXRZICsgaGFsZkggKiBwb2ludHNbX2kyICogMiArIDFdXG4gICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgICB2YXIgX2kzLFxuICAgICAgICAgIHAxLFxuICAgICAgICAgIHAyLFxuICAgICAgICAgIHAzLFxuICAgICAgICAgIGxlbiA9IHAubGVuZ3RoO1xuICAgICAgICBwMSA9IHBbbGVuIC0gMV07XG4gICAgICAgIC8vIGZvciBlYWNoIHBvaW50XG4gICAgICAgIGZvciAoX2kzID0gMDsgX2kzIDwgbGVuOyBfaTMrKykge1xuICAgICAgICAgIHAyID0gcFtfaTMgJSBsZW5dO1xuICAgICAgICAgIHAzID0gcFsoX2kzICsgMSkgJSBsZW5dO1xuICAgICAgICAgIGNvcm5lcnNbX2kzXSA9IGdldFJvdW5kQ29ybmVyKHAxLCBwMiwgcDMsIHJhZGl1cyk7XG4gICAgICAgICAgcDEgPSBwMjtcbiAgICAgICAgICBwMiA9IHAzO1xuICAgICAgICB9XG4gICAgICAgIHIuZHJhd1JvdW5kUG9seWdvblBhdGgoX3BhdGggfHwgY29udGV4dCwgbnBvcy54ICsgb2Zmc2V0WCwgbnBvcy55ICsgb2Zmc2V0WSwgbm9kZVdpZHRoICogc2NhbGVYLCBub2RlSGVpZ2h0ICogc2NhbGVZLCBwb2ludHMsIGNvcm5lcnMpO1xuICAgICAgfSBlbHNlIGlmIChbJ3JvdW5kcmVjdGFuZ2xlJywgJ3JvdW5kLXJlY3RhbmdsZSddLmluY2x1ZGVzKHNoYXBlKSkge1xuICAgICAgICBjb3JuZXJSYWRpdXMgPSBjb3JuZXJSYWRpdXMgPT09ICdhdXRvJyA/IGdldFJvdW5kUmVjdGFuZ2xlUmFkaXVzKHNXaWR0aCwgc0hlaWdodCkgOiBjb3JuZXJSYWRpdXM7XG4gICAgICAgIHIuZHJhd1JvdW5kUmVjdGFuZ2xlUGF0aChfcGF0aCB8fCBjb250ZXh0LCBucG9zLngsIG5wb3MueSwgc1dpZHRoLCBzSGVpZ2h0LCBjb3JuZXJSYWRpdXMgKyAoYldpZHRoICsgb3V0bGluZVdpZHRoICsgb3V0bGluZU9mZnNldCkgLyAyKTtcbiAgICAgIH0gZWxzZSBpZiAoWydjdXRyZWN0YW5nbGUnLCAnY3V0LXJlY3RhbmdsZSddLmluY2x1ZGVzKHNoYXBlKSkge1xuICAgICAgICBjb3JuZXJSYWRpdXMgPSBjb3JuZXJSYWRpdXMgPT09ICdhdXRvJyA/IGdldEN1dFJlY3RhbmdsZUNvcm5lckxlbmd0aCgpIDogY29ybmVyUmFkaXVzO1xuICAgICAgICByLmRyYXdDdXRSZWN0YW5nbGVQYXRoKF9wYXRoIHx8IGNvbnRleHQsIG5wb3MueCwgbnBvcy55LCBzV2lkdGgsIHNIZWlnaHQsIG51bGwsIGNvcm5lclJhZGl1cyArIChiV2lkdGggKyBvdXRsaW5lV2lkdGggKyBvdXRsaW5lT2Zmc2V0KSAvIDQpO1xuICAgICAgfSBlbHNlIGlmIChbJ2JvdHRvbXJvdW5kcmVjdGFuZ2xlJywgJ2JvdHRvbS1yb3VuZC1yZWN0YW5nbGUnXS5pbmNsdWRlcyhzaGFwZSkpIHtcbiAgICAgICAgY29ybmVyUmFkaXVzID0gY29ybmVyUmFkaXVzID09PSAnYXV0bycgPyBnZXRSb3VuZFJlY3RhbmdsZVJhZGl1cyhzV2lkdGgsIHNIZWlnaHQpIDogY29ybmVyUmFkaXVzO1xuICAgICAgICByLmRyYXdCb3R0b21Sb3VuZFJlY3RhbmdsZVBhdGgoX3BhdGggfHwgY29udGV4dCwgbnBvcy54LCBucG9zLnksIHNXaWR0aCwgc0hlaWdodCwgY29ybmVyUmFkaXVzICsgKGJXaWR0aCArIG91dGxpbmVXaWR0aCArIG91dGxpbmVPZmZzZXQpIC8gMik7XG4gICAgICB9IGVsc2UgaWYgKHNoYXBlID09PSBcImJhcnJlbFwiKSB7XG4gICAgICAgIHIuZHJhd0JhcnJlbFBhdGgoX3BhdGggfHwgY29udGV4dCwgbnBvcy54LCBucG9zLnksIHNXaWR0aCwgc0hlaWdodCk7XG4gICAgICB9IGVsc2UgaWYgKHNoYXBlLnN0YXJ0c1dpdGgoXCJwb2x5Z29uXCIpIHx8IFsncmhvbWJvaWQnLCAncmlnaHQtcmhvbWJvaWQnLCAncm91bmQtdGFnJywgJ3RhZycsICd2ZWUnXS5pbmNsdWRlcyhzaGFwZSkpIHtcbiAgICAgICAgdmFyIHBhZCA9IChiV2lkdGggKyBvdXRsaW5lV2lkdGggKyBvdXRsaW5lT2Zmc2V0KSAvIG5vZGVXaWR0aDtcbiAgICAgICAgcG9pbnRzID0gam9pbkxpbmVzKGV4cGFuZFBvbHlnb24ocG9pbnRzLCBwYWQpKTtcbiAgICAgICAgci5kcmF3UG9seWdvblBhdGgoX3BhdGggfHwgY29udGV4dCwgbnBvcy54LCBucG9zLnksIG5vZGVXaWR0aCwgbm9kZUhlaWdodCwgcG9pbnRzKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHZhciBfcGFkID0gKGJXaWR0aCArIG91dGxpbmVXaWR0aCArIG91dGxpbmVPZmZzZXQpIC8gbm9kZVdpZHRoO1xuICAgICAgICBwb2ludHMgPSBqb2luTGluZXMoZXhwYW5kUG9seWdvbihwb2ludHMsIC1fcGFkKSk7XG4gICAgICAgIHIuZHJhd1BvbHlnb25QYXRoKF9wYXRoIHx8IGNvbnRleHQsIG5wb3MueCwgbnBvcy55LCBub2RlV2lkdGgsIG5vZGVIZWlnaHQsIHBvaW50cyk7XG4gICAgICB9XG4gICAgICBpZiAodXNlUGF0aHMpIHtcbiAgICAgICAgY29udGV4dC5zdHJva2UoX3BhdGgpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29udGV4dC5zdHJva2UoKTtcbiAgICAgIH1cbiAgICAgIGlmIChvdXRsaW5lU3R5bGUgPT09ICdkb3VibGUnKSB7XG4gICAgICAgIGNvbnRleHQubGluZVdpZHRoID0gYldpZHRoIC8gMztcbiAgICAgICAgdmFyIGdjbyA9IGNvbnRleHQuZ2xvYmFsQ29tcG9zaXRlT3BlcmF0aW9uO1xuICAgICAgICBjb250ZXh0Lmdsb2JhbENvbXBvc2l0ZU9wZXJhdGlvbiA9ICdkZXN0aW5hdGlvbi1vdXQnO1xuICAgICAgICBpZiAodXNlUGF0aHMpIHtcbiAgICAgICAgICBjb250ZXh0LnN0cm9rZShfcGF0aCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgY29udGV4dC5zdHJva2UoKTtcbiAgICAgICAgfVxuICAgICAgICBjb250ZXh0Lmdsb2JhbENvbXBvc2l0ZU9wZXJhdGlvbiA9IGdjbztcbiAgICAgIH1cblxuICAgICAgLy8gcmVzZXQgaW4gY2FzZSB3ZSBjaGFuZ2VkIHRoZSBib3JkZXIgc3R5bGVcbiAgICAgIGlmIChjb250ZXh0LnNldExpbmVEYXNoKSB7XG4gICAgICAgIC8vIGZvciB2ZXJ5IG91dG9mZGF0ZSBicm93c2Vyc1xuICAgICAgICBjb250ZXh0LnNldExpbmVEYXNoKFtdKTtcbiAgICAgIH1cbiAgICB9XG4gIH07XG4gIHZhciBkcmF3T3ZlcmxheSA9IGZ1bmN0aW9uIGRyYXdPdmVybGF5KCkge1xuICAgIGlmIChzaG91bGREcmF3T3ZlcmxheSkge1xuICAgICAgci5kcmF3Tm9kZU92ZXJsYXkoY29udGV4dCwgbm9kZSwgcG9zLCBub2RlV2lkdGgsIG5vZGVIZWlnaHQpO1xuICAgIH1cbiAgfTtcbiAgdmFyIGRyYXdVbmRlcmxheSA9IGZ1bmN0aW9uIGRyYXdVbmRlcmxheSgpIHtcbiAgICBpZiAoc2hvdWxkRHJhd092ZXJsYXkpIHtcbiAgICAgIHIuZHJhd05vZGVVbmRlcmxheShjb250ZXh0LCBub2RlLCBwb3MsIG5vZGVXaWR0aCwgbm9kZUhlaWdodCk7XG4gICAgfVxuICB9O1xuICB2YXIgZHJhd1RleHQgPSBmdW5jdGlvbiBkcmF3VGV4dCgpIHtcbiAgICByLmRyYXdFbGVtZW50VGV4dChjb250ZXh0LCBub2RlLCBudWxsLCBkcmF3TGFiZWwpO1xuICB9O1xuICB2YXIgZ2hvc3QgPSBub2RlLnBzdHlsZSgnZ2hvc3QnKS52YWx1ZSA9PT0gJ3llcyc7XG4gIGlmIChnaG9zdCkge1xuICAgIHZhciBneCA9IG5vZGUucHN0eWxlKCdnaG9zdC1vZmZzZXQteCcpLnBmVmFsdWU7XG4gICAgdmFyIGd5ID0gbm9kZS5wc3R5bGUoJ2dob3N0LW9mZnNldC15JykucGZWYWx1ZTtcbiAgICB2YXIgZ2hvc3RPcGFjaXR5ID0gbm9kZS5wc3R5bGUoJ2dob3N0LW9wYWNpdHknKS52YWx1ZTtcbiAgICB2YXIgZWZmR2hvc3RPcGFjaXR5ID0gZ2hvc3RPcGFjaXR5ICogZWxlT3BhY2l0eTtcbiAgICBjb250ZXh0LnRyYW5zbGF0ZShneCwgZ3kpO1xuICAgIHNldHVwT3V0bGluZUNvbG9yKCk7XG4gICAgZHJhd091dGxpbmUoKTtcbiAgICBzZXR1cFNoYXBlQ29sb3IoZ2hvc3RPcGFjaXR5ICogYmdPcGFjaXR5KTtcbiAgICBkcmF3U2hhcGUoKTtcbiAgICBkcmF3SW1hZ2VzKGVmZkdob3N0T3BhY2l0eSwgdHJ1ZSk7XG4gICAgc2V0dXBCb3JkZXJDb2xvcihnaG9zdE9wYWNpdHkgKiBib3JkZXJPcGFjaXR5KTtcbiAgICBkcmF3Qm9yZGVyKCk7XG4gICAgZHJhd1BpZShkYXJrbmVzcyAhPT0gMCB8fCBib3JkZXJXaWR0aCAhPT0gMCk7XG4gICAgZHJhd0ltYWdlcyhlZmZHaG9zdE9wYWNpdHksIGZhbHNlKTtcbiAgICBkYXJrZW4oZWZmR2hvc3RPcGFjaXR5KTtcbiAgICBjb250ZXh0LnRyYW5zbGF0ZSgtZ3gsIC1neSk7XG4gIH1cbiAgaWYgKHVzZVBhdGhzKSB7XG4gICAgY29udGV4dC50cmFuc2xhdGUoLXBvcy54LCAtcG9zLnkpO1xuICB9XG4gIGRyYXdVbmRlcmxheSgpO1xuICBpZiAodXNlUGF0aHMpIHtcbiAgICBjb250ZXh0LnRyYW5zbGF0ZShwb3MueCwgcG9zLnkpO1xuICB9XG4gIHNldHVwT3V0bGluZUNvbG9yKCk7XG4gIGRyYXdPdXRsaW5lKCk7XG4gIHNldHVwU2hhcGVDb2xvcigpO1xuICBkcmF3U2hhcGUoKTtcbiAgZHJhd0ltYWdlcyhlbGVPcGFjaXR5LCB0cnVlKTtcbiAgc2V0dXBCb3JkZXJDb2xvcigpO1xuICBkcmF3Qm9yZGVyKCk7XG4gIGRyYXdQaWUoZGFya25lc3MgIT09IDAgfHwgYm9yZGVyV2lkdGggIT09IDApO1xuICBkcmF3SW1hZ2VzKGVsZU9wYWNpdHksIGZhbHNlKTtcbiAgZGFya2VuKCk7XG4gIGlmICh1c2VQYXRocykge1xuICAgIGNvbnRleHQudHJhbnNsYXRlKC1wb3MueCwgLXBvcy55KTtcbiAgfVxuICBkcmF3VGV4dCgpO1xuICBkcmF3T3ZlcmxheSgpO1xuXG4gIC8vXG4gIC8vIGNsZWFuIHVwIHNoaWZ0XG5cbiAgaWYgKHNoaWZ0VG9PcmlnaW5XaXRoQmIpIHtcbiAgICBjb250ZXh0LnRyYW5zbGF0ZShiYi54MSwgYmIueTEpO1xuICB9XG59O1xudmFyIGRyYXdOb2RlT3ZlcmxheVVuZGVybGF5ID0gZnVuY3Rpb24gZHJhd05vZGVPdmVybGF5VW5kZXJsYXkob3ZlcmxheU9yVW5kZXJsYXkpIHtcbiAgaWYgKCFbJ292ZXJsYXknLCAndW5kZXJsYXknXS5pbmNsdWRlcyhvdmVybGF5T3JVbmRlcmxheSkpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ0ludmFsaWQgc3RhdGUnKTtcbiAgfVxuICByZXR1cm4gZnVuY3Rpb24gKGNvbnRleHQsIG5vZGUsIHBvcywgbm9kZVdpZHRoLCBub2RlSGVpZ2h0KSB7XG4gICAgdmFyIHIgPSB0aGlzO1xuICAgIGlmICghbm9kZS52aXNpYmxlKCkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdmFyIHBhZGRpbmcgPSBub2RlLnBzdHlsZShcIlwiLmNvbmNhdChvdmVybGF5T3JVbmRlcmxheSwgXCItcGFkZGluZ1wiKSkucGZWYWx1ZTtcbiAgICB2YXIgb3BhY2l0eSA9IG5vZGUucHN0eWxlKFwiXCIuY29uY2F0KG92ZXJsYXlPclVuZGVybGF5LCBcIi1vcGFjaXR5XCIpKS52YWx1ZTtcbiAgICB2YXIgY29sb3IgPSBub2RlLnBzdHlsZShcIlwiLmNvbmNhdChvdmVybGF5T3JVbmRlcmxheSwgXCItY29sb3JcIikpLnZhbHVlO1xuICAgIHZhciBzaGFwZSA9IG5vZGUucHN0eWxlKFwiXCIuY29uY2F0KG92ZXJsYXlPclVuZGVybGF5LCBcIi1zaGFwZVwiKSkudmFsdWU7XG4gICAgdmFyIHJhZGl1cyA9IG5vZGUucHN0eWxlKFwiXCIuY29uY2F0KG92ZXJsYXlPclVuZGVybGF5LCBcIi1jb3JuZXItcmFkaXVzXCIpKS52YWx1ZTtcbiAgICBpZiAob3BhY2l0eSA+IDApIHtcbiAgICAgIHBvcyA9IHBvcyB8fCBub2RlLnBvc2l0aW9uKCk7XG4gICAgICBpZiAobm9kZVdpZHRoID09IG51bGwgfHwgbm9kZUhlaWdodCA9PSBudWxsKSB7XG4gICAgICAgIHZhciBfcGFkZGluZyA9IG5vZGUucGFkZGluZygpO1xuICAgICAgICBub2RlV2lkdGggPSBub2RlLndpZHRoKCkgKyAyICogX3BhZGRpbmc7XG4gICAgICAgIG5vZGVIZWlnaHQgPSBub2RlLmhlaWdodCgpICsgMiAqIF9wYWRkaW5nO1xuICAgICAgfVxuICAgICAgci5jb2xvckZpbGxTdHlsZShjb250ZXh0LCBjb2xvclswXSwgY29sb3JbMV0sIGNvbG9yWzJdLCBvcGFjaXR5KTtcbiAgICAgIHIubm9kZVNoYXBlc1tzaGFwZV0uZHJhdyhjb250ZXh0LCBwb3MueCwgcG9zLnksIG5vZGVXaWR0aCArIHBhZGRpbmcgKiAyLCBub2RlSGVpZ2h0ICsgcGFkZGluZyAqIDIsIHJhZGl1cyk7XG4gICAgICBjb250ZXh0LmZpbGwoKTtcbiAgICB9XG4gIH07XG59O1xuQ1JwJDYuZHJhd05vZGVPdmVybGF5ID0gZHJhd05vZGVPdmVybGF5VW5kZXJsYXkoJ292ZXJsYXknKTtcbkNScCQ2LmRyYXdOb2RlVW5kZXJsYXkgPSBkcmF3Tm9kZU92ZXJsYXlVbmRlcmxheSgndW5kZXJsYXknKTtcblxuLy8gZG9lcyB0aGUgbm9kZSBoYXZlIGF0IGxlYXN0IG9uZSBwaWUgcGllY2U/XG5DUnAkNi5oYXNQaWUgPSBmdW5jdGlvbiAobm9kZSkge1xuICBub2RlID0gbm9kZVswXTsgLy8gZW5zdXJlIGVsZSByZWZcblxuICByZXR1cm4gbm9kZS5fcHJpdmF0ZS5oYXNQaWU7XG59O1xuQ1JwJDYuZHJhd1BpZSA9IGZ1bmN0aW9uIChjb250ZXh0LCBub2RlLCBub2RlT3BhY2l0eSwgcG9zKSB7XG4gIG5vZGUgPSBub2RlWzBdOyAvLyBlbnN1cmUgZWxlIHJlZlxuICBwb3MgPSBwb3MgfHwgbm9kZS5wb3NpdGlvbigpO1xuICB2YXIgY3lTdHlsZSA9IG5vZGUuY3koKS5zdHlsZSgpO1xuICB2YXIgcGllU2l6ZSA9IG5vZGUucHN0eWxlKCdwaWUtc2l6ZScpO1xuICB2YXIgeCA9IHBvcy54O1xuICB2YXIgeSA9IHBvcy55O1xuICB2YXIgbm9kZVcgPSBub2RlLndpZHRoKCk7XG4gIHZhciBub2RlSCA9IG5vZGUuaGVpZ2h0KCk7XG4gIHZhciByYWRpdXMgPSBNYXRoLm1pbihub2RlVywgbm9kZUgpIC8gMjsgLy8gbXVzdCBmaXQgaW4gbm9kZVxuICB2YXIgbGFzdFBlcmNlbnQgPSAwOyAvLyB3aGF0ICUgdG8gY29udGludWUgZHJhd2luZyBwaWUgc2xpY2VzIGZyb20gb24gWzAsIDFdXG4gIHZhciB1c2VQYXRocyA9IHRoaXMudXNlUGF0aHMoKTtcbiAgaWYgKHVzZVBhdGhzKSB7XG4gICAgeCA9IDA7XG4gICAgeSA9IDA7XG4gIH1cbiAgaWYgKHBpZVNpemUudW5pdHMgPT09ICclJykge1xuICAgIHJhZGl1cyA9IHJhZGl1cyAqIHBpZVNpemUucGZWYWx1ZTtcbiAgfSBlbHNlIGlmIChwaWVTaXplLnBmVmFsdWUgIT09IHVuZGVmaW5lZCkge1xuICAgIHJhZGl1cyA9IHBpZVNpemUucGZWYWx1ZSAvIDI7XG4gIH1cbiAgZm9yICh2YXIgaSA9IDE7IGkgPD0gY3lTdHlsZS5waWVCYWNrZ3JvdW5kTjsgaSsrKSB7XG4gICAgLy8gMS4uTlxuICAgIHZhciBzaXplID0gbm9kZS5wc3R5bGUoJ3BpZS0nICsgaSArICctYmFja2dyb3VuZC1zaXplJykudmFsdWU7XG4gICAgdmFyIGNvbG9yID0gbm9kZS5wc3R5bGUoJ3BpZS0nICsgaSArICctYmFja2dyb3VuZC1jb2xvcicpLnZhbHVlO1xuICAgIHZhciBvcGFjaXR5ID0gbm9kZS5wc3R5bGUoJ3BpZS0nICsgaSArICctYmFja2dyb3VuZC1vcGFjaXR5JykudmFsdWUgKiBub2RlT3BhY2l0eTtcbiAgICB2YXIgcGVyY2VudCA9IHNpemUgLyAxMDA7IC8vIG1hcCBpbnRlZ2VyIHJhbmdlIFswLCAxMDBdIHRvIFswLCAxXVxuXG4gICAgLy8gcGVyY2VudCBjYW4ndCBwdXNoIGJleW9uZCAxXG4gICAgaWYgKHBlcmNlbnQgKyBsYXN0UGVyY2VudCA+IDEpIHtcbiAgICAgIHBlcmNlbnQgPSAxIC0gbGFzdFBlcmNlbnQ7XG4gICAgfVxuICAgIHZhciBhbmdsZVN0YXJ0ID0gMS41ICogTWF0aC5QSSArIDIgKiBNYXRoLlBJICogbGFzdFBlcmNlbnQ7IC8vIHN0YXJ0IGF0IDEyIG8nY2xvY2sgYW5kIGdvIGNsb2Nrd2lzZVxuICAgIHZhciBhbmdsZURlbHRhID0gMiAqIE1hdGguUEkgKiBwZXJjZW50O1xuICAgIHZhciBhbmdsZUVuZCA9IGFuZ2xlU3RhcnQgKyBhbmdsZURlbHRhO1xuXG4gICAgLy8gaWdub3JlIGlmXG4gICAgLy8gLSB6ZXJvIHNpemVcbiAgICAvLyAtIHdlJ3JlIGFscmVhZHkgYmV5b25kIHRoZSBmdWxsIGNpcmNsZVxuICAgIC8vIC0gYWRkaW5nIHRoZSBjdXJyZW50IHNsaWNlIHdvdWxkIGdvIGJleW9uZCB0aGUgZnVsbCBjaXJjbGVcbiAgICBpZiAoc2l6ZSA9PT0gMCB8fCBsYXN0UGVyY2VudCA+PSAxIHx8IGxhc3RQZXJjZW50ICsgcGVyY2VudCA+IDEpIHtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cbiAgICBjb250ZXh0LmJlZ2luUGF0aCgpO1xuICAgIGNvbnRleHQubW92ZVRvKHgsIHkpO1xuICAgIGNvbnRleHQuYXJjKHgsIHksIHJhZGl1cywgYW5nbGVTdGFydCwgYW5nbGVFbmQpO1xuICAgIGNvbnRleHQuY2xvc2VQYXRoKCk7XG4gICAgdGhpcy5jb2xvckZpbGxTdHlsZShjb250ZXh0LCBjb2xvclswXSwgY29sb3JbMV0sIGNvbG9yWzJdLCBvcGFjaXR5KTtcbiAgICBjb250ZXh0LmZpbGwoKTtcbiAgICBsYXN0UGVyY2VudCArPSBwZXJjZW50O1xuICB9XG59O1xuXG52YXIgQ1JwJDUgPSB7fTtcbnZhciBtb3Rpb25CbHVyRGVsYXkgPSAxMDA7XG5cbi8vIHZhciBpc0ZpcmVmb3ggPSB0eXBlb2YgSW5zdGFsbFRyaWdnZXIgIT09ICd1bmRlZmluZWQnO1xuXG5DUnAkNS5nZXRQaXhlbFJhdGlvID0gZnVuY3Rpb24gKCkge1xuICB2YXIgY29udGV4dCA9IHRoaXMuZGF0YS5jb250ZXh0c1swXTtcbiAgaWYgKHRoaXMuZm9yY2VkUGl4ZWxSYXRpbyAhPSBudWxsKSB7XG4gICAgcmV0dXJuIHRoaXMuZm9yY2VkUGl4ZWxSYXRpbztcbiAgfVxuICB2YXIgY29udGFpbmVyV2luZG93ID0gdGhpcy5jeS53aW5kb3coKTtcbiAgdmFyIGJhY2tpbmdTdG9yZSA9IGNvbnRleHQuYmFja2luZ1N0b3JlUGl4ZWxSYXRpbyB8fCBjb250ZXh0LndlYmtpdEJhY2tpbmdTdG9yZVBpeGVsUmF0aW8gfHwgY29udGV4dC5tb3pCYWNraW5nU3RvcmVQaXhlbFJhdGlvIHx8IGNvbnRleHQubXNCYWNraW5nU3RvcmVQaXhlbFJhdGlvIHx8IGNvbnRleHQub0JhY2tpbmdTdG9yZVBpeGVsUmF0aW8gfHwgY29udGV4dC5iYWNraW5nU3RvcmVQaXhlbFJhdGlvIHx8IDE7XG4gIHJldHVybiAoY29udGFpbmVyV2luZG93LmRldmljZVBpeGVsUmF0aW8gfHwgMSkgLyBiYWNraW5nU3RvcmU7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tdW5kZWZcbn07XG5DUnAkNS5wYWludENhY2hlID0gZnVuY3Rpb24gKGNvbnRleHQpIHtcbiAgdmFyIGNhY2hlcyA9IHRoaXMucGFpbnRDYWNoZXMgPSB0aGlzLnBhaW50Q2FjaGVzIHx8IFtdO1xuICB2YXIgbmVlZFRvQ3JlYXRlQ2FjaGUgPSB0cnVlO1xuICB2YXIgY2FjaGU7XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgY2FjaGVzLmxlbmd0aDsgaSsrKSB7XG4gICAgY2FjaGUgPSBjYWNoZXNbaV07XG4gICAgaWYgKGNhY2hlLmNvbnRleHQgPT09IGNvbnRleHQpIHtcbiAgICAgIG5lZWRUb0NyZWF0ZUNhY2hlID0gZmFsc2U7XG4gICAgICBicmVhaztcbiAgICB9XG4gIH1cbiAgaWYgKG5lZWRUb0NyZWF0ZUNhY2hlKSB7XG4gICAgY2FjaGUgPSB7XG4gICAgICBjb250ZXh0OiBjb250ZXh0XG4gICAgfTtcbiAgICBjYWNoZXMucHVzaChjYWNoZSk7XG4gIH1cbiAgcmV0dXJuIGNhY2hlO1xufTtcbkNScCQ1LmNyZWF0ZUdyYWRpZW50U3R5bGVGb3IgPSBmdW5jdGlvbiAoY29udGV4dCwgc2hhcGVTdHlsZU5hbWUsIGVsZSwgZmlsbCwgb3BhY2l0eSkge1xuICB2YXIgZ3JhZGllbnRTdHlsZTtcbiAgdmFyIHVzZVBhdGhzID0gdGhpcy51c2VQYXRocygpO1xuICB2YXIgY29sb3JzID0gZWxlLnBzdHlsZShzaGFwZVN0eWxlTmFtZSArICctZ3JhZGllbnQtc3RvcC1jb2xvcnMnKS52YWx1ZSxcbiAgICBwb3NpdGlvbnMgPSBlbGUucHN0eWxlKHNoYXBlU3R5bGVOYW1lICsgJy1ncmFkaWVudC1zdG9wLXBvc2l0aW9ucycpLnBmVmFsdWU7XG4gIGlmIChmaWxsID09PSAncmFkaWFsLWdyYWRpZW50Jykge1xuICAgIGlmIChlbGUuaXNFZGdlKCkpIHtcbiAgICAgIHZhciBzdGFydCA9IGVsZS5zb3VyY2VFbmRwb2ludCgpLFxuICAgICAgICBlbmQgPSBlbGUudGFyZ2V0RW5kcG9pbnQoKSxcbiAgICAgICAgbWlkID0gZWxlLm1pZHBvaW50KCk7XG4gICAgICB2YXIgZDEgPSBkaXN0KHN0YXJ0LCBtaWQpO1xuICAgICAgdmFyIGQyID0gZGlzdChlbmQsIG1pZCk7XG4gICAgICBncmFkaWVudFN0eWxlID0gY29udGV4dC5jcmVhdGVSYWRpYWxHcmFkaWVudChtaWQueCwgbWlkLnksIDAsIG1pZC54LCBtaWQueSwgTWF0aC5tYXgoZDEsIGQyKSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHZhciBwb3MgPSB1c2VQYXRocyA/IHtcbiAgICAgICAgICB4OiAwLFxuICAgICAgICAgIHk6IDBcbiAgICAgICAgfSA6IGVsZS5wb3NpdGlvbigpLFxuICAgICAgICB3aWR0aCA9IGVsZS5wYWRkZWRXaWR0aCgpLFxuICAgICAgICBoZWlnaHQgPSBlbGUucGFkZGVkSGVpZ2h0KCk7XG4gICAgICBncmFkaWVudFN0eWxlID0gY29udGV4dC5jcmVhdGVSYWRpYWxHcmFkaWVudChwb3MueCwgcG9zLnksIDAsIHBvcy54LCBwb3MueSwgTWF0aC5tYXgod2lkdGgsIGhlaWdodCkpO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICBpZiAoZWxlLmlzRWRnZSgpKSB7XG4gICAgICB2YXIgX3N0YXJ0ID0gZWxlLnNvdXJjZUVuZHBvaW50KCksXG4gICAgICAgIF9lbmQgPSBlbGUudGFyZ2V0RW5kcG9pbnQoKTtcbiAgICAgIGdyYWRpZW50U3R5bGUgPSBjb250ZXh0LmNyZWF0ZUxpbmVhckdyYWRpZW50KF9zdGFydC54LCBfc3RhcnQueSwgX2VuZC54LCBfZW5kLnkpO1xuICAgIH0gZWxzZSB7XG4gICAgICB2YXIgX3BvcyA9IHVzZVBhdGhzID8ge1xuICAgICAgICAgIHg6IDAsXG4gICAgICAgICAgeTogMFxuICAgICAgICB9IDogZWxlLnBvc2l0aW9uKCksXG4gICAgICAgIF93aWR0aCA9IGVsZS5wYWRkZWRXaWR0aCgpLFxuICAgICAgICBfaGVpZ2h0ID0gZWxlLnBhZGRlZEhlaWdodCgpLFxuICAgICAgICBoYWxmV2lkdGggPSBfd2lkdGggLyAyLFxuICAgICAgICBoYWxmSGVpZ2h0ID0gX2hlaWdodCAvIDI7XG4gICAgICB2YXIgZGlyZWN0aW9uID0gZWxlLnBzdHlsZSgnYmFja2dyb3VuZC1ncmFkaWVudC1kaXJlY3Rpb24nKS52YWx1ZTtcbiAgICAgIHN3aXRjaCAoZGlyZWN0aW9uKSB7XG4gICAgICAgIGNhc2UgJ3RvLWJvdHRvbSc6XG4gICAgICAgICAgZ3JhZGllbnRTdHlsZSA9IGNvbnRleHQuY3JlYXRlTGluZWFyR3JhZGllbnQoX3Bvcy54LCBfcG9zLnkgLSBoYWxmSGVpZ2h0LCBfcG9zLngsIF9wb3MueSArIGhhbGZIZWlnaHQpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlICd0by10b3AnOlxuICAgICAgICAgIGdyYWRpZW50U3R5bGUgPSBjb250ZXh0LmNyZWF0ZUxpbmVhckdyYWRpZW50KF9wb3MueCwgX3Bvcy55ICsgaGFsZkhlaWdodCwgX3Bvcy54LCBfcG9zLnkgLSBoYWxmSGVpZ2h0KTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAndG8tbGVmdCc6XG4gICAgICAgICAgZ3JhZGllbnRTdHlsZSA9IGNvbnRleHQuY3JlYXRlTGluZWFyR3JhZGllbnQoX3Bvcy54ICsgaGFsZldpZHRoLCBfcG9zLnksIF9wb3MueCAtIGhhbGZXaWR0aCwgX3Bvcy55KTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAndG8tcmlnaHQnOlxuICAgICAgICAgIGdyYWRpZW50U3R5bGUgPSBjb250ZXh0LmNyZWF0ZUxpbmVhckdyYWRpZW50KF9wb3MueCAtIGhhbGZXaWR0aCwgX3Bvcy55LCBfcG9zLnggKyBoYWxmV2lkdGgsIF9wb3MueSk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgJ3RvLWJvdHRvbS1yaWdodCc6XG4gICAgICAgIGNhc2UgJ3RvLXJpZ2h0LWJvdHRvbSc6XG4gICAgICAgICAgZ3JhZGllbnRTdHlsZSA9IGNvbnRleHQuY3JlYXRlTGluZWFyR3JhZGllbnQoX3Bvcy54IC0gaGFsZldpZHRoLCBfcG9zLnkgLSBoYWxmSGVpZ2h0LCBfcG9zLnggKyBoYWxmV2lkdGgsIF9wb3MueSArIGhhbGZIZWlnaHQpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlICd0by10b3AtcmlnaHQnOlxuICAgICAgICBjYXNlICd0by1yaWdodC10b3AnOlxuICAgICAgICAgIGdyYWRpZW50U3R5bGUgPSBjb250ZXh0LmNyZWF0ZUxpbmVhckdyYWRpZW50KF9wb3MueCAtIGhhbGZXaWR0aCwgX3Bvcy55ICsgaGFsZkhlaWdodCwgX3Bvcy54ICsgaGFsZldpZHRoLCBfcG9zLnkgLSBoYWxmSGVpZ2h0KTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAndG8tYm90dG9tLWxlZnQnOlxuICAgICAgICBjYXNlICd0by1sZWZ0LWJvdHRvbSc6XG4gICAgICAgICAgZ3JhZGllbnRTdHlsZSA9IGNvbnRleHQuY3JlYXRlTGluZWFyR3JhZGllbnQoX3Bvcy54ICsgaGFsZldpZHRoLCBfcG9zLnkgLSBoYWxmSGVpZ2h0LCBfcG9zLnggLSBoYWxmV2lkdGgsIF9wb3MueSArIGhhbGZIZWlnaHQpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlICd0by10b3AtbGVmdCc6XG4gICAgICAgIGNhc2UgJ3RvLWxlZnQtdG9wJzpcbiAgICAgICAgICBncmFkaWVudFN0eWxlID0gY29udGV4dC5jcmVhdGVMaW5lYXJHcmFkaWVudChfcG9zLnggKyBoYWxmV2lkdGgsIF9wb3MueSArIGhhbGZIZWlnaHQsIF9wb3MueCAtIGhhbGZXaWR0aCwgX3Bvcy55IC0gaGFsZkhlaWdodCk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfVxuICB9XG4gIGlmICghZ3JhZGllbnRTdHlsZSkgcmV0dXJuIG51bGw7IC8vIGludmFsaWQgZ3JhZGllbnQgc3R5bGVcblxuICB2YXIgaGFzUG9zaXRpb25zID0gcG9zaXRpb25zLmxlbmd0aCA9PT0gY29sb3JzLmxlbmd0aDtcbiAgdmFyIGxlbmd0aCA9IGNvbG9ycy5sZW5ndGg7XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHtcbiAgICBncmFkaWVudFN0eWxlLmFkZENvbG9yU3RvcChoYXNQb3NpdGlvbnMgPyBwb3NpdGlvbnNbaV0gOiBpIC8gKGxlbmd0aCAtIDEpLCAncmdiYSgnICsgY29sb3JzW2ldWzBdICsgJywnICsgY29sb3JzW2ldWzFdICsgJywnICsgY29sb3JzW2ldWzJdICsgJywnICsgb3BhY2l0eSArICcpJyk7XG4gIH1cbiAgcmV0dXJuIGdyYWRpZW50U3R5bGU7XG59O1xuQ1JwJDUuZ3JhZGllbnRGaWxsU3R5bGUgPSBmdW5jdGlvbiAoY29udGV4dCwgZWxlLCBmaWxsLCBvcGFjaXR5KSB7XG4gIHZhciBncmFkaWVudFN0eWxlID0gdGhpcy5jcmVhdGVHcmFkaWVudFN0eWxlRm9yKGNvbnRleHQsICdiYWNrZ3JvdW5kJywgZWxlLCBmaWxsLCBvcGFjaXR5KTtcbiAgaWYgKCFncmFkaWVudFN0eWxlKSByZXR1cm4gbnVsbDsgLy8gZXJyb3JcbiAgY29udGV4dC5maWxsU3R5bGUgPSBncmFkaWVudFN0eWxlO1xufTtcbkNScCQ1LmNvbG9yRmlsbFN0eWxlID0gZnVuY3Rpb24gKGNvbnRleHQsIHIsIGcsIGIsIGEpIHtcbiAgY29udGV4dC5maWxsU3R5bGUgPSAncmdiYSgnICsgciArICcsJyArIGcgKyAnLCcgKyBiICsgJywnICsgYSArICcpJztcbiAgLy8gdHVybiBvZmYgZm9yIG5vdywgc2VlbXMgY29udGV4dCBkb2VzIGl0cyBvd24gY2FjaGluZ1xuXG4gIC8vIHZhciBjYWNoZSA9IHRoaXMucGFpbnRDYWNoZShjb250ZXh0KTtcblxuICAvLyB2YXIgZmlsbFN0eWxlID0gJ3JnYmEoJyArIHIgKyAnLCcgKyBnICsgJywnICsgYiArICcsJyArIGEgKyAnKSc7XG5cbiAgLy8gaWYoIGNhY2hlLmZpbGxTdHlsZSAhPT0gZmlsbFN0eWxlICl7XG4gIC8vICAgY29udGV4dC5maWxsU3R5bGUgPSBjYWNoZS5maWxsU3R5bGUgPSBmaWxsU3R5bGU7XG4gIC8vIH1cbn07XG5DUnAkNS5lbGVGaWxsU3R5bGUgPSBmdW5jdGlvbiAoY29udGV4dCwgZWxlLCBvcGFjaXR5KSB7XG4gIHZhciBiYWNrZ3JvdW5kRmlsbCA9IGVsZS5wc3R5bGUoJ2JhY2tncm91bmQtZmlsbCcpLnZhbHVlO1xuICBpZiAoYmFja2dyb3VuZEZpbGwgPT09ICdsaW5lYXItZ3JhZGllbnQnIHx8IGJhY2tncm91bmRGaWxsID09PSAncmFkaWFsLWdyYWRpZW50Jykge1xuICAgIHRoaXMuZ3JhZGllbnRGaWxsU3R5bGUoY29udGV4dCwgZWxlLCBiYWNrZ3JvdW5kRmlsbCwgb3BhY2l0eSk7XG4gIH0gZWxzZSB7XG4gICAgdmFyIGJhY2tncm91bmRDb2xvciA9IGVsZS5wc3R5bGUoJ2JhY2tncm91bmQtY29sb3InKS52YWx1ZTtcbiAgICB0aGlzLmNvbG9yRmlsbFN0eWxlKGNvbnRleHQsIGJhY2tncm91bmRDb2xvclswXSwgYmFja2dyb3VuZENvbG9yWzFdLCBiYWNrZ3JvdW5kQ29sb3JbMl0sIG9wYWNpdHkpO1xuICB9XG59O1xuQ1JwJDUuZ3JhZGllbnRTdHJva2VTdHlsZSA9IGZ1bmN0aW9uIChjb250ZXh0LCBlbGUsIGZpbGwsIG9wYWNpdHkpIHtcbiAgdmFyIGdyYWRpZW50U3R5bGUgPSB0aGlzLmNyZWF0ZUdyYWRpZW50U3R5bGVGb3IoY29udGV4dCwgJ2xpbmUnLCBlbGUsIGZpbGwsIG9wYWNpdHkpO1xuICBpZiAoIWdyYWRpZW50U3R5bGUpIHJldHVybiBudWxsOyAvLyBlcnJvclxuICBjb250ZXh0LnN0cm9rZVN0eWxlID0gZ3JhZGllbnRTdHlsZTtcbn07XG5DUnAkNS5jb2xvclN0cm9rZVN0eWxlID0gZnVuY3Rpb24gKGNvbnRleHQsIHIsIGcsIGIsIGEpIHtcbiAgY29udGV4dC5zdHJva2VTdHlsZSA9ICdyZ2JhKCcgKyByICsgJywnICsgZyArICcsJyArIGIgKyAnLCcgKyBhICsgJyknO1xuICAvLyB0dXJuIG9mZiBmb3Igbm93LCBzZWVtcyBjb250ZXh0IGRvZXMgaXRzIG93biBjYWNoaW5nXG5cbiAgLy8gdmFyIGNhY2hlID0gdGhpcy5wYWludENhY2hlKGNvbnRleHQpO1xuXG4gIC8vIHZhciBzdHJva2VTdHlsZSA9ICdyZ2JhKCcgKyByICsgJywnICsgZyArICcsJyArIGIgKyAnLCcgKyBhICsgJyknO1xuXG4gIC8vIGlmKCBjYWNoZS5zdHJva2VTdHlsZSAhPT0gc3Ryb2tlU3R5bGUgKXtcbiAgLy8gICBjb250ZXh0LnN0cm9rZVN0eWxlID0gY2FjaGUuc3Ryb2tlU3R5bGUgPSBzdHJva2VTdHlsZTtcbiAgLy8gfVxufTtcbkNScCQ1LmVsZVN0cm9rZVN0eWxlID0gZnVuY3Rpb24gKGNvbnRleHQsIGVsZSwgb3BhY2l0eSkge1xuICB2YXIgbGluZUZpbGwgPSBlbGUucHN0eWxlKCdsaW5lLWZpbGwnKS52YWx1ZTtcbiAgaWYgKGxpbmVGaWxsID09PSAnbGluZWFyLWdyYWRpZW50JyB8fCBsaW5lRmlsbCA9PT0gJ3JhZGlhbC1ncmFkaWVudCcpIHtcbiAgICB0aGlzLmdyYWRpZW50U3Ryb2tlU3R5bGUoY29udGV4dCwgZWxlLCBsaW5lRmlsbCwgb3BhY2l0eSk7XG4gIH0gZWxzZSB7XG4gICAgdmFyIGxpbmVDb2xvciA9IGVsZS5wc3R5bGUoJ2xpbmUtY29sb3InKS52YWx1ZTtcbiAgICB0aGlzLmNvbG9yU3Ryb2tlU3R5bGUoY29udGV4dCwgbGluZUNvbG9yWzBdLCBsaW5lQ29sb3JbMV0sIGxpbmVDb2xvclsyXSwgb3BhY2l0eSk7XG4gIH1cbn07XG5cbi8vIFJlc2l6ZSBjYW52YXNcbkNScCQ1Lm1hdGNoQ2FudmFzU2l6ZSA9IGZ1bmN0aW9uIChjb250YWluZXIpIHtcbiAgdmFyIHIgPSB0aGlzO1xuICB2YXIgZGF0YSA9IHIuZGF0YTtcbiAgdmFyIGJiID0gci5maW5kQ29udGFpbmVyQ2xpZW50Q29vcmRzKCk7XG4gIHZhciB3aWR0aCA9IGJiWzJdO1xuICB2YXIgaGVpZ2h0ID0gYmJbM107XG4gIHZhciBwaXhlbFJhdGlvID0gci5nZXRQaXhlbFJhdGlvKCk7XG4gIHZhciBtYlB4UmF0aW8gPSByLm1vdGlvbkJsdXJQeFJhdGlvO1xuICBpZiAoY29udGFpbmVyID09PSByLmRhdGEuYnVmZmVyQ2FudmFzZXNbci5NT1RJT05CTFVSX0JVRkZFUl9OT0RFXSB8fCBjb250YWluZXIgPT09IHIuZGF0YS5idWZmZXJDYW52YXNlc1tyLk1PVElPTkJMVVJfQlVGRkVSX0RSQUddKSB7XG4gICAgcGl4ZWxSYXRpbyA9IG1iUHhSYXRpbztcbiAgfVxuICB2YXIgY2FudmFzV2lkdGggPSB3aWR0aCAqIHBpeGVsUmF0aW87XG4gIHZhciBjYW52YXNIZWlnaHQgPSBoZWlnaHQgKiBwaXhlbFJhdGlvO1xuICB2YXIgY2FudmFzO1xuICBpZiAoY2FudmFzV2lkdGggPT09IHIuY2FudmFzV2lkdGggJiYgY2FudmFzSGVpZ2h0ID09PSByLmNhbnZhc0hlaWdodCkge1xuICAgIHJldHVybjsgLy8gc2F2ZSBjeWNsZXMgaWYgc2FtZVxuICB9XG4gIHIuZm9udENhY2hlcyA9IG51bGw7IC8vIHJlc2l6aW5nIHJlc2V0cyB0aGUgc3R5bGVcblxuICB2YXIgY2FudmFzQ29udGFpbmVyID0gZGF0YS5jYW52YXNDb250YWluZXI7XG4gIGNhbnZhc0NvbnRhaW5lci5zdHlsZS53aWR0aCA9IHdpZHRoICsgJ3B4JztcbiAgY2FudmFzQ29udGFpbmVyLnN0eWxlLmhlaWdodCA9IGhlaWdodCArICdweCc7XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgci5DQU5WQVNfTEFZRVJTOyBpKyspIHtcbiAgICBjYW52YXMgPSBkYXRhLmNhbnZhc2VzW2ldO1xuICAgIGNhbnZhcy53aWR0aCA9IGNhbnZhc1dpZHRoO1xuICAgIGNhbnZhcy5oZWlnaHQgPSBjYW52YXNIZWlnaHQ7XG4gICAgY2FudmFzLnN0eWxlLndpZHRoID0gd2lkdGggKyAncHgnO1xuICAgIGNhbnZhcy5zdHlsZS5oZWlnaHQgPSBoZWlnaHQgKyAncHgnO1xuICB9XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgci5CVUZGRVJfQ09VTlQ7IGkrKykge1xuICAgIGNhbnZhcyA9IGRhdGEuYnVmZmVyQ2FudmFzZXNbaV07XG4gICAgY2FudmFzLndpZHRoID0gY2FudmFzV2lkdGg7XG4gICAgY2FudmFzLmhlaWdodCA9IGNhbnZhc0hlaWdodDtcbiAgICBjYW52YXMuc3R5bGUud2lkdGggPSB3aWR0aCArICdweCc7XG4gICAgY2FudmFzLnN0eWxlLmhlaWdodCA9IGhlaWdodCArICdweCc7XG4gIH1cbiAgci50ZXh0dXJlTXVsdCA9IDE7XG4gIGlmIChwaXhlbFJhdGlvIDw9IDEpIHtcbiAgICBjYW52YXMgPSBkYXRhLmJ1ZmZlckNhbnZhc2VzW3IuVEVYVFVSRV9CVUZGRVJdO1xuICAgIHIudGV4dHVyZU11bHQgPSAyO1xuICAgIGNhbnZhcy53aWR0aCA9IGNhbnZhc1dpZHRoICogci50ZXh0dXJlTXVsdDtcbiAgICBjYW52YXMuaGVpZ2h0ID0gY2FudmFzSGVpZ2h0ICogci50ZXh0dXJlTXVsdDtcbiAgfVxuICByLmNhbnZhc1dpZHRoID0gY2FudmFzV2lkdGg7XG4gIHIuY2FudmFzSGVpZ2h0ID0gY2FudmFzSGVpZ2h0O1xuICByLnBpeGVsUmF0aW8gPSBwaXhlbFJhdGlvO1xufTtcbkNScCQ1LnJlbmRlclRvID0gZnVuY3Rpb24gKGN4dCwgem9vbSwgcGFuLCBweFJhdGlvKSB7XG4gIHRoaXMucmVuZGVyKHtcbiAgICBmb3JjZWRDb250ZXh0OiBjeHQsXG4gICAgZm9yY2VkWm9vbTogem9vbSxcbiAgICBmb3JjZWRQYW46IHBhbixcbiAgICBkcmF3QWxsTGF5ZXJzOiB0cnVlLFxuICAgIGZvcmNlZFB4UmF0aW86IHB4UmF0aW9cbiAgfSk7XG59O1xuQ1JwJDUuY2xlYXJDYW52YXMgPSBmdW5jdGlvbiAoKSB7XG4gIHZhciByID0gdGhpcztcbiAgdmFyIGRhdGEgPSByLmRhdGE7XG4gIGZ1bmN0aW9uIGNsZWFyKGNvbnRleHQpIHtcbiAgICBjb250ZXh0LmNsZWFyUmVjdCgwLCAwLCByLmNhbnZhc1dpZHRoLCByLmNhbnZhc0hlaWdodCk7XG4gIH1cbiAgY2xlYXIoZGF0YS5jb250ZXh0c1tyLk5PREVdKTtcbiAgY2xlYXIoZGF0YS5jb250ZXh0c1tyLkRSQUddKTtcbn07XG5DUnAkNS5yZW5kZXIgPSBmdW5jdGlvbiAob3B0aW9ucykge1xuICB2YXIgciA9IHRoaXM7XG4gIG9wdGlvbnMgPSBvcHRpb25zIHx8IHN0YXRpY0VtcHR5T2JqZWN0KCk7XG4gIHZhciBjeSA9IHIuY3k7XG4gIHZhciBmb3JjZWRDb250ZXh0ID0gb3B0aW9ucy5mb3JjZWRDb250ZXh0O1xuICB2YXIgZHJhd0FsbExheWVycyA9IG9wdGlvbnMuZHJhd0FsbExheWVycztcbiAgdmFyIGRyYXdPbmx5Tm9kZUxheWVyID0gb3B0aW9ucy5kcmF3T25seU5vZGVMYXllcjtcbiAgdmFyIGZvcmNlZFpvb20gPSBvcHRpb25zLmZvcmNlZFpvb207XG4gIHZhciBmb3JjZWRQYW4gPSBvcHRpb25zLmZvcmNlZFBhbjtcbiAgdmFyIHBpeGVsUmF0aW8gPSBvcHRpb25zLmZvcmNlZFB4UmF0aW8gPT09IHVuZGVmaW5lZCA/IHRoaXMuZ2V0UGl4ZWxSYXRpbygpIDogb3B0aW9ucy5mb3JjZWRQeFJhdGlvO1xuICB2YXIgZGF0YSA9IHIuZGF0YTtcbiAgdmFyIG5lZWREcmF3ID0gZGF0YS5jYW52YXNOZWVkc1JlZHJhdztcbiAgdmFyIHRleHR1cmVEcmF3ID0gci50ZXh0dXJlT25WaWV3cG9ydCAmJiAhZm9yY2VkQ29udGV4dCAmJiAoci5waW5jaGluZyB8fCByLmhvdmVyRGF0YS5kcmFnZ2luZyB8fCByLnN3aXBlUGFubmluZyB8fCByLmRhdGEud2hlZWxab29taW5nKTtcbiAgdmFyIG1vdGlvbkJsdXIgPSBvcHRpb25zLm1vdGlvbkJsdXIgIT09IHVuZGVmaW5lZCA/IG9wdGlvbnMubW90aW9uQmx1ciA6IHIubW90aW9uQmx1cjtcbiAgdmFyIG1iUHhSYXRpbyA9IHIubW90aW9uQmx1clB4UmF0aW87XG4gIHZhciBoYXNDb21wb3VuZE5vZGVzID0gY3kuaGFzQ29tcG91bmROb2RlcygpO1xuICB2YXIgaW5Ob2RlRHJhZ0dlc3R1cmUgPSByLmhvdmVyRGF0YS5kcmFnZ2luZ0VsZXM7XG4gIHZhciBpbkJveFNlbGVjdGlvbiA9IHIuaG92ZXJEYXRhLnNlbGVjdGluZyB8fCByLnRvdWNoRGF0YS5zZWxlY3RpbmcgPyB0cnVlIDogZmFsc2U7XG4gIG1vdGlvbkJsdXIgPSBtb3Rpb25CbHVyICYmICFmb3JjZWRDb250ZXh0ICYmIHIubW90aW9uQmx1ckVuYWJsZWQgJiYgIWluQm94U2VsZWN0aW9uO1xuICB2YXIgbW90aW9uQmx1ckZhZGVFZmZlY3QgPSBtb3Rpb25CbHVyO1xuICBpZiAoIWZvcmNlZENvbnRleHQpIHtcbiAgICBpZiAoci5wcmV2UHhSYXRpbyAhPT0gcGl4ZWxSYXRpbykge1xuICAgICAgci5pbnZhbGlkYXRlQ29udGFpbmVyQ2xpZW50Q29vcmRzQ2FjaGUoKTtcbiAgICAgIHIubWF0Y2hDYW52YXNTaXplKHIuY29udGFpbmVyKTtcbiAgICAgIHIucmVkcmF3SGludCgnZWxlcycsIHRydWUpO1xuICAgICAgci5yZWRyYXdIaW50KCdkcmFnJywgdHJ1ZSk7XG4gICAgfVxuICAgIHIucHJldlB4UmF0aW8gPSBwaXhlbFJhdGlvO1xuICB9XG4gIGlmICghZm9yY2VkQ29udGV4dCAmJiByLm1vdGlvbkJsdXJUaW1lb3V0KSB7XG4gICAgY2xlYXJUaW1lb3V0KHIubW90aW9uQmx1clRpbWVvdXQpO1xuICB9XG4gIGlmIChtb3Rpb25CbHVyKSB7XG4gICAgaWYgKHIubWJGcmFtZXMgPT0gbnVsbCkge1xuICAgICAgci5tYkZyYW1lcyA9IDA7XG4gICAgfVxuICAgIHIubWJGcmFtZXMrKztcbiAgICBpZiAoci5tYkZyYW1lcyA8IDMpIHtcbiAgICAgIC8vIG5lZWQgc2V2ZXJhbCBmcmFtZXMgYmVmb3JlIGV2ZW4gaGlnaCBxdWFsaXR5IG1vdGlvbmJsdXJcbiAgICAgIG1vdGlvbkJsdXJGYWRlRWZmZWN0ID0gZmFsc2U7XG4gICAgfVxuXG4gICAgLy8gZ28gdG8gbG93ZXIgcXVhbGl0eSBibHVycnkgZnJhbWVzIHdoZW4gc2V2ZXJhbCBtL2IgZnJhbWVzIGhhdmUgYmVlbiByZW5kZXJlZCAoYXZvaWRzIGZsYXNoaW5nKVxuICAgIGlmIChyLm1iRnJhbWVzID4gci5taW5NYkxvd1F1YWxGcmFtZXMpIHtcbiAgICAgIC8vci5mdWxsUXVhbGl0eU1iID0gZmFsc2U7XG4gICAgICByLm1vdGlvbkJsdXJQeFJhdGlvID0gci5tYlB4UkJsdXJyeTtcbiAgICB9XG4gIH1cbiAgaWYgKHIuY2xlYXJpbmdNb3Rpb25CbHVyKSB7XG4gICAgci5tb3Rpb25CbHVyUHhSYXRpbyA9IDE7XG4gIH1cblxuICAvLyBiL2MgZHJhd1RvQ29udGV4dCgpIG1heSBiZSBhc3luYyB3LnIudC4gcmVkcmF3KCksIGtlZXAgdHJhY2sgb2YgbGFzdCB0ZXh0dXJlIGZyYW1lXG4gIC8vIGJlY2F1c2UgYSByb2d1ZSBhc3luYyB0ZXh0dXJlIGZyYW1lIHdvdWxkIGNsZWFyIG5lZWREcmF3XG4gIGlmIChyLnRleHR1cmVEcmF3TGFzdEZyYW1lICYmICF0ZXh0dXJlRHJhdykge1xuICAgIG5lZWREcmF3W3IuTk9ERV0gPSB0cnVlO1xuICAgIG5lZWREcmF3W3IuU0VMRUNUX0JPWF0gPSB0cnVlO1xuICB9XG4gIHZhciBzdHlsZSA9IGN5LnN0eWxlKCk7XG4gIHZhciB6b29tID0gY3kuem9vbSgpO1xuICB2YXIgZWZmZWN0aXZlWm9vbSA9IGZvcmNlZFpvb20gIT09IHVuZGVmaW5lZCA/IGZvcmNlZFpvb20gOiB6b29tO1xuICB2YXIgcGFuID0gY3kucGFuKCk7XG4gIHZhciBlZmZlY3RpdmVQYW4gPSB7XG4gICAgeDogcGFuLngsXG4gICAgeTogcGFuLnlcbiAgfTtcbiAgdmFyIHZwID0ge1xuICAgIHpvb206IHpvb20sXG4gICAgcGFuOiB7XG4gICAgICB4OiBwYW4ueCxcbiAgICAgIHk6IHBhbi55XG4gICAgfVxuICB9O1xuICB2YXIgcHJldlZwID0gci5wcmV2Vmlld3BvcnQ7XG4gIHZhciB2aWV3cG9ydElzRGlmZiA9IHByZXZWcCA9PT0gdW5kZWZpbmVkIHx8IHZwLnpvb20gIT09IHByZXZWcC56b29tIHx8IHZwLnBhbi54ICE9PSBwcmV2VnAucGFuLnggfHwgdnAucGFuLnkgIT09IHByZXZWcC5wYW4ueTtcblxuICAvLyB3ZSB3YW50IHRoZSBsb3cgcXVhbGl0eSBtb3Rpb25ibHVyIG9ubHkgd2hlbiB0aGUgdmlld3BvcnQgaXMgYmVpbmcgbWFuaXB1bGF0ZWQgZXRjICh3aGVyZSBpdCdzIG5vdCBub3RpY2VkKVxuICBpZiAoIXZpZXdwb3J0SXNEaWZmICYmICEoaW5Ob2RlRHJhZ0dlc3R1cmUgJiYgIWhhc0NvbXBvdW5kTm9kZXMpKSB7XG4gICAgci5tb3Rpb25CbHVyUHhSYXRpbyA9IDE7XG4gIH1cbiAgaWYgKGZvcmNlZFBhbikge1xuICAgIGVmZmVjdGl2ZVBhbiA9IGZvcmNlZFBhbjtcbiAgfVxuXG4gIC8vIGFwcGx5IHBpeGVsIHJhdGlvXG5cbiAgZWZmZWN0aXZlWm9vbSAqPSBwaXhlbFJhdGlvO1xuICBlZmZlY3RpdmVQYW4ueCAqPSBwaXhlbFJhdGlvO1xuICBlZmZlY3RpdmVQYW4ueSAqPSBwaXhlbFJhdGlvO1xuICB2YXIgZWxlcyA9IHIuZ2V0Q2FjaGVkWlNvcnRlZEVsZXMoKTtcbiAgZnVuY3Rpb24gbWJjbGVhcihjb250ZXh0LCB4LCB5LCB3LCBoKSB7XG4gICAgdmFyIGdjbyA9IGNvbnRleHQuZ2xvYmFsQ29tcG9zaXRlT3BlcmF0aW9uO1xuICAgIGNvbnRleHQuZ2xvYmFsQ29tcG9zaXRlT3BlcmF0aW9uID0gJ2Rlc3RpbmF0aW9uLW91dCc7XG4gICAgci5jb2xvckZpbGxTdHlsZShjb250ZXh0LCAyNTUsIDI1NSwgMjU1LCByLm1vdGlvbkJsdXJUcmFuc3BhcmVuY3kpO1xuICAgIGNvbnRleHQuZmlsbFJlY3QoeCwgeSwgdywgaCk7XG4gICAgY29udGV4dC5nbG9iYWxDb21wb3NpdGVPcGVyYXRpb24gPSBnY287XG4gIH1cbiAgZnVuY3Rpb24gc2V0Q29udGV4dFRyYW5zZm9ybShjb250ZXh0LCBjbGVhcikge1xuICAgIHZhciBlUGFuLCBlWm9vbSwgdywgaDtcbiAgICBpZiAoIXIuY2xlYXJpbmdNb3Rpb25CbHVyICYmIChjb250ZXh0ID09PSBkYXRhLmJ1ZmZlckNvbnRleHRzW3IuTU9USU9OQkxVUl9CVUZGRVJfTk9ERV0gfHwgY29udGV4dCA9PT0gZGF0YS5idWZmZXJDb250ZXh0c1tyLk1PVElPTkJMVVJfQlVGRkVSX0RSQUddKSkge1xuICAgICAgZVBhbiA9IHtcbiAgICAgICAgeDogcGFuLnggKiBtYlB4UmF0aW8sXG4gICAgICAgIHk6IHBhbi55ICogbWJQeFJhdGlvXG4gICAgICB9O1xuICAgICAgZVpvb20gPSB6b29tICogbWJQeFJhdGlvO1xuICAgICAgdyA9IHIuY2FudmFzV2lkdGggKiBtYlB4UmF0aW87XG4gICAgICBoID0gci5jYW52YXNIZWlnaHQgKiBtYlB4UmF0aW87XG4gICAgfSBlbHNlIHtcbiAgICAgIGVQYW4gPSBlZmZlY3RpdmVQYW47XG4gICAgICBlWm9vbSA9IGVmZmVjdGl2ZVpvb207XG4gICAgICB3ID0gci5jYW52YXNXaWR0aDtcbiAgICAgIGggPSByLmNhbnZhc0hlaWdodDtcbiAgICB9XG4gICAgY29udGV4dC5zZXRUcmFuc2Zvcm0oMSwgMCwgMCwgMSwgMCwgMCk7XG4gICAgaWYgKGNsZWFyID09PSAnbW90aW9uQmx1cicpIHtcbiAgICAgIG1iY2xlYXIoY29udGV4dCwgMCwgMCwgdywgaCk7XG4gICAgfSBlbHNlIGlmICghZm9yY2VkQ29udGV4dCAmJiAoY2xlYXIgPT09IHVuZGVmaW5lZCB8fCBjbGVhcikpIHtcbiAgICAgIGNvbnRleHQuY2xlYXJSZWN0KDAsIDAsIHcsIGgpO1xuICAgIH1cbiAgICBpZiAoIWRyYXdBbGxMYXllcnMpIHtcbiAgICAgIGNvbnRleHQudHJhbnNsYXRlKGVQYW4ueCwgZVBhbi55KTtcbiAgICAgIGNvbnRleHQuc2NhbGUoZVpvb20sIGVab29tKTtcbiAgICB9XG4gICAgaWYgKGZvcmNlZFBhbikge1xuICAgICAgY29udGV4dC50cmFuc2xhdGUoZm9yY2VkUGFuLngsIGZvcmNlZFBhbi55KTtcbiAgICB9XG4gICAgaWYgKGZvcmNlZFpvb20pIHtcbiAgICAgIGNvbnRleHQuc2NhbGUoZm9yY2VkWm9vbSwgZm9yY2VkWm9vbSk7XG4gICAgfVxuICB9XG4gIGlmICghdGV4dHVyZURyYXcpIHtcbiAgICByLnRleHR1cmVEcmF3TGFzdEZyYW1lID0gZmFsc2U7XG4gIH1cbiAgaWYgKHRleHR1cmVEcmF3KSB7XG4gICAgci50ZXh0dXJlRHJhd0xhc3RGcmFtZSA9IHRydWU7XG4gICAgaWYgKCFyLnRleHR1cmVDYWNoZSkge1xuICAgICAgci50ZXh0dXJlQ2FjaGUgPSB7fTtcbiAgICAgIHIudGV4dHVyZUNhY2hlLmJiID0gY3kubXV0YWJsZUVsZW1lbnRzKCkuYm91bmRpbmdCb3goKTtcbiAgICAgIHIudGV4dHVyZUNhY2hlLnRleHR1cmUgPSByLmRhdGEuYnVmZmVyQ2FudmFzZXNbci5URVhUVVJFX0JVRkZFUl07XG4gICAgICB2YXIgY3h0ID0gci5kYXRhLmJ1ZmZlckNvbnRleHRzW3IuVEVYVFVSRV9CVUZGRVJdO1xuICAgICAgY3h0LnNldFRyYW5zZm9ybSgxLCAwLCAwLCAxLCAwLCAwKTtcbiAgICAgIGN4dC5jbGVhclJlY3QoMCwgMCwgci5jYW52YXNXaWR0aCAqIHIudGV4dHVyZU11bHQsIHIuY2FudmFzSGVpZ2h0ICogci50ZXh0dXJlTXVsdCk7XG4gICAgICByLnJlbmRlcih7XG4gICAgICAgIGZvcmNlZENvbnRleHQ6IGN4dCxcbiAgICAgICAgZHJhd09ubHlOb2RlTGF5ZXI6IHRydWUsXG4gICAgICAgIGZvcmNlZFB4UmF0aW86IHBpeGVsUmF0aW8gKiByLnRleHR1cmVNdWx0XG4gICAgICB9KTtcbiAgICAgIHZhciB2cCA9IHIudGV4dHVyZUNhY2hlLnZpZXdwb3J0ID0ge1xuICAgICAgICB6b29tOiBjeS56b29tKCksXG4gICAgICAgIHBhbjogY3kucGFuKCksXG4gICAgICAgIHdpZHRoOiByLmNhbnZhc1dpZHRoLFxuICAgICAgICBoZWlnaHQ6IHIuY2FudmFzSGVpZ2h0XG4gICAgICB9O1xuICAgICAgdnAubXBhbiA9IHtcbiAgICAgICAgeDogKDAgLSB2cC5wYW4ueCkgLyB2cC56b29tLFxuICAgICAgICB5OiAoMCAtIHZwLnBhbi55KSAvIHZwLnpvb21cbiAgICAgIH07XG4gICAgfVxuICAgIG5lZWREcmF3W3IuRFJBR10gPSBmYWxzZTtcbiAgICBuZWVkRHJhd1tyLk5PREVdID0gZmFsc2U7XG4gICAgdmFyIGNvbnRleHQgPSBkYXRhLmNvbnRleHRzW3IuTk9ERV07XG4gICAgdmFyIHRleHR1cmUgPSByLnRleHR1cmVDYWNoZS50ZXh0dXJlO1xuICAgIHZhciB2cCA9IHIudGV4dHVyZUNhY2hlLnZpZXdwb3J0O1xuICAgIGNvbnRleHQuc2V0VHJhbnNmb3JtKDEsIDAsIDAsIDEsIDAsIDApO1xuICAgIGlmIChtb3Rpb25CbHVyKSB7XG4gICAgICBtYmNsZWFyKGNvbnRleHQsIDAsIDAsIHZwLndpZHRoLCB2cC5oZWlnaHQpO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb250ZXh0LmNsZWFyUmVjdCgwLCAwLCB2cC53aWR0aCwgdnAuaGVpZ2h0KTtcbiAgICB9XG4gICAgdmFyIG91dHNpZGVCZ0NvbG9yID0gc3R5bGUuY29yZSgnb3V0c2lkZS10ZXh0dXJlLWJnLWNvbG9yJykudmFsdWU7XG4gICAgdmFyIG91dHNpZGVCZ09wYWNpdHkgPSBzdHlsZS5jb3JlKCdvdXRzaWRlLXRleHR1cmUtYmctb3BhY2l0eScpLnZhbHVlO1xuICAgIHIuY29sb3JGaWxsU3R5bGUoY29udGV4dCwgb3V0c2lkZUJnQ29sb3JbMF0sIG91dHNpZGVCZ0NvbG9yWzFdLCBvdXRzaWRlQmdDb2xvclsyXSwgb3V0c2lkZUJnT3BhY2l0eSk7XG4gICAgY29udGV4dC5maWxsUmVjdCgwLCAwLCB2cC53aWR0aCwgdnAuaGVpZ2h0KTtcbiAgICB2YXIgem9vbSA9IGN5Lnpvb20oKTtcbiAgICBzZXRDb250ZXh0VHJhbnNmb3JtKGNvbnRleHQsIGZhbHNlKTtcbiAgICBjb250ZXh0LmNsZWFyUmVjdCh2cC5tcGFuLngsIHZwLm1wYW4ueSwgdnAud2lkdGggLyB2cC56b29tIC8gcGl4ZWxSYXRpbywgdnAuaGVpZ2h0IC8gdnAuem9vbSAvIHBpeGVsUmF0aW8pO1xuICAgIGNvbnRleHQuZHJhd0ltYWdlKHRleHR1cmUsIHZwLm1wYW4ueCwgdnAubXBhbi55LCB2cC53aWR0aCAvIHZwLnpvb20gLyBwaXhlbFJhdGlvLCB2cC5oZWlnaHQgLyB2cC56b29tIC8gcGl4ZWxSYXRpbyk7XG4gIH0gZWxzZSBpZiAoci50ZXh0dXJlT25WaWV3cG9ydCAmJiAhZm9yY2VkQ29udGV4dCkge1xuICAgIC8vIGNsZWFyIHRoZSBjYWNoZSBzaW5jZSB3ZSBkb24ndCBuZWVkIGl0XG4gICAgci50ZXh0dXJlQ2FjaGUgPSBudWxsO1xuICB9XG4gIHZhciBleHRlbnQgPSBjeS5leHRlbnQoKTtcbiAgdmFyIHZwTWFuaXAgPSByLnBpbmNoaW5nIHx8IHIuaG92ZXJEYXRhLmRyYWdnaW5nIHx8IHIuc3dpcGVQYW5uaW5nIHx8IHIuZGF0YS53aGVlbFpvb21pbmcgfHwgci5ob3ZlckRhdGEuZHJhZ2dpbmdFbGVzIHx8IHIuY3kuYW5pbWF0ZWQoKTtcbiAgdmFyIGhpZGVFZGdlcyA9IHIuaGlkZUVkZ2VzT25WaWV3cG9ydCAmJiB2cE1hbmlwO1xuICB2YXIgbmVlZE1iQ2xlYXIgPSBbXTtcbiAgbmVlZE1iQ2xlYXJbci5OT0RFXSA9ICFuZWVkRHJhd1tyLk5PREVdICYmIG1vdGlvbkJsdXIgJiYgIXIuY2xlYXJlZEZvck1vdGlvbkJsdXJbci5OT0RFXSB8fCByLmNsZWFyaW5nTW90aW9uQmx1cjtcbiAgaWYgKG5lZWRNYkNsZWFyW3IuTk9ERV0pIHtcbiAgICByLmNsZWFyZWRGb3JNb3Rpb25CbHVyW3IuTk9ERV0gPSB0cnVlO1xuICB9XG4gIG5lZWRNYkNsZWFyW3IuRFJBR10gPSAhbmVlZERyYXdbci5EUkFHXSAmJiBtb3Rpb25CbHVyICYmICFyLmNsZWFyZWRGb3JNb3Rpb25CbHVyW3IuRFJBR10gfHwgci5jbGVhcmluZ01vdGlvbkJsdXI7XG4gIGlmIChuZWVkTWJDbGVhcltyLkRSQUddKSB7XG4gICAgci5jbGVhcmVkRm9yTW90aW9uQmx1cltyLkRSQUddID0gdHJ1ZTtcbiAgfVxuICBpZiAobmVlZERyYXdbci5OT0RFXSB8fCBkcmF3QWxsTGF5ZXJzIHx8IGRyYXdPbmx5Tm9kZUxheWVyIHx8IG5lZWRNYkNsZWFyW3IuTk9ERV0pIHtcbiAgICB2YXIgdXNlQnVmZmVyID0gbW90aW9uQmx1ciAmJiAhbmVlZE1iQ2xlYXJbci5OT0RFXSAmJiBtYlB4UmF0aW8gIT09IDE7XG4gICAgdmFyIGNvbnRleHQgPSBmb3JjZWRDb250ZXh0IHx8ICh1c2VCdWZmZXIgPyByLmRhdGEuYnVmZmVyQ29udGV4dHNbci5NT1RJT05CTFVSX0JVRkZFUl9OT0RFXSA6IGRhdGEuY29udGV4dHNbci5OT0RFXSk7XG4gICAgdmFyIGNsZWFyID0gbW90aW9uQmx1ciAmJiAhdXNlQnVmZmVyID8gJ21vdGlvbkJsdXInIDogdW5kZWZpbmVkO1xuICAgIHNldENvbnRleHRUcmFuc2Zvcm0oY29udGV4dCwgY2xlYXIpO1xuICAgIGlmIChoaWRlRWRnZXMpIHtcbiAgICAgIHIuZHJhd0NhY2hlZE5vZGVzKGNvbnRleHQsIGVsZXMubm9uZHJhZywgcGl4ZWxSYXRpbywgZXh0ZW50KTtcbiAgICB9IGVsc2Uge1xuICAgICAgci5kcmF3TGF5ZXJlZEVsZW1lbnRzKGNvbnRleHQsIGVsZXMubm9uZHJhZywgcGl4ZWxSYXRpbywgZXh0ZW50KTtcbiAgICB9XG4gICAgaWYgKHIuZGVidWcpIHtcbiAgICAgIHIuZHJhd0RlYnVnUG9pbnRzKGNvbnRleHQsIGVsZXMubm9uZHJhZyk7XG4gICAgfVxuICAgIGlmICghZHJhd0FsbExheWVycyAmJiAhbW90aW9uQmx1cikge1xuICAgICAgbmVlZERyYXdbci5OT0RFXSA9IGZhbHNlO1xuICAgIH1cbiAgfVxuICBpZiAoIWRyYXdPbmx5Tm9kZUxheWVyICYmIChuZWVkRHJhd1tyLkRSQUddIHx8IGRyYXdBbGxMYXllcnMgfHwgbmVlZE1iQ2xlYXJbci5EUkFHXSkpIHtcbiAgICB2YXIgdXNlQnVmZmVyID0gbW90aW9uQmx1ciAmJiAhbmVlZE1iQ2xlYXJbci5EUkFHXSAmJiBtYlB4UmF0aW8gIT09IDE7XG4gICAgdmFyIGNvbnRleHQgPSBmb3JjZWRDb250ZXh0IHx8ICh1c2VCdWZmZXIgPyByLmRhdGEuYnVmZmVyQ29udGV4dHNbci5NT1RJT05CTFVSX0JVRkZFUl9EUkFHXSA6IGRhdGEuY29udGV4dHNbci5EUkFHXSk7XG4gICAgc2V0Q29udGV4dFRyYW5zZm9ybShjb250ZXh0LCBtb3Rpb25CbHVyICYmICF1c2VCdWZmZXIgPyAnbW90aW9uQmx1cicgOiB1bmRlZmluZWQpO1xuICAgIGlmIChoaWRlRWRnZXMpIHtcbiAgICAgIHIuZHJhd0NhY2hlZE5vZGVzKGNvbnRleHQsIGVsZXMuZHJhZywgcGl4ZWxSYXRpbywgZXh0ZW50KTtcbiAgICB9IGVsc2Uge1xuICAgICAgci5kcmF3Q2FjaGVkRWxlbWVudHMoY29udGV4dCwgZWxlcy5kcmFnLCBwaXhlbFJhdGlvLCBleHRlbnQpO1xuICAgIH1cbiAgICBpZiAoci5kZWJ1Zykge1xuICAgICAgci5kcmF3RGVidWdQb2ludHMoY29udGV4dCwgZWxlcy5kcmFnKTtcbiAgICB9XG4gICAgaWYgKCFkcmF3QWxsTGF5ZXJzICYmICFtb3Rpb25CbHVyKSB7XG4gICAgICBuZWVkRHJhd1tyLkRSQUddID0gZmFsc2U7XG4gICAgfVxuICB9XG4gIHRoaXMuZHJhd1NlbGVjdGlvblJlY3RhbmdsZShvcHRpb25zLCBzZXRDb250ZXh0VHJhbnNmb3JtKTtcblxuICAvLyBtb3Rpb25ibHVyOiBibGl0IHJlbmRlcmVkIGJsdXJyeSBmcmFtZXNcbiAgaWYgKG1vdGlvbkJsdXIgJiYgbWJQeFJhdGlvICE9PSAxKSB7XG4gICAgdmFyIGN4dE5vZGUgPSBkYXRhLmNvbnRleHRzW3IuTk9ERV07XG4gICAgdmFyIHR4dE5vZGUgPSByLmRhdGEuYnVmZmVyQ2FudmFzZXNbci5NT1RJT05CTFVSX0JVRkZFUl9OT0RFXTtcbiAgICB2YXIgY3h0RHJhZyA9IGRhdGEuY29udGV4dHNbci5EUkFHXTtcbiAgICB2YXIgdHh0RHJhZyA9IHIuZGF0YS5idWZmZXJDYW52YXNlc1tyLk1PVElPTkJMVVJfQlVGRkVSX0RSQUddO1xuICAgIHZhciBkcmF3TW90aW9uQmx1ciA9IGZ1bmN0aW9uIGRyYXdNb3Rpb25CbHVyKGN4dCwgdHh0LCBuZWVkQ2xlYXIpIHtcbiAgICAgIGN4dC5zZXRUcmFuc2Zvcm0oMSwgMCwgMCwgMSwgMCwgMCk7XG4gICAgICBpZiAobmVlZENsZWFyIHx8ICFtb3Rpb25CbHVyRmFkZUVmZmVjdCkge1xuICAgICAgICBjeHQuY2xlYXJSZWN0KDAsIDAsIHIuY2FudmFzV2lkdGgsIHIuY2FudmFzSGVpZ2h0KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIG1iY2xlYXIoY3h0LCAwLCAwLCByLmNhbnZhc1dpZHRoLCByLmNhbnZhc0hlaWdodCk7XG4gICAgICB9XG4gICAgICB2YXIgcHhyID0gbWJQeFJhdGlvO1xuICAgICAgY3h0LmRyYXdJbWFnZSh0eHQsXG4gICAgICAvLyBpbWdcbiAgICAgIDAsIDAsXG4gICAgICAvLyBzeCwgc3lcbiAgICAgIHIuY2FudmFzV2lkdGggKiBweHIsIHIuY2FudmFzSGVpZ2h0ICogcHhyLFxuICAgICAgLy8gc3csIHNoXG4gICAgICAwLCAwLFxuICAgICAgLy8geCwgeVxuICAgICAgci5jYW52YXNXaWR0aCwgci5jYW52YXNIZWlnaHQgLy8gdywgaFxuICAgICAgKTtcbiAgICB9O1xuICAgIGlmIChuZWVkRHJhd1tyLk5PREVdIHx8IG5lZWRNYkNsZWFyW3IuTk9ERV0pIHtcbiAgICAgIGRyYXdNb3Rpb25CbHVyKGN4dE5vZGUsIHR4dE5vZGUsIG5lZWRNYkNsZWFyW3IuTk9ERV0pO1xuICAgICAgbmVlZERyYXdbci5OT0RFXSA9IGZhbHNlO1xuICAgIH1cbiAgICBpZiAobmVlZERyYXdbci5EUkFHXSB8fCBuZWVkTWJDbGVhcltyLkRSQUddKSB7XG4gICAgICBkcmF3TW90aW9uQmx1cihjeHREcmFnLCB0eHREcmFnLCBuZWVkTWJDbGVhcltyLkRSQUddKTtcbiAgICAgIG5lZWREcmF3W3IuRFJBR10gPSBmYWxzZTtcbiAgICB9XG4gIH1cbiAgci5wcmV2Vmlld3BvcnQgPSB2cDtcbiAgaWYgKHIuY2xlYXJpbmdNb3Rpb25CbHVyKSB7XG4gICAgci5jbGVhcmluZ01vdGlvbkJsdXIgPSBmYWxzZTtcbiAgICByLm1vdGlvbkJsdXJDbGVhcmVkID0gdHJ1ZTtcbiAgICByLm1vdGlvbkJsdXIgPSB0cnVlO1xuICB9XG4gIGlmIChtb3Rpb25CbHVyKSB7XG4gICAgci5tb3Rpb25CbHVyVGltZW91dCA9IHNldFRpbWVvdXQoZnVuY3Rpb24gKCkge1xuICAgICAgci5tb3Rpb25CbHVyVGltZW91dCA9IG51bGw7XG4gICAgICByLmNsZWFyZWRGb3JNb3Rpb25CbHVyW3IuTk9ERV0gPSBmYWxzZTtcbiAgICAgIHIuY2xlYXJlZEZvck1vdGlvbkJsdXJbci5EUkFHXSA9IGZhbHNlO1xuICAgICAgci5tb3Rpb25CbHVyID0gZmFsc2U7XG4gICAgICByLmNsZWFyaW5nTW90aW9uQmx1ciA9ICF0ZXh0dXJlRHJhdztcbiAgICAgIHIubWJGcmFtZXMgPSAwO1xuICAgICAgbmVlZERyYXdbci5OT0RFXSA9IHRydWU7XG4gICAgICBuZWVkRHJhd1tyLkRSQUddID0gdHJ1ZTtcbiAgICAgIHIucmVkcmF3KCk7XG4gICAgfSwgbW90aW9uQmx1ckRlbGF5KTtcbiAgfVxuICBpZiAoIWZvcmNlZENvbnRleHQpIHtcbiAgICBjeS5lbWl0KCdyZW5kZXInKTtcbiAgfVxufTtcbnZhciBmcHNIZWlnaHQ7XG5DUnAkNS5kcmF3U2VsZWN0aW9uUmVjdGFuZ2xlID0gZnVuY3Rpb24gKG9wdGlvbnMsIHNldENvbnRleHRUcmFuc2Zvcm0pIHtcbiAgdmFyIHIgPSB0aGlzO1xuICB2YXIgY3kgPSByLmN5O1xuICB2YXIgZGF0YSA9IHIuZGF0YTtcbiAgdmFyIHN0eWxlID0gY3kuc3R5bGUoKTtcbiAgdmFyIGRyYXdPbmx5Tm9kZUxheWVyID0gb3B0aW9ucy5kcmF3T25seU5vZGVMYXllcjtcbiAgdmFyIGRyYXdBbGxMYXllcnMgPSBvcHRpb25zLmRyYXdBbGxMYXllcnM7XG4gIHZhciBuZWVkRHJhdyA9IGRhdGEuY2FudmFzTmVlZHNSZWRyYXc7XG4gIHZhciBmb3JjZWRDb250ZXh0ID0gb3B0aW9ucy5mb3JjZWRDb250ZXh0O1xuICBpZiAoci5zaG93RnBzIHx8ICFkcmF3T25seU5vZGVMYXllciAmJiBuZWVkRHJhd1tyLlNFTEVDVF9CT1hdICYmICFkcmF3QWxsTGF5ZXJzKSB7XG4gICAgdmFyIGNvbnRleHQgPSBmb3JjZWRDb250ZXh0IHx8IGRhdGEuY29udGV4dHNbci5TRUxFQ1RfQk9YXTtcbiAgICBzZXRDb250ZXh0VHJhbnNmb3JtKGNvbnRleHQpO1xuICAgIGlmIChyLnNlbGVjdGlvbls0XSA9PSAxICYmIChyLmhvdmVyRGF0YS5zZWxlY3RpbmcgfHwgci50b3VjaERhdGEuc2VsZWN0aW5nKSkge1xuICAgICAgdmFyIHpvb20gPSByLmN5Lnpvb20oKTtcbiAgICAgIHZhciBib3JkZXJXaWR0aCA9IHN0eWxlLmNvcmUoJ3NlbGVjdGlvbi1ib3gtYm9yZGVyLXdpZHRoJykudmFsdWUgLyB6b29tO1xuICAgICAgY29udGV4dC5saW5lV2lkdGggPSBib3JkZXJXaWR0aDtcbiAgICAgIGNvbnRleHQuZmlsbFN0eWxlID0gJ3JnYmEoJyArIHN0eWxlLmNvcmUoJ3NlbGVjdGlvbi1ib3gtY29sb3InKS52YWx1ZVswXSArICcsJyArIHN0eWxlLmNvcmUoJ3NlbGVjdGlvbi1ib3gtY29sb3InKS52YWx1ZVsxXSArICcsJyArIHN0eWxlLmNvcmUoJ3NlbGVjdGlvbi1ib3gtY29sb3InKS52YWx1ZVsyXSArICcsJyArIHN0eWxlLmNvcmUoJ3NlbGVjdGlvbi1ib3gtb3BhY2l0eScpLnZhbHVlICsgJyknO1xuICAgICAgY29udGV4dC5maWxsUmVjdChyLnNlbGVjdGlvblswXSwgci5zZWxlY3Rpb25bMV0sIHIuc2VsZWN0aW9uWzJdIC0gci5zZWxlY3Rpb25bMF0sIHIuc2VsZWN0aW9uWzNdIC0gci5zZWxlY3Rpb25bMV0pO1xuICAgICAgaWYgKGJvcmRlcldpZHRoID4gMCkge1xuICAgICAgICBjb250ZXh0LnN0cm9rZVN0eWxlID0gJ3JnYmEoJyArIHN0eWxlLmNvcmUoJ3NlbGVjdGlvbi1ib3gtYm9yZGVyLWNvbG9yJykudmFsdWVbMF0gKyAnLCcgKyBzdHlsZS5jb3JlKCdzZWxlY3Rpb24tYm94LWJvcmRlci1jb2xvcicpLnZhbHVlWzFdICsgJywnICsgc3R5bGUuY29yZSgnc2VsZWN0aW9uLWJveC1ib3JkZXItY29sb3InKS52YWx1ZVsyXSArICcsJyArIHN0eWxlLmNvcmUoJ3NlbGVjdGlvbi1ib3gtb3BhY2l0eScpLnZhbHVlICsgJyknO1xuICAgICAgICBjb250ZXh0LnN0cm9rZVJlY3Qoci5zZWxlY3Rpb25bMF0sIHIuc2VsZWN0aW9uWzFdLCByLnNlbGVjdGlvblsyXSAtIHIuc2VsZWN0aW9uWzBdLCByLnNlbGVjdGlvblszXSAtIHIuc2VsZWN0aW9uWzFdKTtcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKGRhdGEuYmdBY3RpdmVQb3Npc3Rpb24gJiYgIXIuaG92ZXJEYXRhLnNlbGVjdGluZykge1xuICAgICAgdmFyIHpvb20gPSByLmN5Lnpvb20oKTtcbiAgICAgIHZhciBwb3MgPSBkYXRhLmJnQWN0aXZlUG9zaXN0aW9uO1xuICAgICAgY29udGV4dC5maWxsU3R5bGUgPSAncmdiYSgnICsgc3R5bGUuY29yZSgnYWN0aXZlLWJnLWNvbG9yJykudmFsdWVbMF0gKyAnLCcgKyBzdHlsZS5jb3JlKCdhY3RpdmUtYmctY29sb3InKS52YWx1ZVsxXSArICcsJyArIHN0eWxlLmNvcmUoJ2FjdGl2ZS1iZy1jb2xvcicpLnZhbHVlWzJdICsgJywnICsgc3R5bGUuY29yZSgnYWN0aXZlLWJnLW9wYWNpdHknKS52YWx1ZSArICcpJztcbiAgICAgIGNvbnRleHQuYmVnaW5QYXRoKCk7XG4gICAgICBjb250ZXh0LmFyYyhwb3MueCwgcG9zLnksIHN0eWxlLmNvcmUoJ2FjdGl2ZS1iZy1zaXplJykucGZWYWx1ZSAvIHpvb20sIDAsIDIgKiBNYXRoLlBJKTtcbiAgICAgIGNvbnRleHQuZmlsbCgpO1xuICAgIH1cbiAgICB2YXIgdGltZVRvUmVuZGVyID0gci5sYXN0UmVkcmF3VGltZTtcbiAgICBpZiAoci5zaG93RnBzICYmIHRpbWVUb1JlbmRlcikge1xuICAgICAgdGltZVRvUmVuZGVyID0gTWF0aC5yb3VuZCh0aW1lVG9SZW5kZXIpO1xuICAgICAgdmFyIGZwcyA9IE1hdGgucm91bmQoMTAwMCAvIHRpbWVUb1JlbmRlcik7XG4gICAgICB2YXIgdGV4dCA9ICcxIGZyYW1lID0gJyArIHRpbWVUb1JlbmRlciArICcgbXMgPSAnICsgZnBzICsgJyBmcHMnO1xuICAgICAgY29udGV4dC5zZXRUcmFuc2Zvcm0oMSwgMCwgMCwgMSwgMCwgMCk7XG4gICAgICBjb250ZXh0LmZpbGxTdHlsZSA9ICdyZ2JhKDI1NSwgMCwgMCwgMC43NSknO1xuICAgICAgY29udGV4dC5zdHJva2VTdHlsZSA9ICdyZ2JhKDI1NSwgMCwgMCwgMC43NSknO1xuICAgICAgLy8gY29udGV4dC5saW5lV2lkdGggPSAxO1xuICAgICAgY29udGV4dC5mb250ID0gJzMwcHggQXJpYWwnO1xuICAgICAgaWYgKCFmcHNIZWlnaHQpIHtcbiAgICAgICAgdmFyIGRpbXMgPSBjb250ZXh0Lm1lYXN1cmVUZXh0KHRleHQpO1xuICAgICAgICBmcHNIZWlnaHQgPSBkaW1zLmFjdHVhbEJvdW5kaW5nQm94QXNjZW50O1xuICAgICAgfVxuICAgICAgY29udGV4dC5maWxsVGV4dCh0ZXh0LCAwLCBmcHNIZWlnaHQpO1xuICAgICAgdmFyIG1heEZwcyA9IDYwO1xuICAgICAgY29udGV4dC5zdHJva2VSZWN0KDAsIGZwc0hlaWdodCArIDEwLCAyNTAsIDIwKTtcbiAgICAgIGNvbnRleHQuZmlsbFJlY3QoMCwgZnBzSGVpZ2h0ICsgMTAsIDI1MCAqIE1hdGgubWluKGZwcyAvIG1heEZwcywgMSksIDIwKTtcbiAgICB9XG4gICAgaWYgKCFkcmF3QWxsTGF5ZXJzKSB7XG4gICAgICBuZWVkRHJhd1tyLlNFTEVDVF9CT1hdID0gZmFsc2U7XG4gICAgfVxuICB9XG59O1xuXG4vKipcbiAqIE5vdGVzOlxuICogLSBBbGwgY29sb3JzIGhhdmUgcHJlbXVsdGlwbGllZCBhbHBoYS4gVmVyeSBpbXBvcnRhbnQgZm9yIHRleHR1ZXMgYW5kIFxuICogICBibGVuZGluZyB0byB3b3JrIGNvcnJlY3RseS5cbiAqL1xuXG5mdW5jdGlvbiBjb21waWxlU2hhZGVyKGdsLCB0eXBlLCBzb3VyY2UpIHtcbiAgdmFyIHNoYWRlciA9IGdsLmNyZWF0ZVNoYWRlcih0eXBlKTtcbiAgZ2wuc2hhZGVyU291cmNlKHNoYWRlciwgc291cmNlKTtcbiAgZ2wuY29tcGlsZVNoYWRlcihzaGFkZXIpO1xuICBpZiAoIWdsLmdldFNoYWRlclBhcmFtZXRlcihzaGFkZXIsIGdsLkNPTVBJTEVfU1RBVFVTKSkge1xuICAgIHRocm93IG5ldyBFcnJvcihnbC5nZXRTaGFkZXJJbmZvTG9nKHNoYWRlcikpO1xuICB9XG4gIC8vIGNvbnNvbGUubG9nKGdsLmdldFNoYWRlckluZm9Mb2coc2hhZGVyKSk7XG4gIHJldHVybiBzaGFkZXI7XG59XG5mdW5jdGlvbiBjcmVhdGVQcm9ncmFtKGdsLCB2ZXJ0ZXhTb3VyY2UsIGZyYWdlbWVudFNvdXJjZSkge1xuICB2YXIgdmVydGV4U2hhZGVyID0gY29tcGlsZVNoYWRlcihnbCwgZ2wuVkVSVEVYX1NIQURFUiwgdmVydGV4U291cmNlKTtcbiAgdmFyIGZyYWdtZW50U2hhZGVyID0gY29tcGlsZVNoYWRlcihnbCwgZ2wuRlJBR01FTlRfU0hBREVSLCBmcmFnZW1lbnRTb3VyY2UpO1xuICB2YXIgcHJvZ3JhbSA9IGdsLmNyZWF0ZVByb2dyYW0oKTtcbiAgZ2wuYXR0YWNoU2hhZGVyKHByb2dyYW0sIHZlcnRleFNoYWRlcik7XG4gIGdsLmF0dGFjaFNoYWRlcihwcm9ncmFtLCBmcmFnbWVudFNoYWRlcik7XG4gIGdsLmxpbmtQcm9ncmFtKHByb2dyYW0pO1xuICBpZiAoIWdsLmdldFByb2dyYW1QYXJhbWV0ZXIocHJvZ3JhbSwgZ2wuTElOS19TVEFUVVMpKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdDb3VsZCBub3QgaW5pdGlhbGl6ZSBzaGFkZXJzJyk7XG4gIH1cbiAgcmV0dXJuIHByb2dyYW07XG59XG5cbi8qKlxuICogQ3JlYXRlcyBhbiBvZmZzY3JlbiBjYW52YXMgd2l0aCBhIDJEIGNvbnRleHQsIGZvciB0aGVcbiAqIGNhbnZhcyByZW5kZXJlciB0byB1c2UgZm9yIGRyYXdpbmcgdGV4dHVyZXMuXG4gKi9cbmZ1bmN0aW9uIGNyZWF0ZVRleHR1cmVDYW52YXMociwgd2lkdGgsIGhlaWdodCkge1xuICBpZiAoaGVpZ2h0ID09PSB1bmRlZmluZWQpIHtcbiAgICBoZWlnaHQgPSB3aWR0aDtcbiAgfVxuICB2YXIgY2FudmFzID0gci5tYWtlT2Zmc2NyZWVuQ2FudmFzKHdpZHRoLCBoZWlnaHQpO1xuICB2YXIgY3R4ID0gY2FudmFzLmNvbnRleHQgPSBjYW52YXMuZ2V0Q29udGV4dCgnMmQnKTtcbiAgY2FudmFzLmNsZWFyID0gZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiBjdHguY2xlYXJSZWN0KDAsIDAsIGNhbnZhcy53aWR0aCwgY2FudmFzLmhlaWdodCk7XG4gIH07XG4gIGNhbnZhcy5jbGVhcigpO1xuICByZXR1cm4gY2FudmFzO1xufVxuXG4vKipcbiAqIFJldHVybnMgdGhlIGN1cnJlbnQgcGFuICYgem9vbSB2YWx1ZXMsIHNjYWxlZCBieSB0aGUgcGl4ZWwgcmF0aW8uXG4gKi9cbmZ1bmN0aW9uIGdldEVmZmVjdGl2ZVBhblpvb20ocikge1xuICB2YXIgcGl4ZWxSYXRpbyA9IHIucGl4ZWxSYXRpbztcbiAgdmFyIHpvb20gPSByLmN5Lnpvb20oKTtcbiAgdmFyIHBhbiA9IHIuY3kucGFuKCk7XG4gIHJldHVybiB7XG4gICAgem9vbTogem9vbSAqIHBpeGVsUmF0aW8sXG4gICAgcGFuOiB7XG4gICAgICB4OiBwYW4ueCAqIHBpeGVsUmF0aW8sXG4gICAgICB5OiBwYW4ueSAqIHBpeGVsUmF0aW9cbiAgICB9XG4gIH07XG59XG5mdW5jdGlvbiBtb2RlbFRvUmVuZGVyZWRQb3NpdGlvbihyLCBwYW4sIHpvb20sIHgsIHkpIHtcbiAgdmFyIHJ4ID0geCAqIHpvb20gKyBwYW4ueDtcbiAgdmFyIHJ5ID0geSAqIHpvb20gKyBwYW4ueTtcbiAgcnkgPSBNYXRoLnJvdW5kKHIuY2FudmFzSGVpZ2h0IC0gcnkpOyAvLyBhZGp1c3QgZm9yIHdlYmdsXG4gIHJldHVybiBbcngsIHJ5XTtcbn1cblxuLyoqXG4gKiBUYWtlcyBjb2xvciAmIG9wYWNpdHkgc3R5bGUgdmFsdWVzIGFuZCBjb252ZXJ0cyB0aGVtIHRvIFdlYkdMIGZvcm1hdC4gXG4gKiBBbHBoYSBpcyBwcmVtdWx0aXBsaWVkLlxuICovXG5mdW5jdGlvbiB0b1dlYkdMQ29sb3IoY29sb3IsIG9wYWNpdHksIG91dEFycmF5KSB7XG4gIHZhciByID0gY29sb3JbMF0gLyAyNTU7XG4gIHZhciBnID0gY29sb3JbMV0gLyAyNTU7XG4gIHZhciBiID0gY29sb3JbMl0gLyAyNTU7XG4gIHZhciBhID0gb3BhY2l0eTtcbiAgdmFyIGFyciA9IG91dEFycmF5IHx8IG5ldyBBcnJheSg0KTtcbiAgYXJyWzBdID0gciAqIGE7XG4gIGFyclsxXSA9IGcgKiBhO1xuICBhcnJbMl0gPSBiICogYTtcbiAgYXJyWzNdID0gYTtcbiAgcmV0dXJuIGFycjtcbn1cbmZ1bmN0aW9uIGluZGV4VG9WZWM0KGluZGV4LCBvdXRBcnJheSkge1xuICB2YXIgYXJyID0gb3V0QXJyYXkgfHwgbmV3IEFycmF5KDQpO1xuICBhcnJbMF0gPSAoaW5kZXggPj4gMCAmIDB4RkYpIC8gMHhGRjtcbiAgYXJyWzFdID0gKGluZGV4ID4+IDggJiAweEZGKSAvIDB4RkY7XG4gIGFyclsyXSA9IChpbmRleCA+PiAxNiAmIDB4RkYpIC8gMHhGRjtcbiAgYXJyWzNdID0gKGluZGV4ID4+IDI0ICYgMHhGRikgLyAweEZGO1xuICByZXR1cm4gYXJyO1xufVxuZnVuY3Rpb24gdmVjNFRvSW5kZXgodmVjNCkge1xuICByZXR1cm4gdmVjNFswXSArICh2ZWM0WzFdIDw8IDgpICsgKHZlYzRbMl0gPDwgMTYpICsgKHZlYzRbM10gPDwgMjQpO1xufVxuZnVuY3Rpb24gY3JlYXRlVGV4dHVyZShnbCwgZGVidWdJRCkge1xuICB2YXIgdGV4dHVyZSA9IGdsLmNyZWF0ZVRleHR1cmUoKTtcbiAgdGV4dHVyZS5idWZmZXIgPSBmdW5jdGlvbiAob2Zmc2NyZWVuQ2FudmFzKSB7XG4gICAgZ2wuYmluZFRleHR1cmUoZ2wuVEVYVFVSRV8yRCwgdGV4dHVyZSk7XG4gICAgZ2wudGV4UGFyYW1ldGVyaShnbC5URVhUVVJFXzJELCBnbC5URVhUVVJFX1dSQVBfUywgZ2wuQ0xBTVBfVE9fRURHRSk7XG4gICAgZ2wudGV4UGFyYW1ldGVyaShnbC5URVhUVVJFXzJELCBnbC5URVhUVVJFX1dSQVBfVCwgZ2wuQ0xBTVBfVE9fRURHRSk7XG4gICAgZ2wudGV4UGFyYW1ldGVyaShnbC5URVhUVVJFXzJELCBnbC5URVhUVVJFX01BR19GSUxURVIsIGdsLkxJTkVBUik7XG4gICAgZ2wudGV4UGFyYW1ldGVyaShnbC5URVhUVVJFXzJELCBnbC5URVhUVVJFX01JTl9GSUxURVIsIGdsLkxJTkVBUl9NSVBNQVBfTkVBUkVTVCk7XG5cbiAgICAvLyB2ZXJ5IGltcG9ydGFudCwgdGhpcyB0ZWxscyB3ZWJnbCB0byBwcmVtdWx0aXBseSBjb2xvcnMgYnkgdGhlIGFscGhhIGNoYW5uZWxcbiAgICBnbC5waXhlbFN0b3JlaShnbC5VTlBBQ0tfUFJFTVVMVElQTFlfQUxQSEFfV0VCR0wsIHRydWUpO1xuICAgIGdsLnRleEltYWdlMkQoZ2wuVEVYVFVSRV8yRCwgMCwgZ2wuUkdCQSwgZ2wuUkdCQSwgZ2wuVU5TSUdORURfQllURSwgb2Zmc2NyZWVuQ2FudmFzKTtcbiAgICBnbC5nZW5lcmF0ZU1pcG1hcChnbC5URVhUVVJFXzJEKTtcbiAgICBnbC5iaW5kVGV4dHVyZShnbC5URVhUVVJFXzJELCBudWxsKTtcbiAgfTtcbiAgdGV4dHVyZS5kZWxldGVUZXh0dXJlID0gZnVuY3Rpb24gKCkge1xuICAgIGdsLmRlbGV0ZVRleHR1cmUodGV4dHVyZSk7XG4gIH07XG4gIHJldHVybiB0ZXh0dXJlO1xufVxuZnVuY3Rpb24gZ2V0VHlwZUluZm8oZ2wsIGdsc2xUeXBlKSB7XG4gIHN3aXRjaCAoZ2xzbFR5cGUpIHtcbiAgICBjYXNlICdmbG9hdCc6XG4gICAgICByZXR1cm4gWzEsIGdsLkZMT0FULCA0XTtcbiAgICBjYXNlICd2ZWMyJzpcbiAgICAgIHJldHVybiBbMiwgZ2wuRkxPQVQsIDRdO1xuICAgIGNhc2UgJ3ZlYzMnOlxuICAgICAgcmV0dXJuIFszLCBnbC5GTE9BVCwgNF07XG4gICAgY2FzZSAndmVjNCc6XG4gICAgICByZXR1cm4gWzQsIGdsLkZMT0FULCA0XTtcbiAgICBjYXNlICdpbnQnOlxuICAgICAgcmV0dXJuIFsxLCBnbC5JTlQsIDRdO1xuICAgIGNhc2UgJ2l2ZWMyJzpcbiAgICAgIHJldHVybiBbMiwgZ2wuSU5ULCA0XTtcbiAgfVxufVxuZnVuY3Rpb24gY3JlYXRlVHlwZWRBcnJheShnbCwgZ2xUeXBlLCBkYXRhT3JTaXplKSB7XG4gIHN3aXRjaCAoZ2xUeXBlKSB7XG4gICAgY2FzZSBnbC5GTE9BVDpcbiAgICAgIHJldHVybiBuZXcgRmxvYXQzMkFycmF5KGRhdGFPclNpemUpO1xuICAgIGNhc2UgZ2wuSU5UOlxuICAgICAgcmV0dXJuIG5ldyBJbnQzMkFycmF5KGRhdGFPclNpemUpO1xuICB9XG59XG5mdW5jdGlvbiBjcmVhdGVUeXBlZEFycmF5VmlldyhnbCwgZ2xUeXBlLCBhcnJheSwgc3RyaWRlLCBzaXplLCBpKSB7XG4gIHN3aXRjaCAoZ2xUeXBlKSB7XG4gICAgY2FzZSBnbC5GTE9BVDpcbiAgICAgIHJldHVybiBuZXcgRmxvYXQzMkFycmF5KGFycmF5LmJ1ZmZlciwgaSAqIHN0cmlkZSwgc2l6ZSk7XG4gICAgY2FzZSBnbC5JTlQ6XG4gICAgICByZXR1cm4gbmV3IEludDMyQXJyYXkoYXJyYXkuYnVmZmVyLCBpICogc3RyaWRlLCBzaXplKTtcbiAgfVxufVxuXG4vKiogQHBhcmFtIHtXZWJHTFJlbmRlcmluZ0NvbnRleHR9IGdsICovXG5mdW5jdGlvbiBjcmVhdGVCdWZmZXJTdGF0aWNEcmF3KGdsLCB0eXBlLCBhdHRyaWJ1dGVMb2MsIGRhdGFBcnJheSkge1xuICB2YXIgX2dldFR5cGVJbmZvID0gZ2V0VHlwZUluZm8oZ2wsIHR5cGUpLFxuICAgIF9nZXRUeXBlSW5mbzIgPSBfc2xpY2VkVG9BcnJheShfZ2V0VHlwZUluZm8sIDIpLFxuICAgIHNpemUgPSBfZ2V0VHlwZUluZm8yWzBdLFxuICAgIGdsVHlwZSA9IF9nZXRUeXBlSW5mbzJbMV07XG4gIHZhciBkYXRhID0gY3JlYXRlVHlwZWRBcnJheShnbCwgZ2xUeXBlLCBkYXRhQXJyYXkpO1xuICB2YXIgYnVmZmVyID0gZ2wuY3JlYXRlQnVmZmVyKCk7XG4gIGdsLmJpbmRCdWZmZXIoZ2wuQVJSQVlfQlVGRkVSLCBidWZmZXIpO1xuICBnbC5idWZmZXJEYXRhKGdsLkFSUkFZX0JVRkZFUiwgZGF0YSwgZ2wuU1RBVElDX0RSQVcpO1xuICBpZiAoZ2xUeXBlID09PSBnbC5GTE9BVCkge1xuICAgIGdsLnZlcnRleEF0dHJpYlBvaW50ZXIoYXR0cmlidXRlTG9jLCBzaXplLCBnbFR5cGUsIGZhbHNlLCAwLCAwKTtcbiAgfSBlbHNlIGlmIChnbFR5cGUgPT09IGdsLklOVCkge1xuICAgIGdsLnZlcnRleEF0dHJpYklQb2ludGVyKGF0dHJpYnV0ZUxvYywgc2l6ZSwgZ2xUeXBlLCAwLCAwKTtcbiAgfVxuICBnbC5lbmFibGVWZXJ0ZXhBdHRyaWJBcnJheShhdHRyaWJ1dGVMb2MpO1xuICBnbC5iaW5kQnVmZmVyKGdsLkFSUkFZX0JVRkZFUiwgbnVsbCk7XG4gIHJldHVybiBidWZmZXI7XG59XG5cbi8qKiBcbiAqIENyZWF0ZXMgYSBmbG9hdCBidWZmZXIgd2l0aCBnbC5EWU5BTUlDX0RSQVcuXG4gKiBUaGUgcmV0dXJuZWQgYnVmZmVyIG9iamVjdCBjb250YWlucyBmdW5jdGlvbnMgdG8gZWFzaWx5IHNldCBpbnN0YW5jZSBkYXRhIGFuZCBidWZmZXIgdGhlIGRhdGEgYmVmb3JlIGEgZHJhdyBjYWxsLlxuICogQHBhcmFtIHtXZWJHTFJlbmRlcmluZ0NvbnRleHR9IGdsIFxuICovXG5mdW5jdGlvbiBjcmVhdGVCdWZmZXJEeW5hbWljRHJhdyhnbCwgaW5zdGFuY2VzLCB0eXBlLCBhdHRyaWJ1dGVMb2MpIHtcbiAgdmFyIF9nZXRUeXBlSW5mbzMgPSBnZXRUeXBlSW5mbyhnbCwgdHlwZSksXG4gICAgX2dldFR5cGVJbmZvNCA9IF9zbGljZWRUb0FycmF5KF9nZXRUeXBlSW5mbzMsIDMpLFxuICAgIHNpemUgPSBfZ2V0VHlwZUluZm80WzBdLFxuICAgIGdsVHlwZSA9IF9nZXRUeXBlSW5mbzRbMV0sXG4gICAgYnl0ZXMgPSBfZ2V0VHlwZUluZm80WzJdO1xuICB2YXIgZGF0YUFycmF5ID0gY3JlYXRlVHlwZWRBcnJheShnbCwgZ2xUeXBlLCBpbnN0YW5jZXMgKiBzaXplKTtcbiAgdmFyIHN0cmlkZSA9IHNpemUgKiBieXRlcztcbiAgdmFyIGJ1ZmZlciA9IGdsLmNyZWF0ZUJ1ZmZlcigpO1xuICBnbC5iaW5kQnVmZmVyKGdsLkFSUkFZX0JVRkZFUiwgYnVmZmVyKTtcbiAgZ2wuYnVmZmVyRGF0YShnbC5BUlJBWV9CVUZGRVIsIGluc3RhbmNlcyAqIHN0cmlkZSwgZ2wuRFlOQU1JQ19EUkFXKTtcbiAgZ2wuZW5hYmxlVmVydGV4QXR0cmliQXJyYXkoYXR0cmlidXRlTG9jKTtcbiAgaWYgKGdsVHlwZSA9PT0gZ2wuRkxPQVQpIHtcbiAgICBnbC52ZXJ0ZXhBdHRyaWJQb2ludGVyKGF0dHJpYnV0ZUxvYywgc2l6ZSwgZ2xUeXBlLCBmYWxzZSwgc3RyaWRlLCAwKTtcbiAgfSBlbHNlIGlmIChnbFR5cGUgPT09IGdsLklOVCkge1xuICAgIGdsLnZlcnRleEF0dHJpYklQb2ludGVyKGF0dHJpYnV0ZUxvYywgc2l6ZSwgZ2xUeXBlLCBzdHJpZGUsIDApO1xuICB9XG4gIGdsLnZlcnRleEF0dHJpYkRpdmlzb3IoYXR0cmlidXRlTG9jLCAxKTtcbiAgZ2wuYmluZEJ1ZmZlcihnbC5BUlJBWV9CVUZGRVIsIG51bGwpO1xuXG4gIC8vIHVzZSBhcnJheSB2aWV3cyB0byBzZXQgdmFsdWVzIGRpcmVjdGx5IGludG8gdGhlIGJ1ZmZlciBhcnJheVxuICB2YXIgdmlld3MgPSBuZXcgQXJyYXkoaW5zdGFuY2VzKTtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBpbnN0YW5jZXM7IGkrKykge1xuICAgIHZpZXdzW2ldID0gY3JlYXRlVHlwZWRBcnJheVZpZXcoZ2wsIGdsVHlwZSwgZGF0YUFycmF5LCBzdHJpZGUsIHNpemUsIGkpO1xuICB9XG4gIGJ1ZmZlci5kYXRhQXJyYXkgPSBkYXRhQXJyYXk7XG4gIGJ1ZmZlci5zdHJpZGUgPSBzdHJpZGU7XG4gIGJ1ZmZlci5zaXplID0gc2l6ZTtcbiAgYnVmZmVyLmdldFZpZXcgPSBmdW5jdGlvbiAoaSkge1xuICAgIHJldHVybiB2aWV3c1tpXTtcbiAgfTtcbiAgYnVmZmVyLnNldFBvaW50ID0gZnVuY3Rpb24gKGksIHgsIHkpIHtcbiAgICB2YXIgdmlldyA9IHZpZXdzW2ldO1xuICAgIHZpZXdbMF0gPSB4O1xuICAgIHZpZXdbMV0gPSB5O1xuICB9O1xuICBidWZmZXIuYnVmZmVyU3ViRGF0YSA9IGZ1bmN0aW9uIChjb3VudCkge1xuICAgIGdsLmJpbmRCdWZmZXIoZ2wuQVJSQVlfQlVGRkVSLCBidWZmZXIpO1xuICAgIGlmIChjb3VudCkge1xuICAgICAgZ2wuYnVmZmVyU3ViRGF0YShnbC5BUlJBWV9CVUZGRVIsIDAsIGRhdGFBcnJheSwgMCwgY291bnQgKiBzaXplKTtcbiAgICB9IGVsc2Uge1xuICAgICAgZ2wuYnVmZmVyU3ViRGF0YShnbC5BUlJBWV9CVUZGRVIsIDAsIGRhdGFBcnJheSk7XG4gICAgfVxuICB9O1xuICByZXR1cm4gYnVmZmVyO1xufVxuXG4vKiogXG4gKiBDcmVhdGVzIGEgYnVmZmVyIG9mIDN4MyBtYXRyaXggZGF0YSBmb3IgdXNlIGFzIGF0dHJpYnV0ZSBkYXRhLlxuICogQHBhcmFtIHtXZWJHTFJlbmRlcmluZ0NvbnRleHR9IGdsIFxuICovXG5mdW5jdGlvbiBjcmVhdGUzeDNNYXRyaXhCdWZmZXJEeW5hbWljRHJhdyhnbCwgaW5zdGFuY2VzLCBhdHRyaWJ1dGVMb2MpIHtcbiAgdmFyIG1hdHJpeFNpemUgPSA5OyAvLyAzeDMgbWF0cml4XG4gIHZhciBtYXRyaXhEYXRhID0gbmV3IEZsb2F0MzJBcnJheShpbnN0YW5jZXMgKiBtYXRyaXhTaXplKTtcblxuICAvLyB1c2UgbWF0cml4IHZpZXdzIHRvIHNldCB2YWx1ZXMgZGlyZWN0bHkgaW50byB0aGUgbWF0cml4RGF0YSBhcnJheVxuICB2YXIgbWF0cml4Vmlld3MgPSBuZXcgQXJyYXkoaW5zdGFuY2VzKTtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBpbnN0YW5jZXM7IGkrKykge1xuICAgIHZhciBieXRlT2Zmc2V0ID0gaSAqIG1hdHJpeFNpemUgKiA0OyAvLyA0IGJ5dGVzIHBlciBmbG9hdFxuICAgIG1hdHJpeFZpZXdzW2ldID0gbmV3IEZsb2F0MzJBcnJheShtYXRyaXhEYXRhLmJ1ZmZlciwgYnl0ZU9mZnNldCwgbWF0cml4U2l6ZSk7IC8vIGFycmF5IHZpZXdcbiAgfVxuICB2YXIgYnVmZmVyID0gZ2wuY3JlYXRlQnVmZmVyKCk7XG4gIGdsLmJpbmRCdWZmZXIoZ2wuQVJSQVlfQlVGRkVSLCBidWZmZXIpO1xuICBnbC5idWZmZXJEYXRhKGdsLkFSUkFZX0JVRkZFUiwgbWF0cml4RGF0YS5ieXRlTGVuZ3RoLCBnbC5EWU5BTUlDX0RSQVcpO1xuXG4gIC8vIGVhY2ggcm93IG9mIHRoZSBtYXRyaXggbmVlZHMgdG8gYmUgYSBzZXBhcmF0ZSBhdHRyaWJ1dGVcbiAgZm9yICh2YXIgX2kgPSAwOyBfaSA8IDM7IF9pKyspIHtcbiAgICB2YXIgbG9jID0gYXR0cmlidXRlTG9jICsgX2k7XG4gICAgZ2wuZW5hYmxlVmVydGV4QXR0cmliQXJyYXkobG9jKTtcbiAgICBnbC52ZXJ0ZXhBdHRyaWJQb2ludGVyKGxvYywgMywgZ2wuRkxPQVQsIGZhbHNlLCAzICogMTIsIF9pICogMTIpO1xuICAgIGdsLnZlcnRleEF0dHJpYkRpdmlzb3IobG9jLCAxKTtcbiAgfVxuICBnbC5iaW5kQnVmZmVyKGdsLkFSUkFZX0JVRkZFUiwgbnVsbCk7XG4gIGJ1ZmZlci5nZXRNYXRyaXhWaWV3ID0gZnVuY3Rpb24gKGkpIHtcbiAgICByZXR1cm4gbWF0cml4Vmlld3NbaV07XG4gIH07XG5cbiAgLy8gVE9ETyB0aGlzIGlzIHRvbyBzbG93LCB1c2UgZ2V0TWF0cml4VmlldyBhbmQgcGFzcyB0aGUgdmlldyBkaXJlY3RseSB0byB0aGUgZ2xtYXRyaXggbGlicmFyeVxuICBidWZmZXIuc2V0RGF0YSA9IGZ1bmN0aW9uIChtYXRyaXgsIGkpIHtcbiAgICBtYXRyaXhWaWV3c1tpXS5zZXQobWF0cml4LCAwKTtcbiAgfTtcbiAgYnVmZmVyLmJ1ZmZlclN1YkRhdGEgPSBmdW5jdGlvbiAoKSB7XG4gICAgZ2wuYmluZEJ1ZmZlcihnbC5BUlJBWV9CVUZGRVIsIGJ1ZmZlcik7XG4gICAgZ2wuYnVmZmVyU3ViRGF0YShnbC5BUlJBWV9CVUZGRVIsIDAsIG1hdHJpeERhdGEpO1xuICB9O1xuICByZXR1cm4gYnVmZmVyO1xufVxuXG4vKiogXG4gKiBDcmVhdGVzIGEgRnJhbWUgQnVmZmVyIHRvIHVzZSBmb3Igb2Zmc2NyZWVuIHJlbmRlcmluZy5cbiAqIEBwYXJhbSB7V2ViR0xSZW5kZXJpbmdDb250ZXh0fSBnbCBcbiAqL1xuZnVuY3Rpb24gY3JlYXRlUGlja2luZ0ZyYW1lQnVmZmVyKGdsKSB7XG4gIC8vIENyZWF0ZSBhbmQgYmluZCB0aGUgZnJhbWVidWZmZXJcbiAgdmFyIGZiID0gZ2wuY3JlYXRlRnJhbWVidWZmZXIoKTtcbiAgZ2wuYmluZEZyYW1lYnVmZmVyKGdsLkZSQU1FQlVGRkVSLCBmYik7XG5cbiAgLy8gQ3JlYXRlIGEgdGV4dHVyZSB0byByZW5kZXIgdG9cbiAgdmFyIHRhcmdldFRleHR1cmUgPSBnbC5jcmVhdGVUZXh0dXJlKCk7XG4gIGdsLmJpbmRUZXh0dXJlKGdsLlRFWFRVUkVfMkQsIHRhcmdldFRleHR1cmUpO1xuICBnbC50ZXhQYXJhbWV0ZXJpKGdsLlRFWFRVUkVfMkQsIGdsLlRFWFRVUkVfTUlOX0ZJTFRFUiwgZ2wuTElORUFSKTtcbiAgZ2wudGV4UGFyYW1ldGVyaShnbC5URVhUVVJFXzJELCBnbC5URVhUVVJFX1dSQVBfUywgZ2wuQ0xBTVBfVE9fRURHRSk7XG4gIGdsLnRleFBhcmFtZXRlcmkoZ2wuVEVYVFVSRV8yRCwgZ2wuVEVYVFVSRV9XUkFQX1QsIGdsLkNMQU1QX1RPX0VER0UpO1xuXG4gIC8vIGF0dGFjaCB0aGUgdGV4dHVyZSBhcyB0aGUgZmlyc3QgY29sb3IgYXR0YWNobWVudFxuICBnbC5mcmFtZWJ1ZmZlclRleHR1cmUyRChnbC5GUkFNRUJVRkZFUiwgZ2wuQ09MT1JfQVRUQUNITUVOVDAsIGdsLlRFWFRVUkVfMkQsIHRhcmdldFRleHR1cmUsIDApO1xuICBnbC5iaW5kRnJhbWVidWZmZXIoZ2wuRlJBTUVCVUZGRVIsIG51bGwpO1xuICBmYi5zZXRGcmFtZWJ1ZmZlckF0dGFjaG1lbnRTaXplcyA9IGZ1bmN0aW9uICh3aWR0aCwgaGVpZ2h0KSB7XG4gICAgZ2wuYmluZFRleHR1cmUoZ2wuVEVYVFVSRV8yRCwgdGFyZ2V0VGV4dHVyZSk7XG4gICAgZ2wudGV4SW1hZ2UyRChnbC5URVhUVVJFXzJELCAwLCBnbC5SR0JBLCB3aWR0aCwgaGVpZ2h0LCAwLCBnbC5SR0JBLCBnbC5VTlNJR05FRF9CWVRFLCBudWxsKTtcbiAgfTtcbiAgcmV0dXJuIGZiO1xufVxuXG4vKipcbiAqIENvbW1vbiB1dGlsaXRpZXNcbiAqIEBtb2R1bGUgZ2xNYXRyaXhcbiAqL1xuLy8gQ29uZmlndXJhdGlvbiBDb25zdGFudHNcbnZhciBBUlJBWV9UWVBFID0gdHlwZW9mIEZsb2F0MzJBcnJheSAhPT0gJ3VuZGVmaW5lZCcgPyBGbG9hdDMyQXJyYXkgOiBBcnJheTtcbmlmICghTWF0aC5oeXBvdCkgTWF0aC5oeXBvdCA9IGZ1bmN0aW9uICgpIHtcbiAgdmFyIHkgPSAwLFxuICAgICAgaSA9IGFyZ3VtZW50cy5sZW5ndGg7XG5cbiAgd2hpbGUgKGktLSkge1xuICAgIHkgKz0gYXJndW1lbnRzW2ldICogYXJndW1lbnRzW2ldO1xuICB9XG5cbiAgcmV0dXJuIE1hdGguc3FydCh5KTtcbn07XG5cbi8qKlxuICogM3gzIE1hdHJpeFxuICogQG1vZHVsZSBtYXQzXG4gKi9cblxuLyoqXG4gKiBDcmVhdGVzIGEgbmV3IGlkZW50aXR5IG1hdDNcbiAqXG4gKiBAcmV0dXJucyB7bWF0M30gYSBuZXcgM3gzIG1hdHJpeFxuICovXG5cbmZ1bmN0aW9uIGNyZWF0ZSgpIHtcbiAgdmFyIG91dCA9IG5ldyBBUlJBWV9UWVBFKDkpO1xuXG4gIGlmIChBUlJBWV9UWVBFICE9IEZsb2F0MzJBcnJheSkge1xuICAgIG91dFsxXSA9IDA7XG4gICAgb3V0WzJdID0gMDtcbiAgICBvdXRbM10gPSAwO1xuICAgIG91dFs1XSA9IDA7XG4gICAgb3V0WzZdID0gMDtcbiAgICBvdXRbN10gPSAwO1xuICB9XG5cbiAgb3V0WzBdID0gMTtcbiAgb3V0WzRdID0gMTtcbiAgb3V0WzhdID0gMTtcbiAgcmV0dXJuIG91dDtcbn1cbi8qKlxuICogU2V0IGEgbWF0MyB0byB0aGUgaWRlbnRpdHkgbWF0cml4XG4gKlxuICogQHBhcmFtIHttYXQzfSBvdXQgdGhlIHJlY2VpdmluZyBtYXRyaXhcbiAqIEByZXR1cm5zIHttYXQzfSBvdXRcbiAqL1xuXG5mdW5jdGlvbiBpZGVudGl0eShvdXQpIHtcbiAgb3V0WzBdID0gMTtcbiAgb3V0WzFdID0gMDtcbiAgb3V0WzJdID0gMDtcbiAgb3V0WzNdID0gMDtcbiAgb3V0WzRdID0gMTtcbiAgb3V0WzVdID0gMDtcbiAgb3V0WzZdID0gMDtcbiAgb3V0WzddID0gMDtcbiAgb3V0WzhdID0gMTtcbiAgcmV0dXJuIG91dDtcbn1cbi8qKlxuICogTXVsdGlwbGllcyB0d28gbWF0MydzXG4gKlxuICogQHBhcmFtIHttYXQzfSBvdXQgdGhlIHJlY2VpdmluZyBtYXRyaXhcbiAqIEBwYXJhbSB7UmVhZG9ubHlNYXQzfSBhIHRoZSBmaXJzdCBvcGVyYW5kXG4gKiBAcGFyYW0ge1JlYWRvbmx5TWF0M30gYiB0aGUgc2Vjb25kIG9wZXJhbmRcbiAqIEByZXR1cm5zIHttYXQzfSBvdXRcbiAqL1xuXG5mdW5jdGlvbiBtdWx0aXBseShvdXQsIGEsIGIpIHtcbiAgdmFyIGEwMCA9IGFbMF0sXG4gICAgICBhMDEgPSBhWzFdLFxuICAgICAgYTAyID0gYVsyXTtcbiAgdmFyIGExMCA9IGFbM10sXG4gICAgICBhMTEgPSBhWzRdLFxuICAgICAgYTEyID0gYVs1XTtcbiAgdmFyIGEyMCA9IGFbNl0sXG4gICAgICBhMjEgPSBhWzddLFxuICAgICAgYTIyID0gYVs4XTtcbiAgdmFyIGIwMCA9IGJbMF0sXG4gICAgICBiMDEgPSBiWzFdLFxuICAgICAgYjAyID0gYlsyXTtcbiAgdmFyIGIxMCA9IGJbM10sXG4gICAgICBiMTEgPSBiWzRdLFxuICAgICAgYjEyID0gYls1XTtcbiAgdmFyIGIyMCA9IGJbNl0sXG4gICAgICBiMjEgPSBiWzddLFxuICAgICAgYjIyID0gYls4XTtcbiAgb3V0WzBdID0gYjAwICogYTAwICsgYjAxICogYTEwICsgYjAyICogYTIwO1xuICBvdXRbMV0gPSBiMDAgKiBhMDEgKyBiMDEgKiBhMTEgKyBiMDIgKiBhMjE7XG4gIG91dFsyXSA9IGIwMCAqIGEwMiArIGIwMSAqIGExMiArIGIwMiAqIGEyMjtcbiAgb3V0WzNdID0gYjEwICogYTAwICsgYjExICogYTEwICsgYjEyICogYTIwO1xuICBvdXRbNF0gPSBiMTAgKiBhMDEgKyBiMTEgKiBhMTEgKyBiMTIgKiBhMjE7XG4gIG91dFs1XSA9IGIxMCAqIGEwMiArIGIxMSAqIGExMiArIGIxMiAqIGEyMjtcbiAgb3V0WzZdID0gYjIwICogYTAwICsgYjIxICogYTEwICsgYjIyICogYTIwO1xuICBvdXRbN10gPSBiMjAgKiBhMDEgKyBiMjEgKiBhMTEgKyBiMjIgKiBhMjE7XG4gIG91dFs4XSA9IGIyMCAqIGEwMiArIGIyMSAqIGExMiArIGIyMiAqIGEyMjtcbiAgcmV0dXJuIG91dDtcbn1cbi8qKlxuICogVHJhbnNsYXRlIGEgbWF0MyBieSB0aGUgZ2l2ZW4gdmVjdG9yXG4gKlxuICogQHBhcmFtIHttYXQzfSBvdXQgdGhlIHJlY2VpdmluZyBtYXRyaXhcbiAqIEBwYXJhbSB7UmVhZG9ubHlNYXQzfSBhIHRoZSBtYXRyaXggdG8gdHJhbnNsYXRlXG4gKiBAcGFyYW0ge1JlYWRvbmx5VmVjMn0gdiB2ZWN0b3IgdG8gdHJhbnNsYXRlIGJ5XG4gKiBAcmV0dXJucyB7bWF0M30gb3V0XG4gKi9cblxuZnVuY3Rpb24gdHJhbnNsYXRlKG91dCwgYSwgdikge1xuICB2YXIgYTAwID0gYVswXSxcbiAgICAgIGEwMSA9IGFbMV0sXG4gICAgICBhMDIgPSBhWzJdLFxuICAgICAgYTEwID0gYVszXSxcbiAgICAgIGExMSA9IGFbNF0sXG4gICAgICBhMTIgPSBhWzVdLFxuICAgICAgYTIwID0gYVs2XSxcbiAgICAgIGEyMSA9IGFbN10sXG4gICAgICBhMjIgPSBhWzhdLFxuICAgICAgeCA9IHZbMF0sXG4gICAgICB5ID0gdlsxXTtcbiAgb3V0WzBdID0gYTAwO1xuICBvdXRbMV0gPSBhMDE7XG4gIG91dFsyXSA9IGEwMjtcbiAgb3V0WzNdID0gYTEwO1xuICBvdXRbNF0gPSBhMTE7XG4gIG91dFs1XSA9IGExMjtcbiAgb3V0WzZdID0geCAqIGEwMCArIHkgKiBhMTAgKyBhMjA7XG4gIG91dFs3XSA9IHggKiBhMDEgKyB5ICogYTExICsgYTIxO1xuICBvdXRbOF0gPSB4ICogYTAyICsgeSAqIGExMiArIGEyMjtcbiAgcmV0dXJuIG91dDtcbn1cbi8qKlxuICogUm90YXRlcyBhIG1hdDMgYnkgdGhlIGdpdmVuIGFuZ2xlXG4gKlxuICogQHBhcmFtIHttYXQzfSBvdXQgdGhlIHJlY2VpdmluZyBtYXRyaXhcbiAqIEBwYXJhbSB7UmVhZG9ubHlNYXQzfSBhIHRoZSBtYXRyaXggdG8gcm90YXRlXG4gKiBAcGFyYW0ge051bWJlcn0gcmFkIHRoZSBhbmdsZSB0byByb3RhdGUgdGhlIG1hdHJpeCBieVxuICogQHJldHVybnMge21hdDN9IG91dFxuICovXG5cbmZ1bmN0aW9uIHJvdGF0ZShvdXQsIGEsIHJhZCkge1xuICB2YXIgYTAwID0gYVswXSxcbiAgICAgIGEwMSA9IGFbMV0sXG4gICAgICBhMDIgPSBhWzJdLFxuICAgICAgYTEwID0gYVszXSxcbiAgICAgIGExMSA9IGFbNF0sXG4gICAgICBhMTIgPSBhWzVdLFxuICAgICAgYTIwID0gYVs2XSxcbiAgICAgIGEyMSA9IGFbN10sXG4gICAgICBhMjIgPSBhWzhdLFxuICAgICAgcyA9IE1hdGguc2luKHJhZCksXG4gICAgICBjID0gTWF0aC5jb3MocmFkKTtcbiAgb3V0WzBdID0gYyAqIGEwMCArIHMgKiBhMTA7XG4gIG91dFsxXSA9IGMgKiBhMDEgKyBzICogYTExO1xuICBvdXRbMl0gPSBjICogYTAyICsgcyAqIGExMjtcbiAgb3V0WzNdID0gYyAqIGExMCAtIHMgKiBhMDA7XG4gIG91dFs0XSA9IGMgKiBhMTEgLSBzICogYTAxO1xuICBvdXRbNV0gPSBjICogYTEyIC0gcyAqIGEwMjtcbiAgb3V0WzZdID0gYTIwO1xuICBvdXRbN10gPSBhMjE7XG4gIG91dFs4XSA9IGEyMjtcbiAgcmV0dXJuIG91dDtcbn1cbi8qKlxuICogU2NhbGVzIHRoZSBtYXQzIGJ5IHRoZSBkaW1lbnNpb25zIGluIHRoZSBnaXZlbiB2ZWMyXG4gKlxuICogQHBhcmFtIHttYXQzfSBvdXQgdGhlIHJlY2VpdmluZyBtYXRyaXhcbiAqIEBwYXJhbSB7UmVhZG9ubHlNYXQzfSBhIHRoZSBtYXRyaXggdG8gcm90YXRlXG4gKiBAcGFyYW0ge1JlYWRvbmx5VmVjMn0gdiB0aGUgdmVjMiB0byBzY2FsZSB0aGUgbWF0cml4IGJ5XG4gKiBAcmV0dXJucyB7bWF0M30gb3V0XG4gKiovXG5cbmZ1bmN0aW9uIHNjYWxlKG91dCwgYSwgdikge1xuICB2YXIgeCA9IHZbMF0sXG4gICAgICB5ID0gdlsxXTtcbiAgb3V0WzBdID0geCAqIGFbMF07XG4gIG91dFsxXSA9IHggKiBhWzFdO1xuICBvdXRbMl0gPSB4ICogYVsyXTtcbiAgb3V0WzNdID0geSAqIGFbM107XG4gIG91dFs0XSA9IHkgKiBhWzRdO1xuICBvdXRbNV0gPSB5ICogYVs1XTtcbiAgb3V0WzZdID0gYVs2XTtcbiAgb3V0WzddID0gYVs3XTtcbiAgb3V0WzhdID0gYVs4XTtcbiAgcmV0dXJuIG91dDtcbn1cbi8qKlxuICogR2VuZXJhdGVzIGEgMkQgcHJvamVjdGlvbiBtYXRyaXggd2l0aCB0aGUgZ2l2ZW4gYm91bmRzXG4gKlxuICogQHBhcmFtIHttYXQzfSBvdXQgbWF0MyBmcnVzdHVtIG1hdHJpeCB3aWxsIGJlIHdyaXR0ZW4gaW50b1xuICogQHBhcmFtIHtudW1iZXJ9IHdpZHRoIFdpZHRoIG9mIHlvdXIgZ2wgY29udGV4dFxuICogQHBhcmFtIHtudW1iZXJ9IGhlaWdodCBIZWlnaHQgb2YgZ2wgY29udGV4dFxuICogQHJldHVybnMge21hdDN9IG91dFxuICovXG5cbmZ1bmN0aW9uIHByb2plY3Rpb24ob3V0LCB3aWR0aCwgaGVpZ2h0KSB7XG4gIG91dFswXSA9IDIgLyB3aWR0aDtcbiAgb3V0WzFdID0gMDtcbiAgb3V0WzJdID0gMDtcbiAgb3V0WzNdID0gMDtcbiAgb3V0WzRdID0gLTIgLyBoZWlnaHQ7XG4gIG91dFs1XSA9IDA7XG4gIG91dFs2XSA9IC0xO1xuICBvdXRbN10gPSAxO1xuICBvdXRbOF0gPSAxO1xuICByZXR1cm4gb3V0O1xufVxuXG52YXIgUkVOREVSX1RBUkdFVCA9IHtcbiAgU0NSRUVOOiB7XG4gICAgbmFtZTogJ3NjcmVlbicsXG4gICAgc2NyZWVuOiB0cnVlXG4gIH0sXG4gIFBJQ0tJTkc6IHtcbiAgICBuYW1lOiAncGlja2luZycsXG4gICAgcGlja2luZzogdHJ1ZVxuICB9XG59O1xudmFyIGF0bGFzQ29sbGVjdGlvbkRlZmF1bHRzID0gZGVmYXVsdHMkZyh7XG4gIHRleFJvd3M6IDI0XG59KTtcbnZhciByZW5kZXJEZWZhdWx0cyA9IGRlZmF1bHRzJGcoe1xuICBjb2xsZWN0aW9uOiAnZGVmYXVsdCcsXG4gIGdldEtleTogbnVsbCxcbiAgLy8gc2luY2UgcmVuZGVyIHR5cGVzIChlZyBub2RlLWJvZHksIG5vZGUtb3ZlcmxheSkgY2FuIHNoYXJlIGFuIGF0bGFzIGNvbGxlY3Rpb24sIGl0cyBpbXBvcnRlYW50IHRoZWlyIHN0eWxlIGtleXMgZG9uJ3QgY29sbGlkZVxuICBkcmF3RWxlbWVudDogbnVsbCxcbiAgZ2V0Qm91bmRpbmdCb3g6IG51bGwsXG4gIGdldFJvdGF0aW9uOiBudWxsLFxuICBnZXRSb3RhdGlvblBvaW50OiBudWxsLFxuICBnZXRSb3RhdGlvbk9mZnNldDogbnVsbCxcbiAgaXNWaXNpYmxlOiBmdW5jdGlvbiBpc1Zpc2libGUoKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH0sXG4gIC8vIHRoaXMgaXMgYW4gZXh0cmEgY2hlY2sgZm9yIHZpc2liaWxpdHkgaW4gYWRkaXRpb24gdG8gZWxlLnZpc2libGUoKVxuICBnZXRQYWRkaW5nOiAwXG59KTtcblxuLy8gQSBcInRleHR1cmUgYXRsYXNcIiBpcyBhIGJpZyBpbWFnZS9jYW52YXMsIGFuZCBzZWN0aW9ucyBvZiBpdCBhcmUgdXNlZCBhcyB0ZXh0dXJlcyBmb3Igbm9kZXMvbGFiZWxzLlxuXG4vKipcbiAqIEEgc2luZ2xlIHNxdWFyZSB0ZXh0dXJlIGF0bGFzIChhbHNvIGtub3duIGFzIGEgXCJzcHJpdGUgc2hlZXRcIikuXG4gKi9cbnZhciBBdGxhcyA9IC8qI19fUFVSRV9fKi9mdW5jdGlvbiAoKSB7XG4gIGZ1bmN0aW9uIEF0bGFzKHIsIHRleFNpemUsIHRleFJvd3MsIGNyZWF0ZVRleHR1cmVDYW52YXMpIHtcbiAgICBfY2xhc3NDYWxsQ2hlY2sodGhpcywgQXRsYXMpO1xuICAgIHRoaXMuZGVidWdJRCA9IE1hdGguZmxvb3IoTWF0aC5yYW5kb20oKSAqIDEwMDAwKTtcbiAgICB0aGlzLnIgPSByO1xuICAgIHRoaXMudGV4U2l6ZSA9IHRleFNpemU7XG4gICAgdGhpcy50ZXhSb3dzID0gdGV4Um93cztcbiAgICB0aGlzLnRleEhlaWdodCA9IE1hdGguZmxvb3IodGV4U2l6ZSAvIHRleFJvd3MpO1xuICAgIHRoaXMuZW5hYmxlV3JhcHBpbmcgPSB0cnVlOyAvLyBoYXJkY29kZWQgZm9yIG5vdywgY2FuIGJlIG1hZGUgYW4gb3B0aW9uXG5cbiAgICB0aGlzLmxvY2tlZCA9IGZhbHNlOyAvLyBvbmNlIGFuIGF0bGFzIGlzIGxvY2tlZCBpdCBjYW4gbm8gbG9uZ2VyIGJlIGRyYXduIHRvXG4gICAgdGhpcy50ZXh0dXJlID0gbnVsbDsgLy8gV2ViR0xUZXh0dXJlIG9iamVjdFxuICAgIHRoaXMubmVlZHNCdWZmZXIgPSB0cnVlO1xuXG4gICAgLy8gYSBcImxvY2F0aW9uXCIgaXMgYW4gb2JqZWN0IHdpdGggYSAncm93JyBhbmQgJ3gnIGZpZWxkc1xuICAgIHRoaXMuZnJlZVBvaW50ZXIgPSB7XG4gICAgICB4OiAwLFxuICAgICAgcm93OiAwXG4gICAgfTtcblxuICAgIC8vIG1hcCBmcm9tIHRoZSBzdHlsZSBrZXkgdG8gdGhlIHJvdy94IHdoZXJlIHRoZSB0ZXh0dXJlIHN0YXJ0c1xuICAgIC8vIGlmIHRoZSB0ZXh0dXJlIHdyYXBzIHRoZW4gdGhlcmUncyBhIHNlY29uZCBsb2NhdGlvblxuICAgIHRoaXMua2V5VG9Mb2NhdGlvbiA9IG5ldyBNYXAoKTsgLy8gc3R5bGVLZXkgLT4gWyBsb2NhdGlvbiwgbG9jYXRpb24gXVxuXG4gICAgdGhpcy5jYW52YXMgPSBjcmVhdGVUZXh0dXJlQ2FudmFzKHIsIHRleFNpemUsIHRleFNpemUpO1xuICAgIHRoaXMuc2NyYXRjaCA9IGNyZWF0ZVRleHR1cmVDYW52YXMociwgdGV4U2l6ZSwgdGhpcy50ZXhIZWlnaHQsICdzY3JhdGNoJyk7XG4gIH1cbiAgcmV0dXJuIF9jcmVhdGVDbGFzcyhBdGxhcywgW3tcbiAgICBrZXk6IFwibG9ja1wiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBsb2NrKCkge1xuICAgICAgdGhpcy5sb2NrZWQgPSB0cnVlO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJnZXRLZXlzXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGdldEtleXMoKSB7XG4gICAgICByZXR1cm4gbmV3IFNldCh0aGlzLmtleVRvTG9jYXRpb24ua2V5cygpKTtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwiZ2V0U2NhbGVcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gZ2V0U2NhbGUoX3JlZikge1xuICAgICAgdmFyIHcgPSBfcmVmLncsXG4gICAgICAgIGggPSBfcmVmLmg7XG4gICAgICB2YXIgdGV4SGVpZ2h0ID0gdGhpcy50ZXhIZWlnaHQsXG4gICAgICAgIG1heFRleFdpZHRoID0gdGhpcy50ZXhTaXplO1xuICAgICAgLy8gdHJ5IHRvIGZpdCB0byB0aGUgaGVpZ2h0IG9mIGEgcm93XG4gICAgICB2YXIgc2NhbGUgPSB0ZXhIZWlnaHQgLyBoOyAvLyBUT0RPIHdoYXQgYWJvdXQgcGl4ZWxSYXRpbz9cbiAgICAgIHZhciB0ZXhXID0gdyAqIHNjYWxlO1xuICAgICAgdmFyIHRleEggPSBoICogc2NhbGU7XG4gICAgICAvLyBpZiB0aGUgc2NhbGVkIHdpZHRoIGlzIHRvbyB3aWRlIHRoZW4gc2NhbGUgdG8gZml0IG1heCB3aWR0aCBpbnN0ZWFkXG4gICAgICBpZiAodGV4VyA+IG1heFRleFdpZHRoKSB7XG4gICAgICAgIHNjYWxlID0gbWF4VGV4V2lkdGggLyB3O1xuICAgICAgICB0ZXhXID0gdyAqIHNjYWxlO1xuICAgICAgICB0ZXhIID0gaCAqIHNjYWxlO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgc2NhbGU6IHNjYWxlLFxuICAgICAgICB0ZXhXOiB0ZXhXLFxuICAgICAgICB0ZXhIOiB0ZXhIXG4gICAgICB9O1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJkcmF3XCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGRyYXcoa2V5LCBiYiwgZG9EcmF3aW5nKSB7XG4gICAgICB2YXIgX3RoaXMgPSB0aGlzO1xuICAgICAgaWYgKHRoaXMubG9ja2VkKSB0aHJvdyBuZXcgRXJyb3IoJ2NhblxcJ3QgZHJhdywgYXRsYXMgaXMgbG9ja2VkJyk7XG4gICAgICB2YXIgdGV4U2l6ZSA9IHRoaXMudGV4U2l6ZSxcbiAgICAgICAgdGV4Um93cyA9IHRoaXMudGV4Um93cyxcbiAgICAgICAgdGV4SGVpZ2h0ID0gdGhpcy50ZXhIZWlnaHQ7XG4gICAgICB2YXIgX3RoaXMkZ2V0U2NhbGUgPSB0aGlzLmdldFNjYWxlKGJiKSxcbiAgICAgICAgc2NhbGUgPSBfdGhpcyRnZXRTY2FsZS5zY2FsZSxcbiAgICAgICAgdGV4VyA9IF90aGlzJGdldFNjYWxlLnRleFcsXG4gICAgICAgIHRleEggPSBfdGhpcyRnZXRTY2FsZS50ZXhIO1xuICAgICAgdmFyIGxvY2F0aW9ucyA9IFtudWxsLCBudWxsXTtcbiAgICAgIHZhciBkcmF3QXQgPSBmdW5jdGlvbiBkcmF3QXQobG9jYXRpb24sIGNhbnZhcykge1xuICAgICAgICBpZiAoZG9EcmF3aW5nICYmIGNhbnZhcykge1xuICAgICAgICAgIHZhciBjb250ZXh0ID0gY2FudmFzLmNvbnRleHQ7XG4gICAgICAgICAgdmFyIHggPSBsb2NhdGlvbi54LFxuICAgICAgICAgICAgcm93ID0gbG9jYXRpb24ucm93O1xuICAgICAgICAgIHZhciB4T2Zmc2V0ID0geDtcbiAgICAgICAgICB2YXIgeU9mZnNldCA9IHRleEhlaWdodCAqIHJvdztcbiAgICAgICAgICBjb250ZXh0LnNhdmUoKTtcbiAgICAgICAgICBjb250ZXh0LnRyYW5zbGF0ZSh4T2Zmc2V0LCB5T2Zmc2V0KTtcbiAgICAgICAgICBjb250ZXh0LnNjYWxlKHNjYWxlLCBzY2FsZSk7XG4gICAgICAgICAgZG9EcmF3aW5nKGNvbnRleHQsIGJiKTtcbiAgICAgICAgICBjb250ZXh0LnJlc3RvcmUoKTtcbiAgICAgICAgfVxuICAgICAgfTtcbiAgICAgIHZhciBkcmF3Tm9ybWFsID0gZnVuY3Rpb24gZHJhd05vcm1hbCgpIHtcbiAgICAgICAgLy8gZG9uJ3QgbmVlZCB0byB3cmFwLCBkcmF3IGRpcmVjdGx5IG9uIHRoZSBjYW52YXNcbiAgICAgICAgZHJhd0F0KF90aGlzLmZyZWVQb2ludGVyLCBfdGhpcy5jYW52YXMpO1xuICAgICAgICBsb2NhdGlvbnNbMF0gPSB7XG4gICAgICAgICAgeDogX3RoaXMuZnJlZVBvaW50ZXIueCxcbiAgICAgICAgICB5OiBfdGhpcy5mcmVlUG9pbnRlci5yb3cgKiB0ZXhIZWlnaHQsXG4gICAgICAgICAgdzogdGV4VyxcbiAgICAgICAgICBoOiB0ZXhIXG4gICAgICAgIH07XG4gICAgICAgIGxvY2F0aW9uc1sxXSA9IHtcbiAgICAgICAgICAvLyBpbmRsdWRlIGEgc2Vjb25kIGxvY2F0aW9uIHdpdGggYSB3aWR0aCBvZiAwLCBmb3IgY29udmVuaWVuY2VcbiAgICAgICAgICB4OiBfdGhpcy5mcmVlUG9pbnRlci54ICsgdGV4VyxcbiAgICAgICAgICB5OiBfdGhpcy5mcmVlUG9pbnRlci5yb3cgKiB0ZXhIZWlnaHQsXG4gICAgICAgICAgdzogMCxcbiAgICAgICAgICBoOiB0ZXhIXG4gICAgICAgIH07XG5cbiAgICAgICAgLy8gbW92ZSB0aGUgcG9pbnRlciB0byB0aGUgZW5kIG9mIHRoZSB0ZXh0dXJlXG4gICAgICAgIF90aGlzLmZyZWVQb2ludGVyLnggKz0gdGV4VztcbiAgICAgICAgaWYgKF90aGlzLmZyZWVQb2ludGVyLnggPT0gdGV4U2l6ZSkge1xuICAgICAgICAgIC8vIG1vdmUgdG8gdGhlIG5leHQgcm93XG4gICAgICAgICAgLy8gVE9ETyB3aGF0IGlmIHRoZXJlIGlzIG5vIG5leHQgcm93Pz8/XG4gICAgICAgICAgX3RoaXMuZnJlZVBvaW50ZXIueCA9IDA7XG4gICAgICAgICAgX3RoaXMuZnJlZVBvaW50ZXIucm93Kys7XG4gICAgICAgIH1cbiAgICAgIH07XG4gICAgICB2YXIgZHJhd1dyYXBwZWQgPSBmdW5jdGlvbiBkcmF3V3JhcHBlZCgpIHtcbiAgICAgICAgdmFyIHNjcmF0Y2ggPSBfdGhpcy5zY3JhdGNoLFxuICAgICAgICAgIGNhbnZhcyA9IF90aGlzLmNhbnZhcztcblxuICAgICAgICAvLyBEcmF3IHRvIHRoZSBzY3JhdGNoIGNhbnZhc1xuICAgICAgICBzY3JhdGNoLmNsZWFyKCk7XG4gICAgICAgIGRyYXdBdCh7XG4gICAgICAgICAgeDogMCxcbiAgICAgICAgICByb3c6IDBcbiAgICAgICAgfSwgc2NyYXRjaCk7XG4gICAgICAgIHZhciBmaXJzdFRleFcgPSB0ZXhTaXplIC0gX3RoaXMuZnJlZVBvaW50ZXIueDtcbiAgICAgICAgdmFyIHNlY29uZFRleFcgPSB0ZXhXIC0gZmlyc3RUZXhXO1xuICAgICAgICB2YXIgaCA9IHRleEhlaWdodDtcbiAgICAgICAge1xuICAgICAgICAgIC8vIGNvcHkgZmlyc3QgcGFydCBvZiBzY3JhdGNoIHRvIHRoZSBmaXJzdCB0ZXh0dXJlXG4gICAgICAgICAgdmFyIGR4ID0gX3RoaXMuZnJlZVBvaW50ZXIueDtcbiAgICAgICAgICB2YXIgZHkgPSBfdGhpcy5mcmVlUG9pbnRlci5yb3cgKiB0ZXhIZWlnaHQ7XG4gICAgICAgICAgdmFyIHcgPSBmaXJzdFRleFc7XG4gICAgICAgICAgY2FudmFzLmNvbnRleHQuZHJhd0ltYWdlKHNjcmF0Y2gsIDAsIDAsIHcsIGgsIGR4LCBkeSwgdywgaCk7XG4gICAgICAgICAgbG9jYXRpb25zWzBdID0ge1xuICAgICAgICAgICAgeDogZHgsXG4gICAgICAgICAgICB5OiBkeSxcbiAgICAgICAgICAgIHc6IHcsXG4gICAgICAgICAgICBoOiB0ZXhIXG4gICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgICB7XG4gICAgICAgICAgLy8gY29weSBzZWNvbmQgcGFydCBvZiBzY3JhdGNoIHRvIHRoZSBzZWNvbmQgdGV4dHVyZVxuICAgICAgICAgIHZhciBzeCA9IGZpcnN0VGV4VztcbiAgICAgICAgICB2YXIgX2R5ID0gKF90aGlzLmZyZWVQb2ludGVyLnJvdyArIDEpICogdGV4SGVpZ2h0O1xuICAgICAgICAgIHZhciBfdyA9IHNlY29uZFRleFc7XG4gICAgICAgICAgaWYgKGNhbnZhcykge1xuICAgICAgICAgICAgY2FudmFzLmNvbnRleHQuZHJhd0ltYWdlKHNjcmF0Y2gsIHN4LCAwLCBfdywgaCwgMCwgX2R5LCBfdywgaCk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGxvY2F0aW9uc1sxXSA9IHtcbiAgICAgICAgICAgIHg6IDAsXG4gICAgICAgICAgICB5OiBfZHksXG4gICAgICAgICAgICB3OiBfdyxcbiAgICAgICAgICAgIGg6IHRleEhcbiAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICAgIF90aGlzLmZyZWVQb2ludGVyLnggPSBzZWNvbmRUZXhXO1xuICAgICAgICBfdGhpcy5mcmVlUG9pbnRlci5yb3crKztcbiAgICAgIH07XG4gICAgICB2YXIgbW92ZVRvU3RhcnRPZk5leHRSb3cgPSBmdW5jdGlvbiBtb3ZlVG9TdGFydE9mTmV4dFJvdygpIHtcbiAgICAgICAgX3RoaXMuZnJlZVBvaW50ZXIueCA9IDA7XG4gICAgICAgIF90aGlzLmZyZWVQb2ludGVyLnJvdysrO1xuICAgICAgfTtcbiAgICAgIGlmICh0aGlzLmZyZWVQb2ludGVyLnggKyB0ZXhXIDw9IHRleFNpemUpIHtcbiAgICAgICAgLy8gVGhlcmUncyBlbm91Z2ggc3BhY2UgaW4gdGhlIGN1cnJlbnQgcm93XG4gICAgICAgIGRyYXdOb3JtYWwoKTtcbiAgICAgIH0gZWxzZSBpZiAodGhpcy5mcmVlUG9pbnRlci5yb3cgPj0gdGV4Um93cyAtIDEpIHtcbiAgICAgICAgLy8gTmVlZCB0byBtb3ZlIHRvIHRoZSBuZXh0IHJvdywgYnV0IHRoZXJlIGFyZSBubyBtb3JlIHJvd3MsIGF0bGFzIGlzIGZ1bGwuXG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH0gZWxzZSBpZiAodGhpcy5mcmVlUG9pbnRlci54ID09PSB0ZXhTaXplKSB7XG4gICAgICAgIC8vIGhhcHBlbiB0byBiZSByaWdodCBhdCBlbmQgb2YgY3VycmVudCByb3dcbiAgICAgICAgbW92ZVRvU3RhcnRPZk5leHRSb3coKTtcbiAgICAgICAgZHJhd05vcm1hbCgpO1xuICAgICAgfSBlbHNlIGlmICh0aGlzLmVuYWJsZVdyYXBwaW5nKSB7XG4gICAgICAgIC8vIGRyYXcgcGFydCBvZiB0aGUgdGV4dHVyZSB0byB0aGUgZW5kIG9mIHRoZSBjdXJlbnQgcm93LCB0aGVuIHdyYXAgdG8gdGhlIG5leHQgcm93XG4gICAgICAgIGRyYXdXcmFwcGVkKCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBtb3ZlIHRvIHRoZSBzdGFydCBvZiB0aGUgbmV4dCByb3csIHRoZW4gZHJhdyBub3JtYWxseVxuICAgICAgICBtb3ZlVG9TdGFydE9mTmV4dFJvdygpO1xuICAgICAgICBkcmF3Tm9ybWFsKCk7XG4gICAgICB9XG4gICAgICB0aGlzLmtleVRvTG9jYXRpb24uc2V0KGtleSwgbG9jYXRpb25zKTtcbiAgICAgIHRoaXMubmVlZHNCdWZmZXIgPSB0cnVlO1xuICAgICAgcmV0dXJuIGxvY2F0aW9ucztcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwiZ2V0T2Zmc2V0c1wiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBnZXRPZmZzZXRzKGtleSkge1xuICAgICAgcmV0dXJuIHRoaXMua2V5VG9Mb2NhdGlvbi5nZXQoa2V5KTtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwiaXNFbXB0eVwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBpc0VtcHR5KCkge1xuICAgICAgcmV0dXJuIHRoaXMuZnJlZVBvaW50ZXIueCA9PT0gMCAmJiB0aGlzLmZyZWVQb2ludGVyLnJvdyA9PT0gMDtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwiY2FuRml0XCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGNhbkZpdChiYikge1xuICAgICAgaWYgKHRoaXMubG9ja2VkKSByZXR1cm4gZmFsc2U7XG4gICAgICB2YXIgdGV4U2l6ZSA9IHRoaXMudGV4U2l6ZSxcbiAgICAgICAgdGV4Um93cyA9IHRoaXMudGV4Um93cztcbiAgICAgIHZhciBfdGhpcyRnZXRTY2FsZTIgPSB0aGlzLmdldFNjYWxlKGJiKSxcbiAgICAgICAgdGV4VyA9IF90aGlzJGdldFNjYWxlMi50ZXhXO1xuICAgICAgaWYgKHRoaXMuZnJlZVBvaW50ZXIueCArIHRleFcgPiB0ZXhTaXplKSB7XG4gICAgICAgIC8vIG5lZWQgdG8gd3JhcFxuICAgICAgICByZXR1cm4gdGhpcy5mcmVlUG9pbnRlci5yb3cgPCB0ZXhSb3dzIC0gMTsgLy8gcmV0dXJuIHRydWUgaWYgdGhlcmUncyBhIHJvdyB0byB3cmFwIHRvXG4gICAgICB9XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICAvLyBjYWxsZWQgb24gZXZlcnkgZnJhbWVcbiAgfSwge1xuICAgIGtleTogXCJidWZmZXJJZk5lZWRlZFwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBidWZmZXJJZk5lZWRlZChnbCkge1xuICAgICAgaWYgKCF0aGlzLnRleHR1cmUpIHtcbiAgICAgICAgdGhpcy50ZXh0dXJlID0gY3JlYXRlVGV4dHVyZShnbCwgdGhpcy5kZWJ1Z0lEKTtcbiAgICAgIH1cbiAgICAgIGlmICh0aGlzLm5lZWRzQnVmZmVyKSB7XG4gICAgICAgIHRoaXMudGV4dHVyZS5idWZmZXIodGhpcy5jYW52YXMpO1xuICAgICAgICB0aGlzLm5lZWRzQnVmZmVyID0gZmFsc2U7XG4gICAgICAgIGlmICh0aGlzLmxvY2tlZCkge1xuICAgICAgICAgIHRoaXMuY2FudmFzID0gbnVsbDtcbiAgICAgICAgICB0aGlzLnNjcmF0Y2ggPSBudWxsO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcImRpc3Bvc2VcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gZGlzcG9zZSgpIHtcbiAgICAgIGlmICh0aGlzLnRleHR1cmUpIHtcbiAgICAgICAgdGhpcy50ZXh0dXJlLmRlbGV0ZVRleHR1cmUoKTtcbiAgICAgICAgdGhpcy50ZXh0dXJlID0gbnVsbDtcbiAgICAgIH1cbiAgICAgIHRoaXMuY2FudmFzID0gbnVsbDtcbiAgICAgIHRoaXMuc2NyYXRjaCA9IG51bGw7XG4gICAgICB0aGlzLmxvY2tlZCA9IHRydWU7XG4gICAgfVxuICB9XSk7XG59KCk7XG5cbi8qKlxuICogQSBjb2xsZWN0aW9uIG9mIHRleHR1cmUgYXRsYXNlcywgYWxsIG9mIHRoZSBzYW1lIFwicmVuZGVyIHR5cGVcIi4gXG4gKiAoTm9kZSBib2R5IGlzIGFuIGV4YW1wbGUgb2YgYSByZW5kZXIgdHlwZS4pXG4gKiBBbiBBdGxhc0NvbGxlY3Rpb24gY2FuIGFsc28gYmUgbm90aWZpZWQgd2hlbiBhIHRleHR1cmUgaXMgbm8gbG9uZ2VyIG5lZWRlZCwgXG4gKiBhbmQgaXQgY2FuIGdhcmJhZ2UgY29sbGVjdCB0aGUgdW51c2VkIHRleHR1cmVzLlxuICovXG52YXIgQXRsYXNDb2xsZWN0aW9uID0gLyojX19QVVJFX18qL2Z1bmN0aW9uICgpIHtcbiAgZnVuY3Rpb24gQXRsYXNDb2xsZWN0aW9uKHIsIHRleFNpemUsIHRleFJvd3MsIGNyZWF0ZVRleHR1cmVDYW52YXMpIHtcbiAgICBfY2xhc3NDYWxsQ2hlY2sodGhpcywgQXRsYXNDb2xsZWN0aW9uKTtcbiAgICB0aGlzLnIgPSByO1xuICAgIHRoaXMudGV4U2l6ZSA9IHRleFNpemU7XG4gICAgdGhpcy50ZXhSb3dzID0gdGV4Um93cztcbiAgICB0aGlzLmNyZWF0ZVRleHR1cmVDYW52YXMgPSBjcmVhdGVUZXh0dXJlQ2FudmFzO1xuICAgIHRoaXMuYXRsYXNlcyA9IFtdO1xuICAgIHRoaXMuc3R5bGVLZXlUb0F0bGFzID0gbmV3IE1hcCgpO1xuICAgIHRoaXMubWFya2VkS2V5cyA9IG5ldyBTZXQoKTsgLy8gbWFya2VkIGZvciBnYXJiYWdlIGNvbGxlY3Rpb25cbiAgfVxuICByZXR1cm4gX2NyZWF0ZUNsYXNzKEF0bGFzQ29sbGVjdGlvbiwgW3tcbiAgICBrZXk6IFwiZ2V0S2V5c1wiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBnZXRLZXlzKCkge1xuICAgICAgcmV0dXJuIG5ldyBTZXQodGhpcy5zdHlsZUtleVRvQXRsYXMua2V5cygpKTtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwiX2NyZWF0ZUF0bGFzXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIF9jcmVhdGVBdGxhcygpIHtcbiAgICAgIHZhciByID0gdGhpcy5yLFxuICAgICAgICB0ZXhTaXplID0gdGhpcy50ZXhTaXplLFxuICAgICAgICB0ZXhSb3dzID0gdGhpcy50ZXhSb3dzLFxuICAgICAgICBjcmVhdGVUZXh0dXJlQ2FudmFzID0gdGhpcy5jcmVhdGVUZXh0dXJlQ2FudmFzO1xuICAgICAgcmV0dXJuIG5ldyBBdGxhcyhyLCB0ZXhTaXplLCB0ZXhSb3dzLCBjcmVhdGVUZXh0dXJlQ2FudmFzKTtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwiX2dldFNjcmF0Y2hDYW52YXNcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gX2dldFNjcmF0Y2hDYW52YXMoKSB7XG4gICAgICBpZiAoIXRoaXMuc2NyYXRjaCkge1xuICAgICAgICB2YXIgciA9IHRoaXMucixcbiAgICAgICAgICB0ZXhTaXplID0gdGhpcy50ZXhTaXplLFxuICAgICAgICAgIHRleFJvd3MgPSB0aGlzLnRleFJvd3MsXG4gICAgICAgICAgY3JlYXRlVGV4dHVyZUNhbnZhcyA9IHRoaXMuY3JlYXRlVGV4dHVyZUNhbnZhcztcbiAgICAgICAgdmFyIHRleEhlaWdodCA9IE1hdGguZmxvb3IodGV4U2l6ZSAvIHRleFJvd3MpO1xuICAgICAgICB0aGlzLnNjcmF0Y2ggPSBjcmVhdGVUZXh0dXJlQ2FudmFzKHIsIHRleFNpemUsIHRleEhlaWdodCwgJ3NjcmF0Y2gnKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiB0aGlzLnNjcmF0Y2g7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcImRyYXdcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gZHJhdyhrZXksIGJiLCBkb0RyYXdpbmcpIHtcbiAgICAgIHZhciBhdGxhcyA9IHRoaXMuc3R5bGVLZXlUb0F0bGFzLmdldChrZXkpO1xuICAgICAgaWYgKCFhdGxhcykge1xuICAgICAgICAvLyBjaGVjayBmb3Igc3BhY2UgYXQgdGhlIGVuZCBvZiB0aGUgbGFzdCBhdGxhc1xuICAgICAgICBhdGxhcyA9IHRoaXMuYXRsYXNlc1t0aGlzLmF0bGFzZXMubGVuZ3RoIC0gMV07XG4gICAgICAgIGlmICghYXRsYXMgfHwgIWF0bGFzLmNhbkZpdChiYikpIHtcbiAgICAgICAgICBpZiAoYXRsYXMpIGF0bGFzLmxvY2soKTtcbiAgICAgICAgICAvLyBjcmVhdGUgYSBuZXcgYXRsYXNcbiAgICAgICAgICBhdGxhcyA9IHRoaXMuX2NyZWF0ZUF0bGFzKCk7XG4gICAgICAgICAgdGhpcy5hdGxhc2VzLnB1c2goYXRsYXMpO1xuICAgICAgICB9XG4gICAgICAgIGF0bGFzLmRyYXcoa2V5LCBiYiwgZG9EcmF3aW5nKTtcbiAgICAgICAgdGhpcy5zdHlsZUtleVRvQXRsYXMuc2V0KGtleSwgYXRsYXMpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGF0bGFzO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJnZXRBdGxhc1wiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBnZXRBdGxhcyhrZXkpIHtcbiAgICAgIHJldHVybiB0aGlzLnN0eWxlS2V5VG9BdGxhcy5nZXQoa2V5KTtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwiaGFzQXRsYXNcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gaGFzQXRsYXMoa2V5KSB7XG4gICAgICByZXR1cm4gdGhpcy5zdHlsZUtleVRvQXRsYXMuaGFzKGtleSk7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcIm1hcmtLZXlGb3JHQ1wiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBtYXJrS2V5Rm9yR0Moa2V5KSB7XG4gICAgICB0aGlzLm1hcmtlZEtleXMuYWRkKGtleSk7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcImdjXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGdjKCkge1xuICAgICAgdmFyIF90aGlzMiA9IHRoaXM7XG4gICAgICB2YXIgbWFya2VkS2V5cyA9IHRoaXMubWFya2VkS2V5cztcbiAgICAgIGlmIChtYXJrZWRLZXlzLnNpemUgPT09IDApIHtcbiAgICAgICAgY29uc29sZS5sb2coJ25vdGhpbmcgdG8gZ2FyYmFnZSBjb2xsZWN0Jyk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIHZhciBuZXdBdGxhc2VzID0gW107XG4gICAgICB2YXIgbmV3U3R5bGVLZXlUb0F0bGFzID0gbmV3IE1hcCgpO1xuICAgICAgdmFyIG5ld0F0bGFzID0gbnVsbDtcbiAgICAgIHZhciBfaXRlcmF0b3IgPSBfY3JlYXRlRm9yT2ZJdGVyYXRvckhlbHBlcih0aGlzLmF0bGFzZXMpLFxuICAgICAgICBfc3RlcDtcbiAgICAgIHRyeSB7XG4gICAgICAgIHZhciBfbG9vcCA9IGZ1bmN0aW9uIF9sb29wKCkge1xuICAgICAgICAgIHZhciBhdGxhcyA9IF9zdGVwLnZhbHVlO1xuICAgICAgICAgIHZhciBrZXlzID0gYXRsYXMuZ2V0S2V5cygpO1xuICAgICAgICAgIHZhciBrZXlzVG9Db2xsZWN0ID0gaW50ZXJzZWN0aW9uKG1hcmtlZEtleXMsIGtleXMpO1xuICAgICAgICAgIGlmIChrZXlzVG9Db2xsZWN0LnNpemUgPT09IDApIHtcbiAgICAgICAgICAgIC8vIHRoaXMgYXRsYXMgY2FuIHN0aWxsIGJlIHVzZWRcbiAgICAgICAgICAgIG5ld0F0bGFzZXMucHVzaChhdGxhcyk7XG4gICAgICAgICAgICBrZXlzLmZvckVhY2goZnVuY3Rpb24gKGspIHtcbiAgICAgICAgICAgICAgcmV0dXJuIG5ld1N0eWxlS2V5VG9BdGxhcy5zZXQoaywgYXRsYXMpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICByZXR1cm4gMTsgLy8gY29udGludWVcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKCFuZXdBdGxhcykge1xuICAgICAgICAgICAgbmV3QXRsYXMgPSBfdGhpczIuX2NyZWF0ZUF0bGFzKCk7XG4gICAgICAgICAgICBuZXdBdGxhc2VzLnB1c2gobmV3QXRsYXMpO1xuICAgICAgICAgIH1cbiAgICAgICAgICB2YXIgX2l0ZXJhdG9yMiA9IF9jcmVhdGVGb3JPZkl0ZXJhdG9ySGVscGVyKGtleXMpLFxuICAgICAgICAgICAgX3N0ZXAyO1xuICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICBmb3IgKF9pdGVyYXRvcjIucygpOyAhKF9zdGVwMiA9IF9pdGVyYXRvcjIubigpKS5kb25lOykge1xuICAgICAgICAgICAgICB2YXIga2V5ID0gX3N0ZXAyLnZhbHVlO1xuICAgICAgICAgICAgICBpZiAoIWtleXNUb0NvbGxlY3QuaGFzKGtleSkpIHtcbiAgICAgICAgICAgICAgICB2YXIgX2F0bGFzJGdldE9mZnNldHMgPSBhdGxhcy5nZXRPZmZzZXRzKGtleSksXG4gICAgICAgICAgICAgICAgICBfYXRsYXMkZ2V0T2Zmc2V0czIgPSBfc2xpY2VkVG9BcnJheShfYXRsYXMkZ2V0T2Zmc2V0cywgMiksXG4gICAgICAgICAgICAgICAgICBzMSA9IF9hdGxhcyRnZXRPZmZzZXRzMlswXSxcbiAgICAgICAgICAgICAgICAgIHMyID0gX2F0bGFzJGdldE9mZnNldHMyWzFdO1xuICAgICAgICAgICAgICAgIGlmICghbmV3QXRsYXMuY2FuRml0KHtcbiAgICAgICAgICAgICAgICAgIHc6IHMxLncgKyBzMi53LFxuICAgICAgICAgICAgICAgICAgaDogczEuaFxuICAgICAgICAgICAgICAgIH0pKSB7XG4gICAgICAgICAgICAgICAgICBuZXdBdGxhcy5sb2NrKCk7XG4gICAgICAgICAgICAgICAgICBuZXdBdGxhcyA9IF90aGlzMi5fY3JlYXRlQXRsYXMoKTtcbiAgICAgICAgICAgICAgICAgIG5ld0F0bGFzZXMucHVzaChuZXdBdGxhcyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIF90aGlzMi5fY29weVRleHR1cmVUb05ld0F0bGFzKGtleSwgYXRsYXMsIG5ld0F0bGFzKTtcbiAgICAgICAgICAgICAgICBuZXdTdHlsZUtleVRvQXRsYXMuc2V0KGtleSwgbmV3QXRsYXMpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgICBfaXRlcmF0b3IyLmUoZXJyKTtcbiAgICAgICAgICB9IGZpbmFsbHkge1xuICAgICAgICAgICAgX2l0ZXJhdG9yMi5mKCk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGF0bGFzLmRpc3Bvc2UoKTtcbiAgICAgICAgfTtcbiAgICAgICAgZm9yIChfaXRlcmF0b3IucygpOyAhKF9zdGVwID0gX2l0ZXJhdG9yLm4oKSkuZG9uZTspIHtcbiAgICAgICAgICBpZiAoX2xvb3AoKSkgY29udGludWU7XG4gICAgICAgIH1cbiAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICBfaXRlcmF0b3IuZShlcnIpO1xuICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgX2l0ZXJhdG9yLmYoKTtcbiAgICAgIH1cbiAgICAgIHRoaXMuYXRsYXNlcyA9IG5ld0F0bGFzZXM7XG4gICAgICB0aGlzLnN0eWxlS2V5VG9BdGxhcyA9IG5ld1N0eWxlS2V5VG9BdGxhcztcbiAgICAgIHRoaXMubWFya2VkS2V5cyA9IG5ldyBTZXQoKTtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwiX2NvcHlUZXh0dXJlVG9OZXdBdGxhc1wiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBfY29weVRleHR1cmVUb05ld0F0bGFzKGtleSwgb2xkQXRsYXMsIG5ld0F0bGFzKSB7XG4gICAgICB2YXIgX29sZEF0bGFzJGdldE9mZnNldHMgPSBvbGRBdGxhcy5nZXRPZmZzZXRzKGtleSksXG4gICAgICAgIF9vbGRBdGxhcyRnZXRPZmZzZXRzMiA9IF9zbGljZWRUb0FycmF5KF9vbGRBdGxhcyRnZXRPZmZzZXRzLCAyKSxcbiAgICAgICAgczEgPSBfb2xkQXRsYXMkZ2V0T2Zmc2V0czJbMF0sXG4gICAgICAgIHMyID0gX29sZEF0bGFzJGdldE9mZnNldHMyWzFdO1xuICAgICAgaWYgKHMyLncgPT09IDApIHtcbiAgICAgICAgLy8gdGhlIHRleHR1cmUgZG9lcyBub3Qgd3JhcCwgZHJhdyBkaXJlY3RseSB0byBuZXcgYXRsYXNcbiAgICAgICAgbmV3QXRsYXMuZHJhdyhrZXksIHMxLCBmdW5jdGlvbiAoY29udGV4dCkge1xuICAgICAgICAgIGNvbnRleHQuZHJhd0ltYWdlKG9sZEF0bGFzLmNhbnZhcywgczEueCwgczEueSwgczEudywgczEuaCwgMCwgMCwgczEudywgczEuaCk7XG4gICAgICAgIH0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gdGhlIHRleHR1cmUgd3JhcHMsIGZpcnN0IGRyYXcgYm90aCBwYXJ0cyB0byBhIHNjcmF0Y2ggY2FudmFzXG4gICAgICAgIHZhciBzY3JhdGNoID0gdGhpcy5fZ2V0U2NyYXRjaENhbnZhcygpO1xuICAgICAgICBzY3JhdGNoLmNsZWFyKCk7XG4gICAgICAgIHNjcmF0Y2guY29udGV4dC5kcmF3SW1hZ2Uob2xkQXRsYXMuY2FudmFzLCBzMS54LCBzMS55LCBzMS53LCBzMS5oLCAwLCAwLCBzMS53LCBzMS5oKTtcbiAgICAgICAgc2NyYXRjaC5jb250ZXh0LmRyYXdJbWFnZShvbGRBdGxhcy5jYW52YXMsIHMyLngsIHMyLnksIHMyLncsIHMyLmgsIHMxLncsIDAsIHMyLncsIHMyLmgpO1xuXG4gICAgICAgIC8vIG5vdyBkcmF3IHRoZSBzY3JhdGNoIHRvIHRoZSBuZXcgYXRsYXNcbiAgICAgICAgdmFyIHcgPSBzMS53ICsgczIudztcbiAgICAgICAgdmFyIGggPSBzMS5oO1xuICAgICAgICBuZXdBdGxhcy5kcmF3KGtleSwge1xuICAgICAgICAgIHc6IHcsXG4gICAgICAgICAgaDogaFxuICAgICAgICB9LCBmdW5jdGlvbiAoY29udGV4dCkge1xuICAgICAgICAgIGNvbnRleHQuZHJhd0ltYWdlKHNjcmF0Y2gsIDAsIDAsIHcsIGgsIDAsIDAsIHcsIGggLy8gdGhlIGRlc3RpbmF0aW9uIGNvbnRleHQgaGFzIGFscmVhZHkgYmVlbiB0cmFuc2xhdGVkIHRvIHRoZSBjb3JyZWN0IHBvc2l0aW9uXG4gICAgICAgICAgKTtcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcImdldENvdW50c1wiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBnZXRDb3VudHMoKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBrZXlDb3VudDogdGhpcy5zdHlsZUtleVRvQXRsYXMuc2l6ZSxcbiAgICAgICAgYXRsYXNDb3VudDogbmV3IFNldCh0aGlzLnN0eWxlS2V5VG9BdGxhcy52YWx1ZXMoKSkuc2l6ZVxuICAgICAgfTtcbiAgICB9XG4gIH1dKTtcbn0oKTtcbmZ1bmN0aW9uIGludGVyc2VjdGlvbihzZXQxLCBzZXQyKSB7XG4gIC8vIFRPRE8gd2h5IG5vIFNldC5pbnRlcnNlY3Rpb24gaW4gbm9kZSAxNj8/P1xuICBpZiAoc2V0MS5pbnRlcnNlY3Rpb24pIHJldHVybiBzZXQxLmludGVyc2VjdGlvbihzZXQyKTtlbHNlIHJldHVybiBuZXcgU2V0KF90b0NvbnN1bWFibGVBcnJheShzZXQxKS5maWx0ZXIoZnVuY3Rpb24gKHgpIHtcbiAgICByZXR1cm4gc2V0Mi5oYXMoeCk7XG4gIH0pKTtcbn1cblxuLyoqXG4gKiBVc2VkIHRvIG1hbmFnZSBiYXRjaGVzIG9mIEF0bGFzZXMgZm9yIGRyYXdpbmcgbm9kZXMgYW5kIGxhYmVscy5cbiAqIFN1cHBvcnRzIGRpZmZlcmVudCB0eXBlcyBvZiBBdGxhc0NvbGxlY3Rpb25zIGZvciBkaWZmZXJlbnQgcmVuZGVyIHR5cGVzIChvciAndGV4dHVyZSBncm91cHMnKSxcbiAqIGZvciBleGFtcGxlICdub2RlIGJvZHknIGFuZCAnbm9kZSBsYWJlbCcgd291bGQgYmUgZGlmZmVyZW50IHJlbmRlciB0eXBlcy5cbiAqIFJlbmRlciB0eXBlcyBhcmUga2VwdCBzZXBhcmF0ZSBiZWNhdXNlIHRoZXkgd2lsbCBsaWtlbHkgbmVlZCB0byBiZSBnYXJiYWdlIGNvbGxlY3RlZFxuICogc2VwYXJhdGVseSBhbmQgaXRzIG5vdCBlbnRpZXJseSBndWFyYW50ZWVkIHRoYXQgdGhlaXIgc3R5bGUga2V5cyB3b24ndCBjb2xsaWRlLlxuICovXG52YXIgQXRsYXNNYW5hZ2VyID0gLyojX19QVVJFX18qL2Z1bmN0aW9uICgpIHtcbiAgZnVuY3Rpb24gQXRsYXNNYW5hZ2VyKHIsIGdsb2JhbE9wdGlvbnMpIHtcbiAgICBfY2xhc3NDYWxsQ2hlY2sodGhpcywgQXRsYXNNYW5hZ2VyKTtcbiAgICB0aGlzLnIgPSByO1xuICAgIHRoaXMuZ2xvYmFsT3B0aW9ucyA9IGdsb2JhbE9wdGlvbnM7XG4gICAgdGhpcy5hdGxhc1NpemUgPSBnbG9iYWxPcHRpb25zLndlYmdsVGV4U2l6ZTtcbiAgICB0aGlzLm1heEF0bGFzZXNQZXJCYXRjaCA9IGdsb2JhbE9wdGlvbnMud2ViZ2xUZXhQZXJCYXRjaDtcbiAgICB0aGlzLnJlbmRlclR5cGVzID0gbmV3IE1hcCgpOyAvLyByZW5kZXJUeXBlOnN0cmluZyAtPiByZW5kZXJUeXBlT3B0aW9uc1xuICAgIHRoaXMuY29sbGVjdGlvbnMgPSBuZXcgTWFwKCk7IC8vIGNvbGxlY3Rpb25OYW1lOnN0cmluZyAtPiBBdGxhc0NvbGxlY3Rpb25cblxuICAgIHRoaXMudHlwZUFuZElkVG9LZXkgPSBuZXcgTWFwKCk7IC8vIFtyZW5kZXJUeXBlLGlkXSA9PiBzdHlsZSBrZXlcblxuICAgIHRoaXMuYmF0Y2hBdGxhc2VzID0gW107XG4gIH1cbiAgcmV0dXJuIF9jcmVhdGVDbGFzcyhBdGxhc01hbmFnZXIsIFt7XG4gICAga2V5OiBcImdldEF0bGFzU2l6ZVwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBnZXRBdGxhc1NpemUoKSB7XG4gICAgICByZXR1cm4gdGhpcy5hdGxhc1NpemU7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcImdldE1heEF0bGFzZXNQZXJCYXRjaFwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBnZXRNYXhBdGxhc2VzUGVyQmF0Y2goKSB7XG4gICAgICByZXR1cm4gdGhpcy5tYXhBdGxhc2VzUGVyQmF0Y2g7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcImFkZEF0bGFzQ29sbGVjdGlvblwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBhZGRBdGxhc0NvbGxlY3Rpb24oY29sbGVjdGlvbk5hbWUsIGF0bGFzQ29sbGVjdGlvbk9wdGlvbnMpIHtcbiAgICAgIHZhciBfdGhpcyRnbG9iYWxPcHRpb25zID0gdGhpcy5nbG9iYWxPcHRpb25zLFxuICAgICAgICB3ZWJnbFRleFNpemUgPSBfdGhpcyRnbG9iYWxPcHRpb25zLndlYmdsVGV4U2l6ZSxcbiAgICAgICAgY3JlYXRlVGV4dHVyZUNhbnZhcyA9IF90aGlzJGdsb2JhbE9wdGlvbnMuY3JlYXRlVGV4dHVyZUNhbnZhcztcbiAgICAgIHZhciB0ZXhSb3dzID0gYXRsYXNDb2xsZWN0aW9uT3B0aW9ucy50ZXhSb3dzO1xuICAgICAgdmFyIGNhY2hlZENyZWF0ZVRleHR1cmVDYW52YXMgPSB0aGlzLl9jYWNoZVNjcmF0Y2hDYW52YXMoY3JlYXRlVGV4dHVyZUNhbnZhcyk7XG4gICAgICB2YXIgYXRsYXNDb2xsZWN0aW9uID0gbmV3IEF0bGFzQ29sbGVjdGlvbih0aGlzLnIsIHdlYmdsVGV4U2l6ZSwgdGV4Um93cywgY2FjaGVkQ3JlYXRlVGV4dHVyZUNhbnZhcyk7XG4gICAgICB0aGlzLmNvbGxlY3Rpb25zLnNldChjb2xsZWN0aW9uTmFtZSwgYXRsYXNDb2xsZWN0aW9uKTtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwiYWRkUmVuZGVyVHlwZVwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBhZGRSZW5kZXJUeXBlKHR5cGUsIHJlbmRlclR5cGVPcHRpb25zKSB7XG4gICAgICB2YXIgY29sbGVjdGlvbiA9IHJlbmRlclR5cGVPcHRpb25zLmNvbGxlY3Rpb247XG4gICAgICBpZiAoIXRoaXMuY29sbGVjdGlvbnMuaGFzKGNvbGxlY3Rpb24pKSB0aHJvdyBuZXcgRXJyb3IoXCJpbnZhbGlkIGF0bGFzIGNvbGxlY3Rpb24gbmFtZSAnXCIuY29uY2F0KGNvbGxlY3Rpb24sIFwiJ1wiKSk7XG4gICAgICB2YXIgYXRsYXNDb2xsZWN0aW9uID0gdGhpcy5jb2xsZWN0aW9ucy5nZXQoY29sbGVjdGlvbik7XG4gICAgICB2YXIgb3B0cyA9IGV4dGVuZCh7XG4gICAgICAgIHR5cGU6IHR5cGUsXG4gICAgICAgIGF0bGFzQ29sbGVjdGlvbjogYXRsYXNDb2xsZWN0aW9uXG4gICAgICB9LCByZW5kZXJUeXBlT3B0aW9ucyk7XG4gICAgICB0aGlzLnJlbmRlclR5cGVzLnNldCh0eXBlLCBvcHRzKTtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwiZ2V0UmVuZGVyVHlwZU9wdHNcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gZ2V0UmVuZGVyVHlwZU9wdHModHlwZSkge1xuICAgICAgcmV0dXJuIHRoaXMucmVuZGVyVHlwZXMuZ2V0KHR5cGUpO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJnZXRBdGxhc0NvbGxlY3Rpb25cIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gZ2V0QXRsYXNDb2xsZWN0aW9uKG5hbWUpIHtcbiAgICAgIHJldHVybiB0aGlzLmNvbGxlY3Rpb25zLmdldChuYW1lKTtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwiX2NhY2hlU2NyYXRjaENhbnZhc1wiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBfY2FjaGVTY3JhdGNoQ2FudmFzKGNyZWF0ZVRleHR1cmVDYW52YXMpIHtcbiAgICAgIC8vIGFsbCBzY3JhdGNoIGNhbnZhc2VzIGZvciB0aGUgc2FtZSByZW5kZXIgdHlwZSB3aWxsIGhhdmUgdGhlIHNhbWUgd2lkdGggYW5kIGhlaWdodCAoaWUgd2ViZ2xUZXhSb3dzIG9wdGlvbilcbiAgICAgIC8vIGJ1dCB3ZSdsbCBrZWVwIHRyYWNrIG9mIHRoZSB3aWR0aCBhbmQgaGVpZ2h0IGp1c3QgdG8gYmUgc2FmZVxuICAgICAgdmFyIHByZXZXID0gLTE7XG4gICAgICB2YXIgcHJldkggPSAtMTtcbiAgICAgIHZhciBzY3JhdGNoQ2FudmFzID0gbnVsbDtcbiAgICAgIHJldHVybiBmdW5jdGlvbiAociwgdywgaCwgc2NyYXRjaCkge1xuICAgICAgICBpZiAoc2NyYXRjaCkge1xuICAgICAgICAgIGlmICghc2NyYXRjaENhbnZhcyB8fCB3ICE9IHByZXZXIHx8IGggIT0gcHJldkgpIHtcbiAgICAgICAgICAgIHByZXZXID0gdztcbiAgICAgICAgICAgIHByZXZIID0gaDtcbiAgICAgICAgICAgIHNjcmF0Y2hDYW52YXMgPSBjcmVhdGVUZXh0dXJlQ2FudmFzKHIsIHcsIGgpO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gc2NyYXRjaENhbnZhcztcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXR1cm4gY3JlYXRlVGV4dHVyZUNhbnZhcyhyLCB3LCBoKTtcbiAgICAgICAgfVxuICAgICAgfTtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwiX2tleVwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBfa2V5KHJlbmRlclR5cGUsIGlkKSB7XG4gICAgICByZXR1cm4gXCJcIi5jb25jYXQocmVuZGVyVHlwZSwgXCItXCIpLmNvbmNhdChpZCk7IC8vIFRPRE8gbm90IHZlcnkgZWZmaWNpZW50XG4gICAgfVxuXG4gICAgLyoqIE1hcmtzIHRleHR1ZXMgYXNzb2NpYXRlZCB3aXRoIHRoZSBlbGVtZW50IGZvciBnYXJiYWdlIGNvbGxlY3Rpb24uICovXG4gIH0sIHtcbiAgICBrZXk6IFwiaW52YWxpZGF0ZVwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBpbnZhbGlkYXRlKGVsZXMpIHtcbiAgICAgIHZhciBfcmVmMiA9IGFyZ3VtZW50cy5sZW5ndGggPiAxICYmIGFyZ3VtZW50c1sxXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzFdIDoge30sXG4gICAgICAgIF9yZWYyJGZvcmNlUmVkcmF3ID0gX3JlZjIuZm9yY2VSZWRyYXcsXG4gICAgICAgIGZvcmNlUmVkcmF3ID0gX3JlZjIkZm9yY2VSZWRyYXcgPT09IHVuZGVmaW5lZCA/IGZhbHNlIDogX3JlZjIkZm9yY2VSZWRyYXcsXG4gICAgICAgIF9yZWYyJGZpbHRlckVsZSA9IF9yZWYyLmZpbHRlckVsZSxcbiAgICAgICAgZmlsdGVyRWxlID0gX3JlZjIkZmlsdGVyRWxlID09PSB1bmRlZmluZWQgPyBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH0gOiBfcmVmMiRmaWx0ZXJFbGUsXG4gICAgICAgIF9yZWYyJGZpbHRlclR5cGUgPSBfcmVmMi5maWx0ZXJUeXBlLFxuICAgICAgICBmaWx0ZXJUeXBlID0gX3JlZjIkZmlsdGVyVHlwZSA9PT0gdW5kZWZpbmVkID8gZnVuY3Rpb24gKCkge1xuICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9IDogX3JlZjIkZmlsdGVyVHlwZTtcbiAgICAgIHZhciBuZWVkR0MgPSBmYWxzZTtcbiAgICAgIHZhciBydW5HQ05vdyA9IGZhbHNlO1xuICAgICAgdmFyIF9pdGVyYXRvcjMgPSBfY3JlYXRlRm9yT2ZJdGVyYXRvckhlbHBlcihlbGVzKSxcbiAgICAgICAgX3N0ZXAzO1xuICAgICAgdHJ5IHtcbiAgICAgICAgZm9yIChfaXRlcmF0b3IzLnMoKTsgIShfc3RlcDMgPSBfaXRlcmF0b3IzLm4oKSkuZG9uZTspIHtcbiAgICAgICAgICB2YXIgZWxlID0gX3N0ZXAzLnZhbHVlO1xuICAgICAgICAgIGlmIChmaWx0ZXJFbGUoZWxlKSkge1xuICAgICAgICAgICAgdmFyIF9pdGVyYXRvcjQgPSBfY3JlYXRlRm9yT2ZJdGVyYXRvckhlbHBlcih0aGlzLnJlbmRlclR5cGVzLnZhbHVlcygpKSxcbiAgICAgICAgICAgICAgX3N0ZXA0O1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgZm9yIChfaXRlcmF0b3I0LnMoKTsgIShfc3RlcDQgPSBfaXRlcmF0b3I0Lm4oKSkuZG9uZTspIHtcbiAgICAgICAgICAgICAgICB2YXIgb3B0cyA9IF9zdGVwNC52YWx1ZTtcbiAgICAgICAgICAgICAgICB2YXIgcmVuZGVyVHlwZSA9IG9wdHMudHlwZTtcbiAgICAgICAgICAgICAgICBpZiAoZmlsdGVyVHlwZShyZW5kZXJUeXBlKSkge1xuICAgICAgICAgICAgICAgICAgdmFyIHN0eWxlS2V5ID0gb3B0cy5nZXRLZXkoZWxlKTtcbiAgICAgICAgICAgICAgICAgIHZhciBhdGxhc0NvbGxlY3Rpb24gPSB0aGlzLmNvbGxlY3Rpb25zLmdldChvcHRzLmNvbGxlY3Rpb24pO1xuXG4gICAgICAgICAgICAgICAgICAvLyB3aGVuIGEgbm9kZSdzIGJhY2tncm91bmQgaW1hZ2UgZmluaXNoZXMgbG9hZGluZywgdGhlIHN0eWxlIGtleSBkb2Vzbid0IGNoYW5nZSBidXQgc3RpbGwgbmVlZHMgdG8gYmUgcmVkcmF3blxuICAgICAgICAgICAgICAgICAgaWYgKGZvcmNlUmVkcmF3KSB7XG4gICAgICAgICAgICAgICAgICAgIGF0bGFzQ29sbGVjdGlvbi5tYXJrS2V5Rm9yR0Moc3R5bGVLZXkpO1xuICAgICAgICAgICAgICAgICAgICBydW5HQ05vdyA9IHRydWU7IC8vIHJ1biBHQyB0byByZW1vdmUgdGhlIG9sZCB0ZXh0dXJlIHJpZ2h0IG5vdywgdGhhdCB3YXkgd2UgZG9uJ3QgbmVlZCB0byByZW1lbWJlciBmb3IgdGhlIG5leHQgZ2MgXG4gICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICB2YXIgaWQgPSBvcHRzLmdldElEID8gb3B0cy5nZXRJRChlbGUpIDogZWxlLmlkKCk7XG4gICAgICAgICAgICAgICAgICAgIHZhciBtYXBLZXkgPSB0aGlzLl9rZXkocmVuZGVyVHlwZSwgaWQpO1xuICAgICAgICAgICAgICAgICAgICB2YXIgb2xkU3R5bGVLZXkgPSB0aGlzLnR5cGVBbmRJZFRvS2V5LmdldChtYXBLZXkpO1xuICAgICAgICAgICAgICAgICAgICBpZiAob2xkU3R5bGVLZXkgIT09IHVuZGVmaW5lZCAmJiBvbGRTdHlsZUtleSAhPT0gc3R5bGVLZXkpIHtcbiAgICAgICAgICAgICAgICAgICAgICB0aGlzLnR5cGVBbmRJZFRvS2V5W1wiZGVsZXRlXCJdKG1hcEtleSk7XG4gICAgICAgICAgICAgICAgICAgICAgYXRsYXNDb2xsZWN0aW9uLm1hcmtLZXlGb3JHQyhvbGRTdHlsZUtleSk7XG4gICAgICAgICAgICAgICAgICAgICAgbmVlZEdDID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgICAgIF9pdGVyYXRvcjQuZShlcnIpO1xuICAgICAgICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgICAgICAgX2l0ZXJhdG9yNC5mKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgX2l0ZXJhdG9yMy5lKGVycik7XG4gICAgICB9IGZpbmFsbHkge1xuICAgICAgICBfaXRlcmF0b3IzLmYoKTtcbiAgICAgIH1cbiAgICAgIGlmIChydW5HQ05vdykge1xuICAgICAgICB0aGlzLmdjKCk7XG4gICAgICAgIG5lZWRHQyA9IGZhbHNlO1xuICAgICAgfVxuICAgICAgcmV0dXJuIG5lZWRHQztcbiAgICB9XG5cbiAgICAvKiogR2FyYmFnZSBjb2xsZWN0ICovXG4gIH0sIHtcbiAgICBrZXk6IFwiZ2NcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gZ2MoKSB7XG4gICAgICB2YXIgX2l0ZXJhdG9yNSA9IF9jcmVhdGVGb3JPZkl0ZXJhdG9ySGVscGVyKHRoaXMuY29sbGVjdGlvbnMudmFsdWVzKCkpLFxuICAgICAgICBfc3RlcDU7XG4gICAgICB0cnkge1xuICAgICAgICBmb3IgKF9pdGVyYXRvcjUucygpOyAhKF9zdGVwNSA9IF9pdGVyYXRvcjUubigpKS5kb25lOykge1xuICAgICAgICAgIHZhciBjb2xsZWN0aW9uID0gX3N0ZXA1LnZhbHVlO1xuICAgICAgICAgIGNvbGxlY3Rpb24uZ2MoKTtcbiAgICAgICAgfVxuICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgIF9pdGVyYXRvcjUuZShlcnIpO1xuICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgX2l0ZXJhdG9yNS5mKCk7XG4gICAgICB9XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcImdldE9yQ3JlYXRlQXRsYXNcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gZ2V0T3JDcmVhdGVBdGxhcyhlbGUsIHR5cGUsIGJiKSB7XG4gICAgICB2YXIgb3B0cyA9IHRoaXMucmVuZGVyVHlwZXMuZ2V0KHR5cGUpO1xuICAgICAgdmFyIHN0eWxlS2V5ID0gb3B0cy5nZXRLZXkoZWxlKTtcbiAgICAgIGlmICghYmIpIGJiID0gb3B0cy5nZXRCb3VuZGluZ0JveChlbGUpO1xuICAgICAgdmFyIGF0bGFzQ29sbGVjdGlvbiA9IHRoaXMuY29sbGVjdGlvbnMuZ2V0KG9wdHMuY29sbGVjdGlvbik7XG5cbiAgICAgIC8vIGRyYXdzIHRoZSB0ZXh0dXJlIG9ubHkgaWYgbmVlZGVkXG4gICAgICB2YXIgZHJhd24gPSBmYWxzZTtcbiAgICAgIHZhciBhdGxhcyA9IGF0bGFzQ29sbGVjdGlvbi5kcmF3KHN0eWxlS2V5LCBiYiwgZnVuY3Rpb24gKGNvbnRleHQpIHtcbiAgICAgICAgb3B0cy5kcmF3RWxlbWVudChjb250ZXh0LCBlbGUsIGJiLCB0cnVlLCB0cnVlKTtcbiAgICAgICAgZHJhd24gPSB0cnVlO1xuICAgICAgfSk7XG4gICAgICBpZiAoZHJhd24pIHtcbiAgICAgICAgdmFyIGlkID0gb3B0cy5nZXRJRCA/IG9wdHMuZ2V0SUQoZWxlKSA6IGVsZS5pZCgpOyAvLyBmb3IgdGVzdGluZ1xuICAgICAgICB2YXIgbWFwS2V5ID0gdGhpcy5fa2V5KHR5cGUsIGlkKTtcbiAgICAgICAgdGhpcy50eXBlQW5kSWRUb0tleS5zZXQobWFwS2V5LCBzdHlsZUtleSk7XG4gICAgICB9XG4gICAgICByZXR1cm4gYXRsYXM7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcInN0YXJ0QmF0Y2hcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gc3RhcnRCYXRjaCgpIHtcbiAgICAgIHRoaXMuYmF0Y2hBdGxhc2VzID0gW107XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcImdldEF0bGFzQ291bnRcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gZ2V0QXRsYXNDb3VudCgpIHtcbiAgICAgIHJldHVybiB0aGlzLmJhdGNoQXRsYXNlcy5sZW5ndGg7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcImdldEF0bGFzZXNcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gZ2V0QXRsYXNlcygpIHtcbiAgICAgIHJldHVybiB0aGlzLmJhdGNoQXRsYXNlcztcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwiY2FuQWRkVG9DdXJyZW50QmF0Y2hcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gY2FuQWRkVG9DdXJyZW50QmF0Y2goZWxlLCB0eXBlKSB7XG4gICAgICBpZiAodGhpcy5iYXRjaEF0bGFzZXMubGVuZ3RoID09PSB0aGlzLm1heEF0bGFzZXNQZXJCYXRjaCkge1xuICAgICAgICAvLyBiYXRjaCBpcyBmdWxsLCBpcyB0aGUgYXRsYXMgYWxyZWFkeSBwYXJ0IG9mIHRoaXMgYmF0Y2g/XG4gICAgICAgIHZhciBvcHRzID0gdGhpcy5yZW5kZXJUeXBlcy5nZXQodHlwZSk7XG4gICAgICAgIHZhciBzdHlsZUtleSA9IG9wdHMuZ2V0S2V5KGVsZSk7XG4gICAgICAgIHZhciBhdGxhc0NvbGxlY3Rpb24gPSB0aGlzLmNvbGxlY3Rpb25zLmdldChvcHRzLmNvbGxlY3Rpb24pO1xuICAgICAgICB2YXIgYXRsYXMgPSBhdGxhc0NvbGxlY3Rpb24uZ2V0QXRsYXMoc3R5bGVLZXkpO1xuICAgICAgICAvLyByZXR1cm4gdHJ1ZSBpZiB0aGVyZSBpcyBhbiBhdGxhcyBhbmQgaXQgaXMgcGFydCBvZiB0aGlzIGJhdGNoIGFscmVhZHlcbiAgICAgICAgcmV0dXJuIEJvb2xlYW4oYXRsYXMpICYmIHRoaXMuYmF0Y2hBdGxhc2VzLmluY2x1ZGVzKGF0bGFzKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiB0cnVlOyAvLyBub3QgZnVsbFxuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJnZXRBdGxhc0luZGV4Rm9yQmF0Y2hcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gZ2V0QXRsYXNJbmRleEZvckJhdGNoKGF0bGFzKSB7XG4gICAgICB2YXIgYXRsYXNJRCA9IHRoaXMuYmF0Y2hBdGxhc2VzLmluZGV4T2YoYXRsYXMpO1xuICAgICAgaWYgKGF0bGFzSUQgPCAwKSB7XG4gICAgICAgIGlmICh0aGlzLmJhdGNoQXRsYXNlcy5sZW5ndGggPT09IHRoaXMubWF4QXRsYXNlc1BlckJhdGNoKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuYmF0Y2hBdGxhc2VzLnB1c2goYXRsYXMpO1xuICAgICAgICBhdGxhc0lEID0gdGhpcy5iYXRjaEF0bGFzZXMubGVuZ3RoIC0gMTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBhdGxhc0lEO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJnZXRJbmRleEFycmF5XCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGdldEluZGV4QXJyYXkoKSB7XG4gICAgICByZXR1cm4gQXJyYXkuZnJvbSh7XG4gICAgICAgIGxlbmd0aDogdGhpcy5tYXhBdGxhc2VzUGVyQmF0Y2hcbiAgICAgIH0sIGZ1bmN0aW9uICh2LCBpKSB7XG4gICAgICAgIHJldHVybiBpO1xuICAgICAgfSk7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcImdldEF0bGFzSW5mb1wiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBnZXRBdGxhc0luZm8oZWxlLCB0eXBlKSB7XG4gICAgICB2YXIgb3B0cyA9IHRoaXMucmVuZGVyVHlwZXMuZ2V0KHR5cGUpO1xuICAgICAgdmFyIGJiID0gb3B0cy5nZXRCb3VuZGluZ0JveChlbGUpO1xuICAgICAgdmFyIGF0bGFzID0gdGhpcy5nZXRPckNyZWF0ZUF0bGFzKGVsZSwgdHlwZSwgYmIpO1xuICAgICAgdmFyIGluZGV4ID0gdGhpcy5nZXRBdGxhc0luZGV4Rm9yQmF0Y2goYXRsYXMpO1xuICAgICAgaWYgKGluZGV4ID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDsgLy8gYmF0Y2ggaXMgZnVsbFxuICAgICAgfVxuICAgICAgdmFyIHN0eWxlS2V5ID0gb3B0cy5nZXRLZXkoZWxlKTtcbiAgICAgIHZhciBfYXRsYXMkZ2V0T2Zmc2V0czMgPSBhdGxhcy5nZXRPZmZzZXRzKHN0eWxlS2V5KSxcbiAgICAgICAgX2F0bGFzJGdldE9mZnNldHM0ID0gX3NsaWNlZFRvQXJyYXkoX2F0bGFzJGdldE9mZnNldHMzLCAyKSxcbiAgICAgICAgdGV4MSA9IF9hdGxhcyRnZXRPZmZzZXRzNFswXSxcbiAgICAgICAgdGV4MiA9IF9hdGxhcyRnZXRPZmZzZXRzNFsxXTtcbiAgICAgIC8vIFRoaXMgb2JqZWN0IG1heSBiZSBwYXNzZWQgYmFjayB0byBzZXRUcmFuc2Zvcm1NYXRyaXgoKVxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgaW5kZXg6IGluZGV4LFxuICAgICAgICB0ZXgxOiB0ZXgxLFxuICAgICAgICB0ZXgyOiB0ZXgyLFxuICAgICAgICBiYjogYmJcbiAgICAgIH07XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogbWF0cml4IGlzIGV4cGVjdGVkIHRvIGJlIGEgOSBlbGVtZW50IGFycmF5XG4gICAgICogdGhpcyBmdW5jdGlvbiBmb2xsb3dzIHNhbWUgcGF0dGVybiBhcyBDUnAuZHJhd0NhY2hlZEVsZW1lbnRQb3J0aW9uKC4uLilcbiAgICAgKi9cbiAgfSwge1xuICAgIGtleTogXCJzZXRUcmFuc2Zvcm1NYXRyaXhcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gc2V0VHJhbnNmb3JtTWF0cml4KGVsZSwgbWF0cml4LCB0eXBlLCBhdGxhc0luZm8pIHtcbiAgICAgIHZhciBmaXJzdCA9IGFyZ3VtZW50cy5sZW5ndGggPiA0ICYmIGFyZ3VtZW50c1s0XSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzRdIDogdHJ1ZTtcbiAgICAgIHZhciBvcHRzID0gdGhpcy5nZXRSZW5kZXJUeXBlT3B0cyh0eXBlKTtcbiAgICAgIHZhciBwYWRkaW5nID0gb3B0cy5nZXRQYWRkaW5nID8gb3B0cy5nZXRQYWRkaW5nKGVsZSkgOiAwO1xuICAgICAgaWYgKGF0bGFzSW5mbykge1xuICAgICAgICAvLyB3ZSd2ZSBhbHJlYWR5IGNvbXB1dGVkIHRoZSBiYiBhbmQgdGV4IGJvdW5kcyBmb3IgYSB0ZXh0dXJlXG4gICAgICAgIHZhciBiYiA9IGF0bGFzSW5mby5iYixcbiAgICAgICAgICB0ZXgxID0gYXRsYXNJbmZvLnRleDEsXG4gICAgICAgICAgdGV4MiA9IGF0bGFzSW5mby50ZXgyO1xuXG4gICAgICAgIC8vIHdyYXBwZWQgdGV4dHVyZXMgbmVlZCBzZXBhcmF0ZSBtYXRyaXggZm9yIGVhY2ggcGFydFxuICAgICAgICB2YXIgcmF0aW8gPSB0ZXgxLncgLyAodGV4MS53ICsgdGV4Mi53KTtcbiAgICAgICAgaWYgKCFmaXJzdCkge1xuICAgICAgICAgIC8vIGZpcnN0ID0gdHJ1ZSBtZWFucyBpdHMgdGhlIGZpcnN0IHBhcnQgb2YgdGhlIHdyYXBwZWQgdGV4dHVyZVxuICAgICAgICAgIHJhdGlvID0gMSAtIHJhdGlvO1xuICAgICAgICB9XG4gICAgICAgIHZhciBhZGpCQiA9IHRoaXMuZ2V0QWRqdXN0ZWRCQihiYiwgcGFkZGluZywgZmlyc3QsIHJhdGlvKTtcbiAgICAgICAgdGhpcy5fYXBwbHlUcmFuc2Zvcm1NYXRyaXgobWF0cml4LCBhZGpCQiwgb3B0cywgZWxlKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIHdlIGRvbid0IGhhdmUgYSB0ZXh0dXJlIHlldCwgb3Igd2Ugd2FudCB0byBhdm9pZCBjcmVhdGluZyBhIHRleHR1cmUgZm9yIHNpbXBsZSBzaGFwZXNcbiAgICAgICAgdmFyIF9iYiA9IG9wdHMuZ2V0Qm91bmRpbmdCb3goZWxlKTtcbiAgICAgICAgdmFyIF9hZGpCQiA9IHRoaXMuZ2V0QWRqdXN0ZWRCQihfYmIsIHBhZGRpbmcsIHRydWUsIDEpO1xuICAgICAgICB0aGlzLl9hcHBseVRyYW5zZm9ybU1hdHJpeChtYXRyaXgsIF9hZGpCQiwgb3B0cywgZWxlKTtcbiAgICAgIH1cbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwiX2FwcGx5VHJhbnNmb3JtTWF0cml4XCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIF9hcHBseVRyYW5zZm9ybU1hdHJpeChtYXRyaXgsIGFkakJCLCBvcHRzLCBlbGUpIHtcbiAgICAgIHZhciB4LCB5O1xuICAgICAgaWRlbnRpdHkobWF0cml4KTtcbiAgICAgIHZhciB0aGV0YSA9IG9wdHMuZ2V0Um90YXRpb24gPyBvcHRzLmdldFJvdGF0aW9uKGVsZSkgOiAwO1xuICAgICAgaWYgKHRoZXRhICE9PSAwKSB7XG4gICAgICAgIHZhciBfb3B0cyRnZXRSb3RhdGlvblBvaW4gPSBvcHRzLmdldFJvdGF0aW9uUG9pbnQoZWxlKSxcbiAgICAgICAgICBzeCA9IF9vcHRzJGdldFJvdGF0aW9uUG9pbi54LFxuICAgICAgICAgIHN5ID0gX29wdHMkZ2V0Um90YXRpb25Qb2luLnk7XG4gICAgICAgIHRyYW5zbGF0ZShtYXRyaXgsIG1hdHJpeCwgW3N4LCBzeV0pO1xuICAgICAgICByb3RhdGUobWF0cml4LCBtYXRyaXgsIHRoZXRhKTtcbiAgICAgICAgdmFyIG9mZnNldCA9IG9wdHMuZ2V0Um90YXRpb25PZmZzZXQoZWxlKTtcbiAgICAgICAgeCA9IG9mZnNldC54ICsgYWRqQkIueE9mZnNldDtcbiAgICAgICAgeSA9IG9mZnNldC55O1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgeCA9IGFkakJCLngxO1xuICAgICAgICB5ID0gYWRqQkIueTE7XG4gICAgICB9XG4gICAgICB0cmFuc2xhdGUobWF0cml4LCBtYXRyaXgsIFt4LCB5XSk7XG4gICAgICBzY2FsZShtYXRyaXgsIG1hdHJpeCwgW2FkakJCLncsIGFkakJCLmhdKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBBZGp1c3RzIGEgbm9kZSBvciBsYWJlbCBCQiB0byBhY2NvbW9kYXRlIHBhZGRpbmcgYW5kIHNwbGl0IGZvciB3cmFwcGVkIHRleHR1cmVzLlxuICAgICAqIEBwYXJhbSBiYiAtIHRoZSBvcmlnaW5hbCBib3VuZGluZyBib3hcbiAgICAgKiBAcGFyYW0gcGFkZGluZyAtIHRoZSBwYWRkaW5nIHRvIGFkZCB0byB0aGUgYm91bmRpbmcgYm94XG4gICAgICogQHBhcmFtIGZpcnN0IC0gd2hldGhlciB0aGlzIGlzIHRoZSBmaXJzdCBwYXJ0IG9mIGEgd3JhcHBlZCB0ZXh0dXJlXG4gICAgICogQHBhcmFtIHJhdGlvIC0gdGhlIHJhdGlvIG9mIHRoZSB0ZXh0dXJlIHdpZHRoIG9mIHBhcnQgb2YgdGhlIHRleHQgdG8gdGhlIGVudGlyZSB0ZXh0dXJlXG4gICAgICovXG4gIH0sIHtcbiAgICBrZXk6IFwiZ2V0QWRqdXN0ZWRCQlwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBnZXRBZGp1c3RlZEJCKGJiLCBwYWRkaW5nLCBmaXJzdCwgcmF0aW8pIHtcbiAgICAgIHZhciB4MSA9IGJiLngxLFxuICAgICAgICB5MSA9IGJiLnkxLFxuICAgICAgICB3ID0gYmIudyxcbiAgICAgICAgaCA9IGJiLmg7XG4gICAgICBpZiAocGFkZGluZykge1xuICAgICAgICB4MSAtPSBwYWRkaW5nO1xuICAgICAgICB5MSAtPSBwYWRkaW5nO1xuICAgICAgICB3ICs9IDIgKiBwYWRkaW5nO1xuICAgICAgICBoICs9IDIgKiBwYWRkaW5nO1xuICAgICAgfVxuICAgICAgdmFyIHhPZmZzZXQgPSAwO1xuICAgICAgdmFyIGFkalcgPSB3ICogcmF0aW87XG4gICAgICBpZiAoZmlyc3QgJiYgcmF0aW8gPCAxKSB7XG4gICAgICAgIHcgPSBhZGpXO1xuICAgICAgfSBlbHNlIGlmICghZmlyc3QgJiYgcmF0aW8gPCAxKSB7XG4gICAgICAgIHhPZmZzZXQgPSB3IC0gYWRqVztcbiAgICAgICAgeDEgKz0geE9mZnNldDtcbiAgICAgICAgdyA9IGFkalc7XG4gICAgICB9XG4gICAgICByZXR1cm4ge1xuICAgICAgICB4MTogeDEsXG4gICAgICAgIHkxOiB5MSxcbiAgICAgICAgdzogdyxcbiAgICAgICAgaDogaCxcbiAgICAgICAgeE9mZnNldDogeE9mZnNldFxuICAgICAgfTtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwiZ2V0RGVidWdJbmZvXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGdldERlYnVnSW5mbygpIHtcbiAgICAgIHZhciBkZWJ1Z0luZm8gPSBbXTtcbiAgICAgIHZhciBfaXRlcmF0b3I2ID0gX2NyZWF0ZUZvck9mSXRlcmF0b3JIZWxwZXIodGhpcy5jb2xsZWN0aW9ucyksXG4gICAgICAgIF9zdGVwNjtcbiAgICAgIHRyeSB7XG4gICAgICAgIGZvciAoX2l0ZXJhdG9yNi5zKCk7ICEoX3N0ZXA2ID0gX2l0ZXJhdG9yNi5uKCkpLmRvbmU7KSB7XG4gICAgICAgICAgdmFyIF9zdGVwNiR2YWx1ZSA9IF9zbGljZWRUb0FycmF5KF9zdGVwNi52YWx1ZSwgMiksXG4gICAgICAgICAgICBuYW1lID0gX3N0ZXA2JHZhbHVlWzBdLFxuICAgICAgICAgICAgY29sbGVjdGlvbiA9IF9zdGVwNiR2YWx1ZVsxXTtcbiAgICAgICAgICB2YXIgX2NvbGxlY3Rpb24kZ2V0Q291bnRzID0gY29sbGVjdGlvbi5nZXRDb3VudHMoKSxcbiAgICAgICAgICAgIGtleUNvdW50ID0gX2NvbGxlY3Rpb24kZ2V0Q291bnRzLmtleUNvdW50LFxuICAgICAgICAgICAgYXRsYXNDb3VudCA9IF9jb2xsZWN0aW9uJGdldENvdW50cy5hdGxhc0NvdW50O1xuICAgICAgICAgIGRlYnVnSW5mby5wdXNoKHtcbiAgICAgICAgICAgIHR5cGU6IG5hbWUsXG4gICAgICAgICAgICBrZXlDb3VudDoga2V5Q291bnQsXG4gICAgICAgICAgICBhdGxhc0NvdW50OiBhdGxhc0NvdW50XG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICBfaXRlcmF0b3I2LmUoZXJyKTtcbiAgICAgIH0gZmluYWxseSB7XG4gICAgICAgIF9pdGVyYXRvcjYuZigpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGRlYnVnSW5mbztcbiAgICB9XG4gIH1dKTtcbn0oKTtcblxuLy8gVmVydGV4IHR5cGVzXG52YXIgVEVYVFVSRSA9IDA7XG52YXIgRURHRV9TVFJBSUdIVCA9IDE7XG52YXIgRURHRV9DVVJWRV9TRUdNRU5UID0gMjtcbnZhciBFREdFX0FSUk9XID0gMztcbnZhciBSRUNUQU5HTEUgPSA0O1xudmFyIEVsZW1lbnREcmF3aW5nV2ViR0wgPSAvKiNfX1BVUkVfXyovZnVuY3Rpb24gKCkge1xuICAvKiogXG4gICAqIEBwYXJhbSB7V2ViR0xSZW5kZXJpbmdDb250ZXh0fSBnbCBcbiAgICovXG4gIGZ1bmN0aW9uIEVsZW1lbnREcmF3aW5nV2ViR0wociwgZ2wsIG9wdHMpIHtcbiAgICBfY2xhc3NDYWxsQ2hlY2sodGhpcywgRWxlbWVudERyYXdpbmdXZWJHTCk7XG4gICAgdGhpcy5yID0gcjtcbiAgICB0aGlzLmdsID0gZ2w7XG4gICAgdGhpcy5tYXhJbnN0YW5jZXMgPSBvcHRzLndlYmdsQmF0Y2hTaXplO1xuICAgIHRoaXMuYXRsYXNTaXplID0gb3B0cy53ZWJnbFRleFNpemU7XG4gICAgdGhpcy5iZ0NvbG9yID0gb3B0cy5iZ0NvbG9yO1xuICAgIHRoaXMuZGVidWcgPSBvcHRzLndlYmdsRGVidWc7XG4gICAgdGhpcy5iYXRjaERlYnVnSW5mbyA9IFtdO1xuICAgIG9wdHMuZW5hYmxlV3JhcHBpbmcgPSB0cnVlO1xuICAgIG9wdHMuY3JlYXRlVGV4dHVyZUNhbnZhcyA9IGNyZWF0ZVRleHR1cmVDYW52YXM7IC8vIFVuaXQgdGVzdHMgbW9jayB0aGlzXG4gICAgdGhpcy5hdGxhc01hbmFnZXIgPSBuZXcgQXRsYXNNYW5hZ2VyKHIsIG9wdHMpO1xuICAgIHRoaXMucHJvZ3JhbSA9IHRoaXMuY3JlYXRlU2hhZGVyUHJvZ3JhbShSRU5ERVJfVEFSR0VULlNDUkVFTik7XG4gICAgdGhpcy5waWNraW5nUHJvZ3JhbSA9IHRoaXMuY3JlYXRlU2hhZGVyUHJvZ3JhbShSRU5ERVJfVEFSR0VULlBJQ0tJTkcpO1xuICAgIHRoaXMudmFvID0gdGhpcy5jcmVhdGVWQU8oKTtcbiAgfVxuICByZXR1cm4gX2NyZWF0ZUNsYXNzKEVsZW1lbnREcmF3aW5nV2ViR0wsIFt7XG4gICAga2V5OiBcImFkZEF0bGFzQ29sbGVjdGlvblwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBhZGRBdGxhc0NvbGxlY3Rpb24oZ3JvdXBOYW1lLCBvcHRzKSB7XG4gICAgICB0aGlzLmF0bGFzTWFuYWdlci5hZGRBdGxhc0NvbGxlY3Rpb24oZ3JvdXBOYW1lLCBvcHRzKTtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwiYWRkQXRsYXNSZW5kZXJUeXBlXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGFkZEF0bGFzUmVuZGVyVHlwZSh0eXBlTmFtZSwgb3B0cykge1xuICAgICAgdGhpcy5hdGxhc01hbmFnZXIuYWRkUmVuZGVyVHlwZSh0eXBlTmFtZSwgb3B0cyk7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcImludmFsaWRhdGVcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gaW52YWxpZGF0ZShlbGVzKSB7XG4gICAgICB2YXIgX3JlZiA9IGFyZ3VtZW50cy5sZW5ndGggPiAxICYmIGFyZ3VtZW50c1sxXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzFdIDoge30sXG4gICAgICAgIHR5cGUgPSBfcmVmLnR5cGU7XG4gICAgICB2YXIgYXRsYXNNYW5hZ2VyID0gdGhpcy5hdGxhc01hbmFnZXI7XG4gICAgICBpZiAodHlwZSkge1xuICAgICAgICByZXR1cm4gYXRsYXNNYW5hZ2VyLmludmFsaWRhdGUoZWxlcywge1xuICAgICAgICAgIGZpbHRlclR5cGU6IGZ1bmN0aW9uIGZpbHRlclR5cGUodCkge1xuICAgICAgICAgICAgcmV0dXJuIHQgPT09IHR5cGU7XG4gICAgICAgICAgfSxcbiAgICAgICAgICBmb3JjZVJlZHJhdzogdHJ1ZVxuICAgICAgICB9KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBhdGxhc01hbmFnZXIuaW52YWxpZGF0ZShlbGVzKTtcbiAgICAgIH1cbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwiZ2NcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gZ2MoKSB7XG4gICAgICB0aGlzLmF0bGFzTWFuYWdlci5nYygpO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJjcmVhdGVTaGFkZXJQcm9ncmFtXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGNyZWF0ZVNoYWRlclByb2dyYW0ocmVuZGVyVGFyZ2V0KSB7XG4gICAgICB2YXIgZ2wgPSB0aGlzLmdsO1xuXG4gICAgICAvLyBjb21wdXRlIHRleHR1cmUgY29vcmRpbmF0ZXMgaW4gdGhlIHNoYWRlciwgYmVjYXNlIHdlIGFyZSB1c2luZyBpbnN0YW5jZWQgZHJhd2luZ1xuICAgICAgdmFyIHZlcnRleFNoYWRlclNvdXJjZSA9IFwiI3ZlcnNpb24gMzAwIGVzXFxuICAgICAgcHJlY2lzaW9uIGhpZ2hwIGZsb2F0O1xcblxcbiAgICAgIHVuaWZvcm0gbWF0MyB1UGFuWm9vbU1hdHJpeDtcXG4gICAgICB1bmlmb3JtIGludCAgdUF0bGFzU2l6ZTtcXG4gICAgICBcXG4gICAgICAvLyBpbnN0YW5jZWRcXG4gICAgICBpbiB2ZWMyIGFQb3NpdGlvbjsgXFxuXFxuICAgICAgaW4gbWF0MyBhVHJhbnNmb3JtO1xcblxcbiAgICAgIC8vIHdoYXQgYXJlIHdlIHJlbmRlcmluZz9cXG4gICAgICBpbiBpbnQgYVZlcnRUeXBlO1xcblxcbiAgICAgIC8vIGZvciBwaWNraW5nXFxuICAgICAgaW4gdmVjNCBhSW5kZXg7XFxuICAgICAgXFxuICAgICAgLy8gRm9yIHRleHR1cmVzXFxuICAgICAgaW4gaW50IGFBdGxhc0lkOyAvLyB3aGljaCBzaGFkZXIgdW5pdC9hdGxhcyB0byB1c2VcXG4gICAgICBpbiB2ZWM0IGFUZXg7IC8vIHgveS93L2ggb2YgdGV4dHVyZSBpbiBhdGxhc1xcblxcbiAgICAgIC8vIGZvciBlZGdlc1xcbiAgICAgIGluIHZlYzQgYVBvaW50QVBvaW50QjtcXG4gICAgICBpbiB2ZWM0IGFQb2ludENQb2ludEQ7XFxuICAgICAgaW4gZmxvYXQgYUxpbmVXaWR0aDtcXG4gICAgICBpbiB2ZWM0IGFDb2xvcjtcXG5cXG4gICAgICBvdXQgdmVjMiB2VGV4Q29vcmQ7XFxuICAgICAgb3V0IHZlYzQgdkNvbG9yO1xcbiAgICAgIGZsYXQgb3V0IGludCB2QXRsYXNJZDtcXG4gICAgICBmbGF0IG91dCB2ZWM0IHZJbmRleDtcXG4gICAgICBmbGF0IG91dCBpbnQgdlZlcnRUeXBlO1xcblxcbiAgICAgIHZvaWQgbWFpbih2b2lkKSB7XFxuICAgICAgICBpbnQgdmlkID0gZ2xfVmVydGV4SUQ7XFxuICAgICAgICB2ZWMyIHBvc2l0aW9uID0gYVBvc2l0aW9uO1xcblxcbiAgICAgICAgaWYoYVZlcnRUeXBlID09IFwiLmNvbmNhdChURVhUVVJFLCBcIikge1xcbiAgICAgICAgICBmbG9hdCB0ZXhYID0gYVRleC54O1xcbiAgICAgICAgICBmbG9hdCB0ZXhZID0gYVRleC55O1xcbiAgICAgICAgICBmbG9hdCB0ZXhXID0gYVRleC56O1xcbiAgICAgICAgICBmbG9hdCB0ZXhIID0gYVRleC53O1xcblxcbiAgICAgICAgICBpbnQgdmlkID0gZ2xfVmVydGV4SUQ7XFxuXFxuICAgICAgICAgIGlmKHZpZCA9PSAxIHx8IHZpZCA9PSAyIHx8IHZpZCA9PSA0KSB7XFxuICAgICAgICAgICAgdGV4WCArPSB0ZXhXO1xcbiAgICAgICAgICB9XFxuICAgICAgICAgIGlmKHZpZCA9PSAyIHx8IHZpZCA9PSA0IHx8IHZpZCA9PSA1KSB7XFxuICAgICAgICAgICAgdGV4WSArPSB0ZXhIO1xcbiAgICAgICAgICB9XFxuXFxuICAgICAgICAgIGZsb2F0IGQgPSBmbG9hdCh1QXRsYXNTaXplKTtcXG4gICAgICAgICAgdlRleENvb3JkID0gdmVjMih0ZXhYIC8gZCwgdGV4WSAvIGQpOyAvLyB0ZXggY29vcmRzIG11c3QgYmUgYmV0d2VlbiAwIGFuZCAxXFxuXFxuICAgICAgICAgIGdsX1Bvc2l0aW9uID0gdmVjNCh1UGFuWm9vbU1hdHJpeCAqIGFUcmFuc2Zvcm0gKiB2ZWMzKHBvc2l0aW9uLCAxLjApLCAxLjApO1xcbiAgICAgICAgfVxcbiAgICAgICAgZWxzZSBpZihhVmVydFR5cGUgPT0gXCIpLmNvbmNhdChSRUNUQU5HTEUsIFwiKSB7XFxuICAgICAgICAgIGdsX1Bvc2l0aW9uID0gdmVjNCh1UGFuWm9vbU1hdHJpeCAqIGFUcmFuc2Zvcm0gKiB2ZWMzKHBvc2l0aW9uLCAxLjApLCAxLjApO1xcbiAgICAgICAgICB2Q29sb3IgPSBhQ29sb3I7XFxuICAgICAgICB9XFxuICAgICAgICBlbHNlIGlmKGFWZXJ0VHlwZSA9PSBcIikuY29uY2F0KEVER0VfU1RSQUlHSFQsIFwiKSB7XFxuICAgICAgICAgIHZlYzIgc291cmNlID0gYVBvaW50QVBvaW50Qi54eTtcXG4gICAgICAgICAgdmVjMiB0YXJnZXQgPSBhUG9pbnRBUG9pbnRCLnp3O1xcblxcbiAgICAgICAgICAvLyBhZGp1c3QgdGhlIGdlb21ldHJ5IHNvIHRoYXQgdGhlIGxpbmUgaXMgY2VudGVyZWQgb24gdGhlIGVkZ2VcXG4gICAgICAgICAgcG9zaXRpb24ueSA9IHBvc2l0aW9uLnkgLSAwLjU7XFxuXFxuICAgICAgICAgIHZlYzIgeEJhc2lzID0gdGFyZ2V0IC0gc291cmNlO1xcbiAgICAgICAgICB2ZWMyIHlCYXNpcyA9IG5vcm1hbGl6ZSh2ZWMyKC14QmFzaXMueSwgeEJhc2lzLngpKTtcXG4gICAgICAgICAgdmVjMiBwb2ludCA9IHNvdXJjZSArIHhCYXNpcyAqIHBvc2l0aW9uLnggKyB5QmFzaXMgKiBhTGluZVdpZHRoICogcG9zaXRpb24ueTtcXG5cXG4gICAgICAgICAgZ2xfUG9zaXRpb24gPSB2ZWM0KHVQYW5ab29tTWF0cml4ICogdmVjMyhwb2ludCwgMS4wKSwgMS4wKTtcXG4gICAgICAgICAgdkNvbG9yID0gYUNvbG9yO1xcbiAgICAgICAgfSBcXG4gICAgICAgIGVsc2UgaWYoYVZlcnRUeXBlID09IFwiKS5jb25jYXQoRURHRV9DVVJWRV9TRUdNRU5ULCBcIikge1xcbiAgICAgICAgICB2ZWMyIHBvaW50QSA9IGFQb2ludEFQb2ludEIueHk7XFxuICAgICAgICAgIHZlYzIgcG9pbnRCID0gYVBvaW50QVBvaW50Qi56dztcXG4gICAgICAgICAgdmVjMiBwb2ludEMgPSBhUG9pbnRDUG9pbnRELnh5O1xcbiAgICAgICAgICB2ZWMyIHBvaW50RCA9IGFQb2ludENQb2ludEQuenc7XFxuXFxuICAgICAgICAgIC8vIGFkanVzdCB0aGUgZ2VvbWV0cnkgc28gdGhhdCB0aGUgbGluZSBpcyBjZW50ZXJlZCBvbiB0aGUgZWRnZVxcbiAgICAgICAgICBwb3NpdGlvbi55ID0gcG9zaXRpb24ueSAtIDAuNTtcXG5cXG4gICAgICAgICAgdmVjMiBwMCA9IHBvaW50QTtcXG4gICAgICAgICAgdmVjMiBwMSA9IHBvaW50QjtcXG4gICAgICAgICAgdmVjMiBwMiA9IHBvaW50QztcXG4gICAgICAgICAgdmVjMiBwb3MgPSBwb3NpdGlvbjtcXG4gICAgICAgICAgaWYocG9zaXRpb24ueCA9PSAxLjApIHtcXG4gICAgICAgICAgICBwMCA9IHBvaW50RDtcXG4gICAgICAgICAgICBwMSA9IHBvaW50QztcXG4gICAgICAgICAgICBwMiA9IHBvaW50QjtcXG4gICAgICAgICAgICBwb3MgPSB2ZWMyKDAuMCwgLXBvc2l0aW9uLnkpO1xcbiAgICAgICAgICB9XFxuXFxuICAgICAgICAgIHZlYzIgcDAxID0gcDEgLSBwMDtcXG4gICAgICAgICAgdmVjMiBwMTIgPSBwMiAtIHAxO1xcbiAgICAgICAgICB2ZWMyIHAyMSA9IHAxIC0gcDI7XFxuXFxuICAgICAgICAgIC8vIEZpbmQgdGhlIG5vcm1hbCB2ZWN0b3IuXFxuICAgICAgICAgIHZlYzIgdGFuZ2VudCA9IG5vcm1hbGl6ZShub3JtYWxpemUocDEyKSArIG5vcm1hbGl6ZShwMDEpKTtcXG4gICAgICAgICAgdmVjMiBub3JtYWwgPSB2ZWMyKC10YW5nZW50LnksIHRhbmdlbnQueCk7XFxuXFxuICAgICAgICAgIC8vIEZpbmQgdGhlIHZlY3RvciBwZXJwZW5kaWN1bGFyIHRvIHAwIC0+IHAxLlxcbiAgICAgICAgICB2ZWMyIHAwMU5vcm0gPSBub3JtYWxpemUodmVjMigtcDAxLnksIHAwMS54KSk7XFxuXFxuICAgICAgICAgIC8vIERldGVybWluZSB0aGUgYmVuZCBkaXJlY3Rpb24uXFxuICAgICAgICAgIGZsb2F0IHNpZ21hID0gc2lnbihkb3QocDAxICsgcDIxLCBub3JtYWwpKTtcXG4gICAgICAgICAgZmxvYXQgd2lkdGggPSBhTGluZVdpZHRoO1xcblxcbiAgICAgICAgICBpZihzaWduKHBvcy55KSA9PSAtc2lnbWEpIHtcXG4gICAgICAgICAgICAvLyBUaGlzIGlzIGFuIGludGVyc2VjdGluZyB2ZXJ0ZXguIEFkanVzdCB0aGUgcG9zaXRpb24gc28gdGhhdCB0aGVyZSdzIG5vIG92ZXJsYXAuXFxuICAgICAgICAgICAgdmVjMiBwb2ludCA9IDAuNSAqIHdpZHRoICogbm9ybWFsICogLXNpZ21hIC8gZG90KG5vcm1hbCwgcDAxTm9ybSk7XFxuICAgICAgICAgICAgZ2xfUG9zaXRpb24gPSB2ZWM0KHVQYW5ab29tTWF0cml4ICogdmVjMyhwMSArIHBvaW50LCAxLjApLCAxLjApO1xcbiAgICAgICAgICB9IGVsc2Uge1xcbiAgICAgICAgICAgIC8vIFRoaXMgaXMgYSBub24taW50ZXJzZWN0aW5nIHZlcnRleC4gVHJlYXQgaXQgbGlrZSBhIG1pdHJlIGpvaW4uXFxuICAgICAgICAgICAgdmVjMiBwb2ludCA9IDAuNSAqIHdpZHRoICogbm9ybWFsICogc2lnbWEgKiBkb3Qobm9ybWFsLCBwMDFOb3JtKTtcXG4gICAgICAgICAgICBnbF9Qb3NpdGlvbiA9IHZlYzQodVBhblpvb21NYXRyaXggKiB2ZWMzKHAxICsgcG9pbnQsIDEuMCksIDEuMCk7XFxuICAgICAgICAgIH1cXG5cXG4gICAgICAgICAgdkNvbG9yID0gYUNvbG9yO1xcbiAgICAgICAgfSBcXG4gICAgICAgIGVsc2UgaWYoYVZlcnRUeXBlID09IFwiKS5jb25jYXQoRURHRV9BUlJPVywgXCIgJiYgdmlkIDwgMykge1xcbiAgICAgICAgICAvLyBtYXNzYWdlIHRoZSBmaXJzdCB0cmlhbmdsZSBpbnRvIGFuIGVkZ2UgYXJyb3dcXG4gICAgICAgICAgaWYodmlkID09IDApXFxuICAgICAgICAgICAgcG9zaXRpb24gPSB2ZWMyKC0wLjE1LCAtMC4zKTtcXG4gICAgICAgICAgaWYodmlkID09IDEpXFxuICAgICAgICAgICAgcG9zaXRpb24gPSB2ZWMyKCAwLjAsICAgMC4wKTtcXG4gICAgICAgICAgaWYodmlkID09IDIpXFxuICAgICAgICAgICAgcG9zaXRpb24gPSB2ZWMyKCAwLjE1LCAtMC4zKTtcXG5cXG4gICAgICAgICAgZ2xfUG9zaXRpb24gPSB2ZWM0KHVQYW5ab29tTWF0cml4ICogYVRyYW5zZm9ybSAqIHZlYzMocG9zaXRpb24sIDEuMCksIDEuMCk7XFxuICAgICAgICAgIHZDb2xvciA9IGFDb2xvcjtcXG4gICAgICAgIH1cXG4gICAgICAgIGVsc2Uge1xcbiAgICAgICAgICBnbF9Qb3NpdGlvbiA9IHZlYzQoMi4wLCAwLjAsIDAuMCwgMS4wKTsgLy8gZGlzY2FyZCB2ZXJ0ZXggYnkgcHV0dGluZyBpdCBvdXRzaWRlIHdlYmdsIGNsaXAgc3BhY2VcXG4gICAgICAgIH1cXG5cXG4gICAgICAgIHZBdGxhc0lkID0gYUF0bGFzSWQ7XFxuICAgICAgICB2SW5kZXggPSBhSW5kZXg7XFxuICAgICAgICB2VmVydFR5cGUgPSBhVmVydFR5cGU7XFxuICAgICAgfVxcbiAgICBcIik7XG4gICAgICB2YXIgaWR4cyA9IHRoaXMuYXRsYXNNYW5hZ2VyLmdldEluZGV4QXJyYXkoKTtcbiAgICAgIHZhciBmcmFnbWVudFNoYWRlclNvdXJjZSA9IFwiI3ZlcnNpb24gMzAwIGVzXFxuICAgICAgcHJlY2lzaW9uIGhpZ2hwIGZsb2F0O1xcblxcbiAgICAgIC8vIGRlZmluZSB0ZXh0dXJlIHVuaXQgZm9yIGVhY2ggbm9kZSBpbiB0aGUgYmF0Y2hcXG4gICAgICBcIi5jb25jYXQoaWR4cy5tYXAoZnVuY3Rpb24gKGkpIHtcbiAgICAgICAgcmV0dXJuIFwidW5pZm9ybSBzYW1wbGVyMkQgdVRleHR1cmVcIi5jb25jYXQoaSwgXCI7XCIpO1xuICAgICAgfSkuam9pbignXFxuXFx0JyksIFwiXFxuXFxuICAgICAgdW5pZm9ybSB2ZWM0IHVCR0NvbG9yO1xcblxcbiAgICAgIGluIHZlYzIgdlRleENvb3JkO1xcbiAgICAgIGluIHZlYzQgdkNvbG9yO1xcbiAgICAgIGZsYXQgaW4gaW50IHZBdGxhc0lkO1xcbiAgICAgIGZsYXQgaW4gdmVjNCB2SW5kZXg7XFxuICAgICAgZmxhdCBpbiBpbnQgdlZlcnRUeXBlO1xcblxcbiAgICAgIG91dCB2ZWM0IG91dENvbG9yO1xcblxcbiAgICAgIHZvaWQgbWFpbih2b2lkKSB7XFxuICAgICAgICBpZih2VmVydFR5cGUgPT0gXCIpLmNvbmNhdChURVhUVVJFLCBcIikge1xcbiAgICAgICAgICBcIikuY29uY2F0KGlkeHMubWFwKGZ1bmN0aW9uIChpKSB7XG4gICAgICAgIHJldHVybiBcImlmKHZBdGxhc0lkID09IFwiLmNvbmNhdChpLCBcIikgb3V0Q29sb3IgPSB0ZXh0dXJlKHVUZXh0dXJlXCIpLmNvbmNhdChpLCBcIiwgdlRleENvb3JkKTtcIik7XG4gICAgICB9KS5qb2luKCdcXG5cXHRlbHNlICcpLCBcIlxcbiAgICAgICAgfSBlbHNlIGlmKHZWZXJ0VHlwZSA9PSBcIikuY29uY2F0KEVER0VfQVJST1csIFwiKSB7XFxuICAgICAgICAgIC8vIGJsZW5kIGFycm93IGNvbG9yIHdpdGggYmFja2dyb3VuZCAodXNpbmcgcHJlbXVsdGlwbGllZCBhbHBoYSlcXG4gICAgICAgICAgb3V0Q29sb3IucmdiID0gdkNvbG9yLnJnYiArICh1QkdDb2xvci5yZ2IgKiAoMS4wIC0gdkNvbG9yLmEpKTsgXFxuICAgICAgICAgIG91dENvbG9yLmEgPSAxLjA7IC8vIG1ha2Ugb3BhcXVlLCBtYXNrcyBvdXQgbGluZSB1bmRlciBhcnJvd1xcbiAgICAgICAgfSBlbHNlIHtcXG4gICAgICAgICAgb3V0Q29sb3IgPSB2Q29sb3I7XFxuICAgICAgICB9XFxuXFxuICAgICAgICBcIikuY29uY2F0KHJlbmRlclRhcmdldC5waWNraW5nID8gXCJpZihvdXRDb2xvci5hID09IDAuMCkgZGlzY2FyZDtcXG4gICAgICAgICAgICAgZWxzZSBvdXRDb2xvciA9IHZJbmRleDtcIiA6ICcnLCBcIlxcbiAgICAgIH1cXG4gICAgXCIpO1xuICAgICAgdmFyIHByb2dyYW0gPSBjcmVhdGVQcm9ncmFtKGdsLCB2ZXJ0ZXhTaGFkZXJTb3VyY2UsIGZyYWdtZW50U2hhZGVyU291cmNlKTtcblxuICAgICAgLy8gaW5zdGFuY2UgZ2VvbWV0cnlcbiAgICAgIHByb2dyYW0uYVBvc2l0aW9uID0gZ2wuZ2V0QXR0cmliTG9jYXRpb24ocHJvZ3JhbSwgJ2FQb3NpdGlvbicpO1xuXG4gICAgICAvLyBhdHRyaWJ1dGVzXG4gICAgICBwcm9ncmFtLmFJbmRleCA9IGdsLmdldEF0dHJpYkxvY2F0aW9uKHByb2dyYW0sICdhSW5kZXgnKTtcbiAgICAgIHByb2dyYW0uYVZlcnRUeXBlID0gZ2wuZ2V0QXR0cmliTG9jYXRpb24ocHJvZ3JhbSwgJ2FWZXJ0VHlwZScpO1xuICAgICAgcHJvZ3JhbS5hVHJhbnNmb3JtID0gZ2wuZ2V0QXR0cmliTG9jYXRpb24ocHJvZ3JhbSwgJ2FUcmFuc2Zvcm0nKTtcbiAgICAgIHByb2dyYW0uYUF0bGFzSWQgPSBnbC5nZXRBdHRyaWJMb2NhdGlvbihwcm9ncmFtLCAnYUF0bGFzSWQnKTtcbiAgICAgIHByb2dyYW0uYVRleCA9IGdsLmdldEF0dHJpYkxvY2F0aW9uKHByb2dyYW0sICdhVGV4Jyk7XG4gICAgICBwcm9ncmFtLmFQb2ludEFQb2ludEIgPSBnbC5nZXRBdHRyaWJMb2NhdGlvbihwcm9ncmFtLCAnYVBvaW50QVBvaW50QicpO1xuICAgICAgcHJvZ3JhbS5hUG9pbnRDUG9pbnREID0gZ2wuZ2V0QXR0cmliTG9jYXRpb24ocHJvZ3JhbSwgJ2FQb2ludENQb2ludEQnKTtcbiAgICAgIHByb2dyYW0uYUxpbmVXaWR0aCA9IGdsLmdldEF0dHJpYkxvY2F0aW9uKHByb2dyYW0sICdhTGluZVdpZHRoJyk7XG4gICAgICBwcm9ncmFtLmFDb2xvciA9IGdsLmdldEF0dHJpYkxvY2F0aW9uKHByb2dyYW0sICdhQ29sb3InKTtcblxuICAgICAgLy8gdW5pZm9ybXNcbiAgICAgIHByb2dyYW0udVBhblpvb21NYXRyaXggPSBnbC5nZXRVbmlmb3JtTG9jYXRpb24ocHJvZ3JhbSwgJ3VQYW5ab29tTWF0cml4Jyk7XG4gICAgICBwcm9ncmFtLnVBdGxhc1NpemUgPSBnbC5nZXRVbmlmb3JtTG9jYXRpb24ocHJvZ3JhbSwgJ3VBdGxhc1NpemUnKTtcbiAgICAgIHByb2dyYW0udUJHQ29sb3IgPSBnbC5nZXRVbmlmb3JtTG9jYXRpb24ocHJvZ3JhbSwgJ3VCR0NvbG9yJyk7XG4gICAgICBwcm9ncmFtLnVUZXh0dXJlcyA9IFtdO1xuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLmF0bGFzTWFuYWdlci5nZXRNYXhBdGxhc2VzUGVyQmF0Y2goKTsgaSsrKSB7XG4gICAgICAgIHByb2dyYW0udVRleHR1cmVzLnB1c2goZ2wuZ2V0VW5pZm9ybUxvY2F0aW9uKHByb2dyYW0sIFwidVRleHR1cmVcIi5jb25jYXQoaSkpKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBwcm9ncmFtO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJjcmVhdGVWQU9cIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gY3JlYXRlVkFPKCkge1xuICAgICAgdmFyIGluc3RhbmNlR2VvbWV0cnkgPSBbMCwgMCwgMSwgMCwgMSwgMSwgMCwgMCwgMSwgMSwgMCwgMV07XG4gICAgICB0aGlzLnZlcnRleENvdW50ID0gaW5zdGFuY2VHZW9tZXRyeS5sZW5ndGggLyAyO1xuICAgICAgdmFyIG4gPSB0aGlzLm1heEluc3RhbmNlcztcbiAgICAgIHZhciBnbCA9IHRoaXMuZ2wsXG4gICAgICAgIHByb2dyYW0gPSB0aGlzLnByb2dyYW07XG4gICAgICB2YXIgdmFvID0gZ2wuY3JlYXRlVmVydGV4QXJyYXkoKTtcbiAgICAgIGdsLmJpbmRWZXJ0ZXhBcnJheSh2YW8pO1xuICAgICAgY3JlYXRlQnVmZmVyU3RhdGljRHJhdyhnbCwgJ3ZlYzInLCBwcm9ncmFtLmFQb3NpdGlvbiwgaW5zdGFuY2VHZW9tZXRyeSk7XG5cbiAgICAgIC8vIENyZWF0ZSBidWZmZXJzIGZvciBhbGwgdGhlIGF0dHJpYnV0ZXNcbiAgICAgIHRoaXMudHJhbnNmb3JtQnVmZmVyID0gY3JlYXRlM3gzTWF0cml4QnVmZmVyRHluYW1pY0RyYXcoZ2wsIG4sIHByb2dyYW0uYVRyYW5zZm9ybSk7XG4gICAgICB0aGlzLmluZGV4QnVmZmVyID0gY3JlYXRlQnVmZmVyRHluYW1pY0RyYXcoZ2wsIG4sICd2ZWM0JywgcHJvZ3JhbS5hSW5kZXgpO1xuICAgICAgdGhpcy52ZXJ0VHlwZUJ1ZmZlciA9IGNyZWF0ZUJ1ZmZlckR5bmFtaWNEcmF3KGdsLCBuLCAnaW50JywgcHJvZ3JhbS5hVmVydFR5cGUpO1xuICAgICAgdGhpcy5hdGxhc0lkQnVmZmVyID0gY3JlYXRlQnVmZmVyRHluYW1pY0RyYXcoZ2wsIG4sICdpbnQnLCBwcm9ncmFtLmFBdGxhc0lkKTtcbiAgICAgIHRoaXMudGV4QnVmZmVyID0gY3JlYXRlQnVmZmVyRHluYW1pY0RyYXcoZ2wsIG4sICd2ZWM0JywgcHJvZ3JhbS5hVGV4KTtcbiAgICAgIHRoaXMucG9pbnRBUG9pbnRCQnVmZmVyID0gY3JlYXRlQnVmZmVyRHluYW1pY0RyYXcoZ2wsIG4sICd2ZWM0JywgcHJvZ3JhbS5hUG9pbnRBUG9pbnRCKTtcbiAgICAgIHRoaXMucG9pbnRDUG9pbnREQnVmZmVyID0gY3JlYXRlQnVmZmVyRHluYW1pY0RyYXcoZ2wsIG4sICd2ZWM0JywgcHJvZ3JhbS5hUG9pbnRDUG9pbnREKTtcbiAgICAgIHRoaXMubGluZVdpZHRoQnVmZmVyID0gY3JlYXRlQnVmZmVyRHluYW1pY0RyYXcoZ2wsIG4sICdmbG9hdCcsIHByb2dyYW0uYUxpbmVXaWR0aCk7XG4gICAgICB0aGlzLmNvbG9yQnVmZmVyID0gY3JlYXRlQnVmZmVyRHluYW1pY0RyYXcoZ2wsIG4sICd2ZWM0JywgcHJvZ3JhbS5hQ29sb3IpO1xuICAgICAgZ2wuYmluZFZlcnRleEFycmF5KG51bGwpO1xuICAgICAgcmV0dXJuIHZhbztcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwiYnVmZmVyc1wiLFxuICAgIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgICAgdmFyIF90aGlzID0gdGhpcztcbiAgICAgIGlmICghdGhpcy5fYnVmZmVycykge1xuICAgICAgICB0aGlzLl9idWZmZXJzID0gT2JqZWN0LmtleXModGhpcykuZmlsdGVyKGZ1bmN0aW9uIChrKSB7XG4gICAgICAgICAgcmV0dXJuIGsuZW5kc1dpdGgoJ0J1ZmZlcicpO1xuICAgICAgICB9KS5tYXAoZnVuY3Rpb24gKGspIHtcbiAgICAgICAgICByZXR1cm4gX3RoaXNba107XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHRoaXMuX2J1ZmZlcnM7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcInN0YXJ0RnJhbWVcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gc3RhcnRGcmFtZShwYW5ab29tTWF0cml4KSB7XG4gICAgICB2YXIgcmVuZGVyVGFyZ2V0ID0gYXJndW1lbnRzLmxlbmd0aCA+IDEgJiYgYXJndW1lbnRzWzFdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMV0gOiBSRU5ERVJfVEFSR0VULlNDUkVFTjtcbiAgICAgIHRoaXMucGFuWm9vbU1hdHJpeCA9IHBhblpvb21NYXRyaXg7XG4gICAgICB0aGlzLnJlbmRlclRhcmdldCA9IHJlbmRlclRhcmdldDtcbiAgICAgIHRoaXMuYmF0Y2hEZWJ1Z0luZm8gPSBbXTtcbiAgICAgIHRoaXMud3JhcHBlZENvdW50ID0gMDsgLy8gVE9ETyB0aGlzIHNob3VsZCBiZSBpbiB0aGUgQXRsYXNNYW5hZ2VyXG4gICAgICB0aGlzLnJlY3RhbmdsZUNvdW50ID0gMDtcbiAgICAgIHRoaXMuc3RhcnRCYXRjaCgpO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJzdGFydEJhdGNoXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIHN0YXJ0QmF0Y2goKSB7XG4gICAgICB0aGlzLmluc3RhbmNlQ291bnQgPSAwO1xuICAgICAgdGhpcy5hdGxhc01hbmFnZXIuc3RhcnRCYXRjaCgpO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJlbmRGcmFtZVwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBlbmRGcmFtZSgpIHtcbiAgICAgIHRoaXMuZW5kQmF0Y2goKTtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwiZ2V0VGVtcE1hdHJpeFwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBnZXRUZW1wTWF0cml4KCkge1xuICAgICAgcmV0dXJuIHRoaXMudGVtcE1hdHJpeCA9IHRoaXMudGVtcE1hdHJpeCB8fCBjcmVhdGUoKTtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwiZHJhd1RleHR1cmVcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gZHJhd1RleHR1cmUoZWxlLCBlbGVJbmRleCwgdHlwZSkge1xuICAgICAgdmFyIGF0bGFzTWFuYWdlciA9IHRoaXMuYXRsYXNNYW5hZ2VyO1xuICAgICAgaWYgKCFlbGUudmlzaWJsZSgpKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGlmICghYXRsYXNNYW5hZ2VyLmdldFJlbmRlclR5cGVPcHRzKHR5cGUpLmlzVmlzaWJsZShlbGUpKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGlmICghYXRsYXNNYW5hZ2VyLmNhbkFkZFRvQ3VycmVudEJhdGNoKGVsZSwgdHlwZSkpIHtcbiAgICAgICAgdGhpcy5lbmRCYXRjaCgpOyAvLyBkcmF3cyB0aGVuIHN0YXJ0cyBhIG5ldyBiYXRjaFxuICAgICAgfVxuICAgICAgaWYgKHRoaXMuaW5zdGFuY2VDb3VudCArIDEgPj0gdGhpcy5tYXhJbnN0YW5jZXMpIHtcbiAgICAgICAgdGhpcy5lbmRCYXRjaCgpOyAvLyBtYWtlIHN1cmUgdGhlcmUncyBzcGFjZSBmb3IgYXQgbGVhc3QgdHdvIGluc3RhbmNlcywgd3JhcHBlZCB0ZXh0dXJlcyBuZWVkIHR3byBpbnN0YW5jZXNcbiAgICAgIH1cbiAgICAgIHZhciBpbnN0YW5jZSA9IHRoaXMuaW5zdGFuY2VDb3VudDtcbiAgICAgIHRoaXMudmVydFR5cGVCdWZmZXIuZ2V0VmlldyhpbnN0YW5jZSlbMF0gPSBURVhUVVJFO1xuICAgICAgdmFyIGluZGV4VmlldyA9IHRoaXMuaW5kZXhCdWZmZXIuZ2V0VmlldyhpbnN0YW5jZSk7XG4gICAgICBpbmRleFRvVmVjNChlbGVJbmRleCwgaW5kZXhWaWV3KTtcbiAgICAgIHZhciBhdGxhc0luZm8gPSBhdGxhc01hbmFnZXIuZ2V0QXRsYXNJbmZvKGVsZSwgdHlwZSk7XG4gICAgICB2YXIgaW5kZXggPSBhdGxhc0luZm8uaW5kZXgsXG4gICAgICAgIHRleDEgPSBhdGxhc0luZm8udGV4MSxcbiAgICAgICAgdGV4MiA9IGF0bGFzSW5mby50ZXgyO1xuICAgICAgaWYgKHRleDIudyA+IDApIHRoaXMud3JhcHBlZENvdW50Kys7XG4gICAgICB2YXIgZmlyc3QgPSB0cnVlO1xuICAgICAgZm9yICh2YXIgX2kgPSAwLCBfYXJyID0gW3RleDEsIHRleDJdOyBfaSA8IF9hcnIubGVuZ3RoOyBfaSsrKSB7XG4gICAgICAgIHZhciB0ZXggPSBfYXJyW19pXTtcbiAgICAgICAgaWYgKHRleC53ICE9IDApIHtcbiAgICAgICAgICB2YXIgX2luc3RhbmNlID0gdGhpcy5pbnN0YW5jZUNvdW50O1xuICAgICAgICAgIHRoaXMudmVydFR5cGVCdWZmZXIuZ2V0VmlldyhfaW5zdGFuY2UpWzBdID0gVEVYVFVSRTtcbiAgICAgICAgICB2YXIgX2luZGV4VmlldyA9IHRoaXMuaW5kZXhCdWZmZXIuZ2V0VmlldyhfaW5zdGFuY2UpO1xuICAgICAgICAgIGluZGV4VG9WZWM0KGVsZUluZGV4LCBfaW5kZXhWaWV3KTtcblxuICAgICAgICAgIC8vIFNldCB2YWx1ZXMgaW4gdGhlIGJ1ZmZlcnMgdXNpbmcgVHlwZWQgQXJyYXkgVmlld3MgZm9yIHBlcmZvcm1hbmNlLlxuICAgICAgICAgIHZhciBhdGxhc0lkVmlldyA9IHRoaXMuYXRsYXNJZEJ1ZmZlci5nZXRWaWV3KF9pbnN0YW5jZSk7XG4gICAgICAgICAgYXRsYXNJZFZpZXdbMF0gPSBpbmRleDtcblxuICAgICAgICAgIC8vIHdlIGhhdmUgdHdvIHNldHMgb2YgdGV4dHVyZSBjb29yZGluYXRlcyBhbmQgdHJhbnNmb3JtcyBiZWNhdXNlIHRleHR1cmVzIGNhbiB3cmFwIGluIHRoZSBhdGxhc1xuICAgICAgICAgIHZhciB0ZXhWaWV3ID0gdGhpcy50ZXhCdWZmZXIuZ2V0VmlldyhfaW5zdGFuY2UpO1xuICAgICAgICAgIHRleFZpZXdbMF0gPSB0ZXgueDtcbiAgICAgICAgICB0ZXhWaWV3WzFdID0gdGV4Lnk7XG4gICAgICAgICAgdGV4Vmlld1syXSA9IHRleC53O1xuICAgICAgICAgIHRleFZpZXdbM10gPSB0ZXguaDtcbiAgICAgICAgICB2YXIgbWF0cml4VmlldyA9IHRoaXMudHJhbnNmb3JtQnVmZmVyLmdldE1hdHJpeFZpZXcoX2luc3RhbmNlKTtcbiAgICAgICAgICBhdGxhc01hbmFnZXIuc2V0VHJhbnNmb3JtTWF0cml4KGVsZSwgbWF0cml4VmlldywgdHlwZSwgYXRsYXNJbmZvLCBmaXJzdCk7XG4gICAgICAgICAgdGhpcy5pbnN0YW5jZUNvdW50Kys7XG4gICAgICAgIH1cbiAgICAgICAgZmlyc3QgPSBmYWxzZTtcbiAgICAgIH1cbiAgICAgIGlmICh0aGlzLmluc3RhbmNlQ291bnQgPj0gdGhpcy5tYXhJbnN0YW5jZXMpIHtcbiAgICAgICAgdGhpcy5lbmRCYXRjaCgpO1xuICAgICAgfVxuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJkcmF3U2ltcGxlUmVjdGFuZ2xlXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGRyYXdTaW1wbGVSZWN0YW5nbGUoZWxlLCBlbGVJbmRleCwgdHlwZSkge1xuICAgICAgaWYgKCFlbGUudmlzaWJsZSgpKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIHZhciBhdGxhc01hbmFnZXIgPSB0aGlzLmF0bGFzTWFuYWdlcjtcbiAgICAgIHZhciBpbnN0YW5jZSA9IHRoaXMuaW5zdGFuY2VDb3VudDtcbiAgICAgIHRoaXMudmVydFR5cGVCdWZmZXIuZ2V0VmlldyhpbnN0YW5jZSlbMF0gPSBSRUNUQU5HTEU7XG4gICAgICB2YXIgaW5kZXhWaWV3ID0gdGhpcy5pbmRleEJ1ZmZlci5nZXRWaWV3KGluc3RhbmNlKTtcbiAgICAgIGluZGV4VG9WZWM0KGVsZUluZGV4LCBpbmRleFZpZXcpO1xuICAgICAgdmFyIGNvbG9yID0gZWxlLnBzdHlsZSgnYmFja2dyb3VuZC1jb2xvcicpLnZhbHVlO1xuICAgICAgdmFyIG9wYWNpdHkgPSBlbGUucHN0eWxlKCdiYWNrZ3JvdW5kLW9wYWNpdHknKS52YWx1ZTtcbiAgICAgIHZhciBjb2xvclZpZXcgPSB0aGlzLmNvbG9yQnVmZmVyLmdldFZpZXcoaW5zdGFuY2UpO1xuICAgICAgdG9XZWJHTENvbG9yKGNvbG9yLCBvcGFjaXR5LCBjb2xvclZpZXcpO1xuICAgICAgdmFyIG1hdHJpeFZpZXcgPSB0aGlzLnRyYW5zZm9ybUJ1ZmZlci5nZXRNYXRyaXhWaWV3KGluc3RhbmNlKTtcbiAgICAgIGF0bGFzTWFuYWdlci5zZXRUcmFuc2Zvcm1NYXRyaXgoZWxlLCBtYXRyaXhWaWV3LCB0eXBlKTtcbiAgICAgIHRoaXMucmVjdGFuZ2xlQ291bnQrKztcbiAgICAgIHRoaXMuaW5zdGFuY2VDb3VudCsrO1xuICAgICAgaWYgKHRoaXMuaW5zdGFuY2VDb3VudCA+PSB0aGlzLm1heEluc3RhbmNlcykge1xuICAgICAgICB0aGlzLmVuZEJhdGNoKCk7XG4gICAgICB9XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcImRyYXdFZGdlQXJyb3dcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gZHJhd0VkZ2VBcnJvdyhlZGdlLCBlbGVJbmRleCwgcHJlZml4KSB7XG4gICAgICBpZiAoIWVkZ2UudmlzaWJsZSgpKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIC8vIEVkZ2UgcG9pbnRzIGFuZCBhcnJvdyBhbmdsZXMgZXRjIGFyZSBjYWxjdWxhdGVkIGJ5IHRoZSBiYXNlIHJlbmRlcmVyIGFuZCBjYWNoZWQgaW4gdGhlIHJzY3JhdGNoIG9iamVjdC5cbiAgICAgIHZhciBycyA9IGVkZ2UuX3ByaXZhdGUucnNjcmF0Y2g7XG4gICAgICB2YXIgeCwgeSwgYW5nbGU7XG4gICAgICBpZiAocHJlZml4ID09PSAnc291cmNlJykge1xuICAgICAgICB4ID0gcnMuYXJyb3dTdGFydFg7XG4gICAgICAgIHkgPSBycy5hcnJvd1N0YXJ0WTtcbiAgICAgICAgYW5nbGUgPSBycy5zcmNBcnJvd0FuZ2xlO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgeCA9IHJzLmFycm93RW5kWDtcbiAgICAgICAgeSA9IHJzLmFycm93RW5kWTtcbiAgICAgICAgYW5nbGUgPSBycy50Z3RBcnJvd0FuZ2xlO1xuICAgICAgfVxuXG4gICAgICAvLyB0YWtlbiBmcm9tIENScC5kcmF3QXJyb3doZWFkXG4gICAgICBpZiAoaXNOYU4oeCkgfHwgeCA9PSBudWxsIHx8IGlzTmFOKHkpIHx8IHkgPT0gbnVsbCB8fCBpc05hTihhbmdsZSkgfHwgYW5nbGUgPT0gbnVsbCkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIC8vIGNoZWNrIHNoYXBlIGFmdGVyIHRoZSB4L3kgY2hlY2sgYmVjYXVzZSBwc3R5bGUoKSBpcyBhIGJpdCBzbG93XG4gICAgICB2YXIgYXJyb3dTaGFwZSA9IGVkZ2UucHN0eWxlKHByZWZpeCArICctYXJyb3ctc2hhcGUnKS52YWx1ZTtcbiAgICAgIGlmIChhcnJvd1NoYXBlID09PSAnbm9uZScpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgdmFyIGNvbG9yID0gZWRnZS5wc3R5bGUocHJlZml4ICsgJy1hcnJvdy1jb2xvcicpLnZhbHVlO1xuICAgICAgdmFyIGJhc2VPcGFjaXR5ID0gZWRnZS5wc3R5bGUoJ29wYWNpdHknKS52YWx1ZTtcbiAgICAgIHZhciBsaW5lT3BhY2l0eSA9IGVkZ2UucHN0eWxlKCdsaW5lLW9wYWNpdHknKS52YWx1ZTtcbiAgICAgIHZhciBvcGFjaXR5ID0gYmFzZU9wYWNpdHkgKiBsaW5lT3BhY2l0eTtcbiAgICAgIHZhciBsaW5lV2lkdGggPSBlZGdlLnBzdHlsZSgnd2lkdGgnKS5wZlZhbHVlO1xuICAgICAgdmFyIHNjYWxlJDEgPSBlZGdlLnBzdHlsZSgnYXJyb3ctc2NhbGUnKS52YWx1ZTtcbiAgICAgIHZhciBzaXplID0gdGhpcy5yLmdldEFycm93V2lkdGgobGluZVdpZHRoLCBzY2FsZSQxKTtcbiAgICAgIHZhciBpbnN0YW5jZSA9IHRoaXMuaW5zdGFuY2VDb3VudDtcbiAgICAgIHZhciB0cmFuc2Zvcm0gPSB0aGlzLnRyYW5zZm9ybUJ1ZmZlci5nZXRNYXRyaXhWaWV3KGluc3RhbmNlKTtcbiAgICAgIGlkZW50aXR5KHRyYW5zZm9ybSk7XG4gICAgICB0cmFuc2xhdGUodHJhbnNmb3JtLCB0cmFuc2Zvcm0sIFt4LCB5XSk7XG4gICAgICBzY2FsZSh0cmFuc2Zvcm0sIHRyYW5zZm9ybSwgW3NpemUsIHNpemVdKTtcbiAgICAgIHJvdGF0ZSh0cmFuc2Zvcm0sIHRyYW5zZm9ybSwgYW5nbGUpO1xuICAgICAgdGhpcy52ZXJ0VHlwZUJ1ZmZlci5nZXRWaWV3KGluc3RhbmNlKVswXSA9IEVER0VfQVJST1c7XG4gICAgICB2YXIgaW5kZXhWaWV3ID0gdGhpcy5pbmRleEJ1ZmZlci5nZXRWaWV3KGluc3RhbmNlKTtcbiAgICAgIGluZGV4VG9WZWM0KGVsZUluZGV4LCBpbmRleFZpZXcpO1xuICAgICAgdmFyIGNvbG9yVmlldyA9IHRoaXMuY29sb3JCdWZmZXIuZ2V0VmlldyhpbnN0YW5jZSk7XG4gICAgICB0b1dlYkdMQ29sb3IoY29sb3IsIG9wYWNpdHksIGNvbG9yVmlldyk7XG4gICAgICB0aGlzLmluc3RhbmNlQ291bnQrKztcbiAgICAgIGlmICh0aGlzLmluc3RhbmNlQ291bnQgPj0gdGhpcy5tYXhJbnN0YW5jZXMpIHtcbiAgICAgICAgdGhpcy5lbmRCYXRjaCgpO1xuICAgICAgfVxuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJkcmF3RWRnZUxpbmVcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gZHJhd0VkZ2VMaW5lKGVkZ2UsIGVsZUluZGV4KSB7XG4gICAgICBpZiAoIWVkZ2UudmlzaWJsZSgpKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIHZhciBwb2ludHMgPSB0aGlzLmdldEVkZ2VQb2ludHMoZWRnZSk7XG4gICAgICBpZiAoIXBvaW50cykge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIC8vIGxpbmUgc3R5bGVcbiAgICAgIHZhciBiYXNlT3BhY2l0eSA9IGVkZ2UucHN0eWxlKCdvcGFjaXR5JykudmFsdWU7XG4gICAgICB2YXIgbGluZU9wYWNpdHkgPSBlZGdlLnBzdHlsZSgnbGluZS1vcGFjaXR5JykudmFsdWU7XG4gICAgICB2YXIgd2lkdGggPSBlZGdlLnBzdHlsZSgnd2lkdGgnKS5wZlZhbHVlO1xuICAgICAgdmFyIGNvbG9yID0gZWRnZS5wc3R5bGUoJ2xpbmUtY29sb3InKS52YWx1ZTtcbiAgICAgIHZhciBvcGFjaXR5ID0gYmFzZU9wYWNpdHkgKiBsaW5lT3BhY2l0eTtcbiAgICAgIGlmIChwb2ludHMubGVuZ3RoIC8gMiArIHRoaXMuaW5zdGFuY2VDb3VudCA+IHRoaXMubWF4SW5zdGFuY2VzKSB7XG4gICAgICAgIHRoaXMuZW5kQmF0Y2goKTtcbiAgICAgIH1cbiAgICAgIGlmIChwb2ludHMubGVuZ3RoID09IDQpIHtcbiAgICAgICAgLy8gc3RyYWlnaHQgbGluZVxuICAgICAgICB2YXIgaW5zdGFuY2UgPSB0aGlzLmluc3RhbmNlQ291bnQ7XG4gICAgICAgIHRoaXMudmVydFR5cGVCdWZmZXIuZ2V0VmlldyhpbnN0YW5jZSlbMF0gPSBFREdFX1NUUkFJR0hUO1xuICAgICAgICB2YXIgaW5kZXhWaWV3ID0gdGhpcy5pbmRleEJ1ZmZlci5nZXRWaWV3KGluc3RhbmNlKTtcbiAgICAgICAgaW5kZXhUb1ZlYzQoZWxlSW5kZXgsIGluZGV4Vmlldyk7XG4gICAgICAgIHZhciBjb2xvclZpZXcgPSB0aGlzLmNvbG9yQnVmZmVyLmdldFZpZXcoaW5zdGFuY2UpO1xuICAgICAgICB0b1dlYkdMQ29sb3IoY29sb3IsIG9wYWNpdHksIGNvbG9yVmlldyk7XG4gICAgICAgIHZhciBsaW5lV2lkdGhCdWZmZXIgPSB0aGlzLmxpbmVXaWR0aEJ1ZmZlci5nZXRWaWV3KGluc3RhbmNlKTtcbiAgICAgICAgbGluZVdpZHRoQnVmZmVyWzBdID0gd2lkdGg7XG4gICAgICAgIHZhciBzb3VyY2VUYXJnZXRWaWV3ID0gdGhpcy5wb2ludEFQb2ludEJCdWZmZXIuZ2V0VmlldyhpbnN0YW5jZSk7XG4gICAgICAgIHNvdXJjZVRhcmdldFZpZXdbMF0gPSBwb2ludHNbMF07IC8vIHNvdXJjZSB4XG4gICAgICAgIHNvdXJjZVRhcmdldFZpZXdbMV0gPSBwb2ludHNbMV07IC8vIHNvdXJjZSB5XG4gICAgICAgIHNvdXJjZVRhcmdldFZpZXdbMl0gPSBwb2ludHNbMl07IC8vIHRhcmdldCB4XG4gICAgICAgIHNvdXJjZVRhcmdldFZpZXdbM10gPSBwb2ludHNbM107IC8vIHRhcmdldCB5XG5cbiAgICAgICAgdGhpcy5pbnN0YW5jZUNvdW50Kys7XG4gICAgICAgIGlmICh0aGlzLmluc3RhbmNlQ291bnQgPj0gdGhpcy5tYXhJbnN0YW5jZXMpIHtcbiAgICAgICAgICB0aGlzLmVuZEJhdGNoKCk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIGN1cnZlZCBsaW5lXG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcG9pbnRzLmxlbmd0aCAtIDI7IGkgKz0gMikge1xuICAgICAgICAgIHZhciBfaW5zdGFuY2UyID0gdGhpcy5pbnN0YW5jZUNvdW50O1xuICAgICAgICAgIHRoaXMudmVydFR5cGVCdWZmZXIuZ2V0VmlldyhfaW5zdGFuY2UyKVswXSA9IEVER0VfQ1VSVkVfU0VHTUVOVDtcbiAgICAgICAgICB2YXIgX2luZGV4VmlldzIgPSB0aGlzLmluZGV4QnVmZmVyLmdldFZpZXcoX2luc3RhbmNlMik7XG4gICAgICAgICAgaW5kZXhUb1ZlYzQoZWxlSW5kZXgsIF9pbmRleFZpZXcyKTtcbiAgICAgICAgICB2YXIgX2NvbG9yVmlldyA9IHRoaXMuY29sb3JCdWZmZXIuZ2V0VmlldyhfaW5zdGFuY2UyKTtcbiAgICAgICAgICB0b1dlYkdMQ29sb3IoY29sb3IsIG9wYWNpdHksIF9jb2xvclZpZXcpO1xuICAgICAgICAgIHZhciBfbGluZVdpZHRoQnVmZmVyID0gdGhpcy5saW5lV2lkdGhCdWZmZXIuZ2V0VmlldyhfaW5zdGFuY2UyKTtcbiAgICAgICAgICBfbGluZVdpZHRoQnVmZmVyWzBdID0gd2lkdGg7XG4gICAgICAgICAgdmFyIHBBeCA9IHBvaW50c1tpIC0gMl0sXG4gICAgICAgICAgICBwQXkgPSBwb2ludHNbaSAtIDFdO1xuICAgICAgICAgIHZhciBwQnggPSBwb2ludHNbaV0sXG4gICAgICAgICAgICBwQnkgPSBwb2ludHNbaSArIDFdO1xuICAgICAgICAgIHZhciBwQ3ggPSBwb2ludHNbaSArIDJdLFxuICAgICAgICAgICAgcEN5ID0gcG9pbnRzW2kgKyAzXTtcbiAgICAgICAgICB2YXIgcER4ID0gcG9pbnRzW2kgKyA0XSxcbiAgICAgICAgICAgIHBEeSA9IHBvaW50c1tpICsgNV07XG5cbiAgICAgICAgICAvLyBtYWtlIHBoYW50b20gcG9pbnRzIGZvciB0aGUgZmlyc3QgYW5kIGxhc3Qgc2VnbWVudHNcbiAgICAgICAgICAvLyBUT0RPIGFkZGluZyAwLjAwMSB0byBhdm9pZCBkaXZpc2lvbiBieSB6ZXJvIGluIHRoZSBzaGFkZXIgKEkgdGhpbmspLCBuZWVkIGEgYmV0dGVyIHNvbHV0aW9uXG4gICAgICAgICAgaWYgKGkgPT0gMCkge1xuICAgICAgICAgICAgcEF4ID0gMiAqIHBCeCAtIHBDeCArIDAuMDAxO1xuICAgICAgICAgICAgcEF5ID0gMiAqIHBCeSAtIHBDeSArIDAuMDAxO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoaSA9PSBwb2ludHMubGVuZ3RoIC0gNCkge1xuICAgICAgICAgICAgcER4ID0gMiAqIHBDeCAtIHBCeCArIDAuMDAxO1xuICAgICAgICAgICAgcER5ID0gMiAqIHBDeSAtIHBCeSArIDAuMDAxO1xuICAgICAgICAgIH1cbiAgICAgICAgICB2YXIgcG9pbnRBQlZpZXcgPSB0aGlzLnBvaW50QVBvaW50QkJ1ZmZlci5nZXRWaWV3KF9pbnN0YW5jZTIpO1xuICAgICAgICAgIHBvaW50QUJWaWV3WzBdID0gcEF4O1xuICAgICAgICAgIHBvaW50QUJWaWV3WzFdID0gcEF5O1xuICAgICAgICAgIHBvaW50QUJWaWV3WzJdID0gcEJ4O1xuICAgICAgICAgIHBvaW50QUJWaWV3WzNdID0gcEJ5O1xuICAgICAgICAgIHZhciBwb2ludENEVmlldyA9IHRoaXMucG9pbnRDUG9pbnREQnVmZmVyLmdldFZpZXcoX2luc3RhbmNlMik7XG4gICAgICAgICAgcG9pbnRDRFZpZXdbMF0gPSBwQ3g7XG4gICAgICAgICAgcG9pbnRDRFZpZXdbMV0gPSBwQ3k7XG4gICAgICAgICAgcG9pbnRDRFZpZXdbMl0gPSBwRHg7XG4gICAgICAgICAgcG9pbnRDRFZpZXdbM10gPSBwRHk7XG4gICAgICAgICAgdGhpcy5pbnN0YW5jZUNvdW50Kys7XG4gICAgICAgICAgaWYgKHRoaXMuaW5zdGFuY2VDb3VudCA+PSB0aGlzLm1heEluc3RhbmNlcykge1xuICAgICAgICAgICAgdGhpcy5lbmRCYXRjaCgpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJnZXRFZGdlUG9pbnRzXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGdldEVkZ2VQb2ludHMoZWRnZSkge1xuICAgICAgdmFyIHJzID0gZWRnZS5fcHJpdmF0ZS5yc2NyYXRjaDtcblxuICAgICAgLy8gaWYgYmV6aWVyIGN0cmwgcHRzIGNhbiBub3QgYmUgY2FsY3VsYXRlZCwgdGhlbiBkaWVcbiAgICAgIGlmIChycy5iYWRMaW5lIHx8IHJzLmFsbHB0cyA9PSBudWxsIHx8IGlzTmFOKHJzLmFsbHB0c1swXSkpIHtcbiAgICAgICAgLy8gaXNOYU4gaW4gY2FzZSBlZGdlIGlzIGltcG9zc2libGUgYW5kIGJyb3dzZXIgYnVncyAoZS5nLiBzYWZhcmkpXG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIHZhciBjb250cm9sUG9pbnRzID0gcnMuYWxscHRzO1xuICAgICAgaWYgKGNvbnRyb2xQb2ludHMubGVuZ3RoID09IDQpIHtcbiAgICAgICAgcmV0dXJuIGNvbnRyb2xQb2ludHM7XG4gICAgICB9XG4gICAgICB2YXIgbnVtU2VnbWVudHMgPSB0aGlzLmdldE51bVNlZ21lbnRzKGVkZ2UpO1xuICAgICAgcmV0dXJuIHRoaXMuZ2V0Q3VydmVTZWdtZW50UG9pbnRzKGNvbnRyb2xQb2ludHMsIG51bVNlZ21lbnRzKTtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwiZ2V0TnVtU2VnbWVudHNcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gZ2V0TnVtU2VnbWVudHMoZWRnZSkge1xuICAgICAgLy8gVE9ETyBOZWVkIGEgaGV1cmlzdGljIHRoYXQgZGVjaWRlcyBob3cgbWFueSBzZWdtZW50cyB0byB1c2UuIEZhY3RvcnMgdG8gY29uc2lkZXI6XG4gICAgICAvLyAtIGVkZ2Ugd2lkdGgvbGVuZ3RoXG4gICAgICAvLyAtIGVkZ2UgY3VydmF0dXJlICh0aGUgbW9yZSB0aGUgY3VydmF0dXJlLCB0aGUgbW9yZSBzZWdtZW50cylcbiAgICAgIC8vIC0gem9vbSBsZXZlbCAobW9yZSBzZWdtZW50cyB3aGVuIHpvb21lZCBpbilcbiAgICAgIC8vIC0gbnVtYmVyIG9mIHZpc2libGUgZWRnZXMgKG1vcmUgc2VnbWVudHMgd2hlbiB0aGVyZSBhcmUgZmV3ZXIgZWRnZXMpXG4gICAgICAvLyAtIHBlcmZvcm1hbmNlIChmZXdlciBzZWdtZW50cyB3aGVuIHBlcmZvcm1hbmNlIGlzIGEgY29uY2VybilcbiAgICAgIC8vIC0gdXNlciBjb25maWd1cmFibGUgb3B0aW9uKHMpXG4gICAgICAvLyBub3RlOiBudW1iZXIgb2Ygc2VnbWVudHMgc2hvdWxkIGJlIGxlc3MgdGhhbiB0aGUgbWF4IG51bWJlciBvZiBpbnN0YW5jZXNcbiAgICAgIC8vIG5vdGU6IHNlZ21lbnRzIGRvbid0IG5lZWQgdG8gYmUgZXZlbmx5IHNwYWNlZCBvdXQsIGl0IG1pZ2h0IG1ha2Ugc2Vuc2UgdG8gaGF2ZSBzaG9ydGVyIHNlZ21lbnRzIG5lYXJlciB0byB0aGUgY29udHJvbCBwb2ludHNcbiAgICAgIHZhciBudW1TZWdtZW50cyA9IDE1O1xuICAgICAgcmV0dXJuIE1hdGgubWluKE1hdGgubWF4KG51bVNlZ21lbnRzLCA1KSwgdGhpcy5tYXhJbnN0YW5jZXMpO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJnZXRDdXJ2ZVNlZ21lbnRQb2ludHNcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gZ2V0Q3VydmVTZWdtZW50UG9pbnRzKGNvbnRyb2xQb2ludHMsIHNlZ21lbnRzKSB7XG4gICAgICBpZiAoY29udHJvbFBvaW50cy5sZW5ndGggPT0gNCkge1xuICAgICAgICByZXR1cm4gY29udHJvbFBvaW50czsgLy8gc3RyYWlnaHQgbGluZVxuICAgICAgfVxuICAgICAgdmFyIGN1cnZlUG9pbnRzID0gQXJyYXkoKHNlZ21lbnRzICsgMSkgKiAyKTtcbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDw9IHNlZ21lbnRzOyBpKyspIHtcbiAgICAgICAgLy8gdGhlIGZpcnN0IGFuZCBsYXN0IHBvaW50cyBhcmUgdGhlIHNhbWUgYXMgdGhlIGZpcnN0IGFuZCBsYXN0IGNvbnRyb2wgcG9pbnRzXG4gICAgICAgIGlmIChpID09IDApIHtcbiAgICAgICAgICBjdXJ2ZVBvaW50c1swXSA9IGNvbnRyb2xQb2ludHNbMF07XG4gICAgICAgICAgY3VydmVQb2ludHNbMV0gPSBjb250cm9sUG9pbnRzWzFdO1xuICAgICAgICB9IGVsc2UgaWYgKGkgPT0gc2VnbWVudHMpIHtcbiAgICAgICAgICBjdXJ2ZVBvaW50c1tpICogMl0gPSBjb250cm9sUG9pbnRzW2NvbnRyb2xQb2ludHMubGVuZ3RoIC0gMl07XG4gICAgICAgICAgY3VydmVQb2ludHNbaSAqIDIgKyAxXSA9IGNvbnRyb2xQb2ludHNbY29udHJvbFBvaW50cy5sZW5ndGggLSAxXTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB2YXIgdCA9IGkgLyBzZWdtZW50czsgLy8gc2VnbWVudHMgaGF2ZSBlcXVhbCBsZW5ndGgsIGl0cyBub3Qgc3RyaWN0bHkgbmVjZXNzYXJ5IHRvIGRvIGl0IHRoaXMgd2F5XG4gICAgICAgICAgLy8gcGFzcyBpbiBjdXJ2ZVBvaW50cyB0byBzZXQgdGhlIHZhbHVlcyBpbiB0aGUgYXJyYXkgZGlyZWN0bHlcbiAgICAgICAgICB0aGlzLnNldEN1cnZlUG9pbnQoY29udHJvbFBvaW50cywgdCwgY3VydmVQb2ludHMsIGkgKiAyKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIGN1cnZlUG9pbnRzO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJzZXRDdXJ2ZVBvaW50XCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIHNldEN1cnZlUG9pbnQocG9pbnRzLCB0LCBjdXJ2ZVBvaW50cywgY3BpKSB7XG4gICAgICBpZiAocG9pbnRzLmxlbmd0aCA8PSAyKSB7XG4gICAgICAgIGN1cnZlUG9pbnRzW2NwaV0gPSBwb2ludHNbMF07XG4gICAgICAgIGN1cnZlUG9pbnRzW2NwaSArIDFdID0gcG9pbnRzWzFdO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdmFyIG5ld3BvaW50cyA9IEFycmF5KHBvaW50cy5sZW5ndGggLSAyKTtcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBuZXdwb2ludHMubGVuZ3RoOyBpICs9IDIpIHtcbiAgICAgICAgICB2YXIgeCA9ICgxIC0gdCkgKiBwb2ludHNbaV0gKyB0ICogcG9pbnRzW2kgKyAyXTtcbiAgICAgICAgICB2YXIgeSA9ICgxIC0gdCkgKiBwb2ludHNbaSArIDFdICsgdCAqIHBvaW50c1tpICsgM107XG4gICAgICAgICAgbmV3cG9pbnRzW2ldID0geDtcbiAgICAgICAgICBuZXdwb2ludHNbaSArIDFdID0geTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcy5zZXRDdXJ2ZVBvaW50KG5ld3BvaW50cywgdCwgY3VydmVQb2ludHMsIGNwaSk7XG4gICAgICB9XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcImVuZEJhdGNoXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGVuZEJhdGNoKCkge1xuICAgICAgdmFyIGdsID0gdGhpcy5nbCxcbiAgICAgICAgdmFvID0gdGhpcy52YW8sXG4gICAgICAgIHZlcnRleENvdW50ID0gdGhpcy52ZXJ0ZXhDb3VudCxcbiAgICAgICAgY291bnQgPSB0aGlzLmluc3RhbmNlQ291bnQ7XG4gICAgICBpZiAoY291bnQgPT09IDApIHJldHVybjtcbiAgICAgIHZhciBwcm9ncmFtID0gdGhpcy5yZW5kZXJUYXJnZXQucGlja2luZyA/IHRoaXMucGlja2luZ1Byb2dyYW0gOiB0aGlzLnByb2dyYW07XG4gICAgICBnbC51c2VQcm9ncmFtKHByb2dyYW0pO1xuICAgICAgZ2wuYmluZFZlcnRleEFycmF5KHZhbyk7XG5cbiAgICAgIC8vIGJ1ZmZlciB0aGUgYXR0cmlidXRlIGRhdGFcbiAgICAgIHZhciBfaXRlcmF0b3IgPSBfY3JlYXRlRm9yT2ZJdGVyYXRvckhlbHBlcih0aGlzLmJ1ZmZlcnMpLFxuICAgICAgICBfc3RlcDtcbiAgICAgIHRyeSB7XG4gICAgICAgIGZvciAoX2l0ZXJhdG9yLnMoKTsgIShfc3RlcCA9IF9pdGVyYXRvci5uKCkpLmRvbmU7KSB7XG4gICAgICAgICAgdmFyIGJ1ZmZlciA9IF9zdGVwLnZhbHVlO1xuICAgICAgICAgIGJ1ZmZlci5idWZmZXJTdWJEYXRhKGNvdW50KTtcbiAgICAgICAgfVxuICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgIF9pdGVyYXRvci5lKGVycik7XG4gICAgICB9IGZpbmFsbHkge1xuICAgICAgICBfaXRlcmF0b3IuZigpO1xuICAgICAgfVxuICAgICAgdmFyIGF0bGFzZXMgPSB0aGlzLmF0bGFzTWFuYWdlci5nZXRBdGxhc2VzKCk7XG4gICAgICAvLyBtdXN0IGJ1ZmZlciBiZWZvcmUgYWN0aXZhdGluZyB0ZXh0dXJlIHVuaXRzXG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGF0bGFzZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgYXRsYXNlc1tpXS5idWZmZXJJZk5lZWRlZChnbCk7XG4gICAgICB9XG4gICAgICAvLyBBY3RpdmF0ZSBhbGwgdGhlIHRleHR1cmUgdW5pdHMgdGhhdCB3ZSBuZWVkXG4gICAgICBmb3IgKHZhciBfaTIgPSAwOyBfaTIgPCBhdGxhc2VzLmxlbmd0aDsgX2kyKyspIHtcbiAgICAgICAgZ2wuYWN0aXZlVGV4dHVyZShnbC5URVhUVVJFMCArIF9pMik7XG4gICAgICAgIGdsLmJpbmRUZXh0dXJlKGdsLlRFWFRVUkVfMkQsIGF0bGFzZXNbX2kyXS50ZXh0dXJlKTtcbiAgICAgICAgZ2wudW5pZm9ybTFpKHByb2dyYW0udVRleHR1cmVzW19pMl0sIF9pMik7XG4gICAgICB9XG5cbiAgICAgIC8vIFNldCB0aGUgdW5pZm9ybXNcbiAgICAgIGdsLnVuaWZvcm1NYXRyaXgzZnYocHJvZ3JhbS51UGFuWm9vbU1hdHJpeCwgZmFsc2UsIHRoaXMucGFuWm9vbU1hdHJpeCk7XG4gICAgICBnbC51bmlmb3JtMWkocHJvZ3JhbS51QXRsYXNTaXplLCB0aGlzLmF0bGFzTWFuYWdlci5nZXRBdGxhc1NpemUoKSk7XG4gICAgICAvLyBzZXQgYmFja2dyb3VuZCBjb2xvciwgbmVlZGVkIGZvciBlZGdlIGFycm93IGNvbG9yIGJsZW5kaW5nXG4gICAgICB2YXIgd2ViZ2xCZ0NvbG9yID0gdG9XZWJHTENvbG9yKHRoaXMuYmdDb2xvciwgMSk7XG4gICAgICBnbC51bmlmb3JtNGZ2KHByb2dyYW0udUJHQ29sb3IsIHdlYmdsQmdDb2xvcik7XG5cbiAgICAgIC8vIGRyYXchXG4gICAgICBnbC5kcmF3QXJyYXlzSW5zdGFuY2VkKGdsLlRSSUFOR0xFUywgMCwgdmVydGV4Q291bnQsIGNvdW50KTtcbiAgICAgIGdsLmJpbmRWZXJ0ZXhBcnJheShudWxsKTtcbiAgICAgIGdsLmJpbmRUZXh0dXJlKGdsLlRFWFRVUkVfMkQsIG51bGwpOyAvLyBUT0RPIGlzIHRoaXMgcmlnaHQgd2hlbiBoYXZpbmcgbXVsdGlwbGUgdGV4dHVyZSB1bml0cz9cblxuICAgICAgaWYgKHRoaXMuZGVidWcpIHtcbiAgICAgICAgdGhpcy5iYXRjaERlYnVnSW5mby5wdXNoKHtcbiAgICAgICAgICBjb3VudDogY291bnQsXG4gICAgICAgICAgLy8gaW5zdGFuY2UgY291bnRcbiAgICAgICAgICBhdGxhc0NvdW50OiBhdGxhc2VzLmxlbmd0aFxuICAgICAgICB9KTtcbiAgICAgIH1cblxuICAgICAgLy8gc3RhcnQgdGhlIG5leHQgYmF0Y2gsIGV2ZW4gaWYgbm90IG5lZWRlZFxuICAgICAgdGhpcy5zdGFydEJhdGNoKCk7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcImdldERlYnVnSW5mb1wiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBnZXREZWJ1Z0luZm8oKSB7XG4gICAgICB2YXIgYXRsYXNJbmZvID0gdGhpcy5hdGxhc01hbmFnZXIuZ2V0RGVidWdJbmZvKCk7XG4gICAgICB2YXIgdG90YWxBdGxhc2VzID0gYXRsYXNJbmZvLnJlZHVjZShmdW5jdGlvbiAoY291bnQsIGluZm8pIHtcbiAgICAgICAgcmV0dXJuIGNvdW50ICsgaW5mby5hdGxhc0NvdW50O1xuICAgICAgfSwgMCk7XG4gICAgICB2YXIgYmF0Y2hJbmZvID0gdGhpcy5iYXRjaERlYnVnSW5mbztcbiAgICAgIHZhciB0b3RhbEluc3RhbmNlcyA9IGJhdGNoSW5mby5yZWR1Y2UoZnVuY3Rpb24gKGNvdW50LCBpbmZvKSB7XG4gICAgICAgIHJldHVybiBjb3VudCArIGluZm8uY291bnQ7XG4gICAgICB9LCAwKTtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGF0bGFzSW5mbzogYXRsYXNJbmZvLFxuICAgICAgICB0b3RhbEF0bGFzZXM6IHRvdGFsQXRsYXNlcyxcbiAgICAgICAgd3JhcHBlZENvdW50OiB0aGlzLndyYXBwZWRDb3VudCxcbiAgICAgICAgcmVjdGFuZ2xlQ291bnQ6IHRoaXMucmVjdGFuZ2xlQ291bnQsXG4gICAgICAgIGJhdGNoQ291bnQ6IGJhdGNoSW5mby5sZW5ndGgsXG4gICAgICAgIGJhdGNoSW5mbzogYmF0Y2hJbmZvLFxuICAgICAgICB0b3RhbEluc3RhbmNlczogdG90YWxJbnN0YW5jZXNcbiAgICAgIH07XG4gICAgfVxuICB9XSk7XG59KCk7XG5cbmZ1bmN0aW9uIGZpbGxTdHlsZShjb2xvciwgb3BhY2l0eSkge1xuICByZXR1cm4gXCJyZ2JhKFwiLmNvbmNhdChjb2xvclswXSwgXCIsIFwiKS5jb25jYXQoY29sb3JbMV0sIFwiLCBcIikuY29uY2F0KGNvbG9yWzJdLCBcIiwgXCIpLmNvbmNhdChvcGFjaXR5LCBcIilcIik7XG59XG52YXIgT3ZlcmxheVVuZGVybGF5UmVuZGVyZXIgPSAvKiNfX1BVUkVfXyovZnVuY3Rpb24gKCkge1xuICBmdW5jdGlvbiBPdmVybGF5VW5kZXJsYXlSZW5kZXJlcihyKSB7XG4gICAgX2NsYXNzQ2FsbENoZWNrKHRoaXMsIE92ZXJsYXlVbmRlcmxheVJlbmRlcmVyKTtcbiAgICB0aGlzLnIgPSByO1xuICB9XG4gIHJldHVybiBfY3JlYXRlQ2xhc3MoT3ZlcmxheVVuZGVybGF5UmVuZGVyZXIsIFt7XG4gICAga2V5OiBcImdldFN0eWxlS2V5XCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGdldFN0eWxlS2V5KHR5cGUsIG5vZGUpIHtcbiAgICAgIHZhciBfdGhpcyRnZXRTdHlsZSA9IHRoaXMuZ2V0U3R5bGUodHlwZSwgbm9kZSksXG4gICAgICAgIHNoYXBlID0gX3RoaXMkZ2V0U3R5bGUuc2hhcGUsXG4gICAgICAgIG9wYWNpdHkgPSBfdGhpcyRnZXRTdHlsZS5vcGFjaXR5LFxuICAgICAgICBjb2xvciA9IF90aGlzJGdldFN0eWxlLmNvbG9yO1xuICAgICAgaWYgKCFzaGFwZSkgcmV0dXJuIG51bGw7XG4gICAgICB2YXIgdyA9IG5vZGUud2lkdGgoKTtcbiAgICAgIHZhciBoID0gbm9kZS5oZWlnaHQoKTtcbiAgICAgIHZhciBjID0gZmlsbFN0eWxlKGNvbG9yLCBvcGFjaXR5KTtcbiAgICAgIHJldHVybiBoYXNoU3RyaW5nKFwiXCIuY29uY2F0KHNoYXBlLCBcIi1cIikuY29uY2F0KHcsIFwiLVwiKS5jb25jYXQoaCwgXCItXCIpLmNvbmNhdChjKSk7IC8vIFRPRE8gaGFjaywgbm90IHZlcnkgZWZmaWNpZW50XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcImlzVmlzaWJsZVwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBpc1Zpc2libGUodHlwZSwgbm9kZSkge1xuICAgICAgdmFyIG9wYWNpdHkgPSBub2RlLnBzdHlsZShcIlwiLmNvbmNhdCh0eXBlLCBcIi1vcGFjaXR5XCIpKS52YWx1ZTtcbiAgICAgIHJldHVybiBvcGFjaXR5ID4gMDtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwiZ2V0U3R5bGVcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gZ2V0U3R5bGUodHlwZSwgbm9kZSkge1xuICAgICAgdmFyIG9wYWNpdHkgPSBub2RlLnBzdHlsZShcIlwiLmNvbmNhdCh0eXBlLCBcIi1vcGFjaXR5XCIpKS52YWx1ZTtcbiAgICAgIHZhciBjb2xvciA9IG5vZGUucHN0eWxlKFwiXCIuY29uY2F0KHR5cGUsIFwiLWNvbG9yXCIpKS52YWx1ZTtcbiAgICAgIHZhciBzaGFwZSA9IG5vZGUucHN0eWxlKFwiXCIuY29uY2F0KHR5cGUsIFwiLXNoYXBlXCIpKS52YWx1ZTtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIG9wYWNpdHk6IG9wYWNpdHksXG4gICAgICAgIGNvbG9yOiBjb2xvcixcbiAgICAgICAgc2hhcGU6IHNoYXBlXG4gICAgICB9OyAvLyBUT0RPIG5lZWQgdG8gYWRkIHJhZGl1cyBhdCBzb21lIHBvaW50XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcImdldFBhZGRpbmdcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gZ2V0UGFkZGluZyh0eXBlLCBub2RlKSB7XG4gICAgICByZXR1cm4gbm9kZS5wc3R5bGUoXCJcIi5jb25jYXQodHlwZSwgXCItcGFkZGluZ1wiKSkucGZWYWx1ZTtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwiZHJhd1wiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBkcmF3KHR5cGUsIGNvbnRleHQsIG5vZGUsIGJiKSB7XG4gICAgICBpZiAoIXRoaXMuaXNWaXNpYmxlKHR5cGUsIG5vZGUpKSByZXR1cm47XG4gICAgICB2YXIgciA9IHRoaXMucjtcbiAgICAgIHZhciB3ID0gYmIudztcbiAgICAgIHZhciBoID0gYmIuaDtcbiAgICAgIHZhciB4ID0gdyAvIDI7XG4gICAgICB2YXIgeSA9IGggLyAyO1xuICAgICAgdmFyIF90aGlzJGdldFN0eWxlMiA9IHRoaXMuZ2V0U3R5bGUodHlwZSwgbm9kZSksXG4gICAgICAgIHNoYXBlID0gX3RoaXMkZ2V0U3R5bGUyLnNoYXBlLFxuICAgICAgICBjb2xvciA9IF90aGlzJGdldFN0eWxlMi5jb2xvcixcbiAgICAgICAgb3BhY2l0eSA9IF90aGlzJGdldFN0eWxlMi5vcGFjaXR5O1xuICAgICAgY29udGV4dC5zYXZlKCk7XG4gICAgICBjb250ZXh0LmZpbGxTdHlsZSA9IGZpbGxTdHlsZShjb2xvciwgb3BhY2l0eSk7XG4gICAgICBpZiAoc2hhcGUgPT09ICdyb3VuZC1yZWN0YW5nbGUnIHx8IHNoYXBlID09PSAncm91bmRyZWN0YW5nbGUnKSB7XG4gICAgICAgIHIuZHJhd1JvdW5kUmVjdGFuZ2xlUGF0aChjb250ZXh0LCB4LCB5LCB3LCBoLCAnYXV0bycpO1xuICAgICAgfSBlbHNlIGlmIChzaGFwZSA9PT0gJ2VsbGlwc2UnKSB7XG4gICAgICAgIHIuZHJhd0VsbGlwc2VQYXRoKGNvbnRleHQsIHgsIHksIHcsIGgpO1xuICAgICAgfVxuICAgICAgY29udGV4dC5maWxsKCk7XG4gICAgICBjb250ZXh0LnJlc3RvcmUoKTtcbiAgICB9XG4gIH1dKTtcbn0oKTtcblxudmFyIENScCQ0ID0ge307XG5DUnAkNC5pbml0V2ViZ2wgPSBmdW5jdGlvbiAob3B0cywgZm5zKSB7XG4gIHZhciByID0gdGhpcztcbiAgdmFyIGdsID0gci5kYXRhLmNvbnRleHRzW3IuV0VCR0xdO1xuICBvcHRzLmJnQ29sb3IgPSBnZXRCR0NvbG9yKHIpO1xuICBvcHRzLndlYmdsVGV4U2l6ZSA9IE1hdGgubWluKG9wdHMud2ViZ2xUZXhTaXplLCBnbC5nZXRQYXJhbWV0ZXIoZ2wuTUFYX1RFWFRVUkVfU0laRSkpO1xuICBvcHRzLndlYmdsVGV4Um93cyA9IE1hdGgubWluKG9wdHMud2ViZ2xUZXhSb3dzLCA1NCk7XG4gIG9wdHMud2ViZ2xUZXhSb3dzTm9kZXMgPSBNYXRoLm1pbihvcHRzLndlYmdsVGV4Um93c05vZGVzLCA1NCk7XG4gIG9wdHMud2ViZ2xCYXRjaFNpemUgPSBNYXRoLm1pbihvcHRzLndlYmdsQmF0Y2hTaXplLCAxNjM4NCk7XG4gIG9wdHMud2ViZ2xUZXhQZXJCYXRjaCA9IE1hdGgubWluKG9wdHMud2ViZ2xUZXhQZXJCYXRjaCwgZ2wuZ2V0UGFyYW1ldGVyKGdsLk1BWF9URVhUVVJFX0lNQUdFX1VOSVRTKSk7XG4gIHIud2ViZ2xEZWJ1ZyA9IG9wdHMud2ViZ2xEZWJ1ZztcbiAgci53ZWJnbERlYnVnU2hvd0F0bGFzZXMgPSBvcHRzLndlYmdsRGVidWdTaG93QXRsYXNlcztcblxuICAvLyBmb3Igb2Zmc2NyZWVuIHJlbmRlcmluZyB3aGVuIHJlbmRlciB0YXJnZXQgaXMgUElDS0lOR1xuICByLnBpY2tpbmdGcmFtZUJ1ZmZlciA9IGNyZWF0ZVBpY2tpbmdGcmFtZUJ1ZmZlcihnbCk7XG4gIHIucGlja2luZ0ZyYW1lQnVmZmVyLm5lZWRzRHJhdyA9IHRydWU7XG4gIHZhciBnZXRMYWJlbFJvdGF0aW9uID0gZnVuY3Rpb24gZ2V0TGFiZWxSb3RhdGlvbihwcm9wKSB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uIChlbGUpIHtcbiAgICAgIHJldHVybiByLmdldFRleHRBbmdsZShlbGUsIHByb3ApO1xuICAgIH07XG4gIH07XG4gIHZhciBpc0xhYmVsVmlzaWJsZSA9IGZ1bmN0aW9uIGlzTGFiZWxWaXNpYmxlKHByb3ApIHtcbiAgICByZXR1cm4gZnVuY3Rpb24gKGVsZSkge1xuICAgICAgdmFyIGxhYmVsID0gZWxlLnBzdHlsZShwcm9wKTtcbiAgICAgIHJldHVybiBsYWJlbCAmJiBsYWJlbC52YWx1ZTtcbiAgICB9O1xuICB9O1xuICByLmRyYXdpbmcgPSBuZXcgRWxlbWVudERyYXdpbmdXZWJHTChyLCBnbCwgb3B0cyk7XG4gIHZhciBvdXIgPSBuZXcgT3ZlcmxheVVuZGVybGF5UmVuZGVyZXIocik7XG4gIHIuZHJhd2luZy5hZGRBdGxhc0NvbGxlY3Rpb24oJ25vZGUnLCBhdGxhc0NvbGxlY3Rpb25EZWZhdWx0cyh7XG4gICAgdGV4Um93czogb3B0cy53ZWJnbFRleFJvd3NOb2Rlc1xuICB9KSk7XG4gIHIuZHJhd2luZy5hZGRBdGxhc0NvbGxlY3Rpb24oJ2xhYmVsJywgYXRsYXNDb2xsZWN0aW9uRGVmYXVsdHMoe1xuICAgIHRleFJvd3M6IG9wdHMud2ViZ2xUZXhSb3dzXG4gIH0pKTtcbiAgci5kcmF3aW5nLmFkZEF0bGFzUmVuZGVyVHlwZSgnbm9kZS1ib2R5JywgcmVuZGVyRGVmYXVsdHMoe1xuICAgIGNvbGxlY3Rpb246ICdub2RlJyxcbiAgICBnZXRLZXk6IGZucy5nZXRTdHlsZUtleSxcbiAgICBnZXRCb3VuZGluZ0JveDogZm5zLmdldEVsZW1lbnRCb3gsXG4gICAgZHJhd0VsZW1lbnQ6IGZucy5kcmF3RWxlbWVudFxuICB9KSk7XG4gIHIuZHJhd2luZy5hZGRBdGxhc1JlbmRlclR5cGUoJ2xhYmVsJywgcmVuZGVyRGVmYXVsdHMoe1xuICAgIC8vIG5vZGUgbGFiZWwgb3IgZWRnZSBtaWQgbGFiZWxcbiAgICBjb2xsZWN0aW9uOiAnbGFiZWwnLFxuICAgIGdldEtleTogZm5zLmdldExhYmVsS2V5LFxuICAgIGdldEJvdW5kaW5nQm94OiBmbnMuZ2V0TGFiZWxCb3gsXG4gICAgZHJhd0VsZW1lbnQ6IGZucy5kcmF3TGFiZWwsXG4gICAgZ2V0Um90YXRpb246IGdldExhYmVsUm90YXRpb24obnVsbCksXG4gICAgZ2V0Um90YXRpb25Qb2ludDogZm5zLmdldExhYmVsUm90YXRpb25Qb2ludCxcbiAgICBnZXRSb3RhdGlvbk9mZnNldDogZm5zLmdldExhYmVsUm90YXRpb25PZmZzZXQsXG4gICAgaXNWaXNpYmxlOiBpc0xhYmVsVmlzaWJsZSgnbGFiZWwnKVxuICB9KSk7XG4gIHIuZHJhd2luZy5hZGRBdGxhc1JlbmRlclR5cGUoJ25vZGUtb3ZlcmxheScsIHJlbmRlckRlZmF1bHRzKHtcbiAgICBjb2xsZWN0aW9uOiAnbm9kZScsXG4gICAgZ2V0Qm91bmRpbmdCb3g6IGZucy5nZXRFbGVtZW50Qm94LFxuICAgIGdldEtleTogZnVuY3Rpb24gZ2V0S2V5KGVsZSkge1xuICAgICAgcmV0dXJuIG91ci5nZXRTdHlsZUtleSgnb3ZlcmxheScsIGVsZSk7XG4gICAgfSxcbiAgICBkcmF3RWxlbWVudDogZnVuY3Rpb24gZHJhd0VsZW1lbnQoY3R4LCBlbGUsIGJiKSB7XG4gICAgICByZXR1cm4gb3VyLmRyYXcoJ292ZXJsYXknLCBjdHgsIGVsZSwgYmIpO1xuICAgIH0sXG4gICAgaXNWaXNpYmxlOiBmdW5jdGlvbiBpc1Zpc2libGUoZWxlKSB7XG4gICAgICByZXR1cm4gb3VyLmlzVmlzaWJsZSgnb3ZlcmxheScsIGVsZSk7XG4gICAgfSxcbiAgICBnZXRQYWRkaW5nOiBmdW5jdGlvbiBnZXRQYWRkaW5nKGVsZSkge1xuICAgICAgcmV0dXJuIG91ci5nZXRQYWRkaW5nKCdvdmVybGF5JywgZWxlKTtcbiAgICB9XG4gIH0pKTtcbiAgci5kcmF3aW5nLmFkZEF0bGFzUmVuZGVyVHlwZSgnbm9kZS11bmRlcmxheScsIHJlbmRlckRlZmF1bHRzKHtcbiAgICBjb2xsZWN0aW9uOiAnbm9kZScsXG4gICAgZ2V0Qm91bmRpbmdCb3g6IGZucy5nZXRFbGVtZW50Qm94LFxuICAgIGdldEtleTogZnVuY3Rpb24gZ2V0S2V5KGVsZSkge1xuICAgICAgcmV0dXJuIG91ci5nZXRTdHlsZUtleSgndW5kZXJsYXknLCBlbGUpO1xuICAgIH0sXG4gICAgZHJhd0VsZW1lbnQ6IGZ1bmN0aW9uIGRyYXdFbGVtZW50KGN0eCwgZWxlLCBiYikge1xuICAgICAgcmV0dXJuIG91ci5kcmF3KCd1bmRlcmxheScsIGN0eCwgZWxlLCBiYik7XG4gICAgfSxcbiAgICBpc1Zpc2libGU6IGZ1bmN0aW9uIGlzVmlzaWJsZShlbGUpIHtcbiAgICAgIHJldHVybiBvdXIuaXNWaXNpYmxlKCd1bmRlcmxheScsIGVsZSk7XG4gICAgfSxcbiAgICBnZXRQYWRkaW5nOiBmdW5jdGlvbiBnZXRQYWRkaW5nKGVsZSkge1xuICAgICAgcmV0dXJuIG91ci5nZXRQYWRkaW5nKCd1bmRlcmxheScsIGVsZSk7XG4gICAgfVxuICB9KSk7XG4gIHIuZHJhd2luZy5hZGRBdGxhc1JlbmRlclR5cGUoJ2VkZ2Utc291cmNlLWxhYmVsJywgcmVuZGVyRGVmYXVsdHMoe1xuICAgIGNvbGxlY3Rpb246ICdsYWJlbCcsXG4gICAgZ2V0S2V5OiBmbnMuZ2V0U291cmNlTGFiZWxLZXksXG4gICAgZ2V0Qm91bmRpbmdCb3g6IGZucy5nZXRTb3VyY2VMYWJlbEJveCxcbiAgICBkcmF3RWxlbWVudDogZm5zLmRyYXdTb3VyY2VMYWJlbCxcbiAgICBnZXRSb3RhdGlvbjogZ2V0TGFiZWxSb3RhdGlvbignc291cmNlJyksXG4gICAgZ2V0Um90YXRpb25Qb2ludDogZm5zLmdldFNvdXJjZUxhYmVsUm90YXRpb25Qb2ludCxcbiAgICBnZXRSb3RhdGlvbk9mZnNldDogZm5zLmdldFNvdXJjZUxhYmVsUm90YXRpb25PZmZzZXQsXG4gICAgaXNWaXNpYmxlOiBpc0xhYmVsVmlzaWJsZSgnc291cmNlLWxhYmVsJylcbiAgfSkpO1xuICByLmRyYXdpbmcuYWRkQXRsYXNSZW5kZXJUeXBlKCdlZGdlLXRhcmdldC1sYWJlbCcsIHJlbmRlckRlZmF1bHRzKHtcbiAgICBjb2xsZWN0aW9uOiAnbGFiZWwnLFxuICAgIGdldEtleTogZm5zLmdldFRhcmdldExhYmVsS2V5LFxuICAgIGdldEJvdW5kaW5nQm94OiBmbnMuZ2V0VGFyZ2V0TGFiZWxCb3gsXG4gICAgZHJhd0VsZW1lbnQ6IGZucy5kcmF3VGFyZ2V0TGFiZWwsXG4gICAgZ2V0Um90YXRpb246IGdldExhYmVsUm90YXRpb24oJ3RhcmdldCcpLFxuICAgIGdldFJvdGF0aW9uUG9pbnQ6IGZucy5nZXRUYXJnZXRMYWJlbFJvdGF0aW9uUG9pbnQsXG4gICAgZ2V0Um90YXRpb25PZmZzZXQ6IGZucy5nZXRUYXJnZXRMYWJlbFJvdGF0aW9uT2Zmc2V0LFxuICAgIGlzVmlzaWJsZTogaXNMYWJlbFZpc2libGUoJ3RhcmdldC1sYWJlbCcpXG4gIH0pKTtcblxuICAvLyB0aGlzIGlzIGEgdmVyeSBzaW1wbGlzdGljIHdheSBvZiB0cmlnZ2VyaW5nIGdhcmJhZ2UgY29sbGVjdGlvblxuICB2YXIgc2V0R0NGbGFnID0gZGVib3VuY2UoZnVuY3Rpb24gKCkge1xuICAgIGNvbnNvbGUubG9nKCdnYXJiYWdlIGNvbGxlY3QgZmxhZyBzZXQnKTtcbiAgICByLmRhdGEuZ2MgPSB0cnVlO1xuICB9LCAxMDAwMCk7XG4gIHIub25VcGRhdGVFbGVDYWxjcyhmdW5jdGlvbiAod2lsbERyYXcsIGVsZXMpIHtcbiAgICB2YXIgZ2NOZWVkZWQgPSBmYWxzZTtcbiAgICBpZiAoZWxlcyAmJiBlbGVzLmxlbmd0aCA+IDApIHtcbiAgICAgIGdjTmVlZGVkIHw9IHIuZHJhd2luZy5pbnZhbGlkYXRlKGVsZXMpO1xuICAgIH1cbiAgICBpZiAoZ2NOZWVkZWQpIHtcbiAgICAgIHNldEdDRmxhZygpO1xuICAgIH1cbiAgfSk7XG5cbiAgLy8gXCJPdmVycmlkZVwiIGNlcnRhaW4gZnVuY3Rpb25zIGluIGNhbnZhcyBhbmQgYmFzZSByZW5kZXJlclxuICBvdmVycmlkZUNhbnZhc1JlbmRlcmVyRnVuY3Rpb25zKHIpO1xufTtcbmZ1bmN0aW9uIGdldEJHQ29sb3Iocikge1xuICB2YXIgY29udGFpbmVyID0gci5jeS5jb250YWluZXIoKTtcbiAgdmFyIGNzc0NvbG9yID0gY29udGFpbmVyICYmIGNvbnRhaW5lci5zdHlsZSAmJiBjb250YWluZXIuc3R5bGUuYmFja2dyb3VuZENvbG9yIHx8ICd3aGl0ZSc7XG4gIHJldHVybiBjb2xvcjJ0dXBsZShjc3NDb2xvcik7XG59XG5cbi8qKlxuICogUGx1ZyBpbnRvIHRoZSBjYW52YXMgcmVuZGVyZXIgdG8gdXNlIHdlYmdsIGZvciByZW5kZXJpbmcuXG4gKi9cbmZ1bmN0aW9uIG92ZXJyaWRlQ2FudmFzUmVuZGVyZXJGdW5jdGlvbnMocikge1xuICB7XG4gICAgLy8gT3ZlcnJpZGUgdGhlIHJlbmRlciBmdW5jdGlvbiB0byBjYWxsIHRoZSB3ZWJnbCByZW5kZXIgZnVuY3Rpb24gaWYgdGhlIHpvb20gbGV2ZWwgaXMgYXBwcm9wcmlhdGVcbiAgICB2YXIgcmVuZGVyQ2FudmFzID0gci5yZW5kZXI7XG4gICAgci5yZW5kZXIgPSBmdW5jdGlvbiAob3B0aW9ucykge1xuICAgICAgb3B0aW9ucyA9IG9wdGlvbnMgfHwge307XG4gICAgICB2YXIgY3kgPSByLmN5O1xuICAgICAgaWYgKHIud2ViZ2wpIHtcbiAgICAgICAgLy8gaWYgdGhlIHpvb20gbGV2ZWwgaXMgZ3JlYXRlciB0aGFuIHRoZSBtYXggem9vbSBsZXZlbCwgdGhlbiBkaXNhYmxlIHdlYmdsXG4gICAgICAgIGlmIChjeS56b29tKCkgPiBtYXhab29tJDEpIHtcbiAgICAgICAgICBjbGVhcldlYmdsKHIpO1xuICAgICAgICAgIHJlbmRlckNhbnZhcy5jYWxsKHIsIG9wdGlvbnMpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGNsZWFyQ2FudmFzKHIpO1xuICAgICAgICAgIHJlbmRlcldlYmdsKHIsIG9wdGlvbnMsIFJFTkRFUl9UQVJHRVQuU0NSRUVOKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH07XG4gIH1cbiAge1xuICAgIC8vIE92ZXJyaWRlIHRoZSBtYXRjaENhbnZhc1NpemUgZnVuY3Rpb24gdG8gdXBkYXRlIHRoZSBwaWNraW5nIGZyYW1lIGJ1ZmZlciBzaXplXG4gICAgdmFyIGJhc2VGdW5jID0gci5tYXRjaENhbnZhc1NpemU7XG4gICAgci5tYXRjaENhbnZhc1NpemUgPSBmdW5jdGlvbiAoY29udGFpbmVyKSB7XG4gICAgICBiYXNlRnVuYy5jYWxsKHIsIGNvbnRhaW5lcik7XG4gICAgICByLnBpY2tpbmdGcmFtZUJ1ZmZlci5zZXRGcmFtZWJ1ZmZlckF0dGFjaG1lbnRTaXplcyhyLmNhbnZhc1dpZHRoLCByLmNhbnZhc0hlaWdodCk7XG4gICAgICByLnBpY2tpbmdGcmFtZUJ1ZmZlci5uZWVkc0RyYXcgPSB0cnVlO1xuICAgIH07XG4gIH1cbiAge1xuICAgIC8vIE92ZXJyaWRlIGZ1bmN0aW9uIHRvIGNhbGwgdGhlIHdlYmdsIHZlcnNpb25cbiAgICByLmZpbmROZWFyZXN0RWxlbWVudHMgPSBmdW5jdGlvbiAoeCwgeSwgaW50ZXJhY3RpdmVFbGVtZW50c09ubHksIGlzVG91Y2gpIHtcbiAgICAgIC8vIHRoZSBjYW52YXMgdmVyc2lvbiBvZiB0aGlzIGZ1bmN0aW9uIGlzIHZlcnkgc2xvdyBvbiBsYXJnZSBncmFwaHNcbiAgICAgIHJldHVybiBmaW5kTmVhcmVzdEVsZW1lbnRzV2ViZ2wociwgeCwgeSk7XG4gICAgfTtcbiAgfVxuXG4gIC8vIERvbid0IG92ZXJyaWRlIHRoZSBzZWxjdGlvbiBib3ggcGlja2luZywgaXRzIG5vdCBhY2N1cmF0ZSBlbm91Z2ggd2l0aCB3ZWJnbFxuICAvLyB7IC8vIE92ZXJyaWRlIGZ1bmN0aW9uIHRvIGNhbGwgdGhlIHdlYmdsIHZlcnNpb25cbiAgLy8gICByLmdldEFsbEluQm94ID0gZnVuY3Rpb24oeDEsIHkxLCB4MiwgeTIpIHtcbiAgLy8gICAgIHJldHVybiBnZXRBbGxJbkJveFdlYmdsKHIsIHgxLCB5MSwgeDIsIHkyKTtcbiAgLy8gICB9XG4gIC8vIH1cblxuICB7XG4gICAgLy8gbmVlZCB0byBrbm93IHdoZW4gdGhlIGNhY2hlZCBlbGVtZW50cyBoYXZlIGNoYW5nZWQgc28gd2UgY2FuIGludmFsaWRhdGUgb3VyIGNhY2hlc1xuICAgIHZhciBfYmFzZUZ1bmMgPSByLmludmFsaWRhdGVDYWNoZWRaU29ydGVkRWxlcztcbiAgICByLmludmFsaWRhdGVDYWNoZWRaU29ydGVkRWxlcyA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIF9iYXNlRnVuYy5jYWxsKHIpO1xuICAgICAgci5waWNraW5nRnJhbWVCdWZmZXIubmVlZHNEcmF3ID0gdHJ1ZTtcbiAgICB9O1xuICB9XG4gIHtcbiAgICAvLyBuZWVkIHRvIGtub3cgd2hlbiB0aGUgY2FjaGVkIGVsZW1lbnRzIGhhdmUgY2hhbmdlZCBzbyB3ZSBjYW4gaW52YWxpZGF0ZSBvdXIgY2FjaGVzXG4gICAgdmFyIF9iYXNlRnVuYzIgPSByLm5vdGlmeTtcbiAgICByLm5vdGlmeSA9IGZ1bmN0aW9uIChldmVudE5hbWUsIGVsZXMpIHtcbiAgICAgIF9iYXNlRnVuYzIuY2FsbChyLCBldmVudE5hbWUsIGVsZXMpO1xuICAgICAgaWYgKGV2ZW50TmFtZSA9PT0gJ3ZpZXdwb3J0JyB8fCBldmVudE5hbWUgPT09ICdib3VuZHMnKSB7XG4gICAgICAgIHIucGlja2luZ0ZyYW1lQnVmZmVyLm5lZWRzRHJhdyA9IHRydWU7XG4gICAgICB9IGVsc2UgaWYgKGV2ZW50TmFtZSA9PT0gJ2JhY2tncm91bmQnKSB7XG4gICAgICAgIC8vIGJhY2tncm91bmQgaW1hZ2UgZmluaXNoZWQgbG9hZGluZywgbmVlZCB0byByZWRyYXdcbiAgICAgICAgci5kcmF3aW5nLmludmFsaWRhdGUoZWxlcywge1xuICAgICAgICAgIHR5cGU6ICdub2RlLWJvZHknXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH07XG4gIH1cbn1cbmZ1bmN0aW9uIGNsZWFyV2ViZ2wocikge1xuICB2YXIgZ2wgPSByLmRhdGEuY29udGV4dHNbci5XRUJHTF07XG4gIGdsLmNsZWFyKGdsLkNPTE9SX0JVRkZFUl9CSVQgfCBnbC5ERVBUSF9CVUZGRVJfQklUKTtcbn1cbmZ1bmN0aW9uIGNsZWFyQ2FudmFzKHIpIHtcbiAgLy8gdGhlIENScC5jbGVhckNhbnZhcygpIGZ1bmN0aW9uIGRvZXNuJ3QgdGFrZSB0aGUgdHJhbnNmb3JtIGludG8gYWNjb3VudFxuICB2YXIgY2xlYXIgPSBmdW5jdGlvbiBjbGVhcihjb250ZXh0KSB7XG4gICAgY29udGV4dC5zYXZlKCk7XG4gICAgY29udGV4dC5zZXRUcmFuc2Zvcm0oMSwgMCwgMCwgMSwgMCwgMCk7XG4gICAgY29udGV4dC5jbGVhclJlY3QoMCwgMCwgci5jYW52YXNXaWR0aCwgci5jYW52YXNIZWlnaHQpO1xuICAgIGNvbnRleHQucmVzdG9yZSgpO1xuICB9O1xuICBjbGVhcihyLmRhdGEuY29udGV4dHNbci5OT0RFXSk7XG4gIGNsZWFyKHIuZGF0YS5jb250ZXh0c1tyLkRSQUddKTtcbn1cbmZ1bmN0aW9uIGNyZWF0ZVBhblpvb21NYXRyaXgocikge1xuICB2YXIgd2lkdGggPSByLmNhbnZhc1dpZHRoO1xuICB2YXIgaGVpZ2h0ID0gci5jYW52YXNIZWlnaHQ7XG4gIHZhciBfdXRpbCRnZXRFZmZlY3RpdmVQYW4gPSBnZXRFZmZlY3RpdmVQYW5ab29tKHIpLFxuICAgIHBhbiA9IF91dGlsJGdldEVmZmVjdGl2ZVBhbi5wYW4sXG4gICAgem9vbSA9IF91dGlsJGdldEVmZmVjdGl2ZVBhbi56b29tO1xuICB2YXIgdHJhbnNmb3JtID0gY3JlYXRlKCk7XG4gIHRyYW5zbGF0ZSh0cmFuc2Zvcm0sIHRyYW5zZm9ybSwgW3Bhbi54LCBwYW4ueV0pO1xuICBzY2FsZSh0cmFuc2Zvcm0sIHRyYW5zZm9ybSwgW3pvb20sIHpvb21dKTtcbiAgdmFyIHByb2plY3Rpb24kMSA9IGNyZWF0ZSgpO1xuICBwcm9qZWN0aW9uKHByb2plY3Rpb24kMSwgd2lkdGgsIGhlaWdodCk7XG4gIHZhciBwcm9kdWN0ID0gY3JlYXRlKCk7XG4gIG11bHRpcGx5KHByb2R1Y3QsIHByb2plY3Rpb24kMSwgdHJhbnNmb3JtKTtcbiAgcmV0dXJuIHByb2R1Y3Q7XG59XG5mdW5jdGlvbiBzZXRDb250ZXh0VHJhbnNmb3JtKHIsIGNvbnRleHQpIHtcbiAgdmFyIHdpZHRoID0gci5jYW52YXNXaWR0aDtcbiAgdmFyIGhlaWdodCA9IHIuY2FudmFzSGVpZ2h0O1xuICB2YXIgX3V0aWwkZ2V0RWZmZWN0aXZlUGFuMiA9IGdldEVmZmVjdGl2ZVBhblpvb20ociksXG4gICAgcGFuID0gX3V0aWwkZ2V0RWZmZWN0aXZlUGFuMi5wYW4sXG4gICAgem9vbSA9IF91dGlsJGdldEVmZmVjdGl2ZVBhbjIuem9vbTtcbiAgY29udGV4dC5zZXRUcmFuc2Zvcm0oMSwgMCwgMCwgMSwgMCwgMCk7XG4gIGNvbnRleHQuY2xlYXJSZWN0KDAsIDAsIHdpZHRoLCBoZWlnaHQpO1xuICBjb250ZXh0LnRyYW5zbGF0ZShwYW4ueCwgcGFuLnkpO1xuICBjb250ZXh0LnNjYWxlKHpvb20sIHpvb20pO1xufVxuZnVuY3Rpb24gZHJhd1NlbGVjdGlvblJlY3RhbmdsZShyLCBvcHRpb25zKSB7XG4gIHIuZHJhd1NlbGVjdGlvblJlY3RhbmdsZShvcHRpb25zLCBmdW5jdGlvbiAoY29udGV4dCkge1xuICAgIHJldHVybiBzZXRDb250ZXh0VHJhbnNmb3JtKHIsIGNvbnRleHQpO1xuICB9KTtcbn1cblxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVudXNlZC12YXJzXG5mdW5jdGlvbiBkcmF3QXhlcyhyKSB7XG4gIC8vIGZvciBkZWJnZ2luZ1xuICB2YXIgY29udGV4dCA9IHIuZGF0YS5jb250ZXh0c1tyLk5PREVdO1xuICBjb250ZXh0LnNhdmUoKTtcbiAgc2V0Q29udGV4dFRyYW5zZm9ybShyLCBjb250ZXh0KTtcbiAgY29udGV4dC5zdHJva2VTdHlsZSA9ICdyZ2JhKDAsIDAsIDAsIDAuMyknO1xuICBjb250ZXh0LmJlZ2luUGF0aCgpO1xuICBjb250ZXh0Lm1vdmVUbygtMWUzLCAwKTtcbiAgY29udGV4dC5saW5lVG8oMTAwMCwgMCk7XG4gIGNvbnRleHQuc3Ryb2tlKCk7XG4gIGNvbnRleHQuYmVnaW5QYXRoKCk7XG4gIGNvbnRleHQubW92ZVRvKDAsIC0xZTMpO1xuICBjb250ZXh0LmxpbmVUbygwLCAxMDAwKTtcbiAgY29udGV4dC5zdHJva2UoKTtcbiAgY29udGV4dC5yZXN0b3JlKCk7XG59XG5mdW5jdGlvbiBkcmF3QXRsYXNlcyhyKSB7XG4gIC8vIEZvciBkZWJ1Z2dpbmcgdGhlIGF0bGFzZXNcbiAgdmFyIGRyYXcgPSBmdW5jdGlvbiBkcmF3KGRyYXdpbmcsIG5hbWUsIHJvdykge1xuICAgIHZhciBjb2xsZWN0aW9uID0gZHJhd2luZy5hdGxhc01hbmFnZXIuZ2V0QXRsYXNDb2xsZWN0aW9uKG5hbWUpO1xuICAgIHZhciBjb250ZXh0ID0gci5kYXRhLmNvbnRleHRzW3IuTk9ERV07XG4gICAgdmFyIHNjYWxlID0gMC4xMjU7XG4gICAgdmFyIGF0bGFzZXMgPSBjb2xsZWN0aW9uLmF0bGFzZXM7XG4gICAgZm9yICh2YXIgX2kgPSAwOyBfaSA8IGF0bGFzZXMubGVuZ3RoOyBfaSsrKSB7XG4gICAgICB2YXIgYXRsYXMgPSBhdGxhc2VzW19pXTtcbiAgICAgIHZhciBjYW52YXMgPSBhdGxhcy5jYW52YXM7XG4gICAgICBpZiAoY2FudmFzKSB7XG4gICAgICAgIHZhciB3ID0gY2FudmFzLndpZHRoO1xuICAgICAgICB2YXIgaCA9IGNhbnZhcy5oZWlnaHQ7XG4gICAgICAgIHZhciB4ID0gdyAqIF9pO1xuICAgICAgICB2YXIgeSA9IGNhbnZhcy5oZWlnaHQgKiByb3c7XG4gICAgICAgIGNvbnRleHQuc2F2ZSgpO1xuICAgICAgICBjb250ZXh0LnNjYWxlKHNjYWxlLCBzY2FsZSk7XG4gICAgICAgIGNvbnRleHQuZHJhd0ltYWdlKGNhbnZhcywgeCwgeSk7XG4gICAgICAgIGNvbnRleHQuc3Ryb2tlU3R5bGUgPSAnYmxhY2snO1xuICAgICAgICBjb250ZXh0LnJlY3QoeCwgeSwgdywgaCk7XG4gICAgICAgIGNvbnRleHQuc3Ryb2tlKCk7XG4gICAgICAgIGNvbnRleHQucmVzdG9yZSgpO1xuICAgICAgfVxuICAgIH1cbiAgfTtcbiAgdmFyIGkgPSAwO1xuICBkcmF3KHIuZHJhd2luZywgJ25vZGUnLCBpKyspO1xuICBkcmF3KHIuZHJhd2luZywgJ2xhYmVsJywgaSsrKTtcbn1cblxuLyoqXG4gKiBBcmd1bWVudHMgYXJlIGluIG1vZGVsIGNvb3JkaW5hdGVzLlxuICogKHgxLCB5MSkgaXMgdG9wIGxlZnQgY29ybmVyXG4gKiAoeDIsIHkyKSBpcyBib3R0b20gcmlnaHQgY29ybmVyIChvcHRpb25hbClcbiAqIFJldHVybnMgYSBTZXQgb2YgaW5kZXhlcy5cbiAqL1xuZnVuY3Rpb24gZ2V0UGlja2luZ0luZGV4ZXMociwgbVgxLCBtWTEsIG1YMiwgbVkyKSB7XG4gIHZhciB4LCB5LCB3LCBoO1xuICB2YXIgX3V0aWwkZ2V0RWZmZWN0aXZlUGFuMyA9IGdldEVmZmVjdGl2ZVBhblpvb20ociksXG4gICAgcGFuID0gX3V0aWwkZ2V0RWZmZWN0aXZlUGFuMy5wYW4sXG4gICAgem9vbSA9IF91dGlsJGdldEVmZmVjdGl2ZVBhbjMuem9vbTtcbiAge1xuICAgIHZhciBfdXRpbCRtb2RlbFRvUmVuZGVyZWQgPSBtb2RlbFRvUmVuZGVyZWRQb3NpdGlvbihyLCBwYW4sIHpvb20sIG1YMSwgbVkxKSxcbiAgICAgIF91dGlsJG1vZGVsVG9SZW5kZXJlZDIgPSBfc2xpY2VkVG9BcnJheShfdXRpbCRtb2RlbFRvUmVuZGVyZWQsIDIpLFxuICAgICAgY1gxID0gX3V0aWwkbW9kZWxUb1JlbmRlcmVkMlswXSxcbiAgICAgIGNZMSA9IF91dGlsJG1vZGVsVG9SZW5kZXJlZDJbMV07XG4gICAgdmFyIHQgPSA2OyAvLyBzaG91bGQgYmUgZXZlblxuICAgIHggPSBjWDEgLSB0IC8gMjtcbiAgICB5ID0gY1kxIC0gdCAvIDI7XG4gICAgdyA9IHQ7XG4gICAgaCA9IHQ7XG4gIH1cbiAgaWYgKHcgPT09IDAgfHwgaCA9PT0gMCkge1xuICAgIHJldHVybiBbXTtcbiAgfVxuICB2YXIgZ2wgPSByLmRhdGEuY29udGV4dHNbci5XRUJHTF07XG4gIGdsLmJpbmRGcmFtZWJ1ZmZlcihnbC5GUkFNRUJVRkZFUiwgci5waWNraW5nRnJhbWVCdWZmZXIpO1xuICBpZiAoci5waWNraW5nRnJhbWVCdWZmZXIubmVlZHNEcmF3KSB7XG4gICAgLy8gRHJhdyBlbGVtZW50IHotaW5kZXhlcyB0byB0aGUgcGlja2luZyBmcmFtZWJ1ZmZlclxuICAgIGdsLnZpZXdwb3J0KDAsIDAsIGdsLmNhbnZhcy53aWR0aCwgZ2wuY2FudmFzLmhlaWdodCk7XG4gICAgcmVuZGVyV2ViZ2wociwgbnVsbCwgUkVOREVSX1RBUkdFVC5QSUNLSU5HKTtcbiAgICByLnBpY2tpbmdGcmFtZUJ1ZmZlci5uZWVkc0RyYXcgPSBmYWxzZTtcbiAgfVxuICB2YXIgbiA9IHcgKiBoOyAvLyBudW1iZXIgb2YgcGl4ZWxzIHRvIHJlYWRcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVuZGVmXG4gIHZhciBkYXRhID0gbmV3IFVpbnQ4QXJyYXkobiAqIDQpOyAvLyA0IGJ5dGVzIHBlciBwaXhlbFxuICBnbC5yZWFkUGl4ZWxzKHgsIHksIHcsIGgsIGdsLlJHQkEsIGdsLlVOU0lHTkVEX0JZVEUsIGRhdGEpO1xuICBnbC5iaW5kRnJhbWVidWZmZXIoZ2wuRlJBTUVCVUZGRVIsIG51bGwpO1xuICB2YXIgaW5kZXhlcyA9IG5ldyBTZXQoKTtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBuOyBpKyspIHtcbiAgICB2YXIgcGl4ZWwgPSBkYXRhLnNsaWNlKGkgKiA0LCBpICogNCArIDQpO1xuICAgIHZhciBpbmRleCA9IHZlYzRUb0luZGV4KHBpeGVsKSAtIDE7IC8vIFRoZSBmcmFtZWJ1ZmZlciBpcyBjbGVhcmVkIHdpdGggMHMsIHNvIHotaW5kZXhlcyBhcmUgb2Zmc2V0IGJ5IDFcbiAgICBpZiAoaW5kZXggPj0gMCkge1xuICAgICAgaW5kZXhlcy5hZGQoaW5kZXgpO1xuICAgIH1cbiAgfVxuICByZXR1cm4gaW5kZXhlcztcbn1cblxuLyoqXG4gKiBDeS5qczogbW9kZWwgY29vcmRpbmF0ZSB5IGF4aXMgZ29lcyBkb3duXG4gKi9cbmZ1bmN0aW9uIGZpbmROZWFyZXN0RWxlbWVudHNXZWJnbChyLCB4LCB5KSB7XG4gIC8vIG1vZGVsIGNvb3JkaW5hdGVzXG4gIHZhciBpbmRleGVzID0gZ2V0UGlja2luZ0luZGV4ZXMociwgeCwgeSk7XG4gIHZhciBlbGVzID0gci5nZXRDYWNoZWRaU29ydGVkRWxlcygpO1xuICB2YXIgbm9kZSwgZWRnZTtcbiAgdmFyIF9pdGVyYXRvciA9IF9jcmVhdGVGb3JPZkl0ZXJhdG9ySGVscGVyKGluZGV4ZXMpLFxuICAgIF9zdGVwO1xuICB0cnkge1xuICAgIGZvciAoX2l0ZXJhdG9yLnMoKTsgIShfc3RlcCA9IF9pdGVyYXRvci5uKCkpLmRvbmU7KSB7XG4gICAgICB2YXIgaW5kZXggPSBfc3RlcC52YWx1ZTtcbiAgICAgIHZhciBlbGUgPSBlbGVzW2luZGV4XTtcbiAgICAgIGlmICghbm9kZSAmJiBlbGUuaXNOb2RlKCkpIHtcbiAgICAgICAgbm9kZSA9IGVsZTtcbiAgICAgIH1cbiAgICAgIGlmICghZWRnZSAmJiBlbGUuaXNFZGdlKCkpIHtcbiAgICAgICAgZWRnZSA9IGVsZTtcbiAgICAgIH1cbiAgICAgIGlmIChub2RlICYmIGVkZ2UpIHtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfVxuICB9IGNhdGNoIChlcnIpIHtcbiAgICBfaXRlcmF0b3IuZShlcnIpO1xuICB9IGZpbmFsbHkge1xuICAgIF9pdGVyYXRvci5mKCk7XG4gIH1cbiAgcmV0dXJuIFtub2RlLCBlZGdlXS5maWx0ZXIoQm9vbGVhbik7XG59XG5cbi8vIFRPRE86IElzIGNvbnN0YW50bHkgY2hlY2tpbmcgdGhpcyBzbG93ZXIgdGhhbiBqdXN0IHJlbmRlcmluZyBhIHRleHR1cmU/XG4vLyBNYXliZSB0aGlzIHNob3VsZCBiZSBjYWNoZWQgYXMgYSBmbGFnIG9uIGVhY2ggbm9kZS5cbmZ1bmN0aW9uIGlzU2ltcGxlUmVjdGFuZ2xlKG5vZGUpIHtcbiAgcmV0dXJuIG5vZGUucHN0eWxlKCdzaGFwZScpLnZhbHVlID09PSAncmVjdGFuZ2xlJyAmJiBub2RlLnBzdHlsZSgnYmFja2dyb3VuZC1maWxsJykudmFsdWUgPT09ICdzb2xpZCcgJiYgbm9kZS5wc3R5bGUoJ2JvcmRlci13aWR0aCcpLnBmVmFsdWUgPT09IDAgJiYgbm9kZS5wc3R5bGUoJ2JhY2tncm91bmQtaW1hZ2UnKS5zdHJWYWx1ZSA9PT0gJ25vbmUnO1xufVxuZnVuY3Rpb24gZHJhd0VsZShyLCBpbmRleCwgZWxlKSB7XG4gIHZhciBkcmF3aW5nID0gci5kcmF3aW5nO1xuICBpbmRleCArPSAxOyAvLyAwIGlzIHVzZWQgdG8gY2xlYXIgdGhlIGJhY2tncm91bmQsIG5lZWQgdG8gb2Zmc2V0IGFsbCB6LWluZGV4ZXMgYnkgb25lXG4gIGlmIChlbGUuaXNOb2RlKCkpIHtcbiAgICBkcmF3aW5nLmRyYXdUZXh0dXJlKGVsZSwgaW5kZXgsICdub2RlLXVuZGVybGF5Jyk7XG4gICAgaWYgKGlzU2ltcGxlUmVjdGFuZ2xlKGVsZSkpIHtcbiAgICAgIGRyYXdpbmcuZHJhd1NpbXBsZVJlY3RhbmdsZShlbGUsIGluZGV4LCAnbm9kZS1ib2R5Jyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGRyYXdpbmcuZHJhd1RleHR1cmUoZWxlLCBpbmRleCwgJ25vZGUtYm9keScpO1xuICAgIH1cbiAgICBkcmF3aW5nLmRyYXdUZXh0dXJlKGVsZSwgaW5kZXgsICdsYWJlbCcpO1xuICAgIGRyYXdpbmcuZHJhd1RleHR1cmUoZWxlLCBpbmRleCwgJ25vZGUtb3ZlcmxheScpO1xuICB9IGVsc2Uge1xuICAgIGRyYXdpbmcuZHJhd0VkZ2VMaW5lKGVsZSwgaW5kZXgpO1xuICAgIGRyYXdpbmcuZHJhd0VkZ2VBcnJvdyhlbGUsIGluZGV4LCAnc291cmNlJyk7XG4gICAgZHJhd2luZy5kcmF3RWRnZUFycm93KGVsZSwgaW5kZXgsICd0YXJnZXQnKTtcbiAgICBkcmF3aW5nLmRyYXdUZXh0dXJlKGVsZSwgaW5kZXgsICdsYWJlbCcpO1xuICAgIGRyYXdpbmcuZHJhd1RleHR1cmUoZWxlLCBpbmRleCwgJ2VkZ2Utc291cmNlLWxhYmVsJyk7XG4gICAgZHJhd2luZy5kcmF3VGV4dHVyZShlbGUsIGluZGV4LCAnZWRnZS10YXJnZXQtbGFiZWwnKTtcbiAgfVxufVxuZnVuY3Rpb24gcmVuZGVyV2ViZ2wociwgb3B0aW9ucywgcmVuZGVyVGFyZ2V0KSB7XG4gIHZhciBzdGFydDtcbiAgaWYgKHIud2ViZ2xEZWJ1Zykge1xuICAgIHN0YXJ0ID0gcGVyZm9ybWFuY2Uubm93KCk7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tdW5kZWZcbiAgfVxuICB2YXIgZHJhd2luZyA9IHIuZHJhd2luZztcbiAgdmFyIGVsZUNvdW50ID0gMDtcbiAgaWYgKHJlbmRlclRhcmdldC5zY3JlZW4pIHtcbiAgICBpZiAoci5kYXRhLmNhbnZhc05lZWRzUmVkcmF3W3IuU0VMRUNUX0JPWF0pIHtcbiAgICAgIGRyYXdTZWxlY3Rpb25SZWN0YW5nbGUociwgb3B0aW9ucyk7XG4gICAgfVxuICB9XG5cbiAgLy8gc2VlIGRyYXdpbmctZWxlbWVudHMuanMgZHJhd0NhY2hlZEVsZW1lbnQoKVxuICBpZiAoci5kYXRhLmNhbnZhc05lZWRzUmVkcmF3W3IuTk9ERV0gfHwgcmVuZGVyVGFyZ2V0LnBpY2tpbmcpIHtcbiAgICB2YXIgZ2wgPSByLmRhdGEuY29udGV4dHNbci5XRUJHTF07XG4gICAgaWYgKHJlbmRlclRhcmdldC5zY3JlZW4pIHtcbiAgICAgIGdsLmNsZWFyQ29sb3IoMCwgMCwgMCwgMCk7IC8vIGJhY2tncm91bmQgY29sb3JcbiAgICAgIGdsLmVuYWJsZShnbC5CTEVORCk7IC8vIGVuYWJsZSBhbHBoYSBibGVuZGluZyBvZiB0ZXh0dXJlc1xuICAgICAgZ2wuYmxlbmRGdW5jKGdsLk9ORSwgZ2wuT05FX01JTlVTX1NSQ19BTFBIQSk7IC8vIHdlIGFyZSB1c2luZyBwcmVtdWx0aXBsaWVkIGFscGhhXG4gICAgfSBlbHNlIHtcbiAgICAgIGdsLmRpc2FibGUoZ2wuQkxFTkQpO1xuICAgIH1cbiAgICBnbC5jbGVhcihnbC5DT0xPUl9CVUZGRVJfQklUIHwgZ2wuREVQVEhfQlVGRkVSX0JJVCk7XG4gICAgZ2wudmlld3BvcnQoMCwgMCwgZ2wuY2FudmFzLndpZHRoLCBnbC5jYW52YXMuaGVpZ2h0KTtcbiAgICB2YXIgcGFuWm9vbU1hdHJpeCA9IGNyZWF0ZVBhblpvb21NYXRyaXgocik7XG4gICAgdmFyIGVsZXMgPSByLmdldENhY2hlZFpTb3J0ZWRFbGVzKCk7XG4gICAgZWxlQ291bnQgPSBlbGVzLmxlbmd0aDtcbiAgICBkcmF3aW5nLnN0YXJ0RnJhbWUocGFuWm9vbU1hdHJpeCwgcmVuZGVyVGFyZ2V0KTtcbiAgICBpZiAocmVuZGVyVGFyZ2V0LnNjcmVlbikge1xuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBlbGVzLm5vbmRyYWcubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgZHJhd0VsZShyLCBpLCBlbGVzLm5vbmRyYWdbaV0pO1xuICAgICAgfVxuICAgICAgZm9yICh2YXIgX2kyID0gMDsgX2kyIDwgZWxlcy5kcmFnLmxlbmd0aDsgX2kyKyspIHtcbiAgICAgICAgZHJhd0VsZShyLCBfaTIsIGVsZXMuZHJhZ1tfaTJdKTtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKHJlbmRlclRhcmdldC5waWNraW5nKSB7XG4gICAgICBmb3IgKHZhciBfaTMgPSAwOyBfaTMgPCBlbGVzLmxlbmd0aDsgX2kzKyspIHtcbiAgICAgICAgZHJhd0VsZShyLCBfaTMsIGVsZXNbX2kzXSk7XG4gICAgICB9XG4gICAgfVxuICAgIGRyYXdpbmcuZW5kRnJhbWUoKTtcbiAgICBpZiAocmVuZGVyVGFyZ2V0LnNjcmVlbiAmJiByLndlYmdsRGVidWdTaG93QXRsYXNlcykge1xuICAgICAgZHJhd0F4ZXMocik7XG4gICAgICBkcmF3QXRsYXNlcyhyKTtcbiAgICB9XG4gICAgci5kYXRhLmNhbnZhc05lZWRzUmVkcmF3W3IuTk9ERV0gPSBmYWxzZTtcbiAgICByLmRhdGEuY2FudmFzTmVlZHNSZWRyYXdbci5EUkFHXSA9IGZhbHNlO1xuICB9XG4gIGlmIChyLndlYmdsRGVidWcpIHtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdW5kZWZcbiAgICB2YXIgZW5kID0gcGVyZm9ybWFuY2Uubm93KCk7XG4gICAgdmFyIGNvbXBhY3QgPSBmYWxzZTtcbiAgICB2YXIgdGltZSA9IE1hdGguY2VpbChlbmQgLSBzdGFydCk7XG4gICAgdmFyIGRlYnVnSW5mbyA9IGRyYXdpbmcuZ2V0RGVidWdJbmZvKCk7XG4gICAgdmFyIHJlcG9ydCA9IFtcIlwiLmNvbmNhdChlbGVDb3VudCwgXCIgZWxlbWVudHNcIiksIFwiXCIuY29uY2F0KGRlYnVnSW5mby50b3RhbEluc3RhbmNlcywgXCIgaW5zdGFuY2VzXCIpLCBcIlwiLmNvbmNhdChkZWJ1Z0luZm8uYmF0Y2hDb3VudCwgXCIgYmF0Y2hlc1wiKSwgXCJcIi5jb25jYXQoZGVidWdJbmZvLnRvdGFsQXRsYXNlcywgXCIgYXRsYXNlc1wiKSwgXCJcIi5jb25jYXQoZGVidWdJbmZvLndyYXBwZWRDb3VudCwgXCIgd3JhcHBlZCB0ZXh0dXJlc1wiKSwgXCJcIi5jb25jYXQoZGVidWdJbmZvLnJlY3RhbmdsZUNvdW50LCBcIiBzaW1wbGUgcmVjdGFuZ2xlc1wiKV0uam9pbignLCAnKTtcbiAgICBpZiAoY29tcGFjdCkge1xuICAgICAgY29uc29sZS5sb2coXCJXZWJHTCAoXCIuY29uY2F0KHJlbmRlclRhcmdldC5uYW1lLCBcIikgLSB0aW1lIFwiKS5jb25jYXQodGltZSwgXCJtcywgXCIpLmNvbmNhdChyZXBvcnQpKTtcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc29sZS5sb2coXCJXZWJHTCAoXCIuY29uY2F0KHJlbmRlclRhcmdldC5uYW1lLCBcIikgLSBmcmFtZSB0aW1lIFwiKS5jb25jYXQodGltZSwgXCJtc1wiKSk7XG4gICAgICBjb25zb2xlLmxvZygnVG90YWxzOicpO1xuICAgICAgY29uc29sZS5sb2coXCIgIFwiLmNvbmNhdChyZXBvcnQpKTtcbiAgICAgIGNvbnNvbGUubG9nKCdUZXh0dXJlIEF0bGFzZXMgVXNlZDonKTtcbiAgICAgIHZhciBhdGxhc0luZm8gPSBkZWJ1Z0luZm8uYXRsYXNJbmZvO1xuICAgICAgdmFyIF9pdGVyYXRvcjMgPSBfY3JlYXRlRm9yT2ZJdGVyYXRvckhlbHBlcihhdGxhc0luZm8pLFxuICAgICAgICBfc3RlcDM7XG4gICAgICB0cnkge1xuICAgICAgICBmb3IgKF9pdGVyYXRvcjMucygpOyAhKF9zdGVwMyA9IF9pdGVyYXRvcjMubigpKS5kb25lOykge1xuICAgICAgICAgIHZhciBpbmZvID0gX3N0ZXAzLnZhbHVlO1xuICAgICAgICAgIGNvbnNvbGUubG9nKFwiICBcIi5jb25jYXQoaW5mby50eXBlLCBcIjogXCIpLmNvbmNhdChpbmZvLmtleUNvdW50LCBcIiBrZXlzLCBcIikuY29uY2F0KGluZm8uYXRsYXNDb3VudCwgXCIgYXRsYXNlc1wiKSk7XG4gICAgICAgIH1cbiAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICBfaXRlcmF0b3IzLmUoZXJyKTtcbiAgICAgIH0gZmluYWxseSB7XG4gICAgICAgIF9pdGVyYXRvcjMuZigpO1xuICAgICAgfVxuICAgICAgY29uc29sZS5sb2coJycpO1xuICAgIH1cbiAgfVxuICBpZiAoci5kYXRhLmdjKSB7XG4gICAgY29uc29sZS5sb2coJ0dhcmJhZ2UgQ29sbGVjdCEnKTtcbiAgICByLmRhdGEuZ2MgPSBmYWxzZTtcbiAgICBkcmF3aW5nLmdjKCk7XG4gIH1cbn1cblxudmFyIENScCQzID0ge307XG5cbi8vIEBPIFBvbHlnb24gZHJhd2luZ1xuQ1JwJDMuZHJhd1BvbHlnb25QYXRoID0gZnVuY3Rpb24gKGNvbnRleHQsIHgsIHksIHdpZHRoLCBoZWlnaHQsIHBvaW50cykge1xuICB2YXIgaGFsZlcgPSB3aWR0aCAvIDI7XG4gIHZhciBoYWxmSCA9IGhlaWdodCAvIDI7XG4gIGlmIChjb250ZXh0LmJlZ2luUGF0aCkge1xuICAgIGNvbnRleHQuYmVnaW5QYXRoKCk7XG4gIH1cbiAgY29udGV4dC5tb3ZlVG8oeCArIGhhbGZXICogcG9pbnRzWzBdLCB5ICsgaGFsZkggKiBwb2ludHNbMV0pO1xuICBmb3IgKHZhciBpID0gMTsgaSA8IHBvaW50cy5sZW5ndGggLyAyOyBpKyspIHtcbiAgICBjb250ZXh0LmxpbmVUbyh4ICsgaGFsZlcgKiBwb2ludHNbaSAqIDJdLCB5ICsgaGFsZkggKiBwb2ludHNbaSAqIDIgKyAxXSk7XG4gIH1cbiAgY29udGV4dC5jbG9zZVBhdGgoKTtcbn07XG5DUnAkMy5kcmF3Um91bmRQb2x5Z29uUGF0aCA9IGZ1bmN0aW9uIChjb250ZXh0LCB4LCB5LCB3aWR0aCwgaGVpZ2h0LCBwb2ludHMsIGNvcm5lcnMpIHtcbiAgY29ybmVycy5mb3JFYWNoKGZ1bmN0aW9uIChjb3JuZXIpIHtcbiAgICByZXR1cm4gZHJhd1ByZXBhcmVkUm91bmRDb3JuZXIoY29udGV4dCwgY29ybmVyKTtcbiAgfSk7XG4gIGNvbnRleHQuY2xvc2VQYXRoKCk7XG59O1xuXG4vLyBSb3VuZCByZWN0YW5nbGUgZHJhd2luZ1xuQ1JwJDMuZHJhd1JvdW5kUmVjdGFuZ2xlUGF0aCA9IGZ1bmN0aW9uIChjb250ZXh0LCB4LCB5LCB3aWR0aCwgaGVpZ2h0LCByYWRpdXMpIHtcbiAgdmFyIGhhbGZXaWR0aCA9IHdpZHRoIC8gMjtcbiAgdmFyIGhhbGZIZWlnaHQgPSBoZWlnaHQgLyAyO1xuICB2YXIgY29ybmVyUmFkaXVzID0gcmFkaXVzID09PSAnYXV0bycgPyBnZXRSb3VuZFJlY3RhbmdsZVJhZGl1cyh3aWR0aCwgaGVpZ2h0KSA6IE1hdGgubWluKHJhZGl1cywgaGFsZkhlaWdodCwgaGFsZldpZHRoKTtcbiAgaWYgKGNvbnRleHQuYmVnaW5QYXRoKSB7XG4gICAgY29udGV4dC5iZWdpblBhdGgoKTtcbiAgfVxuXG4gIC8vIFN0YXJ0IGF0IHRvcCBtaWRkbGVcbiAgY29udGV4dC5tb3ZlVG8oeCwgeSAtIGhhbGZIZWlnaHQpO1xuICAvLyBBcmMgZnJvbSBtaWRkbGUgdG9wIHRvIHJpZ2h0IHNpZGVcbiAgY29udGV4dC5hcmNUbyh4ICsgaGFsZldpZHRoLCB5IC0gaGFsZkhlaWdodCwgeCArIGhhbGZXaWR0aCwgeSwgY29ybmVyUmFkaXVzKTtcbiAgLy8gQXJjIGZyb20gcmlnaHQgc2lkZSB0byBib3R0b21cbiAgY29udGV4dC5hcmNUbyh4ICsgaGFsZldpZHRoLCB5ICsgaGFsZkhlaWdodCwgeCwgeSArIGhhbGZIZWlnaHQsIGNvcm5lclJhZGl1cyk7XG4gIC8vIEFyYyBmcm9tIGJvdHRvbSB0byBsZWZ0IHNpZGVcbiAgY29udGV4dC5hcmNUbyh4IC0gaGFsZldpZHRoLCB5ICsgaGFsZkhlaWdodCwgeCAtIGhhbGZXaWR0aCwgeSwgY29ybmVyUmFkaXVzKTtcbiAgLy8gQXJjIGZyb20gbGVmdCBzaWRlIHRvIHRvcEJvcmRlclxuICBjb250ZXh0LmFyY1RvKHggLSBoYWxmV2lkdGgsIHkgLSBoYWxmSGVpZ2h0LCB4LCB5IC0gaGFsZkhlaWdodCwgY29ybmVyUmFkaXVzKTtcbiAgLy8gSm9pbiBsaW5lXG4gIGNvbnRleHQubGluZVRvKHgsIHkgLSBoYWxmSGVpZ2h0KTtcbiAgY29udGV4dC5jbG9zZVBhdGgoKTtcbn07XG5DUnAkMy5kcmF3Qm90dG9tUm91bmRSZWN0YW5nbGVQYXRoID0gZnVuY3Rpb24gKGNvbnRleHQsIHgsIHksIHdpZHRoLCBoZWlnaHQsIHJhZGl1cykge1xuICB2YXIgaGFsZldpZHRoID0gd2lkdGggLyAyO1xuICB2YXIgaGFsZkhlaWdodCA9IGhlaWdodCAvIDI7XG4gIHZhciBjb3JuZXJSYWRpdXMgPSByYWRpdXMgPT09ICdhdXRvJyA/IGdldFJvdW5kUmVjdGFuZ2xlUmFkaXVzKHdpZHRoLCBoZWlnaHQpIDogcmFkaXVzO1xuICBpZiAoY29udGV4dC5iZWdpblBhdGgpIHtcbiAgICBjb250ZXh0LmJlZ2luUGF0aCgpO1xuICB9XG5cbiAgLy8gU3RhcnQgYXQgdG9wIG1pZGRsZVxuICBjb250ZXh0Lm1vdmVUbyh4LCB5IC0gaGFsZkhlaWdodCk7XG4gIGNvbnRleHQubGluZVRvKHggKyBoYWxmV2lkdGgsIHkgLSBoYWxmSGVpZ2h0KTtcbiAgY29udGV4dC5saW5lVG8oeCArIGhhbGZXaWR0aCwgeSk7XG4gIGNvbnRleHQuYXJjVG8oeCArIGhhbGZXaWR0aCwgeSArIGhhbGZIZWlnaHQsIHgsIHkgKyBoYWxmSGVpZ2h0LCBjb3JuZXJSYWRpdXMpO1xuICBjb250ZXh0LmFyY1RvKHggLSBoYWxmV2lkdGgsIHkgKyBoYWxmSGVpZ2h0LCB4IC0gaGFsZldpZHRoLCB5LCBjb3JuZXJSYWRpdXMpO1xuICBjb250ZXh0LmxpbmVUbyh4IC0gaGFsZldpZHRoLCB5IC0gaGFsZkhlaWdodCk7XG4gIGNvbnRleHQubGluZVRvKHgsIHkgLSBoYWxmSGVpZ2h0KTtcbiAgY29udGV4dC5jbG9zZVBhdGgoKTtcbn07XG5DUnAkMy5kcmF3Q3V0UmVjdGFuZ2xlUGF0aCA9IGZ1bmN0aW9uIChjb250ZXh0LCB4LCB5LCB3aWR0aCwgaGVpZ2h0LCBwb2ludHMsIGNvcm5lcnMpIHtcbiAgdmFyIGhhbGZXaWR0aCA9IHdpZHRoIC8gMjtcbiAgdmFyIGhhbGZIZWlnaHQgPSBoZWlnaHQgLyAyO1xuICB2YXIgY29ybmVyTGVuZ3RoID0gY29ybmVycyA9PT0gJ2F1dG8nID8gZ2V0Q3V0UmVjdGFuZ2xlQ29ybmVyTGVuZ3RoKCkgOiBjb3JuZXJzO1xuICBpZiAoY29udGV4dC5iZWdpblBhdGgpIHtcbiAgICBjb250ZXh0LmJlZ2luUGF0aCgpO1xuICB9XG4gIGNvbnRleHQubW92ZVRvKHggLSBoYWxmV2lkdGggKyBjb3JuZXJMZW5ndGgsIHkgLSBoYWxmSGVpZ2h0KTtcbiAgY29udGV4dC5saW5lVG8oeCArIGhhbGZXaWR0aCAtIGNvcm5lckxlbmd0aCwgeSAtIGhhbGZIZWlnaHQpO1xuICBjb250ZXh0LmxpbmVUbyh4ICsgaGFsZldpZHRoLCB5IC0gaGFsZkhlaWdodCArIGNvcm5lckxlbmd0aCk7XG4gIGNvbnRleHQubGluZVRvKHggKyBoYWxmV2lkdGgsIHkgKyBoYWxmSGVpZ2h0IC0gY29ybmVyTGVuZ3RoKTtcbiAgY29udGV4dC5saW5lVG8oeCArIGhhbGZXaWR0aCAtIGNvcm5lckxlbmd0aCwgeSArIGhhbGZIZWlnaHQpO1xuICBjb250ZXh0LmxpbmVUbyh4IC0gaGFsZldpZHRoICsgY29ybmVyTGVuZ3RoLCB5ICsgaGFsZkhlaWdodCk7XG4gIGNvbnRleHQubGluZVRvKHggLSBoYWxmV2lkdGgsIHkgKyBoYWxmSGVpZ2h0IC0gY29ybmVyTGVuZ3RoKTtcbiAgY29udGV4dC5saW5lVG8oeCAtIGhhbGZXaWR0aCwgeSAtIGhhbGZIZWlnaHQgKyBjb3JuZXJMZW5ndGgpO1xuICBjb250ZXh0LmNsb3NlUGF0aCgpO1xufTtcbkNScCQzLmRyYXdCYXJyZWxQYXRoID0gZnVuY3Rpb24gKGNvbnRleHQsIHgsIHksIHdpZHRoLCBoZWlnaHQpIHtcbiAgdmFyIGhhbGZXaWR0aCA9IHdpZHRoIC8gMjtcbiAgdmFyIGhhbGZIZWlnaHQgPSBoZWlnaHQgLyAyO1xuICB2YXIgeEJlZ2luID0geCAtIGhhbGZXaWR0aDtcbiAgdmFyIHhFbmQgPSB4ICsgaGFsZldpZHRoO1xuICB2YXIgeUJlZ2luID0geSAtIGhhbGZIZWlnaHQ7XG4gIHZhciB5RW5kID0geSArIGhhbGZIZWlnaHQ7XG4gIHZhciBiYXJyZWxDdXJ2ZUNvbnN0YW50cyA9IGdldEJhcnJlbEN1cnZlQ29uc3RhbnRzKHdpZHRoLCBoZWlnaHQpO1xuICB2YXIgd09mZnNldCA9IGJhcnJlbEN1cnZlQ29uc3RhbnRzLndpZHRoT2Zmc2V0O1xuICB2YXIgaE9mZnNldCA9IGJhcnJlbEN1cnZlQ29uc3RhbnRzLmhlaWdodE9mZnNldDtcbiAgdmFyIGN0cmxQdFhPZmZzZXQgPSBiYXJyZWxDdXJ2ZUNvbnN0YW50cy5jdHJsUHRPZmZzZXRQY3QgKiB3T2Zmc2V0O1xuICBpZiAoY29udGV4dC5iZWdpblBhdGgpIHtcbiAgICBjb250ZXh0LmJlZ2luUGF0aCgpO1xuICB9XG4gIGNvbnRleHQubW92ZVRvKHhCZWdpbiwgeUJlZ2luICsgaE9mZnNldCk7XG4gIGNvbnRleHQubGluZVRvKHhCZWdpbiwgeUVuZCAtIGhPZmZzZXQpO1xuICBjb250ZXh0LnF1YWRyYXRpY0N1cnZlVG8oeEJlZ2luICsgY3RybFB0WE9mZnNldCwgeUVuZCwgeEJlZ2luICsgd09mZnNldCwgeUVuZCk7XG4gIGNvbnRleHQubGluZVRvKHhFbmQgLSB3T2Zmc2V0LCB5RW5kKTtcbiAgY29udGV4dC5xdWFkcmF0aWNDdXJ2ZVRvKHhFbmQgLSBjdHJsUHRYT2Zmc2V0LCB5RW5kLCB4RW5kLCB5RW5kIC0gaE9mZnNldCk7XG4gIGNvbnRleHQubGluZVRvKHhFbmQsIHlCZWdpbiArIGhPZmZzZXQpO1xuICBjb250ZXh0LnF1YWRyYXRpY0N1cnZlVG8oeEVuZCAtIGN0cmxQdFhPZmZzZXQsIHlCZWdpbiwgeEVuZCAtIHdPZmZzZXQsIHlCZWdpbik7XG4gIGNvbnRleHQubGluZVRvKHhCZWdpbiArIHdPZmZzZXQsIHlCZWdpbik7XG4gIGNvbnRleHQucXVhZHJhdGljQ3VydmVUbyh4QmVnaW4gKyBjdHJsUHRYT2Zmc2V0LCB5QmVnaW4sIHhCZWdpbiwgeUJlZ2luICsgaE9mZnNldCk7XG4gIGNvbnRleHQuY2xvc2VQYXRoKCk7XG59O1xudmFyIHNpbjAgPSBNYXRoLnNpbigwKTtcbnZhciBjb3MwID0gTWF0aC5jb3MoMCk7XG52YXIgc2luID0ge307XG52YXIgY29zID0ge307XG52YXIgZWxsaXBzZVN0ZXBTaXplID0gTWF0aC5QSSAvIDQwO1xuZm9yICh2YXIgaSA9IDAgKiBNYXRoLlBJOyBpIDwgMiAqIE1hdGguUEk7IGkgKz0gZWxsaXBzZVN0ZXBTaXplKSB7XG4gIHNpbltpXSA9IE1hdGguc2luKGkpO1xuICBjb3NbaV0gPSBNYXRoLmNvcyhpKTtcbn1cbkNScCQzLmRyYXdFbGxpcHNlUGF0aCA9IGZ1bmN0aW9uIChjb250ZXh0LCBjZW50ZXJYLCBjZW50ZXJZLCB3aWR0aCwgaGVpZ2h0KSB7XG4gIGlmIChjb250ZXh0LmJlZ2luUGF0aCkge1xuICAgIGNvbnRleHQuYmVnaW5QYXRoKCk7XG4gIH1cbiAgaWYgKGNvbnRleHQuZWxsaXBzZSkge1xuICAgIGNvbnRleHQuZWxsaXBzZShjZW50ZXJYLCBjZW50ZXJZLCB3aWR0aCAvIDIsIGhlaWdodCAvIDIsIDAsIDAsIDIgKiBNYXRoLlBJKTtcbiAgfSBlbHNlIHtcbiAgICB2YXIgeFBvcywgeVBvcztcbiAgICB2YXIgcncgPSB3aWR0aCAvIDI7XG4gICAgdmFyIHJoID0gaGVpZ2h0IC8gMjtcbiAgICBmb3IgKHZhciBpID0gMCAqIE1hdGguUEk7IGkgPCAyICogTWF0aC5QSTsgaSArPSBlbGxpcHNlU3RlcFNpemUpIHtcbiAgICAgIHhQb3MgPSBjZW50ZXJYIC0gcncgKiBzaW5baV0gKiBzaW4wICsgcncgKiBjb3NbaV0gKiBjb3MwO1xuICAgICAgeVBvcyA9IGNlbnRlclkgKyByaCAqIGNvc1tpXSAqIHNpbjAgKyByaCAqIHNpbltpXSAqIGNvczA7XG4gICAgICBpZiAoaSA9PT0gMCkge1xuICAgICAgICBjb250ZXh0Lm1vdmVUbyh4UG9zLCB5UG9zKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnRleHQubGluZVRvKHhQb3MsIHlQb3MpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICBjb250ZXh0LmNsb3NlUGF0aCgpO1xufTtcblxuLyogZ2xvYmFsIGF0b2IsIEFycmF5QnVmZmVyLCBVaW50OEFycmF5LCBCbG9iICovXG5cbnZhciBDUnAkMiA9IHt9O1xuQ1JwJDIuY3JlYXRlQnVmZmVyID0gZnVuY3Rpb24gKHcsIGgpIHtcbiAgdmFyIGJ1ZmZlciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2NhbnZhcycpOyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLXVuZGVmXG4gIGJ1ZmZlci53aWR0aCA9IHc7XG4gIGJ1ZmZlci5oZWlnaHQgPSBoO1xuICByZXR1cm4gW2J1ZmZlciwgYnVmZmVyLmdldENvbnRleHQoJzJkJyldO1xufTtcbkNScCQyLmJ1ZmZlckNhbnZhc0ltYWdlID0gZnVuY3Rpb24gKG9wdGlvbnMpIHtcbiAgdmFyIGN5ID0gdGhpcy5jeTtcbiAgdmFyIGVsZXMgPSBjeS5tdXRhYmxlRWxlbWVudHMoKTtcbiAgdmFyIGJiID0gZWxlcy5ib3VuZGluZ0JveCgpO1xuICB2YXIgY3RyUmVjdCA9IHRoaXMuZmluZENvbnRhaW5lckNsaWVudENvb3JkcygpO1xuICB2YXIgd2lkdGggPSBvcHRpb25zLmZ1bGwgPyBNYXRoLmNlaWwoYmIudykgOiBjdHJSZWN0WzJdO1xuICB2YXIgaGVpZ2h0ID0gb3B0aW9ucy5mdWxsID8gTWF0aC5jZWlsKGJiLmgpIDogY3RyUmVjdFszXTtcbiAgdmFyIHNwZWNkTWF4RGltcyA9IG51bWJlciQxKG9wdGlvbnMubWF4V2lkdGgpIHx8IG51bWJlciQxKG9wdGlvbnMubWF4SGVpZ2h0KTtcbiAgdmFyIHB4UmF0aW8gPSB0aGlzLmdldFBpeGVsUmF0aW8oKTtcbiAgdmFyIHNjYWxlID0gMTtcbiAgaWYgKG9wdGlvbnMuc2NhbGUgIT09IHVuZGVmaW5lZCkge1xuICAgIHdpZHRoICo9IG9wdGlvbnMuc2NhbGU7XG4gICAgaGVpZ2h0ICo9IG9wdGlvbnMuc2NhbGU7XG4gICAgc2NhbGUgPSBvcHRpb25zLnNjYWxlO1xuICB9IGVsc2UgaWYgKHNwZWNkTWF4RGltcykge1xuICAgIHZhciBtYXhTY2FsZVcgPSBJbmZpbml0eTtcbiAgICB2YXIgbWF4U2NhbGVIID0gSW5maW5pdHk7XG4gICAgaWYgKG51bWJlciQxKG9wdGlvbnMubWF4V2lkdGgpKSB7XG4gICAgICBtYXhTY2FsZVcgPSBzY2FsZSAqIG9wdGlvbnMubWF4V2lkdGggLyB3aWR0aDtcbiAgICB9XG4gICAgaWYgKG51bWJlciQxKG9wdGlvbnMubWF4SGVpZ2h0KSkge1xuICAgICAgbWF4U2NhbGVIID0gc2NhbGUgKiBvcHRpb25zLm1heEhlaWdodCAvIGhlaWdodDtcbiAgICB9XG4gICAgc2NhbGUgPSBNYXRoLm1pbihtYXhTY2FsZVcsIG1heFNjYWxlSCk7XG4gICAgd2lkdGggKj0gc2NhbGU7XG4gICAgaGVpZ2h0ICo9IHNjYWxlO1xuICB9XG4gIGlmICghc3BlY2RNYXhEaW1zKSB7XG4gICAgd2lkdGggKj0gcHhSYXRpbztcbiAgICBoZWlnaHQgKj0gcHhSYXRpbztcbiAgICBzY2FsZSAqPSBweFJhdGlvO1xuICB9XG4gIHZhciBidWZmQ2FudmFzID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnY2FudmFzJyk7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tdW5kZWZcblxuICBidWZmQ2FudmFzLndpZHRoID0gd2lkdGg7XG4gIGJ1ZmZDYW52YXMuaGVpZ2h0ID0gaGVpZ2h0O1xuICBidWZmQ2FudmFzLnN0eWxlLndpZHRoID0gd2lkdGggKyAncHgnO1xuICBidWZmQ2FudmFzLnN0eWxlLmhlaWdodCA9IGhlaWdodCArICdweCc7XG4gIHZhciBidWZmQ3h0ID0gYnVmZkNhbnZhcy5nZXRDb250ZXh0KCcyZCcpO1xuXG4gIC8vIFJhc3Rlcml6ZSB0aGUgbGF5ZXJzLCBidXQgb25seSBpZiBjb250YWluZXIgaGFzIG5vbnplcm8gc2l6ZVxuICBpZiAod2lkdGggPiAwICYmIGhlaWdodCA+IDApIHtcbiAgICBidWZmQ3h0LmNsZWFyUmVjdCgwLCAwLCB3aWR0aCwgaGVpZ2h0KTtcbiAgICBidWZmQ3h0Lmdsb2JhbENvbXBvc2l0ZU9wZXJhdGlvbiA9ICdzb3VyY2Utb3Zlcic7XG4gICAgdmFyIHpzb3J0ZWRFbGVzID0gdGhpcy5nZXRDYWNoZWRaU29ydGVkRWxlcygpO1xuICAgIGlmIChvcHRpb25zLmZ1bGwpIHtcbiAgICAgIC8vIGRyYXcgdGhlIGZ1bGwgYm91bmRzIG9mIHRoZSBncmFwaFxuICAgICAgYnVmZkN4dC50cmFuc2xhdGUoLWJiLngxICogc2NhbGUsIC1iYi55MSAqIHNjYWxlKTtcbiAgICAgIGJ1ZmZDeHQuc2NhbGUoc2NhbGUsIHNjYWxlKTtcbiAgICAgIHRoaXMuZHJhd0VsZW1lbnRzKGJ1ZmZDeHQsIHpzb3J0ZWRFbGVzKTtcbiAgICAgIGJ1ZmZDeHQuc2NhbGUoMSAvIHNjYWxlLCAxIC8gc2NhbGUpO1xuICAgICAgYnVmZkN4dC50cmFuc2xhdGUoYmIueDEgKiBzY2FsZSwgYmIueTEgKiBzY2FsZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIGRyYXcgdGhlIGN1cnJlbnQgdmlld1xuICAgICAgdmFyIHBhbiA9IGN5LnBhbigpO1xuICAgICAgdmFyIHRyYW5zbGF0aW9uID0ge1xuICAgICAgICB4OiBwYW4ueCAqIHNjYWxlLFxuICAgICAgICB5OiBwYW4ueSAqIHNjYWxlXG4gICAgICB9O1xuICAgICAgc2NhbGUgKj0gY3kuem9vbSgpO1xuICAgICAgYnVmZkN4dC50cmFuc2xhdGUodHJhbnNsYXRpb24ueCwgdHJhbnNsYXRpb24ueSk7XG4gICAgICBidWZmQ3h0LnNjYWxlKHNjYWxlLCBzY2FsZSk7XG4gICAgICB0aGlzLmRyYXdFbGVtZW50cyhidWZmQ3h0LCB6c29ydGVkRWxlcyk7XG4gICAgICBidWZmQ3h0LnNjYWxlKDEgLyBzY2FsZSwgMSAvIHNjYWxlKTtcbiAgICAgIGJ1ZmZDeHQudHJhbnNsYXRlKC10cmFuc2xhdGlvbi54LCAtdHJhbnNsYXRpb24ueSk7XG4gICAgfVxuXG4gICAgLy8gbmVlZCB0byBmaWxsIGJnIGF0IGVuZCBsaWtlIHRoaXMgaW4gb3JkZXIgdG8gZmlsbCBjbGVhcmVkIHRyYW5zcGFyZW50IHBpeGVscyBpbiBqcGdzXG4gICAgaWYgKG9wdGlvbnMuYmcpIHtcbiAgICAgIGJ1ZmZDeHQuZ2xvYmFsQ29tcG9zaXRlT3BlcmF0aW9uID0gJ2Rlc3RpbmF0aW9uLW92ZXInO1xuICAgICAgYnVmZkN4dC5maWxsU3R5bGUgPSBvcHRpb25zLmJnO1xuICAgICAgYnVmZkN4dC5yZWN0KDAsIDAsIHdpZHRoLCBoZWlnaHQpO1xuICAgICAgYnVmZkN4dC5maWxsKCk7XG4gICAgfVxuICB9XG4gIHJldHVybiBidWZmQ2FudmFzO1xufTtcbmZ1bmN0aW9uIGI2NFRvQmxvYihiNjQsIG1pbWVUeXBlKSB7XG4gIHZhciBieXRlcyA9IGF0b2IoYjY0KTtcbiAgdmFyIGJ1ZmYgPSBuZXcgQXJyYXlCdWZmZXIoYnl0ZXMubGVuZ3RoKTtcbiAgdmFyIGJ1ZmZVaW50OCA9IG5ldyBVaW50OEFycmF5KGJ1ZmYpO1xuICBmb3IgKHZhciBpID0gMDsgaSA8IGJ5dGVzLmxlbmd0aDsgaSsrKSB7XG4gICAgYnVmZlVpbnQ4W2ldID0gYnl0ZXMuY2hhckNvZGVBdChpKTtcbiAgfVxuICByZXR1cm4gbmV3IEJsb2IoW2J1ZmZdLCB7XG4gICAgdHlwZTogbWltZVR5cGVcbiAgfSk7XG59XG5mdW5jdGlvbiBiNjRVcmlUb0I2NChiNjR1cmkpIHtcbiAgdmFyIGkgPSBiNjR1cmkuaW5kZXhPZignLCcpO1xuICByZXR1cm4gYjY0dXJpLnN1YnN0cihpICsgMSk7XG59XG5mdW5jdGlvbiBvdXRwdXQob3B0aW9ucywgY2FudmFzLCBtaW1lVHlwZSkge1xuICB2YXIgZ2V0QjY0VXJpID0gZnVuY3Rpb24gZ2V0QjY0VXJpKCkge1xuICAgIHJldHVybiBjYW52YXMudG9EYXRhVVJMKG1pbWVUeXBlLCBvcHRpb25zLnF1YWxpdHkpO1xuICB9O1xuICBzd2l0Y2ggKG9wdGlvbnMub3V0cHV0KSB7XG4gICAgY2FzZSAnYmxvYi1wcm9taXNlJzpcbiAgICAgIHJldHVybiBuZXcgUHJvbWlzZSQxKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBjYW52YXMudG9CbG9iKGZ1bmN0aW9uIChibG9iKSB7XG4gICAgICAgICAgICBpZiAoYmxvYiAhPSBudWxsKSB7XG4gICAgICAgICAgICAgIHJlc29sdmUoYmxvYik7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICByZWplY3QobmV3IEVycm9yKCdgY2FudmFzLnRvQmxvYigpYCBzZW50IGEgbnVsbCB2YWx1ZSBpbiBpdHMgY2FsbGJhY2snKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSwgbWltZVR5cGUsIG9wdGlvbnMucXVhbGl0eSk7XG4gICAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICAgIHJlamVjdChlcnIpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICBjYXNlICdibG9iJzpcbiAgICAgIHJldHVybiBiNjRUb0Jsb2IoYjY0VXJpVG9CNjQoZ2V0QjY0VXJpKCkpLCBtaW1lVHlwZSk7XG4gICAgY2FzZSAnYmFzZTY0JzpcbiAgICAgIHJldHVybiBiNjRVcmlUb0I2NChnZXRCNjRVcmkoKSk7XG4gICAgY2FzZSAnYmFzZTY0dXJpJzpcbiAgICBkZWZhdWx0OlxuICAgICAgcmV0dXJuIGdldEI2NFVyaSgpO1xuICB9XG59XG5DUnAkMi5wbmcgPSBmdW5jdGlvbiAob3B0aW9ucykge1xuICByZXR1cm4gb3V0cHV0KG9wdGlvbnMsIHRoaXMuYnVmZmVyQ2FudmFzSW1hZ2Uob3B0aW9ucyksICdpbWFnZS9wbmcnKTtcbn07XG5DUnAkMi5qcGcgPSBmdW5jdGlvbiAob3B0aW9ucykge1xuICByZXR1cm4gb3V0cHV0KG9wdGlvbnMsIHRoaXMuYnVmZmVyQ2FudmFzSW1hZ2Uob3B0aW9ucyksICdpbWFnZS9qcGVnJyk7XG59O1xuXG52YXIgQ1JwJDEgPSB7fTtcbkNScCQxLm5vZGVTaGFwZUltcGwgPSBmdW5jdGlvbiAobmFtZSwgY29udGV4dCwgY2VudGVyWCwgY2VudGVyWSwgd2lkdGgsIGhlaWdodCwgcG9pbnRzLCBjb3JuZXJzKSB7XG4gIHN3aXRjaCAobmFtZSkge1xuICAgIGNhc2UgJ2VsbGlwc2UnOlxuICAgICAgcmV0dXJuIHRoaXMuZHJhd0VsbGlwc2VQYXRoKGNvbnRleHQsIGNlbnRlclgsIGNlbnRlclksIHdpZHRoLCBoZWlnaHQpO1xuICAgIGNhc2UgJ3BvbHlnb24nOlxuICAgICAgcmV0dXJuIHRoaXMuZHJhd1BvbHlnb25QYXRoKGNvbnRleHQsIGNlbnRlclgsIGNlbnRlclksIHdpZHRoLCBoZWlnaHQsIHBvaW50cyk7XG4gICAgY2FzZSAncm91bmQtcG9seWdvbic6XG4gICAgICByZXR1cm4gdGhpcy5kcmF3Um91bmRQb2x5Z29uUGF0aChjb250ZXh0LCBjZW50ZXJYLCBjZW50ZXJZLCB3aWR0aCwgaGVpZ2h0LCBwb2ludHMsIGNvcm5lcnMpO1xuICAgIGNhc2UgJ3JvdW5kcmVjdGFuZ2xlJzpcbiAgICBjYXNlICdyb3VuZC1yZWN0YW5nbGUnOlxuICAgICAgcmV0dXJuIHRoaXMuZHJhd1JvdW5kUmVjdGFuZ2xlUGF0aChjb250ZXh0LCBjZW50ZXJYLCBjZW50ZXJZLCB3aWR0aCwgaGVpZ2h0LCBjb3JuZXJzKTtcbiAgICBjYXNlICdjdXRyZWN0YW5nbGUnOlxuICAgIGNhc2UgJ2N1dC1yZWN0YW5nbGUnOlxuICAgICAgcmV0dXJuIHRoaXMuZHJhd0N1dFJlY3RhbmdsZVBhdGgoY29udGV4dCwgY2VudGVyWCwgY2VudGVyWSwgd2lkdGgsIGhlaWdodCwgcG9pbnRzLCBjb3JuZXJzKTtcbiAgICBjYXNlICdib3R0b21yb3VuZHJlY3RhbmdsZSc6XG4gICAgY2FzZSAnYm90dG9tLXJvdW5kLXJlY3RhbmdsZSc6XG4gICAgICByZXR1cm4gdGhpcy5kcmF3Qm90dG9tUm91bmRSZWN0YW5nbGVQYXRoKGNvbnRleHQsIGNlbnRlclgsIGNlbnRlclksIHdpZHRoLCBoZWlnaHQsIGNvcm5lcnMpO1xuICAgIGNhc2UgJ2JhcnJlbCc6XG4gICAgICByZXR1cm4gdGhpcy5kcmF3QmFycmVsUGF0aChjb250ZXh0LCBjZW50ZXJYLCBjZW50ZXJZLCB3aWR0aCwgaGVpZ2h0KTtcbiAgfVxufTtcblxudmFyIENSID0gQ2FudmFzUmVuZGVyZXI7XG52YXIgQ1JwID0gQ2FudmFzUmVuZGVyZXIucHJvdG90eXBlO1xuQ1JwLkNBTlZBU19MQVlFUlMgPSAzO1xuLy9cbkNScC5TRUxFQ1RfQk9YID0gMDtcbkNScC5EUkFHID0gMTtcbkNScC5OT0RFID0gMjtcbkNScC5XRUJHTCA9IDM7XG5DUnAuQ0FOVkFTX1RZUEVTID0gWycyZCcsICcyZCcsICcyZCcsICd3ZWJnbDInXTtcbkNScC5CVUZGRVJfQ09VTlQgPSAzO1xuLy9cbkNScC5URVhUVVJFX0JVRkZFUiA9IDA7XG5DUnAuTU9USU9OQkxVUl9CVUZGRVJfTk9ERSA9IDE7XG5DUnAuTU9USU9OQkxVUl9CVUZGRVJfRFJBRyA9IDI7XG5mdW5jdGlvbiBDYW52YXNSZW5kZXJlcihvcHRpb25zKSB7XG4gIHZhciByID0gdGhpcztcbiAgdmFyIGNvbnRhaW5lcldpbmRvdyA9IHIuY3kud2luZG93KCk7XG4gIHZhciBkb2N1bWVudCA9IGNvbnRhaW5lcldpbmRvdy5kb2N1bWVudDtcbiAgaWYgKG9wdGlvbnMud2ViZ2wpIHtcbiAgICBDUnAuQ0FOVkFTX0xBWUVSUyA9IHIuQ0FOVkFTX0xBWUVSUyA9IDQ7XG4gICAgY29uc29sZS5sb2coJ3dlYmdsIHJlbmRlcmluZyBlbmFibGVkJyk7XG4gIH1cbiAgci5kYXRhID0ge1xuICAgIGNhbnZhc2VzOiBuZXcgQXJyYXkoQ1JwLkNBTlZBU19MQVlFUlMpLFxuICAgIGNvbnRleHRzOiBuZXcgQXJyYXkoQ1JwLkNBTlZBU19MQVlFUlMpLFxuICAgIGNhbnZhc05lZWRzUmVkcmF3OiBuZXcgQXJyYXkoQ1JwLkNBTlZBU19MQVlFUlMpLFxuICAgIGJ1ZmZlckNhbnZhc2VzOiBuZXcgQXJyYXkoQ1JwLkJVRkZFUl9DT1VOVCksXG4gICAgYnVmZmVyQ29udGV4dHM6IG5ldyBBcnJheShDUnAuQ0FOVkFTX0xBWUVSUylcbiAgfTtcbiAgdmFyIHRhcEhsT2ZmQXR0ciA9ICctd2Via2l0LXRhcC1oaWdobGlnaHQtY29sb3InO1xuICB2YXIgdGFwSGxPZmZTdHlsZSA9ICdyZ2JhKDAsMCwwLDApJztcbiAgci5kYXRhLmNhbnZhc0NvbnRhaW5lciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpOyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLXVuZGVmXG4gIHZhciBjb250YWluZXJTdHlsZSA9IHIuZGF0YS5jYW52YXNDb250YWluZXIuc3R5bGU7XG4gIHIuZGF0YS5jYW52YXNDb250YWluZXIuc3R5bGVbdGFwSGxPZmZBdHRyXSA9IHRhcEhsT2ZmU3R5bGU7XG4gIGNvbnRhaW5lclN0eWxlLnBvc2l0aW9uID0gJ3JlbGF0aXZlJztcbiAgY29udGFpbmVyU3R5bGUuekluZGV4ID0gJzAnO1xuICBjb250YWluZXJTdHlsZS5vdmVyZmxvdyA9ICdoaWRkZW4nO1xuICB2YXIgY29udGFpbmVyID0gb3B0aW9ucy5jeS5jb250YWluZXIoKTtcbiAgY29udGFpbmVyLmFwcGVuZENoaWxkKHIuZGF0YS5jYW52YXNDb250YWluZXIpO1xuICBjb250YWluZXIuc3R5bGVbdGFwSGxPZmZBdHRyXSA9IHRhcEhsT2ZmU3R5bGU7XG4gIHZhciBzdHlsZU1hcCA9IHtcbiAgICAnLXdlYmtpdC11c2VyLXNlbGVjdCc6ICdub25lJyxcbiAgICAnLW1vei11c2VyLXNlbGVjdCc6ICctbW96LW5vbmUnLFxuICAgICd1c2VyLXNlbGVjdCc6ICdub25lJyxcbiAgICAnLXdlYmtpdC10YXAtaGlnaGxpZ2h0LWNvbG9yJzogJ3JnYmEoMCwwLDAsMCknLFxuICAgICdvdXRsaW5lLXN0eWxlJzogJ25vbmUnXG4gIH07XG4gIGlmIChtcygpKSB7XG4gICAgc3R5bGVNYXBbJy1tcy10b3VjaC1hY3Rpb24nXSA9ICdub25lJztcbiAgICBzdHlsZU1hcFsndG91Y2gtYWN0aW9uJ10gPSAnbm9uZSc7XG4gIH1cbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBDUnAuQ0FOVkFTX0xBWUVSUzsgaSsrKSB7XG4gICAgdmFyIGNhbnZhcyA9IHIuZGF0YS5jYW52YXNlc1tpXSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2NhbnZhcycpOyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLXVuZGVmXG4gICAgdmFyIHR5cGUgPSBDUnAuQ0FOVkFTX1RZUEVTW2ldO1xuICAgIHIuZGF0YS5jb250ZXh0c1tpXSA9IGNhbnZhcy5nZXRDb250ZXh0KHR5cGUpO1xuICAgIGlmICghci5kYXRhLmNvbnRleHRzW2ldKSB7XG4gICAgICBlcnJvcignQ291bGQgbm90IGNyZWF0ZSBjYW52YXMgb2YgdHlwZSAnICsgdHlwZSk7XG4gICAgfVxuICAgIE9iamVjdC5rZXlzKHN0eWxlTWFwKS5mb3JFYWNoKGZ1bmN0aW9uIChrKSB7XG4gICAgICBjYW52YXMuc3R5bGVba10gPSBzdHlsZU1hcFtrXTtcbiAgICB9KTtcbiAgICBjYW52YXMuc3R5bGUucG9zaXRpb24gPSAnYWJzb2x1dGUnO1xuICAgIGNhbnZhcy5zZXRBdHRyaWJ1dGUoJ2RhdGEtaWQnLCAnbGF5ZXInICsgaSk7XG4gICAgY2FudmFzLnN0eWxlLnpJbmRleCA9IFN0cmluZyhDUnAuQ0FOVkFTX0xBWUVSUyAtIGkpO1xuICAgIHIuZGF0YS5jYW52YXNDb250YWluZXIuYXBwZW5kQ2hpbGQoY2FudmFzKTtcbiAgICByLmRhdGEuY2FudmFzTmVlZHNSZWRyYXdbaV0gPSBmYWxzZTtcbiAgfVxuICByLmRhdGEudG9wQ2FudmFzID0gci5kYXRhLmNhbnZhc2VzWzBdO1xuICByLmRhdGEuY2FudmFzZXNbQ1JwLk5PREVdLnNldEF0dHJpYnV0ZSgnZGF0YS1pZCcsICdsYXllcicgKyBDUnAuTk9ERSArICctbm9kZScpO1xuICByLmRhdGEuY2FudmFzZXNbQ1JwLlNFTEVDVF9CT1hdLnNldEF0dHJpYnV0ZSgnZGF0YS1pZCcsICdsYXllcicgKyBDUnAuU0VMRUNUX0JPWCArICctc2VsZWN0Ym94Jyk7XG4gIHIuZGF0YS5jYW52YXNlc1tDUnAuRFJBR10uc2V0QXR0cmlidXRlKCdkYXRhLWlkJywgJ2xheWVyJyArIENScC5EUkFHICsgJy1kcmFnJyk7XG4gIGlmIChyLmRhdGEuY2FudmFzZXNbQ1JwLldFQkdMXSkge1xuICAgIHIuZGF0YS5jYW52YXNlc1tDUnAuV0VCR0xdLnNldEF0dHJpYnV0ZSgnZGF0YS1pZCcsICdsYXllcicgKyBDUnAuV0VCR0wgKyAnLXdlYmdsJyk7XG4gIH1cbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBDUnAuQlVGRkVSX0NPVU5UOyBpKyspIHtcbiAgICByLmRhdGEuYnVmZmVyQ2FudmFzZXNbaV0gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdjYW52YXMnKTsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby11bmRlZlxuICAgIHIuZGF0YS5idWZmZXJDb250ZXh0c1tpXSA9IHIuZGF0YS5idWZmZXJDYW52YXNlc1tpXS5nZXRDb250ZXh0KCcyZCcpO1xuICAgIHIuZGF0YS5idWZmZXJDYW52YXNlc1tpXS5zdHlsZS5wb3NpdGlvbiA9ICdhYnNvbHV0ZSc7XG4gICAgci5kYXRhLmJ1ZmZlckNhbnZhc2VzW2ldLnNldEF0dHJpYnV0ZSgnZGF0YS1pZCcsICdidWZmZXInICsgaSk7XG4gICAgci5kYXRhLmJ1ZmZlckNhbnZhc2VzW2ldLnN0eWxlLnpJbmRleCA9IFN0cmluZygtaSAtIDEpO1xuICAgIHIuZGF0YS5idWZmZXJDYW52YXNlc1tpXS5zdHlsZS52aXNpYmlsaXR5ID0gJ2hpZGRlbic7XG4gICAgLy9yLmRhdGEuY2FudmFzQ29udGFpbmVyLmFwcGVuZENoaWxkKHIuZGF0YS5idWZmZXJDYW52YXNlc1tpXSk7XG4gIH1cbiAgci5wYXRoc0VuYWJsZWQgPSB0cnVlO1xuICB2YXIgZW1wdHlCYiA9IG1ha2VCb3VuZGluZ0JveCgpO1xuICB2YXIgZ2V0Qm94Q2VudGVyID0gZnVuY3Rpb24gZ2V0Qm94Q2VudGVyKGJiKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHg6IChiYi54MSArIGJiLngyKSAvIDIsXG4gICAgICB5OiAoYmIueTEgKyBiYi55MikgLyAyXG4gICAgfTtcbiAgfTtcbiAgdmFyIGdldENlbnRlck9mZnNldCA9IGZ1bmN0aW9uIGdldENlbnRlck9mZnNldChiYikge1xuICAgIHJldHVybiB7XG4gICAgICB4OiAtYmIudyAvIDIsXG4gICAgICB5OiAtYmIuaCAvIDJcbiAgICB9O1xuICB9O1xuICB2YXIgYmFja2dyb3VuZFRpbWVzdGFtcEhhc0NoYW5nZWQgPSBmdW5jdGlvbiBiYWNrZ3JvdW5kVGltZXN0YW1wSGFzQ2hhbmdlZChlbGUpIHtcbiAgICB2YXIgX3AgPSBlbGVbMF0uX3ByaXZhdGU7XG4gICAgdmFyIHNhbWUgPSBfcC5vbGRCYWNrZ3JvdW5kVGltZXN0YW1wID09PSBfcC5iYWNrZ3JvdW5kVGltZXN0YW1wO1xuICAgIHJldHVybiAhc2FtZTtcbiAgfTtcbiAgdmFyIGdldFN0eWxlS2V5ID0gZnVuY3Rpb24gZ2V0U3R5bGVLZXkoZWxlKSB7XG4gICAgcmV0dXJuIGVsZVswXS5fcHJpdmF0ZS5ub2RlS2V5O1xuICB9O1xuICB2YXIgZ2V0TGFiZWxLZXkgPSBmdW5jdGlvbiBnZXRMYWJlbEtleShlbGUpIHtcbiAgICByZXR1cm4gZWxlWzBdLl9wcml2YXRlLmxhYmVsU3R5bGVLZXk7XG4gIH07XG4gIHZhciBnZXRTb3VyY2VMYWJlbEtleSA9IGZ1bmN0aW9uIGdldFNvdXJjZUxhYmVsS2V5KGVsZSkge1xuICAgIHJldHVybiBlbGVbMF0uX3ByaXZhdGUuc291cmNlTGFiZWxTdHlsZUtleTtcbiAgfTtcbiAgdmFyIGdldFRhcmdldExhYmVsS2V5ID0gZnVuY3Rpb24gZ2V0VGFyZ2V0TGFiZWxLZXkoZWxlKSB7XG4gICAgcmV0dXJuIGVsZVswXS5fcHJpdmF0ZS50YXJnZXRMYWJlbFN0eWxlS2V5O1xuICB9O1xuICB2YXIgZHJhd0VsZW1lbnQgPSBmdW5jdGlvbiBkcmF3RWxlbWVudChjb250ZXh0LCBlbGUsIGJiLCBzY2FsZWRMYWJlbFNob3duLCB1c2VFbGVPcGFjaXR5KSB7XG4gICAgcmV0dXJuIHIuZHJhd0VsZW1lbnQoY29udGV4dCwgZWxlLCBiYiwgZmFsc2UsIGZhbHNlLCB1c2VFbGVPcGFjaXR5KTtcbiAgfTtcbiAgdmFyIGRyYXdMYWJlbCA9IGZ1bmN0aW9uIGRyYXdMYWJlbChjb250ZXh0LCBlbGUsIGJiLCBzY2FsZWRMYWJlbFNob3duLCB1c2VFbGVPcGFjaXR5KSB7XG4gICAgcmV0dXJuIHIuZHJhd0VsZW1lbnRUZXh0KGNvbnRleHQsIGVsZSwgYmIsIHNjYWxlZExhYmVsU2hvd24sICdtYWluJywgdXNlRWxlT3BhY2l0eSk7XG4gIH07XG4gIHZhciBkcmF3U291cmNlTGFiZWwgPSBmdW5jdGlvbiBkcmF3U291cmNlTGFiZWwoY29udGV4dCwgZWxlLCBiYiwgc2NhbGVkTGFiZWxTaG93biwgdXNlRWxlT3BhY2l0eSkge1xuICAgIHJldHVybiByLmRyYXdFbGVtZW50VGV4dChjb250ZXh0LCBlbGUsIGJiLCBzY2FsZWRMYWJlbFNob3duLCAnc291cmNlJywgdXNlRWxlT3BhY2l0eSk7XG4gIH07XG4gIHZhciBkcmF3VGFyZ2V0TGFiZWwgPSBmdW5jdGlvbiBkcmF3VGFyZ2V0TGFiZWwoY29udGV4dCwgZWxlLCBiYiwgc2NhbGVkTGFiZWxTaG93biwgdXNlRWxlT3BhY2l0eSkge1xuICAgIHJldHVybiByLmRyYXdFbGVtZW50VGV4dChjb250ZXh0LCBlbGUsIGJiLCBzY2FsZWRMYWJlbFNob3duLCAndGFyZ2V0JywgdXNlRWxlT3BhY2l0eSk7XG4gIH07XG4gIHZhciBnZXRFbGVtZW50Qm94ID0gZnVuY3Rpb24gZ2V0RWxlbWVudEJveChlbGUpIHtcbiAgICBlbGUuYm91bmRpbmdCb3goKTtcbiAgICByZXR1cm4gZWxlWzBdLl9wcml2YXRlLmJvZHlCb3VuZHM7XG4gIH07XG4gIHZhciBnZXRMYWJlbEJveCA9IGZ1bmN0aW9uIGdldExhYmVsQm94KGVsZSkge1xuICAgIGVsZS5ib3VuZGluZ0JveCgpO1xuICAgIHJldHVybiBlbGVbMF0uX3ByaXZhdGUubGFiZWxCb3VuZHMubWFpbiB8fCBlbXB0eUJiO1xuICB9O1xuICB2YXIgZ2V0U291cmNlTGFiZWxCb3ggPSBmdW5jdGlvbiBnZXRTb3VyY2VMYWJlbEJveChlbGUpIHtcbiAgICBlbGUuYm91bmRpbmdCb3goKTtcbiAgICByZXR1cm4gZWxlWzBdLl9wcml2YXRlLmxhYmVsQm91bmRzLnNvdXJjZSB8fCBlbXB0eUJiO1xuICB9O1xuICB2YXIgZ2V0VGFyZ2V0TGFiZWxCb3ggPSBmdW5jdGlvbiBnZXRUYXJnZXRMYWJlbEJveChlbGUpIHtcbiAgICBlbGUuYm91bmRpbmdCb3goKTtcbiAgICByZXR1cm4gZWxlWzBdLl9wcml2YXRlLmxhYmVsQm91bmRzLnRhcmdldCB8fCBlbXB0eUJiO1xuICB9O1xuICB2YXIgaXNMYWJlbFZpc2libGVBdFNjYWxlID0gZnVuY3Rpb24gaXNMYWJlbFZpc2libGVBdFNjYWxlKGVsZSwgc2NhbGVkTGFiZWxTaG93bikge1xuICAgIHJldHVybiBzY2FsZWRMYWJlbFNob3duO1xuICB9O1xuICB2YXIgZ2V0RWxlbWVudFJvdGF0aW9uUG9pbnQgPSBmdW5jdGlvbiBnZXRFbGVtZW50Um90YXRpb25Qb2ludChlbGUpIHtcbiAgICByZXR1cm4gZ2V0Qm94Q2VudGVyKGdldEVsZW1lbnRCb3goZWxlKSk7XG4gIH07XG4gIHZhciBhZGRUZXh0TWFyZ2luID0gZnVuY3Rpb24gYWRkVGV4dE1hcmdpbihwcmVmaXgsIHB0LCBlbGUpIHtcbiAgICB2YXIgcHJlID0gcHJlZml4ID8gcHJlZml4ICsgJy0nIDogJyc7XG4gICAgcmV0dXJuIHtcbiAgICAgIHg6IHB0LnggKyBlbGUucHN0eWxlKHByZSArICd0ZXh0LW1hcmdpbi14JykucGZWYWx1ZSxcbiAgICAgIHk6IHB0LnkgKyBlbGUucHN0eWxlKHByZSArICd0ZXh0LW1hcmdpbi15JykucGZWYWx1ZVxuICAgIH07XG4gIH07XG4gIHZhciBnZXRSc1B0ID0gZnVuY3Rpb24gZ2V0UnNQdChlbGUsIHgsIHkpIHtcbiAgICB2YXIgcnMgPSBlbGVbMF0uX3ByaXZhdGUucnNjcmF0Y2g7XG4gICAgcmV0dXJuIHtcbiAgICAgIHg6IHJzW3hdLFxuICAgICAgeTogcnNbeV1cbiAgICB9O1xuICB9O1xuICB2YXIgZ2V0TGFiZWxSb3RhdGlvblBvaW50ID0gZnVuY3Rpb24gZ2V0TGFiZWxSb3RhdGlvblBvaW50KGVsZSkge1xuICAgIHJldHVybiBhZGRUZXh0TWFyZ2luKCcnLCBnZXRSc1B0KGVsZSwgJ2xhYmVsWCcsICdsYWJlbFknKSwgZWxlKTtcbiAgfTtcbiAgdmFyIGdldFNvdXJjZUxhYmVsUm90YXRpb25Qb2ludCA9IGZ1bmN0aW9uIGdldFNvdXJjZUxhYmVsUm90YXRpb25Qb2ludChlbGUpIHtcbiAgICByZXR1cm4gYWRkVGV4dE1hcmdpbignc291cmNlJywgZ2V0UnNQdChlbGUsICdzb3VyY2VMYWJlbFgnLCAnc291cmNlTGFiZWxZJyksIGVsZSk7XG4gIH07XG4gIHZhciBnZXRUYXJnZXRMYWJlbFJvdGF0aW9uUG9pbnQgPSBmdW5jdGlvbiBnZXRUYXJnZXRMYWJlbFJvdGF0aW9uUG9pbnQoZWxlKSB7XG4gICAgcmV0dXJuIGFkZFRleHRNYXJnaW4oJ3RhcmdldCcsIGdldFJzUHQoZWxlLCAndGFyZ2V0TGFiZWxYJywgJ3RhcmdldExhYmVsWScpLCBlbGUpO1xuICB9O1xuICB2YXIgZ2V0RWxlbWVudFJvdGF0aW9uT2Zmc2V0ID0gZnVuY3Rpb24gZ2V0RWxlbWVudFJvdGF0aW9uT2Zmc2V0KGVsZSkge1xuICAgIHJldHVybiBnZXRDZW50ZXJPZmZzZXQoZ2V0RWxlbWVudEJveChlbGUpKTtcbiAgfTtcbiAgdmFyIGdldFNvdXJjZUxhYmVsUm90YXRpb25PZmZzZXQgPSBmdW5jdGlvbiBnZXRTb3VyY2VMYWJlbFJvdGF0aW9uT2Zmc2V0KGVsZSkge1xuICAgIHJldHVybiBnZXRDZW50ZXJPZmZzZXQoZ2V0U291cmNlTGFiZWxCb3goZWxlKSk7XG4gIH07XG4gIHZhciBnZXRUYXJnZXRMYWJlbFJvdGF0aW9uT2Zmc2V0ID0gZnVuY3Rpb24gZ2V0VGFyZ2V0TGFiZWxSb3RhdGlvbk9mZnNldChlbGUpIHtcbiAgICByZXR1cm4gZ2V0Q2VudGVyT2Zmc2V0KGdldFRhcmdldExhYmVsQm94KGVsZSkpO1xuICB9O1xuICB2YXIgZ2V0TGFiZWxSb3RhdGlvbk9mZnNldCA9IGZ1bmN0aW9uIGdldExhYmVsUm90YXRpb25PZmZzZXQoZWxlKSB7XG4gICAgdmFyIGJiID0gZ2V0TGFiZWxCb3goZWxlKTtcbiAgICB2YXIgcCA9IGdldENlbnRlck9mZnNldChnZXRMYWJlbEJveChlbGUpKTtcbiAgICBpZiAoZWxlLmlzTm9kZSgpKSB7XG4gICAgICBzd2l0Y2ggKGVsZS5wc3R5bGUoJ3RleHQtaGFsaWduJykudmFsdWUpIHtcbiAgICAgICAgY2FzZSAnbGVmdCc6XG4gICAgICAgICAgcC54ID0gLWJiLncgLSAoYmIubGVmdFBhZCB8fCAwKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAncmlnaHQnOlxuICAgICAgICAgIHAueCA9IC0oYmIucmlnaHRQYWQgfHwgMCk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgICBzd2l0Y2ggKGVsZS5wc3R5bGUoJ3RleHQtdmFsaWduJykudmFsdWUpIHtcbiAgICAgICAgY2FzZSAndG9wJzpcbiAgICAgICAgICBwLnkgPSAtYmIuaCAtIChiYi50b3BQYWQgfHwgMCk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgJ2JvdHRvbSc6XG4gICAgICAgICAgcC55ID0gLShiYi5ib3RQYWQgfHwgMCk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBwO1xuICB9O1xuICB2YXIgZWxlVHhyQ2FjaGUgPSByLmRhdGEuZWxlVHhyQ2FjaGUgPSBuZXcgRWxlbWVudFRleHR1cmVDYWNoZShyLCB7XG4gICAgZ2V0S2V5OiBnZXRTdHlsZUtleSxcbiAgICBkb2VzRWxlSW52YWxpZGF0ZUtleTogYmFja2dyb3VuZFRpbWVzdGFtcEhhc0NoYW5nZWQsXG4gICAgZHJhd0VsZW1lbnQ6IGRyYXdFbGVtZW50LFxuICAgIGdldEJvdW5kaW5nQm94OiBnZXRFbGVtZW50Qm94LFxuICAgIGdldFJvdGF0aW9uUG9pbnQ6IGdldEVsZW1lbnRSb3RhdGlvblBvaW50LFxuICAgIGdldFJvdGF0aW9uT2Zmc2V0OiBnZXRFbGVtZW50Um90YXRpb25PZmZzZXQsXG4gICAgYWxsb3dFZGdlVHhyQ2FjaGluZzogZmFsc2UsXG4gICAgYWxsb3dQYXJlbnRUeHJDYWNoaW5nOiBmYWxzZVxuICB9KTtcbiAgdmFyIGxibFR4ckNhY2hlID0gci5kYXRhLmxibFR4ckNhY2hlID0gbmV3IEVsZW1lbnRUZXh0dXJlQ2FjaGUociwge1xuICAgIGdldEtleTogZ2V0TGFiZWxLZXksXG4gICAgZHJhd0VsZW1lbnQ6IGRyYXdMYWJlbCxcbiAgICBnZXRCb3VuZGluZ0JveDogZ2V0TGFiZWxCb3gsXG4gICAgZ2V0Um90YXRpb25Qb2ludDogZ2V0TGFiZWxSb3RhdGlvblBvaW50LFxuICAgIGdldFJvdGF0aW9uT2Zmc2V0OiBnZXRMYWJlbFJvdGF0aW9uT2Zmc2V0LFxuICAgIGlzVmlzaWJsZTogaXNMYWJlbFZpc2libGVBdFNjYWxlXG4gIH0pO1xuICB2YXIgc2xiVHhyQ2FjaGUgPSByLmRhdGEuc2xiVHhyQ2FjaGUgPSBuZXcgRWxlbWVudFRleHR1cmVDYWNoZShyLCB7XG4gICAgZ2V0S2V5OiBnZXRTb3VyY2VMYWJlbEtleSxcbiAgICBkcmF3RWxlbWVudDogZHJhd1NvdXJjZUxhYmVsLFxuICAgIGdldEJvdW5kaW5nQm94OiBnZXRTb3VyY2VMYWJlbEJveCxcbiAgICBnZXRSb3RhdGlvblBvaW50OiBnZXRTb3VyY2VMYWJlbFJvdGF0aW9uUG9pbnQsXG4gICAgZ2V0Um90YXRpb25PZmZzZXQ6IGdldFNvdXJjZUxhYmVsUm90YXRpb25PZmZzZXQsXG4gICAgaXNWaXNpYmxlOiBpc0xhYmVsVmlzaWJsZUF0U2NhbGVcbiAgfSk7XG4gIHZhciB0bGJUeHJDYWNoZSA9IHIuZGF0YS50bGJUeHJDYWNoZSA9IG5ldyBFbGVtZW50VGV4dHVyZUNhY2hlKHIsIHtcbiAgICBnZXRLZXk6IGdldFRhcmdldExhYmVsS2V5LFxuICAgIGRyYXdFbGVtZW50OiBkcmF3VGFyZ2V0TGFiZWwsXG4gICAgZ2V0Qm91bmRpbmdCb3g6IGdldFRhcmdldExhYmVsQm94LFxuICAgIGdldFJvdGF0aW9uUG9pbnQ6IGdldFRhcmdldExhYmVsUm90YXRpb25Qb2ludCxcbiAgICBnZXRSb3RhdGlvbk9mZnNldDogZ2V0VGFyZ2V0TGFiZWxSb3RhdGlvbk9mZnNldCxcbiAgICBpc1Zpc2libGU6IGlzTGFiZWxWaXNpYmxlQXRTY2FsZVxuICB9KTtcbiAgdmFyIGx5clR4ckNhY2hlID0gci5kYXRhLmx5clR4ckNhY2hlID0gbmV3IExheWVyZWRUZXh0dXJlQ2FjaGUocik7XG4gIHIub25VcGRhdGVFbGVDYWxjcyhmdW5jdGlvbiBpbnZhbGlkYXRlVGV4dHVyZUNhY2hlcyh3aWxsRHJhdywgZWxlcykge1xuICAgIC8vIGVhY2ggY2FjaGUgc2hvdWxkIGNoZWNrIGZvciBzdWIta2V5IGRpZmYgdG8gc2VlIHRoYXQgdGhlIHVwZGF0ZSBhZmZlY3RzIHRoYXQgY2FjaGUgcGFydGljdWxhcmx5XG4gICAgZWxlVHhyQ2FjaGUuaW52YWxpZGF0ZUVsZW1lbnRzKGVsZXMpO1xuICAgIGxibFR4ckNhY2hlLmludmFsaWRhdGVFbGVtZW50cyhlbGVzKTtcbiAgICBzbGJUeHJDYWNoZS5pbnZhbGlkYXRlRWxlbWVudHMoZWxlcyk7XG4gICAgdGxiVHhyQ2FjaGUuaW52YWxpZGF0ZUVsZW1lbnRzKGVsZXMpO1xuXG4gICAgLy8gYW55IGNoYW5nZSBpbnZhbGlkYXRlcyB0aGUgbGF5ZXJzXG4gICAgbHlyVHhyQ2FjaGUuaW52YWxpZGF0ZUVsZW1lbnRzKGVsZXMpO1xuXG4gICAgLy8gdXBkYXRlIHRoZSBvbGQgYmcgdGltZXN0YW1wIHNvIGRpZmZzIGNhbiBiZSBkb25lIGluIHRoZSBlbGUgdHhyIGNhY2hlc1xuICAgIGZvciAodmFyIF9pID0gMDsgX2kgPCBlbGVzLmxlbmd0aDsgX2krKykge1xuICAgICAgdmFyIF9wID0gZWxlc1tfaV0uX3ByaXZhdGU7XG4gICAgICBfcC5vbGRCYWNrZ3JvdW5kVGltZXN0YW1wID0gX3AuYmFja2dyb3VuZFRpbWVzdGFtcDtcbiAgICB9XG4gIH0pO1xuICB2YXIgcmVmaW5lSW5MYXllcnMgPSBmdW5jdGlvbiByZWZpbmVJbkxheWVycyhyZXFzKSB7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCByZXFzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBseXJUeHJDYWNoZS5lbnF1ZXVlRWxlbWVudFJlZmluZW1lbnQocmVxc1tpXS5lbGUpO1xuICAgIH1cbiAgfTtcbiAgZWxlVHhyQ2FjaGUub25EZXF1ZXVlKHJlZmluZUluTGF5ZXJzKTtcbiAgbGJsVHhyQ2FjaGUub25EZXF1ZXVlKHJlZmluZUluTGF5ZXJzKTtcbiAgc2xiVHhyQ2FjaGUub25EZXF1ZXVlKHJlZmluZUluTGF5ZXJzKTtcbiAgdGxiVHhyQ2FjaGUub25EZXF1ZXVlKHJlZmluZUluTGF5ZXJzKTtcbiAgaWYgKG9wdGlvbnMud2ViZ2wpIHtcbiAgICByLmluaXRXZWJnbChvcHRpb25zLCB7XG4gICAgICBnZXRTdHlsZUtleTogZ2V0U3R5bGVLZXksXG4gICAgICBnZXRMYWJlbEtleTogZ2V0TGFiZWxLZXksXG4gICAgICBnZXRTb3VyY2VMYWJlbEtleTogZ2V0U291cmNlTGFiZWxLZXksXG4gICAgICBnZXRUYXJnZXRMYWJlbEtleTogZ2V0VGFyZ2V0TGFiZWxLZXksXG4gICAgICBkcmF3RWxlbWVudDogZHJhd0VsZW1lbnQsXG4gICAgICBkcmF3TGFiZWw6IGRyYXdMYWJlbCxcbiAgICAgIGRyYXdTb3VyY2VMYWJlbDogZHJhd1NvdXJjZUxhYmVsLFxuICAgICAgZHJhd1RhcmdldExhYmVsOiBkcmF3VGFyZ2V0TGFiZWwsXG4gICAgICBnZXRFbGVtZW50Qm94OiBnZXRFbGVtZW50Qm94LFxuICAgICAgZ2V0TGFiZWxCb3g6IGdldExhYmVsQm94LFxuICAgICAgZ2V0U291cmNlTGFiZWxCb3g6IGdldFNvdXJjZUxhYmVsQm94LFxuICAgICAgZ2V0VGFyZ2V0TGFiZWxCb3g6IGdldFRhcmdldExhYmVsQm94LFxuICAgICAgZ2V0RWxlbWVudFJvdGF0aW9uUG9pbnQ6IGdldEVsZW1lbnRSb3RhdGlvblBvaW50LFxuICAgICAgZ2V0RWxlbWVudFJvdGF0aW9uT2Zmc2V0OiBnZXRFbGVtZW50Um90YXRpb25PZmZzZXQsXG4gICAgICBnZXRMYWJlbFJvdGF0aW9uUG9pbnQ6IGdldExhYmVsUm90YXRpb25Qb2ludCxcbiAgICAgIGdldFNvdXJjZUxhYmVsUm90YXRpb25Qb2ludDogZ2V0U291cmNlTGFiZWxSb3RhdGlvblBvaW50LFxuICAgICAgZ2V0VGFyZ2V0TGFiZWxSb3RhdGlvblBvaW50OiBnZXRUYXJnZXRMYWJlbFJvdGF0aW9uUG9pbnQsXG4gICAgICBnZXRMYWJlbFJvdGF0aW9uT2Zmc2V0OiBnZXRMYWJlbFJvdGF0aW9uT2Zmc2V0LFxuICAgICAgZ2V0U291cmNlTGFiZWxSb3RhdGlvbk9mZnNldDogZ2V0U291cmNlTGFiZWxSb3RhdGlvbk9mZnNldCxcbiAgICAgIGdldFRhcmdldExhYmVsUm90YXRpb25PZmZzZXQ6IGdldFRhcmdldExhYmVsUm90YXRpb25PZmZzZXRcbiAgICB9KTtcbiAgfVxufVxuQ1JwLnJlZHJhd0hpbnQgPSBmdW5jdGlvbiAoZ3JvdXAsIGJvb2wpIHtcbiAgdmFyIHIgPSB0aGlzO1xuICBzd2l0Y2ggKGdyb3VwKSB7XG4gICAgY2FzZSAnZWxlcyc6XG4gICAgICByLmRhdGEuY2FudmFzTmVlZHNSZWRyYXdbQ1JwLk5PREVdID0gYm9vbDtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgJ2RyYWcnOlxuICAgICAgci5kYXRhLmNhbnZhc05lZWRzUmVkcmF3W0NScC5EUkFHXSA9IGJvb2w7XG4gICAgICBicmVhaztcbiAgICBjYXNlICdzZWxlY3QnOlxuICAgICAgci5kYXRhLmNhbnZhc05lZWRzUmVkcmF3W0NScC5TRUxFQ1RfQk9YXSA9IGJvb2w7XG4gICAgICBicmVhaztcbiAgICBjYXNlICdnYyc6XG4gICAgICByLmRhdGEuZ2MgPSB0cnVlO1xuICAgICAgYnJlYWs7XG4gIH1cbn07XG5cbi8vIHdoZXRoZXIgdG8gdXNlIFBhdGgyRCBjYWNoaW5nIGZvciBkcmF3aW5nXG52YXIgcGF0aHNJbXBsZCA9IHR5cGVvZiBQYXRoMkQgIT09ICd1bmRlZmluZWQnO1xuQ1JwLnBhdGgyZEVuYWJsZWQgPSBmdW5jdGlvbiAob24pIHtcbiAgaWYgKG9uID09PSB1bmRlZmluZWQpIHtcbiAgICByZXR1cm4gdGhpcy5wYXRoc0VuYWJsZWQ7XG4gIH1cbiAgdGhpcy5wYXRoc0VuYWJsZWQgPSBvbiA/IHRydWUgOiBmYWxzZTtcbn07XG5DUnAudXNlUGF0aHMgPSBmdW5jdGlvbiAoKSB7XG4gIHJldHVybiBwYXRoc0ltcGxkICYmIHRoaXMucGF0aHNFbmFibGVkO1xufTtcbkNScC5zZXRJbWdTbW9vdGhpbmcgPSBmdW5jdGlvbiAoY29udGV4dCwgYm9vbCkge1xuICBpZiAoY29udGV4dC5pbWFnZVNtb290aGluZ0VuYWJsZWQgIT0gbnVsbCkge1xuICAgIGNvbnRleHQuaW1hZ2VTbW9vdGhpbmdFbmFibGVkID0gYm9vbDtcbiAgfSBlbHNlIHtcbiAgICBjb250ZXh0LndlYmtpdEltYWdlU21vb3RoaW5nRW5hYmxlZCA9IGJvb2w7XG4gICAgY29udGV4dC5tb3pJbWFnZVNtb290aGluZ0VuYWJsZWQgPSBib29sO1xuICAgIGNvbnRleHQubXNJbWFnZVNtb290aGluZ0VuYWJsZWQgPSBib29sO1xuICB9XG59O1xuQ1JwLmdldEltZ1Ntb290aGluZyA9IGZ1bmN0aW9uIChjb250ZXh0KSB7XG4gIGlmIChjb250ZXh0LmltYWdlU21vb3RoaW5nRW5hYmxlZCAhPSBudWxsKSB7XG4gICAgcmV0dXJuIGNvbnRleHQuaW1hZ2VTbW9vdGhpbmdFbmFibGVkO1xuICB9IGVsc2Uge1xuICAgIHJldHVybiBjb250ZXh0LndlYmtpdEltYWdlU21vb3RoaW5nRW5hYmxlZCB8fCBjb250ZXh0Lm1vekltYWdlU21vb3RoaW5nRW5hYmxlZCB8fCBjb250ZXh0Lm1zSW1hZ2VTbW9vdGhpbmdFbmFibGVkO1xuICB9XG59O1xuQ1JwLm1ha2VPZmZzY3JlZW5DYW52YXMgPSBmdW5jdGlvbiAod2lkdGgsIGhlaWdodCkge1xuICB2YXIgY2FudmFzO1xuICBpZiAoKHR5cGVvZiBPZmZzY3JlZW5DYW52YXMgPT09IFwidW5kZWZpbmVkXCIgPyBcInVuZGVmaW5lZFwiIDogX3R5cGVvZihPZmZzY3JlZW5DYW52YXMpKSAhPT0gKFwidW5kZWZpbmVkXCIgKSkge1xuICAgIGNhbnZhcyA9IG5ldyBPZmZzY3JlZW5DYW52YXMod2lkdGgsIGhlaWdodCk7XG4gIH0gZWxzZSB7XG4gICAgdmFyIGNvbnRhaW5lcldpbmRvdyA9IHRoaXMuY3kud2luZG93KCk7XG4gICAgdmFyIGRvY3VtZW50ID0gY29udGFpbmVyV2luZG93LmRvY3VtZW50O1xuICAgIGNhbnZhcyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2NhbnZhcycpOyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLXVuZGVmXG4gICAgY2FudmFzLndpZHRoID0gd2lkdGg7XG4gICAgY2FudmFzLmhlaWdodCA9IGhlaWdodDtcbiAgfVxuICByZXR1cm4gY2FudmFzO1xufTtcbltDUnAkYiwgQ1JwJGEsIENScCQ5LCBDUnAkOCwgQ1JwJDcsIENScCQ2LCBDUnAkNSwgQ1JwJDQsIENScCQzLCBDUnAkMiwgQ1JwJDFdLmZvckVhY2goZnVuY3Rpb24gKHByb3BzKSB7XG4gIGV4dGVuZChDUnAsIHByb3BzKTtcbn0pO1xuXG52YXIgcmVuZGVyZXIgPSBbe1xuICBuYW1lOiAnbnVsbCcsXG4gIGltcGw6IE51bGxSZW5kZXJlclxufSwge1xuICBuYW1lOiAnYmFzZScsXG4gIGltcGw6IEJSXG59LCB7XG4gIG5hbWU6ICdjYW52YXMnLFxuICBpbXBsOiBDUlxufV07XG5cbnZhciBpbmNFeHRzID0gW3tcbiAgdHlwZTogJ2xheW91dCcsXG4gIGV4dGVuc2lvbnM6IGxheW91dFxufSwge1xuICB0eXBlOiAncmVuZGVyZXInLFxuICBleHRlbnNpb25zOiByZW5kZXJlclxufV07XG5cbi8vIHJlZ2lzdGVyZWQgZXh0ZW5zaW9ucyB0byBjeXRvc2NhcGUsIGluZGV4ZWQgYnkgbmFtZVxudmFyIGV4dGVuc2lvbnMgPSB7fTtcblxuLy8gcmVnaXN0ZXJlZCBtb2R1bGVzIGZvciBleHRlbnNpb25zLCBpbmRleGVkIGJ5IG5hbWVcbnZhciBtb2R1bGVzID0ge307XG5mdW5jdGlvbiBzZXRFeHRlbnNpb24odHlwZSwgbmFtZSwgcmVnaXN0cmFudCkge1xuICB2YXIgZXh0ID0gcmVnaXN0cmFudDtcbiAgdmFyIG92ZXJyaWRlRXJyID0gZnVuY3Rpb24gb3ZlcnJpZGVFcnIoZmllbGQpIHtcbiAgICB3YXJuKCdDYW4gbm90IHJlZ2lzdGVyIGAnICsgbmFtZSArICdgIGZvciBgJyArIHR5cGUgKyAnYCBzaW5jZSBgJyArIGZpZWxkICsgJ2AgYWxyZWFkeSBleGlzdHMgaW4gdGhlIHByb3RvdHlwZSBhbmQgY2FuIG5vdCBiZSBvdmVycmlkZGVuJyk7XG4gIH07XG4gIGlmICh0eXBlID09PSAnY29yZScpIHtcbiAgICBpZiAoQ29yZS5wcm90b3R5cGVbbmFtZV0pIHtcbiAgICAgIHJldHVybiBvdmVycmlkZUVycihuYW1lKTtcbiAgICB9IGVsc2Uge1xuICAgICAgQ29yZS5wcm90b3R5cGVbbmFtZV0gPSByZWdpc3RyYW50O1xuICAgIH1cbiAgfSBlbHNlIGlmICh0eXBlID09PSAnY29sbGVjdGlvbicpIHtcbiAgICBpZiAoQ29sbGVjdGlvbi5wcm90b3R5cGVbbmFtZV0pIHtcbiAgICAgIHJldHVybiBvdmVycmlkZUVycihuYW1lKTtcbiAgICB9IGVsc2Uge1xuICAgICAgQ29sbGVjdGlvbi5wcm90b3R5cGVbbmFtZV0gPSByZWdpc3RyYW50O1xuICAgIH1cbiAgfSBlbHNlIGlmICh0eXBlID09PSAnbGF5b3V0Jykge1xuICAgIC8vIGZpbGwgaW4gbWlzc2luZyBsYXlvdXQgZnVuY3Rpb25zIGluIHRoZSBwcm90b3R5cGVcblxuICAgIHZhciBMYXlvdXQgPSBmdW5jdGlvbiBMYXlvdXQob3B0aW9ucykge1xuICAgICAgdGhpcy5vcHRpb25zID0gb3B0aW9ucztcbiAgICAgIHJlZ2lzdHJhbnQuY2FsbCh0aGlzLCBvcHRpb25zKTtcblxuICAgICAgLy8gbWFrZSBzdXJlIGxheW91dCBoYXMgX3ByaXZhdGUgZm9yIHVzZSB3LyBzdGQgYXBpcyBsaWtlIC5vbigpXG4gICAgICBpZiAoIXBsYWluT2JqZWN0KHRoaXMuX3ByaXZhdGUpKSB7XG4gICAgICAgIHRoaXMuX3ByaXZhdGUgPSB7fTtcbiAgICAgIH1cbiAgICAgIHRoaXMuX3ByaXZhdGUuY3kgPSBvcHRpb25zLmN5O1xuICAgICAgdGhpcy5fcHJpdmF0ZS5saXN0ZW5lcnMgPSBbXTtcbiAgICAgIHRoaXMuY3JlYXRlRW1pdHRlcigpO1xuICAgIH07XG4gICAgdmFyIGxheW91dFByb3RvID0gTGF5b3V0LnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUocmVnaXN0cmFudC5wcm90b3R5cGUpO1xuICAgIHZhciBvcHRMYXlvdXRGbnMgPSBbXTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IG9wdExheW91dEZucy5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIGZuTmFtZSA9IG9wdExheW91dEZuc1tpXTtcbiAgICAgIGxheW91dFByb3RvW2ZuTmFtZV0gPSBsYXlvdXRQcm90b1tmbk5hbWVdIHx8IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgICB9O1xuICAgIH1cblxuICAgIC8vIGVpdGhlciAuc3RhcnQoKSBvciAucnVuKCkgaXMgZGVmaW5lZCwgc28gYXV0b2dlbiB0aGUgb3RoZXJcbiAgICBpZiAobGF5b3V0UHJvdG8uc3RhcnQgJiYgIWxheW91dFByb3RvLnJ1bikge1xuICAgICAgbGF5b3V0UHJvdG8ucnVuID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB0aGlzLnN0YXJ0KCk7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgICAgfTtcbiAgICB9IGVsc2UgaWYgKCFsYXlvdXRQcm90by5zdGFydCAmJiBsYXlvdXRQcm90by5ydW4pIHtcbiAgICAgIGxheW91dFByb3RvLnN0YXJ0ID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB0aGlzLnJ1bigpO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICAgIH07XG4gICAgfVxuICAgIHZhciByZWdTdG9wID0gcmVnaXN0cmFudC5wcm90b3R5cGUuc3RvcDtcbiAgICBsYXlvdXRQcm90by5zdG9wID0gZnVuY3Rpb24gKCkge1xuICAgICAgdmFyIG9wdHMgPSB0aGlzLm9wdGlvbnM7XG4gICAgICBpZiAob3B0cyAmJiBvcHRzLmFuaW1hdGUpIHtcbiAgICAgICAgdmFyIGFuaXMgPSB0aGlzLmFuaW1hdGlvbnM7XG4gICAgICAgIGlmIChhbmlzKSB7XG4gICAgICAgICAgZm9yICh2YXIgX2kgPSAwOyBfaSA8IGFuaXMubGVuZ3RoOyBfaSsrKSB7XG4gICAgICAgICAgICBhbmlzW19pXS5zdG9wKCk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAocmVnU3RvcCkge1xuICAgICAgICByZWdTdG9wLmNhbGwodGhpcyk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLmVtaXQoJ2xheW91dHN0b3AnKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiB0aGlzO1xuICAgIH07XG4gICAgaWYgKCFsYXlvdXRQcm90by5kZXN0cm95KSB7XG4gICAgICBsYXlvdXRQcm90by5kZXN0cm95ID0gZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICAgIH07XG4gICAgfVxuICAgIGxheW91dFByb3RvLmN5ID0gZnVuY3Rpb24gKCkge1xuICAgICAgcmV0dXJuIHRoaXMuX3ByaXZhdGUuY3k7XG4gICAgfTtcbiAgICB2YXIgZ2V0Q3kgPSBmdW5jdGlvbiBnZXRDeShsYXlvdXQpIHtcbiAgICAgIHJldHVybiBsYXlvdXQuX3ByaXZhdGUuY3k7XG4gICAgfTtcbiAgICB2YXIgZW1pdHRlck9wdHMgPSB7XG4gICAgICBhZGRFdmVudEZpZWxkczogZnVuY3Rpb24gYWRkRXZlbnRGaWVsZHMobGF5b3V0LCBldnQpIHtcbiAgICAgICAgZXZ0LmxheW91dCA9IGxheW91dDtcbiAgICAgICAgZXZ0LmN5ID0gZ2V0Q3kobGF5b3V0KTtcbiAgICAgICAgZXZ0LnRhcmdldCA9IGxheW91dDtcbiAgICAgIH0sXG4gICAgICBidWJibGU6IGZ1bmN0aW9uIGJ1YmJsZSgpIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9LFxuICAgICAgcGFyZW50OiBmdW5jdGlvbiBwYXJlbnQobGF5b3V0KSB7XG4gICAgICAgIHJldHVybiBnZXRDeShsYXlvdXQpO1xuICAgICAgfVxuICAgIH07XG4gICAgZXh0ZW5kKGxheW91dFByb3RvLCB7XG4gICAgICBjcmVhdGVFbWl0dGVyOiBmdW5jdGlvbiBjcmVhdGVFbWl0dGVyKCkge1xuICAgICAgICB0aGlzLl9wcml2YXRlLmVtaXR0ZXIgPSBuZXcgRW1pdHRlcihlbWl0dGVyT3B0cywgdGhpcyk7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgICAgfSxcbiAgICAgIGVtaXR0ZXI6IGZ1bmN0aW9uIGVtaXR0ZXIoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9wcml2YXRlLmVtaXR0ZXI7XG4gICAgICB9LFxuICAgICAgb246IGZ1bmN0aW9uIG9uKGV2dCwgY2IpIHtcbiAgICAgICAgdGhpcy5lbWl0dGVyKCkub24oZXZ0LCBjYik7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgICAgfSxcbiAgICAgIG9uZTogZnVuY3Rpb24gb25lKGV2dCwgY2IpIHtcbiAgICAgICAgdGhpcy5lbWl0dGVyKCkub25lKGV2dCwgY2IpO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICAgIH0sXG4gICAgICBvbmNlOiBmdW5jdGlvbiBvbmNlKGV2dCwgY2IpIHtcbiAgICAgICAgdGhpcy5lbWl0dGVyKCkub25lKGV2dCwgY2IpO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICAgIH0sXG4gICAgICByZW1vdmVMaXN0ZW5lcjogZnVuY3Rpb24gcmVtb3ZlTGlzdGVuZXIoZXZ0LCBjYikge1xuICAgICAgICB0aGlzLmVtaXR0ZXIoKS5yZW1vdmVMaXN0ZW5lcihldnQsIGNiKTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgICB9LFxuICAgICAgcmVtb3ZlQWxsTGlzdGVuZXJzOiBmdW5jdGlvbiByZW1vdmVBbGxMaXN0ZW5lcnMoKSB7XG4gICAgICAgIHRoaXMuZW1pdHRlcigpLnJlbW92ZUFsbExpc3RlbmVycygpO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICAgIH0sXG4gICAgICBlbWl0OiBmdW5jdGlvbiBlbWl0KGV2dCwgcGFyYW1zKSB7XG4gICAgICAgIHRoaXMuZW1pdHRlcigpLmVtaXQoZXZ0LCBwYXJhbXMpO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICAgIH1cbiAgICB9KTtcbiAgICBkZWZpbmUuZXZlbnRBbGlhc2VzT24obGF5b3V0UHJvdG8pO1xuICAgIGV4dCA9IExheW91dDsgLy8gcmVwbGFjZSB3aXRoIG91ciB3cmFwcGVkIGxheW91dFxuICB9IGVsc2UgaWYgKHR5cGUgPT09ICdyZW5kZXJlcicgJiYgbmFtZSAhPT0gJ251bGwnICYmIG5hbWUgIT09ICdiYXNlJykge1xuICAgIC8vIHVzZXIgcmVnaXN0ZXJlZCByZW5kZXJlcnMgaW5oZXJpdCBmcm9tIGJhc2VcblxuICAgIHZhciBCYXNlUmVuZGVyZXIgPSBnZXRFeHRlbnNpb24oJ3JlbmRlcmVyJywgJ2Jhc2UnKTtcbiAgICB2YXIgYlByb3RvID0gQmFzZVJlbmRlcmVyLnByb3RvdHlwZTtcbiAgICB2YXIgUmVnaXN0cmFudFJlbmRlcmVyID0gcmVnaXN0cmFudDtcbiAgICB2YXIgclByb3RvID0gcmVnaXN0cmFudC5wcm90b3R5cGU7XG4gICAgdmFyIFJlbmRlcmVyID0gZnVuY3Rpb24gUmVuZGVyZXIoKSB7XG4gICAgICBCYXNlUmVuZGVyZXIuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgICAgIFJlZ2lzdHJhbnRSZW5kZXJlci5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICAgIH07XG4gICAgdmFyIHByb3RvID0gUmVuZGVyZXIucHJvdG90eXBlO1xuICAgIGZvciAodmFyIHBOYW1lIGluIGJQcm90bykge1xuICAgICAgdmFyIHBWYWwgPSBiUHJvdG9bcE5hbWVdO1xuICAgICAgdmFyIGV4aXN0c0luUiA9IHJQcm90b1twTmFtZV0gIT0gbnVsbDtcbiAgICAgIGlmIChleGlzdHNJblIpIHtcbiAgICAgICAgcmV0dXJuIG92ZXJyaWRlRXJyKHBOYW1lKTtcbiAgICAgIH1cbiAgICAgIHByb3RvW3BOYW1lXSA9IHBWYWw7IC8vIHRha2UgaW1wbCBmcm9tIGJhc2VcbiAgICB9XG4gICAgZm9yICh2YXIgX3BOYW1lIGluIHJQcm90bykge1xuICAgICAgcHJvdG9bX3BOYW1lXSA9IHJQcm90b1tfcE5hbWVdOyAvLyB0YWtlIGltcGwgZnJvbSByZWdpc3RyYW50XG4gICAgfVxuICAgIGJQcm90by5jbGllbnRGdW5jdGlvbnMuZm9yRWFjaChmdW5jdGlvbiAobmFtZSkge1xuICAgICAgcHJvdG9bbmFtZV0gPSBwcm90b1tuYW1lXSB8fCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGVycm9yKCdSZW5kZXJlciBkb2VzIG5vdCBpbXBsZW1lbnQgYHJlbmRlcmVyLicgKyBuYW1lICsgJygpYCBvbiBpdHMgcHJvdG90eXBlJyk7XG4gICAgICB9O1xuICAgIH0pO1xuICAgIGV4dCA9IFJlbmRlcmVyO1xuICB9IGVsc2UgaWYgKHR5cGUgPT09ICdfX3Byb3RvX18nIHx8IHR5cGUgPT09ICdjb25zdHJ1Y3RvcicgfHwgdHlwZSA9PT0gJ3Byb3RvdHlwZScpIHtcbiAgICAvLyB0byBhdm9pZCBwb3RlbnRpYWwgcHJvdG90eXBlIHBvbGx1dGlvblxuICAgIHJldHVybiBlcnJvcih0eXBlICsgJyBpcyBhbiBpbGxlZ2FsIHR5cGUgdG8gYmUgcmVnaXN0ZXJlZCwgcG9zc2libHkgbGVhZCB0byBwcm90b3R5cGUgcG9sbHV0aW9ucycpO1xuICB9XG4gIHJldHVybiBzZXRNYXAoe1xuICAgIG1hcDogZXh0ZW5zaW9ucyxcbiAgICBrZXlzOiBbdHlwZSwgbmFtZV0sXG4gICAgdmFsdWU6IGV4dFxuICB9KTtcbn1cbmZ1bmN0aW9uIGdldEV4dGVuc2lvbih0eXBlLCBuYW1lKSB7XG4gIHJldHVybiBnZXRNYXAoe1xuICAgIG1hcDogZXh0ZW5zaW9ucyxcbiAgICBrZXlzOiBbdHlwZSwgbmFtZV1cbiAgfSk7XG59XG5mdW5jdGlvbiBzZXRNb2R1bGUodHlwZSwgbmFtZSwgbW9kdWxlVHlwZSwgbW9kdWxlTmFtZSwgcmVnaXN0cmFudCkge1xuICByZXR1cm4gc2V0TWFwKHtcbiAgICBtYXA6IG1vZHVsZXMsXG4gICAga2V5czogW3R5cGUsIG5hbWUsIG1vZHVsZVR5cGUsIG1vZHVsZU5hbWVdLFxuICAgIHZhbHVlOiByZWdpc3RyYW50XG4gIH0pO1xufVxuZnVuY3Rpb24gZ2V0TW9kdWxlKHR5cGUsIG5hbWUsIG1vZHVsZVR5cGUsIG1vZHVsZU5hbWUpIHtcbiAgcmV0dXJuIGdldE1hcCh7XG4gICAgbWFwOiBtb2R1bGVzLFxuICAgIGtleXM6IFt0eXBlLCBuYW1lLCBtb2R1bGVUeXBlLCBtb2R1bGVOYW1lXVxuICB9KTtcbn1cbnZhciBleHRlbnNpb24gPSBmdW5jdGlvbiBleHRlbnNpb24oKSB7XG4gIC8vIGUuZy4gZXh0ZW5zaW9uKCdyZW5kZXJlcicsICdzdmcnKVxuICBpZiAoYXJndW1lbnRzLmxlbmd0aCA9PT0gMikge1xuICAgIHJldHVybiBnZXRFeHRlbnNpb24uYXBwbHkobnVsbCwgYXJndW1lbnRzKTtcbiAgfVxuXG4gIC8vIGUuZy4gZXh0ZW5zaW9uKCdyZW5kZXJlcicsICdzdmcnLCB7IC4uLiB9KVxuICBlbHNlIGlmIChhcmd1bWVudHMubGVuZ3RoID09PSAzKSB7XG4gICAgcmV0dXJuIHNldEV4dGVuc2lvbi5hcHBseShudWxsLCBhcmd1bWVudHMpO1xuICB9XG5cbiAgLy8gZS5nLiBleHRlbnNpb24oJ3JlbmRlcmVyJywgJ3N2ZycsICdub2RlU2hhcGUnLCAnZWxsaXBzZScpXG4gIGVsc2UgaWYgKGFyZ3VtZW50cy5sZW5ndGggPT09IDQpIHtcbiAgICByZXR1cm4gZ2V0TW9kdWxlLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7XG4gIH1cblxuICAvLyBlLmcuIGV4dGVuc2lvbigncmVuZGVyZXInLCAnc3ZnJywgJ25vZGVTaGFwZScsICdlbGxpcHNlJywgeyAuLi4gfSlcbiAgZWxzZSBpZiAoYXJndW1lbnRzLmxlbmd0aCA9PT0gNSkge1xuICAgIHJldHVybiBzZXRNb2R1bGUuYXBwbHkobnVsbCwgYXJndW1lbnRzKTtcbiAgfSBlbHNlIHtcbiAgICBlcnJvcignSW52YWxpZCBleHRlbnNpb24gYWNjZXNzIHN5bnRheCcpO1xuICB9XG59O1xuXG4vLyBhbGxvd3MgYSBjb3JlIGluc3RhbmNlIHRvIGFjY2VzcyBleHRlbnNpb25zIGludGVybmFsbHlcbkNvcmUucHJvdG90eXBlLmV4dGVuc2lvbiA9IGV4dGVuc2lvbjtcblxuLy8gaW5jbHVkZWQgZXh0ZW5zaW9uc1xuaW5jRXh0cy5mb3JFYWNoKGZ1bmN0aW9uIChncm91cCkge1xuICBncm91cC5leHRlbnNpb25zLmZvckVhY2goZnVuY3Rpb24gKGV4dCkge1xuICAgIHNldEV4dGVuc2lvbihncm91cC50eXBlLCBleHQubmFtZSwgZXh0LmltcGwpO1xuICB9KTtcbn0pO1xuXG4vLyBhIGR1bW15IHN0eWxlc2hlZXQgb2JqZWN0IHRoYXQgZG9lc24ndCBuZWVkIGEgcmVmZXJlbmNlIHRvIHRoZSBjb3JlXG4vLyAodXNlZnVsIGZvciBpbml0KVxudmFyIF9TdHlsZXNoZWV0ID0gZnVuY3Rpb24gU3R5bGVzaGVldCgpIHtcbiAgaWYgKCEodGhpcyBpbnN0YW5jZW9mIF9TdHlsZXNoZWV0KSkge1xuICAgIHJldHVybiBuZXcgX1N0eWxlc2hlZXQoKTtcbiAgfVxuICB0aGlzLmxlbmd0aCA9IDA7XG59O1xudmFyIHNoZWV0Zm4gPSBfU3R5bGVzaGVldC5wcm90b3R5cGU7XG5zaGVldGZuLmluc3RhbmNlU3RyaW5nID0gZnVuY3Rpb24gKCkge1xuICByZXR1cm4gJ3N0eWxlc2hlZXQnO1xufTtcblxuLy8ganVzdCBzdG9yZSB0aGUgc2VsZWN0b3IgdG8gYmUgcGFyc2VkIGxhdGVyXG5zaGVldGZuLnNlbGVjdG9yID0gZnVuY3Rpb24gKHNlbGVjdG9yKSB7XG4gIHZhciBpID0gdGhpcy5sZW5ndGgrKztcbiAgdGhpc1tpXSA9IHtcbiAgICBzZWxlY3Rvcjogc2VsZWN0b3IsXG4gICAgcHJvcGVydGllczogW11cbiAgfTtcbiAgcmV0dXJuIHRoaXM7IC8vIGNoYWluaW5nXG59O1xuXG4vLyBqdXN0IHN0b3JlIHRoZSBwcm9wZXJ0eSB0byBiZSBwYXJzZWQgbGF0ZXJcbnNoZWV0Zm4uY3NzID0gZnVuY3Rpb24gKG5hbWUsIHZhbHVlKSB7XG4gIHZhciBpID0gdGhpcy5sZW5ndGggLSAxO1xuICBpZiAoc3RyaW5nKG5hbWUpKSB7XG4gICAgdGhpc1tpXS5wcm9wZXJ0aWVzLnB1c2goe1xuICAgICAgbmFtZTogbmFtZSxcbiAgICAgIHZhbHVlOiB2YWx1ZVxuICAgIH0pO1xuICB9IGVsc2UgaWYgKHBsYWluT2JqZWN0KG5hbWUpKSB7XG4gICAgdmFyIG1hcCA9IG5hbWU7XG4gICAgdmFyIHByb3BOYW1lcyA9IE9iamVjdC5rZXlzKG1hcCk7XG4gICAgZm9yICh2YXIgaiA9IDA7IGogPCBwcm9wTmFtZXMubGVuZ3RoOyBqKyspIHtcbiAgICAgIHZhciBrZXkgPSBwcm9wTmFtZXNbal07XG4gICAgICB2YXIgbWFwVmFsID0gbWFwW2tleV07XG4gICAgICBpZiAobWFwVmFsID09IG51bGwpIHtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG4gICAgICB2YXIgcHJvcCA9IF9TdHlsZS5wcm9wZXJ0aWVzW2tleV0gfHwgX1N0eWxlLnByb3BlcnRpZXNbZGFzaDJjYW1lbChrZXkpXTtcbiAgICAgIGlmIChwcm9wID09IG51bGwpIHtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG4gICAgICB2YXIgX25hbWUgPSBwcm9wLm5hbWU7XG4gICAgICB2YXIgX3ZhbHVlID0gbWFwVmFsO1xuICAgICAgdGhpc1tpXS5wcm9wZXJ0aWVzLnB1c2goe1xuICAgICAgICBuYW1lOiBfbmFtZSxcbiAgICAgICAgdmFsdWU6IF92YWx1ZVxuICAgICAgfSk7XG4gICAgfVxuICB9XG4gIHJldHVybiB0aGlzOyAvLyBjaGFpbmluZ1xufTtcbnNoZWV0Zm4uc3R5bGUgPSBzaGVldGZuLmNzcztcblxuLy8gZ2VuZXJhdGUgYSByZWFsIHN0eWxlIG9iamVjdCBmcm9tIHRoZSBkdW1teSBzdHlsZXNoZWV0XG5zaGVldGZuLmdlbmVyYXRlU3R5bGUgPSBmdW5jdGlvbiAoY3kpIHtcbiAgdmFyIHN0eWxlID0gbmV3IF9TdHlsZShjeSk7XG4gIHJldHVybiB0aGlzLmFwcGVuZFRvU3R5bGUoc3R5bGUpO1xufTtcblxuLy8gYXBwZW5kIGEgZHVtbXkgc3R5bGVzaGVldCBvYmplY3Qgb24gYSByZWFsIHN0eWxlIG9iamVjdFxuc2hlZXRmbi5hcHBlbmRUb1N0eWxlID0gZnVuY3Rpb24gKHN0eWxlKSB7XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5sZW5ndGg7IGkrKykge1xuICAgIHZhciBjb250ZXh0ID0gdGhpc1tpXTtcbiAgICB2YXIgc2VsZWN0b3IgPSBjb250ZXh0LnNlbGVjdG9yO1xuICAgIHZhciBwcm9wcyA9IGNvbnRleHQucHJvcGVydGllcztcbiAgICBzdHlsZS5zZWxlY3RvcihzZWxlY3Rvcik7IC8vIGFwcGx5IHNlbGVjdG9yXG5cbiAgICBmb3IgKHZhciBqID0gMDsgaiA8IHByb3BzLmxlbmd0aDsgaisrKSB7XG4gICAgICB2YXIgcHJvcCA9IHByb3BzW2pdO1xuICAgICAgc3R5bGUuY3NzKHByb3AubmFtZSwgcHJvcC52YWx1ZSk7IC8vIGFwcGx5IHByb3BlcnR5XG4gICAgfVxuICB9XG4gIHJldHVybiBzdHlsZTtcbn07XG5cbnZhciB2ZXJzaW9uID0gXCIzLjMxLjFcIjtcblxudmFyIGN5dG9zY2FwZSA9IGZ1bmN0aW9uIGN5dG9zY2FwZShvcHRpb25zKSB7XG4gIC8vIGlmIG5vIG9wdGlvbnMgc3BlY2lmaWVkLCB1c2UgZGVmYXVsdFxuICBpZiAob3B0aW9ucyA9PT0gdW5kZWZpbmVkKSB7XG4gICAgb3B0aW9ucyA9IHt9O1xuICB9XG5cbiAgLy8gY3JlYXRlIGluc3RhbmNlXG4gIGlmIChwbGFpbk9iamVjdChvcHRpb25zKSkge1xuICAgIHJldHVybiBuZXcgQ29yZShvcHRpb25zKTtcbiAgfVxuXG4gIC8vIGFsbG93IGZvciByZWdpc3RyYXRpb24gb2YgZXh0ZW5zaW9uc1xuICBlbHNlIGlmIChzdHJpbmcob3B0aW9ucykpIHtcbiAgICByZXR1cm4gZXh0ZW5zaW9uLmFwcGx5KGV4dGVuc2lvbiwgYXJndW1lbnRzKTtcbiAgfVxufTtcblxuLy8gZS5nLiBjeXRvc2NhcGUudXNlKCByZXF1aXJlKCdjeXRvc2NhcGUtZm9vJyksIGJhciApXG5jeXRvc2NhcGUudXNlID0gZnVuY3Rpb24gKGV4dCkge1xuICB2YXIgYXJncyA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cywgMSk7IC8vIGFyZ3MgdG8gcGFzcyB0byBleHRcblxuICBhcmdzLnVuc2hpZnQoY3l0b3NjYXBlKTsgLy8gY3l0b3NjYXBlIGlzIGZpcnN0IGFyZyB0byBleHRcblxuICBleHQuYXBwbHkobnVsbCwgYXJncyk7XG4gIHJldHVybiB0aGlzO1xufTtcbmN5dG9zY2FwZS53YXJuaW5ncyA9IGZ1bmN0aW9uIChib29sKSB7XG4gIHJldHVybiB3YXJuaW5ncyhib29sKTtcbn07XG5cbi8vIHJlcGxhY2VkIGJ5IGJ1aWxkIHN5c3RlbVxuY3l0b3NjYXBlLnZlcnNpb24gPSB2ZXJzaW9uO1xuXG4vLyBleHBvc2UgcHVibGljIGFwaXMgKG1vc3RseSBmb3IgZXh0ZW5zaW9ucylcbmN5dG9zY2FwZS5zdHlsZXNoZWV0ID0gY3l0b3NjYXBlLlN0eWxlc2hlZXQgPSBfU3R5bGVzaGVldDtcblxubW9kdWxlLmV4cG9ydHMgPSBjeXRvc2NhcGU7XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///44726\n")},45019:(module,__unused_webpack_exports,__webpack_require__)=>{"use strict";eval("\n\nvar utils = __webpack_require__(9516);\n\n/**\n * Determines whether the payload is an error thrown by Axios\n *\n * @param {*} payload The value to test\n * @returns {boolean} True if the payload is an error thrown by Axios, otherwise false\n */\nmodule.exports = function isAxiosError(payload) {\n return utils.isObject(payload) && (payload.isAxiosError === true);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNDUwMTkuanMiLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9pdGctbmV4dGdlbi1mcm9udGVuZC8uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvaGVscGVycy9pc0F4aW9zRXJyb3IuanM/NWYwMiJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciB1dGlscyA9IHJlcXVpcmUoJy4vLi4vdXRpbHMnKTtcblxuLyoqXG4gKiBEZXRlcm1pbmVzIHdoZXRoZXIgdGhlIHBheWxvYWQgaXMgYW4gZXJyb3IgdGhyb3duIGJ5IEF4aW9zXG4gKlxuICogQHBhcmFtIHsqfSBwYXlsb2FkIFRoZSB2YWx1ZSB0byB0ZXN0XG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gVHJ1ZSBpZiB0aGUgcGF5bG9hZCBpcyBhbiBlcnJvciB0aHJvd24gYnkgQXhpb3MsIG90aGVyd2lzZSBmYWxzZVxuICovXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGlzQXhpb3NFcnJvcihwYXlsb2FkKSB7XG4gIHJldHVybiB1dGlscy5pc09iamVjdChwYXlsb2FkKSAmJiAocGF5bG9hZC5pc0F4aW9zRXJyb3IgPT09IHRydWUpO1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///45019\n")},45228:module=>{"use strict";eval("/*\nobject-assign\n(c) Sindre Sorhus\n@license MIT\n*/\n\n\n/* eslint-disable no-unused-vars */\nvar getOwnPropertySymbols = Object.getOwnPropertySymbols;\nvar hasOwnProperty = Object.prototype.hasOwnProperty;\nvar propIsEnumerable = Object.prototype.propertyIsEnumerable;\n\nfunction toObject(val) {\n\tif (val === null || val === undefined) {\n\t\tthrow new TypeError('Object.assign cannot be called with null or undefined');\n\t}\n\n\treturn Object(val);\n}\n\nfunction shouldUseNative() {\n\ttry {\n\t\tif (!Object.assign) {\n\t\t\treturn false;\n\t\t}\n\n\t\t// Detect buggy property enumeration order in older V8 versions.\n\n\t\t// https://bugs.chromium.org/p/v8/issues/detail?id=4118\n\t\tvar test1 = new String('abc'); // eslint-disable-line no-new-wrappers\n\t\ttest1[5] = 'de';\n\t\tif (Object.getOwnPropertyNames(test1)[0] === '5') {\n\t\t\treturn false;\n\t\t}\n\n\t\t// https://bugs.chromium.org/p/v8/issues/detail?id=3056\n\t\tvar test2 = {};\n\t\tfor (var i = 0; i < 10; i++) {\n\t\t\ttest2['_' + String.fromCharCode(i)] = i;\n\t\t}\n\t\tvar order2 = Object.getOwnPropertyNames(test2).map(function (n) {\n\t\t\treturn test2[n];\n\t\t});\n\t\tif (order2.join('') !== '0123456789') {\n\t\t\treturn false;\n\t\t}\n\n\t\t// https://bugs.chromium.org/p/v8/issues/detail?id=3056\n\t\tvar test3 = {};\n\t\t'abcdefghijklmnopqrst'.split('').forEach(function (letter) {\n\t\t\ttest3[letter] = letter;\n\t\t});\n\t\tif (Object.keys(Object.assign({}, test3)).join('') !==\n\t\t\t\t'abcdefghijklmnopqrst') {\n\t\t\treturn false;\n\t\t}\n\n\t\treturn true;\n\t} catch (err) {\n\t\t// We don't expect any of the above to throw, but better to be safe.\n\t\treturn false;\n\t}\n}\n\nmodule.exports = shouldUseNative() ? Object.assign : function (target, source) {\n\tvar from;\n\tvar to = toObject(target);\n\tvar symbols;\n\n\tfor (var s = 1; s < arguments.length; s++) {\n\t\tfrom = Object(arguments[s]);\n\n\t\tfor (var key in from) {\n\t\t\tif (hasOwnProperty.call(from, key)) {\n\t\t\t\tto[key] = from[key];\n\t\t\t}\n\t\t}\n\n\t\tif (getOwnPropertySymbols) {\n\t\t\tsymbols = getOwnPropertySymbols(from);\n\t\t\tfor (var i = 0; i < symbols.length; i++) {\n\t\t\t\tif (propIsEnumerable.call(from, symbols[i])) {\n\t\t\t\t\tto[symbols[i]] = from[symbols[i]];\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\treturn to;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNDUyMjguanMiLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vaXRnLW5leHRnZW4tZnJvbnRlbmQvLi9ub2RlX21vZHVsZXMvb2JqZWN0LWFzc2lnbi9pbmRleC5qcz8zMjBjIl0sInNvdXJjZXNDb250ZW50IjpbIi8qXG5vYmplY3QtYXNzaWduXG4oYykgU2luZHJlIFNvcmh1c1xuQGxpY2Vuc2UgTUlUXG4qL1xuXG4ndXNlIHN0cmljdCc7XG4vKiBlc2xpbnQtZGlzYWJsZSBuby11bnVzZWQtdmFycyAqL1xudmFyIGdldE93blByb3BlcnR5U3ltYm9scyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHM7XG52YXIgaGFzT3duUHJvcGVydHkgPSBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5O1xudmFyIHByb3BJc0VudW1lcmFibGUgPSBPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlO1xuXG5mdW5jdGlvbiB0b09iamVjdCh2YWwpIHtcblx0aWYgKHZhbCA9PT0gbnVsbCB8fCB2YWwgPT09IHVuZGVmaW5lZCkge1xuXHRcdHRocm93IG5ldyBUeXBlRXJyb3IoJ09iamVjdC5hc3NpZ24gY2Fubm90IGJlIGNhbGxlZCB3aXRoIG51bGwgb3IgdW5kZWZpbmVkJyk7XG5cdH1cblxuXHRyZXR1cm4gT2JqZWN0KHZhbCk7XG59XG5cbmZ1bmN0aW9uIHNob3VsZFVzZU5hdGl2ZSgpIHtcblx0dHJ5IHtcblx0XHRpZiAoIU9iamVjdC5hc3NpZ24pIHtcblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9XG5cblx0XHQvLyBEZXRlY3QgYnVnZ3kgcHJvcGVydHkgZW51bWVyYXRpb24gb3JkZXIgaW4gb2xkZXIgVjggdmVyc2lvbnMuXG5cblx0XHQvLyBodHRwczovL2J1Z3MuY2hyb21pdW0ub3JnL3AvdjgvaXNzdWVzL2RldGFpbD9pZD00MTE4XG5cdFx0dmFyIHRlc3QxID0gbmV3IFN0cmluZygnYWJjJyk7ICAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLW5ldy13cmFwcGVyc1xuXHRcdHRlc3QxWzVdID0gJ2RlJztcblx0XHRpZiAoT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXModGVzdDEpWzBdID09PSAnNScpIHtcblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9XG5cblx0XHQvLyBodHRwczovL2J1Z3MuY2hyb21pdW0ub3JnL3AvdjgvaXNzdWVzL2RldGFpbD9pZD0zMDU2XG5cdFx0dmFyIHRlc3QyID0ge307XG5cdFx0Zm9yICh2YXIgaSA9IDA7IGkgPCAxMDsgaSsrKSB7XG5cdFx0XHR0ZXN0MlsnXycgKyBTdHJpbmcuZnJvbUNoYXJDb2RlKGkpXSA9IGk7XG5cdFx0fVxuXHRcdHZhciBvcmRlcjIgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyh0ZXN0MikubWFwKGZ1bmN0aW9uIChuKSB7XG5cdFx0XHRyZXR1cm4gdGVzdDJbbl07XG5cdFx0fSk7XG5cdFx0aWYgKG9yZGVyMi5qb2luKCcnKSAhPT0gJzAxMjM0NTY3ODknKSB7XG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fVxuXG5cdFx0Ly8gaHR0cHM6Ly9idWdzLmNocm9taXVtLm9yZy9wL3Y4L2lzc3Vlcy9kZXRhaWw/aWQ9MzA1NlxuXHRcdHZhciB0ZXN0MyA9IHt9O1xuXHRcdCdhYmNkZWZnaGlqa2xtbm9wcXJzdCcuc3BsaXQoJycpLmZvckVhY2goZnVuY3Rpb24gKGxldHRlcikge1xuXHRcdFx0dGVzdDNbbGV0dGVyXSA9IGxldHRlcjtcblx0XHR9KTtcblx0XHRpZiAoT2JqZWN0LmtleXMoT2JqZWN0LmFzc2lnbih7fSwgdGVzdDMpKS5qb2luKCcnKSAhPT1cblx0XHRcdFx0J2FiY2RlZmdoaWprbG1ub3BxcnN0Jykge1xuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH1cblxuXHRcdHJldHVybiB0cnVlO1xuXHR9IGNhdGNoIChlcnIpIHtcblx0XHQvLyBXZSBkb24ndCBleHBlY3QgYW55IG9mIHRoZSBhYm92ZSB0byB0aHJvdywgYnV0IGJldHRlciB0byBiZSBzYWZlLlxuXHRcdHJldHVybiBmYWxzZTtcblx0fVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHNob3VsZFVzZU5hdGl2ZSgpID8gT2JqZWN0LmFzc2lnbiA6IGZ1bmN0aW9uICh0YXJnZXQsIHNvdXJjZSkge1xuXHR2YXIgZnJvbTtcblx0dmFyIHRvID0gdG9PYmplY3QodGFyZ2V0KTtcblx0dmFyIHN5bWJvbHM7XG5cblx0Zm9yICh2YXIgcyA9IDE7IHMgPCBhcmd1bWVudHMubGVuZ3RoOyBzKyspIHtcblx0XHRmcm9tID0gT2JqZWN0KGFyZ3VtZW50c1tzXSk7XG5cblx0XHRmb3IgKHZhciBrZXkgaW4gZnJvbSkge1xuXHRcdFx0aWYgKGhhc093blByb3BlcnR5LmNhbGwoZnJvbSwga2V5KSkge1xuXHRcdFx0XHR0b1trZXldID0gZnJvbVtrZXldO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdGlmIChnZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHtcblx0XHRcdHN5bWJvbHMgPSBnZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZnJvbSk7XG5cdFx0XHRmb3IgKHZhciBpID0gMDsgaSA8IHN5bWJvbHMubGVuZ3RoOyBpKyspIHtcblx0XHRcdFx0aWYgKHByb3BJc0VudW1lcmFibGUuY2FsbChmcm9tLCBzeW1ib2xzW2ldKSkge1xuXHRcdFx0XHRcdHRvW3N5bWJvbHNbaV1dID0gZnJvbVtzeW1ib2xzW2ldXTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdHJldHVybiB0bztcbn07XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///45228\n")},45412:(module,__unused_webpack_exports,__webpack_require__)=>{"use strict";eval("// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n\n\nmodule.exports = Readable;\n\n/**/\nvar Duplex;\n/**/\n\nReadable.ReadableState = ReadableState;\n\n/**/\nvar EE = (__webpack_require__(37007).EventEmitter);\nvar EElistenerCount = function EElistenerCount(emitter, type) {\n return emitter.listeners(type).length;\n};\n/**/\n\n/**/\nvar Stream = __webpack_require__(40345);\n/**/\n\nvar Buffer = (__webpack_require__(27650).Buffer);\nvar OurUint8Array = (typeof __webpack_require__.g !== 'undefined' ? __webpack_require__.g : typeof window !== 'undefined' ? window : typeof self !== 'undefined' ? self : {}).Uint8Array || function () {};\nfunction _uint8ArrayToBuffer(chunk) {\n return Buffer.from(chunk);\n}\nfunction _isUint8Array(obj) {\n return Buffer.isBuffer(obj) || obj instanceof OurUint8Array;\n}\n\n/**/\nvar debugUtil = __webpack_require__(79838);\nvar debug;\nif (debugUtil && debugUtil.debuglog) {\n debug = debugUtil.debuglog('stream');\n} else {\n debug = function debug() {};\n}\n/**/\n\nvar BufferList = __webpack_require__(80345);\nvar destroyImpl = __webpack_require__(75896);\nvar _require = __webpack_require__(65291),\n getHighWaterMark = _require.getHighWaterMark;\nvar _require$codes = (__webpack_require__(86048)/* .codes */ .F),\n ERR_INVALID_ARG_TYPE = _require$codes.ERR_INVALID_ARG_TYPE,\n ERR_STREAM_PUSH_AFTER_EOF = _require$codes.ERR_STREAM_PUSH_AFTER_EOF,\n ERR_METHOD_NOT_IMPLEMENTED = _require$codes.ERR_METHOD_NOT_IMPLEMENTED,\n ERR_STREAM_UNSHIFT_AFTER_END_EVENT = _require$codes.ERR_STREAM_UNSHIFT_AFTER_END_EVENT;\n\n// Lazy loaded to improve the startup performance.\nvar StringDecoder;\nvar createReadableStreamAsyncIterator;\nvar from;\n__webpack_require__(56698)(Readable, Stream);\nvar errorOrDestroy = destroyImpl.errorOrDestroy;\nvar kProxyEvents = ['error', 'close', 'destroy', 'pause', 'resume'];\nfunction prependListener(emitter, event, fn) {\n // Sadly this is not cacheable as some libraries bundle their own\n // event emitter implementation with them.\n if (typeof emitter.prependListener === 'function') return emitter.prependListener(event, fn);\n\n // This is a hack to make sure that our error handler is attached before any\n // userland ones. NEVER DO THIS. This is here only because this code needs\n // to continue to work with older versions of Node.js that do not include\n // the prependListener() method. The goal is to eventually remove this hack.\n if (!emitter._events || !emitter._events[event]) emitter.on(event, fn);else if (Array.isArray(emitter._events[event])) emitter._events[event].unshift(fn);else emitter._events[event] = [fn, emitter._events[event]];\n}\nfunction ReadableState(options, stream, isDuplex) {\n Duplex = Duplex || __webpack_require__(25382);\n options = options || {};\n\n // Duplex streams are both readable and writable, but share\n // the same options object.\n // However, some cases require setting options to different\n // values for the readable and the writable sides of the duplex stream.\n // These options can be provided separately as readableXXX and writableXXX.\n if (typeof isDuplex !== 'boolean') isDuplex = stream instanceof Duplex;\n\n // object stream flag. Used to make read(n) ignore n and to\n // make all the buffer merging and length checks go away\n this.objectMode = !!options.objectMode;\n if (isDuplex) this.objectMode = this.objectMode || !!options.readableObjectMode;\n\n // the point at which it stops calling _read() to fill the buffer\n // Note: 0 is a valid value, means \"don't call _read preemptively ever\"\n this.highWaterMark = getHighWaterMark(this, options, 'readableHighWaterMark', isDuplex);\n\n // A linked list is used to store data chunks instead of an array because the\n // linked list can remove elements from the beginning faster than\n // array.shift()\n this.buffer = new BufferList();\n this.length = 0;\n this.pipes = null;\n this.pipesCount = 0;\n this.flowing = null;\n this.ended = false;\n this.endEmitted = false;\n this.reading = false;\n\n // a flag to be able to tell if the event 'readable'/'data' is emitted\n // immediately, or on a later tick. We set this to true at first, because\n // any actions that shouldn't happen until \"later\" should generally also\n // not happen before the first read call.\n this.sync = true;\n\n // whenever we return null, then we set a flag to say\n // that we're awaiting a 'readable' event emission.\n this.needReadable = false;\n this.emittedReadable = false;\n this.readableListening = false;\n this.resumeScheduled = false;\n this.paused = true;\n\n // Should close be emitted on destroy. Defaults to true.\n this.emitClose = options.emitClose !== false;\n\n // Should .destroy() be called after 'end' (and potentially 'finish')\n this.autoDestroy = !!options.autoDestroy;\n\n // has it been destroyed\n this.destroyed = false;\n\n // Crypto is kind of old and crusty. Historically, its default string\n // encoding is 'binary' so we have to make this configurable.\n // Everything else in the universe uses 'utf8', though.\n this.defaultEncoding = options.defaultEncoding || 'utf8';\n\n // the number of writers that are awaiting a drain event in .pipe()s\n this.awaitDrain = 0;\n\n // if true, a maybeReadMore has been scheduled\n this.readingMore = false;\n this.decoder = null;\n this.encoding = null;\n if (options.encoding) {\n if (!StringDecoder) StringDecoder = (__webpack_require__(83141)/* .StringDecoder */ .I);\n this.decoder = new StringDecoder(options.encoding);\n this.encoding = options.encoding;\n }\n}\nfunction Readable(options) {\n Duplex = Duplex || __webpack_require__(25382);\n if (!(this instanceof Readable)) return new Readable(options);\n\n // Checking for a Stream.Duplex instance is faster here instead of inside\n // the ReadableState constructor, at least with V8 6.5\n var isDuplex = this instanceof Duplex;\n this._readableState = new ReadableState(options, this, isDuplex);\n\n // legacy\n this.readable = true;\n if (options) {\n if (typeof options.read === 'function') this._read = options.read;\n if (typeof options.destroy === 'function') this._destroy = options.destroy;\n }\n Stream.call(this);\n}\nObject.defineProperty(Readable.prototype, 'destroyed', {\n // making it explicit this property is not enumerable\n // because otherwise some prototype manipulation in\n // userland will fail\n enumerable: false,\n get: function get() {\n if (this._readableState === undefined) {\n return false;\n }\n return this._readableState.destroyed;\n },\n set: function set(value) {\n // we ignore the value if the stream\n // has not been initialized yet\n if (!this._readableState) {\n return;\n }\n\n // backward compatibility, the user is explicitly\n // managing destroyed\n this._readableState.destroyed = value;\n }\n});\nReadable.prototype.destroy = destroyImpl.destroy;\nReadable.prototype._undestroy = destroyImpl.undestroy;\nReadable.prototype._destroy = function (err, cb) {\n cb(err);\n};\n\n// Manually shove something into the read() buffer.\n// This returns true if the highWaterMark has not been hit yet,\n// similar to how Writable.write() returns true if you should\n// write() some more.\nReadable.prototype.push = function (chunk, encoding) {\n var state = this._readableState;\n var skipChunkCheck;\n if (!state.objectMode) {\n if (typeof chunk === 'string') {\n encoding = encoding || state.defaultEncoding;\n if (encoding !== state.encoding) {\n chunk = Buffer.from(chunk, encoding);\n encoding = '';\n }\n skipChunkCheck = true;\n }\n } else {\n skipChunkCheck = true;\n }\n return readableAddChunk(this, chunk, encoding, false, skipChunkCheck);\n};\n\n// Unshift should *always* be something directly out of read()\nReadable.prototype.unshift = function (chunk) {\n return readableAddChunk(this, chunk, null, true, false);\n};\nfunction readableAddChunk(stream, chunk, encoding, addToFront, skipChunkCheck) {\n debug('readableAddChunk', chunk);\n var state = stream._readableState;\n if (chunk === null) {\n state.reading = false;\n onEofChunk(stream, state);\n } else {\n var er;\n if (!skipChunkCheck) er = chunkInvalid(state, chunk);\n if (er) {\n errorOrDestroy(stream, er);\n } else if (state.objectMode || chunk && chunk.length > 0) {\n if (typeof chunk !== 'string' && !state.objectMode && Object.getPrototypeOf(chunk) !== Buffer.prototype) {\n chunk = _uint8ArrayToBuffer(chunk);\n }\n if (addToFront) {\n if (state.endEmitted) errorOrDestroy(stream, new ERR_STREAM_UNSHIFT_AFTER_END_EVENT());else addChunk(stream, state, chunk, true);\n } else if (state.ended) {\n errorOrDestroy(stream, new ERR_STREAM_PUSH_AFTER_EOF());\n } else if (state.destroyed) {\n return false;\n } else {\n state.reading = false;\n if (state.decoder && !encoding) {\n chunk = state.decoder.write(chunk);\n if (state.objectMode || chunk.length !== 0) addChunk(stream, state, chunk, false);else maybeReadMore(stream, state);\n } else {\n addChunk(stream, state, chunk, false);\n }\n }\n } else if (!addToFront) {\n state.reading = false;\n maybeReadMore(stream, state);\n }\n }\n\n // We can push more data if we are below the highWaterMark.\n // Also, if we have no data yet, we can stand some more bytes.\n // This is to work around cases where hwm=0, such as the repl.\n return !state.ended && (state.length < state.highWaterMark || state.length === 0);\n}\nfunction addChunk(stream, state, chunk, addToFront) {\n if (state.flowing && state.length === 0 && !state.sync) {\n state.awaitDrain = 0;\n stream.emit('data', chunk);\n } else {\n // update the buffer info.\n state.length += state.objectMode ? 1 : chunk.length;\n if (addToFront) state.buffer.unshift(chunk);else state.buffer.push(chunk);\n if (state.needReadable) emitReadable(stream);\n }\n maybeReadMore(stream, state);\n}\nfunction chunkInvalid(state, chunk) {\n var er;\n if (!_isUint8Array(chunk) && typeof chunk !== 'string' && chunk !== undefined && !state.objectMode) {\n er = new ERR_INVALID_ARG_TYPE('chunk', ['string', 'Buffer', 'Uint8Array'], chunk);\n }\n return er;\n}\nReadable.prototype.isPaused = function () {\n return this._readableState.flowing === false;\n};\n\n// backwards compatibility.\nReadable.prototype.setEncoding = function (enc) {\n if (!StringDecoder) StringDecoder = (__webpack_require__(83141)/* .StringDecoder */ .I);\n var decoder = new StringDecoder(enc);\n this._readableState.decoder = decoder;\n // If setEncoding(null), decoder.encoding equals utf8\n this._readableState.encoding = this._readableState.decoder.encoding;\n\n // Iterate over current buffer to convert already stored Buffers:\n var p = this._readableState.buffer.head;\n var content = '';\n while (p !== null) {\n content += decoder.write(p.data);\n p = p.next;\n }\n this._readableState.buffer.clear();\n if (content !== '') this._readableState.buffer.push(content);\n this._readableState.length = content.length;\n return this;\n};\n\n// Don't raise the hwm > 1GB\nvar MAX_HWM = 0x40000000;\nfunction computeNewHighWaterMark(n) {\n if (n >= MAX_HWM) {\n // TODO(ronag): Throw ERR_VALUE_OUT_OF_RANGE.\n n = MAX_HWM;\n } else {\n // Get the next highest power of 2 to prevent increasing hwm excessively in\n // tiny amounts\n n--;\n n |= n >>> 1;\n n |= n >>> 2;\n n |= n >>> 4;\n n |= n >>> 8;\n n |= n >>> 16;\n n++;\n }\n return n;\n}\n\n// This function is designed to be inlinable, so please take care when making\n// changes to the function body.\nfunction howMuchToRead(n, state) {\n if (n <= 0 || state.length === 0 && state.ended) return 0;\n if (state.objectMode) return 1;\n if (n !== n) {\n // Only flow one buffer at a time\n if (state.flowing && state.length) return state.buffer.head.data.length;else return state.length;\n }\n // If we're asking for more than the current hwm, then raise the hwm.\n if (n > state.highWaterMark) state.highWaterMark = computeNewHighWaterMark(n);\n if (n <= state.length) return n;\n // Don't have enough\n if (!state.ended) {\n state.needReadable = true;\n return 0;\n }\n return state.length;\n}\n\n// you can override either this method, or the async _read(n) below.\nReadable.prototype.read = function (n) {\n debug('read', n);\n n = parseInt(n, 10);\n var state = this._readableState;\n var nOrig = n;\n if (n !== 0) state.emittedReadable = false;\n\n // if we're doing read(0) to trigger a readable event, but we\n // already have a bunch of data in the buffer, then just trigger\n // the 'readable' event and move on.\n if (n === 0 && state.needReadable && ((state.highWaterMark !== 0 ? state.length >= state.highWaterMark : state.length > 0) || state.ended)) {\n debug('read: emitReadable', state.length, state.ended);\n if (state.length === 0 && state.ended) endReadable(this);else emitReadable(this);\n return null;\n }\n n = howMuchToRead(n, state);\n\n // if we've ended, and we're now clear, then finish it up.\n if (n === 0 && state.ended) {\n if (state.length === 0) endReadable(this);\n return null;\n }\n\n // All the actual chunk generation logic needs to be\n // *below* the call to _read. The reason is that in certain\n // synthetic stream cases, such as passthrough streams, _read\n // may be a completely synchronous operation which may change\n // the state of the read buffer, providing enough data when\n // before there was *not* enough.\n //\n // So, the steps are:\n // 1. Figure out what the state of things will be after we do\n // a read from the buffer.\n //\n // 2. If that resulting state will trigger a _read, then call _read.\n // Note that this may be asynchronous, or synchronous. Yes, it is\n // deeply ugly to write APIs this way, but that still doesn't mean\n // that the Readable class should behave improperly, as streams are\n // designed to be sync/async agnostic.\n // Take note if the _read call is sync or async (ie, if the read call\n // has returned yet), so that we know whether or not it's safe to emit\n // 'readable' etc.\n //\n // 3. Actually pull the requested chunks out of the buffer and return.\n\n // if we need a readable event, then we need to do some reading.\n var doRead = state.needReadable;\n debug('need readable', doRead);\n\n // if we currently have less than the highWaterMark, then also read some\n if (state.length === 0 || state.length - n < state.highWaterMark) {\n doRead = true;\n debug('length less than watermark', doRead);\n }\n\n // however, if we've ended, then there's no point, and if we're already\n // reading, then it's unnecessary.\n if (state.ended || state.reading) {\n doRead = false;\n debug('reading or ended', doRead);\n } else if (doRead) {\n debug('do read');\n state.reading = true;\n state.sync = true;\n // if the length is currently zero, then we *need* a readable event.\n if (state.length === 0) state.needReadable = true;\n // call internal read method\n this._read(state.highWaterMark);\n state.sync = false;\n // If _read pushed data synchronously, then `reading` will be false,\n // and we need to re-evaluate how much data we can return to the user.\n if (!state.reading) n = howMuchToRead(nOrig, state);\n }\n var ret;\n if (n > 0) ret = fromList(n, state);else ret = null;\n if (ret === null) {\n state.needReadable = state.length <= state.highWaterMark;\n n = 0;\n } else {\n state.length -= n;\n state.awaitDrain = 0;\n }\n if (state.length === 0) {\n // If we have nothing in the buffer, then we want to know\n // as soon as we *do* get something into the buffer.\n if (!state.ended) state.needReadable = true;\n\n // If we tried to read() past the EOF, then emit end on the next tick.\n if (nOrig !== n && state.ended) endReadable(this);\n }\n if (ret !== null) this.emit('data', ret);\n return ret;\n};\nfunction onEofChunk(stream, state) {\n debug('onEofChunk');\n if (state.ended) return;\n if (state.decoder) {\n var chunk = state.decoder.end();\n if (chunk && chunk.length) {\n state.buffer.push(chunk);\n state.length += state.objectMode ? 1 : chunk.length;\n }\n }\n state.ended = true;\n if (state.sync) {\n // if we are sync, wait until next tick to emit the data.\n // Otherwise we risk emitting data in the flow()\n // the readable code triggers during a read() call\n emitReadable(stream);\n } else {\n // emit 'readable' now to make sure it gets picked up.\n state.needReadable = false;\n if (!state.emittedReadable) {\n state.emittedReadable = true;\n emitReadable_(stream);\n }\n }\n}\n\n// Don't emit readable right away in sync mode, because this can trigger\n// another read() call => stack overflow. This way, it might trigger\n// a nextTick recursion warning, but that's not so bad.\nfunction emitReadable(stream) {\n var state = stream._readableState;\n debug('emitReadable', state.needReadable, state.emittedReadable);\n state.needReadable = false;\n if (!state.emittedReadable) {\n debug('emitReadable', state.flowing);\n state.emittedReadable = true;\n process.nextTick(emitReadable_, stream);\n }\n}\nfunction emitReadable_(stream) {\n var state = stream._readableState;\n debug('emitReadable_', state.destroyed, state.length, state.ended);\n if (!state.destroyed && (state.length || state.ended)) {\n stream.emit('readable');\n state.emittedReadable = false;\n }\n\n // The stream needs another readable event if\n // 1. It is not flowing, as the flow mechanism will take\n // care of it.\n // 2. It is not ended.\n // 3. It is below the highWaterMark, so we can schedule\n // another readable later.\n state.needReadable = !state.flowing && !state.ended && state.length <= state.highWaterMark;\n flow(stream);\n}\n\n// at this point, the user has presumably seen the 'readable' event,\n// and called read() to consume some data. that may have triggered\n// in turn another _read(n) call, in which case reading = true if\n// it's in progress.\n// However, if we're not ended, or reading, and the length < hwm,\n// then go ahead and try to read some more preemptively.\nfunction maybeReadMore(stream, state) {\n if (!state.readingMore) {\n state.readingMore = true;\n process.nextTick(maybeReadMore_, stream, state);\n }\n}\nfunction maybeReadMore_(stream, state) {\n // Attempt to read more data if we should.\n //\n // The conditions for reading more data are (one of):\n // - Not enough data buffered (state.length < state.highWaterMark). The loop\n // is responsible for filling the buffer with enough data if such data\n // is available. If highWaterMark is 0 and we are not in the flowing mode\n // we should _not_ attempt to buffer any extra data. We'll get more data\n // when the stream consumer calls read() instead.\n // - No data in the buffer, and the stream is in flowing mode. In this mode\n // the loop below is responsible for ensuring read() is called. Failing to\n // call read here would abort the flow and there's no other mechanism for\n // continuing the flow if the stream consumer has just subscribed to the\n // 'data' event.\n //\n // In addition to the above conditions to keep reading data, the following\n // conditions prevent the data from being read:\n // - The stream has ended (state.ended).\n // - There is already a pending 'read' operation (state.reading). This is a\n // case where the the stream has called the implementation defined _read()\n // method, but they are processing the call asynchronously and have _not_\n // called push() with new data. In this case we skip performing more\n // read()s. The execution ends in this method again after the _read() ends\n // up calling push() with more data.\n while (!state.reading && !state.ended && (state.length < state.highWaterMark || state.flowing && state.length === 0)) {\n var len = state.length;\n debug('maybeReadMore read 0');\n stream.read(0);\n if (len === state.length)\n // didn't get any data, stop spinning.\n break;\n }\n state.readingMore = false;\n}\n\n// abstract method. to be overridden in specific implementation classes.\n// call cb(er, data) where data is <= n in length.\n// for virtual (non-string, non-buffer) streams, \"length\" is somewhat\n// arbitrary, and perhaps not very meaningful.\nReadable.prototype._read = function (n) {\n errorOrDestroy(this, new ERR_METHOD_NOT_IMPLEMENTED('_read()'));\n};\nReadable.prototype.pipe = function (dest, pipeOpts) {\n var src = this;\n var state = this._readableState;\n switch (state.pipesCount) {\n case 0:\n state.pipes = dest;\n break;\n case 1:\n state.pipes = [state.pipes, dest];\n break;\n default:\n state.pipes.push(dest);\n break;\n }\n state.pipesCount += 1;\n debug('pipe count=%d opts=%j', state.pipesCount, pipeOpts);\n var doEnd = (!pipeOpts || pipeOpts.end !== false) && dest !== process.stdout && dest !== process.stderr;\n var endFn = doEnd ? onend : unpipe;\n if (state.endEmitted) process.nextTick(endFn);else src.once('end', endFn);\n dest.on('unpipe', onunpipe);\n function onunpipe(readable, unpipeInfo) {\n debug('onunpipe');\n if (readable === src) {\n if (unpipeInfo && unpipeInfo.hasUnpiped === false) {\n unpipeInfo.hasUnpiped = true;\n cleanup();\n }\n }\n }\n function onend() {\n debug('onend');\n dest.end();\n }\n\n // when the dest drains, it reduces the awaitDrain counter\n // on the source. This would be more elegant with a .once()\n // handler in flow(), but adding and removing repeatedly is\n // too slow.\n var ondrain = pipeOnDrain(src);\n dest.on('drain', ondrain);\n var cleanedUp = false;\n function cleanup() {\n debug('cleanup');\n // cleanup event handlers once the pipe is broken\n dest.removeListener('close', onclose);\n dest.removeListener('finish', onfinish);\n dest.removeListener('drain', ondrain);\n dest.removeListener('error', onerror);\n dest.removeListener('unpipe', onunpipe);\n src.removeListener('end', onend);\n src.removeListener('end', unpipe);\n src.removeListener('data', ondata);\n cleanedUp = true;\n\n // if the reader is waiting for a drain event from this\n // specific writer, then it would cause it to never start\n // flowing again.\n // So, if this is awaiting a drain, then we just call it now.\n // If we don't know, then assume that we are waiting for one.\n if (state.awaitDrain && (!dest._writableState || dest._writableState.needDrain)) ondrain();\n }\n src.on('data', ondata);\n function ondata(chunk) {\n debug('ondata');\n var ret = dest.write(chunk);\n debug('dest.write', ret);\n if (ret === false) {\n // If the user unpiped during `dest.write()`, it is possible\n // to get stuck in a permanently paused state if that write\n // also returned false.\n // => Check whether `dest` is still a piping destination.\n if ((state.pipesCount === 1 && state.pipes === dest || state.pipesCount > 1 && indexOf(state.pipes, dest) !== -1) && !cleanedUp) {\n debug('false write response, pause', state.awaitDrain);\n state.awaitDrain++;\n }\n src.pause();\n }\n }\n\n // if the dest has an error, then stop piping into it.\n // however, don't suppress the throwing behavior for this.\n function onerror(er) {\n debug('onerror', er);\n unpipe();\n dest.removeListener('error', onerror);\n if (EElistenerCount(dest, 'error') === 0) errorOrDestroy(dest, er);\n }\n\n // Make sure our error handler is attached before userland ones.\n prependListener(dest, 'error', onerror);\n\n // Both close and finish should trigger unpipe, but only once.\n function onclose() {\n dest.removeListener('finish', onfinish);\n unpipe();\n }\n dest.once('close', onclose);\n function onfinish() {\n debug('onfinish');\n dest.removeListener('close', onclose);\n unpipe();\n }\n dest.once('finish', onfinish);\n function unpipe() {\n debug('unpipe');\n src.unpipe(dest);\n }\n\n // tell the dest that it's being piped to\n dest.emit('pipe', src);\n\n // start the flow if it hasn't been started already.\n if (!state.flowing) {\n debug('pipe resume');\n src.resume();\n }\n return dest;\n};\nfunction pipeOnDrain(src) {\n return function pipeOnDrainFunctionResult() {\n var state = src._readableState;\n debug('pipeOnDrain', state.awaitDrain);\n if (state.awaitDrain) state.awaitDrain--;\n if (state.awaitDrain === 0 && EElistenerCount(src, 'data')) {\n state.flowing = true;\n flow(src);\n }\n };\n}\nReadable.prototype.unpipe = function (dest) {\n var state = this._readableState;\n var unpipeInfo = {\n hasUnpiped: false\n };\n\n // if we're not piping anywhere, then do nothing.\n if (state.pipesCount === 0) return this;\n\n // just one destination. most common case.\n if (state.pipesCount === 1) {\n // passed in one, but it's not the right one.\n if (dest && dest !== state.pipes) return this;\n if (!dest) dest = state.pipes;\n\n // got a match.\n state.pipes = null;\n state.pipesCount = 0;\n state.flowing = false;\n if (dest) dest.emit('unpipe', this, unpipeInfo);\n return this;\n }\n\n // slow case. multiple pipe destinations.\n\n if (!dest) {\n // remove all.\n var dests = state.pipes;\n var len = state.pipesCount;\n state.pipes = null;\n state.pipesCount = 0;\n state.flowing = false;\n for (var i = 0; i < len; i++) dests[i].emit('unpipe', this, {\n hasUnpiped: false\n });\n return this;\n }\n\n // try to find the right one.\n var index = indexOf(state.pipes, dest);\n if (index === -1) return this;\n state.pipes.splice(index, 1);\n state.pipesCount -= 1;\n if (state.pipesCount === 1) state.pipes = state.pipes[0];\n dest.emit('unpipe', this, unpipeInfo);\n return this;\n};\n\n// set up data events if they are asked for\n// Ensure readable listeners eventually get something\nReadable.prototype.on = function (ev, fn) {\n var res = Stream.prototype.on.call(this, ev, fn);\n var state = this._readableState;\n if (ev === 'data') {\n // update readableListening so that resume() may be a no-op\n // a few lines down. This is needed to support once('readable').\n state.readableListening = this.listenerCount('readable') > 0;\n\n // Try start flowing on next tick if stream isn't explicitly paused\n if (state.flowing !== false) this.resume();\n } else if (ev === 'readable') {\n if (!state.endEmitted && !state.readableListening) {\n state.readableListening = state.needReadable = true;\n state.flowing = false;\n state.emittedReadable = false;\n debug('on readable', state.length, state.reading);\n if (state.length) {\n emitReadable(this);\n } else if (!state.reading) {\n process.nextTick(nReadingNextTick, this);\n }\n }\n }\n return res;\n};\nReadable.prototype.addListener = Readable.prototype.on;\nReadable.prototype.removeListener = function (ev, fn) {\n var res = Stream.prototype.removeListener.call(this, ev, fn);\n if (ev === 'readable') {\n // We need to check if there is someone still listening to\n // readable and reset the state. However this needs to happen\n // after readable has been emitted but before I/O (nextTick) to\n // support once('readable', fn) cycles. This means that calling\n // resume within the same tick will have no\n // effect.\n process.nextTick(updateReadableListening, this);\n }\n return res;\n};\nReadable.prototype.removeAllListeners = function (ev) {\n var res = Stream.prototype.removeAllListeners.apply(this, arguments);\n if (ev === 'readable' || ev === undefined) {\n // We need to check if there is someone still listening to\n // readable and reset the state. However this needs to happen\n // after readable has been emitted but before I/O (nextTick) to\n // support once('readable', fn) cycles. This means that calling\n // resume within the same tick will have no\n // effect.\n process.nextTick(updateReadableListening, this);\n }\n return res;\n};\nfunction updateReadableListening(self) {\n var state = self._readableState;\n state.readableListening = self.listenerCount('readable') > 0;\n if (state.resumeScheduled && !state.paused) {\n // flowing needs to be set to true now, otherwise\n // the upcoming resume will not flow.\n state.flowing = true;\n\n // crude way to check if we should resume\n } else if (self.listenerCount('data') > 0) {\n self.resume();\n }\n}\nfunction nReadingNextTick(self) {\n debug('readable nexttick read 0');\n self.read(0);\n}\n\n// pause() and resume() are remnants of the legacy readable stream API\n// If the user uses them, then switch into old mode.\nReadable.prototype.resume = function () {\n var state = this._readableState;\n if (!state.flowing) {\n debug('resume');\n // we flow only if there is no one listening\n // for readable, but we still have to call\n // resume()\n state.flowing = !state.readableListening;\n resume(this, state);\n }\n state.paused = false;\n return this;\n};\nfunction resume(stream, state) {\n if (!state.resumeScheduled) {\n state.resumeScheduled = true;\n process.nextTick(resume_, stream, state);\n }\n}\nfunction resume_(stream, state) {\n debug('resume', state.reading);\n if (!state.reading) {\n stream.read(0);\n }\n state.resumeScheduled = false;\n stream.emit('resume');\n flow(stream);\n if (state.flowing && !state.reading) stream.read(0);\n}\nReadable.prototype.pause = function () {\n debug('call pause flowing=%j', this._readableState.flowing);\n if (this._readableState.flowing !== false) {\n debug('pause');\n this._readableState.flowing = false;\n this.emit('pause');\n }\n this._readableState.paused = true;\n return this;\n};\nfunction flow(stream) {\n var state = stream._readableState;\n debug('flow', state.flowing);\n while (state.flowing && stream.read() !== null);\n}\n\n// wrap an old-style stream as the async data source.\n// This is *not* part of the readable stream interface.\n// It is an ugly unfortunate mess of history.\nReadable.prototype.wrap = function (stream) {\n var _this = this;\n var state = this._readableState;\n var paused = false;\n stream.on('end', function () {\n debug('wrapped end');\n if (state.decoder && !state.ended) {\n var chunk = state.decoder.end();\n if (chunk && chunk.length) _this.push(chunk);\n }\n _this.push(null);\n });\n stream.on('data', function (chunk) {\n debug('wrapped data');\n if (state.decoder) chunk = state.decoder.write(chunk);\n\n // don't skip over falsy values in objectMode\n if (state.objectMode && (chunk === null || chunk === undefined)) return;else if (!state.objectMode && (!chunk || !chunk.length)) return;\n var ret = _this.push(chunk);\n if (!ret) {\n paused = true;\n stream.pause();\n }\n });\n\n // proxy all the other methods.\n // important when wrapping filters and duplexes.\n for (var i in stream) {\n if (this[i] === undefined && typeof stream[i] === 'function') {\n this[i] = function methodWrap(method) {\n return function methodWrapReturnFunction() {\n return stream[method].apply(stream, arguments);\n };\n }(i);\n }\n }\n\n // proxy certain important events.\n for (var n = 0; n < kProxyEvents.length; n++) {\n stream.on(kProxyEvents[n], this.emit.bind(this, kProxyEvents[n]));\n }\n\n // when we try to consume some more bytes, simply unpause the\n // underlying stream.\n this._read = function (n) {\n debug('wrapped _read', n);\n if (paused) {\n paused = false;\n stream.resume();\n }\n };\n return this;\n};\nif (typeof Symbol === 'function') {\n Readable.prototype[Symbol.asyncIterator] = function () {\n if (createReadableStreamAsyncIterator === undefined) {\n createReadableStreamAsyncIterator = __webpack_require__(2955);\n }\n return createReadableStreamAsyncIterator(this);\n };\n}\nObject.defineProperty(Readable.prototype, 'readableHighWaterMark', {\n // making it explicit this property is not enumerable\n // because otherwise some prototype manipulation in\n // userland will fail\n enumerable: false,\n get: function get() {\n return this._readableState.highWaterMark;\n }\n});\nObject.defineProperty(Readable.prototype, 'readableBuffer', {\n // making it explicit this property is not enumerable\n // because otherwise some prototype manipulation in\n // userland will fail\n enumerable: false,\n get: function get() {\n return this._readableState && this._readableState.buffer;\n }\n});\nObject.defineProperty(Readable.prototype, 'readableFlowing', {\n // making it explicit this property is not enumerable\n // because otherwise some prototype manipulation in\n // userland will fail\n enumerable: false,\n get: function get() {\n return this._readableState.flowing;\n },\n set: function set(state) {\n if (this._readableState) {\n this._readableState.flowing = state;\n }\n }\n});\n\n// exposed for testing purposes only.\nReadable._fromList = fromList;\nObject.defineProperty(Readable.prototype, 'readableLength', {\n // making it explicit this property is not enumerable\n // because otherwise some prototype manipulation in\n // userland will fail\n enumerable: false,\n get: function get() {\n return this._readableState.length;\n }\n});\n\n// Pluck off n bytes from an array of buffers.\n// Length is the combined lengths of all the buffers in the list.\n// This function is designed to be inlinable, so please take care when making\n// changes to the function body.\nfunction fromList(n, state) {\n // nothing buffered\n if (state.length === 0) return null;\n var ret;\n if (state.objectMode) ret = state.buffer.shift();else if (!n || n >= state.length) {\n // read it all, truncate the list\n if (state.decoder) ret = state.buffer.join('');else if (state.buffer.length === 1) ret = state.buffer.first();else ret = state.buffer.concat(state.length);\n state.buffer.clear();\n } else {\n // read part of list\n ret = state.buffer.consume(n, state.decoder);\n }\n return ret;\n}\nfunction endReadable(stream) {\n var state = stream._readableState;\n debug('endReadable', state.endEmitted);\n if (!state.endEmitted) {\n state.ended = true;\n process.nextTick(endReadableNT, state, stream);\n }\n}\nfunction endReadableNT(state, stream) {\n debug('endReadableNT', state.endEmitted, state.length);\n\n // Check that we didn't get one last unshift.\n if (!state.endEmitted && state.length === 0) {\n state.endEmitted = true;\n stream.readable = false;\n stream.emit('end');\n if (state.autoDestroy) {\n // In case of duplex streams we need a way to detect\n // if the writable side is ready for autoDestroy as well\n var wState = stream._writableState;\n if (!wState || wState.autoDestroy && wState.finished) {\n stream.destroy();\n }\n }\n }\n}\nif (typeof Symbol === 'function') {\n Readable.from = function (iterable, opts) {\n if (from === undefined) {\n from = __webpack_require__(55157);\n }\n return from(Readable, iterable, opts);\n };\n}\nfunction indexOf(xs, x) {\n for (var i = 0, l = xs.length; i < l; i++) {\n if (xs[i] === x) return i;\n }\n return -1;\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNDU0MTIuanMiLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9pdGctbmV4dGdlbi1mcm9udGVuZC8uL25vZGVfbW9kdWxlcy9yZWFkYWJsZS1zdHJlYW0vbGliL19zdHJlYW1fcmVhZGFibGUuanM/YWQ3MSJdLCJzb3VyY2VzQ29udGVudCI6WyIvLyBDb3B5cmlnaHQgSm95ZW50LCBJbmMuIGFuZCBvdGhlciBOb2RlIGNvbnRyaWJ1dG9ycy5cbi8vXG4vLyBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYVxuLy8gY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZVxuLy8gXCJTb2Z0d2FyZVwiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nXG4vLyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsXG4vLyBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0XG4vLyBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGVcbi8vIGZvbGxvd2luZyBjb25kaXRpb25zOlxuLy9cbi8vIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkXG4vLyBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS5cbi8vXG4vLyBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTXG4vLyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GXG4vLyBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOXG4vLyBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSxcbi8vIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUlxuLy8gT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRVxuLy8gVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS5cblxuJ3VzZSBzdHJpY3QnO1xuXG5tb2R1bGUuZXhwb3J0cyA9IFJlYWRhYmxlO1xuXG4vKjxyZXBsYWNlbWVudD4qL1xudmFyIER1cGxleDtcbi8qPC9yZXBsYWNlbWVudD4qL1xuXG5SZWFkYWJsZS5SZWFkYWJsZVN0YXRlID0gUmVhZGFibGVTdGF0ZTtcblxuLyo8cmVwbGFjZW1lbnQ+Ki9cbnZhciBFRSA9IHJlcXVpcmUoJ2V2ZW50cycpLkV2ZW50RW1pdHRlcjtcbnZhciBFRWxpc3RlbmVyQ291bnQgPSBmdW5jdGlvbiBFRWxpc3RlbmVyQ291bnQoZW1pdHRlciwgdHlwZSkge1xuICByZXR1cm4gZW1pdHRlci5saXN0ZW5lcnModHlwZSkubGVuZ3RoO1xufTtcbi8qPC9yZXBsYWNlbWVudD4qL1xuXG4vKjxyZXBsYWNlbWVudD4qL1xudmFyIFN0cmVhbSA9IHJlcXVpcmUoJy4vaW50ZXJuYWwvc3RyZWFtcy9zdHJlYW0nKTtcbi8qPC9yZXBsYWNlbWVudD4qL1xuXG52YXIgQnVmZmVyID0gcmVxdWlyZSgnYnVmZmVyJykuQnVmZmVyO1xudmFyIE91clVpbnQ4QXJyYXkgPSAodHlwZW9mIGdsb2JhbCAhPT0gJ3VuZGVmaW5lZCcgPyBnbG9iYWwgOiB0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJyA/IHdpbmRvdyA6IHR5cGVvZiBzZWxmICE9PSAndW5kZWZpbmVkJyA/IHNlbGYgOiB7fSkuVWludDhBcnJheSB8fCBmdW5jdGlvbiAoKSB7fTtcbmZ1bmN0aW9uIF91aW50OEFycmF5VG9CdWZmZXIoY2h1bmspIHtcbiAgcmV0dXJuIEJ1ZmZlci5mcm9tKGNodW5rKTtcbn1cbmZ1bmN0aW9uIF9pc1VpbnQ4QXJyYXkob2JqKSB7XG4gIHJldHVybiBCdWZmZXIuaXNCdWZmZXIob2JqKSB8fCBvYmogaW5zdGFuY2VvZiBPdXJVaW50OEFycmF5O1xufVxuXG4vKjxyZXBsYWNlbWVudD4qL1xudmFyIGRlYnVnVXRpbCA9IHJlcXVpcmUoJ3V0aWwnKTtcbnZhciBkZWJ1ZztcbmlmIChkZWJ1Z1V0aWwgJiYgZGVidWdVdGlsLmRlYnVnbG9nKSB7XG4gIGRlYnVnID0gZGVidWdVdGlsLmRlYnVnbG9nKCdzdHJlYW0nKTtcbn0gZWxzZSB7XG4gIGRlYnVnID0gZnVuY3Rpb24gZGVidWcoKSB7fTtcbn1cbi8qPC9yZXBsYWNlbWVudD4qL1xuXG52YXIgQnVmZmVyTGlzdCA9IHJlcXVpcmUoJy4vaW50ZXJuYWwvc3RyZWFtcy9idWZmZXJfbGlzdCcpO1xudmFyIGRlc3Ryb3lJbXBsID0gcmVxdWlyZSgnLi9pbnRlcm5hbC9zdHJlYW1zL2Rlc3Ryb3knKTtcbnZhciBfcmVxdWlyZSA9IHJlcXVpcmUoJy4vaW50ZXJuYWwvc3RyZWFtcy9zdGF0ZScpLFxuICBnZXRIaWdoV2F0ZXJNYXJrID0gX3JlcXVpcmUuZ2V0SGlnaFdhdGVyTWFyaztcbnZhciBfcmVxdWlyZSRjb2RlcyA9IHJlcXVpcmUoJy4uL2Vycm9ycycpLmNvZGVzLFxuICBFUlJfSU5WQUxJRF9BUkdfVFlQRSA9IF9yZXF1aXJlJGNvZGVzLkVSUl9JTlZBTElEX0FSR19UWVBFLFxuICBFUlJfU1RSRUFNX1BVU0hfQUZURVJfRU9GID0gX3JlcXVpcmUkY29kZXMuRVJSX1NUUkVBTV9QVVNIX0FGVEVSX0VPRixcbiAgRVJSX01FVEhPRF9OT1RfSU1QTEVNRU5URUQgPSBfcmVxdWlyZSRjb2Rlcy5FUlJfTUVUSE9EX05PVF9JTVBMRU1FTlRFRCxcbiAgRVJSX1NUUkVBTV9VTlNISUZUX0FGVEVSX0VORF9FVkVOVCA9IF9yZXF1aXJlJGNvZGVzLkVSUl9TVFJFQU1fVU5TSElGVF9BRlRFUl9FTkRfRVZFTlQ7XG5cbi8vIExhenkgbG9hZGVkIHRvIGltcHJvdmUgdGhlIHN0YXJ0dXAgcGVyZm9ybWFuY2UuXG52YXIgU3RyaW5nRGVjb2RlcjtcbnZhciBjcmVhdGVSZWFkYWJsZVN0cmVhbUFzeW5jSXRlcmF0b3I7XG52YXIgZnJvbTtcbnJlcXVpcmUoJ2luaGVyaXRzJykoUmVhZGFibGUsIFN0cmVhbSk7XG52YXIgZXJyb3JPckRlc3Ryb3kgPSBkZXN0cm95SW1wbC5lcnJvck9yRGVzdHJveTtcbnZhciBrUHJveHlFdmVudHMgPSBbJ2Vycm9yJywgJ2Nsb3NlJywgJ2Rlc3Ryb3knLCAncGF1c2UnLCAncmVzdW1lJ107XG5mdW5jdGlvbiBwcmVwZW5kTGlzdGVuZXIoZW1pdHRlciwgZXZlbnQsIGZuKSB7XG4gIC8vIFNhZGx5IHRoaXMgaXMgbm90IGNhY2hlYWJsZSBhcyBzb21lIGxpYnJhcmllcyBidW5kbGUgdGhlaXIgb3duXG4gIC8vIGV2ZW50IGVtaXR0ZXIgaW1wbGVtZW50YXRpb24gd2l0aCB0aGVtLlxuICBpZiAodHlwZW9mIGVtaXR0ZXIucHJlcGVuZExpc3RlbmVyID09PSAnZnVuY3Rpb24nKSByZXR1cm4gZW1pdHRlci5wcmVwZW5kTGlzdGVuZXIoZXZlbnQsIGZuKTtcblxuICAvLyBUaGlzIGlzIGEgaGFjayB0byBtYWtlIHN1cmUgdGhhdCBvdXIgZXJyb3IgaGFuZGxlciBpcyBhdHRhY2hlZCBiZWZvcmUgYW55XG4gIC8vIHVzZXJsYW5kIG9uZXMuICBORVZFUiBETyBUSElTLiBUaGlzIGlzIGhlcmUgb25seSBiZWNhdXNlIHRoaXMgY29kZSBuZWVkc1xuICAvLyB0byBjb250aW51ZSB0byB3b3JrIHdpdGggb2xkZXIgdmVyc2lvbnMgb2YgTm9kZS5qcyB0aGF0IGRvIG5vdCBpbmNsdWRlXG4gIC8vIHRoZSBwcmVwZW5kTGlzdGVuZXIoKSBtZXRob2QuIFRoZSBnb2FsIGlzIHRvIGV2ZW50dWFsbHkgcmVtb3ZlIHRoaXMgaGFjay5cbiAgaWYgKCFlbWl0dGVyLl9ldmVudHMgfHwgIWVtaXR0ZXIuX2V2ZW50c1tldmVudF0pIGVtaXR0ZXIub24oZXZlbnQsIGZuKTtlbHNlIGlmIChBcnJheS5pc0FycmF5KGVtaXR0ZXIuX2V2ZW50c1tldmVudF0pKSBlbWl0dGVyLl9ldmVudHNbZXZlbnRdLnVuc2hpZnQoZm4pO2Vsc2UgZW1pdHRlci5fZXZlbnRzW2V2ZW50XSA9IFtmbiwgZW1pdHRlci5fZXZlbnRzW2V2ZW50XV07XG59XG5mdW5jdGlvbiBSZWFkYWJsZVN0YXRlKG9wdGlvbnMsIHN0cmVhbSwgaXNEdXBsZXgpIHtcbiAgRHVwbGV4ID0gRHVwbGV4IHx8IHJlcXVpcmUoJy4vX3N0cmVhbV9kdXBsZXgnKTtcbiAgb3B0aW9ucyA9IG9wdGlvbnMgfHwge307XG5cbiAgLy8gRHVwbGV4IHN0cmVhbXMgYXJlIGJvdGggcmVhZGFibGUgYW5kIHdyaXRhYmxlLCBidXQgc2hhcmVcbiAgLy8gdGhlIHNhbWUgb3B0aW9ucyBvYmplY3QuXG4gIC8vIEhvd2V2ZXIsIHNvbWUgY2FzZXMgcmVxdWlyZSBzZXR0aW5nIG9wdGlvbnMgdG8gZGlmZmVyZW50XG4gIC8vIHZhbHVlcyBmb3IgdGhlIHJlYWRhYmxlIGFuZCB0aGUgd3JpdGFibGUgc2lkZXMgb2YgdGhlIGR1cGxleCBzdHJlYW0uXG4gIC8vIFRoZXNlIG9wdGlvbnMgY2FuIGJlIHByb3ZpZGVkIHNlcGFyYXRlbHkgYXMgcmVhZGFibGVYWFggYW5kIHdyaXRhYmxlWFhYLlxuICBpZiAodHlwZW9mIGlzRHVwbGV4ICE9PSAnYm9vbGVhbicpIGlzRHVwbGV4ID0gc3RyZWFtIGluc3RhbmNlb2YgRHVwbGV4O1xuXG4gIC8vIG9iamVjdCBzdHJlYW0gZmxhZy4gVXNlZCB0byBtYWtlIHJlYWQobikgaWdub3JlIG4gYW5kIHRvXG4gIC8vIG1ha2UgYWxsIHRoZSBidWZmZXIgbWVyZ2luZyBhbmQgbGVuZ3RoIGNoZWNrcyBnbyBhd2F5XG4gIHRoaXMub2JqZWN0TW9kZSA9ICEhb3B0aW9ucy5vYmplY3RNb2RlO1xuICBpZiAoaXNEdXBsZXgpIHRoaXMub2JqZWN0TW9kZSA9IHRoaXMub2JqZWN0TW9kZSB8fCAhIW9wdGlvbnMucmVhZGFibGVPYmplY3RNb2RlO1xuXG4gIC8vIHRoZSBwb2ludCBhdCB3aGljaCBpdCBzdG9wcyBjYWxsaW5nIF9yZWFkKCkgdG8gZmlsbCB0aGUgYnVmZmVyXG4gIC8vIE5vdGU6IDAgaXMgYSB2YWxpZCB2YWx1ZSwgbWVhbnMgXCJkb24ndCBjYWxsIF9yZWFkIHByZWVtcHRpdmVseSBldmVyXCJcbiAgdGhpcy5oaWdoV2F0ZXJNYXJrID0gZ2V0SGlnaFdhdGVyTWFyayh0aGlzLCBvcHRpb25zLCAncmVhZGFibGVIaWdoV2F0ZXJNYXJrJywgaXNEdXBsZXgpO1xuXG4gIC8vIEEgbGlua2VkIGxpc3QgaXMgdXNlZCB0byBzdG9yZSBkYXRhIGNodW5rcyBpbnN0ZWFkIG9mIGFuIGFycmF5IGJlY2F1c2UgdGhlXG4gIC8vIGxpbmtlZCBsaXN0IGNhbiByZW1vdmUgZWxlbWVudHMgZnJvbSB0aGUgYmVnaW5uaW5nIGZhc3RlciB0aGFuXG4gIC8vIGFycmF5LnNoaWZ0KClcbiAgdGhpcy5idWZmZXIgPSBuZXcgQnVmZmVyTGlzdCgpO1xuICB0aGlzLmxlbmd0aCA9IDA7XG4gIHRoaXMucGlwZXMgPSBudWxsO1xuICB0aGlzLnBpcGVzQ291bnQgPSAwO1xuICB0aGlzLmZsb3dpbmcgPSBudWxsO1xuICB0aGlzLmVuZGVkID0gZmFsc2U7XG4gIHRoaXMuZW5kRW1pdHRlZCA9IGZhbHNlO1xuICB0aGlzLnJlYWRpbmcgPSBmYWxzZTtcblxuICAvLyBhIGZsYWcgdG8gYmUgYWJsZSB0byB0ZWxsIGlmIHRoZSBldmVudCAncmVhZGFibGUnLydkYXRhJyBpcyBlbWl0dGVkXG4gIC8vIGltbWVkaWF0ZWx5LCBvciBvbiBhIGxhdGVyIHRpY2suICBXZSBzZXQgdGhpcyB0byB0cnVlIGF0IGZpcnN0LCBiZWNhdXNlXG4gIC8vIGFueSBhY3Rpb25zIHRoYXQgc2hvdWxkbid0IGhhcHBlbiB1bnRpbCBcImxhdGVyXCIgc2hvdWxkIGdlbmVyYWxseSBhbHNvXG4gIC8vIG5vdCBoYXBwZW4gYmVmb3JlIHRoZSBmaXJzdCByZWFkIGNhbGwuXG4gIHRoaXMuc3luYyA9IHRydWU7XG5cbiAgLy8gd2hlbmV2ZXIgd2UgcmV0dXJuIG51bGwsIHRoZW4gd2Ugc2V0IGEgZmxhZyB0byBzYXlcbiAgLy8gdGhhdCB3ZSdyZSBhd2FpdGluZyBhICdyZWFkYWJsZScgZXZlbnQgZW1pc3Npb24uXG4gIHRoaXMubmVlZFJlYWRhYmxlID0gZmFsc2U7XG4gIHRoaXMuZW1pdHRlZFJlYWRhYmxlID0gZmFsc2U7XG4gIHRoaXMucmVhZGFibGVMaXN0ZW5pbmcgPSBmYWxzZTtcbiAgdGhpcy5yZXN1bWVTY2hlZHVsZWQgPSBmYWxzZTtcbiAgdGhpcy5wYXVzZWQgPSB0cnVlO1xuXG4gIC8vIFNob3VsZCBjbG9zZSBiZSBlbWl0dGVkIG9uIGRlc3Ryb3kuIERlZmF1bHRzIHRvIHRydWUuXG4gIHRoaXMuZW1pdENsb3NlID0gb3B0aW9ucy5lbWl0Q2xvc2UgIT09IGZhbHNlO1xuXG4gIC8vIFNob3VsZCAuZGVzdHJveSgpIGJlIGNhbGxlZCBhZnRlciAnZW5kJyAoYW5kIHBvdGVudGlhbGx5ICdmaW5pc2gnKVxuICB0aGlzLmF1dG9EZXN0cm95ID0gISFvcHRpb25zLmF1dG9EZXN0cm95O1xuXG4gIC8vIGhhcyBpdCBiZWVuIGRlc3Ryb3llZFxuICB0aGlzLmRlc3Ryb3llZCA9IGZhbHNlO1xuXG4gIC8vIENyeXB0byBpcyBraW5kIG9mIG9sZCBhbmQgY3J1c3R5LiAgSGlzdG9yaWNhbGx5LCBpdHMgZGVmYXVsdCBzdHJpbmdcbiAgLy8gZW5jb2RpbmcgaXMgJ2JpbmFyeScgc28gd2UgaGF2ZSB0byBtYWtlIHRoaXMgY29uZmlndXJhYmxlLlxuICAvLyBFdmVyeXRoaW5nIGVsc2UgaW4gdGhlIHVuaXZlcnNlIHVzZXMgJ3V0ZjgnLCB0aG91Z2guXG4gIHRoaXMuZGVmYXVsdEVuY29kaW5nID0gb3B0aW9ucy5kZWZhdWx0RW5jb2RpbmcgfHwgJ3V0ZjgnO1xuXG4gIC8vIHRoZSBudW1iZXIgb2Ygd3JpdGVycyB0aGF0IGFyZSBhd2FpdGluZyBhIGRyYWluIGV2ZW50IGluIC5waXBlKClzXG4gIHRoaXMuYXdhaXREcmFpbiA9IDA7XG5cbiAgLy8gaWYgdHJ1ZSwgYSBtYXliZVJlYWRNb3JlIGhhcyBiZWVuIHNjaGVkdWxlZFxuICB0aGlzLnJlYWRpbmdNb3JlID0gZmFsc2U7XG4gIHRoaXMuZGVjb2RlciA9IG51bGw7XG4gIHRoaXMuZW5jb2RpbmcgPSBudWxsO1xuICBpZiAob3B0aW9ucy5lbmNvZGluZykge1xuICAgIGlmICghU3RyaW5nRGVjb2RlcikgU3RyaW5nRGVjb2RlciA9IHJlcXVpcmUoJ3N0cmluZ19kZWNvZGVyLycpLlN0cmluZ0RlY29kZXI7XG4gICAgdGhpcy5kZWNvZGVyID0gbmV3IFN0cmluZ0RlY29kZXIob3B0aW9ucy5lbmNvZGluZyk7XG4gICAgdGhpcy5lbmNvZGluZyA9IG9wdGlvbnMuZW5jb2Rpbmc7XG4gIH1cbn1cbmZ1bmN0aW9uIFJlYWRhYmxlKG9wdGlvbnMpIHtcbiAgRHVwbGV4ID0gRHVwbGV4IHx8IHJlcXVpcmUoJy4vX3N0cmVhbV9kdXBsZXgnKTtcbiAgaWYgKCEodGhpcyBpbnN0YW5jZW9mIFJlYWRhYmxlKSkgcmV0dXJuIG5ldyBSZWFkYWJsZShvcHRpb25zKTtcblxuICAvLyBDaGVja2luZyBmb3IgYSBTdHJlYW0uRHVwbGV4IGluc3RhbmNlIGlzIGZhc3RlciBoZXJlIGluc3RlYWQgb2YgaW5zaWRlXG4gIC8vIHRoZSBSZWFkYWJsZVN0YXRlIGNvbnN0cnVjdG9yLCBhdCBsZWFzdCB3aXRoIFY4IDYuNVxuICB2YXIgaXNEdXBsZXggPSB0aGlzIGluc3RhbmNlb2YgRHVwbGV4O1xuICB0aGlzLl9yZWFkYWJsZVN0YXRlID0gbmV3IFJlYWRhYmxlU3RhdGUob3B0aW9ucywgdGhpcywgaXNEdXBsZXgpO1xuXG4gIC8vIGxlZ2FjeVxuICB0aGlzLnJlYWRhYmxlID0gdHJ1ZTtcbiAgaWYgKG9wdGlvbnMpIHtcbiAgICBpZiAodHlwZW9mIG9wdGlvbnMucmVhZCA9PT0gJ2Z1bmN0aW9uJykgdGhpcy5fcmVhZCA9IG9wdGlvbnMucmVhZDtcbiAgICBpZiAodHlwZW9mIG9wdGlvbnMuZGVzdHJveSA9PT0gJ2Z1bmN0aW9uJykgdGhpcy5fZGVzdHJveSA9IG9wdGlvbnMuZGVzdHJveTtcbiAgfVxuICBTdHJlYW0uY2FsbCh0aGlzKTtcbn1cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShSZWFkYWJsZS5wcm90b3R5cGUsICdkZXN0cm95ZWQnLCB7XG4gIC8vIG1ha2luZyBpdCBleHBsaWNpdCB0aGlzIHByb3BlcnR5IGlzIG5vdCBlbnVtZXJhYmxlXG4gIC8vIGJlY2F1c2Ugb3RoZXJ3aXNlIHNvbWUgcHJvdG90eXBlIG1hbmlwdWxhdGlvbiBpblxuICAvLyB1c2VybGFuZCB3aWxsIGZhaWxcbiAgZW51bWVyYWJsZTogZmFsc2UsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIGlmICh0aGlzLl9yZWFkYWJsZVN0YXRlID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuX3JlYWRhYmxlU3RhdGUuZGVzdHJveWVkO1xuICB9LFxuICBzZXQ6IGZ1bmN0aW9uIHNldCh2YWx1ZSkge1xuICAgIC8vIHdlIGlnbm9yZSB0aGUgdmFsdWUgaWYgdGhlIHN0cmVhbVxuICAgIC8vIGhhcyBub3QgYmVlbiBpbml0aWFsaXplZCB5ZXRcbiAgICBpZiAoIXRoaXMuX3JlYWRhYmxlU3RhdGUpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyBiYWNrd2FyZCBjb21wYXRpYmlsaXR5LCB0aGUgdXNlciBpcyBleHBsaWNpdGx5XG4gICAgLy8gbWFuYWdpbmcgZGVzdHJveWVkXG4gICAgdGhpcy5fcmVhZGFibGVTdGF0ZS5kZXN0cm95ZWQgPSB2YWx1ZTtcbiAgfVxufSk7XG5SZWFkYWJsZS5wcm90b3R5cGUuZGVzdHJveSA9IGRlc3Ryb3lJbXBsLmRlc3Ryb3k7XG5SZWFkYWJsZS5wcm90b3R5cGUuX3VuZGVzdHJveSA9IGRlc3Ryb3lJbXBsLnVuZGVzdHJveTtcblJlYWRhYmxlLnByb3RvdHlwZS5fZGVzdHJveSA9IGZ1bmN0aW9uIChlcnIsIGNiKSB7XG4gIGNiKGVycik7XG59O1xuXG4vLyBNYW51YWxseSBzaG92ZSBzb21ldGhpbmcgaW50byB0aGUgcmVhZCgpIGJ1ZmZlci5cbi8vIFRoaXMgcmV0dXJucyB0cnVlIGlmIHRoZSBoaWdoV2F0ZXJNYXJrIGhhcyBub3QgYmVlbiBoaXQgeWV0LFxuLy8gc2ltaWxhciB0byBob3cgV3JpdGFibGUud3JpdGUoKSByZXR1cm5zIHRydWUgaWYgeW91IHNob3VsZFxuLy8gd3JpdGUoKSBzb21lIG1vcmUuXG5SZWFkYWJsZS5wcm90b3R5cGUucHVzaCA9IGZ1bmN0aW9uIChjaHVuaywgZW5jb2RpbmcpIHtcbiAgdmFyIHN0YXRlID0gdGhpcy5fcmVhZGFibGVTdGF0ZTtcbiAgdmFyIHNraXBDaHVua0NoZWNrO1xuICBpZiAoIXN0YXRlLm9iamVjdE1vZGUpIHtcbiAgICBpZiAodHlwZW9mIGNodW5rID09PSAnc3RyaW5nJykge1xuICAgICAgZW5jb2RpbmcgPSBlbmNvZGluZyB8fCBzdGF0ZS5kZWZhdWx0RW5jb2Rpbmc7XG4gICAgICBpZiAoZW5jb2RpbmcgIT09IHN0YXRlLmVuY29kaW5nKSB7XG4gICAgICAgIGNodW5rID0gQnVmZmVyLmZyb20oY2h1bmssIGVuY29kaW5nKTtcbiAgICAgICAgZW5jb2RpbmcgPSAnJztcbiAgICAgIH1cbiAgICAgIHNraXBDaHVua0NoZWNrID0gdHJ1ZTtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgc2tpcENodW5rQ2hlY2sgPSB0cnVlO1xuICB9XG4gIHJldHVybiByZWFkYWJsZUFkZENodW5rKHRoaXMsIGNodW5rLCBlbmNvZGluZywgZmFsc2UsIHNraXBDaHVua0NoZWNrKTtcbn07XG5cbi8vIFVuc2hpZnQgc2hvdWxkICphbHdheXMqIGJlIHNvbWV0aGluZyBkaXJlY3RseSBvdXQgb2YgcmVhZCgpXG5SZWFkYWJsZS5wcm90b3R5cGUudW5zaGlmdCA9IGZ1bmN0aW9uIChjaHVuaykge1xuICByZXR1cm4gcmVhZGFibGVBZGRDaHVuayh0aGlzLCBjaHVuaywgbnVsbCwgdHJ1ZSwgZmFsc2UpO1xufTtcbmZ1bmN0aW9uIHJlYWRhYmxlQWRkQ2h1bmsoc3RyZWFtLCBjaHVuaywgZW5jb2RpbmcsIGFkZFRvRnJvbnQsIHNraXBDaHVua0NoZWNrKSB7XG4gIGRlYnVnKCdyZWFkYWJsZUFkZENodW5rJywgY2h1bmspO1xuICB2YXIgc3RhdGUgPSBzdHJlYW0uX3JlYWRhYmxlU3RhdGU7XG4gIGlmIChjaHVuayA9PT0gbnVsbCkge1xuICAgIHN0YXRlLnJlYWRpbmcgPSBmYWxzZTtcbiAgICBvbkVvZkNodW5rKHN0cmVhbSwgc3RhdGUpO1xuICB9IGVsc2Uge1xuICAgIHZhciBlcjtcbiAgICBpZiAoIXNraXBDaHVua0NoZWNrKSBlciA9IGNodW5rSW52YWxpZChzdGF0ZSwgY2h1bmspO1xuICAgIGlmIChlcikge1xuICAgICAgZXJyb3JPckRlc3Ryb3koc3RyZWFtLCBlcik7XG4gICAgfSBlbHNlIGlmIChzdGF0ZS5vYmplY3RNb2RlIHx8IGNodW5rICYmIGNodW5rLmxlbmd0aCA+IDApIHtcbiAgICAgIGlmICh0eXBlb2YgY2h1bmsgIT09ICdzdHJpbmcnICYmICFzdGF0ZS5vYmplY3RNb2RlICYmIE9iamVjdC5nZXRQcm90b3R5cGVPZihjaHVuaykgIT09IEJ1ZmZlci5wcm90b3R5cGUpIHtcbiAgICAgICAgY2h1bmsgPSBfdWludDhBcnJheVRvQnVmZmVyKGNodW5rKTtcbiAgICAgIH1cbiAgICAgIGlmIChhZGRUb0Zyb250KSB7XG4gICAgICAgIGlmIChzdGF0ZS5lbmRFbWl0dGVkKSBlcnJvck9yRGVzdHJveShzdHJlYW0sIG5ldyBFUlJfU1RSRUFNX1VOU0hJRlRfQUZURVJfRU5EX0VWRU5UKCkpO2Vsc2UgYWRkQ2h1bmsoc3RyZWFtLCBzdGF0ZSwgY2h1bmssIHRydWUpO1xuICAgICAgfSBlbHNlIGlmIChzdGF0ZS5lbmRlZCkge1xuICAgICAgICBlcnJvck9yRGVzdHJveShzdHJlYW0sIG5ldyBFUlJfU1RSRUFNX1BVU0hfQUZURVJfRU9GKCkpO1xuICAgICAgfSBlbHNlIGlmIChzdGF0ZS5kZXN0cm95ZWQpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgc3RhdGUucmVhZGluZyA9IGZhbHNlO1xuICAgICAgICBpZiAoc3RhdGUuZGVjb2RlciAmJiAhZW5jb2RpbmcpIHtcbiAgICAgICAgICBjaHVuayA9IHN0YXRlLmRlY29kZXIud3JpdGUoY2h1bmspO1xuICAgICAgICAgIGlmIChzdGF0ZS5vYmplY3RNb2RlIHx8IGNodW5rLmxlbmd0aCAhPT0gMCkgYWRkQ2h1bmsoc3RyZWFtLCBzdGF0ZSwgY2h1bmssIGZhbHNlKTtlbHNlIG1heWJlUmVhZE1vcmUoc3RyZWFtLCBzdGF0ZSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgYWRkQ2h1bmsoc3RyZWFtLCBzdGF0ZSwgY2h1bmssIGZhbHNlKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoIWFkZFRvRnJvbnQpIHtcbiAgICAgIHN0YXRlLnJlYWRpbmcgPSBmYWxzZTtcbiAgICAgIG1heWJlUmVhZE1vcmUoc3RyZWFtLCBzdGF0ZSk7XG4gICAgfVxuICB9XG5cbiAgLy8gV2UgY2FuIHB1c2ggbW9yZSBkYXRhIGlmIHdlIGFyZSBiZWxvdyB0aGUgaGlnaFdhdGVyTWFyay5cbiAgLy8gQWxzbywgaWYgd2UgaGF2ZSBubyBkYXRhIHlldCwgd2UgY2FuIHN0YW5kIHNvbWUgbW9yZSBieXRlcy5cbiAgLy8gVGhpcyBpcyB0byB3b3JrIGFyb3VuZCBjYXNlcyB3aGVyZSBod209MCwgc3VjaCBhcyB0aGUgcmVwbC5cbiAgcmV0dXJuICFzdGF0ZS5lbmRlZCAmJiAoc3RhdGUubGVuZ3RoIDwgc3RhdGUuaGlnaFdhdGVyTWFyayB8fCBzdGF0ZS5sZW5ndGggPT09IDApO1xufVxuZnVuY3Rpb24gYWRkQ2h1bmsoc3RyZWFtLCBzdGF0ZSwgY2h1bmssIGFkZFRvRnJvbnQpIHtcbiAgaWYgKHN0YXRlLmZsb3dpbmcgJiYgc3RhdGUubGVuZ3RoID09PSAwICYmICFzdGF0ZS5zeW5jKSB7XG4gICAgc3RhdGUuYXdhaXREcmFpbiA9IDA7XG4gICAgc3RyZWFtLmVtaXQoJ2RhdGEnLCBjaHVuayk7XG4gIH0gZWxzZSB7XG4gICAgLy8gdXBkYXRlIHRoZSBidWZmZXIgaW5mby5cbiAgICBzdGF0ZS5sZW5ndGggKz0gc3RhdGUub2JqZWN0TW9kZSA/IDEgOiBjaHVuay5sZW5ndGg7XG4gICAgaWYgKGFkZFRvRnJvbnQpIHN0YXRlLmJ1ZmZlci51bnNoaWZ0KGNodW5rKTtlbHNlIHN0YXRlLmJ1ZmZlci5wdXNoKGNodW5rKTtcbiAgICBpZiAoc3RhdGUubmVlZFJlYWRhYmxlKSBlbWl0UmVhZGFibGUoc3RyZWFtKTtcbiAgfVxuICBtYXliZVJlYWRNb3JlKHN0cmVhbSwgc3RhdGUpO1xufVxuZnVuY3Rpb24gY2h1bmtJbnZhbGlkKHN0YXRlLCBjaHVuaykge1xuICB2YXIgZXI7XG4gIGlmICghX2lzVWludDhBcnJheShjaHVuaykgJiYgdHlwZW9mIGNodW5rICE9PSAnc3RyaW5nJyAmJiBjaHVuayAhPT0gdW5kZWZpbmVkICYmICFzdGF0ZS5vYmplY3RNb2RlKSB7XG4gICAgZXIgPSBuZXcgRVJSX0lOVkFMSURfQVJHX1RZUEUoJ2NodW5rJywgWydzdHJpbmcnLCAnQnVmZmVyJywgJ1VpbnQ4QXJyYXknXSwgY2h1bmspO1xuICB9XG4gIHJldHVybiBlcjtcbn1cblJlYWRhYmxlLnByb3RvdHlwZS5pc1BhdXNlZCA9IGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuIHRoaXMuX3JlYWRhYmxlU3RhdGUuZmxvd2luZyA9PT0gZmFsc2U7XG59O1xuXG4vLyBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eS5cblJlYWRhYmxlLnByb3RvdHlwZS5zZXRFbmNvZGluZyA9IGZ1bmN0aW9uIChlbmMpIHtcbiAgaWYgKCFTdHJpbmdEZWNvZGVyKSBTdHJpbmdEZWNvZGVyID0gcmVxdWlyZSgnc3RyaW5nX2RlY29kZXIvJykuU3RyaW5nRGVjb2RlcjtcbiAgdmFyIGRlY29kZXIgPSBuZXcgU3RyaW5nRGVjb2RlcihlbmMpO1xuICB0aGlzLl9yZWFkYWJsZVN0YXRlLmRlY29kZXIgPSBkZWNvZGVyO1xuICAvLyBJZiBzZXRFbmNvZGluZyhudWxsKSwgZGVjb2Rlci5lbmNvZGluZyBlcXVhbHMgdXRmOFxuICB0aGlzLl9yZWFkYWJsZVN0YXRlLmVuY29kaW5nID0gdGhpcy5fcmVhZGFibGVTdGF0ZS5kZWNvZGVyLmVuY29kaW5nO1xuXG4gIC8vIEl0ZXJhdGUgb3ZlciBjdXJyZW50IGJ1ZmZlciB0byBjb252ZXJ0IGFscmVhZHkgc3RvcmVkIEJ1ZmZlcnM6XG4gIHZhciBwID0gdGhpcy5fcmVhZGFibGVTdGF0ZS5idWZmZXIuaGVhZDtcbiAgdmFyIGNvbnRlbnQgPSAnJztcbiAgd2hpbGUgKHAgIT09IG51bGwpIHtcbiAgICBjb250ZW50ICs9IGRlY29kZXIud3JpdGUocC5kYXRhKTtcbiAgICBwID0gcC5uZXh0O1xuICB9XG4gIHRoaXMuX3JlYWRhYmxlU3RhdGUuYnVmZmVyLmNsZWFyKCk7XG4gIGlmIChjb250ZW50ICE9PSAnJykgdGhpcy5fcmVhZGFibGVTdGF0ZS5idWZmZXIucHVzaChjb250ZW50KTtcbiAgdGhpcy5fcmVhZGFibGVTdGF0ZS5sZW5ndGggPSBjb250ZW50Lmxlbmd0aDtcbiAgcmV0dXJuIHRoaXM7XG59O1xuXG4vLyBEb24ndCByYWlzZSB0aGUgaHdtID4gMUdCXG52YXIgTUFYX0hXTSA9IDB4NDAwMDAwMDA7XG5mdW5jdGlvbiBjb21wdXRlTmV3SGlnaFdhdGVyTWFyayhuKSB7XG4gIGlmIChuID49IE1BWF9IV00pIHtcbiAgICAvLyBUT0RPKHJvbmFnKTogVGhyb3cgRVJSX1ZBTFVFX09VVF9PRl9SQU5HRS5cbiAgICBuID0gTUFYX0hXTTtcbiAgfSBlbHNlIHtcbiAgICAvLyBHZXQgdGhlIG5leHQgaGlnaGVzdCBwb3dlciBvZiAyIHRvIHByZXZlbnQgaW5jcmVhc2luZyBod20gZXhjZXNzaXZlbHkgaW5cbiAgICAvLyB0aW55IGFtb3VudHNcbiAgICBuLS07XG4gICAgbiB8PSBuID4+PiAxO1xuICAgIG4gfD0gbiA+Pj4gMjtcbiAgICBuIHw9IG4gPj4+IDQ7XG4gICAgbiB8PSBuID4+PiA4O1xuICAgIG4gfD0gbiA+Pj4gMTY7XG4gICAgbisrO1xuICB9XG4gIHJldHVybiBuO1xufVxuXG4vLyBUaGlzIGZ1bmN0aW9uIGlzIGRlc2lnbmVkIHRvIGJlIGlubGluYWJsZSwgc28gcGxlYXNlIHRha2UgY2FyZSB3aGVuIG1ha2luZ1xuLy8gY2hhbmdlcyB0byB0aGUgZnVuY3Rpb24gYm9keS5cbmZ1bmN0aW9uIGhvd011Y2hUb1JlYWQobiwgc3RhdGUpIHtcbiAgaWYgKG4gPD0gMCB8fCBzdGF0ZS5sZW5ndGggPT09IDAgJiYgc3RhdGUuZW5kZWQpIHJldHVybiAwO1xuICBpZiAoc3RhdGUub2JqZWN0TW9kZSkgcmV0dXJuIDE7XG4gIGlmIChuICE9PSBuKSB7XG4gICAgLy8gT25seSBmbG93IG9uZSBidWZmZXIgYXQgYSB0aW1lXG4gICAgaWYgKHN0YXRlLmZsb3dpbmcgJiYgc3RhdGUubGVuZ3RoKSByZXR1cm4gc3RhdGUuYnVmZmVyLmhlYWQuZGF0YS5sZW5ndGg7ZWxzZSByZXR1cm4gc3RhdGUubGVuZ3RoO1xuICB9XG4gIC8vIElmIHdlJ3JlIGFza2luZyBmb3IgbW9yZSB0aGFuIHRoZSBjdXJyZW50IGh3bSwgdGhlbiByYWlzZSB0aGUgaHdtLlxuICBpZiAobiA+IHN0YXRlLmhpZ2hXYXRlck1hcmspIHN0YXRlLmhpZ2hXYXRlck1hcmsgPSBjb21wdXRlTmV3SGlnaFdhdGVyTWFyayhuKTtcbiAgaWYgKG4gPD0gc3RhdGUubGVuZ3RoKSByZXR1cm4gbjtcbiAgLy8gRG9uJ3QgaGF2ZSBlbm91Z2hcbiAgaWYgKCFzdGF0ZS5lbmRlZCkge1xuICAgIHN0YXRlLm5lZWRSZWFkYWJsZSA9IHRydWU7XG4gICAgcmV0dXJuIDA7XG4gIH1cbiAgcmV0dXJuIHN0YXRlLmxlbmd0aDtcbn1cblxuLy8geW91IGNhbiBvdmVycmlkZSBlaXRoZXIgdGhpcyBtZXRob2QsIG9yIHRoZSBhc3luYyBfcmVhZChuKSBiZWxvdy5cblJlYWRhYmxlLnByb3RvdHlwZS5yZWFkID0gZnVuY3Rpb24gKG4pIHtcbiAgZGVidWcoJ3JlYWQnLCBuKTtcbiAgbiA9IHBhcnNlSW50KG4sIDEwKTtcbiAgdmFyIHN0YXRlID0gdGhpcy5fcmVhZGFibGVTdGF0ZTtcbiAgdmFyIG5PcmlnID0gbjtcbiAgaWYgKG4gIT09IDApIHN0YXRlLmVtaXR0ZWRSZWFkYWJsZSA9IGZhbHNlO1xuXG4gIC8vIGlmIHdlJ3JlIGRvaW5nIHJlYWQoMCkgdG8gdHJpZ2dlciBhIHJlYWRhYmxlIGV2ZW50LCBidXQgd2VcbiAgLy8gYWxyZWFkeSBoYXZlIGEgYnVuY2ggb2YgZGF0YSBpbiB0aGUgYnVmZmVyLCB0aGVuIGp1c3QgdHJpZ2dlclxuICAvLyB0aGUgJ3JlYWRhYmxlJyBldmVudCBhbmQgbW92ZSBvbi5cbiAgaWYgKG4gPT09IDAgJiYgc3RhdGUubmVlZFJlYWRhYmxlICYmICgoc3RhdGUuaGlnaFdhdGVyTWFyayAhPT0gMCA/IHN0YXRlLmxlbmd0aCA+PSBzdGF0ZS5oaWdoV2F0ZXJNYXJrIDogc3RhdGUubGVuZ3RoID4gMCkgfHwgc3RhdGUuZW5kZWQpKSB7XG4gICAgZGVidWcoJ3JlYWQ6IGVtaXRSZWFkYWJsZScsIHN0YXRlLmxlbmd0aCwgc3RhdGUuZW5kZWQpO1xuICAgIGlmIChzdGF0ZS5sZW5ndGggPT09IDAgJiYgc3RhdGUuZW5kZWQpIGVuZFJlYWRhYmxlKHRoaXMpO2Vsc2UgZW1pdFJlYWRhYmxlKHRoaXMpO1xuICAgIHJldHVybiBudWxsO1xuICB9XG4gIG4gPSBob3dNdWNoVG9SZWFkKG4sIHN0YXRlKTtcblxuICAvLyBpZiB3ZSd2ZSBlbmRlZCwgYW5kIHdlJ3JlIG5vdyBjbGVhciwgdGhlbiBmaW5pc2ggaXQgdXAuXG4gIGlmIChuID09PSAwICYmIHN0YXRlLmVuZGVkKSB7XG4gICAgaWYgKHN0YXRlLmxlbmd0aCA9PT0gMCkgZW5kUmVhZGFibGUodGhpcyk7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICAvLyBBbGwgdGhlIGFjdHVhbCBjaHVuayBnZW5lcmF0aW9uIGxvZ2ljIG5lZWRzIHRvIGJlXG4gIC8vICpiZWxvdyogdGhlIGNhbGwgdG8gX3JlYWQuICBUaGUgcmVhc29uIGlzIHRoYXQgaW4gY2VydGFpblxuICAvLyBzeW50aGV0aWMgc3RyZWFtIGNhc2VzLCBzdWNoIGFzIHBhc3N0aHJvdWdoIHN0cmVhbXMsIF9yZWFkXG4gIC8vIG1heSBiZSBhIGNvbXBsZXRlbHkgc3luY2hyb25vdXMgb3BlcmF0aW9uIHdoaWNoIG1heSBjaGFuZ2VcbiAgLy8gdGhlIHN0YXRlIG9mIHRoZSByZWFkIGJ1ZmZlciwgcHJvdmlkaW5nIGVub3VnaCBkYXRhIHdoZW5cbiAgLy8gYmVmb3JlIHRoZXJlIHdhcyAqbm90KiBlbm91Z2guXG4gIC8vXG4gIC8vIFNvLCB0aGUgc3RlcHMgYXJlOlxuICAvLyAxLiBGaWd1cmUgb3V0IHdoYXQgdGhlIHN0YXRlIG9mIHRoaW5ncyB3aWxsIGJlIGFmdGVyIHdlIGRvXG4gIC8vIGEgcmVhZCBmcm9tIHRoZSBidWZmZXIuXG4gIC8vXG4gIC8vIDIuIElmIHRoYXQgcmVzdWx0aW5nIHN0YXRlIHdpbGwgdHJpZ2dlciBhIF9yZWFkLCB0aGVuIGNhbGwgX3JlYWQuXG4gIC8vIE5vdGUgdGhhdCB0aGlzIG1heSBiZSBhc3luY2hyb25vdXMsIG9yIHN5bmNocm9ub3VzLiAgWWVzLCBpdCBpc1xuICAvLyBkZWVwbHkgdWdseSB0byB3cml0ZSBBUElzIHRoaXMgd2F5LCBidXQgdGhhdCBzdGlsbCBkb2Vzbid0IG1lYW5cbiAgLy8gdGhhdCB0aGUgUmVhZGFibGUgY2xhc3Mgc2hvdWxkIGJlaGF2ZSBpbXByb3Blcmx5LCBhcyBzdHJlYW1zIGFyZVxuICAvLyBkZXNpZ25lZCB0byBiZSBzeW5jL2FzeW5jIGFnbm9zdGljLlxuICAvLyBUYWtlIG5vdGUgaWYgdGhlIF9yZWFkIGNhbGwgaXMgc3luYyBvciBhc3luYyAoaWUsIGlmIHRoZSByZWFkIGNhbGxcbiAgLy8gaGFzIHJldHVybmVkIHlldCksIHNvIHRoYXQgd2Uga25vdyB3aGV0aGVyIG9yIG5vdCBpdCdzIHNhZmUgdG8gZW1pdFxuICAvLyAncmVhZGFibGUnIGV0Yy5cbiAgLy9cbiAgLy8gMy4gQWN0dWFsbHkgcHVsbCB0aGUgcmVxdWVzdGVkIGNodW5rcyBvdXQgb2YgdGhlIGJ1ZmZlciBhbmQgcmV0dXJuLlxuXG4gIC8vIGlmIHdlIG5lZWQgYSByZWFkYWJsZSBldmVudCwgdGhlbiB3ZSBuZWVkIHRvIGRvIHNvbWUgcmVhZGluZy5cbiAgdmFyIGRvUmVhZCA9IHN0YXRlLm5lZWRSZWFkYWJsZTtcbiAgZGVidWcoJ25lZWQgcmVhZGFibGUnLCBkb1JlYWQpO1xuXG4gIC8vIGlmIHdlIGN1cnJlbnRseSBoYXZlIGxlc3MgdGhhbiB0aGUgaGlnaFdhdGVyTWFyaywgdGhlbiBhbHNvIHJlYWQgc29tZVxuICBpZiAoc3RhdGUubGVuZ3RoID09PSAwIHx8IHN0YXRlLmxlbmd0aCAtIG4gPCBzdGF0ZS5oaWdoV2F0ZXJNYXJrKSB7XG4gICAgZG9SZWFkID0gdHJ1ZTtcbiAgICBkZWJ1ZygnbGVuZ3RoIGxlc3MgdGhhbiB3YXRlcm1hcmsnLCBkb1JlYWQpO1xuICB9XG5cbiAgLy8gaG93ZXZlciwgaWYgd2UndmUgZW5kZWQsIHRoZW4gdGhlcmUncyBubyBwb2ludCwgYW5kIGlmIHdlJ3JlIGFscmVhZHlcbiAgLy8gcmVhZGluZywgdGhlbiBpdCdzIHVubmVjZXNzYXJ5LlxuICBpZiAoc3RhdGUuZW5kZWQgfHwgc3RhdGUucmVhZGluZykge1xuICAgIGRvUmVhZCA9IGZhbHNlO1xuICAgIGRlYnVnKCdyZWFkaW5nIG9yIGVuZGVkJywgZG9SZWFkKTtcbiAgfSBlbHNlIGlmIChkb1JlYWQpIHtcbiAgICBkZWJ1ZygnZG8gcmVhZCcpO1xuICAgIHN0YXRlLnJlYWRpbmcgPSB0cnVlO1xuICAgIHN0YXRlLnN5bmMgPSB0cnVlO1xuICAgIC8vIGlmIHRoZSBsZW5ndGggaXMgY3VycmVudGx5IHplcm8sIHRoZW4gd2UgKm5lZWQqIGEgcmVhZGFibGUgZXZlbnQuXG4gICAgaWYgKHN0YXRlLmxlbmd0aCA9PT0gMCkgc3RhdGUubmVlZFJlYWRhYmxlID0gdHJ1ZTtcbiAgICAvLyBjYWxsIGludGVybmFsIHJlYWQgbWV0aG9kXG4gICAgdGhpcy5fcmVhZChzdGF0ZS5oaWdoV2F0ZXJNYXJrKTtcbiAgICBzdGF0ZS5zeW5jID0gZmFsc2U7XG4gICAgLy8gSWYgX3JlYWQgcHVzaGVkIGRhdGEgc3luY2hyb25vdXNseSwgdGhlbiBgcmVhZGluZ2Agd2lsbCBiZSBmYWxzZSxcbiAgICAvLyBhbmQgd2UgbmVlZCB0byByZS1ldmFsdWF0ZSBob3cgbXVjaCBkYXRhIHdlIGNhbiByZXR1cm4gdG8gdGhlIHVzZXIuXG4gICAgaWYgKCFzdGF0ZS5yZWFkaW5nKSBuID0gaG93TXVjaFRvUmVhZChuT3JpZywgc3RhdGUpO1xuICB9XG4gIHZhciByZXQ7XG4gIGlmIChuID4gMCkgcmV0ID0gZnJvbUxpc3Qobiwgc3RhdGUpO2Vsc2UgcmV0ID0gbnVsbDtcbiAgaWYgKHJldCA9PT0gbnVsbCkge1xuICAgIHN0YXRlLm5lZWRSZWFkYWJsZSA9IHN0YXRlLmxlbmd0aCA8PSBzdGF0ZS5oaWdoV2F0ZXJNYXJrO1xuICAgIG4gPSAwO1xuICB9IGVsc2Uge1xuICAgIHN0YXRlLmxlbmd0aCAtPSBuO1xuICAgIHN0YXRlLmF3YWl0RHJhaW4gPSAwO1xuICB9XG4gIGlmIChzdGF0ZS5sZW5ndGggPT09IDApIHtcbiAgICAvLyBJZiB3ZSBoYXZlIG5vdGhpbmcgaW4gdGhlIGJ1ZmZlciwgdGhlbiB3ZSB3YW50IHRvIGtub3dcbiAgICAvLyBhcyBzb29uIGFzIHdlICpkbyogZ2V0IHNvbWV0aGluZyBpbnRvIHRoZSBidWZmZXIuXG4gICAgaWYgKCFzdGF0ZS5lbmRlZCkgc3RhdGUubmVlZFJlYWRhYmxlID0gdHJ1ZTtcblxuICAgIC8vIElmIHdlIHRyaWVkIHRvIHJlYWQoKSBwYXN0IHRoZSBFT0YsIHRoZW4gZW1pdCBlbmQgb24gdGhlIG5leHQgdGljay5cbiAgICBpZiAobk9yaWcgIT09IG4gJiYgc3RhdGUuZW5kZWQpIGVuZFJlYWRhYmxlKHRoaXMpO1xuICB9XG4gIGlmIChyZXQgIT09IG51bGwpIHRoaXMuZW1pdCgnZGF0YScsIHJldCk7XG4gIHJldHVybiByZXQ7XG59O1xuZnVuY3Rpb24gb25Fb2ZDaHVuayhzdHJlYW0sIHN0YXRlKSB7XG4gIGRlYnVnKCdvbkVvZkNodW5rJyk7XG4gIGlmIChzdGF0ZS5lbmRlZCkgcmV0dXJuO1xuICBpZiAoc3RhdGUuZGVjb2Rlcikge1xuICAgIHZhciBjaHVuayA9IHN0YXRlLmRlY29kZXIuZW5kKCk7XG4gICAgaWYgKGNodW5rICYmIGNodW5rLmxlbmd0aCkge1xuICAgICAgc3RhdGUuYnVmZmVyLnB1c2goY2h1bmspO1xuICAgICAgc3RhdGUubGVuZ3RoICs9IHN0YXRlLm9iamVjdE1vZGUgPyAxIDogY2h1bmsubGVuZ3RoO1xuICAgIH1cbiAgfVxuICBzdGF0ZS5lbmRlZCA9IHRydWU7XG4gIGlmIChzdGF0ZS5zeW5jKSB7XG4gICAgLy8gaWYgd2UgYXJlIHN5bmMsIHdhaXQgdW50aWwgbmV4dCB0aWNrIHRvIGVtaXQgdGhlIGRhdGEuXG4gICAgLy8gT3RoZXJ3aXNlIHdlIHJpc2sgZW1pdHRpbmcgZGF0YSBpbiB0aGUgZmxvdygpXG4gICAgLy8gdGhlIHJlYWRhYmxlIGNvZGUgdHJpZ2dlcnMgZHVyaW5nIGEgcmVhZCgpIGNhbGxcbiAgICBlbWl0UmVhZGFibGUoc3RyZWFtKTtcbiAgfSBlbHNlIHtcbiAgICAvLyBlbWl0ICdyZWFkYWJsZScgbm93IHRvIG1ha2Ugc3VyZSBpdCBnZXRzIHBpY2tlZCB1cC5cbiAgICBzdGF0ZS5uZWVkUmVhZGFibGUgPSBmYWxzZTtcbiAgICBpZiAoIXN0YXRlLmVtaXR0ZWRSZWFkYWJsZSkge1xuICAgICAgc3RhdGUuZW1pdHRlZFJlYWRhYmxlID0gdHJ1ZTtcbiAgICAgIGVtaXRSZWFkYWJsZV8oc3RyZWFtKTtcbiAgICB9XG4gIH1cbn1cblxuLy8gRG9uJ3QgZW1pdCByZWFkYWJsZSByaWdodCBhd2F5IGluIHN5bmMgbW9kZSwgYmVjYXVzZSB0aGlzIGNhbiB0cmlnZ2VyXG4vLyBhbm90aGVyIHJlYWQoKSBjYWxsID0+IHN0YWNrIG92ZXJmbG93LiAgVGhpcyB3YXksIGl0IG1pZ2h0IHRyaWdnZXJcbi8vIGEgbmV4dFRpY2sgcmVjdXJzaW9uIHdhcm5pbmcsIGJ1dCB0aGF0J3Mgbm90IHNvIGJhZC5cbmZ1bmN0aW9uIGVtaXRSZWFkYWJsZShzdHJlYW0pIHtcbiAgdmFyIHN0YXRlID0gc3RyZWFtLl9yZWFkYWJsZVN0YXRlO1xuICBkZWJ1ZygnZW1pdFJlYWRhYmxlJywgc3RhdGUubmVlZFJlYWRhYmxlLCBzdGF0ZS5lbWl0dGVkUmVhZGFibGUpO1xuICBzdGF0ZS5uZWVkUmVhZGFibGUgPSBmYWxzZTtcbiAgaWYgKCFzdGF0ZS5lbWl0dGVkUmVhZGFibGUpIHtcbiAgICBkZWJ1ZygnZW1pdFJlYWRhYmxlJywgc3RhdGUuZmxvd2luZyk7XG4gICAgc3RhdGUuZW1pdHRlZFJlYWRhYmxlID0gdHJ1ZTtcbiAgICBwcm9jZXNzLm5leHRUaWNrKGVtaXRSZWFkYWJsZV8sIHN0cmVhbSk7XG4gIH1cbn1cbmZ1bmN0aW9uIGVtaXRSZWFkYWJsZV8oc3RyZWFtKSB7XG4gIHZhciBzdGF0ZSA9IHN0cmVhbS5fcmVhZGFibGVTdGF0ZTtcbiAgZGVidWcoJ2VtaXRSZWFkYWJsZV8nLCBzdGF0ZS5kZXN0cm95ZWQsIHN0YXRlLmxlbmd0aCwgc3RhdGUuZW5kZWQpO1xuICBpZiAoIXN0YXRlLmRlc3Ryb3llZCAmJiAoc3RhdGUubGVuZ3RoIHx8IHN0YXRlLmVuZGVkKSkge1xuICAgIHN0cmVhbS5lbWl0KCdyZWFkYWJsZScpO1xuICAgIHN0YXRlLmVtaXR0ZWRSZWFkYWJsZSA9IGZhbHNlO1xuICB9XG5cbiAgLy8gVGhlIHN0cmVhbSBuZWVkcyBhbm90aGVyIHJlYWRhYmxlIGV2ZW50IGlmXG4gIC8vIDEuIEl0IGlzIG5vdCBmbG93aW5nLCBhcyB0aGUgZmxvdyBtZWNoYW5pc20gd2lsbCB0YWtlXG4gIC8vICAgIGNhcmUgb2YgaXQuXG4gIC8vIDIuIEl0IGlzIG5vdCBlbmRlZC5cbiAgLy8gMy4gSXQgaXMgYmVsb3cgdGhlIGhpZ2hXYXRlck1hcmssIHNvIHdlIGNhbiBzY2hlZHVsZVxuICAvLyAgICBhbm90aGVyIHJlYWRhYmxlIGxhdGVyLlxuICBzdGF0ZS5uZWVkUmVhZGFibGUgPSAhc3RhdGUuZmxvd2luZyAmJiAhc3RhdGUuZW5kZWQgJiYgc3RhdGUubGVuZ3RoIDw9IHN0YXRlLmhpZ2hXYXRlck1hcms7XG4gIGZsb3coc3RyZWFtKTtcbn1cblxuLy8gYXQgdGhpcyBwb2ludCwgdGhlIHVzZXIgaGFzIHByZXN1bWFibHkgc2VlbiB0aGUgJ3JlYWRhYmxlJyBldmVudCxcbi8vIGFuZCBjYWxsZWQgcmVhZCgpIHRvIGNvbnN1bWUgc29tZSBkYXRhLiAgdGhhdCBtYXkgaGF2ZSB0cmlnZ2VyZWRcbi8vIGluIHR1cm4gYW5vdGhlciBfcmVhZChuKSBjYWxsLCBpbiB3aGljaCBjYXNlIHJlYWRpbmcgPSB0cnVlIGlmXG4vLyBpdCdzIGluIHByb2dyZXNzLlxuLy8gSG93ZXZlciwgaWYgd2UncmUgbm90IGVuZGVkLCBvciByZWFkaW5nLCBhbmQgdGhlIGxlbmd0aCA8IGh3bSxcbi8vIHRoZW4gZ28gYWhlYWQgYW5kIHRyeSB0byByZWFkIHNvbWUgbW9yZSBwcmVlbXB0aXZlbHkuXG5mdW5jdGlvbiBtYXliZVJlYWRNb3JlKHN0cmVhbSwgc3RhdGUpIHtcbiAgaWYgKCFzdGF0ZS5yZWFkaW5nTW9yZSkge1xuICAgIHN0YXRlLnJlYWRpbmdNb3JlID0gdHJ1ZTtcbiAgICBwcm9jZXNzLm5leHRUaWNrKG1heWJlUmVhZE1vcmVfLCBzdHJlYW0sIHN0YXRlKTtcbiAgfVxufVxuZnVuY3Rpb24gbWF5YmVSZWFkTW9yZV8oc3RyZWFtLCBzdGF0ZSkge1xuICAvLyBBdHRlbXB0IHRvIHJlYWQgbW9yZSBkYXRhIGlmIHdlIHNob3VsZC5cbiAgLy9cbiAgLy8gVGhlIGNvbmRpdGlvbnMgZm9yIHJlYWRpbmcgbW9yZSBkYXRhIGFyZSAob25lIG9mKTpcbiAgLy8gLSBOb3QgZW5vdWdoIGRhdGEgYnVmZmVyZWQgKHN0YXRlLmxlbmd0aCA8IHN0YXRlLmhpZ2hXYXRlck1hcmspLiBUaGUgbG9vcFxuICAvLyAgIGlzIHJlc3BvbnNpYmxlIGZvciBmaWxsaW5nIHRoZSBidWZmZXIgd2l0aCBlbm91Z2ggZGF0YSBpZiBzdWNoIGRhdGFcbiAgLy8gICBpcyBhdmFpbGFibGUuIElmIGhpZ2hXYXRlck1hcmsgaXMgMCBhbmQgd2UgYXJlIG5vdCBpbiB0aGUgZmxvd2luZyBtb2RlXG4gIC8vICAgd2Ugc2hvdWxkIF9ub3RfIGF0dGVtcHQgdG8gYnVmZmVyIGFueSBleHRyYSBkYXRhLiBXZSdsbCBnZXQgbW9yZSBkYXRhXG4gIC8vICAgd2hlbiB0aGUgc3RyZWFtIGNvbnN1bWVyIGNhbGxzIHJlYWQoKSBpbnN0ZWFkLlxuICAvLyAtIE5vIGRhdGEgaW4gdGhlIGJ1ZmZlciwgYW5kIHRoZSBzdHJlYW0gaXMgaW4gZmxvd2luZyBtb2RlLiBJbiB0aGlzIG1vZGVcbiAgLy8gICB0aGUgbG9vcCBiZWxvdyBpcyByZXNwb25zaWJsZSBmb3IgZW5zdXJpbmcgcmVhZCgpIGlzIGNhbGxlZC4gRmFpbGluZyB0b1xuICAvLyAgIGNhbGwgcmVhZCBoZXJlIHdvdWxkIGFib3J0IHRoZSBmbG93IGFuZCB0aGVyZSdzIG5vIG90aGVyIG1lY2hhbmlzbSBmb3JcbiAgLy8gICBjb250aW51aW5nIHRoZSBmbG93IGlmIHRoZSBzdHJlYW0gY29uc3VtZXIgaGFzIGp1c3Qgc3Vic2NyaWJlZCB0byB0aGVcbiAgLy8gICAnZGF0YScgZXZlbnQuXG4gIC8vXG4gIC8vIEluIGFkZGl0aW9uIHRvIHRoZSBhYm92ZSBjb25kaXRpb25zIHRvIGtlZXAgcmVhZGluZyBkYXRhLCB0aGUgZm9sbG93aW5nXG4gIC8vIGNvbmRpdGlvbnMgcHJldmVudCB0aGUgZGF0YSBmcm9tIGJlaW5nIHJlYWQ6XG4gIC8vIC0gVGhlIHN0cmVhbSBoYXMgZW5kZWQgKHN0YXRlLmVuZGVkKS5cbiAgLy8gLSBUaGVyZSBpcyBhbHJlYWR5IGEgcGVuZGluZyAncmVhZCcgb3BlcmF0aW9uIChzdGF0ZS5yZWFkaW5nKS4gVGhpcyBpcyBhXG4gIC8vICAgY2FzZSB3aGVyZSB0aGUgdGhlIHN0cmVhbSBoYXMgY2FsbGVkIHRoZSBpbXBsZW1lbnRhdGlvbiBkZWZpbmVkIF9yZWFkKClcbiAgLy8gICBtZXRob2QsIGJ1dCB0aGV5IGFyZSBwcm9jZXNzaW5nIHRoZSBjYWxsIGFzeW5jaHJvbm91c2x5IGFuZCBoYXZlIF9ub3RfXG4gIC8vICAgY2FsbGVkIHB1c2goKSB3aXRoIG5ldyBkYXRhLiBJbiB0aGlzIGNhc2Ugd2Ugc2tpcCBwZXJmb3JtaW5nIG1vcmVcbiAgLy8gICByZWFkKClzLiBUaGUgZXhlY3V0aW9uIGVuZHMgaW4gdGhpcyBtZXRob2QgYWdhaW4gYWZ0ZXIgdGhlIF9yZWFkKCkgZW5kc1xuICAvLyAgIHVwIGNhbGxpbmcgcHVzaCgpIHdpdGggbW9yZSBkYXRhLlxuICB3aGlsZSAoIXN0YXRlLnJlYWRpbmcgJiYgIXN0YXRlLmVuZGVkICYmIChzdGF0ZS5sZW5ndGggPCBzdGF0ZS5oaWdoV2F0ZXJNYXJrIHx8IHN0YXRlLmZsb3dpbmcgJiYgc3RhdGUubGVuZ3RoID09PSAwKSkge1xuICAgIHZhciBsZW4gPSBzdGF0ZS5sZW5ndGg7XG4gICAgZGVidWcoJ21heWJlUmVhZE1vcmUgcmVhZCAwJyk7XG4gICAgc3RyZWFtLnJlYWQoMCk7XG4gICAgaWYgKGxlbiA9PT0gc3RhdGUubGVuZ3RoKVxuICAgICAgLy8gZGlkbid0IGdldCBhbnkgZGF0YSwgc3RvcCBzcGlubmluZy5cbiAgICAgIGJyZWFrO1xuICB9XG4gIHN0YXRlLnJlYWRpbmdNb3JlID0gZmFsc2U7XG59XG5cbi8vIGFic3RyYWN0IG1ldGhvZC4gIHRvIGJlIG92ZXJyaWRkZW4gaW4gc3BlY2lmaWMgaW1wbGVtZW50YXRpb24gY2xhc3Nlcy5cbi8vIGNhbGwgY2IoZXIsIGRhdGEpIHdoZXJlIGRhdGEgaXMgPD0gbiBpbiBsZW5ndGguXG4vLyBmb3IgdmlydHVhbCAobm9uLXN0cmluZywgbm9uLWJ1ZmZlcikgc3RyZWFtcywgXCJsZW5ndGhcIiBpcyBzb21ld2hhdFxuLy8gYXJiaXRyYXJ5LCBhbmQgcGVyaGFwcyBub3QgdmVyeSBtZWFuaW5nZnVsLlxuUmVhZGFibGUucHJvdG90eXBlLl9yZWFkID0gZnVuY3Rpb24gKG4pIHtcbiAgZXJyb3JPckRlc3Ryb3kodGhpcywgbmV3IEVSUl9NRVRIT0RfTk9UX0lNUExFTUVOVEVEKCdfcmVhZCgpJykpO1xufTtcblJlYWRhYmxlLnByb3RvdHlwZS5waXBlID0gZnVuY3Rpb24gKGRlc3QsIHBpcGVPcHRzKSB7XG4gIHZhciBzcmMgPSB0aGlzO1xuICB2YXIgc3RhdGUgPSB0aGlzLl9yZWFkYWJsZVN0YXRlO1xuICBzd2l0Y2ggKHN0YXRlLnBpcGVzQ291bnQpIHtcbiAgICBjYXNlIDA6XG4gICAgICBzdGF0ZS5waXBlcyA9IGRlc3Q7XG4gICAgICBicmVhaztcbiAgICBjYXNlIDE6XG4gICAgICBzdGF0ZS5waXBlcyA9IFtzdGF0ZS5waXBlcywgZGVzdF07XG4gICAgICBicmVhaztcbiAgICBkZWZhdWx0OlxuICAgICAgc3RhdGUucGlwZXMucHVzaChkZXN0KTtcbiAgICAgIGJyZWFrO1xuICB9XG4gIHN0YXRlLnBpcGVzQ291bnQgKz0gMTtcbiAgZGVidWcoJ3BpcGUgY291bnQ9JWQgb3B0cz0laicsIHN0YXRlLnBpcGVzQ291bnQsIHBpcGVPcHRzKTtcbiAgdmFyIGRvRW5kID0gKCFwaXBlT3B0cyB8fCBwaXBlT3B0cy5lbmQgIT09IGZhbHNlKSAmJiBkZXN0ICE9PSBwcm9jZXNzLnN0ZG91dCAmJiBkZXN0ICE9PSBwcm9jZXNzLnN0ZGVycjtcbiAgdmFyIGVuZEZuID0gZG9FbmQgPyBvbmVuZCA6IHVucGlwZTtcbiAgaWYgKHN0YXRlLmVuZEVtaXR0ZWQpIHByb2Nlc3MubmV4dFRpY2soZW5kRm4pO2Vsc2Ugc3JjLm9uY2UoJ2VuZCcsIGVuZEZuKTtcbiAgZGVzdC5vbigndW5waXBlJywgb251bnBpcGUpO1xuICBmdW5jdGlvbiBvbnVucGlwZShyZWFkYWJsZSwgdW5waXBlSW5mbykge1xuICAgIGRlYnVnKCdvbnVucGlwZScpO1xuICAgIGlmIChyZWFkYWJsZSA9PT0gc3JjKSB7XG4gICAgICBpZiAodW5waXBlSW5mbyAmJiB1bnBpcGVJbmZvLmhhc1VucGlwZWQgPT09IGZhbHNlKSB7XG4gICAgICAgIHVucGlwZUluZm8uaGFzVW5waXBlZCA9IHRydWU7XG4gICAgICAgIGNsZWFudXAoKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgZnVuY3Rpb24gb25lbmQoKSB7XG4gICAgZGVidWcoJ29uZW5kJyk7XG4gICAgZGVzdC5lbmQoKTtcbiAgfVxuXG4gIC8vIHdoZW4gdGhlIGRlc3QgZHJhaW5zLCBpdCByZWR1Y2VzIHRoZSBhd2FpdERyYWluIGNvdW50ZXJcbiAgLy8gb24gdGhlIHNvdXJjZS4gIFRoaXMgd291bGQgYmUgbW9yZSBlbGVnYW50IHdpdGggYSAub25jZSgpXG4gIC8vIGhhbmRsZXIgaW4gZmxvdygpLCBidXQgYWRkaW5nIGFuZCByZW1vdmluZyByZXBlYXRlZGx5IGlzXG4gIC8vIHRvbyBzbG93LlxuICB2YXIgb25kcmFpbiA9IHBpcGVPbkRyYWluKHNyYyk7XG4gIGRlc3Qub24oJ2RyYWluJywgb25kcmFpbik7XG4gIHZhciBjbGVhbmVkVXAgPSBmYWxzZTtcbiAgZnVuY3Rpb24gY2xlYW51cCgpIHtcbiAgICBkZWJ1ZygnY2xlYW51cCcpO1xuICAgIC8vIGNsZWFudXAgZXZlbnQgaGFuZGxlcnMgb25jZSB0aGUgcGlwZSBpcyBicm9rZW5cbiAgICBkZXN0LnJlbW92ZUxpc3RlbmVyKCdjbG9zZScsIG9uY2xvc2UpO1xuICAgIGRlc3QucmVtb3ZlTGlzdGVuZXIoJ2ZpbmlzaCcsIG9uZmluaXNoKTtcbiAgICBkZXN0LnJlbW92ZUxpc3RlbmVyKCdkcmFpbicsIG9uZHJhaW4pO1xuICAgIGRlc3QucmVtb3ZlTGlzdGVuZXIoJ2Vycm9yJywgb25lcnJvcik7XG4gICAgZGVzdC5yZW1vdmVMaXN0ZW5lcigndW5waXBlJywgb251bnBpcGUpO1xuICAgIHNyYy5yZW1vdmVMaXN0ZW5lcignZW5kJywgb25lbmQpO1xuICAgIHNyYy5yZW1vdmVMaXN0ZW5lcignZW5kJywgdW5waXBlKTtcbiAgICBzcmMucmVtb3ZlTGlzdGVuZXIoJ2RhdGEnLCBvbmRhdGEpO1xuICAgIGNsZWFuZWRVcCA9IHRydWU7XG5cbiAgICAvLyBpZiB0aGUgcmVhZGVyIGlzIHdhaXRpbmcgZm9yIGEgZHJhaW4gZXZlbnQgZnJvbSB0aGlzXG4gICAgLy8gc3BlY2lmaWMgd3JpdGVyLCB0aGVuIGl0IHdvdWxkIGNhdXNlIGl0IHRvIG5ldmVyIHN0YXJ0XG4gICAgLy8gZmxvd2luZyBhZ2Fpbi5cbiAgICAvLyBTbywgaWYgdGhpcyBpcyBhd2FpdGluZyBhIGRyYWluLCB0aGVuIHdlIGp1c3QgY2FsbCBpdCBub3cuXG4gICAgLy8gSWYgd2UgZG9uJ3Qga25vdywgdGhlbiBhc3N1bWUgdGhhdCB3ZSBhcmUgd2FpdGluZyBmb3Igb25lLlxuICAgIGlmIChzdGF0ZS5hd2FpdERyYWluICYmICghZGVzdC5fd3JpdGFibGVTdGF0ZSB8fCBkZXN0Ll93cml0YWJsZVN0YXRlLm5lZWREcmFpbikpIG9uZHJhaW4oKTtcbiAgfVxuICBzcmMub24oJ2RhdGEnLCBvbmRhdGEpO1xuICBmdW5jdGlvbiBvbmRhdGEoY2h1bmspIHtcbiAgICBkZWJ1Zygnb25kYXRhJyk7XG4gICAgdmFyIHJldCA9IGRlc3Qud3JpdGUoY2h1bmspO1xuICAgIGRlYnVnKCdkZXN0LndyaXRlJywgcmV0KTtcbiAgICBpZiAocmV0ID09PSBmYWxzZSkge1xuICAgICAgLy8gSWYgdGhlIHVzZXIgdW5waXBlZCBkdXJpbmcgYGRlc3Qud3JpdGUoKWAsIGl0IGlzIHBvc3NpYmxlXG4gICAgICAvLyB0byBnZXQgc3R1Y2sgaW4gYSBwZXJtYW5lbnRseSBwYXVzZWQgc3RhdGUgaWYgdGhhdCB3cml0ZVxuICAgICAgLy8gYWxzbyByZXR1cm5lZCBmYWxzZS5cbiAgICAgIC8vID0+IENoZWNrIHdoZXRoZXIgYGRlc3RgIGlzIHN0aWxsIGEgcGlwaW5nIGRlc3RpbmF0aW9uLlxuICAgICAgaWYgKChzdGF0ZS5waXBlc0NvdW50ID09PSAxICYmIHN0YXRlLnBpcGVzID09PSBkZXN0IHx8IHN0YXRlLnBpcGVzQ291bnQgPiAxICYmIGluZGV4T2Yoc3RhdGUucGlwZXMsIGRlc3QpICE9PSAtMSkgJiYgIWNsZWFuZWRVcCkge1xuICAgICAgICBkZWJ1ZygnZmFsc2Ugd3JpdGUgcmVzcG9uc2UsIHBhdXNlJywgc3RhdGUuYXdhaXREcmFpbik7XG4gICAgICAgIHN0YXRlLmF3YWl0RHJhaW4rKztcbiAgICAgIH1cbiAgICAgIHNyYy5wYXVzZSgpO1xuICAgIH1cbiAgfVxuXG4gIC8vIGlmIHRoZSBkZXN0IGhhcyBhbiBlcnJvciwgdGhlbiBzdG9wIHBpcGluZyBpbnRvIGl0LlxuICAvLyBob3dldmVyLCBkb24ndCBzdXBwcmVzcyB0aGUgdGhyb3dpbmcgYmVoYXZpb3IgZm9yIHRoaXMuXG4gIGZ1bmN0aW9uIG9uZXJyb3IoZXIpIHtcbiAgICBkZWJ1Zygnb25lcnJvcicsIGVyKTtcbiAgICB1bnBpcGUoKTtcbiAgICBkZXN0LnJlbW92ZUxpc3RlbmVyKCdlcnJvcicsIG9uZXJyb3IpO1xuICAgIGlmIChFRWxpc3RlbmVyQ291bnQoZGVzdCwgJ2Vycm9yJykgPT09IDApIGVycm9yT3JEZXN0cm95KGRlc3QsIGVyKTtcbiAgfVxuXG4gIC8vIE1ha2Ugc3VyZSBvdXIgZXJyb3IgaGFuZGxlciBpcyBhdHRhY2hlZCBiZWZvcmUgdXNlcmxhbmQgb25lcy5cbiAgcHJlcGVuZExpc3RlbmVyKGRlc3QsICdlcnJvcicsIG9uZXJyb3IpO1xuXG4gIC8vIEJvdGggY2xvc2UgYW5kIGZpbmlzaCBzaG91bGQgdHJpZ2dlciB1bnBpcGUsIGJ1dCBvbmx5IG9uY2UuXG4gIGZ1bmN0aW9uIG9uY2xvc2UoKSB7XG4gICAgZGVzdC5yZW1vdmVMaXN0ZW5lcignZmluaXNoJywgb25maW5pc2gpO1xuICAgIHVucGlwZSgpO1xuICB9XG4gIGRlc3Qub25jZSgnY2xvc2UnLCBvbmNsb3NlKTtcbiAgZnVuY3Rpb24gb25maW5pc2goKSB7XG4gICAgZGVidWcoJ29uZmluaXNoJyk7XG4gICAgZGVzdC5yZW1vdmVMaXN0ZW5lcignY2xvc2UnLCBvbmNsb3NlKTtcbiAgICB1bnBpcGUoKTtcbiAgfVxuICBkZXN0Lm9uY2UoJ2ZpbmlzaCcsIG9uZmluaXNoKTtcbiAgZnVuY3Rpb24gdW5waXBlKCkge1xuICAgIGRlYnVnKCd1bnBpcGUnKTtcbiAgICBzcmMudW5waXBlKGRlc3QpO1xuICB9XG5cbiAgLy8gdGVsbCB0aGUgZGVzdCB0aGF0IGl0J3MgYmVpbmcgcGlwZWQgdG9cbiAgZGVzdC5lbWl0KCdwaXBlJywgc3JjKTtcblxuICAvLyBzdGFydCB0aGUgZmxvdyBpZiBpdCBoYXNuJ3QgYmVlbiBzdGFydGVkIGFscmVhZHkuXG4gIGlmICghc3RhdGUuZmxvd2luZykge1xuICAgIGRlYnVnKCdwaXBlIHJlc3VtZScpO1xuICAgIHNyYy5yZXN1bWUoKTtcbiAgfVxuICByZXR1cm4gZGVzdDtcbn07XG5mdW5jdGlvbiBwaXBlT25EcmFpbihzcmMpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIHBpcGVPbkRyYWluRnVuY3Rpb25SZXN1bHQoKSB7XG4gICAgdmFyIHN0YXRlID0gc3JjLl9yZWFkYWJsZVN0YXRlO1xuICAgIGRlYnVnKCdwaXBlT25EcmFpbicsIHN0YXRlLmF3YWl0RHJhaW4pO1xuICAgIGlmIChzdGF0ZS5hd2FpdERyYWluKSBzdGF0ZS5hd2FpdERyYWluLS07XG4gICAgaWYgKHN0YXRlLmF3YWl0RHJhaW4gPT09IDAgJiYgRUVsaXN0ZW5lckNvdW50KHNyYywgJ2RhdGEnKSkge1xuICAgICAgc3RhdGUuZmxvd2luZyA9IHRydWU7XG4gICAgICBmbG93KHNyYyk7XG4gICAgfVxuICB9O1xufVxuUmVhZGFibGUucHJvdG90eXBlLnVucGlwZSA9IGZ1bmN0aW9uIChkZXN0KSB7XG4gIHZhciBzdGF0ZSA9IHRoaXMuX3JlYWRhYmxlU3RhdGU7XG4gIHZhciB1bnBpcGVJbmZvID0ge1xuICAgIGhhc1VucGlwZWQ6IGZhbHNlXG4gIH07XG5cbiAgLy8gaWYgd2UncmUgbm90IHBpcGluZyBhbnl3aGVyZSwgdGhlbiBkbyBub3RoaW5nLlxuICBpZiAoc3RhdGUucGlwZXNDb3VudCA9PT0gMCkgcmV0dXJuIHRoaXM7XG5cbiAgLy8ganVzdCBvbmUgZGVzdGluYXRpb24uICBtb3N0IGNvbW1vbiBjYXNlLlxuICBpZiAoc3RhdGUucGlwZXNDb3VudCA9PT0gMSkge1xuICAgIC8vIHBhc3NlZCBpbiBvbmUsIGJ1dCBpdCdzIG5vdCB0aGUgcmlnaHQgb25lLlxuICAgIGlmIChkZXN0ICYmIGRlc3QgIT09IHN0YXRlLnBpcGVzKSByZXR1cm4gdGhpcztcbiAgICBpZiAoIWRlc3QpIGRlc3QgPSBzdGF0ZS5waXBlcztcblxuICAgIC8vIGdvdCBhIG1hdGNoLlxuICAgIHN0YXRlLnBpcGVzID0gbnVsbDtcbiAgICBzdGF0ZS5waXBlc0NvdW50ID0gMDtcbiAgICBzdGF0ZS5mbG93aW5nID0gZmFsc2U7XG4gICAgaWYgKGRlc3QpIGRlc3QuZW1pdCgndW5waXBlJywgdGhpcywgdW5waXBlSW5mbyk7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICAvLyBzbG93IGNhc2UuIG11bHRpcGxlIHBpcGUgZGVzdGluYXRpb25zLlxuXG4gIGlmICghZGVzdCkge1xuICAgIC8vIHJlbW92ZSBhbGwuXG4gICAgdmFyIGRlc3RzID0gc3RhdGUucGlwZXM7XG4gICAgdmFyIGxlbiA9IHN0YXRlLnBpcGVzQ291bnQ7XG4gICAgc3RhdGUucGlwZXMgPSBudWxsO1xuICAgIHN0YXRlLnBpcGVzQ291bnQgPSAwO1xuICAgIHN0YXRlLmZsb3dpbmcgPSBmYWxzZTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbjsgaSsrKSBkZXN0c1tpXS5lbWl0KCd1bnBpcGUnLCB0aGlzLCB7XG4gICAgICBoYXNVbnBpcGVkOiBmYWxzZVxuICAgIH0pO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgLy8gdHJ5IHRvIGZpbmQgdGhlIHJpZ2h0IG9uZS5cbiAgdmFyIGluZGV4ID0gaW5kZXhPZihzdGF0ZS5waXBlcywgZGVzdCk7XG4gIGlmIChpbmRleCA9PT0gLTEpIHJldHVybiB0aGlzO1xuICBzdGF0ZS5waXBlcy5zcGxpY2UoaW5kZXgsIDEpO1xuICBzdGF0ZS5waXBlc0NvdW50IC09IDE7XG4gIGlmIChzdGF0ZS5waXBlc0NvdW50ID09PSAxKSBzdGF0ZS5waXBlcyA9IHN0YXRlLnBpcGVzWzBdO1xuICBkZXN0LmVtaXQoJ3VucGlwZScsIHRoaXMsIHVucGlwZUluZm8pO1xuICByZXR1cm4gdGhpcztcbn07XG5cbi8vIHNldCB1cCBkYXRhIGV2ZW50cyBpZiB0aGV5IGFyZSBhc2tlZCBmb3Jcbi8vIEVuc3VyZSByZWFkYWJsZSBsaXN0ZW5lcnMgZXZlbnR1YWxseSBnZXQgc29tZXRoaW5nXG5SZWFkYWJsZS5wcm90b3R5cGUub24gPSBmdW5jdGlvbiAoZXYsIGZuKSB7XG4gIHZhciByZXMgPSBTdHJlYW0ucHJvdG90eXBlLm9uLmNhbGwodGhpcywgZXYsIGZuKTtcbiAgdmFyIHN0YXRlID0gdGhpcy5fcmVhZGFibGVTdGF0ZTtcbiAgaWYgKGV2ID09PSAnZGF0YScpIHtcbiAgICAvLyB1cGRhdGUgcmVhZGFibGVMaXN0ZW5pbmcgc28gdGhhdCByZXN1bWUoKSBtYXkgYmUgYSBuby1vcFxuICAgIC8vIGEgZmV3IGxpbmVzIGRvd24uIFRoaXMgaXMgbmVlZGVkIHRvIHN1cHBvcnQgb25jZSgncmVhZGFibGUnKS5cbiAgICBzdGF0ZS5yZWFkYWJsZUxpc3RlbmluZyA9IHRoaXMubGlzdGVuZXJDb3VudCgncmVhZGFibGUnKSA+IDA7XG5cbiAgICAvLyBUcnkgc3RhcnQgZmxvd2luZyBvbiBuZXh0IHRpY2sgaWYgc3RyZWFtIGlzbid0IGV4cGxpY2l0bHkgcGF1c2VkXG4gICAgaWYgKHN0YXRlLmZsb3dpbmcgIT09IGZhbHNlKSB0aGlzLnJlc3VtZSgpO1xuICB9IGVsc2UgaWYgKGV2ID09PSAncmVhZGFibGUnKSB7XG4gICAgaWYgKCFzdGF0ZS5lbmRFbWl0dGVkICYmICFzdGF0ZS5yZWFkYWJsZUxpc3RlbmluZykge1xuICAgICAgc3RhdGUucmVhZGFibGVMaXN0ZW5pbmcgPSBzdGF0ZS5uZWVkUmVhZGFibGUgPSB0cnVlO1xuICAgICAgc3RhdGUuZmxvd2luZyA9IGZhbHNlO1xuICAgICAgc3RhdGUuZW1pdHRlZFJlYWRhYmxlID0gZmFsc2U7XG4gICAgICBkZWJ1Zygnb24gcmVhZGFibGUnLCBzdGF0ZS5sZW5ndGgsIHN0YXRlLnJlYWRpbmcpO1xuICAgICAgaWYgKHN0YXRlLmxlbmd0aCkge1xuICAgICAgICBlbWl0UmVhZGFibGUodGhpcyk7XG4gICAgICB9IGVsc2UgaWYgKCFzdGF0ZS5yZWFkaW5nKSB7XG4gICAgICAgIHByb2Nlc3MubmV4dFRpY2soblJlYWRpbmdOZXh0VGljaywgdGhpcyk7XG4gICAgICB9XG4gICAgfVxuICB9XG4gIHJldHVybiByZXM7XG59O1xuUmVhZGFibGUucHJvdG90eXBlLmFkZExpc3RlbmVyID0gUmVhZGFibGUucHJvdG90eXBlLm9uO1xuUmVhZGFibGUucHJvdG90eXBlLnJlbW92ZUxpc3RlbmVyID0gZnVuY3Rpb24gKGV2LCBmbikge1xuICB2YXIgcmVzID0gU3RyZWFtLnByb3RvdHlwZS5yZW1vdmVMaXN0ZW5lci5jYWxsKHRoaXMsIGV2LCBmbik7XG4gIGlmIChldiA9PT0gJ3JlYWRhYmxlJykge1xuICAgIC8vIFdlIG5lZWQgdG8gY2hlY2sgaWYgdGhlcmUgaXMgc29tZW9uZSBzdGlsbCBsaXN0ZW5pbmcgdG9cbiAgICAvLyByZWFkYWJsZSBhbmQgcmVzZXQgdGhlIHN0YXRlLiBIb3dldmVyIHRoaXMgbmVlZHMgdG8gaGFwcGVuXG4gICAgLy8gYWZ0ZXIgcmVhZGFibGUgaGFzIGJlZW4gZW1pdHRlZCBidXQgYmVmb3JlIEkvTyAobmV4dFRpY2spIHRvXG4gICAgLy8gc3VwcG9ydCBvbmNlKCdyZWFkYWJsZScsIGZuKSBjeWNsZXMuIFRoaXMgbWVhbnMgdGhhdCBjYWxsaW5nXG4gICAgLy8gcmVzdW1lIHdpdGhpbiB0aGUgc2FtZSB0aWNrIHdpbGwgaGF2ZSBub1xuICAgIC8vIGVmZmVjdC5cbiAgICBwcm9jZXNzLm5leHRUaWNrKHVwZGF0ZVJlYWRhYmxlTGlzdGVuaW5nLCB0aGlzKTtcbiAgfVxuICByZXR1cm4gcmVzO1xufTtcblJlYWRhYmxlLnByb3RvdHlwZS5yZW1vdmVBbGxMaXN0ZW5lcnMgPSBmdW5jdGlvbiAoZXYpIHtcbiAgdmFyIHJlcyA9IFN0cmVhbS5wcm90b3R5cGUucmVtb3ZlQWxsTGlzdGVuZXJzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gIGlmIChldiA9PT0gJ3JlYWRhYmxlJyB8fCBldiA9PT0gdW5kZWZpbmVkKSB7XG4gICAgLy8gV2UgbmVlZCB0byBjaGVjayBpZiB0aGVyZSBpcyBzb21lb25lIHN0aWxsIGxpc3RlbmluZyB0b1xuICAgIC8vIHJlYWRhYmxlIGFuZCByZXNldCB0aGUgc3RhdGUuIEhvd2V2ZXIgdGhpcyBuZWVkcyB0byBoYXBwZW5cbiAgICAvLyBhZnRlciByZWFkYWJsZSBoYXMgYmVlbiBlbWl0dGVkIGJ1dCBiZWZvcmUgSS9PIChuZXh0VGljaykgdG9cbiAgICAvLyBzdXBwb3J0IG9uY2UoJ3JlYWRhYmxlJywgZm4pIGN5Y2xlcy4gVGhpcyBtZWFucyB0aGF0IGNhbGxpbmdcbiAgICAvLyByZXN1bWUgd2l0aGluIHRoZSBzYW1lIHRpY2sgd2lsbCBoYXZlIG5vXG4gICAgLy8gZWZmZWN0LlxuICAgIHByb2Nlc3MubmV4dFRpY2sodXBkYXRlUmVhZGFibGVMaXN0ZW5pbmcsIHRoaXMpO1xuICB9XG4gIHJldHVybiByZXM7XG59O1xuZnVuY3Rpb24gdXBkYXRlUmVhZGFibGVMaXN0ZW5pbmcoc2VsZikge1xuICB2YXIgc3RhdGUgPSBzZWxmLl9yZWFkYWJsZVN0YXRlO1xuICBzdGF0ZS5yZWFkYWJsZUxpc3RlbmluZyA9IHNlbGYubGlzdGVuZXJDb3VudCgncmVhZGFibGUnKSA+IDA7XG4gIGlmIChzdGF0ZS5yZXN1bWVTY2hlZHVsZWQgJiYgIXN0YXRlLnBhdXNlZCkge1xuICAgIC8vIGZsb3dpbmcgbmVlZHMgdG8gYmUgc2V0IHRvIHRydWUgbm93LCBvdGhlcndpc2VcbiAgICAvLyB0aGUgdXBjb21pbmcgcmVzdW1lIHdpbGwgbm90IGZsb3cuXG4gICAgc3RhdGUuZmxvd2luZyA9IHRydWU7XG5cbiAgICAvLyBjcnVkZSB3YXkgdG8gY2hlY2sgaWYgd2Ugc2hvdWxkIHJlc3VtZVxuICB9IGVsc2UgaWYgKHNlbGYubGlzdGVuZXJDb3VudCgnZGF0YScpID4gMCkge1xuICAgIHNlbGYucmVzdW1lKCk7XG4gIH1cbn1cbmZ1bmN0aW9uIG5SZWFkaW5nTmV4dFRpY2soc2VsZikge1xuICBkZWJ1ZygncmVhZGFibGUgbmV4dHRpY2sgcmVhZCAwJyk7XG4gIHNlbGYucmVhZCgwKTtcbn1cblxuLy8gcGF1c2UoKSBhbmQgcmVzdW1lKCkgYXJlIHJlbW5hbnRzIG9mIHRoZSBsZWdhY3kgcmVhZGFibGUgc3RyZWFtIEFQSVxuLy8gSWYgdGhlIHVzZXIgdXNlcyB0aGVtLCB0aGVuIHN3aXRjaCBpbnRvIG9sZCBtb2RlLlxuUmVhZGFibGUucHJvdG90eXBlLnJlc3VtZSA9IGZ1bmN0aW9uICgpIHtcbiAgdmFyIHN0YXRlID0gdGhpcy5fcmVhZGFibGVTdGF0ZTtcbiAgaWYgKCFzdGF0ZS5mbG93aW5nKSB7XG4gICAgZGVidWcoJ3Jlc3VtZScpO1xuICAgIC8vIHdlIGZsb3cgb25seSBpZiB0aGVyZSBpcyBubyBvbmUgbGlzdGVuaW5nXG4gICAgLy8gZm9yIHJlYWRhYmxlLCBidXQgd2Ugc3RpbGwgaGF2ZSB0byBjYWxsXG4gICAgLy8gcmVzdW1lKClcbiAgICBzdGF0ZS5mbG93aW5nID0gIXN0YXRlLnJlYWRhYmxlTGlzdGVuaW5nO1xuICAgIHJlc3VtZSh0aGlzLCBzdGF0ZSk7XG4gIH1cbiAgc3RhdGUucGF1c2VkID0gZmFsc2U7XG4gIHJldHVybiB0aGlzO1xufTtcbmZ1bmN0aW9uIHJlc3VtZShzdHJlYW0sIHN0YXRlKSB7XG4gIGlmICghc3RhdGUucmVzdW1lU2NoZWR1bGVkKSB7XG4gICAgc3RhdGUucmVzdW1lU2NoZWR1bGVkID0gdHJ1ZTtcbiAgICBwcm9jZXNzLm5leHRUaWNrKHJlc3VtZV8sIHN0cmVhbSwgc3RhdGUpO1xuICB9XG59XG5mdW5jdGlvbiByZXN1bWVfKHN0cmVhbSwgc3RhdGUpIHtcbiAgZGVidWcoJ3Jlc3VtZScsIHN0YXRlLnJlYWRpbmcpO1xuICBpZiAoIXN0YXRlLnJlYWRpbmcpIHtcbiAgICBzdHJlYW0ucmVhZCgwKTtcbiAgfVxuICBzdGF0ZS5yZXN1bWVTY2hlZHVsZWQgPSBmYWxzZTtcbiAgc3RyZWFtLmVtaXQoJ3Jlc3VtZScpO1xuICBmbG93KHN0cmVhbSk7XG4gIGlmIChzdGF0ZS5mbG93aW5nICYmICFzdGF0ZS5yZWFkaW5nKSBzdHJlYW0ucmVhZCgwKTtcbn1cblJlYWRhYmxlLnByb3RvdHlwZS5wYXVzZSA9IGZ1bmN0aW9uICgpIHtcbiAgZGVidWcoJ2NhbGwgcGF1c2UgZmxvd2luZz0laicsIHRoaXMuX3JlYWRhYmxlU3RhdGUuZmxvd2luZyk7XG4gIGlmICh0aGlzLl9yZWFkYWJsZVN0YXRlLmZsb3dpbmcgIT09IGZhbHNlKSB7XG4gICAgZGVidWcoJ3BhdXNlJyk7XG4gICAgdGhpcy5fcmVhZGFibGVTdGF0ZS5mbG93aW5nID0gZmFsc2U7XG4gICAgdGhpcy5lbWl0KCdwYXVzZScpO1xuICB9XG4gIHRoaXMuX3JlYWRhYmxlU3RhdGUucGF1c2VkID0gdHJ1ZTtcbiAgcmV0dXJuIHRoaXM7XG59O1xuZnVuY3Rpb24gZmxvdyhzdHJlYW0pIHtcbiAgdmFyIHN0YXRlID0gc3RyZWFtLl9yZWFkYWJsZVN0YXRlO1xuICBkZWJ1ZygnZmxvdycsIHN0YXRlLmZsb3dpbmcpO1xuICB3aGlsZSAoc3RhdGUuZmxvd2luZyAmJiBzdHJlYW0ucmVhZCgpICE9PSBudWxsKTtcbn1cblxuLy8gd3JhcCBhbiBvbGQtc3R5bGUgc3RyZWFtIGFzIHRoZSBhc3luYyBkYXRhIHNvdXJjZS5cbi8vIFRoaXMgaXMgKm5vdCogcGFydCBvZiB0aGUgcmVhZGFibGUgc3RyZWFtIGludGVyZmFjZS5cbi8vIEl0IGlzIGFuIHVnbHkgdW5mb3J0dW5hdGUgbWVzcyBvZiBoaXN0b3J5LlxuUmVhZGFibGUucHJvdG90eXBlLndyYXAgPSBmdW5jdGlvbiAoc3RyZWFtKSB7XG4gIHZhciBfdGhpcyA9IHRoaXM7XG4gIHZhciBzdGF0ZSA9IHRoaXMuX3JlYWRhYmxlU3RhdGU7XG4gIHZhciBwYXVzZWQgPSBmYWxzZTtcbiAgc3RyZWFtLm9uKCdlbmQnLCBmdW5jdGlvbiAoKSB7XG4gICAgZGVidWcoJ3dyYXBwZWQgZW5kJyk7XG4gICAgaWYgKHN0YXRlLmRlY29kZXIgJiYgIXN0YXRlLmVuZGVkKSB7XG4gICAgICB2YXIgY2h1bmsgPSBzdGF0ZS5kZWNvZGVyLmVuZCgpO1xuICAgICAgaWYgKGNodW5rICYmIGNodW5rLmxlbmd0aCkgX3RoaXMucHVzaChjaHVuayk7XG4gICAgfVxuICAgIF90aGlzLnB1c2gobnVsbCk7XG4gIH0pO1xuICBzdHJlYW0ub24oJ2RhdGEnLCBmdW5jdGlvbiAoY2h1bmspIHtcbiAgICBkZWJ1Zygnd3JhcHBlZCBkYXRhJyk7XG4gICAgaWYgKHN0YXRlLmRlY29kZXIpIGNodW5rID0gc3RhdGUuZGVjb2Rlci53cml0ZShjaHVuayk7XG5cbiAgICAvLyBkb24ndCBza2lwIG92ZXIgZmFsc3kgdmFsdWVzIGluIG9iamVjdE1vZGVcbiAgICBpZiAoc3RhdGUub2JqZWN0TW9kZSAmJiAoY2h1bmsgPT09IG51bGwgfHwgY2h1bmsgPT09IHVuZGVmaW5lZCkpIHJldHVybjtlbHNlIGlmICghc3RhdGUub2JqZWN0TW9kZSAmJiAoIWNodW5rIHx8ICFjaHVuay5sZW5ndGgpKSByZXR1cm47XG4gICAgdmFyIHJldCA9IF90aGlzLnB1c2goY2h1bmspO1xuICAgIGlmICghcmV0KSB7XG4gICAgICBwYXVzZWQgPSB0cnVlO1xuICAgICAgc3RyZWFtLnBhdXNlKCk7XG4gICAgfVxuICB9KTtcblxuICAvLyBwcm94eSBhbGwgdGhlIG90aGVyIG1ldGhvZHMuXG4gIC8vIGltcG9ydGFudCB3aGVuIHdyYXBwaW5nIGZpbHRlcnMgYW5kIGR1cGxleGVzLlxuICBmb3IgKHZhciBpIGluIHN0cmVhbSkge1xuICAgIGlmICh0aGlzW2ldID09PSB1bmRlZmluZWQgJiYgdHlwZW9mIHN0cmVhbVtpXSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgdGhpc1tpXSA9IGZ1bmN0aW9uIG1ldGhvZFdyYXAobWV0aG9kKSB7XG4gICAgICAgIHJldHVybiBmdW5jdGlvbiBtZXRob2RXcmFwUmV0dXJuRnVuY3Rpb24oKSB7XG4gICAgICAgICAgcmV0dXJuIHN0cmVhbVttZXRob2RdLmFwcGx5KHN0cmVhbSwgYXJndW1lbnRzKTtcbiAgICAgICAgfTtcbiAgICAgIH0oaSk7XG4gICAgfVxuICB9XG5cbiAgLy8gcHJveHkgY2VydGFpbiBpbXBvcnRhbnQgZXZlbnRzLlxuICBmb3IgKHZhciBuID0gMDsgbiA8IGtQcm94eUV2ZW50cy5sZW5ndGg7IG4rKykge1xuICAgIHN0cmVhbS5vbihrUHJveHlFdmVudHNbbl0sIHRoaXMuZW1pdC5iaW5kKHRoaXMsIGtQcm94eUV2ZW50c1tuXSkpO1xuICB9XG5cbiAgLy8gd2hlbiB3ZSB0cnkgdG8gY29uc3VtZSBzb21lIG1vcmUgYnl0ZXMsIHNpbXBseSB1bnBhdXNlIHRoZVxuICAvLyB1bmRlcmx5aW5nIHN0cmVhbS5cbiAgdGhpcy5fcmVhZCA9IGZ1bmN0aW9uIChuKSB7XG4gICAgZGVidWcoJ3dyYXBwZWQgX3JlYWQnLCBuKTtcbiAgICBpZiAocGF1c2VkKSB7XG4gICAgICBwYXVzZWQgPSBmYWxzZTtcbiAgICAgIHN0cmVhbS5yZXN1bWUoKTtcbiAgICB9XG4gIH07XG4gIHJldHVybiB0aGlzO1xufTtcbmlmICh0eXBlb2YgU3ltYm9sID09PSAnZnVuY3Rpb24nKSB7XG4gIFJlYWRhYmxlLnByb3RvdHlwZVtTeW1ib2wuYXN5bmNJdGVyYXRvcl0gPSBmdW5jdGlvbiAoKSB7XG4gICAgaWYgKGNyZWF0ZVJlYWRhYmxlU3RyZWFtQXN5bmNJdGVyYXRvciA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICBjcmVhdGVSZWFkYWJsZVN0cmVhbUFzeW5jSXRlcmF0b3IgPSByZXF1aXJlKCcuL2ludGVybmFsL3N0cmVhbXMvYXN5bmNfaXRlcmF0b3InKTtcbiAgICB9XG4gICAgcmV0dXJuIGNyZWF0ZVJlYWRhYmxlU3RyZWFtQXN5bmNJdGVyYXRvcih0aGlzKTtcbiAgfTtcbn1cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShSZWFkYWJsZS5wcm90b3R5cGUsICdyZWFkYWJsZUhpZ2hXYXRlck1hcmsnLCB7XG4gIC8vIG1ha2luZyBpdCBleHBsaWNpdCB0aGlzIHByb3BlcnR5IGlzIG5vdCBlbnVtZXJhYmxlXG4gIC8vIGJlY2F1c2Ugb3RoZXJ3aXNlIHNvbWUgcHJvdG90eXBlIG1hbmlwdWxhdGlvbiBpblxuICAvLyB1c2VybGFuZCB3aWxsIGZhaWxcbiAgZW51bWVyYWJsZTogZmFsc2UsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiB0aGlzLl9yZWFkYWJsZVN0YXRlLmhpZ2hXYXRlck1hcms7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KFJlYWRhYmxlLnByb3RvdHlwZSwgJ3JlYWRhYmxlQnVmZmVyJywge1xuICAvLyBtYWtpbmcgaXQgZXhwbGljaXQgdGhpcyBwcm9wZXJ0eSBpcyBub3QgZW51bWVyYWJsZVxuICAvLyBiZWNhdXNlIG90aGVyd2lzZSBzb21lIHByb3RvdHlwZSBtYW5pcHVsYXRpb24gaW5cbiAgLy8gdXNlcmxhbmQgd2lsbCBmYWlsXG4gIGVudW1lcmFibGU6IGZhbHNlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gdGhpcy5fcmVhZGFibGVTdGF0ZSAmJiB0aGlzLl9yZWFkYWJsZVN0YXRlLmJ1ZmZlcjtcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoUmVhZGFibGUucHJvdG90eXBlLCAncmVhZGFibGVGbG93aW5nJywge1xuICAvLyBtYWtpbmcgaXQgZXhwbGljaXQgdGhpcyBwcm9wZXJ0eSBpcyBub3QgZW51bWVyYWJsZVxuICAvLyBiZWNhdXNlIG90aGVyd2lzZSBzb21lIHByb3RvdHlwZSBtYW5pcHVsYXRpb24gaW5cbiAgLy8gdXNlcmxhbmQgd2lsbCBmYWlsXG4gIGVudW1lcmFibGU6IGZhbHNlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gdGhpcy5fcmVhZGFibGVTdGF0ZS5mbG93aW5nO1xuICB9LFxuICBzZXQ6IGZ1bmN0aW9uIHNldChzdGF0ZSkge1xuICAgIGlmICh0aGlzLl9yZWFkYWJsZVN0YXRlKSB7XG4gICAgICB0aGlzLl9yZWFkYWJsZVN0YXRlLmZsb3dpbmcgPSBzdGF0ZTtcbiAgICB9XG4gIH1cbn0pO1xuXG4vLyBleHBvc2VkIGZvciB0ZXN0aW5nIHB1cnBvc2VzIG9ubHkuXG5SZWFkYWJsZS5fZnJvbUxpc3QgPSBmcm9tTGlzdDtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShSZWFkYWJsZS5wcm90b3R5cGUsICdyZWFkYWJsZUxlbmd0aCcsIHtcbiAgLy8gbWFraW5nIGl0IGV4cGxpY2l0IHRoaXMgcHJvcGVydHkgaXMgbm90IGVudW1lcmFibGVcbiAgLy8gYmVjYXVzZSBvdGhlcndpc2Ugc29tZSBwcm90b3R5cGUgbWFuaXB1bGF0aW9uIGluXG4gIC8vIHVzZXJsYW5kIHdpbGwgZmFpbFxuICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIHRoaXMuX3JlYWRhYmxlU3RhdGUubGVuZ3RoO1xuICB9XG59KTtcblxuLy8gUGx1Y2sgb2ZmIG4gYnl0ZXMgZnJvbSBhbiBhcnJheSBvZiBidWZmZXJzLlxuLy8gTGVuZ3RoIGlzIHRoZSBjb21iaW5lZCBsZW5ndGhzIG9mIGFsbCB0aGUgYnVmZmVycyBpbiB0aGUgbGlzdC5cbi8vIFRoaXMgZnVuY3Rpb24gaXMgZGVzaWduZWQgdG8gYmUgaW5saW5hYmxlLCBzbyBwbGVhc2UgdGFrZSBjYXJlIHdoZW4gbWFraW5nXG4vLyBjaGFuZ2VzIHRvIHRoZSBmdW5jdGlvbiBib2R5LlxuZnVuY3Rpb24gZnJvbUxpc3Qobiwgc3RhdGUpIHtcbiAgLy8gbm90aGluZyBidWZmZXJlZFxuICBpZiAoc3RhdGUubGVuZ3RoID09PSAwKSByZXR1cm4gbnVsbDtcbiAgdmFyIHJldDtcbiAgaWYgKHN0YXRlLm9iamVjdE1vZGUpIHJldCA9IHN0YXRlLmJ1ZmZlci5zaGlmdCgpO2Vsc2UgaWYgKCFuIHx8IG4gPj0gc3RhdGUubGVuZ3RoKSB7XG4gICAgLy8gcmVhZCBpdCBhbGwsIHRydW5jYXRlIHRoZSBsaXN0XG4gICAgaWYgKHN0YXRlLmRlY29kZXIpIHJldCA9IHN0YXRlLmJ1ZmZlci5qb2luKCcnKTtlbHNlIGlmIChzdGF0ZS5idWZmZXIubGVuZ3RoID09PSAxKSByZXQgPSBzdGF0ZS5idWZmZXIuZmlyc3QoKTtlbHNlIHJldCA9IHN0YXRlLmJ1ZmZlci5jb25jYXQoc3RhdGUubGVuZ3RoKTtcbiAgICBzdGF0ZS5idWZmZXIuY2xlYXIoKTtcbiAgfSBlbHNlIHtcbiAgICAvLyByZWFkIHBhcnQgb2YgbGlzdFxuICAgIHJldCA9IHN0YXRlLmJ1ZmZlci5jb25zdW1lKG4sIHN0YXRlLmRlY29kZXIpO1xuICB9XG4gIHJldHVybiByZXQ7XG59XG5mdW5jdGlvbiBlbmRSZWFkYWJsZShzdHJlYW0pIHtcbiAgdmFyIHN0YXRlID0gc3RyZWFtLl9yZWFkYWJsZVN0YXRlO1xuICBkZWJ1ZygnZW5kUmVhZGFibGUnLCBzdGF0ZS5lbmRFbWl0dGVkKTtcbiAgaWYgKCFzdGF0ZS5lbmRFbWl0dGVkKSB7XG4gICAgc3RhdGUuZW5kZWQgPSB0cnVlO1xuICAgIHByb2Nlc3MubmV4dFRpY2soZW5kUmVhZGFibGVOVCwgc3RhdGUsIHN0cmVhbSk7XG4gIH1cbn1cbmZ1bmN0aW9uIGVuZFJlYWRhYmxlTlQoc3RhdGUsIHN0cmVhbSkge1xuICBkZWJ1ZygnZW5kUmVhZGFibGVOVCcsIHN0YXRlLmVuZEVtaXR0ZWQsIHN0YXRlLmxlbmd0aCk7XG5cbiAgLy8gQ2hlY2sgdGhhdCB3ZSBkaWRuJ3QgZ2V0IG9uZSBsYXN0IHVuc2hpZnQuXG4gIGlmICghc3RhdGUuZW5kRW1pdHRlZCAmJiBzdGF0ZS5sZW5ndGggPT09IDApIHtcbiAgICBzdGF0ZS5lbmRFbWl0dGVkID0gdHJ1ZTtcbiAgICBzdHJlYW0ucmVhZGFibGUgPSBmYWxzZTtcbiAgICBzdHJlYW0uZW1pdCgnZW5kJyk7XG4gICAgaWYgKHN0YXRlLmF1dG9EZXN0cm95KSB7XG4gICAgICAvLyBJbiBjYXNlIG9mIGR1cGxleCBzdHJlYW1zIHdlIG5lZWQgYSB3YXkgdG8gZGV0ZWN0XG4gICAgICAvLyBpZiB0aGUgd3JpdGFibGUgc2lkZSBpcyByZWFkeSBmb3IgYXV0b0Rlc3Ryb3kgYXMgd2VsbFxuICAgICAgdmFyIHdTdGF0ZSA9IHN0cmVhbS5fd3JpdGFibGVTdGF0ZTtcbiAgICAgIGlmICghd1N0YXRlIHx8IHdTdGF0ZS5hdXRvRGVzdHJveSAmJiB3U3RhdGUuZmluaXNoZWQpIHtcbiAgICAgICAgc3RyZWFtLmRlc3Ryb3koKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cbmlmICh0eXBlb2YgU3ltYm9sID09PSAnZnVuY3Rpb24nKSB7XG4gIFJlYWRhYmxlLmZyb20gPSBmdW5jdGlvbiAoaXRlcmFibGUsIG9wdHMpIHtcbiAgICBpZiAoZnJvbSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICBmcm9tID0gcmVxdWlyZSgnLi9pbnRlcm5hbC9zdHJlYW1zL2Zyb20nKTtcbiAgICB9XG4gICAgcmV0dXJuIGZyb20oUmVhZGFibGUsIGl0ZXJhYmxlLCBvcHRzKTtcbiAgfTtcbn1cbmZ1bmN0aW9uIGluZGV4T2YoeHMsIHgpIHtcbiAgZm9yICh2YXIgaSA9IDAsIGwgPSB4cy5sZW5ndGg7IGkgPCBsOyBpKyspIHtcbiAgICBpZiAoeHNbaV0gPT09IHgpIHJldHVybiBpO1xuICB9XG4gIHJldHVybiAtMTtcbn0iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///45412\n")},45471:function(module,exports,__webpack_require__){eval(";(function (root, factory) {\n\tif (true) {\n\t\t// CommonJS\n\t\tmodule.exports = exports = factory(__webpack_require__(19021));\n\t}\n\telse {}\n}(this, function (CryptoJS) {\n\n\t(function () {\n\t // Shortcuts\n\t var C = CryptoJS;\n\t var C_lib = C.lib;\n\t var WordArray = C_lib.WordArray;\n\t var Hasher = C_lib.Hasher;\n\t var C_algo = C.algo;\n\n\t // Reusable object\n\t var W = [];\n\n\t /**\n\t * SHA-1 hash algorithm.\n\t */\n\t var SHA1 = C_algo.SHA1 = Hasher.extend({\n\t _doReset: function () {\n\t this._hash = new WordArray.init([\n\t 0x67452301, 0xefcdab89,\n\t 0x98badcfe, 0x10325476,\n\t 0xc3d2e1f0\n\t ]);\n\t },\n\n\t _doProcessBlock: function (M, offset) {\n\t // Shortcut\n\t var H = this._hash.words;\n\n\t // Working variables\n\t var a = H[0];\n\t var b = H[1];\n\t var c = H[2];\n\t var d = H[3];\n\t var e = H[4];\n\n\t // Computation\n\t for (var i = 0; i < 80; i++) {\n\t if (i < 16) {\n\t W[i] = M[offset + i] | 0;\n\t } else {\n\t var n = W[i - 3] ^ W[i - 8] ^ W[i - 14] ^ W[i - 16];\n\t W[i] = (n << 1) | (n >>> 31);\n\t }\n\n\t var t = ((a << 5) | (a >>> 27)) + e + W[i];\n\t if (i < 20) {\n\t t += ((b & c) | (~b & d)) + 0x5a827999;\n\t } else if (i < 40) {\n\t t += (b ^ c ^ d) + 0x6ed9eba1;\n\t } else if (i < 60) {\n\t t += ((b & c) | (b & d) | (c & d)) - 0x70e44324;\n\t } else /* if (i < 80) */ {\n\t t += (b ^ c ^ d) - 0x359d3e2a;\n\t }\n\n\t e = d;\n\t d = c;\n\t c = (b << 30) | (b >>> 2);\n\t b = a;\n\t a = t;\n\t }\n\n\t // Intermediate hash value\n\t H[0] = (H[0] + a) | 0;\n\t H[1] = (H[1] + b) | 0;\n\t H[2] = (H[2] + c) | 0;\n\t H[3] = (H[3] + d) | 0;\n\t H[4] = (H[4] + e) | 0;\n\t },\n\n\t _doFinalize: function () {\n\t // Shortcuts\n\t var data = this._data;\n\t var dataWords = data.words;\n\n\t var nBitsTotal = this._nDataBytes * 8;\n\t var nBitsLeft = data.sigBytes * 8;\n\n\t // Add padding\n\t dataWords[nBitsLeft >>> 5] |= 0x80 << (24 - nBitsLeft % 32);\n\t dataWords[(((nBitsLeft + 64) >>> 9) << 4) + 14] = Math.floor(nBitsTotal / 0x100000000);\n\t dataWords[(((nBitsLeft + 64) >>> 9) << 4) + 15] = nBitsTotal;\n\t data.sigBytes = dataWords.length * 4;\n\n\t // Hash final blocks\n\t this._process();\n\n\t // Return final computed hash\n\t return this._hash;\n\t },\n\n\t clone: function () {\n\t var clone = Hasher.clone.call(this);\n\t clone._hash = this._hash.clone();\n\n\t return clone;\n\t }\n\t });\n\n\t /**\n\t * Shortcut function to the hasher's object interface.\n\t *\n\t * @param {WordArray|string} message The message to hash.\n\t *\n\t * @return {WordArray} The hash.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var hash = CryptoJS.SHA1('message');\n\t * var hash = CryptoJS.SHA1(wordArray);\n\t */\n\t C.SHA1 = Hasher._createHelper(SHA1);\n\n\t /**\n\t * Shortcut function to the HMAC's object interface.\n\t *\n\t * @param {WordArray|string} message The message to hash.\n\t * @param {WordArray|string} key The secret key.\n\t *\n\t * @return {WordArray} The HMAC.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var hmac = CryptoJS.HmacSHA1(message, key);\n\t */\n\t C.HmacSHA1 = Hasher._createHmacHelper(SHA1);\n\t}());\n\n\n\treturn CryptoJS.SHA1;\n\n}));//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNDU0NzEuanMiLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBUUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL2l0Zy1uZXh0Z2VuLWZyb250ZW5kLy4vbm9kZV9tb2R1bGVzL2NyeXB0by1qcy9zaGExLmpzP2RmMmYiXSwic291cmNlc0NvbnRlbnQiOlsiOyhmdW5jdGlvbiAocm9vdCwgZmFjdG9yeSkge1xuXHRpZiAodHlwZW9mIGV4cG9ydHMgPT09IFwib2JqZWN0XCIpIHtcblx0XHQvLyBDb21tb25KU1xuXHRcdG1vZHVsZS5leHBvcnRzID0gZXhwb3J0cyA9IGZhY3RvcnkocmVxdWlyZShcIi4vY29yZVwiKSk7XG5cdH1cblx0ZWxzZSBpZiAodHlwZW9mIGRlZmluZSA9PT0gXCJmdW5jdGlvblwiICYmIGRlZmluZS5hbWQpIHtcblx0XHQvLyBBTURcblx0XHRkZWZpbmUoW1wiLi9jb3JlXCJdLCBmYWN0b3J5KTtcblx0fVxuXHRlbHNlIHtcblx0XHQvLyBHbG9iYWwgKGJyb3dzZXIpXG5cdFx0ZmFjdG9yeShyb290LkNyeXB0b0pTKTtcblx0fVxufSh0aGlzLCBmdW5jdGlvbiAoQ3J5cHRvSlMpIHtcblxuXHQoZnVuY3Rpb24gKCkge1xuXHQgICAgLy8gU2hvcnRjdXRzXG5cdCAgICB2YXIgQyA9IENyeXB0b0pTO1xuXHQgICAgdmFyIENfbGliID0gQy5saWI7XG5cdCAgICB2YXIgV29yZEFycmF5ID0gQ19saWIuV29yZEFycmF5O1xuXHQgICAgdmFyIEhhc2hlciA9IENfbGliLkhhc2hlcjtcblx0ICAgIHZhciBDX2FsZ28gPSBDLmFsZ287XG5cblx0ICAgIC8vIFJldXNhYmxlIG9iamVjdFxuXHQgICAgdmFyIFcgPSBbXTtcblxuXHQgICAgLyoqXG5cdCAgICAgKiBTSEEtMSBoYXNoIGFsZ29yaXRobS5cblx0ICAgICAqL1xuXHQgICAgdmFyIFNIQTEgPSBDX2FsZ28uU0hBMSA9IEhhc2hlci5leHRlbmQoe1xuXHQgICAgICAgIF9kb1Jlc2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHRoaXMuX2hhc2ggPSBuZXcgV29yZEFycmF5LmluaXQoW1xuXHQgICAgICAgICAgICAgICAgMHg2NzQ1MjMwMSwgMHhlZmNkYWI4OSxcblx0ICAgICAgICAgICAgICAgIDB4OThiYWRjZmUsIDB4MTAzMjU0NzYsXG5cdCAgICAgICAgICAgICAgICAweGMzZDJlMWYwXG5cdCAgICAgICAgICAgIF0pO1xuXHQgICAgICAgIH0sXG5cblx0ICAgICAgICBfZG9Qcm9jZXNzQmxvY2s6IGZ1bmN0aW9uIChNLCBvZmZzZXQpIHtcblx0ICAgICAgICAgICAgLy8gU2hvcnRjdXRcblx0ICAgICAgICAgICAgdmFyIEggPSB0aGlzLl9oYXNoLndvcmRzO1xuXG5cdCAgICAgICAgICAgIC8vIFdvcmtpbmcgdmFyaWFibGVzXG5cdCAgICAgICAgICAgIHZhciBhID0gSFswXTtcblx0ICAgICAgICAgICAgdmFyIGIgPSBIWzFdO1xuXHQgICAgICAgICAgICB2YXIgYyA9IEhbMl07XG5cdCAgICAgICAgICAgIHZhciBkID0gSFszXTtcblx0ICAgICAgICAgICAgdmFyIGUgPSBIWzRdO1xuXG5cdCAgICAgICAgICAgIC8vIENvbXB1dGF0aW9uXG5cdCAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgODA7IGkrKykge1xuXHQgICAgICAgICAgICAgICAgaWYgKGkgPCAxNikge1xuXHQgICAgICAgICAgICAgICAgICAgIFdbaV0gPSBNW29mZnNldCArIGldIHwgMDtcblx0ICAgICAgICAgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICAgICAgICAgICAgdmFyIG4gPSBXW2kgLSAzXSBeIFdbaSAtIDhdIF4gV1tpIC0gMTRdIF4gV1tpIC0gMTZdO1xuXHQgICAgICAgICAgICAgICAgICAgIFdbaV0gPSAobiA8PCAxKSB8IChuID4+PiAzMSk7XG5cdCAgICAgICAgICAgICAgICB9XG5cblx0ICAgICAgICAgICAgICAgIHZhciB0ID0gKChhIDw8IDUpIHwgKGEgPj4+IDI3KSkgKyBlICsgV1tpXTtcblx0ICAgICAgICAgICAgICAgIGlmIChpIDwgMjApIHtcblx0ICAgICAgICAgICAgICAgICAgICB0ICs9ICgoYiAmIGMpIHwgKH5iICYgZCkpICsgMHg1YTgyNzk5OTtcblx0ICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoaSA8IDQwKSB7XG5cdCAgICAgICAgICAgICAgICAgICAgdCArPSAoYiBeIGMgXiBkKSArIDB4NmVkOWViYTE7XG5cdCAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGkgPCA2MCkge1xuXHQgICAgICAgICAgICAgICAgICAgIHQgKz0gKChiICYgYykgfCAoYiAmIGQpIHwgKGMgJiBkKSkgLSAweDcwZTQ0MzI0O1xuXHQgICAgICAgICAgICAgICAgfSBlbHNlIC8qIGlmIChpIDwgODApICovIHtcblx0ICAgICAgICAgICAgICAgICAgICB0ICs9IChiIF4gYyBeIGQpIC0gMHgzNTlkM2UyYTtcblx0ICAgICAgICAgICAgICAgIH1cblxuXHQgICAgICAgICAgICAgICAgZSA9IGQ7XG5cdCAgICAgICAgICAgICAgICBkID0gYztcblx0ICAgICAgICAgICAgICAgIGMgPSAoYiA8PCAzMCkgfCAoYiA+Pj4gMik7XG5cdCAgICAgICAgICAgICAgICBiID0gYTtcblx0ICAgICAgICAgICAgICAgIGEgPSB0O1xuXHQgICAgICAgICAgICB9XG5cblx0ICAgICAgICAgICAgLy8gSW50ZXJtZWRpYXRlIGhhc2ggdmFsdWVcblx0ICAgICAgICAgICAgSFswXSA9IChIWzBdICsgYSkgfCAwO1xuXHQgICAgICAgICAgICBIWzFdID0gKEhbMV0gKyBiKSB8IDA7XG5cdCAgICAgICAgICAgIEhbMl0gPSAoSFsyXSArIGMpIHwgMDtcblx0ICAgICAgICAgICAgSFszXSA9IChIWzNdICsgZCkgfCAwO1xuXHQgICAgICAgICAgICBIWzRdID0gKEhbNF0gKyBlKSB8IDA7XG5cdCAgICAgICAgfSxcblxuXHQgICAgICAgIF9kb0ZpbmFsaXplOiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIC8vIFNob3J0Y3V0c1xuXHQgICAgICAgICAgICB2YXIgZGF0YSA9IHRoaXMuX2RhdGE7XG5cdCAgICAgICAgICAgIHZhciBkYXRhV29yZHMgPSBkYXRhLndvcmRzO1xuXG5cdCAgICAgICAgICAgIHZhciBuQml0c1RvdGFsID0gdGhpcy5fbkRhdGFCeXRlcyAqIDg7XG5cdCAgICAgICAgICAgIHZhciBuQml0c0xlZnQgPSBkYXRhLnNpZ0J5dGVzICogODtcblxuXHQgICAgICAgICAgICAvLyBBZGQgcGFkZGluZ1xuXHQgICAgICAgICAgICBkYXRhV29yZHNbbkJpdHNMZWZ0ID4+PiA1XSB8PSAweDgwIDw8ICgyNCAtIG5CaXRzTGVmdCAlIDMyKTtcblx0ICAgICAgICAgICAgZGF0YVdvcmRzWygoKG5CaXRzTGVmdCArIDY0KSA+Pj4gOSkgPDwgNCkgKyAxNF0gPSBNYXRoLmZsb29yKG5CaXRzVG90YWwgLyAweDEwMDAwMDAwMCk7XG5cdCAgICAgICAgICAgIGRhdGFXb3Jkc1soKChuQml0c0xlZnQgKyA2NCkgPj4+IDkpIDw8IDQpICsgMTVdID0gbkJpdHNUb3RhbDtcblx0ICAgICAgICAgICAgZGF0YS5zaWdCeXRlcyA9IGRhdGFXb3Jkcy5sZW5ndGggKiA0O1xuXG5cdCAgICAgICAgICAgIC8vIEhhc2ggZmluYWwgYmxvY2tzXG5cdCAgICAgICAgICAgIHRoaXMuX3Byb2Nlc3MoKTtcblxuXHQgICAgICAgICAgICAvLyBSZXR1cm4gZmluYWwgY29tcHV0ZWQgaGFzaFxuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy5faGFzaDtcblx0ICAgICAgICB9LFxuXG5cdCAgICAgICAgY2xvbmU6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgdmFyIGNsb25lID0gSGFzaGVyLmNsb25lLmNhbGwodGhpcyk7XG5cdCAgICAgICAgICAgIGNsb25lLl9oYXNoID0gdGhpcy5faGFzaC5jbG9uZSgpO1xuXG5cdCAgICAgICAgICAgIHJldHVybiBjbG9uZTtcblx0ICAgICAgICB9XG5cdCAgICB9KTtcblxuXHQgICAgLyoqXG5cdCAgICAgKiBTaG9ydGN1dCBmdW5jdGlvbiB0byB0aGUgaGFzaGVyJ3Mgb2JqZWN0IGludGVyZmFjZS5cblx0ICAgICAqXG5cdCAgICAgKiBAcGFyYW0ge1dvcmRBcnJheXxzdHJpbmd9IG1lc3NhZ2UgVGhlIG1lc3NhZ2UgdG8gaGFzaC5cblx0ICAgICAqXG5cdCAgICAgKiBAcmV0dXJuIHtXb3JkQXJyYXl9IFRoZSBoYXNoLlxuXHQgICAgICpcblx0ICAgICAqIEBzdGF0aWNcblx0ICAgICAqXG5cdCAgICAgKiBAZXhhbXBsZVxuXHQgICAgICpcblx0ICAgICAqICAgICB2YXIgaGFzaCA9IENyeXB0b0pTLlNIQTEoJ21lc3NhZ2UnKTtcblx0ICAgICAqICAgICB2YXIgaGFzaCA9IENyeXB0b0pTLlNIQTEod29yZEFycmF5KTtcblx0ICAgICAqL1xuXHQgICAgQy5TSEExID0gSGFzaGVyLl9jcmVhdGVIZWxwZXIoU0hBMSk7XG5cblx0ICAgIC8qKlxuXHQgICAgICogU2hvcnRjdXQgZnVuY3Rpb24gdG8gdGhlIEhNQUMncyBvYmplY3QgaW50ZXJmYWNlLlxuXHQgICAgICpcblx0ICAgICAqIEBwYXJhbSB7V29yZEFycmF5fHN0cmluZ30gbWVzc2FnZSBUaGUgbWVzc2FnZSB0byBoYXNoLlxuXHQgICAgICogQHBhcmFtIHtXb3JkQXJyYXl8c3RyaW5nfSBrZXkgVGhlIHNlY3JldCBrZXkuXG5cdCAgICAgKlxuXHQgICAgICogQHJldHVybiB7V29yZEFycmF5fSBUaGUgSE1BQy5cblx0ICAgICAqXG5cdCAgICAgKiBAc3RhdGljXG5cdCAgICAgKlxuXHQgICAgICogQGV4YW1wbGVcblx0ICAgICAqXG5cdCAgICAgKiAgICAgdmFyIGhtYWMgPSBDcnlwdG9KUy5IbWFjU0hBMShtZXNzYWdlLCBrZXkpO1xuXHQgICAgICovXG5cdCAgICBDLkhtYWNTSEExID0gSGFzaGVyLl9jcmVhdGVIbWFjSGVscGVyKFNIQTEpO1xuXHR9KCkpO1xuXG5cblx0cmV0dXJuIENyeXB0b0pTLlNIQTE7XG5cbn0pKTsiXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///45471\n")},45503:function(module,exports,__webpack_require__){eval(";(function (root, factory) {\n\tif (true) {\n\t\t// CommonJS\n\t\tmodule.exports = exports = factory(__webpack_require__(19021));\n\t}\n\telse {}\n}(this, function (CryptoJS) {\n\n\t(function () {\n\t // Shortcuts\n\t var C = CryptoJS;\n\t var C_lib = C.lib;\n\t var WordArray = C_lib.WordArray;\n\t var C_enc = C.enc;\n\n\t /**\n\t * UTF-16 BE encoding strategy.\n\t */\n\t var Utf16BE = C_enc.Utf16 = C_enc.Utf16BE = {\n\t /**\n\t * Converts a word array to a UTF-16 BE string.\n\t *\n\t * @param {WordArray} wordArray The word array.\n\t *\n\t * @return {string} The UTF-16 BE string.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var utf16String = CryptoJS.enc.Utf16.stringify(wordArray);\n\t */\n\t stringify: function (wordArray) {\n\t // Shortcuts\n\t var words = wordArray.words;\n\t var sigBytes = wordArray.sigBytes;\n\n\t // Convert\n\t var utf16Chars = [];\n\t for (var i = 0; i < sigBytes; i += 2) {\n\t var codePoint = (words[i >>> 2] >>> (16 - (i % 4) * 8)) & 0xffff;\n\t utf16Chars.push(String.fromCharCode(codePoint));\n\t }\n\n\t return utf16Chars.join('');\n\t },\n\n\t /**\n\t * Converts a UTF-16 BE string to a word array.\n\t *\n\t * @param {string} utf16Str The UTF-16 BE string.\n\t *\n\t * @return {WordArray} The word array.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var wordArray = CryptoJS.enc.Utf16.parse(utf16String);\n\t */\n\t parse: function (utf16Str) {\n\t // Shortcut\n\t var utf16StrLength = utf16Str.length;\n\n\t // Convert\n\t var words = [];\n\t for (var i = 0; i < utf16StrLength; i++) {\n\t words[i >>> 1] |= utf16Str.charCodeAt(i) << (16 - (i % 2) * 16);\n\t }\n\n\t return WordArray.create(words, utf16StrLength * 2);\n\t }\n\t };\n\n\t /**\n\t * UTF-16 LE encoding strategy.\n\t */\n\t C_enc.Utf16LE = {\n\t /**\n\t * Converts a word array to a UTF-16 LE string.\n\t *\n\t * @param {WordArray} wordArray The word array.\n\t *\n\t * @return {string} The UTF-16 LE string.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var utf16Str = CryptoJS.enc.Utf16LE.stringify(wordArray);\n\t */\n\t stringify: function (wordArray) {\n\t // Shortcuts\n\t var words = wordArray.words;\n\t var sigBytes = wordArray.sigBytes;\n\n\t // Convert\n\t var utf16Chars = [];\n\t for (var i = 0; i < sigBytes; i += 2) {\n\t var codePoint = swapEndian((words[i >>> 2] >>> (16 - (i % 4) * 8)) & 0xffff);\n\t utf16Chars.push(String.fromCharCode(codePoint));\n\t }\n\n\t return utf16Chars.join('');\n\t },\n\n\t /**\n\t * Converts a UTF-16 LE string to a word array.\n\t *\n\t * @param {string} utf16Str The UTF-16 LE string.\n\t *\n\t * @return {WordArray} The word array.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var wordArray = CryptoJS.enc.Utf16LE.parse(utf16Str);\n\t */\n\t parse: function (utf16Str) {\n\t // Shortcut\n\t var utf16StrLength = utf16Str.length;\n\n\t // Convert\n\t var words = [];\n\t for (var i = 0; i < utf16StrLength; i++) {\n\t words[i >>> 1] |= swapEndian(utf16Str.charCodeAt(i) << (16 - (i % 2) * 16));\n\t }\n\n\t return WordArray.create(words, utf16StrLength * 2);\n\t }\n\t };\n\n\t function swapEndian(word) {\n\t return ((word << 8) & 0xff00ff00) | ((word >>> 8) & 0x00ff00ff);\n\t }\n\t}());\n\n\n\treturn CryptoJS.enc.Utf16;\n\n}));//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNDU1MDMuanMiLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBUUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9pdGctbmV4dGdlbi1mcm9udGVuZC8uL25vZGVfbW9kdWxlcy9jcnlwdG8tanMvZW5jLXV0ZjE2LmpzP2E4Y2UiXSwic291cmNlc0NvbnRlbnQiOlsiOyhmdW5jdGlvbiAocm9vdCwgZmFjdG9yeSkge1xuXHRpZiAodHlwZW9mIGV4cG9ydHMgPT09IFwib2JqZWN0XCIpIHtcblx0XHQvLyBDb21tb25KU1xuXHRcdG1vZHVsZS5leHBvcnRzID0gZXhwb3J0cyA9IGZhY3RvcnkocmVxdWlyZShcIi4vY29yZVwiKSk7XG5cdH1cblx0ZWxzZSBpZiAodHlwZW9mIGRlZmluZSA9PT0gXCJmdW5jdGlvblwiICYmIGRlZmluZS5hbWQpIHtcblx0XHQvLyBBTURcblx0XHRkZWZpbmUoW1wiLi9jb3JlXCJdLCBmYWN0b3J5KTtcblx0fVxuXHRlbHNlIHtcblx0XHQvLyBHbG9iYWwgKGJyb3dzZXIpXG5cdFx0ZmFjdG9yeShyb290LkNyeXB0b0pTKTtcblx0fVxufSh0aGlzLCBmdW5jdGlvbiAoQ3J5cHRvSlMpIHtcblxuXHQoZnVuY3Rpb24gKCkge1xuXHQgICAgLy8gU2hvcnRjdXRzXG5cdCAgICB2YXIgQyA9IENyeXB0b0pTO1xuXHQgICAgdmFyIENfbGliID0gQy5saWI7XG5cdCAgICB2YXIgV29yZEFycmF5ID0gQ19saWIuV29yZEFycmF5O1xuXHQgICAgdmFyIENfZW5jID0gQy5lbmM7XG5cblx0ICAgIC8qKlxuXHQgICAgICogVVRGLTE2IEJFIGVuY29kaW5nIHN0cmF0ZWd5LlxuXHQgICAgICovXG5cdCAgICB2YXIgVXRmMTZCRSA9IENfZW5jLlV0ZjE2ID0gQ19lbmMuVXRmMTZCRSA9IHtcblx0ICAgICAgICAvKipcblx0ICAgICAgICAgKiBDb252ZXJ0cyBhIHdvcmQgYXJyYXkgdG8gYSBVVEYtMTYgQkUgc3RyaW5nLlxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogQHBhcmFtIHtXb3JkQXJyYXl9IHdvcmRBcnJheSBUaGUgd29yZCBhcnJheS5cblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqIEByZXR1cm4ge3N0cmluZ30gVGhlIFVURi0xNiBCRSBzdHJpbmcuXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAc3RhdGljXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAZXhhbXBsZVxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogICAgIHZhciB1dGYxNlN0cmluZyA9IENyeXB0b0pTLmVuYy5VdGYxNi5zdHJpbmdpZnkod29yZEFycmF5KTtcblx0ICAgICAgICAgKi9cblx0ICAgICAgICBzdHJpbmdpZnk6IGZ1bmN0aW9uICh3b3JkQXJyYXkpIHtcblx0ICAgICAgICAgICAgLy8gU2hvcnRjdXRzXG5cdCAgICAgICAgICAgIHZhciB3b3JkcyA9IHdvcmRBcnJheS53b3Jkcztcblx0ICAgICAgICAgICAgdmFyIHNpZ0J5dGVzID0gd29yZEFycmF5LnNpZ0J5dGVzO1xuXG5cdCAgICAgICAgICAgIC8vIENvbnZlcnRcblx0ICAgICAgICAgICAgdmFyIHV0ZjE2Q2hhcnMgPSBbXTtcblx0ICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBzaWdCeXRlczsgaSArPSAyKSB7XG5cdCAgICAgICAgICAgICAgICB2YXIgY29kZVBvaW50ID0gKHdvcmRzW2kgPj4+IDJdID4+PiAoMTYgLSAoaSAlIDQpICogOCkpICYgMHhmZmZmO1xuXHQgICAgICAgICAgICAgICAgdXRmMTZDaGFycy5wdXNoKFN0cmluZy5mcm9tQ2hhckNvZGUoY29kZVBvaW50KSk7XG5cdCAgICAgICAgICAgIH1cblxuXHQgICAgICAgICAgICByZXR1cm4gdXRmMTZDaGFycy5qb2luKCcnKTtcblx0ICAgICAgICB9LFxuXG5cdCAgICAgICAgLyoqXG5cdCAgICAgICAgICogQ29udmVydHMgYSBVVEYtMTYgQkUgc3RyaW5nIHRvIGEgd29yZCBhcnJheS5cblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqIEBwYXJhbSB7c3RyaW5nfSB1dGYxNlN0ciBUaGUgVVRGLTE2IEJFIHN0cmluZy5cblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqIEByZXR1cm4ge1dvcmRBcnJheX0gVGhlIHdvcmQgYXJyYXkuXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAc3RhdGljXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAZXhhbXBsZVxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogICAgIHZhciB3b3JkQXJyYXkgPSBDcnlwdG9KUy5lbmMuVXRmMTYucGFyc2UodXRmMTZTdHJpbmcpO1xuXHQgICAgICAgICAqL1xuXHQgICAgICAgIHBhcnNlOiBmdW5jdGlvbiAodXRmMTZTdHIpIHtcblx0ICAgICAgICAgICAgLy8gU2hvcnRjdXRcblx0ICAgICAgICAgICAgdmFyIHV0ZjE2U3RyTGVuZ3RoID0gdXRmMTZTdHIubGVuZ3RoO1xuXG5cdCAgICAgICAgICAgIC8vIENvbnZlcnRcblx0ICAgICAgICAgICAgdmFyIHdvcmRzID0gW107XG5cdCAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdXRmMTZTdHJMZW5ndGg7IGkrKykge1xuXHQgICAgICAgICAgICAgICAgd29yZHNbaSA+Pj4gMV0gfD0gdXRmMTZTdHIuY2hhckNvZGVBdChpKSA8PCAoMTYgLSAoaSAlIDIpICogMTYpO1xuXHQgICAgICAgICAgICB9XG5cblx0ICAgICAgICAgICAgcmV0dXJuIFdvcmRBcnJheS5jcmVhdGUod29yZHMsIHV0ZjE2U3RyTGVuZ3RoICogMik7XG5cdCAgICAgICAgfVxuXHQgICAgfTtcblxuXHQgICAgLyoqXG5cdCAgICAgKiBVVEYtMTYgTEUgZW5jb2Rpbmcgc3RyYXRlZ3kuXG5cdCAgICAgKi9cblx0ICAgIENfZW5jLlV0ZjE2TEUgPSB7XG5cdCAgICAgICAgLyoqXG5cdCAgICAgICAgICogQ29udmVydHMgYSB3b3JkIGFycmF5IHRvIGEgVVRGLTE2IExFIHN0cmluZy5cblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqIEBwYXJhbSB7V29yZEFycmF5fSB3b3JkQXJyYXkgVGhlIHdvcmQgYXJyYXkuXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAcmV0dXJuIHtzdHJpbmd9IFRoZSBVVEYtMTYgTEUgc3RyaW5nLlxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogQHN0YXRpY1xuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogQGV4YW1wbGVcblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqICAgICB2YXIgdXRmMTZTdHIgPSBDcnlwdG9KUy5lbmMuVXRmMTZMRS5zdHJpbmdpZnkod29yZEFycmF5KTtcblx0ICAgICAgICAgKi9cblx0ICAgICAgICBzdHJpbmdpZnk6IGZ1bmN0aW9uICh3b3JkQXJyYXkpIHtcblx0ICAgICAgICAgICAgLy8gU2hvcnRjdXRzXG5cdCAgICAgICAgICAgIHZhciB3b3JkcyA9IHdvcmRBcnJheS53b3Jkcztcblx0ICAgICAgICAgICAgdmFyIHNpZ0J5dGVzID0gd29yZEFycmF5LnNpZ0J5dGVzO1xuXG5cdCAgICAgICAgICAgIC8vIENvbnZlcnRcblx0ICAgICAgICAgICAgdmFyIHV0ZjE2Q2hhcnMgPSBbXTtcblx0ICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBzaWdCeXRlczsgaSArPSAyKSB7XG5cdCAgICAgICAgICAgICAgICB2YXIgY29kZVBvaW50ID0gc3dhcEVuZGlhbigod29yZHNbaSA+Pj4gMl0gPj4+ICgxNiAtIChpICUgNCkgKiA4KSkgJiAweGZmZmYpO1xuXHQgICAgICAgICAgICAgICAgdXRmMTZDaGFycy5wdXNoKFN0cmluZy5mcm9tQ2hhckNvZGUoY29kZVBvaW50KSk7XG5cdCAgICAgICAgICAgIH1cblxuXHQgICAgICAgICAgICByZXR1cm4gdXRmMTZDaGFycy5qb2luKCcnKTtcblx0ICAgICAgICB9LFxuXG5cdCAgICAgICAgLyoqXG5cdCAgICAgICAgICogQ29udmVydHMgYSBVVEYtMTYgTEUgc3RyaW5nIHRvIGEgd29yZCBhcnJheS5cblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqIEBwYXJhbSB7c3RyaW5nfSB1dGYxNlN0ciBUaGUgVVRGLTE2IExFIHN0cmluZy5cblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqIEByZXR1cm4ge1dvcmRBcnJheX0gVGhlIHdvcmQgYXJyYXkuXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAc3RhdGljXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAZXhhbXBsZVxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogICAgIHZhciB3b3JkQXJyYXkgPSBDcnlwdG9KUy5lbmMuVXRmMTZMRS5wYXJzZSh1dGYxNlN0cik7XG5cdCAgICAgICAgICovXG5cdCAgICAgICAgcGFyc2U6IGZ1bmN0aW9uICh1dGYxNlN0cikge1xuXHQgICAgICAgICAgICAvLyBTaG9ydGN1dFxuXHQgICAgICAgICAgICB2YXIgdXRmMTZTdHJMZW5ndGggPSB1dGYxNlN0ci5sZW5ndGg7XG5cblx0ICAgICAgICAgICAgLy8gQ29udmVydFxuXHQgICAgICAgICAgICB2YXIgd29yZHMgPSBbXTtcblx0ICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB1dGYxNlN0ckxlbmd0aDsgaSsrKSB7XG5cdCAgICAgICAgICAgICAgICB3b3Jkc1tpID4+PiAxXSB8PSBzd2FwRW5kaWFuKHV0ZjE2U3RyLmNoYXJDb2RlQXQoaSkgPDwgKDE2IC0gKGkgJSAyKSAqIDE2KSk7XG5cdCAgICAgICAgICAgIH1cblxuXHQgICAgICAgICAgICByZXR1cm4gV29yZEFycmF5LmNyZWF0ZSh3b3JkcywgdXRmMTZTdHJMZW5ndGggKiAyKTtcblx0ICAgICAgICB9XG5cdCAgICB9O1xuXG5cdCAgICBmdW5jdGlvbiBzd2FwRW5kaWFuKHdvcmQpIHtcblx0ICAgICAgICByZXR1cm4gKCh3b3JkIDw8IDgpICYgMHhmZjAwZmYwMCkgfCAoKHdvcmQgPj4+IDgpICYgMHgwMGZmMDBmZik7XG5cdCAgICB9XG5cdH0oKSk7XG5cblxuXHRyZXR1cm4gQ3J5cHRvSlMuZW5jLlV0ZjE2O1xuXG59KSk7Il0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///45503\n")},45575:(I,g,t)=>{"use strict";I.exports=t.p+"1f8f4168fa107506db36.png"},45719:function(__unused_webpack_module,__unused_webpack_exports,__webpack_require__){eval("//! moment.js locale configuration\n//! locale : Serbian [sr]\n//! author : Milan Janačković : https://github.com/milan-j\n//! author : Stefan Crnjaković : https://github.com/crnjakovic\n\n;(function (global, factory) {\n true ? factory(__webpack_require__(95093)) :\n 0\n}(this, (function (moment) { 'use strict';\n\n //! moment.js locale configuration\n\n var translator = {\n words: {\n //Different grammatical cases\n ss: ['sekunda', 'sekunde', 'sekundi'],\n m: ['jedan minut', 'jednog minuta'],\n mm: ['minut', 'minuta', 'minuta'],\n h: ['jedan sat', 'jednog sata'],\n hh: ['sat', 'sata', 'sati'],\n d: ['jedan dan', 'jednog dana'],\n dd: ['dan', 'dana', 'dana'],\n M: ['jedan mesec', 'jednog meseca'],\n MM: ['mesec', 'meseca', 'meseci'],\n y: ['jednu godinu', 'jedne godine'],\n yy: ['godinu', 'godine', 'godina'],\n },\n correctGrammaticalCase: function (number, wordKey) {\n if (\n number % 10 >= 1 &&\n number % 10 <= 4 &&\n (number % 100 < 10 || number % 100 >= 20)\n ) {\n return number % 10 === 1 ? wordKey[0] : wordKey[1];\n }\n return wordKey[2];\n },\n translate: function (number, withoutSuffix, key, isFuture) {\n var wordKey = translator.words[key],\n word;\n\n if (key.length === 1) {\n // Nominativ\n if (key === 'y' && withoutSuffix) return 'jedna godina';\n return isFuture || withoutSuffix ? wordKey[0] : wordKey[1];\n }\n\n word = translator.correctGrammaticalCase(number, wordKey);\n // Nominativ\n if (key === 'yy' && withoutSuffix && word === 'godinu') {\n return number + ' godina';\n }\n\n return number + ' ' + word;\n },\n };\n\n var sr = moment.defineLocale('sr', {\n months: 'januar_februar_mart_april_maj_jun_jul_avgust_septembar_oktobar_novembar_decembar'.split(\n '_'\n ),\n monthsShort:\n 'jan._feb._mar._apr._maj_jun_jul_avg._sep._okt._nov._dec.'.split('_'),\n monthsParseExact: true,\n weekdays: 'nedelja_ponedeljak_utorak_sreda_četvrtak_petak_subota'.split(\n '_'\n ),\n weekdaysShort: 'ned._pon._uto._sre._čet._pet._sub.'.split('_'),\n weekdaysMin: 'ne_po_ut_sr_če_pe_su'.split('_'),\n weekdaysParseExact: true,\n longDateFormat: {\n LT: 'H:mm',\n LTS: 'H:mm:ss',\n L: 'D. M. YYYY.',\n LL: 'D. MMMM YYYY.',\n LLL: 'D. MMMM YYYY. H:mm',\n LLLL: 'dddd, D. MMMM YYYY. H:mm',\n },\n calendar: {\n sameDay: '[danas u] LT',\n nextDay: '[sutra u] LT',\n nextWeek: function () {\n switch (this.day()) {\n case 0:\n return '[u] [nedelju] [u] LT';\n case 3:\n return '[u] [sredu] [u] LT';\n case 6:\n return '[u] [subotu] [u] LT';\n case 1:\n case 2:\n case 4:\n case 5:\n return '[u] dddd [u] LT';\n }\n },\n lastDay: '[juče u] LT',\n lastWeek: function () {\n var lastWeekDays = [\n '[prošle] [nedelje] [u] LT',\n '[prošlog] [ponedeljka] [u] LT',\n '[prošlog] [utorka] [u] LT',\n '[prošle] [srede] [u] LT',\n '[prošlog] [četvrtka] [u] LT',\n '[prošlog] [petka] [u] LT',\n '[prošle] [subote] [u] LT',\n ];\n return lastWeekDays[this.day()];\n },\n sameElse: 'L',\n },\n relativeTime: {\n future: 'za %s',\n past: 'pre %s',\n s: 'nekoliko sekundi',\n ss: translator.translate,\n m: translator.translate,\n mm: translator.translate,\n h: translator.translate,\n hh: translator.translate,\n d: translator.translate,\n dd: translator.translate,\n M: translator.translate,\n MM: translator.translate,\n y: translator.translate,\n yy: translator.translate,\n },\n dayOfMonthOrdinalParse: /\\d{1,2}\\./,\n ordinal: '%d.',\n week: {\n dow: 1, // Monday is the first day of the week.\n doy: 7, // The week that contains Jan 7th is the first week of the year.\n },\n });\n\n return sr;\n\n})));\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNDU3MTkuanMiLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vaXRnLW5leHRnZW4tZnJvbnRlbmQvLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9zci5qcz9jZjFlIl0sInNvdXJjZXNDb250ZW50IjpbIi8vISBtb21lbnQuanMgbG9jYWxlIGNvbmZpZ3VyYXRpb25cbi8vISBsb2NhbGUgOiBTZXJiaWFuIFtzcl1cbi8vISBhdXRob3IgOiBNaWxhbiBKYW5hxI1rb3ZpxIc8bWlsYW5qYW5hY2tvdmljQGdtYWlsLmNvbT4gOiBodHRwczovL2dpdGh1Yi5jb20vbWlsYW4talxuLy8hIGF1dGhvciA6IFN0ZWZhbiBDcm5qYWtvdmnEhyA8c3RlZmFuQGhvdG1haWwucnM+IDogaHR0cHM6Ly9naXRodWIuY29tL2Nybmpha292aWNcblxuOyhmdW5jdGlvbiAoZ2xvYmFsLCBmYWN0b3J5KSB7XG4gICB0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcgJiYgdHlwZW9mIG1vZHVsZSAhPT0gJ3VuZGVmaW5lZCdcbiAgICAgICAmJiB0eXBlb2YgcmVxdWlyZSA9PT0gJ2Z1bmN0aW9uJyA/IGZhY3RvcnkocmVxdWlyZSgnLi4vbW9tZW50JykpIDpcbiAgIHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgZGVmaW5lLmFtZCA/IGRlZmluZShbJy4uL21vbWVudCddLCBmYWN0b3J5KSA6XG4gICBmYWN0b3J5KGdsb2JhbC5tb21lbnQpXG59KHRoaXMsIChmdW5jdGlvbiAobW9tZW50KSB7ICd1c2Ugc3RyaWN0JztcblxuICAgIC8vISBtb21lbnQuanMgbG9jYWxlIGNvbmZpZ3VyYXRpb25cblxuICAgIHZhciB0cmFuc2xhdG9yID0ge1xuICAgICAgICB3b3Jkczoge1xuICAgICAgICAgICAgLy9EaWZmZXJlbnQgZ3JhbW1hdGljYWwgY2FzZXNcbiAgICAgICAgICAgIHNzOiBbJ3Nla3VuZGEnLCAnc2VrdW5kZScsICdzZWt1bmRpJ10sXG4gICAgICAgICAgICBtOiBbJ2plZGFuIG1pbnV0JywgJ2plZG5vZyBtaW51dGEnXSxcbiAgICAgICAgICAgIG1tOiBbJ21pbnV0JywgJ21pbnV0YScsICdtaW51dGEnXSxcbiAgICAgICAgICAgIGg6IFsnamVkYW4gc2F0JywgJ2plZG5vZyBzYXRhJ10sXG4gICAgICAgICAgICBoaDogWydzYXQnLCAnc2F0YScsICdzYXRpJ10sXG4gICAgICAgICAgICBkOiBbJ2plZGFuIGRhbicsICdqZWRub2cgZGFuYSddLFxuICAgICAgICAgICAgZGQ6IFsnZGFuJywgJ2RhbmEnLCAnZGFuYSddLFxuICAgICAgICAgICAgTTogWydqZWRhbiBtZXNlYycsICdqZWRub2cgbWVzZWNhJ10sXG4gICAgICAgICAgICBNTTogWydtZXNlYycsICdtZXNlY2EnLCAnbWVzZWNpJ10sXG4gICAgICAgICAgICB5OiBbJ2plZG51IGdvZGludScsICdqZWRuZSBnb2RpbmUnXSxcbiAgICAgICAgICAgIHl5OiBbJ2dvZGludScsICdnb2RpbmUnLCAnZ29kaW5hJ10sXG4gICAgICAgIH0sXG4gICAgICAgIGNvcnJlY3RHcmFtbWF0aWNhbENhc2U6IGZ1bmN0aW9uIChudW1iZXIsIHdvcmRLZXkpIHtcbiAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICBudW1iZXIgJSAxMCA+PSAxICYmXG4gICAgICAgICAgICAgICAgbnVtYmVyICUgMTAgPD0gNCAmJlxuICAgICAgICAgICAgICAgIChudW1iZXIgJSAxMDAgPCAxMCB8fCBudW1iZXIgJSAxMDAgPj0gMjApXG4gICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gbnVtYmVyICUgMTAgPT09IDEgPyB3b3JkS2V5WzBdIDogd29yZEtleVsxXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiB3b3JkS2V5WzJdO1xuICAgICAgICB9LFxuICAgICAgICB0cmFuc2xhdGU6IGZ1bmN0aW9uIChudW1iZXIsIHdpdGhvdXRTdWZmaXgsIGtleSwgaXNGdXR1cmUpIHtcbiAgICAgICAgICAgIHZhciB3b3JkS2V5ID0gdHJhbnNsYXRvci53b3Jkc1trZXldLFxuICAgICAgICAgICAgICAgIHdvcmQ7XG5cbiAgICAgICAgICAgIGlmIChrZXkubGVuZ3RoID09PSAxKSB7XG4gICAgICAgICAgICAgICAgLy8gTm9taW5hdGl2XG4gICAgICAgICAgICAgICAgaWYgKGtleSA9PT0gJ3knICYmIHdpdGhvdXRTdWZmaXgpIHJldHVybiAnamVkbmEgZ29kaW5hJztcbiAgICAgICAgICAgICAgICByZXR1cm4gaXNGdXR1cmUgfHwgd2l0aG91dFN1ZmZpeCA/IHdvcmRLZXlbMF0gOiB3b3JkS2V5WzFdO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB3b3JkID0gdHJhbnNsYXRvci5jb3JyZWN0R3JhbW1hdGljYWxDYXNlKG51bWJlciwgd29yZEtleSk7XG4gICAgICAgICAgICAvLyBOb21pbmF0aXZcbiAgICAgICAgICAgIGlmIChrZXkgPT09ICd5eScgJiYgd2l0aG91dFN1ZmZpeCAmJiB3b3JkID09PSAnZ29kaW51Jykge1xuICAgICAgICAgICAgICAgIHJldHVybiBudW1iZXIgKyAnIGdvZGluYSc7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHJldHVybiBudW1iZXIgKyAnICcgKyB3b3JkO1xuICAgICAgICB9LFxuICAgIH07XG5cbiAgICB2YXIgc3IgPSBtb21lbnQuZGVmaW5lTG9jYWxlKCdzcicsIHtcbiAgICAgICAgbW9udGhzOiAnamFudWFyX2ZlYnJ1YXJfbWFydF9hcHJpbF9tYWpfanVuX2p1bF9hdmd1c3Rfc2VwdGVtYmFyX29rdG9iYXJfbm92ZW1iYXJfZGVjZW1iYXInLnNwbGl0KFxuICAgICAgICAgICAgJ18nXG4gICAgICAgICksXG4gICAgICAgIG1vbnRoc1Nob3J0OlxuICAgICAgICAgICAgJ2phbi5fZmViLl9tYXIuX2Fwci5fbWFqX2p1bl9qdWxfYXZnLl9zZXAuX29rdC5fbm92Ll9kZWMuJy5zcGxpdCgnXycpLFxuICAgICAgICBtb250aHNQYXJzZUV4YWN0OiB0cnVlLFxuICAgICAgICB3ZWVrZGF5czogJ25lZGVsamFfcG9uZWRlbGpha191dG9yYWtfc3JlZGFfxI1ldHZydGFrX3BldGFrX3N1Ym90YScuc3BsaXQoXG4gICAgICAgICAgICAnXydcbiAgICAgICAgKSxcbiAgICAgICAgd2Vla2RheXNTaG9ydDogJ25lZC5fcG9uLl91dG8uX3NyZS5fxI1ldC5fcGV0Ll9zdWIuJy5zcGxpdCgnXycpLFxuICAgICAgICB3ZWVrZGF5c01pbjogJ25lX3BvX3V0X3NyX8SNZV9wZV9zdScuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXNQYXJzZUV4YWN0OiB0cnVlLFxuICAgICAgICBsb25nRGF0ZUZvcm1hdDoge1xuICAgICAgICAgICAgTFQ6ICdIOm1tJyxcbiAgICAgICAgICAgIExUUzogJ0g6bW06c3MnLFxuICAgICAgICAgICAgTDogJ0QuIE0uIFlZWVkuJyxcbiAgICAgICAgICAgIExMOiAnRC4gTU1NTSBZWVlZLicsXG4gICAgICAgICAgICBMTEw6ICdELiBNTU1NIFlZWVkuIEg6bW0nLFxuICAgICAgICAgICAgTExMTDogJ2RkZGQsIEQuIE1NTU0gWVlZWS4gSDptbScsXG4gICAgICAgIH0sXG4gICAgICAgIGNhbGVuZGFyOiB7XG4gICAgICAgICAgICBzYW1lRGF5OiAnW2RhbmFzIHVdIExUJyxcbiAgICAgICAgICAgIG5leHREYXk6ICdbc3V0cmEgdV0gTFQnLFxuICAgICAgICAgICAgbmV4dFdlZWs6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICBzd2l0Y2ggKHRoaXMuZGF5KCkpIHtcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAwOlxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICdbdV0gW25lZGVsanVdIFt1XSBMVCc7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgMzpcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAnW3VdIFtzcmVkdV0gW3VdIExUJztcbiAgICAgICAgICAgICAgICAgICAgY2FzZSA2OlxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICdbdV0gW3N1Ym90dV0gW3VdIExUJztcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAxOlxuICAgICAgICAgICAgICAgICAgICBjYXNlIDI6XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgNDpcbiAgICAgICAgICAgICAgICAgICAgY2FzZSA1OlxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICdbdV0gZGRkZCBbdV0gTFQnO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBsYXN0RGF5OiAnW2p1xI1lIHVdIExUJyxcbiAgICAgICAgICAgIGxhc3RXZWVrOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgdmFyIGxhc3RXZWVrRGF5cyA9IFtcbiAgICAgICAgICAgICAgICAgICAgJ1twcm/FoWxlXSBbbmVkZWxqZV0gW3VdIExUJyxcbiAgICAgICAgICAgICAgICAgICAgJ1twcm/FoWxvZ10gW3BvbmVkZWxqa2FdIFt1XSBMVCcsXG4gICAgICAgICAgICAgICAgICAgICdbcHJvxaFsb2ddIFt1dG9ya2FdIFt1XSBMVCcsXG4gICAgICAgICAgICAgICAgICAgICdbcHJvxaFsZV0gW3NyZWRlXSBbdV0gTFQnLFxuICAgICAgICAgICAgICAgICAgICAnW3Byb8WhbG9nXSBbxI1ldHZydGthXSBbdV0gTFQnLFxuICAgICAgICAgICAgICAgICAgICAnW3Byb8WhbG9nXSBbcGV0a2FdIFt1XSBMVCcsXG4gICAgICAgICAgICAgICAgICAgICdbcHJvxaFsZV0gW3N1Ym90ZV0gW3VdIExUJyxcbiAgICAgICAgICAgICAgICBdO1xuICAgICAgICAgICAgICAgIHJldHVybiBsYXN0V2Vla0RheXNbdGhpcy5kYXkoKV07XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgc2FtZUVsc2U6ICdMJyxcbiAgICAgICAgfSxcbiAgICAgICAgcmVsYXRpdmVUaW1lOiB7XG4gICAgICAgICAgICBmdXR1cmU6ICd6YSAlcycsXG4gICAgICAgICAgICBwYXN0OiAncHJlICVzJyxcbiAgICAgICAgICAgIHM6ICduZWtvbGlrbyBzZWt1bmRpJyxcbiAgICAgICAgICAgIHNzOiB0cmFuc2xhdG9yLnRyYW5zbGF0ZSxcbiAgICAgICAgICAgIG06IHRyYW5zbGF0b3IudHJhbnNsYXRlLFxuICAgICAgICAgICAgbW06IHRyYW5zbGF0b3IudHJhbnNsYXRlLFxuICAgICAgICAgICAgaDogdHJhbnNsYXRvci50cmFuc2xhdGUsXG4gICAgICAgICAgICBoaDogdHJhbnNsYXRvci50cmFuc2xhdGUsXG4gICAgICAgICAgICBkOiB0cmFuc2xhdG9yLnRyYW5zbGF0ZSxcbiAgICAgICAgICAgIGRkOiB0cmFuc2xhdG9yLnRyYW5zbGF0ZSxcbiAgICAgICAgICAgIE06IHRyYW5zbGF0b3IudHJhbnNsYXRlLFxuICAgICAgICAgICAgTU06IHRyYW5zbGF0b3IudHJhbnNsYXRlLFxuICAgICAgICAgICAgeTogdHJhbnNsYXRvci50cmFuc2xhdGUsXG4gICAgICAgICAgICB5eTogdHJhbnNsYXRvci50cmFuc2xhdGUsXG4gICAgICAgIH0sXG4gICAgICAgIGRheU9mTW9udGhPcmRpbmFsUGFyc2U6IC9cXGR7MSwyfVxcLi8sXG4gICAgICAgIG9yZGluYWw6ICclZC4nLFxuICAgICAgICB3ZWVrOiB7XG4gICAgICAgICAgICBkb3c6IDEsIC8vIE1vbmRheSBpcyB0aGUgZmlyc3QgZGF5IG9mIHRoZSB3ZWVrLlxuICAgICAgICAgICAgZG95OiA3LCAvLyBUaGUgd2VlayB0aGF0IGNvbnRhaW5zIEphbiA3dGggaXMgdGhlIGZpcnN0IHdlZWsgb2YgdGhlIHllYXIuXG4gICAgICAgIH0sXG4gICAgfSk7XG5cbiAgICByZXR1cm4gc3I7XG5cbn0pKSk7XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///45719\n")},45766:function(__unused_webpack_module,__unused_webpack_exports,__webpack_require__){eval("//! moment.js locale configuration\n//! locale : Lithuanian [lt]\n//! author : Mindaugas Mozūras : https://github.com/mmozuras\n\n;(function (global, factory) {\n true ? factory(__webpack_require__(95093)) :\n 0\n}(this, (function (moment) { 'use strict';\n\n //! moment.js locale configuration\n\n var units = {\n ss: 'sekundė_sekundžių_sekundes',\n m: 'minutė_minutės_minutę',\n mm: 'minutės_minučių_minutes',\n h: 'valanda_valandos_valandą',\n hh: 'valandos_valandų_valandas',\n d: 'diena_dienos_dieną',\n dd: 'dienos_dienų_dienas',\n M: 'mėnuo_mėnesio_mėnesį',\n MM: 'mėnesiai_mėnesių_mėnesius',\n y: 'metai_metų_metus',\n yy: 'metai_metų_metus',\n };\n function translateSeconds(number, withoutSuffix, key, isFuture) {\n if (withoutSuffix) {\n return 'kelios sekundės';\n } else {\n return isFuture ? 'kelių sekundžių' : 'kelias sekundes';\n }\n }\n function translateSingular(number, withoutSuffix, key, isFuture) {\n return withoutSuffix\n ? forms(key)[0]\n : isFuture\n ? forms(key)[1]\n : forms(key)[2];\n }\n function special(number) {\n return number % 10 === 0 || (number > 10 && number < 20);\n }\n function forms(key) {\n return units[key].split('_');\n }\n function translate(number, withoutSuffix, key, isFuture) {\n var result = number + ' ';\n if (number === 1) {\n return (\n result + translateSingular(number, withoutSuffix, key[0], isFuture)\n );\n } else if (withoutSuffix) {\n return result + (special(number) ? forms(key)[1] : forms(key)[0]);\n } else {\n if (isFuture) {\n return result + forms(key)[1];\n } else {\n return result + (special(number) ? forms(key)[1] : forms(key)[2]);\n }\n }\n }\n var lt = moment.defineLocale('lt', {\n months: {\n format: 'sausio_vasario_kovo_balandžio_gegužės_birželio_liepos_rugpjūčio_rugsėjo_spalio_lapkričio_gruodžio'.split(\n '_'\n ),\n standalone:\n 'sausis_vasaris_kovas_balandis_gegužė_birželis_liepa_rugpjūtis_rugsėjis_spalis_lapkritis_gruodis'.split(\n '_'\n ),\n isFormat: /D[oD]?(\\[[^\\[\\]]*\\]|\\s)+MMMM?|MMMM?(\\[[^\\[\\]]*\\]|\\s)+D[oD]?/,\n },\n monthsShort: 'sau_vas_kov_bal_geg_bir_lie_rgp_rgs_spa_lap_grd'.split('_'),\n weekdays: {\n format: 'sekmadienį_pirmadienį_antradienį_trečiadienį_ketvirtadienį_penktadienį_šeštadienį'.split(\n '_'\n ),\n standalone:\n 'sekmadienis_pirmadienis_antradienis_trečiadienis_ketvirtadienis_penktadienis_šeštadienis'.split(\n '_'\n ),\n isFormat: /dddd HH:mm/,\n },\n weekdaysShort: 'Sek_Pir_Ant_Tre_Ket_Pen_Šeš'.split('_'),\n weekdaysMin: 'S_P_A_T_K_Pn_Š'.split('_'),\n weekdaysParseExact: true,\n longDateFormat: {\n LT: 'HH:mm',\n LTS: 'HH:mm:ss',\n L: 'YYYY-MM-DD',\n LL: 'YYYY [m.] MMMM D [d.]',\n LLL: 'YYYY [m.] MMMM D [d.], HH:mm [val.]',\n LLLL: 'YYYY [m.] MMMM D [d.], dddd, HH:mm [val.]',\n l: 'YYYY-MM-DD',\n ll: 'YYYY [m.] MMMM D [d.]',\n lll: 'YYYY [m.] MMMM D [d.], HH:mm [val.]',\n llll: 'YYYY [m.] MMMM D [d.], ddd, HH:mm [val.]',\n },\n calendar: {\n sameDay: '[Šiandien] LT',\n nextDay: '[Rytoj] LT',\n nextWeek: 'dddd LT',\n lastDay: '[Vakar] LT',\n lastWeek: '[Praėjusį] dddd LT',\n sameElse: 'L',\n },\n relativeTime: {\n future: 'po %s',\n past: 'prieš %s',\n s: translateSeconds,\n ss: translate,\n m: translateSingular,\n mm: translate,\n h: translateSingular,\n hh: translate,\n d: translateSingular,\n dd: translate,\n M: translateSingular,\n MM: translate,\n y: translateSingular,\n yy: translate,\n },\n dayOfMonthOrdinalParse: /\\d{1,2}-oji/,\n ordinal: function (number) {\n return number + '-oji';\n },\n week: {\n dow: 1, // Monday is the first day of the week.\n doy: 4, // The week that contains Jan 4th is the first week of the year.\n },\n });\n\n return lt;\n\n})));\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNDU3NjYuanMiLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL2l0Zy1uZXh0Z2VuLWZyb250ZW5kLy4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvbHQuanM/MjZmOSJdLCJzb3VyY2VzQ29udGVudCI6WyIvLyEgbW9tZW50LmpzIGxvY2FsZSBjb25maWd1cmF0aW9uXG4vLyEgbG9jYWxlIDogTGl0aHVhbmlhbiBbbHRdXG4vLyEgYXV0aG9yIDogTWluZGF1Z2FzIE1vesWrcmFzIDogaHR0cHM6Ly9naXRodWIuY29tL21tb3p1cmFzXG5cbjsoZnVuY3Rpb24gKGdsb2JhbCwgZmFjdG9yeSkge1xuICAgdHlwZW9mIGV4cG9ydHMgPT09ICdvYmplY3QnICYmIHR5cGVvZiBtb2R1bGUgIT09ICd1bmRlZmluZWQnXG4gICAgICAgJiYgdHlwZW9mIHJlcXVpcmUgPT09ICdmdW5jdGlvbicgPyBmYWN0b3J5KHJlcXVpcmUoJy4uL21vbWVudCcpKSA6XG4gICB0eXBlb2YgZGVmaW5lID09PSAnZnVuY3Rpb24nICYmIGRlZmluZS5hbWQgPyBkZWZpbmUoWycuLi9tb21lbnQnXSwgZmFjdG9yeSkgOlxuICAgZmFjdG9yeShnbG9iYWwubW9tZW50KVxufSh0aGlzLCAoZnVuY3Rpb24gKG1vbWVudCkgeyAndXNlIHN0cmljdCc7XG5cbiAgICAvLyEgbW9tZW50LmpzIGxvY2FsZSBjb25maWd1cmF0aW9uXG5cbiAgICB2YXIgdW5pdHMgPSB7XG4gICAgICAgIHNzOiAnc2VrdW5kxJdfc2VrdW5kxb5pxbNfc2VrdW5kZXMnLFxuICAgICAgICBtOiAnbWludXTEl19taW51dMSXc19taW51dMSZJyxcbiAgICAgICAgbW06ICdtaW51dMSXc19taW51xI1pxbNfbWludXRlcycsXG4gICAgICAgIGg6ICd2YWxhbmRhX3ZhbGFuZG9zX3ZhbGFuZMSFJyxcbiAgICAgICAgaGg6ICd2YWxhbmRvc192YWxhbmTFs192YWxhbmRhcycsXG4gICAgICAgIGQ6ICdkaWVuYV9kaWVub3NfZGllbsSFJyxcbiAgICAgICAgZGQ6ICdkaWVub3NfZGllbsWzX2RpZW5hcycsXG4gICAgICAgIE06ICdtxJdudW9fbcSXbmVzaW9fbcSXbmVzxK8nLFxuICAgICAgICBNTTogJ23El25lc2lhaV9txJduZXNpxbNfbcSXbmVzaXVzJyxcbiAgICAgICAgeTogJ21ldGFpX21ldMWzX21ldHVzJyxcbiAgICAgICAgeXk6ICdtZXRhaV9tZXTFs19tZXR1cycsXG4gICAgfTtcbiAgICBmdW5jdGlvbiB0cmFuc2xhdGVTZWNvbmRzKG51bWJlciwgd2l0aG91dFN1ZmZpeCwga2V5LCBpc0Z1dHVyZSkge1xuICAgICAgICBpZiAod2l0aG91dFN1ZmZpeCkge1xuICAgICAgICAgICAgcmV0dXJuICdrZWxpb3Mgc2VrdW5kxJdzJztcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBpc0Z1dHVyZSA/ICdrZWxpxbMgc2VrdW5kxb5pxbMnIDogJ2tlbGlhcyBzZWt1bmRlcyc7XG4gICAgICAgIH1cbiAgICB9XG4gICAgZnVuY3Rpb24gdHJhbnNsYXRlU2luZ3VsYXIobnVtYmVyLCB3aXRob3V0U3VmZml4LCBrZXksIGlzRnV0dXJlKSB7XG4gICAgICAgIHJldHVybiB3aXRob3V0U3VmZml4XG4gICAgICAgICAgICA/IGZvcm1zKGtleSlbMF1cbiAgICAgICAgICAgIDogaXNGdXR1cmVcbiAgICAgICAgICAgICAgPyBmb3JtcyhrZXkpWzFdXG4gICAgICAgICAgICAgIDogZm9ybXMoa2V5KVsyXTtcbiAgICB9XG4gICAgZnVuY3Rpb24gc3BlY2lhbChudW1iZXIpIHtcbiAgICAgICAgcmV0dXJuIG51bWJlciAlIDEwID09PSAwIHx8IChudW1iZXIgPiAxMCAmJiBudW1iZXIgPCAyMCk7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGZvcm1zKGtleSkge1xuICAgICAgICByZXR1cm4gdW5pdHNba2V5XS5zcGxpdCgnXycpO1xuICAgIH1cbiAgICBmdW5jdGlvbiB0cmFuc2xhdGUobnVtYmVyLCB3aXRob3V0U3VmZml4LCBrZXksIGlzRnV0dXJlKSB7XG4gICAgICAgIHZhciByZXN1bHQgPSBudW1iZXIgKyAnICc7XG4gICAgICAgIGlmIChudW1iZXIgPT09IDEpIHtcbiAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgICAgcmVzdWx0ICsgdHJhbnNsYXRlU2luZ3VsYXIobnVtYmVyLCB3aXRob3V0U3VmZml4LCBrZXlbMF0sIGlzRnV0dXJlKVxuICAgICAgICAgICAgKTtcbiAgICAgICAgfSBlbHNlIGlmICh3aXRob3V0U3VmZml4KSB7XG4gICAgICAgICAgICByZXR1cm4gcmVzdWx0ICsgKHNwZWNpYWwobnVtYmVyKSA/IGZvcm1zKGtleSlbMV0gOiBmb3JtcyhrZXkpWzBdKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGlmIChpc0Z1dHVyZSkge1xuICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQgKyBmb3JtcyhrZXkpWzFdO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0ICsgKHNwZWNpYWwobnVtYmVyKSA/IGZvcm1zKGtleSlbMV0gOiBmb3JtcyhrZXkpWzJdKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbiAgICB2YXIgbHQgPSBtb21lbnQuZGVmaW5lTG9jYWxlKCdsdCcsIHtcbiAgICAgICAgbW9udGhzOiB7XG4gICAgICAgICAgICBmb3JtYXQ6ICdzYXVzaW9fdmFzYXJpb19rb3ZvX2JhbGFuZMW+aW9fZ2VndcW+xJdzX2JpcsW+ZWxpb19saWVwb3NfcnVncGrFq8SNaW9fcnVnc8SXam9fc3BhbGlvX2xhcGtyacSNaW9fZ3J1b2TFvmlvJy5zcGxpdChcbiAgICAgICAgICAgICAgICAnXydcbiAgICAgICAgICAgICksXG4gICAgICAgICAgICBzdGFuZGFsb25lOlxuICAgICAgICAgICAgICAgICdzYXVzaXNfdmFzYXJpc19rb3Zhc19iYWxhbmRpc19nZWd1xb7El19iaXLFvmVsaXNfbGllcGFfcnVncGrFq3Rpc19ydWdzxJdqaXNfc3BhbGlzX2xhcGtyaXRpc19ncnVvZGlzJy5zcGxpdChcbiAgICAgICAgICAgICAgICAgICAgJ18nXG4gICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgIGlzRm9ybWF0OiAvRFtvRF0/KFxcW1teXFxbXFxdXSpcXF18XFxzKStNTU1NP3xNTU1NPyhcXFtbXlxcW1xcXV0qXFxdfFxccykrRFtvRF0/LyxcbiAgICAgICAgfSxcbiAgICAgICAgbW9udGhzU2hvcnQ6ICdzYXVfdmFzX2tvdl9iYWxfZ2VnX2Jpcl9saWVfcmdwX3Jnc19zcGFfbGFwX2dyZCcuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXM6IHtcbiAgICAgICAgICAgIGZvcm1hdDogJ3Nla21hZGllbsSvX3Bpcm1hZGllbsSvX2FudHJhZGllbsSvX3RyZcSNaWFkaWVuxK9fa2V0dmlydGFkaWVuxK9fcGVua3RhZGllbsSvX8WhZcWhdGFkaWVuxK8nLnNwbGl0KFxuICAgICAgICAgICAgICAgICdfJ1xuICAgICAgICAgICAgKSxcbiAgICAgICAgICAgIHN0YW5kYWxvbmU6XG4gICAgICAgICAgICAgICAgJ3Nla21hZGllbmlzX3Bpcm1hZGllbmlzX2FudHJhZGllbmlzX3RyZcSNaWFkaWVuaXNfa2V0dmlydGFkaWVuaXNfcGVua3RhZGllbmlzX8WhZcWhdGFkaWVuaXMnLnNwbGl0KFxuICAgICAgICAgICAgICAgICAgICAnXydcbiAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgaXNGb3JtYXQ6IC9kZGRkIEhIOm1tLyxcbiAgICAgICAgfSxcbiAgICAgICAgd2Vla2RheXNTaG9ydDogJ1Nla19QaXJfQW50X1RyZV9LZXRfUGVuX8WgZcWhJy5zcGxpdCgnXycpLFxuICAgICAgICB3ZWVrZGF5c01pbjogJ1NfUF9BX1RfS19Qbl/FoCcuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXNQYXJzZUV4YWN0OiB0cnVlLFxuICAgICAgICBsb25nRGF0ZUZvcm1hdDoge1xuICAgICAgICAgICAgTFQ6ICdISDptbScsXG4gICAgICAgICAgICBMVFM6ICdISDptbTpzcycsXG4gICAgICAgICAgICBMOiAnWVlZWS1NTS1ERCcsXG4gICAgICAgICAgICBMTDogJ1lZWVkgW20uXSBNTU1NIEQgW2QuXScsXG4gICAgICAgICAgICBMTEw6ICdZWVlZIFttLl0gTU1NTSBEIFtkLl0sIEhIOm1tIFt2YWwuXScsXG4gICAgICAgICAgICBMTExMOiAnWVlZWSBbbS5dIE1NTU0gRCBbZC5dLCBkZGRkLCBISDptbSBbdmFsLl0nLFxuICAgICAgICAgICAgbDogJ1lZWVktTU0tREQnLFxuICAgICAgICAgICAgbGw6ICdZWVlZIFttLl0gTU1NTSBEIFtkLl0nLFxuICAgICAgICAgICAgbGxsOiAnWVlZWSBbbS5dIE1NTU0gRCBbZC5dLCBISDptbSBbdmFsLl0nLFxuICAgICAgICAgICAgbGxsbDogJ1lZWVkgW20uXSBNTU1NIEQgW2QuXSwgZGRkLCBISDptbSBbdmFsLl0nLFxuICAgICAgICB9LFxuICAgICAgICBjYWxlbmRhcjoge1xuICAgICAgICAgICAgc2FtZURheTogJ1vFoGlhbmRpZW5dIExUJyxcbiAgICAgICAgICAgIG5leHREYXk6ICdbUnl0b2pdIExUJyxcbiAgICAgICAgICAgIG5leHRXZWVrOiAnZGRkZCBMVCcsXG4gICAgICAgICAgICBsYXN0RGF5OiAnW1Zha2FyXSBMVCcsXG4gICAgICAgICAgICBsYXN0V2VlazogJ1tQcmHEl2p1c8SvXSBkZGRkIExUJyxcbiAgICAgICAgICAgIHNhbWVFbHNlOiAnTCcsXG4gICAgICAgIH0sXG4gICAgICAgIHJlbGF0aXZlVGltZToge1xuICAgICAgICAgICAgZnV0dXJlOiAncG8gJXMnLFxuICAgICAgICAgICAgcGFzdDogJ3ByaWXFoSAlcycsXG4gICAgICAgICAgICBzOiB0cmFuc2xhdGVTZWNvbmRzLFxuICAgICAgICAgICAgc3M6IHRyYW5zbGF0ZSxcbiAgICAgICAgICAgIG06IHRyYW5zbGF0ZVNpbmd1bGFyLFxuICAgICAgICAgICAgbW06IHRyYW5zbGF0ZSxcbiAgICAgICAgICAgIGg6IHRyYW5zbGF0ZVNpbmd1bGFyLFxuICAgICAgICAgICAgaGg6IHRyYW5zbGF0ZSxcbiAgICAgICAgICAgIGQ6IHRyYW5zbGF0ZVNpbmd1bGFyLFxuICAgICAgICAgICAgZGQ6IHRyYW5zbGF0ZSxcbiAgICAgICAgICAgIE06IHRyYW5zbGF0ZVNpbmd1bGFyLFxuICAgICAgICAgICAgTU06IHRyYW5zbGF0ZSxcbiAgICAgICAgICAgIHk6IHRyYW5zbGF0ZVNpbmd1bGFyLFxuICAgICAgICAgICAgeXk6IHRyYW5zbGF0ZSxcbiAgICAgICAgfSxcbiAgICAgICAgZGF5T2ZNb250aE9yZGluYWxQYXJzZTogL1xcZHsxLDJ9LW9qaS8sXG4gICAgICAgIG9yZGluYWw6IGZ1bmN0aW9uIChudW1iZXIpIHtcbiAgICAgICAgICAgIHJldHVybiBudW1iZXIgKyAnLW9qaSc7XG4gICAgICAgIH0sXG4gICAgICAgIHdlZWs6IHtcbiAgICAgICAgICAgIGRvdzogMSwgLy8gTW9uZGF5IGlzIHRoZSBmaXJzdCBkYXkgb2YgdGhlIHdlZWsuXG4gICAgICAgICAgICBkb3k6IDQsIC8vIFRoZSB3ZWVrIHRoYXQgY29udGFpbnMgSmFuIDR0aCBpcyB0aGUgZmlyc3Qgd2VlayBvZiB0aGUgeWVhci5cbiAgICAgICAgfSxcbiAgICB9KTtcblxuICAgIHJldHVybiBsdDtcblxufSkpKTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///45766\n")},45951:(I,g,t)=>{"use strict";I.exports=t.p+"42fcd391d2cdc902113a.png"},45953:function(module,exports,__webpack_require__){eval(";(function (root, factory, undef) {\n\tif (true) {\n\t\t// CommonJS\n\t\tmodule.exports = exports = factory(__webpack_require__(19021), __webpack_require__(43240));\n\t}\n\telse {}\n}(this, function (CryptoJS) {\n\n\t(function (Math) {\n\t // Shortcuts\n\t var C = CryptoJS;\n\t var C_lib = C.lib;\n\t var WordArray = C_lib.WordArray;\n\t var Hasher = C_lib.Hasher;\n\t var C_x64 = C.x64;\n\t var X64Word = C_x64.Word;\n\t var C_algo = C.algo;\n\n\t // Constants tables\n\t var RHO_OFFSETS = [];\n\t var PI_INDEXES = [];\n\t var ROUND_CONSTANTS = [];\n\n\t // Compute Constants\n\t (function () {\n\t // Compute rho offset constants\n\t var x = 1, y = 0;\n\t for (var t = 0; t < 24; t++) {\n\t RHO_OFFSETS[x + 5 * y] = ((t + 1) * (t + 2) / 2) % 64;\n\n\t var newX = y % 5;\n\t var newY = (2 * x + 3 * y) % 5;\n\t x = newX;\n\t y = newY;\n\t }\n\n\t // Compute pi index constants\n\t for (var x = 0; x < 5; x++) {\n\t for (var y = 0; y < 5; y++) {\n\t PI_INDEXES[x + 5 * y] = y + ((2 * x + 3 * y) % 5) * 5;\n\t }\n\t }\n\n\t // Compute round constants\n\t var LFSR = 0x01;\n\t for (var i = 0; i < 24; i++) {\n\t var roundConstantMsw = 0;\n\t var roundConstantLsw = 0;\n\n\t for (var j = 0; j < 7; j++) {\n\t if (LFSR & 0x01) {\n\t var bitPosition = (1 << j) - 1;\n\t if (bitPosition < 32) {\n\t roundConstantLsw ^= 1 << bitPosition;\n\t } else /* if (bitPosition >= 32) */ {\n\t roundConstantMsw ^= 1 << (bitPosition - 32);\n\t }\n\t }\n\n\t // Compute next LFSR\n\t if (LFSR & 0x80) {\n\t // Primitive polynomial over GF(2): x^8 + x^6 + x^5 + x^4 + 1\n\t LFSR = (LFSR << 1) ^ 0x71;\n\t } else {\n\t LFSR <<= 1;\n\t }\n\t }\n\n\t ROUND_CONSTANTS[i] = X64Word.create(roundConstantMsw, roundConstantLsw);\n\t }\n\t }());\n\n\t // Reusable objects for temporary values\n\t var T = [];\n\t (function () {\n\t for (var i = 0; i < 25; i++) {\n\t T[i] = X64Word.create();\n\t }\n\t }());\n\n\t /**\n\t * SHA-3 hash algorithm.\n\t */\n\t var SHA3 = C_algo.SHA3 = Hasher.extend({\n\t /**\n\t * Configuration options.\n\t *\n\t * @property {number} outputLength\n\t * The desired number of bits in the output hash.\n\t * Only values permitted are: 224, 256, 384, 512.\n\t * Default: 512\n\t */\n\t cfg: Hasher.cfg.extend({\n\t outputLength: 512\n\t }),\n\n\t _doReset: function () {\n\t var state = this._state = []\n\t for (var i = 0; i < 25; i++) {\n\t state[i] = new X64Word.init();\n\t }\n\n\t this.blockSize = (1600 - 2 * this.cfg.outputLength) / 32;\n\t },\n\n\t _doProcessBlock: function (M, offset) {\n\t // Shortcuts\n\t var state = this._state;\n\t var nBlockSizeLanes = this.blockSize / 2;\n\n\t // Absorb\n\t for (var i = 0; i < nBlockSizeLanes; i++) {\n\t // Shortcuts\n\t var M2i = M[offset + 2 * i];\n\t var M2i1 = M[offset + 2 * i + 1];\n\n\t // Swap endian\n\t M2i = (\n\t (((M2i << 8) | (M2i >>> 24)) & 0x00ff00ff) |\n\t (((M2i << 24) | (M2i >>> 8)) & 0xff00ff00)\n\t );\n\t M2i1 = (\n\t (((M2i1 << 8) | (M2i1 >>> 24)) & 0x00ff00ff) |\n\t (((M2i1 << 24) | (M2i1 >>> 8)) & 0xff00ff00)\n\t );\n\n\t // Absorb message into state\n\t var lane = state[i];\n\t lane.high ^= M2i1;\n\t lane.low ^= M2i;\n\t }\n\n\t // Rounds\n\t for (var round = 0; round < 24; round++) {\n\t // Theta\n\t for (var x = 0; x < 5; x++) {\n\t // Mix column lanes\n\t var tMsw = 0, tLsw = 0;\n\t for (var y = 0; y < 5; y++) {\n\t var lane = state[x + 5 * y];\n\t tMsw ^= lane.high;\n\t tLsw ^= lane.low;\n\t }\n\n\t // Temporary values\n\t var Tx = T[x];\n\t Tx.high = tMsw;\n\t Tx.low = tLsw;\n\t }\n\t for (var x = 0; x < 5; x++) {\n\t // Shortcuts\n\t var Tx4 = T[(x + 4) % 5];\n\t var Tx1 = T[(x + 1) % 5];\n\t var Tx1Msw = Tx1.high;\n\t var Tx1Lsw = Tx1.low;\n\n\t // Mix surrounding columns\n\t var tMsw = Tx4.high ^ ((Tx1Msw << 1) | (Tx1Lsw >>> 31));\n\t var tLsw = Tx4.low ^ ((Tx1Lsw << 1) | (Tx1Msw >>> 31));\n\t for (var y = 0; y < 5; y++) {\n\t var lane = state[x + 5 * y];\n\t lane.high ^= tMsw;\n\t lane.low ^= tLsw;\n\t }\n\t }\n\n\t // Rho Pi\n\t for (var laneIndex = 1; laneIndex < 25; laneIndex++) {\n\t var tMsw;\n\t var tLsw;\n\n\t // Shortcuts\n\t var lane = state[laneIndex];\n\t var laneMsw = lane.high;\n\t var laneLsw = lane.low;\n\t var rhoOffset = RHO_OFFSETS[laneIndex];\n\n\t // Rotate lanes\n\t if (rhoOffset < 32) {\n\t tMsw = (laneMsw << rhoOffset) | (laneLsw >>> (32 - rhoOffset));\n\t tLsw = (laneLsw << rhoOffset) | (laneMsw >>> (32 - rhoOffset));\n\t } else /* if (rhoOffset >= 32) */ {\n\t tMsw = (laneLsw << (rhoOffset - 32)) | (laneMsw >>> (64 - rhoOffset));\n\t tLsw = (laneMsw << (rhoOffset - 32)) | (laneLsw >>> (64 - rhoOffset));\n\t }\n\n\t // Transpose lanes\n\t var TPiLane = T[PI_INDEXES[laneIndex]];\n\t TPiLane.high = tMsw;\n\t TPiLane.low = tLsw;\n\t }\n\n\t // Rho pi at x = y = 0\n\t var T0 = T[0];\n\t var state0 = state[0];\n\t T0.high = state0.high;\n\t T0.low = state0.low;\n\n\t // Chi\n\t for (var x = 0; x < 5; x++) {\n\t for (var y = 0; y < 5; y++) {\n\t // Shortcuts\n\t var laneIndex = x + 5 * y;\n\t var lane = state[laneIndex];\n\t var TLane = T[laneIndex];\n\t var Tx1Lane = T[((x + 1) % 5) + 5 * y];\n\t var Tx2Lane = T[((x + 2) % 5) + 5 * y];\n\n\t // Mix rows\n\t lane.high = TLane.high ^ (~Tx1Lane.high & Tx2Lane.high);\n\t lane.low = TLane.low ^ (~Tx1Lane.low & Tx2Lane.low);\n\t }\n\t }\n\n\t // Iota\n\t var lane = state[0];\n\t var roundConstant = ROUND_CONSTANTS[round];\n\t lane.high ^= roundConstant.high;\n\t lane.low ^= roundConstant.low;\n\t }\n\t },\n\n\t _doFinalize: function () {\n\t // Shortcuts\n\t var data = this._data;\n\t var dataWords = data.words;\n\t var nBitsTotal = this._nDataBytes * 8;\n\t var nBitsLeft = data.sigBytes * 8;\n\t var blockSizeBits = this.blockSize * 32;\n\n\t // Add padding\n\t dataWords[nBitsLeft >>> 5] |= 0x1 << (24 - nBitsLeft % 32);\n\t dataWords[((Math.ceil((nBitsLeft + 1) / blockSizeBits) * blockSizeBits) >>> 5) - 1] |= 0x80;\n\t data.sigBytes = dataWords.length * 4;\n\n\t // Hash final blocks\n\t this._process();\n\n\t // Shortcuts\n\t var state = this._state;\n\t var outputLengthBytes = this.cfg.outputLength / 8;\n\t var outputLengthLanes = outputLengthBytes / 8;\n\n\t // Squeeze\n\t var hashWords = [];\n\t for (var i = 0; i < outputLengthLanes; i++) {\n\t // Shortcuts\n\t var lane = state[i];\n\t var laneMsw = lane.high;\n\t var laneLsw = lane.low;\n\n\t // Swap endian\n\t laneMsw = (\n\t (((laneMsw << 8) | (laneMsw >>> 24)) & 0x00ff00ff) |\n\t (((laneMsw << 24) | (laneMsw >>> 8)) & 0xff00ff00)\n\t );\n\t laneLsw = (\n\t (((laneLsw << 8) | (laneLsw >>> 24)) & 0x00ff00ff) |\n\t (((laneLsw << 24) | (laneLsw >>> 8)) & 0xff00ff00)\n\t );\n\n\t // Squeeze state to retrieve hash\n\t hashWords.push(laneLsw);\n\t hashWords.push(laneMsw);\n\t }\n\n\t // Return final computed hash\n\t return new WordArray.init(hashWords, outputLengthBytes);\n\t },\n\n\t clone: function () {\n\t var clone = Hasher.clone.call(this);\n\n\t var state = clone._state = this._state.slice(0);\n\t for (var i = 0; i < 25; i++) {\n\t state[i] = state[i].clone();\n\t }\n\n\t return clone;\n\t }\n\t });\n\n\t /**\n\t * Shortcut function to the hasher's object interface.\n\t *\n\t * @param {WordArray|string} message The message to hash.\n\t *\n\t * @return {WordArray} The hash.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var hash = CryptoJS.SHA3('message');\n\t * var hash = CryptoJS.SHA3(wordArray);\n\t */\n\t C.SHA3 = Hasher._createHelper(SHA3);\n\n\t /**\n\t * Shortcut function to the HMAC's object interface.\n\t *\n\t * @param {WordArray|string} message The message to hash.\n\t * @param {WordArray|string} key The secret key.\n\t *\n\t * @return {WordArray} The HMAC.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var hmac = CryptoJS.HmacSHA3(message, key);\n\t */\n\t C.HmacSHA3 = Hasher._createHmacHelper(SHA3);\n\t}(Math));\n\n\n\treturn CryptoJS.SHA3;\n\n}));//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNDU5NTMuanMiLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBUUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9pdGctbmV4dGdlbi1mcm9udGVuZC8uL25vZGVfbW9kdWxlcy9jcnlwdG8tanMvc2hhMy5qcz9lNjFiIl0sInNvdXJjZXNDb250ZW50IjpbIjsoZnVuY3Rpb24gKHJvb3QsIGZhY3RvcnksIHVuZGVmKSB7XG5cdGlmICh0eXBlb2YgZXhwb3J0cyA9PT0gXCJvYmplY3RcIikge1xuXHRcdC8vIENvbW1vbkpTXG5cdFx0bW9kdWxlLmV4cG9ydHMgPSBleHBvcnRzID0gZmFjdG9yeShyZXF1aXJlKFwiLi9jb3JlXCIpLCByZXF1aXJlKFwiLi94NjQtY29yZVwiKSk7XG5cdH1cblx0ZWxzZSBpZiAodHlwZW9mIGRlZmluZSA9PT0gXCJmdW5jdGlvblwiICYmIGRlZmluZS5hbWQpIHtcblx0XHQvLyBBTURcblx0XHRkZWZpbmUoW1wiLi9jb3JlXCIsIFwiLi94NjQtY29yZVwiXSwgZmFjdG9yeSk7XG5cdH1cblx0ZWxzZSB7XG5cdFx0Ly8gR2xvYmFsIChicm93c2VyKVxuXHRcdGZhY3Rvcnkocm9vdC5DcnlwdG9KUyk7XG5cdH1cbn0odGhpcywgZnVuY3Rpb24gKENyeXB0b0pTKSB7XG5cblx0KGZ1bmN0aW9uIChNYXRoKSB7XG5cdCAgICAvLyBTaG9ydGN1dHNcblx0ICAgIHZhciBDID0gQ3J5cHRvSlM7XG5cdCAgICB2YXIgQ19saWIgPSBDLmxpYjtcblx0ICAgIHZhciBXb3JkQXJyYXkgPSBDX2xpYi5Xb3JkQXJyYXk7XG5cdCAgICB2YXIgSGFzaGVyID0gQ19saWIuSGFzaGVyO1xuXHQgICAgdmFyIENfeDY0ID0gQy54NjQ7XG5cdCAgICB2YXIgWDY0V29yZCA9IENfeDY0LldvcmQ7XG5cdCAgICB2YXIgQ19hbGdvID0gQy5hbGdvO1xuXG5cdCAgICAvLyBDb25zdGFudHMgdGFibGVzXG5cdCAgICB2YXIgUkhPX09GRlNFVFMgPSBbXTtcblx0ICAgIHZhciBQSV9JTkRFWEVTICA9IFtdO1xuXHQgICAgdmFyIFJPVU5EX0NPTlNUQU5UUyA9IFtdO1xuXG5cdCAgICAvLyBDb21wdXRlIENvbnN0YW50c1xuXHQgICAgKGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAvLyBDb21wdXRlIHJobyBvZmZzZXQgY29uc3RhbnRzXG5cdCAgICAgICAgdmFyIHggPSAxLCB5ID0gMDtcblx0ICAgICAgICBmb3IgKHZhciB0ID0gMDsgdCA8IDI0OyB0KyspIHtcblx0ICAgICAgICAgICAgUkhPX09GRlNFVFNbeCArIDUgKiB5XSA9ICgodCArIDEpICogKHQgKyAyKSAvIDIpICUgNjQ7XG5cblx0ICAgICAgICAgICAgdmFyIG5ld1ggPSB5ICUgNTtcblx0ICAgICAgICAgICAgdmFyIG5ld1kgPSAoMiAqIHggKyAzICogeSkgJSA1O1xuXHQgICAgICAgICAgICB4ID0gbmV3WDtcblx0ICAgICAgICAgICAgeSA9IG5ld1k7XG5cdCAgICAgICAgfVxuXG5cdCAgICAgICAgLy8gQ29tcHV0ZSBwaSBpbmRleCBjb25zdGFudHNcblx0ICAgICAgICBmb3IgKHZhciB4ID0gMDsgeCA8IDU7IHgrKykge1xuXHQgICAgICAgICAgICBmb3IgKHZhciB5ID0gMDsgeSA8IDU7IHkrKykge1xuXHQgICAgICAgICAgICAgICAgUElfSU5ERVhFU1t4ICsgNSAqIHldID0geSArICgoMiAqIHggKyAzICogeSkgJSA1KSAqIDU7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICB9XG5cblx0ICAgICAgICAvLyBDb21wdXRlIHJvdW5kIGNvbnN0YW50c1xuXHQgICAgICAgIHZhciBMRlNSID0gMHgwMTtcblx0ICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IDI0OyBpKyspIHtcblx0ICAgICAgICAgICAgdmFyIHJvdW5kQ29uc3RhbnRNc3cgPSAwO1xuXHQgICAgICAgICAgICB2YXIgcm91bmRDb25zdGFudExzdyA9IDA7XG5cblx0ICAgICAgICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCA3OyBqKyspIHtcblx0ICAgICAgICAgICAgICAgIGlmIChMRlNSICYgMHgwMSkge1xuXHQgICAgICAgICAgICAgICAgICAgIHZhciBiaXRQb3NpdGlvbiA9ICgxIDw8IGopIC0gMTtcblx0ICAgICAgICAgICAgICAgICAgICBpZiAoYml0UG9zaXRpb24gPCAzMikge1xuXHQgICAgICAgICAgICAgICAgICAgICAgICByb3VuZENvbnN0YW50THN3IF49IDEgPDwgYml0UG9zaXRpb247XG5cdCAgICAgICAgICAgICAgICAgICAgfSBlbHNlIC8qIGlmIChiaXRQb3NpdGlvbiA+PSAzMikgKi8ge1xuXHQgICAgICAgICAgICAgICAgICAgICAgICByb3VuZENvbnN0YW50TXN3IF49IDEgPDwgKGJpdFBvc2l0aW9uIC0gMzIpO1xuXHQgICAgICAgICAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgICAgIH1cblxuXHQgICAgICAgICAgICAgICAgLy8gQ29tcHV0ZSBuZXh0IExGU1Jcblx0ICAgICAgICAgICAgICAgIGlmIChMRlNSICYgMHg4MCkge1xuXHQgICAgICAgICAgICAgICAgICAgIC8vIFByaW1pdGl2ZSBwb2x5bm9taWFsIG92ZXIgR0YoMik6IHheOCArIHheNiArIHheNSArIHheNCArIDFcblx0ICAgICAgICAgICAgICAgICAgICBMRlNSID0gKExGU1IgPDwgMSkgXiAweDcxO1xuXHQgICAgICAgICAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgICAgICAgICAgICBMRlNSIDw8PSAxO1xuXHQgICAgICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICB9XG5cblx0ICAgICAgICAgICAgUk9VTkRfQ09OU1RBTlRTW2ldID0gWDY0V29yZC5jcmVhdGUocm91bmRDb25zdGFudE1zdywgcm91bmRDb25zdGFudExzdyk7XG5cdCAgICAgICAgfVxuXHQgICAgfSgpKTtcblxuXHQgICAgLy8gUmV1c2FibGUgb2JqZWN0cyBmb3IgdGVtcG9yYXJ5IHZhbHVlc1xuXHQgICAgdmFyIFQgPSBbXTtcblx0ICAgIChmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCAyNTsgaSsrKSB7XG5cdCAgICAgICAgICAgIFRbaV0gPSBYNjRXb3JkLmNyZWF0ZSgpO1xuXHQgICAgICAgIH1cblx0ICAgIH0oKSk7XG5cblx0ICAgIC8qKlxuXHQgICAgICogU0hBLTMgaGFzaCBhbGdvcml0aG0uXG5cdCAgICAgKi9cblx0ICAgIHZhciBTSEEzID0gQ19hbGdvLlNIQTMgPSBIYXNoZXIuZXh0ZW5kKHtcblx0ICAgICAgICAvKipcblx0ICAgICAgICAgKiBDb25maWd1cmF0aW9uIG9wdGlvbnMuXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAcHJvcGVydHkge251bWJlcn0gb3V0cHV0TGVuZ3RoXG5cdCAgICAgICAgICogICBUaGUgZGVzaXJlZCBudW1iZXIgb2YgYml0cyBpbiB0aGUgb3V0cHV0IGhhc2guXG5cdCAgICAgICAgICogICBPbmx5IHZhbHVlcyBwZXJtaXR0ZWQgYXJlOiAyMjQsIDI1NiwgMzg0LCA1MTIuXG5cdCAgICAgICAgICogICBEZWZhdWx0OiA1MTJcblx0ICAgICAgICAgKi9cblx0ICAgICAgICBjZmc6IEhhc2hlci5jZmcuZXh0ZW5kKHtcblx0ICAgICAgICAgICAgb3V0cHV0TGVuZ3RoOiA1MTJcblx0ICAgICAgICB9KSxcblxuXHQgICAgICAgIF9kb1Jlc2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHZhciBzdGF0ZSA9IHRoaXMuX3N0YXRlID0gW11cblx0ICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCAyNTsgaSsrKSB7XG5cdCAgICAgICAgICAgICAgICBzdGF0ZVtpXSA9IG5ldyBYNjRXb3JkLmluaXQoKTtcblx0ICAgICAgICAgICAgfVxuXG5cdCAgICAgICAgICAgIHRoaXMuYmxvY2tTaXplID0gKDE2MDAgLSAyICogdGhpcy5jZmcub3V0cHV0TGVuZ3RoKSAvIDMyO1xuXHQgICAgICAgIH0sXG5cblx0ICAgICAgICBfZG9Qcm9jZXNzQmxvY2s6IGZ1bmN0aW9uIChNLCBvZmZzZXQpIHtcblx0ICAgICAgICAgICAgLy8gU2hvcnRjdXRzXG5cdCAgICAgICAgICAgIHZhciBzdGF0ZSA9IHRoaXMuX3N0YXRlO1xuXHQgICAgICAgICAgICB2YXIgbkJsb2NrU2l6ZUxhbmVzID0gdGhpcy5ibG9ja1NpemUgLyAyO1xuXG5cdCAgICAgICAgICAgIC8vIEFic29yYlxuXHQgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IG5CbG9ja1NpemVMYW5lczsgaSsrKSB7XG5cdCAgICAgICAgICAgICAgICAvLyBTaG9ydGN1dHNcblx0ICAgICAgICAgICAgICAgIHZhciBNMmkgID0gTVtvZmZzZXQgKyAyICogaV07XG5cdCAgICAgICAgICAgICAgICB2YXIgTTJpMSA9IE1bb2Zmc2V0ICsgMiAqIGkgKyAxXTtcblxuXHQgICAgICAgICAgICAgICAgLy8gU3dhcCBlbmRpYW5cblx0ICAgICAgICAgICAgICAgIE0yaSA9IChcblx0ICAgICAgICAgICAgICAgICAgICAoKChNMmkgPDwgOCkgIHwgKE0yaSA+Pj4gMjQpKSAmIDB4MDBmZjAwZmYpIHxcblx0ICAgICAgICAgICAgICAgICAgICAoKChNMmkgPDwgMjQpIHwgKE0yaSA+Pj4gOCkpICAmIDB4ZmYwMGZmMDApXG5cdCAgICAgICAgICAgICAgICApO1xuXHQgICAgICAgICAgICAgICAgTTJpMSA9IChcblx0ICAgICAgICAgICAgICAgICAgICAoKChNMmkxIDw8IDgpICB8IChNMmkxID4+PiAyNCkpICYgMHgwMGZmMDBmZikgfFxuXHQgICAgICAgICAgICAgICAgICAgICgoKE0yaTEgPDwgMjQpIHwgKE0yaTEgPj4+IDgpKSAgJiAweGZmMDBmZjAwKVxuXHQgICAgICAgICAgICAgICAgKTtcblxuXHQgICAgICAgICAgICAgICAgLy8gQWJzb3JiIG1lc3NhZ2UgaW50byBzdGF0ZVxuXHQgICAgICAgICAgICAgICAgdmFyIGxhbmUgPSBzdGF0ZVtpXTtcblx0ICAgICAgICAgICAgICAgIGxhbmUuaGlnaCBePSBNMmkxO1xuXHQgICAgICAgICAgICAgICAgbGFuZS5sb3cgIF49IE0yaTtcblx0ICAgICAgICAgICAgfVxuXG5cdCAgICAgICAgICAgIC8vIFJvdW5kc1xuXHQgICAgICAgICAgICBmb3IgKHZhciByb3VuZCA9IDA7IHJvdW5kIDwgMjQ7IHJvdW5kKyspIHtcblx0ICAgICAgICAgICAgICAgIC8vIFRoZXRhXG5cdCAgICAgICAgICAgICAgICBmb3IgKHZhciB4ID0gMDsgeCA8IDU7IHgrKykge1xuXHQgICAgICAgICAgICAgICAgICAgIC8vIE1peCBjb2x1bW4gbGFuZXNcblx0ICAgICAgICAgICAgICAgICAgICB2YXIgdE1zdyA9IDAsIHRMc3cgPSAwO1xuXHQgICAgICAgICAgICAgICAgICAgIGZvciAodmFyIHkgPSAwOyB5IDwgNTsgeSsrKSB7XG5cdCAgICAgICAgICAgICAgICAgICAgICAgIHZhciBsYW5lID0gc3RhdGVbeCArIDUgKiB5XTtcblx0ICAgICAgICAgICAgICAgICAgICAgICAgdE1zdyBePSBsYW5lLmhpZ2g7XG5cdCAgICAgICAgICAgICAgICAgICAgICAgIHRMc3cgXj0gbGFuZS5sb3c7XG5cdCAgICAgICAgICAgICAgICAgICAgfVxuXG5cdCAgICAgICAgICAgICAgICAgICAgLy8gVGVtcG9yYXJ5IHZhbHVlc1xuXHQgICAgICAgICAgICAgICAgICAgIHZhciBUeCA9IFRbeF07XG5cdCAgICAgICAgICAgICAgICAgICAgVHguaGlnaCA9IHRNc3c7XG5cdCAgICAgICAgICAgICAgICAgICAgVHgubG93ICA9IHRMc3c7XG5cdCAgICAgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgICAgICBmb3IgKHZhciB4ID0gMDsgeCA8IDU7IHgrKykge1xuXHQgICAgICAgICAgICAgICAgICAgIC8vIFNob3J0Y3V0c1xuXHQgICAgICAgICAgICAgICAgICAgIHZhciBUeDQgPSBUWyh4ICsgNCkgJSA1XTtcblx0ICAgICAgICAgICAgICAgICAgICB2YXIgVHgxID0gVFsoeCArIDEpICUgNV07XG5cdCAgICAgICAgICAgICAgICAgICAgdmFyIFR4MU1zdyA9IFR4MS5oaWdoO1xuXHQgICAgICAgICAgICAgICAgICAgIHZhciBUeDFMc3cgPSBUeDEubG93O1xuXG5cdCAgICAgICAgICAgICAgICAgICAgLy8gTWl4IHN1cnJvdW5kaW5nIGNvbHVtbnNcblx0ICAgICAgICAgICAgICAgICAgICB2YXIgdE1zdyA9IFR4NC5oaWdoIF4gKChUeDFNc3cgPDwgMSkgfCAoVHgxTHN3ID4+PiAzMSkpO1xuXHQgICAgICAgICAgICAgICAgICAgIHZhciB0THN3ID0gVHg0LmxvdyAgXiAoKFR4MUxzdyA8PCAxKSB8IChUeDFNc3cgPj4+IDMxKSk7XG5cdCAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgeSA9IDA7IHkgPCA1OyB5KyspIHtcblx0ICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGxhbmUgPSBzdGF0ZVt4ICsgNSAqIHldO1xuXHQgICAgICAgICAgICAgICAgICAgICAgICBsYW5lLmhpZ2ggXj0gdE1zdztcblx0ICAgICAgICAgICAgICAgICAgICAgICAgbGFuZS5sb3cgIF49IHRMc3c7XG5cdCAgICAgICAgICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICAgICAgfVxuXG5cdCAgICAgICAgICAgICAgICAvLyBSaG8gUGlcblx0ICAgICAgICAgICAgICAgIGZvciAodmFyIGxhbmVJbmRleCA9IDE7IGxhbmVJbmRleCA8IDI1OyBsYW5lSW5kZXgrKykge1xuXHQgICAgICAgICAgICAgICAgICAgIHZhciB0TXN3O1xuXHQgICAgICAgICAgICAgICAgICAgIHZhciB0THN3O1xuXG5cdCAgICAgICAgICAgICAgICAgICAgLy8gU2hvcnRjdXRzXG5cdCAgICAgICAgICAgICAgICAgICAgdmFyIGxhbmUgPSBzdGF0ZVtsYW5lSW5kZXhdO1xuXHQgICAgICAgICAgICAgICAgICAgIHZhciBsYW5lTXN3ID0gbGFuZS5oaWdoO1xuXHQgICAgICAgICAgICAgICAgICAgIHZhciBsYW5lTHN3ID0gbGFuZS5sb3c7XG5cdCAgICAgICAgICAgICAgICAgICAgdmFyIHJob09mZnNldCA9IFJIT19PRkZTRVRTW2xhbmVJbmRleF07XG5cblx0ICAgICAgICAgICAgICAgICAgICAvLyBSb3RhdGUgbGFuZXNcblx0ICAgICAgICAgICAgICAgICAgICBpZiAocmhvT2Zmc2V0IDwgMzIpIHtcblx0ICAgICAgICAgICAgICAgICAgICAgICAgdE1zdyA9IChsYW5lTXN3IDw8IHJob09mZnNldCkgfCAobGFuZUxzdyA+Pj4gKDMyIC0gcmhvT2Zmc2V0KSk7XG5cdCAgICAgICAgICAgICAgICAgICAgICAgIHRMc3cgPSAobGFuZUxzdyA8PCByaG9PZmZzZXQpIHwgKGxhbmVNc3cgPj4+ICgzMiAtIHJob09mZnNldCkpO1xuXHQgICAgICAgICAgICAgICAgICAgIH0gZWxzZSAvKiBpZiAocmhvT2Zmc2V0ID49IDMyKSAqLyB7XG5cdCAgICAgICAgICAgICAgICAgICAgICAgIHRNc3cgPSAobGFuZUxzdyA8PCAocmhvT2Zmc2V0IC0gMzIpKSB8IChsYW5lTXN3ID4+PiAoNjQgLSByaG9PZmZzZXQpKTtcblx0ICAgICAgICAgICAgICAgICAgICAgICAgdExzdyA9IChsYW5lTXN3IDw8IChyaG9PZmZzZXQgLSAzMikpIHwgKGxhbmVMc3cgPj4+ICg2NCAtIHJob09mZnNldCkpO1xuXHQgICAgICAgICAgICAgICAgICAgIH1cblxuXHQgICAgICAgICAgICAgICAgICAgIC8vIFRyYW5zcG9zZSBsYW5lc1xuXHQgICAgICAgICAgICAgICAgICAgIHZhciBUUGlMYW5lID0gVFtQSV9JTkRFWEVTW2xhbmVJbmRleF1dO1xuXHQgICAgICAgICAgICAgICAgICAgIFRQaUxhbmUuaGlnaCA9IHRNc3c7XG5cdCAgICAgICAgICAgICAgICAgICAgVFBpTGFuZS5sb3cgID0gdExzdztcblx0ICAgICAgICAgICAgICAgIH1cblxuXHQgICAgICAgICAgICAgICAgLy8gUmhvIHBpIGF0IHggPSB5ID0gMFxuXHQgICAgICAgICAgICAgICAgdmFyIFQwID0gVFswXTtcblx0ICAgICAgICAgICAgICAgIHZhciBzdGF0ZTAgPSBzdGF0ZVswXTtcblx0ICAgICAgICAgICAgICAgIFQwLmhpZ2ggPSBzdGF0ZTAuaGlnaDtcblx0ICAgICAgICAgICAgICAgIFQwLmxvdyAgPSBzdGF0ZTAubG93O1xuXG5cdCAgICAgICAgICAgICAgICAvLyBDaGlcblx0ICAgICAgICAgICAgICAgIGZvciAodmFyIHggPSAwOyB4IDwgNTsgeCsrKSB7XG5cdCAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgeSA9IDA7IHkgPCA1OyB5KyspIHtcblx0ICAgICAgICAgICAgICAgICAgICAgICAgLy8gU2hvcnRjdXRzXG5cdCAgICAgICAgICAgICAgICAgICAgICAgIHZhciBsYW5lSW5kZXggPSB4ICsgNSAqIHk7XG5cdCAgICAgICAgICAgICAgICAgICAgICAgIHZhciBsYW5lID0gc3RhdGVbbGFuZUluZGV4XTtcblx0ICAgICAgICAgICAgICAgICAgICAgICAgdmFyIFRMYW5lID0gVFtsYW5lSW5kZXhdO1xuXHQgICAgICAgICAgICAgICAgICAgICAgICB2YXIgVHgxTGFuZSA9IFRbKCh4ICsgMSkgJSA1KSArIDUgKiB5XTtcblx0ICAgICAgICAgICAgICAgICAgICAgICAgdmFyIFR4MkxhbmUgPSBUWygoeCArIDIpICUgNSkgKyA1ICogeV07XG5cblx0ICAgICAgICAgICAgICAgICAgICAgICAgLy8gTWl4IHJvd3Ncblx0ICAgICAgICAgICAgICAgICAgICAgICAgbGFuZS5oaWdoID0gVExhbmUuaGlnaCBeICh+VHgxTGFuZS5oaWdoICYgVHgyTGFuZS5oaWdoKTtcblx0ICAgICAgICAgICAgICAgICAgICAgICAgbGFuZS5sb3cgID0gVExhbmUubG93ICBeICh+VHgxTGFuZS5sb3cgICYgVHgyTGFuZS5sb3cpO1xuXHQgICAgICAgICAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgICAgIH1cblxuXHQgICAgICAgICAgICAgICAgLy8gSW90YVxuXHQgICAgICAgICAgICAgICAgdmFyIGxhbmUgPSBzdGF0ZVswXTtcblx0ICAgICAgICAgICAgICAgIHZhciByb3VuZENvbnN0YW50ID0gUk9VTkRfQ09OU1RBTlRTW3JvdW5kXTtcblx0ICAgICAgICAgICAgICAgIGxhbmUuaGlnaCBePSByb3VuZENvbnN0YW50LmhpZ2g7XG5cdCAgICAgICAgICAgICAgICBsYW5lLmxvdyAgXj0gcm91bmRDb25zdGFudC5sb3c7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICB9LFxuXG5cdCAgICAgICAgX2RvRmluYWxpemU6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgLy8gU2hvcnRjdXRzXG5cdCAgICAgICAgICAgIHZhciBkYXRhID0gdGhpcy5fZGF0YTtcblx0ICAgICAgICAgICAgdmFyIGRhdGFXb3JkcyA9IGRhdGEud29yZHM7XG5cdCAgICAgICAgICAgIHZhciBuQml0c1RvdGFsID0gdGhpcy5fbkRhdGFCeXRlcyAqIDg7XG5cdCAgICAgICAgICAgIHZhciBuQml0c0xlZnQgPSBkYXRhLnNpZ0J5dGVzICogODtcblx0ICAgICAgICAgICAgdmFyIGJsb2NrU2l6ZUJpdHMgPSB0aGlzLmJsb2NrU2l6ZSAqIDMyO1xuXG5cdCAgICAgICAgICAgIC8vIEFkZCBwYWRkaW5nXG5cdCAgICAgICAgICAgIGRhdGFXb3Jkc1tuQml0c0xlZnQgPj4+IDVdIHw9IDB4MSA8PCAoMjQgLSBuQml0c0xlZnQgJSAzMik7XG5cdCAgICAgICAgICAgIGRhdGFXb3Jkc1soKE1hdGguY2VpbCgobkJpdHNMZWZ0ICsgMSkgLyBibG9ja1NpemVCaXRzKSAqIGJsb2NrU2l6ZUJpdHMpID4+PiA1KSAtIDFdIHw9IDB4ODA7XG5cdCAgICAgICAgICAgIGRhdGEuc2lnQnl0ZXMgPSBkYXRhV29yZHMubGVuZ3RoICogNDtcblxuXHQgICAgICAgICAgICAvLyBIYXNoIGZpbmFsIGJsb2Nrc1xuXHQgICAgICAgICAgICB0aGlzLl9wcm9jZXNzKCk7XG5cblx0ICAgICAgICAgICAgLy8gU2hvcnRjdXRzXG5cdCAgICAgICAgICAgIHZhciBzdGF0ZSA9IHRoaXMuX3N0YXRlO1xuXHQgICAgICAgICAgICB2YXIgb3V0cHV0TGVuZ3RoQnl0ZXMgPSB0aGlzLmNmZy5vdXRwdXRMZW5ndGggLyA4O1xuXHQgICAgICAgICAgICB2YXIgb3V0cHV0TGVuZ3RoTGFuZXMgPSBvdXRwdXRMZW5ndGhCeXRlcyAvIDg7XG5cblx0ICAgICAgICAgICAgLy8gU3F1ZWV6ZVxuXHQgICAgICAgICAgICB2YXIgaGFzaFdvcmRzID0gW107XG5cdCAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgb3V0cHV0TGVuZ3RoTGFuZXM7IGkrKykge1xuXHQgICAgICAgICAgICAgICAgLy8gU2hvcnRjdXRzXG5cdCAgICAgICAgICAgICAgICB2YXIgbGFuZSA9IHN0YXRlW2ldO1xuXHQgICAgICAgICAgICAgICAgdmFyIGxhbmVNc3cgPSBsYW5lLmhpZ2g7XG5cdCAgICAgICAgICAgICAgICB2YXIgbGFuZUxzdyA9IGxhbmUubG93O1xuXG5cdCAgICAgICAgICAgICAgICAvLyBTd2FwIGVuZGlhblxuXHQgICAgICAgICAgICAgICAgbGFuZU1zdyA9IChcblx0ICAgICAgICAgICAgICAgICAgICAoKChsYW5lTXN3IDw8IDgpICB8IChsYW5lTXN3ID4+PiAyNCkpICYgMHgwMGZmMDBmZikgfFxuXHQgICAgICAgICAgICAgICAgICAgICgoKGxhbmVNc3cgPDwgMjQpIHwgKGxhbmVNc3cgPj4+IDgpKSAgJiAweGZmMDBmZjAwKVxuXHQgICAgICAgICAgICAgICAgKTtcblx0ICAgICAgICAgICAgICAgIGxhbmVMc3cgPSAoXG5cdCAgICAgICAgICAgICAgICAgICAgKCgobGFuZUxzdyA8PCA4KSAgfCAobGFuZUxzdyA+Pj4gMjQpKSAmIDB4MDBmZjAwZmYpIHxcblx0ICAgICAgICAgICAgICAgICAgICAoKChsYW5lTHN3IDw8IDI0KSB8IChsYW5lTHN3ID4+PiA4KSkgICYgMHhmZjAwZmYwMClcblx0ICAgICAgICAgICAgICAgICk7XG5cblx0ICAgICAgICAgICAgICAgIC8vIFNxdWVlemUgc3RhdGUgdG8gcmV0cmlldmUgaGFzaFxuXHQgICAgICAgICAgICAgICAgaGFzaFdvcmRzLnB1c2gobGFuZUxzdyk7XG5cdCAgICAgICAgICAgICAgICBoYXNoV29yZHMucHVzaChsYW5lTXN3KTtcblx0ICAgICAgICAgICAgfVxuXG5cdCAgICAgICAgICAgIC8vIFJldHVybiBmaW5hbCBjb21wdXRlZCBoYXNoXG5cdCAgICAgICAgICAgIHJldHVybiBuZXcgV29yZEFycmF5LmluaXQoaGFzaFdvcmRzLCBvdXRwdXRMZW5ndGhCeXRlcyk7XG5cdCAgICAgICAgfSxcblxuXHQgICAgICAgIGNsb25lOiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHZhciBjbG9uZSA9IEhhc2hlci5jbG9uZS5jYWxsKHRoaXMpO1xuXG5cdCAgICAgICAgICAgIHZhciBzdGF0ZSA9IGNsb25lLl9zdGF0ZSA9IHRoaXMuX3N0YXRlLnNsaWNlKDApO1xuXHQgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IDI1OyBpKyspIHtcblx0ICAgICAgICAgICAgICAgIHN0YXRlW2ldID0gc3RhdGVbaV0uY2xvbmUoKTtcblx0ICAgICAgICAgICAgfVxuXG5cdCAgICAgICAgICAgIHJldHVybiBjbG9uZTtcblx0ICAgICAgICB9XG5cdCAgICB9KTtcblxuXHQgICAgLyoqXG5cdCAgICAgKiBTaG9ydGN1dCBmdW5jdGlvbiB0byB0aGUgaGFzaGVyJ3Mgb2JqZWN0IGludGVyZmFjZS5cblx0ICAgICAqXG5cdCAgICAgKiBAcGFyYW0ge1dvcmRBcnJheXxzdHJpbmd9IG1lc3NhZ2UgVGhlIG1lc3NhZ2UgdG8gaGFzaC5cblx0ICAgICAqXG5cdCAgICAgKiBAcmV0dXJuIHtXb3JkQXJyYXl9IFRoZSBoYXNoLlxuXHQgICAgICpcblx0ICAgICAqIEBzdGF0aWNcblx0ICAgICAqXG5cdCAgICAgKiBAZXhhbXBsZVxuXHQgICAgICpcblx0ICAgICAqICAgICB2YXIgaGFzaCA9IENyeXB0b0pTLlNIQTMoJ21lc3NhZ2UnKTtcblx0ICAgICAqICAgICB2YXIgaGFzaCA9IENyeXB0b0pTLlNIQTMod29yZEFycmF5KTtcblx0ICAgICAqL1xuXHQgICAgQy5TSEEzID0gSGFzaGVyLl9jcmVhdGVIZWxwZXIoU0hBMyk7XG5cblx0ICAgIC8qKlxuXHQgICAgICogU2hvcnRjdXQgZnVuY3Rpb24gdG8gdGhlIEhNQUMncyBvYmplY3QgaW50ZXJmYWNlLlxuXHQgICAgICpcblx0ICAgICAqIEBwYXJhbSB7V29yZEFycmF5fHN0cmluZ30gbWVzc2FnZSBUaGUgbWVzc2FnZSB0byBoYXNoLlxuXHQgICAgICogQHBhcmFtIHtXb3JkQXJyYXl8c3RyaW5nfSBrZXkgVGhlIHNlY3JldCBrZXkuXG5cdCAgICAgKlxuXHQgICAgICogQHJldHVybiB7V29yZEFycmF5fSBUaGUgSE1BQy5cblx0ICAgICAqXG5cdCAgICAgKiBAc3RhdGljXG5cdCAgICAgKlxuXHQgICAgICogQGV4YW1wbGVcblx0ICAgICAqXG5cdCAgICAgKiAgICAgdmFyIGhtYWMgPSBDcnlwdG9KUy5IbWFjU0hBMyhtZXNzYWdlLCBrZXkpO1xuXHQgICAgICovXG5cdCAgICBDLkhtYWNTSEEzID0gSGFzaGVyLl9jcmVhdGVIbWFjSGVscGVyKFNIQTMpO1xuXHR9KE1hdGgpKTtcblxuXG5cdHJldHVybiBDcnlwdG9KUy5TSEEzO1xuXG59KSk7Il0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///45953\n")},46226:(I,g,t)=>{"use strict";I.exports=t.p+"a4dabe2bef0e212a7236.png"},46637:function(__unused_webpack_module,__unused_webpack_exports,__webpack_require__){eval("//! moment.js locale configuration\n//! locale : Slovenian [sl]\n//! author : Robert Sedovšek : https://github.com/sedovsek\n\n;(function (global, factory) {\n true ? factory(__webpack_require__(95093)) :\n 0\n}(this, (function (moment) { 'use strict';\n\n //! moment.js locale configuration\n\n function processRelativeTime(number, withoutSuffix, key, isFuture) {\n var result = number + ' ';\n switch (key) {\n case 's':\n return withoutSuffix || isFuture\n ? 'nekaj sekund'\n : 'nekaj sekundami';\n case 'ss':\n if (number === 1) {\n result += withoutSuffix ? 'sekundo' : 'sekundi';\n } else if (number === 2) {\n result += withoutSuffix || isFuture ? 'sekundi' : 'sekundah';\n } else if (number < 5) {\n result += withoutSuffix || isFuture ? 'sekunde' : 'sekundah';\n } else {\n result += 'sekund';\n }\n return result;\n case 'm':\n return withoutSuffix ? 'ena minuta' : 'eno minuto';\n case 'mm':\n if (number === 1) {\n result += withoutSuffix ? 'minuta' : 'minuto';\n } else if (number === 2) {\n result += withoutSuffix || isFuture ? 'minuti' : 'minutama';\n } else if (number < 5) {\n result += withoutSuffix || isFuture ? 'minute' : 'minutami';\n } else {\n result += withoutSuffix || isFuture ? 'minut' : 'minutami';\n }\n return result;\n case 'h':\n return withoutSuffix ? 'ena ura' : 'eno uro';\n case 'hh':\n if (number === 1) {\n result += withoutSuffix ? 'ura' : 'uro';\n } else if (number === 2) {\n result += withoutSuffix || isFuture ? 'uri' : 'urama';\n } else if (number < 5) {\n result += withoutSuffix || isFuture ? 'ure' : 'urami';\n } else {\n result += withoutSuffix || isFuture ? 'ur' : 'urami';\n }\n return result;\n case 'd':\n return withoutSuffix || isFuture ? 'en dan' : 'enim dnem';\n case 'dd':\n if (number === 1) {\n result += withoutSuffix || isFuture ? 'dan' : 'dnem';\n } else if (number === 2) {\n result += withoutSuffix || isFuture ? 'dni' : 'dnevoma';\n } else {\n result += withoutSuffix || isFuture ? 'dni' : 'dnevi';\n }\n return result;\n case 'M':\n return withoutSuffix || isFuture ? 'en mesec' : 'enim mesecem';\n case 'MM':\n if (number === 1) {\n result += withoutSuffix || isFuture ? 'mesec' : 'mesecem';\n } else if (number === 2) {\n result += withoutSuffix || isFuture ? 'meseca' : 'mesecema';\n } else if (number < 5) {\n result += withoutSuffix || isFuture ? 'mesece' : 'meseci';\n } else {\n result += withoutSuffix || isFuture ? 'mesecev' : 'meseci';\n }\n return result;\n case 'y':\n return withoutSuffix || isFuture ? 'eno leto' : 'enim letom';\n case 'yy':\n if (number === 1) {\n result += withoutSuffix || isFuture ? 'leto' : 'letom';\n } else if (number === 2) {\n result += withoutSuffix || isFuture ? 'leti' : 'letoma';\n } else if (number < 5) {\n result += withoutSuffix || isFuture ? 'leta' : 'leti';\n } else {\n result += withoutSuffix || isFuture ? 'let' : 'leti';\n }\n return result;\n }\n }\n\n var sl = moment.defineLocale('sl', {\n months: 'januar_februar_marec_april_maj_junij_julij_avgust_september_oktober_november_december'.split(\n '_'\n ),\n monthsShort:\n 'jan._feb._mar._apr._maj._jun._jul._avg._sep._okt._nov._dec.'.split(\n '_'\n ),\n monthsParseExact: true,\n weekdays: 'nedelja_ponedeljek_torek_sreda_četrtek_petek_sobota'.split('_'),\n weekdaysShort: 'ned._pon._tor._sre._čet._pet._sob.'.split('_'),\n weekdaysMin: 'ne_po_to_sr_če_pe_so'.split('_'),\n weekdaysParseExact: true,\n longDateFormat: {\n LT: 'H:mm',\n LTS: 'H:mm:ss',\n L: 'DD. MM. YYYY',\n LL: 'D. MMMM YYYY',\n LLL: 'D. MMMM YYYY H:mm',\n LLLL: 'dddd, D. MMMM YYYY H:mm',\n },\n calendar: {\n sameDay: '[danes ob] LT',\n nextDay: '[jutri ob] LT',\n\n nextWeek: function () {\n switch (this.day()) {\n case 0:\n return '[v] [nedeljo] [ob] LT';\n case 3:\n return '[v] [sredo] [ob] LT';\n case 6:\n return '[v] [soboto] [ob] LT';\n case 1:\n case 2:\n case 4:\n case 5:\n return '[v] dddd [ob] LT';\n }\n },\n lastDay: '[včeraj ob] LT',\n lastWeek: function () {\n switch (this.day()) {\n case 0:\n return '[prejšnjo] [nedeljo] [ob] LT';\n case 3:\n return '[prejšnjo] [sredo] [ob] LT';\n case 6:\n return '[prejšnjo] [soboto] [ob] LT';\n case 1:\n case 2:\n case 4:\n case 5:\n return '[prejšnji] dddd [ob] LT';\n }\n },\n sameElse: 'L',\n },\n relativeTime: {\n future: 'čez %s',\n past: 'pred %s',\n s: processRelativeTime,\n ss: processRelativeTime,\n m: processRelativeTime,\n mm: processRelativeTime,\n h: processRelativeTime,\n hh: processRelativeTime,\n d: processRelativeTime,\n dd: processRelativeTime,\n M: processRelativeTime,\n MM: processRelativeTime,\n y: processRelativeTime,\n yy: processRelativeTime,\n },\n dayOfMonthOrdinalParse: /\\d{1,2}\\./,\n ordinal: '%d.',\n week: {\n dow: 1, // Monday is the first day of the week.\n doy: 7, // The week that contains Jan 7th is the first week of the year.\n },\n });\n\n return sl;\n\n})));\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNDY2MzcuanMiLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vaXRnLW5leHRnZW4tZnJvbnRlbmQvLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9zbC5qcz84MTU1Il0sInNvdXJjZXNDb250ZW50IjpbIi8vISBtb21lbnQuanMgbG9jYWxlIGNvbmZpZ3VyYXRpb25cbi8vISBsb2NhbGUgOiBTbG92ZW5pYW4gW3NsXVxuLy8hIGF1dGhvciA6IFJvYmVydCBTZWRvdsWhZWsgOiBodHRwczovL2dpdGh1Yi5jb20vc2Vkb3ZzZWtcblxuOyhmdW5jdGlvbiAoZ2xvYmFsLCBmYWN0b3J5KSB7XG4gICB0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcgJiYgdHlwZW9mIG1vZHVsZSAhPT0gJ3VuZGVmaW5lZCdcbiAgICAgICAmJiB0eXBlb2YgcmVxdWlyZSA9PT0gJ2Z1bmN0aW9uJyA/IGZhY3RvcnkocmVxdWlyZSgnLi4vbW9tZW50JykpIDpcbiAgIHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgZGVmaW5lLmFtZCA/IGRlZmluZShbJy4uL21vbWVudCddLCBmYWN0b3J5KSA6XG4gICBmYWN0b3J5KGdsb2JhbC5tb21lbnQpXG59KHRoaXMsIChmdW5jdGlvbiAobW9tZW50KSB7ICd1c2Ugc3RyaWN0JztcblxuICAgIC8vISBtb21lbnQuanMgbG9jYWxlIGNvbmZpZ3VyYXRpb25cblxuICAgIGZ1bmN0aW9uIHByb2Nlc3NSZWxhdGl2ZVRpbWUobnVtYmVyLCB3aXRob3V0U3VmZml4LCBrZXksIGlzRnV0dXJlKSB7XG4gICAgICAgIHZhciByZXN1bHQgPSBudW1iZXIgKyAnICc7XG4gICAgICAgIHN3aXRjaCAoa2V5KSB7XG4gICAgICAgICAgICBjYXNlICdzJzpcbiAgICAgICAgICAgICAgICByZXR1cm4gd2l0aG91dFN1ZmZpeCB8fCBpc0Z1dHVyZVxuICAgICAgICAgICAgICAgICAgICA/ICduZWthaiBzZWt1bmQnXG4gICAgICAgICAgICAgICAgICAgIDogJ25la2FqIHNla3VuZGFtaSc7XG4gICAgICAgICAgICBjYXNlICdzcyc6XG4gICAgICAgICAgICAgICAgaWYgKG51bWJlciA9PT0gMSkge1xuICAgICAgICAgICAgICAgICAgICByZXN1bHQgKz0gd2l0aG91dFN1ZmZpeCA/ICdzZWt1bmRvJyA6ICdzZWt1bmRpJztcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKG51bWJlciA9PT0gMikge1xuICAgICAgICAgICAgICAgICAgICByZXN1bHQgKz0gd2l0aG91dFN1ZmZpeCB8fCBpc0Z1dHVyZSA/ICdzZWt1bmRpJyA6ICdzZWt1bmRhaCc7XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChudW1iZXIgPCA1KSB7XG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdCArPSB3aXRob3V0U3VmZml4IHx8IGlzRnV0dXJlID8gJ3Nla3VuZGUnIDogJ3Nla3VuZGFoJztcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICByZXN1bHQgKz0gJ3Nla3VuZCc7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgICAgICAgICBjYXNlICdtJzpcbiAgICAgICAgICAgICAgICByZXR1cm4gd2l0aG91dFN1ZmZpeCA/ICdlbmEgbWludXRhJyA6ICdlbm8gbWludXRvJztcbiAgICAgICAgICAgIGNhc2UgJ21tJzpcbiAgICAgICAgICAgICAgICBpZiAobnVtYmVyID09PSAxKSB7XG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdCArPSB3aXRob3V0U3VmZml4ID8gJ21pbnV0YScgOiAnbWludXRvJztcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKG51bWJlciA9PT0gMikge1xuICAgICAgICAgICAgICAgICAgICByZXN1bHQgKz0gd2l0aG91dFN1ZmZpeCB8fCBpc0Z1dHVyZSA/ICdtaW51dGknIDogJ21pbnV0YW1hJztcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKG51bWJlciA8IDUpIHtcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0ICs9IHdpdGhvdXRTdWZmaXggfHwgaXNGdXR1cmUgPyAnbWludXRlJyA6ICdtaW51dGFtaSc7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0ICs9IHdpdGhvdXRTdWZmaXggfHwgaXNGdXR1cmUgPyAnbWludXQnIDogJ21pbnV0YW1pJztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICAgICAgICAgIGNhc2UgJ2gnOlxuICAgICAgICAgICAgICAgIHJldHVybiB3aXRob3V0U3VmZml4ID8gJ2VuYSB1cmEnIDogJ2VubyB1cm8nO1xuICAgICAgICAgICAgY2FzZSAnaGgnOlxuICAgICAgICAgICAgICAgIGlmIChudW1iZXIgPT09IDEpIHtcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0ICs9IHdpdGhvdXRTdWZmaXggPyAndXJhJyA6ICd1cm8nO1xuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAobnVtYmVyID09PSAyKSB7XG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdCArPSB3aXRob3V0U3VmZml4IHx8IGlzRnV0dXJlID8gJ3VyaScgOiAndXJhbWEnO1xuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAobnVtYmVyIDwgNSkge1xuICAgICAgICAgICAgICAgICAgICByZXN1bHQgKz0gd2l0aG91dFN1ZmZpeCB8fCBpc0Z1dHVyZSA/ICd1cmUnIDogJ3VyYW1pJztcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICByZXN1bHQgKz0gd2l0aG91dFN1ZmZpeCB8fCBpc0Z1dHVyZSA/ICd1cicgOiAndXJhbWknO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgICAgICAgY2FzZSAnZCc6XG4gICAgICAgICAgICAgICAgcmV0dXJuIHdpdGhvdXRTdWZmaXggfHwgaXNGdXR1cmUgPyAnZW4gZGFuJyA6ICdlbmltIGRuZW0nO1xuICAgICAgICAgICAgY2FzZSAnZGQnOlxuICAgICAgICAgICAgICAgIGlmIChudW1iZXIgPT09IDEpIHtcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0ICs9IHdpdGhvdXRTdWZmaXggfHwgaXNGdXR1cmUgPyAnZGFuJyA6ICdkbmVtJztcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKG51bWJlciA9PT0gMikge1xuICAgICAgICAgICAgICAgICAgICByZXN1bHQgKz0gd2l0aG91dFN1ZmZpeCB8fCBpc0Z1dHVyZSA/ICdkbmknIDogJ2RuZXZvbWEnO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdCArPSB3aXRob3V0U3VmZml4IHx8IGlzRnV0dXJlID8gJ2RuaScgOiAnZG5ldmknO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgICAgICAgY2FzZSAnTSc6XG4gICAgICAgICAgICAgICAgcmV0dXJuIHdpdGhvdXRTdWZmaXggfHwgaXNGdXR1cmUgPyAnZW4gbWVzZWMnIDogJ2VuaW0gbWVzZWNlbSc7XG4gICAgICAgICAgICBjYXNlICdNTSc6XG4gICAgICAgICAgICAgICAgaWYgKG51bWJlciA9PT0gMSkge1xuICAgICAgICAgICAgICAgICAgICByZXN1bHQgKz0gd2l0aG91dFN1ZmZpeCB8fCBpc0Z1dHVyZSA/ICdtZXNlYycgOiAnbWVzZWNlbSc7XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChudW1iZXIgPT09IDIpIHtcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0ICs9IHdpdGhvdXRTdWZmaXggfHwgaXNGdXR1cmUgPyAnbWVzZWNhJyA6ICdtZXNlY2VtYSc7XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChudW1iZXIgPCA1KSB7XG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdCArPSB3aXRob3V0U3VmZml4IHx8IGlzRnV0dXJlID8gJ21lc2VjZScgOiAnbWVzZWNpJztcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICByZXN1bHQgKz0gd2l0aG91dFN1ZmZpeCB8fCBpc0Z1dHVyZSA/ICdtZXNlY2V2JyA6ICdtZXNlY2knO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgICAgICAgY2FzZSAneSc6XG4gICAgICAgICAgICAgICAgcmV0dXJuIHdpdGhvdXRTdWZmaXggfHwgaXNGdXR1cmUgPyAnZW5vIGxldG8nIDogJ2VuaW0gbGV0b20nO1xuICAgICAgICAgICAgY2FzZSAneXknOlxuICAgICAgICAgICAgICAgIGlmIChudW1iZXIgPT09IDEpIHtcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0ICs9IHdpdGhvdXRTdWZmaXggfHwgaXNGdXR1cmUgPyAnbGV0bycgOiAnbGV0b20nO1xuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAobnVtYmVyID09PSAyKSB7XG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdCArPSB3aXRob3V0U3VmZml4IHx8IGlzRnV0dXJlID8gJ2xldGknIDogJ2xldG9tYSc7XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChudW1iZXIgPCA1KSB7XG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdCArPSB3aXRob3V0U3VmZml4IHx8IGlzRnV0dXJlID8gJ2xldGEnIDogJ2xldGknO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdCArPSB3aXRob3V0U3VmZml4IHx8IGlzRnV0dXJlID8gJ2xldCcgOiAnbGV0aSc7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICB2YXIgc2wgPSBtb21lbnQuZGVmaW5lTG9jYWxlKCdzbCcsIHtcbiAgICAgICAgbW9udGhzOiAnamFudWFyX2ZlYnJ1YXJfbWFyZWNfYXByaWxfbWFqX2p1bmlqX2p1bGlqX2F2Z3VzdF9zZXB0ZW1iZXJfb2t0b2Jlcl9ub3ZlbWJlcl9kZWNlbWJlcicuc3BsaXQoXG4gICAgICAgICAgICAnXydcbiAgICAgICAgKSxcbiAgICAgICAgbW9udGhzU2hvcnQ6XG4gICAgICAgICAgICAnamFuLl9mZWIuX21hci5fYXByLl9tYWouX2p1bi5fanVsLl9hdmcuX3NlcC5fb2t0Ll9ub3YuX2RlYy4nLnNwbGl0KFxuICAgICAgICAgICAgICAgICdfJ1xuICAgICAgICAgICAgKSxcbiAgICAgICAgbW9udGhzUGFyc2VFeGFjdDogdHJ1ZSxcbiAgICAgICAgd2Vla2RheXM6ICduZWRlbGphX3BvbmVkZWxqZWtfdG9yZWtfc3JlZGFfxI1ldHJ0ZWtfcGV0ZWtfc29ib3RhJy5zcGxpdCgnXycpLFxuICAgICAgICB3ZWVrZGF5c1Nob3J0OiAnbmVkLl9wb24uX3Rvci5fc3JlLl/EjWV0Ll9wZXQuX3NvYi4nLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzTWluOiAnbmVfcG9fdG9fc3JfxI1lX3BlX3NvJy5zcGxpdCgnXycpLFxuICAgICAgICB3ZWVrZGF5c1BhcnNlRXhhY3Q6IHRydWUsXG4gICAgICAgIGxvbmdEYXRlRm9ybWF0OiB7XG4gICAgICAgICAgICBMVDogJ0g6bW0nLFxuICAgICAgICAgICAgTFRTOiAnSDptbTpzcycsXG4gICAgICAgICAgICBMOiAnREQuIE1NLiBZWVlZJyxcbiAgICAgICAgICAgIExMOiAnRC4gTU1NTSBZWVlZJyxcbiAgICAgICAgICAgIExMTDogJ0QuIE1NTU0gWVlZWSBIOm1tJyxcbiAgICAgICAgICAgIExMTEw6ICdkZGRkLCBELiBNTU1NIFlZWVkgSDptbScsXG4gICAgICAgIH0sXG4gICAgICAgIGNhbGVuZGFyOiB7XG4gICAgICAgICAgICBzYW1lRGF5OiAnW2RhbmVzIG9iXSBMVCcsXG4gICAgICAgICAgICBuZXh0RGF5OiAnW2p1dHJpIG9iXSBMVCcsXG5cbiAgICAgICAgICAgIG5leHRXZWVrOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgc3dpdGNoICh0aGlzLmRheSgpKSB7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgMDpcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAnW3ZdIFtuZWRlbGpvXSBbb2JdIExUJztcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAzOlxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICdbdl0gW3NyZWRvXSBbb2JdIExUJztcbiAgICAgICAgICAgICAgICAgICAgY2FzZSA2OlxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICdbdl0gW3NvYm90b10gW29iXSBMVCc7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgMTpcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAyOlxuICAgICAgICAgICAgICAgICAgICBjYXNlIDQ6XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgNTpcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAnW3ZdIGRkZGQgW29iXSBMVCc7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGxhc3REYXk6ICdbdsSNZXJhaiBvYl0gTFQnLFxuICAgICAgICAgICAgbGFzdFdlZWs6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICBzd2l0Y2ggKHRoaXMuZGF5KCkpIHtcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAwOlxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICdbcHJlasWhbmpvXSBbbmVkZWxqb10gW29iXSBMVCc7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgMzpcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAnW3ByZWrFoW5qb10gW3NyZWRvXSBbb2JdIExUJztcbiAgICAgICAgICAgICAgICAgICAgY2FzZSA2OlxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICdbcHJlasWhbmpvXSBbc29ib3RvXSBbb2JdIExUJztcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAxOlxuICAgICAgICAgICAgICAgICAgICBjYXNlIDI6XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgNDpcbiAgICAgICAgICAgICAgICAgICAgY2FzZSA1OlxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICdbcHJlasWhbmppXSBkZGRkIFtvYl0gTFQnO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBzYW1lRWxzZTogJ0wnLFxuICAgICAgICB9LFxuICAgICAgICByZWxhdGl2ZVRpbWU6IHtcbiAgICAgICAgICAgIGZ1dHVyZTogJ8SNZXogJXMnLFxuICAgICAgICAgICAgcGFzdDogJ3ByZWQgJXMnLFxuICAgICAgICAgICAgczogcHJvY2Vzc1JlbGF0aXZlVGltZSxcbiAgICAgICAgICAgIHNzOiBwcm9jZXNzUmVsYXRpdmVUaW1lLFxuICAgICAgICAgICAgbTogcHJvY2Vzc1JlbGF0aXZlVGltZSxcbiAgICAgICAgICAgIG1tOiBwcm9jZXNzUmVsYXRpdmVUaW1lLFxuICAgICAgICAgICAgaDogcHJvY2Vzc1JlbGF0aXZlVGltZSxcbiAgICAgICAgICAgIGhoOiBwcm9jZXNzUmVsYXRpdmVUaW1lLFxuICAgICAgICAgICAgZDogcHJvY2Vzc1JlbGF0aXZlVGltZSxcbiAgICAgICAgICAgIGRkOiBwcm9jZXNzUmVsYXRpdmVUaW1lLFxuICAgICAgICAgICAgTTogcHJvY2Vzc1JlbGF0aXZlVGltZSxcbiAgICAgICAgICAgIE1NOiBwcm9jZXNzUmVsYXRpdmVUaW1lLFxuICAgICAgICAgICAgeTogcHJvY2Vzc1JlbGF0aXZlVGltZSxcbiAgICAgICAgICAgIHl5OiBwcm9jZXNzUmVsYXRpdmVUaW1lLFxuICAgICAgICB9LFxuICAgICAgICBkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOiAvXFxkezEsMn1cXC4vLFxuICAgICAgICBvcmRpbmFsOiAnJWQuJyxcbiAgICAgICAgd2Vlazoge1xuICAgICAgICAgICAgZG93OiAxLCAvLyBNb25kYXkgaXMgdGhlIGZpcnN0IGRheSBvZiB0aGUgd2Vlay5cbiAgICAgICAgICAgIGRveTogNywgLy8gVGhlIHdlZWsgdGhhdCBjb250YWlucyBKYW4gN3RoIGlzIHRoZSBmaXJzdCB3ZWVrIG9mIHRoZSB5ZWFyLlxuICAgICAgICB9LFxuICAgIH0pO1xuXG4gICAgcmV0dXJuIHNsO1xuXG59KSkpO1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///46637\n")},46889:(I,g,t)=>{"use strict";I.exports=t.p+"3ba9d142d23b008b564c.png"},47763:(module,__unused_webpack_exports,__webpack_require__)=>{"use strict";eval("\n\nvar enhanceError = __webpack_require__(5449);\n\n/**\n * Create an Error with the specified message, config, error code, request and response.\n *\n * @param {string} message The error message.\n * @param {Object} config The config.\n * @param {string} [code] The error code (for example, 'ECONNABORTED').\n * @param {Object} [request] The request.\n * @param {Object} [response] The response.\n * @returns {Error} The created error.\n */\nmodule.exports = function createError(message, config, code, request, response) {\n var error = new Error(message);\n return enhanceError(error, config, code, request, response);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNDc3NjMuanMiLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vaXRnLW5leHRnZW4tZnJvbnRlbmQvLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2NvcmUvY3JlYXRlRXJyb3IuanM/MmQ4MyJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciBlbmhhbmNlRXJyb3IgPSByZXF1aXJlKCcuL2VuaGFuY2VFcnJvcicpO1xuXG4vKipcbiAqIENyZWF0ZSBhbiBFcnJvciB3aXRoIHRoZSBzcGVjaWZpZWQgbWVzc2FnZSwgY29uZmlnLCBlcnJvciBjb2RlLCByZXF1ZXN0IGFuZCByZXNwb25zZS5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gbWVzc2FnZSBUaGUgZXJyb3IgbWVzc2FnZS5cbiAqIEBwYXJhbSB7T2JqZWN0fSBjb25maWcgVGhlIGNvbmZpZy5cbiAqIEBwYXJhbSB7c3RyaW5nfSBbY29kZV0gVGhlIGVycm9yIGNvZGUgKGZvciBleGFtcGxlLCAnRUNPTk5BQk9SVEVEJykuXG4gKiBAcGFyYW0ge09iamVjdH0gW3JlcXVlc3RdIFRoZSByZXF1ZXN0LlxuICogQHBhcmFtIHtPYmplY3R9IFtyZXNwb25zZV0gVGhlIHJlc3BvbnNlLlxuICogQHJldHVybnMge0Vycm9yfSBUaGUgY3JlYXRlZCBlcnJvci5cbiAqL1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBjcmVhdGVFcnJvcihtZXNzYWdlLCBjb25maWcsIGNvZGUsIHJlcXVlc3QsIHJlc3BvbnNlKSB7XG4gIHZhciBlcnJvciA9IG5ldyBFcnJvcihtZXNzYWdlKTtcbiAgcmV0dXJuIGVuaGFuY2VFcnJvcihlcnJvciwgY29uZmlnLCBjb2RlLCByZXF1ZXN0LCByZXNwb25zZSk7XG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///47763\n")},47777:function(__unused_webpack_module,__unused_webpack_exports,__webpack_require__){eval("//! moment.js locale configuration\n//! locale : Bulgarian [bg]\n//! author : Krasen Borisov : https://github.com/kraz\n\n;(function (global, factory) {\n true ? factory(__webpack_require__(95093)) :\n 0\n}(this, (function (moment) { 'use strict';\n\n //! moment.js locale configuration\n\n var bg = moment.defineLocale('bg', {\n months: 'януари_февруари_март_април_май_юни_юли_август_септември_октомври_ноември_декември'.split(\n '_'\n ),\n monthsShort: 'яну_фев_мар_апр_май_юни_юли_авг_сеп_окт_ное_дек'.split('_'),\n weekdays: 'неделя_понеделник_вторник_сряда_четвъртък_петък_събота'.split(\n '_'\n ),\n weekdaysShort: 'нед_пон_вто_сря_чет_пет_съб'.split('_'),\n weekdaysMin: 'нд_пн_вт_ср_чт_пт_сб'.split('_'),\n longDateFormat: {\n LT: 'H:mm',\n LTS: 'H:mm:ss',\n L: 'D.MM.YYYY',\n LL: 'D MMMM YYYY',\n LLL: 'D MMMM YYYY H:mm',\n LLLL: 'dddd, D MMMM YYYY H:mm',\n },\n calendar: {\n sameDay: '[Днес в] LT',\n nextDay: '[Утре в] LT',\n nextWeek: 'dddd [в] LT',\n lastDay: '[Вчера в] LT',\n lastWeek: function () {\n switch (this.day()) {\n case 0:\n case 3:\n case 6:\n return '[Миналата] dddd [в] LT';\n case 1:\n case 2:\n case 4:\n case 5:\n return '[Миналия] dddd [в] LT';\n }\n },\n sameElse: 'L',\n },\n relativeTime: {\n future: 'след %s',\n past: 'преди %s',\n s: 'няколко секунди',\n ss: '%d секунди',\n m: 'минута',\n mm: '%d минути',\n h: 'час',\n hh: '%d часа',\n d: 'ден',\n dd: '%d дена',\n w: 'седмица',\n ww: '%d седмици',\n M: 'месец',\n MM: '%d месеца',\n y: 'година',\n yy: '%d години',\n },\n dayOfMonthOrdinalParse: /\\d{1,2}-(ев|ен|ти|ви|ри|ми)/,\n ordinal: function (number) {\n var lastDigit = number % 10,\n last2Digits = number % 100;\n if (number === 0) {\n return number + '-ев';\n } else if (last2Digits === 0) {\n return number + '-ен';\n } else if (last2Digits > 10 && last2Digits < 20) {\n return number + '-ти';\n } else if (lastDigit === 1) {\n return number + '-ви';\n } else if (lastDigit === 2) {\n return number + '-ри';\n } else if (lastDigit === 7 || lastDigit === 8) {\n return number + '-ми';\n } else {\n return number + '-ти';\n }\n },\n week: {\n dow: 1, // Monday is the first day of the week.\n doy: 7, // The week that contains Jan 7th is the first week of the year.\n },\n });\n\n return bg;\n\n})));\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNDc3NzcuanMiLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vaXRnLW5leHRnZW4tZnJvbnRlbmQvLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9iZy5qcz84NGFhIl0sInNvdXJjZXNDb250ZW50IjpbIi8vISBtb21lbnQuanMgbG9jYWxlIGNvbmZpZ3VyYXRpb25cbi8vISBsb2NhbGUgOiBCdWxnYXJpYW4gW2JnXVxuLy8hIGF1dGhvciA6IEtyYXNlbiBCb3Jpc292IDogaHR0cHM6Ly9naXRodWIuY29tL2tyYXpcblxuOyhmdW5jdGlvbiAoZ2xvYmFsLCBmYWN0b3J5KSB7XG4gICB0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcgJiYgdHlwZW9mIG1vZHVsZSAhPT0gJ3VuZGVmaW5lZCdcbiAgICAgICAmJiB0eXBlb2YgcmVxdWlyZSA9PT0gJ2Z1bmN0aW9uJyA/IGZhY3RvcnkocmVxdWlyZSgnLi4vbW9tZW50JykpIDpcbiAgIHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgZGVmaW5lLmFtZCA/IGRlZmluZShbJy4uL21vbWVudCddLCBmYWN0b3J5KSA6XG4gICBmYWN0b3J5KGdsb2JhbC5tb21lbnQpXG59KHRoaXMsIChmdW5jdGlvbiAobW9tZW50KSB7ICd1c2Ugc3RyaWN0JztcblxuICAgIC8vISBtb21lbnQuanMgbG9jYWxlIGNvbmZpZ3VyYXRpb25cblxuICAgIHZhciBiZyA9IG1vbWVudC5kZWZpbmVMb2NhbGUoJ2JnJywge1xuICAgICAgICBtb250aHM6ICfRj9C90YPQsNGA0Lhf0YTQtdCy0YDRg9Cw0YDQuF/QvNCw0YDRgl/QsNC/0YDQuNC7X9C80LDQuV/RjtC90Lhf0Y7Qu9C4X9Cw0LLQs9GD0YHRgl/RgdC10L/RgtC10LzQstGA0Lhf0L7QutGC0L7QvNCy0YDQuF/QvdC+0LXQvNCy0YDQuF/QtNC10LrQtdC80LLRgNC4Jy5zcGxpdChcbiAgICAgICAgICAgICdfJ1xuICAgICAgICApLFxuICAgICAgICBtb250aHNTaG9ydDogJ9GP0L3Rg1/RhNC10LJf0LzQsNGAX9Cw0L/RgF/QvNCw0Llf0Y7QvdC4X9GO0LvQuF/QsNCy0LNf0YHQtdC/X9C+0LrRgl/QvdC+0LVf0LTQtdC6Jy5zcGxpdCgnXycpLFxuICAgICAgICB3ZWVrZGF5czogJ9C90LXQtNC10LvRj1/Qv9C+0L3QtdC00LXQu9C90LjQul/QstGC0L7RgNC90LjQul/RgdGA0Y/QtNCwX9GH0LXRgtCy0YrRgNGC0YrQul/Qv9C10YLRitC6X9GB0YrQsdC+0YLQsCcuc3BsaXQoXG4gICAgICAgICAgICAnXydcbiAgICAgICAgKSxcbiAgICAgICAgd2Vla2RheXNTaG9ydDogJ9C90LXQtF/Qv9C+0L1f0LLRgtC+X9GB0YDRj1/Rh9C10YJf0L/QtdGCX9GB0YrQsScuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXNNaW46ICfQvdC0X9C/0L1f0LLRgl/RgdGAX9GH0YJf0L/Rgl/RgdCxJy5zcGxpdCgnXycpLFxuICAgICAgICBsb25nRGF0ZUZvcm1hdDoge1xuICAgICAgICAgICAgTFQ6ICdIOm1tJyxcbiAgICAgICAgICAgIExUUzogJ0g6bW06c3MnLFxuICAgICAgICAgICAgTDogJ0QuTU0uWVlZWScsXG4gICAgICAgICAgICBMTDogJ0QgTU1NTSBZWVlZJyxcbiAgICAgICAgICAgIExMTDogJ0QgTU1NTSBZWVlZIEg6bW0nLFxuICAgICAgICAgICAgTExMTDogJ2RkZGQsIEQgTU1NTSBZWVlZIEg6bW0nLFxuICAgICAgICB9LFxuICAgICAgICBjYWxlbmRhcjoge1xuICAgICAgICAgICAgc2FtZURheTogJ1vQlNC90LXRgSDQsl0gTFQnLFxuICAgICAgICAgICAgbmV4dERheTogJ1vQo9GC0YDQtSDQsl0gTFQnLFxuICAgICAgICAgICAgbmV4dFdlZWs6ICdkZGRkIFvQsl0gTFQnLFxuICAgICAgICAgICAgbGFzdERheTogJ1vQktGH0LXRgNCwINCyXSBMVCcsXG4gICAgICAgICAgICBsYXN0V2VlazogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIHN3aXRjaCAodGhpcy5kYXkoKSkge1xuICAgICAgICAgICAgICAgICAgICBjYXNlIDA6XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgMzpcbiAgICAgICAgICAgICAgICAgICAgY2FzZSA2OlxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICdb0JzQuNC90LDQu9Cw0YLQsF0gZGRkZCBb0LJdIExUJztcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAxOlxuICAgICAgICAgICAgICAgICAgICBjYXNlIDI6XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgNDpcbiAgICAgICAgICAgICAgICAgICAgY2FzZSA1OlxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICdb0JzQuNC90LDQu9C40Y9dIGRkZGQgW9CyXSBMVCc7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHNhbWVFbHNlOiAnTCcsXG4gICAgICAgIH0sXG4gICAgICAgIHJlbGF0aXZlVGltZToge1xuICAgICAgICAgICAgZnV0dXJlOiAn0YHQu9C10LQgJXMnLFxuICAgICAgICAgICAgcGFzdDogJ9C/0YDQtdC00LggJXMnLFxuICAgICAgICAgICAgczogJ9C90Y/QutC+0LvQutC+INGB0LXQutGD0L3QtNC4JyxcbiAgICAgICAgICAgIHNzOiAnJWQg0YHQtdC60YPQvdC00LgnLFxuICAgICAgICAgICAgbTogJ9C80LjQvdGD0YLQsCcsXG4gICAgICAgICAgICBtbTogJyVkINC80LjQvdGD0YLQuCcsXG4gICAgICAgICAgICBoOiAn0YfQsNGBJyxcbiAgICAgICAgICAgIGhoOiAnJWQg0YfQsNGB0LAnLFxuICAgICAgICAgICAgZDogJ9C00LXQvScsXG4gICAgICAgICAgICBkZDogJyVkINC00LXQvdCwJyxcbiAgICAgICAgICAgIHc6ICfRgdC10LTQvNC40YbQsCcsXG4gICAgICAgICAgICB3dzogJyVkINGB0LXQtNC80LjRhtC4JyxcbiAgICAgICAgICAgIE06ICfQvNC10YHQtdGGJyxcbiAgICAgICAgICAgIE1NOiAnJWQg0LzQtdGB0LXRhtCwJyxcbiAgICAgICAgICAgIHk6ICfQs9C+0LTQuNC90LAnLFxuICAgICAgICAgICAgeXk6ICclZCDQs9C+0LTQuNC90LgnLFxuICAgICAgICB9LFxuICAgICAgICBkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOiAvXFxkezEsMn0tKNC10LJ80LXQvXzRgtC4fNCy0Lh80YDQuHzQvNC4KS8sXG4gICAgICAgIG9yZGluYWw6IGZ1bmN0aW9uIChudW1iZXIpIHtcbiAgICAgICAgICAgIHZhciBsYXN0RGlnaXQgPSBudW1iZXIgJSAxMCxcbiAgICAgICAgICAgICAgICBsYXN0MkRpZ2l0cyA9IG51bWJlciAlIDEwMDtcbiAgICAgICAgICAgIGlmIChudW1iZXIgPT09IDApIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gbnVtYmVyICsgJy3QtdCyJztcbiAgICAgICAgICAgIH0gZWxzZSBpZiAobGFzdDJEaWdpdHMgPT09IDApIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gbnVtYmVyICsgJy3QtdC9JztcbiAgICAgICAgICAgIH0gZWxzZSBpZiAobGFzdDJEaWdpdHMgPiAxMCAmJiBsYXN0MkRpZ2l0cyA8IDIwKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG51bWJlciArICct0YLQuCc7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGxhc3REaWdpdCA9PT0gMSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBudW1iZXIgKyAnLdCy0LgnO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChsYXN0RGlnaXQgPT09IDIpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gbnVtYmVyICsgJy3RgNC4JztcbiAgICAgICAgICAgIH0gZWxzZSBpZiAobGFzdERpZ2l0ID09PSA3IHx8IGxhc3REaWdpdCA9PT0gOCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBudW1iZXIgKyAnLdC80LgnO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gbnVtYmVyICsgJy3RgtC4JztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgd2Vlazoge1xuICAgICAgICAgICAgZG93OiAxLCAvLyBNb25kYXkgaXMgdGhlIGZpcnN0IGRheSBvZiB0aGUgd2Vlay5cbiAgICAgICAgICAgIGRveTogNywgLy8gVGhlIHdlZWsgdGhhdCBjb250YWlucyBKYW4gN3RoIGlzIHRoZSBmaXJzdCB3ZWVrIG9mIHRoZSB5ZWFyLlxuICAgICAgICB9LFxuICAgIH0pO1xuXG4gICAgcmV0dXJuIGJnO1xuXG59KSkpO1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///47777\n")},48287:(__unused_webpack_module,exports,__webpack_require__)=>{"use strict";eval("/*!\n * The buffer module from node.js, for the browser.\n *\n * @author Feross Aboukhadijeh \n * @license MIT\n */\n/* eslint-disable no-proto */\n\n\n\nconst base64 = __webpack_require__(67526)\nconst ieee754 = __webpack_require__(251)\nconst customInspectSymbol =\n (typeof Symbol === 'function' && typeof Symbol['for'] === 'function') // eslint-disable-line dot-notation\n ? Symbol['for']('nodejs.util.inspect.custom') // eslint-disable-line dot-notation\n : null\n\nexports.Buffer = Buffer\nexports.SlowBuffer = SlowBuffer\nexports.INSPECT_MAX_BYTES = 50\n\nconst K_MAX_LENGTH = 0x7fffffff\nexports.kMaxLength = K_MAX_LENGTH\n\n/**\n * If `Buffer.TYPED_ARRAY_SUPPORT`:\n * === true Use Uint8Array implementation (fastest)\n * === false Print warning and recommend using `buffer` v4.x which has an Object\n * implementation (most compatible, even IE6)\n *\n * Browsers that support typed arrays are IE 10+, Firefox 4+, Chrome 7+, Safari 5.1+,\n * Opera 11.6+, iOS 4.2+.\n *\n * We report that the browser does not support typed arrays if the are not subclassable\n * using __proto__. Firefox 4-29 lacks support for adding new properties to `Uint8Array`\n * (See: https://bugzilla.mozilla.org/show_bug.cgi?id=695438). IE 10 lacks support\n * for __proto__ and has a buggy typed array implementation.\n */\nBuffer.TYPED_ARRAY_SUPPORT = typedArraySupport()\n\nif (!Buffer.TYPED_ARRAY_SUPPORT && typeof console !== 'undefined' &&\n typeof console.error === 'function') {\n console.error(\n 'This browser lacks typed array (Uint8Array) support which is required by ' +\n '`buffer` v5.x. Use `buffer` v4.x if you require old browser support.'\n )\n}\n\nfunction typedArraySupport () {\n // Can typed array instances can be augmented?\n try {\n const arr = new Uint8Array(1)\n const proto = { foo: function () { return 42 } }\n Object.setPrototypeOf(proto, Uint8Array.prototype)\n Object.setPrototypeOf(arr, proto)\n return arr.foo() === 42\n } catch (e) {\n return false\n }\n}\n\nObject.defineProperty(Buffer.prototype, 'parent', {\n enumerable: true,\n get: function () {\n if (!Buffer.isBuffer(this)) return undefined\n return this.buffer\n }\n})\n\nObject.defineProperty(Buffer.prototype, 'offset', {\n enumerable: true,\n get: function () {\n if (!Buffer.isBuffer(this)) return undefined\n return this.byteOffset\n }\n})\n\nfunction createBuffer (length) {\n if (length > K_MAX_LENGTH) {\n throw new RangeError('The value \"' + length + '\" is invalid for option \"size\"')\n }\n // Return an augmented `Uint8Array` instance\n const buf = new Uint8Array(length)\n Object.setPrototypeOf(buf, Buffer.prototype)\n return buf\n}\n\n/**\n * The Buffer constructor returns instances of `Uint8Array` that have their\n * prototype changed to `Buffer.prototype`. Furthermore, `Buffer` is a subclass of\n * `Uint8Array`, so the returned instances will have all the node `Buffer` methods\n * and the `Uint8Array` methods. Square bracket notation works as expected -- it\n * returns a single octet.\n *\n * The `Uint8Array` prototype remains unmodified.\n */\n\nfunction Buffer (arg, encodingOrOffset, length) {\n // Common case.\n if (typeof arg === 'number') {\n if (typeof encodingOrOffset === 'string') {\n throw new TypeError(\n 'The \"string\" argument must be of type string. Received type number'\n )\n }\n return allocUnsafe(arg)\n }\n return from(arg, encodingOrOffset, length)\n}\n\nBuffer.poolSize = 8192 // not used by this implementation\n\nfunction from (value, encodingOrOffset, length) {\n if (typeof value === 'string') {\n return fromString(value, encodingOrOffset)\n }\n\n if (ArrayBuffer.isView(value)) {\n return fromArrayView(value)\n }\n\n if (value == null) {\n throw new TypeError(\n 'The first argument must be one of type string, Buffer, ArrayBuffer, Array, ' +\n 'or Array-like Object. Received type ' + (typeof value)\n )\n }\n\n if (isInstance(value, ArrayBuffer) ||\n (value && isInstance(value.buffer, ArrayBuffer))) {\n return fromArrayBuffer(value, encodingOrOffset, length)\n }\n\n if (typeof SharedArrayBuffer !== 'undefined' &&\n (isInstance(value, SharedArrayBuffer) ||\n (value && isInstance(value.buffer, SharedArrayBuffer)))) {\n return fromArrayBuffer(value, encodingOrOffset, length)\n }\n\n if (typeof value === 'number') {\n throw new TypeError(\n 'The \"value\" argument must not be of type number. Received type number'\n )\n }\n\n const valueOf = value.valueOf && value.valueOf()\n if (valueOf != null && valueOf !== value) {\n return Buffer.from(valueOf, encodingOrOffset, length)\n }\n\n const b = fromObject(value)\n if (b) return b\n\n if (typeof Symbol !== 'undefined' && Symbol.toPrimitive != null &&\n typeof value[Symbol.toPrimitive] === 'function') {\n return Buffer.from(value[Symbol.toPrimitive]('string'), encodingOrOffset, length)\n }\n\n throw new TypeError(\n 'The first argument must be one of type string, Buffer, ArrayBuffer, Array, ' +\n 'or Array-like Object. Received type ' + (typeof value)\n )\n}\n\n/**\n * Functionally equivalent to Buffer(arg, encoding) but throws a TypeError\n * if value is a number.\n * Buffer.from(str[, encoding])\n * Buffer.from(array)\n * Buffer.from(buffer)\n * Buffer.from(arrayBuffer[, byteOffset[, length]])\n **/\nBuffer.from = function (value, encodingOrOffset, length) {\n return from(value, encodingOrOffset, length)\n}\n\n// Note: Change prototype *after* Buffer.from is defined to workaround Chrome bug:\n// https://github.com/feross/buffer/pull/148\nObject.setPrototypeOf(Buffer.prototype, Uint8Array.prototype)\nObject.setPrototypeOf(Buffer, Uint8Array)\n\nfunction assertSize (size) {\n if (typeof size !== 'number') {\n throw new TypeError('\"size\" argument must be of type number')\n } else if (size < 0) {\n throw new RangeError('The value \"' + size + '\" is invalid for option \"size\"')\n }\n}\n\nfunction alloc (size, fill, encoding) {\n assertSize(size)\n if (size <= 0) {\n return createBuffer(size)\n }\n if (fill !== undefined) {\n // Only pay attention to encoding if it's a string. This\n // prevents accidentally sending in a number that would\n // be interpreted as a start offset.\n return typeof encoding === 'string'\n ? createBuffer(size).fill(fill, encoding)\n : createBuffer(size).fill(fill)\n }\n return createBuffer(size)\n}\n\n/**\n * Creates a new filled Buffer instance.\n * alloc(size[, fill[, encoding]])\n **/\nBuffer.alloc = function (size, fill, encoding) {\n return alloc(size, fill, encoding)\n}\n\nfunction allocUnsafe (size) {\n assertSize(size)\n return createBuffer(size < 0 ? 0 : checked(size) | 0)\n}\n\n/**\n * Equivalent to Buffer(num), by default creates a non-zero-filled Buffer instance.\n * */\nBuffer.allocUnsafe = function (size) {\n return allocUnsafe(size)\n}\n/**\n * Equivalent to SlowBuffer(num), by default creates a non-zero-filled Buffer instance.\n */\nBuffer.allocUnsafeSlow = function (size) {\n return allocUnsafe(size)\n}\n\nfunction fromString (string, encoding) {\n if (typeof encoding !== 'string' || encoding === '') {\n encoding = 'utf8'\n }\n\n if (!Buffer.isEncoding(encoding)) {\n throw new TypeError('Unknown encoding: ' + encoding)\n }\n\n const length = byteLength(string, encoding) | 0\n let buf = createBuffer(length)\n\n const actual = buf.write(string, encoding)\n\n if (actual !== length) {\n // Writing a hex string, for example, that contains invalid characters will\n // cause everything after the first invalid character to be ignored. (e.g.\n // 'abxxcd' will be treated as 'ab')\n buf = buf.slice(0, actual)\n }\n\n return buf\n}\n\nfunction fromArrayLike (array) {\n const length = array.length < 0 ? 0 : checked(array.length) | 0\n const buf = createBuffer(length)\n for (let i = 0; i < length; i += 1) {\n buf[i] = array[i] & 255\n }\n return buf\n}\n\nfunction fromArrayView (arrayView) {\n if (isInstance(arrayView, Uint8Array)) {\n const copy = new Uint8Array(arrayView)\n return fromArrayBuffer(copy.buffer, copy.byteOffset, copy.byteLength)\n }\n return fromArrayLike(arrayView)\n}\n\nfunction fromArrayBuffer (array, byteOffset, length) {\n if (byteOffset < 0 || array.byteLength < byteOffset) {\n throw new RangeError('\"offset\" is outside of buffer bounds')\n }\n\n if (array.byteLength < byteOffset + (length || 0)) {\n throw new RangeError('\"length\" is outside of buffer bounds')\n }\n\n let buf\n if (byteOffset === undefined && length === undefined) {\n buf = new Uint8Array(array)\n } else if (length === undefined) {\n buf = new Uint8Array(array, byteOffset)\n } else {\n buf = new Uint8Array(array, byteOffset, length)\n }\n\n // Return an augmented `Uint8Array` instance\n Object.setPrototypeOf(buf, Buffer.prototype)\n\n return buf\n}\n\nfunction fromObject (obj) {\n if (Buffer.isBuffer(obj)) {\n const len = checked(obj.length) | 0\n const buf = createBuffer(len)\n\n if (buf.length === 0) {\n return buf\n }\n\n obj.copy(buf, 0, 0, len)\n return buf\n }\n\n if (obj.length !== undefined) {\n if (typeof obj.length !== 'number' || numberIsNaN(obj.length)) {\n return createBuffer(0)\n }\n return fromArrayLike(obj)\n }\n\n if (obj.type === 'Buffer' && Array.isArray(obj.data)) {\n return fromArrayLike(obj.data)\n }\n}\n\nfunction checked (length) {\n // Note: cannot use `length < K_MAX_LENGTH` here because that fails when\n // length is NaN (which is otherwise coerced to zero.)\n if (length >= K_MAX_LENGTH) {\n throw new RangeError('Attempt to allocate Buffer larger than maximum ' +\n 'size: 0x' + K_MAX_LENGTH.toString(16) + ' bytes')\n }\n return length | 0\n}\n\nfunction SlowBuffer (length) {\n if (+length != length) { // eslint-disable-line eqeqeq\n length = 0\n }\n return Buffer.alloc(+length)\n}\n\nBuffer.isBuffer = function isBuffer (b) {\n return b != null && b._isBuffer === true &&\n b !== Buffer.prototype // so Buffer.isBuffer(Buffer.prototype) will be false\n}\n\nBuffer.compare = function compare (a, b) {\n if (isInstance(a, Uint8Array)) a = Buffer.from(a, a.offset, a.byteLength)\n if (isInstance(b, Uint8Array)) b = Buffer.from(b, b.offset, b.byteLength)\n if (!Buffer.isBuffer(a) || !Buffer.isBuffer(b)) {\n throw new TypeError(\n 'The \"buf1\", \"buf2\" arguments must be one of type Buffer or Uint8Array'\n )\n }\n\n if (a === b) return 0\n\n let x = a.length\n let y = b.length\n\n for (let i = 0, len = Math.min(x, y); i < len; ++i) {\n if (a[i] !== b[i]) {\n x = a[i]\n y = b[i]\n break\n }\n }\n\n if (x < y) return -1\n if (y < x) return 1\n return 0\n}\n\nBuffer.isEncoding = function isEncoding (encoding) {\n switch (String(encoding).toLowerCase()) {\n case 'hex':\n case 'utf8':\n case 'utf-8':\n case 'ascii':\n case 'latin1':\n case 'binary':\n case 'base64':\n case 'ucs2':\n case 'ucs-2':\n case 'utf16le':\n case 'utf-16le':\n return true\n default:\n return false\n }\n}\n\nBuffer.concat = function concat (list, length) {\n if (!Array.isArray(list)) {\n throw new TypeError('\"list\" argument must be an Array of Buffers')\n }\n\n if (list.length === 0) {\n return Buffer.alloc(0)\n }\n\n let i\n if (length === undefined) {\n length = 0\n for (i = 0; i < list.length; ++i) {\n length += list[i].length\n }\n }\n\n const buffer = Buffer.allocUnsafe(length)\n let pos = 0\n for (i = 0; i < list.length; ++i) {\n let buf = list[i]\n if (isInstance(buf, Uint8Array)) {\n if (pos + buf.length > buffer.length) {\n if (!Buffer.isBuffer(buf)) buf = Buffer.from(buf)\n buf.copy(buffer, pos)\n } else {\n Uint8Array.prototype.set.call(\n buffer,\n buf,\n pos\n )\n }\n } else if (!Buffer.isBuffer(buf)) {\n throw new TypeError('\"list\" argument must be an Array of Buffers')\n } else {\n buf.copy(buffer, pos)\n }\n pos += buf.length\n }\n return buffer\n}\n\nfunction byteLength (string, encoding) {\n if (Buffer.isBuffer(string)) {\n return string.length\n }\n if (ArrayBuffer.isView(string) || isInstance(string, ArrayBuffer)) {\n return string.byteLength\n }\n if (typeof string !== 'string') {\n throw new TypeError(\n 'The \"string\" argument must be one of type string, Buffer, or ArrayBuffer. ' +\n 'Received type ' + typeof string\n )\n }\n\n const len = string.length\n const mustMatch = (arguments.length > 2 && arguments[2] === true)\n if (!mustMatch && len === 0) return 0\n\n // Use a for loop to avoid recursion\n let loweredCase = false\n for (;;) {\n switch (encoding) {\n case 'ascii':\n case 'latin1':\n case 'binary':\n return len\n case 'utf8':\n case 'utf-8':\n return utf8ToBytes(string).length\n case 'ucs2':\n case 'ucs-2':\n case 'utf16le':\n case 'utf-16le':\n return len * 2\n case 'hex':\n return len >>> 1\n case 'base64':\n return base64ToBytes(string).length\n default:\n if (loweredCase) {\n return mustMatch ? -1 : utf8ToBytes(string).length // assume utf8\n }\n encoding = ('' + encoding).toLowerCase()\n loweredCase = true\n }\n }\n}\nBuffer.byteLength = byteLength\n\nfunction slowToString (encoding, start, end) {\n let loweredCase = false\n\n // No need to verify that \"this.length <= MAX_UINT32\" since it's a read-only\n // property of a typed array.\n\n // This behaves neither like String nor Uint8Array in that we set start/end\n // to their upper/lower bounds if the value passed is out of range.\n // undefined is handled specially as per ECMA-262 6th Edition,\n // Section 13.3.3.7 Runtime Semantics: KeyedBindingInitialization.\n if (start === undefined || start < 0) {\n start = 0\n }\n // Return early if start > this.length. Done here to prevent potential uint32\n // coercion fail below.\n if (start > this.length) {\n return ''\n }\n\n if (end === undefined || end > this.length) {\n end = this.length\n }\n\n if (end <= 0) {\n return ''\n }\n\n // Force coercion to uint32. This will also coerce falsey/NaN values to 0.\n end >>>= 0\n start >>>= 0\n\n if (end <= start) {\n return ''\n }\n\n if (!encoding) encoding = 'utf8'\n\n while (true) {\n switch (encoding) {\n case 'hex':\n return hexSlice(this, start, end)\n\n case 'utf8':\n case 'utf-8':\n return utf8Slice(this, start, end)\n\n case 'ascii':\n return asciiSlice(this, start, end)\n\n case 'latin1':\n case 'binary':\n return latin1Slice(this, start, end)\n\n case 'base64':\n return base64Slice(this, start, end)\n\n case 'ucs2':\n case 'ucs-2':\n case 'utf16le':\n case 'utf-16le':\n return utf16leSlice(this, start, end)\n\n default:\n if (loweredCase) throw new TypeError('Unknown encoding: ' + encoding)\n encoding = (encoding + '').toLowerCase()\n loweredCase = true\n }\n }\n}\n\n// This property is used by `Buffer.isBuffer` (and the `is-buffer` npm package)\n// to detect a Buffer instance. It's not possible to use `instanceof Buffer`\n// reliably in a browserify context because there could be multiple different\n// copies of the 'buffer' package in use. This method works even for Buffer\n// instances that were created from another copy of the `buffer` package.\n// See: https://github.com/feross/buffer/issues/154\nBuffer.prototype._isBuffer = true\n\nfunction swap (b, n, m) {\n const i = b[n]\n b[n] = b[m]\n b[m] = i\n}\n\nBuffer.prototype.swap16 = function swap16 () {\n const len = this.length\n if (len % 2 !== 0) {\n throw new RangeError('Buffer size must be a multiple of 16-bits')\n }\n for (let i = 0; i < len; i += 2) {\n swap(this, i, i + 1)\n }\n return this\n}\n\nBuffer.prototype.swap32 = function swap32 () {\n const len = this.length\n if (len % 4 !== 0) {\n throw new RangeError('Buffer size must be a multiple of 32-bits')\n }\n for (let i = 0; i < len; i += 4) {\n swap(this, i, i + 3)\n swap(this, i + 1, i + 2)\n }\n return this\n}\n\nBuffer.prototype.swap64 = function swap64 () {\n const len = this.length\n if (len % 8 !== 0) {\n throw new RangeError('Buffer size must be a multiple of 64-bits')\n }\n for (let i = 0; i < len; i += 8) {\n swap(this, i, i + 7)\n swap(this, i + 1, i + 6)\n swap(this, i + 2, i + 5)\n swap(this, i + 3, i + 4)\n }\n return this\n}\n\nBuffer.prototype.toString = function toString () {\n const length = this.length\n if (length === 0) return ''\n if (arguments.length === 0) return utf8Slice(this, 0, length)\n return slowToString.apply(this, arguments)\n}\n\nBuffer.prototype.toLocaleString = Buffer.prototype.toString\n\nBuffer.prototype.equals = function equals (b) {\n if (!Buffer.isBuffer(b)) throw new TypeError('Argument must be a Buffer')\n if (this === b) return true\n return Buffer.compare(this, b) === 0\n}\n\nBuffer.prototype.inspect = function inspect () {\n let str = ''\n const max = exports.INSPECT_MAX_BYTES\n str = this.toString('hex', 0, max).replace(/(.{2})/g, '$1 ').trim()\n if (this.length > max) str += ' ... '\n return ''\n}\nif (customInspectSymbol) {\n Buffer.prototype[customInspectSymbol] = Buffer.prototype.inspect\n}\n\nBuffer.prototype.compare = function compare (target, start, end, thisStart, thisEnd) {\n if (isInstance(target, Uint8Array)) {\n target = Buffer.from(target, target.offset, target.byteLength)\n }\n if (!Buffer.isBuffer(target)) {\n throw new TypeError(\n 'The \"target\" argument must be one of type Buffer or Uint8Array. ' +\n 'Received type ' + (typeof target)\n )\n }\n\n if (start === undefined) {\n start = 0\n }\n if (end === undefined) {\n end = target ? target.length : 0\n }\n if (thisStart === undefined) {\n thisStart = 0\n }\n if (thisEnd === undefined) {\n thisEnd = this.length\n }\n\n if (start < 0 || end > target.length || thisStart < 0 || thisEnd > this.length) {\n throw new RangeError('out of range index')\n }\n\n if (thisStart >= thisEnd && start >= end) {\n return 0\n }\n if (thisStart >= thisEnd) {\n return -1\n }\n if (start >= end) {\n return 1\n }\n\n start >>>= 0\n end >>>= 0\n thisStart >>>= 0\n thisEnd >>>= 0\n\n if (this === target) return 0\n\n let x = thisEnd - thisStart\n let y = end - start\n const len = Math.min(x, y)\n\n const thisCopy = this.slice(thisStart, thisEnd)\n const targetCopy = target.slice(start, end)\n\n for (let i = 0; i < len; ++i) {\n if (thisCopy[i] !== targetCopy[i]) {\n x = thisCopy[i]\n y = targetCopy[i]\n break\n }\n }\n\n if (x < y) return -1\n if (y < x) return 1\n return 0\n}\n\n// Finds either the first index of `val` in `buffer` at offset >= `byteOffset`,\n// OR the last index of `val` in `buffer` at offset <= `byteOffset`.\n//\n// Arguments:\n// - buffer - a Buffer to search\n// - val - a string, Buffer, or number\n// - byteOffset - an index into `buffer`; will be clamped to an int32\n// - encoding - an optional encoding, relevant is val is a string\n// - dir - true for indexOf, false for lastIndexOf\nfunction bidirectionalIndexOf (buffer, val, byteOffset, encoding, dir) {\n // Empty buffer means no match\n if (buffer.length === 0) return -1\n\n // Normalize byteOffset\n if (typeof byteOffset === 'string') {\n encoding = byteOffset\n byteOffset = 0\n } else if (byteOffset > 0x7fffffff) {\n byteOffset = 0x7fffffff\n } else if (byteOffset < -0x80000000) {\n byteOffset = -0x80000000\n }\n byteOffset = +byteOffset // Coerce to Number.\n if (numberIsNaN(byteOffset)) {\n // byteOffset: it it's undefined, null, NaN, \"foo\", etc, search whole buffer\n byteOffset = dir ? 0 : (buffer.length - 1)\n }\n\n // Normalize byteOffset: negative offsets start from the end of the buffer\n if (byteOffset < 0) byteOffset = buffer.length + byteOffset\n if (byteOffset >= buffer.length) {\n if (dir) return -1\n else byteOffset = buffer.length - 1\n } else if (byteOffset < 0) {\n if (dir) byteOffset = 0\n else return -1\n }\n\n // Normalize val\n if (typeof val === 'string') {\n val = Buffer.from(val, encoding)\n }\n\n // Finally, search either indexOf (if dir is true) or lastIndexOf\n if (Buffer.isBuffer(val)) {\n // Special case: looking for empty string/buffer always fails\n if (val.length === 0) {\n return -1\n }\n return arrayIndexOf(buffer, val, byteOffset, encoding, dir)\n } else if (typeof val === 'number') {\n val = val & 0xFF // Search for a byte value [0-255]\n if (typeof Uint8Array.prototype.indexOf === 'function') {\n if (dir) {\n return Uint8Array.prototype.indexOf.call(buffer, val, byteOffset)\n } else {\n return Uint8Array.prototype.lastIndexOf.call(buffer, val, byteOffset)\n }\n }\n return arrayIndexOf(buffer, [val], byteOffset, encoding, dir)\n }\n\n throw new TypeError('val must be string, number or Buffer')\n}\n\nfunction arrayIndexOf (arr, val, byteOffset, encoding, dir) {\n let indexSize = 1\n let arrLength = arr.length\n let valLength = val.length\n\n if (encoding !== undefined) {\n encoding = String(encoding).toLowerCase()\n if (encoding === 'ucs2' || encoding === 'ucs-2' ||\n encoding === 'utf16le' || encoding === 'utf-16le') {\n if (arr.length < 2 || val.length < 2) {\n return -1\n }\n indexSize = 2\n arrLength /= 2\n valLength /= 2\n byteOffset /= 2\n }\n }\n\n function read (buf, i) {\n if (indexSize === 1) {\n return buf[i]\n } else {\n return buf.readUInt16BE(i * indexSize)\n }\n }\n\n let i\n if (dir) {\n let foundIndex = -1\n for (i = byteOffset; i < arrLength; i++) {\n if (read(arr, i) === read(val, foundIndex === -1 ? 0 : i - foundIndex)) {\n if (foundIndex === -1) foundIndex = i\n if (i - foundIndex + 1 === valLength) return foundIndex * indexSize\n } else {\n if (foundIndex !== -1) i -= i - foundIndex\n foundIndex = -1\n }\n }\n } else {\n if (byteOffset + valLength > arrLength) byteOffset = arrLength - valLength\n for (i = byteOffset; i >= 0; i--) {\n let found = true\n for (let j = 0; j < valLength; j++) {\n if (read(arr, i + j) !== read(val, j)) {\n found = false\n break\n }\n }\n if (found) return i\n }\n }\n\n return -1\n}\n\nBuffer.prototype.includes = function includes (val, byteOffset, encoding) {\n return this.indexOf(val, byteOffset, encoding) !== -1\n}\n\nBuffer.prototype.indexOf = function indexOf (val, byteOffset, encoding) {\n return bidirectionalIndexOf(this, val, byteOffset, encoding, true)\n}\n\nBuffer.prototype.lastIndexOf = function lastIndexOf (val, byteOffset, encoding) {\n return bidirectionalIndexOf(this, val, byteOffset, encoding, false)\n}\n\nfunction hexWrite (buf, string, offset, length) {\n offset = Number(offset) || 0\n const remaining = buf.length - offset\n if (!length) {\n length = remaining\n } else {\n length = Number(length)\n if (length > remaining) {\n length = remaining\n }\n }\n\n const strLen = string.length\n\n if (length > strLen / 2) {\n length = strLen / 2\n }\n let i\n for (i = 0; i < length; ++i) {\n const parsed = parseInt(string.substr(i * 2, 2), 16)\n if (numberIsNaN(parsed)) return i\n buf[offset + i] = parsed\n }\n return i\n}\n\nfunction utf8Write (buf, string, offset, length) {\n return blitBuffer(utf8ToBytes(string, buf.length - offset), buf, offset, length)\n}\n\nfunction asciiWrite (buf, string, offset, length) {\n return blitBuffer(asciiToBytes(string), buf, offset, length)\n}\n\nfunction base64Write (buf, string, offset, length) {\n return blitBuffer(base64ToBytes(string), buf, offset, length)\n}\n\nfunction ucs2Write (buf, string, offset, length) {\n return blitBuffer(utf16leToBytes(string, buf.length - offset), buf, offset, length)\n}\n\nBuffer.prototype.write = function write (string, offset, length, encoding) {\n // Buffer#write(string)\n if (offset === undefined) {\n encoding = 'utf8'\n length = this.length\n offset = 0\n // Buffer#write(string, encoding)\n } else if (length === undefined && typeof offset === 'string') {\n encoding = offset\n length = this.length\n offset = 0\n // Buffer#write(string, offset[, length][, encoding])\n } else if (isFinite(offset)) {\n offset = offset >>> 0\n if (isFinite(length)) {\n length = length >>> 0\n if (encoding === undefined) encoding = 'utf8'\n } else {\n encoding = length\n length = undefined\n }\n } else {\n throw new Error(\n 'Buffer.write(string, encoding, offset[, length]) is no longer supported'\n )\n }\n\n const remaining = this.length - offset\n if (length === undefined || length > remaining) length = remaining\n\n if ((string.length > 0 && (length < 0 || offset < 0)) || offset > this.length) {\n throw new RangeError('Attempt to write outside buffer bounds')\n }\n\n if (!encoding) encoding = 'utf8'\n\n let loweredCase = false\n for (;;) {\n switch (encoding) {\n case 'hex':\n return hexWrite(this, string, offset, length)\n\n case 'utf8':\n case 'utf-8':\n return utf8Write(this, string, offset, length)\n\n case 'ascii':\n case 'latin1':\n case 'binary':\n return asciiWrite(this, string, offset, length)\n\n case 'base64':\n // Warning: maxLength not taken into account in base64Write\n return base64Write(this, string, offset, length)\n\n case 'ucs2':\n case 'ucs-2':\n case 'utf16le':\n case 'utf-16le':\n return ucs2Write(this, string, offset, length)\n\n default:\n if (loweredCase) throw new TypeError('Unknown encoding: ' + encoding)\n encoding = ('' + encoding).toLowerCase()\n loweredCase = true\n }\n }\n}\n\nBuffer.prototype.toJSON = function toJSON () {\n return {\n type: 'Buffer',\n data: Array.prototype.slice.call(this._arr || this, 0)\n }\n}\n\nfunction base64Slice (buf, start, end) {\n if (start === 0 && end === buf.length) {\n return base64.fromByteArray(buf)\n } else {\n return base64.fromByteArray(buf.slice(start, end))\n }\n}\n\nfunction utf8Slice (buf, start, end) {\n end = Math.min(buf.length, end)\n const res = []\n\n let i = start\n while (i < end) {\n const firstByte = buf[i]\n let codePoint = null\n let bytesPerSequence = (firstByte > 0xEF)\n ? 4\n : (firstByte > 0xDF)\n ? 3\n : (firstByte > 0xBF)\n ? 2\n : 1\n\n if (i + bytesPerSequence <= end) {\n let secondByte, thirdByte, fourthByte, tempCodePoint\n\n switch (bytesPerSequence) {\n case 1:\n if (firstByte < 0x80) {\n codePoint = firstByte\n }\n break\n case 2:\n secondByte = buf[i + 1]\n if ((secondByte & 0xC0) === 0x80) {\n tempCodePoint = (firstByte & 0x1F) << 0x6 | (secondByte & 0x3F)\n if (tempCodePoint > 0x7F) {\n codePoint = tempCodePoint\n }\n }\n break\n case 3:\n secondByte = buf[i + 1]\n thirdByte = buf[i + 2]\n if ((secondByte & 0xC0) === 0x80 && (thirdByte & 0xC0) === 0x80) {\n tempCodePoint = (firstByte & 0xF) << 0xC | (secondByte & 0x3F) << 0x6 | (thirdByte & 0x3F)\n if (tempCodePoint > 0x7FF && (tempCodePoint < 0xD800 || tempCodePoint > 0xDFFF)) {\n codePoint = tempCodePoint\n }\n }\n break\n case 4:\n secondByte = buf[i + 1]\n thirdByte = buf[i + 2]\n fourthByte = buf[i + 3]\n if ((secondByte & 0xC0) === 0x80 && (thirdByte & 0xC0) === 0x80 && (fourthByte & 0xC0) === 0x80) {\n tempCodePoint = (firstByte & 0xF) << 0x12 | (secondByte & 0x3F) << 0xC | (thirdByte & 0x3F) << 0x6 | (fourthByte & 0x3F)\n if (tempCodePoint > 0xFFFF && tempCodePoint < 0x110000) {\n codePoint = tempCodePoint\n }\n }\n }\n }\n\n if (codePoint === null) {\n // we did not generate a valid codePoint so insert a\n // replacement char (U+FFFD) and advance only 1 byte\n codePoint = 0xFFFD\n bytesPerSequence = 1\n } else if (codePoint > 0xFFFF) {\n // encode to utf16 (surrogate pair dance)\n codePoint -= 0x10000\n res.push(codePoint >>> 10 & 0x3FF | 0xD800)\n codePoint = 0xDC00 | codePoint & 0x3FF\n }\n\n res.push(codePoint)\n i += bytesPerSequence\n }\n\n return decodeCodePointsArray(res)\n}\n\n// Based on http://stackoverflow.com/a/22747272/680742, the browser with\n// the lowest limit is Chrome, with 0x10000 args.\n// We go 1 magnitude less, for safety\nconst MAX_ARGUMENTS_LENGTH = 0x1000\n\nfunction decodeCodePointsArray (codePoints) {\n const len = codePoints.length\n if (len <= MAX_ARGUMENTS_LENGTH) {\n return String.fromCharCode.apply(String, codePoints) // avoid extra slice()\n }\n\n // Decode in chunks to avoid \"call stack size exceeded\".\n let res = ''\n let i = 0\n while (i < len) {\n res += String.fromCharCode.apply(\n String,\n codePoints.slice(i, i += MAX_ARGUMENTS_LENGTH)\n )\n }\n return res\n}\n\nfunction asciiSlice (buf, start, end) {\n let ret = ''\n end = Math.min(buf.length, end)\n\n for (let i = start; i < end; ++i) {\n ret += String.fromCharCode(buf[i] & 0x7F)\n }\n return ret\n}\n\nfunction latin1Slice (buf, start, end) {\n let ret = ''\n end = Math.min(buf.length, end)\n\n for (let i = start; i < end; ++i) {\n ret += String.fromCharCode(buf[i])\n }\n return ret\n}\n\nfunction hexSlice (buf, start, end) {\n const len = buf.length\n\n if (!start || start < 0) start = 0\n if (!end || end < 0 || end > len) end = len\n\n let out = ''\n for (let i = start; i < end; ++i) {\n out += hexSliceLookupTable[buf[i]]\n }\n return out\n}\n\nfunction utf16leSlice (buf, start, end) {\n const bytes = buf.slice(start, end)\n let res = ''\n // If bytes.length is odd, the last 8 bits must be ignored (same as node.js)\n for (let i = 0; i < bytes.length - 1; i += 2) {\n res += String.fromCharCode(bytes[i] + (bytes[i + 1] * 256))\n }\n return res\n}\n\nBuffer.prototype.slice = function slice (start, end) {\n const len = this.length\n start = ~~start\n end = end === undefined ? len : ~~end\n\n if (start < 0) {\n start += len\n if (start < 0) start = 0\n } else if (start > len) {\n start = len\n }\n\n if (end < 0) {\n end += len\n if (end < 0) end = 0\n } else if (end > len) {\n end = len\n }\n\n if (end < start) end = start\n\n const newBuf = this.subarray(start, end)\n // Return an augmented `Uint8Array` instance\n Object.setPrototypeOf(newBuf, Buffer.prototype)\n\n return newBuf\n}\n\n/*\n * Need to make sure that buffer isn't trying to write out of bounds.\n */\nfunction checkOffset (offset, ext, length) {\n if ((offset % 1) !== 0 || offset < 0) throw new RangeError('offset is not uint')\n if (offset + ext > length) throw new RangeError('Trying to access beyond buffer length')\n}\n\nBuffer.prototype.readUintLE =\nBuffer.prototype.readUIntLE = function readUIntLE (offset, byteLength, noAssert) {\n offset = offset >>> 0\n byteLength = byteLength >>> 0\n if (!noAssert) checkOffset(offset, byteLength, this.length)\n\n let val = this[offset]\n let mul = 1\n let i = 0\n while (++i < byteLength && (mul *= 0x100)) {\n val += this[offset + i] * mul\n }\n\n return val\n}\n\nBuffer.prototype.readUintBE =\nBuffer.prototype.readUIntBE = function readUIntBE (offset, byteLength, noAssert) {\n offset = offset >>> 0\n byteLength = byteLength >>> 0\n if (!noAssert) {\n checkOffset(offset, byteLength, this.length)\n }\n\n let val = this[offset + --byteLength]\n let mul = 1\n while (byteLength > 0 && (mul *= 0x100)) {\n val += this[offset + --byteLength] * mul\n }\n\n return val\n}\n\nBuffer.prototype.readUint8 =\nBuffer.prototype.readUInt8 = function readUInt8 (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 1, this.length)\n return this[offset]\n}\n\nBuffer.prototype.readUint16LE =\nBuffer.prototype.readUInt16LE = function readUInt16LE (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 2, this.length)\n return this[offset] | (this[offset + 1] << 8)\n}\n\nBuffer.prototype.readUint16BE =\nBuffer.prototype.readUInt16BE = function readUInt16BE (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 2, this.length)\n return (this[offset] << 8) | this[offset + 1]\n}\n\nBuffer.prototype.readUint32LE =\nBuffer.prototype.readUInt32LE = function readUInt32LE (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 4, this.length)\n\n return ((this[offset]) |\n (this[offset + 1] << 8) |\n (this[offset + 2] << 16)) +\n (this[offset + 3] * 0x1000000)\n}\n\nBuffer.prototype.readUint32BE =\nBuffer.prototype.readUInt32BE = function readUInt32BE (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 4, this.length)\n\n return (this[offset] * 0x1000000) +\n ((this[offset + 1] << 16) |\n (this[offset + 2] << 8) |\n this[offset + 3])\n}\n\nBuffer.prototype.readBigUInt64LE = defineBigIntMethod(function readBigUInt64LE (offset) {\n offset = offset >>> 0\n validateNumber(offset, 'offset')\n const first = this[offset]\n const last = this[offset + 7]\n if (first === undefined || last === undefined) {\n boundsError(offset, this.length - 8)\n }\n\n const lo = first +\n this[++offset] * 2 ** 8 +\n this[++offset] * 2 ** 16 +\n this[++offset] * 2 ** 24\n\n const hi = this[++offset] +\n this[++offset] * 2 ** 8 +\n this[++offset] * 2 ** 16 +\n last * 2 ** 24\n\n return BigInt(lo) + (BigInt(hi) << BigInt(32))\n})\n\nBuffer.prototype.readBigUInt64BE = defineBigIntMethod(function readBigUInt64BE (offset) {\n offset = offset >>> 0\n validateNumber(offset, 'offset')\n const first = this[offset]\n const last = this[offset + 7]\n if (first === undefined || last === undefined) {\n boundsError(offset, this.length - 8)\n }\n\n const hi = first * 2 ** 24 +\n this[++offset] * 2 ** 16 +\n this[++offset] * 2 ** 8 +\n this[++offset]\n\n const lo = this[++offset] * 2 ** 24 +\n this[++offset] * 2 ** 16 +\n this[++offset] * 2 ** 8 +\n last\n\n return (BigInt(hi) << BigInt(32)) + BigInt(lo)\n})\n\nBuffer.prototype.readIntLE = function readIntLE (offset, byteLength, noAssert) {\n offset = offset >>> 0\n byteLength = byteLength >>> 0\n if (!noAssert) checkOffset(offset, byteLength, this.length)\n\n let val = this[offset]\n let mul = 1\n let i = 0\n while (++i < byteLength && (mul *= 0x100)) {\n val += this[offset + i] * mul\n }\n mul *= 0x80\n\n if (val >= mul) val -= Math.pow(2, 8 * byteLength)\n\n return val\n}\n\nBuffer.prototype.readIntBE = function readIntBE (offset, byteLength, noAssert) {\n offset = offset >>> 0\n byteLength = byteLength >>> 0\n if (!noAssert) checkOffset(offset, byteLength, this.length)\n\n let i = byteLength\n let mul = 1\n let val = this[offset + --i]\n while (i > 0 && (mul *= 0x100)) {\n val += this[offset + --i] * mul\n }\n mul *= 0x80\n\n if (val >= mul) val -= Math.pow(2, 8 * byteLength)\n\n return val\n}\n\nBuffer.prototype.readInt8 = function readInt8 (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 1, this.length)\n if (!(this[offset] & 0x80)) return (this[offset])\n return ((0xff - this[offset] + 1) * -1)\n}\n\nBuffer.prototype.readInt16LE = function readInt16LE (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 2, this.length)\n const val = this[offset] | (this[offset + 1] << 8)\n return (val & 0x8000) ? val | 0xFFFF0000 : val\n}\n\nBuffer.prototype.readInt16BE = function readInt16BE (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 2, this.length)\n const val = this[offset + 1] | (this[offset] << 8)\n return (val & 0x8000) ? val | 0xFFFF0000 : val\n}\n\nBuffer.prototype.readInt32LE = function readInt32LE (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 4, this.length)\n\n return (this[offset]) |\n (this[offset + 1] << 8) |\n (this[offset + 2] << 16) |\n (this[offset + 3] << 24)\n}\n\nBuffer.prototype.readInt32BE = function readInt32BE (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 4, this.length)\n\n return (this[offset] << 24) |\n (this[offset + 1] << 16) |\n (this[offset + 2] << 8) |\n (this[offset + 3])\n}\n\nBuffer.prototype.readBigInt64LE = defineBigIntMethod(function readBigInt64LE (offset) {\n offset = offset >>> 0\n validateNumber(offset, 'offset')\n const first = this[offset]\n const last = this[offset + 7]\n if (first === undefined || last === undefined) {\n boundsError(offset, this.length - 8)\n }\n\n const val = this[offset + 4] +\n this[offset + 5] * 2 ** 8 +\n this[offset + 6] * 2 ** 16 +\n (last << 24) // Overflow\n\n return (BigInt(val) << BigInt(32)) +\n BigInt(first +\n this[++offset] * 2 ** 8 +\n this[++offset] * 2 ** 16 +\n this[++offset] * 2 ** 24)\n})\n\nBuffer.prototype.readBigInt64BE = defineBigIntMethod(function readBigInt64BE (offset) {\n offset = offset >>> 0\n validateNumber(offset, 'offset')\n const first = this[offset]\n const last = this[offset + 7]\n if (first === undefined || last === undefined) {\n boundsError(offset, this.length - 8)\n }\n\n const val = (first << 24) + // Overflow\n this[++offset] * 2 ** 16 +\n this[++offset] * 2 ** 8 +\n this[++offset]\n\n return (BigInt(val) << BigInt(32)) +\n BigInt(this[++offset] * 2 ** 24 +\n this[++offset] * 2 ** 16 +\n this[++offset] * 2 ** 8 +\n last)\n})\n\nBuffer.prototype.readFloatLE = function readFloatLE (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 4, this.length)\n return ieee754.read(this, offset, true, 23, 4)\n}\n\nBuffer.prototype.readFloatBE = function readFloatBE (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 4, this.length)\n return ieee754.read(this, offset, false, 23, 4)\n}\n\nBuffer.prototype.readDoubleLE = function readDoubleLE (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 8, this.length)\n return ieee754.read(this, offset, true, 52, 8)\n}\n\nBuffer.prototype.readDoubleBE = function readDoubleBE (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 8, this.length)\n return ieee754.read(this, offset, false, 52, 8)\n}\n\nfunction checkInt (buf, value, offset, ext, max, min) {\n if (!Buffer.isBuffer(buf)) throw new TypeError('\"buffer\" argument must be a Buffer instance')\n if (value > max || value < min) throw new RangeError('\"value\" argument is out of bounds')\n if (offset + ext > buf.length) throw new RangeError('Index out of range')\n}\n\nBuffer.prototype.writeUintLE =\nBuffer.prototype.writeUIntLE = function writeUIntLE (value, offset, byteLength, noAssert) {\n value = +value\n offset = offset >>> 0\n byteLength = byteLength >>> 0\n if (!noAssert) {\n const maxBytes = Math.pow(2, 8 * byteLength) - 1\n checkInt(this, value, offset, byteLength, maxBytes, 0)\n }\n\n let mul = 1\n let i = 0\n this[offset] = value & 0xFF\n while (++i < byteLength && (mul *= 0x100)) {\n this[offset + i] = (value / mul) & 0xFF\n }\n\n return offset + byteLength\n}\n\nBuffer.prototype.writeUintBE =\nBuffer.prototype.writeUIntBE = function writeUIntBE (value, offset, byteLength, noAssert) {\n value = +value\n offset = offset >>> 0\n byteLength = byteLength >>> 0\n if (!noAssert) {\n const maxBytes = Math.pow(2, 8 * byteLength) - 1\n checkInt(this, value, offset, byteLength, maxBytes, 0)\n }\n\n let i = byteLength - 1\n let mul = 1\n this[offset + i] = value & 0xFF\n while (--i >= 0 && (mul *= 0x100)) {\n this[offset + i] = (value / mul) & 0xFF\n }\n\n return offset + byteLength\n}\n\nBuffer.prototype.writeUint8 =\nBuffer.prototype.writeUInt8 = function writeUInt8 (value, offset, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) checkInt(this, value, offset, 1, 0xff, 0)\n this[offset] = (value & 0xff)\n return offset + 1\n}\n\nBuffer.prototype.writeUint16LE =\nBuffer.prototype.writeUInt16LE = function writeUInt16LE (value, offset, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) checkInt(this, value, offset, 2, 0xffff, 0)\n this[offset] = (value & 0xff)\n this[offset + 1] = (value >>> 8)\n return offset + 2\n}\n\nBuffer.prototype.writeUint16BE =\nBuffer.prototype.writeUInt16BE = function writeUInt16BE (value, offset, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) checkInt(this, value, offset, 2, 0xffff, 0)\n this[offset] = (value >>> 8)\n this[offset + 1] = (value & 0xff)\n return offset + 2\n}\n\nBuffer.prototype.writeUint32LE =\nBuffer.prototype.writeUInt32LE = function writeUInt32LE (value, offset, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) checkInt(this, value, offset, 4, 0xffffffff, 0)\n this[offset + 3] = (value >>> 24)\n this[offset + 2] = (value >>> 16)\n this[offset + 1] = (value >>> 8)\n this[offset] = (value & 0xff)\n return offset + 4\n}\n\nBuffer.prototype.writeUint32BE =\nBuffer.prototype.writeUInt32BE = function writeUInt32BE (value, offset, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) checkInt(this, value, offset, 4, 0xffffffff, 0)\n this[offset] = (value >>> 24)\n this[offset + 1] = (value >>> 16)\n this[offset + 2] = (value >>> 8)\n this[offset + 3] = (value & 0xff)\n return offset + 4\n}\n\nfunction wrtBigUInt64LE (buf, value, offset, min, max) {\n checkIntBI(value, min, max, buf, offset, 7)\n\n let lo = Number(value & BigInt(0xffffffff))\n buf[offset++] = lo\n lo = lo >> 8\n buf[offset++] = lo\n lo = lo >> 8\n buf[offset++] = lo\n lo = lo >> 8\n buf[offset++] = lo\n let hi = Number(value >> BigInt(32) & BigInt(0xffffffff))\n buf[offset++] = hi\n hi = hi >> 8\n buf[offset++] = hi\n hi = hi >> 8\n buf[offset++] = hi\n hi = hi >> 8\n buf[offset++] = hi\n return offset\n}\n\nfunction wrtBigUInt64BE (buf, value, offset, min, max) {\n checkIntBI(value, min, max, buf, offset, 7)\n\n let lo = Number(value & BigInt(0xffffffff))\n buf[offset + 7] = lo\n lo = lo >> 8\n buf[offset + 6] = lo\n lo = lo >> 8\n buf[offset + 5] = lo\n lo = lo >> 8\n buf[offset + 4] = lo\n let hi = Number(value >> BigInt(32) & BigInt(0xffffffff))\n buf[offset + 3] = hi\n hi = hi >> 8\n buf[offset + 2] = hi\n hi = hi >> 8\n buf[offset + 1] = hi\n hi = hi >> 8\n buf[offset] = hi\n return offset + 8\n}\n\nBuffer.prototype.writeBigUInt64LE = defineBigIntMethod(function writeBigUInt64LE (value, offset = 0) {\n return wrtBigUInt64LE(this, value, offset, BigInt(0), BigInt('0xffffffffffffffff'))\n})\n\nBuffer.prototype.writeBigUInt64BE = defineBigIntMethod(function writeBigUInt64BE (value, offset = 0) {\n return wrtBigUInt64BE(this, value, offset, BigInt(0), BigInt('0xffffffffffffffff'))\n})\n\nBuffer.prototype.writeIntLE = function writeIntLE (value, offset, byteLength, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) {\n const limit = Math.pow(2, (8 * byteLength) - 1)\n\n checkInt(this, value, offset, byteLength, limit - 1, -limit)\n }\n\n let i = 0\n let mul = 1\n let sub = 0\n this[offset] = value & 0xFF\n while (++i < byteLength && (mul *= 0x100)) {\n if (value < 0 && sub === 0 && this[offset + i - 1] !== 0) {\n sub = 1\n }\n this[offset + i] = ((value / mul) >> 0) - sub & 0xFF\n }\n\n return offset + byteLength\n}\n\nBuffer.prototype.writeIntBE = function writeIntBE (value, offset, byteLength, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) {\n const limit = Math.pow(2, (8 * byteLength) - 1)\n\n checkInt(this, value, offset, byteLength, limit - 1, -limit)\n }\n\n let i = byteLength - 1\n let mul = 1\n let sub = 0\n this[offset + i] = value & 0xFF\n while (--i >= 0 && (mul *= 0x100)) {\n if (value < 0 && sub === 0 && this[offset + i + 1] !== 0) {\n sub = 1\n }\n this[offset + i] = ((value / mul) >> 0) - sub & 0xFF\n }\n\n return offset + byteLength\n}\n\nBuffer.prototype.writeInt8 = function writeInt8 (value, offset, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) checkInt(this, value, offset, 1, 0x7f, -0x80)\n if (value < 0) value = 0xff + value + 1\n this[offset] = (value & 0xff)\n return offset + 1\n}\n\nBuffer.prototype.writeInt16LE = function writeInt16LE (value, offset, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -0x8000)\n this[offset] = (value & 0xff)\n this[offset + 1] = (value >>> 8)\n return offset + 2\n}\n\nBuffer.prototype.writeInt16BE = function writeInt16BE (value, offset, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -0x8000)\n this[offset] = (value >>> 8)\n this[offset + 1] = (value & 0xff)\n return offset + 2\n}\n\nBuffer.prototype.writeInt32LE = function writeInt32LE (value, offset, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -0x80000000)\n this[offset] = (value & 0xff)\n this[offset + 1] = (value >>> 8)\n this[offset + 2] = (value >>> 16)\n this[offset + 3] = (value >>> 24)\n return offset + 4\n}\n\nBuffer.prototype.writeInt32BE = function writeInt32BE (value, offset, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -0x80000000)\n if (value < 0) value = 0xffffffff + value + 1\n this[offset] = (value >>> 24)\n this[offset + 1] = (value >>> 16)\n this[offset + 2] = (value >>> 8)\n this[offset + 3] = (value & 0xff)\n return offset + 4\n}\n\nBuffer.prototype.writeBigInt64LE = defineBigIntMethod(function writeBigInt64LE (value, offset = 0) {\n return wrtBigUInt64LE(this, value, offset, -BigInt('0x8000000000000000'), BigInt('0x7fffffffffffffff'))\n})\n\nBuffer.prototype.writeBigInt64BE = defineBigIntMethod(function writeBigInt64BE (value, offset = 0) {\n return wrtBigUInt64BE(this, value, offset, -BigInt('0x8000000000000000'), BigInt('0x7fffffffffffffff'))\n})\n\nfunction checkIEEE754 (buf, value, offset, ext, max, min) {\n if (offset + ext > buf.length) throw new RangeError('Index out of range')\n if (offset < 0) throw new RangeError('Index out of range')\n}\n\nfunction writeFloat (buf, value, offset, littleEndian, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) {\n checkIEEE754(buf, value, offset, 4, 3.4028234663852886e+38, -3.4028234663852886e+38)\n }\n ieee754.write(buf, value, offset, littleEndian, 23, 4)\n return offset + 4\n}\n\nBuffer.prototype.writeFloatLE = function writeFloatLE (value, offset, noAssert) {\n return writeFloat(this, value, offset, true, noAssert)\n}\n\nBuffer.prototype.writeFloatBE = function writeFloatBE (value, offset, noAssert) {\n return writeFloat(this, value, offset, false, noAssert)\n}\n\nfunction writeDouble (buf, value, offset, littleEndian, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) {\n checkIEEE754(buf, value, offset, 8, 1.7976931348623157E+308, -1.7976931348623157E+308)\n }\n ieee754.write(buf, value, offset, littleEndian, 52, 8)\n return offset + 8\n}\n\nBuffer.prototype.writeDoubleLE = function writeDoubleLE (value, offset, noAssert) {\n return writeDouble(this, value, offset, true, noAssert)\n}\n\nBuffer.prototype.writeDoubleBE = function writeDoubleBE (value, offset, noAssert) {\n return writeDouble(this, value, offset, false, noAssert)\n}\n\n// copy(targetBuffer, targetStart=0, sourceStart=0, sourceEnd=buffer.length)\nBuffer.prototype.copy = function copy (target, targetStart, start, end) {\n if (!Buffer.isBuffer(target)) throw new TypeError('argument should be a Buffer')\n if (!start) start = 0\n if (!end && end !== 0) end = this.length\n if (targetStart >= target.length) targetStart = target.length\n if (!targetStart) targetStart = 0\n if (end > 0 && end < start) end = start\n\n // Copy 0 bytes; we're done\n if (end === start) return 0\n if (target.length === 0 || this.length === 0) return 0\n\n // Fatal error conditions\n if (targetStart < 0) {\n throw new RangeError('targetStart out of bounds')\n }\n if (start < 0 || start >= this.length) throw new RangeError('Index out of range')\n if (end < 0) throw new RangeError('sourceEnd out of bounds')\n\n // Are we oob?\n if (end > this.length) end = this.length\n if (target.length - targetStart < end - start) {\n end = target.length - targetStart + start\n }\n\n const len = end - start\n\n if (this === target && typeof Uint8Array.prototype.copyWithin === 'function') {\n // Use built-in when available, missing from IE11\n this.copyWithin(targetStart, start, end)\n } else {\n Uint8Array.prototype.set.call(\n target,\n this.subarray(start, end),\n targetStart\n )\n }\n\n return len\n}\n\n// Usage:\n// buffer.fill(number[, offset[, end]])\n// buffer.fill(buffer[, offset[, end]])\n// buffer.fill(string[, offset[, end]][, encoding])\nBuffer.prototype.fill = function fill (val, start, end, encoding) {\n // Handle string cases:\n if (typeof val === 'string') {\n if (typeof start === 'string') {\n encoding = start\n start = 0\n end = this.length\n } else if (typeof end === 'string') {\n encoding = end\n end = this.length\n }\n if (encoding !== undefined && typeof encoding !== 'string') {\n throw new TypeError('encoding must be a string')\n }\n if (typeof encoding === 'string' && !Buffer.isEncoding(encoding)) {\n throw new TypeError('Unknown encoding: ' + encoding)\n }\n if (val.length === 1) {\n const code = val.charCodeAt(0)\n if ((encoding === 'utf8' && code < 128) ||\n encoding === 'latin1') {\n // Fast path: If `val` fits into a single byte, use that numeric value.\n val = code\n }\n }\n } else if (typeof val === 'number') {\n val = val & 255\n } else if (typeof val === 'boolean') {\n val = Number(val)\n }\n\n // Invalid ranges are not set to a default, so can range check early.\n if (start < 0 || this.length < start || this.length < end) {\n throw new RangeError('Out of range index')\n }\n\n if (end <= start) {\n return this\n }\n\n start = start >>> 0\n end = end === undefined ? this.length : end >>> 0\n\n if (!val) val = 0\n\n let i\n if (typeof val === 'number') {\n for (i = start; i < end; ++i) {\n this[i] = val\n }\n } else {\n const bytes = Buffer.isBuffer(val)\n ? val\n : Buffer.from(val, encoding)\n const len = bytes.length\n if (len === 0) {\n throw new TypeError('The value \"' + val +\n '\" is invalid for argument \"value\"')\n }\n for (i = 0; i < end - start; ++i) {\n this[i + start] = bytes[i % len]\n }\n }\n\n return this\n}\n\n// CUSTOM ERRORS\n// =============\n\n// Simplified versions from Node, changed for Buffer-only usage\nconst errors = {}\nfunction E (sym, getMessage, Base) {\n errors[sym] = class NodeError extends Base {\n constructor () {\n super()\n\n Object.defineProperty(this, 'message', {\n value: getMessage.apply(this, arguments),\n writable: true,\n configurable: true\n })\n\n // Add the error code to the name to include it in the stack trace.\n this.name = `${this.name} [${sym}]`\n // Access the stack to generate the error message including the error code\n // from the name.\n this.stack // eslint-disable-line no-unused-expressions\n // Reset the name to the actual name.\n delete this.name\n }\n\n get code () {\n return sym\n }\n\n set code (value) {\n Object.defineProperty(this, 'code', {\n configurable: true,\n enumerable: true,\n value,\n writable: true\n })\n }\n\n toString () {\n return `${this.name} [${sym}]: ${this.message}`\n }\n }\n}\n\nE('ERR_BUFFER_OUT_OF_BOUNDS',\n function (name) {\n if (name) {\n return `${name} is outside of buffer bounds`\n }\n\n return 'Attempt to access memory outside buffer bounds'\n }, RangeError)\nE('ERR_INVALID_ARG_TYPE',\n function (name, actual) {\n return `The \"${name}\" argument must be of type number. Received type ${typeof actual}`\n }, TypeError)\nE('ERR_OUT_OF_RANGE',\n function (str, range, input) {\n let msg = `The value of \"${str}\" is out of range.`\n let received = input\n if (Number.isInteger(input) && Math.abs(input) > 2 ** 32) {\n received = addNumericalSeparator(String(input))\n } else if (typeof input === 'bigint') {\n received = String(input)\n if (input > BigInt(2) ** BigInt(32) || input < -(BigInt(2) ** BigInt(32))) {\n received = addNumericalSeparator(received)\n }\n received += 'n'\n }\n msg += ` It must be ${range}. Received ${received}`\n return msg\n }, RangeError)\n\nfunction addNumericalSeparator (val) {\n let res = ''\n let i = val.length\n const start = val[0] === '-' ? 1 : 0\n for (; i >= start + 4; i -= 3) {\n res = `_${val.slice(i - 3, i)}${res}`\n }\n return `${val.slice(0, i)}${res}`\n}\n\n// CHECK FUNCTIONS\n// ===============\n\nfunction checkBounds (buf, offset, byteLength) {\n validateNumber(offset, 'offset')\n if (buf[offset] === undefined || buf[offset + byteLength] === undefined) {\n boundsError(offset, buf.length - (byteLength + 1))\n }\n}\n\nfunction checkIntBI (value, min, max, buf, offset, byteLength) {\n if (value > max || value < min) {\n const n = typeof min === 'bigint' ? 'n' : ''\n let range\n if (byteLength > 3) {\n if (min === 0 || min === BigInt(0)) {\n range = `>= 0${n} and < 2${n} ** ${(byteLength + 1) * 8}${n}`\n } else {\n range = `>= -(2${n} ** ${(byteLength + 1) * 8 - 1}${n}) and < 2 ** ` +\n `${(byteLength + 1) * 8 - 1}${n}`\n }\n } else {\n range = `>= ${min}${n} and <= ${max}${n}`\n }\n throw new errors.ERR_OUT_OF_RANGE('value', range, value)\n }\n checkBounds(buf, offset, byteLength)\n}\n\nfunction validateNumber (value, name) {\n if (typeof value !== 'number') {\n throw new errors.ERR_INVALID_ARG_TYPE(name, 'number', value)\n }\n}\n\nfunction boundsError (value, length, type) {\n if (Math.floor(value) !== value) {\n validateNumber(value, type)\n throw new errors.ERR_OUT_OF_RANGE(type || 'offset', 'an integer', value)\n }\n\n if (length < 0) {\n throw new errors.ERR_BUFFER_OUT_OF_BOUNDS()\n }\n\n throw new errors.ERR_OUT_OF_RANGE(type || 'offset',\n `>= ${type ? 1 : 0} and <= ${length}`,\n value)\n}\n\n// HELPER FUNCTIONS\n// ================\n\nconst INVALID_BASE64_RE = /[^+/0-9A-Za-z-_]/g\n\nfunction base64clean (str) {\n // Node takes equal signs as end of the Base64 encoding\n str = str.split('=')[0]\n // Node strips out invalid characters like \\n and \\t from the string, base64-js does not\n str = str.trim().replace(INVALID_BASE64_RE, '')\n // Node converts strings with length < 2 to ''\n if (str.length < 2) return ''\n // Node allows for non-padded base64 strings (missing trailing ===), base64-js does not\n while (str.length % 4 !== 0) {\n str = str + '='\n }\n return str\n}\n\nfunction utf8ToBytes (string, units) {\n units = units || Infinity\n let codePoint\n const length = string.length\n let leadSurrogate = null\n const bytes = []\n\n for (let i = 0; i < length; ++i) {\n codePoint = string.charCodeAt(i)\n\n // is surrogate component\n if (codePoint > 0xD7FF && codePoint < 0xE000) {\n // last char was a lead\n if (!leadSurrogate) {\n // no lead yet\n if (codePoint > 0xDBFF) {\n // unexpected trail\n if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)\n continue\n } else if (i + 1 === length) {\n // unpaired lead\n if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)\n continue\n }\n\n // valid lead\n leadSurrogate = codePoint\n\n continue\n }\n\n // 2 leads in a row\n if (codePoint < 0xDC00) {\n if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)\n leadSurrogate = codePoint\n continue\n }\n\n // valid surrogate pair\n codePoint = (leadSurrogate - 0xD800 << 10 | codePoint - 0xDC00) + 0x10000\n } else if (leadSurrogate) {\n // valid bmp char, but last char was a lead\n if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)\n }\n\n leadSurrogate = null\n\n // encode utf8\n if (codePoint < 0x80) {\n if ((units -= 1) < 0) break\n bytes.push(codePoint)\n } else if (codePoint < 0x800) {\n if ((units -= 2) < 0) break\n bytes.push(\n codePoint >> 0x6 | 0xC0,\n codePoint & 0x3F | 0x80\n )\n } else if (codePoint < 0x10000) {\n if ((units -= 3) < 0) break\n bytes.push(\n codePoint >> 0xC | 0xE0,\n codePoint >> 0x6 & 0x3F | 0x80,\n codePoint & 0x3F | 0x80\n )\n } else if (codePoint < 0x110000) {\n if ((units -= 4) < 0) break\n bytes.push(\n codePoint >> 0x12 | 0xF0,\n codePoint >> 0xC & 0x3F | 0x80,\n codePoint >> 0x6 & 0x3F | 0x80,\n codePoint & 0x3F | 0x80\n )\n } else {\n throw new Error('Invalid code point')\n }\n }\n\n return bytes\n}\n\nfunction asciiToBytes (str) {\n const byteArray = []\n for (let i = 0; i < str.length; ++i) {\n // Node's code seems to be doing this and not & 0x7F..\n byteArray.push(str.charCodeAt(i) & 0xFF)\n }\n return byteArray\n}\n\nfunction utf16leToBytes (str, units) {\n let c, hi, lo\n const byteArray = []\n for (let i = 0; i < str.length; ++i) {\n if ((units -= 2) < 0) break\n\n c = str.charCodeAt(i)\n hi = c >> 8\n lo = c % 256\n byteArray.push(lo)\n byteArray.push(hi)\n }\n\n return byteArray\n}\n\nfunction base64ToBytes (str) {\n return base64.toByteArray(base64clean(str))\n}\n\nfunction blitBuffer (src, dst, offset, length) {\n let i\n for (i = 0; i < length; ++i) {\n if ((i + offset >= dst.length) || (i >= src.length)) break\n dst[i + offset] = src[i]\n }\n return i\n}\n\n// ArrayBuffer or Uint8Array objects from other contexts (i.e. iframes) do not pass\n// the `instanceof` check but they should be treated as of that type.\n// See: https://github.com/feross/buffer/issues/166\nfunction isInstance (obj, type) {\n return obj instanceof type ||\n (obj != null && obj.constructor != null && obj.constructor.name != null &&\n obj.constructor.name === type.name)\n}\nfunction numberIsNaN (obj) {\n // For IE11 support\n return obj !== obj // eslint-disable-line no-self-compare\n}\n\n// Create lookup table for `toString('hex')`\n// See: https://github.com/feross/buffer/issues/219\nconst hexSliceLookupTable = (function () {\n const alphabet = '0123456789abcdef'\n const table = new Array(256)\n for (let i = 0; i < 16; ++i) {\n const i16 = i * 16\n for (let j = 0; j < 16; ++j) {\n table[i16 + j] = alphabet[i] + alphabet[j]\n }\n }\n return table\n})()\n\n// Return not function with Error if BigInt not supported\nfunction defineBigIntMethod (fn) {\n return typeof BigInt === 'undefined' ? BufferBigIntNotDefined : fn\n}\n\nfunction BufferBigIntNotDefined () {\n throw new Error('BigInt not supported')\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNDgyODcuanMiLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vaXRnLW5leHRnZW4tZnJvbnRlbmQvLi9ub2RlX21vZHVsZXMvYnVmZmVyL2luZGV4LmpzP2I2MzkiXSwic291cmNlc0NvbnRlbnQiOlsiLyohXG4gKiBUaGUgYnVmZmVyIG1vZHVsZSBmcm9tIG5vZGUuanMsIGZvciB0aGUgYnJvd3Nlci5cbiAqXG4gKiBAYXV0aG9yICAgRmVyb3NzIEFib3VraGFkaWplaCA8aHR0cHM6Ly9mZXJvc3Mub3JnPlxuICogQGxpY2Vuc2UgIE1JVFxuICovXG4vKiBlc2xpbnQtZGlzYWJsZSBuby1wcm90byAqL1xuXG4ndXNlIHN0cmljdCdcblxuY29uc3QgYmFzZTY0ID0gcmVxdWlyZSgnYmFzZTY0LWpzJylcbmNvbnN0IGllZWU3NTQgPSByZXF1aXJlKCdpZWVlNzU0JylcbmNvbnN0IGN1c3RvbUluc3BlY3RTeW1ib2wgPVxuICAodHlwZW9mIFN5bWJvbCA9PT0gJ2Z1bmN0aW9uJyAmJiB0eXBlb2YgU3ltYm9sWydmb3InXSA9PT0gJ2Z1bmN0aW9uJykgLy8gZXNsaW50LWRpc2FibGUtbGluZSBkb3Qtbm90YXRpb25cbiAgICA/IFN5bWJvbFsnZm9yJ10oJ25vZGVqcy51dGlsLmluc3BlY3QuY3VzdG9tJykgLy8gZXNsaW50LWRpc2FibGUtbGluZSBkb3Qtbm90YXRpb25cbiAgICA6IG51bGxcblxuZXhwb3J0cy5CdWZmZXIgPSBCdWZmZXJcbmV4cG9ydHMuU2xvd0J1ZmZlciA9IFNsb3dCdWZmZXJcbmV4cG9ydHMuSU5TUEVDVF9NQVhfQllURVMgPSA1MFxuXG5jb25zdCBLX01BWF9MRU5HVEggPSAweDdmZmZmZmZmXG5leHBvcnRzLmtNYXhMZW5ndGggPSBLX01BWF9MRU5HVEhcblxuLyoqXG4gKiBJZiBgQnVmZmVyLlRZUEVEX0FSUkFZX1NVUFBPUlRgOlxuICogICA9PT0gdHJ1ZSAgICBVc2UgVWludDhBcnJheSBpbXBsZW1lbnRhdGlvbiAoZmFzdGVzdClcbiAqICAgPT09IGZhbHNlICAgUHJpbnQgd2FybmluZyBhbmQgcmVjb21tZW5kIHVzaW5nIGBidWZmZXJgIHY0Lnggd2hpY2ggaGFzIGFuIE9iamVjdFxuICogICAgICAgICAgICAgICBpbXBsZW1lbnRhdGlvbiAobW9zdCBjb21wYXRpYmxlLCBldmVuIElFNilcbiAqXG4gKiBCcm93c2VycyB0aGF0IHN1cHBvcnQgdHlwZWQgYXJyYXlzIGFyZSBJRSAxMCssIEZpcmVmb3ggNCssIENocm9tZSA3KywgU2FmYXJpIDUuMSssXG4gKiBPcGVyYSAxMS42KywgaU9TIDQuMisuXG4gKlxuICogV2UgcmVwb3J0IHRoYXQgdGhlIGJyb3dzZXIgZG9lcyBub3Qgc3VwcG9ydCB0eXBlZCBhcnJheXMgaWYgdGhlIGFyZSBub3Qgc3ViY2xhc3NhYmxlXG4gKiB1c2luZyBfX3Byb3RvX18uIEZpcmVmb3ggNC0yOSBsYWNrcyBzdXBwb3J0IGZvciBhZGRpbmcgbmV3IHByb3BlcnRpZXMgdG8gYFVpbnQ4QXJyYXlgXG4gKiAoU2VlOiBodHRwczovL2J1Z3ppbGxhLm1vemlsbGEub3JnL3Nob3dfYnVnLmNnaT9pZD02OTU0MzgpLiBJRSAxMCBsYWNrcyBzdXBwb3J0XG4gKiBmb3IgX19wcm90b19fIGFuZCBoYXMgYSBidWdneSB0eXBlZCBhcnJheSBpbXBsZW1lbnRhdGlvbi5cbiAqL1xuQnVmZmVyLlRZUEVEX0FSUkFZX1NVUFBPUlQgPSB0eXBlZEFycmF5U3VwcG9ydCgpXG5cbmlmICghQnVmZmVyLlRZUEVEX0FSUkFZX1NVUFBPUlQgJiYgdHlwZW9mIGNvbnNvbGUgIT09ICd1bmRlZmluZWQnICYmXG4gICAgdHlwZW9mIGNvbnNvbGUuZXJyb3IgPT09ICdmdW5jdGlvbicpIHtcbiAgY29uc29sZS5lcnJvcihcbiAgICAnVGhpcyBicm93c2VyIGxhY2tzIHR5cGVkIGFycmF5IChVaW50OEFycmF5KSBzdXBwb3J0IHdoaWNoIGlzIHJlcXVpcmVkIGJ5ICcgK1xuICAgICdgYnVmZmVyYCB2NS54LiBVc2UgYGJ1ZmZlcmAgdjQueCBpZiB5b3UgcmVxdWlyZSBvbGQgYnJvd3NlciBzdXBwb3J0LidcbiAgKVxufVxuXG5mdW5jdGlvbiB0eXBlZEFycmF5U3VwcG9ydCAoKSB7XG4gIC8vIENhbiB0eXBlZCBhcnJheSBpbnN0YW5jZXMgY2FuIGJlIGF1Z21lbnRlZD9cbiAgdHJ5IHtcbiAgICBjb25zdCBhcnIgPSBuZXcgVWludDhBcnJheSgxKVxuICAgIGNvbnN0IHByb3RvID0geyBmb286IGZ1bmN0aW9uICgpIHsgcmV0dXJuIDQyIH0gfVxuICAgIE9iamVjdC5zZXRQcm90b3R5cGVPZihwcm90bywgVWludDhBcnJheS5wcm90b3R5cGUpXG4gICAgT2JqZWN0LnNldFByb3RvdHlwZU9mKGFyciwgcHJvdG8pXG4gICAgcmV0dXJuIGFyci5mb28oKSA9PT0gNDJcbiAgfSBjYXRjaCAoZSkge1xuICAgIHJldHVybiBmYWxzZVxuICB9XG59XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShCdWZmZXIucHJvdG90eXBlLCAncGFyZW50Jywge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICBpZiAoIUJ1ZmZlci5pc0J1ZmZlcih0aGlzKSkgcmV0dXJuIHVuZGVmaW5lZFxuICAgIHJldHVybiB0aGlzLmJ1ZmZlclxuICB9XG59KVxuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoQnVmZmVyLnByb3RvdHlwZSwgJ29mZnNldCcsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgaWYgKCFCdWZmZXIuaXNCdWZmZXIodGhpcykpIHJldHVybiB1bmRlZmluZWRcbiAgICByZXR1cm4gdGhpcy5ieXRlT2Zmc2V0XG4gIH1cbn0pXG5cbmZ1bmN0aW9uIGNyZWF0ZUJ1ZmZlciAobGVuZ3RoKSB7XG4gIGlmIChsZW5ndGggPiBLX01BWF9MRU5HVEgpIHtcbiAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcignVGhlIHZhbHVlIFwiJyArIGxlbmd0aCArICdcIiBpcyBpbnZhbGlkIGZvciBvcHRpb24gXCJzaXplXCInKVxuICB9XG4gIC8vIFJldHVybiBhbiBhdWdtZW50ZWQgYFVpbnQ4QXJyYXlgIGluc3RhbmNlXG4gIGNvbnN0IGJ1ZiA9IG5ldyBVaW50OEFycmF5KGxlbmd0aClcbiAgT2JqZWN0LnNldFByb3RvdHlwZU9mKGJ1ZiwgQnVmZmVyLnByb3RvdHlwZSlcbiAgcmV0dXJuIGJ1ZlxufVxuXG4vKipcbiAqIFRoZSBCdWZmZXIgY29uc3RydWN0b3IgcmV0dXJucyBpbnN0YW5jZXMgb2YgYFVpbnQ4QXJyYXlgIHRoYXQgaGF2ZSB0aGVpclxuICogcHJvdG90eXBlIGNoYW5nZWQgdG8gYEJ1ZmZlci5wcm90b3R5cGVgLiBGdXJ0aGVybW9yZSwgYEJ1ZmZlcmAgaXMgYSBzdWJjbGFzcyBvZlxuICogYFVpbnQ4QXJyYXlgLCBzbyB0aGUgcmV0dXJuZWQgaW5zdGFuY2VzIHdpbGwgaGF2ZSBhbGwgdGhlIG5vZGUgYEJ1ZmZlcmAgbWV0aG9kc1xuICogYW5kIHRoZSBgVWludDhBcnJheWAgbWV0aG9kcy4gU3F1YXJlIGJyYWNrZXQgbm90YXRpb24gd29ya3MgYXMgZXhwZWN0ZWQgLS0gaXRcbiAqIHJldHVybnMgYSBzaW5nbGUgb2N0ZXQuXG4gKlxuICogVGhlIGBVaW50OEFycmF5YCBwcm90b3R5cGUgcmVtYWlucyB1bm1vZGlmaWVkLlxuICovXG5cbmZ1bmN0aW9uIEJ1ZmZlciAoYXJnLCBlbmNvZGluZ09yT2Zmc2V0LCBsZW5ndGgpIHtcbiAgLy8gQ29tbW9uIGNhc2UuXG4gIGlmICh0eXBlb2YgYXJnID09PSAnbnVtYmVyJykge1xuICAgIGlmICh0eXBlb2YgZW5jb2RpbmdPck9mZnNldCA9PT0gJ3N0cmluZycpIHtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXG4gICAgICAgICdUaGUgXCJzdHJpbmdcIiBhcmd1bWVudCBtdXN0IGJlIG9mIHR5cGUgc3RyaW5nLiBSZWNlaXZlZCB0eXBlIG51bWJlcidcbiAgICAgIClcbiAgICB9XG4gICAgcmV0dXJuIGFsbG9jVW5zYWZlKGFyZylcbiAgfVxuICByZXR1cm4gZnJvbShhcmcsIGVuY29kaW5nT3JPZmZzZXQsIGxlbmd0aClcbn1cblxuQnVmZmVyLnBvb2xTaXplID0gODE5MiAvLyBub3QgdXNlZCBieSB0aGlzIGltcGxlbWVudGF0aW9uXG5cbmZ1bmN0aW9uIGZyb20gKHZhbHVlLCBlbmNvZGluZ09yT2Zmc2V0LCBsZW5ndGgpIHtcbiAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycpIHtcbiAgICByZXR1cm4gZnJvbVN0cmluZyh2YWx1ZSwgZW5jb2RpbmdPck9mZnNldClcbiAgfVxuXG4gIGlmIChBcnJheUJ1ZmZlci5pc1ZpZXcodmFsdWUpKSB7XG4gICAgcmV0dXJuIGZyb21BcnJheVZpZXcodmFsdWUpXG4gIH1cblxuICBpZiAodmFsdWUgPT0gbnVsbCkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXG4gICAgICAnVGhlIGZpcnN0IGFyZ3VtZW50IG11c3QgYmUgb25lIG9mIHR5cGUgc3RyaW5nLCBCdWZmZXIsIEFycmF5QnVmZmVyLCBBcnJheSwgJyArXG4gICAgICAnb3IgQXJyYXktbGlrZSBPYmplY3QuIFJlY2VpdmVkIHR5cGUgJyArICh0eXBlb2YgdmFsdWUpXG4gICAgKVxuICB9XG5cbiAgaWYgKGlzSW5zdGFuY2UodmFsdWUsIEFycmF5QnVmZmVyKSB8fFxuICAgICAgKHZhbHVlICYmIGlzSW5zdGFuY2UodmFsdWUuYnVmZmVyLCBBcnJheUJ1ZmZlcikpKSB7XG4gICAgcmV0dXJuIGZyb21BcnJheUJ1ZmZlcih2YWx1ZSwgZW5jb2RpbmdPck9mZnNldCwgbGVuZ3RoKVxuICB9XG5cbiAgaWYgKHR5cGVvZiBTaGFyZWRBcnJheUJ1ZmZlciAhPT0gJ3VuZGVmaW5lZCcgJiZcbiAgICAgIChpc0luc3RhbmNlKHZhbHVlLCBTaGFyZWRBcnJheUJ1ZmZlcikgfHxcbiAgICAgICh2YWx1ZSAmJiBpc0luc3RhbmNlKHZhbHVlLmJ1ZmZlciwgU2hhcmVkQXJyYXlCdWZmZXIpKSkpIHtcbiAgICByZXR1cm4gZnJvbUFycmF5QnVmZmVyKHZhbHVlLCBlbmNvZGluZ09yT2Zmc2V0LCBsZW5ndGgpXG4gIH1cblxuICBpZiAodHlwZW9mIHZhbHVlID09PSAnbnVtYmVyJykge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXG4gICAgICAnVGhlIFwidmFsdWVcIiBhcmd1bWVudCBtdXN0IG5vdCBiZSBvZiB0eXBlIG51bWJlci4gUmVjZWl2ZWQgdHlwZSBudW1iZXInXG4gICAgKVxuICB9XG5cbiAgY29uc3QgdmFsdWVPZiA9IHZhbHVlLnZhbHVlT2YgJiYgdmFsdWUudmFsdWVPZigpXG4gIGlmICh2YWx1ZU9mICE9IG51bGwgJiYgdmFsdWVPZiAhPT0gdmFsdWUpIHtcbiAgICByZXR1cm4gQnVmZmVyLmZyb20odmFsdWVPZiwgZW5jb2RpbmdPck9mZnNldCwgbGVuZ3RoKVxuICB9XG5cbiAgY29uc3QgYiA9IGZyb21PYmplY3QodmFsdWUpXG4gIGlmIChiKSByZXR1cm4gYlxuXG4gIGlmICh0eXBlb2YgU3ltYm9sICE9PSAndW5kZWZpbmVkJyAmJiBTeW1ib2wudG9QcmltaXRpdmUgIT0gbnVsbCAmJlxuICAgICAgdHlwZW9mIHZhbHVlW1N5bWJvbC50b1ByaW1pdGl2ZV0gPT09ICdmdW5jdGlvbicpIHtcbiAgICByZXR1cm4gQnVmZmVyLmZyb20odmFsdWVbU3ltYm9sLnRvUHJpbWl0aXZlXSgnc3RyaW5nJyksIGVuY29kaW5nT3JPZmZzZXQsIGxlbmd0aClcbiAgfVxuXG4gIHRocm93IG5ldyBUeXBlRXJyb3IoXG4gICAgJ1RoZSBmaXJzdCBhcmd1bWVudCBtdXN0IGJlIG9uZSBvZiB0eXBlIHN0cmluZywgQnVmZmVyLCBBcnJheUJ1ZmZlciwgQXJyYXksICcgK1xuICAgICdvciBBcnJheS1saWtlIE9iamVjdC4gUmVjZWl2ZWQgdHlwZSAnICsgKHR5cGVvZiB2YWx1ZSlcbiAgKVxufVxuXG4vKipcbiAqIEZ1bmN0aW9uYWxseSBlcXVpdmFsZW50IHRvIEJ1ZmZlcihhcmcsIGVuY29kaW5nKSBidXQgdGhyb3dzIGEgVHlwZUVycm9yXG4gKiBpZiB2YWx1ZSBpcyBhIG51bWJlci5cbiAqIEJ1ZmZlci5mcm9tKHN0clssIGVuY29kaW5nXSlcbiAqIEJ1ZmZlci5mcm9tKGFycmF5KVxuICogQnVmZmVyLmZyb20oYnVmZmVyKVxuICogQnVmZmVyLmZyb20oYXJyYXlCdWZmZXJbLCBieXRlT2Zmc2V0WywgbGVuZ3RoXV0pXG4gKiovXG5CdWZmZXIuZnJvbSA9IGZ1bmN0aW9uICh2YWx1ZSwgZW5jb2RpbmdPck9mZnNldCwgbGVuZ3RoKSB7XG4gIHJldHVybiBmcm9tKHZhbHVlLCBlbmNvZGluZ09yT2Zmc2V0LCBsZW5ndGgpXG59XG5cbi8vIE5vdGU6IENoYW5nZSBwcm90b3R5cGUgKmFmdGVyKiBCdWZmZXIuZnJvbSBpcyBkZWZpbmVkIHRvIHdvcmthcm91bmQgQ2hyb21lIGJ1Zzpcbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS9mZXJvc3MvYnVmZmVyL3B1bGwvMTQ4XG5PYmplY3Quc2V0UHJvdG90eXBlT2YoQnVmZmVyLnByb3RvdHlwZSwgVWludDhBcnJheS5wcm90b3R5cGUpXG5PYmplY3Quc2V0UHJvdG90eXBlT2YoQnVmZmVyLCBVaW50OEFycmF5KVxuXG5mdW5jdGlvbiBhc3NlcnRTaXplIChzaXplKSB7XG4gIGlmICh0eXBlb2Ygc2l6ZSAhPT0gJ251bWJlcicpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdcInNpemVcIiBhcmd1bWVudCBtdXN0IGJlIG9mIHR5cGUgbnVtYmVyJylcbiAgfSBlbHNlIGlmIChzaXplIDwgMCkge1xuICAgIHRocm93IG5ldyBSYW5nZUVycm9yKCdUaGUgdmFsdWUgXCInICsgc2l6ZSArICdcIiBpcyBpbnZhbGlkIGZvciBvcHRpb24gXCJzaXplXCInKVxuICB9XG59XG5cbmZ1bmN0aW9uIGFsbG9jIChzaXplLCBmaWxsLCBlbmNvZGluZykge1xuICBhc3NlcnRTaXplKHNpemUpXG4gIGlmIChzaXplIDw9IDApIHtcbiAgICByZXR1cm4gY3JlYXRlQnVmZmVyKHNpemUpXG4gIH1cbiAgaWYgKGZpbGwgIT09IHVuZGVmaW5lZCkge1xuICAgIC8vIE9ubHkgcGF5IGF0dGVudGlvbiB0byBlbmNvZGluZyBpZiBpdCdzIGEgc3RyaW5nLiBUaGlzXG4gICAgLy8gcHJldmVudHMgYWNjaWRlbnRhbGx5IHNlbmRpbmcgaW4gYSBudW1iZXIgdGhhdCB3b3VsZFxuICAgIC8vIGJlIGludGVycHJldGVkIGFzIGEgc3RhcnQgb2Zmc2V0LlxuICAgIHJldHVybiB0eXBlb2YgZW5jb2RpbmcgPT09ICdzdHJpbmcnXG4gICAgICA/IGNyZWF0ZUJ1ZmZlcihzaXplKS5maWxsKGZpbGwsIGVuY29kaW5nKVxuICAgICAgOiBjcmVhdGVCdWZmZXIoc2l6ZSkuZmlsbChmaWxsKVxuICB9XG4gIHJldHVybiBjcmVhdGVCdWZmZXIoc2l6ZSlcbn1cblxuLyoqXG4gKiBDcmVhdGVzIGEgbmV3IGZpbGxlZCBCdWZmZXIgaW5zdGFuY2UuXG4gKiBhbGxvYyhzaXplWywgZmlsbFssIGVuY29kaW5nXV0pXG4gKiovXG5CdWZmZXIuYWxsb2MgPSBmdW5jdGlvbiAoc2l6ZSwgZmlsbCwgZW5jb2RpbmcpIHtcbiAgcmV0dXJuIGFsbG9jKHNpemUsIGZpbGwsIGVuY29kaW5nKVxufVxuXG5mdW5jdGlvbiBhbGxvY1Vuc2FmZSAoc2l6ZSkge1xuICBhc3NlcnRTaXplKHNpemUpXG4gIHJldHVybiBjcmVhdGVCdWZmZXIoc2l6ZSA8IDAgPyAwIDogY2hlY2tlZChzaXplKSB8IDApXG59XG5cbi8qKlxuICogRXF1aXZhbGVudCB0byBCdWZmZXIobnVtKSwgYnkgZGVmYXVsdCBjcmVhdGVzIGEgbm9uLXplcm8tZmlsbGVkIEJ1ZmZlciBpbnN0YW5jZS5cbiAqICovXG5CdWZmZXIuYWxsb2NVbnNhZmUgPSBmdW5jdGlvbiAoc2l6ZSkge1xuICByZXR1cm4gYWxsb2NVbnNhZmUoc2l6ZSlcbn1cbi8qKlxuICogRXF1aXZhbGVudCB0byBTbG93QnVmZmVyKG51bSksIGJ5IGRlZmF1bHQgY3JlYXRlcyBhIG5vbi16ZXJvLWZpbGxlZCBCdWZmZXIgaW5zdGFuY2UuXG4gKi9cbkJ1ZmZlci5hbGxvY1Vuc2FmZVNsb3cgPSBmdW5jdGlvbiAoc2l6ZSkge1xuICByZXR1cm4gYWxsb2NVbnNhZmUoc2l6ZSlcbn1cblxuZnVuY3Rpb24gZnJvbVN0cmluZyAoc3RyaW5nLCBlbmNvZGluZykge1xuICBpZiAodHlwZW9mIGVuY29kaW5nICE9PSAnc3RyaW5nJyB8fCBlbmNvZGluZyA9PT0gJycpIHtcbiAgICBlbmNvZGluZyA9ICd1dGY4J1xuICB9XG5cbiAgaWYgKCFCdWZmZXIuaXNFbmNvZGluZyhlbmNvZGluZykpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdVbmtub3duIGVuY29kaW5nOiAnICsgZW5jb2RpbmcpXG4gIH1cblxuICBjb25zdCBsZW5ndGggPSBieXRlTGVuZ3RoKHN0cmluZywgZW5jb2RpbmcpIHwgMFxuICBsZXQgYnVmID0gY3JlYXRlQnVmZmVyKGxlbmd0aClcblxuICBjb25zdCBhY3R1YWwgPSBidWYud3JpdGUoc3RyaW5nLCBlbmNvZGluZylcblxuICBpZiAoYWN0dWFsICE9PSBsZW5ndGgpIHtcbiAgICAvLyBXcml0aW5nIGEgaGV4IHN0cmluZywgZm9yIGV4YW1wbGUsIHRoYXQgY29udGFpbnMgaW52YWxpZCBjaGFyYWN0ZXJzIHdpbGxcbiAgICAvLyBjYXVzZSBldmVyeXRoaW5nIGFmdGVyIHRoZSBmaXJzdCBpbnZhbGlkIGNoYXJhY3RlciB0byBiZSBpZ25vcmVkLiAoZS5nLlxuICAgIC8vICdhYnh4Y2QnIHdpbGwgYmUgdHJlYXRlZCBhcyAnYWInKVxuICAgIGJ1ZiA9IGJ1Zi5zbGljZSgwLCBhY3R1YWwpXG4gIH1cblxuICByZXR1cm4gYnVmXG59XG5cbmZ1bmN0aW9uIGZyb21BcnJheUxpa2UgKGFycmF5KSB7XG4gIGNvbnN0IGxlbmd0aCA9IGFycmF5Lmxlbmd0aCA8IDAgPyAwIDogY2hlY2tlZChhcnJheS5sZW5ndGgpIHwgMFxuICBjb25zdCBidWYgPSBjcmVhdGVCdWZmZXIobGVuZ3RoKVxuICBmb3IgKGxldCBpID0gMDsgaSA8IGxlbmd0aDsgaSArPSAxKSB7XG4gICAgYnVmW2ldID0gYXJyYXlbaV0gJiAyNTVcbiAgfVxuICByZXR1cm4gYnVmXG59XG5cbmZ1bmN0aW9uIGZyb21BcnJheVZpZXcgKGFycmF5Vmlldykge1xuICBpZiAoaXNJbnN0YW5jZShhcnJheVZpZXcsIFVpbnQ4QXJyYXkpKSB7XG4gICAgY29uc3QgY29weSA9IG5ldyBVaW50OEFycmF5KGFycmF5VmlldylcbiAgICByZXR1cm4gZnJvbUFycmF5QnVmZmVyKGNvcHkuYnVmZmVyLCBjb3B5LmJ5dGVPZmZzZXQsIGNvcHkuYnl0ZUxlbmd0aClcbiAgfVxuICByZXR1cm4gZnJvbUFycmF5TGlrZShhcnJheVZpZXcpXG59XG5cbmZ1bmN0aW9uIGZyb21BcnJheUJ1ZmZlciAoYXJyYXksIGJ5dGVPZmZzZXQsIGxlbmd0aCkge1xuICBpZiAoYnl0ZU9mZnNldCA8IDAgfHwgYXJyYXkuYnl0ZUxlbmd0aCA8IGJ5dGVPZmZzZXQpIHtcbiAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcignXCJvZmZzZXRcIiBpcyBvdXRzaWRlIG9mIGJ1ZmZlciBib3VuZHMnKVxuICB9XG5cbiAgaWYgKGFycmF5LmJ5dGVMZW5ndGggPCBieXRlT2Zmc2V0ICsgKGxlbmd0aCB8fCAwKSkge1xuICAgIHRocm93IG5ldyBSYW5nZUVycm9yKCdcImxlbmd0aFwiIGlzIG91dHNpZGUgb2YgYnVmZmVyIGJvdW5kcycpXG4gIH1cblxuICBsZXQgYnVmXG4gIGlmIChieXRlT2Zmc2V0ID09PSB1bmRlZmluZWQgJiYgbGVuZ3RoID09PSB1bmRlZmluZWQpIHtcbiAgICBidWYgPSBuZXcgVWludDhBcnJheShhcnJheSlcbiAgfSBlbHNlIGlmIChsZW5ndGggPT09IHVuZGVmaW5lZCkge1xuICAgIGJ1ZiA9IG5ldyBVaW50OEFycmF5KGFycmF5LCBieXRlT2Zmc2V0KVxuICB9IGVsc2Uge1xuICAgIGJ1ZiA9IG5ldyBVaW50OEFycmF5KGFycmF5LCBieXRlT2Zmc2V0LCBsZW5ndGgpXG4gIH1cblxuICAvLyBSZXR1cm4gYW4gYXVnbWVudGVkIGBVaW50OEFycmF5YCBpbnN0YW5jZVxuICBPYmplY3Quc2V0UHJvdG90eXBlT2YoYnVmLCBCdWZmZXIucHJvdG90eXBlKVxuXG4gIHJldHVybiBidWZcbn1cblxuZnVuY3Rpb24gZnJvbU9iamVjdCAob2JqKSB7XG4gIGlmIChCdWZmZXIuaXNCdWZmZXIob2JqKSkge1xuICAgIGNvbnN0IGxlbiA9IGNoZWNrZWQob2JqLmxlbmd0aCkgfCAwXG4gICAgY29uc3QgYnVmID0gY3JlYXRlQnVmZmVyKGxlbilcblxuICAgIGlmIChidWYubGVuZ3RoID09PSAwKSB7XG4gICAgICByZXR1cm4gYnVmXG4gICAgfVxuXG4gICAgb2JqLmNvcHkoYnVmLCAwLCAwLCBsZW4pXG4gICAgcmV0dXJuIGJ1ZlxuICB9XG5cbiAgaWYgKG9iai5sZW5ndGggIT09IHVuZGVmaW5lZCkge1xuICAgIGlmICh0eXBlb2Ygb2JqLmxlbmd0aCAhPT0gJ251bWJlcicgfHwgbnVtYmVySXNOYU4ob2JqLmxlbmd0aCkpIHtcbiAgICAgIHJldHVybiBjcmVhdGVCdWZmZXIoMClcbiAgICB9XG4gICAgcmV0dXJuIGZyb21BcnJheUxpa2Uob2JqKVxuICB9XG5cbiAgaWYgKG9iai50eXBlID09PSAnQnVmZmVyJyAmJiBBcnJheS5pc0FycmF5KG9iai5kYXRhKSkge1xuICAgIHJldHVybiBmcm9tQXJyYXlMaWtlKG9iai5kYXRhKVxuICB9XG59XG5cbmZ1bmN0aW9uIGNoZWNrZWQgKGxlbmd0aCkge1xuICAvLyBOb3RlOiBjYW5ub3QgdXNlIGBsZW5ndGggPCBLX01BWF9MRU5HVEhgIGhlcmUgYmVjYXVzZSB0aGF0IGZhaWxzIHdoZW5cbiAgLy8gbGVuZ3RoIGlzIE5hTiAod2hpY2ggaXMgb3RoZXJ3aXNlIGNvZXJjZWQgdG8gemVyby4pXG4gIGlmIChsZW5ndGggPj0gS19NQVhfTEVOR1RIKSB7XG4gICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ0F0dGVtcHQgdG8gYWxsb2NhdGUgQnVmZmVyIGxhcmdlciB0aGFuIG1heGltdW0gJyArXG4gICAgICAgICAgICAgICAgICAgICAgICAgJ3NpemU6IDB4JyArIEtfTUFYX0xFTkdUSC50b1N0cmluZygxNikgKyAnIGJ5dGVzJylcbiAgfVxuICByZXR1cm4gbGVuZ3RoIHwgMFxufVxuXG5mdW5jdGlvbiBTbG93QnVmZmVyIChsZW5ndGgpIHtcbiAgaWYgKCtsZW5ndGggIT0gbGVuZ3RoKSB7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgZXFlcWVxXG4gICAgbGVuZ3RoID0gMFxuICB9XG4gIHJldHVybiBCdWZmZXIuYWxsb2MoK2xlbmd0aClcbn1cblxuQnVmZmVyLmlzQnVmZmVyID0gZnVuY3Rpb24gaXNCdWZmZXIgKGIpIHtcbiAgcmV0dXJuIGIgIT0gbnVsbCAmJiBiLl9pc0J1ZmZlciA9PT0gdHJ1ZSAmJlxuICAgIGIgIT09IEJ1ZmZlci5wcm90b3R5cGUgLy8gc28gQnVmZmVyLmlzQnVmZmVyKEJ1ZmZlci5wcm90b3R5cGUpIHdpbGwgYmUgZmFsc2Vcbn1cblxuQnVmZmVyLmNvbXBhcmUgPSBmdW5jdGlvbiBjb21wYXJlIChhLCBiKSB7XG4gIGlmIChpc0luc3RhbmNlKGEsIFVpbnQ4QXJyYXkpKSBhID0gQnVmZmVyLmZyb20oYSwgYS5vZmZzZXQsIGEuYnl0ZUxlbmd0aClcbiAgaWYgKGlzSW5zdGFuY2UoYiwgVWludDhBcnJheSkpIGIgPSBCdWZmZXIuZnJvbShiLCBiLm9mZnNldCwgYi5ieXRlTGVuZ3RoKVxuICBpZiAoIUJ1ZmZlci5pc0J1ZmZlcihhKSB8fCAhQnVmZmVyLmlzQnVmZmVyKGIpKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcbiAgICAgICdUaGUgXCJidWYxXCIsIFwiYnVmMlwiIGFyZ3VtZW50cyBtdXN0IGJlIG9uZSBvZiB0eXBlIEJ1ZmZlciBvciBVaW50OEFycmF5J1xuICAgIClcbiAgfVxuXG4gIGlmIChhID09PSBiKSByZXR1cm4gMFxuXG4gIGxldCB4ID0gYS5sZW5ndGhcbiAgbGV0IHkgPSBiLmxlbmd0aFxuXG4gIGZvciAobGV0IGkgPSAwLCBsZW4gPSBNYXRoLm1pbih4LCB5KTsgaSA8IGxlbjsgKytpKSB7XG4gICAgaWYgKGFbaV0gIT09IGJbaV0pIHtcbiAgICAgIHggPSBhW2ldXG4gICAgICB5ID0gYltpXVxuICAgICAgYnJlYWtcbiAgICB9XG4gIH1cblxuICBpZiAoeCA8IHkpIHJldHVybiAtMVxuICBpZiAoeSA8IHgpIHJldHVybiAxXG4gIHJldHVybiAwXG59XG5cbkJ1ZmZlci5pc0VuY29kaW5nID0gZnVuY3Rpb24gaXNFbmNvZGluZyAoZW5jb2RpbmcpIHtcbiAgc3dpdGNoIChTdHJpbmcoZW5jb2RpbmcpLnRvTG93ZXJDYXNlKCkpIHtcbiAgICBjYXNlICdoZXgnOlxuICAgIGNhc2UgJ3V0ZjgnOlxuICAgIGNhc2UgJ3V0Zi04JzpcbiAgICBjYXNlICdhc2NpaSc6XG4gICAgY2FzZSAnbGF0aW4xJzpcbiAgICBjYXNlICdiaW5hcnknOlxuICAgIGNhc2UgJ2Jhc2U2NCc6XG4gICAgY2FzZSAndWNzMic6XG4gICAgY2FzZSAndWNzLTInOlxuICAgIGNhc2UgJ3V0ZjE2bGUnOlxuICAgIGNhc2UgJ3V0Zi0xNmxlJzpcbiAgICAgIHJldHVybiB0cnVlXG4gICAgZGVmYXVsdDpcbiAgICAgIHJldHVybiBmYWxzZVxuICB9XG59XG5cbkJ1ZmZlci5jb25jYXQgPSBmdW5jdGlvbiBjb25jYXQgKGxpc3QsIGxlbmd0aCkge1xuICBpZiAoIUFycmF5LmlzQXJyYXkobGlzdCkpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdcImxpc3RcIiBhcmd1bWVudCBtdXN0IGJlIGFuIEFycmF5IG9mIEJ1ZmZlcnMnKVxuICB9XG5cbiAgaWYgKGxpc3QubGVuZ3RoID09PSAwKSB7XG4gICAgcmV0dXJuIEJ1ZmZlci5hbGxvYygwKVxuICB9XG5cbiAgbGV0IGlcbiAgaWYgKGxlbmd0aCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgbGVuZ3RoID0gMFxuICAgIGZvciAoaSA9IDA7IGkgPCBsaXN0Lmxlbmd0aDsgKytpKSB7XG4gICAgICBsZW5ndGggKz0gbGlzdFtpXS5sZW5ndGhcbiAgICB9XG4gIH1cblxuICBjb25zdCBidWZmZXIgPSBCdWZmZXIuYWxsb2NVbnNhZmUobGVuZ3RoKVxuICBsZXQgcG9zID0gMFxuICBmb3IgKGkgPSAwOyBpIDwgbGlzdC5sZW5ndGg7ICsraSkge1xuICAgIGxldCBidWYgPSBsaXN0W2ldXG4gICAgaWYgKGlzSW5zdGFuY2UoYnVmLCBVaW50OEFycmF5KSkge1xuICAgICAgaWYgKHBvcyArIGJ1Zi5sZW5ndGggPiBidWZmZXIubGVuZ3RoKSB7XG4gICAgICAgIGlmICghQnVmZmVyLmlzQnVmZmVyKGJ1ZikpIGJ1ZiA9IEJ1ZmZlci5mcm9tKGJ1ZilcbiAgICAgICAgYnVmLmNvcHkoYnVmZmVyLCBwb3MpXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBVaW50OEFycmF5LnByb3RvdHlwZS5zZXQuY2FsbChcbiAgICAgICAgICBidWZmZXIsXG4gICAgICAgICAgYnVmLFxuICAgICAgICAgIHBvc1xuICAgICAgICApXG4gICAgICB9XG4gICAgfSBlbHNlIGlmICghQnVmZmVyLmlzQnVmZmVyKGJ1ZikpIHtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1wibGlzdFwiIGFyZ3VtZW50IG11c3QgYmUgYW4gQXJyYXkgb2YgQnVmZmVycycpXG4gICAgfSBlbHNlIHtcbiAgICAgIGJ1Zi5jb3B5KGJ1ZmZlciwgcG9zKVxuICAgIH1cbiAgICBwb3MgKz0gYnVmLmxlbmd0aFxuICB9XG4gIHJldHVybiBidWZmZXJcbn1cblxuZnVuY3Rpb24gYnl0ZUxlbmd0aCAoc3RyaW5nLCBlbmNvZGluZykge1xuICBpZiAoQnVmZmVyLmlzQnVmZmVyKHN0cmluZykpIHtcbiAgICByZXR1cm4gc3RyaW5nLmxlbmd0aFxuICB9XG4gIGlmIChBcnJheUJ1ZmZlci5pc1ZpZXcoc3RyaW5nKSB8fCBpc0luc3RhbmNlKHN0cmluZywgQXJyYXlCdWZmZXIpKSB7XG4gICAgcmV0dXJuIHN0cmluZy5ieXRlTGVuZ3RoXG4gIH1cbiAgaWYgKHR5cGVvZiBzdHJpbmcgIT09ICdzdHJpbmcnKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcbiAgICAgICdUaGUgXCJzdHJpbmdcIiBhcmd1bWVudCBtdXN0IGJlIG9uZSBvZiB0eXBlIHN0cmluZywgQnVmZmVyLCBvciBBcnJheUJ1ZmZlci4gJyArXG4gICAgICAnUmVjZWl2ZWQgdHlwZSAnICsgdHlwZW9mIHN0cmluZ1xuICAgIClcbiAgfVxuXG4gIGNvbnN0IGxlbiA9IHN0cmluZy5sZW5ndGhcbiAgY29uc3QgbXVzdE1hdGNoID0gKGFyZ3VtZW50cy5sZW5ndGggPiAyICYmIGFyZ3VtZW50c1syXSA9PT0gdHJ1ZSlcbiAgaWYgKCFtdXN0TWF0Y2ggJiYgbGVuID09PSAwKSByZXR1cm4gMFxuXG4gIC8vIFVzZSBhIGZvciBsb29wIHRvIGF2b2lkIHJlY3Vyc2lvblxuICBsZXQgbG93ZXJlZENhc2UgPSBmYWxzZVxuICBmb3IgKDs7KSB7XG4gICAgc3dpdGNoIChlbmNvZGluZykge1xuICAgICAgY2FzZSAnYXNjaWknOlxuICAgICAgY2FzZSAnbGF0aW4xJzpcbiAgICAgIGNhc2UgJ2JpbmFyeSc6XG4gICAgICAgIHJldHVybiBsZW5cbiAgICAgIGNhc2UgJ3V0ZjgnOlxuICAgICAgY2FzZSAndXRmLTgnOlxuICAgICAgICByZXR1cm4gdXRmOFRvQnl0ZXMoc3RyaW5nKS5sZW5ndGhcbiAgICAgIGNhc2UgJ3VjczInOlxuICAgICAgY2FzZSAndWNzLTInOlxuICAgICAgY2FzZSAndXRmMTZsZSc6XG4gICAgICBjYXNlICd1dGYtMTZsZSc6XG4gICAgICAgIHJldHVybiBsZW4gKiAyXG4gICAgICBjYXNlICdoZXgnOlxuICAgICAgICByZXR1cm4gbGVuID4+PiAxXG4gICAgICBjYXNlICdiYXNlNjQnOlxuICAgICAgICByZXR1cm4gYmFzZTY0VG9CeXRlcyhzdHJpbmcpLmxlbmd0aFxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgaWYgKGxvd2VyZWRDYXNlKSB7XG4gICAgICAgICAgcmV0dXJuIG11c3RNYXRjaCA/IC0xIDogdXRmOFRvQnl0ZXMoc3RyaW5nKS5sZW5ndGggLy8gYXNzdW1lIHV0ZjhcbiAgICAgICAgfVxuICAgICAgICBlbmNvZGluZyA9ICgnJyArIGVuY29kaW5nKS50b0xvd2VyQ2FzZSgpXG4gICAgICAgIGxvd2VyZWRDYXNlID0gdHJ1ZVxuICAgIH1cbiAgfVxufVxuQnVmZmVyLmJ5dGVMZW5ndGggPSBieXRlTGVuZ3RoXG5cbmZ1bmN0aW9uIHNsb3dUb1N0cmluZyAoZW5jb2RpbmcsIHN0YXJ0LCBlbmQpIHtcbiAgbGV0IGxvd2VyZWRDYXNlID0gZmFsc2VcblxuICAvLyBObyBuZWVkIHRvIHZlcmlmeSB0aGF0IFwidGhpcy5sZW5ndGggPD0gTUFYX1VJTlQzMlwiIHNpbmNlIGl0J3MgYSByZWFkLW9ubHlcbiAgLy8gcHJvcGVydHkgb2YgYSB0eXBlZCBhcnJheS5cblxuICAvLyBUaGlzIGJlaGF2ZXMgbmVpdGhlciBsaWtlIFN0cmluZyBub3IgVWludDhBcnJheSBpbiB0aGF0IHdlIHNldCBzdGFydC9lbmRcbiAgLy8gdG8gdGhlaXIgdXBwZXIvbG93ZXIgYm91bmRzIGlmIHRoZSB2YWx1ZSBwYXNzZWQgaXMgb3V0IG9mIHJhbmdlLlxuICAvLyB1bmRlZmluZWQgaXMgaGFuZGxlZCBzcGVjaWFsbHkgYXMgcGVyIEVDTUEtMjYyIDZ0aCBFZGl0aW9uLFxuICAvLyBTZWN0aW9uIDEzLjMuMy43IFJ1bnRpbWUgU2VtYW50aWNzOiBLZXllZEJpbmRpbmdJbml0aWFsaXphdGlvbi5cbiAgaWYgKHN0YXJ0ID09PSB1bmRlZmluZWQgfHwgc3RhcnQgPCAwKSB7XG4gICAgc3RhcnQgPSAwXG4gIH1cbiAgLy8gUmV0dXJuIGVhcmx5IGlmIHN0YXJ0ID4gdGhpcy5sZW5ndGguIERvbmUgaGVyZSB0byBwcmV2ZW50IHBvdGVudGlhbCB1aW50MzJcbiAgLy8gY29lcmNpb24gZmFpbCBiZWxvdy5cbiAgaWYgKHN0YXJ0ID4gdGhpcy5sZW5ndGgpIHtcbiAgICByZXR1cm4gJydcbiAgfVxuXG4gIGlmIChlbmQgPT09IHVuZGVmaW5lZCB8fCBlbmQgPiB0aGlzLmxlbmd0aCkge1xuICAgIGVuZCA9IHRoaXMubGVuZ3RoXG4gIH1cblxuICBpZiAoZW5kIDw9IDApIHtcbiAgICByZXR1cm4gJydcbiAgfVxuXG4gIC8vIEZvcmNlIGNvZXJjaW9uIHRvIHVpbnQzMi4gVGhpcyB3aWxsIGFsc28gY29lcmNlIGZhbHNleS9OYU4gdmFsdWVzIHRvIDAuXG4gIGVuZCA+Pj49IDBcbiAgc3RhcnQgPj4+PSAwXG5cbiAgaWYgKGVuZCA8PSBzdGFydCkge1xuICAgIHJldHVybiAnJ1xuICB9XG5cbiAgaWYgKCFlbmNvZGluZykgZW5jb2RpbmcgPSAndXRmOCdcblxuICB3aGlsZSAodHJ1ZSkge1xuICAgIHN3aXRjaCAoZW5jb2RpbmcpIHtcbiAgICAgIGNhc2UgJ2hleCc6XG4gICAgICAgIHJldHVybiBoZXhTbGljZSh0aGlzLCBzdGFydCwgZW5kKVxuXG4gICAgICBjYXNlICd1dGY4JzpcbiAgICAgIGNhc2UgJ3V0Zi04JzpcbiAgICAgICAgcmV0dXJuIHV0ZjhTbGljZSh0aGlzLCBzdGFydCwgZW5kKVxuXG4gICAgICBjYXNlICdhc2NpaSc6XG4gICAgICAgIHJldHVybiBhc2NpaVNsaWNlKHRoaXMsIHN0YXJ0LCBlbmQpXG5cbiAgICAgIGNhc2UgJ2xhdGluMSc6XG4gICAgICBjYXNlICdiaW5hcnknOlxuICAgICAgICByZXR1cm4gbGF0aW4xU2xpY2UodGhpcywgc3RhcnQsIGVuZClcblxuICAgICAgY2FzZSAnYmFzZTY0JzpcbiAgICAgICAgcmV0dXJuIGJhc2U2NFNsaWNlKHRoaXMsIHN0YXJ0LCBlbmQpXG5cbiAgICAgIGNhc2UgJ3VjczInOlxuICAgICAgY2FzZSAndWNzLTInOlxuICAgICAgY2FzZSAndXRmMTZsZSc6XG4gICAgICBjYXNlICd1dGYtMTZsZSc6XG4gICAgICAgIHJldHVybiB1dGYxNmxlU2xpY2UodGhpcywgc3RhcnQsIGVuZClcblxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgaWYgKGxvd2VyZWRDYXNlKSB0aHJvdyBuZXcgVHlwZUVycm9yKCdVbmtub3duIGVuY29kaW5nOiAnICsgZW5jb2RpbmcpXG4gICAgICAgIGVuY29kaW5nID0gKGVuY29kaW5nICsgJycpLnRvTG93ZXJDYXNlKClcbiAgICAgICAgbG93ZXJlZENhc2UgPSB0cnVlXG4gICAgfVxuICB9XG59XG5cbi8vIFRoaXMgcHJvcGVydHkgaXMgdXNlZCBieSBgQnVmZmVyLmlzQnVmZmVyYCAoYW5kIHRoZSBgaXMtYnVmZmVyYCBucG0gcGFja2FnZSlcbi8vIHRvIGRldGVjdCBhIEJ1ZmZlciBpbnN0YW5jZS4gSXQncyBub3QgcG9zc2libGUgdG8gdXNlIGBpbnN0YW5jZW9mIEJ1ZmZlcmBcbi8vIHJlbGlhYmx5IGluIGEgYnJvd3NlcmlmeSBjb250ZXh0IGJlY2F1c2UgdGhlcmUgY291bGQgYmUgbXVsdGlwbGUgZGlmZmVyZW50XG4vLyBjb3BpZXMgb2YgdGhlICdidWZmZXInIHBhY2thZ2UgaW4gdXNlLiBUaGlzIG1ldGhvZCB3b3JrcyBldmVuIGZvciBCdWZmZXJcbi8vIGluc3RhbmNlcyB0aGF0IHdlcmUgY3JlYXRlZCBmcm9tIGFub3RoZXIgY29weSBvZiB0aGUgYGJ1ZmZlcmAgcGFja2FnZS5cbi8vIFNlZTogaHR0cHM6Ly9naXRodWIuY29tL2Zlcm9zcy9idWZmZXIvaXNzdWVzLzE1NFxuQnVmZmVyLnByb3RvdHlwZS5faXNCdWZmZXIgPSB0cnVlXG5cbmZ1bmN0aW9uIHN3YXAgKGIsIG4sIG0pIHtcbiAgY29uc3QgaSA9IGJbbl1cbiAgYltuXSA9IGJbbV1cbiAgYlttXSA9IGlcbn1cblxuQnVmZmVyLnByb3RvdHlwZS5zd2FwMTYgPSBmdW5jdGlvbiBzd2FwMTYgKCkge1xuICBjb25zdCBsZW4gPSB0aGlzLmxlbmd0aFxuICBpZiAobGVuICUgMiAhPT0gMCkge1xuICAgIHRocm93IG5ldyBSYW5nZUVycm9yKCdCdWZmZXIgc2l6ZSBtdXN0IGJlIGEgbXVsdGlwbGUgb2YgMTYtYml0cycpXG4gIH1cbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBsZW47IGkgKz0gMikge1xuICAgIHN3YXAodGhpcywgaSwgaSArIDEpXG4gIH1cbiAgcmV0dXJuIHRoaXNcbn1cblxuQnVmZmVyLnByb3RvdHlwZS5zd2FwMzIgPSBmdW5jdGlvbiBzd2FwMzIgKCkge1xuICBjb25zdCBsZW4gPSB0aGlzLmxlbmd0aFxuICBpZiAobGVuICUgNCAhPT0gMCkge1xuICAgIHRocm93IG5ldyBSYW5nZUVycm9yKCdCdWZmZXIgc2l6ZSBtdXN0IGJlIGEgbXVsdGlwbGUgb2YgMzItYml0cycpXG4gIH1cbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBsZW47IGkgKz0gNCkge1xuICAgIHN3YXAodGhpcywgaSwgaSArIDMpXG4gICAgc3dhcCh0aGlzLCBpICsgMSwgaSArIDIpXG4gIH1cbiAgcmV0dXJuIHRoaXNcbn1cblxuQnVmZmVyLnByb3RvdHlwZS5zd2FwNjQgPSBmdW5jdGlvbiBzd2FwNjQgKCkge1xuICBjb25zdCBsZW4gPSB0aGlzLmxlbmd0aFxuICBpZiAobGVuICUgOCAhPT0gMCkge1xuICAgIHRocm93IG5ldyBSYW5nZUVycm9yKCdCdWZmZXIgc2l6ZSBtdXN0IGJlIGEgbXVsdGlwbGUgb2YgNjQtYml0cycpXG4gIH1cbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBsZW47IGkgKz0gOCkge1xuICAgIHN3YXAodGhpcywgaSwgaSArIDcpXG4gICAgc3dhcCh0aGlzLCBpICsgMSwgaSArIDYpXG4gICAgc3dhcCh0aGlzLCBpICsgMiwgaSArIDUpXG4gICAgc3dhcCh0aGlzLCBpICsgMywgaSArIDQpXG4gIH1cbiAgcmV0dXJuIHRoaXNcbn1cblxuQnVmZmVyLnByb3RvdHlwZS50b1N0cmluZyA9IGZ1bmN0aW9uIHRvU3RyaW5nICgpIHtcbiAgY29uc3QgbGVuZ3RoID0gdGhpcy5sZW5ndGhcbiAgaWYgKGxlbmd0aCA9PT0gMCkgcmV0dXJuICcnXG4gIGlmIChhcmd1bWVudHMubGVuZ3RoID09PSAwKSByZXR1cm4gdXRmOFNsaWNlKHRoaXMsIDAsIGxlbmd0aClcbiAgcmV0dXJuIHNsb3dUb1N0cmluZy5hcHBseSh0aGlzLCBhcmd1bWVudHMpXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUudG9Mb2NhbGVTdHJpbmcgPSBCdWZmZXIucHJvdG90eXBlLnRvU3RyaW5nXG5cbkJ1ZmZlci5wcm90b3R5cGUuZXF1YWxzID0gZnVuY3Rpb24gZXF1YWxzIChiKSB7XG4gIGlmICghQnVmZmVyLmlzQnVmZmVyKGIpKSB0aHJvdyBuZXcgVHlwZUVycm9yKCdBcmd1bWVudCBtdXN0IGJlIGEgQnVmZmVyJylcbiAgaWYgKHRoaXMgPT09IGIpIHJldHVybiB0cnVlXG4gIHJldHVybiBCdWZmZXIuY29tcGFyZSh0aGlzLCBiKSA9PT0gMFxufVxuXG5CdWZmZXIucHJvdG90eXBlLmluc3BlY3QgPSBmdW5jdGlvbiBpbnNwZWN0ICgpIHtcbiAgbGV0IHN0ciA9ICcnXG4gIGNvbnN0IG1heCA9IGV4cG9ydHMuSU5TUEVDVF9NQVhfQllURVNcbiAgc3RyID0gdGhpcy50b1N0cmluZygnaGV4JywgMCwgbWF4KS5yZXBsYWNlKC8oLnsyfSkvZywgJyQxICcpLnRyaW0oKVxuICBpZiAodGhpcy5sZW5ndGggPiBtYXgpIHN0ciArPSAnIC4uLiAnXG4gIHJldHVybiAnPEJ1ZmZlciAnICsgc3RyICsgJz4nXG59XG5pZiAoY3VzdG9tSW5zcGVjdFN5bWJvbCkge1xuICBCdWZmZXIucHJvdG90eXBlW2N1c3RvbUluc3BlY3RTeW1ib2xdID0gQnVmZmVyLnByb3RvdHlwZS5pbnNwZWN0XG59XG5cbkJ1ZmZlci5wcm90b3R5cGUuY29tcGFyZSA9IGZ1bmN0aW9uIGNvbXBhcmUgKHRhcmdldCwgc3RhcnQsIGVuZCwgdGhpc1N0YXJ0LCB0aGlzRW5kKSB7XG4gIGlmIChpc0luc3RhbmNlKHRhcmdldCwgVWludDhBcnJheSkpIHtcbiAgICB0YXJnZXQgPSBCdWZmZXIuZnJvbSh0YXJnZXQsIHRhcmdldC5vZmZzZXQsIHRhcmdldC5ieXRlTGVuZ3RoKVxuICB9XG4gIGlmICghQnVmZmVyLmlzQnVmZmVyKHRhcmdldCkpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFxuICAgICAgJ1RoZSBcInRhcmdldFwiIGFyZ3VtZW50IG11c3QgYmUgb25lIG9mIHR5cGUgQnVmZmVyIG9yIFVpbnQ4QXJyYXkuICcgK1xuICAgICAgJ1JlY2VpdmVkIHR5cGUgJyArICh0eXBlb2YgdGFyZ2V0KVxuICAgIClcbiAgfVxuXG4gIGlmIChzdGFydCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgc3RhcnQgPSAwXG4gIH1cbiAgaWYgKGVuZCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgZW5kID0gdGFyZ2V0ID8gdGFyZ2V0Lmxlbmd0aCA6IDBcbiAgfVxuICBpZiAodGhpc1N0YXJ0ID09PSB1bmRlZmluZWQpIHtcbiAgICB0aGlzU3RhcnQgPSAwXG4gIH1cbiAgaWYgKHRoaXNFbmQgPT09IHVuZGVmaW5lZCkge1xuICAgIHRoaXNFbmQgPSB0aGlzLmxlbmd0aFxuICB9XG5cbiAgaWYgKHN0YXJ0IDwgMCB8fCBlbmQgPiB0YXJnZXQubGVuZ3RoIHx8IHRoaXNTdGFydCA8IDAgfHwgdGhpc0VuZCA+IHRoaXMubGVuZ3RoKSB7XG4gICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ291dCBvZiByYW5nZSBpbmRleCcpXG4gIH1cblxuICBpZiAodGhpc1N0YXJ0ID49IHRoaXNFbmQgJiYgc3RhcnQgPj0gZW5kKSB7XG4gICAgcmV0dXJuIDBcbiAgfVxuICBpZiAodGhpc1N0YXJ0ID49IHRoaXNFbmQpIHtcbiAgICByZXR1cm4gLTFcbiAgfVxuICBpZiAoc3RhcnQgPj0gZW5kKSB7XG4gICAgcmV0dXJuIDFcbiAgfVxuXG4gIHN0YXJ0ID4+Pj0gMFxuICBlbmQgPj4+PSAwXG4gIHRoaXNTdGFydCA+Pj49IDBcbiAgdGhpc0VuZCA+Pj49IDBcblxuICBpZiAodGhpcyA9PT0gdGFyZ2V0KSByZXR1cm4gMFxuXG4gIGxldCB4ID0gdGhpc0VuZCAtIHRoaXNTdGFydFxuICBsZXQgeSA9IGVuZCAtIHN0YXJ0XG4gIGNvbnN0IGxlbiA9IE1hdGgubWluKHgsIHkpXG5cbiAgY29uc3QgdGhpc0NvcHkgPSB0aGlzLnNsaWNlKHRoaXNTdGFydCwgdGhpc0VuZClcbiAgY29uc3QgdGFyZ2V0Q29weSA9IHRhcmdldC5zbGljZShzdGFydCwgZW5kKVxuXG4gIGZvciAobGV0IGkgPSAwOyBpIDwgbGVuOyArK2kpIHtcbiAgICBpZiAodGhpc0NvcHlbaV0gIT09IHRhcmdldENvcHlbaV0pIHtcbiAgICAgIHggPSB0aGlzQ29weVtpXVxuICAgICAgeSA9IHRhcmdldENvcHlbaV1cbiAgICAgIGJyZWFrXG4gICAgfVxuICB9XG5cbiAgaWYgKHggPCB5KSByZXR1cm4gLTFcbiAgaWYgKHkgPCB4KSByZXR1cm4gMVxuICByZXR1cm4gMFxufVxuXG4vLyBGaW5kcyBlaXRoZXIgdGhlIGZpcnN0IGluZGV4IG9mIGB2YWxgIGluIGBidWZmZXJgIGF0IG9mZnNldCA+PSBgYnl0ZU9mZnNldGAsXG4vLyBPUiB0aGUgbGFzdCBpbmRleCBvZiBgdmFsYCBpbiBgYnVmZmVyYCBhdCBvZmZzZXQgPD0gYGJ5dGVPZmZzZXRgLlxuLy9cbi8vIEFyZ3VtZW50czpcbi8vIC0gYnVmZmVyIC0gYSBCdWZmZXIgdG8gc2VhcmNoXG4vLyAtIHZhbCAtIGEgc3RyaW5nLCBCdWZmZXIsIG9yIG51bWJlclxuLy8gLSBieXRlT2Zmc2V0IC0gYW4gaW5kZXggaW50byBgYnVmZmVyYDsgd2lsbCBiZSBjbGFtcGVkIHRvIGFuIGludDMyXG4vLyAtIGVuY29kaW5nIC0gYW4gb3B0aW9uYWwgZW5jb2RpbmcsIHJlbGV2YW50IGlzIHZhbCBpcyBhIHN0cmluZ1xuLy8gLSBkaXIgLSB0cnVlIGZvciBpbmRleE9mLCBmYWxzZSBmb3IgbGFzdEluZGV4T2ZcbmZ1bmN0aW9uIGJpZGlyZWN0aW9uYWxJbmRleE9mIChidWZmZXIsIHZhbCwgYnl0ZU9mZnNldCwgZW5jb2RpbmcsIGRpcikge1xuICAvLyBFbXB0eSBidWZmZXIgbWVhbnMgbm8gbWF0Y2hcbiAgaWYgKGJ1ZmZlci5sZW5ndGggPT09IDApIHJldHVybiAtMVxuXG4gIC8vIE5vcm1hbGl6ZSBieXRlT2Zmc2V0XG4gIGlmICh0eXBlb2YgYnl0ZU9mZnNldCA9PT0gJ3N0cmluZycpIHtcbiAgICBlbmNvZGluZyA9IGJ5dGVPZmZzZXRcbiAgICBieXRlT2Zmc2V0ID0gMFxuICB9IGVsc2UgaWYgKGJ5dGVPZmZzZXQgPiAweDdmZmZmZmZmKSB7XG4gICAgYnl0ZU9mZnNldCA9IDB4N2ZmZmZmZmZcbiAgfSBlbHNlIGlmIChieXRlT2Zmc2V0IDwgLTB4ODAwMDAwMDApIHtcbiAgICBieXRlT2Zmc2V0ID0gLTB4ODAwMDAwMDBcbiAgfVxuICBieXRlT2Zmc2V0ID0gK2J5dGVPZmZzZXQgLy8gQ29lcmNlIHRvIE51bWJlci5cbiAgaWYgKG51bWJlcklzTmFOKGJ5dGVPZmZzZXQpKSB7XG4gICAgLy8gYnl0ZU9mZnNldDogaXQgaXQncyB1bmRlZmluZWQsIG51bGwsIE5hTiwgXCJmb29cIiwgZXRjLCBzZWFyY2ggd2hvbGUgYnVmZmVyXG4gICAgYnl0ZU9mZnNldCA9IGRpciA/IDAgOiAoYnVmZmVyLmxlbmd0aCAtIDEpXG4gIH1cblxuICAvLyBOb3JtYWxpemUgYnl0ZU9mZnNldDogbmVnYXRpdmUgb2Zmc2V0cyBzdGFydCBmcm9tIHRoZSBlbmQgb2YgdGhlIGJ1ZmZlclxuICBpZiAoYnl0ZU9mZnNldCA8IDApIGJ5dGVPZmZzZXQgPSBidWZmZXIubGVuZ3RoICsgYnl0ZU9mZnNldFxuICBpZiAoYnl0ZU9mZnNldCA+PSBidWZmZXIubGVuZ3RoKSB7XG4gICAgaWYgKGRpcikgcmV0dXJuIC0xXG4gICAgZWxzZSBieXRlT2Zmc2V0ID0gYnVmZmVyLmxlbmd0aCAtIDFcbiAgfSBlbHNlIGlmIChieXRlT2Zmc2V0IDwgMCkge1xuICAgIGlmIChkaXIpIGJ5dGVPZmZzZXQgPSAwXG4gICAgZWxzZSByZXR1cm4gLTFcbiAgfVxuXG4gIC8vIE5vcm1hbGl6ZSB2YWxcbiAgaWYgKHR5cGVvZiB2YWwgPT09ICdzdHJpbmcnKSB7XG4gICAgdmFsID0gQnVmZmVyLmZyb20odmFsLCBlbmNvZGluZylcbiAgfVxuXG4gIC8vIEZpbmFsbHksIHNlYXJjaCBlaXRoZXIgaW5kZXhPZiAoaWYgZGlyIGlzIHRydWUpIG9yIGxhc3RJbmRleE9mXG4gIGlmIChCdWZmZXIuaXNCdWZmZXIodmFsKSkge1xuICAgIC8vIFNwZWNpYWwgY2FzZTogbG9va2luZyBmb3IgZW1wdHkgc3RyaW5nL2J1ZmZlciBhbHdheXMgZmFpbHNcbiAgICBpZiAodmFsLmxlbmd0aCA9PT0gMCkge1xuICAgICAgcmV0dXJuIC0xXG4gICAgfVxuICAgIHJldHVybiBhcnJheUluZGV4T2YoYnVmZmVyLCB2YWwsIGJ5dGVPZmZzZXQsIGVuY29kaW5nLCBkaXIpXG4gIH0gZWxzZSBpZiAodHlwZW9mIHZhbCA9PT0gJ251bWJlcicpIHtcbiAgICB2YWwgPSB2YWwgJiAweEZGIC8vIFNlYXJjaCBmb3IgYSBieXRlIHZhbHVlIFswLTI1NV1cbiAgICBpZiAodHlwZW9mIFVpbnQ4QXJyYXkucHJvdG90eXBlLmluZGV4T2YgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIGlmIChkaXIpIHtcbiAgICAgICAgcmV0dXJuIFVpbnQ4QXJyYXkucHJvdG90eXBlLmluZGV4T2YuY2FsbChidWZmZXIsIHZhbCwgYnl0ZU9mZnNldClcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBVaW50OEFycmF5LnByb3RvdHlwZS5sYXN0SW5kZXhPZi5jYWxsKGJ1ZmZlciwgdmFsLCBieXRlT2Zmc2V0KVxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gYXJyYXlJbmRleE9mKGJ1ZmZlciwgW3ZhbF0sIGJ5dGVPZmZzZXQsIGVuY29kaW5nLCBkaXIpXG4gIH1cblxuICB0aHJvdyBuZXcgVHlwZUVycm9yKCd2YWwgbXVzdCBiZSBzdHJpbmcsIG51bWJlciBvciBCdWZmZXInKVxufVxuXG5mdW5jdGlvbiBhcnJheUluZGV4T2YgKGFyciwgdmFsLCBieXRlT2Zmc2V0LCBlbmNvZGluZywgZGlyKSB7XG4gIGxldCBpbmRleFNpemUgPSAxXG4gIGxldCBhcnJMZW5ndGggPSBhcnIubGVuZ3RoXG4gIGxldCB2YWxMZW5ndGggPSB2YWwubGVuZ3RoXG5cbiAgaWYgKGVuY29kaW5nICE9PSB1bmRlZmluZWQpIHtcbiAgICBlbmNvZGluZyA9IFN0cmluZyhlbmNvZGluZykudG9Mb3dlckNhc2UoKVxuICAgIGlmIChlbmNvZGluZyA9PT0gJ3VjczInIHx8IGVuY29kaW5nID09PSAndWNzLTInIHx8XG4gICAgICAgIGVuY29kaW5nID09PSAndXRmMTZsZScgfHwgZW5jb2RpbmcgPT09ICd1dGYtMTZsZScpIHtcbiAgICAgIGlmIChhcnIubGVuZ3RoIDwgMiB8fCB2YWwubGVuZ3RoIDwgMikge1xuICAgICAgICByZXR1cm4gLTFcbiAgICAgIH1cbiAgICAgIGluZGV4U2l6ZSA9IDJcbiAgICAgIGFyckxlbmd0aCAvPSAyXG4gICAgICB2YWxMZW5ndGggLz0gMlxuICAgICAgYnl0ZU9mZnNldCAvPSAyXG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gcmVhZCAoYnVmLCBpKSB7XG4gICAgaWYgKGluZGV4U2l6ZSA9PT0gMSkge1xuICAgICAgcmV0dXJuIGJ1ZltpXVxuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gYnVmLnJlYWRVSW50MTZCRShpICogaW5kZXhTaXplKVxuICAgIH1cbiAgfVxuXG4gIGxldCBpXG4gIGlmIChkaXIpIHtcbiAgICBsZXQgZm91bmRJbmRleCA9IC0xXG4gICAgZm9yIChpID0gYnl0ZU9mZnNldDsgaSA8IGFyckxlbmd0aDsgaSsrKSB7XG4gICAgICBpZiAocmVhZChhcnIsIGkpID09PSByZWFkKHZhbCwgZm91bmRJbmRleCA9PT0gLTEgPyAwIDogaSAtIGZvdW5kSW5kZXgpKSB7XG4gICAgICAgIGlmIChmb3VuZEluZGV4ID09PSAtMSkgZm91bmRJbmRleCA9IGlcbiAgICAgICAgaWYgKGkgLSBmb3VuZEluZGV4ICsgMSA9PT0gdmFsTGVuZ3RoKSByZXR1cm4gZm91bmRJbmRleCAqIGluZGV4U2l6ZVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaWYgKGZvdW5kSW5kZXggIT09IC0xKSBpIC09IGkgLSBmb3VuZEluZGV4XG4gICAgICAgIGZvdW5kSW5kZXggPSAtMVxuICAgICAgfVxuICAgIH1cbiAgfSBlbHNlIHtcbiAgICBpZiAoYnl0ZU9mZnNldCArIHZhbExlbmd0aCA+IGFyckxlbmd0aCkgYnl0ZU9mZnNldCA9IGFyckxlbmd0aCAtIHZhbExlbmd0aFxuICAgIGZvciAoaSA9IGJ5dGVPZmZzZXQ7IGkgPj0gMDsgaS0tKSB7XG4gICAgICBsZXQgZm91bmQgPSB0cnVlXG4gICAgICBmb3IgKGxldCBqID0gMDsgaiA8IHZhbExlbmd0aDsgaisrKSB7XG4gICAgICAgIGlmIChyZWFkKGFyciwgaSArIGopICE9PSByZWFkKHZhbCwgaikpIHtcbiAgICAgICAgICBmb3VuZCA9IGZhbHNlXG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYgKGZvdW5kKSByZXR1cm4gaVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiAtMVxufVxuXG5CdWZmZXIucHJvdG90eXBlLmluY2x1ZGVzID0gZnVuY3Rpb24gaW5jbHVkZXMgKHZhbCwgYnl0ZU9mZnNldCwgZW5jb2RpbmcpIHtcbiAgcmV0dXJuIHRoaXMuaW5kZXhPZih2YWwsIGJ5dGVPZmZzZXQsIGVuY29kaW5nKSAhPT0gLTFcbn1cblxuQnVmZmVyLnByb3RvdHlwZS5pbmRleE9mID0gZnVuY3Rpb24gaW5kZXhPZiAodmFsLCBieXRlT2Zmc2V0LCBlbmNvZGluZykge1xuICByZXR1cm4gYmlkaXJlY3Rpb25hbEluZGV4T2YodGhpcywgdmFsLCBieXRlT2Zmc2V0LCBlbmNvZGluZywgdHJ1ZSlcbn1cblxuQnVmZmVyLnByb3RvdHlwZS5sYXN0SW5kZXhPZiA9IGZ1bmN0aW9uIGxhc3RJbmRleE9mICh2YWwsIGJ5dGVPZmZzZXQsIGVuY29kaW5nKSB7XG4gIHJldHVybiBiaWRpcmVjdGlvbmFsSW5kZXhPZih0aGlzLCB2YWwsIGJ5dGVPZmZzZXQsIGVuY29kaW5nLCBmYWxzZSlcbn1cblxuZnVuY3Rpb24gaGV4V3JpdGUgKGJ1Ziwgc3RyaW5nLCBvZmZzZXQsIGxlbmd0aCkge1xuICBvZmZzZXQgPSBOdW1iZXIob2Zmc2V0KSB8fCAwXG4gIGNvbnN0IHJlbWFpbmluZyA9IGJ1Zi5sZW5ndGggLSBvZmZzZXRcbiAgaWYgKCFsZW5ndGgpIHtcbiAgICBsZW5ndGggPSByZW1haW5pbmdcbiAgfSBlbHNlIHtcbiAgICBsZW5ndGggPSBOdW1iZXIobGVuZ3RoKVxuICAgIGlmIChsZW5ndGggPiByZW1haW5pbmcpIHtcbiAgICAgIGxlbmd0aCA9IHJlbWFpbmluZ1xuICAgIH1cbiAgfVxuXG4gIGNvbnN0IHN0ckxlbiA9IHN0cmluZy5sZW5ndGhcblxuICBpZiAobGVuZ3RoID4gc3RyTGVuIC8gMikge1xuICAgIGxlbmd0aCA9IHN0ckxlbiAvIDJcbiAgfVxuICBsZXQgaVxuICBmb3IgKGkgPSAwOyBpIDwgbGVuZ3RoOyArK2kpIHtcbiAgICBjb25zdCBwYXJzZWQgPSBwYXJzZUludChzdHJpbmcuc3Vic3RyKGkgKiAyLCAyKSwgMTYpXG4gICAgaWYgKG51bWJlcklzTmFOKHBhcnNlZCkpIHJldHVybiBpXG4gICAgYnVmW29mZnNldCArIGldID0gcGFyc2VkXG4gIH1cbiAgcmV0dXJuIGlcbn1cblxuZnVuY3Rpb24gdXRmOFdyaXRlIChidWYsIHN0cmluZywgb2Zmc2V0LCBsZW5ndGgpIHtcbiAgcmV0dXJuIGJsaXRCdWZmZXIodXRmOFRvQnl0ZXMoc3RyaW5nLCBidWYubGVuZ3RoIC0gb2Zmc2V0KSwgYnVmLCBvZmZzZXQsIGxlbmd0aClcbn1cblxuZnVuY3Rpb24gYXNjaWlXcml0ZSAoYnVmLCBzdHJpbmcsIG9mZnNldCwgbGVuZ3RoKSB7XG4gIHJldHVybiBibGl0QnVmZmVyKGFzY2lpVG9CeXRlcyhzdHJpbmcpLCBidWYsIG9mZnNldCwgbGVuZ3RoKVxufVxuXG5mdW5jdGlvbiBiYXNlNjRXcml0ZSAoYnVmLCBzdHJpbmcsIG9mZnNldCwgbGVuZ3RoKSB7XG4gIHJldHVybiBibGl0QnVmZmVyKGJhc2U2NFRvQnl0ZXMoc3RyaW5nKSwgYnVmLCBvZmZzZXQsIGxlbmd0aClcbn1cblxuZnVuY3Rpb24gdWNzMldyaXRlIChidWYsIHN0cmluZywgb2Zmc2V0LCBsZW5ndGgpIHtcbiAgcmV0dXJuIGJsaXRCdWZmZXIodXRmMTZsZVRvQnl0ZXMoc3RyaW5nLCBidWYubGVuZ3RoIC0gb2Zmc2V0KSwgYnVmLCBvZmZzZXQsIGxlbmd0aClcbn1cblxuQnVmZmVyLnByb3RvdHlwZS53cml0ZSA9IGZ1bmN0aW9uIHdyaXRlIChzdHJpbmcsIG9mZnNldCwgbGVuZ3RoLCBlbmNvZGluZykge1xuICAvLyBCdWZmZXIjd3JpdGUoc3RyaW5nKVxuICBpZiAob2Zmc2V0ID09PSB1bmRlZmluZWQpIHtcbiAgICBlbmNvZGluZyA9ICd1dGY4J1xuICAgIGxlbmd0aCA9IHRoaXMubGVuZ3RoXG4gICAgb2Zmc2V0ID0gMFxuICAvLyBCdWZmZXIjd3JpdGUoc3RyaW5nLCBlbmNvZGluZylcbiAgfSBlbHNlIGlmIChsZW5ndGggPT09IHVuZGVmaW5lZCAmJiB0eXBlb2Ygb2Zmc2V0ID09PSAnc3RyaW5nJykge1xuICAgIGVuY29kaW5nID0gb2Zmc2V0XG4gICAgbGVuZ3RoID0gdGhpcy5sZW5ndGhcbiAgICBvZmZzZXQgPSAwXG4gIC8vIEJ1ZmZlciN3cml0ZShzdHJpbmcsIG9mZnNldFssIGxlbmd0aF1bLCBlbmNvZGluZ10pXG4gIH0gZWxzZSBpZiAoaXNGaW5pdGUob2Zmc2V0KSkge1xuICAgIG9mZnNldCA9IG9mZnNldCA+Pj4gMFxuICAgIGlmIChpc0Zpbml0ZShsZW5ndGgpKSB7XG4gICAgICBsZW5ndGggPSBsZW5ndGggPj4+IDBcbiAgICAgIGlmIChlbmNvZGluZyA9PT0gdW5kZWZpbmVkKSBlbmNvZGluZyA9ICd1dGY4J1xuICAgIH0gZWxzZSB7XG4gICAgICBlbmNvZGluZyA9IGxlbmd0aFxuICAgICAgbGVuZ3RoID0gdW5kZWZpbmVkXG4gICAgfVxuICB9IGVsc2Uge1xuICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICdCdWZmZXIud3JpdGUoc3RyaW5nLCBlbmNvZGluZywgb2Zmc2V0WywgbGVuZ3RoXSkgaXMgbm8gbG9uZ2VyIHN1cHBvcnRlZCdcbiAgICApXG4gIH1cblxuICBjb25zdCByZW1haW5pbmcgPSB0aGlzLmxlbmd0aCAtIG9mZnNldFxuICBpZiAobGVuZ3RoID09PSB1bmRlZmluZWQgfHwgbGVuZ3RoID4gcmVtYWluaW5nKSBsZW5ndGggPSByZW1haW5pbmdcblxuICBpZiAoKHN0cmluZy5sZW5ndGggPiAwICYmIChsZW5ndGggPCAwIHx8IG9mZnNldCA8IDApKSB8fCBvZmZzZXQgPiB0aGlzLmxlbmd0aCkge1xuICAgIHRocm93IG5ldyBSYW5nZUVycm9yKCdBdHRlbXB0IHRvIHdyaXRlIG91dHNpZGUgYnVmZmVyIGJvdW5kcycpXG4gIH1cblxuICBpZiAoIWVuY29kaW5nKSBlbmNvZGluZyA9ICd1dGY4J1xuXG4gIGxldCBsb3dlcmVkQ2FzZSA9IGZhbHNlXG4gIGZvciAoOzspIHtcbiAgICBzd2l0Y2ggKGVuY29kaW5nKSB7XG4gICAgICBjYXNlICdoZXgnOlxuICAgICAgICByZXR1cm4gaGV4V3JpdGUodGhpcywgc3RyaW5nLCBvZmZzZXQsIGxlbmd0aClcblxuICAgICAgY2FzZSAndXRmOCc6XG4gICAgICBjYXNlICd1dGYtOCc6XG4gICAgICAgIHJldHVybiB1dGY4V3JpdGUodGhpcywgc3RyaW5nLCBvZmZzZXQsIGxlbmd0aClcblxuICAgICAgY2FzZSAnYXNjaWknOlxuICAgICAgY2FzZSAnbGF0aW4xJzpcbiAgICAgIGNhc2UgJ2JpbmFyeSc6XG4gICAgICAgIHJldHVybiBhc2NpaVdyaXRlKHRoaXMsIHN0cmluZywgb2Zmc2V0LCBsZW5ndGgpXG5cbiAgICAgIGNhc2UgJ2Jhc2U2NCc6XG4gICAgICAgIC8vIFdhcm5pbmc6IG1heExlbmd0aCBub3QgdGFrZW4gaW50byBhY2NvdW50IGluIGJhc2U2NFdyaXRlXG4gICAgICAgIHJldHVybiBiYXNlNjRXcml0ZSh0aGlzLCBzdHJpbmcsIG9mZnNldCwgbGVuZ3RoKVxuXG4gICAgICBjYXNlICd1Y3MyJzpcbiAgICAgIGNhc2UgJ3Vjcy0yJzpcbiAgICAgIGNhc2UgJ3V0ZjE2bGUnOlxuICAgICAgY2FzZSAndXRmLTE2bGUnOlxuICAgICAgICByZXR1cm4gdWNzMldyaXRlKHRoaXMsIHN0cmluZywgb2Zmc2V0LCBsZW5ndGgpXG5cbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIGlmIChsb3dlcmVkQ2FzZSkgdGhyb3cgbmV3IFR5cGVFcnJvcignVW5rbm93biBlbmNvZGluZzogJyArIGVuY29kaW5nKVxuICAgICAgICBlbmNvZGluZyA9ICgnJyArIGVuY29kaW5nKS50b0xvd2VyQ2FzZSgpXG4gICAgICAgIGxvd2VyZWRDYXNlID0gdHJ1ZVxuICAgIH1cbiAgfVxufVxuXG5CdWZmZXIucHJvdG90eXBlLnRvSlNPTiA9IGZ1bmN0aW9uIHRvSlNPTiAoKSB7XG4gIHJldHVybiB7XG4gICAgdHlwZTogJ0J1ZmZlcicsXG4gICAgZGF0YTogQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwodGhpcy5fYXJyIHx8IHRoaXMsIDApXG4gIH1cbn1cblxuZnVuY3Rpb24gYmFzZTY0U2xpY2UgKGJ1Ziwgc3RhcnQsIGVuZCkge1xuICBpZiAoc3RhcnQgPT09IDAgJiYgZW5kID09PSBidWYubGVuZ3RoKSB7XG4gICAgcmV0dXJuIGJhc2U2NC5mcm9tQnl0ZUFycmF5KGJ1ZilcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gYmFzZTY0LmZyb21CeXRlQXJyYXkoYnVmLnNsaWNlKHN0YXJ0LCBlbmQpKVxuICB9XG59XG5cbmZ1bmN0aW9uIHV0ZjhTbGljZSAoYnVmLCBzdGFydCwgZW5kKSB7XG4gIGVuZCA9IE1hdGgubWluKGJ1Zi5sZW5ndGgsIGVuZClcbiAgY29uc3QgcmVzID0gW11cblxuICBsZXQgaSA9IHN0YXJ0XG4gIHdoaWxlIChpIDwgZW5kKSB7XG4gICAgY29uc3QgZmlyc3RCeXRlID0gYnVmW2ldXG4gICAgbGV0IGNvZGVQb2ludCA9IG51bGxcbiAgICBsZXQgYnl0ZXNQZXJTZXF1ZW5jZSA9IChmaXJzdEJ5dGUgPiAweEVGKVxuICAgICAgPyA0XG4gICAgICA6IChmaXJzdEJ5dGUgPiAweERGKVxuICAgICAgICAgID8gM1xuICAgICAgICAgIDogKGZpcnN0Qnl0ZSA+IDB4QkYpXG4gICAgICAgICAgICAgID8gMlxuICAgICAgICAgICAgICA6IDFcblxuICAgIGlmIChpICsgYnl0ZXNQZXJTZXF1ZW5jZSA8PSBlbmQpIHtcbiAgICAgIGxldCBzZWNvbmRCeXRlLCB0aGlyZEJ5dGUsIGZvdXJ0aEJ5dGUsIHRlbXBDb2RlUG9pbnRcblxuICAgICAgc3dpdGNoIChieXRlc1BlclNlcXVlbmNlKSB7XG4gICAgICAgIGNhc2UgMTpcbiAgICAgICAgICBpZiAoZmlyc3RCeXRlIDwgMHg4MCkge1xuICAgICAgICAgICAgY29kZVBvaW50ID0gZmlyc3RCeXRlXG4gICAgICAgICAgfVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIGNhc2UgMjpcbiAgICAgICAgICBzZWNvbmRCeXRlID0gYnVmW2kgKyAxXVxuICAgICAgICAgIGlmICgoc2Vjb25kQnl0ZSAmIDB4QzApID09PSAweDgwKSB7XG4gICAgICAgICAgICB0ZW1wQ29kZVBvaW50ID0gKGZpcnN0Qnl0ZSAmIDB4MUYpIDw8IDB4NiB8IChzZWNvbmRCeXRlICYgMHgzRilcbiAgICAgICAgICAgIGlmICh0ZW1wQ29kZVBvaW50ID4gMHg3Rikge1xuICAgICAgICAgICAgICBjb2RlUG9pbnQgPSB0ZW1wQ29kZVBvaW50XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIGNhc2UgMzpcbiAgICAgICAgICBzZWNvbmRCeXRlID0gYnVmW2kgKyAxXVxuICAgICAgICAgIHRoaXJkQnl0ZSA9IGJ1ZltpICsgMl1cbiAgICAgICAgICBpZiAoKHNlY29uZEJ5dGUgJiAweEMwKSA9PT0gMHg4MCAmJiAodGhpcmRCeXRlICYgMHhDMCkgPT09IDB4ODApIHtcbiAgICAgICAgICAgIHRlbXBDb2RlUG9pbnQgPSAoZmlyc3RCeXRlICYgMHhGKSA8PCAweEMgfCAoc2Vjb25kQnl0ZSAmIDB4M0YpIDw8IDB4NiB8ICh0aGlyZEJ5dGUgJiAweDNGKVxuICAgICAgICAgICAgaWYgKHRlbXBDb2RlUG9pbnQgPiAweDdGRiAmJiAodGVtcENvZGVQb2ludCA8IDB4RDgwMCB8fCB0ZW1wQ29kZVBvaW50ID4gMHhERkZGKSkge1xuICAgICAgICAgICAgICBjb2RlUG9pbnQgPSB0ZW1wQ29kZVBvaW50XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIGNhc2UgNDpcbiAgICAgICAgICBzZWNvbmRCeXRlID0gYnVmW2kgKyAxXVxuICAgICAgICAgIHRoaXJkQnl0ZSA9IGJ1ZltpICsgMl1cbiAgICAgICAgICBmb3VydGhCeXRlID0gYnVmW2kgKyAzXVxuICAgICAgICAgIGlmICgoc2Vjb25kQnl0ZSAmIDB4QzApID09PSAweDgwICYmICh0aGlyZEJ5dGUgJiAweEMwKSA9PT0gMHg4MCAmJiAoZm91cnRoQnl0ZSAmIDB4QzApID09PSAweDgwKSB7XG4gICAgICAgICAgICB0ZW1wQ29kZVBvaW50ID0gKGZpcnN0Qnl0ZSAmIDB4RikgPDwgMHgxMiB8IChzZWNvbmRCeXRlICYgMHgzRikgPDwgMHhDIHwgKHRoaXJkQnl0ZSAmIDB4M0YpIDw8IDB4NiB8IChmb3VydGhCeXRlICYgMHgzRilcbiAgICAgICAgICAgIGlmICh0ZW1wQ29kZVBvaW50ID4gMHhGRkZGICYmIHRlbXBDb2RlUG9pbnQgPCAweDExMDAwMCkge1xuICAgICAgICAgICAgICBjb2RlUG9pbnQgPSB0ZW1wQ29kZVBvaW50XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChjb2RlUG9pbnQgPT09IG51bGwpIHtcbiAgICAgIC8vIHdlIGRpZCBub3QgZ2VuZXJhdGUgYSB2YWxpZCBjb2RlUG9pbnQgc28gaW5zZXJ0IGFcbiAgICAgIC8vIHJlcGxhY2VtZW50IGNoYXIgKFUrRkZGRCkgYW5kIGFkdmFuY2Ugb25seSAxIGJ5dGVcbiAgICAgIGNvZGVQb2ludCA9IDB4RkZGRFxuICAgICAgYnl0ZXNQZXJTZXF1ZW5jZSA9IDFcbiAgICB9IGVsc2UgaWYgKGNvZGVQb2ludCA+IDB4RkZGRikge1xuICAgICAgLy8gZW5jb2RlIHRvIHV0ZjE2IChzdXJyb2dhdGUgcGFpciBkYW5jZSlcbiAgICAgIGNvZGVQb2ludCAtPSAweDEwMDAwXG4gICAgICByZXMucHVzaChjb2RlUG9pbnQgPj4+IDEwICYgMHgzRkYgfCAweEQ4MDApXG4gICAgICBjb2RlUG9pbnQgPSAweERDMDAgfCBjb2RlUG9pbnQgJiAweDNGRlxuICAgIH1cblxuICAgIHJlcy5wdXNoKGNvZGVQb2ludClcbiAgICBpICs9IGJ5dGVzUGVyU2VxdWVuY2VcbiAgfVxuXG4gIHJldHVybiBkZWNvZGVDb2RlUG9pbnRzQXJyYXkocmVzKVxufVxuXG4vLyBCYXNlZCBvbiBodHRwOi8vc3RhY2tvdmVyZmxvdy5jb20vYS8yMjc0NzI3Mi82ODA3NDIsIHRoZSBicm93c2VyIHdpdGhcbi8vIHRoZSBsb3dlc3QgbGltaXQgaXMgQ2hyb21lLCB3aXRoIDB4MTAwMDAgYXJncy5cbi8vIFdlIGdvIDEgbWFnbml0dWRlIGxlc3MsIGZvciBzYWZldHlcbmNvbnN0IE1BWF9BUkdVTUVOVFNfTEVOR1RIID0gMHgxMDAwXG5cbmZ1bmN0aW9uIGRlY29kZUNvZGVQb2ludHNBcnJheSAoY29kZVBvaW50cykge1xuICBjb25zdCBsZW4gPSBjb2RlUG9pbnRzLmxlbmd0aFxuICBpZiAobGVuIDw9IE1BWF9BUkdVTUVOVFNfTEVOR1RIKSB7XG4gICAgcmV0dXJuIFN0cmluZy5mcm9tQ2hhckNvZGUuYXBwbHkoU3RyaW5nLCBjb2RlUG9pbnRzKSAvLyBhdm9pZCBleHRyYSBzbGljZSgpXG4gIH1cblxuICAvLyBEZWNvZGUgaW4gY2h1bmtzIHRvIGF2b2lkIFwiY2FsbCBzdGFjayBzaXplIGV4Y2VlZGVkXCIuXG4gIGxldCByZXMgPSAnJ1xuICBsZXQgaSA9IDBcbiAgd2hpbGUgKGkgPCBsZW4pIHtcbiAgICByZXMgKz0gU3RyaW5nLmZyb21DaGFyQ29kZS5hcHBseShcbiAgICAgIFN0cmluZyxcbiAgICAgIGNvZGVQb2ludHMuc2xpY2UoaSwgaSArPSBNQVhfQVJHVU1FTlRTX0xFTkdUSClcbiAgICApXG4gIH1cbiAgcmV0dXJuIHJlc1xufVxuXG5mdW5jdGlvbiBhc2NpaVNsaWNlIChidWYsIHN0YXJ0LCBlbmQpIHtcbiAgbGV0IHJldCA9ICcnXG4gIGVuZCA9IE1hdGgubWluKGJ1Zi5sZW5ndGgsIGVuZClcblxuICBmb3IgKGxldCBpID0gc3RhcnQ7IGkgPCBlbmQ7ICsraSkge1xuICAgIHJldCArPSBTdHJpbmcuZnJvbUNoYXJDb2RlKGJ1ZltpXSAmIDB4N0YpXG4gIH1cbiAgcmV0dXJuIHJldFxufVxuXG5mdW5jdGlvbiBsYXRpbjFTbGljZSAoYnVmLCBzdGFydCwgZW5kKSB7XG4gIGxldCByZXQgPSAnJ1xuICBlbmQgPSBNYXRoLm1pbihidWYubGVuZ3RoLCBlbmQpXG5cbiAgZm9yIChsZXQgaSA9IHN0YXJ0OyBpIDwgZW5kOyArK2kpIHtcbiAgICByZXQgKz0gU3RyaW5nLmZyb21DaGFyQ29kZShidWZbaV0pXG4gIH1cbiAgcmV0dXJuIHJldFxufVxuXG5mdW5jdGlvbiBoZXhTbGljZSAoYnVmLCBzdGFydCwgZW5kKSB7XG4gIGNvbnN0IGxlbiA9IGJ1Zi5sZW5ndGhcblxuICBpZiAoIXN0YXJ0IHx8IHN0YXJ0IDwgMCkgc3RhcnQgPSAwXG4gIGlmICghZW5kIHx8IGVuZCA8IDAgfHwgZW5kID4gbGVuKSBlbmQgPSBsZW5cblxuICBsZXQgb3V0ID0gJydcbiAgZm9yIChsZXQgaSA9IHN0YXJ0OyBpIDwgZW5kOyArK2kpIHtcbiAgICBvdXQgKz0gaGV4U2xpY2VMb29rdXBUYWJsZVtidWZbaV1dXG4gIH1cbiAgcmV0dXJuIG91dFxufVxuXG5mdW5jdGlvbiB1dGYxNmxlU2xpY2UgKGJ1Ziwgc3RhcnQsIGVuZCkge1xuICBjb25zdCBieXRlcyA9IGJ1Zi5zbGljZShzdGFydCwgZW5kKVxuICBsZXQgcmVzID0gJydcbiAgLy8gSWYgYnl0ZXMubGVuZ3RoIGlzIG9kZCwgdGhlIGxhc3QgOCBiaXRzIG11c3QgYmUgaWdub3JlZCAoc2FtZSBhcyBub2RlLmpzKVxuICBmb3IgKGxldCBpID0gMDsgaSA8IGJ5dGVzLmxlbmd0aCAtIDE7IGkgKz0gMikge1xuICAgIHJlcyArPSBTdHJpbmcuZnJvbUNoYXJDb2RlKGJ5dGVzW2ldICsgKGJ5dGVzW2kgKyAxXSAqIDI1NikpXG4gIH1cbiAgcmV0dXJuIHJlc1xufVxuXG5CdWZmZXIucHJvdG90eXBlLnNsaWNlID0gZnVuY3Rpb24gc2xpY2UgKHN0YXJ0LCBlbmQpIHtcbiAgY29uc3QgbGVuID0gdGhpcy5sZW5ndGhcbiAgc3RhcnQgPSB+fnN0YXJ0XG4gIGVuZCA9IGVuZCA9PT0gdW5kZWZpbmVkID8gbGVuIDogfn5lbmRcblxuICBpZiAoc3RhcnQgPCAwKSB7XG4gICAgc3RhcnQgKz0gbGVuXG4gICAgaWYgKHN0YXJ0IDwgMCkgc3RhcnQgPSAwXG4gIH0gZWxzZSBpZiAoc3RhcnQgPiBsZW4pIHtcbiAgICBzdGFydCA9IGxlblxuICB9XG5cbiAgaWYgKGVuZCA8IDApIHtcbiAgICBlbmQgKz0gbGVuXG4gICAgaWYgKGVuZCA8IDApIGVuZCA9IDBcbiAgfSBlbHNlIGlmIChlbmQgPiBsZW4pIHtcbiAgICBlbmQgPSBsZW5cbiAgfVxuXG4gIGlmIChlbmQgPCBzdGFydCkgZW5kID0gc3RhcnRcblxuICBjb25zdCBuZXdCdWYgPSB0aGlzLnN1YmFycmF5KHN0YXJ0LCBlbmQpXG4gIC8vIFJldHVybiBhbiBhdWdtZW50ZWQgYFVpbnQ4QXJyYXlgIGluc3RhbmNlXG4gIE9iamVjdC5zZXRQcm90b3R5cGVPZihuZXdCdWYsIEJ1ZmZlci5wcm90b3R5cGUpXG5cbiAgcmV0dXJuIG5ld0J1ZlxufVxuXG4vKlxuICogTmVlZCB0byBtYWtlIHN1cmUgdGhhdCBidWZmZXIgaXNuJ3QgdHJ5aW5nIHRvIHdyaXRlIG91dCBvZiBib3VuZHMuXG4gKi9cbmZ1bmN0aW9uIGNoZWNrT2Zmc2V0IChvZmZzZXQsIGV4dCwgbGVuZ3RoKSB7XG4gIGlmICgob2Zmc2V0ICUgMSkgIT09IDAgfHwgb2Zmc2V0IDwgMCkgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ29mZnNldCBpcyBub3QgdWludCcpXG4gIGlmIChvZmZzZXQgKyBleHQgPiBsZW5ndGgpIHRocm93IG5ldyBSYW5nZUVycm9yKCdUcnlpbmcgdG8gYWNjZXNzIGJleW9uZCBidWZmZXIgbGVuZ3RoJylcbn1cblxuQnVmZmVyLnByb3RvdHlwZS5yZWFkVWludExFID1cbkJ1ZmZlci5wcm90b3R5cGUucmVhZFVJbnRMRSA9IGZ1bmN0aW9uIHJlYWRVSW50TEUgKG9mZnNldCwgYnl0ZUxlbmd0aCwgbm9Bc3NlcnQpIHtcbiAgb2Zmc2V0ID0gb2Zmc2V0ID4+PiAwXG4gIGJ5dGVMZW5ndGggPSBieXRlTGVuZ3RoID4+PiAwXG4gIGlmICghbm9Bc3NlcnQpIGNoZWNrT2Zmc2V0KG9mZnNldCwgYnl0ZUxlbmd0aCwgdGhpcy5sZW5ndGgpXG5cbiAgbGV0IHZhbCA9IHRoaXNbb2Zmc2V0XVxuICBsZXQgbXVsID0gMVxuICBsZXQgaSA9IDBcbiAgd2hpbGUgKCsraSA8IGJ5dGVMZW5ndGggJiYgKG11bCAqPSAweDEwMCkpIHtcbiAgICB2YWwgKz0gdGhpc1tvZmZzZXQgKyBpXSAqIG11bFxuICB9XG5cbiAgcmV0dXJuIHZhbFxufVxuXG5CdWZmZXIucHJvdG90eXBlLnJlYWRVaW50QkUgPVxuQnVmZmVyLnByb3RvdHlwZS5yZWFkVUludEJFID0gZnVuY3Rpb24gcmVhZFVJbnRCRSAob2Zmc2V0LCBieXRlTGVuZ3RoLCBub0Fzc2VydCkge1xuICBvZmZzZXQgPSBvZmZzZXQgPj4+IDBcbiAgYnl0ZUxlbmd0aCA9IGJ5dGVMZW5ndGggPj4+IDBcbiAgaWYgKCFub0Fzc2VydCkge1xuICAgIGNoZWNrT2Zmc2V0KG9mZnNldCwgYnl0ZUxlbmd0aCwgdGhpcy5sZW5ndGgpXG4gIH1cblxuICBsZXQgdmFsID0gdGhpc1tvZmZzZXQgKyAtLWJ5dGVMZW5ndGhdXG4gIGxldCBtdWwgPSAxXG4gIHdoaWxlIChieXRlTGVuZ3RoID4gMCAmJiAobXVsICo9IDB4MTAwKSkge1xuICAgIHZhbCArPSB0aGlzW29mZnNldCArIC0tYnl0ZUxlbmd0aF0gKiBtdWxcbiAgfVxuXG4gIHJldHVybiB2YWxcbn1cblxuQnVmZmVyLnByb3RvdHlwZS5yZWFkVWludDggPVxuQnVmZmVyLnByb3RvdHlwZS5yZWFkVUludDggPSBmdW5jdGlvbiByZWFkVUludDggKG9mZnNldCwgbm9Bc3NlcnQpIHtcbiAgb2Zmc2V0ID0gb2Zmc2V0ID4+PiAwXG4gIGlmICghbm9Bc3NlcnQpIGNoZWNrT2Zmc2V0KG9mZnNldCwgMSwgdGhpcy5sZW5ndGgpXG4gIHJldHVybiB0aGlzW29mZnNldF1cbn1cblxuQnVmZmVyLnByb3RvdHlwZS5yZWFkVWludDE2TEUgPVxuQnVmZmVyLnByb3RvdHlwZS5yZWFkVUludDE2TEUgPSBmdW5jdGlvbiByZWFkVUludDE2TEUgKG9mZnNldCwgbm9Bc3NlcnQpIHtcbiAgb2Zmc2V0ID0gb2Zmc2V0ID4+PiAwXG4gIGlmICghbm9Bc3NlcnQpIGNoZWNrT2Zmc2V0KG9mZnNldCwgMiwgdGhpcy5sZW5ndGgpXG4gIHJldHVybiB0aGlzW29mZnNldF0gfCAodGhpc1tvZmZzZXQgKyAxXSA8PCA4KVxufVxuXG5CdWZmZXIucHJvdG90eXBlLnJlYWRVaW50MTZCRSA9XG5CdWZmZXIucHJvdG90eXBlLnJlYWRVSW50MTZCRSA9IGZ1bmN0aW9uIHJlYWRVSW50MTZCRSAob2Zmc2V0LCBub0Fzc2VydCkge1xuICBvZmZzZXQgPSBvZmZzZXQgPj4+IDBcbiAgaWYgKCFub0Fzc2VydCkgY2hlY2tPZmZzZXQob2Zmc2V0LCAyLCB0aGlzLmxlbmd0aClcbiAgcmV0dXJuICh0aGlzW29mZnNldF0gPDwgOCkgfCB0aGlzW29mZnNldCArIDFdXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUucmVhZFVpbnQzMkxFID1cbkJ1ZmZlci5wcm90b3R5cGUucmVhZFVJbnQzMkxFID0gZnVuY3Rpb24gcmVhZFVJbnQzMkxFIChvZmZzZXQsIG5vQXNzZXJ0KSB7XG4gIG9mZnNldCA9IG9mZnNldCA+Pj4gMFxuICBpZiAoIW5vQXNzZXJ0KSBjaGVja09mZnNldChvZmZzZXQsIDQsIHRoaXMubGVuZ3RoKVxuXG4gIHJldHVybiAoKHRoaXNbb2Zmc2V0XSkgfFxuICAgICAgKHRoaXNbb2Zmc2V0ICsgMV0gPDwgOCkgfFxuICAgICAgKHRoaXNbb2Zmc2V0ICsgMl0gPDwgMTYpKSArXG4gICAgICAodGhpc1tvZmZzZXQgKyAzXSAqIDB4MTAwMDAwMClcbn1cblxuQnVmZmVyLnByb3RvdHlwZS5yZWFkVWludDMyQkUgPVxuQnVmZmVyLnByb3RvdHlwZS5yZWFkVUludDMyQkUgPSBmdW5jdGlvbiByZWFkVUludDMyQkUgKG9mZnNldCwgbm9Bc3NlcnQpIHtcbiAgb2Zmc2V0ID0gb2Zmc2V0ID4+PiAwXG4gIGlmICghbm9Bc3NlcnQpIGNoZWNrT2Zmc2V0KG9mZnNldCwgNCwgdGhpcy5sZW5ndGgpXG5cbiAgcmV0dXJuICh0aGlzW29mZnNldF0gKiAweDEwMDAwMDApICtcbiAgICAoKHRoaXNbb2Zmc2V0ICsgMV0gPDwgMTYpIHxcbiAgICAodGhpc1tvZmZzZXQgKyAyXSA8PCA4KSB8XG4gICAgdGhpc1tvZmZzZXQgKyAzXSlcbn1cblxuQnVmZmVyLnByb3RvdHlwZS5yZWFkQmlnVUludDY0TEUgPSBkZWZpbmVCaWdJbnRNZXRob2QoZnVuY3Rpb24gcmVhZEJpZ1VJbnQ2NExFIChvZmZzZXQpIHtcbiAgb2Zmc2V0ID0gb2Zmc2V0ID4+PiAwXG4gIHZhbGlkYXRlTnVtYmVyKG9mZnNldCwgJ29mZnNldCcpXG4gIGNvbnN0IGZpcnN0ID0gdGhpc1tvZmZzZXRdXG4gIGNvbnN0IGxhc3QgPSB0aGlzW29mZnNldCArIDddXG4gIGlmIChmaXJzdCA9PT0gdW5kZWZpbmVkIHx8IGxhc3QgPT09IHVuZGVmaW5lZCkge1xuICAgIGJvdW5kc0Vycm9yKG9mZnNldCwgdGhpcy5sZW5ndGggLSA4KVxuICB9XG5cbiAgY29uc3QgbG8gPSBmaXJzdCArXG4gICAgdGhpc1srK29mZnNldF0gKiAyICoqIDggK1xuICAgIHRoaXNbKytvZmZzZXRdICogMiAqKiAxNiArXG4gICAgdGhpc1srK29mZnNldF0gKiAyICoqIDI0XG5cbiAgY29uc3QgaGkgPSB0aGlzWysrb2Zmc2V0XSArXG4gICAgdGhpc1srK29mZnNldF0gKiAyICoqIDggK1xuICAgIHRoaXNbKytvZmZzZXRdICogMiAqKiAxNiArXG4gICAgbGFzdCAqIDIgKiogMjRcblxuICByZXR1cm4gQmlnSW50KGxvKSArIChCaWdJbnQoaGkpIDw8IEJpZ0ludCgzMikpXG59KVxuXG5CdWZmZXIucHJvdG90eXBlLnJlYWRCaWdVSW50NjRCRSA9IGRlZmluZUJpZ0ludE1ldGhvZChmdW5jdGlvbiByZWFkQmlnVUludDY0QkUgKG9mZnNldCkge1xuICBvZmZzZXQgPSBvZmZzZXQgPj4+IDBcbiAgdmFsaWRhdGVOdW1iZXIob2Zmc2V0LCAnb2Zmc2V0JylcbiAgY29uc3QgZmlyc3QgPSB0aGlzW29mZnNldF1cbiAgY29uc3QgbGFzdCA9IHRoaXNbb2Zmc2V0ICsgN11cbiAgaWYgKGZpcnN0ID09PSB1bmRlZmluZWQgfHwgbGFzdCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgYm91bmRzRXJyb3Iob2Zmc2V0LCB0aGlzLmxlbmd0aCAtIDgpXG4gIH1cblxuICBjb25zdCBoaSA9IGZpcnN0ICogMiAqKiAyNCArXG4gICAgdGhpc1srK29mZnNldF0gKiAyICoqIDE2ICtcbiAgICB0aGlzWysrb2Zmc2V0XSAqIDIgKiogOCArXG4gICAgdGhpc1srK29mZnNldF1cblxuICBjb25zdCBsbyA9IHRoaXNbKytvZmZzZXRdICogMiAqKiAyNCArXG4gICAgdGhpc1srK29mZnNldF0gKiAyICoqIDE2ICtcbiAgICB0aGlzWysrb2Zmc2V0XSAqIDIgKiogOCArXG4gICAgbGFzdFxuXG4gIHJldHVybiAoQmlnSW50KGhpKSA8PCBCaWdJbnQoMzIpKSArIEJpZ0ludChsbylcbn0pXG5cbkJ1ZmZlci5wcm90b3R5cGUucmVhZEludExFID0gZnVuY3Rpb24gcmVhZEludExFIChvZmZzZXQsIGJ5dGVMZW5ndGgsIG5vQXNzZXJ0KSB7XG4gIG9mZnNldCA9IG9mZnNldCA+Pj4gMFxuICBieXRlTGVuZ3RoID0gYnl0ZUxlbmd0aCA+Pj4gMFxuICBpZiAoIW5vQXNzZXJ0KSBjaGVja09mZnNldChvZmZzZXQsIGJ5dGVMZW5ndGgsIHRoaXMubGVuZ3RoKVxuXG4gIGxldCB2YWwgPSB0aGlzW29mZnNldF1cbiAgbGV0IG11bCA9IDFcbiAgbGV0IGkgPSAwXG4gIHdoaWxlICgrK2kgPCBieXRlTGVuZ3RoICYmIChtdWwgKj0gMHgxMDApKSB7XG4gICAgdmFsICs9IHRoaXNbb2Zmc2V0ICsgaV0gKiBtdWxcbiAgfVxuICBtdWwgKj0gMHg4MFxuXG4gIGlmICh2YWwgPj0gbXVsKSB2YWwgLT0gTWF0aC5wb3coMiwgOCAqIGJ5dGVMZW5ndGgpXG5cbiAgcmV0dXJuIHZhbFxufVxuXG5CdWZmZXIucHJvdG90eXBlLnJlYWRJbnRCRSA9IGZ1bmN0aW9uIHJlYWRJbnRCRSAob2Zmc2V0LCBieXRlTGVuZ3RoLCBub0Fzc2VydCkge1xuICBvZmZzZXQgPSBvZmZzZXQgPj4+IDBcbiAgYnl0ZUxlbmd0aCA9IGJ5dGVMZW5ndGggPj4+IDBcbiAgaWYgKCFub0Fzc2VydCkgY2hlY2tPZmZzZXQob2Zmc2V0LCBieXRlTGVuZ3RoLCB0aGlzLmxlbmd0aClcblxuICBsZXQgaSA9IGJ5dGVMZW5ndGhcbiAgbGV0IG11bCA9IDFcbiAgbGV0IHZhbCA9IHRoaXNbb2Zmc2V0ICsgLS1pXVxuICB3aGlsZSAoaSA+IDAgJiYgKG11bCAqPSAweDEwMCkpIHtcbiAgICB2YWwgKz0gdGhpc1tvZmZzZXQgKyAtLWldICogbXVsXG4gIH1cbiAgbXVsICo9IDB4ODBcblxuICBpZiAodmFsID49IG11bCkgdmFsIC09IE1hdGgucG93KDIsIDggKiBieXRlTGVuZ3RoKVxuXG4gIHJldHVybiB2YWxcbn1cblxuQnVmZmVyLnByb3RvdHlwZS5yZWFkSW50OCA9IGZ1bmN0aW9uIHJlYWRJbnQ4IChvZmZzZXQsIG5vQXNzZXJ0KSB7XG4gIG9mZnNldCA9IG9mZnNldCA+Pj4gMFxuICBpZiAoIW5vQXNzZXJ0KSBjaGVja09mZnNldChvZmZzZXQsIDEsIHRoaXMubGVuZ3RoKVxuICBpZiAoISh0aGlzW29mZnNldF0gJiAweDgwKSkgcmV0dXJuICh0aGlzW29mZnNldF0pXG4gIHJldHVybiAoKDB4ZmYgLSB0aGlzW29mZnNldF0gKyAxKSAqIC0xKVxufVxuXG5CdWZmZXIucHJvdG90eXBlLnJlYWRJbnQxNkxFID0gZnVuY3Rpb24gcmVhZEludDE2TEUgKG9mZnNldCwgbm9Bc3NlcnQpIHtcbiAgb2Zmc2V0ID0gb2Zmc2V0ID4+PiAwXG4gIGlmICghbm9Bc3NlcnQpIGNoZWNrT2Zmc2V0KG9mZnNldCwgMiwgdGhpcy5sZW5ndGgpXG4gIGNvbnN0IHZhbCA9IHRoaXNbb2Zmc2V0XSB8ICh0aGlzW29mZnNldCArIDFdIDw8IDgpXG4gIHJldHVybiAodmFsICYgMHg4MDAwKSA/IHZhbCB8IDB4RkZGRjAwMDAgOiB2YWxcbn1cblxuQnVmZmVyLnByb3RvdHlwZS5yZWFkSW50MTZCRSA9IGZ1bmN0aW9uIHJlYWRJbnQxNkJFIChvZmZzZXQsIG5vQXNzZXJ0KSB7XG4gIG9mZnNldCA9IG9mZnNldCA+Pj4gMFxuICBpZiAoIW5vQXNzZXJ0KSBjaGVja09mZnNldChvZmZzZXQsIDIsIHRoaXMubGVuZ3RoKVxuICBjb25zdCB2YWwgPSB0aGlzW29mZnNldCArIDFdIHwgKHRoaXNbb2Zmc2V0XSA8PCA4KVxuICByZXR1cm4gKHZhbCAmIDB4ODAwMCkgPyB2YWwgfCAweEZGRkYwMDAwIDogdmFsXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUucmVhZEludDMyTEUgPSBmdW5jdGlvbiByZWFkSW50MzJMRSAob2Zmc2V0LCBub0Fzc2VydCkge1xuICBvZmZzZXQgPSBvZmZzZXQgPj4+IDBcbiAgaWYgKCFub0Fzc2VydCkgY2hlY2tPZmZzZXQob2Zmc2V0LCA0LCB0aGlzLmxlbmd0aClcblxuICByZXR1cm4gKHRoaXNbb2Zmc2V0XSkgfFxuICAgICh0aGlzW29mZnNldCArIDFdIDw8IDgpIHxcbiAgICAodGhpc1tvZmZzZXQgKyAyXSA8PCAxNikgfFxuICAgICh0aGlzW29mZnNldCArIDNdIDw8IDI0KVxufVxuXG5CdWZmZXIucHJvdG90eXBlLnJlYWRJbnQzMkJFID0gZnVuY3Rpb24gcmVhZEludDMyQkUgKG9mZnNldCwgbm9Bc3NlcnQpIHtcbiAgb2Zmc2V0ID0gb2Zmc2V0ID4+PiAwXG4gIGlmICghbm9Bc3NlcnQpIGNoZWNrT2Zmc2V0KG9mZnNldCwgNCwgdGhpcy5sZW5ndGgpXG5cbiAgcmV0dXJuICh0aGlzW29mZnNldF0gPDwgMjQpIHxcbiAgICAodGhpc1tvZmZzZXQgKyAxXSA8PCAxNikgfFxuICAgICh0aGlzW29mZnNldCArIDJdIDw8IDgpIHxcbiAgICAodGhpc1tvZmZzZXQgKyAzXSlcbn1cblxuQnVmZmVyLnByb3RvdHlwZS5yZWFkQmlnSW50NjRMRSA9IGRlZmluZUJpZ0ludE1ldGhvZChmdW5jdGlvbiByZWFkQmlnSW50NjRMRSAob2Zmc2V0KSB7XG4gIG9mZnNldCA9IG9mZnNldCA+Pj4gMFxuICB2YWxpZGF0ZU51bWJlcihvZmZzZXQsICdvZmZzZXQnKVxuICBjb25zdCBmaXJzdCA9IHRoaXNbb2Zmc2V0XVxuICBjb25zdCBsYXN0ID0gdGhpc1tvZmZzZXQgKyA3XVxuICBpZiAoZmlyc3QgPT09IHVuZGVmaW5lZCB8fCBsYXN0ID09PSB1bmRlZmluZWQpIHtcbiAgICBib3VuZHNFcnJvcihvZmZzZXQsIHRoaXMubGVuZ3RoIC0gOClcbiAgfVxuXG4gIGNvbnN0IHZhbCA9IHRoaXNbb2Zmc2V0ICsgNF0gK1xuICAgIHRoaXNbb2Zmc2V0ICsgNV0gKiAyICoqIDggK1xuICAgIHRoaXNbb2Zmc2V0ICsgNl0gKiAyICoqIDE2ICtcbiAgICAobGFzdCA8PCAyNCkgLy8gT3ZlcmZsb3dcblxuICByZXR1cm4gKEJpZ0ludCh2YWwpIDw8IEJpZ0ludCgzMikpICtcbiAgICBCaWdJbnQoZmlyc3QgK1xuICAgIHRoaXNbKytvZmZzZXRdICogMiAqKiA4ICtcbiAgICB0aGlzWysrb2Zmc2V0XSAqIDIgKiogMTYgK1xuICAgIHRoaXNbKytvZmZzZXRdICogMiAqKiAyNClcbn0pXG5cbkJ1ZmZlci5wcm90b3R5cGUucmVhZEJpZ0ludDY0QkUgPSBkZWZpbmVCaWdJbnRNZXRob2QoZnVuY3Rpb24gcmVhZEJpZ0ludDY0QkUgKG9mZnNldCkge1xuICBvZmZzZXQgPSBvZmZzZXQgPj4+IDBcbiAgdmFsaWRhdGVOdW1iZXIob2Zmc2V0LCAnb2Zmc2V0JylcbiAgY29uc3QgZmlyc3QgPSB0aGlzW29mZnNldF1cbiAgY29uc3QgbGFzdCA9IHRoaXNbb2Zmc2V0ICsgN11cbiAgaWYgKGZpcnN0ID09PSB1bmRlZmluZWQgfHwgbGFzdCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgYm91bmRzRXJyb3Iob2Zmc2V0LCB0aGlzLmxlbmd0aCAtIDgpXG4gIH1cblxuICBjb25zdCB2YWwgPSAoZmlyc3QgPDwgMjQpICsgLy8gT3ZlcmZsb3dcbiAgICB0aGlzWysrb2Zmc2V0XSAqIDIgKiogMTYgK1xuICAgIHRoaXNbKytvZmZzZXRdICogMiAqKiA4ICtcbiAgICB0aGlzWysrb2Zmc2V0XVxuXG4gIHJldHVybiAoQmlnSW50KHZhbCkgPDwgQmlnSW50KDMyKSkgK1xuICAgIEJpZ0ludCh0aGlzWysrb2Zmc2V0XSAqIDIgKiogMjQgK1xuICAgIHRoaXNbKytvZmZzZXRdICogMiAqKiAxNiArXG4gICAgdGhpc1srK29mZnNldF0gKiAyICoqIDggK1xuICAgIGxhc3QpXG59KVxuXG5CdWZmZXIucHJvdG90eXBlLnJlYWRGbG9hdExFID0gZnVuY3Rpb24gcmVhZEZsb2F0TEUgKG9mZnNldCwgbm9Bc3NlcnQpIHtcbiAgb2Zmc2V0ID0gb2Zmc2V0ID4+PiAwXG4gIGlmICghbm9Bc3NlcnQpIGNoZWNrT2Zmc2V0KG9mZnNldCwgNCwgdGhpcy5sZW5ndGgpXG4gIHJldHVybiBpZWVlNzU0LnJlYWQodGhpcywgb2Zmc2V0LCB0cnVlLCAyMywgNClcbn1cblxuQnVmZmVyLnByb3RvdHlwZS5yZWFkRmxvYXRCRSA9IGZ1bmN0aW9uIHJlYWRGbG9hdEJFIChvZmZzZXQsIG5vQXNzZXJ0KSB7XG4gIG9mZnNldCA9IG9mZnNldCA+Pj4gMFxuICBpZiAoIW5vQXNzZXJ0KSBjaGVja09mZnNldChvZmZzZXQsIDQsIHRoaXMubGVuZ3RoKVxuICByZXR1cm4gaWVlZTc1NC5yZWFkKHRoaXMsIG9mZnNldCwgZmFsc2UsIDIzLCA0KVxufVxuXG5CdWZmZXIucHJvdG90eXBlLnJlYWREb3VibGVMRSA9IGZ1bmN0aW9uIHJlYWREb3VibGVMRSAob2Zmc2V0LCBub0Fzc2VydCkge1xuICBvZmZzZXQgPSBvZmZzZXQgPj4+IDBcbiAgaWYgKCFub0Fzc2VydCkgY2hlY2tPZmZzZXQob2Zmc2V0LCA4LCB0aGlzLmxlbmd0aClcbiAgcmV0dXJuIGllZWU3NTQucmVhZCh0aGlzLCBvZmZzZXQsIHRydWUsIDUyLCA4KVxufVxuXG5CdWZmZXIucHJvdG90eXBlLnJlYWREb3VibGVCRSA9IGZ1bmN0aW9uIHJlYWREb3VibGVCRSAob2Zmc2V0LCBub0Fzc2VydCkge1xuICBvZmZzZXQgPSBvZmZzZXQgPj4+IDBcbiAgaWYgKCFub0Fzc2VydCkgY2hlY2tPZmZzZXQob2Zmc2V0LCA4LCB0aGlzLmxlbmd0aClcbiAgcmV0dXJuIGllZWU3NTQucmVhZCh0aGlzLCBvZmZzZXQsIGZhbHNlLCA1MiwgOClcbn1cblxuZnVuY3Rpb24gY2hlY2tJbnQgKGJ1ZiwgdmFsdWUsIG9mZnNldCwgZXh0LCBtYXgsIG1pbikge1xuICBpZiAoIUJ1ZmZlci5pc0J1ZmZlcihidWYpKSB0aHJvdyBuZXcgVHlwZUVycm9yKCdcImJ1ZmZlclwiIGFyZ3VtZW50IG11c3QgYmUgYSBCdWZmZXIgaW5zdGFuY2UnKVxuICBpZiAodmFsdWUgPiBtYXggfHwgdmFsdWUgPCBtaW4pIHRocm93IG5ldyBSYW5nZUVycm9yKCdcInZhbHVlXCIgYXJndW1lbnQgaXMgb3V0IG9mIGJvdW5kcycpXG4gIGlmIChvZmZzZXQgKyBleHQgPiBidWYubGVuZ3RoKSB0aHJvdyBuZXcgUmFuZ2VFcnJvcignSW5kZXggb3V0IG9mIHJhbmdlJylcbn1cblxuQnVmZmVyLnByb3RvdHlwZS53cml0ZVVpbnRMRSA9XG5CdWZmZXIucHJvdG90eXBlLndyaXRlVUludExFID0gZnVuY3Rpb24gd3JpdGVVSW50TEUgKHZhbHVlLCBvZmZzZXQsIGJ5dGVMZW5ndGgsIG5vQXNzZXJ0KSB7XG4gIHZhbHVlID0gK3ZhbHVlXG4gIG9mZnNldCA9IG9mZnNldCA+Pj4gMFxuICBieXRlTGVuZ3RoID0gYnl0ZUxlbmd0aCA+Pj4gMFxuICBpZiAoIW5vQXNzZXJ0KSB7XG4gICAgY29uc3QgbWF4Qnl0ZXMgPSBNYXRoLnBvdygyLCA4ICogYnl0ZUxlbmd0aCkgLSAxXG4gICAgY2hlY2tJbnQodGhpcywgdmFsdWUsIG9mZnNldCwgYnl0ZUxlbmd0aCwgbWF4Qnl0ZXMsIDApXG4gIH1cblxuICBsZXQgbXVsID0gMVxuICBsZXQgaSA9IDBcbiAgdGhpc1tvZmZzZXRdID0gdmFsdWUgJiAweEZGXG4gIHdoaWxlICgrK2kgPCBieXRlTGVuZ3RoICYmIChtdWwgKj0gMHgxMDApKSB7XG4gICAgdGhpc1tvZmZzZXQgKyBpXSA9ICh2YWx1ZSAvIG11bCkgJiAweEZGXG4gIH1cblxuICByZXR1cm4gb2Zmc2V0ICsgYnl0ZUxlbmd0aFxufVxuXG5CdWZmZXIucHJvdG90eXBlLndyaXRlVWludEJFID1cbkJ1ZmZlci5wcm90b3R5cGUud3JpdGVVSW50QkUgPSBmdW5jdGlvbiB3cml0ZVVJbnRCRSAodmFsdWUsIG9mZnNldCwgYnl0ZUxlbmd0aCwgbm9Bc3NlcnQpIHtcbiAgdmFsdWUgPSArdmFsdWVcbiAgb2Zmc2V0ID0gb2Zmc2V0ID4+PiAwXG4gIGJ5dGVMZW5ndGggPSBieXRlTGVuZ3RoID4+PiAwXG4gIGlmICghbm9Bc3NlcnQpIHtcbiAgICBjb25zdCBtYXhCeXRlcyA9IE1hdGgucG93KDIsIDggKiBieXRlTGVuZ3RoKSAtIDFcbiAgICBjaGVja0ludCh0aGlzLCB2YWx1ZSwgb2Zmc2V0LCBieXRlTGVuZ3RoLCBtYXhCeXRlcywgMClcbiAgfVxuXG4gIGxldCBpID0gYnl0ZUxlbmd0aCAtIDFcbiAgbGV0IG11bCA9IDFcbiAgdGhpc1tvZmZzZXQgKyBpXSA9IHZhbHVlICYgMHhGRlxuICB3aGlsZSAoLS1pID49IDAgJiYgKG11bCAqPSAweDEwMCkpIHtcbiAgICB0aGlzW29mZnNldCArIGldID0gKHZhbHVlIC8gbXVsKSAmIDB4RkZcbiAgfVxuXG4gIHJldHVybiBvZmZzZXQgKyBieXRlTGVuZ3RoXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUud3JpdGVVaW50OCA9XG5CdWZmZXIucHJvdG90eXBlLndyaXRlVUludDggPSBmdW5jdGlvbiB3cml0ZVVJbnQ4ICh2YWx1ZSwgb2Zmc2V0LCBub0Fzc2VydCkge1xuICB2YWx1ZSA9ICt2YWx1ZVxuICBvZmZzZXQgPSBvZmZzZXQgPj4+IDBcbiAgaWYgKCFub0Fzc2VydCkgY2hlY2tJbnQodGhpcywgdmFsdWUsIG9mZnNldCwgMSwgMHhmZiwgMClcbiAgdGhpc1tvZmZzZXRdID0gKHZhbHVlICYgMHhmZilcbiAgcmV0dXJuIG9mZnNldCArIDFcbn1cblxuQnVmZmVyLnByb3RvdHlwZS53cml0ZVVpbnQxNkxFID1cbkJ1ZmZlci5wcm90b3R5cGUud3JpdGVVSW50MTZMRSA9IGZ1bmN0aW9uIHdyaXRlVUludDE2TEUgKHZhbHVlLCBvZmZzZXQsIG5vQXNzZXJ0KSB7XG4gIHZhbHVlID0gK3ZhbHVlXG4gIG9mZnNldCA9IG9mZnNldCA+Pj4gMFxuICBpZiAoIW5vQXNzZXJ0KSBjaGVja0ludCh0aGlzLCB2YWx1ZSwgb2Zmc2V0LCAyLCAweGZmZmYsIDApXG4gIHRoaXNbb2Zmc2V0XSA9ICh2YWx1ZSAmIDB4ZmYpXG4gIHRoaXNbb2Zmc2V0ICsgMV0gPSAodmFsdWUgPj4+IDgpXG4gIHJldHVybiBvZmZzZXQgKyAyXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUud3JpdGVVaW50MTZCRSA9XG5CdWZmZXIucHJvdG90eXBlLndyaXRlVUludDE2QkUgPSBmdW5jdGlvbiB3cml0ZVVJbnQxNkJFICh2YWx1ZSwgb2Zmc2V0LCBub0Fzc2VydCkge1xuICB2YWx1ZSA9ICt2YWx1ZVxuICBvZmZzZXQgPSBvZmZzZXQgPj4+IDBcbiAgaWYgKCFub0Fzc2VydCkgY2hlY2tJbnQodGhpcywgdmFsdWUsIG9mZnNldCwgMiwgMHhmZmZmLCAwKVxuICB0aGlzW29mZnNldF0gPSAodmFsdWUgPj4+IDgpXG4gIHRoaXNbb2Zmc2V0ICsgMV0gPSAodmFsdWUgJiAweGZmKVxuICByZXR1cm4gb2Zmc2V0ICsgMlxufVxuXG5CdWZmZXIucHJvdG90eXBlLndyaXRlVWludDMyTEUgPVxuQnVmZmVyLnByb3RvdHlwZS53cml0ZVVJbnQzMkxFID0gZnVuY3Rpb24gd3JpdGVVSW50MzJMRSAodmFsdWUsIG9mZnNldCwgbm9Bc3NlcnQpIHtcbiAgdmFsdWUgPSArdmFsdWVcbiAgb2Zmc2V0ID0gb2Zmc2V0ID4+PiAwXG4gIGlmICghbm9Bc3NlcnQpIGNoZWNrSW50KHRoaXMsIHZhbHVlLCBvZmZzZXQsIDQsIDB4ZmZmZmZmZmYsIDApXG4gIHRoaXNbb2Zmc2V0ICsgM10gPSAodmFsdWUgPj4+IDI0KVxuICB0aGlzW29mZnNldCArIDJdID0gKHZhbHVlID4+PiAxNilcbiAgdGhpc1tvZmZzZXQgKyAxXSA9ICh2YWx1ZSA+Pj4gOClcbiAgdGhpc1tvZmZzZXRdID0gKHZhbHVlICYgMHhmZilcbiAgcmV0dXJuIG9mZnNldCArIDRcbn1cblxuQnVmZmVyLnByb3RvdHlwZS53cml0ZVVpbnQzMkJFID1cbkJ1ZmZlci5wcm90b3R5cGUud3JpdGVVSW50MzJCRSA9IGZ1bmN0aW9uIHdyaXRlVUludDMyQkUgKHZhbHVlLCBvZmZzZXQsIG5vQXNzZXJ0KSB7XG4gIHZhbHVlID0gK3ZhbHVlXG4gIG9mZnNldCA9IG9mZnNldCA+Pj4gMFxuICBpZiAoIW5vQXNzZXJ0KSBjaGVja0ludCh0aGlzLCB2YWx1ZSwgb2Zmc2V0LCA0LCAweGZmZmZmZmZmLCAwKVxuICB0aGlzW29mZnNldF0gPSAodmFsdWUgPj4+IDI0KVxuICB0aGlzW29mZnNldCArIDFdID0gKHZhbHVlID4+PiAxNilcbiAgdGhpc1tvZmZzZXQgKyAyXSA9ICh2YWx1ZSA+Pj4gOClcbiAgdGhpc1tvZmZzZXQgKyAzXSA9ICh2YWx1ZSAmIDB4ZmYpXG4gIHJldHVybiBvZmZzZXQgKyA0XG59XG5cbmZ1bmN0aW9uIHdydEJpZ1VJbnQ2NExFIChidWYsIHZhbHVlLCBvZmZzZXQsIG1pbiwgbWF4KSB7XG4gIGNoZWNrSW50QkkodmFsdWUsIG1pbiwgbWF4LCBidWYsIG9mZnNldCwgNylcblxuICBsZXQgbG8gPSBOdW1iZXIodmFsdWUgJiBCaWdJbnQoMHhmZmZmZmZmZikpXG4gIGJ1ZltvZmZzZXQrK10gPSBsb1xuICBsbyA9IGxvID4+IDhcbiAgYnVmW29mZnNldCsrXSA9IGxvXG4gIGxvID0gbG8gPj4gOFxuICBidWZbb2Zmc2V0KytdID0gbG9cbiAgbG8gPSBsbyA+PiA4XG4gIGJ1ZltvZmZzZXQrK10gPSBsb1xuICBsZXQgaGkgPSBOdW1iZXIodmFsdWUgPj4gQmlnSW50KDMyKSAmIEJpZ0ludCgweGZmZmZmZmZmKSlcbiAgYnVmW29mZnNldCsrXSA9IGhpXG4gIGhpID0gaGkgPj4gOFxuICBidWZbb2Zmc2V0KytdID0gaGlcbiAgaGkgPSBoaSA+PiA4XG4gIGJ1ZltvZmZzZXQrK10gPSBoaVxuICBoaSA9IGhpID4+IDhcbiAgYnVmW29mZnNldCsrXSA9IGhpXG4gIHJldHVybiBvZmZzZXRcbn1cblxuZnVuY3Rpb24gd3J0QmlnVUludDY0QkUgKGJ1ZiwgdmFsdWUsIG9mZnNldCwgbWluLCBtYXgpIHtcbiAgY2hlY2tJbnRCSSh2YWx1ZSwgbWluLCBtYXgsIGJ1Ziwgb2Zmc2V0LCA3KVxuXG4gIGxldCBsbyA9IE51bWJlcih2YWx1ZSAmIEJpZ0ludCgweGZmZmZmZmZmKSlcbiAgYnVmW29mZnNldCArIDddID0gbG9cbiAgbG8gPSBsbyA+PiA4XG4gIGJ1ZltvZmZzZXQgKyA2XSA9IGxvXG4gIGxvID0gbG8gPj4gOFxuICBidWZbb2Zmc2V0ICsgNV0gPSBsb1xuICBsbyA9IGxvID4+IDhcbiAgYnVmW29mZnNldCArIDRdID0gbG9cbiAgbGV0IGhpID0gTnVtYmVyKHZhbHVlID4+IEJpZ0ludCgzMikgJiBCaWdJbnQoMHhmZmZmZmZmZikpXG4gIGJ1ZltvZmZzZXQgKyAzXSA9IGhpXG4gIGhpID0gaGkgPj4gOFxuICBidWZbb2Zmc2V0ICsgMl0gPSBoaVxuICBoaSA9IGhpID4+IDhcbiAgYnVmW29mZnNldCArIDFdID0gaGlcbiAgaGkgPSBoaSA+PiA4XG4gIGJ1ZltvZmZzZXRdID0gaGlcbiAgcmV0dXJuIG9mZnNldCArIDhcbn1cblxuQnVmZmVyLnByb3RvdHlwZS53cml0ZUJpZ1VJbnQ2NExFID0gZGVmaW5lQmlnSW50TWV0aG9kKGZ1bmN0aW9uIHdyaXRlQmlnVUludDY0TEUgKHZhbHVlLCBvZmZzZXQgPSAwKSB7XG4gIHJldHVybiB3cnRCaWdVSW50NjRMRSh0aGlzLCB2YWx1ZSwgb2Zmc2V0LCBCaWdJbnQoMCksIEJpZ0ludCgnMHhmZmZmZmZmZmZmZmZmZmZmJykpXG59KVxuXG5CdWZmZXIucHJvdG90eXBlLndyaXRlQmlnVUludDY0QkUgPSBkZWZpbmVCaWdJbnRNZXRob2QoZnVuY3Rpb24gd3JpdGVCaWdVSW50NjRCRSAodmFsdWUsIG9mZnNldCA9IDApIHtcbiAgcmV0dXJuIHdydEJpZ1VJbnQ2NEJFKHRoaXMsIHZhbHVlLCBvZmZzZXQsIEJpZ0ludCgwKSwgQmlnSW50KCcweGZmZmZmZmZmZmZmZmZmZmYnKSlcbn0pXG5cbkJ1ZmZlci5wcm90b3R5cGUud3JpdGVJbnRMRSA9IGZ1bmN0aW9uIHdyaXRlSW50TEUgKHZhbHVlLCBvZmZzZXQsIGJ5dGVMZW5ndGgsIG5vQXNzZXJ0KSB7XG4gIHZhbHVlID0gK3ZhbHVlXG4gIG9mZnNldCA9IG9mZnNldCA+Pj4gMFxuICBpZiAoIW5vQXNzZXJ0KSB7XG4gICAgY29uc3QgbGltaXQgPSBNYXRoLnBvdygyLCAoOCAqIGJ5dGVMZW5ndGgpIC0gMSlcblxuICAgIGNoZWNrSW50KHRoaXMsIHZhbHVlLCBvZmZzZXQsIGJ5dGVMZW5ndGgsIGxpbWl0IC0gMSwgLWxpbWl0KVxuICB9XG5cbiAgbGV0IGkgPSAwXG4gIGxldCBtdWwgPSAxXG4gIGxldCBzdWIgPSAwXG4gIHRoaXNbb2Zmc2V0XSA9IHZhbHVlICYgMHhGRlxuICB3aGlsZSAoKytpIDwgYnl0ZUxlbmd0aCAmJiAobXVsICo9IDB4MTAwKSkge1xuICAgIGlmICh2YWx1ZSA8IDAgJiYgc3ViID09PSAwICYmIHRoaXNbb2Zmc2V0ICsgaSAtIDFdICE9PSAwKSB7XG4gICAgICBzdWIgPSAxXG4gICAgfVxuICAgIHRoaXNbb2Zmc2V0ICsgaV0gPSAoKHZhbHVlIC8gbXVsKSA+PiAwKSAtIHN1YiAmIDB4RkZcbiAgfVxuXG4gIHJldHVybiBvZmZzZXQgKyBieXRlTGVuZ3RoXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUud3JpdGVJbnRCRSA9IGZ1bmN0aW9uIHdyaXRlSW50QkUgKHZhbHVlLCBvZmZzZXQsIGJ5dGVMZW5ndGgsIG5vQXNzZXJ0KSB7XG4gIHZhbHVlID0gK3ZhbHVlXG4gIG9mZnNldCA9IG9mZnNldCA+Pj4gMFxuICBpZiAoIW5vQXNzZXJ0KSB7XG4gICAgY29uc3QgbGltaXQgPSBNYXRoLnBvdygyLCAoOCAqIGJ5dGVMZW5ndGgpIC0gMSlcblxuICAgIGNoZWNrSW50KHRoaXMsIHZhbHVlLCBvZmZzZXQsIGJ5dGVMZW5ndGgsIGxpbWl0IC0gMSwgLWxpbWl0KVxuICB9XG5cbiAgbGV0IGkgPSBieXRlTGVuZ3RoIC0gMVxuICBsZXQgbXVsID0gMVxuICBsZXQgc3ViID0gMFxuICB0aGlzW29mZnNldCArIGldID0gdmFsdWUgJiAweEZGXG4gIHdoaWxlICgtLWkgPj0gMCAmJiAobXVsICo9IDB4MTAwKSkge1xuICAgIGlmICh2YWx1ZSA8IDAgJiYgc3ViID09PSAwICYmIHRoaXNbb2Zmc2V0ICsgaSArIDFdICE9PSAwKSB7XG4gICAgICBzdWIgPSAxXG4gICAgfVxuICAgIHRoaXNbb2Zmc2V0ICsgaV0gPSAoKHZhbHVlIC8gbXVsKSA+PiAwKSAtIHN1YiAmIDB4RkZcbiAgfVxuXG4gIHJldHVybiBvZmZzZXQgKyBieXRlTGVuZ3RoXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUud3JpdGVJbnQ4ID0gZnVuY3Rpb24gd3JpdGVJbnQ4ICh2YWx1ZSwgb2Zmc2V0LCBub0Fzc2VydCkge1xuICB2YWx1ZSA9ICt2YWx1ZVxuICBvZmZzZXQgPSBvZmZzZXQgPj4+IDBcbiAgaWYgKCFub0Fzc2VydCkgY2hlY2tJbnQodGhpcywgdmFsdWUsIG9mZnNldCwgMSwgMHg3ZiwgLTB4ODApXG4gIGlmICh2YWx1ZSA8IDApIHZhbHVlID0gMHhmZiArIHZhbHVlICsgMVxuICB0aGlzW29mZnNldF0gPSAodmFsdWUgJiAweGZmKVxuICByZXR1cm4gb2Zmc2V0ICsgMVxufVxuXG5CdWZmZXIucHJvdG90eXBlLndyaXRlSW50MTZMRSA9IGZ1bmN0aW9uIHdyaXRlSW50MTZMRSAodmFsdWUsIG9mZnNldCwgbm9Bc3NlcnQpIHtcbiAgdmFsdWUgPSArdmFsdWVcbiAgb2Zmc2V0ID0gb2Zmc2V0ID4+PiAwXG4gIGlmICghbm9Bc3NlcnQpIGNoZWNrSW50KHRoaXMsIHZhbHVlLCBvZmZzZXQsIDIsIDB4N2ZmZiwgLTB4ODAwMClcbiAgdGhpc1tvZmZzZXRdID0gKHZhbHVlICYgMHhmZilcbiAgdGhpc1tvZmZzZXQgKyAxXSA9ICh2YWx1ZSA+Pj4gOClcbiAgcmV0dXJuIG9mZnNldCArIDJcbn1cblxuQnVmZmVyLnByb3RvdHlwZS53cml0ZUludDE2QkUgPSBmdW5jdGlvbiB3cml0ZUludDE2QkUgKHZhbHVlLCBvZmZzZXQsIG5vQXNzZXJ0KSB7XG4gIHZhbHVlID0gK3ZhbHVlXG4gIG9mZnNldCA9IG9mZnNldCA+Pj4gMFxuICBpZiAoIW5vQXNzZXJ0KSBjaGVja0ludCh0aGlzLCB2YWx1ZSwgb2Zmc2V0LCAyLCAweDdmZmYsIC0weDgwMDApXG4gIHRoaXNbb2Zmc2V0XSA9ICh2YWx1ZSA+Pj4gOClcbiAgdGhpc1tvZmZzZXQgKyAxXSA9ICh2YWx1ZSAmIDB4ZmYpXG4gIHJldHVybiBvZmZzZXQgKyAyXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUud3JpdGVJbnQzMkxFID0gZnVuY3Rpb24gd3JpdGVJbnQzMkxFICh2YWx1ZSwgb2Zmc2V0LCBub0Fzc2VydCkge1xuICB2YWx1ZSA9ICt2YWx1ZVxuICBvZmZzZXQgPSBvZmZzZXQgPj4+IDBcbiAgaWYgKCFub0Fzc2VydCkgY2hlY2tJbnQodGhpcywgdmFsdWUsIG9mZnNldCwgNCwgMHg3ZmZmZmZmZiwgLTB4ODAwMDAwMDApXG4gIHRoaXNbb2Zmc2V0XSA9ICh2YWx1ZSAmIDB4ZmYpXG4gIHRoaXNbb2Zmc2V0ICsgMV0gPSAodmFsdWUgPj4+IDgpXG4gIHRoaXNbb2Zmc2V0ICsgMl0gPSAodmFsdWUgPj4+IDE2KVxuICB0aGlzW29mZnNldCArIDNdID0gKHZhbHVlID4+PiAyNClcbiAgcmV0dXJuIG9mZnNldCArIDRcbn1cblxuQnVmZmVyLnByb3RvdHlwZS53cml0ZUludDMyQkUgPSBmdW5jdGlvbiB3cml0ZUludDMyQkUgKHZhbHVlLCBvZmZzZXQsIG5vQXNzZXJ0KSB7XG4gIHZhbHVlID0gK3ZhbHVlXG4gIG9mZnNldCA9IG9mZnNldCA+Pj4gMFxuICBpZiAoIW5vQXNzZXJ0KSBjaGVja0ludCh0aGlzLCB2YWx1ZSwgb2Zmc2V0LCA0LCAweDdmZmZmZmZmLCAtMHg4MDAwMDAwMClcbiAgaWYgKHZhbHVlIDwgMCkgdmFsdWUgPSAweGZmZmZmZmZmICsgdmFsdWUgKyAxXG4gIHRoaXNbb2Zmc2V0XSA9ICh2YWx1ZSA+Pj4gMjQpXG4gIHRoaXNbb2Zmc2V0ICsgMV0gPSAodmFsdWUgPj4+IDE2KVxuICB0aGlzW29mZnNldCArIDJdID0gKHZhbHVlID4+PiA4KVxuICB0aGlzW29mZnNldCArIDNdID0gKHZhbHVlICYgMHhmZilcbiAgcmV0dXJuIG9mZnNldCArIDRcbn1cblxuQnVmZmVyLnByb3RvdHlwZS53cml0ZUJpZ0ludDY0TEUgPSBkZWZpbmVCaWdJbnRNZXRob2QoZnVuY3Rpb24gd3JpdGVCaWdJbnQ2NExFICh2YWx1ZSwgb2Zmc2V0ID0gMCkge1xuICByZXR1cm4gd3J0QmlnVUludDY0TEUodGhpcywgdmFsdWUsIG9mZnNldCwgLUJpZ0ludCgnMHg4MDAwMDAwMDAwMDAwMDAwJyksIEJpZ0ludCgnMHg3ZmZmZmZmZmZmZmZmZmZmJykpXG59KVxuXG5CdWZmZXIucHJvdG90eXBlLndyaXRlQmlnSW50NjRCRSA9IGRlZmluZUJpZ0ludE1ldGhvZChmdW5jdGlvbiB3cml0ZUJpZ0ludDY0QkUgKHZhbHVlLCBvZmZzZXQgPSAwKSB7XG4gIHJldHVybiB3cnRCaWdVSW50NjRCRSh0aGlzLCB2YWx1ZSwgb2Zmc2V0LCAtQmlnSW50KCcweDgwMDAwMDAwMDAwMDAwMDAnKSwgQmlnSW50KCcweDdmZmZmZmZmZmZmZmZmZmYnKSlcbn0pXG5cbmZ1bmN0aW9uIGNoZWNrSUVFRTc1NCAoYnVmLCB2YWx1ZSwgb2Zmc2V0LCBleHQsIG1heCwgbWluKSB7XG4gIGlmIChvZmZzZXQgKyBleHQgPiBidWYubGVuZ3RoKSB0aHJvdyBuZXcgUmFuZ2VFcnJvcignSW5kZXggb3V0IG9mIHJhbmdlJylcbiAgaWYgKG9mZnNldCA8IDApIHRocm93IG5ldyBSYW5nZUVycm9yKCdJbmRleCBvdXQgb2YgcmFuZ2UnKVxufVxuXG5mdW5jdGlvbiB3cml0ZUZsb2F0IChidWYsIHZhbHVlLCBvZmZzZXQsIGxpdHRsZUVuZGlhbiwgbm9Bc3NlcnQpIHtcbiAgdmFsdWUgPSArdmFsdWVcbiAgb2Zmc2V0ID0gb2Zmc2V0ID4+PiAwXG4gIGlmICghbm9Bc3NlcnQpIHtcbiAgICBjaGVja0lFRUU3NTQoYnVmLCB2YWx1ZSwgb2Zmc2V0LCA0LCAzLjQwMjgyMzQ2NjM4NTI4ODZlKzM4LCAtMy40MDI4MjM0NjYzODUyODg2ZSszOClcbiAgfVxuICBpZWVlNzU0LndyaXRlKGJ1ZiwgdmFsdWUsIG9mZnNldCwgbGl0dGxlRW5kaWFuLCAyMywgNClcbiAgcmV0dXJuIG9mZnNldCArIDRcbn1cblxuQnVmZmVyLnByb3RvdHlwZS53cml0ZUZsb2F0TEUgPSBmdW5jdGlvbiB3cml0ZUZsb2F0TEUgKHZhbHVlLCBvZmZzZXQsIG5vQXNzZXJ0KSB7XG4gIHJldHVybiB3cml0ZUZsb2F0KHRoaXMsIHZhbHVlLCBvZmZzZXQsIHRydWUsIG5vQXNzZXJ0KVxufVxuXG5CdWZmZXIucHJvdG90eXBlLndyaXRlRmxvYXRCRSA9IGZ1bmN0aW9uIHdyaXRlRmxvYXRCRSAodmFsdWUsIG9mZnNldCwgbm9Bc3NlcnQpIHtcbiAgcmV0dXJuIHdyaXRlRmxvYXQodGhpcywgdmFsdWUsIG9mZnNldCwgZmFsc2UsIG5vQXNzZXJ0KVxufVxuXG5mdW5jdGlvbiB3cml0ZURvdWJsZSAoYnVmLCB2YWx1ZSwgb2Zmc2V0LCBsaXR0bGVFbmRpYW4sIG5vQXNzZXJ0KSB7XG4gIHZhbHVlID0gK3ZhbHVlXG4gIG9mZnNldCA9IG9mZnNldCA+Pj4gMFxuICBpZiAoIW5vQXNzZXJ0KSB7XG4gICAgY2hlY2tJRUVFNzU0KGJ1ZiwgdmFsdWUsIG9mZnNldCwgOCwgMS43OTc2OTMxMzQ4NjIzMTU3RSszMDgsIC0xLjc5NzY5MzEzNDg2MjMxNTdFKzMwOClcbiAgfVxuICBpZWVlNzU0LndyaXRlKGJ1ZiwgdmFsdWUsIG9mZnNldCwgbGl0dGxlRW5kaWFuLCA1MiwgOClcbiAgcmV0dXJuIG9mZnNldCArIDhcbn1cblxuQnVmZmVyLnByb3RvdHlwZS53cml0ZURvdWJsZUxFID0gZnVuY3Rpb24gd3JpdGVEb3VibGVMRSAodmFsdWUsIG9mZnNldCwgbm9Bc3NlcnQpIHtcbiAgcmV0dXJuIHdyaXRlRG91YmxlKHRoaXMsIHZhbHVlLCBvZmZzZXQsIHRydWUsIG5vQXNzZXJ0KVxufVxuXG5CdWZmZXIucHJvdG90eXBlLndyaXRlRG91YmxlQkUgPSBmdW5jdGlvbiB3cml0ZURvdWJsZUJFICh2YWx1ZSwgb2Zmc2V0LCBub0Fzc2VydCkge1xuICByZXR1cm4gd3JpdGVEb3VibGUodGhpcywgdmFsdWUsIG9mZnNldCwgZmFsc2UsIG5vQXNzZXJ0KVxufVxuXG4vLyBjb3B5KHRhcmdldEJ1ZmZlciwgdGFyZ2V0U3RhcnQ9MCwgc291cmNlU3RhcnQ9MCwgc291cmNlRW5kPWJ1ZmZlci5sZW5ndGgpXG5CdWZmZXIucHJvdG90eXBlLmNvcHkgPSBmdW5jdGlvbiBjb3B5ICh0YXJnZXQsIHRhcmdldFN0YXJ0LCBzdGFydCwgZW5kKSB7XG4gIGlmICghQnVmZmVyLmlzQnVmZmVyKHRhcmdldCkpIHRocm93IG5ldyBUeXBlRXJyb3IoJ2FyZ3VtZW50IHNob3VsZCBiZSBhIEJ1ZmZlcicpXG4gIGlmICghc3RhcnQpIHN0YXJ0ID0gMFxuICBpZiAoIWVuZCAmJiBlbmQgIT09IDApIGVuZCA9IHRoaXMubGVuZ3RoXG4gIGlmICh0YXJnZXRTdGFydCA+PSB0YXJnZXQubGVuZ3RoKSB0YXJnZXRTdGFydCA9IHRhcmdldC5sZW5ndGhcbiAgaWYgKCF0YXJnZXRTdGFydCkgdGFyZ2V0U3RhcnQgPSAwXG4gIGlmIChlbmQgPiAwICYmIGVuZCA8IHN0YXJ0KSBlbmQgPSBzdGFydFxuXG4gIC8vIENvcHkgMCBieXRlczsgd2UncmUgZG9uZVxuICBpZiAoZW5kID09PSBzdGFydCkgcmV0dXJuIDBcbiAgaWYgKHRhcmdldC5sZW5ndGggPT09IDAgfHwgdGhpcy5sZW5ndGggPT09IDApIHJldHVybiAwXG5cbiAgLy8gRmF0YWwgZXJyb3IgY29uZGl0aW9uc1xuICBpZiAodGFyZ2V0U3RhcnQgPCAwKSB7XG4gICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ3RhcmdldFN0YXJ0IG91dCBvZiBib3VuZHMnKVxuICB9XG4gIGlmIChzdGFydCA8IDAgfHwgc3RhcnQgPj0gdGhpcy5sZW5ndGgpIHRocm93IG5ldyBSYW5nZUVycm9yKCdJbmRleCBvdXQgb2YgcmFuZ2UnKVxuICBpZiAoZW5kIDwgMCkgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ3NvdXJjZUVuZCBvdXQgb2YgYm91bmRzJylcblxuICAvLyBBcmUgd2Ugb29iP1xuICBpZiAoZW5kID4gdGhpcy5sZW5ndGgpIGVuZCA9IHRoaXMubGVuZ3RoXG4gIGlmICh0YXJnZXQubGVuZ3RoIC0gdGFyZ2V0U3RhcnQgPCBlbmQgLSBzdGFydCkge1xuICAgIGVuZCA9IHRhcmdldC5sZW5ndGggLSB0YXJnZXRTdGFydCArIHN0YXJ0XG4gIH1cblxuICBjb25zdCBsZW4gPSBlbmQgLSBzdGFydFxuXG4gIGlmICh0aGlzID09PSB0YXJnZXQgJiYgdHlwZW9mIFVpbnQ4QXJyYXkucHJvdG90eXBlLmNvcHlXaXRoaW4gPT09ICdmdW5jdGlvbicpIHtcbiAgICAvLyBVc2UgYnVpbHQtaW4gd2hlbiBhdmFpbGFibGUsIG1pc3NpbmcgZnJvbSBJRTExXG4gICAgdGhpcy5jb3B5V2l0aGluKHRhcmdldFN0YXJ0LCBzdGFydCwgZW5kKVxuICB9IGVsc2Uge1xuICAgIFVpbnQ4QXJyYXkucHJvdG90eXBlLnNldC5jYWxsKFxuICAgICAgdGFyZ2V0LFxuICAgICAgdGhpcy5zdWJhcnJheShzdGFydCwgZW5kKSxcbiAgICAgIHRhcmdldFN0YXJ0XG4gICAgKVxuICB9XG5cbiAgcmV0dXJuIGxlblxufVxuXG4vLyBVc2FnZTpcbi8vICAgIGJ1ZmZlci5maWxsKG51bWJlclssIG9mZnNldFssIGVuZF1dKVxuLy8gICAgYnVmZmVyLmZpbGwoYnVmZmVyWywgb2Zmc2V0WywgZW5kXV0pXG4vLyAgICBidWZmZXIuZmlsbChzdHJpbmdbLCBvZmZzZXRbLCBlbmRdXVssIGVuY29kaW5nXSlcbkJ1ZmZlci5wcm90b3R5cGUuZmlsbCA9IGZ1bmN0aW9uIGZpbGwgKHZhbCwgc3RhcnQsIGVuZCwgZW5jb2RpbmcpIHtcbiAgLy8gSGFuZGxlIHN0cmluZyBjYXNlczpcbiAgaWYgKHR5cGVvZiB2YWwgPT09ICdzdHJpbmcnKSB7XG4gICAgaWYgKHR5cGVvZiBzdGFydCA9PT0gJ3N0cmluZycpIHtcbiAgICAgIGVuY29kaW5nID0gc3RhcnRcbiAgICAgIHN0YXJ0ID0gMFxuICAgICAgZW5kID0gdGhpcy5sZW5ndGhcbiAgICB9IGVsc2UgaWYgKHR5cGVvZiBlbmQgPT09ICdzdHJpbmcnKSB7XG4gICAgICBlbmNvZGluZyA9IGVuZFxuICAgICAgZW5kID0gdGhpcy5sZW5ndGhcbiAgICB9XG4gICAgaWYgKGVuY29kaW5nICE9PSB1bmRlZmluZWQgJiYgdHlwZW9mIGVuY29kaW5nICE9PSAnc3RyaW5nJykge1xuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignZW5jb2RpbmcgbXVzdCBiZSBhIHN0cmluZycpXG4gICAgfVxuICAgIGlmICh0eXBlb2YgZW5jb2RpbmcgPT09ICdzdHJpbmcnICYmICFCdWZmZXIuaXNFbmNvZGluZyhlbmNvZGluZykpIHtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1Vua25vd24gZW5jb2Rpbmc6ICcgKyBlbmNvZGluZylcbiAgICB9XG4gICAgaWYgKHZhbC5sZW5ndGggPT09IDEpIHtcbiAgICAgIGNvbnN0IGNvZGUgPSB2YWwuY2hhckNvZGVBdCgwKVxuICAgICAgaWYgKChlbmNvZGluZyA9PT0gJ3V0ZjgnICYmIGNvZGUgPCAxMjgpIHx8XG4gICAgICAgICAgZW5jb2RpbmcgPT09ICdsYXRpbjEnKSB7XG4gICAgICAgIC8vIEZhc3QgcGF0aDogSWYgYHZhbGAgZml0cyBpbnRvIGEgc2luZ2xlIGJ5dGUsIHVzZSB0aGF0IG51bWVyaWMgdmFsdWUuXG4gICAgICAgIHZhbCA9IGNvZGVcbiAgICAgIH1cbiAgICB9XG4gIH0gZWxzZSBpZiAodHlwZW9mIHZhbCA9PT0gJ251bWJlcicpIHtcbiAgICB2YWwgPSB2YWwgJiAyNTVcbiAgfSBlbHNlIGlmICh0eXBlb2YgdmFsID09PSAnYm9vbGVhbicpIHtcbiAgICB2YWwgPSBOdW1iZXIodmFsKVxuICB9XG5cbiAgLy8gSW52YWxpZCByYW5nZXMgYXJlIG5vdCBzZXQgdG8gYSBkZWZhdWx0LCBzbyBjYW4gcmFuZ2UgY2hlY2sgZWFybHkuXG4gIGlmIChzdGFydCA8IDAgfHwgdGhpcy5sZW5ndGggPCBzdGFydCB8fCB0aGlzLmxlbmd0aCA8IGVuZCkge1xuICAgIHRocm93IG5ldyBSYW5nZUVycm9yKCdPdXQgb2YgcmFuZ2UgaW5kZXgnKVxuICB9XG5cbiAgaWYgKGVuZCA8PSBzdGFydCkge1xuICAgIHJldHVybiB0aGlzXG4gIH1cblxuICBzdGFydCA9IHN0YXJ0ID4+PiAwXG4gIGVuZCA9IGVuZCA9PT0gdW5kZWZpbmVkID8gdGhpcy5sZW5ndGggOiBlbmQgPj4+IDBcblxuICBpZiAoIXZhbCkgdmFsID0gMFxuXG4gIGxldCBpXG4gIGlmICh0eXBlb2YgdmFsID09PSAnbnVtYmVyJykge1xuICAgIGZvciAoaSA9IHN0YXJ0OyBpIDwgZW5kOyArK2kpIHtcbiAgICAgIHRoaXNbaV0gPSB2YWxcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgY29uc3QgYnl0ZXMgPSBCdWZmZXIuaXNCdWZmZXIodmFsKVxuICAgICAgPyB2YWxcbiAgICAgIDogQnVmZmVyLmZyb20odmFsLCBlbmNvZGluZylcbiAgICBjb25zdCBsZW4gPSBieXRlcy5sZW5ndGhcbiAgICBpZiAobGVuID09PSAwKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdUaGUgdmFsdWUgXCInICsgdmFsICtcbiAgICAgICAgJ1wiIGlzIGludmFsaWQgZm9yIGFyZ3VtZW50IFwidmFsdWVcIicpXG4gICAgfVxuICAgIGZvciAoaSA9IDA7IGkgPCBlbmQgLSBzdGFydDsgKytpKSB7XG4gICAgICB0aGlzW2kgKyBzdGFydF0gPSBieXRlc1tpICUgbGVuXVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiB0aGlzXG59XG5cbi8vIENVU1RPTSBFUlJPUlNcbi8vID09PT09PT09PT09PT1cblxuLy8gU2ltcGxpZmllZCB2ZXJzaW9ucyBmcm9tIE5vZGUsIGNoYW5nZWQgZm9yIEJ1ZmZlci1vbmx5IHVzYWdlXG5jb25zdCBlcnJvcnMgPSB7fVxuZnVuY3Rpb24gRSAoc3ltLCBnZXRNZXNzYWdlLCBCYXNlKSB7XG4gIGVycm9yc1tzeW1dID0gY2xhc3MgTm9kZUVycm9yIGV4dGVuZHMgQmFzZSB7XG4gICAgY29uc3RydWN0b3IgKCkge1xuICAgICAgc3VwZXIoKVxuXG4gICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywgJ21lc3NhZ2UnLCB7XG4gICAgICAgIHZhbHVlOiBnZXRNZXNzYWdlLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyksXG4gICAgICAgIHdyaXRhYmxlOiB0cnVlLFxuICAgICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICAgIH0pXG5cbiAgICAgIC8vIEFkZCB0aGUgZXJyb3IgY29kZSB0byB0aGUgbmFtZSB0byBpbmNsdWRlIGl0IGluIHRoZSBzdGFjayB0cmFjZS5cbiAgICAgIHRoaXMubmFtZSA9IGAke3RoaXMubmFtZX0gWyR7c3ltfV1gXG4gICAgICAvLyBBY2Nlc3MgdGhlIHN0YWNrIHRvIGdlbmVyYXRlIHRoZSBlcnJvciBtZXNzYWdlIGluY2x1ZGluZyB0aGUgZXJyb3IgY29kZVxuICAgICAgLy8gZnJvbSB0aGUgbmFtZS5cbiAgICAgIHRoaXMuc3RhY2sgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby11bnVzZWQtZXhwcmVzc2lvbnNcbiAgICAgIC8vIFJlc2V0IHRoZSBuYW1lIHRvIHRoZSBhY3R1YWwgbmFtZS5cbiAgICAgIGRlbGV0ZSB0aGlzLm5hbWVcbiAgICB9XG5cbiAgICBnZXQgY29kZSAoKSB7XG4gICAgICByZXR1cm4gc3ltXG4gICAgfVxuXG4gICAgc2V0IGNvZGUgKHZhbHVlKSB7XG4gICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywgJ2NvZGUnLCB7XG4gICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcbiAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICAgICAgdmFsdWUsXG4gICAgICAgIHdyaXRhYmxlOiB0cnVlXG4gICAgICB9KVxuICAgIH1cblxuICAgIHRvU3RyaW5nICgpIHtcbiAgICAgIHJldHVybiBgJHt0aGlzLm5hbWV9IFske3N5bX1dOiAke3RoaXMubWVzc2FnZX1gXG4gICAgfVxuICB9XG59XG5cbkUoJ0VSUl9CVUZGRVJfT1VUX09GX0JPVU5EUycsXG4gIGZ1bmN0aW9uIChuYW1lKSB7XG4gICAgaWYgKG5hbWUpIHtcbiAgICAgIHJldHVybiBgJHtuYW1lfSBpcyBvdXRzaWRlIG9mIGJ1ZmZlciBib3VuZHNgXG4gICAgfVxuXG4gICAgcmV0dXJuICdBdHRlbXB0IHRvIGFjY2VzcyBtZW1vcnkgb3V0c2lkZSBidWZmZXIgYm91bmRzJ1xuICB9LCBSYW5nZUVycm9yKVxuRSgnRVJSX0lOVkFMSURfQVJHX1RZUEUnLFxuICBmdW5jdGlvbiAobmFtZSwgYWN0dWFsKSB7XG4gICAgcmV0dXJuIGBUaGUgXCIke25hbWV9XCIgYXJndW1lbnQgbXVzdCBiZSBvZiB0eXBlIG51bWJlci4gUmVjZWl2ZWQgdHlwZSAke3R5cGVvZiBhY3R1YWx9YFxuICB9LCBUeXBlRXJyb3IpXG5FKCdFUlJfT1VUX09GX1JBTkdFJyxcbiAgZnVuY3Rpb24gKHN0ciwgcmFuZ2UsIGlucHV0KSB7XG4gICAgbGV0IG1zZyA9IGBUaGUgdmFsdWUgb2YgXCIke3N0cn1cIiBpcyBvdXQgb2YgcmFuZ2UuYFxuICAgIGxldCByZWNlaXZlZCA9IGlucHV0XG4gICAgaWYgKE51bWJlci5pc0ludGVnZXIoaW5wdXQpICYmIE1hdGguYWJzKGlucHV0KSA+IDIgKiogMzIpIHtcbiAgICAgIHJlY2VpdmVkID0gYWRkTnVtZXJpY2FsU2VwYXJhdG9yKFN0cmluZyhpbnB1dCkpXG4gICAgfSBlbHNlIGlmICh0eXBlb2YgaW5wdXQgPT09ICdiaWdpbnQnKSB7XG4gICAgICByZWNlaXZlZCA9IFN0cmluZyhpbnB1dClcbiAgICAgIGlmIChpbnB1dCA+IEJpZ0ludCgyKSAqKiBCaWdJbnQoMzIpIHx8IGlucHV0IDwgLShCaWdJbnQoMikgKiogQmlnSW50KDMyKSkpIHtcbiAgICAgICAgcmVjZWl2ZWQgPSBhZGROdW1lcmljYWxTZXBhcmF0b3IocmVjZWl2ZWQpXG4gICAgICB9XG4gICAgICByZWNlaXZlZCArPSAnbidcbiAgICB9XG4gICAgbXNnICs9IGAgSXQgbXVzdCBiZSAke3JhbmdlfS4gUmVjZWl2ZWQgJHtyZWNlaXZlZH1gXG4gICAgcmV0dXJuIG1zZ1xuICB9LCBSYW5nZUVycm9yKVxuXG5mdW5jdGlvbiBhZGROdW1lcmljYWxTZXBhcmF0b3IgKHZhbCkge1xuICBsZXQgcmVzID0gJydcbiAgbGV0IGkgPSB2YWwubGVuZ3RoXG4gIGNvbnN0IHN0YXJ0ID0gdmFsWzBdID09PSAnLScgPyAxIDogMFxuICBmb3IgKDsgaSA+PSBzdGFydCArIDQ7IGkgLT0gMykge1xuICAgIHJlcyA9IGBfJHt2YWwuc2xpY2UoaSAtIDMsIGkpfSR7cmVzfWBcbiAgfVxuICByZXR1cm4gYCR7dmFsLnNsaWNlKDAsIGkpfSR7cmVzfWBcbn1cblxuLy8gQ0hFQ0sgRlVOQ1RJT05TXG4vLyA9PT09PT09PT09PT09PT1cblxuZnVuY3Rpb24gY2hlY2tCb3VuZHMgKGJ1Ziwgb2Zmc2V0LCBieXRlTGVuZ3RoKSB7XG4gIHZhbGlkYXRlTnVtYmVyKG9mZnNldCwgJ29mZnNldCcpXG4gIGlmIChidWZbb2Zmc2V0XSA9PT0gdW5kZWZpbmVkIHx8IGJ1ZltvZmZzZXQgKyBieXRlTGVuZ3RoXSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgYm91bmRzRXJyb3Iob2Zmc2V0LCBidWYubGVuZ3RoIC0gKGJ5dGVMZW5ndGggKyAxKSlcbiAgfVxufVxuXG5mdW5jdGlvbiBjaGVja0ludEJJICh2YWx1ZSwgbWluLCBtYXgsIGJ1Ziwgb2Zmc2V0LCBieXRlTGVuZ3RoKSB7XG4gIGlmICh2YWx1ZSA+IG1heCB8fCB2YWx1ZSA8IG1pbikge1xuICAgIGNvbnN0IG4gPSB0eXBlb2YgbWluID09PSAnYmlnaW50JyA/ICduJyA6ICcnXG4gICAgbGV0IHJhbmdlXG4gICAgaWYgKGJ5dGVMZW5ndGggPiAzKSB7XG4gICAgICBpZiAobWluID09PSAwIHx8IG1pbiA9PT0gQmlnSW50KDApKSB7XG4gICAgICAgIHJhbmdlID0gYD49IDAke259IGFuZCA8IDIke259ICoqICR7KGJ5dGVMZW5ndGggKyAxKSAqIDh9JHtufWBcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJhbmdlID0gYD49IC0oMiR7bn0gKiogJHsoYnl0ZUxlbmd0aCArIDEpICogOCAtIDF9JHtufSkgYW5kIDwgMiAqKiBgICtcbiAgICAgICAgICAgICAgICBgJHsoYnl0ZUxlbmd0aCArIDEpICogOCAtIDF9JHtufWBcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgcmFuZ2UgPSBgPj0gJHttaW59JHtufSBhbmQgPD0gJHttYXh9JHtufWBcbiAgICB9XG4gICAgdGhyb3cgbmV3IGVycm9ycy5FUlJfT1VUX09GX1JBTkdFKCd2YWx1ZScsIHJhbmdlLCB2YWx1ZSlcbiAgfVxuICBjaGVja0JvdW5kcyhidWYsIG9mZnNldCwgYnl0ZUxlbmd0aClcbn1cblxuZnVuY3Rpb24gdmFsaWRhdGVOdW1iZXIgKHZhbHVlLCBuYW1lKSB7XG4gIGlmICh0eXBlb2YgdmFsdWUgIT09ICdudW1iZXInKSB7XG4gICAgdGhyb3cgbmV3IGVycm9ycy5FUlJfSU5WQUxJRF9BUkdfVFlQRShuYW1lLCAnbnVtYmVyJywgdmFsdWUpXG4gIH1cbn1cblxuZnVuY3Rpb24gYm91bmRzRXJyb3IgKHZhbHVlLCBsZW5ndGgsIHR5cGUpIHtcbiAgaWYgKE1hdGguZmxvb3IodmFsdWUpICE9PSB2YWx1ZSkge1xuICAgIHZhbGlkYXRlTnVtYmVyKHZhbHVlLCB0eXBlKVxuICAgIHRocm93IG5ldyBlcnJvcnMuRVJSX09VVF9PRl9SQU5HRSh0eXBlIHx8ICdvZmZzZXQnLCAnYW4gaW50ZWdlcicsIHZhbHVlKVxuICB9XG5cbiAgaWYgKGxlbmd0aCA8IDApIHtcbiAgICB0aHJvdyBuZXcgZXJyb3JzLkVSUl9CVUZGRVJfT1VUX09GX0JPVU5EUygpXG4gIH1cblxuICB0aHJvdyBuZXcgZXJyb3JzLkVSUl9PVVRfT0ZfUkFOR0UodHlwZSB8fCAnb2Zmc2V0JyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGA+PSAke3R5cGUgPyAxIDogMH0gYW5kIDw9ICR7bGVuZ3RofWAsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZSlcbn1cblxuLy8gSEVMUEVSIEZVTkNUSU9OU1xuLy8gPT09PT09PT09PT09PT09PVxuXG5jb25zdCBJTlZBTElEX0JBU0U2NF9SRSA9IC9bXisvMC05QS1aYS16LV9dL2dcblxuZnVuY3Rpb24gYmFzZTY0Y2xlYW4gKHN0cikge1xuICAvLyBOb2RlIHRha2VzIGVxdWFsIHNpZ25zIGFzIGVuZCBvZiB0aGUgQmFzZTY0IGVuY29kaW5nXG4gIHN0ciA9IHN0ci5zcGxpdCgnPScpWzBdXG4gIC8vIE5vZGUgc3RyaXBzIG91dCBpbnZhbGlkIGNoYXJhY3RlcnMgbGlrZSBcXG4gYW5kIFxcdCBmcm9tIHRoZSBzdHJpbmcsIGJhc2U2NC1qcyBkb2VzIG5vdFxuICBzdHIgPSBzdHIudHJpbSgpLnJlcGxhY2UoSU5WQUxJRF9CQVNFNjRfUkUsICcnKVxuICAvLyBOb2RlIGNvbnZlcnRzIHN0cmluZ3Mgd2l0aCBsZW5ndGggPCAyIHRvICcnXG4gIGlmIChzdHIubGVuZ3RoIDwgMikgcmV0dXJuICcnXG4gIC8vIE5vZGUgYWxsb3dzIGZvciBub24tcGFkZGVkIGJhc2U2NCBzdHJpbmdzIChtaXNzaW5nIHRyYWlsaW5nID09PSksIGJhc2U2NC1qcyBkb2VzIG5vdFxuICB3aGlsZSAoc3RyLmxlbmd0aCAlIDQgIT09IDApIHtcbiAgICBzdHIgPSBzdHIgKyAnPSdcbiAgfVxuICByZXR1cm4gc3RyXG59XG5cbmZ1bmN0aW9uIHV0ZjhUb0J5dGVzIChzdHJpbmcsIHVuaXRzKSB7XG4gIHVuaXRzID0gdW5pdHMgfHwgSW5maW5pdHlcbiAgbGV0IGNvZGVQb2ludFxuICBjb25zdCBsZW5ndGggPSBzdHJpbmcubGVuZ3RoXG4gIGxldCBsZWFkU3Vycm9nYXRlID0gbnVsbFxuICBjb25zdCBieXRlcyA9IFtdXG5cbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBsZW5ndGg7ICsraSkge1xuICAgIGNvZGVQb2ludCA9IHN0cmluZy5jaGFyQ29kZUF0KGkpXG5cbiAgICAvLyBpcyBzdXJyb2dhdGUgY29tcG9uZW50XG4gICAgaWYgKGNvZGVQb2ludCA+IDB4RDdGRiAmJiBjb2RlUG9pbnQgPCAweEUwMDApIHtcbiAgICAgIC8vIGxhc3QgY2hhciB3YXMgYSBsZWFkXG4gICAgICBpZiAoIWxlYWRTdXJyb2dhdGUpIHtcbiAgICAgICAgLy8gbm8gbGVhZCB5ZXRcbiAgICAgICAgaWYgKGNvZGVQb2ludCA+IDB4REJGRikge1xuICAgICAgICAgIC8vIHVuZXhwZWN0ZWQgdHJhaWxcbiAgICAgICAgICBpZiAoKHVuaXRzIC09IDMpID4gLTEpIGJ5dGVzLnB1c2goMHhFRiwgMHhCRiwgMHhCRClcbiAgICAgICAgICBjb250aW51ZVxuICAgICAgICB9IGVsc2UgaWYgKGkgKyAxID09PSBsZW5ndGgpIHtcbiAgICAgICAgICAvLyB1bnBhaXJlZCBsZWFkXG4gICAgICAgICAgaWYgKCh1bml0cyAtPSAzKSA+IC0xKSBieXRlcy5wdXNoKDB4RUYsIDB4QkYsIDB4QkQpXG4gICAgICAgICAgY29udGludWVcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIHZhbGlkIGxlYWRcbiAgICAgICAgbGVhZFN1cnJvZ2F0ZSA9IGNvZGVQb2ludFxuXG4gICAgICAgIGNvbnRpbnVlXG4gICAgICB9XG5cbiAgICAgIC8vIDIgbGVhZHMgaW4gYSByb3dcbiAgICAgIGlmIChjb2RlUG9pbnQgPCAweERDMDApIHtcbiAgICAgICAgaWYgKCh1bml0cyAtPSAzKSA+IC0xKSBieXRlcy5wdXNoKDB4RUYsIDB4QkYsIDB4QkQpXG4gICAgICAgIGxlYWRTdXJyb2dhdGUgPSBjb2RlUG9pbnRcbiAgICAgICAgY29udGludWVcbiAgICAgIH1cblxuICAgICAgLy8gdmFsaWQgc3Vycm9nYXRlIHBhaXJcbiAgICAgIGNvZGVQb2ludCA9IChsZWFkU3Vycm9nYXRlIC0gMHhEODAwIDw8IDEwIHwgY29kZVBvaW50IC0gMHhEQzAwKSArIDB4MTAwMDBcbiAgICB9IGVsc2UgaWYgKGxlYWRTdXJyb2dhdGUpIHtcbiAgICAgIC8vIHZhbGlkIGJtcCBjaGFyLCBidXQgbGFzdCBjaGFyIHdhcyBhIGxlYWRcbiAgICAgIGlmICgodW5pdHMgLT0gMykgPiAtMSkgYnl0ZXMucHVzaCgweEVGLCAweEJGLCAweEJEKVxuICAgIH1cblxuICAgIGxlYWRTdXJyb2dhdGUgPSBudWxsXG5cbiAgICAvLyBlbmNvZGUgdXRmOFxuICAgIGlmIChjb2RlUG9pbnQgPCAweDgwKSB7XG4gICAgICBpZiAoKHVuaXRzIC09IDEpIDwgMCkgYnJlYWtcbiAgICAgIGJ5dGVzLnB1c2goY29kZVBvaW50KVxuICAgIH0gZWxzZSBpZiAoY29kZVBvaW50IDwgMHg4MDApIHtcbiAgICAgIGlmICgodW5pdHMgLT0gMikgPCAwKSBicmVha1xuICAgICAgYnl0ZXMucHVzaChcbiAgICAgICAgY29kZVBvaW50ID4+IDB4NiB8IDB4QzAsXG4gICAgICAgIGNvZGVQb2ludCAmIDB4M0YgfCAweDgwXG4gICAgICApXG4gICAgfSBlbHNlIGlmIChjb2RlUG9pbnQgPCAweDEwMDAwKSB7XG4gICAgICBpZiAoKHVuaXRzIC09IDMpIDwgMCkgYnJlYWtcbiAgICAgIGJ5dGVzLnB1c2goXG4gICAgICAgIGNvZGVQb2ludCA+PiAweEMgfCAweEUwLFxuICAgICAgICBjb2RlUG9pbnQgPj4gMHg2ICYgMHgzRiB8IDB4ODAsXG4gICAgICAgIGNvZGVQb2ludCAmIDB4M0YgfCAweDgwXG4gICAgICApXG4gICAgfSBlbHNlIGlmIChjb2RlUG9pbnQgPCAweDExMDAwMCkge1xuICAgICAgaWYgKCh1bml0cyAtPSA0KSA8IDApIGJyZWFrXG4gICAgICBieXRlcy5wdXNoKFxuICAgICAgICBjb2RlUG9pbnQgPj4gMHgxMiB8IDB4RjAsXG4gICAgICAgIGNvZGVQb2ludCA+PiAweEMgJiAweDNGIHwgMHg4MCxcbiAgICAgICAgY29kZVBvaW50ID4+IDB4NiAmIDB4M0YgfCAweDgwLFxuICAgICAgICBjb2RlUG9pbnQgJiAweDNGIHwgMHg4MFxuICAgICAgKVxuICAgIH0gZWxzZSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0ludmFsaWQgY29kZSBwb2ludCcpXG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGJ5dGVzXG59XG5cbmZ1bmN0aW9uIGFzY2lpVG9CeXRlcyAoc3RyKSB7XG4gIGNvbnN0IGJ5dGVBcnJheSA9IFtdXG4gIGZvciAobGV0IGkgPSAwOyBpIDwgc3RyLmxlbmd0aDsgKytpKSB7XG4gICAgLy8gTm9kZSdzIGNvZGUgc2VlbXMgdG8gYmUgZG9pbmcgdGhpcyBhbmQgbm90ICYgMHg3Ri4uXG4gICAgYnl0ZUFycmF5LnB1c2goc3RyLmNoYXJDb2RlQXQoaSkgJiAweEZGKVxuICB9XG4gIHJldHVybiBieXRlQXJyYXlcbn1cblxuZnVuY3Rpb24gdXRmMTZsZVRvQnl0ZXMgKHN0ciwgdW5pdHMpIHtcbiAgbGV0IGMsIGhpLCBsb1xuICBjb25zdCBieXRlQXJyYXkgPSBbXVxuICBmb3IgKGxldCBpID0gMDsgaSA8IHN0ci5sZW5ndGg7ICsraSkge1xuICAgIGlmICgodW5pdHMgLT0gMikgPCAwKSBicmVha1xuXG4gICAgYyA9IHN0ci5jaGFyQ29kZUF0KGkpXG4gICAgaGkgPSBjID4+IDhcbiAgICBsbyA9IGMgJSAyNTZcbiAgICBieXRlQXJyYXkucHVzaChsbylcbiAgICBieXRlQXJyYXkucHVzaChoaSlcbiAgfVxuXG4gIHJldHVybiBieXRlQXJyYXlcbn1cblxuZnVuY3Rpb24gYmFzZTY0VG9CeXRlcyAoc3RyKSB7XG4gIHJldHVybiBiYXNlNjQudG9CeXRlQXJyYXkoYmFzZTY0Y2xlYW4oc3RyKSlcbn1cblxuZnVuY3Rpb24gYmxpdEJ1ZmZlciAoc3JjLCBkc3QsIG9mZnNldCwgbGVuZ3RoKSB7XG4gIGxldCBpXG4gIGZvciAoaSA9IDA7IGkgPCBsZW5ndGg7ICsraSkge1xuICAgIGlmICgoaSArIG9mZnNldCA+PSBkc3QubGVuZ3RoKSB8fCAoaSA+PSBzcmMubGVuZ3RoKSkgYnJlYWtcbiAgICBkc3RbaSArIG9mZnNldF0gPSBzcmNbaV1cbiAgfVxuICByZXR1cm4gaVxufVxuXG4vLyBBcnJheUJ1ZmZlciBvciBVaW50OEFycmF5IG9iamVjdHMgZnJvbSBvdGhlciBjb250ZXh0cyAoaS5lLiBpZnJhbWVzKSBkbyBub3QgcGFzc1xuLy8gdGhlIGBpbnN0YW5jZW9mYCBjaGVjayBidXQgdGhleSBzaG91bGQgYmUgdHJlYXRlZCBhcyBvZiB0aGF0IHR5cGUuXG4vLyBTZWU6IGh0dHBzOi8vZ2l0aHViLmNvbS9mZXJvc3MvYnVmZmVyL2lzc3Vlcy8xNjZcbmZ1bmN0aW9uIGlzSW5zdGFuY2UgKG9iaiwgdHlwZSkge1xuICByZXR1cm4gb2JqIGluc3RhbmNlb2YgdHlwZSB8fFxuICAgIChvYmogIT0gbnVsbCAmJiBvYmouY29uc3RydWN0b3IgIT0gbnVsbCAmJiBvYmouY29uc3RydWN0b3IubmFtZSAhPSBudWxsICYmXG4gICAgICBvYmouY29uc3RydWN0b3IubmFtZSA9PT0gdHlwZS5uYW1lKVxufVxuZnVuY3Rpb24gbnVtYmVySXNOYU4gKG9iaikge1xuICAvLyBGb3IgSUUxMSBzdXBwb3J0XG4gIHJldHVybiBvYmogIT09IG9iaiAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLXNlbGYtY29tcGFyZVxufVxuXG4vLyBDcmVhdGUgbG9va3VwIHRhYmxlIGZvciBgdG9TdHJpbmcoJ2hleCcpYFxuLy8gU2VlOiBodHRwczovL2dpdGh1Yi5jb20vZmVyb3NzL2J1ZmZlci9pc3N1ZXMvMjE5XG5jb25zdCBoZXhTbGljZUxvb2t1cFRhYmxlID0gKGZ1bmN0aW9uICgpIHtcbiAgY29uc3QgYWxwaGFiZXQgPSAnMDEyMzQ1Njc4OWFiY2RlZidcbiAgY29uc3QgdGFibGUgPSBuZXcgQXJyYXkoMjU2KVxuICBmb3IgKGxldCBpID0gMDsgaSA8IDE2OyArK2kpIHtcbiAgICBjb25zdCBpMTYgPSBpICogMTZcbiAgICBmb3IgKGxldCBqID0gMDsgaiA8IDE2OyArK2opIHtcbiAgICAgIHRhYmxlW2kxNiArIGpdID0gYWxwaGFiZXRbaV0gKyBhbHBoYWJldFtqXVxuICAgIH1cbiAgfVxuICByZXR1cm4gdGFibGVcbn0pKClcblxuLy8gUmV0dXJuIG5vdCBmdW5jdGlvbiB3aXRoIEVycm9yIGlmIEJpZ0ludCBub3Qgc3VwcG9ydGVkXG5mdW5jdGlvbiBkZWZpbmVCaWdJbnRNZXRob2QgKGZuKSB7XG4gIHJldHVybiB0eXBlb2YgQmlnSW50ID09PSAndW5kZWZpbmVkJyA/IEJ1ZmZlckJpZ0ludE5vdERlZmluZWQgOiBmblxufVxuXG5mdW5jdGlvbiBCdWZmZXJCaWdJbnROb3REZWZpbmVkICgpIHtcbiAgdGhyb3cgbmV3IEVycm9yKCdCaWdJbnQgbm90IHN1cHBvcnRlZCcpXG59XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///48287\n")},48303:function(__unused_webpack_module,__unused_webpack_exports,__webpack_require__){eval("//! moment.js locale configuration\n//! locale : Portuguese (Brazil) [pt-br]\n//! author : Caio Ribeiro Pereira : https://github.com/caio-ribeiro-pereira\n\n;(function (global, factory) {\n true ? factory(__webpack_require__(95093)) :\n 0\n}(this, (function (moment) { 'use strict';\n\n //! moment.js locale configuration\n\n var ptBr = moment.defineLocale('pt-br', {\n months: 'janeiro_fevereiro_março_abril_maio_junho_julho_agosto_setembro_outubro_novembro_dezembro'.split(\n '_'\n ),\n monthsShort: 'jan_fev_mar_abr_mai_jun_jul_ago_set_out_nov_dez'.split('_'),\n weekdays:\n 'domingo_segunda-feira_terça-feira_quarta-feira_quinta-feira_sexta-feira_sábado'.split(\n '_'\n ),\n weekdaysShort: 'dom_seg_ter_qua_qui_sex_sáb'.split('_'),\n weekdaysMin: 'do_2ª_3ª_4ª_5ª_6ª_sá'.split('_'),\n weekdaysParseExact: true,\n longDateFormat: {\n LT: 'HH:mm',\n LTS: 'HH:mm:ss',\n L: 'DD/MM/YYYY',\n LL: 'D [de] MMMM [de] YYYY',\n LLL: 'D [de] MMMM [de] YYYY [às] HH:mm',\n LLLL: 'dddd, D [de] MMMM [de] YYYY [às] HH:mm',\n },\n calendar: {\n sameDay: '[Hoje às] LT',\n nextDay: '[Amanhã às] LT',\n nextWeek: 'dddd [às] LT',\n lastDay: '[Ontem às] LT',\n lastWeek: function () {\n return this.day() === 0 || this.day() === 6\n ? '[Último] dddd [às] LT' // Saturday + Sunday\n : '[Última] dddd [às] LT'; // Monday - Friday\n },\n sameElse: 'L',\n },\n relativeTime: {\n future: 'em %s',\n past: 'há %s',\n s: 'poucos segundos',\n ss: '%d segundos',\n m: 'um minuto',\n mm: '%d minutos',\n h: 'uma hora',\n hh: '%d horas',\n d: 'um dia',\n dd: '%d dias',\n M: 'um mês',\n MM: '%d meses',\n y: 'um ano',\n yy: '%d anos',\n },\n dayOfMonthOrdinalParse: /\\d{1,2}º/,\n ordinal: '%dº',\n invalidDate: 'Data inválida',\n });\n\n return ptBr;\n\n})));\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNDgzMDMuanMiLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9pdGctbmV4dGdlbi1mcm9udGVuZC8uL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL3B0LWJyLmpzP2QyZDQiXSwic291cmNlc0NvbnRlbnQiOlsiLy8hIG1vbWVudC5qcyBsb2NhbGUgY29uZmlndXJhdGlvblxuLy8hIGxvY2FsZSA6IFBvcnR1Z3Vlc2UgKEJyYXppbCkgW3B0LWJyXVxuLy8hIGF1dGhvciA6IENhaW8gUmliZWlybyBQZXJlaXJhIDogaHR0cHM6Ly9naXRodWIuY29tL2NhaW8tcmliZWlyby1wZXJlaXJhXG5cbjsoZnVuY3Rpb24gKGdsb2JhbCwgZmFjdG9yeSkge1xuICAgdHlwZW9mIGV4cG9ydHMgPT09ICdvYmplY3QnICYmIHR5cGVvZiBtb2R1bGUgIT09ICd1bmRlZmluZWQnXG4gICAgICAgJiYgdHlwZW9mIHJlcXVpcmUgPT09ICdmdW5jdGlvbicgPyBmYWN0b3J5KHJlcXVpcmUoJy4uL21vbWVudCcpKSA6XG4gICB0eXBlb2YgZGVmaW5lID09PSAnZnVuY3Rpb24nICYmIGRlZmluZS5hbWQgPyBkZWZpbmUoWycuLi9tb21lbnQnXSwgZmFjdG9yeSkgOlxuICAgZmFjdG9yeShnbG9iYWwubW9tZW50KVxufSh0aGlzLCAoZnVuY3Rpb24gKG1vbWVudCkgeyAndXNlIHN0cmljdCc7XG5cbiAgICAvLyEgbW9tZW50LmpzIGxvY2FsZSBjb25maWd1cmF0aW9uXG5cbiAgICB2YXIgcHRCciA9IG1vbWVudC5kZWZpbmVMb2NhbGUoJ3B0LWJyJywge1xuICAgICAgICBtb250aHM6ICdqYW5laXJvX2ZldmVyZWlyb19tYXLDp29fYWJyaWxfbWFpb19qdW5ob19qdWxob19hZ29zdG9fc2V0ZW1icm9fb3V0dWJyb19ub3ZlbWJyb19kZXplbWJybycuc3BsaXQoXG4gICAgICAgICAgICAnXydcbiAgICAgICAgKSxcbiAgICAgICAgbW9udGhzU2hvcnQ6ICdqYW5fZmV2X21hcl9hYnJfbWFpX2p1bl9qdWxfYWdvX3NldF9vdXRfbm92X2Rleicuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXM6XG4gICAgICAgICAgICAnZG9taW5nb19zZWd1bmRhLWZlaXJhX3RlcsOnYS1mZWlyYV9xdWFydGEtZmVpcmFfcXVpbnRhLWZlaXJhX3NleHRhLWZlaXJhX3PDoWJhZG8nLnNwbGl0KFxuICAgICAgICAgICAgICAgICdfJ1xuICAgICAgICAgICAgKSxcbiAgICAgICAgd2Vla2RheXNTaG9ydDogJ2RvbV9zZWdfdGVyX3F1YV9xdWlfc2V4X3PDoWInLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzTWluOiAnZG9fMsKqXzPCql80wqpfNcKqXzbCql9zw6EnLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzUGFyc2VFeGFjdDogdHJ1ZSxcbiAgICAgICAgbG9uZ0RhdGVGb3JtYXQ6IHtcbiAgICAgICAgICAgIExUOiAnSEg6bW0nLFxuICAgICAgICAgICAgTFRTOiAnSEg6bW06c3MnLFxuICAgICAgICAgICAgTDogJ0REL01NL1lZWVknLFxuICAgICAgICAgICAgTEw6ICdEIFtkZV0gTU1NTSBbZGVdIFlZWVknLFxuICAgICAgICAgICAgTExMOiAnRCBbZGVdIE1NTU0gW2RlXSBZWVlZIFvDoHNdIEhIOm1tJyxcbiAgICAgICAgICAgIExMTEw6ICdkZGRkLCBEIFtkZV0gTU1NTSBbZGVdIFlZWVkgW8Ogc10gSEg6bW0nLFxuICAgICAgICB9LFxuICAgICAgICBjYWxlbmRhcjoge1xuICAgICAgICAgICAgc2FtZURheTogJ1tIb2plIMOgc10gTFQnLFxuICAgICAgICAgICAgbmV4dERheTogJ1tBbWFuaMOjIMOgc10gTFQnLFxuICAgICAgICAgICAgbmV4dFdlZWs6ICdkZGRkIFvDoHNdIExUJyxcbiAgICAgICAgICAgIGxhc3REYXk6ICdbT250ZW0gw6BzXSBMVCcsXG4gICAgICAgICAgICBsYXN0V2VlazogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmRheSgpID09PSAwIHx8IHRoaXMuZGF5KCkgPT09IDZcbiAgICAgICAgICAgICAgICAgICAgPyAnW8OabHRpbW9dIGRkZGQgW8Ogc10gTFQnIC8vIFNhdHVyZGF5ICsgU3VuZGF5XG4gICAgICAgICAgICAgICAgICAgIDogJ1vDmmx0aW1hXSBkZGRkIFvDoHNdIExUJzsgLy8gTW9uZGF5IC0gRnJpZGF5XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgc2FtZUVsc2U6ICdMJyxcbiAgICAgICAgfSxcbiAgICAgICAgcmVsYXRpdmVUaW1lOiB7XG4gICAgICAgICAgICBmdXR1cmU6ICdlbSAlcycsXG4gICAgICAgICAgICBwYXN0OiAnaMOhICVzJyxcbiAgICAgICAgICAgIHM6ICdwb3Vjb3Mgc2VndW5kb3MnLFxuICAgICAgICAgICAgc3M6ICclZCBzZWd1bmRvcycsXG4gICAgICAgICAgICBtOiAndW0gbWludXRvJyxcbiAgICAgICAgICAgIG1tOiAnJWQgbWludXRvcycsXG4gICAgICAgICAgICBoOiAndW1hIGhvcmEnLFxuICAgICAgICAgICAgaGg6ICclZCBob3JhcycsXG4gICAgICAgICAgICBkOiAndW0gZGlhJyxcbiAgICAgICAgICAgIGRkOiAnJWQgZGlhcycsXG4gICAgICAgICAgICBNOiAndW0gbcOqcycsXG4gICAgICAgICAgICBNTTogJyVkIG1lc2VzJyxcbiAgICAgICAgICAgIHk6ICd1bSBhbm8nLFxuICAgICAgICAgICAgeXk6ICclZCBhbm9zJyxcbiAgICAgICAgfSxcbiAgICAgICAgZGF5T2ZNb250aE9yZGluYWxQYXJzZTogL1xcZHsxLDJ9wrovLFxuICAgICAgICBvcmRpbmFsOiAnJWTCuicsXG4gICAgICAgIGludmFsaWREYXRlOiAnRGF0YSBpbnbDoWxpZGEnLFxuICAgIH0pO1xuXG4gICAgcmV0dXJuIHB0QnI7XG5cbn0pKSk7XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///48303\n")},48414:function(__unused_webpack_module,__unused_webpack_exports,__webpack_require__){eval("//! moment.js locale configuration\n//! locale : Uyghur (China) [ug-cn]\n//! author: boyaq : https://github.com/boyaq\n\n;(function (global, factory) {\n true ? factory(__webpack_require__(95093)) :\n 0\n}(this, (function (moment) { 'use strict';\n\n //! moment.js locale configuration\n\n var ugCn = moment.defineLocale('ug-cn', {\n months: 'يانۋار_فېۋرال_مارت_ئاپرېل_ماي_ئىيۇن_ئىيۇل_ئاۋغۇست_سېنتەبىر_ئۆكتەبىر_نويابىر_دېكابىر'.split(\n '_'\n ),\n monthsShort:\n 'يانۋار_فېۋرال_مارت_ئاپرېل_ماي_ئىيۇن_ئىيۇل_ئاۋغۇست_سېنتەبىر_ئۆكتەبىر_نويابىر_دېكابىر'.split(\n '_'\n ),\n weekdays: 'يەكشەنبە_دۈشەنبە_سەيشەنبە_چارشەنبە_پەيشەنبە_جۈمە_شەنبە'.split(\n '_'\n ),\n weekdaysShort: 'يە_دۈ_سە_چا_پە_جۈ_شە'.split('_'),\n weekdaysMin: 'يە_دۈ_سە_چا_پە_جۈ_شە'.split('_'),\n longDateFormat: {\n LT: 'HH:mm',\n LTS: 'HH:mm:ss',\n L: 'YYYY-MM-DD',\n LL: 'YYYY-يىلىM-ئاينىڭD-كۈنى',\n LLL: 'YYYY-يىلىM-ئاينىڭD-كۈنى، HH:mm',\n LLLL: 'dddd، YYYY-يىلىM-ئاينىڭD-كۈنى، HH:mm',\n },\n meridiemParse: /يېرىم كېچە|سەھەر|چۈشتىن بۇرۇن|چۈش|چۈشتىن كېيىن|كەچ/,\n meridiemHour: function (hour, meridiem) {\n if (hour === 12) {\n hour = 0;\n }\n if (\n meridiem === 'يېرىم كېچە' ||\n meridiem === 'سەھەر' ||\n meridiem === 'چۈشتىن بۇرۇن'\n ) {\n return hour;\n } else if (meridiem === 'چۈشتىن كېيىن' || meridiem === 'كەچ') {\n return hour + 12;\n } else {\n return hour >= 11 ? hour : hour + 12;\n }\n },\n meridiem: function (hour, minute, isLower) {\n var hm = hour * 100 + minute;\n if (hm < 600) {\n return 'يېرىم كېچە';\n } else if (hm < 900) {\n return 'سەھەر';\n } else if (hm < 1130) {\n return 'چۈشتىن بۇرۇن';\n } else if (hm < 1230) {\n return 'چۈش';\n } else if (hm < 1800) {\n return 'چۈشتىن كېيىن';\n } else {\n return 'كەچ';\n }\n },\n calendar: {\n sameDay: '[بۈگۈن سائەت] LT',\n nextDay: '[ئەتە سائەت] LT',\n nextWeek: '[كېلەركى] dddd [سائەت] LT',\n lastDay: '[تۆنۈگۈن] LT',\n lastWeek: '[ئالدىنقى] dddd [سائەت] LT',\n sameElse: 'L',\n },\n relativeTime: {\n future: '%s كېيىن',\n past: '%s بۇرۇن',\n s: 'نەچچە سېكونت',\n ss: '%d سېكونت',\n m: 'بىر مىنۇت',\n mm: '%d مىنۇت',\n h: 'بىر سائەت',\n hh: '%d سائەت',\n d: 'بىر كۈن',\n dd: '%d كۈن',\n M: 'بىر ئاي',\n MM: '%d ئاي',\n y: 'بىر يىل',\n yy: '%d يىل',\n },\n\n dayOfMonthOrdinalParse: /\\d{1,2}(-كۈنى|-ئاي|-ھەپتە)/,\n ordinal: function (number, period) {\n switch (period) {\n case 'd':\n case 'D':\n case 'DDD':\n return number + '-كۈنى';\n case 'w':\n case 'W':\n return number + '-ھەپتە';\n default:\n return number;\n }\n },\n preparse: function (string) {\n return string.replace(/،/g, ',');\n },\n postformat: function (string) {\n return string.replace(/,/g, '،');\n },\n week: {\n // GB/T 7408-1994《数据元和交换格式·信息交换·日期和时间表示法》与ISO 8601:1988等效\n dow: 1, // Monday is the first day of the week.\n doy: 7, // The week that contains Jan 1st is the first week of the year.\n },\n });\n\n return ugCn;\n\n})));\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNDg0MTQuanMiLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vaXRnLW5leHRnZW4tZnJvbnRlbmQvLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS91Zy1jbi5qcz82MTE3Il0sInNvdXJjZXNDb250ZW50IjpbIi8vISBtb21lbnQuanMgbG9jYWxlIGNvbmZpZ3VyYXRpb25cbi8vISBsb2NhbGUgOiBVeWdodXIgKENoaW5hKSBbdWctY25dXG4vLyEgYXV0aG9yOiBib3lhcSA6IGh0dHBzOi8vZ2l0aHViLmNvbS9ib3lhcVxuXG47KGZ1bmN0aW9uIChnbG9iYWwsIGZhY3RvcnkpIHtcbiAgIHR5cGVvZiBleHBvcnRzID09PSAnb2JqZWN0JyAmJiB0eXBlb2YgbW9kdWxlICE9PSAndW5kZWZpbmVkJ1xuICAgICAgICYmIHR5cGVvZiByZXF1aXJlID09PSAnZnVuY3Rpb24nID8gZmFjdG9yeShyZXF1aXJlKCcuLi9tb21lbnQnKSkgOlxuICAgdHlwZW9mIGRlZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiBkZWZpbmUuYW1kID8gZGVmaW5lKFsnLi4vbW9tZW50J10sIGZhY3RvcnkpIDpcbiAgIGZhY3RvcnkoZ2xvYmFsLm1vbWVudClcbn0odGhpcywgKGZ1bmN0aW9uIChtb21lbnQpIHsgJ3VzZSBzdHJpY3QnO1xuXG4gICAgLy8hIG1vbWVudC5qcyBsb2NhbGUgY29uZmlndXJhdGlvblxuXG4gICAgdmFyIHVnQ24gPSBtb21lbnQuZGVmaW5lTG9jYWxlKCd1Zy1jbicsIHtcbiAgICAgICAgbW9udGhzOiAn2YrYp9mG24vYp9ixX9mB25Dbi9ix2KfZhF/Zhdin2LHYql/Yptin2b7YsduQ2YRf2YXYp9mKX9im2YnZituH2YZf2KbZidmK24fZhF/Yptin24vYutuH2LPYql/Ys9uQ2YbYqtuV2KjZidixX9im24bZg9iq25XYqNmJ2LFf2YbZiNmK2KfYqNmJ2LFf2K/bkNmD2KfYqNmJ2LEnLnNwbGl0KFxuICAgICAgICAgICAgJ18nXG4gICAgICAgICksXG4gICAgICAgIG1vbnRoc1Nob3J0OlxuICAgICAgICAgICAgJ9mK2KfZhtuL2KfYsV/ZgduQ24vYsdin2YRf2YXYp9ix2Kpf2KbYp9m+2LHbkNmEX9mF2KfZil/YptmJ2Yrbh9mGX9im2YnZituH2YRf2KbYp9uL2Lrbh9iz2Kpf2LPbkNmG2Krbldio2YnYsV/YptuG2YPYqtuV2KjZidixX9mG2YjZitin2KjZidixX9iv25DZg9in2KjZidixJy5zcGxpdChcbiAgICAgICAgICAgICAgICAnXydcbiAgICAgICAgICAgICksXG4gICAgICAgIHdlZWtkYXlzOiAn2YrbldmD2LTbldmG2KjblV/Yr9uI2LTbldmG2KjblV/Ys9uV2YrYtNuV2YbYqNuVX9qG2KfYsdi025XZhtio25Vf2b7bldmK2LTbldmG2KjblV/YrNuI2YXblV/YtNuV2YbYqNuVJy5zcGxpdChcbiAgICAgICAgICAgICdfJ1xuICAgICAgICApLFxuICAgICAgICB3ZWVrZGF5c1Nob3J0OiAn2YrblV/Yr9uIX9iz25Vf2obYp1/ZvtuVX9is24hf2LTblScuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXNNaW46ICfZituVX9iv24hf2LPblV/ahtinX9m+25Vf2KzbiF/YtNuVJy5zcGxpdCgnXycpLFxuICAgICAgICBsb25nRGF0ZUZvcm1hdDoge1xuICAgICAgICAgICAgTFQ6ICdISDptbScsXG4gICAgICAgICAgICBMVFM6ICdISDptbTpzcycsXG4gICAgICAgICAgICBMOiAnWVlZWS1NTS1ERCcsXG4gICAgICAgICAgICBMTDogJ1lZWVkt2YrZidmE2YlNLdim2KfZitmG2YnarUQt2YPbiNmG2YknLFxuICAgICAgICAgICAgTExMOiAnWVlZWS3ZitmJ2YTZiU0t2KbYp9mK2YbZidqtRC3Zg9uI2YbZidiMIEhIOm1tJyxcbiAgICAgICAgICAgIExMTEw6ICdkZGRk2IwgWVlZWS3ZitmJ2YTZiU0t2KbYp9mK2YbZidqtRC3Zg9uI2YbZidiMIEhIOm1tJyxcbiAgICAgICAgfSxcbiAgICAgICAgbWVyaWRpZW1QYXJzZTogL9mK25DYsdmJ2YUg2YPbkNqG25V82LPbldq+25XYsXzahtuI2LTYqtmJ2YYg2Kjbh9ix24fZhnzahtuI2LR82obbiNi02KrZidmGINmD25DZitmJ2YZ82YPbldqGLyxcbiAgICAgICAgbWVyaWRpZW1Ib3VyOiBmdW5jdGlvbiAoaG91ciwgbWVyaWRpZW0pIHtcbiAgICAgICAgICAgIGlmIChob3VyID09PSAxMikge1xuICAgICAgICAgICAgICAgIGhvdXIgPSAwO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgIG1lcmlkaWVtID09PSAn2YrbkNix2YnZhSDZg9uQ2obblScgfHxcbiAgICAgICAgICAgICAgICBtZXJpZGllbSA9PT0gJ9iz25XavtuV2LEnIHx8XG4gICAgICAgICAgICAgICAgbWVyaWRpZW0gPT09ICfahtuI2LTYqtmJ2YYg2Kjbh9ix24fZhidcbiAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgIHJldHVybiBob3VyO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChtZXJpZGllbSA9PT0gJ9qG24jYtNiq2YnZhiDZg9uQ2YrZidmGJyB8fCBtZXJpZGllbSA9PT0gJ9mD25XahicpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gaG91ciArIDEyO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gaG91ciA+PSAxMSA/IGhvdXIgOiBob3VyICsgMTI7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIG1lcmlkaWVtOiBmdW5jdGlvbiAoaG91ciwgbWludXRlLCBpc0xvd2VyKSB7XG4gICAgICAgICAgICB2YXIgaG0gPSBob3VyICogMTAwICsgbWludXRlO1xuICAgICAgICAgICAgaWYgKGhtIDwgNjAwKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuICfZituQ2LHZidmFINmD25DahtuVJztcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoaG0gPCA5MDApIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gJ9iz25XavtuV2LEnO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChobSA8IDExMzApIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gJ9qG24jYtNiq2YnZhiDYqNuH2LHbh9mGJztcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoaG0gPCAxMjMwKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuICfahtuI2LQnO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChobSA8IDE4MDApIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gJ9qG24jYtNiq2YnZhiDZg9uQ2YrZidmGJztcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuICfZg9uV2oYnO1xuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBjYWxlbmRhcjoge1xuICAgICAgICAgICAgc2FtZURheTogJ1vYqNuI2q/biNmGINiz2KfYptuV2KpdIExUJyxcbiAgICAgICAgICAgIG5leHREYXk6ICdb2Kbbldiq25Ug2LPYp9im25XYql0gTFQnLFxuICAgICAgICAgICAgbmV4dFdlZWs6ICdb2YPbkNmE25XYsdmD2YldIGRkZGQgW9iz2KfYptuV2KpdIExUJyxcbiAgICAgICAgICAgIGxhc3REYXk6ICdb2KrbhtmG24jar9uI2YZdIExUJyxcbiAgICAgICAgICAgIGxhc3RXZWVrOiAnW9im2KfZhNiv2YnZhtmC2YldIGRkZGQgW9iz2KfYptuV2KpdIExUJyxcbiAgICAgICAgICAgIHNhbWVFbHNlOiAnTCcsXG4gICAgICAgIH0sXG4gICAgICAgIHJlbGF0aXZlVGltZToge1xuICAgICAgICAgICAgZnV0dXJlOiAnJXMg2YPbkNmK2YnZhicsXG4gICAgICAgICAgICBwYXN0OiAnJXMg2Kjbh9ix24fZhicsXG4gICAgICAgICAgICBzOiAn2YbbldqG2obblSDYs9uQ2YPZiNmG2KonLFxuICAgICAgICAgICAgc3M6ICclZCDYs9uQ2YPZiNmG2KonLFxuICAgICAgICAgICAgbTogJ9io2YnYsSDZhdmJ2Ybbh9iqJyxcbiAgICAgICAgICAgIG1tOiAnJWQg2YXZidmG24fYqicsXG4gICAgICAgICAgICBoOiAn2KjZidixINiz2KfYptuV2KonLFxuICAgICAgICAgICAgaGg6ICclZCDYs9in2KbbldiqJyxcbiAgICAgICAgICAgIGQ6ICfYqNmJ2LEg2YPbiNmGJyxcbiAgICAgICAgICAgIGRkOiAnJWQg2YPbiNmGJyxcbiAgICAgICAgICAgIE06ICfYqNmJ2LEg2KbYp9mKJyxcbiAgICAgICAgICAgIE1NOiAnJWQg2KbYp9mKJyxcbiAgICAgICAgICAgIHk6ICfYqNmJ2LEg2YrZidmEJyxcbiAgICAgICAgICAgIHl5OiAnJWQg2YrZidmEJyxcbiAgICAgICAgfSxcblxuICAgICAgICBkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOiAvXFxkezEsMn0oLdmD24jZhtmJfC3Yptin2Yp8Ldq+25XZvtiq25UpLyxcbiAgICAgICAgb3JkaW5hbDogZnVuY3Rpb24gKG51bWJlciwgcGVyaW9kKSB7XG4gICAgICAgICAgICBzd2l0Y2ggKHBlcmlvZCkge1xuICAgICAgICAgICAgICAgIGNhc2UgJ2QnOlxuICAgICAgICAgICAgICAgIGNhc2UgJ0QnOlxuICAgICAgICAgICAgICAgIGNhc2UgJ0RERCc6XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBudW1iZXIgKyAnLdmD24jZhtmJJztcbiAgICAgICAgICAgICAgICBjYXNlICd3JzpcbiAgICAgICAgICAgICAgICBjYXNlICdXJzpcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG51bWJlciArICct2r7bldm+2KrblSc7XG4gICAgICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG51bWJlcjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgcHJlcGFyc2U6IGZ1bmN0aW9uIChzdHJpbmcpIHtcbiAgICAgICAgICAgIHJldHVybiBzdHJpbmcucmVwbGFjZSgv2IwvZywgJywnKTtcbiAgICAgICAgfSxcbiAgICAgICAgcG9zdGZvcm1hdDogZnVuY3Rpb24gKHN0cmluZykge1xuICAgICAgICAgICAgcmV0dXJuIHN0cmluZy5yZXBsYWNlKC8sL2csICfYjCcpO1xuICAgICAgICB9LFxuICAgICAgICB3ZWVrOiB7XG4gICAgICAgICAgICAvLyBHQi9UIDc0MDgtMTk5NOOAiuaVsOaNruWFg+WSjOS6pOaNouagvOW8j8K35L+h5oGv5Lqk5o2iwrfml6XmnJ/lkozml7bpl7TooajnpLrms5XjgIvkuI5JU08gODYwMToxOTg4562J5pWIXG4gICAgICAgICAgICBkb3c6IDEsIC8vIE1vbmRheSBpcyB0aGUgZmlyc3QgZGF5IG9mIHRoZSB3ZWVrLlxuICAgICAgICAgICAgZG95OiA3LCAvLyBUaGUgd2VlayB0aGF0IGNvbnRhaW5zIEphbiAxc3QgaXMgdGhlIGZpcnN0IHdlZWsgb2YgdGhlIHllYXIuXG4gICAgICAgIH0sXG4gICAgfSk7XG5cbiAgICByZXR1cm4gdWdDbjtcblxufSkpKTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///48414\n")},48940:module=>{"use strict";eval("/**\n * Copyright (c) 2013-present, Facebook, Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * @typechecks\n * \n */\n\n/*eslint-disable no-self-compare */\n\n\n\nvar hasOwnProperty = Object.prototype.hasOwnProperty;\n\n/**\n * inlined Object.is polyfill to avoid requiring consumers ship their own\n * https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/is\n */\nfunction is(x, y) {\n // SameValue algorithm\n if (x === y) {\n // Steps 1-5, 7-10\n // Steps 6.b-6.e: +0 != -0\n // Added the nonzero y check to make Flow happy, but it is redundant\n return x !== 0 || y !== 0 || 1 / x === 1 / y;\n } else {\n // Step 6.a: NaN == NaN\n return x !== x && y !== y;\n }\n}\n\n/**\n * Performs equality by iterating through keys on an object and returning false\n * when any key has values which are not strictly equal between the arguments.\n * Returns true when the values of all keys are strictly equal.\n */\nfunction shallowEqual(objA, objB) {\n if (is(objA, objB)) {\n return true;\n }\n\n if (typeof objA !== 'object' || objA === null || typeof objB !== 'object' || objB === null) {\n return false;\n }\n\n var keysA = Object.keys(objA);\n var keysB = Object.keys(objB);\n\n if (keysA.length !== keysB.length) {\n return false;\n }\n\n // Test for A's keys different from B.\n for (var i = 0; i < keysA.length; i++) {\n if (!hasOwnProperty.call(objB, keysA[i]) || !is(objA[keysA[i]], objB[keysA[i]])) {\n return false;\n }\n }\n\n return true;\n}\n\nmodule.exports = shallowEqual;//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNDg5NDAuanMiLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL2l0Zy1uZXh0Z2VuLWZyb250ZW5kLy4vbm9kZV9tb2R1bGVzL2ZianMvbGliL3NoYWxsb3dFcXVhbC5qcz9hZjM1Il0sInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQ29weXJpZ2h0IChjKSAyMDEzLXByZXNlbnQsIEZhY2Vib29rLCBJbmMuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuXG4gKlxuICogQHR5cGVjaGVja3NcbiAqIFxuICovXG5cbi8qZXNsaW50LWRpc2FibGUgbm8tc2VsZi1jb21wYXJlICovXG5cbid1c2Ugc3RyaWN0JztcblxudmFyIGhhc093blByb3BlcnR5ID0gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eTtcblxuLyoqXG4gKiBpbmxpbmVkIE9iamVjdC5pcyBwb2x5ZmlsbCB0byBhdm9pZCByZXF1aXJpbmcgY29uc3VtZXJzIHNoaXAgdGhlaXIgb3duXG4gKiBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9KYXZhU2NyaXB0L1JlZmVyZW5jZS9HbG9iYWxfT2JqZWN0cy9PYmplY3QvaXNcbiAqL1xuZnVuY3Rpb24gaXMoeCwgeSkge1xuICAvLyBTYW1lVmFsdWUgYWxnb3JpdGhtXG4gIGlmICh4ID09PSB5KSB7XG4gICAgLy8gU3RlcHMgMS01LCA3LTEwXG4gICAgLy8gU3RlcHMgNi5iLTYuZTogKzAgIT0gLTBcbiAgICAvLyBBZGRlZCB0aGUgbm9uemVybyB5IGNoZWNrIHRvIG1ha2UgRmxvdyBoYXBweSwgYnV0IGl0IGlzIHJlZHVuZGFudFxuICAgIHJldHVybiB4ICE9PSAwIHx8IHkgIT09IDAgfHwgMSAvIHggPT09IDEgLyB5O1xuICB9IGVsc2Uge1xuICAgIC8vIFN0ZXAgNi5hOiBOYU4gPT0gTmFOXG4gICAgcmV0dXJuIHggIT09IHggJiYgeSAhPT0geTtcbiAgfVxufVxuXG4vKipcbiAqIFBlcmZvcm1zIGVxdWFsaXR5IGJ5IGl0ZXJhdGluZyB0aHJvdWdoIGtleXMgb24gYW4gb2JqZWN0IGFuZCByZXR1cm5pbmcgZmFsc2VcbiAqIHdoZW4gYW55IGtleSBoYXMgdmFsdWVzIHdoaWNoIGFyZSBub3Qgc3RyaWN0bHkgZXF1YWwgYmV0d2VlbiB0aGUgYXJndW1lbnRzLlxuICogUmV0dXJucyB0cnVlIHdoZW4gdGhlIHZhbHVlcyBvZiBhbGwga2V5cyBhcmUgc3RyaWN0bHkgZXF1YWwuXG4gKi9cbmZ1bmN0aW9uIHNoYWxsb3dFcXVhbChvYmpBLCBvYmpCKSB7XG4gIGlmIChpcyhvYmpBLCBvYmpCKSkge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgaWYgKHR5cGVvZiBvYmpBICE9PSAnb2JqZWN0JyB8fCBvYmpBID09PSBudWxsIHx8IHR5cGVvZiBvYmpCICE9PSAnb2JqZWN0JyB8fCBvYmpCID09PSBudWxsKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgdmFyIGtleXNBID0gT2JqZWN0LmtleXMob2JqQSk7XG4gIHZhciBrZXlzQiA9IE9iamVjdC5rZXlzKG9iakIpO1xuXG4gIGlmIChrZXlzQS5sZW5ndGggIT09IGtleXNCLmxlbmd0aCkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIC8vIFRlc3QgZm9yIEEncyBrZXlzIGRpZmZlcmVudCBmcm9tIEIuXG4gIGZvciAodmFyIGkgPSAwOyBpIDwga2V5c0EubGVuZ3RoOyBpKyspIHtcbiAgICBpZiAoIWhhc093blByb3BlcnR5LmNhbGwob2JqQiwga2V5c0FbaV0pIHx8ICFpcyhvYmpBW2tleXNBW2ldXSwgb2JqQltrZXlzQVtpXV0pKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHRydWU7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gc2hhbGxvd0VxdWFsOyJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///48940\n")},49102:(I,g,t)=>{"use strict";I.exports=t.p+"0ea1ecbd77e6d43dc4e2.png"},49641:module=>{eval('module.exports = {\n "version": "0.26.1"\n};//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNDk2NDEuanMiLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vaXRnLW5leHRnZW4tZnJvbnRlbmQvLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2Vudi9kYXRhLmpzPzVjY2UiXSwic291cmNlc0NvbnRlbnQiOlsibW9kdWxlLmV4cG9ydHMgPSB7XG4gIFwidmVyc2lvblwiOiBcIjAuMjYuMVwiXG59OyJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///49641\n')},50304:function(__unused_webpack_module,__unused_webpack_exports,__webpack_require__){eval("//! moment.js locale configuration\n//! locale : Chinese (Taiwan) [zh-tw]\n//! author : Ben : https://github.com/ben-lin\n//! author : Chris Lam : https://github.com/hehachris\n\n;(function (global, factory) {\n true ? factory(__webpack_require__(95093)) :\n 0\n}(this, (function (moment) { 'use strict';\n\n //! moment.js locale configuration\n\n var zhTw = moment.defineLocale('zh-tw', {\n months: '一月_二月_三月_四月_五月_六月_七月_八月_九月_十月_十一月_十二月'.split(\n '_'\n ),\n monthsShort: '1月_2月_3月_4月_5月_6月_7月_8月_9月_10月_11月_12月'.split(\n '_'\n ),\n weekdays: '星期日_星期一_星期二_星期三_星期四_星期五_星期六'.split('_'),\n weekdaysShort: '週日_週一_週二_週三_週四_週五_週六'.split('_'),\n weekdaysMin: '日_一_二_三_四_五_六'.split('_'),\n longDateFormat: {\n LT: 'HH:mm',\n LTS: 'HH:mm:ss',\n L: 'YYYY/MM/DD',\n LL: 'YYYY年M月D日',\n LLL: 'YYYY年M月D日 HH:mm',\n LLLL: 'YYYY年M月D日dddd HH:mm',\n l: 'YYYY/M/D',\n ll: 'YYYY年M月D日',\n lll: 'YYYY年M月D日 HH:mm',\n llll: 'YYYY年M月D日dddd HH:mm',\n },\n meridiemParse: /凌晨|早上|上午|中午|下午|晚上/,\n meridiemHour: function (hour, meridiem) {\n if (hour === 12) {\n hour = 0;\n }\n if (meridiem === '凌晨' || meridiem === '早上' || meridiem === '上午') {\n return hour;\n } else if (meridiem === '中午') {\n return hour >= 11 ? hour : hour + 12;\n } else if (meridiem === '下午' || meridiem === '晚上') {\n return hour + 12;\n }\n },\n meridiem: function (hour, minute, isLower) {\n var hm = hour * 100 + minute;\n if (hm < 600) {\n return '凌晨';\n } else if (hm < 900) {\n return '早上';\n } else if (hm < 1130) {\n return '上午';\n } else if (hm < 1230) {\n return '中午';\n } else if (hm < 1800) {\n return '下午';\n } else {\n return '晚上';\n }\n },\n calendar: {\n sameDay: '[今天] LT',\n nextDay: '[明天] LT',\n nextWeek: '[下]dddd LT',\n lastDay: '[昨天] LT',\n lastWeek: '[上]dddd LT',\n sameElse: 'L',\n },\n dayOfMonthOrdinalParse: /\\d{1,2}(日|月|週)/,\n ordinal: function (number, period) {\n switch (period) {\n case 'd':\n case 'D':\n case 'DDD':\n return number + '日';\n case 'M':\n return number + '月';\n case 'w':\n case 'W':\n return number + '週';\n default:\n return number;\n }\n },\n relativeTime: {\n future: '%s後',\n past: '%s前',\n s: '幾秒',\n ss: '%d 秒',\n m: '1 分鐘',\n mm: '%d 分鐘',\n h: '1 小時',\n hh: '%d 小時',\n d: '1 天',\n dd: '%d 天',\n M: '1 個月',\n MM: '%d 個月',\n y: '1 年',\n yy: '%d 年',\n },\n });\n\n return zhTw;\n\n})));\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNTAzMDQuanMiLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vaXRnLW5leHRnZW4tZnJvbnRlbmQvLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS96aC10dy5qcz85MGVhIl0sInNvdXJjZXNDb250ZW50IjpbIi8vISBtb21lbnQuanMgbG9jYWxlIGNvbmZpZ3VyYXRpb25cbi8vISBsb2NhbGUgOiBDaGluZXNlIChUYWl3YW4pIFt6aC10d11cbi8vISBhdXRob3IgOiBCZW4gOiBodHRwczovL2dpdGh1Yi5jb20vYmVuLWxpblxuLy8hIGF1dGhvciA6IENocmlzIExhbSA6IGh0dHBzOi8vZ2l0aHViLmNvbS9oZWhhY2hyaXNcblxuOyhmdW5jdGlvbiAoZ2xvYmFsLCBmYWN0b3J5KSB7XG4gICB0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcgJiYgdHlwZW9mIG1vZHVsZSAhPT0gJ3VuZGVmaW5lZCdcbiAgICAgICAmJiB0eXBlb2YgcmVxdWlyZSA9PT0gJ2Z1bmN0aW9uJyA/IGZhY3RvcnkocmVxdWlyZSgnLi4vbW9tZW50JykpIDpcbiAgIHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgZGVmaW5lLmFtZCA/IGRlZmluZShbJy4uL21vbWVudCddLCBmYWN0b3J5KSA6XG4gICBmYWN0b3J5KGdsb2JhbC5tb21lbnQpXG59KHRoaXMsIChmdW5jdGlvbiAobW9tZW50KSB7ICd1c2Ugc3RyaWN0JztcblxuICAgIC8vISBtb21lbnQuanMgbG9jYWxlIGNvbmZpZ3VyYXRpb25cblxuICAgIHZhciB6aFR3ID0gbW9tZW50LmRlZmluZUxvY2FsZSgnemgtdHcnLCB7XG4gICAgICAgIG1vbnRoczogJ+S4gOaciF/kuozmnIhf5LiJ5pyIX+Wbm+aciF/kupTmnIhf5YWt5pyIX+S4g+aciF/lhavmnIhf5Lmd5pyIX+WNgeaciF/ljYHkuIDmnIhf5Y2B5LqM5pyIJy5zcGxpdChcbiAgICAgICAgICAgICdfJ1xuICAgICAgICApLFxuICAgICAgICBtb250aHNTaG9ydDogJzHmnIhfMuaciF8z5pyIXzTmnIhfNeaciF825pyIXzfmnIhfOOaciF855pyIXzEw5pyIXzEx5pyIXzEy5pyIJy5zcGxpdChcbiAgICAgICAgICAgICdfJ1xuICAgICAgICApLFxuICAgICAgICB3ZWVrZGF5czogJ+aYn+acn+aXpV/mmJ/mnJ/kuIBf5pif5pyf5LqMX+aYn+acn+S4iV/mmJ/mnJ/lm5tf5pif5pyf5LqUX+aYn+acn+WFrScuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXNTaG9ydDogJ+mAseaXpV/pgLHkuIBf6YCx5LqMX+mAseS4iV/pgLHlm5tf6YCx5LqUX+mAseWFrScuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXNNaW46ICfml6Vf5LiAX+S6jF/kuIlf5ZubX+S6lF/lha0nLnNwbGl0KCdfJyksXG4gICAgICAgIGxvbmdEYXRlRm9ybWF0OiB7XG4gICAgICAgICAgICBMVDogJ0hIOm1tJyxcbiAgICAgICAgICAgIExUUzogJ0hIOm1tOnNzJyxcbiAgICAgICAgICAgIEw6ICdZWVlZL01NL0REJyxcbiAgICAgICAgICAgIExMOiAnWVlZWeW5tE3mnIhE5pelJyxcbiAgICAgICAgICAgIExMTDogJ1lZWVnlubRN5pyIROaXpSBISDptbScsXG4gICAgICAgICAgICBMTExMOiAnWVlZWeW5tE3mnIhE5pelZGRkZCBISDptbScsXG4gICAgICAgICAgICBsOiAnWVlZWS9NL0QnLFxuICAgICAgICAgICAgbGw6ICdZWVlZ5bm0TeaciETml6UnLFxuICAgICAgICAgICAgbGxsOiAnWVlZWeW5tE3mnIhE5pelIEhIOm1tJyxcbiAgICAgICAgICAgIGxsbGw6ICdZWVlZ5bm0TeaciETml6VkZGRkIEhIOm1tJyxcbiAgICAgICAgfSxcbiAgICAgICAgbWVyaWRpZW1QYXJzZTogL+WHjOaZqHzml6nkuIp85LiK5Y2IfOS4reWNiHzkuIvljYh85pma5LiKLyxcbiAgICAgICAgbWVyaWRpZW1Ib3VyOiBmdW5jdGlvbiAoaG91ciwgbWVyaWRpZW0pIHtcbiAgICAgICAgICAgIGlmIChob3VyID09PSAxMikge1xuICAgICAgICAgICAgICAgIGhvdXIgPSAwO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKG1lcmlkaWVtID09PSAn5YeM5pmoJyB8fCBtZXJpZGllbSA9PT0gJ+aXqeS4iicgfHwgbWVyaWRpZW0gPT09ICfkuIrljYgnKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGhvdXI7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKG1lcmlkaWVtID09PSAn5Lit5Y2IJykge1xuICAgICAgICAgICAgICAgIHJldHVybiBob3VyID49IDExID8gaG91ciA6IGhvdXIgKyAxMjtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAobWVyaWRpZW0gPT09ICfkuIvljYgnIHx8IG1lcmlkaWVtID09PSAn5pma5LiKJykge1xuICAgICAgICAgICAgICAgIHJldHVybiBob3VyICsgMTI7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIG1lcmlkaWVtOiBmdW5jdGlvbiAoaG91ciwgbWludXRlLCBpc0xvd2VyKSB7XG4gICAgICAgICAgICB2YXIgaG0gPSBob3VyICogMTAwICsgbWludXRlO1xuICAgICAgICAgICAgaWYgKGhtIDwgNjAwKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuICflh4zmmagnO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChobSA8IDkwMCkge1xuICAgICAgICAgICAgICAgIHJldHVybiAn5pep5LiKJztcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoaG0gPCAxMTMwKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuICfkuIrljYgnO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChobSA8IDEyMzApIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gJ+S4reWNiCc7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGhtIDwgMTgwMCkge1xuICAgICAgICAgICAgICAgIHJldHVybiAn5LiL5Y2IJztcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuICfmmZrkuIonO1xuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBjYWxlbmRhcjoge1xuICAgICAgICAgICAgc2FtZURheTogJ1vku4rlpKldIExUJyxcbiAgICAgICAgICAgIG5leHREYXk6ICdb5piO5aSpXSBMVCcsXG4gICAgICAgICAgICBuZXh0V2VlazogJ1vkuItdZGRkZCBMVCcsXG4gICAgICAgICAgICBsYXN0RGF5OiAnW+aYqOWkqV0gTFQnLFxuICAgICAgICAgICAgbGFzdFdlZWs6ICdb5LiKXWRkZGQgTFQnLFxuICAgICAgICAgICAgc2FtZUVsc2U6ICdMJyxcbiAgICAgICAgfSxcbiAgICAgICAgZGF5T2ZNb250aE9yZGluYWxQYXJzZTogL1xcZHsxLDJ9KOaXpXzmnIh86YCxKS8sXG4gICAgICAgIG9yZGluYWw6IGZ1bmN0aW9uIChudW1iZXIsIHBlcmlvZCkge1xuICAgICAgICAgICAgc3dpdGNoIChwZXJpb2QpIHtcbiAgICAgICAgICAgICAgICBjYXNlICdkJzpcbiAgICAgICAgICAgICAgICBjYXNlICdEJzpcbiAgICAgICAgICAgICAgICBjYXNlICdEREQnOlxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gbnVtYmVyICsgJ+aXpSc7XG4gICAgICAgICAgICAgICAgY2FzZSAnTSc6XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBudW1iZXIgKyAn5pyIJztcbiAgICAgICAgICAgICAgICBjYXNlICd3JzpcbiAgICAgICAgICAgICAgICBjYXNlICdXJzpcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG51bWJlciArICfpgLEnO1xuICAgICAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBudW1iZXI7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIHJlbGF0aXZlVGltZToge1xuICAgICAgICAgICAgZnV0dXJlOiAnJXPlvownLFxuICAgICAgICAgICAgcGFzdDogJyVz5YmNJyxcbiAgICAgICAgICAgIHM6ICflub7np5InLFxuICAgICAgICAgICAgc3M6ICclZCDnp5InLFxuICAgICAgICAgICAgbTogJzEg5YiG6ZCYJyxcbiAgICAgICAgICAgIG1tOiAnJWQg5YiG6ZCYJyxcbiAgICAgICAgICAgIGg6ICcxIOWwj+aZgicsXG4gICAgICAgICAgICBoaDogJyVkIOWwj+aZgicsXG4gICAgICAgICAgICBkOiAnMSDlpKknLFxuICAgICAgICAgICAgZGQ6ICclZCDlpKknLFxuICAgICAgICAgICAgTTogJzEg5YCL5pyIJyxcbiAgICAgICAgICAgIE1NOiAnJWQg5YCL5pyIJyxcbiAgICAgICAgICAgIHk6ICcxIOW5tCcsXG4gICAgICAgICAgICB5eTogJyVkIOW5tCcsXG4gICAgICAgIH0sXG4gICAgfSk7XG5cbiAgICByZXR1cm4gemhUdztcblxufSkpKTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///50304\n")},50565:(I,g,t)=>{"use strict";I.exports=t.p+"c63ad14eca5de87de9e1.png"},50771:(I,g,t)=>{"use strict";I.exports=t.p+"18d83be2b03ec5bd84c6.png"},51025:function(module,exports,__webpack_require__){eval(";(function (root, factory) {\n\tif (true) {\n\t\t// CommonJS\n\t\tmodule.exports = exports = factory(__webpack_require__(19021));\n\t}\n\telse {}\n}(this, function (CryptoJS) {\n\n\t(function () {\n\t // Shortcuts\n\t var C = CryptoJS;\n\t var C_lib = C.lib;\n\t var Base = C_lib.Base;\n\t var C_enc = C.enc;\n\t var Utf8 = C_enc.Utf8;\n\t var C_algo = C.algo;\n\n\t /**\n\t * HMAC algorithm.\n\t */\n\t var HMAC = C_algo.HMAC = Base.extend({\n\t /**\n\t * Initializes a newly created HMAC.\n\t *\n\t * @param {Hasher} hasher The hash algorithm to use.\n\t * @param {WordArray|string} key The secret key.\n\t *\n\t * @example\n\t *\n\t * var hmacHasher = CryptoJS.algo.HMAC.create(CryptoJS.algo.SHA256, key);\n\t */\n\t init: function (hasher, key) {\n\t // Init hasher\n\t hasher = this._hasher = new hasher.init();\n\n\t // Convert string to WordArray, else assume WordArray already\n\t if (typeof key == 'string') {\n\t key = Utf8.parse(key);\n\t }\n\n\t // Shortcuts\n\t var hasherBlockSize = hasher.blockSize;\n\t var hasherBlockSizeBytes = hasherBlockSize * 4;\n\n\t // Allow arbitrary length keys\n\t if (key.sigBytes > hasherBlockSizeBytes) {\n\t key = hasher.finalize(key);\n\t }\n\n\t // Clamp excess bits\n\t key.clamp();\n\n\t // Clone key for inner and outer pads\n\t var oKey = this._oKey = key.clone();\n\t var iKey = this._iKey = key.clone();\n\n\t // Shortcuts\n\t var oKeyWords = oKey.words;\n\t var iKeyWords = iKey.words;\n\n\t // XOR keys with pad constants\n\t for (var i = 0; i < hasherBlockSize; i++) {\n\t oKeyWords[i] ^= 0x5c5c5c5c;\n\t iKeyWords[i] ^= 0x36363636;\n\t }\n\t oKey.sigBytes = iKey.sigBytes = hasherBlockSizeBytes;\n\n\t // Set initial values\n\t this.reset();\n\t },\n\n\t /**\n\t * Resets this HMAC to its initial state.\n\t *\n\t * @example\n\t *\n\t * hmacHasher.reset();\n\t */\n\t reset: function () {\n\t // Shortcut\n\t var hasher = this._hasher;\n\n\t // Reset\n\t hasher.reset();\n\t hasher.update(this._iKey);\n\t },\n\n\t /**\n\t * Updates this HMAC with a message.\n\t *\n\t * @param {WordArray|string} messageUpdate The message to append.\n\t *\n\t * @return {HMAC} This HMAC instance.\n\t *\n\t * @example\n\t *\n\t * hmacHasher.update('message');\n\t * hmacHasher.update(wordArray);\n\t */\n\t update: function (messageUpdate) {\n\t this._hasher.update(messageUpdate);\n\n\t // Chainable\n\t return this;\n\t },\n\n\t /**\n\t * Finalizes the HMAC computation.\n\t * Note that the finalize operation is effectively a destructive, read-once operation.\n\t *\n\t * @param {WordArray|string} messageUpdate (Optional) A final message update.\n\t *\n\t * @return {WordArray} The HMAC.\n\t *\n\t * @example\n\t *\n\t * var hmac = hmacHasher.finalize();\n\t * var hmac = hmacHasher.finalize('message');\n\t * var hmac = hmacHasher.finalize(wordArray);\n\t */\n\t finalize: function (messageUpdate) {\n\t // Shortcut\n\t var hasher = this._hasher;\n\n\t // Compute HMAC\n\t var innerHash = hasher.finalize(messageUpdate);\n\t hasher.reset();\n\t var hmac = hasher.finalize(this._oKey.clone().concat(innerHash));\n\n\t return hmac;\n\t }\n\t });\n\t}());\n\n\n}));//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNTEwMjUuanMiLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBUUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9pdGctbmV4dGdlbi1mcm9udGVuZC8uL25vZGVfbW9kdWxlcy9jcnlwdG8tanMvaG1hYy5qcz81OTgwIl0sInNvdXJjZXNDb250ZW50IjpbIjsoZnVuY3Rpb24gKHJvb3QsIGZhY3RvcnkpIHtcblx0aWYgKHR5cGVvZiBleHBvcnRzID09PSBcIm9iamVjdFwiKSB7XG5cdFx0Ly8gQ29tbW9uSlNcblx0XHRtb2R1bGUuZXhwb3J0cyA9IGV4cG9ydHMgPSBmYWN0b3J5KHJlcXVpcmUoXCIuL2NvcmVcIikpO1xuXHR9XG5cdGVsc2UgaWYgKHR5cGVvZiBkZWZpbmUgPT09IFwiZnVuY3Rpb25cIiAmJiBkZWZpbmUuYW1kKSB7XG5cdFx0Ly8gQU1EXG5cdFx0ZGVmaW5lKFtcIi4vY29yZVwiXSwgZmFjdG9yeSk7XG5cdH1cblx0ZWxzZSB7XG5cdFx0Ly8gR2xvYmFsIChicm93c2VyKVxuXHRcdGZhY3Rvcnkocm9vdC5DcnlwdG9KUyk7XG5cdH1cbn0odGhpcywgZnVuY3Rpb24gKENyeXB0b0pTKSB7XG5cblx0KGZ1bmN0aW9uICgpIHtcblx0ICAgIC8vIFNob3J0Y3V0c1xuXHQgICAgdmFyIEMgPSBDcnlwdG9KUztcblx0ICAgIHZhciBDX2xpYiA9IEMubGliO1xuXHQgICAgdmFyIEJhc2UgPSBDX2xpYi5CYXNlO1xuXHQgICAgdmFyIENfZW5jID0gQy5lbmM7XG5cdCAgICB2YXIgVXRmOCA9IENfZW5jLlV0Zjg7XG5cdCAgICB2YXIgQ19hbGdvID0gQy5hbGdvO1xuXG5cdCAgICAvKipcblx0ICAgICAqIEhNQUMgYWxnb3JpdGhtLlxuXHQgICAgICovXG5cdCAgICB2YXIgSE1BQyA9IENfYWxnby5ITUFDID0gQmFzZS5leHRlbmQoe1xuXHQgICAgICAgIC8qKlxuXHQgICAgICAgICAqIEluaXRpYWxpemVzIGEgbmV3bHkgY3JlYXRlZCBITUFDLlxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogQHBhcmFtIHtIYXNoZXJ9IGhhc2hlciBUaGUgaGFzaCBhbGdvcml0aG0gdG8gdXNlLlxuXHQgICAgICAgICAqIEBwYXJhbSB7V29yZEFycmF5fHN0cmluZ30ga2V5IFRoZSBzZWNyZXQga2V5LlxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogQGV4YW1wbGVcblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqICAgICB2YXIgaG1hY0hhc2hlciA9IENyeXB0b0pTLmFsZ28uSE1BQy5jcmVhdGUoQ3J5cHRvSlMuYWxnby5TSEEyNTYsIGtleSk7XG5cdCAgICAgICAgICovXG5cdCAgICAgICAgaW5pdDogZnVuY3Rpb24gKGhhc2hlciwga2V5KSB7XG5cdCAgICAgICAgICAgIC8vIEluaXQgaGFzaGVyXG5cdCAgICAgICAgICAgIGhhc2hlciA9IHRoaXMuX2hhc2hlciA9IG5ldyBoYXNoZXIuaW5pdCgpO1xuXG5cdCAgICAgICAgICAgIC8vIENvbnZlcnQgc3RyaW5nIHRvIFdvcmRBcnJheSwgZWxzZSBhc3N1bWUgV29yZEFycmF5IGFscmVhZHlcblx0ICAgICAgICAgICAgaWYgKHR5cGVvZiBrZXkgPT0gJ3N0cmluZycpIHtcblx0ICAgICAgICAgICAgICAgIGtleSA9IFV0ZjgucGFyc2Uoa2V5KTtcblx0ICAgICAgICAgICAgfVxuXG5cdCAgICAgICAgICAgIC8vIFNob3J0Y3V0c1xuXHQgICAgICAgICAgICB2YXIgaGFzaGVyQmxvY2tTaXplID0gaGFzaGVyLmJsb2NrU2l6ZTtcblx0ICAgICAgICAgICAgdmFyIGhhc2hlckJsb2NrU2l6ZUJ5dGVzID0gaGFzaGVyQmxvY2tTaXplICogNDtcblxuXHQgICAgICAgICAgICAvLyBBbGxvdyBhcmJpdHJhcnkgbGVuZ3RoIGtleXNcblx0ICAgICAgICAgICAgaWYgKGtleS5zaWdCeXRlcyA+IGhhc2hlckJsb2NrU2l6ZUJ5dGVzKSB7XG5cdCAgICAgICAgICAgICAgICBrZXkgPSBoYXNoZXIuZmluYWxpemUoa2V5KTtcblx0ICAgICAgICAgICAgfVxuXG5cdCAgICAgICAgICAgIC8vIENsYW1wIGV4Y2VzcyBiaXRzXG5cdCAgICAgICAgICAgIGtleS5jbGFtcCgpO1xuXG5cdCAgICAgICAgICAgIC8vIENsb25lIGtleSBmb3IgaW5uZXIgYW5kIG91dGVyIHBhZHNcblx0ICAgICAgICAgICAgdmFyIG9LZXkgPSB0aGlzLl9vS2V5ID0ga2V5LmNsb25lKCk7XG5cdCAgICAgICAgICAgIHZhciBpS2V5ID0gdGhpcy5faUtleSA9IGtleS5jbG9uZSgpO1xuXG5cdCAgICAgICAgICAgIC8vIFNob3J0Y3V0c1xuXHQgICAgICAgICAgICB2YXIgb0tleVdvcmRzID0gb0tleS53b3Jkcztcblx0ICAgICAgICAgICAgdmFyIGlLZXlXb3JkcyA9IGlLZXkud29yZHM7XG5cblx0ICAgICAgICAgICAgLy8gWE9SIGtleXMgd2l0aCBwYWQgY29uc3RhbnRzXG5cdCAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgaGFzaGVyQmxvY2tTaXplOyBpKyspIHtcblx0ICAgICAgICAgICAgICAgIG9LZXlXb3Jkc1tpXSBePSAweDVjNWM1YzVjO1xuXHQgICAgICAgICAgICAgICAgaUtleVdvcmRzW2ldIF49IDB4MzYzNjM2MzY7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgb0tleS5zaWdCeXRlcyA9IGlLZXkuc2lnQnl0ZXMgPSBoYXNoZXJCbG9ja1NpemVCeXRlcztcblxuXHQgICAgICAgICAgICAvLyBTZXQgaW5pdGlhbCB2YWx1ZXNcblx0ICAgICAgICAgICAgdGhpcy5yZXNldCgpO1xuXHQgICAgICAgIH0sXG5cblx0ICAgICAgICAvKipcblx0ICAgICAgICAgKiBSZXNldHMgdGhpcyBITUFDIHRvIGl0cyBpbml0aWFsIHN0YXRlLlxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogQGV4YW1wbGVcblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqICAgICBobWFjSGFzaGVyLnJlc2V0KCk7XG5cdCAgICAgICAgICovXG5cdCAgICAgICAgcmVzZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgLy8gU2hvcnRjdXRcblx0ICAgICAgICAgICAgdmFyIGhhc2hlciA9IHRoaXMuX2hhc2hlcjtcblxuXHQgICAgICAgICAgICAvLyBSZXNldFxuXHQgICAgICAgICAgICBoYXNoZXIucmVzZXQoKTtcblx0ICAgICAgICAgICAgaGFzaGVyLnVwZGF0ZSh0aGlzLl9pS2V5KTtcblx0ICAgICAgICB9LFxuXG5cdCAgICAgICAgLyoqXG5cdCAgICAgICAgICogVXBkYXRlcyB0aGlzIEhNQUMgd2l0aCBhIG1lc3NhZ2UuXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAcGFyYW0ge1dvcmRBcnJheXxzdHJpbmd9IG1lc3NhZ2VVcGRhdGUgVGhlIG1lc3NhZ2UgdG8gYXBwZW5kLlxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogQHJldHVybiB7SE1BQ30gVGhpcyBITUFDIGluc3RhbmNlLlxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogQGV4YW1wbGVcblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqICAgICBobWFjSGFzaGVyLnVwZGF0ZSgnbWVzc2FnZScpO1xuXHQgICAgICAgICAqICAgICBobWFjSGFzaGVyLnVwZGF0ZSh3b3JkQXJyYXkpO1xuXHQgICAgICAgICAqL1xuXHQgICAgICAgIHVwZGF0ZTogZnVuY3Rpb24gKG1lc3NhZ2VVcGRhdGUpIHtcblx0ICAgICAgICAgICAgdGhpcy5faGFzaGVyLnVwZGF0ZShtZXNzYWdlVXBkYXRlKTtcblxuXHQgICAgICAgICAgICAvLyBDaGFpbmFibGVcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICAgICAgfSxcblxuXHQgICAgICAgIC8qKlxuXHQgICAgICAgICAqIEZpbmFsaXplcyB0aGUgSE1BQyBjb21wdXRhdGlvbi5cblx0ICAgICAgICAgKiBOb3RlIHRoYXQgdGhlIGZpbmFsaXplIG9wZXJhdGlvbiBpcyBlZmZlY3RpdmVseSBhIGRlc3RydWN0aXZlLCByZWFkLW9uY2Ugb3BlcmF0aW9uLlxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogQHBhcmFtIHtXb3JkQXJyYXl8c3RyaW5nfSBtZXNzYWdlVXBkYXRlIChPcHRpb25hbCkgQSBmaW5hbCBtZXNzYWdlIHVwZGF0ZS5cblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqIEByZXR1cm4ge1dvcmRBcnJheX0gVGhlIEhNQUMuXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAZXhhbXBsZVxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogICAgIHZhciBobWFjID0gaG1hY0hhc2hlci5maW5hbGl6ZSgpO1xuXHQgICAgICAgICAqICAgICB2YXIgaG1hYyA9IGhtYWNIYXNoZXIuZmluYWxpemUoJ21lc3NhZ2UnKTtcblx0ICAgICAgICAgKiAgICAgdmFyIGhtYWMgPSBobWFjSGFzaGVyLmZpbmFsaXplKHdvcmRBcnJheSk7XG5cdCAgICAgICAgICovXG5cdCAgICAgICAgZmluYWxpemU6IGZ1bmN0aW9uIChtZXNzYWdlVXBkYXRlKSB7XG5cdCAgICAgICAgICAgIC8vIFNob3J0Y3V0XG5cdCAgICAgICAgICAgIHZhciBoYXNoZXIgPSB0aGlzLl9oYXNoZXI7XG5cblx0ICAgICAgICAgICAgLy8gQ29tcHV0ZSBITUFDXG5cdCAgICAgICAgICAgIHZhciBpbm5lckhhc2ggPSBoYXNoZXIuZmluYWxpemUobWVzc2FnZVVwZGF0ZSk7XG5cdCAgICAgICAgICAgIGhhc2hlci5yZXNldCgpO1xuXHQgICAgICAgICAgICB2YXIgaG1hYyA9IGhhc2hlci5maW5hbGl6ZSh0aGlzLl9vS2V5LmNsb25lKCkuY29uY2F0KGlubmVySGFzaCkpO1xuXG5cdCAgICAgICAgICAgIHJldHVybiBobWFjO1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHR9KCkpO1xuXG5cbn0pKTsiXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///51025\n")},51242:function(__unused_webpack_module,__unused_webpack_exports,__webpack_require__){eval("//! moment.js locale configuration\n//! locale : Tetun Dili (East Timor) [tet]\n//! author : Joshua Brooks : https://github.com/joshbrooks\n//! author : Onorio De J. Afonso : https://github.com/marobo\n//! author : Sonia Simoes : https://github.com/soniasimoes\n\n;(function (global, factory) {\n true ? factory(__webpack_require__(95093)) :\n 0\n}(this, (function (moment) { 'use strict';\n\n //! moment.js locale configuration\n\n var tet = moment.defineLocale('tet', {\n months: 'Janeiru_Fevereiru_Marsu_Abril_Maiu_Juñu_Jullu_Agustu_Setembru_Outubru_Novembru_Dezembru'.split(\n '_'\n ),\n monthsShort: 'Jan_Fev_Mar_Abr_Mai_Jun_Jul_Ago_Set_Out_Nov_Dez'.split('_'),\n weekdays: 'Domingu_Segunda_Tersa_Kuarta_Kinta_Sesta_Sabadu'.split('_'),\n weekdaysShort: 'Dom_Seg_Ters_Kua_Kint_Sest_Sab'.split('_'),\n weekdaysMin: 'Do_Seg_Te_Ku_Ki_Ses_Sa'.split('_'),\n longDateFormat: {\n LT: 'HH:mm',\n LTS: 'HH:mm:ss',\n L: 'DD/MM/YYYY',\n LL: 'D MMMM YYYY',\n LLL: 'D MMMM YYYY HH:mm',\n LLLL: 'dddd, D MMMM YYYY HH:mm',\n },\n calendar: {\n sameDay: '[Ohin iha] LT',\n nextDay: '[Aban iha] LT',\n nextWeek: 'dddd [iha] LT',\n lastDay: '[Horiseik iha] LT',\n lastWeek: 'dddd [semana kotuk] [iha] LT',\n sameElse: 'L',\n },\n relativeTime: {\n future: 'iha %s',\n past: '%s liuba',\n s: 'segundu balun',\n ss: 'segundu %d',\n m: 'minutu ida',\n mm: 'minutu %d',\n h: 'oras ida',\n hh: 'oras %d',\n d: 'loron ida',\n dd: 'loron %d',\n M: 'fulan ida',\n MM: 'fulan %d',\n y: 'tinan ida',\n yy: 'tinan %d',\n },\n dayOfMonthOrdinalParse: /\\d{1,2}(st|nd|rd|th)/,\n ordinal: function (number) {\n var b = number % 10,\n output =\n ~~((number % 100) / 10) === 1\n ? 'th'\n : b === 1\n ? 'st'\n : b === 2\n ? 'nd'\n : b === 3\n ? 'rd'\n : 'th';\n return number + output;\n },\n week: {\n dow: 1, // Monday is the first day of the week.\n doy: 4, // The week that contains Jan 4th is the first week of the year.\n },\n });\n\n return tet;\n\n})));\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNTEyNDIuanMiLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL2l0Zy1uZXh0Z2VuLWZyb250ZW5kLy4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvdGV0LmpzPzU3NmMiXSwic291cmNlc0NvbnRlbnQiOlsiLy8hIG1vbWVudC5qcyBsb2NhbGUgY29uZmlndXJhdGlvblxuLy8hIGxvY2FsZSA6IFRldHVuIERpbGkgKEVhc3QgVGltb3IpIFt0ZXRdXG4vLyEgYXV0aG9yIDogSm9zaHVhIEJyb29rcyA6IGh0dHBzOi8vZ2l0aHViLmNvbS9qb3NoYnJvb2tzXG4vLyEgYXV0aG9yIDogT25vcmlvIERlIEouIEFmb25zbyA6IGh0dHBzOi8vZ2l0aHViLmNvbS9tYXJvYm9cbi8vISBhdXRob3IgOiBTb25pYSBTaW1vZXMgOiBodHRwczovL2dpdGh1Yi5jb20vc29uaWFzaW1vZXNcblxuOyhmdW5jdGlvbiAoZ2xvYmFsLCBmYWN0b3J5KSB7XG4gICB0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcgJiYgdHlwZW9mIG1vZHVsZSAhPT0gJ3VuZGVmaW5lZCdcbiAgICAgICAmJiB0eXBlb2YgcmVxdWlyZSA9PT0gJ2Z1bmN0aW9uJyA/IGZhY3RvcnkocmVxdWlyZSgnLi4vbW9tZW50JykpIDpcbiAgIHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgZGVmaW5lLmFtZCA/IGRlZmluZShbJy4uL21vbWVudCddLCBmYWN0b3J5KSA6XG4gICBmYWN0b3J5KGdsb2JhbC5tb21lbnQpXG59KHRoaXMsIChmdW5jdGlvbiAobW9tZW50KSB7ICd1c2Ugc3RyaWN0JztcblxuICAgIC8vISBtb21lbnQuanMgbG9jYWxlIGNvbmZpZ3VyYXRpb25cblxuICAgIHZhciB0ZXQgPSBtb21lbnQuZGVmaW5lTG9jYWxlKCd0ZXQnLCB7XG4gICAgICAgIG1vbnRoczogJ0phbmVpcnVfRmV2ZXJlaXJ1X01hcnN1X0FicmlsX01haXVfSnXDsXVfSnVsbHVfQWd1c3R1X1NldGVtYnJ1X091dHVicnVfTm92ZW1icnVfRGV6ZW1icnUnLnNwbGl0KFxuICAgICAgICAgICAgJ18nXG4gICAgICAgICksXG4gICAgICAgIG1vbnRoc1Nob3J0OiAnSmFuX0Zldl9NYXJfQWJyX01haV9KdW5fSnVsX0Fnb19TZXRfT3V0X05vdl9EZXonLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzOiAnRG9taW5ndV9TZWd1bmRhX1RlcnNhX0t1YXJ0YV9LaW50YV9TZXN0YV9TYWJhZHUnLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzU2hvcnQ6ICdEb21fU2VnX1RlcnNfS3VhX0tpbnRfU2VzdF9TYWInLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzTWluOiAnRG9fU2VnX1RlX0t1X0tpX1Nlc19TYScuc3BsaXQoJ18nKSxcbiAgICAgICAgbG9uZ0RhdGVGb3JtYXQ6IHtcbiAgICAgICAgICAgIExUOiAnSEg6bW0nLFxuICAgICAgICAgICAgTFRTOiAnSEg6bW06c3MnLFxuICAgICAgICAgICAgTDogJ0REL01NL1lZWVknLFxuICAgICAgICAgICAgTEw6ICdEIE1NTU0gWVlZWScsXG4gICAgICAgICAgICBMTEw6ICdEIE1NTU0gWVlZWSBISDptbScsXG4gICAgICAgICAgICBMTExMOiAnZGRkZCwgRCBNTU1NIFlZWVkgSEg6bW0nLFxuICAgICAgICB9LFxuICAgICAgICBjYWxlbmRhcjoge1xuICAgICAgICAgICAgc2FtZURheTogJ1tPaGluIGloYV0gTFQnLFxuICAgICAgICAgICAgbmV4dERheTogJ1tBYmFuIGloYV0gTFQnLFxuICAgICAgICAgICAgbmV4dFdlZWs6ICdkZGRkIFtpaGFdIExUJyxcbiAgICAgICAgICAgIGxhc3REYXk6ICdbSG9yaXNlaWsgaWhhXSBMVCcsXG4gICAgICAgICAgICBsYXN0V2VlazogJ2RkZGQgW3NlbWFuYSBrb3R1a10gW2loYV0gTFQnLFxuICAgICAgICAgICAgc2FtZUVsc2U6ICdMJyxcbiAgICAgICAgfSxcbiAgICAgICAgcmVsYXRpdmVUaW1lOiB7XG4gICAgICAgICAgICBmdXR1cmU6ICdpaGEgJXMnLFxuICAgICAgICAgICAgcGFzdDogJyVzIGxpdWJhJyxcbiAgICAgICAgICAgIHM6ICdzZWd1bmR1IGJhbHVuJyxcbiAgICAgICAgICAgIHNzOiAnc2VndW5kdSAlZCcsXG4gICAgICAgICAgICBtOiAnbWludXR1IGlkYScsXG4gICAgICAgICAgICBtbTogJ21pbnV0dSAlZCcsXG4gICAgICAgICAgICBoOiAnb3JhcyBpZGEnLFxuICAgICAgICAgICAgaGg6ICdvcmFzICVkJyxcbiAgICAgICAgICAgIGQ6ICdsb3JvbiBpZGEnLFxuICAgICAgICAgICAgZGQ6ICdsb3JvbiAlZCcsXG4gICAgICAgICAgICBNOiAnZnVsYW4gaWRhJyxcbiAgICAgICAgICAgIE1NOiAnZnVsYW4gJWQnLFxuICAgICAgICAgICAgeTogJ3RpbmFuIGlkYScsXG4gICAgICAgICAgICB5eTogJ3RpbmFuICVkJyxcbiAgICAgICAgfSxcbiAgICAgICAgZGF5T2ZNb250aE9yZGluYWxQYXJzZTogL1xcZHsxLDJ9KHN0fG5kfHJkfHRoKS8sXG4gICAgICAgIG9yZGluYWw6IGZ1bmN0aW9uIChudW1iZXIpIHtcbiAgICAgICAgICAgIHZhciBiID0gbnVtYmVyICUgMTAsXG4gICAgICAgICAgICAgICAgb3V0cHV0ID1cbiAgICAgICAgICAgICAgICAgICAgfn4oKG51bWJlciAlIDEwMCkgLyAxMCkgPT09IDFcbiAgICAgICAgICAgICAgICAgICAgICAgID8gJ3RoJ1xuICAgICAgICAgICAgICAgICAgICAgICAgOiBiID09PSAxXG4gICAgICAgICAgICAgICAgICAgICAgICAgID8gJ3N0J1xuICAgICAgICAgICAgICAgICAgICAgICAgICA6IGIgPT09IDJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA/ICduZCdcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IGIgPT09IDNcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gJ3JkJ1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiAndGgnO1xuICAgICAgICAgICAgcmV0dXJuIG51bWJlciArIG91dHB1dDtcbiAgICAgICAgfSxcbiAgICAgICAgd2Vlazoge1xuICAgICAgICAgICAgZG93OiAxLCAvLyBNb25kYXkgaXMgdGhlIGZpcnN0IGRheSBvZiB0aGUgd2Vlay5cbiAgICAgICAgICAgIGRveTogNCwgLy8gVGhlIHdlZWsgdGhhdCBjb250YWlucyBKYW4gNHRoIGlzIHRoZSBmaXJzdCB3ZWVrIG9mIHRoZSB5ZWFyLlxuICAgICAgICB9LFxuICAgIH0pO1xuXG4gICAgcmV0dXJuIHRldDtcblxufSkpKTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///51242\n")},51322:(I,g,t)=>{"use strict";I.exports=t.p+"d3ae638df74435783f15.png"},51877:(I,g,t)=>{"use strict";I.exports=t.p+"e7ce38c9e882173fe649.png"},51930:(I,g,t)=>{"use strict";I.exports=t.p+"d57f3368d668fb9a811b.png"},52015:(I,g,t)=>{"use strict";I.exports=t.p+"01692b56d103df5b83bf.png"},52155:function(module,exports,__webpack_require__){eval(";(function (root, factory, undef) {\n\tif (true) {\n\t\t// CommonJS\n\t\tmodule.exports = exports = factory(__webpack_require__(19021), __webpack_require__(57165));\n\t}\n\telse {}\n}(this, function (CryptoJS) {\n\n\t/**\n\t * Zero padding strategy.\n\t */\n\tCryptoJS.pad.ZeroPadding = {\n\t pad: function (data, blockSize) {\n\t // Shortcut\n\t var blockSizeBytes = blockSize * 4;\n\n\t // Pad\n\t data.clamp();\n\t data.sigBytes += blockSizeBytes - ((data.sigBytes % blockSizeBytes) || blockSizeBytes);\n\t },\n\n\t unpad: function (data) {\n\t // Shortcut\n\t var dataWords = data.words;\n\n\t // Unpad\n\t var i = data.sigBytes - 1;\n\t for (var i = data.sigBytes - 1; i >= 0; i--) {\n\t if (((dataWords[i >>> 2] >>> (24 - (i % 4) * 8)) & 0xff)) {\n\t data.sigBytes = i + 1;\n\t break;\n\t }\n\t }\n\t }\n\t};\n\n\n\treturn CryptoJS.pad.ZeroPadding;\n\n}));//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNTIxNTUuanMiLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBUUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9pdGctbmV4dGdlbi1mcm9udGVuZC8uL25vZGVfbW9kdWxlcy9jcnlwdG8tanMvcGFkLXplcm9wYWRkaW5nLmpzPzJhNjYiXSwic291cmNlc0NvbnRlbnQiOlsiOyhmdW5jdGlvbiAocm9vdCwgZmFjdG9yeSwgdW5kZWYpIHtcblx0aWYgKHR5cGVvZiBleHBvcnRzID09PSBcIm9iamVjdFwiKSB7XG5cdFx0Ly8gQ29tbW9uSlNcblx0XHRtb2R1bGUuZXhwb3J0cyA9IGV4cG9ydHMgPSBmYWN0b3J5KHJlcXVpcmUoXCIuL2NvcmVcIiksIHJlcXVpcmUoXCIuL2NpcGhlci1jb3JlXCIpKTtcblx0fVxuXHRlbHNlIGlmICh0eXBlb2YgZGVmaW5lID09PSBcImZ1bmN0aW9uXCIgJiYgZGVmaW5lLmFtZCkge1xuXHRcdC8vIEFNRFxuXHRcdGRlZmluZShbXCIuL2NvcmVcIiwgXCIuL2NpcGhlci1jb3JlXCJdLCBmYWN0b3J5KTtcblx0fVxuXHRlbHNlIHtcblx0XHQvLyBHbG9iYWwgKGJyb3dzZXIpXG5cdFx0ZmFjdG9yeShyb290LkNyeXB0b0pTKTtcblx0fVxufSh0aGlzLCBmdW5jdGlvbiAoQ3J5cHRvSlMpIHtcblxuXHQvKipcblx0ICogWmVybyBwYWRkaW5nIHN0cmF0ZWd5LlxuXHQgKi9cblx0Q3J5cHRvSlMucGFkLlplcm9QYWRkaW5nID0ge1xuXHQgICAgcGFkOiBmdW5jdGlvbiAoZGF0YSwgYmxvY2tTaXplKSB7XG5cdCAgICAgICAgLy8gU2hvcnRjdXRcblx0ICAgICAgICB2YXIgYmxvY2tTaXplQnl0ZXMgPSBibG9ja1NpemUgKiA0O1xuXG5cdCAgICAgICAgLy8gUGFkXG5cdCAgICAgICAgZGF0YS5jbGFtcCgpO1xuXHQgICAgICAgIGRhdGEuc2lnQnl0ZXMgKz0gYmxvY2tTaXplQnl0ZXMgLSAoKGRhdGEuc2lnQnl0ZXMgJSBibG9ja1NpemVCeXRlcykgfHwgYmxvY2tTaXplQnl0ZXMpO1xuXHQgICAgfSxcblxuXHQgICAgdW5wYWQ6IGZ1bmN0aW9uIChkYXRhKSB7XG5cdCAgICAgICAgLy8gU2hvcnRjdXRcblx0ICAgICAgICB2YXIgZGF0YVdvcmRzID0gZGF0YS53b3JkcztcblxuXHQgICAgICAgIC8vIFVucGFkXG5cdCAgICAgICAgdmFyIGkgPSBkYXRhLnNpZ0J5dGVzIC0gMTtcblx0ICAgICAgICBmb3IgKHZhciBpID0gZGF0YS5zaWdCeXRlcyAtIDE7IGkgPj0gMDsgaS0tKSB7XG5cdCAgICAgICAgICAgIGlmICgoKGRhdGFXb3Jkc1tpID4+PiAyXSA+Pj4gKDI0IC0gKGkgJSA0KSAqIDgpKSAmIDB4ZmYpKSB7XG5cdCAgICAgICAgICAgICAgICBkYXRhLnNpZ0J5dGVzID0gaSArIDE7XG5cdCAgICAgICAgICAgICAgICBicmVhaztcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgIH1cblx0ICAgIH1cblx0fTtcblxuXG5cdHJldHVybiBDcnlwdG9KUy5wYWQuWmVyb1BhZGRpbmc7XG5cbn0pKTsiXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///52155\n")},52390:(I,g,t)=>{"use strict";I.exports=t.p+"b97a01f102cd23e763ee.png"},52477:function(__unused_webpack_module,__unused_webpack_exports,__webpack_require__){eval("//! moment.js locale configuration\n//! locale : Faroese [fo]\n//! author : Ragnar Johannesen : https://github.com/ragnar123\n//! author : Kristian Sakarisson : https://github.com/sakarisson\n\n;(function (global, factory) {\n true ? factory(__webpack_require__(95093)) :\n 0\n}(this, (function (moment) { 'use strict';\n\n //! moment.js locale configuration\n\n var fo = moment.defineLocale('fo', {\n months: 'januar_februar_mars_apríl_mai_juni_juli_august_september_oktober_november_desember'.split(\n '_'\n ),\n monthsShort: 'jan_feb_mar_apr_mai_jun_jul_aug_sep_okt_nov_des'.split('_'),\n weekdays:\n 'sunnudagur_mánadagur_týsdagur_mikudagur_hósdagur_fríggjadagur_leygardagur'.split(\n '_'\n ),\n weekdaysShort: 'sun_mán_týs_mik_hós_frí_ley'.split('_'),\n weekdaysMin: 'su_má_tý_mi_hó_fr_le'.split('_'),\n longDateFormat: {\n LT: 'HH:mm',\n LTS: 'HH:mm:ss',\n L: 'DD/MM/YYYY',\n LL: 'D MMMM YYYY',\n LLL: 'D MMMM YYYY HH:mm',\n LLLL: 'dddd D. MMMM, YYYY HH:mm',\n },\n calendar: {\n sameDay: '[Í dag kl.] LT',\n nextDay: '[Í morgin kl.] LT',\n nextWeek: 'dddd [kl.] LT',\n lastDay: '[Í gjár kl.] LT',\n lastWeek: '[síðstu] dddd [kl] LT',\n sameElse: 'L',\n },\n relativeTime: {\n future: 'um %s',\n past: '%s síðani',\n s: 'fá sekund',\n ss: '%d sekundir',\n m: 'ein minuttur',\n mm: '%d minuttir',\n h: 'ein tími',\n hh: '%d tímar',\n d: 'ein dagur',\n dd: '%d dagar',\n M: 'ein mánaður',\n MM: '%d mánaðir',\n y: 'eitt ár',\n yy: '%d ár',\n },\n dayOfMonthOrdinalParse: /\\d{1,2}\\./,\n ordinal: '%d.',\n week: {\n dow: 1, // Monday is the first day of the week.\n doy: 4, // The week that contains Jan 4th is the first week of the year.\n },\n });\n\n return fo;\n\n})));\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNTI0NzcuanMiLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vaXRnLW5leHRnZW4tZnJvbnRlbmQvLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9mby5qcz8wNzIxIl0sInNvdXJjZXNDb250ZW50IjpbIi8vISBtb21lbnQuanMgbG9jYWxlIGNvbmZpZ3VyYXRpb25cbi8vISBsb2NhbGUgOiBGYXJvZXNlIFtmb11cbi8vISBhdXRob3IgOiBSYWduYXIgSm9oYW5uZXNlbiA6IGh0dHBzOi8vZ2l0aHViLmNvbS9yYWduYXIxMjNcbi8vISBhdXRob3IgOiBLcmlzdGlhbiBTYWthcmlzc29uIDogaHR0cHM6Ly9naXRodWIuY29tL3Nha2FyaXNzb25cblxuOyhmdW5jdGlvbiAoZ2xvYmFsLCBmYWN0b3J5KSB7XG4gICB0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcgJiYgdHlwZW9mIG1vZHVsZSAhPT0gJ3VuZGVmaW5lZCdcbiAgICAgICAmJiB0eXBlb2YgcmVxdWlyZSA9PT0gJ2Z1bmN0aW9uJyA/IGZhY3RvcnkocmVxdWlyZSgnLi4vbW9tZW50JykpIDpcbiAgIHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgZGVmaW5lLmFtZCA/IGRlZmluZShbJy4uL21vbWVudCddLCBmYWN0b3J5KSA6XG4gICBmYWN0b3J5KGdsb2JhbC5tb21lbnQpXG59KHRoaXMsIChmdW5jdGlvbiAobW9tZW50KSB7ICd1c2Ugc3RyaWN0JztcblxuICAgIC8vISBtb21lbnQuanMgbG9jYWxlIGNvbmZpZ3VyYXRpb25cblxuICAgIHZhciBmbyA9IG1vbWVudC5kZWZpbmVMb2NhbGUoJ2ZvJywge1xuICAgICAgICBtb250aHM6ICdqYW51YXJfZmVicnVhcl9tYXJzX2FwcsOtbF9tYWlfanVuaV9qdWxpX2F1Z3VzdF9zZXB0ZW1iZXJfb2t0b2Jlcl9ub3ZlbWJlcl9kZXNlbWJlcicuc3BsaXQoXG4gICAgICAgICAgICAnXydcbiAgICAgICAgKSxcbiAgICAgICAgbW9udGhzU2hvcnQ6ICdqYW5fZmViX21hcl9hcHJfbWFpX2p1bl9qdWxfYXVnX3NlcF9va3Rfbm92X2Rlcycuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXM6XG4gICAgICAgICAgICAnc3VubnVkYWd1cl9tw6FuYWRhZ3VyX3TDvXNkYWd1cl9taWt1ZGFndXJfaMOzc2RhZ3VyX2Zyw61nZ2phZGFndXJfbGV5Z2FyZGFndXInLnNwbGl0KFxuICAgICAgICAgICAgICAgICdfJ1xuICAgICAgICAgICAgKSxcbiAgICAgICAgd2Vla2RheXNTaG9ydDogJ3N1bl9tw6FuX3TDvXNfbWlrX2jDs3NfZnLDrV9sZXknLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzTWluOiAnc3VfbcOhX3TDvV9taV9ow7NfZnJfbGUnLnNwbGl0KCdfJyksXG4gICAgICAgIGxvbmdEYXRlRm9ybWF0OiB7XG4gICAgICAgICAgICBMVDogJ0hIOm1tJyxcbiAgICAgICAgICAgIExUUzogJ0hIOm1tOnNzJyxcbiAgICAgICAgICAgIEw6ICdERC9NTS9ZWVlZJyxcbiAgICAgICAgICAgIExMOiAnRCBNTU1NIFlZWVknLFxuICAgICAgICAgICAgTExMOiAnRCBNTU1NIFlZWVkgSEg6bW0nLFxuICAgICAgICAgICAgTExMTDogJ2RkZGQgRC4gTU1NTSwgWVlZWSBISDptbScsXG4gICAgICAgIH0sXG4gICAgICAgIGNhbGVuZGFyOiB7XG4gICAgICAgICAgICBzYW1lRGF5OiAnW8ONIGRhZyBrbC5dIExUJyxcbiAgICAgICAgICAgIG5leHREYXk6ICdbw40gbW9yZ2luIGtsLl0gTFQnLFxuICAgICAgICAgICAgbmV4dFdlZWs6ICdkZGRkIFtrbC5dIExUJyxcbiAgICAgICAgICAgIGxhc3REYXk6ICdbw40gZ2rDoXIga2wuXSBMVCcsXG4gICAgICAgICAgICBsYXN0V2VlazogJ1tzw63DsHN0dV0gZGRkZCBba2xdIExUJyxcbiAgICAgICAgICAgIHNhbWVFbHNlOiAnTCcsXG4gICAgICAgIH0sXG4gICAgICAgIHJlbGF0aXZlVGltZToge1xuICAgICAgICAgICAgZnV0dXJlOiAndW0gJXMnLFxuICAgICAgICAgICAgcGFzdDogJyVzIHPDrcOwYW5pJyxcbiAgICAgICAgICAgIHM6ICdmw6Egc2VrdW5kJyxcbiAgICAgICAgICAgIHNzOiAnJWQgc2VrdW5kaXInLFxuICAgICAgICAgICAgbTogJ2VpbiBtaW51dHR1cicsXG4gICAgICAgICAgICBtbTogJyVkIG1pbnV0dGlyJyxcbiAgICAgICAgICAgIGg6ICdlaW4gdMOtbWknLFxuICAgICAgICAgICAgaGg6ICclZCB0w61tYXInLFxuICAgICAgICAgICAgZDogJ2VpbiBkYWd1cicsXG4gICAgICAgICAgICBkZDogJyVkIGRhZ2FyJyxcbiAgICAgICAgICAgIE06ICdlaW4gbcOhbmHDsHVyJyxcbiAgICAgICAgICAgIE1NOiAnJWQgbcOhbmHDsGlyJyxcbiAgICAgICAgICAgIHk6ICdlaXR0IMOhcicsXG4gICAgICAgICAgICB5eTogJyVkIMOhcicsXG4gICAgICAgIH0sXG4gICAgICAgIGRheU9mTW9udGhPcmRpbmFsUGFyc2U6IC9cXGR7MSwyfVxcLi8sXG4gICAgICAgIG9yZGluYWw6ICclZC4nLFxuICAgICAgICB3ZWVrOiB7XG4gICAgICAgICAgICBkb3c6IDEsIC8vIE1vbmRheSBpcyB0aGUgZmlyc3QgZGF5IG9mIHRoZSB3ZWVrLlxuICAgICAgICAgICAgZG95OiA0LCAvLyBUaGUgd2VlayB0aGF0IGNvbnRhaW5zIEphbiA0dGggaXMgdGhlIGZpcnN0IHdlZWsgb2YgdGhlIHllYXIuXG4gICAgICAgIH0sXG4gICAgfSk7XG5cbiAgICByZXR1cm4gZm87XG5cbn0pKSk7XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///52477\n")},52597:(I,g,t)=>{"use strict";I.exports=t.p+"8ad9823128ce519028f9.png"},52648:function(__unused_webpack_module,__unused_webpack_exports,__webpack_require__){eval("//! moment.js locale configuration\n//! locale : Chinese (China) [zh-cn]\n//! author : suupic : https://github.com/suupic\n//! author : Zeno Zeng : https://github.com/zenozeng\n//! author : uu109 : https://github.com/uu109\n\n;(function (global, factory) {\n true ? factory(__webpack_require__(95093)) :\n 0\n}(this, (function (moment) { 'use strict';\n\n //! moment.js locale configuration\n\n var zhCn = moment.defineLocale('zh-cn', {\n months: '一月_二月_三月_四月_五月_六月_七月_八月_九月_十月_十一月_十二月'.split(\n '_'\n ),\n monthsShort: '1月_2月_3月_4月_5月_6月_7月_8月_9月_10月_11月_12月'.split(\n '_'\n ),\n weekdays: '星期日_星期一_星期二_星期三_星期四_星期五_星期六'.split('_'),\n weekdaysShort: '周日_周一_周二_周三_周四_周五_周六'.split('_'),\n weekdaysMin: '日_一_二_三_四_五_六'.split('_'),\n longDateFormat: {\n LT: 'HH:mm',\n LTS: 'HH:mm:ss',\n L: 'YYYY/MM/DD',\n LL: 'YYYY年M月D日',\n LLL: 'YYYY年M月D日Ah点mm分',\n LLLL: 'YYYY年M月D日ddddAh点mm分',\n l: 'YYYY/M/D',\n ll: 'YYYY年M月D日',\n lll: 'YYYY年M月D日 HH:mm',\n llll: 'YYYY年M月D日dddd HH:mm',\n },\n meridiemParse: /凌晨|早上|上午|中午|下午|晚上/,\n meridiemHour: function (hour, meridiem) {\n if (hour === 12) {\n hour = 0;\n }\n if (meridiem === '凌晨' || meridiem === '早上' || meridiem === '上午') {\n return hour;\n } else if (meridiem === '下午' || meridiem === '晚上') {\n return hour + 12;\n } else {\n // '中午'\n return hour >= 11 ? hour : hour + 12;\n }\n },\n meridiem: function (hour, minute, isLower) {\n var hm = hour * 100 + minute;\n if (hm < 600) {\n return '凌晨';\n } else if (hm < 900) {\n return '早上';\n } else if (hm < 1130) {\n return '上午';\n } else if (hm < 1230) {\n return '中午';\n } else if (hm < 1800) {\n return '下午';\n } else {\n return '晚上';\n }\n },\n calendar: {\n sameDay: '[今天]LT',\n nextDay: '[明天]LT',\n nextWeek: function (now) {\n if (now.week() !== this.week()) {\n return '[下]dddLT';\n } else {\n return '[本]dddLT';\n }\n },\n lastDay: '[昨天]LT',\n lastWeek: function (now) {\n if (this.week() !== now.week()) {\n return '[上]dddLT';\n } else {\n return '[本]dddLT';\n }\n },\n sameElse: 'L',\n },\n dayOfMonthOrdinalParse: /\\d{1,2}(日|月|周)/,\n ordinal: function (number, period) {\n switch (period) {\n case 'd':\n case 'D':\n case 'DDD':\n return number + '日';\n case 'M':\n return number + '月';\n case 'w':\n case 'W':\n return number + '周';\n default:\n return number;\n }\n },\n relativeTime: {\n future: '%s后',\n past: '%s前',\n s: '几秒',\n ss: '%d 秒',\n m: '1 分钟',\n mm: '%d 分钟',\n h: '1 小时',\n hh: '%d 小时',\n d: '1 天',\n dd: '%d 天',\n w: '1 周',\n ww: '%d 周',\n M: '1 个月',\n MM: '%d 个月',\n y: '1 年',\n yy: '%d 年',\n },\n week: {\n // GB/T 7408-1994《数据元和交换格式·信息交换·日期和时间表示法》与ISO 8601:1988等效\n dow: 1, // Monday is the first day of the week.\n doy: 4, // The week that contains Jan 4th is the first week of the year.\n },\n });\n\n return zhCn;\n\n})));\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNTI2NDguanMiLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vaXRnLW5leHRnZW4tZnJvbnRlbmQvLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS96aC1jbi5qcz81YzNhIl0sInNvdXJjZXNDb250ZW50IjpbIi8vISBtb21lbnQuanMgbG9jYWxlIGNvbmZpZ3VyYXRpb25cbi8vISBsb2NhbGUgOiBDaGluZXNlIChDaGluYSkgW3poLWNuXVxuLy8hIGF1dGhvciA6IHN1dXBpYyA6IGh0dHBzOi8vZ2l0aHViLmNvbS9zdXVwaWNcbi8vISBhdXRob3IgOiBaZW5vIFplbmcgOiBodHRwczovL2dpdGh1Yi5jb20vemVub3plbmdcbi8vISBhdXRob3IgOiB1dTEwOSA6IGh0dHBzOi8vZ2l0aHViLmNvbS91dTEwOVxuXG47KGZ1bmN0aW9uIChnbG9iYWwsIGZhY3RvcnkpIHtcbiAgIHR5cGVvZiBleHBvcnRzID09PSAnb2JqZWN0JyAmJiB0eXBlb2YgbW9kdWxlICE9PSAndW5kZWZpbmVkJ1xuICAgICAgICYmIHR5cGVvZiByZXF1aXJlID09PSAnZnVuY3Rpb24nID8gZmFjdG9yeShyZXF1aXJlKCcuLi9tb21lbnQnKSkgOlxuICAgdHlwZW9mIGRlZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiBkZWZpbmUuYW1kID8gZGVmaW5lKFsnLi4vbW9tZW50J10sIGZhY3RvcnkpIDpcbiAgIGZhY3RvcnkoZ2xvYmFsLm1vbWVudClcbn0odGhpcywgKGZ1bmN0aW9uIChtb21lbnQpIHsgJ3VzZSBzdHJpY3QnO1xuXG4gICAgLy8hIG1vbWVudC5qcyBsb2NhbGUgY29uZmlndXJhdGlvblxuXG4gICAgdmFyIHpoQ24gPSBtb21lbnQuZGVmaW5lTG9jYWxlKCd6aC1jbicsIHtcbiAgICAgICAgbW9udGhzOiAn5LiA5pyIX+S6jOaciF/kuInmnIhf5Zub5pyIX+S6lOaciF/lha3mnIhf5LiD5pyIX+WFq+aciF/kuZ3mnIhf5Y2B5pyIX+WNgeS4gOaciF/ljYHkuozmnIgnLnNwbGl0KFxuICAgICAgICAgICAgJ18nXG4gICAgICAgICksXG4gICAgICAgIG1vbnRoc1Nob3J0OiAnMeaciF8y5pyIXzPmnIhfNOaciF815pyIXzbmnIhfN+aciF845pyIXznmnIhfMTDmnIhfMTHmnIhfMTLmnIgnLnNwbGl0KFxuICAgICAgICAgICAgJ18nXG4gICAgICAgICksXG4gICAgICAgIHdlZWtkYXlzOiAn5pif5pyf5pelX+aYn+acn+S4gF/mmJ/mnJ/kuoxf5pif5pyf5LiJX+aYn+acn+Wbm1/mmJ/mnJ/kupRf5pif5pyf5YWtJy5zcGxpdCgnXycpLFxuICAgICAgICB3ZWVrZGF5c1Nob3J0OiAn5ZGo5pelX+WRqOS4gF/lkajkuoxf5ZGo5LiJX+WRqOWbm1/lkajkupRf5ZGo5YWtJy5zcGxpdCgnXycpLFxuICAgICAgICB3ZWVrZGF5c01pbjogJ+aXpV/kuIBf5LqMX+S4iV/lm5tf5LqUX+WFrScuc3BsaXQoJ18nKSxcbiAgICAgICAgbG9uZ0RhdGVGb3JtYXQ6IHtcbiAgICAgICAgICAgIExUOiAnSEg6bW0nLFxuICAgICAgICAgICAgTFRTOiAnSEg6bW06c3MnLFxuICAgICAgICAgICAgTDogJ1lZWVkvTU0vREQnLFxuICAgICAgICAgICAgTEw6ICdZWVlZ5bm0TeaciETml6UnLFxuICAgICAgICAgICAgTExMOiAnWVlZWeW5tE3mnIhE5pelQWjngrltbeWIhicsXG4gICAgICAgICAgICBMTExMOiAnWVlZWeW5tE3mnIhE5pelZGRkZEFo54K5bW3liIYnLFxuICAgICAgICAgICAgbDogJ1lZWVkvTS9EJyxcbiAgICAgICAgICAgIGxsOiAnWVlZWeW5tE3mnIhE5pelJyxcbiAgICAgICAgICAgIGxsbDogJ1lZWVnlubRN5pyIROaXpSBISDptbScsXG4gICAgICAgICAgICBsbGxsOiAnWVlZWeW5tE3mnIhE5pelZGRkZCBISDptbScsXG4gICAgICAgIH0sXG4gICAgICAgIG1lcmlkaWVtUGFyc2U6IC/lh4zmmah85pep5LiKfOS4iuWNiHzkuK3ljYh85LiL5Y2IfOaZmuS4ii8sXG4gICAgICAgIG1lcmlkaWVtSG91cjogZnVuY3Rpb24gKGhvdXIsIG1lcmlkaWVtKSB7XG4gICAgICAgICAgICBpZiAoaG91ciA9PT0gMTIpIHtcbiAgICAgICAgICAgICAgICBob3VyID0gMDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChtZXJpZGllbSA9PT0gJ+WHjOaZqCcgfHwgbWVyaWRpZW0gPT09ICfml6nkuIonIHx8IG1lcmlkaWVtID09PSAn5LiK5Y2IJykge1xuICAgICAgICAgICAgICAgIHJldHVybiBob3VyO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChtZXJpZGllbSA9PT0gJ+S4i+WNiCcgfHwgbWVyaWRpZW0gPT09ICfmmZrkuIonKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGhvdXIgKyAxMjtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgLy8gJ+S4reWNiCdcbiAgICAgICAgICAgICAgICByZXR1cm4gaG91ciA+PSAxMSA/IGhvdXIgOiBob3VyICsgMTI7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIG1lcmlkaWVtOiBmdW5jdGlvbiAoaG91ciwgbWludXRlLCBpc0xvd2VyKSB7XG4gICAgICAgICAgICB2YXIgaG0gPSBob3VyICogMTAwICsgbWludXRlO1xuICAgICAgICAgICAgaWYgKGhtIDwgNjAwKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuICflh4zmmagnO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChobSA8IDkwMCkge1xuICAgICAgICAgICAgICAgIHJldHVybiAn5pep5LiKJztcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoaG0gPCAxMTMwKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuICfkuIrljYgnO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChobSA8IDEyMzApIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gJ+S4reWNiCc7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGhtIDwgMTgwMCkge1xuICAgICAgICAgICAgICAgIHJldHVybiAn5LiL5Y2IJztcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuICfmmZrkuIonO1xuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBjYWxlbmRhcjoge1xuICAgICAgICAgICAgc2FtZURheTogJ1vku4rlpKldTFQnLFxuICAgICAgICAgICAgbmV4dERheTogJ1vmmI7lpKldTFQnLFxuICAgICAgICAgICAgbmV4dFdlZWs6IGZ1bmN0aW9uIChub3cpIHtcbiAgICAgICAgICAgICAgICBpZiAobm93LndlZWsoKSAhPT0gdGhpcy53ZWVrKCkpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuICdb5LiLXWRkZExUJztcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gJ1vmnKxdZGRkTFQnO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBsYXN0RGF5OiAnW+aYqOWkqV1MVCcsXG4gICAgICAgICAgICBsYXN0V2VlazogZnVuY3Rpb24gKG5vdykge1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLndlZWsoKSAhPT0gbm93LndlZWsoKSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gJ1vkuIpdZGRkTFQnO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiAnW+acrF1kZGRMVCc7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHNhbWVFbHNlOiAnTCcsXG4gICAgICAgIH0sXG4gICAgICAgIGRheU9mTW9udGhPcmRpbmFsUGFyc2U6IC9cXGR7MSwyfSjml6V85pyIfOWRqCkvLFxuICAgICAgICBvcmRpbmFsOiBmdW5jdGlvbiAobnVtYmVyLCBwZXJpb2QpIHtcbiAgICAgICAgICAgIHN3aXRjaCAocGVyaW9kKSB7XG4gICAgICAgICAgICAgICAgY2FzZSAnZCc6XG4gICAgICAgICAgICAgICAgY2FzZSAnRCc6XG4gICAgICAgICAgICAgICAgY2FzZSAnREREJzpcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG51bWJlciArICfml6UnO1xuICAgICAgICAgICAgICAgIGNhc2UgJ00nOlxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gbnVtYmVyICsgJ+aciCc7XG4gICAgICAgICAgICAgICAgY2FzZSAndyc6XG4gICAgICAgICAgICAgICAgY2FzZSAnVyc6XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBudW1iZXIgKyAn5ZGoJztcbiAgICAgICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gbnVtYmVyO1xuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICByZWxhdGl2ZVRpbWU6IHtcbiAgICAgICAgICAgIGZ1dHVyZTogJyVz5ZCOJyxcbiAgICAgICAgICAgIHBhc3Q6ICclc+WJjScsXG4gICAgICAgICAgICBzOiAn5Yeg56eSJyxcbiAgICAgICAgICAgIHNzOiAnJWQg56eSJyxcbiAgICAgICAgICAgIG06ICcxIOWIhumSnycsXG4gICAgICAgICAgICBtbTogJyVkIOWIhumSnycsXG4gICAgICAgICAgICBoOiAnMSDlsI/ml7YnLFxuICAgICAgICAgICAgaGg6ICclZCDlsI/ml7YnLFxuICAgICAgICAgICAgZDogJzEg5aSpJyxcbiAgICAgICAgICAgIGRkOiAnJWQg5aSpJyxcbiAgICAgICAgICAgIHc6ICcxIOWRqCcsXG4gICAgICAgICAgICB3dzogJyVkIOWRqCcsXG4gICAgICAgICAgICBNOiAnMSDkuKrmnIgnLFxuICAgICAgICAgICAgTU06ICclZCDkuKrmnIgnLFxuICAgICAgICAgICAgeTogJzEg5bm0JyxcbiAgICAgICAgICAgIHl5OiAnJWQg5bm0JyxcbiAgICAgICAgfSxcbiAgICAgICAgd2Vlazoge1xuICAgICAgICAgICAgLy8gR0IvVCA3NDA4LTE5OTTjgIrmlbDmja7lhYPlkozkuqTmjaLmoLzlvI/Ct+S/oeaBr+S6pOaNosK35pel5pyf5ZKM5pe26Ze06KGo56S65rOV44CL5LiOSVNPIDg2MDE6MTk4OOetieaViFxuICAgICAgICAgICAgZG93OiAxLCAvLyBNb25kYXkgaXMgdGhlIGZpcnN0IGRheSBvZiB0aGUgd2Vlay5cbiAgICAgICAgICAgIGRveTogNCwgLy8gVGhlIHdlZWsgdGhhdCBjb250YWlucyBKYW4gNHRoIGlzIHRoZSBmaXJzdCB3ZWVrIG9mIHRoZSB5ZWFyLlxuICAgICAgICB9LFxuICAgIH0pO1xuXG4gICAgcmV0dXJuIHpoQ247XG5cbn0pKSk7XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///52648\n")},53256:(I,g,t)=>{"use strict";I.exports=t.p+"9d468021fd092a189fdb.png"},53287:(I,g,t)=>{"use strict";I.exports=t.p+"bd53671ae9b9ed21216e.png"},53872:function(__unused_webpack_module,__unused_webpack_exports,__webpack_require__){eval("//! moment.js locale configuration\n//! locale : English (Australia) [en-au]\n//! author : Jared Morse : https://github.com/jarcoal\n\n;(function (global, factory) {\n true ? factory(__webpack_require__(95093)) :\n 0\n}(this, (function (moment) { 'use strict';\n\n //! moment.js locale configuration\n\n var enAu = moment.defineLocale('en-au', {\n months: 'January_February_March_April_May_June_July_August_September_October_November_December'.split(\n '_'\n ),\n monthsShort: 'Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec'.split('_'),\n weekdays: 'Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday'.split(\n '_'\n ),\n weekdaysShort: 'Sun_Mon_Tue_Wed_Thu_Fri_Sat'.split('_'),\n weekdaysMin: 'Su_Mo_Tu_We_Th_Fr_Sa'.split('_'),\n longDateFormat: {\n LT: 'h:mm A',\n LTS: 'h:mm:ss A',\n L: 'DD/MM/YYYY',\n LL: 'D MMMM YYYY',\n LLL: 'D MMMM YYYY h:mm A',\n LLLL: 'dddd, D MMMM YYYY h:mm A',\n },\n calendar: {\n sameDay: '[Today at] LT',\n nextDay: '[Tomorrow at] LT',\n nextWeek: 'dddd [at] LT',\n lastDay: '[Yesterday at] LT',\n lastWeek: '[Last] dddd [at] LT',\n sameElse: 'L',\n },\n relativeTime: {\n future: 'in %s',\n past: '%s ago',\n s: 'a few seconds',\n ss: '%d seconds',\n m: 'a minute',\n mm: '%d minutes',\n h: 'an hour',\n hh: '%d hours',\n d: 'a day',\n dd: '%d days',\n M: 'a month',\n MM: '%d months',\n y: 'a year',\n yy: '%d years',\n },\n dayOfMonthOrdinalParse: /\\d{1,2}(st|nd|rd|th)/,\n ordinal: function (number) {\n var b = number % 10,\n output =\n ~~((number % 100) / 10) === 1\n ? 'th'\n : b === 1\n ? 'st'\n : b === 2\n ? 'nd'\n : b === 3\n ? 'rd'\n : 'th';\n return number + output;\n },\n week: {\n dow: 0, // Sunday is the first day of the week.\n doy: 4, // The week that contains Jan 4th is the first week of the year.\n },\n });\n\n return enAu;\n\n})));\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNTM4NzIuanMiLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL2l0Zy1uZXh0Z2VuLWZyb250ZW5kLy4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvZW4tYXUuanM/MGU2YiJdLCJzb3VyY2VzQ29udGVudCI6WyIvLyEgbW9tZW50LmpzIGxvY2FsZSBjb25maWd1cmF0aW9uXG4vLyEgbG9jYWxlIDogRW5nbGlzaCAoQXVzdHJhbGlhKSBbZW4tYXVdXG4vLyEgYXV0aG9yIDogSmFyZWQgTW9yc2UgOiBodHRwczovL2dpdGh1Yi5jb20vamFyY29hbFxuXG47KGZ1bmN0aW9uIChnbG9iYWwsIGZhY3RvcnkpIHtcbiAgIHR5cGVvZiBleHBvcnRzID09PSAnb2JqZWN0JyAmJiB0eXBlb2YgbW9kdWxlICE9PSAndW5kZWZpbmVkJ1xuICAgICAgICYmIHR5cGVvZiByZXF1aXJlID09PSAnZnVuY3Rpb24nID8gZmFjdG9yeShyZXF1aXJlKCcuLi9tb21lbnQnKSkgOlxuICAgdHlwZW9mIGRlZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiBkZWZpbmUuYW1kID8gZGVmaW5lKFsnLi4vbW9tZW50J10sIGZhY3RvcnkpIDpcbiAgIGZhY3RvcnkoZ2xvYmFsLm1vbWVudClcbn0odGhpcywgKGZ1bmN0aW9uIChtb21lbnQpIHsgJ3VzZSBzdHJpY3QnO1xuXG4gICAgLy8hIG1vbWVudC5qcyBsb2NhbGUgY29uZmlndXJhdGlvblxuXG4gICAgdmFyIGVuQXUgPSBtb21lbnQuZGVmaW5lTG9jYWxlKCdlbi1hdScsIHtcbiAgICAgICAgbW9udGhzOiAnSmFudWFyeV9GZWJydWFyeV9NYXJjaF9BcHJpbF9NYXlfSnVuZV9KdWx5X0F1Z3VzdF9TZXB0ZW1iZXJfT2N0b2Jlcl9Ob3ZlbWJlcl9EZWNlbWJlcicuc3BsaXQoXG4gICAgICAgICAgICAnXydcbiAgICAgICAgKSxcbiAgICAgICAgbW9udGhzU2hvcnQ6ICdKYW5fRmViX01hcl9BcHJfTWF5X0p1bl9KdWxfQXVnX1NlcF9PY3RfTm92X0RlYycuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXM6ICdTdW5kYXlfTW9uZGF5X1R1ZXNkYXlfV2VkbmVzZGF5X1RodXJzZGF5X0ZyaWRheV9TYXR1cmRheScuc3BsaXQoXG4gICAgICAgICAgICAnXydcbiAgICAgICAgKSxcbiAgICAgICAgd2Vla2RheXNTaG9ydDogJ1N1bl9Nb25fVHVlX1dlZF9UaHVfRnJpX1NhdCcuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXNNaW46ICdTdV9Nb19UdV9XZV9UaF9Gcl9TYScuc3BsaXQoJ18nKSxcbiAgICAgICAgbG9uZ0RhdGVGb3JtYXQ6IHtcbiAgICAgICAgICAgIExUOiAnaDptbSBBJyxcbiAgICAgICAgICAgIExUUzogJ2g6bW06c3MgQScsXG4gICAgICAgICAgICBMOiAnREQvTU0vWVlZWScsXG4gICAgICAgICAgICBMTDogJ0QgTU1NTSBZWVlZJyxcbiAgICAgICAgICAgIExMTDogJ0QgTU1NTSBZWVlZIGg6bW0gQScsXG4gICAgICAgICAgICBMTExMOiAnZGRkZCwgRCBNTU1NIFlZWVkgaDptbSBBJyxcbiAgICAgICAgfSxcbiAgICAgICAgY2FsZW5kYXI6IHtcbiAgICAgICAgICAgIHNhbWVEYXk6ICdbVG9kYXkgYXRdIExUJyxcbiAgICAgICAgICAgIG5leHREYXk6ICdbVG9tb3Jyb3cgYXRdIExUJyxcbiAgICAgICAgICAgIG5leHRXZWVrOiAnZGRkZCBbYXRdIExUJyxcbiAgICAgICAgICAgIGxhc3REYXk6ICdbWWVzdGVyZGF5IGF0XSBMVCcsXG4gICAgICAgICAgICBsYXN0V2VlazogJ1tMYXN0XSBkZGRkIFthdF0gTFQnLFxuICAgICAgICAgICAgc2FtZUVsc2U6ICdMJyxcbiAgICAgICAgfSxcbiAgICAgICAgcmVsYXRpdmVUaW1lOiB7XG4gICAgICAgICAgICBmdXR1cmU6ICdpbiAlcycsXG4gICAgICAgICAgICBwYXN0OiAnJXMgYWdvJyxcbiAgICAgICAgICAgIHM6ICdhIGZldyBzZWNvbmRzJyxcbiAgICAgICAgICAgIHNzOiAnJWQgc2Vjb25kcycsXG4gICAgICAgICAgICBtOiAnYSBtaW51dGUnLFxuICAgICAgICAgICAgbW06ICclZCBtaW51dGVzJyxcbiAgICAgICAgICAgIGg6ICdhbiBob3VyJyxcbiAgICAgICAgICAgIGhoOiAnJWQgaG91cnMnLFxuICAgICAgICAgICAgZDogJ2EgZGF5JyxcbiAgICAgICAgICAgIGRkOiAnJWQgZGF5cycsXG4gICAgICAgICAgICBNOiAnYSBtb250aCcsXG4gICAgICAgICAgICBNTTogJyVkIG1vbnRocycsXG4gICAgICAgICAgICB5OiAnYSB5ZWFyJyxcbiAgICAgICAgICAgIHl5OiAnJWQgeWVhcnMnLFxuICAgICAgICB9LFxuICAgICAgICBkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOiAvXFxkezEsMn0oc3R8bmR8cmR8dGgpLyxcbiAgICAgICAgb3JkaW5hbDogZnVuY3Rpb24gKG51bWJlcikge1xuICAgICAgICAgICAgdmFyIGIgPSBudW1iZXIgJSAxMCxcbiAgICAgICAgICAgICAgICBvdXRwdXQgPVxuICAgICAgICAgICAgICAgICAgICB+figobnVtYmVyICUgMTAwKSAvIDEwKSA9PT0gMVxuICAgICAgICAgICAgICAgICAgICAgICAgPyAndGgnXG4gICAgICAgICAgICAgICAgICAgICAgICA6IGIgPT09IDFcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPyAnc3QnXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDogYiA9PT0gMlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gJ25kJ1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogYiA9PT0gM1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPyAncmQnXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6ICd0aCc7XG4gICAgICAgICAgICByZXR1cm4gbnVtYmVyICsgb3V0cHV0O1xuICAgICAgICB9LFxuICAgICAgICB3ZWVrOiB7XG4gICAgICAgICAgICBkb3c6IDAsIC8vIFN1bmRheSBpcyB0aGUgZmlyc3QgZGF5IG9mIHRoZSB3ZWVrLlxuICAgICAgICAgICAgZG95OiA0LCAvLyBUaGUgd2VlayB0aGF0IGNvbnRhaW5zIEphbiA0dGggaXMgdGhlIGZpcnN0IHdlZWsgb2YgdGhlIHllYXIuXG4gICAgICAgIH0sXG4gICAgfSk7XG5cbiAgICByZXR1cm4gZW5BdTtcblxufSkpKTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///53872\n")},54405:(__unused_webpack_module,exports)=>{"use strict";eval('var __webpack_unused_export__;\n/**\n * @license React\n * react-is.production.js\n *\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n\nvar REACT_ELEMENT_TYPE = Symbol.for("react.transitional.element"),\n REACT_PORTAL_TYPE = Symbol.for("react.portal"),\n REACT_FRAGMENT_TYPE = Symbol.for("react.fragment"),\n REACT_STRICT_MODE_TYPE = Symbol.for("react.strict_mode"),\n REACT_PROFILER_TYPE = Symbol.for("react.profiler");\nSymbol.for("react.provider");\nvar REACT_CONSUMER_TYPE = Symbol.for("react.consumer"),\n REACT_CONTEXT_TYPE = Symbol.for("react.context"),\n REACT_FORWARD_REF_TYPE = Symbol.for("react.forward_ref"),\n REACT_SUSPENSE_TYPE = Symbol.for("react.suspense"),\n REACT_SUSPENSE_LIST_TYPE = Symbol.for("react.suspense_list"),\n REACT_MEMO_TYPE = Symbol.for("react.memo"),\n REACT_LAZY_TYPE = Symbol.for("react.lazy"),\n REACT_OFFSCREEN_TYPE = Symbol.for("react.offscreen"),\n REACT_CLIENT_REFERENCE = Symbol.for("react.client.reference");\nfunction typeOf(object) {\n if ("object" === typeof object && null !== object) {\n var $$typeof = object.$$typeof;\n switch ($$typeof) {\n case REACT_ELEMENT_TYPE:\n switch (((object = object.type), object)) {\n case REACT_FRAGMENT_TYPE:\n case REACT_PROFILER_TYPE:\n case REACT_STRICT_MODE_TYPE:\n case REACT_SUSPENSE_TYPE:\n case REACT_SUSPENSE_LIST_TYPE:\n return object;\n default:\n switch (((object = object && object.$$typeof), object)) {\n case REACT_CONTEXT_TYPE:\n case REACT_FORWARD_REF_TYPE:\n case REACT_LAZY_TYPE:\n case REACT_MEMO_TYPE:\n return object;\n case REACT_CONSUMER_TYPE:\n return object;\n default:\n return $$typeof;\n }\n }\n case REACT_PORTAL_TYPE:\n return $$typeof;\n }\n }\n}\n__webpack_unused_export__ = REACT_CONSUMER_TYPE;\n__webpack_unused_export__ = REACT_CONTEXT_TYPE;\n__webpack_unused_export__ = REACT_ELEMENT_TYPE;\n__webpack_unused_export__ = REACT_FORWARD_REF_TYPE;\n__webpack_unused_export__ = REACT_FRAGMENT_TYPE;\n__webpack_unused_export__ = REACT_LAZY_TYPE;\n__webpack_unused_export__ = REACT_MEMO_TYPE;\n__webpack_unused_export__ = REACT_PORTAL_TYPE;\n__webpack_unused_export__ = REACT_PROFILER_TYPE;\n__webpack_unused_export__ = REACT_STRICT_MODE_TYPE;\n__webpack_unused_export__ = REACT_SUSPENSE_TYPE;\n__webpack_unused_export__ = REACT_SUSPENSE_LIST_TYPE;\n__webpack_unused_export__ = function (object) {\n return typeOf(object) === REACT_CONSUMER_TYPE;\n};\n__webpack_unused_export__ = function (object) {\n return typeOf(object) === REACT_CONTEXT_TYPE;\n};\n__webpack_unused_export__ = function (object) {\n return (\n "object" === typeof object &&\n null !== object &&\n object.$$typeof === REACT_ELEMENT_TYPE\n );\n};\n__webpack_unused_export__ = function (object) {\n return typeOf(object) === REACT_FORWARD_REF_TYPE;\n};\n__webpack_unused_export__ = function (object) {\n return typeOf(object) === REACT_FRAGMENT_TYPE;\n};\n__webpack_unused_export__ = function (object) {\n return typeOf(object) === REACT_LAZY_TYPE;\n};\n__webpack_unused_export__ = function (object) {\n return typeOf(object) === REACT_MEMO_TYPE;\n};\n__webpack_unused_export__ = function (object) {\n return typeOf(object) === REACT_PORTAL_TYPE;\n};\n__webpack_unused_export__ = function (object) {\n return typeOf(object) === REACT_PROFILER_TYPE;\n};\n__webpack_unused_export__ = function (object) {\n return typeOf(object) === REACT_STRICT_MODE_TYPE;\n};\n__webpack_unused_export__ = function (object) {\n return typeOf(object) === REACT_SUSPENSE_TYPE;\n};\n__webpack_unused_export__ = function (object) {\n return typeOf(object) === REACT_SUSPENSE_LIST_TYPE;\n};\nexports.Hy = function (type) {\n return "string" === typeof type ||\n "function" === typeof type ||\n type === REACT_FRAGMENT_TYPE ||\n type === REACT_PROFILER_TYPE ||\n type === REACT_STRICT_MODE_TYPE ||\n type === REACT_SUSPENSE_TYPE ||\n type === REACT_SUSPENSE_LIST_TYPE ||\n type === REACT_OFFSCREEN_TYPE ||\n ("object" === typeof type &&\n null !== type &&\n (type.$$typeof === REACT_LAZY_TYPE ||\n type.$$typeof === REACT_MEMO_TYPE ||\n type.$$typeof === REACT_CONTEXT_TYPE ||\n type.$$typeof === REACT_CONSUMER_TYPE ||\n type.$$typeof === REACT_FORWARD_REF_TYPE ||\n type.$$typeof === REACT_CLIENT_REFERENCE ||\n void 0 !== type.getModuleId))\n ? !0\n : !1;\n};\nexports.QP = typeOf;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNTQ0MDUuanMiLCJtYXBwaW5ncyI6IjtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vaXRnLW5leHRnZW4tZnJvbnRlbmQvLi9ub2RlX21vZHVsZXMvcmVhY3QtaXMvY2pzL3JlYWN0LWlzLnByb2R1Y3Rpb24uanM/OTY0YSJdLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBsaWNlbnNlIFJlYWN0XG4gKiByZWFjdC1pcy5wcm9kdWN0aW9uLmpzXG4gKlxuICogQ29weXJpZ2h0IChjKSBNZXRhIFBsYXRmb3JtcywgSW5jLiBhbmQgYWZmaWxpYXRlcy5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS5cbiAqL1xuXG5cInVzZSBzdHJpY3RcIjtcbnZhciBSRUFDVF9FTEVNRU5UX1RZUEUgPSBTeW1ib2wuZm9yKFwicmVhY3QudHJhbnNpdGlvbmFsLmVsZW1lbnRcIiksXG4gIFJFQUNUX1BPUlRBTF9UWVBFID0gU3ltYm9sLmZvcihcInJlYWN0LnBvcnRhbFwiKSxcbiAgUkVBQ1RfRlJBR01FTlRfVFlQRSA9IFN5bWJvbC5mb3IoXCJyZWFjdC5mcmFnbWVudFwiKSxcbiAgUkVBQ1RfU1RSSUNUX01PREVfVFlQRSA9IFN5bWJvbC5mb3IoXCJyZWFjdC5zdHJpY3RfbW9kZVwiKSxcbiAgUkVBQ1RfUFJPRklMRVJfVFlQRSA9IFN5bWJvbC5mb3IoXCJyZWFjdC5wcm9maWxlclwiKTtcblN5bWJvbC5mb3IoXCJyZWFjdC5wcm92aWRlclwiKTtcbnZhciBSRUFDVF9DT05TVU1FUl9UWVBFID0gU3ltYm9sLmZvcihcInJlYWN0LmNvbnN1bWVyXCIpLFxuICBSRUFDVF9DT05URVhUX1RZUEUgPSBTeW1ib2wuZm9yKFwicmVhY3QuY29udGV4dFwiKSxcbiAgUkVBQ1RfRk9SV0FSRF9SRUZfVFlQRSA9IFN5bWJvbC5mb3IoXCJyZWFjdC5mb3J3YXJkX3JlZlwiKSxcbiAgUkVBQ1RfU1VTUEVOU0VfVFlQRSA9IFN5bWJvbC5mb3IoXCJyZWFjdC5zdXNwZW5zZVwiKSxcbiAgUkVBQ1RfU1VTUEVOU0VfTElTVF9UWVBFID0gU3ltYm9sLmZvcihcInJlYWN0LnN1c3BlbnNlX2xpc3RcIiksXG4gIFJFQUNUX01FTU9fVFlQRSA9IFN5bWJvbC5mb3IoXCJyZWFjdC5tZW1vXCIpLFxuICBSRUFDVF9MQVpZX1RZUEUgPSBTeW1ib2wuZm9yKFwicmVhY3QubGF6eVwiKSxcbiAgUkVBQ1RfT0ZGU0NSRUVOX1RZUEUgPSBTeW1ib2wuZm9yKFwicmVhY3Qub2Zmc2NyZWVuXCIpLFxuICBSRUFDVF9DTElFTlRfUkVGRVJFTkNFID0gU3ltYm9sLmZvcihcInJlYWN0LmNsaWVudC5yZWZlcmVuY2VcIik7XG5mdW5jdGlvbiB0eXBlT2Yob2JqZWN0KSB7XG4gIGlmIChcIm9iamVjdFwiID09PSB0eXBlb2Ygb2JqZWN0ICYmIG51bGwgIT09IG9iamVjdCkge1xuICAgIHZhciAkJHR5cGVvZiA9IG9iamVjdC4kJHR5cGVvZjtcbiAgICBzd2l0Y2ggKCQkdHlwZW9mKSB7XG4gICAgICBjYXNlIFJFQUNUX0VMRU1FTlRfVFlQRTpcbiAgICAgICAgc3dpdGNoICgoKG9iamVjdCA9IG9iamVjdC50eXBlKSwgb2JqZWN0KSkge1xuICAgICAgICAgIGNhc2UgUkVBQ1RfRlJBR01FTlRfVFlQRTpcbiAgICAgICAgICBjYXNlIFJFQUNUX1BST0ZJTEVSX1RZUEU6XG4gICAgICAgICAgY2FzZSBSRUFDVF9TVFJJQ1RfTU9ERV9UWVBFOlxuICAgICAgICAgIGNhc2UgUkVBQ1RfU1VTUEVOU0VfVFlQRTpcbiAgICAgICAgICBjYXNlIFJFQUNUX1NVU1BFTlNFX0xJU1RfVFlQRTpcbiAgICAgICAgICAgIHJldHVybiBvYmplY3Q7XG4gICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgIHN3aXRjaCAoKChvYmplY3QgPSBvYmplY3QgJiYgb2JqZWN0LiQkdHlwZW9mKSwgb2JqZWN0KSkge1xuICAgICAgICAgICAgICBjYXNlIFJFQUNUX0NPTlRFWFRfVFlQRTpcbiAgICAgICAgICAgICAgY2FzZSBSRUFDVF9GT1JXQVJEX1JFRl9UWVBFOlxuICAgICAgICAgICAgICBjYXNlIFJFQUNUX0xBWllfVFlQRTpcbiAgICAgICAgICAgICAgY2FzZSBSRUFDVF9NRU1PX1RZUEU6XG4gICAgICAgICAgICAgICAgcmV0dXJuIG9iamVjdDtcbiAgICAgICAgICAgICAgY2FzZSBSRUFDVF9DT05TVU1FUl9UWVBFOlxuICAgICAgICAgICAgICAgIHJldHVybiBvYmplY3Q7XG4gICAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgcmV0dXJuICQkdHlwZW9mO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICBjYXNlIFJFQUNUX1BPUlRBTF9UWVBFOlxuICAgICAgICByZXR1cm4gJCR0eXBlb2Y7XG4gICAgfVxuICB9XG59XG5leHBvcnRzLkNvbnRleHRDb25zdW1lciA9IFJFQUNUX0NPTlNVTUVSX1RZUEU7XG5leHBvcnRzLkNvbnRleHRQcm92aWRlciA9IFJFQUNUX0NPTlRFWFRfVFlQRTtcbmV4cG9ydHMuRWxlbWVudCA9IFJFQUNUX0VMRU1FTlRfVFlQRTtcbmV4cG9ydHMuRm9yd2FyZFJlZiA9IFJFQUNUX0ZPUldBUkRfUkVGX1RZUEU7XG5leHBvcnRzLkZyYWdtZW50ID0gUkVBQ1RfRlJBR01FTlRfVFlQRTtcbmV4cG9ydHMuTGF6eSA9IFJFQUNUX0xBWllfVFlQRTtcbmV4cG9ydHMuTWVtbyA9IFJFQUNUX01FTU9fVFlQRTtcbmV4cG9ydHMuUG9ydGFsID0gUkVBQ1RfUE9SVEFMX1RZUEU7XG5leHBvcnRzLlByb2ZpbGVyID0gUkVBQ1RfUFJPRklMRVJfVFlQRTtcbmV4cG9ydHMuU3RyaWN0TW9kZSA9IFJFQUNUX1NUUklDVF9NT0RFX1RZUEU7XG5leHBvcnRzLlN1c3BlbnNlID0gUkVBQ1RfU1VTUEVOU0VfVFlQRTtcbmV4cG9ydHMuU3VzcGVuc2VMaXN0ID0gUkVBQ1RfU1VTUEVOU0VfTElTVF9UWVBFO1xuZXhwb3J0cy5pc0NvbnRleHRDb25zdW1lciA9IGZ1bmN0aW9uIChvYmplY3QpIHtcbiAgcmV0dXJuIHR5cGVPZihvYmplY3QpID09PSBSRUFDVF9DT05TVU1FUl9UWVBFO1xufTtcbmV4cG9ydHMuaXNDb250ZXh0UHJvdmlkZXIgPSBmdW5jdGlvbiAob2JqZWN0KSB7XG4gIHJldHVybiB0eXBlT2Yob2JqZWN0KSA9PT0gUkVBQ1RfQ09OVEVYVF9UWVBFO1xufTtcbmV4cG9ydHMuaXNFbGVtZW50ID0gZnVuY3Rpb24gKG9iamVjdCkge1xuICByZXR1cm4gKFxuICAgIFwib2JqZWN0XCIgPT09IHR5cGVvZiBvYmplY3QgJiZcbiAgICBudWxsICE9PSBvYmplY3QgJiZcbiAgICBvYmplY3QuJCR0eXBlb2YgPT09IFJFQUNUX0VMRU1FTlRfVFlQRVxuICApO1xufTtcbmV4cG9ydHMuaXNGb3J3YXJkUmVmID0gZnVuY3Rpb24gKG9iamVjdCkge1xuICByZXR1cm4gdHlwZU9mKG9iamVjdCkgPT09IFJFQUNUX0ZPUldBUkRfUkVGX1RZUEU7XG59O1xuZXhwb3J0cy5pc0ZyYWdtZW50ID0gZnVuY3Rpb24gKG9iamVjdCkge1xuICByZXR1cm4gdHlwZU9mKG9iamVjdCkgPT09IFJFQUNUX0ZSQUdNRU5UX1RZUEU7XG59O1xuZXhwb3J0cy5pc0xhenkgPSBmdW5jdGlvbiAob2JqZWN0KSB7XG4gIHJldHVybiB0eXBlT2Yob2JqZWN0KSA9PT0gUkVBQ1RfTEFaWV9UWVBFO1xufTtcbmV4cG9ydHMuaXNNZW1vID0gZnVuY3Rpb24gKG9iamVjdCkge1xuICByZXR1cm4gdHlwZU9mKG9iamVjdCkgPT09IFJFQUNUX01FTU9fVFlQRTtcbn07XG5leHBvcnRzLmlzUG9ydGFsID0gZnVuY3Rpb24gKG9iamVjdCkge1xuICByZXR1cm4gdHlwZU9mKG9iamVjdCkgPT09IFJFQUNUX1BPUlRBTF9UWVBFO1xufTtcbmV4cG9ydHMuaXNQcm9maWxlciA9IGZ1bmN0aW9uIChvYmplY3QpIHtcbiAgcmV0dXJuIHR5cGVPZihvYmplY3QpID09PSBSRUFDVF9QUk9GSUxFUl9UWVBFO1xufTtcbmV4cG9ydHMuaXNTdHJpY3RNb2RlID0gZnVuY3Rpb24gKG9iamVjdCkge1xuICByZXR1cm4gdHlwZU9mKG9iamVjdCkgPT09IFJFQUNUX1NUUklDVF9NT0RFX1RZUEU7XG59O1xuZXhwb3J0cy5pc1N1c3BlbnNlID0gZnVuY3Rpb24gKG9iamVjdCkge1xuICByZXR1cm4gdHlwZU9mKG9iamVjdCkgPT09IFJFQUNUX1NVU1BFTlNFX1RZUEU7XG59O1xuZXhwb3J0cy5pc1N1c3BlbnNlTGlzdCA9IGZ1bmN0aW9uIChvYmplY3QpIHtcbiAgcmV0dXJuIHR5cGVPZihvYmplY3QpID09PSBSRUFDVF9TVVNQRU5TRV9MSVNUX1RZUEU7XG59O1xuZXhwb3J0cy5pc1ZhbGlkRWxlbWVudFR5cGUgPSBmdW5jdGlvbiAodHlwZSkge1xuICByZXR1cm4gXCJzdHJpbmdcIiA9PT0gdHlwZW9mIHR5cGUgfHxcbiAgICBcImZ1bmN0aW9uXCIgPT09IHR5cGVvZiB0eXBlIHx8XG4gICAgdHlwZSA9PT0gUkVBQ1RfRlJBR01FTlRfVFlQRSB8fFxuICAgIHR5cGUgPT09IFJFQUNUX1BST0ZJTEVSX1RZUEUgfHxcbiAgICB0eXBlID09PSBSRUFDVF9TVFJJQ1RfTU9ERV9UWVBFIHx8XG4gICAgdHlwZSA9PT0gUkVBQ1RfU1VTUEVOU0VfVFlQRSB8fFxuICAgIHR5cGUgPT09IFJFQUNUX1NVU1BFTlNFX0xJU1RfVFlQRSB8fFxuICAgIHR5cGUgPT09IFJFQUNUX09GRlNDUkVFTl9UWVBFIHx8XG4gICAgKFwib2JqZWN0XCIgPT09IHR5cGVvZiB0eXBlICYmXG4gICAgICBudWxsICE9PSB0eXBlICYmXG4gICAgICAodHlwZS4kJHR5cGVvZiA9PT0gUkVBQ1RfTEFaWV9UWVBFIHx8XG4gICAgICAgIHR5cGUuJCR0eXBlb2YgPT09IFJFQUNUX01FTU9fVFlQRSB8fFxuICAgICAgICB0eXBlLiQkdHlwZW9mID09PSBSRUFDVF9DT05URVhUX1RZUEUgfHxcbiAgICAgICAgdHlwZS4kJHR5cGVvZiA9PT0gUkVBQ1RfQ09OU1VNRVJfVFlQRSB8fFxuICAgICAgICB0eXBlLiQkdHlwZW9mID09PSBSRUFDVF9GT1JXQVJEX1JFRl9UWVBFIHx8XG4gICAgICAgIHR5cGUuJCR0eXBlb2YgPT09IFJFQUNUX0NMSUVOVF9SRUZFUkVOQ0UgfHxcbiAgICAgICAgdm9pZCAwICE9PSB0eXBlLmdldE1vZHVsZUlkKSlcbiAgICA/ICEwXG4gICAgOiAhMTtcbn07XG5leHBvcnRzLnR5cGVPZiA9IHR5cGVPZjtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///54405\n')},54566:function(__unused_webpack_module,__unused_webpack_exports,__webpack_require__){eval("//! moment.js locale configuration\n//! locale : Nynorsk [nn]\n//! authors : https://github.com/mechuwind\n//! Stephen Ramthun : https://github.com/stephenramthun\n\n;(function (global, factory) {\n true ? factory(__webpack_require__(95093)) :\n 0\n}(this, (function (moment) { 'use strict';\n\n //! moment.js locale configuration\n\n var nn = moment.defineLocale('nn', {\n months: 'januar_februar_mars_april_mai_juni_juli_august_september_oktober_november_desember'.split(\n '_'\n ),\n monthsShort:\n 'jan._feb._mars_apr._mai_juni_juli_aug._sep._okt._nov._des.'.split('_'),\n monthsParseExact: true,\n weekdays: 'sundag_måndag_tysdag_onsdag_torsdag_fredag_laurdag'.split('_'),\n weekdaysShort: 'su._må._ty._on._to._fr._lau.'.split('_'),\n weekdaysMin: 'su_må_ty_on_to_fr_la'.split('_'),\n weekdaysParseExact: true,\n longDateFormat: {\n LT: 'HH:mm',\n LTS: 'HH:mm:ss',\n L: 'DD.MM.YYYY',\n LL: 'D. MMMM YYYY',\n LLL: 'D. MMMM YYYY [kl.] H:mm',\n LLLL: 'dddd D. MMMM YYYY [kl.] HH:mm',\n },\n calendar: {\n sameDay: '[I dag klokka] LT',\n nextDay: '[I morgon klokka] LT',\n nextWeek: 'dddd [klokka] LT',\n lastDay: '[I går klokka] LT',\n lastWeek: '[Føregåande] dddd [klokka] LT',\n sameElse: 'L',\n },\n relativeTime: {\n future: 'om %s',\n past: '%s sidan',\n s: 'nokre sekund',\n ss: '%d sekund',\n m: 'eit minutt',\n mm: '%d minutt',\n h: 'ein time',\n hh: '%d timar',\n d: 'ein dag',\n dd: '%d dagar',\n w: 'ei veke',\n ww: '%d veker',\n M: 'ein månad',\n MM: '%d månader',\n y: 'eit år',\n yy: '%d år',\n },\n dayOfMonthOrdinalParse: /\\d{1,2}\\./,\n ordinal: '%d.',\n week: {\n dow: 1, // Monday is the first day of the week.\n doy: 4, // The week that contains Jan 4th is the first week of the year.\n },\n });\n\n return nn;\n\n})));\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNTQ1NjYuanMiLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL2l0Zy1uZXh0Z2VuLWZyb250ZW5kLy4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvbm4uanM/Yjg0YyJdLCJzb3VyY2VzQ29udGVudCI6WyIvLyEgbW9tZW50LmpzIGxvY2FsZSBjb25maWd1cmF0aW9uXG4vLyEgbG9jYWxlIDogTnlub3JzayBbbm5dXG4vLyEgYXV0aG9ycyA6IGh0dHBzOi8vZ2l0aHViLmNvbS9tZWNodXdpbmRcbi8vISAgICAgICAgICAgU3RlcGhlbiBSYW10aHVuIDogaHR0cHM6Ly9naXRodWIuY29tL3N0ZXBoZW5yYW10aHVuXG5cbjsoZnVuY3Rpb24gKGdsb2JhbCwgZmFjdG9yeSkge1xuICAgdHlwZW9mIGV4cG9ydHMgPT09ICdvYmplY3QnICYmIHR5cGVvZiBtb2R1bGUgIT09ICd1bmRlZmluZWQnXG4gICAgICAgJiYgdHlwZW9mIHJlcXVpcmUgPT09ICdmdW5jdGlvbicgPyBmYWN0b3J5KHJlcXVpcmUoJy4uL21vbWVudCcpKSA6XG4gICB0eXBlb2YgZGVmaW5lID09PSAnZnVuY3Rpb24nICYmIGRlZmluZS5hbWQgPyBkZWZpbmUoWycuLi9tb21lbnQnXSwgZmFjdG9yeSkgOlxuICAgZmFjdG9yeShnbG9iYWwubW9tZW50KVxufSh0aGlzLCAoZnVuY3Rpb24gKG1vbWVudCkgeyAndXNlIHN0cmljdCc7XG5cbiAgICAvLyEgbW9tZW50LmpzIGxvY2FsZSBjb25maWd1cmF0aW9uXG5cbiAgICB2YXIgbm4gPSBtb21lbnQuZGVmaW5lTG9jYWxlKCdubicsIHtcbiAgICAgICAgbW9udGhzOiAnamFudWFyX2ZlYnJ1YXJfbWFyc19hcHJpbF9tYWlfanVuaV9qdWxpX2F1Z3VzdF9zZXB0ZW1iZXJfb2t0b2Jlcl9ub3ZlbWJlcl9kZXNlbWJlcicuc3BsaXQoXG4gICAgICAgICAgICAnXydcbiAgICAgICAgKSxcbiAgICAgICAgbW9udGhzU2hvcnQ6XG4gICAgICAgICAgICAnamFuLl9mZWIuX21hcnNfYXByLl9tYWlfanVuaV9qdWxpX2F1Zy5fc2VwLl9va3QuX25vdi5fZGVzLicuc3BsaXQoJ18nKSxcbiAgICAgICAgbW9udGhzUGFyc2VFeGFjdDogdHJ1ZSxcbiAgICAgICAgd2Vla2RheXM6ICdzdW5kYWdfbcOlbmRhZ190eXNkYWdfb25zZGFnX3RvcnNkYWdfZnJlZGFnX2xhdXJkYWcnLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzU2hvcnQ6ICdzdS5fbcOlLl90eS5fb24uX3RvLl9mci5fbGF1Licuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXNNaW46ICdzdV9tw6VfdHlfb25fdG9fZnJfbGEnLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzUGFyc2VFeGFjdDogdHJ1ZSxcbiAgICAgICAgbG9uZ0RhdGVGb3JtYXQ6IHtcbiAgICAgICAgICAgIExUOiAnSEg6bW0nLFxuICAgICAgICAgICAgTFRTOiAnSEg6bW06c3MnLFxuICAgICAgICAgICAgTDogJ0RELk1NLllZWVknLFxuICAgICAgICAgICAgTEw6ICdELiBNTU1NIFlZWVknLFxuICAgICAgICAgICAgTExMOiAnRC4gTU1NTSBZWVlZIFtrbC5dIEg6bW0nLFxuICAgICAgICAgICAgTExMTDogJ2RkZGQgRC4gTU1NTSBZWVlZIFtrbC5dIEhIOm1tJyxcbiAgICAgICAgfSxcbiAgICAgICAgY2FsZW5kYXI6IHtcbiAgICAgICAgICAgIHNhbWVEYXk6ICdbSSBkYWcga2xva2thXSBMVCcsXG4gICAgICAgICAgICBuZXh0RGF5OiAnW0kgbW9yZ29uIGtsb2trYV0gTFQnLFxuICAgICAgICAgICAgbmV4dFdlZWs6ICdkZGRkIFtrbG9ra2FdIExUJyxcbiAgICAgICAgICAgIGxhc3REYXk6ICdbSSBnw6VyIGtsb2trYV0gTFQnLFxuICAgICAgICAgICAgbGFzdFdlZWs6ICdbRsO4cmVnw6VhbmRlXSBkZGRkIFtrbG9ra2FdIExUJyxcbiAgICAgICAgICAgIHNhbWVFbHNlOiAnTCcsXG4gICAgICAgIH0sXG4gICAgICAgIHJlbGF0aXZlVGltZToge1xuICAgICAgICAgICAgZnV0dXJlOiAnb20gJXMnLFxuICAgICAgICAgICAgcGFzdDogJyVzIHNpZGFuJyxcbiAgICAgICAgICAgIHM6ICdub2tyZSBzZWt1bmQnLFxuICAgICAgICAgICAgc3M6ICclZCBzZWt1bmQnLFxuICAgICAgICAgICAgbTogJ2VpdCBtaW51dHQnLFxuICAgICAgICAgICAgbW06ICclZCBtaW51dHQnLFxuICAgICAgICAgICAgaDogJ2VpbiB0aW1lJyxcbiAgICAgICAgICAgIGhoOiAnJWQgdGltYXInLFxuICAgICAgICAgICAgZDogJ2VpbiBkYWcnLFxuICAgICAgICAgICAgZGQ6ICclZCBkYWdhcicsXG4gICAgICAgICAgICB3OiAnZWkgdmVrZScsXG4gICAgICAgICAgICB3dzogJyVkIHZla2VyJyxcbiAgICAgICAgICAgIE06ICdlaW4gbcOlbmFkJyxcbiAgICAgICAgICAgIE1NOiAnJWQgbcOlbmFkZXInLFxuICAgICAgICAgICAgeTogJ2VpdCDDpXInLFxuICAgICAgICAgICAgeXk6ICclZCDDpXInLFxuICAgICAgICB9LFxuICAgICAgICBkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOiAvXFxkezEsMn1cXC4vLFxuICAgICAgICBvcmRpbmFsOiAnJWQuJyxcbiAgICAgICAgd2Vlazoge1xuICAgICAgICAgICAgZG93OiAxLCAvLyBNb25kYXkgaXMgdGhlIGZpcnN0IGRheSBvZiB0aGUgd2Vlay5cbiAgICAgICAgICAgIGRveTogNCwgLy8gVGhlIHdlZWsgdGhhdCBjb250YWlucyBKYW4gNHRoIGlzIHRoZSBmaXJzdCB3ZWVrIG9mIHRoZSB5ZWFyLlxuICAgICAgICB9LFxuICAgIH0pO1xuXG4gICAgcmV0dXJuIG5uO1xuXG59KSkpO1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///54566\n")},54691:function(__unused_webpack_module,__unused_webpack_exports,__webpack_require__){eval("//! moment.js locale configuration\n//! locale : Greek [el]\n//! author : Aggelos Karalias : https://github.com/mehiel\n\n;(function (global, factory) {\n true ? factory(__webpack_require__(95093)) :\n 0\n}(this, (function (moment) { 'use strict';\n\n //! moment.js locale configuration\n\n function isFunction(input) {\n return (\n (typeof Function !== 'undefined' && input instanceof Function) ||\n Object.prototype.toString.call(input) === '[object Function]'\n );\n }\n\n var el = moment.defineLocale('el', {\n monthsNominativeEl:\n 'Ιανουάριος_Φεβρουάριος_Μάρτιος_Απρίλιος_Μάιος_Ιούνιος_Ιούλιος_Αύγουστος_Σεπτέμβριος_Οκτώβριος_Νοέμβριος_Δεκέμβριος'.split(\n '_'\n ),\n monthsGenitiveEl:\n 'Ιανουαρίου_Φεβρουαρίου_Μαρτίου_Απριλίου_Μαΐου_Ιουνίου_Ιουλίου_Αυγούστου_Σεπτεμβρίου_Οκτωβρίου_Νοεμβρίου_Δεκεμβρίου'.split(\n '_'\n ),\n months: function (momentToFormat, format) {\n if (!momentToFormat) {\n return this._monthsNominativeEl;\n } else if (\n typeof format === 'string' &&\n /D/.test(format.substring(0, format.indexOf('MMMM')))\n ) {\n // if there is a day number before 'MMMM'\n return this._monthsGenitiveEl[momentToFormat.month()];\n } else {\n return this._monthsNominativeEl[momentToFormat.month()];\n }\n },\n monthsShort: 'Ιαν_Φεβ_Μαρ_Απρ_Μαϊ_Ιουν_Ιουλ_Αυγ_Σεπ_Οκτ_Νοε_Δεκ'.split('_'),\n weekdays: 'Κυριακή_Δευτέρα_Τρίτη_Τετάρτη_Πέμπτη_Παρασκευή_Σάββατο'.split(\n '_'\n ),\n weekdaysShort: 'Κυρ_Δευ_Τρι_Τετ_Πεμ_Παρ_Σαβ'.split('_'),\n weekdaysMin: 'Κυ_Δε_Τρ_Τε_Πε_Πα_Σα'.split('_'),\n meridiem: function (hours, minutes, isLower) {\n if (hours > 11) {\n return isLower ? 'μμ' : 'ΜΜ';\n } else {\n return isLower ? 'πμ' : 'ΠΜ';\n }\n },\n isPM: function (input) {\n return (input + '').toLowerCase()[0] === 'μ';\n },\n meridiemParse: /[ΠΜ]\\.?Μ?\\.?/i,\n longDateFormat: {\n LT: 'h:mm A',\n LTS: 'h:mm:ss A',\n L: 'DD/MM/YYYY',\n LL: 'D MMMM YYYY',\n LLL: 'D MMMM YYYY h:mm A',\n LLLL: 'dddd, D MMMM YYYY h:mm A',\n },\n calendarEl: {\n sameDay: '[Σήμερα {}] LT',\n nextDay: '[Αύριο {}] LT',\n nextWeek: 'dddd [{}] LT',\n lastDay: '[Χθες {}] LT',\n lastWeek: function () {\n switch (this.day()) {\n case 6:\n return '[το προηγούμενο] dddd [{}] LT';\n default:\n return '[την προηγούμενη] dddd [{}] LT';\n }\n },\n sameElse: 'L',\n },\n calendar: function (key, mom) {\n var output = this._calendarEl[key],\n hours = mom && mom.hours();\n if (isFunction(output)) {\n output = output.apply(mom);\n }\n return output.replace('{}', hours % 12 === 1 ? 'στη' : 'στις');\n },\n relativeTime: {\n future: 'σε %s',\n past: '%s πριν',\n s: 'λίγα δευτερόλεπτα',\n ss: '%d δευτερόλεπτα',\n m: 'ένα λεπτό',\n mm: '%d λεπτά',\n h: 'μία ώρα',\n hh: '%d ώρες',\n d: 'μία μέρα',\n dd: '%d μέρες',\n M: 'ένας μήνας',\n MM: '%d μήνες',\n y: 'ένας χρόνος',\n yy: '%d χρόνια',\n },\n dayOfMonthOrdinalParse: /\\d{1,2}η/,\n ordinal: '%dη',\n week: {\n dow: 1, // Monday is the first day of the week.\n doy: 4, // The week that contains Jan 4st is the first week of the year.\n },\n });\n\n return el;\n\n})));\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNTQ2OTEuanMiLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9pdGctbmV4dGdlbi1mcm9udGVuZC8uL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL2VsLmpzPzhkNDciXSwic291cmNlc0NvbnRlbnQiOlsiLy8hIG1vbWVudC5qcyBsb2NhbGUgY29uZmlndXJhdGlvblxuLy8hIGxvY2FsZSA6IEdyZWVrIFtlbF1cbi8vISBhdXRob3IgOiBBZ2dlbG9zIEthcmFsaWFzIDogaHR0cHM6Ly9naXRodWIuY29tL21laGllbFxuXG47KGZ1bmN0aW9uIChnbG9iYWwsIGZhY3RvcnkpIHtcbiAgIHR5cGVvZiBleHBvcnRzID09PSAnb2JqZWN0JyAmJiB0eXBlb2YgbW9kdWxlICE9PSAndW5kZWZpbmVkJ1xuICAgICAgICYmIHR5cGVvZiByZXF1aXJlID09PSAnZnVuY3Rpb24nID8gZmFjdG9yeShyZXF1aXJlKCcuLi9tb21lbnQnKSkgOlxuICAgdHlwZW9mIGRlZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiBkZWZpbmUuYW1kID8gZGVmaW5lKFsnLi4vbW9tZW50J10sIGZhY3RvcnkpIDpcbiAgIGZhY3RvcnkoZ2xvYmFsLm1vbWVudClcbn0odGhpcywgKGZ1bmN0aW9uIChtb21lbnQpIHsgJ3VzZSBzdHJpY3QnO1xuXG4gICAgLy8hIG1vbWVudC5qcyBsb2NhbGUgY29uZmlndXJhdGlvblxuXG4gICAgZnVuY3Rpb24gaXNGdW5jdGlvbihpbnB1dCkge1xuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgKHR5cGVvZiBGdW5jdGlvbiAhPT0gJ3VuZGVmaW5lZCcgJiYgaW5wdXQgaW5zdGFuY2VvZiBGdW5jdGlvbikgfHxcbiAgICAgICAgICAgIE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChpbnB1dCkgPT09ICdbb2JqZWN0IEZ1bmN0aW9uXSdcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICB2YXIgZWwgPSBtb21lbnQuZGVmaW5lTG9jYWxlKCdlbCcsIHtcbiAgICAgICAgbW9udGhzTm9taW5hdGl2ZUVsOlxuICAgICAgICAgICAgJ86ZzrHOvc6/z4XOrM+BzrnOv8+CX86mzrXOss+Bzr/Phc6sz4HOuc6/z4JfzpzOrM+Bz4TOuc6/z4JfzpHPgM+Bzq/Ou865zr/Pgl/OnM6szrnOv8+CX86Zzr/Pjc69zrnOv8+CX86Zzr/Pjc67zrnOv8+CX86Rz43Os86/z4XPg8+Ezr/Pgl/Oo861z4DPhM6tzrzOss+BzrnOv8+CX86fzrrPhM+OzrLPgc65zr/Pgl/Onc6/zq3OvM6yz4HOuc6/z4JfzpTOtc66zq3OvM6yz4HOuc6/z4InLnNwbGl0KFxuICAgICAgICAgICAgICAgICdfJ1xuICAgICAgICAgICAgKSxcbiAgICAgICAgbW9udGhzR2VuaXRpdmVFbDpcbiAgICAgICAgICAgICfOmc6xzr3Ov8+FzrHPgc6vzr/PhV/Ops61zrLPgc6/z4XOsc+Bzq/Ov8+FX86czrHPgc+Ezq/Ov8+FX86Rz4DPgc65zrvOr86/z4VfzpzOsc6Qzr/PhV/Omc6/z4XOvc6vzr/PhV/Omc6/z4XOu86vzr/PhV/Okc+FzrPOv8+Nz4PPhM6/z4VfzqPOtc+Az4TOtc68zrLPgc6vzr/PhV/On866z4TPic6yz4HOr86/z4Vfzp3Ov861zrzOss+Bzq/Ov8+FX86UzrXOus61zrzOss+Bzq/Ov8+FJy5zcGxpdChcbiAgICAgICAgICAgICAgICAnXydcbiAgICAgICAgICAgICksXG4gICAgICAgIG1vbnRoczogZnVuY3Rpb24gKG1vbWVudFRvRm9ybWF0LCBmb3JtYXQpIHtcbiAgICAgICAgICAgIGlmICghbW9tZW50VG9Gb3JtYXQpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5fbW9udGhzTm9taW5hdGl2ZUVsO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChcbiAgICAgICAgICAgICAgICB0eXBlb2YgZm9ybWF0ID09PSAnc3RyaW5nJyAmJlxuICAgICAgICAgICAgICAgIC9ELy50ZXN0KGZvcm1hdC5zdWJzdHJpbmcoMCwgZm9ybWF0LmluZGV4T2YoJ01NTU0nKSkpXG4gICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICAvLyBpZiB0aGVyZSBpcyBhIGRheSBudW1iZXIgYmVmb3JlICdNTU1NJ1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl9tb250aHNHZW5pdGl2ZUVsW21vbWVudFRvRm9ybWF0Lm1vbnRoKCldO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5fbW9udGhzTm9taW5hdGl2ZUVsW21vbWVudFRvRm9ybWF0Lm1vbnRoKCldO1xuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBtb250aHNTaG9ydDogJ86ZzrHOvV/Ops61zrJfzpzOsc+BX86Rz4DPgV/OnM6xz4pfzpnOv8+Fzr1fzpnOv8+FzrtfzpHPhc6zX86jzrXPgF/On866z4Rfzp3Ov861X86UzrXOuicuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXM6ICfOms+Fz4HOuc6xzrrOrl/OlM61z4XPhM6tz4HOsV/OpM+Bzq/PhM63X86kzrXPhM6sz4HPhM63X86gzq3OvM+Az4TOt1/OoM6xz4HOsc+DzrrOtc+Fzq5fzqPOrM6yzrLOsc+Ezr8nLnNwbGl0KFxuICAgICAgICAgICAgJ18nXG4gICAgICAgICksXG4gICAgICAgIHdlZWtkYXlzU2hvcnQ6ICfOms+Fz4FfzpTOtc+FX86kz4HOuV/OpM61z4RfzqDOtc68X86gzrHPgV/Oo86xzrInLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzTWluOiAnzprPhV/OlM61X86kz4FfzqTOtV/OoM61X86gzrFfzqPOsScuc3BsaXQoJ18nKSxcbiAgICAgICAgbWVyaWRpZW06IGZ1bmN0aW9uIChob3VycywgbWludXRlcywgaXNMb3dlcikge1xuICAgICAgICAgICAgaWYgKGhvdXJzID4gMTEpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gaXNMb3dlciA/ICfOvM68JyA6ICfOnM6cJztcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGlzTG93ZXIgPyAnz4DOvCcgOiAnzqDOnCc7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIGlzUE06IGZ1bmN0aW9uIChpbnB1dCkge1xuICAgICAgICAgICAgcmV0dXJuIChpbnB1dCArICcnKS50b0xvd2VyQ2FzZSgpWzBdID09PSAnzrwnO1xuICAgICAgICB9LFxuICAgICAgICBtZXJpZGllbVBhcnNlOiAvW86gzpxdXFwuP86cP1xcLj8vaSxcbiAgICAgICAgbG9uZ0RhdGVGb3JtYXQ6IHtcbiAgICAgICAgICAgIExUOiAnaDptbSBBJyxcbiAgICAgICAgICAgIExUUzogJ2g6bW06c3MgQScsXG4gICAgICAgICAgICBMOiAnREQvTU0vWVlZWScsXG4gICAgICAgICAgICBMTDogJ0QgTU1NTSBZWVlZJyxcbiAgICAgICAgICAgIExMTDogJ0QgTU1NTSBZWVlZIGg6bW0gQScsXG4gICAgICAgICAgICBMTExMOiAnZGRkZCwgRCBNTU1NIFlZWVkgaDptbSBBJyxcbiAgICAgICAgfSxcbiAgICAgICAgY2FsZW5kYXJFbDoge1xuICAgICAgICAgICAgc2FtZURheTogJ1vOo86uzrzOtc+BzrEge31dIExUJyxcbiAgICAgICAgICAgIG5leHREYXk6ICdbzpHPjc+BzrnOvyB7fV0gTFQnLFxuICAgICAgICAgICAgbmV4dFdlZWs6ICdkZGRkIFt7fV0gTFQnLFxuICAgICAgICAgICAgbGFzdERheTogJ1vOp864zrXPgiB7fV0gTFQnLFxuICAgICAgICAgICAgbGFzdFdlZWs6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICBzd2l0Y2ggKHRoaXMuZGF5KCkpIHtcbiAgICAgICAgICAgICAgICAgICAgY2FzZSA2OlxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICdbz4TOvyDPgM+Bzr/Ot86zzr/Pjc68zrXOvc6/XSBkZGRkIFt7fV0gTFQnO1xuICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICdbz4TOt869IM+Az4HOv863zrPOv8+NzrzOtc69zrddIGRkZGQgW3t9XSBMVCc7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHNhbWVFbHNlOiAnTCcsXG4gICAgICAgIH0sXG4gICAgICAgIGNhbGVuZGFyOiBmdW5jdGlvbiAoa2V5LCBtb20pIHtcbiAgICAgICAgICAgIHZhciBvdXRwdXQgPSB0aGlzLl9jYWxlbmRhckVsW2tleV0sXG4gICAgICAgICAgICAgICAgaG91cnMgPSBtb20gJiYgbW9tLmhvdXJzKCk7XG4gICAgICAgICAgICBpZiAoaXNGdW5jdGlvbihvdXRwdXQpKSB7XG4gICAgICAgICAgICAgICAgb3V0cHV0ID0gb3V0cHV0LmFwcGx5KG1vbSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gb3V0cHV0LnJlcGxhY2UoJ3t9JywgaG91cnMgJSAxMiA9PT0gMSA/ICfPg8+EzrcnIDogJ8+Dz4TOuc+CJyk7XG4gICAgICAgIH0sXG4gICAgICAgIHJlbGF0aXZlVGltZToge1xuICAgICAgICAgICAgZnV0dXJlOiAnz4POtSAlcycsXG4gICAgICAgICAgICBwYXN0OiAnJXMgz4DPgc65zr0nLFxuICAgICAgICAgICAgczogJ867zq/Os86xIM60zrXPhc+EzrXPgc+MzrvOtc+Az4TOsScsXG4gICAgICAgICAgICBzczogJyVkIM60zrXPhc+EzrXPgc+MzrvOtc+Az4TOsScsXG4gICAgICAgICAgICBtOiAnzq3Ovc6xIM67zrXPgM+Ez4wnLFxuICAgICAgICAgICAgbW06ICclZCDOu861z4DPhM6sJyxcbiAgICAgICAgICAgIGg6ICfOvM6vzrEgz47Pgc6xJyxcbiAgICAgICAgICAgIGhoOiAnJWQgz47Pgc61z4InLFxuICAgICAgICAgICAgZDogJ868zq/OsSDOvM6tz4HOsScsXG4gICAgICAgICAgICBkZDogJyVkIM68zq3Pgc61z4InLFxuICAgICAgICAgICAgTTogJ86tzr3Osc+CIM68zq7Ovc6xz4InLFxuICAgICAgICAgICAgTU06ICclZCDOvM6uzr3Otc+CJyxcbiAgICAgICAgICAgIHk6ICfOrc69zrHPgiDPh8+Bz4zOvc6/z4InLFxuICAgICAgICAgICAgeXk6ICclZCDPh8+Bz4zOvc65zrEnLFxuICAgICAgICB9LFxuICAgICAgICBkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOiAvXFxkezEsMn3Oty8sXG4gICAgICAgIG9yZGluYWw6ICclZM63JyxcbiAgICAgICAgd2Vlazoge1xuICAgICAgICAgICAgZG93OiAxLCAvLyBNb25kYXkgaXMgdGhlIGZpcnN0IGRheSBvZiB0aGUgd2Vlay5cbiAgICAgICAgICAgIGRveTogNCwgLy8gVGhlIHdlZWsgdGhhdCBjb250YWlucyBKYW4gNHN0IGlzIHRoZSBmaXJzdCB3ZWVrIG9mIHRoZSB5ZWFyLlxuICAgICAgICB9LFxuICAgIH0pO1xuXG4gICAgcmV0dXJuIGVsO1xuXG59KSkpO1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///54691\n")},54697:function(__unused_webpack_module,__unused_webpack_exports,__webpack_require__){eval("//! moment.js locale configuration\n//! locale : German (Switzerland) [de-ch]\n//! author : sschueller : https://github.com/sschueller\n\n;(function (global, factory) {\n true ? factory(__webpack_require__(95093)) :\n 0\n}(this, (function (moment) { 'use strict';\n\n //! moment.js locale configuration\n\n function processRelativeTime(number, withoutSuffix, key, isFuture) {\n var format = {\n m: ['eine Minute', 'einer Minute'],\n h: ['eine Stunde', 'einer Stunde'],\n d: ['ein Tag', 'einem Tag'],\n dd: [number + ' Tage', number + ' Tagen'],\n w: ['eine Woche', 'einer Woche'],\n M: ['ein Monat', 'einem Monat'],\n MM: [number + ' Monate', number + ' Monaten'],\n y: ['ein Jahr', 'einem Jahr'],\n yy: [number + ' Jahre', number + ' Jahren'],\n };\n return withoutSuffix ? format[key][0] : format[key][1];\n }\n\n var deCh = moment.defineLocale('de-ch', {\n months: 'Januar_Februar_März_April_Mai_Juni_Juli_August_September_Oktober_November_Dezember'.split(\n '_'\n ),\n monthsShort:\n 'Jan._Feb._März_Apr._Mai_Juni_Juli_Aug._Sep._Okt._Nov._Dez.'.split('_'),\n monthsParseExact: true,\n weekdays:\n 'Sonntag_Montag_Dienstag_Mittwoch_Donnerstag_Freitag_Samstag'.split(\n '_'\n ),\n weekdaysShort: 'So_Mo_Di_Mi_Do_Fr_Sa'.split('_'),\n weekdaysMin: 'So_Mo_Di_Mi_Do_Fr_Sa'.split('_'),\n weekdaysParseExact: true,\n longDateFormat: {\n LT: 'HH:mm',\n LTS: 'HH:mm:ss',\n L: 'DD.MM.YYYY',\n LL: 'D. MMMM YYYY',\n LLL: 'D. MMMM YYYY HH:mm',\n LLLL: 'dddd, D. MMMM YYYY HH:mm',\n },\n calendar: {\n sameDay: '[heute um] LT [Uhr]',\n sameElse: 'L',\n nextDay: '[morgen um] LT [Uhr]',\n nextWeek: 'dddd [um] LT [Uhr]',\n lastDay: '[gestern um] LT [Uhr]',\n lastWeek: '[letzten] dddd [um] LT [Uhr]',\n },\n relativeTime: {\n future: 'in %s',\n past: 'vor %s',\n s: 'ein paar Sekunden',\n ss: '%d Sekunden',\n m: processRelativeTime,\n mm: '%d Minuten',\n h: processRelativeTime,\n hh: '%d Stunden',\n d: processRelativeTime,\n dd: processRelativeTime,\n w: processRelativeTime,\n ww: '%d Wochen',\n M: processRelativeTime,\n MM: processRelativeTime,\n y: processRelativeTime,\n yy: processRelativeTime,\n },\n dayOfMonthOrdinalParse: /\\d{1,2}\\./,\n ordinal: '%d.',\n week: {\n dow: 1, // Monday is the first day of the week.\n doy: 4, // The week that contains Jan 4th is the first week of the year.\n },\n });\n\n return deCh;\n\n})));\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNTQ2OTcuanMiLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9pdGctbmV4dGdlbi1mcm9udGVuZC8uL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL2RlLWNoLmpzP2JiNzEiXSwic291cmNlc0NvbnRlbnQiOlsiLy8hIG1vbWVudC5qcyBsb2NhbGUgY29uZmlndXJhdGlvblxuLy8hIGxvY2FsZSA6IEdlcm1hbiAoU3dpdHplcmxhbmQpIFtkZS1jaF1cbi8vISBhdXRob3IgOiBzc2NodWVsbGVyIDogaHR0cHM6Ly9naXRodWIuY29tL3NzY2h1ZWxsZXJcblxuOyhmdW5jdGlvbiAoZ2xvYmFsLCBmYWN0b3J5KSB7XG4gICB0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcgJiYgdHlwZW9mIG1vZHVsZSAhPT0gJ3VuZGVmaW5lZCdcbiAgICAgICAmJiB0eXBlb2YgcmVxdWlyZSA9PT0gJ2Z1bmN0aW9uJyA/IGZhY3RvcnkocmVxdWlyZSgnLi4vbW9tZW50JykpIDpcbiAgIHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgZGVmaW5lLmFtZCA/IGRlZmluZShbJy4uL21vbWVudCddLCBmYWN0b3J5KSA6XG4gICBmYWN0b3J5KGdsb2JhbC5tb21lbnQpXG59KHRoaXMsIChmdW5jdGlvbiAobW9tZW50KSB7ICd1c2Ugc3RyaWN0JztcblxuICAgIC8vISBtb21lbnQuanMgbG9jYWxlIGNvbmZpZ3VyYXRpb25cblxuICAgIGZ1bmN0aW9uIHByb2Nlc3NSZWxhdGl2ZVRpbWUobnVtYmVyLCB3aXRob3V0U3VmZml4LCBrZXksIGlzRnV0dXJlKSB7XG4gICAgICAgIHZhciBmb3JtYXQgPSB7XG4gICAgICAgICAgICBtOiBbJ2VpbmUgTWludXRlJywgJ2VpbmVyIE1pbnV0ZSddLFxuICAgICAgICAgICAgaDogWydlaW5lIFN0dW5kZScsICdlaW5lciBTdHVuZGUnXSxcbiAgICAgICAgICAgIGQ6IFsnZWluIFRhZycsICdlaW5lbSBUYWcnXSxcbiAgICAgICAgICAgIGRkOiBbbnVtYmVyICsgJyBUYWdlJywgbnVtYmVyICsgJyBUYWdlbiddLFxuICAgICAgICAgICAgdzogWydlaW5lIFdvY2hlJywgJ2VpbmVyIFdvY2hlJ10sXG4gICAgICAgICAgICBNOiBbJ2VpbiBNb25hdCcsICdlaW5lbSBNb25hdCddLFxuICAgICAgICAgICAgTU06IFtudW1iZXIgKyAnIE1vbmF0ZScsIG51bWJlciArICcgTW9uYXRlbiddLFxuICAgICAgICAgICAgeTogWydlaW4gSmFocicsICdlaW5lbSBKYWhyJ10sXG4gICAgICAgICAgICB5eTogW251bWJlciArICcgSmFocmUnLCBudW1iZXIgKyAnIEphaHJlbiddLFxuICAgICAgICB9O1xuICAgICAgICByZXR1cm4gd2l0aG91dFN1ZmZpeCA/IGZvcm1hdFtrZXldWzBdIDogZm9ybWF0W2tleV1bMV07XG4gICAgfVxuXG4gICAgdmFyIGRlQ2ggPSBtb21lbnQuZGVmaW5lTG9jYWxlKCdkZS1jaCcsIHtcbiAgICAgICAgbW9udGhzOiAnSmFudWFyX0ZlYnJ1YXJfTcOkcnpfQXByaWxfTWFpX0p1bmlfSnVsaV9BdWd1c3RfU2VwdGVtYmVyX09rdG9iZXJfTm92ZW1iZXJfRGV6ZW1iZXInLnNwbGl0KFxuICAgICAgICAgICAgJ18nXG4gICAgICAgICksXG4gICAgICAgIG1vbnRoc1Nob3J0OlxuICAgICAgICAgICAgJ0phbi5fRmViLl9Nw6Ryel9BcHIuX01haV9KdW5pX0p1bGlfQXVnLl9TZXAuX09rdC5fTm92Ll9EZXouJy5zcGxpdCgnXycpLFxuICAgICAgICBtb250aHNQYXJzZUV4YWN0OiB0cnVlLFxuICAgICAgICB3ZWVrZGF5czpcbiAgICAgICAgICAgICdTb25udGFnX01vbnRhZ19EaWVuc3RhZ19NaXR0d29jaF9Eb25uZXJzdGFnX0ZyZWl0YWdfU2Ftc3RhZycuc3BsaXQoXG4gICAgICAgICAgICAgICAgJ18nXG4gICAgICAgICAgICApLFxuICAgICAgICB3ZWVrZGF5c1Nob3J0OiAnU29fTW9fRGlfTWlfRG9fRnJfU2EnLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzTWluOiAnU29fTW9fRGlfTWlfRG9fRnJfU2EnLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzUGFyc2VFeGFjdDogdHJ1ZSxcbiAgICAgICAgbG9uZ0RhdGVGb3JtYXQ6IHtcbiAgICAgICAgICAgIExUOiAnSEg6bW0nLFxuICAgICAgICAgICAgTFRTOiAnSEg6bW06c3MnLFxuICAgICAgICAgICAgTDogJ0RELk1NLllZWVknLFxuICAgICAgICAgICAgTEw6ICdELiBNTU1NIFlZWVknLFxuICAgICAgICAgICAgTExMOiAnRC4gTU1NTSBZWVlZIEhIOm1tJyxcbiAgICAgICAgICAgIExMTEw6ICdkZGRkLCBELiBNTU1NIFlZWVkgSEg6bW0nLFxuICAgICAgICB9LFxuICAgICAgICBjYWxlbmRhcjoge1xuICAgICAgICAgICAgc2FtZURheTogJ1toZXV0ZSB1bV0gTFQgW1Vocl0nLFxuICAgICAgICAgICAgc2FtZUVsc2U6ICdMJyxcbiAgICAgICAgICAgIG5leHREYXk6ICdbbW9yZ2VuIHVtXSBMVCBbVWhyXScsXG4gICAgICAgICAgICBuZXh0V2VlazogJ2RkZGQgW3VtXSBMVCBbVWhyXScsXG4gICAgICAgICAgICBsYXN0RGF5OiAnW2dlc3Rlcm4gdW1dIExUIFtVaHJdJyxcbiAgICAgICAgICAgIGxhc3RXZWVrOiAnW2xldHp0ZW5dIGRkZGQgW3VtXSBMVCBbVWhyXScsXG4gICAgICAgIH0sXG4gICAgICAgIHJlbGF0aXZlVGltZToge1xuICAgICAgICAgICAgZnV0dXJlOiAnaW4gJXMnLFxuICAgICAgICAgICAgcGFzdDogJ3ZvciAlcycsXG4gICAgICAgICAgICBzOiAnZWluIHBhYXIgU2VrdW5kZW4nLFxuICAgICAgICAgICAgc3M6ICclZCBTZWt1bmRlbicsXG4gICAgICAgICAgICBtOiBwcm9jZXNzUmVsYXRpdmVUaW1lLFxuICAgICAgICAgICAgbW06ICclZCBNaW51dGVuJyxcbiAgICAgICAgICAgIGg6IHByb2Nlc3NSZWxhdGl2ZVRpbWUsXG4gICAgICAgICAgICBoaDogJyVkIFN0dW5kZW4nLFxuICAgICAgICAgICAgZDogcHJvY2Vzc1JlbGF0aXZlVGltZSxcbiAgICAgICAgICAgIGRkOiBwcm9jZXNzUmVsYXRpdmVUaW1lLFxuICAgICAgICAgICAgdzogcHJvY2Vzc1JlbGF0aXZlVGltZSxcbiAgICAgICAgICAgIHd3OiAnJWQgV29jaGVuJyxcbiAgICAgICAgICAgIE06IHByb2Nlc3NSZWxhdGl2ZVRpbWUsXG4gICAgICAgICAgICBNTTogcHJvY2Vzc1JlbGF0aXZlVGltZSxcbiAgICAgICAgICAgIHk6IHByb2Nlc3NSZWxhdGl2ZVRpbWUsXG4gICAgICAgICAgICB5eTogcHJvY2Vzc1JlbGF0aXZlVGltZSxcbiAgICAgICAgfSxcbiAgICAgICAgZGF5T2ZNb250aE9yZGluYWxQYXJzZTogL1xcZHsxLDJ9XFwuLyxcbiAgICAgICAgb3JkaW5hbDogJyVkLicsXG4gICAgICAgIHdlZWs6IHtcbiAgICAgICAgICAgIGRvdzogMSwgLy8gTW9uZGF5IGlzIHRoZSBmaXJzdCBkYXkgb2YgdGhlIHdlZWsuXG4gICAgICAgICAgICBkb3k6IDQsIC8vIFRoZSB3ZWVrIHRoYXQgY29udGFpbnMgSmFuIDR0aCBpcyB0aGUgZmlyc3Qgd2VlayBvZiB0aGUgeWVhci5cbiAgICAgICAgfSxcbiAgICB9KTtcblxuICAgIHJldHVybiBkZUNoO1xuXG59KSkpO1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///54697\n")},54903:function(__unused_webpack_module,__unused_webpack_exports,__webpack_require__){eval("//! moment.js locale configuration\n//! locale : Bambara [bm]\n//! author : Estelle Comment : https://github.com/estellecomment\n\n;(function (global, factory) {\n true ? factory(__webpack_require__(95093)) :\n 0\n}(this, (function (moment) { 'use strict';\n\n //! moment.js locale configuration\n\n var bm = moment.defineLocale('bm', {\n months: 'Zanwuyekalo_Fewuruyekalo_Marisikalo_Awirilikalo_Mɛkalo_Zuwɛnkalo_Zuluyekalo_Utikalo_Sɛtanburukalo_ɔkutɔburukalo_Nowanburukalo_Desanburukalo'.split(\n '_'\n ),\n monthsShort: 'Zan_Few_Mar_Awi_Mɛ_Zuw_Zul_Uti_Sɛt_ɔku_Now_Des'.split('_'),\n weekdays: 'Kari_Ntɛnɛn_Tarata_Araba_Alamisa_Juma_Sibiri'.split('_'),\n weekdaysShort: 'Kar_Ntɛ_Tar_Ara_Ala_Jum_Sib'.split('_'),\n weekdaysMin: 'Ka_Nt_Ta_Ar_Al_Ju_Si'.split('_'),\n longDateFormat: {\n LT: 'HH:mm',\n LTS: 'HH:mm:ss',\n L: 'DD/MM/YYYY',\n LL: 'MMMM [tile] D [san] YYYY',\n LLL: 'MMMM [tile] D [san] YYYY [lɛrɛ] HH:mm',\n LLLL: 'dddd MMMM [tile] D [san] YYYY [lɛrɛ] HH:mm',\n },\n calendar: {\n sameDay: '[Bi lɛrɛ] LT',\n nextDay: '[Sini lɛrɛ] LT',\n nextWeek: 'dddd [don lɛrɛ] LT',\n lastDay: '[Kunu lɛrɛ] LT',\n lastWeek: 'dddd [tɛmɛnen lɛrɛ] LT',\n sameElse: 'L',\n },\n relativeTime: {\n future: '%s kɔnɔ',\n past: 'a bɛ %s bɔ',\n s: 'sanga dama dama',\n ss: 'sekondi %d',\n m: 'miniti kelen',\n mm: 'miniti %d',\n h: 'lɛrɛ kelen',\n hh: 'lɛrɛ %d',\n d: 'tile kelen',\n dd: 'tile %d',\n M: 'kalo kelen',\n MM: 'kalo %d',\n y: 'san kelen',\n yy: 'san %d',\n },\n week: {\n dow: 1, // Monday is the first day of the week.\n doy: 4, // The week that contains Jan 4th is the first week of the year.\n },\n });\n\n return bm;\n\n})));\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNTQ5MDMuanMiLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vaXRnLW5leHRnZW4tZnJvbnRlbmQvLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9ibS5qcz9hN2ZhIl0sInNvdXJjZXNDb250ZW50IjpbIi8vISBtb21lbnQuanMgbG9jYWxlIGNvbmZpZ3VyYXRpb25cbi8vISBsb2NhbGUgOiBCYW1iYXJhIFtibV1cbi8vISBhdXRob3IgOiBFc3RlbGxlIENvbW1lbnQgOiBodHRwczovL2dpdGh1Yi5jb20vZXN0ZWxsZWNvbW1lbnRcblxuOyhmdW5jdGlvbiAoZ2xvYmFsLCBmYWN0b3J5KSB7XG4gICB0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcgJiYgdHlwZW9mIG1vZHVsZSAhPT0gJ3VuZGVmaW5lZCdcbiAgICAgICAmJiB0eXBlb2YgcmVxdWlyZSA9PT0gJ2Z1bmN0aW9uJyA/IGZhY3RvcnkocmVxdWlyZSgnLi4vbW9tZW50JykpIDpcbiAgIHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgZGVmaW5lLmFtZCA/IGRlZmluZShbJy4uL21vbWVudCddLCBmYWN0b3J5KSA6XG4gICBmYWN0b3J5KGdsb2JhbC5tb21lbnQpXG59KHRoaXMsIChmdW5jdGlvbiAobW9tZW50KSB7ICd1c2Ugc3RyaWN0JztcblxuICAgIC8vISBtb21lbnQuanMgbG9jYWxlIGNvbmZpZ3VyYXRpb25cblxuICAgIHZhciBibSA9IG1vbWVudC5kZWZpbmVMb2NhbGUoJ2JtJywge1xuICAgICAgICBtb250aHM6ICdaYW53dXlla2Fsb19GZXd1cnV5ZWthbG9fTWFyaXNpa2Fsb19Bd2lyaWxpa2Fsb19NyZtrYWxvX1p1d8mbbmthbG9fWnVsdXlla2Fsb19VdGlrYWxvX1PJm3RhbmJ1cnVrYWxvX8mUa3V0yZRidXJ1a2Fsb19Ob3dhbmJ1cnVrYWxvX0Rlc2FuYnVydWthbG8nLnNwbGl0KFxuICAgICAgICAgICAgJ18nXG4gICAgICAgICksXG4gICAgICAgIG1vbnRoc1Nob3J0OiAnWmFuX0Zld19NYXJfQXdpX03Jm19adXdfWnVsX1V0aV9TyZt0X8mUa3VfTm93X0Rlcycuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXM6ICdLYXJpX050yZtuyZtuX1RhcmF0YV9BcmFiYV9BbGFtaXNhX0p1bWFfU2liaXJpJy5zcGxpdCgnXycpLFxuICAgICAgICB3ZWVrZGF5c1Nob3J0OiAnS2FyX050yZtfVGFyX0FyYV9BbGFfSnVtX1NpYicuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXNNaW46ICdLYV9OdF9UYV9Bcl9BbF9KdV9TaScuc3BsaXQoJ18nKSxcbiAgICAgICAgbG9uZ0RhdGVGb3JtYXQ6IHtcbiAgICAgICAgICAgIExUOiAnSEg6bW0nLFxuICAgICAgICAgICAgTFRTOiAnSEg6bW06c3MnLFxuICAgICAgICAgICAgTDogJ0REL01NL1lZWVknLFxuICAgICAgICAgICAgTEw6ICdNTU1NIFt0aWxlXSBEIFtzYW5dIFlZWVknLFxuICAgICAgICAgICAgTExMOiAnTU1NTSBbdGlsZV0gRCBbc2FuXSBZWVlZIFtsyZtyyZtdIEhIOm1tJyxcbiAgICAgICAgICAgIExMTEw6ICdkZGRkIE1NTU0gW3RpbGVdIEQgW3Nhbl0gWVlZWSBbbMmbcsmbXSBISDptbScsXG4gICAgICAgIH0sXG4gICAgICAgIGNhbGVuZGFyOiB7XG4gICAgICAgICAgICBzYW1lRGF5OiAnW0JpIGzJm3LJm10gTFQnLFxuICAgICAgICAgICAgbmV4dERheTogJ1tTaW5pIGzJm3LJm10gTFQnLFxuICAgICAgICAgICAgbmV4dFdlZWs6ICdkZGRkIFtkb24gbMmbcsmbXSBMVCcsXG4gICAgICAgICAgICBsYXN0RGF5OiAnW0t1bnUgbMmbcsmbXSBMVCcsXG4gICAgICAgICAgICBsYXN0V2VlazogJ2RkZGQgW3TJm23Jm25lbiBsyZtyyZtdIExUJyxcbiAgICAgICAgICAgIHNhbWVFbHNlOiAnTCcsXG4gICAgICAgIH0sXG4gICAgICAgIHJlbGF0aXZlVGltZToge1xuICAgICAgICAgICAgZnV0dXJlOiAnJXMga8mUbsmUJyxcbiAgICAgICAgICAgIHBhc3Q6ICdhIGLJmyAlcyBiyZQnLFxuICAgICAgICAgICAgczogJ3NhbmdhIGRhbWEgZGFtYScsXG4gICAgICAgICAgICBzczogJ3Nla29uZGkgJWQnLFxuICAgICAgICAgICAgbTogJ21pbml0aSBrZWxlbicsXG4gICAgICAgICAgICBtbTogJ21pbml0aSAlZCcsXG4gICAgICAgICAgICBoOiAnbMmbcsmbIGtlbGVuJyxcbiAgICAgICAgICAgIGhoOiAnbMmbcsmbICVkJyxcbiAgICAgICAgICAgIGQ6ICd0aWxlIGtlbGVuJyxcbiAgICAgICAgICAgIGRkOiAndGlsZSAlZCcsXG4gICAgICAgICAgICBNOiAna2FsbyBrZWxlbicsXG4gICAgICAgICAgICBNTTogJ2thbG8gJWQnLFxuICAgICAgICAgICAgeTogJ3NhbiBrZWxlbicsXG4gICAgICAgICAgICB5eTogJ3NhbiAlZCcsXG4gICAgICAgIH0sXG4gICAgICAgIHdlZWs6IHtcbiAgICAgICAgICAgIGRvdzogMSwgLy8gTW9uZGF5IGlzIHRoZSBmaXJzdCBkYXkgb2YgdGhlIHdlZWsuXG4gICAgICAgICAgICBkb3k6IDQsIC8vIFRoZSB3ZWVrIHRoYXQgY29udGFpbnMgSmFuIDR0aCBpcyB0aGUgZmlyc3Qgd2VlayBvZiB0aGUgeWVhci5cbiAgICAgICAgfSxcbiAgICB9KTtcblxuICAgIHJldHVybiBibTtcblxufSkpKTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///54903\n")},54905:function(module,exports,__webpack_require__){eval(";(function (root, factory, undef) {\n\tif (true) {\n\t\t// CommonJS\n\t\tmodule.exports = exports = factory(__webpack_require__(19021), __webpack_require__(57165));\n\t}\n\telse {}\n}(this, function (CryptoJS) {\n\n\t/**\n\t * ISO 10126 padding strategy.\n\t */\n\tCryptoJS.pad.Iso10126 = {\n\t pad: function (data, blockSize) {\n\t // Shortcut\n\t var blockSizeBytes = blockSize * 4;\n\n\t // Count padding bytes\n\t var nPaddingBytes = blockSizeBytes - data.sigBytes % blockSizeBytes;\n\n\t // Pad\n\t data.concat(CryptoJS.lib.WordArray.random(nPaddingBytes - 1)).\n\t concat(CryptoJS.lib.WordArray.create([nPaddingBytes << 24], 1));\n\t },\n\n\t unpad: function (data) {\n\t // Get number of padding bytes from last byte\n\t var nPaddingBytes = data.words[(data.sigBytes - 1) >>> 2] & 0xff;\n\n\t // Remove padding\n\t data.sigBytes -= nPaddingBytes;\n\t }\n\t};\n\n\n\treturn CryptoJS.pad.Iso10126;\n\n}));//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNTQ5MDUuanMiLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBUUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9pdGctbmV4dGdlbi1mcm9udGVuZC8uL25vZGVfbW9kdWxlcy9jcnlwdG8tanMvcGFkLWlzbzEwMTI2LmpzP2ExMWIiXSwic291cmNlc0NvbnRlbnQiOlsiOyhmdW5jdGlvbiAocm9vdCwgZmFjdG9yeSwgdW5kZWYpIHtcblx0aWYgKHR5cGVvZiBleHBvcnRzID09PSBcIm9iamVjdFwiKSB7XG5cdFx0Ly8gQ29tbW9uSlNcblx0XHRtb2R1bGUuZXhwb3J0cyA9IGV4cG9ydHMgPSBmYWN0b3J5KHJlcXVpcmUoXCIuL2NvcmVcIiksIHJlcXVpcmUoXCIuL2NpcGhlci1jb3JlXCIpKTtcblx0fVxuXHRlbHNlIGlmICh0eXBlb2YgZGVmaW5lID09PSBcImZ1bmN0aW9uXCIgJiYgZGVmaW5lLmFtZCkge1xuXHRcdC8vIEFNRFxuXHRcdGRlZmluZShbXCIuL2NvcmVcIiwgXCIuL2NpcGhlci1jb3JlXCJdLCBmYWN0b3J5KTtcblx0fVxuXHRlbHNlIHtcblx0XHQvLyBHbG9iYWwgKGJyb3dzZXIpXG5cdFx0ZmFjdG9yeShyb290LkNyeXB0b0pTKTtcblx0fVxufSh0aGlzLCBmdW5jdGlvbiAoQ3J5cHRvSlMpIHtcblxuXHQvKipcblx0ICogSVNPIDEwMTI2IHBhZGRpbmcgc3RyYXRlZ3kuXG5cdCAqL1xuXHRDcnlwdG9KUy5wYWQuSXNvMTAxMjYgPSB7XG5cdCAgICBwYWQ6IGZ1bmN0aW9uIChkYXRhLCBibG9ja1NpemUpIHtcblx0ICAgICAgICAvLyBTaG9ydGN1dFxuXHQgICAgICAgIHZhciBibG9ja1NpemVCeXRlcyA9IGJsb2NrU2l6ZSAqIDQ7XG5cblx0ICAgICAgICAvLyBDb3VudCBwYWRkaW5nIGJ5dGVzXG5cdCAgICAgICAgdmFyIG5QYWRkaW5nQnl0ZXMgPSBibG9ja1NpemVCeXRlcyAtIGRhdGEuc2lnQnl0ZXMgJSBibG9ja1NpemVCeXRlcztcblxuXHQgICAgICAgIC8vIFBhZFxuXHQgICAgICAgIGRhdGEuY29uY2F0KENyeXB0b0pTLmxpYi5Xb3JkQXJyYXkucmFuZG9tKG5QYWRkaW5nQnl0ZXMgLSAxKSkuXG5cdCAgICAgICAgICAgICBjb25jYXQoQ3J5cHRvSlMubGliLldvcmRBcnJheS5jcmVhdGUoW25QYWRkaW5nQnl0ZXMgPDwgMjRdLCAxKSk7XG5cdCAgICB9LFxuXG5cdCAgICB1bnBhZDogZnVuY3Rpb24gKGRhdGEpIHtcblx0ICAgICAgICAvLyBHZXQgbnVtYmVyIG9mIHBhZGRpbmcgYnl0ZXMgZnJvbSBsYXN0IGJ5dGVcblx0ICAgICAgICB2YXIgblBhZGRpbmdCeXRlcyA9IGRhdGEud29yZHNbKGRhdGEuc2lnQnl0ZXMgLSAxKSA+Pj4gMl0gJiAweGZmO1xuXG5cdCAgICAgICAgLy8gUmVtb3ZlIHBhZGRpbmdcblx0ICAgICAgICBkYXRhLnNpZ0J5dGVzIC09IG5QYWRkaW5nQnl0ZXM7XG5cdCAgICB9XG5cdH07XG5cblxuXHRyZXR1cm4gQ3J5cHRvSlMucGFkLklzbzEwMTI2O1xuXG59KSk7Il0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///54905\n")},54991:module=>{"use strict";eval('\n\nfunction _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); }\n\nfunction _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }\n\nfunction _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }\n\nfunction _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }\n\nfunction _iterableToArrayLimit(arr, i) { var _i = arr && (typeof Symbol !== "undefined" && arr[Symbol.iterator] || arr["@@iterator"]); if (_i == null) return; var _arr = []; var _n = true; var _d = false; var _s, _e; try { for (_i = _i.call(arr); !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i["return"] != null) _i["return"](); } finally { if (_d) throw _e; } } return _arr; }\n\nfunction _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }\n\nmodule.exports = function cssWithMappingToString(item) {\n var _item = _slicedToArray(item, 4),\n content = _item[1],\n cssMapping = _item[3];\n\n if (!cssMapping) {\n return content;\n }\n\n if (typeof btoa === "function") {\n // eslint-disable-next-line no-undef\n var base64 = btoa(unescape(encodeURIComponent(JSON.stringify(cssMapping))));\n var data = "sourceMappingURL=data:application/json;charset=utf-8;base64,".concat(base64);\n var sourceMapping = "/*# ".concat(data, " */");\n var sourceURLs = cssMapping.sources.map(function (source) {\n return "/*# sourceURL=".concat(cssMapping.sourceRoot || "").concat(source, " */");\n });\n return [content].concat(sourceURLs).concat([sourceMapping]).join("\\n");\n }\n\n return [content].join("\\n");\n};//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNTQ5OTEuanMiLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vaXRnLW5leHRnZW4tZnJvbnRlbmQvLi9ub2RlX21vZHVsZXMvY3NzLWxvYWRlci9kaXN0L3J1bnRpbWUvY3NzV2l0aE1hcHBpbmdUb1N0cmluZy5qcz83NWU5Il0sInNvdXJjZXNDb250ZW50IjpbIlwidXNlIHN0cmljdFwiO1xuXG5mdW5jdGlvbiBfc2xpY2VkVG9BcnJheShhcnIsIGkpIHsgcmV0dXJuIF9hcnJheVdpdGhIb2xlcyhhcnIpIHx8IF9pdGVyYWJsZVRvQXJyYXlMaW1pdChhcnIsIGkpIHx8IF91bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheShhcnIsIGkpIHx8IF9ub25JdGVyYWJsZVJlc3QoKTsgfVxuXG5mdW5jdGlvbiBfbm9uSXRlcmFibGVSZXN0KCkgeyB0aHJvdyBuZXcgVHlwZUVycm9yKFwiSW52YWxpZCBhdHRlbXB0IHRvIGRlc3RydWN0dXJlIG5vbi1pdGVyYWJsZSBpbnN0YW5jZS5cXG5JbiBvcmRlciB0byBiZSBpdGVyYWJsZSwgbm9uLWFycmF5IG9iamVjdHMgbXVzdCBoYXZlIGEgW1N5bWJvbC5pdGVyYXRvcl0oKSBtZXRob2QuXCIpOyB9XG5cbmZ1bmN0aW9uIF91bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheShvLCBtaW5MZW4pIHsgaWYgKCFvKSByZXR1cm47IGlmICh0eXBlb2YgbyA9PT0gXCJzdHJpbmdcIikgcmV0dXJuIF9hcnJheUxpa2VUb0FycmF5KG8sIG1pbkxlbik7IHZhciBuID0gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKG8pLnNsaWNlKDgsIC0xKTsgaWYgKG4gPT09IFwiT2JqZWN0XCIgJiYgby5jb25zdHJ1Y3RvcikgbiA9IG8uY29uc3RydWN0b3IubmFtZTsgaWYgKG4gPT09IFwiTWFwXCIgfHwgbiA9PT0gXCJTZXRcIikgcmV0dXJuIEFycmF5LmZyb20obyk7IGlmIChuID09PSBcIkFyZ3VtZW50c1wiIHx8IC9eKD86VWl8SSludCg/Ojh8MTZ8MzIpKD86Q2xhbXBlZCk/QXJyYXkkLy50ZXN0KG4pKSByZXR1cm4gX2FycmF5TGlrZVRvQXJyYXkobywgbWluTGVuKTsgfVxuXG5mdW5jdGlvbiBfYXJyYXlMaWtlVG9BcnJheShhcnIsIGxlbikgeyBpZiAobGVuID09IG51bGwgfHwgbGVuID4gYXJyLmxlbmd0aCkgbGVuID0gYXJyLmxlbmd0aDsgZm9yICh2YXIgaSA9IDAsIGFycjIgPSBuZXcgQXJyYXkobGVuKTsgaSA8IGxlbjsgaSsrKSB7IGFycjJbaV0gPSBhcnJbaV07IH0gcmV0dXJuIGFycjI7IH1cblxuZnVuY3Rpb24gX2l0ZXJhYmxlVG9BcnJheUxpbWl0KGFyciwgaSkgeyB2YXIgX2kgPSBhcnIgJiYgKHR5cGVvZiBTeW1ib2wgIT09IFwidW5kZWZpbmVkXCIgJiYgYXJyW1N5bWJvbC5pdGVyYXRvcl0gfHwgYXJyW1wiQEBpdGVyYXRvclwiXSk7IGlmIChfaSA9PSBudWxsKSByZXR1cm47IHZhciBfYXJyID0gW107IHZhciBfbiA9IHRydWU7IHZhciBfZCA9IGZhbHNlOyB2YXIgX3MsIF9lOyB0cnkgeyBmb3IgKF9pID0gX2kuY2FsbChhcnIpOyAhKF9uID0gKF9zID0gX2kubmV4dCgpKS5kb25lKTsgX24gPSB0cnVlKSB7IF9hcnIucHVzaChfcy52YWx1ZSk7IGlmIChpICYmIF9hcnIubGVuZ3RoID09PSBpKSBicmVhazsgfSB9IGNhdGNoIChlcnIpIHsgX2QgPSB0cnVlOyBfZSA9IGVycjsgfSBmaW5hbGx5IHsgdHJ5IHsgaWYgKCFfbiAmJiBfaVtcInJldHVyblwiXSAhPSBudWxsKSBfaVtcInJldHVyblwiXSgpOyB9IGZpbmFsbHkgeyBpZiAoX2QpIHRocm93IF9lOyB9IH0gcmV0dXJuIF9hcnI7IH1cblxuZnVuY3Rpb24gX2FycmF5V2l0aEhvbGVzKGFycikgeyBpZiAoQXJyYXkuaXNBcnJheShhcnIpKSByZXR1cm4gYXJyOyB9XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gY3NzV2l0aE1hcHBpbmdUb1N0cmluZyhpdGVtKSB7XG4gIHZhciBfaXRlbSA9IF9zbGljZWRUb0FycmF5KGl0ZW0sIDQpLFxuICAgICAgY29udGVudCA9IF9pdGVtWzFdLFxuICAgICAgY3NzTWFwcGluZyA9IF9pdGVtWzNdO1xuXG4gIGlmICghY3NzTWFwcGluZykge1xuICAgIHJldHVybiBjb250ZW50O1xuICB9XG5cbiAgaWYgKHR5cGVvZiBidG9hID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdW5kZWZcbiAgICB2YXIgYmFzZTY0ID0gYnRvYSh1bmVzY2FwZShlbmNvZGVVUklDb21wb25lbnQoSlNPTi5zdHJpbmdpZnkoY3NzTWFwcGluZykpKSk7XG4gICAgdmFyIGRhdGEgPSBcInNvdXJjZU1hcHBpbmdVUkw9ZGF0YTphcHBsaWNhdGlvbi9qc29uO2NoYXJzZXQ9dXRmLTg7YmFzZTY0LFwiLmNvbmNhdChiYXNlNjQpO1xuICAgIHZhciBzb3VyY2VNYXBwaW5nID0gXCIvKiMgXCIuY29uY2F0KGRhdGEsIFwiICovXCIpO1xuICAgIHZhciBzb3VyY2VVUkxzID0gY3NzTWFwcGluZy5zb3VyY2VzLm1hcChmdW5jdGlvbiAoc291cmNlKSB7XG4gICAgICByZXR1cm4gXCIvKiMgc291cmNlVVJMPVwiLmNvbmNhdChjc3NNYXBwaW5nLnNvdXJjZVJvb3QgfHwgXCJcIikuY29uY2F0KHNvdXJjZSwgXCIgKi9cIik7XG4gICAgfSk7XG4gICAgcmV0dXJuIFtjb250ZW50XS5jb25jYXQoc291cmNlVVJMcykuY29uY2F0KFtzb3VyY2VNYXBwaW5nXSkuam9pbihcIlxcblwiKTtcbiAgfVxuXG4gIHJldHVybiBbY29udGVudF0uam9pbihcIlxcblwiKTtcbn07Il0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///54991\n')},55157:module=>{eval("module.exports = function () {\n throw new Error('Readable.from is not available in the browser')\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNTUxNTcuanMiLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vaXRnLW5leHRnZW4tZnJvbnRlbmQvLi9ub2RlX21vZHVsZXMvcmVhZGFibGUtc3RyZWFtL2xpYi9pbnRlcm5hbC9zdHJlYW1zL2Zyb20tYnJvd3Nlci5qcz8wN2M2Il0sInNvdXJjZXNDb250ZW50IjpbIm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKCkge1xuICB0aHJvdyBuZXcgRXJyb3IoJ1JlYWRhYmxlLmZyb20gaXMgbm90IGF2YWlsYWJsZSBpbiB0aGUgYnJvd3NlcicpXG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///55157\n")},55162:(I,g,t)=>{"use strict";I.exports=t.p+"3ef723ce9db7dadcb96a.png"},55659:(I,g,t)=>{"use strict";I.exports=t.p+"6b54a629265cf42bb14d.png"},55739:(I,g,t)=>{"use strict";I.exports=t.p+"dafacddc5cc2fb59c071.png"},55802:function(__unused_webpack_module,__unused_webpack_exports,__webpack_require__){eval("//! moment.js locale configuration\n//! locale : Thai [th]\n//! author : Kridsada Thanabulpong : https://github.com/sirn\n\n;(function (global, factory) {\n true ? factory(__webpack_require__(95093)) :\n 0\n}(this, (function (moment) { 'use strict';\n\n //! moment.js locale configuration\n\n var th = moment.defineLocale('th', {\n months: 'มกราคม_กุมภาพันธ์_มีนาคม_เมษายน_พฤษภาคม_มิถุนายน_กรกฎาคม_สิงหาคม_กันยายน_ตุลาคม_พฤศจิกายน_ธันวาคม'.split(\n '_'\n ),\n monthsShort:\n 'ม.ค._ก.พ._มี.ค._เม.ย._พ.ค._มิ.ย._ก.ค._ส.ค._ก.ย._ต.ค._พ.ย._ธ.ค.'.split(\n '_'\n ),\n monthsParseExact: true,\n weekdays: 'อาทิตย์_จันทร์_อังคาร_พุธ_พฤหัสบดี_ศุกร์_เสาร์'.split('_'),\n weekdaysShort: 'อาทิตย์_จันทร์_อังคาร_พุธ_พฤหัส_ศุกร์_เสาร์'.split('_'), // yes, three characters difference\n weekdaysMin: 'อา._จ._อ._พ._พฤ._ศ._ส.'.split('_'),\n weekdaysParseExact: true,\n longDateFormat: {\n LT: 'H:mm',\n LTS: 'H:mm:ss',\n L: 'DD/MM/YYYY',\n LL: 'D MMMM YYYY',\n LLL: 'D MMMM YYYY เวลา H:mm',\n LLLL: 'วันddddที่ D MMMM YYYY เวลา H:mm',\n },\n meridiemParse: /ก่อนเที่ยง|หลังเที่ยง/,\n isPM: function (input) {\n return input === 'หลังเที่ยง';\n },\n meridiem: function (hour, minute, isLower) {\n if (hour < 12) {\n return 'ก่อนเที่ยง';\n } else {\n return 'หลังเที่ยง';\n }\n },\n calendar: {\n sameDay: '[วันนี้ เวลา] LT',\n nextDay: '[พรุ่งนี้ เวลา] LT',\n nextWeek: 'dddd[หน้า เวลา] LT',\n lastDay: '[เมื่อวานนี้ เวลา] LT',\n lastWeek: '[วัน]dddd[ที่แล้ว เวลา] LT',\n sameElse: 'L',\n },\n relativeTime: {\n future: 'อีก %s',\n past: '%sที่แล้ว',\n s: 'ไม่กี่วินาที',\n ss: '%d วินาที',\n m: '1 นาที',\n mm: '%d นาที',\n h: '1 ชั่วโมง',\n hh: '%d ชั่วโมง',\n d: '1 วัน',\n dd: '%d วัน',\n w: '1 สัปดาห์',\n ww: '%d สัปดาห์',\n M: '1 เดือน',\n MM: '%d เดือน',\n y: '1 ปี',\n yy: '%d ปี',\n },\n });\n\n return th;\n\n})));\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNTU4MDIuanMiLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL2l0Zy1uZXh0Z2VuLWZyb250ZW5kLy4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvdGguanM/MTBlOCJdLCJzb3VyY2VzQ29udGVudCI6WyIvLyEgbW9tZW50LmpzIGxvY2FsZSBjb25maWd1cmF0aW9uXG4vLyEgbG9jYWxlIDogVGhhaSBbdGhdXG4vLyEgYXV0aG9yIDogS3JpZHNhZGEgVGhhbmFidWxwb25nIDogaHR0cHM6Ly9naXRodWIuY29tL3Npcm5cblxuOyhmdW5jdGlvbiAoZ2xvYmFsLCBmYWN0b3J5KSB7XG4gICB0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcgJiYgdHlwZW9mIG1vZHVsZSAhPT0gJ3VuZGVmaW5lZCdcbiAgICAgICAmJiB0eXBlb2YgcmVxdWlyZSA9PT0gJ2Z1bmN0aW9uJyA/IGZhY3RvcnkocmVxdWlyZSgnLi4vbW9tZW50JykpIDpcbiAgIHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgZGVmaW5lLmFtZCA/IGRlZmluZShbJy4uL21vbWVudCddLCBmYWN0b3J5KSA6XG4gICBmYWN0b3J5KGdsb2JhbC5tb21lbnQpXG59KHRoaXMsIChmdW5jdGlvbiAobW9tZW50KSB7ICd1c2Ugc3RyaWN0JztcblxuICAgIC8vISBtb21lbnQuanMgbG9jYWxlIGNvbmZpZ3VyYXRpb25cblxuICAgIHZhciB0aCA9IG1vbWVudC5kZWZpbmVMb2NhbGUoJ3RoJywge1xuICAgICAgICBtb250aHM6ICfguKHguIHguKPguLLguITguKFf4LiB4Li44Lih4Lig4Liy4Lie4Lix4LiZ4LiY4LmMX+C4oeC4teC4meC4suC4hOC4oV/guYDguKHguKnguLLguKLguJlf4Lie4Lik4Lip4Lig4Liy4LiE4LihX+C4oeC4tOC4luC4uOC4meC4suC4ouC4mV/guIHguKPguIHguI7guLLguITguKFf4Liq4Li04LiH4Lir4Liy4LiE4LihX+C4geC4seC4meC4ouC4suC4ouC4mV/guJXguLjguKXguLLguITguKFf4Lie4Lik4Lio4LiI4Li04LiB4Liy4Lii4LiZX+C4mOC4seC4meC4p+C4suC4hOC4oScuc3BsaXQoXG4gICAgICAgICAgICAnXydcbiAgICAgICAgKSxcbiAgICAgICAgbW9udGhzU2hvcnQ6XG4gICAgICAgICAgICAn4LihLuC4hC5f4LiBLuC4ni5f4Lih4Li1LuC4hC5f4LmA4LihLuC4oi5f4LieLuC4hC5f4Lih4Li0LuC4oi5f4LiBLuC4hC5f4LiqLuC4hC5f4LiBLuC4oi5f4LiVLuC4hC5f4LieLuC4oi5f4LiYLuC4hC4nLnNwbGl0KFxuICAgICAgICAgICAgICAgICdfJ1xuICAgICAgICAgICAgKSxcbiAgICAgICAgbW9udGhzUGFyc2VFeGFjdDogdHJ1ZSxcbiAgICAgICAgd2Vla2RheXM6ICfguK3guLLguJfguLTguJXguKLguYxf4LiI4Lix4LiZ4LiX4Lij4LmMX+C4reC4seC4h+C4hOC4suC4o1/guJ7guLjguJhf4Lie4Lik4Lir4Lix4Liq4Lia4LiU4Li1X+C4qOC4uOC4geC4o+C5jF/guYDguKrguLLguKPguYwnLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzU2hvcnQ6ICfguK3guLLguJfguLTguJXguKLguYxf4LiI4Lix4LiZ4LiX4Lij4LmMX+C4reC4seC4h+C4hOC4suC4o1/guJ7guLjguJhf4Lie4Lik4Lir4Lix4LiqX+C4qOC4uOC4geC4o+C5jF/guYDguKrguLLguKPguYwnLnNwbGl0KCdfJyksIC8vIHllcywgdGhyZWUgY2hhcmFjdGVycyBkaWZmZXJlbmNlXG4gICAgICAgIHdlZWtkYXlzTWluOiAn4Lit4LiyLl/guIguX+C4rS5f4LieLl/guJ7guKQuX+C4qC5f4LiqLicuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXNQYXJzZUV4YWN0OiB0cnVlLFxuICAgICAgICBsb25nRGF0ZUZvcm1hdDoge1xuICAgICAgICAgICAgTFQ6ICdIOm1tJyxcbiAgICAgICAgICAgIExUUzogJ0g6bW06c3MnLFxuICAgICAgICAgICAgTDogJ0REL01NL1lZWVknLFxuICAgICAgICAgICAgTEw6ICdEIE1NTU0gWVlZWScsXG4gICAgICAgICAgICBMTEw6ICdEIE1NTU0gWVlZWSDguYDguKfguKXguLIgSDptbScsXG4gICAgICAgICAgICBMTExMOiAn4Lin4Lix4LiZZGRkZOC4l+C4teC5iCBEIE1NTU0gWVlZWSDguYDguKfguKXguLIgSDptbScsXG4gICAgICAgIH0sXG4gICAgICAgIG1lcmlkaWVtUGFyc2U6IC/guIHguYjguK3guJnguYDguJfguLXguYjguKLguId84Lir4Lil4Lix4LiH4LmA4LiX4Li14LmI4Lii4LiHLyxcbiAgICAgICAgaXNQTTogZnVuY3Rpb24gKGlucHV0KSB7XG4gICAgICAgICAgICByZXR1cm4gaW5wdXQgPT09ICfguKvguKXguLHguIfguYDguJfguLXguYjguKLguIcnO1xuICAgICAgICB9LFxuICAgICAgICBtZXJpZGllbTogZnVuY3Rpb24gKGhvdXIsIG1pbnV0ZSwgaXNMb3dlcikge1xuICAgICAgICAgICAgaWYgKGhvdXIgPCAxMikge1xuICAgICAgICAgICAgICAgIHJldHVybiAn4LiB4LmI4Lit4LiZ4LmA4LiX4Li14LmI4Lii4LiHJztcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuICfguKvguKXguLHguIfguYDguJfguLXguYjguKLguIcnO1xuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBjYWxlbmRhcjoge1xuICAgICAgICAgICAgc2FtZURheTogJ1vguKfguLHguJnguJnguLXguYkg4LmA4Lin4Lil4LiyXSBMVCcsXG4gICAgICAgICAgICBuZXh0RGF5OiAnW+C4nuC4o+C4uOC5iOC4h+C4meC4teC5iSDguYDguKfguKXguLJdIExUJyxcbiAgICAgICAgICAgIG5leHRXZWVrOiAnZGRkZFvguKvguJnguYnguLIg4LmA4Lin4Lil4LiyXSBMVCcsXG4gICAgICAgICAgICBsYXN0RGF5OiAnW+C5gOC4oeC4t+C5iOC4reC4p+C4suC4meC4meC4teC5iSDguYDguKfguKXguLJdIExUJyxcbiAgICAgICAgICAgIGxhc3RXZWVrOiAnW+C4p+C4seC4mV1kZGRkW+C4l+C4teC5iOC5geC4peC5ieC4pyDguYDguKfguKXguLJdIExUJyxcbiAgICAgICAgICAgIHNhbWVFbHNlOiAnTCcsXG4gICAgICAgIH0sXG4gICAgICAgIHJlbGF0aXZlVGltZToge1xuICAgICAgICAgICAgZnV0dXJlOiAn4Lit4Li14LiBICVzJyxcbiAgICAgICAgICAgIHBhc3Q6ICclc+C4l+C4teC5iOC5geC4peC5ieC4pycsXG4gICAgICAgICAgICBzOiAn4LmE4Lih4LmI4LiB4Li14LmI4Lin4Li04LiZ4Liy4LiX4Li1JyxcbiAgICAgICAgICAgIHNzOiAnJWQg4Lin4Li04LiZ4Liy4LiX4Li1JyxcbiAgICAgICAgICAgIG06ICcxIOC4meC4suC4l+C4tScsXG4gICAgICAgICAgICBtbTogJyVkIOC4meC4suC4l+C4tScsXG4gICAgICAgICAgICBoOiAnMSDguIrguLHguYjguKfguYLguKHguIcnLFxuICAgICAgICAgICAgaGg6ICclZCDguIrguLHguYjguKfguYLguKHguIcnLFxuICAgICAgICAgICAgZDogJzEg4Lin4Lix4LiZJyxcbiAgICAgICAgICAgIGRkOiAnJWQg4Lin4Lix4LiZJyxcbiAgICAgICAgICAgIHc6ICcxIOC4quC4seC4m+C4lOC4suC4q+C5jCcsXG4gICAgICAgICAgICB3dzogJyVkIOC4quC4seC4m+C4lOC4suC4q+C5jCcsXG4gICAgICAgICAgICBNOiAnMSDguYDguJTguLfguK3guJknLFxuICAgICAgICAgICAgTU06ICclZCDguYDguJTguLfguK3guJknLFxuICAgICAgICAgICAgeTogJzEg4Lib4Li1JyxcbiAgICAgICAgICAgIHl5OiAnJWQg4Lib4Li1JyxcbiAgICAgICAgfSxcbiAgICB9KTtcblxuICAgIHJldHVybiB0aDtcblxufSkpKTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///55802\n")},56e3:function(__unused_webpack_module,__unused_webpack_exports,__webpack_require__){eval("//! moment.js locale configuration\n//! locale : siSwati [ss]\n//! author : Nicolai Davies : https://github.com/nicolaidavies\n\n;(function (global, factory) {\n true ? factory(__webpack_require__(95093)) :\n 0\n}(this, (function (moment) { 'use strict';\n\n //! moment.js locale configuration\n\n var ss = moment.defineLocale('ss', {\n months: \"Bhimbidvwane_Indlovana_Indlov'lenkhulu_Mabasa_Inkhwekhweti_Inhlaba_Kholwane_Ingci_Inyoni_Imphala_Lweti_Ingongoni\".split(\n '_'\n ),\n monthsShort: 'Bhi_Ina_Inu_Mab_Ink_Inh_Kho_Igc_Iny_Imp_Lwe_Igo'.split('_'),\n weekdays:\n 'Lisontfo_Umsombuluko_Lesibili_Lesitsatfu_Lesine_Lesihlanu_Umgcibelo'.split(\n '_'\n ),\n weekdaysShort: 'Lis_Umb_Lsb_Les_Lsi_Lsh_Umg'.split('_'),\n weekdaysMin: 'Li_Us_Lb_Lt_Ls_Lh_Ug'.split('_'),\n weekdaysParseExact: true,\n longDateFormat: {\n LT: 'h:mm A',\n LTS: 'h:mm:ss A',\n L: 'DD/MM/YYYY',\n LL: 'D MMMM YYYY',\n LLL: 'D MMMM YYYY h:mm A',\n LLLL: 'dddd, D MMMM YYYY h:mm A',\n },\n calendar: {\n sameDay: '[Namuhla nga] LT',\n nextDay: '[Kusasa nga] LT',\n nextWeek: 'dddd [nga] LT',\n lastDay: '[Itolo nga] LT',\n lastWeek: 'dddd [leliphelile] [nga] LT',\n sameElse: 'L',\n },\n relativeTime: {\n future: 'nga %s',\n past: 'wenteka nga %s',\n s: 'emizuzwana lomcane',\n ss: '%d mzuzwana',\n m: 'umzuzu',\n mm: '%d emizuzu',\n h: 'lihora',\n hh: '%d emahora',\n d: 'lilanga',\n dd: '%d emalanga',\n M: 'inyanga',\n MM: '%d tinyanga',\n y: 'umnyaka',\n yy: '%d iminyaka',\n },\n meridiemParse: /ekuseni|emini|entsambama|ebusuku/,\n meridiem: function (hours, minutes, isLower) {\n if (hours < 11) {\n return 'ekuseni';\n } else if (hours < 15) {\n return 'emini';\n } else if (hours < 19) {\n return 'entsambama';\n } else {\n return 'ebusuku';\n }\n },\n meridiemHour: function (hour, meridiem) {\n if (hour === 12) {\n hour = 0;\n }\n if (meridiem === 'ekuseni') {\n return hour;\n } else if (meridiem === 'emini') {\n return hour >= 11 ? hour : hour + 12;\n } else if (meridiem === 'entsambama' || meridiem === 'ebusuku') {\n if (hour === 0) {\n return 0;\n }\n return hour + 12;\n }\n },\n dayOfMonthOrdinalParse: /\\d{1,2}/,\n ordinal: '%d',\n week: {\n dow: 1, // Monday is the first day of the week.\n doy: 4, // The week that contains Jan 4th is the first week of the year.\n },\n });\n\n return ss;\n\n})));\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNTYwMDAuanMiLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vaXRnLW5leHRnZW4tZnJvbnRlbmQvLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9zcy5qcz81MmJkIl0sInNvdXJjZXNDb250ZW50IjpbIi8vISBtb21lbnQuanMgbG9jYWxlIGNvbmZpZ3VyYXRpb25cbi8vISBsb2NhbGUgOiBzaVN3YXRpIFtzc11cbi8vISBhdXRob3IgOiBOaWNvbGFpIERhdmllczxtYWlsQG5pY29sYWkuaW8+IDogaHR0cHM6Ly9naXRodWIuY29tL25pY29sYWlkYXZpZXNcblxuOyhmdW5jdGlvbiAoZ2xvYmFsLCBmYWN0b3J5KSB7XG4gICB0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcgJiYgdHlwZW9mIG1vZHVsZSAhPT0gJ3VuZGVmaW5lZCdcbiAgICAgICAmJiB0eXBlb2YgcmVxdWlyZSA9PT0gJ2Z1bmN0aW9uJyA/IGZhY3RvcnkocmVxdWlyZSgnLi4vbW9tZW50JykpIDpcbiAgIHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgZGVmaW5lLmFtZCA/IGRlZmluZShbJy4uL21vbWVudCddLCBmYWN0b3J5KSA6XG4gICBmYWN0b3J5KGdsb2JhbC5tb21lbnQpXG59KHRoaXMsIChmdW5jdGlvbiAobW9tZW50KSB7ICd1c2Ugc3RyaWN0JztcblxuICAgIC8vISBtb21lbnQuanMgbG9jYWxlIGNvbmZpZ3VyYXRpb25cblxuICAgIHZhciBzcyA9IG1vbWVudC5kZWZpbmVMb2NhbGUoJ3NzJywge1xuICAgICAgICBtb250aHM6IFwiQmhpbWJpZHZ3YW5lX0luZGxvdmFuYV9JbmRsb3YnbGVua2h1bHVfTWFiYXNhX0lua2h3ZWtod2V0aV9JbmhsYWJhX0tob2x3YW5lX0luZ2NpX0lueW9uaV9JbXBoYWxhX0x3ZXRpX0luZ29uZ29uaVwiLnNwbGl0KFxuICAgICAgICAgICAgJ18nXG4gICAgICAgICksXG4gICAgICAgIG1vbnRoc1Nob3J0OiAnQmhpX0luYV9JbnVfTWFiX0lua19JbmhfS2hvX0lnY19JbnlfSW1wX0x3ZV9JZ28nLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzOlxuICAgICAgICAgICAgJ0xpc29udGZvX1Vtc29tYnVsdWtvX0xlc2liaWxpX0xlc2l0c2F0ZnVfTGVzaW5lX0xlc2lobGFudV9VbWdjaWJlbG8nLnNwbGl0KFxuICAgICAgICAgICAgICAgICdfJ1xuICAgICAgICAgICAgKSxcbiAgICAgICAgd2Vla2RheXNTaG9ydDogJ0xpc19VbWJfTHNiX0xlc19Mc2lfTHNoX1VtZycuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXNNaW46ICdMaV9Vc19MYl9MdF9Mc19MaF9VZycuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXNQYXJzZUV4YWN0OiB0cnVlLFxuICAgICAgICBsb25nRGF0ZUZvcm1hdDoge1xuICAgICAgICAgICAgTFQ6ICdoOm1tIEEnLFxuICAgICAgICAgICAgTFRTOiAnaDptbTpzcyBBJyxcbiAgICAgICAgICAgIEw6ICdERC9NTS9ZWVlZJyxcbiAgICAgICAgICAgIExMOiAnRCBNTU1NIFlZWVknLFxuICAgICAgICAgICAgTExMOiAnRCBNTU1NIFlZWVkgaDptbSBBJyxcbiAgICAgICAgICAgIExMTEw6ICdkZGRkLCBEIE1NTU0gWVlZWSBoOm1tIEEnLFxuICAgICAgICB9LFxuICAgICAgICBjYWxlbmRhcjoge1xuICAgICAgICAgICAgc2FtZURheTogJ1tOYW11aGxhIG5nYV0gTFQnLFxuICAgICAgICAgICAgbmV4dERheTogJ1tLdXNhc2EgbmdhXSBMVCcsXG4gICAgICAgICAgICBuZXh0V2VlazogJ2RkZGQgW25nYV0gTFQnLFxuICAgICAgICAgICAgbGFzdERheTogJ1tJdG9sbyBuZ2FdIExUJyxcbiAgICAgICAgICAgIGxhc3RXZWVrOiAnZGRkZCBbbGVsaXBoZWxpbGVdIFtuZ2FdIExUJyxcbiAgICAgICAgICAgIHNhbWVFbHNlOiAnTCcsXG4gICAgICAgIH0sXG4gICAgICAgIHJlbGF0aXZlVGltZToge1xuICAgICAgICAgICAgZnV0dXJlOiAnbmdhICVzJyxcbiAgICAgICAgICAgIHBhc3Q6ICd3ZW50ZWthIG5nYSAlcycsXG4gICAgICAgICAgICBzOiAnZW1penV6d2FuYSBsb21jYW5lJyxcbiAgICAgICAgICAgIHNzOiAnJWQgbXp1endhbmEnLFxuICAgICAgICAgICAgbTogJ3VtenV6dScsXG4gICAgICAgICAgICBtbTogJyVkIGVtaXp1enUnLFxuICAgICAgICAgICAgaDogJ2xpaG9yYScsXG4gICAgICAgICAgICBoaDogJyVkIGVtYWhvcmEnLFxuICAgICAgICAgICAgZDogJ2xpbGFuZ2EnLFxuICAgICAgICAgICAgZGQ6ICclZCBlbWFsYW5nYScsXG4gICAgICAgICAgICBNOiAnaW55YW5nYScsXG4gICAgICAgICAgICBNTTogJyVkIHRpbnlhbmdhJyxcbiAgICAgICAgICAgIHk6ICd1bW55YWthJyxcbiAgICAgICAgICAgIHl5OiAnJWQgaW1pbnlha2EnLFxuICAgICAgICB9LFxuICAgICAgICBtZXJpZGllbVBhcnNlOiAvZWt1c2VuaXxlbWluaXxlbnRzYW1iYW1hfGVidXN1a3UvLFxuICAgICAgICBtZXJpZGllbTogZnVuY3Rpb24gKGhvdXJzLCBtaW51dGVzLCBpc0xvd2VyKSB7XG4gICAgICAgICAgICBpZiAoaG91cnMgPCAxMSkge1xuICAgICAgICAgICAgICAgIHJldHVybiAnZWt1c2VuaSc7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGhvdXJzIDwgMTUpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gJ2VtaW5pJztcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoaG91cnMgPCAxOSkge1xuICAgICAgICAgICAgICAgIHJldHVybiAnZW50c2FtYmFtYSc7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHJldHVybiAnZWJ1c3VrdSc7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIG1lcmlkaWVtSG91cjogZnVuY3Rpb24gKGhvdXIsIG1lcmlkaWVtKSB7XG4gICAgICAgICAgICBpZiAoaG91ciA9PT0gMTIpIHtcbiAgICAgICAgICAgICAgICBob3VyID0gMDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChtZXJpZGllbSA9PT0gJ2VrdXNlbmknKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGhvdXI7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKG1lcmlkaWVtID09PSAnZW1pbmknKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGhvdXIgPj0gMTEgPyBob3VyIDogaG91ciArIDEyO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChtZXJpZGllbSA9PT0gJ2VudHNhbWJhbWEnIHx8IG1lcmlkaWVtID09PSAnZWJ1c3VrdScpIHtcbiAgICAgICAgICAgICAgICBpZiAoaG91ciA9PT0gMCkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gMDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIGhvdXIgKyAxMjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgZGF5T2ZNb250aE9yZGluYWxQYXJzZTogL1xcZHsxLDJ9LyxcbiAgICAgICAgb3JkaW5hbDogJyVkJyxcbiAgICAgICAgd2Vlazoge1xuICAgICAgICAgICAgZG93OiAxLCAvLyBNb25kYXkgaXMgdGhlIGZpcnN0IGRheSBvZiB0aGUgd2Vlay5cbiAgICAgICAgICAgIGRveTogNCwgLy8gVGhlIHdlZWsgdGhhdCBjb250YWlucyBKYW4gNHRoIGlzIHRoZSBmaXJzdCB3ZWVrIG9mIHRoZSB5ZWFyLlxuICAgICAgICB9LFxuICAgIH0pO1xuXG4gICAgcmV0dXJuIHNzO1xuXG59KSkpO1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///56000\n")},56195:function(__unused_webpack_module,__unused_webpack_exports,__webpack_require__){eval("//! moment.js locale configuration\n//! locale : English (United Kingdom) [en-gb]\n//! author : Chris Gedrim : https://github.com/chrisgedrim\n\n;(function (global, factory) {\n true ? factory(__webpack_require__(95093)) :\n 0\n}(this, (function (moment) { 'use strict';\n\n //! moment.js locale configuration\n\n var enGb = moment.defineLocale('en-gb', {\n months: 'January_February_March_April_May_June_July_August_September_October_November_December'.split(\n '_'\n ),\n monthsShort: 'Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec'.split('_'),\n weekdays: 'Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday'.split(\n '_'\n ),\n weekdaysShort: 'Sun_Mon_Tue_Wed_Thu_Fri_Sat'.split('_'),\n weekdaysMin: 'Su_Mo_Tu_We_Th_Fr_Sa'.split('_'),\n longDateFormat: {\n LT: 'HH:mm',\n LTS: 'HH:mm:ss',\n L: 'DD/MM/YYYY',\n LL: 'D MMMM YYYY',\n LLL: 'D MMMM YYYY HH:mm',\n LLLL: 'dddd, D MMMM YYYY HH:mm',\n },\n calendar: {\n sameDay: '[Today at] LT',\n nextDay: '[Tomorrow at] LT',\n nextWeek: 'dddd [at] LT',\n lastDay: '[Yesterday at] LT',\n lastWeek: '[Last] dddd [at] LT',\n sameElse: 'L',\n },\n relativeTime: {\n future: 'in %s',\n past: '%s ago',\n s: 'a few seconds',\n ss: '%d seconds',\n m: 'a minute',\n mm: '%d minutes',\n h: 'an hour',\n hh: '%d hours',\n d: 'a day',\n dd: '%d days',\n M: 'a month',\n MM: '%d months',\n y: 'a year',\n yy: '%d years',\n },\n dayOfMonthOrdinalParse: /\\d{1,2}(st|nd|rd|th)/,\n ordinal: function (number) {\n var b = number % 10,\n output =\n ~~((number % 100) / 10) === 1\n ? 'th'\n : b === 1\n ? 'st'\n : b === 2\n ? 'nd'\n : b === 3\n ? 'rd'\n : 'th';\n return number + output;\n },\n week: {\n dow: 1, // Monday is the first day of the week.\n doy: 4, // The week that contains Jan 4th is the first week of the year.\n },\n });\n\n return enGb;\n\n})));\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNTYxOTUuanMiLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL2l0Zy1uZXh0Z2VuLWZyb250ZW5kLy4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvZW4tZ2IuanM/MzlhNiJdLCJzb3VyY2VzQ29udGVudCI6WyIvLyEgbW9tZW50LmpzIGxvY2FsZSBjb25maWd1cmF0aW9uXG4vLyEgbG9jYWxlIDogRW5nbGlzaCAoVW5pdGVkIEtpbmdkb20pIFtlbi1nYl1cbi8vISBhdXRob3IgOiBDaHJpcyBHZWRyaW0gOiBodHRwczovL2dpdGh1Yi5jb20vY2hyaXNnZWRyaW1cblxuOyhmdW5jdGlvbiAoZ2xvYmFsLCBmYWN0b3J5KSB7XG4gICB0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcgJiYgdHlwZW9mIG1vZHVsZSAhPT0gJ3VuZGVmaW5lZCdcbiAgICAgICAmJiB0eXBlb2YgcmVxdWlyZSA9PT0gJ2Z1bmN0aW9uJyA/IGZhY3RvcnkocmVxdWlyZSgnLi4vbW9tZW50JykpIDpcbiAgIHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgZGVmaW5lLmFtZCA/IGRlZmluZShbJy4uL21vbWVudCddLCBmYWN0b3J5KSA6XG4gICBmYWN0b3J5KGdsb2JhbC5tb21lbnQpXG59KHRoaXMsIChmdW5jdGlvbiAobW9tZW50KSB7ICd1c2Ugc3RyaWN0JztcblxuICAgIC8vISBtb21lbnQuanMgbG9jYWxlIGNvbmZpZ3VyYXRpb25cblxuICAgIHZhciBlbkdiID0gbW9tZW50LmRlZmluZUxvY2FsZSgnZW4tZ2InLCB7XG4gICAgICAgIG1vbnRoczogJ0phbnVhcnlfRmVicnVhcnlfTWFyY2hfQXByaWxfTWF5X0p1bmVfSnVseV9BdWd1c3RfU2VwdGVtYmVyX09jdG9iZXJfTm92ZW1iZXJfRGVjZW1iZXInLnNwbGl0KFxuICAgICAgICAgICAgJ18nXG4gICAgICAgICksXG4gICAgICAgIG1vbnRoc1Nob3J0OiAnSmFuX0ZlYl9NYXJfQXByX01heV9KdW5fSnVsX0F1Z19TZXBfT2N0X05vdl9EZWMnLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzOiAnU3VuZGF5X01vbmRheV9UdWVzZGF5X1dlZG5lc2RheV9UaHVyc2RheV9GcmlkYXlfU2F0dXJkYXknLnNwbGl0KFxuICAgICAgICAgICAgJ18nXG4gICAgICAgICksXG4gICAgICAgIHdlZWtkYXlzU2hvcnQ6ICdTdW5fTW9uX1R1ZV9XZWRfVGh1X0ZyaV9TYXQnLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzTWluOiAnU3VfTW9fVHVfV2VfVGhfRnJfU2EnLnNwbGl0KCdfJyksXG4gICAgICAgIGxvbmdEYXRlRm9ybWF0OiB7XG4gICAgICAgICAgICBMVDogJ0hIOm1tJyxcbiAgICAgICAgICAgIExUUzogJ0hIOm1tOnNzJyxcbiAgICAgICAgICAgIEw6ICdERC9NTS9ZWVlZJyxcbiAgICAgICAgICAgIExMOiAnRCBNTU1NIFlZWVknLFxuICAgICAgICAgICAgTExMOiAnRCBNTU1NIFlZWVkgSEg6bW0nLFxuICAgICAgICAgICAgTExMTDogJ2RkZGQsIEQgTU1NTSBZWVlZIEhIOm1tJyxcbiAgICAgICAgfSxcbiAgICAgICAgY2FsZW5kYXI6IHtcbiAgICAgICAgICAgIHNhbWVEYXk6ICdbVG9kYXkgYXRdIExUJyxcbiAgICAgICAgICAgIG5leHREYXk6ICdbVG9tb3Jyb3cgYXRdIExUJyxcbiAgICAgICAgICAgIG5leHRXZWVrOiAnZGRkZCBbYXRdIExUJyxcbiAgICAgICAgICAgIGxhc3REYXk6ICdbWWVzdGVyZGF5IGF0XSBMVCcsXG4gICAgICAgICAgICBsYXN0V2VlazogJ1tMYXN0XSBkZGRkIFthdF0gTFQnLFxuICAgICAgICAgICAgc2FtZUVsc2U6ICdMJyxcbiAgICAgICAgfSxcbiAgICAgICAgcmVsYXRpdmVUaW1lOiB7XG4gICAgICAgICAgICBmdXR1cmU6ICdpbiAlcycsXG4gICAgICAgICAgICBwYXN0OiAnJXMgYWdvJyxcbiAgICAgICAgICAgIHM6ICdhIGZldyBzZWNvbmRzJyxcbiAgICAgICAgICAgIHNzOiAnJWQgc2Vjb25kcycsXG4gICAgICAgICAgICBtOiAnYSBtaW51dGUnLFxuICAgICAgICAgICAgbW06ICclZCBtaW51dGVzJyxcbiAgICAgICAgICAgIGg6ICdhbiBob3VyJyxcbiAgICAgICAgICAgIGhoOiAnJWQgaG91cnMnLFxuICAgICAgICAgICAgZDogJ2EgZGF5JyxcbiAgICAgICAgICAgIGRkOiAnJWQgZGF5cycsXG4gICAgICAgICAgICBNOiAnYSBtb250aCcsXG4gICAgICAgICAgICBNTTogJyVkIG1vbnRocycsXG4gICAgICAgICAgICB5OiAnYSB5ZWFyJyxcbiAgICAgICAgICAgIHl5OiAnJWQgeWVhcnMnLFxuICAgICAgICB9LFxuICAgICAgICBkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOiAvXFxkezEsMn0oc3R8bmR8cmR8dGgpLyxcbiAgICAgICAgb3JkaW5hbDogZnVuY3Rpb24gKG51bWJlcikge1xuICAgICAgICAgICAgdmFyIGIgPSBudW1iZXIgJSAxMCxcbiAgICAgICAgICAgICAgICBvdXRwdXQgPVxuICAgICAgICAgICAgICAgICAgICB+figobnVtYmVyICUgMTAwKSAvIDEwKSA9PT0gMVxuICAgICAgICAgICAgICAgICAgICAgICAgPyAndGgnXG4gICAgICAgICAgICAgICAgICAgICAgICA6IGIgPT09IDFcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPyAnc3QnXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDogYiA9PT0gMlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gJ25kJ1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogYiA9PT0gM1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPyAncmQnXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6ICd0aCc7XG4gICAgICAgICAgICByZXR1cm4gbnVtYmVyICsgb3V0cHV0O1xuICAgICAgICB9LFxuICAgICAgICB3ZWVrOiB7XG4gICAgICAgICAgICBkb3c6IDEsIC8vIE1vbmRheSBpcyB0aGUgZmlyc3QgZGF5IG9mIHRoZSB3ZWVrLlxuICAgICAgICAgICAgZG95OiA0LCAvLyBUaGUgd2VlayB0aGF0IGNvbnRhaW5zIEphbiA0dGggaXMgdGhlIGZpcnN0IHdlZWsgb2YgdGhlIHllYXIuXG4gICAgICAgIH0sXG4gICAgfSk7XG5cbiAgICByZXR1cm4gZW5HYjtcblxufSkpKTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///56195\n")},56425:(I,g,t)=>{"use strict";I.exports=t.p+"ee9e3fa86bb1759705ec.png"},56464:function(__unused_webpack_module,__unused_webpack_exports,__webpack_require__){eval("//! moment.js locale configuration\n//! locale : Czech [cs]\n//! author : petrbela : https://github.com/petrbela\n\n;(function (global, factory) {\n true ? factory(__webpack_require__(95093)) :\n 0\n}(this, (function (moment) { 'use strict';\n\n //! moment.js locale configuration\n\n var months = {\n standalone:\n 'leden_únor_březen_duben_květen_červen_červenec_srpen_září_říjen_listopad_prosinec'.split(\n '_'\n ),\n format: 'ledna_února_března_dubna_května_června_července_srpna_září_října_listopadu_prosince'.split(\n '_'\n ),\n isFormat: /DD?[o.]?(\\[[^\\[\\]]*\\]|\\s)+MMMM/,\n },\n monthsShort = 'led_úno_bře_dub_kvě_čvn_čvc_srp_zář_říj_lis_pro'.split('_'),\n monthsParse = [\n /^led/i,\n /^úno/i,\n /^bře/i,\n /^dub/i,\n /^kvě/i,\n /^(čvn|červen$|června)/i,\n /^(čvc|červenec|července)/i,\n /^srp/i,\n /^zář/i,\n /^říj/i,\n /^lis/i,\n /^pro/i,\n ],\n // NOTE: 'červen' is substring of 'červenec'; therefore 'červenec' must precede 'červen' in the regex to be fully matched.\n // Otherwise parser matches '1. červenec' as '1. červen' + 'ec'.\n monthsRegex =\n /^(leden|únor|březen|duben|květen|červenec|července|červen|června|srpen|září|říjen|listopad|prosinec|led|úno|bře|dub|kvě|čvn|čvc|srp|zář|říj|lis|pro)/i;\n\n function plural(n) {\n return n > 1 && n < 5 && ~~(n / 10) !== 1;\n }\n function translate(number, withoutSuffix, key, isFuture) {\n var result = number + ' ';\n switch (key) {\n case 's': // a few seconds / in a few seconds / a few seconds ago\n return withoutSuffix || isFuture ? 'pár sekund' : 'pár sekundami';\n case 'ss': // 9 seconds / in 9 seconds / 9 seconds ago\n if (withoutSuffix || isFuture) {\n return result + (plural(number) ? 'sekundy' : 'sekund');\n } else {\n return result + 'sekundami';\n }\n case 'm': // a minute / in a minute / a minute ago\n return withoutSuffix ? 'minuta' : isFuture ? 'minutu' : 'minutou';\n case 'mm': // 9 minutes / in 9 minutes / 9 minutes ago\n if (withoutSuffix || isFuture) {\n return result + (plural(number) ? 'minuty' : 'minut');\n } else {\n return result + 'minutami';\n }\n case 'h': // an hour / in an hour / an hour ago\n return withoutSuffix ? 'hodina' : isFuture ? 'hodinu' : 'hodinou';\n case 'hh': // 9 hours / in 9 hours / 9 hours ago\n if (withoutSuffix || isFuture) {\n return result + (plural(number) ? 'hodiny' : 'hodin');\n } else {\n return result + 'hodinami';\n }\n case 'd': // a day / in a day / a day ago\n return withoutSuffix || isFuture ? 'den' : 'dnem';\n case 'dd': // 9 days / in 9 days / 9 days ago\n if (withoutSuffix || isFuture) {\n return result + (plural(number) ? 'dny' : 'dní');\n } else {\n return result + 'dny';\n }\n case 'M': // a month / in a month / a month ago\n return withoutSuffix || isFuture ? 'měsíc' : 'měsícem';\n case 'MM': // 9 months / in 9 months / 9 months ago\n if (withoutSuffix || isFuture) {\n return result + (plural(number) ? 'měsíce' : 'měsíců');\n } else {\n return result + 'měsíci';\n }\n case 'y': // a year / in a year / a year ago\n return withoutSuffix || isFuture ? 'rok' : 'rokem';\n case 'yy': // 9 years / in 9 years / 9 years ago\n if (withoutSuffix || isFuture) {\n return result + (plural(number) ? 'roky' : 'let');\n } else {\n return result + 'lety';\n }\n }\n }\n\n var cs = moment.defineLocale('cs', {\n months: months,\n monthsShort: monthsShort,\n monthsRegex: monthsRegex,\n monthsShortRegex: monthsRegex,\n // NOTE: 'červen' is substring of 'červenec'; therefore 'červenec' must precede 'červen' in the regex to be fully matched.\n // Otherwise parser matches '1. červenec' as '1. červen' + 'ec'.\n monthsStrictRegex:\n /^(leden|ledna|února|únor|březen|března|duben|dubna|květen|května|červenec|července|červen|června|srpen|srpna|září|říjen|října|listopadu|listopad|prosinec|prosince)/i,\n monthsShortStrictRegex:\n /^(led|úno|bře|dub|kvě|čvn|čvc|srp|zář|říj|lis|pro)/i,\n monthsParse: monthsParse,\n longMonthsParse: monthsParse,\n shortMonthsParse: monthsParse,\n weekdays: 'neděle_pondělí_úterý_středa_čtvrtek_pátek_sobota'.split('_'),\n weekdaysShort: 'ne_po_út_st_čt_pá_so'.split('_'),\n weekdaysMin: 'ne_po_út_st_čt_pá_so'.split('_'),\n longDateFormat: {\n LT: 'H:mm',\n LTS: 'H:mm:ss',\n L: 'DD.MM.YYYY',\n LL: 'D. MMMM YYYY',\n LLL: 'D. MMMM YYYY H:mm',\n LLLL: 'dddd D. MMMM YYYY H:mm',\n l: 'D. M. YYYY',\n },\n calendar: {\n sameDay: '[dnes v] LT',\n nextDay: '[zítra v] LT',\n nextWeek: function () {\n switch (this.day()) {\n case 0:\n return '[v neděli v] LT';\n case 1:\n case 2:\n return '[v] dddd [v] LT';\n case 3:\n return '[ve středu v] LT';\n case 4:\n return '[ve čtvrtek v] LT';\n case 5:\n return '[v pátek v] LT';\n case 6:\n return '[v sobotu v] LT';\n }\n },\n lastDay: '[včera v] LT',\n lastWeek: function () {\n switch (this.day()) {\n case 0:\n return '[minulou neděli v] LT';\n case 1:\n case 2:\n return '[minulé] dddd [v] LT';\n case 3:\n return '[minulou středu v] LT';\n case 4:\n case 5:\n return '[minulý] dddd [v] LT';\n case 6:\n return '[minulou sobotu v] LT';\n }\n },\n sameElse: 'L',\n },\n relativeTime: {\n future: 'za %s',\n past: 'před %s',\n s: translate,\n ss: translate,\n m: translate,\n mm: translate,\n h: translate,\n hh: translate,\n d: translate,\n dd: translate,\n M: translate,\n MM: translate,\n y: translate,\n yy: translate,\n },\n dayOfMonthOrdinalParse: /\\d{1,2}\\./,\n ordinal: '%d.',\n week: {\n dow: 1, // Monday is the first day of the week.\n doy: 4, // The week that contains Jan 4th is the first week of the year.\n },\n });\n\n return cs;\n\n})));\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNTY0NjQuanMiLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9pdGctbmV4dGdlbi1mcm9udGVuZC8uL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL2NzLmpzPzNjMGQiXSwic291cmNlc0NvbnRlbnQiOlsiLy8hIG1vbWVudC5qcyBsb2NhbGUgY29uZmlndXJhdGlvblxuLy8hIGxvY2FsZSA6IEN6ZWNoIFtjc11cbi8vISBhdXRob3IgOiBwZXRyYmVsYSA6IGh0dHBzOi8vZ2l0aHViLmNvbS9wZXRyYmVsYVxuXG47KGZ1bmN0aW9uIChnbG9iYWwsIGZhY3RvcnkpIHtcbiAgIHR5cGVvZiBleHBvcnRzID09PSAnb2JqZWN0JyAmJiB0eXBlb2YgbW9kdWxlICE9PSAndW5kZWZpbmVkJ1xuICAgICAgICYmIHR5cGVvZiByZXF1aXJlID09PSAnZnVuY3Rpb24nID8gZmFjdG9yeShyZXF1aXJlKCcuLi9tb21lbnQnKSkgOlxuICAgdHlwZW9mIGRlZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiBkZWZpbmUuYW1kID8gZGVmaW5lKFsnLi4vbW9tZW50J10sIGZhY3RvcnkpIDpcbiAgIGZhY3RvcnkoZ2xvYmFsLm1vbWVudClcbn0odGhpcywgKGZ1bmN0aW9uIChtb21lbnQpIHsgJ3VzZSBzdHJpY3QnO1xuXG4gICAgLy8hIG1vbWVudC5qcyBsb2NhbGUgY29uZmlndXJhdGlvblxuXG4gICAgdmFyIG1vbnRocyA9IHtcbiAgICAgICAgICAgIHN0YW5kYWxvbmU6XG4gICAgICAgICAgICAgICAgJ2xlZGVuX8O6bm9yX2LFmWV6ZW5fZHViZW5fa3bEm3Rlbl/EjWVydmVuX8SNZXJ2ZW5lY19zcnBlbl96w6HFmcOtX8WZw61qZW5fbGlzdG9wYWRfcHJvc2luZWMnLnNwbGl0KFxuICAgICAgICAgICAgICAgICAgICAnXydcbiAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgZm9ybWF0OiAnbGVkbmFfw7pub3JhX2LFmWV6bmFfZHVibmFfa3bEm3RuYV/EjWVydm5hX8SNZXJ2ZW5jZV9zcnBuYV96w6HFmcOtX8WZw61qbmFfbGlzdG9wYWR1X3Byb3NpbmNlJy5zcGxpdChcbiAgICAgICAgICAgICAgICAnXydcbiAgICAgICAgICAgICksXG4gICAgICAgICAgICBpc0Zvcm1hdDogL0REP1tvLl0/KFxcW1teXFxbXFxdXSpcXF18XFxzKStNTU1NLyxcbiAgICAgICAgfSxcbiAgICAgICAgbW9udGhzU2hvcnQgPSAnbGVkX8O6bm9fYsWZZV9kdWJfa3bEm1/EjXZuX8SNdmNfc3JwX3rDocWZX8WZw61qX2xpc19wcm8nLnNwbGl0KCdfJyksXG4gICAgICAgIG1vbnRoc1BhcnNlID0gW1xuICAgICAgICAgICAgL15sZWQvaSxcbiAgICAgICAgICAgIC9ew7puby9pLFxuICAgICAgICAgICAgL15ixZllL2ksXG4gICAgICAgICAgICAvXmR1Yi9pLFxuICAgICAgICAgICAgL15rdsSbL2ksXG4gICAgICAgICAgICAvXijEjXZufMSNZXJ2ZW4kfMSNZXJ2bmEpL2ksXG4gICAgICAgICAgICAvXijEjXZjfMSNZXJ2ZW5lY3zEjWVydmVuY2UpL2ksXG4gICAgICAgICAgICAvXnNycC9pLFxuICAgICAgICAgICAgL156w6HFmS9pLFxuICAgICAgICAgICAgL17FmcOtai9pLFxuICAgICAgICAgICAgL15saXMvaSxcbiAgICAgICAgICAgIC9ecHJvL2ksXG4gICAgICAgIF0sXG4gICAgICAgIC8vIE5PVEU6ICfEjWVydmVuJyBpcyBzdWJzdHJpbmcgb2YgJ8SNZXJ2ZW5lYyc7IHRoZXJlZm9yZSAnxI1lcnZlbmVjJyBtdXN0IHByZWNlZGUgJ8SNZXJ2ZW4nIGluIHRoZSByZWdleCB0byBiZSBmdWxseSBtYXRjaGVkLlxuICAgICAgICAvLyBPdGhlcndpc2UgcGFyc2VyIG1hdGNoZXMgJzEuIMSNZXJ2ZW5lYycgYXMgJzEuIMSNZXJ2ZW4nICsgJ2VjJy5cbiAgICAgICAgbW9udGhzUmVnZXggPVxuICAgICAgICAgICAgL14obGVkZW58w7pub3J8YsWZZXplbnxkdWJlbnxrdsSbdGVufMSNZXJ2ZW5lY3zEjWVydmVuY2V8xI1lcnZlbnzEjWVydm5hfHNycGVufHrDocWZw618xZnDrWplbnxsaXN0b3BhZHxwcm9zaW5lY3xsZWR8w7pub3xixZllfGR1YnxrdsSbfMSNdm58xI12Y3xzcnB8esOhxZl8xZnDrWp8bGlzfHBybykvaTtcblxuICAgIGZ1bmN0aW9uIHBsdXJhbChuKSB7XG4gICAgICAgIHJldHVybiBuID4gMSAmJiBuIDwgNSAmJiB+fihuIC8gMTApICE9PSAxO1xuICAgIH1cbiAgICBmdW5jdGlvbiB0cmFuc2xhdGUobnVtYmVyLCB3aXRob3V0U3VmZml4LCBrZXksIGlzRnV0dXJlKSB7XG4gICAgICAgIHZhciByZXN1bHQgPSBudW1iZXIgKyAnICc7XG4gICAgICAgIHN3aXRjaCAoa2V5KSB7XG4gICAgICAgICAgICBjYXNlICdzJzogLy8gYSBmZXcgc2Vjb25kcyAvIGluIGEgZmV3IHNlY29uZHMgLyBhIGZldyBzZWNvbmRzIGFnb1xuICAgICAgICAgICAgICAgIHJldHVybiB3aXRob3V0U3VmZml4IHx8IGlzRnV0dXJlID8gJ3DDoXIgc2VrdW5kJyA6ICdww6FyIHNla3VuZGFtaSc7XG4gICAgICAgICAgICBjYXNlICdzcyc6IC8vIDkgc2Vjb25kcyAvIGluIDkgc2Vjb25kcyAvIDkgc2Vjb25kcyBhZ29cbiAgICAgICAgICAgICAgICBpZiAod2l0aG91dFN1ZmZpeCB8fCBpc0Z1dHVyZSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0ICsgKHBsdXJhbChudW1iZXIpID8gJ3Nla3VuZHknIDogJ3Nla3VuZCcpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQgKyAnc2VrdW5kYW1pJztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXNlICdtJzogLy8gYSBtaW51dGUgLyBpbiBhIG1pbnV0ZSAvIGEgbWludXRlIGFnb1xuICAgICAgICAgICAgICAgIHJldHVybiB3aXRob3V0U3VmZml4ID8gJ21pbnV0YScgOiBpc0Z1dHVyZSA/ICdtaW51dHUnIDogJ21pbnV0b3UnO1xuICAgICAgICAgICAgY2FzZSAnbW0nOiAvLyA5IG1pbnV0ZXMgLyBpbiA5IG1pbnV0ZXMgLyA5IG1pbnV0ZXMgYWdvXG4gICAgICAgICAgICAgICAgaWYgKHdpdGhvdXRTdWZmaXggfHwgaXNGdXR1cmUpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdCArIChwbHVyYWwobnVtYmVyKSA/ICdtaW51dHknIDogJ21pbnV0Jyk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdCArICdtaW51dGFtaSc7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2FzZSAnaCc6IC8vIGFuIGhvdXIgLyBpbiBhbiBob3VyIC8gYW4gaG91ciBhZ29cbiAgICAgICAgICAgICAgICByZXR1cm4gd2l0aG91dFN1ZmZpeCA/ICdob2RpbmEnIDogaXNGdXR1cmUgPyAnaG9kaW51JyA6ICdob2Rpbm91JztcbiAgICAgICAgICAgIGNhc2UgJ2hoJzogLy8gOSBob3VycyAvIGluIDkgaG91cnMgLyA5IGhvdXJzIGFnb1xuICAgICAgICAgICAgICAgIGlmICh3aXRob3V0U3VmZml4IHx8IGlzRnV0dXJlKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQgKyAocGx1cmFsKG51bWJlcikgPyAnaG9kaW55JyA6ICdob2RpbicpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQgKyAnaG9kaW5hbWknO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhc2UgJ2QnOiAvLyBhIGRheSAvIGluIGEgZGF5IC8gYSBkYXkgYWdvXG4gICAgICAgICAgICAgICAgcmV0dXJuIHdpdGhvdXRTdWZmaXggfHwgaXNGdXR1cmUgPyAnZGVuJyA6ICdkbmVtJztcbiAgICAgICAgICAgIGNhc2UgJ2RkJzogLy8gOSBkYXlzIC8gaW4gOSBkYXlzIC8gOSBkYXlzIGFnb1xuICAgICAgICAgICAgICAgIGlmICh3aXRob3V0U3VmZml4IHx8IGlzRnV0dXJlKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQgKyAocGx1cmFsKG51bWJlcikgPyAnZG55JyA6ICdkbsOtJyk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdCArICdkbnknO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhc2UgJ00nOiAvLyBhIG1vbnRoIC8gaW4gYSBtb250aCAvIGEgbW9udGggYWdvXG4gICAgICAgICAgICAgICAgcmV0dXJuIHdpdGhvdXRTdWZmaXggfHwgaXNGdXR1cmUgPyAnbcSbc8OtYycgOiAnbcSbc8OtY2VtJztcbiAgICAgICAgICAgIGNhc2UgJ01NJzogLy8gOSBtb250aHMgLyBpbiA5IG1vbnRocyAvIDkgbW9udGhzIGFnb1xuICAgICAgICAgICAgICAgIGlmICh3aXRob3V0U3VmZml4IHx8IGlzRnV0dXJlKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQgKyAocGx1cmFsKG51bWJlcikgPyAnbcSbc8OtY2UnIDogJ23Em3PDrWPFrycpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQgKyAnbcSbc8OtY2knO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhc2UgJ3knOiAvLyBhIHllYXIgLyBpbiBhIHllYXIgLyBhIHllYXIgYWdvXG4gICAgICAgICAgICAgICAgcmV0dXJuIHdpdGhvdXRTdWZmaXggfHwgaXNGdXR1cmUgPyAncm9rJyA6ICdyb2tlbSc7XG4gICAgICAgICAgICBjYXNlICd5eSc6IC8vIDkgeWVhcnMgLyBpbiA5IHllYXJzIC8gOSB5ZWFycyBhZ29cbiAgICAgICAgICAgICAgICBpZiAod2l0aG91dFN1ZmZpeCB8fCBpc0Z1dHVyZSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0ICsgKHBsdXJhbChudW1iZXIpID8gJ3Jva3knIDogJ2xldCcpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQgKyAnbGV0eSc7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgdmFyIGNzID0gbW9tZW50LmRlZmluZUxvY2FsZSgnY3MnLCB7XG4gICAgICAgIG1vbnRoczogbW9udGhzLFxuICAgICAgICBtb250aHNTaG9ydDogbW9udGhzU2hvcnQsXG4gICAgICAgIG1vbnRoc1JlZ2V4OiBtb250aHNSZWdleCxcbiAgICAgICAgbW9udGhzU2hvcnRSZWdleDogbW9udGhzUmVnZXgsXG4gICAgICAgIC8vIE5PVEU6ICfEjWVydmVuJyBpcyBzdWJzdHJpbmcgb2YgJ8SNZXJ2ZW5lYyc7IHRoZXJlZm9yZSAnxI1lcnZlbmVjJyBtdXN0IHByZWNlZGUgJ8SNZXJ2ZW4nIGluIHRoZSByZWdleCB0byBiZSBmdWxseSBtYXRjaGVkLlxuICAgICAgICAvLyBPdGhlcndpc2UgcGFyc2VyIG1hdGNoZXMgJzEuIMSNZXJ2ZW5lYycgYXMgJzEuIMSNZXJ2ZW4nICsgJ2VjJy5cbiAgICAgICAgbW9udGhzU3RyaWN0UmVnZXg6XG4gICAgICAgICAgICAvXihsZWRlbnxsZWRuYXzDum5vcmF8w7pub3J8YsWZZXplbnxixZllem5hfGR1YmVufGR1Ym5hfGt2xJt0ZW58a3bEm3RuYXzEjWVydmVuZWN8xI1lcnZlbmNlfMSNZXJ2ZW58xI1lcnZuYXxzcnBlbnxzcnBuYXx6w6HFmcOtfMWZw61qZW58xZnDrWpuYXxsaXN0b3BhZHV8bGlzdG9wYWR8cHJvc2luZWN8cHJvc2luY2UpL2ksXG4gICAgICAgIG1vbnRoc1Nob3J0U3RyaWN0UmVnZXg6XG4gICAgICAgICAgICAvXihsZWR8w7pub3xixZllfGR1YnxrdsSbfMSNdm58xI12Y3xzcnB8esOhxZl8xZnDrWp8bGlzfHBybykvaSxcbiAgICAgICAgbW9udGhzUGFyc2U6IG1vbnRoc1BhcnNlLFxuICAgICAgICBsb25nTW9udGhzUGFyc2U6IG1vbnRoc1BhcnNlLFxuICAgICAgICBzaG9ydE1vbnRoc1BhcnNlOiBtb250aHNQYXJzZSxcbiAgICAgICAgd2Vla2RheXM6ICduZWTEm2xlX3BvbmTEm2zDrV/DunRlcsO9X3N0xZllZGFfxI10dnJ0ZWtfcMOhdGVrX3NvYm90YScuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXNTaG9ydDogJ25lX3BvX8O6dF9zdF/EjXRfcMOhX3NvJy5zcGxpdCgnXycpLFxuICAgICAgICB3ZWVrZGF5c01pbjogJ25lX3BvX8O6dF9zdF/EjXRfcMOhX3NvJy5zcGxpdCgnXycpLFxuICAgICAgICBsb25nRGF0ZUZvcm1hdDoge1xuICAgICAgICAgICAgTFQ6ICdIOm1tJyxcbiAgICAgICAgICAgIExUUzogJ0g6bW06c3MnLFxuICAgICAgICAgICAgTDogJ0RELk1NLllZWVknLFxuICAgICAgICAgICAgTEw6ICdELiBNTU1NIFlZWVknLFxuICAgICAgICAgICAgTExMOiAnRC4gTU1NTSBZWVlZIEg6bW0nLFxuICAgICAgICAgICAgTExMTDogJ2RkZGQgRC4gTU1NTSBZWVlZIEg6bW0nLFxuICAgICAgICAgICAgbDogJ0QuIE0uIFlZWVknLFxuICAgICAgICB9LFxuICAgICAgICBjYWxlbmRhcjoge1xuICAgICAgICAgICAgc2FtZURheTogJ1tkbmVzIHZdIExUJyxcbiAgICAgICAgICAgIG5leHREYXk6ICdbesOtdHJhIHZdIExUJyxcbiAgICAgICAgICAgIG5leHRXZWVrOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgc3dpdGNoICh0aGlzLmRheSgpKSB7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgMDpcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAnW3YgbmVkxJtsaSB2XSBMVCc7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgMTpcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAyOlxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICdbdl0gZGRkZCBbdl0gTFQnO1xuICAgICAgICAgICAgICAgICAgICBjYXNlIDM6XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gJ1t2ZSBzdMWZZWR1IHZdIExUJztcbiAgICAgICAgICAgICAgICAgICAgY2FzZSA0OlxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICdbdmUgxI10dnJ0ZWsgdl0gTFQnO1xuICAgICAgICAgICAgICAgICAgICBjYXNlIDU6XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gJ1t2IHDDoXRlayB2XSBMVCc7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgNjpcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAnW3Ygc29ib3R1IHZdIExUJztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgbGFzdERheTogJ1t2xI1lcmEgdl0gTFQnLFxuICAgICAgICAgICAgbGFzdFdlZWs6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICBzd2l0Y2ggKHRoaXMuZGF5KCkpIHtcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAwOlxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICdbbWludWxvdSBuZWTEm2xpIHZdIExUJztcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAxOlxuICAgICAgICAgICAgICAgICAgICBjYXNlIDI6XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gJ1ttaW51bMOpXSBkZGRkIFt2XSBMVCc7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgMzpcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAnW21pbnVsb3Ugc3TFmWVkdSB2XSBMVCc7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgNDpcbiAgICAgICAgICAgICAgICAgICAgY2FzZSA1OlxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICdbbWludWzDvV0gZGRkZCBbdl0gTFQnO1xuICAgICAgICAgICAgICAgICAgICBjYXNlIDY6XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gJ1ttaW51bG91IHNvYm90dSB2XSBMVCc7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHNhbWVFbHNlOiAnTCcsXG4gICAgICAgIH0sXG4gICAgICAgIHJlbGF0aXZlVGltZToge1xuICAgICAgICAgICAgZnV0dXJlOiAnemEgJXMnLFxuICAgICAgICAgICAgcGFzdDogJ3DFmWVkICVzJyxcbiAgICAgICAgICAgIHM6IHRyYW5zbGF0ZSxcbiAgICAgICAgICAgIHNzOiB0cmFuc2xhdGUsXG4gICAgICAgICAgICBtOiB0cmFuc2xhdGUsXG4gICAgICAgICAgICBtbTogdHJhbnNsYXRlLFxuICAgICAgICAgICAgaDogdHJhbnNsYXRlLFxuICAgICAgICAgICAgaGg6IHRyYW5zbGF0ZSxcbiAgICAgICAgICAgIGQ6IHRyYW5zbGF0ZSxcbiAgICAgICAgICAgIGRkOiB0cmFuc2xhdGUsXG4gICAgICAgICAgICBNOiB0cmFuc2xhdGUsXG4gICAgICAgICAgICBNTTogdHJhbnNsYXRlLFxuICAgICAgICAgICAgeTogdHJhbnNsYXRlLFxuICAgICAgICAgICAgeXk6IHRyYW5zbGF0ZSxcbiAgICAgICAgfSxcbiAgICAgICAgZGF5T2ZNb250aE9yZGluYWxQYXJzZTogL1xcZHsxLDJ9XFwuLyxcbiAgICAgICAgb3JkaW5hbDogJyVkLicsXG4gICAgICAgIHdlZWs6IHtcbiAgICAgICAgICAgIGRvdzogMSwgLy8gTW9uZGF5IGlzIHRoZSBmaXJzdCBkYXkgb2YgdGhlIHdlZWsuXG4gICAgICAgICAgICBkb3k6IDQsIC8vIFRoZSB3ZWVrIHRoYXQgY29udGFpbnMgSmFuIDR0aCBpcyB0aGUgZmlyc3Qgd2VlayBvZiB0aGUgeWVhci5cbiAgICAgICAgfSxcbiAgICB9KTtcblxuICAgIHJldHVybiBjcztcblxufSkpKTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///56464\n")},56488:(I,g,t)=>{"use strict";I.exports=t.p+"b3108444570c6a7c0520.png"},56575:function(__unused_webpack_module,__unused_webpack_exports,__webpack_require__){eval("//! moment.js locale configuration\n//! locale : Spanish (United States) [es-us]\n//! author : bustta : https://github.com/bustta\n//! author : chrisrodz : https://github.com/chrisrodz\n\n;(function (global, factory) {\n true ? factory(__webpack_require__(95093)) :\n 0\n}(this, (function (moment) { 'use strict';\n\n //! moment.js locale configuration\n\n var monthsShortDot =\n 'ene._feb._mar._abr._may._jun._jul._ago._sep._oct._nov._dic.'.split(\n '_'\n ),\n monthsShort = 'ene_feb_mar_abr_may_jun_jul_ago_sep_oct_nov_dic'.split('_'),\n monthsParse = [\n /^ene/i,\n /^feb/i,\n /^mar/i,\n /^abr/i,\n /^may/i,\n /^jun/i,\n /^jul/i,\n /^ago/i,\n /^sep/i,\n /^oct/i,\n /^nov/i,\n /^dic/i,\n ],\n monthsRegex =\n /^(enero|febrero|marzo|abril|mayo|junio|julio|agosto|septiembre|octubre|noviembre|diciembre|ene\\.?|feb\\.?|mar\\.?|abr\\.?|may\\.?|jun\\.?|jul\\.?|ago\\.?|sep\\.?|oct\\.?|nov\\.?|dic\\.?)/i;\n\n var esUs = moment.defineLocale('es-us', {\n months: 'enero_febrero_marzo_abril_mayo_junio_julio_agosto_septiembre_octubre_noviembre_diciembre'.split(\n '_'\n ),\n monthsShort: function (m, format) {\n if (!m) {\n return monthsShortDot;\n } else if (/-MMM-/.test(format)) {\n return monthsShort[m.month()];\n } else {\n return monthsShortDot[m.month()];\n }\n },\n monthsRegex: monthsRegex,\n monthsShortRegex: monthsRegex,\n monthsStrictRegex:\n /^(enero|febrero|marzo|abril|mayo|junio|julio|agosto|septiembre|octubre|noviembre|diciembre)/i,\n monthsShortStrictRegex:\n /^(ene\\.?|feb\\.?|mar\\.?|abr\\.?|may\\.?|jun\\.?|jul\\.?|ago\\.?|sep\\.?|oct\\.?|nov\\.?|dic\\.?)/i,\n monthsParse: monthsParse,\n longMonthsParse: monthsParse,\n shortMonthsParse: monthsParse,\n weekdays: 'domingo_lunes_martes_miércoles_jueves_viernes_sábado'.split('_'),\n weekdaysShort: 'dom._lun._mar._mié._jue._vie._sáb.'.split('_'),\n weekdaysMin: 'do_lu_ma_mi_ju_vi_sá'.split('_'),\n weekdaysParseExact: true,\n longDateFormat: {\n LT: 'h:mm A',\n LTS: 'h:mm:ss A',\n L: 'MM/DD/YYYY',\n LL: 'D [de] MMMM [de] YYYY',\n LLL: 'D [de] MMMM [de] YYYY h:mm A',\n LLLL: 'dddd, D [de] MMMM [de] YYYY h:mm A',\n },\n calendar: {\n sameDay: function () {\n return '[hoy a la' + (this.hours() !== 1 ? 's' : '') + '] LT';\n },\n nextDay: function () {\n return '[mañana a la' + (this.hours() !== 1 ? 's' : '') + '] LT';\n },\n nextWeek: function () {\n return 'dddd [a la' + (this.hours() !== 1 ? 's' : '') + '] LT';\n },\n lastDay: function () {\n return '[ayer a la' + (this.hours() !== 1 ? 's' : '') + '] LT';\n },\n lastWeek: function () {\n return (\n '[el] dddd [pasado a la' +\n (this.hours() !== 1 ? 's' : '') +\n '] LT'\n );\n },\n sameElse: 'L',\n },\n relativeTime: {\n future: 'en %s',\n past: 'hace %s',\n s: 'unos segundos',\n ss: '%d segundos',\n m: 'un minuto',\n mm: '%d minutos',\n h: 'una hora',\n hh: '%d horas',\n d: 'un día',\n dd: '%d días',\n w: 'una semana',\n ww: '%d semanas',\n M: 'un mes',\n MM: '%d meses',\n y: 'un año',\n yy: '%d años',\n },\n dayOfMonthOrdinalParse: /\\d{1,2}º/,\n ordinal: '%dº',\n week: {\n dow: 0, // Sunday is the first day of the week.\n doy: 6, // The week that contains Jan 6th is the first week of the year.\n },\n });\n\n return esUs;\n\n})));\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNTY1NzUuanMiLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL2l0Zy1uZXh0Z2VuLWZyb250ZW5kLy4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvZXMtdXMuanM/NTVjOSJdLCJzb3VyY2VzQ29udGVudCI6WyIvLyEgbW9tZW50LmpzIGxvY2FsZSBjb25maWd1cmF0aW9uXG4vLyEgbG9jYWxlIDogU3BhbmlzaCAoVW5pdGVkIFN0YXRlcykgW2VzLXVzXVxuLy8hIGF1dGhvciA6IGJ1c3R0YSA6IGh0dHBzOi8vZ2l0aHViLmNvbS9idXN0dGFcbi8vISBhdXRob3IgOiBjaHJpc3JvZHogOiBodHRwczovL2dpdGh1Yi5jb20vY2hyaXNyb2R6XG5cbjsoZnVuY3Rpb24gKGdsb2JhbCwgZmFjdG9yeSkge1xuICAgdHlwZW9mIGV4cG9ydHMgPT09ICdvYmplY3QnICYmIHR5cGVvZiBtb2R1bGUgIT09ICd1bmRlZmluZWQnXG4gICAgICAgJiYgdHlwZW9mIHJlcXVpcmUgPT09ICdmdW5jdGlvbicgPyBmYWN0b3J5KHJlcXVpcmUoJy4uL21vbWVudCcpKSA6XG4gICB0eXBlb2YgZGVmaW5lID09PSAnZnVuY3Rpb24nICYmIGRlZmluZS5hbWQgPyBkZWZpbmUoWycuLi9tb21lbnQnXSwgZmFjdG9yeSkgOlxuICAgZmFjdG9yeShnbG9iYWwubW9tZW50KVxufSh0aGlzLCAoZnVuY3Rpb24gKG1vbWVudCkgeyAndXNlIHN0cmljdCc7XG5cbiAgICAvLyEgbW9tZW50LmpzIGxvY2FsZSBjb25maWd1cmF0aW9uXG5cbiAgICB2YXIgbW9udGhzU2hvcnREb3QgPVxuICAgICAgICAgICAgJ2VuZS5fZmViLl9tYXIuX2Fici5fbWF5Ll9qdW4uX2p1bC5fYWdvLl9zZXAuX29jdC5fbm92Ll9kaWMuJy5zcGxpdChcbiAgICAgICAgICAgICAgICAnXydcbiAgICAgICAgICAgICksXG4gICAgICAgIG1vbnRoc1Nob3J0ID0gJ2VuZV9mZWJfbWFyX2Ficl9tYXlfanVuX2p1bF9hZ29fc2VwX29jdF9ub3ZfZGljJy5zcGxpdCgnXycpLFxuICAgICAgICBtb250aHNQYXJzZSA9IFtcbiAgICAgICAgICAgIC9eZW5lL2ksXG4gICAgICAgICAgICAvXmZlYi9pLFxuICAgICAgICAgICAgL15tYXIvaSxcbiAgICAgICAgICAgIC9eYWJyL2ksXG4gICAgICAgICAgICAvXm1heS9pLFxuICAgICAgICAgICAgL15qdW4vaSxcbiAgICAgICAgICAgIC9eanVsL2ksXG4gICAgICAgICAgICAvXmFnby9pLFxuICAgICAgICAgICAgL15zZXAvaSxcbiAgICAgICAgICAgIC9eb2N0L2ksXG4gICAgICAgICAgICAvXm5vdi9pLFxuICAgICAgICAgICAgL15kaWMvaSxcbiAgICAgICAgXSxcbiAgICAgICAgbW9udGhzUmVnZXggPVxuICAgICAgICAgICAgL14oZW5lcm98ZmVicmVyb3xtYXJ6b3xhYnJpbHxtYXlvfGp1bmlvfGp1bGlvfGFnb3N0b3xzZXB0aWVtYnJlfG9jdHVicmV8bm92aWVtYnJlfGRpY2llbWJyZXxlbmVcXC4/fGZlYlxcLj98bWFyXFwuP3xhYnJcXC4/fG1heVxcLj98anVuXFwuP3xqdWxcXC4/fGFnb1xcLj98c2VwXFwuP3xvY3RcXC4/fG5vdlxcLj98ZGljXFwuPykvaTtcblxuICAgIHZhciBlc1VzID0gbW9tZW50LmRlZmluZUxvY2FsZSgnZXMtdXMnLCB7XG4gICAgICAgIG1vbnRoczogJ2VuZXJvX2ZlYnJlcm9fbWFyem9fYWJyaWxfbWF5b19qdW5pb19qdWxpb19hZ29zdG9fc2VwdGllbWJyZV9vY3R1YnJlX25vdmllbWJyZV9kaWNpZW1icmUnLnNwbGl0KFxuICAgICAgICAgICAgJ18nXG4gICAgICAgICksXG4gICAgICAgIG1vbnRoc1Nob3J0OiBmdW5jdGlvbiAobSwgZm9ybWF0KSB7XG4gICAgICAgICAgICBpZiAoIW0pIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gbW9udGhzU2hvcnREb3Q7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKC8tTU1NLS8udGVzdChmb3JtYXQpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG1vbnRoc1Nob3J0W20ubW9udGgoKV07XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHJldHVybiBtb250aHNTaG9ydERvdFttLm1vbnRoKCldO1xuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBtb250aHNSZWdleDogbW9udGhzUmVnZXgsXG4gICAgICAgIG1vbnRoc1Nob3J0UmVnZXg6IG1vbnRoc1JlZ2V4LFxuICAgICAgICBtb250aHNTdHJpY3RSZWdleDpcbiAgICAgICAgICAgIC9eKGVuZXJvfGZlYnJlcm98bWFyem98YWJyaWx8bWF5b3xqdW5pb3xqdWxpb3xhZ29zdG98c2VwdGllbWJyZXxvY3R1YnJlfG5vdmllbWJyZXxkaWNpZW1icmUpL2ksXG4gICAgICAgIG1vbnRoc1Nob3J0U3RyaWN0UmVnZXg6XG4gICAgICAgICAgICAvXihlbmVcXC4/fGZlYlxcLj98bWFyXFwuP3xhYnJcXC4/fG1heVxcLj98anVuXFwuP3xqdWxcXC4/fGFnb1xcLj98c2VwXFwuP3xvY3RcXC4/fG5vdlxcLj98ZGljXFwuPykvaSxcbiAgICAgICAgbW9udGhzUGFyc2U6IG1vbnRoc1BhcnNlLFxuICAgICAgICBsb25nTW9udGhzUGFyc2U6IG1vbnRoc1BhcnNlLFxuICAgICAgICBzaG9ydE1vbnRoc1BhcnNlOiBtb250aHNQYXJzZSxcbiAgICAgICAgd2Vla2RheXM6ICdkb21pbmdvX2x1bmVzX21hcnRlc19tacOpcmNvbGVzX2p1ZXZlc192aWVybmVzX3PDoWJhZG8nLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzU2hvcnQ6ICdkb20uX2x1bi5fbWFyLl9tacOpLl9qdWUuX3ZpZS5fc8OhYi4nLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzTWluOiAnZG9fbHVfbWFfbWlfanVfdmlfc8OhJy5zcGxpdCgnXycpLFxuICAgICAgICB3ZWVrZGF5c1BhcnNlRXhhY3Q6IHRydWUsXG4gICAgICAgIGxvbmdEYXRlRm9ybWF0OiB7XG4gICAgICAgICAgICBMVDogJ2g6bW0gQScsXG4gICAgICAgICAgICBMVFM6ICdoOm1tOnNzIEEnLFxuICAgICAgICAgICAgTDogJ01NL0REL1lZWVknLFxuICAgICAgICAgICAgTEw6ICdEIFtkZV0gTU1NTSBbZGVdIFlZWVknLFxuICAgICAgICAgICAgTExMOiAnRCBbZGVdIE1NTU0gW2RlXSBZWVlZIGg6bW0gQScsXG4gICAgICAgICAgICBMTExMOiAnZGRkZCwgRCBbZGVdIE1NTU0gW2RlXSBZWVlZIGg6bW0gQScsXG4gICAgICAgIH0sXG4gICAgICAgIGNhbGVuZGFyOiB7XG4gICAgICAgICAgICBzYW1lRGF5OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuICdbaG95IGEgbGEnICsgKHRoaXMuaG91cnMoKSAhPT0gMSA/ICdzJyA6ICcnKSArICddIExUJztcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBuZXh0RGF5OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuICdbbWHDsWFuYSBhIGxhJyArICh0aGlzLmhvdXJzKCkgIT09IDEgPyAncycgOiAnJykgKyAnXSBMVCc7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgbmV4dFdlZWs6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gJ2RkZGQgW2EgbGEnICsgKHRoaXMuaG91cnMoKSAhPT0gMSA/ICdzJyA6ICcnKSArICddIExUJztcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBsYXN0RGF5OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuICdbYXllciBhIGxhJyArICh0aGlzLmhvdXJzKCkgIT09IDEgPyAncycgOiAnJykgKyAnXSBMVCc7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgbGFzdFdlZWs6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgICAgICAgICAnW2VsXSBkZGRkIFtwYXNhZG8gYSBsYScgK1xuICAgICAgICAgICAgICAgICAgICAodGhpcy5ob3VycygpICE9PSAxID8gJ3MnIDogJycpICtcbiAgICAgICAgICAgICAgICAgICAgJ10gTFQnXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBzYW1lRWxzZTogJ0wnLFxuICAgICAgICB9LFxuICAgICAgICByZWxhdGl2ZVRpbWU6IHtcbiAgICAgICAgICAgIGZ1dHVyZTogJ2VuICVzJyxcbiAgICAgICAgICAgIHBhc3Q6ICdoYWNlICVzJyxcbiAgICAgICAgICAgIHM6ICd1bm9zIHNlZ3VuZG9zJyxcbiAgICAgICAgICAgIHNzOiAnJWQgc2VndW5kb3MnLFxuICAgICAgICAgICAgbTogJ3VuIG1pbnV0bycsXG4gICAgICAgICAgICBtbTogJyVkIG1pbnV0b3MnLFxuICAgICAgICAgICAgaDogJ3VuYSBob3JhJyxcbiAgICAgICAgICAgIGhoOiAnJWQgaG9yYXMnLFxuICAgICAgICAgICAgZDogJ3VuIGTDrWEnLFxuICAgICAgICAgICAgZGQ6ICclZCBkw61hcycsXG4gICAgICAgICAgICB3OiAndW5hIHNlbWFuYScsXG4gICAgICAgICAgICB3dzogJyVkIHNlbWFuYXMnLFxuICAgICAgICAgICAgTTogJ3VuIG1lcycsXG4gICAgICAgICAgICBNTTogJyVkIG1lc2VzJyxcbiAgICAgICAgICAgIHk6ICd1biBhw7FvJyxcbiAgICAgICAgICAgIHl5OiAnJWQgYcOxb3MnLFxuICAgICAgICB9LFxuICAgICAgICBkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOiAvXFxkezEsMn3Cui8sXG4gICAgICAgIG9yZGluYWw6ICclZMK6JyxcbiAgICAgICAgd2Vlazoge1xuICAgICAgICAgICAgZG93OiAwLCAvLyBTdW5kYXkgaXMgdGhlIGZpcnN0IGRheSBvZiB0aGUgd2Vlay5cbiAgICAgICAgICAgIGRveTogNiwgLy8gVGhlIHdlZWsgdGhhdCBjb250YWlucyBKYW4gNnRoIGlzIHRoZSBmaXJzdCB3ZWVrIG9mIHRoZSB5ZWFyLlxuICAgICAgICB9LFxuICAgIH0pO1xuXG4gICAgcmV0dXJuIGVzVXM7XG5cbn0pKSk7XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///56575\n")},56698:module=>{eval("if (typeof Object.create === 'function') {\n // implementation from standard node.js 'util' module\n module.exports = function inherits(ctor, superCtor) {\n if (superCtor) {\n ctor.super_ = superCtor\n ctor.prototype = Object.create(superCtor.prototype, {\n constructor: {\n value: ctor,\n enumerable: false,\n writable: true,\n configurable: true\n }\n })\n }\n };\n} else {\n // old school shim for old browsers\n module.exports = function inherits(ctor, superCtor) {\n if (superCtor) {\n ctor.super_ = superCtor\n var TempCtor = function () {}\n TempCtor.prototype = superCtor.prototype\n ctor.prototype = new TempCtor()\n ctor.prototype.constructor = ctor\n }\n }\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNTY2OTguanMiLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vaXRnLW5leHRnZW4tZnJvbnRlbmQvLi9ub2RlX21vZHVsZXMvaW5oZXJpdHMvaW5oZXJpdHNfYnJvd3Nlci5qcz8zZmI1Il0sInNvdXJjZXNDb250ZW50IjpbImlmICh0eXBlb2YgT2JqZWN0LmNyZWF0ZSA9PT0gJ2Z1bmN0aW9uJykge1xuICAvLyBpbXBsZW1lbnRhdGlvbiBmcm9tIHN0YW5kYXJkIG5vZGUuanMgJ3V0aWwnIG1vZHVsZVxuICBtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGluaGVyaXRzKGN0b3IsIHN1cGVyQ3Rvcikge1xuICAgIGlmIChzdXBlckN0b3IpIHtcbiAgICAgIGN0b3Iuc3VwZXJfID0gc3VwZXJDdG9yXG4gICAgICBjdG9yLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoc3VwZXJDdG9yLnByb3RvdHlwZSwge1xuICAgICAgICBjb25zdHJ1Y3Rvcjoge1xuICAgICAgICAgIHZhbHVlOiBjdG9yLFxuICAgICAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgICAgIHdyaXRhYmxlOiB0cnVlLFxuICAgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgICAgICB9XG4gICAgICB9KVxuICAgIH1cbiAgfTtcbn0gZWxzZSB7XG4gIC8vIG9sZCBzY2hvb2wgc2hpbSBmb3Igb2xkIGJyb3dzZXJzXG4gIG1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gaW5oZXJpdHMoY3Rvciwgc3VwZXJDdG9yKSB7XG4gICAgaWYgKHN1cGVyQ3Rvcikge1xuICAgICAgY3Rvci5zdXBlcl8gPSBzdXBlckN0b3JcbiAgICAgIHZhciBUZW1wQ3RvciA9IGZ1bmN0aW9uICgpIHt9XG4gICAgICBUZW1wQ3Rvci5wcm90b3R5cGUgPSBzdXBlckN0b3IucHJvdG90eXBlXG4gICAgICBjdG9yLnByb3RvdHlwZSA9IG5ldyBUZW1wQ3RvcigpXG4gICAgICBjdG9yLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IGN0b3JcbiAgICB9XG4gIH1cbn1cbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///56698\n")},56962:(I,g,t)=>{"use strict";I.exports=t.p+"c62c6d1ed8e5f11dd78f.png"},57037:(I,g,t)=>{"use strict";I.exports=t.p+"43d42a8021c7b365c67e.png"},57060:(I,g,t)=>{"use strict";I.exports=t.p+"6c7c944fca1f8cac0b5d.png"},57165:function(module,exports,__webpack_require__){eval(";(function (root, factory, undef) {\n\tif (true) {\n\t\t// CommonJS\n\t\tmodule.exports = exports = factory(__webpack_require__(19021), __webpack_require__(39506));\n\t}\n\telse {}\n}(this, function (CryptoJS) {\n\n\t/**\n\t * Cipher core components.\n\t */\n\tCryptoJS.lib.Cipher || (function (undefined) {\n\t // Shortcuts\n\t var C = CryptoJS;\n\t var C_lib = C.lib;\n\t var Base = C_lib.Base;\n\t var WordArray = C_lib.WordArray;\n\t var BufferedBlockAlgorithm = C_lib.BufferedBlockAlgorithm;\n\t var C_enc = C.enc;\n\t var Utf8 = C_enc.Utf8;\n\t var Base64 = C_enc.Base64;\n\t var C_algo = C.algo;\n\t var EvpKDF = C_algo.EvpKDF;\n\n\t /**\n\t * Abstract base cipher template.\n\t *\n\t * @property {number} keySize This cipher's key size. Default: 4 (128 bits)\n\t * @property {number} ivSize This cipher's IV size. Default: 4 (128 bits)\n\t * @property {number} _ENC_XFORM_MODE A constant representing encryption mode.\n\t * @property {number} _DEC_XFORM_MODE A constant representing decryption mode.\n\t */\n\t var Cipher = C_lib.Cipher = BufferedBlockAlgorithm.extend({\n\t /**\n\t * Configuration options.\n\t *\n\t * @property {WordArray} iv The IV to use for this operation.\n\t */\n\t cfg: Base.extend(),\n\n\t /**\n\t * Creates this cipher in encryption mode.\n\t *\n\t * @param {WordArray} key The key.\n\t * @param {Object} cfg (Optional) The configuration options to use for this operation.\n\t *\n\t * @return {Cipher} A cipher instance.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var cipher = CryptoJS.algo.AES.createEncryptor(keyWordArray, { iv: ivWordArray });\n\t */\n\t createEncryptor: function (key, cfg) {\n\t return this.create(this._ENC_XFORM_MODE, key, cfg);\n\t },\n\n\t /**\n\t * Creates this cipher in decryption mode.\n\t *\n\t * @param {WordArray} key The key.\n\t * @param {Object} cfg (Optional) The configuration options to use for this operation.\n\t *\n\t * @return {Cipher} A cipher instance.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var cipher = CryptoJS.algo.AES.createDecryptor(keyWordArray, { iv: ivWordArray });\n\t */\n\t createDecryptor: function (key, cfg) {\n\t return this.create(this._DEC_XFORM_MODE, key, cfg);\n\t },\n\n\t /**\n\t * Initializes a newly created cipher.\n\t *\n\t * @param {number} xformMode Either the encryption or decryption transormation mode constant.\n\t * @param {WordArray} key The key.\n\t * @param {Object} cfg (Optional) The configuration options to use for this operation.\n\t *\n\t * @example\n\t *\n\t * var cipher = CryptoJS.algo.AES.create(CryptoJS.algo.AES._ENC_XFORM_MODE, keyWordArray, { iv: ivWordArray });\n\t */\n\t init: function (xformMode, key, cfg) {\n\t // Apply config defaults\n\t this.cfg = this.cfg.extend(cfg);\n\n\t // Store transform mode and key\n\t this._xformMode = xformMode;\n\t this._key = key;\n\n\t // Set initial values\n\t this.reset();\n\t },\n\n\t /**\n\t * Resets this cipher to its initial state.\n\t *\n\t * @example\n\t *\n\t * cipher.reset();\n\t */\n\t reset: function () {\n\t // Reset data buffer\n\t BufferedBlockAlgorithm.reset.call(this);\n\n\t // Perform concrete-cipher logic\n\t this._doReset();\n\t },\n\n\t /**\n\t * Adds data to be encrypted or decrypted.\n\t *\n\t * @param {WordArray|string} dataUpdate The data to encrypt or decrypt.\n\t *\n\t * @return {WordArray} The data after processing.\n\t *\n\t * @example\n\t *\n\t * var encrypted = cipher.process('data');\n\t * var encrypted = cipher.process(wordArray);\n\t */\n\t process: function (dataUpdate) {\n\t // Append\n\t this._append(dataUpdate);\n\n\t // Process available blocks\n\t return this._process();\n\t },\n\n\t /**\n\t * Finalizes the encryption or decryption process.\n\t * Note that the finalize operation is effectively a destructive, read-once operation.\n\t *\n\t * @param {WordArray|string} dataUpdate The final data to encrypt or decrypt.\n\t *\n\t * @return {WordArray} The data after final processing.\n\t *\n\t * @example\n\t *\n\t * var encrypted = cipher.finalize();\n\t * var encrypted = cipher.finalize('data');\n\t * var encrypted = cipher.finalize(wordArray);\n\t */\n\t finalize: function (dataUpdate) {\n\t // Final data update\n\t if (dataUpdate) {\n\t this._append(dataUpdate);\n\t }\n\n\t // Perform concrete-cipher logic\n\t var finalProcessedData = this._doFinalize();\n\n\t return finalProcessedData;\n\t },\n\n\t keySize: 128/32,\n\n\t ivSize: 128/32,\n\n\t _ENC_XFORM_MODE: 1,\n\n\t _DEC_XFORM_MODE: 2,\n\n\t /**\n\t * Creates shortcut functions to a cipher's object interface.\n\t *\n\t * @param {Cipher} cipher The cipher to create a helper for.\n\t *\n\t * @return {Object} An object with encrypt and decrypt shortcut functions.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var AES = CryptoJS.lib.Cipher._createHelper(CryptoJS.algo.AES);\n\t */\n\t _createHelper: (function () {\n\t function selectCipherStrategy(key) {\n\t if (typeof key == 'string') {\n\t return PasswordBasedCipher;\n\t } else {\n\t return SerializableCipher;\n\t }\n\t }\n\n\t return function (cipher) {\n\t return {\n\t encrypt: function (message, key, cfg) {\n\t return selectCipherStrategy(key).encrypt(cipher, message, key, cfg);\n\t },\n\n\t decrypt: function (ciphertext, key, cfg) {\n\t return selectCipherStrategy(key).decrypt(cipher, ciphertext, key, cfg);\n\t }\n\t };\n\t };\n\t }())\n\t });\n\n\t /**\n\t * Abstract base stream cipher template.\n\t *\n\t * @property {number} blockSize The number of 32-bit words this cipher operates on. Default: 1 (32 bits)\n\t */\n\t var StreamCipher = C_lib.StreamCipher = Cipher.extend({\n\t _doFinalize: function () {\n\t // Process partial blocks\n\t var finalProcessedBlocks = this._process(!!'flush');\n\n\t return finalProcessedBlocks;\n\t },\n\n\t blockSize: 1\n\t });\n\n\t /**\n\t * Mode namespace.\n\t */\n\t var C_mode = C.mode = {};\n\n\t /**\n\t * Abstract base block cipher mode template.\n\t */\n\t var BlockCipherMode = C_lib.BlockCipherMode = Base.extend({\n\t /**\n\t * Creates this mode for encryption.\n\t *\n\t * @param {Cipher} cipher A block cipher instance.\n\t * @param {Array} iv The IV words.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var mode = CryptoJS.mode.CBC.createEncryptor(cipher, iv.words);\n\t */\n\t createEncryptor: function (cipher, iv) {\n\t return this.Encryptor.create(cipher, iv);\n\t },\n\n\t /**\n\t * Creates this mode for decryption.\n\t *\n\t * @param {Cipher} cipher A block cipher instance.\n\t * @param {Array} iv The IV words.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var mode = CryptoJS.mode.CBC.createDecryptor(cipher, iv.words);\n\t */\n\t createDecryptor: function (cipher, iv) {\n\t return this.Decryptor.create(cipher, iv);\n\t },\n\n\t /**\n\t * Initializes a newly created mode.\n\t *\n\t * @param {Cipher} cipher A block cipher instance.\n\t * @param {Array} iv The IV words.\n\t *\n\t * @example\n\t *\n\t * var mode = CryptoJS.mode.CBC.Encryptor.create(cipher, iv.words);\n\t */\n\t init: function (cipher, iv) {\n\t this._cipher = cipher;\n\t this._iv = iv;\n\t }\n\t });\n\n\t /**\n\t * Cipher Block Chaining mode.\n\t */\n\t var CBC = C_mode.CBC = (function () {\n\t /**\n\t * Abstract base CBC mode.\n\t */\n\t var CBC = BlockCipherMode.extend();\n\n\t /**\n\t * CBC encryptor.\n\t */\n\t CBC.Encryptor = CBC.extend({\n\t /**\n\t * Processes the data block at offset.\n\t *\n\t * @param {Array} words The data words to operate on.\n\t * @param {number} offset The offset where the block starts.\n\t *\n\t * @example\n\t *\n\t * mode.processBlock(data.words, offset);\n\t */\n\t processBlock: function (words, offset) {\n\t // Shortcuts\n\t var cipher = this._cipher;\n\t var blockSize = cipher.blockSize;\n\n\t // XOR and encrypt\n\t xorBlock.call(this, words, offset, blockSize);\n\t cipher.encryptBlock(words, offset);\n\n\t // Remember this block to use with next block\n\t this._prevBlock = words.slice(offset, offset + blockSize);\n\t }\n\t });\n\n\t /**\n\t * CBC decryptor.\n\t */\n\t CBC.Decryptor = CBC.extend({\n\t /**\n\t * Processes the data block at offset.\n\t *\n\t * @param {Array} words The data words to operate on.\n\t * @param {number} offset The offset where the block starts.\n\t *\n\t * @example\n\t *\n\t * mode.processBlock(data.words, offset);\n\t */\n\t processBlock: function (words, offset) {\n\t // Shortcuts\n\t var cipher = this._cipher;\n\t var blockSize = cipher.blockSize;\n\n\t // Remember this block to use with next block\n\t var thisBlock = words.slice(offset, offset + blockSize);\n\n\t // Decrypt and XOR\n\t cipher.decryptBlock(words, offset);\n\t xorBlock.call(this, words, offset, blockSize);\n\n\t // This block becomes the previous block\n\t this._prevBlock = thisBlock;\n\t }\n\t });\n\n\t function xorBlock(words, offset, blockSize) {\n\t var block;\n\n\t // Shortcut\n\t var iv = this._iv;\n\n\t // Choose mixing block\n\t if (iv) {\n\t block = iv;\n\n\t // Remove IV for subsequent blocks\n\t this._iv = undefined;\n\t } else {\n\t block = this._prevBlock;\n\t }\n\n\t // XOR blocks\n\t for (var i = 0; i < blockSize; i++) {\n\t words[offset + i] ^= block[i];\n\t }\n\t }\n\n\t return CBC;\n\t }());\n\n\t /**\n\t * Padding namespace.\n\t */\n\t var C_pad = C.pad = {};\n\n\t /**\n\t * PKCS #5/7 padding strategy.\n\t */\n\t var Pkcs7 = C_pad.Pkcs7 = {\n\t /**\n\t * Pads data using the algorithm defined in PKCS #5/7.\n\t *\n\t * @param {WordArray} data The data to pad.\n\t * @param {number} blockSize The multiple that the data should be padded to.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * CryptoJS.pad.Pkcs7.pad(wordArray, 4);\n\t */\n\t pad: function (data, blockSize) {\n\t // Shortcut\n\t var blockSizeBytes = blockSize * 4;\n\n\t // Count padding bytes\n\t var nPaddingBytes = blockSizeBytes - data.sigBytes % blockSizeBytes;\n\n\t // Create padding word\n\t var paddingWord = (nPaddingBytes << 24) | (nPaddingBytes << 16) | (nPaddingBytes << 8) | nPaddingBytes;\n\n\t // Create padding\n\t var paddingWords = [];\n\t for (var i = 0; i < nPaddingBytes; i += 4) {\n\t paddingWords.push(paddingWord);\n\t }\n\t var padding = WordArray.create(paddingWords, nPaddingBytes);\n\n\t // Add padding\n\t data.concat(padding);\n\t },\n\n\t /**\n\t * Unpads data that had been padded using the algorithm defined in PKCS #5/7.\n\t *\n\t * @param {WordArray} data The data to unpad.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * CryptoJS.pad.Pkcs7.unpad(wordArray);\n\t */\n\t unpad: function (data) {\n\t // Get number of padding bytes from last byte\n\t var nPaddingBytes = data.words[(data.sigBytes - 1) >>> 2] & 0xff;\n\n\t // Remove padding\n\t data.sigBytes -= nPaddingBytes;\n\t }\n\t };\n\n\t /**\n\t * Abstract base block cipher template.\n\t *\n\t * @property {number} blockSize The number of 32-bit words this cipher operates on. Default: 4 (128 bits)\n\t */\n\t var BlockCipher = C_lib.BlockCipher = Cipher.extend({\n\t /**\n\t * Configuration options.\n\t *\n\t * @property {Mode} mode The block mode to use. Default: CBC\n\t * @property {Padding} padding The padding strategy to use. Default: Pkcs7\n\t */\n\t cfg: Cipher.cfg.extend({\n\t mode: CBC,\n\t padding: Pkcs7\n\t }),\n\n\t reset: function () {\n\t var modeCreator;\n\n\t // Reset cipher\n\t Cipher.reset.call(this);\n\n\t // Shortcuts\n\t var cfg = this.cfg;\n\t var iv = cfg.iv;\n\t var mode = cfg.mode;\n\n\t // Reset block mode\n\t if (this._xformMode == this._ENC_XFORM_MODE) {\n\t modeCreator = mode.createEncryptor;\n\t } else /* if (this._xformMode == this._DEC_XFORM_MODE) */ {\n\t modeCreator = mode.createDecryptor;\n\t // Keep at least one block in the buffer for unpadding\n\t this._minBufferSize = 1;\n\t }\n\n\t if (this._mode && this._mode.__creator == modeCreator) {\n\t this._mode.init(this, iv && iv.words);\n\t } else {\n\t this._mode = modeCreator.call(mode, this, iv && iv.words);\n\t this._mode.__creator = modeCreator;\n\t }\n\t },\n\n\t _doProcessBlock: function (words, offset) {\n\t this._mode.processBlock(words, offset);\n\t },\n\n\t _doFinalize: function () {\n\t var finalProcessedBlocks;\n\n\t // Shortcut\n\t var padding = this.cfg.padding;\n\n\t // Finalize\n\t if (this._xformMode == this._ENC_XFORM_MODE) {\n\t // Pad data\n\t padding.pad(this._data, this.blockSize);\n\n\t // Process final blocks\n\t finalProcessedBlocks = this._process(!!'flush');\n\t } else /* if (this._xformMode == this._DEC_XFORM_MODE) */ {\n\t // Process final blocks\n\t finalProcessedBlocks = this._process(!!'flush');\n\n\t // Unpad data\n\t padding.unpad(finalProcessedBlocks);\n\t }\n\n\t return finalProcessedBlocks;\n\t },\n\n\t blockSize: 128/32\n\t });\n\n\t /**\n\t * A collection of cipher parameters.\n\t *\n\t * @property {WordArray} ciphertext The raw ciphertext.\n\t * @property {WordArray} key The key to this ciphertext.\n\t * @property {WordArray} iv The IV used in the ciphering operation.\n\t * @property {WordArray} salt The salt used with a key derivation function.\n\t * @property {Cipher} algorithm The cipher algorithm.\n\t * @property {Mode} mode The block mode used in the ciphering operation.\n\t * @property {Padding} padding The padding scheme used in the ciphering operation.\n\t * @property {number} blockSize The block size of the cipher.\n\t * @property {Format} formatter The default formatting strategy to convert this cipher params object to a string.\n\t */\n\t var CipherParams = C_lib.CipherParams = Base.extend({\n\t /**\n\t * Initializes a newly created cipher params object.\n\t *\n\t * @param {Object} cipherParams An object with any of the possible cipher parameters.\n\t *\n\t * @example\n\t *\n\t * var cipherParams = CryptoJS.lib.CipherParams.create({\n\t * ciphertext: ciphertextWordArray,\n\t * key: keyWordArray,\n\t * iv: ivWordArray,\n\t * salt: saltWordArray,\n\t * algorithm: CryptoJS.algo.AES,\n\t * mode: CryptoJS.mode.CBC,\n\t * padding: CryptoJS.pad.PKCS7,\n\t * blockSize: 4,\n\t * formatter: CryptoJS.format.OpenSSL\n\t * });\n\t */\n\t init: function (cipherParams) {\n\t this.mixIn(cipherParams);\n\t },\n\n\t /**\n\t * Converts this cipher params object to a string.\n\t *\n\t * @param {Format} formatter (Optional) The formatting strategy to use.\n\t *\n\t * @return {string} The stringified cipher params.\n\t *\n\t * @throws Error If neither the formatter nor the default formatter is set.\n\t *\n\t * @example\n\t *\n\t * var string = cipherParams + '';\n\t * var string = cipherParams.toString();\n\t * var string = cipherParams.toString(CryptoJS.format.OpenSSL);\n\t */\n\t toString: function (formatter) {\n\t return (formatter || this.formatter).stringify(this);\n\t }\n\t });\n\n\t /**\n\t * Format namespace.\n\t */\n\t var C_format = C.format = {};\n\n\t /**\n\t * OpenSSL formatting strategy.\n\t */\n\t var OpenSSLFormatter = C_format.OpenSSL = {\n\t /**\n\t * Converts a cipher params object to an OpenSSL-compatible string.\n\t *\n\t * @param {CipherParams} cipherParams The cipher params object.\n\t *\n\t * @return {string} The OpenSSL-compatible string.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var openSSLString = CryptoJS.format.OpenSSL.stringify(cipherParams);\n\t */\n\t stringify: function (cipherParams) {\n\t var wordArray;\n\n\t // Shortcuts\n\t var ciphertext = cipherParams.ciphertext;\n\t var salt = cipherParams.salt;\n\n\t // Format\n\t if (salt) {\n\t wordArray = WordArray.create([0x53616c74, 0x65645f5f]).concat(salt).concat(ciphertext);\n\t } else {\n\t wordArray = ciphertext;\n\t }\n\n\t return wordArray.toString(Base64);\n\t },\n\n\t /**\n\t * Converts an OpenSSL-compatible string to a cipher params object.\n\t *\n\t * @param {string} openSSLStr The OpenSSL-compatible string.\n\t *\n\t * @return {CipherParams} The cipher params object.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var cipherParams = CryptoJS.format.OpenSSL.parse(openSSLString);\n\t */\n\t parse: function (openSSLStr) {\n\t var salt;\n\n\t // Parse base64\n\t var ciphertext = Base64.parse(openSSLStr);\n\n\t // Shortcut\n\t var ciphertextWords = ciphertext.words;\n\n\t // Test for salt\n\t if (ciphertextWords[0] == 0x53616c74 && ciphertextWords[1] == 0x65645f5f) {\n\t // Extract salt\n\t salt = WordArray.create(ciphertextWords.slice(2, 4));\n\n\t // Remove salt from ciphertext\n\t ciphertextWords.splice(0, 4);\n\t ciphertext.sigBytes -= 16;\n\t }\n\n\t return CipherParams.create({ ciphertext: ciphertext, salt: salt });\n\t }\n\t };\n\n\t /**\n\t * A cipher wrapper that returns ciphertext as a serializable cipher params object.\n\t */\n\t var SerializableCipher = C_lib.SerializableCipher = Base.extend({\n\t /**\n\t * Configuration options.\n\t *\n\t * @property {Formatter} format The formatting strategy to convert cipher param objects to and from a string. Default: OpenSSL\n\t */\n\t cfg: Base.extend({\n\t format: OpenSSLFormatter\n\t }),\n\n\t /**\n\t * Encrypts a message.\n\t *\n\t * @param {Cipher} cipher The cipher algorithm to use.\n\t * @param {WordArray|string} message The message to encrypt.\n\t * @param {WordArray} key The key.\n\t * @param {Object} cfg (Optional) The configuration options to use for this operation.\n\t *\n\t * @return {CipherParams} A cipher params object.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var ciphertextParams = CryptoJS.lib.SerializableCipher.encrypt(CryptoJS.algo.AES, message, key);\n\t * var ciphertextParams = CryptoJS.lib.SerializableCipher.encrypt(CryptoJS.algo.AES, message, key, { iv: iv });\n\t * var ciphertextParams = CryptoJS.lib.SerializableCipher.encrypt(CryptoJS.algo.AES, message, key, { iv: iv, format: CryptoJS.format.OpenSSL });\n\t */\n\t encrypt: function (cipher, message, key, cfg) {\n\t // Apply config defaults\n\t cfg = this.cfg.extend(cfg);\n\n\t // Encrypt\n\t var encryptor = cipher.createEncryptor(key, cfg);\n\t var ciphertext = encryptor.finalize(message);\n\n\t // Shortcut\n\t var cipherCfg = encryptor.cfg;\n\n\t // Create and return serializable cipher params\n\t return CipherParams.create({\n\t ciphertext: ciphertext,\n\t key: key,\n\t iv: cipherCfg.iv,\n\t algorithm: cipher,\n\t mode: cipherCfg.mode,\n\t padding: cipherCfg.padding,\n\t blockSize: cipher.blockSize,\n\t formatter: cfg.format\n\t });\n\t },\n\n\t /**\n\t * Decrypts serialized ciphertext.\n\t *\n\t * @param {Cipher} cipher The cipher algorithm to use.\n\t * @param {CipherParams|string} ciphertext The ciphertext to decrypt.\n\t * @param {WordArray} key The key.\n\t * @param {Object} cfg (Optional) The configuration options to use for this operation.\n\t *\n\t * @return {WordArray} The plaintext.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var plaintext = CryptoJS.lib.SerializableCipher.decrypt(CryptoJS.algo.AES, formattedCiphertext, key, { iv: iv, format: CryptoJS.format.OpenSSL });\n\t * var plaintext = CryptoJS.lib.SerializableCipher.decrypt(CryptoJS.algo.AES, ciphertextParams, key, { iv: iv, format: CryptoJS.format.OpenSSL });\n\t */\n\t decrypt: function (cipher, ciphertext, key, cfg) {\n\t // Apply config defaults\n\t cfg = this.cfg.extend(cfg);\n\n\t // Convert string to CipherParams\n\t ciphertext = this._parse(ciphertext, cfg.format);\n\n\t // Decrypt\n\t var plaintext = cipher.createDecryptor(key, cfg).finalize(ciphertext.ciphertext);\n\n\t return plaintext;\n\t },\n\n\t /**\n\t * Converts serialized ciphertext to CipherParams,\n\t * else assumed CipherParams already and returns ciphertext unchanged.\n\t *\n\t * @param {CipherParams|string} ciphertext The ciphertext.\n\t * @param {Formatter} format The formatting strategy to use to parse serialized ciphertext.\n\t *\n\t * @return {CipherParams} The unserialized ciphertext.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var ciphertextParams = CryptoJS.lib.SerializableCipher._parse(ciphertextStringOrParams, format);\n\t */\n\t _parse: function (ciphertext, format) {\n\t if (typeof ciphertext == 'string') {\n\t return format.parse(ciphertext, this);\n\t } else {\n\t return ciphertext;\n\t }\n\t }\n\t });\n\n\t /**\n\t * Key derivation function namespace.\n\t */\n\t var C_kdf = C.kdf = {};\n\n\t /**\n\t * OpenSSL key derivation function.\n\t */\n\t var OpenSSLKdf = C_kdf.OpenSSL = {\n\t /**\n\t * Derives a key and IV from a password.\n\t *\n\t * @param {string} password The password to derive from.\n\t * @param {number} keySize The size in words of the key to generate.\n\t * @param {number} ivSize The size in words of the IV to generate.\n\t * @param {WordArray|string} salt (Optional) A 64-bit salt to use. If omitted, a salt will be generated randomly.\n\t *\n\t * @return {CipherParams} A cipher params object with the key, IV, and salt.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var derivedParams = CryptoJS.kdf.OpenSSL.execute('Password', 256/32, 128/32);\n\t * var derivedParams = CryptoJS.kdf.OpenSSL.execute('Password', 256/32, 128/32, 'saltsalt');\n\t */\n\t execute: function (password, keySize, ivSize, salt, hasher) {\n\t // Generate random salt\n\t if (!salt) {\n\t salt = WordArray.random(64/8);\n\t }\n\n\t // Derive key and IV\n\t if (!hasher) {\n\t var key = EvpKDF.create({ keySize: keySize + ivSize }).compute(password, salt);\n\t } else {\n\t var key = EvpKDF.create({ keySize: keySize + ivSize, hasher: hasher }).compute(password, salt);\n\t }\n\n\n\t // Separate key and IV\n\t var iv = WordArray.create(key.words.slice(keySize), ivSize * 4);\n\t key.sigBytes = keySize * 4;\n\n\t // Return params\n\t return CipherParams.create({ key: key, iv: iv, salt: salt });\n\t }\n\t };\n\n\t /**\n\t * A serializable cipher wrapper that derives the key from a password,\n\t * and returns ciphertext as a serializable cipher params object.\n\t */\n\t var PasswordBasedCipher = C_lib.PasswordBasedCipher = SerializableCipher.extend({\n\t /**\n\t * Configuration options.\n\t *\n\t * @property {KDF} kdf The key derivation function to use to generate a key and IV from a password. Default: OpenSSL\n\t */\n\t cfg: SerializableCipher.cfg.extend({\n\t kdf: OpenSSLKdf\n\t }),\n\n\t /**\n\t * Encrypts a message using a password.\n\t *\n\t * @param {Cipher} cipher The cipher algorithm to use.\n\t * @param {WordArray|string} message The message to encrypt.\n\t * @param {string} password The password.\n\t * @param {Object} cfg (Optional) The configuration options to use for this operation.\n\t *\n\t * @return {CipherParams} A cipher params object.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var ciphertextParams = CryptoJS.lib.PasswordBasedCipher.encrypt(CryptoJS.algo.AES, message, 'password');\n\t * var ciphertextParams = CryptoJS.lib.PasswordBasedCipher.encrypt(CryptoJS.algo.AES, message, 'password', { format: CryptoJS.format.OpenSSL });\n\t */\n\t encrypt: function (cipher, message, password, cfg) {\n\t // Apply config defaults\n\t cfg = this.cfg.extend(cfg);\n\n\t // Derive key and other params\n\t var derivedParams = cfg.kdf.execute(password, cipher.keySize, cipher.ivSize, cfg.salt, cfg.hasher);\n\n\t // Add IV to config\n\t cfg.iv = derivedParams.iv;\n\n\t // Encrypt\n\t var ciphertext = SerializableCipher.encrypt.call(this, cipher, message, derivedParams.key, cfg);\n\n\t // Mix in derived params\n\t ciphertext.mixIn(derivedParams);\n\n\t return ciphertext;\n\t },\n\n\t /**\n\t * Decrypts serialized ciphertext using a password.\n\t *\n\t * @param {Cipher} cipher The cipher algorithm to use.\n\t * @param {CipherParams|string} ciphertext The ciphertext to decrypt.\n\t * @param {string} password The password.\n\t * @param {Object} cfg (Optional) The configuration options to use for this operation.\n\t *\n\t * @return {WordArray} The plaintext.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var plaintext = CryptoJS.lib.PasswordBasedCipher.decrypt(CryptoJS.algo.AES, formattedCiphertext, 'password', { format: CryptoJS.format.OpenSSL });\n\t * var plaintext = CryptoJS.lib.PasswordBasedCipher.decrypt(CryptoJS.algo.AES, ciphertextParams, 'password', { format: CryptoJS.format.OpenSSL });\n\t */\n\t decrypt: function (cipher, ciphertext, password, cfg) {\n\t // Apply config defaults\n\t cfg = this.cfg.extend(cfg);\n\n\t // Convert string to CipherParams\n\t ciphertext = this._parse(ciphertext, cfg.format);\n\n\t // Derive key and other params\n\t var derivedParams = cfg.kdf.execute(password, cipher.keySize, cipher.ivSize, ciphertext.salt, cfg.hasher);\n\n\t // Add IV to config\n\t cfg.iv = derivedParams.iv;\n\n\t // Decrypt\n\t var plaintext = SerializableCipher.decrypt.call(this, cipher, ciphertext, derivedParams.key, cfg);\n\n\t return plaintext;\n\t }\n\t });\n\t}());\n\n\n}));//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNTcxNjUuanMiLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBUUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vaXRnLW5leHRnZW4tZnJvbnRlbmQvLi9ub2RlX21vZHVsZXMvY3J5cHRvLWpzL2NpcGhlci1jb3JlLmpzPzM4YmEiXSwic291cmNlc0NvbnRlbnQiOlsiOyhmdW5jdGlvbiAocm9vdCwgZmFjdG9yeSwgdW5kZWYpIHtcblx0aWYgKHR5cGVvZiBleHBvcnRzID09PSBcIm9iamVjdFwiKSB7XG5cdFx0Ly8gQ29tbW9uSlNcblx0XHRtb2R1bGUuZXhwb3J0cyA9IGV4cG9ydHMgPSBmYWN0b3J5KHJlcXVpcmUoXCIuL2NvcmVcIiksIHJlcXVpcmUoXCIuL2V2cGtkZlwiKSk7XG5cdH1cblx0ZWxzZSBpZiAodHlwZW9mIGRlZmluZSA9PT0gXCJmdW5jdGlvblwiICYmIGRlZmluZS5hbWQpIHtcblx0XHQvLyBBTURcblx0XHRkZWZpbmUoW1wiLi9jb3JlXCIsIFwiLi9ldnBrZGZcIl0sIGZhY3RvcnkpO1xuXHR9XG5cdGVsc2Uge1xuXHRcdC8vIEdsb2JhbCAoYnJvd3Nlcilcblx0XHRmYWN0b3J5KHJvb3QuQ3J5cHRvSlMpO1xuXHR9XG59KHRoaXMsIGZ1bmN0aW9uIChDcnlwdG9KUykge1xuXG5cdC8qKlxuXHQgKiBDaXBoZXIgY29yZSBjb21wb25lbnRzLlxuXHQgKi9cblx0Q3J5cHRvSlMubGliLkNpcGhlciB8fCAoZnVuY3Rpb24gKHVuZGVmaW5lZCkge1xuXHQgICAgLy8gU2hvcnRjdXRzXG5cdCAgICB2YXIgQyA9IENyeXB0b0pTO1xuXHQgICAgdmFyIENfbGliID0gQy5saWI7XG5cdCAgICB2YXIgQmFzZSA9IENfbGliLkJhc2U7XG5cdCAgICB2YXIgV29yZEFycmF5ID0gQ19saWIuV29yZEFycmF5O1xuXHQgICAgdmFyIEJ1ZmZlcmVkQmxvY2tBbGdvcml0aG0gPSBDX2xpYi5CdWZmZXJlZEJsb2NrQWxnb3JpdGhtO1xuXHQgICAgdmFyIENfZW5jID0gQy5lbmM7XG5cdCAgICB2YXIgVXRmOCA9IENfZW5jLlV0Zjg7XG5cdCAgICB2YXIgQmFzZTY0ID0gQ19lbmMuQmFzZTY0O1xuXHQgICAgdmFyIENfYWxnbyA9IEMuYWxnbztcblx0ICAgIHZhciBFdnBLREYgPSBDX2FsZ28uRXZwS0RGO1xuXG5cdCAgICAvKipcblx0ICAgICAqIEFic3RyYWN0IGJhc2UgY2lwaGVyIHRlbXBsYXRlLlxuXHQgICAgICpcblx0ICAgICAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBrZXlTaXplIFRoaXMgY2lwaGVyJ3Mga2V5IHNpemUuIERlZmF1bHQ6IDQgKDEyOCBiaXRzKVxuXHQgICAgICogQHByb3BlcnR5IHtudW1iZXJ9IGl2U2l6ZSBUaGlzIGNpcGhlcidzIElWIHNpemUuIERlZmF1bHQ6IDQgKDEyOCBiaXRzKVxuXHQgICAgICogQHByb3BlcnR5IHtudW1iZXJ9IF9FTkNfWEZPUk1fTU9ERSBBIGNvbnN0YW50IHJlcHJlc2VudGluZyBlbmNyeXB0aW9uIG1vZGUuXG5cdCAgICAgKiBAcHJvcGVydHkge251bWJlcn0gX0RFQ19YRk9STV9NT0RFIEEgY29uc3RhbnQgcmVwcmVzZW50aW5nIGRlY3J5cHRpb24gbW9kZS5cblx0ICAgICAqL1xuXHQgICAgdmFyIENpcGhlciA9IENfbGliLkNpcGhlciA9IEJ1ZmZlcmVkQmxvY2tBbGdvcml0aG0uZXh0ZW5kKHtcblx0ICAgICAgICAvKipcblx0ICAgICAgICAgKiBDb25maWd1cmF0aW9uIG9wdGlvbnMuXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAcHJvcGVydHkge1dvcmRBcnJheX0gaXYgVGhlIElWIHRvIHVzZSBmb3IgdGhpcyBvcGVyYXRpb24uXG5cdCAgICAgICAgICovXG5cdCAgICAgICAgY2ZnOiBCYXNlLmV4dGVuZCgpLFxuXG5cdCAgICAgICAgLyoqXG5cdCAgICAgICAgICogQ3JlYXRlcyB0aGlzIGNpcGhlciBpbiBlbmNyeXB0aW9uIG1vZGUuXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAcGFyYW0ge1dvcmRBcnJheX0ga2V5IFRoZSBrZXkuXG5cdCAgICAgICAgICogQHBhcmFtIHtPYmplY3R9IGNmZyAoT3B0aW9uYWwpIFRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgdG8gdXNlIGZvciB0aGlzIG9wZXJhdGlvbi5cblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqIEByZXR1cm4ge0NpcGhlcn0gQSBjaXBoZXIgaW5zdGFuY2UuXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAc3RhdGljXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAZXhhbXBsZVxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogICAgIHZhciBjaXBoZXIgPSBDcnlwdG9KUy5hbGdvLkFFUy5jcmVhdGVFbmNyeXB0b3Ioa2V5V29yZEFycmF5LCB7IGl2OiBpdldvcmRBcnJheSB9KTtcblx0ICAgICAgICAgKi9cblx0ICAgICAgICBjcmVhdGVFbmNyeXB0b3I6IGZ1bmN0aW9uIChrZXksIGNmZykge1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy5jcmVhdGUodGhpcy5fRU5DX1hGT1JNX01PREUsIGtleSwgY2ZnKTtcblx0ICAgICAgICB9LFxuXG5cdCAgICAgICAgLyoqXG5cdCAgICAgICAgICogQ3JlYXRlcyB0aGlzIGNpcGhlciBpbiBkZWNyeXB0aW9uIG1vZGUuXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAcGFyYW0ge1dvcmRBcnJheX0ga2V5IFRoZSBrZXkuXG5cdCAgICAgICAgICogQHBhcmFtIHtPYmplY3R9IGNmZyAoT3B0aW9uYWwpIFRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgdG8gdXNlIGZvciB0aGlzIG9wZXJhdGlvbi5cblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqIEByZXR1cm4ge0NpcGhlcn0gQSBjaXBoZXIgaW5zdGFuY2UuXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAc3RhdGljXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAZXhhbXBsZVxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogICAgIHZhciBjaXBoZXIgPSBDcnlwdG9KUy5hbGdvLkFFUy5jcmVhdGVEZWNyeXB0b3Ioa2V5V29yZEFycmF5LCB7IGl2OiBpdldvcmRBcnJheSB9KTtcblx0ICAgICAgICAgKi9cblx0ICAgICAgICBjcmVhdGVEZWNyeXB0b3I6IGZ1bmN0aW9uIChrZXksIGNmZykge1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy5jcmVhdGUodGhpcy5fREVDX1hGT1JNX01PREUsIGtleSwgY2ZnKTtcblx0ICAgICAgICB9LFxuXG5cdCAgICAgICAgLyoqXG5cdCAgICAgICAgICogSW5pdGlhbGl6ZXMgYSBuZXdseSBjcmVhdGVkIGNpcGhlci5cblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqIEBwYXJhbSB7bnVtYmVyfSB4Zm9ybU1vZGUgRWl0aGVyIHRoZSBlbmNyeXB0aW9uIG9yIGRlY3J5cHRpb24gdHJhbnNvcm1hdGlvbiBtb2RlIGNvbnN0YW50LlxuXHQgICAgICAgICAqIEBwYXJhbSB7V29yZEFycmF5fSBrZXkgVGhlIGtleS5cblx0ICAgICAgICAgKiBAcGFyYW0ge09iamVjdH0gY2ZnIChPcHRpb25hbCkgVGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyB0byB1c2UgZm9yIHRoaXMgb3BlcmF0aW9uLlxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogQGV4YW1wbGVcblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqICAgICB2YXIgY2lwaGVyID0gQ3J5cHRvSlMuYWxnby5BRVMuY3JlYXRlKENyeXB0b0pTLmFsZ28uQUVTLl9FTkNfWEZPUk1fTU9ERSwga2V5V29yZEFycmF5LCB7IGl2OiBpdldvcmRBcnJheSB9KTtcblx0ICAgICAgICAgKi9cblx0ICAgICAgICBpbml0OiBmdW5jdGlvbiAoeGZvcm1Nb2RlLCBrZXksIGNmZykge1xuXHQgICAgICAgICAgICAvLyBBcHBseSBjb25maWcgZGVmYXVsdHNcblx0ICAgICAgICAgICAgdGhpcy5jZmcgPSB0aGlzLmNmZy5leHRlbmQoY2ZnKTtcblxuXHQgICAgICAgICAgICAvLyBTdG9yZSB0cmFuc2Zvcm0gbW9kZSBhbmQga2V5XG5cdCAgICAgICAgICAgIHRoaXMuX3hmb3JtTW9kZSA9IHhmb3JtTW9kZTtcblx0ICAgICAgICAgICAgdGhpcy5fa2V5ID0ga2V5O1xuXG5cdCAgICAgICAgICAgIC8vIFNldCBpbml0aWFsIHZhbHVlc1xuXHQgICAgICAgICAgICB0aGlzLnJlc2V0KCk7XG5cdCAgICAgICAgfSxcblxuXHQgICAgICAgIC8qKlxuXHQgICAgICAgICAqIFJlc2V0cyB0aGlzIGNpcGhlciB0byBpdHMgaW5pdGlhbCBzdGF0ZS5cblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqIEBleGFtcGxlXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiAgICAgY2lwaGVyLnJlc2V0KCk7XG5cdCAgICAgICAgICovXG5cdCAgICAgICAgcmVzZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgLy8gUmVzZXQgZGF0YSBidWZmZXJcblx0ICAgICAgICAgICAgQnVmZmVyZWRCbG9ja0FsZ29yaXRobS5yZXNldC5jYWxsKHRoaXMpO1xuXG5cdCAgICAgICAgICAgIC8vIFBlcmZvcm0gY29uY3JldGUtY2lwaGVyIGxvZ2ljXG5cdCAgICAgICAgICAgIHRoaXMuX2RvUmVzZXQoKTtcblx0ICAgICAgICB9LFxuXG5cdCAgICAgICAgLyoqXG5cdCAgICAgICAgICogQWRkcyBkYXRhIHRvIGJlIGVuY3J5cHRlZCBvciBkZWNyeXB0ZWQuXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAcGFyYW0ge1dvcmRBcnJheXxzdHJpbmd9IGRhdGFVcGRhdGUgVGhlIGRhdGEgdG8gZW5jcnlwdCBvciBkZWNyeXB0LlxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogQHJldHVybiB7V29yZEFycmF5fSBUaGUgZGF0YSBhZnRlciBwcm9jZXNzaW5nLlxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogQGV4YW1wbGVcblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqICAgICB2YXIgZW5jcnlwdGVkID0gY2lwaGVyLnByb2Nlc3MoJ2RhdGEnKTtcblx0ICAgICAgICAgKiAgICAgdmFyIGVuY3J5cHRlZCA9IGNpcGhlci5wcm9jZXNzKHdvcmRBcnJheSk7XG5cdCAgICAgICAgICovXG5cdCAgICAgICAgcHJvY2VzczogZnVuY3Rpb24gKGRhdGFVcGRhdGUpIHtcblx0ICAgICAgICAgICAgLy8gQXBwZW5kXG5cdCAgICAgICAgICAgIHRoaXMuX2FwcGVuZChkYXRhVXBkYXRlKTtcblxuXHQgICAgICAgICAgICAvLyBQcm9jZXNzIGF2YWlsYWJsZSBibG9ja3Ncblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3Byb2Nlc3MoKTtcblx0ICAgICAgICB9LFxuXG5cdCAgICAgICAgLyoqXG5cdCAgICAgICAgICogRmluYWxpemVzIHRoZSBlbmNyeXB0aW9uIG9yIGRlY3J5cHRpb24gcHJvY2Vzcy5cblx0ICAgICAgICAgKiBOb3RlIHRoYXQgdGhlIGZpbmFsaXplIG9wZXJhdGlvbiBpcyBlZmZlY3RpdmVseSBhIGRlc3RydWN0aXZlLCByZWFkLW9uY2Ugb3BlcmF0aW9uLlxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogQHBhcmFtIHtXb3JkQXJyYXl8c3RyaW5nfSBkYXRhVXBkYXRlIFRoZSBmaW5hbCBkYXRhIHRvIGVuY3J5cHQgb3IgZGVjcnlwdC5cblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqIEByZXR1cm4ge1dvcmRBcnJheX0gVGhlIGRhdGEgYWZ0ZXIgZmluYWwgcHJvY2Vzc2luZy5cblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqIEBleGFtcGxlXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiAgICAgdmFyIGVuY3J5cHRlZCA9IGNpcGhlci5maW5hbGl6ZSgpO1xuXHQgICAgICAgICAqICAgICB2YXIgZW5jcnlwdGVkID0gY2lwaGVyLmZpbmFsaXplKCdkYXRhJyk7XG5cdCAgICAgICAgICogICAgIHZhciBlbmNyeXB0ZWQgPSBjaXBoZXIuZmluYWxpemUod29yZEFycmF5KTtcblx0ICAgICAgICAgKi9cblx0ICAgICAgICBmaW5hbGl6ZTogZnVuY3Rpb24gKGRhdGFVcGRhdGUpIHtcblx0ICAgICAgICAgICAgLy8gRmluYWwgZGF0YSB1cGRhdGVcblx0ICAgICAgICAgICAgaWYgKGRhdGFVcGRhdGUpIHtcblx0ICAgICAgICAgICAgICAgIHRoaXMuX2FwcGVuZChkYXRhVXBkYXRlKTtcblx0ICAgICAgICAgICAgfVxuXG5cdCAgICAgICAgICAgIC8vIFBlcmZvcm0gY29uY3JldGUtY2lwaGVyIGxvZ2ljXG5cdCAgICAgICAgICAgIHZhciBmaW5hbFByb2Nlc3NlZERhdGEgPSB0aGlzLl9kb0ZpbmFsaXplKCk7XG5cblx0ICAgICAgICAgICAgcmV0dXJuIGZpbmFsUHJvY2Vzc2VkRGF0YTtcblx0ICAgICAgICB9LFxuXG5cdCAgICAgICAga2V5U2l6ZTogMTI4LzMyLFxuXG5cdCAgICAgICAgaXZTaXplOiAxMjgvMzIsXG5cblx0ICAgICAgICBfRU5DX1hGT1JNX01PREU6IDEsXG5cblx0ICAgICAgICBfREVDX1hGT1JNX01PREU6IDIsXG5cblx0ICAgICAgICAvKipcblx0ICAgICAgICAgKiBDcmVhdGVzIHNob3J0Y3V0IGZ1bmN0aW9ucyB0byBhIGNpcGhlcidzIG9iamVjdCBpbnRlcmZhY2UuXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAcGFyYW0ge0NpcGhlcn0gY2lwaGVyIFRoZSBjaXBoZXIgdG8gY3JlYXRlIGEgaGVscGVyIGZvci5cblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqIEByZXR1cm4ge09iamVjdH0gQW4gb2JqZWN0IHdpdGggZW5jcnlwdCBhbmQgZGVjcnlwdCBzaG9ydGN1dCBmdW5jdGlvbnMuXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAc3RhdGljXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAZXhhbXBsZVxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogICAgIHZhciBBRVMgPSBDcnlwdG9KUy5saWIuQ2lwaGVyLl9jcmVhdGVIZWxwZXIoQ3J5cHRvSlMuYWxnby5BRVMpO1xuXHQgICAgICAgICAqL1xuXHQgICAgICAgIF9jcmVhdGVIZWxwZXI6IChmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIGZ1bmN0aW9uIHNlbGVjdENpcGhlclN0cmF0ZWd5KGtleSkge1xuXHQgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBrZXkgPT0gJ3N0cmluZycpIHtcblx0ICAgICAgICAgICAgICAgICAgICByZXR1cm4gUGFzc3dvcmRCYXNlZENpcGhlcjtcblx0ICAgICAgICAgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFNlcmlhbGl6YWJsZUNpcGhlcjtcblx0ICAgICAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgfVxuXG5cdCAgICAgICAgICAgIHJldHVybiBmdW5jdGlvbiAoY2lwaGVyKSB7XG5cdCAgICAgICAgICAgICAgICByZXR1cm4ge1xuXHQgICAgICAgICAgICAgICAgICAgIGVuY3J5cHQ6IGZ1bmN0aW9uIChtZXNzYWdlLCBrZXksIGNmZykge1xuXHQgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gc2VsZWN0Q2lwaGVyU3RyYXRlZ3koa2V5KS5lbmNyeXB0KGNpcGhlciwgbWVzc2FnZSwga2V5LCBjZmcpO1xuXHQgICAgICAgICAgICAgICAgICAgIH0sXG5cblx0ICAgICAgICAgICAgICAgICAgICBkZWNyeXB0OiBmdW5jdGlvbiAoY2lwaGVydGV4dCwga2V5LCBjZmcpIHtcblx0ICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHNlbGVjdENpcGhlclN0cmF0ZWd5KGtleSkuZGVjcnlwdChjaXBoZXIsIGNpcGhlcnRleHQsIGtleSwgY2ZnKTtcblx0ICAgICAgICAgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgICAgICB9O1xuXHQgICAgICAgICAgICB9O1xuXHQgICAgICAgIH0oKSlcblx0ICAgIH0pO1xuXG5cdCAgICAvKipcblx0ICAgICAqIEFic3RyYWN0IGJhc2Ugc3RyZWFtIGNpcGhlciB0ZW1wbGF0ZS5cblx0ICAgICAqXG5cdCAgICAgKiBAcHJvcGVydHkge251bWJlcn0gYmxvY2tTaXplIFRoZSBudW1iZXIgb2YgMzItYml0IHdvcmRzIHRoaXMgY2lwaGVyIG9wZXJhdGVzIG9uLiBEZWZhdWx0OiAxICgzMiBiaXRzKVxuXHQgICAgICovXG5cdCAgICB2YXIgU3RyZWFtQ2lwaGVyID0gQ19saWIuU3RyZWFtQ2lwaGVyID0gQ2lwaGVyLmV4dGVuZCh7XG5cdCAgICAgICAgX2RvRmluYWxpemU6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgLy8gUHJvY2VzcyBwYXJ0aWFsIGJsb2Nrc1xuXHQgICAgICAgICAgICB2YXIgZmluYWxQcm9jZXNzZWRCbG9ja3MgPSB0aGlzLl9wcm9jZXNzKCEhJ2ZsdXNoJyk7XG5cblx0ICAgICAgICAgICAgcmV0dXJuIGZpbmFsUHJvY2Vzc2VkQmxvY2tzO1xuXHQgICAgICAgIH0sXG5cblx0ICAgICAgICBibG9ja1NpemU6IDFcblx0ICAgIH0pO1xuXG5cdCAgICAvKipcblx0ICAgICAqIE1vZGUgbmFtZXNwYWNlLlxuXHQgICAgICovXG5cdCAgICB2YXIgQ19tb2RlID0gQy5tb2RlID0ge307XG5cblx0ICAgIC8qKlxuXHQgICAgICogQWJzdHJhY3QgYmFzZSBibG9jayBjaXBoZXIgbW9kZSB0ZW1wbGF0ZS5cblx0ICAgICAqL1xuXHQgICAgdmFyIEJsb2NrQ2lwaGVyTW9kZSA9IENfbGliLkJsb2NrQ2lwaGVyTW9kZSA9IEJhc2UuZXh0ZW5kKHtcblx0ICAgICAgICAvKipcblx0ICAgICAgICAgKiBDcmVhdGVzIHRoaXMgbW9kZSBmb3IgZW5jcnlwdGlvbi5cblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqIEBwYXJhbSB7Q2lwaGVyfSBjaXBoZXIgQSBibG9jayBjaXBoZXIgaW5zdGFuY2UuXG5cdCAgICAgICAgICogQHBhcmFtIHtBcnJheX0gaXYgVGhlIElWIHdvcmRzLlxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogQHN0YXRpY1xuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogQGV4YW1wbGVcblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqICAgICB2YXIgbW9kZSA9IENyeXB0b0pTLm1vZGUuQ0JDLmNyZWF0ZUVuY3J5cHRvcihjaXBoZXIsIGl2LndvcmRzKTtcblx0ICAgICAgICAgKi9cblx0ICAgICAgICBjcmVhdGVFbmNyeXB0b3I6IGZ1bmN0aW9uIChjaXBoZXIsIGl2KSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLkVuY3J5cHRvci5jcmVhdGUoY2lwaGVyLCBpdik7XG5cdCAgICAgICAgfSxcblxuXHQgICAgICAgIC8qKlxuXHQgICAgICAgICAqIENyZWF0ZXMgdGhpcyBtb2RlIGZvciBkZWNyeXB0aW9uLlxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogQHBhcmFtIHtDaXBoZXJ9IGNpcGhlciBBIGJsb2NrIGNpcGhlciBpbnN0YW5jZS5cblx0ICAgICAgICAgKiBAcGFyYW0ge0FycmF5fSBpdiBUaGUgSVYgd29yZHMuXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAc3RhdGljXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAZXhhbXBsZVxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogICAgIHZhciBtb2RlID0gQ3J5cHRvSlMubW9kZS5DQkMuY3JlYXRlRGVjcnlwdG9yKGNpcGhlciwgaXYud29yZHMpO1xuXHQgICAgICAgICAqL1xuXHQgICAgICAgIGNyZWF0ZURlY3J5cHRvcjogZnVuY3Rpb24gKGNpcGhlciwgaXYpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMuRGVjcnlwdG9yLmNyZWF0ZShjaXBoZXIsIGl2KTtcblx0ICAgICAgICB9LFxuXG5cdCAgICAgICAgLyoqXG5cdCAgICAgICAgICogSW5pdGlhbGl6ZXMgYSBuZXdseSBjcmVhdGVkIG1vZGUuXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAcGFyYW0ge0NpcGhlcn0gY2lwaGVyIEEgYmxvY2sgY2lwaGVyIGluc3RhbmNlLlxuXHQgICAgICAgICAqIEBwYXJhbSB7QXJyYXl9IGl2IFRoZSBJViB3b3Jkcy5cblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqIEBleGFtcGxlXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiAgICAgdmFyIG1vZGUgPSBDcnlwdG9KUy5tb2RlLkNCQy5FbmNyeXB0b3IuY3JlYXRlKGNpcGhlciwgaXYud29yZHMpO1xuXHQgICAgICAgICAqL1xuXHQgICAgICAgIGluaXQ6IGZ1bmN0aW9uIChjaXBoZXIsIGl2KSB7XG5cdCAgICAgICAgICAgIHRoaXMuX2NpcGhlciA9IGNpcGhlcjtcblx0ICAgICAgICAgICAgdGhpcy5faXYgPSBpdjtcblx0ICAgICAgICB9XG5cdCAgICB9KTtcblxuXHQgICAgLyoqXG5cdCAgICAgKiBDaXBoZXIgQmxvY2sgQ2hhaW5pbmcgbW9kZS5cblx0ICAgICAqL1xuXHQgICAgdmFyIENCQyA9IENfbW9kZS5DQkMgPSAoZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIC8qKlxuXHQgICAgICAgICAqIEFic3RyYWN0IGJhc2UgQ0JDIG1vZGUuXG5cdCAgICAgICAgICovXG5cdCAgICAgICAgdmFyIENCQyA9IEJsb2NrQ2lwaGVyTW9kZS5leHRlbmQoKTtcblxuXHQgICAgICAgIC8qKlxuXHQgICAgICAgICAqIENCQyBlbmNyeXB0b3IuXG5cdCAgICAgICAgICovXG5cdCAgICAgICAgQ0JDLkVuY3J5cHRvciA9IENCQy5leHRlbmQoe1xuXHQgICAgICAgICAgICAvKipcblx0ICAgICAgICAgICAgICogUHJvY2Vzc2VzIHRoZSBkYXRhIGJsb2NrIGF0IG9mZnNldC5cblx0ICAgICAgICAgICAgICpcblx0ICAgICAgICAgICAgICogQHBhcmFtIHtBcnJheX0gd29yZHMgVGhlIGRhdGEgd29yZHMgdG8gb3BlcmF0ZSBvbi5cblx0ICAgICAgICAgICAgICogQHBhcmFtIHtudW1iZXJ9IG9mZnNldCBUaGUgb2Zmc2V0IHdoZXJlIHRoZSBibG9jayBzdGFydHMuXG5cdCAgICAgICAgICAgICAqXG5cdCAgICAgICAgICAgICAqIEBleGFtcGxlXG5cdCAgICAgICAgICAgICAqXG5cdCAgICAgICAgICAgICAqICAgICBtb2RlLnByb2Nlc3NCbG9jayhkYXRhLndvcmRzLCBvZmZzZXQpO1xuXHQgICAgICAgICAgICAgKi9cblx0ICAgICAgICAgICAgcHJvY2Vzc0Jsb2NrOiBmdW5jdGlvbiAod29yZHMsIG9mZnNldCkge1xuXHQgICAgICAgICAgICAgICAgLy8gU2hvcnRjdXRzXG5cdCAgICAgICAgICAgICAgICB2YXIgY2lwaGVyID0gdGhpcy5fY2lwaGVyO1xuXHQgICAgICAgICAgICAgICAgdmFyIGJsb2NrU2l6ZSA9IGNpcGhlci5ibG9ja1NpemU7XG5cblx0ICAgICAgICAgICAgICAgIC8vIFhPUiBhbmQgZW5jcnlwdFxuXHQgICAgICAgICAgICAgICAgeG9yQmxvY2suY2FsbCh0aGlzLCB3b3Jkcywgb2Zmc2V0LCBibG9ja1NpemUpO1xuXHQgICAgICAgICAgICAgICAgY2lwaGVyLmVuY3J5cHRCbG9jayh3b3Jkcywgb2Zmc2V0KTtcblxuXHQgICAgICAgICAgICAgICAgLy8gUmVtZW1iZXIgdGhpcyBibG9jayB0byB1c2Ugd2l0aCBuZXh0IGJsb2NrXG5cdCAgICAgICAgICAgICAgICB0aGlzLl9wcmV2QmxvY2sgPSB3b3Jkcy5zbGljZShvZmZzZXQsIG9mZnNldCArIGJsb2NrU2l6ZSk7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICB9KTtcblxuXHQgICAgICAgIC8qKlxuXHQgICAgICAgICAqIENCQyBkZWNyeXB0b3IuXG5cdCAgICAgICAgICovXG5cdCAgICAgICAgQ0JDLkRlY3J5cHRvciA9IENCQy5leHRlbmQoe1xuXHQgICAgICAgICAgICAvKipcblx0ICAgICAgICAgICAgICogUHJvY2Vzc2VzIHRoZSBkYXRhIGJsb2NrIGF0IG9mZnNldC5cblx0ICAgICAgICAgICAgICpcblx0ICAgICAgICAgICAgICogQHBhcmFtIHtBcnJheX0gd29yZHMgVGhlIGRhdGEgd29yZHMgdG8gb3BlcmF0ZSBvbi5cblx0ICAgICAgICAgICAgICogQHBhcmFtIHtudW1iZXJ9IG9mZnNldCBUaGUgb2Zmc2V0IHdoZXJlIHRoZSBibG9jayBzdGFydHMuXG5cdCAgICAgICAgICAgICAqXG5cdCAgICAgICAgICAgICAqIEBleGFtcGxlXG5cdCAgICAgICAgICAgICAqXG5cdCAgICAgICAgICAgICAqICAgICBtb2RlLnByb2Nlc3NCbG9jayhkYXRhLndvcmRzLCBvZmZzZXQpO1xuXHQgICAgICAgICAgICAgKi9cblx0ICAgICAgICAgICAgcHJvY2Vzc0Jsb2NrOiBmdW5jdGlvbiAod29yZHMsIG9mZnNldCkge1xuXHQgICAgICAgICAgICAgICAgLy8gU2hvcnRjdXRzXG5cdCAgICAgICAgICAgICAgICB2YXIgY2lwaGVyID0gdGhpcy5fY2lwaGVyO1xuXHQgICAgICAgICAgICAgICAgdmFyIGJsb2NrU2l6ZSA9IGNpcGhlci5ibG9ja1NpemU7XG5cblx0ICAgICAgICAgICAgICAgIC8vIFJlbWVtYmVyIHRoaXMgYmxvY2sgdG8gdXNlIHdpdGggbmV4dCBibG9ja1xuXHQgICAgICAgICAgICAgICAgdmFyIHRoaXNCbG9jayA9IHdvcmRzLnNsaWNlKG9mZnNldCwgb2Zmc2V0ICsgYmxvY2tTaXplKTtcblxuXHQgICAgICAgICAgICAgICAgLy8gRGVjcnlwdCBhbmQgWE9SXG5cdCAgICAgICAgICAgICAgICBjaXBoZXIuZGVjcnlwdEJsb2NrKHdvcmRzLCBvZmZzZXQpO1xuXHQgICAgICAgICAgICAgICAgeG9yQmxvY2suY2FsbCh0aGlzLCB3b3Jkcywgb2Zmc2V0LCBibG9ja1NpemUpO1xuXG5cdCAgICAgICAgICAgICAgICAvLyBUaGlzIGJsb2NrIGJlY29tZXMgdGhlIHByZXZpb3VzIGJsb2NrXG5cdCAgICAgICAgICAgICAgICB0aGlzLl9wcmV2QmxvY2sgPSB0aGlzQmxvY2s7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICB9KTtcblxuXHQgICAgICAgIGZ1bmN0aW9uIHhvckJsb2NrKHdvcmRzLCBvZmZzZXQsIGJsb2NrU2l6ZSkge1xuXHQgICAgICAgICAgICB2YXIgYmxvY2s7XG5cblx0ICAgICAgICAgICAgLy8gU2hvcnRjdXRcblx0ICAgICAgICAgICAgdmFyIGl2ID0gdGhpcy5faXY7XG5cblx0ICAgICAgICAgICAgLy8gQ2hvb3NlIG1peGluZyBibG9ja1xuXHQgICAgICAgICAgICBpZiAoaXYpIHtcblx0ICAgICAgICAgICAgICAgIGJsb2NrID0gaXY7XG5cblx0ICAgICAgICAgICAgICAgIC8vIFJlbW92ZSBJViBmb3Igc3Vic2VxdWVudCBibG9ja3Ncblx0ICAgICAgICAgICAgICAgIHRoaXMuX2l2ID0gdW5kZWZpbmVkO1xuXHQgICAgICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICAgICAgYmxvY2sgPSB0aGlzLl9wcmV2QmxvY2s7XG5cdCAgICAgICAgICAgIH1cblxuXHQgICAgICAgICAgICAvLyBYT1IgYmxvY2tzXG5cdCAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYmxvY2tTaXplOyBpKyspIHtcblx0ICAgICAgICAgICAgICAgIHdvcmRzW29mZnNldCArIGldIF49IGJsb2NrW2ldO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgfVxuXG5cdCAgICAgICAgcmV0dXJuIENCQztcblx0ICAgIH0oKSk7XG5cblx0ICAgIC8qKlxuXHQgICAgICogUGFkZGluZyBuYW1lc3BhY2UuXG5cdCAgICAgKi9cblx0ICAgIHZhciBDX3BhZCA9IEMucGFkID0ge307XG5cblx0ICAgIC8qKlxuXHQgICAgICogUEtDUyAjNS83IHBhZGRpbmcgc3RyYXRlZ3kuXG5cdCAgICAgKi9cblx0ICAgIHZhciBQa2NzNyA9IENfcGFkLlBrY3M3ID0ge1xuXHQgICAgICAgIC8qKlxuXHQgICAgICAgICAqIFBhZHMgZGF0YSB1c2luZyB0aGUgYWxnb3JpdGhtIGRlZmluZWQgaW4gUEtDUyAjNS83LlxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogQHBhcmFtIHtXb3JkQXJyYXl9IGRhdGEgVGhlIGRhdGEgdG8gcGFkLlxuXHQgICAgICAgICAqIEBwYXJhbSB7bnVtYmVyfSBibG9ja1NpemUgVGhlIG11bHRpcGxlIHRoYXQgdGhlIGRhdGEgc2hvdWxkIGJlIHBhZGRlZCB0by5cblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqIEBzdGF0aWNcblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqIEBleGFtcGxlXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiAgICAgQ3J5cHRvSlMucGFkLlBrY3M3LnBhZCh3b3JkQXJyYXksIDQpO1xuXHQgICAgICAgICAqL1xuXHQgICAgICAgIHBhZDogZnVuY3Rpb24gKGRhdGEsIGJsb2NrU2l6ZSkge1xuXHQgICAgICAgICAgICAvLyBTaG9ydGN1dFxuXHQgICAgICAgICAgICB2YXIgYmxvY2tTaXplQnl0ZXMgPSBibG9ja1NpemUgKiA0O1xuXG5cdCAgICAgICAgICAgIC8vIENvdW50IHBhZGRpbmcgYnl0ZXNcblx0ICAgICAgICAgICAgdmFyIG5QYWRkaW5nQnl0ZXMgPSBibG9ja1NpemVCeXRlcyAtIGRhdGEuc2lnQnl0ZXMgJSBibG9ja1NpemVCeXRlcztcblxuXHQgICAgICAgICAgICAvLyBDcmVhdGUgcGFkZGluZyB3b3JkXG5cdCAgICAgICAgICAgIHZhciBwYWRkaW5nV29yZCA9IChuUGFkZGluZ0J5dGVzIDw8IDI0KSB8IChuUGFkZGluZ0J5dGVzIDw8IDE2KSB8IChuUGFkZGluZ0J5dGVzIDw8IDgpIHwgblBhZGRpbmdCeXRlcztcblxuXHQgICAgICAgICAgICAvLyBDcmVhdGUgcGFkZGluZ1xuXHQgICAgICAgICAgICB2YXIgcGFkZGluZ1dvcmRzID0gW107XG5cdCAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgblBhZGRpbmdCeXRlczsgaSArPSA0KSB7XG5cdCAgICAgICAgICAgICAgICBwYWRkaW5nV29yZHMucHVzaChwYWRkaW5nV29yZCk7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgdmFyIHBhZGRpbmcgPSBXb3JkQXJyYXkuY3JlYXRlKHBhZGRpbmdXb3JkcywgblBhZGRpbmdCeXRlcyk7XG5cblx0ICAgICAgICAgICAgLy8gQWRkIHBhZGRpbmdcblx0ICAgICAgICAgICAgZGF0YS5jb25jYXQocGFkZGluZyk7XG5cdCAgICAgICAgfSxcblxuXHQgICAgICAgIC8qKlxuXHQgICAgICAgICAqIFVucGFkcyBkYXRhIHRoYXQgaGFkIGJlZW4gcGFkZGVkIHVzaW5nIHRoZSBhbGdvcml0aG0gZGVmaW5lZCBpbiBQS0NTICM1LzcuXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAcGFyYW0ge1dvcmRBcnJheX0gZGF0YSBUaGUgZGF0YSB0byB1bnBhZC5cblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqIEBzdGF0aWNcblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqIEBleGFtcGxlXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiAgICAgQ3J5cHRvSlMucGFkLlBrY3M3LnVucGFkKHdvcmRBcnJheSk7XG5cdCAgICAgICAgICovXG5cdCAgICAgICAgdW5wYWQ6IGZ1bmN0aW9uIChkYXRhKSB7XG5cdCAgICAgICAgICAgIC8vIEdldCBudW1iZXIgb2YgcGFkZGluZyBieXRlcyBmcm9tIGxhc3QgYnl0ZVxuXHQgICAgICAgICAgICB2YXIgblBhZGRpbmdCeXRlcyA9IGRhdGEud29yZHNbKGRhdGEuc2lnQnl0ZXMgLSAxKSA+Pj4gMl0gJiAweGZmO1xuXG5cdCAgICAgICAgICAgIC8vIFJlbW92ZSBwYWRkaW5nXG5cdCAgICAgICAgICAgIGRhdGEuc2lnQnl0ZXMgLT0gblBhZGRpbmdCeXRlcztcblx0ICAgICAgICB9XG5cdCAgICB9O1xuXG5cdCAgICAvKipcblx0ICAgICAqIEFic3RyYWN0IGJhc2UgYmxvY2sgY2lwaGVyIHRlbXBsYXRlLlxuXHQgICAgICpcblx0ICAgICAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBibG9ja1NpemUgVGhlIG51bWJlciBvZiAzMi1iaXQgd29yZHMgdGhpcyBjaXBoZXIgb3BlcmF0ZXMgb24uIERlZmF1bHQ6IDQgKDEyOCBiaXRzKVxuXHQgICAgICovXG5cdCAgICB2YXIgQmxvY2tDaXBoZXIgPSBDX2xpYi5CbG9ja0NpcGhlciA9IENpcGhlci5leHRlbmQoe1xuXHQgICAgICAgIC8qKlxuXHQgICAgICAgICAqIENvbmZpZ3VyYXRpb24gb3B0aW9ucy5cblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqIEBwcm9wZXJ0eSB7TW9kZX0gbW9kZSBUaGUgYmxvY2sgbW9kZSB0byB1c2UuIERlZmF1bHQ6IENCQ1xuXHQgICAgICAgICAqIEBwcm9wZXJ0eSB7UGFkZGluZ30gcGFkZGluZyBUaGUgcGFkZGluZyBzdHJhdGVneSB0byB1c2UuIERlZmF1bHQ6IFBrY3M3XG5cdCAgICAgICAgICovXG5cdCAgICAgICAgY2ZnOiBDaXBoZXIuY2ZnLmV4dGVuZCh7XG5cdCAgICAgICAgICAgIG1vZGU6IENCQyxcblx0ICAgICAgICAgICAgcGFkZGluZzogUGtjczdcblx0ICAgICAgICB9KSxcblxuXHQgICAgICAgIHJlc2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHZhciBtb2RlQ3JlYXRvcjtcblxuXHQgICAgICAgICAgICAvLyBSZXNldCBjaXBoZXJcblx0ICAgICAgICAgICAgQ2lwaGVyLnJlc2V0LmNhbGwodGhpcyk7XG5cblx0ICAgICAgICAgICAgLy8gU2hvcnRjdXRzXG5cdCAgICAgICAgICAgIHZhciBjZmcgPSB0aGlzLmNmZztcblx0ICAgICAgICAgICAgdmFyIGl2ID0gY2ZnLml2O1xuXHQgICAgICAgICAgICB2YXIgbW9kZSA9IGNmZy5tb2RlO1xuXG5cdCAgICAgICAgICAgIC8vIFJlc2V0IGJsb2NrIG1vZGVcblx0ICAgICAgICAgICAgaWYgKHRoaXMuX3hmb3JtTW9kZSA9PSB0aGlzLl9FTkNfWEZPUk1fTU9ERSkge1xuXHQgICAgICAgICAgICAgICAgbW9kZUNyZWF0b3IgPSBtb2RlLmNyZWF0ZUVuY3J5cHRvcjtcblx0ICAgICAgICAgICAgfSBlbHNlIC8qIGlmICh0aGlzLl94Zm9ybU1vZGUgPT0gdGhpcy5fREVDX1hGT1JNX01PREUpICovIHtcblx0ICAgICAgICAgICAgICAgIG1vZGVDcmVhdG9yID0gbW9kZS5jcmVhdGVEZWNyeXB0b3I7XG5cdCAgICAgICAgICAgICAgICAvLyBLZWVwIGF0IGxlYXN0IG9uZSBibG9jayBpbiB0aGUgYnVmZmVyIGZvciB1bnBhZGRpbmdcblx0ICAgICAgICAgICAgICAgIHRoaXMuX21pbkJ1ZmZlclNpemUgPSAxO1xuXHQgICAgICAgICAgICB9XG5cblx0ICAgICAgICAgICAgaWYgKHRoaXMuX21vZGUgJiYgdGhpcy5fbW9kZS5fX2NyZWF0b3IgPT0gbW9kZUNyZWF0b3IpIHtcblx0ICAgICAgICAgICAgICAgIHRoaXMuX21vZGUuaW5pdCh0aGlzLCBpdiAmJiBpdi53b3Jkcyk7XG5cdCAgICAgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICAgICAgICB0aGlzLl9tb2RlID0gbW9kZUNyZWF0b3IuY2FsbChtb2RlLCB0aGlzLCBpdiAmJiBpdi53b3Jkcyk7XG5cdCAgICAgICAgICAgICAgICB0aGlzLl9tb2RlLl9fY3JlYXRvciA9IG1vZGVDcmVhdG9yO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgfSxcblxuXHQgICAgICAgIF9kb1Byb2Nlc3NCbG9jazogZnVuY3Rpb24gKHdvcmRzLCBvZmZzZXQpIHtcblx0ICAgICAgICAgICAgdGhpcy5fbW9kZS5wcm9jZXNzQmxvY2sod29yZHMsIG9mZnNldCk7XG5cdCAgICAgICAgfSxcblxuXHQgICAgICAgIF9kb0ZpbmFsaXplOiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHZhciBmaW5hbFByb2Nlc3NlZEJsb2NrcztcblxuXHQgICAgICAgICAgICAvLyBTaG9ydGN1dFxuXHQgICAgICAgICAgICB2YXIgcGFkZGluZyA9IHRoaXMuY2ZnLnBhZGRpbmc7XG5cblx0ICAgICAgICAgICAgLy8gRmluYWxpemVcblx0ICAgICAgICAgICAgaWYgKHRoaXMuX3hmb3JtTW9kZSA9PSB0aGlzLl9FTkNfWEZPUk1fTU9ERSkge1xuXHQgICAgICAgICAgICAgICAgLy8gUGFkIGRhdGFcblx0ICAgICAgICAgICAgICAgIHBhZGRpbmcucGFkKHRoaXMuX2RhdGEsIHRoaXMuYmxvY2tTaXplKTtcblxuXHQgICAgICAgICAgICAgICAgLy8gUHJvY2VzcyBmaW5hbCBibG9ja3Ncblx0ICAgICAgICAgICAgICAgIGZpbmFsUHJvY2Vzc2VkQmxvY2tzID0gdGhpcy5fcHJvY2VzcyghISdmbHVzaCcpO1xuXHQgICAgICAgICAgICB9IGVsc2UgLyogaWYgKHRoaXMuX3hmb3JtTW9kZSA9PSB0aGlzLl9ERUNfWEZPUk1fTU9ERSkgKi8ge1xuXHQgICAgICAgICAgICAgICAgLy8gUHJvY2VzcyBmaW5hbCBibG9ja3Ncblx0ICAgICAgICAgICAgICAgIGZpbmFsUHJvY2Vzc2VkQmxvY2tzID0gdGhpcy5fcHJvY2VzcyghISdmbHVzaCcpO1xuXG5cdCAgICAgICAgICAgICAgICAvLyBVbnBhZCBkYXRhXG5cdCAgICAgICAgICAgICAgICBwYWRkaW5nLnVucGFkKGZpbmFsUHJvY2Vzc2VkQmxvY2tzKTtcblx0ICAgICAgICAgICAgfVxuXG5cdCAgICAgICAgICAgIHJldHVybiBmaW5hbFByb2Nlc3NlZEJsb2Nrcztcblx0ICAgICAgICB9LFxuXG5cdCAgICAgICAgYmxvY2tTaXplOiAxMjgvMzJcblx0ICAgIH0pO1xuXG5cdCAgICAvKipcblx0ICAgICAqIEEgY29sbGVjdGlvbiBvZiBjaXBoZXIgcGFyYW1ldGVycy5cblx0ICAgICAqXG5cdCAgICAgKiBAcHJvcGVydHkge1dvcmRBcnJheX0gY2lwaGVydGV4dCBUaGUgcmF3IGNpcGhlcnRleHQuXG5cdCAgICAgKiBAcHJvcGVydHkge1dvcmRBcnJheX0ga2V5IFRoZSBrZXkgdG8gdGhpcyBjaXBoZXJ0ZXh0LlxuXHQgICAgICogQHByb3BlcnR5IHtXb3JkQXJyYXl9IGl2IFRoZSBJViB1c2VkIGluIHRoZSBjaXBoZXJpbmcgb3BlcmF0aW9uLlxuXHQgICAgICogQHByb3BlcnR5IHtXb3JkQXJyYXl9IHNhbHQgVGhlIHNhbHQgdXNlZCB3aXRoIGEga2V5IGRlcml2YXRpb24gZnVuY3Rpb24uXG5cdCAgICAgKiBAcHJvcGVydHkge0NpcGhlcn0gYWxnb3JpdGhtIFRoZSBjaXBoZXIgYWxnb3JpdGhtLlxuXHQgICAgICogQHByb3BlcnR5IHtNb2RlfSBtb2RlIFRoZSBibG9jayBtb2RlIHVzZWQgaW4gdGhlIGNpcGhlcmluZyBvcGVyYXRpb24uXG5cdCAgICAgKiBAcHJvcGVydHkge1BhZGRpbmd9IHBhZGRpbmcgVGhlIHBhZGRpbmcgc2NoZW1lIHVzZWQgaW4gdGhlIGNpcGhlcmluZyBvcGVyYXRpb24uXG5cdCAgICAgKiBAcHJvcGVydHkge251bWJlcn0gYmxvY2tTaXplIFRoZSBibG9jayBzaXplIG9mIHRoZSBjaXBoZXIuXG5cdCAgICAgKiBAcHJvcGVydHkge0Zvcm1hdH0gZm9ybWF0dGVyIFRoZSBkZWZhdWx0IGZvcm1hdHRpbmcgc3RyYXRlZ3kgdG8gY29udmVydCB0aGlzIGNpcGhlciBwYXJhbXMgb2JqZWN0IHRvIGEgc3RyaW5nLlxuXHQgICAgICovXG5cdCAgICB2YXIgQ2lwaGVyUGFyYW1zID0gQ19saWIuQ2lwaGVyUGFyYW1zID0gQmFzZS5leHRlbmQoe1xuXHQgICAgICAgIC8qKlxuXHQgICAgICAgICAqIEluaXRpYWxpemVzIGEgbmV3bHkgY3JlYXRlZCBjaXBoZXIgcGFyYW1zIG9iamVjdC5cblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqIEBwYXJhbSB7T2JqZWN0fSBjaXBoZXJQYXJhbXMgQW4gb2JqZWN0IHdpdGggYW55IG9mIHRoZSBwb3NzaWJsZSBjaXBoZXIgcGFyYW1ldGVycy5cblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqIEBleGFtcGxlXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiAgICAgdmFyIGNpcGhlclBhcmFtcyA9IENyeXB0b0pTLmxpYi5DaXBoZXJQYXJhbXMuY3JlYXRlKHtcblx0ICAgICAgICAgKiAgICAgICAgIGNpcGhlcnRleHQ6IGNpcGhlcnRleHRXb3JkQXJyYXksXG5cdCAgICAgICAgICogICAgICAgICBrZXk6IGtleVdvcmRBcnJheSxcblx0ICAgICAgICAgKiAgICAgICAgIGl2OiBpdldvcmRBcnJheSxcblx0ICAgICAgICAgKiAgICAgICAgIHNhbHQ6IHNhbHRXb3JkQXJyYXksXG5cdCAgICAgICAgICogICAgICAgICBhbGdvcml0aG06IENyeXB0b0pTLmFsZ28uQUVTLFxuXHQgICAgICAgICAqICAgICAgICAgbW9kZTogQ3J5cHRvSlMubW9kZS5DQkMsXG5cdCAgICAgICAgICogICAgICAgICBwYWRkaW5nOiBDcnlwdG9KUy5wYWQuUEtDUzcsXG5cdCAgICAgICAgICogICAgICAgICBibG9ja1NpemU6IDQsXG5cdCAgICAgICAgICogICAgICAgICBmb3JtYXR0ZXI6IENyeXB0b0pTLmZvcm1hdC5PcGVuU1NMXG5cdCAgICAgICAgICogICAgIH0pO1xuXHQgICAgICAgICAqL1xuXHQgICAgICAgIGluaXQ6IGZ1bmN0aW9uIChjaXBoZXJQYXJhbXMpIHtcblx0ICAgICAgICAgICAgdGhpcy5taXhJbihjaXBoZXJQYXJhbXMpO1xuXHQgICAgICAgIH0sXG5cblx0ICAgICAgICAvKipcblx0ICAgICAgICAgKiBDb252ZXJ0cyB0aGlzIGNpcGhlciBwYXJhbXMgb2JqZWN0IHRvIGEgc3RyaW5nLlxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogQHBhcmFtIHtGb3JtYXR9IGZvcm1hdHRlciAoT3B0aW9uYWwpIFRoZSBmb3JtYXR0aW5nIHN0cmF0ZWd5IHRvIHVzZS5cblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqIEByZXR1cm4ge3N0cmluZ30gVGhlIHN0cmluZ2lmaWVkIGNpcGhlciBwYXJhbXMuXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAdGhyb3dzIEVycm9yIElmIG5laXRoZXIgdGhlIGZvcm1hdHRlciBub3IgdGhlIGRlZmF1bHQgZm9ybWF0dGVyIGlzIHNldC5cblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqIEBleGFtcGxlXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiAgICAgdmFyIHN0cmluZyA9IGNpcGhlclBhcmFtcyArICcnO1xuXHQgICAgICAgICAqICAgICB2YXIgc3RyaW5nID0gY2lwaGVyUGFyYW1zLnRvU3RyaW5nKCk7XG5cdCAgICAgICAgICogICAgIHZhciBzdHJpbmcgPSBjaXBoZXJQYXJhbXMudG9TdHJpbmcoQ3J5cHRvSlMuZm9ybWF0Lk9wZW5TU0wpO1xuXHQgICAgICAgICAqL1xuXHQgICAgICAgIHRvU3RyaW5nOiBmdW5jdGlvbiAoZm9ybWF0dGVyKSB7XG5cdCAgICAgICAgICAgIHJldHVybiAoZm9ybWF0dGVyIHx8IHRoaXMuZm9ybWF0dGVyKS5zdHJpbmdpZnkodGhpcyk7XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cblx0ICAgIC8qKlxuXHQgICAgICogRm9ybWF0IG5hbWVzcGFjZS5cblx0ICAgICAqL1xuXHQgICAgdmFyIENfZm9ybWF0ID0gQy5mb3JtYXQgPSB7fTtcblxuXHQgICAgLyoqXG5cdCAgICAgKiBPcGVuU1NMIGZvcm1hdHRpbmcgc3RyYXRlZ3kuXG5cdCAgICAgKi9cblx0ICAgIHZhciBPcGVuU1NMRm9ybWF0dGVyID0gQ19mb3JtYXQuT3BlblNTTCA9IHtcblx0ICAgICAgICAvKipcblx0ICAgICAgICAgKiBDb252ZXJ0cyBhIGNpcGhlciBwYXJhbXMgb2JqZWN0IHRvIGFuIE9wZW5TU0wtY29tcGF0aWJsZSBzdHJpbmcuXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAcGFyYW0ge0NpcGhlclBhcmFtc30gY2lwaGVyUGFyYW1zIFRoZSBjaXBoZXIgcGFyYW1zIG9iamVjdC5cblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqIEByZXR1cm4ge3N0cmluZ30gVGhlIE9wZW5TU0wtY29tcGF0aWJsZSBzdHJpbmcuXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAc3RhdGljXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAZXhhbXBsZVxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogICAgIHZhciBvcGVuU1NMU3RyaW5nID0gQ3J5cHRvSlMuZm9ybWF0Lk9wZW5TU0wuc3RyaW5naWZ5KGNpcGhlclBhcmFtcyk7XG5cdCAgICAgICAgICovXG5cdCAgICAgICAgc3RyaW5naWZ5OiBmdW5jdGlvbiAoY2lwaGVyUGFyYW1zKSB7XG5cdCAgICAgICAgICAgIHZhciB3b3JkQXJyYXk7XG5cblx0ICAgICAgICAgICAgLy8gU2hvcnRjdXRzXG5cdCAgICAgICAgICAgIHZhciBjaXBoZXJ0ZXh0ID0gY2lwaGVyUGFyYW1zLmNpcGhlcnRleHQ7XG5cdCAgICAgICAgICAgIHZhciBzYWx0ID0gY2lwaGVyUGFyYW1zLnNhbHQ7XG5cblx0ICAgICAgICAgICAgLy8gRm9ybWF0XG5cdCAgICAgICAgICAgIGlmIChzYWx0KSB7XG5cdCAgICAgICAgICAgICAgICB3b3JkQXJyYXkgPSBXb3JkQXJyYXkuY3JlYXRlKFsweDUzNjE2Yzc0LCAweDY1NjQ1ZjVmXSkuY29uY2F0KHNhbHQpLmNvbmNhdChjaXBoZXJ0ZXh0KTtcblx0ICAgICAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgICAgICAgIHdvcmRBcnJheSA9IGNpcGhlcnRleHQ7XG5cdCAgICAgICAgICAgIH1cblxuXHQgICAgICAgICAgICByZXR1cm4gd29yZEFycmF5LnRvU3RyaW5nKEJhc2U2NCk7XG5cdCAgICAgICAgfSxcblxuXHQgICAgICAgIC8qKlxuXHQgICAgICAgICAqIENvbnZlcnRzIGFuIE9wZW5TU0wtY29tcGF0aWJsZSBzdHJpbmcgdG8gYSBjaXBoZXIgcGFyYW1zIG9iamVjdC5cblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqIEBwYXJhbSB7c3RyaW5nfSBvcGVuU1NMU3RyIFRoZSBPcGVuU1NMLWNvbXBhdGlibGUgc3RyaW5nLlxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogQHJldHVybiB7Q2lwaGVyUGFyYW1zfSBUaGUgY2lwaGVyIHBhcmFtcyBvYmplY3QuXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAc3RhdGljXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAZXhhbXBsZVxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogICAgIHZhciBjaXBoZXJQYXJhbXMgPSBDcnlwdG9KUy5mb3JtYXQuT3BlblNTTC5wYXJzZShvcGVuU1NMU3RyaW5nKTtcblx0ICAgICAgICAgKi9cblx0ICAgICAgICBwYXJzZTogZnVuY3Rpb24gKG9wZW5TU0xTdHIpIHtcblx0ICAgICAgICAgICAgdmFyIHNhbHQ7XG5cblx0ICAgICAgICAgICAgLy8gUGFyc2UgYmFzZTY0XG5cdCAgICAgICAgICAgIHZhciBjaXBoZXJ0ZXh0ID0gQmFzZTY0LnBhcnNlKG9wZW5TU0xTdHIpO1xuXG5cdCAgICAgICAgICAgIC8vIFNob3J0Y3V0XG5cdCAgICAgICAgICAgIHZhciBjaXBoZXJ0ZXh0V29yZHMgPSBjaXBoZXJ0ZXh0LndvcmRzO1xuXG5cdCAgICAgICAgICAgIC8vIFRlc3QgZm9yIHNhbHRcblx0ICAgICAgICAgICAgaWYgKGNpcGhlcnRleHRXb3Jkc1swXSA9PSAweDUzNjE2Yzc0ICYmIGNpcGhlcnRleHRXb3Jkc1sxXSA9PSAweDY1NjQ1ZjVmKSB7XG5cdCAgICAgICAgICAgICAgICAvLyBFeHRyYWN0IHNhbHRcblx0ICAgICAgICAgICAgICAgIHNhbHQgPSBXb3JkQXJyYXkuY3JlYXRlKGNpcGhlcnRleHRXb3Jkcy5zbGljZSgyLCA0KSk7XG5cblx0ICAgICAgICAgICAgICAgIC8vIFJlbW92ZSBzYWx0IGZyb20gY2lwaGVydGV4dFxuXHQgICAgICAgICAgICAgICAgY2lwaGVydGV4dFdvcmRzLnNwbGljZSgwLCA0KTtcblx0ICAgICAgICAgICAgICAgIGNpcGhlcnRleHQuc2lnQnl0ZXMgLT0gMTY7XG5cdCAgICAgICAgICAgIH1cblxuXHQgICAgICAgICAgICByZXR1cm4gQ2lwaGVyUGFyYW1zLmNyZWF0ZSh7IGNpcGhlcnRleHQ6IGNpcGhlcnRleHQsIHNhbHQ6IHNhbHQgfSk7XG5cdCAgICAgICAgfVxuXHQgICAgfTtcblxuXHQgICAgLyoqXG5cdCAgICAgKiBBIGNpcGhlciB3cmFwcGVyIHRoYXQgcmV0dXJucyBjaXBoZXJ0ZXh0IGFzIGEgc2VyaWFsaXphYmxlIGNpcGhlciBwYXJhbXMgb2JqZWN0LlxuXHQgICAgICovXG5cdCAgICB2YXIgU2VyaWFsaXphYmxlQ2lwaGVyID0gQ19saWIuU2VyaWFsaXphYmxlQ2lwaGVyID0gQmFzZS5leHRlbmQoe1xuXHQgICAgICAgIC8qKlxuXHQgICAgICAgICAqIENvbmZpZ3VyYXRpb24gb3B0aW9ucy5cblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqIEBwcm9wZXJ0eSB7Rm9ybWF0dGVyfSBmb3JtYXQgVGhlIGZvcm1hdHRpbmcgc3RyYXRlZ3kgdG8gY29udmVydCBjaXBoZXIgcGFyYW0gb2JqZWN0cyB0byBhbmQgZnJvbSBhIHN0cmluZy4gRGVmYXVsdDogT3BlblNTTFxuXHQgICAgICAgICAqL1xuXHQgICAgICAgIGNmZzogQmFzZS5leHRlbmQoe1xuXHQgICAgICAgICAgICBmb3JtYXQ6IE9wZW5TU0xGb3JtYXR0ZXJcblx0ICAgICAgICB9KSxcblxuXHQgICAgICAgIC8qKlxuXHQgICAgICAgICAqIEVuY3J5cHRzIGEgbWVzc2FnZS5cblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqIEBwYXJhbSB7Q2lwaGVyfSBjaXBoZXIgVGhlIGNpcGhlciBhbGdvcml0aG0gdG8gdXNlLlxuXHQgICAgICAgICAqIEBwYXJhbSB7V29yZEFycmF5fHN0cmluZ30gbWVzc2FnZSBUaGUgbWVzc2FnZSB0byBlbmNyeXB0LlxuXHQgICAgICAgICAqIEBwYXJhbSB7V29yZEFycmF5fSBrZXkgVGhlIGtleS5cblx0ICAgICAgICAgKiBAcGFyYW0ge09iamVjdH0gY2ZnIChPcHRpb25hbCkgVGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyB0byB1c2UgZm9yIHRoaXMgb3BlcmF0aW9uLlxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogQHJldHVybiB7Q2lwaGVyUGFyYW1zfSBBIGNpcGhlciBwYXJhbXMgb2JqZWN0LlxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogQHN0YXRpY1xuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogQGV4YW1wbGVcblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqICAgICB2YXIgY2lwaGVydGV4dFBhcmFtcyA9IENyeXB0b0pTLmxpYi5TZXJpYWxpemFibGVDaXBoZXIuZW5jcnlwdChDcnlwdG9KUy5hbGdvLkFFUywgbWVzc2FnZSwga2V5KTtcblx0ICAgICAgICAgKiAgICAgdmFyIGNpcGhlcnRleHRQYXJhbXMgPSBDcnlwdG9KUy5saWIuU2VyaWFsaXphYmxlQ2lwaGVyLmVuY3J5cHQoQ3J5cHRvSlMuYWxnby5BRVMsIG1lc3NhZ2UsIGtleSwgeyBpdjogaXYgfSk7XG5cdCAgICAgICAgICogICAgIHZhciBjaXBoZXJ0ZXh0UGFyYW1zID0gQ3J5cHRvSlMubGliLlNlcmlhbGl6YWJsZUNpcGhlci5lbmNyeXB0KENyeXB0b0pTLmFsZ28uQUVTLCBtZXNzYWdlLCBrZXksIHsgaXY6IGl2LCBmb3JtYXQ6IENyeXB0b0pTLmZvcm1hdC5PcGVuU1NMIH0pO1xuXHQgICAgICAgICAqL1xuXHQgICAgICAgIGVuY3J5cHQ6IGZ1bmN0aW9uIChjaXBoZXIsIG1lc3NhZ2UsIGtleSwgY2ZnKSB7XG5cdCAgICAgICAgICAgIC8vIEFwcGx5IGNvbmZpZyBkZWZhdWx0c1xuXHQgICAgICAgICAgICBjZmcgPSB0aGlzLmNmZy5leHRlbmQoY2ZnKTtcblxuXHQgICAgICAgICAgICAvLyBFbmNyeXB0XG5cdCAgICAgICAgICAgIHZhciBlbmNyeXB0b3IgPSBjaXBoZXIuY3JlYXRlRW5jcnlwdG9yKGtleSwgY2ZnKTtcblx0ICAgICAgICAgICAgdmFyIGNpcGhlcnRleHQgPSBlbmNyeXB0b3IuZmluYWxpemUobWVzc2FnZSk7XG5cblx0ICAgICAgICAgICAgLy8gU2hvcnRjdXRcblx0ICAgICAgICAgICAgdmFyIGNpcGhlckNmZyA9IGVuY3J5cHRvci5jZmc7XG5cblx0ICAgICAgICAgICAgLy8gQ3JlYXRlIGFuZCByZXR1cm4gc2VyaWFsaXphYmxlIGNpcGhlciBwYXJhbXNcblx0ICAgICAgICAgICAgcmV0dXJuIENpcGhlclBhcmFtcy5jcmVhdGUoe1xuXHQgICAgICAgICAgICAgICAgY2lwaGVydGV4dDogY2lwaGVydGV4dCxcblx0ICAgICAgICAgICAgICAgIGtleToga2V5LFxuXHQgICAgICAgICAgICAgICAgaXY6IGNpcGhlckNmZy5pdixcblx0ICAgICAgICAgICAgICAgIGFsZ29yaXRobTogY2lwaGVyLFxuXHQgICAgICAgICAgICAgICAgbW9kZTogY2lwaGVyQ2ZnLm1vZGUsXG5cdCAgICAgICAgICAgICAgICBwYWRkaW5nOiBjaXBoZXJDZmcucGFkZGluZyxcblx0ICAgICAgICAgICAgICAgIGJsb2NrU2l6ZTogY2lwaGVyLmJsb2NrU2l6ZSxcblx0ICAgICAgICAgICAgICAgIGZvcm1hdHRlcjogY2ZnLmZvcm1hdFxuXHQgICAgICAgICAgICB9KTtcblx0ICAgICAgICB9LFxuXG5cdCAgICAgICAgLyoqXG5cdCAgICAgICAgICogRGVjcnlwdHMgc2VyaWFsaXplZCBjaXBoZXJ0ZXh0LlxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogQHBhcmFtIHtDaXBoZXJ9IGNpcGhlciBUaGUgY2lwaGVyIGFsZ29yaXRobSB0byB1c2UuXG5cdCAgICAgICAgICogQHBhcmFtIHtDaXBoZXJQYXJhbXN8c3RyaW5nfSBjaXBoZXJ0ZXh0IFRoZSBjaXBoZXJ0ZXh0IHRvIGRlY3J5cHQuXG5cdCAgICAgICAgICogQHBhcmFtIHtXb3JkQXJyYXl9IGtleSBUaGUga2V5LlxuXHQgICAgICAgICAqIEBwYXJhbSB7T2JqZWN0fSBjZmcgKE9wdGlvbmFsKSBUaGUgY29uZmlndXJhdGlvbiBvcHRpb25zIHRvIHVzZSBmb3IgdGhpcyBvcGVyYXRpb24uXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAcmV0dXJuIHtXb3JkQXJyYXl9IFRoZSBwbGFpbnRleHQuXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAc3RhdGljXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAZXhhbXBsZVxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogICAgIHZhciBwbGFpbnRleHQgPSBDcnlwdG9KUy5saWIuU2VyaWFsaXphYmxlQ2lwaGVyLmRlY3J5cHQoQ3J5cHRvSlMuYWxnby5BRVMsIGZvcm1hdHRlZENpcGhlcnRleHQsIGtleSwgeyBpdjogaXYsIGZvcm1hdDogQ3J5cHRvSlMuZm9ybWF0Lk9wZW5TU0wgfSk7XG5cdCAgICAgICAgICogICAgIHZhciBwbGFpbnRleHQgPSBDcnlwdG9KUy5saWIuU2VyaWFsaXphYmxlQ2lwaGVyLmRlY3J5cHQoQ3J5cHRvSlMuYWxnby5BRVMsIGNpcGhlcnRleHRQYXJhbXMsIGtleSwgeyBpdjogaXYsIGZvcm1hdDogQ3J5cHRvSlMuZm9ybWF0Lk9wZW5TU0wgfSk7XG5cdCAgICAgICAgICovXG5cdCAgICAgICAgZGVjcnlwdDogZnVuY3Rpb24gKGNpcGhlciwgY2lwaGVydGV4dCwga2V5LCBjZmcpIHtcblx0ICAgICAgICAgICAgLy8gQXBwbHkgY29uZmlnIGRlZmF1bHRzXG5cdCAgICAgICAgICAgIGNmZyA9IHRoaXMuY2ZnLmV4dGVuZChjZmcpO1xuXG5cdCAgICAgICAgICAgIC8vIENvbnZlcnQgc3RyaW5nIHRvIENpcGhlclBhcmFtc1xuXHQgICAgICAgICAgICBjaXBoZXJ0ZXh0ID0gdGhpcy5fcGFyc2UoY2lwaGVydGV4dCwgY2ZnLmZvcm1hdCk7XG5cblx0ICAgICAgICAgICAgLy8gRGVjcnlwdFxuXHQgICAgICAgICAgICB2YXIgcGxhaW50ZXh0ID0gY2lwaGVyLmNyZWF0ZURlY3J5cHRvcihrZXksIGNmZykuZmluYWxpemUoY2lwaGVydGV4dC5jaXBoZXJ0ZXh0KTtcblxuXHQgICAgICAgICAgICByZXR1cm4gcGxhaW50ZXh0O1xuXHQgICAgICAgIH0sXG5cblx0ICAgICAgICAvKipcblx0ICAgICAgICAgKiBDb252ZXJ0cyBzZXJpYWxpemVkIGNpcGhlcnRleHQgdG8gQ2lwaGVyUGFyYW1zLFxuXHQgICAgICAgICAqIGVsc2UgYXNzdW1lZCBDaXBoZXJQYXJhbXMgYWxyZWFkeSBhbmQgcmV0dXJucyBjaXBoZXJ0ZXh0IHVuY2hhbmdlZC5cblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqIEBwYXJhbSB7Q2lwaGVyUGFyYW1zfHN0cmluZ30gY2lwaGVydGV4dCBUaGUgY2lwaGVydGV4dC5cblx0ICAgICAgICAgKiBAcGFyYW0ge0Zvcm1hdHRlcn0gZm9ybWF0IFRoZSBmb3JtYXR0aW5nIHN0cmF0ZWd5IHRvIHVzZSB0byBwYXJzZSBzZXJpYWxpemVkIGNpcGhlcnRleHQuXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAcmV0dXJuIHtDaXBoZXJQYXJhbXN9IFRoZSB1bnNlcmlhbGl6ZWQgY2lwaGVydGV4dC5cblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqIEBzdGF0aWNcblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqIEBleGFtcGxlXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiAgICAgdmFyIGNpcGhlcnRleHRQYXJhbXMgPSBDcnlwdG9KUy5saWIuU2VyaWFsaXphYmxlQ2lwaGVyLl9wYXJzZShjaXBoZXJ0ZXh0U3RyaW5nT3JQYXJhbXMsIGZvcm1hdCk7XG5cdCAgICAgICAgICovXG5cdCAgICAgICAgX3BhcnNlOiBmdW5jdGlvbiAoY2lwaGVydGV4dCwgZm9ybWF0KSB7XG5cdCAgICAgICAgICAgIGlmICh0eXBlb2YgY2lwaGVydGV4dCA9PSAnc3RyaW5nJykge1xuXHQgICAgICAgICAgICAgICAgcmV0dXJuIGZvcm1hdC5wYXJzZShjaXBoZXJ0ZXh0LCB0aGlzKTtcblx0ICAgICAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgICAgICAgIHJldHVybiBjaXBoZXJ0ZXh0O1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cblx0ICAgIC8qKlxuXHQgICAgICogS2V5IGRlcml2YXRpb24gZnVuY3Rpb24gbmFtZXNwYWNlLlxuXHQgICAgICovXG5cdCAgICB2YXIgQ19rZGYgPSBDLmtkZiA9IHt9O1xuXG5cdCAgICAvKipcblx0ICAgICAqIE9wZW5TU0wga2V5IGRlcml2YXRpb24gZnVuY3Rpb24uXG5cdCAgICAgKi9cblx0ICAgIHZhciBPcGVuU1NMS2RmID0gQ19rZGYuT3BlblNTTCA9IHtcblx0ICAgICAgICAvKipcblx0ICAgICAgICAgKiBEZXJpdmVzIGEga2V5IGFuZCBJViBmcm9tIGEgcGFzc3dvcmQuXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAcGFyYW0ge3N0cmluZ30gcGFzc3dvcmQgVGhlIHBhc3N3b3JkIHRvIGRlcml2ZSBmcm9tLlxuXHQgICAgICAgICAqIEBwYXJhbSB7bnVtYmVyfSBrZXlTaXplIFRoZSBzaXplIGluIHdvcmRzIG9mIHRoZSBrZXkgdG8gZ2VuZXJhdGUuXG5cdCAgICAgICAgICogQHBhcmFtIHtudW1iZXJ9IGl2U2l6ZSBUaGUgc2l6ZSBpbiB3b3JkcyBvZiB0aGUgSVYgdG8gZ2VuZXJhdGUuXG5cdCAgICAgICAgICogQHBhcmFtIHtXb3JkQXJyYXl8c3RyaW5nfSBzYWx0IChPcHRpb25hbCkgQSA2NC1iaXQgc2FsdCB0byB1c2UuIElmIG9taXR0ZWQsIGEgc2FsdCB3aWxsIGJlIGdlbmVyYXRlZCByYW5kb21seS5cblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqIEByZXR1cm4ge0NpcGhlclBhcmFtc30gQSBjaXBoZXIgcGFyYW1zIG9iamVjdCB3aXRoIHRoZSBrZXksIElWLCBhbmQgc2FsdC5cblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqIEBzdGF0aWNcblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqIEBleGFtcGxlXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiAgICAgdmFyIGRlcml2ZWRQYXJhbXMgPSBDcnlwdG9KUy5rZGYuT3BlblNTTC5leGVjdXRlKCdQYXNzd29yZCcsIDI1Ni8zMiwgMTI4LzMyKTtcblx0ICAgICAgICAgKiAgICAgdmFyIGRlcml2ZWRQYXJhbXMgPSBDcnlwdG9KUy5rZGYuT3BlblNTTC5leGVjdXRlKCdQYXNzd29yZCcsIDI1Ni8zMiwgMTI4LzMyLCAnc2FsdHNhbHQnKTtcblx0ICAgICAgICAgKi9cblx0ICAgICAgICBleGVjdXRlOiBmdW5jdGlvbiAocGFzc3dvcmQsIGtleVNpemUsIGl2U2l6ZSwgc2FsdCwgaGFzaGVyKSB7XG5cdCAgICAgICAgICAgIC8vIEdlbmVyYXRlIHJhbmRvbSBzYWx0XG5cdCAgICAgICAgICAgIGlmICghc2FsdCkge1xuXHQgICAgICAgICAgICAgICAgc2FsdCA9IFdvcmRBcnJheS5yYW5kb20oNjQvOCk7XG5cdCAgICAgICAgICAgIH1cblxuXHQgICAgICAgICAgICAvLyBEZXJpdmUga2V5IGFuZCBJVlxuXHQgICAgICAgICAgICBpZiAoIWhhc2hlcikge1xuXHQgICAgICAgICAgICAgICAgdmFyIGtleSA9IEV2cEtERi5jcmVhdGUoeyBrZXlTaXplOiBrZXlTaXplICsgaXZTaXplIH0pLmNvbXB1dGUocGFzc3dvcmQsIHNhbHQpO1xuXHQgICAgICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICAgICAgdmFyIGtleSA9IEV2cEtERi5jcmVhdGUoeyBrZXlTaXplOiBrZXlTaXplICsgaXZTaXplLCBoYXNoZXI6IGhhc2hlciB9KS5jb21wdXRlKHBhc3N3b3JkLCBzYWx0KTtcblx0ICAgICAgICAgICAgfVxuXG5cblx0ICAgICAgICAgICAgLy8gU2VwYXJhdGUga2V5IGFuZCBJVlxuXHQgICAgICAgICAgICB2YXIgaXYgPSBXb3JkQXJyYXkuY3JlYXRlKGtleS53b3Jkcy5zbGljZShrZXlTaXplKSwgaXZTaXplICogNCk7XG5cdCAgICAgICAgICAgIGtleS5zaWdCeXRlcyA9IGtleVNpemUgKiA0O1xuXG5cdCAgICAgICAgICAgIC8vIFJldHVybiBwYXJhbXNcblx0ICAgICAgICAgICAgcmV0dXJuIENpcGhlclBhcmFtcy5jcmVhdGUoeyBrZXk6IGtleSwgaXY6IGl2LCBzYWx0OiBzYWx0IH0pO1xuXHQgICAgICAgIH1cblx0ICAgIH07XG5cblx0ICAgIC8qKlxuXHQgICAgICogQSBzZXJpYWxpemFibGUgY2lwaGVyIHdyYXBwZXIgdGhhdCBkZXJpdmVzIHRoZSBrZXkgZnJvbSBhIHBhc3N3b3JkLFxuXHQgICAgICogYW5kIHJldHVybnMgY2lwaGVydGV4dCBhcyBhIHNlcmlhbGl6YWJsZSBjaXBoZXIgcGFyYW1zIG9iamVjdC5cblx0ICAgICAqL1xuXHQgICAgdmFyIFBhc3N3b3JkQmFzZWRDaXBoZXIgPSBDX2xpYi5QYXNzd29yZEJhc2VkQ2lwaGVyID0gU2VyaWFsaXphYmxlQ2lwaGVyLmV4dGVuZCh7XG5cdCAgICAgICAgLyoqXG5cdCAgICAgICAgICogQ29uZmlndXJhdGlvbiBvcHRpb25zLlxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogQHByb3BlcnR5IHtLREZ9IGtkZiBUaGUga2V5IGRlcml2YXRpb24gZnVuY3Rpb24gdG8gdXNlIHRvIGdlbmVyYXRlIGEga2V5IGFuZCBJViBmcm9tIGEgcGFzc3dvcmQuIERlZmF1bHQ6IE9wZW5TU0xcblx0ICAgICAgICAgKi9cblx0ICAgICAgICBjZmc6IFNlcmlhbGl6YWJsZUNpcGhlci5jZmcuZXh0ZW5kKHtcblx0ICAgICAgICAgICAga2RmOiBPcGVuU1NMS2RmXG5cdCAgICAgICAgfSksXG5cblx0ICAgICAgICAvKipcblx0ICAgICAgICAgKiBFbmNyeXB0cyBhIG1lc3NhZ2UgdXNpbmcgYSBwYXNzd29yZC5cblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqIEBwYXJhbSB7Q2lwaGVyfSBjaXBoZXIgVGhlIGNpcGhlciBhbGdvcml0aG0gdG8gdXNlLlxuXHQgICAgICAgICAqIEBwYXJhbSB7V29yZEFycmF5fHN0cmluZ30gbWVzc2FnZSBUaGUgbWVzc2FnZSB0byBlbmNyeXB0LlxuXHQgICAgICAgICAqIEBwYXJhbSB7c3RyaW5nfSBwYXNzd29yZCBUaGUgcGFzc3dvcmQuXG5cdCAgICAgICAgICogQHBhcmFtIHtPYmplY3R9IGNmZyAoT3B0aW9uYWwpIFRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgdG8gdXNlIGZvciB0aGlzIG9wZXJhdGlvbi5cblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqIEByZXR1cm4ge0NpcGhlclBhcmFtc30gQSBjaXBoZXIgcGFyYW1zIG9iamVjdC5cblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqIEBzdGF0aWNcblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqIEBleGFtcGxlXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiAgICAgdmFyIGNpcGhlcnRleHRQYXJhbXMgPSBDcnlwdG9KUy5saWIuUGFzc3dvcmRCYXNlZENpcGhlci5lbmNyeXB0KENyeXB0b0pTLmFsZ28uQUVTLCBtZXNzYWdlLCAncGFzc3dvcmQnKTtcblx0ICAgICAgICAgKiAgICAgdmFyIGNpcGhlcnRleHRQYXJhbXMgPSBDcnlwdG9KUy5saWIuUGFzc3dvcmRCYXNlZENpcGhlci5lbmNyeXB0KENyeXB0b0pTLmFsZ28uQUVTLCBtZXNzYWdlLCAncGFzc3dvcmQnLCB7IGZvcm1hdDogQ3J5cHRvSlMuZm9ybWF0Lk9wZW5TU0wgfSk7XG5cdCAgICAgICAgICovXG5cdCAgICAgICAgZW5jcnlwdDogZnVuY3Rpb24gKGNpcGhlciwgbWVzc2FnZSwgcGFzc3dvcmQsIGNmZykge1xuXHQgICAgICAgICAgICAvLyBBcHBseSBjb25maWcgZGVmYXVsdHNcblx0ICAgICAgICAgICAgY2ZnID0gdGhpcy5jZmcuZXh0ZW5kKGNmZyk7XG5cblx0ICAgICAgICAgICAgLy8gRGVyaXZlIGtleSBhbmQgb3RoZXIgcGFyYW1zXG5cdCAgICAgICAgICAgIHZhciBkZXJpdmVkUGFyYW1zID0gY2ZnLmtkZi5leGVjdXRlKHBhc3N3b3JkLCBjaXBoZXIua2V5U2l6ZSwgY2lwaGVyLml2U2l6ZSwgY2ZnLnNhbHQsIGNmZy5oYXNoZXIpO1xuXG5cdCAgICAgICAgICAgIC8vIEFkZCBJViB0byBjb25maWdcblx0ICAgICAgICAgICAgY2ZnLml2ID0gZGVyaXZlZFBhcmFtcy5pdjtcblxuXHQgICAgICAgICAgICAvLyBFbmNyeXB0XG5cdCAgICAgICAgICAgIHZhciBjaXBoZXJ0ZXh0ID0gU2VyaWFsaXphYmxlQ2lwaGVyLmVuY3J5cHQuY2FsbCh0aGlzLCBjaXBoZXIsIG1lc3NhZ2UsIGRlcml2ZWRQYXJhbXMua2V5LCBjZmcpO1xuXG5cdCAgICAgICAgICAgIC8vIE1peCBpbiBkZXJpdmVkIHBhcmFtc1xuXHQgICAgICAgICAgICBjaXBoZXJ0ZXh0Lm1peEluKGRlcml2ZWRQYXJhbXMpO1xuXG5cdCAgICAgICAgICAgIHJldHVybiBjaXBoZXJ0ZXh0O1xuXHQgICAgICAgIH0sXG5cblx0ICAgICAgICAvKipcblx0ICAgICAgICAgKiBEZWNyeXB0cyBzZXJpYWxpemVkIGNpcGhlcnRleHQgdXNpbmcgYSBwYXNzd29yZC5cblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqIEBwYXJhbSB7Q2lwaGVyfSBjaXBoZXIgVGhlIGNpcGhlciBhbGdvcml0aG0gdG8gdXNlLlxuXHQgICAgICAgICAqIEBwYXJhbSB7Q2lwaGVyUGFyYW1zfHN0cmluZ30gY2lwaGVydGV4dCBUaGUgY2lwaGVydGV4dCB0byBkZWNyeXB0LlxuXHQgICAgICAgICAqIEBwYXJhbSB7c3RyaW5nfSBwYXNzd29yZCBUaGUgcGFzc3dvcmQuXG5cdCAgICAgICAgICogQHBhcmFtIHtPYmplY3R9IGNmZyAoT3B0aW9uYWwpIFRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgdG8gdXNlIGZvciB0aGlzIG9wZXJhdGlvbi5cblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqIEByZXR1cm4ge1dvcmRBcnJheX0gVGhlIHBsYWludGV4dC5cblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqIEBzdGF0aWNcblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqIEBleGFtcGxlXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiAgICAgdmFyIHBsYWludGV4dCA9IENyeXB0b0pTLmxpYi5QYXNzd29yZEJhc2VkQ2lwaGVyLmRlY3J5cHQoQ3J5cHRvSlMuYWxnby5BRVMsIGZvcm1hdHRlZENpcGhlcnRleHQsICdwYXNzd29yZCcsIHsgZm9ybWF0OiBDcnlwdG9KUy5mb3JtYXQuT3BlblNTTCB9KTtcblx0ICAgICAgICAgKiAgICAgdmFyIHBsYWludGV4dCA9IENyeXB0b0pTLmxpYi5QYXNzd29yZEJhc2VkQ2lwaGVyLmRlY3J5cHQoQ3J5cHRvSlMuYWxnby5BRVMsIGNpcGhlcnRleHRQYXJhbXMsICdwYXNzd29yZCcsIHsgZm9ybWF0OiBDcnlwdG9KUy5mb3JtYXQuT3BlblNTTCB9KTtcblx0ICAgICAgICAgKi9cblx0ICAgICAgICBkZWNyeXB0OiBmdW5jdGlvbiAoY2lwaGVyLCBjaXBoZXJ0ZXh0LCBwYXNzd29yZCwgY2ZnKSB7XG5cdCAgICAgICAgICAgIC8vIEFwcGx5IGNvbmZpZyBkZWZhdWx0c1xuXHQgICAgICAgICAgICBjZmcgPSB0aGlzLmNmZy5leHRlbmQoY2ZnKTtcblxuXHQgICAgICAgICAgICAvLyBDb252ZXJ0IHN0cmluZyB0byBDaXBoZXJQYXJhbXNcblx0ICAgICAgICAgICAgY2lwaGVydGV4dCA9IHRoaXMuX3BhcnNlKGNpcGhlcnRleHQsIGNmZy5mb3JtYXQpO1xuXG5cdCAgICAgICAgICAgIC8vIERlcml2ZSBrZXkgYW5kIG90aGVyIHBhcmFtc1xuXHQgICAgICAgICAgICB2YXIgZGVyaXZlZFBhcmFtcyA9IGNmZy5rZGYuZXhlY3V0ZShwYXNzd29yZCwgY2lwaGVyLmtleVNpemUsIGNpcGhlci5pdlNpemUsIGNpcGhlcnRleHQuc2FsdCwgY2ZnLmhhc2hlcik7XG5cblx0ICAgICAgICAgICAgLy8gQWRkIElWIHRvIGNvbmZpZ1xuXHQgICAgICAgICAgICBjZmcuaXYgPSBkZXJpdmVkUGFyYW1zLml2O1xuXG5cdCAgICAgICAgICAgIC8vIERlY3J5cHRcblx0ICAgICAgICAgICAgdmFyIHBsYWludGV4dCA9IFNlcmlhbGl6YWJsZUNpcGhlci5kZWNyeXB0LmNhbGwodGhpcywgY2lwaGVyLCBjaXBoZXJ0ZXh0LCBkZXJpdmVkUGFyYW1zLmtleSwgY2ZnKTtcblxuXHQgICAgICAgICAgICByZXR1cm4gcGxhaW50ZXh0O1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHR9KCkpO1xuXG5cbn0pKTsiXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///57165\n")},57392:(I,g,t)=>{"use strict";I.exports=t.p+"f404ef7897bffab48c06.png"},57609:function(__unused_webpack_module,__unused_webpack_exports,__webpack_require__){eval("//! moment.js locale configuration\n//! locale : Uzbek [uz]\n//! author : Sardor Muminov : https://github.com/muminoff\n\n;(function (global, factory) {\n true ? factory(__webpack_require__(95093)) :\n 0\n}(this, (function (moment) { 'use strict';\n\n //! moment.js locale configuration\n\n var uz = moment.defineLocale('uz', {\n months: 'январ_феврал_март_апрел_май_июн_июл_август_сентябр_октябр_ноябр_декабр'.split(\n '_'\n ),\n monthsShort: 'янв_фев_мар_апр_май_июн_июл_авг_сен_окт_ноя_дек'.split('_'),\n weekdays: 'Якшанба_Душанба_Сешанба_Чоршанба_Пайшанба_Жума_Шанба'.split('_'),\n weekdaysShort: 'Якш_Душ_Сеш_Чор_Пай_Жум_Шан'.split('_'),\n weekdaysMin: 'Як_Ду_Се_Чо_Па_Жу_Ша'.split('_'),\n longDateFormat: {\n LT: 'HH:mm',\n LTS: 'HH:mm:ss',\n L: 'DD/MM/YYYY',\n LL: 'D MMMM YYYY',\n LLL: 'D MMMM YYYY HH:mm',\n LLLL: 'D MMMM YYYY, dddd HH:mm',\n },\n calendar: {\n sameDay: '[Бугун соат] LT [да]',\n nextDay: '[Эртага] LT [да]',\n nextWeek: 'dddd [куни соат] LT [да]',\n lastDay: '[Кеча соат] LT [да]',\n lastWeek: '[Утган] dddd [куни соат] LT [да]',\n sameElse: 'L',\n },\n relativeTime: {\n future: 'Якин %s ичида',\n past: 'Бир неча %s олдин',\n s: 'фурсат',\n ss: '%d фурсат',\n m: 'бир дакика',\n mm: '%d дакика',\n h: 'бир соат',\n hh: '%d соат',\n d: 'бир кун',\n dd: '%d кун',\n M: 'бир ой',\n MM: '%d ой',\n y: 'бир йил',\n yy: '%d йил',\n },\n week: {\n dow: 1, // Monday is the first day of the week.\n doy: 7, // The week that contains Jan 4th is the first week of the year.\n },\n });\n\n return uz;\n\n})));\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNTc2MDkuanMiLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vaXRnLW5leHRnZW4tZnJvbnRlbmQvLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS91ei5qcz8yZThjIl0sInNvdXJjZXNDb250ZW50IjpbIi8vISBtb21lbnQuanMgbG9jYWxlIGNvbmZpZ3VyYXRpb25cbi8vISBsb2NhbGUgOiBVemJlayBbdXpdXG4vLyEgYXV0aG9yIDogU2FyZG9yIE11bWlub3YgOiBodHRwczovL2dpdGh1Yi5jb20vbXVtaW5vZmZcblxuOyhmdW5jdGlvbiAoZ2xvYmFsLCBmYWN0b3J5KSB7XG4gICB0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcgJiYgdHlwZW9mIG1vZHVsZSAhPT0gJ3VuZGVmaW5lZCdcbiAgICAgICAmJiB0eXBlb2YgcmVxdWlyZSA9PT0gJ2Z1bmN0aW9uJyA/IGZhY3RvcnkocmVxdWlyZSgnLi4vbW9tZW50JykpIDpcbiAgIHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgZGVmaW5lLmFtZCA/IGRlZmluZShbJy4uL21vbWVudCddLCBmYWN0b3J5KSA6XG4gICBmYWN0b3J5KGdsb2JhbC5tb21lbnQpXG59KHRoaXMsIChmdW5jdGlvbiAobW9tZW50KSB7ICd1c2Ugc3RyaWN0JztcblxuICAgIC8vISBtb21lbnQuanMgbG9jYWxlIGNvbmZpZ3VyYXRpb25cblxuICAgIHZhciB1eiA9IG1vbWVudC5kZWZpbmVMb2NhbGUoJ3V6Jywge1xuICAgICAgICBtb250aHM6ICfRj9C90LLQsNGAX9GE0LXQstGA0LDQu1/QvNCw0YDRgl/QsNC/0YDQtdC7X9C80LDQuV/QuNGO0L1f0LjRjtC7X9Cw0LLQs9GD0YHRgl/RgdC10L3RgtGP0LHRgF/QvtC60YLRj9Cx0YBf0L3QvtGP0LHRgF/QtNC10LrQsNCx0YAnLnNwbGl0KFxuICAgICAgICAgICAgJ18nXG4gICAgICAgICksXG4gICAgICAgIG1vbnRoc1Nob3J0OiAn0Y/QvdCyX9GE0LXQsl/QvNCw0YBf0LDQv9GAX9C80LDQuV/QuNGO0L1f0LjRjtC7X9Cw0LLQs1/RgdC10L1f0L7QutGCX9C90L7Rj1/QtNC10LonLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzOiAn0K/QutGI0LDQvdCx0LBf0JTRg9GI0LDQvdCx0LBf0KHQtdGI0LDQvdCx0LBf0KfQvtGA0YjQsNC90LHQsF/Qn9Cw0LnRiNCw0L3QsdCwX9CW0YPQvNCwX9Co0LDQvdCx0LAnLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzU2hvcnQ6ICfQr9C60Yhf0JTRg9GIX9Ch0LXRiF/Qp9C+0YBf0J/QsNC5X9CW0YPQvF/QqNCw0L0nLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzTWluOiAn0K/Qul/QlNGDX9Ch0LVf0KfQvl/Qn9CwX9CW0YNf0KjQsCcuc3BsaXQoJ18nKSxcbiAgICAgICAgbG9uZ0RhdGVGb3JtYXQ6IHtcbiAgICAgICAgICAgIExUOiAnSEg6bW0nLFxuICAgICAgICAgICAgTFRTOiAnSEg6bW06c3MnLFxuICAgICAgICAgICAgTDogJ0REL01NL1lZWVknLFxuICAgICAgICAgICAgTEw6ICdEIE1NTU0gWVlZWScsXG4gICAgICAgICAgICBMTEw6ICdEIE1NTU0gWVlZWSBISDptbScsXG4gICAgICAgICAgICBMTExMOiAnRCBNTU1NIFlZWVksIGRkZGQgSEg6bW0nLFxuICAgICAgICB9LFxuICAgICAgICBjYWxlbmRhcjoge1xuICAgICAgICAgICAgc2FtZURheTogJ1vQkdGD0LPRg9C9INGB0L7QsNGCXSBMVCBb0LTQsF0nLFxuICAgICAgICAgICAgbmV4dERheTogJ1vQrdGA0YLQsNCz0LBdIExUIFvQtNCwXScsXG4gICAgICAgICAgICBuZXh0V2VlazogJ2RkZGQgW9C60YPQvdC4INGB0L7QsNGCXSBMVCBb0LTQsF0nLFxuICAgICAgICAgICAgbGFzdERheTogJ1vQmtC10YfQsCDRgdC+0LDRgl0gTFQgW9C00LBdJyxcbiAgICAgICAgICAgIGxhc3RXZWVrOiAnW9Cj0YLQs9Cw0L1dIGRkZGQgW9C60YPQvdC4INGB0L7QsNGCXSBMVCBb0LTQsF0nLFxuICAgICAgICAgICAgc2FtZUVsc2U6ICdMJyxcbiAgICAgICAgfSxcbiAgICAgICAgcmVsYXRpdmVUaW1lOiB7XG4gICAgICAgICAgICBmdXR1cmU6ICfQr9C60LjQvSAlcyDQuNGH0LjQtNCwJyxcbiAgICAgICAgICAgIHBhc3Q6ICfQkdC40YAg0L3QtdGH0LAgJXMg0L7Qu9C00LjQvScsXG4gICAgICAgICAgICBzOiAn0YTRg9GA0YHQsNGCJyxcbiAgICAgICAgICAgIHNzOiAnJWQg0YTRg9GA0YHQsNGCJyxcbiAgICAgICAgICAgIG06ICfQsdC40YAg0LTQsNC60LjQutCwJyxcbiAgICAgICAgICAgIG1tOiAnJWQg0LTQsNC60LjQutCwJyxcbiAgICAgICAgICAgIGg6ICfQsdC40YAg0YHQvtCw0YInLFxuICAgICAgICAgICAgaGg6ICclZCDRgdC+0LDRgicsXG4gICAgICAgICAgICBkOiAn0LHQuNGAINC60YPQvScsXG4gICAgICAgICAgICBkZDogJyVkINC60YPQvScsXG4gICAgICAgICAgICBNOiAn0LHQuNGAINC+0LknLFxuICAgICAgICAgICAgTU06ICclZCDQvtC5JyxcbiAgICAgICAgICAgIHk6ICfQsdC40YAg0LnQuNC7JyxcbiAgICAgICAgICAgIHl5OiAnJWQg0LnQuNC7JyxcbiAgICAgICAgfSxcbiAgICAgICAgd2Vlazoge1xuICAgICAgICAgICAgZG93OiAxLCAvLyBNb25kYXkgaXMgdGhlIGZpcnN0IGRheSBvZiB0aGUgd2Vlay5cbiAgICAgICAgICAgIGRveTogNywgLy8gVGhlIHdlZWsgdGhhdCBjb250YWlucyBKYW4gNHRoIGlzIHRoZSBmaXJzdCB3ZWVrIG9mIHRoZSB5ZWFyLlxuICAgICAgICB9LFxuICAgIH0pO1xuXG4gICAgcmV0dXJuIHV6O1xuXG59KSkpO1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///57609\n")},57758:(module,__unused_webpack_exports,__webpack_require__)=>{"use strict";eval("// Ported from https://github.com/mafintosh/pump with\n// permission from the author, Mathias Buus (@mafintosh).\n\n\n\nvar eos;\nfunction once(callback) {\n var called = false;\n return function () {\n if (called) return;\n called = true;\n callback.apply(void 0, arguments);\n };\n}\nvar _require$codes = (__webpack_require__(86048)/* .codes */ .F),\n ERR_MISSING_ARGS = _require$codes.ERR_MISSING_ARGS,\n ERR_STREAM_DESTROYED = _require$codes.ERR_STREAM_DESTROYED;\nfunction noop(err) {\n // Rethrow the error if it exists to avoid swallowing it\n if (err) throw err;\n}\nfunction isRequest(stream) {\n return stream.setHeader && typeof stream.abort === 'function';\n}\nfunction destroyer(stream, reading, writing, callback) {\n callback = once(callback);\n var closed = false;\n stream.on('close', function () {\n closed = true;\n });\n if (eos === undefined) eos = __webpack_require__(86238);\n eos(stream, {\n readable: reading,\n writable: writing\n }, function (err) {\n if (err) return callback(err);\n closed = true;\n callback();\n });\n var destroyed = false;\n return function (err) {\n if (closed) return;\n if (destroyed) return;\n destroyed = true;\n\n // request.destroy just do .end - .abort is what we want\n if (isRequest(stream)) return stream.abort();\n if (typeof stream.destroy === 'function') return stream.destroy();\n callback(err || new ERR_STREAM_DESTROYED('pipe'));\n };\n}\nfunction call(fn) {\n fn();\n}\nfunction pipe(from, to) {\n return from.pipe(to);\n}\nfunction popCallback(streams) {\n if (!streams.length) return noop;\n if (typeof streams[streams.length - 1] !== 'function') return noop;\n return streams.pop();\n}\nfunction pipeline() {\n for (var _len = arguments.length, streams = new Array(_len), _key = 0; _key < _len; _key++) {\n streams[_key] = arguments[_key];\n }\n var callback = popCallback(streams);\n if (Array.isArray(streams[0])) streams = streams[0];\n if (streams.length < 2) {\n throw new ERR_MISSING_ARGS('streams');\n }\n var error;\n var destroys = streams.map(function (stream, i) {\n var reading = i < streams.length - 1;\n var writing = i > 0;\n return destroyer(stream, reading, writing, function (err) {\n if (!error) error = err;\n if (err) destroys.forEach(call);\n if (reading) return;\n destroys.forEach(call);\n callback(error);\n });\n });\n return streams.reduce(pipe);\n}\nmodule.exports = pipeline;//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNTc3NTguanMiLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL2l0Zy1uZXh0Z2VuLWZyb250ZW5kLy4vbm9kZV9tb2R1bGVzL3JlYWRhYmxlLXN0cmVhbS9saWIvaW50ZXJuYWwvc3RyZWFtcy9waXBlbGluZS5qcz81ZDFjIl0sInNvdXJjZXNDb250ZW50IjpbIi8vIFBvcnRlZCBmcm9tIGh0dHBzOi8vZ2l0aHViLmNvbS9tYWZpbnRvc2gvcHVtcCB3aXRoXG4vLyBwZXJtaXNzaW9uIGZyb20gdGhlIGF1dGhvciwgTWF0aGlhcyBCdXVzIChAbWFmaW50b3NoKS5cblxuJ3VzZSBzdHJpY3QnO1xuXG52YXIgZW9zO1xuZnVuY3Rpb24gb25jZShjYWxsYmFjaykge1xuICB2YXIgY2FsbGVkID0gZmFsc2U7XG4gIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgaWYgKGNhbGxlZCkgcmV0dXJuO1xuICAgIGNhbGxlZCA9IHRydWU7XG4gICAgY2FsbGJhY2suYXBwbHkodm9pZCAwLCBhcmd1bWVudHMpO1xuICB9O1xufVxudmFyIF9yZXF1aXJlJGNvZGVzID0gcmVxdWlyZSgnLi4vLi4vLi4vZXJyb3JzJykuY29kZXMsXG4gIEVSUl9NSVNTSU5HX0FSR1MgPSBfcmVxdWlyZSRjb2Rlcy5FUlJfTUlTU0lOR19BUkdTLFxuICBFUlJfU1RSRUFNX0RFU1RST1lFRCA9IF9yZXF1aXJlJGNvZGVzLkVSUl9TVFJFQU1fREVTVFJPWUVEO1xuZnVuY3Rpb24gbm9vcChlcnIpIHtcbiAgLy8gUmV0aHJvdyB0aGUgZXJyb3IgaWYgaXQgZXhpc3RzIHRvIGF2b2lkIHN3YWxsb3dpbmcgaXRcbiAgaWYgKGVycikgdGhyb3cgZXJyO1xufVxuZnVuY3Rpb24gaXNSZXF1ZXN0KHN0cmVhbSkge1xuICByZXR1cm4gc3RyZWFtLnNldEhlYWRlciAmJiB0eXBlb2Ygc3RyZWFtLmFib3J0ID09PSAnZnVuY3Rpb24nO1xufVxuZnVuY3Rpb24gZGVzdHJveWVyKHN0cmVhbSwgcmVhZGluZywgd3JpdGluZywgY2FsbGJhY2spIHtcbiAgY2FsbGJhY2sgPSBvbmNlKGNhbGxiYWNrKTtcbiAgdmFyIGNsb3NlZCA9IGZhbHNlO1xuICBzdHJlYW0ub24oJ2Nsb3NlJywgZnVuY3Rpb24gKCkge1xuICAgIGNsb3NlZCA9IHRydWU7XG4gIH0pO1xuICBpZiAoZW9zID09PSB1bmRlZmluZWQpIGVvcyA9IHJlcXVpcmUoJy4vZW5kLW9mLXN0cmVhbScpO1xuICBlb3Moc3RyZWFtLCB7XG4gICAgcmVhZGFibGU6IHJlYWRpbmcsXG4gICAgd3JpdGFibGU6IHdyaXRpbmdcbiAgfSwgZnVuY3Rpb24gKGVycikge1xuICAgIGlmIChlcnIpIHJldHVybiBjYWxsYmFjayhlcnIpO1xuICAgIGNsb3NlZCA9IHRydWU7XG4gICAgY2FsbGJhY2soKTtcbiAgfSk7XG4gIHZhciBkZXN0cm95ZWQgPSBmYWxzZTtcbiAgcmV0dXJuIGZ1bmN0aW9uIChlcnIpIHtcbiAgICBpZiAoY2xvc2VkKSByZXR1cm47XG4gICAgaWYgKGRlc3Ryb3llZCkgcmV0dXJuO1xuICAgIGRlc3Ryb3llZCA9IHRydWU7XG5cbiAgICAvLyByZXF1ZXN0LmRlc3Ryb3kganVzdCBkbyAuZW5kIC0gLmFib3J0IGlzIHdoYXQgd2Ugd2FudFxuICAgIGlmIChpc1JlcXVlc3Qoc3RyZWFtKSkgcmV0dXJuIHN0cmVhbS5hYm9ydCgpO1xuICAgIGlmICh0eXBlb2Ygc3RyZWFtLmRlc3Ryb3kgPT09ICdmdW5jdGlvbicpIHJldHVybiBzdHJlYW0uZGVzdHJveSgpO1xuICAgIGNhbGxiYWNrKGVyciB8fCBuZXcgRVJSX1NUUkVBTV9ERVNUUk9ZRUQoJ3BpcGUnKSk7XG4gIH07XG59XG5mdW5jdGlvbiBjYWxsKGZuKSB7XG4gIGZuKCk7XG59XG5mdW5jdGlvbiBwaXBlKGZyb20sIHRvKSB7XG4gIHJldHVybiBmcm9tLnBpcGUodG8pO1xufVxuZnVuY3Rpb24gcG9wQ2FsbGJhY2soc3RyZWFtcykge1xuICBpZiAoIXN0cmVhbXMubGVuZ3RoKSByZXR1cm4gbm9vcDtcbiAgaWYgKHR5cGVvZiBzdHJlYW1zW3N0cmVhbXMubGVuZ3RoIC0gMV0gIT09ICdmdW5jdGlvbicpIHJldHVybiBub29wO1xuICByZXR1cm4gc3RyZWFtcy5wb3AoKTtcbn1cbmZ1bmN0aW9uIHBpcGVsaW5lKCkge1xuICBmb3IgKHZhciBfbGVuID0gYXJndW1lbnRzLmxlbmd0aCwgc3RyZWFtcyA9IG5ldyBBcnJheShfbGVuKSwgX2tleSA9IDA7IF9rZXkgPCBfbGVuOyBfa2V5KyspIHtcbiAgICBzdHJlYW1zW19rZXldID0gYXJndW1lbnRzW19rZXldO1xuICB9XG4gIHZhciBjYWxsYmFjayA9IHBvcENhbGxiYWNrKHN0cmVhbXMpO1xuICBpZiAoQXJyYXkuaXNBcnJheShzdHJlYW1zWzBdKSkgc3RyZWFtcyA9IHN0cmVhbXNbMF07XG4gIGlmIChzdHJlYW1zLmxlbmd0aCA8IDIpIHtcbiAgICB0aHJvdyBuZXcgRVJSX01JU1NJTkdfQVJHUygnc3RyZWFtcycpO1xuICB9XG4gIHZhciBlcnJvcjtcbiAgdmFyIGRlc3Ryb3lzID0gc3RyZWFtcy5tYXAoZnVuY3Rpb24gKHN0cmVhbSwgaSkge1xuICAgIHZhciByZWFkaW5nID0gaSA8IHN0cmVhbXMubGVuZ3RoIC0gMTtcbiAgICB2YXIgd3JpdGluZyA9IGkgPiAwO1xuICAgIHJldHVybiBkZXN0cm95ZXIoc3RyZWFtLCByZWFkaW5nLCB3cml0aW5nLCBmdW5jdGlvbiAoZXJyKSB7XG4gICAgICBpZiAoIWVycm9yKSBlcnJvciA9IGVycjtcbiAgICAgIGlmIChlcnIpIGRlc3Ryb3lzLmZvckVhY2goY2FsbCk7XG4gICAgICBpZiAocmVhZGluZykgcmV0dXJuO1xuICAgICAgZGVzdHJveXMuZm9yRWFjaChjYWxsKTtcbiAgICAgIGNhbGxiYWNrKGVycm9yKTtcbiAgICB9KTtcbiAgfSk7XG4gIHJldHVybiBzdHJlYW1zLnJlZHVjZShwaXBlKTtcbn1cbm1vZHVsZS5leHBvcnRzID0gcGlwZWxpbmU7Il0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///57758\n")},57777:function(__unused_webpack_module,__unused_webpack_exports,__webpack_require__){eval("//! moment.js locale configuration\n//! locale : Urdu [ur]\n//! author : Sawood Alam : https://github.com/ibnesayeed\n//! author : Zack : https://github.com/ZackVision\n\n;(function (global, factory) {\n true ? factory(__webpack_require__(95093)) :\n 0\n}(this, (function (moment) { 'use strict';\n\n //! moment.js locale configuration\n\n var months = [\n 'جنوری',\n 'فروری',\n 'مارچ',\n 'اپریل',\n 'مئی',\n 'جون',\n 'جولائی',\n 'اگست',\n 'ستمبر',\n 'اکتوبر',\n 'نومبر',\n 'دسمبر',\n ],\n days = ['اتوار', 'پیر', 'منگل', 'بدھ', 'جمعرات', 'جمعہ', 'ہفتہ'];\n\n var ur = moment.defineLocale('ur', {\n months: months,\n monthsShort: months,\n weekdays: days,\n weekdaysShort: days,\n weekdaysMin: days,\n longDateFormat: {\n LT: 'HH:mm',\n LTS: 'HH:mm:ss',\n L: 'DD/MM/YYYY',\n LL: 'D MMMM YYYY',\n LLL: 'D MMMM YYYY HH:mm',\n LLLL: 'dddd، D MMMM YYYY HH:mm',\n },\n meridiemParse: /صبح|شام/,\n isPM: function (input) {\n return 'شام' === input;\n },\n meridiem: function (hour, minute, isLower) {\n if (hour < 12) {\n return 'صبح';\n }\n return 'شام';\n },\n calendar: {\n sameDay: '[آج بوقت] LT',\n nextDay: '[کل بوقت] LT',\n nextWeek: 'dddd [بوقت] LT',\n lastDay: '[گذشتہ روز بوقت] LT',\n lastWeek: '[گذشتہ] dddd [بوقت] LT',\n sameElse: 'L',\n },\n relativeTime: {\n future: '%s بعد',\n past: '%s قبل',\n s: 'چند سیکنڈ',\n ss: '%d سیکنڈ',\n m: 'ایک منٹ',\n mm: '%d منٹ',\n h: 'ایک گھنٹہ',\n hh: '%d گھنٹے',\n d: 'ایک دن',\n dd: '%d دن',\n M: 'ایک ماہ',\n MM: '%d ماہ',\n y: 'ایک سال',\n yy: '%d سال',\n },\n preparse: function (string) {\n return string.replace(/،/g, ',');\n },\n postformat: function (string) {\n return string.replace(/,/g, '،');\n },\n week: {\n dow: 1, // Monday is the first day of the week.\n doy: 4, // The week that contains Jan 4th is the first week of the year.\n },\n });\n\n return ur;\n\n})));\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNTc3NzcuanMiLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9pdGctbmV4dGdlbi1mcm9udGVuZC8uL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL3VyLmpzPzUyOTQiXSwic291cmNlc0NvbnRlbnQiOlsiLy8hIG1vbWVudC5qcyBsb2NhbGUgY29uZmlndXJhdGlvblxuLy8hIGxvY2FsZSA6IFVyZHUgW3VyXVxuLy8hIGF1dGhvciA6IFNhd29vZCBBbGFtIDogaHR0cHM6Ly9naXRodWIuY29tL2libmVzYXllZWRcbi8vISBhdXRob3IgOiBaYWNrIDogaHR0cHM6Ly9naXRodWIuY29tL1phY2tWaXNpb25cblxuOyhmdW5jdGlvbiAoZ2xvYmFsLCBmYWN0b3J5KSB7XG4gICB0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcgJiYgdHlwZW9mIG1vZHVsZSAhPT0gJ3VuZGVmaW5lZCdcbiAgICAgICAmJiB0eXBlb2YgcmVxdWlyZSA9PT0gJ2Z1bmN0aW9uJyA/IGZhY3RvcnkocmVxdWlyZSgnLi4vbW9tZW50JykpIDpcbiAgIHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgZGVmaW5lLmFtZCA/IGRlZmluZShbJy4uL21vbWVudCddLCBmYWN0b3J5KSA6XG4gICBmYWN0b3J5KGdsb2JhbC5tb21lbnQpXG59KHRoaXMsIChmdW5jdGlvbiAobW9tZW50KSB7ICd1c2Ugc3RyaWN0JztcblxuICAgIC8vISBtb21lbnQuanMgbG9jYWxlIGNvbmZpZ3VyYXRpb25cblxuICAgIHZhciBtb250aHMgPSBbXG4gICAgICAgICAgICAn2KzZhtmI2LHbjCcsXG4gICAgICAgICAgICAn2YHYsdmI2LHbjCcsXG4gICAgICAgICAgICAn2YXYp9ix2oYnLFxuICAgICAgICAgICAgJ9in2b7YsduM2YQnLFxuICAgICAgICAgICAgJ9mF2KbbjCcsXG4gICAgICAgICAgICAn2KzZiNmGJyxcbiAgICAgICAgICAgICfYrNmI2YTYp9im24wnLFxuICAgICAgICAgICAgJ9in2q/Ys9iqJyxcbiAgICAgICAgICAgICfYs9iq2YXYqNixJyxcbiAgICAgICAgICAgICfYp9qp2KrZiNio2LEnLFxuICAgICAgICAgICAgJ9mG2YjZhdio2LEnLFxuICAgICAgICAgICAgJ9iv2LPZhdio2LEnLFxuICAgICAgICBdLFxuICAgICAgICBkYXlzID0gWyfYp9iq2YjYp9ixJywgJ9m+24zYsScsICfZhdmG2q/ZhCcsICfYqNiv2r4nLCAn2KzZhdi52LHYp9iqJywgJ9is2YXYuduBJywgJ9uB2YHYqtuBJ107XG5cbiAgICB2YXIgdXIgPSBtb21lbnQuZGVmaW5lTG9jYWxlKCd1cicsIHtcbiAgICAgICAgbW9udGhzOiBtb250aHMsXG4gICAgICAgIG1vbnRoc1Nob3J0OiBtb250aHMsXG4gICAgICAgIHdlZWtkYXlzOiBkYXlzLFxuICAgICAgICB3ZWVrZGF5c1Nob3J0OiBkYXlzLFxuICAgICAgICB3ZWVrZGF5c01pbjogZGF5cyxcbiAgICAgICAgbG9uZ0RhdGVGb3JtYXQ6IHtcbiAgICAgICAgICAgIExUOiAnSEg6bW0nLFxuICAgICAgICAgICAgTFRTOiAnSEg6bW06c3MnLFxuICAgICAgICAgICAgTDogJ0REL01NL1lZWVknLFxuICAgICAgICAgICAgTEw6ICdEIE1NTU0gWVlZWScsXG4gICAgICAgICAgICBMTEw6ICdEIE1NTU0gWVlZWSBISDptbScsXG4gICAgICAgICAgICBMTExMOiAnZGRkZNiMIEQgTU1NTSBZWVlZIEhIOm1tJyxcbiAgICAgICAgfSxcbiAgICAgICAgbWVyaWRpZW1QYXJzZTogL9i12KjYrXzYtNin2YUvLFxuICAgICAgICBpc1BNOiBmdW5jdGlvbiAoaW5wdXQpIHtcbiAgICAgICAgICAgIHJldHVybiAn2LTYp9mFJyA9PT0gaW5wdXQ7XG4gICAgICAgIH0sXG4gICAgICAgIG1lcmlkaWVtOiBmdW5jdGlvbiAoaG91ciwgbWludXRlLCBpc0xvd2VyKSB7XG4gICAgICAgICAgICBpZiAoaG91ciA8IDEyKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuICfYtdio2K0nO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuICfYtNin2YUnO1xuICAgICAgICB9LFxuICAgICAgICBjYWxlbmRhcjoge1xuICAgICAgICAgICAgc2FtZURheTogJ1vYotisINio2YjZgtiqXSBMVCcsXG4gICAgICAgICAgICBuZXh0RGF5OiAnW9qp2YQg2KjZiNmC2KpdIExUJyxcbiAgICAgICAgICAgIG5leHRXZWVrOiAnZGRkZCBb2KjZiNmC2KpdIExUJyxcbiAgICAgICAgICAgIGxhc3REYXk6ICdb2q/YsNi02KrbgSDYsdmI2LIg2KjZiNmC2KpdIExUJyxcbiAgICAgICAgICAgIGxhc3RXZWVrOiAnW9qv2LDYtNiq24FdIGRkZGQgW9io2YjZgtiqXSBMVCcsXG4gICAgICAgICAgICBzYW1lRWxzZTogJ0wnLFxuICAgICAgICB9LFxuICAgICAgICByZWxhdGl2ZVRpbWU6IHtcbiAgICAgICAgICAgIGZ1dHVyZTogJyVzINio2LnYrycsXG4gICAgICAgICAgICBwYXN0OiAnJXMg2YLYqNmEJyxcbiAgICAgICAgICAgIHM6ICfahtmG2K8g2LPbjNqp2YbaiCcsXG4gICAgICAgICAgICBzczogJyVkINiz24zaqdmG2ognLFxuICAgICAgICAgICAgbTogJ9in24zaqSDZhdmG2bknLFxuICAgICAgICAgICAgbW06ICclZCDZhdmG2bknLFxuICAgICAgICAgICAgaDogJ9in24zaqSDar9q+2YbZuduBJyxcbiAgICAgICAgICAgIGhoOiAnJWQg2q/avtmG2bnbkicsXG4gICAgICAgICAgICBkOiAn2KfbjNqpINiv2YYnLFxuICAgICAgICAgICAgZGQ6ICclZCDYr9mGJyxcbiAgICAgICAgICAgIE06ICfYp9uM2qkg2YXYp9uBJyxcbiAgICAgICAgICAgIE1NOiAnJWQg2YXYp9uBJyxcbiAgICAgICAgICAgIHk6ICfYp9uM2qkg2LPYp9mEJyxcbiAgICAgICAgICAgIHl5OiAnJWQg2LPYp9mEJyxcbiAgICAgICAgfSxcbiAgICAgICAgcHJlcGFyc2U6IGZ1bmN0aW9uIChzdHJpbmcpIHtcbiAgICAgICAgICAgIHJldHVybiBzdHJpbmcucmVwbGFjZSgv2IwvZywgJywnKTtcbiAgICAgICAgfSxcbiAgICAgICAgcG9zdGZvcm1hdDogZnVuY3Rpb24gKHN0cmluZykge1xuICAgICAgICAgICAgcmV0dXJuIHN0cmluZy5yZXBsYWNlKC8sL2csICfYjCcpO1xuICAgICAgICB9LFxuICAgICAgICB3ZWVrOiB7XG4gICAgICAgICAgICBkb3c6IDEsIC8vIE1vbmRheSBpcyB0aGUgZmlyc3QgZGF5IG9mIHRoZSB3ZWVrLlxuICAgICAgICAgICAgZG95OiA0LCAvLyBUaGUgd2VlayB0aGF0IGNvbnRhaW5zIEphbiA0dGggaXMgdGhlIGZpcnN0IHdlZWsgb2YgdGhlIHllYXIuXG4gICAgICAgIH0sXG4gICAgfSk7XG5cbiAgICByZXR1cm4gdXI7XG5cbn0pKSk7XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///57777\n")},58076:function(__unused_webpack_module,__unused_webpack_exports,__webpack_require__){eval("//! moment.js locale configuration\n//! locale : Montenegrin [me]\n//! author : Miodrag Nikač : https://github.com/miodragnikac\n\n;(function (global, factory) {\n true ? factory(__webpack_require__(95093)) :\n 0\n}(this, (function (moment) { 'use strict';\n\n //! moment.js locale configuration\n\n var translator = {\n words: {\n //Different grammatical cases\n ss: ['sekund', 'sekunda', 'sekundi'],\n m: ['jedan minut', 'jednog minuta'],\n mm: ['minut', 'minuta', 'minuta'],\n h: ['jedan sat', 'jednog sata'],\n hh: ['sat', 'sata', 'sati'],\n dd: ['dan', 'dana', 'dana'],\n MM: ['mjesec', 'mjeseca', 'mjeseci'],\n yy: ['godina', 'godine', 'godina'],\n },\n correctGrammaticalCase: function (number, wordKey) {\n return number === 1\n ? wordKey[0]\n : number >= 2 && number <= 4\n ? wordKey[1]\n : wordKey[2];\n },\n translate: function (number, withoutSuffix, key) {\n var wordKey = translator.words[key];\n if (key.length === 1) {\n return withoutSuffix ? wordKey[0] : wordKey[1];\n } else {\n return (\n number +\n ' ' +\n translator.correctGrammaticalCase(number, wordKey)\n );\n }\n },\n };\n\n var me = moment.defineLocale('me', {\n months: 'januar_februar_mart_april_maj_jun_jul_avgust_septembar_oktobar_novembar_decembar'.split(\n '_'\n ),\n monthsShort:\n 'jan._feb._mar._apr._maj_jun_jul_avg._sep._okt._nov._dec.'.split('_'),\n monthsParseExact: true,\n weekdays: 'nedjelja_ponedjeljak_utorak_srijeda_četvrtak_petak_subota'.split(\n '_'\n ),\n weekdaysShort: 'ned._pon._uto._sri._čet._pet._sub.'.split('_'),\n weekdaysMin: 'ne_po_ut_sr_če_pe_su'.split('_'),\n weekdaysParseExact: true,\n longDateFormat: {\n LT: 'H:mm',\n LTS: 'H:mm:ss',\n L: 'DD.MM.YYYY',\n LL: 'D. MMMM YYYY',\n LLL: 'D. MMMM YYYY H:mm',\n LLLL: 'dddd, D. MMMM YYYY H:mm',\n },\n calendar: {\n sameDay: '[danas u] LT',\n nextDay: '[sjutra u] LT',\n\n nextWeek: function () {\n switch (this.day()) {\n case 0:\n return '[u] [nedjelju] [u] LT';\n case 3:\n return '[u] [srijedu] [u] LT';\n case 6:\n return '[u] [subotu] [u] LT';\n case 1:\n case 2:\n case 4:\n case 5:\n return '[u] dddd [u] LT';\n }\n },\n lastDay: '[juče u] LT',\n lastWeek: function () {\n var lastWeekDays = [\n '[prošle] [nedjelje] [u] LT',\n '[prošlog] [ponedjeljka] [u] LT',\n '[prošlog] [utorka] [u] LT',\n '[prošle] [srijede] [u] LT',\n '[prošlog] [četvrtka] [u] LT',\n '[prošlog] [petka] [u] LT',\n '[prošle] [subote] [u] LT',\n ];\n return lastWeekDays[this.day()];\n },\n sameElse: 'L',\n },\n relativeTime: {\n future: 'za %s',\n past: 'prije %s',\n s: 'nekoliko sekundi',\n ss: translator.translate,\n m: translator.translate,\n mm: translator.translate,\n h: translator.translate,\n hh: translator.translate,\n d: 'dan',\n dd: translator.translate,\n M: 'mjesec',\n MM: translator.translate,\n y: 'godinu',\n yy: translator.translate,\n },\n dayOfMonthOrdinalParse: /\\d{1,2}\\./,\n ordinal: '%d.',\n week: {\n dow: 1, // Monday is the first day of the week.\n doy: 7, // The week that contains Jan 7th is the first week of the year.\n },\n });\n\n return me;\n\n})));\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNTgwNzYuanMiLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vaXRnLW5leHRnZW4tZnJvbnRlbmQvLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9tZS5qcz8yOTNjIl0sInNvdXJjZXNDb250ZW50IjpbIi8vISBtb21lbnQuanMgbG9jYWxlIGNvbmZpZ3VyYXRpb25cbi8vISBsb2NhbGUgOiBNb250ZW5lZ3JpbiBbbWVdXG4vLyEgYXV0aG9yIDogTWlvZHJhZyBOaWthxI0gPG1pb2RyYWdAcmVzdGFydGl0Lm1lPiA6IGh0dHBzOi8vZ2l0aHViLmNvbS9taW9kcmFnbmlrYWNcblxuOyhmdW5jdGlvbiAoZ2xvYmFsLCBmYWN0b3J5KSB7XG4gICB0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcgJiYgdHlwZW9mIG1vZHVsZSAhPT0gJ3VuZGVmaW5lZCdcbiAgICAgICAmJiB0eXBlb2YgcmVxdWlyZSA9PT0gJ2Z1bmN0aW9uJyA/IGZhY3RvcnkocmVxdWlyZSgnLi4vbW9tZW50JykpIDpcbiAgIHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgZGVmaW5lLmFtZCA/IGRlZmluZShbJy4uL21vbWVudCddLCBmYWN0b3J5KSA6XG4gICBmYWN0b3J5KGdsb2JhbC5tb21lbnQpXG59KHRoaXMsIChmdW5jdGlvbiAobW9tZW50KSB7ICd1c2Ugc3RyaWN0JztcblxuICAgIC8vISBtb21lbnQuanMgbG9jYWxlIGNvbmZpZ3VyYXRpb25cblxuICAgIHZhciB0cmFuc2xhdG9yID0ge1xuICAgICAgICB3b3Jkczoge1xuICAgICAgICAgICAgLy9EaWZmZXJlbnQgZ3JhbW1hdGljYWwgY2FzZXNcbiAgICAgICAgICAgIHNzOiBbJ3Nla3VuZCcsICdzZWt1bmRhJywgJ3Nla3VuZGknXSxcbiAgICAgICAgICAgIG06IFsnamVkYW4gbWludXQnLCAnamVkbm9nIG1pbnV0YSddLFxuICAgICAgICAgICAgbW06IFsnbWludXQnLCAnbWludXRhJywgJ21pbnV0YSddLFxuICAgICAgICAgICAgaDogWydqZWRhbiBzYXQnLCAnamVkbm9nIHNhdGEnXSxcbiAgICAgICAgICAgIGhoOiBbJ3NhdCcsICdzYXRhJywgJ3NhdGknXSxcbiAgICAgICAgICAgIGRkOiBbJ2RhbicsICdkYW5hJywgJ2RhbmEnXSxcbiAgICAgICAgICAgIE1NOiBbJ21qZXNlYycsICdtamVzZWNhJywgJ21qZXNlY2knXSxcbiAgICAgICAgICAgIHl5OiBbJ2dvZGluYScsICdnb2RpbmUnLCAnZ29kaW5hJ10sXG4gICAgICAgIH0sXG4gICAgICAgIGNvcnJlY3RHcmFtbWF0aWNhbENhc2U6IGZ1bmN0aW9uIChudW1iZXIsIHdvcmRLZXkpIHtcbiAgICAgICAgICAgIHJldHVybiBudW1iZXIgPT09IDFcbiAgICAgICAgICAgICAgICA/IHdvcmRLZXlbMF1cbiAgICAgICAgICAgICAgICA6IG51bWJlciA+PSAyICYmIG51bWJlciA8PSA0XG4gICAgICAgICAgICAgICAgICA/IHdvcmRLZXlbMV1cbiAgICAgICAgICAgICAgICAgIDogd29yZEtleVsyXTtcbiAgICAgICAgfSxcbiAgICAgICAgdHJhbnNsYXRlOiBmdW5jdGlvbiAobnVtYmVyLCB3aXRob3V0U3VmZml4LCBrZXkpIHtcbiAgICAgICAgICAgIHZhciB3b3JkS2V5ID0gdHJhbnNsYXRvci53b3Jkc1trZXldO1xuICAgICAgICAgICAgaWYgKGtleS5sZW5ndGggPT09IDEpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gd2l0aG91dFN1ZmZpeCA/IHdvcmRLZXlbMF0gOiB3b3JkS2V5WzFdO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgICAgICAgICBudW1iZXIgK1xuICAgICAgICAgICAgICAgICAgICAnICcgK1xuICAgICAgICAgICAgICAgICAgICB0cmFuc2xhdG9yLmNvcnJlY3RHcmFtbWF0aWNhbENhc2UobnVtYmVyLCB3b3JkS2V5KVxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgfTtcblxuICAgIHZhciBtZSA9IG1vbWVudC5kZWZpbmVMb2NhbGUoJ21lJywge1xuICAgICAgICBtb250aHM6ICdqYW51YXJfZmVicnVhcl9tYXJ0X2FwcmlsX21hal9qdW5fanVsX2F2Z3VzdF9zZXB0ZW1iYXJfb2t0b2Jhcl9ub3ZlbWJhcl9kZWNlbWJhcicuc3BsaXQoXG4gICAgICAgICAgICAnXydcbiAgICAgICAgKSxcbiAgICAgICAgbW9udGhzU2hvcnQ6XG4gICAgICAgICAgICAnamFuLl9mZWIuX21hci5fYXByLl9tYWpfanVuX2p1bF9hdmcuX3NlcC5fb2t0Ll9ub3YuX2RlYy4nLnNwbGl0KCdfJyksXG4gICAgICAgIG1vbnRoc1BhcnNlRXhhY3Q6IHRydWUsXG4gICAgICAgIHdlZWtkYXlzOiAnbmVkamVsamFfcG9uZWRqZWxqYWtfdXRvcmFrX3NyaWplZGFfxI1ldHZydGFrX3BldGFrX3N1Ym90YScuc3BsaXQoXG4gICAgICAgICAgICAnXydcbiAgICAgICAgKSxcbiAgICAgICAgd2Vla2RheXNTaG9ydDogJ25lZC5fcG9uLl91dG8uX3NyaS5fxI1ldC5fcGV0Ll9zdWIuJy5zcGxpdCgnXycpLFxuICAgICAgICB3ZWVrZGF5c01pbjogJ25lX3BvX3V0X3NyX8SNZV9wZV9zdScuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXNQYXJzZUV4YWN0OiB0cnVlLFxuICAgICAgICBsb25nRGF0ZUZvcm1hdDoge1xuICAgICAgICAgICAgTFQ6ICdIOm1tJyxcbiAgICAgICAgICAgIExUUzogJ0g6bW06c3MnLFxuICAgICAgICAgICAgTDogJ0RELk1NLllZWVknLFxuICAgICAgICAgICAgTEw6ICdELiBNTU1NIFlZWVknLFxuICAgICAgICAgICAgTExMOiAnRC4gTU1NTSBZWVlZIEg6bW0nLFxuICAgICAgICAgICAgTExMTDogJ2RkZGQsIEQuIE1NTU0gWVlZWSBIOm1tJyxcbiAgICAgICAgfSxcbiAgICAgICAgY2FsZW5kYXI6IHtcbiAgICAgICAgICAgIHNhbWVEYXk6ICdbZGFuYXMgdV0gTFQnLFxuICAgICAgICAgICAgbmV4dERheTogJ1tzanV0cmEgdV0gTFQnLFxuXG4gICAgICAgICAgICBuZXh0V2VlazogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIHN3aXRjaCAodGhpcy5kYXkoKSkge1xuICAgICAgICAgICAgICAgICAgICBjYXNlIDA6XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gJ1t1XSBbbmVkamVsanVdIFt1XSBMVCc7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgMzpcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAnW3VdIFtzcmlqZWR1XSBbdV0gTFQnO1xuICAgICAgICAgICAgICAgICAgICBjYXNlIDY6XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gJ1t1XSBbc3Vib3R1XSBbdV0gTFQnO1xuICAgICAgICAgICAgICAgICAgICBjYXNlIDE6XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgMjpcbiAgICAgICAgICAgICAgICAgICAgY2FzZSA0OlxuICAgICAgICAgICAgICAgICAgICBjYXNlIDU6XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gJ1t1XSBkZGRkIFt1XSBMVCc7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGxhc3REYXk6ICdbanXEjWUgdV0gTFQnLFxuICAgICAgICAgICAgbGFzdFdlZWs6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICB2YXIgbGFzdFdlZWtEYXlzID0gW1xuICAgICAgICAgICAgICAgICAgICAnW3Byb8WhbGVdIFtuZWRqZWxqZV0gW3VdIExUJyxcbiAgICAgICAgICAgICAgICAgICAgJ1twcm/FoWxvZ10gW3BvbmVkamVsamthXSBbdV0gTFQnLFxuICAgICAgICAgICAgICAgICAgICAnW3Byb8WhbG9nXSBbdXRvcmthXSBbdV0gTFQnLFxuICAgICAgICAgICAgICAgICAgICAnW3Byb8WhbGVdIFtzcmlqZWRlXSBbdV0gTFQnLFxuICAgICAgICAgICAgICAgICAgICAnW3Byb8WhbG9nXSBbxI1ldHZydGthXSBbdV0gTFQnLFxuICAgICAgICAgICAgICAgICAgICAnW3Byb8WhbG9nXSBbcGV0a2FdIFt1XSBMVCcsXG4gICAgICAgICAgICAgICAgICAgICdbcHJvxaFsZV0gW3N1Ym90ZV0gW3VdIExUJyxcbiAgICAgICAgICAgICAgICBdO1xuICAgICAgICAgICAgICAgIHJldHVybiBsYXN0V2Vla0RheXNbdGhpcy5kYXkoKV07XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgc2FtZUVsc2U6ICdMJyxcbiAgICAgICAgfSxcbiAgICAgICAgcmVsYXRpdmVUaW1lOiB7XG4gICAgICAgICAgICBmdXR1cmU6ICd6YSAlcycsXG4gICAgICAgICAgICBwYXN0OiAncHJpamUgJXMnLFxuICAgICAgICAgICAgczogJ25la29saWtvIHNla3VuZGknLFxuICAgICAgICAgICAgc3M6IHRyYW5zbGF0b3IudHJhbnNsYXRlLFxuICAgICAgICAgICAgbTogdHJhbnNsYXRvci50cmFuc2xhdGUsXG4gICAgICAgICAgICBtbTogdHJhbnNsYXRvci50cmFuc2xhdGUsXG4gICAgICAgICAgICBoOiB0cmFuc2xhdG9yLnRyYW5zbGF0ZSxcbiAgICAgICAgICAgIGhoOiB0cmFuc2xhdG9yLnRyYW5zbGF0ZSxcbiAgICAgICAgICAgIGQ6ICdkYW4nLFxuICAgICAgICAgICAgZGQ6IHRyYW5zbGF0b3IudHJhbnNsYXRlLFxuICAgICAgICAgICAgTTogJ21qZXNlYycsXG4gICAgICAgICAgICBNTTogdHJhbnNsYXRvci50cmFuc2xhdGUsXG4gICAgICAgICAgICB5OiAnZ29kaW51JyxcbiAgICAgICAgICAgIHl5OiB0cmFuc2xhdG9yLnRyYW5zbGF0ZSxcbiAgICAgICAgfSxcbiAgICAgICAgZGF5T2ZNb250aE9yZGluYWxQYXJzZTogL1xcZHsxLDJ9XFwuLyxcbiAgICAgICAgb3JkaW5hbDogJyVkLicsXG4gICAgICAgIHdlZWs6IHtcbiAgICAgICAgICAgIGRvdzogMSwgLy8gTW9uZGF5IGlzIHRoZSBmaXJzdCBkYXkgb2YgdGhlIHdlZWsuXG4gICAgICAgICAgICBkb3k6IDcsIC8vIFRoZSB3ZWVrIHRoYXQgY29udGFpbnMgSmFuIDd0aCBpcyB0aGUgZmlyc3Qgd2VlayBvZiB0aGUgeWVhci5cbiAgICAgICAgfSxcbiAgICB9KTtcblxuICAgIHJldHVybiBtZTtcblxufSkpKTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///58076\n")},58124:function(module,exports,__webpack_require__){eval(";(function (root, factory, undef) {\n\tif (true) {\n\t\t// CommonJS\n\t\tmodule.exports = exports = factory(__webpack_require__(19021), __webpack_require__(57165));\n\t}\n\telse {}\n}(this, function (CryptoJS) {\n\n\t/**\n\t * A noop padding strategy.\n\t */\n\tCryptoJS.pad.NoPadding = {\n\t pad: function () {\n\t },\n\n\t unpad: function () {\n\t }\n\t};\n\n\n\treturn CryptoJS.pad.NoPadding;\n\n}));//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNTgxMjQuanMiLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBUUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL2l0Zy1uZXh0Z2VuLWZyb250ZW5kLy4vbm9kZV9tb2R1bGVzL2NyeXB0by1qcy9wYWQtbm9wYWRkaW5nLmpzP2I4NmMiXSwic291cmNlc0NvbnRlbnQiOlsiOyhmdW5jdGlvbiAocm9vdCwgZmFjdG9yeSwgdW5kZWYpIHtcblx0aWYgKHR5cGVvZiBleHBvcnRzID09PSBcIm9iamVjdFwiKSB7XG5cdFx0Ly8gQ29tbW9uSlNcblx0XHRtb2R1bGUuZXhwb3J0cyA9IGV4cG9ydHMgPSBmYWN0b3J5KHJlcXVpcmUoXCIuL2NvcmVcIiksIHJlcXVpcmUoXCIuL2NpcGhlci1jb3JlXCIpKTtcblx0fVxuXHRlbHNlIGlmICh0eXBlb2YgZGVmaW5lID09PSBcImZ1bmN0aW9uXCIgJiYgZGVmaW5lLmFtZCkge1xuXHRcdC8vIEFNRFxuXHRcdGRlZmluZShbXCIuL2NvcmVcIiwgXCIuL2NpcGhlci1jb3JlXCJdLCBmYWN0b3J5KTtcblx0fVxuXHRlbHNlIHtcblx0XHQvLyBHbG9iYWwgKGJyb3dzZXIpXG5cdFx0ZmFjdG9yeShyb290LkNyeXB0b0pTKTtcblx0fVxufSh0aGlzLCBmdW5jdGlvbiAoQ3J5cHRvSlMpIHtcblxuXHQvKipcblx0ICogQSBub29wIHBhZGRpbmcgc3RyYXRlZ3kuXG5cdCAqL1xuXHRDcnlwdG9KUy5wYWQuTm9QYWRkaW5nID0ge1xuXHQgICAgcGFkOiBmdW5jdGlvbiAoKSB7XG5cdCAgICB9LFxuXG5cdCAgICB1bnBhZDogZnVuY3Rpb24gKCkge1xuXHQgICAgfVxuXHR9O1xuXG5cblx0cmV0dXJuIENyeXB0b0pTLnBhZC5Ob1BhZGRpbmc7XG5cbn0pKTsiXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///58124\n")},58168:(__unused_webpack___webpack_module__,__webpack_exports__,__webpack_require__)=>{"use strict";eval("/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ A: () => (/* binding */ _extends)\n/* harmony export */ });\nfunction _extends() {\n return _extends = Object.assign ? Object.assign.bind() : function (n) {\n for (var e = 1; e < arguments.length; e++) {\n var t = arguments[e];\n for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]);\n }\n return n;\n }, _extends.apply(null, arguments);\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNTgxNjguanMiLCJtYXBwaW5ncyI6Ijs7O0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vaXRnLW5leHRnZW4tZnJvbnRlbmQvLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vZXh0ZW5kcy5qcz8wZDA3Il0sInNvdXJjZXNDb250ZW50IjpbImZ1bmN0aW9uIF9leHRlbmRzKCkge1xuICByZXR1cm4gX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAobikge1xuICAgIGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7XG4gICAgICB2YXIgdCA9IGFyZ3VtZW50c1tlXTtcbiAgICAgIGZvciAodmFyIHIgaW4gdCkgKHt9KS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIHIpICYmIChuW3JdID0gdFtyXSk7XG4gICAgfVxuICAgIHJldHVybiBuO1xuICB9LCBfZXh0ZW5kcy5hcHBseShudWxsLCBhcmd1bWVudHMpO1xufVxuZXhwb3J0IHsgX2V4dGVuZHMgYXMgZGVmYXVsdCB9OyJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///58168\n")},58243:(I,g,t)=>{"use strict";I.exports=t.p+"fadddb09cfe22d5d2cd3.png"},58347:(I,g,t)=>{"use strict";I.exports=t.p+"867798e13c7baca00b6d.png"},58581:(I,g,t)=>{"use strict";I.exports=t.p+"1d5c83b9f70b169f6522.png"},58676:function(__unused_webpack_module,__unused_webpack_exports,__webpack_require__){eval("//! moment.js locale configuration\n//! locale : Arabic (Kuwait) [ar-kw]\n//! author : Nusret Parlak: https://github.com/nusretparlak\n\n;(function (global, factory) {\n true ? factory(__webpack_require__(95093)) :\n 0\n}(this, (function (moment) { 'use strict';\n\n //! moment.js locale configuration\n\n var arKw = moment.defineLocale('ar-kw', {\n months: 'يناير_فبراير_مارس_أبريل_ماي_يونيو_يوليوز_غشت_شتنبر_أكتوبر_نونبر_دجنبر'.split(\n '_'\n ),\n monthsShort:\n 'يناير_فبراير_مارس_أبريل_ماي_يونيو_يوليوز_غشت_شتنبر_أكتوبر_نونبر_دجنبر'.split(\n '_'\n ),\n weekdays: 'الأحد_الإتنين_الثلاثاء_الأربعاء_الخميس_الجمعة_السبت'.split('_'),\n weekdaysShort: 'احد_اتنين_ثلاثاء_اربعاء_خميس_جمعة_سبت'.split('_'),\n weekdaysMin: 'ح_ن_ث_ر_خ_ج_س'.split('_'),\n weekdaysParseExact: true,\n longDateFormat: {\n LT: 'HH:mm',\n LTS: 'HH:mm:ss',\n L: 'DD/MM/YYYY',\n LL: 'D MMMM YYYY',\n LLL: 'D MMMM YYYY HH:mm',\n LLLL: 'dddd D MMMM YYYY HH:mm',\n },\n calendar: {\n sameDay: '[اليوم على الساعة] LT',\n nextDay: '[غدا على الساعة] LT',\n nextWeek: 'dddd [على الساعة] LT',\n lastDay: '[أمس على الساعة] LT',\n lastWeek: 'dddd [على الساعة] LT',\n sameElse: 'L',\n },\n relativeTime: {\n future: 'في %s',\n past: 'منذ %s',\n s: 'ثوان',\n ss: '%d ثانية',\n m: 'دقيقة',\n mm: '%d دقائق',\n h: 'ساعة',\n hh: '%d ساعات',\n d: 'يوم',\n dd: '%d أيام',\n M: 'شهر',\n MM: '%d أشهر',\n y: 'سنة',\n yy: '%d سنوات',\n },\n week: {\n dow: 0, // Sunday is the first day of the week.\n doy: 12, // The week that contains Jan 12th is the first week of the year.\n },\n });\n\n return arKw;\n\n})));\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNTg2NzYuanMiLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9pdGctbmV4dGdlbi1mcm9udGVuZC8uL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL2FyLWt3LmpzPzQyM2UiXSwic291cmNlc0NvbnRlbnQiOlsiLy8hIG1vbWVudC5qcyBsb2NhbGUgY29uZmlndXJhdGlvblxuLy8hIGxvY2FsZSA6IEFyYWJpYyAoS3V3YWl0KSBbYXIta3ddXG4vLyEgYXV0aG9yIDogTnVzcmV0IFBhcmxhazogaHR0cHM6Ly9naXRodWIuY29tL251c3JldHBhcmxha1xuXG47KGZ1bmN0aW9uIChnbG9iYWwsIGZhY3RvcnkpIHtcbiAgIHR5cGVvZiBleHBvcnRzID09PSAnb2JqZWN0JyAmJiB0eXBlb2YgbW9kdWxlICE9PSAndW5kZWZpbmVkJ1xuICAgICAgICYmIHR5cGVvZiByZXF1aXJlID09PSAnZnVuY3Rpb24nID8gZmFjdG9yeShyZXF1aXJlKCcuLi9tb21lbnQnKSkgOlxuICAgdHlwZW9mIGRlZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiBkZWZpbmUuYW1kID8gZGVmaW5lKFsnLi4vbW9tZW50J10sIGZhY3RvcnkpIDpcbiAgIGZhY3RvcnkoZ2xvYmFsLm1vbWVudClcbn0odGhpcywgKGZ1bmN0aW9uIChtb21lbnQpIHsgJ3VzZSBzdHJpY3QnO1xuXG4gICAgLy8hIG1vbWVudC5qcyBsb2NhbGUgY29uZmlndXJhdGlvblxuXG4gICAgdmFyIGFyS3cgPSBtb21lbnQuZGVmaW5lTG9jYWxlKCdhci1rdycsIHtcbiAgICAgICAgbW9udGhzOiAn2YrZhtin2YrYsV/Zgdio2LHYp9mK2LFf2YXYp9ix2LNf2KPYqNix2YrZhF/Zhdin2Ypf2YrZiNmG2YrZiF/ZitmI2YTZitmI2LJf2LrYtNiqX9i02KrZhtio2LFf2KPZg9iq2YjYqNixX9mG2YjZhtio2LFf2K/YrNmG2KjYsScuc3BsaXQoXG4gICAgICAgICAgICAnXydcbiAgICAgICAgKSxcbiAgICAgICAgbW9udGhzU2hvcnQ6XG4gICAgICAgICAgICAn2YrZhtin2YrYsV/Zgdio2LHYp9mK2LFf2YXYp9ix2LNf2KPYqNix2YrZhF/Zhdin2Ypf2YrZiNmG2YrZiF/ZitmI2YTZitmI2LJf2LrYtNiqX9i02KrZhtio2LFf2KPZg9iq2YjYqNixX9mG2YjZhtio2LFf2K/YrNmG2KjYsScuc3BsaXQoXG4gICAgICAgICAgICAgICAgJ18nXG4gICAgICAgICAgICApLFxuICAgICAgICB3ZWVrZGF5czogJ9in2YTYo9it2K9f2KfZhNil2KrZhtmK2YZf2KfZhNir2YTYp9ir2KfYoV/Yp9mE2KPYsdio2LnYp9ihX9in2YTYrtmF2YrYs1/Yp9mE2KzZhdi52Klf2KfZhNiz2KjYqicuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXNTaG9ydDogJ9in2K3Yr1/Yp9iq2YbZitmGX9ir2YTYp9ir2KfYoV/Yp9ix2KjYudin2KFf2K7ZhdmK2LNf2KzZhdi52Klf2LPYqNiqJy5zcGxpdCgnXycpLFxuICAgICAgICB3ZWVrZGF5c01pbjogJ9itX9mGX9irX9ixX9iuX9isX9izJy5zcGxpdCgnXycpLFxuICAgICAgICB3ZWVrZGF5c1BhcnNlRXhhY3Q6IHRydWUsXG4gICAgICAgIGxvbmdEYXRlRm9ybWF0OiB7XG4gICAgICAgICAgICBMVDogJ0hIOm1tJyxcbiAgICAgICAgICAgIExUUzogJ0hIOm1tOnNzJyxcbiAgICAgICAgICAgIEw6ICdERC9NTS9ZWVlZJyxcbiAgICAgICAgICAgIExMOiAnRCBNTU1NIFlZWVknLFxuICAgICAgICAgICAgTExMOiAnRCBNTU1NIFlZWVkgSEg6bW0nLFxuICAgICAgICAgICAgTExMTDogJ2RkZGQgRCBNTU1NIFlZWVkgSEg6bW0nLFxuICAgICAgICB9LFxuICAgICAgICBjYWxlbmRhcjoge1xuICAgICAgICAgICAgc2FtZURheTogJ1vYp9mE2YrZiNmFINi52YTZiSDYp9mE2LPYp9i52KldIExUJyxcbiAgICAgICAgICAgIG5leHREYXk6ICdb2LrYr9inINi52YTZiSDYp9mE2LPYp9i52KldIExUJyxcbiAgICAgICAgICAgIG5leHRXZWVrOiAnZGRkZCBb2LnZhNmJINin2YTYs9in2LnYqV0gTFQnLFxuICAgICAgICAgICAgbGFzdERheTogJ1vYo9mF2LMg2LnZhNmJINin2YTYs9in2LnYqV0gTFQnLFxuICAgICAgICAgICAgbGFzdFdlZWs6ICdkZGRkIFvYudmE2Ykg2KfZhNiz2KfYudipXSBMVCcsXG4gICAgICAgICAgICBzYW1lRWxzZTogJ0wnLFxuICAgICAgICB9LFxuICAgICAgICByZWxhdGl2ZVRpbWU6IHtcbiAgICAgICAgICAgIGZ1dHVyZTogJ9mB2YogJXMnLFxuICAgICAgICAgICAgcGFzdDogJ9mF2YbYsCAlcycsXG4gICAgICAgICAgICBzOiAn2KvZiNin2YYnLFxuICAgICAgICAgICAgc3M6ICclZCDYq9in2YbZitipJyxcbiAgICAgICAgICAgIG06ICfYr9mC2YrZgtipJyxcbiAgICAgICAgICAgIG1tOiAnJWQg2K/Zgtin2KbZgicsXG4gICAgICAgICAgICBoOiAn2LPYp9i52KknLFxuICAgICAgICAgICAgaGg6ICclZCDYs9in2LnYp9iqJyxcbiAgICAgICAgICAgIGQ6ICfZitmI2YUnLFxuICAgICAgICAgICAgZGQ6ICclZCDYo9mK2KfZhScsXG4gICAgICAgICAgICBNOiAn2LTZh9ixJyxcbiAgICAgICAgICAgIE1NOiAnJWQg2KPYtNmH2LEnLFxuICAgICAgICAgICAgeTogJ9iz2YbYqScsXG4gICAgICAgICAgICB5eTogJyVkINiz2YbZiNin2KonLFxuICAgICAgICB9LFxuICAgICAgICB3ZWVrOiB7XG4gICAgICAgICAgICBkb3c6IDAsIC8vIFN1bmRheSBpcyB0aGUgZmlyc3QgZGF5IG9mIHRoZSB3ZWVrLlxuICAgICAgICAgICAgZG95OiAxMiwgLy8gVGhlIHdlZWsgdGhhdCBjb250YWlucyBKYW4gMTJ0aCBpcyB0aGUgZmlyc3Qgd2VlayBvZiB0aGUgeWVhci5cbiAgICAgICAgfSxcbiAgICB9KTtcblxuICAgIHJldHVybiBhckt3O1xuXG59KSkpO1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///58676\n")},58845:(I,g,t)=>{"use strict";I.exports=t.p+"6851a20a5501974d9ee4.png"},59297:(I,g,t)=>{"use strict";I.exports=t.p+"7f1c40a2958c6e197678.png"},59407:(I,g,t)=>{"use strict";I.exports=t.p+"37a0828954a7e8440f33.png"},59527:function(__unused_webpack_module,__unused_webpack_exports,__webpack_require__){eval("//! moment.js locale configuration\n//! locale : Turkmen [tk]\n//! author : Atamyrat Abdyrahmanov : https://github.com/atamyratabdy\n\n;(function (global, factory) {\n true ? factory(__webpack_require__(95093)) :\n 0\n}(this, (function (moment) { 'use strict';\n\n //! moment.js locale configuration\n\n var suffixes = {\n 1: \"'inji\",\n 5: \"'inji\",\n 8: \"'inji\",\n 70: \"'inji\",\n 80: \"'inji\",\n 2: \"'nji\",\n 7: \"'nji\",\n 20: \"'nji\",\n 50: \"'nji\",\n 3: \"'ünji\",\n 4: \"'ünji\",\n 100: \"'ünji\",\n 6: \"'njy\",\n 9: \"'unjy\",\n 10: \"'unjy\",\n 30: \"'unjy\",\n 60: \"'ynjy\",\n 90: \"'ynjy\",\n };\n\n var tk = moment.defineLocale('tk', {\n months: 'Ýanwar_Fewral_Mart_Aprel_Maý_Iýun_Iýul_Awgust_Sentýabr_Oktýabr_Noýabr_Dekabr'.split(\n '_'\n ),\n monthsShort: 'Ýan_Few_Mar_Apr_Maý_Iýn_Iýl_Awg_Sen_Okt_Noý_Dek'.split('_'),\n weekdays: 'Ýekşenbe_Duşenbe_Sişenbe_Çarşenbe_Penşenbe_Anna_Şenbe'.split(\n '_'\n ),\n weekdaysShort: 'Ýek_Duş_Siş_Çar_Pen_Ann_Şen'.split('_'),\n weekdaysMin: 'Ýk_Dş_Sş_Çr_Pn_An_Şn'.split('_'),\n longDateFormat: {\n LT: 'HH:mm',\n LTS: 'HH:mm:ss',\n L: 'DD.MM.YYYY',\n LL: 'D MMMM YYYY',\n LLL: 'D MMMM YYYY HH:mm',\n LLLL: 'dddd, D MMMM YYYY HH:mm',\n },\n calendar: {\n sameDay: '[bugün sagat] LT',\n nextDay: '[ertir sagat] LT',\n nextWeek: '[indiki] dddd [sagat] LT',\n lastDay: '[düýn] LT',\n lastWeek: '[geçen] dddd [sagat] LT',\n sameElse: 'L',\n },\n relativeTime: {\n future: '%s soň',\n past: '%s öň',\n s: 'birnäçe sekunt',\n m: 'bir minut',\n mm: '%d minut',\n h: 'bir sagat',\n hh: '%d sagat',\n d: 'bir gün',\n dd: '%d gün',\n M: 'bir aý',\n MM: '%d aý',\n y: 'bir ýyl',\n yy: '%d ýyl',\n },\n ordinal: function (number, period) {\n switch (period) {\n case 'd':\n case 'D':\n case 'Do':\n case 'DD':\n return number;\n default:\n if (number === 0) {\n // special case for zero\n return number + \"'unjy\";\n }\n var a = number % 10,\n b = (number % 100) - a,\n c = number >= 100 ? 100 : null;\n return number + (suffixes[a] || suffixes[b] || suffixes[c]);\n }\n },\n week: {\n dow: 1, // Monday is the first day of the week.\n doy: 7, // The week that contains Jan 7th is the first week of the year.\n },\n });\n\n return tk;\n\n})));\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNTk1MjcuanMiLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9pdGctbmV4dGdlbi1mcm9udGVuZC8uL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL3RrLmpzPzVhZmYiXSwic291cmNlc0NvbnRlbnQiOlsiLy8hIG1vbWVudC5qcyBsb2NhbGUgY29uZmlndXJhdGlvblxuLy8hIGxvY2FsZSA6IFR1cmttZW4gW3RrXVxuLy8hIGF1dGhvciA6IEF0YW15cmF0IEFiZHlyYWhtYW5vdiA6IGh0dHBzOi8vZ2l0aHViLmNvbS9hdGFteXJhdGFiZHlcblxuOyhmdW5jdGlvbiAoZ2xvYmFsLCBmYWN0b3J5KSB7XG4gICB0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcgJiYgdHlwZW9mIG1vZHVsZSAhPT0gJ3VuZGVmaW5lZCdcbiAgICAgICAmJiB0eXBlb2YgcmVxdWlyZSA9PT0gJ2Z1bmN0aW9uJyA/IGZhY3RvcnkocmVxdWlyZSgnLi4vbW9tZW50JykpIDpcbiAgIHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgZGVmaW5lLmFtZCA/IGRlZmluZShbJy4uL21vbWVudCddLCBmYWN0b3J5KSA6XG4gICBmYWN0b3J5KGdsb2JhbC5tb21lbnQpXG59KHRoaXMsIChmdW5jdGlvbiAobW9tZW50KSB7ICd1c2Ugc3RyaWN0JztcblxuICAgIC8vISBtb21lbnQuanMgbG9jYWxlIGNvbmZpZ3VyYXRpb25cblxuICAgIHZhciBzdWZmaXhlcyA9IHtcbiAgICAgICAgMTogXCInaW5qaVwiLFxuICAgICAgICA1OiBcIidpbmppXCIsXG4gICAgICAgIDg6IFwiJ2luamlcIixcbiAgICAgICAgNzA6IFwiJ2luamlcIixcbiAgICAgICAgODA6IFwiJ2luamlcIixcbiAgICAgICAgMjogXCInbmppXCIsXG4gICAgICAgIDc6IFwiJ25qaVwiLFxuICAgICAgICAyMDogXCInbmppXCIsXG4gICAgICAgIDUwOiBcIiduamlcIixcbiAgICAgICAgMzogXCInw7xuamlcIixcbiAgICAgICAgNDogXCInw7xuamlcIixcbiAgICAgICAgMTAwOiBcIifDvG5qaVwiLFxuICAgICAgICA2OiBcIiduanlcIixcbiAgICAgICAgOTogXCIndW5qeVwiLFxuICAgICAgICAxMDogXCIndW5qeVwiLFxuICAgICAgICAzMDogXCIndW5qeVwiLFxuICAgICAgICA2MDogXCIneW5qeVwiLFxuICAgICAgICA5MDogXCIneW5qeVwiLFxuICAgIH07XG5cbiAgICB2YXIgdGsgPSBtb21lbnQuZGVmaW5lTG9jYWxlKCd0aycsIHtcbiAgICAgICAgbW9udGhzOiAnw51hbndhcl9GZXdyYWxfTWFydF9BcHJlbF9NYcO9X0nDvXVuX0nDvXVsX0F3Z3VzdF9TZW50w71hYnJfT2t0w71hYnJfTm/DvWFicl9EZWthYnInLnNwbGl0KFxuICAgICAgICAgICAgJ18nXG4gICAgICAgICksXG4gICAgICAgIG1vbnRoc1Nob3J0OiAnw51hbl9GZXdfTWFyX0Fwcl9NYcO9X0nDvW5fScO9bF9Bd2dfU2VuX09rdF9Ob8O9X0Rlaycuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXM6ICfDnWVrxZ9lbmJlX0R1xZ9lbmJlX1NpxZ9lbmJlX8OHYXLFn2VuYmVfUGVuxZ9lbmJlX0FubmFfxZ5lbmJlJy5zcGxpdChcbiAgICAgICAgICAgICdfJ1xuICAgICAgICApLFxuICAgICAgICB3ZWVrZGF5c1Nob3J0OiAnw51la19EdcWfX1NpxZ9fw4dhcl9QZW5fQW5uX8WeZW4nLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzTWluOiAnw51rX0TFn19TxZ9fw4dyX1BuX0FuX8Webicuc3BsaXQoJ18nKSxcbiAgICAgICAgbG9uZ0RhdGVGb3JtYXQ6IHtcbiAgICAgICAgICAgIExUOiAnSEg6bW0nLFxuICAgICAgICAgICAgTFRTOiAnSEg6bW06c3MnLFxuICAgICAgICAgICAgTDogJ0RELk1NLllZWVknLFxuICAgICAgICAgICAgTEw6ICdEIE1NTU0gWVlZWScsXG4gICAgICAgICAgICBMTEw6ICdEIE1NTU0gWVlZWSBISDptbScsXG4gICAgICAgICAgICBMTExMOiAnZGRkZCwgRCBNTU1NIFlZWVkgSEg6bW0nLFxuICAgICAgICB9LFxuICAgICAgICBjYWxlbmRhcjoge1xuICAgICAgICAgICAgc2FtZURheTogJ1tidWfDvG4gc2FnYXRdIExUJyxcbiAgICAgICAgICAgIG5leHREYXk6ICdbZXJ0aXIgc2FnYXRdIExUJyxcbiAgICAgICAgICAgIG5leHRXZWVrOiAnW2luZGlraV0gZGRkZCBbc2FnYXRdIExUJyxcbiAgICAgICAgICAgIGxhc3REYXk6ICdbZMO8w71uXSBMVCcsXG4gICAgICAgICAgICBsYXN0V2VlazogJ1tnZcOnZW5dIGRkZGQgW3NhZ2F0XSBMVCcsXG4gICAgICAgICAgICBzYW1lRWxzZTogJ0wnLFxuICAgICAgICB9LFxuICAgICAgICByZWxhdGl2ZVRpbWU6IHtcbiAgICAgICAgICAgIGZ1dHVyZTogJyVzIHNvxYgnLFxuICAgICAgICAgICAgcGFzdDogJyVzIMO2xYgnLFxuICAgICAgICAgICAgczogJ2Jpcm7DpMOnZSBzZWt1bnQnLFxuICAgICAgICAgICAgbTogJ2JpciBtaW51dCcsXG4gICAgICAgICAgICBtbTogJyVkIG1pbnV0JyxcbiAgICAgICAgICAgIGg6ICdiaXIgc2FnYXQnLFxuICAgICAgICAgICAgaGg6ICclZCBzYWdhdCcsXG4gICAgICAgICAgICBkOiAnYmlyIGfDvG4nLFxuICAgICAgICAgICAgZGQ6ICclZCBnw7xuJyxcbiAgICAgICAgICAgIE06ICdiaXIgYcO9JyxcbiAgICAgICAgICAgIE1NOiAnJWQgYcO9JyxcbiAgICAgICAgICAgIHk6ICdiaXIgw715bCcsXG4gICAgICAgICAgICB5eTogJyVkIMO9eWwnLFxuICAgICAgICB9LFxuICAgICAgICBvcmRpbmFsOiBmdW5jdGlvbiAobnVtYmVyLCBwZXJpb2QpIHtcbiAgICAgICAgICAgIHN3aXRjaCAocGVyaW9kKSB7XG4gICAgICAgICAgICAgICAgY2FzZSAnZCc6XG4gICAgICAgICAgICAgICAgY2FzZSAnRCc6XG4gICAgICAgICAgICAgICAgY2FzZSAnRG8nOlxuICAgICAgICAgICAgICAgIGNhc2UgJ0REJzpcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG51bWJlcjtcbiAgICAgICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgICAgICBpZiAobnVtYmVyID09PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBzcGVjaWFsIGNhc2UgZm9yIHplcm9cbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBudW1iZXIgKyBcIid1bmp5XCI7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgdmFyIGEgPSBudW1iZXIgJSAxMCxcbiAgICAgICAgICAgICAgICAgICAgICAgIGIgPSAobnVtYmVyICUgMTAwKSAtIGEsXG4gICAgICAgICAgICAgICAgICAgICAgICBjID0gbnVtYmVyID49IDEwMCA/IDEwMCA6IG51bGw7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBudW1iZXIgKyAoc3VmZml4ZXNbYV0gfHwgc3VmZml4ZXNbYl0gfHwgc3VmZml4ZXNbY10pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICB3ZWVrOiB7XG4gICAgICAgICAgICBkb3c6IDEsIC8vIE1vbmRheSBpcyB0aGUgZmlyc3QgZGF5IG9mIHRoZSB3ZWVrLlxuICAgICAgICAgICAgZG95OiA3LCAvLyBUaGUgd2VlayB0aGF0IGNvbnRhaW5zIEphbiA3dGggaXMgdGhlIGZpcnN0IHdlZWsgb2YgdGhlIHllYXIuXG4gICAgICAgIH0sXG4gICAgfSk7XG5cbiAgICByZXR1cm4gdGs7XG5cbn0pKSk7XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///59527\n")},59896:(I,g,t)=>{"use strict";I.exports=t.p+"a2d377fe2b7333d422bf.png"},59947:(I,g,t)=>{"use strict";I.exports=t.p+"8b0b26a7923fcdc51fea.png"},60124:(I,g,t)=>{"use strict";I.exports=t.p+"e6b649bdec16e6be6158.png"},60455:(I,g,t)=>{"use strict";I.exports=t.p+"7860a46636044ca4ce49.png"},60708:function(__unused_webpack_module,__unused_webpack_exports,__webpack_require__){eval("//! moment.js locale configuration\n//! locale : Maldivian [dv]\n//! author : Jawish Hameed : https://github.com/jawish\n\n;(function (global, factory) {\n true ? factory(__webpack_require__(95093)) :\n 0\n}(this, (function (moment) { 'use strict';\n\n //! moment.js locale configuration\n\n var months = [\n 'ޖެނުއަރީ',\n 'ފެބްރުއަރީ',\n 'މާރިޗު',\n 'އޭޕްރީލު',\n 'މޭ',\n 'ޖޫން',\n 'ޖުލައި',\n 'އޯގަސްޓު',\n 'ސެޕްޓެމްބަރު',\n 'އޮކްޓޯބަރު',\n 'ނޮވެމްބަރު',\n 'ޑިސެމްބަރު',\n ],\n weekdays = [\n 'އާދިއްތަ',\n 'ހޯމަ',\n 'އަންގާރަ',\n 'ބުދަ',\n 'ބުރާސްފަތި',\n 'ހުކުރު',\n 'ހޮނިހިރު',\n ];\n\n var dv = moment.defineLocale('dv', {\n months: months,\n monthsShort: months,\n weekdays: weekdays,\n weekdaysShort: weekdays,\n weekdaysMin: 'އާދި_ހޯމަ_އަން_ބުދަ_ބުރާ_ހުކު_ހޮނި'.split('_'),\n longDateFormat: {\n LT: 'HH:mm',\n LTS: 'HH:mm:ss',\n L: 'D/M/YYYY',\n LL: 'D MMMM YYYY',\n LLL: 'D MMMM YYYY HH:mm',\n LLLL: 'dddd D MMMM YYYY HH:mm',\n },\n meridiemParse: /މކ|މފ/,\n isPM: function (input) {\n return 'މފ' === input;\n },\n meridiem: function (hour, minute, isLower) {\n if (hour < 12) {\n return 'މކ';\n } else {\n return 'މފ';\n }\n },\n calendar: {\n sameDay: '[މިއަދު] LT',\n nextDay: '[މާދަމާ] LT',\n nextWeek: 'dddd LT',\n lastDay: '[އިއްޔެ] LT',\n lastWeek: '[ފާއިތުވި] dddd LT',\n sameElse: 'L',\n },\n relativeTime: {\n future: 'ތެރޭގައި %s',\n past: 'ކުރިން %s',\n s: 'ސިކުންތުކޮޅެއް',\n ss: 'd% ސިކުންތު',\n m: 'މިނިޓެއް',\n mm: 'މިނިޓު %d',\n h: 'ގަޑިއިރެއް',\n hh: 'ގަޑިއިރު %d',\n d: 'ދުވަހެއް',\n dd: 'ދުވަސް %d',\n M: 'މަހެއް',\n MM: 'މަސް %d',\n y: 'އަހަރެއް',\n yy: 'އަހަރު %d',\n },\n preparse: function (string) {\n return string.replace(/،/g, ',');\n },\n postformat: function (string) {\n return string.replace(/,/g, '،');\n },\n week: {\n dow: 7, // Sunday is the first day of the week.\n doy: 12, // The week that contains Jan 12th is the first week of the year.\n },\n });\n\n return dv;\n\n})));\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNjA3MDguanMiLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vaXRnLW5leHRnZW4tZnJvbnRlbmQvLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9kdi5qcz81OThhIl0sInNvdXJjZXNDb250ZW50IjpbIi8vISBtb21lbnQuanMgbG9jYWxlIGNvbmZpZ3VyYXRpb25cbi8vISBsb2NhbGUgOiBNYWxkaXZpYW4gW2R2XVxuLy8hIGF1dGhvciA6IEphd2lzaCBIYW1lZWQgOiBodHRwczovL2dpdGh1Yi5jb20vamF3aXNoXG5cbjsoZnVuY3Rpb24gKGdsb2JhbCwgZmFjdG9yeSkge1xuICAgdHlwZW9mIGV4cG9ydHMgPT09ICdvYmplY3QnICYmIHR5cGVvZiBtb2R1bGUgIT09ICd1bmRlZmluZWQnXG4gICAgICAgJiYgdHlwZW9mIHJlcXVpcmUgPT09ICdmdW5jdGlvbicgPyBmYWN0b3J5KHJlcXVpcmUoJy4uL21vbWVudCcpKSA6XG4gICB0eXBlb2YgZGVmaW5lID09PSAnZnVuY3Rpb24nICYmIGRlZmluZS5hbWQgPyBkZWZpbmUoWycuLi9tb21lbnQnXSwgZmFjdG9yeSkgOlxuICAgZmFjdG9yeShnbG9iYWwubW9tZW50KVxufSh0aGlzLCAoZnVuY3Rpb24gKG1vbWVudCkgeyAndXNlIHN0cmljdCc7XG5cbiAgICAvLyEgbW9tZW50LmpzIGxvY2FsZSBjb25maWd1cmF0aW9uXG5cbiAgICB2YXIgbW9udGhzID0gW1xuICAgICAgICAgICAgJ96W3qzegt6q3ofept6D3qknLFxuICAgICAgICAgICAgJ96K3qzehN6w3oPeqt6H3qbeg96pJyxcbiAgICAgICAgICAgICfeid6n3oPeqN6X3qonLFxuICAgICAgICAgICAgJ96H3q3eld6w3oPeqd6N3qonLFxuICAgICAgICAgICAgJ96J3q0nLFxuICAgICAgICAgICAgJ96W3qvegt6wJyxcbiAgICAgICAgICAgICfelt6q3o3ept6H3qgnLFxuICAgICAgICAgICAgJ96H3q/ejt6m3pDesN6T3qonLFxuICAgICAgICAgICAgJ96Q3qzeld6w3pPerN6J3rDehN6m3oPeqicsXG4gICAgICAgICAgICAn3ofert6G3rDek96v3oTept6D3qonLFxuICAgICAgICAgICAgJ96C3q7eiN6s3onesN6E3qbeg96qJyxcbiAgICAgICAgICAgICfekd6o3pDerN6J3rDehN6m3oPeqicsXG4gICAgICAgIF0sXG4gICAgICAgIHdlZWtkYXlzID0gW1xuICAgICAgICAgICAgJ96H3qfei96o3ofesN6M3qYnLFxuICAgICAgICAgICAgJ96A3q/eid6mJyxcbiAgICAgICAgICAgICfeh96m3oLesN6O3qfeg96mJyxcbiAgICAgICAgICAgICfehN6q3ovepicsXG4gICAgICAgICAgICAn3oTeqt6D3qfekN6w3orept6M3qgnLFxuICAgICAgICAgICAgJ96A3qreht6q3oPeqicsXG4gICAgICAgICAgICAn3oDert6C3qjegN6o3oPeqicsXG4gICAgICAgIF07XG5cbiAgICB2YXIgZHYgPSBtb21lbnQuZGVmaW5lTG9jYWxlKCdkdicsIHtcbiAgICAgICAgbW9udGhzOiBtb250aHMsXG4gICAgICAgIG1vbnRoc1Nob3J0OiBtb250aHMsXG4gICAgICAgIHdlZWtkYXlzOiB3ZWVrZGF5cyxcbiAgICAgICAgd2Vla2RheXNTaG9ydDogd2Vla2RheXMsXG4gICAgICAgIHdlZWtkYXlzTWluOiAn3ofep96L3qhf3oDer96J3qZf3ofept6C3rBf3oTeqt6L3qZf3oTeqt6D3qdf3oDeqt6G3qpf3oDert6C3qgnLnNwbGl0KCdfJyksXG4gICAgICAgIGxvbmdEYXRlRm9ybWF0OiB7XG4gICAgICAgICAgICBMVDogJ0hIOm1tJyxcbiAgICAgICAgICAgIExUUzogJ0hIOm1tOnNzJyxcbiAgICAgICAgICAgIEw6ICdEL00vWVlZWScsXG4gICAgICAgICAgICBMTDogJ0QgTU1NTSBZWVlZJyxcbiAgICAgICAgICAgIExMTDogJ0QgTU1NTSBZWVlZIEhIOm1tJyxcbiAgICAgICAgICAgIExMTEw6ICdkZGRkIEQgTU1NTSBZWVlZIEhIOm1tJyxcbiAgICAgICAgfSxcbiAgICAgICAgbWVyaWRpZW1QYXJzZTogL96J3oZ83oneii8sXG4gICAgICAgIGlzUE06IGZ1bmN0aW9uIChpbnB1dCkge1xuICAgICAgICAgICAgcmV0dXJuICfeid6KJyA9PT0gaW5wdXQ7XG4gICAgICAgIH0sXG4gICAgICAgIG1lcmlkaWVtOiBmdW5jdGlvbiAoaG91ciwgbWludXRlLCBpc0xvd2VyKSB7XG4gICAgICAgICAgICBpZiAoaG91ciA8IDEyKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuICfeid6GJztcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuICfeid6KJztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgY2FsZW5kYXI6IHtcbiAgICAgICAgICAgIHNhbWVEYXk6ICdb3oneqN6H3qbei96qXSBMVCcsXG4gICAgICAgICAgICBuZXh0RGF5OiAnW96J3qfei96m3onep10gTFQnLFxuICAgICAgICAgICAgbmV4dFdlZWs6ICdkZGRkIExUJyxcbiAgICAgICAgICAgIGxhc3REYXk6ICdb3ofeqN6H3rDelN6sXSBMVCcsXG4gICAgICAgICAgICBsYXN0V2VlazogJ1veit6n3ofeqN6M3qreiN6oXSBkZGRkIExUJyxcbiAgICAgICAgICAgIHNhbWVFbHNlOiAnTCcsXG4gICAgICAgIH0sXG4gICAgICAgIHJlbGF0aXZlVGltZToge1xuICAgICAgICAgICAgZnV0dXJlOiAn3ozerN6D3q3ejt6m3ofeqCAlcycsXG4gICAgICAgICAgICBwYXN0OiAn3obeqt6D3qjegt6wICVzJyxcbiAgICAgICAgICAgIHM6ICfekN6o3obeqt6C3rDejN6q3obert6F3qzeh96wJyxcbiAgICAgICAgICAgIHNzOiAnZCUg3pDeqN6G3qregt6w3ozeqicsXG4gICAgICAgICAgICBtOiAn3oneqN6C3qjek96s3ofesCcsXG4gICAgICAgICAgICBtbTogJ96J3qjegt6o3pPeqiAlZCcsXG4gICAgICAgICAgICBoOiAn3o7ept6R3qjeh96o3oPerN6H3rAnLFxuICAgICAgICAgICAgaGg6ICfejt6m3pHeqN6H3qjeg96qICVkJyxcbiAgICAgICAgICAgIGQ6ICfei96q3ojept6A3qzeh96wJyxcbiAgICAgICAgICAgIGRkOiAn3oveqt6I3qbekN6wICVkJyxcbiAgICAgICAgICAgIE06ICfeid6m3oDerN6H3rAnLFxuICAgICAgICAgICAgTU06ICfeid6m3pDesCAlZCcsXG4gICAgICAgICAgICB5OiAn3ofept6A3qbeg96s3ofesCcsXG4gICAgICAgICAgICB5eTogJ96H3qbegN6m3oPeqiAlZCcsXG4gICAgICAgIH0sXG4gICAgICAgIHByZXBhcnNlOiBmdW5jdGlvbiAoc3RyaW5nKSB7XG4gICAgICAgICAgICByZXR1cm4gc3RyaW5nLnJlcGxhY2UoL9iML2csICcsJyk7XG4gICAgICAgIH0sXG4gICAgICAgIHBvc3Rmb3JtYXQ6IGZ1bmN0aW9uIChzdHJpbmcpIHtcbiAgICAgICAgICAgIHJldHVybiBzdHJpbmcucmVwbGFjZSgvLC9nLCAn2IwnKTtcbiAgICAgICAgfSxcbiAgICAgICAgd2Vlazoge1xuICAgICAgICAgICAgZG93OiA3LCAvLyBTdW5kYXkgaXMgdGhlIGZpcnN0IGRheSBvZiB0aGUgd2Vlay5cbiAgICAgICAgICAgIGRveTogMTIsIC8vIFRoZSB3ZWVrIHRoYXQgY29udGFpbnMgSmFuIDEydGggaXMgdGhlIGZpcnN0IHdlZWsgb2YgdGhlIHllYXIuXG4gICAgICAgIH0sXG4gICAgfSk7XG5cbiAgICByZXR1cm4gZHY7XG5cbn0pKSk7XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///60708\n")},61290:function(__unused_webpack_module,__unused_webpack_exports,__webpack_require__){eval("//! moment.js locale configuration\n//! locale : Bengali [bn]\n//! author : Kaushik Gandhi : https://github.com/kaushikgandhi\n\n;(function (global, factory) {\n true ? factory(__webpack_require__(95093)) :\n 0\n}(this, (function (moment) { 'use strict';\n\n //! moment.js locale configuration\n\n var symbolMap = {\n 1: '১',\n 2: '২',\n 3: '৩',\n 4: '৪',\n 5: '৫',\n 6: '৬',\n 7: '৭',\n 8: '৮',\n 9: '৯',\n 0: '০',\n },\n numberMap = {\n '১': '1',\n '২': '2',\n '৩': '3',\n '৪': '4',\n '৫': '5',\n '৬': '6',\n '৭': '7',\n '৮': '8',\n '৯': '9',\n '০': '0',\n };\n\n var bn = moment.defineLocale('bn', {\n months: 'জানুয়ারি_ফেব্রুয়ারি_মার্চ_এপ্রিল_মে_জুন_জুলাই_আগস্ট_সেপ্টেম্বর_অক্টোবর_নভেম্বর_ডিসেম্বর'.split(\n '_'\n ),\n monthsShort:\n 'জানু_ফেব্রু_মার্চ_এপ্রিল_মে_জুন_জুলাই_আগস্ট_সেপ্ট_অক্টো_নভে_ডিসে'.split(\n '_'\n ),\n weekdays: 'রবিবার_সোমবার_মঙ্গলবার_বুধবার_বৃহস্পতিবার_শুক্রবার_শনিবার'.split(\n '_'\n ),\n weekdaysShort: 'রবি_সোম_মঙ্গল_বুধ_বৃহস্পতি_শুক্র_শনি'.split('_'),\n weekdaysMin: 'রবি_সোম_মঙ্গল_বুধ_বৃহ_শুক্র_শনি'.split('_'),\n longDateFormat: {\n LT: 'A h:mm সময়',\n LTS: 'A h:mm:ss সময়',\n L: 'DD/MM/YYYY',\n LL: 'D MMMM YYYY',\n LLL: 'D MMMM YYYY, A h:mm সময়',\n LLLL: 'dddd, D MMMM YYYY, A h:mm সময়',\n },\n calendar: {\n sameDay: '[আজ] LT',\n nextDay: '[আগামীকাল] LT',\n nextWeek: 'dddd, LT',\n lastDay: '[গতকাল] LT',\n lastWeek: '[গত] dddd, LT',\n sameElse: 'L',\n },\n relativeTime: {\n future: '%s পরে',\n past: '%s আগে',\n s: 'কয়েক সেকেন্ড',\n ss: '%d সেকেন্ড',\n m: 'এক মিনিট',\n mm: '%d মিনিট',\n h: 'এক ঘন্টা',\n hh: '%d ঘন্টা',\n d: 'এক দিন',\n dd: '%d দিন',\n M: 'এক মাস',\n MM: '%d মাস',\n y: 'এক বছর',\n yy: '%d বছর',\n },\n preparse: function (string) {\n return string.replace(/[১২৩৪৫৬৭৮৯০]/g, function (match) {\n return numberMap[match];\n });\n },\n postformat: function (string) {\n return string.replace(/\\d/g, function (match) {\n return symbolMap[match];\n });\n },\n meridiemParse: /রাত|সকাল|দুপুর|বিকাল|রাত/,\n meridiemHour: function (hour, meridiem) {\n if (hour === 12) {\n hour = 0;\n }\n if (\n (meridiem === 'রাত' && hour >= 4) ||\n (meridiem === 'দুপুর' && hour < 5) ||\n meridiem === 'বিকাল'\n ) {\n return hour + 12;\n } else {\n return hour;\n }\n },\n meridiem: function (hour, minute, isLower) {\n if (hour < 4) {\n return 'রাত';\n } else if (hour < 10) {\n return 'সকাল';\n } else if (hour < 17) {\n return 'দুপুর';\n } else if (hour < 20) {\n return 'বিকাল';\n } else {\n return 'রাত';\n }\n },\n week: {\n dow: 0, // Sunday is the first day of the week.\n doy: 6, // The week that contains Jan 6th is the first week of the year.\n },\n });\n\n return bn;\n\n})));\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNjEyOTAuanMiLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL2l0Zy1uZXh0Z2VuLWZyb250ZW5kLy4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvYm4uanM/OTA0MyJdLCJzb3VyY2VzQ29udGVudCI6WyIvLyEgbW9tZW50LmpzIGxvY2FsZSBjb25maWd1cmF0aW9uXG4vLyEgbG9jYWxlIDogQmVuZ2FsaSBbYm5dXG4vLyEgYXV0aG9yIDogS2F1c2hpayBHYW5kaGkgOiBodHRwczovL2dpdGh1Yi5jb20va2F1c2hpa2dhbmRoaVxuXG47KGZ1bmN0aW9uIChnbG9iYWwsIGZhY3RvcnkpIHtcbiAgIHR5cGVvZiBleHBvcnRzID09PSAnb2JqZWN0JyAmJiB0eXBlb2YgbW9kdWxlICE9PSAndW5kZWZpbmVkJ1xuICAgICAgICYmIHR5cGVvZiByZXF1aXJlID09PSAnZnVuY3Rpb24nID8gZmFjdG9yeShyZXF1aXJlKCcuLi9tb21lbnQnKSkgOlxuICAgdHlwZW9mIGRlZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiBkZWZpbmUuYW1kID8gZGVmaW5lKFsnLi4vbW9tZW50J10sIGZhY3RvcnkpIDpcbiAgIGZhY3RvcnkoZ2xvYmFsLm1vbWVudClcbn0odGhpcywgKGZ1bmN0aW9uIChtb21lbnQpIHsgJ3VzZSBzdHJpY3QnO1xuXG4gICAgLy8hIG1vbWVudC5qcyBsb2NhbGUgY29uZmlndXJhdGlvblxuXG4gICAgdmFyIHN5bWJvbE1hcCA9IHtcbiAgICAgICAgICAgIDE6ICfgp6cnLFxuICAgICAgICAgICAgMjogJ+CnqCcsXG4gICAgICAgICAgICAzOiAn4KepJyxcbiAgICAgICAgICAgIDQ6ICfgp6onLFxuICAgICAgICAgICAgNTogJ+CnqycsXG4gICAgICAgICAgICA2OiAn4KesJyxcbiAgICAgICAgICAgIDc6ICfgp60nLFxuICAgICAgICAgICAgODogJ+CnricsXG4gICAgICAgICAgICA5OiAn4KevJyxcbiAgICAgICAgICAgIDA6ICfgp6YnLFxuICAgICAgICB9LFxuICAgICAgICBudW1iZXJNYXAgPSB7XG4gICAgICAgICAgICAn4KenJzogJzEnLFxuICAgICAgICAgICAgJ+CnqCc6ICcyJyxcbiAgICAgICAgICAgICfgp6knOiAnMycsXG4gICAgICAgICAgICAn4KeqJzogJzQnLFxuICAgICAgICAgICAgJ+Cnqyc6ICc1JyxcbiAgICAgICAgICAgICfgp6wnOiAnNicsXG4gICAgICAgICAgICAn4KetJzogJzcnLFxuICAgICAgICAgICAgJ+Cnric6ICc4JyxcbiAgICAgICAgICAgICfgp68nOiAnOScsXG4gICAgICAgICAgICAn4KemJzogJzAnLFxuICAgICAgICB9O1xuXG4gICAgdmFyIGJuID0gbW9tZW50LmRlZmluZUxvY2FsZSgnYm4nLCB7XG4gICAgICAgIG1vbnRoczogJ+CmnOCmvuCmqOCngeCnn+CmvuCmsOCmv1/gpqvgp4fgpqzgp43gprDgp4Hgp5/gpr7gprDgpr9f4Kau4Ka+4Kaw4KeN4KaaX+Cmj+CmquCnjeCmsOCmv+Cmsl/gpq7gp4df4Kac4KeB4KaoX+CmnOCngeCmsuCmvuCmh1/gpobgppfgprjgp43gpp9f4Ka44KeH4Kaq4KeN4Kaf4KeH4Kau4KeN4Kas4KawX+CmheCmleCnjeCmn+Cni+CmrOCmsF/gpqjgpq3gp4fgpq7gp43gpqzgprBf4Kah4Ka/4Ka44KeH4Kau4KeN4Kas4KawJy5zcGxpdChcbiAgICAgICAgICAgICdfJ1xuICAgICAgICApLFxuICAgICAgICBtb250aHNTaG9ydDpcbiAgICAgICAgICAgICfgppzgpr7gpqjgp4Ff4Kar4KeH4Kas4KeN4Kaw4KeBX+CmruCmvuCmsOCnjeCmml/gpo/gpqrgp43gprDgpr/gprJf4Kau4KeHX+CmnOCngeCmqF/gppzgp4HgprLgpr7gpodf4KaG4KaX4Ka44KeN4KafX+CmuOCnh+CmquCnjeCmn1/gpoXgppXgp43gpp/gp4tf4Kao4Kat4KeHX+CmoeCmv+CmuOCnhycuc3BsaXQoXG4gICAgICAgICAgICAgICAgJ18nXG4gICAgICAgICAgICApLFxuICAgICAgICB3ZWVrZGF5czogJ+CmsOCmrOCmv+CmrOCmvuCmsF/gprjgp4vgpq7gpqzgpr7gprBf4Kau4KaZ4KeN4KaX4Kay4Kas4Ka+4KawX+CmrOCngeCmp+CmrOCmvuCmsF/gpqzgp4Pgprngprjgp43gpqrgpqTgpr/gpqzgpr7gprBf4Ka24KeB4KaV4KeN4Kaw4Kas4Ka+4KawX+CmtuCmqOCmv+CmrOCmvuCmsCcuc3BsaXQoXG4gICAgICAgICAgICAnXydcbiAgICAgICAgKSxcbiAgICAgICAgd2Vla2RheXNTaG9ydDogJ+CmsOCmrOCmv1/gprjgp4vgpq5f4Kau4KaZ4KeN4KaX4KayX+CmrOCngeCmp1/gpqzgp4Pgprngprjgp43gpqrgpqTgpr9f4Ka24KeB4KaV4KeN4KawX+CmtuCmqOCmvycuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXNNaW46ICfgprDgpqzgpr9f4Ka44KeL4KauX+CmruCmmeCnjeCml+Cmsl/gpqzgp4Hgpqdf4Kas4KeD4Ka5X+CmtuCngeCmleCnjeCmsF/gprbgpqjgpr8nLnNwbGl0KCdfJyksXG4gICAgICAgIGxvbmdEYXRlRm9ybWF0OiB7XG4gICAgICAgICAgICBMVDogJ0EgaDptbSDgprjgpq7gp58nLFxuICAgICAgICAgICAgTFRTOiAnQSBoOm1tOnNzIOCmuOCmruCnnycsXG4gICAgICAgICAgICBMOiAnREQvTU0vWVlZWScsXG4gICAgICAgICAgICBMTDogJ0QgTU1NTSBZWVlZJyxcbiAgICAgICAgICAgIExMTDogJ0QgTU1NTSBZWVlZLCBBIGg6bW0g4Ka44Kau4KefJyxcbiAgICAgICAgICAgIExMTEw6ICdkZGRkLCBEIE1NTU0gWVlZWSwgQSBoOm1tIOCmuOCmruCnnycsXG4gICAgICAgIH0sXG4gICAgICAgIGNhbGVuZGFyOiB7XG4gICAgICAgICAgICBzYW1lRGF5OiAnW+CmhuCmnF0gTFQnLFxuICAgICAgICAgICAgbmV4dERheTogJ1vgpobgppfgpr7gpq7gp4DgppXgpr7gprJdIExUJyxcbiAgICAgICAgICAgIG5leHRXZWVrOiAnZGRkZCwgTFQnLFxuICAgICAgICAgICAgbGFzdERheTogJ1vgppfgpqTgppXgpr7gprJdIExUJyxcbiAgICAgICAgICAgIGxhc3RXZWVrOiAnW+Cml+CmpF0gZGRkZCwgTFQnLFxuICAgICAgICAgICAgc2FtZUVsc2U6ICdMJyxcbiAgICAgICAgfSxcbiAgICAgICAgcmVsYXRpdmVUaW1lOiB7XG4gICAgICAgICAgICBmdXR1cmU6ICclcyDgpqrgprDgp4cnLFxuICAgICAgICAgICAgcGFzdDogJyVzIOCmhuCml+CnhycsXG4gICAgICAgICAgICBzOiAn4KaV4Kef4KeH4KaVIOCmuOCnh+CmleCnh+CmqOCnjeCmoScsXG4gICAgICAgICAgICBzczogJyVkIOCmuOCnh+CmleCnh+CmqOCnjeCmoScsXG4gICAgICAgICAgICBtOiAn4KaP4KaVIOCmruCmv+CmqOCmv+CmnycsXG4gICAgICAgICAgICBtbTogJyVkIOCmruCmv+CmqOCmv+CmnycsXG4gICAgICAgICAgICBoOiAn4KaP4KaVIOCmmOCmqOCnjeCmn+CmvicsXG4gICAgICAgICAgICBoaDogJyVkIOCmmOCmqOCnjeCmn+CmvicsXG4gICAgICAgICAgICBkOiAn4KaP4KaVIOCmpuCmv+CmqCcsXG4gICAgICAgICAgICBkZDogJyVkIOCmpuCmv+CmqCcsXG4gICAgICAgICAgICBNOiAn4KaP4KaVIOCmruCmvuCmuCcsXG4gICAgICAgICAgICBNTTogJyVkIOCmruCmvuCmuCcsXG4gICAgICAgICAgICB5OiAn4KaP4KaVIOCmrOCmm+CmsCcsXG4gICAgICAgICAgICB5eTogJyVkIOCmrOCmm+CmsCcsXG4gICAgICAgIH0sXG4gICAgICAgIHByZXBhcnNlOiBmdW5jdGlvbiAoc3RyaW5nKSB7XG4gICAgICAgICAgICByZXR1cm4gc3RyaW5nLnJlcGxhY2UoL1vgp6fgp6jgp6ngp6rgp6vgp6zgp63gp67gp6/gp6ZdL2csIGZ1bmN0aW9uIChtYXRjaCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBudW1iZXJNYXBbbWF0Y2hdO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0sXG4gICAgICAgIHBvc3Rmb3JtYXQ6IGZ1bmN0aW9uIChzdHJpbmcpIHtcbiAgICAgICAgICAgIHJldHVybiBzdHJpbmcucmVwbGFjZSgvXFxkL2csIGZ1bmN0aW9uIChtYXRjaCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBzeW1ib2xNYXBbbWF0Y2hdO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0sXG4gICAgICAgIG1lcmlkaWVtUGFyc2U6IC/gprDgpr7gpqR84Ka44KaV4Ka+4KayfOCmpuCngeCmquCngeCmsHzgpqzgpr/gppXgpr7gprJ84Kaw4Ka+4KakLyxcbiAgICAgICAgbWVyaWRpZW1Ib3VyOiBmdW5jdGlvbiAoaG91ciwgbWVyaWRpZW0pIHtcbiAgICAgICAgICAgIGlmIChob3VyID09PSAxMikge1xuICAgICAgICAgICAgICAgIGhvdXIgPSAwO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgIChtZXJpZGllbSA9PT0gJ+CmsOCmvuCmpCcgJiYgaG91ciA+PSA0KSB8fFxuICAgICAgICAgICAgICAgIChtZXJpZGllbSA9PT0gJ+CmpuCngeCmquCngeCmsCcgJiYgaG91ciA8IDUpIHx8XG4gICAgICAgICAgICAgICAgbWVyaWRpZW0gPT09ICfgpqzgpr/gppXgpr7gprInXG4gICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gaG91ciArIDEyO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gaG91cjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgbWVyaWRpZW06IGZ1bmN0aW9uIChob3VyLCBtaW51dGUsIGlzTG93ZXIpIHtcbiAgICAgICAgICAgIGlmIChob3VyIDwgNCkge1xuICAgICAgICAgICAgICAgIHJldHVybiAn4Kaw4Ka+4KakJztcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoaG91ciA8IDEwKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuICfgprjgppXgpr7gprInO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChob3VyIDwgMTcpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gJ+CmpuCngeCmquCngeCmsCc7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGhvdXIgPCAyMCkge1xuICAgICAgICAgICAgICAgIHJldHVybiAn4Kas4Ka/4KaV4Ka+4KayJztcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuICfgprDgpr7gpqQnO1xuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICB3ZWVrOiB7XG4gICAgICAgICAgICBkb3c6IDAsIC8vIFN1bmRheSBpcyB0aGUgZmlyc3QgZGF5IG9mIHRoZSB3ZWVrLlxuICAgICAgICAgICAgZG95OiA2LCAvLyBUaGUgd2VlayB0aGF0IGNvbnRhaW5zIEphbiA2dGggaXMgdGhlIGZpcnN0IHdlZWsgb2YgdGhlIHllYXIuXG4gICAgICAgIH0sXG4gICAgfSk7XG5cbiAgICByZXR1cm4gYm47XG5cbn0pKSk7XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///61290\n")},61339:(I,g,t)=>{"use strict";I.exports=t.p+"fd02338aa21f14b3841c.png"},61501:(I,g,t)=>{"use strict";I.exports=t.p+"5190a512a002fc1723f5.png"},61509:function(__unused_webpack_module,__unused_webpack_exports,__webpack_require__){eval("//! moment.js locale configuration\n//! locale : Arabic [ar]\n//! author : Abdel Said: https://github.com/abdelsaid\n//! author : Ahmed Elkhatib\n//! author : forabi https://github.com/forabi\n\n;(function (global, factory) {\n true ? factory(__webpack_require__(95093)) :\n 0\n}(this, (function (moment) { 'use strict';\n\n //! moment.js locale configuration\n\n var symbolMap = {\n 1: '١',\n 2: '٢',\n 3: '٣',\n 4: '٤',\n 5: '٥',\n 6: '٦',\n 7: '٧',\n 8: '٨',\n 9: '٩',\n 0: '٠',\n },\n numberMap = {\n '١': '1',\n '٢': '2',\n '٣': '3',\n '٤': '4',\n '٥': '5',\n '٦': '6',\n '٧': '7',\n '٨': '8',\n '٩': '9',\n '٠': '0',\n },\n pluralForm = function (n) {\n return n === 0\n ? 0\n : n === 1\n ? 1\n : n === 2\n ? 2\n : n % 100 >= 3 && n % 100 <= 10\n ? 3\n : n % 100 >= 11\n ? 4\n : 5;\n },\n plurals = {\n s: [\n 'أقل من ثانية',\n 'ثانية واحدة',\n ['ثانيتان', 'ثانيتين'],\n '%d ثوان',\n '%d ثانية',\n '%d ثانية',\n ],\n m: [\n 'أقل من دقيقة',\n 'دقيقة واحدة',\n ['دقيقتان', 'دقيقتين'],\n '%d دقائق',\n '%d دقيقة',\n '%d دقيقة',\n ],\n h: [\n 'أقل من ساعة',\n 'ساعة واحدة',\n ['ساعتان', 'ساعتين'],\n '%d ساعات',\n '%d ساعة',\n '%d ساعة',\n ],\n d: [\n 'أقل من يوم',\n 'يوم واحد',\n ['يومان', 'يومين'],\n '%d أيام',\n '%d يومًا',\n '%d يوم',\n ],\n M: [\n 'أقل من شهر',\n 'شهر واحد',\n ['شهران', 'شهرين'],\n '%d أشهر',\n '%d شهرا',\n '%d شهر',\n ],\n y: [\n 'أقل من عام',\n 'عام واحد',\n ['عامان', 'عامين'],\n '%d أعوام',\n '%d عامًا',\n '%d عام',\n ],\n },\n pluralize = function (u) {\n return function (number, withoutSuffix, string, isFuture) {\n var f = pluralForm(number),\n str = plurals[u][pluralForm(number)];\n if (f === 2) {\n str = str[withoutSuffix ? 0 : 1];\n }\n return str.replace(/%d/i, number);\n };\n },\n months = [\n 'يناير',\n 'فبراير',\n 'مارس',\n 'أبريل',\n 'مايو',\n 'يونيو',\n 'يوليو',\n 'أغسطس',\n 'سبتمبر',\n 'أكتوبر',\n 'نوفمبر',\n 'ديسمبر',\n ];\n\n var ar = moment.defineLocale('ar', {\n months: months,\n monthsShort: months,\n weekdays: 'الأحد_الإثنين_الثلاثاء_الأربعاء_الخميس_الجمعة_السبت'.split('_'),\n weekdaysShort: 'أحد_إثنين_ثلاثاء_أربعاء_خميس_جمعة_سبت'.split('_'),\n weekdaysMin: 'ح_ن_ث_ر_خ_ج_س'.split('_'),\n weekdaysParseExact: true,\n longDateFormat: {\n LT: 'HH:mm',\n LTS: 'HH:mm:ss',\n L: 'D/\\u200FM/\\u200FYYYY',\n LL: 'D MMMM YYYY',\n LLL: 'D MMMM YYYY HH:mm',\n LLLL: 'dddd D MMMM YYYY HH:mm',\n },\n meridiemParse: /ص|م/,\n isPM: function (input) {\n return 'م' === input;\n },\n meridiem: function (hour, minute, isLower) {\n if (hour < 12) {\n return 'ص';\n } else {\n return 'م';\n }\n },\n calendar: {\n sameDay: '[اليوم عند الساعة] LT',\n nextDay: '[غدًا عند الساعة] LT',\n nextWeek: 'dddd [عند الساعة] LT',\n lastDay: '[أمس عند الساعة] LT',\n lastWeek: 'dddd [عند الساعة] LT',\n sameElse: 'L',\n },\n relativeTime: {\n future: 'بعد %s',\n past: 'منذ %s',\n s: pluralize('s'),\n ss: pluralize('s'),\n m: pluralize('m'),\n mm: pluralize('m'),\n h: pluralize('h'),\n hh: pluralize('h'),\n d: pluralize('d'),\n dd: pluralize('d'),\n M: pluralize('M'),\n MM: pluralize('M'),\n y: pluralize('y'),\n yy: pluralize('y'),\n },\n preparse: function (string) {\n return string\n .replace(/[١٢٣٤٥٦٧٨٩٠]/g, function (match) {\n return numberMap[match];\n })\n .replace(/،/g, ',');\n },\n postformat: function (string) {\n return string\n .replace(/\\d/g, function (match) {\n return symbolMap[match];\n })\n .replace(/,/g, '،');\n },\n week: {\n dow: 6, // Saturday is the first day of the week.\n doy: 12, // The week that contains Jan 12th is the first week of the year.\n },\n });\n\n return ar;\n\n})));\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNjE1MDkuanMiLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vaXRnLW5leHRnZW4tZnJvbnRlbmQvLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9hci5qcz84ZTczIl0sInNvdXJjZXNDb250ZW50IjpbIi8vISBtb21lbnQuanMgbG9jYWxlIGNvbmZpZ3VyYXRpb25cbi8vISBsb2NhbGUgOiBBcmFiaWMgW2FyXVxuLy8hIGF1dGhvciA6IEFiZGVsIFNhaWQ6IGh0dHBzOi8vZ2l0aHViLmNvbS9hYmRlbHNhaWRcbi8vISBhdXRob3IgOiBBaG1lZCBFbGtoYXRpYlxuLy8hIGF1dGhvciA6IGZvcmFiaSBodHRwczovL2dpdGh1Yi5jb20vZm9yYWJpXG5cbjsoZnVuY3Rpb24gKGdsb2JhbCwgZmFjdG9yeSkge1xuICAgdHlwZW9mIGV4cG9ydHMgPT09ICdvYmplY3QnICYmIHR5cGVvZiBtb2R1bGUgIT09ICd1bmRlZmluZWQnXG4gICAgICAgJiYgdHlwZW9mIHJlcXVpcmUgPT09ICdmdW5jdGlvbicgPyBmYWN0b3J5KHJlcXVpcmUoJy4uL21vbWVudCcpKSA6XG4gICB0eXBlb2YgZGVmaW5lID09PSAnZnVuY3Rpb24nICYmIGRlZmluZS5hbWQgPyBkZWZpbmUoWycuLi9tb21lbnQnXSwgZmFjdG9yeSkgOlxuICAgZmFjdG9yeShnbG9iYWwubW9tZW50KVxufSh0aGlzLCAoZnVuY3Rpb24gKG1vbWVudCkgeyAndXNlIHN0cmljdCc7XG5cbiAgICAvLyEgbW9tZW50LmpzIGxvY2FsZSBjb25maWd1cmF0aW9uXG5cbiAgICB2YXIgc3ltYm9sTWFwID0ge1xuICAgICAgICAgICAgMTogJ9mhJyxcbiAgICAgICAgICAgIDI6ICfZoicsXG4gICAgICAgICAgICAzOiAn2aMnLFxuICAgICAgICAgICAgNDogJ9mkJyxcbiAgICAgICAgICAgIDU6ICfZpScsXG4gICAgICAgICAgICA2OiAn2aYnLFxuICAgICAgICAgICAgNzogJ9mnJyxcbiAgICAgICAgICAgIDg6ICfZqCcsXG4gICAgICAgICAgICA5OiAn2aknLFxuICAgICAgICAgICAgMDogJ9mgJyxcbiAgICAgICAgfSxcbiAgICAgICAgbnVtYmVyTWFwID0ge1xuICAgICAgICAgICAgJ9mhJzogJzEnLFxuICAgICAgICAgICAgJ9miJzogJzInLFxuICAgICAgICAgICAgJ9mjJzogJzMnLFxuICAgICAgICAgICAgJ9mkJzogJzQnLFxuICAgICAgICAgICAgJ9mlJzogJzUnLFxuICAgICAgICAgICAgJ9mmJzogJzYnLFxuICAgICAgICAgICAgJ9mnJzogJzcnLFxuICAgICAgICAgICAgJ9moJzogJzgnLFxuICAgICAgICAgICAgJ9mpJzogJzknLFxuICAgICAgICAgICAgJ9mgJzogJzAnLFxuICAgICAgICB9LFxuICAgICAgICBwbHVyYWxGb3JtID0gZnVuY3Rpb24gKG4pIHtcbiAgICAgICAgICAgIHJldHVybiBuID09PSAwXG4gICAgICAgICAgICAgICAgPyAwXG4gICAgICAgICAgICAgICAgOiBuID09PSAxXG4gICAgICAgICAgICAgICAgICA/IDFcbiAgICAgICAgICAgICAgICAgIDogbiA9PT0gMlxuICAgICAgICAgICAgICAgICAgICA/IDJcbiAgICAgICAgICAgICAgICAgICAgOiBuICUgMTAwID49IDMgJiYgbiAlIDEwMCA8PSAxMFxuICAgICAgICAgICAgICAgICAgICAgID8gM1xuICAgICAgICAgICAgICAgICAgICAgIDogbiAlIDEwMCA+PSAxMVxuICAgICAgICAgICAgICAgICAgICAgICAgPyA0XG4gICAgICAgICAgICAgICAgICAgICAgICA6IDU7XG4gICAgICAgIH0sXG4gICAgICAgIHBsdXJhbHMgPSB7XG4gICAgICAgICAgICBzOiBbXG4gICAgICAgICAgICAgICAgJ9ij2YLZhCDZhdmGINir2KfZhtmK2KknLFxuICAgICAgICAgICAgICAgICfYq9in2YbZitipINmI2KfYrdiv2KknLFxuICAgICAgICAgICAgICAgIFsn2KvYp9mG2YrYqtin2YYnLCAn2KvYp9mG2YrYqtmK2YYnXSxcbiAgICAgICAgICAgICAgICAnJWQg2KvZiNin2YYnLFxuICAgICAgICAgICAgICAgICclZCDYq9in2YbZitipJyxcbiAgICAgICAgICAgICAgICAnJWQg2KvYp9mG2YrYqScsXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgbTogW1xuICAgICAgICAgICAgICAgICfYo9mC2YQg2YXZhiDYr9mC2YrZgtipJyxcbiAgICAgICAgICAgICAgICAn2K/ZgtmK2YLYqSDZiNin2K3Yr9ipJyxcbiAgICAgICAgICAgICAgICBbJ9iv2YLZitmC2KrYp9mGJywgJ9iv2YLZitmC2KrZitmGJ10sXG4gICAgICAgICAgICAgICAgJyVkINiv2YLYp9im2YInLFxuICAgICAgICAgICAgICAgICclZCDYr9mC2YrZgtipJyxcbiAgICAgICAgICAgICAgICAnJWQg2K/ZgtmK2YLYqScsXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgaDogW1xuICAgICAgICAgICAgICAgICfYo9mC2YQg2YXZhiDYs9in2LnYqScsXG4gICAgICAgICAgICAgICAgJ9iz2KfYudipINmI2KfYrdiv2KknLFxuICAgICAgICAgICAgICAgIFsn2LPYp9i52KrYp9mGJywgJ9iz2KfYudiq2YrZhiddLFxuICAgICAgICAgICAgICAgICclZCDYs9in2LnYp9iqJyxcbiAgICAgICAgICAgICAgICAnJWQg2LPYp9i52KknLFxuICAgICAgICAgICAgICAgICclZCDYs9in2LnYqScsXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgZDogW1xuICAgICAgICAgICAgICAgICfYo9mC2YQg2YXZhiDZitmI2YUnLFxuICAgICAgICAgICAgICAgICfZitmI2YUg2YjYp9it2K8nLFxuICAgICAgICAgICAgICAgIFsn2YrZiNmF2KfZhicsICfZitmI2YXZitmGJ10sXG4gICAgICAgICAgICAgICAgJyVkINij2YrYp9mFJyxcbiAgICAgICAgICAgICAgICAnJWQg2YrZiNmF2YvYpycsXG4gICAgICAgICAgICAgICAgJyVkINmK2YjZhScsXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgTTogW1xuICAgICAgICAgICAgICAgICfYo9mC2YQg2YXZhiDYtNmH2LEnLFxuICAgICAgICAgICAgICAgICfYtNmH2LEg2YjYp9it2K8nLFxuICAgICAgICAgICAgICAgIFsn2LTZh9ix2KfZhicsICfYtNmH2LHZitmGJ10sXG4gICAgICAgICAgICAgICAgJyVkINij2LTZh9ixJyxcbiAgICAgICAgICAgICAgICAnJWQg2LTZh9ix2KcnLFxuICAgICAgICAgICAgICAgICclZCDYtNmH2LEnLFxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIHk6IFtcbiAgICAgICAgICAgICAgICAn2KPZgtmEINmF2YYg2LnYp9mFJyxcbiAgICAgICAgICAgICAgICAn2LnYp9mFINmI2KfYrdivJyxcbiAgICAgICAgICAgICAgICBbJ9i52KfZhdin2YYnLCAn2LnYp9mF2YrZhiddLFxuICAgICAgICAgICAgICAgICclZCDYo9i52YjYp9mFJyxcbiAgICAgICAgICAgICAgICAnJWQg2LnYp9mF2YvYpycsXG4gICAgICAgICAgICAgICAgJyVkINi52KfZhScsXG4gICAgICAgICAgICBdLFxuICAgICAgICB9LFxuICAgICAgICBwbHVyYWxpemUgPSBmdW5jdGlvbiAodSkge1xuICAgICAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIChudW1iZXIsIHdpdGhvdXRTdWZmaXgsIHN0cmluZywgaXNGdXR1cmUpIHtcbiAgICAgICAgICAgICAgICB2YXIgZiA9IHBsdXJhbEZvcm0obnVtYmVyKSxcbiAgICAgICAgICAgICAgICAgICAgc3RyID0gcGx1cmFsc1t1XVtwbHVyYWxGb3JtKG51bWJlcildO1xuICAgICAgICAgICAgICAgIGlmIChmID09PSAyKSB7XG4gICAgICAgICAgICAgICAgICAgIHN0ciA9IHN0clt3aXRob3V0U3VmZml4ID8gMCA6IDFdO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gc3RyLnJlcGxhY2UoLyVkL2ksIG51bWJlcik7XG4gICAgICAgICAgICB9O1xuICAgICAgICB9LFxuICAgICAgICBtb250aHMgPSBbXG4gICAgICAgICAgICAn2YrZhtin2YrYsScsXG4gICAgICAgICAgICAn2YHYqNix2KfZitixJyxcbiAgICAgICAgICAgICfZhdin2LHYsycsXG4gICAgICAgICAgICAn2KPYqNix2YrZhCcsXG4gICAgICAgICAgICAn2YXYp9mK2YgnLFxuICAgICAgICAgICAgJ9mK2YjZhtmK2YgnLFxuICAgICAgICAgICAgJ9mK2YjZhNmK2YgnLFxuICAgICAgICAgICAgJ9ij2LrYs9i32LMnLFxuICAgICAgICAgICAgJ9iz2KjYqtmF2KjYsScsXG4gICAgICAgICAgICAn2KPZg9iq2YjYqNixJyxcbiAgICAgICAgICAgICfZhtmI2YHZhdio2LEnLFxuICAgICAgICAgICAgJ9iv2YrYs9mF2KjYsScsXG4gICAgICAgIF07XG5cbiAgICB2YXIgYXIgPSBtb21lbnQuZGVmaW5lTG9jYWxlKCdhcicsIHtcbiAgICAgICAgbW9udGhzOiBtb250aHMsXG4gICAgICAgIG1vbnRoc1Nob3J0OiBtb250aHMsXG4gICAgICAgIHdlZWtkYXlzOiAn2KfZhNij2K3Yr1/Yp9mE2KXYq9mG2YrZhl/Yp9mE2KvZhNin2KvYp9ihX9in2YTYo9ix2KjYudin2KFf2KfZhNiu2YXZitizX9in2YTYrNmF2LnYqV/Yp9mE2LPYqNiqJy5zcGxpdCgnXycpLFxuICAgICAgICB3ZWVrZGF5c1Nob3J0OiAn2KPYrdivX9il2KvZhtmK2YZf2KvZhNin2KvYp9ihX9ij2LHYqNi52KfYoV/YrtmF2YrYs1/YrNmF2LnYqV/Ys9io2KonLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzTWluOiAn2K1f2YZf2Ktf2LFf2K5f2Kxf2LMnLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzUGFyc2VFeGFjdDogdHJ1ZSxcbiAgICAgICAgbG9uZ0RhdGVGb3JtYXQ6IHtcbiAgICAgICAgICAgIExUOiAnSEg6bW0nLFxuICAgICAgICAgICAgTFRTOiAnSEg6bW06c3MnLFxuICAgICAgICAgICAgTDogJ0QvXFx1MjAwRk0vXFx1MjAwRllZWVknLFxuICAgICAgICAgICAgTEw6ICdEIE1NTU0gWVlZWScsXG4gICAgICAgICAgICBMTEw6ICdEIE1NTU0gWVlZWSBISDptbScsXG4gICAgICAgICAgICBMTExMOiAnZGRkZCBEIE1NTU0gWVlZWSBISDptbScsXG4gICAgICAgIH0sXG4gICAgICAgIG1lcmlkaWVtUGFyc2U6IC/YtXzZhS8sXG4gICAgICAgIGlzUE06IGZ1bmN0aW9uIChpbnB1dCkge1xuICAgICAgICAgICAgcmV0dXJuICfZhScgPT09IGlucHV0O1xuICAgICAgICB9LFxuICAgICAgICBtZXJpZGllbTogZnVuY3Rpb24gKGhvdXIsIG1pbnV0ZSwgaXNMb3dlcikge1xuICAgICAgICAgICAgaWYgKGhvdXIgPCAxMikge1xuICAgICAgICAgICAgICAgIHJldHVybiAn2LUnO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gJ9mFJztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgY2FsZW5kYXI6IHtcbiAgICAgICAgICAgIHNhbWVEYXk6ICdb2KfZhNmK2YjZhSDYudmG2K8g2KfZhNiz2KfYudipXSBMVCcsXG4gICAgICAgICAgICBuZXh0RGF5OiAnW9i62K/Zi9inINi52YbYryDYp9mE2LPYp9i52KldIExUJyxcbiAgICAgICAgICAgIG5leHRXZWVrOiAnZGRkZCBb2LnZhtivINin2YTYs9in2LnYqV0gTFQnLFxuICAgICAgICAgICAgbGFzdERheTogJ1vYo9mF2LMg2LnZhtivINin2YTYs9in2LnYqV0gTFQnLFxuICAgICAgICAgICAgbGFzdFdlZWs6ICdkZGRkIFvYudmG2K8g2KfZhNiz2KfYudipXSBMVCcsXG4gICAgICAgICAgICBzYW1lRWxzZTogJ0wnLFxuICAgICAgICB9LFxuICAgICAgICByZWxhdGl2ZVRpbWU6IHtcbiAgICAgICAgICAgIGZ1dHVyZTogJ9io2LnYryAlcycsXG4gICAgICAgICAgICBwYXN0OiAn2YXZhtiwICVzJyxcbiAgICAgICAgICAgIHM6IHBsdXJhbGl6ZSgncycpLFxuICAgICAgICAgICAgc3M6IHBsdXJhbGl6ZSgncycpLFxuICAgICAgICAgICAgbTogcGx1cmFsaXplKCdtJyksXG4gICAgICAgICAgICBtbTogcGx1cmFsaXplKCdtJyksXG4gICAgICAgICAgICBoOiBwbHVyYWxpemUoJ2gnKSxcbiAgICAgICAgICAgIGhoOiBwbHVyYWxpemUoJ2gnKSxcbiAgICAgICAgICAgIGQ6IHBsdXJhbGl6ZSgnZCcpLFxuICAgICAgICAgICAgZGQ6IHBsdXJhbGl6ZSgnZCcpLFxuICAgICAgICAgICAgTTogcGx1cmFsaXplKCdNJyksXG4gICAgICAgICAgICBNTTogcGx1cmFsaXplKCdNJyksXG4gICAgICAgICAgICB5OiBwbHVyYWxpemUoJ3knKSxcbiAgICAgICAgICAgIHl5OiBwbHVyYWxpemUoJ3knKSxcbiAgICAgICAgfSxcbiAgICAgICAgcHJlcGFyc2U6IGZ1bmN0aW9uIChzdHJpbmcpIHtcbiAgICAgICAgICAgIHJldHVybiBzdHJpbmdcbiAgICAgICAgICAgICAgICAucmVwbGFjZSgvW9mh2aLZo9mk2aXZptmn2ajZqdmgXS9nLCBmdW5jdGlvbiAobWF0Y2gpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG51bWJlck1hcFttYXRjaF07XG4gICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAucmVwbGFjZSgv2IwvZywgJywnKTtcbiAgICAgICAgfSxcbiAgICAgICAgcG9zdGZvcm1hdDogZnVuY3Rpb24gKHN0cmluZykge1xuICAgICAgICAgICAgcmV0dXJuIHN0cmluZ1xuICAgICAgICAgICAgICAgIC5yZXBsYWNlKC9cXGQvZywgZnVuY3Rpb24gKG1hdGNoKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBzeW1ib2xNYXBbbWF0Y2hdO1xuICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgLnJlcGxhY2UoLywvZywgJ9iMJyk7XG4gICAgICAgIH0sXG4gICAgICAgIHdlZWs6IHtcbiAgICAgICAgICAgIGRvdzogNiwgLy8gU2F0dXJkYXkgaXMgdGhlIGZpcnN0IGRheSBvZiB0aGUgd2Vlay5cbiAgICAgICAgICAgIGRveTogMTIsIC8vIFRoZSB3ZWVrIHRoYXQgY29udGFpbnMgSmFuIDEydGggaXMgdGhlIGZpcnN0IHdlZWsgb2YgdGhlIHllYXIuXG4gICAgICAgIH0sXG4gICAgfSk7XG5cbiAgICByZXR1cm4gYXI7XG5cbn0pKSk7XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///61509\n")},61987:(I,g,t)=>{"use strict";I.exports=t.p+"6cebcf3d142594360c80.png"},62012:(module,__unused_webpack_exports,__webpack_require__)=>{"use strict";eval("\n\nvar utils = __webpack_require__(9516);\n\n// Headers whose duplicates are ignored by node\n// c.f. https://nodejs.org/api/http.html#http_message_headers\nvar ignoreDuplicateOf = [\n 'age', 'authorization', 'content-length', 'content-type', 'etag',\n 'expires', 'from', 'host', 'if-modified-since', 'if-unmodified-since',\n 'last-modified', 'location', 'max-forwards', 'proxy-authorization',\n 'referer', 'retry-after', 'user-agent'\n];\n\n/**\n * Parse headers into an object\n *\n * ```\n * Date: Wed, 27 Aug 2014 08:58:49 GMT\n * Content-Type: application/json\n * Connection: keep-alive\n * Transfer-Encoding: chunked\n * ```\n *\n * @param {String} headers Headers needing to be parsed\n * @returns {Object} Headers parsed into an object\n */\nmodule.exports = function parseHeaders(headers) {\n var parsed = {};\n var key;\n var val;\n var i;\n\n if (!headers) { return parsed; }\n\n utils.forEach(headers.split('\\n'), function parser(line) {\n i = line.indexOf(':');\n key = utils.trim(line.substr(0, i)).toLowerCase();\n val = utils.trim(line.substr(i + 1));\n\n if (key) {\n if (parsed[key] && ignoreDuplicateOf.indexOf(key) >= 0) {\n return;\n }\n if (key === 'set-cookie') {\n parsed[key] = (parsed[key] ? parsed[key] : []).concat([val]);\n } else {\n parsed[key] = parsed[key] ? parsed[key] + ', ' + val : val;\n }\n }\n });\n\n return parsed;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNjIwMTIuanMiLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL2l0Zy1uZXh0Z2VuLWZyb250ZW5kLy4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9oZWxwZXJzL3BhcnNlSGVhZGVycy5qcz9jMzQ1Il0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIHV0aWxzID0gcmVxdWlyZSgnLi8uLi91dGlscycpO1xuXG4vLyBIZWFkZXJzIHdob3NlIGR1cGxpY2F0ZXMgYXJlIGlnbm9yZWQgYnkgbm9kZVxuLy8gYy5mLiBodHRwczovL25vZGVqcy5vcmcvYXBpL2h0dHAuaHRtbCNodHRwX21lc3NhZ2VfaGVhZGVyc1xudmFyIGlnbm9yZUR1cGxpY2F0ZU9mID0gW1xuICAnYWdlJywgJ2F1dGhvcml6YXRpb24nLCAnY29udGVudC1sZW5ndGgnLCAnY29udGVudC10eXBlJywgJ2V0YWcnLFxuICAnZXhwaXJlcycsICdmcm9tJywgJ2hvc3QnLCAnaWYtbW9kaWZpZWQtc2luY2UnLCAnaWYtdW5tb2RpZmllZC1zaW5jZScsXG4gICdsYXN0LW1vZGlmaWVkJywgJ2xvY2F0aW9uJywgJ21heC1mb3J3YXJkcycsICdwcm94eS1hdXRob3JpemF0aW9uJyxcbiAgJ3JlZmVyZXInLCAncmV0cnktYWZ0ZXInLCAndXNlci1hZ2VudCdcbl07XG5cbi8qKlxuICogUGFyc2UgaGVhZGVycyBpbnRvIGFuIG9iamVjdFxuICpcbiAqIGBgYFxuICogRGF0ZTogV2VkLCAyNyBBdWcgMjAxNCAwODo1ODo0OSBHTVRcbiAqIENvbnRlbnQtVHlwZTogYXBwbGljYXRpb24vanNvblxuICogQ29ubmVjdGlvbjoga2VlcC1hbGl2ZVxuICogVHJhbnNmZXItRW5jb2Rpbmc6IGNodW5rZWRcbiAqIGBgYFxuICpcbiAqIEBwYXJhbSB7U3RyaW5nfSBoZWFkZXJzIEhlYWRlcnMgbmVlZGluZyB0byBiZSBwYXJzZWRcbiAqIEByZXR1cm5zIHtPYmplY3R9IEhlYWRlcnMgcGFyc2VkIGludG8gYW4gb2JqZWN0XG4gKi9cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gcGFyc2VIZWFkZXJzKGhlYWRlcnMpIHtcbiAgdmFyIHBhcnNlZCA9IHt9O1xuICB2YXIga2V5O1xuICB2YXIgdmFsO1xuICB2YXIgaTtcblxuICBpZiAoIWhlYWRlcnMpIHsgcmV0dXJuIHBhcnNlZDsgfVxuXG4gIHV0aWxzLmZvckVhY2goaGVhZGVycy5zcGxpdCgnXFxuJyksIGZ1bmN0aW9uIHBhcnNlcihsaW5lKSB7XG4gICAgaSA9IGxpbmUuaW5kZXhPZignOicpO1xuICAgIGtleSA9IHV0aWxzLnRyaW0obGluZS5zdWJzdHIoMCwgaSkpLnRvTG93ZXJDYXNlKCk7XG4gICAgdmFsID0gdXRpbHMudHJpbShsaW5lLnN1YnN0cihpICsgMSkpO1xuXG4gICAgaWYgKGtleSkge1xuICAgICAgaWYgKHBhcnNlZFtrZXldICYmIGlnbm9yZUR1cGxpY2F0ZU9mLmluZGV4T2Yoa2V5KSA+PSAwKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGlmIChrZXkgPT09ICdzZXQtY29va2llJykge1xuICAgICAgICBwYXJzZWRba2V5XSA9IChwYXJzZWRba2V5XSA/IHBhcnNlZFtrZXldIDogW10pLmNvbmNhdChbdmFsXSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBwYXJzZWRba2V5XSA9IHBhcnNlZFtrZXldID8gcGFyc2VkW2tleV0gKyAnLCAnICsgdmFsIDogdmFsO1xuICAgICAgfVxuICAgIH1cbiAgfSk7XG5cbiAgcmV0dXJuIHBhcnNlZDtcbn07XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///62012\n")},62973:(I,g,t)=>{"use strict";I.exports=t.p+"e52c5174b9a76307312b.png"},63009:function(module,exports,__webpack_require__){eval(";(function (root, factory) {\n\tif (true) {\n\t\t// CommonJS\n\t\tmodule.exports = exports = factory(__webpack_require__(19021));\n\t}\n\telse {}\n}(this, function (CryptoJS) {\n\n\t(function (Math) {\n\t // Shortcuts\n\t var C = CryptoJS;\n\t var C_lib = C.lib;\n\t var WordArray = C_lib.WordArray;\n\t var Hasher = C_lib.Hasher;\n\t var C_algo = C.algo;\n\n\t // Initialization and round constants tables\n\t var H = [];\n\t var K = [];\n\n\t // Compute constants\n\t (function () {\n\t function isPrime(n) {\n\t var sqrtN = Math.sqrt(n);\n\t for (var factor = 2; factor <= sqrtN; factor++) {\n\t if (!(n % factor)) {\n\t return false;\n\t }\n\t }\n\n\t return true;\n\t }\n\n\t function getFractionalBits(n) {\n\t return ((n - (n | 0)) * 0x100000000) | 0;\n\t }\n\n\t var n = 2;\n\t var nPrime = 0;\n\t while (nPrime < 64) {\n\t if (isPrime(n)) {\n\t if (nPrime < 8) {\n\t H[nPrime] = getFractionalBits(Math.pow(n, 1 / 2));\n\t }\n\t K[nPrime] = getFractionalBits(Math.pow(n, 1 / 3));\n\n\t nPrime++;\n\t }\n\n\t n++;\n\t }\n\t }());\n\n\t // Reusable object\n\t var W = [];\n\n\t /**\n\t * SHA-256 hash algorithm.\n\t */\n\t var SHA256 = C_algo.SHA256 = Hasher.extend({\n\t _doReset: function () {\n\t this._hash = new WordArray.init(H.slice(0));\n\t },\n\n\t _doProcessBlock: function (M, offset) {\n\t // Shortcut\n\t var H = this._hash.words;\n\n\t // Working variables\n\t var a = H[0];\n\t var b = H[1];\n\t var c = H[2];\n\t var d = H[3];\n\t var e = H[4];\n\t var f = H[5];\n\t var g = H[6];\n\t var h = H[7];\n\n\t // Computation\n\t for (var i = 0; i < 64; i++) {\n\t if (i < 16) {\n\t W[i] = M[offset + i] | 0;\n\t } else {\n\t var gamma0x = W[i - 15];\n\t var gamma0 = ((gamma0x << 25) | (gamma0x >>> 7)) ^\n\t ((gamma0x << 14) | (gamma0x >>> 18)) ^\n\t (gamma0x >>> 3);\n\n\t var gamma1x = W[i - 2];\n\t var gamma1 = ((gamma1x << 15) | (gamma1x >>> 17)) ^\n\t ((gamma1x << 13) | (gamma1x >>> 19)) ^\n\t (gamma1x >>> 10);\n\n\t W[i] = gamma0 + W[i - 7] + gamma1 + W[i - 16];\n\t }\n\n\t var ch = (e & f) ^ (~e & g);\n\t var maj = (a & b) ^ (a & c) ^ (b & c);\n\n\t var sigma0 = ((a << 30) | (a >>> 2)) ^ ((a << 19) | (a >>> 13)) ^ ((a << 10) | (a >>> 22));\n\t var sigma1 = ((e << 26) | (e >>> 6)) ^ ((e << 21) | (e >>> 11)) ^ ((e << 7) | (e >>> 25));\n\n\t var t1 = h + sigma1 + ch + K[i] + W[i];\n\t var t2 = sigma0 + maj;\n\n\t h = g;\n\t g = f;\n\t f = e;\n\t e = (d + t1) | 0;\n\t d = c;\n\t c = b;\n\t b = a;\n\t a = (t1 + t2) | 0;\n\t }\n\n\t // Intermediate hash value\n\t H[0] = (H[0] + a) | 0;\n\t H[1] = (H[1] + b) | 0;\n\t H[2] = (H[2] + c) | 0;\n\t H[3] = (H[3] + d) | 0;\n\t H[4] = (H[4] + e) | 0;\n\t H[5] = (H[5] + f) | 0;\n\t H[6] = (H[6] + g) | 0;\n\t H[7] = (H[7] + h) | 0;\n\t },\n\n\t _doFinalize: function () {\n\t // Shortcuts\n\t var data = this._data;\n\t var dataWords = data.words;\n\n\t var nBitsTotal = this._nDataBytes * 8;\n\t var nBitsLeft = data.sigBytes * 8;\n\n\t // Add padding\n\t dataWords[nBitsLeft >>> 5] |= 0x80 << (24 - nBitsLeft % 32);\n\t dataWords[(((nBitsLeft + 64) >>> 9) << 4) + 14] = Math.floor(nBitsTotal / 0x100000000);\n\t dataWords[(((nBitsLeft + 64) >>> 9) << 4) + 15] = nBitsTotal;\n\t data.sigBytes = dataWords.length * 4;\n\n\t // Hash final blocks\n\t this._process();\n\n\t // Return final computed hash\n\t return this._hash;\n\t },\n\n\t clone: function () {\n\t var clone = Hasher.clone.call(this);\n\t clone._hash = this._hash.clone();\n\n\t return clone;\n\t }\n\t });\n\n\t /**\n\t * Shortcut function to the hasher's object interface.\n\t *\n\t * @param {WordArray|string} message The message to hash.\n\t *\n\t * @return {WordArray} The hash.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var hash = CryptoJS.SHA256('message');\n\t * var hash = CryptoJS.SHA256(wordArray);\n\t */\n\t C.SHA256 = Hasher._createHelper(SHA256);\n\n\t /**\n\t * Shortcut function to the HMAC's object interface.\n\t *\n\t * @param {WordArray|string} message The message to hash.\n\t * @param {WordArray|string} key The secret key.\n\t *\n\t * @return {WordArray} The HMAC.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var hmac = CryptoJS.HmacSHA256(message, key);\n\t */\n\t C.HmacSHA256 = Hasher._createHmacHelper(SHA256);\n\t}(Math));\n\n\n\treturn CryptoJS.SHA256;\n\n}));//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNjMwMDkuanMiLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBUUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vaXRnLW5leHRnZW4tZnJvbnRlbmQvLi9ub2RlX21vZHVsZXMvY3J5cHRvLWpzL3NoYTI1Ni5qcz85NGY4Il0sInNvdXJjZXNDb250ZW50IjpbIjsoZnVuY3Rpb24gKHJvb3QsIGZhY3RvcnkpIHtcblx0aWYgKHR5cGVvZiBleHBvcnRzID09PSBcIm9iamVjdFwiKSB7XG5cdFx0Ly8gQ29tbW9uSlNcblx0XHRtb2R1bGUuZXhwb3J0cyA9IGV4cG9ydHMgPSBmYWN0b3J5KHJlcXVpcmUoXCIuL2NvcmVcIikpO1xuXHR9XG5cdGVsc2UgaWYgKHR5cGVvZiBkZWZpbmUgPT09IFwiZnVuY3Rpb25cIiAmJiBkZWZpbmUuYW1kKSB7XG5cdFx0Ly8gQU1EXG5cdFx0ZGVmaW5lKFtcIi4vY29yZVwiXSwgZmFjdG9yeSk7XG5cdH1cblx0ZWxzZSB7XG5cdFx0Ly8gR2xvYmFsIChicm93c2VyKVxuXHRcdGZhY3Rvcnkocm9vdC5DcnlwdG9KUyk7XG5cdH1cbn0odGhpcywgZnVuY3Rpb24gKENyeXB0b0pTKSB7XG5cblx0KGZ1bmN0aW9uIChNYXRoKSB7XG5cdCAgICAvLyBTaG9ydGN1dHNcblx0ICAgIHZhciBDID0gQ3J5cHRvSlM7XG5cdCAgICB2YXIgQ19saWIgPSBDLmxpYjtcblx0ICAgIHZhciBXb3JkQXJyYXkgPSBDX2xpYi5Xb3JkQXJyYXk7XG5cdCAgICB2YXIgSGFzaGVyID0gQ19saWIuSGFzaGVyO1xuXHQgICAgdmFyIENfYWxnbyA9IEMuYWxnbztcblxuXHQgICAgLy8gSW5pdGlhbGl6YXRpb24gYW5kIHJvdW5kIGNvbnN0YW50cyB0YWJsZXNcblx0ICAgIHZhciBIID0gW107XG5cdCAgICB2YXIgSyA9IFtdO1xuXG5cdCAgICAvLyBDb21wdXRlIGNvbnN0YW50c1xuXHQgICAgKGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICBmdW5jdGlvbiBpc1ByaW1lKG4pIHtcblx0ICAgICAgICAgICAgdmFyIHNxcnROID0gTWF0aC5zcXJ0KG4pO1xuXHQgICAgICAgICAgICBmb3IgKHZhciBmYWN0b3IgPSAyOyBmYWN0b3IgPD0gc3FydE47IGZhY3RvcisrKSB7XG5cdCAgICAgICAgICAgICAgICBpZiAoIShuICUgZmFjdG9yKSkge1xuXHQgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcblx0ICAgICAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgfVxuXG5cdCAgICAgICAgICAgIHJldHVybiB0cnVlO1xuXHQgICAgICAgIH1cblxuXHQgICAgICAgIGZ1bmN0aW9uIGdldEZyYWN0aW9uYWxCaXRzKG4pIHtcblx0ICAgICAgICAgICAgcmV0dXJuICgobiAtIChuIHwgMCkpICogMHgxMDAwMDAwMDApIHwgMDtcblx0ICAgICAgICB9XG5cblx0ICAgICAgICB2YXIgbiA9IDI7XG5cdCAgICAgICAgdmFyIG5QcmltZSA9IDA7XG5cdCAgICAgICAgd2hpbGUgKG5QcmltZSA8IDY0KSB7XG5cdCAgICAgICAgICAgIGlmIChpc1ByaW1lKG4pKSB7XG5cdCAgICAgICAgICAgICAgICBpZiAoblByaW1lIDwgOCkge1xuXHQgICAgICAgICAgICAgICAgICAgIEhbblByaW1lXSA9IGdldEZyYWN0aW9uYWxCaXRzKE1hdGgucG93KG4sIDEgLyAyKSk7XG5cdCAgICAgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgICAgICBLW25QcmltZV0gPSBnZXRGcmFjdGlvbmFsQml0cyhNYXRoLnBvdyhuLCAxIC8gMykpO1xuXG5cdCAgICAgICAgICAgICAgICBuUHJpbWUrKztcblx0ICAgICAgICAgICAgfVxuXG5cdCAgICAgICAgICAgIG4rKztcblx0ICAgICAgICB9XG5cdCAgICB9KCkpO1xuXG5cdCAgICAvLyBSZXVzYWJsZSBvYmplY3Rcblx0ICAgIHZhciBXID0gW107XG5cblx0ICAgIC8qKlxuXHQgICAgICogU0hBLTI1NiBoYXNoIGFsZ29yaXRobS5cblx0ICAgICAqL1xuXHQgICAgdmFyIFNIQTI1NiA9IENfYWxnby5TSEEyNTYgPSBIYXNoZXIuZXh0ZW5kKHtcblx0ICAgICAgICBfZG9SZXNldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICB0aGlzLl9oYXNoID0gbmV3IFdvcmRBcnJheS5pbml0KEguc2xpY2UoMCkpO1xuXHQgICAgICAgIH0sXG5cblx0ICAgICAgICBfZG9Qcm9jZXNzQmxvY2s6IGZ1bmN0aW9uIChNLCBvZmZzZXQpIHtcblx0ICAgICAgICAgICAgLy8gU2hvcnRjdXRcblx0ICAgICAgICAgICAgdmFyIEggPSB0aGlzLl9oYXNoLndvcmRzO1xuXG5cdCAgICAgICAgICAgIC8vIFdvcmtpbmcgdmFyaWFibGVzXG5cdCAgICAgICAgICAgIHZhciBhID0gSFswXTtcblx0ICAgICAgICAgICAgdmFyIGIgPSBIWzFdO1xuXHQgICAgICAgICAgICB2YXIgYyA9IEhbMl07XG5cdCAgICAgICAgICAgIHZhciBkID0gSFszXTtcblx0ICAgICAgICAgICAgdmFyIGUgPSBIWzRdO1xuXHQgICAgICAgICAgICB2YXIgZiA9IEhbNV07XG5cdCAgICAgICAgICAgIHZhciBnID0gSFs2XTtcblx0ICAgICAgICAgICAgdmFyIGggPSBIWzddO1xuXG5cdCAgICAgICAgICAgIC8vIENvbXB1dGF0aW9uXG5cdCAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgNjQ7IGkrKykge1xuXHQgICAgICAgICAgICAgICAgaWYgKGkgPCAxNikge1xuXHQgICAgICAgICAgICAgICAgICAgIFdbaV0gPSBNW29mZnNldCArIGldIHwgMDtcblx0ICAgICAgICAgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICAgICAgICAgICAgdmFyIGdhbW1hMHggPSBXW2kgLSAxNV07XG5cdCAgICAgICAgICAgICAgICAgICAgdmFyIGdhbW1hMCAgPSAoKGdhbW1hMHggPDwgMjUpIHwgKGdhbW1hMHggPj4+IDcpKSAgXlxuXHQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChnYW1tYTB4IDw8IDE0KSB8IChnYW1tYTB4ID4+PiAxOCkpIF5cblx0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoZ2FtbWEweCA+Pj4gMyk7XG5cblx0ICAgICAgICAgICAgICAgICAgICB2YXIgZ2FtbWExeCA9IFdbaSAtIDJdO1xuXHQgICAgICAgICAgICAgICAgICAgIHZhciBnYW1tYTEgID0gKChnYW1tYTF4IDw8IDE1KSB8IChnYW1tYTF4ID4+PiAxNykpIF5cblx0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoZ2FtbWExeCA8PCAxMykgfCAoZ2FtbWExeCA+Pj4gMTkpKSBeXG5cdCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGdhbW1hMXggPj4+IDEwKTtcblxuXHQgICAgICAgICAgICAgICAgICAgIFdbaV0gPSBnYW1tYTAgKyBXW2kgLSA3XSArIGdhbW1hMSArIFdbaSAtIDE2XTtcblx0ICAgICAgICAgICAgICAgIH1cblxuXHQgICAgICAgICAgICAgICAgdmFyIGNoICA9IChlICYgZikgXiAofmUgJiBnKTtcblx0ICAgICAgICAgICAgICAgIHZhciBtYWogPSAoYSAmIGIpIF4gKGEgJiBjKSBeIChiICYgYyk7XG5cblx0ICAgICAgICAgICAgICAgIHZhciBzaWdtYTAgPSAoKGEgPDwgMzApIHwgKGEgPj4+IDIpKSBeICgoYSA8PCAxOSkgfCAoYSA+Pj4gMTMpKSBeICgoYSA8PCAxMCkgfCAoYSA+Pj4gMjIpKTtcblx0ICAgICAgICAgICAgICAgIHZhciBzaWdtYTEgPSAoKGUgPDwgMjYpIHwgKGUgPj4+IDYpKSBeICgoZSA8PCAyMSkgfCAoZSA+Pj4gMTEpKSBeICgoZSA8PCA3KSAgfCAoZSA+Pj4gMjUpKTtcblxuXHQgICAgICAgICAgICAgICAgdmFyIHQxID0gaCArIHNpZ21hMSArIGNoICsgS1tpXSArIFdbaV07XG5cdCAgICAgICAgICAgICAgICB2YXIgdDIgPSBzaWdtYTAgKyBtYWo7XG5cblx0ICAgICAgICAgICAgICAgIGggPSBnO1xuXHQgICAgICAgICAgICAgICAgZyA9IGY7XG5cdCAgICAgICAgICAgICAgICBmID0gZTtcblx0ICAgICAgICAgICAgICAgIGUgPSAoZCArIHQxKSB8IDA7XG5cdCAgICAgICAgICAgICAgICBkID0gYztcblx0ICAgICAgICAgICAgICAgIGMgPSBiO1xuXHQgICAgICAgICAgICAgICAgYiA9IGE7XG5cdCAgICAgICAgICAgICAgICBhID0gKHQxICsgdDIpIHwgMDtcblx0ICAgICAgICAgICAgfVxuXG5cdCAgICAgICAgICAgIC8vIEludGVybWVkaWF0ZSBoYXNoIHZhbHVlXG5cdCAgICAgICAgICAgIEhbMF0gPSAoSFswXSArIGEpIHwgMDtcblx0ICAgICAgICAgICAgSFsxXSA9IChIWzFdICsgYikgfCAwO1xuXHQgICAgICAgICAgICBIWzJdID0gKEhbMl0gKyBjKSB8IDA7XG5cdCAgICAgICAgICAgIEhbM10gPSAoSFszXSArIGQpIHwgMDtcblx0ICAgICAgICAgICAgSFs0XSA9IChIWzRdICsgZSkgfCAwO1xuXHQgICAgICAgICAgICBIWzVdID0gKEhbNV0gKyBmKSB8IDA7XG5cdCAgICAgICAgICAgIEhbNl0gPSAoSFs2XSArIGcpIHwgMDtcblx0ICAgICAgICAgICAgSFs3XSA9IChIWzddICsgaCkgfCAwO1xuXHQgICAgICAgIH0sXG5cblx0ICAgICAgICBfZG9GaW5hbGl6ZTogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICAvLyBTaG9ydGN1dHNcblx0ICAgICAgICAgICAgdmFyIGRhdGEgPSB0aGlzLl9kYXRhO1xuXHQgICAgICAgICAgICB2YXIgZGF0YVdvcmRzID0gZGF0YS53b3JkcztcblxuXHQgICAgICAgICAgICB2YXIgbkJpdHNUb3RhbCA9IHRoaXMuX25EYXRhQnl0ZXMgKiA4O1xuXHQgICAgICAgICAgICB2YXIgbkJpdHNMZWZ0ID0gZGF0YS5zaWdCeXRlcyAqIDg7XG5cblx0ICAgICAgICAgICAgLy8gQWRkIHBhZGRpbmdcblx0ICAgICAgICAgICAgZGF0YVdvcmRzW25CaXRzTGVmdCA+Pj4gNV0gfD0gMHg4MCA8PCAoMjQgLSBuQml0c0xlZnQgJSAzMik7XG5cdCAgICAgICAgICAgIGRhdGFXb3Jkc1soKChuQml0c0xlZnQgKyA2NCkgPj4+IDkpIDw8IDQpICsgMTRdID0gTWF0aC5mbG9vcihuQml0c1RvdGFsIC8gMHgxMDAwMDAwMDApO1xuXHQgICAgICAgICAgICBkYXRhV29yZHNbKCgobkJpdHNMZWZ0ICsgNjQpID4+PiA5KSA8PCA0KSArIDE1XSA9IG5CaXRzVG90YWw7XG5cdCAgICAgICAgICAgIGRhdGEuc2lnQnl0ZXMgPSBkYXRhV29yZHMubGVuZ3RoICogNDtcblxuXHQgICAgICAgICAgICAvLyBIYXNoIGZpbmFsIGJsb2Nrc1xuXHQgICAgICAgICAgICB0aGlzLl9wcm9jZXNzKCk7XG5cblx0ICAgICAgICAgICAgLy8gUmV0dXJuIGZpbmFsIGNvbXB1dGVkIGhhc2hcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2hhc2g7XG5cdCAgICAgICAgfSxcblxuXHQgICAgICAgIGNsb25lOiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHZhciBjbG9uZSA9IEhhc2hlci5jbG9uZS5jYWxsKHRoaXMpO1xuXHQgICAgICAgICAgICBjbG9uZS5faGFzaCA9IHRoaXMuX2hhc2guY2xvbmUoKTtcblxuXHQgICAgICAgICAgICByZXR1cm4gY2xvbmU7XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cblx0ICAgIC8qKlxuXHQgICAgICogU2hvcnRjdXQgZnVuY3Rpb24gdG8gdGhlIGhhc2hlcidzIG9iamVjdCBpbnRlcmZhY2UuXG5cdCAgICAgKlxuXHQgICAgICogQHBhcmFtIHtXb3JkQXJyYXl8c3RyaW5nfSBtZXNzYWdlIFRoZSBtZXNzYWdlIHRvIGhhc2guXG5cdCAgICAgKlxuXHQgICAgICogQHJldHVybiB7V29yZEFycmF5fSBUaGUgaGFzaC5cblx0ICAgICAqXG5cdCAgICAgKiBAc3RhdGljXG5cdCAgICAgKlxuXHQgICAgICogQGV4YW1wbGVcblx0ICAgICAqXG5cdCAgICAgKiAgICAgdmFyIGhhc2ggPSBDcnlwdG9KUy5TSEEyNTYoJ21lc3NhZ2UnKTtcblx0ICAgICAqICAgICB2YXIgaGFzaCA9IENyeXB0b0pTLlNIQTI1Nih3b3JkQXJyYXkpO1xuXHQgICAgICovXG5cdCAgICBDLlNIQTI1NiA9IEhhc2hlci5fY3JlYXRlSGVscGVyKFNIQTI1Nik7XG5cblx0ICAgIC8qKlxuXHQgICAgICogU2hvcnRjdXQgZnVuY3Rpb24gdG8gdGhlIEhNQUMncyBvYmplY3QgaW50ZXJmYWNlLlxuXHQgICAgICpcblx0ICAgICAqIEBwYXJhbSB7V29yZEFycmF5fHN0cmluZ30gbWVzc2FnZSBUaGUgbWVzc2FnZSB0byBoYXNoLlxuXHQgICAgICogQHBhcmFtIHtXb3JkQXJyYXl8c3RyaW5nfSBrZXkgVGhlIHNlY3JldCBrZXkuXG5cdCAgICAgKlxuXHQgICAgICogQHJldHVybiB7V29yZEFycmF5fSBUaGUgSE1BQy5cblx0ICAgICAqXG5cdCAgICAgKiBAc3RhdGljXG5cdCAgICAgKlxuXHQgICAgICogQGV4YW1wbGVcblx0ICAgICAqXG5cdCAgICAgKiAgICAgdmFyIGhtYWMgPSBDcnlwdG9KUy5IbWFjU0hBMjU2KG1lc3NhZ2UsIGtleSk7XG5cdCAgICAgKi9cblx0ICAgIEMuSG1hY1NIQTI1NiA9IEhhc2hlci5fY3JlYXRlSG1hY0hlbHBlcihTSEEyNTYpO1xuXHR9KE1hdGgpKTtcblxuXG5cdHJldHVybiBDcnlwdG9KUy5TSEEyNTY7XG5cbn0pKTsiXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///63009\n")},63069:(I,g,t)=>{"use strict";I.exports=t.p+"dcee6b2079fb9b7f7c89.png"},63141:(I,g,t)=>{"use strict";I.exports=t.p+"06ae1ca78547fb5fa4a9.png"},63164:function(__unused_webpack_module,__unused_webpack_exports,__webpack_require__){eval("//! moment.js locale configuration\n//! locale : Korean [ko]\n//! author : Kyungwook, Park : https://github.com/kyungw00k\n//! author : Jeeeyul Lee \n\n;(function (global, factory) {\n true ? factory(__webpack_require__(95093)) :\n 0\n}(this, (function (moment) { 'use strict';\n\n //! moment.js locale configuration\n\n var ko = moment.defineLocale('ko', {\n months: '1월_2월_3월_4월_5월_6월_7월_8월_9월_10월_11월_12월'.split('_'),\n monthsShort: '1월_2월_3월_4월_5월_6월_7월_8월_9월_10월_11월_12월'.split(\n '_'\n ),\n weekdays: '일요일_월요일_화요일_수요일_목요일_금요일_토요일'.split('_'),\n weekdaysShort: '일_월_화_수_목_금_토'.split('_'),\n weekdaysMin: '일_월_화_수_목_금_토'.split('_'),\n longDateFormat: {\n LT: 'A h:mm',\n LTS: 'A h:mm:ss',\n L: 'YYYY.MM.DD.',\n LL: 'YYYY년 MMMM D일',\n LLL: 'YYYY년 MMMM D일 A h:mm',\n LLLL: 'YYYY년 MMMM D일 dddd A h:mm',\n l: 'YYYY.MM.DD.',\n ll: 'YYYY년 MMMM D일',\n lll: 'YYYY년 MMMM D일 A h:mm',\n llll: 'YYYY년 MMMM D일 dddd A h:mm',\n },\n calendar: {\n sameDay: '오늘 LT',\n nextDay: '내일 LT',\n nextWeek: 'dddd LT',\n lastDay: '어제 LT',\n lastWeek: '지난주 dddd LT',\n sameElse: 'L',\n },\n relativeTime: {\n future: '%s 후',\n past: '%s 전',\n s: '몇 초',\n ss: '%d초',\n m: '1분',\n mm: '%d분',\n h: '한 시간',\n hh: '%d시간',\n d: '하루',\n dd: '%d일',\n M: '한 달',\n MM: '%d달',\n y: '일 년',\n yy: '%d년',\n },\n dayOfMonthOrdinalParse: /\\d{1,2}(일|월|주)/,\n ordinal: function (number, period) {\n switch (period) {\n case 'd':\n case 'D':\n case 'DDD':\n return number + '일';\n case 'M':\n return number + '월';\n case 'w':\n case 'W':\n return number + '주';\n default:\n return number;\n }\n },\n meridiemParse: /오전|오후/,\n isPM: function (token) {\n return token === '오후';\n },\n meridiem: function (hour, minute, isUpper) {\n return hour < 12 ? '오전' : '오후';\n },\n });\n\n return ko;\n\n})));\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNjMxNjQuanMiLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vaXRnLW5leHRnZW4tZnJvbnRlbmQvLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9rby5qcz8yMmY4Il0sInNvdXJjZXNDb250ZW50IjpbIi8vISBtb21lbnQuanMgbG9jYWxlIGNvbmZpZ3VyYXRpb25cbi8vISBsb2NhbGUgOiBLb3JlYW4gW2tvXVxuLy8hIGF1dGhvciA6IEt5dW5nd29vaywgUGFyayA6IGh0dHBzOi8vZ2l0aHViLmNvbS9reXVuZ3cwMGtcbi8vISBhdXRob3IgOiBKZWVleXVsIExlZSA8amVlZXl1bEBnbWFpbC5jb20+XG5cbjsoZnVuY3Rpb24gKGdsb2JhbCwgZmFjdG9yeSkge1xuICAgdHlwZW9mIGV4cG9ydHMgPT09ICdvYmplY3QnICYmIHR5cGVvZiBtb2R1bGUgIT09ICd1bmRlZmluZWQnXG4gICAgICAgJiYgdHlwZW9mIHJlcXVpcmUgPT09ICdmdW5jdGlvbicgPyBmYWN0b3J5KHJlcXVpcmUoJy4uL21vbWVudCcpKSA6XG4gICB0eXBlb2YgZGVmaW5lID09PSAnZnVuY3Rpb24nICYmIGRlZmluZS5hbWQgPyBkZWZpbmUoWycuLi9tb21lbnQnXSwgZmFjdG9yeSkgOlxuICAgZmFjdG9yeShnbG9iYWwubW9tZW50KVxufSh0aGlzLCAoZnVuY3Rpb24gKG1vbWVudCkgeyAndXNlIHN0cmljdCc7XG5cbiAgICAvLyEgbW9tZW50LmpzIGxvY2FsZSBjb25maWd1cmF0aW9uXG5cbiAgICB2YXIga28gPSBtb21lbnQuZGVmaW5lTG9jYWxlKCdrbycsIHtcbiAgICAgICAgbW9udGhzOiAnMeyblF8y7JuUXzPsm5RfNOyblF817JuUXzbsm5RfN+yblF847JuUXznsm5RfMTDsm5RfMTHsm5RfMTLsm5QnLnNwbGl0KCdfJyksXG4gICAgICAgIG1vbnRoc1Nob3J0OiAnMeyblF8y7JuUXzPsm5RfNOyblF817JuUXzbsm5RfN+yblF847JuUXznsm5RfMTDsm5RfMTHsm5RfMTLsm5QnLnNwbGl0KFxuICAgICAgICAgICAgJ18nXG4gICAgICAgICksXG4gICAgICAgIHdlZWtkYXlzOiAn7J287JqU7J28X+yblOyalOydvF/tmZTsmpTsnbxf7IiY7JqU7J28X+uqqeyalOydvF/quIjsmpTsnbxf7Yag7JqU7J28Jy5zcGxpdCgnXycpLFxuICAgICAgICB3ZWVrZGF5c1Nob3J0OiAn7J28X+yblF/tmZRf7IiYX+uqqV/quIhf7YagJy5zcGxpdCgnXycpLFxuICAgICAgICB3ZWVrZGF5c01pbjogJ+ydvF/sm5Rf7ZmUX+yImF/rqqlf6riIX+2GoCcuc3BsaXQoJ18nKSxcbiAgICAgICAgbG9uZ0RhdGVGb3JtYXQ6IHtcbiAgICAgICAgICAgIExUOiAnQSBoOm1tJyxcbiAgICAgICAgICAgIExUUzogJ0EgaDptbTpzcycsXG4gICAgICAgICAgICBMOiAnWVlZWS5NTS5ERC4nLFxuICAgICAgICAgICAgTEw6ICdZWVlZ64WEIE1NTU0gROydvCcsXG4gICAgICAgICAgICBMTEw6ICdZWVlZ64WEIE1NTU0gROydvCBBIGg6bW0nLFxuICAgICAgICAgICAgTExMTDogJ1lZWVnrhYQgTU1NTSBE7J28IGRkZGQgQSBoOm1tJyxcbiAgICAgICAgICAgIGw6ICdZWVlZLk1NLkRELicsXG4gICAgICAgICAgICBsbDogJ1lZWVnrhYQgTU1NTSBE7J28JyxcbiAgICAgICAgICAgIGxsbDogJ1lZWVnrhYQgTU1NTSBE7J28IEEgaDptbScsXG4gICAgICAgICAgICBsbGxsOiAnWVlZWeuFhCBNTU1NIETsnbwgZGRkZCBBIGg6bW0nLFxuICAgICAgICB9LFxuICAgICAgICBjYWxlbmRhcjoge1xuICAgICAgICAgICAgc2FtZURheTogJ+yYpOuKmCBMVCcsXG4gICAgICAgICAgICBuZXh0RGF5OiAn64K07J28IExUJyxcbiAgICAgICAgICAgIG5leHRXZWVrOiAnZGRkZCBMVCcsXG4gICAgICAgICAgICBsYXN0RGF5OiAn7Ja07KCcIExUJyxcbiAgICAgICAgICAgIGxhc3RXZWVrOiAn7KeA64Kc7KO8IGRkZGQgTFQnLFxuICAgICAgICAgICAgc2FtZUVsc2U6ICdMJyxcbiAgICAgICAgfSxcbiAgICAgICAgcmVsYXRpdmVUaW1lOiB7XG4gICAgICAgICAgICBmdXR1cmU6ICclcyDtm4QnLFxuICAgICAgICAgICAgcGFzdDogJyVzIOyghCcsXG4gICAgICAgICAgICBzOiAn66qHIOy0iCcsXG4gICAgICAgICAgICBzczogJyVk7LSIJyxcbiAgICAgICAgICAgIG06ICcx67aEJyxcbiAgICAgICAgICAgIG1tOiAnJWTrtoQnLFxuICAgICAgICAgICAgaDogJ+2VnCDsi5zqsIQnLFxuICAgICAgICAgICAgaGg6ICclZOyLnOqwhCcsXG4gICAgICAgICAgICBkOiAn7ZWY66OoJyxcbiAgICAgICAgICAgIGRkOiAnJWTsnbwnLFxuICAgICAgICAgICAgTTogJ+2VnCDri6wnLFxuICAgICAgICAgICAgTU06ICclZOuLrCcsXG4gICAgICAgICAgICB5OiAn7J28IOuFhCcsXG4gICAgICAgICAgICB5eTogJyVk64WEJyxcbiAgICAgICAgfSxcbiAgICAgICAgZGF5T2ZNb250aE9yZGluYWxQYXJzZTogL1xcZHsxLDJ9KOydvHzsm5R87KO8KS8sXG4gICAgICAgIG9yZGluYWw6IGZ1bmN0aW9uIChudW1iZXIsIHBlcmlvZCkge1xuICAgICAgICAgICAgc3dpdGNoIChwZXJpb2QpIHtcbiAgICAgICAgICAgICAgICBjYXNlICdkJzpcbiAgICAgICAgICAgICAgICBjYXNlICdEJzpcbiAgICAgICAgICAgICAgICBjYXNlICdEREQnOlxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gbnVtYmVyICsgJ+ydvCc7XG4gICAgICAgICAgICAgICAgY2FzZSAnTSc6XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBudW1iZXIgKyAn7JuUJztcbiAgICAgICAgICAgICAgICBjYXNlICd3JzpcbiAgICAgICAgICAgICAgICBjYXNlICdXJzpcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG51bWJlciArICfso7wnO1xuICAgICAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBudW1iZXI7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIG1lcmlkaWVtUGFyc2U6IC/smKTsoIR87Jik7ZuELyxcbiAgICAgICAgaXNQTTogZnVuY3Rpb24gKHRva2VuKSB7XG4gICAgICAgICAgICByZXR1cm4gdG9rZW4gPT09ICfsmKTtm4QnO1xuICAgICAgICB9LFxuICAgICAgICBtZXJpZGllbTogZnVuY3Rpb24gKGhvdXIsIG1pbnV0ZSwgaXNVcHBlcikge1xuICAgICAgICAgICAgcmV0dXJuIGhvdXIgPCAxMiA/ICfsmKTsoIQnIDogJ+yYpO2bhCc7XG4gICAgICAgIH0sXG4gICAgfSk7XG5cbiAgICByZXR1cm4ga287XG5cbn0pKSk7XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///63164\n")},63421:(I,g,t)=>{"use strict";I.exports=t.p+"085f150ea3b79ac5fe49.png"},63600:(module,__unused_webpack_exports,__webpack_require__)=>{"use strict";eval('// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// "Software"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n// a passthrough stream.\n// basically just the most minimal sort of Transform stream.\n// Every written chunk gets output as-is.\n\n\n\nmodule.exports = PassThrough;\nvar Transform = __webpack_require__(74610);\n__webpack_require__(56698)(PassThrough, Transform);\nfunction PassThrough(options) {\n if (!(this instanceof PassThrough)) return new PassThrough(options);\n Transform.call(this, options);\n}\nPassThrough.prototype._transform = function (chunk, encoding, cb) {\n cb(null, chunk);\n};//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNjM2MDAuanMiLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9pdGctbmV4dGdlbi1mcm9udGVuZC8uL25vZGVfbW9kdWxlcy9yZWFkYWJsZS1zdHJlYW0vbGliL19zdHJlYW1fcGFzc3Rocm91Z2guanM/NzgwZiJdLCJzb3VyY2VzQ29udGVudCI6WyIvLyBDb3B5cmlnaHQgSm95ZW50LCBJbmMuIGFuZCBvdGhlciBOb2RlIGNvbnRyaWJ1dG9ycy5cbi8vXG4vLyBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYVxuLy8gY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZVxuLy8gXCJTb2Z0d2FyZVwiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nXG4vLyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsXG4vLyBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0XG4vLyBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGVcbi8vIGZvbGxvd2luZyBjb25kaXRpb25zOlxuLy9cbi8vIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkXG4vLyBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS5cbi8vXG4vLyBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTXG4vLyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GXG4vLyBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOXG4vLyBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSxcbi8vIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUlxuLy8gT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRVxuLy8gVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS5cblxuLy8gYSBwYXNzdGhyb3VnaCBzdHJlYW0uXG4vLyBiYXNpY2FsbHkganVzdCB0aGUgbW9zdCBtaW5pbWFsIHNvcnQgb2YgVHJhbnNmb3JtIHN0cmVhbS5cbi8vIEV2ZXJ5IHdyaXR0ZW4gY2h1bmsgZ2V0cyBvdXRwdXQgYXMtaXMuXG5cbid1c2Ugc3RyaWN0JztcblxubW9kdWxlLmV4cG9ydHMgPSBQYXNzVGhyb3VnaDtcbnZhciBUcmFuc2Zvcm0gPSByZXF1aXJlKCcuL19zdHJlYW1fdHJhbnNmb3JtJyk7XG5yZXF1aXJlKCdpbmhlcml0cycpKFBhc3NUaHJvdWdoLCBUcmFuc2Zvcm0pO1xuZnVuY3Rpb24gUGFzc1Rocm91Z2gob3B0aW9ucykge1xuICBpZiAoISh0aGlzIGluc3RhbmNlb2YgUGFzc1Rocm91Z2gpKSByZXR1cm4gbmV3IFBhc3NUaHJvdWdoKG9wdGlvbnMpO1xuICBUcmFuc2Zvcm0uY2FsbCh0aGlzLCBvcHRpb25zKTtcbn1cblBhc3NUaHJvdWdoLnByb3RvdHlwZS5fdHJhbnNmb3JtID0gZnVuY3Rpb24gKGNodW5rLCBlbmNvZGluZywgY2IpIHtcbiAgY2IobnVsbCwgY2h1bmspO1xufTsiXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///63600\n')},64051:function(__unused_webpack_module,__unused_webpack_exports,__webpack_require__){eval("//! moment.js locale configuration\n//! locale : Pseudo [x-pseudo]\n//! author : Andrew Hood : https://github.com/andrewhood125\n\n;(function (global, factory) {\n true ? factory(__webpack_require__(95093)) :\n 0\n}(this, (function (moment) { 'use strict';\n\n //! moment.js locale configuration\n\n var xPseudo = moment.defineLocale('x-pseudo', {\n months: 'J~áñúá~rý_F~ébrú~árý_~Márc~h_Áp~ríl_~Máý_~Júñé~_Júl~ý_Áú~gúst~_Sép~témb~ér_Ó~ctób~ér_Ñ~óvém~bér_~Décé~mbér'.split(\n '_'\n ),\n monthsShort:\n 'J~áñ_~Féb_~Már_~Ápr_~Máý_~Júñ_~Júl_~Áúg_~Sép_~Óct_~Ñóv_~Déc'.split(\n '_'\n ),\n monthsParseExact: true,\n weekdays:\n 'S~úñdá~ý_Mó~ñdáý~_Túé~sdáý~_Wéd~ñésd~áý_T~húrs~dáý_~Fríd~áý_S~átúr~dáý'.split(\n '_'\n ),\n weekdaysShort: 'S~úñ_~Móñ_~Túé_~Wéd_~Thú_~Frí_~Sát'.split('_'),\n weekdaysMin: 'S~ú_Mó~_Tú_~Wé_T~h_Fr~_Sá'.split('_'),\n weekdaysParseExact: true,\n longDateFormat: {\n LT: 'HH:mm',\n L: 'DD/MM/YYYY',\n LL: 'D MMMM YYYY',\n LLL: 'D MMMM YYYY HH:mm',\n LLLL: 'dddd, D MMMM YYYY HH:mm',\n },\n calendar: {\n sameDay: '[T~ódá~ý át] LT',\n nextDay: '[T~ómó~rró~w át] LT',\n nextWeek: 'dddd [át] LT',\n lastDay: '[Ý~ést~érdá~ý át] LT',\n lastWeek: '[L~ást] dddd [át] LT',\n sameElse: 'L',\n },\n relativeTime: {\n future: 'í~ñ %s',\n past: '%s á~gó',\n s: 'á ~féw ~sécó~ñds',\n ss: '%d s~écóñ~ds',\n m: 'á ~míñ~úté',\n mm: '%d m~íñú~tés',\n h: 'á~ñ hó~úr',\n hh: '%d h~óúrs',\n d: 'á ~dáý',\n dd: '%d d~áýs',\n M: 'á ~móñ~th',\n MM: '%d m~óñt~hs',\n y: 'á ~ýéár',\n yy: '%d ý~éárs',\n },\n dayOfMonthOrdinalParse: /\\d{1,2}(th|st|nd|rd)/,\n ordinal: function (number) {\n var b = number % 10,\n output =\n ~~((number % 100) / 10) === 1\n ? 'th'\n : b === 1\n ? 'st'\n : b === 2\n ? 'nd'\n : b === 3\n ? 'rd'\n : 'th';\n return number + output;\n },\n week: {\n dow: 1, // Monday is the first day of the week.\n doy: 4, // The week that contains Jan 4th is the first week of the year.\n },\n });\n\n return xPseudo;\n\n})));\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNjQwNTEuanMiLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9pdGctbmV4dGdlbi1mcm9udGVuZC8uL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL3gtcHNldWRvLmpzP2ZkN2UiXSwic291cmNlc0NvbnRlbnQiOlsiLy8hIG1vbWVudC5qcyBsb2NhbGUgY29uZmlndXJhdGlvblxuLy8hIGxvY2FsZSA6IFBzZXVkbyBbeC1wc2V1ZG9dXG4vLyEgYXV0aG9yIDogQW5kcmV3IEhvb2QgOiBodHRwczovL2dpdGh1Yi5jb20vYW5kcmV3aG9vZDEyNVxuXG47KGZ1bmN0aW9uIChnbG9iYWwsIGZhY3RvcnkpIHtcbiAgIHR5cGVvZiBleHBvcnRzID09PSAnb2JqZWN0JyAmJiB0eXBlb2YgbW9kdWxlICE9PSAndW5kZWZpbmVkJ1xuICAgICAgICYmIHR5cGVvZiByZXF1aXJlID09PSAnZnVuY3Rpb24nID8gZmFjdG9yeShyZXF1aXJlKCcuLi9tb21lbnQnKSkgOlxuICAgdHlwZW9mIGRlZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiBkZWZpbmUuYW1kID8gZGVmaW5lKFsnLi4vbW9tZW50J10sIGZhY3RvcnkpIDpcbiAgIGZhY3RvcnkoZ2xvYmFsLm1vbWVudClcbn0odGhpcywgKGZ1bmN0aW9uIChtb21lbnQpIHsgJ3VzZSBzdHJpY3QnO1xuXG4gICAgLy8hIG1vbWVudC5qcyBsb2NhbGUgY29uZmlndXJhdGlvblxuXG4gICAgdmFyIHhQc2V1ZG8gPSBtb21lbnQuZGVmaW5lTG9jYWxlKCd4LXBzZXVkbycsIHtcbiAgICAgICAgbW9udGhzOiAnSn7DocOxw7rDoX5yw71fRn7DqWJyw7p+w6Fyw71ffk3DoXJjfmhfw4FwfnLDrWxffk3DocO9X35Kw7rDscOpfl9Kw7psfsO9X8OBw7p+Z8O6c3R+X1PDqXB+dMOpbWJ+w6lyX8OTfmN0w7NifsOpcl/DkX7Ds3bDqW1+YsOpcl9+RMOpY8Opfm1iw6lyJy5zcGxpdChcbiAgICAgICAgICAgICdfJ1xuICAgICAgICApLFxuICAgICAgICBtb250aHNTaG9ydDpcbiAgICAgICAgICAgICdKfsOhw7FffkbDqWJffk3DoXJffsOBcHJffk3DocO9X35Kw7rDsV9+SsO6bF9+w4HDumdfflPDqXBffsOTY3RffsORw7N2X35Ew6ljJy5zcGxpdChcbiAgICAgICAgICAgICAgICAnXydcbiAgICAgICAgICAgICksXG4gICAgICAgIG1vbnRoc1BhcnNlRXhhY3Q6IHRydWUsXG4gICAgICAgIHdlZWtkYXlzOlxuICAgICAgICAgICAgJ1N+w7rDsWTDoX7DvV9Nw7N+w7Fkw6HDvX5fVMO6w6l+c2TDocO9fl9Xw6lkfsOxw6lzZH7DocO9X1R+aMO6cnN+ZMOhw71ffkZyw61kfsOhw71fU37DoXTDunJ+ZMOhw70nLnNwbGl0KFxuICAgICAgICAgICAgICAgICdfJ1xuICAgICAgICAgICAgKSxcbiAgICAgICAgd2Vla2RheXNTaG9ydDogJ1N+w7rDsV9+TcOzw7FfflTDusOpX35Xw6lkX35UaMO6X35GcsOtX35Tw6F0Jy5zcGxpdCgnXycpLFxuICAgICAgICB3ZWVrZGF5c01pbjogJ1N+w7pfTcOzfl9Uw7pfflfDqV9UfmhfRnJ+X1PDoScuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXNQYXJzZUV4YWN0OiB0cnVlLFxuICAgICAgICBsb25nRGF0ZUZvcm1hdDoge1xuICAgICAgICAgICAgTFQ6ICdISDptbScsXG4gICAgICAgICAgICBMOiAnREQvTU0vWVlZWScsXG4gICAgICAgICAgICBMTDogJ0QgTU1NTSBZWVlZJyxcbiAgICAgICAgICAgIExMTDogJ0QgTU1NTSBZWVlZIEhIOm1tJyxcbiAgICAgICAgICAgIExMTEw6ICdkZGRkLCBEIE1NTU0gWVlZWSBISDptbScsXG4gICAgICAgIH0sXG4gICAgICAgIGNhbGVuZGFyOiB7XG4gICAgICAgICAgICBzYW1lRGF5OiAnW1R+w7Nkw6F+w70gw6F0XSBMVCcsXG4gICAgICAgICAgICBuZXh0RGF5OiAnW1R+w7Ntw7N+cnLDs353IMOhdF0gTFQnLFxuICAgICAgICAgICAgbmV4dFdlZWs6ICdkZGRkIFvDoXRdIExUJyxcbiAgICAgICAgICAgIGxhc3REYXk6ICdbw51+w6lzdH7DqXJkw6F+w70gw6F0XSBMVCcsXG4gICAgICAgICAgICBsYXN0V2VlazogJ1tMfsOhc3RdIGRkZGQgW8OhdF0gTFQnLFxuICAgICAgICAgICAgc2FtZUVsc2U6ICdMJyxcbiAgICAgICAgfSxcbiAgICAgICAgcmVsYXRpdmVUaW1lOiB7XG4gICAgICAgICAgICBmdXR1cmU6ICfDrX7DsSAlcycsXG4gICAgICAgICAgICBwYXN0OiAnJXMgw6F+Z8OzJyxcbiAgICAgICAgICAgIHM6ICfDoSB+ZsOpdyB+c8OpY8OzfsOxZHMnLFxuICAgICAgICAgICAgc3M6ICclZCBzfsOpY8Ozw7F+ZHMnLFxuICAgICAgICAgICAgbTogJ8OhIH5tw63DsX7DunTDqScsXG4gICAgICAgICAgICBtbTogJyVkIG1+w63DscO6fnTDqXMnLFxuICAgICAgICAgICAgaDogJ8OhfsOxIGjDs37DunInLFxuICAgICAgICAgICAgaGg6ICclZCBofsOzw7pycycsXG4gICAgICAgICAgICBkOiAnw6EgfmTDocO9JyxcbiAgICAgICAgICAgIGRkOiAnJWQgZH7DocO9cycsXG4gICAgICAgICAgICBNOiAnw6Egfm3Ds8OxfnRoJyxcbiAgICAgICAgICAgIE1NOiAnJWQgbX7Ds8OxdH5ocycsXG4gICAgICAgICAgICB5OiAnw6EgfsO9w6nDoXInLFxuICAgICAgICAgICAgeXk6ICclZCDDvX7DqcOhcnMnLFxuICAgICAgICB9LFxuICAgICAgICBkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOiAvXFxkezEsMn0odGh8c3R8bmR8cmQpLyxcbiAgICAgICAgb3JkaW5hbDogZnVuY3Rpb24gKG51bWJlcikge1xuICAgICAgICAgICAgdmFyIGIgPSBudW1iZXIgJSAxMCxcbiAgICAgICAgICAgICAgICBvdXRwdXQgPVxuICAgICAgICAgICAgICAgICAgICB+figobnVtYmVyICUgMTAwKSAvIDEwKSA9PT0gMVxuICAgICAgICAgICAgICAgICAgICAgICAgPyAndGgnXG4gICAgICAgICAgICAgICAgICAgICAgICA6IGIgPT09IDFcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPyAnc3QnXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDogYiA9PT0gMlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gJ25kJ1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogYiA9PT0gM1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPyAncmQnXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6ICd0aCc7XG4gICAgICAgICAgICByZXR1cm4gbnVtYmVyICsgb3V0cHV0O1xuICAgICAgICB9LFxuICAgICAgICB3ZWVrOiB7XG4gICAgICAgICAgICBkb3c6IDEsIC8vIE1vbmRheSBpcyB0aGUgZmlyc3QgZGF5IG9mIHRoZSB3ZWVrLlxuICAgICAgICAgICAgZG95OiA0LCAvLyBUaGUgd2VlayB0aGF0IGNvbnRhaW5zIEphbiA0dGggaXMgdGhlIGZpcnN0IHdlZWsgb2YgdGhlIHllYXIuXG4gICAgICAgIH0sXG4gICAgfSk7XG5cbiAgICByZXR1cm4geFBzZXVkbztcblxufSkpKTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///64051\n")},64082:(__unused_webpack_module,__webpack_exports__,__webpack_require__)=>{"use strict";eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ Context: () => (/* binding */ Context),\n/* harmony export */ ServiceProvider: () => (/* binding */ ServiceProvider),\n/* harmony export */ useServiceContext: () => (/* binding */ useServiceContext)\n/* harmony export */ });\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(24002);\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var _src_constants_constant__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(56597);\n/* harmony import */ var _azure_msal_react__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(77560);\n/* harmony import */ var _azure_msal_react__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(_azure_msal_react__WEBPACK_IMPORTED_MODULE_2__);\n/* harmony import */ var _forgerock_javascript_sdk__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(12748);\n/* harmony import */ var _forgerock_javascript_sdk__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(_forgerock_javascript_sdk__WEBPACK_IMPORTED_MODULE_3__);\n/* harmony import */ var _azure_msal_browser__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(149);\n/* harmony import */ var _azure_msal_browser__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(_azure_msal_browser__WEBPACK_IMPORTED_MODULE_4__);\n/* harmony import */ var _root_src_containers_msal_authConfig__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(56826);\n\n\n\n\n\n\nconst Context = /*#__PURE__*/(0,react__WEBPACK_IMPORTED_MODULE_0__.createContext)({});\nconst useService = () => {\n const {\n instance\n } = (0,_azure_msal_react__WEBPACK_IMPORTED_MODULE_2__.useMsal)();\n const [service, setService] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)({});\n const [shellTokenResponseData, setShellTokenResponseData] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)({});\n const [defaultServiceAppRemoteName, setDefaultServiceAppRemoteName] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)('');\n const [idpProvider, setIdpProvider] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)('');\n const [rbac, setRBAC] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)({});\n const [clientCode, setClientCode] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)({});\n const [loginMicroAppOption, setLoginMicroAppOption] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)({});\n const [logoutMicroAppOption, setLogoutMicroAppOption] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)({});\n const fetchMicrosoftADToken = async () => {\n let msalTokenResponse;\n const currentAccount = instance.getActiveAccount();\n const accessTokenRequest = {\n scopes: _root_src_containers_msal_authConfig__WEBPACK_IMPORTED_MODULE_5__/* .msalLoginRequest */ .go.scopes,\n account: currentAccount,\n refreshTokenExpirationOffsetSeconds: `${\"3600\"}`\n };\n try {\n msalTokenResponse = await instance.acquireTokenSilent(accessTokenRequest);\n } catch (error) {\n if (error instanceof _azure_msal_browser__WEBPACK_IMPORTED_MODULE_4__.InteractionRequiredAuthError) {\n msalTokenResponse = await instance.acquireTokenRedirect(accessTokenRequest);\n }\n }\n return msalTokenResponse;\n };\n const fetchAccessTokenResponse = async () => {\n let refreshedTokenResponse;\n let currentIdpProviderName = (0,_src_constants_constant__WEBPACK_IMPORTED_MODULE_1__/* .getCurrentIdpProvider */ .sC)();\n switch (currentIdpProviderName) {\n case _src_constants_constant__WEBPACK_IMPORTED_MODULE_1__/* .IdpProviderOption */ .EP.FORGE_ROCK:\n refreshedTokenResponse = await _forgerock_javascript_sdk__WEBPACK_IMPORTED_MODULE_3__.TokenStorage.get();\n break;\n case _src_constants_constant__WEBPACK_IMPORTED_MODULE_1__/* .IdpProviderOption */ .EP.KEY_CLOAK:\n const keyCloakInstanceData = window.keyCloakInstance;\n if (keyCloakInstanceData && Object.keys(keyCloakInstanceData)?.length > 0 && keyCloakInstanceData.authenticated === true) {\n refreshedTokenResponse = {\n accessToken: '',\n idToken: keyCloakInstanceData?.idToken\n };\n }\n break;\n case _src_constants_constant__WEBPACK_IMPORTED_MODULE_1__/* .IdpProviderOption */ .EP.MICROSOFT:\n let microsoftAdToken = await fetchMicrosoftADToken();\n refreshedTokenResponse = {\n accessToken: microsoftAdToken?.accessToken,\n idToken: microsoftAdToken?.idToken\n };\n break;\n default:\n break;\n }\n return refreshedTokenResponse;\n };\n return {\n ...service,\n setService,\n rbac,\n defaultServiceAppRemoteName,\n setDefaultServiceAppRemoteName,\n shellTokenResponseData,\n setShellTokenResponseData,\n idpProvider,\n setIdpProvider,\n setRBAC,\n clientCode,\n setClientCode,\n loginMicroAppOption,\n fetchAccessTokenResponse,\n logoutMicroAppOption,\n setLoginMicroAppOption,\n setLogoutMicroAppOption\n };\n};\nconst useServiceContext = () => {\n const context = (0,react__WEBPACK_IMPORTED_MODULE_0__.useContext)(Context);\n if (context === undefined) {\n throw new Error('ServiceContext value is undefined. Make sure you use the ServiceProvider before using the context.');\n }\n return context;\n};\nconst ServiceProvider = _ref => {\n let {\n children\n } = _ref;\n const value = useService();\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(Context.Provider, {\n value: value\n }, children);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNjQwODIuanMiLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7OztBQUFBO0FBT0E7QUFJQTtBQUNBO0FBQ0E7QUFDQTtBQXdCQTtBQUVBO0FBQ0E7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUtBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBRUE7QUFDQTtBQUdBO0FBRUE7QUFDQTtBQUVBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFFQTtBQUFBO0FBQUE7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL2l0Zy1uZXh0Z2VuLWZyb250ZW5kLy4vc3JjL3NlcnZpY2VzL3NoZWxsQ29udGV4dC5zZXJ2aWNlLnRzeD8yZTJjIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBSZWFjdCwge1xyXG4gIFJlYWN0Tm9kZSxcclxuICB1c2VTdGF0ZSxcclxuICBjcmVhdGVDb250ZXh0LFxyXG4gIHVzZUNvbnRleHQsXHJcbiAgUmVhY3RFbGVtZW50LFxyXG59IGZyb20gJ3JlYWN0JztcclxuaW1wb3J0IHtcclxuICBJZHBQcm92aWRlck9wdGlvbixcclxuICBnZXRDdXJyZW50SWRwUHJvdmlkZXIsXHJcbn0gZnJvbSAnQHNyYy9jb25zdGFudHMvY29uc3RhbnQnO1xyXG5pbXBvcnQgeyB1c2VNc2FsIH0gZnJvbSAnQGF6dXJlL21zYWwtcmVhY3QnO1xyXG5pbXBvcnQgeyBUb2tlblN0b3JhZ2UgfSBmcm9tICdAZm9yZ2Vyb2NrL2phdmFzY3JpcHQtc2RrJztcclxuaW1wb3J0IHsgSW50ZXJhY3Rpb25SZXF1aXJlZEF1dGhFcnJvciB9IGZyb20gJ0BhenVyZS9tc2FsLWJyb3dzZXInO1xyXG5pbXBvcnQgeyBtc2FsTG9naW5SZXF1ZXN0IH0gZnJvbSAnQHJvb3Qvc3JjL2NvbnRhaW5lcnMvbXNhbC9hdXRoQ29uZmlnJztcclxuXHJcbnR5cGUgU2VydmljZUNvbnRleHRQcm9wcyA9IHtcclxuICBzZXRTZXJ2aWNlOiAoY29uZmlnOiBhbnkpID0+IHZvaWQ7XHJcbiAgcmJhYzoge307XHJcbiAgY2xpZW50Q29kZToge307XHJcbiAgZGVmYXVsdFNlcnZpY2VBcHBSZW1vdGVOYW1lOiBib29sZWFuO1xyXG4gIHNldERlZmF1bHRTZXJ2aWNlQXBwUmVtb3RlTmFtZTogKCkgPT4gdm9pZDtcclxuICBzaGVsbFRva2VuUmVzcG9uc2VEYXRhOiB7fTtcclxuICBzZXRTaGVsbFRva2VuUmVzcG9uc2VEYXRhOiAoKSA9PiB2b2lkO1xyXG4gIGlkcFByb3ZpZGVyOiAnJztcclxuICBzZXRJZHBQcm92aWRlcjogKCkgPT4gdm9pZDtcclxuICBnZXRBbmRTZXRSQkFDOiAoKSA9PiB7fTtcclxuICBsb2dpbk1pY3JvQXBwT3B0aW9uOiB7fTtcclxuICBsb2dvdXRNaWNyb0FwcE9wdGlvbjoge307XHJcbiAgZmV0Y2hBY2Nlc3NUb2tlblJlc3BvbnNlOiAoKSA9PiB2b2lkO1xyXG4gIHNldExvZ2luTWljcm9BcHBPcHRpb246ICgpID0+IHZvaWQ7XHJcbiAgc2V0TG9nb3V0TWljcm9BcHBPcHRpb246ICgpID0+IHZvaWQ7XHJcbn07XHJcblxyXG50eXBlIFNlcnZpY2VQcm92aWRlclByb3BzID0ge1xyXG4gIGNoaWxkcmVuOiBSZWFjdE5vZGU7XHJcbn07XHJcblxyXG5leHBvcnQgY29uc3QgQ29udGV4dCA9IGNyZWF0ZUNvbnRleHQ8UGFydGlhbDxTZXJ2aWNlQ29udGV4dFByb3BzPj4oe30pO1xyXG5cclxuY29uc3QgdXNlU2VydmljZSA9ICgpOiBhbnkgPT4ge1xyXG4gIGNvbnN0IHsgaW5zdGFuY2UgfSA9IHVzZU1zYWwoKTtcclxuICBjb25zdCBbc2VydmljZSwgc2V0U2VydmljZV0gPSB1c2VTdGF0ZSh7fSk7XHJcbiAgY29uc3QgW3NoZWxsVG9rZW5SZXNwb25zZURhdGEsIHNldFNoZWxsVG9rZW5SZXNwb25zZURhdGFdID0gdXNlU3RhdGUoe30pO1xyXG4gIGNvbnN0IFtkZWZhdWx0U2VydmljZUFwcFJlbW90ZU5hbWUsIHNldERlZmF1bHRTZXJ2aWNlQXBwUmVtb3RlTmFtZV0gPVxyXG4gICAgdXNlU3RhdGU8YW55PignJyk7XHJcbiAgY29uc3QgW2lkcFByb3ZpZGVyLCBzZXRJZHBQcm92aWRlcl0gPSB1c2VTdGF0ZTxhbnk+KCcnKTtcclxuICBjb25zdCBbcmJhYywgc2V0UkJBQ10gPSB1c2VTdGF0ZSh7fSk7XHJcbiAgY29uc3QgW2NsaWVudENvZGUsIHNldENsaWVudENvZGVdID0gdXNlU3RhdGUoe30pO1xyXG4gIGNvbnN0IFtsb2dpbk1pY3JvQXBwT3B0aW9uLCBzZXRMb2dpbk1pY3JvQXBwT3B0aW9uXSA9IHVzZVN0YXRlKHt9KTtcclxuICBjb25zdCBbbG9nb3V0TWljcm9BcHBPcHRpb24sIHNldExvZ291dE1pY3JvQXBwT3B0aW9uXSA9IHVzZVN0YXRlKHt9KTtcclxuXHJcbiAgY29uc3QgZmV0Y2hNaWNyb3NvZnRBRFRva2VuID0gYXN5bmMgKCkgPT4ge1xyXG4gICAgbGV0IG1zYWxUb2tlblJlc3BvbnNlOiBhbnk7XHJcbiAgICBjb25zdCBjdXJyZW50QWNjb3VudCA9IGluc3RhbmNlLmdldEFjdGl2ZUFjY291bnQoKTtcclxuICAgIGNvbnN0IGFjY2Vzc1Rva2VuUmVxdWVzdDogYW55ID0ge1xyXG4gICAgICBzY29wZXM6IG1zYWxMb2dpblJlcXVlc3Quc2NvcGVzLFxyXG4gICAgICBhY2NvdW50OiBjdXJyZW50QWNjb3VudCxcclxuICAgICAgcmVmcmVzaFRva2VuRXhwaXJhdGlvbk9mZnNldFNlY29uZHM6IGAke3Byb2Nlc3MuZW52LlJFQUNUX0FQUF9NU0FMX1RPS0VORVhQSVJBVElPTlRJTUV9YCxcclxuICAgIH07XHJcbiAgICB0cnkge1xyXG4gICAgICBtc2FsVG9rZW5SZXNwb25zZSA9IGF3YWl0IGluc3RhbmNlLmFjcXVpcmVUb2tlblNpbGVudChhY2Nlc3NUb2tlblJlcXVlc3QpO1xyXG4gICAgfSBjYXRjaCAoZXJyb3I6IGFueSkge1xyXG4gICAgICBpZiAoZXJyb3IgaW5zdGFuY2VvZiBJbnRlcmFjdGlvblJlcXVpcmVkQXV0aEVycm9yKSB7XHJcbiAgICAgICAgbXNhbFRva2VuUmVzcG9uc2UgPSBhd2FpdCBpbnN0YW5jZS5hY3F1aXJlVG9rZW5SZWRpcmVjdChcclxuICAgICAgICAgIGFjY2Vzc1Rva2VuUmVxdWVzdCxcclxuICAgICAgICApO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gbXNhbFRva2VuUmVzcG9uc2U7XHJcbiAgfTtcclxuXHJcbiAgY29uc3QgZmV0Y2hBY2Nlc3NUb2tlblJlc3BvbnNlID0gYXN5bmMgKCk6IFByb21pc2U8YW55PiA9PiB7XHJcbiAgICBsZXQgcmVmcmVzaGVkVG9rZW5SZXNwb25zZTogYW55O1xyXG4gICAgbGV0IGN1cnJlbnRJZHBQcm92aWRlck5hbWUgPSBnZXRDdXJyZW50SWRwUHJvdmlkZXIoKTtcclxuICAgIHN3aXRjaCAoY3VycmVudElkcFByb3ZpZGVyTmFtZSkge1xyXG4gICAgICBjYXNlIElkcFByb3ZpZGVyT3B0aW9uLkZPUkdFX1JPQ0s6XHJcbiAgICAgICAgcmVmcmVzaGVkVG9rZW5SZXNwb25zZSA9IGF3YWl0IFRva2VuU3RvcmFnZS5nZXQoKTtcclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSBJZHBQcm92aWRlck9wdGlvbi5LRVlfQ0xPQUs6XHJcbiAgICAgICAgY29uc3Qga2V5Q2xvYWtJbnN0YW5jZURhdGEgPSAod2luZG93IGFzIGFueSkua2V5Q2xvYWtJbnN0YW5jZTtcclxuICAgICAgICBpZiAoXHJcbiAgICAgICAgICBrZXlDbG9ha0luc3RhbmNlRGF0YSAmJlxyXG4gICAgICAgICAgT2JqZWN0LmtleXMoa2V5Q2xvYWtJbnN0YW5jZURhdGEpPy5sZW5ndGggPiAwICYmXHJcbiAgICAgICAgICBrZXlDbG9ha0luc3RhbmNlRGF0YS5hdXRoZW50aWNhdGVkID09PSB0cnVlXHJcbiAgICAgICAgKSB7XHJcbiAgICAgICAgICByZWZyZXNoZWRUb2tlblJlc3BvbnNlID0ge1xyXG4gICAgICAgICAgICBhY2Nlc3NUb2tlbjogJycsXHJcbiAgICAgICAgICAgIGlkVG9rZW46IGtleUNsb2FrSW5zdGFuY2VEYXRhPy5pZFRva2VuLFxyXG4gICAgICAgICAgfTtcclxuICAgICAgICB9XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgSWRwUHJvdmlkZXJPcHRpb24uTUlDUk9TT0ZUOlxyXG4gICAgICAgIGxldCBtaWNyb3NvZnRBZFRva2VuID0gYXdhaXQgZmV0Y2hNaWNyb3NvZnRBRFRva2VuKCk7XHJcbiAgICAgICAgcmVmcmVzaGVkVG9rZW5SZXNwb25zZSA9IHtcclxuICAgICAgICAgIGFjY2Vzc1Rva2VuOiBtaWNyb3NvZnRBZFRva2VuPy5hY2Nlc3NUb2tlbixcclxuICAgICAgICAgIGlkVG9rZW46IG1pY3Jvc29mdEFkVG9rZW4/LmlkVG9rZW4sXHJcbiAgICAgICAgfTtcclxuICAgICAgICBicmVhaztcclxuICAgICAgZGVmYXVsdDpcclxuICAgICAgICBicmVhaztcclxuICAgIH1cclxuICAgIHJldHVybiByZWZyZXNoZWRUb2tlblJlc3BvbnNlO1xyXG4gIH07XHJcblxyXG4gIHJldHVybiB7XHJcbiAgICAuLi5zZXJ2aWNlLFxyXG4gICAgc2V0U2VydmljZSxcclxuICAgIHJiYWMsXHJcbiAgICBkZWZhdWx0U2VydmljZUFwcFJlbW90ZU5hbWUsXHJcbiAgICBzZXREZWZhdWx0U2VydmljZUFwcFJlbW90ZU5hbWUsXHJcbiAgICBzaGVsbFRva2VuUmVzcG9uc2VEYXRhLFxyXG4gICAgc2V0U2hlbGxUb2tlblJlc3BvbnNlRGF0YSxcclxuICAgIGlkcFByb3ZpZGVyLFxyXG4gICAgc2V0SWRwUHJvdmlkZXIsXHJcbiAgICBzZXRSQkFDLFxyXG4gICAgY2xpZW50Q29kZSxcclxuICAgIHNldENsaWVudENvZGUsXHJcbiAgICBsb2dpbk1pY3JvQXBwT3B0aW9uLFxyXG4gICAgZmV0Y2hBY2Nlc3NUb2tlblJlc3BvbnNlLFxyXG4gICAgbG9nb3V0TWljcm9BcHBPcHRpb24sXHJcbiAgICBzZXRMb2dpbk1pY3JvQXBwT3B0aW9uLFxyXG4gICAgc2V0TG9nb3V0TWljcm9BcHBPcHRpb24sXHJcbiAgfTtcclxufTtcclxuXHJcbmNvbnN0IHVzZVNlcnZpY2VDb250ZXh0ID0gKCk6IGFueSA9PiB7XHJcbiAgY29uc3QgY29udGV4dCA9IHVzZUNvbnRleHQoQ29udGV4dCk7XHJcblxyXG4gIGlmIChjb250ZXh0ID09PSB1bmRlZmluZWQpIHtcclxuICAgIHRocm93IG5ldyBFcnJvcihcclxuICAgICAgJ1NlcnZpY2VDb250ZXh0IHZhbHVlIGlzIHVuZGVmaW5lZC4gTWFrZSBzdXJlIHlvdSB1c2UgdGhlIFNlcnZpY2VQcm92aWRlciBiZWZvcmUgdXNpbmcgdGhlIGNvbnRleHQuJyxcclxuICAgICk7XHJcbiAgfVxyXG5cclxuICByZXR1cm4gY29udGV4dDtcclxufTtcclxuXHJcbmNvbnN0IFNlcnZpY2VQcm92aWRlciA9ICh7IGNoaWxkcmVuIH06IFNlcnZpY2VQcm92aWRlclByb3BzKTogUmVhY3RFbGVtZW50ID0+IHtcclxuICBjb25zdCB2YWx1ZSA9IHVzZVNlcnZpY2UoKTtcclxuXHJcbiAgcmV0dXJuIDxDb250ZXh0LlByb3ZpZGVyIHZhbHVlPXt2YWx1ZX0+e2NoaWxkcmVufTwvQ29udGV4dC5Qcm92aWRlcj47XHJcbn07XHJcblxyXG5leHBvcnQgeyB1c2VTZXJ2aWNlQ29udGV4dCwgU2VydmljZVByb3ZpZGVyIH07XHJcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///64082\n")},64126:(I,g,t)=>{"use strict";I.exports=t.p+"dd6abe2b727b32a706d6.png"},64202:(module,__unused_webpack_exports,__webpack_require__)=>{"use strict";eval("\n\nvar utils = __webpack_require__(9516);\n\nmodule.exports = (\n utils.isStandardBrowserEnv() ?\n\n // Standard browser envs have full support of the APIs needed to test\n // whether the request URL is of the same origin as current location.\n (function standardBrowserEnv() {\n var msie = /(msie|trident)/i.test(navigator.userAgent);\n var urlParsingNode = document.createElement('a');\n var originURL;\n\n /**\n * Parse a URL to discover it's components\n *\n * @param {String} url The URL to be parsed\n * @returns {Object}\n */\n function resolveURL(url) {\n var href = url;\n\n if (msie) {\n // IE needs attribute set twice to normalize properties\n urlParsingNode.setAttribute('href', href);\n href = urlParsingNode.href;\n }\n\n urlParsingNode.setAttribute('href', href);\n\n // urlParsingNode provides the UrlUtils interface - http://url.spec.whatwg.org/#urlutils\n return {\n href: urlParsingNode.href,\n protocol: urlParsingNode.protocol ? urlParsingNode.protocol.replace(/:$/, '') : '',\n host: urlParsingNode.host,\n search: urlParsingNode.search ? urlParsingNode.search.replace(/^\\?/, '') : '',\n hash: urlParsingNode.hash ? urlParsingNode.hash.replace(/^#/, '') : '',\n hostname: urlParsingNode.hostname,\n port: urlParsingNode.port,\n pathname: (urlParsingNode.pathname.charAt(0) === '/') ?\n urlParsingNode.pathname :\n '/' + urlParsingNode.pathname\n };\n }\n\n originURL = resolveURL(window.location.href);\n\n /**\n * Determine if a URL shares the same origin as the current location\n *\n * @param {String} requestURL The URL to test\n * @returns {boolean} True if URL shares the same origin, otherwise false\n */\n return function isURLSameOrigin(requestURL) {\n var parsed = (utils.isString(requestURL)) ? resolveURL(requestURL) : requestURL;\n return (parsed.protocol === originURL.protocol &&\n parsed.host === originURL.host);\n };\n })() :\n\n // Non standard browser envs (web workers, react-native) lack needed support.\n (function nonStandardBrowserEnv() {\n return function isURLSameOrigin() {\n return true;\n };\n })()\n);\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNjQyMDIuanMiLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL2l0Zy1uZXh0Z2VuLWZyb250ZW5kLy4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9oZWxwZXJzL2lzVVJMU2FtZU9yaWdpbi5qcz8zOTM0Il0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIHV0aWxzID0gcmVxdWlyZSgnLi8uLi91dGlscycpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IChcbiAgdXRpbHMuaXNTdGFuZGFyZEJyb3dzZXJFbnYoKSA/XG5cbiAgLy8gU3RhbmRhcmQgYnJvd3NlciBlbnZzIGhhdmUgZnVsbCBzdXBwb3J0IG9mIHRoZSBBUElzIG5lZWRlZCB0byB0ZXN0XG4gIC8vIHdoZXRoZXIgdGhlIHJlcXVlc3QgVVJMIGlzIG9mIHRoZSBzYW1lIG9yaWdpbiBhcyBjdXJyZW50IGxvY2F0aW9uLlxuICAgIChmdW5jdGlvbiBzdGFuZGFyZEJyb3dzZXJFbnYoKSB7XG4gICAgICB2YXIgbXNpZSA9IC8obXNpZXx0cmlkZW50KS9pLnRlc3QobmF2aWdhdG9yLnVzZXJBZ2VudCk7XG4gICAgICB2YXIgdXJsUGFyc2luZ05vZGUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdhJyk7XG4gICAgICB2YXIgb3JpZ2luVVJMO1xuXG4gICAgICAvKipcbiAgICAqIFBhcnNlIGEgVVJMIHRvIGRpc2NvdmVyIGl0J3MgY29tcG9uZW50c1xuICAgICpcbiAgICAqIEBwYXJhbSB7U3RyaW5nfSB1cmwgVGhlIFVSTCB0byBiZSBwYXJzZWRcbiAgICAqIEByZXR1cm5zIHtPYmplY3R9XG4gICAgKi9cbiAgICAgIGZ1bmN0aW9uIHJlc29sdmVVUkwodXJsKSB7XG4gICAgICAgIHZhciBocmVmID0gdXJsO1xuXG4gICAgICAgIGlmIChtc2llKSB7XG4gICAgICAgIC8vIElFIG5lZWRzIGF0dHJpYnV0ZSBzZXQgdHdpY2UgdG8gbm9ybWFsaXplIHByb3BlcnRpZXNcbiAgICAgICAgICB1cmxQYXJzaW5nTm9kZS5zZXRBdHRyaWJ1dGUoJ2hyZWYnLCBocmVmKTtcbiAgICAgICAgICBocmVmID0gdXJsUGFyc2luZ05vZGUuaHJlZjtcbiAgICAgICAgfVxuXG4gICAgICAgIHVybFBhcnNpbmdOb2RlLnNldEF0dHJpYnV0ZSgnaHJlZicsIGhyZWYpO1xuXG4gICAgICAgIC8vIHVybFBhcnNpbmdOb2RlIHByb3ZpZGVzIHRoZSBVcmxVdGlscyBpbnRlcmZhY2UgLSBodHRwOi8vdXJsLnNwZWMud2hhdHdnLm9yZy8jdXJsdXRpbHNcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBocmVmOiB1cmxQYXJzaW5nTm9kZS5ocmVmLFxuICAgICAgICAgIHByb3RvY29sOiB1cmxQYXJzaW5nTm9kZS5wcm90b2NvbCA/IHVybFBhcnNpbmdOb2RlLnByb3RvY29sLnJlcGxhY2UoLzokLywgJycpIDogJycsXG4gICAgICAgICAgaG9zdDogdXJsUGFyc2luZ05vZGUuaG9zdCxcbiAgICAgICAgICBzZWFyY2g6IHVybFBhcnNpbmdOb2RlLnNlYXJjaCA/IHVybFBhcnNpbmdOb2RlLnNlYXJjaC5yZXBsYWNlKC9eXFw/LywgJycpIDogJycsXG4gICAgICAgICAgaGFzaDogdXJsUGFyc2luZ05vZGUuaGFzaCA/IHVybFBhcnNpbmdOb2RlLmhhc2gucmVwbGFjZSgvXiMvLCAnJykgOiAnJyxcbiAgICAgICAgICBob3N0bmFtZTogdXJsUGFyc2luZ05vZGUuaG9zdG5hbWUsXG4gICAgICAgICAgcG9ydDogdXJsUGFyc2luZ05vZGUucG9ydCxcbiAgICAgICAgICBwYXRobmFtZTogKHVybFBhcnNpbmdOb2RlLnBhdGhuYW1lLmNoYXJBdCgwKSA9PT0gJy8nKSA/XG4gICAgICAgICAgICB1cmxQYXJzaW5nTm9kZS5wYXRobmFtZSA6XG4gICAgICAgICAgICAnLycgKyB1cmxQYXJzaW5nTm9kZS5wYXRobmFtZVxuICAgICAgICB9O1xuICAgICAgfVxuXG4gICAgICBvcmlnaW5VUkwgPSByZXNvbHZlVVJMKHdpbmRvdy5sb2NhdGlvbi5ocmVmKTtcblxuICAgICAgLyoqXG4gICAgKiBEZXRlcm1pbmUgaWYgYSBVUkwgc2hhcmVzIHRoZSBzYW1lIG9yaWdpbiBhcyB0aGUgY3VycmVudCBsb2NhdGlvblxuICAgICpcbiAgICAqIEBwYXJhbSB7U3RyaW5nfSByZXF1ZXN0VVJMIFRoZSBVUkwgdG8gdGVzdFxuICAgICogQHJldHVybnMge2Jvb2xlYW59IFRydWUgaWYgVVJMIHNoYXJlcyB0aGUgc2FtZSBvcmlnaW4sIG90aGVyd2lzZSBmYWxzZVxuICAgICovXG4gICAgICByZXR1cm4gZnVuY3Rpb24gaXNVUkxTYW1lT3JpZ2luKHJlcXVlc3RVUkwpIHtcbiAgICAgICAgdmFyIHBhcnNlZCA9ICh1dGlscy5pc1N0cmluZyhyZXF1ZXN0VVJMKSkgPyByZXNvbHZlVVJMKHJlcXVlc3RVUkwpIDogcmVxdWVzdFVSTDtcbiAgICAgICAgcmV0dXJuIChwYXJzZWQucHJvdG9jb2wgPT09IG9yaWdpblVSTC5wcm90b2NvbCAmJlxuICAgICAgICAgICAgcGFyc2VkLmhvc3QgPT09IG9yaWdpblVSTC5ob3N0KTtcbiAgICAgIH07XG4gICAgfSkoKSA6XG5cbiAgLy8gTm9uIHN0YW5kYXJkIGJyb3dzZXIgZW52cyAod2ViIHdvcmtlcnMsIHJlYWN0LW5hdGl2ZSkgbGFjayBuZWVkZWQgc3VwcG9ydC5cbiAgICAoZnVuY3Rpb24gbm9uU3RhbmRhcmRCcm93c2VyRW52KCkge1xuICAgICAgcmV0dXJuIGZ1bmN0aW9uIGlzVVJMU2FtZU9yaWdpbigpIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9O1xuICAgIH0pKClcbik7XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///64202\n")},64226:function(__unused_webpack_module,__unused_webpack_exports,__webpack_require__){eval("//! moment.js locale configuration\n//! locale : Welsh [cy]\n//! author : Robert Allen : https://github.com/robgallen\n//! author : https://github.com/ryangreaves\n\n;(function (global, factory) {\n true ? factory(__webpack_require__(95093)) :\n 0\n}(this, (function (moment) { 'use strict';\n\n //! moment.js locale configuration\n\n var cy = moment.defineLocale('cy', {\n months: 'Ionawr_Chwefror_Mawrth_Ebrill_Mai_Mehefin_Gorffennaf_Awst_Medi_Hydref_Tachwedd_Rhagfyr'.split(\n '_'\n ),\n monthsShort: 'Ion_Chwe_Maw_Ebr_Mai_Meh_Gor_Aws_Med_Hyd_Tach_Rhag'.split(\n '_'\n ),\n weekdays:\n 'Dydd Sul_Dydd Llun_Dydd Mawrth_Dydd Mercher_Dydd Iau_Dydd Gwener_Dydd Sadwrn'.split(\n '_'\n ),\n weekdaysShort: 'Sul_Llun_Maw_Mer_Iau_Gwe_Sad'.split('_'),\n weekdaysMin: 'Su_Ll_Ma_Me_Ia_Gw_Sa'.split('_'),\n weekdaysParseExact: true,\n // time formats are the same as en-gb\n longDateFormat: {\n LT: 'HH:mm',\n LTS: 'HH:mm:ss',\n L: 'DD/MM/YYYY',\n LL: 'D MMMM YYYY',\n LLL: 'D MMMM YYYY HH:mm',\n LLLL: 'dddd, D MMMM YYYY HH:mm',\n },\n calendar: {\n sameDay: '[Heddiw am] LT',\n nextDay: '[Yfory am] LT',\n nextWeek: 'dddd [am] LT',\n lastDay: '[Ddoe am] LT',\n lastWeek: 'dddd [diwethaf am] LT',\n sameElse: 'L',\n },\n relativeTime: {\n future: 'mewn %s',\n past: '%s yn ôl',\n s: 'ychydig eiliadau',\n ss: '%d eiliad',\n m: 'munud',\n mm: '%d munud',\n h: 'awr',\n hh: '%d awr',\n d: 'diwrnod',\n dd: '%d diwrnod',\n M: 'mis',\n MM: '%d mis',\n y: 'blwyddyn',\n yy: '%d flynedd',\n },\n dayOfMonthOrdinalParse: /\\d{1,2}(fed|ain|af|il|ydd|ed|eg)/,\n // traditional ordinal numbers above 31 are not commonly used in colloquial Welsh\n ordinal: function (number) {\n var b = number,\n output = '',\n lookup = [\n '',\n 'af',\n 'il',\n 'ydd',\n 'ydd',\n 'ed',\n 'ed',\n 'ed',\n 'fed',\n 'fed',\n 'fed', // 1af to 10fed\n 'eg',\n 'fed',\n 'eg',\n 'eg',\n 'fed',\n 'eg',\n 'eg',\n 'fed',\n 'eg',\n 'fed', // 11eg to 20fed\n ];\n if (b > 20) {\n if (b === 40 || b === 50 || b === 60 || b === 80 || b === 100) {\n output = 'fed'; // not 30ain, 70ain or 90ain\n } else {\n output = 'ain';\n }\n } else if (b > 0) {\n output = lookup[b];\n }\n return number + output;\n },\n week: {\n dow: 1, // Monday is the first day of the week.\n doy: 4, // The week that contains Jan 4th is the first week of the year.\n },\n });\n\n return cy;\n\n})));\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNjQyMjYuanMiLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL2l0Zy1uZXh0Z2VuLWZyb250ZW5kLy4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvY3kuanM/OTc5NyJdLCJzb3VyY2VzQ29udGVudCI6WyIvLyEgbW9tZW50LmpzIGxvY2FsZSBjb25maWd1cmF0aW9uXG4vLyEgbG9jYWxlIDogV2Vsc2ggW2N5XVxuLy8hIGF1dGhvciA6IFJvYmVydCBBbGxlbiA6IGh0dHBzOi8vZ2l0aHViLmNvbS9yb2JnYWxsZW5cbi8vISBhdXRob3IgOiBodHRwczovL2dpdGh1Yi5jb20vcnlhbmdyZWF2ZXNcblxuOyhmdW5jdGlvbiAoZ2xvYmFsLCBmYWN0b3J5KSB7XG4gICB0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcgJiYgdHlwZW9mIG1vZHVsZSAhPT0gJ3VuZGVmaW5lZCdcbiAgICAgICAmJiB0eXBlb2YgcmVxdWlyZSA9PT0gJ2Z1bmN0aW9uJyA/IGZhY3RvcnkocmVxdWlyZSgnLi4vbW9tZW50JykpIDpcbiAgIHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgZGVmaW5lLmFtZCA/IGRlZmluZShbJy4uL21vbWVudCddLCBmYWN0b3J5KSA6XG4gICBmYWN0b3J5KGdsb2JhbC5tb21lbnQpXG59KHRoaXMsIChmdW5jdGlvbiAobW9tZW50KSB7ICd1c2Ugc3RyaWN0JztcblxuICAgIC8vISBtb21lbnQuanMgbG9jYWxlIGNvbmZpZ3VyYXRpb25cblxuICAgIHZhciBjeSA9IG1vbWVudC5kZWZpbmVMb2NhbGUoJ2N5Jywge1xuICAgICAgICBtb250aHM6ICdJb25hd3JfQ2h3ZWZyb3JfTWF3cnRoX0VicmlsbF9NYWlfTWVoZWZpbl9Hb3JmZmVubmFmX0F3c3RfTWVkaV9IeWRyZWZfVGFjaHdlZGRfUmhhZ2Z5cicuc3BsaXQoXG4gICAgICAgICAgICAnXydcbiAgICAgICAgKSxcbiAgICAgICAgbW9udGhzU2hvcnQ6ICdJb25fQ2h3ZV9NYXdfRWJyX01haV9NZWhfR29yX0F3c19NZWRfSHlkX1RhY2hfUmhhZycuc3BsaXQoXG4gICAgICAgICAgICAnXydcbiAgICAgICAgKSxcbiAgICAgICAgd2Vla2RheXM6XG4gICAgICAgICAgICAnRHlkZCBTdWxfRHlkZCBMbHVuX0R5ZGQgTWF3cnRoX0R5ZGQgTWVyY2hlcl9EeWRkIElhdV9EeWRkIEd3ZW5lcl9EeWRkIFNhZHdybicuc3BsaXQoXG4gICAgICAgICAgICAgICAgJ18nXG4gICAgICAgICAgICApLFxuICAgICAgICB3ZWVrZGF5c1Nob3J0OiAnU3VsX0xsdW5fTWF3X01lcl9JYXVfR3dlX1NhZCcuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXNNaW46ICdTdV9MbF9NYV9NZV9JYV9Hd19TYScuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXNQYXJzZUV4YWN0OiB0cnVlLFxuICAgICAgICAvLyB0aW1lIGZvcm1hdHMgYXJlIHRoZSBzYW1lIGFzIGVuLWdiXG4gICAgICAgIGxvbmdEYXRlRm9ybWF0OiB7XG4gICAgICAgICAgICBMVDogJ0hIOm1tJyxcbiAgICAgICAgICAgIExUUzogJ0hIOm1tOnNzJyxcbiAgICAgICAgICAgIEw6ICdERC9NTS9ZWVlZJyxcbiAgICAgICAgICAgIExMOiAnRCBNTU1NIFlZWVknLFxuICAgICAgICAgICAgTExMOiAnRCBNTU1NIFlZWVkgSEg6bW0nLFxuICAgICAgICAgICAgTExMTDogJ2RkZGQsIEQgTU1NTSBZWVlZIEhIOm1tJyxcbiAgICAgICAgfSxcbiAgICAgICAgY2FsZW5kYXI6IHtcbiAgICAgICAgICAgIHNhbWVEYXk6ICdbSGVkZGl3IGFtXSBMVCcsXG4gICAgICAgICAgICBuZXh0RGF5OiAnW1lmb3J5IGFtXSBMVCcsXG4gICAgICAgICAgICBuZXh0V2VlazogJ2RkZGQgW2FtXSBMVCcsXG4gICAgICAgICAgICBsYXN0RGF5OiAnW0Rkb2UgYW1dIExUJyxcbiAgICAgICAgICAgIGxhc3RXZWVrOiAnZGRkZCBbZGl3ZXRoYWYgYW1dIExUJyxcbiAgICAgICAgICAgIHNhbWVFbHNlOiAnTCcsXG4gICAgICAgIH0sXG4gICAgICAgIHJlbGF0aXZlVGltZToge1xuICAgICAgICAgICAgZnV0dXJlOiAnbWV3biAlcycsXG4gICAgICAgICAgICBwYXN0OiAnJXMgeW4gw7RsJyxcbiAgICAgICAgICAgIHM6ICd5Y2h5ZGlnIGVpbGlhZGF1JyxcbiAgICAgICAgICAgIHNzOiAnJWQgZWlsaWFkJyxcbiAgICAgICAgICAgIG06ICdtdW51ZCcsXG4gICAgICAgICAgICBtbTogJyVkIG11bnVkJyxcbiAgICAgICAgICAgIGg6ICdhd3InLFxuICAgICAgICAgICAgaGg6ICclZCBhd3InLFxuICAgICAgICAgICAgZDogJ2Rpd3Jub2QnLFxuICAgICAgICAgICAgZGQ6ICclZCBkaXdybm9kJyxcbiAgICAgICAgICAgIE06ICdtaXMnLFxuICAgICAgICAgICAgTU06ICclZCBtaXMnLFxuICAgICAgICAgICAgeTogJ2Jsd3lkZHluJyxcbiAgICAgICAgICAgIHl5OiAnJWQgZmx5bmVkZCcsXG4gICAgICAgIH0sXG4gICAgICAgIGRheU9mTW9udGhPcmRpbmFsUGFyc2U6IC9cXGR7MSwyfShmZWR8YWlufGFmfGlsfHlkZHxlZHxlZykvLFxuICAgICAgICAvLyB0cmFkaXRpb25hbCBvcmRpbmFsIG51bWJlcnMgYWJvdmUgMzEgYXJlIG5vdCBjb21tb25seSB1c2VkIGluIGNvbGxvcXVpYWwgV2Vsc2hcbiAgICAgICAgb3JkaW5hbDogZnVuY3Rpb24gKG51bWJlcikge1xuICAgICAgICAgICAgdmFyIGIgPSBudW1iZXIsXG4gICAgICAgICAgICAgICAgb3V0cHV0ID0gJycsXG4gICAgICAgICAgICAgICAgbG9va3VwID0gW1xuICAgICAgICAgICAgICAgICAgICAnJyxcbiAgICAgICAgICAgICAgICAgICAgJ2FmJyxcbiAgICAgICAgICAgICAgICAgICAgJ2lsJyxcbiAgICAgICAgICAgICAgICAgICAgJ3lkZCcsXG4gICAgICAgICAgICAgICAgICAgICd5ZGQnLFxuICAgICAgICAgICAgICAgICAgICAnZWQnLFxuICAgICAgICAgICAgICAgICAgICAnZWQnLFxuICAgICAgICAgICAgICAgICAgICAnZWQnLFxuICAgICAgICAgICAgICAgICAgICAnZmVkJyxcbiAgICAgICAgICAgICAgICAgICAgJ2ZlZCcsXG4gICAgICAgICAgICAgICAgICAgICdmZWQnLCAvLyAxYWYgdG8gMTBmZWRcbiAgICAgICAgICAgICAgICAgICAgJ2VnJyxcbiAgICAgICAgICAgICAgICAgICAgJ2ZlZCcsXG4gICAgICAgICAgICAgICAgICAgICdlZycsXG4gICAgICAgICAgICAgICAgICAgICdlZycsXG4gICAgICAgICAgICAgICAgICAgICdmZWQnLFxuICAgICAgICAgICAgICAgICAgICAnZWcnLFxuICAgICAgICAgICAgICAgICAgICAnZWcnLFxuICAgICAgICAgICAgICAgICAgICAnZmVkJyxcbiAgICAgICAgICAgICAgICAgICAgJ2VnJyxcbiAgICAgICAgICAgICAgICAgICAgJ2ZlZCcsIC8vIDExZWcgdG8gMjBmZWRcbiAgICAgICAgICAgICAgICBdO1xuICAgICAgICAgICAgaWYgKGIgPiAyMCkge1xuICAgICAgICAgICAgICAgIGlmIChiID09PSA0MCB8fCBiID09PSA1MCB8fCBiID09PSA2MCB8fCBiID09PSA4MCB8fCBiID09PSAxMDApIHtcbiAgICAgICAgICAgICAgICAgICAgb3V0cHV0ID0gJ2ZlZCc7IC8vIG5vdCAzMGFpbiwgNzBhaW4gb3IgOTBhaW5cbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBvdXRwdXQgPSAnYWluJztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGIgPiAwKSB7XG4gICAgICAgICAgICAgICAgb3V0cHV0ID0gbG9va3VwW2JdO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIG51bWJlciArIG91dHB1dDtcbiAgICAgICAgfSxcbiAgICAgICAgd2Vlazoge1xuICAgICAgICAgICAgZG93OiAxLCAvLyBNb25kYXkgaXMgdGhlIGZpcnN0IGRheSBvZiB0aGUgd2Vlay5cbiAgICAgICAgICAgIGRveTogNCwgLy8gVGhlIHdlZWsgdGhhdCBjb250YWlucyBKYW4gNHRoIGlzIHRoZSBmaXJzdCB3ZWVrIG9mIHRoZSB5ZWFyLlxuICAgICAgICB9LFxuICAgIH0pO1xuXG4gICAgcmV0dXJuIGN5O1xuXG59KSkpO1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///64226\n")},64490:(module,__unused_webpack_exports,__webpack_require__)=>{"use strict";eval("\n\nvar utils = __webpack_require__(9516);\nvar transformData = __webpack_require__(82881);\nvar isCancel = __webpack_require__(93864);\nvar defaults = __webpack_require__(37412);\nvar Cancel = __webpack_require__(31928);\n\n/**\n * Throws a `Cancel` if cancellation has been requested.\n */\nfunction throwIfCancellationRequested(config) {\n if (config.cancelToken) {\n config.cancelToken.throwIfRequested();\n }\n\n if (config.signal && config.signal.aborted) {\n throw new Cancel('canceled');\n }\n}\n\n/**\n * Dispatch a request to the server using the configured adapter.\n *\n * @param {object} config The config that is to be used for the request\n * @returns {Promise} The Promise to be fulfilled\n */\nmodule.exports = function dispatchRequest(config) {\n throwIfCancellationRequested(config);\n\n // Ensure headers exist\n config.headers = config.headers || {};\n\n // Transform request data\n config.data = transformData.call(\n config,\n config.data,\n config.headers,\n config.transformRequest\n );\n\n // Flatten headers\n config.headers = utils.merge(\n config.headers.common || {},\n config.headers[config.method] || {},\n config.headers\n );\n\n utils.forEach(\n ['delete', 'get', 'head', 'post', 'put', 'patch', 'common'],\n function cleanHeaderConfig(method) {\n delete config.headers[method];\n }\n );\n\n var adapter = config.adapter || defaults.adapter;\n\n return adapter(config).then(function onAdapterResolution(response) {\n throwIfCancellationRequested(config);\n\n // Transform response data\n response.data = transformData.call(\n config,\n response.data,\n response.headers,\n config.transformResponse\n );\n\n return response;\n }, function onAdapterRejection(reason) {\n if (!isCancel(reason)) {\n throwIfCancellationRequested(config);\n\n // Transform response data\n if (reason && reason.response) {\n reason.response.data = transformData.call(\n config,\n reason.response.data,\n reason.response.headers,\n config.transformResponse\n );\n }\n }\n\n return Promise.reject(reason);\n });\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNjQ0OTAuanMiLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vaXRnLW5leHRnZW4tZnJvbnRlbmQvLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2NvcmUvZGlzcGF0Y2hSZXF1ZXN0LmpzPzUyNzAiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG52YXIgdXRpbHMgPSByZXF1aXJlKCcuLy4uL3V0aWxzJyk7XG52YXIgdHJhbnNmb3JtRGF0YSA9IHJlcXVpcmUoJy4vdHJhbnNmb3JtRGF0YScpO1xudmFyIGlzQ2FuY2VsID0gcmVxdWlyZSgnLi4vY2FuY2VsL2lzQ2FuY2VsJyk7XG52YXIgZGVmYXVsdHMgPSByZXF1aXJlKCcuLi9kZWZhdWx0cycpO1xudmFyIENhbmNlbCA9IHJlcXVpcmUoJy4uL2NhbmNlbC9DYW5jZWwnKTtcblxuLyoqXG4gKiBUaHJvd3MgYSBgQ2FuY2VsYCBpZiBjYW5jZWxsYXRpb24gaGFzIGJlZW4gcmVxdWVzdGVkLlxuICovXG5mdW5jdGlvbiB0aHJvd0lmQ2FuY2VsbGF0aW9uUmVxdWVzdGVkKGNvbmZpZykge1xuICBpZiAoY29uZmlnLmNhbmNlbFRva2VuKSB7XG4gICAgY29uZmlnLmNhbmNlbFRva2VuLnRocm93SWZSZXF1ZXN0ZWQoKTtcbiAgfVxuXG4gIGlmIChjb25maWcuc2lnbmFsICYmIGNvbmZpZy5zaWduYWwuYWJvcnRlZCkge1xuICAgIHRocm93IG5ldyBDYW5jZWwoJ2NhbmNlbGVkJyk7XG4gIH1cbn1cblxuLyoqXG4gKiBEaXNwYXRjaCBhIHJlcXVlc3QgdG8gdGhlIHNlcnZlciB1c2luZyB0aGUgY29uZmlndXJlZCBhZGFwdGVyLlxuICpcbiAqIEBwYXJhbSB7b2JqZWN0fSBjb25maWcgVGhlIGNvbmZpZyB0aGF0IGlzIHRvIGJlIHVzZWQgZm9yIHRoZSByZXF1ZXN0XG4gKiBAcmV0dXJucyB7UHJvbWlzZX0gVGhlIFByb21pc2UgdG8gYmUgZnVsZmlsbGVkXG4gKi9cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gZGlzcGF0Y2hSZXF1ZXN0KGNvbmZpZykge1xuICB0aHJvd0lmQ2FuY2VsbGF0aW9uUmVxdWVzdGVkKGNvbmZpZyk7XG5cbiAgLy8gRW5zdXJlIGhlYWRlcnMgZXhpc3RcbiAgY29uZmlnLmhlYWRlcnMgPSBjb25maWcuaGVhZGVycyB8fCB7fTtcblxuICAvLyBUcmFuc2Zvcm0gcmVxdWVzdCBkYXRhXG4gIGNvbmZpZy5kYXRhID0gdHJhbnNmb3JtRGF0YS5jYWxsKFxuICAgIGNvbmZpZyxcbiAgICBjb25maWcuZGF0YSxcbiAgICBjb25maWcuaGVhZGVycyxcbiAgICBjb25maWcudHJhbnNmb3JtUmVxdWVzdFxuICApO1xuXG4gIC8vIEZsYXR0ZW4gaGVhZGVyc1xuICBjb25maWcuaGVhZGVycyA9IHV0aWxzLm1lcmdlKFxuICAgIGNvbmZpZy5oZWFkZXJzLmNvbW1vbiB8fCB7fSxcbiAgICBjb25maWcuaGVhZGVyc1tjb25maWcubWV0aG9kXSB8fCB7fSxcbiAgICBjb25maWcuaGVhZGVyc1xuICApO1xuXG4gIHV0aWxzLmZvckVhY2goXG4gICAgWydkZWxldGUnLCAnZ2V0JywgJ2hlYWQnLCAncG9zdCcsICdwdXQnLCAncGF0Y2gnLCAnY29tbW9uJ10sXG4gICAgZnVuY3Rpb24gY2xlYW5IZWFkZXJDb25maWcobWV0aG9kKSB7XG4gICAgICBkZWxldGUgY29uZmlnLmhlYWRlcnNbbWV0aG9kXTtcbiAgICB9XG4gICk7XG5cbiAgdmFyIGFkYXB0ZXIgPSBjb25maWcuYWRhcHRlciB8fCBkZWZhdWx0cy5hZGFwdGVyO1xuXG4gIHJldHVybiBhZGFwdGVyKGNvbmZpZykudGhlbihmdW5jdGlvbiBvbkFkYXB0ZXJSZXNvbHV0aW9uKHJlc3BvbnNlKSB7XG4gICAgdGhyb3dJZkNhbmNlbGxhdGlvblJlcXVlc3RlZChjb25maWcpO1xuXG4gICAgLy8gVHJhbnNmb3JtIHJlc3BvbnNlIGRhdGFcbiAgICByZXNwb25zZS5kYXRhID0gdHJhbnNmb3JtRGF0YS5jYWxsKFxuICAgICAgY29uZmlnLFxuICAgICAgcmVzcG9uc2UuZGF0YSxcbiAgICAgIHJlc3BvbnNlLmhlYWRlcnMsXG4gICAgICBjb25maWcudHJhbnNmb3JtUmVzcG9uc2VcbiAgICApO1xuXG4gICAgcmV0dXJuIHJlc3BvbnNlO1xuICB9LCBmdW5jdGlvbiBvbkFkYXB0ZXJSZWplY3Rpb24ocmVhc29uKSB7XG4gICAgaWYgKCFpc0NhbmNlbChyZWFzb24pKSB7XG4gICAgICB0aHJvd0lmQ2FuY2VsbGF0aW9uUmVxdWVzdGVkKGNvbmZpZyk7XG5cbiAgICAgIC8vIFRyYW5zZm9ybSByZXNwb25zZSBkYXRhXG4gICAgICBpZiAocmVhc29uICYmIHJlYXNvbi5yZXNwb25zZSkge1xuICAgICAgICByZWFzb24ucmVzcG9uc2UuZGF0YSA9IHRyYW5zZm9ybURhdGEuY2FsbChcbiAgICAgICAgICBjb25maWcsXG4gICAgICAgICAgcmVhc29uLnJlc3BvbnNlLmRhdGEsXG4gICAgICAgICAgcmVhc29uLnJlc3BvbnNlLmhlYWRlcnMsXG4gICAgICAgICAgY29uZmlnLnRyYW5zZm9ybVJlc3BvbnNlXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIFByb21pc2UucmVqZWN0KHJlYXNvbik7XG4gIH0pO1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///64490\n")},64634:module=>{eval("module.exports = Array.isArray || function (arr) {\n return Object.prototype.toString.call(arr) == '[object Array]';\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNjQ2MzQuanMiLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vaXRnLW5leHRnZW4tZnJvbnRlbmQvLi9ub2RlX21vZHVsZXMvaXNhcnJheS9pbmRleC5qcz9lM2RiIl0sInNvdXJjZXNDb250ZW50IjpbIm1vZHVsZS5leHBvcnRzID0gQXJyYXkuaXNBcnJheSB8fCBmdW5jdGlvbiAoYXJyKSB7XG4gIHJldHVybiBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoYXJyKSA9PSAnW29iamVjdCBBcnJheV0nO1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///64634\n")},64671:(I,g,t)=>{"use strict";I.exports=t.p+"184f5cbe48406458ce4d.png"},64725:(I,g,t)=>{"use strict";I.exports=t.p+"4555440164553b2b7b2c.png"},64730:(I,g,t)=>{"use strict";I.exports=t.p+"5ae7fe82b1fe396f3a2e.png"},64993:(I,g,t)=>{"use strict";I.exports=t.p+"0c8661527df9882280fe.png"},65222:(I,g,t)=>{"use strict";I.exports=t.p+"33790431ab14cc36037d.png"},65291:(module,__unused_webpack_exports,__webpack_require__)=>{"use strict";eval("\n\nvar ERR_INVALID_OPT_VALUE = (__webpack_require__(86048)/* .codes */ .F).ERR_INVALID_OPT_VALUE;\nfunction highWaterMarkFrom(options, isDuplex, duplexKey) {\n return options.highWaterMark != null ? options.highWaterMark : isDuplex ? options[duplexKey] : null;\n}\nfunction getHighWaterMark(state, options, duplexKey, isDuplex) {\n var hwm = highWaterMarkFrom(options, isDuplex, duplexKey);\n if (hwm != null) {\n if (!(isFinite(hwm) && Math.floor(hwm) === hwm) || hwm < 0) {\n var name = isDuplex ? duplexKey : 'highWaterMark';\n throw new ERR_INVALID_OPT_VALUE(name, hwm);\n }\n return Math.floor(hwm);\n }\n\n // Default value\n return state.objectMode ? 16 : 16 * 1024;\n}\nmodule.exports = {\n getHighWaterMark: getHighWaterMark\n};//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNjUyOTEuanMiLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9pdGctbmV4dGdlbi1mcm9udGVuZC8uL25vZGVfbW9kdWxlcy9yZWFkYWJsZS1zdHJlYW0vbGliL2ludGVybmFsL3N0cmVhbXMvc3RhdGUuanM/MGRiNiJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciBFUlJfSU5WQUxJRF9PUFRfVkFMVUUgPSByZXF1aXJlKCcuLi8uLi8uLi9lcnJvcnMnKS5jb2Rlcy5FUlJfSU5WQUxJRF9PUFRfVkFMVUU7XG5mdW5jdGlvbiBoaWdoV2F0ZXJNYXJrRnJvbShvcHRpb25zLCBpc0R1cGxleCwgZHVwbGV4S2V5KSB7XG4gIHJldHVybiBvcHRpb25zLmhpZ2hXYXRlck1hcmsgIT0gbnVsbCA/IG9wdGlvbnMuaGlnaFdhdGVyTWFyayA6IGlzRHVwbGV4ID8gb3B0aW9uc1tkdXBsZXhLZXldIDogbnVsbDtcbn1cbmZ1bmN0aW9uIGdldEhpZ2hXYXRlck1hcmsoc3RhdGUsIG9wdGlvbnMsIGR1cGxleEtleSwgaXNEdXBsZXgpIHtcbiAgdmFyIGh3bSA9IGhpZ2hXYXRlck1hcmtGcm9tKG9wdGlvbnMsIGlzRHVwbGV4LCBkdXBsZXhLZXkpO1xuICBpZiAoaHdtICE9IG51bGwpIHtcbiAgICBpZiAoIShpc0Zpbml0ZShod20pICYmIE1hdGguZmxvb3IoaHdtKSA9PT0gaHdtKSB8fCBod20gPCAwKSB7XG4gICAgICB2YXIgbmFtZSA9IGlzRHVwbGV4ID8gZHVwbGV4S2V5IDogJ2hpZ2hXYXRlck1hcmsnO1xuICAgICAgdGhyb3cgbmV3IEVSUl9JTlZBTElEX09QVF9WQUxVRShuYW1lLCBod20pO1xuICAgIH1cbiAgICByZXR1cm4gTWF0aC5mbG9vcihod20pO1xuICB9XG5cbiAgLy8gRGVmYXVsdCB2YWx1ZVxuICByZXR1cm4gc3RhdGUub2JqZWN0TW9kZSA/IDE2IDogMTYgKiAxMDI0O1xufVxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIGdldEhpZ2hXYXRlck1hcms6IGdldEhpZ2hXYXRlck1hcmtcbn07Il0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///65291\n")},65311:(I,g,t)=>{"use strict";I.exports=t.p+"9e159bc3e6e671e47849.png"},65474:(I,g,t)=>{"use strict";I.exports=t.p+"f1f0fceb903374af7451.png"},65543:function(__unused_webpack_module,__unused_webpack_exports,__webpack_require__){eval("//! moment.js locale configuration\n//! locale : English (Israel) [en-il]\n//! author : Chris Gedrim : https://github.com/chrisgedrim\n\n;(function (global, factory) {\n true ? factory(__webpack_require__(95093)) :\n 0\n}(this, (function (moment) { 'use strict';\n\n //! moment.js locale configuration\n\n var enIl = moment.defineLocale('en-il', {\n months: 'January_February_March_April_May_June_July_August_September_October_November_December'.split(\n '_'\n ),\n monthsShort: 'Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec'.split('_'),\n weekdays: 'Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday'.split(\n '_'\n ),\n weekdaysShort: 'Sun_Mon_Tue_Wed_Thu_Fri_Sat'.split('_'),\n weekdaysMin: 'Su_Mo_Tu_We_Th_Fr_Sa'.split('_'),\n longDateFormat: {\n LT: 'HH:mm',\n LTS: 'HH:mm:ss',\n L: 'DD/MM/YYYY',\n LL: 'D MMMM YYYY',\n LLL: 'D MMMM YYYY HH:mm',\n LLLL: 'dddd, D MMMM YYYY HH:mm',\n },\n calendar: {\n sameDay: '[Today at] LT',\n nextDay: '[Tomorrow at] LT',\n nextWeek: 'dddd [at] LT',\n lastDay: '[Yesterday at] LT',\n lastWeek: '[Last] dddd [at] LT',\n sameElse: 'L',\n },\n relativeTime: {\n future: 'in %s',\n past: '%s ago',\n s: 'a few seconds',\n ss: '%d seconds',\n m: 'a minute',\n mm: '%d minutes',\n h: 'an hour',\n hh: '%d hours',\n d: 'a day',\n dd: '%d days',\n M: 'a month',\n MM: '%d months',\n y: 'a year',\n yy: '%d years',\n },\n dayOfMonthOrdinalParse: /\\d{1,2}(st|nd|rd|th)/,\n ordinal: function (number) {\n var b = number % 10,\n output =\n ~~((number % 100) / 10) === 1\n ? 'th'\n : b === 1\n ? 'st'\n : b === 2\n ? 'nd'\n : b === 3\n ? 'rd'\n : 'th';\n return number + output;\n },\n });\n\n return enIl;\n\n})));\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNjU1NDMuanMiLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9pdGctbmV4dGdlbi1mcm9udGVuZC8uL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL2VuLWlsLmpzPzczMzMiXSwic291cmNlc0NvbnRlbnQiOlsiLy8hIG1vbWVudC5qcyBsb2NhbGUgY29uZmlndXJhdGlvblxuLy8hIGxvY2FsZSA6IEVuZ2xpc2ggKElzcmFlbCkgW2VuLWlsXVxuLy8hIGF1dGhvciA6IENocmlzIEdlZHJpbSA6IGh0dHBzOi8vZ2l0aHViLmNvbS9jaHJpc2dlZHJpbVxuXG47KGZ1bmN0aW9uIChnbG9iYWwsIGZhY3RvcnkpIHtcbiAgIHR5cGVvZiBleHBvcnRzID09PSAnb2JqZWN0JyAmJiB0eXBlb2YgbW9kdWxlICE9PSAndW5kZWZpbmVkJ1xuICAgICAgICYmIHR5cGVvZiByZXF1aXJlID09PSAnZnVuY3Rpb24nID8gZmFjdG9yeShyZXF1aXJlKCcuLi9tb21lbnQnKSkgOlxuICAgdHlwZW9mIGRlZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiBkZWZpbmUuYW1kID8gZGVmaW5lKFsnLi4vbW9tZW50J10sIGZhY3RvcnkpIDpcbiAgIGZhY3RvcnkoZ2xvYmFsLm1vbWVudClcbn0odGhpcywgKGZ1bmN0aW9uIChtb21lbnQpIHsgJ3VzZSBzdHJpY3QnO1xuXG4gICAgLy8hIG1vbWVudC5qcyBsb2NhbGUgY29uZmlndXJhdGlvblxuXG4gICAgdmFyIGVuSWwgPSBtb21lbnQuZGVmaW5lTG9jYWxlKCdlbi1pbCcsIHtcbiAgICAgICAgbW9udGhzOiAnSmFudWFyeV9GZWJydWFyeV9NYXJjaF9BcHJpbF9NYXlfSnVuZV9KdWx5X0F1Z3VzdF9TZXB0ZW1iZXJfT2N0b2Jlcl9Ob3ZlbWJlcl9EZWNlbWJlcicuc3BsaXQoXG4gICAgICAgICAgICAnXydcbiAgICAgICAgKSxcbiAgICAgICAgbW9udGhzU2hvcnQ6ICdKYW5fRmViX01hcl9BcHJfTWF5X0p1bl9KdWxfQXVnX1NlcF9PY3RfTm92X0RlYycuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXM6ICdTdW5kYXlfTW9uZGF5X1R1ZXNkYXlfV2VkbmVzZGF5X1RodXJzZGF5X0ZyaWRheV9TYXR1cmRheScuc3BsaXQoXG4gICAgICAgICAgICAnXydcbiAgICAgICAgKSxcbiAgICAgICAgd2Vla2RheXNTaG9ydDogJ1N1bl9Nb25fVHVlX1dlZF9UaHVfRnJpX1NhdCcuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXNNaW46ICdTdV9Nb19UdV9XZV9UaF9Gcl9TYScuc3BsaXQoJ18nKSxcbiAgICAgICAgbG9uZ0RhdGVGb3JtYXQ6IHtcbiAgICAgICAgICAgIExUOiAnSEg6bW0nLFxuICAgICAgICAgICAgTFRTOiAnSEg6bW06c3MnLFxuICAgICAgICAgICAgTDogJ0REL01NL1lZWVknLFxuICAgICAgICAgICAgTEw6ICdEIE1NTU0gWVlZWScsXG4gICAgICAgICAgICBMTEw6ICdEIE1NTU0gWVlZWSBISDptbScsXG4gICAgICAgICAgICBMTExMOiAnZGRkZCwgRCBNTU1NIFlZWVkgSEg6bW0nLFxuICAgICAgICB9LFxuICAgICAgICBjYWxlbmRhcjoge1xuICAgICAgICAgICAgc2FtZURheTogJ1tUb2RheSBhdF0gTFQnLFxuICAgICAgICAgICAgbmV4dERheTogJ1tUb21vcnJvdyBhdF0gTFQnLFxuICAgICAgICAgICAgbmV4dFdlZWs6ICdkZGRkIFthdF0gTFQnLFxuICAgICAgICAgICAgbGFzdERheTogJ1tZZXN0ZXJkYXkgYXRdIExUJyxcbiAgICAgICAgICAgIGxhc3RXZWVrOiAnW0xhc3RdIGRkZGQgW2F0XSBMVCcsXG4gICAgICAgICAgICBzYW1lRWxzZTogJ0wnLFxuICAgICAgICB9LFxuICAgICAgICByZWxhdGl2ZVRpbWU6IHtcbiAgICAgICAgICAgIGZ1dHVyZTogJ2luICVzJyxcbiAgICAgICAgICAgIHBhc3Q6ICclcyBhZ28nLFxuICAgICAgICAgICAgczogJ2EgZmV3IHNlY29uZHMnLFxuICAgICAgICAgICAgc3M6ICclZCBzZWNvbmRzJyxcbiAgICAgICAgICAgIG06ICdhIG1pbnV0ZScsXG4gICAgICAgICAgICBtbTogJyVkIG1pbnV0ZXMnLFxuICAgICAgICAgICAgaDogJ2FuIGhvdXInLFxuICAgICAgICAgICAgaGg6ICclZCBob3VycycsXG4gICAgICAgICAgICBkOiAnYSBkYXknLFxuICAgICAgICAgICAgZGQ6ICclZCBkYXlzJyxcbiAgICAgICAgICAgIE06ICdhIG1vbnRoJyxcbiAgICAgICAgICAgIE1NOiAnJWQgbW9udGhzJyxcbiAgICAgICAgICAgIHk6ICdhIHllYXInLFxuICAgICAgICAgICAgeXk6ICclZCB5ZWFycycsXG4gICAgICAgIH0sXG4gICAgICAgIGRheU9mTW9udGhPcmRpbmFsUGFyc2U6IC9cXGR7MSwyfShzdHxuZHxyZHx0aCkvLFxuICAgICAgICBvcmRpbmFsOiBmdW5jdGlvbiAobnVtYmVyKSB7XG4gICAgICAgICAgICB2YXIgYiA9IG51bWJlciAlIDEwLFxuICAgICAgICAgICAgICAgIG91dHB1dCA9XG4gICAgICAgICAgICAgICAgICAgIH5+KChudW1iZXIgJSAxMDApIC8gMTApID09PSAxXG4gICAgICAgICAgICAgICAgICAgICAgICA/ICd0aCdcbiAgICAgICAgICAgICAgICAgICAgICAgIDogYiA9PT0gMVxuICAgICAgICAgICAgICAgICAgICAgICAgICA/ICdzdCdcbiAgICAgICAgICAgICAgICAgICAgICAgICAgOiBiID09PSAyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPyAnbmQnXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBiID09PSAzXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/ICdyZCdcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogJ3RoJztcbiAgICAgICAgICAgIHJldHVybiBudW1iZXIgKyBvdXRwdXQ7XG4gICAgICAgIH0sXG4gICAgfSk7XG5cbiAgICByZXR1cm4gZW5JbDtcblxufSkpKTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///65543\n")},65748:(I,g,t)=>{"use strict";I.exports=t.p+"1b39044bea18fc287c65.png"},65780:(I,g,t)=>{"use strict";I.exports=t.p+"4d6e8b6c2959406cca40.png"},65813:(I,g,t)=>{"use strict";I.exports=t.p+"4a4940fc8483aae087ef.png"},66160:(I,g,t)=>{"use strict";I.exports=t.p+"29ce1018b6cfb33b4df9.png"},66207:(I,g,t)=>{"use strict";I.exports=t.p+"8a01be9a88e7526c875e.png"},66584:function(__unused_webpack_module,__unused_webpack_exports,__webpack_require__){eval("//! moment.js locale configuration\n//! locale : English (Ireland) [en-ie]\n//! author : Chris Cartlidge : https://github.com/chriscartlidge\n\n;(function (global, factory) {\n true ? factory(__webpack_require__(95093)) :\n 0\n}(this, (function (moment) { 'use strict';\n\n //! moment.js locale configuration\n\n var enIe = moment.defineLocale('en-ie', {\n months: 'January_February_March_April_May_June_July_August_September_October_November_December'.split(\n '_'\n ),\n monthsShort: 'Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec'.split('_'),\n weekdays: 'Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday'.split(\n '_'\n ),\n weekdaysShort: 'Sun_Mon_Tue_Wed_Thu_Fri_Sat'.split('_'),\n weekdaysMin: 'Su_Mo_Tu_We_Th_Fr_Sa'.split('_'),\n longDateFormat: {\n LT: 'HH:mm',\n LTS: 'HH:mm:ss',\n L: 'DD/MM/YYYY',\n LL: 'D MMMM YYYY',\n LLL: 'D MMMM YYYY HH:mm',\n LLLL: 'dddd D MMMM YYYY HH:mm',\n },\n calendar: {\n sameDay: '[Today at] LT',\n nextDay: '[Tomorrow at] LT',\n nextWeek: 'dddd [at] LT',\n lastDay: '[Yesterday at] LT',\n lastWeek: '[Last] dddd [at] LT',\n sameElse: 'L',\n },\n relativeTime: {\n future: 'in %s',\n past: '%s ago',\n s: 'a few seconds',\n ss: '%d seconds',\n m: 'a minute',\n mm: '%d minutes',\n h: 'an hour',\n hh: '%d hours',\n d: 'a day',\n dd: '%d days',\n M: 'a month',\n MM: '%d months',\n y: 'a year',\n yy: '%d years',\n },\n dayOfMonthOrdinalParse: /\\d{1,2}(st|nd|rd|th)/,\n ordinal: function (number) {\n var b = number % 10,\n output =\n ~~((number % 100) / 10) === 1\n ? 'th'\n : b === 1\n ? 'st'\n : b === 2\n ? 'nd'\n : b === 3\n ? 'rd'\n : 'th';\n return number + output;\n },\n week: {\n dow: 1, // Monday is the first day of the week.\n doy: 4, // The week that contains Jan 4th is the first week of the year.\n },\n });\n\n return enIe;\n\n})));\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNjY1ODQuanMiLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL2l0Zy1uZXh0Z2VuLWZyb250ZW5kLy4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvZW4taWUuanM/ZTFkMyJdLCJzb3VyY2VzQ29udGVudCI6WyIvLyEgbW9tZW50LmpzIGxvY2FsZSBjb25maWd1cmF0aW9uXG4vLyEgbG9jYWxlIDogRW5nbGlzaCAoSXJlbGFuZCkgW2VuLWllXVxuLy8hIGF1dGhvciA6IENocmlzIENhcnRsaWRnZSA6IGh0dHBzOi8vZ2l0aHViLmNvbS9jaHJpc2NhcnRsaWRnZVxuXG47KGZ1bmN0aW9uIChnbG9iYWwsIGZhY3RvcnkpIHtcbiAgIHR5cGVvZiBleHBvcnRzID09PSAnb2JqZWN0JyAmJiB0eXBlb2YgbW9kdWxlICE9PSAndW5kZWZpbmVkJ1xuICAgICAgICYmIHR5cGVvZiByZXF1aXJlID09PSAnZnVuY3Rpb24nID8gZmFjdG9yeShyZXF1aXJlKCcuLi9tb21lbnQnKSkgOlxuICAgdHlwZW9mIGRlZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiBkZWZpbmUuYW1kID8gZGVmaW5lKFsnLi4vbW9tZW50J10sIGZhY3RvcnkpIDpcbiAgIGZhY3RvcnkoZ2xvYmFsLm1vbWVudClcbn0odGhpcywgKGZ1bmN0aW9uIChtb21lbnQpIHsgJ3VzZSBzdHJpY3QnO1xuXG4gICAgLy8hIG1vbWVudC5qcyBsb2NhbGUgY29uZmlndXJhdGlvblxuXG4gICAgdmFyIGVuSWUgPSBtb21lbnQuZGVmaW5lTG9jYWxlKCdlbi1pZScsIHtcbiAgICAgICAgbW9udGhzOiAnSmFudWFyeV9GZWJydWFyeV9NYXJjaF9BcHJpbF9NYXlfSnVuZV9KdWx5X0F1Z3VzdF9TZXB0ZW1iZXJfT2N0b2Jlcl9Ob3ZlbWJlcl9EZWNlbWJlcicuc3BsaXQoXG4gICAgICAgICAgICAnXydcbiAgICAgICAgKSxcbiAgICAgICAgbW9udGhzU2hvcnQ6ICdKYW5fRmViX01hcl9BcHJfTWF5X0p1bl9KdWxfQXVnX1NlcF9PY3RfTm92X0RlYycuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXM6ICdTdW5kYXlfTW9uZGF5X1R1ZXNkYXlfV2VkbmVzZGF5X1RodXJzZGF5X0ZyaWRheV9TYXR1cmRheScuc3BsaXQoXG4gICAgICAgICAgICAnXydcbiAgICAgICAgKSxcbiAgICAgICAgd2Vla2RheXNTaG9ydDogJ1N1bl9Nb25fVHVlX1dlZF9UaHVfRnJpX1NhdCcuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXNNaW46ICdTdV9Nb19UdV9XZV9UaF9Gcl9TYScuc3BsaXQoJ18nKSxcbiAgICAgICAgbG9uZ0RhdGVGb3JtYXQ6IHtcbiAgICAgICAgICAgIExUOiAnSEg6bW0nLFxuICAgICAgICAgICAgTFRTOiAnSEg6bW06c3MnLFxuICAgICAgICAgICAgTDogJ0REL01NL1lZWVknLFxuICAgICAgICAgICAgTEw6ICdEIE1NTU0gWVlZWScsXG4gICAgICAgICAgICBMTEw6ICdEIE1NTU0gWVlZWSBISDptbScsXG4gICAgICAgICAgICBMTExMOiAnZGRkZCBEIE1NTU0gWVlZWSBISDptbScsXG4gICAgICAgIH0sXG4gICAgICAgIGNhbGVuZGFyOiB7XG4gICAgICAgICAgICBzYW1lRGF5OiAnW1RvZGF5IGF0XSBMVCcsXG4gICAgICAgICAgICBuZXh0RGF5OiAnW1RvbW9ycm93IGF0XSBMVCcsXG4gICAgICAgICAgICBuZXh0V2VlazogJ2RkZGQgW2F0XSBMVCcsXG4gICAgICAgICAgICBsYXN0RGF5OiAnW1llc3RlcmRheSBhdF0gTFQnLFxuICAgICAgICAgICAgbGFzdFdlZWs6ICdbTGFzdF0gZGRkZCBbYXRdIExUJyxcbiAgICAgICAgICAgIHNhbWVFbHNlOiAnTCcsXG4gICAgICAgIH0sXG4gICAgICAgIHJlbGF0aXZlVGltZToge1xuICAgICAgICAgICAgZnV0dXJlOiAnaW4gJXMnLFxuICAgICAgICAgICAgcGFzdDogJyVzIGFnbycsXG4gICAgICAgICAgICBzOiAnYSBmZXcgc2Vjb25kcycsXG4gICAgICAgICAgICBzczogJyVkIHNlY29uZHMnLFxuICAgICAgICAgICAgbTogJ2EgbWludXRlJyxcbiAgICAgICAgICAgIG1tOiAnJWQgbWludXRlcycsXG4gICAgICAgICAgICBoOiAnYW4gaG91cicsXG4gICAgICAgICAgICBoaDogJyVkIGhvdXJzJyxcbiAgICAgICAgICAgIGQ6ICdhIGRheScsXG4gICAgICAgICAgICBkZDogJyVkIGRheXMnLFxuICAgICAgICAgICAgTTogJ2EgbW9udGgnLFxuICAgICAgICAgICAgTU06ICclZCBtb250aHMnLFxuICAgICAgICAgICAgeTogJ2EgeWVhcicsXG4gICAgICAgICAgICB5eTogJyVkIHllYXJzJyxcbiAgICAgICAgfSxcbiAgICAgICAgZGF5T2ZNb250aE9yZGluYWxQYXJzZTogL1xcZHsxLDJ9KHN0fG5kfHJkfHRoKS8sXG4gICAgICAgIG9yZGluYWw6IGZ1bmN0aW9uIChudW1iZXIpIHtcbiAgICAgICAgICAgIHZhciBiID0gbnVtYmVyICUgMTAsXG4gICAgICAgICAgICAgICAgb3V0cHV0ID1cbiAgICAgICAgICAgICAgICAgICAgfn4oKG51bWJlciAlIDEwMCkgLyAxMCkgPT09IDFcbiAgICAgICAgICAgICAgICAgICAgICAgID8gJ3RoJ1xuICAgICAgICAgICAgICAgICAgICAgICAgOiBiID09PSAxXG4gICAgICAgICAgICAgICAgICAgICAgICAgID8gJ3N0J1xuICAgICAgICAgICAgICAgICAgICAgICAgICA6IGIgPT09IDJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA/ICduZCdcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IGIgPT09IDNcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gJ3JkJ1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiAndGgnO1xuICAgICAgICAgICAgcmV0dXJuIG51bWJlciArIG91dHB1dDtcbiAgICAgICAgfSxcbiAgICAgICAgd2Vlazoge1xuICAgICAgICAgICAgZG93OiAxLCAvLyBNb25kYXkgaXMgdGhlIGZpcnN0IGRheSBvZiB0aGUgd2Vlay5cbiAgICAgICAgICAgIGRveTogNCwgLy8gVGhlIHdlZWsgdGhhdCBjb250YWlucyBKYW4gNHRoIGlzIHRoZSBmaXJzdCB3ZWVrIG9mIHRoZSB5ZWFyLlxuICAgICAgICB9LFxuICAgIH0pO1xuXG4gICAgcmV0dXJuIGVuSWU7XG5cbn0pKSk7XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///66584\n")},66615:(I,g,t)=>{"use strict";I.exports=t.p+"d71f59756ff0e9f2ef95.png"},66772:(I,g,t)=>{"use strict";I.exports=t.p+"4be5c30d4375f69b3c03.png"},67526:(__unused_webpack_module,exports)=>{"use strict";eval("\n\nexports.byteLength = byteLength\nexports.toByteArray = toByteArray\nexports.fromByteArray = fromByteArray\n\nvar lookup = []\nvar revLookup = []\nvar Arr = typeof Uint8Array !== 'undefined' ? Uint8Array : Array\n\nvar code = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'\nfor (var i = 0, len = code.length; i < len; ++i) {\n lookup[i] = code[i]\n revLookup[code.charCodeAt(i)] = i\n}\n\n// Support decoding URL-safe base64 strings, as Node.js does.\n// See: https://en.wikipedia.org/wiki/Base64#URL_applications\nrevLookup['-'.charCodeAt(0)] = 62\nrevLookup['_'.charCodeAt(0)] = 63\n\nfunction getLens (b64) {\n var len = b64.length\n\n if (len % 4 > 0) {\n throw new Error('Invalid string. Length must be a multiple of 4')\n }\n\n // Trim off extra bytes after placeholder bytes are found\n // See: https://github.com/beatgammit/base64-js/issues/42\n var validLen = b64.indexOf('=')\n if (validLen === -1) validLen = len\n\n var placeHoldersLen = validLen === len\n ? 0\n : 4 - (validLen % 4)\n\n return [validLen, placeHoldersLen]\n}\n\n// base64 is 4/3 + up to two characters of the original data\nfunction byteLength (b64) {\n var lens = getLens(b64)\n var validLen = lens[0]\n var placeHoldersLen = lens[1]\n return ((validLen + placeHoldersLen) * 3 / 4) - placeHoldersLen\n}\n\nfunction _byteLength (b64, validLen, placeHoldersLen) {\n return ((validLen + placeHoldersLen) * 3 / 4) - placeHoldersLen\n}\n\nfunction toByteArray (b64) {\n var tmp\n var lens = getLens(b64)\n var validLen = lens[0]\n var placeHoldersLen = lens[1]\n\n var arr = new Arr(_byteLength(b64, validLen, placeHoldersLen))\n\n var curByte = 0\n\n // if there are placeholders, only get up to the last complete 4 chars\n var len = placeHoldersLen > 0\n ? validLen - 4\n : validLen\n\n var i\n for (i = 0; i < len; i += 4) {\n tmp =\n (revLookup[b64.charCodeAt(i)] << 18) |\n (revLookup[b64.charCodeAt(i + 1)] << 12) |\n (revLookup[b64.charCodeAt(i + 2)] << 6) |\n revLookup[b64.charCodeAt(i + 3)]\n arr[curByte++] = (tmp >> 16) & 0xFF\n arr[curByte++] = (tmp >> 8) & 0xFF\n arr[curByte++] = tmp & 0xFF\n }\n\n if (placeHoldersLen === 2) {\n tmp =\n (revLookup[b64.charCodeAt(i)] << 2) |\n (revLookup[b64.charCodeAt(i + 1)] >> 4)\n arr[curByte++] = tmp & 0xFF\n }\n\n if (placeHoldersLen === 1) {\n tmp =\n (revLookup[b64.charCodeAt(i)] << 10) |\n (revLookup[b64.charCodeAt(i + 1)] << 4) |\n (revLookup[b64.charCodeAt(i + 2)] >> 2)\n arr[curByte++] = (tmp >> 8) & 0xFF\n arr[curByte++] = tmp & 0xFF\n }\n\n return arr\n}\n\nfunction tripletToBase64 (num) {\n return lookup[num >> 18 & 0x3F] +\n lookup[num >> 12 & 0x3F] +\n lookup[num >> 6 & 0x3F] +\n lookup[num & 0x3F]\n}\n\nfunction encodeChunk (uint8, start, end) {\n var tmp\n var output = []\n for (var i = start; i < end; i += 3) {\n tmp =\n ((uint8[i] << 16) & 0xFF0000) +\n ((uint8[i + 1] << 8) & 0xFF00) +\n (uint8[i + 2] & 0xFF)\n output.push(tripletToBase64(tmp))\n }\n return output.join('')\n}\n\nfunction fromByteArray (uint8) {\n var tmp\n var len = uint8.length\n var extraBytes = len % 3 // if we have 1 byte left, pad 2 bytes\n var parts = []\n var maxChunkLength = 16383 // must be multiple of 3\n\n // go through the array every three bytes, we'll deal with trailing stuff later\n for (var i = 0, len2 = len - extraBytes; i < len2; i += maxChunkLength) {\n parts.push(encodeChunk(uint8, i, (i + maxChunkLength) > len2 ? len2 : (i + maxChunkLength)))\n }\n\n // pad the end with zeros, but make sure to not forget the extra bytes\n if (extraBytes === 1) {\n tmp = uint8[len - 1]\n parts.push(\n lookup[tmp >> 2] +\n lookup[(tmp << 4) & 0x3F] +\n '=='\n )\n } else if (extraBytes === 2) {\n tmp = (uint8[len - 2] << 8) + uint8[len - 1]\n parts.push(\n lookup[tmp >> 10] +\n lookup[(tmp >> 4) & 0x3F] +\n lookup[(tmp << 2) & 0x3F] +\n '='\n )\n }\n\n return parts.join('')\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNjc1MjYuanMiLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vaXRnLW5leHRnZW4tZnJvbnRlbmQvLi9ub2RlX21vZHVsZXMvYmFzZTY0LWpzL2luZGV4LmpzPzFmYjUiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnXG5cbmV4cG9ydHMuYnl0ZUxlbmd0aCA9IGJ5dGVMZW5ndGhcbmV4cG9ydHMudG9CeXRlQXJyYXkgPSB0b0J5dGVBcnJheVxuZXhwb3J0cy5mcm9tQnl0ZUFycmF5ID0gZnJvbUJ5dGVBcnJheVxuXG52YXIgbG9va3VwID0gW11cbnZhciByZXZMb29rdXAgPSBbXVxudmFyIEFyciA9IHR5cGVvZiBVaW50OEFycmF5ICE9PSAndW5kZWZpbmVkJyA/IFVpbnQ4QXJyYXkgOiBBcnJheVxuXG52YXIgY29kZSA9ICdBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6MDEyMzQ1Njc4OSsvJ1xuZm9yICh2YXIgaSA9IDAsIGxlbiA9IGNvZGUubGVuZ3RoOyBpIDwgbGVuOyArK2kpIHtcbiAgbG9va3VwW2ldID0gY29kZVtpXVxuICByZXZMb29rdXBbY29kZS5jaGFyQ29kZUF0KGkpXSA9IGlcbn1cblxuLy8gU3VwcG9ydCBkZWNvZGluZyBVUkwtc2FmZSBiYXNlNjQgc3RyaW5ncywgYXMgTm9kZS5qcyBkb2VzLlxuLy8gU2VlOiBodHRwczovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9CYXNlNjQjVVJMX2FwcGxpY2F0aW9uc1xucmV2TG9va3VwWyctJy5jaGFyQ29kZUF0KDApXSA9IDYyXG5yZXZMb29rdXBbJ18nLmNoYXJDb2RlQXQoMCldID0gNjNcblxuZnVuY3Rpb24gZ2V0TGVucyAoYjY0KSB7XG4gIHZhciBsZW4gPSBiNjQubGVuZ3RoXG5cbiAgaWYgKGxlbiAlIDQgPiAwKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdJbnZhbGlkIHN0cmluZy4gTGVuZ3RoIG11c3QgYmUgYSBtdWx0aXBsZSBvZiA0JylcbiAgfVxuXG4gIC8vIFRyaW0gb2ZmIGV4dHJhIGJ5dGVzIGFmdGVyIHBsYWNlaG9sZGVyIGJ5dGVzIGFyZSBmb3VuZFxuICAvLyBTZWU6IGh0dHBzOi8vZ2l0aHViLmNvbS9iZWF0Z2FtbWl0L2Jhc2U2NC1qcy9pc3N1ZXMvNDJcbiAgdmFyIHZhbGlkTGVuID0gYjY0LmluZGV4T2YoJz0nKVxuICBpZiAodmFsaWRMZW4gPT09IC0xKSB2YWxpZExlbiA9IGxlblxuXG4gIHZhciBwbGFjZUhvbGRlcnNMZW4gPSB2YWxpZExlbiA9PT0gbGVuXG4gICAgPyAwXG4gICAgOiA0IC0gKHZhbGlkTGVuICUgNClcblxuICByZXR1cm4gW3ZhbGlkTGVuLCBwbGFjZUhvbGRlcnNMZW5dXG59XG5cbi8vIGJhc2U2NCBpcyA0LzMgKyB1cCB0byB0d28gY2hhcmFjdGVycyBvZiB0aGUgb3JpZ2luYWwgZGF0YVxuZnVuY3Rpb24gYnl0ZUxlbmd0aCAoYjY0KSB7XG4gIHZhciBsZW5zID0gZ2V0TGVucyhiNjQpXG4gIHZhciB2YWxpZExlbiA9IGxlbnNbMF1cbiAgdmFyIHBsYWNlSG9sZGVyc0xlbiA9IGxlbnNbMV1cbiAgcmV0dXJuICgodmFsaWRMZW4gKyBwbGFjZUhvbGRlcnNMZW4pICogMyAvIDQpIC0gcGxhY2VIb2xkZXJzTGVuXG59XG5cbmZ1bmN0aW9uIF9ieXRlTGVuZ3RoIChiNjQsIHZhbGlkTGVuLCBwbGFjZUhvbGRlcnNMZW4pIHtcbiAgcmV0dXJuICgodmFsaWRMZW4gKyBwbGFjZUhvbGRlcnNMZW4pICogMyAvIDQpIC0gcGxhY2VIb2xkZXJzTGVuXG59XG5cbmZ1bmN0aW9uIHRvQnl0ZUFycmF5IChiNjQpIHtcbiAgdmFyIHRtcFxuICB2YXIgbGVucyA9IGdldExlbnMoYjY0KVxuICB2YXIgdmFsaWRMZW4gPSBsZW5zWzBdXG4gIHZhciBwbGFjZUhvbGRlcnNMZW4gPSBsZW5zWzFdXG5cbiAgdmFyIGFyciA9IG5ldyBBcnIoX2J5dGVMZW5ndGgoYjY0LCB2YWxpZExlbiwgcGxhY2VIb2xkZXJzTGVuKSlcblxuICB2YXIgY3VyQnl0ZSA9IDBcblxuICAvLyBpZiB0aGVyZSBhcmUgcGxhY2Vob2xkZXJzLCBvbmx5IGdldCB1cCB0byB0aGUgbGFzdCBjb21wbGV0ZSA0IGNoYXJzXG4gIHZhciBsZW4gPSBwbGFjZUhvbGRlcnNMZW4gPiAwXG4gICAgPyB2YWxpZExlbiAtIDRcbiAgICA6IHZhbGlkTGVuXG5cbiAgdmFyIGlcbiAgZm9yIChpID0gMDsgaSA8IGxlbjsgaSArPSA0KSB7XG4gICAgdG1wID1cbiAgICAgIChyZXZMb29rdXBbYjY0LmNoYXJDb2RlQXQoaSldIDw8IDE4KSB8XG4gICAgICAocmV2TG9va3VwW2I2NC5jaGFyQ29kZUF0KGkgKyAxKV0gPDwgMTIpIHxcbiAgICAgIChyZXZMb29rdXBbYjY0LmNoYXJDb2RlQXQoaSArIDIpXSA8PCA2KSB8XG4gICAgICByZXZMb29rdXBbYjY0LmNoYXJDb2RlQXQoaSArIDMpXVxuICAgIGFycltjdXJCeXRlKytdID0gKHRtcCA+PiAxNikgJiAweEZGXG4gICAgYXJyW2N1ckJ5dGUrK10gPSAodG1wID4+IDgpICYgMHhGRlxuICAgIGFycltjdXJCeXRlKytdID0gdG1wICYgMHhGRlxuICB9XG5cbiAgaWYgKHBsYWNlSG9sZGVyc0xlbiA9PT0gMikge1xuICAgIHRtcCA9XG4gICAgICAocmV2TG9va3VwW2I2NC5jaGFyQ29kZUF0KGkpXSA8PCAyKSB8XG4gICAgICAocmV2TG9va3VwW2I2NC5jaGFyQ29kZUF0KGkgKyAxKV0gPj4gNClcbiAgICBhcnJbY3VyQnl0ZSsrXSA9IHRtcCAmIDB4RkZcbiAgfVxuXG4gIGlmIChwbGFjZUhvbGRlcnNMZW4gPT09IDEpIHtcbiAgICB0bXAgPVxuICAgICAgKHJldkxvb2t1cFtiNjQuY2hhckNvZGVBdChpKV0gPDwgMTApIHxcbiAgICAgIChyZXZMb29rdXBbYjY0LmNoYXJDb2RlQXQoaSArIDEpXSA8PCA0KSB8XG4gICAgICAocmV2TG9va3VwW2I2NC5jaGFyQ29kZUF0KGkgKyAyKV0gPj4gMilcbiAgICBhcnJbY3VyQnl0ZSsrXSA9ICh0bXAgPj4gOCkgJiAweEZGXG4gICAgYXJyW2N1ckJ5dGUrK10gPSB0bXAgJiAweEZGXG4gIH1cblxuICByZXR1cm4gYXJyXG59XG5cbmZ1bmN0aW9uIHRyaXBsZXRUb0Jhc2U2NCAobnVtKSB7XG4gIHJldHVybiBsb29rdXBbbnVtID4+IDE4ICYgMHgzRl0gK1xuICAgIGxvb2t1cFtudW0gPj4gMTIgJiAweDNGXSArXG4gICAgbG9va3VwW251bSA+PiA2ICYgMHgzRl0gK1xuICAgIGxvb2t1cFtudW0gJiAweDNGXVxufVxuXG5mdW5jdGlvbiBlbmNvZGVDaHVuayAodWludDgsIHN0YXJ0LCBlbmQpIHtcbiAgdmFyIHRtcFxuICB2YXIgb3V0cHV0ID0gW11cbiAgZm9yICh2YXIgaSA9IHN0YXJ0OyBpIDwgZW5kOyBpICs9IDMpIHtcbiAgICB0bXAgPVxuICAgICAgKCh1aW50OFtpXSA8PCAxNikgJiAweEZGMDAwMCkgK1xuICAgICAgKCh1aW50OFtpICsgMV0gPDwgOCkgJiAweEZGMDApICtcbiAgICAgICh1aW50OFtpICsgMl0gJiAweEZGKVxuICAgIG91dHB1dC5wdXNoKHRyaXBsZXRUb0Jhc2U2NCh0bXApKVxuICB9XG4gIHJldHVybiBvdXRwdXQuam9pbignJylcbn1cblxuZnVuY3Rpb24gZnJvbUJ5dGVBcnJheSAodWludDgpIHtcbiAgdmFyIHRtcFxuICB2YXIgbGVuID0gdWludDgubGVuZ3RoXG4gIHZhciBleHRyYUJ5dGVzID0gbGVuICUgMyAvLyBpZiB3ZSBoYXZlIDEgYnl0ZSBsZWZ0LCBwYWQgMiBieXRlc1xuICB2YXIgcGFydHMgPSBbXVxuICB2YXIgbWF4Q2h1bmtMZW5ndGggPSAxNjM4MyAvLyBtdXN0IGJlIG11bHRpcGxlIG9mIDNcblxuICAvLyBnbyB0aHJvdWdoIHRoZSBhcnJheSBldmVyeSB0aHJlZSBieXRlcywgd2UnbGwgZGVhbCB3aXRoIHRyYWlsaW5nIHN0dWZmIGxhdGVyXG4gIGZvciAodmFyIGkgPSAwLCBsZW4yID0gbGVuIC0gZXh0cmFCeXRlczsgaSA8IGxlbjI7IGkgKz0gbWF4Q2h1bmtMZW5ndGgpIHtcbiAgICBwYXJ0cy5wdXNoKGVuY29kZUNodW5rKHVpbnQ4LCBpLCAoaSArIG1heENodW5rTGVuZ3RoKSA+IGxlbjIgPyBsZW4yIDogKGkgKyBtYXhDaHVua0xlbmd0aCkpKVxuICB9XG5cbiAgLy8gcGFkIHRoZSBlbmQgd2l0aCB6ZXJvcywgYnV0IG1ha2Ugc3VyZSB0byBub3QgZm9yZ2V0IHRoZSBleHRyYSBieXRlc1xuICBpZiAoZXh0cmFCeXRlcyA9PT0gMSkge1xuICAgIHRtcCA9IHVpbnQ4W2xlbiAtIDFdXG4gICAgcGFydHMucHVzaChcbiAgICAgIGxvb2t1cFt0bXAgPj4gMl0gK1xuICAgICAgbG9va3VwWyh0bXAgPDwgNCkgJiAweDNGXSArXG4gICAgICAnPT0nXG4gICAgKVxuICB9IGVsc2UgaWYgKGV4dHJhQnl0ZXMgPT09IDIpIHtcbiAgICB0bXAgPSAodWludDhbbGVuIC0gMl0gPDwgOCkgKyB1aW50OFtsZW4gLSAxXVxuICAgIHBhcnRzLnB1c2goXG4gICAgICBsb29rdXBbdG1wID4+IDEwXSArXG4gICAgICBsb29rdXBbKHRtcCA+PiA0KSAmIDB4M0ZdICtcbiAgICAgIGxvb2t1cFsodG1wIDw8IDIpICYgMHgzRl0gK1xuICAgICAgJz0nXG4gICAgKVxuICB9XG5cbiAgcmV0dXJuIHBhcnRzLmpvaW4oJycpXG59XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///67526\n")},67527:(I,g,t)=>{"use strict";I.exports=t.p+"158e653bfc9b04f218fb.png"},67573:(I,g,t)=>{"use strict";I.exports=t.p+"5338cf3c5836cace3c19.png"},68732:(I,g,t)=>{"use strict";I.exports=t.p+"cfc23a4de95ff1554734.png"},68806:(I,g,t)=>{"use strict";I.exports=t.p+"6ed9a9e54a11dc82b51c.png"},69012:module=>{"use strict";eval("\n\nmodule.exports = function bind(fn, thisArg) {\n return function wrap() {\n var args = new Array(arguments.length);\n for (var i = 0; i < args.length; i++) {\n args[i] = arguments[i];\n }\n return fn.apply(thisArg, args);\n };\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNjkwMTIuanMiLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL2l0Zy1uZXh0Z2VuLWZyb250ZW5kLy4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9oZWxwZXJzL2JpbmQuanM/MWQyYiJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gYmluZChmbiwgdGhpc0FyZykge1xuICByZXR1cm4gZnVuY3Rpb24gd3JhcCgpIHtcbiAgICB2YXIgYXJncyA9IG5ldyBBcnJheShhcmd1bWVudHMubGVuZ3RoKTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGFyZ3MubGVuZ3RoOyBpKyspIHtcbiAgICAgIGFyZ3NbaV0gPSBhcmd1bWVudHNbaV07XG4gICAgfVxuICAgIHJldHVybiBmbi5hcHBseSh0aGlzQXJnLCBhcmdzKTtcbiAgfTtcbn07XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///69012\n")},69183:(I,g,t)=>{"use strict";I.exports=t.p+"52f016e3fe437d51ddf9.png"},69330:function(__unused_webpack_module,__unused_webpack_exports,__webpack_require__){eval("//! moment.js locale configuration\n//! locale : Occitan, lengadocian dialecte [oc-lnc]\n//! author : Quentin PAGÈS : https://github.com/Quenty31\n\n;(function (global, factory) {\n true ? factory(__webpack_require__(95093)) :\n 0\n}(this, (function (moment) { 'use strict';\n\n //! moment.js locale configuration\n\n var ocLnc = moment.defineLocale('oc-lnc', {\n months: {\n standalone:\n 'genièr_febrièr_març_abril_mai_junh_julhet_agost_setembre_octòbre_novembre_decembre'.split(\n '_'\n ),\n format: \"de genièr_de febrièr_de març_d'abril_de mai_de junh_de julhet_d'agost_de setembre_d'octòbre_de novembre_de decembre\".split(\n '_'\n ),\n isFormat: /D[oD]?(\\s)+MMMM/,\n },\n monthsShort:\n 'gen._febr._març_abr._mai_junh_julh._ago._set._oct._nov._dec.'.split(\n '_'\n ),\n monthsParseExact: true,\n weekdays: 'dimenge_diluns_dimars_dimècres_dijòus_divendres_dissabte'.split(\n '_'\n ),\n weekdaysShort: 'dg._dl._dm._dc._dj._dv._ds.'.split('_'),\n weekdaysMin: 'dg_dl_dm_dc_dj_dv_ds'.split('_'),\n weekdaysParseExact: true,\n longDateFormat: {\n LT: 'H:mm',\n LTS: 'H:mm:ss',\n L: 'DD/MM/YYYY',\n LL: 'D MMMM [de] YYYY',\n ll: 'D MMM YYYY',\n LLL: 'D MMMM [de] YYYY [a] H:mm',\n lll: 'D MMM YYYY, H:mm',\n LLLL: 'dddd D MMMM [de] YYYY [a] H:mm',\n llll: 'ddd D MMM YYYY, H:mm',\n },\n calendar: {\n sameDay: '[uèi a] LT',\n nextDay: '[deman a] LT',\n nextWeek: 'dddd [a] LT',\n lastDay: '[ièr a] LT',\n lastWeek: 'dddd [passat a] LT',\n sameElse: 'L',\n },\n relativeTime: {\n future: \"d'aquí %s\",\n past: 'fa %s',\n s: 'unas segondas',\n ss: '%d segondas',\n m: 'una minuta',\n mm: '%d minutas',\n h: 'una ora',\n hh: '%d oras',\n d: 'un jorn',\n dd: '%d jorns',\n M: 'un mes',\n MM: '%d meses',\n y: 'un an',\n yy: '%d ans',\n },\n dayOfMonthOrdinalParse: /\\d{1,2}(r|n|t|è|a)/,\n ordinal: function (number, period) {\n var output =\n number === 1\n ? 'r'\n : number === 2\n ? 'n'\n : number === 3\n ? 'r'\n : number === 4\n ? 't'\n : 'è';\n if (period === 'w' || period === 'W') {\n output = 'a';\n }\n return number + output;\n },\n week: {\n dow: 1, // Monday is the first day of the week.\n doy: 4,\n },\n });\n\n return ocLnc;\n\n})));\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNjkzMzAuanMiLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9pdGctbmV4dGdlbi1mcm9udGVuZC8uL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL29jLWxuYy5qcz8xNjdiIl0sInNvdXJjZXNDb250ZW50IjpbIi8vISBtb21lbnQuanMgbG9jYWxlIGNvbmZpZ3VyYXRpb25cbi8vISBsb2NhbGUgOiBPY2NpdGFuLCBsZW5nYWRvY2lhbiBkaWFsZWN0ZSBbb2MtbG5jXVxuLy8hIGF1dGhvciA6IFF1ZW50aW4gUEFHw4hTIDogaHR0cHM6Ly9naXRodWIuY29tL1F1ZW50eTMxXG5cbjsoZnVuY3Rpb24gKGdsb2JhbCwgZmFjdG9yeSkge1xuICAgdHlwZW9mIGV4cG9ydHMgPT09ICdvYmplY3QnICYmIHR5cGVvZiBtb2R1bGUgIT09ICd1bmRlZmluZWQnXG4gICAgICAgJiYgdHlwZW9mIHJlcXVpcmUgPT09ICdmdW5jdGlvbicgPyBmYWN0b3J5KHJlcXVpcmUoJy4uL21vbWVudCcpKSA6XG4gICB0eXBlb2YgZGVmaW5lID09PSAnZnVuY3Rpb24nICYmIGRlZmluZS5hbWQgPyBkZWZpbmUoWycuLi9tb21lbnQnXSwgZmFjdG9yeSkgOlxuICAgZmFjdG9yeShnbG9iYWwubW9tZW50KVxufSh0aGlzLCAoZnVuY3Rpb24gKG1vbWVudCkgeyAndXNlIHN0cmljdCc7XG5cbiAgICAvLyEgbW9tZW50LmpzIGxvY2FsZSBjb25maWd1cmF0aW9uXG5cbiAgICB2YXIgb2NMbmMgPSBtb21lbnQuZGVmaW5lTG9jYWxlKCdvYy1sbmMnLCB7XG4gICAgICAgIG1vbnRoczoge1xuICAgICAgICAgICAgc3RhbmRhbG9uZTpcbiAgICAgICAgICAgICAgICAnZ2VuacOocl9mZWJyacOocl9tYXLDp19hYnJpbF9tYWlfanVuaF9qdWxoZXRfYWdvc3Rfc2V0ZW1icmVfb2N0w7JicmVfbm92ZW1icmVfZGVjZW1icmUnLnNwbGl0KFxuICAgICAgICAgICAgICAgICAgICAnXydcbiAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgZm9ybWF0OiBcImRlIGdlbmnDqHJfZGUgZmVicmnDqHJfZGUgbWFyw6dfZCdhYnJpbF9kZSBtYWlfZGUganVuaF9kZSBqdWxoZXRfZCdhZ29zdF9kZSBzZXRlbWJyZV9kJ29jdMOyYnJlX2RlIG5vdmVtYnJlX2RlIGRlY2VtYnJlXCIuc3BsaXQoXG4gICAgICAgICAgICAgICAgJ18nXG4gICAgICAgICAgICApLFxuICAgICAgICAgICAgaXNGb3JtYXQ6IC9EW29EXT8oXFxzKStNTU1NLyxcbiAgICAgICAgfSxcbiAgICAgICAgbW9udGhzU2hvcnQ6XG4gICAgICAgICAgICAnZ2VuLl9mZWJyLl9tYXLDp19hYnIuX21haV9qdW5oX2p1bGguX2Fnby5fc2V0Ll9vY3QuX25vdi5fZGVjLicuc3BsaXQoXG4gICAgICAgICAgICAgICAgJ18nXG4gICAgICAgICAgICApLFxuICAgICAgICBtb250aHNQYXJzZUV4YWN0OiB0cnVlLFxuICAgICAgICB3ZWVrZGF5czogJ2RpbWVuZ2VfZGlsdW5zX2RpbWFyc19kaW3DqGNyZXNfZGlqw7J1c19kaXZlbmRyZXNfZGlzc2FidGUnLnNwbGl0KFxuICAgICAgICAgICAgJ18nXG4gICAgICAgICksXG4gICAgICAgIHdlZWtkYXlzU2hvcnQ6ICdkZy5fZGwuX2RtLl9kYy5fZGouX2R2Ll9kcy4nLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzTWluOiAnZGdfZGxfZG1fZGNfZGpfZHZfZHMnLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzUGFyc2VFeGFjdDogdHJ1ZSxcbiAgICAgICAgbG9uZ0RhdGVGb3JtYXQ6IHtcbiAgICAgICAgICAgIExUOiAnSDptbScsXG4gICAgICAgICAgICBMVFM6ICdIOm1tOnNzJyxcbiAgICAgICAgICAgIEw6ICdERC9NTS9ZWVlZJyxcbiAgICAgICAgICAgIExMOiAnRCBNTU1NIFtkZV0gWVlZWScsXG4gICAgICAgICAgICBsbDogJ0QgTU1NIFlZWVknLFxuICAgICAgICAgICAgTExMOiAnRCBNTU1NIFtkZV0gWVlZWSBbYV0gSDptbScsXG4gICAgICAgICAgICBsbGw6ICdEIE1NTSBZWVlZLCBIOm1tJyxcbiAgICAgICAgICAgIExMTEw6ICdkZGRkIEQgTU1NTSBbZGVdIFlZWVkgW2FdIEg6bW0nLFxuICAgICAgICAgICAgbGxsbDogJ2RkZCBEIE1NTSBZWVlZLCBIOm1tJyxcbiAgICAgICAgfSxcbiAgICAgICAgY2FsZW5kYXI6IHtcbiAgICAgICAgICAgIHNhbWVEYXk6ICdbdcOoaSBhXSBMVCcsXG4gICAgICAgICAgICBuZXh0RGF5OiAnW2RlbWFuIGFdIExUJyxcbiAgICAgICAgICAgIG5leHRXZWVrOiAnZGRkZCBbYV0gTFQnLFxuICAgICAgICAgICAgbGFzdERheTogJ1tpw6hyIGFdIExUJyxcbiAgICAgICAgICAgIGxhc3RXZWVrOiAnZGRkZCBbcGFzc2F0IGFdIExUJyxcbiAgICAgICAgICAgIHNhbWVFbHNlOiAnTCcsXG4gICAgICAgIH0sXG4gICAgICAgIHJlbGF0aXZlVGltZToge1xuICAgICAgICAgICAgZnV0dXJlOiBcImQnYXF1w60gJXNcIixcbiAgICAgICAgICAgIHBhc3Q6ICdmYSAlcycsXG4gICAgICAgICAgICBzOiAndW5hcyBzZWdvbmRhcycsXG4gICAgICAgICAgICBzczogJyVkIHNlZ29uZGFzJyxcbiAgICAgICAgICAgIG06ICd1bmEgbWludXRhJyxcbiAgICAgICAgICAgIG1tOiAnJWQgbWludXRhcycsXG4gICAgICAgICAgICBoOiAndW5hIG9yYScsXG4gICAgICAgICAgICBoaDogJyVkIG9yYXMnLFxuICAgICAgICAgICAgZDogJ3VuIGpvcm4nLFxuICAgICAgICAgICAgZGQ6ICclZCBqb3JucycsXG4gICAgICAgICAgICBNOiAndW4gbWVzJyxcbiAgICAgICAgICAgIE1NOiAnJWQgbWVzZXMnLFxuICAgICAgICAgICAgeTogJ3VuIGFuJyxcbiAgICAgICAgICAgIHl5OiAnJWQgYW5zJyxcbiAgICAgICAgfSxcbiAgICAgICAgZGF5T2ZNb250aE9yZGluYWxQYXJzZTogL1xcZHsxLDJ9KHJ8bnx0fMOofGEpLyxcbiAgICAgICAgb3JkaW5hbDogZnVuY3Rpb24gKG51bWJlciwgcGVyaW9kKSB7XG4gICAgICAgICAgICB2YXIgb3V0cHV0ID1cbiAgICAgICAgICAgICAgICBudW1iZXIgPT09IDFcbiAgICAgICAgICAgICAgICAgICAgPyAncidcbiAgICAgICAgICAgICAgICAgICAgOiBudW1iZXIgPT09IDJcbiAgICAgICAgICAgICAgICAgICAgICA/ICduJ1xuICAgICAgICAgICAgICAgICAgICAgIDogbnVtYmVyID09PSAzXG4gICAgICAgICAgICAgICAgICAgICAgICA/ICdyJ1xuICAgICAgICAgICAgICAgICAgICAgICAgOiBudW1iZXIgPT09IDRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPyAndCdcbiAgICAgICAgICAgICAgICAgICAgICAgICAgOiAnw6gnO1xuICAgICAgICAgICAgaWYgKHBlcmlvZCA9PT0gJ3cnIHx8IHBlcmlvZCA9PT0gJ1cnKSB7XG4gICAgICAgICAgICAgICAgb3V0cHV0ID0gJ2EnO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIG51bWJlciArIG91dHB1dDtcbiAgICAgICAgfSxcbiAgICAgICAgd2Vlazoge1xuICAgICAgICAgICAgZG93OiAxLCAvLyBNb25kYXkgaXMgdGhlIGZpcnN0IGRheSBvZiB0aGUgd2Vlay5cbiAgICAgICAgICAgIGRveTogNCxcbiAgICAgICAgfSxcbiAgICB9KTtcblxuICAgIHJldHVybiBvY0xuYztcblxufSkpKTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///69330\n")},69341:(I,g,t)=>{"use strict";I.exports=t.p+"26e4e35c44b27e22adaa.png"},69532:function(__unused_webpack_module,__unused_webpack_exports,__webpack_require__){eval("//! moment.js locale configuration\n//! locale : Latvian [lv]\n//! author : Kristaps Karlsons : https://github.com/skakri\n//! author : Jānis Elmeris : https://github.com/JanisE\n\n;(function (global, factory) {\n true ? factory(__webpack_require__(95093)) :\n 0\n}(this, (function (moment) { 'use strict';\n\n //! moment.js locale configuration\n\n var units = {\n ss: 'sekundes_sekundēm_sekunde_sekundes'.split('_'),\n m: 'minūtes_minūtēm_minūte_minūtes'.split('_'),\n mm: 'minūtes_minūtēm_minūte_minūtes'.split('_'),\n h: 'stundas_stundām_stunda_stundas'.split('_'),\n hh: 'stundas_stundām_stunda_stundas'.split('_'),\n d: 'dienas_dienām_diena_dienas'.split('_'),\n dd: 'dienas_dienām_diena_dienas'.split('_'),\n M: 'mēneša_mēnešiem_mēnesis_mēneši'.split('_'),\n MM: 'mēneša_mēnešiem_mēnesis_mēneši'.split('_'),\n y: 'gada_gadiem_gads_gadi'.split('_'),\n yy: 'gada_gadiem_gads_gadi'.split('_'),\n };\n /**\n * @param withoutSuffix boolean true = a length of time; false = before/after a period of time.\n */\n function format(forms, number, withoutSuffix) {\n if (withoutSuffix) {\n // E.g. \"21 minūte\", \"3 minūtes\".\n return number % 10 === 1 && number % 100 !== 11 ? forms[2] : forms[3];\n } else {\n // E.g. \"21 minūtes\" as in \"pēc 21 minūtes\".\n // E.g. \"3 minūtēm\" as in \"pēc 3 minūtēm\".\n return number % 10 === 1 && number % 100 !== 11 ? forms[0] : forms[1];\n }\n }\n function relativeTimeWithPlural(number, withoutSuffix, key) {\n return number + ' ' + format(units[key], number, withoutSuffix);\n }\n function relativeTimeWithSingular(number, withoutSuffix, key) {\n return format(units[key], number, withoutSuffix);\n }\n function relativeSeconds(number, withoutSuffix) {\n return withoutSuffix ? 'dažas sekundes' : 'dažām sekundēm';\n }\n\n var lv = moment.defineLocale('lv', {\n months: 'janvāris_februāris_marts_aprīlis_maijs_jūnijs_jūlijs_augusts_septembris_oktobris_novembris_decembris'.split(\n '_'\n ),\n monthsShort: 'jan_feb_mar_apr_mai_jūn_jūl_aug_sep_okt_nov_dec'.split('_'),\n weekdays:\n 'svētdiena_pirmdiena_otrdiena_trešdiena_ceturtdiena_piektdiena_sestdiena'.split(\n '_'\n ),\n weekdaysShort: 'Sv_P_O_T_C_Pk_S'.split('_'),\n weekdaysMin: 'Sv_P_O_T_C_Pk_S'.split('_'),\n weekdaysParseExact: true,\n longDateFormat: {\n LT: 'HH:mm',\n LTS: 'HH:mm:ss',\n L: 'DD.MM.YYYY.',\n LL: 'YYYY. [gada] D. MMMM',\n LLL: 'YYYY. [gada] D. MMMM, HH:mm',\n LLLL: 'YYYY. [gada] D. MMMM, dddd, HH:mm',\n },\n calendar: {\n sameDay: '[Šodien pulksten] LT',\n nextDay: '[Rīt pulksten] LT',\n nextWeek: 'dddd [pulksten] LT',\n lastDay: '[Vakar pulksten] LT',\n lastWeek: '[Pagājušā] dddd [pulksten] LT',\n sameElse: 'L',\n },\n relativeTime: {\n future: 'pēc %s',\n past: 'pirms %s',\n s: relativeSeconds,\n ss: relativeTimeWithPlural,\n m: relativeTimeWithSingular,\n mm: relativeTimeWithPlural,\n h: relativeTimeWithSingular,\n hh: relativeTimeWithPlural,\n d: relativeTimeWithSingular,\n dd: relativeTimeWithPlural,\n M: relativeTimeWithSingular,\n MM: relativeTimeWithPlural,\n y: relativeTimeWithSingular,\n yy: relativeTimeWithPlural,\n },\n dayOfMonthOrdinalParse: /\\d{1,2}\\./,\n ordinal: '%d.',\n week: {\n dow: 1, // Monday is the first day of the week.\n doy: 4, // The week that contains Jan 4th is the first week of the year.\n },\n });\n\n return lv;\n\n})));\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNjk1MzIuanMiLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9pdGctbmV4dGdlbi1mcm9udGVuZC8uL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL2x2LmpzP2I5N2MiXSwic291cmNlc0NvbnRlbnQiOlsiLy8hIG1vbWVudC5qcyBsb2NhbGUgY29uZmlndXJhdGlvblxuLy8hIGxvY2FsZSA6IExhdHZpYW4gW2x2XVxuLy8hIGF1dGhvciA6IEtyaXN0YXBzIEthcmxzb25zIDogaHR0cHM6Ly9naXRodWIuY29tL3NrYWtyaVxuLy8hIGF1dGhvciA6IErEgW5pcyBFbG1lcmlzIDogaHR0cHM6Ly9naXRodWIuY29tL0phbmlzRVxuXG47KGZ1bmN0aW9uIChnbG9iYWwsIGZhY3RvcnkpIHtcbiAgIHR5cGVvZiBleHBvcnRzID09PSAnb2JqZWN0JyAmJiB0eXBlb2YgbW9kdWxlICE9PSAndW5kZWZpbmVkJ1xuICAgICAgICYmIHR5cGVvZiByZXF1aXJlID09PSAnZnVuY3Rpb24nID8gZmFjdG9yeShyZXF1aXJlKCcuLi9tb21lbnQnKSkgOlxuICAgdHlwZW9mIGRlZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiBkZWZpbmUuYW1kID8gZGVmaW5lKFsnLi4vbW9tZW50J10sIGZhY3RvcnkpIDpcbiAgIGZhY3RvcnkoZ2xvYmFsLm1vbWVudClcbn0odGhpcywgKGZ1bmN0aW9uIChtb21lbnQpIHsgJ3VzZSBzdHJpY3QnO1xuXG4gICAgLy8hIG1vbWVudC5qcyBsb2NhbGUgY29uZmlndXJhdGlvblxuXG4gICAgdmFyIHVuaXRzID0ge1xuICAgICAgICBzczogJ3Nla3VuZGVzX3Nla3VuZMSTbV9zZWt1bmRlX3Nla3VuZGVzJy5zcGxpdCgnXycpLFxuICAgICAgICBtOiAnbWluxat0ZXNfbWluxat0xJNtX21pbsWrdGVfbWluxat0ZXMnLnNwbGl0KCdfJyksXG4gICAgICAgIG1tOiAnbWluxat0ZXNfbWluxat0xJNtX21pbsWrdGVfbWluxat0ZXMnLnNwbGl0KCdfJyksXG4gICAgICAgIGg6ICdzdHVuZGFzX3N0dW5kxIFtX3N0dW5kYV9zdHVuZGFzJy5zcGxpdCgnXycpLFxuICAgICAgICBoaDogJ3N0dW5kYXNfc3R1bmTEgW1fc3R1bmRhX3N0dW5kYXMnLnNwbGl0KCdfJyksXG4gICAgICAgIGQ6ICdkaWVuYXNfZGllbsSBbV9kaWVuYV9kaWVuYXMnLnNwbGl0KCdfJyksXG4gICAgICAgIGRkOiAnZGllbmFzX2RpZW7EgW1fZGllbmFfZGllbmFzJy5zcGxpdCgnXycpLFxuICAgICAgICBNOiAnbcSTbmXFoWFfbcSTbmXFoWllbV9txJNuZXNpc19txJNuZcWhaScuc3BsaXQoJ18nKSxcbiAgICAgICAgTU06ICdtxJNuZcWhYV9txJNuZcWhaWVtX23Ek25lc2lzX23Ek25lxaFpJy5zcGxpdCgnXycpLFxuICAgICAgICB5OiAnZ2FkYV9nYWRpZW1fZ2Fkc19nYWRpJy5zcGxpdCgnXycpLFxuICAgICAgICB5eTogJ2dhZGFfZ2FkaWVtX2dhZHNfZ2FkaScuc3BsaXQoJ18nKSxcbiAgICB9O1xuICAgIC8qKlxuICAgICAqIEBwYXJhbSB3aXRob3V0U3VmZml4IGJvb2xlYW4gdHJ1ZSA9IGEgbGVuZ3RoIG9mIHRpbWU7IGZhbHNlID0gYmVmb3JlL2FmdGVyIGEgcGVyaW9kIG9mIHRpbWUuXG4gICAgICovXG4gICAgZnVuY3Rpb24gZm9ybWF0KGZvcm1zLCBudW1iZXIsIHdpdGhvdXRTdWZmaXgpIHtcbiAgICAgICAgaWYgKHdpdGhvdXRTdWZmaXgpIHtcbiAgICAgICAgICAgIC8vIEUuZy4gXCIyMSBtaW7Fq3RlXCIsIFwiMyBtaW7Fq3Rlc1wiLlxuICAgICAgICAgICAgcmV0dXJuIG51bWJlciAlIDEwID09PSAxICYmIG51bWJlciAlIDEwMCAhPT0gMTEgPyBmb3Jtc1syXSA6IGZvcm1zWzNdO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgLy8gRS5nLiBcIjIxIG1pbsWrdGVzXCIgYXMgaW4gXCJwxJNjIDIxIG1pbsWrdGVzXCIuXG4gICAgICAgICAgICAvLyBFLmcuIFwiMyBtaW7Fq3TEk21cIiBhcyBpbiBcInDEk2MgMyBtaW7Fq3TEk21cIi5cbiAgICAgICAgICAgIHJldHVybiBudW1iZXIgJSAxMCA9PT0gMSAmJiBudW1iZXIgJSAxMDAgIT09IDExID8gZm9ybXNbMF0gOiBmb3Jtc1sxXTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBmdW5jdGlvbiByZWxhdGl2ZVRpbWVXaXRoUGx1cmFsKG51bWJlciwgd2l0aG91dFN1ZmZpeCwga2V5KSB7XG4gICAgICAgIHJldHVybiBudW1iZXIgKyAnICcgKyBmb3JtYXQodW5pdHNba2V5XSwgbnVtYmVyLCB3aXRob3V0U3VmZml4KTtcbiAgICB9XG4gICAgZnVuY3Rpb24gcmVsYXRpdmVUaW1lV2l0aFNpbmd1bGFyKG51bWJlciwgd2l0aG91dFN1ZmZpeCwga2V5KSB7XG4gICAgICAgIHJldHVybiBmb3JtYXQodW5pdHNba2V5XSwgbnVtYmVyLCB3aXRob3V0U3VmZml4KTtcbiAgICB9XG4gICAgZnVuY3Rpb24gcmVsYXRpdmVTZWNvbmRzKG51bWJlciwgd2l0aG91dFN1ZmZpeCkge1xuICAgICAgICByZXR1cm4gd2l0aG91dFN1ZmZpeCA/ICdkYcW+YXMgc2VrdW5kZXMnIDogJ2Rhxb7EgW0gc2VrdW5kxJNtJztcbiAgICB9XG5cbiAgICB2YXIgbHYgPSBtb21lbnQuZGVmaW5lTG9jYWxlKCdsdicsIHtcbiAgICAgICAgbW9udGhzOiAnamFudsSBcmlzX2ZlYnJ1xIFyaXNfbWFydHNfYXByxKtsaXNfbWFpanNfasWrbmlqc19qxatsaWpzX2F1Z3VzdHNfc2VwdGVtYnJpc19va3RvYnJpc19ub3ZlbWJyaXNfZGVjZW1icmlzJy5zcGxpdChcbiAgICAgICAgICAgICdfJ1xuICAgICAgICApLFxuICAgICAgICBtb250aHNTaG9ydDogJ2phbl9mZWJfbWFyX2Fwcl9tYWlfasWrbl9qxatsX2F1Z19zZXBfb2t0X25vdl9kZWMnLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzOlxuICAgICAgICAgICAgJ3N2xJN0ZGllbmFfcGlybWRpZW5hX290cmRpZW5hX3RyZcWhZGllbmFfY2V0dXJ0ZGllbmFfcGlla3RkaWVuYV9zZXN0ZGllbmEnLnNwbGl0KFxuICAgICAgICAgICAgICAgICdfJ1xuICAgICAgICAgICAgKSxcbiAgICAgICAgd2Vla2RheXNTaG9ydDogJ1N2X1BfT19UX0NfUGtfUycuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXNNaW46ICdTdl9QX09fVF9DX1BrX1MnLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzUGFyc2VFeGFjdDogdHJ1ZSxcbiAgICAgICAgbG9uZ0RhdGVGb3JtYXQ6IHtcbiAgICAgICAgICAgIExUOiAnSEg6bW0nLFxuICAgICAgICAgICAgTFRTOiAnSEg6bW06c3MnLFxuICAgICAgICAgICAgTDogJ0RELk1NLllZWVkuJyxcbiAgICAgICAgICAgIExMOiAnWVlZWS4gW2dhZGFdIEQuIE1NTU0nLFxuICAgICAgICAgICAgTExMOiAnWVlZWS4gW2dhZGFdIEQuIE1NTU0sIEhIOm1tJyxcbiAgICAgICAgICAgIExMTEw6ICdZWVlZLiBbZ2FkYV0gRC4gTU1NTSwgZGRkZCwgSEg6bW0nLFxuICAgICAgICB9LFxuICAgICAgICBjYWxlbmRhcjoge1xuICAgICAgICAgICAgc2FtZURheTogJ1vFoG9kaWVuIHB1bGtzdGVuXSBMVCcsXG4gICAgICAgICAgICBuZXh0RGF5OiAnW1LEq3QgcHVsa3N0ZW5dIExUJyxcbiAgICAgICAgICAgIG5leHRXZWVrOiAnZGRkZCBbcHVsa3N0ZW5dIExUJyxcbiAgICAgICAgICAgIGxhc3REYXk6ICdbVmFrYXIgcHVsa3N0ZW5dIExUJyxcbiAgICAgICAgICAgIGxhc3RXZWVrOiAnW1BhZ8SBanXFocSBXSBkZGRkIFtwdWxrc3Rlbl0gTFQnLFxuICAgICAgICAgICAgc2FtZUVsc2U6ICdMJyxcbiAgICAgICAgfSxcbiAgICAgICAgcmVsYXRpdmVUaW1lOiB7XG4gICAgICAgICAgICBmdXR1cmU6ICdwxJNjICVzJyxcbiAgICAgICAgICAgIHBhc3Q6ICdwaXJtcyAlcycsXG4gICAgICAgICAgICBzOiByZWxhdGl2ZVNlY29uZHMsXG4gICAgICAgICAgICBzczogcmVsYXRpdmVUaW1lV2l0aFBsdXJhbCxcbiAgICAgICAgICAgIG06IHJlbGF0aXZlVGltZVdpdGhTaW5ndWxhcixcbiAgICAgICAgICAgIG1tOiByZWxhdGl2ZVRpbWVXaXRoUGx1cmFsLFxuICAgICAgICAgICAgaDogcmVsYXRpdmVUaW1lV2l0aFNpbmd1bGFyLFxuICAgICAgICAgICAgaGg6IHJlbGF0aXZlVGltZVdpdGhQbHVyYWwsXG4gICAgICAgICAgICBkOiByZWxhdGl2ZVRpbWVXaXRoU2luZ3VsYXIsXG4gICAgICAgICAgICBkZDogcmVsYXRpdmVUaW1lV2l0aFBsdXJhbCxcbiAgICAgICAgICAgIE06IHJlbGF0aXZlVGltZVdpdGhTaW5ndWxhcixcbiAgICAgICAgICAgIE1NOiByZWxhdGl2ZVRpbWVXaXRoUGx1cmFsLFxuICAgICAgICAgICAgeTogcmVsYXRpdmVUaW1lV2l0aFNpbmd1bGFyLFxuICAgICAgICAgICAgeXk6IHJlbGF0aXZlVGltZVdpdGhQbHVyYWwsXG4gICAgICAgIH0sXG4gICAgICAgIGRheU9mTW9udGhPcmRpbmFsUGFyc2U6IC9cXGR7MSwyfVxcLi8sXG4gICAgICAgIG9yZGluYWw6ICclZC4nLFxuICAgICAgICB3ZWVrOiB7XG4gICAgICAgICAgICBkb3c6IDEsIC8vIE1vbmRheSBpcyB0aGUgZmlyc3QgZGF5IG9mIHRoZSB3ZWVrLlxuICAgICAgICAgICAgZG95OiA0LCAvLyBUaGUgd2VlayB0aGF0IGNvbnRhaW5zIEphbiA0dGggaXMgdGhlIGZpcnN0IHdlZWsgb2YgdGhlIHllYXIuXG4gICAgICAgIH0sXG4gICAgfSk7XG5cbiAgICByZXR1cm4gbHY7XG5cbn0pKSk7XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///69532\n")},69903:(I,g,t)=>{"use strict";I.exports=t.p+"77fa7d88df546421e207.png"},69982:(module,__unused_webpack_exports,__webpack_require__)=>{"use strict";eval("\n\nif (true) {\n module.exports = __webpack_require__(7463);\n} else {}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNjk5ODIuanMiLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL2l0Zy1uZXh0Z2VuLWZyb250ZW5kLy4vbm9kZV9tb2R1bGVzL3NjaGVkdWxlci9pbmRleC5qcz80MDI5Il0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxuaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WID09PSAncHJvZHVjdGlvbicpIHtcbiAgbW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuL2Nqcy9zY2hlZHVsZXIucHJvZHVjdGlvbi5taW4uanMnKTtcbn0gZWxzZSB7XG4gIG1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi9janMvc2NoZWR1bGVyLmRldmVsb3BtZW50LmpzJyk7XG59XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///69982\n")},70019:function(module,exports,__webpack_require__){eval(";(function (root, factory, undef) {\n\tif (true) {\n\t\t// CommonJS\n\t\tmodule.exports = exports = factory(__webpack_require__(19021), __webpack_require__(63009), __webpack_require__(51025));\n\t}\n\telse {}\n}(this, function (CryptoJS) {\n\n\t(function () {\n\t // Shortcuts\n\t var C = CryptoJS;\n\t var C_lib = C.lib;\n\t var Base = C_lib.Base;\n\t var WordArray = C_lib.WordArray;\n\t var C_algo = C.algo;\n\t var SHA256 = C_algo.SHA256;\n\t var HMAC = C_algo.HMAC;\n\n\t /**\n\t * Password-Based Key Derivation Function 2 algorithm.\n\t */\n\t var PBKDF2 = C_algo.PBKDF2 = Base.extend({\n\t /**\n\t * Configuration options.\n\t *\n\t * @property {number} keySize The key size in words to generate. Default: 4 (128 bits)\n\t * @property {Hasher} hasher The hasher to use. Default: SHA256\n\t * @property {number} iterations The number of iterations to perform. Default: 250000\n\t */\n\t cfg: Base.extend({\n\t keySize: 128/32,\n\t hasher: SHA256,\n\t iterations: 250000\n\t }),\n\n\t /**\n\t * Initializes a newly created key derivation function.\n\t *\n\t * @param {Object} cfg (Optional) The configuration options to use for the derivation.\n\t *\n\t * @example\n\t *\n\t * var kdf = CryptoJS.algo.PBKDF2.create();\n\t * var kdf = CryptoJS.algo.PBKDF2.create({ keySize: 8 });\n\t * var kdf = CryptoJS.algo.PBKDF2.create({ keySize: 8, iterations: 1000 });\n\t */\n\t init: function (cfg) {\n\t this.cfg = this.cfg.extend(cfg);\n\t },\n\n\t /**\n\t * Computes the Password-Based Key Derivation Function 2.\n\t *\n\t * @param {WordArray|string} password The password.\n\t * @param {WordArray|string} salt A salt.\n\t *\n\t * @return {WordArray} The derived key.\n\t *\n\t * @example\n\t *\n\t * var key = kdf.compute(password, salt);\n\t */\n\t compute: function (password, salt) {\n\t // Shortcut\n\t var cfg = this.cfg;\n\n\t // Init HMAC\n\t var hmac = HMAC.create(cfg.hasher, password);\n\n\t // Initial values\n\t var derivedKey = WordArray.create();\n\t var blockIndex = WordArray.create([0x00000001]);\n\n\t // Shortcuts\n\t var derivedKeyWords = derivedKey.words;\n\t var blockIndexWords = blockIndex.words;\n\t var keySize = cfg.keySize;\n\t var iterations = cfg.iterations;\n\n\t // Generate key\n\t while (derivedKeyWords.length < keySize) {\n\t var block = hmac.update(salt).finalize(blockIndex);\n\t hmac.reset();\n\n\t // Shortcuts\n\t var blockWords = block.words;\n\t var blockWordsLength = blockWords.length;\n\n\t // Iterations\n\t var intermediate = block;\n\t for (var i = 1; i < iterations; i++) {\n\t intermediate = hmac.finalize(intermediate);\n\t hmac.reset();\n\n\t // Shortcut\n\t var intermediateWords = intermediate.words;\n\n\t // XOR intermediate with block\n\t for (var j = 0; j < blockWordsLength; j++) {\n\t blockWords[j] ^= intermediateWords[j];\n\t }\n\t }\n\n\t derivedKey.concat(block);\n\t blockIndexWords[0]++;\n\t }\n\t derivedKey.sigBytes = keySize * 4;\n\n\t return derivedKey;\n\t }\n\t });\n\n\t /**\n\t * Computes the Password-Based Key Derivation Function 2.\n\t *\n\t * @param {WordArray|string} password The password.\n\t * @param {WordArray|string} salt A salt.\n\t * @param {Object} cfg (Optional) The configuration options to use for this computation.\n\t *\n\t * @return {WordArray} The derived key.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var key = CryptoJS.PBKDF2(password, salt);\n\t * var key = CryptoJS.PBKDF2(password, salt, { keySize: 8 });\n\t * var key = CryptoJS.PBKDF2(password, salt, { keySize: 8, iterations: 1000 });\n\t */\n\t C.PBKDF2 = function (password, salt, cfg) {\n\t return PBKDF2.create(cfg).compute(password, salt);\n\t };\n\t}());\n\n\n\treturn CryptoJS.PBKDF2;\n\n}));//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNzAwMTkuanMiLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBUUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vaXRnLW5leHRnZW4tZnJvbnRlbmQvLi9ub2RlX21vZHVsZXMvY3J5cHRvLWpzL3Bia2RmMi5qcz83YmJjIl0sInNvdXJjZXNDb250ZW50IjpbIjsoZnVuY3Rpb24gKHJvb3QsIGZhY3RvcnksIHVuZGVmKSB7XG5cdGlmICh0eXBlb2YgZXhwb3J0cyA9PT0gXCJvYmplY3RcIikge1xuXHRcdC8vIENvbW1vbkpTXG5cdFx0bW9kdWxlLmV4cG9ydHMgPSBleHBvcnRzID0gZmFjdG9yeShyZXF1aXJlKFwiLi9jb3JlXCIpLCByZXF1aXJlKFwiLi9zaGEyNTZcIiksIHJlcXVpcmUoXCIuL2htYWNcIikpO1xuXHR9XG5cdGVsc2UgaWYgKHR5cGVvZiBkZWZpbmUgPT09IFwiZnVuY3Rpb25cIiAmJiBkZWZpbmUuYW1kKSB7XG5cdFx0Ly8gQU1EXG5cdFx0ZGVmaW5lKFtcIi4vY29yZVwiLCBcIi4vc2hhMjU2XCIsIFwiLi9obWFjXCJdLCBmYWN0b3J5KTtcblx0fVxuXHRlbHNlIHtcblx0XHQvLyBHbG9iYWwgKGJyb3dzZXIpXG5cdFx0ZmFjdG9yeShyb290LkNyeXB0b0pTKTtcblx0fVxufSh0aGlzLCBmdW5jdGlvbiAoQ3J5cHRvSlMpIHtcblxuXHQoZnVuY3Rpb24gKCkge1xuXHQgICAgLy8gU2hvcnRjdXRzXG5cdCAgICB2YXIgQyA9IENyeXB0b0pTO1xuXHQgICAgdmFyIENfbGliID0gQy5saWI7XG5cdCAgICB2YXIgQmFzZSA9IENfbGliLkJhc2U7XG5cdCAgICB2YXIgV29yZEFycmF5ID0gQ19saWIuV29yZEFycmF5O1xuXHQgICAgdmFyIENfYWxnbyA9IEMuYWxnbztcblx0ICAgIHZhciBTSEEyNTYgPSBDX2FsZ28uU0hBMjU2O1xuXHQgICAgdmFyIEhNQUMgPSBDX2FsZ28uSE1BQztcblxuXHQgICAgLyoqXG5cdCAgICAgKiBQYXNzd29yZC1CYXNlZCBLZXkgRGVyaXZhdGlvbiBGdW5jdGlvbiAyIGFsZ29yaXRobS5cblx0ICAgICAqL1xuXHQgICAgdmFyIFBCS0RGMiA9IENfYWxnby5QQktERjIgPSBCYXNlLmV4dGVuZCh7XG5cdCAgICAgICAgLyoqXG5cdCAgICAgICAgICogQ29uZmlndXJhdGlvbiBvcHRpb25zLlxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogQHByb3BlcnR5IHtudW1iZXJ9IGtleVNpemUgVGhlIGtleSBzaXplIGluIHdvcmRzIHRvIGdlbmVyYXRlLiBEZWZhdWx0OiA0ICgxMjggYml0cylcblx0ICAgICAgICAgKiBAcHJvcGVydHkge0hhc2hlcn0gaGFzaGVyIFRoZSBoYXNoZXIgdG8gdXNlLiBEZWZhdWx0OiBTSEEyNTZcblx0ICAgICAgICAgKiBAcHJvcGVydHkge251bWJlcn0gaXRlcmF0aW9ucyBUaGUgbnVtYmVyIG9mIGl0ZXJhdGlvbnMgdG8gcGVyZm9ybS4gRGVmYXVsdDogMjUwMDAwXG5cdCAgICAgICAgICovXG5cdCAgICAgICAgY2ZnOiBCYXNlLmV4dGVuZCh7XG5cdCAgICAgICAgICAgIGtleVNpemU6IDEyOC8zMixcblx0ICAgICAgICAgICAgaGFzaGVyOiBTSEEyNTYsXG5cdCAgICAgICAgICAgIGl0ZXJhdGlvbnM6IDI1MDAwMFxuXHQgICAgICAgIH0pLFxuXG5cdCAgICAgICAgLyoqXG5cdCAgICAgICAgICogSW5pdGlhbGl6ZXMgYSBuZXdseSBjcmVhdGVkIGtleSBkZXJpdmF0aW9uIGZ1bmN0aW9uLlxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogQHBhcmFtIHtPYmplY3R9IGNmZyAoT3B0aW9uYWwpIFRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgdG8gdXNlIGZvciB0aGUgZGVyaXZhdGlvbi5cblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqIEBleGFtcGxlXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiAgICAgdmFyIGtkZiA9IENyeXB0b0pTLmFsZ28uUEJLREYyLmNyZWF0ZSgpO1xuXHQgICAgICAgICAqICAgICB2YXIga2RmID0gQ3J5cHRvSlMuYWxnby5QQktERjIuY3JlYXRlKHsga2V5U2l6ZTogOCB9KTtcblx0ICAgICAgICAgKiAgICAgdmFyIGtkZiA9IENyeXB0b0pTLmFsZ28uUEJLREYyLmNyZWF0ZSh7IGtleVNpemU6IDgsIGl0ZXJhdGlvbnM6IDEwMDAgfSk7XG5cdCAgICAgICAgICovXG5cdCAgICAgICAgaW5pdDogZnVuY3Rpb24gKGNmZykge1xuXHQgICAgICAgICAgICB0aGlzLmNmZyA9IHRoaXMuY2ZnLmV4dGVuZChjZmcpO1xuXHQgICAgICAgIH0sXG5cblx0ICAgICAgICAvKipcblx0ICAgICAgICAgKiBDb21wdXRlcyB0aGUgUGFzc3dvcmQtQmFzZWQgS2V5IERlcml2YXRpb24gRnVuY3Rpb24gMi5cblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqIEBwYXJhbSB7V29yZEFycmF5fHN0cmluZ30gcGFzc3dvcmQgVGhlIHBhc3N3b3JkLlxuXHQgICAgICAgICAqIEBwYXJhbSB7V29yZEFycmF5fHN0cmluZ30gc2FsdCBBIHNhbHQuXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAcmV0dXJuIHtXb3JkQXJyYXl9IFRoZSBkZXJpdmVkIGtleS5cblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqIEBleGFtcGxlXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiAgICAgdmFyIGtleSA9IGtkZi5jb21wdXRlKHBhc3N3b3JkLCBzYWx0KTtcblx0ICAgICAgICAgKi9cblx0ICAgICAgICBjb21wdXRlOiBmdW5jdGlvbiAocGFzc3dvcmQsIHNhbHQpIHtcblx0ICAgICAgICAgICAgLy8gU2hvcnRjdXRcblx0ICAgICAgICAgICAgdmFyIGNmZyA9IHRoaXMuY2ZnO1xuXG5cdCAgICAgICAgICAgIC8vIEluaXQgSE1BQ1xuXHQgICAgICAgICAgICB2YXIgaG1hYyA9IEhNQUMuY3JlYXRlKGNmZy5oYXNoZXIsIHBhc3N3b3JkKTtcblxuXHQgICAgICAgICAgICAvLyBJbml0aWFsIHZhbHVlc1xuXHQgICAgICAgICAgICB2YXIgZGVyaXZlZEtleSA9IFdvcmRBcnJheS5jcmVhdGUoKTtcblx0ICAgICAgICAgICAgdmFyIGJsb2NrSW5kZXggPSBXb3JkQXJyYXkuY3JlYXRlKFsweDAwMDAwMDAxXSk7XG5cblx0ICAgICAgICAgICAgLy8gU2hvcnRjdXRzXG5cdCAgICAgICAgICAgIHZhciBkZXJpdmVkS2V5V29yZHMgPSBkZXJpdmVkS2V5LndvcmRzO1xuXHQgICAgICAgICAgICB2YXIgYmxvY2tJbmRleFdvcmRzID0gYmxvY2tJbmRleC53b3Jkcztcblx0ICAgICAgICAgICAgdmFyIGtleVNpemUgPSBjZmcua2V5U2l6ZTtcblx0ICAgICAgICAgICAgdmFyIGl0ZXJhdGlvbnMgPSBjZmcuaXRlcmF0aW9ucztcblxuXHQgICAgICAgICAgICAvLyBHZW5lcmF0ZSBrZXlcblx0ICAgICAgICAgICAgd2hpbGUgKGRlcml2ZWRLZXlXb3Jkcy5sZW5ndGggPCBrZXlTaXplKSB7XG5cdCAgICAgICAgICAgICAgICB2YXIgYmxvY2sgPSBobWFjLnVwZGF0ZShzYWx0KS5maW5hbGl6ZShibG9ja0luZGV4KTtcblx0ICAgICAgICAgICAgICAgIGhtYWMucmVzZXQoKTtcblxuXHQgICAgICAgICAgICAgICAgLy8gU2hvcnRjdXRzXG5cdCAgICAgICAgICAgICAgICB2YXIgYmxvY2tXb3JkcyA9IGJsb2NrLndvcmRzO1xuXHQgICAgICAgICAgICAgICAgdmFyIGJsb2NrV29yZHNMZW5ndGggPSBibG9ja1dvcmRzLmxlbmd0aDtcblxuXHQgICAgICAgICAgICAgICAgLy8gSXRlcmF0aW9uc1xuXHQgICAgICAgICAgICAgICAgdmFyIGludGVybWVkaWF0ZSA9IGJsb2NrO1xuXHQgICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDE7IGkgPCBpdGVyYXRpb25zOyBpKyspIHtcblx0ICAgICAgICAgICAgICAgICAgICBpbnRlcm1lZGlhdGUgPSBobWFjLmZpbmFsaXplKGludGVybWVkaWF0ZSk7XG5cdCAgICAgICAgICAgICAgICAgICAgaG1hYy5yZXNldCgpO1xuXG5cdCAgICAgICAgICAgICAgICAgICAgLy8gU2hvcnRjdXRcblx0ICAgICAgICAgICAgICAgICAgICB2YXIgaW50ZXJtZWRpYXRlV29yZHMgPSBpbnRlcm1lZGlhdGUud29yZHM7XG5cblx0ICAgICAgICAgICAgICAgICAgICAvLyBYT1IgaW50ZXJtZWRpYXRlIHdpdGggYmxvY2tcblx0ICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBqID0gMDsgaiA8IGJsb2NrV29yZHNMZW5ndGg7IGorKykge1xuXHQgICAgICAgICAgICAgICAgICAgICAgICBibG9ja1dvcmRzW2pdIF49IGludGVybWVkaWF0ZVdvcmRzW2pdO1xuXHQgICAgICAgICAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgICAgIH1cblxuXHQgICAgICAgICAgICAgICAgZGVyaXZlZEtleS5jb25jYXQoYmxvY2spO1xuXHQgICAgICAgICAgICAgICAgYmxvY2tJbmRleFdvcmRzWzBdKys7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgZGVyaXZlZEtleS5zaWdCeXRlcyA9IGtleVNpemUgKiA0O1xuXG5cdCAgICAgICAgICAgIHJldHVybiBkZXJpdmVkS2V5O1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXG5cdCAgICAvKipcblx0ICAgICAqIENvbXB1dGVzIHRoZSBQYXNzd29yZC1CYXNlZCBLZXkgRGVyaXZhdGlvbiBGdW5jdGlvbiAyLlxuXHQgICAgICpcblx0ICAgICAqIEBwYXJhbSB7V29yZEFycmF5fHN0cmluZ30gcGFzc3dvcmQgVGhlIHBhc3N3b3JkLlxuXHQgICAgICogQHBhcmFtIHtXb3JkQXJyYXl8c3RyaW5nfSBzYWx0IEEgc2FsdC5cblx0ICAgICAqIEBwYXJhbSB7T2JqZWN0fSBjZmcgKE9wdGlvbmFsKSBUaGUgY29uZmlndXJhdGlvbiBvcHRpb25zIHRvIHVzZSBmb3IgdGhpcyBjb21wdXRhdGlvbi5cblx0ICAgICAqXG5cdCAgICAgKiBAcmV0dXJuIHtXb3JkQXJyYXl9IFRoZSBkZXJpdmVkIGtleS5cblx0ICAgICAqXG5cdCAgICAgKiBAc3RhdGljXG5cdCAgICAgKlxuXHQgICAgICogQGV4YW1wbGVcblx0ICAgICAqXG5cdCAgICAgKiAgICAgdmFyIGtleSA9IENyeXB0b0pTLlBCS0RGMihwYXNzd29yZCwgc2FsdCk7XG5cdCAgICAgKiAgICAgdmFyIGtleSA9IENyeXB0b0pTLlBCS0RGMihwYXNzd29yZCwgc2FsdCwgeyBrZXlTaXplOiA4IH0pO1xuXHQgICAgICogICAgIHZhciBrZXkgPSBDcnlwdG9KUy5QQktERjIocGFzc3dvcmQsIHNhbHQsIHsga2V5U2l6ZTogOCwgaXRlcmF0aW9uczogMTAwMCB9KTtcblx0ICAgICAqL1xuXHQgICAgQy5QQktERjIgPSBmdW5jdGlvbiAocGFzc3dvcmQsIHNhbHQsIGNmZykge1xuXHQgICAgICAgIHJldHVybiBQQktERjIuY3JlYXRlKGNmZykuY29tcHV0ZShwYXNzd29yZCwgc2FsdCk7XG5cdCAgICB9O1xuXHR9KCkpO1xuXG5cblx0cmV0dXJuIENyeXB0b0pTLlBCS0RGMjtcblxufSkpOyJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///70019\n")},70025:function(module,exports,__webpack_require__){eval(";(function (root, factory, undef) {\n\tif (true) {\n\t\t// CommonJS\n\t\tmodule.exports = exports = factory(__webpack_require__(19021), __webpack_require__(57165));\n\t}\n\telse {}\n}(this, function (CryptoJS) {\n\n\t(function (undefined) {\n\t // Shortcuts\n\t var C = CryptoJS;\n\t var C_lib = C.lib;\n\t var CipherParams = C_lib.CipherParams;\n\t var C_enc = C.enc;\n\t var Hex = C_enc.Hex;\n\t var C_format = C.format;\n\n\t var HexFormatter = C_format.Hex = {\n\t /**\n\t * Converts the ciphertext of a cipher params object to a hexadecimally encoded string.\n\t *\n\t * @param {CipherParams} cipherParams The cipher params object.\n\t *\n\t * @return {string} The hexadecimally encoded string.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var hexString = CryptoJS.format.Hex.stringify(cipherParams);\n\t */\n\t stringify: function (cipherParams) {\n\t return cipherParams.ciphertext.toString(Hex);\n\t },\n\n\t /**\n\t * Converts a hexadecimally encoded ciphertext string to a cipher params object.\n\t *\n\t * @param {string} input The hexadecimally encoded string.\n\t *\n\t * @return {CipherParams} The cipher params object.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var cipherParams = CryptoJS.format.Hex.parse(hexString);\n\t */\n\t parse: function (input) {\n\t var ciphertext = Hex.parse(input);\n\t return CipherParams.create({ ciphertext: ciphertext });\n\t }\n\t };\n\t}());\n\n\n\treturn CryptoJS.format.Hex;\n\n}));//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNzAwMjUuanMiLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBUUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL2l0Zy1uZXh0Z2VuLWZyb250ZW5kLy4vbm9kZV9tb2R1bGVzL2NyeXB0by1qcy9mb3JtYXQtaGV4LmpzPzZkMDgiXSwic291cmNlc0NvbnRlbnQiOlsiOyhmdW5jdGlvbiAocm9vdCwgZmFjdG9yeSwgdW5kZWYpIHtcblx0aWYgKHR5cGVvZiBleHBvcnRzID09PSBcIm9iamVjdFwiKSB7XG5cdFx0Ly8gQ29tbW9uSlNcblx0XHRtb2R1bGUuZXhwb3J0cyA9IGV4cG9ydHMgPSBmYWN0b3J5KHJlcXVpcmUoXCIuL2NvcmVcIiksIHJlcXVpcmUoXCIuL2NpcGhlci1jb3JlXCIpKTtcblx0fVxuXHRlbHNlIGlmICh0eXBlb2YgZGVmaW5lID09PSBcImZ1bmN0aW9uXCIgJiYgZGVmaW5lLmFtZCkge1xuXHRcdC8vIEFNRFxuXHRcdGRlZmluZShbXCIuL2NvcmVcIiwgXCIuL2NpcGhlci1jb3JlXCJdLCBmYWN0b3J5KTtcblx0fVxuXHRlbHNlIHtcblx0XHQvLyBHbG9iYWwgKGJyb3dzZXIpXG5cdFx0ZmFjdG9yeShyb290LkNyeXB0b0pTKTtcblx0fVxufSh0aGlzLCBmdW5jdGlvbiAoQ3J5cHRvSlMpIHtcblxuXHQoZnVuY3Rpb24gKHVuZGVmaW5lZCkge1xuXHQgICAgLy8gU2hvcnRjdXRzXG5cdCAgICB2YXIgQyA9IENyeXB0b0pTO1xuXHQgICAgdmFyIENfbGliID0gQy5saWI7XG5cdCAgICB2YXIgQ2lwaGVyUGFyYW1zID0gQ19saWIuQ2lwaGVyUGFyYW1zO1xuXHQgICAgdmFyIENfZW5jID0gQy5lbmM7XG5cdCAgICB2YXIgSGV4ID0gQ19lbmMuSGV4O1xuXHQgICAgdmFyIENfZm9ybWF0ID0gQy5mb3JtYXQ7XG5cblx0ICAgIHZhciBIZXhGb3JtYXR0ZXIgPSBDX2Zvcm1hdC5IZXggPSB7XG5cdCAgICAgICAgLyoqXG5cdCAgICAgICAgICogQ29udmVydHMgdGhlIGNpcGhlcnRleHQgb2YgYSBjaXBoZXIgcGFyYW1zIG9iamVjdCB0byBhIGhleGFkZWNpbWFsbHkgZW5jb2RlZCBzdHJpbmcuXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAcGFyYW0ge0NpcGhlclBhcmFtc30gY2lwaGVyUGFyYW1zIFRoZSBjaXBoZXIgcGFyYW1zIG9iamVjdC5cblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqIEByZXR1cm4ge3N0cmluZ30gVGhlIGhleGFkZWNpbWFsbHkgZW5jb2RlZCBzdHJpbmcuXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAc3RhdGljXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAZXhhbXBsZVxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogICAgIHZhciBoZXhTdHJpbmcgPSBDcnlwdG9KUy5mb3JtYXQuSGV4LnN0cmluZ2lmeShjaXBoZXJQYXJhbXMpO1xuXHQgICAgICAgICAqL1xuXHQgICAgICAgIHN0cmluZ2lmeTogZnVuY3Rpb24gKGNpcGhlclBhcmFtcykge1xuXHQgICAgICAgICAgICByZXR1cm4gY2lwaGVyUGFyYW1zLmNpcGhlcnRleHQudG9TdHJpbmcoSGV4KTtcblx0ICAgICAgICB9LFxuXG5cdCAgICAgICAgLyoqXG5cdCAgICAgICAgICogQ29udmVydHMgYSBoZXhhZGVjaW1hbGx5IGVuY29kZWQgY2lwaGVydGV4dCBzdHJpbmcgdG8gYSBjaXBoZXIgcGFyYW1zIG9iamVjdC5cblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqIEBwYXJhbSB7c3RyaW5nfSBpbnB1dCBUaGUgaGV4YWRlY2ltYWxseSBlbmNvZGVkIHN0cmluZy5cblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqIEByZXR1cm4ge0NpcGhlclBhcmFtc30gVGhlIGNpcGhlciBwYXJhbXMgb2JqZWN0LlxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogQHN0YXRpY1xuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogQGV4YW1wbGVcblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqICAgICB2YXIgY2lwaGVyUGFyYW1zID0gQ3J5cHRvSlMuZm9ybWF0LkhleC5wYXJzZShoZXhTdHJpbmcpO1xuXHQgICAgICAgICAqL1xuXHQgICAgICAgIHBhcnNlOiBmdW5jdGlvbiAoaW5wdXQpIHtcblx0ICAgICAgICAgICAgdmFyIGNpcGhlcnRleHQgPSBIZXgucGFyc2UoaW5wdXQpO1xuXHQgICAgICAgICAgICByZXR1cm4gQ2lwaGVyUGFyYW1zLmNyZWF0ZSh7IGNpcGhlcnRleHQ6IGNpcGhlcnRleHQgfSk7XG5cdCAgICAgICAgfVxuXHQgICAgfTtcblx0fSgpKTtcblxuXG5cdHJldHVybiBDcnlwdG9KUy5mb3JtYXQuSGV4O1xuXG59KSk7Il0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///70025\n")},70217:function(__unused_webpack_module,__unused_webpack_exports,__webpack_require__){eval("//! moment.js locale configuration\n//! locale : Scottish Gaelic [gd]\n//! author : Jon Ashdown : https://github.com/jonashdown\n\n;(function (global, factory) {\n true ? factory(__webpack_require__(95093)) :\n 0\n}(this, (function (moment) { 'use strict';\n\n //! moment.js locale configuration\n\n var months = [\n 'Am Faoilleach',\n 'An Gearran',\n 'Am Màrt',\n 'An Giblean',\n 'An Cèitean',\n 'An t-Ògmhios',\n 'An t-Iuchar',\n 'An Lùnastal',\n 'An t-Sultain',\n 'An Dàmhair',\n 'An t-Samhain',\n 'An Dùbhlachd',\n ],\n monthsShort = [\n 'Faoi',\n 'Gear',\n 'Màrt',\n 'Gibl',\n 'Cèit',\n 'Ògmh',\n 'Iuch',\n 'Lùn',\n 'Sult',\n 'Dàmh',\n 'Samh',\n 'Dùbh',\n ],\n weekdays = [\n 'Didòmhnaich',\n 'Diluain',\n 'Dimàirt',\n 'Diciadain',\n 'Diardaoin',\n 'Dihaoine',\n 'Disathairne',\n ],\n weekdaysShort = ['Did', 'Dil', 'Dim', 'Dic', 'Dia', 'Dih', 'Dis'],\n weekdaysMin = ['Dò', 'Lu', 'Mà', 'Ci', 'Ar', 'Ha', 'Sa'];\n\n var gd = moment.defineLocale('gd', {\n months: months,\n monthsShort: monthsShort,\n monthsParseExact: true,\n weekdays: weekdays,\n weekdaysShort: weekdaysShort,\n weekdaysMin: weekdaysMin,\n longDateFormat: {\n LT: 'HH:mm',\n LTS: 'HH:mm:ss',\n L: 'DD/MM/YYYY',\n LL: 'D MMMM YYYY',\n LLL: 'D MMMM YYYY HH:mm',\n LLLL: 'dddd, D MMMM YYYY HH:mm',\n },\n calendar: {\n sameDay: '[An-diugh aig] LT',\n nextDay: '[A-màireach aig] LT',\n nextWeek: 'dddd [aig] LT',\n lastDay: '[An-dè aig] LT',\n lastWeek: 'dddd [seo chaidh] [aig] LT',\n sameElse: 'L',\n },\n relativeTime: {\n future: 'ann an %s',\n past: 'bho chionn %s',\n s: 'beagan diogan',\n ss: '%d diogan',\n m: 'mionaid',\n mm: '%d mionaidean',\n h: 'uair',\n hh: '%d uairean',\n d: 'latha',\n dd: '%d latha',\n M: 'mìos',\n MM: '%d mìosan',\n y: 'bliadhna',\n yy: '%d bliadhna',\n },\n dayOfMonthOrdinalParse: /\\d{1,2}(d|na|mh)/,\n ordinal: function (number) {\n var output = number === 1 ? 'd' : number % 10 === 2 ? 'na' : 'mh';\n return number + output;\n },\n week: {\n dow: 1, // Monday is the first day of the week.\n doy: 4, // The week that contains Jan 4th is the first week of the year.\n },\n });\n\n return gd;\n\n})));\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNzAyMTcuanMiLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL2l0Zy1uZXh0Z2VuLWZyb250ZW5kLy4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvZ2QuanM/ZjZiNCJdLCJzb3VyY2VzQ29udGVudCI6WyIvLyEgbW9tZW50LmpzIGxvY2FsZSBjb25maWd1cmF0aW9uXG4vLyEgbG9jYWxlIDogU2NvdHRpc2ggR2FlbGljIFtnZF1cbi8vISBhdXRob3IgOiBKb24gQXNoZG93biA6IGh0dHBzOi8vZ2l0aHViLmNvbS9qb25hc2hkb3duXG5cbjsoZnVuY3Rpb24gKGdsb2JhbCwgZmFjdG9yeSkge1xuICAgdHlwZW9mIGV4cG9ydHMgPT09ICdvYmplY3QnICYmIHR5cGVvZiBtb2R1bGUgIT09ICd1bmRlZmluZWQnXG4gICAgICAgJiYgdHlwZW9mIHJlcXVpcmUgPT09ICdmdW5jdGlvbicgPyBmYWN0b3J5KHJlcXVpcmUoJy4uL21vbWVudCcpKSA6XG4gICB0eXBlb2YgZGVmaW5lID09PSAnZnVuY3Rpb24nICYmIGRlZmluZS5hbWQgPyBkZWZpbmUoWycuLi9tb21lbnQnXSwgZmFjdG9yeSkgOlxuICAgZmFjdG9yeShnbG9iYWwubW9tZW50KVxufSh0aGlzLCAoZnVuY3Rpb24gKG1vbWVudCkgeyAndXNlIHN0cmljdCc7XG5cbiAgICAvLyEgbW9tZW50LmpzIGxvY2FsZSBjb25maWd1cmF0aW9uXG5cbiAgICB2YXIgbW9udGhzID0gW1xuICAgICAgICAgICAgJ0FtIEZhb2lsbGVhY2gnLFxuICAgICAgICAgICAgJ0FuIEdlYXJyYW4nLFxuICAgICAgICAgICAgJ0FtIE3DoHJ0JyxcbiAgICAgICAgICAgICdBbiBHaWJsZWFuJyxcbiAgICAgICAgICAgICdBbiBDw6hpdGVhbicsXG4gICAgICAgICAgICAnQW4gdC3DkmdtaGlvcycsXG4gICAgICAgICAgICAnQW4gdC1JdWNoYXInLFxuICAgICAgICAgICAgJ0FuIEzDuW5hc3RhbCcsXG4gICAgICAgICAgICAnQW4gdC1TdWx0YWluJyxcbiAgICAgICAgICAgICdBbiBEw6BtaGFpcicsXG4gICAgICAgICAgICAnQW4gdC1TYW1oYWluJyxcbiAgICAgICAgICAgICdBbiBEw7liaGxhY2hkJyxcbiAgICAgICAgXSxcbiAgICAgICAgbW9udGhzU2hvcnQgPSBbXG4gICAgICAgICAgICAnRmFvaScsXG4gICAgICAgICAgICAnR2VhcicsXG4gICAgICAgICAgICAnTcOgcnQnLFxuICAgICAgICAgICAgJ0dpYmwnLFxuICAgICAgICAgICAgJ0PDqGl0JyxcbiAgICAgICAgICAgICfDkmdtaCcsXG4gICAgICAgICAgICAnSXVjaCcsXG4gICAgICAgICAgICAnTMO5bicsXG4gICAgICAgICAgICAnU3VsdCcsXG4gICAgICAgICAgICAnRMOgbWgnLFxuICAgICAgICAgICAgJ1NhbWgnLFxuICAgICAgICAgICAgJ0TDuWJoJyxcbiAgICAgICAgXSxcbiAgICAgICAgd2Vla2RheXMgPSBbXG4gICAgICAgICAgICAnRGlkw7JtaG5haWNoJyxcbiAgICAgICAgICAgICdEaWx1YWluJyxcbiAgICAgICAgICAgICdEaW3DoGlydCcsXG4gICAgICAgICAgICAnRGljaWFkYWluJyxcbiAgICAgICAgICAgICdEaWFyZGFvaW4nLFxuICAgICAgICAgICAgJ0RpaGFvaW5lJyxcbiAgICAgICAgICAgICdEaXNhdGhhaXJuZScsXG4gICAgICAgIF0sXG4gICAgICAgIHdlZWtkYXlzU2hvcnQgPSBbJ0RpZCcsICdEaWwnLCAnRGltJywgJ0RpYycsICdEaWEnLCAnRGloJywgJ0RpcyddLFxuICAgICAgICB3ZWVrZGF5c01pbiA9IFsnRMOyJywgJ0x1JywgJ03DoCcsICdDaScsICdBcicsICdIYScsICdTYSddO1xuXG4gICAgdmFyIGdkID0gbW9tZW50LmRlZmluZUxvY2FsZSgnZ2QnLCB7XG4gICAgICAgIG1vbnRoczogbW9udGhzLFxuICAgICAgICBtb250aHNTaG9ydDogbW9udGhzU2hvcnQsXG4gICAgICAgIG1vbnRoc1BhcnNlRXhhY3Q6IHRydWUsXG4gICAgICAgIHdlZWtkYXlzOiB3ZWVrZGF5cyxcbiAgICAgICAgd2Vla2RheXNTaG9ydDogd2Vla2RheXNTaG9ydCxcbiAgICAgICAgd2Vla2RheXNNaW46IHdlZWtkYXlzTWluLFxuICAgICAgICBsb25nRGF0ZUZvcm1hdDoge1xuICAgICAgICAgICAgTFQ6ICdISDptbScsXG4gICAgICAgICAgICBMVFM6ICdISDptbTpzcycsXG4gICAgICAgICAgICBMOiAnREQvTU0vWVlZWScsXG4gICAgICAgICAgICBMTDogJ0QgTU1NTSBZWVlZJyxcbiAgICAgICAgICAgIExMTDogJ0QgTU1NTSBZWVlZIEhIOm1tJyxcbiAgICAgICAgICAgIExMTEw6ICdkZGRkLCBEIE1NTU0gWVlZWSBISDptbScsXG4gICAgICAgIH0sXG4gICAgICAgIGNhbGVuZGFyOiB7XG4gICAgICAgICAgICBzYW1lRGF5OiAnW0FuLWRpdWdoIGFpZ10gTFQnLFxuICAgICAgICAgICAgbmV4dERheTogJ1tBLW3DoGlyZWFjaCBhaWddIExUJyxcbiAgICAgICAgICAgIG5leHRXZWVrOiAnZGRkZCBbYWlnXSBMVCcsXG4gICAgICAgICAgICBsYXN0RGF5OiAnW0FuLWTDqCBhaWddIExUJyxcbiAgICAgICAgICAgIGxhc3RXZWVrOiAnZGRkZCBbc2VvIGNoYWlkaF0gW2FpZ10gTFQnLFxuICAgICAgICAgICAgc2FtZUVsc2U6ICdMJyxcbiAgICAgICAgfSxcbiAgICAgICAgcmVsYXRpdmVUaW1lOiB7XG4gICAgICAgICAgICBmdXR1cmU6ICdhbm4gYW4gJXMnLFxuICAgICAgICAgICAgcGFzdDogJ2JobyBjaGlvbm4gJXMnLFxuICAgICAgICAgICAgczogJ2JlYWdhbiBkaW9nYW4nLFxuICAgICAgICAgICAgc3M6ICclZCBkaW9nYW4nLFxuICAgICAgICAgICAgbTogJ21pb25haWQnLFxuICAgICAgICAgICAgbW06ICclZCBtaW9uYWlkZWFuJyxcbiAgICAgICAgICAgIGg6ICd1YWlyJyxcbiAgICAgICAgICAgIGhoOiAnJWQgdWFpcmVhbicsXG4gICAgICAgICAgICBkOiAnbGF0aGEnLFxuICAgICAgICAgICAgZGQ6ICclZCBsYXRoYScsXG4gICAgICAgICAgICBNOiAnbcOsb3MnLFxuICAgICAgICAgICAgTU06ICclZCBtw6xvc2FuJyxcbiAgICAgICAgICAgIHk6ICdibGlhZGhuYScsXG4gICAgICAgICAgICB5eTogJyVkIGJsaWFkaG5hJyxcbiAgICAgICAgfSxcbiAgICAgICAgZGF5T2ZNb250aE9yZGluYWxQYXJzZTogL1xcZHsxLDJ9KGR8bmF8bWgpLyxcbiAgICAgICAgb3JkaW5hbDogZnVuY3Rpb24gKG51bWJlcikge1xuICAgICAgICAgICAgdmFyIG91dHB1dCA9IG51bWJlciA9PT0gMSA/ICdkJyA6IG51bWJlciAlIDEwID09PSAyID8gJ25hJyA6ICdtaCc7XG4gICAgICAgICAgICByZXR1cm4gbnVtYmVyICsgb3V0cHV0O1xuICAgICAgICB9LFxuICAgICAgICB3ZWVrOiB7XG4gICAgICAgICAgICBkb3c6IDEsIC8vIE1vbmRheSBpcyB0aGUgZmlyc3QgZGF5IG9mIHRoZSB3ZWVrLlxuICAgICAgICAgICAgZG95OiA0LCAvLyBUaGUgd2VlayB0aGF0IGNvbnRhaW5zIEphbiA0dGggaXMgdGhlIGZpcnN0IHdlZWsgb2YgdGhlIHllYXIuXG4gICAgICAgIH0sXG4gICAgfSk7XG5cbiAgICByZXR1cm4gZ2Q7XG5cbn0pKSk7XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///70217\n")},70359:(I,g,t)=>{"use strict";I.exports=t.p+"116dab06b8b40c3608bf.png"},70867:(I,g,t)=>{"use strict";I.exports=t.p+"e95861171d1e1568d509.png"},71312:(module,exports,__webpack_require__)=>{eval("var __WEBPACK_AMD_DEFINE_RESULT__;/**\n * [js-sha256]{@link https://github.com/emn178/js-sha256}\n *\n * @version 0.11.0\n * @author Chen, Yi-Cyuan [emn178@gmail.com]\n * @copyright Chen, Yi-Cyuan 2014-2024\n * @license MIT\n */\n/*jslint bitwise: true */\n(function () {\n 'use strict';\n\n var ERROR = 'input is invalid type';\n var WINDOW = typeof window === 'object';\n var root = WINDOW ? window : {};\n if (root.JS_SHA256_NO_WINDOW) {\n WINDOW = false;\n }\n var WEB_WORKER = !WINDOW && typeof self === 'object';\n var NODE_JS = !root.JS_SHA256_NO_NODE_JS && typeof process === 'object' && process.versions && process.versions.node;\n if (NODE_JS) {\n root = __webpack_require__.g;\n } else if (WEB_WORKER) {\n root = self;\n }\n var COMMON_JS = !root.JS_SHA256_NO_COMMON_JS && \"object\" === 'object' && module.exports;\n var AMD = true && __webpack_require__.amdO;\n var ARRAY_BUFFER = !root.JS_SHA256_NO_ARRAY_BUFFER && typeof ArrayBuffer !== 'undefined';\n var HEX_CHARS = '0123456789abcdef'.split('');\n var EXTRA = [-2147483648, 8388608, 32768, 128];\n var SHIFT = [24, 16, 8, 0];\n var K = [\n 0x428a2f98, 0x71374491, 0xb5c0fbcf, 0xe9b5dba5, 0x3956c25b, 0x59f111f1, 0x923f82a4, 0xab1c5ed5,\n 0xd807aa98, 0x12835b01, 0x243185be, 0x550c7dc3, 0x72be5d74, 0x80deb1fe, 0x9bdc06a7, 0xc19bf174,\n 0xe49b69c1, 0xefbe4786, 0x0fc19dc6, 0x240ca1cc, 0x2de92c6f, 0x4a7484aa, 0x5cb0a9dc, 0x76f988da,\n 0x983e5152, 0xa831c66d, 0xb00327c8, 0xbf597fc7, 0xc6e00bf3, 0xd5a79147, 0x06ca6351, 0x14292967,\n 0x27b70a85, 0x2e1b2138, 0x4d2c6dfc, 0x53380d13, 0x650a7354, 0x766a0abb, 0x81c2c92e, 0x92722c85,\n 0xa2bfe8a1, 0xa81a664b, 0xc24b8b70, 0xc76c51a3, 0xd192e819, 0xd6990624, 0xf40e3585, 0x106aa070,\n 0x19a4c116, 0x1e376c08, 0x2748774c, 0x34b0bcb5, 0x391c0cb3, 0x4ed8aa4a, 0x5b9cca4f, 0x682e6ff3,\n 0x748f82ee, 0x78a5636f, 0x84c87814, 0x8cc70208, 0x90befffa, 0xa4506ceb, 0xbef9a3f7, 0xc67178f2\n ];\n var OUTPUT_TYPES = ['hex', 'array', 'digest', 'arrayBuffer'];\n\n var blocks = [];\n\n if (root.JS_SHA256_NO_NODE_JS || !Array.isArray) {\n Array.isArray = function (obj) {\n return Object.prototype.toString.call(obj) === '[object Array]';\n };\n }\n\n if (ARRAY_BUFFER && (root.JS_SHA256_NO_ARRAY_BUFFER_IS_VIEW || !ArrayBuffer.isView)) {\n ArrayBuffer.isView = function (obj) {\n return typeof obj === 'object' && obj.buffer && obj.buffer.constructor === ArrayBuffer;\n };\n }\n\n var createOutputMethod = function (outputType, is224) {\n return function (message) {\n return new Sha256(is224, true).update(message)[outputType]();\n };\n };\n\n var createMethod = function (is224) {\n var method = createOutputMethod('hex', is224);\n if (NODE_JS) {\n method = nodeWrap(method, is224);\n }\n method.create = function () {\n return new Sha256(is224);\n };\n method.update = function (message) {\n return method.create().update(message);\n };\n for (var i = 0; i < OUTPUT_TYPES.length; ++i) {\n var type = OUTPUT_TYPES[i];\n method[type] = createOutputMethod(type, is224);\n }\n return method;\n };\n\n var nodeWrap = function (method, is224) {\n var crypto = __webpack_require__(28145)\n var Buffer = (__webpack_require__(12075).Buffer);\n var algorithm = is224 ? 'sha224' : 'sha256';\n var bufferFrom;\n if (Buffer.from && !root.JS_SHA256_NO_BUFFER_FROM) {\n bufferFrom = Buffer.from;\n } else {\n bufferFrom = function (message) {\n return new Buffer(message);\n };\n }\n var nodeMethod = function (message) {\n if (typeof message === 'string') {\n return crypto.createHash(algorithm).update(message, 'utf8').digest('hex');\n } else {\n if (message === null || message === undefined) {\n throw new Error(ERROR);\n } else if (message.constructor === ArrayBuffer) {\n message = new Uint8Array(message);\n }\n }\n if (Array.isArray(message) || ArrayBuffer.isView(message) ||\n message.constructor === Buffer) {\n return crypto.createHash(algorithm).update(bufferFrom(message)).digest('hex');\n } else {\n return method(message);\n }\n };\n return nodeMethod;\n };\n\n var createHmacOutputMethod = function (outputType, is224) {\n return function (key, message) {\n return new HmacSha256(key, is224, true).update(message)[outputType]();\n };\n };\n\n var createHmacMethod = function (is224) {\n var method = createHmacOutputMethod('hex', is224);\n method.create = function (key) {\n return new HmacSha256(key, is224);\n };\n method.update = function (key, message) {\n return method.create(key).update(message);\n };\n for (var i = 0; i < OUTPUT_TYPES.length; ++i) {\n var type = OUTPUT_TYPES[i];\n method[type] = createHmacOutputMethod(type, is224);\n }\n return method;\n };\n\n function Sha256(is224, sharedMemory) {\n if (sharedMemory) {\n blocks[0] = blocks[16] = blocks[1] = blocks[2] = blocks[3] =\n blocks[4] = blocks[5] = blocks[6] = blocks[7] =\n blocks[8] = blocks[9] = blocks[10] = blocks[11] =\n blocks[12] = blocks[13] = blocks[14] = blocks[15] = 0;\n this.blocks = blocks;\n } else {\n this.blocks = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0];\n }\n\n if (is224) {\n this.h0 = 0xc1059ed8;\n this.h1 = 0x367cd507;\n this.h2 = 0x3070dd17;\n this.h3 = 0xf70e5939;\n this.h4 = 0xffc00b31;\n this.h5 = 0x68581511;\n this.h6 = 0x64f98fa7;\n this.h7 = 0xbefa4fa4;\n } else { // 256\n this.h0 = 0x6a09e667;\n this.h1 = 0xbb67ae85;\n this.h2 = 0x3c6ef372;\n this.h3 = 0xa54ff53a;\n this.h4 = 0x510e527f;\n this.h5 = 0x9b05688c;\n this.h6 = 0x1f83d9ab;\n this.h7 = 0x5be0cd19;\n }\n\n this.block = this.start = this.bytes = this.hBytes = 0;\n this.finalized = this.hashed = false;\n this.first = true;\n this.is224 = is224;\n }\n\n Sha256.prototype.update = function (message) {\n if (this.finalized) {\n return;\n }\n var notString, type = typeof message;\n if (type !== 'string') {\n if (type === 'object') {\n if (message === null) {\n throw new Error(ERROR);\n } else if (ARRAY_BUFFER && message.constructor === ArrayBuffer) {\n message = new Uint8Array(message);\n } else if (!Array.isArray(message)) {\n if (!ARRAY_BUFFER || !ArrayBuffer.isView(message)) {\n throw new Error(ERROR);\n }\n }\n } else {\n throw new Error(ERROR);\n }\n notString = true;\n }\n var code, index = 0, i, length = message.length, blocks = this.blocks;\n while (index < length) {\n if (this.hashed) {\n this.hashed = false;\n blocks[0] = this.block;\n this.block = blocks[16] = blocks[1] = blocks[2] = blocks[3] =\n blocks[4] = blocks[5] = blocks[6] = blocks[7] =\n blocks[8] = blocks[9] = blocks[10] = blocks[11] =\n blocks[12] = blocks[13] = blocks[14] = blocks[15] = 0;\n }\n\n if (notString) {\n for (i = this.start; index < length && i < 64; ++index) {\n blocks[i >>> 2] |= message[index] << SHIFT[i++ & 3];\n }\n } else {\n for (i = this.start; index < length && i < 64; ++index) {\n code = message.charCodeAt(index);\n if (code < 0x80) {\n blocks[i >>> 2] |= code << SHIFT[i++ & 3];\n } else if (code < 0x800) {\n blocks[i >>> 2] |= (0xc0 | (code >>> 6)) << SHIFT[i++ & 3];\n blocks[i >>> 2] |= (0x80 | (code & 0x3f)) << SHIFT[i++ & 3];\n } else if (code < 0xd800 || code >= 0xe000) {\n blocks[i >>> 2] |= (0xe0 | (code >>> 12)) << SHIFT[i++ & 3];\n blocks[i >>> 2] |= (0x80 | ((code >>> 6) & 0x3f)) << SHIFT[i++ & 3];\n blocks[i >>> 2] |= (0x80 | (code & 0x3f)) << SHIFT[i++ & 3];\n } else {\n code = 0x10000 + (((code & 0x3ff) << 10) | (message.charCodeAt(++index) & 0x3ff));\n blocks[i >>> 2] |= (0xf0 | (code >>> 18)) << SHIFT[i++ & 3];\n blocks[i >>> 2] |= (0x80 | ((code >>> 12) & 0x3f)) << SHIFT[i++ & 3];\n blocks[i >>> 2] |= (0x80 | ((code >>> 6) & 0x3f)) << SHIFT[i++ & 3];\n blocks[i >>> 2] |= (0x80 | (code & 0x3f)) << SHIFT[i++ & 3];\n }\n }\n }\n\n this.lastByteIndex = i;\n this.bytes += i - this.start;\n if (i >= 64) {\n this.block = blocks[16];\n this.start = i - 64;\n this.hash();\n this.hashed = true;\n } else {\n this.start = i;\n }\n }\n if (this.bytes > 4294967295) {\n this.hBytes += this.bytes / 4294967296 << 0;\n this.bytes = this.bytes % 4294967296;\n }\n return this;\n };\n\n Sha256.prototype.finalize = function () {\n if (this.finalized) {\n return;\n }\n this.finalized = true;\n var blocks = this.blocks, i = this.lastByteIndex;\n blocks[16] = this.block;\n blocks[i >>> 2] |= EXTRA[i & 3];\n this.block = blocks[16];\n if (i >= 56) {\n if (!this.hashed) {\n this.hash();\n }\n blocks[0] = this.block;\n blocks[16] = blocks[1] = blocks[2] = blocks[3] =\n blocks[4] = blocks[5] = blocks[6] = blocks[7] =\n blocks[8] = blocks[9] = blocks[10] = blocks[11] =\n blocks[12] = blocks[13] = blocks[14] = blocks[15] = 0;\n }\n blocks[14] = this.hBytes << 3 | this.bytes >>> 29;\n blocks[15] = this.bytes << 3;\n this.hash();\n };\n\n Sha256.prototype.hash = function () {\n var a = this.h0, b = this.h1, c = this.h2, d = this.h3, e = this.h4, f = this.h5, g = this.h6,\n h = this.h7, blocks = this.blocks, j, s0, s1, maj, t1, t2, ch, ab, da, cd, bc;\n\n for (j = 16; j < 64; ++j) {\n // rightrotate\n t1 = blocks[j - 15];\n s0 = ((t1 >>> 7) | (t1 << 25)) ^ ((t1 >>> 18) | (t1 << 14)) ^ (t1 >>> 3);\n t1 = blocks[j - 2];\n s1 = ((t1 >>> 17) | (t1 << 15)) ^ ((t1 >>> 19) | (t1 << 13)) ^ (t1 >>> 10);\n blocks[j] = blocks[j - 16] + s0 + blocks[j - 7] + s1 << 0;\n }\n\n bc = b & c;\n for (j = 0; j < 64; j += 4) {\n if (this.first) {\n if (this.is224) {\n ab = 300032;\n t1 = blocks[0] - 1413257819;\n h = t1 - 150054599 << 0;\n d = t1 + 24177077 << 0;\n } else {\n ab = 704751109;\n t1 = blocks[0] - 210244248;\n h = t1 - 1521486534 << 0;\n d = t1 + 143694565 << 0;\n }\n this.first = false;\n } else {\n s0 = ((a >>> 2) | (a << 30)) ^ ((a >>> 13) | (a << 19)) ^ ((a >>> 22) | (a << 10));\n s1 = ((e >>> 6) | (e << 26)) ^ ((e >>> 11) | (e << 21)) ^ ((e >>> 25) | (e << 7));\n ab = a & b;\n maj = ab ^ (a & c) ^ bc;\n ch = (e & f) ^ (~e & g);\n t1 = h + s1 + ch + K[j] + blocks[j];\n t2 = s0 + maj;\n h = d + t1 << 0;\n d = t1 + t2 << 0;\n }\n s0 = ((d >>> 2) | (d << 30)) ^ ((d >>> 13) | (d << 19)) ^ ((d >>> 22) | (d << 10));\n s1 = ((h >>> 6) | (h << 26)) ^ ((h >>> 11) | (h << 21)) ^ ((h >>> 25) | (h << 7));\n da = d & a;\n maj = da ^ (d & b) ^ ab;\n ch = (h & e) ^ (~h & f);\n t1 = g + s1 + ch + K[j + 1] + blocks[j + 1];\n t2 = s0 + maj;\n g = c + t1 << 0;\n c = t1 + t2 << 0;\n s0 = ((c >>> 2) | (c << 30)) ^ ((c >>> 13) | (c << 19)) ^ ((c >>> 22) | (c << 10));\n s1 = ((g >>> 6) | (g << 26)) ^ ((g >>> 11) | (g << 21)) ^ ((g >>> 25) | (g << 7));\n cd = c & d;\n maj = cd ^ (c & a) ^ da;\n ch = (g & h) ^ (~g & e);\n t1 = f + s1 + ch + K[j + 2] + blocks[j + 2];\n t2 = s0 + maj;\n f = b + t1 << 0;\n b = t1 + t2 << 0;\n s0 = ((b >>> 2) | (b << 30)) ^ ((b >>> 13) | (b << 19)) ^ ((b >>> 22) | (b << 10));\n s1 = ((f >>> 6) | (f << 26)) ^ ((f >>> 11) | (f << 21)) ^ ((f >>> 25) | (f << 7));\n bc = b & c;\n maj = bc ^ (b & d) ^ cd;\n ch = (f & g) ^ (~f & h);\n t1 = e + s1 + ch + K[j + 3] + blocks[j + 3];\n t2 = s0 + maj;\n e = a + t1 << 0;\n a = t1 + t2 << 0;\n this.chromeBugWorkAround = true;\n }\n\n this.h0 = this.h0 + a << 0;\n this.h1 = this.h1 + b << 0;\n this.h2 = this.h2 + c << 0;\n this.h3 = this.h3 + d << 0;\n this.h4 = this.h4 + e << 0;\n this.h5 = this.h5 + f << 0;\n this.h6 = this.h6 + g << 0;\n this.h7 = this.h7 + h << 0;\n };\n\n Sha256.prototype.hex = function () {\n this.finalize();\n\n var h0 = this.h0, h1 = this.h1, h2 = this.h2, h3 = this.h3, h4 = this.h4, h5 = this.h5,\n h6 = this.h6, h7 = this.h7;\n\n var hex = HEX_CHARS[(h0 >>> 28) & 0x0F] + HEX_CHARS[(h0 >>> 24) & 0x0F] +\n HEX_CHARS[(h0 >>> 20) & 0x0F] + HEX_CHARS[(h0 >>> 16) & 0x0F] +\n HEX_CHARS[(h0 >>> 12) & 0x0F] + HEX_CHARS[(h0 >>> 8) & 0x0F] +\n HEX_CHARS[(h0 >>> 4) & 0x0F] + HEX_CHARS[h0 & 0x0F] +\n HEX_CHARS[(h1 >>> 28) & 0x0F] + HEX_CHARS[(h1 >>> 24) & 0x0F] +\n HEX_CHARS[(h1 >>> 20) & 0x0F] + HEX_CHARS[(h1 >>> 16) & 0x0F] +\n HEX_CHARS[(h1 >>> 12) & 0x0F] + HEX_CHARS[(h1 >>> 8) & 0x0F] +\n HEX_CHARS[(h1 >>> 4) & 0x0F] + HEX_CHARS[h1 & 0x0F] +\n HEX_CHARS[(h2 >>> 28) & 0x0F] + HEX_CHARS[(h2 >>> 24) & 0x0F] +\n HEX_CHARS[(h2 >>> 20) & 0x0F] + HEX_CHARS[(h2 >>> 16) & 0x0F] +\n HEX_CHARS[(h2 >>> 12) & 0x0F] + HEX_CHARS[(h2 >>> 8) & 0x0F] +\n HEX_CHARS[(h2 >>> 4) & 0x0F] + HEX_CHARS[h2 & 0x0F] +\n HEX_CHARS[(h3 >>> 28) & 0x0F] + HEX_CHARS[(h3 >>> 24) & 0x0F] +\n HEX_CHARS[(h3 >>> 20) & 0x0F] + HEX_CHARS[(h3 >>> 16) & 0x0F] +\n HEX_CHARS[(h3 >>> 12) & 0x0F] + HEX_CHARS[(h3 >>> 8) & 0x0F] +\n HEX_CHARS[(h3 >>> 4) & 0x0F] + HEX_CHARS[h3 & 0x0F] +\n HEX_CHARS[(h4 >>> 28) & 0x0F] + HEX_CHARS[(h4 >>> 24) & 0x0F] +\n HEX_CHARS[(h4 >>> 20) & 0x0F] + HEX_CHARS[(h4 >>> 16) & 0x0F] +\n HEX_CHARS[(h4 >>> 12) & 0x0F] + HEX_CHARS[(h4 >>> 8) & 0x0F] +\n HEX_CHARS[(h4 >>> 4) & 0x0F] + HEX_CHARS[h4 & 0x0F] +\n HEX_CHARS[(h5 >>> 28) & 0x0F] + HEX_CHARS[(h5 >>> 24) & 0x0F] +\n HEX_CHARS[(h5 >>> 20) & 0x0F] + HEX_CHARS[(h5 >>> 16) & 0x0F] +\n HEX_CHARS[(h5 >>> 12) & 0x0F] + HEX_CHARS[(h5 >>> 8) & 0x0F] +\n HEX_CHARS[(h5 >>> 4) & 0x0F] + HEX_CHARS[h5 & 0x0F] +\n HEX_CHARS[(h6 >>> 28) & 0x0F] + HEX_CHARS[(h6 >>> 24) & 0x0F] +\n HEX_CHARS[(h6 >>> 20) & 0x0F] + HEX_CHARS[(h6 >>> 16) & 0x0F] +\n HEX_CHARS[(h6 >>> 12) & 0x0F] + HEX_CHARS[(h6 >>> 8) & 0x0F] +\n HEX_CHARS[(h6 >>> 4) & 0x0F] + HEX_CHARS[h6 & 0x0F];\n if (!this.is224) {\n hex += HEX_CHARS[(h7 >>> 28) & 0x0F] + HEX_CHARS[(h7 >>> 24) & 0x0F] +\n HEX_CHARS[(h7 >>> 20) & 0x0F] + HEX_CHARS[(h7 >>> 16) & 0x0F] +\n HEX_CHARS[(h7 >>> 12) & 0x0F] + HEX_CHARS[(h7 >>> 8) & 0x0F] +\n HEX_CHARS[(h7 >>> 4) & 0x0F] + HEX_CHARS[h7 & 0x0F];\n }\n return hex;\n };\n\n Sha256.prototype.toString = Sha256.prototype.hex;\n\n Sha256.prototype.digest = function () {\n this.finalize();\n\n var h0 = this.h0, h1 = this.h1, h2 = this.h2, h3 = this.h3, h4 = this.h4, h5 = this.h5,\n h6 = this.h6, h7 = this.h7;\n\n var arr = [\n (h0 >>> 24) & 0xFF, (h0 >>> 16) & 0xFF, (h0 >>> 8) & 0xFF, h0 & 0xFF,\n (h1 >>> 24) & 0xFF, (h1 >>> 16) & 0xFF, (h1 >>> 8) & 0xFF, h1 & 0xFF,\n (h2 >>> 24) & 0xFF, (h2 >>> 16) & 0xFF, (h2 >>> 8) & 0xFF, h2 & 0xFF,\n (h3 >>> 24) & 0xFF, (h3 >>> 16) & 0xFF, (h3 >>> 8) & 0xFF, h3 & 0xFF,\n (h4 >>> 24) & 0xFF, (h4 >>> 16) & 0xFF, (h4 >>> 8) & 0xFF, h4 & 0xFF,\n (h5 >>> 24) & 0xFF, (h5 >>> 16) & 0xFF, (h5 >>> 8) & 0xFF, h5 & 0xFF,\n (h6 >>> 24) & 0xFF, (h6 >>> 16) & 0xFF, (h6 >>> 8) & 0xFF, h6 & 0xFF\n ];\n if (!this.is224) {\n arr.push((h7 >>> 24) & 0xFF, (h7 >>> 16) & 0xFF, (h7 >>> 8) & 0xFF, h7 & 0xFF);\n }\n return arr;\n };\n\n Sha256.prototype.array = Sha256.prototype.digest;\n\n Sha256.prototype.arrayBuffer = function () {\n this.finalize();\n\n var buffer = new ArrayBuffer(this.is224 ? 28 : 32);\n var dataView = new DataView(buffer);\n dataView.setUint32(0, this.h0);\n dataView.setUint32(4, this.h1);\n dataView.setUint32(8, this.h2);\n dataView.setUint32(12, this.h3);\n dataView.setUint32(16, this.h4);\n dataView.setUint32(20, this.h5);\n dataView.setUint32(24, this.h6);\n if (!this.is224) {\n dataView.setUint32(28, this.h7);\n }\n return buffer;\n };\n\n function HmacSha256(key, is224, sharedMemory) {\n var i, type = typeof key;\n if (type === 'string') {\n var bytes = [], length = key.length, index = 0, code;\n for (i = 0; i < length; ++i) {\n code = key.charCodeAt(i);\n if (code < 0x80) {\n bytes[index++] = code;\n } else if (code < 0x800) {\n bytes[index++] = (0xc0 | (code >>> 6));\n bytes[index++] = (0x80 | (code & 0x3f));\n } else if (code < 0xd800 || code >= 0xe000) {\n bytes[index++] = (0xe0 | (code >>> 12));\n bytes[index++] = (0x80 | ((code >>> 6) & 0x3f));\n bytes[index++] = (0x80 | (code & 0x3f));\n } else {\n code = 0x10000 + (((code & 0x3ff) << 10) | (key.charCodeAt(++i) & 0x3ff));\n bytes[index++] = (0xf0 | (code >>> 18));\n bytes[index++] = (0x80 | ((code >>> 12) & 0x3f));\n bytes[index++] = (0x80 | ((code >>> 6) & 0x3f));\n bytes[index++] = (0x80 | (code & 0x3f));\n }\n }\n key = bytes;\n } else {\n if (type === 'object') {\n if (key === null) {\n throw new Error(ERROR);\n } else if (ARRAY_BUFFER && key.constructor === ArrayBuffer) {\n key = new Uint8Array(key);\n } else if (!Array.isArray(key)) {\n if (!ARRAY_BUFFER || !ArrayBuffer.isView(key)) {\n throw new Error(ERROR);\n }\n }\n } else {\n throw new Error(ERROR);\n }\n }\n\n if (key.length > 64) {\n key = (new Sha256(is224, true)).update(key).array();\n }\n\n var oKeyPad = [], iKeyPad = [];\n for (i = 0; i < 64; ++i) {\n var b = key[i] || 0;\n oKeyPad[i] = 0x5c ^ b;\n iKeyPad[i] = 0x36 ^ b;\n }\n\n Sha256.call(this, is224, sharedMemory);\n\n this.update(iKeyPad);\n this.oKeyPad = oKeyPad;\n this.inner = true;\n this.sharedMemory = sharedMemory;\n }\n HmacSha256.prototype = new Sha256();\n\n HmacSha256.prototype.finalize = function () {\n Sha256.prototype.finalize.call(this);\n if (this.inner) {\n this.inner = false;\n var innerHash = this.array();\n Sha256.call(this, this.is224, this.sharedMemory);\n this.update(this.oKeyPad);\n this.update(innerHash);\n Sha256.prototype.finalize.call(this);\n }\n };\n\n var exports = createMethod();\n exports.sha256 = exports;\n exports.sha224 = createMethod(true);\n exports.sha256.hmac = createHmacMethod();\n exports.sha224.hmac = createHmacMethod(true);\n\n if (COMMON_JS) {\n module.exports = exports;\n } else {\n root.sha256 = exports.sha256;\n root.sha224 = exports.sha224;\n if (AMD) {\n !(__WEBPACK_AMD_DEFINE_RESULT__ = (function () {\n return exports;\n }).call(exports, __webpack_require__, exports, module),\n\t\t__WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));\n }\n }\n})();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNzEzMTIuanMiLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL2l0Zy1uZXh0Z2VuLWZyb250ZW5kLy4vbm9kZV9tb2R1bGVzL2pzLXNoYTI1Ni9zcmMvc2hhMjU2LmpzPzZjMjciXSwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBbanMtc2hhMjU2XXtAbGluayBodHRwczovL2dpdGh1Yi5jb20vZW1uMTc4L2pzLXNoYTI1Nn1cbiAqXG4gKiBAdmVyc2lvbiAwLjExLjBcbiAqIEBhdXRob3IgQ2hlbiwgWWktQ3l1YW4gW2VtbjE3OEBnbWFpbC5jb21dXG4gKiBAY29weXJpZ2h0IENoZW4sIFlpLUN5dWFuIDIwMTQtMjAyNFxuICogQGxpY2Vuc2UgTUlUXG4gKi9cbi8qanNsaW50IGJpdHdpc2U6IHRydWUgKi9cbihmdW5jdGlvbiAoKSB7XG4gICd1c2Ugc3RyaWN0JztcblxuICB2YXIgRVJST1IgPSAnaW5wdXQgaXMgaW52YWxpZCB0eXBlJztcbiAgdmFyIFdJTkRPVyA9IHR5cGVvZiB3aW5kb3cgPT09ICdvYmplY3QnO1xuICB2YXIgcm9vdCA9IFdJTkRPVyA/IHdpbmRvdyA6IHt9O1xuICBpZiAocm9vdC5KU19TSEEyNTZfTk9fV0lORE9XKSB7XG4gICAgV0lORE9XID0gZmFsc2U7XG4gIH1cbiAgdmFyIFdFQl9XT1JLRVIgPSAhV0lORE9XICYmIHR5cGVvZiBzZWxmID09PSAnb2JqZWN0JztcbiAgdmFyIE5PREVfSlMgPSAhcm9vdC5KU19TSEEyNTZfTk9fTk9ERV9KUyAmJiB0eXBlb2YgcHJvY2VzcyA9PT0gJ29iamVjdCcgJiYgcHJvY2Vzcy52ZXJzaW9ucyAmJiBwcm9jZXNzLnZlcnNpb25zLm5vZGU7XG4gIGlmIChOT0RFX0pTKSB7XG4gICAgcm9vdCA9IGdsb2JhbDtcbiAgfSBlbHNlIGlmIChXRUJfV09SS0VSKSB7XG4gICAgcm9vdCA9IHNlbGY7XG4gIH1cbiAgdmFyIENPTU1PTl9KUyA9ICFyb290LkpTX1NIQTI1Nl9OT19DT01NT05fSlMgJiYgdHlwZW9mIG1vZHVsZSA9PT0gJ29iamVjdCcgJiYgbW9kdWxlLmV4cG9ydHM7XG4gIHZhciBBTUQgPSB0eXBlb2YgZGVmaW5lID09PSAnZnVuY3Rpb24nICYmIGRlZmluZS5hbWQ7XG4gIHZhciBBUlJBWV9CVUZGRVIgPSAhcm9vdC5KU19TSEEyNTZfTk9fQVJSQVlfQlVGRkVSICYmIHR5cGVvZiBBcnJheUJ1ZmZlciAhPT0gJ3VuZGVmaW5lZCc7XG4gIHZhciBIRVhfQ0hBUlMgPSAnMDEyMzQ1Njc4OWFiY2RlZicuc3BsaXQoJycpO1xuICB2YXIgRVhUUkEgPSBbLTIxNDc0ODM2NDgsIDgzODg2MDgsIDMyNzY4LCAxMjhdO1xuICB2YXIgU0hJRlQgPSBbMjQsIDE2LCA4LCAwXTtcbiAgdmFyIEsgPSBbXG4gICAgMHg0MjhhMmY5OCwgMHg3MTM3NDQ5MSwgMHhiNWMwZmJjZiwgMHhlOWI1ZGJhNSwgMHgzOTU2YzI1YiwgMHg1OWYxMTFmMSwgMHg5MjNmODJhNCwgMHhhYjFjNWVkNSxcbiAgICAweGQ4MDdhYTk4LCAweDEyODM1YjAxLCAweDI0MzE4NWJlLCAweDU1MGM3ZGMzLCAweDcyYmU1ZDc0LCAweDgwZGViMWZlLCAweDliZGMwNmE3LCAweGMxOWJmMTc0LFxuICAgIDB4ZTQ5YjY5YzEsIDB4ZWZiZTQ3ODYsIDB4MGZjMTlkYzYsIDB4MjQwY2ExY2MsIDB4MmRlOTJjNmYsIDB4NGE3NDg0YWEsIDB4NWNiMGE5ZGMsIDB4NzZmOTg4ZGEsXG4gICAgMHg5ODNlNTE1MiwgMHhhODMxYzY2ZCwgMHhiMDAzMjdjOCwgMHhiZjU5N2ZjNywgMHhjNmUwMGJmMywgMHhkNWE3OTE0NywgMHgwNmNhNjM1MSwgMHgxNDI5Mjk2NyxcbiAgICAweDI3YjcwYTg1LCAweDJlMWIyMTM4LCAweDRkMmM2ZGZjLCAweDUzMzgwZDEzLCAweDY1MGE3MzU0LCAweDc2NmEwYWJiLCAweDgxYzJjOTJlLCAweDkyNzIyYzg1LFxuICAgIDB4YTJiZmU4YTEsIDB4YTgxYTY2NGIsIDB4YzI0YjhiNzAsIDB4Yzc2YzUxYTMsIDB4ZDE5MmU4MTksIDB4ZDY5OTA2MjQsIDB4ZjQwZTM1ODUsIDB4MTA2YWEwNzAsXG4gICAgMHgxOWE0YzExNiwgMHgxZTM3NmMwOCwgMHgyNzQ4Nzc0YywgMHgzNGIwYmNiNSwgMHgzOTFjMGNiMywgMHg0ZWQ4YWE0YSwgMHg1YjljY2E0ZiwgMHg2ODJlNmZmMyxcbiAgICAweDc0OGY4MmVlLCAweDc4YTU2MzZmLCAweDg0Yzg3ODE0LCAweDhjYzcwMjA4LCAweDkwYmVmZmZhLCAweGE0NTA2Y2ViLCAweGJlZjlhM2Y3LCAweGM2NzE3OGYyXG4gIF07XG4gIHZhciBPVVRQVVRfVFlQRVMgPSBbJ2hleCcsICdhcnJheScsICdkaWdlc3QnLCAnYXJyYXlCdWZmZXInXTtcblxuICB2YXIgYmxvY2tzID0gW107XG5cbiAgaWYgKHJvb3QuSlNfU0hBMjU2X05PX05PREVfSlMgfHwgIUFycmF5LmlzQXJyYXkpIHtcbiAgICBBcnJheS5pc0FycmF5ID0gZnVuY3Rpb24gKG9iaikge1xuICAgICAgcmV0dXJuIE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChvYmopID09PSAnW29iamVjdCBBcnJheV0nO1xuICAgIH07XG4gIH1cblxuICBpZiAoQVJSQVlfQlVGRkVSICYmIChyb290LkpTX1NIQTI1Nl9OT19BUlJBWV9CVUZGRVJfSVNfVklFVyB8fCAhQXJyYXlCdWZmZXIuaXNWaWV3KSkge1xuICAgIEFycmF5QnVmZmVyLmlzVmlldyA9IGZ1bmN0aW9uIChvYmopIHtcbiAgICAgIHJldHVybiB0eXBlb2Ygb2JqID09PSAnb2JqZWN0JyAmJiBvYmouYnVmZmVyICYmIG9iai5idWZmZXIuY29uc3RydWN0b3IgPT09IEFycmF5QnVmZmVyO1xuICAgIH07XG4gIH1cblxuICB2YXIgY3JlYXRlT3V0cHV0TWV0aG9kID0gZnVuY3Rpb24gKG91dHB1dFR5cGUsIGlzMjI0KSB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uIChtZXNzYWdlKSB7XG4gICAgICByZXR1cm4gbmV3IFNoYTI1NihpczIyNCwgdHJ1ZSkudXBkYXRlKG1lc3NhZ2UpW291dHB1dFR5cGVdKCk7XG4gICAgfTtcbiAgfTtcblxuICB2YXIgY3JlYXRlTWV0aG9kID0gZnVuY3Rpb24gKGlzMjI0KSB7XG4gICAgdmFyIG1ldGhvZCA9IGNyZWF0ZU91dHB1dE1ldGhvZCgnaGV4JywgaXMyMjQpO1xuICAgIGlmIChOT0RFX0pTKSB7XG4gICAgICBtZXRob2QgPSBub2RlV3JhcChtZXRob2QsIGlzMjI0KTtcbiAgICB9XG4gICAgbWV0aG9kLmNyZWF0ZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIHJldHVybiBuZXcgU2hhMjU2KGlzMjI0KTtcbiAgICB9O1xuICAgIG1ldGhvZC51cGRhdGUgPSBmdW5jdGlvbiAobWVzc2FnZSkge1xuICAgICAgcmV0dXJuIG1ldGhvZC5jcmVhdGUoKS51cGRhdGUobWVzc2FnZSk7XG4gICAgfTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IE9VVFBVVF9UWVBFUy5sZW5ndGg7ICsraSkge1xuICAgICAgdmFyIHR5cGUgPSBPVVRQVVRfVFlQRVNbaV07XG4gICAgICBtZXRob2RbdHlwZV0gPSBjcmVhdGVPdXRwdXRNZXRob2QodHlwZSwgaXMyMjQpO1xuICAgIH1cbiAgICByZXR1cm4gbWV0aG9kO1xuICB9O1xuXG4gIHZhciBub2RlV3JhcCA9IGZ1bmN0aW9uIChtZXRob2QsIGlzMjI0KSB7XG4gICAgdmFyIGNyeXB0byA9IHJlcXVpcmUoJ2NyeXB0bycpXG4gICAgdmFyIEJ1ZmZlciA9IHJlcXVpcmUoJ2J1ZmZlcicpLkJ1ZmZlcjtcbiAgICB2YXIgYWxnb3JpdGhtID0gaXMyMjQgPyAnc2hhMjI0JyA6ICdzaGEyNTYnO1xuICAgIHZhciBidWZmZXJGcm9tO1xuICAgIGlmIChCdWZmZXIuZnJvbSAmJiAhcm9vdC5KU19TSEEyNTZfTk9fQlVGRkVSX0ZST00pIHtcbiAgICAgIGJ1ZmZlckZyb20gPSBCdWZmZXIuZnJvbTtcbiAgICB9IGVsc2Uge1xuICAgICAgYnVmZmVyRnJvbSA9IGZ1bmN0aW9uIChtZXNzYWdlKSB7XG4gICAgICAgIHJldHVybiBuZXcgQnVmZmVyKG1lc3NhZ2UpO1xuICAgICAgfTtcbiAgICB9XG4gICAgdmFyIG5vZGVNZXRob2QgPSBmdW5jdGlvbiAobWVzc2FnZSkge1xuICAgICAgaWYgKHR5cGVvZiBtZXNzYWdlID09PSAnc3RyaW5nJykge1xuICAgICAgICByZXR1cm4gY3J5cHRvLmNyZWF0ZUhhc2goYWxnb3JpdGhtKS51cGRhdGUobWVzc2FnZSwgJ3V0ZjgnKS5kaWdlc3QoJ2hleCcpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaWYgKG1lc3NhZ2UgPT09IG51bGwgfHwgbWVzc2FnZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKEVSUk9SKTtcbiAgICAgICAgfSBlbHNlIGlmIChtZXNzYWdlLmNvbnN0cnVjdG9yID09PSBBcnJheUJ1ZmZlcikge1xuICAgICAgICAgIG1lc3NhZ2UgPSBuZXcgVWludDhBcnJheShtZXNzYWdlKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYgKEFycmF5LmlzQXJyYXkobWVzc2FnZSkgfHwgQXJyYXlCdWZmZXIuaXNWaWV3KG1lc3NhZ2UpIHx8XG4gICAgICAgIG1lc3NhZ2UuY29uc3RydWN0b3IgPT09IEJ1ZmZlcikge1xuICAgICAgICByZXR1cm4gY3J5cHRvLmNyZWF0ZUhhc2goYWxnb3JpdGhtKS51cGRhdGUoYnVmZmVyRnJvbShtZXNzYWdlKSkuZGlnZXN0KCdoZXgnKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBtZXRob2QobWVzc2FnZSk7XG4gICAgICB9XG4gICAgfTtcbiAgICByZXR1cm4gbm9kZU1ldGhvZDtcbiAgfTtcblxuICB2YXIgY3JlYXRlSG1hY091dHB1dE1ldGhvZCA9IGZ1bmN0aW9uIChvdXRwdXRUeXBlLCBpczIyNCkge1xuICAgIHJldHVybiBmdW5jdGlvbiAoa2V5LCBtZXNzYWdlKSB7XG4gICAgICByZXR1cm4gbmV3IEhtYWNTaGEyNTYoa2V5LCBpczIyNCwgdHJ1ZSkudXBkYXRlKG1lc3NhZ2UpW291dHB1dFR5cGVdKCk7XG4gICAgfTtcbiAgfTtcblxuICB2YXIgY3JlYXRlSG1hY01ldGhvZCA9IGZ1bmN0aW9uIChpczIyNCkge1xuICAgIHZhciBtZXRob2QgPSBjcmVhdGVIbWFjT3V0cHV0TWV0aG9kKCdoZXgnLCBpczIyNCk7XG4gICAgbWV0aG9kLmNyZWF0ZSA9IGZ1bmN0aW9uIChrZXkpIHtcbiAgICAgIHJldHVybiBuZXcgSG1hY1NoYTI1NihrZXksIGlzMjI0KTtcbiAgICB9O1xuICAgIG1ldGhvZC51cGRhdGUgPSBmdW5jdGlvbiAoa2V5LCBtZXNzYWdlKSB7XG4gICAgICByZXR1cm4gbWV0aG9kLmNyZWF0ZShrZXkpLnVwZGF0ZShtZXNzYWdlKTtcbiAgICB9O1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgT1VUUFVUX1RZUEVTLmxlbmd0aDsgKytpKSB7XG4gICAgICB2YXIgdHlwZSA9IE9VVFBVVF9UWVBFU1tpXTtcbiAgICAgIG1ldGhvZFt0eXBlXSA9IGNyZWF0ZUhtYWNPdXRwdXRNZXRob2QodHlwZSwgaXMyMjQpO1xuICAgIH1cbiAgICByZXR1cm4gbWV0aG9kO1xuICB9O1xuXG4gIGZ1bmN0aW9uIFNoYTI1NihpczIyNCwgc2hhcmVkTWVtb3J5KSB7XG4gICAgaWYgKHNoYXJlZE1lbW9yeSkge1xuICAgICAgYmxvY2tzWzBdID0gYmxvY2tzWzE2XSA9IGJsb2Nrc1sxXSA9IGJsb2Nrc1syXSA9IGJsb2Nrc1szXSA9XG4gICAgICAgIGJsb2Nrc1s0XSA9IGJsb2Nrc1s1XSA9IGJsb2Nrc1s2XSA9IGJsb2Nrc1s3XSA9XG4gICAgICAgIGJsb2Nrc1s4XSA9IGJsb2Nrc1s5XSA9IGJsb2Nrc1sxMF0gPSBibG9ja3NbMTFdID1cbiAgICAgICAgYmxvY2tzWzEyXSA9IGJsb2Nrc1sxM10gPSBibG9ja3NbMTRdID0gYmxvY2tzWzE1XSA9IDA7XG4gICAgICB0aGlzLmJsb2NrcyA9IGJsb2NrcztcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5ibG9ja3MgPSBbMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMF07XG4gICAgfVxuXG4gICAgaWYgKGlzMjI0KSB7XG4gICAgICB0aGlzLmgwID0gMHhjMTA1OWVkODtcbiAgICAgIHRoaXMuaDEgPSAweDM2N2NkNTA3O1xuICAgICAgdGhpcy5oMiA9IDB4MzA3MGRkMTc7XG4gICAgICB0aGlzLmgzID0gMHhmNzBlNTkzOTtcbiAgICAgIHRoaXMuaDQgPSAweGZmYzAwYjMxO1xuICAgICAgdGhpcy5oNSA9IDB4Njg1ODE1MTE7XG4gICAgICB0aGlzLmg2ID0gMHg2NGY5OGZhNztcbiAgICAgIHRoaXMuaDcgPSAweGJlZmE0ZmE0O1xuICAgIH0gZWxzZSB7IC8vIDI1NlxuICAgICAgdGhpcy5oMCA9IDB4NmEwOWU2Njc7XG4gICAgICB0aGlzLmgxID0gMHhiYjY3YWU4NTtcbiAgICAgIHRoaXMuaDIgPSAweDNjNmVmMzcyO1xuICAgICAgdGhpcy5oMyA9IDB4YTU0ZmY1M2E7XG4gICAgICB0aGlzLmg0ID0gMHg1MTBlNTI3ZjtcbiAgICAgIHRoaXMuaDUgPSAweDliMDU2ODhjO1xuICAgICAgdGhpcy5oNiA9IDB4MWY4M2Q5YWI7XG4gICAgICB0aGlzLmg3ID0gMHg1YmUwY2QxOTtcbiAgICB9XG5cbiAgICB0aGlzLmJsb2NrID0gdGhpcy5zdGFydCA9IHRoaXMuYnl0ZXMgPSB0aGlzLmhCeXRlcyA9IDA7XG4gICAgdGhpcy5maW5hbGl6ZWQgPSB0aGlzLmhhc2hlZCA9IGZhbHNlO1xuICAgIHRoaXMuZmlyc3QgPSB0cnVlO1xuICAgIHRoaXMuaXMyMjQgPSBpczIyNDtcbiAgfVxuXG4gIFNoYTI1Ni5wcm90b3R5cGUudXBkYXRlID0gZnVuY3Rpb24gKG1lc3NhZ2UpIHtcbiAgICBpZiAodGhpcy5maW5hbGl6ZWQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdmFyIG5vdFN0cmluZywgdHlwZSA9IHR5cGVvZiBtZXNzYWdlO1xuICAgIGlmICh0eXBlICE9PSAnc3RyaW5nJykge1xuICAgICAgaWYgKHR5cGUgPT09ICdvYmplY3QnKSB7XG4gICAgICAgIGlmIChtZXNzYWdlID09PSBudWxsKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKEVSUk9SKTtcbiAgICAgICAgfSBlbHNlIGlmIChBUlJBWV9CVUZGRVIgJiYgbWVzc2FnZS5jb25zdHJ1Y3RvciA9PT0gQXJyYXlCdWZmZXIpIHtcbiAgICAgICAgICBtZXNzYWdlID0gbmV3IFVpbnQ4QXJyYXkobWVzc2FnZSk7XG4gICAgICAgIH0gZWxzZSBpZiAoIUFycmF5LmlzQXJyYXkobWVzc2FnZSkpIHtcbiAgICAgICAgICBpZiAoIUFSUkFZX0JVRkZFUiB8fCAhQXJyYXlCdWZmZXIuaXNWaWV3KG1lc3NhZ2UpKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoRVJST1IpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKEVSUk9SKTtcbiAgICAgIH1cbiAgICAgIG5vdFN0cmluZyA9IHRydWU7XG4gICAgfVxuICAgIHZhciBjb2RlLCBpbmRleCA9IDAsIGksIGxlbmd0aCA9IG1lc3NhZ2UubGVuZ3RoLCBibG9ja3MgPSB0aGlzLmJsb2NrcztcbiAgICB3aGlsZSAoaW5kZXggPCBsZW5ndGgpIHtcbiAgICAgIGlmICh0aGlzLmhhc2hlZCkge1xuICAgICAgICB0aGlzLmhhc2hlZCA9IGZhbHNlO1xuICAgICAgICBibG9ja3NbMF0gPSB0aGlzLmJsb2NrO1xuICAgICAgICB0aGlzLmJsb2NrID0gYmxvY2tzWzE2XSA9IGJsb2Nrc1sxXSA9IGJsb2Nrc1syXSA9IGJsb2Nrc1szXSA9XG4gICAgICAgICAgYmxvY2tzWzRdID0gYmxvY2tzWzVdID0gYmxvY2tzWzZdID0gYmxvY2tzWzddID1cbiAgICAgICAgICBibG9ja3NbOF0gPSBibG9ja3NbOV0gPSBibG9ja3NbMTBdID0gYmxvY2tzWzExXSA9XG4gICAgICAgICAgYmxvY2tzWzEyXSA9IGJsb2Nrc1sxM10gPSBibG9ja3NbMTRdID0gYmxvY2tzWzE1XSA9IDA7XG4gICAgICB9XG5cbiAgICAgIGlmIChub3RTdHJpbmcpIHtcbiAgICAgICAgZm9yIChpID0gdGhpcy5zdGFydDsgaW5kZXggPCBsZW5ndGggJiYgaSA8IDY0OyArK2luZGV4KSB7XG4gICAgICAgICAgYmxvY2tzW2kgPj4+IDJdIHw9IG1lc3NhZ2VbaW5kZXhdIDw8IFNISUZUW2krKyAmIDNdO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBmb3IgKGkgPSB0aGlzLnN0YXJ0OyBpbmRleCA8IGxlbmd0aCAmJiBpIDwgNjQ7ICsraW5kZXgpIHtcbiAgICAgICAgICBjb2RlID0gbWVzc2FnZS5jaGFyQ29kZUF0KGluZGV4KTtcbiAgICAgICAgICBpZiAoY29kZSA8IDB4ODApIHtcbiAgICAgICAgICAgIGJsb2Nrc1tpID4+PiAyXSB8PSBjb2RlIDw8IFNISUZUW2krKyAmIDNdO1xuICAgICAgICAgIH0gZWxzZSBpZiAoY29kZSA8IDB4ODAwKSB7XG4gICAgICAgICAgICBibG9ja3NbaSA+Pj4gMl0gfD0gKDB4YzAgfCAoY29kZSA+Pj4gNikpIDw8IFNISUZUW2krKyAmIDNdO1xuICAgICAgICAgICAgYmxvY2tzW2kgPj4+IDJdIHw9ICgweDgwIHwgKGNvZGUgJiAweDNmKSkgPDwgU0hJRlRbaSsrICYgM107XG4gICAgICAgICAgfSBlbHNlIGlmIChjb2RlIDwgMHhkODAwIHx8IGNvZGUgPj0gMHhlMDAwKSB7XG4gICAgICAgICAgICBibG9ja3NbaSA+Pj4gMl0gfD0gKDB4ZTAgfCAoY29kZSA+Pj4gMTIpKSA8PCBTSElGVFtpKysgJiAzXTtcbiAgICAgICAgICAgIGJsb2Nrc1tpID4+PiAyXSB8PSAoMHg4MCB8ICgoY29kZSA+Pj4gNikgJiAweDNmKSkgPDwgU0hJRlRbaSsrICYgM107XG4gICAgICAgICAgICBibG9ja3NbaSA+Pj4gMl0gfD0gKDB4ODAgfCAoY29kZSAmIDB4M2YpKSA8PCBTSElGVFtpKysgJiAzXTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY29kZSA9IDB4MTAwMDAgKyAoKChjb2RlICYgMHgzZmYpIDw8IDEwKSB8IChtZXNzYWdlLmNoYXJDb2RlQXQoKytpbmRleCkgJiAweDNmZikpO1xuICAgICAgICAgICAgYmxvY2tzW2kgPj4+IDJdIHw9ICgweGYwIHwgKGNvZGUgPj4+IDE4KSkgPDwgU0hJRlRbaSsrICYgM107XG4gICAgICAgICAgICBibG9ja3NbaSA+Pj4gMl0gfD0gKDB4ODAgfCAoKGNvZGUgPj4+IDEyKSAmIDB4M2YpKSA8PCBTSElGVFtpKysgJiAzXTtcbiAgICAgICAgICAgIGJsb2Nrc1tpID4+PiAyXSB8PSAoMHg4MCB8ICgoY29kZSA+Pj4gNikgJiAweDNmKSkgPDwgU0hJRlRbaSsrICYgM107XG4gICAgICAgICAgICBibG9ja3NbaSA+Pj4gMl0gfD0gKDB4ODAgfCAoY29kZSAmIDB4M2YpKSA8PCBTSElGVFtpKysgJiAzXTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgdGhpcy5sYXN0Qnl0ZUluZGV4ID0gaTtcbiAgICAgIHRoaXMuYnl0ZXMgKz0gaSAtIHRoaXMuc3RhcnQ7XG4gICAgICBpZiAoaSA+PSA2NCkge1xuICAgICAgICB0aGlzLmJsb2NrID0gYmxvY2tzWzE2XTtcbiAgICAgICAgdGhpcy5zdGFydCA9IGkgLSA2NDtcbiAgICAgICAgdGhpcy5oYXNoKCk7XG4gICAgICAgIHRoaXMuaGFzaGVkID0gdHJ1ZTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuc3RhcnQgPSBpO1xuICAgICAgfVxuICAgIH1cbiAgICBpZiAodGhpcy5ieXRlcyA+IDQyOTQ5NjcyOTUpIHtcbiAgICAgIHRoaXMuaEJ5dGVzICs9IHRoaXMuYnl0ZXMgLyA0Mjk0OTY3Mjk2IDw8IDA7XG4gICAgICB0aGlzLmJ5dGVzID0gdGhpcy5ieXRlcyAlIDQyOTQ5NjcyOTY7XG4gICAgfVxuICAgIHJldHVybiB0aGlzO1xuICB9O1xuXG4gIFNoYTI1Ni5wcm90b3R5cGUuZmluYWxpemUgPSBmdW5jdGlvbiAoKSB7XG4gICAgaWYgKHRoaXMuZmluYWxpemVkKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRoaXMuZmluYWxpemVkID0gdHJ1ZTtcbiAgICB2YXIgYmxvY2tzID0gdGhpcy5ibG9ja3MsIGkgPSB0aGlzLmxhc3RCeXRlSW5kZXg7XG4gICAgYmxvY2tzWzE2XSA9IHRoaXMuYmxvY2s7XG4gICAgYmxvY2tzW2kgPj4+IDJdIHw9IEVYVFJBW2kgJiAzXTtcbiAgICB0aGlzLmJsb2NrID0gYmxvY2tzWzE2XTtcbiAgICBpZiAoaSA+PSA1Nikge1xuICAgICAgaWYgKCF0aGlzLmhhc2hlZCkge1xuICAgICAgICB0aGlzLmhhc2goKTtcbiAgICAgIH1cbiAgICAgIGJsb2Nrc1swXSA9IHRoaXMuYmxvY2s7XG4gICAgICBibG9ja3NbMTZdID0gYmxvY2tzWzFdID0gYmxvY2tzWzJdID0gYmxvY2tzWzNdID1cbiAgICAgICAgYmxvY2tzWzRdID0gYmxvY2tzWzVdID0gYmxvY2tzWzZdID0gYmxvY2tzWzddID1cbiAgICAgICAgYmxvY2tzWzhdID0gYmxvY2tzWzldID0gYmxvY2tzWzEwXSA9IGJsb2Nrc1sxMV0gPVxuICAgICAgICBibG9ja3NbMTJdID0gYmxvY2tzWzEzXSA9IGJsb2Nrc1sxNF0gPSBibG9ja3NbMTVdID0gMDtcbiAgICB9XG4gICAgYmxvY2tzWzE0XSA9IHRoaXMuaEJ5dGVzIDw8IDMgfCB0aGlzLmJ5dGVzID4+PiAyOTtcbiAgICBibG9ja3NbMTVdID0gdGhpcy5ieXRlcyA8PCAzO1xuICAgIHRoaXMuaGFzaCgpO1xuICB9O1xuXG4gIFNoYTI1Ni5wcm90b3R5cGUuaGFzaCA9IGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgYSA9IHRoaXMuaDAsIGIgPSB0aGlzLmgxLCBjID0gdGhpcy5oMiwgZCA9IHRoaXMuaDMsIGUgPSB0aGlzLmg0LCBmID0gdGhpcy5oNSwgZyA9IHRoaXMuaDYsXG4gICAgICBoID0gdGhpcy5oNywgYmxvY2tzID0gdGhpcy5ibG9ja3MsIGosIHMwLCBzMSwgbWFqLCB0MSwgdDIsIGNoLCBhYiwgZGEsIGNkLCBiYztcblxuICAgIGZvciAoaiA9IDE2OyBqIDwgNjQ7ICsraikge1xuICAgICAgLy8gcmlnaHRyb3RhdGVcbiAgICAgIHQxID0gYmxvY2tzW2ogLSAxNV07XG4gICAgICBzMCA9ICgodDEgPj4+IDcpIHwgKHQxIDw8IDI1KSkgXiAoKHQxID4+PiAxOCkgfCAodDEgPDwgMTQpKSBeICh0MSA+Pj4gMyk7XG4gICAgICB0MSA9IGJsb2Nrc1tqIC0gMl07XG4gICAgICBzMSA9ICgodDEgPj4+IDE3KSB8ICh0MSA8PCAxNSkpIF4gKCh0MSA+Pj4gMTkpIHwgKHQxIDw8IDEzKSkgXiAodDEgPj4+IDEwKTtcbiAgICAgIGJsb2Nrc1tqXSA9IGJsb2Nrc1tqIC0gMTZdICsgczAgKyBibG9ja3NbaiAtIDddICsgczEgPDwgMDtcbiAgICB9XG5cbiAgICBiYyA9IGIgJiBjO1xuICAgIGZvciAoaiA9IDA7IGogPCA2NDsgaiArPSA0KSB7XG4gICAgICBpZiAodGhpcy5maXJzdCkge1xuICAgICAgICBpZiAodGhpcy5pczIyNCkge1xuICAgICAgICAgIGFiID0gMzAwMDMyO1xuICAgICAgICAgIHQxID0gYmxvY2tzWzBdIC0gMTQxMzI1NzgxOTtcbiAgICAgICAgICBoID0gdDEgLSAxNTAwNTQ1OTkgPDwgMDtcbiAgICAgICAgICBkID0gdDEgKyAyNDE3NzA3NyA8PCAwO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGFiID0gNzA0NzUxMTA5O1xuICAgICAgICAgIHQxID0gYmxvY2tzWzBdIC0gMjEwMjQ0MjQ4O1xuICAgICAgICAgIGggPSB0MSAtIDE1MjE0ODY1MzQgPDwgMDtcbiAgICAgICAgICBkID0gdDEgKyAxNDM2OTQ1NjUgPDwgMDtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmZpcnN0ID0gZmFsc2U7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBzMCA9ICgoYSA+Pj4gMikgfCAoYSA8PCAzMCkpIF4gKChhID4+PiAxMykgfCAoYSA8PCAxOSkpIF4gKChhID4+PiAyMikgfCAoYSA8PCAxMCkpO1xuICAgICAgICBzMSA9ICgoZSA+Pj4gNikgfCAoZSA8PCAyNikpIF4gKChlID4+PiAxMSkgfCAoZSA8PCAyMSkpIF4gKChlID4+PiAyNSkgfCAoZSA8PCA3KSk7XG4gICAgICAgIGFiID0gYSAmIGI7XG4gICAgICAgIG1haiA9IGFiIF4gKGEgJiBjKSBeIGJjO1xuICAgICAgICBjaCA9IChlICYgZikgXiAofmUgJiBnKTtcbiAgICAgICAgdDEgPSBoICsgczEgKyBjaCArIEtbal0gKyBibG9ja3Nbal07XG4gICAgICAgIHQyID0gczAgKyBtYWo7XG4gICAgICAgIGggPSBkICsgdDEgPDwgMDtcbiAgICAgICAgZCA9IHQxICsgdDIgPDwgMDtcbiAgICAgIH1cbiAgICAgIHMwID0gKChkID4+PiAyKSB8IChkIDw8IDMwKSkgXiAoKGQgPj4+IDEzKSB8IChkIDw8IDE5KSkgXiAoKGQgPj4+IDIyKSB8IChkIDw8IDEwKSk7XG4gICAgICBzMSA9ICgoaCA+Pj4gNikgfCAoaCA8PCAyNikpIF4gKChoID4+PiAxMSkgfCAoaCA8PCAyMSkpIF4gKChoID4+PiAyNSkgfCAoaCA8PCA3KSk7XG4gICAgICBkYSA9IGQgJiBhO1xuICAgICAgbWFqID0gZGEgXiAoZCAmIGIpIF4gYWI7XG4gICAgICBjaCA9IChoICYgZSkgXiAofmggJiBmKTtcbiAgICAgIHQxID0gZyArIHMxICsgY2ggKyBLW2ogKyAxXSArIGJsb2Nrc1tqICsgMV07XG4gICAgICB0MiA9IHMwICsgbWFqO1xuICAgICAgZyA9IGMgKyB0MSA8PCAwO1xuICAgICAgYyA9IHQxICsgdDIgPDwgMDtcbiAgICAgIHMwID0gKChjID4+PiAyKSB8IChjIDw8IDMwKSkgXiAoKGMgPj4+IDEzKSB8IChjIDw8IDE5KSkgXiAoKGMgPj4+IDIyKSB8IChjIDw8IDEwKSk7XG4gICAgICBzMSA9ICgoZyA+Pj4gNikgfCAoZyA8PCAyNikpIF4gKChnID4+PiAxMSkgfCAoZyA8PCAyMSkpIF4gKChnID4+PiAyNSkgfCAoZyA8PCA3KSk7XG4gICAgICBjZCA9IGMgJiBkO1xuICAgICAgbWFqID0gY2QgXiAoYyAmIGEpIF4gZGE7XG4gICAgICBjaCA9IChnICYgaCkgXiAofmcgJiBlKTtcbiAgICAgIHQxID0gZiArIHMxICsgY2ggKyBLW2ogKyAyXSArIGJsb2Nrc1tqICsgMl07XG4gICAgICB0MiA9IHMwICsgbWFqO1xuICAgICAgZiA9IGIgKyB0MSA8PCAwO1xuICAgICAgYiA9IHQxICsgdDIgPDwgMDtcbiAgICAgIHMwID0gKChiID4+PiAyKSB8IChiIDw8IDMwKSkgXiAoKGIgPj4+IDEzKSB8IChiIDw8IDE5KSkgXiAoKGIgPj4+IDIyKSB8IChiIDw8IDEwKSk7XG4gICAgICBzMSA9ICgoZiA+Pj4gNikgfCAoZiA8PCAyNikpIF4gKChmID4+PiAxMSkgfCAoZiA8PCAyMSkpIF4gKChmID4+PiAyNSkgfCAoZiA8PCA3KSk7XG4gICAgICBiYyA9IGIgJiBjO1xuICAgICAgbWFqID0gYmMgXiAoYiAmIGQpIF4gY2Q7XG4gICAgICBjaCA9IChmICYgZykgXiAofmYgJiBoKTtcbiAgICAgIHQxID0gZSArIHMxICsgY2ggKyBLW2ogKyAzXSArIGJsb2Nrc1tqICsgM107XG4gICAgICB0MiA9IHMwICsgbWFqO1xuICAgICAgZSA9IGEgKyB0MSA8PCAwO1xuICAgICAgYSA9IHQxICsgdDIgPDwgMDtcbiAgICAgIHRoaXMuY2hyb21lQnVnV29ya0Fyb3VuZCA9IHRydWU7XG4gICAgfVxuXG4gICAgdGhpcy5oMCA9IHRoaXMuaDAgKyBhIDw8IDA7XG4gICAgdGhpcy5oMSA9IHRoaXMuaDEgKyBiIDw8IDA7XG4gICAgdGhpcy5oMiA9IHRoaXMuaDIgKyBjIDw8IDA7XG4gICAgdGhpcy5oMyA9IHRoaXMuaDMgKyBkIDw8IDA7XG4gICAgdGhpcy5oNCA9IHRoaXMuaDQgKyBlIDw8IDA7XG4gICAgdGhpcy5oNSA9IHRoaXMuaDUgKyBmIDw8IDA7XG4gICAgdGhpcy5oNiA9IHRoaXMuaDYgKyBnIDw8IDA7XG4gICAgdGhpcy5oNyA9IHRoaXMuaDcgKyBoIDw8IDA7XG4gIH07XG5cbiAgU2hhMjU2LnByb3RvdHlwZS5oZXggPSBmdW5jdGlvbiAoKSB7XG4gICAgdGhpcy5maW5hbGl6ZSgpO1xuXG4gICAgdmFyIGgwID0gdGhpcy5oMCwgaDEgPSB0aGlzLmgxLCBoMiA9IHRoaXMuaDIsIGgzID0gdGhpcy5oMywgaDQgPSB0aGlzLmg0LCBoNSA9IHRoaXMuaDUsXG4gICAgICBoNiA9IHRoaXMuaDYsIGg3ID0gdGhpcy5oNztcblxuICAgIHZhciBoZXggPSBIRVhfQ0hBUlNbKGgwID4+PiAyOCkgJiAweDBGXSArIEhFWF9DSEFSU1soaDAgPj4+IDI0KSAmIDB4MEZdICtcbiAgICAgIEhFWF9DSEFSU1soaDAgPj4+IDIwKSAmIDB4MEZdICsgSEVYX0NIQVJTWyhoMCA+Pj4gMTYpICYgMHgwRl0gK1xuICAgICAgSEVYX0NIQVJTWyhoMCA+Pj4gMTIpICYgMHgwRl0gKyBIRVhfQ0hBUlNbKGgwID4+PiA4KSAmIDB4MEZdICtcbiAgICAgIEhFWF9DSEFSU1soaDAgPj4+IDQpICYgMHgwRl0gKyBIRVhfQ0hBUlNbaDAgJiAweDBGXSArXG4gICAgICBIRVhfQ0hBUlNbKGgxID4+PiAyOCkgJiAweDBGXSArIEhFWF9DSEFSU1soaDEgPj4+IDI0KSAmIDB4MEZdICtcbiAgICAgIEhFWF9DSEFSU1soaDEgPj4+IDIwKSAmIDB4MEZdICsgSEVYX0NIQVJTWyhoMSA+Pj4gMTYpICYgMHgwRl0gK1xuICAgICAgSEVYX0NIQVJTWyhoMSA+Pj4gMTIpICYgMHgwRl0gKyBIRVhfQ0hBUlNbKGgxID4+PiA4KSAmIDB4MEZdICtcbiAgICAgIEhFWF9DSEFSU1soaDEgPj4+IDQpICYgMHgwRl0gKyBIRVhfQ0hBUlNbaDEgJiAweDBGXSArXG4gICAgICBIRVhfQ0hBUlNbKGgyID4+PiAyOCkgJiAweDBGXSArIEhFWF9DSEFSU1soaDIgPj4+IDI0KSAmIDB4MEZdICtcbiAgICAgIEhFWF9DSEFSU1soaDIgPj4+IDIwKSAmIDB4MEZdICsgSEVYX0NIQVJTWyhoMiA+Pj4gMTYpICYgMHgwRl0gK1xuICAgICAgSEVYX0NIQVJTWyhoMiA+Pj4gMTIpICYgMHgwRl0gKyBIRVhfQ0hBUlNbKGgyID4+PiA4KSAmIDB4MEZdICtcbiAgICAgIEhFWF9DSEFSU1soaDIgPj4+IDQpICYgMHgwRl0gKyBIRVhfQ0hBUlNbaDIgJiAweDBGXSArXG4gICAgICBIRVhfQ0hBUlNbKGgzID4+PiAyOCkgJiAweDBGXSArIEhFWF9DSEFSU1soaDMgPj4+IDI0KSAmIDB4MEZdICtcbiAgICAgIEhFWF9DSEFSU1soaDMgPj4+IDIwKSAmIDB4MEZdICsgSEVYX0NIQVJTWyhoMyA+Pj4gMTYpICYgMHgwRl0gK1xuICAgICAgSEVYX0NIQVJTWyhoMyA+Pj4gMTIpICYgMHgwRl0gKyBIRVhfQ0hBUlNbKGgzID4+PiA4KSAmIDB4MEZdICtcbiAgICAgIEhFWF9DSEFSU1soaDMgPj4+IDQpICYgMHgwRl0gKyBIRVhfQ0hBUlNbaDMgJiAweDBGXSArXG4gICAgICBIRVhfQ0hBUlNbKGg0ID4+PiAyOCkgJiAweDBGXSArIEhFWF9DSEFSU1soaDQgPj4+IDI0KSAmIDB4MEZdICtcbiAgICAgIEhFWF9DSEFSU1soaDQgPj4+IDIwKSAmIDB4MEZdICsgSEVYX0NIQVJTWyhoNCA+Pj4gMTYpICYgMHgwRl0gK1xuICAgICAgSEVYX0NIQVJTWyhoNCA+Pj4gMTIpICYgMHgwRl0gKyBIRVhfQ0hBUlNbKGg0ID4+PiA4KSAmIDB4MEZdICtcbiAgICAgIEhFWF9DSEFSU1soaDQgPj4+IDQpICYgMHgwRl0gKyBIRVhfQ0hBUlNbaDQgJiAweDBGXSArXG4gICAgICBIRVhfQ0hBUlNbKGg1ID4+PiAyOCkgJiAweDBGXSArIEhFWF9DSEFSU1soaDUgPj4+IDI0KSAmIDB4MEZdICtcbiAgICAgIEhFWF9DSEFSU1soaDUgPj4+IDIwKSAmIDB4MEZdICsgSEVYX0NIQVJTWyhoNSA+Pj4gMTYpICYgMHgwRl0gK1xuICAgICAgSEVYX0NIQVJTWyhoNSA+Pj4gMTIpICYgMHgwRl0gKyBIRVhfQ0hBUlNbKGg1ID4+PiA4KSAmIDB4MEZdICtcbiAgICAgIEhFWF9DSEFSU1soaDUgPj4+IDQpICYgMHgwRl0gKyBIRVhfQ0hBUlNbaDUgJiAweDBGXSArXG4gICAgICBIRVhfQ0hBUlNbKGg2ID4+PiAyOCkgJiAweDBGXSArIEhFWF9DSEFSU1soaDYgPj4+IDI0KSAmIDB4MEZdICtcbiAgICAgIEhFWF9DSEFSU1soaDYgPj4+IDIwKSAmIDB4MEZdICsgSEVYX0NIQVJTWyhoNiA+Pj4gMTYpICYgMHgwRl0gK1xuICAgICAgSEVYX0NIQVJTWyhoNiA+Pj4gMTIpICYgMHgwRl0gKyBIRVhfQ0hBUlNbKGg2ID4+PiA4KSAmIDB4MEZdICtcbiAgICAgIEhFWF9DSEFSU1soaDYgPj4+IDQpICYgMHgwRl0gKyBIRVhfQ0hBUlNbaDYgJiAweDBGXTtcbiAgICBpZiAoIXRoaXMuaXMyMjQpIHtcbiAgICAgIGhleCArPSBIRVhfQ0hBUlNbKGg3ID4+PiAyOCkgJiAweDBGXSArIEhFWF9DSEFSU1soaDcgPj4+IDI0KSAmIDB4MEZdICtcbiAgICAgICAgSEVYX0NIQVJTWyhoNyA+Pj4gMjApICYgMHgwRl0gKyBIRVhfQ0hBUlNbKGg3ID4+PiAxNikgJiAweDBGXSArXG4gICAgICAgIEhFWF9DSEFSU1soaDcgPj4+IDEyKSAmIDB4MEZdICsgSEVYX0NIQVJTWyhoNyA+Pj4gOCkgJiAweDBGXSArXG4gICAgICAgIEhFWF9DSEFSU1soaDcgPj4+IDQpICYgMHgwRl0gKyBIRVhfQ0hBUlNbaDcgJiAweDBGXTtcbiAgICB9XG4gICAgcmV0dXJuIGhleDtcbiAgfTtcblxuICBTaGEyNTYucHJvdG90eXBlLnRvU3RyaW5nID0gU2hhMjU2LnByb3RvdHlwZS5oZXg7XG5cbiAgU2hhMjU2LnByb3RvdHlwZS5kaWdlc3QgPSBmdW5jdGlvbiAoKSB7XG4gICAgdGhpcy5maW5hbGl6ZSgpO1xuXG4gICAgdmFyIGgwID0gdGhpcy5oMCwgaDEgPSB0aGlzLmgxLCBoMiA9IHRoaXMuaDIsIGgzID0gdGhpcy5oMywgaDQgPSB0aGlzLmg0LCBoNSA9IHRoaXMuaDUsXG4gICAgICBoNiA9IHRoaXMuaDYsIGg3ID0gdGhpcy5oNztcblxuICAgIHZhciBhcnIgPSBbXG4gICAgICAoaDAgPj4+IDI0KSAmIDB4RkYsIChoMCA+Pj4gMTYpICYgMHhGRiwgKGgwID4+PiA4KSAmIDB4RkYsIGgwICYgMHhGRixcbiAgICAgIChoMSA+Pj4gMjQpICYgMHhGRiwgKGgxID4+PiAxNikgJiAweEZGLCAoaDEgPj4+IDgpICYgMHhGRiwgaDEgJiAweEZGLFxuICAgICAgKGgyID4+PiAyNCkgJiAweEZGLCAoaDIgPj4+IDE2KSAmIDB4RkYsIChoMiA+Pj4gOCkgJiAweEZGLCBoMiAmIDB4RkYsXG4gICAgICAoaDMgPj4+IDI0KSAmIDB4RkYsIChoMyA+Pj4gMTYpICYgMHhGRiwgKGgzID4+PiA4KSAmIDB4RkYsIGgzICYgMHhGRixcbiAgICAgIChoNCA+Pj4gMjQpICYgMHhGRiwgKGg0ID4+PiAxNikgJiAweEZGLCAoaDQgPj4+IDgpICYgMHhGRiwgaDQgJiAweEZGLFxuICAgICAgKGg1ID4+PiAyNCkgJiAweEZGLCAoaDUgPj4+IDE2KSAmIDB4RkYsIChoNSA+Pj4gOCkgJiAweEZGLCBoNSAmIDB4RkYsXG4gICAgICAoaDYgPj4+IDI0KSAmIDB4RkYsIChoNiA+Pj4gMTYpICYgMHhGRiwgKGg2ID4+PiA4KSAmIDB4RkYsIGg2ICYgMHhGRlxuICAgIF07XG4gICAgaWYgKCF0aGlzLmlzMjI0KSB7XG4gICAgICBhcnIucHVzaCgoaDcgPj4+IDI0KSAmIDB4RkYsIChoNyA+Pj4gMTYpICYgMHhGRiwgKGg3ID4+PiA4KSAmIDB4RkYsIGg3ICYgMHhGRik7XG4gICAgfVxuICAgIHJldHVybiBhcnI7XG4gIH07XG5cbiAgU2hhMjU2LnByb3RvdHlwZS5hcnJheSA9IFNoYTI1Ni5wcm90b3R5cGUuZGlnZXN0O1xuXG4gIFNoYTI1Ni5wcm90b3R5cGUuYXJyYXlCdWZmZXIgPSBmdW5jdGlvbiAoKSB7XG4gICAgdGhpcy5maW5hbGl6ZSgpO1xuXG4gICAgdmFyIGJ1ZmZlciA9IG5ldyBBcnJheUJ1ZmZlcih0aGlzLmlzMjI0ID8gMjggOiAzMik7XG4gICAgdmFyIGRhdGFWaWV3ID0gbmV3IERhdGFWaWV3KGJ1ZmZlcik7XG4gICAgZGF0YVZpZXcuc2V0VWludDMyKDAsIHRoaXMuaDApO1xuICAgIGRhdGFWaWV3LnNldFVpbnQzMig0LCB0aGlzLmgxKTtcbiAgICBkYXRhVmlldy5zZXRVaW50MzIoOCwgdGhpcy5oMik7XG4gICAgZGF0YVZpZXcuc2V0VWludDMyKDEyLCB0aGlzLmgzKTtcbiAgICBkYXRhVmlldy5zZXRVaW50MzIoMTYsIHRoaXMuaDQpO1xuICAgIGRhdGFWaWV3LnNldFVpbnQzMigyMCwgdGhpcy5oNSk7XG4gICAgZGF0YVZpZXcuc2V0VWludDMyKDI0LCB0aGlzLmg2KTtcbiAgICBpZiAoIXRoaXMuaXMyMjQpIHtcbiAgICAgIGRhdGFWaWV3LnNldFVpbnQzMigyOCwgdGhpcy5oNyk7XG4gICAgfVxuICAgIHJldHVybiBidWZmZXI7XG4gIH07XG5cbiAgZnVuY3Rpb24gSG1hY1NoYTI1NihrZXksIGlzMjI0LCBzaGFyZWRNZW1vcnkpIHtcbiAgICB2YXIgaSwgdHlwZSA9IHR5cGVvZiBrZXk7XG4gICAgaWYgKHR5cGUgPT09ICdzdHJpbmcnKSB7XG4gICAgICB2YXIgYnl0ZXMgPSBbXSwgbGVuZ3RoID0ga2V5Lmxlbmd0aCwgaW5kZXggPSAwLCBjb2RlO1xuICAgICAgZm9yIChpID0gMDsgaSA8IGxlbmd0aDsgKytpKSB7XG4gICAgICAgIGNvZGUgPSBrZXkuY2hhckNvZGVBdChpKTtcbiAgICAgICAgaWYgKGNvZGUgPCAweDgwKSB7XG4gICAgICAgICAgYnl0ZXNbaW5kZXgrK10gPSBjb2RlO1xuICAgICAgICB9IGVsc2UgaWYgKGNvZGUgPCAweDgwMCkge1xuICAgICAgICAgIGJ5dGVzW2luZGV4KytdID0gKDB4YzAgfCAoY29kZSA+Pj4gNikpO1xuICAgICAgICAgIGJ5dGVzW2luZGV4KytdID0gKDB4ODAgfCAoY29kZSAmIDB4M2YpKTtcbiAgICAgICAgfSBlbHNlIGlmIChjb2RlIDwgMHhkODAwIHx8IGNvZGUgPj0gMHhlMDAwKSB7XG4gICAgICAgICAgYnl0ZXNbaW5kZXgrK10gPSAoMHhlMCB8IChjb2RlID4+PiAxMikpO1xuICAgICAgICAgIGJ5dGVzW2luZGV4KytdID0gKDB4ODAgfCAoKGNvZGUgPj4+IDYpICYgMHgzZikpO1xuICAgICAgICAgIGJ5dGVzW2luZGV4KytdID0gKDB4ODAgfCAoY29kZSAmIDB4M2YpKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBjb2RlID0gMHgxMDAwMCArICgoKGNvZGUgJiAweDNmZikgPDwgMTApIHwgKGtleS5jaGFyQ29kZUF0KCsraSkgJiAweDNmZikpO1xuICAgICAgICAgIGJ5dGVzW2luZGV4KytdID0gKDB4ZjAgfCAoY29kZSA+Pj4gMTgpKTtcbiAgICAgICAgICBieXRlc1tpbmRleCsrXSA9ICgweDgwIHwgKChjb2RlID4+PiAxMikgJiAweDNmKSk7XG4gICAgICAgICAgYnl0ZXNbaW5kZXgrK10gPSAoMHg4MCB8ICgoY29kZSA+Pj4gNikgJiAweDNmKSk7XG4gICAgICAgICAgYnl0ZXNbaW5kZXgrK10gPSAoMHg4MCB8IChjb2RlICYgMHgzZikpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBrZXkgPSBieXRlcztcbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKHR5cGUgPT09ICdvYmplY3QnKSB7XG4gICAgICAgIGlmIChrZXkgPT09IG51bGwpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoRVJST1IpO1xuICAgICAgICB9IGVsc2UgaWYgKEFSUkFZX0JVRkZFUiAmJiBrZXkuY29uc3RydWN0b3IgPT09IEFycmF5QnVmZmVyKSB7XG4gICAgICAgICAga2V5ID0gbmV3IFVpbnQ4QXJyYXkoa2V5KTtcbiAgICAgICAgfSBlbHNlIGlmICghQXJyYXkuaXNBcnJheShrZXkpKSB7XG4gICAgICAgICAgaWYgKCFBUlJBWV9CVUZGRVIgfHwgIUFycmF5QnVmZmVyLmlzVmlldyhrZXkpKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoRVJST1IpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKEVSUk9SKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoa2V5Lmxlbmd0aCA+IDY0KSB7XG4gICAgICBrZXkgPSAobmV3IFNoYTI1NihpczIyNCwgdHJ1ZSkpLnVwZGF0ZShrZXkpLmFycmF5KCk7XG4gICAgfVxuXG4gICAgdmFyIG9LZXlQYWQgPSBbXSwgaUtleVBhZCA9IFtdO1xuICAgIGZvciAoaSA9IDA7IGkgPCA2NDsgKytpKSB7XG4gICAgICB2YXIgYiA9IGtleVtpXSB8fCAwO1xuICAgICAgb0tleVBhZFtpXSA9IDB4NWMgXiBiO1xuICAgICAgaUtleVBhZFtpXSA9IDB4MzYgXiBiO1xuICAgIH1cblxuICAgIFNoYTI1Ni5jYWxsKHRoaXMsIGlzMjI0LCBzaGFyZWRNZW1vcnkpO1xuXG4gICAgdGhpcy51cGRhdGUoaUtleVBhZCk7XG4gICAgdGhpcy5vS2V5UGFkID0gb0tleVBhZDtcbiAgICB0aGlzLmlubmVyID0gdHJ1ZTtcbiAgICB0aGlzLnNoYXJlZE1lbW9yeSA9IHNoYXJlZE1lbW9yeTtcbiAgfVxuICBIbWFjU2hhMjU2LnByb3RvdHlwZSA9IG5ldyBTaGEyNTYoKTtcblxuICBIbWFjU2hhMjU2LnByb3RvdHlwZS5maW5hbGl6ZSA9IGZ1bmN0aW9uICgpIHtcbiAgICBTaGEyNTYucHJvdG90eXBlLmZpbmFsaXplLmNhbGwodGhpcyk7XG4gICAgaWYgKHRoaXMuaW5uZXIpIHtcbiAgICAgIHRoaXMuaW5uZXIgPSBmYWxzZTtcbiAgICAgIHZhciBpbm5lckhhc2ggPSB0aGlzLmFycmF5KCk7XG4gICAgICBTaGEyNTYuY2FsbCh0aGlzLCB0aGlzLmlzMjI0LCB0aGlzLnNoYXJlZE1lbW9yeSk7XG4gICAgICB0aGlzLnVwZGF0ZSh0aGlzLm9LZXlQYWQpO1xuICAgICAgdGhpcy51cGRhdGUoaW5uZXJIYXNoKTtcbiAgICAgIFNoYTI1Ni5wcm90b3R5cGUuZmluYWxpemUuY2FsbCh0aGlzKTtcbiAgICB9XG4gIH07XG5cbiAgdmFyIGV4cG9ydHMgPSBjcmVhdGVNZXRob2QoKTtcbiAgZXhwb3J0cy5zaGEyNTYgPSBleHBvcnRzO1xuICBleHBvcnRzLnNoYTIyNCA9IGNyZWF0ZU1ldGhvZCh0cnVlKTtcbiAgZXhwb3J0cy5zaGEyNTYuaG1hYyA9IGNyZWF0ZUhtYWNNZXRob2QoKTtcbiAgZXhwb3J0cy5zaGEyMjQuaG1hYyA9IGNyZWF0ZUhtYWNNZXRob2QodHJ1ZSk7XG5cbiAgaWYgKENPTU1PTl9KUykge1xuICAgIG1vZHVsZS5leHBvcnRzID0gZXhwb3J0cztcbiAgfSBlbHNlIHtcbiAgICByb290LnNoYTI1NiA9IGV4cG9ydHMuc2hhMjU2O1xuICAgIHJvb3Quc2hhMjI0ID0gZXhwb3J0cy5zaGEyMjQ7XG4gICAgaWYgKEFNRCkge1xuICAgICAgZGVmaW5lKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIGV4cG9ydHM7XG4gICAgICB9KTtcbiAgICB9XG4gIH1cbn0pKCk7XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///71312\n")},71511:(I,g,t)=>{"use strict";I.exports=t.p+"5eb94d86088944fbd9e9.png"},71793:(module,__webpack_exports__,__webpack_require__)=>{"use strict";eval('__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ Accordion: () => (/* binding */ U_),\n/* harmony export */ ActionBar: () => (/* binding */ JD),\n/* harmony export */ ActionButton: () => (/* binding */ Y_),\n/* harmony export */ Alert: () => (/* binding */ G_),\n/* harmony export */ Avatar: () => (/* binding */ zr),\n/* harmony export */ Badge: () => (/* binding */ Ae),\n/* harmony export */ Breadcrumbs: () => (/* binding */ aH),\n/* harmony export */ Button: () => (/* binding */ B2),\n/* harmony export */ ButtonIcon: () => (/* binding */ X6),\n/* harmony export */ ButtonProcess: () => (/* binding */ Q_),\n/* harmony export */ Cell: () => (/* binding */ f4),\n/* harmony export */ Checkbox: () => (/* binding */ yt),\n/* harmony export */ ClientPicker: () => (/* binding */ db),\n/* harmony export */ Collapse: () => (/* binding */ h5),\n/* harmony export */ Comments: () => (/* binding */ Z_),\n/* harmony export */ ContextMenu: () => (/* binding */ j_),\n/* harmony export */ DataTable: () => (/* binding */ K_),\n/* harmony export */ DatePicker: () => (/* binding */ J_),\n/* harmony export */ Divider: () => (/* binding */ P2),\n/* harmony export */ DragAndDrop: () => (/* binding */ __),\n/* harmony export */ Dropdown: () => (/* binding */ it),\n/* harmony export */ DropdownSelect: () => (/* binding */ tt),\n/* harmony export */ EntityPicker: () => (/* binding */ gZ),\n/* harmony export */ FileStatusNode: () => (/* binding */ u$),\n/* harmony export */ FilterAmount: () => (/* binding */ Xl),\n/* harmony export */ FilterBoxAmount: () => (/* binding */ Yq),\n/* harmony export */ FilterBoxDateRange: () => (/* binding */ _B),\n/* harmony export */ FilterBoxSelect: () => (/* binding */ Gi),\n/* harmony export */ FilterBoxTextInput: () => (/* binding */ h8),\n/* harmony export */ FilterDateRange: () => (/* binding */ Dp),\n/* harmony export */ FilterSelect: () => (/* binding */ Gn),\n/* harmony export */ FilterTextInput: () => (/* binding */ Ia),\n/* harmony export */ Grid: () => (/* binding */ so),\n/* harmony export */ HeaderIcon: () => (/* binding */ Vo),\n/* harmony export */ HyperLink: () => (/* binding */ z$),\n/* harmony export */ Icon: () => (/* binding */ Z1),\n/* harmony export */ IconButton: () => (/* binding */ G2),\n/* harmony export */ IconDetailed: () => (/* binding */ Tb),\n/* harmony export */ Input: () => (/* binding */ Y2),\n/* harmony export */ InputIcon: () => (/* binding */ RL),\n/* harmony export */ InputLimit: () => (/* binding */ VL),\n/* harmony export */ InputUploader: () => (/* binding */ $_),\n/* harmony export */ IntertrustThemeProvider: () => (/* binding */ h$),\n/* harmony export */ List: () => (/* binding */ dt),\n/* harmony export */ Loader: () => (/* binding */ Tp),\n/* harmony export */ Logo: () => (/* binding */ ur),\n/* harmony export */ Menu: () => (/* binding */ kM),\n/* harmony export */ MenuItem: () => (/* binding */ TZ),\n/* harmony export */ Metabar: () => (/* binding */ e$),\n/* harmony export */ Metric: () => (/* binding */ t$),\n/* harmony export */ Modal: () => (/* binding */ CS),\n/* harmony export */ Navbar: () => (/* binding */ Mj),\n/* harmony export */ Overlay: () => (/* binding */ MS),\n/* harmony export */ OverlayPanel: () => (/* binding */ o$),\n/* harmony export */ PageHeader: () => (/* binding */ r$),\n/* harmony export */ PageLoader: () => (/* binding */ n$),\n/* harmony export */ PhoneInput: () => (/* binding */ i$),\n/* harmony export */ Portal: () => (/* binding */ Ll),\n/* harmony export */ ProgressBar: () => (/* binding */ C4),\n/* harmony export */ PushPanel: () => (/* binding */ a$),\n/* harmony export */ Radio: () => (/* binding */ An),\n/* harmony export */ RibbonImage: () => (/* binding */ s$),\n/* harmony export */ RiskIndicator: () => (/* binding */ o5),\n/* harmony export */ RoundedButton: () => (/* binding */ b3),\n/* harmony export */ ScrollBar: () => (/* binding */ j4),\n/* harmony export */ Search: () => (/* binding */ G4),\n/* harmony export */ SearchAutocomplete: () => (/* binding */ c$),\n/* harmony export */ Skeleton: () => (/* binding */ ie),\n/* harmony export */ Slider: () => (/* binding */ Vq),\n/* harmony export */ Spinner: () => (/* binding */ l$),\n/* harmony export */ StatusIndicator: () => (/* binding */ m4),\n/* harmony export */ StepBase: () => (/* binding */ IJ),\n/* harmony export */ Stepper: () => (/* binding */ p$),\n/* harmony export */ Switch: () => (/* binding */ MU),\n/* harmony export */ Table: () => (/* binding */ nU),\n/* harmony export */ TablePagination: () => (/* binding */ xP),\n/* harmony export */ TableTabs: () => (/* binding */ d$),\n/* harmony export */ Tabs: () => (/* binding */ GJ),\n/* harmony export */ TabsController: () => (/* binding */ Bj),\n/* harmony export */ TabsHorizontal: () => (/* binding */ XM),\n/* harmony export */ TabsVertical: () => (/* binding */ Up),\n/* harmony export */ Timeline: () => (/* binding */ A$),\n/* harmony export */ Toast: () => (/* binding */ b$),\n/* harmony export */ Toggle: () => (/* binding */ cU),\n/* harmony export */ Tooltip: () => (/* binding */ A3),\n/* harmony export */ Topbar: () => (/* binding */ M$),\n/* harmony export */ Typography: () => (/* binding */ nr),\n/* harmony export */ amountRangeFilter: () => (/* binding */ RP),\n/* harmony export */ dateRangeFilter: () => (/* binding */ WP),\n/* harmony export */ getMaxAndMinFromArray: () => (/* binding */ SP),\n/* harmony export */ reorderObjectArray: () => (/* binding */ BP),\n/* harmony export */ theme: () => (/* binding */ ro),\n/* harmony export */ transformToDropdownData: () => (/* binding */ fa),\n/* harmony export */ useOutsideClick: () => (/* binding */ U5),\n/* harmony export */ useToggle: () => (/* binding */ io)\n/* harmony export */ });\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(24002);\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var styled_components__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(36844);\n/* harmony import */ var styled_components__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(styled_components__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var react_dom__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(18036);\n/* harmony import */ var react_dom__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(react_dom__WEBPACK_IMPORTED_MODULE_2__);\n/* module decorator */ module = __webpack_require__.hmd(module);\n\n\n\n\n\nconst R2 = {\n white: "#FFFFFF",\n black: "#000000",\n red: "#FF0000",\n purple: "#831F82",\n blue: "#312783",\n green: "#009640",\n orange: "#F39200",\n pink: "#EC619F",\n cyan: "#009FE3",\n lime: "#BCCF00",\n cscBlue: "#003A5C",\n cscBlueDark: "#002940",\n cscHyperLinkBlue: "#075A92",\n //new\n dark: "#20202C",\n tableText: "#363641"\n}, lA = {\n cscBlack: "#222222"\n}, Nn = {\n scampi: "#C1BEDA",\n // blue75\n blueBell: "#C1BEDA",\n lavenderGrey: "#C1BEDA",\n lavender: "#C1BEDA",\n secondaryCscBlue: "#1E5879",\n // New\n fieldBlue: "#F0F4F7",\n fieldHoverBlue: "#EBEEF5",\n fieldBorder: "#e0e1e2",\n textGrey: "#7F7F7F",\n placeholerGrey: "#8F8F95",\n LavenderMist: "#E9E9EA"\n}, Ra = {\n info: "#1473E6",\n success: "#12805C",\n warning: "#B85C00",\n error: "#D7373F"\n}, al = {\n paua: "#1D174F",\n // darkBlue40\n parisM: "#4536B5"\n // darkBlue20\n}, sl = {\n eclipse: "#767676",\n //\n grey: "#767676",\n darkGray: "#767676",\n // black35\n pinkSwan: "#B2B2B2",\n // black30\n silver: "#CCCCCC",\n // black25\n veryLightGrey: "#CCCCCC",\n // black20\n gainsboro: "#C1BEDA",\n // black15 D9D9D9\n whisper: "#E5E5E5",\n // black10\n cscGrey100: "#EAEBEB",\n cscGrey200: "#D1D3D4",\n cscGrey500: "#97999B",\n cscGrey700: "#54585A",\n cscGrey600: "#6E7173",\n //new\n activeGrey: "#C0C8D9"\n}, Ba = {\n ghostWhite: "#F7F9FF",\n // blue5\n cyanBg: "#F2FAFE",\n selago: "#F9F4F9",\n // purple5\n pinkBg: "#FEF7FA",\n mintCream: "#F2FAF5",\n // green5\n limeBg: "#FCFDF2",\n whiteSmoke: "#F2F2F2",\n // black5 ------GREY COLOR\n snow: "#F2F2F2",\n //\n floralWhite: "#FFFBF3",\n // orangez\n chablis: "#FFF2F2",\n //red\n cscBlue: "#F7F9FF",\n cscBlueLighter: "#F0F4F7",\n intertrustOrange: "#F9C87F",\n //new\n cultured: "#F4F4F4",\n alabaster: "#FAFAFA",\n greyGoose: "#D2D2D5"\n}, pA = {\n redOrange: (e) => `linear-gradient(to ${e}, ${R2.red} 0%, ${R2.orange} 100%)`,\n purplePink: (e) => `linear-gradient(to ${e}, ${R2.purple} 0%, #B52BB3 100%)`,\n blueCyan: (e) => `linear-gradient(to ${e}, ${R2.blue} 0%, ${al.parisM} 100%)`,\n greenLime: (e) => `linear-gradient(to ${e}, ${Ra.success} 0%, #19B37F 100%)`,\n orangeCherokee: (e) => `linear-gradient(to ${e}, ${R2.orange} 0%, ${Ra.warning} 100%)`,\n pinkLavenderPink: (e) => `linear-gradient(to ${e}, ${R2.pink} 0%, ${R2.pink} 100%)`\n}, dA = {\n primary: {\n default: R2.cscBlue,\n hover: Nn.secondaryCscBlue,\n pressed: R2.cscBlueDark,\n focused: Nn.secondaryCscBlue,\n disabled: sl.cscGrey100\n },\n secondary: {\n default: "transparent"\n },\n tertiary: {\n default: R2.white,\n hover: R2.white,\n pressed: R2.white,\n focused: R2.white\n },\n link: {\n default: "transparent",\n hover: Ba.cscBlue,\n pressed: "transparent",\n focused: "transparent",\n disabled: "transparent"\n },\n floating: {\n default: R2.white,\n hover: Ba.ghostWhite,\n pressed: Nn.secondaryCscBlue\n }\n}, cl = {\n base: "Ubuntu, Helvetica, Arial",\n secondary: "Avenir Heavy",\n tertiary: "Avenir Heavy"\n}, bA = {\n t48: "48px",\n // 3rem\n t40: "40px",\n // 2.5rem\n t32: "32px",\n // 2rem\n t28: "28px",\n // 1.75rem\n t24: "24px",\n // 1.5rem\n t20: "20px",\n // 1.25rem\n t18: "18px",\n // 1.125rem\n t16: "16px",\n // 1rem\n t14: "14px",\n // 0.875rem\n t12: "12px",\n // 0.75rem\n t10: "10px",\n // 0.625rem\n t9: "9px",\n // 0.5625rem\n t8: "8px",\n // 0.5rem\n t7: "7px",\n // 0.4375rem\n t6: "6px"\n // 0.375rem\n}, MA = {\n lh56: "56px",\n // 3.5rem\n lh48: "48px",\n // 3rem\n lh40: "40px",\n // 2.5rem\n lh39: "39.2px",\n // 2.45rem\n lh36: "36px",\n // 2.25rem\n lh32: "32px",\n // 2rem\n lh28: "28px",\n // 1.75rem\n lh26: "26px",\n // 1.625rem\n lh25: "25.2px",\n //1.575rem\n lh24: "24px",\n // 1.5rem\n lh22: "22px",\n // 1.375rem\n lh20: "20px",\n // 1.25rem\n lh19: "19.6px",\n //1.225rem\n lh18: "18px",\n // 1.125rem\n lh17: "17px",\n // 1.0625rem\n lh16: "16px",\n // 1rem\n lh15: "15px",\n // 0.9375rem\n lh14: "14px",\n // 0.9375rem\n lh12: "12px"\n //0.75rem\n}, ll = {\n bold: 700,\n medium: 500,\n regular: 400,\n light: 300\n}, AA = {\n circle: "50%",\n xxl: "12px",\n // 0.75rem\n xl: "10px",\n // 0.625rem\n lg: "8px",\n // 0.5rem\n base: "4px",\n // 0.25rem\n sm: "2px"\n // 0.125rem\n}, en = "rgba(49, 39, 131, 0.05)", uA = {\n sm: `0 0.25rem 0.5rem ${en}`,\n md: `0 0.5rem 1rem ${en}`,\n lg: `0 1rem 1.5rem ${en}`,\n xl: `0 2rem 4rem ${en}`\n}, pl = {\n base: "cubic-bezier(0.29,.4,.17,.99)"\n}, dl = {\n base: `all 0.2s ${pl.base}`\n}, bl = {\n textOverflow: "ellipsis",\n overflow: "hidden",\n whiteSpace: "nowrap"\n}, Ml = {\n background: "transparent",\n fontFamily: cl.base,\n fontWeight: ll.regular,\n transition: dl.base,\n border: 0,\n outline: "none",\n cursor: "pointer",\n userSelect: "none"\n}, Al = {\n margin: 0,\n padding: 0,\n listStyle: "none"\n}, zA = {\n ellipsis: bl,\n buttonReset: Ml,\n listReset: Al\n}, hA = {\n buttonTextPrimary: "#FFFFFF",\n buttonTextPrimaryPressed: "#FFFFFF",\n buttonTextSecondaryDefault: "#312783",\n buttonTextSecondaryHover: "#FFFFFF",\n buttonTextSecondaryPressed: "#FFFFFF",\n buttonTextSecondaryFocused: "#FFFFFF",\n buttonTextTertiary: "#20202C",\n buttonTextlinkDefault: "#312783",\n buttonTextlinkHover: "#4536B5",\n buttonTextlinkPressed: "#1D174F"\n}, v2 = {\n ...R2,\n ...Nn,\n ...al,\n ...sl,\n ...lA,\n ...Ra,\n ...hA,\n gradients: pA,\n backgrounds: Ba,\n buttons: dA\n}, D3 = {\n sp48: "48px",\n // 3rem\n sp40: "40px",\n // 2.5rem\n sp32: "32px",\n // 2rem\n sp24: "24px",\n // 1.5rem\n sp16: "16px",\n // 1rem\n sp12: "12px",\n // 0.75rem\n sp8: "8px",\n // 0.5rem\n sp6: "6px",\n // 0.375rem\n sp4: "4px",\n // 0.25rem\n sp2: "2px"\n // 0.125rem\n}, OA = {\n xxxxs: "8px",\n // 0.5rem\n xxxs: "12px",\n //0.875rem\n xxs: "14px",\n //0.875rem\n xs: "16px",\n //1rem\n sm: "24px",\n //1.5rem\n md: "32px",\n //2rem\n lg: "40px",\n //2.5rem\n xl: "48px"\n //3rem\n}, fA = "2.5rem", gA = "32px", K2 = "16px", ul = (0,styled_components__WEBPACK_IMPORTED_MODULE_1__.keyframes)`\n 0% { opacity: 0; }\n 100% { opacity: 1; }\n`, CA = {\n fadeIn: ul\n}, Tn = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({\n __proto__: null,\n GLOBAL_ITEM_HEIGHT: fA,\n GLOBAL_ITEM_HEIGHT_CONDENSED: gA,\n GLOBAL_SKELETON_HEIGHT: K2,\n animations: CA,\n borderRadius: AA,\n buttonReset: Ml,\n colors: v2,\n cubicBezier: pl,\n ellipsis: bl,\n fadeIn: ul,\n fontFamily: cl,\n fontWeight: ll,\n itemSize: OA,\n lineHeight: MA,\n listReset: Al,\n mixins: zA,\n shadows: uA,\n spacings: D3,\n transitions: dl,\n typography: bA\n}, Symbol.toStringTag, { value: "Module" })), Po = {\n bgPrimary: "#FFFFFF",\n bgSecondary: "#F5F5F5",\n //new\n bgSecondaryAlt: "#F5F7F9",\n //new\n bgTertiary: "#003A5C",\n bgPressed: "#002940",\n bgReadOnly: "#BFCED6",\n bgSelected: "#C0DBE5",\n bgHoverPrimary: "#EBF6FD",\n bgHoverSecondary: "#1E5879",\n bgDisabledPrimary: "#EAEBEB",\n bgDisabledSecondary: "#A7A7A7",\n bgInformationalPrimary: "#42788F",\n bgInformationalSecondary: "#E2EFF2",\n bgSuccessPrimary: "#509E2F",\n bgSuccessSecondary: "#DDECD7",\n bgWarningPrimary: "#F2A900",\n bgWarningSecondary: "#F8EED7",\n bgErrorPrimary: "#D1344F",\n bgErrorSecondary: "#F8E1E5",\n bgTransparencyPrimary: "#222222",\n bgTransparencyHover: "#FFFFFF",\n bgTransparencyPressed: "#FFFFFF",\n blackOverlay: "#222222"\n}, mA = {\n borderPrimary: "#D1D3D4",\n borderSecondary: "#003A5C",\n borderPressed: "#002940",\n borderTertiary: "#EAEBEB",\n borderAlternative: "#F5F5F5",\n borderError: "#D1344F",\n borderFocused: "#42788F",\n borderHover: "#1E5879",\n borderDisabledOnbg: "#A7A7A7",\n borderReadonly: "#BFCED6",\n borderTransparent: "#FFFFFF"\n}, LA = {\n textPrimary: "#222222",\n textSecondary: "#003A5C",\n textTertiary: "#FFFFFF",\n //new\n textAlertTertiary: "#222222",\n //new\n textHover: "#217CB8",\n textPressed: "#002940",\n textHighemphasis: "#2D2D2D",\n textBody: "#393939",\n textMediumemphasis: "#54585A",\n textLowemphasis: "#6E7173",\n textDisabledOnbg: "#97999B",\n textDisabledNobg: "#D1D3D4",\n textError: "#D1344F",\n textSuccess: "#509E2F",\n textWarning: "#F2A900",\n textInformational: "#42788F",\n textHyperlink: "#075A92",\n //new\n textAlertError: "#222222",\n textAlertSuccess: "#222222",\n textAlertWarning: "#222222",\n textAlertInformational: "#222222",\n //new\n textReadonly: "#BFCED6",\n textDisabled: "#A7A7A7"\n}, vA = {\n // legendBgCyan: \'#009FE3\',\n // legendBgPurple: \'#831F82\',\n // legendBgPink: \'#EC619F\',\n // legendBgRed: \'#FF0000\',\n // legendBgOrange: \'#F39200\',\n // new\n legendBg1: "#003A5C",\n legendBg2: "#00B2A9",\n legendBg3: "#F2A900",\n legendBg4: "#97999B",\n legendBg5: "#42788F",\n legendBg6: "#F68D2E",\n legendBg7: "#509E2F",\n legendBg8: "#D1344F",\n legendBorder: "#FFFFFF"\n}, qA = {\n metricsBgHover: "#F5F7F9",\n metricsBgUp: "#509E2F",\n metricsBgDown: "#D1344F"\n}, Jt = {\n chartBubbleBgDefault: "#F2F5F7",\n // chartBgBlueActive: \'#312783\',\n // chartBgBlueInactive: \'#CBC9E0\',\n // chartPieBgCyanActive: \'#009FE3\',\n // chartPieBgCyanInactive: \'#BFE7F8\',\n // chartPieBgPurpleActive: \'#831F82\',\n // chartPieBgPurpleInactive: \'#E0C7E0\',\n // chartPieBgPinkActive: \'#EC619F\',\n // chartPieBgPinkInactive: \'#FAD7E7\',\n // chartPieBgGreenActive: \'#009640\',\n // chartPieBgGreenInactive: \'#BFE5CF\',\n // chartPieBgOrangeActive: \'#F39200\',\n // chartPieBgOrangeInactive: \'#FCE4BF\',\n // chartPieBgRedActive: \'#FF0000\',\n // chartPieBgRedInactive: \'#FFBFBF\',\n //new\n chartBgHover: "#F5F7F9",\n chartBg1Active: "#003A5C",\n chartBg1InActive: "#BFCED6",\n chartPieBg2Active: "#00B2A9",\n chartPieBg2InActive: "#BFECE9",\n chartPieBg3Active: "#F2A900",\n chartPieBg3InActive: "#FCE9BF",\n chartPieBg4Active: "#97999B",\n chartPieBg4InActive: "#E5E5E6",\n chartPieBg5Active: "#42788F",\n chartPieBg5InActive: "#EDF5F7",\n chartPieBg6Active: "#F68D2E",\n chartPieBg6InActive: "#FDE2CB",\n chartPieBg7Active: "#509E2F",\n chartPieBg7InActive: "#D3E7CB",\n chartPieBg8Active: "#D1344F",\n chartPieBg8InActive: "#F3CCD3"\n}, yA = {\n buttonBgPrimaryDefault: "#003A5C",\n buttonBgPrimaryHover: "#1E5879",\n buttonBgPrimaryPressed: "#002940",\n buttonBgSecondaryDefault: "#FFFFFF",\n buttonBgSecondaryHover: "#1E5879",\n buttonBgSecondaryPressed: "#002940",\n buttonBgTertiary: "#FFFFFF",\n buttonBgTertiaryHover: "#6E7173",\n buttonBgTertiaryPressed: "#222222",\n buttonBgTextlinkHover: "#EBF6FD"\n}, wA = {\n buttonBorderSecondaryDefault: "#003A5C",\n buttonBorderTertiaryDefault: "#D1D3D4",\n buttonBorderTertiaryHover: "#A7A7A7",\n buttonBorderTertiaryPressed: "#003453"\n}, xA = {\n buttonTextPrimary: "#FFFFFF",\n buttonTextPrimaryPressed: "#FFFFFF",\n buttonTextSecondaryDefault: "#003A5C",\n buttonTextSecondaryHover: "#FFFFFF",\n buttonTextSecondaryPressed: "#FFFFFF",\n buttonTextSecondaryFocused: "#FFFFFF",\n buttonTextTertiary: "#222222",\n buttonTextlinkDefault: "#003A5C",\n buttonTextlinkHover: "#1E5879",\n buttonTextlinkPressed: "#002940"\n}, WA = {\n topBarBgPrimary: "#003A5C",\n topBarBgSecondary: "#FFFFFF",\n topBarBgTertiary: "#FFFFFF",\n topBarTextPrimary: "#FFFFFF",\n topBarTextSecondary: "#003A5C"\n}, RA = {\n fieldBgDefault: "#F5F7F9",\n fieldBgHover: "#EBF6FD",\n fieldTextPlaceholder: "#97999B",\n fieldTextSupport: "#BDBDBD",\n fieldBorderActive: "#D1D3D4"\n}, BA = {\n tabIndicator: "#00B2A9",\n //new\n tabBorder: "#F5F5F5"\n}, SA = {\n actionButtonBgHoverDropdown: "#FBFBFB",\n actionButtonBgPressedDropdown: "#C0DBE5",\n actionButtonBgPressedButton: "#C0DBE5",\n actionButtonBgHoverButton: "#EBF6FD"\n}, EA = {\n filterboxButtonBorderHover: "#BDBDBD",\n filterboxButtonBorderDefault: "#EAEBEB"\n}, kA = {\n filterboxButtonBg: "#FFFFFF",\n filterboxBg: "#FFFFFF"\n}, NA = {\n toggleBgInactiveDefault: "#EAEBEB",\n switchTextReadonlyActive: "#FFFFFF"\n}, TA = {\n dataTableBgPrimary: "#FFFFFF",\n dataTableBgHeader: "#F5F7F9",\n dataTableBgFilter: "#FFFFFF",\n dataTableBgSecondary: "#F8E1E5",\n dataTableBgTertiary: "#F8EED7",\n dataTableBgTotal: "#FBFBFB",\n dataTableBorderHeader: "#D1D3D4",\n dataTableBorderCell: "#F5F5F5",\n dataTableScrollArrow: "#97999B",\n dataTableScrollBgPressedArrow: "#EAEBEB",\n dataTableLoaderBg: "#EDF3F7",\n dataTableLoaderGradient: "#FCFDFF"\n}, IA = {\n scrollBgDefault: "#D1D3D4",\n scrollBgHover: "#A7A7A7",\n scrollBgPressed: "#6E7173",\n scrollBgPrimary: "#F5F5F5"\n}, DA = {\n sliderBgDefault: "#EAEBEB"\n}, HA = {\n listTextLowemphasis: "#6E7173"\n}, VA = {\n calendarBlockBgDisabled: "#FBFBFB"\n}, PA = {\n redOrange: (e) => `linear-gradient(to ${e}, ${Jt.chartPieBg7Active} 0%, ${Jt.chartPieBg6Active} 100%)`,\n purplePink: (e) => `linear-gradient(to ${e}, ${Jt.chartPieBg3Active} 0%, #B52BB3 100%)`,\n blueCyan: (e) => `linear-gradient(to ${e}, ${Po.bgTertiary} 0%, ${Po.bgHoverSecondary} 100%)`,\n greenLime: (e) => `linear-gradient(to ${e}, ${Po.bgSuccessPrimary} 0%, #19B37F 100%)`,\n orangeCherokee: (e) => `linear-gradient(to ${e}, ${Jt.chartPieBg6Active} 0%, ${Po.bgWarningPrimary} 100%)`,\n pinkLavenderPink: (e) => `linear-gradient(to ${e}, ${Jt.chartPieBg4Active} 0%, ${Jt.chartPieBg4Active} 100%)`\n}, rr = {\n border: mA,\n textIcon: LA,\n list: HA,\n buttonBackgound: yA,\n buttonBorder: wA,\n topBar: WA,\n field: RA,\n tab: BA,\n actionButton: SA,\n filterboxBorder: EA,\n filterboxBackground: kA,\n toggleSwitch: NA,\n dataTable: TA,\n scroll: IA,\n slider: DA,\n dataVisualizationLegend: vA,\n dataVisualizationMetrics: qA,\n dataVisualizationChart: Jt,\n calendar: VA,\n gradients: PA,\n backgrounds: Po,\n buttonText: xA\n};\n(0,styled_components__WEBPACK_IMPORTED_MODULE_1__.keyframes)`\n 0% { opacity: 0; }\n 100% { opacity: 1; }\n`;\nconst Fo = {\n bgPrimary: "#272733",\n bgSecondary: "#21202B",\n bgTertiary: "#68A3BB",\n bgPressed: "#68A3BB",\n bgReadOnly: "#1A1A39",\n bgSelected: "#413E5C",\n bgHoverPrimary: "#30303D",\n bgHoverSecondary: "#68A3BB",\n bgDisabledPrimary: "#4B4B5C",\n bgDisabledSecondary: "#626275",\n bgInformationalPrimary: "#5BB5FF",\n bgInformationalSecondary: "#182226",\n bgSuccessPrimary: "#2FC294",\n bgSuccessSecondary: "#1A241F",\n bgWarningPrimary: "#E08B4F",\n bgWarningSecondary: "#26221C",\n bgErrorPrimary: "#FB666D",\n bgErrorSecondary: "#29181A",\n bgTransparencyPrimary: "#76768A",\n bgTransparencyHover: "#272733",\n bgTransparencyPressed: "#393947",\n blackOverlay: "#20202C"\n}, FA = {\n borderPrimary: "#393947",\n borderSecondary: "#68A3BB",\n borderPressed: "#68A3BB",\n borderTertiary: "#393947",\n borderAlternative: "#272733",\n borderError: "#FB666D",\n borderFocused: "#5BB5FF",\n borderHover: "#68A3BB",\n borderDisabledOnbg: "#76768A",\n borderReadonly: "#1A1A39",\n borderTransparent: "#FFFFFF"\n}, XA = {\n textPrimary: "#FFFFFF",\n textSecondary: "#68A3BB",\n textTertiary: "#20202C",\n textHover: "#68A3BB",\n textPressed: "#68A3BB",\n textHighemphasis: "#F0F0F5",\n textBody: "#D8D8E5",\n textMediumemphasis: "#D8D8E5",\n textLowemphasis: "#BCBCCC",\n textDisabledOnbg: "#76768A",\n textDisabledNobg: "#626275",\n textError: "#FB666D",\n textSuccess: "#2FC294",\n textWarning: "#E08B4F",\n textInformational: "#5BB5FF",\n textReadonly: "#1A1A39",\n textDisabled: "#A6A6AB"\n}, UA = {\n // legendBgCyan: \'#009FE3\',\n // legendBgPurple: \'#831F82\',\n // legendBgPink: \'#EC619F\',\n // legendBgRed: \'#FF0000\',\n // legendBgOrange: \'#F39200\',\n // new\n legendBg1: "#68A3BB",\n legendBg2: "#B3E8E5",\n legendBg3: "#F8DA7F",\n legendBg4: "#75D98F",\n legendBg5: "#FDCC8A",\n legendBg6: "#F492A4",\n legendBg8: "#75D98F",\n legendBorder: "#F0F0F5"\n}, YA = {\n metricsBgHover: "#323045",\n metricsBgUp: "#75D98F",\n metricsBgDown: "#F492A4"\n}, _t = {\n chartBubbleBgDefault: "#21202B",\n // chartBgBlueActive: \'#312783\',\n // chartBgBlueInactive: \'#CBC9E0\',\n // chartPieBgCyanActive: \'#009FE3\',\n // chartPieBgCyanInactive: \'#BFE7F8\',\n // chartPieBgPurpleActive: \'#831F82\',\n // chartPieBgPurpleInactive: \'#E0C7E0\',\n // chartPieBgPinkActive: \'#EC619F\',\n // chartPieBgPinkInactive: \'#FAD7E7\',\n // chartPieBgGreenActive: \'#009640\',\n // chartPieBgGreenInactive: \'#BFE5CF\',\n // chartPieBgOrangeActive: \'#F39200\',\n // chartPieBgOrangeInactive: \'#FCE4BF\',\n // chartPieBgRedActive: \'#FF0000\',\n // chartPieBgRedInactive: \'#FFBFBF\',\n //new\n chartBgHover: "#21202B",\n chartBg1Active: "#68A3BB",\n chartBg1InActive: "#003453",\n chartPieBg2Active: "#B3E8E5",\n chartPieBg2InActive: "#004744",\n chartPieBg3Active: "#F8DA7F",\n chartPieBg3InActive: "#493300",\n chartPieBg4Active: "#75D98F",\n chartPieBg4InActive: "#23462D",\n chartPieBg5Active: "#FDCC8A",\n chartPieBg5InActive: "#59411C",\n chartPieBg6Active: "#F492A4",\n chartPieBg6InActive: "#561C1B",\n chartPieBg7Active: "#E5FA6F",\n chartPieBg7InActive: "#464D26"\n}, GA = {\n buttonBgPrimaryDefault: "#68A3BB",\n buttonBgPrimaryHover: "#8BD3E2",\n buttonBgPrimaryPressed: "#769ABB",\n buttonBgSecondaryDefault: "#323045",\n buttonBgSecondaryHover: "#8BD3E2",\n buttonBgSecondaryPressed: "#769ABB",\n buttonBgTertiary: "#323045",\n //new\n buttonBgTertiaryHover: "#323045",\n buttonBgTertiaryPressed: "#323045",\n //new\n buttonBgTextlinkHover: "#413E5C"\n}, QA = {\n buttonBorderSecondaryDefault: "#68A3BB",\n buttonBorderTertiaryDefault: "#76768A",\n buttonBorderTertiaryHover: "#BCBCCC",\n buttonBorderTertiaryPressed: "#769ABB"\n}, ZA = {\n buttonTextPrimary: "#20202C",\n buttonTextPrimaryPressed: "#20202C",\n buttonTextSecondaryDefault: "#68A3BB",\n buttonTextSecondaryHover: "#20202C",\n buttonTextSecondaryPressed: "#20202C",\n buttonTextSecondaryFocused: "#20202C",\n buttonTextTertiary: "#FFFFFF",\n buttonTextlinkDefault: "#68A3BB",\n buttonTextlinkHover: "#8BD3E2",\n buttonTextlinkPressed: "#769ABB"\n}, jA = {\n topBarBgPrimary: "#30303D",\n topBarBgSecondary: "#272733",\n topBarBgTertiary: "#FFFFFF",\n topBarTextPrimary: "#FFFFFF",\n topBarTextSecondary: "#30303D"\n}, KA = {\n fieldBgDefault: "#323045",\n fieldBgHover: "#413E5C",\n fieldTextPlaceholder: "#76768A",\n fieldTextSupport: "#4B4B5C",\n fieldBorderActive: "#393947"\n}, JA = {\n tabIndicator: "#B3E8E5",\n //new\n tabBorder: "#30303D"\n}, _A = {\n actionButtonBgHoverDropdown: "#1F1F29",\n actionButtonBgPressedDropdown: "#626275",\n actionButtonBgPressedButton: "#626275",\n actionButtonBgHoverButton: "#393947"\n}, $A = {\n filterboxButtonBorderHover: "#4B4B5C",\n filterboxButtonBorderDefault: "#393947"\n}, eu = {\n filterboxButtonBg: "#323045",\n filterboxBg: "#272733"\n}, tu = {\n toggleBgInactiveDefault: "#1F1F29",\n switchTextReadonlyActive: "#BCBCCC"\n}, ou = {\n dataTableBgPrimary: "#272733",\n dataTableBgHeader: "#323045",\n dataTableBgFilter: "#272733",\n dataTableBgSecondary: "#751D1C",\n dataTableBgTertiary: "#79551D",\n dataTableBgTotal: "#1F1F29",\n dataTableBorderHeader: "#393947",\n dataTableBorderCell: "#393947",\n dataTableScrollArrow: "#8B8B9E",\n dataTableScrollBgPressedArrow: "#76768A",\n dataTableLoaderBg: "#323045",\n dataTableLoaderGradient: "#413E5C"\n}, ru = {\n scrollBgDefault: "#393947",\n scrollBgHover: "#626275",\n scrollBgPressed: "#8B8B9E",\n scrollBgPrimary: "#1F1F29"\n}, nu = {\n sliderBgDefault: "#30303D"\n}, iu = {\n listTextLowemphasis: "#D8D8E5"\n}, au = {\n calendarBlockBgDisabled: "#272733"\n}, su = {\n redOrange: (e) => `linear-gradient(to ${e}, ${_t.chartPieBg7Active} 0%, ${_t.chartPieBg6Active} 100%)`,\n purplePink: (e) => `linear-gradient(to ${e}, ${_t.chartPieBg3Active} 0%, #B52BB3 100%)`,\n blueCyan: (e) => `linear-gradient(to ${e}, ${Fo.bgTertiary} 0%, ${Fo.bgHoverSecondary} 100%)`,\n greenLime: (e) => `linear-gradient(to ${e}, ${Fo.bgSuccessPrimary} 0%, #19B37F 100%)`,\n orangeCherokee: (e) => `linear-gradient(to ${e}, ${_t.chartPieBg6Active} 0%, ${Fo.bgWarningPrimary} 100%)`,\n pinkLavenderPink: (e) => `linear-gradient(to ${e}, ${_t.chartPieBg4Active} 0%, ${_t.chartPieBg4Active} 100%)`\n}, o4 = {\n border: FA,\n textIcon: XA,\n buttonBackgound: GA,\n buttonBorder: QA,\n topBar: jA,\n field: KA,\n tab: JA,\n actionButton: _A,\n filterboxBorder: $A,\n filterboxBackground: eu,\n toggleSwitch: tu,\n dataTable: ou,\n scroll: ru,\n slider: nu,\n dataVisualizationLegend: UA,\n dataVisualizationMetrics: YA,\n dataVisualizationChart: _t,\n list: iu,\n calendar: au,\n gradients: su,\n backgrounds: Fo,\n buttonText: ZA\n};\n(0,styled_components__WEBPACK_IMPORTED_MODULE_1__.keyframes)`\n 0% { opacity: 0; }\n 100% { opacity: 1; }\n`;\nconst ro = () => {\n const [e, t] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)("cscBlueLight");\n return (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => {\n let n = localStorage.getItem("UIKit:ThemeValue");\n n && t(n);\n }, [localStorage.getItem("UIKit:ThemeValue")]), (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)(() => {\n let n = {\n ...Tn,\n colors: {\n ...v2,\n ...rr,\n backgrounds: {\n ...v2.backgrounds,\n ...rr.backgrounds\n }\n }\n }, r = {\n ...Tn,\n colors: {\n ...v2,\n ...o4,\n backgrounds: {\n ...v2.backgrounds,\n ...o4.backgrounds\n }\n }\n }, i = n;\n return e == "cscBlueLight" ? i = n : e == "cscBlueDark" ? i = r : {\n ...Tn,\n ...i\n };\n }, [e])();\n};\nvar D5 = typeof globalThis < "u" ? globalThis : typeof window < "u" ? window : typeof __webpack_require__.g < "u" ? __webpack_require__.g : typeof self < "u" ? self : {};\nfunction Q2(e) {\n return e && e.__esModule && Object.prototype.hasOwnProperty.call(e, "default") ? e.default : e;\n}\nfunction zl(e) {\n if (e.__esModule)\n return e;\n var t = e.default;\n if (typeof t == "function") {\n var o = function n() {\n return this instanceof n ? Reflect.construct(t, arguments, this.constructor) : t.apply(this, arguments);\n };\n o.prototype = t.prototype;\n } else\n o = {};\n return Object.defineProperty(o, "__esModule", { value: !0 }), Object.keys(e).forEach(function(n) {\n var r = Object.getOwnPropertyDescriptor(e, n);\n Object.defineProperty(o, n, r.get ? r : {\n enumerable: !0,\n get: function() {\n return e[n];\n }\n });\n }), o;\n}\nvar Sa = { exports: {} }, wo = {};\n/**\n * @license React\n * react-jsx-runtime.production.min.js\n *\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\nvar l8;\nfunction cu() {\n if (l8)\n return wo;\n l8 = 1;\n var e = (react__WEBPACK_IMPORTED_MODULE_0___default()), t = Symbol.for("react.element"), o = Symbol.for("react.fragment"), n = Object.prototype.hasOwnProperty, r = e.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED.ReactCurrentOwner, i = { key: !0, ref: !0, __self: !0, __source: !0 };\n function a(s, l, p) {\n var d, b = {}, M = null, u = null;\n p !== void 0 && (M = "" + p), l.key !== void 0 && (M = "" + l.key), l.ref !== void 0 && (u = l.ref);\n for (d in l)\n n.call(l, d) && !i.hasOwnProperty(d) && (b[d] = l[d]);\n if (s && s.defaultProps)\n for (d in l = s.defaultProps, l)\n b[d] === void 0 && (b[d] = l[d]);\n return { $$typeof: t, type: s, key: M, ref: u, props: b, _owner: r.current };\n }\n return wo.Fragment = o, wo.jsx = a, wo.jsxs = a, wo;\n}\nvar xo = {};\n/**\n * @license React\n * react-jsx-runtime.development.js\n *\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\nvar p8;\nfunction lu() {\n return p8 || (p8 = 1, false && 0), xo;\n}\n true ? Sa.exports = cu() : 0;\nvar H5 = Sa.exports;\nconst s0 = H5.Fragment, c = H5.jsx, e1 = H5.jsxs, pu = () => /* @__PURE__ */ e1("svg", { viewBox: "0 0 24 24", fill: "none", xmlns: "http://www.w3.org/2000/svg", children: [\n /* @__PURE__ */ c(\n "circle",\n {\n cx: "12",\n cy: "12",\n r: "11.3",\n stroke: "currentColor",\n strokeWidth: "1.4"\n }\n ),\n /* @__PURE__ */ c(\n "path",\n {\n d: "M12.0001 13.9894C12.4349 13.9894 12.7874 13.6227 12.7874 13.1702L12.7874 7.31915C12.7874 6.86675 12.4349 6.5 12.0001 6.5C11.5653 6.5 11.2129 6.86675 11.2129 7.31915L11.2129 13.1702C11.2129 13.6227 11.5653 13.9894 12.0001 13.9894Z",\n fill: "currentColor"\n }\n ),\n /* @__PURE__ */ c(\n "path",\n {\n d: "M12.0001 17.5C12.4349 17.5 12.7874 17.1333 12.7874 16.6808C12.7874 16.2284 12.4349 15.8617 12.0001 15.8617C11.5653 15.8617 11.2129 16.2284 11.2129 16.6808C11.2129 17.1333 11.5653 17.5 12.0001 17.5Z",\n fill: "currentColor"\n }\n )\n] }), du = () => /* @__PURE__ */ e1("svg", { viewBox: "0 0 24 24", fill: "none", xmlns: "http://www.w3.org/2000/svg", children: [\n /* @__PURE__ */ c("g", { clipPath: "url(#clip0_2497_135990)", children: /* @__PURE__ */ c(\n "path",\n {\n fillRule: "evenodd",\n clipRule: "evenodd",\n d: "M12 24C18.6274 24 24 18.6274 24 12C24 5.37258 18.6274 0 12 0C5.37258 0 0 5.37258 0 12C0 18.6274 5.37258 24 12 24ZM12 6C12.5523 6 13 6.44772 13 7V13C13 13.5523 12.5523 14 12 14C11.4477 14 11 13.5523 11 13V7C11 6.44772 11.4477 6 12 6ZM13 17C13 17.5523 12.5523 18 12 18C11.4477 18 11 17.5523 11 17C11 16.4477 11.4477 16 12 16C12.5523 16 13 16.4477 13 17Z",\n fill: "currentColor"\n }\n ) }),\n /* @__PURE__ */ c("defs", { children: /* @__PURE__ */ c("clipPath", { id: "clip0_2497_135990", children: /* @__PURE__ */ c("rect", { width: "24", height: "24", fill: "white" }) }) })\n] }), bu = () => /* @__PURE__ */ c("svg", { viewBox: "0 0 24 24", fill: "none", xmlns: "http://www.w3.org/2000/svg", children: /* @__PURE__ */ c(\n "path",\n {\n fillRule: "evenodd",\n clipRule: "evenodd",\n d: "M11.3917 23.7179L5.51986 15.1746L5.51614 15.1674C5.36699 14.878 5.439 14.4522 5.73795 14.2348L5.7472 14.228L5.75748 14.223C5.90844 14.1498 6.09038 14.1339 6.25901 14.1683C6.42817 14.2029 6.59506 14.2905 6.70891 14.4377L6.71317 14.4432L11.3008 21.0903V0.661487C11.3008 0.290743 11.6063 0 11.9788 0C12.3513 0 12.6568 0.290743 12.6568 0.661487V21.1495L17.2428 14.5051C17.4637 14.1515 17.909 14.0727 18.2142 14.2901C18.576 14.5046 18.6611 14.9425 18.431 15.2435L12.5657 23.7181C12.2513 24.0325 11.7099 24.0361 11.3917 23.7179Z",\n fill: "currentColor"\n }\n) }), Mu = () => /* @__PURE__ */ c("svg", { viewBox: "0 0 24 24", fill: "none", xmlns: "http://www.w3.org/2000/svg", children: /* @__PURE__ */ c(\n "path",\n {\n fillRule: "evenodd",\n clipRule: "evenodd",\n d: "M0.272954 11.4047L8.80063 5.52608C9.07051 5.38752 9.517 5.44355 9.70902 5.75494C9.90243 6.06859 9.76935 6.46524 9.49761 6.67453L2.73919 11.3206H23.3653C23.7336 11.3206 24 11.6755 24 12.0308C24 12.3886 23.7201 12.6799 23.3653 12.6799H2.73919L9.49555 17.3247C9.8382 17.5374 9.91269 17.9666 9.70155 18.2584C9.4867 18.5866 9.10507 18.5686 8.78955 18.4066L0.272954 12.5346C-0.0786668 12.2389 -0.0831133 11.692 0.272954 11.4047Z",\n fill: "currentColor"\n }\n) }), Au = () => /* @__PURE__ */ c("svg", { viewBox: "0 0 25 24", fill: "none", xmlns: "http://www.w3.org/2000/svg", children: /* @__PURE__ */ c(\n "path",\n {\n fillRule: "evenodd",\n clipRule: "evenodd",\n d: "M15.2172 18.4012C15.1016 18.4727 14.9811 18.5161 14.8203 18.5117C14.5768 18.5051 14.3789 18.3867 14.2695 18.2188C14.1602 18.0508 14.1774 17.9091 14.2109 17.7461C14.2446 17.5826 14.357 17.4408 14.4983 17.3323L14.5025 17.3291L21.26 12.6988H0.634725C0.266753 12.6988 0 12.3857 0 12.0312C0 11.6741 0.280275 11.3432 0.634725 11.3432H21.26L14.5046 6.71418C14.1627 6.50259 14.0875 6.07587 14.2972 5.78479C14.5043 5.43671 14.9248 5.35783 15.2119 5.57624L23.7269 11.4271C24.091 11.7912 24.0964 12.1846 23.7269 12.554L15.2172 18.4012Z",\n fill: "currentColor"\n }\n) }), uu = () => /* @__PURE__ */ c("svg", { viewBox: "0 0 24 24", fill: "none", xmlns: "http://www.w3.org/2000/svg", children: /* @__PURE__ */ c(\n "path",\n {\n fillRule: "evenodd",\n clipRule: "evenodd",\n d: "M11.392 0.282057L5.52011 8.82539L5.51638 8.83261C5.36723 9.12196 5.43925 9.54777 5.73819 9.76525L5.74744 9.77198L5.75773 9.77697C5.90869 9.85018 6.09062 9.8661 6.25925 9.83166C6.42842 9.79712 6.59531 9.70953 6.70916 9.56229L6.71342 9.55678L11.301 2.90971V23.3385C11.301 23.7093 11.6065 24 11.979 24C12.3515 24 12.657 23.7093 12.657 23.3385V2.85049L17.2431 9.49493C17.4639 9.84847 17.9092 9.92728 18.2145 9.70991C18.5762 9.49542 18.6613 9.05747 18.4313 8.75649L12.566 0.28191C12.1889 -0.0951519 11.7687 -0.0946159 11.392 0.282057Z",\n fill: "currentColor"\n }\n) }), zu = () => /* @__PURE__ */ c("svg", { viewBox: "0 0 24 24", fill: "none", xmlns: "http://www.w3.org/2000/svg", children: /* @__PURE__ */ c(\n "path",\n {\n fillRule: "evenodd",\n clipRule: "evenodd",\n d: "M7.96323 3.17637C7.29937 4.30124 7.18033 5.61384 7.18033 6.28571V17.7143C7.18033 18.0299 6.9161 18.2857 6.59016 18.2857C6.26423 18.2857 6 18.0299 6 17.7143V6.28571C6 5.52902 6.12686 3.98447 6.93841 2.60935C7.77665 1.18901 9.32019 0 12 0C14.6798 0 16.2234 1.18901 17.0616 2.60935C17.8731 3.98447 18 5.52902 18 6.28571V19.619C18 20.2347 17.8673 21.3126 17.2265 22.2548C16.5594 23.2356 15.3866 24 13.4754 24C11.5642 24 10.3914 23.2356 9.72433 22.2548C9.08355 21.3126 8.95082 20.2347 8.95082 19.619V9.14286C8.95082 9.13512 8.95082 9.12719 8.95081 9.11908C8.95065 8.7254 8.95031 7.90178 9.31712 7.16777C9.5111 6.77961 9.81166 6.40618 10.2693 6.13375C10.7256 5.86209 11.2988 5.71429 12 5.71429C12.7012 5.71429 13.2744 5.86209 13.7307 6.13375C14.1883 6.40618 14.4889 6.77961 14.6829 7.16777C15.0497 7.90178 15.0494 8.7254 15.0492 9.11908C15.0492 9.12719 15.0492 9.13512 15.0492 9.14286V17.7143C15.0492 18.0299 14.785 18.2857 14.459 18.2857C14.1331 18.2857 13.8689 18.0299 13.8689 17.7143V9.14286C13.8689 8.73269 13.8608 8.14659 13.6204 7.66556C13.507 7.43864 13.3465 7.2466 13.1125 7.10732C12.8773 6.96728 12.5283 6.85714 12 6.85714C11.4717 6.85714 11.1227 6.96728 10.8875 7.10732C10.6535 7.2466 10.493 7.43864 10.3796 7.66556C10.1392 8.14659 10.1311 8.73269 10.1311 9.14286V19.619C10.1311 20.1145 10.2443 20.9414 10.7101 21.6262C11.1496 22.2723 11.944 22.8571 13.4754 22.8571C15.0068 22.8571 15.8013 22.2723 16.2407 21.6262C16.7065 20.9414 16.8197 20.1145 16.8197 19.619V6.28571C16.8197 5.61384 16.7006 4.30124 16.0368 3.17637C15.3996 2.0967 14.2382 1.14286 12 1.14286C9.76177 1.14286 8.6004 2.0967 7.96323 3.17637Z",\n fill: "currentColor"\n }\n) }), hu = () => /* @__PURE__ */ c("svg", { viewBox: "0 0 24 24", fill: "none", xmlns: "http://www.w3.org/2000/svg", children: /* @__PURE__ */ c(\n "path",\n {\n fillRule: "evenodd",\n clipRule: "evenodd",\n d: "M13.6 22.6V1.4H10.4V22.6H13.6ZM9 0H15V24H9V0ZM4.6 9.4V22.6H1.4V9.4H4.6ZM6 8H0V24H6V8ZM22.6 17.4V22.6H19.4V17.4H22.6ZM24 16H18V24H24V16Z",\n fill: "currentcolor"\n }\n) }), Ou = () => /* @__PURE__ */ e1("svg", { xmlns: "http://www.w3.org/2000/svg", viewBox: "0 0 24 24", fill: "none", children: [\n /* @__PURE__ */ c(\n "path",\n {\n fillRule: "evenodd",\n clipRule: "evenodd",\n d: "M9 0H15V24H9V0Z",\n fill: "currentcolor"\n }\n ),\n /* @__PURE__ */ c(\n "path",\n {\n fillRule: "evenodd",\n clipRule: "evenodd",\n d: "M6 8H0V24H6V8Z",\n fill: "currentcolor"\n }\n ),\n /* @__PURE__ */ c(\n "path",\n {\n fillRule: "evenodd",\n clipRule: "evenodd",\n d: "M24 16H18V24H24V16Z",\n fill: "currentcolor"\n }\n )\n] }), fu = () => /* @__PURE__ */ c("svg", { viewBox: "0 0 24 24", fill: "none", xmlns: "http://www.w3.org/2000/svg", children: /* @__PURE__ */ c(\n "path",\n {\n fillRule: "evenodd",\n clipRule: "evenodd",\n d: "M21.1438 8.70519H21.7883C23.0114 8.70519 24 9.64452 24 10.7156V13.1702C24 14.353 23.0141 15.2948 21.7883 15.2948H21.1438V17.4515C21.1438 17.778 20.8719 18.0348 20.5387 18.0348H0.605102C0.271898 18.0348 0 17.778 0 17.4515V6.54854C0 6.222 0.271898 5.9652 0.605102 5.9652H20.5387C20.8719 5.9652 21.1438 6.22199 21.1438 6.54854V8.70519ZM1.26973 16.8681H19.9336V7.13188H1.26973V16.8681ZM21.8478 14.1281C22.3476 14.1281 22.7898 13.6999 22.7898 13.2273V10.7727C22.7898 10.3001 22.3476 9.87189 21.8478 9.87189H21.2033V14.1281H21.8478Z",\n fill: "currentColor"\n }\n) }), gu = () => /* @__PURE__ */ c("svg", { viewBox: "0 0 24 24", fill: "none", xmlns: "http://www.w3.org/2000/svg", children: /* @__PURE__ */ c(\n "path",\n {\n fillRule: "evenodd",\n clipRule: "evenodd",\n d: "M21.1438 8.70519H21.7883C23.0114 8.70519 24 9.64452 24 10.7156V13.1702C24 14.353 23.0141 15.2948 21.7883 15.2948H21.1438V17.4515C21.1438 17.778 20.8719 18.0348 20.5387 18.0348H0.605102C0.437085 18.0348 0.285565 17.9781 0.175472 17.8748C0.0649432 17.7712 0 17.624 0 17.4515V6.54854C0 6.222 0.271898 5.9652 0.605102 5.9652H20.5387C20.8719 5.9652 21.1438 6.22199 21.1438 6.54854V8.70519ZM9.91804 16.8681L12.4406 7.13188H14.0224L11.4999 16.8681H9.91804ZM7.12141 16.8681L9.64398 7.13188H11.2258L8.7032 16.8681H7.12141ZM4.26522 16.8681L6.78783 7.13188H8.36962L5.84705 16.8681H4.26522ZM1.40907 16.8681L3.93164 7.13188H5.51347L2.9909 16.8681H1.40907ZM2.65698 7.13188L1.21024 12.632V7.13188H2.65698ZM12.8337 16.8681H19.9336V7.13188H15.3563L12.8337 16.8681ZM21.7883 14.1281C22.2881 14.1281 22.7303 13.6999 22.7303 13.2273V10.7727C22.7303 10.3001 22.2881 9.87189 21.7883 9.87189H21.1438V14.1281H21.7883Z",\n fill: "currentColor"\n }\n) }), Cu = () => /* @__PURE__ */ c("svg", { viewBox: "0 0 24 24", fill: "none", xmlns: "http://www.w3.org/2000/svg", children: /* @__PURE__ */ c(\n "path",\n {\n fillRule: "evenodd",\n clipRule: "evenodd",\n d: "M13.0771 0.900072V2.78298C14.2504 2.94559 15.1647 3.30162 15.8843 3.80898C16.6356 4.33878 17.1649 5.02668 17.5558 5.80996C18.3313 7.36387 18.5723 9.32337 18.9207 11.1935C19.2704 13.0706 19.9444 15.318 20.5329 17.1004C20.8752 18.1372 21.2303 19.1704 21.6208 20.1902C21.7246 20.4683 21.6889 20.7906 21.5213 21.0445C21.35 21.3038 21.0483 21.4815 20.6442 21.4815H15.5591C14.4703 24.8395 9.52813 24.8395 8.43925 21.4815H3.35427C2.95017 21.4815 2.64844 21.3038 2.47717 21.0445C2.30783 20.7881 2.27496 20.4602 2.38379 20.1741C2.76817 19.1583 3.1251 18.1316 3.46556 17.1004C4.05401 15.318 4.728 13.0706 5.0777 11.1935C5.4261 9.32332 5.66716 7.36381 6.44259 5.80992C6.83347 5.02664 7.36274 4.33876 8.11413 3.80896C8.8337 3.30161 9.74796 2.9456 10.9214 2.78298V0.900072L10.9269 0.878369C11.036 0.45387 11.4437 0 11.9992 0C12.5548 0 12.9625 0.453869 13.0715 0.878369L13.0771 0.900072ZM9.91357 21.491H14.0848C13.1966 23.0712 10.8018 23.0712 9.91357 21.491ZM3.84294 20.1296H20.1555C19.115 17.3109 18.1446 14.4084 17.5918 11.4411C17.2553 9.63504 17.1294 7.72188 16.1791 6.10477C15.3793 4.74375 13.7046 4.04404 11.9987 4.04434C10.2928 4.04465 8.61845 4.74499 7.81935 6.10477C6.86902 7.72187 6.74313 9.63504 6.40668 11.4411C5.85388 14.4084 4.88343 17.3109 3.84294 20.1296Z",\n fill: "currentcolor"\n }\n) }), mu = () => /* @__PURE__ */ e1("svg", { viewBox: "0 0 13 16", fill: "none", xmlns: "http://www.w3.org/2000/svg", children: [\n /* @__PURE__ */ c(\n "path",\n {\n d: "M8.9 14.1C8.9 14.2 8.9 14.2 8.8 14.3C8.5 15.3 7.5 16 6.4 16C5.3 16 4.3 15.3 4 14.3C4 14.2 4 14.2 3.9 14.1H8.9Z",\n fill: "currentColor"\n }\n ),\n /* @__PURE__ */ c(\n "path",\n {\n d: "M12.8 11.9C12.8 12.1 12.8 12.2 12.7 12.3C12.6 12.5 12.5 12.5 12.3 12.5H0.6C0.4 12.5 0.3 12.4 0.2 12.3C0 12.3 0 12.1 0 11.9L1.6 6.2C1.7 5.7 1.9 5.1 2 4.5V4.3C2.4 2.6 3.8 1.2 5.7 1V0.5C5.7 0.2 6.2 0 6.5 0C6.8 0 7.2 0.2 7.3 0.4V1C9.3 1.2 10.6 2.7 10.9 4.5C11 5 11 5.6 11.2 6.2L12.8 11.9Z",\n fill: "currentColor"\n }\n )\n] }), Lu = () => /* @__PURE__ */ c("svg", { viewBox: "0 0 24 24", fill: "none", xmlns: "http://www.w3.org/2000/svg", children: /* @__PURE__ */ c(\n "path",\n {\n fillRule: "evenodd",\n clipRule: "evenodd",\n d: "M13.0771 0.900072V2.78298C14.2504 2.94559 15.1647 3.30162 15.8843 3.80898C16.6356 4.33878 17.1649 5.02668 17.5558 5.80996C18.3313 7.36387 18.5723 9.32337 18.9207 11.1935C19.2704 13.0706 19.9444 15.318 20.5329 17.1004C20.8752 18.1372 21.2303 19.1704 21.6208 20.1902C21.7246 20.4683 21.6889 20.7906 21.5213 21.0445C21.35 21.3038 21.0483 21.4815 20.6442 21.4815H15.5591C14.4703 24.8395 9.52813 24.8395 8.43925 21.4815H3.35427C2.95017 21.4815 2.64844 21.3038 2.47717 21.0445C2.30783 20.7881 2.27496 20.4602 2.38379 20.1741C2.76817 19.1583 3.1251 18.1316 3.46556 17.1004C4.05401 15.318 4.728 13.0706 5.0777 11.1935C5.4261 9.32332 5.66716 7.36381 6.44259 5.80992C6.83347 5.02664 7.36274 4.33876 8.11413 3.80896C8.8337 3.30161 9.74796 2.9456 10.9214 2.78298V0.900072L10.9269 0.878369C11.036 0.45387 11.4437 0 11.9992 0C12.5548 0 12.9625 0.453869 13.0715 0.878369L13.0771 0.900072ZM9.91357 21.491H14.0848C13.1966 23.0712 10.8018 23.0712 9.91357 21.491ZM3.84294 20.1296H20.1555C19.115 17.3109 18.1446 14.4084 17.5918 11.4411C17.2553 9.63504 17.1294 7.72188 16.1791 6.10477C15.3793 4.74375 13.7046 4.04404 11.9987 4.04434C10.2928 4.04465 8.61845 4.74499 7.81935 6.10477C6.86902 7.72187 6.74313 9.63504 6.40668 11.4411C5.85388 14.4084 4.88343 17.3109 3.84294 20.1296Z",\n fill: "currentcolor"\n }\n) }), vu = () => /* @__PURE__ */ c("svg", { viewBox: "0 0 24 24", fill: "none", xmlns: "http://www.w3.org/2000/svg", children: /* @__PURE__ */ c(\n "path",\n {\n fillRule: "evenodd",\n clipRule: "evenodd",\n d: "M4.89474 24H19.0461C19.3421 24 19.5789 23.7606 19.5789 23.4613V6.82293H20.4671C20.7632 6.82293 21 6.58354 21 6.28428V3.41147C21 3.11222 20.7632 2.87282 20.4671 2.87282H16.7368C16.5 1.25686 15.079 0 13.4211 0H10.579C8.92108 0 7.50001 1.25686 7.26316 2.87282H3.53291C3.23686 2.87282 3 3.11222 3 3.41147V6.28428C3 6.58354 3.23686 6.82293 3.53291 6.82293H4.42107V23.4613C4.36186 23.7606 4.59869 24 4.89474 24ZM18.5132 22.8628H5.42765V6.82293H18.5132V22.8628ZM10.579 1.07731H13.4211C14.4869 1.07731 15.375 1.79551 15.6119 2.81296H8.32895C8.625 1.85536 9.51319 1.07731 10.579 1.07731ZM4.06582 3.95013H7.73684H16.204H19.875V5.68578H18.9868H4.83555H3.94739V3.95013H4.06582ZM9.63151 21.5458C9.92756 21.5458 10.1644 21.3064 10.1644 21.0072V9.15717C10.1644 8.85793 9.92756 8.61853 9.63151 8.61853C9.33545 8.61853 9.09863 8.85793 9.09863 9.15717V21.0072C9.09863 21.3064 9.33545 21.5458 9.63151 21.5458ZM14.9012 21.0072C14.9012 21.3064 14.6644 21.5458 14.3683 21.5458C14.0723 21.5458 13.8354 21.3064 13.8354 21.0072V9.15717C13.8354 8.85793 14.0723 8.61853 14.3683 8.61853C14.6644 8.61853 14.9012 8.85793 14.9012 9.15717V21.0072Z",\n fill: "currentColor"\n }\n) }), qu = () => /* @__PURE__ */ e1("svg", { xmlns: "http://www.w3.org/2000/svg", viewBox: "0 0 24 24", fill: "none", children: [\n /* @__PURE__ */ c(\n "path",\n {\n fillRule: "evenodd",\n clipRule: "evenodd",\n d: "M19.6 8.4V23.4C19.6 23.7 19.4 23.9 19.1 23.9H4.9C4.6 23.9 4.4 23.7 4.4 23.4V8.4H19.6Z",\n fill: "currentColor"\n }\n ),\n /* @__PURE__ */ c(\n "path",\n {\n fillRule: "evenodd",\n clipRule: "evenodd",\n d: "M20.5 2.9H16.8C16.5 1.3 15.1 0 13.4 0H10.6C8.9 0 7.5 1.3 7.3 2.9H3.5C3.2 2.9 3 3.1 3 3.4V6.3C3 6.6 3.2 6.8 3.5 6.8H20.4C20.7 6.8 20.9 6.6 20.9 6.3V3.4C21 3.1 20.8 2.9 20.5 2.9ZM9 2.8C9.3 1.8 10.2 1.6 11.2 1.6H12.6C13.7 1.6 14.6 1.8 14.8 2.8H9Z",\n fill: "currentColor"\n }\n )\n] }), yu = () => /* @__PURE__ */ c("svg", { xmlns: "http://www.w3.org/2000/svg", viewBox: "0 0 48 48", fill: "none", children: /* @__PURE__ */ c(\n "path",\n {\n fillRule: "evenodd",\n clipRule: "evenodd",\n d: "M13.4 13.4V21.6H18.6V13.4H13.4ZM13 12C12.4477 12 12 12.4477 12 13V22C12 22.5523 12.4477 23 13 23H19C19.5523 23 20 22.5523 20 22V13C20 12.4477 19.5523 12 19 12H13ZM13.4 34.6V26.4H24.6V34.6H13.4ZM12 26C12 25.4477 12.4477 25 13 25H25C25.5523 25 26 25.4477 26 26V35C26 35.5523 25.5523 36 25 36H13C12.4477 36 12 35.5523 12 35V26ZM29.4 34.6V26.4H34.6V34.6H29.4ZM28 26C28 25.4477 28.4477 25 29 25H35C35.5523 25 36 25.4477 36 26V35C36 35.5523 35.5523 36 35 36H29C28.4477 36 28 35.5523 28 35V26ZM23.4 21.6V13.4H34.6V21.6H23.4ZM22 13C22 12.4477 22.4477 12 23 12H35C35.5523 12 36 12.4477 36 13V22C36 22.5523 35.5523 23 35 23H23C22.4477 23 22 22.5523 22 22V13Z",\n fill: "currentColor"\n }\n) }), wu = () => /* @__PURE__ */ c("svg", { viewBox: "0 0 24 24", fill: "none", xmlns: "http://www.w3.org/2000/svg", children: /* @__PURE__ */ c(\n "path",\n {\n fillRule: "evenodd",\n clipRule: "evenodd",\n d: "M16.4571 3.17643C15.8862 3.17639 15.4958 3.34343 15.2164 3.5689C14.9288 3.80091 14.7227 4.12446 14.5775 4.48654C14.2825 5.22197 14.2837 6.00093 14.2853 6.09373V6.09374L14.2855 6.09798L14.6905 13.6022C15.625 12.2752 17.1432 11.4121 18.8571 11.4121C19.8478 11.4121 20.773 11.7005 21.558 12.2L19.4735 5.76241C19.4584 5.71588 19.4467 5.67341 19.4376 5.64004C19.3961 5.48773 19.2013 4.85286 18.7334 4.26649C18.2788 3.69692 17.5735 3.1765 16.4571 3.17643ZM23.4225 14.2664C23.4177 14.2329 23.41 14.1993 23.3992 14.166L20.5577 5.39042C20.552 5.37284 20.5466 5.35386 20.538 5.32217C20.4765 5.09689 20.2274 4.2854 19.6165 3.51976C18.9921 2.73733 17.9836 2.0001 16.4572 2C15.6484 1.99995 15.0056 2.24428 14.5114 2.64297C14.0253 3.03513 13.7173 3.54854 13.5211 4.03755C13.3576 4.44523 13.2643 4.85517 13.2112 5.20298C12.8526 5.03318 12.4344 4.94176 12 4.94176C11.5656 4.94176 11.1474 5.03318 10.7888 5.20298C10.7357 4.85517 10.6424 4.44523 10.4789 4.03755C10.2827 3.54854 9.9747 3.03513 9.48862 2.64297C8.99444 2.24428 8.3516 1.99995 7.54283 2C6.01643 2.0001 5.0079 2.73733 4.38353 3.51976C3.77256 4.2854 3.52346 5.09689 3.46204 5.32217C3.4534 5.35386 3.448 5.37284 3.44231 5.39042L0.600799 14.166C0.590021 14.1993 0.582295 14.2329 0.577464 14.2664C0.208519 14.9965 0 15.8262 0 16.7061C0 19.6298 2.30254 22 5.14286 22C7.97766 22 10.2768 19.639 10.2857 16.7231L10.434 13.9746C10.5084 13.7364 10.6104 13.5096 10.7396 13.3118C11.0284 12.8697 11.4357 12.5886 12 12.5886C12.5643 12.5886 12.9716 12.8697 13.2604 13.3118C13.3896 13.5096 13.4916 13.7364 13.566 13.9746L13.7143 16.7231C13.7232 19.639 16.0223 22 18.8571 22C21.6975 22 24 19.6298 24 16.7061C24 15.8262 23.7915 14.9965 23.4225 14.2664ZM13.4519 11.861L13.1858 6.93061C13.1581 6.86151 13.1429 6.7858 13.1429 6.70641C13.1429 6.63941 13.1033 6.50675 12.8952 6.36397C12.6911 6.22393 12.3763 6.11819 12 6.11819C11.6237 6.11819 11.3089 6.22393 11.1048 6.36397C10.8967 6.50675 10.8571 6.63941 10.8571 6.70641C10.8571 6.7858 10.8419 6.86151 10.8142 6.93061L10.5481 11.861C10.9436 11.5843 11.4274 11.4121 12 11.4121C12.5726 11.4121 13.0564 11.5843 13.4519 11.861ZM7.5429 3.17643C8.11376 3.17639 8.50415 3.34343 8.78363 3.5689C9.0712 3.80091 9.27728 4.12446 9.42252 4.48654C9.71752 5.22197 9.7163 6.00093 9.7147 6.09373V6.09374L9.71449 6.09798L9.3095 13.6022C8.37497 12.2752 6.85683 11.4121 5.14286 11.4121C4.1522 11.4121 3.22697 11.7005 2.44204 12.2L4.52653 5.76241C4.54159 5.71588 4.55329 5.67341 4.56239 5.64004C4.60391 5.48773 4.79873 4.85286 5.26664 4.26649C5.72116 3.69692 6.42649 3.1765 7.5429 3.17643ZM9.14286 16.7061C9.14286 18.9801 7.352 20.8236 5.14286 20.8236C2.93372 20.8236 1.14286 18.9801 1.14286 16.7061C1.14286 14.432 2.93372 12.5886 5.14286 12.5886C7.352 12.5886 9.14286 14.432 9.14286 16.7061ZM18.8571 20.8236C16.648 20.8236 14.8571 18.9801 14.8571 16.7061C14.8571 14.432 16.648 12.5886 18.8571 12.5886C21.0663 12.5886 22.8571 14.432 22.8571 16.7061C22.8571 18.9801 21.0663 20.8236 18.8571 20.8236Z",\n fill: "currentColor"\n }\n) }), xu = () => /* @__PURE__ */ c("svg", { viewBox: "0 0 25 24", fill: "none", xmlns: "http://www.w3.org/2000/svg", children: /* @__PURE__ */ c(\n "path",\n {\n fillRule: "evenodd",\n clipRule: "evenodd",\n d: "M1.18942 11.7139L1.19122 11.7118L4.05534 8.69542C4.11126 8.62575 4.1804 8.56864 4.25865 8.52786C4.33797 8.48651 4.4248 8.46292 4.51358 8.45875C4.60237 8.45459 4.69091 8.46994 4.77353 8.50373C4.85613 8.53752 4.93084 8.58892 4.99303 8.65442C5.05521 8.71991 5.10354 8.79807 5.13516 8.88382C5.16677 8.96957 5.18105 9.06117 5.17717 9.15286C5.17329 9.24454 5.15132 9.3345 5.11254 9.41704C5.07428 9.49847 5.02042 9.57103 4.95409 9.63011L3.16845 11.5107H9.63382C10.0013 11.5107 10.2991 11.8086 10.2991 12.176C10.2991 12.5435 10.0013 12.8414 9.63382 12.8414H3.16845L4.95409 14.722C5.02042 14.7811 5.07428 14.8536 5.11254 14.935C5.15132 15.0176 5.17329 15.1075 5.17717 15.1992C5.18105 15.2909 5.16677 15.3825 5.13516 15.4683C5.10354 15.554 5.05521 15.6322 4.99303 15.6977C4.93084 15.7632 4.85613 15.8146 4.77353 15.8484C4.69091 15.8821 4.60237 15.8975 4.51358 15.8933C4.4248 15.8892 4.33797 15.8656 4.25865 15.8242C4.18037 15.7834 4.1112 15.7263 4.05526 15.6566L1.17912 12.6085C0.893613 12.304 0.927124 12.0098 1.18942 11.7139ZM24.8104 12.6383L24.8086 12.6403L21.9445 15.6567C21.8886 15.7264 21.8194 15.7835 21.7412 15.8243C21.6619 15.8656 21.5751 15.8892 21.4863 15.8934C21.3975 15.8976 21.3089 15.8822 21.2263 15.8484C21.1437 15.8146 21.069 15.7632 21.0068 15.6977C20.9446 15.6322 20.8963 15.5541 20.8647 15.4683C20.8331 15.3826 20.8188 15.291 20.8227 15.1993C20.8266 15.1076 20.8485 15.0176 20.8873 14.9351C20.9256 14.8537 20.9794 14.7811 21.0458 14.722L22.8314 12.8414H16.366C15.9986 12.8414 15.7007 12.5435 15.7007 12.1761C15.7007 11.8087 15.9986 11.5108 16.366 11.5108H22.8314L21.0458 9.63016C20.9794 9.57108 20.9256 9.49852 20.8873 9.41709C20.8485 9.33456 20.8266 9.24459 20.8227 9.15291C20.8188 9.06122 20.8331 8.96962 20.8647 8.88387C20.8963 8.79812 20.9446 8.71996 21.0068 8.65447C21.069 8.58897 21.1437 8.53757 21.2263 8.50378C21.3089 8.46999 21.3975 8.45464 21.4863 8.45881C21.5751 8.46297 21.6619 8.48657 21.7412 8.52791C21.8195 8.56871 21.8887 8.62585 21.9446 8.69556L24.8207 11.7436C25.0389 11.9764 25.0154 12.407 24.8104 12.6383ZM12.949 21.3523C12.5536 21.3523 12.2331 21.0317 12.2331 20.6363V3.71597C12.2331 3.32055 12.5536 3 12.949 3C13.3445 3 13.665 3.32055 13.665 3.71597V20.6363C13.665 21.0317 13.3445 21.3523 12.949 21.3523Z",\n fill: "currentColor"\n }\n) }), Wu = () => /* @__PURE__ */ c("svg", { viewBox: "0 0 24 24", fill: "none", xmlns: "http://www.w3.org/2000/svg", children: /* @__PURE__ */ c(\n "path",\n {\n d: "M23.4613 5.83278H15.4414V3.53114C15.4414 3.23606 15.202 3 14.9027 3H9.15711C8.85786 3 8.61845 3.23606 8.61845 3.53114V5.83278H0.538653C0.239401 5.83278 0 6.06884 0 6.36392V20.4688C0 20.7639 0.239401 21 0.538653 21H23.4613C23.7606 21 24 20.7639 24 20.4688V6.36392C24 6.06884 23.7606 5.83278 23.4613 5.83278ZM9.15711 6.89507H14.9027H20.0499V19.9377H3.95012V6.89507H9.15711ZM9.69576 4.12131H14.3042V5.83278H9.69576V4.12131ZM1.13716 6.89507H2.87282V19.9377H1.13716V6.89507ZM22.9227 19.9377H21.187V6.89507H22.9227V19.9377Z",\n fill: "currentColor"\n }\n) }), Ru = () => /* @__PURE__ */ c("svg", { xmlns: "http://www.w3.org/2000/svg", viewBox: "0 0 24 24", fill: "none", children: /* @__PURE__ */ c(\n "path",\n {\n d: "M23.5 6.5H16.1V4.3C16.1 3.6 15.5 3 14.8 3H9.2C8.5 3 7.9 3.6 7.9 4.3V6.6H0.5C0.2 6.5 0 6.8 0 7.1V21.2C0 21.5 0.2 21.7 0.5 21.7H23.4C23.7 21.7 23.9 21.5 23.9 21.2V7.1C24 6.8 23.8 6.5 23.5 6.5ZM9.7 4.8H14.3V6.5H9.7V4.8Z",\n fill: "currentColor"\n }\n) }), Bu = () => /* @__PURE__ */ c("svg", { viewBox: "0 0 24 24", fill: "none", xmlns: "http://www.w3.org/2000/svg", children: /* @__PURE__ */ c(\n "path",\n {\n d: "M23.46 5.83278H15.42V3.53114C15.42 3.23606 15.18 3 14.88 3H9.12C8.82 3 8.58 3.23606 8.58 3.53114V5.83278H0.540001C0.240001 5.83278 0 6.06884 0 6.36392V20.4688C0 20.7639 0.240001 21 0.540001 21H23.46C23.76 21 24 20.7639 24 20.4688V6.36392C24 6.06884 23.76 5.83278 23.46 5.83278ZM9.66 4.12131H14.28V5.83278H9.66V4.12131ZM9.12 6.89507H14.88H22.86V11.4393H14.82H9.06H1.02V6.89507H9.12ZM14.22 12.5606C13.98 13.5639 13.08 14.2721 12 14.2721C10.92 14.2721 10.02 13.5639 9.78 12.5606H14.22ZM1.02 19.9377V12.5606H8.58C8.82 14.1541 10.26 15.3934 11.94 15.3934C13.62 15.3934 15.06 14.1541 15.3 12.5606H22.86V19.9377H1.02Z",\n fill: "currentColor"\n }\n) }), Su = () => /* @__PURE__ */ c("svg", { viewBox: "0 0 24 24", fill: "none", xmlns: "http://www.w3.org/2000/svg", children: /* @__PURE__ */ c(\n "path",\n {\n fillRule: "evenodd",\n clipRule: "evenodd",\n d: "M22.9304 20.2296C22.9972 20.2963 23.1309 20.2963 23.1978 20.2963C23.3315 20.2963 23.532 20.2296 23.6657 20.0961C23.8663 19.9626 24 19.6956 24 19.4286V1.34083C24 1.07385 23.8663 0.806873 23.6657 0.673384C23.4652 0.47315 23.1978 0.473162 22.9304 0.539907L10.4782 4.8114H1.93873C0.869084 4.8114 0 5.67907 0 6.74699V14.0222C0 15.0901 0.869084 15.9578 1.93873 15.9578H2.33969V21.4976C2.33969 22.5656 3.20878 23.5 4.34528 23.5H7.0194V19.0283H8.62407L9.88224 15.9578H10.4773L22.9304 20.2296ZM5.68255 16.0246H3.67675V21.4976C3.67675 21.8981 4.01102 22.2318 4.41214 22.2318H5.74919V19.0283H5.68255V16.0246ZM11.1644 14.8233L22.6629 18.7612V2.00828L11.1644 5.94617V14.8233ZM1.33706 6.74699C1.33706 6.41326 1.60447 6.14629 1.93873 6.14629H9.82737V14.6229H1.93873C1.60447 14.6229 1.33706 14.3559 1.33706 14.0222V6.74699ZM7.75499 17.6934H7.0196V15.9581H8.49037L7.75499 17.6934Z",\n fill: "currentColor"\n }\n) }), Eu = () => /* @__PURE__ */ c("svg", { viewBox: "0 0 24 24", fill: "none", xmlns: "http://www.w3.org/2000/svg", children: /* @__PURE__ */ c(\n "path",\n {\n fillRule: "evenodd",\n clipRule: "evenodd",\n d: "M6 10.6C8.54051 10.6 10.6 8.54051 10.6 6C10.6 3.45949 8.54051 1.4 6 1.4C3.45949 1.4 1.4 3.45949 1.4 6C1.4 8.54051 3.45949 10.6 6 10.6ZM20 15.6C21.4359 15.6 22.6 14.4359 22.6 13C22.6 11.5641 21.4359 10.4 20 10.4C18.5641 10.4 17.4 11.5641 17.4 13C17.4 14.4359 18.5641 15.6 20 15.6ZM11 22.6C11.8837 22.6 12.6 21.8837 12.6 21C12.6 20.1163 11.8837 19.4 11 19.4C10.1163 19.4 9.4 20.1163 9.4 21C9.4 21.8837 10.1163 22.6 11 22.6ZM12 6C12 9.31371 9.31371 12 6 12C2.68629 12 0 9.31371 0 6C0 2.68629 2.68629 0 6 0C9.31371 0 12 2.68629 12 6ZM24 13C24 15.2091 22.2091 17 20 17C17.7909 17 16 15.2091 16 13C16 10.7909 17.7909 9 20 9C22.2091 9 24 10.7909 24 13ZM11 24C12.6569 24 14 22.6569 14 21C14 19.3431 12.6569 18 11 18C9.34315 18 8 19.3431 8 21C8 22.6569 9.34315 24 11 24Z",\n fill: "currentcolor"\n }\n) }), ku = () => /* @__PURE__ */ e1("svg", { xmlns: "http://www.w3.org/2000/svg", viewBox: "0 0 24 24", fill: "none", children: [\n /* @__PURE__ */ c(\n "path",\n {\n d: "M11 24C12.6569 24 14 22.6569 14 21C14 19.3431 12.6569 18 11 18C9.34315 18 8 19.3431 8 21C8 22.6569 9.34315 24 11 24Z",\n fill: "currentcolor"\n }\n ),\n /* @__PURE__ */ c(\n "path",\n {\n d: "M20 17C22.2091 17 24 15.2091 24 13C24 10.7909 22.2091 9 20 9C17.7909 9 16 10.7909 16 13C16 15.2091 17.7909 17 20 17Z",\n fill: "currentcolor"\n }\n ),\n /* @__PURE__ */ c(\n "path",\n {\n d: "M6 12C9.31371 12 12 9.31371 12 6C12 2.68629 9.31371 0 6 0C2.68629 0 0 2.68629 0 6C0 9.31371 2.68629 12 6 12Z",\n fill: "currentcolor"\n }\n )\n] }), Nu = () => /* @__PURE__ */ c("svg", { viewBox: "0 0 24 24", fill: "none", xmlns: "http://www.w3.org/2000/svg", children: /* @__PURE__ */ c(\n "path",\n {\n fillRule: "evenodd",\n clipRule: "evenodd",\n d: "M19.1951 3.26345H21.8803C22.2246 3.26345 22.5 3.5354 22.5 3.87534V10.4023V23.3881C22.5 23.728 22.2246 24 21.8803 24H2.11969C1.77543 24 1.5 23.728 1.5 23.3881V10.4023V3.87534C1.5 3.5354 1.77543 3.26345 2.11969 3.26345H4.80491V0.611894C4.80491 0.27195 5.08034 0 5.4246 0C5.76886 0 6.04425 0.27195 6.04425 0.611894V3.26345H17.9558V0.611894C17.9558 0.27195 18.2311 0 18.5754 0C18.9197 0 19.1951 0.27195 19.1951 0.611894V3.26345ZM4.73607 4.48723H2.73934H2.6705V9.72237H21.123V4.48723H19.1262V7.13881C19.1262 7.47875 18.8508 7.7507 18.5066 7.7507C18.1623 7.7507 17.8869 7.47875 17.8869 7.13881V4.48723H5.97541V7.13881C5.97541 7.47875 5.69998 7.7507 5.35572 7.7507C5.01146 7.7507 4.73607 7.47875 4.73607 7.13881V4.48723ZM2.80821 22.7762H21.2607V11.0141H2.80821V22.7762ZM11.3458 14.8215L10.0376 15.7053C9.76224 15.9093 9.34911 15.8413 9.14256 15.5694C8.93601 15.2974 9.00486 14.8895 9.28027 14.6855L11.5523 13.1218C11.7589 12.9859 12.0343 12.9179 12.2408 13.0539C12.4474 13.1218 12.5851 13.3938 12.5851 13.5978V20.1245C12.5851 20.4644 12.3097 20.7364 11.9654 20.7364C11.6212 20.7364 11.3458 20.4644 11.3458 20.1245V14.8215Z",\n fill: "currentColor"\n }\n) }), Tu = () => /* @__PURE__ */ c("svg", { viewBox: "0 0 24 24", fill: "none", xmlns: "http://www.w3.org/2000/svg", children: /* @__PURE__ */ c(\n "path",\n {\n fillRule: "evenodd",\n clipRule: "evenodd",\n d: "M17.1368 14.8392L17.1368 14.8377C17.1368 12.1273 14.8485 9.87561 12.0893 9.87561C9.32947 9.87561 7.0417 12.0694 7.0417 14.8377C7.0417 17.5485 9.27103 19.7997 12.0893 19.7997C14.9089 19.7997 17.1954 17.5475 17.1368 14.8392ZM18.0086 5.81615H23.4543C23.8117 5.81615 24 6.084 24 6.42556V20.396C24 20.7281 23.7297 20.9923 23.3948 20.9923H0.605215C0.270325 20.9923 0 20.7281 0 20.396V6.41241C0 6.08028 0.270328 5.81615 0.605215 5.81615H6.05095L8.70824 3.20326C8.84125 3.07247 9.03774 3.00774 9.17362 3.00774H14.8859C15.085 3.00774 15.221 3.07513 15.3513 3.20326L18.0086 5.81615ZM9.49897 4.25877L7.8605 5.81615H16.2627L14.6789 4.25877H9.49897ZM22.7896 7.00867H1.32942V19.7997H8.35544C6.77717 18.6676 5.77178 16.8901 5.77178 14.8377C5.77178 11.4046 8.60072 8.62456 12.0893 8.62456C15.5778 8.62456 18.4067 11.4046 18.4067 14.8377C18.4067 16.8349 17.3451 18.6643 15.8166 19.7997H22.7896V7.00867ZM8.62788 14.8376C8.62788 12.9843 10.2072 11.433 12.0891 11.433C14.0305 11.433 15.5504 12.9258 15.5504 14.8376C15.5504 16.6909 13.971 18.2421 12.0891 18.2421C10.2072 18.2421 8.62788 16.6909 8.62788 14.8376ZM9.83827 14.7791C9.83827 16.0255 10.8758 16.9912 12.0891 16.9912C13.3025 16.9912 14.34 16.0255 14.34 14.7791C14.34 13.5327 13.3025 12.567 12.0891 12.567C10.8187 12.567 9.83827 13.5889 9.83827 14.7791Z",\n fill: "currentColor"\n }\n) }), Iu = () => /* @__PURE__ */ e1("svg", { viewBox: "0 0 24 24", fill: "none", xmlns: "http://www.w3.org/2000/svg", children: [\n /* @__PURE__ */ c(\n "path",\n {\n fillRule: "evenodd",\n clipRule: "evenodd",\n d: "M2.3658 6.79341H0.657642C0.291608 6.79341 0.0475848 6.48349 0.108591 6.23556V1.6488C0.108591 1.33888 0.352613 1.09095 0.657642 1.09095H23.3518C23.6568 1.09095 23.9008 1.33888 23.9008 1.6488V6.23556C23.9008 6.54547 23.6568 6.79341 23.3518 6.79341H21.6436V22.3512C21.6436 22.6611 21.3996 22.9091 21.0946 22.9091H2.91485C2.60982 22.9091 2.3658 22.6611 2.3658 22.3512V6.79341ZM3.46391 21.7314H20.4845V6.79341H3.46391V21.7314ZM22.7417 2.14466H1.20669V5.61573H22.7417V2.14466ZM16.5187 13.6735H7.42916C7.12414 13.6735 6.88012 13.4256 6.88012 13.1157V10.8223C6.88012 10.5124 7.12414 10.2645 7.42916 10.2645H16.5187C16.8238 10.2645 17.0678 10.5124 17.0678 10.8223V13.1157C17.0678 13.4256 16.8238 13.6735 16.5187 13.6735ZM15.9087 11.3802H7.97819V12.5578H15.9087V11.3802Z",\n fill: "currentColor"\n }\n ),\n /* @__PURE__ */ c(\n "path",\n {\n fillRule: "evenodd",\n clipRule: "evenodd",\n d: "M2.26662 6.89258H0.657636C0.44583 6.89258 0.267044 6.80269 0.149765 6.67436C0.0369522 6.55093 -0.0247792 6.38417 0.00941138 6.22435V1.6488C0.00941138 1.2856 0.296355 0.991776 0.657636 0.991776H23.3518C23.7131 0.991776 24 1.2856 24 1.6488V6.23556C24 6.59875 23.7131 6.89258 23.3518 6.89258H21.7428V22.3512C21.7428 22.7144 21.4558 23.0082 21.0946 23.0082H2.91485C2.55357 23.0082 2.26662 22.7144 2.26662 22.3512V6.89258ZM0.108591 6.23556C0.0475848 6.48349 0.291608 6.79341 0.657642 6.79341H2.3658V22.3512C2.3658 22.6611 2.60982 22.9091 2.91485 22.9091H21.0946C21.3996 22.9091 21.6436 22.6611 21.6436 22.3512V6.79341H23.3518C23.6568 6.79341 23.9008 6.54547 23.9008 6.23556V1.6488C23.9008 1.33888 23.6568 1.09095 23.3518 1.09095H0.657642C0.352613 1.09095 0.108591 1.33888 0.108591 1.6488V6.23556ZM3.56307 21.6322H20.3853V6.89258H3.56307V21.6322ZM22.6425 2.24384H1.30586V5.51655H22.6425V2.24384ZM16.5187 13.7727H7.42916C7.06788 13.7727 6.78095 13.4788 6.78095 13.1157V10.8223C6.78095 10.4592 7.06788 10.1653 7.42916 10.1653H16.5187C16.88 10.1653 17.167 10.4592 17.167 10.8223V13.1157C17.167 13.4788 16.88 13.7727 16.5187 13.7727ZM15.8095 11.4793H8.07737V12.4586H15.8095V11.4793ZM3.46391 21.7314V6.79341H20.4845V21.7314H3.46391ZM22.7417 2.14466V5.61573H1.20669V2.14466H22.7417ZM7.42916 13.6735H16.5187C16.8238 13.6735 17.0678 13.4256 17.0678 13.1157V10.8223C17.0678 10.5124 16.8238 10.2645 16.5187 10.2645H7.42916C7.12414 10.2645 6.88012 10.5124 6.88012 10.8223V13.1157C6.88012 13.4256 7.12414 13.6735 7.42916 13.6735ZM15.9087 11.3802V12.5578H7.97819V11.3802H15.9087Z",\n fill: "currentColor"\n }\n )\n] }), Du = () => /* @__PURE__ */ c("svg", { viewBox: "0 0 24 24", fill: "none", xmlns: "http://www.w3.org/2000/svg", children: /* @__PURE__ */ c(\n "path",\n {\n fillRule: "evenodd",\n clipRule: "evenodd",\n d: "M0.601341 23.0042H6.79098C7.12549 23.0042 7.39232 22.7331 7.39232 22.3958V1.60415C7.39232 1.26692 7.12549 0.995773 6.79098 0.995773H0.601341C0.266831 0.995773 0 1.26692 0 1.60415V22.3958C0 22.7331 0.26683 23.0042 0.601341 23.0042ZM1.26397 2.21252H6.25092V21.7254H1.26397V2.21252ZM3.727 15.3948C3.3925 15.3948 3.12567 15.6659 3.12567 16.0031V20.2855C3.12567 20.6227 3.3925 20.8938 3.727 20.8938C4.0615 20.8938 4.32833 20.6227 4.32833 20.2855V16.0031C4.32833 15.6659 4.0615 15.3948 3.727 15.3948ZM15.1254 23.0042C15.46 23.0042 15.7268 22.7331 15.7268 22.3958V1.60415C15.7268 1.26692 15.46 0.995773 15.1254 0.995773H8.93582C8.60131 0.995773 8.33447 1.26692 8.33447 1.60415V22.3958C8.33447 22.7331 8.60131 23.0042 8.93582 23.0042H15.1254ZM16.6077 1.60415V22.3958C16.6077 22.7331 16.8745 23.0042 17.209 23.0042H23.3987C23.7332 23.0042 24 22.7331 24 22.3958V1.60415C24 1.26692 23.7332 0.995773 23.3987 0.995773H17.209C16.8745 0.995773 16.6077 1.26692 16.6077 1.60415ZM22.7973 21.7254H17.8104V2.21252H22.7973V21.7254ZM20.3347 15.3948C20.0002 15.3948 19.7333 15.6659 19.7333 16.0031V20.2855C19.7333 20.6227 20.0002 20.8938 20.3347 20.8938C20.6692 20.8938 20.936 20.6227 20.936 20.2855V16.0031C20.936 15.6659 20.6692 15.3948 20.3347 15.3948ZM9.53716 21.7254H14.5241V2.21252H9.53716V21.7254ZM12.0002 15.3948C11.6657 15.3948 11.3989 15.6659 11.3989 16.0031V20.2855C11.3989 20.6227 11.6657 20.8938 12.0002 20.8938C12.3347 20.8938 12.6015 20.6227 12.6015 20.2855V16.0079C12.6015 15.645 12.3314 15.3948 12.0002 15.3948Z",\n fill: "currentColor"\n }\n) }), Hu = () => /* @__PURE__ */ c("svg", { viewBox: "0 0 24 24", fill: "none", xmlns: "http://www.w3.org/2000/svg", children: /* @__PURE__ */ c(\n "path",\n {\n fillRule: "evenodd",\n clipRule: "evenodd",\n d: "M18.4769 10.1467C18.2027 9.87718 18.2027 9.54022 18.4769 9.27066L21.1497 6.70984C22.0407 5.83376 22.0407 4.41856 21.1497 3.54248L20.6015 3.00337C19.7105 2.12729 18.2713 2.12729 17.3803 3.00337L9.90997 10.3489C9.01901 11.225 9.01901 12.6402 9.90997 13.5163C10.1841 13.7858 10.1841 14.1228 9.90997 14.3923C9.77289 14.5271 9.56729 14.5945 9.43022 14.5945C9.22461 14.5945 9.08754 14.5271 8.95047 14.3923C7.57977 13.0445 7.57977 10.8207 8.95047 9.47284L16.4208 2.12728C17.7915 0.779473 20.0532 0.779473 21.4239 2.12728L21.9722 2.66641C23.3429 4.01422 23.3429 6.23809 21.9722 7.5859L19.3678 10.1467C19.0937 10.4163 18.751 10.4163 18.4769 10.1467ZM5.52332 13.8533C5.79746 14.1229 5.79746 14.4598 5.52332 14.7294L2.91898 17.2902C2.02803 18.1662 2.02803 19.5814 2.91898 20.4575L3.5358 20.9966C4.42676 21.8727 5.866 21.8727 6.75695 20.9966L14.2273 13.6511C15.1182 12.775 15.1182 11.3599 14.2273 10.4838C13.9531 10.2142 13.9531 9.87726 14.2273 9.6077C14.5014 9.33814 14.8441 9.33814 15.1182 9.6077C16.4889 10.9555 16.4889 13.1794 15.1182 14.5272L7.64791 21.8727C6.96256 22.5466 6.00307 22.8836 5.11211 22.8836C4.15262 22.8836 3.26166 22.5466 2.57631 21.8727L2.02803 21.3336C0.657324 19.9858 0.657324 17.7619 2.02803 16.4141L4.63236 13.8533C4.9065 13.5837 5.24918 13.5837 5.52332 13.8533Z",\n fill: "currentColor"\n }\n) }), Vu = () => /* @__PURE__ */ c("svg", { viewBox: "0 0 25 24", fill: "none", xmlns: "http://www.w3.org/2000/svg", children: /* @__PURE__ */ c(\n "path",\n {\n d: "M1.17979 21.8444L23.7532 3.25524C24.4916 2.7076 23.5582 1.61094 22.8093 2.16633L1.41574 19.7444V6.44419C1.41574 5.53934 0 5.53936 0 6.44419V21.3C0 21.9934 0.688854 22.0872 1.17979 21.8444Z",\n fill: "currentColor"\n }\n) }), Pu = () => /* @__PURE__ */ c("svg", { xmlns: "http://www.w3.org/2000/svg", viewBox: "0 0 24 24", fill: "none", children: /* @__PURE__ */ c(\n "path",\n {\n fillRule: "evenodd",\n clipRule: "evenodd",\n d: "M23.9 3.4C23.9 3.7 23.7 4.1 23.5 4.3L2.1 21.9H2C1.8 22 1.5 22.1 1.3 22.1C1.1 22.1 1 22.1 0.8 22C0.3 21.9 0 21.4 0 20.9V6.8C0 6.4 0.2 6.1 0.4 5.8C0.7 5.7 1 5.5 1.3 5.5C1.6 5.5 1.9 5.6 2.2 5.8C2.5 6 2.6 6.4 2.6 6.8V18.1L21.8 2.3C22.1 2.1 22.3 2 22.6 2C23 2 23.4 2.2 23.6 2.5C23.9 2.7 24 3.1 23.9 3.4Z",\n fill: "currentColor"\n }\n) }), Fu = () => /* @__PURE__ */ c("svg", { viewBox: "0 0 24 24", fill: "none", xmlns: "http://www.w3.org/2000/svg", children: /* @__PURE__ */ c(\n "path",\n {\n d: "M23.7647 6.86422C23.9216 6.70372 24 6.54322 24 6.30248C24 6.14199 23.9216 5.90124 23.7647 5.74074C23.451 5.41975 23.0588 5.41975 22.7451 5.74074L12 16.7346L1.2549 5.74074C0.941177 5.41975 0.54902 5.41975 0.235294 5.74074C-0.0784314 6.06173 -0.0784314 6.46295 0.235294 6.78394L11.451 18.2593C11.7647 18.5802 12.1569 18.5802 12.4706 18.2593L23.7647 6.86422Z",\n fill: "currentColor"\n }\n) }), Xu = () => /* @__PURE__ */ c("svg", { viewBox: "0 0 24 24", fill: "none", xmlns: "http://www.w3.org/2000/svg", children: /* @__PURE__ */ c(\n "path",\n {\n d: "M12.9477 18.208L23.574 7.48676L23.5775 7.48324C23.8374 7.21735 24 6.89469 24 6.46116C24 6.14048 23.864 5.73222 23.5775 5.43907C23.3262 5.18199 22.987 5 22.5928 5C22.1987 5 21.8595 5.18199 21.6082 5.43907L12 15.2697L2.39178 5.43907C2.14051 5.18199 1.80129 5 1.40715 5C1.01301 5 0.673793 5.18199 0.422523 5.43907C0.17054 5.69689 0 6.03666 0 6.42338C0 6.8101 0.17054 7.14987 0.422523 7.40769L10.9785 18.208C11.2297 18.4651 11.5689 18.6471 11.9631 18.6471C12.3562 18.6471 12.6947 18.466 12.9457 18.21L12.9477 18.208Z",\n fill: "currentColor"\n }\n) }), Uu = () => /* @__PURE__ */ c("svg", { viewBox: "0 0 24 24", fill: "none", xmlns: "http://www.w3.org/2000/svg", children: /* @__PURE__ */ c(\n "path",\n {\n d: "M11.0523 5.43907L0.425988 16.1603L0.422525 16.1638C0.162648 16.4297 0 16.7524 0 17.1859C0 17.5066 0.136008 17.9148 0.422525 18.208C0.673794 18.4651 1.01301 18.6471 1.40715 18.6471C1.8013 18.6471 2.14051 18.4651 2.39178 18.208L12 8.37733L21.6082 18.208C21.8595 18.4651 22.1987 18.6471 22.5928 18.6471C22.987 18.6471 23.3262 18.4651 23.5775 18.208C23.8295 17.9502 24 17.6104 24 17.2237C24 16.837 23.8295 16.4972 23.5775 16.2394L13.0215 5.43907C12.7703 5.18198 12.4311 5 12.0369 5C11.6438 5 11.3053 5.18103 11.0543 5.43705L11.0523 5.43907Z",\n fill: "currentColor"\n }\n) }), Yu = () => /* @__PURE__ */ c("svg", { viewBox: "0 0 24 24", fill: "none", xmlns: "http://www.w3.org/2000/svg", children: /* @__PURE__ */ c(\n "path",\n {\n d: "M17.1358 23.7647C17.2963 23.9216 17.4568 24 17.6975 24C17.858 24 18.0988 23.9216 18.2593 23.7647C18.5802 23.451 18.5802 23.0588 18.2593 22.7451L7.26541 12L18.2593 1.2549C18.5802 0.941177 18.5802 0.54902 18.2593 0.235294C17.9383 -0.0784314 17.537 -0.0784314 17.2161 0.235294L5.74074 11.451C5.41975 11.7647 5.41975 12.1569 5.74074 12.4706L17.1358 23.7647Z",\n fill: "currentColor"\n }\n) }), Gu = () => /* @__PURE__ */ c("svg", { viewBox: "0 0 24 24", fill: "none", xmlns: "http://www.w3.org/2000/svg", children: /* @__PURE__ */ c(\n "path",\n {\n d: "M5.73856 23.7647C5.89809 23.9216 6.0576 24 6.29689 24C6.53619 24 6.69572 23.9216 6.85525 23.7647L18.2615 12.549C18.5805 12.2353 18.5805 11.8431 18.2615 11.5294L6.77548 0.235294C6.45643 -0.0784314 6.05762 -0.0784314 5.73856 0.235294C5.4195 0.54902 5.4195 0.941177 5.73856 1.2549L16.6662 12L5.73856 22.7451C5.4195 22.9804 5.4195 23.451 5.73856 23.7647Z",\n fill: "currentColor"\n }\n) }), Qu = () => /* @__PURE__ */ c("svg", { viewBox: "0 0 24 25", fill: "none", xmlns: "http://www.w3.org/2000/svg", children: /* @__PURE__ */ c(\n "path",\n {\n d: "M18.3845 11.8758L7.66328 1.2495L7.65976 1.24604C7.39387 0.986165 7.0712 0.823517 6.63767 0.823517C6.31699 0.823517 5.90874 0.959525 5.61559 1.24604C5.3585 1.49731 5.17651 1.83653 5.17651 2.23067C5.17651 2.62481 5.3585 2.96403 5.61559 3.2153L15.4462 12.8235L5.61559 22.4317C5.3585 22.683 5.17651 23.0222 5.17651 23.4164C5.17651 23.8105 5.3585 24.1497 5.61559 24.401C5.8734 24.653 6.21317 24.8235 6.59989 24.8235C6.98662 24.8235 7.32639 24.653 7.5842 24.401L18.3845 13.8451C18.6416 13.5938 18.8236 13.2546 18.8236 12.8604C18.8236 12.4673 18.6425 12.1288 18.3865 11.8778L18.3845 11.8758Z",\n fill: "currentColor"\n }\n) }), Zu = () => /* @__PURE__ */ c(\n "svg",\n {\n width: "24",\n height: "25",\n viewBox: "0 0 24 25",\n fill: "none",\n xmlns: "http://www.w3.org/2000/svg",\n children: /* @__PURE__ */ c(\n "path",\n {\n d: "M5.61534 11.8758L16.3366 1.2495L16.3401 1.24604C16.606 0.986165 16.9286 0.823517 17.3622 0.823517C17.6828 0.823517 18.0911 0.959525 18.3843 1.24604C18.6413 1.49731 18.8233 1.83653 18.8233 2.23067C18.8233 2.62481 18.6413 2.96403 18.3843 3.2153L8.5536 12.8235L18.3843 22.4317C18.6413 22.683 18.8233 23.0222 18.8233 23.4164C18.8233 23.8105 18.6413 24.1497 18.3843 24.401C18.1264 24.653 17.7867 24.8235 17.3999 24.8235C17.0132 24.8235 16.6735 24.653 16.4156 24.401L5.61534 13.8451C5.35825 13.5938 5.17627 13.2546 5.17627 12.8604C5.17627 12.4673 5.3573 12.1288 5.61332 11.8778L5.61534 11.8758Z",\n fill: "currentColor"\n }\n )\n }\n), ju = () => /* @__PURE__ */ c("svg", { viewBox: "0 0 24 24", fill: "none", xmlns: "http://www.w3.org/2000/svg", children: /* @__PURE__ */ c(\n "path",\n {\n d: "M0.235296 17.1358C0.078434 17.2963 0 17.4568 0 17.6975C0 17.858 0.078434 18.0988 0.235296 18.2593C0.549021 18.5802 0.941177 18.5802 1.2549 18.2593L12 7.26541L22.7451 18.2593C23.0588 18.5802 23.451 18.5802 23.7647 18.2593C24.0784 17.9383 24.0784 17.537 23.7647 17.2161L12.549 5.74074C12.2353 5.41975 11.8431 5.41975 11.5294 5.74074L0.235296 17.1358Z",\n fill: "currentColor"\n }\n) }), Ku = () => /* @__PURE__ */ e1("svg", { viewBox: "0 0 24 24", fill: "none", xmlns: "http://www.w3.org/2000/svg", children: [\n /* @__PURE__ */ c("g", { clipPath: "url(#clip0_2346_129556)", children: /* @__PURE__ */ c(\n "path",\n {\n fillRule: "evenodd",\n clipRule: "evenodd",\n d: "M12 24C18.6274 24 24 18.6274 24 12C24 5.37258 18.6274 0 12 0C5.37258 0 0 5.37258 0 12C0 18.6274 5.37258 24 12 24ZM7.29289 7.29289C6.90237 7.68342 6.90237 8.31658 7.29289 8.70711L10.5858 12L7.29289 15.2929C6.90237 15.6834 6.90237 16.3166 7.29289 16.7071C7.68342 17.0976 8.31658 17.0976 8.70711 16.7071L12 13.4142L15.2929 16.7071C15.6834 17.0976 16.3166 17.0976 16.7071 16.7071C17.0976 16.3166 17.0976 15.6834 16.7071 15.2929L13.4142 12L16.7071 8.70711C17.0976 8.31658 17.0976 7.68342 16.7071 7.29289C16.3166 6.90237 15.6834 6.90237 15.2929 7.29289L12 10.5858L8.70711 7.29289C8.31658 6.90237 7.68342 6.90237 7.29289 7.29289Z",\n fill: "currentColor"\n }\n ) }),\n /* @__PURE__ */ c("defs", { children: /* @__PURE__ */ c("clipPath", { id: "clip0_2346_129556", children: /* @__PURE__ */ c("rect", { width: "24", height: "24", fill: "white" }) }) })\n] }), Ju = () => /* @__PURE__ */ c("svg", { viewBox: "0 0 24 24", fill: "none", xmlns: "http://www.w3.org/2000/svg", children: /* @__PURE__ */ c(\n "path",\n {\n fillRule: "evenodd",\n clipRule: "evenodd",\n d: "M0.256584 12.5246C-0.0690224 12.258 -0.101531 11.7514 0.256258 11.4529L7.23551 5.64658C7.40425 5.50188 7.58479 5.4607 7.75051 5.49623C7.91371 5.53121 8.05393 5.63862 8.15063 5.77522C8.34182 6.04531 8.38119 6.46381 8.05097 6.71864L1.7183 11.9933L8.05163 17.2591C8.23416 17.4091 8.32174 17.5874 8.33384 17.7642C8.34584 17.9396 8.28317 18.1068 8.1778 18.2359C8.07254 18.3649 7.92217 18.459 7.75418 18.4853C7.58456 18.512 7.40144 18.4688 7.23589 18.3309L0.256584 12.5246ZM9.48509 19.148L13.2655 4.47971C13.3133 4.27736 13.4314 4.14071 13.5802 4.06676C13.7274 3.99362 13.9001 3.98383 14.0572 4.02464C14.2144 4.06548 14.3612 4.15832 14.4544 4.29712C14.5486 4.4374 14.5845 4.61955 14.5272 4.82942L10.7468 19.4977C10.6945 19.7062 10.5749 19.8488 10.4256 19.9271C10.2777 20.0047 10.1052 20.0173 9.94836 19.9765C9.79143 19.9356 9.64629 19.8403 9.55483 19.6973C9.46258 19.553 9.42838 19.3653 9.48509 19.148ZM15.9612 6.71845C15.7928 6.58608 15.715 6.41639 15.7078 6.24504C15.7006 6.07532 15.7628 5.90841 15.8656 5.77733C15.9685 5.64625 16.1155 5.54683 16.2829 5.51712C16.4523 5.48706 16.6363 5.52962 16.8067 5.67143L23.7556 11.4524C24.0832 11.7209 24.0796 12.2593 23.7559 12.5245L16.7765 18.3309C16.6109 18.4688 16.4287 18.5085 16.2604 18.4771C16.0941 18.4461 15.9464 18.3467 15.8432 18.2151C15.7399 18.0835 15.678 17.9155 15.6885 17.743C15.6992 17.5689 15.7835 17.3964 15.9613 17.2586L22.2941 11.9933L15.9612 6.71845Z",\n fill: "currentcolor"\n }\n) }), _u = () => /* @__PURE__ */ c("svg", { xmlns: "http://www.w3.org/2000/svg", viewBox: "0 0 24 24", fill: "none", children: /* @__PURE__ */ c(\n "path",\n {\n fillRule: "evenodd",\n clipRule: "evenodd",\n d: "M22.7 11.3C21.8 10.4 20.7 9.9 19.5 9.9C19.3 9.9 19.1 9.9 18.9 10C17.9 7 15.2 5 12 5C9.9 5 7.9 6 6.6 7.6C6.3 7.6 6.1 7.5 5.8 7.5C2.6 7.5 0 10.2 0 13.4C0 16.6 2.6 19.3 5.8 19.3H19.4C21.9 19.3 24 17.2 24 14.6C24 13.4 23.5 12.2 22.7 11.3ZM19.4 17.5H5.9C3.7 17.5 1.9 15.7 1.9 13.4C1.9 11.1 3.7 9.3 5.9 9.3C6.2 9.3 6.6 9.4 6.8 9.4C6.9 9.4 6.9 9.4 7 9.4C7.3 9.4 7.6 9.3 7.8 9C8.9 7.5 10.4 6.7 12.1 6.7C14.7 6.7 16.9 8.6 17.3 11.1C17.3 11.4 17.4 11.7 17.7 11.9C17.8 12 18 12.1 18.1 12.1C18.2 12.1 18.4 12.1 18.5 12C18.8 11.9 19.2 11.8 19.5 11.8C21 11.8 22.3 13.1 22.3 14.7C22.2 16.2 21 17.5 19.4 17.5Z",\n fill: "currentColor"\n }\n) }), $u = () => /* @__PURE__ */ c("svg", { viewBox: "0 0 24 24", fill: "none", xmlns: "http://www.w3.org/2000/svg", children: /* @__PURE__ */ c(\n "path",\n {\n fillRule: "evenodd",\n clipRule: "evenodd",\n d: "M0.0492158 14.775C0.124142 14.55 0.273995 14.4 0.498775 14.325C1.54775 13.95 2.52179 13.65 3.57076 13.425V10.575C2.67164 10.35 1.6976 10.05 0.573702 9.67502C0.348922 9.60002 0.199069 9.45 0.124142 9.22499C0.0492158 8.99999 0.124142 8.775 0.199069 8.625L3.19613 3.44998C3.34598 3.22498 3.49584 3.07498 3.72062 3.07498C3.9454 2.99998 4.17018 3.07499 4.32003 3.22499C5.21915 3.97499 5.96841 4.64998 6.64275 5.32498L9.0404 3.90001C8.81562 2.92501 8.59084 1.94998 8.36606 0.824982C8.36606 0.599982 8.36606 0.374991 8.51592 0.224991C8.66577 0.0749909 8.81562 0 9.0404 0H15.0345C15.2593 0 15.4092 0.0749909 15.559 0.224991C15.7089 0.374991 15.7838 0.599982 15.7089 0.824982C15.4841 2.02498 15.2593 3.00001 15.0345 3.90001L17.4322 5.32498C18.1065 4.64998 18.8558 3.97499 19.7549 3.22499C19.9048 3.07499 20.1295 3.07498 20.3543 3.07498C20.5791 3.14998 20.8039 3.29998 20.8788 3.44998L23.8759 8.625C24.0257 8.85 24.0257 8.99999 23.9508 9.22499C23.8759 9.45 23.726 9.60002 23.5012 9.67502C22.3773 10.05 21.4033 10.35 20.5042 10.575V13.425C21.4033 13.65 22.3773 13.95 23.5012 14.325C23.726 14.4 23.8759 14.55 23.9508 14.775C24.0257 15 23.9508 15.225 23.8759 15.375L20.8788 20.55C20.7289 20.775 20.5791 20.925 20.3543 20.925C20.1295 21 19.9048 20.925 19.7549 20.775C18.8558 20.025 18.1065 19.35 17.4322 18.675L15.0345 20.1C15.2593 21.075 15.4841 22.05 15.7089 23.175C15.7089 23.4 15.7089 23.625 15.559 23.775C15.4092 23.925 15.2593 24 15.0345 24H9.0404C8.81562 24 8.66577 23.925 8.51592 23.775C8.36606 23.625 8.29114 23.4 8.36606 23.175C8.59084 21.975 8.81562 21 9.0404 20.1L6.56783 18.675C5.89349 19.35 5.14422 20.025 4.2451 20.775C4.09525 20.925 3.87047 20.925 3.64569 20.925C3.42091 20.85 3.19613 20.7 3.1212 20.55L0.124142 15.375C-0.0257108 15.15 -0.0257107 15 0.0492158 14.775ZM4.31996 9.37499L4.32003 9.375C4.61974 9.45 4.84451 9.67502 4.84451 10.05V13.95C4.84451 14.25 4.61974 14.55 4.32003 14.625L4.31996 14.625C3.49579 14.85 2.67162 15.075 1.6976 15.375L3.87047 19.05C4.61973 18.375 5.21915 17.775 5.81856 17.175C6.04334 16.95 6.34305 16.875 6.64275 17.025L10.0144 18.975C10.2392 19.2 10.3891 19.5 10.3142 19.8C10.2107 20.3178 10.0715 20.9072 9.92127 21.5433C9.85391 21.8286 9.78433 22.1232 9.71474 22.425H13.9856C13.8357 21.45 13.6109 20.625 13.3861 19.8C13.3112 19.425 13.3861 19.125 13.6858 18.975L17.0575 17.025C17.2823 16.875 17.657 16.95 17.8817 17.175C18.4811 17.775 19.0806 18.375 19.8298 19.05L22.0027 15.375C21.0287 15.075 20.2045 14.85 19.3803 14.625L19.3803 14.625C19.0806 14.55 18.8558 14.25 18.8558 13.95V10.05C18.8558 9.75002 19.0806 9.45 19.3803 9.375L19.3803 9.375C20.2045 9.15 21.0287 8.925 22.0027 8.625L19.8298 4.94998C19.0806 5.62498 18.4811 6.22498 17.8817 6.82498C17.657 7.04998 17.3572 7.12499 17.0575 6.97499L13.6858 5.02501C13.4611 4.80001 13.3112 4.49998 13.3861 4.19998C13.487 3.6448 13.6218 3.08961 13.7676 2.48871C13.8385 2.19668 13.912 1.89385 13.9856 1.57498H9.71474C9.86459 2.54998 10.0894 3.37498 10.3142 4.19998C10.3891 4.57498 10.3142 4.87501 10.0144 5.02501L6.64275 6.97499C6.41797 7.12499 6.04334 7.04998 5.81856 6.82498C5.21915 6.22498 4.61973 5.62498 3.87047 4.94998L1.6976 8.625C2.67162 8.925 3.49579 9.14999 4.31996 9.37499ZM16.1581 12C16.1581 14.3249 14.21 16.2749 11.8874 16.2749C9.48981 16.2749 7.6167 14.3249 7.6167 12C7.6167 9.67507 9.56474 7.72511 11.8874 7.72511C14.21 7.72511 16.1581 9.67507 16.1581 12ZM14.8094 12C14.8094 10.3501 13.4608 9.07507 11.8874 9.07507C10.2391 9.07507 8.96534 10.3501 8.96534 12C8.96534 13.65 10.314 14.9249 11.8874 14.9249C13.5357 14.9249 14.8094 13.575 14.8094 12Z",\n fill: "currentColor"\n }\n) }), ez = () => /* @__PURE__ */ c("svg", { xmlns: "http://www.w3.org/2000/svg", viewBox: "0 0 24 24", fill: "none", children: /* @__PURE__ */ c(\n "path",\n {\n fillRule: "evenodd",\n clipRule: "evenodd",\n d: "M23.5 14.3C22.4 13.9 21.4 13.6 20.5 13.4V10.5C21.4 10.3 22.4 10 23.5 9.6C23.7 9.5 23.9 9.4 24 9.1C24 9 24 8.9 23.9 8.6L20.9 3.4C20.8 3.3 20.6 3.1 20.4 3C20.2 3 20 3 19.8 3.2C18.9 4 18.2 4.6 17.5 5.3L15 3.9C15.3 3 15.5 2 15.7 0.8C15.8 0.6 15.7 0.3 15.5 0.2C15.4 0.1 15.3 0 15 0H9C8.8 0 8.7 0.1 8.5 0.2C8.4 0.4 8.4 0.6 8.4 0.8C8.6 2 8.8 2.9 9 3.9L6.6 5.3C6 4.7 5.2 4 4.3 3.2C4.2 3.1 4 3 3.7 3.1C3.5 3.1 3.3 3.3 3.2 3.5L0.2 8.7C0.1 8.8 0.1 9 0.1 9.2C0.2 9.4 0.3 9.6 0.6 9.7C1.7 10.1 2.7 10.4 3.6 10.6V13.5C2.6 13.7 1.6 14 0.5 14.4C0.3 14.5 0.1 14.6 0 14.9C0 15 0 15.2 0.1 15.4L3.1 20.6C3.2 20.7 3.4 20.9 3.6 21C3.8 21 4 21 4.2 20.8C5.1 20 5.8 19.4 6.5 18.7L9 20.1C8.8 21 8.6 22 8.4 23.2C8.3 23.4 8.4 23.6 8.6 23.8C8.7 23.9 8.8 24 9 24H15C15.2 24 15.4 23.9 15.5 23.8C15.6 23.7 15.7 23.4 15.7 23.2C15.5 22.1 15.2 21.1 15 20.1L17.4 18.7C18.1 19.4 18.8 20 19.7 20.8C19.9 21 20.1 21 20.3 21C20.5 21 20.7 20.8 20.8 20.6L23.8 15.4C24 15.2 24 15 24 14.8C23.9 14.6 23.7 14.4 23.5 14.3ZM11.9 9.1C13.5 9.1 14.8 10.4 14.8 12C14.8 13.6 13.5 14.9 11.9 14.9C10.3 14.9 9 13.7 9 12C9 10.4 10.2 9.1 11.9 9.1Z",\n fill: "currentColor"\n }\n) }), tz = () => /* @__PURE__ */ e1("svg", { viewBox: "0 0 24 24", fill: "none", xmlns: "http://www.w3.org/2000/svg", children: [\n /* @__PURE__ */ c(\n "path",\n {\n fillRule: "evenodd",\n clipRule: "evenodd",\n d: "M1.09091 1.09091H8.03306V22.9091H1.09091L1.09091 1.09091ZM1.09091 23.9008C0.543189 23.9008 0.0991736 23.4568 0.0991736 22.9091V1.09091C0.0991736 0.543189 0.543189 0.0991736 1.09091 0.0991736H22.9091C23.4568 0.0991736 23.9008 0.543189 23.9008 1.09091V22.9091C23.9008 23.4568 23.4568 23.9008 22.9091 23.9008H1.09091ZM9.02479 1.09091V22.9091H14.9752V1.09091H9.02479ZM15.9669 22.9091V1.09091H22.9091V22.9091H15.9669Z",\n fill: "currentColor"\n }\n ),\n /* @__PURE__ */ c(\n "path",\n {\n fillRule: "evenodd",\n clipRule: "evenodd",\n d: "M1.09091 1.09091H8.03306V22.9091H1.09091L1.09091 1.09091ZM1.19008 22.8099H7.93388V1.19008H1.19008L1.19008 22.8099ZM1.09091 24C0.488417 24 0 23.5116 0 22.9091V1.09091C0 0.488417 0.488417 0 1.09091 0H22.9091C23.5116 0 24 0.488417 24 1.09091V22.9091C24 23.5116 23.5116 24 22.9091 24H1.09091ZM9.12397 1.19008V22.8099H14.876V1.19008H9.12397ZM15.9669 22.9091V1.09091H22.9091V22.9091H15.9669ZM22.8099 22.8099V1.19008H16.0661V22.8099H22.8099ZM1.09091 23.9008H22.9091C23.4568 23.9008 23.9008 23.4568 23.9008 22.9091V1.09091C23.9008 0.543189 23.4568 0.0991736 22.9091 0.0991736H1.09091C0.543189 0.0991736 0.0991736 0.543189 0.0991736 1.09091V22.9091C0.0991736 23.4568 0.543189 23.9008 1.09091 23.9008ZM9.02479 1.09091H14.9752V22.9091H9.02479V1.09091Z",\n fill: "currentColor"\n }\n )\n] }), oz = () => /* @__PURE__ */ e1("svg", { viewBox: "0 0 24 24", fill: "none", xmlns: "http://www.w3.org/2000/svg", children: [\n /* @__PURE__ */ c(\n "path",\n {\n d: "M4.9 0H1.2C0.5 0 0 0.5 0 1.2V22.8C0 23.4 0.5 24 1.2 24H5C5.6 24 6.2 23.5 6.2 22.8V1.2C6.1 0.5 5.6 0 4.9 0Z",\n fill: "currentColor"\n }\n ),\n /* @__PURE__ */ c(\n "path",\n {\n d: "M13.9 0H10.1C9.5 0 9 0.5 9 1.2V22.8C9 23.4 9.5 24 10.2 24H14C14.6 24 15.2 23.5 15.2 22.8V1.2C15 0.5 14.5 0 13.9 0Z",\n fill: "currentColor"\n }\n ),\n /* @__PURE__ */ c(\n "path",\n {\n d: "M22.8 0H19C18.4 0 17.8 0.5 17.8 1.2V22.8C17.8 23.4 18.3 24 19 24H22.8C23.4 24 24 23.5 24 22.8V1.2C24 0.5 23.5 0 22.8 0Z",\n fill: "currentColor"\n }\n )\n] }), rz = () => /* @__PURE__ */ c("svg", { viewBox: "0 0 24 24", fill: "none", xmlns: "http://www.w3.org/2000/svg", children: /* @__PURE__ */ c(\n "path",\n {\n d: "M0.708216 24H14.7934H23.2918C23.6852 24 24 23.6852 24 23.2918V0.708192C24 0.314749 23.6852 0 23.2918 0H14.7934H0.708216C0.314773 0 0 0.314749 0 0.708192V6.37376V23.2918C0 23.6852 0.314773 24 0.708216 24ZM1.41638 7.08197H14.0853V22.5836H1.41638V7.08197ZM22.5836 22.5049H15.5803V6.29508V1.4164H22.5836V22.5049ZM1.41638 1.4164H14.0853V5.58688H1.41638V1.4164Z",\n fill: "currentColor"\n }\n) }), nz = () => /* @__PURE__ */ e1("svg", { xmlns: "http://www.w3.org/2000/svg", viewBox: "0 0 24 24", fill: "none", children: [\n /* @__PURE__ */ c(\n "path",\n {\n d: "M22.8 0H17.5C16.9 0 16.3 0.5 16.3 1.2V22.8C16.3 23.4 16.8 24 17.5 24H22.8C23.4 24 24 23.5 24 22.8V1.2C24 0.5 23.5 0 22.8 0Z",\n fill: "currentColor"\n }\n ),\n /* @__PURE__ */ c(\n "path",\n {\n d: "M12.4 7.9H1.2C0.5 7.9 0 8.5 0 9.1V22.8C0 23.5 0.5 24 1.2 24H12.4C13 24 13.6 23.5 13.6 22.8V9.1C13.5 8.5 13 7.9 12.4 7.9Z",\n fill: "currentColor"\n }\n ),\n /* @__PURE__ */ c(\n "path",\n {\n d: "M12.4 0H1.2C0.5 0 0 0.5 0 1.2V4C0 4.6 0.5 5.2 1.2 5.2H12.4C13 5.2 13.6 4.7 13.6 4V1.2C13.5 0.5 13 0 12.4 0Z",\n fill: "currentColor"\n }\n )\n] }), iz = () => /* @__PURE__ */ e1("svg", { viewBox: "0 0 24 24", fill: "none", xmlns: "http://www.w3.org/2000/svg", children: [\n /* @__PURE__ */ e1("g", { clipPath: "url(#clip0_2721_61458)", children: [\n /* @__PURE__ */ c(\n "path",\n {\n fillRule: "evenodd",\n clipRule: "evenodd",\n d: "M8.3 8.3V22.7H22.7V8.3H8.3ZM8 7C7.44772 7 7 7.44772 7 8V23C7 23.5523 7.44772 24 8 24H23C23.5523 24 24 23.5523 24 23V8C24 7.44772 23.5523 7 23 7H8Z",\n fill: "currentcolor"\n }\n ),\n /* @__PURE__ */ c(\n "path",\n {\n fillRule: "evenodd",\n clipRule: "evenodd",\n d: "M1.3 1.3V15.7H15.7V1.3H1.3ZM1 0C0.447715 0 0 0.447715 0 1V16C0 16.5523 0.447715 17 1 17H16C16.5523 17 17 16.5523 17 16V1C17 0.447715 16.5523 0 16 0H1Z",\n fill: "currentColor"\n }\n )\n ] }),\n /* @__PURE__ */ c("defs", { children: /* @__PURE__ */ c("clipPath", { id: "clip0_2721_61458", children: /* @__PURE__ */ c("rect", { width: "24", height: "24", fill: "currentColor" }) }) })\n] }), az = () => /* @__PURE__ */ e1("svg", { viewBox: "0 0 24 24", fill: "none", xmlns: "http://www.w3.org/2000/svg", children: [\n /* @__PURE__ */ c(\n "path",\n {\n fillRule: "evenodd",\n clipRule: "evenodd",\n d: "M18.89 19.33H15.14V8.3122H18.89V19.33ZM17.5 9.46H16.5V18.1946H17.5V9.46Z",\n fill: "currentcolor"\n }\n ),\n /* @__PURE__ */ c(\n "path",\n {\n fillRule: "evenodd",\n clipRule: "evenodd",\n d: "M10.25 8.3122V19.33H13.75V8.3122H10.25ZM11.61 18.1946V9.46H12.39V18.1946H11.61Z",\n fill: "currentcolor"\n }\n ),\n /* @__PURE__ */ c(\n "path",\n {\n fillRule: "evenodd",\n clipRule: "evenodd",\n d: "M8.85999 19.33H5.10999V8.3122H8.85999V19.33ZM7.46999 9.46H6.46999V18.1946H7.46999V9.46Z",\n fill: "currentcolor"\n }\n ),\n /* @__PURE__ */ c(\n "path",\n {\n fillRule: "evenodd",\n clipRule: "evenodd",\n d: "M24 6.19V9.46H21.64V17.89H22.47V19.49H24V23H0V19.49H1.53V17.89H2.36V9.46H0V6.19C0 6.19 11.651 1 12 1C12.349 0.999998 24 6.19 24 6.19ZM21.4076 20.6628V19.33H20.4197V8.3122H22.7734V6.99886L12 2.40886L1.20898 6.99886V8.3122H3.557V19.33H2.61614V20.6628H1.20898V21.8558H22.7734V20.6628H21.4076Z",\n fill: "currentcolor"\n }\n )\n] }), sz = () => /* @__PURE__ */ c("svg", { viewBox: "0 0 24 24", fill: "none", xmlns: "http://www.w3.org/2000/svg", children: /* @__PURE__ */ c(\n "path",\n {\n d: "M4.30916 20.8102L12.027 13.0924L19.7195 20.7849C20.0066 21.0719 20.4666 21.0712 20.7545 20.7832C21.0425 20.4952 21.0433 20.0352 20.7562 19.7482L13.0637 12.0556L20.7815 4.3378C21.0695 4.04983 21.0703 3.58981 20.7832 3.30278C20.4962 3.01575 20.0362 3.0165 19.7482 3.30448L12.088 10.9647L4.33806 3.21478C4.05102 2.92775 3.59101 2.9285 3.30303 3.21648C3.01505 3.50446 3.0143 3.96447 3.30133 4.2515L10.9939 11.944L3.21843 19.7194C2.93046 20.0074 2.9297 20.4674 3.21673 20.7545C3.50377 21.0415 4.02119 21.0982 4.30916 20.8102Z",\n fill: "currentColor"\n }\n) }), cz = () => /* @__PURE__ */ c("svg", { xmlns: "http://www.w3.org/2000/svg", viewBox: "0 0 24 24", fill: "none", children: /* @__PURE__ */ c(\n "path",\n {\n d: "M14.175 12.5L21.575 5.1C22.075 4.6 22.075 3.9 21.575 3.5C21.375 3.3 21.075 3.2 20.775 3.2C20.475 3.2 20.175 3.3 19.975 3.5L12.575 10.8L5.175 3.3C4.875 3.1 4.675 3 4.275 3C3.975 3 3.675 3.1 3.475 3.3C3.275 3.6 3.175 3.9 3.175 4.2C3.175 4.5 3.275 4.8 3.475 5L10.875 12.4L3.375 19.9C2.875 20.4 2.875 21.1 3.375 21.5C3.575 21.7 3.975 21.9 4.275 21.9C4.575 21.9 4.875 21.8 5.075 21.6L12.475 14.2L19.875 21.6C20.075 21.8 20.375 21.9 20.675 21.9C20.975 21.9 21.275 21.8 21.475 21.6C21.975 21.1 21.975 20.4 21.475 20L14.175 12.5Z",\n fill: "currentColor"\n }\n) }), lz = () => /* @__PURE__ */ c("svg", { viewBox: "0 0 24 24", fill: "none", xmlns: "http://www.w3.org/2000/svg", children: /* @__PURE__ */ c(\n "path",\n {\n d: "M0 23.0326C0.00776142 23.5458 0.436899 23.9921 0.967454 24.0001L15.1594 21.4177C15.5754 21.3645 15.8669 20.9521 15.7405 20.4738C15.6746 20.056 15.2532 19.7519 14.7785 19.8637L3.08071 22.0077L23.7847 1.30369C24.078 1.01043 24.0707 0.533945 23.7684 0.231611C23.4661 -0.0707233 22.9896 -0.077999 22.6963 0.215259L2.05093 20.8606L4.19501 9.16292C4.24821 8.74691 3.94403 8.32543 3.58486 8.20086C3.16704 8.13495 2.75463 8.42636 2.64096 8.7819L0 23.0326Z",\n fill: "currentcolor"\n }\n) }), pz = () => /* @__PURE__ */ c("svg", { xmlns: "http://www.w3.org/2000/svg", viewBox: "0 0 24 24", fill: "none", children: /* @__PURE__ */ c(\n "path",\n {\n d: "M22 14.3883C20.5942 15.6649 18.7169 16.4445 16.6547 16.4445C12.2966 16.4445 8.76372 12.9623 8.76372 8.66673C8.76372 5.84348 10.2899 3.37156 12.5734 2.00873C12.4315 2.00293 12.2889 2 12.1456 2C6.54233 2 2 6.47715 2 12C2 17.5228 6.54233 22 12.1456 22C16.9137 22 20.9136 18.758 22 14.3883Z",\n fill: "currentcolor"\n }\n) }), dz = () => /* @__PURE__ */ c("svg", { viewBox: "0 0 24 24", fill: "none", xmlns: "http://www.w3.org/2000/svg", children: /* @__PURE__ */ c(\n "path",\n {\n fillRule: "evenodd",\n clipRule: "evenodd",\n d: "M23.9457 23.1491C24.0519 23.3692 23.9911 23.5868 23.8603 23.7424C23.7308 23.8967 23.5259 24 23.3212 24H0.658159C0.231903 24 -0.107159 23.5739 0.0314981 23.1556L2.87181 14.6464C2.97404 14.3382 3.24032 14.2214 3.51263 14.2214H6.33872C6.68981 14.2214 6.97042 14.5044 6.97042 14.8562C6.97042 15.208 6.6898 15.4909 6.33872 15.4909H3.98404L1.56502 22.7305H22.4144L19.9954 15.4909H17.6407C17.2896 15.4909 17.009 15.208 17.009 14.8562C17.009 14.5044 17.2896 14.2214 17.6407 14.2214H20.481C20.7424 14.2214 21.0329 14.3538 21.1088 14.6498L23.9457 23.1491ZM12.0192 0C15.5065 0 18.3315 2.8416 18.3315 6.34716C18.3315 7.15594 18.0169 8.22241 17.5428 9.37493C17.0674 10.5305 16.4266 11.784 15.7642 12.9709C14.439 15.3448 13.0228 17.4593 12.6571 18.0026C12.5045 18.2294 12.2761 18.363 12.0382 18.3739C11.798 18.385 11.5612 18.2703 11.3982 18.0271C11.0641 17.5286 9.64365 15.4001 8.30646 13.005C7.63793 11.8076 6.98918 10.5417 6.5073 9.3784C6.02675 8.21833 5.70699 7.14842 5.70699 6.34716C5.70699 2.8416 8.53199 0 12.0192 0ZM16.462 8.49013C16.8043 7.62162 17.0089 6.87771 17.0089 6.34716C17.0089 3.54597 14.7459 1.32891 12.0192 1.32891C9.2926 1.32891 7.02954 3.54597 7.02954 6.34716C7.02954 6.89312 7.23078 7.64488 7.56833 8.51576C7.9048 9.38385 8.37256 10.3601 8.89675 11.3512C9.91237 13.2716 11.1364 15.2417 12.0179 16.5786C12.8729 15.2401 14.097 13.2561 15.1196 11.3288C15.6475 10.3338 16.1209 9.35557 16.462 8.49013ZM12.019 9.83769C10.1295 9.83769 8.5472 8.24576 8.5472 6.34689C8.5472 4.38851 10.0703 2.85605 12.019 2.85605C13.9086 2.85605 15.4909 4.44801 15.4909 6.34689C15.4909 8.24576 13.9086 9.83769 12.019 9.83769ZM11.9599 8.5683C13.2048 8.5683 14.1684 7.54382 14.1684 6.34689C14.1684 5.14995 13.2048 4.12543 11.9599 4.12543C10.715 4.12543 9.75134 5.14995 9.75134 6.34689C9.75134 7.60001 10.7709 8.5683 11.9599 8.5683Z",\n fill: "currentColor"\n }\n) }), bz = () => /* @__PURE__ */ e1("svg", { viewBox: "0 0 24 24", fill: "none", xmlns: "http://www.w3.org/2000/svg", children: [\n /* @__PURE__ */ c(\n "path",\n {\n d: "M23.2386 6.67791H9.06435C8.76782 6.67791 8.53058 6.91487 8.53058 7.21109V12.306H3.43026C3.37095 12.306 3.31163 12.306 3.19302 12.3653C3.13371 12.3653 3.07441 12.4245 3.01511 12.4837L1.1173 14.3795V2.11617H14.224V4.42667C14.224 4.72288 14.4612 4.95985 14.7577 4.95985C15.0543 4.95985 15.2915 4.72288 15.2915 4.42667V1.58298C15.2915 1.28676 15.0543 1.0498 14.7577 1.0498H0.583563C0.287032 1.0498 0.0497925 1.28676 0.0497925 1.58298V15.7421C0.0497925 15.9791 0.168427 16.1568 0.405652 16.2753C0.464958 16.2753 0.524243 16.3345 0.642855 16.3345C0.761468 16.3345 0.939394 16.2753 1.05801 16.1568L3.72679 13.4909H8.6492V18.5858C8.6492 18.882 8.88644 19.119 9.18297 19.119H20.2732L22.942 21.7849C23.0606 21.9034 23.1792 21.9627 23.3571 21.9627C23.4165 21.9627 23.4758 21.9627 23.5944 21.9034C23.7723 21.8442 23.9502 21.6072 23.9502 21.3702V7.21109C23.7723 6.91487 23.5351 6.67791 23.2386 6.67791ZM22.6455 20.0669L20.7477 18.1711C20.6884 18.1118 20.6291 18.0526 20.5698 18.0526C20.5105 18.0526 20.4512 17.9934 20.3325 17.9934H9.53879V7.74428H22.6455V20.0669Z",\n fill: "currentColor"\n }\n ),\n /* @__PURE__ */ c(\n "path",\n {\n fillRule: "evenodd",\n clipRule: "evenodd",\n d: "M0.405652 16.2753C0.168427 16.1568 0.0497925 15.9791 0.0497925 15.7421V1.58298C0.0497925 1.28676 0.287032 1.0498 0.583563 1.0498H14.7577C15.0543 1.0498 15.2915 1.28676 15.2915 1.58298V4.42667C15.2915 4.72288 15.0543 4.95985 14.7577 4.95985C14.4612 4.95985 14.224 4.72288 14.224 4.42667V2.11617H1.1173V14.3795L3.01511 12.4837C3.07441 12.4245 3.13371 12.3653 3.19302 12.3653C3.31163 12.306 3.37095 12.306 3.43026 12.306H8.53058V7.21109C8.53058 6.91487 8.76782 6.67791 9.06435 6.67791H23.2386C23.5351 6.67791 23.7723 6.91487 23.9502 7.21109V21.3702C23.9502 21.6072 23.7723 21.8442 23.5944 21.9034C23.4758 21.9627 23.4165 21.9627 23.3571 21.9627C23.1792 21.9627 23.0606 21.9034 22.942 21.7849L20.2732 19.119H9.18297C8.88644 19.119 8.6492 18.882 8.6492 18.5858V13.4909H3.72679L1.05801 16.1568C0.939394 16.2753 0.761468 16.3345 0.642855 16.3345C0.573374 16.3345 0.52425 16.3142 0.483555 16.2974C0.454779 16.2855 0.430217 16.2753 0.405652 16.2753ZM3.7474 13.5407L1.0932 16.1921C0.96463 16.3205 0.773766 16.3843 0.642855 16.3843C0.574524 16.3843 0.523306 16.3671 0.48354 16.3512C0.475715 16.348 0.468955 16.3452 0.462802 16.3427C0.45237 16.3384 0.443681 16.3348 0.4345 16.3315C0.421038 16.3268 0.412337 16.3251 0.405652 16.3251H0.393909L0.383403 16.3199C0.258887 16.2577 0.162498 16.1784 0.0973471 16.0808C0.0319865 15.9829 0 15.8693 0 15.7421V1.58298C0 1.25921 0.259585 1 0.583563 1H14.7577C15.0817 1 15.3413 1.25921 15.3413 1.58298V4.42667C15.3413 4.75044 15.0817 5.00965 14.7577 5.00965C14.4338 5.00965 14.1742 4.75043 14.1742 4.42667V2.16596H1.16709V14.2594L2.98131 12.4471C3.00995 12.4185 3.0417 12.3868 3.07421 12.3624C3.10367 12.3404 3.13961 12.3197 3.18023 12.3161C3.23805 12.2879 3.28395 12.2726 3.32412 12.2646C3.36604 12.2562 3.3998 12.2562 3.42931 12.2562H8.48079V7.21109C8.48079 6.88732 8.74037 6.62811 9.06435 6.62811H23.2386C23.5634 6.62811 23.8135 6.88672 23.9929 7.18545L24 7.19729V21.3702C24 21.5008 23.9512 21.629 23.8799 21.7318C23.8098 21.8331 23.7142 21.9149 23.6136 21.9495C23.5527 21.9796 23.5049 21.9958 23.4633 22.0041C23.4214 22.0125 23.3876 22.0125 23.3581 22.0125H23.3571C23.2624 22.0125 23.1812 21.9966 23.1071 21.9637C23.0333 21.931 22.9691 21.8823 22.9068 21.8202L20.2526 19.1688H9.18297C8.85899 19.1688 8.59941 18.9096 8.59941 18.5858V13.5407H3.7474ZM22.6455 20.0669V7.74428H9.53879V17.9934H20.3325C20.402 17.9934 20.4512 18.0137 20.4919 18.0305C20.5206 18.0425 20.5452 18.0526 20.5698 18.0526C20.6291 18.0526 20.6884 18.1118 20.7477 18.1711L22.6455 20.0669ZM22.5957 19.9468V7.79407H9.58859V17.9436H20.3325C20.4009 17.9436 20.4521 17.9609 20.4919 17.9768C20.4997 17.9799 20.5065 17.9827 20.5126 17.9852C20.523 17.9896 20.5317 17.9932 20.5409 17.9964C20.5544 18.0011 20.5631 18.0028 20.5698 18.0028C20.6157 18.0028 20.6561 18.0254 20.6886 18.0498C20.7211 18.0741 20.7528 18.1058 20.7815 18.1344L22.5957 19.9468Z",\n fill: "currentColor"\n }\n )\n] }), Mz = () => /* @__PURE__ */ e1("svg", { xmlns: "http://www.w3.org/2000/svg", viewBox: "0 0 24 24", fill: "none", children: [\n /* @__PURE__ */ c(\n "path",\n {\n fillRule: "evenodd",\n clipRule: "evenodd",\n d: "M24 7.2V21.4C24 21.5 24 21.7 23.9 21.8C23.8 21.9 23.7 22 23.6 22C23.5 22 23.5 22 23.5 22H23.4C23.3 22 23.2 22 23.2 22C23.1 22 23.1 21.9 23 21.9L20.3 19.3H9.2C8.9 19.3 8.6 19 8.6 18.7V7.7C8.6 7.3 8.8 7 9.2 6.9C9.3 6.9 9.4 6.9 9.5 6.9H23.3C23.7963 6.9 23.8 6.9 24 7.2Z",\n fill: "currentColor"\n }\n ),\n /* @__PURE__ */ c(\n "path",\n {\n fillRule: "evenodd",\n clipRule: "evenodd",\n d: "M15.3 1.6V4.8H8C7.3 4.8 6.8 5.4 6.8 6V13.5H3.8L1.1 16.1C1 16.2 0.8 16.3 0.6 16.3C0.5 16.3 0.5 16.3 0.4 16.3C0.3 16.2 0.2 16.2 0.1 16.1C0 16 0 15.9 0 15.7V1.6C0 1.3 0.3 1 0.6 1H14.8C15.1 1 15.3 1.3 15.3 1.6Z",\n fill: "currentColor"\n }\n )\n] }), Az = () => /* @__PURE__ */ c("svg", { viewBox: "0 0 24 24", fill: "none", xmlns: "http://www.w3.org/2000/svg", children: /* @__PURE__ */ c(\n "path",\n {\n fillRule: "evenodd",\n clipRule: "evenodd",\n d: "M24 12C24 18.6274 18.6274 24 12 24C5.37258 24 0 18.6274 0 12C0 5.37258 5.37258 0 12 0C18.6274 0 24 5.37258 24 12ZM19.4953 4.50467C21.4136 6.42289 22.6 9.07289 22.6 12C22.6 17.8542 17.8542 22.6 12 22.6C9.07289 22.6 6.42289 21.4136 4.50467 19.4953L19.4953 4.50467ZM18.4401 3.57999L3.57999 18.4401C2.21256 16.655 1.4 14.4224 1.4 12C1.4 6.14578 6.14578 1.4 12 1.4C14.4224 1.4 16.655 2.21256 18.4401 3.57999Z",\n fill: "currentColor"\n }\n) }), uz = () => /* @__PURE__ */ c("svg", { xmlns: "http://www.w3.org/2000/svg", viewBox: "0 0 24 24", fill: "none", children: /* @__PURE__ */ c(\n "path",\n {\n fillRule: "evenodd",\n clipRule: "evenodd",\n d: "M12 0C5.4 0 0 5.4 0 12C0 18.6 5.4 24 12 24C18.6 24 24 18.6 24 12C24 5.4 18.6 0 12 0ZM12 21.6C9.6 21.6 7.4 20.7 5.6 19.2L19.2 5.6C20.8 7.4 21.6 9.6 21.6 12C21.6 17.3 17.3 21.6 12 21.6ZM12 2.4C13.9 2.4 15.7 3 17.3 4L4 17.3C3 15.8 2.4 13.9 2.4 12C2.4 6.7 6.7 2.4 12 2.4Z",\n fill: "currentColor"\n }\n) }), zz = () => /* @__PURE__ */ e1("svg", { viewBox: "0 0 24 24", fill: "none", xmlns: "http://www.w3.org/2000/svg", children: [\n /* @__PURE__ */ e1("g", { clipPath: "url(#clip0_2721_61325)", children: [\n /* @__PURE__ */ c(\n "path",\n {\n fillRule: "evenodd",\n clipRule: "evenodd",\n d: "M7.14082 7.141C7.41418 6.86763 7.8574 6.86763 8.13076 7.141L16.8588 15.869C17.1321 16.1424 17.1321 16.5856 16.8588 16.8589C16.5854 17.1323 16.1422 17.1323 15.8688 16.8589L7.14082 8.13095C6.86745 7.85758 6.86745 7.41436 7.14082 7.141Z",\n fill: "currentcolor"\n }\n ),\n /* @__PURE__ */ c(\n "path",\n {\n fillRule: "evenodd",\n clipRule: "evenodd",\n d: "M21.8783 2.12219C23.1658 3.41135 23.889 5.15887 23.889 6.98089C23.889 8.8029 23.1658 10.5504 21.8783 11.8396L18.9703 14.7475C18.697 15.0209 18.2538 15.0209 17.9804 14.7475C17.707 14.4742 17.707 14.0309 17.9804 13.7576L20.8877 10.8502C21.9131 9.82359 22.489 8.4319 22.489 6.98088C22.489 5.53002 21.9132 4.13846 20.888 3.11183C19.8614 2.08664 18.4698 1.51081 17.019 1.51081C15.568 1.51081 14.1764 2.08671 13.1497 3.11201L10.2963 5.9655C10.0229 6.23886 9.57967 6.23886 9.3063 5.9655C9.03293 5.69213 9.03293 5.24891 9.3063 4.97555L12.16 2.12188C13.4491 0.834327 15.197 0.110809 17.019 0.110809C18.841 0.110809 20.5891 0.834635 21.8783 2.12219ZM5.86796 9.40384C6.14133 9.6772 6.14133 10.1204 5.86796 10.3938L2.96932 13.2924C2.00732 14.3294 1.48381 15.6985 1.50876 17.113C1.53379 18.5316 2.10844 19.885 3.11165 20.8882C4.11486 21.8914 5.4683 22.4661 6.88683 22.4911C8.30136 22.516 9.6705 21.9925 10.7074 21.0305L13.6061 18.1319C13.8794 17.8585 14.3226 17.8585 14.596 18.1319C14.8694 18.4053 14.8694 18.8485 14.596 19.1218L11.6796 22.0382L11.6706 22.0466C10.3672 23.2611 8.64335 23.9223 6.86213 23.8909C5.0809 23.8594 3.38141 23.1379 2.1217 21.8781C0.86199 20.6184 0.14041 18.9189 0.108981 17.1377C0.0775541 15.3565 0.738735 13.6326 1.95322 12.3292L1.96164 12.3202L4.87801 9.40384C5.15138 9.13047 5.59459 9.13047 5.86796 9.40384Z",\n fill: "currentcolor"\n }\n )\n ] }),\n /* @__PURE__ */ c("defs", { children: /* @__PURE__ */ c("clipPath", { id: "clip0_2721_61325", children: /* @__PURE__ */ c("rect", { width: "24", height: "24", fill: "currentColor" }) }) })\n] }), hz = () => /* @__PURE__ */ e1("svg", { viewBox: "0 0 48 48", fill: "none", xmlns: "http://www.w3.org/2000/svg", children: [\n /* @__PURE__ */ c(\n "path",\n {\n d: "M33 35.4613V18.2843C33 18.2843 33 18.2843 33 18.2244C33 18.1646 33 18.1047 33 18.1047V18.0449C33 17.985 32.9409 17.9252 32.8819 17.8653L27.2164 12.1197C27.1573 12.0598 27.0983 12.0599 27.0393 12H26.9803C26.9213 12 26.8623 12 26.8623 12C26.8623 12 26.8623 12 26.8033 12H15.5311C15.236 12 15 12.2394 15 12.5386V35.4613C15 35.7606 15.236 36 15.5311 36H32.4688C32.7639 36 33 35.7606 33 35.4613ZM27.3934 13.8554L31.1704 17.6858H27.3934V13.8554ZM16.1213 34.8628V13.0773H26.3311V18.2244C26.3311 18.5237 26.5672 18.7631 26.8623 18.7631H31.9377V34.803H16.1213V34.8628Z",\n fill: "currentColor"\n }\n ),\n /* @__PURE__ */ c(\n "path",\n {\n d: "M20.3282 26.72C20.2375 26.6453 20.1069 26.5733 19.9362 26.504C19.7655 26.4347 19.5789 26.4 19.3762 26.4C19.1629 26.4 18.9789 26.44 18.8242 26.52C18.6749 26.5947 18.5522 26.7013 18.4562 26.84C18.3602 26.9733 18.2909 27.1333 18.2482 27.32C18.2055 27.5067 18.1842 27.7067 18.1842 27.92C18.1842 28.4053 18.3042 28.7813 18.5442 29.048C18.7842 29.3093 19.1042 29.44 19.5042 29.44C19.7069 29.44 19.8749 29.432 20.0082 29.416C20.1469 29.3947 20.2535 29.3733 20.3282 29.352V26.72ZM20.3282 23.92L21.0722 23.792V29.88C20.9015 29.928 20.6829 29.976 20.4162 30.024C20.1495 30.072 19.8429 30.096 19.4962 30.096C19.1762 30.096 18.8882 30.0453 18.6322 29.944C18.3762 29.8427 18.1575 29.6987 17.9762 29.512C17.7949 29.3253 17.6535 29.0987 17.5522 28.832C17.4562 28.56 17.4082 28.256 17.4082 27.92C17.4082 27.6 17.4482 27.3067 17.5282 27.04C17.6135 26.7733 17.7362 26.544 17.8962 26.352C18.0562 26.16 18.2509 26.0107 18.4802 25.904C18.7149 25.7973 18.9815 25.744 19.2802 25.744C19.5202 25.744 19.7309 25.776 19.9122 25.84C20.0989 25.904 20.2375 25.9653 20.3282 26.024V23.92Z",\n fill: "currentColor"\n }\n ),\n /* @__PURE__ */ c(\n "path",\n {\n d: "M26.0231 27.92C26.0231 28.2507 25.9751 28.5493 25.8791 28.816C25.7831 29.0827 25.6471 29.312 25.4711 29.504C25.3005 29.696 25.0951 29.8453 24.8551 29.952C24.6151 30.0533 24.3538 30.104 24.0711 30.104C23.7885 30.104 23.5271 30.0533 23.2871 29.952C23.0471 29.8453 22.8391 29.696 22.6631 29.504C22.4925 29.312 22.3591 29.0827 22.2631 28.816C22.1671 28.5493 22.1191 28.2507 22.1191 27.92C22.1191 27.5947 22.1671 27.2987 22.2631 27.032C22.3591 26.76 22.4925 26.528 22.6631 26.336C22.8391 26.144 23.0471 25.9973 23.2871 25.896C23.5271 25.7893 23.7885 25.736 24.0711 25.736C24.3538 25.736 24.6151 25.7893 24.8551 25.896C25.0951 25.9973 25.3005 26.144 25.4711 26.336C25.6471 26.528 25.7831 26.76 25.8791 27.032C25.9751 27.2987 26.0231 27.5947 26.0231 27.92ZM25.2471 27.92C25.2471 27.4507 25.1405 27.08 24.9271 26.808C24.7191 26.5307 24.4338 26.392 24.0711 26.392C23.7085 26.392 23.4205 26.5307 23.2071 26.808C22.9991 27.08 22.8951 27.4507 22.8951 27.92C22.8951 28.3893 22.9991 28.7627 23.2071 29.04C23.4205 29.312 23.7085 29.448 24.0711 29.448C24.4338 29.448 24.7191 29.312 24.9271 29.04C25.1405 28.7627 25.2471 28.3893 25.2471 27.92Z",\n fill: "currentColor"\n }\n ),\n /* @__PURE__ */ c(\n "path",\n {\n d: "M28.8779 30.096C28.5419 30.096 28.2459 30.0427 27.9899 29.936C27.7392 29.8293 27.5259 29.68 27.3499 29.488C27.1792 29.296 27.0512 29.0693 26.9659 28.808C26.8806 28.5413 26.8379 28.248 26.8379 27.928C26.8379 27.608 26.8832 27.3147 26.9739 27.048C27.0699 26.7813 27.2032 26.552 27.3739 26.36C27.5446 26.1627 27.7526 26.0107 27.9979 25.904C28.2486 25.792 28.5259 25.736 28.8299 25.736C29.0166 25.736 29.2032 25.752 29.3899 25.784C29.5766 25.816 29.7552 25.8667 29.9259 25.936L29.7579 26.568C29.6459 26.5147 29.5152 26.472 29.3659 26.44C29.2219 26.408 29.0672 26.392 28.9019 26.392C28.4859 26.392 28.1659 26.5227 27.9419 26.784C27.7232 27.0453 27.6139 27.4267 27.6139 27.928C27.6139 28.152 27.6379 28.3573 27.6859 28.544C27.7392 28.7307 27.8192 28.8907 27.9259 29.024C28.0379 29.1573 28.1792 29.2613 28.3499 29.336C28.5206 29.4053 28.7286 29.44 28.9739 29.44C29.1712 29.44 29.3499 29.4213 29.5099 29.384C29.6699 29.3467 29.7952 29.3067 29.8859 29.264L29.9899 29.888C29.9472 29.9147 29.8859 29.9413 29.8059 29.968C29.7259 29.9893 29.6352 30.008 29.5339 30.024C29.4326 30.0453 29.3232 30.0613 29.2059 30.072C29.0939 30.088 28.9846 30.096 28.8779 30.096Z",\n fill: "currentColor"\n }\n )\n] }), Oz = () => /* @__PURE__ */ e1("svg", { viewBox: "0 0 24 24", fill: "none", xmlns: "http://www.w3.org/2000/svg", children: [\n /* @__PURE__ */ c(\n "path",\n {\n fillRule: "evenodd",\n clipRule: "evenodd",\n d: "M20.9751 23.4138C20.9751 23.7118 20.74 23.9502 20.4462 23.9502H3.57868C3.28482 23.9502 3.04979 23.7118 3.04979 23.4138V0.586208C3.04979 0.288197 3.28482 0.0497926 3.57868 0.0497926H15.0391C15.0685 0.0795936 15.0979 0.0944937 15.1273 0.109394C15.1567 0.124294 15.1861 0.139194 15.2155 0.168995L20.8575 5.8908C20.9163 5.95036 20.9751 6.01004 20.9751 6.0696V23.4138ZM19.1531 5.71199L15.3918 1.89746V5.71199H19.1531ZM4.16639 1.12263V22.7582H19.9172V6.78483H14.8629C14.569 6.78483 14.3339 6.54641 14.3339 6.2484V1.12263H4.16639ZM12.0419 9.70538H6.39999C6.10614 9.70538 5.87105 9.46698 5.87105 9.16898C5.87105 8.87098 6.10614 8.63257 6.39999 8.63257H12.0419C12.3357 8.63257 12.5708 8.87098 12.5708 9.16898C12.5708 9.46698 12.3357 9.70538 12.0419 9.70538ZM14.8624 12.8643H6.45834C6.16449 12.8643 5.9294 13.1027 5.9294 13.4007C5.9294 13.6987 6.16449 13.9371 6.45834 13.9371H14.8624C15.1563 13.9371 15.3914 13.6987 15.3914 13.4007C15.3914 13.1027 15.1563 12.8643 14.8624 12.8643ZM6.45834 17.1555H14.8624C15.1563 17.1555 15.3914 17.3939 15.3914 17.6919C15.3914 17.9899 15.1563 18.2283 14.8624 18.2283H6.45834C6.16449 18.2283 5.9294 17.9899 5.9294 17.6919C5.9294 17.3939 6.16449 17.1555 6.45834 17.1555Z",\n fill: "currentColor"\n }\n ),\n /* @__PURE__ */ c(\n "path",\n {\n fillRule: "evenodd",\n clipRule: "evenodd",\n d: "M15.06 0L15.0746 0.0148315C15.0977 0.038286 15.1205 0.0501023 15.1498 0.0649813L15.1512 0.0656614C15.1803 0.0804511 15.2158 0.0984337 15.2509 0.134034L20.8945 5.85736C20.9229 5.88612 20.9543 5.91801 20.9784 5.95065C21.0026 5.98334 21.0249 6.02379 21.0249 6.0696V23.4138C21.0249 23.7386 20.7682 24 20.4462 24H3.57868C3.25666 24 3 23.7386 3 23.4138V0.586207C3 0.261365 3.25666 0 3.57868 0H15.06ZM20.8575 5.8908L15.2155 0.168995C15.1861 0.139194 15.1567 0.124294 15.1273 0.109394C15.0979 0.0944937 15.0685 0.0795936 15.0391 0.0497926H3.57868C3.28482 0.0497926 3.04979 0.288197 3.04979 0.586208V23.4138C3.04979 23.7118 3.28482 23.9502 3.57868 23.9502H20.4462C20.74 23.9502 20.9751 23.7118 20.9751 23.4138V6.0696C20.9751 6.01004 20.9163 5.95036 20.8575 5.8908ZM15.3918 1.89746V5.71199H19.1531L15.3918 1.89746ZM15.4416 2.01887V5.66219H19.0341L15.4416 2.01887ZM4.21619 1.17242V22.7084H19.8674V6.83462H14.8629C14.5408 6.83462 14.2841 6.57325 14.2841 6.2484V1.17242H4.21619ZM12.0419 9.75517H6.39999C6.07799 9.75517 5.82125 9.49382 5.82125 9.16898C5.82125 8.84413 6.07798 8.58278 6.39999 8.58278H12.0419C12.3639 8.58278 12.6206 8.84413 12.6206 9.16898C12.6206 9.49382 12.3639 9.75517 12.0419 9.75517ZM6.45834 12.8145H14.8624C15.1845 12.8145 15.4412 13.0758 15.4412 13.4007C15.4412 13.7255 15.1845 13.9869 14.8624 13.9869H6.45834C6.13634 13.9869 5.87961 13.7255 5.87961 13.4007C5.87961 13.0758 6.13634 12.8145 6.45834 12.8145ZM6.45834 17.1057H14.8624C15.1845 17.1057 15.4412 17.3671 15.4412 17.6919C15.4412 18.0168 15.1845 18.2781 14.8624 18.2781H6.45834C6.13634 18.2781 5.87961 18.0168 5.87961 17.6919C5.87961 17.3671 6.13634 17.1057 6.45834 17.1057ZM4.16639 1.12263H14.3339V6.2484C14.3339 6.54641 14.569 6.78483 14.8629 6.78483H19.9172V22.7582H4.16639V1.12263ZM6.39999 9.70538H12.0419C12.3357 9.70538 12.5708 9.46698 12.5708 9.16898C12.5708 8.87098 12.3357 8.63257 12.0419 8.63257H6.39999C6.10614 8.63257 5.87105 8.87098 5.87105 9.16898C5.87105 9.46698 6.10614 9.70538 6.39999 9.70538ZM6.45834 12.8643H14.8624C15.1563 12.8643 15.3914 13.1027 15.3914 13.4007C15.3914 13.6987 15.1563 13.9371 14.8624 13.9371H6.45834C6.16449 13.9371 5.9294 13.6987 5.9294 13.4007C5.9294 13.1027 6.16449 12.8643 6.45834 12.8643ZM14.8624 17.1555H6.45834C6.16449 17.1555 5.9294 17.3939 5.9294 17.6919C5.9294 17.9899 6.16449 18.2283 6.45834 18.2283H14.8624C15.1563 18.2283 15.3914 17.9899 15.3914 17.6919C15.3914 17.3939 15.1563 17.1555 14.8624 17.1555Z",\n fill: "currentColor"\n }\n )\n] }), fz = () => /* @__PURE__ */ e1("svg", { xmlns: "http://www.w3.org/2000/svg", viewBox: "0 0 24 24", fill: "none", children: [\n /* @__PURE__ */ c(\n "path",\n {\n d: "M14.5 7.5C14 7.5 13.6 7.1 13.6 6.6V0H3.6C3.3 0 3 0.3 3 0.6V23.4C3 23.7 3.3 24 3.6 24H20.5C20.8 24 21.1 23.7 21.1 23.4V7.5H14.5ZM15.8 13.4C16.4 13.4 16.9 13.9 16.9 14.5C16.9 15.1 16.4 15.6 15.8 15.6H7.3C6.7 15.6 6.2 15.1 6.2 14.5C6.2 13.9 6.7 13.4 7.3 13.4H15.8ZM6.2 18.7C6.2 18.1 6.7 17.6 7.3 17.6H15.7C16.3 17.6 16.8 18.1 16.8 18.7C16.8 19.3 16.3 19.8 15.7 19.8H7.3C6.7 19.8 6.2 19.3 6.2 18.7ZM14.1 10.3C14.1 10.9 13.6 11.4 13 11.4H7.3C6.7 11.4 6.2 10.9 6.2 10.3C6.2 9.7 6.7 9.2 7.3 9.2H12.9C13.6 9.2 14.1 9.7 14.1 10.3Z",\n fill: "currentColor"\n }\n ),\n /* @__PURE__ */ c("path", { d: "M20.7 5.7H15.4V0.3L20.7 5.7Z", fill: "currentColor" })\n] }), gz = () => /* @__PURE__ */ c("svg", { viewBox: "0 0 24 24", fill: "none", xmlns: "http://www.w3.org/2000/svg", children: /* @__PURE__ */ c(\n "path",\n {\n fillRule: "evenodd",\n clipRule: "evenodd",\n d: "M22.6 12C22.6 17.8542 17.8542 22.6 12 22.6C6.14578 22.6 1.4 17.8542 1.4 12C1.4 6.14578 6.14578 1.4 12 1.4C17.8542 1.4 22.6 6.14578 22.6 12ZM24 12C24 18.6274 18.6274 24 12 24C5.37258 24 0 18.6274 0 12C0 5.37258 5.37258 0 12 0C18.6274 0 24 5.37258 24 12ZM8.67393 8.03032L8.69246 8.00774C9.06947 7.58146 9.55756 7.26238 10.1052 7.08419C10.5138 6.95324 10.9366 6.86839 11.365 6.83129V5H12.7546V6.85387C13.0017 6.88508 13.2463 6.93337 13.4864 6.99839C13.8963 7.10854 14.2834 7.28733 14.6305 7.52677C14.9188 7.72361 15.1663 7.97184 15.36 8.25839L15.7445 8.8229L14.5865 9.57032L14.2021 9.00581C14.1037 8.86062 13.9779 8.73495 13.8315 8.63548C13.6145 8.48518 13.3724 8.37286 13.1159 8.30355C12.7572 8.20904 12.3873 8.16121 12.0158 8.16129C11.5187 8.14458 11.0225 8.21338 10.5498 8.36452C10.2411 8.46444 9.96584 8.64389 9.75316 8.88387C9.61561 9.04806 9.53458 9.25031 9.52157 9.46194V9.52968C9.50478 9.77371 9.58153 10.0151 9.73695 10.2071C9.92145 10.4146 10.1563 10.5738 10.4201 10.67C10.8723 10.8355 11.3369 10.9668 11.8097 11.0629C12.2544 11.1532 12.5392 11.2187 12.8032 11.2887C12.8799 11.3092 12.9544 11.329 13.0269 11.3482C13.2502 11.4075 13.454 11.4617 13.6393 11.5145C14.0474 11.629 14.4372 11.7985 14.7973 12.0181C15.1476 12.2346 15.4423 12.5266 15.6588 12.8716C15.8903 13.2748 16.0077 13.7306 15.9992 14.1926C16.0134 14.7596 15.8351 15.3152 15.492 15.7732C15.1127 16.2639 14.5965 16.6378 14.0052 16.8503C13.6041 16.9996 13.1856 17.0997 12.7592 17.1484V19H11.3697V17.171C10.7632 17.1228 10.1704 16.9699 9.61883 16.7194C9.13538 16.4792 8.71834 16.1292 8.40297 15.6987L8 15.1477L9.13017 14.3619L9.53314 14.9129C9.71335 15.161 9.95149 15.3638 10.2279 15.5045C10.7529 15.7429 11.3281 15.8574 11.907 15.8387H11.951C12.4828 15.8562 13.0128 15.7694 13.5096 15.5835C13.8533 15.4628 14.1541 15.248 14.3758 14.9648C14.5347 14.7463 14.6161 14.483 14.6073 14.2152V14.1835C14.6122 13.9607 14.5554 13.7408 14.4429 13.5468C14.3392 13.3909 14.2016 13.2591 14.0399 13.1606C13.7907 13.009 13.521 12.8919 13.2386 12.8129C13.014 12.7497 12.7546 12.6819 12.4466 12.6097C12.1965 12.5306 11.9324 12.4697 11.5202 12.3839C10.9756 12.2738 10.4406 12.1228 9.9199 11.9323C9.42727 11.7514 8.99035 11.4506 8.65078 11.0584L8.62762 11.0313C8.26754 10.5819 8.08802 10.0199 8.12274 9.45064C8.14231 8.93119 8.33591 8.43229 8.67393 8.03032Z",\n fill: "currentcolor"\n }\n) }), Cz = () => /* @__PURE__ */ c("svg", { viewBox: "0 0 24 24", fill: "none", xmlns: "http://www.w3.org/2000/svg", children: /* @__PURE__ */ c(\n "path",\n {\n fillRule: "evenodd",\n clipRule: "evenodd",\n d: "M14.258 24C14.0161 24 13.8548 23.9216 13.6935 23.7647L2.24193 12.549C2.08064 12.3922 2 12.1569 2 12C2 11.7647 2.08064 11.6078 2.24193 11.451L13.7742 0.235294C14.0967 -0.0784314 14.4999 -0.0784314 14.8225 0.235294C15.1451 0.54902 15.1451 0.941177 14.8225 1.2549L3.77415 12L14.8225 22.7451C15.1451 23.0588 15.1451 23.451 14.8225 23.7647C14.6612 23.9216 14.4193 24 14.258 24ZM9.09691 12.549C8.93562 12.3922 8.85498 12.1569 8.85498 12C8.85498 11.7647 8.9356 11.6078 9.17753 11.451L20.7098 0.235294C21.0323 -0.0784314 21.4356 -0.0784314 21.7582 0.235294C22.0808 0.54902 22.0808 0.941177 21.7582 1.2549L10.7098 12L21.7582 22.7451C22.0808 23.0588 22.0808 23.451 21.7582 23.7647C21.5969 23.9216 21.3549 24 21.1937 24C20.9517 24 20.7904 23.9216 20.6291 23.7647L9.09691 12.549Z",\n fill: "currentColor"\n }\n) }), mz = () => /* @__PURE__ */ c("svg", { viewBox: "0 0 24 24", fill: "none", xmlns: "http://www.w3.org/2000/svg", children: /* @__PURE__ */ c(\n "path",\n {\n fillRule: "evenodd",\n clipRule: "evenodd",\n d: "M9.10986 22.7451L20.1471 12L9.19043 1.2549C8.86817 0.941176 8.86817 0.549019 9.19043 0.235294C9.51268 -0.0784313 9.91549 -0.0784313 10.2377 0.235294L21.7584 11.5294C22.0807 11.8431 22.0807 12.2353 21.7584 12.549L10.2377 23.7647C10.0766 23.9216 9.83492 24 9.67379 24C9.4321 24 9.27098 23.9216 9.10986 23.7647C8.7876 23.451 8.7876 23.0588 9.10986 22.7451ZM2.74522 24C2.50353 24 2.34239 23.9216 2.18126 23.7647C1.93957 23.451 1.93957 22.9804 2.18126 22.6667L13.2991 12L2.26183 1.25491C1.93957 0.941184 1.93957 0.549027 2.26183 0.235302C2.58409 -0.0784237 2.9869 -0.0784237 3.30915 0.235302L14.8298 11.5294C15.1521 11.8431 15.1521 12.2353 14.8298 12.549L3.30915 23.7647C3.14803 23.9216 2.90635 24 2.74522 24Z",\n fill: "currentColor"\n }\n) }), Lz = () => /* @__PURE__ */ e1("svg", { viewBox: "0 0 24 24", fill: "none", xmlns: "http://www.w3.org/2000/svg", children: [\n /* @__PURE__ */ c(\n "path",\n {\n fillRule: "evenodd",\n clipRule: "evenodd",\n d: "M11.4953 1.62864C11.4953 1.33449 11.7327 1.09917 12.0295 1.09917C12.3262 1.09917 12.5637 1.33449 12.6824 1.62864V14.3947L17.4307 9.68835C17.6681 9.45303 17.9649 9.45303 18.2023 9.68835C18.4397 9.92367 18.4397 10.2178 18.2023 10.4531L12.5043 16.1008C12.4449 16.1597 12.3856 16.2185 12.3262 16.2185C12.2075 16.2773 12.1482 16.2773 12.0888 16.2773C12.0193 16.2773 11.9701 16.2571 11.9294 16.2404C11.9006 16.2286 11.876 16.2185 11.8514 16.2185C11.792 16.2185 11.7327 16.1597 11.6733 16.1008L5.97536 10.4531C5.73794 10.2178 5.73794 9.92367 5.97536 9.68835C6.21277 9.45303 6.50954 9.45303 6.74696 9.68835L11.4953 14.3947V1.62864ZM22.8324 15.6895C22.8324 15.3953 23.0698 15.16 23.3666 15.16C23.6634 15.16 23.9008 15.4541 23.9008 15.7483V21.3961C23.9008 21.6903 23.6634 21.9256 23.3666 21.9256H0.633375C0.336597 21.9256 0.0991736 21.6903 0.0991736 21.3961V15.7483C0.0991736 15.4541 0.395952 15.16 0.692731 15.16C0.98951 15.16 1.22693 15.3953 1.22693 15.6895V20.749H22.8324V15.6895Z",\n fill: "currentcolor"\n }\n ),\n /* @__PURE__ */ c(\n "path",\n {\n fillRule: "evenodd",\n clipRule: "evenodd",\n d: "M12.7815 1.60938V14.1568L17.3609 9.6179C17.4944 9.4855 17.652 9.41268 17.8165 9.41268C17.981 9.41268 18.1385 9.4855 18.2721 9.6179C18.4056 9.75027 18.4795 9.90682 18.4795 10.0707C18.4795 10.2347 18.4056 10.3912 18.2721 10.5236L12.5717 16.1736C12.5438 16.2013 12.5098 16.235 12.4744 16.2613C12.4442 16.2838 12.4027 16.3089 12.3528 16.3158C12.2954 16.3429 12.2478 16.3587 12.2046 16.3672C12.1579 16.3765 12.1201 16.3765 12.0905 16.3765H12.0888C11.9997 16.3765 11.9355 16.3501 11.8935 16.3329L11.8917 16.3321C11.8763 16.3258 11.8672 16.3221 11.8593 16.3197C11.852 16.3174 11.8502 16.3176 11.8514 16.3176C11.7896 16.3176 11.7386 16.2876 11.7032 16.2613C11.6678 16.235 11.6339 16.2013 11.6059 16.1736L5.90554 10.5236C5.772 10.3912 5.69812 10.2347 5.69812 10.0707C5.69812 9.90682 5.772 9.75027 5.90554 9.6179C6.03912 9.4855 6.19668 9.41268 6.36116 9.41268C6.52564 9.41268 6.68319 9.4855 6.81677 9.6179L11.3961 14.1568V1.62864C11.3961 1.27889 11.6788 1 12.0295 1C12.3836 1 12.648 1.27848 12.7743 1.59153L12.7815 1.60938ZM11.4953 1.62864C11.4953 1.33449 11.7327 1.09917 12.0295 1.09917C12.3262 1.09917 12.5637 1.33449 12.6824 1.62864V14.3947L17.4307 9.68835C17.6681 9.45303 17.9649 9.45303 18.2023 9.68835C18.4397 9.92367 18.4397 10.2178 18.2023 10.4531L12.5043 16.1008C12.4449 16.1597 12.3856 16.2185 12.3262 16.2185C12.2075 16.2773 12.1482 16.2773 12.0888 16.2773C12.0193 16.2773 11.9701 16.2571 11.9294 16.2404C11.9006 16.2286 11.876 16.2185 11.8514 16.2185C11.792 16.2185 11.7327 16.1597 11.6733 16.1008L5.97536 10.4531C5.73794 10.2178 5.73794 9.92367 5.97536 9.68835C6.21277 9.45303 6.50954 9.45303 6.74696 9.68835L11.4953 14.3947V1.62864ZM22.7332 15.6895C22.7332 15.3397 23.0159 15.0608 23.3666 15.0608C23.5491 15.0608 23.7084 15.1512 23.8197 15.2785C23.9307 15.4056 24 15.5754 24 15.7483V21.3961C24 21.7459 23.7173 22.0248 23.3666 22.0248H0.633375C0.282657 22.0248 0 21.7459 0 21.3961V15.7483C0 15.5686 0.0896021 15.3975 0.214846 15.2734C0.340144 15.1492 0.512397 15.0608 0.692731 15.0608C1.04345 15.0608 1.32611 15.3397 1.32611 15.6895V20.6498H22.7332V15.6895ZM23.3666 15.16C23.0698 15.16 22.8324 15.3953 22.8324 15.6895V20.749H1.22693V15.6895C1.22693 15.3953 0.98951 15.16 0.692731 15.16C0.395952 15.16 0.0991736 15.4541 0.0991736 15.7483V21.3961C0.0991736 21.6903 0.336597 21.9256 0.633375 21.9256H23.3666C23.6634 21.9256 23.9008 21.6903 23.9008 21.3961V15.7483C23.9008 15.4541 23.6634 15.16 23.3666 15.16Z",\n fill: "currentcolor"\n }\n )\n] }), vz = () => /* @__PURE__ */ e1("svg", { xmlns: "http://www.w3.org/2000/svg", viewBox: "0 0 24 24", fill: "none", children: [\n /* @__PURE__ */ c(\n "path",\n {\n d: "M11.4 16.5C11.5 16.6 11.6 16.6 11.7 16.6C11.8 16.6 11.9 16.7 12 16.7C12 16.7 12.1 16.7 12.2 16.7C12.3 16.7 12.3 16.7 12.4 16.6C12.5 16.6 12.6 16.5 12.6 16.5C12.7 16.5 12.7 16.4 12.7 16.4L18.2 10.9C18.4 10.7 18.5 10.4 18.5 10.2C18.5 9.9 18.4 9.7 18.2 9.5C18 9.3 17.7 9.2 17.5 9.2C17.2 9.2 17 9.3 16.8 9.5L13.1 13.2V1.8C12.9 1.3 12.5 1 12 1C11.4 1 11 1.5 11 2V13.1L7.3 9.4C7.1 9.2 6.8 9.1 6.6 9.1C6.3 9.1 6 9.2 5.8 9.4C5.6 9.7 5.5 9.9 5.5 10.2C5.5 10.5 5.6 10.7 5.8 10.9L11.4 16.5Z",\n fill: "currentcolor"\n }\n ),\n /* @__PURE__ */ c(\n "path",\n {\n d: "M23.7 14.9C23.5 14.7 23.2 14.5 23 14.5C22.4 14.5 22 15 22 15.5V20H2.1V15.6C2.1 15 1.6 14.6 1.1 14.6C0.8 14.6 0.6 14.7 0.3 14.9C0.1 15.1 0 15.4 0 15.7V21.2C0 21.8 0.5 22.2 1 22.2H23C23.6 22.2 24 21.7 24 21.2V15.7C24 15.4 23.9 15.1 23.7 14.9Z",\n fill: "currentcolor"\n }\n )\n] }), qz = () => /* @__PURE__ */ c("svg", { viewBox: "0 0 24 24", fill: "none", xmlns: "http://www.w3.org/2000/svg", children: /* @__PURE__ */ c(\n "path",\n {\n fillRule: "evenodd",\n clipRule: "evenodd",\n d: "M0 11.8294C9.64556e-06 8.5623 3.04481 5.92825 6.56944 6.48341C7.88789 4.89156 9.91466 3.9834 12 3.9834C15.216 3.9834 17.9012 6.02584 18.6952 8.92779C19.0213 8.87515 19.3193 8.82046 19.6101 8.82046C22.0137 8.82046 24 10.7186 24 13.0244C24 15.3302 22.0137 17.2284 19.6101 17.2284C19.2874 17.2284 19.0252 16.9805 19.0252 16.6664C19.0252 16.3524 19.2874 16.1045 19.6101 16.1045C21.4283 16.1045 22.8303 14.7584 22.8303 13.0813C22.8303 11.3473 21.3689 10.0013 19.6101 10.0013C19.2619 10.0013 18.8523 10.1127 18.4956 10.2265C18.1761 10.3285 17.745 10.0989 17.6578 9.7284C17.1254 7.46665 14.8296 5.1642 12 5.1642C10.1718 5.1642 8.40363 6.01105 7.34348 7.47677L7.33814 7.48415C7.15722 7.65733 6.96141 7.78639 6.69815 7.7239C6.40194 7.66723 6.0494 7.61119 5.69792 7.61119C3.22628 7.61119 1.2292 9.52576 1.2292 11.8863C1.2292 14.2468 3.22628 16.1614 5.69792 16.1614C6.02061 16.1614 6.28277 16.4093 6.28277 16.7234C6.28277 17.0374 6.02061 17.2853 5.69792 17.2853C2.58033 17.2853 0.0600102 14.8737 0 11.8294ZM12.7037 11.2504V18.0293L14.522 16.2889C14.6485 16.1678 14.7941 16.1044 14.9429 16.1044C15.0916 16.1044 15.2372 16.1678 15.3637 16.2889C15.4901 16.4099 15.5574 16.5503 15.5574 16.6948C15.5574 16.8393 15.4901 16.9796 15.3637 17.1006L12.5108 19.8313L12.51 19.8321L12.5085 19.8335C12.3846 19.9521 12.2355 20.0166 12.0604 20.0166C11.888 20.0166 11.7324 19.9504 11.6103 19.8334L8.75509 17.1006C8.62867 16.9796 8.56137 16.8393 8.56137 16.6948C8.56137 16.5503 8.62867 16.4099 8.7551 16.2889C8.88162 16.1678 9.02726 16.1044 9.17598 16.1044C9.32469 16.1044 9.47034 16.1678 9.59686 16.2889L11.4151 18.0293V11.2604C11.4151 10.9463 11.6773 10.6984 12 10.6984C12.325 10.6984 12.5767 10.9464 12.6999 11.2412L12.7037 11.2504Z",\n fill: "currentcolor"\n }\n) }), yz = () => /* @__PURE__ */ e1("svg", { xmlns: "http://www.w3.org/2000/svg", viewBox: "0 0 24 24", fill: "none", children: [\n /* @__PURE__ */ c(\n "path",\n {\n d: "M14.9 15.9C14.7 15.9 14.5 16 14.3 16.2L13 17.4V11.2C12.8 10.8 12.5 10.5 12.1 10.5C11.6 10.5 11.3 10.9 11.3 11.3V17.3L10 16C9.8 15.8 9.6 15.7 9.4 15.7C9.2 15.7 9 15.8 8.8 16C8.6 16.2 8.5 16.4 8.5 16.6C8.5 16.8 8.6 17 8.8 17.2L11.6 19.9C11.8 20.1 12 20.2 12.2 20.2C12.4 20.2 12.7 20.1 12.8 19.9L15.6 17.2C15.8 17 15.9 16.8 15.9 16.6C15.9 16.4 15.8 16.2 15.6 16C15.3 15.9 15.1 15.9 14.9 15.9Z",\n fill: "currentcolor"\n }\n ),\n /* @__PURE__ */ c(\n "path",\n {\n d: "M19.5 8.7C19.3 8.7 19 8.7 18.8 8.8C17.9 5.9 15.2 4 12 4C9.9 4 7.9 4.9 6.6 6.4C6.3 6.4 6 6.4 5.8 6.4C2.6 6.4 0 8.9 0 12C0.1 15.1 2.6 17.6 5.8 17.6C6.3 17.6 6.6 17.2 6.6 16.8C6.6 16.3 6.2 16 5.8 16C3.5 16 1.7 14.2 1.7 12.1C1.7 9.9 3.5 8.2 5.8 8.2C6.1 8.2 6.5 8.3 6.7 8.3C6.8 8.3 6.8 8.3 6.9 8.3C7.2 8.3 7.4 8.1 7.6 7.9C8.6 6.6 10.2 5.8 11.9 5.8C14.6 5.8 16.7 8 17.2 10C17.3 10.4 17.7 10.7 18.1 10.7C18.2 10.7 18.3 10.7 18.3 10.7C18.6 10.6 19 10.5 19.3 10.5C20.9 10.5 22.2 11.7 22.2 13.2C22.2 14.7 20.9 15.9 19.3 15.9C18.8 15.9 18.5 16.3 18.5 16.7C18.5 17.2 18.9 17.5 19.3 17.5C21.8 17.5 23.9 15.5 23.9 13.1C23.9 10.7 22 8.7 19.5 8.7Z",\n fill: "currentcolor"\n }\n )\n] }), wz = () => /* @__PURE__ */ e1("svg", { viewBox: "0 0 24 24", fill: "none", xmlns: "http://www.w3.org/2000/svg", children: [\n /* @__PURE__ */ c(\n "circle",\n {\n cx: "12",\n cy: "12",\n r: "11.3",\n stroke: "currentColor",\n strokeWidth: "1.4"\n }\n ),\n /* @__PURE__ */ c(\n "path",\n {\n d: "M15.582 9.25373C15.8129 9.02292 15.8129 8.64871 15.582 8.41791C15.3512 8.1871 14.977 8.1871 14.7462 8.41791L12 11.1641L9.2538 8.41791C9.023 8.1871 8.64879 8.1871 8.41799 8.41791C8.18718 8.64871 8.18718 9.02292 8.41799 9.25372L11.1642 11.9999L8.41791 14.7462C8.1871 14.977 8.1871 15.3512 8.41791 15.582C8.64871 15.8129 9.02292 15.8129 9.25372 15.582L12 12.8358L14.7463 15.582C14.9771 15.8129 15.3513 15.8129 15.5821 15.582C15.8129 15.3512 15.8129 14.977 15.5821 14.7462L12.8358 11.9999L15.582 9.25373Z",\n fill: "currentColor"\n }\n )\n] }), xz = () => /* @__PURE__ */ e1("svg", { xmlns: "http://www.w3.org/2000/svg", viewBox: "0 0 24 24", fill: "none", children: [\n /* @__PURE__ */ c("g", { clipPath: "url(#clip0_2346_129556)", children: /* @__PURE__ */ c(\n "path",\n {\n fillRule: "evenodd",\n clipRule: "evenodd",\n d: "M12 24C18.6274 24 24 18.6274 24 12C24 5.37258 18.6274 0 12 0C5.37258 0 0 5.37258 0 12C0 18.6274 5.37258 24 12 24ZM7.29289 7.29289C6.90237 7.68342 6.90237 8.31658 7.29289 8.70711L10.5858 12L7.29289 15.2929C6.90237 15.6834 6.90237 16.3166 7.29289 16.7071C7.68342 17.0976 8.31658 17.0976 8.70711 16.7071L12 13.4142L15.2929 16.7071C15.6834 17.0976 16.3166 17.0976 16.7071 16.7071C17.0976 16.3166 17.0976 15.6834 16.7071 15.2929L13.4142 12L16.7071 8.70711C17.0976 8.31658 17.0976 7.68342 16.7071 7.29289C16.3166 6.90237 15.6834 6.90237 15.2929 7.29289L12 10.5858L8.70711 7.29289C8.31658 6.90237 7.68342 6.90237 7.29289 7.29289Z",\n fill: "currentColor"\n }\n ) }),\n /* @__PURE__ */ c("defs", { children: /* @__PURE__ */ c("clipPath", { id: "clip0_2346_129556", children: /* @__PURE__ */ c("rect", { width: "24", height: "24", fill: "white" }) }) })\n] }), Wz = () => /* @__PURE__ */ c("svg", { viewBox: "0 0 24 24", fill: "none", xmlns: "http://www.w3.org/2000/svg", children: /* @__PURE__ */ c(\n "path",\n {\n fillRule: "evenodd",\n clipRule: "evenodd",\n d: "M17.5351 0L17.5497 0.0148315C17.5728 0.0382862 17.5956 0.0501022 17.6249 0.0649815L17.6263 0.0656614C17.6554 0.0804529 17.6909 0.0984354 17.726 0.134034L23.3696 5.85736C23.398 5.88612 23.4294 5.91801 23.4535 5.95065C23.4777 5.98334 23.5 6.02379 23.5 6.0696V23.4138C23.5 23.7386 23.2433 24 22.9213 24H6.05378C5.73176 24 5.4751 23.7386 5.4751 23.4138V18.2781H1.50525C0.952963 18.2781 0.505248 17.8304 0.505248 17.2781L0.5 6C0.5 5.44772 0.947715 5 1.5 5H5.4751V0.586207C5.4751 0.261365 5.73176 0 6.05378 0H17.5351ZM6.69129 22.7084V18.2781H12.4608H17.3375C17.6595 18.2781 17.9163 18.0168 17.9163 17.6919C17.9163 17.3671 17.6595 17.1057 17.3375 17.1057H12.5V13.9869H17.3375C17.6596 13.9869 17.9163 13.7255 17.9163 13.4007C17.9163 13.0758 17.6595 12.8145 17.3375 12.8145H12.5V9.75517H14.517C14.839 9.75517 15.0957 9.49382 15.0957 9.16898C15.0957 8.84413 14.839 8.58278 14.517 8.58278H12.5V6C12.5 5.44772 12.0523 5 11.5 5H6.69129V1.17242H16.7592V6.2484C16.7592 6.57325 17.0159 6.83462 17.338 6.83462H22.3425V22.7084H6.69129ZM17.9167 2.01887V5.66219H21.5092L17.9167 2.01887ZM3.77803 9.30307C4.03187 9.04923 4.44342 9.04923 4.69727 9.30307L6.47498 11.0808L8.25269 9.30308C8.50653 9.04924 8.91808 9.04924 9.17192 9.30308C9.42577 9.55692 9.42577 9.96848 9.17192 10.2223L7.39422 12L9.17188 13.7777C9.42572 14.0315 9.42572 14.4431 9.17188 14.6969C8.91803 14.9508 8.50648 14.9508 8.25264 14.6969L6.47498 12.9193L4.69732 14.6969C4.44347 14.9508 4.03192 14.9508 3.77808 14.6969C3.52424 14.4431 3.52424 14.0315 3.77808 13.7777L5.55574 12L3.77803 10.2223C3.52419 9.96846 3.52419 9.55691 3.77803 9.30307Z",\n fill: "currentColor"\n }\n) }), Rz = () => /* @__PURE__ */ e1("svg", { viewBox: "0 0 24 24", fill: "none", xmlns: "http://www.w3.org/2000/svg", children: [\n /* @__PURE__ */ c(\n "path",\n {\n d: "M3.78307 2.13983H12V2.96152H3.78307C3.32926 2.96152 2.96138 3.3294 2.96138 3.7832V20.2169C2.96138 20.6707 3.32926 21.0386 3.78307 21.0386H20.2169C20.6707 21.0386 21.0386 20.6707 21.0386 20.2169V12.0001H21.8603V20.2169C21.8603 21.1245 21.1245 21.8603 20.2169 21.8603H3.78307C2.87546 21.8603 2.13969 21.1245 2.13969 20.2169V3.7832C2.13969 2.87559 2.87546 2.13983 3.78307 2.13983Z",\n fill: "currentColor"\n }\n ),\n /* @__PURE__ */ c(\n "path",\n {\n d: "M20.735 3.58228L9.33849 14.9786C9.20345 15.1137 8.95707 15.0836 8.81873 14.9455C8.6804 14.8074 8.67777 14.5889 8.81281 14.4539L20.2094 3.0575L14.8366 4.06251C14.6186 4.11469 14.4256 3.97598 14.3959 3.78447C14.3386 3.56535 14.473 3.37568 14.664 3.35051L21.1823 2.13983L21.237 2.14043C21.2917 2.14104 21.3464 2.14165 21.374 2.16927L21.4017 2.19689C21.4564 2.1975 21.484 2.22512 21.5117 2.25273C21.5255 2.26654 21.5326 2.28712 21.5397 2.30768C21.5468 2.32824 21.5539 2.3488 21.5677 2.36261L21.5954 2.39023C21.5957 2.41754 21.6028 2.43811 21.6099 2.45867C21.6169 2.47923 21.624 2.4998 21.6244 2.52711L21.625 2.58175L20.4189 9.09545C20.4195 9.15008 20.3932 9.23172 20.3392 9.28574C20.2581 9.36676 20.1494 9.42016 20.0124 9.39132C19.8477 9.33486 19.7087 9.14213 19.7338 8.95124L20.735 3.58228Z",\n fill: "currentColor"\n }\n ),\n /* @__PURE__ */ c(\n "path",\n {\n fillRule: "evenodd",\n clipRule: "evenodd",\n d: "M12.1397 2.00014V3.1012H3.78307C3.40641 3.1012 3.10107 3.40654 3.10107 3.7832V20.2169C3.10107 20.5936 3.40641 20.8989 3.78307 20.8989H20.2169C20.5936 20.8989 20.8989 20.5936 20.8989 20.2169V11.8604H22V20.2169C22 21.2017 21.2017 22 20.2169 22H3.78307C2.79831 22 2 21.2017 2 20.2169V3.7832C2 2.79844 2.79831 2.00014 3.78307 2.00014H12.1397ZM21.6244 2.52711L21.625 2.58175L20.4189 9.09545C20.4195 9.15008 20.3932 9.23172 20.3392 9.28574C20.2581 9.36676 20.1494 9.42016 20.0124 9.39132C19.8477 9.33486 19.7087 9.14213 19.7338 8.95124L20.735 3.58228L9.33849 14.9786C9.20345 15.1137 8.95707 15.0836 8.81873 14.9455C8.6804 14.8074 8.67777 14.5889 8.81281 14.4539L20.2094 3.0575L14.8366 4.06251C14.6186 4.11469 14.4256 3.97598 14.3959 3.78447C14.3386 3.56535 14.473 3.37568 14.664 3.35051L21.1823 2.13983L21.237 2.14043C21.2917 2.14104 21.3464 2.14165 21.374 2.16927L21.4017 2.19689C21.4564 2.1975 21.484 2.22512 21.5117 2.25273C21.5255 2.26654 21.5326 2.28712 21.5397 2.30768C21.5468 2.32824 21.5539 2.3488 21.5677 2.36261L21.5954 2.39023C21.5957 2.41754 21.6028 2.43811 21.6099 2.45867C21.6169 2.47923 21.624 2.4998 21.6244 2.52711ZM21.4674 2.06526C21.54 2.08338 21.5841 2.12754 21.6078 2.15124L21.6104 2.15387C21.6485 2.19194 21.6651 2.24196 21.6707 2.25885C21.6711 2.26017 21.6715 2.26128 21.6718 2.26217L21.6756 2.27289L21.7344 2.3316L21.7351 2.38855C21.7351 2.39093 21.7351 2.3933 21.7419 2.41319L21.7428 2.41567C21.7501 2.4368 21.7634 2.47534 21.764 2.52543L21.7648 2.59375L20.5583 9.10949C20.555 9.19657 20.5159 9.30658 20.4379 9.38451C20.3332 9.48924 20.1788 9.56909 19.9837 9.52801L19.9752 9.52624L19.9671 9.52346C19.8516 9.48386 19.7521 9.3998 19.6854 9.29864C19.6183 9.19695 19.5776 9.06778 19.5953 8.93308L19.5963 8.92559L20.5151 3.99978L9.43727 15.0774C9.33453 15.1802 9.19543 15.2142 9.06837 15.2037C8.94167 15.1933 8.81398 15.1382 8.72004 15.0444C8.52925 14.8539 8.52226 14.5469 8.71404 14.3551L19.7915 3.27777L14.8655 4.19922C14.5746 4.26678 14.305 4.08269 14.259 3.813C14.1867 3.52172 14.3666 3.25116 14.6418 3.21255L21.1702 2L21.2422 2.00079C21.2669 2.00106 21.3029 2.00144 21.3369 2.00666C21.3696 2.01168 21.423 2.0241 21.4674 2.06526ZM3.78307 2.13983C2.87546 2.13983 2.13969 2.87559 2.13969 3.7832V20.2169C2.13969 21.1245 2.87546 21.8603 3.78307 21.8603H20.2169C21.1245 21.8603 21.8603 21.1245 21.8603 20.2169V12.0001H21.0386V20.2169C21.0386 20.6707 20.6707 21.0386 20.2169 21.0386H3.78307C3.32926 21.0386 2.96138 20.6707 2.96138 20.2169V3.7832C2.96138 3.3294 3.32926 2.96152 3.78307 2.96152H12V2.13983H3.78307Z",\n fill: "currentColor"\n }\n )\n] }), Bz = () => /* @__PURE__ */ c("svg", { viewBox: "0 0 24 24", fill: "none", xmlns: "http://www.w3.org/2000/svg", children: /* @__PURE__ */ c(\n "path",\n {\n fillRule: "evenodd",\n clipRule: "evenodd",\n d: "M24 8.37569C24 8.23971 23.9368 8.04434 23.7526 7.91234C23.6028 7.76571 23.3701 7.77001 23.2243 7.8416L19.4309 9.17632V6.05171C19.4309 5.72411 19.1778 5.45454 18.8536 5.45454H0.577345C0.253173 5.45454 0 5.72411 0 6.05171V17.9483C0 18.2759 0.253173 18.5455 0.577345 18.5455H18.8536C19.1778 18.5455 19.4309 18.2759 19.4309 17.9483V14.8237L23.2463 16.1661C23.4311 16.1661 23.6205 16.1702 23.7599 16.025C23.8728 15.9074 24 15.7177 24 15.5136V8.37569ZM22.7922 9.2351V14.7096L19.3778 13.5068V10.4379L22.7922 9.2351ZM1.10154 17.2958H18.2231V6.59355H1.10154V17.2958Z",\n fill: "currentColor"\n }\n) }), Sz = () => /* @__PURE__ */ c("svg", { viewBox: "0 0 24 24", fill: "none", xmlns: "http://www.w3.org/2000/svg", children: /* @__PURE__ */ c(\n "path",\n {\n fillRule: "evenodd",\n clipRule: "evenodd",\n d: "M19.4574 19.4454C20.6822 19.8683 21.9104 20.3922 23.1658 20.7165C23.3055 20.7526 23.6206 20.7004 23.7802 20.5384C23.9052 20.4116 24 20.1819 24 20.0138V13.1234C24 12.9192 23.9906 12.7108 23.7995 12.5743C23.6193 12.4065 23.375 12.456 23.1907 12.5129C23.0965 12.5419 22.159 12.8633 21.2469 13.1769C20.7904 13.3338 20.3397 13.4889 20.0032 13.6048L19.5103 13.7746V10.8475C19.5103 10.489 19.226 10.1969 18.8667 10.1969H17.2878C18.3746 9.24162 19.0349 7.82682 19.0349 6.23754C19.0349 3.3048 16.6895 0.976929 13.8487 0.976929C12.2307 0.976929 10.7901 1.736 9.80811 3.00679C8.8244 1.73555 7.33182 0.976929 5.71436 0.976929C2.8185 0.976929 0.528205 3.36074 0.528205 6.23754C0.528205 7.83736 1.19688 9.21263 2.28977 10.1969H0.643591C0.284216 10.1969 0 10.489 0 10.8475V22.3724C0 22.731 0.284221 23.0231 0.643591 23.0231H18.8138C19.1732 23.0231 19.4574 22.731 19.4574 22.3724V19.4454ZM1.64758 6.23755C1.64758 3.98617 3.44348 2.11002 5.71476 2.11002C7.24655 2.11002 8.40226 2.97999 9.32813 4.415C9.40038 4.527 9.47961 4.6255 9.53628 4.68303H9.80815H10.0988C10.1607 4.61438 10.236 4.5258 10.3101 4.415C11.1969 3.08882 12.3701 2.11002 13.9547 2.11002C16.1732 2.11002 18.0219 3.93256 18.0219 6.23755C18.0219 8.54253 16.226 10.3651 13.9547 10.3651C12.423 10.3651 11.3848 9.3567 10.3101 8.06009C10.2251 7.95747 10.1546 7.84868 10.0988 7.79207H9.83474H9.57064C9.48922 7.8747 9.44441 7.95747 9.35936 8.06009C8.28471 9.3567 7.29937 10.3651 5.71476 10.3651C3.44348 10.3651 1.64758 8.48892 1.64758 6.23755ZM1.1722 21.89H18.3917V11.33H1.1722V21.89ZM22.9342 19.3706L19.3424 18.1377V15.0286L22.9342 13.7958V19.3706ZM9.78422 9.27198C9.50777 9.67969 9.19188 10.0099 8.83628 10.2617H10.7465C10.3858 9.9723 10.065 9.64237 9.78422 9.27198Z",\n fill: "currentColor"\n }\n) }), Ez = () => /* @__PURE__ */ c("svg", { viewBox: "0 0 24 24", fill: "none", xmlns: "http://www.w3.org/2000/svg", children: /* @__PURE__ */ c(\n "path",\n {\n d: "M8.31641 23.932C8.38526 24 8.52297 24 8.66067 24C8.72953 24 8.8672 24 8.93606 23.932L15.5459 20.6686C15.7525 20.5326 15.8902 20.3286 15.8902 20.1246V17.0651L22.3623 7.47876C22.4311 7.34278 22.5 7.27479 22.5 7.13881V0.611894C22.5 0.271951 22.2246 0 21.8804 0H2.11969C1.77543 0 1.5 0.271951 1.5 0.611894V7.13881C1.5 7.27479 1.56886 7.41077 1.63771 7.47876L8.10986 17.0651V23.3881C8.04101 23.6601 8.17871 23.796 8.31641 23.932ZM14.6508 19.7847L9.3492 22.4363V17.6091H14.6508V19.7847ZM2.73934 1.29178H21.1918V7.00283L14.9262 16.3173H9.00493L2.73934 7.00283V1.29178Z",\n fill: "currentColor"\n }\n) }), kz = () => /* @__PURE__ */ c("svg", { viewBox: "0 0 24 24", fill: "none", xmlns: "http://www.w3.org/2000/svg", children: /* @__PURE__ */ c(\n "path",\n {\n d: "M23 0.6V7.1C23 7.2 22.9 7.3 22.9 7.4L16.4 17V20.1C16.4 20.3 16.3 20.5 16.1 20.7L9.5 24C9.4 24 9.2 24 9.2 24C9.1 24 8.9 24 8.9 23.9C8.8 23.8 8.6 23.6 8.7 23.4V17.1L2.1 7.5C2.1 7.4 2 7.3 2 7.1V0.6C2 0.3 2.3 0 2.6 0H22.4C22.7 0 23 0.3 23 0.6Z",\n fill: "currentcolor"\n }\n) }), Nz = () => /* @__PURE__ */ e1("svg", { viewBox: "0 0 24 24", fill: "none", xmlns: "http://www.w3.org/2000/svg", children: [\n /* @__PURE__ */ c(\n "path",\n {\n fillRule: "evenodd",\n clipRule: "evenodd",\n d: "M0.652136 12.5572H2.96316V20.4128C2.96316 20.7059 3.20013 20.9404 3.49642 20.9404C3.7927 20.9404 4.02974 20.7059 4.02974 20.4128V12.5572H6.34077C6.63705 12.5572 6.87409 12.3227 6.87409 12.0296C6.87409 11.7365 6.63705 11.502 6.34077 11.502H4.02974V3.64642C4.02974 3.3533 3.7927 3.11881 3.49642 3.11881C3.20013 3.11881 2.96316 3.3533 2.96316 3.64642V11.502H0.652136C0.355852 11.502 0.118811 11.7365 0.118811 12.0296C0.118811 12.3227 0.355852 12.5572 0.652136 12.5572ZM21.0367 3.64642C21.0367 3.3533 20.7997 3.11881 20.5034 3.11881C20.2071 3.11881 19.97 3.3533 19.97 3.64642V8.68807H17.659C17.3627 8.68807 17.1257 8.92256 17.1257 9.21568C17.1257 9.5088 17.3627 9.7433 17.659 9.7433H19.97V20.4128C19.97 20.7059 20.2071 20.9404 20.5034 20.9404C20.7997 20.9404 21.0367 20.7059 21.0367 20.4128V9.7433H23.3476C23.6439 9.7433 23.881 9.5088 23.881 9.21568C23.881 8.92256 23.6439 8.68807 23.3476 8.68807H21.0367V3.64642ZM11.4963 15.3712H9.18531C8.88903 15.3712 8.65198 15.1367 8.65198 14.8436C8.65198 14.5504 8.88903 14.3159 9.18531 14.3159H11.4963V3.64642C11.4963 3.3533 11.7333 3.11881 12.0296 3.11881C12.3259 3.11881 12.5629 3.3533 12.5629 3.64642V14.3159H14.8739C15.1702 14.3159 15.4073 14.5504 15.4073 14.8436C15.4073 15.1367 15.1702 15.3712 14.8739 15.3712H12.5629V20.4128C12.5629 20.7059 12.3259 20.9404 12.0296 20.9404C11.7333 20.9404 11.4963 20.7059 11.4963 20.4128V15.3712Z",\n fill: "currentcolor"\n }\n ),\n /* @__PURE__ */ c(\n "path",\n {\n fillRule: "evenodd",\n clipRule: "evenodd",\n d: "M2.84438 12.676H0.652141C0.291449 12.676 0 12.3896 0 12.0296C0 11.6697 0.291449 11.3832 0.652141 11.3832H2.84438V3.64642C2.84438 3.2865 3.13573 3 3.49645 3C3.85714 3 4.14859 3.28648 4.14859 3.64642V11.3832H6.34082C6.70151 11.3832 6.99296 11.6697 6.99296 12.0296C6.99296 12.3896 6.70151 12.676 6.34082 12.676H4.14859V20.4128C4.14859 20.7727 3.85714 21.0592 3.49645 21.0592C3.13573 21.0592 2.84438 20.7727 2.84438 20.4128V12.676ZM0.652136 12.5572C0.355852 12.5572 0.118811 12.3227 0.118811 12.0296C0.118811 11.7365 0.355852 11.502 0.652136 11.502H2.96316V3.64642C2.96316 3.3533 3.20013 3.11881 3.49642 3.11881C3.7927 3.11881 4.02974 3.3533 4.02974 3.64642V11.502H6.34077C6.63705 11.502 6.87409 11.7365 6.87409 12.0296C6.87409 12.3227 6.63705 12.5572 6.34077 12.5572H4.02974V20.4128C4.02974 20.7059 3.7927 20.9404 3.49642 20.9404C3.20013 20.9404 2.96316 20.7059 2.96316 20.4128V12.5572H0.652136ZM20.5036 3C20.8642 3 21.1557 3.28648 21.1557 3.64642V8.56926H23.3479C23.7085 8.56926 24 8.85573 24 9.21568C24 9.57562 23.7086 9.86211 23.3479 9.86211H21.1557V20.4128C21.1557 20.7727 20.8643 21.0592 20.5036 21.0592C20.1429 21.0592 19.8514 20.7727 19.8514 20.4128V9.86211H17.6592C17.2985 9.86211 17.007 9.57562 17.007 9.21568C17.007 8.85574 17.2985 8.56926 17.6592 8.56926H19.8514V3.64642C19.8514 3.28648 20.1429 3 20.5036 3ZM19.97 3.64642C19.97 3.3533 20.2071 3.11881 20.5034 3.11881C20.7997 3.11881 21.0367 3.3533 21.0367 3.64642V8.68807H23.3476C23.6439 8.68807 23.881 8.92256 23.881 9.21568C23.881 9.5088 23.6439 9.7433 23.3476 9.7433H21.0367V20.4128C21.0367 20.7059 20.7997 20.9404 20.5034 20.9404C20.2071 20.9404 19.97 20.7059 19.97 20.4128V9.7433H17.659C17.3627 9.7433 17.1257 9.5088 17.1257 9.21568C17.1257 8.92256 17.3627 8.68807 17.659 8.68807H19.97V3.64642ZM11.3776 15.49H9.18539C8.8247 15.49 8.53325 15.2035 8.53325 14.8436C8.53325 14.4836 8.8247 14.1971 9.18539 14.1971H11.3776V3.64642C11.3776 3.28648 11.669 3 12.0297 3C12.3904 3 12.6818 3.28648 12.6818 3.64642V14.1971H14.8741C15.2348 14.1971 15.5262 14.4836 15.5262 14.8436C15.5262 15.2035 15.2348 15.49 14.8741 15.49H12.6818V20.4128C12.6818 20.7727 12.3904 21.0592 12.0297 21.0592C11.669 21.0592 11.3776 20.7727 11.3776 20.4128V15.49ZM11.4963 15.3712V20.4128C11.4963 20.7059 11.7333 20.9404 12.0296 20.9404C12.3259 20.9404 12.5629 20.7059 12.5629 20.4128V15.3712H14.8739C15.1702 15.3712 15.4073 15.1367 15.4073 14.8436C15.4073 14.5504 15.1702 14.3159 14.8739 14.3159H12.5629V3.64642C12.5629 3.3533 12.3259 3.11881 12.0296 3.11881C11.7333 3.11881 11.4963 3.3533 11.4963 3.64642V14.3159H9.18531C8.88903 14.3159 8.65198 14.5504 8.65198 14.8436C8.65198 15.1367 8.88903 15.3712 9.18531 15.3712H11.4963Z",\n fill: "currentcolor"\n }\n )\n] }), Tz = () => /* @__PURE__ */ e1("svg", { xmlns: "http://www.w3.org/2000/svg", viewBox: "0 0 24 24", fill: "none", children: [\n /* @__PURE__ */ c(\n "path",\n {\n d: "M6.5 11.1H4.8V4C4.8 3.4 4.3 3 3.8 3C3.2 3 2.8 3.5 2.8 4V11.1H1C0.4 11.1 0 11.6 0 12.1C0 12.7 0.5 13.1 1 13.1H2.7V20.2C2.7 20.8 3.2 21.2 3.7 21.2C4.3 21.2 4.7 20.7 4.7 20.2V13.1H6.4C7 13.1 7.4 12.6 7.4 12.1C7.6 11.6 7.1 11.1 6.5 11.1Z",\n fill: "currentcolor"\n }\n ),\n /* @__PURE__ */ c(\n "path",\n {\n d: "M22.9 8.4H21.2V4C21.2 3.4 20.7 3 20.2 3C19.7 3 19.2 3.5 19.2 4V8.3H17.5C16.9 8.3 16.5 8.8 16.5 9.3C16.5 9.8 17 10.3 17.5 10.3H19.2V20.1C19.2 20.7 19.7 21.1 20.2 21.1C20.7 21.1 21.2 20.6 21.2 20.1V10.4H22.9C23.5 10.4 23.9 9.9 23.9 9.4C23.9 8.9 23.5 8.4 22.9 8.4Z",\n fill: "currentcolor"\n }\n ),\n /* @__PURE__ */ c(\n "path",\n {\n d: "M14.8 13.8H13.1V4C13.1 3.4 12.6 3 12.1 3C11.5 3 11.1 3.5 11.1 4V13.8H9.3C8.7 13.8 8.3 14.3 8.3 14.8C8.3 15.4 8.8 15.8 9.3 15.8H11V20.1C11 20.7 11.5 21.1 12 21.1C12.6 21.1 13 20.6 13 20.1V15.8H14.7C15.3 15.8 15.7 15.3 15.7 14.8C15.8 14.3 15.3 13.8 14.8 13.8Z",\n fill: "currentcolor"\n }\n )\n] }), Iz = () => /* @__PURE__ */ c("svg", { viewBox: "0 0 24 24", fill: "none", xmlns: "http://www.w3.org/2000/svg", children: /* @__PURE__ */ c(\n "path",\n {\n fillRule: "evenodd",\n clipRule: "evenodd",\n d: "M5.4 0.7C5.4 0.313401 5.0866 0 4.7 0C4.3134 0 4 0.313401 4 0.7V23.3C4 23.6866 4.3134 24 4.7 24C5.0866 24 5.4 23.6866 5.4 23.3V0.7ZM19.1976 24C18.9569 24 18.7964 23.9216 18.6359 23.7647L7.24084 12.4706C6.91985 12.1569 6.91985 11.7647 7.24084 11.451L18.7162 0.235294C19.0371 -0.0784314 19.4384 -0.0784314 19.7594 0.235294C20.0803 0.54902 20.0803 0.941177 19.7594 1.2549L8.7655 12L19.7594 22.7451C20.0803 23.0588 20.0803 23.451 19.7594 23.7647C19.5989 23.9216 19.3581 24 19.1976 24Z",\n fill: "currentColor"\n }\n) }), Dz = () => /* @__PURE__ */ c("svg", { viewBox: "0 0 24 24", fill: "none", xmlns: "http://www.w3.org/2000/svg", children: /* @__PURE__ */ c(\n "path",\n {\n d: "M9.02078 0.254132C7.13656 0.307946 5.26823 0.873142 3.56302 1.97938C3.33515 2.12564 3.18843 2.39591 3.1875 2.67119C3.1875 9.42415 3.1875 16.1771 3.1875 22.9301C3.1875 23.3829 3.54619 23.75 3.98863 23.75C4.4311 23.75 4.78977 23.3829 4.78977 22.9301V13.0056C5.78534 12.4129 9.06863 10.787 13.0181 12.5359C15.3768 13.5803 17.1723 13.7929 18.4091 13.7231C19.6458 13.6532 20.4036 13.2448 20.4036 13.2448C20.6485 13.104 20.8104 12.8233 20.8125 12.5359V2.66265C20.8151 2.37867 20.6609 2.09874 20.4228 1.95289C20.1847 1.80704 19.871 1.80064 19.6275 1.93668C19.6275 1.93668 19.3066 2.14391 18.334 2.1929C17.3613 2.2419 15.8207 2.08364 13.644 1.15092C12.4106 0.622404 11.123 0.325454 9.83024 0.262672C9.56093 0.249581 9.28993 0.246441 9.02078 0.254148V0.254132ZM9.12092 1.87689C9.33274 1.87178 9.54293 1.87472 9.75515 1.88543C10.8543 1.94161 11.957 2.2044 13.0265 2.66265C15.3932 3.67684 17.1879 3.89468 18.4174 3.83274C18.7532 3.81583 18.9515 3.74754 19.2102 3.69609V11.9551C19.0067 12.009 18.7511 12.0677 18.3256 12.0917C17.3544 12.1466 15.8143 11.99 13.6523 11.0327C9.8487 9.34841 6.51648 10.3881 4.78977 11.1949V10.3579V3.14948C6.1681 2.33898 7.63807 1.91269 9.12092 1.87689Z",\n fill: "currentColor"\n }\n) }), Hz = () => /* @__PURE__ */ c("svg", { xmlns: "http://www.w3.org/2000/svg", viewBox: "0 0 24 24", fill: "none", children: /* @__PURE__ */ c(\n "path",\n {\n d: "M20.6 2.4V12.3C20.6 12.6 20.4 12.9 20.2 13C20.2 13 19.4 13.4 18.2 13.5C17 13.6 15.2 13.4 12.8 12.3C9.1 10.7 6 12 4.8 12.6V22.6C4.8 23.1 4.4 23.5 3.9 23.5H3.8C3.8 23.5 3.8 23.5 3.7 23.5C3.3 23.4 3 23 3 22.6V2.4C3 2.1 3.2 1.8 3.4 1.7C5.1 0.6 7 0.1 8.8 0C9.1 0 9.3 0 9.6 0C10.9 0.1 12.2 0.4 13.4 0.9C15.6 1.8 17.1 2 18.1 1.9C19.1 1.9 19.4 1.7 19.4 1.7C19.6 1.6 19.9 1.6 20.2 1.7C20.5 1.9 20.6 2.1 20.6 2.4Z",\n fill: "currentColor"\n }\n) }), Vz = () => /* @__PURE__ */ c("svg", { viewBox: "0 0 24 24", fill: "none", xmlns: "http://www.w3.org/2000/svg", children: /* @__PURE__ */ c(\n "path",\n {\n fillRule: "evenodd",\n clipRule: "evenodd",\n d: "M22.9751 5.29354H13.4908L11.2209 3.01226C11.1588 2.94991 11.0936 2.89994 11.0176 2.866C10.9413 2.8319 10.8582 2.81583 10.7628 2.81583H1.01593C0.684697 2.81583 0.419922 3.08251 0.419922 3.41442V18.1079C0.419922 19.8227 1.77406 21.1842 3.48132 21.1842H22.9751C23.3064 21.1842 23.5711 20.9175 23.5711 20.5856V5.8997C23.6019 5.73253 23.5505 5.57905 23.4403 5.46837C23.3297 5.35712 23.1646 5.29354 22.9751 5.29354ZM1.66928 18.1655V4.07064H10.5576L11.7744 5.29354H3.48132C3.15009 5.29354 2.88532 5.56022 2.88532 5.89213V19.8425C2.16844 19.5939 1.66928 18.9544 1.66928 18.1655ZM4.07734 19.987H22.3791V6.49073H4.07734V19.987Z",\n fill: "currentColor"\n }\n) }), Pz = () => /* @__PURE__ */ c("svg", { viewBox: "0 0 24 24", fill: "none", xmlns: "http://www.w3.org/2000/svg", children: /* @__PURE__ */ c(\n "path",\n {\n fillRule: "evenodd",\n clipRule: "evenodd",\n d: "M19.8837 8.19881H23.4322C23.6896 8.19881 23.8226 8.33448 23.8812 8.39455L23.8887 8.40224L23.8946 8.41124C24.0227 8.60813 24.0204 8.80694 23.9599 8.9931L23.958 8.99891L19.8199 19.6495C19.7607 19.7708 19.683 19.8685 19.5843 19.9359C19.4849 20.0038 19.3702 20.0363 19.2446 20.0363H2.65335C1.21397 20.0363 0 18.8463 0 17.3211V4.56132C0 4.23212 0.258377 3.96365 0.586066 3.96365H8.90819C9.00076 3.96365 9.08282 3.9796 9.15876 4.01417C9.23415 4.0485 9.29791 4.09863 9.35724 4.1594L11.2334 6.08123H19.2976C19.6253 6.08123 19.8837 6.34971 19.8837 6.67891V8.19881ZM2.27039 18.7628C1.71545 18.5748 1.22514 17.991 1.22514 17.3211V5.159H8.70325L10.5794 7.08083C10.6388 7.1416 10.7025 7.19173 10.7779 7.22605C10.8539 7.26063 10.9359 7.27658 11.0285 7.27658H18.7115V8.19881H6.84091C6.71528 8.19881 6.6006 8.23133 6.50116 8.29924C6.40252 8.36659 6.32511 8.46446 6.26589 8.58577L2.27039 18.7628ZM18.9052 18.841L22.5833 9.44845H7.28634L3.6082 18.841H18.9052Z",\n fill: "currentColor"\n }\n) }), Fz = () => /* @__PURE__ */ c("svg", { viewBox: "0 0 24 24", fill: "none", xmlns: "http://www.w3.org/2000/svg", children: /* @__PURE__ */ c(\n "path",\n {\n fillRule: "evenodd",\n clipRule: "evenodd",\n d: "M18.8091 2.97525H23.368C23.7113 2.97525 24 3.23153 24 3.56724V7.78354C24 8.11925 23.7113 8.37553 23.368 8.37553C23.0246 8.37553 22.6767 8.11926 22.6767 7.78354V4.21399H18.8091C18.4657 4.21399 18.1771 3.90295 18.1771 3.56724C18.1771 3.24902 18.5217 2.97525 18.8091 2.97525ZM22.6767 19.8408V16.2712C22.6767 15.8896 23.0246 15.6793 23.368 15.6793C23.6818 15.6793 24 15.9575 24 16.2712V20.4725C24 20.8082 23.7113 21.0248 23.368 21.0248H18.8091C18.4657 21.0248 18.1771 20.8082 18.1771 20.4725C18.1771 20.1368 18.4657 19.8408 18.8091 19.8408H22.6767ZM1.26405 7.78354C1.26405 8.11925 0.975395 8.37553 0.632027 8.37553C0.28876 8.37553 0 8.07558 0 7.78354V3.56724C0 3.23153 0.288658 2.97525 0.632027 2.97525H5.13171C5.47508 2.97525 5.76374 3.23153 5.76374 3.56724C5.76374 3.90295 5.47508 4.21399 5.13171 4.21399H1.26405V7.78354ZM5.13171 21.0248H0.632027C0.292091 21.0248 0 20.818 0 20.4725V16.2712C0 15.9355 0.288658 15.6793 0.632027 15.6793C0.975396 15.6793 1.26405 15.9279 1.26405 16.2712V19.8408H5.13171C5.47508 19.8408 5.76374 20.1368 5.76374 20.4725C5.76374 20.8082 5.47508 21.0248 5.13171 21.0248Z",\n fill: "currentColor"\n }\n) }), Xz = () => /* @__PURE__ */ c("svg", { viewBox: "0 0 25 24", fill: "none", xmlns: "http://www.w3.org/2000/svg", children: /* @__PURE__ */ c(\n "path",\n {\n d: "M22 0C21.353 0.00166988 20.724 0.212417 20.2066 0.600811C19.6893 0.989205 19.3113 1.53444 19.1291 2.15519C18.9469 2.77593 18.9703 3.43894 19.1957 4.04533C19.4211 4.65172 19.8365 5.16899 20.38 5.52L17.76 13.07C17.6634 13.0651 17.5666 13.0651 17.47 13.07C16.8661 13.0726 16.2771 13.2573 15.78 13.6L11.15 9.38C11.3924 8.95999 11.5232 8.4849 11.53 8C11.5308 7.47913 11.3961 6.96702 11.1389 6.51404C10.8818 6.06107 10.5112 5.68284 10.0635 5.41659C9.61584 5.15033 9.10656 5.00522 8.58579 4.99553C8.06501 4.98584 7.55068 5.1119 7.09342 5.36132C6.63615 5.61074 6.2517 5.97491 5.9779 6.41801C5.7041 6.86111 5.55038 7.36785 5.53187 7.88839C5.51336 8.40893 5.63069 8.92532 5.87233 9.38674C6.11397 9.84817 6.47157 10.2387 6.90997 10.52L4.28997 18C4.19337 17.9951 4.09657 17.9951 3.99997 18C3.27826 17.9981 2.58006 18.2565 2.03342 18.7277C1.48678 19.1989 1.12833 19.8514 1.02382 20.5656C0.919304 21.2797 1.07573 22.0075 1.4644 22.6156C1.85308 23.2237 2.44795 23.6714 3.13993 23.8764C3.83191 24.0814 4.57461 24.0301 5.23183 23.7319C5.88904 23.4337 6.41673 22.9085 6.71811 22.2527C7.01948 21.597 7.07436 20.8545 6.87266 20.1616C6.67096 19.4686 6.22621 18.8716 5.61997 18.48L8.23997 10.93C8.33657 10.9349 8.43337 10.9349 8.52997 10.93C9.1338 10.9274 9.72281 10.7427 10.22 10.4L14.85 14.59C14.6026 15.0188 14.4716 15.5049 14.47 16C14.4691 16.5209 14.6039 17.033 14.861 17.486C15.1181 17.9389 15.4888 18.3172 15.9364 18.5834C16.3841 18.8497 16.8934 18.9948 17.4142 19.0045C17.9349 19.0142 18.4493 18.8881 18.9065 18.6387C19.3638 18.3893 19.7482 18.0251 20.022 17.582C20.2958 17.1389 20.4496 16.6321 20.4681 16.1116C20.4866 15.5911 20.3692 15.0747 20.1276 14.6133C19.886 14.1518 19.5284 13.7613 19.09 13.48L21.71 6C21.8066 6.00492 21.9034 6.00492 22 6C22.7956 6 23.5587 5.68393 24.1213 5.12132C24.6839 4.55871 25 3.79565 25 3C25 2.20435 24.6839 1.44129 24.1213 0.87868C23.5587 0.31607 22.7956 0 22 0V0ZM3.99997 22.6C3.68352 22.6 3.37418 22.5062 3.11106 22.3304C2.84794 22.1545 2.64286 21.9047 2.52176 21.6123C2.40066 21.3199 2.36898 20.9982 2.43071 20.6879C2.49245 20.3775 2.64483 20.0924 2.8686 19.8686C3.09236 19.6449 3.37746 19.4925 3.68782 19.4307C3.99819 19.369 4.3199 19.4007 4.61226 19.5218C4.90462 19.6429 5.15451 19.848 5.33032 20.1111C5.50613 20.3742 5.59997 20.6835 5.59997 21C5.59997 21.4243 5.4314 21.8313 5.13134 22.1314C4.83128 22.4314 4.42432 22.6 3.99997 22.6ZM8.52997 9.6C8.21352 9.6 7.90418 9.50616 7.64106 9.33035C7.37794 9.15454 7.17286 8.90466 7.05176 8.61229C6.93066 8.31993 6.89898 7.99823 6.96071 7.68786C7.02245 7.37749 7.17483 7.09239 7.3986 6.86863C7.62236 6.64487 7.90746 6.49248 8.21782 6.43074C8.52819 6.36901 8.8499 6.40069 9.14226 6.52179C9.43463 6.64289 9.68451 6.84797 9.86032 7.11109C10.0361 7.37421 10.13 7.68355 10.13 8C10.1195 8.41738 9.94636 8.81414 9.64743 9.1056C9.3485 9.39706 8.94748 9.56013 8.52997 9.56V9.6ZM17.47 17.68C17.1535 17.68 16.8442 17.5862 16.5811 17.4104C16.3179 17.2345 16.1129 16.9847 15.9918 16.6923C15.8707 16.3999 15.839 16.0782 15.9007 15.7679C15.9624 15.4575 16.1148 15.1724 16.3386 14.9486C16.5624 14.7249 16.8475 14.5725 17.1578 14.5107C17.4682 14.449 17.7899 14.4807 18.0823 14.6018C18.3746 14.7229 18.6245 14.928 18.8003 15.1911C18.9761 15.4542 19.07 15.7635 19.07 16.08C19.0595 16.4974 18.8864 16.8941 18.5874 17.1856C18.2885 17.4771 17.8875 17.6401 17.47 17.64V17.68ZM22 4.6C21.6835 4.6 21.3742 4.50616 21.1111 4.33035C20.8479 4.15454 20.6429 3.90466 20.5218 3.61229C20.4007 3.31993 20.369 2.99823 20.4307 2.68786C20.4925 2.37749 20.6448 2.09239 20.8686 1.86863C21.0924 1.64487 21.3775 1.49248 21.6878 1.43074C21.9982 1.36901 22.3199 1.40069 22.6123 1.52179C22.9046 1.64289 23.1545 1.84797 23.3303 2.11109C23.5061 2.37421 23.6 2.68355 23.6 3C23.6 3.42435 23.4314 3.83131 23.1313 4.13137C22.8313 4.43143 22.4243 4.6 22 4.6Z",\n fill: "currentcolor"\n }\n) }), Uz = () => /* @__PURE__ */ c("svg", { xmlns: "http://www.w3.org/2000/svg", viewBox: "0 0 25 25", fill: "none", children: /* @__PURE__ */ c(\n "path",\n {\n d: "M24.9999 3C24.9999 3.8 24.6999 4.6 24.0999 5.1C23.4999 5.6 22.7999 6 21.9999 6H21.8999L19.1999 13.6C19.5999 13.9 19.8999 14.2 20.0999 14.6C20.2999 15.1 20.4999 15.6 20.3999 16.1C20.3999 16.6 20.1999 17.1 19.9999 17.6C19.6999 18 19.2999 18.4 18.8999 18.7C18.3999 18.9 17.8999 19.1 17.3999 19.1C16.8999 19.1 16.3999 19 15.8999 18.7C15.3999 18.4 15.0999 18.1 14.7999 17.6C14.4999 17.1 14.3999 16.6 14.3999 16.1C14.3999 15.7 14.4999 15.3 14.6999 14.9L9.99989 10.5C9.49989 10.8 8.99989 10.9 8.49989 10.9L5.79989 18.6C6.29989 19 6.69989 19.5 6.89989 20.2C7.09989 20.9 7.09989 21.6 6.69989 22.3C6.39989 23 5.89989 23.5 5.19989 23.8C4.49989 24.1 3.79989 24.1 3.09989 23.9C2.39989 23.7 1.79989 23.2 1.39989 22.6C1.09989 22 0.89989 21.3 0.99989 20.6C1.09989 19.9 1.49989 19.2 1.99989 18.8C2.59989 18.3 3.29989 18 3.99989 18C3.99989 18 3.99989 18 4.09989 18L6.79989 10.4C6.39989 10.2 6.09989 9.8 5.89989 9.4C5.69989 8.9 5.49989 8.4 5.59989 7.9C5.59989 7.4 5.79989 6.9 5.99989 6.4C6.29989 6 6.59989 5.6 7.09989 5.4C7.59989 5.1 8.09989 5 8.59989 5C9.09989 5 9.59989 5.2 10.0999 5.4C10.5999 5.7 10.8999 6 11.1999 6.5C11.4999 7 11.5999 7.5 11.5999 8C11.5999 8.4 11.4999 8.8 11.2999 9.2L15.9999 13.5C16.4999 13.2 16.9999 13.1 17.4999 13.1H17.5999L20.2999 5.4C19.7999 5.1 19.4999 4.6 19.2999 4C18.9999 3.4 18.9999 2.8 19.0999 2.2C19.1999 1.6 19.6999 1 20.1999 0.7C20.6999 0.2 21.3999 0 21.9999 0C22.7999 0 23.5999 0.3 24.0999 0.9C24.6999 1.4 24.9999 2.2 24.9999 3Z",\n fill: "currentcolor"\n }\n) }), Yz = () => /* @__PURE__ */ c("svg", { viewBox: "0 0 16 16", fill: "none", xmlns: "http://www.w3.org/2000/svg", children: /* @__PURE__ */ c(\n "path",\n {\n fillRule: "evenodd",\n clipRule: "evenodd",\n d: "M0.6 0C0.3 0 0 0.3 0 0.7V6.6C0 7 0.3 7.3 0.6 7.3H4.4C4.8 7.2 5 6.9 5 6.5V0.7C5 0.3 4.8 0 4.4 0H0.6ZM0 9.6C0 9.2 0.3 9 0.6 9H8.4C8.8 9 9 9.3 9 9.6V15.4C9 15.8 8.7 16 8.4 16H0.6C0.3 16 0 15.7 0 15.4V9.6ZM10.8 9.6C10.8 9.2 11.1 9 11.4 9H15.3C15.7 9 15.9 9.3 15.9 9.6V15.4C15.9 15.8 15.6 16 15.3 16H11.4C11 16 10.8 15.7 10.8 15.4V9.6ZM6.7 0.7C6.7 0.3 7 0 7.4 0H15.3C15.7 0 16 0.3 16 0.7V6.6C16 7 15.7 7.3 15.3 7.3H7.4C7 7.2 6.7 6.9 6.7 6.5V0.7Z",\n fill: "currentColor"\n }\n) }), Gz = () => /* @__PURE__ */ c("svg", { viewBox: "0 0 24 24", fill: "none", xmlns: "http://www.w3.org/2000/svg", children: /* @__PURE__ */ c(\n "path",\n {\n d: "M20.788 12.9592V11.967C20.788 7.27046 16.9028 3.5 12.0637 3.5C7.22457 3.5 3.27149 7.33659 3.27149 12.0331V13.0253C1.43127 13.2899 0 14.8774 0 16.7296C0 18.7801 1.77207 20.5 3.88492 20.5C4.2257 20.5 4.49834 20.2354 4.49834 19.9047V11.967C4.49834 7.93194 7.83799 4.69069 11.9955 4.69069C16.1531 4.69069 19.4927 7.93194 19.4927 11.967V19.9047C19.4927 20.2354 19.6974 20.4339 20.0382 20.4339C22.1511 20.4339 23.9231 18.714 23.9231 16.6634C24.0594 14.8113 22.6282 13.2238 20.788 12.9592ZM1.29499 16.7296C1.29499 15.5389 2.18099 14.5467 3.27149 14.2821V19.2432C2.18099 18.9125 1.29499 17.9202 1.29499 16.7296ZM20.788 19.1109V14.1498C21.9466 14.4144 22.7645 15.4066 22.7645 16.5973C22.7645 17.788 21.9466 18.8463 20.788 19.1109Z",\n fill: "currentColor"\n }\n) }), Qz = () => /* @__PURE__ */ c("svg", { viewBox: "0 0 26 24", fill: "none", xmlns: "http://www.w3.org/2000/svg", children: /* @__PURE__ */ c(\n "path",\n {\n fillRule: "evenodd",\n clipRule: "evenodd",\n d: "M13.349 21.9435C13.2737 22.0147 13.137 22.08 12.998 22.08C12.9226 22.08 12.8654 22.0608 12.8126 22.0348C12.7895 22.0234 12.7666 22.0103 12.7447 21.9978L12.7391 21.9946C12.7148 21.9808 12.6904 21.9671 12.6627 21.9534L12.6511 21.9477L12.6517 21.9469C8.69275 19.1365 5.76181 16.8837 3.82081 14.7911C1.87811 12.6966 0.919922 10.755 0.919922 8.56803C0.919922 4.79943 3.65199 1.92 7.29891 1.92C10.2056 1.92 12.1823 3.2392 13.058 3.96663C13.9337 3.2392 15.9104 1.92 18.8171 1.92C22.4632 1.92 25.1968 4.79895 25.0761 8.5693C25.0757 10.7557 24.1176 12.7117 22.1753 14.8132C20.235 16.9124 17.3057 19.1642 13.349 21.9435ZM13.6289 5.19476C13.471 5.29439 13.3216 5.39359 13.118 5.39359C12.9194 5.39359 12.7922 5.30439 12.6289 5.19476C10.9216 4.04893 9.54905 3.14508 7.3589 3.14508C4.46833 3.14508 2.27973 5.47119 2.27973 8.56803C2.27973 10.4331 3.1501 12.16 4.9501 14.0754C6.74362 15.9839 9.45185 18.0709 13.118 20.6595C16.7841 18.0709 19.4923 15.9839 21.2859 14.0754C23.0859 12.16 23.9562 10.4331 23.9562 8.56803C23.9562 5.47119 21.7676 3.14508 18.8771 3.14508C16.1722 3.14508 14.2385 4.8102 13.6289 5.19476Z",\n fill: "currentcolor"\n }\n) }), Zz = () => /* @__PURE__ */ e1("svg", { viewBox: "0 0 24 24", fill: "none", xmlns: "http://www.w3.org/2000/svg", children: [\n /* @__PURE__ */ c(\n "path",\n {\n fillRule: "evenodd",\n clipRule: "evenodd",\n d: "M12 22.6C17.8542 22.6 22.6 17.8542 22.6 12C22.6 6.14578 17.8542 1.4 12 1.4C6.14578 1.4 1.4 6.14578 1.4 12C1.4 17.8542 6.14578 22.6 12 22.6ZM12 24C18.6274 24 24 18.6274 24 12C24 5.37258 18.6274 0 12 0C5.37258 0 0 5.37258 0 12C0 18.6274 5.37258 24 12 24Z",\n fill: "currentColor"\n }\n ),\n /* @__PURE__ */ c(\n "path",\n {\n d: "M9.87622 7.50601L9.95361 7.46538C10.2778 7.29519 10.6389 7.15872 11.0364 7.05547C11.4454 6.9517 11.8779 6.8999 12.3325 6.8999C12.8706 6.8999 13.3182 6.97452 13.6702 7.12934C14.0246 7.27204 14.3122 7.45944 14.5288 7.6938C14.7436 7.92613 14.8914 8.18898 14.9704 8.48165C15.0565 8.75722 15.1001 9.02521 15.1001 9.28522C15.1001 9.61228 15.037 9.90915 14.9085 10.1738L14.9078 10.1751C14.7833 10.4222 14.6301 10.6547 14.4484 10.8728C14.2684 11.0889 14.0696 11.2954 13.8521 11.4923C13.6413 11.6832 13.449 11.883 13.2752 12.0916L13.2738 12.0933C13.1029 12.2896 12.9587 12.5084 12.8414 12.7499L12.8408 12.7513C12.7277 12.9756 12.6699 13.2323 12.6699 13.5234V13.6758C12.6699 13.7257 12.6741 13.7697 12.6819 13.8084L12.7061 13.9282H11.4127L11.3965 13.8479C11.3578 13.6563 11.3386 13.4557 11.3386 13.2464C11.3386 12.9393 11.3919 12.6579 11.5003 12.4039L11.5016 12.4009C11.6167 12.1535 11.7607 11.925 11.9334 11.7155C12.1034 11.5002 12.2831 11.3032 12.4725 11.1247C12.6572 10.9415 12.8326 10.7584 12.9987 10.5754C13.1608 10.3967 13.2905 10.2102 13.3885 10.0158L13.3901 10.0126C13.4934 9.82478 13.5453 9.61987 13.5453 9.39602C13.5453 9.03205 13.4284 8.74545 13.1992 8.52652L13.1978 8.52521C12.9712 8.30045 12.6326 8.18023 12.1649 8.18023C11.5682 8.18023 10.9837 8.33248 10.4104 8.63932L10.3087 8.69374L9.87622 7.50601Z",\n fill: "currentColor"\n }\n ),\n /* @__PURE__ */ c(\n "path",\n {\n d: "M13.1448 16.0719C13.1448 16.3461 13.0517 16.587 12.8674 16.7901C12.6778 16.999 12.421 17.0999 12.109 17.0999C11.7971 17.0999 11.5402 16.999 11.3506 16.7901C11.1663 16.587 11.0733 16.3461 11.0733 16.0719C11.0733 15.7978 11.1663 15.5568 11.3506 15.3538C11.5402 15.1448 11.7971 15.0439 12.109 15.0439C12.421 15.0439 12.6778 15.1448 12.8674 15.3538C13.0517 15.5568 13.1448 15.7978 13.1448 16.0719Z",\n fill: "currentColor"\n }\n )\n] }), jz = () => /* @__PURE__ */ c("svg", { xmlns: "http://www.w3.org/2000/svg", viewBox: "0 0 24 24", fill: "none", children: /* @__PURE__ */ c(\n "path",\n {\n fillRule: "evenodd",\n clipRule: "evenodd",\n d: "M12 0C5.4 0 0 5.4 0 12C0 18.6 5.4 24 12 24C18.6 24 24 18.6 24 12C24 5.4 18.6 0 12 0ZM10.8 16.1C10.8 15.8 10.9 15.5 11.2 15.2C11.4 14.9 11.8 14.8 12.2 14.8C12.6 14.8 12.9 14.9 13.2 15.2C13.4 15.5 13.5 15.8 13.5 16.1C13.5 16.5 13.4 16.8 13.2 17C13 17.3 12.6 17.4 12.2 17.4C11.8 17.4 11.5 17.3 11.2 17C10.9 16.7 10.8 16.4 10.8 16.1ZM15.2 9.5C15.1 9.8 14.9 10 14.7 10.3C14.5 10.5 14.3 10.7 14.1 10.9C13.9 11.1 13.7 11.3 13.6 11.5C13.4 11.7 13.3 11.9 13.2 12.1C13 12.2 13 12.5 13 12.7V13.1L13.1 13.4H11.2V13.2C11.2 12.9 11.1 12.7 11.1 12.5C11.1 12.2 11.2 11.8 11.3 11.6C11.4 11.3 11.6 11.1 11.8 10.8C12 10.6 12.2 10.4 12.4 10.2C12.6 10 12.7 9.8 12.9 9.7C13 9.6 13.2 9.4 13.3 9.2C13.4 9 13.4 8.9 13.4 8.7C13.4 8.4 13.3 8.2 13.1 8C12.9 7.8 12.6 7.7 12.3 7.7C11.8 7.7 11.2 7.8 10.7 8.1L10.3 8.3L9.5 6.6L9.7 6.5C10.2 6.2 10.5 6.1 11 6C11.4 5.9 11.9 5.8 12.4 5.8C13 5.8 13.5 5.9 13.9 6.1C14.3 6.3 14.6 6.5 14.9 6.7C15 7 15.2 7.3 15.2 7.6C15.3 7.9 15.3 8.2 15.3 8.5C15.4 8.8 15.3 9.2 15.2 9.5Z",\n fill: "currentColor"\n }\n) }), Kz = () => /* @__PURE__ */ e1("svg", { viewBox: "0 0 24 24", fill: "none", xmlns: "http://www.w3.org/2000/svg", children: [\n /* @__PURE__ */ c(\n "circle",\n {\n cx: "12",\n cy: "12",\n r: "11.3",\n stroke: "currentColor",\n strokeWidth: "1.4"\n }\n ),\n /* @__PURE__ */ c(\n "path",\n {\n fillRule: "evenodd",\n clipRule: "evenodd",\n d: "M10.1557 7.99856C9.72698 8.3508 9.45455 8.85953 9.45455 9.52941C9.45455 9.91927 9.12895 10.2353 8.72727 10.2353C8.3256 10.2353 8 9.91927 8 9.52941C8 8.44496 8.46022 7.54193 9.21593 6.92104C9.96015 6.3096 10.9533 6 12 6C14.2092 6 16 7.73816 16 9.88235C16 11.5313 14.7578 12.852 13.3313 13.4278C12.7049 13.6806 12.3636 14.1103 12.3636 14.4706V14.8235C12.3636 15.2134 12.038 15.5294 11.6364 15.5294C11.2347 15.5294 10.9091 15.2134 10.9091 14.8235V14.4706C10.9091 13.2714 11.9156 12.4702 12.7727 12.1242C13.8208 11.7012 14.5455 10.8063 14.5455 9.88235C14.5455 8.51788 13.4058 7.41176 12 7.41176C11.2392 7.41176 10.596 7.6368 10.1557 7.99856ZM12.3636 17.2941C12.3636 17.684 12.038 18 11.6364 18C11.2347 18 10.9091 17.684 10.9091 17.2941C10.9091 16.9043 11.2347 16.5882 11.6364 16.5882C12.038 16.5882 12.3636 16.9043 12.3636 17.2941Z",\n fill: "currentColor"\n }\n )\n] }), Jz = () => /* @__PURE__ */ e1("svg", { viewBox: "0 0 24 24", fill: "none", xmlns: "http://www.w3.org/2000/svg", children: [\n /* @__PURE__ */ c(\n "path",\n {\n d: "M2.58405 6.49648L7.42904 5.3308C7.78849 5.24432 8.14999 5.4656 8.23647 5.82506C8.32296 6.18451 8.10167 6.54601 7.74222 6.63249L1.30246 8.18186C0.819599 8.29804 0.354159 7.9349 0.349412 7.43827L0.287629 0.974144C0.284095 0.604452 0.580925 0.301894 0.950617 0.298361C1.32031 0.294827 1.62287 0.591657 1.6264 0.961348L1.66917 5.43572C5.12616 0.136351 12.1657 -1.59248 17.7116 1.60943C23.4501 4.92258 25.4163 12.2604 22.1031 17.999C18.79 23.7375 11.4521 25.7037 5.71357 22.3906C5.3934 22.2057 5.2837 21.7963 5.46855 21.4761C5.6534 21.1559 6.06281 21.0462 6.38299 21.2311C11.4812 24.1746 18.0002 22.4278 20.9437 17.3296C23.8871 12.2314 22.1404 5.71234 17.0422 2.76889C12.0024 -0.140831 5.57412 1.5328 2.58405 6.49648Z",\n fill: "currentColor"\n }\n ),\n /* @__PURE__ */ c(\n "path",\n {\n d: "M17.5879 11.4194H12.3003V6.13184C12.3003 5.82443 12.0544 5.5785 11.747 5.5785C11.4396 5.5785 11.1936 5.82443 11.1936 6.13184V12.0342C11.1936 12.3416 11.4396 12.5875 11.747 12.5875H17.6493C17.9568 12.5875 18.2027 12.3416 18.2027 12.0342C18.2027 11.7268 17.8953 11.4194 17.5879 11.4194Z",\n fill: "currentColor"\n }\n )\n] }), _z = () => /* @__PURE__ */ c("svg", { viewBox: "0 0 24 24", fill: "none", xmlns: "http://www.w3.org/2000/svg", children: /* @__PURE__ */ c(\n "path",\n {\n fillRule: "evenodd",\n clipRule: "evenodd",\n d: "M23.7524 10.0811L12.3049 1.59852L12.3017 1.59625C12.1967 1.52628 12.0618 1.49391 11.9313 1.49391C11.8009 1.49391 11.6659 1.52618 11.5609 1.59615L0.228707 10.0812C-0.179525 10.347 -0.0386782 11.1747 0.630618 11.1747H2.86471V21.8927C2.86471 22.2332 3.13755 22.5061 3.47804 22.5061H20.5033C20.8438 22.5061 21.1166 22.2332 21.1166 21.8927V11.1747H23.3507C24.027 11.1747 24.1993 10.3718 23.7524 10.0811ZM21.3339 9.94796L11.9017 2.82976L2.46943 9.94796H21.3339ZM19.8306 11.234V21.3387H15.4218V16.316C15.4218 15.9755 15.1489 15.7026 14.8084 15.7026H9.11357C8.77308 15.7026 8.50024 15.9755 8.50024 16.316V21.3387H4.09137V11.234H19.8306ZM9.7269 21.3387H14.1358V16.9294H9.7269V21.3387Z",\n fill: "currentColor"\n }\n) }), $z = () => /* @__PURE__ */ e1("svg", { viewBox: "0 0 24 24", fill: "none", xmlns: "http://www.w3.org/2000/svg", children: [\n /* @__PURE__ */ c("g", { clipPath: "url(#clip0_2346_129555)", children: /* @__PURE__ */ c(\n "path",\n {\n d: "M23.8 9.6L12.3 1.1C12.2 1 12.1 1 11.9 1C11.7 1 11.6 1 11.5 1.1L0.200047 9.6C-0.199953 9.9 4.70281e-05 10.7 0.600047 10.7H2.80005V21.4C2.80005 21.7 3.10005 22 3.40005 22H9.60005V16.4H14V22H20.4C20.7 22 21 21.7 21 21.4V10.7H23.2C24 10.7 24.2 9.9 23.8 9.6Z",\n fill: "currentColor"\n }\n ) }),\n /* @__PURE__ */ c("defs", { children: /* @__PURE__ */ c("clipPath", { id: "clip0_2346_129555", children: /* @__PURE__ */ c("rect", { width: "24", height: "24", fill: "white" }) }) })\n] }), eh = () => /* @__PURE__ */ e1("svg", { viewBox: "0 0 24 24", fill: "none", xmlns: "http://www.w3.org/2000/svg", children: [\n /* @__PURE__ */ c(\n "path",\n {\n fillRule: "evenodd",\n clipRule: "evenodd",\n d: "M0.586228 3.0498H23.4138C23.7118 3.0498 23.9502 3.28488 23.9502 3.57874V20.4461C23.9502 20.74 23.7118 20.9751 23.4138 20.9751H0.586228C0.556427 20.9751 0.526628 20.9604 0.496828 20.9457C0.467029 20.931 0.43723 20.9163 0.407429 20.9163H0.288218L0.228612 20.8575C0.228612 20.8575 0.169007 20.8575 0.169007 20.7988C0.169007 20.7988 0.109419 20.7988 0.109419 20.74C0.0498629 20.6813 0.0498137 20.6812 0.0498137 20.6225V3.57874C0.0498137 3.28488 0.288218 3.0498 0.586228 3.0498ZM18.1092 8.86817L22.8774 13.5699V4.10768H1.18225V18.6242L5.8908 11.6892C6.01 11.5716 6.12921 11.4541 6.30802 11.4541C6.42722 11.4541 6.60602 11.5129 6.72522 11.6304L11.9702 16.8023L17.2748 8.92694C17.394 8.8094 17.5132 8.69184 17.692 8.69184C17.8112 8.69184 17.99 8.75062 18.1092 8.86817ZM6.42721 12.8646L1.65906 19.9172V19.976H22.8774V15.0979L17.8112 10.1024L12.5066 17.9777C12.3874 18.0953 12.2682 18.2128 12.0894 18.2128C11.9702 18.2128 11.7914 18.1541 11.6722 18.0365L6.42721 12.8646ZM6.84456 7.81023C6.84456 8.86809 5.95056 9.74965 4.87776 9.74965C3.80495 9.74965 2.91094 8.86809 2.91094 7.81023C2.91094 6.75238 3.80495 5.87084 4.87776 5.87084C5.95056 5.87084 6.84456 6.75238 6.84456 7.81023ZM5.77176 7.86901C5.77176 7.39885 5.35456 6.98746 4.87776 6.98746C4.40096 6.98746 3.98375 7.39885 3.98375 7.86901C3.98375 8.33916 4.40096 8.75055 4.87776 8.75055C5.35456 8.75055 5.77176 8.33916 5.77176 7.86901Z",\n fill: "currentColor"\n }\n ),\n /* @__PURE__ */ c(\n "path",\n {\n fillRule: "evenodd",\n clipRule: "evenodd",\n d: "M0.267798 20.9661L0.205504 20.9047C0.197379 20.903 0.18728 20.9 0.176789 20.8948C0.163488 20.8883 0.148569 20.8776 0.137071 20.8606C0.13277 20.8543 0.129223 20.8474 0.126455 20.8401C0.12343 20.839 0.120326 20.8376 0.117188 20.8361C0.103888 20.8295 0.0889719 20.8188 0.0774768 20.8018C0.0696906 20.7903 0.0643757 20.7772 0.0616823 20.7628C0.0526234 20.7538 0.0447207 20.7458 0.0381643 20.7386C0.0286083 20.7282 0.0195556 20.7169 0.0128487 20.7037C-0.000138765 20.6781 -6.09367e-05 20.6519 1.07113e-05 20.6277C1.59829e-05 20.626 2.12212e-05 20.6242 2.12212e-05 20.6224V3.57874C2.12212e-05 3.25672 0.261379 3 0.586228 3H23.4138C23.7386 3 24 3.25672 24 3.57874V20.4461C24 20.7681 23.7386 21.0249 23.4138 21.0249H0.586228C0.544563 21.0249 0.505508 21.0055 0.478591 20.9922L0.474807 20.9903C0.442173 20.9743 0.42337 20.9661 0.407429 20.9661H0.267798ZM0.169007 20.7988C0.169007 20.8575 0.228612 20.8575 0.228612 20.8575L0.288218 20.9163H0.407429C0.43723 20.9163 0.467029 20.931 0.496828 20.9457C0.526628 20.9604 0.556427 20.9751 0.586228 20.9751H23.4138C23.7118 20.9751 23.9502 20.74 23.9502 20.4461V3.57874C23.9502 3.28488 23.7118 3.0498 23.4138 3.0498H0.586228C0.288218 3.0498 0.0498137 3.28488 0.0498137 3.57874V20.6225C0.0498137 20.6812 0.0498629 20.6813 0.109419 20.74C0.109419 20.7988 0.169007 20.7988 0.169007 20.7988ZM17.2748 8.92694C17.394 8.8094 17.5132 8.69184 17.692 8.69184C17.8112 8.69184 17.99 8.75062 18.1092 8.86817L22.8774 13.5699V4.10768H1.18225V18.6242L5.8908 11.6892C6.01 11.5716 6.12921 11.4541 6.30802 11.4541C6.42722 11.4541 6.60602 11.5129 6.72522 11.6304L11.9702 16.8023L17.2748 8.92694ZM11.9624 16.7247L17.2372 8.89356L17.2398 8.89139L17.2451 8.88626C17.3603 8.77261 17.4927 8.64205 17.692 8.64205C17.8233 8.64205 18.015 8.70531 18.1442 8.83271L22.8276 13.4509V4.15747H1.23204V18.4622L5.85516 11.653L5.8611 11.6485C5.97632 11.5349 6.10868 11.4043 6.30802 11.4043C6.43932 11.4043 6.63098 11.4676 6.76018 11.595L11.9624 16.7247ZM12.5423 18.0139L12.5416 18.0132L12.5363 18.0184C12.4211 18.132 12.2887 18.2626 12.0894 18.2626C11.9581 18.2626 11.7664 18.1994 11.6372 18.072L6.43491 12.9421L1.71309 19.9262H22.8276V15.1188L17.819 10.18L12.5423 18.0139ZM17.8112 10.1024L22.8774 15.0979V19.976H1.65906V19.9172L6.42721 12.8646L11.6722 18.0365C11.7914 18.1541 11.9702 18.2128 12.0894 18.2128C12.2682 18.2128 12.3874 18.0953 12.5066 17.9777L17.8112 10.1024ZM6.89435 7.81023C6.89435 8.89624 5.9774 9.79943 4.87776 9.79943C3.77811 9.79943 2.86114 8.89624 2.86114 7.81023C2.86114 6.72422 3.77811 5.82104 4.87776 5.82104C5.9774 5.82104 6.89435 6.72422 6.89435 7.81023ZM5.72197 7.869C5.72197 7.427 5.32772 7.03725 4.87776 7.03725C4.42779 7.03725 4.03355 7.427 4.03355 7.869C4.03355 8.311 4.42779 8.70076 4.87776 8.70076C5.32772 8.70076 5.72197 8.311 5.72197 7.869ZM4.87776 9.74965C5.95056 9.74965 6.84456 8.86809 6.84456 7.81023C6.84456 6.75238 5.95056 5.87084 4.87776 5.87084C3.80495 5.87084 2.91094 6.75238 2.91094 7.81023C2.91094 8.86809 3.80495 9.74965 4.87776 9.74965ZM4.87776 6.98746C5.35456 6.98746 5.77176 7.39885 5.77176 7.86901C5.77176 8.33916 5.35456 8.75055 4.87776 8.75055C4.40096 8.75055 3.98375 8.33916 3.98375 7.86901C3.98375 7.39885 4.40096 6.98746 4.87776 6.98746Z",\n fill: "currentColor"\n }\n )\n] }), th = () => /* @__PURE__ */ c("svg", { viewBox: "0 0 24 24", fill: "none", xmlns: "http://www.w3.org/2000/svg", children: /* @__PURE__ */ c(\n "path",\n {\n d: "M24 0.967455C23.9923 0.455427 23.5619 0.00800594 23.0325 0L8.84056 2.58238C8.42455 2.63559 8.13314 3.04799 8.25952 3.52628C8.32543 3.94411 8.74684 4.24821 9.2215 4.13635L20.9193 1.99236L0.215259 22.6964C-0.0779991 22.9896 -0.0707233 23.4661 0.231611 23.7685C0.533945 24.0708 1.01043 24.0781 1.30369 23.7848L21.9491 3.13944L19.805 14.8372C19.7518 15.2532 20.056 15.6746 20.4151 15.7992C20.833 15.8651 21.2454 15.5737 21.359 15.2182L24 0.967455Z",\n fill: "currentcolor"\n }\n) }), oh = () => /* @__PURE__ */ e1("svg", { viewBox: "0 0 24 24", fill: "none", xmlns: "http://www.w3.org/2000/svg", children: [\n /* @__PURE__ */ c(\n "path",\n {\n fillRule: "evenodd",\n clipRule: "evenodd",\n d: "M12 22.6C17.8542 22.6 22.6 17.8542 22.6 12C22.6 6.14578 17.8542 1.4 12 1.4C6.14578 1.4 1.4 6.14578 1.4 12C1.4 17.8542 6.14578 22.6 12 22.6ZM12 24C18.6274 24 24 18.6274 24 12C24 5.37258 18.6274 0 12 0C5.37258 0 0 5.37258 0 12C0 18.6274 5.37258 24 12 24Z",\n fill: "currentColor"\n }\n ),\n /* @__PURE__ */ c(\n "path",\n {\n d: "M12.7999 7.7C12.7999 8.0866 12.4865 8.4 12.0999 8.4C11.7133 8.4 11.3999 8.0866 11.3999 7.7C11.3999 7.3134 11.7133 7 12.0999 7C12.4865 7 12.7999 7.3134 12.7999 7.7Z",\n fill: "currentColor"\n }\n ),\n /* @__PURE__ */ c(\n "path",\n {\n d: "M11.3999 9.59998H12.7999V16H11.3999V9.59998Z",\n fill: "currentColor"\n }\n )\n] }), rh = () => /* @__PURE__ */ c("svg", { xmlns: "http://www.w3.org/2000/svg", viewBox: "0 0 24 24", fill: "none", children: /* @__PURE__ */ c(\n "path",\n {\n fillRule: "evenodd",\n clipRule: "evenodd",\n d: "M12 0C5.4 0 0 5.4 0 12C0 18.6 5.4 24 12 24C18.6 24 24 18.6 24 12C24 5.4 18.6 0 12 0ZM11 10.2H13.2V17.4H11V10.2ZM12.1 8.8C11.5 8.8 11 8.3 11 7.7C11 7.1 11.5 6.6 12.1 6.6C12.7 6.6 13.2 7.1 13.2 7.7C13.2 8.3 12.7 8.8 12.1 8.8Z",\n fill: "currentColor"\n }\n) }), nh = () => /* @__PURE__ */ c("svg", { viewBox: "0 0 24 24", fill: "none", xmlns: "http://www.w3.org/2000/svg", children: /* @__PURE__ */ c(\n "path",\n {\n d: "M21.0156 0H4.67943C4.3769 0 4.07438 0.302521 4.07438 0.605042V3.22689H3.06598C2.76346 3.22689 2.46094 3.52941 2.46094 3.93277C2.46094 4.33613 2.76346 4.53782 3.06598 4.53782H4.07438V6.55462H3.06598C2.76346 6.55462 2.46094 6.85714 2.46094 7.15966C2.46094 7.46219 2.76346 7.76471 3.06598 7.76471H4.07438V9.78151H3.06598C2.76346 9.78151 2.46094 10.084 2.46094 10.4874C2.46094 10.7899 2.76346 11.0924 3.06598 11.0924H4.07438V13.1092H3.06598C2.76346 13.1092 2.46094 13.4118 2.46094 13.7143C2.46094 14.0168 2.76346 14.3193 3.06598 14.3193H4.07438V16.3361H3.06598C2.76346 16.3361 2.46094 16.6387 2.46094 16.9412C2.46094 17.2437 2.76346 17.5462 3.06598 17.5462H4.07438V19.563H3.06598C2.76346 19.563 2.46094 19.8655 2.46094 20.1681C2.46094 20.4706 2.76346 20.7731 3.06598 20.7731H4.07438V23.395C4.07438 23.6975 4.3769 24 4.67943 24H20.9147C21.2172 24 21.5198 23.6975 21.5198 23.395V0.605042C21.6206 0.302521 21.3181 0 21.0156 0ZM20.3097 22.8908H5.38531V20.874H6.39371C6.69623 20.874 6.99875 20.5714 6.99875 20.2689C6.99875 19.9664 6.69623 19.6639 6.39371 19.6639H5.38531V17.6471H6.39371C6.69623 17.6471 6.99875 17.3445 6.99875 17.042C6.99875 16.7395 6.69623 16.437 6.39371 16.437H5.38531V14.4202H6.39371C6.69623 14.4202 6.99875 14.1176 6.99875 13.8151C6.99875 13.5126 6.69623 13.2101 6.39371 13.2101H5.38531V11.1933H6.39371C6.69623 11.1933 6.99875 10.8908 6.99875 10.5882C6.99875 10.2857 6.69623 9.98319 6.39371 9.98319H5.38531V7.96639H6.39371C6.69623 7.96639 6.99875 7.66387 6.99875 7.36135C6.99875 7.05882 6.69623 6.55462 6.39371 6.55462H5.38531V4.53782H6.39371C6.69623 4.53782 6.99875 4.23529 6.99875 3.93277C6.99875 3.63025 6.69623 3.22689 6.39371 3.22689H5.38531V1.21008H20.4105V22.8908H20.3097Z",\n fill: "currentColor"\n }\n) }), ih = () => /* @__PURE__ */ c("svg", { xmlns: "http://www.w3.org/2000/svg", viewBox: "0 0 24 24", fill: "none", children: /* @__PURE__ */ c(\n "path",\n {\n fillRule: "evenodd",\n clipRule: "evenodd",\n d: "M21.6 0.6V23.4C21.6 23.7 21.3 24 21 24H4.8C4.5 24 4.2 23.7 4.2 23.4V21.4H2.9C2.4 21.4 2 21 2 20.5C2 20 2.4 19.6 2.9 19.6H4.1V18.1H2.9C2.4 18.1 2 17.7 2 17.2C2 16.7 2.4 16.3 2.9 16.3H4.1V14.8H2.9C2.4 14.8 2 14.4 2 13.9C2 13.4 2.4 13 2.9 13H4.1V11.5H2.9C2.4 11.5 2 11.1 2 10.6C2 10.1 2.4 9.7 2.9 9.7H4.1V7.9H2.9C2.4 7.9 2 7.5 2 7C2 6.5 2.4 6.1 2.9 6.1H4.1V4.6H2.9C2.4 4.6 2 4.1 2 3.6C2 3.1 2.4 2.7 2.9 2.7H4.1V0.6C4.2 0.3 4.5 0 4.8 0H21.1C21.4 0 21.7 0.3 21.6 0.6Z",\n fill: "currentColor"\n }\n) }), ah = () => /* @__PURE__ */ c("svg", { viewBox: "0 0 24 24", fill: "none", xmlns: "http://www.w3.org/2000/svg", children: /* @__PURE__ */ c(\n "path",\n {\n d: "M4.94533 23.2745L11.8829 16.585L18.8205 23.2745C18.9764 23.4248 19.1323 23.5 19.3662 23.5C19.4441 23.5 19.5221 23.5 19.678 23.4248C19.9118 23.3497 20.1457 23.049 20.1457 22.7484V1.17647C20.1457 0.800649 19.8338 0.5 19.4441 0.5H4.55558C4.16582 0.5 3.854 0.800649 3.854 1.17647V22.7484C3.854 23.049 4.00993 23.2745 4.32174 23.4248C4.47764 23.5 4.78943 23.4248 4.94533 23.2745ZM5.17917 1.85293H18.6646V21.0196L12.4286 15.0065C12.2727 14.8562 12.1168 14.781 11.8829 14.781C11.727 14.781 11.4932 14.8562 11.3373 15.0065L5.10124 21.0196V1.85293H5.17917Z",\n fill: "currentColor"\n }\n) }), sh = () => /* @__PURE__ */ c("svg", { xmlns: "http://www.w3.org/2000/svg", viewBox: "0 0 24 24", fill: "none", children: /* @__PURE__ */ c(\n "path",\n {\n d: "M4.20576 23.7647L11.8708 16.7843L19.5359 23.7647C19.7081 23.9216 19.8804 24 20.1388 24C20.2249 24 20.311 24 20.4833 23.9216C20.7416 23.8431 21 23.5294 21 23.2157V0.705877C21 0.313721 20.6555 0 20.2249 0H3.77514C3.34452 0 3 0.313721 3 0.705877V23.2157C3 23.5294 3.17228 23.7647 3.51678 23.9216C3.68903 24 4.03351 23.9216 4.20576 23.7647Z",\n fill: "currentColor"\n }\n) }), ch = () => /* @__PURE__ */ c("svg", { viewBox: "0 0 24 24", fill: "none", xmlns: "http://www.w3.org/2000/svg", children: /* @__PURE__ */ c(\n "path",\n {\n fillRule: "evenodd",\n clipRule: "evenodd",\n d: "M20.7 0.7C20.7 0.313401 20.3866 0 20 0C19.6134 0 19.3 0.313401 19.3 0.7V23.3C19.3 23.6866 19.6134 24 20 24C20.3866 24 20.7 23.6866 20.7 23.3V0.7ZM4.09767 24C3.85838 24 3.69887 23.9216 3.53934 23.7647C3.22028 23.451 3.22028 22.9804 3.53934 22.7451L14.467 12L3.53934 1.2549C3.22028 0.941177 3.22028 0.54902 3.53934 0.235294C3.8584 -0.0784314 4.25721 -0.0784314 4.57626 0.235294L16.0623 11.5294C16.3813 11.8431 16.3813 12.2353 16.0623 12.549L4.65603 23.7647C4.4965 23.9216 4.33697 24 4.09767 24Z",\n fill: "currentColor"\n }\n) }), lh = () => /* @__PURE__ */ c("svg", { viewBox: "0 0 24 24", fill: "none", xmlns: "http://www.w3.org/2000/svg", children: /* @__PURE__ */ c(\n "path",\n {\n d: "M10.3407 24H13.7299C14.083 24 14.3654 23.7265 14.3654 23.3846V20.6496C15.3539 20.4445 16.06 19.6239 16.06 18.6667V17.5043H16.3424C16.6248 17.5043 16.8367 17.3675 16.9073 17.1624L20.2259 10.4615V10.3932L20.7201 8.88889C21.285 7.11111 21.0026 5.19659 19.8022 3.55556C18.3195 1.43591 15.5657 0.136752 12.5296 0C12.1765 0 11.8235 0 11.4705 0C8.4343 0.136752 5.68058 1.50428 4.19781 3.55556C2.99746 5.19659 2.715 7.11111 3.27986 8.88889L3.77413 10.3932V10.4615L7.09273 17.1624C7.23395 17.3675 7.44576 17.5043 7.65759 17.5043H7.94004V18.6667C7.94004 19.6239 8.64609 20.4445 9.63461 20.6496V23.3846C9.70522 23.7265 9.98765 24 10.3407 24ZM13.0944 22.7692H10.9762V20.7863H13.0238V22.7692H13.0944ZM5.04507 9.91453L4.55085 8.41027C4.05659 6.97437 4.33902 5.47009 5.25693 4.17094C6.52788 2.39317 8.85793 1.23078 11.541 1.1624C11.8235 1.1624 12.1765 1.1624 12.4589 1.1624C15.0715 1.29915 17.4015 2.39317 18.7431 4.17094C19.661 5.47009 19.9434 6.97437 19.4492 8.41027L18.9549 9.91453L15.8482 16.2735H12.8826L15.9894 7.31625C16.1306 6.97437 15.9188 6.63248 15.5657 6.49573C15.2127 6.35897 14.8596 6.56411 14.7184 6.90599L11.9647 14.906L9.49343 7.72651H11.9647C12.3178 7.72651 12.6002 7.45299 12.6002 7.11111C12.6002 6.76923 12.3178 6.49573 11.9647 6.49573H8.57549C8.36366 6.49573 8.15184 6.5641 8.01063 6.76923C7.86941 6.90598 7.86943 7.17949 7.94004 7.31625L11.0468 16.2735H8.15185L5.04507 9.91453ZM9.3522 18.6667V17.5043H14.7891V18.6667C14.7891 19.1453 14.3654 19.4872 13.8711 19.4872H13.7299H10.3407H10.1995C9.70525 19.4872 9.3522 19.1453 9.3522 18.6667Z",\n fill: "currentColor"\n }\n) }), ph = () => /* @__PURE__ */ e1("svg", { xmlns: "http://www.w3.org/2000/svg", viewBox: "0 0 24 24", fill: "none", children: [\n /* @__PURE__ */ e1("g", { clipPath: "url(#clip0_6207_51984)", children: [\n /* @__PURE__ */ c(\n "path",\n {\n d: "M11.9999 0.0999756C12.4969 0.0999756 12.8999 0.502919 12.8999 0.999976V2.99998C12.8999 3.49703 12.4969 3.89998 11.9999 3.89998C11.5028 3.89998 11.0999 3.49703 11.0999 2.99998V0.999976C11.0999 0.502919 11.5028 0.0999756 11.9999 0.0999756Z",\n fill: "currentColor"\n }\n ),\n /* @__PURE__ */ c(\n "path",\n {\n d: "M11.9999 20.1C12.4969 20.1 12.8999 20.503 12.8999 21V23C12.8999 23.4971 12.4969 23.9 11.9999 23.9C11.5028 23.9 11.0999 23.4971 11.0999 23V21C11.0999 20.503 11.5028 20.1 11.9999 20.1Z",\n fill: "currentColor"\n }\n ),\n /* @__PURE__ */ c(\n "path",\n {\n d: "M3.58367 3.58349C3.93514 3.23202 4.50499 3.23202 4.85646 3.58349L6.27646 5.00349C6.62794 5.35496 6.62794 5.92481 6.27646 6.27628C5.92499 6.62775 5.35514 6.62775 5.00367 6.27628L3.58367 4.85628C3.2322 4.50481 3.2322 3.93496 3.58367 3.58349Z",\n fill: "currentColor"\n }\n ),\n /* @__PURE__ */ c(\n "path",\n {\n d: "M17.7223 17.7236C18.0738 17.3722 18.6437 17.3722 18.9951 17.7236L20.4151 19.1436C20.7666 19.4951 20.7666 20.0649 20.4151 20.4164C20.0637 20.7679 19.4938 20.7679 19.1423 20.4164L17.7223 18.9964C17.3709 18.6449 17.3709 18.0751 17.7223 17.7236Z",\n fill: "currentColor"\n }\n ),\n /* @__PURE__ */ c(\n "path",\n {\n d: "M0.0996094 12C0.0996094 11.503 0.502553 11.1 0.999609 11.1H2.99961C3.49667 11.1 3.89961 11.503 3.89961 12C3.89961 12.4971 3.49667 12.9 2.99961 12.9H0.999609C0.502553 12.9 0.0996094 12.4971 0.0996094 12Z",\n fill: "currentColor"\n }\n ),\n /* @__PURE__ */ c(\n "path",\n {\n d: "M20.0999 12C20.0999 11.503 20.5028 11.1 20.9999 11.1H22.9999C23.4969 11.1 23.8999 11.503 23.8999 12C23.8999 12.4971 23.4969 12.9 22.9999 12.9H20.9999C20.5028 12.9 20.0999 12.4971 20.0999 12Z",\n fill: "currentColor"\n }\n ),\n /* @__PURE__ */ c(\n "path",\n {\n d: "M6.27646 17.7236C6.62794 18.0751 6.62794 18.6449 6.27646 18.9964L4.85646 20.4164C4.50499 20.7679 3.93514 20.7679 3.58367 20.4164C3.2322 20.0649 3.2322 19.4951 3.58367 19.1436L5.00367 17.7236C5.35514 17.3722 5.92499 17.3722 6.27646 17.7236Z",\n fill: "currentColor"\n }\n ),\n /* @__PURE__ */ c(\n "path",\n {\n d: "M20.4151 3.58349C20.7666 3.93496 20.7666 4.50481 20.4151 4.85628L18.9951 6.27628C18.6437 6.62775 18.0738 6.62775 17.7223 6.27628C17.3709 5.92481 17.3709 5.35496 17.7223 5.00349L19.1423 3.58349C19.4938 3.23202 20.0637 3.23202 20.4151 3.58349Z",\n fill: "currentColor"\n }\n ),\n /* @__PURE__ */ c(\n "path",\n {\n d: "M12 19C15.866 19 19 15.866 19 12C19 8.13401 15.866 5 12 5C8.13401 5 5 8.13401 5 12C5 15.866 8.13401 19 12 19Z",\n fill: "currentColor"\n }\n )\n ] }),\n /* @__PURE__ */ c("defs", { children: /* @__PURE__ */ c("clipPath", { id: "clip0_6207_51984", children: /* @__PURE__ */ c("rect", { width: "24", height: "24", fill: "white" }) }) })\n] }), dh = () => /* @__PURE__ */ e1("svg", { viewBox: "0 0 24 24", fill: "none", xmlns: "http://www.w3.org/2000/svg", children: [\n /* @__PURE__ */ e1("g", { clipPath: "url(#clip0_2640_44857)", children: [\n /* @__PURE__ */ c(\n "path",\n {\n fillRule: "evenodd",\n clipRule: "evenodd",\n d: "M5.1 5.20001V1.50001H1.5V5.20001H5.1ZM6.6 5.90001V0.700008C6.6 0.300008 6.3 7.62939e-06 5.9 7.62939e-06H0.7C0.3 7.62939e-06 0 0.300008 0 0.700008V5.90001C0 6.30001 0.3 6.70001 0.7 6.70001H5.9C6.3 6.70001 6.7 6.30001 6.6 5.90001Z",\n fill: "currentColor"\n }\n ),\n /* @__PURE__ */ c(\n "path",\n {\n d: "M23 3.80001H10.3C9.7 3.80001 9.3 3.42501 9.3 3.05001C9.3 2.60001 9.8 2.30001 10.3 2.30001H23C23.6 2.30001 24 2.67501 24 3.05001C24 3.50001 23.6 3.80001 23 3.80001Z",\n fill: "currentColor"\n }\n ),\n /* @__PURE__ */ c(\n "path",\n {\n fillRule: "evenodd",\n clipRule: "evenodd",\n d: "M5.1 13.8V10.2H1.5V13.8H5.1ZM6.6 14.6V9.40001C6.6 9.00001 6.3 8.70001 5.9 8.70001H0.7C0.3 8.70001 0 9.00001 0 9.40001V14.6C0 15 0.3 15.3 0.7 15.3H5.9C6.3 15.3 6.7 15 6.6 14.6Z",\n fill: "currentColor"\n }\n ),\n /* @__PURE__ */ c(\n "path",\n {\n d: "M23 12.5H10.3C9.7 12.5 9.3 12.125 9.3 11.75C9.3 11.3 9.8 11 10.3 11H23C23.6 11 24 11.375 24 11.75C24 12.2 23.6 12.5 23 12.5Z",\n fill: "currentColor"\n }\n ),\n /* @__PURE__ */ c(\n "path",\n {\n fillRule: "evenodd",\n clipRule: "evenodd",\n d: "M5.1 22.5V18.9H1.5V22.5H5.1ZM6.6 23.3V18.1C6.6 17.7 6.3 17.4 5.9 17.4H0.7C0.3 17.4 0 17.7 0 18.1V23.3C0 23.7 0.3 24 0.7 24H5.9C6.3 24 6.7 23.7 6.6 23.3Z",\n fill: "currentColor"\n }\n ),\n /* @__PURE__ */ c(\n "path",\n {\n d: "M23 21.2H10.3C9.7 21.2 9.3 20.825 9.3 20.45C9.3 20 9.8 19.7 10.3 19.7H23C23.6 19.7 24 20.075 24 20.45C24 20.825 23.6 21.2 23 21.2Z",\n fill: "currentColor"\n }\n )\n ] }),\n /* @__PURE__ */ c("defs", { children: /* @__PURE__ */ c("clipPath", { id: "clip0_2640_44857", children: /* @__PURE__ */ c("rect", { width: "24", height: "24", fill: "white" }) }) })\n] }), bh = () => /* @__PURE__ */ e1("svg", { viewBox: "0 0 24 24", fill: "none", xmlns: "http://www.w3.org/2000/svg", children: [\n /* @__PURE__ */ e1("g", { clipPath: "url(#clip0_2640_44856)", children: [\n /* @__PURE__ */ c(\n "path",\n {\n d: "M0.7 6.5H5.9C6.3 6.5 6.7 6.11194 6.6 5.72388V0.679105C6.6 0.291045 6.3 0 5.9 0H0.7C0.3 0 0 0.291045 0 0.679105V5.72388C0 6.11194 0.3 6.5 0.7 6.5Z",\n fill: "currentColor"\n }\n ),\n /* @__PURE__ */ c(\n "path",\n {\n d: "M10.3 4.05H23C23.6 4.05 24 3.7 24 3.175C24 2.7375 23.6 2.3 23 2.3H10.3C9.80005 2.3 9.30005 2.65 9.30005 3.175C9.30005 3.6125 9.70005 4.05 10.3 4.05Z",\n fill: "currentColor"\n }\n ),\n /* @__PURE__ */ c(\n "path",\n {\n d: "M5.9 15.2H0.7C0.3 15.2 0 14.9045 0 14.5106V9.38939C0 8.99545 0.3 8.7 0.7 8.7H5.9C6.3 8.7 6.6 8.99545 6.6 9.38939V14.5106C6.7 14.9045 6.3 15.2 5.9 15.2Z",\n fill: "currentColor"\n }\n ),\n /* @__PURE__ */ c(\n "path",\n {\n d: "M10.3 12.75H23C23.6 12.75 24 12.4 24 11.875C24 11.4375 23.6 11 23 11H10.3C9.80005 11 9.30005 11.35 9.30005 11.875C9.30005 12.3125 9.70005 12.75 10.3 12.75Z",\n fill: "currentColor"\n }\n ),\n /* @__PURE__ */ c(\n "path",\n {\n d: "M5.9 23.9H0.7C0.3 23.9 0 23.6045 0 23.2106V18.0894C0 17.6954 0.3 17.4 0.7 17.4H5.9C6.3 17.4 6.6 17.6954 6.6 18.0894V23.2106C6.7 23.6045 6.3 23.9 5.9 23.9Z",\n fill: "currentColor"\n }\n ),\n /* @__PURE__ */ c(\n "path",\n {\n d: "M10.3 21.45H23C23.6 21.45 24 21.0125 24 20.575C24 20.1375 23.6 19.7 23 19.7H10.3C9.80005 19.7 9.30005 20.05 9.30005 20.575C9.30005 21.0125 9.70005 21.45 10.3 21.45Z",\n fill: "currentColor"\n }\n )\n ] }),\n /* @__PURE__ */ c("defs", { children: /* @__PURE__ */ c("clipPath", { id: "clip0_2640_44856", children: /* @__PURE__ */ c("rect", { width: "24", height: "24", fill: "white" }) }) })\n] }), Mh = () => /* @__PURE__ */ c("svg", { viewBox: "0 0 24 24", fill: "none", xmlns: "http://www.w3.org/2000/svg", children: /* @__PURE__ */ c(\n "path",\n {\n fillRule: "evenodd",\n clipRule: "evenodd",\n d: "M12 1.5C6.20101 1.5 1.5 6.20101 1.5 12C1.5 17.799 6.20101 22.5 12 22.5C17.799 22.5 22.5 17.799 22.5 12C22.5 11.5858 22.8358 11.25 23.25 11.25C23.6642 11.25 24 11.5858 24 12C24 18.6274 18.6274 24 12 24C5.37258 24 0 18.6274 0 12C0 5.37258 5.37258 0 12 0C12.4142 0 12.75 0.335786 12.75 0.75C12.75 1.16421 12.4142 1.5 12 1.5Z",\n fill: "currentColor"\n }\n) }), Ah = () => /* @__PURE__ */ e1("svg", { viewBox: "0 0 24 24", fill: "none", xmlns: "http://www.w3.org/2000/svg", children: [\n /* @__PURE__ */ c(\n "path",\n {\n fillRule: "evenodd",\n clipRule: "evenodd",\n d: "M11.9998 3.76468C14.4724 3.76468 16.5462 5.80385 16.5462 8.23516C16.5462 10.7449 14.4724 12.7056 11.9998 12.7056C9.5272 12.7056 7.4534 10.6665 7.4534 8.23516C7.4534 5.80385 9.5272 3.76468 11.9998 3.76468ZM12.0796 5.1764C10.3248 5.1764 8.96887 6.58814 8.96887 8.23516C8.96887 9.88217 10.3248 11.2939 12.0796 11.2939C13.8343 11.2939 15.1903 9.88217 15.1903 8.23516C15.1903 6.50971 13.8343 5.1764 12.0796 5.1764Z",\n fill: "currentColor"\n }\n ),\n /* @__PURE__ */ c(\n "path",\n {\n fillRule: "evenodd",\n clipRule: "evenodd",\n d: "M12.6381 23.6863C12.4786 23.9216 12.2393 24 12 24C11.7607 24 11.5214 23.8431 11.3619 23.6863C11.3511 23.6703 11.3321 23.6427 11.3056 23.604C10.5488 22.5003 3.62476 12.4029 3.62476 8.2353C3.62476 3.68628 7.37366 0 12 0C16.6263 0 20.3752 3.68628 20.3752 8.2353C20.3752 12.4541 13.5312 22.3894 12.7082 23.5842C12.6743 23.6333 12.6507 23.6677 12.6381 23.6863ZM18.8597 8.2353C18.8597 4.54902 15.8286 1.49019 12 1.49019C8.25107 1.49019 5.14027 4.47059 5.14027 8.2353C5.14027 11.2157 9.60706 18.4314 12 21.9608C14.3131 18.4314 18.8597 11.1373 18.8597 8.2353Z",\n fill: "currentColor"\n }\n )\n] }), uh = () => /* @__PURE__ */ c("svg", { viewBox: "0 0 24 24", fill: "none", xmlns: "http://www.w3.org/2000/svg", children: /* @__PURE__ */ c(\n "path",\n {\n d: "M21.8824 9.72237H19.1373V7.88667C19.1373 6.86684 19 5.98299 18.7255 5.16712C17.6961 2.03964 14.951 0 12 0C8.01961 0 4.79412 3.5354 4.79412 7.95466V9.79037H2.11764C1.77451 9.79037 1.5 10.0623 1.5 10.4023V23.3881C1.5 23.7281 1.77451 24 2.11764 24H21.8824C22.2255 24 22.5 23.7281 22.5 23.3881V10.4023C22.5 10.0623 22.2255 9.72237 21.8824 9.72237ZM6.09804 7.95466C6.09804 4.28328 8.77451 1.29178 12 1.29178C14.4706 1.29178 16.6667 3.05948 17.5588 5.64305C17.7647 6.32294 17.902 7.07081 17.902 7.95466V9.79037H6.09804V7.95466ZM21.1961 22.7762H2.80392V11.0142H21.1961V22.7762Z",\n fill: "currentColor"\n }\n) }), zh = () => /* @__PURE__ */ c("svg", { xmlns: "http://www.w3.org/2000/svg", viewBox: "0 0 24 25", fill: "none", children: /* @__PURE__ */ c(\n "path",\n {\n d: "M21.1 10.4H18.9V9.00002C18.9 8.00002 18.8 7.10002 18.5 6.20002C17.5 3.00002 14.7 0.900024 11.6 0.900024C7.5 1.00002 4.2 4.60003 4.2 9.10003V10.5H2C1.4 10.5 1 11 1 11.5V24C1 24.6 1.4 25 2 25H21.1C21.7 25 22.1 24.6 22.1 24V11.5C22.1 10.9 21.6 10.4 21.1 10.4ZM6.3 9.10003C6.3 5.80002 8.7 3.10002 11.6 3.10002C13.8 3.10002 15.8 4.70002 16.6 7.00002C16.8 7.70002 16.9 8.40003 16.9 9.10003V10.5H6.3V9.10003Z",\n fill: "currentColor"\n }\n) }), hh = () => /* @__PURE__ */ c("svg", { viewBox: "0 0 24 24", fill: "none", xmlns: "http://www.w3.org/2000/svg", children: /* @__PURE__ */ c(\n "path",\n {\n d: "M12.0344 1.29178C15.0639 1.29178 17.6115 3.87534 17.9557 7.20678C18.0246 7.54673 18.3 7.8187 18.6443 7.75071C18.9885 7.68272 19.2639 7.41076 19.1951 7.07082C18.782 3.05949 15.6836 0 12.0344 0C8.04098 0 4.80491 3.5354 4.80491 7.95466V9.79037H2.11967C1.77541 9.79037 1.5 10.0623 1.5 10.4023V23.3881C1.5 23.7281 1.77541 24 2.11967 24H21.8803C22.2246 24 22.5 23.7281 22.5 23.3881V10.4023C22.5 10.0623 22.2246 9.79037 21.8803 9.79037H6.04427V7.95466C6.11312 4.28328 8.7295 1.29178 12.0344 1.29178ZM21.2606 22.7762H2.80819V11.0142H21.2606V22.7762Z",\n fill: "currentColor"\n }\n) }), Oh = () => /* @__PURE__ */ c("svg", { xmlns: "http://www.w3.org/2000/svg", viewBox: "0 0 24 24", fill: "none", children: /* @__PURE__ */ c(\n "path",\n {\n d: "M17.8 7.3C18.4 7.2 18.8 6.6 18.7 6.1C17.9 2.5 15 0 11.6 0C7.5 0 4.2 3.6 4.2 8.1V9.5H2C1.4 9.5 1 10 1 10.5V23C1 23.5 1.4 24 2 24H21.1C21.6 24 22.1 23.5 22.1 23V10.4C22.1 9.8 21.6 9.4 21.1 9.4H6.2V8.1C6.3 4.7 8.6 2.1 11.6 2.1C14 2.1 16.1 4 16.8 6.6C16.8 7 17.3 7.4 17.8 7.3Z",\n fill: "currentColor"\n }\n) }), fh = () => /* @__PURE__ */ e1("svg", { viewBox: "0 0 24 24", fill: "none", xmlns: "http://www.w3.org/2000/svg", children: [\n /* @__PURE__ */ c(\n "path",\n {\n fillRule: "evenodd",\n clipRule: "evenodd",\n d: "M13.2853 1.37705V9.11427H14.6247V1.18033C14.6247 0.535768 14.1203 0 13.482 0H2.13115C1.49292 0 0.988525 0.535768 0.988525 1.18033V22.8197C0.988525 23.4642 1.49292 24 2.13115 24H13.482C14.1203 24 14.6247 23.4642 14.6247 22.8197V14.8856H13.2853V22.6229H2.32788V1.37705H13.2853Z",\n fill: "currentColor"\n }\n ),\n /* @__PURE__ */ c(\n "path",\n {\n fillRule: "evenodd",\n clipRule: "evenodd",\n d: "M22.785 11.5163L16.9065 7.62159C16.2941 7.1779 15.6156 8.19717 16.279 8.5974L20.57 11.4326H6.78431C6.04471 11.4326 6.05837 12.5953 6.78431 12.5953H20.57L16.2752 15.4326C15.688 15.8673 16.2752 16.7774 16.9157 16.3597L22.785 12.471C23.0975 12.2582 23.0763 11.7284 22.785 11.5163Z",\n fill: "currentColor"\n }\n )\n] }), gh = () => /* @__PURE__ */ c("svg", { viewBox: "0 0 25 24", fill: "none", xmlns: "http://www.w3.org/2000/svg", children: /* @__PURE__ */ c(\n "path",\n {\n d: "M1.67421 3.52778C1.20362 3.52778 0.889893 3.85053 0.889893 4.33466V19.746C0.889893 20.1644 1.20307 20.4722 1.59577 20.4722H24.1056C24.5094 20.4722 24.8899 20.0685 24.8899 19.6653V4.33466C24.8899 3.85053 24.5762 3.52778 24.1056 3.52778H1.67421ZM2.14854 5.79069L8.68938 11.8732L2.14854 18.3444V5.79069ZM14.8437 12.311C13.7457 13.36 11.9232 13.36 10.9036 12.311L2.90824 4.8714H22.902L14.8437 12.311ZM9.44495 12.6755C10.4136 13.672 11.3256 14.2521 12.7893 14.2521C14.2122 14.2521 15.2515 13.6486 16.1974 12.6755L22.902 19.254H2.90824L9.44495 12.6755ZM17.0678 11.8732L23.6923 5.79069V18.3444L17.0678 11.8732Z",\n fill: "currentColor"\n }\n) }), Ch = () => /* @__PURE__ */ c("svg", { viewBox: "0 0 24 24", fill: "none", xmlns: "http://www.w3.org/2000/svg", children: /* @__PURE__ */ c(\n "path",\n {\n d: "M14.2721 1.04154C12.9016 -0.311576 10.7377 -0.311576 9.43934 1.04154C7.89118 2.57007 1.18548 9.08902 1 9.65875C1 9.65875 1.0001 9.65875 1 23.3323C1 23.6884 1.28852 23.9733 1.64918 23.9733H22.3508C22.7364 23.9733 23 23.6946 23 23.3323V9.80118C22.7612 9.08902 17.1003 3.80997 14.2721 1.04154ZM13.0459 16.5668L21.4852 11.0119V22.1929L13.0459 16.5668ZM3.74098 10.4421H20.0426L11.8918 15.7834L3.74098 10.4421ZM10.377 1.96736C11.1705 1.18397 12.541 1.18397 13.3344 1.96736L20.5475 9.08902H3.16393L10.377 1.96736ZM2.22623 11.0119L11.5311 17.1365L20.0426 22.7626H2.22623V11.0119Z",\n fill: "currentColor"\n }\n) }), mh = () => /* @__PURE__ */ c("svg", { viewBox: "0 0 24 24", fill: "none", xmlns: "http://www.w3.org/2000/svg", children: /* @__PURE__ */ c(\n "path",\n {\n d: "M22.6557 3.31679L16.0459 0.0510276C16.0459 0.0510276 16.0459 0.0510276 15.977 0.0510276H15.9082H15.8393H15.7705H15.7016H15.6328H15.5639H15.4951L9.22951 3.18071L2.89508 0.0510276C2.68853 -0.0170092 2.48197 -0.0170092 2.27541 0.0510276C2.06885 0.187101 2 0.391203 2 0.595314V20.1219C2 20.394 2.1377 20.5981 2.34426 20.6662L8.9541 23.9319C9.02295 24 9.09181 24 9.22951 24C9.29836 24 9.43606 24 9.50492 23.9319L15.7705 20.8023L22.1049 23.9319C22.1738 24 22.3115 24 22.3803 24C22.518 24 22.5869 24 22.7246 23.9319C22.9311 23.7959 23 23.5918 23 23.3877V3.86107C23 3.58893 22.8623 3.38482 22.6557 3.31679ZM3.23935 1.61587L8.54099 4.26932V22.3671L3.23935 19.7137V1.61587ZM9.84918 4.26932L15.1508 1.61587V19.7137L9.84918 22.3671V4.26932ZM21.7607 22.3671L16.459 19.7137V1.61587L21.7607 4.26932V22.3671Z",\n fill: "currentColor"\n }\n) }), Lh = () => /* @__PURE__ */ e1("svg", { viewBox: "0 0 24 24", fill: "none", xmlns: "http://www.w3.org/2000/svg", children: [\n /* @__PURE__ */ c(\n "path",\n {\n d: "M14.7809 10.1289L22.3616 2.5481C22.006 4.46766 21.6375 6.42648 21.2854 8.31535C21.2137 8.63385 21.4101 9.01286 21.7752 9.07538C22.123 9.13495 22.4306 8.87628 22.4851 8.56374C22.5202 8.36249 23.8202 1.64601 23.9418 0.88761C23.9778 0.663051 23.8969 0.406678 23.7321 0.242163C23.4719 -0.0175803 23.1137 0.0581477 22.7928 0.114975C20.3267 0.551676 17.8678 1.02963 15.407 1.49485C15.0618 1.54386 14.8382 1.8829 14.9274 2.2449C14.9856 2.58246 15.3226 2.81128 15.6845 2.7276L21.4573 1.64773L13.878 9.22707C13.6377 9.4674 13.6469 9.85169 13.8852 10.0895C14.1179 10.3219 14.5369 10.3728 14.7809 10.1289Z",\n fill: "currentColor"\n }\n ),\n /* @__PURE__ */ c(\n "path",\n {\n fillRule: "evenodd",\n clipRule: "evenodd",\n d: "M13.85 10.1247C13.5932 9.86833 13.5822 9.4525 13.8428 9.1919L21.3086 1.72617L15.6946 2.77631C15.3069 2.86538 14.9427 2.62047 14.8787 2.2551C14.7841 1.86754 15.0237 1.49971 15.3988 1.44576C15.9768 1.3365 16.5547 1.22653 17.1326 1.11655C19.0147 0.758375 20.8974 0.400105 22.7841 0.0659949C22.7963 0.0638449 22.8085 0.0616566 22.8209 0.0594525C22.9695 0.0328935 23.1314 0.00397103 23.2872 0.0101516C23.4581 0.0169308 23.626 0.0659363 23.7672 0.20696C23.9434 0.382854 24.0294 0.655291 23.9909 0.895488C23.903 1.4441 23.1964 5.12082 22.8003 7.18212C22.6494 7.96714 22.5436 8.51786 22.5341 8.57229C22.4754 8.90867 22.1447 9.18913 21.7668 9.12441C21.3696 9.05638 21.1603 8.64688 21.2367 8.30536C21.3701 7.58959 21.5058 6.86383 21.6424 6.13398C21.8563 4.99061 22.072 3.83722 22.2835 2.69656L14.816 10.164C14.5482 10.4319 14.0975 10.3718 13.85 10.1247ZM14.7809 10.1289C14.5369 10.3728 14.1179 10.3219 13.8852 10.0895C13.6469 9.85169 13.6377 9.4674 13.878 9.22707L21.4573 1.64773L15.6845 2.7276C15.3226 2.81128 14.9856 2.58246 14.9274 2.2449C14.8382 1.8829 15.0618 1.54386 15.407 1.49485C15.9854 1.3855 16.5637 1.27545 17.142 1.16539C19.0241 0.807226 20.9064 0.44903 22.7928 0.114975L22.8287 0.108593C23.1402 0.0529929 23.4815 -0.0079439 23.7321 0.242163C23.8969 0.406678 23.9778 0.663051 23.9418 0.88761C23.854 1.43543 23.1513 5.09201 22.7546 7.15622C22.6021 7.94968 22.4948 8.50786 22.4851 8.56374C22.4306 8.87628 22.123 9.13495 21.7752 9.07538C21.4101 9.01286 21.2137 8.63385 21.2854 8.31535C21.4184 7.60174 21.5538 6.87814 21.6899 6.15045L21.6914 6.14231C21.9097 4.97541 22.13 3.79803 22.3456 2.63446C22.3509 2.60566 22.3563 2.57688 22.3616 2.5481L14.7809 10.1289Z",\n fill: "currentColor"\n }\n ),\n /* @__PURE__ */ c(\n "path",\n {\n fillRule: "evenodd",\n clipRule: "evenodd",\n d: "M10.1154 13.8408C9.85901 13.5839 9.44319 13.573 9.18259 13.8336L1.71686 21.2993L2.76699 15.6854C2.85607 15.2976 2.61116 14.9334 2.24579 14.8694C1.85822 14.7748 1.49039 15.0145 1.43644 15.3896C0.971355 17.8497 0.0666385 23.0928 0.0666385 23.0928C-0.0159211 23.6609 0.270755 24.0803 0.886173 23.9817C1.64371 23.8602 8.36564 22.5592 8.56297 22.5248C8.89936 22.4661 9.17982 22.1354 9.1151 21.7575C9.04707 21.3603 8.63757 21.151 8.29605 21.2274C6.45895 21.5698 4.55601 21.9277 2.68725 22.2742L10.1547 14.8068C10.4225 14.5389 10.3625 14.0882 10.1154 13.8408Z",\n fill: "currentColor"\n }\n )\n] }), vh = () => /* @__PURE__ */ c("svg", { viewBox: "0 0 24 24", fill: "none", xmlns: "http://www.w3.org/2000/svg", children: /* @__PURE__ */ c(\n "path",\n {\n fillRule: "evenodd",\n clipRule: "evenodd",\n d: "M0.633375 5.95044H23.3666C23.5473 5.95044 23.7052 6.03642 23.8161 6.15047C23.9258 6.26323 24 6.41433 24 6.55963C24 6.90203 23.7138 7.16883 23.3666 7.16883H0.633375C0.286202 7.16883 0 6.90203 0 6.55963C0 6.21723 0.286205 5.95044 0.633375 5.95044ZM0.633375 11.3908H23.3666C23.7138 11.3908 24 11.6576 24 12C24 12.3424 23.7138 12.6092 23.3666 12.6092H0.633375C0.286201 12.6092 0 12.3424 0 12C0 11.6576 0.286201 11.3908 0.633375 11.3908ZM0.633375 16.8312H23.3666C23.7138 16.8312 24 17.098 24 17.4404C24 17.7828 23.7138 18.0496 23.3666 18.0496H0.633375C0.286202 18.0496 0 17.7828 0 17.4404C0 17.098 0.2862 16.8312 0.633375 16.8312Z",\n fill: "currentColor"\n }\n) }), qh = () => /* @__PURE__ */ e1("svg", { viewBox: "0 0 24 24", fill: "none", xmlns: "http://www.w3.org/2000/svg", children: [\n /* @__PURE__ */ c(\n "path",\n {\n fillRule: "evenodd",\n clipRule: "evenodd",\n d: "M12 6C13.6569 6 15 4.65685 15 3C15 1.34315 13.6569 0 12 0C10.3431 0 9 1.34315 9 3C9 4.65685 10.3431 6 12 6ZM12 4.6C12.8837 4.6 13.6 3.88366 13.6 3C13.6 2.11634 12.8837 1.4 12 1.4C11.1163 1.4 10.4 2.11634 10.4 3C10.4 3.88366 11.1163 4.6 12 4.6Z",\n fill: "currentColor"\n }\n ),\n /* @__PURE__ */ c(\n "path",\n {\n fillRule: "evenodd",\n clipRule: "evenodd",\n d: "M12 15C13.6569 15 15 13.6569 15 12C15 10.3431 13.6569 9 12 9C10.3431 9 9 10.3431 9 12C9 13.6569 10.3431 15 12 15ZM12 13.6C12.8837 13.6 13.6 12.8837 13.6 12C13.6 11.1163 12.8837 10.4 12 10.4C11.1163 10.4 10.4 11.1163 10.4 12C10.4 12.8837 11.1163 13.6 12 13.6Z",\n fill: "currentColor"\n }\n ),\n /* @__PURE__ */ c(\n "path",\n {\n fillRule: "evenodd",\n clipRule: "evenodd",\n d: "M15 21C15 22.6569 13.6569 24 12 24C10.3431 24 9 22.6569 9 21C9 19.3431 10.3431 18 12 18C13.6569 18 15 19.3431 15 21ZM13.6 21C13.6 21.8837 12.8837 22.6 12 22.6C11.1163 22.6 10.4 21.8837 10.4 21C10.4 20.1163 11.1163 19.4 12 19.4C12.8837 19.4 13.6 20.1163 13.6 21Z",\n fill: "currentColor"\n }\n )\n] }), yh = () => /* @__PURE__ */ e1("svg", { viewBox: "0 0 24 24", fill: "none", xmlns: "http://www.w3.org/2000/svg", children: [\n /* @__PURE__ */ c(\n "path",\n {\n d: "M12 6C13.6569 6 15 4.65685 15 3C15 1.34315 13.6569 0 12 0C10.3431 0 9 1.34315 9 3C9 4.65685 10.3431 6 12 6Z",\n fill: "currentColor"\n }\n ),\n /* @__PURE__ */ c(\n "path",\n {\n d: "M12 15C13.6569 15 15 13.6569 15 12C15 10.3431 13.6569 9 12 9C10.3431 9 9 10.3431 9 12C9 13.6569 10.3431 15 12 15Z",\n fill: "currentColor"\n }\n ),\n /* @__PURE__ */ c(\n "path",\n {\n d: "M12 24C13.6569 24 15 22.6569 15 21C15 19.3431 13.6569 18 12 18C10.3431 18 9 19.3431 9 21C9 22.6569 10.3431 24 12 24Z",\n fill: "currentColor"\n }\n )\n] }), wh = () => /* @__PURE__ */ c("svg", { viewBox: "0 0 24 24", fill: "none", xmlns: "http://www.w3.org/2000/svg", children: /* @__PURE__ */ c(\n "path",\n {\n fillRule: "evenodd",\n clipRule: "evenodd",\n d: "M0.637321 5.94608H23.3627C23.7655 5.94608 24.0071 6.22345 23.9998 6.57226C23.9927 6.91412 23.7075 7.17277 23.3627 7.17277H0.637321C0.288111 7.17277 0 6.90425 0 6.55942C0 6.21459 0.288114 5.94608 0.637321 5.94608ZM17.726 12.67H0.696827C0.335038 12.67 0.0595061 12.3516 0.0595061 12.0567C0.0595061 11.7118 0.347614 11.4433 0.696827 11.4433H17.726C18.0752 11.4433 18.3633 11.7118 18.3633 12.0567C18.3633 12.4015 18.0752 12.67 17.726 12.67ZM0.637321 16.8272H23.3627C23.7601 16.8272 24.0058 17.1087 23.9999 17.4512C23.994 17.7937 23.7083 18.0539 23.3627 18.0539H0.637321C0.288111 18.0539 0 17.7854 0 17.4406C0 17.0957 0.288108 16.8272 0.637321 16.8272Z",\n fill: "currentColor"\n }\n) }), xh = () => /* @__PURE__ */ c("svg", { viewBox: "0 0 24 24", fill: "none", xmlns: "http://www.w3.org/2000/svg", children: /* @__PURE__ */ c(\n "path",\n {\n fillRule: "evenodd",\n clipRule: "evenodd",\n d: "M23.3666 7.17221H0.63341C0.290586 7.17221 -0.00561394 6.89688 9.05165e-05 6.55029C0.005705 6.20916 0.289141 5.94852 0.63341 5.94852H23.3666C23.7143 5.94852 24 6.21696 24 6.56036C24 6.90376 23.7143 7.17221 23.3666 7.17221ZM5.63853 11.9715C5.63853 11.6281 5.92425 11.3597 6.27191 11.3597H17.6679C18.0155 11.3597 18.3012 11.6281 18.3012 11.9715C18.3012 12.3149 18.0155 12.5834 17.6679 12.5834H6.27191C5.92425 12.5834 5.63853 12.3149 5.63853 11.9715ZM23.3666 18.0515H0.6334C0.290577 18.0515 -0.00562084 17.7762 8.09816e-05 17.4296C0.00569291 17.0885 0.28913 16.8278 0.6334 16.8278H23.3666C23.7143 16.8278 24 17.0963 24 17.4397C24 17.7831 23.7143 18.0515 23.3666 18.0515Z",\n fill: "currentColor"\n }\n) }), Wh = () => /* @__PURE__ */ c("svg", { viewBox: "0 0 24 24", fill: "none", xmlns: "http://www.w3.org/2000/svg", children: /* @__PURE__ */ c(\n "path",\n {\n fillRule: "evenodd",\n clipRule: "evenodd",\n d: "M5.69797 6.5596C5.69797 6.2172 5.98417 5.95041 6.33134 5.95041H23.3664C23.7136 5.95041 23.9998 6.2172 23.9998 6.5596C23.9998 6.902 23.7136 7.1688 23.3664 7.1688H6.33134C5.98417 7.1688 5.69797 6.902 5.69797 6.5596ZM23.3666 12.6659H0.633372C0.274112 12.6659 0 12.3489 0 12.0567C0 11.7143 0.286195 11.4475 0.633372 11.4475H23.3666C23.7138 11.4475 24 11.7143 24 12.0567C24 12.3991 23.7138 12.6659 23.3666 12.6659ZM6.33134 16.8311H23.3664C23.7136 16.8311 23.9998 17.098 23.9998 17.4404C23.9998 17.7828 23.7136 18.0496 23.3664 18.0496H6.33134C5.98417 18.0496 5.69797 17.7828 5.69797 17.4404C5.69797 17.098 5.98417 16.8311 6.33134 16.8311Z",\n fill: "currentColor"\n }\n) }), Rh = () => /* @__PURE__ */ e1("svg", { viewBox: "0 0 24 24", fill: "none", xmlns: "http://www.w3.org/2000/svg", children: [\n /* @__PURE__ */ c(\n "path",\n {\n d: "M11.352 21.2446C11.352 21.6289 11.6635 21.9404 12.0478 21.9404C12.4321 21.9404 12.7436 21.6289 12.7436 21.2446V2.75546C12.7436 2.37116 12.4321 2.05963 12.0478 2.05963C11.6635 2.05963 11.352 2.37116 11.352 2.75546V21.2446Z",\n fill: "currentcolor"\n }\n ),\n /* @__PURE__ */ c(\n "path",\n {\n d: "M16.0933 11.4253H19.7264H23.3595C23.7132 11.4253 24 11.7121 24 12.0658C24 12.4195 23.7132 12.7063 23.3595 12.7063H16.0933L18.1857 14.9101C18.2505 14.9671 18.3033 15.0377 18.3407 15.1174C18.3782 15.1971 18.3995 15.2841 18.4032 15.3729C18.407 15.4618 18.3932 15.5504 18.3626 15.6333C18.332 15.7162 18.2854 15.7915 18.2257 15.8543C18.166 15.9172 18.0945 15.9663 18.0159 15.9985C17.9372 16.0307 17.853 16.0453 17.7686 16.0413C17.6843 16.0373 17.6016 16.0149 17.526 15.9755C17.4503 15.9361 17.3833 15.8805 17.3291 15.8122L14.1839 12.479C14.133 12.4247 14.091 12.3619 14.0596 12.293H14.1185C14.0929 12.2299 14.0796 12.162 14.0792 12.0933V12.0245C14.0735 11.9718 14.0735 11.9187 14.0792 11.8661V11.8041C14.1086 11.7358 14.1484 11.673 14.1969 11.6181L17.3291 8.31932C17.3833 8.25111 17.4503 8.19551 17.526 8.15608C17.6016 8.11664 17.6843 8.09423 17.7686 8.09027C17.853 8.08631 17.9372 8.10088 18.0159 8.13307C18.0945 8.16526 18.166 8.21435 18.2257 8.27722C18.2854 8.3401 18.332 8.41537 18.3626 8.49825C18.3932 8.58114 18.407 8.66981 18.4032 8.75864C18.3995 8.84746 18.3782 8.93449 18.3407 9.01418C18.3033 9.09387 18.2505 9.16448 18.1857 9.2215L16.0933 11.4253Z",\n fill: "currentcolor"\n }\n ),\n /* @__PURE__ */ c(\n "path",\n {\n d: "M7.90668 12.6405H0.640417C0.28669 12.6405 -6.18844e-05 12.3537 -6.18844e-05 12C-6.18844e-05 11.6462 0.28669 11.3595 0.640417 11.3595H7.90668L5.81419 9.1557C5.74942 9.09867 5.69663 9.02806 5.65919 8.94837C5.62175 8.86868 5.60047 8.78166 5.59671 8.69283C5.59295 8.604 5.60679 8.51533 5.63735 8.43244C5.66791 8.34956 5.71453 8.27429 5.77422 8.21141C5.83392 8.14854 5.90539 8.09945 5.98408 8.06726C6.06278 8.03508 6.14698 8.0205 6.23132 8.02446C6.31566 8.02842 6.39829 8.05083 6.47396 8.09027C6.54962 8.1297 6.61666 8.1853 6.67081 8.25352L9.81608 11.5868C9.86698 11.6411 9.90897 11.7039 9.94031 11.7727H9.88146C9.90701 11.8359 9.92035 11.9038 9.9207 11.9724V12.0413C9.92648 12.0939 9.92648 12.1471 9.9207 12.1997V12.2617C9.89134 12.33 9.85158 12.3928 9.803 12.4476L6.67081 15.7464C6.61666 15.8146 6.54962 15.8702 6.47396 15.9097C6.39829 15.9491 6.31566 15.9715 6.23132 15.9755C6.14698 15.9795 6.06278 15.9649 5.98409 15.9327C5.90539 15.9005 5.83392 15.8514 5.77422 15.7885C5.71452 15.7257 5.66791 15.6504 5.63735 15.5675C5.60679 15.4846 5.59295 15.3959 5.59671 15.3071C5.60047 15.2183 5.62175 15.1313 5.65919 15.0516C5.69663 14.9719 5.74942 14.9013 5.81419 14.8443L7.90668 12.6405Z",\n fill: "currentcolor"\n }\n ),\n /* @__PURE__ */ c(\n "path",\n {\n d: "M7.90668 12.6405H0.640417C0.28669 12.6405 -6.18844e-05 12.3537 -6.18844e-05 12C-6.18844e-05 11.6462 0.28669 11.3595 0.640417 11.3595H7.90668L5.81419 9.1557C5.74942 9.09867 5.69663 9.02806 5.65919 8.94837C5.62175 8.86868 5.60047 8.78166 5.59671 8.69283C5.59295 8.604 5.60679 8.51533 5.63735 8.43244C5.66791 8.34956 5.71453 8.27429 5.77422 8.21141C5.83392 8.14854 5.90539 8.09945 5.98408 8.06726C6.06278 8.03508 6.14698 8.0205 6.23132 8.02446C6.31566 8.02842 6.39829 8.05083 6.47396 8.09027C6.54962 8.1297 6.61666 8.1853 6.67081 8.25352L9.81608 11.5868C9.86698 11.6411 9.90897 11.7039 9.94031 11.7727H9.88146C9.90701 11.8359 9.92035 11.9038 9.9207 11.9724V12.0413C9.92648 12.0939 9.92648 12.1471 9.9207 12.1997V12.2617C9.89134 12.33 9.85158 12.3928 9.803 12.4476L6.67081 15.7464C6.61666 15.8146 6.54962 15.8702 6.47396 15.9097C6.39829 15.9491 6.31566 15.9715 6.23132 15.9755C6.14698 15.9795 6.06278 15.9649 5.98409 15.9327C5.90539 15.9005 5.83392 15.8514 5.77422 15.7885C5.71452 15.7257 5.66791 15.6504 5.63735 15.5675C5.60679 15.4846 5.59295 15.3959 5.59671 15.3071C5.60047 15.2183 5.62175 15.1313 5.65919 15.0516C5.69663 14.9719 5.74942 14.9013 5.81419 14.8443L7.90668 12.6405Z",\n fill: "currentcolor"\n }\n )\n] }), Bh = () => /* @__PURE__ */ c("svg", { viewBox: "0 0 24 24", fill: "none", xmlns: "http://www.w3.org/2000/svg", children: /* @__PURE__ */ c(\n "path",\n {\n fillRule: "evenodd",\n clipRule: "evenodd",\n d: "M17.3839 9.73289V5.19938C17.3839 2.30786 14.9873 0 11.9999 0C9.01255 0 6.61603 2.30786 6.61603 5.19938V9.73289C6.61603 12.6244 9.01255 14.9323 11.9999 14.9323C14.9873 14.9323 17.3839 12.6244 17.3839 9.73289ZM12.0002 24C12.3778 24 12.6866 23.707 12.6866 23.3341V19.4601C17.9107 19.0988 22.0167 14.922 22.0167 9.79615C22.0167 9.42325 21.708 9.13028 21.3303 9.13028C20.9527 9.13028 20.644 9.42326 20.644 9.79615C20.644 14.3977 16.7769 18.1346 12.0002 18.1346C7.22341 18.1346 3.35641 14.3977 3.35641 9.79615C3.35641 9.42326 3.0477 9.13028 2.67004 9.13028C2.2924 9.13028 1.98364 9.42325 1.98364 9.79615C1.98364 14.9221 6.154 19.0982 11.3138 19.4601V23.3341C11.3138 23.707 11.6225 24 12.0002 24ZM11.9971 13.5376L11.9999 13.5375C14.1668 13.5376 15.9459 11.8157 15.9459 9.73289V5.19938C15.9459 3.11661 14.1668 1.39469 11.9999 1.39469C9.83307 1.39469 8.05399 3.11661 8.05399 5.19938V9.73289C8.05399 11.8801 9.83401 13.599 11.9971 13.5376Z",\n fill: "currentColor"\n }\n) }), Sh = () => /* @__PURE__ */ c("svg", { viewBox: "0 0 24 24", fill: "none", xmlns: "http://www.w3.org/2000/svg", children: /* @__PURE__ */ c(\n "path",\n {\n fillRule: "evenodd",\n clipRule: "evenodd",\n d: "M1.74865 15.0981C4.21112 14.6325 6.67257 14.1541 9.14099 13.717C9.87669 13.5867 10.4316 13.8488 10.295 14.6763C10.08 15.9109 8.924 22.0405 8.89071 22.2314C8.83197 22.5681 8.50093 22.8488 8.12267 22.784C7.72511 22.7159 7.52171 22.3541 7.59184 21.9653C7.93189 20.0804 8.29296 18.2179 8.63986 16.3501L1.1653 23.8246C0.897232 24.0927 0.44607 24.0326 0.198383 23.7853C-0.0587126 23.5286 -0.069678 23.1124 0.191173 22.8516L7.66401 15.3787L2.04472 16.4299C1.65662 16.519 1.29203 16.2739 1.22804 15.9082C1.13335 15.5202 1.37319 15.1521 1.74865 15.0981ZM23.8019 0.214702C24.059 0.471357 24.07 0.887579 23.8092 1.14843L16.3363 8.62127L21.9556 7.57013C22.3437 7.48097 22.7083 7.72612 22.7723 8.09183C22.867 8.47977 22.6271 8.84795 22.2517 8.90195C19.7892 9.36748 17.3278 9.84591 14.8593 10.283C14.5401 10.3395 14.1563 10.4224 13.8753 10.1419C13.6989 9.96586 13.6128 9.69317 13.6514 9.45274C13.773 8.69448 15.0752 1.96615 15.1096 1.76863C15.1684 1.43193 15.4994 1.1512 15.8777 1.21598C16.2752 1.28407 16.4847 1.69396 16.4083 2.03581C16.0655 3.87466 15.7073 5.77941 15.3604 7.64995L22.835 0.175369C23.1031 -0.0927036 23.5543 -0.0325612 23.8019 0.214702Z",\n fill: "currentColor"\n }\n) }), Eh = () => /* @__PURE__ */ c("svg", { viewBox: "0 0 24 24", fill: "none", xmlns: "http://www.w3.org/2000/svg", children: /* @__PURE__ */ c(\n "path",\n {\n d: "M0.708204 12.8H23.2918C23.6853 12.8 24 12.4445 24 12C24 11.5556 23.6853 11.2 23.2918 11.2H0.708204C0.314761 11.2 0 11.5556 0 12C0 12.4445 0.314761 12.8 0.708204 12.8Z",\n fill: "currentColor"\n }\n) }), kh = () => /* @__PURE__ */ c("svg", { viewBox: "0 0 24 24", fill: "none", xmlns: "http://www.w3.org/2000/svg", children: /* @__PURE__ */ c(\n "path",\n {\n d: "M23.9184 14.7148V5.5082C23.9184 2.43934 21.4089 0 18.4289 0H5.48947C2.43105 0 0 2.51803 0 5.5082V14.7148C0 17.7836 2.50947 20.223 5.48947 20.223H15.5273L22.8989 23.9213C22.9773 24 23.1342 24 23.2126 24C23.3694 24 23.6047 23.9213 23.7616 23.7639C23.9968 23.5279 24.0752 23.2131 23.9184 22.8983L21.9579 18.9639C23.1342 17.941 23.9184 16.4459 23.9184 14.7148ZM15.9979 18.8852C15.9195 18.8852 15.841 18.8852 15.841 18.8065C15.7626 18.8065 15.7626 18.8065 15.6842 18.8065H5.48947C3.21526 18.8065 1.41157 16.9967 1.41157 14.7148V5.5082C1.41157 3.22623 3.21526 1.41638 5.48947 1.41638H18.4289C20.7031 1.41638 22.5068 3.22623 22.5068 5.5082V14.7148C22.5068 16.1312 21.801 17.3901 20.6247 18.177L20.5463 18.2557L20.4679 18.3344C20.4679 18.3344 20.3895 18.4131 20.3895 18.4918C20.3895 18.5705 20.311 18.5705 20.311 18.6492C20.311 18.7279 20.311 18.7278 20.311 18.8065C20.311 18.8852 20.311 18.8852 20.311 18.9639C20.311 19.0426 20.311 19.0426 20.311 19.1213V19.2L21.5658 21.718L15.9979 18.8852Z",\n fill: "currentColor"\n }\n) }), Nh = () => /* @__PURE__ */ c("svg", { xmlns: "http://www.w3.org/2000/svg", viewBox: "0 0 24 24", fill: "none", children: /* @__PURE__ */ c(\n "path",\n {\n d: "M23.9184 14.7148V5.5082C23.9184 2.43934 21.4089 0 18.4289 0H5.48947C2.43105 0 0 2.51803 0 5.5082V14.7148C0 17.7836 2.50947 20.223 5.48947 20.223H15.5273L22.8989 23.9213C22.9773 24 23.1342 24 23.2126 24C23.3694 24 23.6047 23.9213 23.7616 23.7639C23.9968 23.5279 24.0752 23.2131 23.9184 22.8983L21.9579 18.9639C23.1342 17.941 23.9184 16.4459 23.9184 14.7148Z",\n fill: "currentColor"\n }\n) }), Th = () => /* @__PURE__ */ e1("svg", { viewBox: "0 0 24 24", fill: "none", xmlns: "http://www.w3.org/2000/svg", children: [\n /* @__PURE__ */ c(\n "path",\n {\n d: "M11.4001 3.8752C11.4001 3.53527 11.6668 3.26331 12.0001 3.26331C12.3335 3.26331 12.6001 3.53527 12.6001 3.8752V7.13852C12.6001 7.47845 12.3335 7.75036 12.0001 7.75036C11.6668 7.75036 11.4001 7.47845 11.4001 7.13852V3.8752Z",\n fill: "currentColor"\n }\n ),\n /* @__PURE__ */ c(\n "path",\n {\n fillRule: "evenodd",\n clipRule: "evenodd",\n d: "M5 7.13882C5 3.19547 8.13334 0 12 0C15.8667 0 19 3.19547 19 7.13882V16.8612C19 20.8046 15.8667 24 12 24C8.13334 24 5 20.8046 5 16.8612V7.13882ZM12 22.7082C15.1333 22.7082 17.7334 20.1247 17.7334 16.8612V7.13882C17.7334 3.94335 15.2 1.29176 12 1.29176C8.86667 1.29176 6.26668 3.87536 6.26668 7.13882V16.8612C6.26668 20.0567 8.80001 22.7082 12 22.7082Z",\n fill: "currentColor"\n }\n )\n] }), Ih = () => /* @__PURE__ */ c("svg", { viewBox: "0 0 24 24", fill: "none", xmlns: "http://www.w3.org/2000/svg", children: /* @__PURE__ */ c(\n "path",\n {\n fillRule: "evenodd",\n clipRule: "evenodd",\n d: "M11.9672 1.8279L14.3198 4.14119C14.9139 4.7253 15.9076 3.85589 15.286 3.2446L12.4503 0.456309C12.1841 0.194556 11.8094 0.194556 11.5432 0.456309L8.70757 3.2446C8.12676 3.81571 9.01122 4.73451 9.61462 4.14119L11.9672 1.8279ZM20.8978 8.76253C20.2933 8.16956 19.4104 9.08849 19.9915 9.65987L22.3418 11.9708L19.9915 14.2818C19.3865 14.8767 20.3479 15.7779 20.9576 15.1784L23.7933 12.3901C24.0594 12.1285 24.0594 11.7551 23.7933 11.4935L20.8986 8.76328L20.8978 8.76253ZM20.4746 11.4071C20.8232 11.4071 21.1055 11.6823 21.1055 12.0291C21.1055 12.3753 20.808 12.6511 20.3565 12.6511H12.5391V20.3362C12.5391 21.1404 11.2774 21.1404 11.2774 20.3362V12.6511H3.46006C3.11148 12.6511 2.82919 12.3759 2.82919 12.0291C2.82919 11.6823 3.11148 11.4071 3.46006 11.4071H11.3955V3.72206C11.3955 3.37527 11.6778 3.10005 12.0264 3.10005C12.375 3.10005 12.6573 3.37527 12.6573 3.72206V11.4071H20.4746ZM0.20508 12.453C-0.07581 12.2401 -0.0666719 11.8074 0.267714 11.6016L3.09506 8.82148C3.66704 8.25905 4.60397 9.12626 4.00211 9.71807L1.6519 12.029L4.00211 14.34C4.63503 14.9624 3.61034 15.8014 3.03598 15.2366L0.20508 12.453ZM12.4923 23.5185C12.229 23.8147 11.8388 23.7944 11.5766 23.5185L8.76664 20.7554C8.18666 20.1852 9.07759 19.2727 9.6737 19.8589L11.9968 22.1721L14.3789 19.8589C14.9525 19.2949 15.8959 20.1557 15.286 20.7554L12.4923 23.5185Z",\n fill: "currentColor"\n }\n) }), Dh = () => /* @__PURE__ */ c("svg", { viewBox: "0 0 24 24", fill: "none", xmlns: "http://www.w3.org/2000/svg", children: /* @__PURE__ */ c(\n "path",\n {\n fillRule: "evenodd",\n clipRule: "evenodd",\n d: "M1 5C0.447715 5 0 5.44771 0 6V8C0 8.55228 0.447715 9 1 9H3C3.55228 9 4 8.55228 4 8V6C4 5.44771 3.55228 5 3 5H1ZM1 15C0.447715 15 0 15.4477 0 16V18C0 18.5523 0.447715 19 1 19H3C3.55228 19 4 18.5523 4 18V16C4 15.4477 3.55228 15 3 15H1ZM10 6C10 5.44771 10.4477 5 11 5H13C13.5523 5 14 5.44771 14 6V8C14 8.55228 13.5523 9 13 9H11C10.4477 9 10 8.55228 10 8V6ZM11 15C10.4477 15 10 15.4477 10 16V18C10 18.5523 10.4477 19 11 19H13C13.5523 19 14 18.5523 14 18V16C14 15.4477 13.5523 15 13 15H11ZM20 6C20 5.44771 20.4477 5 21 5H23C23.5523 5 24 5.44771 24 6V8C24 8.55228 23.5523 9 23 9H21C20.4477 9 20 8.55228 20 8V6ZM21 15C20.4477 15 20 15.4477 20 16V18C20 18.5523 20.4477 19 21 19H23C23.5523 19 24 18.5523 24 18V16C24 15.4477 23.5523 15 23 15H21Z",\n fill: "currentColor"\n }\n) }), Hh = () => /* @__PURE__ */ e1(\n "svg",\n {\n xmlns: "http://www.w3.org/2000/svg",\n viewBox: "0 0 24 24",\n fill: "none",\n children: [\n /* @__PURE__ */ c(\n "path",\n {\n d: "M3.4 5H1.4C0.6 5 0 5.6 0 6.4V8.4C0 9.2 0.6 9.8 1.4 9.8H3.4C4.2 9.8 4.8 9.2 4.8 8.4V6.4C4.9 5.6 4.2 5 3.4 5Z",\n fill: "currentColor"\n }\n ),\n /* @__PURE__ */ c(\n "path",\n {\n d: "M3.4 15H1.4C0.6 15 0 15.6 0 16.4V18.4C0 19.2 0.6 19.8 1.4 19.8H3.4C4.2 19.8 4.8 19.2 4.8 18.4V16.4C4.9 15.6 4.2 15 3.4 15Z",\n fill: "currentColor"\n }\n ),\n /* @__PURE__ */ c(\n "path",\n {\n d: "M13 5H11C10.2 5 9.6 5.6 9.6 6.4V8.4C9.6 9.2 10.2 9.8 11 9.8H13C13.8 9.8 14.4 9.2 14.4 8.4V6.4C14.4 5.6 13.8 5 13 5Z",\n fill: "currentColor"\n }\n ),\n /* @__PURE__ */ c(\n "path",\n {\n d: "M13 15H11C10.2 15 9.6 15.6 9.6 16.4V18.4C9.6 19.2 10.2 19.8 11 19.8H13C13.8 19.8 14.4 19.2 14.4 18.4V16.4C14.4 15.6 13.8 15 13 15Z",\n fill: "currentColor"\n }\n ),\n /* @__PURE__ */ c(\n "path",\n {\n d: "M22.6 5H20.6C19.8 5 19.2 5.6 19.2 6.4V8.4C19.2 9.2 19.8 9.8 20.6 9.8H22.6C23.4 9.8 24 9.2 24 8.4V6.4C24 5.6 23.3 5 22.6 5Z",\n fill: "currentColor"\n }\n ),\n /* @__PURE__ */ c(\n "path",\n {\n d: "M22.6 15H20.6C19.8 15 19.2 15.6 19.2 16.4V18.4C19.2 19.2 19.8 19.8 20.6 19.8H22.6C23.4 19.8 24 19.2 24 18.4V16.4C24 15.6 23.3 15 22.6 15Z",\n fill: "currentColor"\n }\n )\n ]\n }\n), Vh = () => /* @__PURE__ */ c("svg", { viewBox: "0 0 24 24", fill: "none", xmlns: "http://www.w3.org/2000/svg", children: /* @__PURE__ */ c(\n "path",\n {\n fillRule: "evenodd",\n clipRule: "evenodd",\n d: "M19.6252 10.0674C22.0735 10.03 24.0587 12.0968 23.9987 14.5557C23.998 17.013 21.9963 19.0414 19.5667 19.0414H5.67842C2.53609 19.0414 0 16.4713 0 13.2922C0 9.82757 3.04503 7.02347 6.58615 7.59483C7.91189 5.91629 9.94079 4.95859 12.029 4.95859C15.2496 4.95859 17.9381 7.1125 18.7496 10.173C18.7496 10.173 18.9186 10.1425 19.0274 10.1267C19.2596 10.093 19.4421 10.0702 19.6252 10.0674ZM17.909 11.5488C17.7298 11.4278 17.6314 11.2463 17.6274 11.0171C17.1575 8.24298 14.8257 6.23922 12.029 6.23922C10.1451 6.23922 8.53088 7.18525 7.41961 8.66377C7.24977 8.86362 6.99089 9.00779 6.72477 8.94147C6.43024 8.88188 6.08284 8.8237 5.73776 8.8237C3.30106 8.8237 1.32645 10.8216 1.32645 13.2922C1.32645 15.7629 3.30106 17.7608 5.73776 17.7608H19.626C21.3481 17.7608 22.7316 16.3062 22.7316 14.5544C22.7316 12.7437 21.3493 11.3481 19.626 11.3481C19.2878 11.3481 18.8862 11.4631 18.5301 11.5833C18.3484 11.6446 18.0719 11.6468 17.909 11.5488Z",\n fill: "currentcolor"\n }\n) }), Ph = () => /* @__PURE__ */ e1("svg", { viewBox: "0 0 24 24", fill: "none", xmlns: "http://www.w3.org/2000/svg", children: [\n /* @__PURE__ */ c(\n "path",\n {\n d: "M12.7845 5.85153V0H0V24H24V5.85153H12.7845ZM11.2761 22.5077H1.45643V1.54425H11.2756L11.2761 22.5077ZM22.485 22.5077H12.7845L12.785 7.31349H22.485V22.5077Z",\n fill: "currentColor"\n }\n ),\n /* @__PURE__ */ c(\n "path",\n {\n d: "M8.74961 6.05346H4.03479V7.55153H8.74961V6.05346Z",\n fill: "currentColor"\n }\n ),\n /* @__PURE__ */ c(\n "path",\n {\n d: "M8.74961 11.15H4.03479V12.6705H8.74961V11.15Z",\n fill: "currentColor"\n }\n ),\n /* @__PURE__ */ c(\n "path",\n {\n d: "M8.74961 16.6054H4.03479V18.1484H8.74961V16.6054Z",\n fill: "currentColor"\n }\n ),\n /* @__PURE__ */ c(\n "path",\n {\n d: "M19.9658 11.15H15.251V12.6705H19.9658V11.15Z",\n fill: "currentColor"\n }\n ),\n /* @__PURE__ */ c(\n "path",\n {\n d: "M19.9658 16.6054H15.251V18.1484H19.9658V16.6054Z",\n fill: "currentColor"\n }\n )\n] }), Fh = () => /* @__PURE__ */ e1("svg", { xmlns: "http://www.w3.org/2000/svg", viewBox: "0 0 24 24", fill: "none", children: [\n /* @__PURE__ */ c(\n "path",\n {\n d: "M0 0V24H11.3V0H0ZM8.1 7.5H3.4V5.8H8.1V7.5ZM8.1 16.4V18.2H3.4V16.4H8.1ZM8.1 10.9V12.7H3.4V10.9H8.1Z",\n fill: "currentColor"\n }\n ),\n /* @__PURE__ */ c(\n "path",\n {\n d: "M13.1 5.9V24H24V5.9H13.1ZM16 12.7V10.9H20.7V12.7H16ZM20.8 16.4V18.2H16V16.4H20.8Z",\n fill: "currentColor"\n }\n )\n] }), Xh = () => /* @__PURE__ */ c("svg", { viewBox: "0 0 24 24", fill: "none", xmlns: "http://www.w3.org/2000/svg", children: /* @__PURE__ */ c(\n "path",\n {\n fillRule: "evenodd",\n clipRule: "evenodd",\n d: "M13.8958 4.55583C13.8958 3.41014 14.8245 2.48138 15.9702 2.48138H21.9256C23.0712 2.48138 24 3.41014 24 4.55583V7.53349C24 8.67918 23.0712 9.60794 21.9256 9.60794H15.9702C14.8245 9.60794 13.8958 8.67918 13.8958 7.53349V6.97307L9.24944 9.68343C9.78926 10.4874 10.1042 11.4551 10.1042 12.4962C10.1042 13.2923 9.92002 14.0456 9.59184 14.7156L13.8958 17.2262V16.4665C13.8958 15.3208 14.8245 14.3921 15.9702 14.3921H21.9256C23.0712 14.3921 24 15.3208 24 16.4665V19.4442C24 20.5898 23.0712 21.5186 21.9256 21.5186H15.9702C14.8245 21.5186 13.8958 20.5898 13.8958 19.4442V18.3998L9.05653 15.5769C8.13293 16.7756 6.68274 17.5483 5.05211 17.5483C2.26191 17.5483 0 15.2864 0 12.4962C-4.80683e-07 9.70595 2.26191 7.44404 5.05211 7.44404C6.43132 7.44404 7.68158 7.99682 8.59316 8.89271L13.8958 5.79952V4.55583ZM15.9702 3.6526C15.4714 3.6526 15.067 4.05699 15.067 4.55583V7.53349C15.067 8.03233 15.4714 8.43672 15.9702 8.43672H21.9256C22.4244 8.43672 22.8288 8.03233 22.8288 7.53349V4.55583C22.8288 4.05699 22.4244 3.6526 21.9256 3.6526H15.9702ZM5.05211 8.61526C2.90875 8.61526 1.17122 10.3528 1.17122 12.4962C1.17122 14.6395 2.90875 16.377 5.05211 16.377C6.29899 16.377 7.43827 15.7691 8.18856 14.7822C8.65672 14.141 8.933 13.351 8.933 12.4962C8.933 10.3528 7.19547 8.61526 5.05211 8.61526ZM15.9702 15.5633C15.4714 15.5633 15.067 15.9677 15.067 16.4665V19.4442C15.067 19.943 15.4714 20.3474 15.9702 20.3474H21.9256C22.4244 20.3474 22.8288 19.943 22.8288 19.4442V16.4665C22.8288 15.9677 22.4244 15.5633 21.9256 15.5633H15.9702Z",\n fill: "currentColor"\n }\n) }), Uh = () => /* @__PURE__ */ c("svg", { xmlns: "http://www.w3.org/2000/svg", viewBox: "0 0 25 24", fill: "none", children: /* @__PURE__ */ c(\n "path",\n {\n fillRule: "evenodd",\n clipRule: "evenodd",\n d: "M13.9 8.1L9.4 10.6C9.7 11.2 10.1 12 10.1 13C10.1 13.7 9.9 14.3 9.7 14.8L13.9 17.2V17C13.9 15.8 14.8 14.9 16 14.9H22C23.1 14.9 24.1 15.8 24.1 17V20C24.1 21.2 23.2 22.1 22 22.1H16C14.9 22.1 13.9 21.2 13.9 20V19.4L8.8 16.5C7.9 17.5 6.5 18.2 5 18.2C2.2 18.2 0 15.9 0 13.1C0 10.2 2.3 8 5 8C6.3 8 7.4 8.5 8.3 9.2L13.9 6V5.1C13.9 3.9 14.8 3 16 3H22C23.1 3 24 3.9 24 5.1V8.1C24 9.2 23.1 10.2 21.9 10.2H15.9C14.8 10.1 13.9 9.2 13.9 8.1Z",\n fill: "currentColor"\n }\n) }), Yh = () => /* @__PURE__ */ e1("svg", { viewBox: "0 0 24 24", fill: "none", xmlns: "http://www.w3.org/2000/svg", children: [\n /* @__PURE__ */ c(\n "path",\n {\n fillRule: "evenodd",\n clipRule: "evenodd",\n d: "M6.96314 6.58666C6.96314 7.97965 7.52873 9.2407 8.44255 10.1524L4.37789 15.3765H2.1238C0.978355 15.3765 0.0497925 16.305 0.0497925 17.4505V20.4133C0.0497925 21.5588 0.978355 22.4873 2.1238 22.4873H8.04952C9.19496 22.4873 10.1235 21.5588 10.1235 20.4133V17.4505C10.1235 16.305 9.19496 15.3765 8.04952 15.3765H5.87951L9.37378 10.8855C10.1385 11.3537 11.0379 11.6235 12 11.6235C12.9621 11.6235 13.8615 11.3537 14.6262 10.8855L18.1205 15.3765H15.9505C14.805 15.3765 13.8765 16.305 13.8765 17.4505V20.4133C13.8765 21.5588 14.805 22.4873 15.9505 22.4873H21.8762C23.0216 22.4873 23.9502 21.5588 23.9502 20.4133V17.4505C23.9502 16.305 23.0216 15.3765 21.8762 15.3765H19.6221L15.5574 10.1524C16.4713 9.2407 17.0369 7.97965 17.0369 6.58666C17.0369 3.80487 14.7818 1.54979 12 1.54979C9.21822 1.54979 6.96314 3.80487 6.96314 6.58666ZM8.04952 16.5616H2.1238C1.63289 16.5616 1.23494 16.9596 1.23494 17.4505V20.4133C1.23494 20.9042 1.63289 21.3022 2.1238 21.3022H8.04952C8.54042 21.3022 8.93838 20.9042 8.93838 20.4133V17.4505C8.93838 16.9596 8.54042 16.5616 8.04952 16.5616ZM15.8517 6.58666C15.8517 8.7139 14.1272 10.4384 12 10.4384C9.87275 10.4384 8.14828 8.7139 8.14828 6.58666C8.14828 4.45941 9.87275 2.73494 12 2.73494C14.1272 2.73494 15.8517 4.45941 15.8517 6.58666ZM21.8762 16.5616H15.9505C15.4596 16.5616 15.0616 16.9596 15.0616 17.4505V20.4133C15.0616 20.9042 15.4596 21.3022 15.9505 21.3022H21.8762C22.3671 21.3022 22.7651 20.9042 22.7651 20.4133V17.4505C22.7651 16.9596 22.3671 16.5616 21.8762 16.5616Z",\n fill: "currentColor"\n }\n ),\n /* @__PURE__ */ c(\n "path",\n {\n fillRule: "evenodd",\n clipRule: "evenodd",\n d: "M12 10.3886C14.0997 10.3886 15.8019 8.6864 15.8019 6.58666C15.8019 4.48691 14.0997 2.78473 12 2.78473C9.90025 2.78473 8.19807 4.48691 8.19807 6.58666C8.19807 8.6864 9.90025 10.3886 12 10.3886ZM8.37634 10.1564C7.47179 9.23829 6.91334 7.97756 6.91334 6.58666C6.91334 3.77737 9.19072 1.5 12 1.5C14.8093 1.5 17.0867 3.77737 17.0867 6.58666C17.0867 7.97757 16.5282 9.23829 15.6236 10.1564L19.6465 15.3267H21.8762C23.0491 15.3267 24 16.2775 24 17.4505V20.4133C24 21.5863 23.0491 22.5371 21.8762 22.5371H15.9505C14.7775 22.5371 13.8267 21.5863 13.8267 20.4133V17.4505C13.8267 16.2775 14.7775 15.3267 15.9505 15.3267H18.0187L14.6141 10.9511C13.8501 11.4097 12.9556 11.6733 12 11.6733C11.0444 11.6733 10.1499 11.4097 9.38587 10.9511L5.98135 15.3267H8.04952C9.22246 15.3267 10.1733 16.2775 10.1733 17.4505V20.4133C10.1733 21.5863 9.22246 22.5371 8.04952 22.5371H2.1238C0.950855 22.5371 0 21.5863 0 20.4133V17.4505C0 16.2775 0.950855 15.3267 2.1238 15.3267H4.35355L8.37634 10.1564ZM8.44255 10.1524C7.52873 9.2407 6.96314 7.97965 6.96314 6.58666C6.96314 3.80487 9.21822 1.54979 12 1.54979C14.7818 1.54979 17.0369 3.80487 17.0369 6.58666C17.0369 7.97965 16.4713 9.2407 15.5574 10.1524L19.6221 15.3765H21.8762C23.0216 15.3765 23.9502 16.305 23.9502 17.4505V20.4133C23.9502 21.5588 23.0216 22.4873 21.8762 22.4873H15.9505C14.805 22.4873 13.8765 21.5588 13.8765 20.4133V17.4505C13.8765 16.305 14.805 15.3765 15.9505 15.3765H18.1205L14.6262 10.8855C13.8615 11.3537 12.9621 11.6235 12 11.6235C11.0379 11.6235 10.1385 11.3537 9.37378 10.8855L5.87951 15.3765H8.04952C9.19496 15.3765 10.1235 16.305 10.1235 17.4505V20.4133C10.1235 21.5588 9.19496 22.4873 8.04952 22.4873H2.1238C0.978355 22.4873 0.0497925 21.5588 0.0497925 20.4133V17.4505C0.0497925 16.305 0.978355 15.3765 2.1238 15.3765H4.37789L8.44255 10.1524ZM8.04952 16.6114H2.1238C1.66039 16.6114 1.28473 16.9871 1.28473 17.4505V20.4133C1.28473 20.8767 1.66039 21.2524 2.1238 21.2524H8.04952C8.51292 21.2524 8.88858 20.8767 8.88858 20.4133V17.4505C8.88858 16.9871 8.51292 16.6114 8.04952 16.6114ZM21.8762 16.6114H15.9505C15.4871 16.6114 15.1114 16.9871 15.1114 17.4505V20.4133C15.1114 20.8767 15.4871 21.2524 15.9505 21.2524H21.8762C22.3396 21.2524 22.7153 20.8767 22.7153 20.4133V17.4505C22.7153 16.9871 22.3396 16.6114 21.8762 16.6114ZM2.1238 16.5616H8.04952C8.54042 16.5616 8.93838 16.9596 8.93838 17.4505V20.4133C8.93838 20.9042 8.54042 21.3022 8.04952 21.3022H2.1238C1.63289 21.3022 1.23494 20.9042 1.23494 20.4133V17.4505C1.23494 16.9596 1.63289 16.5616 2.1238 16.5616ZM12 10.4384C14.1272 10.4384 15.8517 8.7139 15.8517 6.58666C15.8517 4.45941 14.1272 2.73494 12 2.73494C9.87275 2.73494 8.14828 4.45941 8.14828 6.58666C8.14828 8.7139 9.87275 10.4384 12 10.4384ZM15.9505 16.5616H21.8762C22.3671 16.5616 22.7651 16.9596 22.7651 17.4505V20.4133C22.7651 20.9042 22.3671 21.3022 21.8762 21.3022H15.9505C15.4596 21.3022 15.0616 20.9042 15.0616 20.4133V17.4505C15.0616 16.9596 15.4596 16.5616 15.9505 16.5616Z",\n fill: "currentColor"\n }\n )\n] }), Gh = () => /* @__PURE__ */ c("svg", { xmlns: "http://www.w3.org/2000/svg", viewBox: "0 0 24 24", fill: "none", children: /* @__PURE__ */ c(\n "path",\n {\n fillRule: "evenodd",\n clipRule: "evenodd",\n d: "M24 18V21C24 22.2 23 23.1 21.9 23.1H16C14.8 23.1 13.9 22.1 13.9 21V18C13.9 16.8 14.9 15.9 16 15.9H17.7L14.4 11.7C13.7 12.1 12.9 12.3 12.1 12.3C11.2 12.3 10.4 12.1 9.7 11.7L6.4 16H8C9.2 16 10.1 17 10.1 18.1V21.1C10.1 22.3 9.1 23.2 8 23.2H2.1C1 23 0 22.1 0 20.9V17.9C0 16.7 1 15.8 2.1 15.8H4L8.2 10.4C7.4 9.6 6.9 8.4 6.9 7.1C6.9 4.3 9.2 2 12 2C14.8 2 17.1 4.3 17.1 7.1C17.1 8.4 16.6 9.6 15.8 10.5L19.9 15.8H21.9C23 15.8 24 16.8 24 18Z",\n fill: "currentColor"\n }\n) }), Qh = () => /* @__PURE__ */ e1(\n "svg",\n {\n width: "24",\n height: "24",\n viewBox: "0 0 24 24",\n fill: "none",\n xmlns: "http://www.w3.org/2000/svg",\n children: [\n /* @__PURE__ */ e1("g", { clipPath: "url(#clip0_2721_61383)", children: [\n /* @__PURE__ */ c(\n "path",\n {\n fillRule: "evenodd",\n clipRule: "evenodd",\n d: "M17.4445 6.55517C17.7178 6.82853 17.7178 7.27175 17.4445 7.54511L7.54498 17.4446C7.27162 17.718 6.8284 17.718 6.55503 17.4446C6.28167 17.1712 6.28167 16.728 6.55503 16.4547L16.4545 6.55517C16.7279 6.2818 17.1711 6.2818 17.4445 6.55517Z",\n fill: "currentcolor"\n }\n ),\n /* @__PURE__ */ c(\n "path",\n {\n fillRule: "evenodd",\n clipRule: "evenodd",\n d: "M21.8797 2.12082C23.1673 3.40998 23.8905 5.1575 23.8905 6.97951C23.8905 8.80153 23.1673 10.549 21.8797 11.8382L18.9718 14.7461C18.6984 15.0195 18.2552 15.0195 17.9818 14.7461C17.7085 14.4728 17.7085 14.0296 17.9818 13.7562L20.8892 10.8489C21.9146 9.82221 22.4905 8.43052 22.4905 6.97951C22.4905 5.52864 21.9147 4.13709 20.8895 3.11046C19.8629 2.08527 18.4713 1.50944 17.0204 1.50944C15.5695 1.50944 14.1779 2.08534 13.1512 3.11064L10.2977 5.96412C10.0243 6.23749 9.58113 6.23749 9.30777 5.96412C9.0344 5.69076 9.0344 5.24754 9.30777 4.97417L12.1614 2.12051C13.4506 0.832954 15.1984 0.109436 17.0204 0.109436C18.8424 0.109436 20.5906 0.833261 21.8797 2.12082ZM5.86943 9.40246C6.14279 9.67583 6.14279 10.119 5.86943 10.3924L2.97079 13.2911C2.00879 14.328 1.48527 15.6971 1.51023 17.1117C1.53526 18.5302 2.10991 19.8836 3.11312 20.8868C4.11632 21.89 5.46976 22.4647 6.88829 22.4897C8.30282 22.5147 9.67196 21.9912 10.7089 21.0292L13.6075 18.1305C13.8809 17.8572 14.3241 17.8572 14.5975 18.1305C14.8708 18.4039 14.8708 18.8471 14.5975 19.1205L11.6811 22.0368L11.6721 22.0453C10.3687 23.2597 8.64482 23.9209 6.86359 23.8895C5.08237 23.8581 3.38288 23.1365 2.12317 21.8768C0.863455 20.6171 0.141875 18.9176 0.110446 17.1363C0.079019 15.3551 0.7402 13.6312 1.95469 12.3279L1.96311 12.3188L4.87948 9.40246C5.15284 9.1291 5.59606 9.1291 5.86943 9.40246Z",\n fill: "currentcolor"\n }\n )\n ] }),\n /* @__PURE__ */ c("defs", { children: /* @__PURE__ */ c("clipPath", { id: "clip0_2721_61383", children: /* @__PURE__ */ c("rect", { width: "24", height: "24", fill: "white" }) }) })\n ]\n }\n), Zh = () => /* @__PURE__ */ c("svg", { viewBox: "0 0 24 24", fill: "none", xmlns: "http://www.w3.org/2000/svg", children: /* @__PURE__ */ c(\n "path",\n {\n d: "M23.5 22.8854V6.68047C23.5 6.6051 23.4999 6.52973 23.4248 6.37898C23.4248 6.30361 23.3496 6.22825 23.2745 6.15288L17.8628 0.726106C17.7876 0.650734 17.7124 0.575376 17.6372 0.575376C17.5621 0.575376 17.4869 0.5 17.3366 0.5H1.17649C0.800671 0.5 0.5 0.801482 0.5 1.17834V22.81C0.5 23.1869 0.800671 23.4884 1.17649 23.4884H22.7484C23.1993 23.5637 23.5 23.2622 23.5 22.8854ZM17.8628 2.36912L21.8541 6.37898H17.781L17.8628 2.36912ZM1.79772 22.3899V1.74464H16.8105V6.68047C16.8105 7.05733 17.1111 7.35883 17.4869 7.35883H22.4771V22.3899H1.79772Z",\n fill: "currentColor"\n }\n) }), jh = () => /* @__PURE__ */ e1("svg", { viewBox: "0 0 24 24", fill: "none", xmlns: "http://www.w3.org/2000/svg", children: [\n /* @__PURE__ */ c(\n "path",\n {\n d: "M5.73315 0.935417C5.73315 0.556872 6.04003 0.25 6.41857 0.25C6.79712 0.25 7.10399 0.556872 7.10399 0.935417V23.0646C7.10399 23.4431 6.79712 23.75 6.41857 23.75C6.04003 23.75 5.73315 23.4431 5.73315 23.0646V0.935417Z",\n fill: "currentColor"\n }\n ),\n /* @__PURE__ */ c(\n "path",\n {\n d: "M16.8957 0.935417C16.8957 0.556872 17.2025 0.25 17.5811 0.25C17.9596 0.25 18.2665 0.556872 18.2665 0.935417V23.0646C18.2665 23.4431 17.9596 23.75 17.5811 23.75C17.2025 23.75 16.8957 23.4431 16.8957 23.0646V0.935417Z",\n fill: "currentColor"\n }\n )\n] }), Kh = () => /* @__PURE__ */ c("svg", { viewBox: "0 0 48 48", fill: "none", xmlns: "http://www.w3.org/2000/svg", children: /* @__PURE__ */ c(\n "path",\n {\n fillRule: "evenodd",\n clipRule: "evenodd",\n d: "M32.4898 17.934H28.5425V19.4924H35.1552V12.9469L33.5807 12.9469V16.7108L32.7538 15.7805C30.534 13.2831 27.2855 11.7002 23.6616 11.7002C17.5487 11.7002 12.4997 16.1744 11.6616 21.9859H13.2644C14.0888 17.042 18.4371 13.2586 23.6616 13.2586C26.9852 13.2586 29.953 14.7866 31.878 17.1749L32.4898 17.934ZM13.7425 30.6896L14.5695 31.6199C16.7892 34.1172 20.0378 35.7002 23.6616 35.7002C29.7745 35.7002 34.8236 31.226 35.6616 25.4145H34.0588C33.2344 30.3584 28.8862 34.1418 23.6616 34.1418C20.3371 34.1418 17.3829 32.6131 15.4463 30.2268L14.8292 29.4664H18.7808V27.908H12.168L12.168 34.4534H13.7425V30.6896ZM22.0206 21.3891C22.0206 22.0646 22.4795 22.4984 23.9067 22.918C25.3338 23.3375 26.8615 24.0273 26.8615 26.0468C26.8615 27.5046 25.887 28.3082 24.6611 28.5713V30.1002H22.775V28.5571C21.5679 28.2655 20.5369 27.3908 20.4615 25.8335H21.8446C21.9137 26.6726 22.423 27.3268 23.718 27.3268C25.1074 27.3268 25.4155 26.5446 25.4155 26.054C25.4155 25.3926 25.1011 24.7668 23.5294 24.3402C21.7754 23.8637 20.5746 23.046 20.5746 21.4033C20.5746 20.0308 21.5554 19.1348 22.775 18.8362V17.3002H24.6611V18.8575C25.975 19.2202 26.6351 20.3437 26.6791 21.5668H25.2898C25.252 20.678 24.8371 20.0735 23.718 20.0735C22.6556 20.0735 22.0206 20.614 22.0206 21.3891Z",\n fill: "currentColor"\n }\n) }), Jh = () => /* @__PURE__ */ e1("svg", { viewBox: "0 0 48 48", fill: "none", xmlns: "http://www.w3.org/2000/svg", children: [\n /* @__PURE__ */ c(\n "path",\n {\n d: "M33 35.4613V18.2843C33 18.2843 33 18.2843 33 18.2244C33 18.1646 33 18.1047 33 18.1047V18.0449C33 17.985 32.9409 17.9252 32.8819 17.8653L27.2164 12.1197C27.1573 12.0598 27.0983 12.0599 27.0393 12H26.9803C26.9213 12 26.8623 12 26.8623 12C26.8623 12 26.8623 12 26.8033 12H15.5311C15.236 12 15 12.2394 15 12.5386V35.4613C15 35.7606 15.236 36 15.5311 36H32.4688C32.7639 36 33 35.7606 33 35.4613ZM27.3934 13.8554L31.1704 17.6858H27.3934V13.8554ZM16.1213 34.8628V13.0773H26.3311V18.2244C26.3311 18.5237 26.5672 18.7631 26.8623 18.7631H31.9377V34.803H16.1213V34.8628Z",\n fill: "currentColor"\n }\n ),\n /* @__PURE__ */ c(\n "path",\n {\n d: "M20.5281 27.928C20.5281 27.4427 20.4081 27.0693 20.1681 26.808C19.9281 26.5467 19.6081 26.416 19.2081 26.416C18.9841 26.416 18.8081 26.424 18.6801 26.44C18.5575 26.456 18.4588 26.4747 18.3841 26.496V29.12C18.4748 29.1947 18.6055 29.2667 18.7761 29.336C18.9468 29.4053 19.1335 29.44 19.3361 29.44C19.5495 29.44 19.7308 29.4027 19.8801 29.328C20.0348 29.248 20.1601 29.1413 20.2561 29.008C20.3521 28.8693 20.4215 28.7093 20.4641 28.528C20.5068 28.3413 20.5281 28.1413 20.5281 27.928ZM21.3041 27.928C21.3041 28.2427 21.2615 28.5333 21.1761 28.8C21.0961 29.0667 20.9761 29.296 20.8161 29.488C20.6561 29.68 20.4588 29.8293 20.2241 29.936C19.9948 30.0427 19.7308 30.096 19.4321 30.096C19.1921 30.096 18.9788 30.064 18.7921 30C18.6108 29.936 18.4748 29.8747 18.3841 29.816V31.48H17.6401V25.968C17.8161 25.9253 18.0348 25.88 18.2961 25.832C18.5628 25.7787 18.8695 25.752 19.2161 25.752C19.5361 25.752 19.8241 25.8027 20.0801 25.904C20.3361 26.0053 20.5548 26.1493 20.7361 26.336C20.9175 26.5227 21.0561 26.752 21.1521 27.024C21.2535 27.2907 21.3041 27.592 21.3041 27.928Z",\n fill: "currentColor"\n }\n ),\n /* @__PURE__ */ c(\n "path",\n {\n d: "M25.2391 26.72C25.1484 26.6453 25.0177 26.5733 24.8471 26.504C24.6764 26.4347 24.4897 26.4 24.2871 26.4C24.0737 26.4 23.8897 26.44 23.7351 26.52C23.5857 26.5947 23.4631 26.7013 23.3671 26.84C23.2711 26.9733 23.2017 27.1333 23.1591 27.32C23.1164 27.5067 23.0951 27.7067 23.0951 27.92C23.0951 28.4053 23.2151 28.7813 23.4551 29.048C23.6951 29.3093 24.0151 29.44 24.4151 29.44C24.6177 29.44 24.7857 29.432 24.9191 29.416C25.0577 29.3947 25.1644 29.3733 25.2391 29.352V26.72ZM25.2391 23.92L25.9831 23.792V29.88C25.8124 29.928 25.5937 29.976 25.3271 30.024C25.0604 30.072 24.7537 30.096 24.4071 30.096C24.0871 30.096 23.7991 30.0453 23.5431 29.944C23.2871 29.8427 23.0684 29.6987 22.8871 29.512C22.7057 29.3253 22.5644 29.0987 22.4631 28.832C22.3671 28.56 22.3191 28.256 22.3191 27.92C22.3191 27.6 22.3591 27.3067 22.4391 27.04C22.5244 26.7733 22.6471 26.544 22.8071 26.352C22.9671 26.16 23.1617 26.0107 23.3911 25.904C23.6257 25.7973 23.8924 25.744 24.1911 25.744C24.4311 25.744 24.6417 25.776 24.8231 25.84C25.0097 25.904 25.1484 25.9653 25.2391 26.024V23.92Z",\n fill: "currentColor"\n }\n ),\n /* @__PURE__ */ c(\n "path",\n {\n d: "M29.086 23.792C29.3047 23.792 29.4913 23.808 29.646 23.84C29.806 23.872 29.918 23.9013 29.982 23.928L29.846 24.568C29.782 24.536 29.6913 24.5067 29.574 24.48C29.4567 24.448 29.3127 24.432 29.142 24.432C28.7953 24.432 28.5527 24.528 28.414 24.72C28.2753 24.9067 28.206 25.16 28.206 25.48V25.84H29.806V26.464H28.206V30H27.462V25.464C27.462 24.9307 27.5927 24.52 27.854 24.232C28.1153 23.9387 28.526 23.792 29.086 23.792Z",\n fill: "currentColor"\n }\n )\n] }), _h = () => /* @__PURE__ */ e1("svg", { viewBox: "0 0 24 25", fill: "none", xmlns: "http://www.w3.org/2000/svg", children: [\n /* @__PURE__ */ c(\n "path",\n {\n d: "M22.8391 6.90341C24.2547 5.48818 24.2547 3.17234 22.8391 1.69278C22.1313 0.985159 21.2304 0.599189 20.2652 0.599189C19.3 0.599189 18.3348 0.985159 17.6913 1.69278L2.44093 16.9387C2.37658 17.003 2.37658 17.0674 2.31223 17.0674C2.31223 17.0674 2.31223 17.0674 2.31223 17.1317L0.124416 23.6289C0.0600686 23.8219 0.124416 24.0792 0.253111 24.2078C0.381806 24.3365 0.510501 24.4008 0.703544 24.4008C0.767891 24.4008 0.832239 24.4008 0.896586 24.4008L7.39569 22.2136C7.39569 22.2136 7.39569 22.2136 7.46003 22.2136C7.52438 22.2136 7.58873 22.1493 7.58873 22.085L20.6513 9.02626L22.8391 6.90341ZM18.5278 2.59338C18.9782 2.14308 19.6217 1.88576 20.2652 1.88576C20.9087 1.88576 21.5521 2.14308 22.0026 2.59338C22.9678 3.55832 22.9678 5.10221 22.0026 6.13147L20.2652 7.86834L16.7261 4.33026L18.5278 2.59338ZM13.7661 7.35371L17.3052 10.8918L7.26699 20.9271L3.79222 17.4533L13.7661 7.35371ZM1.60441 22.9856L3.0844 18.4826L6.04439 21.4417L1.60441 22.9856ZM18.0774 9.99119L14.5383 6.45311L15.8896 5.1022L19.4287 8.64028L18.0774 9.99119Z",\n fill: "currentcolor"\n }\n ),\n /* @__PURE__ */ c(\n "path",\n {\n fillRule: "evenodd",\n clipRule: "evenodd",\n d: "M22.9092 6.97355L22.9082 6.97459L20.7214 9.0964L20.7203 9.09744L7.68244 22.1315C7.67189 22.1763 7.64718 22.215 7.61862 22.2436C7.58057 22.2816 7.52445 22.3128 7.46003 22.3128H7.4123L0.912827 24.5H0.704298C0.596206 24.5 0.500943 24.4819 0.413926 24.4432C0.327339 24.4047 0.253197 24.3482 0.182995 24.278C0.102425 24.1974 0.046952 24.0827 0.0197403 23.9648C-0.00756671 23.8465 -0.00879298 23.7149 0.0303346 23.5975L2.21306 17.1154V17.0679L2.31223 17.0674V17.1317L0.124416 23.6289C0.0600686 23.8219 0.124416 24.0792 0.253111 24.2078C0.381806 24.3365 0.510501 24.4008 0.703544 24.4008H0.896586L7.39569 22.2136H7.46003C7.52438 22.2136 7.58873 22.1493 7.58873 22.085L20.6513 9.02626L22.8391 6.90341C24.2547 5.48818 24.2547 3.17234 22.8391 1.69278C22.1313 0.985159 21.2304 0.599189 20.2652 0.599189C19.3 0.599189 18.3348 0.985159 17.6913 1.69278L2.44093 16.9387C2.41635 16.9633 2.40116 16.9878 2.38818 17.0088C2.36719 17.0428 2.352 17.0674 2.31223 17.0674V16.9682C2.30995 16.9682 2.30174 16.9693 2.29358 16.975C2.29089 16.9769 2.28948 16.9785 2.28952 16.9784C2.28955 16.9784 2.29102 16.9767 2.29407 16.9721C2.29562 16.9698 2.29771 16.9664 2.30034 16.9621C2.31266 16.9419 2.33666 16.9027 2.37081 16.8686L17.6195 1.62428C18.2837 0.894993 19.2759 0.500015 20.2652 0.500015C21.2581 0.500015 22.1838 0.897447 22.9092 1.62264L22.9108 1.6242C24.3623 3.14123 24.3644 5.51874 22.9092 6.97355ZM18.5979 2.66352L18.5966 2.6648L16.8676 4.33155L20.2652 7.72811L21.9313 6.06246C22.8609 5.07008 22.8574 3.58816 21.9325 2.66352C21.5014 2.23257 20.8835 1.98494 20.2652 1.98494C19.6469 1.98494 19.029 2.23257 18.5979 2.66352ZM22.0026 6.13147C22.9678 5.10221 22.9678 3.55832 22.0026 2.59338C21.5521 2.14308 20.9087 1.88576 20.2652 1.88576C19.6217 1.88576 18.9782 2.14308 18.5278 2.59338L16.7261 4.33026L20.2652 7.86834L22.0026 6.13147ZM13.7661 7.35371L3.79222 17.4533L7.26699 20.9271L17.3052 10.8918L13.7661 7.35371ZM13.7665 7.49439L3.93205 17.4529L7.26699 20.7868L17.1649 10.8918L13.7665 7.49439ZM1.60441 22.9856L6.04439 21.4417L3.0844 18.4826L1.60441 22.9856ZM1.76123 22.8261L5.86239 21.4L3.12829 18.6667L1.76123 22.8261ZM18.0774 9.99119L14.5383 6.45311L15.8896 5.1022L19.4287 8.64028L18.0774 9.99119ZM19.2884 8.64028L18.0774 9.85096L14.6785 6.45311L15.8896 5.24243L19.2884 8.64028Z",\n fill: "currentcolor"\n }\n )\n] }), $h = () => /* @__PURE__ */ c("svg", { viewBox: "0 0 48 48", fill: "none", xmlns: "http://www.w3.org/2000/svg", children: /* @__PURE__ */ c(\n "path",\n {\n d: "M13.7509 1.2323C15.3875 -0.410769 18.0408 -0.410764 19.6774 1.2323C21.3138 2.87536 21.3138 5.53929 19.6774 7.18237L19.212 7.6496L19.3591 7.79727C20.6979 9.14153 20.6979 11.321 19.3591 12.6653L16.8917 15.1426C16.5569 15.4786 16.0142 15.4786 15.6794 15.1426C15.3447 14.8065 15.3447 14.2616 15.6794 13.9256L18.1469 11.4483C18.8163 10.7762 18.8163 9.68641 18.1469 9.01427L17.9998 8.8666L8.3203 18.5847C8.21045 18.695 8.07281 18.7733 7.92211 18.811L1.06504 20.5321C0.761544 20.6084 0.440805 20.5125 0.228253 20.2821C0.0157006 20.0516 -0.0549271 19.7232 0.0440032 19.4253L2.18684 12.971C2.22892 12.8443 2.29981 12.7291 2.3939 12.6347L13.7509 1.2323ZM18.4652 2.44931C17.498 1.47838 15.9302 1.47838 14.9631 2.44931L3.74915 13.708L2.16405 18.4823L7.27602 17.1992L18.4652 5.96535C19.4322 4.99442 19.4322 3.42024 18.4652 2.44931ZM6.79991 24C4.68273 24 3.01569 23.025 1.9058 22.0952L4.1081 21.5424C4.8715 21.972 5.77569 22.2789 6.79991 22.2789C7.49486 22.2789 8.21142 21.9966 8.97565 21.4925C9.74149 20.9872 10.4811 20.3101 11.2279 19.6072L11.4224 19.4239C12.0813 18.8021 12.7665 18.1555 13.4215 17.7083C14.121 17.2307 15.048 16.797 16.0219 17.173C16.6653 17.4216 17.083 17.8802 17.3777 18.4412C17.654 18.9666 17.8443 19.6255 18.0295 20.3416C18.1141 20.669 18.2576 20.9853 18.422 21.1992C18.5021 21.3035 18.5712 21.3626 18.6193 21.3923C18.6617 21.4185 18.6805 21.4185 18.6853 21.4185C18.8943 21.4185 19.2529 21.2765 19.7653 20.9264C20.0832 20.7092 20.3545 20.4919 20.6262 20.2743C20.7948 20.1394 20.9634 20.0041 21.1434 19.869C21.6215 19.5096 22.0359 19.2687 22.3393 19.1146C22.4908 19.0375 22.615 18.9821 22.7055 18.9446C22.7507 18.9258 22.7876 18.9115 22.8154 18.901L22.8502 18.8885L22.8623 18.8842L22.867 18.8826L22.869 18.8819C22.869 18.8819 22.8707 18.8812 23.1426 19.6974L22.8707 18.8812C23.3197 18.7305 23.8053 18.9737 23.9555 19.4244C24.105 19.8733 23.8655 20.3585 23.4203 20.5115L23.4136 20.5141C23.4044 20.5175 23.3864 20.5244 23.3603 20.5352C23.3082 20.5567 23.224 20.5939 23.1131 20.6504C22.8913 20.7629 22.5627 20.9523 22.1705 21.2469C22.07 21.3223 21.9387 21.4269 21.7889 21.5462C21.4781 21.7939 21.0875 22.1049 20.7298 22.3493C20.1968 22.7135 19.4586 23.1396 18.6855 23.1396C17.9388 23.1396 17.3978 22.684 17.0647 22.2505C16.7247 21.8082 16.4967 21.264 16.3702 20.7741C16.1822 20.047 16.0332 19.5707 15.8616 19.2442C15.7085 18.953 15.5702 18.8427 15.4064 18.7794C15.2659 18.7251 14.9858 18.7217 14.3854 19.1315C13.8487 19.4979 13.2639 20.049 12.5716 20.7015L12.4004 20.8629C11.6615 21.5584 10.8226 22.3334 9.91698 22.9308C9.00979 23.5293 7.9621 24 6.79991 24Z",\n fill: "currentColor"\n }\n) }), eO = () => /* @__PURE__ */ c("svg", { viewBox: "0 0 26 26", fill: "none", xmlns: "http://www.w3.org/2000/svg", children: /* @__PURE__ */ c(\n "path",\n {\n fillRule: "evenodd",\n clipRule: "evenodd",\n d: "M24.8278 1.17701C24.7588 1.10466 24.6759 1.04704 24.584 1.00763C24.4918 0.968085 24.3926 0.947693 24.2923 0.947693C24.1919 0.947693 24.0927 0.968085 24.0005 1.00763C23.9085 1.0471 23.8255 1.10482 23.7564 1.1773L1.1778 23.766C1.10533 23.835 1.04715 23.9185 1.00769 24.0104C0.968146 24.1026 0.947754 24.2019 0.947754 24.3022C0.947754 24.4025 0.968146 24.5018 1.00769 24.5939C1.04713 24.6859 1.10479 24.7688 1.1772 24.8379C1.24565 24.9073 1.3275 24.9621 1.41777 24.9989C1.50811 25.0358 1.60501 25.0539 1.70257 25.0522C1.80231 25.0527 1.90114 25.0331 1.99311 24.9945C2.08517 24.9558 2.16845 24.8989 2.23794 24.8272L24.8271 2.23806C24.898 2.16913 24.9546 2.08647 24.9931 1.99538C25.0317 1.90419 25.0515 1.8062 25.0515 1.70719C25.0515 1.60819 25.0317 1.51019 24.9931 1.41901C24.9547 1.32812 24.8985 1.24584 24.8278 1.17701ZM10.3635 12.0325C9.36854 12.6973 8.19883 13.0521 7.00226 13.0521C5.3977 13.0521 3.85885 12.4147 2.72426 11.2801C1.58966 10.1455 0.952255 8.60665 0.952255 7.00209C0.952255 5.80551 1.30708 4.63581 1.97186 3.64089C2.63665 2.64597 3.58153 1.87053 4.68702 1.41262C5.79251 0.954709 7.00897 0.834898 8.18255 1.06834C9.35614 1.30178 10.4341 1.87799 11.2803 2.72409C12.1264 3.5702 12.7026 4.64821 12.936 5.82179C13.1694 6.99538 13.0496 8.21183 12.5917 9.31733C12.1338 10.4228 11.3584 11.3677 10.3635 12.0325ZM9.5301 3.2189C8.78186 2.71894 7.90216 2.45209 7.00226 2.45209C5.79552 2.45209 4.63821 2.93146 3.78492 3.78475C2.93163 4.63804 2.45225 5.79536 2.45225 7.00209C2.45225 7.902 2.71911 8.78169 3.21907 9.52993C3.71903 10.2782 4.42964 10.8614 5.26105 11.2057C6.09245 11.5501 7.0073 11.6402 7.88992 11.4647C8.77253 11.2891 9.58326 10.8558 10.2196 10.2194C10.8559 9.5831 11.2893 8.77237 11.4648 7.88975C11.6404 7.00714 11.5503 6.09228 11.2059 5.26088C10.8615 4.42948 10.2783 3.71886 9.5301 3.2189ZM15.6411 13.9717C16.636 13.3069 17.8057 12.9521 19.0023 12.9521C20.6068 12.9521 22.1457 13.5895 23.2803 14.7241C24.4148 15.8587 25.0523 17.3975 25.0523 19.0021C25.0523 20.1987 24.6974 21.3684 24.0326 22.3633C23.3679 23.3582 22.423 24.1336 21.3175 24.5916C20.212 25.0495 18.9955 25.1693 17.822 24.9358C16.6484 24.7024 15.5704 24.1262 14.7243 23.2801C13.8782 22.434 13.3019 21.356 13.0685 20.1824C12.8351 19.0088 12.9549 17.7923 13.4128 16.6869C13.8707 15.5814 14.6461 14.6365 15.6411 13.9717ZM16.4744 22.7853C17.2227 23.2852 18.1024 23.5521 19.0023 23.5521C20.209 23.5521 21.3663 23.0727 22.2196 22.2194C23.0729 21.3661 23.5523 20.2088 23.5523 19.0021C23.5523 18.1022 23.2854 17.2225 22.7854 16.4742C22.2855 15.726 21.5749 15.1428 20.7435 14.7984C19.9121 14.4541 18.9972 14.364 18.1146 14.5395C17.232 14.7151 16.4213 15.1484 15.7849 15.7848C15.1486 16.4211 14.7152 17.2318 14.5397 18.1144C14.3641 18.997 14.4542 19.9119 14.7986 20.7433C15.143 21.5747 15.7262 22.2853 16.4744 22.7853Z",\n fill: "currentcolor"\n }\n) }), tO = () => /* @__PURE__ */ e1("svg", { viewBox: "0 0 24 24", fill: "none", xmlns: "http://www.w3.org/2000/svg", children: [\n /* @__PURE__ */ c(\n "path",\n {\n fillRule: "evenodd",\n clipRule: "evenodd",\n d: "M20.6369 3.21864C22.7222 5.27018 23.9235 8.05571 23.9846 10.981V11.3518H12.6277V0H12.8228C15.7475 0.0121534 18.5516 1.16709 20.6369 3.21864ZM14.1108 9.87813H22.4138C22.1188 7.77939 21.1491 5.83389 19.6511 4.33532C18.1532 2.83676 16.2085 1.86663 14.1108 1.57149V9.87813Z",\n fill: "currentcolor"\n }\n ),\n /* @__PURE__ */ c(\n "path",\n {\n fillRule: "evenodd",\n clipRule: "evenodd",\n d: "M11.0013 1.66856H11.3721V12.6497H22.3387V12.8351C22.3384 15.036 21.688 17.1879 20.4691 19.0202C19.2502 20.8525 17.5173 22.2835 15.4879 23.1336C13.4586 23.9836 11.2234 24.2147 9.06319 23.7979C6.90292 23.3812 4.91398 22.335 3.34619 20.7908C1.77846 19.2468 0.701777 17.2735 0.251454 15.1192C-0.198869 12.9647 -0.00270911 10.7254 0.815221 8.68216C1.63321 6.63896 3.03647 4.88314 4.84878 3.63527C6.66103 2.3874 8.80152 1.70323 11.0013 1.66856ZM9.8988 14.1233V3.24004C8.11025 3.4799 6.42431 4.21518 5.03136 5.36296C3.63846 6.51075 2.594 8.02516 2.01594 9.73534C1.43788 11.4455 1.34927 13.2833 1.76005 15.0413C2.1709 16.7992 3.06475 18.4073 4.34081 19.6839C5.6168 20.9602 7.22414 21.8546 8.98136 22.2657C10.7385 22.6765 12.5756 22.5878 14.285 22.0095C15.9945 21.4314 17.5084 20.3864 18.6556 18.9928C19.8029 17.5995 20.5379 15.9127 20.7777 14.1233H9.8988Z",\n fill: "currentcolor"\n }\n )\n] }), oO = () => /* @__PURE__ */ e1("svg", { xmlns: "http://www.w3.org/2000/svg", viewBox: "0 0 24 24", fill: "none", children: [\n /* @__PURE__ */ c("path", { fillRule: "evenodd", clipRule: "evenodd", d: "M20.6369 3.21864C22.7222 5.27018 23.9235 8.05571 23.9846 10.981V11.3518H12.6277V0H12.8228C15.7475 0.0121534 18.5516 1.16709 20.6369 3.21864Z", fill: "currentcolor" }),\n /* @__PURE__ */ c("path", { fillRule: "evenodd", clipRule: "evenodd", d: "M11.0013 1.66856H11.3721V12.6497H22.3387V12.8351C22.3384 15.036 21.688 17.1879 20.4691 19.0202C19.2502 20.8525 17.5173 22.2835 15.4879 23.1336C13.4586 23.9836 11.2234 24.2147 9.06319 23.7979C6.90292 23.3812 4.91398 22.335 3.34619 20.7908C1.77846 19.2468 0.701777 17.2735 0.251454 15.1192C-0.198869 12.9647 -0.00270909 10.7254 0.815221 8.68216C1.63321 6.63896 3.03647 4.88314 4.84878 3.63527C6.66103 2.3874 8.80152 1.70323 11.0013 1.66856Z", fill: "currentcolor" })\n] }), rO = () => /* @__PURE__ */ c("svg", { viewBox: "0 0 24 24", fill: "none", xmlns: "http://www.w3.org/2000/svg", children: /* @__PURE__ */ c(\n "path",\n {\n fillRule: "evenodd",\n clipRule: "evenodd",\n d: "M24 12C24 12.5342 23.636 13.023 23.0587 13.2639L2.48727 21.8479C1.95584 22.0696 1.32317 22.0477 0.816049 21.7901C0.30893 21.5324 -8.3383e-07 21.0758 -8.12333e-07 20.584L-6.18951e-08 3.41599C-4.03981e-08 2.9242 0.308931 2.46763 0.81605 2.20994C1.32317 1.95226 1.95584 1.93037 2.48727 2.15212L23.0587 10.7361C23.636 10.977 24 11.4658 24 12ZM22.7962 12L1.43823 3.17091L1.43823 20.6923L22.7962 12Z",\n fill: "currentColor"\n }\n) }), nO = () => /* @__PURE__ */ c("svg", { viewBox: "0 0 24 24", fill: "none", xmlns: "http://www.w3.org/2000/svg", children: /* @__PURE__ */ c(\n "path",\n {\n d: "M0.710526 12.7475H11.2895V23.2918C11.2895 23.6852 11.6053 24 12 24C12.3947 24 12.7105 23.6852 12.7105 23.2918V12.7475H23.2895C23.6842 12.7475 24 12.4328 24 12.0393C24 11.6459 23.6842 11.3311 23.2895 11.3311H12.7895V0.708196C12.7895 0.314754 12.4737 0 12.0789 0C11.6842 0 11.3684 0.314754 11.3684 0.708196V11.2525H0.710526C0.315789 11.2525 0 11.5672 0 11.9607C0 12.3541 0.315789 12.7475 0.710526 12.7475Z",\n fill: "currentColor"\n }\n) }), iO = () => /* @__PURE__ */ c("svg", { viewBox: "0 0 24 24", fill: "none", xmlns: "http://www.w3.org/2000/svg", children: /* @__PURE__ */ c(\n "path",\n {\n fillRule: "evenodd",\n clipRule: "evenodd",\n d: "M0.990251 13.2467L0.990234 13.2454C0.990243 10.1132 2.37607 7.1863 4.7301 5.14507L4.73722 5.13889C5.04656 4.91089 5.53642 4.89407 5.79284 5.23006C6.02498 5.53424 6.04299 6.01601 5.70483 6.26956C3.67721 8.06479 2.52933 10.5891 2.52933 13.2454C2.52933 18.3611 6.78952 22.5507 12.0002 22.5507C17.2108 22.5507 21.471 18.3611 21.471 13.2454C21.471 10.5891 20.3231 8.06478 18.2955 6.26956C17.9573 6.01601 17.9753 5.53424 18.2074 5.23006C18.4639 4.89407 18.9536 4.91119 19.2629 5.13919L19.272 5.14594C21.6241 7.25349 23.01 10.1798 23.01 13.2454C23.01 19.1694 18.0916 24 12.0686 24C5.97741 24 1.05953 19.1699 0.990251 13.2467ZM11.3333 0.724629C11.3333 0.32056 11.6623 0 12.0683 0C12.4743 0 12.8032 0.32056 12.8032 0.724629V8.26374C12.8032 8.66781 12.4743 8.98837 12.0683 8.98837C11.6623 8.98837 11.3333 8.66781 11.3333 8.26374V0.724629Z",\n fill: "currentColor"\n }\n) }), aO = () => /* @__PURE__ */ c("svg", { viewBox: "0 0 24 24", fill: "none", xmlns: "http://www.w3.org/2000/svg", children: /* @__PURE__ */ c(\n "path",\n {\n fillRule: "evenodd",\n clipRule: "evenodd",\n d: "M18.3094 7.13788H23.4111C23.7377 7.13788 24 7.39745 24 7.72239V19.07C24 19.3949 23.7377 19.6545 23.4111 19.6545H18.3094V21.9217C18.3094 22.2467 18.0472 22.5062 17.7205 22.5062H6.27946C5.95284 22.5062 5.69058 22.2467 5.69058 21.9217V19.6545H0.588878C0.262256 19.6545 0 19.3949 0 19.07V7.72239C0 7.39745 0.262256 7.13788 0.588878 7.13788H5.69058V2.0783C5.69058 1.75336 5.95284 1.49379 6.27946 1.49379H17.7205C18.0472 1.49379 18.3094 1.75336 18.3094 2.0783V7.13788ZM6.86837 7.13788H17.1316V2.66279H6.86837V7.13788ZM17.0717 21.3372V16.8621H6.80845V21.3372H17.0717ZM22.8222 8.30688H1.17779V18.4855H5.69058V16.2182C5.69058 15.8933 5.95284 15.6337 6.27946 15.6337H17.7205C18.0472 15.6337 18.3094 15.8933 18.3094 16.2182V18.4855H22.8222V8.30688ZM2.75549 11.9999C2.75549 10.9026 3.67664 9.98957 4.78194 9.98957C5.94812 9.98957 6.80839 10.9036 6.80839 11.9999C6.80839 13.0971 5.88723 14.0102 4.78194 14.0102C3.67664 14.0102 2.75549 13.0971 2.75549 11.9999ZM3.93325 11.9999C3.93325 12.4473 4.32986 12.8412 4.78194 12.8412C5.23402 12.8412 5.63063 12.4473 5.63063 11.9999C5.63063 11.5525 5.23402 11.1585 4.78194 11.1585C4.32986 11.1585 3.93325 11.5525 3.93325 11.9999Z",\n fill: "currentColor"\n }\n) }), sO = () => /* @__PURE__ */ e1("svg", { viewBox: "0 0 24 24", fill: "none", xmlns: "http://www.w3.org/2000/svg", children: [\n /* @__PURE__ */ c(\n "path",\n {\n d: "M14.8044 10.2787C16.0847 9.37269 16.9382 7.92314 16.9382 6.232C16.9382 3.51411 14.7435 1.33977 12 1.33977C9.2566 1.33977 7.06185 3.51411 7.06185 6.232C7.06185 7.92314 7.91536 9.37269 9.19563 10.2787C5.47675 11.1846 2.67235 14.5065 2.67235 18.4927V22.1166C2.67235 22.4186 2.91621 22.6602 3.22103 22.6602H20.779C21.0839 22.6602 21.3277 22.4186 21.3277 22.1166V18.4927C21.3277 14.5669 18.5233 11.1846 14.8044 10.2787ZM8.22018 6.29239C8.22018 4.23887 9.92722 2.54772 12 2.54772C14.0729 2.54772 15.7799 4.23887 15.7799 6.29239C15.7799 8.34591 14.0729 10.0371 12 10.0371C9.92722 10.0371 8.22018 8.34591 8.22018 6.29239ZM3.83069 21.573V18.4927C3.83069 14.4461 7.18377 11.1242 11.2684 11.1242H12.7926C16.8773 11.1242 20.2303 14.4461 20.2303 18.4927V21.573H3.83069Z",\n fill: "currentColor"\n }\n ),\n /* @__PURE__ */ c(\n "path",\n {\n fillRule: "evenodd",\n clipRule: "evenodd",\n d: "M14.8577 10.2405C16.1083 9.33227 16.9382 7.89959 16.9382 6.232C16.9382 3.51411 14.7435 1.33977 12 1.33977C9.2566 1.33977 7.06185 3.51411 7.06185 6.232C7.06185 7.89959 7.89175 9.33227 9.14239 10.2405C9.16005 10.2533 9.1778 10.266 9.19563 10.2787C9.17439 10.2838 9.15318 10.2891 9.132 10.2944C5.44481 11.2226 2.67235 14.5292 2.67235 18.4927V22.1166C2.67235 22.4186 2.91621 22.6602 3.22103 22.6602H20.779C21.0839 22.6602 21.3277 22.4186 21.3277 22.1166V18.4927C21.3277 14.5893 18.5553 11.2233 14.8681 10.2944C14.8469 10.2891 14.8257 10.2838 14.8044 10.2787C14.8223 10.266 14.84 10.2533 14.8577 10.2405ZM14.9203 10.2563C16.164 9.33847 16.988 7.9021 16.988 6.23201C16.988 3.48617 14.7705 1.28998 12 1.28998C9.22954 1.28998 7.01206 3.48617 7.01206 6.23201C7.01206 7.90209 7.83605 9.33846 9.07974 10.2563C5.39159 11.2036 2.62256 14.5196 2.62256 18.4927V22.1166C2.62256 22.4465 2.88915 22.71 3.22103 22.71H20.779C21.1109 22.71 21.3775 22.4465 21.3775 22.1166V18.4927C21.3775 14.5797 18.6087 11.2048 14.9203 10.2563ZM12 2.59751C9.95428 2.59751 8.26997 4.2668 8.26997 6.29239C8.26997 8.31797 9.95428 9.98726 12 9.98726C14.0458 9.98726 15.7301 8.31797 15.7301 6.29239C15.7301 4.2668 14.0458 2.59751 12 2.59751ZM3.88048 21.5232H20.1806V18.4927C20.1806 14.474 16.8502 11.174 12.7926 11.174H11.2684C7.21083 11.174 3.88048 14.474 3.88048 18.4927V21.5232ZM12 2.54772C9.92722 2.54772 8.22018 4.23887 8.22018 6.29239C8.22018 8.34591 9.92722 10.0371 12 10.0371C14.0729 10.0371 15.7799 8.34591 15.7799 6.29239C15.7799 4.23887 14.0729 2.54772 12 2.54772ZM20.2303 21.573V18.4927C20.2303 14.4461 16.8773 11.1242 12.7926 11.1242H11.2684C7.18377 11.1242 3.83069 14.4461 3.83069 18.4927V21.573H20.2303Z",\n fill: "currentColor"\n }\n )\n] }), cO = () => /* @__PURE__ */ e1("svg", { viewBox: "0 0 10 12", fill: "none", xmlns: "http://www.w3.org/2000/svg", children: [\n /* @__PURE__ */ c(\n "path",\n {\n d: "M6.40222 5.13936C7.04235 4.68638 7.46911 3.9616 7.46911 3.11603C7.46911 1.75708 6.37174 0.669915 5.00002 0.669915C3.6283 0.669915 2.53092 1.75708 2.53092 3.11603C2.53092 3.9616 2.95768 4.68638 3.59782 5.13936C1.73837 5.59234 0.336175 7.25327 0.336175 9.2464V11.0583C0.336175 11.2093 0.458103 11.3301 0.610516 11.3301H9.38952C9.54193 11.3301 9.66386 11.2093 9.66386 11.0583V9.2464C9.66386 7.28347 8.26166 5.59234 6.40222 5.13936Z",\n fill: "currentColor"\n }\n ),\n /* @__PURE__ */ c(\n "path",\n {\n fillRule: "evenodd",\n clipRule: "evenodd",\n d: "M6.42884 5.12028C7.05416 4.66617 7.46911 3.94983 7.46911 3.11603C7.46911 1.75708 6.37174 0.669915 5.00002 0.669915C3.6283 0.669915 2.53092 1.75708 2.53092 3.11603C2.53092 3.94982 2.94588 4.66617 3.5712 5.12028C3.58003 5.12669 3.5889 5.13305 3.59782 5.13936C3.5872 5.14195 3.57659 5.14457 3.566 5.14724C1.7224 5.61133 0.336175 7.26465 0.336175 9.2464V11.0583C0.336175 11.2093 0.458103 11.3301 0.610516 11.3301H9.38952C9.54193 11.3301 9.66386 11.2093 9.66386 11.0583V9.2464C9.66386 7.29468 8.27763 5.61167 6.43403 5.14724C6.42344 5.14457 6.41284 5.14195 6.40222 5.13936C6.41113 5.13305 6.42 5.12669 6.42884 5.12028ZM6.46015 5.1282C7.08201 4.66927 7.49401 3.95108 7.49401 3.11603C7.49401 1.74312 6.38527 0.64502 5.00002 0.64502C3.61477 0.64502 2.50603 1.74312 2.50603 3.11603C2.50603 3.95108 2.91802 4.66926 3.53987 5.1282C1.69579 5.60183 0.311279 7.25985 0.311279 9.2464V11.0583C0.311279 11.2233 0.444573 11.355 0.610517 11.355H9.38952C9.55546 11.355 9.68875 11.2233 9.68875 11.0583V9.2464C9.68875 7.28987 8.30434 5.60241 6.46015 5.1282Z",\n fill: "currentColor"\n }\n )\n] }), lO = () => /* @__PURE__ */ e1("svg", { viewBox: "0 0 24 24", fill: "none", xmlns: "http://www.w3.org/2000/svg", children: [\n /* @__PURE__ */ e1("g", { clipPath: "url(#clip0_935_86674)", children: [\n /* @__PURE__ */ c(\n "path",\n {\n fillRule: "evenodd",\n clipRule: "evenodd",\n d: "M14.5311 6.2311C14.5311 7.92251 13.6647 9.3723 12.3651 10.2784C16.1401 11.1845 18.9868 14.5673 18.9868 18.4938V22.1183C18.9868 22.4203 18.7393 22.662 18.4298 22.662H0.606779C0.29735 22.662 0.0497925 22.4203 0.0497925 22.1183V18.4938C0.0497925 14.5069 2.89654 11.1845 6.67157 10.2784C5.37197 9.3723 4.50557 7.92251 4.50557 6.2311C4.50557 3.51276 6.73346 1.33806 9.51831 1.33806C12.3032 1.33806 14.5311 3.51276 14.5311 6.2311ZM9.51831 2.54621C7.4142 2.54621 5.68139 4.23763 5.68139 6.29149C5.68139 8.34535 7.4142 10.0368 9.51831 10.0368C11.6224 10.0368 13.3552 8.34535 13.3552 6.29149C13.3552 4.23763 11.6224 2.54621 9.51831 2.54621ZM1.22564 21.5746H17.8729V18.4938C17.8729 14.4465 14.4692 11.1241 10.3228 11.1241H8.77567C4.62934 11.1241 1.22564 14.4465 1.22564 18.4938V21.5746Z",\n fill: "currentColor"\n }\n ),\n /* @__PURE__ */ c(\n "path",\n {\n d: "M20.9179 7.13734H23.3314C23.6408 7.13734 23.9502 7.37894 23.9502 7.68097C23.9502 7.98299 23.7027 8.22463 23.3933 8.22463H20.9798V10.5805C20.9798 10.8825 20.7322 11.1241 20.4228 11.1241C20.1134 11.1241 19.8659 10.8825 19.8659 10.5805V8.22463H17.4524C17.143 8.22463 16.8954 7.98299 16.8954 7.68097C16.8954 7.37894 17.143 7.13734 17.4524 7.13734H19.804V4.7815C19.804 4.47947 20.0515 4.23787 20.3609 4.23787C20.6704 4.23787 20.9179 4.47947 20.9179 4.7815V7.13734Z",\n fill: "currentColor"\n }\n ),\n /* @__PURE__ */ c(\n "path",\n {\n fillRule: "evenodd",\n clipRule: "evenodd",\n d: "M12.419 10.2403C12.4011 10.2531 12.3831 10.2658 12.3651 10.2784C12.3865 10.2836 12.4079 10.2888 12.4293 10.2941C16.1723 11.223 18.9868 14.5896 18.9868 18.4938V22.1183C18.9868 22.4203 18.7393 22.662 18.4298 22.662H0.606779C0.29735 22.662 0.0497925 22.4203 0.0497925 22.1183V18.4938C0.0497925 14.5296 2.86428 11.2223 6.6073 10.2941C6.62869 10.2888 6.65012 10.2836 6.67157 10.2784C6.65349 10.2658 6.63549 10.2531 6.61757 10.2403C5.34803 9.33191 4.50557 7.89898 4.50557 6.2311C4.50557 3.51276 6.73346 1.33806 9.51831 1.33806C12.3032 1.33806 14.5311 3.51276 14.5311 6.2311C14.5311 7.89898 13.6886 9.33191 12.419 10.2403ZM12.4823 10.2561C13.7444 9.33814 14.5808 7.90163 14.5808 6.2311C14.5808 3.48413 12.3295 1.28827 9.51831 1.28827C6.7071 1.28827 4.45578 3.48413 4.45578 6.2311C4.45578 7.90162 5.29222 9.33813 6.55432 10.256C2.81115 11.2033 0 14.5196 0 18.4938V22.1183C0 22.4489 0.270992 22.7118 0.606779 22.7118H18.4298C18.7656 22.7118 19.0366 22.4489 19.0366 22.1183V18.4938C19.0366 14.5796 16.2257 11.2044 12.4823 10.2561ZM9.51831 2.59601C7.44056 2.59601 5.73118 4.26626 5.73118 6.29149C5.73118 8.31672 7.44056 9.98698 9.51831 9.98698C11.5961 9.98698 13.3054 8.31672 13.3054 6.29149C13.3054 4.26626 11.5961 2.59601 9.51831 2.59601ZM17.8231 21.5248V18.4938C17.8231 14.4751 14.4428 11.1739 10.3228 11.1739H8.77567C4.65569 11.1739 1.27543 14.4751 1.27543 18.4938V21.5248H17.8231ZM20.9677 7.08754H23.3314C23.4985 7.08754 23.6645 7.15257 23.789 7.25787C23.9136 7.36326 24 7.51217 24 7.68097C24 8.01162 23.729 8.27442 23.3933 8.27442H21.0296V10.5805C21.0296 10.9111 20.7586 11.1739 20.4228 11.1739C20.087 11.1739 19.8161 10.9111 19.8161 10.5805V8.27442H17.4524C17.1166 8.27442 16.8457 8.01162 16.8457 7.68097C16.8457 7.35031 17.1166 7.08754 17.4524 7.08754H19.7542V4.7815C19.7542 4.45084 20.0252 4.18808 20.3609 4.18808C20.6967 4.18808 20.9677 4.45084 20.9677 4.7815V7.08754ZM5.68139 6.29149C5.68139 4.23763 7.4142 2.54621 9.51831 2.54621C11.6224 2.54621 13.3552 4.23763 13.3552 6.29149C13.3552 8.34535 11.6224 10.0368 9.51831 10.0368C7.4142 10.0368 5.68139 8.34535 5.68139 6.29149ZM1.22564 21.5746V18.4938C1.22564 14.4465 4.62934 11.1241 8.77567 11.1241H10.3228C14.4692 11.1241 17.8729 14.4465 17.8729 18.4938V21.5746H1.22564ZM20.9179 7.13734V4.7815C20.9179 4.47947 20.6704 4.23787 20.3609 4.23787C20.0515 4.23787 19.804 4.47947 19.804 4.7815V7.13734H17.4524C17.143 7.13734 16.8954 7.37894 16.8954 7.68097C16.8954 7.98299 17.143 8.22463 17.4524 8.22463H19.8659V10.5805C19.8659 10.8825 20.1134 11.1241 20.4228 11.1241C20.7322 11.1241 20.9798 10.8825 20.9798 10.5805V8.22463H23.3933C23.7027 8.22463 23.9502 7.98299 23.9502 7.68097C23.9502 7.37894 23.6408 7.13734 23.3314 7.13734H20.9179Z",\n fill: "currentColor"\n }\n )\n ] }),\n /* @__PURE__ */ c("defs", { children: /* @__PURE__ */ c("clipPath", { id: "clip0_935_86674", children: /* @__PURE__ */ c("rect", { width: "24", height: "24", fill: "currentColor" }) }) })\n] }), pO = () => /* @__PURE__ */ e1("svg", { xmlns: "http://www.w3.org/2000/svg", viewBox: "0 0 24 24", fill: "none", children: [\n /* @__PURE__ */ e1("g", { clipPath: "url(#clip0_5630_95919)", children: [\n /* @__PURE__ */ c(\n "path",\n {\n fillRule: "evenodd",\n clipRule: "evenodd",\n d: "M14.5311 6.23116C14.5311 7.92257 13.6647 9.37236 12.3651 10.2785C16.1401 11.1846 18.9868 14.5674 18.9868 18.4939V22.1183C18.9868 22.4204 18.7393 22.662 18.4298 22.662H0.606779C0.29735 22.662 0.0497925 22.4204 0.0497925 22.1183V18.4939C0.0497925 14.507 2.89654 11.1846 6.67157 10.2785C5.37197 9.37236 4.50557 7.92257 4.50557 6.23116C4.50557 3.51282 6.73346 1.33812 9.51831 1.33812C12.3032 1.33812 14.5311 3.51282 14.5311 6.23116Z",\n fill: "currentColor"\n }\n ),\n /* @__PURE__ */ c(\n "path",\n {\n d: "M20.9179 7.1374H23.3314C23.6408 7.1374 23.9502 7.379 23.9502 7.68103C23.9502 7.98306 23.7027 8.22469 23.3933 8.22469H20.9798V10.5805C20.9798 10.8826 20.7322 11.1242 20.4228 11.1242C20.1134 11.1242 19.8659 10.8826 19.8659 10.5805V8.22469H17.4524C17.143 8.22469 16.8954 7.98306 16.8954 7.68103C16.8954 7.379 17.143 7.1374 17.4524 7.1374H19.804V4.78156C19.804 4.47953 20.0515 4.23793 20.3609 4.23793C20.6704 4.23793 20.9179 4.47953 20.9179 4.78156V7.1374Z",\n fill: "currentColor"\n }\n ),\n /* @__PURE__ */ c(\n "path",\n {\n fillRule: "evenodd",\n clipRule: "evenodd",\n d: "M12.419 10.2403C12.4011 10.2532 12.3831 10.2659 12.3651 10.2785C12.3865 10.2836 12.4079 10.2889 12.4293 10.2942C16.1723 11.223 18.9868 14.5897 18.9868 18.4939V22.1183C18.9868 22.4204 18.7393 22.662 18.4298 22.662H0.606779C0.29735 22.662 0.0497925 22.4204 0.0497925 22.1183V18.4939C0.0497925 14.5296 2.86428 11.2224 6.6073 10.2942C6.62869 10.2889 6.65012 10.2836 6.67157 10.2785C6.65349 10.2659 6.63549 10.2532 6.61757 10.2403C5.34803 9.33197 4.50557 7.89904 4.50557 6.23116C4.50557 3.51282 6.73346 1.33812 9.51831 1.33812C12.3032 1.33812 14.5311 3.51282 14.5311 6.23116C14.5311 7.89904 13.6886 9.33197 12.419 10.2403ZM12.4823 10.2561C13.7444 9.3382 14.5808 7.90169 14.5808 6.23116C14.5808 3.48419 12.3295 1.28833 9.51831 1.28833C6.7071 1.28833 4.45578 3.48419 4.45578 6.23116C4.45578 7.90168 5.29221 9.33819 6.55432 10.2561C2.81115 11.2033 0 14.5196 0 18.4939V22.1183C0 22.449 0.270992 22.7118 0.606779 22.7118H18.4298C18.7656 22.7118 19.0366 22.449 19.0366 22.1183V18.4939C19.0366 14.5797 16.2257 11.2045 12.4823 10.2561ZM20.9677 7.0876H23.3314C23.4985 7.0876 23.6645 7.15263 23.789 7.25794C23.9136 7.36332 24 7.51224 24 7.68103C24 8.01168 23.729 8.27448 23.3933 8.27448H21.0296V10.5805C21.0296 10.9112 20.7586 11.174 20.4228 11.174C20.087 11.174 19.8161 10.9112 19.8161 10.5805V8.27448H17.4524C17.1166 8.27448 16.8457 8.01168 16.8457 7.68103C16.8457 7.35037 17.1166 7.0876 17.4524 7.0876H19.7542V4.78156C19.7542 4.4509 20.0252 4.18814 20.3609 4.18814C20.6967 4.18814 20.9677 4.4509 20.9677 4.78156V7.0876ZM20.9179 7.1374V4.78156C20.9179 4.47953 20.6704 4.23793 20.3609 4.23793C20.0515 4.23793 19.804 4.47953 19.804 4.78156V7.1374H17.4524C17.143 7.1374 16.8954 7.379 16.8954 7.68103C16.8954 7.98306 17.143 8.22469 17.4524 8.22469H19.8659V10.5805C19.8659 10.8826 20.1134 11.1242 20.4228 11.1242C20.7322 11.1242 20.9798 10.8826 20.9798 10.5805V8.22469H23.3933C23.7027 8.22469 23.9502 7.98306 23.9502 7.68103C23.9502 7.379 23.6408 7.1374 23.3314 7.1374H20.9179Z",\n fill: "currentColor"\n }\n )\n ] }),\n /* @__PURE__ */ c("defs", { children: /* @__PURE__ */ c("clipPath", { id: "clip0_5630_95919", children: /* @__PURE__ */ c("rect", { width: "24", height: "24", fill: "white" }) }) })\n] }), dO = () => /* @__PURE__ */ c(\n "svg",\n {\n width: "24",\n height: "24",\n viewBox: "0 0 24 24",\n fill: "none",\n xmlns: "http://www.w3.org/2000/svg",\n children: /* @__PURE__ */ c(\n "path",\n {\n fillRule: "evenodd",\n clipRule: "evenodd",\n d: "M20.0228 1.32873C19.6597 1.31843 19.2982 1.38077 18.9596 1.51223C18.6202 1.64398 18.3106 1.84247 18.0493 2.09589C17.788 2.34932 17.5803 2.65257 17.4384 2.98781C17.2965 3.323 17.2234 3.68325 17.2234 4.04723V6.76704H19.9372C20.6565 6.77586 21.3509 6.49986 21.8673 5.99905C22.3847 5.49736 22.6818 4.81098 22.6932 4.09046C22.7045 3.36995 22.4291 2.67455 21.9278 2.15685C21.4273 1.64003 20.742 1.34248 20.0228 1.32873ZM3.97671 1.32874C3.2575 1.34249 2.57269 1.64003 2.0722 2.15685C1.57087 2.67455 1.2955 3.36995 1.30684 4.09046C1.31818 4.81098 1.6153 5.49736 2.13266 5.99905C2.6491 6.49986 3.34289 6.77586 4.0622 6.76704L6.77652 6.76704V4.04722C6.77657 3.68325 6.70347 3.323 6.5616 2.98781C6.4197 2.65257 6.2119 2.34932 5.9506 2.09589C5.68931 1.84247 5.37979 1.64398 5.04037 1.51223C4.70172 1.38077 4.33975 1.31844 3.97671 1.32874ZM8.10935 17.2324V19.9521C8.10936 20.7525 7.8717 21.535 7.4263 22.2006C6.9809 22.8662 6.34772 23.3852 5.60669 23.6917C4.86565 23.9982 4.05018 24.0785 3.26345 23.9222C2.47671 23.7659 1.75419 23.3802 1.1872 22.814C0.620224 22.2478 0.234232 21.5266 0.0778688 20.7416C-0.0784964 19.9566 0.00175045 19.143 0.30851 18.4035C0.61527 17.664 1.13482 17.0317 1.80164 16.5868C2.46846 16.1419 3.25254 15.9044 4.05472 15.9044H6.77738V8.09564H4.05472C3.25254 8.09565 2.46846 7.85811 1.80164 7.4132C1.13482 6.96829 0.61527 6.33606 0.30851 5.59654C0.00175235 4.85703 -0.0784964 4.0433 0.0778688 3.25831C0.234232 2.47331 0.620224 1.75211 1.1872 1.18593C1.75418 0.61976 2.47669 0.234101 3.26345 0.0778289C4.0502 -0.0784442 4.86567 0.00174282 5.60669 0.308247C6.34772 0.614754 6.9809 1.13371 7.4263 1.79936C7.8717 2.465 8.10936 3.24747 8.10935 4.04782V6.7488L15.8906 6.74879V4.04782C15.8906 3.24747 16.1282 2.465 16.5736 1.79936C17.019 1.13371 17.6522 0.614754 18.3933 0.308247C19.1343 0.00174282 19.9498 -0.0784442 20.7365 0.0778289C21.5233 0.234101 22.2458 0.61976 22.8128 1.18593C23.3798 1.75211 23.7658 2.47331 23.9221 3.25831C24.0785 4.0433 23.9982 4.85703 23.6915 5.59654C23.3847 6.33606 22.8652 6.96829 22.1984 7.4132C21.5315 7.85811 20.7474 8.09565 19.9452 8.09564H17.2226V15.9044H19.9452C20.7474 15.9044 21.5315 16.1419 22.1984 16.5868C22.8652 17.0317 23.3847 17.664 23.6915 18.4035C23.9982 19.143 24.0785 19.9566 23.9221 20.7416C23.7658 21.5266 23.3798 22.2478 22.8128 22.814C22.2458 23.3802 21.5233 23.7659 20.7365 23.9222C19.9498 24.0785 19.1343 23.9982 18.3933 23.6917C17.6522 23.3852 17.019 22.8662 16.5736 22.2006C16.1282 21.535 15.8906 20.7525 15.8906 19.9521V17.2324H8.10935ZM15.8912 15.9038V8.09505H8.10871V15.9038H15.8912ZM19.9459 17.2318H17.2232V19.9517C17.2233 20.4896 17.3832 21.0155 17.6825 21.4626C17.9818 21.9097 18.407 22.258 18.9042 22.4636C19.4014 22.6692 19.9485 22.7229 20.4763 22.6181C21.004 22.5132 21.4889 22.2544 21.8697 21.8743C22.2504 21.4941 22.5098 21.0096 22.615 20.482C22.7201 19.9544 22.6662 19.4075 22.4602 18.9105C22.2541 18.4135 21.9052 17.9889 21.4576 17.6901C21.0102 17.3914 20.484 17.2319 19.9459 17.2318ZM6.77673 17.2318H4.05408C3.51599 17.2319 2.98982 17.3914 2.54234 17.6901C2.09483 17.9889 1.74589 18.4135 1.53983 18.9105C1.33376 19.4075 1.27987 19.9544 1.38501 20.482C1.49016 21.0096 1.74959 21.4941 2.13031 21.8743C2.51103 22.2544 2.99596 22.5132 3.52372 22.6181C4.05148 22.7229 4.59853 22.6692 5.09575 22.4636C5.593 22.258 6.01819 21.9097 6.31746 21.4626C6.61674 21.0155 6.77661 20.4896 6.77673 19.9517V17.2318Z",\n fill: "black"\n }\n )\n }\n), bO = () => /* @__PURE__ */ c("svg", { viewBox: "0 0 24 24", fill: "none", xmlns: "http://www.w3.org/2000/svg", children: /* @__PURE__ */ c(\n "path",\n {\n d: "M22.3334 4.58963C22.7014 4.58963 23 4.28821 23 3.91581C23 3.54342 22.7014 3.242 22.3334 3.242H18.3181C18.3052 3.242 18.2927 3.24514 18.2803 3.24559C18.2585 3.24694 18.2367 3.24874 18.2154 3.25233C18.2056 3.25413 18.1941 3.25323 18.1843 3.25548C18.1772 3.25682 18.1719 3.26132 18.1647 3.26311C18.1012 3.27839 18.0403 3.30175 17.983 3.33544C17.9736 3.34083 17.9665 3.34667 17.9576 3.35251C17.9048 3.3871 17.8559 3.42842 17.8128 3.47918C17.8092 3.48323 17.8052 3.48637 17.8025 3.48996C17.8008 3.49221 17.7985 3.49356 17.7968 3.4958C17.7554 3.54836 17.7261 3.60631 17.7025 3.66561C17.6981 3.67684 17.6932 3.68762 17.6897 3.69974C17.6674 3.76533 17.6563 3.83226 17.6545 3.90009C17.6545 3.90548 17.6519 3.90998 17.6519 3.91581L17.6523 7.96363C17.6523 8.33603 17.951 8.63745 18.319 8.63745C18.6869 8.63745 18.9856 8.33558 18.9856 7.96363L18.9851 5.47681C20.6108 7.26242 21.5112 9.55833 21.5112 11.9998C21.5112 17.322 17.227 21.6519 11.962 21.6519C11.0501 21.6519 10.1483 21.5221 9.28172 21.267C8.92885 21.1623 8.55821 21.368 8.4551 21.7247C8.352 22.0823 8.55465 22.4565 8.90841 22.5602C9.89635 22.8518 10.9238 23 11.9624 23C17.963 23 22.8449 18.0654 22.8449 12.0002C22.8449 9.23175 21.8392 6.6205 20.0037 4.59008H22.3334V4.58963ZM5.68194 15.3617C5.31352 15.3617 5.01531 15.6635 5.01531 16.0355L5.01576 18.6094C3.33941 16.8126 2.41191 14.4803 2.41191 11.9998C2.41191 6.67755 6.69566 2.34763 11.9611 2.34763C12.8731 2.34763 13.7748 2.47745 14.641 2.73305C14.9934 2.83771 15.3649 2.63242 15.4676 2.27485C15.5707 1.91773 15.368 1.54354 15.0147 1.43933C14.0263 1.14779 12.9993 1 11.9607 1C5.96014 1 1.07822 5.93456 1.07822 11.9998C1.07822 14.7682 2.08393 17.3799 3.91893 19.4099H1.66663C1.2982 19.4099 1 19.7118 1 20.0837C1 20.4557 1.2982 20.7576 1.66663 20.7576H5.68194C6.05036 20.7576 6.34856 20.4557 6.34856 20.0837L6.34812 16.0355C6.34856 15.6635 6.04992 15.3617 5.68194 15.3617Z",\n fill: "currentcolor"\n }\n) }), MO = () => /* @__PURE__ */ e1("svg", { xmlns: "http://www.w3.org/2000/svg", viewBox: "0 0 24 24", fill: "none", children: [\n /* @__PURE__ */ c(\n "path",\n {\n d: "M6.6 15.6C6.4 15.4 6.2 15.3 5.9 15.3C5.4 15.3 4.9 15.7 4.9 16.3V18.1C3.6 16.4 2.9 14.4 2.9 12.3C2.9 7.1 7.1 2.9 12.2 2.9C13.1 2.9 13.1 2.9 13.6 3C13.7 3 13.8 3 13.9 3C14.3 3 14.7 2.7 14.8 2.3C14.9 1.8 14.7 1.2 14.2 1.1C13.3 1 13.3 1 12.2 1C6.1 1 1.1 6.1 1.1 12.3C1.1 14.9 2 17.4 3.6 19.4H2C1.5 19.4 1 19.8 1 20.4C1 21 1.4 21.4 2 21.4H6C6.5 21.4 7 21 7 20.4V16.4C6.9 16.1 6.8 15.8 6.6 15.6Z",\n fill: "currentcolor"\n }\n ),\n /* @__PURE__ */ c(\n "path",\n {\n d: "M22.6 5.2C23.1 5.2 23.6 4.8 23.6 4.2C23.6 3.6 23.2 3.2 22.6 3.2H18.3C18.2 3.2 18.1 3.3 18 3.3C17.9 3.4 17.9 3.4 17.8 3.5C17.7 3.6 17.7 3.6 17.6 3.8C17.5822 3.83567 17.5 4 17.5 4.1V8.1C17.5 8.6 17.9 9.1 18.5 9.1C19 9.1 19.4 8.7 19.4 8.1V6.5C20.7 8.1 21.4 10.2 21.4 12.2C21.4 17.4 17.2 21.6 12.1 21.6C11.2 21.6 11.2 21.6 10.5 21.5C10.4 21.5 10.3 21.5 10.2 21.5C9.8 21.5 9.4 21.8 9.3 22.2C9.2 22.7 9.4 23.3 9.9 23.4C10.8 23.6 10.9 23.6 12 23.6C18.2 23.6 23.2 18.5 23.2 12.3C23.2 9.7 22.3 7.2 20.7 5.2H22.6Z",\n fill: "currentcolor"\n }\n )\n] }), AO = () => /* @__PURE__ */ c("svg", { viewBox: "0 0 24 24", fill: "none", xmlns: "http://www.w3.org/2000/svg", children: /* @__PURE__ */ c(\n "path",\n {\n fillRule: "evenodd",\n clipRule: "evenodd",\n d: "M3.36906 6.95498L7.80975 5.88657C8.13925 5.8073 8.47062 6.01014 8.5499 6.33964C8.62917 6.66913 8.42633 7.00051 8.09683 7.07978L2.19372 8.50005C1.7511 8.60654 1.32444 8.27366 1.32009 7.81842L1.26346 1.89297C1.26022 1.55408 1.53231 1.27674 1.8712 1.2735C2.21008 1.27026 2.48742 1.54235 2.49066 1.88124L2.52987 5.98346C5.69861 1.12513 12.1519 -0.459927 17.2359 2.4753C22.4962 5.51235 24.2985 12.2387 21.2615 17.4991C18.2244 22.7594 11.4981 24.5617 6.23772 21.5247C5.94422 21.3552 5.84367 20.9799 6.01312 20.6864C6.18257 20.3929 6.55786 20.2924 6.85135 20.4618C11.5247 23.16 17.5005 21.5588 20.1987 16.8854C22.8968 12.2121 21.2956 6.2363 16.6223 3.53814C12.0025 0.870916 6.10999 2.40503 3.36906 6.95498Z",\n fill: "currentcolor"\n }\n) }), uO = () => /* @__PURE__ */ e1(\n "svg",\n {\n xmlns: "http://www.w3.org/2000/svg",\n width: "14",\n height: "15",\n viewBox: "0 0 14 15",\n fill: "none",\n children: [\n /* @__PURE__ */ c(\n "path",\n {\n d: "M1.37248 3.88264L4.2681 3.18597C4.48293 3.13428 4.69898 3.26654 4.75067 3.48136C4.80235 3.69619 4.6701 3.91224 4.45528 3.96393L0.606536 4.88992C0.317952 4.95935 0.0397803 4.74231 0.0369435 4.44551L1.86599e-05 0.582202C-0.00209312 0.361255 0.175308 0.18043 0.396255 0.178318C0.617202 0.176206 0.798027 0.353608 0.800139 0.574555L0.825698 3.24868C2.89178 0.0814929 7.09899 -0.951745 10.4135 0.96188C13.8431 2.942 15.0182 7.32749 13.0381 10.7572C11.058 14.1868 6.67251 15.3619 3.24285 13.3818C3.05149 13.2713 2.98593 13.0266 3.09641 12.8353C3.20689 12.6439 3.45157 12.5784 3.64293 12.6888C6.68988 14.448 10.586 13.404 12.3452 10.3571C14.1043 7.31012 13.0604 3.414 10.0134 1.65484C7.00137 -0.0841658 3.1595 0.916084 1.37248 3.88264Z",\n fill: "currentcolor"\n }\n ),\n /* @__PURE__ */ c(\n "path",\n {\n d: "M10.3396 6.82481H7.17945V3.66472C7.17945 3.48099 7.03246 3.33401 6.84873 3.33401C6.66501 3.33401 6.51803 3.48099 6.51803 3.66472V7.19227C6.51803 7.37599 6.66501 7.52297 6.84873 7.52297H10.3763C10.56 7.52297 10.707 7.37599 10.707 7.19227C10.707 7.00854 10.5233 6.82481 10.3396 6.82481Z",\n fill: "currentcolor"\n }\n )\n ]\n }\n), zO = () => /* @__PURE__ */ e1("svg", { viewBox: "0 0 25 25", fill: "none", xmlns: "http://www.w3.org/2000/svg", children: [\n /* @__PURE__ */ c(\n "path",\n {\n fillRule: "evenodd",\n clipRule: "evenodd",\n d: "M1.98981 24.781C1.44254 24.781 0.998893 24.3373 0.998893 23.7901V1.98992C0.998893 1.44265 1.44254 0.999 1.98981 0.999H23.79C24.3372 0.999 24.7809 1.44265 24.7809 1.98992V23.7901C24.7809 24.3373 24.3372 24.781 23.79 24.781H1.98981ZM1.98981 7.93542V1.98992H23.79V7.93542H1.98981ZM1.98981 8.92633H23.79V15.8627H1.98981V8.92633ZM1.98981 23.7901V16.8537H23.79V23.7901H1.98981Z",\n fill: "currentColor"\n }\n ),\n /* @__PURE__ */ c(\n "path",\n {\n fillRule: "evenodd",\n clipRule: "evenodd",\n d: "M1.98981 24.89C1.38234 24.89 0.889893 24.3975 0.889893 23.7901V1.98992C0.889893 1.38245 1.38234 0.889999 1.98981 0.889999H23.79C24.3974 0.889999 24.8899 1.38245 24.8899 1.98992V23.7901C24.8899 24.3975 24.3974 24.89 23.79 24.89H1.98981ZM1.98981 7.93542V1.98992H23.79V7.93542H1.98981ZM23.681 7.82642V2.09892H2.09881V7.82642H23.681ZM1.98981 8.92633H23.79V15.8627H1.98981V8.92633ZM2.09881 15.7537H23.681V9.03533H2.09881V15.7537ZM1.98981 23.7901V16.8537H23.79V23.7901H1.98981ZM23.681 23.6811V16.9627H2.09881V23.6811H23.681ZM0.998893 23.7901C0.998893 24.3373 1.44254 24.781 1.98981 24.781H23.79C24.3372 24.781 24.7809 24.3373 24.7809 23.7901V1.98992C24.7809 1.44265 24.3372 0.999 23.79 0.999H1.98981C1.44254 0.999 0.998893 1.44265 0.998893 1.98992V23.7901Z",\n fill: "currentColor"\n }\n )\n] }), hO = () => /* @__PURE__ */ e1("svg", { viewBox: "0 0 24 24", fill: "none", xmlns: "http://www.w3.org/2000/svg", children: [\n /* @__PURE__ */ c(\n "path",\n {\n d: "M24 4.9V1.2C24 0.500001 23.5 9.74764e-07 22.8 9.44166e-07L1.2 0C0.600002 -2.62268e-08 9.74764e-07 0.5 9.44166e-07 1.2L7.78063e-07 5C7.51836e-07 5.6 0.500001 6.2 1.2 6.2L22.8 6.2C23.5 6.1 24 5.6 24 4.9Z",\n fill: "currentColor"\n }\n ),\n /* @__PURE__ */ c(\n "path",\n {\n d: "M24 13.9V10.1C24 9.5 23.5 9 22.8 9L1.2 9C0.600001 9 5.81362e-07 9.5 5.50764e-07 10.2L3.8466e-07 14C3.58433e-07 14.6 0.500001 15.2 1.2 15.2L22.8 15.2C23.5 15 24 14.5 24 13.9Z",\n fill: "currentColor"\n }\n ),\n /* @__PURE__ */ c(\n "path",\n {\n d: "M24 22.8V19C24 18.4 23.5 17.8 22.8 17.8H1.2C0.600001 17.8 1.96701e-07 18.3 1.66103e-07 19L0 22.8C-2.62268e-08 23.4 0.500001 24 1.2 24H22.8C23.5 24 24 23.5 24 22.8Z",\n fill: "currentColor"\n }\n )\n] }), OO = () => /* @__PURE__ */ e1("svg", { viewBox: "0 0 24 24", fill: "none", xmlns: "http://www.w3.org/2000/svg", children: [\n /* @__PURE__ */ c(\n "path",\n {\n fillRule: "evenodd",\n clipRule: "evenodd",\n d: "M10.0212 13.3371C10.607 12.9458 11.2956 12.7369 12 12.7369C12.9446 12.7369 13.8506 13.1121 14.5185 13.7801C15.1865 14.448 15.5617 15.3539 15.5617 16.2986C15.5617 17.003 15.3528 17.6916 14.9615 18.2773C14.5701 18.8631 14.0138 19.3196 13.363 19.5891C12.7122 19.8587 11.9961 19.9293 11.3052 19.7918C10.6143 19.6544 9.97964 19.3152 9.48152 18.8171C8.98341 18.319 8.64419 17.6843 8.50676 16.9934C8.36933 16.3025 8.43987 15.5864 8.70944 14.9356C8.97902 14.2848 9.43553 13.7285 10.0212 13.3371ZM10.5671 18.4431C10.9913 18.7265 11.4899 18.8777 12 18.8777C12.3399 18.8818 12.6771 18.8179 12.9919 18.6898C13.3066 18.5616 13.5926 18.3718 13.8329 18.1315C14.0733 17.8912 14.2631 17.6052 14.3912 17.2904C14.5194 16.9756 14.5833 16.6384 14.5792 16.2986C14.5792 15.7885 14.4279 15.2898 14.1445 14.8657C13.8611 14.4415 13.4583 14.111 12.987 13.9157C12.5157 13.7205 11.9972 13.6695 11.4968 13.769C10.9965 13.8685 10.537 14.1141 10.1763 14.4748C9.81558 14.8355 9.56994 15.2951 9.47042 15.7954C9.3709 16.2957 9.42198 16.8143 9.61719 17.2856C9.8124 17.7568 10.143 18.1597 10.5671 18.4431Z",\n fill: "currentcolor"\n }\n ),\n /* @__PURE__ */ c(\n "path",\n {\n fillRule: "evenodd",\n clipRule: "evenodd",\n d: "M18.4479 0.14817C18.5762 0.153233 18.6974 0.20834 18.7856 0.301691L23.6983 5.21437C23.7917 5.30256 23.8468 5.42379 23.8518 5.55211V22.1324C23.8439 22.5859 23.6602 23.0187 23.3395 23.3395C23.0187 23.6603 22.5859 23.8439 22.1324 23.8518H1.86761C1.41405 23.8439 0.981271 23.6603 0.660508 23.3395C0.339746 23.0187 0.15606 22.5859 0.14817 22.1324V1.86761C0.15606 1.41405 0.339746 0.981272 0.660508 0.66051C0.981271 0.339747 1.41405 0.15606 1.86761 0.14817H18.4479ZM5.93387 1.1307C5.82477 1.1307 5.73634 1.21914 5.73634 1.32824V8.54782C5.73634 8.65691 5.82477 8.74535 5.93387 8.74535H16.838C16.9471 8.74535 17.0355 8.65691 17.0355 8.54782V1.32824C17.0355 1.21914 16.9471 1.1307 16.838 1.1307H5.93387ZM22.8693 22.1324V5.84886C22.8693 5.79647 22.8485 5.74623 22.8114 5.70919L18.3552 1.25298C18.2308 1.12854 18.018 1.21668 18.018 1.39266V9.23662C18.018 9.36691 17.9663 9.49187 17.8741 9.584C17.782 9.67613 17.6571 9.72789 17.5268 9.72789H5.24507C5.11478 9.72789 4.98982 9.67613 4.89769 9.584C4.80556 9.49187 4.7538 9.36691 4.7538 9.23662V1.32824C4.7538 1.21914 4.66537 1.1307 4.55627 1.1307H1.86761C1.76968 1.12635 1.67191 1.14242 1.58053 1.17791C1.48915 1.2134 1.40617 1.26753 1.33685 1.33685C1.26753 1.40616 1.21341 1.48915 1.17792 1.58053C1.14243 1.67191 1.12635 1.76968 1.1307 1.86761V22.1324C1.12635 22.2303 1.14243 22.3281 1.17792 22.4195C1.21341 22.5108 1.26753 22.5938 1.33685 22.6632C1.40617 22.7325 1.48915 22.7866 1.58053 22.8221C1.67191 22.8576 1.76968 22.8737 1.86761 22.8693H22.1324C22.2303 22.8737 22.3281 22.8576 22.4195 22.8221C22.5108 22.7866 22.5938 22.7325 22.6631 22.6632C22.7325 22.5938 22.7866 22.5108 22.8221 22.4195C22.8576 22.3281 22.8737 22.2303 22.8693 22.1324Z",\n fill: "currentcolor"\n }\n ),\n /* @__PURE__ */ c(\n "path",\n {\n fillRule: "evenodd",\n clipRule: "evenodd",\n d: "M18.4479 0.14817C18.5762 0.153233 18.6974 0.20834 18.7856 0.301691L23.6983 5.21437C23.7917 5.30256 23.8468 5.42379 23.8518 5.55211V22.1324C23.8439 22.5859 23.6602 23.0187 23.3395 23.3395C23.0187 23.6603 22.5859 23.8439 22.1324 23.8518H1.86761C1.41405 23.8439 0.981271 23.6603 0.660508 23.3395C0.339746 23.0187 0.15606 22.5859 0.14817 22.1324V1.86761C0.15606 1.41405 0.339746 0.981272 0.660508 0.66051C0.981271 0.339747 1.41405 0.15606 1.86761 0.14817H18.4479ZM23.8017 5.10821C23.9222 5.22287 23.9933 5.38 23.9999 5.54627L24.0001 5.55211L24 22.135C23.9914 22.6269 23.7922 23.0963 23.4442 23.4442C23.0963 23.7922 22.6269 23.9914 22.135 24L22.1324 24L1.86503 24C1.37308 23.9914 0.903667 23.7922 0.555752 23.4442C0.207837 23.0963 0.00860242 22.6269 4.48285e-05 22.135L0 22.1324L2.24142e-05 1.86503C0.00858001 1.37308 0.207837 0.903668 0.555752 0.555753C0.903667 0.207838 1.37308 0.00860242 1.86503 4.48285e-05L1.86761 0L18.4537 2.24142e-05C18.62 0.00658211 18.7771 0.0778192 18.8918 0.198348L23.8017 5.10821ZM22.7211 22.1324V5.84886C22.7211 5.83577 22.7159 5.8232 22.7067 5.81394L18.2505 1.35774C18.2194 1.32663 18.1662 1.34866 18.1662 1.39266V9.23662C18.1662 9.4062 18.0988 9.56884 17.9789 9.68875C17.859 9.80867 17.6963 9.87603 17.5268 9.87603H5.24507C5.07549 9.87603 4.91285 9.80867 4.79293 9.68875C4.67302 9.56884 4.60565 9.4062 4.60565 9.23662V1.32824C4.60565 1.30096 4.58355 1.27885 4.55627 1.27885H1.86101C1.78363 1.27541 1.70637 1.28797 1.63417 1.31601C1.56196 1.34406 1.49638 1.38683 1.4416 1.4416C1.38683 1.49638 1.34406 1.56196 1.31601 1.63417C1.28797 1.70638 1.27526 1.78363 1.27871 1.86102L1.279 1.86761L1.27885 22.139C1.27541 22.2164 1.28797 22.2936 1.31601 22.3658C1.34406 22.438 1.38683 22.5036 1.4416 22.5584C1.49638 22.6132 1.56196 22.6559 1.63416 22.684L1.58053 22.8221C1.48915 22.7866 1.40617 22.7325 1.33685 22.6632C1.26753 22.5938 1.21341 22.5108 1.17792 22.4195C1.14243 22.3281 1.12635 22.2303 1.1307 22.1324V1.86761C1.12635 1.76968 1.14243 1.67191 1.17792 1.58053C1.21341 1.48915 1.26753 1.40616 1.33685 1.33685C1.40617 1.26753 1.48915 1.2134 1.58053 1.17791C1.67191 1.14242 1.76968 1.12635 1.86761 1.1307H4.55627C4.66537 1.1307 4.7538 1.21914 4.7538 1.32824V9.23662C4.7538 9.36691 4.80556 9.49187 4.89769 9.584C4.98982 9.67613 5.11478 9.72789 5.24507 9.72789H17.5268C17.6571 9.72789 17.782 9.67613 17.8741 9.584C17.9663 9.49187 18.018 9.36691 18.018 9.23662V1.39266C18.018 1.21668 18.2308 1.12854 18.3552 1.25298L22.8114 5.70919C22.8485 5.74623 22.8693 5.79647 22.8693 5.84886V22.1324C22.8737 22.2303 22.8576 22.3281 22.8221 22.4195C22.7866 22.5108 22.7325 22.5938 22.6631 22.6632C22.5938 22.7325 22.5108 22.7866 22.4195 22.8221C22.3281 22.8576 22.2303 22.8737 22.1324 22.8693H1.86761C1.76968 22.8737 1.67191 22.8576 1.58053 22.8221L1.63416 22.684C1.70637 22.712 1.78363 22.7247 1.86102 22.7213L1.86761 22.721L22.139 22.7211C22.2164 22.7246 22.2936 22.712 22.3658 22.684C22.438 22.6559 22.5036 22.6132 22.5584 22.5584C22.6132 22.5036 22.6559 22.438 22.684 22.3658C22.712 22.2936 22.7247 22.2164 22.7213 22.139L22.7211 22.1324ZM12 18.7296H12.0018C12.3219 18.7335 12.6395 18.6733 12.936 18.5526C13.2325 18.4319 13.5018 18.2531 13.7282 18.0267C13.9545 17.8004 14.1333 17.531 14.254 17.2346C14.3747 16.9381 14.4349 16.6204 14.431 16.3004L14.431 16.2986C14.431 15.8178 14.2884 15.3478 14.0213 14.948C13.7542 14.5482 13.3745 14.2366 12.9303 14.0526C12.4861 13.8686 11.9973 13.8205 11.5258 13.9143C11.0542 14.0081 10.621 14.2396 10.281 14.5796C9.94106 14.9196 9.70952 15.3527 9.61572 15.8243C9.52192 16.2959 9.57006 16.7847 9.75406 17.2289C9.93806 17.6731 10.2496 18.0528 10.6494 18.3199C11.0492 18.587 11.5192 18.7296 12 18.7296ZM5.93387 8.5972H16.838C16.8652 8.5972 16.8873 8.5751 16.8873 8.54782V1.32824C16.8873 1.30096 16.8652 1.27885 16.838 1.27885H5.93387C5.90659 1.27885 5.88448 1.30096 5.88448 1.32824V8.54782C5.88448 8.5751 5.90659 8.5972 5.93387 8.5972ZM9.93894 13.214C10.549 12.8063 11.2663 12.5887 12 12.5887C12.9839 12.5887 13.9275 12.9796 14.6233 13.6753C15.319 14.371 15.7099 15.3147 15.7099 16.2986C15.7099 17.0323 15.4923 17.7496 15.0846 18.3596C14.677 18.9697 14.0976 19.4452 13.4197 19.726C12.7418 20.0068 11.9959 20.0803 11.2763 19.9371C10.5566 19.794 9.8956 19.4407 9.37677 18.9218C8.85794 18.403 8.50461 17.742 8.36146 17.0223C8.21832 16.3027 8.29179 15.5568 8.57257 14.8789C8.85336 14.201 9.32886 13.6216 9.93894 13.214ZM5.73634 1.32824C5.73634 1.21914 5.82477 1.1307 5.93387 1.1307H16.838C16.9471 1.1307 17.0355 1.21914 17.0355 1.32824V8.54782C17.0355 8.65691 16.9471 8.74535 16.838 8.74535H5.93387C5.82477 8.74535 5.73634 8.65691 5.73634 8.54782V1.32824ZM12 12.7369C11.2956 12.7369 10.607 12.9458 10.0212 13.3371C9.43553 13.7285 8.97902 14.2848 8.70944 14.9356C8.43987 15.5864 8.36933 16.3025 8.50676 16.9934C8.64419 17.6843 8.98341 18.319 9.48152 18.8171C9.97964 19.3152 10.6143 19.6544 11.3052 19.7918C11.9961 19.9293 12.7122 19.8587 13.363 19.5891C14.0138 19.3196 14.5701 18.8631 14.9615 18.2773C15.3528 17.6916 15.5617 17.003 15.5617 16.2986C15.5617 15.3539 15.1865 14.448 14.5185 13.7801C13.8506 13.1121 12.9446 12.7369 12 12.7369ZM12 18.8777C11.4899 18.8777 10.9913 18.7265 10.5671 18.4431C10.143 18.1597 9.8124 17.7568 9.61719 17.2856C9.42198 16.8143 9.3709 16.2957 9.47042 15.7954C9.56994 15.2951 9.81558 14.8355 10.1763 14.4748C10.537 14.1141 10.9965 13.8685 11.4968 13.769C11.9972 13.6695 12.5157 13.7205 12.987 13.9157C13.4583 14.111 13.8611 14.4415 14.1445 14.8657C14.4279 15.2898 14.5792 15.7885 14.5792 16.2986C14.5833 16.6384 14.5194 16.9756 14.3912 17.2904C14.2631 17.6052 14.0733 17.8912 13.8329 18.1315C13.5926 18.3718 13.3066 18.5616 12.9919 18.6898C12.6771 18.8179 12.3399 18.8818 12 18.8777Z",\n fill: "currentcolor"\n }\n )\n] }), fO = () => /* @__PURE__ */ c("svg", { xmlns: "http://www.w3.org/2000/svg", viewBox: "0 0 25 24", fill: "none", children: /* @__PURE__ */ c(\n "path",\n {\n fillRule: "evenodd",\n clipRule: "evenodd",\n d: "M23.8 5.1L18.9 0.2C18.8 0.1 18.6 0 18.5 0H1.9C1.4 0 0.9 0.2 0.6 0.6C0.2 0.9 0 1.4 0 1.9V22.2C0 22.7 0.2 23.2 0.6 23.5C0.9 23.8 1.4 24 1.9 24H22.2C22.7 24 23.2 23.8 23.5 23.4C23.8 23.1 24 22.6 24.1 22.1V5.6C24 5.4 23.9 5.2 23.8 5.1ZM14.4 17.3C14.3 17.6 14.1 17.9 13.8 18.1C13.5 18.3 13.3 18.5 13 18.7C12.7 18.8 12.4 18.9 12 18.9C11.5 18.9 11 18.8 10.6 18.5C10.2 18.2 9.8 17.8 9.6 17.3C9.4 16.8 9.4 16.3 9.4 15.8C9.5 15.3 9.8 14.8 10.1 14.5C10.4 14.2 10.9 13.9 11.4 13.8C11.9 13.7 12.4 13.8 12.9 13.9C13.4 14.1 13.8 14.4 14.1 14.9C14.4 15.3 14.5 15.8 14.5 16.3C14.6 16.6 14.5 17 14.4 17.3ZM17 8.6C17 8.7 16.9 8.8 16.8 8.8H5.8L5.7 8.7V1.3C5.7 1.2 5.8 1.1 5.9 1.1H16.8C17 1.1 17 1.2 17 1.3V8.6Z",\n fill: "currentcolor"\n }\n) }), gO = () => /* @__PURE__ */ c("svg", { viewBox: "0 0 26 26", fill: "none", xmlns: "http://www.w3.org/2000/svg", children: /* @__PURE__ */ c(\n "path",\n {\n fillRule: "evenodd",\n clipRule: "evenodd",\n d: "M8.54301 4.75879C8.54301 6.84568 6.84838 8.54031 4.76149 8.54031C2.6746 8.54031 0.97998 6.84568 0.97998 4.75879C0.97998 2.6719 2.6746 0.97728 4.76149 0.97728C6.84838 0.97728 8.54301 2.6719 8.54301 4.75879ZM1.02029 17.4597H8.58332V25.0227H1.02029V17.4597ZM21.1984 25.0227C23.2853 25.0227 24.98 23.3281 24.98 21.2412C24.98 19.1538 23.2853 17.4597 21.1984 17.4597C19.1116 17.4597 17.4169 19.1538 17.4169 21.2412C17.4169 23.3281 19.1116 25.0227 21.1984 25.0227ZM21.2414 0.979721L25.0204 4.75871L21.2414 8.5377L17.4624 4.75871L21.2414 0.979721ZM12.9109 19.253L12.8882 19.2505L12.865 19.2495L12.8423 19.249L12.8191 19.25L12.7964 19.2515L12.7733 19.2546L12.7506 19.2586L12.7279 19.2636L12.7052 19.2702L12.683 19.2772L12.6608 19.2858L12.6391 19.2954L12.6175 19.3065L12.5963 19.3181L12.5756 19.3312L10.5054 20.7056L10.4857 20.7193L10.4675 20.7339L10.4499 20.749L10.4333 20.7651L10.4196 20.7798L10.4186 20.7803L10.401 20.7898L10.3838 20.7999L10.3672 20.811L10.3511 20.8221L10.3354 20.8342L10.3198 20.8468L10.3052 20.8599L10.2911 20.8735L10.2775 20.8882L10.2639 20.9028L10.2512 20.9179L10.2396 20.934L10.2281 20.9502L10.217 20.9668L10.2069 20.984L10.1973 21.0016L10.1887 21.0193L10.1807 21.0374L10.1731 21.0566L10.166 21.0752L10.16 21.0949L10.1549 21.1146L10.1504 21.1342L10.1469 21.1549L10.1439 21.1751L10.1418 21.1962L10.1403 21.2169L10.1398 21.2386L10.1403 21.2598L10.1418 21.2804L10.1439 21.3016L10.1469 21.3218L10.1504 21.3425L10.1549 21.3621L10.16 21.3818L10.166 21.4014L10.1731 21.4206L10.1807 21.4393L10.1887 21.4574L10.1973 21.4751L10.2069 21.4927L10.217 21.5098L10.2281 21.5265L10.2396 21.5426L10.2512 21.5588L10.2639 21.5739L10.2775 21.5885L10.2911 21.6031L10.3052 21.6167L10.3198 21.6298L10.3354 21.6425L10.3511 21.6546L10.3672 21.6661L10.3838 21.6767L10.401 21.6868L10.4121 21.6929L10.4176 21.6999L10.4333 21.7166L10.4499 21.7327L10.4675 21.7478L10.4857 21.7625L10.5054 21.7761L12.5756 23.1505L12.5963 23.1636L12.6175 23.1752L12.6391 23.1863L12.6608 23.1959L12.683 23.2045L12.7052 23.2115L12.7279 23.2181L12.7506 23.2231L12.7733 23.2272L12.7964 23.2302L12.8191 23.2317L12.8423 23.2327H12.865L12.8882 23.2312L12.9109 23.2287L12.9336 23.2251L12.9563 23.2206L12.9785 23.2151L13.0001 23.2085L13.0218 23.2009L13.0435 23.1924L13.0642 23.1828L13.0849 23.1722L13.105 23.1606L13.1247 23.148L13.1433 23.1344L13.162 23.1198L13.1801 23.1046L13.1973 23.088L13.2134 23.0704L13.2296 23.0522L13.2447 23.0325L13.3117 22.9418L13.3254 22.9226L13.3375 22.9025L13.3491 22.8823L13.3591 22.8616L13.3677 22.8404L13.3758 22.8193L13.3823 22.7976L13.3879 22.7759L13.3924 22.7542L13.3954 22.732L13.3975 22.7098L13.3985 22.6877V22.6655L13.3975 22.6438L13.3954 22.6216L13.3919 22.5999L13.3879 22.5783L13.3823 22.5571L13.3758 22.5359L13.3682 22.5152L13.3596 22.4946L13.3501 22.4744L13.3395 22.4547L13.3279 22.4361L13.3153 22.4174L13.3017 22.3993L13.287 22.3821L13.2714 22.365L13.2553 22.3493L13.2376 22.3337L13.219 22.3196L13.1998 22.306L12.3684 21.7539H15.6749L15.6961 21.7534L15.7168 21.7524L15.738 21.7504L15.7581 21.7473L15.7788 21.7433L15.7985 21.7388L15.8181 21.7337L15.8378 21.7277L15.8569 21.7211L15.8756 21.7135L15.8938 21.7055L15.9119 21.6964L15.929 21.6868L15.9462 21.6767L15.9628 21.6661L15.9795 21.6546L15.9951 21.6425L16.0102 21.6298L16.0248 21.6167L16.0395 21.6031L16.0531 21.5885L16.0662 21.5739L16.0788 21.5588L16.0909 21.5426L16.1025 21.5265L16.1131 21.5098L16.1232 21.4927L16.1327 21.4751L16.1418 21.4574L16.1499 21.4393L16.1575 21.4206L16.164 21.4014L16.1701 21.3818L16.1751 21.3621L16.1796 21.3425L16.1837 21.3218L16.1867 21.3016L16.1887 21.2804L16.1897 21.2598L16.1902 21.2386L16.1897 21.2169L16.1887 21.1962L16.1867 21.1751L16.1837 21.1549L16.1796 21.1342L16.1751 21.1146L16.1701 21.0949L16.164 21.0752L16.1575 21.0566L16.1499 21.0374L16.1418 21.0193L16.1327 21.0016L16.1232 20.984L16.1131 20.9668L16.1025 20.9502L16.0909 20.934L16.0788 20.9179L16.0662 20.9028L16.0531 20.8882L16.0395 20.8735L16.0248 20.8599L16.0102 20.8468L15.9951 20.8342L15.9795 20.8221L15.9628 20.811L15.9462 20.7999L15.929 20.7898L15.9119 20.7803L15.8938 20.7712L15.8756 20.7631L15.8569 20.7556L15.8378 20.749L15.8181 20.743L15.7985 20.7379L15.7788 20.7334L15.7581 20.7293L15.738 20.7263L15.7168 20.7243L15.6961 20.7233L15.6749 20.7228H12.3759L13.1993 20.1757L13.219 20.1621L13.2376 20.148L13.2548 20.1324L13.2714 20.1167L13.287 20.0996L13.3017 20.0825L13.3153 20.0643L13.3279 20.0462L13.3395 20.027L13.3501 20.0073L13.3596 19.9872L13.3682 19.967L13.3758 19.9458L13.3823 19.9251L13.3879 19.9035L13.3919 19.8818L13.3954 19.8601L13.3975 19.8384L13.3985 19.8162V19.7941L13.3975 19.7719L13.3954 19.7497L13.3924 19.728L13.3879 19.7058L13.3823 19.6841L13.3758 19.6625L13.3677 19.6413L13.3591 19.6201L13.3491 19.5994L13.3375 19.5793L13.3254 19.5591L13.3117 19.5399L13.2447 19.4492L13.2296 19.4295L13.2139 19.4114L13.1973 19.3937L13.1801 19.3776L13.162 19.3619L13.1438 19.3473L13.1247 19.3337L13.105 19.3211L13.0849 19.3095L13.0642 19.2989L13.0435 19.2893L13.0218 19.2808L13.0001 19.2732L12.9785 19.2667L12.9563 19.2611L12.9336 19.2566L12.9109 19.253ZM13.5341 2.76961L13.5568 2.77264L13.58 2.77667L13.6027 2.78171L13.6249 2.78776L13.6475 2.79533L13.6692 2.8039L13.6914 2.81348L13.7126 2.82407L13.7338 2.83617L13.7544 2.84928L15.8252 4.22322L15.8443 4.23684L15.863 4.25146L15.8806 4.26659L15.8968 4.28272L15.9109 4.29785H15.9119L15.929 4.30743L15.9462 4.31802L15.9628 4.3286L15.9795 4.3402L15.9951 4.3523L16.0102 4.36491L16.0248 4.37801L16.0395 4.39163L16.0531 4.40575L16.0662 4.42037L16.0788 4.436L16.0909 4.45163L16.1025 4.46776L16.1131 4.4844L16.1232 4.50154L16.1327 4.51919L16.1418 4.53734L16.1499 4.55549L16.1575 4.57415L16.164 4.59331L16.1701 4.61247L16.1751 4.63213L16.1796 4.6523L16.1837 4.67247L16.1867 4.69314L16.1887 4.71381L16.1897 4.73499L16.1902 4.75617L16.1897 4.77734L16.1887 4.79852L16.1867 4.81919L16.1837 4.83986L16.1796 4.86003L16.1751 4.8802L16.1701 4.89986L16.164 4.91902L16.1575 4.93818L16.1499 4.95684L16.1418 4.97499L16.1327 4.99314L16.1232 5.01079L16.1131 5.02793L16.1025 5.04457L16.0909 5.0607L16.0788 5.07633L16.0662 5.09196L16.0531 5.10659L16.0395 5.1207L16.0248 5.13432L16.0102 5.14743L15.9951 5.16003L15.9795 5.17213L15.9628 5.18373L15.9462 5.19432L15.929 5.20491L15.9185 5.21045L15.9124 5.21751L15.8968 5.23415L15.8801 5.25028L15.863 5.26541L15.8443 5.28003L15.8247 5.29365L13.7544 6.6681L13.7338 6.68121L13.7126 6.69331L13.6914 6.7039L13.6697 6.71348L13.6475 6.72205L13.6249 6.72961L13.6027 6.73566L13.58 6.7407L13.5568 6.74474L13.5341 6.74776L13.5109 6.74978L13.4882 6.75079L13.465 6.75028L13.4423 6.74877L13.4191 6.74675L13.3964 6.74323L13.3743 6.73869L13.3521 6.73314L13.3299 6.72659L13.3082 6.71902L13.287 6.71045L13.2659 6.70087L13.2452 6.69028L13.2255 6.67869L13.2059 6.66608L13.1867 6.65247L13.168 6.63785L13.1504 6.62222L13.1333 6.60558L13.1166 6.58844L13.101 6.56978L13.0859 6.55062L13.0188 6.45986L13.0052 6.4402L12.9926 6.42054L12.9815 6.39986L12.9714 6.37919L12.9623 6.35852L12.9548 6.33684L12.9477 6.31566L12.9427 6.29348L12.9381 6.2718L12.9346 6.24961L12.9326 6.22793L12.9316 6.20575V6.18356L12.9326 6.16138L12.9351 6.1397L12.9381 6.11751L12.9427 6.09583L12.9482 6.07465L12.9543 6.05348L12.9618 6.0328L12.9704 6.01213L12.98 5.99247L12.9906 5.97281L13.0022 5.95365L13.0148 5.93499L13.0284 5.91734L13.043 5.8997L13.0586 5.88306L13.0753 5.86692L13.0929 5.8518L13.1111 5.83717L13.1307 5.82356L13.9617 5.27196H10.6556L10.6344 5.27146L10.6133 5.26995L10.5926 5.26793L10.5719 5.26491L10.5517 5.26138L10.5316 5.25684L10.5119 5.25129L10.4928 5.24524L10.4736 5.23869L10.4549 5.23112L10.4363 5.22306L10.4186 5.21398L10.401 5.20491L10.3838 5.19432L10.3672 5.18373L10.3511 5.17213L10.3354 5.16003L10.3198 5.14743L10.3052 5.13432L10.2911 5.1207L10.2775 5.10659L10.2639 5.09196L10.2512 5.07633L10.2396 5.0607L10.2281 5.04457L10.217 5.02793L10.2069 5.01079L10.1973 4.99314L10.1887 4.97499L10.1807 4.95684L10.1731 4.93818L10.166 4.91902L10.16 4.89986L10.1549 4.8802L10.1504 4.86003L10.1469 4.83986L10.1439 4.81919L10.1418 4.79852L10.1403 4.77734L10.1398 4.75617L10.1403 4.73499L10.1418 4.71381L10.1439 4.69314L10.1469 4.67247L10.1504 4.6523L10.1549 4.63213L10.16 4.61247L10.166 4.59331L10.1731 4.57415L10.1807 4.55549L10.1887 4.53734L10.1973 4.51919L10.2069 4.50154L10.217 4.4844L10.2281 4.46776L10.2396 4.45163L10.2512 4.436L10.2639 4.42037L10.2775 4.40575L10.2911 4.39163L10.3052 4.37801L10.3198 4.36491L10.3354 4.3523L10.3511 4.3402L10.3672 4.3286L10.3838 4.31802L10.401 4.30743L10.4186 4.29785L10.4363 4.28928L10.4549 4.28121L10.4736 4.27364L10.4928 4.26659L10.5119 4.26104L10.5316 4.25549L10.5517 4.25096L10.5719 4.24743L10.5926 4.2444L10.6133 4.24238L10.6344 4.24087L10.6556 4.24037H13.9546L13.1307 3.69381L13.1111 3.6802L13.0929 3.66558L13.0753 3.65045L13.0586 3.63432L13.043 3.61768L13.0284 3.60054L13.0148 3.58238L13.0022 3.56373L12.9906 3.54457L12.98 3.52491L12.9704 3.50524L12.9618 3.48457L12.9543 3.4639L12.9482 3.44272L12.9427 3.42154L12.9381 3.39986L12.9351 3.37818L12.9326 3.356L12.9316 3.33381V3.31163L12.9326 3.28995L12.9346 3.26776L12.9381 3.24558L12.9427 3.2239L12.9477 3.20171L12.9548 3.18054L12.9623 3.15886L12.9714 3.13818L12.9815 3.11751L12.9926 3.09684L13.0052 3.07717L13.0188 3.05751L13.0859 2.96675L13.101 2.94759L13.1166 2.92894L13.1333 2.9118L13.1504 2.89516L13.168 2.87953L13.1867 2.86491L13.2059 2.85129L13.2255 2.83869L13.2452 2.82709L13.2659 2.8165L13.287 2.80692L13.3082 2.79835L13.3299 2.79079L13.3521 2.78423L13.3743 2.77869L13.3964 2.77415L13.4191 2.77062L13.4423 2.7686L13.465 2.76709L13.4882 2.76659L13.5109 2.76759L13.5341 2.76961ZM21.265 10.0997L21.2443 10.0977L21.2232 10.0967H21.202L21.1808 10.0972L21.1596 10.0987L21.139 10.1012L21.1188 10.1042L21.0981 10.1083L21.0785 10.1133L21.0588 10.1188L21.0396 10.1249L21.0205 10.132L21.0018 10.1395L20.9837 10.1481L20.966 10.1572L20.9484 10.1667L20.9317 10.1773L20.9151 10.1884L20.899 10.2L20.8833 10.2121L20.8682 10.2247L20.8536 10.2383L20.8395 10.252L20.8259 10.2666L20.8127 10.2817L20.8006 10.2968L20.7885 10.313L20.7775 10.3291L20.7669 10.3462L20.7568 10.3634L20.7477 10.381L20.7391 10.3992L20.7311 10.4173L20.7235 10.436L20.7175 10.4552L20.7114 10.4748L20.7064 10.4945L20.7023 10.5146L20.6988 10.5348L20.6958 10.5555L20.6943 10.5762L20.6933 10.5973L20.6927 10.6185L20.7341 13.9246L20.1719 13.1007L20.1583 13.081L20.1432 13.0629L20.128 13.0457L20.1114 13.0291L20.0948 13.014L20.0771 12.9994L20.059 12.9862L20.0403 12.9736L20.0212 12.9625L20.0015 12.952L19.9813 12.9429L19.9606 12.9343L19.94 12.9273L19.9188 12.9207L19.8971 12.9157L19.8754 12.9116L19.8538 12.9086L19.8316 12.9066L19.8099 12.9061H19.7877L19.7655 12.9076L19.7433 12.9101L19.7217 12.9136L19.6995 12.9182L19.6778 12.9237L19.6566 12.9308L19.6354 12.9388L19.6143 12.9479L19.5936 12.9585L19.5734 12.9701L19.5538 12.9827L19.5346 12.9963L19.4443 13.0644L19.4252 13.08L19.407 13.0962L19.3899 13.1128L19.3738 13.1299L19.3581 13.1481L19.344 13.1667L19.3309 13.1859L19.3183 13.2056L19.3072 13.2262L19.2966 13.2469L19.287 13.2676L19.279 13.2893L19.2714 13.311L19.2654 13.3331L19.2603 13.3553L19.2558 13.378L19.2528 13.4007L19.2507 13.4234L19.2497 13.4466V13.4693L19.2507 13.4925L19.2528 13.5152L19.2563 13.5383L19.2603 13.561L19.2659 13.5837L19.2724 13.6059L19.28 13.6286L19.2885 13.6503L19.2986 13.672L19.3097 13.6931L19.3218 13.7143L19.3349 13.735L20.7351 15.7881L20.7492 15.8073L20.7638 15.8254L20.7795 15.8425L20.7956 15.8592L20.8127 15.8743L20.8198 15.8804L20.8259 15.891L20.8359 15.9081L20.847 15.9247L20.8586 15.9409L20.8707 15.9565L20.8838 15.9716L20.8969 15.9862L20.9111 16.0004L20.9252 16.0135L20.9403 16.0266L20.9559 16.0392L20.9716 16.0508L20.9882 16.0624L21.0049 16.073L21.022 16.0825L21.0396 16.0921L21.0578 16.1007L21.0764 16.1088L21.0951 16.1158L21.1143 16.1224L21.1334 16.1279L21.1536 16.133L21.1733 16.1375L21.1939 16.141L21.2141 16.1436L21.2353 16.1456L21.2559 16.1466H21.2776L21.2988 16.1461L21.3195 16.1446L21.3406 16.142L21.3608 16.139L21.381 16.135L21.4012 16.1299L21.4208 16.1244L21.44 16.1183L21.4591 16.1113L21.4778 16.1037L21.4959 16.0952L21.5136 16.0861L21.5312 16.0765L21.5479 16.0659L21.5645 16.0548L21.5806 16.0432L21.5963 16.0311L21.6114 16.0185L21.626 16.0049L21.6401 15.9913L21.6538 15.9767L21.6669 15.9615L21.679 15.9464L21.6911 15.9303L21.7022 15.9141L21.7127 15.897L21.7228 15.8799L21.7319 15.8622L21.7324 15.8612L21.747 15.8476L21.7627 15.8304L21.7778 15.8128L21.7919 15.7941L21.8055 15.7745L23.1543 13.6871L23.1669 13.6664L23.1785 13.6452L23.1891 13.6236L23.1981 13.6014L23.2067 13.5792L23.2138 13.557L23.2198 13.5343L23.2243 13.5116L23.2284 13.4889L23.2309 13.4657L23.2324 13.4425L23.2329 13.4199L23.2324 13.3967L23.2309 13.374L23.2279 13.3513L23.2243 13.3286L23.2198 13.3059L23.2138 13.2837L23.2067 13.262L23.1991 13.2404L23.1901 13.2192L23.1805 13.1985L23.1694 13.1778L23.1578 13.1582L23.1447 13.1385L23.1311 13.1199L23.1159 13.1012L23.1003 13.0836L23.0837 13.0664L23.066 13.0503L23.0474 13.0346L23.0282 13.02L22.9364 12.954L22.9168 12.9409L22.8966 12.9288L22.8759 12.9177L22.8553 12.9076L22.8341 12.899L22.8129 12.8915L22.7912 12.8849L22.7696 12.8799L22.7474 12.8758L22.7252 12.8728L22.703 12.8708L22.6808 12.8703H22.6591L22.6369 12.8718L22.6153 12.8743L22.5931 12.8778L22.5719 12.8824L22.5502 12.8884L22.5296 12.895L22.5089 12.9025L22.4882 12.9116L22.4685 12.9212L22.4489 12.9323L22.4302 12.9439L22.4116 12.957L22.3939 12.9706L22.3768 12.9852L22.3601 13.0014L22.3445 13.018L22.3294 13.0357L22.3153 13.0543L22.3017 13.074L21.7652 13.9044L21.7243 10.6059L21.7233 10.5847L21.7218 10.5636L21.7193 10.5429L21.7163 10.5222L21.7122 10.502L21.7077 10.4819L21.7022 10.4627L21.6956 10.4431L21.6885 10.4244L21.681 10.4057L21.6729 10.3876L21.6638 10.3694L21.6538 10.3523L21.6437 10.3352L21.6326 10.3185L21.621 10.3024L21.6084 10.2867L21.5958 10.2716L21.5827 10.257L21.5685 10.2429L21.5539 10.2298L21.5393 10.2167L21.5237 10.2041L21.508 10.1925L21.4914 10.1814L21.4748 10.1703L21.4576 10.1607L21.44 10.1511L21.4218 10.1425L21.4032 10.1345L21.3845 10.1274L21.3654 10.1209L21.3462 10.1153L21.326 10.1103L21.3064 10.1057L21.2857 10.1022L21.265 10.0997Z",\n fill: "currentColor"\n }\n) }), CO = () => /* @__PURE__ */ c("svg", { viewBox: "0 0 26 24", fill: "none", xmlns: "http://www.w3.org/2000/svg", children: /* @__PURE__ */ c(\n "path",\n {\n fillRule: "evenodd",\n clipRule: "evenodd",\n d: "M1.53859 2.96951H24.4613C24.7929 2.96951 25.0599 3.23164 25.0599 3.56065V17.6656C25.0599 17.9946 24.7929 18.2567 24.4613 18.2567H13.6285V19.8482H15.8428C16.1744 19.8482 16.4415 20.1103 16.4415 20.4393C16.4415 20.7683 16.1744 21.0305 15.8428 21.0305H10.0972C9.76561 21.0305 9.49855 20.7683 9.49855 20.4393C9.49855 20.1103 9.76561 19.8482 10.0972 19.8482H12.3714V18.2567H1.53859C1.207 18.2567 0.939941 17.9946 0.939941 17.6656V3.56065C0.939941 3.23164 1.207 2.96951 1.53859 2.96951ZM23.8626 14.3007V4.21082H2.1971V14.3007H23.8626ZM2.1971 15.4829V17.0744H23.8626V15.4829H2.1971Z",\n fill: "currentColor"\n }\n) }), mO = () => /* @__PURE__ */ c("svg", { viewBox: "0 0 24 24", fill: "none", xmlns: "http://www.w3.org/2000/svg", children: /* @__PURE__ */ c(\n "path",\n {\n d: "M8.06781 16.339C10.1017 16.339 11.9322 15.5932 13.4237 14.3729L15.5254 16.4746L15.1864 16.8136C15.0508 16.9492 14.9831 17.0847 14.9831 17.2881C14.9831 17.4237 15.0508 17.6271 15.1864 17.7627L21.2204 23.7966C21.3559 23.9322 21.4915 24 21.6949 24C21.8305 24 22.0339 23.9322 22.1695 23.7966L22.5085 23.4576L22.8474 23.7966C22.983 23.9322 23.1186 24 23.322 24C23.5254 24 23.661 23.9322 23.7966 23.7966C24.0678 23.5254 24.0678 23.1864 23.7966 22.9153L23.4576 22.5763L23.7966 22.2373C24.0678 21.9661 24.0678 21.6271 23.7966 21.3559L17.7627 15.322C17.4915 15.0508 17.1525 15.0508 16.8814 15.322L16.5424 15.661L14.4407 13.5593C15.661 12.1356 16.4068 10.2373 16.4068 8.20339C16.4068 3.66102 12.7458 0 8.20341 0C3.66104 0 0 3.66102 0 8.20339C0 12.7458 3.59323 16.339 8.06781 16.339ZM22.3051 21.7627L21.6949 22.3729L16.5424 17.2203L17.1526 16.6102L22.3051 21.7627ZM8.06781 1.15255C11.8644 1.15255 14.9831 4.27119 14.9831 8.0678C14.9831 11.8644 11.8644 14.983 8.06781 14.983C4.2712 14.983 1.15255 11.8644 1.15255 8.0678C1.15255 4.27119 4.2712 1.15255 8.06781 1.15255Z",\n fill: "currentcolor"\n }\n) }), LO = () => /* @__PURE__ */ c("svg", { xmlns: "http://www.w3.org/2000/svg", viewBox: "0 0 24 24", fill: "none", children: /* @__PURE__ */ c(\n "path",\n {\n d: "M23.6753 23.7C23.5754 23.8 23.3757 24 23.1759 24C22.9761 24 22.8762 23.9 22.6764 23.8L22.3767 23.5L22.077 23.8C21.9771 23.9 21.7773 24 21.5775 24C21.3777 24 21.2778 23.9 21.078 23.8L15.0843 17.8C14.9844 17.7 14.8845 17.5 14.8845 17.3C14.8845 17.1 14.9844 17 15.0843 16.8L15.2841 16.6L13.1863 14.5C11.7877 15.6 9.98959 16.3 7.99168 16.3C3.59625 16.3 0 12.7 0 8.2C0 3.7 3.69615 0 8.19147 0C12.6868 0 16.3829 3.7 16.3829 8.2C16.3829 10.2 15.7836 12 14.5848 13.4L16.6826 15.5L16.8824 15.3C17.1821 15 17.4818 15 17.7815 15.3L23.7752 21.3C24.0749 21.6 24.0749 21.9 23.7752 22.2L23.4755 22.4L23.7752 22.7C24.0749 23 23.975 23.5 23.6753 23.7Z",\n fill: "currentcolor"\n }\n) }), vO = () => /* @__PURE__ */ c("svg", { viewBox: "0 0 24 24", fill: "none", xmlns: "http://www.w3.org/2000/svg", children: /* @__PURE__ */ c(\n "path",\n {\n d: "M24 3.41043C24 3.3518 24 3.35179 24 3.29316C24 3.29316 24 3.23454 23.9405 3.23454C23.9405 3.17591 23.881 3.1759 23.881 3.11727L23.8215 3.05864C23.7619 3.05864 23.7619 3 23.7024 3C23.7024 3 23.7024 3 23.6429 3C23.6429 3 23.6429 3 23.5834 3C23.5239 3 23.5239 3 23.4643 3C23.4048 3 23.4049 3 23.3454 3C23.3454 3 23.3453 3 23.2858 3L0.491596 5.81434C0.253536 5.81434 0.0749984 5.99023 0.0154834 6.22475C-0.0440315 6.45928 0.0749765 6.69381 0.253521 6.81107L8.52611 12.2639V20.4137C8.52611 20.6482 8.64513 20.8241 8.88319 20.9414C8.9427 20.9414 9.00225 21 9.06176 21C9.24031 21 9.35931 20.9414 9.47834 20.8241L13.7634 15.7818L17.3343 18.127C17.4533 18.2443 17.6319 18.2443 17.8104 18.1857C17.989 18.127 18.108 18.0098 18.1675 17.8925L23.881 3.87948C23.881 3.82085 23.9405 3.76222 23.9405 3.70359C24 3.46906 24 3.46906 24 3.41043ZM20.9052 4.34854L9.2403 11.2671L2.21754 6.63518L20.9052 4.34854ZM9.77591 18.8306V12.9088L12.9897 15.0195L9.77591 18.8306ZM17.5129 16.7199L10.2521 11.9707L22.3336 4.81759L17.5129 16.7199Z",\n fill: "currentColor"\n }\n) }), qO = () => /* @__PURE__ */ c("svg", { viewBox: "0 0 24 24", fill: "none", xmlns: "http://www.w3.org/2000/svg", children: /* @__PURE__ */ c(\n "path",\n {\n fillRule: "evenodd",\n clipRule: "evenodd",\n d: "M17.9001 6.9818C19.8665 6.9818 21.5208 5.39378 21.5208 3.4909C21.5208 1.58802 19.8665 -1.52588e-05 17.9001 -1.52588e-05C15.9337 -1.52588e-05 14.2795 1.58803 14.2795 3.4909C14.2795 4.07014 14.394 4.54217 14.6227 5.00729L8.51771 9.43192C7.88589 8.85311 7.02219 8.50907 6.10011 8.50907C4.13369 8.50907 2.47949 10.0971 2.47949 12C2.47949 13.9029 4.13369 15.4909 6.10011 15.4909C7.02219 15.4909 7.88589 15.1469 8.51771 14.5681L14.6229 18.9928C14.3937 19.4641 14.2795 19.9869 14.2795 20.5091C14.2795 22.4119 15.9337 24 17.9001 24C19.8665 24 21.5208 22.4119 21.5208 20.5091C21.5208 18.6062 19.8665 17.0182 17.9001 17.0182C16.978 17.0182 16.1143 17.3622 15.4825 17.941L9.37736 13.5163C9.60653 13.0449 9.72073 12.5221 9.72073 12C9.72073 11.4207 9.60623 10.9487 9.37752 10.4836L15.4825 6.05895C16.1143 6.63776 16.978 6.9818 17.9001 6.9818ZM17.9001 1.2694C19.148 1.2694 20.2104 2.24167 20.2104 3.4909C20.2104 4.68387 19.2064 5.71239 17.9001 5.71239C16.653 5.71239 15.5912 4.74134 15.5899 3.49323C15.6503 2.23729 16.6573 1.2694 17.9001 1.2694ZM6.10011 14.2215C4.85226 14.2215 3.78984 13.2492 3.78984 12C3.78984 10.807 4.79385 9.7785 6.10011 9.7785C7.34796 9.7785 8.41038 10.7508 8.41038 12C8.41038 13.1913 7.34627 14.2215 6.10011 14.2215ZM17.9001 18.3471C19.148 18.3471 20.2104 19.3193 20.2104 20.5686C20.2104 21.7615 19.2064 22.7901 17.9001 22.7901C16.653 22.7901 15.5912 21.819 15.5899 20.5709C15.6503 19.315 16.6573 18.3471 17.9001 18.3471Z",\n fill: "currentcolor"\n }\n) }), yO = () => /* @__PURE__ */ c("svg", { viewBox: "0 0 24 24", fill: "none", xmlns: "http://www.w3.org/2000/svg", children: /* @__PURE__ */ c(\n "path",\n {\n d: "M21.0839 3.41402C20.9419 3.2102 20.729 3.07432 20.5161 3.07432C17.4645 3.00638 14.6258 1.98726 12.2839 0.152866C12.071 -0.0509554 11.7161 -0.0509554 11.4323 0.152866C9.1613 1.91932 6.39354 2.93844 3.4129 3.07432C3.2 3.07432 2.9871 3.2102 2.84517 3.41402C1.63871 5.52018 1 7.89808 1 10.276C1 16.5945 5.40001 22.2335 11.7871 24C11.8581 24 11.929 24 12 24C12.071 24 12.1419 24 12.2129 24C18.529 22.2335 23 16.6624 23 10.276C23 7.89808 22.3613 5.52018 21.0839 3.41402ZM12 22.7771C6.32258 21.1465 2.34838 16.051 2.34838 10.3439C2.34838 8.23779 2.84516 6.19958 3.83871 4.36519C6.74839 4.16137 9.51612 3.21019 11.8581 1.51168C14.271 3.27813 17.1097 4.22931 20.0903 4.36519C21.0839 6.19958 21.5806 8.23779 21.5806 10.3439C21.6516 16.051 17.6774 21.1465 12 22.7771Z",\n fill: "currentColor"\n }\n) }), wO = () => /* @__PURE__ */ c("svg", { xmlns: "http://www.w3.org/2000/svg", viewBox: "0 0 24 24", fill: "none", children: /* @__PURE__ */ c(\n "path",\n {\n d: "M21.0839 3.41402C20.9419 3.2102 20.729 3.07432 20.5161 3.07432C17.4645 3.00638 14.6258 1.98726 12.2839 0.152866C12.071 -0.0509554 11.7161 -0.0509554 11.4323 0.152866C9.1613 1.91932 6.39354 2.93844 3.4129 3.07432C3.2 3.07432 2.9871 3.2102 2.84517 3.41402C1.63871 5.52018 1 7.89808 1 10.276C1 16.5945 5.40001 22.2335 11.7871 24C11.8581 24 11.929 24 12 24C12.071 24 12.1419 24 12.2129 24C18.529 22.2335 23 16.6624 23 10.276C23 7.89808 22.3613 5.52018 21.0839 3.41402Z",\n fill: "currentColor"\n }\n) }), xO = () => /* @__PURE__ */ e1("svg", { viewBox: "0 0 24 24", fill: "none", xmlns: "http://www.w3.org/2000/svg", children: [\n /* @__PURE__ */ c(\n "path",\n {\n fillRule: "evenodd",\n clipRule: "evenodd",\n d: "M0.00011457 12.0036C0.00331864 12.1681 0.0814908 12.3247 0.151725 12.3967L3.01901 15.3146C3.07254 15.3789 3.13865 15.4314 3.21323 15.4687C3.28847 15.5064 3.37065 15.5278 3.45456 15.5316C3.53846 15.5354 3.62221 15.5214 3.70047 15.4907C3.77873 15.4599 3.84977 15.4131 3.90907 15.3531C3.96837 15.2931 4.01464 15.2214 4.04497 15.1424C4.07529 15.0634 4.08902 14.9789 4.08529 14.8943C4.08156 14.8097 4.06045 14.7268 4.02329 14.6508C3.98646 14.5755 3.93465 14.5087 3.87108 14.4546L2.04793 12.6107L22.0749 12.5609",\n fill: "currentColor"\n }\n ),\n /* @__PURE__ */ c(\n "path",\n {\n d: "M22.0749 12.5609L20.1664 14.4911C20.0775 14.5986 20.0317 14.7359 20.0379 14.8759C20.044 15.0159 20.1018 15.1484 20.1998 15.2475C20.2977 15.3466 20.4288 15.405 20.5672 15.4113C20.7057 15.4175 20.8414 15.3711 20.9477 15.2813L23.8044 12.3981C23.9194 12.2803 24 12.1659 24 11.9922C24 11.817 23.9261 11.7029 23.8044 11.5569L20.9845 8.68524C20.931 8.621 20.8649 8.56858 20.7904 8.53127C20.7152 8.49362 20.633 8.47221 20.5491 8.46843C20.4652 8.46464 20.3814 8.47857 20.3032 8.50931C20.2249 8.54005 20.1539 8.58691 20.0946 8.64689C20.0353 8.70686 19.989 8.77863 19.9587 8.85762C19.9284 8.9366 19.9146 9.02108 19.9184 9.1057C19.9221 9.19031 19.9432 9.27323 19.9804 9.34918C20.0172 9.42445 20.069 9.49126 20.1326 9.54542L21.9557 11.3893H2.04794L3.87108 9.54542C3.93465 9.49126 3.98646 9.42445 4.02329 9.34918C4.06045 9.27323 4.08156 9.19031 4.08529 9.1057C4.08902 9.02108 4.07529 8.9366 4.04497 8.85762C4.01464 8.77864 3.96837 8.70686 3.90907 8.64689C3.84977 8.58691 3.77873 8.54005 3.70047 8.50931C3.62221 8.47857 3.53846 8.46464 3.45456 8.46843C3.37065 8.47221 3.28847 8.49362 3.21323 8.53127C3.13868 8.56859 3.07258 8.62104 3.01906 8.6853L0.163853 11.5729L0.162692 11.5742C0.073429 11.6709 -0.00337693 11.8243 0.00011457 12.0036C0.00331864 12.1681 0.0814908 12.3247 0.151725 12.3967L3.01901 15.3146C3.07254 15.3789 3.13865 15.4314 3.21323 15.4687C3.28847 15.5064 3.37065 15.5278 3.45456 15.5316C3.53846 15.5354 3.62221 15.5214 3.70047 15.4907C3.77873 15.4599 3.84977 15.4131 3.90907 15.3531C3.96837 15.2931 4.01464 15.2214 4.04497 15.1424C4.07529 15.0634 4.08902 14.9789 4.08529 14.8943C4.08156 14.8097 4.06045 14.7268 4.02329 14.6508C3.98646 14.5755 3.93465 14.5087 3.87108 14.4546L2.04793 12.6107L22.0749 12.5609Z",\n fill: "currentColor"\n }\n )\n] }), WO = () => /* @__PURE__ */ c("svg", { viewBox: "0 0 24 24", fill: "none", xmlns: "http://www.w3.org/2000/svg", children: /* @__PURE__ */ c(\n "path",\n {\n fillRule: "evenodd",\n clipRule: "evenodd",\n d: "M17.7718 16.3015C16.6371 18.2562 14.4238 19.4661 12 19.4661C9.57584 19.4661 7.36247 18.2562 6.22785 16.3012C6.04341 15.9832 6.15128 15.576 6.46955 15.3912C6.78733 15.2064 7.19481 15.3148 7.37951 15.6329C8.27337 17.1725 10.0419 18.1343 12 18.1343C13.958 18.1343 15.7262 17.1725 16.6198 15.6329C16.8046 15.315 17.2121 15.2068 17.53 15.3912C17.8481 15.5757 17.9562 15.9833 17.7718 16.3015ZM24 12C24 18.5059 18.5056 24 12 24C5.49441 24 0 18.5059 0 12C0 5.49413 5.49441 0 12 0C18.5056 0 24 5.49413 24 12ZM22.6682 12C22.6682 6.21827 17.7817 1.33176 12 1.33176C6.21827 1.33176 1.33176 6.21827 1.33176 12C1.33176 17.7817 6.21827 22.6682 12 22.6682C17.7817 22.6682 22.6682 17.7817 22.6682 12ZM8.98403 10.8269C8.98403 11.4303 8.49485 11.9195 7.89142 11.9195C7.28799 11.9195 6.79881 11.4303 6.79881 10.8269C6.79881 10.2235 7.28799 9.73431 7.89142 9.73431C8.49485 9.73431 8.98403 10.2235 8.98403 10.8269ZM17.3411 10.8269C17.3411 11.4303 16.852 11.9195 16.2485 11.9195C15.6451 11.9195 15.1559 11.4303 15.1559 10.8269C15.1559 10.2235 15.6451 9.73431 16.2485 9.73431C16.852 9.73431 17.3411 10.2235 17.3411 10.8269Z",\n fill: "currentColor"\n }\n) }), RO = () => /* @__PURE__ */ e1("svg", { viewBox: "0 0 24 24", fill: "none", xmlns: "http://www.w3.org/2000/svg", children: [\n /* @__PURE__ */ e1("g", { clipPath: "url(#clip0_2721_61430)", children: [\n /* @__PURE__ */ c(\n "path",\n {\n d: "M4.27477 23.6803L4.2732 23.6824C4.14005 23.8609 3.96628 23.9823 3.77599 23.9982C3.58042 24.0146 3.39511 23.9175 3.24952 23.7163C2.92896 23.2733 0.182071 19.2084 0.104271 19.0977C-0.0638096 18.8586 -0.0366705 18.4862 0.236934 18.2926C0.525375 18.0885 0.899268 18.2149 1.05917 18.4649C1.75543 19.4802 2.47296 20.5299 3.18332 21.5645L3.18332 0.568042C3.18332 0.229741 3.46616 -0.00874059 3.79075 0.000261753C4.10594 0.00900375 4.36535 0.246717 4.36535 0.5675L4.36535 21.5614L6.49024 18.4586C6.67019 18.1735 7.03914 18.0976 7.30357 18.281C7.59093 18.4576 7.67387 18.8278 7.4763 19.0939C6.42578 20.6341 5.34853 22.1562 4.27477 23.6803Z",\n fill: "currentcolor"\n }\n ),\n /* @__PURE__ */ c(\n "path",\n {\n fillRule: "evenodd",\n clipRule: "evenodd",\n d: "M8.60039 4.05703C8.60039 3.67043 8.91379 3.35703 9.30039 3.35703H23.3004C23.687 3.35703 24.0004 3.67043 24.0004 4.05703C24.0004 4.44363 23.687 4.75703 23.3004 4.75703H9.30039C8.91379 4.75703 8.60039 4.44363 8.60039 4.05703Z",\n fill: "currentcolor"\n }\n ),\n /* @__PURE__ */ c(\n "path",\n {\n fillRule: "evenodd",\n clipRule: "evenodd",\n d: "M8.60039 9.35235C8.60039 8.96575 8.91379 8.65235 9.30039 8.65235H21.8004C22.187 8.65235 22.5004 8.96575 22.5004 9.35235C22.5004 9.73895 22.187 10.0524 21.8004 10.0524H9.30039C8.91379 10.0524 8.60039 9.73895 8.60039 9.35235Z",\n fill: "currentcolor"\n }\n ),\n /* @__PURE__ */ c(\n "path",\n {\n fillRule: "evenodd",\n clipRule: "evenodd",\n d: "M8.60039 14.6477C8.60039 14.2611 8.91379 13.9477 9.30039 13.9477H19.3004C19.687 13.9477 20.0004 14.2611 20.0004 14.6477C20.0004 15.0343 19.687 15.3477 19.3004 15.3477H9.30039C8.91379 15.3477 8.60039 15.0343 8.60039 14.6477Z",\n fill: "currentcolor"\n }\n ),\n /* @__PURE__ */ c(\n "path",\n {\n fillRule: "evenodd",\n clipRule: "evenodd",\n d: "M8.60039 19.943C8.60039 19.5564 8.91379 19.243 9.30039 19.243H17.8004C18.187 19.243 18.5004 19.5564 18.5004 19.943C18.5004 20.3296 18.187 20.643 17.8004 20.643H9.30039C8.91379 20.643 8.60039 20.3296 8.60039 19.943Z",\n fill: "currentcolor"\n }\n )\n ] }),\n /* @__PURE__ */ c("defs", { children: /* @__PURE__ */ c("clipPath", { id: "clip0_2721_61430", children: /* @__PURE__ */ c("rect", { width: "24", height: "24", fill: "currentColor" }) }) })\n] }), BO = () => /* @__PURE__ */ c("svg", { viewBox: "0 0 24 24", fill: "none", xmlns: "http://www.w3.org/2000/svg", children: /* @__PURE__ */ c(\n "path",\n {\n d: "M23.4803 8.70365L15.4751 8.18404L12.5585 0.38972C12.4964 0.129909 12.2482 0 12 0C11.7518 0 11.5656 0.129909 11.4415 0.38972L8.52486 8.18404L0.519709 8.70365C0.271487 8.70365 0.0853277 8.89851 0.023272 9.09337C-0.0387836 9.35318 0.0232645 9.61299 0.209431 9.7429L6.35292 15.069L4.36717 23.1881C4.30511 23.4479 4.36714 23.7077 4.61537 23.8376C4.73948 23.9026 4.86359 23.9675 4.92564 23.9675C5.04975 23.9675 5.11181 23.9675 5.23592 23.9026L12 19.4208L18.764 23.9026C18.9502 24.0325 19.1984 24.0325 19.3846 23.9026C19.5708 23.7727 19.6328 23.5129 19.6328 23.253L17.647 15.134L23.7906 9.80786C23.9767 9.67795 24.0388 9.41814 23.9767 9.15833C23.9147 8.89852 23.7285 8.76861 23.4803 8.70365ZM16.6542 14.4195C16.468 14.5494 16.406 14.8092 16.468 15.0041L18.2056 22.0189L12.3723 18.1218C12.1862 17.9919 11.9379 17.9919 11.7518 18.1218L5.91856 22.0189L7.65611 15.0041C7.71816 14.8092 7.65611 14.5494 7.46995 14.4195L2.13314 9.80786L9.02134 9.35318C9.26956 9.35318 9.45572 9.22327 9.51778 8.96346L12.062 2.20839L14.6063 8.96346C14.6684 9.15832 14.8546 9.35318 15.1028 9.35318L21.9909 9.80786L16.6542 14.4195Z",\n fill: "currentColor"\n }\n) }), SO = () => /* @__PURE__ */ c("svg", { xmlns: "http://www.w3.org/2000/svg", viewBox: "0 0 24 24", fill: "none", children: /* @__PURE__ */ c(\n "path",\n {\n d: "M23.4803 8.70365L15.4751 8.18404L12.5585 0.38972C12.4964 0.129909 12.2482 0 12 0C11.7518 0 11.5656 0.129909 11.4415 0.38972L8.52486 8.18404L0.519709 8.70365C0.271487 8.70365 0.0853277 8.89851 0.023272 9.09337C-0.0387836 9.35318 0.0232645 9.61299 0.209431 9.7429L6.35292 15.069L4.36717 23.1881C4.30511 23.4479 4.36714 23.7077 4.61537 23.8376C4.73948 23.9026 4.86359 23.9675 4.92564 23.9675C5.04975 23.9675 5.11181 23.9675 5.23592 23.9026L12 19.4208L18.764 23.9026C18.9502 24.0325 19.1984 24.0325 19.3846 23.9026C19.5708 23.7727 19.6328 23.5129 19.6328 23.253L17.647 15.134L23.7906 9.80786C23.9767 9.67795 24.0388 9.41814 23.9767 9.15833C23.9147 8.89852 23.7285 8.76861 23.4803 8.70365Z",\n fill: "currentColor"\n }\n) }), EO = () => /* @__PURE__ */ c("svg", { viewBox: "0 0 48 48", fill: "none", xmlns: "http://www.w3.org/2000/svg", children: /* @__PURE__ */ c(\n "path",\n {\n d: "M30.8241 34.3133C30.6563 34.3139 30.4927 34.2616 30.3564 34.1638L23.951 29.5201L17.5456 34.1638C17.4088 34.2631 17.2439 34.3163 17.0749 34.3157C16.9058 34.315 16.7414 34.2607 16.6052 34.1604C16.4691 34.0602 16.3684 33.9192 16.3177 33.758C16.2669 33.5967 16.2688 33.4235 16.3229 33.2634L18.8211 25.8639L12.3465 21.4238C12.2063 21.3277 12.1004 21.1893 12.0445 21.0288C11.9885 20.8683 11.9853 20.6941 12.0354 20.5317C12.0854 20.3692 12.1861 20.227 12.3228 20.1259C12.4594 20.0248 12.6248 19.97 12.7948 19.9695H20.7825L23.193 12.5511C23.2449 12.3909 23.3463 12.2513 23.4824 12.1523C23.6186 12.0533 23.7827 12 23.951 12C24.1194 12 24.2834 12.0533 24.4196 12.1523C24.5558 12.2513 24.6571 12.3909 24.7091 12.5511L27.1196 19.972H35.1073C35.2775 19.9719 35.4432 20.0263 35.5803 20.1273C35.7173 20.2282 35.8184 20.3704 35.8688 20.533C35.9192 20.6955 35.9162 20.87 35.8603 21.0307C35.8044 21.1915 35.6984 21.3301 35.558 21.4263L29.0809 25.8639L31.5776 33.2614C31.6181 33.3812 31.6295 33.5088 31.6108 33.6339C31.5922 33.7589 31.5441 33.8777 31.4704 33.9805C31.3968 34.0832 31.2998 34.167 31.1874 34.2249C31.075 34.2827 30.9505 34.313 30.8241 34.3133Z",\n fill: "currentColor"\n }\n) }), kO = () => /* @__PURE__ */ c("svg", { viewBox: "0 0 24 24", fill: "none", xmlns: "http://www.w3.org/2000/svg", children: /* @__PURE__ */ c(\n "path",\n {\n fillRule: "evenodd",\n clipRule: "evenodd",\n d: "M4.59082 0H19.3997C19.5958 0 19.764 0.0629001 19.8757 0.170352C19.9872 0.277609 20.0396 0.426953 20.0071 0.591182V23.4138C20.0071 23.7411 19.7352 24 19.3997 24H4.59082C4.25535 24 3.9834 23.7411 3.9834 23.4138V0.586189C3.9834 0.258875 4.25536 0 4.59082 0ZM18.7922 1.232H5.19829V22.8276H18.7922V1.232ZM13.5134 4.03316H10.5393C10.2039 4.03316 9.93188 3.77425 9.93188 3.44694C9.93188 3.11963 10.2039 2.86076 10.5393 2.86076H13.5134C13.8489 2.86076 14.1208 3.11963 14.1208 3.44694C14.1208 3.77425 13.8489 4.03316 13.5134 4.03316ZM14.1208 19.1224C14.1208 20.2246 13.1673 21.1391 12.0263 21.1391C10.8854 21.1391 9.93188 20.2246 9.93188 19.1224C9.93188 18.0203 10.8854 17.1057 12.0263 17.1057C13.1673 17.1057 14.1208 18.0203 14.1208 19.1224ZM12.906 19.1224C12.906 18.6749 12.4964 18.2782 12.0263 18.2782C11.5563 18.2782 11.1467 18.6749 11.1467 19.1224C11.1467 19.5699 11.5563 19.9667 12.0263 19.9667C12.4964 19.9667 12.906 19.5699 12.906 19.1224Z",\n fill: "currentColor"\n }\n) }), NO = () => /* @__PURE__ */ c("svg", { viewBox: "0 0 24 24", fill: "none", xmlns: "http://www.w3.org/2000/svg", children: /* @__PURE__ */ c(\n "path",\n {\n fillRule: "evenodd",\n clipRule: "evenodd",\n d: "M20 1.4H4C2.56406 1.4 1.4 2.56406 1.4 4V20C1.4 21.4359 2.56406 22.6 4 22.6H20C21.4359 22.6 22.6 21.4359 22.6 20V4C22.6 2.56406 21.4359 1.4 20 1.4ZM4 0C1.79086 0 0 1.79086 0 4V20C0 22.2091 1.79086 24 4 24H20C22.2091 24 24 22.2091 24 20V4C24 1.79086 22.2091 0 20 0H4Z",\n fill: "currentColor"\n }\n) }), TO = () => /* @__PURE__ */ c("svg", { viewBox: "0 0 24 24", fill: "none", xmlns: "http://www.w3.org/2000/svg", children: /* @__PURE__ */ c(\n "path",\n {\n fillRule: "evenodd",\n clipRule: "evenodd",\n d: "M14.4803 0.654532C14.4803 1.01815 14.1796 1.30902 13.8038 1.30902H10.1961C9.82028 1.30902 9.51966 1.01815 9.51966 0.654532C9.51966 0.290913 9.82028 0 10.1961 0H13.8038C14.1796 0 14.4803 0.290913 14.4803 0.654532ZM12 1.7454C5.68626 1.7454 0.5 6.7636 0.5 12.8727C0.5 18.9818 5.68626 24 12 24C18.3137 24 23.5 18.9818 23.5 12.8727C23.5 6.7636 18.3889 1.7454 12 1.7454ZM12 22.6182C6.4379 22.6182 1.92808 18.2546 1.92808 12.8727C1.92808 7.49087 6.4379 3.1272 12 3.1272C17.5621 3.1272 22.0719 7.49087 22.0719 12.8727C22.147 18.2546 17.5621 22.6182 12 22.6182ZM9.06864 5.60004C8.91832 5.23641 8.46734 5.16367 8.1667 5.30912C7.79089 5.45457 7.71576 5.89094 7.86608 6.18184L11.4738 13.1635C11.6241 13.3817 11.8496 13.5271 12.0751 13.5271H19.2906C19.6664 13.5271 19.967 13.2362 19.967 12.8726C19.967 12.509 19.6664 12.2181 19.2906 12.2181H12.5261L9.06864 5.60004Z",\n fill: "currentColor"\n }\n) }), IO = () => /* @__PURE__ */ e1("svg", { viewBox: "0 0 24 24", fill: "none", xmlns: "http://www.w3.org/2000/svg", children: [\n /* @__PURE__ */ c(\n "circle",\n {\n cx: "12",\n cy: "12",\n r: "11.3",\n stroke: "currentColor",\n strokeWidth: "1.4"\n }\n ),\n /* @__PURE__ */ c(\n "path",\n {\n fillRule: "evenodd",\n clipRule: "evenodd",\n d: "M8.287 9.97941V14.0661L15.9485 8.1327L15.9559 8.12751C16.1847 7.96756 16.6056 7.91559 16.8558 8.2266C17.0367 8.45136 17.0909 8.86929 16.7586 9.1096L8.02234 15.8906L7.9844 15.9083L7.97415 15.9132C7.92354 15.9373 7.7922 16 7.64351 16L7.64113 16C7.62508 16 7.57732 16.0001 7.52493 15.992C7.49108 15.9867 7.41957 15.9733 7.34505 15.9297C7.22518 15.8744 7.14468 15.7834 7.09654 15.7065C7.03957 15.6155 7 15.5009 7 15.3818V9.97941C7 9.61955 7.30561 9.36119 7.64351 9.36119C7.98144 9.36119 8.287 9.61958 8.287 9.97941Z",\n fill: "currentColor"\n }\n )\n] }), DO = () => /* @__PURE__ */ e1("svg", { xmlns: "http://www.w3.org/2000/svg", viewBox: "0 0 24 24", fill: "none", children: [\n /* @__PURE__ */ c("g", { clipPath: "url(#clip0_3216_12400)", children: /* @__PURE__ */ c(\n "path",\n {\n fillRule: "evenodd",\n clipRule: "evenodd",\n d: "M12 24C14.3734 24 16.6935 23.2962 18.6668 21.9776C20.6402 20.6591 22.1783 18.7849 23.0866 16.5922C23.9948 14.3995 24.2324 11.9867 23.7694 9.65892C23.3064 7.33115 22.1635 5.19295 20.4853 3.51472C18.8071 1.83649 16.6689 0.693605 14.3411 0.230582C12.0133 -0.232441 9.60051 0.00519943 7.4078 0.913451C5.21509 1.8217 3.34094 3.35977 2.02236 5.33316C0.703788 7.30655 0 9.62663 0 12C0 15.1826 1.26428 18.2348 3.51472 20.4853C5.76515 22.7357 8.8174 24 12 24ZM7.64 16.37C7.58021 16.3771 7.5198 16.3771 7.46 16.37C7.35446 16.3565 7.25257 16.3225 7.16 16.27C7.00282 16.1916 6.87107 16.0702 6.78 15.92C6.68316 15.7638 6.63126 15.5838 6.63 15.4V10C6.63 9.73481 6.73536 9.48045 6.9229 9.29292C7.11043 9.10538 7.36479 9.00002 7.63 9.00002C7.89522 9.00002 8.14958 9.10538 8.33711 9.29292C8.52465 9.48045 8.63 9.73481 8.63 10V13.33L15.69 7.86002C15.8801 7.72523 16.107 7.65194 16.34 7.65002C16.4877 7.651 16.6334 7.68469 16.7665 7.74866C16.8996 7.81264 17.017 7.90531 17.11 8.02002C17.1978 8.12628 17.2626 8.24953 17.3004 8.38204C17.3383 8.51455 17.3484 8.65345 17.33 8.79002C17.3142 8.91828 17.2712 9.04169 17.2039 9.15204C17.1367 9.26239 17.0467 9.35715 16.94 9.43002L8.19 16.23H8.11C7.95499 16.3098 7.78423 16.3542 7.61 16.36L7.64 16.37Z",\n fill: "currentColor"\n }\n ) }),\n /* @__PURE__ */ c("defs", { children: /* @__PURE__ */ c("clipPath", { id: "clip0_3216_12400", children: /* @__PURE__ */ c("rect", { width: "24", height: "24", fill: "white" }) }) })\n] }), HO = () => /* @__PURE__ */ e1("svg", { viewBox: "0 0 24 24", fill: "none", xmlns: "http://www.w3.org/2000/svg", children: [\n /* @__PURE__ */ c(\n "path",\n {\n d: "M15.142 7.25708H8.79201C8.46128 7.25708 8.19669 7.51171 8.19669 7.83001C8.19669 8.14831 8.46128 8.40294 8.79201 8.40294H15.142C15.4727 8.40294 15.7373 8.14831 15.7373 7.83001C15.7373 7.51171 15.4727 7.25708 15.142 7.25708Z",\n fill: "currentColor"\n }\n ),\n /* @__PURE__ */ c(\n "path",\n {\n d: "M8.79201 11.0131H15.142C15.4727 11.0131 15.7373 11.2677 15.7373 11.586C15.7373 11.9043 15.4727 12.159 15.142 12.159H8.79201C8.46128 12.159 8.19669 11.9043 8.19669 11.586C8.19669 11.2677 8.46128 11.0131 8.79201 11.0131Z",\n fill: "currentColor"\n }\n ),\n /* @__PURE__ */ c(\n "path",\n {\n d: "M15.142 14.7054H8.79201C8.46128 14.7054 8.19669 14.9601 8.19669 15.2784C8.19669 15.5967 8.46128 15.8513 8.79201 15.8513H15.142C15.4727 15.8513 15.7373 15.5967 15.7373 15.2784C15.7373 14.9601 15.4727 14.7054 15.142 14.7054Z",\n fill: "currentColor"\n }\n ),\n /* @__PURE__ */ c(\n "path",\n {\n d: "M8.79201 18.3978H15.142C15.4727 18.3978 15.7373 18.6525 15.7373 18.9707C15.7373 19.289 15.4727 19.5437 15.142 19.5437H8.79201C8.46128 19.5437 8.19669 19.289 8.19669 18.9707C8.19669 18.6525 8.46128 18.3978 8.79201 18.3978Z",\n fill: "currentColor"\n }\n ),\n /* @__PURE__ */ c(\n "path",\n {\n fillRule: "evenodd",\n clipRule: "evenodd",\n d: "M19.8385 1.52787H15.7373V0.57296C15.7373 0.254658 15.4727 0 15.142 0H8.79182C8.46108 0 8.19648 0.254658 8.19648 0.57296V1.52787H4.09535C3.76461 1.52787 3.5 1.78251 3.5 2.10081V23.4271C3.5 23.7454 3.76461 24 4.09535 24H19.9046C20.2354 24 20.5 23.7454 20.5 23.4271V2.10081C20.5 1.78251 20.2354 1.52787 19.8385 1.52787ZM9.38717 1.20957H14.4805V3.05572H9.38717V1.20957ZM4.62452 22.8542V2.73742H8.13034V3.69232C8.13034 4.01063 8.39495 4.26526 8.72569 4.26526H15.0759C15.4066 4.26526 15.6712 4.01063 15.6712 3.69232V2.73742H19.3077V22.8542H4.62452Z",\n fill: "currentColor"\n }\n )\n] }), VO = () => /* @__PURE__ */ e1("svg", { xmlns: "http://www.w3.org/2000/svg", viewBox: "0 0 24 24", fill: "none", children: [\n /* @__PURE__ */ c(\n "path",\n {\n fillRule: "evenodd",\n clipRule: "evenodd",\n d: "M16.1 0.2V3.5C16.1 3.8 15.9 4.1 15.6 4.2H9.5C9.4 4.2 9.4 4.2 9.4 4.2C8.9 4.2 8.7 3.9 8.7 3.6V0.6C8.7 0.2 9 0 9.3 0H15.7C15.8 0 16 0.1 16.1 0.2Z",\n fill: "currentColor"\n }\n ),\n /* @__PURE__ */ c(\n "path",\n {\n fillRule: "evenodd",\n clipRule: "evenodd",\n d: "M20.3 1.5H17.9V5.3C17.9 5.7 17.6 6 17.2 6H7.6C7.2 6 6.9 5.7 6.9 5.3V1.5H4.6C4.3 1.5 4 1.8 4 2.1V23.4C4 23.7 4.3 24 4.6 24H20.4C20.7 24 21 23.7 21 23.4V2.1C21 1.8 20.7 1.5 20.3 1.5ZM15.4 21.2H9.5C9 21.2 8.6 20.8 8.6 20.3C8.6 19.8 9 19.4 9.5 19.4H15.3C15.8 19.4 16.2 19.8 16.2 20.3C16.3 20.8 15.9 21.2 15.4 21.2ZM15.4 17.4H9.5C9 17.4 8.6 17 8.6 16.5C8.6 16 9 15.6 9.5 15.6H15.3C15.8 15.6 16.2 16 16.2 16.5C16.2 17 15.9 17.4 15.4 17.4ZM15.4 13.6H9.5C9 13.6 8.6 13.2 8.6 12.7C8.6 12.2 9 11.8 9.5 11.8H15.3C15.8 11.8 16.2 12.2 16.2 12.7C16.3 13.2 15.9 13.6 15.4 13.6ZM15.4 9.7H9.5C9 9.7 8.6 9.3 8.6 8.8C8.6 8.3 9 7.9 9.5 7.9H15.3C15.8 7.9 16.2 8.3 16.2 8.8C16.3 9.3 15.9 9.7 15.4 9.7Z",\n fill: "currentColor"\n }\n )\n] }), PO = () => /* @__PURE__ */ c("svg", { viewBox: "0 0 24 24", fill: "none", xmlns: "http://www.w3.org/2000/svg", children: /* @__PURE__ */ c(\n "path",\n {\n d: "M23.2895 11.2895H22.1053C21.7105 6.23684 17.7632 2.2105 12.7105 1.89471V0.710498C12.7105 0.315761 12.3947 0 12 0C11.6053 0 11.2895 0.315761 11.2895 0.710498V1.89471C6.23684 2.28945 2.21053 6.23684 1.89474 11.2895H0.710527C0.315791 11.2895 0 11.6053 0 12C0 12.3948 0.315791 12.7105 0.710527 12.7105H1.89474C2.28947 17.7632 6.23684 21.7895 11.2895 22.1053V23.2895C11.2895 23.6842 11.6053 24 12 24C12.3947 24 12.7105 23.6842 12.7105 23.2895V22.1053C17.7632 21.7106 21.7895 17.7632 22.1053 12.7105H23.2895C23.6842 12.7105 24 12.3948 24 12C24 11.6053 23.6842 11.2895 23.2895 11.2895ZM12.7105 20.8282V19.7229C12.7105 19.3282 12.3947 19.0124 12 19.0124C11.6053 19.0124 11.2895 19.3282 11.2895 19.7229V20.8282C7.10526 20.5124 3.58755 16.9737 3.19281 12.7105H4.29807C4.69281 12.7105 5.0086 12.3948 5.0086 12C5.0086 11.6053 4.69281 11.2895 4.29807 11.2895H3.19281C3.5086 7.10526 7.02632 3.59347 11.2895 3.19873V4.30397C11.2895 4.69871 11.6053 5.01452 12 5.01452C12.3947 5.01452 12.7105 4.69871 12.7105 4.30397V3.19873C16.8947 3.51452 20.4771 7.09818 20.8718 11.3613H19.7666C19.3718 11.3613 19.056 11.6772 19.056 12.0719C19.056 12.4666 19.3718 12.7824 19.7666 12.7824H20.8718C20.4771 16.9667 16.8947 20.5124 12.7105 20.8282Z",\n fill: "currentColor"\n }\n) }), FO = () => /* @__PURE__ */ c("svg", { viewBox: "0 0 24 24", fill: "none", xmlns: "http://www.w3.org/2000/svg", children: /* @__PURE__ */ c(\n "path",\n {\n d: "M18.9212 9.60994C19.917 8.81326 20.4149 7.71783 20.4149 6.42322C20.4149 4.23235 18.6224 2.43982 16.3319 2.43982C14.1411 2.43982 12.249 4.23235 12.249 6.42322C12.249 7.61824 12.7469 8.81326 13.7427 9.60994C12.5477 10.0083 11.3527 10.7054 10.556 11.7012C10.3568 11.6016 10.2573 11.6016 10.0581 11.5021C11.0539 10.7054 11.5519 9.60994 11.5519 8.31534C11.5519 6.12447 9.75934 4.33194 7.46888 4.33194C5.27801 4.33194 3.38589 6.12447 3.38589 8.31534C3.48548 9.51036 3.9834 10.7054 4.97925 11.5021C1.9917 12.3983 0 14.9875 0 18.0747V20.9626C0 21.2614 0.298755 21.5602 0.59751 21.5602H14.5394C14.8382 21.5602 15.1369 21.2614 15.1369 20.9626V19.668H23.4025C23.7012 19.668 24 19.3693 24 19.0705V16.1826C23.9004 13.195 21.8091 10.4066 18.9212 9.60994ZM11.751 12.1992C12.8465 11.1037 14.3402 10.5062 15.834 10.5062H17.029C20.2158 10.5062 22.805 13.0954 22.805 16.1826V18.473H15.1369V18.0747C15.0373 15.6846 13.7427 13.4938 11.751 12.1992ZM13.5436 6.52281C13.5436 4.92945 14.8382 3.73443 16.4315 3.73443C18.0249 3.73443 19.3195 5.02903 19.3195 6.52281C19.3195 8.11617 18.0249 9.31119 16.4315 9.31119C14.8382 9.31119 13.5436 8.01658 13.5436 6.52281ZM6.97095 12.2987H8.16597C8.76348 12.2987 9.46058 12.3983 10.0581 12.5975C10.3568 12.6971 10.6556 12.7967 10.8548 12.9958C12.7469 13.9917 13.8423 15.8838 13.8423 17.9751V20.2655H1.19502V17.9751C1.19502 14.888 3.78423 12.2987 6.97095 12.2987ZM4.6805 8.41492C4.6805 6.82156 5.9751 5.62654 7.56846 5.62654C9.16183 5.62654 10.4564 6.92115 10.4564 8.41492C10.4564 10.0083 9.16183 11.2033 7.56846 11.2033C5.9751 11.2033 4.6805 9.9087 4.6805 8.41492Z",\n fill: "currentColor"\n }\n) }), XO = () => /* @__PURE__ */ c("svg", { xmlns: "http://www.w3.org/2000/svg", viewBox: "0 0 24 24", fill: "none", children: /* @__PURE__ */ c(\n "path",\n {\n d: "M18.9212 9.61007C19.917 8.81339 20.4149 7.71795 20.4149 6.42334C20.4149 4.23247 18.6224 2.43994 16.3319 2.43994C14.1411 2.43994 12.249 4.23247 12.249 6.42334C12.249 7.61836 12.7469 8.81339 13.7427 9.61007C12.5477 10.0084 11.3527 10.7055 10.556 11.7014C10.3568 11.6018 10.2573 11.6018 10.0581 11.5022C11.0539 10.7055 11.5519 9.61007 11.5519 8.31546C11.5519 6.12459 9.75934 4.33206 7.46888 4.33206C5.27801 4.33206 3.38589 6.12459 3.38589 8.31546C3.48548 9.51048 3.9834 10.7055 4.97925 11.5022C1.9917 12.3984 0 14.9877 0 18.0748V20.9628C0 21.2615 0.298755 21.5603 0.59751 21.5603H14.5394C14.8382 21.5603 15.1369 21.2615 15.1369 20.9628V19.6682H23.4025C23.7012 19.6682 24 19.3694 24 19.0706V16.1827C23.9004 13.1951 21.8091 10.4067 18.9212 9.61007Z",\n fill: "currentColor"\n }\n) }), UO = () => /* @__PURE__ */ c("svg", { viewBox: "0 0 24 24", fill: "none", xmlns: "http://www.w3.org/2000/svg", children: /* @__PURE__ */ c(\n "path",\n {\n fillRule: "evenodd",\n clipRule: "evenodd",\n d: "M8.04765 23.996C7.36348 23.9535 6.70303 23.4115 6.37664 22.6473L6.37616 22.6462C6.19194 22.2022 5.98205 21.4059 6.17244 20.2501C6.35614 19.1348 6.91151 17.6907 8.21249 15.9094H4.71979C3.36061 15.9094 2.24615 14.8131 2.24615 13.469C2.24615 12.9616 2.40956 12.487 2.67797 12.1019C1.69535 11.7694 0.990234 10.8742 0.990234 9.79317C0.990234 8.71216 1.69534 7.81692 2.67797 7.48439C2.40956 7.09935 2.24614 6.62469 2.24614 6.11731C2.24614 4.92438 3.13038 3.91586 4.27145 3.70586C4.01909 3.323 3.89452 2.86144 3.89452 2.40276C3.89452 1.06259 4.9663 -0.0387229 6.33067 0.00104425L12.6085 0.0010437C15.2516 0.00104347 17.63 1.46324 18.6126 3.6769L22.4202 3.6769C22.7132 3.6769 23.01 3.91572 23.01 4.26003V14.359C23.01 14.6519 22.7653 14.9421 22.4202 14.9421L17.5556 14.9421L13.467 18.1668C11.7987 19.4673 10.9447 20.8424 9.57003 23.0883C9.1877 23.594 8.73985 24.0481 8.04765 23.996ZM17.6777 4.4561C16.9211 2.4148 14.3222 1.40006 12.6477 1.40006L6.36816 1.39947C5.68424 1.39947 5.11333 1.93045 5.11333 2.63492C5.11333 3.3051 5.64946 3.87037 6.36816 3.87037C7.07608 3.87037 7.13969 5.03663 6.36816 5.03663H4.71978C4.03586 5.03663 3.46495 5.56761 3.46495 6.27208C3.46495 6.94226 4.00109 7.50753 4.71978 7.50753C5.4277 7.50753 5.49131 8.6738 4.71979 8.6738H3.50312C2.8192 8.6738 2.24829 9.20478 2.24829 9.90925C2.24829 10.5794 2.78443 11.1447 3.50312 11.1447H4.71979C5.4277 11.1447 5.49131 12.311 4.71979 12.311C4.03811 12.311 3.46495 12.8784 3.46495 13.5464C3.46495 14.2166 4.00109 14.7819 4.71979 14.7819H9.46869C9.98281 14.7819 10.2114 15.3588 9.91647 15.7465L9.91292 15.7512C8.29318 17.6751 7.63719 19.1667 7.41166 20.2406C7.18655 21.3124 7.38863 21.9752 7.49869 22.2464L7.49929 22.2479C7.68373 22.7207 8.00166 22.8688 8.13429 22.8688C8.39757 22.8688 8.5512 22.5079 8.67711 22.3221C10.0137 20.1608 10.9269 18.6842 12.7313 17.2836L16.9649 13.9214C17.0705 13.8203 17.2187 13.7758 17.3574 13.7758L21.8697 13.7758V4.84316L18.26 4.84316C17.9846 4.84316 17.7723 4.68957 17.679 4.45947L17.6777 4.4561Z",\n fill: "currentcolor"\n }\n) }), YO = () => /* @__PURE__ */ c("svg", { viewBox: "0 0 24 24", fill: "none", xmlns: "http://www.w3.org/2000/svg", children: /* @__PURE__ */ c(\n "path",\n {\n fillRule: "evenodd",\n clipRule: "evenodd",\n d: "M15.9526 0.00395192C16.6368 0.0465183 17.2972 0.588476 17.6236 1.3527L17.6241 1.35383C17.8083 1.7978 18.0182 2.59409 17.8278 3.74994C17.6441 4.86522 17.0887 6.30929 15.7878 8.09057H19.2805C20.6396 8.09057 21.7541 9.18689 21.7541 10.531C21.7541 11.0384 21.5907 11.513 21.3223 11.8981C22.3049 12.2306 23.01 13.1258 23.01 14.2068C23.01 15.2878 22.3049 16.1831 21.3223 16.5156C21.5907 16.9006 21.7541 17.3753 21.7541 17.8827C21.7541 19.0756 20.8699 20.0841 19.7288 20.2941C19.9812 20.677 20.1057 21.1386 20.1057 21.5972C20.1057 22.9374 19.0339 24.0387 17.6696 23.999H11.3918C8.7486 23.999 6.3703 22.5368 5.38763 20.3231H1.58001C1.28704 20.3231 0.990234 20.0843 0.990234 19.74V9.64103C0.990234 9.34811 1.23491 9.0579 1.58001 9.0579H6.44469L10.5333 5.83319C12.2016 4.5327 13.0555 3.15765 14.4302 0.911712C14.8126 0.406018 15.2604 -0.0481279 15.9526 0.00395192ZM6.32258 19.5439C7.04935 21.5049 9.07855 22.8279 11.3407 22.6011L11.3525 22.5999L17.6321 22.6005C18.316 22.6005 18.8869 22.0696 18.8869 21.3651C18.8869 20.6949 18.3508 20.1296 17.6321 20.1296C16.878 20.1296 16.8729 18.9634 17.6321 18.9634H19.2805C19.9644 18.9634 20.5353 18.4324 20.5353 17.7279C20.5353 17.0577 19.9992 16.4925 19.2805 16.4925C18.5264 16.4925 18.5213 15.3262 19.2805 15.3262H20.4971C21.181 15.3262 21.752 14.7952 21.752 14.0908C21.752 13.4206 21.2158 12.8553 20.4971 12.8553H19.2805C18.5264 12.8553 18.5213 11.689 19.2805 11.689C19.9621 11.689 20.5353 11.1216 20.5353 10.4536C20.5353 9.78341 19.9992 9.21813 19.2805 9.21813H14.5316C14.285 9.21813 14.09 9.07168 13.9939 8.88221C13.8887 8.67479 13.9477 8.43239 14.0838 8.25352L14.0873 8.24884C15.7071 6.32489 16.3631 4.83331 16.5886 3.75942C16.8137 2.68757 16.6116 2.02484 16.5016 1.75358L16.501 1.7521C16.3165 1.27931 15.9986 1.13124 15.866 1.13124C15.6027 1.13124 15.4757 1.41864 15.3231 1.67793C14.0981 3.75942 13.0733 5.31584 11.2689 6.71641L7.03537 10.0786C6.92976 10.1797 6.78158 10.2242 6.64289 10.2242H2.13054V19.1568H5.74021C6.01564 19.1568 6.22792 19.3104 6.32127 19.5405L6.32258 19.5439Z",\n fill: "currentcolor"\n }\n) }), GO = () => /* @__PURE__ */ c("svg", { viewBox: "0 0 24 24", fill: "none", xmlns: "http://www.w3.org/2000/svg", children: /* @__PURE__ */ c(\n "path",\n {\n fillRule: "evenodd",\n clipRule: "evenodd",\n d: "M0 12C0 5.37313 5.37313 -7.62939e-06 12 -7.62939e-06C18.6269 -7.62939e-06 24 5.37313 24 12C24 18.6269 18.6269 24 12 24C5.37313 24 0 18.6269 0 12ZM1.3233 12C1.3233 17.866 6.13397 22.6767 12 22.6767C17.9249 22.6767 22.6767 17.8664 22.6767 12C22.6767 6.13396 17.866 1.32329 12 1.32329C6.13397 1.32329 1.3233 6.13396 1.3233 12ZM12.6912 11.3677H17.6838C18.0443 11.3677 18.375 11.6984 18.375 12.059C18.375 12.4098 18.0938 12.691 17.743 12.691H12.0592C11.7084 12.691 11.4272 12.4098 11.4272 12.059V6.37517C11.4272 6.02437 11.7084 5.74314 12.0592 5.74314C12.41 5.74314 12.6912 6.02436 12.6912 6.37517V11.3677Z",\n fill: "currentColor"\n }\n) }), QO = () => /* @__PURE__ */ c("svg", { xmlns: "http://www.w3.org/2000/svg", viewBox: "0 0 24 24", fill: "none", children: /* @__PURE__ */ c(\n "path",\n {\n fillRule: "evenodd",\n clipRule: "evenodd",\n d: "M12 0C5.4 0 0 5.4 0 12C0 18.6 5.4 24 12 24C18.6 24 24 18.6 24 12C24 5.4 18.6 0 12 0ZM11.1 12.1V6.4C11.1 5.9 11.5 5.5 12 5.5C12.5 5.5 12.9 5.9 12.9 6.4V11.1H17.6C18.1 11.1 18.6 11.6 18.6 12.1C18.6 12.6 18.2 13 17.7 13H12C11.5 13 11.1 12.6 11.1 12.1Z",\n fill: "currentColor"\n }\n) }), ZO = () => /* @__PURE__ */ e1("svg", { viewBox: "0 0 24 24", fill: "none", xmlns: "http://www.w3.org/2000/svg", children: [\n /* @__PURE__ */ e1("g", { clipPath: "url(#clip0_2640_44855)", children: [\n /* @__PURE__ */ c(\n "path",\n {\n fillRule: "evenodd",\n clipRule: "evenodd",\n d: "M18.9 5.20001V1.50001H22.5V5.20001H18.9ZM17.4 5.90001V0.700008C17.4 0.300008 17.7 7.62939e-06 18.1 7.62939e-06H23.3C23.7 7.62939e-06 24 0.300008 24 0.700008V5.90001C24 6.30001 23.7 6.70001 23.3 6.70001H18.1C17.7 6.70001 17.3 6.30001 17.4 5.90001Z",\n fill: "currentColor"\n }\n ),\n /* @__PURE__ */ c(\n "path",\n {\n d: "M1 3.80001H13.7C14.3 3.80001 14.7 3.42501 14.7 3.05001C14.7 2.60001 14.2 2.30001 13.7 2.30001H1C0.4 2.30001 0 2.67501 0 3.05001C0 3.50001 0.4 3.80001 1 3.80001Z",\n fill: "currentColor"\n }\n ),\n /* @__PURE__ */ c(\n "path",\n {\n fillRule: "evenodd",\n clipRule: "evenodd",\n d: "M18.9 13.8V10.2H22.5V13.8H18.9ZM17.4 14.6V9.40001C17.4 9.00001 17.7 8.70001 18.1 8.70001H23.3C23.7 8.70001 24 9.00001 24 9.40001V14.6C24 15 23.7 15.3 23.3 15.3H18.1C17.7 15.3 17.3 15 17.4 14.6Z",\n fill: "currentColor"\n }\n ),\n /* @__PURE__ */ c(\n "path",\n {\n d: "M1 12.5H13.7C14.3 12.5 14.7 12.125 14.7 11.75C14.7 11.3 14.2 11 13.7 11H1C0.4 11 0 11.375 0 11.75C0 12.2 0.4 12.5 1 12.5Z",\n fill: "currentColor"\n }\n ),\n /* @__PURE__ */ c(\n "path",\n {\n fillRule: "evenodd",\n clipRule: "evenodd",\n d: "M18.9 22.5V18.9H22.5V22.5H18.9ZM17.4 23.3V18.1C17.4 17.7 17.7 17.4 18.1 17.4H23.3C23.7 17.4 24 17.7 24 18.1V23.3C24 23.7 23.7 24 23.3 24H18.1C17.7 24 17.3 23.7 17.4 23.3Z",\n fill: "currentColor"\n }\n ),\n /* @__PURE__ */ c(\n "path",\n {\n d: "M1 21.2H13.7C14.3 21.2 14.7 20.825 14.7 20.45C14.7 20 14.2 19.7 13.7 19.7H1C0.4 19.7 0 20.075 0 20.45C0 20.825 0.4 21.2 1 21.2Z",\n fill: "currentColor"\n }\n )\n ] }),\n /* @__PURE__ */ c("defs", { children: /* @__PURE__ */ c("clipPath", { id: "clip0_2640_44855", children: /* @__PURE__ */ c("rect", { width: "24", height: "24", fill: "currentColor" }) }) })\n] }), jO = () => /* @__PURE__ */ e1("svg", { viewBox: "0 0 24 24", fill: "none", xmlns: "http://www.w3.org/2000/svg", children: [\n /* @__PURE__ */ e1("g", { clipPath: "url(#clip0_2640_45013)", children: [\n /* @__PURE__ */ c(\n "path",\n {\n d: "M23.3 6.5H18.1C17.7001 6.5 17.3 6.11194 17.4 5.72388V0.679105C17.4 0.291045 17.7001 0 18.1 0H23.3C23.7 0 24 0.291045 24 0.679105V5.72388C24 6.11194 23.7 6.5 23.3 6.5Z",\n fill: "currentColor"\n }\n ),\n /* @__PURE__ */ c(\n "path",\n {\n d: "M13.7 4.05H1C0.400002 4.05 0 3.7 0 3.175C0 2.7375 0.400002 2.3 1 2.3H13.7C14.2 2.3 14.7 2.65 14.7 3.175C14.7 3.6125 14.3 4.05 13.7 4.05Z",\n fill: "currentColor"\n }\n ),\n /* @__PURE__ */ c(\n "path",\n {\n d: "M18.1 15.2H23.3C23.7 15.2 24 14.9045 24 14.5106V9.38939C24 8.99545 23.7 8.7 23.3 8.7H18.1C17.7001 8.7 17.4 8.99545 17.4 9.38939V14.5106C17.3 14.9045 17.7001 15.2 18.1 15.2Z",\n fill: "currentColor"\n }\n ),\n /* @__PURE__ */ c(\n "path",\n {\n d: "M13.7 12.75H1C0.400002 12.75 0 12.4 0 11.875C0 11.4375 0.400002 11 1 11H13.7C14.2 11 14.7 11.35 14.7 11.875C14.7 12.3125 14.3 12.75 13.7 12.75Z",\n fill: "currentColor"\n }\n ),\n /* @__PURE__ */ c(\n "path",\n {\n d: "M18.1 23.9H23.3C23.7 23.9 24 23.6045 24 23.2106V18.0894C24 17.6954 23.7 17.4 23.3 17.4H18.1C17.7001 17.4 17.4 17.6954 17.4 18.0894V23.2106C17.3 23.6045 17.7001 23.9 18.1 23.9Z",\n fill: "currentColor"\n }\n ),\n /* @__PURE__ */ c(\n "path",\n {\n d: "M13.7 21.45H1C0.400002 21.45 0 21.0125 0 20.575C0 20.1375 0.400002 19.7 1 19.7H13.7C14.2 19.7 14.7 20.05 14.7 20.575C14.7 21.0125 14.3 21.45 13.7 21.45Z",\n fill: "currentColor"\n }\n )\n ] }),\n /* @__PURE__ */ c("defs", { children: /* @__PURE__ */ c("clipPath", { id: "clip0_2640_45013", children: /* @__PURE__ */ c("rect", { width: "24", height: "24", fill: "currentColor" }) }) })\n] }), KO = () => /* @__PURE__ */ c("svg", { viewBox: "0 0 24 24", fill: "none", xmlns: "http://www.w3.org/2000/svg", children: /* @__PURE__ */ c(\n "path",\n {\n fillRule: "evenodd",\n clipRule: "evenodd",\n d: "M19.9005 1.11443H4.09954V22.8856H19.9005V1.11443ZM2.98511 1.05473C2.98511 0.472218 3.45732 0 4.03983 0H19.9602C20.5427 0 21.015 0.472217 21.015 1.05473V22.9453C21.015 23.5278 20.5427 24 19.9602 24H4.03983C3.45732 24 2.98511 23.5278 2.98511 22.9453V1.05473ZM8.64839 4.97512H15.3517C15.7309 4.97512 16.0398 5.26434 16.0398 5.63184C16.0398 5.99934 15.7309 6.28856 15.3517 6.28856H8.64839C8.26921 6.28856 7.96023 5.99934 7.96023 5.63184C7.96023 5.26434 8.26921 4.97512 8.64839 4.97512ZM8.64839 9.15442H15.3517C15.7309 9.15442 16.0398 9.44364 16.0398 9.81114C16.0398 10.1786 15.7309 10.4679 15.3517 10.4679H8.64839C8.26921 10.4679 7.96023 10.1786 7.96023 9.81114C7.96023 9.44364 8.26921 9.15442 8.64839 9.15442ZM8.64839 13.3337H15.3517C15.7309 13.3337 16.0398 13.6229 16.0398 13.9904C16.0398 14.3579 15.7309 14.6472 15.3517 14.6472H8.64839C8.26921 14.6472 7.96023 14.3579 7.96023 13.9904C7.96023 13.6229 8.26921 13.3337 8.64839 13.3337ZM8.64839 17.513H15.3517C15.7309 17.513 16.0398 17.8022 16.0398 18.1697C16.0398 18.5372 15.7309 18.8265 15.3517 18.8265H8.64839C8.26921 18.8265 7.96023 18.5372 7.96023 18.1697C7.96023 17.8022 8.26921 17.513 8.64839 17.513Z",\n fill: "currentColor"\n }\n) }), JO = () => /* @__PURE__ */ c("svg", { viewBox: "0 0 24 24", fill: "none", xmlns: "http://www.w3.org/2000/svg", children: /* @__PURE__ */ c(\n "path",\n {\n d: "M21.3902 1.30808H19.7256V0.590415C19.7256 0.264353 19.4526 0 19.1158 0H4.88423C4.54743 0 4.27438 0.264334 4.27438 0.590415V1.30808H2.60985C2.27303 1.30808 2 1.57241 2 1.89849V3.90579C2 6.72845 3.91432 9.34712 7.00508 10.7666C7.79788 11.6365 8.72791 12.3036 9.74669 12.7056V13.6518C9.74669 14.7888 9.46511 15.8966 8.97417 16.6911C8.72746 17.0904 8.21375 17.7517 7.50069 17.7921H5.71673C5.3799 17.7921 5.10689 18.0564 5.10689 18.3825V23.4096C5.10689 23.7357 5.3799 24 5.71673 24H18.2833C18.6201 24 18.8931 23.7357 18.8931 23.4096V18.3825C18.8931 18.0564 18.6201 17.7921 18.2833 17.7921H16.4992C15.7862 17.7517 15.2725 17.0904 15.0258 16.6911C14.5349 15.8966 14.2533 14.7888 14.2533 13.6518V12.7056C15.272 12.3036 16.2021 11.6365 16.9948 10.7667C20.0856 9.34714 22 6.72845 22 3.90577V1.89849C22 1.57241 21.727 1.30808 21.3902 1.30808ZM3.21971 3.90577V2.48889H4.2744V3.15986C4.2744 5.05089 4.68376 6.82074 5.394 8.32934C4.01555 7.11497 3.21971 5.54649 3.21971 3.90577ZM17.6735 22.8192H6.3266V18.9729H7.38449C7.40023 18.9741 7.4161 18.9749 7.43214 18.9749C7.46476 18.9749 7.49728 18.9742 7.52974 18.9729H16.4703C16.5027 18.9742 16.5352 18.9749 16.5679 18.9749C16.5839 18.9749 16.5998 18.9741 16.6155 18.9729H17.6735V22.8192ZM13.9792 17.2973C14.0894 17.4757 14.2066 17.6406 14.3297 17.7921H9.67031C9.79343 17.6406 9.91062 17.4757 10.0209 17.2973C10.6306 16.3106 10.9664 15.0159 10.9664 13.6518V13.0495C11.3046 13.1081 11.6496 13.1386 12 13.1386C12.3504 13.1386 12.6954 13.1081 13.0336 13.0495V13.6518C13.0336 15.0159 13.3694 16.3106 13.9792 17.2973ZM12 11.9578C10.4786 11.9578 9.02468 11.2364 7.85302 9.9133C7.84471 9.9033 7.8361 9.89348 7.82708 9.884C7.70353 9.74302 7.58314 9.59537 7.46618 9.4411C6.19446 7.76322 5.49407 5.5325 5.49407 3.15986V1.18083H18.5059V3.15986C18.5059 5.53252 17.8056 7.76322 16.5339 9.4411C16.4169 9.59537 16.2965 9.743 16.173 9.88396C16.1639 9.89352 16.1553 9.9034 16.1469 9.91346C14.9752 11.2365 13.5213 11.9578 12 11.9578ZM20.7803 3.90577C20.7803 5.5465 19.9845 7.11501 18.606 8.32942C19.3162 6.8208 19.7256 5.05091 19.7256 3.15986V2.48889H20.7803V3.90577Z",\n fill: "currentcolor"\n }\n) }), _O = () => /* @__PURE__ */ c("svg", { viewBox: "0 0 24 24", fill: "none", xmlns: "http://www.w3.org/2000/svg", children: /* @__PURE__ */ c(\n "path",\n {\n d: "M0.786885 5.02857C1.18033 5.02857 1.4951 4.72381 1.4951 4.34285V1.37143H11.3312V22.6286H8.26229C7.86885 22.6286 7.5541 22.9333 7.5541 23.3143C7.5541 23.6952 7.86885 24 8.26229 24H15.8164C16.2098 24 16.5246 23.6952 16.5246 23.3143C16.5246 22.9333 16.2098 22.6286 15.8164 22.6286H12.7476V1.37143H22.5836V4.34285C22.5836 4.72381 22.8984 5.02857 23.2918 5.02857C23.6853 5.02857 24 4.72381 24 4.34285V0.68571C24 0.304757 23.6853 0 23.2918 0H0.708216C0.314773 0 0 0.304757 0 0.68571V4.34285C0.0786885 4.72381 0.393443 5.02857 0.786885 5.02857Z",\n fill: "currentColor"\n }\n) }), $O = () => /* @__PURE__ */ c("svg", { viewBox: "0 0 24 24", fill: "none", xmlns: "http://www.w3.org/2000/svg", children: /* @__PURE__ */ c(\n "path",\n {\n d: "M20.4706 20.4706C20.549 20.3922 20.549 20.3922 20.549 20.3922C20.7059 20.2353 20.8628 20.1569 20.9412 20C22.902 17.8039 24 14.9804 24 12C24 5.41176 18.5882 0 12 0C9.01962 0 6.19608 1.09804 4 3.05882C3.84314 3.21568 3.68628 3.37255 3.60785 3.45098C3.60785 3.45098 3.52941 3.45098 3.52941 3.52941C3.52941 3.52941 3.52943 3.60783 3.451 3.60783C1.25492 5.80391 0 8.86274 0 12C0 18.5882 5.41178 24 12 24C15.2157 24 18.1961 22.6667 20.4706 20.4706ZM22.5882 12C22.5882 14.5098 21.6471 17.0196 20 18.902L5.17647 4.07842C7.05883 2.43136 9.56864 1.49019 12.0784 1.49019C17.8824 1.49019 22.5882 6.19607 22.5882 12ZM1.56863 12C1.56863 9.41176 2.50982 6.9804 4.15688 5.09804L18.9804 19.9216C17.098 21.5686 14.5883 22.5098 12.0784 22.5098C6.27453 22.5098 1.56863 17.8039 1.56863 12Z",\n fill: "currentColor"\n }\n) }), ef = () => /* @__PURE__ */ c("svg", { xmlns: "http://www.w3.org/2000/svg", viewBox: "0 0 24 24", fill: "none", children: /* @__PURE__ */ c(\n "path",\n {\n fillRule: "evenodd",\n clipRule: "evenodd",\n d: "M12 0C18.6 0 24 5.4 24 12C24 18.6 18.6 24 12 24C5.4 24 0 18.6 0 12C0 5.4 5.4 0 12 0ZM12 21.6C14.4 21.6 16.6 20.7 18.4 19.2L4.8 5.6C3.2 7.4 2.4 9.6 2.4 12C2.4 17.3 6.7 21.6 12 21.6ZM12 2.4C10.1 2.4 8.3 3 6.7 4L20 17.3C21 15.8 21.6 13.9 21.6 12C21.6 6.7 17.3 2.4 12 2.4Z",\n fill: "currentColor"\n }\n) }), tf = () => /* @__PURE__ */ e1("svg", { viewBox: "0 0 24 24", fill: "none", xmlns: "http://www.w3.org/2000/svg", children: [\n /* @__PURE__ */ e1("g", { clipPath: "url(#clip0_2721_61460)", children: [\n /* @__PURE__ */ c(\n "path",\n {\n fillRule: "evenodd",\n clipRule: "evenodd",\n d: "M0 1.12424C0 0.503339 0.503337 0 1.12424 0H15.2994C15.9203 0 16.4236 0.503338 16.4236 1.12424V8.21182C16.4236 8.56276 16.1391 8.84725 15.7882 8.84725C15.4373 8.84725 15.1528 8.56276 15.1528 8.21182V1.27088H1.27088V15.1528H8.21182C8.56276 15.1528 8.84725 15.4373 8.84725 15.7882C8.84725 16.1391 8.56276 16.4236 8.21182 16.4236H1.12424C0.503338 16.4236 0 15.9203 0 15.2994V1.12424ZM15.7882 9.47047C16.1391 9.47047 16.4236 9.75497 16.4236 10.1059V12C16.4236 12.3509 16.1391 12.6354 15.7882 12.6354C15.4373 12.6354 15.1528 12.3509 15.1528 12V10.1059C15.1528 9.75497 15.4373 9.47047 15.7882 9.47047ZM15.7882 13.2587C16.1391 13.2587 16.4236 13.5432 16.4236 13.8941V15.2994C16.4236 15.9203 15.9203 16.4236 15.2994 16.4236H13.8941C13.5432 16.4236 13.2587 16.1391 13.2587 15.7882C13.2587 15.4373 13.5432 15.1528 13.8941 15.1528H15.1528V13.8941C15.1528 13.5432 15.4373 13.2587 15.7882 13.2587ZM9.47047 15.7882C9.47047 15.4373 9.75497 15.1528 10.1059 15.1528H12C12.3509 15.1528 12.6354 15.4373 12.6354 15.7882C12.6354 16.1391 12.3509 16.4236 12 16.4236H10.1059C9.75497 16.4236 9.47047 16.1391 9.47047 15.7882Z",\n fill: "currentcolor"\n }\n ),\n /* @__PURE__ */ c(\n "path",\n {\n fillRule: "evenodd",\n clipRule: "evenodd",\n d: "M23.9998 22.8758C23.9998 23.4967 23.4964 24 22.8755 24L8.70036 24C8.07946 24 7.57612 23.4967 7.57612 22.8758L7.57612 15.7882C7.57612 15.4372 7.86062 15.1527 8.21156 15.1527C8.56251 15.1527 8.847 15.4372 8.847 15.7882L8.847 22.7291L22.7289 22.7291L22.7289 8.84724L15.7879 8.84724C15.437 8.84724 15.1525 8.56275 15.1525 8.2118C15.1525 7.86086 15.437 7.57637 15.7879 7.57637L22.8755 7.57637C23.4964 7.57637 23.9998 8.0797 23.9998 8.7006L23.9998 22.8758ZM8.21156 14.5295C7.86062 14.5295 7.57613 14.245 7.57613 13.8941L7.57613 12C7.57613 11.649 7.86062 11.3646 8.21156 11.3646C8.56251 11.3646 8.847 11.649 8.847 12L8.847 13.8941C8.847 14.245 8.56251 14.5295 8.21156 14.5295ZM8.21156 10.7413C7.86062 10.7413 7.57613 10.4568 7.57613 10.1059L7.57613 8.7006C7.57613 8.0797 8.07946 7.57637 8.70036 7.57637L10.1057 7.57637C10.4566 7.57637 10.7411 7.86086 10.7411 8.2118C10.7411 8.56275 10.4566 8.84724 10.1057 8.84724L8.847 8.84724L8.847 10.1059C8.847 10.4568 8.56251 10.7413 8.21156 10.7413ZM14.5293 8.2118C14.5293 8.56275 14.2448 8.84724 13.8938 8.84724L11.9998 8.84724C11.6488 8.84724 11.3643 8.56275 11.3643 8.2118C11.3643 7.86086 11.6488 7.57637 11.9998 7.57637L13.8938 7.57637C14.2448 7.57637 14.5293 7.86086 14.5293 8.2118Z",\n fill: "currentcolor"\n }\n )\n ] }),\n /* @__PURE__ */ c("defs", { children: /* @__PURE__ */ c("clipPath", { id: "clip0_2721_61460", children: /* @__PURE__ */ c("rect", { width: "24", height: "24", fill: "currentColor" }) }) })\n] }), of = () => /* @__PURE__ */ c("svg", { viewBox: "0 0 48 48", fill: "none", xmlns: "http://www.w3.org/2000/svg", children: /* @__PURE__ */ c(\n "path",\n {\n d: "M31.7896 13.2918C34.8191 13.2918 37.3666 15.8753 37.7108 19.2068C37.7797 19.5467 38.0551 19.8187 38.3994 19.7507C38.7436 19.6827 39.019 19.4108 38.9502 19.0708C38.5371 15.0595 35.4387 12 31.7896 12C27.7961 12 24.56 15.5354 24.56 19.9547V21.7904L9.61968 21.7903C9.2754 21.7903 9 22.0622 9 22.4021V35.3879C9 35.7279 9.2754 35.9999 9.61968 35.9999H29.3803C29.7246 35.9999 30 35.7279 30 35.3879V22.4021C30 22.0622 29.7246 21.7903 29.3803 21.7903L25.7994 21.7904V19.9547C25.8682 16.2833 28.4846 13.2918 31.7896 13.2918ZM28.7606 34.7761H10.3082V23.014H28.7606V34.7761Z",\n fill: "currentColor"\n }\n) }), rf = () => /* @__PURE__ */ c("svg", { viewBox: "0 0 24 24", fill: "none", xmlns: "http://www.w3.org/2000/svg", children: /* @__PURE__ */ c(\n "path",\n {\n fillRule: "evenodd",\n clipRule: "evenodd",\n d: "M11.9817 1.47793C12.1912 1.48365 12.3343 1.56659 12.4697 1.70118L18.0795 7.32423C18.2133 7.45729 18.2872 7.61456 18.2872 7.77912C18.2872 7.94368 18.2133 8.10095 18.0795 8.23401C17.9456 8.3671 17.7877 8.44035 17.6228 8.44035C17.4579 8.44035 17.2999 8.3671 17.1661 8.23401L12.575 3.66902V16.2692C12.575 16.6203 12.2921 16.9008 11.9403 16.9008C11.5962 16.9008 11.3056 16.6276 11.3056 16.3283V3.72819L6.71452 8.29318C6.64913 8.35819 6.57983 8.41084 6.49873 8.44668C6.41721 8.4827 6.32882 8.49951 6.22807 8.49951C6.12732 8.49951 6.03893 8.4827 5.95741 8.44668C5.87631 8.41084 5.80701 8.35819 5.74163 8.29318C5.60781 8.16012 5.55769 8.00585 5.55769 7.84129C5.55769 7.67674 5.60781 7.51646 5.74163 7.3834L11.4563 1.70118C11.5693 1.5888 11.7589 1.47185 11.9817 1.47793ZM22.7306 16.2105C22.7306 15.8593 23.0135 15.5788 23.3653 15.5788C23.5478 15.5788 23.7064 15.6692 23.8171 15.7878C23.9268 15.9053 24 16.0615 24 16.2105V21.8904C24 22.2415 23.7171 22.5221 23.3653 22.5221H0.634712C0.282953 22.5221 0 22.2415 0 21.8904V16.2105C0 15.8593 0.282954 15.5788 0.634712 15.5788C0.986471 15.5788 1.26942 15.8593 1.26942 16.2105V21.1996H22.7306V16.2105Z",\n fill: "currentColor"\n }\n) }), nf = () => /* @__PURE__ */ c("svg", { viewBox: "0 0 24 24", fill: "none", xmlns: "http://www.w3.org/2000/svg", children: /* @__PURE__ */ c(\n "path",\n {\n fillRule: "evenodd",\n clipRule: "evenodd",\n d: "M17.5684 9.706C17.0673 7.49522 14.7705 5.18901 11.9696 5.18901C10.1593 5.18901 8.40961 6.02864 7.36121 7.47979L7.35594 7.48709L7.34944 7.49332C7.16627 7.66884 6.95462 7.81419 6.66649 7.7462C6.37187 7.68979 6.02399 7.63463 5.6783 7.63463C3.23625 7.63463 1.26672 9.52792 1.26672 11.858C1.26672 14.188 3.23625 16.0813 5.6783 16.0813C6.02581 16.0813 6.31166 16.3492 6.31166 16.6923C6.31166 17.0354 6.02581 17.3034 5.6783 17.3034C2.54124 17.3034 0 14.8742 0 11.858C0 8.56962 3.05204 5.92068 6.58754 6.46182C7.91402 4.87234 9.94271 3.96692 12.029 3.96692C15.2451 3.96692 17.9353 6.00221 18.7486 8.90209C19.0436 8.85403 19.3311 8.80128 19.6261 8.80128C22.1091 8.80128 24.0588 10.7179 23.9986 12.9968C23.9979 15.3299 21.9911 17.2465 19.5668 17.2465C19.2193 17.2465 18.9334 16.9785 18.9334 16.6354C18.9334 16.2923 19.2193 16.0244 19.5668 16.0244C21.3572 16.0244 22.732 14.6987 22.732 13.0523C22.732 11.3491 21.2978 10.0234 19.5668 10.0234C19.2276 10.0234 18.8252 10.1325 18.4692 10.2462C18.1216 10.3572 17.6591 10.106 17.5684 9.706ZM12.5696 10.8741L15.3618 13.5494C15.4954 13.6775 15.5704 13.8299 15.5704 13.9907C15.5704 14.1514 15.4954 14.3038 15.3618 14.4319C15.2279 14.5602 15.0707 14.6301 14.9074 14.6301C14.744 14.6301 14.5869 14.5602 14.453 14.4319L12.7216 12.7728V19.422C12.7216 19.7651 12.444 20.0331 12.0965 20.0331C11.7567 20.0331 11.4549 19.7723 11.4549 19.4789V12.8297L9.72347 14.4888C9.58469 14.6218 9.38133 14.687 9.23939 14.687C9.03292 14.687 8.89031 14.6182 8.75531 14.4888C8.62164 14.3607 8.54671 14.2082 8.54671 14.0475C8.54671 13.8868 8.62164 13.7344 8.75531 13.6063L11.6065 10.8741C11.72 10.7653 11.8875 10.6733 12.0965 10.6784C12.2934 10.6831 12.4404 10.7503 12.5696 10.8741Z",\n fill: "currentcolor"\n }\n) }), af = () => /* @__PURE__ */ e1("svg", { xmlns: "http://www.w3.org/2000/svg", viewBox: "0 0 25 24", fill: "none", children: [\n /* @__PURE__ */ c(\n "path",\n {\n d: "M12.7 10.8C12.5 10.6 12.3 10.5 12 10.5C11.8 10.5 11.5 10.6 11.3 10.8L8.6 13.5C8.4 13.7 8.3 13.9 8.3 14.1C8.3 14.3 8.4 14.5 8.6 14.7C8.8 14.9 9 15 9.3 15C9.5 15 9.8 14.9 10 14.7L11.2 13.5V19.3C11.2 19.7 11.6 20.1 12.1 20.1C12.6 20.1 13 19.7 13 19.2V13.5L14.2 14.7C14.4 14.9 14.6 15 14.8 15C15 15 15.2 14.9 15.4 14.7C15.6 14.5 15.7 14.3 15.7 14.1C15.7 13.9 15.6 13.7 15.4 13.5L12.7 10.8Z",\n fill: "currentColor"\n }\n ),\n /* @__PURE__ */ c(\n "path",\n {\n d: "M22.8 10.1C21.9 9.2 20.7 8.7 19.5 8.7C19.3 8.7 19.1 8.7 18.8 8.8C17.8 5.9 15.2 4 12 4C9.9 4 7.9 4.9 6.6 6.4C6.3 6.4 6.1 6.3 5.8 6.3C2.6 6.4 0 8.9 0 12C0 15.1 2.6 17.6 5.8 17.6C6.3 17.6 6.7 17.2 6.7 16.7C6.7 16.2 6.3 15.8 5.8 15.8C3.6 15.8 1.8 14.1 1.8 12C1.8 9.9 3.6 8.2 5.8 8.2C6.1 8.2 6.5 8.3 6.7 8.3C6.8 8.3 6.8 8.3 6.9 8.3C7.2 8.3 7.5 8.1 7.7 7.9C8.7 6.6 10.3 5.8 12 5.8C14.6 5.8 16.7 8 17.2 10C17.3 10.4 17.7 10.8 18.2 10.8C18.3 10.8 18.4 10.8 18.5 10.8C18.8 10.7 19.2 10.6 19.5 10.6C21 10.6 22.3 11.8 22.3 13.3C22.3 14.8 21.1 15.9 19.5 15.9C19 15.9 18.6 16.3 18.6 16.8C18.6 17.3 19 17.7 19.5 17.7C22 17.7 24.1 15.7 24.1 13.3C24 12 23.6 10.9 22.8 10.1Z",\n fill: "currentColor"\n }\n )\n] }), sf = () => /* @__PURE__ */ c("svg", { viewBox: "0 0 24 24", fill: "none", xmlns: "http://www.w3.org/2000/svg", children: /* @__PURE__ */ c(\n "path",\n {\n d: "M18.9212 9.61007C19.917 8.81339 20.4149 7.71795 20.4149 6.42334C20.4149 4.23247 18.6224 2.43994 16.3319 2.43994C14.1411 2.43994 12.249 4.23247 12.249 6.42334C12.249 7.61836 12.7469 8.81339 13.7427 9.61007C12.5477 10.0084 11.3527 10.7055 10.556 11.7014C10.3568 11.6018 10.2573 11.6018 10.0581 11.5022C11.0539 10.7055 11.5519 9.61007 11.5519 8.31546C11.5519 6.12459 9.75934 4.33206 7.46888 4.33206C5.27801 4.33206 3.38589 6.12459 3.38589 8.31546C3.48548 9.51048 3.9834 10.7055 4.97925 11.5022C1.9917 12.3984 0 14.9877 0 18.0748V20.9628C0 21.2615 0.298755 21.5603 0.59751 21.5603H14.5394C14.8382 21.5603 15.1369 21.2615 15.1369 20.9628V19.6682H23.4025C23.7012 19.6682 24 19.3694 24 19.0706V16.1827C23.9004 13.1951 21.8091 10.4067 18.9212 9.61007ZM11.751 12.1993C12.8465 11.1038 14.3402 10.5063 15.834 10.5063H17.029C20.2158 10.5063 22.805 13.0955 22.805 16.1827V18.4731H15.1369V18.0748C15.0373 15.6848 13.7427 13.4939 11.751 12.1993ZM13.5436 6.52293C13.5436 4.92957 14.8382 3.73455 16.4315 3.73455C18.0249 3.73455 19.3195 5.02915 19.3195 6.52293C19.3195 8.11629 18.0249 9.31131 16.4315 9.31131C14.8382 9.31131 13.5436 8.01671 13.5436 6.52293ZM6.97095 12.2989H8.16597C8.76348 12.2989 9.46058 12.3984 10.0581 12.5976C10.3568 12.6972 10.6556 12.7968 10.8548 12.996C12.7469 13.9918 13.8423 15.8839 13.8423 17.9752V20.2657H1.19502V17.9752C1.19502 14.8881 3.78423 12.2989 6.97095 12.2989ZM4.6805 8.41505C4.6805 6.82168 5.9751 5.62666 7.56846 5.62666C9.16183 5.62666 10.4564 6.92127 10.4564 8.41505C10.4564 10.0084 9.16183 11.2034 7.56846 11.2034C5.9751 11.2034 4.6805 9.90882 4.6805 8.41505Z",\n fill: "currentColor"\n }\n) }), cf = () => /* @__PURE__ */ e1("svg", { viewBox: "0 0 24 24", fill: "none", xmlns: "http://www.w3.org/2000/svg", children: [\n /* @__PURE__ */ c(\n "path",\n {\n fillRule: "evenodd",\n clipRule: "evenodd",\n d: "M12 18.0505C16.8532 18.0505 21.3824 15.8852 23.8715 12.3987L23.8903 12.3723V12.3525C23.9064 12.3359 23.9451 12.2961 23.9451 12.2266L23.9452 12.2113C23.9507 12.2052 23.9585 12.197 23.9715 12.1836L23.9999 12.1542V11.8867L24 11.881C24.0001 11.859 24.0004 11.8221 23.983 11.786C23.9739 11.7672 23.962 11.7523 23.952 11.7407L23.944 11.7317C23.9422 11.7137 23.938 11.693 23.9282 11.6727C23.919 11.6538 23.9072 11.6389 23.8971 11.6273C23.8887 11.6177 23.8784 11.6069 23.8674 11.5956C21.4316 8.11159 16.8494 5.94954 12 5.94954C6.33778 5.94954 1.79896 8.66932 6.8518e-05 11.9516C1.84132 15.5317 8.28218 18.0505 12 18.0505ZM1.48934 11.9516C3.72521 14.8892 7.7787 16.8285 12.0548 16.8285C16.3313 16.8285 20.3851 14.9947 22.6209 12.0567C20.3851 9.11867 16.3313 7.28478 12.0548 7.28478C7.77918 7.28478 3.77864 9.01234 1.48934 11.9516Z",\n fill: "currentColor"\n }\n ),\n /* @__PURE__ */ c(\n "path",\n {\n fillRule: "evenodd",\n clipRule: "evenodd",\n d: "M12.055 8.66932C10.2963 8.66932 8.82852 10.1908 8.82852 11.9999C8.82852 13.809 10.2963 15.3305 12.055 15.3305C13.8136 15.3305 15.2814 13.809 15.2814 11.9999C15.2814 10.1908 13.8136 8.66932 12.055 8.66932ZM10.0175 11.9999C10.0175 13.1921 10.9607 14.1087 12.055 14.1087C13.1475 14.1087 14.0924 13.1371 14.0924 11.9999C14.0924 10.8078 13.1492 9.89121 12.055 9.89121C10.9092 9.89121 10.0175 10.861 10.0175 11.9999Z",\n fill: "currentColor"\n }\n )\n] }), lf = () => /* @__PURE__ */ c("svg", { xmlns: "http://www.w3.org/2000/svg", viewBox: "0 0 24 24", fill: "none", children: /* @__PURE__ */ c(\n "path",\n {\n fillRule: "evenodd",\n clipRule: "evenodd",\n d: "M24 11.8C24 11.7 24 11.7 24 11.7C21.4 8.2 16.8 6 12 6C6.3 6 1.8 8.7 0 12C1.8 15.6 8.3 18.1 12 18.1C16.8 18.1 21.4 15.9 23.9 12.4L24 12.3V11.8C24 11.9 24 11.9 24 11.8ZM12.1 15.4C10.3 15.4 8.9 13.9 8.9 12.1C8.9 10.3 10.4 8.8 12.1 8.8C13.9 8.8 15.3 10.3 15.3 12.1C15.3 13.9 13.8 15.4 12.1 15.4Z",\n fill: "currentColor"\n }\n) }), pf = () => /* @__PURE__ */ c("svg", { viewBox: "0 0 24 24", fill: "none", xmlns: "http://www.w3.org/2000/svg", children: /* @__PURE__ */ c(\n "path",\n {\n fillRule: "evenodd",\n clipRule: "evenodd",\n d: "M0.000244141 17.3467L0.522877 18.392L4.79317 16.2568C7.25769 17.5721 10.1626 18.3582 12.2177 18.3582C16.9695 18.3582 21.404 16.2382 23.841 12.8245L23.8594 12.7987V12.7793C23.8752 12.7631 23.9131 12.7241 23.9131 12.6561L23.9132 12.6411C23.9186 12.635 23.9263 12.6271 23.939 12.6139L23.9668 12.5852V12.3232L23.9668 12.3177C23.967 12.2962 23.9673 12.26 23.9502 12.2247C23.9413 12.2062 23.9297 12.1916 23.9198 12.1803L23.912 12.1715C23.9103 12.1538 23.9062 12.1336 23.8965 12.1137C23.8876 12.0953 23.876 12.0806 23.8661 12.0693C23.8579 12.0598 23.8478 12.0493 23.8371 12.0382C22.8817 10.6717 21.589 9.51291 20.0774 8.6147L24.0002 6.6533L23.4776 5.60803L18.8053 7.94417C16.8178 7.02064 14.5493 6.51018 12.2177 6.51018C6.67382 6.51018 2.22986 9.17311 0.468573 12.3868C1.08247 13.5805 2.2186 14.6536 3.59384 15.5499L0.000244141 17.3467ZM5.97 15.6684C7.84779 16.6168 10.0283 17.1618 12.2714 17.1618C16.4585 17.1618 20.4275 15.3663 22.6166 12.4897C21.624 11.1854 20.2655 10.1033 18.6866 9.3101L15.1386 11.0841C15.3256 11.4977 15.4305 11.9556 15.4305 12.4341C15.4305 14.2054 13.9934 15.6951 12.2715 15.6951C11.0659 15.6951 9.99989 14.9648 9.46904 13.9189L5.97 15.6684ZM9.13101 12.7813L4.75347 14.9701C3.64306 14.2496 2.67963 13.376 1.92672 12.3868C4.16817 9.50896 8.0851 7.81751 12.2714 7.81751C14.0188 7.81751 15.7282 8.13024 17.2862 8.70376L14.4698 10.1119C13.8977 9.53408 13.1191 9.17311 12.2715 9.17311C10.5496 9.17311 9.1125 10.6628 9.1125 12.4341C9.1125 12.5512 9.11878 12.6671 9.13101 12.7813ZM10.5075 13.3997C10.8473 14.0612 11.5233 14.4988 12.2715 14.4988C13.3413 14.4988 14.2664 13.5476 14.2664 12.4341C14.2664 12.1364 14.2063 11.8562 14.099 11.6039L10.5075 13.3997ZM13.3265 10.6836L10.2893 12.2022C10.4003 11.1905 11.2283 10.3695 12.2715 10.3695C12.6537 10.3695 13.0171 10.4837 13.3265 10.6836Z",\n fill: "currentColor"\n }\n) }), df = () => /* @__PURE__ */ c("svg", { xmlns: "http://www.w3.org/2000/svg", viewBox: "0 0 25 24", fill: "none", children: /* @__PURE__ */ c(\n "path",\n {\n fillRule: "evenodd",\n clipRule: "evenodd",\n d: "M24 12.2C24 12.1 24 12.1 24 12.1C23.2 10.9 22.2 9.9 20.9 9.1L23.6 7.8C24.1 7.6 24.2 7 24 6.6C23.7 6.2 23.4 6 23.1 6C23 6 22.8 6 22.7 6.1L19 8C16.9 7 14.5 6.4 12 6.4C6.3 6.4 1.8 9.1 0 12.4C0.7 13.7 1.9 14.8 3.4 15.8L0.5 17.2C0 17.4 -0.1 18 0.1 18.4C0.3 18.7 0.6 18.9 0.9 18.9C1 18.9 1.2 18.9 1.3 18.8L5.3 16.8C7.6 17.9 10.1 18.5 12 18.5C16.8 18.5 21.4 16.3 23.9 12.8L24 12.7V12.2ZM8.8 12.4C8.8 10.6 10.3 9.1 12 9.1C12.9 9.1 13.8 9.5 14.4 10.2L8.9 13C8.8 12.8 8.8 12.6 8.8 12.4ZM12.1 15.8C11.1 15.8 10.3 15.3 9.7 14.6L15.3 11.8C15.3 12 15.4 12.2 15.4 12.4C15.3 14.2 13.8 15.8 12.1 15.8Z",\n fill: "currentColor"\n }\n) }), bf = () => /* @__PURE__ */ c("svg", { viewBox: "0 0 24 24", fill: "none", xmlns: "http://www.w3.org/2000/svg", children: /* @__PURE__ */ c(\n "path",\n {\n fillRule: "evenodd",\n clipRule: "evenodd",\n d: "M13.9879 3.68144C13.5619 3.39638 12.9938 3.46767 12.5678 3.75273L7.38448 6.95966C6.39041 7.60105 5.25434 7.8861 4.18927 7.8861H2.76918C1.20707 7.8861 0 9.38267 0 11.2356V12.7321C0 14.585 1.27808 16.0816 2.76918 16.0816H3.55023C5.11233 16.0816 6.60342 16.5091 8.02352 17.4356L12.5678 20.2862C12.7808 20.4287 13.0648 20.5 13.3489 20.5C13.5619 20.5 13.8459 20.4287 14.0589 20.2862C14.6269 20.0011 14.911 19.3598 14.911 18.6471V5.24928C14.84 4.6079 14.4849 3.9665 13.9879 3.68144ZM13.4909 18.6471C13.4909 18.8609 13.4199 19.0747 13.2779 19.0747H13.2068L8.66255 16.2241C7.10045 15.2264 5.32535 14.7275 3.55023 14.7275H2.69817C1.91712 14.7275 1.20707 13.8011 1.20707 12.7321V11.2356C1.20707 10.1666 1.84611 9.24011 2.69817 9.24011H4.11826C5.46735 9.24011 6.81644 8.81253 8.02352 8.09988L13.2068 4.89296H13.2779L13.2779 4.89299C13.3489 4.96426 13.4909 5.10676 13.4909 5.32053V18.6471ZM20.5918 12.0197C20.5918 10.2381 19.4557 8.74151 17.8226 8.17139C17.4676 8.02886 17.1126 8.24268 16.9706 8.59901C16.8286 8.95533 17.0416 9.31167 17.3966 9.4542C18.5327 9.81052 19.2427 10.8795 19.2427 12.091C19.2427 13.3025 18.4617 14.3002 17.3966 14.7278C17.0416 14.8703 16.8286 15.2266 16.9706 15.583C17.0416 15.868 17.3256 16.0105 17.6096 16.0105H17.8226C19.4557 15.2979 20.5918 13.7301 20.5918 12.0197ZM18.0356 5.32063C18.1776 4.9643 18.5326 4.75052 18.8877 4.89305C21.9409 5.89076 23.929 8.74136 24 12.0195C24 15.2977 21.9409 18.1483 18.8877 19.146H18.6747C18.3907 19.146 18.1066 19.0035 18.0356 18.7185C17.9646 18.3621 18.1066 18.0058 18.4617 17.8633C20.9468 17.0081 22.6509 14.6563 22.6509 12.0195C22.6509 9.38274 20.9468 7.03099 18.4617 6.17581C18.1066 6.03328 17.8936 5.67695 18.0356 5.32063Z",\n fill: "currentColor"\n }\n) }), Mf = () => /* @__PURE__ */ c("svg", { viewBox: "0 0 24 24", fill: "none", xmlns: "http://www.w3.org/2000/svg", children: /* @__PURE__ */ c(\n "path",\n {\n fillRule: "evenodd",\n clipRule: "evenodd",\n d: "M14.3169 3.75273C14.7514 3.46767 15.3307 3.39638 15.7652 3.68144C16.3445 3.9665 16.7065 4.6079 16.7065 5.24928V18.6471C16.7065 19.3598 16.4169 20.0011 15.8376 20.2862C15.6203 20.4287 15.3307 20.5 15.1135 20.5C14.8238 20.5 14.5342 20.4287 14.3169 20.2862L9.68255 17.4356C8.23431 16.5091 6.71367 16.0816 5.1206 16.0816H4.32404C2.80339 16.0816 1.5 14.585 1.5 12.7321V11.2356C1.5 9.38267 2.73098 7.8861 4.32404 7.8861H5.77228C6.85846 7.8861 8.01706 7.60105 9.03082 6.95966L14.3169 3.75273ZM15.1135 19.0747C15.2583 19.0747 15.3307 18.8609 15.3307 18.6471H15.4031V5.32053C15.4031 5.10679 15.2583 4.96429 15.1859 4.89301L15.1858 4.89296H15.1135L9.82738 8.09988C8.59638 8.81253 7.22055 9.24011 5.84472 9.24011H4.39648C3.52754 9.24011 2.8758 10.1666 2.8758 11.2356V12.7321C2.8758 13.8011 3.59995 14.7275 4.39648 14.7275H5.193C7.0033 14.7275 8.81361 15.2264 10.4067 16.2241L15.0411 19.0747H15.1135ZM18.807 8.52762C18.9518 8.1713 19.3139 7.95753 19.6759 8.10006C21.3414 8.67017 22.5 10.238 22.5 12.0908C22.5 13.8724 21.3414 15.369 19.6759 15.9391H19.4587C19.1691 15.9391 18.8794 15.7966 18.807 15.5115C18.6622 15.1552 18.8794 14.7989 19.2415 14.6564C20.3277 14.2288 21.1242 13.2311 21.1242 12.0196C21.1242 10.8081 20.4001 9.73912 19.2415 9.3828C18.8794 9.24027 18.6622 8.88394 18.807 8.52762Z",\n fill: "currentColor"\n }\n) }), Af = () => /* @__PURE__ */ c("svg", { viewBox: "0 0 24 24", fill: "none", xmlns: "http://www.w3.org/2000/svg", children: /* @__PURE__ */ c(\n "path",\n {\n fillRule: "evenodd",\n clipRule: "evenodd",\n d: "M12.4572 3.75273C12.8794 3.46767 13.4425 3.39638 13.8647 3.68144C14.4278 3.9665 14.7797 4.6079 14.7797 5.24928V18.6471C14.7797 19.3598 14.4982 20.0011 13.9351 20.2862C13.724 20.4287 13.4425 20.5 13.2314 20.5C12.9498 20.5 12.6683 20.4287 12.4572 20.2862L7.95288 17.4356C6.54529 16.5091 5.06733 16.0816 3.51898 16.0816H2.74478C1.26681 16.0816 0 14.585 0 12.7321V11.2356C0 9.38267 1.19643 7.8861 2.74478 7.8861H4.15237C5.20806 7.8861 6.33414 7.60105 7.31945 6.95966L12.4572 3.75273ZM13.2314 19.0747C13.3721 19.0747 13.4425 18.8609 13.4425 18.6471H13.5128V5.32053C13.5128 5.10674 13.3721 4.96424 13.3017 4.89297L13.3017 4.89296H13.2314L8.09365 8.09988C6.8972 8.81253 5.55999 9.24011 4.22277 9.24011H2.81518C1.97063 9.24011 1.33719 10.1666 1.33719 11.2356V12.7321C1.33719 13.8011 2.04101 14.7275 2.81518 14.7275H3.58934C5.34883 14.7275 7.10833 15.2264 8.65668 16.2241L13.1609 19.0747H13.2314ZM22.7332 9.45415C23.0147 9.16908 23.3666 9.16908 23.6481 9.45415C23.9296 9.73921 23.9296 10.1668 23.7889 10.3806L21.8886 12.3048L23.7889 14.229C24.0704 14.514 24.0704 14.8704 23.7889 15.1555C23.6481 15.298 23.437 15.3692 23.2962 15.3692C23.0851 15.3692 22.9443 15.298 22.8035 15.1555L20.9033 13.2313L19.0031 15.1555C18.8623 15.298 18.6512 15.3692 18.5104 15.3692C18.2993 15.3692 18.1585 15.298 18.0177 15.1555C17.7362 14.8704 17.7362 14.514 18.0177 14.229L19.918 12.3048L18.0177 10.3806C17.7362 10.0955 17.7362 9.73921 18.0177 9.45415C18.2992 9.16908 18.6511 9.16908 18.9327 9.45415L20.8329 11.3783L22.7332 9.45415Z",\n fill: "currentColor"\n }\n) }), uf = () => /* @__PURE__ */ c("svg", { viewBox: "0 0 24 24", fill: "none", xmlns: "http://www.w3.org/2000/svg", children: /* @__PURE__ */ c(\n "path",\n {\n fillRule: "evenodd",\n clipRule: "evenodd",\n d: "M17.077 0.539978V4.25998C19.7557 5.87998 21.5 8.75999 21.5 12C21.5 15.24 19.6935 18.12 17.0148 19.74V23.46C17.0148 23.76 16.7656 24 16.4541 24H7.54591C7.23443 24 6.98525 23.76 6.98525 23.46V19.74C4.30656 18.12 2.5 15.24 2.5 12C2.5 8.75999 4.30656 5.87998 6.98525 4.25998V0.539978C6.98525 0.239978 7.23443 0 7.54591 0H16.5164C16.8279 0 17.077 0.239978 17.077 0.539978ZM15.8934 1.13998H8.16886V3.71997C9.35246 3.17997 10.6607 2.87999 12.0312 2.87999C13.4017 2.87999 14.7098 3.17997 15.8934 3.71997V1.13998ZM8.10656 22.98H15.8311V20.4C14.6475 20.94 13.3394 21.24 11.9689 21.24C10.5984 21.24 9.29016 20.94 8.10656 20.4V22.98ZM3.6836 12.06C3.6836 16.5 7.42132 20.1 12.0312 20.1C16.641 20.1 20.3787 16.5 20.3787 12.06C20.3787 7.61998 16.641 4.01997 12.0312 4.01997C7.42132 4.01997 3.6836 7.61998 3.6836 12.06ZM12.0311 5.75977C12.3426 5.75977 12.5918 5.99977 12.5918 6.29976H12.6541V11.5195H18.0113C18.3227 11.5195 18.5719 11.7595 18.5719 12.0595C18.5719 12.3595 18.3227 12.5995 18.0113 12.5995H12.0311C11.7197 12.5995 11.4705 12.3595 11.4705 12.0595V6.29976C11.4705 5.99977 11.7197 5.75977 12.0311 5.75977Z",\n fill: "currentColor"\n }\n) }), zf = () => /* @__PURE__ */ c("svg", { viewBox: "0 0 24 24", fill: "none", xmlns: "http://www.w3.org/2000/svg", children: /* @__PURE__ */ c(\n "path",\n {\n fillRule: "evenodd",\n clipRule: "evenodd",\n d: "M1.4 1.4V9.6H6.6V1.4H1.4ZM1 0C0.447715 0 0 0.447715 0 1V10C0 10.5523 0.447715 11 1 11H7C7.55228 11 8 10.5523 8 10V1C8 0.447715 7.55228 0 7 0H1ZM1.4 22.6V14.4H12.6V22.6H1.4ZM0 14C0 13.4477 0.447715 13 1 13H13C13.5523 13 14 13.4477 14 14V23C14 23.5523 13.5523 24 13 24H1C0.447716 24 0 23.5523 0 23V14ZM17.4 22.6V14.4H22.6V22.6H17.4ZM16 14C16 13.4477 16.4477 13 17 13H23C23.5523 13 24 13.4477 24 14V23C24 23.5523 23.5523 24 23 24H17C16.4477 24 16 23.5523 16 23V14ZM11.4 9.6V1.4H22.6V9.6H11.4ZM10 1C10 0.447715 10.4477 0 11 0H23C23.5523 0 24 0.447715 24 1V10C24 10.5523 23.5523 11 23 11H11C10.4477 11 10 10.5523 10 10V1Z",\n fill: "currentColor"\n }\n) }), hf = () => /* @__PURE__ */ c("svg", { viewBox: "0 0 24 24", fill: "none", xmlns: "http://www.w3.org/2000/svg", children: /* @__PURE__ */ c(\n "path",\n {\n fillRule: "evenodd",\n clipRule: "evenodd",\n d: "M23.9998 20.3043C23.9998 20.6906 23.6851 20.9996 23.2916 20.9996C22.8982 20.9996 22.5835 20.6906 22.5835 20.3043V3.69526C22.5835 3.30901 22.8982 3 23.2916 3C23.6851 3 23.9998 3.30901 23.9998 3.69526V20.3043ZM17.6261 20.9997C18.0195 20.9997 18.3343 20.6907 18.3343 20.3044V6.47643C18.3343 6.09017 18.0195 5.78117 17.6261 5.78117C17.2327 5.78117 16.918 6.09017 16.918 6.47643V20.3044C16.918 20.6907 17.2327 20.9997 17.6261 20.9997ZM12.0392 8.48507C12.4327 8.48507 12.7474 8.79407 12.7474 9.18033V20.2273C12.7474 20.6136 12.4327 20.9226 12.0392 20.9226C11.6458 20.9226 11.3311 20.6136 11.3311 20.2273V9.18033C11.3311 8.79407 11.6458 8.48507 12.0392 8.48507ZM5.66553 11.9615V20.3047C5.66553 20.6909 5.98024 21 6.37367 21C6.7671 21 7.08187 20.6909 7.08187 20.3047V11.9615C7.08187 11.5753 6.7671 11.2663 6.37367 11.2663C5.98024 11.2663 5.66553 11.5753 5.66553 11.9615ZM0.708146 21C1.10158 21 1.41634 20.691 1.41634 20.3047V14.7426C1.41634 14.3564 1.10158 14.0473 0.708146 14.0473C0.314715 14.0473 0 14.3564 0 14.7426V20.3047C0 20.691 0.314715 21 0.708146 21Z",\n fill: "currentColor"\n }\n) }), Of = () => /* @__PURE__ */ c("svg", { viewBox: "0 0 24 24", fill: "none", xmlns: "http://www.w3.org/2000/svg", children: /* @__PURE__ */ c(\n "path",\n {\n d: "M12.1438 1C12.0719 1 12.0719 1 12 1C5.96081 1 1 5.96078 1 12C1 18.0392 5.96081 23 12 23C18.0392 23 23 18.0392 23 12C23 5.96078 18.183 1.0719 12.1438 1ZM21.634 11.281H17.2484C17.1046 7.97385 15.8104 4.88236 13.7255 2.43791C18.0392 3.22876 21.3464 6.82353 21.634 11.281ZM12.0719 21.2745C9.77125 18.9739 8.33332 15.8824 8.18953 12.6471H15.9543C15.7386 15.8824 14.3726 18.9739 12.0719 21.2745ZM8.18953 11.281C8.33332 8.04575 9.69935 4.95424 12.0719 2.65359C14.3726 4.95424 15.8105 8.04575 15.9543 11.281H8.18953ZM10.3464 2.50979C8.18953 4.95423 6.96734 8.04573 6.82355 11.3529H2.43791C2.72549 6.82351 6.03267 3.22874 10.3464 2.50979ZM2.43791 12.6471H6.82355C6.96734 15.9543 8.26143 19.0458 10.3464 21.4902C6.03267 20.6994 2.72549 17.1046 2.43791 12.6471ZM13.7255 21.4902C15.8823 19.0458 17.1046 15.9543 17.2484 12.6471H21.634C21.3464 17.1046 18.0392 20.6994 13.7255 21.4902Z",\n fill: "currentColor"\n }\n) }), ff = () => /* @__PURE__ */ c("svg", { viewBox: "0 0 24 24", fill: "none", xmlns: "http://www.w3.org/2000/svg", children: /* @__PURE__ */ c(\n "path",\n {\n fillRule: "evenodd",\n clipRule: "evenodd",\n d: "M0 8.18029C0 3.65071 3.64043 0 8.15729 0C12.6741 0 16.3146 3.6507 16.4494 8.24789C16.4494 10.2761 15.7079 12.169 14.4944 13.5887L16.5843 15.6845L16.9213 15.3465C17.191 15.0761 17.5281 15.0761 17.7977 15.3465L23.7977 21.3634C24.0674 21.6338 24.0674 21.9718 23.7977 22.2423L23.4607 22.5803L23.7977 22.9183C24.0674 23.1887 24.0674 23.5268 23.7977 23.7972C23.6629 23.9324 23.5281 24 23.3258 24C23.1236 24 22.9887 23.9324 22.8539 23.7972L22.5168 23.4592L22.1798 23.7972C22.0449 23.9324 21.8427 24 21.7079 24C21.5056 24 21.3708 23.9324 21.236 23.7972L15.2359 17.7803C15.1011 17.6451 15.0337 17.4423 15.0337 17.3071C15.0337 17.1042 15.1011 16.969 15.2359 16.8338L15.573 16.4958L13.4831 14.4C12 15.6169 10.1798 16.3606 8.15729 16.3606C3.64043 16.3606 0 12.7099 0 8.18029ZM21.9775 22.1071L22.3146 21.769L17.1236 16.6986L16.5169 17.3071L21.6404 22.4451L21.9775 22.1071ZM8.15729 1.28451C4.38201 1.28451 1.28087 4.39437 1.28087 8.18029C1.28087 11.9662 4.38201 15.0761 8.15729 15.0761C11.9326 15.0761 15.0337 11.9662 15.0337 8.18029C15.0337 4.39437 11.9326 1.28451 8.15729 1.28451ZM8.76392 7.50417H10.6515C11.056 7.50417 11.2582 7.84219 11.2582 8.18021C11.2582 8.51823 10.9886 8.78864 10.6515 8.78864H8.76392V10.6139C8.76392 10.952 8.49425 11.2224 8.15718 11.2224C7.82011 11.2224 7.55048 10.952 7.55048 10.6139V8.72104H5.66285C5.32578 8.72104 5.05615 8.45062 5.05615 8.11261C5.05615 7.77459 5.32578 7.50417 5.66285 7.50417H7.55048V5.61127C7.55048 5.27325 7.82011 5.00284 8.15718 5.00284C8.49425 5.00284 8.76392 5.27325 8.76392 5.61127V7.50417Z",\n fill: "currentColor"\n }\n) }), gf = () => /* @__PURE__ */ c("svg", { viewBox: "0 0 24 24", fill: "none", xmlns: "http://www.w3.org/2000/svg", children: /* @__PURE__ */ c(\n "path",\n {\n fillRule: "evenodd",\n clipRule: "evenodd",\n d: "M13.4237 14.4676C11.9322 15.6845 10.1017 16.4282 8.0678 16.4282C3.52543 16.4282 0 12.7099 0 8.18028C0 3.6507 3.66108 0 8.20344 0C12.7458 0 16.4068 3.6507 16.4068 8.18028C16.4068 10.2084 15.661 12.1014 14.4407 13.5211L16.5424 15.6169L16.8813 15.2789C17.0847 15.0761 17.5593 15.0761 17.7627 15.2789L23.7966 21.2958C23.9322 21.431 24 21.6338 24 21.769C24 21.9718 23.9322 22.107 23.7966 22.2423L23.4576 22.5803L23.7966 22.9183C24.0678 23.1887 24.0678 23.5268 23.7966 23.7972C23.661 23.9324 23.5254 24 23.322 24C23.1186 24 22.9831 23.9324 22.8475 23.7972L22.5085 23.4592L22.1695 23.7972C22.0339 23.9324 21.8983 24 21.6949 24C21.4915 24 21.3559 23.9324 21.2203 23.7972L15.1864 17.7803C14.9152 17.5099 14.9152 17.1718 15.1864 16.9014L15.5254 16.5634L13.4237 14.4676ZM22.3051 21.769L17.1525 16.631L16.8813 16.9014L16.5424 17.2394L21.6949 22.3775L22.3051 21.769ZM14.9831 8.18028C14.9831 4.39437 11.8644 1.28451 8.0678 1.28451C4.27119 1.28451 1.15259 4.39437 1.15259 8.18028C1.15259 11.9662 4.27119 15.0761 8.0678 15.0761C11.8644 15.0761 14.9831 11.9662 14.9831 8.18028ZM10.5762 8.85631H5.55939C5.22041 8.85631 4.94922 8.58589 4.94922 8.24787C4.94922 7.90985 5.22041 7.63943 5.55939 7.63943H10.5762C10.9152 7.63943 11.1863 7.90985 11.1863 8.24787C11.1863 8.58589 10.9152 8.85631 10.5762 8.85631Z",\n fill: "currentColor"\n }\n) }), hl = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({\n __proto__: null,\n Alert: pu,\n AlertFilled: du,\n ArrowBottom: bu,\n ArrowLeft: Mu,\n ArrowRight: Au,\n ArrowUp: uu,\n Attachment: zu,\n BarGraph: hu,\n BarGraphFilled: Ou,\n BatteryEmpty: fu,\n BatteryFull: gu,\n Bell: Cu,\n BellFilled: mu,\n BellOff: Lu,\n Bin: vu,\n BinFilled: qu,\n BinOculars: wu,\n Blocks: yu,\n Break: xu,\n BriefCaseBack: Wu,\n BriefCaseBackFilled: Ru,\n BriefCaseFront: Bu,\n Broadcast: Su,\n Bubbles: Eu,\n BubblesFilled: ku,\n Calendar: Nu,\n Camera: Tu,\n Case: Iu,\n Cases: Du,\n Chains: Hu,\n CheckMark: Vu,\n CheckMarkFilled: Pu,\n ChevronDown: Fu,\n ChevronDownDropdown: Xu,\n ChevronLeft: Yu,\n ChevronLeftThick: Zu,\n ChevronRight: Gu,\n ChevronRightThick: Qu,\n ChevronUp: ju,\n ChevronUpDropdown: Uu,\n Close: Ku,\n CloudFilled: _u,\n Code: Ju,\n CogWheel: $u,\n CogWheelFilled: ez,\n ColumnOptionFilled: oz,\n ColumnOptions: tz,\n Columns: rz,\n ColumnsFilled: nz,\n Combine: iz,\n Corporate: az,\n Cross: sz,\n CrossFilled: cz,\n DarkModeSwitcherFilled: pz,\n Decrease: lz,\n Destination: dz,\n Dialogue: bz,\n DialogueFilled: Mz,\n Disabled: Az,\n DisabledFilled: uz,\n Disconnect: zz,\n DocFile: hz,\n Document: Oz,\n DocumentFilled: fz,\n Dollar: gz,\n DoubleChevronLeft: Cz,\n DoubleChevronRight: mz,\n Download: Lz,\n DownloadCloud: qz,\n DownloadCloudFilled: yz,\n DownloadFilled: vz,\n Error: wz,\n ErrorFilled: xz,\n Excel: Wz,\n ExternalLink: Rz,\n Film: Bz,\n FilmBig: Sz,\n Filter: Ez,\n FilterFilled: kz,\n Filters: Nz,\n FiltersFilled: Tz,\n FirstPage: Iz,\n Flag: Dz,\n FlagFilled: Hz,\n Folder: Vz,\n FolderOpen: Pz,\n FullScreen: Fz,\n Graph: Xz,\n GraphFilled: Uz,\n HeadPhones: Gz,\n Heart: Qz,\n Help: Zz,\n Help2: Kz,\n HelpFilled: jz,\n History: Jz,\n Home: _z,\n HomeFilled: $z,\n Image: eh,\n Increase: th,\n Info: oh,\n InfoFilled: rh,\n Journal: nh,\n JournalFilled: ih,\n Label: ah,\n LabelFilled: sh,\n LastPage: ch,\n LightBulb: lh,\n LightModeSwitcherFilled: ph,\n List: dh,\n ListFilled: bh,\n Loader: Mh,\n Location: Ah,\n LockClosed: uh,\n LockClosedFilled: zh,\n LockOpened: hh,\n LockOpenedFilled: Oh,\n LogOut: fh,\n MailClosed: gh,\n MailOpened: Ch,\n Map: mh,\n Maximize: Lh,\n Menu: vh,\n MenuDown: qh,\n MenuDownFilled: yh,\n MenuLeft: wh,\n MenuMiddle: xh,\n MenuRight: Wh,\n Merge: Rh,\n Microphone: Bh,\n Minimize: Sh,\n Minus: Eh,\n Monologue: kh,\n MonologueFilled: Nh,\n Mouse: Th,\n Move: Ih,\n MoveDots: Dh,\n MoveDotsFilled: Hh,\n Normal: Vh,\n Office: Ph,\n OfficeFilled: Fh,\n OrientationHorizontal: Xh,\n OrientationHorizontalFilled: Uh,\n OrientationVertical: Yh,\n OrientationVerticalFilled: Gh,\n Pair: Qh,\n Paper: Zh,\n Pause: jh,\n Payment: Kh,\n PdfFile: Jh,\n PenciWrite: $h,\n Pencil: _h,\n Percentage: eO,\n Pie: tO,\n PieFilled: oO,\n Play: rO,\n Plus: nO,\n Power: iO,\n Print: aO,\n Profile: sO,\n ProfileFilled: cO,\n ProfilePlus: lO,\n ProfilePlusFilled: pO,\n Recent: uO,\n Reconciliation: dO,\n Refresh: bO,\n RefreshFilled: MO,\n Reset: AO,\n RowOptions: zO,\n RowOptionsFilled: hO,\n Save: OO,\n SaveFilled: fO,\n Scheme: gO,\n Screen: CO,\n Search: mO,\n SearchFilled: LO,\n Send: vO,\n Share: qO,\n Shield: yO,\n ShieldFilled: wO,\n SideArrows: xO,\n Smile: WO,\n Sort: RO,\n Star: BO,\n StarFilled: SO,\n StarSolid: EO,\n Stereo: kO,\n Stop: NO,\n StopWatch: TO,\n Success: IO,\n SuccessFilled: DO,\n Survey: HO,\n SurveyFilled: VO,\n Target: PO,\n Team: FO,\n TeamFilled: XO,\n ThumbsDown: UO,\n ThumbsUp: YO,\n Time: GO,\n TimeFilled: QO,\n ToDo: ZO,\n ToDoFilled: jO,\n TooltipInfo: KO,\n Trophy: JO,\n Typography: _O,\n Unavailable: $O,\n UnavailableFilled: ef,\n Uncombine: tf,\n Unlocked: of,\n Upload: rf,\n UploadCloud: nf,\n UploadCloudFilled: af,\n Users: sf,\n View: cf,\n ViewFilled: lf,\n ViewOff: pf,\n ViewOffFilled: df,\n VolumeMax: bf,\n VolumeMin: Mf,\n VolumeOff: Af,\n Watch: uf,\n WiFi: hf,\n Widgets: zf,\n WidgetsFilled: Yz,\n World: Of,\n ZoomIn: ff,\n ZoomOut: gf\n}, Symbol.toStringTag, { value: "Module" })), n2 = {\n XXXXSMALL: "xxxxs",\n XXXSMALL: "xxxs",\n XXSMALL: "xxs",\n XSMALL: "xs",\n SMALL: "sm",\n MEDIUM: "md",\n LARGE: "lg",\n EXTRA_LARGE: "xl"\n}, H2 = {\n HORIZONTAL: "horizontal",\n VERTICAL: "vertical"\n}, Ol = {\n LEFT: "left",\n CENTER: "center",\n RIGHT: "right"\n};\n(styled_components__WEBPACK_IMPORTED_MODULE_1___default().div)`\n width: 100%;\n min-width: 100vw;\n`;\nconst Cf = styled_components__WEBPACK_IMPORTED_MODULE_1___default().div(\n ({ color: e = "inherit" }) => (0,styled_components__WEBPACK_IMPORTED_MODULE_1__.css)`\n line-height: 0;\n color: ${e};\n\n > svg {\n path: {\n fill: currentColor;\n }\n }\n `\n), no = styled_components__WEBPACK_IMPORTED_MODULE_1___default()(\n Cf\n)(({ size: e, theme: { itemSize: t } }) => {\n let o;\n switch (e) {\n case n2.XXXXSMALL:\n o = t.xxxxs;\n break;\n case n2.XXXSMALL:\n o = t.xxxs;\n break;\n case n2.XXSMALL:\n o = t.xxs;\n break;\n case n2.XSMALL:\n o = t.xs;\n break;\n case n2.SMALL:\n o = t.sm;\n break;\n case n2.LARGE:\n o = t.lg;\n break;\n case n2.EXTRA_LARGE:\n o = t.xl;\n break;\n case n2.MEDIUM:\n default:\n o = t.md;\n }\n return (0,styled_components__WEBPACK_IMPORTED_MODULE_1__.css)`\n width: ${o};\n box-sizing: content-box;\n\n > svg {\n width: ${o};\n }\n `;\n}), mf = styled_components__WEBPACK_IMPORTED_MODULE_1___default()(no)``;\n(styled_components__WEBPACK_IMPORTED_MODULE_1___default().div)`\n display: inline-flex;\n height: 100vh;\n flex-direction: column;\n flex-wrap: wrap;\n`;\n(styled_components__WEBPACK_IMPORTED_MODULE_1___default().div)`\n min-width: 250px;\n display: flex;\n align-items: center;\n margin-bottom: 10px;\n .icon-system {\n margin-right: 8px;\n }\n\n .icon-detailed {\n width: ${({ theme: e }) => e.itemSize.sm};\n margin: 0 16px 8px 0;\n }\n`;\n(styled_components__WEBPACK_IMPORTED_MODULE_1___default().span)`\n font-size: 14px;\n`;\nfunction Sr(e) {\n return (t) => (o) => {\n const { name: n, ...r } = o, i = String(n), a = e[n];\n if (!a)\n throw new Error(\n `There is no image available with such name: [${i}].`\n );\n return /* @__PURE__ */ c(t, { ...r, children: /* @__PURE__ */ c(a, { fill: "currentColor" }) });\n };\n}\nfunction Lf(e) {\n var t, o, n, r, i, a;\n return /* @__PURE__ */ c(\n no,\n {\n role: "img",\n "aria-label": (n = (o = (t = e == null ? void 0 : e.children) == null ? void 0 : t._owner) == null ? void 0 : o.memoizedProps) != null && n.name ? (a = (i = (r = e == null ? void 0 : e.children) == null ? void 0 : r._owner) == null ? void 0 : i.memoizedProps) == null ? void 0 : a.name : "",\n className: "icon-system",\n ...e\n }\n );\n}\nconst Z1 = Sr(hl)(Lf), vf = (styled_components__WEBPACK_IMPORTED_MODULE_1___default().ul)`\n padding: 0;\n margin: 0;\n`, Ea = styled_components__WEBPACK_IMPORTED_MODULE_1___default().div(\n ({ theme: e }) => (0,styled_components__WEBPACK_IMPORTED_MODULE_1__.css)`\n display: flex;\n align-items: center;\n justify-content: flex-start;\n gap: 8px;\n height: calc(${e.GLOBAL_ITEM_HEIGHT_CONDENSED} + 6px);\n padding: 0 ${e.spacings.sp8} 0 ${e.spacings.sp12};\n color: ${e.colors.textIcon.textHighemphasis};\n cursor: pointer;\n `\n), r4 = (styled_components__WEBPACK_IMPORTED_MODULE_1___default().div)`\n height: 32px;\n width: 32px;\n min-width: 32px;\n display: flex;\n justify-content: center;\n align-items: center;\n`, d8 = (styled_components__WEBPACK_IMPORTED_MODULE_1___default().div)`\n display: flex;\n align-items: center;\n justify-content: flex-start;\n gap: 8px;\n flex-grow: 1;\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n pointer-events: none;\n`, ka = styled_components__WEBPACK_IMPORTED_MODULE_1___default().p(\n ({ theme: e }) => (0,styled_components__WEBPACK_IMPORTED_MODULE_1__.css)`\n font-weight: ${e.fontWeight.medium};\n margin: 0;\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n pointer-events: none;\n `\n), tn = styled_components__WEBPACK_IMPORTED_MODULE_1___default().p(\n ({ theme: e }) => (0,styled_components__WEBPACK_IMPORTED_MODULE_1__.css)`\n font-weight: ${e.fontWeight.light};\n font-size: ${e.typography.t12};\n color: ${e.colors.textIcon.textMediumemphasis};\n margin: 0;\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n pointer-events: none;\n `\n), b8 = styled_components__WEBPACK_IMPORTED_MODULE_1___default().div(\n ({ $isAlign: e }) => (0,styled_components__WEBPACK_IMPORTED_MODULE_1__.css)`\n display: flex;\n justify-content: space-between;\n gap: 8px;\n ${e && (0,styled_components__WEBPACK_IMPORTED_MODULE_1__.css)`\n flex-grow: 1;\n `}\n `\n), M8 = styled_components__WEBPACK_IMPORTED_MODULE_1___default().div(\n ({ theme: e }) => (0,styled_components__WEBPACK_IMPORTED_MODULE_1__.css)`\n font-weight: ${e.fontWeight.light};\n font-size: ${e.typography.t12};\n color: ${e.colors.textIcon.textLowemphasis};\n padding: 0 4px ${e.spacings.sp8} ${e.spacings.sp12};\n margin: 0;\n `\n), Na = styled_components__WEBPACK_IMPORTED_MODULE_1___default().div(\n ({ theme: e, height: t }) => (0,styled_components__WEBPACK_IMPORTED_MODULE_1__.css)`\n height: ${t}px;\n transition: ${e.transitions.base};\n overflow: hidden;\n `\n), A8 = styled_components__WEBPACK_IMPORTED_MODULE_1___default().li(\n ({ theme: e, $isExpanded: t, $isDisabled: o }) => (0,styled_components__WEBPACK_IMPORTED_MODULE_1__.css)`\n list-style-type: none;\n font-size: ${e.typography.t14};\n line-height: ${e.lineHeight.lh22};\n background-color: ${e.colors.backgrounds.bgPrimary};\n border-radius: ${e.borderRadius.base};\n transition: ${e.transitions.base};\n border: 1px solid ${e.colors.border.borderPrimary};\n\n &:hover {\n transition: ${e.transitions.base};\n border-color: ${!t && !o && e.colors.border.borderPrimary};\n background-color: ${!t && !o && e.colors.backgrounds.bgHoverPrimary};\n }\n\n ${r4} {\n .icon-system {\n pointer-events: none;\n transform: rotate(90deg);\n transition: ${e.transitions.base};\n }\n }\n\n ${!t && (0,styled_components__WEBPACK_IMPORTED_MODULE_1__.css)`\n border-color: ${e.colors.border.borderPrimary};\n\n ${r4} {\n .icon-system {\n transform: rotate(0deg);\n }\n }\n\n ${Na} {\n height: 0;\n }\n `}\n\n ${o && (0,styled_components__WEBPACK_IMPORTED_MODULE_1__.css)`\n background-color: ${e.colors.backgrounds.bgDisabledPrimary};\n border-color: ${e.colors.border.borderDisabledOnbg};\n\n ${Ea} {\n cursor: default;\n }\n\n ${ka}, .icon-system {\n color: ${e.colors.textIcon.textDisabledOnbg};\n user-select: none;\n }\n `}\n `\n);\n(styled_components__WEBPACK_IMPORTED_MODULE_1___default().div)`\n width: 520px;\n`;\nfunction U_(e) {\n const [t, o] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(0), [n, r] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(0), i = (0,react__WEBPACK_IMPORTED_MODULE_0__.useRef)([]), { data: a, isMulti: s, onClick: l, isExpand: p } = e, d = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)(\n (A) => {\n const z = A && A.offsetHeight;\n z && o(z);\n },\n [o]\n ), b = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)(\n (A) => {\n i.current && i.current[A] && d(i.current[A]), r(n !== A || n === -1 ? A : -1);\n },\n [r, n, i, d]\n ), M = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)(\n (A) => {\n i.current && i.current[A] && d(i.current[A]), r(A);\n },\n [r, n, i, d]\n ), u = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)(() => {\n if (s)\n return a == null ? void 0 : a.map(\n ({\n iconLeft: A,\n title: z,\n helperText: f,\n alignHelperText: O,\n content: h,\n isDisabled: g,\n hideExpandedHelperText: v\n }, L) => /* @__PURE__ */ e1(\n A8,\n {\n $isExpanded: n === L,\n $isDisabled: g,\n children: [\n /* @__PURE__ */ e1(Ea, { onClick: () => !g && b(L), children: [\n A && /* @__PURE__ */ c(Z1, { name: A, size: "xxxs" }),\n /* @__PURE__ */ c(d8, { children: /* @__PURE__ */ e1(\n b8,\n {\n $isAlign: O ?? !1,\n children: [\n /* @__PURE__ */ c(ka, { title: z, children: z }),\n v && f && n != L && /* @__PURE__ */ c(tn, { children: f }),\n f && (v == null || !v) && /* @__PURE__ */ c(tn, { children: f })\n ]\n }\n ) }),\n /* @__PURE__ */ c(r4, { children: /* @__PURE__ */ c(Z1, { name: "ChevronRight", size: "xxxs" }) })\n ] }),\n !g && /* @__PURE__ */ c(Na, { height: t, children: /* @__PURE__ */ c(M8, { ref: (y) => i.current[L] = y, children: h }) })\n ]\n },\n L\n )\n );\n if (s)\n return null;\n {\n let A = [a];\n return A == null ? void 0 : A.map(\n ({\n iconLeft: z,\n title: f,\n helperText: O,\n alignHelperText: h,\n content: g,\n isDisabled: v,\n hideExpandedHelperText: L\n }, y) => /* @__PURE__ */ e1(\n A8,\n {\n $isExpanded: !!p,\n $isDisabled: v,\n children: [\n /* @__PURE__ */ e1(Ea, { onClick: () => !v && l && l(), children: [\n z && /* @__PURE__ */ c(Z1, { name: z, size: "xxxs" }),\n /* @__PURE__ */ c(d8, { children: /* @__PURE__ */ e1(\n b8,\n {\n $isAlign: h ?? !1,\n children: [\n /* @__PURE__ */ c(ka, { title: f, children: f }),\n L && O && n != y && /* @__PURE__ */ c(tn, { children: O }),\n O && (L == null || !L) && /* @__PURE__ */ c(tn, { children: O })\n ]\n }\n ) }),\n /* @__PURE__ */ c(r4, { children: /* @__PURE__ */ c(Z1, { name: "ChevronRight", size: "xxxs" }) })\n ] }),\n !v && /* @__PURE__ */ c(Na, { height: t, children: /* @__PURE__ */ c(M8, { ref: (B) => i.current[y] = B, children: g }) })\n ]\n },\n y\n )\n );\n }\n }, [\n a,\n n,\n i,\n t,\n b,\n M,\n p,\n s\n ]);\n return (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => {\n i.current && i.current[0] && d(i.current[0]);\n }, [i, d]), /* @__PURE__ */ c(vf, { children: u() });\n}\nconst V5 = styled_components__WEBPACK_IMPORTED_MODULE_1___default().input(\n ({ theme: e, isError: t, isReadOnly: o, required: n, $hasValue: r, type: i }) => {\n const {\n colors: a,\n borderRadius: s,\n typography: l,\n transitions: p,\n fontFamily: d,\n fontWeight: b,\n spacings: M,\n GLOBAL_ITEM_HEIGHT_CONDENSED: u\n } = e;\n return (0,styled_components__WEBPACK_IMPORTED_MODULE_1__.css)`\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n display: block;\n width: 100%;\n height: ${u};\n border: 1px solid ${t ? a.textIcon.textError : "transparent"};\n border-radius: ${s.base};\n background-color: ${a.field.fieldBgDefault};\n font-family: ${d.base};\n font-size: ${l.t12};\n font-weight: ${b.light};\n color: ${t ? a.textIcon.textError : a.textIcon.textPrimary};\n padding: 0 ${i == "password" ? "61px" : "28px"} 0 ${M.sp8};\n transition: ${p.base};\n outline: none;\n box-sizing: border-box;\n border-left: 2px solid\n ${n && !t ? a.border.borderSecondary : n && t ? a.border.borderError : "none"};\n\n /* Clear Icon */\n position: relative;\n\n &:after {\n content: \'\\u00d7\';\n position: absolute;\n right: 10px;\n top: 50%;\n transform: translateY(-50%);\n font-size: 16px;\n height: 40px;\n width: 40px;\n cursor: pointer;\n color: ${a.grey};\n opacity: ${r ? 1 : 0};\n pointer-events: ${r ? "auto" : "none"};\n transition: opacity 0.2s ease-in-out;\n }\n\n ${o && (0,styled_components__WEBPACK_IMPORTED_MODULE_1__.css)`\n border: 1px solid ${a.border.borderTertiary};\n pointer-events: none;\n background-color: ${a.backgrounds.bgPrimary} !important;\n color: ${a.grey};\n `}\n\n &:hover:not(:disabled):not(:focus) {\n /* border-color: ${!t && a.pinkSwan}; */\n background-color: ${a.field.fieldBgHover};\n }\n\n ${!t && (0,styled_components__WEBPACK_IMPORTED_MODULE_1__.css)`\n &:focus {\n border-color: ${a.border.borderSecondary};\n color: ${a.textIcon.textHighemphasis};\n &:hover {\n /* background-color: ${a.field.fieldBgHover}; */\n border: 1px solid\n ${t ? a.border.borderError : a.field.fieldBorderActive};\n border-left: 2px solid\n ${n && !t ? a.field.fieldBorderActive : n && t ? a.border.borderError : "none"};\n }\n }\n `}\n\n &:disabled {\n border-color: transparent;\n // new disabled color\n background-color: ${a.backgrounds.bgDisabledPrimary};\n color: ${a.textIcon.textDisabledOnbg};\n //\n\n border-left: 2px solid\n ${n ? a.border.borderReadonly : "transparent"};\n font-weight: ${b.light};\n\n &,\n &::placeholder {\n color: ${a.textIcon.textDisabledOnbg};\n }\n }\n\n &::placeholder {\n color: ${a.field.fieldTextPlaceholder};\n font-size: ${l.t12};\n font-weight: ${b.regular};\n }\n\n &:active {\n border: 1px solid\n ${t ? a.border.borderError : a.field.fieldBorderActive};\n border-left: 2px solid\n ${n && !t ? a.backgrounds.bgReadOnly : n && t ? a.border.borderError : "none"};\n }\n &::-webkit-contacts-auto-fill-button,\n &::-webkit-credentials-auto-fill-button {\n display: none;\n visibility: hidden;\n pointer-events: none;\n position: absolute;\n right: 0;\n }\n & {\n -webkit-appearance: none;\n -moz-appearance: none;\n appearance: none;\n }\n &::-ms-reveal,\n &::-ms-clear {\n display: none;\n }\n\n ${r && (0,styled_components__WEBPACK_IMPORTED_MODULE_1__.css)`\n border-color: ${a.field.fieldBorderActive};\n `}\n `;\n }\n), qf = styled_components__WEBPACK_IMPORTED_MODULE_1___default()(V5)``, fl = styled_components__WEBPACK_IMPORTED_MODULE_1___default().div(\n ({ theme: e, isError: t, type: o }) => {\n const { colors: n } = e;\n return (0,styled_components__WEBPACK_IMPORTED_MODULE_1__.css)`\n position: absolute;\n top: 6px;\n right: ${o == "password" ? 28 : 8}px;\n cursor: pointer;\n background: transparent;\n z-index: 2;\n pointer-events: ${t ? "none" : "initial"};\n margin: 4px 0;\n &:hover {\n .icon-system {\n color: ${n.backgrounds.bgHoverSecondary};\n transition: 0.3s all ease-in-out;\n }\n }\n .icon-system svg {\n width: 12px;\n height: 12px;\n }\n `;\n }\n), yf = styled_components__WEBPACK_IMPORTED_MODULE_1___default().div(\n ({ isError: e, isDisabled: t }) => (0,styled_components__WEBPACK_IMPORTED_MODULE_1__.css)`\n position: absolute;\n top: 6px;\n right: 10px;\n cursor: ${t ? "default" : "pointer"};\n background: transparent;\n z-index: 2;\n pointer-events: ${e ? "none" : "initial"};\n margin: 4px 0;\n .icon-system svg {\n width: 12px;\n height: 12px;\n }\n `\n), wf = (styled_components__WEBPACK_IMPORTED_MODULE_1___default().div)`\n position: relative;\n`;\nfunction xf(e, t) {\n const [o, n] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)("password"), r = (a) => {\n a || n(o === "text" ? "password" : "text");\n }, i = e.value !== "" && // props.hasValue &&\n !e.disabled && !e.isReadOnly;\n return /* @__PURE__ */ e1(wf, { className: "input-container", children: [\n /* @__PURE__ */ c(\n qf,\n {\n ref: t,\n ...e,\n id: e.$inputId,\n type: (e == null ? void 0 : e.type) === "password" ? o : e == null ? void 0 : e.type,\n $isError: e.isError,\n $isReadOnly: e.isReadOnly\n }\n ),\n i && !e.hideClearButton && /* @__PURE__ */ c(\n fl,\n {\n onClick: e.handleClearFn,\n $isError: e.isError,\n type: e == null ? void 0 : e.type,\n className: "input-clear-btn",\n children: /* @__PURE__ */ c(\n Z1,\n {\n name: e.isError ? "AlertFilled" : "Close",\n size: "xxs",\n color: e.isError ? "#D7373F" : "#A6A6AB"\n }\n )\n }\n ),\n (e == null ? void 0 : e.type) === "password" && /* @__PURE__ */ c(\n yf,\n {\n onClick: () => r(e == null ? void 0 : e.disabled),\n isDisabled: e == null ? void 0 : e.disabled,\n children: /* @__PURE__ */ c(\n Z1,\n {\n name: o === "text" ? "ViewOff" : "View",\n size: "xxs",\n color: "#797980"\n }\n )\n }\n )\n ] });\n}\nconst gl = (0,react__WEBPACK_IMPORTED_MODULE_0__.forwardRef)(xf), Wf = styled_components__WEBPACK_IMPORTED_MODULE_1___default().div(\n ({ theme: { colors: e, spacings: t }, isError: o }) => (0,styled_components__WEBPACK_IMPORTED_MODULE_1__.css)`\n position: relative;\n color: ${e.grey};\n\n .icon-system {\n position: absolute;\n top: 50%;\n transform: translate(0, -50%);\n z-index: 1;\n color: ${e.placeholerGrey}; \n \n &[data-position=\'left\'] {\n color: ${o && e.error};\n left: ${t.sp12};\n }\n\n &[data-position=\'right\'] {\n right: ${t.sp8};\n }\n }\n\n .icon-flag {\n position: absolute;\n top: 50%;\n transform: translate(0, -50%);\n z-index: 1;\n\n img {\n width: ${t.sp16};\n height: ${t.sp16};\n }\n &[data-position=\'left\'] {\n color: ${o && e.error};\n left: ${t.sp8};\n }\n\n &[data-position=\'right\'] {\n right: ${t.sp8};\n }\n }\n\n .input-clear-btn {\n right: 40px;\n top: 12px;\n }\n `\n), Rf = styled_components__WEBPACK_IMPORTED_MODULE_1___default()(gl)(\n ({ iconLeft: e, iconRight: t, theme: { colors: o, spacings: n } }) => (0,styled_components__WEBPACK_IMPORTED_MODULE_1__.css)`\n padding-left: ${e ? n.sp40 : n.sp16};\n padding-right: ${t ? n.sp40 : n.sp16};\n\n &:focus ~ ${n4} {\n color: ${o.black};\n }\n\n &:disabled ~ ${n4} {\n color: ${o.pinkSwan};\n }\n `\n), n4 = styled_components__WEBPACK_IMPORTED_MODULE_1___default().div(\n ({ onClick: e, isDisabled: t }) => (0,styled_components__WEBPACK_IMPORTED_MODULE_1__.css)`\n ${e && (t ? (0,styled_components__WEBPACK_IMPORTED_MODULE_1__.css)`\n pointer-events: none;\n ` : (0,styled_components__WEBPACK_IMPORTED_MODULE_1__.css)`\n cursor: pointer;\n `)}\n `\n), Cl = styled_components__WEBPACK_IMPORTED_MODULE_1___default().div(\n ({ size: e }) => (0,styled_components__WEBPACK_IMPORTED_MODULE_1__.css)`\n width: ${e};\n\n > svg {\n width: ${e};\n height: auto;\n }\n `\n), ml = styled_components__WEBPACK_IMPORTED_MODULE_1___default().div(\n ({ theme: { spacings: e }, hideClassName: t }) => (0,styled_components__WEBPACK_IMPORTED_MODULE_1__.css)`\n ${t == !1 && (0,styled_components__WEBPACK_IMPORTED_MODULE_1__.css)`\n margin: ${e.sp16} ${e.sp32};\n `}\n text-align: center;\n vertical-align: top;\n `\n), Bf = (styled_components__WEBPACK_IMPORTED_MODULE_1___default().span)``, Sf = styled_components__WEBPACK_IMPORTED_MODULE_1___default().img(\n ({ theme: { spacings: e, itemSize: t }, hideClassName: o }) => (0,styled_components__WEBPACK_IMPORTED_MODULE_1__.css)`\n ${o == !1 && (0,styled_components__WEBPACK_IMPORTED_MODULE_1__.css)`\n margin: 0 auto ${e.sp16};\n `}\n\n display: block;\n width: ${t.sm};\n height: ${t.sm};\n `\n);\nstyled_components__WEBPACK_IMPORTED_MODULE_1___default().div(\n ({ theme: { spacings: e } }) => (0,styled_components__WEBPACK_IMPORTED_MODULE_1__.css)`\n margin: ${e.sp16} ${e.sp32};\n display: grid;\n grid-template-columns: repeat(8, 1fr);\n\n ${ml}{\n display: flex;\n margin: 16px 32px;\n flex-direction: column;\n align-items: center;\n justify-content: space-between;\n padding: 10px;\n }\n `\n);\nvar L1 = /* @__PURE__ */ ((e) => (e.ABKHAZIA = "ab", e.AFGHANISTAN = "af", e.ALBANIA = "alb", e.ALGERIA = "alg", e.ANDORRA = "and", e.ANGOLA = "ang", e.ANTIGUABARBUDA = "anb", e.ARGENTINA = "arg", e.ARMENIA = "arm", e.AUSTRALIA = "aus", e.AUSTRIA = "as", e.AZERBAIJAN = "az", e.BAHAMAS = "bam", e.BAHRAIN = "bah", e.BANGLADESH = "ban", e.BARBADOS = "bar", e.BELARUS = "ber", e.BELGIUM = "bel", e.BELIZE = "bez", e.BENIN = "ben", e.BHUTAN = "bhu", e.BOLIVIA = "bol", e.BOSNIAHERZEGOVINA = "bos", e.BOTSWANA = "bot", e.BRAZIL = "bra", e.BRUNEI = "bru", e.BULGARIA = "bul", e.BURKINAFASO = "bur", e.BURUNDI = "bud", e.CAMBODIA = "cad", e.CAMEROON = "cam", e.CANADA = "ca", e.CAPEVERDE = "cv", e.CENTRAL_AFRICAN_REPUBLIC = "car", e.CHAD = "ch", e.CHILE = "che", e.CHINA = "chi", e.COLOMBIA = "col", e.COMOROS = "com", e.CONGO = "con", e.COOKISLANDS = "ci", e.COSTARICA = "cr", e.CROATIA = "cro", e.CUBA = "cu", e.CYPRUS = "cy", e.CZECH_REPUBLIC = "cz", e.DEMOCRATIC_REPUBLIC_CONGO = "drc", e.DENMARK = "den", e.DJIBOUTI = "dj", e.DOMINICA = "dom", e.DOMINICAN_REPUBLIC = "dr", e.EASTTIMOR = "et", e.ECUADOR = "ec", e.EGYPT = "eg", e.ELSALVADOR = "es", e.EQUITORIAL_GUINEA = "eqg", e.ERITREA = "eri", e.ESTONIA = "est", e.ETHIOPIA = "eth", e.EU = "eu", e.F_S_MICRONESIA = "fs", e.FIJI = "fi", e.FINLAND = "fd", e.FRANCE = "fr", e.GABON = "gab", e.GAMBIA = "gam", e.GEORGIA = "geo", e.GERMANY = "ger", e.GHANA = "gh", e.GREECE = "gr", e.GRENADA = "gra", e.GUATEMALA = "gu", e.GUINEABISSAU = "gb", e.GUINEA = "gui", e.GUYANA = "guy", e.HAITI = "hai", e.HONDURAS = "hon", e.HONG_KONG = "hk", e.HUNGARY = "hu", e.ICELAND = "il", e.INDIA = "ind", e.INDONESIA = "ina", e.IRAN = "irn", e.IRAQ = "irq", e.IRELAND = "ire", e.ISRAEL = "isr", e.ITALY = "it", e.IVORY_COAST = "ic", e.JAMAICA = "jam", e.JAPAN = "jap", e.JORDAN = "jor", e.KENYA = "ken", e.KIRIBATI = "ki", e.KOSOVO = "ko", e.KZAKHSTAN = "kz", e.KUWAIT = "ku", e.KYRGYZSTAN = "ky", e.LAOS = "lao", e.LATVIA = "lat", e.LEBANON = "leb", e.LESOTHO = "les", e.LIBERIA = "lib", e.LIBIA = "li", e.LIECHTENSTEIN = "lin", e.LITHUANIA = "lit", e.LUXEMBOURG = "lux", e.MACAU = "ma", e.MACEDONIA = "mae", e.MADAGASCAR = "mg", e.MALAWI = "maw", e.MALAYSIA = "mal", e.MALDIVES = "mv", e.MALI = "mi", e.MALTA = "mt", e.MARSHALL_ISLANDS = "mis", e.MAURITANIA = "mu", e.MAURITIUS = "mau", e.MEXICO = "mx", e.MOLDOVA = "mo", e.MONACO = "mon", e.MONGOLIA = "mgl", e.MONTENEGRO = "mog", e.MOROCCO = "mor", e.MOZAMBIQUE = "mz", e.MYANMAR = "my", e.NAGORNOKARABAKJ = "nk", e.NAMIBIA = "nm", e.NAURU = "na", e.NEPAL = "np", e.NETHERLANDS = "nl", e.NEW_ZEALAND = "nz", e.NICARAGUA = "nic", e.NIGER = "nig", e.NIGERIA = "nga", e.NIUE = "ni", e.NORTH_KOREA = "nko", e.NORTHERN_CYPRUS = "nc", e.NORWAY = "ny", e.ORMAN = "or", e.PAKISTAN = "pk", e.PALAU = "pa", e.PALESTINE = "pal", e.PAPA_NEW_GUINEA = "png", e.PARAGUAY = "par", e.PERU = "pe", e.PHILLIPPINES = "ph", e.POLAND = "pl", e.PORTUGAL = "por", e.PUERTO_RICA = "pr", e.QATAR = "qt", e.REPUBLIC_OF_CHINA = "rc", e.ROMANIA = "ro", e.RUSSIA = "ru", e.RWANDA = "rw", e.SAHRAWI_ARAB_DEMOCRATIC_REPUBLIC = "sa", e.SAINT_KITTS_AND_NEVIS = "sk", e.SAINT_LUCIA = "sl", e.SAMOA = "sam", e.SAN_MARINO = "sm", e.SAO_TOME_AND_PRINCIPE = "stp", e.SAUDI_ARABIA = "sau", e.SENEGAL = "sen", e.SERBIA = "ser", e.SEYCHELLES = "sy", e.SIERRA_LEONE = "sle", e.SINGAPORE = "sgp", e.SLOVAKIA = "slo", e.SLOVENIA = "SLV", e.SOLOMON_ISLANDS = "SI", e.SOMALIA = "SOM", e.SOMALILAND = "SMD", e.SOUTH_AFRICA = "SAF", e.SOUTH_KOREA = "SKO", e.SOUTH_OSSETIA = "SO", e.SOUTH_SUDAN = "SS", e.SPAIN = "sp", e.SRI_LANKA = "sla", e.ST_VINCENT_AND_THE_GRENADINES = "sv", e.SUDAN = "sud", e.SURINAME = "su", e.SWAZILAND = "swa", e.SWEDEN = "swd", e.SWITZERLAND = "sw", e.SYRIA = "syr", e.TAJIKISTAN = "taj", e.TANZANIA = "ta", e.THAILAND = "th", e.TOGO = "tog", e.TONGA = "to", e.TRANSNISTRIA = "tr", e.TRINIDAD_TOBAGO = "tt", e.TUNISIA = "tun", e.TURKEY = "tur", e.TURKMENISTAN = "tk", e.TUVALU = "tu", e.U_S_VIRGIN_ISLANDS = "vi", e.UGANDA = "ug", e.UKRAINE = "ukr", e.UNITED_ARAB_EMIRATES = "ae", e.UNITED_KINGDOM = "uk", e.UZBEKISTAN = "uz", e.VATICAN_CITY = "vc", e.VENEZUELA = "vn", e.VIETNAM = "vt", e.YEMEN = "ym", e.ZAMBIA = "za", e.BRITISH_VIRGIN_ISLANDS = "bv", e.CAYMAN_ISLANDS = "cay", e.CURACAO = "cur", e.GUERNSEY = "gue", e.JERSEY = "je", e.ZIMBABWE = "zm", e.USA = "usa", e.RESTRICTED = "res", e))(L1 || {});\nconst Ef = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAACXBIWXMAAAsTAAALEwEAmpwYAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAQ5SURBVHgBpVZvTFtVFP+9vldshy1lsFhDdGVjBDf+OI3MbWTORLOsgvpBsxDjHz4qH1Y/GI1+sIvx3wczP7iZqAk4RRf/JDqZG0YDMxOdZrJBFkhBiiB/RqktKe1K2/eu99y+m3ZK3dhOc3LvO/ed87vnd887t8D/CGPMxfVlrr1cgywnEdPm4+rBaoWczABXKx2FgJQVgu/ng5+ri54HRubx0fEA/piM4sJ4FEdCXahza1Br61Dk9ULb0SRdo1wPKIrydkEAosMMjlNnZ/DWkQHctbkUfb+H0Li5HExRsG/NDKvKhBhLxKHPzjJ2k5s59vs0q9Uqw/g5yIH/AJg7F+gHPz6HD7tH0LpnIwbHFjlIOYbGoojEUnjhyS2oWe+QPjAMA+l0Gna7HQ6HQ4Z7VmaiSM6JDaLllfd/w2AgBKtmxaW0gTtrynD6fAgNm9YiHF1G+1Q36rQo9+F+EoSPqZFh3NDcAttzz0u6tnKQCc1EJGpc5wNhDAxfRDhmoNimYFvdOnx35iLua3Sjf3ABiaQOvWoTmEr+LI9bA6rbjcRoAOpEEFZPJZ1fB9d7NXP3T9F73X0BfHN6Bu2P3obAZBzHfpxGc1OFGBu3lCE4E0dqjxfp6tL8cxM0keqpFGKqirXZpd1U5pTBw/JQ/R8M4ZlHanDylzlU31qCO2pK8dkPU2hrrkRXz59Iccq0l16EXQsLcokmMfLBWE7BOjcHnRszh9+V1eUjgIdo1vPzFJ7wbsDhL0exa6sbyzxY79l5tN7vwaEvRnF3bRkSl3RkFsrAinIMMfHjEk/AomkwOEB6fFwC3EMAt9NsOBjB97/Ooq2lCh3dQVTf4uTVU4b3vhrD43s96Dw+Dn5oSL7qQ7K2HP8q7xxNui5s9uySR6HPkGb1+z6H5+Zi9JyZx/b6dRidimH+72U8uKsCJ/pn0cRtY9MxdOgn0WQNZfmRaiZE1aQbHKzEieKuo8IuqwgbKhxiJ9vryuG6sUiUZyyeRrFdwzZ+wGvsKuqrXHBMqrwm9dz2ldygcBTKEk5nbpmaGKWyuLgoDBaLRbwkXlyF0OZIiSKK4cyCRCmDCQKwdR8DO/opVAqOFZrUlQBMpUO2eB8Anm4n8zkCOMV1t7WyEpnpaVgUXDOAYU60hgZp/poooq8uQk9LS0uiEiRNqwIwK4nEmTuDSo0HivLFPsrCHl5A+o3XoILOAKsSXjw8A4ai19+Ups78XtTGdUBd73EpG6tgfNIlqCK5Eo7k3kLUtD4Gi0u0EXE3XOZP1x8fDtI8mUyKFixpKkQXk98AH+k+sNlscunydp3n4Ee2s4py0w+9k8FfUwWzEOF3NkFtbtFU3uRMoVvNLx9WujJ9Joi4Mln/T8CJb4ELQ2CTk1mHkhKAes1eL5QdO6XrilcmCqROl34nu3rpZdfx78JnBojkBQyaNr9Z5gXlH9EMdxrNQgj9AAAAAElFTkSuQmCC", kf = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAACXBIWXMAAAsTAAALEwEAmpwYAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAOOSURBVHgBpVZLbIxRFP7uP6+aER2iEgtMV0iIVohN0RXiVRZIEOKxkRAVgo2YrhASFnYWuhIiSEOLboqUxCPpJJ610PFYoKIznZrHPzP/dc6de6dDp0zTk5y5/z3/Pd93z7nnP3eAf4iUMkh6krSLtE8Oy4C2NZOGMFZhJw1QqVwejUiUAT9IQ5g0yPPc427YdzvUKONxrFvvwDVjJuqmz0fT3LVorG0wrjHSFiHEhVEJOB0aHJn+ftjHjgBv3sCqqYGYHITlD+Bog0RUDOGX/QsffkaV362tVxShljCRtIwg0DtX7OmzZ5C5eQOe2lqIQABWJgNy4kUIr56CbxO0owSSdhJvv7/H/iV7sWfxTgN3yEQiTM5p6OG0xCkNcsd2VHk9sDhFS5fB8+wpBJPQPHXmHJypU9lHqeM4aszQ+wBtprq62qSrnkiilmbk1ARt20YikYC7vg6gtFipFHyd92Fls7CSSQiaMwlHY1mWUpfLpUaPx6N8mUif32UVgd59H09+tN9GduEiTCBAP6XJ/fqVAuQoXJEeWEMJPD91LJ+YEuBsmdSSOhSJRGwoJn1en7VhwVqz8clu+tnAT/kn3RA9PXAtXgKr9x3cL54Vdkvq6byn8s2Tow9PuL4ECgcghM4yvUtnM/gc+wIQUdekdlNdzUzQpMqxowNV165C5vOoorIUqWRJiQkYhpSdQ9InSiuPrAIDqVhhGe297d0dQ7CcCer4yQ6FHLl5i+PK5ZBdsRI5rxeW241hpALPpjqJuFdCDr9BNp8lzUHS7iUd+qyJM9nMziE+A7W2n+q+9PCEGPEN/lNMReUpAyw1VCQoBKSToAHHClwq7Pu3P4cRJQ1djFzCx/hnCEuUaSAVCuWCq2n+tLk4XHOALbEiQTw3iNbXVwoxjYMADpXOxH3GEmG4h/zUNGcNxiVSK2PNLmK18SHzVzfAs463neqQyuXyv/i6dXD46+atMuZa04u6aGjM0hc8ODhYrKJKSUr7UjAYlNQ+2LGV/HeNaHZJ6jnpdHpMpWoIfD4f/H4/m4rNTn1J/EALuIef5wVXe2+i5dHpyg+bMnNy2XHsrt9uLHzxRBX2XzsJo9BZEfn6Ehuvb0M0/ml4gfgTlKVxVoMC57EEPFzOxZA0axJ1ZT742I223nZEvr0skgV91QqQq6UEuOyVWT7iwqXfKiuXLjmOfxfNGmCgBLBP28K6zEeV34TVMhcP4r6cAAAAAElFTkSuQmCC", u8 = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAACXBIWXMAAAsTAAALEwEAmpwYAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAQySURBVHgBpVZfaFtVGP/d3Js/bZI27TpcpjbdBpWRtm6RiljZUrQ4N2wtedBHdY8+WPayB4tJYAOnIFVWUBA7KIggiK3oHldj9qJ7CBW1ZbgkG13RJiahyc3/3H3n5J4sW9LSsQ8+znfOPef3+/6cPxfYRTRNc5D6Sa+RRrX7ktLHZkgH8KjCFukAe5WFnYikNuDvUxMgdbB+JnQd/y//zNtKJsPnWFz9sI4MoXfyNLpPjImladKgJElzOxKwdOjgWFlZwf5PLqMYvwPzE/uhOByQbVY+r5rNkWaRj99GVdJgDS9W3fuGZB0mQCRBgWlo4zmCwSB8Ph9kowLb0UGYenogG8iXnAqoKmRJgtFuh33YDcvgYfh+PCNf+v2CgAqw2oiOInLeDD4/Pw+PxwNDqQwwbQ6WNVrDLcjk99E+N75YvcxHzo/OssZPmD9QJDERAUuNIxKJIBAIwOl0kqMqtHwBkpoHqNVU5n2eR8FsiSv7lodaVeG0H8RHNy4gvBGCXr8FniLd+7dZZ3p6uu4kpSCXyxFYjsDqoCYiNR92Qe7spPTYUNOJ2Lc8ESiywqO7dKORKi/b5iyCN0RRY7EY/5JMJnkEzGMGInfZCdgCyWSC8UknZCp4x/FhoFKmKCmCmop0KcUrGt4MIXw3JEhmGMEUs5aWlsQgtra2eAQ1Arf5JtBx6gUUYrcAWUPxTgzFjTgszw+j4+QoRZKDWskhUUpAMtRr9FN0WUCdZEPHmMXyL6RYLHISqcMCGA1QQ7+h49kR2F8/hd73zsLidiP56Ze0RWi5WUGymEChmm9sguubvwqoAUUvCKLRKJqlXC7DfGwQXd5XUPnrNsqpLaS++RYaYSrWbnS+OArbq15k19ZRrq01wKl8yJTSDQIDdhFDRUb57gZgNcJgNqL33FkoB3pRuLUOqQKY+g5AK1SwKwZpjBk9dJgeluxKGPl/1qDRWTAdOkIDFdheHkfXmBdVpYDEwtco/vn3g4sogn67S/TSDQKv19tCUMtsoxr9F12nJ1CKx5EIfobUx1+hnE+j0/McJE1BbTvfsm6ob0SYEVaDXxj+1NQU5ubmWiZnFr9HJZvCwYsXUboZg0Zb0zjwFDY/+BDq1TBtgpYlODMwKcwliR0GMlKsNz4+zs+DkFVzX8M2uZ6G6ZkjqLGLLplGcf0mHy8RwcTn2/Xrg7Tf6kLkrXWx7JBCpzZNJAzV6/f7HyBolhLdqkx3FSJYnPhO9K4030XvkKZZHRjJI4vu/XnPLIb38fzzt4EZnIAxiQF22QkSbY/YHPz4LCfQJahjtjw4AdRvVn6yTW++izKlRUySHgYmsXjH8N/CObzkPNEMHkCbNYJkRifhJzxLT2Vm+SoKq380aiB3d8NGT2XX5Gu81aXtk9k+7Pqjf0Xbu1zTHuPvYkYHSDUBRvWxgL7Nd5R7x+lqwE5JSUEAAAAASUVORK5CYII=", Nf = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAACXBIWXMAAAsTAAALEwEAmpwYAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAQ7SURBVHgBpVZNaFxVFP7u+0sysU1SiJVCS1wJTWojEYpNqQZ1kYAaC7q1ooiuGsG2CxcmiIskItlq1bYqFEHRWoyLLlohqQsFa5vUgIGkk5XFZPqTzMyb93P9zp33pq/NpFQ84cx99+d83z3nnnNvgHuI1rqV+h71HHVB35ZCMjZE7cB/FTFKAO5Xjm9EpOqAH2IzTG2Vfjg9hcpPk6bVN26YNdaOHbC7dsEbGICzd19qep06opSa2JBAwpGAG8DyxEfQS0uw2tuh2lqhcs3GRK+tUtcQ56/SBmj+4kvYnbtSmGGSjKwjSHZu2Mvjo/A//QRuz+OwXBeKKDSCQTMmGtr8AnGxhHDuCrxXXkXj4aMp3NupJyqNOZvfJSwCHnz+GQo7d2KrZeFaFCNPbbQUuh0bZaL+GUUokuwR20Ibia/xu+XSH3DfeDMlkXA9RpLFlOA4m4Px7Ixe7duv3M5OnHY8BDTcRpK5OMapYhnjm5tR4tjIagkHGj0z57Mfk/SloExP5tD0/Q/puZwnQZ9Kdr8gI6s93VBLebidXfjar2CFwN/4ATZxl+82N+GDtZLx/62mRpwq+1gm+H7XQZfjoN9zEM7OAL29yH13Jg1Vm8OfQfmKLkwBBLclSwoF5JSFZRI4JJhne9IvYz4IjdW3fgm/VkI8xBDlGhqwzDhYJQXLJMc0QmIlXgwJwQsmayYnzQKLu7VWlnGrMYcCgRVB18IIP2ay7WzShraNW2GAbWxVuWhsbXoVESsheFIIus05zFyu7l46vo+WUhm+46JAgiIPWaeZVD0z09oMjRs6UBUfit6IbSx6YTrdS4cQmIIC812Zv2pquUGAVpJs5QlKxixEMbKyhWQeM8ur2GwtEnjGjl+IkoIUAguZgpANpoXRTqN/CNzPnT3KtpdZH5BUVL4PuTb2kGAxjNGceKYymop4sChM2NwibtQmAkahjxnytOfiL55BRMKXGzyw7Lhjjb/p2cSmHM5WAmjcKXKVJHK9RmAzvfSVmdqieRZTnod8hgC7udt9JHj95pqJ89gDTZCAHFktmrrooJfPciOpF2CaJ3JRCH6mPmXx4oqOfVwj2MPdD9rVCF5l/N9nDbjJ3BL7B1kLByzPFJrOBEW8cYiVyGkpNDnkgvTCF5+HYgZYWH/N/sJsOsZDl1J7jbn/TIN7x7y5l0S3b4f728V0+GGmrpJ747z0bN4j6SV2d1yfoEe2ZA6/7wZHxsY5+VU6dCJ7F3UgueziD8egeeHV82KF4bgZV2NeDxzvHIV1+Ih81S6724uqz5+RaHxURw9u0XGi+h4q87I2GhvNvnBDqCecGK4tmbmko57d64jijBrgwed0PD2VBR/OYtZ7MoVdXjZT4VrKnk8mZi9D5/NVgxbWjNw1/QNQe3tT07pP5kaeyKN/Qt+/nNP/47+LoQSgkAFcSMaGkzTfUP4FG5+9QuaBmmkAAAAASUVORK5CYII=", Tf = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAACXBIWXMAAAsTAAALEwEAmpwYAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAQESURBVHgBpVbdb1NlGP+dntOu3TK7lXVICslAIdnI0AvjcDOZM1GTiVETFi/0giGJF0Zd5A/YpiZe+QHGeEMyEhMvNFEwXgxkWfRi5WN8XEDhbgPaAWO0Xba2pzvdOTzPe963PW06AuFJnrwfPe/v93y9z1vgEeI4TgvpKOk06ZxTkYzcGyHtwJMKH5IAjysTGxFpdcC/oGGMtIXXM3fOYnL+DOI0Llsr+OvV32AYBgKBAEKhEILBoDqaJR3XNO1HL55RAz4qwQXwkSu/ILmaRLSxDbFnYthlhASobdsolUpIp9PiXFtbm0OEbNAPhBEmknGF6atjOb67dBSHpj5FQDewK7ITraFWaD4NeduEz+eDruvCC7aePVlaWtKWl5cV1BjnpsoDGT8X/PJRTNz4Fd3R3bBQwppdEoFUsWQCeUYoS0NDA3K5nJiHw2EeRum3E+TJvPKAQ9NyLZ0ggiPY3NQOk6wtkJp2AUUa8zTymg6VVXnDo9/vx8rKCorFImT+JkSSpfVzvHj5934k8yl0beqkkEBaruG5eyUMXjTRfdPCJn8rsH0H0D8ADLwuvOCcsDI4hy4ajaoItXKI3uNZ/O45JHNJQNeQtTIIGkFBsD9u4sBUDkW/hj9fCeGjT74HGhuBVApYWAC2bCl7xN5YliWIOGwkI2znuzybvHWaAuwGO72WQX69gMhiDgdP3oeey+OrfTqO9Wlw2tuB5mYgFoND4F7hULGapqm2+pngRZ5dTV93Q0JatNcEyQeT94FCHv902ph6fh35UgG4OOsm+NtvUCsqL+yFlA5DJgS3cwtuqWhuvVi2hc5EGs6qg/MxAwXyiPPhmJTEl14gc3Vg3zvA3t4yuFJVXUzgqzahegxa9OH6Ota4YKlcmVT89uCBa0giQfFMV3mgadXNgQnmeRIONFeTkFze4RfjnrmS5wQd+T8O9PUBBw8BkQhqhStJSrZM0Ptsj7vlVD78ozckxqGZPDoWJUnPXmDrVro5X2Mj8RBcYYL/ePbWtjeqwFku7Azg58Em6DZw7Kcs3o9Tkt2LREmicM1eqEsgS5TlJF80TnKGV/v//RDxxfMy2ZUDb8+aGKa70HVbetG1mz4eAg58XP5GXTiWSCVs2zX54zQNr83cO4chIlH3oZ4k3jzLMajaU32JCbgXyRAdp4QPqyoaJs32bu7Bl3s+d0Pl1CeoBfcKt3IJLt4GnggC7npq4zARHO7+7NEkNZazcutu5BbiyrjErLwH8iUSJOzF6cG/sa0pViGS6gVl5f7TTK2DrfeAl1+1ek8mPxaiffM6Tnk5lTojWklyNYVTAyfEZVLPprfmUefJ3Mh1fvSPO48v085T/LsYkQAZD+Cc3BuTZb6hPATvmEcNCRp08QAAAABJRU5ErkJggg==", If = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAACXBIWXMAAAsTAAALEwEAmpwYAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAQpSURBVHgBpVZNbBtVEP72x78xjZO0deIQ10GpWhVVMYcUJAixxBUUQIJzOMCFA75WAiWBQ69IVdWjK5ByQEI0B8SJpFGRkPhL6hTRUtIkLSU2dv2TeDf+3cfMetd2UicK6tjjfW9m9vtm5j2/XeAQEUL4SadJF0nXRUtyli1GGsb/Fb7JAjiqxA8ikjqAf0SXGVI/z2vlG6jszptXYeTNGFkJQ3FG4PRMQnVF7VvZOStJ0ucHEnA7LHAsLScxGpyCIu4TYACS0gNJ8llxRSLTYNTu0xhQM9/Be/6sDTNDJLP2RO6QOT6LL+PdjxcI0AmH+xxURy9URYYia6Q6jSWy+cg3CtU5grW3P8DWpStNAl4be6LaPW8Hv/rNXbxw5gSBVSFLNdJGrXa5wvoRZruArnOnkb76hekbuPghX6YJ8zpVsmFXwK3xr65ljU/jt9Df1wW9XIdM2XLGfJUljSrSTeWxbNtJoZfgHgggRVXs3PwJ1vrFzRZZ2U/x5K2LCzIk/spEYBCYZgFrqFVU5NKDSG+FUK/VTVvTr+9CUVWz36lWq6K8zblFb5qLupLEZlIDE2QLVbjdqplt6p/TSD4cQ/+zCfy9cYFaoqBSEshlI+g78SOCoT8gdkswyhUik6D98DOKVIVv/ALDxphgkkfzNx+a4KzpQgW93HGhw+vZBBYHoAxF0J9ZhhRKAr/o6BoV8PkeUVTRbBHyBbMCXpfCt9/bBBNsi/Ao8Ve2sZKk5ZqBDJGUNBm3f3sDqAr0vuqAUhqCqiUh5VNQoOPO6iQKWQeMTJaqKJsEZhWNdWAJq9aCYGNLaxKwVIlEVlKktDXHyP/l74DHgOYIwD/yL0pE4XA+pk2Qgag+YwOadxuF4h6ClkeS2iaA01XF8MgCUr/2wCvdgnzcC89JFfqcA9L7WfQcewBft94GwR+x59/LVW3woNvnQid5sD6BuuhtgagCnmoZhuimRX95T362OE8N2sO8ahGEJyIBJNYKTxAY9RJSlSEkh9+hreiA2KpBH9fh2exBb6CCTuJuHRsrTLBEGp0cH8Llr+9i//kXefErPE4FsZ3rQfLRS+YuGT77J7qPJ2iH3WvGibbf7tdfs83zTMCn3zRXwLq0krYCG0Qudx7BU3n0nVTg8mzD65Pg77tNduOJzPkuNRSE95Ux23SddpXEx+wNnn0ydb6ZxX5xeeoYPrOKwGDiQHCW0Nxl23St/Sx6jzTPFZgkfAbbp9kRpBEt0EcHnavRf/PZsDeo8fgzZTaeEOrEnNDTDmEUyLV9sLL/zrHnRfrSlfYnXKxzJkLM2BEr93KinHtO1PMNEJvIHrOyr74TFfTPbQefObzcRiU5O9qoLgpDjwmjGBX17bAwWHciDRv59r0IxHAUsR7618TRZVE8xdtFzALItQGuWzZuqf8wjP8AsA3FVpI03HMAAAAASUVORK5CYII=", Df = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAACXBIWXMAAAsTAAALEwEAmpwYAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAO6SURBVHgBpVZNaFNZFP7uS1I77YBxUTcjmaiVkUmGcdoZGH+w1YV/m3ShoG5UEHEhGBF1mVYREUVcF6uCghtBo1gXgqliFNwk/lJd2GhRXNimrTZpm7xcz7nv3vRpEn9PObmvJ/d83z3fPffdAF8wKaWfPEaeIB+Q05bVsSh5EN9rnKQBvtXO1CISVcB309BJ7uf/i8k7mLreq0Y5OqrmWIEAPOG/ULduHbxLlpnUEfIuIcTJmgQshwZXgBMnT0AODsJqaoKY5YdoaFQpcvwD+ThKr15SDtB47rz0/Bk2WJ1E0lVBoFeu2CeOHcXkqW74Wv+F5fNBEAolQaGpFAmpPoFSLo9i/1PUbdmG+n0HDNweU4kwmtOQYlkYvHC6B75wWH0pCMUS7tUIDe/w8XOJyAvpFHw7dhoSlusfIskYgjM0bLUfP8L4yjb4QiF4Gn+FpUHVJH8JCNnAFD3f91JQTFdBTPb7MaqkH79cvmL2pY8IVgi9+gGOfGhdBDH4igjCtGpRJlAfTQS1YQIyVIC4VwfEZ0COOTUxiU0kxSePgaVL0XDpqpFqFmN08JN99w5A4B7ukmwWVj4HYTyXA1qyEMclrP004+8RiOZRWLnpORZ1GIOVkkkUGcuxKMciqmt6exW4h1c+PKRAFfAM6pgdQ8CmYWAVSfsyD3HYgtxOscAYxLgzTwy9U1Uzhk1Y2tpITCxSZZL+ZUkmJymBAOrrSXMB8ZSEf0Z78GASyNM+PCRR3uaBMcrIWVTBBESx4FTAfjdpCIJMoA4UqN+F+tMkhYJy2UXJPQ3AG0oXvMNTTuo7IlhNhOl61U4mj+hg6wPJBDBnfcHcuQWvEBV+cA/sgduwm+d8Gu+/AXv5f7Cr5SyYN69gcLmqDFM1zpzpLUpZ4Sd6YF29Cetit/Ru7HBiHWukd/ZsWCXa82o5vwUCXl3BCMxLLRqNmrYu+x/zIX+f4zy3hCBT1yA3RyAzSciVS1Ax3zhjaUtwBbeYKhKJ4HNbOB94cRtIXKCzvx0YpiZa3Ao8p1OTeY2a5sKKm3e+svb29orVrF8L2fY/5Dl67y1ucSoKkncfgdy1pXL1wWDQ/RoPKhojUyKRqFl2NT+0F3Jh86exVCpVviPKJekLhm8pGYvFvovE7ZzruvGCbtmgrz/5oyQucNUzqGb0RaeZwaWynl8D5n1jaV3W6casdmUyewz6hPf19SEejyOdTiOTyag5fr8fBKy6hUdtVa/MWpXwnpyV324J+RO/LqIaIOsCHNAxltT/JYyPOvofLjSSdtQAAAAASUVORK5CYII=", Hf = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAACXBIWXMAAAsTAAALEwEAmpwYAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAQ/SURBVHgBpVZfTFtVGP+dC60CHRTmIHHStRlzgIQ/LosLaECXmGCygeHJJ43xxSdr4jKjJlCTkYzFZFnG4suymZj4ojIygQfCqG4zmZaIK2z4MFpDRBeYVNp72Wh7j+c7PafrZruw+CW/3PPnfr/f+b7vnHsu8AjjnLsF+gWmBSL8vq2pMb+AF49r5KQItmrnCgmxPOTviceAgJv6wWAQo6Oj8hmLxWAYgMfjRWtrK3p6etDV1aVdYwIBxtjJggKUDkUuCQcHBxGNRtGwtwacVaL2GRecDuBWJIEnnSZ+nlmUfiMjI1JQ2YAQCeiOkWflCAQC6Ovrg8PhQGNjI17pqEL1dgMVZSZqtlsodzF0HnChpaUFdXV16O7ulj5agGrzQAQqf79QWujF4eFh6dy4B7izBmxzAd1dQGQJeEJEUFMNXL4GLIp+07PAtVkgFArB7/ejv79fp6tNRBLVAufE461wOJxqbm4uFoDL5YKrFDh2BLg4BRx9l2NpmWHjLtBcz/HxCYa+bjF/Gri9yrG+vo75+XlMT0/rugSFwMtMrT5CIz6fT+b81YMtONAGrKyROjD0EVBawkS4nLpiQZnQ3/8USNvA0zXAlZ+AiclfJTmJKKukGvTqohI52Y3f7mDyBwv1PgvDAUuwWGB2ArDpacHgJpjA0IcW2hosfDNmYW7hb2gegjI/CfRQa3V8LLubypwrqPOYME0ToesmykpMsWwhxE0FS+L2iilqlMAer4kd7tWs/+LYd7rZSSmiRLg3eg/hg3sNOFN/WMRvwFFsoMRhwGBM5oTLHcFkbnRPtkRzI2kjmRK54jbeWJzC2fgllFz6ngSixVAHii0tIbA8g7Gd+/F7+U4k01wgjSKDCZFMLXJPDRHTkM0zImS7zBV8NnNWbLMq/ZrXQI5V2PcwEQzAnTSzY2mbZ8T0UyEl+jSnyakxOfUJnto0Hzi9JBCVEZRXyIG98T8xRKt4TOsPf4Xdib8kueHx6OFYsRLwFnV0gN+Yk6Pv3JqEp6MV/M23t0ReOn4BLwkBHQx7rklPzdIho6PN01cv883qKp4WsAVSvlpu3rzJE4nEI2EuLPBUfZ1tK9/NHcJfcCnz0y6iItNOQur1w2A/XpV5o1CTPh9PXrjI+LbyvCsXvnAe7IRTnB9ZcEJtLRyhWf2KT+xCRt+NIPWKjhzNnFQFRyTC2OAxXig1zlMnJTlyfIq/+FJPn6dvkV6JV91SPH3iOE+pNHGFu6dP/Sc11udnbD2v05MeOp5743kfDtevZ0lE10I6797F4+GwnZv3ZFO9XYCc536uHxYZyL4yd52n97VkhTbbX7ATy3/weDzOk/ta7xP3HhJFvZJLPpDLme/KJHX6qMsTzkXRMTEOzIfxz/P7eWmlmzm+/Rpof1FcEq+BtXdo17xXZqFIqCbn+dZtmv+Pvwu/IljLIYyosQG1zQvav3b9O+/vcHZOAAAAAElFTkSuQmCC", Vf = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAACXBIWXMAAAsTAAALEwEAmpwYAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAN+SURBVHgBpVbbTlNBFF1zzukNCoVGEUUjwXhLLEp80RiNia/G6Ktgol8gfgHFL/APJGrioxo/AI2JxhcV9EFNuPhAEBVoaaXtuY17z5lTTwtFiDvZmemc2Wvty8yeAluIlLKLdIx0knRO/pVVvTZK2o+dChtpgO3K/VZEYhPw2zTkSbv499R3G6+/VdVYtn21pzdt4lA2hnMHkxjsjYemBdJxIcS9lgScDg2uAB9PlbH020N3ykJHQiBpGWpf1fVRcSQWSy7b4O6lrBzIWiFWnkjGNxBozxX7g/clPPtcwfGeOCyDQIXAxmAlG6Hq+JhbcXD5aBI3hjrCj3fCSESYcxrec1oefCjj+ZcKpSAOweC8JULAU8KtE3AEPH79VcO1YykiSYfpGiKSeUMzcmq6ZlZcPJpax672GGzfQE2rHR29yFyG3wR2p2N4OL2OaUqtrt99nhja+5sqeZMF8tpUWo2AMQDXl8eah2DuiQYy0wzsHpKDWi7yMbdocpV/za3Y2JPysbfdQrZdwjI5HRS+kI3FCpLTMOEsuUScNgR818ZC0UZfRp2uUcHnndmKxSIqlQosy1LesNZPAiWec+2VZuD7PmKdA+StFeQ/qKFa9zwPrusilUohk8nwpxccwSme8QeDisoaAgoR+O3ZJVSX3sFdfELp2IVU3yW07z+DZuH9bO84TrjUb+mCKA8Mw2gwCD20CzOwV7/AXHkKv1xD2aki2b0PRtuBBvBQQzsmMKIbomNUrJiEs/wWyUQFvX22qo101zaNoNmeI5hXTOR9hLlBzMxJJPuvo7R8FMvFeXQcu0LeH0Yr4TpqKdQJ4vE4arVaS6O23tNwkgl0Hr4Cs+MItpIIwQeevSS9uOYnMPGJC23qG9wsWdILrVHVhfaplgK3hlLQTeMZE3DPGNvXGUPBjeHjT316NqnFlqLahkBPm4m9nfUInhoExn3jBf8aySWCjeoGyZ3h6940dr4tXJqI9qJbpIXBHgvDuXhwNXeCrxve8IkEBrrVBVVvA08UATOFCyO0afhEXOUzaJvyn+C8l21GcvXHZ1xjbnhw8gg6K2YLPu6+qmJpnWpS3yaaCCVyu00Cj2Gwx4yC5xGxaHJIjmoSdcOnf3h4s+BhdtWn1y0AT5OjOQI822dGgTd9MltErR79Cbl9mZT/8e9iVAOsRgDn9Fqee/5WGH8AKIU0tzqfI4YAAAAASUVORK5CYII=", Pf = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAACXBIWXMAAAsTAAALEwEAmpwYAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAANJSURBVHgBpVY9TFRBEP72HccBdyKYIBoTAsaGP8VgCIoJYqOhUCtbpdDQqFAYS45KjQkhsTMoFMbGwr9EYwUa/6CBKBIKEv5MjMbAAXf83N1768yy+3jmQO9wyLA789583+zM7tsD/iJSygLSDtJ+0km5IfPa10ZaikyFgzRAutK7FZHYBPwaDWHSAraT798h/uqlGuXCgnrHKimBr6oa2c3NyDp23IRGSDuFEN1bEnA5NLgCXO3ugpydhVVUBFFYAJEXVCEyFiWNwZ6ZpiAg+PBR0ldekaVhwkTSmUKgM1fsq3duY63nHvy1R2D5/RBSgoL4JR0iGVeps7yC5PgYsi+0IOf6DQPXblYiTM1pGOayMHjiwX34q6rUQ0EolvBmIzQ8gatBwiby5Mgw/JdbDQmX6zCRTBmCXhou2qNfEDvZCH9lJXzBECwNql+iiTDLVXN3FWTbS4u0knHkPn1u+jJABE1CZz/JnmhtDcTsDBFUUdbCJYBnBVK6RaW/9QeOJkl8HYVoaEDekxfmpUJuzDme/Rwcwce5IGVejpx4Efw5gdQtxmLptHWZDEkykcByyIY9ModDQ2Moq6tgdxsTnOXZraEE7pa0UpoWAtl+7MoPqMa6ldH93cxmI7IUx0pJnKYOrgxG0VWneBuZoIZnnyfmYCq+lnDwayGO3IBPNdhNWJg95CWQWFlzkEjabvzb4R9mvaVMoA7U1PcYPC2lAEepjxgsK7VYnDmDc+03+rIeH4km/iDQz8TGLvFU36a9aDsSmclGPLdsiic7Q9kpD7cnAqV7Q8aIuASNNcXal2m2qXLwQKGZjnCJ3pCeuHomhOrAY1VvIba3CtUTKmfT6ZvG9YwPGjd5nq3kxHmI2CCReNqRNvj6p8Px7aOD+sG4y+jACv5uDLDl29OuzqfaIchMzK7K2t9jXH38LbK00UIaEaGjsIrbvQc1bXAWjhW56gSru0H5+B8zuQ5ahdjdrjP6N495DxTDsVo6NWbKhROmoUMZK2Nwpi8B8W9uP4TwEBryYL1KSITqveBhY2x2ZbZpEnXCZfQTsPiabqExSCZjpy8fYMAdp7zAm16ZWyxbXfp9Mn3pl//x66JNA8x7ACe1L6y3+ZbyG+a3+vfju5pFAAAAAElFTkSuQmCC", Ff = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAACXBIWXMAAAsTAAALEwEAmpwYAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAQmSURBVHgBpVZvbFNVFP+9rmVj3UZx7dL9cSwTtul0W9mAxNjWBb8YnTWCSiQxkAwXBbWTKMEw6L5oDMYYQ4yJhvFlYKJRZyKKSNiUiCR0KCqMObO6ZayOrX+2lvW9vtfHvbfvdiUryxpOcnvuPe/e3++cc8+9t8ASoqqqibRDpJ0lbVRdkKBmc5NWhWyFLtIAlis9dyISMoC/TpSHNBMd/3bZD3ORgOJvT0A4/SMchhdQYilEQ00xXI9Ww9lcxpeGSOsWBOHDOxLQdGjgGPBex4mTQ9i+sRCNF76DYLXifG0res9MYDYiITovYXRiFiqZ+9X7jzNCTTyEpHsRgeY5Y//1wghOef3YWzYFw6AXgcfa0HNNj8FrAQgCncsXq7gZk/HnyDQ6nnkAXS9t4HCdPBKB55yoSzQtscPvIVpZiZyWjdCPDANN6zE4LmLupgyK/vGXw1AS6gILi0HFuH8WRw/asamhgqfLRkh8nKCHqB3K338h2uqAob4eOcYC6DQPtEmM4Iny3YgkhLTcqnQ9Vhl1aG+rwpqKEtjqLPRDPyFoFTTvR6kl0twEYXyMEDwIHQHjBByNKkdFJ6IJHdI2LhkF0TRVDpsVP33Sxr+u1pOfp2lPkiRIHS8j/8B+yLs6oDOboQsEILVswhVfGHNRmREEj09ATihp6UmSiHGZKIEUxyQrEK263NQVF+2dPDeG88E85vkVv4Tj8/dCuDGF/LffRHGBHu/+MIOdn/kQjsbZxlKxN5ag0mpENKZgOiSREHUsjX39Ph6BkxI00d6RL4aYl9QQDIvYc9iL7RMP4V/3IVTvewXf113Fa8/VQoorpERliJKCp+zlMOblEHAR86KSKsyfL01ygiqKxw6U73qEkGubR3RcTuDr/nFsfucqPmg/Aogi3ji6B4qUjGByZh5b9/9CwKbYXA5eXV6IUvPKFAHdZJbIta7P4Q/EYEqIkA25mIndfshXFRigl6VF9rTdZntRZNSjqjQf3t4tzEoj8CUBcknYCfyv5GYECUfiS4AvyCzZo9VFeXwYShE4m0uTnhoNuFtpWJe6Nn6nBAO0t+PJdXi4wYxXn6/BI40WmApXIBsps+Rj97M1LP8u5xpu7qME7M6gl9VHezegc1st9r14P0JzErKRBLk+7MQxa/HKVDaIfEPKXqD3Rj8d1a+1sGMfJuAtdfcgG/GTqtp24Bw+7bJz0zF6F/Ezv5O0kF6vx+mL0+g95cPFoZnlo2sV1LXLhsZk/tnbQDuMgDJxw9bN96GlvmThjskC/GC7jRu7NcxFD46HKPro4I/hALa8dQb/+aNLwjvXW9HV3sR0GriHDzI9mW6NhJ3wgUE/+gbGcPmfAHyTETbHVLACDgLoclamA2d8MjMHnXz0j6nLl7PqXfy7cGsAwTTAUc3mIc20FMYtsV1Kq3nw9ksAAAAASUVORK5CYII=", Xf = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAACXBIWXMAAAsTAAALEwEAmpwYAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAMGSURBVHgBrVbLS5RRFP/d7zE1mugEutPGtRMZttIga5dQ2F9QbqJdExQSBI2LCBPCdVRauO8FtdRAWwVKPnA3Ni4L1NLG+h63c673ft5wRtQ8M2fu8/x+95x77r0D7CJSygbS+6TjpEW5LSu6L0+axX6FjTTAXmWkGpGoAH6TigJpA7fDqUn8+fBelXJtTc1xWlrg5k4i1dMDr/OsMV0lHRBCDFcl4HBocAW4OfwYcnkZTmMjRKYBoqZWmciNddINxKWvZAPUvByTXlvOYBWIZGAHgV65Yt8cGsTvp0/gd5yB4/sQhEJGUGjKREKqXyD+VUa4uIDU1T4cvdNv4G4ZT4SJORXTHBYGD54/g5/LqUFBKI6wVyM0/BYf12MiD2am4V+/YUg4XKeJZMkQjFBxLZqbxcaFc/Db2uDWHoOjQYVBEwKw6okX1I5+/iBPFpF+/dbsywQRnBd69UXuWe9oh1guEUGOVi0SAlgeSJkElT5C14CIBoL5OYiuLtS8emcmZTz66VWbujCPiLPjRBZxUxNAsTeoQoXezgdpvoqEqaIwgMxkEMQSfrEIv7WVJ+bZg3GqdK9RCpbLZXieB9d1lSaZwOHQG21KHdqkjOMYURQhDEOk02nU19erMHEU2pUHNOA4jlIDlKzXAjKlPW4vhO2DIDBdWQ6ROlC8Ah60pRJINWFwo5Zd1rEn2OVBxBDYwgRLqqJDcxjC+6hlNSFIpVI4LLEIZrj2kbT76PdvcB4+gMtu4mCexJyuFP8jd+8BdXXc9YbTlDd5hVvhlcsQn6a2D9g+RJ1o1uZm+J9nTHcrHVjB98YEt1y6R8zx33v+bBOwei/GTNco30Umi/pIV0VnFxxNsl9wFud2PwRdM9Bvw7+Ttp4/JdHQoIyajstYq9xFeZznRo8G7RcuX3klUhaSKXNfZNRxagdRbKkC7r0k46lJG7xgY1Z6MpmdXzZ1wiVtOujJxPwsZKm0ZcD3DF/JF3vAYdVS8cms5gk/+qNy7zIu/+PfRV4DrFiARd1X0GleVf4Cx1o4TyrPR0YAAAAASUVORK5CYII=", Uf = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAACXBIWXMAAAsTAAALEwEAmpwYAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAO4SURBVHgBpVZLSJRRFP7uP7+jUukIaVIxTRH0sKAgKhRqkUVtKiqKNlGrnqRBtG3cRNCimk22SklcBEFtepOmJZn2AM20jaOj5gOZmUbnPf/fufe//8zIjDLS0eN9/Oec79zvnnuvwAKi67qN9CZpC+mgnhKvnKsldWCxwp1kgFzl0XxALEvwGmqcpDY+/uwO491ASLSBsCZsVtlUbC63onpDIXY7CkxXH2kdY+zevACcDhmcAkbwoN2PEX8cy5eqsBUqKLQqwmE2qiEY0eHxxcgJqD+1HJsIUIqTQOoyAGTmAt3V6kdjVwDbVhcgz6KQFZuTi04/zHBCkMB+T0RxescS1OwtNk2umSthJufUfOe0uD748bh7ljLKp7j8swmAVCuDCyhdE/2esQjO7kyCcLq2k79bkeacGtuviah+vy2AsiIrwnFFaChBbYIhJMZMaCjGUnMJi2hXFOfBRb6dQxHI/XskcpLZD/LBXtcfjP6FyB4Kz5xzztLIZAY9uqA+SRhoFbqmoX88gp12Fc1nSs2PJSr9Ocp7A/0TWNPTjrXMgtJAAdR8qxGcpeJk1lxy/xCPUjF4g9CHEhjevgP2rev4p1oOcIT3HE33Uf+8HirxrOYT/yUlqXjV+4F91cDQMO3UV6CzMy17+iVDzedDIhxGgsCUFReArbcEKRxgG+9pvT2wGFsKRCJg09NAAdX4iZPAlavAqePA5JSxijwqyfJyYHycbMNgIdJ4TPjyk6J1fDJTcyhyQ8A8HkFJsiBjVOOBAHCYGHTdBdxuIBQE4nHg4iXg6TNg4yZgZobmYkk/cVL8/iSAavaEActCs58qLhwxAnNRyWXdeiAaBRJxWa5pMTA3Bl+BW/SKipFV3rwGLl2meigxxqEQUUYcHzpA+/Etw1yswm43hz5VAjgsVVXQ+3ozAZqbKNMEcPsOMOIBXr4AurvovpjFfMIqtpjdH/wcOKlzc7i/A3cenqTSZ3MObM4iz4am6bhx/gnsGyv57DUOwDfZy0fH3p9Gx9SXTCJzBOC6unAVug+3mbNrFbov+L3RykfXt9TM2bTFr0JH4556c9SQfhedI/VVlu2WIEi/C3LOnvtW2DbzGfE28I4A4EjmBDe6XnE1dxAzOPmI5AypkzEzHhwnjJsVP319OPvxAjzB0QXjV5buouA1qCzblR7caQ6yPZm1EkSc8I7JTrwae4tebx88swZYkXUZqojOgyv3pwfO+mRmX7Xx6DfouUuL/h//XdTKAN60gINyzinLfF75B1IFGj6N1x12AAAAAElFTkSuQmCC", Yf = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAACXBIWXMAAAsTAAALEwEAmpwYAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAOpSURBVHgBpVbNbxNHFP/N2puEkjhrQZuSUuIAaqFSQlpU9dCKOApVP9QqVdUDhx6IVFVVD61RJXpzHHqoOMEBCW7kD0BIlrjxEXNCCAUIH0J8CBuQECiO7ZjEkWPvPt7M7thLEgcjnvT8Zt+++f1m37x5Y2ANISKLdYx1kjVNdcl7vhhrBG8qcpIH0KycbEQkVgH/m02C1ZLPF58vIvlkXtnCkq1iIu0mdoVbMfJhOwa71umpBdZxIcTRhgQyHR64Avz/Vh6PShV0tQURbg1gfdBQcQsVB/NVB+n5JZ4EnI52U7/VorESTDK+gsBbuWI/dGMWx+4V8cW762AaDCrcMPImaMuTUKrauJUr4/ePOhDv26DhDugvETrnbK7JtBy6mcPx+0X0h9v4rQeutL4igu/HIUU0NVvCXx+HNIlM16dMktEEJ9nsv37vIXaffUb92yKioyUI0uDQBP6MusBai+UKbhfKOD+8CYPvqX1JMcGQ8Faflp7e3l5kFqoY+OcwGbu/FprAxfbSRPorCDUHOcreyC1icGMLk3TrVYSD/POTokulkMlklDd77F/xTvQybftlr9j8gXglNbUU+YUJKnYVXcYCHNvGw7mvsLVzu3wTkwQjcpRMJmvxMzMz2HDhlMjdPYU/D4J++HZlOftTRSTgOHnY9iKYB4aIsf+IfDkI71RSNBolb3FKTdOkUChElmXRH79Z9PhOp0Mv+GAr7fRpiKhokl0AVXKgxRlQKTugD2AaetTT0/MKgdZAIKDItm81aeKEqcBcDbIGWHkbi5ykOVA1DypnJUGkdsSDeI3YnFOp2VmuSAe8mzAaxap6k3Xh2yQZnJGDcDjckGR4D5zpS6DRXxuD1xkYNBjRnkKNgPdgRbzVCRw/CufcGRhbNq+10ct4AgN6eF2egwQPxmSZDg0N1aP6vqRv/tuH7k1Oc8DqvJHK41jfj4h0qDI9IAlk18zLJ0mQunqTxL6DML7b3/SKXQL3wEXaBB58/7729upWMckmmrpyFXunuJC7ttRbRNMEjupLU8MbscsypWeCW8Wo3rRR1kL0888Q37OzXqRvtHogvrNdg6u7QQ4Ugex62hH/hNvujvX1RrYWE6EWF9/RruZ6Mu5hrrhwEmzkpYPpQgU/Xy7whWP7wpZ3IlLNTa5cWh94Ar4Zy76WYh6Je2Vml5B8Wsb0XAWZkntlWqahAEe6W/3Aq16Zq3+5e+lPUPMySW/x7yLmAeR9gGnPl/DKvKG8BCuDaInVpOWDAAAAAElFTkSuQmCC", Gf = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAACXBIWXMAAAsTAAALEwEAmpwYAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAOJSURBVHgBpVbNS1RRFP+9eTOOjpZTBppQGrUpwmwdVNtaWLs2LWoRbYJsUStJBVe1SPoD0jSQkkAN+6JQCyEo1NSQxFLTUVLMmebT+bqdc9+945PGGuvI9Z53vef8zvmde88V+IMIIbw06mn00ZgW67Kq1mppVGKrwkbKQa7SshmQkcX5VZoaaHj5O/BmED96nso5FQhA0Fp+xV4UVh3GzprTKD5+TJv6aTQahtG8KQDToZxjbW0Ny+/eY+VmE5xOJ5xeL8yiQrkvFQrTCCE6+42NcLCzHR4CVNJAII2/AajIJXqAIg0GgzBn5xDrfYHk5BcYvFMoC2GpgvRUJILw+ARKL13Anrob2t01nYmhOadpmGnxz/uw8qofGBpGamo6E4WhY7EDyB9LDw6NoOzKZQ3CdB0lkBmHQmRqvIlEIhlYWICLnKS/L0NEYzAiUYBmQZGC9XBE6oYcUWuN9Pzy3fA13cJPqpWqX4uMR0UvQ11cXJRobrcbDocDa5RJ+OFjpGbn7ZWSaZBdJps0B0RqaHQcRVT0Qy+79eYdTvp1VheVjUzTtJgg0s2SnXDk5yPB0duKxr4zHxqW7NkySBlwFtut01XLAGdYi8ViMmpOPfzkOeKvBxAf+yQj5ALLgA0duZFB0d9pv1/WyUEGq3SsFcAJBqhmLZlMSgBEidN0GvGprxB0HGlR+eKCGjaatCqQJhuRIHtd8LeD+q+VXAO5e2lpSQLowdEy/6H7HYgTtxb1xgbHPAQFI2dYdUiTZlbswZHPw3KbM8OtMjZsTszycq64jC4X0cfZfnsZYIZT4eJyMoIuWLirF6GWB0hMTCJX0feQxU2tRInfoQCQl5cnV9J0zg3mnfn/R7G1jREGGNAA8piWlaLw/DmUfxhAyd3byKuuysmpsGleaoJKuhmgWQO4XC4Isb7VsasEhqcAuQpbuoiebesdtstJRfWT0376OOnxeBDw+RDuoNNzrx3JOd+WnLPs72zTS632XnSRhp8zcKdoK7VlgdxFN7wyanQFFv/ybWDF3q5rabrDeoRuM7eOyKMuyqQN8Y/jf3VeSs7L6q7r5Uy7tt+DZn6DSa1nqrjhJQ7sAwoKkKX1ZNYKie9Scly0zvuGVy3bk8mZyPbN3yFqXIGeZ4iNjiFODxCLWVwsHW6vOWV3nPXJzJ629ei3itylT/zHfxe1ysGqzeG0WmtQtG4qvwAyTELQjmMuuwAAAABJRU5ErkJggg==", Qf = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAACXBIWXMAAAsTAAALEwEAmpwYAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAPBSURBVHgBpVZLaJRXFP7+jDFjTOLEtNZYjEmaLrRJiH2A4ISmpV2UWOqmdtNF0i7a0kWni2IWBScL8QGCL1BRSVBwIYIKBgXB+Ai6EM1IMMbnjPExJviYSeY96u8557935o8zCSOe4XDvf+8533fPOfcxwAximqaLdB1pP6nfzMoLNeYhrcW7CjspgEKlZzoiIw/4P9R4SV38PXB3EH3XL1DrQzgeEZua+QvRtKgB7Y2tcNcv164h0m7DMLZOS8DpUOACvOXMQYyGglhQVgXXnHLMLXGKSzQZRzQVQ+B5kJ1wqGOD2VjdoLG8RNKdQ6BWLuwbT/dgz8Uj+LLmMxQ7ZomVQT+TfuxgZpyAWCqB4eBd/LZiNbq+79Qz/+pIDJ1zagY5LQy+99JRNH3cADISUFfyNUpem4gWF4naFpVh8z0YwZ8rf9YknK7l5B/QBD3UdAw9vo3Wbb+jcdEnmOssxQ/3J/Hdw0kse56QVBAj/BUlOFpfgdNLKixwRTKRiOBG0I8Tf2zTdTlLBN8YavV+HmneuAaj4TEp4H+D41gVmLBCNLL5NNWKD3/qws7mD3UoQsILdNe2EMl2HWQlJRirpaj3fAT+RNKy5vI9rLodEUDDlm9dCwb85VoMY0jjwLIq+U6mU+I74PcR1qCOwsMJ/Yl7fcMXJAWLo2n8dfYmjFhMFKJxIK7aWJT6cdHOqw/hiEQQTSfwNBYWf9a+4QG9rK85ghbuDT2+I6ttexRBUTIJ49kzwEnbsqhIFTITQiZP5cTZdmscPfWlSL98aU0bkAiU1DKBHCje72ywOJKy0pJOW+pwWF5SBNuxkbybqHwaQnrJ7Ow4mYQTkSkE2Rkrw1Pl1SvMKLrqhq1WNuEaBLgzb06ZDARoG76LjMx35ozVVFbrbihD4K6XUuBEXQXCJQ4UIqPlxTjF5+Et4W2uxMcE57jXvrRVRsKzHdj8+UcoRHY0L0DSYa+L1WgskuNMsFVH4K5rEaNdTR9g0xczk6z/aiH2NVblgHN6dDZIjumrop+aNj4kP+73qP1MxpMpdF0Zw4pgFHUTKYyXzsJJSsluWsBI5Vu5V6f5/N/70FQtKeqlg9eZe9md6cUmUk1SkKg7ae23Hegihe2yk6uRO9TIHc4Ga8XIzNly04JjCjhLt8LMeXC81PCjg6HgHfx66H86gGPWZL5oaNUr6XJjYKlfFtyrP/I9mR5FYj2ZVJe+GwNCOBp6IjbznGUC2L7UbQfO+2Tmj9p69HvNwqXffI9/Fx4F8MIG6FdjXlLXTBhvAFZNJumnSqKUAAAAAElFTkSuQmCC", Zf = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAACXBIWXMAAAsTAAALEwEAmpwYAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAPJSURBVHgBpVZdaBRXFP5mZrNt6dbErTaWYrutgZa20Q22Tf/s5qEP7VMKQoVSrFIfxBcHfPBBxUQFXxREBMEH1wdRQUTzIIIP+fEH8Y+seRGNmo2CJqjZye7OrNnNzPWcO3OTXd1dIh7227k/537fOefO3BmgjgkhmgjbCX2EETFrmWDMJMTwpsaLAoK5WrKWkFaFfCNdughN3J+e6kex0COvwrOkj27EYITjCL/XidA7HWopT3ZrmravpgCXIyDHwOAYli9eDTGdJsJmaMZ8aFok8MuTmA1v+gG1gVH7pmhtiSquLhLpVpx6lcixMzmIv7f2Qtca0PDu1wg1RBEydBi6TXCordFYhOaWIRRuwZ+bzmu8Rgnw3qhOSNW8nPzg6Tto+3IhDKNIURdJyM9VhSiCPyHLBXy7JIr9J2/LuW1r2/iynTjPUCZplQGXpunW8AR2JG9h0Yfvw5lyZbQMnaHZJOZIcFtX4wR7SuCThRG5lksb7F9SliiIfg13Vm7ppTB1+ukk4PlEkphRQHrUhmUpIX+c550XFEzIkBXfmUyp6nTwbc4Z/CU3NTWG0TFbOk1MlmC/8JDLObh6g8jAyONQ0sHRE9y2Ja7RnGU5MphMriSDG0iNqyzYTN6DTm71XHwkHSgsPM0WESWKxnk29u4HVvwErFoJ3BkGnj0Hsllg7wHgLvWPHxYUjAtLCmgywJ5LD5FoW8S0Cc4gzq2hexP+ThKmSh6eTRapnYe5wcH5XgfNH9loX+7gm68czPvAxtlzNjabnLEtfQtFd2b9hcFxlUEsFGwI0k/sGQe20rRHt0kWv7QbGBnVqRQ0RkHS3YrHT4Bwg0C8lW8lz/eV5q+38qUKgWBOC1IEKp8/Fz//4OLaTcBzfVy/AbR/hzo2u54F0qzUGAkD4wVUOT2w5HNg9x4gQ1kUyCUaBf77pzZ57OOI6lgzAol4M4buT8J/fCpF/vgdWLAAuHyFIqIViV+BH79HTVvaMl81U7zJA9zqXLE4IH/d4kuBdaspik+BFsrm31V0/aIWvQi4pPWwgDz9OAOGcqpmjY0+6tlnVJ5ZHpzR6bzgY7afe9vWtNYkZzM3AOv/R63A5d+pXb+pkSPlZ9FagsXKUoTP4DpC1dmFXLvMr798N1S6+K8/ad3JIRFKHBPeJCTocagJnmdfXlNmZvU4hOhSHqnhjHCzMeFaqBBSbQbPubkO0T84Xk7eVT9ZP5OM8vZKfcJzTOHlO6Sgx8jF/TGae+VDwMRcLHjpHxFztz7xFl8XZkCQKSMcCca4pE31OF4CT0OwCrLOACoAAAAASUVORK5CYII=", jf = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAACXBIWXMAAAsTAAALEwEAmpwYAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAMvSURBVHgBrVZNSFRRFP7Oe434U+YsrEUiuowZwzAQNUohCASpoJ1ESRC1qKYkate4aBFBuIwolWrfHxhRoIaj2EahMd1pTgYFOmON6Tgz73XufffOPHGUqTx63v1593zfOeee++4AW4ht22Wst1kHWGfsrETVXIC1Cn8rwkgB5Cu9mxFRDvCr3ARZy8Q4FRrG2pt+2dpLS3KNUVkJ01+DgtZW7Gg8rE1jrF1E1L0pgUiHApeAq933YUciMMrLQd4yUHGJNLGX46zLsOa+sA1Q8uQpTF+NhgkySdcGAuW5ZF+9dxeJRw/hqTsEw+MBMQobQaJJExu2fALW7xWkpj+j4GwHCm/c1HDXdCSkc87NuEiLAE/2PIbH75cviVEMcntDCt7hE32LyZMT4/BcuKhJRLoOMsmsJujl5pw1GbbjLUfI4/PBLNkJQ4GSRiMCXP1MFDxO//rJkUyj6MUrvS+DTNBCyvsZMROvqwVF5uDx+dlryhDAFYFtZ5LKf6R6QJpfpCbDQFMTip+/1ou8O/hxUvTSI8MAg5vcN6JRGEWFWe81Col/yrBIQrXASKxJh1KhEFKMpaIICIITsmr6++UC6fniAleN11VilGXItA4raeJYTNqaIl2MpQiOCoJauTT8yfFeDBIJ0MICUFjIE4aDmQ3BnSfZp5VVUCopbS2hIyH9tkoQyAMFrndyEuD4l0w6aprZzSVaByzVshwSZWfwM60OpCbIJIEox9FOp5GvkEu1iKhmZa90N7ZDZBT8KVESyxCYXF7bJcRlrmRCpGiItflbexvurDzjPaV1qc5bbHXoLBu3zrSh2pl9KQ6a2OSoGJ1+147RHx83JjJPArHZFcX7MHZqSM9Wc+mS+G4MitH1A1fWl+A/RNHT/ECP+sS3yFCDDtZY4956RQJV+/kDC+1kW593v5iRd4PoSALBpCfEos6ay/mTaHC2kc450qUwN1w4QW7EpYPJ6BTOf7iEyPL8lvgNe+oleANH7wIP6kGuKzOgSOQJH/0+hrfz7xFenMLXuENWWrALIp3HK465gXNembmjdi79Pjt/GbD/49dFQAFEXYAzai6oynxT+QNcneD436O67AAAAABJRU5ErkJggg==", Kf = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAACXBIWXMAAAsTAAALEwEAmpwYAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAMGSURBVHgBrVbPTxNBFP5md4uoJFAPGvRATTwYFdo/gMSem1T8AwjxP7A3DsZQEBO4mRhPHOBsPAiGM1DhboCDiYkgZ8pW6O72547vze6UbcOPqrzk676ZN/N9b+ZNdxa4wKSUA4QpwhphT56aHfblCAn8rfGkkKBbWzxPSJxB/pIeecIAtxvVddS8ZfWUfkmNMcwEzJ4Ueq6PwbqW1lM5OC2EeHeuAG9HSI7NzU2kHs5ANvaJ8A6EGYcQfeG4Mok58Bs/yQduHK5Ia3hYc+VJZFpzGmdkjvn5eUxMTMAQMcR6H8GK3YJlGjANh+CSL6ivj2JJWD0PcJzNCGf2jabKc210w9J7HiVfWFhAMpmEaZYp6xoJBWvVKcrwR6rtAnoeP0Hlw3s14Oar1xydIs7PtJJ9vQLemoGdnR3Mzc1hcHAQnuepbBkGQzgk5iqwb+h+gnAdxO7eQ4VWUS9sIKzfotqiMPsX3BgfH2/Vw3VDIkXM8CK+Gz6DuOlQIpYJWgy8t62tSvMx5xU810U9ODigSQK2bSsBnbEAo8yyoe8oGDruUTJHtipos1DQq2DLcd8Ye6urq63si8ViIEAkkBpuhx+0WVg41Fc8VAKM+pcVTfWUi5xib3d3V2XPVq1WlQhQwelBk+go86l/2ICo19VIjjS/FnQwYYUFUdsTtTpNgDwmz4yIoJ1YwafBFsKDpuCXSm0Cl1gzxOUWFdHGqe2z09/fj6sycyih3VJLYHR0FFdhnL0xMqKb31hAnalMJoOrMK5KLPtMN5cF/xnIsbmVzWaxtbXVGnz0y+6KtHY7pssNOTSEG99/6NB9g44ml3ydW5OTk/hX02eq9+Mn3bXE76IgGFwwfEtJehfJeDyuQKe0K1R6Y9Ij1GZnojdeoj2D4PqTURH/NxQuIud4B7mMvq47RfJ6xPb2tmweJ2SzhDYh7TM41jxJy+bGepQ8jwv3MliJrUf79TXpuznpl9NK0GecpII+inV8COTQVcGCmizJ7m1N/sfXRS4ksCOEe2FfPjzm59of6mKqjL3m6E4AAAAASUVORK5CYII=", Jf = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAACXBIWXMAAAsTAAALEwEAmpwYAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAV7SURBVHgBpZZrTJNXGMd/RbC6tkKlCggTnCBe8AKKFzDCxG0RLxhddNNt2cx0cTEbW5ZlWaJD2aftg7q4uHiJlw/O69S5qTHecOKNokJFlACFVqHl0tJBS0GgO+/bvqgRF5c9yek55815/v9znmvhX8Tn84WJ8Z0YF8Uw+56IM/AtV4w4/qtISgGAl5XdLyJS9QH+uZjyxAiT9l2FV+g8fUqefS6XfCZo+HD6JY2nf3Y2wWkzFdUWMTaoVKrNLySQzBEAp6C4jsvbjhBjNjHAoAe9nqBXNPK5Hrcbn7uNNms9ln56lv7yLRNGhSsweYJkw3MEgZvL7Pnbi9h68C7TxkcQplUzMzmSpHg9Om0P6uCBtLq7KCyxc6/aSW19G6bKJj5ZPJZ1q1MVuC+Ul6gUm4vptmSW/B1FbDt8T9zIQHb6q6RNVTFEPRCj+Rqx2hhae9oZNTQRs9uKQZPAX0YXR8+bKb7XwGfvJrFuVapirmRBUhMUYJRME1Za0cTG7cVEGrQsnfMaSSlNNDgeYPc2oBtioLjzNi3qJq47itCH6DhdvJt5GWG889ZIoodqZV3JtAH/7Zb9Fbj9h9Jm8VdnxZuCWJI1gknJ7TittUxMnIHDa8doOUu7qYayG+cpLN9HqdPIiqzVbP7ze5bMimDF3ARZN39HsWKmTCnMpRcsUpxaa2tleKSO+ZkGjKUXyJixgMe2FsqOHGZo8DBCBxoYEK5FU9KAeecB6svNLH99NdsKf+btN6MI1Q4QOPXKKyTJlQhypNWJglrpQcxKieJ6+REi4uJpPHMMT9FPLJzaH29IB1WP71NuNGLIno/G0Y+7u36gu8RMZkImdtcD3p8XL16h4sSlGoUgQyKYJK1KK5pln0vmiTeMJMkwjlAB2t3eiMdmJWfgBFaOzeWbrEVMdnbSLEK0ylKPu8WJN6iL+1WlzE4dJmNcvl2vEMQFBxxCjQg3ib1LBIDL1Yi9s5G0hWvxPVwgss2D7V6ZCNFm1EFthAc7WXP4JI9szUyZkkpNSw2/Ow6yfPQCGaOltbOXQImi3rQYGRXDDXsJmhB/UoWGhePt7o9+SCxDps9GG6elzVxAsFpHYuJo+UxjayOZ2hRUPcH4I/9J/kpfaiSmUJFQ4KH6URvzx8wldnCsfMDr9RIdHc39ED2magedncuITvbR3d2Nx+NBp9MJk8ZzK/IWWpcfOG6YTsFv6SXImBxFaaWTC0X1RCcUY2mxMmliKm1/N1JbYeSM2YWq2o23XwyqOAcrO86i0oUSEZHDr1f3oHbDfpNZRp2Q0Fs27kgmKpBWORn+G+8/U8Wq2V/j6W7niuUqtua72ByP0YfVM3TyJWZmHid6kJsb7Te4VnaCI6ZDTNWMY860FeJy/vBUsKTgVEnJIBZOaTdnzSkKbtlZu2wsa9/TU3zzHJr4WCJUaTRZTNjrzGRlZfGwzkawJgZrzzW0ljbccTpKr8aRv/M2sVEaKo8vVQhGBIl6IdWNS9Ju3apk8etj66FyDpz0Ej95OuOChmOs20d84gTGZaYTMkhNu0aD1XWO5ke1RIwZjfXuKPJ33ZF1j/6YpYDveboWfSQ5JEMkmUzi85G34xa/HRNuV4czuPMVrtcdo9Z4hi2H1xPpdWDvcPFGynL2noAvN92UdSTdiX77y70Bni3XuWLaJK03iqfm77gjx3RslI6MlEg+mDcStaaDnm4vVlsXRSYPe/+oFDHf0Qu+/uNJCtyz5fopkjz8lZWSCgd7127BZ7WKQ881PkUD0tPJ+XSefImASF0tT9n01TJzAyRyhvuuFoJomZSZ8FksfoXQUJBa5dxsVGnpimqfLbPve/mb/h7fy8tF3//4d5EbAHA+BWgOfMsLhPkL5R9E39RdNMNd4AAAAABJRU5ErkJggg==", _f = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAACXBIWXMAAAsTAAALEwEAmpwYAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAM9SURBVHgBrVZJa1NRFP7uy6t1KDZaUVQsBXGiziurgl0pFkR/gAUFF+5MxQFc2HThVosLt7UiuHQCwVUrqFUQnFs3HahFO2nS2qRN8/KO59x3bxJiW1PrISfv3JNzv+8M790XYA4hojBrI2sbay/lJGZ8EdYqzFdkkwEoVlqKJuLAcyZDLW+HX1IiFqGxwd0U/1aldXyoVvvSU21UUFWkEE8VgDfyJSr2u5EO3PtyE4PJAdzay4GhFVCqzMRNgPwEfK+HbWDZqvsIley2MFGlVNMfBJI5X5rFbu28jgfdLdhWsRcljosrW0cZXELJbCFtESn4mQS89CcsWnoWi5c3WrgGjm/OEpj+vWUN3+m6jkc9rdgYroZgkiJcqx7VkTYbMl9k1PeBdOoNSpZFLEmcdQ+T9Dlmj3jD3WOfcafrBiqWrkGKJrVO0xQcJwlHJZgwqVVs7ctqAu6i9UhPROGl2gUvzNoihmuyPyWLqx1noJhSOQopPwldgnwYUAxlWlM4RKXTdEEhYHqiCW5prThq5TZ32Tghq/ejHRieGtDBv7wYSt0lug0BRzLbf5Vrkp6LJXQUV8oEXrpdV2FIIkJwXKwX358G2TLBWPonlqsVGjzAS2A2UVniGLcKCLFmUg8twSEh0PdX91hnUCqjejSNcSYpDS02TchVkDfmrK0wyZrmKnjgjOFzFUaqXDMQDE1+NQ0NfvEoDc+TTaFZKiCjfkCignYKSUbfRDkCWytmsn3KAFvKPBQhOj+ZW2U58BoaW776hKmspBwjPOQZJaNcFCtM4KyrtKu4Ywiwq2If/peo6u3WfCcEz8Q6sPZIbnSEBYlbV2fNh0Kgz4ydFTVcRQ0WIjqvyg1Q+w9a1wOHHxYZebus6jc36MPlXwqw95Tbete6buefRadZ41JF/aaGXPQ8wEWcC5dt/yVpfWRrAmGyjpObz2sSKpIkG8bgzsVL1t1kMAuCiaL29cQnK9W31dDhJxvIX71SK5mr1YzoiWPkv3ie/2aL5mOqGUjktaePb1l/+PEKO5ofA58/gvr7gw3l/CDJII/W8UAP2K1xk3kz/lp28NK/TcVLGy3g30XEAMTyAHuNT1oangvjN+PVJN9uZwCtAAAAAElFTkSuQmCC", $f = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAACXBIWXMAAAsTAAALEwEAmpwYAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAATNSURBVHgBpVZbTFxVFF3nzoPhDsMMzFCQl4C01oEqNaVphVr9EI2JYnzUNqkxTfzQmEZItH4Kxn5htImJSdVa/BATvyRRQviQEKNIW6FPgRpgoOAwD2aY9/Pe6zln7p1CAFPjTvY9j9l7rX32OWefAf5FFEWxUf2A6ijVBeWuBNW5Lqp1+K/CnFSAe5WLOxGRbcDfoU0PVRsbZyPjSK+P8FaRQ9xGMNRAJzbBaOuA3nJYc12n2ksIObcjAUuHCs4Bk6ufQUkvU8AyEL0NRBBzdnKMq5xcoj6A+YGvOKEqPZSkdwuBGjlnT7o/Rcr3NQxFj0IQDNyIbA6F2hMOLstxZOOzMDpOwnRft2bQra2EaDmnzRRLCwPP+L+BweykoISqAkFF10iyKIInVAsY98Kiv45C8hcy0WswlL2hkbB07af+Lr3KyFJjkxLTctrziWAQnRCQpMC5CAj7Epn3kngI0ZQD5pJG+CL3A4b9UIps+GN6AI3Jy6i0+lEgOtj+XaT6JFGjX2As0VuPgUjLPHpBgEqQZ4EkmxCX6xEQ3sTaWgQ+nw/l5eUwm81Iry4hXVSKXX+OofpkPlUlFAYvsJ4UHadrX4aOAStBuoIExVRVidMFxKFHkAawjmg0jWQyiSLj36gtBVLuRRSEvbCH3ZBv/koPSEAj6GIEnTyvoZFc1EzlAAVNcAUFB29zmsYu+DzzKCkpQaG1CaELfWju70IkGoPdPYNg+yuQvvtYIzjK9qCF9eTkrVz0LC8Uhkg0CsHEc7Po3w2H3ca31y78hNa9NYgIrbBarZhoeRnWtudR4PNjpelxZIIBJIrLUJAjqGME/EKRzDI/JUQ7WsggmTLiTuJVpMQOuFbSEEURRmkCdXM+eJu98Hg8OKJbx5yhGpbbwyi8MoSK3U0g138BjnfnCfI3gpDN590kliASP4qAJ0bznUScZstW+TRmhSCsJhNqamqQ+LwPzpgf+qCbkmcgzU1AKqvJYzACF2MiumKap7vgkmLGUrADVyZv4ynHDCoGB+huiih8uA0eewMS7S8h5l1B7dIkt5eJoMUJobxWg1kXVALozIexUWQpAUVXDqfTidTNMHyvf4GYrRKYGELh9G/wXRpFdM0P34HnEHjxXaydPo+IopI0NGswV9nMGOsJxR1Iyw5kJQGKYIFPOgaXfw/C4TDMx7phaj6EbOfb3Kt4YRKtP3yIg5PfQ19WBaHzLbjt9TA+coQWEZqWQ89qBIPsorFNDrJRbOkjhBOlcEcexLwriJYbP2LRVAZnaB6OAhrLqguG1flNK2WAgbPDEKoaIX55BsLsZRguXNV+rtdq0ShtnlCyIUyNjKDKYoZpdADitZ+R2nMQM8+cxr7xb1EwPoidRFZyW6g7N6alqJ/WolPaKTpFdYrorbaW0AIy5/tgpOaMfaXhACwV1UiUN4BY7DBG1raAK2ornHhfA+dvA5/jm0KrXn7ixBkYjr/HSzFzdLgmUVlZCenS8I7gzBYUnPmq0qtibnlwepCrrLT83YB89jXAewdxowhzJs6NlU329LOvDYRF3ty2EbxHG2z3ZHapJPyGK7R44fchTqh4l3IOZivQ3A7Q07IBeNsnc1tRH/1+5d5lVPkf/y66VIDgBsAFda5HPeY7yj/RD4oP3z49HgAAAABJRU5ErkJggg==", eg = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAACXBIWXMAAAsTAAALEwEAmpwYAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAPXSURBVHgBpVZdbFRFFP5mdu92u7tCfygV0aZaISbbmhr6gEAEeTHpCxoSExMabGKMiQ+2JsTwxPbRaAzPCELgXVQSjU9dpUITjFSoFR9gW2oxRWW3f7vd3bs7nDM7c/eWdkkbzubcOXPume+bM2fmzgKPEaVUA+kJ0mHSlKpK2vgGSNuxUeFBBmC9crYWkVgD/CNqEqQN3Hd/GUHhh+91q+bmdIxsa0Ogswuh3l4E9+yzQzOkQ0KIkzUJeDkMuAZcPvkF1PQ0ZEsLRGMDRCSqh6ilRdIllO9O0Rggev4CAvEuC5MgkqFVBGbmmn35s0+RP30Kzq4eSMeBIBQaBI2mhygo/QTK2RzcWxMIHe1H+NgnFm7QZiLsmlNznZeFwYtfnYHT2alfCkKRwj8bYeArfGyXibw4dh3O+x9YEl6uV4hk0hKcpebd0vhNLB3cDyceRyAagzSgwqIJAfhsLwvqlxbmKZNbqP/mO1uXJBG8LszsU+xZ3NUNMX2XCDpp1sIjgC8DpbxFpZ8wFlCiF+4f48DevYhcvGSDGoP0eJOt0vhlYNttBJ6hJWm9D+HUe+BCrSTxUH0ii3nImAu3mIR752cEX3iN3QNMcIgtd8vXkJ8vQrJHTkIEmz00xpr6R2A+uwU5AtoULeCl55arTIoCS2kINwdZIqzIRQShCfYzXDdb5fwYpKwssxB5iPK/RFTPbMjmm/FnMosvRxzkQ0/hw0MFbG0ooCmW0gRC5WguRT2el7CcTdrE2plAHygUUxVwbxmKFFlEvhDFr6eymHm2DfHdXWhSGcze+x2Tt5cRfgeI1C1USOyG4Ec54xFIa1VmXt0oVupCS4j85WLi6VZcnhnBcCmDmx1dCFwpEPjcymIIH4mtDemkfhdoXBG4ooB5ibdmr6GptQczYgd6p0YRCD9SZVR3nHTarSsTNATtMnqAvjVjWEs6jj/A+LUYjm+7hDTVdnOmDrGjC6glMtxtzTEm+In0wH+hwzgzcwEyYFL0Z1FHus8mzEJbBRHgXqQao0yBy0B/y2Fsr3i/5YPGRU5z79jVt3EjPbqaYD1iCFrD23H+4FXrfZ4OrOCSJ7nXt3NQRylsXPQJp8eJntPWdY6/RTbnftLMy82vom/HILyPzAZmz3KExnZsirOp7wY2NAEzWceRnR9rErUeEhPDsQzeR2ONDBnMVRdOghq+dHBnfgKJ397DbO7vmuVgYJ31i4PU7vaDJ2xnrStzwJDoE37j/1Fcuf+jJpzNTeuYaHCzBtyz9Q0/8JpXZo2Z6Uv/nFq/DKsn+HcxYADSPsCU8SXMNq8pDwH0Lhftsd+6awAAAABJRU5ErkJggg==", tg = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAACXBIWXMAAAsTAAALEwEAmpwYAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAARRSURBVHgBpVZtbJNVFH7u26+xuXWfmYGOdIkfrFGygZKBTPdLMSxoYjBki8likP1w4sii4eMHXUQl8ccwwYi4OIzxD/9M0ER/uM1Uw8cGxMmHIFDqVlzXtV3Z2q5r39dz73svW7aWQDjpyXnvfe99nnPuOfe8Be4jhmGUkh4kHSC9ZSxIVM51kbrxsMI3SYAHlf58RCwH+PtkvKSlfJyJn0Y68rOwRjYu1mgOFyyFHtjLX4G1pFFtjZH2MMaO5CXgxyHBBWBq/CiM9Bg0eyWYtRRMKzTX6Qkim4WeCtAeoOjpPsNSWKewvETSs4xAei7YQ9ePwRH/ErbiBmgWm1jE2NJIScnqmQQyib9hr2pDgWuPer1HRaKpM1eeH/3uCrbvs2Fa3wSLlqEFSVhY0rRS1ZwFCVgJwV60BvOhfoq4VxEcVDnR1AQ/82w2ixfqnVjX8CwOfL8F4ZjNBDRSApSxlFBNkKRMlWOroxrzwSPI3D0Nmb9+QSCZ2vng1z/G8F84jXOjMcTnyrD7m22YiNrpiAicgxlkjYQ55tZYFJnVShEzpBeiaOZlziN4nY98wyG8fWAY7ftH8FRtCT7cWYfKihp0f7sDd6aIhBILnYB1ioJbCc4tJ9T0aWiEps+cUVFw6eIEr/GnU4NjiM9kMZc2ULTChk3rKuF2PYYL/zjw1uc7MB520O6E1OQ9VZEwIyoILKTZ2C+K4CXGbyU/s63vDOD382GRlhefr4auA1Yrg07lYrdbEPz3Bk5298FVEcWSeqJfktZnSA1ksjS0e7DC8xN/6ddkQhAIzsqqZfhteBI+Iksks/jsg7XwdnpQVe3Gtk/bEZgsEIAgz2HM8jMhm5E7GSWd125csbs1LL0RbGFwdjSCyzfuIjiRwtC5MOyFNWj5uAP+iRKDg9JtMyNQW5lycUE4gZ8/OIsdyNE5sJMS3/nRebS2rEbvvnpsbqzHm73vsUC4HDmFma1ESuweQdP6qpzrs3Suoak5JFNZbGyoIH8NXBt3ouWTd5GPhFGfknKREwzxp63Nq8xwRcTGsk2hyByaWgdwhY6ssb4CloKaZSRql9X5spr6gVcRT7IojZZdQ/CNTMnGw3J6t2FtOb4+9BwmwinsPnQRibgfp/Z/gZqKCFUc5deyCrY6n1peq1FT4m12kI/2dnhyer9Yzv4ZwcilKK7fnsHVm3EUOd0iktuTZbynweo+rpaeIGy/cFO2iwukpYePX8bhr67mjYK3A+5pWYkNW5oex/ZXXeg7eROjf13C0LEMymo7+DLudAMnEGXKH8iIHr53l4ciWWP24xzR8KRzTyPTaZHw5g1VdF/m0frGRgXOpUdiLvvgeGF2Voxei6Gt+wwCdxLIJ888WSJaSmfbE1i9smgxuFcNcn0yuySJuOG+kTB+HAwS4TTddpPMWWzD5vWVVHkrhZWS85OZU+RH/4Tx4DJgPMK/iy4JEF0EeEvOeWWZ55X/AUn0hLaqTAQuAAAAAElFTkSuQmCC", og = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAACXBIWXMAAAsTAAALEwEAmpwYAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAM0SURBVHgBpVZPaxNBFP9NdjepNYVY7B8QTai0KDShBSmIoAWvgkqOraCfwPgJmvZQr149tbSCBy8tfoBWBL0ItTlpwSaCYlvEBNqm+bc7vjc7u26b9K8PHjP7Zub3m/dm3psFjhApZYx0gnSJNC//SVHbMqQJnFZ4kQY4qcwcRiRagD+lJksa4+/VjRo+fK+odqfmqDm9UQNXOy3circh1Rv2lpZIJ4UQLw4l4HBocAX4enUHm7s2Lpwz0RERaDNDal6l4WCvLvFru8FrMHW3E32dpgeTJZLJJgK9c8U+t7KNxS97uN4dhhkiUCHQ7KzkRajUHeSLddwbaMOj4Q5v8JnnifBiTs0Kh2Xu8w7eft2jEIQhGJynBAi4S7g+AXvA7drvKh5eO0ckUS9cw0RSCGlGDk3s258GXq2WcfG8hZoTQlVrLdjagb70xgS6ohbmc2XkKLT6/Ga4E9K7f6yCt1SiXRtKKwEwBuDz5bZqw+3bYh+ZYbjr5mmDWkb5mvPJPOCv3EYdW7tQYdmuCYQt4UZm342QkGghkjbQEGptbrOhvNC3K8ME97lXrVWRHhAIGQRO1ojlRV26HYmmc1ZmzVhtkNZDcGwHlWqVLIrgDhMMcW/h5XPk83natYvCLluWpVp9EfwxqVH523EIsFLx7ayFRAIj09NsSsBLxXg8LvU+9ykRSCJqUtM01RiRNK1JJBJ+ips4RmzbVnpWYYICu5JOp1EoFJTbQogzgXkh6u/v90wlwUWNOqOffpSpPDTUTRAtM/dYeAXOZzLUY+LG5XY2LrMH75ggbIXxZo0JhNJTE7gJDUk5MnLFL4CLnMmqZqSINdVj6Jk4o0j0RAVS3f7RLoQoHFw3lvlrPBlx64t/IU4D7bowcbvdM80Ga9ET0hIzjyXD2teTg0MXvLHBCPpiKm/U28AdRcBMnmGcJo0Nhmm+o9NUHgvOc3nNeNKP/aTGbHpwsnArK9ZLDqbeV7BZpgz2p4kDhBLJLoPALYq7EQTPIrDiwIZkRpOoJzO3ZePjTxvrRYdeNxc8ShtNEuDNS0YQuOWTeYjX6tGflSeXJfkffxcZDVAMAOa1Lcs1/yiMv19zMrXPTtTNAAAAAElFTkSuQmCC", rg = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAACXBIWXMAAAsTAAALEwEAmpwYAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAUtSURBVHgBpVZrbFRFFP7m7u222+3udrePLY9CoYBpSUAJPywGpYqACdEgSVFpDajRH4a4EPhHYhujiQkWYojGxFBeKtigIkFaUQpGaaNUHpVHkdJCad1d6d5ud+++944zs/eWkrYG40nOztx7z3zfnDPnnFngX4RSms/0baZtTHvpPVH0dx6mZfivwhfpAA8qTZMRkQnA32JDPdN8/nzh73acHWwVYzgRFDYl1lLMyZ+PJVNX4uGiKmPpMNMGQsiuSQl4OHRwAfjFtQ/hjdyBM6cINnM+LHKusIumIoilVAyGb/NVeGfJHjrbUWlg1TOShnEE+s4F+74rjfimpwkVBYuQJcnCKscELCtS+ZSeDeQgmDARhs2IougNXsPqWbV4uXKLAbfZ8IQYMWfDeR6W/Vcb8e3NfShnISAcjVDMzUtgXWmI5pqosFeSEn7w52nnFbPESZgRugMX8Xz5qwYJD9cjjKTPIGhiw4ae4GW88eMqlDsrYMmywpWdpjXTw3SeLS5RBuRXnGJ7bldA7O2ckoMWrxWBuAQ1HmKedOODpc1YmDmX04ygmui77+Vv1rdUwR+7wwgqsdwdoc+UqESmJnrgxHJy5NRShCMWtmEKp12la6t/ouuePk1UqpHjf1nRPmRBj3IFCwoeFSS6ODmBh012Xrzbjq0/16DMlqSeh6ykwmGCGrPQjQ1b0TtQQngkCNGjSqmIzMK5N7VPt++UCNHQHdTou5dV4ovK2PHYl4YXDRL7eY7PfvW20BdnjNAdC/ykwjbAYFQcPbOK3lWLUVRkonm5Mo1E01CjKURiaUSZdnTNlD5urha282yD5JPFPo1h4Bdvq+HBE9wDhR9uLFBNiXaamFjSSIxWIlnYffIk/gjcStlkO6a5XNKMQhe54O8i6cHZOPy1QpOpNMnLVXH5UC00LckUSKWBcHoRCt2dnKBPNgoKtJcQKZNWXK/3F2s7dqtSKOyQiUREYhAomFZSSEsqu0kdS8Sr5xy09ZiZ3PY6Uer2ixByU6scMDwok8cWBBmNM2A2paXhkQSyZAIzy0a+kIdlSImTvu/t6Gwz0dVrKN7cHtIctiwJY9aLA9OFf+jjE5W67qtrd4GiTXcnYLXISKY0hNQUrLkmFr6MUTKZJqdOmIi30552WAfu26Uklxkww6MEzb5n0TxgH+W2ZMelmqeO0eFQEuyAxbt0OvONe8V2DQsr79mFh0ejENcI/bzfTg8OPG7gXOAEZ/isqmQl9vbZyYbOKfDGZGHgeekrzJzio4HhhLAOR1IIMkIT88KRl4UCew/dtO6o+NY1ko2tXcX0s9t2sti9yojFUZ5F/JB5JmFbew0uKR0ijmunh7RXZg4jrFql95peoPuOr0A8YSa8oh15Kl5f8x22rD9CNVOCHBpwaM39NlHt7pxp2P9ku+HULKNVtLFh2aWhdmzrqBGpwEnc2SlsKg9oi51xSWP9pqd/qpZtTkrFLoXmmJPkYjBba7zhknwxGVQTQPhoaQvK7fM57F7WKjaOa3YHrzfiwI1dmWzSHV3hVrG+NMgIM4cQTkn0/esu/KZYMhZUYKN2jgd18yZodjqJaBl8fvDPnTjAdCwJ96aWVWmCHeSeWw6ipiQBnFnLwOduRh1TXe5v12NI6tnALx3cHLmC+t9fgy96Z/y1h3vACwqqUDdns2hyuvBbrd54mOjK9OgkosIvDXXgrL9VEPqi/cLGKjsE4JLilWOBJ7wyJ9mZuPT30geXNvo//l14dABlDGCv/q5eT/NJ5R/BBN+7lILg8wAAAABJRU5ErkJggg==", ng = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAACXBIWXMAAAsTAAALEwEAmpwYAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAR2SURBVHgBpVZdaFxFFP7m/u0m3YRE0zS1/iw+KMQUUq0lFsFdCChWSV6KT4oUhT5Y3Lxp/NlEoT4o2BZ98MVWSkURqUUQpMRd29K0xbg2bEut6CZBE4Jp9ie72b17753jzN17txu6iRUPnNyTmTPnm/OdMzMLbCBE1CE0LjQhNEM3JeuNxYSG8V9FLvIC3K4cXQ+INQn+qviMCe2Q/9tmEtXyKfdLPOf6KGoYqtEPo2UIWiDiL5WT44yxQ+sCSDq84G7AyspBkD0jAm4BUzvBWMjzKwqwErj9h7CBTV0noer9fpgxATJ+C4C3cxe9UhiHWToC3RgQwXXhRCK4cCV/FbkmEQN3SrCtNIzW/Qi2x/1wI34mzOdcfFKSlmJhiuzSKAsGOJgiHISHwmqePKegeEFH+1OmC0aecg5Y5k/QN8V8EEnXDgEy4wMcFZ8XLcuixcVFFgwGoamrpClXoSs/M5VNQcECsidaUJ1TsOX1kot4E4DgOAVB6xW03Jnw65IUAFHm7T4jRxYWFtz8AoEAFEVxVVLD8wVUvvmYnOtnGK8Axr0cHXsr0LbxeiYOl3W7DGgRtAoQTzo18WdYWqZpykygqmqtJks3gO7Nrm2ePY/VcwvMng1A7emBdYOTpe5kmw/kuYrLCi9ck15QggLESroN4mURkxlIuMjk5CS1tbWhp6dHUMKw/NIB3PFeXPCeB9NUqHdthfXb74JsG3rvgyCzCjszC3XbVmTffIe6P3qcQZvgivODogZfQKD9Q5cmmYHbX6OjoyyZTKKvrw/RaJR2h4Ls0TfeRXD3LrQ++zRYKARnaVnmBkPY0E2UE2dRTU3DGNjJLOM5UYu9igMHWvUvCtQaKKz5ByqTccuAdDotlR0T818ZnUhencKgsYrQrijd53CmtARcKqu/nANr0eFkc2gd3uPWyleH7vbb3wVoKiHRo3+D49Nfr+OJTw7ildfeYs8YXeju306P5RfRdeYD1vb2lyie+FpQqNeOhwcgN+CL6HTMSGN7X+caAHm4DtslBMWCSoHh5FAQQ+EyHipeZB3HY2x2Yh4vD+/D5w/cgyvpNDWu1bT6vnP1ItulEczPHeITSSjfnQa/eAmKNa/gsNaORx4mFLIMcwXBf5GhrBB29BOmL6h43sphRexYNAeJ2rHBwUEaGBhgvb29tbMgAMaEEeeivZyVKGSXytMrdfISKPEjUE0a7PQ0p2irztSciu+VCtQyw3luNaU3kUggEolIc8S/812x8hGys+Iey4vhwlrN/wnn1Bfg+/eB3x8WxandTLdoOBxuvMbDLqJ/9/NqgqxlkJNrDtKo16bAj7wPvudJkK7D9gFSqVT9jain5D0w8pUiZzW+bhbrqbkEmvgWdPyzMd7w4oXX8OY9f6445Tg5Hsi/Acl56SvXNEisaXFkwesudoqcQrhOlw/k225gMeesRIhbicbgY9hIvEyyvrdczFdjxIsRF5BLXemvja0NnF13501AZE2O0e1Lgv7Hr4uYFyDbEDDjjUlKOzaK8Q88uLDBUBoBfwAAAABJRU5ErkJggg==", ig = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAACXBIWXMAAAsTAAALEwEAmpwYAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAL5SURBVHgBrVZLa1NBFD73keTWaJNiuxCRxiIIQtHixlXrorpT629w58a4V0yra6kbd9JuFUHUH9CHIO6sXYggtkUXRVHTGONN7ms839yZ9KZJJFFPOJnXme87j8lMiP4gQog86y3WJdZNsStlNVdkLVC/gk0KoFdZ6EZkdAC/xk2JNY9xvV4n13VlG0WRtLFtm9LpNA0MDJDjOHrrDuusYRjzXQmQDgVOjUaDKpUKBUEgAU3TlAoBEduS7/tyPDw8LAmVlJhkto1AeS7ZAVytVqV3AOUNUhO2zRZknudRNpulXC6nTa7rSAydc25eIy0Ar9VqlMlkJKgmkMZ7SDQBWkScIEG6Jth+y1T2SE0ensBzhAtgy7KaBMlItCZtUqmU3AsiVb8F6ZTyfhOD7e1tyQbvdc6TXqOv05OMBFFAAY56jYyM6OUhm79m0PtW+0Lr5Zdk2RY5DYdsK02GCU91JgXtlky0NhEXPPTJ9VwKw5DGndN0+EABS0UQXELv4cZ9erLxgEyLKGVnaDA9REbbIe5CxFL1KlT3XRIh0eXgCl0dL2F6CgSn0PtQecseyzxQIDz64X+njOXsATNaeWTDBQ7Z8yiI02kKWv/6SvMWbFUQ+ux+ijcqjED4/BvwyTS4iE0SI6Yx1CnCR0SybRKz/gwqLQS7ix36Eccc0R4R1LMgKVvo7E/l2u+Nv5RD2SO6u9MkOHnwDP0PgZNjgyf0cA0pWmE9O2NP09j8XbKIOpye3oRPq0znxL1pPfUUPzQUuYyRe54XXqzKvPXLgbIAXIyO0r537/X0UZOPFu6NZYzSN25KQ639EkCdR4/11CLuongxfmDwSgnv9pz45aREnbXRo8LWZfXuzCVfvEKrB/HzJzSJqzbW+weHFDuHKURJW4Rra8I9fqyNqJ5QrDXOTYtwZTkJXkpidnoywS6vb4yj1RUKnz8j8WadxMet2CiXJ3NykqwLF7md0ls7PpndIkFNFkXvsiT+4d9FUQGUE4Cbaq6kjnlX+Q29hmFUs9PwZAAAAABJRU5ErkJggg==", ag = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAACXBIWXMAAAsTAAALEwEAmpwYAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAOASURBVHgBpVZLaFNBFD3zXqKt0TZpoCqKilgtaqOCih+ouHLnZ9+CguhCxdSNCxVTdKE7N6KColsRQevGotCPIIK02mq7tD+FVlqbtuknJu+N986bSVLTlJZeuG9+955z752ZTIB5REoZJL1J2kTaI7MyqueipJuwWGEnDbBQeVqISMwBfpmaGGmQx39bW5BsaECKWjk2pmzsjRthR3Zh+fHjWFZ9xLjGSeuFEPcKEnA5NLgCnLx7B25/P+zycohQCFYgQB4CbiIBSer09rIPSl+8hC8SMTAxIqnPI9CRK/bJ27cw8+A+/Pv2w/L7ldH/qUqt7tQU0l3fsfzsOQSu3zDLdSYTYWpOzRcuC4MnHz2EnyKylIEkFQUIpG4Fku1tKLp4CYFrN0y59hBJryF4Ss3p9LdOObZ/r/BXVcEXWJmJXCmVgstj4KWmZAKHvs74BFLdXShpfAe/ty/NRHBU6Oh7eGa0sgLo68OyqghswaAGU2Tq6cWskXNK5dBiqrMTVnU1kbw3iYZ89DlpNlUSOE+IPyMQxcWzay+9gcgBR5Yb1kxSldRpbVVYOoso451QBG8aYLMh6/AwRFkZRS+4fpnYxTo/7RLtSncqS0LrKst4XPlKjaUJjjDBbu45HR0eOA+SSYBIJGUBy9Ik1K1cAYRtuJ8nsxnw2vQ0RCqVIXA+tJrVTUygLpTs79OnRmdNDkptG/b5UoiddFwrfRAWnahtxZBtSTgvE8B42ssix9eNx2cRKLl6N5weTE55AHn3G6hZZ/tOlbiq37jDwpOQPy2PhmbZqEQdidVFYTyA2k716WUmGQz6Jid+eQRWPsFAWmIo7fUHqZ8osnyz0TWBK7GybIOZjVuaALvCBzBH4BlZRZYXBl1Eh1yMuZhXNpdsN92vTNDCvcNrj2VPn8x3ej5OURPwqAO8TciC4FJjaXnNBOo3IxI+SFkcxFJlzYr1CkvLK4vOOm95M49qt9apQsrF43r1J43tfWymnvFvkdnOM6RxZq6tqMve/wWje01NRZTqv4O76m3gjiJgJjNRs/WKIpELIdE2bFtDPrXkq6VeY+Y9ODFq+NHBj/FuxNrPYmj6Z8HTxcAq6y111B7IBY+ZwVxPZlSTqBveOfIJH383KsKh6QFlE/CVKsBD5cdyged8MgtEph79Z3Lh0iSX8O8iqgFGcwB79FyMNDgfxj/4sgTdq4nVowAAAABJRU5ErkJggg==", sg = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAACXBIWXMAAAsTAAALEwEAmpwYAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAASJSURBVHgBpVZrbFRVEP7O7W4vdrfttsu29skKoUmrQKiKDxIU/xgxlsQHP5tqIin8kKqgiSHSJhIiRovPGBrSItoYChFKsDRG6oNCogZKu6YEMe22ldKWfXYf3dcdz7l773ZLW1LjbCZnzjkz38yZM3fOAnchIrJw3se5h/MQzZJHW2vgbMd/JWGkASyVWhdzxBYA38WHRs4WMff90gt35/fqmPD5QHxt2YpymNY+gPyaLcjdtFE39XJuYowdWtSBSIcGrgKOvd+MiHMUcqENBosFGWaTqpcIBDkHEHaOCCNUdhxDFneoUSN30jTPgRa56n30vYMY/6IFORsehGQ0gvGwmdAkzYKSInE5EQoh6BhE4at1KNv7lg73un4SpuecD1dEWiZ/OE+jOxpgqljNpLQomB5LugP1l5QD129gxVeHYXv8ET1d67mTYR1DpMYSjUYRraxgpZ3HmaFgOVF4BiwUBvhIPFIIORhSZaZyWF0zFtio5OQxRMpLEIlEoN1fqxqPFv2QmDicl2HNLIIsy5AkCaFvjlOwvQPLHtuArBe2Ql5TJfQRH3JS8MQpFjr3I2XXv8Luef45KIqigkcQgr1olZ6qPGi1TH1TF+nZU6sTLVcOKC6Xi7xeL/l8PvLdHCe/36/ytQtnqP/XE6m51+lMCB2h63a76ejVZqo5U0l9kxf18m0UKdoqXPWOd3PvYalj7HO27886xRW9lYzBlKUXASZaWxA53I5UhVgsaoo9sSnaP7gdX498iFBiGr23unWVJ8SRPSJnb17YhgHPJTCJXyc3M0hG+rS6C1b53lSlxfxeJCIhLLMVp5xElBml/venpGDcD1J4IAphpfl+fLn5nNgeNmgXgonwqF4uKsUpxvIzC9XIdTJk56qcvpbJZIkowaEh6faBuE/ftkuz5wUWkiNKCP3fHcLE5GBqbdo9hsn2NoTi0+pcYSRhERIbw0IwG3Pn+JBYBnljLgr4JyE3tSJy8mxqb7zzW7j3fwBjIIYgdzKTCM0BLTKV6aI35WCd9dGUQlXOw/h4/VlmMVqZ1WJH6fkulO/YndqvqNsN20+dMFryYTJk47PqbhRn3Uf64VfmVOmqfcLBz0LaWPQ05AwTau178G7VERTIJUmVWJxM+cV3nhxW2yoofr8q2+RifLTuNHupbCfxnkICS6PTes9XyTl1Q/0GPB6PWtujB5vJkVem/F27nW4PONQ1wa7rf9HwG+8ojuV2Gmk6kBBrwkbYXrs5kN7G7Xov6uHDk7FYDPwDAv0zDveutyly6bc53VbKNoPJspK47ZpzqZlr1yjWI59IrLgIubm80gyiONHGe9HL85qd74/LGNnyIsg/Pf+xWITUJms2U2nHUeRt3iTM5jY7IfBB7eG5D1XD9lp9qksuBVywrWEn08AFNWmY8x6cRiQ7K8JXHRjaVosYf3B0JXYHsCATf9EK9+6BefZlE+CNWMBGd9KgOVG/8AB/2XydXZjpH0CUOxOUwfMsAHNqnkkHXvDJXPjYyUe/jZZOPfQ//l00aACeNMAhba1RlPndMP4FK1/t36HxteQAAAAASUVORK5CYII=", cg = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAACXBIWXMAAAsTAAALEwEAmpwYAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAARASURBVHgBpVZdTJtVGH6+rx9QKNaO/VApgcpkifw4GBITGSvLduNMhk4Tt3jjFF280eqFd2jJbkw0xgv/ohfswhuzRENMtsRoGIvswo0Jo8NkjLWjgTVQ2tL1j/59vud855TiYBnxTV7OOW/P+zzvz/nOAXiI6LpuI/2EdJTUp69LRNjcpE5sV5iTAHhUGd6KSNkE/H0aPKQ2th6bWMTIpTu4TGP0fobvcdY9hmf27UR/XxNcXXXSNUo6pCjKl1sSsHIIcA786fAE7t6LY09NFXZYK1BdWcb3xZNZJFIZ+BZi0Gn98+cvcEIhHiIZeoBARM7Zz35/FV/95MVz7bXQNBPfpihsD4qj4awjmc5h+nYIZ060YPCdbgn3gcxEkTWn4W9WlrM/XMW352cool0CTRG7lP/WUk64Tsws4b1TbRh8u1uWq5NI/JJgmIY3pm6t4NnXz6O9eTeqq8oNAgGsG3mIuV5CpzN/3I+ncXNuBb9/d1z25RIRHFZE9D5e264OqIF5aK1tUAlcxcbggzU7oSkqdoWWN9Aw8jyR5G56gZ4eVP3yq2TfwTBeYrP8lT8BAmcGNRKBmkoim89BoVFJkiaSmOvqxtRT+4x1MgWVjSlD1dVV7lsYH0eOYRniZrZ+NstduADWThOLPLzCQf45fASre+wAgYFAzK4+7D95kuYprnO1tbjd02sQroR41gwjT1hCXIygg6fpnV4vydoa4pZqZCliP5ULBBBoaUVZZSVmFheRe7qFbAlUvnYKd9raqf4JKOl00b9wZVwSODWIDwqBAG+ibKv3yFHkbDaED/bC0tqKBYsFvslJVFRU4K8TryLTewhOAjctLeHy8wfx4m8XuZ9Kf/NUrlICyD4qyvph3B2PY8lkQoAiNjc385PSUudAfX09xqnOaevjMBFQPp/HXipfEQMbDzQj8DMmkAOlUfwhReWIxWJIJBI86kKhgFAoxG2NjY0Ih8NYXl6G2WxG1FKFUlEbGuQ0WiQw0fHSZ7zc6qfa17o/hI16wQCampq4fZGyYZk4HA44nU5q1RpmZ2ex97MvEF9YgGX6hpEJ65shk6wvY5z12DFuSVO0mTffQpqaFgwGkclk+JxpNBrl2cg1I8hms3w+P3AG8tvWBBbJCPvQWJMjbJV7+TgU+hZitJnVMUmnJxKNwEG1Z8LKomkarFarEYwgtdvt/LPLfPM1asrLUHZtUhI8Ka+KURr6xq7fw9F3L1KOxQO7DaH49QKu/diP/c38Zj1HV8VpVfx6mjXEdeAJuqw6xUWmbxNc574CnL8NbMIJ2K0nDR8PdNLGjm2QrIMzXyFDAvOBB8dDA3t0MHUrjFc++gN3g4mHwrsO2DE40MHHEnCPXGz2ZLoFifFkXg9iZGweN2bD8NPrxsRWXY5DBNjvaigF3vTJ3Dxp49E/pz+6jOr/478LtwCIlAD6hM0jjvmW8i/6z3oMPQb6mQAAAABJRU5ErkJggg==", lg = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAACXBIWXMAAAsTAAALEwEAmpwYAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAN2SURBVHgBpVZLaxRBEP66Z3Zj4iOrIYoIsgcNKMYIXnyBuYkB0R+goOBBvJgI4kFwd8+CCnpPFEQ8mSAonpKAMR4jkngKeYJo1GTNvrKzO21VT/dmYjYxj4Laqa7p+r6qmn4ssIoopWKkCdJe0jG1KLPG104ax3qFgwzAWqVzJSJRBfwWPZKkMR6XBj6g+O6tfqp0Ws+R+/fDOdKMaFsb3FNnbOgcaUoI8XhFAm6HAcfQzCAO3HwANTUF2dgIsTMGWbdVh/jZDFQ2C39ygmKArZ+64ESOWZgkkaSWEZjMNfuzkYfoHu3Ei5eHISMRCEKhIGg0HaKg9C/g5/IoPR1EtO4GtuxIWLgOW4lre24zf/71Id6MPUPTrmY4XgGi6EGKcDbCwAd8kmwZPQIvG3TGkCQIs5tIxqVhZG9sND1MBI/QULcHCyoPJ09ayEPSU+ZyEPQU+Zy2tY/fFQqQMgs3ug9eJonSQh/M9+vUFZjsr/Lg/uB1CKIUlPKCz0CFIOtQBUpVmqo97BMyp5uhHKCYScGtaeUJrbzMuUWXePT55yB+FKY1wXxpFjVurc5WLMULIA2LJtQMlIygSoig5PXpKgxJOxNcZGvg2/sAgAjS3m/sEDspLhdaCwTaSJonMyMrrEJzZWnGLLUKcEjLCz2W4CwT6PU1mh7R4LRcUFJF/CESZMvQUcqUcLQI1JH5KoqK8ArDDGmwGHya7lMVRuKu+SD4np8KEjU9KSmPepWllJxgxpMMcKgcvOS87hHTNCP65PA4L61MUtZ7LiCQlUzCWy5slwn0F+kdyrqWKthOepfsCT94t/jVg/wMkRUmGGdjW6R++bkRlgMEmKKdfJu0uVR9jq3CiVvPnGsI4i0NJzA2P7wyQX8EaxXhVI6NIa6gn63Te89hyRLfoHDH3JqLdtjDBHqPH204iRbSzYj+HDIOEWm1rm5J5wV/8j4eXWnq0LM2UgCDc5y77bV1dYXPomukc1zFlYMdqByV6wDn+bImAeHq/uu7gQ1NwEzWcbnptiaxGf2PR8/hrbAlAVmbtO6Uwfw3E5W0dyCdrKp8vEWVd+9SvlEVsln5XfnSBeV7veHrMxnGrHZltsMc33r8cQCgKxPDX6AmJ4OA+nqAr8rzbRCnTtvQqldm9bKDS79LrV161Sb+XbQbgNkQ4JjxcUtjq2H8BdKUIMMjnl76AAAAAElFTkSuQmCC", pg = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAACXBIWXMAAAsTAAALEwEAmpwYAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAO/SURBVHgBpVZZa1RJFP7q3ttbYtKZmZCZQdHMwwzjzDzMhiAK+iyuP0D0TQTFFhFBBNtHF4wLPriAUVRwAfEl+OAWMKIgqKgYcUk04gKS7nSnl3T3veU5das6t+1uiXjgdC236vvOOXXqVANfECllB+l20uukQ3JSUnouQdqNrxXepAGmKsebEYkG4BuoSZJ28LhYLKJQKKjW8zy1xnEchMNhxGIxRKNRszVNukMIsa8pAYdDg2NiYgJjY2OoVCoK0LIspSxMRGtRLpfVuLOzUxFqSRLJjjoCbbliZ+BsNqusY1DaoDSwttoyWalUQmtrK+LxuFmy0XgiTMypucdhyQ4+QbY9jkgkokCDBCIzBoQjkETM4IaAW/a4LTWKtj//MuH6h/YMW5qRQ9PhPnqI4pnTyl0Gtm27hiB89QpC165Wx8E1oVAIxZO9qNy6CX1+x9V5aetX86CwaiXsxUuAoNUMNPQS9uPHCF26CJQrym/3/znwurr8ONMaJoKwUNq9E87F+Ty9kNOcPVjOI5eZR17D1gcZjDlaWhDd3wPr3TtYHz8i2rMXctq0yUzRhtiWgDcwYLxgSTDaMu5V+vpANsA2i18NE+BbRA70QLa0QrKF+QJpDl7Hd5wJiBw7otY4TwcVGuWZwnAJS8sCh37+VgdN8Wc2TxM4/f1k9V4VLuvBA4pfnsDzflpQv2XdWhW68KGDyG/dBvz6Gy0V6rN3a8AQdDv6QCg8IxAQ1byVMbpAlKoUXDgDN00sfEtfPOfU85WyyOvu9sOkvBBwyTtDYFXjqPcbAjE66ndcl+JX8ZUvllEe0zdJ6WyNvJnEQO3tZYJh1WuPIygTa9Yid+I0ZNePaCbe9OnInb2A8vIVNfPWzJmmm64S2PPm1QFU5s7F+NnzDcFleztyZ87Bnf1H3TfhXzaW+3wG/aQLrUWL4B49DPn5aqpDxY2bIGfMgEhnINsoo6gsWIODNalas4WwtFwSfBmok1IWr1iK0r//obR+Q+090GLfuQ3508/wZs2q94gOPLxnF0KX+xC6e99M/2IRENeNGwpg8xadHLJa0Orcp5rTCNyoc+KUme7lWlRX7IrPnyH//Q/VGlQDnslA8EUjLxoRxD68R/T32TxVLXbBcp2gpof7ebpQXB0NQaNwGWDTcmnnB0hLbbkObEjCr6yU4i7Gx8dVOf4SAT9GDMytFn7Vkmgm+iFPmceWXi2Zy+VkJpOR6XRaKT1Iao6/ffZHIIGpiH70e+XU5br8hn8XCQ2QCgAO6bmkTvOm8glHP2Z05ApEQgAAAABJRU5ErkJggg==", dg = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAACXBIWXMAAAsTAAALEwEAmpwYAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAQkSURBVHgBpVZfaJtVFP/dNE3SmM38gXbgqBErOrfV1j4MQa2CD1OQDmU+iH868c+LaHwQX1aXOhWf1IkyhEILioJdNyr4VtnaFFSoa9wUldUlnbZLS5ekW/P/S67n3Hw3zdYvZWMnnJzvu/ee8zvnd2/ODbCJSCm9pIdIT5LG5LqkzLEQaRA3KuxkBrheGW4EJCyCv0kmTOrl98nZBMYjcUxFE0ivFdWa4DYPOjv86HsoiN7ubdo1TToohPi0IQDTYQZXgT/6Kor5ixm0Blrg2+KEx9WsPNZyJWSyJcQuXmEfHP/wMXTe5ddhwgQyuAHAzFyhHx6exefH/sSena2w221qGTnRmqqDpI92zuZLOPtPEq/tuxsDB7p1uLd0JUJzTmaWaeHgR0/8TRQEaFZAxWK7gU0Jhaikgl//WsEb+3doEKarm0DiGmCYTP+ZuaTseel7sfvOADxupsNWK1RlL4SuFkLUSlcVXVkr4I9YEhNH9up9OUXrHxVm9jEe6XjmGOaXsir7KiVCZc8fXUAtachrKpE4c+4SertaMfHZXr3IZ6evfWpT6ZTMJzIq6+RqCS6XXWXebK+gZDTVAlaB5TpToopaKBrKdzK6rA6IWUWIOejjp/HIv1VKSFcuF5DJl+FvuYT+PRFkCwbsyJAt0wkylM3SPNtMrqzWrlBSijfS8ekLGr6XAbr4ifg3Twsw9Nw38DkXydHATCyg7P77f8a9bXHkCIzf17VEwYvIFctmOQJTs0saIMh7IKv8Hyf+c6oCvyePyzkXjIoNTTYBG2m7P4XVXAupq7YX7FrhTZZ1eyEruL2tBXPfPVVlUAMkk0k4CtOwVxZg3Pp87cTUizAW4UgfQdF/ENK25ao5qYAkyuWysj6fT43zTsa5FPvYKHD+J8qjhCbHIhpKdgbC/cXGHmOCUEkQwSDw8is8lK4BOJaWYIxFIG6hbcn8YhmApeIiyvLfWs6pXwRhNL3woh6KMkVhejhkGAZyy6NorszD8L5uTZEswLHyNoqBDzalyOPxUIvh3KllcM+nhxS/ffz1JKLnDdpnJ65tDW5nkY4ljZaXIZu2W+dPAO1tbrz/ao8evMNOmaZp4hS9PNKz6x68M/QjBp+cwNHIA0isboXXnUc668LAExP44dwOnL5wGy39zyI+n5UKZoYe1yMj3It0szlAmu7tasNA/26ciO5EvtiM7vYFfPnsGDzOAkZPd2IhvRXWUm0V7Htfhzo96m5QtNZxGCLzCT+/N3IWh0d+p+wLRE0Jiw0Dm8ElB9+FdwnAlKvbdR1ImAxfOvhtLo2nD06p5rdZbG5uHJytKXyrhfWL1ZUZMkGqVyY1r/HpBWolKcQTa2qN1+PAwxSw78Ht9YEtr0zrxKqX/oi8fjkpb+LfRcgMkKoLGDPHwuYxbyj/AxeXlTDspI8DAAAAAElFTkSuQmCC", bg = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAACXBIWXMAAAsTAAALEwEAmpwYAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAANRSURBVHgBrVZNbExRFP7umzfFtGFMS4pW6i9KpCWSRiNBhAgiamPBkNj76cJSUiURsRIby/FTLCTKQiSIn5VYYSGIRUkI0UTbxLzOzJt51zln7n19U23TH19y5t173j3fd+85d+59wATQWifJusiek/XpEQwYXydZE6YKDjIEk0VmPCE1BvkpepwlS3L/5Zuf8B89RNuT69BDQzLGWboUr9s6EN+9F1s31NvQQbJupdTlcQU4HYZciC/efIuvP7I46b7HUfURTqJaQoLsH9yJrcFFr5ljcO/CDrSsSlmasyTSbTvOGDPH+cwbHDzzDHHXRfOy+Zg7rxqucuB4npirFObUJNCysg6rGpPYc/qxxFgBrk2FgMlfSH619xM2rF6AQgnwcgGKOV+IY8PDYg5ZMVdANleCJop1K1K4cvdDVKTL1sSugFOTfPf5N85l3qG+thpevkQWwCsEQsYCiojVcHkVLOoVtIzJ5jWWLKiRWE6tqV9GamCU+rjT398valVVVYjFYqBcisVv34J7p0cKRikXFA8dhn8oLTUIgkCsUChIXCoV1mO+Sz8d3OKXPNilvDOpqJsnfB8q68mWUPzDKn4xHOM4jsQyebFYFC6eJKGTBfZbAR7IZmceggRAqSlvOl1+Fn1EYYXY8vm8FdjKAutlyaQcFagAk3lGwObJrxSIivgj75pcUxDJIb+MQpuEa1qdCESEtUlplNxaxN/ERZZe+mk7fuW+QTk0qFIH6d4C0vcrZ9zTEUfPgarIbMoL04HGwlkN6Nn5StxM9YUbNfF5/54b08Si6kbbHAwFWms34X+AJ7l87lrbfcsCL7m1edEuhJnTmDa04TJ4wAJy+rXUttMq2jFT1CcahMvgPp1bapDq/II62y61nkbp+xHaTeVChzWp43lVFjldF0d6dSLs0yZEwH+2xox1XSPuL3a/HCMbVIk2OLUnysfBFNJUHk/HXuoE1KxmdsndwA0RYKXQkToORabttpsEuQgQOccadBvOkfvA3EShiNPQCx1bQvu6Usgujn0B+2e3QS2+MZr88gQzkot8wF62gfdaB/e6dHBgny5tbNUB2/YtZR+9G/Uh0InJwFz61/Tk8VzP4Oui0xAMRAj7jI+vx+REHH8BJuo8hHRw4RAAAAAASUVORK5CYII=", Mg = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAACXBIWXMAAAsTAAALEwEAmpwYAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAMXSURBVHgBrVZNTxNRFD1vZqgaSKwYBRaQLkyMILHGndG0azYYE3Vn8BfYhYbEaCi6QjfuNG6KiXEruGDJR6RsQXZGIzUuJBFpC0wL7cw8730zr0wJYAVuevLu+5hz7sd0ZoB9TEoZJQwRpghLctvywVqKEMP/Gl8UEDRqmb2ExC7k92lIE6I8d7amUSmPq1F6BXXGMGMwI3FETvTDOpbUl/LmsBDi5Z4CXI6AHDPzy7jSeRfSyRFhG4R5CoZoUec8uUFiNjznO10DNK9+hNnTq2nSJDKsJ8YukeNZZh63H08SYROajnfDamqFZRowDJtQIl/QWgvtXYIVOQf7zi1svhipCXBv9MTSNQ+Tv/rwBZfPn4FpViBEhYT8XHW6Uo8el4twoRvVN6/V2vGHgzwMEecYZZLTGXBpoovfVuXTzGe0n25GacuFSdEyOGpD2CRWUmDfEME6o0RZdXSgSlk4c7MI+pdRJQqiH+DJzUeTAsKgn0ECXkDExIxyyC8Fo63KZpbLlK0FSgaV7VIl+TbnDG6opi4s48eyrWqxWqzC3vRqEQswNmhP+7aCoffKlEWxqBrqZbM6C7YUr/WzN/7pJzh6xu9ihQRcRQKpUdrh+3MWFlQi8WeFBIXKwp2Y0AIJbnKcPaq/30nCluNhhUSgojZCrd3ZZt8XK5StU/UzYMxl9WbMChqC3C+7JsBWJRHINfLMkAjqiH3QOceqXUkdhEvlCgv4pk6I0ESbG+DfJhAO0TcOLcfOyZYIjsJUFl1delqoCSTi7TgqEz0XtbvAAjPs9V/vRH3zDmbMYPX16ek4C6inXyLeprB97GDk6OqEuHpNL43RrSv4MTvNsycDvTgMuYr+7Tu9NBp+Ft0jFDgDJSL18cbJ2YwHg7r+6t1Qf8h//SkbzixKK/FeekUo0N9hT/C+e7ZVus9Hwm+41O6RSJnWJxa+5qW7FpNuAXVC2lfEtOeuJ6WXnQ2Tp7Fvun4meX3aq05Jr5SS3kZSCXqM9bi/Rns7PgRSaKim/kt/VDZuU/IQXxepgCAfIlwK1rik0f04/gLuaW/S1gRDqwAAAABJRU5ErkJggg==", Ag = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAACXBIWXMAAAsTAAALEwEAmpwYAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAM2SURBVHgBrVZLSFRRGP7uvfO6Gc4widRC0SJIMhKEIA2sZUJluGlZu3bNwrCdI22yBwVBUUEq2S4IN1lu1MgWmaCmEUXqWEiEOjOOozPN3Hs6/5l7xjs5ipo/fHMe95zv+x/3njPABsYY83G0cPRxTLFVC1tzAY4ybNVok0WwWWtfT0jJQ36FN0EOH40HhmfR3T+Jt7yNxP6g934dCnQXXC4XdF2Hx+ORWyMcrYqi3LPzOf4hb7HIBfGNp8MI/VpCsX8XSvYVomK/EwW7dGgqkE6nsbCwIPYVFRWRIDl0l3N4uUir5FTzeI7rj4dw4VovvLvdOFTuh9+rQ1VVxBMGbzVomgaHwyG8p0jm5uYQjUYlVZBqkyNg5S9D/mQID198xuXGChw56MdywsRy0uDk1JpQFUUIkKCE2+1GPB63i7TImsgUUWp8o1/ncefZKB40H8exymLwUFF5wIdHL78jtpLmBeMlUxUxLwqoZPqmacLpdCIWi4mouCClq53jlGopXaQNjU1vhKedPSHs3aMLdL0O4Xc4iRWKgKco+3ZY5BIUFWFxcVEuOUmvOUXQIItKBaWsadzL28+/wO3SBOI2YjCsMbtIKpVCMpkUaeMWIIFz1OseCEG8tXzhh4l5jE/GxCbGxFSGmLcmW1VgLFdN1iSRSEiBOhKoot7Yt3lkaq4iGk/zgjLoHl5Mzsqyrit5ie2RkABFYVkZCYgPanp2KeezS6VNpJZMkS5VVXK8zidgr4fteZnCrFGyugrqzx/QLD8VbM2YBYP/GCUl8AyPiHnKybToFXqxU6aWlspuJCug1dZip0w5XCm7IyQwIFTr67FT5ljl6qYaUJHDNEqfPwvl/aDI23ZqYBJ4/p0fR+R0OT9aFDpm+2mkXW3OFottQ4Dg6OySUx2ce1qeppc4IkpNLVRLZKvkZGpTs8y/uBtyF2WuP2HGrTZmFPuZaYFtAHpOa42bbfYbLpDfE8aC2SXjY8yoPrpGyLRBEDecYebgOzt50M6Z78okdXF8izEvOnpeAROfwGZmMhu8/JupOQGcrgel1bK8V+Z6kdCl38E2b33sP/5dBCyCsI1wypoLWq/5uvYXaLQ0v3DpqyYAAAAASUVORK5CYII=", ug = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAACXBIWXMAAAsTAAALEwEAmpwYAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAANcSURBVHgBrVZdSFRBFP7OvXfNfkgN7K0oKCgs+rGH0CB6TOgPei9forc2MKSHaIVeTAgfeynt572ysqBAA1cIQs0/pBdtfVZXTdd2773TOXNn1g1XUfQs587cuTPfN+ebMzMLrGFKqXL2h+xd7ONq2WZMW5z9ADZqMsgArNfaViOiIuB3uEiwl8u7n+xB9lOnLtXsrO7j7N8P99hxlNTVwas5Z4em2ZuIqHVVApHDgGvApdYnUJOTcCorQRXlcKpKgSwh/JWBWlhAmPrNY4CdL1/BrTpuYRJM0rSCwMxcsy+1NCP74Sm802fgTG8DMQoPAo7mgBiXP10oGcMeLmbgj42i5EY9Su81Wri7NhKymnPRL7IIeO75M3gNh+H4BOdLCYgKZ0NQp5lomstxIVIIuUNuoB+xW7ctich1ikkmLEEbFzeD4SEsPKqBFz8Et2InHP5Ks0zSwdL0ucgznc1qqVRfLIqCIwzm5ziSMWx/22HXpZsJLpCZ/bi0/Kk+CWcyBe/6ETj3FzUBHuwCpdx8BKK5EZV/ZGpAwB/8kWGgthY73ry3nSo8flyVWtDbAzC4I1lSNgXnYwzIEahqDjS2LUKRiORxiiNg+WjQgzJBOX+zeqyfTMJnLBNFXAiu6Kzp7ITM02UZ6PsMqLNS1AYOBsBiiDyDlC6vQcj1jMcJYIjTaY6Y4IpcjGUIzgvBSR0m6+8YCBoJQLEpoJS1H+VWlY2Aq31gnnt8do0CWa0ZZZZAfk6Pl6mEvUkr0QEh0BsKnO8UCRApm8tF7i4vruKZUxlXMiXRYoiHYURixjn8DMyGtAT5BSQqsrWDIF+lr/ZrDsWMCtyaRDWha7vLsFUmR4mxdJ7A5fTaKqOqY7Y6IATfNCsfXJs1u0W8Zax3stFkkWfkzb92GcQZYLNpo+A6g/btQ+zHgG0+yKlLcm50y5vL54g9xNQGwa17L17b5nY5ixzzUs+epppaOIZko6b3W0Oj1V/fDf93iK4/bUFLswr27lGhcbWGy3fpGzxuLrzh4sVnoVQi32V4UAXVJ1YQhQWuga9eUmGypxA8UYhZ7MoUdrnZ9A5Xsu35ysTIEFQqFQ0o4z0jZ83FOoisxopematFIpd+u1q/dalN/LuIG4CZAsBx05Ywab6q/QO0TEDap97pzgAAAABJRU5ErkJggg==", zg = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAACXBIWXMAAAsTAAALEwEAmpwYAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAMiSURBVHgBrVZNSFRRFP7ufW+mcZxwjExciEKuUspqU1bYKigIXbVqE7QMGiFx6bi0oIJoF2mroFVtCmxhQma7fhWCQBOhpNAZcn6amfdu59x337wZHMW/A2fuzzv3+87fe3eATUQpFScdJp0knVeBrJq9BGk7tit8yABsVcY2IhI1wG/SkCSN87r0dwaF1ARKazNQTlrbyHArrLpOhOMXYO8/7R9NkY4IIe5vSMDpMOAaOP/rAVRhCTLUBGHHIa2otnOdDJSbgZtfpDNA/eFHsKKdPkySSEbWERjPNXv+5z38+/0YodgJSBnSRqLaFbIX9MtkWZSy3xA+eBWRlgHfYMCPRPg5p+EDp4XBi3+eIFR/hEAFqYI06D6J8g5p71ld0uLaJ4SarvsknK7jdH5BGkZOTdzJzaKwfBf2vmZI5GGJHCwaeS5FlrzJEUmO1lmzx8rrHOxIC4p0llNr6jemnTLez/Niba4HorSkvZdELQWHKLw4zaC0/6IcgQkGjkt1y8wB0VOIdjzzU9Vo008/zxzqEhSXYFkErFbJq4jB9cC8vAhTNFUuoDLPpVvQTpUy73XH2THdXQkm6NNdk56ARQas0l2BkI3re9hABiOnwH+S1gQWR0NYhqCXCbq1T/lZbSA4LyhAOCvEFEHQaAo1XhsvBkW1USV9ngvuUhRG2m1TEJ0eEaSbN8iSlMoc9KioAvaK4PqJ0gmUFJLjpqsItHQND+LHcs4DERLbF0OoXLQ1R/Hd1JmRFnjSEAvX8HInItDeEvMXqTJBb3dz4Mku5WhHoz/9yARTPOs717on4IzhYWl5wQT6m8ER7EUUbZSeAAfPbfpepOhtfkOL86+v1MF5ekMXJuimrYlr1Ho45W+NV36LrpGmRM8ZyMGhbfvv28tbQxCdXTzVd0O1kXf9aXHujCrn0AHlGlWbKD9nW+f2aOUNl6jtiVLJssnXz8o5eWwdkVuhGrj/snKn31aCJysxa12ZzK4/33r9bhp49RKY/QK1uOgdaGgAes4CFy+B02qk5pW5USR86Y+rrcuk2sW/i4QBWK0AnDd7nNL4Zhj/AZRiJNhy+uaPAAAAAElFTkSuQmCC", hg = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAACXBIWXMAAAsTAAALEwEAmpwYAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAPYSURBVHgBpVZNbFRVFP7umzd/nVYHy1DLT9rGsBEFSkgjIRE2/sRE0IUxGhZoXWmQkrhwYeLUvT8JUTetQOLKjRITCWJsSDCTFJNSok0NavltaZnSDu1M37w3717OufNuO51OyxBO5sz9mXO/79xz7j13gDVEKZUk/ZR0gHRMLclMMNdD2o6HFV4UANQrJ1YjEjXAj1KTJk3yuDSXgTv7K0rzGSg/p22syBaE4tsQSb4Iu2mPWTpL2iuE+GpVAg5HAK6BndvHodybsMIpCDsJK9Sg7aSfh5J5SOc6rQEST/Uh1LDNwKSJpHcFQeC5ZncmvoR75zvYjbtgWWFtJJa7QvaCvpmsgFLhH0TWH0Ks9ZgxOGZ2IkzMqRnisDC4lz2FcOJpWIQqhCItoxsSVV6kvWeVpN78MMKp9wwJh6uT1l21AkYOTfK/3N/4fvRzZUdbYMEhgoVyq/sF8maBSHiuEMwZmwXYsVZ4k1/o0Ab5O6GdCrwf48GRgQMYzQ1hd8vzeOHJN9Xu5v1CVMSG+0opVOUNUkqtxWIRtm0jlUqZn9eF0un0Yeq8PJzNwPcUxp3/MS9nMTJ3UUy5N9WW+FbRYDeiHmGyUqmESCSiiUiKHKKD3Ptj4iwG7/4GDy5y3l04lLxM9qz4bKRbnR7vV8bzyh1U78ayLK2O45ipfUywk3vj+Wt4Zl0X4nYCJeXiXkCSc6fFjzf6xEfDr+PCnTPKAFeDmxAyged5ZqpdGNcOnduDzYkOjM4NwaEzbg6wJUKURJMHgb2pV/DG5veRim5ErVz4vq/HJg/2Ej3gK5+895ZdP0lzsgJo9twPKvpNH+JTftXNKCvDy7Y2YPTKIsFV3kpj+HE8Fn4CnnQhrBW7x4YpHx98m0PnJVfgARJqa1/0Z5FgR/NzGJn+EzEqB0VVWDRO5CUO/lxQr/2UR6yoHgjOBtb27WZ4iQnOk+7f2/oSGlUzpicnUfQK2vLZv1x19HhObKgKx1rCYQq/esAMT3OS+dbN8OiTwcO4mP0dLVkfR77OYcdlt17ccl3iluLfEMSfpMPUogHexeXpDD48c0GV5t+matkkalTzNRgkfSROvdWErev12TlJx/adFcWuf3AB/YNFOtNWdQldA5zvhUR3V5Q0zjPLix13qNE1nA26u2J6gS6VUHWCxww4S2+AueLBSaNcWXGF8vDxLwXcnpNLZryjZTdYoXNjCO8S+K5NdiV42gxqPZk9AYl+ModulXB+zMO/WYmJe+Ur1xQV2LkphH0dYXQuAdd8MlfZtX70T6r6ZUA9wr+LngBgpgJwLJhLB8d8VbkPjAFhTAQlg1EAAAAASUVORK5CYII=", Og = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAACXBIWXMAAAsTAAALEwEAmpwYAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAOOSURBVHgBpVZLb1NHFP7m3hiSuAVHbooDDXFFN7QS0K5KkQJUbUOrNq1aqSBgwQ52mD0oBrEDBcQfCLBhCYQNLFBCELBBIkG8JBQSAeINfsRv37nDOXPvONfERgGO9d1z5/V9M2fO3DHwHlNKRQgDhBHClJq1lF+XIMTxocaDfIL52lAzIdGAfDe5JCHC5fGX13D1yQXtc5WM7hMLd+ObyHf4aWkf1nSuNUPThP1CiKNNBTgcPrkmPHXvGJ4VHqOjtROfL4igraVd9ys6BZScPFaH76K/awbhL07DDq0xNEkS2T9HwJ+5Vj9xZxBnJoewMvoDQlaL1+udtfZGC1gXLcKVeTjVW1jQvgutiwZM8x6zEmFiTu4Gh+Xk3UEMPziBFRQCQa1KKPKibjo/d+YJBSiXxwIu+Wr5OkLhhBHhcH1P46aNwBC5HZOZ29h5cRNWdKxEWyisBbzZ80Np8r4lefz2ZU43MLknoCBlFk75NtqiI2hZuIG7jpLARuHPfoprtp1fixelxyTwrU8utIBZwJ+xHH6P5QJ75ntagSQ45QmgZQPaScS3Dose//DbxKtrmlxQzYyTQlmVUHaLqBDYb1ryHH/EXpBegZDXsETBK5O3xBtYNoXq8BiqY5eMQIJ2EH/z25WnF7zZkkCm+gaLREdt5v8tm0F/bMZEqc6ErhT0S0EdocFHbVSdYYR613PzehbQ+TWZuaPJmdVRFWRJZKHdis1f5fDv0qy/ByaVgkqUBKBsOiyhBm0whbw8ZhrjLKAP1PPio7p0dFQVW7pe4/9lFHNlzZ26FmG4kIcECdi14W46XSdg1hpcN7Z3Z7F9ecavkGhm8pBFsGsU7x4Znto0v3wWWlxrqCfHvMiDZvfEzWu6JrA6+qNHvjyLbd0fT86TtFatMsVxFtA5ta6rD1u7P42cjXcl9Fe/KZ7lg8abnOKSk90I4Y7CsmYP13zJve0m39OD9nv3TfXXXqP/7XcrI4qyU8k0Hc4MVWfr4eyzVLk11BBFQp4gJ8Zrd8SsunfB8C2lZGFA0UGeI/A+8pIvUDl4IHjjxeuX6F1/2mRxQElfhPGB5GyJhvGlhmSti3NDyWxcVfdamqQUICwFiMu//qLkpdEgeTLI2ejKZHX+qOsT7tKHS54bhpq4CfVw2uu0OAKrtxc2ZYvlfXPYGl6ZzVbCe3Jczd9G1Cf8u0j4BKkA4ZRfl/TTvKm9BdTMv9u9qFBsAAAAAElFTkSuQmCC", fg = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAACXBIWXMAAAsTAAALEwEAmpwYAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAQrSURBVHgBpVZ9bFNVFP+9127duk66MJZtxrUShwaFuC11QaMdzH/4hxKDKCgJomhCBGaEPxYdbgJigkb8XsKSLfCHED/CEmLi5z4SN9SNfeo26Vgtkc61rN36sdH29Xnu23uvT+hGCSc5veeed+/5nXvOuecWWIJEUTQTv0XcRjwhJskv62qIrbhdYptkA+lS82JAXArj+2moJzazed/oFAqW6ZB9ugli1y9Yz29FwYpcrF21HI6qlbBXFCtbA8QNHMedWBSAhUM2jo7eqzjfPo7tNhNWfvcleIsFbaUb8NVPbgQjMYTnopj4ZxYirf3mvY0SoEz1BNJwE4DsuYT+W89ltA1MYY/JBW5sDNNPbkLzUBwDl/zgOLZW2SwiMh/HkNOHV55ajbqXbYq515STcErMWTRYWMJHDiNaUoKMRyrBj42Ce/Qx/O4MkiFB2vnxucsQEmISRTqDiN4/p7Bv20Oo221TwlVGIC4FoJmGncLgAAKVNmSsWQN9jklCV5kZJPcdqw4ilOA0sRXZfgRD8/hj/Bp+bNyk5KWdANbrZe93Ms3s1i3Q0ain7XwkTEYlm2ok2W+YQhJJ8NAkTgLR6fS0gMfhk70KQBUrc9JiM5vFYzFwR98F//w28AcOgi8uBuf14vq6xzEyMQPPtXkJzH/KiXhC0IQHyMvNxPVoHG++WIbWdpdUIDJIDXPFwaQz34+j2x2TTjDsCuJztxmcxwPD9i0o4ObwRbcPrzaOYCYckxK7wALyzVk4e6wKWQY97rfmwZidAaNBPaGdSQ8zqeW8k8ovLoUhEIyh9rN+bOi7F1eOfoqiN/bhVG4X6nc9iGhMoBKNk8cC3t9vQ+k9d2Hz6z/jL/csdhzqxK/DPjScvKgAWBmAdKFcV0MUAk5NaiyeQPeQF+W1A/jkhY8AQcBz7+yAEF04QWYGjwvDXnT2/YtBp5+cii7sJBujrhkVgGP3nEn3Oc7g78mIvEiTxBS0Ii8LjbXrcKx5CD0jvmQ+5IRbCo1wtj4raZklFxOWmQwL6zgOtyKvfx5nf3BhcjqS8ru1OFcRAyqAvaJIdeRWZKaqebraghDlLBWtLVXbRj8D6GCSw25BugjZBh21hwCMWfqU35O20MoATignsJcXpgXi8c3h264r2PvM6pu+WYpMyWgA53iqHNY32tmsbncZ0ooR0d35OQiGoyhcnq3Rivj6eLUyadH2IivkZvd2Ux9d93452Usn3EiXq7NpI/YevwC3J4RdjlIceok5eUOzk0FqaPiAybcDUm0rlC7ehwcqUf5AvqJW27Va8LJCeiiYFz2nHVTPOVDa8WIcF0Qc2VOhNf6/Vy3Vk8lOwl426YZ3XJxEa4cbg5em4aIwMDKbMvEEFYTDXqIpjNRPZkqSH/0WMX1qE+/g30WNbMCvMTgh6+pZz1/Kxn/WYlT5yKjeUAAAAABJRU5ErkJggg==", gg = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAACXBIWXMAAAsTAAALEwEAmpwYAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAANMSURBVHgBrVbNT1NBEJ9979mWCgUqVSQBCwc1JhLQGA8mFC8aTQxG/wEPfsSosV68EUu4mPhFIidNhKsXDfGkifLh0aCgnvxqQaE0qVCgfLV97zmzb7d92IIlMmSY3bezv9/uzOxuAdYR0zQrUG+h9qOGzZzMiG9BVD9sVGiSAChWetYiYgXAr6MJoVZQf3B4EvoGfsAQ2sR8ivv4a8qgcfc2aGttgMDBGjk1gdrBGOtak4DCIcA58O0nwzA2lYTtXjdUepxQWrKF+yUX07CwlILwxByY2H929wQnFBJCko48ArFyzt756B10P/0Mh/fvAE1TuRtj5ANZa002YXE5A5++xeHSmX3QfvGQhLshd8JkzNF8oLD8iv6G52++Q+1OD4IpqIyr5ZzbsEl/Zk4nY3NwKlAPtTVVMlzNOC8iCXrQnEun02YsFmMulwtUVeXAiqJY4Iz9nausNQwDMpkMrKysgM/nA6fTSUMDOOcoE6sP05doNMonkQMBk9qBqS2B7UREQEoEmqZxEiGVGv47Ta3UxIShvHppaKoCqnsrUx1beEjyyswOLqxCJLpumsl50HUDUoFWzdHQQENBImijVqbrvuLqfqhQSjXagddrrZ6vmFlwqzJtCxV29UQClKUl0Anr6jVw3LlHwwEiaKKWPjoKFG0ecdwqxONglpTgByVXNlagbGsHawyBWTrN59KI/nZIjvqJgB8oc3yMOzChgBO4YrKzJPZEU58UY0+W2eYaicQqguy6suB20XVLi5BCGLToCG+Ul8NmCIGru/yym8gSqC0B2CxRGhtlc4RCNIjaql2+Ast79mYMUftsg6CUXKooHXNSeuy4rJc+OmiU5Blymp2dxXDreQesKAJx4Ei8WOJC6hUEopQPUM/tdq+6XzYCLv09Ho/83Gu/i/wgLrv49Dy8GIqIHRS7C1w9Epw8UgfVPl4s2cuOlyk1kITu8AdV3jL4Gc9A5+MRUff/IrHOQ/uFZglOQg9PBCD/wQmhoUcHRr9Mw9mbr/HBWVgXPnCgGtrPN3FrAw/JTqEnMyhIrCfz/RT0DY7Dx6/TEIkmuU9FqQNaELAtUGcHLvhkFt609ej3msVLv/kfvy6CAmDGBhgW30KizNeUP+4gCo41ct5HAAAAAElFTkSuQmCC", Cg = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAACXBIWXMAAAsTAAALEwEAmpwYAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAARdSURBVHgBpVZdbFRFFP7m3rvbrbt0W9puoWj/1PJTW1oCRUmkENQ3fowG4xshxcQEQvsgRLGyWEgUjfqi0EgC8UGbmBoLSkKwwhIfqqblp5bY0pR1oWm3UNiu+9Pu3r3DzPROu9tuCYSTPZlzZ85835kzZ2YWeIhQSrOZHmR6gelNOiP3zb4GpiV4XOGTTIBHlZPzEZE04HtZ42aazb9jlzyYPH0acdbS8XHhoxYXQ61aCduWLbCsr5NTA0wPEUK+mpeAp8MEF4DhTz+B4fNBdblAcnKg2O1sBoERCoEyTXi9fA6cP7ZBq6qSMG5GcmgOgRm5YA8fbsbEsa9hWVMLxWIRTrOXSk01IhHovf8go/4d2D9sksONciVE5pw1l3laOPhky3FYWESKcKBMiXA0nrJD0VQgGDQJqNkSTHZ3wbZ7D+wHmmS6ahiJVxKcZM2OxLWrCKxdA0tlJTS7A/6sfFx/egW0gIGFLgd+XbIQmmsxApcm8ILuw9IlYZQN9sMx4kMi+D/i13uRde683JeLjGCjYka/g/cEt78JFh80FpESCaOt4jW01K7F3xkF6Po3jFt2G/4a9iPD2YFfFpSidXU1fnrxdajhCFS2Mj43eqRZpmkDL3ONGdtEtfT1GcbSZYa6bDmMggICixW1+Rr5zfa8MpAbReYES1b+apS6IrgzmodsSwwb/+jCS4tyEwYLguo6RWEhYgZFbHBQs5aVcdgGwuuds42zEoxGo9A0DaqqCuVyxtOHdRWFyHc5gaEhwOEAnE4M9fkwoNjx8rM5opIMw0AikYCu68jMzGQuzqk08VPJN3dsbEw4cAJFUVg1EqHWbZtBspxIfN8K9e23RJlKm47dRezsuWkCScLn5+XlcQKvJg8UH+QDs84FjE2vQhkZBjl+DLS6GmCBSJuGw8JHlKMZEFfZx6REmz4QhKS0UoydO4GeHmhbN0NvPyP6pE3Ly1N80xCAE3g5E48+eUCKeuADcRY4oNr6g6h8aRuTE8A3LXPm8DSbElBMAlitVqQVtvnEdwsoKhIBzLHTSBLBFW55mG4YDSSw52inTgjjJDN7cfS9w0pJ8Lai1aycSZFpewuew76DnfqUJ+Wbxn4GPm9cpyxfIC6Cdl5FfJN5JeGVd8/C0+0XlSJvn/oKii9WhUBu9APsdFN24ZFRP2hpGXbfrcR3528jmaB4sR0DP2+X8ZUqbFP4vXGRfzXtqplyTJITvQRHemyI720E+bMTyu8d0Pe/j/13ypPAMU3S9tkm+XEq+S4qgXnZfXziMpq/vZKyCi7P2OJYkUtgD/jRQUowHoqnAPPom3ZV46N6HuSsy84kaWDNl9yejyS9SPAaBl4tO1Ov6yQSN2v4o4Or/ffwxr4O/DcSfih83apFaGLAvDWFv2pu+ZHuyWwwScQJ93SPoN3jw7Ub9+AdDgmfbIcV6xng1rqiZOC0T2b6RU89+qfoo8sF+gT/LhpMgPtJgDfNPrdZ5vPKA/rHg04JAdkHAAAAAElFTkSuQmCC", mg = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAACXBIWXMAAAsTAAALEwEAmpwYAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAPkSURBVHgBpVZdbFRFFP7m7t1dami5bW1LiDXVxGKMP6wEf4i6mBgVo5aAEHzSJgXetEbaoEl1a1+KwYimxkQg5cFoTCOk/iTGBPvjg4m1IqiE8NeWstCUhjbQbne7997hnNm5l+12W0r4ktMzd3bO982cOTNTYAFIKS2yD8m6yAbkDYzrvnqyKtwqOEgTLBbt8wmJPORvk4uRWfzd038Rnd3n0Et+4tqMGlO1ohAPV5eiZt29iK5e4YVOkDULIfbOK8Dp0OSKuLW9H0OXJlFecgeKi8JYWhBU4yYTaUxNz2AgfhWSvg/tWa8ENWIk0jxHQM9cqbd81Ye27/7D4w9VwDQDapgQPAa+zwRLJJI2/j0zhh0bH0DT9jUe3TveSoSXc3JHOS0t+/rwZccJmtGdmk3oUSI3l15DWf+JUbz1+oNo2rbGS1eERAY9gXZybzrHj2FsdyvMXe/BuKsShmGQRobY8zkpVea6LmzbRiqVQllZGcLhMP/cTTHPCj37Ae4Zv/8+iKEhBCMR4I1a6by2GSIU8plZRPozvyHCAmwsYJqmEtEoNujPBm6le3sAIucOY3QUZtvnIrx1iwj8/NMssnxgYbZAIIB0Oq2ENOqZr0YJ/PiDIuctdZ96GmJqCsa5swi+vwuhulop4vE5IrmCnFK2ZDLpdUU5RePUsCaffw7y916IJ56E29CIJVu3AAUFHOVvaIf1GPaUr8dwqHSWyHTKQdp26MNV9kh1Mf76ehP/PGhCHygnkYD9y68wqldCEHHy/5Mwv2jjVPkimxPdeGnkD/lJ+YvYW/aCsKnCXLXRfrJU5XkHklBl+Msbu4wlGzdAUA7V97ffwPzsU1KmmXEfVQl723ZFYCYlzHRKOm42eZZIVknzCgaV0rJlkFReRt+fMH87AjeyOjcSB0qjcnfFy4gHrdksOeCrRGOC96CLGuuSDe/CPnwYZvxCJrKyEmJ4WI1y165FuvVj161eacxH6p0Jh1bM56CwUIl0c0APt4KvvApB5P5CiVxWLJczHd+7qUOdWIg8F/qgMTp5BbzJXEmYpkoCV1JREZztO2DvbNC3z83hHThGSUmJ132Pd1WoNDl02BIH9rvOzkZDpWhx3LOuDMuyJB04DjxI8bVzLruP9h9Fy75/9MQXJ6AuPBJo2rYKH9RFuMO/7FReuUFO3eE8gAdm6k/eAnnEI2c0a845D06MHD86OHbqCjY1HsHQyNSC9NFHl6OpbpXyWeQx7yPfk1mvRTJP5t8j6Ow5j+Onr2CQXjeGtTSEZ4iwJnp3NnHeJzP/ojOP/kG5eHTJ2/jvol4TjGcRDui+mC7zeXEdkIVY4Ft8g88AAAAASUVORK5CYII=", Lg = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAACXBIWXMAAAsTAAALEwEAmpwYAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAN3SURBVHgBpVZLT1NREP7ubaEthUKRkoBAwGBifGJCoiYm4NaYyNrEhYm4tS5cW/6Ace0GfoJuXKnVhYliDBiNIUTCI4ESgba0pZS29DgznFNvW8AaJ5me9/fNmZk7p8AxopRqI31CGiVdVH8koefCpP34V+FDGqBemTyKyDoE/CE1EdI2HudyOezu7kpbKpVkj9vtRmNjI3w+H7xerzmaJJ2wLOvZkQTsDg2Ovb09bG9vo1gsCqBt26IsTER7USgUZNzR0SGEWiJEMlFDoC0XdgZOp9NiHYPSAdEqY0SZLJ/Pw+/3o7W11Sw/MjexjM+pmWG3MPjOzg48Ho+A1kPALd/YQcLuukxnlmy9n13Txpaw5XxdBna5XBUETjUukz3E3bg5i8z6TyHS8ZuUG2jrF3kQi8WEja03AE7Luc/WVshyFGp1Gvvn7iLnCki8QqGQWQ266WfMBJUP8wYDVgZe/QgUdwFvGyyb1rO/YMW+ADvrUCevoXT1MUceLgo6B56x2EiSMKPd5h6nodNqUQKA7wSw9BrW2idUixp6gNLgLQ6IjM15xtIEI0wwxD1OxzJBfB7Y/AZ79jk5twUoZATDqv5qFl4BfaNAg798az5v0pek360DItlg8txKzMOefgqxq5CliYN5JUlHs81dKA2NA3ki3ksJgTMBHHHqdzsDWA5kz3U61HQArkoHatzSeRHq0jhU13C1xw4jkCziDOqPx+OyUI4B+d9efkMB3YC1PkMW3xfLVfA0DhPzXezv70vqBoNBnk7yDZaYgHNf57DIu/RnnD01ik5fD5BaAQJ9NaCx7DJmtj7gZu+dinmTiSSz7Nz33GMC59UGA+exkP6BueRXqEBvBUC2mMZieg7TG1EMd4zUEOsMYnnJLuIgJ3jEZYKvaNz0PTFNBDNobmiFx/biRvcY3q69QCq/RV+vGxfar2Cg5UzZRabatre3G4IBU4ui1IxyeqVSqZr6s5lbx0pmHvH8Bvr8gwh5uxH0hGr8zxoIBIyLpuj8vZpil81myx+dVZP4h4sBZ9c0NTXxVGWx4w41UsN5A5dpp1V/A2blMxqcZUJj1jw4ERxUVolFJpMRvx51E1O7+GVzZA6DR3CMVWH9qItQXBS9D4pio5LJpCglg8zxWtUfgTDqEf3oT6n6Jar+499FWAMkHICLei6i0/xI+Q2T7YF5SS02TwAAAABJRU5ErkJggg==", vg = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAACXBIWXMAAAsTAAALEwEAmpwYAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAMpSURBVHgBpVZLaBNBGP53kzSJLSRCKijSRCj0VnzcPDSXiiDY1oMgnrwqgulRPJi2Fi8ivfXgob34AL20gjep0VMLpmnVViw1qX0oaTUJaZLdJLvj/LMzySbZSIIffMxMdub7/sd2pwD/ACHES3mfcoEyTqpI8d9ClAFoF3iIC7SKmWZGkoX4HTqEKb24VhQFCoUCG3VdZ3vsdjt0dHSA2+0Gl8sljqYpxyRJmmpqgOXg4qCqKmQyGSiXy0xQlmVGBBrRvVAqldja5/MxQ44wNRlrMOCRM3cUzmazLDoUpQcY64JhRLNisQidnZ3g8XjE41GRiSRqTodlLAuK53I5cDqdTLQVAxwxY5MJlusMPZOQ+X4sjTe+m4H1zSRLF4VtNluNgZmiZGKPw+FgWaMR798My4BHH8dF79Az0GhEk7fOwqXzJyrilXrSOUZbnwlmgURx7Fd3d7d4fBQzGMFZ5OMebP06hJ2kAvemP8HEzBr8PFAaxKwgssJssPE8C0QIDYZxNhfZMlpCN+6nVXj5dgduTCzC/IddYhY3m9QbirLhK80RRIPTOFvd+I1bGNWSDgfU5Nt2FkKPl6XRqShsJ/M1JlbZiN6I15cigD1gO3uHX9AS5QwTVnej9jYZD0lw8pgbRq/1wfWLPWAF0QtN09ha9MFeF0PdCLTphPHP9j703J4Ed/aLtQEnyut+P8DXjYpBAlPxdDnpkOfR1+Jqeok82n0u+cqH0Aps/oCYpmVuAMFzx6uhcHi1PHmamCazW09aFsfw5P5+sYyhQQRnw0E/mB1G0lH98/pdaSQTlaAN4GnH5SGxnMMm419dCleDN9/A98U1eLj3Sr+SicrtCuO3ltD6H+H1pzhlPOTf/uWlTbLZ5dMLLgdRKNU2iGdylNpKrHJHVN2NCwZvKVKcGCf5Ng0UblB8MG6+8QK1KRrXHxEmIgulfXFEyLqOhITFDi0WI4W+3gYjxUR8pl4YJFrknVk8bNa0ujLRnX2+ca2/j4D2eh7IyiqQHwljk8cL8sAA2OjbIg8ExVHLK7NZJtiTWdI6Fsh//HcR4gIpk2Cc/xbmr3lT/AX3lMcAQuXZ2AAAAABJRU5ErkJggg==", qg = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAACXBIWXMAAAsTAAALEwEAmpwYAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAARsSURBVHgBpVZtTJtVFH7ubaF00K64MUdAAXW6kZCJojMRITPMXxrnR6IjYeOHXwzZ8J8/VIp/TBwshgUZUTPEzxgX52ZmZsgGxRhWzERmxuZM+Nzm0I1CC22h7z3e+/Z9S7F0Ynaa2/vRe57nnHPPPbfADYSIXLI1yHZKtmFalCljrV62fPxfUUoGwErlUDIitgz4Xtm5ZXOped9ICF0XgnrvDwl9T47LisL1qai4x46H8tNMVZ9sjYyx95ISqHAY4BIwjLbeaUxMR7A2wwqXncOeynWF2XmBuTBh3LcglYCDz63FJkloiFuSNCYQGJbr7C3d0/i43497c9OQYuFyF1tiC8kPiyphTpL9fnUeO0rSsbd8tbnlNdMTZsZcdr+osLT/+Cc+PC2kRTaJq36OI2BL3I1SkcAqyywKbe30YlEKs9/ZYIarWOqPmASHZFethQYQ+KMY3H4fvhqtww8T20GM6/hELMpjYDNGer81+zieXvcZpZ8YRXjfEJxfd7GUsnK1rVsSbGWG9cNqxX+hAIHQdbjPeXA5mCdRVMxZXDBZNDwSuHiNFy8XNlPWySvQjliYdg1YGBwELyuD80SX6WemVX5tVyNtthsDk1koWTciTbyOYCQ/FhWKHRhh85p+VN3VjqKxAYg6TmKCcT2QobAKJjSPBwueHhhe1CuCJ9Wo1VuAlp+O4vkNnci2ncVvU/dHQ6MfKEOh61dRU9jEN4/9DOG2QBvQXeIqTnrofD5YHAReKaBlH0EKdIJyFaIpdbiVn1yDd1yTKlY4UgMI02qkWRnyHMMkgVExdQzaASvoDGeLPhkHIuaI7Qwz/zMO6ph8ifVPv0Jf7LpD0Y4oD/QLdXlGGDEHAgtOOG0+1Gxspp3sA2LvgEVOSjvZwr+ziPgTEczWZ7BP/6rFR3272UwoAznOWL7lWxc1omuOlBlUb2zHrvVtSG8LQBzmjEKJN549IsjyqqBvnDuoqc/N/w5lMQiVXhriPVQEI4opKz1Ej+e04oXcNpbxZQDUKff7eSLwAwKWPYJ6cx8VTYNufv58ETdciu3JdcXs9sUIPi9rZtr7LcQ6OTQ/TzBZB64V8BY8jAPnXmdeT6kFSWTTrTGCAcXeo0ZcXiqt1cLIvxSaZRNZ9mticH8JqoLHUNX9HbyTpYmocee+7W6bOfxWZZE6ZJVJCD5WAfR69HxmmRK4WuBKZS7bd7ZROz7+VFKLowTRsiEPGD27bzFXC7i8zqpudKtZ6htvglQu12qYO+rAuw++Tdu+P4P/BAfBdOHgs05zsSO+FuXDKHZitBEtg0F0XqyBP+LCikSlrGx1pTbsKV2lVmLFTs8ANZCdXsN5XgN45lvwy7tgVswbWm7sqStNM8GVNBqYCQ+OW3Z6vR2a1FBzOIBL6gIuKXjxnIQtt1kluB1bbrfGg7vNyXJPZr1Bosfn9FgEXRfnMXRVw6VpoWs4bEwHrNiQGg+87JO5vOPRR7+DVi6n6Cb+XdQbAFNxgMPGmttI86TyD5SoeL6vpisJAAAAAElFTkSuQmCC", yg = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAACXBIWXMAAAsTAAALEwEAmpwYAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAMaSURBVHgBrVY7bxNBEJ7dO0MkUliWeKQAJXQkkAjRhQgQZQQkDY8GBagQDS7yEA8pToloKHkIEh4/IGnSBoTND4DUSQhVJIId2+ezfb4dZvZuLyfLBIcw0qe7G+9838zs3K0BdjBETBKmCUuEVdy2fOhLE7pht8ZBIUG7Ntu2EC28H2aorVqtYqFQwI2NDczfuIaF0/1YHLmEzqMH6OU+Y1NV6WY+0UQ+TZcM3zdyWSjZdqPe3WOTgZQS9r96AXJlBZRTBnQcUOvfKQbgwLv3YPWdMjQZIcSMeZDxzA159ekTcO6MgaxUZEdHByQSCbAsC2Stzj6whQC7sxMSvX1g9xwH5/pVHWME4pVI0/M4uffmNezvHwBpBZkbWPUaWK4LksBXq+KCDQj7TvSC9/J5XGTa7ImpgFuT9Je/QZ0W2UcOaxKJCqncSEDUaiDciq5C/15lVIOqurrAo9jGlyzzJQmzWiBUusUP7thNsOhq0dZoEuVr4mjDalUQ5BdELiqOvud1uhqqlmPr21Vc4DHn6FF+8ln5x7peJPN5ypCIlAqIqQoNXYEbiFB7pBYLILe2dDtULmeqYEuzb0RPzeJikD235NdmkJ1SGO5RABIAyhxIJACRO5VAcPMnSIplDp+4QjsveH65ZzTroChjM5Im63aMxTmW4fu+9qVSKb6s2eGG6B/j/TaB7VrURkIsrttutfBfrVXVnPIa3/CLtBfyuDFXaAUwHzWPvi31Qyn0CYqABHdh3iuXy2jQuDKs/a2gwljvYArrxBXaElfwSZcyPAz/w7j79jbXAgs80wKDQyAGz0L729qaHI4dJZ4h45qn0RUFuvnIT9bElF5ksFtynf3bD8Y1R9xrZi5vEwpcgQxFdkvOJsenQPSd5FtOWn+ytQArRY7xSRCmEvz7uxBVS+RyYtK4Z0LOpsWImeh8Wv6KlVzWLxaLWCqVNHiKVDgxZmr80cuoctn4yZaBHTMKDvLoyGw0Gui6Lh1gDnr37qI6M4Dq4jlUjx82E7c8Mv8kwof+HLZvS7iHfxfpkCAfI1wNfdzS5E4cvwF9IrMQL9B2HgAAAABJRU5ErkJggg==", wg = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAACXBIWXMAAAsTAAALEwEAmpwYAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAPuSURBVHgBpVZLaFxVGP7OnTuP5tEmKUkTrKY26aBWQwMq1i4sughIQV25MBEUXbkwEVy4ysSV4EZw4UZIjIIvisTowoXUKqaCYJqUiJWmaZw000kaksnMdO7cxzme/8w5N1M6U0b84Z/zn3PP+b7/de8Z4C4ihGiTOi71nNQVsSfbem1U6hH8V6FDGqBRmaxHxGqAvymHlNQ2mi/ccDG36qix4HK1p7slgr6OKE71JjDQHTNHd6ROMMY+qEtA6dDgCvDzhQKyxQDt+2y0xhkStqVOOB5HyRPI5H06g3ef6cDRDtvApCTJxB0E2nPFPj2fx8xfJTzYFYNtEaiFGomkQ4psZdvDmWQCI4Ot5uGYiYSZnMthntIyfbGA2cslmYKYxLUqWxgLfSFT4oYEFAGNf98s44UH9kmSFpOuQUlyzbhGqWlzXRdxbxfJg1G4IoIyt5S61WNQZQvzjKGzJYpPF29hUaZW129SOaS9X6FJJpNRbPF4HL9kbPyatUXRsxhjVRklj5kOoBK+VC4HjuUtFwNdEbw/1GYOtFMEz5NVLpdVuJFIRD05fVjgjUcCdqKTw/GhtOzLnAcVm8YyKYeKoOAxldLFrG+iIBklgufIchwHltxASi5b19fQHhd4sd/H24OeOBDT4AZYq+Mzucaw61GtpHPy/Fw6JHiKCE6Q5ft+SGAvLSE6Oxv2S0+zYOOPe3gp6aM1KsKIjOYknhtAOcZkxy3IKLQcsXVBwDlHZC2NxFdfIHbpEqzNDViZ63CHX0ZwLKl2n+wO8NihgM8sR9i3qwF8LhgXpjyyoyyaBCh6/DYC3X4M4r5eeBIwceZZWKVbCF59PQQ34gZ5i8c/A2v9RPhBce+BMPUW4PHDcuGCWiaCa8REqaEis9wuRH8fvOMPgxULt4H/uHFWnE1/hC03u/di1JCe5nuNuRMSxGKxSid1diL/9TeqI6zlK2rXUu53fJn+UFzOz9cFDTMh9ej+h8z0IhGcl3qaCKiTuCQwjZ/v7RJTV97hP29+F8FdPK4WqsKpniEznaEXjYq8TbNcLocgCODBwez6tNRJUealhoBNDQ4l7sH00xfM6v229HZHkvxEUTQ1NeH8P9/zqdX3rJvuuom4MXxR+Rl/9GOzNFX9LXpF6k40GsWN4Kq16azr70Cj6JVh+NgY+vYfJ1PdDWQoAmIyC8PJtzAiN1Y8agBYp4bAR+RZLRMa844LJ4XKlxVXd/9E6o/XkC2t1c0TAQ8cPImR/jE5PlENnjKTWlfmqCZRb/ji1m+Y2/hBEWZLabWn2T6gAJ/sGqoGrnll1vFMXfpTonE5J/7Hv4tRDbBdBbii11K6zevKvzBTgsxsK5IMAAAAAElFTkSuQmCC", xg = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAACXBIWXMAAAsTAAALEwEAmpwYAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAASySURBVHgBpVZ7TFtVGP/d29JCy2gLzFE2oEDZEMd4BGVTkDk2p384HzMsapbgYrKoifLHEvaHCVtiFI1GNCYzokIiKkYjmhmdjzAcsIeJpQlKJDxaMA5ER1toe/u4vcdzTm9LQ9zE+CVf77nfOd/v9z3OuafADYQQYqbaQfU8VRdZE49qa6Nqw38V5qQCbFR6NkxEFz6rRshleNpBBn98kfjGDpL9jfZYY2MjWVpaIoMTV8jwjIOsy6ptPZ52HXgHfZxi45GZMbw6+D7mvQt4skKH+rKtqKm7CVLUBK1Wi988i3jlQh9zwgetL6DSWmambq9RDJMgCKcTmGJq5Anwzu96cLTvOQ60I68YWQYztKKAUDAISZKg0WiQoU/Hznw7SjYX4PA7J7iPKqdSMxETNU8F7740gKptOyCTGILREGQlBFGQEAoFSYJAJgqCcggQgIr8Urw1+kkqSUeiJ4kMWGnM41en0Pl9D6ymHEhyWNUIYoyABBkBz4CWgJOzOb4mGobVvJn7jsyOMTxWLs4mqEwu9rKrswXzvj9QSVOnKGyWP48rfhwYC+OaS6TLAYu9DBfLM/F6ultQ60sVYAE22Krx5fE3EplYWJMf4E2ddVLwRR7dsuRDhi6d+eCIU8KmP2VICzJ+z9YIAa2AkvGfkesScWhbGj6uMXCCcDTCfUdcTp5FQ0kNg21jBPezkez9BicqvBBpM/W6INJ1JugnRNJ8WRYc1jSQYBSZRXXIWPIBgWnQQuHhywq22H1ktVIQwtEVhLaGoMQIZM+3FJETNDGCajaqN/yEPbd4aQMFSkKbI3gw128WzuUZsX9GgkLTGTL64dt1K1q/nkDpiozPtuvQcmlVKHhwGYoiU6XgMZqQfogitjNYm1ZtCO455sCce4HvCt4cqv2rWiUnLyaSAOG2LPku9AbfxJGIH5vCBHf+IiEYlJXiu+dFktzvFNWmx9BFJAm4aNILocsUeR0Tog1qUeSTQeS4uyUgIc1ixVc5y2iZJ5izaFAVgKjLLEHKeaI4tjUMqm7GNDAwED8YYpyE6bVHnsFHS04cmgzTCQVZk2/DYzdixZRGV0Zw1aRBdWG54jj7Ht9eTGOxGMdQxZskcCxO4sKMA4K4loV+j0V8qDOM8VwRZrrns7NdOOMREHMbMVpowL3TEZx7wiR4Rj5MRk8UBY2ltdiXdRszORnBD1T3pqXp0DXaHz96KWX6q96IvbNhZET0cC8bYBgm2LkawxXauW46122cEjA6FV/MdgIlab55d8L9CwbXxUYNJdVoKK7mTUKyYxRktwG/HhaUopooCjxR5HqjRHd7LTxHD/I5pDSXSSHtEceJy+ciLYeXDobYW3tzK/5JIrVEzH9ZwlOWKfnRzICQ++kZSHXl61bFGfoeez5h6KXY7kQ3HmcNYczt+1qTR3/DombNfCutdmZhQfNPNidgTAnDSbqIk2CDJCT+w3xOcj8up1XMtfuAGrpSSYaffpcUmrcko0tNin/x4gPcYavC2WNd68G7rh9Q/CJfuzJnx8iw8yWizLSQ+w5sjzY1NRG/38+vUjb3b1fm9UjYpd9LNi7nyf/4d9GmAnhSAF2qjV2P5hth/A291fHGWsJnDAAAAABJRU5ErkJggg==", Wg = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAACXBIWXMAAAsTAAALEwEAmpwYAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAPDSURBVHgBpVZNaFxVFP7ez8QS62QatbSkaqyibdK0YsVFEjDdCKYLuxFBGlBw05VZVFtETALSxh/QpT+VNFWRIohiiYqL1E7GjdSathZq1IZ0LDPTn8x0MvPeZPLe6Tl33n2dGZKQ0A/OvPPuPfc7v7w7wDIgohjLAMs4yyW6jdlgrZ+lFauFHAoIVoqRFTtiw9eCCBXiZ1L0zsgZSqfTlEqllGQyGSoMH6JyIk51WfXX89l15AP8GBR94s80Pvj6PGZSRWzb3IRI5CEYhqHt4P99Ec43x1kH7j72Baz2jhhvfch7TWw3pDnN6sg1+eHRs9g7FEfEsrGlNYbo2jWwLKtG7GgUkbZ22A9vRuHFF+C+/66mGqzOxNQ1D8mPncORH/7BjsfuQ9kHiq6PEiumaYainLgurKLDJSA0bG1D+dOPq50M6J7oDKQ0sXP/zmKYHWy4txFuyYfDUpwnuCxCLCUKxS3BdB0WF2axCHvjRpTZwcJvE8In5RpRDgJPL8vLS2/HAcNiAhMFJi9w9JKBM++rKHQP1EEmN5hYyC3H4axsWLw+fzuLHhlzyWCPaupkBjOZoiK5kV9Q0Tslj8k9pWvyMAMmFXLDqYiZy6ly+ImEzkLQL1P0vGgnEslKxTj667ky1kUrRDwkXC4PF6bS+C85g4htYtfTLVjDpYGQiwH7NrJZmGxv8Vh5Y2OwO7uF9hlD5ldqlmUD3/dh23ZNvQX5wjyOjMXR1VJC29TvGG3sQN9zvWq6wrHlsyKe56m15uZmeUybQUPUphBXQw6KXMxN4fJdp/HHhTkcT67H6fLPuHJtMtyvKV1VnxittYx1jdRo4KDWcb13ffk56H8P3BG4fhmLna13Ig6mRZHZXoxc8Dii2PnLKcz2PIDupy7j1YkktjW0YikIV4Cs9GCclZ6Ft94EffaJGjUjEA3atAm5Ez/BumctN9JE+eZNdB+YRDLjVltBfTc4v317HsXhfU/I4knJ4FeVSm8vlkOEPw1CrvUlwT52d7Xot+/lxEfKAY+V0dkFwp3hwQ2N6N5+v379jkfXyLJyUt6s1w8oB1pWBar8fDXQqVeOMve0nqJXIA3hDMzAyerZCQf3bkXHI2rqJWj1yVYOxFO4sP8NGCvOJLAgId+Cg31temMo4KwzJxoM76fzZ8nbuYO89c3kPbmd8vl8jbT3/UhNz35Lu/efovjk1eqbbXD5mCoXeXhl+okJ8t4bpkKhQHNzc6EcGv2rnnjRK3MpJ3LpH6WVY5zu4N9Ff0AwW0V4KViTksaW47gFKpK8y+YM7rwAAAAASUVORK5CYII=", Rg = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAACXBIWXMAAAsTAAALEwEAmpwYAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAARISURBVHgBpVZdTFxFFP7mbkHY8rNYoaSVAho1bYEVG7ZJMRFioimJkQefNqLYaGKMQcQUfWgEXqyoNJCY0JimmMKDYgyihhpjAo3QR1h1IRDXQkEfSJR/WGB353hmuLPs8pcaT3L2zszu+b4537kzZ4EDjIhc7A3s/eyTtG3z9lotex7+q6kgG+BerWM/IrEH+Fv8aGR3qXl4aBCbN/v0kxYX9W+sEyfgKChEYkUFDp170oQusDcJIVr3JVBy2OAacL31CmhmBlZmJkSGC5bzsA6Rqyug1VXI6bscAxy+0QnH6UID08gkTbsI7J1r9p++b0HJ4teUMP6wsKYJglE4CBpNhxBIfwJyLYjw+BgSX34FSRffNXBvm0wso7nZeVNTE7wXmvHFbI7YrEolqzoZ1tEIWWtrcASD2i376WDwQ0yTePIUQp9dxfrHzYagwdRE2AQd/Kj2+XwoLi5GUVERUlJSkP1AAlrfz8WxrESIsaDEjyuEiQ2HzoQzimbB88jyEmcyjuRvvjV1GeAsyoXNNKlW8vPzMTU1BbfbHa2LM8lC7YVseuH8kS1IX5BwcxkYXxdkK6xIIkwSHvUDpaVw9nxnwjMO8UelphsY0ODK5ubmkJSUpMesDC59EhB/TC5QTXU2nG5LwJ3GBJxVN79Vo+tbb9bGptY7PDSE8O1Bk0WtWntejXp7e6O7rqqqgsvlwiq/KYooIyMDn964K572joiZvxhUMuij/MNL6aD3Ugk5ESn++RsW5+hQ2fT1GainFMHjaqT0NzY7O4vOzk7U1dWhq6sLgUBAk03cWYCncpi6ev5kXYLaRREr/WGyJS4fiQh3MinR5O0hA5UHcxRzc3N1zdLT06mtrY1WVla019TUUEJCwi5/57UH5byvRMrAWZIBD0V+91BoooTWr5+itVfPRo+4hRhTRW5vb4fH44mu1dfXo7y8HKFQKM6Xljd4cxGxVWLbeCaSuPZy+/yqIk+pVJTOSiav16u/8Pv9aGlpwdjYGJxOJ9LS0rC0tARXqgMfXMyh171ZcbeAGA6SdX1O0HBQOEofMssLUYKysrK4OnR3d6OjoyMWA+6TTuq5+ojIO37fNvgI1+HaHGgkGF0TpwvM0Kdq0Ki06u/vN+dGO5cubv7Gi1ms+RNS6a39q0KiZ48TZd2vXbKH2TczeTz0sylBrbnztXEWcaDKXWkOee1y/jZwd6GkZ45JA7yL4Iw79hrP03mYu39nFoWPJdOdW+49d7wTPMIeUnO/X5oeEZXRbjCqS1FDQ4MGf/Olo7T4yxl5EPDO3Yc/ao7teHlxBbTbn7ZbP1yR4S8LpGRgeQBw7O4j2+Bb2u9lpuDa/L9ShPWM2CAyBlDGAlc+x0UdjAVvjMXcq2UqdtXZdMskdey5ZWL0N9D09FZAejqgLrPzFRDnSk3oni1zv0xUTT6ne7d++h//LmptgPkYwEl7TUnqOgjjX1DGjSNpiazMAAAAAElFTkSuQmCC", Bg = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAACXBIWXMAAAsTAAALEwEAmpwYAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAARFSURBVHgBpVZbTBxVGP7OmVmWhcWFlku3tpa7TS8Kiw9abKCJD1qDFE3a6Iv2pa9i1PRR+liNiYlP1sTy2NQ0wIOXxAsQrU0TsLWggtCAaMtFG5Yu7MzszszxP2dm2iUsWOMP/845M///ff9t5yywhQghSknfIR0knRH3Zdm/101ajf8q0skHeFA5vxkRywP+Ol16SEvl3l4dQSY5hOzqKISzqmy0gji0SCMKStuhR58IXJOkZxhjH2xKIMvhgxPwKMyFT+Bm58H17eChEjBe5Nk5abguqXVb+iBa+74i9KWHSM5sIPAjV+zG/Dlk/r5A0R2ExkNkJUBOnrGQ//KPqbXrGLCNaYS2vYRI/FQA90aQCQtqTpdrsizmAoHf+RR6USM4Z+C54IGHIlF+EC6R0Ca79gtC5S8jsuNUUK5m8pvlvpssTalj/AZr8Rz0cDk0ZkGDSQQWOKTKteldlVreM+Y9C4UrkSVfWVq/f+dVPH70M3KT+rUDzFlAqLiRCChqin7ypo3+L12krAqcOBpD0rAx8Nkc9tUzHGnVUPMIVBYOpWGnp4BIAsV1HwX5lun0cUyunLVRMHsBmgZwsULgYcjCNNYwvNjBMTM9h4uXQohEOTqOWKitKUS8UkZoq5pxkaWSEk76R5WFHm2RsN2yRJ1qalaGlIFGdWdukqBNcjaRNh1MzaaRKs4i83AFEq0RHGgSuLWQhJlxycZQdkwkvZ4Rhn13KMigTWbQJFeuOaUeMqnIUqmoT7wQP41kMHp7CRl2HPGWMlzLaOgbWEIl7wM3QnjyqYxHAFv5q6ZTFr5U635DYBqL4G4IGk2EjMSbGhMN1Wu4MbkLSyWFeDSyF7fCYZiRcbiLdahrn4RpRf0x12maBByHCCwDRT6BbLKcONSf6MPvi4Y3hywYLuB40wgS1jRSexlGVuIob0hh/593wW5yXA01oH8sEXyTJItKYU9VEaYvdqm7EmlWLmLRgpxBXy8rJQ+h+ask/rAPYmI8gUT/PNZiRbAdHRuFoToeDTbJewRtTVX3I8mRmTvb0XV4AlZxCV6d68UrEx/jSjiO154dw8RSFfLJY/VlwfK6JBiWq87DuzeAS/l5fic+/K4d3+zajdqyJOL7aIKad+LNS89jKRXLAy98LCUDsgeyycty90z31xi+/hdlyZBbqrDuooCnUb94FRURG1dibTAyOmyhrwOWPdizg+p/oTO4WRO8iwbp0i5+uAyn6wXVmPUU/y6ur9q3w2D7D8hbvfQuOhmMy0nSJDvUCv726TyF2loCe/7W6QBcnQ3rjbzjT4nz3lnhVG4Trq9iC5XPpa3z7tncE647fyRC9NwzGb8hnJbHNxC5OaqAj3UI9/L3ueA9uZj5jkzJrl7fak99wRef0ziNQczNeQ4xmp5DTwPPHYUsqy95j8zNMpGHfq94cBkU/+PXRbcPsJwDOOPf6/HHfFP5By1vqhbbQC2IAAAAAElFTkSuQmCC", Sg = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAACXBIWXMAAAsTAAALEwEAmpwYAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAANXSURBVHgBpVZLa1NBFP7uKzaJ2FQNLkS94sJFEqnoSgWjSzf1H6hQxJ1xIS5Td4ogQnfiC90KWgXdmQoK7hLxQUEwsXFhqxKjiWlyH+M5kzvptU201hNOZu7MnO8755u5mQB/MCFEgjxPXiAvi0WrBWM5chv/ahwUAKzUbg4i0vqAn6ZmgjzBz+7zZ+g8fiRbUa/LNfrWrTDSGUSOHIG574AK/UZ+XtO0KwMJWI4AXAIuXLkMUa1CTyahjSSgx+IyxG82IJpN+LMfKAaI374DI5VRMBNEcn4ZQZC5ZF+4dBGda1dh7tkL3bKgEQoFQaLJEAEhvwH/ZwvuzFtEjp3A0NlzCu6MqkRTmlNTZFkY3LlxHVY6DZ0XEIqmhbPRAvguH/d9WuCUirBOnlIkLNduIqkogpvUHPdev0Lz8EFYqRSM+NouwWIWi0xBv1cFPXs/vlMlM4jef6D2ZZoIDmlB9mUeaewZhV6dhZmi7AlAESBUgRA9UemjBT3Aown3zWtg/37E7j1Ui0ZM+joqN7X83nfTad/I7IKWTGqCtBc9VMiMPec7DGtdd0Aomq5kvucJb9s2eL6AVS6b1vbtPJ3jCgrUydbpCLZaLZimCcMwpPdOAoH7XhtOYxbG0EboZgy6sYalVQcEvu/D8zy4rotoNIrh4WEpE6swKiugCV3XpTOgWNQCTuszPr28AKc9D6c5i1r5LjqteSw1juN4x3HUkM0SyReKM+DJsCmSTrOKxvwLqk6H266hVn2C+KYDvyXB4MpD45KgtyDchs1zGjDXjCA2vAPCiKDxdQZeh05ifMuyCpZWzylXZCeQZpDFNoxiofERolPHus2HiaA+cC3vY2DfzIDAjkQiaLfbfQPWkhycwEL9HYS1CfHkTgwlUishKHHvKXl2bm4O4+Pj7qAq+BS57S9dgMh6OknRZWtYGvbJyUk9k8mwOlPqN19aNptVL+eq3bbt8M+4rZgL/FQoFP6boFgs9u6IcGl2cEuJfD6/anCODd14Npbol1OzqyEJgbPl0M9oYkKt4FJZz78B876xtCGbCGP2uzKZPY/gDZ+ensbU1BRKpRIqlYpck0gkQMAYGxuTbWB9r8xBlfCe3BIrt4L4j38XuQCgFgIsB2MsaeJPGL8Aqoe6M5Zylg4AAAAASUVORK5CYII=", Eg = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAACXBIWXMAAAsTAAALEwEAmpwYAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAPASURBVHgBpVZfaJNXFP/dL19Ss1iayNqOrmqr3Wa7Rd1gbHSB/X+ajLGHvVjLZA/bg7D6lj013YswJux1MLAbbHt1nVoQpFWLIEWsjaj1T1MqrVa0TWpNrF/yXc+5uTf9NEm1eMj5zv3znd/vnHO/e2+AVURKGSbtJR0iTckVWdBjPaQtWKuwkwZ4XjlUjUhUAP+RTII0zP2RsTkcOXNT2cySo97Z9EoI0bYIdnVuRGxno3FNk/YJIX6rSsDl0OAK8Nd/L2L6dhYNkXUI19YgFLSVw1LOwYOHeUzNLrEX/vn5Q0S3RgxMgkj6ygh05Ir9wJ/j+P3wVbzbXg+/3yII4YlEUF8aL2SJ6HJqHnt3vY6fuqPmpf0mE2FqTuY8l+XAX0n8MXANb1FE9BJNkrItq6bUP1dRnp+4hx++fsOQcLneJv8pQ3CIzLfJGwuIfT9I4BuwPhhQwCb6FetNXSolfyw+WKZM0jh68FPEdjTw5DARfCx09Ckeie4ewPSdLNVzAyFYGkYUEyhByiKR9GSiUpFI3phHbPvLikRLxKbHV9y6MpV2tzYF3baNITRGXhL+gF2M2RO2cBfp4YMrQk8UjEkLTkHWh32QbgGTMxl7y6t1PNXDGQxR46NMJoNcLgfbtuHz+ZSWllVI2NnTSC/SfG0UId8M3EA7Ea2HLjFc10WhUEA+n0cwGERdnSIY5jrs5BZPWJallBdXrtQAVm4U/f9n4LibIZ37ODYyD+vhGJ4W9mN/x3HMUAsTqA3FEfDkE98JkYj8HP47NYrBk4+QmxnE/MR1DJxI4/i5KxCFhVIgDG7UE1yL7WX32hKJFcJywUH95iyOTZzC5FIKOasRF64t45P3ZVkGZdmTTqmGLs3TQtXHe60WQjWXqNeNZv8OyEdX8c3nH0D6IqgkvI5a0iWCQCBQ8WWIGjS/1o09n3Xg4q0kxmdSiH/3JZob2lBNPARj/BUlqNGbmr2PfQdH86JKJpB5IrOxmkiXN52LX/a9Y73ZGubg97MHnxm9rU21tLd89sj4vSpHw7OkuNk2Na4DgZvBwxZFy+fGMPfiezpgzpg1iyw+/k50mpF+PovMd7mXNB3bXk8k7Sht/zWhS8S72hHdoqJXdwM3FAEzmYF4VweRbNOHzbNIVs6heNc2XQElfRqz7MJJkOFLB8nJNHYnzmJ6Llt9OQibDzfOmq0HPGE6la7MHk1SvDLH7+LomVkizBTJSOpCfgX4RWeTF7jilVk5sOKl3y+fX4bkC/y76NEACx7AlB5LkIZXw3gMGcYkSVk8PcUAAAAASUVORK5CYII=", kg = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAACXBIWXMAAAsTAAALEwEAmpwYAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAO6SURBVHgBpVZdaFNJFP5mepP+7GYbt9R11+3abMuyq9vV3X2orYL6IKJUFBGfRBTffNAqii+CqT5VoYoPgoj0B0F88wcUFfwBq4iV1t/UB21sbdUKNo02uW1y7zhnMvc2sUmteshhzsycc74z37n3ToBJRAjhl7pX6jWpPWJchvRavdRyfKlQkE4wVWnOBcSyJN8mh6BUP8273t7GrYFLavwwNqx8ZnxXhkr/HNT+sgzzSmuc0IjUBsbY4ZwARIdOrhKe6j6C17GXmFZQCp/Xj0KjSPnFkzGYyREMfOilKOyrOYEKCaglKEEaJgDoyhV665MmnHnWjL9K/oOHGymvT88qUmom4+gZ7kZdYD02zN7h7G53TsIczuXQSbS0hZpw7nmrqohxyiEgnTPLEW5RGojh6bv7WFOx2QEhuv6VcWGuQ4ga/7Phx2gLHUJJ0U8YFXGM2nGMCVPapjtXSrZco70x0F4MpUUz0NbdhPuSWt2/ZjK4rn4jTbaebxdUNeNMJpI8y2SmShobT67VtEf0fkwB5hmGiiMQLYvpMZcEYzXN7rwYRXe4jlWUD1mBX1/Bm+eRSIx+DiMuSwKZVEmukLAt4eclsC2g/33YmOmjulFPAKvIuvzUlMk43r7ZnLdkviH+nM7dtlIPiG8a2egjhHt74DEodAT+aTNRUFwN27ZhWRaSySQK7UIndBH1YB5ZoTdJ4gbvExw7rwBRc7xu1Uw9xkUlCn6rRmPfVTzxlCDBZyO9EM45EomEs1TOdUMwELUVAJX9Kgp29G4qYTa919+JWjMAj22oyp3kjjoFOQBp7CpPZY5ZGdS7QhTUVS7H3B9+x5LAIkQikYwTuI+0FgIIk+HL5y7Izz75ptQgq8TjccRiMfT19SMajWJwcHCCj6H6oyTiAlTP8qqV7/Mhjq2Uo3fid4qEjk8c+8v/QSgUQlVV1WQAXWTdkLp46R9etHSY2HLvuKjs6LSQQ2bpsTTLni1JtWQB+Q37OXw+Kv4so5dBGkPkcHpPm1h7fDsbJ2vqQg2jdttlZfB0dDnLAS6bQl26TrN1KyqY/oZl7/BnAEiN1pPOUkv6t2iT1AirXQC+a/dXJSdhO3eDzfmbTHU3ZDqlrj8l1sFGYU3/UdhaxSRK++RrHWhMv+Hqs1ciRNB1efRAWP/PnQBkp6lKvHqlsNtvpicPpufMdmUSuvp8q/mtduDiBeDxQ4je3lRAcTFQuxBYvgJEq5asV2auk9Cl3yKmLtfEN/y7qNcJhtIS9ui1oH7Mc8pHVRGjNAQfy0QAAAAASUVORK5CYII=", Ng = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAACXBIWXMAAAsTAAALEwEAmpwYAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAARPSURBVHgBpVZdTJNXGH5OW0pZoRYcCCgEUsUJTFEWHdTFbTFzYW5TExcvlmV/Vybb2E92tcS6XbmfzJvd+DO92cWyZdlPcG4xQxLB4IV0kzgRExg4XANSO+gP8LVnzzn9vlIGJRrf5O35e8/zvO97znm/AsuIlNJLPUTtpA7JeQmbc+3UGtyrqE0mwN3KqVxEYgnwt9gEqF41Do5fRM/YL7qdno1om3J3FdZ6G9BauQtNpS3W1jvUw0KIozkJVDpMcBjdF3B04gtccd1EsasURU4vChwPaLu4EUPCiGJsekTtwoctJ+EjoSkBkhxeRGB6rtkTnxzBzIljyGt+BJNlTtm/3i5v1NrFeEmWQzKtCSOOocg17K59ES/Vv2Otvm1FIqycs+lTaVHgc1+eRF5jo14UBLGZsKEygWC9XV6vtSNUIgT3mUQCA5O/Y5/vNYtEpWszSYYtglNsXk72X0H0yR3Ia2iA3V0Im+mBacSOsMIlmU0GNzjk5Xohxr1CRGemGMkAPnvsG2xKn8t5EjwhTO+H1Mx0cxPE6AgJGum1yBDoH7eAiErNY+VImhkbKxXyYpMd35ddE+V1rZrElGIHf/aoXrLnAkBwO/u2cBg2nxvi6XwID2lupYDVBBtIQpyfpSepzAEyO6gcgdg7OItnb8YxWNWJf493w7PFr0zalZPP61tz5oz2WHs+Mwnxrg2ifwo4GyZKDDg+AbgSwH4a2dnG49QYo6LGqLcn9N61oynkf9dhRbBDYTbpgJl/7b0aPEPw30JAxySwiznxzQEPJ4EfSbaJ/XXUWJQa062YuA2RSGRSmurptghqVIr0g8LoKBdF+lBXk6qPHk7NAH9xWwG1i2D/MDVX2XdwPpZIH3wqpVvrMtA1JCORBQQZUZdEH9tK/pYQaIUCo+dRqos6Z3BM74sIahj4v4gstURFNawXPSvmZ8cI4HemCeroQwUjWu9I97fmATcWg2eT2KqrreGdDIHd75+3OsH8Omm6zwW8zjdzi4DXGcERD3CMqbo0i+VE8JqbElQEXTqUtrZ5iynm9iCBBwn8QRGwhdG00vuPeKu+ii8L3lexORXbc8Aa/qAemjrksBoZe5+D4A3IPDAlKj2FIk2WQy5XNMtf63bKjrrdhq2y3Nl1sMRaqrVKRSebxyXBkyRZUCJySO+aR9Fd48e3jS8Y4+4HHeomqdr006sebCjTd+c0S8Uri4pd6tOPIVnwbEsQXFqzVfZWtYivNx6QocJVWZVVan1jez7e3K5LeqbYaSrVIYmq4Z/b3nsfqhAoEiV/rNqYPPtQmzjne0oOF9fYTUir6qWrKRS4i+AFFqX68AwDiz84ATaH9OBqv9z/sysZNFY6MmaWdVbB21blIHgBtlU7ssEDWOjJApJ2k0S/8N4RA+dYyP4MJfF3JKV3FOULDbhznTMbeMlP5pJifvRPy7uXTnkf/y7aTYBwFuCQORcwr3lO+Q/TJUUmQT8xawAAAABJRU5ErkJggg==", Tg = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAACXBIWXMAAAsTAAALEwEAmpwYAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAMQSURBVHgBrVZPTxNBFH+zXei2SqGtKNHE1GBI9KBtYsKBg004etBgPGr8ACTWT2D7CSDxagLBBL2p4QNQDujBiMXoQRIp0YR/NdlSS9ttuzu+NzsDXbCkIC95nTdv5v1+b97b2S3AEcI570N9hjqPmuf7YkpfCjUGxxUKkgCdylQ7IvYP8Cc4pFH7aL788w8srpiw/KsM5Zot9gz0dsPg+QCMDIXh5uUeFVpEzTDGJtsSUDkkuACe/bAJWyULwsEu6Al0gdGtiYBq3UFtwkaxjjMHMmNXkTCoYNJIkjlEIDMX7DOL6/D2UwGuXToLuk8T25jazsReFQRWw4b8dgXuJM7Bo5GLCu6pOglTNcfhM5VlZnED5pYKMDhwBldpWRMja02Huz/Ew7mDbg7f18swdqsfHrokVK4EkqxpMoRK0/djuwovkSAaMsDCcls2E2MdlcpvNZnQmmeNfAD9vQaefAu+YGll/6bI0GT2jwXLm1Vgmg9Vk2DgEjU51FEt20HbcW3hc9drSOLzuXEz7zdVmZL0mOto3KPZx2+rzvLCnEObINLDDH+X7BLbL4unRK1zJKw3+ObvEmwsOfDg+n19+MYQraSI4C5Zsy+ea19fTYqSrfj9EI1GoROhhmOtwTRNqFarwvf6wjYMT0yQeZsI4mTlcrm9IMuyoFAoQCAQAE3TPEDKbiUg4EajsefLZrPKjOmyIZDP5z2ZUQAp1VaRHMyc1HEcDyFJsVj0EBwptm0LPalQamtkhMNhOC2JxWLKLO4RJJNJOC2Jx+PKzFGJFgh/fHwcEolEU9VbNbRTUT0hHR0dJRDSd4wuAxombdrZ2RH1JpKTEFDDSSKRiHJf0RCIWp6lWTAY9GRykuxDoZByT9O76NDLrlKpQK1WO9YpFLgfLyglCQdfdmTgkFGnMAyjo5O07qEYCU6SkZiHPjhpcN+sohflclnUtd1JCFjXdXHjaWwBT8MRWaXkR10I3ma+u7vLS6USxxsqFB8G4aO1A38EUtCJyI/+NO9c5vl//LtISQCzBTAvfWn5mLeVv3oGZEHnjaSTAAAAAElFTkSuQmCC", Ig = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAACXBIWXMAAAsTAAALEwEAmpwYAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAThSURBVHgBpVZZTFxVGP7uZWYYGJaBsllhGKSWQktY+mBLaVlMWrWV0vatNqaJJr4YRdNaX1SqsYZWiRpj4kNDadI0xrgUrdgaBS1LFQyIQFlkKVJApiwzw2zMzL3+58y9w9RCU+Of/HP27/u3c88A9xBZlo2kb5A2kY7JK7KgzFWRmvFfhR1SAO5X6tYiElYBf5GaalIjG3db2tE2dYW3S8tWvifFkIYNxs0oWr8H+Ynb1aOLpCcFQXh/TQIWDgWcA14c+BAzzknE6RMRrTMiQhPJ97l8Trh9DkwtTbBTeHP7WWQSoSLVRHLyLgLFcs5e31+Lr0bqkL2uEFpRE9j1b1/lgLp9LoxZB7Av4wieznlZXX1J9URQY05NFwvL+Ru1aBit5xYJIsOQ4ZpLhcOyHl5nLGRJRHjMPKIfHIHOMK8QCRic/x0HM59RSVi4CohkXCWoo+boiLUPz/3wGDLjshGhNcDnMWDq1z1wzKYRjoAovRs+fxjcXi23LDa9H0m5LdCEO+Dw2MmTQby38zPkBfLSTARlomL9UTbzevuz3GpBFGC3a9HXeAguSzxE0QGXR0Jc1CzSk0ep70d05G3YJkzo/+4QnB4ZYRoNP3d+oFYNUykrc4JDJRtN2lqQZRhGSbILW2Km8XfXNtjmDZi16rApdQAOtw85pht4KGUMTrcfGtGO2UUdrPPRmPylBLkxM9iV5EIsmjBtv6aSVFEGsZ/1EvE5jmfNgQzBwFQ8PurNhiBIPMTXB8zYkDIMvXaR5yQ3ow+jMyncE7Y+1peN8ko3MtPn4PcBovwFze5ksCWMIJ/nwddNoQAPUcP1rZizeXGkvI3mZG6KKcGCBXsEDBEeZCSPYF30NAzhbkiU4E8ul6GxYzNeqBgC1QAkb7PqgZmFyBgou7FA/Kk7fCsVXp+EuqvbECbYaMYBj9eDDy7txqmLFVQAC7DaQXtc+PjrEnj9MoanU8ljsl5Qi2iFIHghuNKPTusLlvunPxcjRm9DQswcjbyI1C8h1zyEeCrVuu8f5R7cgSHceWVYiMYZE8Q4am7yyYzkGUSS+zmmv/ht6hjeSDF/AM/va0AqhepCUzksViMRjfPSberJQ2Hmn0ErxTCzir8oKgQI05UGWcvyuqn09Ogcfph0I4pzehEV4SLrZFgdBpiSLNi1pQcdQ1kcnMnuwt9WPAnLV7vdzIOfWM2KlgPwHzvLZx8RbmHvUhcuRxXwcVqiBV+276CqCQ+CHC5tCvaf8l6D6VUXJERThiksbx0EcvjSJYFdBuossJHvQAWEtlYwtxY0USjLeg2LcRH89jrcepgSZ/mpCUsSYg0OuJfDYbbP4sfBtxEpuRk2pLQ0aDu7Ve4Mka4zS3kzD9PxE+o3DHG+JVwZOoW9E90cnInVaeDK+xSqw9OtuDr0DgdXz2nrL8gK+LnQb5EZysdOevc05DM13Au1Gm7qEvCNsQB9+jQ+3uSewv7FTqQv3+Zjhsisx7ETZOQrPLlQPnbBOCrPHxf/mRrZnxQvS4rK91C2zvb6T9eEvnBVWE1ooTq4pbdH9m/Nu4tIClEOXPmkLLW2hIJXh2Ku9mQydvay8RsuU9LR+C3Q9wfkiYnAgdhYoKgYePwJCEU71KOrPplrecIe/XPy/UuT/D/+XVQpAAshgGPKXLVS5mvKPwSW5U276ZaGAAAAAElFTkSuQmCC", Dg = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAACXBIWXMAAAsTAAALEwEAmpwYAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAQ2SURBVHgBpVZdbJNVGH6+Qf/L1oEMNoarsCEQ6TaQzBi0mGhgUeiCemG8gcSfLEStGi8nBW52YeJiTDQKDo0aiUgcwbBEyOj0QoWxgRMRnOuQbQXWrd3arlu/9uM95zunLaPACO/y7vw/zznP+c77FriDaZrmIN9F3kHer2VtTPR5yZ24V2OLBMBsrfV2REoe8Leo8JE7WNvfNYS2k/+hk8rwxDSf4yybB9eKBfBsXAb3ujK5NEy+W1GUltsSMDkEOAdubu3CwHAUJfOtKC40wW4xwGRQEYpoiE1Oo39wHBrNPfxBPScU5iOS3bcQiJ1z9r2fncLHB3tRt2YRCm0a4lMGKDTzhbq/MZk04GhXpVhMYwkVf/47gte3rUbTa+sl3NvyJAVSc7nzvZ+fwieHzqN2VQkWO8bxxqZfMN8WRiyRRuC6Bf9csRNhGkXWCJqeP44VZaN4pPIBfPRdL18rbJe8E0UQtFKx/ezFEB59+XusqVoIu9VIkiSx4eEraD+7nEuhiANr9Gc1qtiy7iL855ciGLZhIprAX30hHP90q7yXk3SKpxTB1M96Krd+i4FgFPV1ZgyNFRIMASoSNgs+46vgvUuKIzj2+xTca0uJZIscLWYSNchLZeBF1iT2vHgEDevPkRQp0jhF8jBXuU8m9D7dVT7n2dpeNL90hNZOE84wxxLmnUv/PKzW5h/gu4xMmtHQ/AzsNisHYRtkFyw0yrazHwd+Ol2OL0+U0FqCU1L0WQekTG5GUMNq5y6F+J0X0OrBURMM44DFnKQeRYiSvQUNNxOMhOcgqRqpleZzOruH5bCTScQfVGAoyne4c3MXXM5rtCCN8WgSE/GkLoWQJMbrehmN6+NsblXpKN597g84bFOZBykJckzB6vIR2I2ZCUilNQ4w01VyNqaJ4yxfFMbK8hDCcQty3y+TKMCYiuwmKuJo3FePPBHkrtbeswzt3Q9xAVkoERYuEAR0KaVCVNLMlsC9GpNGmqsqEzZ6GIGf1TzuCt4zzzyFg97D2FTdh9lafU0fDr3zA6wmFblYZG2MoEWewL12MSYSRnzV6UIwYp8tPi4MLcAXHdX0JuaiotSeVQP4UYaKDio2+s8M4+nGY3QFjFe/h8eqBvHbpSV5gTes/B+/XlgqWqStlsbprz2o1iU6QKFih/yKdpCH2TNverU28/yrnVfxzZttqFgY4ZNcFVfxxKrLvM769jcexeMUq3Rwja8V4Dw3ADeHay8VH7L6nn3dFBl7eLAzzNEwFjPzOS3bf6Z2Cjv3b4aFgh3LDRwtauTg779SI+Ey4XpmwvFRwZIOvexRbdt7J5SBYCwzbjKw0KFgWs0+H3ZvTQTMSmEsq/lkI1/K9AoSPWWeCVKcuswIEaDsxsxhN+JJAvS4H8wFzpsy85pI+ge02VuHdh+/LrwCYCwHsF/0+cgdd8K4ASprijhtKQc8AAAAAElFTkSuQmCC", Hg = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAACXBIWXMAAAsTAAALEwEAmpwYAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAO3SURBVHgBpVZLT1NBFP7m3ragFlJQaI2iBIzRhBKJic+gJi7cmKhrdOEfUHTrwurOuNB/oPERVyYa3asx6sYXjQs10YJghAIWKND23vaO58zM7YNXMJz05MzMvfOdc745c26BFURKGSG9SvqCNCUrkjFr/aTt+F/hTQZgtXJnOUdiCfCLZBKkEZ4PjDp4O5RXdtbx1DuxsI3O5iAOb69Hdyzkb50ivSaEuL2sA6bDgCvARwOzGJsroWldAA11AvUBS+3Iux5yrsSfbJH34PrxZnQ0B3yYBDm5tsiBiVx5v/cpi6dfc9jdGkLAYlBLvRNdD5QkMJFTO3iTcpbKuDi5sx7nehp8uEt+JsLnnMwnpuXe51k8+5YjCkKEa+lXhEB8E7A3CniE+3EM+DKpNqoM2H6fKODMrnXkJOzT1UNOBi3jkamJ/PhbxIOBeWzaEIQjbRQ8S6lD+j5tE0VC6YdxW60VpH5W8ARawkHcT84jSdSa87ujMjDRp3hy7vEE0vMCnRtDihbB1FD09ANH0sIU0TlnCtpKnT6pR8bDj0kH3a02bp6I+FQ18cmc5lFy1EV6jvBsG1lXoC4gFtXYrxkDulCkgFMUitLkWFFlYaqrnx2c4tGbYUrN0lFPOwKNKvKKB2kOzLeV4tCzWZcDsglD4u1w2cFRznwPj35mioYSCwc2AzMFDZQv+iqVLRSr17ROU2y9W6ACYowBysJIu2UOhOpdKvAOmh1vA270SuJdIkfABapNpwRl8yVZtvwstsHDrSMShzdLbGvUFTfnlolsD9RwKXSds7Dn+oCkshSqNJcTpyRQpIPm6GWZwAqJ7GCQPYVDFtJ5gaGswPMUlWJaYDUyNg9cfiVwjCgazuq1WIPtP56yjAN0R4N6iYL4kMaqxdXtCS9HzAJl0tlUJuYzO3jFo0NtQV3TaxXCONgW9GdP2YHqGd3RACmnJpcsdrrcaKWL1tG4IjqiYUGXrZzBE4sOh/vGS56djdfp/qI81HqZc4Er+zxc6PGWgdY96Wrven/pbnUvOk86xZ774iFz/WsBjm2VyOSB8ZzA/tiCh6bh9XXVoaNJHbD6NvCgul33k7nF4wdfHDwk1Rev8toOuiN5ug8j2Vpw7kN9XSGc7Sp/fGrbdZWTBHRnxc8pD9df56kMqcbLr/nNokJMvMUm8KBqckb4q5ZA1Y4F2apMVPvmeTJdwrvfJWolnr7tJGEKNE6AB7fY1cBLfjKXFPPRvytXLy/kGv5d9BuATBVgyqwlSCMrYfwDSlA7gCpnwKAAAAAASUVORK5CYII=", Vg = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAACXBIWXMAAAsTAAALEwEAmpwYAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAL+SURBVHgBpVa9bhNBEJ49nx07ke0ARooESCmgoaYn4gWgTAkvAC7pHDe0pEUgJS+ABBIgUaAkNOQB0iESF5SJ/x2ffT/DfOtd+3xxkJ2MNbq9vZ3vm5/dWRP9R5h5VbQiuid6whNpmLmy6DotKjAyAPPKzmVEagb4K3lsia7i/fDPgL4f9fXz9ZOQ7t9mcl2XMpkM5XI5ymaz1rQpWlVKbcfx3AR4xYDTYDCgN187wcHvwC3lU3TnRpryeYAyRVFEQRBQvV7XdqVSCYRw6K1gFIWkeoEg5jm1Wi3qdDpUyOacB2vGQ6WI5ec4StTBekqlUprs9PSUVlZWqFgsYuWWfGvZSByb8zh4r9fT4fuRQ/1AicrTdwCvwZO6tLSkbWBrpGJr4tgJ5Hw4HGrPkV8Y+pxigHuaABEoCWSkFhxR4JlOp7UtUmvqt6MJDNNzvJydnY0NADIQ7z0BBrgXCgFP7wlLBoUdtN1u288b2OaowTNbVOQVO8QaD0Oic38CGkY0U+Ikvu9rLKRNpAy0pxh5njcO2xr4keK+z1IkS8DaCXwztZsisvbAMgSPFU4lcrb5rk6HtUiMhVNJTl1FWRdEZMBoPI4L5uFEIOExS4hRSA/XFH0r38LnmmsKQn8bPKq5AfFDKLblZCdoAuM0G414RAJD/FgWtb0x/7p70Sc1db4jOEVziLVJbAQ4V8OgkHNoRudYUJTWuzdTdqKJGuzJYKPb7erqx4v88qMT/DyenPYPm0yP7vFMaBQcGoahLnA+n8f0Ptw+wAiHK7krripmB0E+g2DbEuA0XocEtsgAsIx8ciQVaLP7eFteXh6HughRfH2hULDTu4JdszvwhWgTEaDJTcAXiwZ3g+kE+m7AQBOAyU4gCiychyQeLWxga6RqMCc7BP0bzUmGFSyUQnEu03Molqpk6mzvQtS2h9GMWy3pVdlc6lp+Hftc/XLOm++7/OOoxc1mk6Xvs/R/lsbGiT8CZZpHzKW/y/PLHl/j30XZADRigCdmbsuk9VL5B1Z/PHQwGPntAAAAAElFTkSuQmCC", Pg = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAACXBIWXMAAAsTAAALEwEAmpwYAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAARWSURBVHgBpVZtTFtVGH7u5bZACwmgFNgCY8pgFEiEyNA/E8PUzKgbEb9jBvpjUX+IWdQfaig6lviVmBgNanRT4+ZHnDrjD+MHTJclwxi2dcVFHKUQ5mhn27W7/b73+p7Te0sZsJXsTd6ec8857/O85z3nfU+By4imaSWkA6QjpG5tQQL6WD9pLVYrzEgHyFX2rkQkLAP+NDUO0hL2PX7ai4oSCQUfvgvN5cKL3a+jvEjC+jIzNq2zoKmywDANkg4KgvDWigQsHDo4Dv95Fj8ddeOBVitqvt8PsaEBI+s3Y0oqQzypIprU4A0nmQ2e77Khlgh1cRDJ4BIC3XPOPuacw29js9iZPwnB7YZv6734aEyGayqIm+9qh5a2YEaIEZknEMft9UXkTIkB94yxE8GIOYsGC4u8+xUk6jbA3NgIYcYDcVMHjp+5ADmu0GIBR1HFgdMcarpL7T/nY7hzY4aEhauVSKYNgr3U9ConTyDY0Q5TSwskaxFnF42tMiRBwO4XDmUHFVH/OcJXEUkomPaFMdRdh9brbGxylAhulXTve9lI6P4e5FErEbQYkQmUY2YiyX4TisA7LPbRwDxe/foRpCzkcp0K6YgTeX93Au/9zJZ3smsuUWc7+0olkxAGXob42A6IQ3sgmkwQwmHIHZvhPBPAOX+cE8QVLeN/IqVhbksPcOpjyE0RVFWq8IV+ReG/oyiu6mRL+lkEtrHepz9MYuJslO/A5Q7h/flyCJ5pWB/chhpRxhejc9g17OQEhsZSKtZeWwipawfW+Hth+rINpsBtiERChg+3MIIbWO+zH6cQklPcy0AogefeHscdrnrMDr2Dqmd34sA1x/BSbxPiKSwo3aCB4nzsKS7EcMP1iK+pA8xtGPhr0iCoZQT82GfnZSgC+W/O59dQIT3i9OEmxykMP/kB4rEkHn3z8UU7iBJBX+MWPCxtQFdJHUrNVlRaSvFQc1eGQGB5znpPfeMF3TQ61DwIooBlknyJyL4ZHDy0K32fCEVxnoRqs0Grr4f1q4N8nB3yNGOymkUi0HLBXSTB7u2wSGZOwMBEIlC678lMZwjsFWZ4QnGeoLmSWMtrcLrlblSXScjX8lA2dgxaUzM+qc7HE+klx9kZHGa99uqChQxdhRyYLMb4iSmY6FqrlHAX/efRVlRtTH/HCHjNaKId2CtMSNeY3An8MQGf/7cR+10p+KLATPgiOuw3GtPfGqVihJrOCW8Cg79coEMW6bBzO+i0aDyzNUXFa1vLtHWlecxwH2H0GaWmjzRot5lxX4slHarVRIsXPI3b6uD8bWBTnIBVPWOgp9lKauEe6aXyCuDMe5Xb9LRYjdFBHXPJg+Oghj068ARTeOP3MHwRlZfptAiLCAka9nITgRfCbjNlgzuQZXGJQ1q/TsIzfMKbxB9zCXpUFPhkha9hOdNok9C+1pwNvOyTucKu+aO/T8tdRrSr+HfRrwMEsgDd+piD1fzLYfwP7bptsMx9LHAAAAAASUVORK5CYII=", Fg = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAACXBIWXMAAAsTAAALEwEAmpwYAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAOmSURBVHgBpVZbbxNXEP5212s7FyQ3TXBpCQS3qarKXCSkVq3UNmrV5/YVJQ/wC/ArT0n4BfwAJBDhDSRuDzwgERAQJF5wLFAgkIuIQAlByfqy9tq72cPM2T3Gjp2QiJFGe87szPfNzDl7zgLbiBAiQTpKOkm6ID7JemjLkA5gt8JBIcBO5cJWRFob8NP0GCNN8NxxHFQqFfn0fV/6RCIRRKNRdHR0IB6Pq1CLdFzTtHNbEnA7QnBML9ewT7fgeZ4E1HVdKgsTkS9c15VzJ74XqZ6IghkjknE10dtkjktPizg7aUlAztA0zSYSHrPyO67kzJ11TFCMIuC1aSII+xeAZ0u4NetgsDdWB/ycHuqJ4doLh0hKCndUrYmqgFuTmFvzcHm6jN4uEzVfh2EYEoBKblEFzj5VX0Nft4mJXBk5am24fhckQch0UtZGbdF0Q6rjNwPLBdOa94R6p5LhuAlKMJQh3uZcwf88yy27eG9TEGVVdDWZ1WZxaiWUq7YcV91q3c6+JYrh2NyKp6pgyTDBfzx6tERG2Q4D+RoRbAQEFaeMq3fPo0rAq29n8fD5Tbmzrt2dgO0EPXfIt0AEoFjGmFqqE/zFBMd4NL/uEbjOJcCjjAphgnPvnuHbvgMwsIZk9zMMHezEzJtppPYPIvtySvrkCa+2oVqmY5qqCGVADxcEK7aQ4OrL8ITcXXi7+gY+Z1jegw3Ph7U0hYI9BzMSRalUlD4b8vvjCgK1XdFE0LBqyvGTSRcRdMY74JZXqdd90L7+G68X5/Gh8I7a6KBVNDQCMMEiD7qjegs4y0+po7h/+wqyM1mU9ePIa4dQpN0w8+Qxjg7+2gpOFXyzx1AGq05wJGkGJtEc8l3vQaR//gVLyw+wYs0j92oSq4U5pFPH0Z9MoZ18/1X92Mjy6D7p0O/9Jq7Pum2OP+Cff09gZe0PJLp78cOBNI79OISBfYNoLwK/9ZtqcoMrOBdUECE1pMPmKliSPfsRi8ZpPbq2BU92aTiyt17BdZ22Fh+z93g2cjjGWwdCMgjsRmQMxY7+2alMFwl7Ue2iU6QWMw8fjkrHXeGLAHw4HUMqIRdY3g08kATMpAwj5DScjpJ/cOazbo0rQvVlzAgnF8h4iNly4YwhOFmxYPl+j1bU+XLZfMg1EvC9sFDppL4bjeBj2CarTHipS6FbS9i2LQqFgrAsS2o+n5c2frfpRyCDnUh46V8UO5dJ8QV/F5kQYL0BcCG08fWY2A7jI+/0UwuY2rZ7AAAAAElFTkSuQmCC", Xg = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAACXBIWXMAAAsTAAALEwEAmpwYAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAOMSURBVHgBpVZJaJNBFP5m8qeLqU1dsC1aDUJFRUVRtDaCHgTBi8tNsKgHb4qtuIAItl5EBBE8CKLWgydPelEEV1ygKrgVxfbQ0pxqoYttkr/pn398b/6ZNKVpae2Dl1ny3ve9ZTITYBpRSlWQXiJ9RdqlxmXA7DWSxjBbYScDMFNpnYpIFAA/RUMzaQWvvffvkOl4Bq/+G5Q/rG1keClCpWtQFN0Np2ybdR0kbRFC3JiSgMthwDWwe+M6VCIBWVcN0bQUUpZqF99PQmVT8EcTULQTid0iwtUWpplIWiYRmMg1u3vtKjJ3bsPZvIWiDUPEQhDHI2xlXBTZsw+REZHndqBowSGUVJ20cE02E2FrTsMXLguDj927i/C6dZBsQECi1gFORHLRMLgdyZcyAsZS7QgvOoKSypO2XJuIpFsaHy5NRbb9BzJE4FRVQqbTgbqkGVKkicCFEC6k4DWP4+oUV2Lsz014I20w/WvliWOiP8qL9JEGUKyggkCmUkEGuma869CcSuMDE5uoiJSdHKgQkCES0/hdfMzZcz+vsh/eAYkeDSoHBiBLSzR4QBCmWjgGUJheBOUz1YJUGToEAl76I7xkG5yIJmlkr3361Dx5QpFTIBROf18fOqNRxMMBKEaJwHdyDR4/G0pnAGq2UENEQP40zw6/sAQ72WujNqX625K8TSbxKZlCfPFCaK9RjwzCKCxEoqg38LQpN9xPttkvY45pCJUnge/ZLC6OpPHZ8+BSYM+J5EJ5GQ6m55NXOKAXKg+b577JJAiOSbL+3wkEpraUiuPgStk8bO4f0nsnqA8HnRC+D7s491tgWlHm2PoKS4pdPKgNtpmgm5lQHuU00E1ZHC0pxoqQxC+a/49UR2rsdDBHEIrHoX62YxNlcaC4SGfUk/UxW2G/leVr7fIr9/UNz+TevXqHI7eyPG8+U+GuxKv32OVjRtB3hqzfAVEfh8LcpKp0GTYs2m6XjyTdF3xvvOZV6Ox5TWB1NqIPFH1c3tpqG3c//y46RjrIGUhDMjv0YDhc24TY/NX8e9VvA+9pAmbKbZw5BzHTTIwBR8/gDatO229aDCZyXTT3d45EvnwNVVMzTqImKwOvX7gd17Y9RAMR5IHnXrVCT2YjzPWt1x/eo/fTU1yv60RvOqFtIk6UGlmH+iV79Gik4JNZOPPg0b+vZi6v1Bz+XTQagIE8wC6z18x3/nQY/wBcyP4NJKpcjwAAAABJRU5ErkJggg==", Ug = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAACXBIWXMAAAsTAAALEwEAmpwYAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAM5SURBVHgBrVbPS1RRFP7umzfWqOhARQ4VWVakgbUoKyeohRC4qT8gs1q2aZJ+0MpxGYG0aJkp/gFhGyEQLNCyVqUWbkJJhMDGGWt68/vdzrnvXp1yNIc8cObec96733fOufedO8AGIqUMknaTjpLOylWJa1+EtB7lCi/SAJuV/vWIRAnwWzRESYNs55PvkF0eUaN0f6p3LP8e+AKNqKhtg1192ixNkPYIIR6vS8Dl0ODIj48hHeqDzC4Q4E4IuxaWFVBLXPcXZMGBm5mHJM9i6AkagscMTJRIeoxhlYgc6UcP4dzoJEA//JWHYFfUwvYJWCKllOe2vwr+qkbY2/fjwXgHBj/3rhDw3hjDNjUvBs8960NF83EiyEEIVi9Xk64sGi0fcCB4FM+/9Cnf1aYuHroJc4gymTMZcGmChekpZInArtsNK8XRpr2oQSNSRJAmMm+ufMLTjHSwq7IOgzO9+Lj4Fnr/+lWJdPTX2Eh1dqiUfARlOQ6BOApIKPCMRyJZjS+lfBny+WwbwhKKRMsFPuacwWW2Cm/GgPmvalOseJwycLyIpQckKEr8DS69rDJuGsnCMhEAk7EJkwVLhPEuqVMzPEyRU/RUcGspBkEZMDiDwjWaJnX0mNaEDhE4+JFb8o4MbdT4t5eG4DxX5ITaMKq/fg5kMhCxGDkD+qCZbS0lEonsEgpunvZHcNEx+X3CPKy39YZQeeYJXEAYklyOokx6BJy74uCjVEQmee6iIPOerRcn88t/EKw+EyU+bQKgT7g44LKE859Ts5pabJWEqvaZaWKFwBcOYyuEK3CwpsmYH5jgNc+s9nZshXAFw6GLxnzBBKr7Wa3nIFrD5ZZ4jdRV7kXzjrPGHLLoaHGbfcWW7+59RWC0HFEHin66Tz41roHiXnSdNMEZWJqkPHRvuHL4NhpqVNtWdwNPFAEzrTju3IMwmch/Z6LekR54x5Eu4+7RmGsunCi8zgp8moJbTW09v+C1a3jfiSyKWs23t2B6202q+5li8KgxSl2ZEU2ivnCZeg84I9Q+ZiCZTKVZAwROAZVtEIEWs7TklblO2urSH5Cbl1H5H/8uIhogXgQ4q318PQY3wvgNZuTzrwt/WuEAAAAASUVORK5CYII=", Yg = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAACXBIWXMAAAsTAAALEwEAmpwYAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAStSURBVHgBpVZrTFtVHP+d2xbKS1oYgoxpCUgyFxj4GgwWGZrg2FwW9Zuw4GNqfA2mfiEmK/uyxUh8LGY+s6ofzOQTfhqYSJcJ1Bm3FRyvbdKtwHiuZaW0pb3neM7tvTxGWWb2T/859557zu/3f53/KXAHYYyZuB7m2sl1hC2LR51r4GrB/xWxSQW4Wzm5HhGJAX6QD1auJvF+cboH3ePtyji/OKesyUrahHzTFmzPrkZxRpm21cu1mRDy2boEIhwquAL48+AXmFgYhdmYgZQ4ExL0icq6QGQBwYgf4/PXxS4cKfseeZxQFSsnaV5DoFqusLddsTHbQAvZnP4oDJI+uup2X1lUg5EARuYGsSe3FvsfOaR9bdQ8IVrM+XBBhCUw3Qp/KJn64wvIpblzGPD9henQBFllDlsySiUiGLrpxPN5r2okIlwlnMSlEZzkQ73T6WS/2p7Bu6+XIiEpE4gvIjS+FFM0lZ33dJErvl42HrhGlpxnUSZGGTfKxz0ZQsuOVmyN5sXOCXYS1foRMXOppBDHBocxs6MQ7+w3Y9dTieCLwCQTqKEQclwpG5PTcHm+jzqmO6SJwChRXBA/Clz19KMovVQhUcUsCBr4w6dy9x8I7NsLHnE4MjJps8ykJ55OxHv1ZuQ8oF+OvWRmsmErkQ3bcINtoudvnkUPJxtfcGFqfkwh+qT8F82LZkHQyR8qQx81gX7zFfTcYl18PIjZjOOBEH4IheS6epP0xku8ioxS1GItGVIKjRielOS4Cno9nAbHtJ12TZ7WFWWUkrcKrdEwiVMpkhvc9xxIdxd0nEASew0GwGiEm+Md9QdwNk3G4YMZ8ovPJutwezmxIChMbFFXjJChBjPIJXlZm8VHlyBQMhV8rBiS280JoBAsVaWO43HStlCYfehfIGU1yTjSuAEP5ejVJFOFRDxSnmyZv8qShSXktysQS8FVSp3EONqyrAypcoSwcARjNwKUsbCklepKEQXBSwJEil+CEQQurhbcl8oH95pNo5TizVt+9s8GwHYim1RuS5QQS6QURAwVCMXtho9slLO573zWK6kE0JWXrzach+7YQpBVLM6j+EAKcZ62gIOvWsMIB014gQVNx+FKOsF+8maxpoHPadvEKS1PF4UHZ7hWSjU1kL/9Wpk9sxjGyz4/KShNoPajDxJLjkGLogIqJ1SzSFwVhkJ6XPCcI3/OtrARXz9RDjZl5MCWJs2GNpFk0TVFJcG9dw97u+M39GUwfNmciZqdScugxioaMe6WhoNU7pvrlexTbXD7Ly+njEVznmnciB+rerTZXF72xMtJ7MKLq4c+ICUWB7O9kkbMplSEjbsEMK6F9NQ+00n6vB9T3i50sVLA1OZnffw7bcq2shdZoDY72XuKd8hUuOQ05pj9HU5Plzzsc+pxJ1Gtr81vQF1BjGankigtQzx3uFvR0ve+UrZr63Y1sGZ97cONqOOqyup2vYLEygdx6eDfW/2w/v0aJoOj63II4KL0MtTlNypNThVxq1m1l1hXZoNKolyZvbMOdE+1K4STgeg5SdKnKoDb769eCRzzylzHMuXSt7G7l052D/8uGlQAzwrAEXXOqpb5uvIfgXa7QhN9cSIAAAAASUVORK5CYII=", Gg = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAACXBIWXMAAAsTAAALEwEAmpwYAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAPaSURBVHgBpVZdTFRHFP5m2RWhlEVqoSXBUlNtWpRKlZpIG+xTa1NB+0b7Yh/689Ri0sYn4xpftH/pQ02btglo1MRojLyoMSqgYGJWogJu/GfZRSCyyLqs/O3eHc+ZnVkv7mJQT3J25p57zvfNOWfmzgJPESllAek20hbSXvlYRrWtgbQMzyocpAHmKo2zEYkM4D/S4CEt4Oe2zgE0t97BWRrDY9PKp6zkZVQsfQV1axejZmWJCQ2TbhdC/DkrAZdDgyvgnY2d6BuMoqgwFwvys5GX41J+0fEYHk5Mo/duBJKej/y2ThFq8RDJ9jQCvXLFvuNfL/462IPVy4vhdGYpNyHYB6kxGSwxPhlH960QvvviXWz9tsrAbTaZCFNzGi5xWXb858Xfh3y0ooUaTWgv8WQtzURpp+8efqhfhq3fVJlyVRKJ3xA00rDpyo0RrPrqEJYveRV5ufOSBBpYJvPQc2mjkxyPsegkrt4ewal/ak1fWongY6FX38uWt2oPoG8oigoioJdJGGFgH4OnZyLV2HVzGDXvv6ZItCxw0s8G01QGBxy4H5nG/GznjAzsTZO21RuSqVhcxbZ1DiksnUUDE9TxrLmtLxlOoMPhKRS6hcri7TfysenzJQQwjZ7b5yCyC1BZVknvHNh9+BqCalFIbmGyMWlzq98Q1LBlBc+6bo6oFbBOxRIIEUl0Iobc+U58+elirK2aB3/OYdxyNaHqA0vZFrqzabvGle/ElJXK8eylQZNiGSOqA+UfiM6oRiyeQCQaU9vw4WgEe/84gfq8Snxf9An2/X4akeB1Ao1jjM4E+6YKSFmbA8kETjO72r8Tjv4gsnSdU1yvV+NM90u4cNeH8lA7xgMxeN2rMdy/CicHdgN3OlLdYLXox4qX0qxe2ZnAz0zId9MQxJPyIBSA98b/+KjiOEJDeRgpSWD9ihZc9AElExHkIF0cixaZaThFkFVdDenrSScYDiC/2wGnayn1UKC4GJgMTiLY74V/aBDvZCAQ5cvM9DKfAw9NtiXOt8PaWJdeojmKvUTOo80Qaz5k82Ym4CaP8lN8Yy3E+Q61l56HgFudKC2F6+JlY37TQXudvxut/JT185bUSuTcsWfEuPbsN6FN/C1y6IevScNiTTUcmuRZRX2rftoClJdz8upumOmQvP6UWL/uklZRoUxolU9Rfs++1i+77DdcQ+ZVUMNTLj1d0lr5XhpRwqYKeMN6mehot4N77JiZrkxm55tNnXBJTcfxY3QSuyEDgWSAm84M75J1n4HLqiXjlTlbJnzpN8m5S4t8gX8XDRpg1AbYq20evc1nlUfkgYmDABtHTwAAAABJRU5ErkJggg==", Qg = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAACXBIWXMAAAsTAAALEwEAmpwYAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAANzSURBVHgBpVZNbExRFP7ue29mOhgzaIkWbVmIRkJXrZ+FRLBkLxZdsTMW1qaJWBEWViw0YUFiQdhoSGtBiMQ/jQTT0proj/4wM52/e51z332dv7Y6cZIz577zzvm+c87tu7fAIqKUipCeIe0jjauiTBpflLQFtQonGYClyrWFiMQ84CfJxEgj/PzsSwYP3qe1nUlLHbNhtY22Rj8ObQ+ic0vAS50i7RZCXFqQgMdhwDXg5Ue/MTyZR33IRiRoY1nA0nGpjEQyK/FtIs9JuNpVT4Q+DyZGJN1VBKZyzX6xdwY9T5Jo3+SHz7FNZEWzyv1JZQv49COHo7uW4dTBld7bU14nwps5mVc8Fga//jSFtiY/vbUMsFFRTqAgdQdCSbz9nkHX3uUeCY+rnUgGLRPOo4kMJLLy0sM/WBv2IZ235nSWbU5g1qhe54X2z5qYdWE/OJdHa/bvmu7AVB/nhz3nfmJkGtjWGKDiLV21EOXVK4XKNkgk+SUGRjLoaHVw68QaL2CVQz9HeDU4lsGORon2jQ7WhBR8dunYVfmOKbM2+6CUQIGmtWWVBVnIYYiwmhv0X1eUO+ijxb7p6Wmk02k4jgPbtrWyvEsIrKDY1tVKd6OUaz+PA+NJoGOT0j4pJQqFAvL5PILBIMLhMKf38xx28opfWDQWy7LMKNyqb74E3idQ5mP7lQheDKFMmJjzc7mc52rhDnTW6OjoHAGrEFXfIO5/oFFQ9OHtLpEkY4kiudcFS0NDg7ZWKXup9eRXsrixAdqxdaHiLiez1R1U5jPBIC945vNVfaFf4N4H139gq0Jns+u//UbgbK/QXVQK76ORKccQtPj9fmQymargE7uV3uRK2d2i0N5UHNECBK959Zh038RsAOcfZCmBMiwLtYvQ34KUFk4fqkMopJ13mYDPjDPN9T6MpRw8j0tzMoja8JX70TVFLDCWkTtUsOBzo5+fovuD/NkAc1oTg864cmyF5+gpPYu6SKc6N/uIpG6umtqqV5QbQNt6PX99N/BCEzCT5+AuTjKJOSn/yaRjpM7hXCPdBrPqwonBPVnxMVHA8RspDE/JYpgQRUJzDnW02rrrzlanFDzmPcx3ZUYNiXtlxvPo/ZjDQEIaMiBUJwjQxsE2XynwvFfmAl3rS79HLV361H/8dxE1AJMlgHHji5FGFsP4C3XlGTkG6VvXAAAAAElFTkSuQmCC", Zg = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAACXBIWXMAAAsTAAALEwEAmpwYAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAP4SURBVHgBpVZdbFRFFP5m7l1tXLCFQDHRpDUxkLa0xthanopGQE20GkV80xoNvqCWGH1R4kIx0QdIg0XxxWLiz4MxphUTtxpaanisbokgxsRu+yAYC7tduv9753hm7p12y+5qiSc5nb0z53zfnDPnzBT4FyGiBta3WcdZZ2hZEsFcP2szblS0UwCwWhmuRSSqgL/KQ4S1QX8XJs8gPzqKIo+0sGBsnKYmOB13o663F6Ge7dY1yXpQCDFYk0CnIwA3gOn33oWam4PT2Aixbh1kOMweAmpxEcTqxePaB/VffgW3o8PCRJjkYAVBsHPDnj48gNyHxxHqug8yFDJG14dKgapMBqXzv+DmF/ci/NYBu7zfRiJsznn4WadFg+c/OoGbeEc+MEFWZjIgoGAUyP80hbp9LyP85gGbrnuYJG4Jhnno885NI9ndhVB7O9zwGgMrbahrwpC79wCJBNTI1wbUEnn810tdQ/HCedwa/d6eywQTPOAGu+/TM6k9u+Hw6LKzzKQhyKTcxBH64ARESwu8zz4FOC16zYr2getA8ZB9Z8AS3K/LXG/wCXuomJ01OxZXr0BokGzGjLKtzYDT1BTkvZ0QaX9+yYZVXk0YX29y0sfypV/PPW4Ivhk1Bno3Yn4ectdDDLwVgssRirebThsSFf0O7tBxuNExuB8PQ95+BxOmgSvzxl8GWIFsR9CVdG3ng5SqC1GaNcfqfXLSb6FcjkqDg6T+ukzF1/aT+u0iUSZD3liUSCmi1ALlt7ZQNvDVGKnuTtuAM5rQNJSam11RjnqnUArq21Nw+vrgvfE6EJuGGhpC6fAhjqYVNP83Ss89y+dBS75aKZm0ETTDUqW23EWLzJ4NIsizMlCwmCI1MU6FbV1Uev8YqV8vUPGF56lw20Zjlw98tK/G0FhWdARxTSXr6yuq3eOeKLa3wvvic6izZ+EOHgNd+hNiYyPcI0dBqC5OU7P9mVwicLi0qjnIfa9APvkU5N6XILq3Qba2gWb+4AUH8tHeCnvTO8vXRkwTmJoKPVbFeNMmyIcf0Z0IsWED1NEjUGNRiM4uYO1a4PKlCh9aiTUidDPwj4T+yu7aAfw46feCVr41xdPPQK5fD/XDGNTp0z7x5s1wR06h2LrFkFtg3WjEPrdc/N0S3OkvBnd/6cyEKbXyg66lBT7I8m9bpt50bOmNWA7Lf2BMPxQGDlFmFQTlaiuoYKvOx2pemTv/+SNLYqPI3Ti4ln5UE16IWAsvFqMsp+F6olyZ6rX8zh3kcWrLJLKiUKqQaHb9svkdzheXx3cLTZ8DzcV9o/oGyJ4eOFwt8j+ezFqR6DM5SauXcfof/130BwCJMsCZYC4SlHlN+QcP3UEPtLQqEQAAAABJRU5ErkJggg==", jg = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAACXBIWXMAAAsTAAALEwEAmpwYAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAMbSURBVHgBrVbPTxNBFP52261iwZYgmmDCDyMcLBgETRRMRC8mnPwDIEpijDdbE/VIOaqJ4WxEiP4BoiYaT2CixpMQRcLBWKRe0BAKUkvo7o7vTWfaTWhJQV7z9s3OvPd9b97MzhTYQoQQYdJB0gnShCjIsuqLkjZiu8JBCqBcGS1FZBQBv0EmThrmd/v9O2y8fiWtWFmRPmZ9PXytbQj09sLfdVaHpkiHDMMYLknA5VDgEnB9+AFEMgmzthZGdRjmvqAMcdNrEOk03IUfFAMEnzyFL9KmYeJEMrSJQGUu2dfv38XGo4fwd56EaVkwCIWCINFkiICQT8D9m4E9N4vA5QHsvXVHw8X0TAxdczJTXBYGzz4egdXaCpMdCMUwvNkYCj7Hx22XHLLTU7CuXdckXK4TRDKvCUbJXHFmviB94RysSAS+YGWOoJBFgUm187Ogd+fPKs1kDhXjL/S6TBLBeUNln+Cetc52mMkF+COUPQFoAnhmIES+qPQzVAtwaMD+OgN0d2Pfs5faqdpPj0vcys4nYHd0wEd1N2oOQAQsuFBJCxSy15BCt3Ilc2wbdnMzHFfASiRgNTXxcJRnMEGNnhXagplMBn6/Hz6fT2p+J3A51EJrq0qbt67rwnEc2ERUUVGBUCgky8RVaOcWD5imKVUD5fP1AGnrHfcmwvHZbFZ3NXKJ5AfFGfCgV4qBlBIG1+qJazS9Dl67E9EEXmGCedlQpdkN4XVUksoTBAIB7JZ4CKa59Za0Z1UsYfTbPRg+Y8czES6ri4HIbVTRj+Q5E/CZMVhX1YCU+xuflz7mtvx2OUTuIzy05zDqKht07zh9sAafG5P81t8Sk17l7x0Pvsg94qdGdPgYn0V6Fw2Qpo7XnEF/cwz5Q2Yb2bP0UeyR/cd47vJu4D5JwEy6o6/lpiQR5ZAoH/Zl8H6KVTKkMDddOHEyfOng++os4p+uYjHzs+RyMLCc9dEY2dNe8Lh+KXZlRhWJ/MJ50T/8eiMJFzNJ6RP0hyRg18GLXuCiV2aJzOSlPybKlwnxH/8uogpg2QOYUH1x0vBWGP8AY8bxXnTW11sAAAAASUVORK5CYII=", Kg = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAACXBIWXMAAAsTAAALEwEAmpwYAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAPeSURBVHgBpVZLaFRXGP7OuTMmwYnM1GRM0iYdatVFSxNNabtQJ5A+aKGNbSlduGmp3bahULrSRC100ULFjWh8rcSF77duNKBuwoCgCEIkL3xgMBnDzNzJzL33+P/nnjvJ6IxE/eFnzjn3/N/3v845A7xAlFJR0j7Sy6Qjak6mzVovaQIvK2xkABYqB6oRiQrgv9NPP2mU5861qyicP4fs2vVqYKJe7D81gkRLPT5YuRQ9Xe8g2dkSmKZJtwohdlQl4HQYcNydmEYMGS/8w3dSNjbC+fMvdTYTF+ev30cmV0TWLmDk3gwU7T3235ea0Eg/kWwNJrKC59i+Zwj/7BuCCIdFeNUqhGIxWOEQXA/IzboQUiKyuJZAG7GiLYavfjujbQICrk0ZgcmfDz4whF1HbmN52xuwCMjK5mDZNqSrUCTN5j0iIc27eqwoCe+/24Cdh29pWyN9QU2CCDg10VvDU862PSk0NURQLCpIIpB5AmcC5cFxKQICzRK4JjHKRG/GI2DbwdR9mPod0ASG6SeebPjjQojihyAtOEQghJK5HIRNSvkpOgzmGO+N2q6eW1YIbLt9IBVE0cVtHmJcnjHz2MOMDmpqpoBC0SMiaHAtrksECjaBqbm2CAqI2aKjbQdTDzSW6a5eJujh0aPHGfz4WUJ7X7MojPaVMd8+l/ObzXWw/K0IvvikCeWd5xPZFJk9uxQeRTo5lQk+J5mgg0efL8up7q/rEbZCinMvZBa4M0mWtk80Po7uD5ep7k/rSo7rJicGQbnwPAVP1VGgVChMCfM1wd/09nxnB+TEBCzhV750QCwLOlcaUJS7zup5+pdBPM4kDdzWVtSlbuhtofnh6pzjGdEeLUzEPA2ECUY5lOLuvV6BWtHS6ZH+JkpP3bff6FYubPvbcT/6WFYD5wgUpcmliERNjaj1edIlgkvpqDwxOEatKXUoa9vj2Liu1SsBNLfI05P18uy1e6gq5CBVAz3JBL73V24wwSBpV0NsMQ5fGvMDFL6jG9c1ltnfHE7j0MWx6jHocir8suG9YPEkI+nbL9nZjOSaprnNryhvN0c0lpETdFgFX7NXeLb519WvBc62R//tDiYHCXs0KNrPpOnkmmafxLTdwsn89LBt+wp9beu3gQe6TZmJjgMv/L9l02ptMjye9lsdFVq3CviWTR3BIj88oyUCQ7KDLyca9jHJ9EyeTt9MKYbn7h8jXLfNBDxXv/JX7ZmDJvix4PD6Yktqo1hSK9XxUwA9mSIeF9EnYV3EaGQR1hNgT7JtPnDFJ7Ny0P6jf1AtXC6r1/h30WsApucBjpi1fpPWqvIUA6pgRracnJsAAAAASUVORK5CYII=", Jg = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAACXBIWXMAAAsTAAALEwEAmpwYAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAOfSURBVHgBpVZLaBNRFD1vMkma1DTRaCot1opaFD9UFL8ggqAbF6ILFeyi4EoQGxdum25dCaKgCBURdenCjaK0G0VdKIioqNjaarXR2qSNnUwmmfHelzdx2qaS6iU373vPuZ+89wL8RRzHiZF2k/aRDjh/ZFzNdZG2Yr7CRgqgVumdi0hUAT9NTYo0xmNz6CmM9w9hDj+Dk5+Qe7RoMwKJtQit3otgyzbXNEPaI4Q4PycBp0OBE+BT5B5fRnHyC3zhxdBCUWj+sLSwC1NwSIuZYbZB/NAl+BNrXJgUkfTMIlCeS/aJRxcw9fwGAk3t0Hy63CTEzEhJqbUtA1b6HULtR9Cw65S7nHQjEW7OqXnBaZlk8Be3EGhcA41QhXA8BKJsQeg8y94zkU1qfn2F+s0diJRJOF2biGRQU4ycmpiVfktpuQh/wxJopTypUW5tE6KYh6C+bIt5tZ6v7As0JKStOfQMqn690iXl/QAP0lf2ApRz9t4nvWeHRcVxlRwZCcegPjKKEmlh9A18zVsRP3rd3bxQp6+D3Cv8HIK9eAP0xo1AfRzQ/dOq5FQGDmYJT5WK0CKtsEo2TMIKLmrhlS6OoI86e7LZLAzDgK7r8Pl8Ul0xCzZuPxiCZTn4OmZgWSKMY/taEAxo7g8Etm2jVCqhWCwiFAohGo3yUj/vaOceL2iaJpWKI41cuXn/E3ZvWoJwnYbt6+Nob4vh8p0PswJhO7a3LMudatVVQaQHvDgtckXyy7Aw8n0Kdx+NIJuzcPLwKiyKBKY5IWTNxEznWjXvBm/rlUjYj7FsAT9IA34N0Xq/7FeLYKY9RzAomch7r0deSY/nsX5lFGeOteHbzzyWxusq+a8mXEclmUqRc7kcTNOs1MDriWGW0Ht3EB+/5NDSGCIADZ0HViAU/PNDKB86RxY6GAwiEonwdD8TpKjTPTL5Cb2vz0H4RNU01SKOzWqjc91ZNC1YzlNJjoXvjO6myHJk7O94OfakfC3Ml8MpH7jGumYXnOUOXTeC741+HnW0JdU98w/eqyPdveWqO3XNexd1kmY2xnegY3VSnX/ULmrvcbJd2bCOu/Jt4I4kYCZ34njbGUni1EKi9vBeBu8gWyU9CnPWg5NC+WbFx4nXSD0/gVHj85zlYGAZ9aoktdu94Cl3UO3J7FIk8oRz0R+n70nCUWNY7qnXoxJwZ2K/F7jqkzmHZ/LRv+bULn3Of/y76FIA4x7AATWXIo39DeM320UwxkzwefkAAAAASUVORK5CYII=", _g = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAACXBIWXMAAAsTAAALEwEAmpwYAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAMJSURBVHgBrVbNTxNBFP/N7ra0xYSPhCvBcyHB4ElMiB656H+gXow368F4tD0aE8PZqBD9A/xK8AgmlCskouEGwhXsUttSuh/je7Mz29XaphUfvJ3Z2Xm/3/vanQI9REo5SvqYdI10T7alotcKpFMYVNhIA/Qry92IxF/A79NQJB3le7+8gdanVTXKkxO1x5qchD09g/TiIpwrV42pS1oSQix1JeB0aHAF2Fx6Bnl4CGtiAmJsFFZuWJmE9RpkvY7w4DvZAMOv38DOzxiYIpGUOgi054q9+fQJWi+ew5m7DCuVgiAUMoJCUyYSUl2BsHEKf/cb0rfuIPPwkYF7YCIRJuc0bHFaGNx79RKp6WlYvIFQhEh6IzR8xMfzkDZ421tI3b1nSDhdl4hk3xAs03A72PmC+vUFpPJ52MMXIoK2F20mPY+joPvgZ5Ui2UX23QdTl3UiuCa093u8UpubhXV4ACdP3hOAIUAiAinjpNKf0DMgoAf+1x1gfh65tx/NpjGHLjd5FmxuAATOoFalAiubaXtvUAT/i5hFEeoN1llL2frlMnzC0lEUmOCG6prVVdg02uz5j2PqmrFEi4k2QzxGrMIQu66K2uZ0EZYmWGCCWbWV8h+n5OwM4vgYyGTINSvCbIeQzJOai9MmhO8p+5B1s2yeTjGBeqFA/S6iBEQknhepbSfaSPwGrDQMIxJtZ9E10C8kE3CRlTtHR0dqxSZA7nkhOl7ynsIwrEEQqHGCXk4oQmBfTSgVg4J2E8dxzNSNCdLpNP6XJAi2meCzIZDJ4p1DhoaGzPQ914CLXOG7EyoO5/Bf0sXOhVxwkvHxcbN8kVpX8Hdjne9yuVxcrEGiSdqMjIz4enkl+S2agv7YNRoNNJvNgaIw4JwadhKJjx3XgIH2aSiZKDL0gvUTSXIP22hwlpLG7DhwijTwoaNqUavVVF67RcLA3DHZbDbZOQxeRA+vCvpQV+J5Hh1edVmtVqXrukqpGdQaP/vjh0AB/Yg+9Fdk/7Imz/HroqABKgnAPb1W1G3eVX4BYBA6iXtqfawAAAAASUVORK5CYII=", $g = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAACXBIWXMAAAsTAAALEwEAmpwYAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAP0SURBVHgBpVZfaFtVGP/dc2+Spm2WpDF1COtSIxt1grU+tRbmmzj8M0XBiQjDV9Eqyh7NFMRO6cRXlW71oeiTTlBUtAxc99hN3VbB2fTPqmPdknRpbpJ77zk738m5adolpWMffJx/3/f7fef7zrnnAluIECIm9T2pU1LnxLrk9NyI1BTuVMhJA2xXxlsRGU3A35RNRmqMxueuncX08k+qLVYLymZnxy48ENuHofueQH9y0HfNSz1qGManLQkoHRpcAU7Ofob/S0uItyURCcYQttqVne2WUHbXsFxcIC+8P/gl0pJQS0aSHL2NQEeu2E9eHMO3l8fRlxhAgFk1q817FTUtuzbmCrN4qvcVvPrg2/7qW/5ODD/nspmhtExcGsOpf0+qiAxGGALSeGM4oh6UJjLw943zeD79mk9C6XpE+mWZdqHUxC4XLmLi0nEk2u9FRdiocBtVUZb9cn2slPpyjtaqoLUSku07MTE7hvMytbp+4yomHf0cDT48+wZsr4iOtogMiqMr1K3CvunmYTIG0zBR9mw5YyAaSKDg3ADnHFGrC4IL/JO7gN7oXrw+8IGfqrhMMA5S78pqFns6+sGZK436ZHQ2PDhwhYMQC6tMEDmNI1ZMgl/HQGw/HF6Byx2U3CJ2h/vgOFXkStcRb08Q7AgRPEu9ThHHcPcBWJYF0zSV1k+CrAHlmy0vA2tFiD1712ugW9qJ53lwXRfMsXzX/VSDfuqpBZkGUh+wfmCks3V8DCIUApuehvnF58B8FpuF/MjfcRx/KsV0QVQEtNgoRKIi/+ZriLBMU2kNIp8Hj8VgTk7W131wXxuCS7FG9sZ2Q2QrK0AwAKNYBAIWjPl5CMtquoPN/kSQVR2dmmbiHXoZomc3zK8mYGSleTQKPjyMVmKtk+ctTZAKBoOoVCpNHUQ8Dj44pE4Sm5mB98KLEDt2bIfgHPVOS308JMH596fAqKBXliDSaQjblohm7Uuxcg38niSMnh6wX36W90QW9Op/4L1pYHWVUMFlkIHFRbS9dAiIRIjgO7poVOQcjcqjH4FN/Qrs6oFhl2BQURNJBS7aQvJWklEZorMTbGkR/P40HT8YlSq43JEoFMBTKYSPfeLvoNf/Fk3RLsT0GXjPPaMK0+z7tpVwreZvp2Hse4imTsiaHvZP0WEqiDH0GNi7RyBwZ+Lbs3eO+ODqbdhoVHv+lHgfjwqvu0twrWILpXWy9Y6NNr5wI80jESJTN/nrD+E9+vBtRLxBFfDBpwU/83sjeKYRs9mTSezq863Gsi748Qfgwp8QCws1B3kPMCTvwZMHQGnV0vTJbLUTevRPiO3LlLiLv4sRDZBrAJzTcxl9zFvKLcNhrhfcP2XFAAAAAElFTkSuQmCC", eC = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAACXBIWXMAAAsTAAALEwEAmpwYAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAN0SURBVHgBpVZLa1NBFP7uzY1Rm2isb0G9O/GJIhRE0LgTF7YLf4AbsQvBuHElpAUXasUHgggiCgqC4iIiPtEbhWJ1YdpSW/HV9GFb22LfafO4uZ4zmYm39mFtTziZc+fOfN+Z78xkAkxjjuMEySPkFnmz88f6ZF+Y3MT/Gk+SADO1m1MRaZOAH6emgjzIzwNvqvHr4WPR2gMDcKhv/vp1KNq2BcUHD2Dxnt1qaj95paZpl6YkYDkkuABsP3sRqZY2+FYuhxEMwuMvEuPs4RHyYYy2tPIkbLx/GwuJUFoFkVROIJCZC/a20+fQefU6FpXshO71QqO0NR7pyBlOPnQotpNJjDQ0YeWRw1h76qSCO6FWoinNqYmzLAz+89oN+Ckj3ZWFpnJxE4hPPh76UItVx44qEpZrB5EkFMFNag4n6xtQXxKCf+tmeIUcGnSSgAbyGEniuBeCnOzJDA5hpPETNj2PYlG+LjGat0+T2TdzT3zDDmRIc/+2zZS9TiB50PE7IQ/PhIolp+WJhilBP4EzibQlBn2VcTTa04vgmUp4dB2+QAC6RxeZaxM32jgqkT8FdjYD/wgV384hlUrB5/PxyzATlHKUnufFgl0lMAwDHo9HeGEnKIlcrZS20OZyORi2jWw2i7GxMUWwl+u4nSN+oVP27ApI2ZsuCx3JdtEXbXsgWvZvQ19Q01ONO99vFRLh+ZlMRk01mUAcKM6AX46TgEDuJe7iKwEVGQGk7TS6RjsLBN1j3bjSdAG9qZ68nNJdyZmGWwbV/ki2Yen85Xjf+xZW1wuUrT2Ei41noWs6lswrFuOedjzC4/ZHSOfS4nkoOwi/JzBh9ZxyQgRSGrZ3vTUos/bjctN5kfG1z1dQ1xfHMt8KvCJCztjqeon2ZCuyThaG5sWzjicFUK6jtH7ephYFoWE6+lx9Jmoa/IjVC9ag2LcUMzUlm02F5gIHaCeSxZjqNRNw5auqqgo6zsbUbiovL1cEUfWbLywUCqmTP2s3TdP9M24qZoufLMuaM0FdXZ2t7gj30kx5SzmRSGTW4DzXdeOZ+Eu/sHo7GxIXOFsYUxSpQo2Ix+NCz38Bc91YWpdVuDEnuzKZPQJ5wmOxGKLRKGpra5FIJMSYIN1uBIzS0lLRSpv0ypxqJVyTW87MzXLm8O8iLAH6XIDNso8lDU6H8RtRF+C1Tu0TbgAAAABJRU5ErkJggg==", tC = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAACXBIWXMAAAsTAAALEwEAmpwYAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAL1SURBVHgBrVZLTxNRFP7udFpbY6CRABpcsNBGFz5WCnGhiQtXRn+AJGqMG00s7g3tH0ATdc3DpRuNKxMTdAEYEhPc0IURiJAYH6Gd4TFTOp3rObdzpy2FUsGvOb3v75tz7pl7B2gCKWWSbIhsgmxBVpEP+tJkvfhX8KKAoFWM7CQktiF/SEWGLMlt13XhOI4qfd9Xc0zTRCwWQyKRQDwe10sLZFkhxNMdBTgcATlmf0+j2++FLEtFaBiGMgYL0VyUSiXV7jRtRLtOapoMiWR1w9jmyTE2N4zsp3swIkI9YTQarRPhOhuPsScrr+7CnnwWCvDe1AkE8VPk47lhvF0YQ+rw6ZBwN4t1pbDx+SVWqyJDek+0Bxya5LyV88dzT9BxsBtF6cAQFQJyucE0eSQSgVF2EGvrwtrUCxS/zyDYvxElECjd4sbj6TvMCWEIFP0NVWpCtWGiPidCsbILw4wiQmvXpp7r4cuc5uzBDW59+TONX+4yWGDVy5MHLgcPW5IA20GwQNEiAQFveQabSzN6KM0C17k2+eOdyikWsEorcMsbdaRby7q65wDFPIWUQkLr3a/v9ZRLJv2d49o3a06Rk8/w5CZsElEEormIgrMClD1eSiICpeXQg14z2BD8dJYqb0UQZk+WKEByx7DUwffCpWyyuBoKGNVAYt8Q/BMqCCFYYJErh6LttTP3wh4WkfYe3VsIBc529P0PJxTMzlO6OssCH7l28ejValK2EPYGyGpx4PgV3fuGBdTpd6ajn7zox37ASWG09cA8dl53vaasEnzMfuDWQGqQc3DPDrAduha+yaPEvaiz6DZZgb0YODFYnd2ikspk+otfuI9Ipzq21d3AFSXASrrjZuqREuFFu70HPFYxIEbk8b4HeigbcDZcOBlUTlbM23NI+kcgpGg45GoF+F5IWLnauDN5Bk2eKh1c6gp0a8n19XVp27YsFArKLMtSfTy25UMgjVYQXPqjsnVMyH18XaQDgnwN4ULQx9djshnHX3laBNZMf+coAAAAAElFTkSuQmCC", oC = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAACXBIWXMAAAsTAAALEwEAmpwYAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAOJSURBVHgBpVZLa1NBFP7m5ubepFZTH60WX7WILxAUFB8oKoLiSl0IggvxB4hx58507UJ/gGDBjUsfC0HEx0LRVcUXqEgrihSLzcOkSZrbezxn7kyTJo1GPORk5s7M+b45jztzgT8IEfWwXmZ9zDpKdcmasTTrAP5VxMgAdCo32hGpecAvcJNh7ZHnSqWCcrms2zAM9RrXdeF5HpLJJBKJhDXNsQ4ppa61JZBwGHCMTVQxVcwDYaABHceBYtXrmCgMCUFQw1QNGFzViyXdcQuTYZKhFgKzc81+9UEBw89K2L7GQ9yNmZVNzlL0NzU9gw/fazizpwsXjyyysxetJ8rGnJsRCYuA33w+hS0rPZ51DLBRNZeAEIoxFIV4/bWKc/sWWBIJ13YmGXPMcglNz3veybWHRfSl4igHzqxWpK0pVIzqfqD0eMWsWZ7ytO2Lz1WY/N3QHpjdj8rDt+/jmJkhTpwPJxbjzatI9f4jD6YDwItFLoSR+zr5IXtRLleR8F2s6Ou1fi52+e+E9KrVKhw28XiBhJ3xdXTqoSfcfqN06E9upXqkJFSOYhLegh/TiRcs3/dlOi0Ex6UnZSiVoqvF7FykUAEnEiiyfpoAxgvA1n6gm1PUzRgLvHparL1gGYIDQrBNekEQzCEgSR63I98It0YUfpYUjm0mpLjsL91Tuj21jXB0U51A1ot9rVazQwOuSYiOo+M4mFOJTLJ/ELj7VmHtqhBnd0ahCTgcE0XgyEbSIbLgVolmQzjgNLI3tnOFsMivP/34BUyWWlc1htaKeDCmmXj3Dcyzcved0nF/P86J5GnOJ15+UVicJDwfVdi7rtVG3nwjuVkCOVsk+81yaD1hx2qFXxXClUcK/SnC1ROEbs7BQr8VvInglfSesh4UAsl+syz0DRC/oLvWcp+BN/TND2zFVJDIHXnRJMlZeZrM5VGdDk0ltRrKwdYVnx9UwisaU4TeZUvs8DqXk5LjiSfixcfJLpy+XjTHjz2DOhGKfkxw/3yKeiPD4caz6BxrbvdgHOnDCfN6onMh7YK23dwfE3B9N8iUJhAmO5A+nMQFITEn5V+Z9JpQ24itkSGD2XLhZBCdrMiWZjD+sxiVrlJtwWNcMUm+1dYsdRvBM2i/IX2RZ+1ly689lUolKhQKlMvltObzeT0mc00fAml0IubSH6bO5TH9x9dF2gBkGwBHzVjGlHlb+Q2F60gMc5OmRgAAAABJRU5ErkJggg==", rC = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAACXBIWXMAAAsTAAALEwEAmpwYAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAALpSURBVHgBrVbNaxNBFH8zuwmtFAz2UHuw9GJBa9WjtYLehF70Il4s2ItXU/HjIjQ5ilA9ipd+4B+gCAVPVTCtx6rQetEUFERtTDaSZNtNdnzvZSbJ5qvR9MHbnfdm5veb9+btzAK0EaVUBHUWdQU1qaqS1r4o6jD8q9AkDdCpzLciEk3Ab+Irhhoh23VdKBQK/PZ9n8fYtg3hcBh6e3uhp6fHTM2gxoUQj1sSUDo0OKz/WoMBfxhUSTGglJKVhIhwLHiex/ZAOgXW6JiBiSFJ3BiyycphcWMO4u9ugLQErzAUCgVIqE1KfRRJ7uoVcB8+qBDQ3gQIdP4YfGlzDl4mF2Hk0FgFcC8NHzsO3tMntSSzZk9MBJSaSDL7qbi0+Qj6DwzAjiqAFGUADLlBDbhlWSDzebAHB8FDguLqW9D7N88Emuk6GfdXp23EBCEF7Ph5fhtA3jARrAnTZ2ERWJYNFvp2q1FcoDKnCC6T9X57DX6634AI/hTTGIFLyYO6IoBmIgp5kI7D6fATCRMFSZR8l6iV+P6Ka4oIHO83uKV8ALT+XdsWmCKR2saUCo6itLxshpy38XGaWp+dDQbHmKGodiGLJAwg2pMwwXYKRNErR0C6mjBdw7beEPhR+Fr+KnSai8rDBKmWaQkIgpupWBJQwnQZAlldBnQtAgJrZCGCLWr0hQ4GR3ZBIoeGjJmpEJzqP7MfQZRJRk+Y5joRvKHWxODFalF2kPZWQlPtyUljviACPv1O9o9jFOPQjfC6ho6AOHvOuJ5j6Qo6Zl+TNTUyQzX4XwEorfbiM+NaQOwtU0XTqBmKYuroTHV0h0xmmLx9z+Sf7wb20YOYjOPayC0mofLf6zugPmUiRnB5567pimvMhgsnBuWTFb5kNyDiHwahRMMhV0tA90Lfxw+Y94la8Bi0WVVUX+oseGupXC6nstmsymQyrI7jsI/66n4EotCJ6Et/QXUuK6qLv4uoBkjXACa1j67HSDuMvzFhACY4OuJZAAAAAElFTkSuQmCC", nC = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAACXBIWXMAAAsTAAALEwEAmpwYAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAALSSURBVHgBrVY7bxNBEJ69u1h2hIQNUiAFlkWqYJCgoQAkU6cJEjK08AtwwaMKsaEKNHQgmgSJBirShDJEwpEQFCRAgSjslCg2fiR+5c5eZsa79vmJSfLJ45t93PftzL4OYAiklH60ebRVtJRsI6fqYmgh+F/QS4pgVCwOEhJ9yO/gI47mp3K1WoVKpcLPRqPBfSzLAo/HAz6fD7xer341j5YQQjwbKEDpUOSw9j0L0xN1cByHCQ3DYCOQEPYF27a5fCKXBTN8TtPEUSShC0afkcPjNz/hxpPPTEgjHBsb6xAhn4zaKJLSzShUny60BGhuOgRU/lrkz99vwYWpQIvwX+aZPgP2yxdukXk9JzoCSo1/I1WAR29/wcnj41DG6E3TZAIMucc0Ofcpl8GanAQbBZz1j6Dmb5EFlNItKlxf+IKzQoQGlGuNDkKeMNG5JnSbiYvANC0wsW6vHcVVWuYUwTWe1B9Z2NqussCfXQdKNQndoIntB1Epg1EocDoayaSOghCjulnylj/9ZnLK2vYOCuw1Oki7n25fYIpENgMGRYPl+sqK7hKx8O88eZvpYlMAO9VsCZkdu4eonwgLZLIgHLsZAdl6UjeFSIA3VJrSw9tC8M925MCU9ADJ1ZsoIqCO6dICRnsYHWOC/UC4TIME0uQcHffAYcEIBrWbbwlEwsfgsCDCZ7X7lQTWyJu9OOHqMmLuu6DfsmZmdNUyCfDpRxFEwgE4MIKnQFy6okvvcOkKOmY/UGkuOtUcxz4CkMqsV6911RJyp/Uquo2Wpyjmoqdd3UcnJ4i7D3T++W4ghwVISVc8xChYRDb3wbC9oNu5B5Kb9+7rpoTi7Llw4tA8WWEjvQuhQJ0vl+5Dzi1A98KRb5uY98tu8jgMGVVMXeoMvLVkqVSSxWJR5vN5tkKhwHXU1vUhEINRoC79JTk6VuUBvi5iiiDnIkypOroe/cM4/gIjS/cY17kGzAAAAABJRU5ErkJggg==", iC = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAACXBIWXMAAAsTAAALEwEAmpwYAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAANWSURBVHgBrVZLbIxRFP7uP38fM4Kppt6kUhZFpAhtpQ0LiQUJEbs2ErGQSNSwsBNTeyVWNtJHIhYssCJBdYOy0C70Eak21RdNTKfP6XT+/zrn/vd2pu2UFmfmzH2de75zvvPf/w7wG5FSBklvkDaSdsukRPRciDQfyxXepB0sVWoXAxJpnF+mJkwa5HHL8Du8HXih2vF4VNmsX7EF24O7cGjjMRTllZqtI6TVQog7iwIwHdq5cviw4y6GJvuQk52HlZlB+O2AsptKTCKWmMDAeC/vws3S+yggQC1hAqleAKAjV+j1bTV40lWLwtx9yLBsz2p+rtLTWGIK3dEOnNhWibM7r5rVKyYTYTin5hPT0tBeg2df61VEglalkNSKueHI2aA0kEDnz1acLjhvQJiuvbSvx9JbmJpgV/QzGtpvIzewDtNySmlcxqiNeWNXq1qLqbU4eG0SeYH1aOioQStRq+tXq2LS0XfzoOJ5KX7E+lCQs1NFr36E12ABQ1JFrlLgrwt0RdqwJ7cEt8ofGbMcIhinuDc48h67Mwdh+X0I+seQ4cuedS41O0QWfaRhKIUqwHXiyJc+yPhH5WtDsISXQgxwkntrpl4htCELtg/w+cYhbDtN5DriOcUgQMrEdcbgJLLgOIAVe03zCuAwAxQp0+l2WFQRwVURcQg3QpZZNLCSoaYVyotqIZBQ+12iyp1oNov5ti4IMNOvKRc6vhmynPEAGFXqDEQKGHMDV5Pn5cUgjjs6B2A2e1PXueJ6FUwGvKjw48w1SvXB+feoRXt1iiWWL+aoUGtlbjazI7MAvsBB/C8R2YWm28IUNZEeGbIqca3pANFt6ZO73DSkOtmSqnz9+H5oiKd80LjIER5VPIjiwzfHK6pYJgA7p1ptWkURX1xjZrdZFC2/N97wqKo8oI+R0aVHb+zvnVllJutS30XnSEeKt2agqszvPX5/4b+qLBuFa9WDqe4G7igARjITVWUBXCJDD+RPmSRteA/v1VKtfS64cMLw3qzoHHbcC4/Hrf5RN2k273XNneItNjn3o3irneo8bAbprsyQBlEnvLk3gZdf4mj/7qA/6qodK7OEcnh0R2aq47RXZvrEvUu/Ti5dGuU//LsIaQeRFIfdei6sH/NF5RdSrPnVytZHDAAAAABJRU5ErkJggg==", aC = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAACXBIWXMAAAsTAAALEwEAmpwYAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAANnSURBVHgBpVZdSFRBFP7m7t1NW8u1//82KntY+0OjX7B6CXypxx6UEiKCoNxAenSlp4jC18JSqvesoOhJhQqhH8NMhEI3rcAw/F3/9t47nTM7d93NH9w8y5k5c2bm+86cc++dBeYRKWWAtIq0kbRbTsuA9lWQBpGp8CYNsFCpm4tIzAJ+lboIaYDH1pvXmHr5QvVyaEitMbZsgadgN3wlJTCPHHO3DpJWCyFq5iTgdGhwBThRcweytxfG6tUQeQEYS/1qixMbhYzF4PR8pz2A/+EjeEK7XZgIkVTPINCRK/aJWzcxVXsPZmERDK8XglBoExSa2iIhVQs4Y+OwOjvgO1eOrMrrLlzYPYlwc05dK6eFweMP7sNbUACDFxCKEKnRCA2f4GPboQXxT63wXrzkknC69hNJ1CWoo+683f4ZsZPF8IZC8PhzEgTTUUwzaTt5ChrbI8N0kk5kNzxz69JEBCeEjr6bPaOF+2D09sAMUfQE4BIg5QRSJpNKP6EtwKYJ60s7cPQolj557i7KM6k5w1Y8GoVdWAgUHYCzahXg8yKRcQEBifTnQSZbqWcdy4KTvwvUwhfthhncxksqmOA0W1+tbHw7WwmP6YFheLDEZ858hkUSO03YNTlF0LYN27GxdtiLg4mpYibYx9aV2+/Q/KGPQAyVXy8RZWcRmY4QyfOkc1CKMT5pI27ZNHCU7s3Pw/vHm3g6yATqhYr+Gk3LQtxyEB914DGoFoaYNWrpSFXg6boIFdzgyJTrUAT/5CC1p+IRCOvCRaTt5wclykZuzhI9L7BYCW5Y5pqD/Jg2knG8s6vf6h8Yo3QkaiAyJJLqrePTWti8brkR3LiCg2/iFDUzQe6amHn3Z5hqrMEzPYhMkHBdLvtvkGMFe58yAX8zqtbnbIVpmmgbaElk6b8IgLVZG7EjEHK9DfTCCv5uNPGoLD+sVmVS0iS+TDRVRbWuq56/RYYelJMO7ll5GGU7w0h+ZDKInqWU9m5frqJXdwMbioCZXEdp/jVFIhdCotfwWgYvo71aqjXmjAsnQl0V213DHYh8vIC+8R9zloOB1al3hKk/lAoecQezXZkVmkS94W1/WvD29ytF2Dfeq9b4zVwFeGTNqVTgWa/MOSJTl369XLg0ykX8u6jQAAMpgN3aFyENzIfxFzDnAW502GF0AAAAAElFTkSuQmCC", sC = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAACXBIWXMAAAsTAAALEwEAmpwYAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAANRSURBVHgBpVZLTxNRFD53+gJqaReEsPBRjErim7ggMRr5ARIwxp0xGmNi3Fh3xg0Qo8FEAxqjS4jxB6jBrWAiLIgLV7pgAcoGCYGWPmaatnM93+297bQgFvyS07mPOd95zr0l2gZSyhjLIMsUy4KsYl2vJVjitFNASRM0ivGGDfGLd7WHCrZty7W1NZnqPS+T3SeVbFy5rNawVxdVop7PX0c+yI8hjPP5PKVSKSoWi+T3+ym0by9ZXV28I8gtlcjhdTai9Nra2igYDMZ4OMocUSHE8CYD8NyQgzidTlNTU5MSViC/sIhyOWVANDcroz6fj1zXpdXVVQqHwxSNRqE+xFwp1hnDxDI5N+T261fkzM3JZiaxLKsqTO6z7bI4Ts1eKBSi/MdJ6bx8IbW/g6YmlllgiZV+fKfMym8KxGJKER7iiQhgQDC5sHNKDLl5J9DRQZnlZSrOfgEf0jWuUqQtXcck82REFh8+Er5wWIDUCCAcJlfR8liU/ars8dM93S1KeyLSnvwgI2fPYaMXbY4aDJiiZh+PCOTWq2wgsjmkHxUgaVm1e8aZeFykb9+hIHMhbYwE2Poxcjx59XrOXpTHdrnAvEKcl8qeF0YfXNrABYH+Rc6cgT4SszPkQ77xciBA3ELQUpzlH0GVPFXbj4075BYL5PK0yHN5/AQ1f/qM3UW/LgjR0pIKX2g/qVAoC7w16fKmDcQQblM8jR7HTyVuc4145TsQWr828wz+qBqF8IgBDCzCErW3E62sVHZlvTIXzgtZzvGWsDo7zTCJGkzxoDeTyahOqi+yQfTIwSp5ayttfP1WaxC5ZylxxChwJBLB8jTqqarBZ8mmrtgtQtXo3sPAmDEQfXBfcmF3bcX6+Uu2XruquDTeWZyKJA+mMfPdvCWCz0eFNT8vdxIN3vXPzsjA2zcUePrM1csTzL1oPskbLEmrp4ea9h/QH9XOIPn4Dh0+JMTRY+CE0+rIFh4vcFmMYpzjgw0F9541WxXZRIknjnWcwBr3ao5rTTJmrLa0tFArk4DYdIdJmDSi13GaomM85MOGfOtQyxd55coscNGz2ax0L/XJ0plT0mUp9V9Ua9j715X5NyO49Cdk45iS//HvIqEJ1j2EC3oN12NsO44/r+dW01oiysQAAAAASUVORK5CYII=", cC = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAACXBIWXMAAAsTAAALEwEAmpwYAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAMXSURBVHgBrVZPT1NBEP/tK5VCEal/QjSGtJp4kRQKFxKCVr9AjZ9AjSS9+Tx4bnvh4sWQcPIA34A0XvTUqpF4QC2xnEjaRhLxQijYCqW0z5l9u/RVWm0jk0x3ZvfN77cz+6/AX8SyrCHSGGmKNG81ZEf1maR+dCscpAA6lcV2RKIF+BNq4qRD7KfTaSSTSdkWi0X5jd/vx/j4OCKRCMLhsA7lwYQQ4kVbAi6HApeAc3NzKBQKGB4ehs/nw8DAgPyuVCqhXC4jl8tJf3l5WRIqiRNJ4gSBmrlkTyQSmJ+fx9TUFNxuN4+BgppaGUw2E2WzWUSjUcRiMQ33VGcidM2p+cJlYfCFhQWMjY2hG1ldXYVpmpqEyxUikoImWKTmQSaTQSgUQjAYPC6HI0M54z9t7e/t7WF9fR2pVEqvS5q+uSPU7PPcEwgEZM1bzd5ZmnaytrYmwZlEia+Hfu6xlX//DtM/vmPG04tLpZ9w93loahIZtsH1bGTgYJbjtcohghRb/7iCHGFdm7nFoyYTRNi68uY1Xp71oocCXIf7EF6PhoO9VBpU+8omMovceuUXaoNe1Mg3CAs2wW0mkPvLyn6FoUMrFYjtbcBDWRiGwlbAksuRAa/H/gHEUVXG11lXPuhRPxPIA4XNTVkCoUmqVVtdLlUGNFoFLLVet0lUnEG/td3dJgJVXzv+xNGu1dCpCIdq4awK0ho8h9MSY2REm8VjAtf0NE5DZAY3R7Wb4RK9JQ0bjyI4Gn0Fy1B7Ht0Lb19ekp6793VXkg8aL/IOe9VvUYiDz7RxRNN6dgZO680ExmWcuZ7U3QGDZsv3Rpo918VZOXO5QdCd6E3lvvpcdy3xXWQo5yF4Qfon4TrPJN0x2BOiA0axovcGd8m3gQ1JwEzHHZSF4ZuV6f4zE6tRGgbnCihJKMwTD06cGnnfWpUNq771TKC61ThnaCaUZ9szAXHhMUTfpBM8rp1WT6apSOQJt/Y/wSrTRjvYAI627I8Musr7CdgbJuAJHdryyWyduf3oL1mdS8r6j38XpgLYcQDmVV9cbfO28htsy+l+8t52AAAAAABJRU5ErkJggg==", lC = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAACXBIWXMAAAsTAAALEwEAmpwYAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAPISURBVHgBpVZdbFRFFP5m7t3tzy66qLUosFm07YMtpIBGCyZEfTDhRZ98MDRKYvx5smtCfFK2vhhjQogPPhgrBPUZI0ZDJEAIpYWE/99AoKXlrwTYbunSZffuHc6Znbl7oV3ShrOZOzPnnvN958yZubPAY0QplaC2kdoeakOqKlmj66GWwlyFnQzAbGVLLSIxA/iX1GWoJXju9e9H8b9/da9yOW0jk0k4HUsRXbsW7qo3res4tV4hxOaaBLwcBlwDFjZvghodhWxqgpifgGyMaRc/PwmVz8MfuUw+QGzb73Dal1qYDJH0TiMwkWv2wo8/oPjrL3BXvgoZiUAQCjlBo2kXBaWfgH9vCt65M4h+tB71G762cGmbibBrTt1RXhYGL/3Wh0hHByQbEIoQ4WiEga/w8dgng9Kxo4h8+rkl4eVaTiTDlmALdR+XT51E/u01iLS3w4nFKwTVKKpMZhxkQfPy3QnK5Bwa/vrb1mUvEbwlTPRDrJlc2Qk5OgK3naInAEuAUAZKBYtKP2FGQJleeKdPAatXo3H7Dms036XH+zwqnx8EWu5AtlHkTUWIaH1QINsXSgTqKzTUyaAW9q0slSCb4/BwHN7Fg3Bffp3VPUzwnt418X7Ib5shHXJwXQg3FipoBWRffw7xRomu5XFURZkUfAhvAWSZMmnYDxeaYA0TdPLIL1yApMAEN5QgylQnWR+KFNi+8xoS8xx0dboIi1AFsvK0v/J5Zx2xr1JsqQ8UStf0VgyKSg7wJ3HlhocvvhnB8NX7uHy1iDJF+M+uMSQXRtH3fQrNzzk6AOsnJD39uwGBDKIQ1RaWRQtc/PzdIrQkXUzm72OqUMSSxRJ/bEoSuAyys8WqBlgRthjW75x5D1uFZPELUTyTcPXy1EUFWlP1NH54mRAClnUvWtV4QCBjK/A4uZUt4fCODpz9fxl2D0zUNhRculY7O8bnIEODjddzh/DT4Q8pE1FZplAWuQkPsQYHbqSiLHsKjvtImsqcbKrRZyv+RCqhd1GaCbjIWZ5tGPgAJ7KD0whmJYaguW4htr0zYLVL6MAK/m7s5Vl3W1pbKcxd9AmnR+a1Puu+lb9Fdhetpza+7NkudLemEXxk5hA9yzryfempVzh3fTewThMwk1Wsa/tKk6jZkBgbtmXwbvI10mswp104Ger40sGliTPIHPkEY1NXapaDgXXWLWnq3wiDZ+xkpiuzx5DoE37i9iAO3NypCcemRrVNzH1aA656/t0w8IxXZo3I9KW/Vc1e9qgn+HfRYwCyIcAho8uYbV5THgCj0Ax1zhPDNAAAAABJRU5ErkJggg==", pC = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAACXBIWXMAAAsTAAALEwEAmpwYAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAPhSURBVHgBpVZPbFRFGP998972dXdtu7tla4AKW5sY0qDRi6AxQaPRm3rzgokcJJ50jRe92JJ4x5MXEsDgQS+mepNEq4k0mJjgQSAmQgt02SaltEuzf97uvjd837x52y1saRsmnc68mfl+v/n+zgKPaFrrDPdJ7jPc5/R6W7FrRe4F7LSJkAXYbjuzGRH1AP+EhynuGfmeX/Lx7WwdF6/5uFcPzZnRnIOJPX1462ASh8e9WHSV+wki+npTAjGHBcedio/Qr+Df2wG+mXWRSTpIecqcq/khqs0QN5fbIoRTx3YxYSKGmWKSE/GH2+PmOHn+Hhq1NXz4iofBtItsmoGJUG9HZ99/USGbJGg4qDNRaXEJe9NpDA0NGQLGqsSauLHNu8HPzdbw2RtJKMbVUAysImWtvvtyGrmUFjmEIRNpD9Vq1exZkknem2aSebIEZ3j4oFpv6lO/LQX5QY8mdjvq6byiNZ/037co7LZmpQ4EDA5tZLmHaLbaKK829XsvDbsHR41ffmeC18jefk5WyuWyAfA8j2+vTOdD6w4jMoCfTivcrpirmT8gNCRXSz4Ojbn44aPhWCQrJnpXZgvLTfz6H1vVcZH2COMjhEKOnc2aX16kDXHxTF5jLAcLLhoQAtZxPKsQBi3c4MjbnzdaFIXgHZmdvtDAaY4WkAsvofDxkYigxMH31S8dbAP63VGNJwcj81gTsy80goDQ5kBI9jXEDrJ1RAiel9mVMu+QmEShyQerrQgzYMF6S0xjAsm0hQqDaRt9hoD3Q9FCNHCgWPhZ42sUhMAk1MKKHFUdX7JJzc0CFqw1tfVBhHj8e4qAxfrG0fKhOk4fZfA/P18neKDRhvQT2XaIrVssozcWB4kiiaBCafFuW0vUq8hMCYdUwtEmdesttLfCN1HLagdhyIHiYE8+I5dflX/zQjD0RJ/r+75JLiKNruhEMgF3awJtSAJ2juc58fI/IvgH91eXGx6++LHJfibj7B03MQ1roNnRX77djwMDZvUnIZCaMbl/VwIhh+hf123SEu2QIEq6vRmFA7s7hW86LhUzosXlUgs/X1ozPogyePsk2txe4+jLA3hq2Fj0LGMciwkKPFzinqnVamg0Gg+ViUeDR4VPSkwqlZIleRtekGJnqGTCB6SGn7QHcOF/3xBQdGAzaJsDGs/t60c2lYw35OGZl0knOqR+yxvM00khGR3x9PFzNVpY7UqCONOwPhwac1B8PY2RjNsN3nnVej2ZRSGBzfCLc22cv9LC1XKImGygn3CYgd+cSPDYAe75ZPZWPHr0z+rttxn9GL8uihZgpQtwzq5NWbNu2u4DRuVOIAnZfkEAAAAASUVORK5CYII=", dC = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAACXBIWXMAAAsTAAALEwEAmpwYAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAReSURBVHgBpVZvaBxFFP/N7u3l7tJejuZfY5vaVqkgJNUUpVqbRmoRxKaCghQ/aD5EqiCNpaLoh6aKYKzQIkUlWNoP7ReLoCkIsYU0YkihRpPS1D9gcyRFkzZp7nJ/dm9vd8c3uzNJNElJ8cG7efNm33szv/dm3gF3IM55gvgQcQ/xCJ+jaalrI16PuyVhJB0sl04uFYgt4nw/De3ECTG3f+hFoasLRRp5zAQsF3p8LfT6zYg0N8No3KFMU8SHGWPHlgwg4JDOfYe5jo/gjY5Cr6qCVlMO/cW1QEiDcyIJns3CTSaFDcrOfo1Qfb1y005BDi8IIHfuR89/dQTWF58h3PAomBHyP2L0wzZEwG0O3CiACxtiL59H8bdhRPbvQ+yZA8rdm+okTGFOwy8CFmu8E/bUWRixTdA0Ro45MZvbCQs888AO3KMgNCnmrsGo2Ivo6lcVXA+TXVKTZgKahGv+AftmJ0IlFdBYARosOSrZCkafC8Ga/M4oqUJxohNOdgAyfyeFoMndvyImB/ta0JuzoOsadDLSYdIHFm2akksOGckQjEAn1jRmQheBdR3fzeTx/lCHOmuTKPMQCc+J2dBkP65mRzGcB87b1/FGdRXuixoSwyWqQq79btk4c3MKl1MZgqwfQ7f6sbnyMbHaJgLsEVLf392+NSPQrpu3cOgvB9vjUTyfiKEyRJ9lXfChXBBkW9wfZxwPX07O4GezgIydJjyCgH3j3SrADhHgISFNZH/1nYtycbiNmeJtXEhF0JtO4YVEKfa0jgKrw0GOjxVx7mgNvrEtZD0PBdeE6zl+MRBuuDJ5SZ1vvSYTgrdXmaiLhWcxcHgROSdDu8zgavcYtF0R6O9S8g+WQ2sqwU8D45gsZmE6dB+4M4cfcdZJ/yuAT5l3RrCxxFgAtMddWHoR7qdjYCUeWMyDe3wMLuEu1vj8BC1CAqKkiHS6dQ0upq8tyOIKTcOWx8vBtrtw9v0Z5OnJOJ7YWYnRqSymxUX4D9WU1ioxNRsgtm4r7ORwcGUl7S6L4eWKOErpwuHzleCXMkBYA6uL4VmD4ZEVEZy5ncH5GXPWRlhvjD+opoMCol4hbat5evawddEwjtSW4/WqssC5Mt66EqyhFDACXbWh40B1AifWVaI2HPJ1XPqS9C0Tl4GEaTHruLwXDdowdpZF5x9kWUSvBr5P53EhV4ZPGn9U6g3qLeqhocnLD8C98RrdTuaX7N3E8Pw3iSN072kqhk1CdYrKtkVVUQtxSottgb6qNagMvnzn3P+cQyNb6dzvDULwgROvHp1CKI5qFa3wetKwP/wAKro6CbvHoD7g0hWeqxz1bOtvvQf9pValFo0nuchOeLvqge7gIDcfuJ+bEYNbkt3ja7jzcQ0vrAr7c7FW2PUUd3svzm+f7fN9LtYy2yCfbx9b6mzuuS56h66AVU8AUQZvKAytsRH67mYa79wyl8DUb/qn+PKph/+Pfxdt0sH0PIcjUtcuy3xJ+gfTJYL8z1sUAwAAAABJRU5ErkJggg==", bC = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAACXBIWXMAAAsTAAALEwEAmpwYAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAALiSURBVHgBrVZPaxNBFH+7+V8hBKSQQAutVREL4kFqxIOCB4/6ASzouaLRm6ckX6AI4k1p6cWbxKMgVA/R6kUtKD0oKRRBrG02Melukt0d33s7E/PfhObB25038+b3m/dmdt4CDBAhRAw1jbqOWhD/pCj7UqgzMKrQJAkwrKz0I9J6gN/FVwY1RrZlWWCaJr9d12Ufv98PwWAQIpEIhMNhNdVAzWqa9rAvAaVDgkNt5z2UQrNg2zYD6rrOSkJE6AuNRoNtc6IIc7F5BZNBkqwy9B4rh3L+ERRzdxiQVhgIBNpIqE1KYxTJg/wirH1dbhLQ3rQRyPwx+B8ENz8+g1B8vgn4P52NnYLn35+2kqTVnqgIKDWxxq8tqLx9DIHoJOiOBT6fjwEw5C5V4ORTEwcwORGHta1l+Lz7DuT+rTCBZLpJRjG3BD6k1HUEcMw2QN4wrf1MqLGaMMGHKdNwHpFIuUzHnCK4TlZ95wOI8g/w0aRaCTSMoFNoY3tJzbWg4uAcRNvc21BRkKSI4Bo7fXvlrRx7NGsfwDbbQDvfre2aewDlxr6XcAwy//Olcrnkx8dZatmYf8QHyoLm4PGzil1AvUhIjPoeOK7tpVAXsPl7Qw3NEAF/UC6mhwnUp4Ek/VLSKY6wvYbmacUuNQma34HaP006jUuIYJsboejYcBNHplXTaBIEphdgHEKLPBY9rcxPRPCGWsHjV4AzPlza+wpNv5i4qswXRMC3X2BqAfyoglwOQRKfmIIzRy8oM6fj0aJr9jVZkeQSCIk/KgcfOHykzz1RXauIva1O0S1UgyIIM8mIUUjfGyfuwVyUr22uDdRgAmJSHeHkbQidl5HgY9C3oMbJhcAXT95XQ1mJ2VVwMuDdrODs4s0aTHBx6bzkWgmoLhTqXzDvyVbwDAxYVUoWdRasWqJarYpyuSwMw2AtlUrcR2MdPwIpGEZk0V8Vw8u6OMTfRUoCFFsAC7KPymNsEMZfadwE19Sm5wYAAAAASUVORK5CYII=", MC = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAACXBIWXMAAAsTAAALEwEAmpwYAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAARJSURBVHgBpVZdbBRVFP7uMGvbpe1u03bpT5ZukUTaGlkFI+2DFKPUB+Oa6IsGFNCYaMRuleAfyjb4ojFI4EkfaFWURBNDH3xAxbbRUCONhSpQQ+w2tBZaXPs/M+3OzPHeuzP9oV0o4SQn586Zc77vzLl/A9xAiMjPdT/XVq5xmpMRxxflGsKtikhyAJYrTemI2BLg9dzEuPrF89lrHTg9eFLayZkxGVO0Moi1/irUlNQhXFjtpo5ybWSMHUpLINrhgEvA4z2HcVUbQF5mIXLu8CNL9co43dRgmFMYnLwssnCg5iit8VW6WDFO0riIwKlcsn924SBO/N2Eivz74FHUVNT130opNUwd8bEePFa+Dc9Wvua+bXC/hLk956ZLtCUxeBj7/jiK3OxKMP6WGHHLFpZDs0U5RAzjE932++tfVPKLX3XbdS/P63MJmrjZYRkXMXUpAnjvop+1TPbjuOlUz+ZQ53eXUr4HsxWq8xrM0i8hq/wLqNkPCHcbJ9jCnOrjwjPYuZl83ivM462AogBXTaJPhpMsYV0PLugIxapCOwo9KFUZs2zA1C5iLLkRxeu/csPyOAyekHRtbaiOdLAz5wxSaBQKDJR6ptl7JTYezU3CsHVMO2pYOh7OMe29xRaCPIbxWIXG8Uunjg1bv5FYjkQFQUSMWlpacHkwiS3P9LPXD/yFZFIDIx0e6Hjcl8TbRZadwwz4FZ3eKLLoSb+pZMJgjDRMTEyhfn8P6p4bwJVhU2I5shnOrqTa2lqaWxugO8u81P51pUV99xP1bZRqczXiG2z3WehPxytpzeqsBbnhcNjdgHG4o7KysgVBrr71UqE93LnOpt4qot67eUqV1JFzFdTwfAHxiVyUEwqFZre4ipuIZpjMo1qYW5spMz1tkmeFJQpkN8oXc9Anpzsvb8GLUKkHHd+upkPvBuDPVaRvyia4C2pVgco+eDPATn0ZJBG7IDcUcoejswR8DqSHLwmK7sqjru9C2BTOmq2uW7Pwcp+BXXEdf2q26fofqvay89+HUL9zrkA+B+7wrCBoF6NIJIKyUg+dOhZkB98JsPlVf3pthvb2T2MoSVL39BvqsUQSM5Taad4sBR/vC+CHz4McQ5VYjrSIjSZOzRHx9F/PNvKpZ5iiMLl5z2sWfTg0g6GZpfu8ysMQK8mg8kyFCSqbF5OYLEIg3O6GlLtHRavoEmm/wfpnO0zepuZEkp0YMbEceTrfg6f8KmXwulYEW8Ay1gl3M19hOxcdduP/HsErXR9h2KQlbos0wkMDKsOR8B74CncLz+xhJxstBtzIMzy3YDe2hqKpc4xuDixUxD7CcxxwIY0O5qILJ8aNuHTQO34Bsd9fwJA+kPZDBPA9+dXYvraB203zwWPuw1JXZtQhkVdmd+JXnB4+KQmH9H4Zs1L1ScCaQN184CWvzDSVyUu/mZYvrXQbfxdRB2BkHmDc8cWcZZ5W/gf2jL2yI+ee0wAAAABJRU5ErkJggg==", AC = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAACXBIWXMAAAsTAAALEwEAmpwYAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAMqSURBVHgBpVa/T1RBEJ733nEHRwJnAkJMMLQUKhTaGqONNlpqI9Yaw9mgnXe9RvwLoNBEGwJ2Woi0xkRbCAEKzSVcwcHdvfv53jrf3O5z4bwfxgmT3X3Mft/M7MzuEXURpVSK9TnrBuue+iOH+luadZr+VbBJA/Qry52InL+AL/CQYU1hXa1WqVKpyBiGodjEYjGKx+M0NDREg4ODZmuBNes4zlJHAqRDg1OtVqOjoyNqNpsC6LquKAREbEuNRkPWY2NjQqglwyTZNgLtubADuFgsincA5Q2ilm00gqxer9Pw8DCNjo4akycmEsfknIfvSAvAy+UyJRIJATUEYnyKxBBgRMQWCdI1x/b7MW2P1KQ4ZMWeO7bnSIr36SN5m5vkbm8RBQGFMzMUXL8hChuQDAwMRFGzczi/ZdZrjvZ+Dyy5XE7Y4L3kPH9AiWeL5Pz8FeWT/dYh8N/kJNVfvKTg7ISQIAqc1/j4uAn0DBy8Yw4VoZqDhGeJhcfs9TY5fpkcThth9H2e+zK6u7sUf/SQXN4Le8/z5OCBpSUNtNuYoQwBDiMYxz6sk7vFKQEwAwKcGFTWFb81B9nODnnv3wmaqTRgabkKglnMUI7GQLx5+4ZUqUSKe0AxuGIwVcZY0WNLQeytrUZRY78pX5ZpnIEkNZ/PRwbQ5LkJlAqfsAfXWnOrimQNRfPx6OcO5BwCLgKIOQdTRe2lCGCOClVDelMvMf1i+kTSxrpv8mfXeXj5CvUr4YWLJ9aoJC2FiMBqdZHg5i3qV4L5B50IfoBg0xDYoTXvz5OaOk+9BDbNu/dOfEMfaVkHwZIhQDdGJNyRtdW1riT4H2xIe2z6yMrGmst5x73xBatkMhndMaJTU1T9+o3qr15TeGk2Ag7n5qix+JRqnzfExthDRkZGjNkK7qK2y87nejdNZx961zRpAqQGTpJ12cm9gAkPWRMFLiw7kl7AUOzR4JCsxmx7cDLUulmlYUrcyWieTpEAGBWDl82qHIBnqItXaf2oi+AK5/dBHR8fq0KhIMpvhnzD/079EEhTP6If/RXVv2yo//h1kdYAhxbgnv6WYU11w/gNBlJ/vrhWDDMAAAAASUVORK5CYII=", uC = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAACXBIWXMAAAsTAAALEwEAmpwYAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAANvSURBVHgBpVZJTFNBGP7mtdgLYRODS6LPEJcYlbpEOSgUIy4xpGiMFw/qwQRjotV4MB7sa0KIR2zCFUgUPRAjuEVPrcuRhN1EEqAgB0xYaqFRQvvG+advoAUKJf7J3/nnfzPf9y/z3hRYRTjneUK9QgNCh/miTFs+j1Ad6xXaZAFkKk3piNgK4HfFYAjNo3kwGER7e7scw+GwXKPrOpxOJ9xuN1wul9pKD32Msfq0BFQOC1wC1tXVIRQKoaioCPn5+cjOzpbrZmdnEY1GMTQ0JOdtbW28pKREYRmCxLeMwIpcsvt8Pvj9fpSWliIrK4ueQWxKGeVmYRNRX18fampq4PV6Fdw9lQlTNRdDJ5WFwBsaGiAiwnqko6MDHo9HkVC5DgmSkCJoEsP1qe5u7D/k5JsOHGSqHEkZyoiX2moeiUTQ39+PQCCg+hIUayqYFf0weab37sJPUfOWffv5J5On9Ce5NOmkWwRI4ERiSb5d/FSTNf/lMzAyAl0AGZEwO7LBwT9u1xnfsgWZyPz8PAoLC2UQg4ODKC4uJreHCNxywds30MRoo2gnJlBdUMCqoxGYVTe5ee48Ww2cQE3TRDweRywWg8PhUI/KCdNJlinSownbvQdsbg4QJBgYgHb7FtMe3AcbG+NrZUFl1DRNZmOJTpjyhTJHR4DKM4i/+wDz0mXKGaJzwMwMtOfPoFVXMfbyhYx2qSpwpUmi2xfYSSdF1N/7waYmF5eItEnZ5BS43WYKj7ZWFilz+ogRU/T4UbCenkSZkPqK84pT8dhTv4at29L2QmVDfaAy5eTkkDtMeCGybGXlWFbknFzE6/1mrPWVbTXwpWK3LxSmizIwhOGNi2P692xl4hQJDeg2s+luBTMLN2UGzK0sTI4nlQZ2bZTH9B4RUJOnafbnzGmMd35F7cks3njEnnHEioBUz92O4Ts9yrtTE02h70ZQEtQ+huuagzceXid4kry+0qLMZvoWqRNxQ2i44FgZblQ9Yiqa9UbvLXsI5+YD5JF3AxmSgJiUwyh/CK/QhY2ZgCMBbqh9iYsnJLFT1loNJ7trvBcXW68i9Ht0cQFbDuzacUKC05gEbqy0RZF4LJLElTnyDe0/3qPrV+8CWZ4jVwK691xIBl7xylw568Sl38wzlwD/j38XHgtgOglw2PIZ1jFPK/8AwW4g81idSyQAAAAASUVORK5CYII=", zC = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAACXBIWXMAAAsTAAALEwEAmpwYAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAARASURBVHgBpVZfaFtlFP/dm9yka02T6miDtVmYMMW5dFOwgm4poi8Om9qqLwVxiAVRuhVBJ0iTFKF9EKZQCGMP3cteJkUDCoJo1yAFccXWVVnxIU1apSu65U+T5v/1nC/3prcmGRMPnH7n+77z7/ud03MD3IVUVXUQ+4nniaPqHt3Rzs4Ru/FfiY00B/dKs80CSQ2cn6UlQOzg/cLCAsLhsFgTiYTQcbvd6O3thc/ng9fr1U35MihJ0qdNAzAcmnPhcGpqCrFYDF1dXejo6EBbW5vQy2Qy2NnZQTQaFfu5uTkRUKMABQnWBdAyF9EnJycxMzODvr4+KIpiTABkXFuZstksVldXMTo6iomJCV11XH+JpGNOy88MCzsPhULweDxCs7W1VTipZaQFYLLZbEin00JeWlrC2NiYHoThOkG667Jmx9A4VlZWRPZOpxO7u7vC8fDwMGRZFvJDsgJ7Nidkq9WKoaEhITN3d3cLW4ZWq98sC7KW/Ru8YQM9S8aZmQ0GBwdxMJvHxJHHMP3k0+jczWFgYACLi4s1PZPJBB1ejfq5zSXuZdpcKBQKiMfjQpGz46x1nLl7Km+dhf2F58RZYj6CjiuXavcMWaVSQT6fR7lchsvlgsVi4augmf74WNoKTiN1aRYmKovJaoGZukY4IOMtVNCZzkKyKKjkcpCiMcSe98FBSYDKoZJaKZlEiV5WpoOt0TNwfSxq4eUAx0U3/LQENZWma4nckUEiBflAC4Eo42IxjfdNbcjf/F0EKRMkM8ltfGhuEwlUqF6VYknvNaS+/R6oBnCbtYKgEIuTa6nWt2qxiDKxRJAtl1LYVFS03lyD3N6O3zJpRAopfEAdrBI00LpKb8tyIqlv3bLxou7fmgMRppuFPNaJD/SfhPWEB9skpyg43/3buTFJJn7BOkcy2e0oYbOmaCQb1eIgZOQWf4SayeJBqtQDUqN0qmQ95NLFhKwFgO3UM00NnpAUHJXNUA67oTx6BD1Ul2OS0lS/1fO4Li5zmwZI8BepO3aoE7hNuXskQ4Zr4a9gefs9OMbfAfUjEp+FULl4AQ+/9GJNp9qqzGXcZ3dAabHy8ThDxDPDr7S0YOjqK7gW+6GuICOHX8Vgp4qnCB61VMQfdhWfpK/iu9C7e0pqld12F6Jjv+inX8qUKc+Na7zznzpf91xXew8i1yP4yFfG7e0NZDfiePP1Mv4y/Q2HZK/T/+K1K7p42TiLzhAn+t3PVoNo2TBJRWDj/ltYc6o43fMNRo5ex58OFSu3f4U5Je3Lnm2PO4/xifg2CHsDhmJksByITCNIjH0aTUhLxH/yPALeGgL7x7UhSADVyYrlrRt4+fMRrCfjewpSveP+Q9VX86oRf9UCjUyMLxHjm/dc9PDa11i+daMWzGG1C4e+R04bHTf8ZDZ+dfWjf1m9d5pX/8evi3OagzsGh1HtLMAz/24+/gHItXgQAgIDxAAAAABJRU5ErkJggg==", hC = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAACXBIWXMAAAsTAAALEwEAmpwYAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAUXSURBVHgBpVZNbFRVFP7ue/Om02k7nUKVAqGZShORThEtv22h/CgaMNbIAhMNSmKIiQvrAl0ZyooQNbpxY1QwwQVuBEyqEQhtaBuUwEBtoYCmLVPTzjB/bacz836v576+ByW0BOOZnHf/v+/cc869d4BHCOc8SHqQ9DzpEL8vaaevjTSE/ypikQPwuHJ0PiI2B/gHVLSTBkXb6OmG9kuHXfKJCXuOVF0NOVwP786d8DQ2u0szpIcYY1/OSyDc4YDbgOkTn8PMj8K7qAqyXA4lWQyrnEEL5cF4HtpfwzCHdSw6eBxyXb0L004khx4icCy32QufHoH6zddQGtZAUhRMrbDAN3pR4legF3HIl3ToQwb8UcDK5WEMXof37X3wHfjYhfvQ3QlzfU5FRLhFgOvffQslHLYHGaePQjt6RgLWe6FPmvDd5lDHdBSPMXD6WYxBvxqBsv89l0S46zkiGXYJjlLxjnl9wJresklS6uogl5RCcixwJlGFudu164JbqEVtc2qSdjKI4pOn3bh0EsFW5lg/JHqyDavBoneg1IUhEYBLYFQQkEkgjV6YAQ7Wb6KI4i39w2f4SE0iMQb6gaYm+H/62XVVhYc+r4ma2dsNELgssiSdhlTss8FN8jlv8oE3K2ALAK8kQW20wEaBfEcOxREitGiNqtkGGT09MAjL2UWb6Gu1s6ajw55gW55KguVytuZaDfAdFOQKDR5JhWVMQy5SkQ8VgG2ELOdn5iYT9lphoElYjrQIzNWiZvX/OWO9aKgqLUjCeKIA/0rq86mQWR4euQBfkQ6/T7fr3rAFfa0GliCDCoV7LrV6e1yCkHCRfaBYNEqD7H5QdR2TlRn4F8lQp4HygJdWMietKLE8lEkFStfl05CKaHfGzFqJvqZzIF0CW8w9bxg4c0aWUglmrnqWm9u2w7d9E7MCdMC0fuLrhqxHwMwkTGUFVHkzrIXroOytgNbQB372gsG6OmWeSDC+sZG7doosEhkUisVS3OeTmURBpPTClcEU/30gxVJTGlbWBPDyhipyjeLaQ+NJXOxPQYyHnwryF9Y+SeMyM00TAiMQCNjnQexgWBAc+eEWuzQQh8cj4eZIlt/NqKy8REF5qYI7sRxkcvC6ukoqGQZHMkhkdATLFATodH8Wu8FEsm4IL6RYgW9du5gd3L9GEFwVBF2kW/buqsXNoZRFCYi3dobY9jVVBLiAez0yGxmf5j3XEuz0hShUjePNl2rw4vrF98ajsRzv7ouzk51RS9dM1tpS4270lHCRCHLaPmjZLCyimMqb+LV3nPcO3EU6o6G+Nshf37KM1S4rtf06Ma3jt4vjvDMSw1RW509XB/BqyxK2MhSwxx33CKlxr4rzYheRmwnsPnAOo/GCfRnULw/aLroVnTLjqYIs6sJto/GcZXFI7vjfo1k+lsyxgN+Dy8dbEVpSJmCPUSz3PXTZffXjdTpQFl5pXsqDZd57t233tbs4+0cM8XQeTasq+a7mpQiWet31uBCJYzJv8T07akXfg5edM6mNii9EPZ8v4PD3ffzyjTRLTqhW7bIyaffWat64qhKlxR4mLD5xdoRdvpGyMlkNNUtKpMPvN1ihpUHJgXvwup5F0k6FeHRw7VYKuz86BwowHiUtz1fhk3dX26Uj4lVrdxtzPZltDol9wruujONU1x303U5heCxrzyHXYDMBtrZUzwae88mcU5xH/xh/fDnP/8e/izYHID0LcMjpa3fSfF75F4Xh6k8yRac6AAAAAElFTkSuQmCC", OC = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAACXBIWXMAAAsTAAALEwEAmpwYAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAQ8SURBVHgBpVZtbJNFHP893UrZ2q0dzrpuZC2z6KaMDZAQg9IZp5kBbcKHfdBIQnwLGkM10W9zHfhBE4zEmKDTyBKJ0WQhNjH4RQIdBlHsQJhLgIV2jL25bi3r0z7r+vJ4d7172rKXYPwll7v7P3e/393/f/e/B1gFqqpaSOkm5QwpQTWPCLd5SHHgv4JO4gT3iuMrCUnLkB8klZcUC+37AxPwnb2JAVJHY4tsjKO2Apsfug/utga4ttWKqVFSeiRJOrqiAHUHJ2fEH30TwOiUDOu6clRVGmAq07NxciKFuLKI4Pg8VNI/eeQ5JsjhJSI9SwT4ypn64d6L+PyHIexofgClpSVsmCTRMdDq3GQViYU0ro6E8cbeR9D1+nZB947YiU74XKz88FcXcax/GFuarLBVG5HNEiKdhH27G9hOGuoq8WLHBpjK9YgvZGG3mbDJWY3Pvh9iczm6RUx0wkB9/tf1WRzqDZCVW8lKdYT0Qex+Yj1mIouIxTOEMI1rt2Io0ekwTWwdj9fhFbeTLeKpx2rZXOpaHr/jbJdcKUg7zhe+w7M7auB56VG89XEAer0Oa/SluP1PQvOmClWLWbXZgAxhp6765GArTpwaweC1O/jli+fFkCoq4CGNT6ly+4GfUGE0oM5qQjqDnMM5sdWk4N1dQ+i90IibcxUiciKArB2OJBCdXyACe8Tp6qEuctOWzz/KyGKJNIITceKODAkgcYuSZoGMyCpqjXPofvo83n/yD2YT3+nY8RkFUTnNFuU7GxI7cFGBVtq6cmOWh0SHZCqLcDQJWUlBIURSVsGHz5xDmS6G8hIZ2+vG8HLL1Rw5KXSsksxoB3Pg0qQQcJTygCA0IRfdilQ6i7WpJFzOKbQ5p+Ewh5HN5L93Ng8jRsiPnX9YO7aMgOxAXEghUABJqy1lSfR1DmC9JZ5zcxZLsKcphHrzPHzDdvwWur+AI79S6pMQbZhNBv499zGqGPBrqAarwWpU0L5xHC222SI7TSUcUU3Atc2WM+VPIY74m3EjXInVEEvq8W3AWWTbvFFLG5epgJ+23C47ligQfHmhCWNR44rkvb83Ir6oL7LnueCj94AGOUJ77QdOwT84XXT+KXSSiv59p1FvkZHOSui/0oCOxjG8eXInrs+Y8wsj0bbbjBj5sVNM3cBYaO4nVZt/cJKI/EyTD+7O5G/v/Bv2KhlHz23C7TtGONbJCM2ZCkao7CT8ecKNlpyL+kjC2y9y0X5Soq6tNnS9tkW7mYWYTawlxcDIKZaSq2wuJ2dvA1CcrlnKoO1DX18imfFykasqDCnN78XIk3/waqswaun67gfHi1xmJTd7Tt373mlpdCqO1eDaWoMuQkxrDvqqeUVnuSfTw0VyT+bgFMlTt6ggQpMyG2MxrcEuQuh21RcSL/tkLgv+6Pep944z6v/4u/BwgkgBYZDbvPyYr4h/ActEbGMEE2s/AAAAAElFTkSuQmCC", fC = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAACXBIWXMAAAsTAAALEwEAmpwYAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAARlSURBVHgBpVbdbxRVFP/dmZ39XtpuKVut1S1FpXTb8OEDoNEmxkQTDRrjE5DoX0CJiT7a9sEXX3wh8Y0GavTFKIH4ZhqDQMCk0G0T1MKWtny0C2Hb/ZzZmZ3ruXdmll3akhpPcnLvzN7z+51z7jlnFniGcM5bSb8inSSd508k574bJk3iv4owcgG2Kqc3I2IbgJ+gZYS0VTxPL1dxeUGXa7FqyzOdURW9cQ2vvxTEYKffM10lHWWMfbspgUiHCy4Bf5guYqVUQ1vIh1iAIehT5DndslExOR4ULGGDsbfj2Bn3eTAjRDK6jsD1XLKfuV7Aub8q6Nvhh08hUMawPlgujKCbNuZzJt5/JYjj+2Lejye9SJiXc1qui7ScuVHE+b8rlAI/mAAXRxoIxJZw6wQiArH+88jAR7tDRBL10rWPSO4oLqNITevtxyafmC5je0RD1VZguOrt/UoJESWHvsgUVKbD4N5vDB1RDWfTZaQpte79nRYbn+v9pzJ5k2uMKSqE6mTIuJMe4fXzgXsY3DZF+Q+h3f8ICirwMQt/5N4Ep7OqCml3lhz8xrn4IVHmIoIPxVN62US2JPAUFKpMemVQ0Rg1oEVdxkD0Cvw8j48T4xhqu4B323+CZdewP3YJNjdRNJlMaXrF8qIQMiwIjojdpSV6KXJOXqzRYaPmKfBqaAq8puOd+M+AXSHV0e67iwOxi2jz3Ydpc+RNcVeqxLi8VCd4SxDsFbtMzpLe08WQZ0DeoLO8RCkBctUw5ZpecgLnhrtWiGQJBVNDxTIkCZPpVDBNUbiSVNwLoXq3nRJxK8ai4nij5QJ5OUkp04hIlI/ugutS54rdsh/8dB+fJ79Gq7Yq7UsmbyJ40hJeObol/9q2q/ikcwK3yr1YMTpwPvsBpY/KkFOe8ynMFlK4tnYQB1quoT82gxfDdxz7hp4R7SfeJqN+BVm9uZl+XD6O5wL30RedQbqwF12Bu/hu8QR6wreQM+MUpQ8BxcBiJYmH1QSR7idsG50x1YNYrRMMJjRk8lYTwQyBdgcX8GfhIJKhDG6W9mC+vAu3K7sQVYvQWJV85XghuIhTiyfrdr1t9bFxQ6Tod7E73K15Ldokvz48gu1aFjeL/Vi14kjFptEbnkOYCDKVl9EVXMLVtcNYKPe4FhyHBJYj5wSBnBmDCR+pCmcENJPMlXdT44Wok3W0aY+RoSgMev6iZwzzFI1IlweeiDAM7qhH8Is3iyZpGUpnLXz5W0XWMttwwAF7IrNI0L08MLqwqCdRrkUcaE5VSKV86r0wdrbKOxgnjM/WDbuJWQPfz5qynp2q2oLIoWfjaL8fxwbkmGgedmJDi5zhx1IBHE35HY/knfCtgafq4EJGXcx1H5wROJMVmVUbYxd1rJSpQ+vH2FOEHAMdKoFrlHe1EXwEDRZPOcSHXRLZ4elsDVfu1WiU2NTtDniUHB0gwENdaiPwhp/MTaKWH/1xvnWZ5P/j38WwC5BrAJx3342Imf8sjH8Br/6UQySz+JIAAAAASUVORK5CYII=", gC = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAACXBIWXMAAAsTAAALEwEAmpwYAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAANSSURBVHgBrVZdSJNRGH6+bWpqun0OIwTRoaSlbFo3OfvRqygKpW4jiiC6kSyCbiK3rlQQpKtuRIMgqIuwi8JuNEq7MVq/6EVsSYkwdIq/+/tO5z073+dsmy7y2V6+c873vs9z3vecszNgGzDGbNy6uI1y87NNhORYJ7dK/CsoSBJki8FMQkoa8hv84eFmo74v+B4TsyPiuRJZEj77C8tRbauDu+wUGkqb9NBFbl5FUfozClA5JLkgfDL1AHNrv6DuKUVRrg35lgLhtx5bw0ZsFbMrMxSF+00DqOKCEh4u4k0RkDMX6oMf+tiL2SHloP0wckyWhNffubKEbcTW4V+awlnHRVw6dEt/e1PPRNFrzh8fqSxerxcDTx/iQu8J5KlmMIWBO2+dDjMmJYUUTC98wvmqq7oIlauRxwV0gUH+uOzz+dDY2Ain0wl7uRW1123IKzFzYmWTNbm6LDHGNIbV8DLPZBp9x5/BlViXMS7QqsjZ+2nE4XAgEAjA5XKJQEuhwmquqbBW56ZuBhJkUpi+GvAj9B1O+1EhIqHyAqNdyI2NCXLC/Pw88vPzgTUok92rzN1Rixp3pVEllpwNS2QSiUexBwWIRqOYXf6JsqIKettJAm3UGh4eNmKCwSDsdrtRi9rlZnQc6EAm0FpomoZ4PI5YLIY8/pE4SQIN1KL66wiHw0KEsjCZTIhEIsgGtBnIn7KQqCQBcaD8fv8WZ3IiM5vNQoAxtiO5bkm+QmBbUNqUfrYZGFtawsQtQA1VVbFboKwlFg2BlpYW7BYsFqMwPmq9If62tjb09/enONMmdL4eQd7cb2UnYn7eEOf1z717D6iqoqFhOmi0yCHqtba2ivOgw8br+dy6l7Xk5uxITstKK6WVlyNn0tiRDhNfFPrdGKNeV1eXEVDBt9tbtTgrcl2AzPLosT40RL9FJtm5wm2R1oFEKjn5qFqMeos5a3KC6fYdKHX11BR3w1anxPUnsNDTzeL7SpgmjW1j9J584709yTdcZ/qZMOYxXL5+ZvEjrhQhLckEcfs5po2/Syb3JHOmuzJJnRZDnHA2MQ68egl8+wI2M5MIsFoB9zHg9Bko7mY9NO2VmSkTuvSHWPYYZf/x76JTEoSSCP1yzCO3eUb8AZKFOe/A8b0KAAAAAElFTkSuQmCC", CC = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAACXBIWXMAAAsTAAALEwEAmpwYAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAQESURBVHgBpVZLbxxFEP56Zsex1wHboISD4zxAoMheZIPDxUEycMMSYPgDkAvihpEIObI5OkEoZ0RIJJA48ohkLijGyBtLkCgrbEcRimRnNw/l4Wwefux6Z6bzVc/0elbejRKlrNrumen6vqrq6moDjxCtdSf1a+okdUFvSCl+N0bdjScVMYoBHldONCNSDcA/55Cldsqzn5vG+h8TZtT37pk1zs6dcDOvomVkBKmhN63pXephpdSxpgSSjhjcAJaPfQtdLMLZtg2qqxMq3W5M9MoydQVh4TJtgPYff9Jub8ZiZUlyeBNB7LlhLx8dR+X77+AN7oPjeVBEoREMmjHR0OYXCFfX4F+8gJaPD6D14CEL94WNRNmcczgvaRHw6g/H4WUy5qMiiqOS3qgYPuKTeUjyav48vE8/sySSrtdIsmgJTnD4JJibxco7w/D6+uC2b4UTg5pF2/nUzlkXx6IP3EpEQabgwX1GchFtv/5u9+UvErytYu8X5M3y4ABUsUCCDL1WcIildrlArwcEnL+Siryfr0LYdV6IQkMSkMSfnwP270f6l1M2VV0p/ozKLDgzTc8KcKVKSiU4ba1Qe1yol1uAHm0AcbMSRbOPD2kFtSWA/ncdWAzgVCpmiZ/LwSdWHMWYvPvAVM3EhAF3xfM7S1Crq1B76eEb1GsrwCTTuoNg3RVgguX6N/V5EvKdCteglpZM1IIRECuWYYlgwOwD829zDnqj0gRYC4ErTEfI/OxgFMdJtJWr+mlWFW84d3yuvQ9VLhv7UPRMzhLslnfmQIH1rsxfTLKXSwfo7dkSoyDBVYJ3M4LWMnB7lTXCyGYY1Ytr9K5as3PkNz6QQpBKHggp9drBuB5GXi4T6DTB04xgZAuwxDFH4j+rUZ2Gbs1IJdSKRLBoZs92oE7u0niGQMOtwNR6ZLWL/rzuyUYB50gw4EUl21HfcaSVWJQagcvyqpMi0/KMfNZRzmfWo/Kcpf7vR0Td9L7ISP+p1pkqlnkseUGYMqxsXHXi68jwEsE+auMxZB86xYh+Zv5HGVUvSc+R9GpgzkhSUhtYv8lBk00uGcwP34diBdSqSeQlAg150X70c5Rdy/OBvCaiC74pHXOiRXt64J3NW+s9tlVMcnhLEzwgSV2LsNJH8Bf45SZhyoR7QL2x4XoYq3t6yqboJFvFgU3NLvzmCDQbnoMGl0UTsT0JXx6Cc/ArmdWa3cai6PozEhwd18H253QYq36EyndZGxwZT95wY4090TpbWzL3nw4G+zcRhQk1wKPv6TA3nQTPJjEbXZnCLjebOeGyL+CViflZ6EIhMujgmZFm9u4I1FCtvBtemc0ikUv/pH58mdRP8d/FWAxQSgAuxO+ycZk3lYf57pKoAeDhpgAAAABJRU5ErkJggg==", mC = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAACXBIWXMAAAsTAAALEwEAmpwYAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAORSURBVHgBpVZNaFNZFP5e0mc6E20bSh3aGaadQWfQGTOj1gouGgTFla0rN24URBD/KgpCVYw/oOJGEFFBUDduRLAVBFFoI4IbbWO1Cv417aJVqzY1vy/Jy/Wc9+5NkzYpBg+cd8+795zvO/fcd3MCzCJCiBrSI6Q9pENiSibkXAdpE8oVDpIA3ytXShFpRcD30OAnreH31IMAjO5upGkUk5OWj7OxEU7vf3C1tWFOq0+FhkmPapp2tiQBl0OCW4Cx06eQHRmBc/58aB4PHG43RWjIRqMQpGYoxDGovnETFV6vgvETydEZBDJziz124jiSF85DX9ECh65bTtO3KqRm43FkBp/DtXUb3IcOq+W9aieaqjkN/VwWBjcuXYROGTksB0GqlSAQctRg9D1B5c5dcB88rMq1lEhCiuAKDZszzwbEZEuzpi9Zggr33FzmllIpuDwKXkhKJjDpaX6NIP1iEFV370G3z6WXCFZrMvshnlnQdh3D76PwLqwjLDt3BtXyqmnnXHBwNg2NA6/H4VtWj/sX16tVTwU9NrAVeDJK4BGynPjyNYVKV4XMWMNvdT+jc8ti/PV7FZxUt+dvwzh57SVGP8VzJEY6Q4aDcMYsLN/yBl7p4DK3s9UVGLYcGHQ8bCCWNBEn9czTceFAM1b+U2vZVW4dq7x1uNzZgl+JOJbIWL6fwimKteO7ekNqBz4m+J+tgdefZRkclE2WAgxEE2ns37QIDXU/Ybr8UluJzs2LLQL2TRimXNHwoH9MuTVxiawLFRqN5h0i3YNMFuloFs2LPNa3Xkz+/bMakXgaU8v2mYUjqRyBozBEmzbOLq45TszkLrw1TBBio3quS64Xgg++m0QpefRsvOh8U8M8ZYZzBL7l9fbUtIz2n+vH2OfEDJAvVIYdZx6jmHgX1iozyAQBttp9jSjG8Go4gnW7e9Db9xFpOvy4kcHD4Dja9wUw8j5elGAKC1180fiQJ/htzfY7CPR9yH3/5Yl92Rrr3Xhza6Oa/MNekr/9mUCviFXqIkGaJDXKUI7hWPNpMNcjprjtBsNdSqSOHxPxMgmSkiB14lh+x2sq3KDd/oQiUbtIlg/O0lG8ikL4lYcZDIrE3wtmECXzlNeMtWuESaXNE38+ZrGWyezc2awbnqXOZt7uhng6ADESsp2qa+BobYVzfRuNs7fMUjvhM7kqvl96xA/8u+iQABN5gENyzi8/85LyDV9VvWnIUvJYAAAAAElFTkSuQmCC", LC = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAACXBIWXMAAAsTAAALEwEAmpwYAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAMTSURBVHgBrVZPSJRBFP/N525lGbua2qHU7dBFMwgxULIIOiQIRbcOQVJ0qEMb2cUOrR0CI6gOBYGgdIkuQiToTVPaDkGWtVFEuGodKtddt9VadHd6b3bm80NX2TWfPOfNn/f7zXsz35sF1hAppZf0Bukg6bhckqge85P6kK+wkwbIVbpXIxJZwC9TEyD1cn9m5CV+PB9AZCSIhdlZtaawsgKe/fuws6UZJYcbjWuMtEMIcW9VAk6HBlfAX2/fx5/Jb9hcXga31wtX0Va1bjExj9RcAnPhSfZC3dPHcntttcEKEEnHCgK9c8X+5dYdTDzsQsnBOlhut2Oh1JZUFtuL8/OIhz6h4twZ7L1+zcBdMZEIk3NqRjktDD71qJtSUKMmxbIwBf0ZeOnQ2Jt3qLx43pBwug4QSdgQdFNzNj72AcGGY/DUVsNdtC0DTt60kBdBCI2mmgyR1PEsxH8j/vEz6vt7zbkMkd9RoXc/ziPD1fVITk4RQY3aqVAwIhOBCUPaSbXNtB6efR+C91Aj6gd6zaJiF/07mTnUIP4SeAHZqZkoCrYU2jlfghL6CGwWO5JUMgmL+lHCmRkOmij8THCCrV99/WqBxQc3HYEoKTZ7X1uITFLuUrGY8pfk8rNvwBAc4RRF+XAjkQhSqRRcLhcsy1J5V7nPQQgD6XRaKWOwf2lpKU+FOQL1QfEkTyx3zFXMhlgdfj7LucDZrkeyRc0EYWXotGyEcJq1xFyawDfdeRffH3Tpg16fpJVK7Lp0AcWdN3noLWO9YKuMChccX2i+4vQpbzluzGd8i/iQ+SZhtPkU4iOvVpSHXAlYN1XtRkPotRneY1HeuW4MqV5727p27ySpfdJjuj1ci0y6W0lj3qZG+Nqv2rvJB5i1inyLqEhCvw1sKAJmMgM+iqIqDxInOGdAS4fGXPHgBKjhRweJsRBCp1uRnJiy58UyYBZPUwOBt4Gjd4AHsvkYEr8mUV94jIpXhGpLgko5F0MWl8ejAHfQbXEAZ30ys4edefR7ZO4yKP/j14VfA0QdgON6LKCv+aryD7yb2d+BlGG8AAAAAElFTkSuQmCC", vC = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAACXBIWXMAAAsTAAALEwEAmpwYAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAPRSURBVHgBpVZba1RXFP72OXMmM07iZFITqgVJSymWmdCKFotK24AvTdHaX1DzUvrWFFrsW8cHH6IgguKDeEMRfFQfoi8aBeODCEpMJIiamIsJRs1tMjnjuWzX2nP2uM2NiB+sOfvss9f3rb3WvgywDKSUtWT/k3WS9ct3mIj62sga8aFgp4hgpTi9lJBYhPwveuTJavnd77qFN1c61FNOTakx1vr1sHNNiLe0ILZ1u3adJNsnhDi8pACnIyJXhO7hQ5BDQ7Dq6yEytRCrUspFzhbIZhEOPiMfIHX2HOxsk6bJk8i+BQJR5ErdPdiO0onjcDZthuU4EMRCTlBsykVCql8gLM7B73uI+O+tSPy7V9P9rWcidM7pcY/TwuTeqZNwcjn1URCLJcxoRERf1uN2SOLe/Xtw/vhTi3C6NpLIgBY4TY89fm+PLDb/IJxsFnaqGlZEKjSbEIDRrsyC3oOZaZpJH5IXL+u63CCBZhFF3889Y8PDkL6PRDIJy7JUWrQx7ry+hg01G7HaqTPrhjAMlZXcOdhVVaj/dK3+nInRz25ulUolhERqE7mkvMO2yxFHkT4p9OD86FGsHs8gl/4eO9ftQdJOKQE1IxKwOFUUIHNVkRChjbPwqyqs66qobSI2o2aCgj+NjtFzyDgNmPVn8MIdxow3USY3wP5szBXhRxb4Vi1LUtYDNDGj4E/h1NP9GHefY7w0Al/6GJjtQ9fLq5gPDor9Pc/TXY2cIrWhgiCokJvRCynwJnQxMtevyGPCwapYNa6OnqfiC+xa11rx0WbMrNEy1c2nEkCIG+MXaTXZCIi8SOkJpIeCN4maWC2qrMSCGZj+Km1kA9zQuTfxqjSG3um7eFx4gJSdRkPiM1UDXvtCWBhzh/Cs2If5iMViujlZEYjH4wsGPik8xBfVX2P7ml+QTX9HxR1R/f9tOIbNmWbEaQaPZrqXE7jPrZtkP7GAUX2FLZ/swBbsUO0LQ0eQsFLwpIu1yUZ8VaPWhkrbfERLlHGJNxoXeYLfpui01MXW6fLCEh4VulVxv6xuwu2XHXCDIrataaFi11RI9YZj1NVVNuLn+qjo5FnI210Iftv1/hGxQoSR2ddvQmRz3HWGgmzVq4jX2qTYug0WHVYSHwY93vpnryZXd8P7g8rXn0JwsF0GDXUyjEwuY/ydxwYH2s0brm3xSKTMV4b0dMtg0zcLhELDFPHunTLsumWS503Oxa5MVuebTe1wrgvoykTvA8jBwbJDOg3wkfxzCzitERa9MpeaCV/6Z+TK0Sk/4t9FW0QwYRD2R335aJkvibelF5SFnL7sjgAAAABJRU5ErkJggg==", qC = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAACXBIWXMAAAsTAAALEwEAmpwYAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAOnSURBVHgBpVZLTJNZFP5uW9upY4tMhwrOhpmxJMxgMw9lHpmkzCRkMhudzGKSyUiiiY+dgolLY4ksWChxQaJRo8aFiWkkMW4gQKgu1MSgiMqiasH4CIgE0CKltFzvOb23/JbWQPyS03Mf537fuef+/38LfABSyrXKDinrUzYsFzGpxxqVVWKloEWaYLk4W0xIFCDfp1xY2VrqX+1/gcvROK4pP/UmxTGV6z0IVvmwte4rhH5cb5ZOKWsWQhwrKkDl0ORM3HqmH09GE/B/thqlXhfWuFdxXOLtPGZmUxh+/hpS9TuO/MWCGmEl0rxEQGfO6odP3kL7xfv4aeM6OBx2DhOCYpDz2cUSb5Np3Hv0Cnv++QYHd282dE1mJ8LUXLk7VJbDp27heGRIZfS5nhY6SuTX0jTY+odeYu9/NTi4a7Mp1/dKZMQInFVu+93YBDb9H8HGQBnWrHZm083lyvvQlNIiJ2k93iSSePB4Aj0ntphziSqB34XOfphGNmy5wDUPKgE1maURhnaRfOlOJPvBh+MI/VDOIhqlDvXzN7Xm5uZw5ehvaYfdDpdrlbDbHZJEhFjMtaPjEnw+H0KhOkv2WZHMQkYkkymZyWSIy+FyuSigkQS2UiuZTKLU43QowK5EyAxIpKenB8gk8WrsGZ6OxFBdXc2l0SXGwoKA2ymQTqeZSwuEbOrnO2rRhM1mY+PySGmpguT5eDyOWCyGmZmZ9+atidD6+fl5M1RJZ8CR4+PjuQAjYkUqlUIwGER5eTmi0egS8uwuFkAlIpSVlbG3WdWtPh9tbW0YHR3FwMAA2tvbC8bkn5kRGOFGgawNIpEIWltbc/2Wlhb09vaiGOgcNaaoRH2qUZdIJPhJMkJGbHp6GrW1taivr0dnZyfcbjcqKip4noS9Xi/HUYnIqER0wB6Ph4ajJHWVBJxOJ59+PkpKStDV1YXu7m4EAgE+bL/fj5qamhx5PvQTRLhMO6Cv5iT1Dtz4F4OTN7MvsMDKkH3XsO6TL3D+jxtm9Eub2ip9N6LUa6hq4iiJlcO8cIc2nTZD5+hbZJ6iHcqmgr5f0BBoMt+vFWVP2KbWfu39lpp8N1CDBUjJDGyr2s8icjkii58hJm9QazWaNeeSCyesHF06iL8eQvj2TozNPit6HETMu97QpPzPVvKw6RS6Mhu1CF+ZgxM3cf1lFwuOzT7lmE8dJUz4q/9PK3HBK7NIZnzpn5PLR5/8iH8XjZpg0kI4rMfC+jEvincFxSmb+2WgOQAAAABJRU5ErkJggg==", yC = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAACXBIWXMAAAsTAAALEwEAmpwYAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAPqSURBVHgBpVZdbFRFFP7m3rvb3bL9gUBN/Gnpgy9oE42ND9QE+gCF8oA/CYkxRtQXE2Nc4t+LCYsY45PWSNJEje2TxvhQIRHkQaAk/iQNASuQBsWyVQtKShf2brvdnbnDOXPnbpd0l7RwkrNz79yZ75vvnDMzC9zGtNat5HvJj5NP6kWbtX1p8vVYqfEkC7BcG6pHJGqAv05NhryV30dPTePgib9wktqv//xUtskbntPeDvfhLsT7++FtfCKamiPfJ4QYqEvA4bDgBvjDoVPIXvbRtqYRq5sbMJj8NWhW846eKwB+AWoqiyCRQOrAILyOjggmQyT7lhDYlRv2/Z+N4cA3Z9HbfR9KSpthgkZ+8ka3alkVc2lsNAdBEKBcLiOZTKKpqSmC2xMpEVHMqTnNYdn/+RgGvz2Pxza04bm+Tgx/P2lHCXz5dHNpjSddCw/mMSTkpVxONyaTTrJvm2PD9SiRXPIsI4em9bcLM/jgi9N4+4UudG9Yh8cfWoui1Bi/cB1jEzOID3zkxlXBNcgkSRsaGAIvfwNyYgLyu0OcF87fEHmvZ1e/m1meefMoCI/Acnh+x4NINcYIQeDkmf+NArl9B1RMhYp0CM6/TMBK1PQ05qYvozlc9GYuc1bwZJTU7BWfnhxc/NvH3ILEV0ezKBNjoajMDLnzKcjWhuqiqLRKKQRSokSeKJUQj8f5U5oJdvLTwdFsmBKSnp+XePbdX+BT23nvKswVpVmu8/57QYNb0ri18sJQ5fOQlGxFSQ+2bHXw0suci01M8AgPHP9jxqye/WpuATlfIplwce7i9UoovGM/CkflPWhdzQDMF2n1ZRM5wYT/XQER8Nf1Qlud4xP/mvGu60I4DgkJK1hU7ZQOOYslZuNvkq0Co4DfV3d1mc9RFaHdLRhQJnAYVdTAisdQzwQXVqDJVZR920+HGEtZ6N0E5/xZuGEmauHf1qKS5X2pe3oQHznE3TlWcIkJxK5dCA6nTEjEStGtkQBD4PZti7rOsIIMPeyVVF6+74c5EKKSg2UriPYClWsqlYLnmejvYQLedSZ78yMjEBQm5w4kRATB/Q+gcfeLUXenRyvN0YcT9LI5cU8b1CsDplhXmofAuntsNOoa5rNoyWEnfziC0uw1UuFEZ9wyVs/xDxBbuw6xLVu5q3LYVR/XaWo+5udisWiO4MW9IOoALx4VsVgMCbobrN16XFdNyCA8WaGnpqBeexXin6m6Igz8xh6It96B0165cPhWy0Qvta7MtCUxV6b++SfgyGHg3O+G1ExoaSFguiq390MQgbWaVybqSOdLf1gv347ru/h3kbYAs1WAk7YvY8u8rt0EC8pxY5/52XQAAAAASUVORK5CYII=", wC = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAACXBIWXMAAAsTAAALEwEAmpwYAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAANaSURBVHgBpVZLT1NREP5u6RV5BAoGl00x1g2tYDQBiaZoSExIiK5kA1ESI+4sJsQlZWlMDDsTo0L0DwgLG8OiLHywkoeGQEhsFTcIhVIorZb2OHM4By7SIugkc8/c05nvm5l7HgX2ESGEg7SXNEQaFjuyoub8pC4cVjhIARxUBvIRGTnA79IQIHXw++a7t/gVfC1HsboqfWxOJwo8XhxpaYG98YIOjZH2GYbRn5eA26HAJWCq/xHE/DxsVVUwKhywFZfIkGxiHSKRQPbbV4oBSl68REGNV8MEiKRvD4HKXLKnHj7Az6dPYJ49B5tpwiAUCoJEkyECQj6B7EYSmzPTOHKjE0d77mu4bl2JoXtOwzi3hcHTz5/B9Hjkjwah2AxrNoaC3+JjO0vk6YlxmLfvaBJu1xkiiWiCARpuZj5/QuKyD2ZNDQpKSmFToIZGMwzAYm9XQe+ZtThVMoOiV8P6u4wSwSVDZR/mmerqakQiEdTW1uJP4RYJIbCfTE5OoqmpCaFQSE9V2OlxTdKNjkpwlmg0iqKiol3BQn8HZWtSLalUChqHlYlI/NyFq2wNDQ1tOy8uLiJBq8SqdrsdbW1taGhoQGVlJTY2NuT8+vq6HJeWlrbjLVg+qF0piFG3VKppmqKsrEw4HA7h9XrFyMiI8Hg88r28vFz4fD5psw/7WmPr6ur0BgxzBXJDhcPhXS1Jp9OIx+NYW1tDfX09hoeHMTs7K7MtLS1FV1cXgsGgrIZ9rRKLxbTpsuEvkslkUFhYiGw2K4FYuffLy8tIJpOgCvYH0IcYl2Ut06rcEspWOJ3O7Tm3253Xn9utD0WuIMJE6qvnlFU6g7glzc3NaG1tRXFxMebm5vL6U7LanOAKAkxFazdvRodVxlLi12e+yLWS/kVdLpf1GHfpoyLEXZqKfkDP2HV5+BgGDiUiu0Xx+GIQJ8pqeGqQFkOnXkWdpLHTx86jw929k8+B0beGdrdfg8u7gQ1JwKeenmg/dU+SiIOQKB/2baeYDopV0qcw91w4ARp62f4Sn0bg4y0sJL8jX7cYWFZ9spvGBit4QL/kujL9ikTu8KnoGN7/eCMJF5Lz0qfEXi4BG49fsQLnvDLzZCYv/UFxcAmJ//h34VcAKxbAsJrjPeTYD+M3QhmUYpjO6sEAAAAASUVORK5CYII=", xC = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAACXBIWXMAAAsTAAALEwEAmpwYAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAOFSURBVHgBrVZLSFRRGP7uHe09aZZFSaEuCnoaVlAG1a7sXbSINrWodmVQtIom3Gi1CGoRCWnUJoJoggwp0JFso5PvhF6Olg+0yWmccR537j2d/8w5OuIjLX/473nc83/ff/7//PdcYBJhjKVyvc61kms7G5EBOVfANRPTFTKSAFOV0omItHHAL/LGwTWVxi53N5xV31DNW99gVKzJXGHHxtWLcXh3NnblrlCmPq43NE27MyEBhUOCC+Cih2509vxC+uJULFo4GwvmJot1gSEDwVAU7V1+MD5+fnufIJTi4CQ3xhBIzwV74YNa3Hvagm0bliFnWQNavVugabQGw23cmGEoHEPzl584f2wtrp3bquAuqZ1oKua8qaewFJbU4kWFC8e39aLfPx8Z9h4EtQyk2Q28aduEKLMrj5RrQt0f+3Dh5HpcO7tVhWszJ/EoglLenG785MWWU89QfKISp/YyeLoMdPXGsGCejnVrZqHocToa/Qc4HEuILSN7DAbCaP3qxdv7h1ReqjjBHl16f5pmjl+u4HvSkZ1h4bc/ACMaxPIlUcxKDiMcGsL2zRqCPCRDYZO3UkOmGNtsScK2sKROMe+mY85ncUQltaM3wHs62rxZ2LnxA9LTNEQjFhal6DyxEZS7lyPEwViC9ypcESMmbF3uXoEld1FABIep53R1xFPCs3j3ZSacrzoR9PUhEo0HJCMrG+3GGo4VE4lOOByiFUeY74BInVUeRbCLCHKo1/TZKzwg7Q/Mgy9pP+babXykCT8H/PSMidiP7CBOEIqYMGIm1Nmqru9RrzOJQBSUpzswqiqMmAUjYMGma9D1MfUYPzsWg8XYyIGSEVAFSQQak3uM5OZA//EdtviysSX+F2FSTf4wV67EHHeDmKeYeERvYQpmSvRVq1TXN0xgy8vDTIm2br3qNhCBS7Dm52OmJGkEy0k5oCQP0Ch29BC09zUibv+SA4uUxz+5rkFNZ+m8nOm7UUUj25Wrw8limJ4om6RHT9RUGX2LdDk4w9Wn7ciDLkmmC06iX76q4i/uhtGL4tefEPNWMTOXpjFLKptE6T2tNW8WJ95wBeN7wphjeElLEzNzN40hshJUAB85yKyad4ngjkTM8a5MYqebTVQ440nH63KgtRmsszNukMJrZsdOYF8+KKxSxr0yJ9oJXfplbOpSyf7j76JAAgwkALbLOYc85hPKH7zWdYk7drLYAAAAAElFTkSuQmCC", WC = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAACXBIWXMAAAsTAAALEwEAmpwYAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAANFSURBVHgBrVZLSBVRGP7OPDTT8pYRuRB6kIss7EWEBbmKCiylVcs2LtpkULjsurQHtAtdpEGLqEUEYUsNsiKUxMqgB5pBalh68+Z9zczp/+ecuXfUq6j1D/+dc878//f9jzNzLrCESCkjpFdJu0mHZU6m9FoT6VasVNhJAyxXOhYjEnnAL9ItShrhuRPvQ3q6B5l4P6Qb923MgnKYRZUoiNTCKjkYuE6Ttgghbi1KwOXQ4ATcj+T4HXiZMRhWGQx7HYSxVtm5s/A80tR39kHJ9ps+oZYokbQsINCR++yJsXakJ+9TdHtgGjZZSZATGWWt6VJzz03ASXyGvfEsisobA4NLQSYiqDnd3nBZkuME/vMhrLWVMAwBQ4OLcEhScXH00iMSmmT+DMHedA5FWxqDcu0jvxFDu3FpIm7io0xNtMMq3ARTpGAiCQMprTQWSXUP1oVWmtuFm5EhXy6t7l+HH4+OfpgnMx/qINxx2MUUvchFr8LnLGSuSggyUVm4lIYz+wko2o/iHW2BxQaLfup5NBnr8wZiXz3DBNZ4P4RlrqGmEqzItydkaGOomjlOWiYTKbjxl6gqe22VRw7x4yYmOMOjB6NPjEcTUwYT2NYs1hdsmAceakAeopl0DMlMgnYY0FDchQuK4BgT7OXRl9iQHzGjOjKN35lfKKQs5oKJuTxQJUrRTnI9R5XTkBicfBXwbrV0QzCR+KYcNYYjM5R2hvpgUhNFNgOpYlA7iC9qQLYz2j/uxOYQ5B7mGXuUs4d5IrFs4aKM8KDELl343ViFMEZ5cUUwnc4SVJcdxv+S7et3BcMBLtEz0toG+zh2tt12DKFqvNJs1JvNJZWovnGCA2d9zC8aN3mKjZyG0xAvev0nqyHgXnkVFbD7BoLlbfTCCv5u9PDMvNKsIsGK+pjLgNS6ey9Y6gx/i86TTouaIzA0yUrBWYzLzRBVu3nonw1zjdTx54t7vVW6mzdKT6tcQvk527rXWsMnXFP+SKSMZk3eDUr3QPUCIi+kPnB9nfR6n4fBo2HMfEcms/ufb39OTcfTLuD9W8jRUeVQWgrUHAVOngKXVUveI3OxTPjQ75TLl275D/8umjTAVAhwWK9F9TZfVP4CKedExhPzLHEAAAAASUVORK5CYII=", RC = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAACXBIWXMAAAsTAAALEwEAmpwYAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAMjSURBVHgBrVY7T1RBFP7mPhYBhaUAE/GBtuwaDFooGtGSyh4SpVE7sTCWLHbGxFBYGRWiP0DUREswaiwh8ggVixALaHjIArr3znjOMHOd8BKQszn3zJ2Z833nnDuPBbYRpVSatJO0nzSv/sqc6esgrcNuhZ0MwE6lZysisQn4HTI50jS/R18+4/eH99qqhQU9xzt+HH4mi1RLC4ILF63rPGmXEKJ7SwIuhwHXgKvdj6Gmp+FVV0NUpeGVlWsXWViCKhQgp76TD1D+8hX8+qyFyRFJ1wYCE7lmX330EL+ePUXYeBZeGEIQCjlBo2kXBaWfgFxeQTQ+htT1dhy4d9/C3bWZCFtzMoNcFgYvvniOMJPRg4JQPOFGIwz8Gh+3JZEXhwYR3rxtSbhcZ4hk0hL0kLkRjwyjcPUywvp6+OUH4RlQYdGEAJx2kgW9xz8XKZNxlPa9td9lgAiuCBN9nnuWGhsgpqeIIENRi4QATgZKJUWlnzAtIKaBaHQEaGpC2et3dlJVQI9r+qOOjcq4tlb6R49BHj4sQLXXFRcGQbjrQcFUSZPoMkWRkhUViGOJYj4fhCdP8nAHZ9BPjeYFWoIrKysIggC+72tNVgKXw3xoa01pEyulJPAYURShtLQUlZWVukxchQadAQ14nqfVAiXxOkDWuuNuIOxfLBZtVx2XSG8ojoAHXdkMZCthcKuOX53nTnDtXsQSuMIEk7phSrMfwt/RyHxCkEqlsF/iEAxx6yNp86IswZPBOPI8H8LbQyaKN5yEij3cOnfAO7RWnTdMwGdG55GKEJEIguFZswx3Wy69sgRqyjycSIe2t482rOBzY4Df2rIlaxOTQ2A3CSjt23mpzHb18llkV1E76fzpmgCt2ZQ9xXYVPWtrpgSnqvQG1XcDNzQBM9mONprUmknRfGkOHvVPcJ7LPm3ZZKF0GcwNF06ODF86mJiXePBpFTPLfNrYaWIdoUK22ifwEKdrfBc8B8djXUCqw5DoHf5tNsbXHzEm5iRmCmvgBynQLAGer/Vd4E2vzC2y1pd+r9q59Kv/+HfRYQDmHMC86cuRprfD+AN6ofo7K7nyOQAAAABJRU5ErkJggg==", BC = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAACXBIWXMAAAsTAAALEwEAmpwYAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAUNSURBVHgBpVZrbFRFFP5m7j7bXbYspY9FaEspUCpvNaCiaIyBSJWQ8ANjjGIIhUjExPhDY0pNABUNYmJEjIL4iNFgNJBQjRHU2ATxAYTyaC1dW2pb2u5ud7t793XvcebuvWVLCsEwzbk7r/N9Z845M6fADRoRFQlpFHJMSCddbWFzbquQSvzfJpVMgJtt+69HxMYBf078bBNSJMehX35F/+FmFNdfhN2v5vZkytD3eRlKV62E/767LdWIkCbG2Nv5eLZrwBtNcAO44409ULsuw1kyGb5FU8hT4TcMirVGMHL2HPqPNEstLP7iY3jn1UmDdgsMnyBpsjD5OJajfceb+HPdM1DsdkyYPRNO/0Rk+3WxOWlIqjMLu9eDorl18FRPx8nV69C+fZcFtU3GZgyB6T8DXO3dR5nBL2niwnlAJgNKJAAh6oUoFJaEwpNIdsTEnGqsSQBf3WzEz39Gat8+C7fRiol1AumaosSl8zRy5j1WubmalTysgFQJIkRNItEWY3LMsirFT0XFfDK3JmTSPaBZjbNY4u+9iJ09QWb89hsxMJmekoPfVz3JkBlAzctVKKsvAM9w9H0Vh5UOaluUmIMxPaEavpdIZWs9KF1jZ8NnU9T6/BXmrn6d3dn8tdRYLtNcBnl1LqgtSHZ1QxH94M4gEqf9CKzzgus29HwSNTh6DmblmUlPpI1gBx73oniFDd17+6nvmzDL9GaR/LcFoZ9brOzaKgkek72Bw0cNfzHxlx0cwsARHbGTEdy2fgJNmEdwlCiY9KCDhN089GOWUj1ZFNZoaF3fidQQMS0SMfRJUF8R2WUS3C8JFuRyuw3eGruutmc5pdKCJAQ17kL7KyNs8iMFqHh2otilMWmCd46T/fOOinNbumWGQBMx0kVCSOPc5YquJ/6wYltpMwOCigYVfGM5V8RSujurpwc1rgYz+uB3KVb8EGegJPJbSb1C4ZYMK613wz3DRc6AnTlKuK6BcY0ryCfIxZDlrrXx62CcuxnlTpYlka7CMwrPJ9ASIoWzGhQ3dAbOmQJd5DFn2tjnQRIEJVPwXQ3R4716MqiJTWTmTW7v0LGE7lviGnOCweY44hfTaGsMWcRcF5+C2XYqemA6anYZuhFuEoC7FiHeIfyfA8+xexlm7vBT6orGO14dotiZFMXb09S5K4yR82lWu7uYXAFlDPHIhTQjPtM6xClJ8JPsTRYPF5ADl1//vW6640iAtChR6HgSvYfi7NJrYdaxPYSeT2OInEiJE2TY3A9LxT3wgPLjs2qF1f2WycsgOmE5+mvlGiQv/kZVW3wofdTDLh+IUnB3ZNSlt79foimFjJ9+on90blqDD9M2+TDwfZwuib1kL8fS1pPWcpVNvHwRQXJcDJbP2Pki2PBm5g7YEdwTocsfRcc8555aB2d2xriNQc/mbO7aOwzSQFM3+5hnvpN4+UFL54DADloBeloGxLtgCQrqNqHzrRB1XwNeWGvXbD6RLAXiHixw5C+h64Nh1t40RPaKBriqauWUURuM2MqPZBqdKN4A27SNRo7m+9Vb6xxN08JZVwmsfa45Dcw+ZYNlVJOJebUemJXIIKl86QUsbvkBzoqpowDehQ6jIy4uiu5yada8b9lSzD96yNDJAx+tauOVTFksjOfbOKt4BIfE2xJY2wtn8YCxJxsvRPfBakwS2VK07MYlc9xmFv0DdPPtGN3CfxdbTYBwHmCnObfNTPPrtv8APjzc5aHQnD0AAAAASUVORK5CYII=", SC = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAACXBIWXMAAAsTAAALEwEAmpwYAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAMhSURBVHgBrVbNTxNBFP/N7rYlIKWCIRo0EARJ/EAPHPw4YOKBg4n6B0iiNz0J3k1LSDz7keCFCAejJxP0bhCvEmNiwk0gGg+eutJut9uPHd+bnSmtaQUCL3mZeTM7v9/76kyB/4iUMkWaJl0m3ZDbktVrU6QD2KvwIQ2wW1loRSSagD+gIUOaYrv04ztKb+ZQ/rwCmfujvrH7+mGPnEfi2g3ExsbNUZd0RgjxpCUBp0ODIwgC5PN5yLUviM8/hpU8DNHeoY7IQh4hafXXJp9B8tlbOCOjBiZDJDPGsJp4jlwuh2w2C8uyEO9Mwkl1w7YErGKB1FNz51AnEiPnEO8fQu7edRRezNYIuDbGcEzO68F930dbW5sisCBhE/C/uZTROTWPD59F8Oq5mrfff8RDmvaWKJJNEwGnJlUul+F5HmKxWATOSiDsufA9CB6VelE0gU/kvooq1tuHgKKorK5A129BpUh7f0dVyXVh23YNnDyAkGEEGviNRDz6ngLndduxYROGP1dL1VVuc07RLdUtpZIK2XEcBaw6gAnCUAFJ3RJCRunRZq2QkpqCSoPq6icVhRN11xQT3DQEDZ5rElSrkOQhsROwiLLPe7K+GrS05UZEpOUP7w3BOBNc4FmlUmkg2K5mSHF70Umh/ebimk9oLqgOolJWBKGOQsuAowuCkFLB4A2dwl4TMfwC6hi2PWciOqdI9K4iybkNBA3S4D3Jt8EYZjPd2FE0H0KJ3sQRvNTLTLDJTNw9raTsCOyWgDPa03XCrLqWJlC9fxDCrgwmTxvzKxOoX0Y8Hq/9MvcjjHDl2IQx3zGBuv24/1n3S3K0/ThGey4Zc8mionLJP7LF94/qHK178jy6nJAemzdLi/V30V1SlyNIJBJ7j0J/fnt4GieTZ3iq3gaeKAJmMgschalHpDsA6+5h8MlTD83OjMZE7XfALxFfTjRNMwl3VbFYjKJpQcJbnO/JoWkaL9aD1161Zk8mPxbq+mZ7K3Dxev0p1rfW8Nv/qb7pcLoU4OXeiXrgpk9mC8/Uo78ody/Lch//LqY0QLYOcEOvZXRaW8pf3wcNaSvhdNoAAAAASUVORK5CYII=", EC = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAACXBIWXMAAAsTAAALEwEAmpwYAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAOLSURBVHgBrVZNaFNBEP72JdVQNa34U0Uq8R9R0lY8VEWNXrwotRdBtKKg0ouYCp6TXHryIIV6EloUbx5avFg8JPUfLBq09SBYA62CPyVpDE1i+t46s2+3BtpIqx0yb3f27Xzf7szs2wB/ESllLWmENE76Sf6RtB4LkwawUGEnDTBf6alEJOYAv0pNlLSW7UQigf7+ftVmMhk1JxAIoLGxES0tLQiFQsaVX8aEEDcrEnA4NLgC7OzsRCqVQl1dHQ6uWY16v1/N+5z9iVeTk/gwOqrsvr4+2dDQYLCiRBKbRaBXrthjsRi6urrQ3NyMPT4fTviqkJMSOUdi3HEQ9Hiw0rJwr/ALr7JZDA8Po729HZFIxMB1mJ0IE3Nq3nBYGLy7uxu0Iuyr8uKMbwkeFEsYmbYRJJuJ0rYDjxA4vbQK94tEQu+GhoYQDocNCYeriUhShqCHmvPJZBJNTU0IBoPYRuG4sbwadwtFrPVYuLR0CS3H3bBDJLdo9T4yV9BYz1QBXyhkIyMjiMfjJi8JIjhi6dWf55HW1lY3buTU8KuIoewknKkpXJY2RCEPKz8FQbYnn8cVOY2PlIvvuRyO2iV4vV6Y8GoJcZnz6Em2koODqP88jnoKw3pOYLUPOYrzF4r7udxPnTBh8jVTGEWaMyEd7KBQ1ZCv/ewpRp88xuaDh/h1mAlauLfz0QAGalfAS6v32EUIb7ULZ/HTYlidMqltuH3+CQtOrgB7pR82kVsDDwGX4DATNKqpw++UmwItEsHEBEAVBFqhwjQEikOW1zZEvgAxXVL+DuvzZ+ZtgAnUgcLYmAqBMCSlkqtUkia5M60GVkplq0i0n0VPm0JcTqDj6/rPOtq2jfmKKFMjvKuU6vlrsFhibdxoupkZAs+BA1gsEbt2m26SQzRIGvrRdhx37F5VNELgn0SlhB7nCGudO9Qv+DBQJ83W9Ren8Db90iVYKInOeZ1vA+4cfWFGN1l0avm7kWCrbXuHmiWxcFGVS4/I3ttmqJe/RebEXCDNBFftQ9u2DrfkF8Ki554l3y3+XdxVdwN3FAEzmYGz268pEjkfEj2H5zJ4G/lqiWnMWRdOlBr1vR3Nvkf09UV8zY9XTAcDq11v7aC2uRw8aoy5rsywJlEn/O3ESzz/NqAIv+bH1Jxl3hoFuH/tsXLgOa/MCitTl36vnL/E5X/8uwhrgHQZ4Cc9FtVlXlF+A8HQFtmspAAIAAAAAElFTkSuQmCC", kC = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAACXBIWXMAAAsTAAALEwEAmpwYAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAQWSURBVHgBpVZZbFRlFP7+u8zmtB2NMoVSAYuhMRRjojFSo2gRlQfBRB/ExPSlBGOMg2vUB4b4gktijcgDMYU3NcEgxvggIWBLo4ANUyq4xZluglBghnJnv/f+nHO5t50uQ9pwkjP/fr7/fOf85w5wA5FSRki3kR4mTclJSbtzMdKlmK/wIdfAXGVPNSAxi/HXqImTRnj8c99ZHDiSRDe1masl/HKuE4HFC6GubIFv/Xpoqx/2jmZItwshOqsCMB2uccfwjq4+DP1vYMFtIdxa60c4qOPz+w0oeQPIZmFdvAh7UQNqX9gEXdc9M3EC2T4DwL25g/7B7hPY+c3veLAlCk1TnW1C8B7gyy1N0FWFT/AZ2LaNUi6PkN+H8Ipmz9xWzxPhcU7NSabFOPcFDhz8FSPGQxgYiSJb9KFQ1ibusv98F3RpupdyYGATejlxEvrmLQi89Y5H130EMqi5iExNxCr8gfd39qMntRHhkA9N9RncuWgMZVPDiVQ9pK3AfOVVS1HZrAvAXpDKXA7G1XGpGIbqC4c5fntIH9Pc27czyvGeOHYdbMOquxXUBq/g2Qf6se7eFJLnIwj4WnDo1DJIXVehePw6CFAYqaYGQtrI9R6F78mneHkNpzl7sJFHVvYY/hnNUU/B5fESaoIWQpqBgGrgngYDGWMleVKE/83X4bfLk4nBsaHWLpagjY6AyTO/+97LrhgDbODej0eTWLdqCHW3lDCWKcJHWXFooB6RUBrdfy7BmeEQxq4I5Hd3WbZPwbTsg22Z0i6bMC2CiEaVMBw/HxX8Kpn/tS//gKebv0Jr81m073oGw5duR/NiSkVLQZn0wnjIISXZLhFQZKV5SNN04sBqWjZEXR1qn3ueFwcZwNm9fMPXlPNZtK74D4+3DKMvuRA/9d9Fx4lyZfK5pIfeg1+WvQgTN7bTOjQx1dSxGhsR7Es4+7UpvtINe/9qRO/fS6bc0LInb5w9dQbmNIo8mlgty3LaoDvPAIOkS9/Fb2Ym/a9DnJhZQSYkuOM0NFWZdc2jCU3LFXRs5k2ZCYCXHolq8kI3VHH9SVWF6BmddVq6ZwR1xB0LvOkExyBOnW0mBcowDKiqSmVBODofqaQoHA5TiXHY38oA/Oo4k1D8+EOI48dcmuYnXpDthkYEOj/zppdpdNMMgRyhwRq97QnbTCRsKcS8EZyEoh9/R4eXOHu5Fs0odoVCAaVSiVJTmTNNHj1csgOBAE9NLXbcoQ1cwz/lDdr+b4FPPvJKTlVnZIWKN96GuulFb4k/PIMzznoBdwanB1Det8+0r7/DWUF4hZNCbVuridWtlcbjuIG7Mfej7ghll8zn8zKbzUrKsgnlOV6b9kcghrmI+9HfK+cuh+VN/LuIuQbSFQZT7lzcTfOqcg0XGq3yotVfiQAAAABJRU5ErkJggg==", NC = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAACXBIWXMAAAsTAAALEwEAmpwYAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAOWSURBVHgBpVZLaBNdFP7upOnf/ulv21+q1GLxsRBMfaELrUrVhWLxuXGjqN2ICGIFi+DGuJIqSheuxBe6cKELdeEDwSoYW3ShVi1FkdRW8W2aNk2mzcxcz7kzN0kxKSkecuaeuXPO95177ivAOCKlrCA9StpOGpEZiXp9zaQzMFHhIA+gULmYj0jkAD9ATYi0gt+t8GOM3rmtWhmLKR+jtha+unkobmxEUf0KHTpAekwI0ZaXgMvhgStAs+00ZH8/jKoqiMoKGP8GVIgzHIccHobT94FigMDlK/AF52mYEJEc+4PAy1yxmydbMXruLIoWL4Hh90MQCgVBoakQCamegJNIwurpRvGuJpS0HNZwB/VIhK45Nc+5LAyeunAe/ro6GOxAKEJkZyM8eJePbYccUi+ew79nrybhci0ikl5NcJGa3fbrVxhe0wB/MAhfoMwlyGSRYfLs9Cjo3R4apJH0oPTGLT0vD4lgtfCyj3DP9rvL8M38iNmVc10sfogM7pj5Ymjplkv9HOB9tBvzJy/FqZXXtFslJ7mFrZc/OhS4oJ4hK4oRaZImMeokMUJqOmyPoLq0FmVF5RixuT9BfeRHGrdjKrbrZydefu/QBM1MsJmt8Od7brbUE0v9gmknCCShWtNKoMz3H/bPOY6q4mn4lIjQN1ORKD8iGqQYXdPwl3uaoKGIHgvZeh/rVuBcD0uOqoB/fCXpqd0xswV98Xe4/+W6XkjpUjGR7VjuSjMkun50aoIZTKA21Ndkf9aM0j6QKVhWCobwIUDZByctwdXeNso4CXfFSgUuqfh6Ven4uBUbQ5D5mMN2pJ2249YgbCLWeIUIF6WXjTJ/OUQepyFrAG9iT1E/eS0KkerAdG0OpAkW0PIaT868PYKGqZuxoWbnuH6c5KxJc/XrCyZ4xNby6nWZkecowTfzE/Y9W4tIvAc1pbPy4atQxvLkJm80nuQov7V0bENXtNPbZJiYSHeDTy2pweU16X0wUx8V7dSskk/CsLduGntEFCiOp74HjyCCddx1iZZtk+F9byIdEPXLYdBhNYFFopNXIg4d1uDqbhjr5F5/SuyTrdKe8r90PJXjKH9nX/tEa/YN15w7EylDaZfXXdJevOAPIidLFfCWjdIJP84GD2Vj5roymZ1vNrXDeV5AVybevILs63MDyssBPpLXN4LL6knOKzPfSPjSvyQLl3b5F/8umj2AaBZgxOsLecs8r/wGe2aIenhMwSMAAAAASUVORK5CYII=", TC = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAACXBIWXMAAAsTAAALEwEAmpwYAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAM3SURBVHgBrVbLa5NBEP/t932NNo01mIPkYCyiAa1VKR6sFexN6EUv4qUFRfBqKj7Ag00uggjVo3jpg/4BilDw1Aqm9aBQL+1BtEXFovaR1LRJmsc6s9nNw6ZvB+bLzOzu77cz+wqwjkgpvaTdpMOkU7IkCzoWIm3AVoUHaYDNSu9aRKIK+E36CZN62c8m3mMlNoJM4gNkLqH62C4/7NogXN42OJ7TZmiMNCKEeLomAZdDg2P89xgOxweRz8zAcnywavZAWO5Cv9wy8nnS9A8eAw8ewm5sMjBhIokYx6oyc/RP9CDy7gaE7cDlPgRnVz1s26LOKaW2LeDUeOCqC6KmNoClK5eRevyoSMBrU0Gg66fAByZ78GqqH8F9TbCtHCyRhC3SsBlYkFqpgk+2aiME19FjyDx/Vk7SbdbEZMCl8X6OT8iBySfwufcjLZMK1EJaKwOmilmomNC6vAzH70eGCLKjb6HXr1cRaKar7DwYuy4EUQpLIE01tpBUYIJ+QYBCpihdUh2zpM4iSUrltKllpZRFG29zzuASex9nx/Ar+R1M8Ce7QBkwCIEyGNuUEaSxtao26pOkycTjqhz5aNRkwRLi2EW2ojOvVcGYIJ6ZR4p2ippxnoDzqTKt9JlYUInE3CxlI1QWuaEhQ3Deoc8ptqj+ChzUKStXsEgkkPV6J0tU7uxynyKzcxDZTCED1tGoaWpw9ILgZ/JbYaw+GVmZoZ4JFNOqJjJfICNwM9Sib47KVU5Qmlg1m+ekgDYWgYo5KuGpTbPhqdm7+t7YhqgsAgHjxooEJ31n8L9ENB435jgTvGGr1X+htHQS2xYe6rS3G/clE6jb74SvhbJowU5EzStwAOLsORN6QVtX8DU7wl5nsIsvpm0lILU6/YMm1EfY02b/XSONcRadR7pKvbcAzmLdvmfqr94GFeMPM5lAR/CWIqFECroBcrEPgVt37pqWiMZc9eCEUbhZ8WVxAgfn7wP04Ajd698zzLbY3QzxtYPq3loOHjZOtSczpEnUCZdJeiqXaKOlPtGJndG18ABuAq5rg6htNkOrPpnVMy88+n1y8zIsd/DvIqQBFsoAp3SMn0fvehh/AVzh/jmDo729AAAAAElFTkSuQmCC", IC = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAACXBIWXMAAAsTAAALEwEAmpwYAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAMxSURBVHgBrVZNTxNBGH5md1vpFmPjVwQDAgcTKYiJejFGjUcSIhfjVX+BHPwKMaEcjRePxgv4cTdeuKIJ5eSBKBdPoNeGtrRsu+22O77vdKYthCIIb/J0Z2Z3n+f92pkCe5iUMkGYISwS1mTLcnptijCAgxq/pAn2a3OdhMQu5I/pkiIkeO77PsrlsrqGYYjuiXFY/f2wR0YRHR+Hc+OmeTVPmBVCvOkowOnQ5KhUKtjc3EStVoPjOLAsS8GdfoHQ24L0PIR/ftM7QPzDR9jJUUOTIpFZM7F28VwRZzIZVoFNZJFIpCVSKsERAk53NyLDSTiDQ/Ae3If/+lVTgGuzTUDnr0nukXexWAzljQ1kC8Wm9wyb0mUR+GqXynAgEb00jODd23aRGVMTEwGnJlGtVlEsFhGNRlkUWa8Ir0o1KG2Bwm6gXFJRsIjlM/xGVD09CEigtrwEXb85Hjha6SFPNshj27aR+fkDklLya32NotnCMWEjW63gQk8vBJHppKoSCuhC2o5aqZKI81kV/g63OUcwaYrKXrNAnFIRIe/O9Z7H6dNn6KYPlzpIxuMUQVmJCEoPe84RqagotUwWptMmCrYph37umXY0eT5+eQwJErJWV3Eq5qI/mVTpkQSUPLSaT0I0AoHI52HRfZucrC8smPa9zQJXeMTtaAQUGT3okmfSiai5bgbQRwHVm632owh8iFrQiICxnDZ3BxxdEPURMXm7udeuwzXExkwNeI1B7ykRHRe5hzqlq11AmfHSXDtaEHS8JdpgjF1eVwOdmqMw3kq05ZsC3PtHZSI5YoYrLPDNCGzL9SHMoU1Q2xfBHwMNcjzjbaJer++ZrhMXh3ZdZ9dUB/X1IfJ9xSwPUusK3ma/8sx1XRWFwUFMajjvP5mleeJeN335iJDnXZM3uf8hZ7OePDf5V2eDWuMfVjILHEVXV9e+IzGeg8itp8/M8qzm3PGwlClzBtKXLfP5vMxmszKXyzURnj3ZRJ0xOSHD9FL78ZnCnh41DvKceToIAjq8PFkoFJRgeHVMhndvyfDl9E7iXPtB8y8RPvTn5f5tUR7i38WUJsi1Ea7ptZRu8472F49EclkJx3enAAAAAElFTkSuQmCC", DC = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAACXBIWXMAAAsTAAALEwEAmpwYAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAATZSURBVHgBpVZtTFtVGH7ObTugvR3d2Bh0bnzJNhggSLZhppYfi2Y/tAYTEwwaZzaMMZmYJfs1lI0//tBMM3XJRmQaTSRGIxpAxQ1BnE5WxnDiNpAvg6Xjq1AobaH3+J7LvaXLYJnxTU7OuafnPM97nvc97ylwF+Oc26i9Qa2F2gBftiltroJaKv6riU0awL1a7WpEbAXwV6mromYT362uf1D/Yz/aqPf6QuqaVLsVedsS4CxOh6PQrm/1UjvOGHtnVQIhhwauAr/5oQtDo7PYskmGOc4EmZqwWf8C5uZDGBiZAafvL9/arxJqVkUkx+8g0DxX2avPdOC9umvYk7sJRqMBieviMD4dhKJwMCbW6ps5/IFF/N43jpdKslFZvkuHe00/CdM1p+6KkKX6bAdOf95DHm2AhTw2x5qQlizjxvA0gUvwzoZ0j3TX1ObquYXDpTmoPLRLl6uASAYlbZWQxtbdO8FPnHEhaYOMuBgT7r9vLQp3rMe+PUnYmb4O9o1mgmKYC4ThDyqRNhdQsDlRhtgrpNXiVysGRs37F8RHyZHvGMhLq2UNMrda4XRsQV6mDcGQgoT4WDT+4safgzMkSzg6cOoJDAYjxN7qsy498MUizcUJntKDOjTqo5FEukuq7ml2GRKJbo41In2zjHS7BTEmiWIBlUTo7w+G1fGUKp1EOG60d47o9BVEC6cY1bcOwWaNxUabGRYCTLULmQx6Aqi91WxCToYN8wQ6MjYPn38x8ptI4RiDwl/J+hVp4z6K7REx7RAE+WLUfXOCFi1QEH245Q0hXo6h9DQjN0O9DpiYCeH7S2780e+F6/pklEJcJdy9fgCnihqZPW4aGBW/qwSpRi0gGHTPQs1BCuIMeTYy5sfpL3rxxMObkbwhDnXNQ+i8MUngU8u5Q2lrNc7jZOF5/mzGNaYQWdgoA+mP6fwqQZSxSNx+6hrDjpQAunu9yEpbi95hH4Y9fiwsKpHVB7d1Ksfy26R4U5DBJINtL+HSzjLGTZbIGkEwKJiEJBQ6RF/u60M+GCSGQChMpybN5xbV+RTZi/cfasTexL8lSAaO7DIgpwwsdh1DOEx79OyHN0LgKExGd9+UdvhlkjDJECQCAR5vCuBw9m+8fIeLyWZyaFsZZ/kvMqyxqrGYpkz6tGkAievN/IBzrQDpEgStImedjhScquvBSuaZCmDvpmG8u/tbJSNhnrGsUiCXvI6xqZ60k5w1X/cpLZc90vRsED98sF/3sJ6Jy0ADNXL7Xm5Ea6cnEmxh9jgfP1bQxkszexkynwTLex6wJDH3+Dz/qGGA1Tb0wzMRWDo5nSIl2YK+r57RfUvTa1GLOEVrp5tImtQbKQjKt7uUo7kXkZD3OCMpsBiTiIaLbtTU9zGRBLebIFBw+RMnHshUK+s5qkUH7ih2J2qu4LO6C/ztogt4pLgILPc5/NwH1tzh4bXf/MWmZxdWEHHJ+8pD+Xj9YIEaXGjFLrpcV1B3UozHupp40LwFH7cH0XzJw9qvjmF108ELCDxfn7y9XEeRVGGpsuLqzUk8ffQ81ac53M0cDyahkoBFr5l41ar0j5WezAqNZOnJ7BylOjVMF25y6baLH+Q1eJQAnY6t0cArPpkrH3rp0T/H791a+P/4d1GhAUxFAQ5oc1Vamq9q/wKJp7lfzxf0DgAAAABJRU5ErkJggg==", HC = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAACXBIWXMAAAsTAAALEwEAmpwYAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAQKSURBVHgBpVZfaFtlFP/d9KZJa2rSdJVmxZKNCpZZSUFBWafiqg+WYUH2VB+qggo+GKfQgoIpDpn4B19FoWM63YMgg/VBNpzSOMGqjXSbwtq11rGkXdskS3Kbm39353z3u+ntmo5uO+Xkfn/OOb/z7/u+ArcgwzB8xO8TnyWeM9YpKdfCxEHcLrGSNLBdGtsKSKlh/E36RIh9PI/OTmH8wgR9Y0ivZYVMh78N3Ts70f/QPvTu7rFUU8SjiqJ8viUAp0MaF4Y//elrLKTiuM/TAl9DE+5xuYVKTl9DrqBhfjXOSjg+9CG6Aw9YZiIEMroJQHou0I+cHsMX577HIx174KxThZRCfwb9sYJRVQK0Qh4X47N4+bEBjDzzkrXzlhWJYuWcPlOcFjb+5W8/oLu9EyQkjQoEtLor0MoUQVGxnKqixf7/F6/vPWiBcLp6SH/eIRE5Nb7pq5dw5MwYAt4WrJV0yQWslXVoxTw6vVk82poRY83a429RR8DXKnSjl9lPUb8xHqjS+yGeDB57F3CQvw4HGdHJa3KPomhyGjgUyqKvXRcO72l24bOYBxkZCddB5VQ6zPSeek0U/iluc45gQBT1cgwL6QTbw73qKnmWFyDs3ZKm4+O/VGR0HYlsAYcnVSzSmkYyVqTNzqRIaXQuZkXBFCZYPM+j8YsTwlvmgHsZVzQHihVHtQZBTxGDZ9zIlRTsbMwhtqyKEvJ+Ham1N6xIfbYVtdr3SZYK8Wj66oxZcfqpdxRw4P44jl3yU8bMNEwmDOEh02yKa1syhSk9A8EklrUKTV0CwxZB0CELIvpdIBD/uliPV7vSFPZ1ZKnfcwUzXdySduaz4HVm8PbDKVxIOquNn85nNwDYjoTp4UJWJa7Dd31JtDcWUaqUBBdtXKqUqW2LONG3gt+X6vEfyW++F0TdMc8Db4Nnw8YbEz74XWWMP7eCVx7U0NZYqe61uCoY7skgOnBNdNgHfzZt0O1oDljDlCoBgr27QzifmK0KcQQHT/txfH8SnzyeFqzTIcuXyZl6oyrzwo9+8bUT31OSYhzBLzzq79qHm+n8qhPPntqBQ+e8mFxyUjtCgPxxzYmPpprwxMkdmLmurivIU22zdVLhw0CDJM8OfBVGdD5WbbfbIjZOHdXha8Pf75ywVndRFyp8b/zMs+H9Q7hzMt3/ZvCwtXDUfhfxDZXq3RXC8NNDwpP1K3ObtolZtzsg8i/eBh4IAEayFkZISIBgmyCG+cM6I0JP0Ki0uenBicC8WTEdn8GL375HB3DR3KxVE4p0bzAkDHP0NuMRa1LryQxLEPPJpMtr/J+oAFxIJYSM1+0RBvu7eu2Gaz6ZtaM2H/2jxvbprHEX/12EpYGkzeCcXIvINt+SbgB7lHbmgZBzsAAAAABJRU5ErkJggg==", VC = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAACXBIWXMAAAsTAAALEwEAmpwYAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAANWSURBVHgBrVZLTBRBEH09syvg+kGNRj0YE9ELn/DxoEQDetFwUE+eIEhijDfBhHhkORoTQzx4MCpErx6ARI2JCaBoPAkBg0SN/DwsyGcBF/Y7bVVP9+waPgG1SG9X11S9V13VMw2wjkgpc2k00eiiMSLTMqdt9TQOY7PCQRpgo9K6FpFYBfwGTUEaubxOvutF/OULNcv5eeVjHToEu6AQW6qq4Cs/ZULDNJqFEC1rEnA5NLgCjLbchZyYgLV3L8SuXFhbAyrEifyCjETgjI9RDBB48hR2fqGBCRJJ8woCnblij965jfjDB/CVHYfl90MQCgVBoakQCal+AWdpGcnhIWyprUN24y0D12B2IkzNaerjsjB44vEj+AsKYLEDoQiRmY3Q8C4f6w45JPr74L923ZBwuUqIZNQQtNJ0JfVpEJGzFfDn58MObHMJ0lmkmbTu7YLWqcUF2skwcto7TV+6ieCM0NmPsCXv8jOMTS6hKG+PKomUQgHxHzKwtZaepUs18HUGFcX78PreeeO0y0c/l1jr6Q9hLBQhIBuz8wlkZ/vc3FXJhQfoEnss+rlELJ4k3SKcKfT0hVBRsp+f1jPKRdY63k4oB87450IcuzlvBaYro/u72poX4cWEfiDQ0TtuCCqYoJi1gW+zXsVjCQfT83HkZNmwhM5dZmwImQQSyzEHiWTKi3/TN2n2d5gJ1AsVml5Alj/lHhsVnUIsBvh8gkj+fB+FbixLMiXVYchiJDgU6iAaj3oE3GTlGf1yAZYMwbbcOosV7/j6wihM6lCOKWs/co51KjuTj6qs7O3p/DYJnrkzBZp10JjCHoEVKMV/EWKxso+aVT8T9LBm76jUNpk+4psU03x7e6UxdTCB+mZYW8sgckoh/xLcE/8BhaWl3UcNDVOfu2lR+TlQi8bB5+CzuekmO1Cdvn+6FUdcUxt/iyz9vI5GuGjPSdQcbYD3kdkwujtVU+yRHfmsqruBFUXATMZQfeymIpEbIdE+7MvgNRSrpVljrrhwgjQ1sf59YQjBj1cxufxjzVPLwGrXeQ00n8gED5rFaldmvSZRb/jAzAe8n3qlCCeXJ5RPwLdTAZbvO5cJvOqVuUZm6tJvkxuXLvkP/13Ua4C5DMARbQvSyF0P4zcpn/46Mkp25AAAAABJRU5ErkJggg==", PC = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAACXBIWXMAAAsTAAALEwEAmpwYAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAOuSURBVHgBpVZNTFNZFP7e62uHDjNQKMGBEQbGCIv5ETcTx5lEJ5nERBfqwp2/iXFrNf7sFJbGRF0aE6MY92o0JOpCTQTcmKgJGI0IiEGxFPqK5d3y2l7PuX23PxQQ4klOe3/O/b77nXt6b4ElTEoZIj9N/oB8WBZs2huLkLdgpcaLPIDl2pXFiIwFwA/TVyd5iPtCCDiOo76z2ayKsSwLgUAAwWAQFRUVemmcvMswjAuLEnA6PHA8i/ajUa5BOp1WgKZpKmdjIoqF67qqXy8cWL+u0TCdRNKlO+YCO0f34Dl0PTmkAHmHfr+/hITb7DzHSpJ7d0OcPZMn4LMpIfDyp8CvvTyH28PdaKv9Iw/4NQ+0t8O9dLGY5LQ+E62AUxMasgeI4DzC369CSjrw+XwKgCSXuQZXMY6A1dAAlwjSfY/hnd8VReAx7efOqf6DMIjSMA2ksrMlgOrAjNKayJOlBBFZ8NHYXEHFZi5zVrCDe88n+/FJvFcEM+lpUiAw31KzScx8eFM2blCVmbat0pHt7dUq2CIWfWznVu+Hu6qmmMB2p1Bl1OjDp6rJIPr6Pp7e68HU2Ci+CzVh+9EzCAQr8wSITcIkNT6Kz/T0wNr4L09tYtIObg3ZgwqcNCMt55AgEm0ZMQFB7FY2RSoEYmOv8OLhzYKCqRgM+p2o5ayir1dPtZjegWDCGcvNemlOS1ftPjo5CvFZQKbGEXs/AjvjR+uGbbATDiZj71QM0pn8UpM/KV3FBN42ipNaaDqJIfS9nkBs1odfNu2i8xF4NfACres3Ih4fLwk3ULJHZUwwwo0f/NXl9wZZsLIRLbVRdGc6cOdjAu5/VBP/70TKHUddXWtZvFLR3Ky7ccsjaFkX3oDhmYGyBXX17RApG/uyo0BTgBRQTuvnUFWzFtVV9VjIjN9+181nTPCIfPM/DVtwY+RyToVEic7VTX9hlSsQXf0ZjRkX4R9r6PqoWBCcl1pbt+ruLU6Ruv3+DP+NdeSLGQM2Vtfhp9qGJcHR3AQjV6JsN6l0Db5mH3JvT9sRLvxc4ApMFrnVfV0PXyXsEV1FB8jjrGLP2iOF6BUQsJnHTur8q7dBjfEHM+mB3W1HFQmXN9e4qvPFgL15pZnAzeMn9FSXh1n24HQid7PibWIQYfmzelzmX3LFBPwuVA69gdmxvhi8E0vsKuI96sro1ZLJZFImEgkZj8eV27atxnhu3h+BCJZj3qN/VS7fHshv+HcR8QCmiwCHvTF+HkNLYXwBELRL31gZdjYAAAAASUVORK5CYII=", FC = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAACXBIWXMAAAsTAAALEwEAmpwYAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAP9SURBVHgBpVZNbFRVFP7u+xnmp+kMlDbUitMFJTYoUIyYGOMQw86UmpgIC0006la7MG6k0oruNcaY4AJWLggmgKsmJNgxMSJOtASJVkzbVCmm7fy082bedDrvcs59706nMAMlnOTk/rx7vu+ce86cO8B9REqZID1Bepl0Wq5LLtgbJu3FwwobBQCbldOtiEQT8PdpGCVN8HqteAWrhUtqlN6KOmPYPTAj/QjFD8Nqe06b5knHhBCftyTg6wjAMZG5hX3tx2HW/iXA7RBWHIYRUSae50DWSvAqc5C0E61+AWvvXg0zSiRjemE08RwnT13Fax+OQxgh2NFdsEJxWKaAIcpKeW7ZMdixfljhJJaPvAzn05N1As6NXlj6zuvg31zF1+duYKC/C6aoEqBH6seqw5UNo2ECoT1Pwf3qS3Ug9tEIfzpBmOcpkhkdAV9NYnJqCZ+cymDH9jaUXAauEAl5DZe0TPYuhPDnak/4KkoO7Md64FIU1fQEgvydVlcUeP8mL179YJy8MAjEIIIaAZYUkFDgFRTyKxCS5lLvlRWZ6ZRgWiYoGJQ/q1/VIS5zjuAVndTZ2ysqLdnlVTiKwFWAP/1cwnKujNk/BDK/APPzJVy/QeAyiKpMjmRzKqG1dFpHwTLMORji2YWJWQVO7mMhX8G2OF0oAVC54NuLBXSNG3h+dwxb4wbOph24ZghPP2kTgYRwHCrSvCLgvFS/vwj7xRTDpphgP8+u/b3kZ5KOVaoeFolEeEzgYc/jceycdGH9s4gFo4YetwMYbKdvWR9ycRGiWq0T1H5M6wh6rSAhmLlVVN5rqa55hF2kaDx891sNg51RbH0ihLmcjeLtGPoKDhYW8ujsIAgCDwpNqZfPbyBoEHHXCHS2ewRchJeo4Eq2Hc5qBOF4HB3bpgncxHrRYgOJFiaYYaZ42xYaShui0NJnu1iaWkPqBRtLbhSJ6Qz+z8XQTNjaTPbqZb5OkHqmG9du5nyH7uJ47w0bf12v4ddMFOVKAUOvhxBOVBmqKYmx3jZ+57yomhpKJYM9eY9Bd5eFQy9twc7d8zh2rIieXhMdiebgbG0PHtHLC0yguh9HkDqwoyUJy9GhEPp2Nf+mrUQyCdMvUZbzBvULTvkPvBp5d6Al+INEBho+e05vnWnsRW+R5lMHun0SqY9vHpzFPj5C97+Pp+pt4IkiYCa98fE7A0SyX5Ewz4No9BmTwG2/k7KMBZj3PDij8DsrJqey6LePwvLm6pXLo2xwW83DB4Gbb8NYv3cGH9WLZk/mcECifuGyTN2tdAmo/Am59p9vYFCbiDxLT9lhiMhBbdr0yWwRtnr0z8jNy2X5CP8uhgOAXAPgdLDHz2Pifhh3ALa2LLvubAtvAAAAAElFTkSuQmCC", XC = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAACXBIWXMAAAsTAAALEwEAmpwYAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAL0SURBVHgBrVY7bxNBEP72zq/EyCQp0iYUSDQxUAS6RPyBwE+gQFQgTA0RtqCAjgYBVdIjCkKFQEpikKh4JCK0ftQBn43t2Dnulpn17vkcY8sOjDQ3t7s33zcz+zpgiEgpp0jvkW6SFmRXKrovQzqPcYWdNMCosjaISPwF/BaZLOkUtw/z22hvbMAlK6tV9Y09Nwc7fRaJlRVEl5aNq0OaE0I8HkjA5dDgCrDx6CH8chn27CzE9DSsZJI8BPx6HZLUKxbZBydfvEQknTYwWSLJ9RHoyBV748F9tJ4+QXTxAqxoVH10NFWp1W828XvvG+LXriN5d9UM3zaZCFNzMl+4LAzefv4MMYqoAyxh9VdSE0htBdqfPyFx4yaSd1ZNuc4TSdEQrJG56u3uwLm4iOjCAiLJEwrWMqlSKbg8Bl5qUibw6OnVfsH9vofUm7dmXraI4JLQ0Re4p3LmNESphNhCGpZgUIMpgnp2YtbIoVJ5NOju7sJaWiKSdybR6Qg9rphJBYFzxOLnD4iJid7ay05DhMDR5YbVaitfL59XWDqLDBNcVgSvN9QHNvvs70PMzFD0gusXxA7TVtYQy06WjqP8pcbSBMtMcI7f/J2dTvSs7TZAJJKygGVpknDIoTaPHRxAuG5A4L3Pm9F5JlAbyi+XAgIl5KDUtrskQvQCs/p+JwsTHGM5Tg+BksMPH5W1CZBLI0T/0hwmvOFYPc9T1ggHXVQvFOW4oIMkEgnidgKCWCyG/yUhgq9MsG0IZM9kHl/i8bh5fcUbjSe5wq0qnZZcw+OUi4PzecJJZmiJazllERBP+Ra3Jicng8kaJ5uwTyqVMt3r4bNoHvqwa9Lp2Gq1xsrCgHNpOEiEDjt1lvELmZzJIpFIjJRJ+Bv20eAsOY3Zd+FkyfClo+aiTpcK13VQJgzMK2aCdnxo5TB4FkOiyuhLXYnrurLRaMharSYdx1FKi0H18diRH4EMRhF96a/L0WVT/sPfRUYDVEKABd2X1ct8oPwBeE4v0HMnM1QAAAAASUVORK5CYII=", UC = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAACXBIWXMAAAsTAAALEwEAmpwYAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAANRSURBVHgBrVZNSFRRFP7uve+NJmpjoWgWMyDRopwUKogwo2WRBRHSrtq0CEpoFSUqFW2DCGql62jRzyJaWQaGK9OCICI1ijT8GbSZefPz3u2e+96dGfMHZTpyvH/nfN8559537wDriJQyrLRH6aDSCVmQhWCuS2kUmxVyCgA2Kv1rEbFVwK+ppldpmMZj0xkMTzm6/ZPxtE19pUDTNhtHIuWI1YeMa1xpH2Ps/poEVI4AHNmht+hONWMm4aJmi4WqMoZyi2sPJ+shlZX4tZQjHwzsmYYVixmYXkXSZwZ8lciRuHMbi+c7YSnASE0ZqrfYYNxC2uNIu1z3K8osNG0vw86tISx2nNQ+hoD2ZhlBUL88ePrxI4RaWuFC+KAeC1qOjOT5Pim4QGjvPjgPHyBxN0/SY/bEZEClCec+jktHGVkN9RDJZAG0uHWL+tJvWTIBe0cjHBUclTbYv35NEDBdoMHSubOMGIUqNFdOBowyoP3Vmbjw+y7Lr4tEEsISyg9IFbI4Rsec8M7QyE2MgNXOaCM2P6eiogygAZ2cr+mchGPGrr9GNiyVBJ9f0OVwh4ZMFiRdNHdan5pPryDqLG3EZ2fBEokgyoCkSNNF6uSYtsXcrO9LWC9fGIJ2S/1roZ73eRxs1PE3JZ0GFEkqVzjHUv2xlZ+NOiDQtiyb1b40dN8NmeUoDzYEcvEHWDVH6PUuiM5qFUYWSXXWU6osaVcioyOmEsl8S2ukZEvURmU8niewTI+F1dYeKAdvtOFVcR2Jzkz6uhEpJjFCGUzqxVEbcjiFUoXARSRqhnErIIhancfhNXzF/xBeuDY+UAb6TInYCXhTWZQqVE37VIcZPicCffvxikPg7kF9eZUCziIRiKPtZuoZVzcfbfkbGlmXb+hjJwPjzYKTlj95aqYGFPakuYsuKo2L1jYw+wq8LxlsRkww9q1uVf/91NVvA3U0ATGZCRG9Ct523XeSG8hFSm0hFLh9s9vM9gWYKx6cXvg3K7yxMVz6vhszyeIvWH9Gy2JvrhW4Z42AF+pO4L0o8vgnIP1Y6OubxuO/Xbz/6eLbgqdeNx+8Ur2SzXUChxsFYnXCuK76ZK6RtX70B+TGZVCW8OuiKwBYKAKcCOboeQyvh/EXWo8/1+14eYEAAAAASUVORK5CYII=", YC = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAACXBIWXMAAAsTAAALEwEAmpwYAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAR3SURBVHgBpVZdaBxVFP7u7MxOspvsblPT0tZkEzUITRpbo5VEalpU+kNR8UkRoUWffDFifakPJi99KAr6IgSERETsgwhiob41aTFSWpsaG22xNT9rf7ZJdjaT3dmdnZ/ruZOZzW6TSMUDh3vmzjnfd++5554Z4F+Ec54g/Yj0LOkUXxHNn+sjbcF/FRHkAzyoDK1HxNYAf5eGftKEeNbTv2AhNUrjZThWzvNRo1sQ2dCGjU17Edv8ZBCaJR1gjH26LoFIhw+OzPmfcPPkZyjM/g11UyOURAJyXcTzs3MGnHwO+elZEYWuU1+ivrM9gOknkoFVBP7KPfY/T3yMmc+/QMPuLkiKUuHIfYt7lrBtw4A+eQ1Nb72Jtg8/CODeC3bCgpzTMC7SIsBTg0OI04qY7xCsgkkMLMzgFt0yXaDZy7+i+Z23AxKRrl1EMh0QDNFwRJ+4irHuFxDfsR1KXXQZnKLJEVK9BPmZKAymInwhA3fR9fbB/f1Y+hL036/j6TPfoeG5HgE7QnH7JH/1R8TMldeOIkSoIQLk+QJY1AJTS2QbcEMluEoJkfocnFqaM/KkBkLNBG8UEJJl0AZxkzLgy15R5hIZrywf6hiKsymICSejgRco6AkJbIMNKQmE9ymw/lpE6ZIGZbeMUAe9i9uQO2nkJhwt68VqhJM5NxaQ9Im5l4U1d/qM5yCJg5tfACImAXPIT8kwb+mwby1B3uzSrmj1uQLMq4sIv6iCbXPgxiw4C5nleNrFvdM/BgS9Ym6nsJYmJj0Hr0bMEixbh8sLkB4Fag+otEMd+UaGuWQttBsFKJ0E1ibybwKUNrdQpFjmxWtU4r60yPAvlEhPVcVwCy6j3Fs2XMfExY5WTM1sgcHDaG3WcOjOJcgmvTcd2CkDlXXvLOpVBKtEOEmxEJy07VVJ6LEQsiyG3prrSJv1dDcYap6PwrVtWDN0+FNmOe7+1iCyMi2McDxW9dq6kIf9m0G5tygPDNtq0piwVcxKLiRJh2O6KBF44dQCFQSvAo4kmwIzWyZI7OlZtRP3rgXz5F0sfTWPZzfOoV1NY3s8ja6YhuIPWWQGdaR6kqvi6jo7AvOKIBgVVuPhg4DfALj/lhc5wvvjUDsjyH+bQXsdXc9aOpsRHfIjKtQ3GsAfj1P3Y+UYIZsOHwjM75m4DGRo4mn84KvQz/+80iK2KpBeisMZnIeyP4bwoQSYzOCcW6LUZAhJBtccMIuXW0Y4+TC6Jy8GBK0SXWfRN0a8p+PHqlbCb1N9f615kfYfRerdDmXVRulacdnhnu2Bl/1Jd3wzHDwOV/aiFvjNblp00hOfrFkRPCx6Ugh8wa6e97X5+PveIlHR7MQZiGY2TYPXw1vIIUmOQVClsBJfFzy5Ai5kwMdc9cHpp0F8dJCjmz35+lGYM6kVgvuAhcT3dBP4scoqFOD9a8UEJH0+iXfD8/Pj0G+Porh4AyXjjucTUuoRfWgnYlt7adwVhK75yVxT/I/+MH9wOcv/x99Fnw+gVQBO+XP9fpmvK/8AYiWMvf12ebMAAAAASUVORK5CYII=", GC = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAACXBIWXMAAAsTAAALEwEAmpwYAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAOJSURBVHgBpVZLSJRRFP7+mdEcs2Z62iJzoiKyjCIslB4ELYqioja1CIpatcmoNrVo3LSIFrUJgsBaFQRCJChtNK1pUWhaY4mIr4h8zMPReTX+83fOnXv/+dXRlA6euec+zvedc+5/7xWYRwzDcJPeJW0i7TOyEpJj1aQeLFbYSQIsVGrnItJygF+jxkvq5n6w9QOG3zQi0OpDanxcrHFuKIFr5w4UnziGlQerlGuYtEbTtIdzEnA5JLgA7r3/CPHBn1iydg3y3G44igrFuqnJGPToJKL9g+yFPS+fY9nO7QrGSyQ1swhk5IK9594DDDx+ipV798CWl2dZaEjLEBbbU7EYIv4fKLl8AVvu3FJw11Ummqo5Ne1cFgYfelJLJdguJjVLFJr8VfCGRcNtHdhw9Yoi4XLtJpJ+RVBLzcVI5zf4Ko/AVV6GvKKlGXDypoW8CJom0USTITJkPqnIBCJd3ahoqFP70kx+hzUZfR+PtJRVIDk4RAQcvSYgMq0lDcMsqmmm5fD4Vz/c+6tQ0VinFq1w0M/pzKb6kCBwO9l6MAR7gdOseRZKk1tgspiZ6MkkbNQPEU6wxaeyqOaxU2yN1jeIBTbeuLEA0rEoaRw6baIu2jg+r9bQ49TNPms6KtcFghl/CmCkvlHxH+IMdrE10ekXC0SAyT9EEoTdWUADtkwm9Ne9tBCF+Ro8gzFkU6Do4wmkUymzrCH6xKV4mEAcKC6P9YsxyGGKnex2vNhXjLdlbhRPpGjGjldb1+Ns2xiOdwRgpNPTSsb++nhkGsEssZ4+Q9dxzvcLyyMJvN+8DEmHDZebhlHVG8nut8Vv5tXA+fezke9anmM6K93rCrBpNIGtIwn0r1oyb1CFpSXKDDskgcd9oArRzq45CU52hIggLuzv65yYT4ronpLyhTN4x9YaurhgOaEzRYGzbPsdnzVv9Vl74qgyX/NB400Oca/92BlEWj/mrOW/RF0Z+aXrUen/pIY32ug4873RLHq3b+aMfjEk5S+fK4hnfBfZZOcSaZj3wXP7hhnNYoBZS8m3qLyMkxdvA88JAmZSAx7KonQRJFZwroCUGok568HxUsOPDibpZPvPX0JyYMic12YAs7gOVBL4TXD2FnBvLh9FUi1JxAkP0+UVoLtlkq5yPu0sDpdLAK6ir8UCnPPJzJ125tF/Zixcmoz/+O+iWgKELIB9cswrP/M55S8hYx+lSeEpFwAAAABJRU5ErkJggg==", QC = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAACXBIWXMAAAsTAAALEwEAmpwYAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAARcSURBVHgBpVZtTJtVFH7uS0v5KF+DfcDcKMxFxE0gE+IwAss23TSRxcREozG6xWyJLHaRH2bR0M24zcSE+UPB7AdzSuIvp1GjZjqIJMxMZieD6LJI+ZCEMKDlo7R92/e9nnv7vqXMFmZ24Pace3ru85x77leBFYRznkuthVoXNQ9fEq/hc1Jz4P+KGGQA3K10JCNiCcDfIOWiliv63Tdv4Gv3FdL98AUWZIwjfz0qN21BY9VONDyw3Rzqo3aCMXY2KYEohwEugU999wWGpyexPicPeRl22NPSZNxCMAh/KICh2xOyf/H1d4iw1IRxEcmJ/xAYmUv2L8+147XBLjxaWgarxQIuA5mhKVZaZJPyqyEM/OPBkfqn0PLMiybcMXMmzKw5Kbcoy61TH2Dskw5ca6zDpZJ8cOWOiUYZzKxium/4Fpy7G00SUa4qIhk2CTpIvTLXP4DenXuQs70cVnsmpjNS+UePbGakRQxoQBSP/qIDY7PH3KIfg+Mj6Go+TevysKwyxe9iRvYe4fmlvBqh0TEieEiWRBRlwWbhnduK0FeUw3h89jF044P+/xgbQsPWbURyxgzKs9DHAWHN9PQiSOApZGszXtgftCDoscC+yNjhnpvY90QtIvv3LpWILZVIKDWsYr7cD03XMTU1hYKCAvGVUxA0Cuv2t99DlFuhkUO+STx92ILfj+ZiEToi5L/vq58xcvFH/XRoVpnUNcRtDlk6r9eLQCAgfR6nE62trcKsFwSVwprvH8Qs19EUmMHuAgvW+XRcCAfwmJqBCiUVOmW5iUFxcRva1Dn+ayRkrp8EDofDMdLu7m7TdAgCeaAi3hGMPu/FcywLDVWFaD5jRfvZDdia14vwgALPySzoYQX5FPs2bKwjrPJPQ/NMp5JwHlsYKT6fbxmBlMi8gh3frIFWA7x/IQt1dTW4Ono//D/Mw9Yp9oBmtKholLGmaVhNBMGwYErNycZnfwegahU4cqgGxaU7sDa7H23nJvBC3IAJruHdoI/f0MMsGajD4YhNJkaQ+3gtNrrdeHnfNShqH8bfsmPzyVkcfNKKyXY7spgCt6bivdAsn+QaWynryspK07wuzoGLjBYvbdPr+5/Fur0qpi/ZYmc3u1rF3G+pKDxYy/VDBxgHTwjKo0cBuqZjQ/Eu5BcUC/cxQSAW2St6biKY67kiwU0C21rGt7SkI7/eumLWgkCnraanbIS15LLpLlFoD4sl75a9483L8sssS0HF53a2Gnj8DCxFH5uu8+IuUozOq9R8Yh0cx9+UgYUvpaKqM5PbipTVsKMHmj6UNUfBbGXCJd8GYcRf105S8vj5Ln/Is4vboncbS/Aq3Zm5IMhrIoIm0738uo4jcZFqkZ3Qn9AnaEBkHMYlKnX8XSfttBowAmfpNeY34lVzmZ1ET6bTIJEnnAeuAos/EeFf4IJMOJVsIL0ayNgTD5zwyUwybfnon+d3L138Hn5dOA0Abxygx/C5jG2eVP4Fr11w9puZxbkAAAAASUVORK5CYII=", ZC = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAACXBIWXMAAAsTAAALEwEAmpwYAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAQISURBVHgBpVZdaBxVFP7mL02ySXc3ba1pabrEblqj2ARa24fSBkykL9YWhFp80OeKmCI+CIKb6mNThBb0RauiLyKIP4gPmhoVbJPWbEqt4A8JGwJN0pis2Z2ZnZ2Z6zmzdyZrNlsqHvhy/875vnvPmb03wF1MCJEgvEa4TJgSq7Yk5wYJKfxX4yBJcK92qZ6Qsg75i9RkCAkeu4WrcPLfBK3wVwIf1dgOrelBNMT7obccCEOXCUOKorxZV4DTIckDQnv+bQhnlgg3Q9HjUNWmIMT3ixCeCb80A0EzsdRbJLgnpMmQyFCNgNx5oG7PXYBz5wPosV4i1aEogsCuQoYI8ucYEiMh1/4NDW2n0Lj1hZDuTHgSJcw5NROcFiYvL34Eo3kPkStg3oCbobaRsyUBKSLoREDZvAlj07OhCKerl0SmVanIqUl49q9w5i9Ab9wCVbElLKigFkRqdBDSQT+YU1ahb9iKMsVyamX9LgX1krt/jgfW9GnoGqCpqiQ2AyKFCBWU4Bn74BuPQBHhnBWIaeSraToBwQal9fFnrlPnOI/m82P+9eWcr5JTo7uoGEZTkHvODWenWW9FOtmjMenPZtkr+6WgIrwuPAFXlIRlefD+/gm9bVf09sRBXhxkgSe590nuK/XTOUdlAUO/jY0NyUrupR3YvA+7mAzNGDF3a9mlH2XRK7bi5GGXHRIDTsS+xumKwBEW6OHen/lbULgixNqTPISHkvspVXqlkmQPJx6NyI62n8LOWFc09oSLW8vXMLYwwknHjTtXwqWULguCOWum8qUQrv01gs7Wbpzc+TyqTUixzpbuAGxl4eDDqfMYXxyJ4gtuPhJQo+jqnxz1P85dxJnrx7BQmkU9W7Bn8erkM/hy9v26PiwwzZ0WI15zb+TM3/HyxFO4bc/UBP6SH8dLEyfwx8rNmrX22I6wuxwJ7N10EOuZ5RaxQW2sme+IpeF4pZp53mTnxu5wmOUajBL6juv96Do37Gqo/HLD0zTt70Py0BY9CL5Kxdu2DWJHB1r1BF75tst3x3/weY2r49MfHuy9OKDK7HwW3vmBmQOPCbPREDahJGG++44oFArCHD5XmYu3CGsoU5k7Pxz5cQzHFnfvqr7GU8Euw7vfHf1OFMnJqhIp0px19PGIKIT19ElRHBtbHbMvwZvMRm9ElDf5wPArJZzXz0ansNOdwu7YXkMe7Tr9gCjdf1/gywLOG2erX7zUv4ojnz8RioSnsOuQV6dmDTnbINYzWsiEHl42KyzK51ohuwq8VhroFx6lscoya7+qmpNAXt889r8fhffF5xCTNyBy0xWneALq4cPQnjhG7ZEwdN0ns95JuCbviXu3y+J//HcxKAmWqgin5BynNHE3jn8AwboKhIqDUDYAAAAASUVORK5CYII=", jC = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAACXBIWXMAAAsTAAALEwEAmpwYAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAPFSURBVHgBpVZbaFRHGP5mzjmbmKxxkzYX22IjFSwmSsRQbBVMoSDkobXYCy2UVCilL7abh9rHbvDJtlhpHwrSVlvxzRcRryheUDQoxBtRQTAxisao2dXsZrN7csb/n53ZPWqiK37w75mZM/N981/OzALPgFIqRvYz2WGya6qEUTMWJ2vGi4IXGYJysWU6ITEF+Q/0SJDFuO+fOI7c3j36qVIpPUfOmQOndSEinZ1w31tulybJeoQQm6YV4HAYck2Y3bQRamgIsr4eojYGWVWtlwTpMah0GsH1QVoDVP+/DU7LQkuTIJGepwTMzrV69tcNmPh7M7wl7ZCeB0EstAiaTS9RUPoXCDLj8C/3I9K1BpU//mTpuq0nwsacHn0cFibP//sPvNZW/VIQixTh3QhDX9DjdkDi+bN98L79zopwuBaTyIBrFDk0scmLF5AjAa+lBXJ8HNKQCssmjIRpWy/Qthjuqo+Rz/twfTLX5fxtIXvfNbv/mueNd30Fh54OUcpMpiiAkAdKFYOqR/QG3poHfPo5FJHncjkW4AkdXObcWsW9oTP9waHUq4FTU4+qyUbhVUYM6ROFFlJZtqhJRqspR282Cykl/EmlDvTeVEsWzJZzX5vJU+Is8BG3fj+Zln++3iUhJCoosXU1FTqxxciY/Ib7J9Z9gLqGKs4hgiDAcDInvljfK9Z+Mh8b177DtCtYoI1b56/eL0Z8wg9wN5XDjApHJ1iVIoJZtOPG2hnaA8cpeJdK+xh9OIEbd7J60rG+YetvMwvoD2rgVhqhlCJPImwOKUhZClP7/Drs+63jsaj9seMK1v93sVjGybH8YwKl2AoR6hQwGShtFj6JPh+l9VwoA9yYFY2gHBw9N4I3Vu/UNng7rcfWfbkAI7tW4/TmlZq8eXbUTk8WBVa0NaFcDN/ParOojEjKjUub9HR/0bxa++osh+goWcf3H0axLLbN53KTojyhVx4cFNlMRLi1ncKJdQqOwu5flqv2txuAQpx2Cv4YqDHKI/7VzyDSvZTUUDrKQUMcqj6uS5XN8zz7Zq6kWudz4wj3nKZufbYUzpgXQOYM1MhfUPe226+YsZXPImk6a8iSIvouZGN3qe7LhHp4HLi9ATK4Vzh1zd3ADS3ASsUB8kKwywpleWLnoaFbrzXoMZxPXTgJFE5WOvkuqWDwG4HcjWI+hAgJWvHqpbQh2lR0aZg8YTtTXZlxI6K/cDV2Cniwn26hfigW40GnBmDCmSvDxFNemdO4rS/9rap8HFYv8e8ibghGQ4TXzFjClPm0eAQxDhEtu1I+gAAAAABJRU5ErkJggg==", KC = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAACXBIWXMAAAsTAAALEwEAmpwYAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAASQSURBVHgBpVZ9TFtVFP/dxwPC+KZMC3PQ4WTZEAIav0YZJdGZSfiYLovOKZtZdGNRazIcRje+YrTZMo0hLpnB8c80LiAWNxXU0DK2fwgLG3MLMxlgHNICo0BboLS93vv6XmkdxRlPcnrPPTn3/M7Xu7fACkQpTWBcw7iL8RBdoilZp2eswX8lfkh2cK90OhQQWcb522ypZZzA9+a+URhNt9DNVtusS7LRpMYiJ1OFMl0GCh9NVY7aGNcRQj4NCcDLITuXHH/8ZR9uj08jKT4WiXGRiIkKl+zszkU45lwYuj0DyvbfHt8mAcpUy0Dq7gKQI5fQG071ovGbazhY6sYDSXNweUT8/Nt6ZsMOEEir7zBle4oSbQrdsdqO6M35ir93lEwEpeZK5A1f9OJky3W88ZwL+euHoNtwHeq4CZTk9MO54IVj3iutznkPNj2YSBsrH8aOGz/AW7GbzB8zKPHWKD0RFAWv+ZWbk6g/1Qd1cgwykv9CWoIF6UlWFGXeYNHOM+M55tiLyPAwevjVLPp+mpWqqvU0/IKZiCkpWGQA7ks9kPt3mguijLSHb1441MHyFljaAizTIroH78eaRCt+ubYOFpsIK+OCvCRaVZKK+75ugmAy+SrAf8JEaXUxELFNyzU6PuYiE8qVpo6M2aWk7sy40Ny9ES89OYDPOnNhmYnBpVtZ+Kgyx7PFMShEHKggxG739U6uurDgksrhvngR7oGrELNzuFrPAcq4ZDSP+HrOujhuW2CTQ9BkzoIq2om8rAxqPLIOySc+FMSebrI0G6zJVD5ms0GIi4O7pp7eVEWQTT6DQg6ay6Wrv0/KLRGwsOjFBAOJEAkOVTxFT+ZOUfWucoidHQRzc4DTIbNTWsnEJLzaAu/Y2TO0MtKMl437lGZrRLkhGB61B30Vzz6RQj/fn0lWH6un4vnvfcNAAgz4rDKm0dGs7sdp5yPJdN+Pe4h1dpxoYtcGAQQQQVJcBBqrHveWzl4RIouLKKZtAkKQ++mtdLzhCHnrsgEtrcYwUL8bP3GAYY4UHxOJ7ToVNTyvpmubDEQ0tv3DNCD4+AS68MFR2p4Xizfby2F1WIPsNInpimjzA3zVoMWayyZE7X5dEGZmQgUNT77WYz1hCNP3GXC2vW3ZAHLV2YrYzwHMjHUPOcbgObifkBCOKZsQ19E6z6+PqYVXWrfhzvxUsCmVmVHZhmJFa+T19d0Z2dkgm/P9ZQyK+pmt3tFzbd7XVnWT4tadhDlHKNIkpEGn0Srb70R2KdnYF2fiWYRVHYZne+kSCIt68d1q2lmQTg907BL+nB0l+Bdq23lGEZuZ72FlQvYytvEMBAbCATy6Iu/YT+ewV9XrLWl9MWxF53J5arZUK/WX3gYuBF7XerZ8wuXFngu0JcZC9F3vUatzfOWo5XRrCqpRW1itaP3Xtf874Ap+OXHbcG0B2Tg2gFViFAlqCrnbsS5dK0XOV5mCXrXlnkyeiXR9871ppAfGwfPotwxgePoPySYhMl5yyKclwPGyT+byWfse/WZ679RF/8e/C73sYCrA4ZCsq5XLGpL+Bt0wdvig7rMvAAAAAElFTkSuQmCC", JC = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAACXBIWXMAAAsTAAALEwEAmpwYAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAOlSURBVHgBpVZbSJRbFP72P2NazGksO1pxzlHjeII6iXpOSBSNET3UQ0Y9RRA9ZPVUE0RvU1O+BEX1EBQZGPQUUeRLERRqUAQx2f3BLmpghnnLxnKuu7X2v/c//5SORgs2+zJrfd+67H/tAXKIlLKQxmEarTS6ZEaG9VmQRhl+VthIA0xXmicjEhOA76MpTKOQ9+2R92hpe4u7NI98jiudsoW/ofKfItTXLULgv4XGdITGESHE6UkJOB0aXAEfa46gpy+K4rmzMGd2Pnwz85Re9EsCY1/j6OodhaT9tRPrFaGWMJEc+YFAe67YG88/xJnLz1G7rARer0epCcE6cGbbWOLLeBLPXg9g9+YlCO1abuD2m0iEyTlNHZyWxqaHOHvlJXk0T6MJrSW+z6VZqBF52Y+9W/9FqGG5SVc1kXQbgmaadjzpHMT/265gWcXv8M2aYRNoYGnHodfSRSfZHp+j43jxZhC3z200dWkjgjVe7f0OPtly4BahWIRrUegpG0YY2Az4j5FIeDxeZdvYFDEEdXzN6RSbTFF7PkRpZWFoNI6CfG9WBO6iSZf3hiSWSCrb9kifwtIkQSao51VLe49tTqAfR2KY6+fCCqewOkeZvROATaKuMEXAii1t3YYgwARVvHr6alB5wCOWSGOASGYWeGgntJ+ZKkhkE3yNpZBIppwY73b0mZ/LhNQudLauh0j1wmMJWFYmMVwP5ZmOIDs7XJG0IlGVSAPptETK+wcW191Qat5McsUktzFtW+I7110ikP2zO4VM0M2hbG1qwNPXwzqPAotLZ6O7bwzraudjNJqgsPuRW6RzowI1JbgdUIcjliagoixw9MoX+FC7tAj3zq/Dyb01WFk5D3U1xZiuVFY4beMxE7Tzqj5Q6njyKRrD9g3l+PtPH/WhfOzZXIF4Mj1tggwWWpjgtIkgUDMffl8eVpDHxXMKHAMu/NJFfpQUFUwJXkrRO9kArlt017lvtPEu1FBN3sdpJHDjfq8dD6XswfMB6qBJ9A+NTwEvcfX4WrO56O5FZdDN7uiFDvrcH2NVVTFGCXRJuR95HguXbnblBGZPQg1VOLSzmg+ym50mCdJ0iteGhO+b3zdDRTQ1eDWBV5nD7HbtIgnTxI8OnnQOYcvBO9SfxpBLuG4hAuZZC79qYbOZ6MkMahL7yXz0gfrUO2olQ/RdRJVOIUW1mgDrA3+5gSd8MicO2n70L8rpS6v8hX8XQQ0w7ALs0mdh7vm5ML4BWOwfaXyQzNQAAAAASUVORK5CYII=", _C = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAACXBIWXMAAAsTAAALEwEAmpwYAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAQ9SURBVHgBpVZ9TFtVFD/3PdaoY6MlMkD+sHFjmwkBBBxsMCl+xLBkE7esOok6k80QE6VqNmMMtuMPXSVGzDIcJjBscC4zZKCGZKKjTjcTqTAcfoFII5kuY9LSlrLS9h3PLfd1z8o6zE7yyz33vHvP75xzvx5AEkFEPcFK6CdM4DXxCJuFYIT/K3yScLBUObpkIhpYLyJUpV9EWiiIOUzC1p+QlSXRH0twbqXGxvXBn6e8RXdnmEl1EzIJBkKqGBogzBJ+F/2ThEKh2xhjB/5DwCOnppnrc2/Z4YPjLrhY/di31TvLOzYVZl8SY1HTqvM50QihjmAV9heJpDlOIOo3RNBfaG6HO1sPgpyXB1NSKny6Ij/429qyrnf3VzggubgIFkHiJdxDJG6V4Cg1u6dnrrqtG/Ya7Xe4QbpteTzMC7psOJRedan84aLX6sx5v2gyiReA4COHP/J1Id1EcFK/ShLR7+ajWj4eeYbRPIljbg7kYDCGfO84tE60ZYU7HW07nuva1+McXS5KoyJISBFkav35RtBLpNQIg7OhzeVmFJcky8DSVkK0wQaRF+pBIiPHnsunwT7cUtP39omO7S/1VgvHKqZjNWfMyX0JnxbO+ojo9CwsCoNoSQmwDaWglJby8oFy8U9g37tAGnRBDgbB7v8o59jfv765bevY5rwHSxvfqC+bpKkeTcl6RJkqeQbq9jqvfl3W1QVKVjaIiABy10DKN2dAClLZROlqL38NTaPtWzydH55LK3//WWY2z2sInKI18gz0ojMB6sL5ZuDWR7cBrl4NwTDAqZkVZLwLkPENAaAwXMgsglA5dV5SbvFb20JVT0sFZdvDwy8PiV0UJ7iuSOPjsZM1YNgCB/UPtFIyxyESSRi10GfU4jJdWqIPTuDmTLBwUr3aj8qqTGBXrkCjpxdmmW7PoZWbz0Rde4/BjcUoWq+WwETojse1Yyco+QUUggxS72fQdLZbVlBxHLn3iDQ/UNd5A4Jr60q1tKmXGpS9Z6xf9xSG7q/EwNgoBgIB9Pv9GJicxPD6XAxlpOOrax+PyMWtTyTzrrkELXwXNQu76UTjQyauRDduAtTsItTrIVpREdsCr3tOyft8px3XIxEH1yS63XR+GK+7M5bX+ttjl1XKl320AEp8EvP5QB4aBB4NPycN3s/lJ2e/c+iKWxYjOSnaDn4XxVnVN+Cnd9pxflU6hizPY/CLPrza043h2l2okC1K4N/mqFSBDAO+kmuOyEWHazXRWzVvgzExNYv6ckSb7BjhDtcYUcnJRCSd498khhjJfk5ScniXxjku9vCoJLb4kJEfMFpcEHOoaMD7nDxECBJBsGYrDg2Ma3yjTeuTLUKi3umxE47nzsInX/0Bw2PT4P7LHxujT9XBfUVZUGlaB4aNxepUvpYH1IcmqYg16cClSz/exN+F+rhrfwQmhI2XVJ/Mxz9EtPQGB0YKUgAAAABJRU5ErkJggg==", $C = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAACXBIWXMAAAsTAAALEwEAmpwYAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAMhSURBVHgBrVZNTFNBEP729bVQEVoOcFBD+LuQQoLBE5iIXjCcPHlVEmO8WSHGI+XgwZgYzkaBaOJV1ETjCUz8OUICGDSaIlVPCkWpxfb1rTPb3ddnLEiVaaezb3fn+2Zm9+0W2EGklFHSUdIZ0qQsybrui5M2o1JhJw2wW5ncjkiUAb9IJkEa5WfnxXPknjxWVm5sqDlWUxMCnV0IDQ7C7j1qXNOkY0KI8W0JuBwaXAFujd+ATKVgNTRA1Edh7atRLm5mEzKTgbv6gXyAmjt3EYh1GZgEkYz9QaAjV+xb168hd+sm7J4jsIJBCEIhJyg05SIh1S/g/sjCWX6N0JkhVF++YuAumUyEqTmZOS4Lg+cnbiPY2QmLJxCKEP5ohIYv8nHbpQn5+TkEz18wJFyuw0SyYggmyZwtLC4gc+IYgrEYAjX7iwSlKEpMuu1lQc+F798ok2WEpx+adZklguNCR5/kns2eblipVdgxip4ADAF8GUjpFZU+QreAAg04S4tAXx/23X9kJtXb9HNKLerbN26htdVFWzvcxkYhqfZSowpVev9+kObrlcx1HOnSZmCifDJpB1taeDDOGcxQo3+DtmA2m4Vt2wgEAkq9ncDl0AttrC6tZ13XRaFQgOM4CIfDiEQiqkxchW6VAQ1YlqXUAHnx+oCM9Y/7A2H/fD5vupq5ROqF4gh40C/lQLYTBjfq82u2/BP89l/EEPiFCVZUQ5dmL4TXUUvaIwiFQtgr8RHMc+sZaf+XbBDD99KOsAI6k0qzKS68pJ109XSt1VGrqvOACfjMGG1uqIII2Par9znCtionUOeGi0P1FjoOVJneaXphBZ8bs/w0cjKqJ+5+9/gzYJk812g6pvgsMrtoiDTd215NJJFSRJVErwKMIHZQraW6G7ihCJjJdHAWIwN1xYj+SiI9ZR8vuOLFs6Kwfw9EJsjwpYOlTzkMTXzFxzWnOE2Ux+9tC2GYgHvbq/zgCfNQ7sqMaxL1hr989xNPF7JY+pxDaq2g5tSFBQFXY6Ar7Acue2WWT7x46U/J3cuM/I9/F3ENsO4DTOq+BGl0J4xfdWjwuTJTrWUAAAAASUVORK5CYII=", em = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAACXBIWXMAAAsTAAALEwEAmpwYAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAO8SURBVHgBpVZbTFRXFF33ztCminHQ1AJqIYialIaC1A+x7a39sLFJM32kiU39qFHA+CFolMQoMiT+GB8Yox8ajY/E14fGUT7UaAT90PhChWBQzFzkpUJgGOYFzOW6951zhjEigcxO9pxzzzl7rf04jwHGEdM0HaSVpLdIPeao9ImxMtJMTFbYSABMVI5/ikgZA7yUGhepg7+fNHfjq5QkTD15BOHnzSjsXobM9GnIXTATzp+zoBWkS1MvaZWiKPs/ScDpEOCoe9SJG/d0/Pv9dMytOQvbwoW4PrsQF27q8AeHEQgNwdPhg0lrL+5ZYREKcRFJ1UcEwnOL/UFjF+48bMO6KR4ougfdy//E0bs+NL7qg6LwWmlsIhiOoKGlByV/fYOK4sUSbqOMRJE5p6ae0xLevQvDOd/CPi8bKoGrhUtR39KPYCgCY8TE7vPN0iPpmqWPmt5h+8oFKC1eKtOVTyS6JDhOzf9GYwMCv2hIysmBbWoyVOGBWIQh1Y7lqesJzozLrcn2GPCHUZ7ajl83/4eZc2bxRC0RLFOE9x4e8RfkQW17DTtFoFIuJIFEG1bsWJJWCnxYuGgU1Oqd/dDyZ+Hivt/kbIqdfv7gnmEYQEUl1OI1UKt2QrWrUAYCCC35EQ2U+56+MCKGidCRBphx3kuSweEIfIEIrtxptzaI2F1l7KSTe6dqXqCpPQgbed7k6cext18CrTq+WPUPZiOIwzUebDhQDz/VggvLys5nTQMCYQM93iGKlODI3l2rSw80Jsjj3umrrywPOBu9vkGU7r2P35vmoa2yGulbSnA5oxHbVuciRMCBUFS/S+rHCt9TAh9EaNCIbczb9V2SIJMJrAOld/pHC8r5jozg2r0OLN76GIeKDgIjBlZVF5G3Ue+5dbfasKkjy1orwTkC78BQjICLbCUy23kOrW+CYpGKyYsZK3hG6hS0uFdao4ykc2d68ufCCQWJCl8lQrwxAq0gLeZIopI7P3ZtPGGCOu45tQwkylAy14vsGbY4LLiZwLozOAJtUWpCJANhE+lzUkazAVyiA6vwvVHLXxVF+UgkgjPdDlSX/yABTvBdJLfLalKvtigtSiKP/4QluoPYNnf+DN4l1tvAMxYBM8mBHWvzaWHeJEhGwdlWSJXA/OjBcVHDjw6evujF3+U36WwExoXnulWszYurnwXukh9jPZllgsQ64XWP38Bd9xrPXvZC7/JbaxzJn+EnAnRqX8cDj/lkjh109NE/YU5cbpkJ/LsoEwB9cYAeMeYidYyH8R4rtDd9nBncagAAAABJRU5ErkJggg==", tm = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAACXBIWXMAAAsTAAALEwEAmpwYAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAOnSURBVHgBpVY7bBxVFD3v7exn1ng/cWyUj9ECAck4oAASEhYS6WyJhoYWgQSijIlDS9YFXSKloYzsig4JGhMqOwWkjCVIIjDBVvxRPvZ6bCU7k5nZebn3zZv1/hzZyt29+/7n3M/MfQs8R5RSJdKLpPOky2pPts3cJGkFhxU+ZAAOKjP7EYke4OeoqZKWePznUh3XFnepfYIdN9J7hgfSOH0ih4kzBYy9kU+OOqTTQogr+xJwOAy4Br5ybRPrtQBHCxbKeQv5rNT76l6Ex34D9zZ9OgPMfjOM0ZPZBKZKJNNdBMZyzX5p7hGuLjh4/1UbaUtC0Tb+qHZf+RBcIrqz7uHzj0q48Mlgsvht4olIYk7NTQ7LpblNzF53MDps06qMtwjRNEfo/QkBfyMImli8V8fXHzdJOFzvEsmKNIwcmtLfax4uz23h5VIGbijgBqQh4AWI+6R108ZrgtbiuWN05vJvNR1ak78ZbZOxfpkHH3z/P1adCKMnyHoZWy8S6000lekp40H8w/0Gbq16GDuVxc/nhpNQlS36+ZR7/254UWUA0WtDGQwVpUhb1l5Muh+2tjywhKFUR/MRosjHykPPqgzleHqSPZinztmdnR24rguLgFOplNbmk0BeBN4DRCpAKPuQ9h8h0/8m5w4mhwQcodFoEFEI27ZRLBZ5aYHjcCa2IKSoSK0MmBxm8etrkCkbS34Bd4MsrPwreLp7p8sfPsfngyBIpiqWSYi2QErZHgBDIq1+OPU+3Li/CLWdxrF3juNIvtJmBIMn2jKvCZobWts2y2QGN7d+xHv2H1iHhX+WRvHh6e96etDpPeeAn6BKrVbTC0mIWom83dt4uNuHbCYFJSk/9OwPFPOQ6XKbt6ycB85fuazXHI7JCvcymQz2k1zhLQy+VEMp5+CIXUchV28D7xTLagZmkXvXSc9uummc/8kJBVkYW98ZqpGOsdcxjj1QlMsfPuuXI/1g439lAq4ZFyuDWYiUZd246++ViMOIit+Jk2WBkePNwveLJGu5bizwaGqi1Nx4eInf6JmvhpKJ2dZa9CWpM3Yqh/MTRbS+oQe2XhtYpDKjc6nvBu5oAmZKJi6QF1PjByVRTZ0aL2gCI9MGs+vCqSKurLi94asvrm6JtVqIvZrUjT/2ekZ7zUWuBbyaDHpdmZOGJL4y/3uK3/9ycWvDx2qtofcUbEHAOYy/bbcC97wyezseX/qz6uAyr17g38WkAdhuAVw2c1XS0vMwngHMjCa1C/D7PAAAAABJRU5ErkJggg==", om = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAACXBIWXMAAAsTAAALEwEAmpwYAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAANuSURBVHgBpVZNSFRRFP7um+fYKM1YlkGC2o9hBGUU/W6KAqEgIoha6CJoWeREe8f2QSAFRaBE0LagFi1CCRQ1UJGoyFJz+tMo/8I3z/fm3c65c5+OzoyNdPB47zv3nu8759y/AVYQKWUJaRNpO+mIXJRJbWskrcJqhZ00QL7SmotIZAG/Rk2MtIS/7bEeWEMvYcd7IRMzao4RKUewbCdC1SdQWHHQd50ibRZC3M5JwOXQ4ATYgz9d9+DOfkWgaAOMUARGQZHy8ObnIEndqTj7oPTcXRSU1fgwMSJpziDQkSv2mc4WzPU9QnBzLYyAqSYJsTxTUmo9x4Iz8QGh2gsIH73qD0f9TIRfc2r6uSyzDN7/GMFNNTAIVQiZRiBSHoTOVo6eiTxS+/sbFO9rwNoUCZdrL5GMGpqRS1PiTLynstxBQXgjjGSC1Eq1ng3hJiCor1o3occTC/OC4TLla4/1Qq9fqwpJRz/CHxP3TwBUc44+oKLngMVC4Lo4KhPOQf+pLJKk8+PvECg/gNKLD/3J60z6d5Z78z8/ejJc6ZnrtgDFpQJmwZJVkgsfEhlCJpF0pVG4Hg4x2b/HzML1FTzSyBm0U+fY9PQ0LMuCaZoIBAJKF3YCZzP0FIh3cs5A5UnIrXVqDfQawvM8JJNJuK6LUCiESCTCQx2cQS33eMAwDKUMyE7C3zpDz4DXLYs76Uc/JK0Dqs8sSYTns7/jOL6pytALoiLgwSWZq11CUX4iAteCdBKkllLEXy2O+1lq9W1MYKazp7fLawzPXWpz5jKmZSEAhzyqOro02URWHs+0bTuFXMLrqGXK1ARVwWAQtm1nJ6g5D88sghh+Tt50XVQcJ4LT+RAM8C6KUafp2+xn3Bq44RoBkTOTf4lHR1qSXtlz09gS3snViTIV3xlNm9dWwjCFOTjZndotq+WQqQO3aU05CNy3PqHrRvC90cFfDTui+p5ZvUh9pJv2P/BNbel30SXSqd2lh9FQHdXnH/mLnltPvtvCu7ir3gbuKAJm8g31O64rEpkPiZ7Dcxm8gXy1NGvMjAcnhtTNiuGZt4j1Xca49SXncjCwynp7lNpD6eAx/yPbk9moSdQJH/zVja6JF4pw3IqrOcVmRAEeKatLB876ZOaITD36bTJ/aZf/8euiUQNMpgGOaFuMtGQljL9IMh+0fRoDCQAAAABJRU5ErkJggg==", rm = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAACXBIWXMAAAsTAAALEwEAmpwYAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAL1SURBVHgBrVZLTxNRFD4zHXlptJGokGBEDY3xbeIC4kJ3LmXjDhJN3Fv4AVJ+gOgP0PD4AcbXhhW6ILAEEtCFCIkmvlo6Qx/ToTNzPefMve20tKQUvuS093W+75wzd+4dgD0ghIiijaHNoW2IMtJyLI7WC/sFOUmCRjFZT0irQf4U/xJoUeo7jgO2XeB/nOM1uq5DS0sLtLe3QWtrq3I10cY1TXtZV4DKIclh6d8C9Ggx8DwXIhGDSXU9WO77Atf64Loei+baknAxekXRJFBkHGpFrvKdWn0uBt9fFanUlkinTWGalrAssm1pFo/RHK15+PGWmEafEOKKV1c1V5HPfJmADxvTEDt5DSOPyMirrTxOa85HL8Gb9dcwszaheMfUM9HVANV83VpFgRfQ2XEGHGGDpgVlISJqY+olCws6Ig+nOrpg5usELGNp5fObZAGp9Ig6zxaeAPKgaeD4eSYnYn5YGkjyoB2MBWIUTMQw2I9EJO7RNifvQeotJxfgb+EnC2TcNDoV2FkRlfdD0A7POX4Bsp7FviupRZUFIU4CD6g1/2uWfWmRVdyCgpcPb4CapkDZbqMPFxw55n/Pqqm7Bv7cpNa6tcbklL8rdgKHil1WLk01zJ0UeL4bZKULWEkuqqleQz4Q+GP/UNkzXFGsiFKJ1IIn3HD1IOtaJQG9tCocXZ1ImwEJbFLj2JETh8JLHN1Hz6quWRK40dkPh4ULxy+r5hIJfKbWne77UCqxgKYhJJfEOxLg0+965wBmMQAHRVdHD3NJvNVxa9Ex+4l6w7ER3irNJMA7DC1x+5UamkLuTbWLHqOZpDzcNxLkuR8VuXaoL47152Ob7wZqsAApqYGh2CiLUETVb2wt5mANkY9gBUbVxLjk3HXhJCA4WeF7Zk2c1s5pvu+Hzp3Kl43IDSMC3+wVrHt/mDxRP6bgIk+rm6NYdIVt2yKXy4lMJsuWzWZ5jOaqPgTi0AjkpT8lGsecOMDXRVwSpEOEG3IsQWf+Xhz/AS5HPgBrjxfVAAAAAElFTkSuQmCC", nm = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAACXBIWXMAAAsTAAALEwEAmpwYAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAPiSURBVHgBrVZbaJRHFP5m/j8xuokJiMbWSjUUWxuEtlBIaovJQ81DH+pDEYpSUloRitBs6cVCixuKFArSQmsVEeINJYIPgnh7MImCRkGjosZojFFjNNG4m2z2kvyX8ZzZfzbBJGrUs5x/Lsz5vjnnzJlZ4CmilCoiXUfaQHpTjUg0mKshnYfJChsFAM8rdRMRiXHAv6cmQlrE45arvSguspG3fQtUczPwSz9y82fCCpUid8ZS2NPLjWmMtFYI8c+EBByOABxNZ7tx8EQHvvwghPmH6iFLStDwViUqX/8PlohDuQn46dtQtDb0zlZY00oNTIRIascQBDvX7GdabqPhXDe+C3VAXruGh58uQ90FBxfbo9i5ah9yLJeABdkAvpeEm2hD7qyVyJsbNnBh44kwMedocFj21R9AYdxD+ccLINraIBcvxpnrcSTTnrasmLMetuWwkSbQJKRO/AJyir81JByu94mk0xDUUVMd7etAa+NyNLV9hm+ONaPAS8N624a650P0E4Gg5Rtnw84d1nvj8ChCZwLPiWtPpi7ca/LSSASVMth9Nc+sWVsPHxZ6nUKIRAKSVAwmIaekgVQKIpmEUKRIZ1pSiRRZkFo2LCkwfPdvE6YKPuY2dZbxyHUc/FrxJv5auwg/bliIwiV/QESjSJd9gtbOGO73DWkHquQPEP5QNoGcC46T9IchLcKJN8MdOGW8qJH0+Zx7uw+3o/eBj03uLji3+rClZybE3S7krfgCxXIIO5p6sGZzK5Q3SEEnj/yUVuGzJ9SqRyAHyAsKV+yo8WIJE7zHvR0HbyAed2CvyEc06eDnf1tQdXkB7qzfiNd+Wo09M07j92o6ioriT6CaQLESgd9HBGlIQhOkPnkRyDxpCqqze5BCIOBvGIBwFRzXx/GWHnz420X8v3ozbcvDV3+uhKTEG2B4CVLySLk6XIJ+7AW8/iyB4Drn3tCljyDdLp0ojrUYU+NPF3NkPTpSnvUG8had1PPsQafuWdNHVk8S/EmRU+aabixLYBWU41WJmPau6Z5ngibNWrh0ZIXCS4ldVGW6+zkHnOQoj9z25VRgpzOn4QVywBXtW3OQU3rSTM+XdHL43mjkkTU7TJsP7hhMTjJJVrBLtpqpbXwXyWDwNWlM5JdDFocz4JNgUMFathVTdfz126Dn+MNM2QnyQswKZ4/ds3jMOpAN2wZSG2COeXAi1KzTg9QV+LdWAcNd2XxwmyU05KEyvSGRXzYaPGIG4z2ZNQGJrnA1SGU/cARIX6FboitjwDXDgAVVo4HHfTIncFs/+tvU80uDeol/FzUBQHQU4M1gLhIc8wnlMX/wTbitBzYaAAAAAElFTkSuQmCC", im = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAACXBIWXMAAAsTAAALEwEAmpwYAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAQrSURBVHgBpVZdTFxFFP7m3ssihSJgFLP8CCbWH2ilJQ1amm71yTZR1CY+mGjEYDXGpqipb8QlxFRNTTXxSWOpD/60SS1oUiWNwqpQEVux3Ua0prvy061p7VJYdoG9945n5s69rAG2GA85d372zPedc2bmDEAW4ZwXkb5K2ksa4QsSV3OtpFX4ryIWKYCVSudyRGwJ8N3UBEmLxDh08gK6+87jW2onp+elTZV/NdatuQFNW29FoN7vLp0kbWeMvb0sgUiHApfArx84iT8vJnBTySoUF+aiIC9H2iWSacyk5hGZmAKn8Wf7tklCJUEiaV9EoDyX7B3vDeHdQ2E0rC2FYejSjDFhA691FnMkZ02c+eMynn30LrTt3OjCvehGwtycU/OzSMuFU2F0haKoKC+BJtAkuOOH23LFwMWf6JNOxOJ4cPMt8G+oddO1nuyjLkEnNU9Z4TOYuT+AnJoa6PkF0JQHyshxP6PPJQlg09ianoI5MoK8rs9hbNosrPqI4D6mvI/I3NbXgY2NEkGt9J7l58Pe1Aim62ATE9DDp730OP6riEgt+sE8GwYaG7Hq6BeuUbFBn4dFzxr4HiBwkXEtHof9xJOwmp+W/ht9vUjv2k0k48jd8zJYLOZtIFdBaXPzMmKzvx8mYakoWsVck+iZx45JcJ08tx7YhvRzz4Nflwd96EfoR4/IXNv+Msy+tZ+8MYFUijQJNkOaJP37soxaYFiEpSQgIqiTYVL+Zc4pHXZDA/TjPWA+H/SPP4I2OAg91EcrLbnKJAeMTz/x9oOlZsHMtFxvCx3odwmqBIG8UBgbE+cFfO062PUbkbvvTRiHCIQIxYbmtjSDl5Vj7rW9sNbcAYO8lhti2w6JSplGX+vqVY9Ac3vSgD4iZF5Sgrm9byDdstPx2jTBi4uROtIFizZdgtKc/G1h1z2SzNsrCKKyV3i9Y/RXDIyOnOzTZoPSxEtLwS5dAnIMOa8P/oBsolVWut1Jj0Cn4yVBp6bge8cpJ1rkPFJfHkfyxBDSL+yCfvgw2Pg49J6vshKwmlq3OywIQhJs+3bPwOj8AL6Odswe+BB2dbWcm39pD1DmR97jj4ElprMSGAtY3eKiiU2Oi5H5yENgdALcG8zLy2Hdcy/46kJoI79CPzGwLKi80UIrKpDz07A7Xe2Wil5qtnICt4jkXyVihWIr1b8JuSk6SKWieVGxS/x2zu7pH7UZcw/YtWlE0QC3saXeb9x4951iyit28liIDpGIGr6/4PbbtLPfJbSO94dVcbsWgVNN255Zjx0OuBDx8EQXuUckQWrEo4Nffr+CHa98TQ/OTFb4wIab0dZSJ9sM8KA7WOrJbFUkzpN56iK6Q6M4fe4KorGEtCkq8GELATYFKjOBl3wylw7aefQP8pVLL/8f/120KoB4BmBEzQXVMV9W/gGiH07mTVcK+wAAAABJRU5ErkJggg==", am = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAACXBIWXMAAAsTAAALEwEAmpwYAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAOrSURBVHgBpVZNSFRRFP7u+xnHMppER6IWtSoqyP43QbULWlSLov9yExFFE/SziiYIwooKok1UupZC2mS1SAuDbKOLiihIKUsUdEYdnd/3budc7x1HnRGjA2fum3fvOd893zn33AfMIlLKEOlV0lbSbjkpMf0uQroM/ypspB3MVRpKAYkizs/RECUN8f9UKoVkMqlG3/fVGsdxEAgEUF5ejmAwaEzjpNeEEPdKAjAd2jnS6TSGh4eRy+WUQ8uylLIwEK1FNptV/6uqqhSgliiBXJsBoHeu0FO36pF59BDOho2wXBeCnJERL9ImElL9Eth4ErmvXxA4XofgxcvG3XkTiTCc09DJtLDz7JPHcNesAe9XkBchCncjtPsJPH72aUG2qxPuyVMGhOlaRyA9BqCBhhOZTAYDAwOKV9u2FSVCezfjNEqVMmVMJdNaXV2NsrIynm4jmx1C776b3/T19SlDXmDHhhBsbob7rg1iLAE5vwLe5i3IHDwEP1wzBYQBWBmA88UgWhY59LPHJJUXq4T292P+uTOwR0fgra1F5uhx+CtWUuBxWLyJKnKgE26iY+WoOfHsS0cRYYDdKrFUhqZSKuqOwU6OI7dtO5LXbyhjBhc1NciFw5N0xWPAwlAeyNizLw2wjbdRy0/MIU+67e2wun9ADA4iffpsnobpI2ugqQnW929wOj5A0FlhYPZhypdkGQOoLTCHCuDzJ1Ut3qrV8BYvzjuborTWaXsD51ULKnbthPOxA5g3L0+V2YgBmFIl0nUmXiQSKCm01q8OQ9JJlkzF+PiUXBQKA/QY/njSX6sYg/3rJ6xYrCSGinDrViRaXiO7Zy+s0dH8HBeKlngewBz13MZN8GrXA3QmglevFA8glVRj+ghV15Kl8KjC/AULigF0McBbA6C4o0iSd+6S4RK4L1+g4sA+2MSxNTQIq7cXgWdPgWxOWUvivZjoCmJ5zgeNk6y44ObmeZ6iy/7zG2UP7sN93w5BtS+poWX27Ufm8DE6aOEZTs2BY6msrDSvl5tW0UrDdi6vkZGRfD6KtYdiUtgyQqGQpAPHho1kXzej2fm3b0JSw1ONDnMT1VX54cJl2Bcv8VO+2RXuImKuJ+9WvfTCldLXKmdRnue13s36whsuYvxOv3CiNPClo3KRoLPAYZeiyvQuvtkKKodvtShKhjsRScxshfIix8bGJOVGxuNxpVQM6h3PTfsQiGBOnE5c+o1y7tIq/+PrIqIdxAocdut3UV3mJeUv6BmxQ1S24k4AAAAASUVORK5CYII=", sm = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAACXBIWXMAAAsTAAALEwEAmpwYAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAPdSURBVHgBpVZbaBRnFP7+fya7NlGzFUsVm8YNgRrTFq1irRWax5oW0j4U6UOtPgqiEbwgPiS+CGLQPIkI3sAHH7zlQUERNOoKohjxEgQvSbwhXthVszub3Zn/95x/ZpLJamSDB87+l/nP953vzJmZBT5hWusEeRv5OfI+PWLpYK+VfCbGaxwUAJRr+8smooNrggyNnb/2VK/tuKgvXL2nX3Vs15m5P+q3LX/q7OZNupi6qEtUtZbiyRLwNho6yRPF/j5cvz2AlVu7cf3ua0yIxxGvrUV8wc+wJk2C7r0DZ/UqvJ03B96dWxyeIN8ZYHxIwJnT0M7z/PZtGNzRgarKGGYlp2BK9ReosC1Iz4XM5WALAXviRFTMboSdrEN26T8mJrD2qBIZ1jwKXty3F7G6OghhIZdXyA150BCwXA+W40CS82jlHNh0JdYwG8U9u6MkbeE9CRWwrIR3+xYKdMie9jVkoUhbgsCVIVFaQLguhJMzKphE5tnzvqrp01GkWPfypbBc+w1BwLScF87//1FGgEXAsugTZPMeEZACTSu3CEFggsBFLmvmDG7UWDbFwSQYWBO3OeP9xSuPmR8/MpJkOg1VKICSNuDmuiIGImVww2boYc6YTIcKJtZNpYwKe9Fi3m5lghaeDb0bVHr5CqWkBTcWg5g3XyqlZdahshCI8qhM381SbsvfCgLR1gPTKSqVInJNiRTeDUrbL/9vTDCHz/V81SDTzUkpLeoWIhGE+uTmKzh51wDcvP8G2W/qJZrqR7c2gytlgJVW8DwPkmL/8C/PFPyE8Ky+5TAGnmf9+84pB2laku6HjKY8AuyD6qBiOiidQu20Stzv+tecs0eHiZLRr72pf9kmRsWzgj6WkuoZoIwoY8tXwCV69tLB0s0pc3DPpgVoSE4eE9YUQnMyCpVxGz81zuDtDCvoZ4L5j3ugTp2kp1SaBNTCX1C1cMkwQHJGFeY+vALrzOmPE8CvkEc/spnugE9wgwm6yZsqpk6Fd/yY6WUWaJozQmDk9vbCPnpkTAJlSkJ1X7Ys3O7ijuCXGyT1rVj0K8ZT7Y/atzWEszhcnaCOEhmanOeVtX6jLxXjtzDOPngo3DpA2P1hT68gz7ACGZKMgyU8KtZthGj8nqec9BaemDZlJuoC3tgp120wtdQPHpRFMqyYwK31G8LtLYw5TBCQdPLLiaZtTGJnMhAv8iP5BWy6BBykWpBqVh8B7wwXox40usAfi4whSSQSPxDd2V2/o6v7Eb6cPAG6uhqoqQF45KZY0hwFzpSCjy3b/+gf0OXbOf0Z/y5aA4B0BLAv2GsPyjqmvQd6EnsusWyKrAAAAABJRU5ErkJggg==", cm = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAACXBIWXMAAAsTAAALEwEAmpwYAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAANlSURBVHgBrVZLaFNBFD0z76VpKZqoVEFRav2CH0QEtd2IG8GFqOBGFHQjulDjH0RoBXHjQpf+QNG6cWUX/kCsgm23giJWsK1UK4XSpK1pkua9N947mXmJNbUt9pKbyZ3POffeuTMT4B+ilIqTNpK2knaroiRNX4K0FtMVXmQApir3JiISZcBPUtNEGmfba3uH0UwG6TVrEQSBnuO6LioqKlBVVYXKykq7NEV6WQhxoxRPjgNvpIYnxL1vPfi1by8yZ04h6PqKSCSiAVkdx4HneRgcHERfXx/GxsZgHLpuMEJxy3iObEc7ci0tGlSuWgUxaxa7XfRKSp6viTiqgYEBVFdXIxaL8XATjQ3ZSKTNeQg+MoI8eReNx+DULYNMj0J6vgadSKPRKNLpNIaGhqwPjXZPbIo4rLifTGKMPHKfPYUcHYWTy8HJZojAA3n0h1pwjoJbjnaEnMvRGpOuezpFhukQG5kvnXBePIezfDnko2bNzlUgvHyhIgiYU2OFbdsyEevw8DBqamq4exuXOSd2N1s+bSqOHoHz4zvkxk2Qx09APHwA8bMPTldX4LS3qbDmihx2/6B8XwlKkxf4yG/e4kaW1vFQQnC9M1vu0kX4t2/CJW9cyqlYvRoiPgfo/GziUONaw8QfMoNUCn42C5/I5JGjiF65yhPecAQb9NSPH+DYTaE8ik+fAK5xym/BYwOsOVSp+xCZrE4jr+WTErS32dFa12wI0NtLa0Uh52zn8wWlvMLkOmwNsFY+fEqF6yR9+8VqqnVLcylEmaPt+5iqiBK1wlH16MHZMcyE6CiWLLFmKiRwGhowUyLo3jLynlP0lnSb3LkT/p1bZRe8qneD1w1OMBmw3ZJj+3fJ2kJ2WrhMeZOTPMHbswuCKsAeMCvNuyNo3lMxCXqBYEHlIjzY3mF7l0o6hXzNvmHLOXdBF6PV6Ygyi5o23bVd9wm7x95Fh0lTor4B0pBMD73QHFiRQN3sNfxTvw38QxMwU9hx9jzEVCMxE9j7AytO4eDK03bkssEsPjjm/g5JZOtbpRYvLpKov5WB183dimubH+MgEZSAh69auSczAXN9a5s2vaP/JZ4s7ER/plfPqXZjWD9vC+rn79CtkbJPZvnIC4/+fTV1aVX/8e8iYQCSJYDdpq/JlPmE8huy+/5qdwjULwAAAABJRU5ErkJggg==", lm = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAACXBIWXMAAAsTAAALEwEAmpwYAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAQWSURBVHgBpVZvaFtVFP+91yRNkybN7KptJbU17ebm0Dm/2A1x+KWjCI4JanEdyrYvQ7DVfRLBdIggyhRB2Qela/EviCgyXPHD9IN1CHNrwS0qNdO1XTf7L1mbvLy+vOs5N/c90y1vbuyE23vuueee3/l37ytwHRJCxGi8SuMEjbT4jxaUrI9GK26W+JAycKM06AWkVTD+Ak1JGjFen/nnJ4xOj8h5ycxIncZwHO2xe7G1uQubGzqdo4s0BjRNe8cTgNOhjEuDn6bexUxuEmuCDYgEYqjxhaRe3srBsJYxvfQ3n8Khzg+RIEBFSQIZuAZAeS7Rh84exlcTg9hQvwV+3VfSujpWURqGlUc6k8JjbbuxZ+OLzm6/E4nm5Jym05yWYxOfYDD1hvRI09mGACmvdke4TikgDb/Nj2FXYq8Dwul6gM6d19URTk3MNE2kZ39HfegOFEQeBTsPUxjEG+465Isg5A9LGe+Z4L0cGkKNGE4dxhilVtVvkBldef8sL+bm5qBX6eS5RsYoz2SQB/NsfH30fnTf2YMZ4wLJl9V+jiITqK2uk+cYRNF2bnOOYCevCoWCDFknpSvWguu1aZc8jwZuwzNtL+H49GcwiiQrloBN20DWWsS+9ldwYP0hjM+ddKJg6mOAx5kzDIOMl7zPrMyTEfKaBs8Gdc2T8QOYNS7iXOZUyXjRkDPvdzU9hZZwB2oDdbJOP86MOACPUItgM3OWZZUAqKCWMJElkOqqoKxsxBfDPdEtOJc9Jb2XxXYKTb/h9Fuw7SK+u/gFgr4gxmdPOgCtPlUQUrBdAAkoVgh0BbpWhUTtJpm+SFVMArAKr+VP2HIeSr8J2VT0Z8nKuAC6eyHKW7Gs521RlAVlaqpppWjqYNkrKApL7gknFA9igPOSKfP+aprKpUvKdDGeaNmP/6MmekoULboAgUDA88CylcWvmZ8l3928Bzvjez111wYbcXd0o7M8wwA/OADyZjJViPqDideQs65Ivrf1IJ5f9zraI5vc/bA/gh3NPdi2thvbmroc8dcaXwZiFniVyWTw+V/v4cupIxXeWVAnPYiDG97GmkCDK7OpFqZtolqvwTeTQ/h2+iMMP+regzYf5X2RQL6nxfZQKMRtIAOoVI0UtenLYz3YFd8v2zYe6pBdxek7NvUxxudH8f7Dxx31o/wW+dTiORqn/X5/rCWWoKoqaQWUy8YUjvyRXC2U7Qns7uhHIiqfbfltYEa2KSM5gh13PY1eUhTqOb4uidXGe9e5z/WAsnnNByeJ0suKP7NnkfxlHy7lJ6F52SfD99V3ore9n+aHyo0n4ZUE/pArEHnD+fEavTwiAS/lL0idMF02Nrj19q5ywxU/mR6eyY/+UXHjdELcwn8XfcrAQpnBtJIlVZt70r9eC40gt3NUmwAAAABJRU5ErkJggg==", pm = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAACXBIWXMAAAsTAAALEwEAmpwYAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAPRSURBVHgBpVZfaFNXGP+d3OQ2oamk7WrjNrduhbGxps6HMTqROfYgE5nbnsZUxt4H62Cwx6Vub3vxYexhsCnOoYiCIigIUqRYQQRNKKJC/4j/mtiaqEnvzU3uPX7fuefGtEm04hc+zjn3nvP7ne93vvPdAM8wKWWC/FfycfJZ+dQK+tko+QBe1HiRBlit7WtHJFqA/0hNmjzB48y8g8mbtmpLjqfmJOMGBnsi2PRmFMNJM1haJB8TQuxtS8ByaHAFeChTQq7sojsWRleHQDQcUivsqgerKnHvcY3XYM9nPXi7JxzApIlkrIlA71yxH7j8GCeuWXhvrYlwiEFDaCEkL1Jks4Uqtr8Txe6NXcHLn4JIRKA5NZdZlgNXSjh53SIJTMIN+VOEqO+Fu4RbJ+AIuL2xUMFX78aIJB7ItZFI5oK4WJrE9IMaDmaWMNhrwpEGYrDwYeIiktF5BZJzXsVUaQMWnV6ik+oHj0k89MUj+C+7hA3rTD4XPr995J8KvftZZtl9bAH5JaEIRron8XXyKGKGpTcvNChw+v4Xyv1AOAJPkUwvOhhea+CPrYlAqm6O4EvuZeeryJcJxjCQ6pzAt+v+ITmE1hDLsmLbK0dQroVxZmGbPg4BpyaUpNlcjbCcILtGWeQd3Dt/ywFowppICTv6/iUgG0LaJAFF4NkN7o+39x5GTBRhE7DtCjyq8lkZCmOSsXz7hAk+4N5MoUY7DiG1JoN+8xaES+ckCUxWdGstG8dCi9icOEUEwEPCc1z4ERNGhqLQNsASKcFyZanScSA2p/OFJnklatulKdAfmYZVk1pBnW3k5aq3jGC5wGLl5fbUIbYyU9iNx9MIUh/x1ua4Ezf9nL9Teb1FAWltV0tDLcD9UqKtWCcY7o+oJ5eKH+FhNYHnmeXFMFHY0vyCFBh8WjauMME57n28PqJyuuzG8efNn/E8O5b7Bnkn2fyCMEbWR4LRCSbY60cQJufQJC4UN+G36d+RrzQDlN1O/H37Bxy6+10LWon+uKDLVo/geFCLxqnZks3X8MtZS+Uyp1xHyMHm7nEMRGfQYdi4bb+Bs4tbUXK7moBVTfI8/PV5p/dWQhWx/YTxfVOxOzhVwf9TVZXPzRnVxqRfj3a+b2JXSt3gerFTCc4dalQN3zXUgZ1Dplrgl025OvChOjjbmMZs+uCk4VdWzBQ97JmwkVuSEPVpYgWhRKrPIPCIKnIN4Gk0rFixITmqSVSuZvMuLtxxqZR4/m0H3xkgRYAjrxmNwC0/mW2iVh/9/XL1Ni5f4t/FqAYoNADO6mdp8mfeyiczZD1xzYr3vAAAAABJRU5ErkJggg==", dm = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAACXBIWXMAAAsTAAALEwEAmpwYAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAANTSURBVHgBpVZfSJNRFP/dbVaCoBPECqul9IfKXEHgQ6lBf6io1UsRPVRv9qKzEAyCbQ/50FNYPmtEEPUglj5vWS+RkH8fKtRZFgWmaygp277bOXffnd/mlI1+cHbPd797fr9zzr18d8A6kFKWkPnIgmRTcgXz5pyXzIV8wUEmQa7oWktIZCFvpsFPVsLPoVAIvb29aoxEImqNy+WC2+2Gx+NBQ0ODDuWXASHEwzUFuB0muSJsb29HOBxGeXk5nE4nioqK1LqFhQUsLi5icnJSPff09ChBE34SCawSMDNX6oFAAB0dHaitrUVBQQG/AwWljSqYfBYaGxtDY2MjfD6fpmvRlQjdcxo+cluYvLOzEzU1NcgHg4OD8Hq9WoTbdYhEwlqgi4Ybc8PDcB9yw1l9MNUOS4Uq40xfP0ejUYyPjyMYDOp9CdGa48LMfopn5vfuwgz1/Pm+A+g3ZJqAtTVrYZgSZHIWMeF00M9F9mIDb4DpaewgonvRCA5v2IiBA9UJbNma1nOdcSYSiYSsrKxU7yYmJhxVVVU87WUBjxJ4/Qo2Gu1MNDuL86WlOP/juz1+4YJMeC6KzI22CvFoGAaLIB6Po7CwUOvWM6c6XwaVxw8cKpaXARLBl89wtN4RjtteiJlvaYTZqmBhm82GWCymp1ycmVoZpf7bqEVcgRZSsNMMBcmKCsSbmhG/eg3ZYK2CUVZWpkZbSt1iGc2l/sUgfs9Jo2Ib1gNXYD1dWiCsnOLi1eQm4pevyKX3H4RxrA65wOFwaDeSErDX1SOzq9LplMtPnspYx2NBPnKFRWCI98BPji9Bx3Tp9MnkKSJ7sd9udF0/YoAqyxXSSG7+o7MPbNXl+zn5Fhbgr+Y8L/h76gSmR96i9dQG2bfHLpAPZNJcxdsx1TSiZ3faaFP4uxFSAvd9sv7GJtm3O09yC3ouP9NuN3+L9Cm6SRYpPXJM3DpzV+hs8s3eV9cG9+ZqnlF3AztKgJX0hL++DT6yVGAu5EiS+3Vc8uIJK+60teaGsz/0cxSXXl5D+M/XlQViNXHDjqOKnEcLuT9biBbxmiLJK3P6HXo/9WPo12hKrGRjsSL07DlnJc56ZWavOnnpd8vcEZT/8e/CaxLMWwinzDm/eczXxD9yxBrNHuEvfwAAAABJRU5ErkJggg==", bm = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAACXBIWXMAAAsTAAALEwEAmpwYAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAPKSURBVHgBpVZNbBtFFP5m1uvGP4mdRAlYJLGtRCCEZEwLOCcaIQQX2lQIkCoVDqhCglRgTiBRaidUUSsuXCqoVKkgOCAhDqlUro7hEDhAkiNwcPpzqYKSWthOlqz39c16x3ViJ03bF32Z2Z2Z75v33uw8A3sYEUUZOUaBUaK7tu69yzISuF9TizyC/drl3YREB/IPuckzour5/1+KsK5cwRa3VC67c4x4HEbqaXQdPQrzhcN66W3GtBDiy10FVDg8cpewev4cnOvXYQwOQvT2QoZCvELAqVRAjPrKilqDyI8/wZdKaZo8i0y3CXg7d9WrZz/H5lcXYD73PKRpupN2ukoenFoN9dQtdL3+DgKHTunhj7QnQsecm0UVFkVuXfwaft5Rg5gg2yPpCfBfQEJ+kYT1/a8w5RsIffqZDtczLLIivfkqNNHS8jJunJ0hX+xRSN6ZglHbgFD9arX5TtaqMAbqMI93wxgBb2AT/hfHYD/+A+ybv8PL32XXA2/3JfWQTCbhXLuGCwfT9JIhhSA35M0ACW/XYpDD9kovYHP/tT6QA9Qdgl37BwgcRGj0ona018f/jqne/Pw8bNtGORzGe7dWxYlwEO9KiSEp7sZENESM02MQMb+XO8sdlLQFno567U/YlT/gCx9Sw1nlQYE7E/l8HsFgkEXqmJmZRn9/P4Z4+2d8kl6WSsVzp88H8VQQOMBsAz4YJx9hEU52+TbshX9RD3FO+o4j8OoZd9/Kg7TqFYtFjIyMYG1tDZZlYXV1FZVAACeY/E3m/8Qn8ZgSqHLab5SbyRYxByJlQHRz8M7fBCW7UD+yoIcT0J9iPB6nltPXhGEYZJomjfpNuhTsIqs72EA4QFaInwN+srpM2jodp41jA/Qf96uXDjc/8V0FhoeHKZMZbxM8aUj6+4DPJW3FJmNjNES194eoMvXsNoGS6qTT6SZJJBKhq1d/poWF3ygWi7WJxPl8fWcaTptA2E/ViJ9qHxxpXorQl1o2m91GkslkaHx8vGPYNN42pKO9aQo8GabNcx9rgYISyLu9QmGbB3sR7/TmW9NoCDAqDLs4rwWy+s53bWJiws3F1NSpfQtovMW5+Yu9qT4x1nqNJ7yPpREmPqr3TbzTm/XlZUfXCGijRoFRVYpmZ2epp6fngQRyuVwzubSzAFGj/LmmJj4EeSP2nUwnXNni4iIlEol7Equ8qQPSYvlWzk4lU6nn4JVMdQnOzc1haWkJK1zBlEWjUTAxJicn3dazjiVzN09UTr6h/VuBHuLXRdYjWG8hLHnvVEije3HcAdKaT/aoV78UAAAAAElFTkSuQmCC", Mm = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAACXBIWXMAAAsTAAALEwEAmpwYAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAOSSURBVHgBpVZLa1NBFP7m5oFJE5o0VhqQGqtSpBFbFQSr1sfOjeIfUEHFnRUUV2oKbkQQ3YovdC1WBd2otaDutFVrqQ9IH0Jr0aa1jc3j5o7nTO6kF5qGVk9yMs/zfXPOnJkJUEGklCHSC6RdpEk5Jym7r500hqUKG9kAi5XbCxGJMuAnqUiQhrhtvn6F3NMnqpRTU2qOUV8PV3wDvPv2wb1tuzadJO0QQlxdkIDDYYMrwMzVK5AjIzBqayHCIRj+KmVipWcg02lYw0NkA1TdvQdX0wYNkyCSjnkE9soVe+byJWRvXIdn8xYYHg8EoZARFJoykZDqF7D+zMIc6If30BEsO3NWw53Snggdcyp6OCwMnr91E554XA0KQjGEczXChi/ycd0i8nxvDzzHT2gSDlcLkQxqgttUHC70fUR6Txs8TU1wVQVg2KBCowkBOOolL6hdmP5NngzA1/lI78tLItgt7NUnuWdmczPEyDARxGnVokQAhwdSloJKH2HXgAINmJ/6gNZW+B881pPCbvo5oDb1y2er0NBgudashbVihZAUe2mjChV6Zz5I/S2FzDJNaVEyMFE+mXR7Vq/mwXb2oIsqu6YoBWdnZ+F2u+FyuZSWMoHAU6kUhxJ+v1/NYZVS7wURWBYKhQJM04TP50N1dbUKE3vQrDygAcMwlDKg1JlDksvl0Pv+Pb5bP2HkBGLBOjQ2NiISicApPJ/t8/m87opxmNWB4hXwoFOYhJXJn42/xdbGIHZsXY/O/helMe0Fg2uVcxsVczvZnaVTOHzmdAY9v7KYGetBXWA5AoHAvHllCPgMSc6g2MTEhBrQIXIS8Vgmk8G3zChCviBqEUQ0Gi3rLe8D7184HObuSfZgkAm8Xi+y2SzKSU1NjSoj2YjaD9ZKwglgSy/Xukl3jU8WcOziG1MYxewX8+/BiqIvD0l7ee10qxEPqmP0kAn4zrjQsLKawuJyd7/9Yef80giKB0NiVbQK8bU1urOTDqzge+Mlt84da4E+Pv8mEvcv79WNO3wX6bw8QjrZtilaJJH6llk8MNuw7cZ16myot4ErioCZdMf5oy00sXkJJHPgbGtLh40578FJUMGPDj58nZAHzzwXQ2PpivBtm+pw7mizKh3gCd0o92S22yTqhHe/G8PD7mEmxODojJoTCnixkwD3t9U7gcs+meWdLj76d+TipUv+x7+Ldhsg5QBM2n0J0lAljL9RDjgADl19OwAAAABJRU5ErkJggg==", Am = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAACXBIWXMAAAsTAAALEwEAmpwYAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAK5SURBVHgBrVY7bxNBEJ7dO5tYQuAuRAIrDUgQXnUcCeo00CAqFOAP4CKPMnaJaCgREiRI/ABo0gakODWSQ50It7F9Z8lnhzvfMTPecc5P7CSfNLp9zHzfzuze7QGMQRRFabRNtF20w+gUNTOWQ5uHaUFBhmBSbI0SUkPI3+Ajj5amfqvVgmazyc8wDNnHtm1IJpOQSqVgZmZGQh20glLq/UgBKochh6C4B9WbtyAIAibUWrMRSAh9wfd9Cgpnnaq2Fu4JTR5FCtLRQ1YOrXdvwXu9woS0wkQi0SNCbTKau5RIRI3nzzhGBGhvegRM/brk/udPkLz/oEv4P0vevgP+xw9xkU3ZE8mASpNuH5TgLzrZ12ZBY90ty2ICTHnAugLk43lgz82Bj7HB/h6Y/dtiAaP0kjrNlRdg49PCraGgOCFvmOo9EzxH/rwYG+OAF2jwmI45ZfCUem1SLv/hlHSthhl40A/a2GFQ6Ktdl2PDYlGyIORo7Am1gp0dXoFF6VcroDyvh7T/GW+Tr6ocg8ZY4mgjl8EjqshDdsb6kxoX4eQEAyoDRMNE0D9Sx7igwO9kQLZflOl5EuAXCsplUNCpKYvgGR9Vkh6QD5JLHB4JaGO5REDHVgK0hwrODhUzAQkccevKVbgo6ExGmk5XwMpm4aKgFu5K8xcJ/GTV5WU4L2TH7FOu7yTAXz+9uARqMQsTbOt4ZG4gz5L0vuHRVfSZ/UE9a22DBcSmgcTYX77K0DZyH8kpeoXmUAbaiExLTlCrG1J/vhuowQKk1B1YXQclmeAZH/cuyDx7ILm1ti5TBcM5cOHkofNlBfhdAvd6hi+X/o9cXMC2rPDyQUlT9jHyPIxZVc5c6gy8taJGoxHV6/XIcRw213V5jOb6fgRyMAnMpb8dTY7d6Bx/FzlDUIsRHpoxuh7T4zj+AaCs8yjORkbTAAAAAElFTkSuQmCC", um = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAACXBIWXMAAAsTAAALEwEAmpwYAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAQLSURBVHgBpVZdbFRFFP7m7r3dn652Wymihu4WjUZpJIhgRJP6YNQ2Cn0w+uSD8UGfdDEkmhjCgi/gHxBJTAyxGElME5U0ETDEhNZYpLWEYmnUii6lQKih3d1u7y6792ecM3unuxu6ZIkn+TJnZs853zln5s4scBPhnEcEtgucEEjysqS8tbhADLcq5OQFqFd6axGxJYK/JYaEQITmg+euoX/kKn46N4t0zpI2sdYgHm5vwuYNK9DZsUy5pgV2MMb21iSgdnjBReBZ7Pp2ElP/5rE84kdzuAHhgC7tFq7bMAWSM6bwAb57d70k9CQhSHbcQOBlLtnf7/sT+48k8dj9d0DXmTQTTuCeAyeNl/RcwcL41DxefzaKbS8/oMJtUZUw1XMxnKG2UPDPjk2VMmJaOQdWWSyvGFw5nj6fwpvPxxQJtWutILmgeR7UmkixWERr0MLae5tA7c4VuYArdA6zwL056VjUc0XAFDb3LAtiZ99fGJyYhbd/vTIvL/skTWauTMJlt8Hv9+PImQz/+lQKMxlL5M4WG8p51aZ5ZXCp/5ZMo3N1M37c+biyaKYKekgr5qZh5L6Bz+eDxuew6dEWtueVKNu0rpmbBRcKeaqoQHBK1XmVpExHtnRwYk5VQRIngs2k2eZZQG9Fgz2M0Px2ual3RQxs6VrBDr99Hx6JBtzcdUecIKcUvFAiMoVOxNeydmnPBPpHZhRBJ7UoRT3L//MGWOE03NAzsBtfBDdWSZJKOTw6h71Hr2J6tljVpXzRgWW7pQ13XayJNWL0oyfpZ7nJ8oOCdUUGNIq/QLfPIrCwXxgv0AmTMPLf46WHBjCw7UHEu+5ES0jnVE1WfA+Ww8sHXoxp01L8MV1plKy00cJw9A5wPQrOGhczdX2tYt4Cls1i62Qf3jvey9j8fLkSD8TlrFwptDG5TgQXiAkNbXCdMJhxN3zOeViBrqr22MYGGMd/4KFdrzHt0jRqCSWptbWpabpMcHsPLPNv8OB6GPavVU6+4VMIfLoP+sgwQx3CVncodYwIBgWeMoJRFHKXRCva4eqrZCbUgsC+T9yGQ19p1R9AbSErvbtbTfvpFNEm00lCJpOB4zjQbJsHvjjAAgc+58hm68qaAstzJPpvjI6p5XZNnBy6NwZoFgqFoJ8ccsPPPc38ez5GvcEVgcz+y0Nq6WDlXfSqQNowDIT/+F1jly/jVkQ1T9v6juq/fBuqjUrPnxTnw93cWd7CXQ/8JqDfydb5YHflCxdfOhPOE4smE+Ous27NDURuBWTgnhe4O/RzZfBEZcylnkxil9e3nJ8cAo4dBSbGwS9eLDk0ibdio7gKurrBNj6hXJd8MmtVQo/+QV6/nOD/499F3AuQqgiY9NYS3jGvKf8BmZrGK0hqtsMAAAAASUVORK5CYII=", zm = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAACXBIWXMAAAsTAAALEwEAmpwYAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAKNSURBVHgBrVZLb1JBFD73QYGQCBpw1wbXmljTXTFxLYlaf4K/QEw0XUqX1Y3/oDXxD7jRZTWxrjQSH2uaasISCCE87x3Pd5ih09tLBcuXnM7jznzfeQwzJToHSqkc23O2A7a6OkFTz1XYirQosEkTzIu9WUJODPljbqpsOYz7/T71ej1pwzCUNb7v08rKCqXTaUqlUmZri23HcZxXMwWQDk1Og8GA2u02jcdjIXRdVwyAEK+l0Wgk43w+L4IaVRbZOSOgPRd1EHc6HfEOpLxBLOKMGMSGwyFlMhnKZrPm8xMTiWNyzs03pAXk3W6XksmkkM4jgBYRWyJI1y3ec+Tq9UhNDp7Ac4QLYs/zTgnYZlJm1iQSCdkLIV2/PYlAe1/HoNFoiBq8NwS25+jD22gkiAIGctSrUCiYz5cRwZYpKhbDI0MWRZTcFoZhLwqvowAqEHiAHo6h7bURMKTRNk7Q7AeXxh0IrKOH42gLxBHZbVw0pjbm+DKKPukflOIfE9ScICAnkvt/AStdYsGQhXm/JV5EkWU02Fgn989v8vSG+el1lNoC/hOsrlLqa03m4fSR9C5laVlw19ZMtzUV8EolWhac6zdMtwaBj6JaLtOy4J9wvUUNUOQmRuOH98n5fDgpNi0G5B93bcj5T3ypmelrLp8W3BsfMPKebU+Lpf5DAOa/fmOm9u276BFby9kskatFFiUH3KfbJv/yNpxeNHn+BMHLXRVcvaJCbeocw3esDV7s2i9cJd4TparTJT+/q2Dj5hmh0DIh3rqnwsNPNnnV5ox7MqEu17eMuej0/h3Rrx+kjo8nG3Dnb94mulsmpFUj9smcFQke/X01Pw7UBf67qGiCpkVY13NVfcxn4i917iVThT/P2AAAAABJRU5ErkJggg==", hm = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAACXBIWXMAAAsTAAALEwEAmpwYAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAASTSURBVHgBpVZtTJtVFH7u+74tXw1tB2Ng+WjBGQbUj6D+ANzHD6PWLSOaaWKMc8YsZj8cWZxb+EMbE6fR6GI08QcJC2j8Y1xQR2JiVrYAOrMEHAycmbR0KhuU0gothb4f3nv7vqWTojM7cODe23uec55zzr23wL+Ipmk2ql1U/VQD2ros6msdVJ34v8KMdIA7lZ7NHJEc4EfpPy9VG5sPBobQP/UtDnaPqK5gTGBrQnU1xCY3zB4PpJY2wzRK1UcIOb2pA5YOHZwDv33hfQSjIWyzlKF7tESpUQpFZqLGl6HF41BDM9QGKOrtg9joNmC81InPmAg5Iofv/Ck8+8WLMEkmNGyrx5YiO0RqJSQSYCoRAsligamhEZKrFvHnDyD53rsZB6w2tzHQ8zfK0uLzn8Inl7rxwD1N9FOS2fXpoKA4Y+AMNPqTtgMfq3RfamwUpsOvIf/4CSNdD9GYggYDlhrb2M1xeP3voKK4HAk5SXWFagI2KQ65dAmqlgBZSbMQVlYgJJkm06wqKpCiLOSRIej16+Gx6dEH2MT1gRvBWIhG7+ZRP1e3hmqLimuLIo7JKsi8AOUvoHjYDCnMmKQZMj4KpSNfnQBaW1F49hsjQ3bGoJ0XNTjEwSEQLKxE8Mq9i/DAhbzz2/HIj7WQA07Y/NuxulyDxBEr1griPHLGiLOKxXhB1eFhgwWTDra2n41YK/IdNKidjlkcbI5ix/QMDtyag2c5D/Y6E2A2o9Q+Bi20hBsvhwEGHqfKHC2EaWyEFQnKwIDhYJdE/zzIRiz/HJ3+Nm+NYyaaRMO5cuClI/iz5QmcHQzgaDftffcOCA4VaEphtWYJeZMCZZAEkVNpBkxHhg0HTkkvCAIsPSRNwkG3DVyn0bTPI78ggqu/LqDWUYzvfvgdpa/fxH23TJBdMcirEvJ+MvF2InpLUndQaLoMB5lzgPWOZGXA7BxQ9bUFdVoRbBYzb8nZcALN3RJS8SQCoRQgK+lezYIguP30MgdBXu58K19Q6KdzREBPMA+RyhLcuNyL2spiTPwWwQtbxxGJySjel4Ajn4BMicgl7CrRJZpxsLvmscyGvl/M+PLxOD6suY6U9jMqPW3o/KoTmu8wwq8WIFT+BwofVlA4JeV0QBqbjOEYc3CBjfbXP53ZcGlegj9iwv2PhnHaEsPnT1qRsC4gUWKHeTqKtQkRUodlA7CRLIlegrr0s4PGirzIZnt692JwZiiTyGeca2itUBCIEHSqKtRxEUUlGoSPC1C8JGwA5x1UVQXT5TFj2WXcRX6WJXbY9vTt3VCpMrOK7y8StX5UFEwpkjNyw4Hov6iShkbm/Qy9iw4ZYRyiGt3tbEPXzpPrFrrMrdFt06KaCzzbCXnjBHRw/jawde6A3XrGgnfXSXRRzVj9h2hZ4OLxN41ln475j82a5jXewNHZK5rzI7eGt6xcrzTYU1rZFk3NUoVp+z5NHR7Kfj692Zi5nkz2WPDrm81Z0fuvncOxzyZlx+SMxA2s9Mywp/IpD0hLq2Ga88nMTTv96J/R7lz82l18u+jQARazAAP6mldv803lbwjvkzYz55+5AAAAAElFTkSuQmCC", Om = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAACXBIWXMAAAsTAAALEwEAmpwYAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAQtSURBVHgBpVZtbFNVGH7ubWcHnd1nARexXZyd0dEBKoZA1ogYNYYNE4lBopkRQaPE4h+NbKObGjVoQqIRDOr2R2NcIG5Gf5mwjhhBsimdGrQk6ypqCZRus9/tvYfznt67XbZ2gfAkT8+55+N9znnf855TYBEwxqo493Me55xgc4hpbV5OJ64XNEkzcK3oKyUkFTH+Ci98nFX0nR3xIzM0hBwv2fS0GGNyOGByt6C8rQ1lrR596hRnjyRJB0sKkDs048Jg4r13oYbDMC1bBqm6GrLVymdIUONxME4lFKI5qBw4CrPbrZvxcZGeBQLayoX6wUMnYPnoANvhkiTZbBaD5m+VaVSTSeR//w2Wnbtg7ezSu/fqO5F0n/PiF3LLm0dO49DAH3C76mBX4th1cZjdlwotdKUg00oJmbFRlL+8B9Z9Xbq71nCRkC7Qx4uOM39Fce+OAay6w46KpTcJd9AaNqy2s+cea5CW15ZjnksFVVVFPp9HJpOB3W6HxWKh7mEu8ICkrX6CWhrbvsRkJA43F+CdYmUkImne3Pbgreyphx2oqigzulYIEEnAzF1KIhqqZf6zlWr+0X+FcUDG5ZksEmkFyQwnLxOCefR/F5I6ek9Jx/z/MONOaDFEk8mEXC4nhDR4SaCdaoP+yUJI+MCLUxlhdH1zLWTelOTGk6m8KIN/x9H9ybj0yN4R9eR4VDEKybIsmE6n9SaPmf+splogGBWrJ2ZyKi5xkUfXr0B0OosfA5e0sBbcRbU/QzPy9u6fsC32M16dPIqViQhU3i4UW1qAk6ep5qQYiO02tn/FXZQQAnuedOH1Z+6CpUxGXmUIhmew+51RBM/Hrz5FvE+l6SpYZ+QbdFweQU3+f0nliWg7GxTjzLgKhdh9+PU5ZHMMb7+wCmbuo+3dp3D+QhKlUKkm6byp5Wpemp8zJBCirVRW0NFKakcTcK28GZ2Hx+Fy2NBQby0p8Gz0BPNFjkm1+bgsEg90lTj17qlZAc89tyBwLqa7Gu9/cRb/RQvBum3F0gWGN7jrsH/n3crapq0m4AOktJxQFEXPA8KvFFU/1do9Dsx5F7PGCeHI3OqX1yxhn+1bpw4e2Ii1TdUmFIFBYJCCTLdmjL42v/g9/GMXZjPYCJu1DLsfvx0vPdHIKpaYi93CItkINTU1enODzBOE7o1h+up6fs3sDozYsrGejRzexF57+k6UMq4dRthsNr25n+4ifYBTe6VYz5ExZl73OTPf38c8zW+wH+qaWaa8bFGmOVOc2bd6jS+ec/4qvHpv76dj6sf1m9S0Nvk6jRO8KAbe4dNHKIGAkmpqFJONQmkDqS/z0Gam+IeNxn1Gm8X8Ser0soknU+Uvm/LtENiZAFg4VBhUWQW5tRWmLW28XPzJLLUTikk/u3YcZzfw78KrGYgZDE5obT7tmJfEFWC/5F7AwdX5AAAAAElFTkSuQmCC", fm = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAACXBIWXMAAAsTAAALEwEAmpwYAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAONSURBVHgBpVZLSFRRGP7PnXEyszKzhxJii4KiKbOioKKCoBa9aBEILZIyqI22CSSiESqiXLQUonQTRW0qJAgpnygIag/RSGvMGJ0cH6Mzznvu6f/PPceujYpjP3Puedzzf9//OvcMwDzCOc/AdgtbHTYn/yvjcq0UWx4kK6QkARYqVXMRsVnAS7BzYMug+WBTOzhr6sHV3A6RCZ/Yszw3B7Lsm2HjicOQc3CXUvViK2eMPZyTgMIhwQVwR0UV+AeGIG1tJizJWAEpy5aKfdGpAET8QZj86UIlgOPPK2A1EkpxIEl5AoG0XLA737dAQ9FNWLfHDhabFRinnYw2Tfdc6kUDIRjt7oOtF8/C7rLLCu6a8oSpmGPXSWHx+XzgGxkD14taPtLyiREYbk6IpaDAny7nw53dsO1qIZIUq3DtRL1+RVCF3YVoNAru/gH4eucxhF3Dgp9NW2Hy1zSmoY7P8KQfPfkOJ99WqrzUI8ERJq130orH4xFKNpsNeu490Ycb2zVFkiDkAAMjXMwgGfncC+sPFggSKaus+DhDo0gkQp4AD4ShreQ++HqcGvsHXBlu7lW4YuEooAK4sTiGsGUbXpSihXBaEWiahtWyHHY4rkDWXjvEMYGxQBCb0cdn9CGjnzLmkVEvaGQQ5qsfy1rKIfIgn0axWEwQhNyj0Ff5krve4CbNQvsNK2UBJUQKX8SDYYhHY2JOW4aaOtXrPCIQB0rXdUGQlrMGsvZtB3dtKwv8+g3MgnYxDaa1zTngGHmdG+zyNQVVHUhFMEPQZK4HQ8DjcRFqHqf06ZCMmO0g0/ppYLFYRPyCgx420fODh4bHGSxCSCk9L0dNvdMEKSkpYmUphmjDqSNsdcEWDouULPsmNfxIBA00otqnhEXxwHTdfsRG2roW5QFZlXvikJq+poNGSR6nmd/vF8nWsfRai8t1T2OHlgwwnYe03Gw41/VKLW/UMO703ainWWpqKlaAX28+f4MnA24mOfrsgQptNX2LFEgRNq/VaoX0NZna/qd3efax/UkBk/U78UOXad9EoRV3A70TBMSkFsgLb1uX5nrXDAvJsgLPR/D8sktquVxiJlw4Duzo0oGxL9/gQ+F1mBpwz0uwDj9uBLz+QIEZ3KEms12ZpZJEnHB3cwcM1DQgYa+43UhsK9MFIFWLCXjWK3N2t41Lv5ovXOr4f/y7KJUA4yZAp1xzyDKfU/4AV5dB9VZuAcQAAAAASUVORK5CYII=", gm = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAACXBIWXMAAAsTAAALEwEAmpwYAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAN5SURBVHgBrVZNbExRFP7eezOjpWOKSPy3pCKiysJOFPGTiCiJjR1LG9GFhYjGtNhLBBGJEomF/xKJRERnLEQo9ZeUolOkkSgd7cx7M5157zrnvnenr7R01Gm+3p937/fde8695w7wBxNClBMOEe4TusSQ9Xl99YRKFGs8ySMYqzWPJqSNQL6XiiihnNuxth60tH5AnMrkwCAevW2EUVEBo2YZSurqEKxdraYmCY2aph0bVYDd4ZHjxduvOHr2Kd51/0C4bAKmTJ6AstIgTn0+DyeVgiDYiQTPQeTyVQRqahRNlEQaVUMfYeV48voLzlx7hRWLpyO6ewWmRkqh6zrSGRt6Oo2ApiEQDiO0dCmCVVXor9uM9JHDBQGOzTABz3+SvKOrFxdud2D39mpsWjkXL9//wPZ18+EIDWbWgW6aPqRhQCC0pBqZE8eRPloQOaRiElAd7PNETz+aTrdhz45qLKyIyFUHAwHciH2CReRmxhWgJdGf611BsOl/cNZsZGgXoVW1HBeOXzNhre4p7eLBOxvuYVp5KSaTz5mckbPdUOVsQQLUoFWDRDRylYKRNmEEDNoNYA3tYg0fc3bRNnVaHr76inkzy3CdVvzmYz86Pw3g4p0PWDAnjJSZpxjkoUly0y0Zlgv9e5/0tx2PIxePKZF67tvKtZZYN8VCw4GTzzAtUoJLdxNovtmJuTPKsO/YY3zptWgHeYBWDCLkXUik3F3gW68UYORu3VQCqzkGy+Wx7Pzmfdax/3gbJpYGEJ4UwmDOQdrKe97WIEzLqxeOHwla0HI5OVvG5EFcfa1kAXmhEj2pwq0ws3mCjd5kFoauUSx814VjoIgZjiNLDSjASSaHCUh79qYBene3DJQaWKz5RZTxrhKyEon8E+lIZlRUqmqyIGBQThEYv/Ei9aG00c4C8kwFt9Thf5gYztWi8WWgSh+3rI3rAToBOoqPARM7XFKmndjRqbrn65T5OOSt3AodbJADFYoVYJRcuqK6zhF3wv3oPjD8SonBw03CLAmKDCE7RvBYizB4pMn/4lUOX4H7/AklYnkTM8WTC3+6/lUkqkbY7e3CWlT1m1DGB/6W3bBe2LFWP3nUzznSk8nqMn1z26HEZVNuEc9fQHxMuIMi5dBra2HQadH/8mSOthOOyTkxdrsvxvHrot4j6PMRdnl9Ue+Yj2o/AXoGqSix5uf4AAAAAElFTkSuQmCC", Cm = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAACXBIWXMAAAsTAAALEwEAmpwYAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAM6SURBVHgBrVZNSFRRFP7ue29MU9SFhOZiXAQhhX+R7ZoW7iINotZFtc5FtElTs/ZFRGALXYcLrZUgmLYqEfqBiH5QySTIn8mcNzOO827n3HfvzNNmdMoOHO69597zfefnzb0D7CBSykrSHtIJ0lmZlVVt6yStw98KO2mAQmUwH5HIAX6Nhl7SSl5vrr/Exs9xNUrvlzpjhWphl9SjqKINTtkJ4xol7RNC3MtLwOXQ4JicWURjeRfs9AIBVkE4FbCsEuXieTHItAsv+RWSLPtT9+E0NBiYXiLpMwsrR+ToH5jGhRtjEFYRQvsPwSmqgGMLWCKulOdOqBSh0no4xWGstZ9G7E5/hoB7YxaOqXkG/PE0Hg2/R3P9AdgiRepBCD9Xk64MjJYNFB05isTDB+pA6c1u3uohzBHKZM5kwKWpfPNxGbcHZlBdVQY34VG0ST9qJEjj5J8gMn+ubMJX4cYQOliLBGWRmpqE7t+gKpGO/iIvzl0foygsArGIIE2ArgISCjzpk0hWY4srmx1zYTs2KBnE72ZKdYo/c87grGnq/Pd11ZaVtQ3EFEHCB1TALtVkG7jUWcUpkJVV1dD01JTJgqWTbR08G52c14UW+BFNKgIGVOoZTZC6ekxoQhciFgOWlxQBa+rZU0MQ4SY38eztp2W9bSGZ8rBEJIJBpRdoay6hvaUliFRKefPJ9Isps1nn6IZgbnF9y68itekRNtk8T/XF5+AMA2SS57RP4PpDU+pFo1sIAiK2jfABVBbZgPNJkMQIZzXHk4qyffqUwF6Eve1wnVlGMwSRYzW7RlioWNlr4zUTqG+qIxLG/2Bg79CZdrMcZQJ1+3EGkZbqwLF/AxfhMOyTEWMasei+4JY/51X31WbsBZy1+MmwMQ0F76JLpNFIS41PIs3xwsFZQl3dVP9Gnqq3gSeKgJmM4daVZiJpUiTMI3fhUWdotAk85N+kLH0a848Hpxf+zYp3X1bTh63ztuMtZL5cHmUgbDUvbgU+X4aVrTuD95pFriezU5OoX7iMvwLccSD5AXLzm+9glQMlx+kpa4MoaTWuOZ/MPGmrR39IFi4Tcg//Ljo1wGoAcFbb+Hms3AnjN4Fo/CYZbDccAAAAAElFTkSuQmCC", mm = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAACXBIWXMAAAsTAAALEwEAmpwYAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAL0SURBVHgBrVZLT1NBFD5ze/uywSIBEhckNe7E4IMdmuDGhcYH/gR+gFoTDEtLXBg0MRJ/AJj4B1wIS9SIK40EZU1hQwzGFkvt4z7G801n6KUPbCMnfMzzfN+ZM3NnSnSISSl7GY8Yy4wNWbec7kszUtStwUkTdGrz7YREC/L7XGQYvWiXy2UqlUqq9H1fzbFtmyKRCMXjcYrFYsY1z5gRQrxoK4B0aHKqVCq0u7tLrusqQsuyFGAQ4rnkOI5q9/f3K0FtGRaZaRLQkSt1EBcKBRUdSNlBoSEYBYhVq1VKJBKUTCbN8AOzEmFyzsVXpAXkxWKRotGoIu1EACVWHBBBui6wT9bS85GaXkSCyLFcEIdCoQMCQZiUmTnhcFj5Qkjv37xagY5+A43t7W2lhugNQTBy1BFt40qwCgDk2K+BgQEzfMLmfxOobf7Yo6UvOQpZNiXiZY4opMmbDlqD1VLluh7t/amQ53t0dTRGp0/2YDANgduozb3dopeLm8wXomjEpr6eCFNzxA0Sze3aivJ7DpUqfKqkR3d3BD2fPIPucQicR20t+5s9LeSBKo6knwWH4mHkF2moEwotUk8RUanqkeP6ypekRR/Wf5nhlK03hLI7Ze0u1J/j8jnnbyBk8YY2ZknUiAFfnaaAMpf5onNAoB5ai4bnS/KoUxMB1AzHNItK8liEjspSg8dMNb8vMD7cR0dlI6njprqKFL1nXLk3IujGk8dqn6x/Hs3Wxt807wnRxak50/UGHxo2OYeWe+cWiU8rKm/dSkglwBgaovDnVdN9yuKPCffGO7RCD6fVRINuBQD71WvTtRC8iyYZeTF2iSwt0i05TExNkxg+i6p6Gw5Oqj1/yrxns9Ib7JO+hjwEGMdc7+ls8IVLt45Eysz+lO9r0hs91yTkB6CIJ25Kf+VjkDwT5Gz1ZEJdXd+qzZtOS4tE699Ibm3VHHDnj10munadkFZtLZ/MdivBo78gO7dl+R+/LtKaIBcg3NB9GX3M29pfkyUxQtCCWYcAAAAASUVORK5CYII=", Lm = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAACXBIWXMAAAsTAAALEwEAmpwYAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAN2SURBVHgBrVZLTxNRFP7uzNAHpVqrMWhUqsZXosZX3Gi06tIEdWHiwoUuXIs7d1R/gX/AaNRE3YlGt0AibHkZFRJ5K49EKFBoO53O9Zw7d9oaCgHxJCf3zu0933fOd+6dKbCKSSlj5M3kreRDsmyzeq2JPIH1GgdpgLXas5WIRBXw+zSkyGP83DNpo3Mkp8aM7ao99XUm9sdrcK4hhOP1AT80Tf5ICPFkRQKWQ4MrwNc9GUwtFrElbCEaFAhZhorIFVxkCxITCw7H4PGVOPbFLR8mRSSPlhHozBX7i64FtHzP4sj2ACyDQQ1UERJRcw7pfADj6SXcOGyi8ehu/8cHfiXC15yGLpblRXcGH/qzJEGAcA1vixClXHgq4CIg8mgIDSJeM00ALjp+bsGZvYdx8/g2X66TRDLsp8bSxH7MOHjVs4RtkRrY0kTeNZTblWPRgCsdbA38wtlYOy5v/YQDtV+Q2JzDS4rtJWl1/57xxNDZ31HitaYpa1N5rigUmEciwP3lMV8EERRhyiwsLCFspBE0MgjXuNgZnlAk2pJ8zLkz1/mpd7KA6UUq3zSxUBAIWmLZGROku6QxV4wgJOLonT+C33YUo0t7MJWrw7i9F4UpR1WhT1cTE1zjWccYlUaaC2ronC2wicQWQlS01OPzx8lsHEIewkAmgUWnDt/md8HhXw0HnWMlgotMcIJng7OOAucT45AU83kgYJWL4NxFRUk51GLGPkgHhCWzqSpOzlXxPVSFtoSlG4LF/IITIVm8HhjecaFgU58crVHlKVXVUEtg0nrEkupOSLcI4fKFVPInBN9zldFAI3V8EqbCFhDL7vjq5lUiQfgoGvUIH3yv1vmYDqvkzGg5zXWCoxypEjOCO/2ldInAiJzC/zIjdMCfdjNBO8/MTUm9psX9R+NQM5r0H1uYQL0zjNrTEOFTkBsEh7VDYWl7Z1FD09TnNnpIdri3centGy0m1mfS8657T71zDzyvfBfdJU8nE+fRfOFhafN6wTn2RP0xXlHfBp4oAmbyF1IXH6KZvBS4FnB44Ck/zvvwDCvsv/ZKmYL3ZkXf9Fen8e0ta3hutLxBLAdONnhV81gBnqoW4pM0aRJ1w9tGPqOl/yO6p/rgk8WCmxXgtUNXK4GrfjKrV+199J/LtVur3MC/iyYNMFsBOKTXUvzOXw3jDztyBwdcDqOfAAAAAElFTkSuQmCC", vm = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAACXBIWXMAAAsTAAALEwEAmpwYAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAOtSURBVHgBpVZZaFNZGP7u7Ual6TIjttOBmVs7MlCZNMUZ6AwzY2YUUUTjguICouJDBZdUfPBBSAJSxZdKpeCLuICCSgkVxcfEBUGpmG4WxTZREa1VE9Om1WY5nv/knvSmSbXBH/6cc/57/u/7l3PvCfAFYYyVc3Vw9XD1sykJ6jY7Vw25CjnpALOVMzMRKVnA9/PBybWc1l6vF52dnWIMhUJij6ZpsFgssNlssFqt0pUeuhRFOTEjAZVDBxeALS0tCAQCqKysREVFBUpKSsS+sbExRCIRDA0NibXb7RaEujg5iSuDQI9csLtcLrS1taGxsREFBQX0DNwpbRTOfE5EfX19aGpqgsPhkHDNMhNF1pwPD6ksBN7e3o76+nrkIl1dXbDb7ZKEytXASQKS4Awftvt8PjQ0NMBsNqfKYchQRDx9LtfhcBj9/f3weDyyL16+5z9Fj95Pllt1f6D16SPmr1uQ0XxjaWaS7u5uAU4kulTk8581NHt/+y4+Pn+BPYUm5UEkzgbqfkFh1Txles1lxNMlGo2iuroaiUQCg4ODqK2tJbOdCGw0G7l2AyofVd6WP9+HlSXBcWjHDqDgxx/SGhx9M4JQx1WYlv2PovlaipCA4/E4YrEYiouLJe9iwhTna7SnXxBQjOzTJCZ6B/BkySq8O3eRyYijI28xtGknylavQPxDGPHwaEYZVVUV2eiiUQbihaLyKJg6t4xvinF9efiIMt7dxyqb92Di0YCSN/d7hD23EbzsRp7JhHn23ZizyCLApRpKqKnIIsYOM54294BaWqIkxiI86jC+27IBk6+GMTk8LMCNGRhPFwllECCmwrJSRKd9OVQeYdXBvZi7a5t4YFpqxevWdozyDGrOn0JiYiJbfMjPz5fTkKoToPyfv9I2FdXWsAXXLjEOnrLllZow/+JpjD/sgcobOcdi/hqBj94DJ584gvyY+lasE6fohiWBe5sXCsCchJeeJRhalx+FuWohWZqJgJocpNX9VetxPO8m6/g9pmR+Z78OTqqV/QT/vh5prVF5U+i74aXV+MlmdCyK5QqdJu6NF+T0LH2L5CnawTVk1f6G499DqWhyjZ58LVW/kUXcDTQRBMQkDc7Fh+DgmnKcDTiS4E7pl7x4AgI7ba/ecJr7Xvdi7ZWtCHx4PrVByQS2/pzMmkYDuDObiySx6yTJK/PZHXQ+vg7fcG+KrLyoTADafl1pBM56ZWbPOnnpn2WzFw/7hn8Xdh0gaAD06zanfsxnlM+Z5SvSe0N5+wAAAABJRU5ErkJggg==", qm = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAACXBIWXMAAAsTAAALEwEAmpwYAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAASkSURBVHgBpVZtTJRHEH72OFE40bsDPECOQmwtarVUmzZYWukPUiQpWqLURKAhbUIatHykLelHAJv0R02URpr+ayjFIv+gaVqFEg8SPpooSlHANKFQPj1rD4gCB9ztdHd5Xzj0MDZOMtnZfWefmXlmb/eARwgRmYWWCXUIHaQVmdTWCoXG4v+K3KQBPK5UrRWI+QEvEEO5ULOcd//TiY7xRjXeX5hWPhEmO54278L+qDeQEJ6ob50Seoox9vWaASQdGrgCvHDrHG7PjsKyIRwhgWYEGYOV35xnFm7PDMbvDyPcaMCZpCoEBG3XYcpFkFMPBdAyV9Gr+86iYaAKO0L3Yp3BuOT1YK0EvBS8AYnBhLaW69Q9dhClpaW6V5FeiVHnXM/8h/6z+HmwGtutu8HZIty0ILCZAtSDWAIMyDCbYF3k+PY7J7Ve2ciuXq2QOCgrkySgTNgNIsiQQYsoV80D070iQAVCg22YpznM8zkskFvY7uX5yybg5Jb1GLjiotyP+uiZ599mISEhKCoqQl1dHVpaWqD1r0pRpGU/KCfHLyXijnsU2yw7wRQtTGUth3BjALJCN8LqZvim2kn1v02qerKyspCTk4OJiQkkJCQgOTkZDodDJ9IiKzgsrT/udipwJlbueSaXs14QWb+2EfjYtgF/iazTcnvofMMom5mZQWpqKrKzs2EymRAXF4eSkhJVgVaFlELZg0PSap9oXMpWBJhedGETsyBsXQC9H76JRXkYCj7tp4ut06taXVNTg9raWrS1tSEjIwMulwv2yECYqE18TZYuB2SABGkNTPcpcMmHRzQ2NWSBjlqt7Jemuzzz3JhhZGJe9IzpJw4+pw95eXno6upCwTsRVFawG+sHruknNNaoNQTOuRG1ZFsXgOJIM2IWDSznZA+vb5o2CMGDIoGlcs5x6+Zlunw+nr36bDD4l3eYd9ADHFFuKsCSCPBDFhOyw0JwqWmSXv/sb0zd8yhkr9eLtaQwN4JKP4hi5o45TlkjjFxeMLt1VSaD8jLp7ztKY50v8HePxXG73S45oJiYGDX609itgdR6YQfnv+8lfiyG8y1W8gpdCLfS/OE3ly9FWcGQLGVqfA8lvlXPvAhCY2MjmpubERoaivz8/Iey/vC9SPr8RBQ2dc2BHR8Wx44z8vnOdj2nm92SglZpuQOSmKAEFosFNpsNxcXFil9fEVnD8WM8Tp/Yis3lTrBPbjMBvsKGNhrT0vSln2QAdWfIH0h6ejoyMzPR09MDp9OJoKAgpKSkKM+CXBt6G/fQgX8ZsSNDDB2zDP4kxg62P0mfNeh9cEjCxC9Q8RsdHU2VlZVLXEcHcpE18a59nGc95SXBsz+V/C8K5TdvLL8R8Gl0rPZKkbisFHBkZCSJE8Jd10UTq3Z6aFsYrQWuN9hz+ivfFy92VWXa86ek4swX1FwTT95rLxLPsPO1gH3BvSvgUgr90ic+lOse3P0n96bs414NhPsAcl9gcSR5e5sveLkvpr8nU0ZX17ead7QDF38Fem+AhoeXNmzeDMhGHkwTDX1F3+r3yVyrEtmT7+nxxUFP8O+iUAOY9AEc1NYkpeZHYfwH1jw923/01lQAAAAASUVORK5CYII=", ym = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAACXBIWXMAAAsTAAALEwEAmpwYAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAARISURBVHgBpVZdTJtlFH6+rz8waBkUW4YNUmlmhhPc4k/cmGiiMWpmtl3sYplL9Gp6o92liYlFb83cjdPERJDW+LsIgtsSRGZUmmgmo/FCSybgnJYFpaP/v6/nvN/X9qODuWUHTt7f8zzvOe95z1fgOiKEaCZ9jXSKdF5UZUWf85F6cLPCRjrAjcrgRkTKOuAvU+MnbebxbDSH6cWMbBO5ktyzxWaC12FBX2c9erdYy6Yx0gFFUU5sSMDh0MEl4EezCSwli2jZZIa9TkG9WZUWmXwJ6bzA3/EC2+D1xxzocpjLMH4iGbiGQD+5ZB+eiWP01zS6XVaYVQZV5Z7trUA8B/wRlxZsJMnmV/LYe1c9juy0l+GOlT1RyjGnZobDMnwhgbHf0hQCK+Gq2hZFke2RboFVIhi9qFQI2ANuI8tZHNi2iUhs5XDtJJIFVWfk0DRf/LeA4GwKtzVakBMmZEuq1Bwph2h57jwK0Ygk5rms0NuSAqfNgkA4hTCFVr+/Qe6o+umfk8GbipGxSWqmqCBbVHUSBX23A+Pj4/hp+hzubxO0Vl1nEpNJswvQAXV5lNOcPdjPo3A0jytJyE3xvEJGBEBJky0COdKW7GWMjIwgGAyi256hA2hrcg/tTZANexZeKpS9YPExwT7u/XCJJmmDQhd6NafoHigSZIdT4LtvJpBMJhGNRhGaGEVnk5BrmYK2dzXPd2WSGNOXKgSPMMEO7v2+UpDgnDEFOtFqFkgXGADY3Q68c/JtpFIpqZ99+gn63UKusV7NaV7SpUqMWfJCF4+qXwjlu9DSUU/cAg1TlOuuBoG56a8QiUSkB6yTk5PILs5AVQQdQqBYQjXbSJNkZySoilLeWJ162iPw/uAg8vk8XnnRhaOHWmV/7NTHeLJTQKBWFBgBmGCBOzareg04ZSucmQWcPXMa+x5vgf8lN9445sa93Q0IBAJ4qDm2DrhWSnSJVQh62yzalOFID1A6fvDeSXg76hA47pVzm+0mfPHuVmxuzGDs8w/pddf4QCHyVsvGBSb4lnu7OyzyRRplv1cgfH4CE8FtsDVUo+lx12H4zS5Mfn0ae+9ci88Yuzos5dEoW53QPDCTmjQX6P8OKiuhs6fw6gtmCVgr/Q/aceDhRaTnvoe9UlAF2mwKel0VD0ZUSi0O5DkePdtTp9UX+numq4Tt7SE8sceGjeToISe6WkJ02SVpw7YD/Y1FfXnIWIueJ40x8+EeK1rrBPY0fYn7vD/j/2Rr6xk81f4LZYvA4Xus8DSrHAb5beB1Y7n2UfMW92f+/Ac92YNUqJK1ibVWtGiiqLbhR3UIfR5HeWVtuTaQ+KFVViRSf+F4aBlLKeMmvUwbpMep4uDdjXA0VW6bv2p+owVqSHw6iXzh4StFhC4XqZSUtNcOfjME7DJhl9tEF1rNeazzyVzfc+2jPyRuXKbELfy68OkAKwbAeX3OzzX/ehj/AQFgdMQZCSi/AAAAAElFTkSuQmCC", wm = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAACXBIWXMAAAsTAAALEwEAmpwYAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAANvSURBVHgBrVY7TFRBFD3z3gCiRJAQooVGtFFXo4mNERM/nST+YtTGQitLKfx0un4K0cZoocEC1NgZDY3GRsWIMVES/BZq1AWCohC+7+3C+4z3zs7AEhcCgZs9mc+bOWfuvfNZYApTSpURzhKeEX6oceszfbWE5Zip8SRDMF1rmExI5CE/TkWSUMbt5tYuND3/jhdUhoNDYXPXNeksWwZ37ToU1tRAbt5ip/YTzgkhrk4qwOEw5Jr4UkMrUr+GUVk+H4sWFqGiGPH1ngdO7A1DeR7i9hTNARbcuQs3sc7SJEnknG04eVaOC/VvcPDUExQXSayqKkd5aTEcx4GfiZXj+5BCQJaUoGBNArJqBbxDB5C5UjcmwLmZIGDilyW/9QY37n/Gnu1VOFyzkknhj0TwqEwT3HQaDoFL109DQqFw9RoE9TdzRc7anFgPODRl77704nx9KxZXlKCnbxRNL7qIPNYiXiaiMoJI+2AvWMTJMDK6LZcsQUAC4auXMPlr4Io0Ske4sf/EE8qKgy0bKvH5+xBS3WlqC5MoAUeRAJGZoOo+AZNIV+qeURKRD3Xit/E2l1TZa5Oa+j1MsZZ42vqH6RDGChP2gQrIgzR0Zs0XZT47I6M6HGFLi/bC7K5a7tvDtabmFHZsXIzGM5tQUVqEAS/QIfHSIZUEU8L3ABbR8CE8X3slenvgkLcucUWPHtklbWUPNnDt/ddefOvwEEQKbV/7MRooFM9zaVUCyoZEUWeOB9luRV5lIMJAexAzXrXYr8ulSQg6uwbD7r8ejl18PRYWP6BJrgP6aZHCOCA3fGmJNeI4K2Jm8YKigYEJAtredV6WTmeHdlEgzxHPmsQUJvLMZa9+6trCUsyV8VVirH9MwK2uxlyZSKy11TYWaNaqdHHN1mzq5ThXk+DDQJU+boX7dkPQDmBVgZkZk+sdtHQpCt622e4q2rqCr9nn3HJPntYDLWZCblFw+56d2kjcP+1ddJTQLzZXwzEiMzV95k+cBhIJdl6/DRMHZJ8/bdGVOhVVlqvYQE0B/s5jo8t1uS9cbf5VKJUcG/LxvYo2rv9PKM6BJt67S8UtL3PJk7mc+Z5MVtfXt27zsX9Md8unD1Dt7dkJpXRm+DLbWQMOq7G8T+ZknvCj36imb8/ULP5d1BqCvhzCH6Yvabb5pPYP0QGC5WyMt0UAAAAASUVORK5CYII=", xm = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAACXBIWXMAAAsTAAALEwEAmpwYAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAARFSURBVHgBpVZLbxtVFP7maTu2YzuJnZT0kUdJIhRHUCGkVgIKQkKw4CGWjgT9BZgFsAPnH7AAsWxhw4IViAWvEkpFC5WqltSoqEVJIGqTOHX8yownfsxwzvWM6zgxKuJIR3fm+pzvO697x8C/iOM4UdL3SRdJV5z7UnD30qRj+K/CTi7Ag8rZXkTSAeBv0pIhjfK7ZVmoVqtitW1b2KiqCl3XEQgE4Pf7Pdci6YIkSR/0JOByuODY3d1FqVRCo9EQgLIsC2VhIrJFvV4X70NDQ4LQlQyRLOwjcCMX7AxcqVREdAxKDkLtelHYylpUELAyWa1WQzAYRCQS8eDe8jKRvJrTco3LwuCGYcDn8wnQToKmuYYds4bI0OQeAl454w4SjuQx8llVXUYuTZQj6YzcA+dSGOs/YXs7B3/fIGxzFfrAEwiGwq3MiETTtLYvBcf9O0v6jOpG/waz5PN5KIqyJ2rWqrENM3cJesNAvVRERRrGWPyE+E2UgVb2Yy2Xy4jH47x9msecu/aK11ROlY08JxbTNBGJjeBOMYZaZQXNWgFGM0GZDIhSerYeCWfLWK6kuUQve+PYWRZW0zJx8dqPmA6WEK5+jeXKAGJRPw7r32Pt92F882cep6afwszUTKv5rj9jcQ9JnmaCR/mJx7G77p9/9SF2qhoODWTx5fprCB9NQrHrSEhNTN76GFvrx3G1/m2bwBsKb3xJxphAHKhKzW7IEhE02AhoNhz8XajK+fUN6fFQRRodn0WdgtihsmjDEwjWFWhmv529fV3eLBuNUCAIPoeNpkPOdDboPHoEQt77RVNzFkevQJKp/jULeq4AOzKOgrGK0ICKjcI9jB2bhFUuYqsWxA9XN2Rd60f6ckyFGFsaWVtBImDj01dbuEywykwhXUbOku4fPT0Cy+7H4PZNrA0/goT5HSwEcK+0QcS3kZX7MRJvIqc9Cx86zi2VaSSseBtF2SXA3LDW2nLa1qgOvQh55Cgu/ZrFzaUrdGUso76bxWDgLn6+YcBR++GbeB7dMhlrF+Y6E1zgp1NHND7SewyD409iuTSNrfG38dDx1zFDGRl/0NXgT6Ey+Bwqh1JQA+EueAcnj2jeyxcSHwZ6KPDbO+cN3NhyKEtZpMrycLiG+dG7WFor47crF5A4NoXBcB9OTB3GZ3/FcMuKuritHiT6HHzyUpt03LuLFmk5vZRr4N3zVR5o96Dtu82piU0aAmX/PoHzGH30Qh8mouL3c4RxRnZ/P0NanEuoSCX1VqkcHCgHgbfsHaRmfR64+DbwgyDgW8/bmCej1Kzeikj0pAdTBzjbss98sv1NWHAx931wMmjdrFgp2vbCRUveNKknbTOpi9BBMq4QuIa5hNIJnkGHR1dATtolEd1byjVx+U4TywUbm0YLPESBJgnw5KjSCXzgJ7NH1uKjf855cFl0/se/i7QLUOgAXHH3Mu6Y95R/AAXvgOo2R5GcAAAAAElFTkSuQmCC", Wm = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAACXBIWXMAAAsTAAALEwEAmpwYAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAQASURBVHgBpVZdbFRFFP7m7l1qu3S7pbTVYiIIYkKNVJuoxQeKMZgQE9QHTLSNNvhkYthqwkNjYMsTMWlqTCQaVGijxkSjwQeiqFlM+gMxglTWYmLbtQUBte1S96/buzueM3dmWegulHCSs/N3zvedc2buzAI3ECllgHQvaZh0Ql6VWT0XJF2NWxV20gBLlUOliEQR8F3UhEgDPP7ln2EMXviW2iEkMnPKpt53N9YFHsDjq55CU22LcY2Rdgsh3i5JwOXQ4Ar409F3cCl5HivKa1HprcIdtk95pJ0EUgsJXIxPQpLtvk0fEmGjgQkRSfciAh25Yu+L9OCrsY+wYWUzbMvLqyAn+pXaRWonJkthInYOT69pw0uNbxi4TpOJMDWn5jSXpe+3Hnw93oe1FJGwCkIQptFEhoPbHPD7zBk8t3anIeFyPUQkUUu7c2kCf8Qi6B/tRU1FPeaRwnyOVKaQkWnVV600824/o/pJ1PruRP+5Xpyh0ur9O6QC0tFP8ODk8w/Lb178Fw13NQqOnssirsugsEpSjzkLmZO4eGUU66ofwwvNn5lSVdv08wz3skMDaAxHxcYZr7R749LyVzC+iyuuPxdX90DqMuWyGTiVZXCyp+AkTsL2PcoWQS7Rdu45R4/CQ61nxBHWnkmIbJLSS5E3ac5omjSJ7wem3T6tCenaCTkDi9A8lkD2vx9MNJuZoEkFc/ZX5Pd0MC7Eq1GJeIL20wVyNanaT768hIGfpvPzDC5o1yxVVuDYd2FDsJr3QOWbbm6CNTUFDxkYInm/LcWBGmC5xUcHHx+Zw/4D04j+5cBLxd38SDk+2F+HldWWKlP4RApdb11GfKEBZyPjisEqrGy+5kbu8Qi5LEvgDhcRbdsrEOzwI5Ggei846O9xwY20EmEoWItEUubneDWqev6qQmjIJ8og9vkhvNfeJmOTGXz+bgM6dlThVCR9zRpH9+eFBby2M/9Vx7hEXLBW580uyIPvq43GFgavXATOMp+RKFvmzs/EslgR8LgB6eM6n8nBrnkZ3rounj7OGfyoUtm2zTXcWkaXS3FwFgPOYsDzWZPatoC9/EkzdYQz4K9ulkcn9jwrv9hyWp1/FMcvLTqDurJV2L1p0MyusQktRiTHadBavmu3GBneoXZG3CKBeydJvNd80Hzrhwvvog7S2MaaFrSv79SfJ5Yu2r59/eu417+BwdXbwEuKgJnMBBu139fpRnQzEm3DtuzDvlq6NeaiBycE92bF+FwEe39+BZdT50tvBwE/SFm3EThnXwAeMoNiT2ZQk6gnc2R6GEN/H8PYlQiRTSkbn12lAFvqtxYCF30yiwfmPvqH5dIlLG/j30VQA8wWAE7ouZA+5iXlfwlIWyq053iZAAAAAElFTkSuQmCC", Rm = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAACXBIWXMAAAsTAAALEwEAmpwYAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAQXSURBVHgBrVbtT5tVFP89bekKHbS1KR1adMBYIix7MbAMlOg0kURnNH7YF4tm+gdYluyTiRa/uxhj4heVbdH4gZjMJVMbF5kjQLMsvFRhyMYKA+n7G31/2+O5t8/TwaBLl+00J/c8z3Pv73fuOeeeW+AhIoqinvQz0lFSt3hfItI7G+lePKqwRRJAtTJciUjYAfxjGuykevY8E5jExLqDj4lcjM/Zo23GPn0nep/ux2FTj7w0SjokCMKXFQlYOCRwDvjTwlfwptZg0JhQr9ajVlXH56ULKWQKSawn7rJV+LznO7QRoSR2IhnaRiB5ztnPz5/FxaVhPG98ATUKVWnWg3sVS5oppOGOLeBEixXvd5yWvw7KOxHkmNMwzcJy4eZZXLpznnskKBiGCJq81R2x7JREJODf8CzebftIJmHhOkLrllXSEhYa/VJsDj/f+hadpi7oNUb+IXsvRQQKwrkHc20ztDX1uJu4BbVCQ6FK8B3oaowoigU4VkZwiHJCyvI3THpckLx3M7D3fu8hmAKGur9HtBBEXsxiJbGIdDEJi7YVuWIGGspDh6ELi1EXdtfocGVtBG82DyCVS2LKP4al+By+6BuRQ2WgIOAdZs0GJ+HPrOGAsRvhvJfHwZtexVToGtTKXVAKSmSJMFmI40bgKu1iEaGMB92Nx+HPruN2/G/6noYr5MQsFYgkNkbwNrPGPQ4e46nwNVz1XCLvGtBrfh1vPfsBzBoLPKkVWOpa0KHvotAkYdhlgkKhxITPgUbNM9it1vEwMoxxr0MmeJkRHGbWUmy+lFRBxEFjD3n0D2bC4xjzXuZxb2voRIbyEc0F0FT3HJyBP6CgX7vuIDbyIaSKGzBrLRzDFXTKBHtZkvmB8lE4GPtR02sIZ30w1u7BetKNA4ajSObj+HX1R/Q1ncBl/w9QKdQ48tRLuB78E7lCBtcDV9Ba3wlf6j+OkSjEthBsKcFRz0XuxU6yEJsu29PBsS3fbkamIYrb1zCoZWawihDw+MIwmqiVSBItExwyHsOTktaGDtmcYQR/MevFpn6UdyhWB6RVNWx7J0pYkvzCDhpLcoQ9nZk8CVfECdYZzHUWvNFs5WdAlnwxy8eiWOQn11xrQSPpauI2vp77hOfATCV74dXyOWiRe9EoDa+4QpM44zxJmREgVJkQpaCi6Qqqphx3/5u+3yhEvLOeo150Sq6XU6RRVv8D7YPlTlmNsJ3kizluW9ttMji/G5jBCVjXk19Y95/mJGI1JNIcNtdKawb2l9v1kIS57cKxo9RZsRxfKH5640OlL71WMVwMmO963yCNxzaD2+WHna5Mm0TCTzhrXhN+B+5szJdOO1j16Dhgb2P/ZuAdr8wKnvFL/5xYvYyKj/HvwiYBRDYBuqV3dqnMK8r/ZwZJ4AZXvvwAAAAASUVORK5CYII=", Bm = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAACXBIWXMAAAsTAAALEwEAmpwYAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAOJSURBVHgBpVZLaBRLFD3V3RlfnvKcl7yn5uELg/jBf7Z+wCCKkIWfpYug4sqVoyguE5cqQZfiQo2I4MoPIriKgklcihJFURPxg5+J6UlmujMz3V3eW12V6ZhkSPDCmb5ddeuce291dQ9Qw6SUaUIHoYcwKKs2oseyhAzmarxIE8zWrswkJKYhP0qXTkKa74PSQ5T9O+oqI1fFWHYGdqoFqfo9cOa1mqU8eVoIcWFGAW6HJsfT7/1YLjoggyEiXAxh/w3LWqDioqhAYkVEwTuaB+bn78Jeu97QdJLI6SkCOnOl3j3QhVtvL+PGlgyR11GQBC3iKL1EKk9KgWi8iGDHB6QOHMIfJ08ZumOmEsf03GTe/aILdwe7sbJhAxw7R8RlKG5RzUaaa8TtErBWr0Hl0kU1pkU6iPM2iQxZOpZbk37jDuDay/No/HMxSvCpJV4VokhCngL7lkjMeR6cpiZUzp1B0PcYev+uqP3S2R9UKk8OQ5CksARKoa+JmJjhJ3xPX+N52/dh2w5s4iiTiLZWfsy5gr1qU3P9+Op/VAJjgYuS9CcyFmAUlGjI4ygqWGbOpyryeTBZ1NtrqmDL8tge9vo+P1C9ZoF8ZRjjoadIIA08PB8N8XqsrPwYRSUsqEViOEeCQlUR3r9vBLbxJrew9zY/AJUCBQWyjNHKD7opIJIWZR1vbX8uhXpHYsV8T62us+LtFrkQIqjEFTD6eo1AxtEbgi/+h/gx0Y9KICvEOUqLbNz8tBDX3/8FE/DgSxrtzS52NxX4UFCwPbHUot+Q2pUUiC155CYdvxD7l/5AY2ocXa8b1MiRZcPY/q8/JVhgUo7KuKohdhbULZz63kjYM3ce9v1XQNuSAt4VU6hlVnOzcV1HC2Q2/rMJg2MDMy7aschDS7qk/L7hetQysXadcZ9yBY/Y27Jk18QJrTpVM+Rsmxv9aYnNMqetzQzdYQH1zuAKNjZuwm9b8/8Qm7eau9v06Ap+zT7ku/ZVx1UaEnM3qeF0XzdDV5PvokMElytoX3msGj0HcjZx4pTpv/o2TA6KP3/Krr3qkjvvLZVRHgp0HGZE9E3IcFGDDM+eSX7hstNnImWniaCTHYWjGRm6mCRkfAbPhW6rjHofJ8k7UbPcuJIREx1VemTkZWVUaJUsGDHGWuIxmvvlj0AWs+pp/NG/KmdvPfI3/l1kNcFIgnBQj3FL07U4fgJq25sTp6TBbAAAAABJRU5ErkJggg==", Sm = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAACXBIWXMAAAsTAAALEwEAmpwYAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAR6SURBVHgBpVZdTBxVFP5mdnbZH1iWoaUFWtiNMSRlIVD6UK1KE61abKrGN5vG+NKYVCM+NL4YhcQXY1KbNL4Ykzb+vJm0iLEPamoJatrEQvhpRA0sLH8Wyi7L7s7fzoznDnf4EbbF9GzO3nvP7Pm+e885c+4C9xHbtiOkH5BeJ52w1yXFbZ2kUfxfYU4cYKdyqRiRsA342zR0kUbYuvBLP/Rr3zujvbzs/Easq4Mn3gRfRwekx59wXdOk3YIgXChKwMLBwR1A9cJ52MkkUF0FT1k5hGDIcbFzWdIcrKlJ8gGCX3xlS41xF6uLSLq3EPCdO+zqxx9B+/wziIcfw1L1HuiSFzWLS/Dmc9zFpg8ctfIKCn/cge+11+E/964L9457EsGNOQ0DLCwMXO+5grvPPwNPyELAUJCXQpAgomB7UT8+C/vuP3xTq1SWIMAYHID3zBsuCQtXK5EkRM7IQhMxR4ahE4E3XI4SYwqKOofM3AwKZhaiNYfC/F/IKssQ83mIigJRZao6a6m6Ggb5Fn7tB8/fJecEfPcTbJFta4GQnIK3MY7R2gqkGlVUhf3IZnQEZA/0OyIODS+7QaWPwGeASccxRkcgHDmC4JVeN1QVEn29xGZLN2/j1koInsgBtK5o2DdzD/m6AGzdgKZ6IeQ1xEYUKJqN4dD+9cIQVnNS0HQo5GuOLqHh9zHE2hrY405G8CKbfTjqx8Xm9+hMHvyw8jUOP9uEcnEQkdqTiHu9GBy4CvlYA27ensKr8ul1Amf/FPSsAWW3QQYTbw2ZON/mmNtZDlrYbCiRIXBa0o5SLa1IPdmOxm9GEaqpgR6NIf7tb5hrPwr76WPIaea6qhYWMwSuW44vvSXoo1NwiUo8IUgsqLyoBKR37UaSYqqfPgP/+DgWLAv1Z8/BqqnFwHe3kNfl1QoiteiLjbx6nTGdM9YIRGx5I+jF0TWYpgk1s0IVkkOsshL9Y2OYn59HrEKGUaCYmzZMi4NvAhE2gTGCBJuUB31rRmNmBqFQCPLBgwg1NUPbW432U6egUGkuTk/jQRKtCrrTtMQJou2NMoYms461jFqBz+dDoe8GNFp7qff8mZxGVccLtPvCAwmao2F3OsgIbpAeffP4PjyyS4ToERHvK0XVtS+RfHQ/yv6ehYfiMOknx/5eVIYFXDwR3Yrq5MSCRfk6fqjGtfawF40lOcVWy9QtWex9vVcx29eNPfdMpN7vweTCApo+PYtZWcfe57rh7XhlKz5tgoEzkWXZNcdE6hesb/zMVsFg0PmhcfJl1HmeQq68FkuUMH+kArP1TajLHCgK7mo4vBaey6wXbWl2eeorKusvIuX/px8hJRJQS0sRKiuF3nGC1/r2BCUlJc4msaHZbWzXnTR8wuaMRNM0wlp9LGwD6gK7o9/vRyAQcB9tbtcbHLqw2lmdXGSzWSeu9yOQJMkBZiMXdqt1oZjwizzlXraGYdDllbMzmYydTqcdpWJwbOzZf/4IdGInwi/9y/bO5br9EP8uOjlAagPgBLd18TIvKv8CINTWRKsc33EAAAAASUVORK5CYII=", Em = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAACXBIWXMAAAsTAAALEwEAmpwYAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAQrSURBVHgBpVZdaFxVEP7m3pukzZptJKIGhf6QVnBtMaXUpBGMvohYbKqNtT8LFkH6ZBOhiE9N8ElELPSlIqbBCFqLtrUQUdA2rQkKhsS221SaZIONNClsdzeb/b0/xzl3z90fzIZIZ5m9c+ae8818c2bPWWAZEULUsx5jvcgaFkWJKl8X6zr8X5GLFMBK5VSlQLQE+BF+9LDWy7G1+AdysUswF0ch7EV3jl7dCH31JlTXt8N4YJu3NMbaS0THKwaQ5VDgDDyKzFwfHPMONKMBWlUdSKvNz7NTcBzWMxPAmTh8XwxAD2z2YHo4SK830JbIHKd/GRbJ8FGQbqC6dgOMGj90XePJGVd1nVB1WaD6xuMw1m9Acm8nMh99WAgg96aMgarfmCzLB6f/whNVJ5ydzULTNIJGApxRkao0fkgAPyV4Ha/lj8PvzfExVL19GKuOvueVq5nXzXgMZGnqr84siO8uX3F2boloOmWhuxlnlbJNrBfuQjs3Dy2dhpaRyr5UCkZjI0xmYY38CrV/p9x8VPZhOWg6/DN6nx8Qe7abpFEx+3z6zOJsHDgX94rKH1IWYDMdK3QdaGtD7dkLHt8HDf7qkNZQKAKy7uDVzSHSxCMMXiMhVQ0Z/htm/W08XyNZG1UtoWqnZXPuhlrDwy4LY8ez0t0lA+yS1vnf5/H+C0OQdScnxh2zhunlwegrBv466kGi2Hz8Tg0pFoNkrfN8e3DQC/CcDPC0tLKpKbG/dZzcADBBNmesrQIN8HMgWgR2Ywig2H6gdIbZmy4DR+rIsPd2naE2BPsCg4VuyedngT77G+jn7EllTFQG7Krj5INIn98Pa1eHyO153V4NGF4AV7Y99g9JugWsz+8BUlcggoGzh94SmQNBsnw+2TgFXGnMyEik13HSc27+1LcycPvJgDBf6xTZg0FN5DuSnTYMo4AfKwTQfFsh4rfy4H3Lg1vbW5B95wg/nylWtGRfSgKMS2uItV33t8M+fpJ/HvcqliH3xj6YL70s7MBTtFwCNTU1nnle0pKbHHUz2/0KiDtAQ0kjNjwkcvsPUPbNQxB1/oqgsjxZKyMWrAg2Phrwlq83uHNi/PKSy4LPEZuDuL/M5q3C7NxLZsduiCLlMkmYUYzFrohwcoKmEiFMJq7jRNv3Hni/PIv+c9jZn55Ecu1aOC2t+WNCScpKYDY97dxK/Ek3E2OYWrxGkdy8Sj+/BQebuhDc9K70FA47KqEoj9hPXDA+vOYSs2IyeY1uLoxiOhnC7fQkkhykvC7eWgbf2I0gq5Ju7+IpcJcOtR/Hamv5YrEs+nLiY8ynZ0EV6w5saWhFsKmbny2eu+xWW+rKlEzc41uOr0Z+w8jdHzG9cIOD3Xbn+Iw1LuCOh18sBV7yyqyQmXvp94uVy0VxH/8uuhRAtAQwrHw9qqwV5V+qNXQqRFXK1QAAAABJRU5ErkJggg==", km = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAACXBIWXMAAAsTAAALEwEAmpwYAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAMhSURBVHgBrVbPTxNBFP52WwqLqW3BAhFNquUiRIOepIkJNzx4IF41JkTvVjh6oOhZNP4BFLh48IKe5ARe4ChE+WG0tlEgxh+UjciW7Y9x3uzssoWCVHnh8WbmzXzfm2/YGYADjDEW5D7IfYp7mu1YVo7FuUdQrdEiCXBYS+5HpFQAv8tDgnuQ+nPfZzGzNinipqmLOS3HTqMt2IHYyR50hrvspRvchxRFebIvAckhwQXgs+Wn+Lq1glBdGH5fEJq3XswzClvIFX5jbfMzrcLD2Ag7G2i3sRKcZGgPgaxcsI8tDmMilcS5xkuoUb3WrN17ZZbnCgbS+jKunbmJW+39dvaevRPF1pyHNyTL+NIwXn4aQ5RLoPAsUxiPSnk5zClKEil4vz6P69HbNgnJdZGvy6hyCUkTTOkLGF96jMb6ZmwzQ7jJcjzmrH5JusjlRM4E5bYQrm/B+PIw5rm08vySoiZZfZo6N1514VtuBdFQu6he/FKsgD0KMVG52AL9lIBUdhEXGi/j0ZXn9rQQFxi91PqQfYcGXxNOaM1o4O7z1AhkIZMLWIGrz5wDRL6YRy3TYJomVn9l0OqPUCZOO5jijW5d12EYBrxeLzwej3AHlLOQ3u7onIGMpVIJxWIRhUIBmqYhEAhQaprOoJNalFBVVbgN5BTqArKjO+8uhNbn83l7KOKVByIqoGSZzhVA9jNFyKnsLi6iuie447+YTeA2IsiIhpTmKIzOUdqGQ+Dz+XBU5iKYo9Zr7t0/jBo8mNChiJ2oqNroW+AfAysVcb/XD79fjL4gArozBiPhWujbHsymTC4mEVQpF7O+tlMhFdGmWnt0QuW6070xTb2Bq0E58fB/PWVb4Ja802QPjLrvoj7uG7G2Ok4S2KmomupFgQF0tIqzFG8DNQQBMdkDtIuBnuOQov4N2XFa4xRnPTwZgV1eCEvAulmxsGqib+QnVtYLlW87iR+L+tDPgWNttW7whN2p9GTGJYn4wmc+bmPyrYGFNRNf1otiznFN4cB16DmvuYErPpmVC7Me/VF2eJti//HfRVwCZF2AaTmW4B48COMPJSb3R7FZiEoAAAAASUVORK5CYII=", Nm = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAACXBIWXMAAAsTAAALEwEAmpwYAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAANnSURBVHgBrVbfS1RBFP5m7t2rrriZUEE9tEFBP5WoZ3uJXirrL4jeIgrc3iNXqvcgelao6CF6yJ6CyF8PmoapgQQhrhlCpe267N3ddt07nTM7s2qprNmBszN3dub75nznzJ0LbGJKqUbyDvJe8hm1YkkzFiOPYqvGiwxAtda1EZFYB7ydmjh5Iz8XBvrxq6cHRWrV0pKe4+zfD6e5BTVtbfBaz9ilKfJOIcSDDQlYDgOOwvQ00l/nEIyNwRt5B1ksQtbX0wqBIJOBIi8lErwGO56/gNvcbGHiRNJpH+Q6O0fmyWP8KBTgzM8jPDSEkOdBXLoMSWDS9+ESidvQAO/ECYQOHkS67Tz8e3crBJybNQRGPw3OEzPRKOoIxCMiIQh0YQHuxATk4iIkjcts1rgPBwresePIP3oI/36FpMPmxEbA0jQuf5xU2WdP4R4+ArfvLaRDy69dh5QSzvtRagVKN24SaZnEyea0CyIK7d2HPG2Oc2Xy16VzYJhm+CF5+BBUoIDhEb37kI6A0lQfptCyQG0tkM8ZTVca9hJNK05OQra2IvL6jY1kJ0dwmXu6SmZn4c59gTM1BXXqNESOQHftQunCRQjSPjh/Adi9h/pZ2rXxXNnlz6SWozQwYKNgi/HYJU3wqof0LGsWunMb6uhRLF+5CpD+YvwDQDKI4WHg+zeAibPGM74mx+KCXisNlrEzLFGSNcucOws1OFAhEZTo5fZbWhaXEijm5rBS2QpYKT8izCGgMg44Ah5raUHD8Cj3EkygZ6dJf0kSVQgsACWaslsGEmItMHsQ6JZBLEFABzHy6bOe5tr5hb7BZQZwCJBLcQ1YNUYkAZGxmz279idBHpWe5+o/aLeKwMUWCSprSyW9SWMpaQjg0Wn9X+a6FWHGmaDfEpjQtm01NTW2+5KTzKeOKwlL9LYsUYh8cv9FItaframpyQ4foHwKfs328VM4HNYTrW8F3M6PRCJ2uJuwE8JMiFJDpwmNWTo8+Xx+S1FYApaGN4ny3XCSCfTLjjvUdNooaulwVRPJ6jm8xoCzdRrMvy6cOMpvVp2LDF0qrOtGkTAwV0xdXd3qymHwODbZVcxc6tqKxaLyfV+l02mVSqW0UzHoMf7vjw+BGKoxc+l3q+qtV23j6yJmAJKrAGfMWNyU+Yb2GwAZeHXKo356AAAAAElFTkSuQmCC", Tm = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAACXBIWXMAAAsTAAALEwEAmpwYAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAPzSURBVHgBpVZdaFxFFP7uz/6mySYxKSRNbVJtSxtp/S21FisoSC3VVPFBECS+qxGUiC9usCKNtQhRRFGaF1tESBW1PiiGaFN9CBpj87Kiuy2BPIQmu9nd3Lu7997xnNk7663d/IiHfJmfe+b7Zs6cmVlgDRNCNBNeI4wT0uIfW/L7Bgjd+K/Gg3yCjdqZ1YS0OuQvUJEkNHPbtm1YliVLz/Okj2maCIfDiMViiEajamiWMKRp2jurCnA4fHKUSiXkcjk4jiMJdV2XYGMh8kWlUpHttrY2QYKKK0kiQzcI+DOX6kycz+fl7JiUBkgEfGsli5XLZTQ0NCCRSCiXF9VKNBVzKn7lsDB5sVhEJBKRpEpAOv9LRAlwySsOiHC47iD/jO77c2iaeSY8c44vExuGURMIrkQh6BMKheRYFvL374yclD/7NDfm5+cR+iOFaCoFQyeSTY3QaIaabVVn3dKKyoMP1UIUDBODyXm/2tvb1ecWk/71cW0hu4JLqTz2T0yieewc9FgU3v4D8I4cRXjoNDHRX1cXZncfQs5yEEgNKeK6LopWmYRc7HOiuKWjkT8OsMBjXHtzLIORC1cweVMOWxavwXnlVbgH7gWammC9/yFizz4DFAp4/fwcfkkXg/SyzBYqsEqUVcLFc0cdnO7fw92HWeB2rs1klilgOjZFDM5RmGc/gXl+DE7fcYQ+/ohoaIMtG44nUCy5gRBRd9lFxfE4C6hDxw+zi+pzt+lvCDILtkwq0yAnCkVp+JSMvbelC96OnTC//grGzz/BLntYIUImZngym1DNR7/MFivXCVTNz0DHpPScm0Ps+KPwdu9B5YknETlRPTfezl1wXDpgjkB90wKoGgtkWCkRD1NRxufuNgpTG1LxTkyVduGzix0YbdiGa6FG3NyxHVN/FbCedW+Oq2q2JnC4txUzVwp4L9+Dqac/wJd/erUBd95zCi1xA8d2hGD/Zq8rsLe7SVWnWWCC8MDzezXc/fYIKP3R2bsd6a6ncHluRXol4iY+7ZzGwrnv8PAaxHSmaU+A+weHVdcXfNB4k5e45VDctUuT4OPt9NyKE4+/gR8XoxgpfYves+9iLRNSgLB1K0JT06q7R91F47wKQeQuibCA2ipB50BbXsZ65vkwvp+A1nsbd43SddKv7qJ+QlY7eB/0lwcRzJGNkCt//aVBRS7fhuudqs+fNPetk8Ld3Co8H2IN8Hf2dYdPBl+4gfozESJZc7k8I9y79t0g5AUgifuOCW/yYpA8GeSs92Syury+ZZv2Bd9cAGZ/h7h6tTqA7/yDh4Ajj4DD6lvdJ3O1lfCjPyo2buPif/y6GPAJlgKEab8v6af5qvY3+kml0v+VfDoAAAAASUVORK5CYII=", Im = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAACXBIWXMAAAsTAAALEwEAmpwYAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAOISURBVHgBrVZJaxRBFP6qezozmRmdGKIYcYkbiru4gAsuF3FBiSdPgv4ANYqSo+NFiKIIOXlxAUHQk4LLybgjIkbUCS4HY1BckpiZTMZZeinfq+me9JCFjPrBR3XVvPq+eq+quwYYBVLKGuJxYhvxkxxEnzvWRGxApeBJrsBYcXEkIzGM+CFq4sQa7udyOWSzWdU6jqNiAoEAqqqqUF1djVAo5E1NEk8IIc6NaMDlcMWRz+eRSqVgWZYS1DRNkcFGFAvTNFW/rq5OGbqIk8mJIQbuypU7C6fTabU6FqUJir7YUstmhUIBkUgEsVjMCznsZSK8mlPTzmVh8e5fabR/MfG1ZwCpnIEpNTZm1U/AqlnRMhPPgFvO2GfC5VpOJp0BN55LU0MrcWjlWs/7L2h9LJR/2EhTI5ApZHG3kQTnzR+sr5sZmxiGUco6GAzy/l0kbtbc1e/jCb29vZqu66g1M/idd5Ah5mwDPQM6lcGCiEaHiHvkecz+/n4vZBMfc86gkXvfezNo6+iHrukwUjqJS+xaWYtVc6K4+aIPqcRHPP82HvlMGuXgUoEOg41MNk/Z2Fi9IITZ9eP4xybB553djlzoQOvtz7Q0HYutn9izdw0ObK0vyZxvuYVzP6ZAovzoSRQ3PDlgIpunUyVtHNgxA2f3L+Dh+5zBMn563cmpaareXSKG0IcO3JsaRiSoIZ1z8NOuoqxsJS79BtTJFmyYlqPmQmp4mPjl/dzAB1u9UJ3duWIASaSMMJ4/+oC5VjcmxgLoav+I6+8s2hdbmfwuFNuBnE3mFkxbDqZFbTJjlgwCg7uGMlyLLkfi5EtsmfwMV3vq8D04AbAlRofwsQg26GSnWJjfxAL8bonIdCR4T4OoCA2Twt5jUnMNsHFhLf4XljSM9x5fcQYPiJsOLhFYeaaVtxmaEPgb0DsNh6q4ofmUN3SDjylvch/3rN27IJ4+USaVWkhlQJw2DcaLV97wTFqs4O/Gfe7px5pVoMdKDZiBy1e8oUv8LdLczn5iUqxdB801qVScoR1thli4iB/V3VAeVLz+FOzTLdKeVCsdl3IU8u8ca59q8d9wTcOvRMp4KeTta2mvWDrEyPFRCTfulM6Tx37xuF9zuCuT3dXnW/Vp03HnNr0UbyC7uooT+Ju/dj2wbTu4rC6GvTJHyoQv/Uty7GiT//DvoskV6PMJfnLH4u4xHxF/AHlcfWRcFC9hAAAAAElFTkSuQmCC", Dm = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAACXBIWXMAAAsTAAALEwEAmpwYAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAQySURBVHgBpVZdTJtVGH5OQ/kfBcwWIWbrTIYDh8GBi5nLyjRmI2pQ5+bFArIbDc5Al/izCw1duJkJMRteOHULZFOjWyJBhxewZKUjJm6BYRtANlwLbPzYdi2lf7Slx3O+7zttgTJr9jan5z2n532e9zznr8BDjFKaz0oLK9dYsdK4uZQ+PSta/F/jQQpAqtaxHhFJAt7MKgMr+bzdPziDbuNdmFjtXgxJY7TFG/BMyWOorX4SuspiEepm5SQh5PS6BFwOBRzXb81i5I4d7T+NYFNhNgryMpCbpZbGef1h+AIhWO97QFn757YaiVAxAyM5uYZAyVxib//BjFJtDnaWbkLHrxP43WwHIXwMYrUcTOEPRmCZcOC9N8vw2bvPCbjjYiZEaM6qW1yW1m9v4qvLozjVtItlnI5LV21we0NYo6ZgkeZAMTj6Dz49WoLmuheEXM8yEpsg6GBVw7zTjycOXED5to3Q5GZgmcVmpqchGFqWYIhCQtknTkd5PHZvHo82VHSptu09g7T8Kv6DkRHsI0r2Vklbrxc/9tlw8Tcb0zgiwxABGwdPtLzMII6/NEQPlFmJwzWGLv92eqzmkuAvSGNfr3PPHwxLWo9PLmJqzofMjDRZ8FXSEEUUbtUl9+jnB03IVYfIdaeH1t2YwbRvkjy9fQDVW/fwIXpOUMu9tgtmtJ4bYggqZKSrUagheHlXMfpuzMo8skaS9JqsJbS9ZaL7yybJQiSKD8dc9Ozd+yQQigAqoPuvK4JAxwkquGdi21LOT4XcbDVaG3fixaoiCfcX03SMoWaHjX5xqB8bcwPE6PBHPxh1kNuLXhKOhJXpERhtA2LCWk4gHSjbjFeRBHAuLMHlCSEUjqJn4J60FXnWpw8b6dtVt4mbZf2+xRn9ZtqjikajK9eFQbiDCysIViks163n/sRHZ25iQ44a+0vv0PP1V1GYEyS9dj9tsNgxG1xWJQ2lWLFsnMDGmfi2ZEsdm4XHF+KAaDvYS+ueHyNuNpvGkQf07JRnzfWy2rQFW4TrjhHoKotgnnDFMni1/G/a+U4fNNlLxPggiENDc3CEo/8Jzq3i8XLhDvNp9nOvViez8qzP1/fSrsYrhKoDpGnEEd33xwwHfzgqRWz/1j71iujt5geNL7KLt061f03rd1xEkcZPeuw+emzUialAJKWsBYFWsxnWJrPo3apix5nfG0be+qShkqRnLaJ5zEFfG5wnKYMnWNfh74Xbye8isROOsuImeVX4jh4hX1o9ZNWNkFL2LXtPCP2lt4E7EgFnEh363R+jRXciHpgKOGRwg4iTHx6bhL1iLKUGPpb7w3MWvHH5CGwLU/EBZC1w9ZY9EjivE8ANyUIEiV4hkU64cXIA3eM9GJ63xMjyMzQSIN8tCcBJn8zks5Yf/U6aul2jj/DvQq8AuBIArUqfQdnm69q/qoRtV0tkgHoAAAAASUVORK5CYII=", Hm = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAACXBIWXMAAAsTAAALEwEAmpwYAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAOQSURBVHgBpVZbS1RRFP72OXOx0nAsTajIMrDA0XwJLKQeegmi26sG9QsyiHqJHCN67h9oGvQsPfUQlpJCL+pEdIG8pJKX0Ekdnds5u7X22efMyRlLacGas/c+e33fuu19BviLSCnLSTtI+0knZF6W9Vo7aQ12KmykAbYrXVsRiSLgt+kRIy3n+dhcBkNTKfVcy9hqT3WpidqKIM4eKUFDdcg1TZB2CiGebknA6dDgCvDF2BrmkxYiuwIoCwuUBAy1L5WzsZGV+LGaYxs8vlBh1UQCpoaJEUlnAYH2XLH3jKyi7/MGTlaFEDAIVAgUBivZCKmsjYmlLC7VleBGU5n78o4biXBzTo8RTkvP6BpeftmgFIQgGJy3+Ah4SLgeAUcAaePrzwyundhFJKVuupqIZNLQjJya8m9LOTwfW8f+PUFkbANprRn/0/KNZf5dZWkQvfF1xCm1un5dPDC09zdV8voT5LWpNOUDS9sCXN+9YTIgl3ictoSj6p0B03TseslBLee5zTmCqzyLz2WxkIRKy2rWMUwrIC6qo0fKJOr3SWduwSNgXSMbto3P59woWNqZ4AqP3k1nlHtCmPiVEXkPLU1CerpaonG/9NYcckHvBFayXCtTYQxNewTnAvRzikfjyzkC544xkCOPVtLAIfK45aAqp5KavYBFk4s10uulwRlghiK3LG4AoezHKArXJKALQv0u1Uu3G3M0nVwB6iIS149LVJQ43aNCPiYpjUD3R4Hvq0I7oLuNNJm1PQIDfhHuxvzSqymBB0MG5Ti/lqTx/UEDA7MCEpvlzzPDBJM8KA0ZBeCusOfUhZ7wgU5mUUQc4+oy91Aj4RE0HNAIhS6hngq7uAE8HBZ48p7qQzVsrJQoKpSi2kjAnY0ywVsenTkcdI9ogZRT/98dMPBpSWBkUaBj2EDYLI7PGM2HvXD7BB8GGizz7N7rJD4sSt1NAjsSdW3YqNot8eyydycdNai1+N54w7O2aNjZqPIkd4av76aOlt3uUrf/LrpFmmioCqA1GnJStRN86YC31odxLKJyp74NPFAEzOQutNGm1vqQCtepifwnOO9lm7ao9/Hp1JgFH5wYnJsV4wkbjwZTmF+nmnjbxCZCiWilSeBBNFSZfvAYfBabHJLtmkSd8PiCheFZi64S2znt4DMDRAmw+aDpBy76ydwiavXR75bbl375H/8u2jXAsg9wQq/FdJtvKb8B7GZEqW2remsAAAAASUVORK5CYII=", Vm = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAACXBIWXMAAAsTAAALEwEAmpwYAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAPXSURBVHgBpVbdb1NlGP+d00PpaTfasm5juI3WBisyUaJXiJGYGKJExewv4HoXLlFDoiQUTUxAZ+ROr4aJN4sXxgs0JOq2CE1FYha6TUycHdugGyv9GPvs+Xh5n3fnLQdoyQbP8st7nvfj93zufQs8QhhjIY6THIMcWXZPis5cL0cUmxU65BBsVPrrGVJqkL/PhyRHiPT09BWM5sbww9iP8Gk+6JqOVWsVXa3PobvrXexv2yePljhOKYrydV0DlA6HHLMLc5gp3sCZ1Fm8vHM/Iv4m6F4dOxt3wLRMjM9fQ2G5hFtL8/jsjRPY7g9LmiQ3ckoqWg3PkZpMY2llBcv2Mtq27UDA50c4EIaqqrD5X4UZ2BXehZAexDZfA9LZy2Ae4Mizh4UBzlWWkagy55L828v9+G1iGFu3erGnOYEjicPY27IHN5dyaPAGoG/RcX1hikfjw6K5jGKljKJRRiY3jr+m/5b+npQ1UeUE5XxkNoMPLnyCcmUBmflxTJSyOP/fBSxxong4hjvGIhRVQWtDC/65/a8waCsM+dUCngq14fPhLzGUvQinfv2iBo6lLCmxr55HR7Adr8UOIhHZjRVeTNMyRHF/nRzC69FX8Xv2Dx6FD/tau3DzTg4VqwLDNBAPxnD2z28QDXVg8Nh5GUmYanCUvsbmrtm7Q3GbPJwqTSu5xVnRA4rTBn6PLjrKz7uIO4Wrs2PVLiF9ZG6UPdMUBzMZJm7/r8WbnqblXopgkH8cKpfLWOGF1TQNHo9HoNpq3AqRuEendtXRtm1YlgXTNKHrOoLBIC0NUQ1epC9aoC4hSCJXh4kxlUohnU4L3b3udoTOG4Yhp6KaUxDhAS26xU3S19eHgYEBBAIBdHd3o6enpxqJJJdwnYtSioSWz+fFDKVGbnxQEokEvF4vMpnMQ2syKkoTjc3NzeuG6RIjS4VCQSzIFD1oYGZmBrSHUhmJRNDZ2VnXADkZDov/7BKlaJIMkGdra2uoJ+3t7QIbEWoUR0boa5jjkC8/D/XEx7aHCoXHE8q1xaPwJj9V0NhIKfiJUkRFLtIG8713oKQuCQPKY5DbhI4ObLkyIqdjKs81XbNDpHk+Oi42SmyGXEL77ns5fY5zT8psHOMoKQdegeoY2azQGeXD41D2dpEq3ob7N6w/f0KsL04zq2U7sx2wR4DWaa915rT7heut7QVjyeqW0avMeumFhwzZLgjio28z+9JFN3nSzVnrySTr4voWOi86fvmZ34YZsKmp9QN0zxw4CLz5FiitjtR8MutFQo/+ObZxGWRP8Oui1yEougizzlzSafO6cherg5/yCRPGSQAAAABJRU5ErkJggg==", Pm = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAACXBIWXMAAAsTAAALEwEAmpwYAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAQ4SURBVHgBpVZtbJNVFH5u+67dOlZbFWR1Hx0JmsgmLTEqTjcaGT+WGInZH/8oGgEhokMlyg9YFyIfmmyYJQTjjxE1SxQMbBgWImbrmKCS0MJwIZGsXRcnYWFr19V29G1fz3373q7bOphwmtN77+m9z3PuOfeeW+AuoiiKhbSJtIfUr8zIhGZrJLXj/wpfpAEsVtoXImI5wD+gxk1q4WP5137c6T6jtko4rM7RlZVBX1kFQ309pBdeFEtDpM2MscMLEvBwaOAqYPxwC5SREeiWLgWzWsBMheoSJTpFGkUqOExrgMJvvoV+VZWAcRNJ8zwCzXOVPRKJYPqH72HyXYZuchKMUGgRVDR1iQJF/QZS/8YgXx+E4c23kL/rEwG3U+yEiZhT4+Vhae45gIHRQex37UXxtB55XZ2Q+s9necM0+DQf76eIPOHzIm/Lu4KEh8tJJAFB0E7Npis3r8FxpBpPL69EqeVxvFH5OupX1EG6eAF5Hd+BjY0hg8zYzC5onIxM0k6uo+BUl8hLLxG4mOa9n1sqWqoQCAex2laVCd76Che2Od6GLcpUEv25n0VQ6cO0HpAkEvnPa0B1NUwnT4tQWSX62sh747f/gDF5i44Iw+3YOAoMBeqMrhtn8PvoJWxZvQkNOz9C6qlVkM52Z4AFCRJ3KNtLICcSkAN+SPYKbm3kO+ihzrrBvs9gl46jJRjB/kAU1gKLGoY0TLp9beUr2LFmK0qKbJhz+pBKpZBMJiHLMoxGI4qKitJh4reSJ9flcqHUdBUH37dhupBho28cgTijDekyIIwTsTSlOFE8UDE5hoSc0BICOJZVwrutn88K8BCpF8rv96N3eBznvVPYt92GK/XL4L4xgQNDkTRW1jkSGVBPEHkuTpWYEoqHxcguYY6EoynkSWmvLdSaWAqhZAr3FJZhnnV9OUGAM1mtVjhXhPHlxyVImhnWXhzFb6E47kfs1nLRDWUIjh9pQLn+BNpGwtg3EEJInu/1SyVr8dWGVpSZS+f9xnPElSfaYDAIs48TeEjXPfJkHdZ3tKGPez2nBD5kNGP38x/iPedm9HlvYffJC/Pd5rEhAh1F99CO57Cy3MSNnZyA14wm68PPQmd+BpjoT89nM14frWuFWfcYtn9+CR1nh5Fb0gTlxYUEbhHGUzq6zrxu9PJRU82nmelGyYhDtc3objiB4SEjaraeuwv4DMmPX7wsBseya5EdWrFzew7ilyEPjm5ooXteDPfXA2j/aeiewNz7PZsd2PuOkxtmFzuNpJGaVt6Px+M43RfErjYf/h6LLRLcSeAOYcyU68w94Ab+BlO3KT8/H0/YH4WkF6ViYaldsxx7CJi3msx61XI9mXwn/GVTM+W5fBOdniCu/kWl458pdY5liQE1BPhqbVk2cM4nM/em04/+MWXx0qM8wL+LRg1gIgvQr9ncWlgXlP8AYJ9b3AA/xUsAAAAASUVORK5CYII=", Fm = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAACXBIWXMAAAsTAAALEwEAmpwYAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAQjSURBVHgBpVZdSJtXGH6SfEkTE9Qt/u3GdX/d1G0XE0bdD5vUsa1utheiXpRBceIPDB3adcSNxitB0A0cWymyht0osos5WIco1CkOW3EOfyg6xSKiOOMSxST+JPl23jffyT4ldpY+5OWc7/w8zznv+55zAjwAqqqmCrsm7LawJfU/+LS2BmGn8bCgSRrBSXHzOCFDAvJ6UbiFpdL37u4uQqEQl9FolMcoigKLxQKbzQar1Sqn+oW1GAyGr48VIHdo5Njb28PW1hbC4TATGo1GNgIJibE4ODjg77S0NFUISi63EGmRnMYEK0d/fz82NjaYkFZoNpsPiZhMJv6mPtqJ1+s1jI6OSio3xeaQgOY/Jh8fH0djYyOGh4d5F5JUrOqQgL59cHAQ9fX1GBsbk7zXZEzkDsg1qfv7+ygtLUVFRQXm5ubgcDgOkVOpN2qjnUxNTaG4uBhVVVW8KC1+NzkGmtISfTQ1NWFlZYW37nK5kJWVxUTKnTGYf/4JpoUFqML/kZdeRviDDxF+JZ9jsb6+jp6eHszPzyMnJ4fnaniMdnCRaqurq+jt7WXfFxYWIjMzk0dYPN/D9qULyt27MPj+gVEE3jwyDNvVK7D84OExGRkZSE9PZ6Guri6sra1JgQYSuEA1u92Ozs5O5ObmoqSkhFduufULTnXdAIIhIBSMlcGAqIfYTt24DmXyD2YqLy/ngHs8HiQlJUmBt8hFPvLZ5uYmIpFIPFtI4PePXHj/3q8iCzgVYlktfgcGRXyJBUT3ET5bgMA333HqkhEHzRepS5PuG7WAcKfMc0I4omLgLxGwnZ3YqoNB3kW75SyynVeQkv4FrlrPwTQ5yeP1wae4aDgdZ6QOfUm4nvwaBqxnhFoYoagBLY5z+NzxLrxRi2iKosP+Jm4pz0LPoZ9PUGgbrCRWr1OGYjLg+Wcex3lU4UzEi78NdviNNhzFnYKLeONIG7lZg9+oCXCAZmdn0dzcHB/4ccnTXM6b0hKSE3IuvB6vt7W18ZnQCfxJAr9RbXFxEbW1tZiensbIyAj3XnrvybhIInx26QWcL3iC693d3bzAyspKedgIfZRFFGTKJD4g5EMaPDQ0hJSUlNjkgWV8++MC7t3f5v6CF534pOw5vPNq7KwsLy+jr6+PS6fTidbWVinwFEeE7n5RvE23Y11dHacaEXV0dOAkqKmpQXZ2Nl/p7e3t0kUewXFZZtFlYX66NcvKyjAzM4Pk5GS+qv8PdKXn5eXxVVFdXS3J+W2gSjyntCv2K6rT7Zifn58wdfWQWUflxMQEioqKZNen8uE5+uC4EbtZ2U074pDRAXyQAK2YXjZd5tCr5sZx0B5yn3xsRVzUQCCgbm9vq36/n024hduo78gfgQacBNqj71FPjtvqI/y7aNAIfDrCJa3NraX5sfgXMdSCDrQleUMAAAAASUVORK5CYII=", Xm = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAACXBIWXMAAAsTAAALEwEAmpwYAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAALgSURBVHgBrVa7blNBEJ299/qlIOyEpKCJHFpShAqkFBgqqOAXoEB0mC+IIyEaGiSEhGiSP0B8gU0BbZCgBQcScENkW5bx695d5ox3nWsnBltk5ON9zpyZ2Vmvif4ixpgcY4tRZlTNsdTtXJGRp3kFStbArLIzjUidYvwRNyVGDuNut0udTkdarbXsCYKAkskkZTIZSqfTTrXB2FZKPZ9KgHRY49Tr9ajZbFIYhmLQ8zwBBES8lwaDgYyXl5eF0EqJSbZPEFjPhR2GW62WeAejrCCYcEYAsn6/TwsLC5TNZt3yYxeJcjnnZg9pgfF2u02pVEqMzkKAFhHHSJCuK6yz79n9SE0OnsBzhAvDvu+PEcThUub2JBIJ0QWRPb8dicB6X8WgVqsJG7x3BuKeow9vJyNBFACM47xWVlbc8mLAX3fRG9RqOqiUdcAeBem08lJJzt9EkbnhOMcwXVFkFKc21BENrl4LEmuXsFQEwR309MsX3rnXr7yAvfSR/8XFmHllrcZby4QPD3WjQUku5QgRPXhI9OQpNlwHwYZs/fyJPKfKoaqjIyLUOErT0LFh4TBx90l1uqTCgejjpugP791qPrAHQnRwIClRjgQ1DnDKyJ1DvJJAAuDygcTq8alRxJUYJxglQalTrnYU0ayiYnCCqPaldz5LZyESxeqqGzZGBP7mJp2VqMvrrvsRKXrHKHj3b1G0/iw8EeM8gmPhI/Fv3objwFtcNBxyHevh4Q1SvYoUjpqTRM4b8PKUyFfd9JrHtxO/GxWM/Atbo+Iw89kf6rD3wcU3bmo3/lt0j9FQmQJ5S0OSeRjctYCuSsm1krdB5vAFptHEUolv8eyRuH2U2xJdK9vW5uRmUxo9gt09E33Lm+gLR/51CFPl1oHHEfCjYPTvcvz5LP3DI3nI6243lPWvotE/Cyb6njcaONwYznXGDEOnSLOIffR3zexSNv/x76JoDdRjBqt2rmTLfKr8AY8+Nzo7dEetAAAAAElFTkSuQmCC", Um = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAACXBIWXMAAAsTAAALEwEAmpwYAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAP8SURBVHgBpVZNbBtFFP52s4lNcBoHqNMUKRjUhAOBOEGVIpHgVMoBCVFTUYEoqqColVIO4CAOVaVi+xIhcaAKisStvcClarEPQEECO4KjU5LUPjSg2G5JaGhdryP/4ezuMDO747hxQhP1yW/fm9mZ73vvzcyOgf8RQoiTaoBqlGqKbEjO6vNTdWO3wiZZADuVC9sRSVuAf0RNkKqTtWOxGCKRCLeqqvIxbrcbHo8HPp8Po6OjYip7GZIk6fy2BKwcFjgHnJycRDqdRmdnJzo6OuBwOPi4QqGAYrGIpaUl3g6Hw6S/v19gBSlJqIHAipyzh0IhTE1NYWhoCM3Nzewd6KT7LJ9MfUaUSCQwPj6OQCAg4CZEJpKoOTW/s7Iw8OnpadCIsBuJx+Pw+/2ChJVrgJKkBcEFat6bX8xi0Hvc6HMty6IcdRnyiDf7or22toZkMoloNCrWJUbHHJKs6FOs58Dhb5C5XcALblqWf37WDTXRVKtlXWm2k/n5eQ7OSCzpUOjjdebNzK5wcEDGvXIr7E8caRo59K52+mgPntzb2hDx5ux0XZcqlQqhFtVqVWlpaWGv/IzAx7zITIbFieGeFawWHkOh4sKPcVWJx38lx9YT+if5X2AuGcHG3iDmjzYNNU/0f8vQDALy/kkDnwZlOsDLHh42dOGPLI9+f3sZXx27isH9izh+cBZ56NJnmkcZsJ1QIqUuGdmsgrt3LL3LrXTzliLdyypysaTIpZJixKKyFYGbOfxArd7JYaR3GW8dXMTIgRWEx68g+ZcNy1kZpYqGG1ob3m47Kp9qfQ2ZdTtQKoHuUXYoAG2d5yTxEOkznxfVcyvCc9g1uNrKeKRFq9U2V7RDpykzFZIibaS6Ttua1vAVkOpUCCNIM6YqceLytR40yRJ6XHmcDb+EV/rSSK48DrVsQ7eWwxfZK+RwKdkAvFnk7m7hqjUC74tdWPgzh1s5B8bOv4FMdg8uzfZij1HB2bWf8HE+RtqNygPBeSbP9Ql3jp2DIHUCM7N/Y+yDHyDTVTGIuf2H+/fiywkPnnHZHwjKtqpBDBi6gUedTig2G+ueYARskXOsNXb6e8xcWwVpzcHou0zIvuSOIjYZTHW3dyP14YLofVqmB4h9N2Ksde7UAIzeq9C9n2NX4HXy7ZtfC/ci+xaJ/XqCquod7MK5kwNAU9mMaJfRB14+A8++51kPvxuYwwkYk+gIes8gQLU2cSfgMMGDYp558aQ59n1jrQVn/tzt6zhy6R2k8zc3BkiNwKNPDXNwZuvAg1tNESR+i8S8MjO/IXLjO8ytXq+ROW3tHND37Kv1wFtemVtnbV76F8nOJUoe4t+F3wLI1QGmrL6gtc23lf8AREdhvfSNXisAAAAASUVORK5CYII=", Ym = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAACXBIWXMAAAsTAAALEwEAmpwYAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAP0SURBVHgBpVZdaBxVFP7u7G5i0iQ7SZOUglm3iD80afyJlbZSo/SlxUJEQfBBsOqTL0asL/XBDYIP4oO+CIKQ+uZTISjYF2lDaRDENE1NbPrDJtkQWjfJTrY7+5Odmes5d+5sxnajCZ7lzP2Zc77vnnPP3LvAv4iU0iT9lPQCaVpuSk7PDZMmsVNhJw2wXRndikjUAf+AmhSpyeO1S5dx98fzWL00ger6urJpSvQg3t+HPSdPoOPFI4GrRToihPhqSwJOhwZXwLe/+BqlxSU0dnchZpqItjQrO6dQhGsXYM8vshcGfvgerf29AUyKSEYeINArV+w3P/8SC998h47nB2DEYiFDqXtS9bjvFIvIz1xHz7tv4bFPPg7gPgwiEUHOqbnCaWHwzLejlIJe9VLcF6agXwAvQ2pNXkXi/fcCEk7XM0QyHxCMUvN2/tqMnDh0TMQP7EesZZcPTt5kyEYQQqOpxieSOp5q/h7ys3M4+PO5YF8ukt/LQq8+zTOFiUchKguIxfthEJohNKgQtTTJcJr08rl1SZ38NNA2iOZnfwkCbjfo8Sr33Nw4QOCRCGC4azCkjcpGFek7HgrFCoRnA6TCK6m+8IpkU6QIaUyt4eZgEJq3Pg7HGg8IhqP0GFKVsTKmDJQ6WdxY7kHmcgzGisT1qIFqh4mhN5ZDG633RPpjoQkiHE12DFFzkF8PcgRPc8+zryJCfgbprT8luhuXYDVY+G1hA3fXHDzRv4zZWRcVu0wI9qZyNLQgjoR9OZschZYkE6gPSpTn1UvW296TuPF7HEvnyjjQlqB6eAdz5dewIhIouZyHogKGWyC9R0FVa9XGJJSjfxD4oWpwjnhjeg8yVx7Cnc5OzP0FVLM2uuXDyE82wUo3KUBIh3dus6xCGCJU17wH88xESSOkBbUCKcsw91dwuJTDr+sVJDIVNETzUDZ2CXVFl7CKoikZzFqGJkDE3xQlG4/H0dXnodzm4lCrja7KFBpX59A60IH23ir+S8Sup4LuFBOoHTF2D9UMssUsGppNtPdF0PLKCxC9e7H3uIPJm4tYLbfVR5WbTbSzhjXGHxpvco5HzrVjEPlxVW5CYEfCe+exxpKIHbwVTO+L0udsEclFGrxUsD7D1InXwWHtEF+t3CN9bmIM/vGIs3wWBVV0itQyjx5B8sxHtQNsJ+Csj5Bvi39sq7uBO4qAmYKJ5JnTynC7JGHwfeSrZURjPnDhpKjhSweF6RnMvHmKjqdM7b24D5glfvQwgZ8GRx8CT9XzCUiGNYn6wi26Kld/Ok+Ef6C86JNF43EFuPvk8TBw3Suzftj+pX9Wbl8uyP/x72JYA+RCgGk9l9JlvqX8DZueS/CZSfwBAAAAAElFTkSuQmCC", Gm = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAACXBIWXMAAAsTAAALEwEAmpwYAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAARcSURBVHgBpVZdTBxVFP7unWF/oMsuxVLEVsCmKbpBjElbNRp4qE18IPjTNzXR9MH4YMBUfWhjgMQ2McbE1OiTSUl8qPGpGNPEPwrVVG20oU2oUCysGEqBluVnZ3Z3Zmeu596ZQUq3uKYHzs69d879vvNz99wFNhAhRIK0m/QM6aT4V9L+WhdpA/6vyE0+QKly4k5ErAh4Jz16SBNyXkgPwZrrV09hLyobHm2AFmtBqKYDelVrsFW+7GWMfXRHApkOHxyF0UHkzh+DiE+Bb6vFwvmtYHyT2iEKGQjHgJ2eRG6O4/7XvkCsORnA9BBJ720EvueKPXeqF/nvj6Nsx2MEHgJ7kGG8L4otj1u4/mWFtKY/b3vBNLE8MortB1/GziNvB3BvBpHwIOeB54On34c98AnCjY9Ccy1w8lYTBtwZC+kRi7w3IcwsQCoIXALEk02Y+vQzjB/9ICDoDmrCgwWZ8+Frf+Dot8cpr/eC2yY0qY4EMeFczyF31qVMe+BONKOIhE9UXleLiWMfYuHsOfj1O6EIfKZX5OS5vtcpz4DGGbhleEoeM0FeZ7NwTU/jLYtw48sQeobITGSb0qhut7G1PYuZofeCKNrkMddp8KxKzdVfkVqcxk6qCjdugoeiqkCsQB8uh2uEvZLJIteuoHI6gvKX0qisEyiUuSjYebgNBqZ+HkTj2E8o3/WkhO2SKeqQo/6R72gzk//gmXkw8p7ZBkBpIrfhyLSQt45hwg0bWJg3sTJuYeySiapyE7OzN4AwlX5aw9Xf+oMoWmUEj8jR8LVRz0HpdiEPZswDepTGGuAwiiC6euYcIs8vAUtXbBRashifzCCbs7GU5tAGKpCZvwC8qEwbdL8gmExPr55cj8T21CITV1feyxfL3EF93MBMzEHZBR11+5cRijqYWxBINgORr2+ARVJBBIrgVln/3XYdeY7peBbUNFomMDZtIZZ0EW7iqH/IUeu11UyawXFVwKsia5CSg6porCj+etFthqUJDSJpYdeBHPK2nzYCzubpadAJjDQE5ourBG079qJUiVXSzpMVuJniuHw6pNamLnP8/m4lfjxQjSs/7AlMhyXBkBx1JPeVTHAPHVuMh/Bn12ZkPo5j4hJHfiAKMRyGTmnatrs9MO2XBKpntD2wl3SPyuN/yfLnMUQyGmT2q14wcF8N9apfvHJG6rcj8dQTgekpTk1JttlBOeve9wZUIxNACTwQjAr+VRgXDyWQmA+pPc0n+4LXfYSdCnrRq6SLMorOpzs98HUMoS0O4gdXYHF3dU0XDDW2jtwsV+b1hw9h08Oqbau7QQ4UgWQKFp7Z/w5Ye7fasDYSkXBVfkMuvzUKXyV44+G3guVeH/O2C6cHXmcF/h6Ge+55QvwLrJZh9psIikplKyK7j6zNuwTvCSbFrswun0R9w8USHbIF6i3mRYh8ytugJRQwNneAxTe+MouKf+n3idLljLiLXxddPkB6DeCkv9Yje/5GGP8AhGaCmrhB/noAAAAASUVORK5CYII=", Qm = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAACXBIWXMAAAsTAAALEwEAmpwYAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAP1SURBVHgBpVZdaFxFFP5m7m6yf9lss6IGLQ0x9EGxaC2CETRPNQhiRRT0ScUWfOqq+Nztu9U+t2KLIPrYvlTtg62CWsVSDVbECC20ZluyyW7s3b272XtnPGfuTLLr3pZKT3Iy58yd831nzvwFuIVorUukB0jPkF7Sm9KwfRXSKfxf4SALcLty7GZEIgF8PzVV0hL7of8z1ptn0fPPQ0e+GeONTMLLbsdIaQ6pwi4X2iQ9KIQ4fFMCLocFJ+Dz6Fz7GKpXg0yVIdNjEDIXj4vaUIq0u8QxKEwfMoRWqkRycIjAZm7Yg9oRrNc/p+wehifTNEqDguLBmn/5RxhbRQHC4C+kJ15EdnKfg3vbzUS4mlNzgcvy/qk69m17BencdkhJoP3gLsKQmDhoRSTk9Fq/Y3n8ZfXA1rekLdejFHdZ2jAuTem3qx0cOrWC1OhdkKILiY5tnd2JW6Pd+Jsdlx69Gyf/PKx+Xf4Bdv2OsSFt9q+x88aRJerx4HkSHgV5CGhAh5IO6GuXKtWhtEkR9/E3KQJ4TOx5pAKf/PGBm+scb3OewR72vl9s40ojohJIClzbBCWwdtgm8MCAC6sB1Z6/CR2PkdonMmBh5RzsLFgqTPA8W18utAw4q1BNG0zZqgBfrDXwk09lVbH/7T8NnF5bNT4Tx6RNE85r9N21rxzB0yn68whbF//uxuBg7UFEBCgzWA4VviawPKX3eLZsED5bqaMdaewuCOR4I5gyhvFmIJKF+jlHMJWyC4Irq1FML9zeDSlDH6ebVLpOy/T8eCOFG0rhatc3O+jEqsarE3mzrThGiBjCD9cGCDb3n7Btn2gdIdShsdtqHWmmVj3jjwqzWQcg/itctctsFHMyceALW/KmPPeNpIhIY4TsKbLvSXt4djw3BMihk/mtzm2mLMHU7EwWF5f8oYC8lNhTyhvAT1d8FFMSL20p0CppZGVCyiTTxQed+Qun/Q1b8zv6stGDATwLluthhMVOD2kC3j2WSwTn0Ccnn3HuSSYwdwbPYHZmdBjdzuJ6L9rwA6XjBU1Avzd3P3aUn3A9JyRtLb43zrL37nyJV5V/h2jcWnCpnhrLDGPbmAO7PnJdx/kucrvoddILszOZ0jvz4/FdqcXAYru1KNE1khEiAVzjuen9clvxIe4ybwMb/dd1hZoP2Vb1o1CNo3T0488Or0VngM4Xip7cKAlnrYhBTuyFLO91cIPXdR9JFfHNCt1d1Kr2Hh3q2gaBvak3x3NfZidE+U2I7GOum1+1qnOSnsyKJTEnXAf0VLZoo3UW6YTV4kGyAOQIOD9HwDtdaOKTmSj20T+ub1/O6Dv476JiARp9gJdsX5Xv/Fth/Auwo0EPgikYNQAAAABJRU5ErkJggg==", Zm = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAACXBIWXMAAAsTAAALEwEAmpwYAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAN4SURBVHgBpVZLaFNLGP7mmEhTvSRB3MglN9mUy70NVXrBi16xcjciYnWhKCgqgq+FxoW4THQhVfGxEAUpKApuNb5XJtj6WAiJj6rg4sTqoqA19pG2yck54/yTmdODJrbVL/nPPM7M9818M5MJ8ANwzkMikiIyIkw+iaKqS4iIYqagTopgurjYSIjVId8vkpSIEJWrD3tRuXtHpnxoSLYxIhHMao1j9qpV8C35T3f9IuIwY+xMQwGyQ5FLwokzp8Dfv4cxfz5YOATWPEd24aVRESU4/e9EH2DO5SuY9Xdc06SEyOHvBNTIpfrEiWMod1+Av/0fGH4/mGARnSDZZBcOLp+AMzaO6ptXmL11O5oOHtJ0B/RMmPZcJDmypa/7OI+c7Gb+1lb5kgkWg3lHwxR9TY/yjhC38jn4d+7WImTXIiFS0AIXRbLt+UCf03ZuiXG6GMde8zcYipRpNsYAT96dhSjbI8NiJm8QuH5Dr0tWCKxgavQm1cROxVEY6kfbgjjaPxlIPQF+LzHXSKa4lYr4MJUDbPGi2vcSWLoUzddu6kZhn3islXKFXklOfgyOf0ZPOIAty4Cjz+byxXNbmDt6l1IvSc0yp2LBaW6GXa7AMk34YzFqkiCBTsqlX9+C9uTj+CDmsTDeNjGsX1xie9pWY9+iXXKhuV7wmrVu6jgObNtGtVoFAgEEayNZTpQLKZcfeFFjF9+yXZYio5VRjFnjOPn0LNalNzv9wx9cQj7plQsSNgwDlmXpqigJyANlkj0eFyzbwnB5BCNCpFQpoefDI2PNtU243/+AawGvEJHr8IhHfZPyntQjZDs2bJUfnPgsdoyDRqgjIF0vUCbcFMSP8Ne8P5HdcBv/R5YzTAGfzx33F1eg449lDTvsXbiDP9x4D7FgBNOBRyBP5yAlMknapisur3Z3ksQEx4LHYf5vsH3KUWuQPV1dXWhpaaHiARKgRS5SiQSy73prm2lAHJ2rYwxFBzNBNBqFaZq6GNOqGdoaGbOH40iQs5UBznxM/xLMKHK5nHtHeKcVVbcUT54/8lPEFMlk0nvjRfGNdwn9lhr+AjkhgXqgBdctaKrCzymJOzo6eCaT8ZKnvJz1rkxST0Kd8Gw2i3Q6jXw+j0KhINuEQiEIYnR2dspUoe6V2WgmtCaX+PSR4b/w7yKhCIoeQlPVpdQ2b4ivv32roP0ZekoAAAAASUVORK5CYII=", jm = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAACXBIWXMAAAsTAAALEwEAmpwYAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAANwSURBVHgBpVZNSFRRFP7ue2MzmYyjYCWB2SoiI1tEv5S1rMAkWrmpnbumna5mZpNCESK0CALduYgoId2VGmYGgYKCtHEmDTTBnAk1Hd+b1zn33TvzZOaJ0tHz7rnXc77v3nPuj8Au4jhOhDRGOkyadAqyqsaipPXYr3CQAtir9PoRiRLgj6iJk0a4P5Icw8Dse9mmNzPSpz5Sh8baM2g+dQdNJ67q0DRpQgjR7UvA6VDgEvDJ6DOk0vM4UnEYVQcjqDhwiCIE1rbWsJ5dx9zvlIx719rvnD3aoLHiRJIoIlAzl+yJj53omXiJi3XnUWaWwaEfCqKvG8B9/mV7PbuBmaVZtJ1/iNjNDg33WK9E6JxTM8lpSQx34sXXVzhb2wAYosQ6vUuWwdLh289JRC+1IXajQ6frHJGkNEEvNQ+y2SyWl5cRCoVgmiYMw5AzlxxiJ4sjgd02l8vBsixsbW2hpqYGwWBQZplibgg1+ySPLC4uyiB2YHAvgSbRwF4iJmBlgkAgIEmUVAXoc5cte3wM4Xstlkm2eeyYMEMhR3izw7gcl6WRP05+jJ24l8tmhbWw4FhkW2/eBgKX5e6KMkEzW9bQEAzbDpg0S5PSJKqqPKl3S4tGCi/LAcPBPKtQlRfpNAxahUkrsglLEVxngkbpOjMNQ8+YlipWVkDFoEIb7hT5c2HDxR0s9+YI4u8mhLUt43Os45/1X+uZQB4oLCwQuEA+LdvbrjbZwH1qedKHc27Y8zWAufppcMJwSVQcVQ12JpMnMLxJ4HoW7cgRqkriAIFsF9Qm7S4Dvgi1TT0Y2InBBClphSvhK8vkljQL/SXqz5m+7kZdnTbTeQLzyhXfAFRSahqowE8p9z0HKVU060OOr7s43aDNKSYYlay3bvkTVBNYtAIYo7R8oHTFiKg25+seKGAN8EHjIq9yL0PFsW276IDtRfSBk/OprtbDJwwC4ntjhHvl5eXSUet+wLWGw2E93Oe9i+qhLrv4aBcSn7qKt8OuDK7GrrUjfr2dR/KXndymbFAj73B2iLlO6oDtARw7wFkSCrPowYmzL9tTS9Noed2KVGa+4CCKgZuOX5Xg3HrA46VCNElUkbhP5g96Mr8PYurXdJ4sEqyUgM0nb3uBSz6ZpVftPvp9zt5l2PmP/y6iCmDVA5hUY3G1zX3lH1C8CqWeiMSMAAAAAElFTkSuQmCC", Km = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAACXBIWXMAAAsTAAALEwEAmpwYAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAASYSURBVHgBpVZtTJtVFH5e+rYULFBoxoZshQbG3MCtJLIIwTE10c0QZ1yi0Tjilhj5N2acSzRO9mNq+IPJlvhPlsXMiGjiwhz6AzaYOL9GJx+ZgmvDV4BCW0pLv94Pz71934IBFoynPbkfPed5zj333nMLPEBUVbWSfkDaQ+pWV8SvzTWRFuO/CnPSADYrbRsRCeuAn6SmmdTKxgNDC+i9PQPXkA+hcILbbMvPQKkjGwce34bKCpvuGiA9JwjCJxsSsHRo4Bz48ldjmJmLIM+ajiyLERlmkdtFohIiERnTs8tQ6fPxu1VqqSNLx2omknNrCLTIOftnX4yi45ob5WU2iKLAzciJoJIOatKDOSEak3Hfs4gjh+w48UqZDndKX4mg55wFzdIyMnIZV793Y0fhVg7KgahNfpIeqooUjcIG9J2YmiKSMuzefUxPVyX5e3SCNmpelxMuhL2VMKbvhcFgQVoax+aKVPwrfTW5CCiKClkOQooNI8PWAzH9IDO6QQRPClr0bjbTu6cKsfEJ5DxarkWspiIfU2VIeVbscTgQG3PDGAxqayACjXJxcBjW2hpUdX2jpyqX7doLrOfr60eUwA3Ul31+GMwZWFYVXJci+NlWDm/Qg4vvnITzII8O4zdvYbSlFdmTM3yj5VgMtGD4CcfX24+8AzXMrInNHWE9b+d1bpBG8UrzC5gOBXHaP43vMkuxy34U1QXPobu7W48M9rpaPH3ta+S9cQzKcgTygi/pT8v133HpZnVsBU7Wi8kuGE8scQOPX8XprhnsKNqLmqoSmCbvI7j1YVy5cp7yraChoQEjIyOwWCywP/MU1J0CEp1vIRyinSl6HmFbrk5QzEj5hYoseaBMiBgfNODM1ShmvXGEQiGYxAgmxX5EAl2IURra29sRjUbh9/vh8/noPkRQ/eybyHysBdnxLBTSri/d+PRfBFxkZCFnyQDTtIilYHLOZDJBkiQOlm/P58D6fDgchtFoRCKRvN1SSET2XALKjz8Ay0oqlSxFHsaUGMpC7G468mnwkTkPp6I+xONxOq4GWK1WDl5SUoLGxkbeN5vNfEWiKOJ2ewcWzpyFBBOdKDpPdYU6fiBFUFC7H1N3/+Cz+9KMuJRhw9t/juLivXupaBgRA3U6nVyZ3Gm9gMWz55FLW6zHXVixS3dxsRTdZL0t9YexqgjALoi4QCSvmh5CrpCWIggEAnSpZHhv9eP3wy8i/P6HyFSF1J1gkl9/SO9+yy4a22Q/Gw2QQ7DvJySrz4pIpL8pccwrEt0TAY40EY/QKleLqqmpaDuqh3/Vpx3JH7Xar8R71IQPqhyAqizSdHDzynyYr5IYSL0RwDrFbvSvz9HROZgsdMKa52J9oaPJatLR+gqUlb3GZlLFjhd41iESVsNbd5JBwXY32r70aNX0QSSqngEcf6mYwB36D+zh8QBrH5xmatijgzF3CO+1DGJ2LrYhBwN2lltx/GUHb1eBN+uD9Z7MJo2Ee7iGA+j7ZR5/E+GMN8JtLJlG7KvIwRP7t6wGXvfJ3Cgy9uhfUjcvPer/+HfRpAH4VwG6tblm7ZhvKP8A8WjFj/MsyX8AAAAASUVORK5CYII=", Jm = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAACXBIWXMAAAsTAAALEwEAmpwYAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAOMSURBVHgBpVbLS1RRGP+de++Mzjjo9KCI0dAy6F1rF9UmmkVQ0Cpo0QvaBEmuYyxoE702bpLQ/oHIRepCMFsYFURUVFCglNrC1DF07p07d+7p+849d5wRJ9Q++Ljn8Z3f73ucxwX+IVLKJGmGdJh0TC7JnB5rJ23GWoUXaYDVSk81IrEC+DX6dJImue8tvIY7P6S+Vweu4stMC5o2RbA/VYv04Xq07YqHS7OkN4UQD8vxrGXgGQ2O0W85xObveK2JUcuIbIZVm8KhliQSyQRyjo/Pv1wMfpyiNUDvlSbsa6xhhx4QRgOR3AwxjRU8x93+aVzqnkCuWG9E4q2wog2wTIG85yNXoKBNE4lYBHsb49ixtQZnu37g7vPpEKqTa1NBoPOnwX+jd2QeB7fXwTQKMIQNUzhkaKNQlHA8AbsQqgEpTOxJxdE9ki0nyYQ1CSPg1CQ/TTi41z+DrckobAKSsiBNIjDgKKK8J1UEJQIPcOjLY9tozb2BWZVaXb8eRaCZznPn4qMpGjEgDFMt8mVegRMUBLVdTpELAgfNk7oBODtjWSZtGVM5qOUYb3OO4HRY1J9znjKas6UCkUWXgO2AADlKj0ceUxSuD9tlG0oZ2dlEmrWhnBv97oRRsLQzwSluDX5YJHBD6cyiVJ76IAQigB9o3i0il5cKMNRFN3BmdlFnnNYrrECOCj6VnDNn/BxE/i1vEHJEUM4j1KjRZZKoLjQnHfi+RypBQUJGdiO2s48nxy1dEKAwCSH45Al9+sgtv1DyKuBggzIyPgQUJ0+KYJazhKL/J7RoLh20ADz4VgoBSL/C4WpCB4wwZAUGxz+uWlZDmSXWLmLJUSPaGI5mLU3QfPvdY3S/XCADnRKSJydveMdbRktRnnl6H68mD1VhkEHKKNrLRxK4tV0NvmekEW6lD8YrjdcptGkIqy7s9jGBuv3aWmOkNesHl4E2bbQIpzYcfWZQYfiafcG9jnRSh7kekoCh5/KWcKCXsMfDu+gCaZaZO9K62Gsh0ba8dl8qyk31NnBDETBTOMBRdJyoV95IKphchdesvKbkXPDwMCbKzoF4yJcTNTNsmD4QQ36qzlBHQCwHXOq27YziOtkH9SuBl161iheNJvix4PAyFGoSqS5D2m/o2hwC8l/RtMHERM5EfUwQcC1OHIiVA6/4ZK4cePDo98rVy7D8j7+Ldg0wVwY4psc6dVqryl+B6z4H88oJLQAAAABJRU5ErkJggg==", _m = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAACXBIWXMAAAsTAAALEwEAmpwYAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAMiSURBVHgBrVbNT1NBEJ/d1xIQI8UEvSjh3hJj8ARGxJtEBf8AA1z8OFGJhqPliCSGk4lGBS0H40XkgEcwoVwhgoQbWLyYiAW1fdD2dZ2Zt9u+SmkoMuTX/Xg7v9/O7BcAZUwpFUA8Qswg1lTBErovjGiCSo2cNMFBbWw/IVGCvB+LCCJA7WxsDtIfp7lU29s8RjY2ghVqhqrOTvC1XjSuW4ghIcTovgKUDk3OhDujT0BtbIBsaABRHwBxrJZdVPIPIgm5+Ff0Aah9EwUr2GxoIigytEdAz5zVd0aGYffFc/C3XADp94NAFnQCZmMXBYp/AXIpG7KrK1DV0wfVDwcN3X0TiTA5x2KB0kLkmVcvwR8K8UeBLBIruTv3igKWz56yHknlUDyzuAD+23eNCKXrPIqsG4ExLHqd5SVIXmkHfzAIVu1xkJqS4Lyf8mYTrJs3ClGgkvP7F0ayCjWTU2ZdZlGgQ+rZ91KP3XMLLHJGSplK5SHsFMsIUZAUqSTC/W7ZNliWj33TmAFtl2mb+7DSTS1nfg5gI86DZCIBsqY6P3vOpTCluwYCc8813S930xxxNhaDLHLpKMLU18W7ZnranT0SyJ+bPDsCMGx3fSnjbgXDtRE4JumOE5s/cK0EczjIpa0d9KlUdtc1tdNQrzKnTqp0NKrS6UxlmIiyr40cqY5L5gCuUQR8oAD3u+C/QjoqNXKT9KsPJFqT9H4k4kNy59fLu27AggDrXDtRB0dldJVo2/JpgSarrQ3UyjL3WgP9IAb6i5wy374Xtf1nThe1zZkgE8GQ6V6kCD6xKl5cR2W+AtcHEuA7Q+K+Fa1t+Vkcxti38Szy5G/YSdy6gu6NWWpZeI+YUCsVMj6+1xOma5zuIp9u9CEWMIKAJBE87v/uJvHubVlyMvlg0OSf34biQe7zx+aMDCsHD01OQ5UBfaexzuNh7wsXLj0TpSL5IcufldNybo9QzgMm7r6ucrE5L3mkKPISIqROLxufcDUfA8AnE74sgYrHXYc6PDO0kFc7eWNoK/lk7hcJPfrj6uA2o/7jv4uwJkh4CNd0H6U0UI7jL5vAbkvW4TnLAAAAAElFTkSuQmCC", $m = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAACXBIWXMAAAsTAAALEwEAmpwYAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAANtSURBVHgBpVZLSFRRGP7uPLiNOc0oTFP54BIUqKmFGCESRqsg0E2tEnpBkIumRasWo5sWEViLAjHQaGGbBGmRu5kUhVrklG8inVQE8a2j0zSP0/nP3DNe1PH5D/89557zn+87//ffe88AOxhjzMndy93HfZxt2KI+5uGuYb9Gi3SAvVpLOiJlG/BHvKnn7qT7he4ezHzqxHx3L6LLyyLGlp8HR8k5uK9fQ/blCrl0iXuDoigv0xKQHDq4AP79/BXCE1NQj7tgdTphycwQcbHQOuJrIawFJ2gVyj68g72kSMLUc5KGLQT6zgX7r2cv8OfNW2RfLIPJajUEMr3HRI/6sfV1rAyOIO9eLc48fSLhHstMFKk5b/pIFgKfbGrhEhSJSWVTmgr/SXhm8KXvP5D/8L4kIbkucJKgJGjhze3V/kHWc+mq4iguhDXzaBKcr+aBFARF0dFEkyRiej7RlVWsDI2i/HO7rIufr7ui6Lsfp5GuwnJEJibhKC4SO1UEjJLMQKbBUqKmugl9eLl/EM7KCpR3tsugLAu/1FBvZWA4Yck9lVDzc6C63YqZa087Nm190AzGOHgyk8S/GGOOY4gmEgiNBS2ZpzUK8FAGPt6pWuaPYDgchsVigdlsFp7SnTMxIdFGq0ubahMcOB6PIxaLwWazweFwCJlM/HKeejRhMpmED8wNoWuyd2OfBiDZyj5Z7/Q39Ex/FcS0PhqNyimNJBIvFLHTZNvIRzT9bMHfeAS1hTfxoPQOVLOKdPY60IzWgTZkWjNw42wN7hbeMpJrJJG4m52dFTsgaUrfV2JqdRpzdWMwKybsZlpzKY5YVPTX9ohqE6TL5UrKSx8xillYWBATkUQEgdl+nDjqhtVsRb49d0fwcCyM4flRRFkcbpsLORknxSazsrJoeilV5FAohEgkImSiTGQh92qyLiS1qqqw2+007KcafCGCmZkZ1NXVxfYLvB1RY2OjqaCggLTtkN98YVVVVca3/0CuaZrxM65JVh/d+Xy+QxP09fWlzghjWpp+SjGv13tgcFprOPE0bNLOI2cPQmIAJ/MgTYHqZQSlSnruBkx1I2kNVm/E3O7IJHYv9Dfc7/ejo6MDgUAAwWBQxDj56caBUV1dLVrdtj0y02VCNWllezcfO8S/C48OsGgAHNfHSFLnThj/AS/Ewq8gVAGzAAAAAElFTkSuQmCC", eL = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAACXBIWXMAAAsTAAALEwEAmpwYAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAOmSURBVHgBpVZJbxRHFP6ql/F4CbHlAJGSICJMosgmIYFIiQMhySUKl/wBUIKEEm7YSMAFwfiIQCwXDojFggNHFonthBGLELtYLAvJDGA4gGRsDOOZdvd08d5zVbuNPcgWT3pTS9f7vnpfbQO8x7TW9eRbyM+R5/WYDZi+NvK5mK5xkAGYqh2sRKQmAV9LRY68ntvRpYsYOX1KSv3qlYxx5syB27IAmeXL4bUusaGD5B1KqV0VCVgOAy6ApV07oPv64MycCdVQD1VTKyG68Ia8gPjJY4oBag8dhtu8wMLkiKRjAoGZubCXtm1FsG8v/EWL4fg+FKFQEARNQjS0/ALxcBFRTzcy/6xCdv1GC9duM1FWcypusSwMHh7YD7+lRT4qQnFUejbKwI/ycT0m8vD2Lfj/rbEkLNf3RPLIEhyk4t/yvbso/LEMfnMz3No6OAZUWTSlgFQ9yYLa5ddDlEkPqo+dsOvSRQS/KzP7vND+vxqKNM/Ma6JZK/FEQ1PXWo+tmSmZgD3s7QVaWzFj02Y7pIEJ2qiyMwgC9Pf3w/M8cdd1RXelxvaBE9wnogzizHwDr4SQPY5jhGGIKIrQ2NiIqqoqDunw6OdvWdhSCY7jiKeBOdgrXoN26gi4iXoCuIUL0G4DylXNSJuNZyxDsIxlXsg1Zk4TiBQ6gj90FFH1jwT2DVT4DCoirWuWIPa/gP/65DgCjuN4zsTYXCaQA8Up8se0abgIa35NZHCCB3AKXaOSqI8QZRcma2KzTiaXIkgGpEs2r3gDKi4lbda+XLN0bMbRS7hBz7gM0vGCQf5ImGj26R0igN6npH01nJBO80ieMugmwgLK2e9Qrl4sMk28bCCbxNhgQpDJZMA7aRyB/xm84Ytwh6+RXgEB8+GLKLPrcEv3EGe/Rlj31/sIbrNE57nGBO9mwMYLqr3Zcn7dkV7K5Cn1lqH9TyYFZzM7iO04nwNe5AFudXZvj+8PXI2VozBt06MHblb2c2xYtMOm8KVHizJIJF3U+O2H2b84R/K7Hb581DQ5dAy5QvYsPWO7OvkusrtoFfngt40/Y+X8diSXzDRmz7aCYufNkMMnbwNXhICZbMeKr9YJiZ4KiRnDYxl8JcUa6zCYEx6cHBX86ODhUDdyN1fjefEpKqnFwJJ1UzuVP6XBc7Yx2ZPZZkjkhN/pv4LLL84K4fNin4yp9T4WwNZZf6aBJ30yK8xMHv1OPXU7pz/g30WbARhIAeZNX85s84r2FodHNNVBPBlUAAAAAElFTkSuQmCC", tL = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAACXBIWXMAAAsTAAALEwEAmpwYAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAARhSURBVHgBpVZrTFxFFP7mLruwWyi7RR5tbaViYlpBsbHRLRUhMTaxpjX+sQlEMampsQYXtWnUCIttbOAHpWL0R4kUgpL4RGIa+8OCMYqJqLAGbJpQGl7dBXQXKN33Pc7M3gsL3bU1/ZKTM3ce33fm3HNnLvAfICIrtzpuvdzGaAVerc/BLR//F2KRRnCraEsmxBKQv8qdk5tVPA/O9uPn6fPSXwvNyzl567bgHut92L1pL4qz7fpSH7d6xlhzUgGRDo1cEnZdfB/u65OwpWUjw2SFOcUi5/kj1xGILGH62jg2GFRq3tPKDJYincbJRepvENAil+rtI03oHm3D9qydMCopsVlr90rAjrSo+oTZpwz+6sKguwo1r9fqozX6Tpiec+7+EGnp+KsJPZfbUcBTwPgoMeKerQrHrBCeXR+k3EiUdfaE0HMhgoGBATgcDtTV1enpepCvu6ILtHFXNTo/Qoe/38sKbNthNq6TArHoWSxkDrslQk9lBjEyrLKTZwJwz5JYj4WFBQwPD6O3txdlZWViah8XKGda9GOip+I7O2YCkyiw7dDImRQQLoNHfdAaonsRQssnIdb1bRhrMTQ0JMmFiAYbTzCeloNz/ZjxT4IZgMWIF6kpZhm0IN9lCavP2YKKyxVl+5oCmHRHYxljKy8mEAhI39fXJ03bhUMIHBCtn66eBxS+iNt8+B+sZzakGwivZAXUbdEIa2gJUuvnoURlLYW8Xq98zsxgZImc4/OkwGNCoFi0eP4luQg5QiHsSvXQoTsA16DKSur9bHw6uhyxII0X8Pv9CIfDqDxgpMajacy7zqcP5wsB+UF5/BMy31kpRC9n+6lQDSu1J4PU0hlhiqIgUeTCVFWFLRP08XsWlD+axTqnX6NfZp5nHcUrAjFw8tL0MFXnBPH7b2Fl55t+GptSZcjRaBTJULnfqLa8Y1bGWQlVX2qCO7CJ5ZjV5XEhcEUovZFrorsCftQ2BHG6I6hJJkf+ZgWn306jx8s2KF2eGvrS8xKTqWMq8jIM+jTfskB07mH2QMWPmLhKuBkO7jPSR04zm2C72eGLH9Lf4TymfycCBbblxAyK5P4gWovsyZuS52UznDtjodbGPPbZ4nEcG/0KMfJ4EOxbjPrDN2Jb4iXLGisvL5c1nAhHKkx4tzoVU4YSnJpohju0dQ2veOkqciyE9v0Zeu82hZeeqCnJqp0jq7B1o4KvP7BQw1u5+GLphIz6BnIZN0mRulKL3nVWnEV6/b3AzSe+vniRqmdMNNSTjoJHStmRSxeoe/ZFJATFyCsKU3G3Vb5geTeIRvxx7eDulGifOF5PD21sxB57FvvUc5S65w4lrygtNRWFJlRy07D6uI4TcXIX20LwTxzrM8Hlu5NP0qetnKp6YoqyDZzciPtzlktT3GpOxK1YE5DciRCRX7hrJor+qSgue1V4lmLk6TzQIk5o32yIJ054ZSbZtbz0z9Kto5du4+/CoRF44wjHtD6nVuZJ8S9eLX49hJXI+QAAAABJRU5ErkJggg==", oL = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAACXBIWXMAAAsTAAALEwEAmpwYAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAANXSURBVHgBpVZNSFRRFP7eezPzpqbUJhxIpCxoEWY/GAQWWYsgjchVLat9kVHhsnEZkQntIlCKoG2QuWihhUY7wzSCFpqikiZqjj8z8969nXPn3nFGx1I8cubed94733fuuefeI/APkVKWkD4g7SIdkisyo22NpBXYrLCTBtiotK1HZBUAv01DnLSEn73eHqQ636lRzs2pb+y9e+EcrkKovh6BmtPGdZa02bKs1nUJOB0aXAEut7ZAjo7CLi2FtasE1vaIcpELCdIFiJGf5ANEXryEU1llYOJE0ryGQEeu2JcfPUTy+TMEq0/ADgZhEQo5QaEpFwmpfgGxuATv+zeErt1A+H6TgbtjVmKZnNPQx2lJjI8j2fEWwfJy2LalPrB1HIpEAzMZ/wkeyZCamIB7oQ47yspMuo7T98OGoI2G6+l0GtPT03BdF47jEIGdybkeC+yXUiEEPM9DKpVCNBpFKBTi191EcM7S0Q+xZWpqSjnyB0zAEZuozQqkSlM+CROwMgH7MYmWXQH6aeDZ2K8/4v3nMRGwHWwLu1YwGABjZwlM+vUerF6F5/tycSlFo4cz1XbgQLkqwkYmuMyzx68G7aevByjdNtxQENHisI4YisgQZJ9zCFTS55NYWk6Twcetq4touVvD5lomOMaz/h/TajtZk2mB37NJWomjNljmLCE//gzBUtJH2vNNIvGxb8K8rmACtZbh8UTeqUh7AumEgEOVxNW0WlSZipUqMuC8vNn5VB5BjlirRsAnENaNi5XnzzkZ5knxDle/t7BVqSjbaaazWYLa6j0Z02aCXUeOHNxtpl84RR9Iz968cgiVByKebWfq394kqIDZE4HzJ/dlqgV4wweNN3mGP0okEurA8Mm1Npkqc+BYioqKjHm/TUB8b3TzUzgczh6c1Sf2f+BGI5GIMbfn3kUV0JddcnISorNDVfxGF8GxCNo8p/4i3NIYm7KXnSpTnhAJ3+FP3FgMgu8kurLXFm0BcK2410R9I2bM3HiGC0Qi49kmONAv/eqj0o9FpdAqc+as/M5vuCRFb09u+4znYhZqmY00cGdTJ1x+6gWoZWLwK+TISMahuBjgVllXD6vmlHEt2DILLzvT9NvlxqVLbuG/i0YNMJMDOKRtcV3m68pfHVs8b9zKzn0AAAAASUVORK5CYII=", rL = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAACXBIWXMAAAsTAAALEwEAmpwYAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAOlSURBVHgBrVZNbBtFFP5mdk1RVIgtJYHkkLgVagRKmiD1hBxabkiNMD8SQioVEjckBDnmZvtEqgqUG721HCoOXIjaBiEk0qRuxIkkNRfUH7vtpTm0cdTsrptd7/S92ZnEVZ0qafuszzP7PPN9M++9mTXwDFNKpQkFwhyhqrZtzfgmCFns1XiSIditnd1JSLQh/56aIiHNz9HVMjb/mNXtzwN1nBlWyKb7Mdo7jPzb4zh2IGen1gklIcT0jgIcDkOuCRvTP0HdvQvZ3Q2RSePCUAdmDgIbjzbgbXq49aCm5/1+4lc18uaQ5SqSSMlyyjYrR+PiBfhffwWZSiE1OAg3k4ErJKJHPvzIh3AE9r+6HyN9Q3ir6yA+/OVTUfr7B0tV5Nw8IWDil5CfPoWwqwuvHB6BG4ZwPB9OEED6PgkE8CIWCeA3uR/oGAz1voPpf86gNLclUrA5ca2DY968cxubKytIffsdJAnIWlXHUKyu8ipwsg84mYu3oksujZi+mmEvIn8K0cMxuK/lOH9nCR8Io1TlKRs3bkD29cF1XUgpIT0P4sfTwNUrCeVHCiofa3JmVnr7iUiT3JFXATpy6Dh0ye4kwyH6mHvNxTLw+WcJMSOOIb78AuKvPyEoPIJChZBaFUDE3PqQBIFAQ8Z1micQe2XaRdkKTLBAXlfN7Cyc7h44QkAuzENQgkXPGwCRw6dYB9RuUht7tGTqkxBDKE+LCXWfBACH0Fy/aAWOcg5G9U7/q0AeOQKRHweW/oU4TO6xMeDKAmwspioKp/bZ0KgkD/QJKNlhFCbjYoHRnjKWvtECWRbQBwpU72JxEbSB5HBcWwZuXqeyakA7ycKGovpXSVmbT0yhNJI296g31u1T1m3xb5NboyS3WkyZDGOFtmYnKjxBwjmo6d7rnXhZls0M2G7dNQJZ5/x7UGsriaRsP7Fg0M5US7kiM2zdy0w1zz3ZebxlNJ7L7Llwt7lm+KBxktf4KaqOQwRlXW5C7JFcn2iC04/UoWvWfUDSzcfX7GV+cnom9Sr0drE3syFy+89b1znironkR31dLBHSxfkplBamTFntlj1B4f1JFI9OsocX/S4L6HRyhxp9h/OAQjJod9swY1rI2UqG86kXThGmUJbvVfDJbydQW7+zPUA8TXxsIKfJuW0hL7abYkUmjIg+4ZdvlzHz/yUsr1a2xNL7OjVhfvB4K3HbV2b7XScv/XNq9zanXuDfxYQhWGshrBpf0ZT5jvYYcDM4tkZ5l4UAAAAASUVORK5CYII=", nL = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAACXBIWXMAAAsTAAALEwEAmpwYAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAM+SURBVHgBrVbLS5RRFP99nzMy1uhMRbVQmzEpLB8I0ULBMijIEJRW2Ur/ggbUjRaOQUHUojatAm1VqyAocqcl2cJFIhmoiDbVpqnm0Tybx9c5d+4dP3UMxzrDmfua8/udc+659w7wFzEMw0k6QjpJumqsS0DOeUjdKFbYSALsVMa2I9IKgF+jxkvq5HEikUA8HhdtNpvF0oUulB2phqOpAYc7O7D/TKsyDZKOapp2f1sCTocERzKZRCgUQjqdhsViga7rQr/0DyMdiSETjSC65mMrnHr6GOVN9QrGSySjaqAX8BxfX07A7/cLQJvNBqvVmicxYnGUkJW13A5nYz3stUcx292D5Vt38wS8NxsIZP4E+PLte1i98wAaefd7aZlzJIDJK9GCCJgk18YEgKO+Dr6Hj8wkI2pPNEkwRk1veP4DZlrOw9F4Elb7XrFYdfM6yhpOCAKWle6ruYhp1RAfiO9U+BfCHxdx+tUztS9TZHNOl0y9PDN3pQ8lhFNCYEaUPIzGQDubB+c2S55nhfdREQFIRdo4hfSzFcqAlHYucwt1unkU83+Hts8B3fcZut2OyhuD5KMGW22NuQiQpYqizvqcjCRDRcHpCkzP4OebGRWFhwm6uJcqtcJaUYEUJyaVwt7mJmyqMBFBhqPauACD54NBQWCQ+bcXE4rgLBM0c4/LsazuGEpEezwPqMDzEcS2EmTidEZSKRExxxOYfqtW3UwgDhQfosrhwXy9m4HNkuEKksDCe7Izp4xdyoTCGwiELLZfQuoT5Z9+omN3omHr1cBYa9wpdVQUWC4OXMkeV7XqBvMEzrZW/C+x0z0lZY4JXnPvIF1cgNxMFC9mm0OdF1X3ucaHgToBHr3vuIzw9LuCudwJAWupqwotC7NqukanUuRrdkqMhgZ25b2ZpPHJuBqOE/aaKpg+0iDvg3uoP+9NMcCsLrK1565t8TZwRxAwk5pwUxSuIkjM4JwBKaMSc8uD46WGHx1E5hew0NOHJJ0NJdomYBZHWwuBD5irkMG9hWwUiUeSiBMepMvrB90tEbrKE74cmcXhEIAHqFpMwAWfzMJh5x79cWPnMmn8w78LjwQImABX5ZxXlvm28gfqYg7HSqxFqgAAAABJRU5ErkJggg==", iL = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAACXBIWXMAAAsTAAALEwEAmpwYAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAANYSURBVHgBrVbbS5RBFP/N9+3q1kK6L0FPblAURduNjCKsoCKQVMg/oIfoqch6TWm9QK8+FOST0kvQBdKIkAJXjd7UlAzBB1d7ywddL3tx9/umc+ab0V1vrdWBs/PNmTm/35wzM2cW2EaklOWkj0n7SKfkmsxpWwNpGDsVdtIAxUrnVkRiE/D71ERJy7m/MtCPTE8PstTKRELNsSsqYEeOI1BTA3/VReM6T9oshGjfkoDTocGRnexH8sUTOO9+wt67FyIUghUMkoeAu7QESerE4+yDstdv4YtEDEyUSJo3EOiVK/bltlZkYk/hP1QJ8atETVofqtTqJpPIjX9H6e07CDY2meEHJhJhck7NCKdFgXc8R0ntMVglZJkBrNSGTGoCqVuBzPAQAnfvIfioyaTrJJHEDUEnNbecsVHMnz2D0odH4a8Mwu2w4aty4fZaEJQKTo+BlzomJnDo11lYRPbHOPb0fjL7EiOCy0Kvfootc4cPAtPTKD0XgRWW8FW6QJpy/tJezae3Zo2clyqHBrNjY7Cqqojkswk05KOfOrWpfEoInA2+m7PA5C6AGkEcIml5KMLkNC9XOigrnYHFRAMDCktH0cB4tfzVPfEBQxf8sMjB/riI4B4amhWef0SDCoFVJs0iNdnyUgK5/X7VP01Y9R7BRSY4wV/P/OOIEYFaBi3b71vALl+ACC0NxFn3QpCryEKlLJVLIZvLkY38KeITzlfUe7xhJlAXaioxU3AWs05WqW3ZxCkK8wFzgiRc113bFz1lPp0wPUVQ6Lvu0DuuQ6ekCFk7YAX+HH+cP0KBMvwvCYcqzOe8TxOEG8V5DH8ZUYwbK1RxwtvCAZzad8SYvjFBP+mlusPVuD7YDhvYtDT8ERzm0gGBxmpj7uaLxps8x73UtSvA4IB3kLAzUXWJW6q0uycmjXm/RdeZ60aMeyVUrGTeav4mgsCrN8bUxbXIG/QeGH6lZKa1RSYDfpkmzRSpPDdFutLWkv/ihQtX4D1/SlaIJKUd0zsHZ2nYPEwpo2aGMzrqpg4d2ECUzlMey1y9Ip3+WD54NB9zsyeT2fllUzfcpcLlvO+BHB2DnIl7k8rKVdW0b9RQu/2TuVUkvCddsnjpk//w76JBA8zlAU5pW1Qf8y3lN9AhcnfpaSwdAAAAAElFTkSuQmCC", aL = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAACXBIWXMAAAsTAAALEwEAmpwYAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAARoSURBVHgBpVZtTJtVFH5u+cqgQDNrNpeMdTPo3BwfEROzBCOJJjNZBjgTN92WjegPjREWRlRIpDW0C26JSEDZsmWI2QJZ4jAzEXVxCK4uMZmoAwaFUBgyEGnLR6Gj7Xs99/K+2LKWbNlpTu5978fznHvOPecWWEU45wbSStKrpEP8f3GrYyWkJjyoiE0qwP3KuWhELAJ4MTVmUoP4dnVew8TlNkx12uGfnpZr1qRtRGrG01i3+2WsfX6nttVDamGM1UQlEO5QwTE5OQnfzV4MHf0QCY8aEWcwIFafKNcF5uYR9M7B6xwRu/BMSxNP3rFNwzITiUXD1EWwHBaLBdnZ2XwAQf7EqRqs2fAYYnQMfH6edIH6QFyyHoYd26F/fAt+y9/HHNYTGpRZxCbsBKr/fhduEeD19fXIzMyETqfjZWVlyFprZGOffAbF66UNREQ/uS9EPTf+QNo7byK9okxzVzadxKkRnKPmcFdXl7AcGRkZ0Ov1EiQhIQHFxcU817SZjX5kgzLnVcGXiJYIOPwzs5jp6cOz332txaWdCPJ0qvWHxYghJYXn5uZymoCXrBXqcrlQWVnJrvTd4mnHzdAlxEMhN/F5r3QZNLfFxoK8iEHbSc07L4hrLmJQsHRb7Jj8wIwvz55FTk4O7Z1HqFZUVLDGH9r4prqTiElNUUkWqPXJNuj2yIC6CcfVYddISmLMZvNx6phGPj+Nfy5cZOgbwCvVVjicTvT29jK/3w9N7XY70+mT8OKxo/B8fwUBAuWLi+CBABG4ZSuiGpOaCuNLeZIhljRLdGb/7JYWzLb/wob3FeHTi008Pj6eNzc3a3GCcF11dTUWCfS9M3UYPPAWFkf/RnDBB4UMYOoVcFPuqGISBDKhfCO35ZUSuvBXD/rz98N2/gyLi4vjDQ0NYflSVVUlSUq/Oo3+gtcRoACHXsvg9EwYwT0iSfocbOCNIlhamlhycjJsNlvYGqvVigC55P1L5+HYexC+4ZFlA0NFeMUpOvEUuJXTvr5BOPa8htKDh1BeXn6PIcJdH5/6gj95uYUnbk3n2njipo1a17NMYMjdiUhyd2QUjsIDUUlqamqYpa4W6ZcusMTtT8kxPdUpVbpE8ERqc1fHNf5T0jrenrSe/0zasUKvb83hU723OJGEJvCyFhUVBf8dcvLrz+UpbsJSpUSr+VJu7CqMSiBJ0jOVqe4eTkFWIpEUFBQo7vHx0DJu0tHVE3WjXZxnc/kxcESXxbEJJm7N23vyGdUsZeV8a2src965o302ilqkVdMjIiAiDqby0mWTIol/bBz9rx7Cu4V7WW1tbdgyKinIypJpJd+GsI3q8ydlyHpiVVcJ/XVLBp/otIscESQKgYe6Jrxch5CYhSGiP0eZ3b3/CO4O30akxQJVl5SIbT9+A2XDehiNRm1KvGrmiATaSVQSmeEeKl5T37YR4U2Z7UJiqdYIdz6ye1fo9Y74ZEYU9dFv5PcvV/lD/LsoUQHcIYBD6pjIIcNqGP8BrV4MLEJcEFEAAAAASUVORK5CYII=", sL = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAACXBIWXMAAAsTAAALEwEAmpwYAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAQDSURBVHgBpVZdbFRFFP7mbi8WaqQ1VJKakGKMmmyJSutfi2gTfbBRgcT4EzG1KoTEB9dE0xhUtm+2FcKzIDT4g4kgBE3VFwrabUIIoUDbkPBQ2n2lLPRnt7v33jmcmTuz3O0PKeFszp3Zu+d858z5mwXuQERUybyLuY95lG5TxrxLMNfibkkpGYCl0sHFDIkFwD/jJclcqb77qX4U/u7VK928qWWcNWsQq1uHZS0tKGvcYFVvMHcIIfYuakCFw4BrwNm9e0DpNJzqaoiqSogVFVqFZqaZZyDHx1gHqDj0E2LxdRYmyUY65hkwnmvrs92dyO//AW59AxzXhWAUVoJG0yoE0k9AZnPwL49gWWsbyr9st3Cf25MIG3NezquwKHDvwI9w6+r0j4JRHBH1Rhj40J7aSzbuDZ6Hu32HNaLC9TQbuWoNHOTlQzk8RNPNG4UbjyNWcT8cAyosmhBAZF88BX8Ppib5JJex/PgJm5dTbKBZGO9H1Zvp+qcg0uNw43XstSgawPr1wAetEI89DnJdwsgwwImnf/8JbTMHbMQfHgKamrDi2J82VFVl/NisdsFAP8DgMVUlmQyc5eWh959sBz7eBvx1IsBvh2MilwNeeVWg/SuIVatAnCtdWfmCdshPpeAzljlFQr3bpKumt1cLaM+vT0BksxAbXpQa/OudAZLfOlj7CLDzG0JjU4CxsdDwM8+Slp24pnWVgwFjGXoJpispt+l1mq2uIu+hBylgpodXE/13WtLR34keXUt0YL/ULXX0iKfXdDpssTNniGpWax2lm2OMbPNG24CjymndUOB6F/pj4u55wHPPA8ePEbIzwDvvCQykgEM9AvEnJK5PSK3X0CDhe0U9Rz1NQzLVOtGGUEVS0nmeJ3BfOcfPhwLRApmMQCHvIJ8PRR2nFAOlGOrHq3r3wErMowuD4HiHRf/Lz4QXGoG33w1whYuupibEuXSBoir6FDxKDN0oMwZqY1xeNDJUamDPbuDIHw5OnSR07OIMcgrf31qGyUlgakpqB/ftmzfPBJe5oUGV5KTKRpD6nwomwVIl2XLXd2G6Dv8q6a0tRK1biXZ3E3mepO+7inLS6Baqec9YhhJ25mvyNr9B/lwDij/dIencWV8LBUFAAymibR8FURmlo3QL9U9Gx3itHRV9vLzMigi2vFk6IpZI0nDs5Gkboh4eFW22AtpUQkRjExweVoS7IyvvfNFuwfXdUCoUXn9hFLo7i7mYF645bGMfdHVGQ5NY2BOTcE1DFyngeM41JCOsgTlvMtUfBU9GMRe6MpV1dbPpDld5UZMTw5dA4+OhwkruGTXMXmuBCquhBa/MxU6iLv0eWjr10T38u0gYgEwEcNS8UyGtvBPGLefBGRrhsAY4AAAAAElFTkSuQmCC", cL = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAACXBIWXMAAAsTAAALEwEAmpwYAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAPMSURBVHgBpVZJTBRBFH3VzSiKUdwTDohLogkYFzwxKuhFJa6J8ap4cEETUVGPjt5AY0yMB1eMJsbEGLcEjSaiCePFgxvjdgFBPQCGHQeY7vL/WmYGGAjGT35XT3f/96re//ULYBSTUmaSnySvIa+XCWszz8rIc/CvxkEGYKxWNRKRSAF+iIYQeSb/joVr0f+kWo2yo0N942Rnw81bjHHFxUgrWGlD28lPCSHOj0jAchhwBRg9fw6yqQnOzJkQUzMhJmaoENnTTd4Dv/E7xQAZN2/BzV1sYUJEcmoYgZm5Yo+eqUDf1csI5K+AEwhAEAoFQaGpEAmproDf+wexL58wbmcJ0o+dsHCH7UqE1ZyGtywLgw9cv4ZAXp56KQjFEcmzEQZe8/G9T+QD794isGefJWG5lhFJgyWoomGXV/cRPWsLEcjNhZsxCQ7DzZpN0kwAmpuB3l7EkYVIrIJ+e12dtJIvmPDgkc3LSyJYI8zs6/lJd/5SiKZGIsiDs2o1nJLdEDlzNejvVojWVsjKCqCh3sik18QkHpHEInVAMIiJ9x9bqaam0WUr33mvawECd7lKtu+As79U6S7u3AaqrgGdXUojsWw5MJdIIxGdDSOf09evVhwLhxEjLLOKMibYoqqmulqBu9lzEuAXLwBXLsUTq0aqLqSnUyX0ATOmQ7S0auL2dsqVgMtyEZYhKGSCpWqZpL/S/Gi5TiWVJ6hM4Tga2xIwl83FwiBQlAXx/j0Ex0ej8Dknr8NWohwmUBsKBCj4jzRXJfn8GdBFsriuSqhmTdo2BQS+bj2tfxtAyRWFQcXt0NUzG9ISxEuQ48X48RhknoeU1tJCMkX1avqiaiKCvhUYvHtZlQZ1N3mKfvLmjR4LizCqfYpQPkiK8iPAwVJg/oIEKLUSY+1xApfKS9nTal3nCyhg/4HU4FYq6lG4dxf49lW7fU1lbuwdE7xSrNS4lHGCuNbZQqcB3plZWQlw1n7efH3f2ZGSP81iAQ9tz1c2sHWTjM2aJn1yWbpXysbGREP+/Jka+Aspt2yUkt8PcY7h2P78JcltPMe2ihoaiiTN3tu2WZercSxcRHVG+Wn6Afz6iZHMN+6+eGUlukHVWDKs2flnKyGp4VmSsZjtSSg/AefYcb6LN7vER/r4U+adqZCeWbafQo6h0vC3XmVFsjRlqWciZSj+Sd0H6ZGeQ4n8JFfAlDc/XJsMHkrGTHVkMjufbGqHc15UOUY+gpKuA6ZQTrjXbCiGKAja0JRH5kgr4UP/hhy71cj/+O+izAC0JQHWm2csaeZoGH8B4VebtJwfshIAAAAASUVORK5CYII=", lL = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAACXBIWXMAAAsTAAALEwEAmpwYAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAPoSURBVHgBpVZNbBNHFP527VBDSJuQxFF+aA2pqaIa4iSqlKpFsaiqSoCa9lRFPbS9teqhqVr1girbBypVueTUAz3ApVWlSlC36gUJMBfCPwYiRMLPOjhAsIlj5H/vepc3szMmKCFKwrOfZ+bNzve99+btjIEVxLKsRtIg6SlSzXomC8I2SurBWoUtEgCrlcMvIlKWAf+OmhBpIxtHp64jcmWC2mvIFHP8GU9zG/xbuzHc9y4Cb+2USzOkYUVRxl9IwNIhwDnwL///hfh8Em2vNaFp02Zsdrn4c7lSCflyEXdTc3x87NufiXC7hAkRSXgJgfCcs0/9OobA7AX0e3tQ53RiYOubmE49QKFSxg53J27M3bMXW0CebJOzGr4e2ovgx59LuO9lJKrMufR8amwMmYlD6Pd0o2JWUTQqSJdyMEwTpaoBp9MBr7sDBb2CvF7mLvq6PBg/EUH43z8kQVDuiSoNLOfx2RuYjPyGJ3XttLjCQXq7tsOkyZmFFO1BHmnSjqYWmivzeZuogk6yhf77k++V2L/DnEAwfckGt3/8DA+3FBA3mvkiFv7xmzHEZuMoCo8/6umjFCX4HBuzlpE5KZVQFYSJREiAlTlZ8QlPzeUzSOj34cq2ovtVjfLdCt2h8m1q2qRQtfiw/+13cG5mGqdvTT6/gSQlcgCKguj0dV4gorpGGcEwr4yjx6FEN6Kj7gka9s2jWNmJssPJF08n72MmnUTk6nmUDR3PVR59FPos5LM2I5FEYhOSYIgh+Fnv6JyGhNeFxqyBbVc3IDmYg+MVF0Vt+5kvl2itIkAX/VJTpBTphmHHRN+oiJDE4xQbgnrtDna1d2DCTGPD4yItqCJvFeBQVZvEsr0THe455RimZbe1OfpmCrkagawiuHQHUrcfwZuuYHc5W0tBlcpTr1ahU8nqVKa8T61BLZvj4CsIiyDOmHy6iuaHWTTrJho+pHSgKqbXKBSIp6VNjjI1Au3AF0j8/TsuqvXo1G4CLVi3+Ltqx0aMpeg0673XvQtuOOCqp6qoMrOK9cqwf1B2IwyFnxm+nn68YbZj6OQlfNCbIouJNYnYCs8WNwI7aifsP1QgCjtmo2w08MNPKLRuw/zlhnVEYFfQsW8OSMMRwo5LlK9IM13+AQweHIfl7qPqUNaEzSS4f0Tmn98NkG4yJml4/f3d8O3ZU/NotQzBfSMIkQoJC8wlF04I9smKWELDp4cO8gtHvqFLcS2e7+DeEWp9i8FDcrDclTkqSOwrk177SOwsnaga4ukkf6ZxYz0CXh+GewcXAy97ZS4fsH3pH7FWL6esl/h3MSoAFhYBasIWYmf+ShhPAejMYT9FksBJAAAAAElFTkSuQmCC", pL = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAACXBIWXMAAAsTAAALEwEAmpwYAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAASbSURBVHgBpVZ7TFtVGP+d29uOtkABocDYRjHKWIVsGBloIuIDNcRMTXBE+cMtJJsz6jDRTOOrZMSYZcbFoNOYBeI7C2bO6B8a68DHH8I2XtuYQOSxgVAGLY8+b3uv55zeW9oIE+PXfD3f+XrP7/ed7zv3OwWuI4qipFF9g+oZqqPKirhVXyNVG/6rsEUqwHqldS0isgr4QTo4qKax+dlBF3IsOpg+OwHF6cSrDSeQlaxDQYYBO/PNuCUnSVvqodpECDm2JgFLhwqOznNTOOUcRv1tKSj8qR3Cps34eet9GNZlIBiW4ZdkuJbCbA0O3WuFjRKq4qAkTf8gUCPn7F09E3CencQzaRMg/QNwV+9C22UBPUPzuP2hMij0oy5CgBKNu4O4vzAZdaVpGtzz2k6IlnM69LC0eJsPI2S3Q7+jFMIfl0HKK9A96oUvEKEPE3SHLIjiK5xAYbYiY+RaADVFMRKWrlJKMqYRtNJhT6S/D57yMuhLSiCakzl7TBkSIWh+5Zv4pFJsRiLDFwpjYj6EpgeytLp0UIK7BTX6PcyzuLsWOjqKFFLweSF4vXwkPh/g9/MxFCEIyQTBCKhGbYmqqNOBCAJO9i1q7FXsmIvUeITNwpIEcuhlCE8/BeElOqang8zNQSq/AwMjHniWQ3wHwYiCRCF0BwKksIIbTNPI2/AtZhbqkW25if3YKNCvh5n1lXMU590GvoNLk358sZQHcvUq9PsbkGMG3v5+Bvs+HOYE8Qoso3pLC261fo4bLRdQV/QWZhd+19jvYgQ7mPXR6SEseSWe7/nFEA4c6cLj09tx5bWjyH32SXyX348XnthGjygS1Ci6sD3zS9gzfsT52RocOXcSH/dXawQ2RsDLPja1TDNAYkWV6Fn/uuMKKpsv4vjBNiAUxP5jexOiD9C0jHlseL+/Be/2tvIUjizsxLIUS6ONsPecWQfap+EOEiTJEmRRj6AiJmRar6OFl8OQdHqsKkr0NCmyjEyjgvcezeZutoMxZqQYRSj0FAQMRg4iiEKCRmh0a4LHFdysX4Q1JRacJ0Zgz1ZfdQX/KhW5p+CoeJCCeRL89ozfsK/kOVRuGdJcvYygk1llm5MQfS3XIwRh2QBb6kCC1+XLR5ZxHFUFQc11mtWAFdnNZk1ONwZnaUsgAi/Y9YRF75Wivadq06eIyCK6/qpB8gYzWnZlao8VCPTksH12sNljJWbeHaPNLHE3eiEAUYhGVpzZifqi12E1jWOjeRh1hc10N30QSBgv3hlreG2sFwnqZC9Vj91qoCSmaKri8JN0XuwufBM1tuMwiQvYaBqh+f6Vp2PKezM+oMf0k8HDqNmai/x0XmB+NzCDzxgTjZw53qktNvMct1/wR1st/QpEzMgx/QmL4Rp8YQt+mGjAjD8fF+cqeTC9rntQW2ykatJiYhfPmLp8RSiJgw7s0sG4J4yjvyxh1ifzNp26YY4WVg+flLryPP3Ys/Qc3G7Vx4M7tMlqV2ajSsKTeckloXsyRC+VCGa9kWiBDQK2WUWU5RnigVe9MlcV9dJvU9YvZ5T/8e+iUQVwxwGOqj6HeszXlL8BnOSPQMI9R1QAAAAASUVORK5CYII=", dL = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAACXBIWXMAAAsTAAALEwEAmpwYAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAUOSURBVHgBpVZZbFRVGP7uMp3p3JnpdLpOZ2iLIFTKIItlDZJSqBGj8uCTMQFjIPpkNTwYXigv+gAJaHzzATTGB0W2uKJIWdqkAW3TFqWltdt0mXb2O+ud5XrO6b21Vktq+JM/59x7zvm+8//3Xy7wCFFV1U70BNEbRIfVvyWkvWshWov/K/SQBrBcObcUEfcf4G+ToZWonT6nUikkk0k25vN5tkcURRQUFKCwsBAmk0k/GiZ6kuO4s0sSUHdo4Ein04hEIshmswyQ53mmVCgR2YtMJsOeS0tLGaEmrYTk5L8ItJszdgosyzK7HQUlBzA1OQEl+B3sDhfsrhcYAVVKpigKJElCUVGRDveObgmv+1y/eWjiGsIzfcx8/dZUZf891BT3w57/FhkCuHDNaDRibLgLielvdIIT+jfhNIJzZDicjd/H2K39cFZ7EEjUwOo8AM62l53g836Y/cfY/IF8GCtWNzILQqMXkIvfhd0wgPDsA9g8X6HUtZNuayNWNHIa0zA7+MM2zM6MYlvDRkTjeQjEvo7Jo3DWbsHM72dgleIIRPLYVFeBmOVN+HyD2Gw9BYNIgkEBpr294KTtqGu6qFtSTJZwkM6UpB+RhBErKgV0dk1j7RNWiIXlaO8exKVPBbKjcf6jqWzWhaZ1AaxuJmeVGNScAq8vB4tDRioRgMlcQje1UIKX6WwqmEeg4l1UW3+FFPsSnCrAxI2h0mJDIrVqDpWj7iSDFhrGXC/Moh8ysSqbyyFpOoi6hmNIZ0RowbuHEmykMznlx4WRH9FTtBqvbfgIvO8t3L7H4VmPEe6hPoKtIhqLMSCekCjkuXazCd4pGXZLGmPiKeza2YTe4RDWmzO6i2opAUuoEqkYoiDids8d7HlyF9z246hyfYFkloMrG2WOkfIJFEpmqCQ35GwGNRUFCM0+BZPjINqGtqDtehiSkUOpLUlyY46A16kMogE7arfBVC7h5z/aYHW9Avf2S3C5VyKQ/pP4OPcPNRWlMR5cgXWNn6GwvBk3hzhYSDJ3PowhGFN0WJYHI2xC4jkXyCAwNouOkU5c721DcPou/ANnULp/DHJMxkKRV41DGf8A/snfYLNa0LwyCndlCRpqOHhWOvRt4XkCmuovNhxAVbULMXMCv3hvYXzgJ5DLwpfxQHq+D4KZuEpIwuvuRsK4hkQcj3SoHd5QFp39QQJixqHGKlZaNOmmBDd1AoEXcGTrIVhHk2hQrpKCNICK9a1wWzqQV72477gFX90N2CoG4alsR1n9+8jE+zF4+yh21wtoWmuYiy6S2ZpcoQRndQKDwYCn3R68vu4lVDlEOHecJn5ehbLiLKqdAvZtF7DGncBuEj1lDh4G21bIZScxETNig22aZTZ19YLCd5kn6UzLbBt9MpvNbNO+A2/Auf5rXOy5irX1DfAZTyNIYl0k+VZRIqC7X0Ck+GPMKFU48nka10LHsPGZZnbWZrPp4OcJ9ohei2pZapKQTSQSrPbrVVQX78PvYYh8glDMDGf9e5CK63D8ShqX7wzhuS1V+PBVB3MNvSTmesOmeQKNpIUMZ+icktB+oBPoYzjkY1XWaJq75Uw4heHJMDK8CXs3lLM1TebL9eKG00oG2nRI9OQQI5lL6/1CSxbtZxFDgRdEDu1qrVhKtEYe0pst6VpqPB5Xo9GoGg6HmZKGxN7RtUU/Ai1YjmhN/7y6fLmhPsbfRYsGEFoAOKy9ayVqfxTGXy3C5jdYpk9BAAAAAElFTkSuQmCC", bL = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAACXBIWXMAAAsTAAALEwEAmpwYAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAP2SURBVHgBpVZfaJtVFP/dL0ldk4DpnMaODSOzrdQ+tBNGR2GroE8SM/XNhzIfJpEK63wRn5JMKcgcjiLI8KHDf/hQqNG3ISytjD0o2o5C1dQmrSO1OOxHkzZ/v+96zv2+r01NUio7ycn9d875nXPuPfcG2IeklAHiGPEt4ozcpQ17bow4hP9LrGQbOChNtgISTYxfpCZOHOBxKpVCMplUra7rSiYUCqG/vx+RSATDw8OOKi8mhBDXWgJwOmzjyuD4+Diy2SyCwSA6Ojrg9/uVXKFQwNbWFpaXl9V4enpaAdoUJ5BEA4DtuUJPJBKYmJjA4OAgPB4Pr4GU9rRKmfoMtLCwgGg0ilgs5pi75EQinJxT8wunZT39Cb6Z+hTHQ31kABazDKy+5Y3T0Me0hrk/7yL8chTBrjeddA0QSNYBmKTmvFH8HVvp1+D2dsHl9kFj4xoD8Efuxiv5K3YATFPCrBVQ3f4D3hPX4fY/q7JMAM8J2/sMz+QXwxDGX/D4uuEidzUhd0OwQeSeTduNwiCQ2nYaaD8JH4HY1OGmn3Pcq+V+NHE7bWousubNCbQdghRWzu1Ngny8E9guAps69pwT3ptaRYp8ATVzhviO2911mhfHGCDCvcpHX2vmx8uaxrYeugfz8GHLOCsfPQrX1Wv47OaXePXF1+E1SjDefQf4Z8PacBIz6AibxaKKsPLWFNxXFMBZBlDny5yfh2bvuiiXgfv3IdvbAYJ0f/AhqgMDWP/qC5SfeAb+k49A+HyovnJOOQAyLKpVpc8Axg+zTnghnlMFZa6uWMadJVLA5iaE1wsxNISlpSX89Pc6iuUiNtfWIAZPQ7AD+bySdXTVidN3UhhyO71TpSqyxP+lkCnwK7W9vb3oe7oPF9+4gEkCxuxtHNfz0IuVRp1yTekwMUCW59qpUssrKw3Cv1Elc1X39PSgu7sbgUAAaysZ3Jyawrquoxl10lVik67ZAPV3SgONjIxgcXFRgQzQXqyFIxgdHW0pX3dtzHEdxKkTy6TvYO778zVNs3MpGhWPPPYo2to8yN3LNazxXps2D4U/14LHTrHzlxiAN3mDhaqrUYjSz3RwRFOA/cgCoIrWOtF2IulMP6nRWedEpnjkOnJBHTMpsbdiDwjA7Dl2xZm6UX8XhWBfdsbqdRjJq1ZNHDQK9p4aLfw2XKEoz+xcdnUeqOdPUeW9y7J4yCNLNpf3YV5n2cr7l+tfuLEWYcq4I2HMzcliz1MNQKU65rXyC89LYyZVbzxeb7PZk8no/HJYFT47A+O7byHn70KuZi2hhwPQzpyBK/wStWcd1aZPZqtI+NG/IQ9Ot+QD/LsYsw1s1BnM2HNx+5i3pH8B/i2Z+CHOls4AAAAASUVORK5CYII=", ML = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAACXBIWXMAAAsTAAALEwEAmpwYAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAMySURBVHgBrVbPT1NBEP52W2hpDLYQYgSaQIKJBg8YYw/EhJhwMPGg/4AmHowXDTXxrOUOCSdvhv4DHrwgByNw4cBFYiSYSIRQMCZCW4n9Ae1768x2t++RUkLVaae7b97M983O7Htb4BRRSkVJX5IukG4qT3LGliQdQKvCQQbgrDLbjEicAD5BQ4o0ytfLX4uYXz2gsYBfJVf7xLvbcLUvjNsjnRi9FLGhedJJIcRMUwIuhwHXwDPze9jJVtDTGUQsEkQkJLVfsezi95GD7b0jigHSj+MY7g9ZmBSRTDYQmMw1+9TcT7xezOH6YARtQQlFbvxRx9fKQSgR0fpuGQ9uRvH8To+9+cyuRNia0/CRyzI1t4f0Uh7D8Q66y7elGWveQvtbAv66EGRY3S7i0VidhMt1jUi2pGHk0kQ/75QxPbePC9F2lKoCpYqkEShXQHOhtWhGreRTNraLFDP9LqtLa/o3q3My2W/yReLFN2TyDob7qHFS6pSFzd5UU5mZMiuo/fDcwVqmjNGhEN5MxG2pYkH6uWebmsk5BBxArqQQbvfV2jcyoVJeN2zJDqvQSS1vlDWW2V1JJrjLs/lPBfKWWvcLCjEdrBoyR0OrlbbndWU4XmksQzDGBCM8W9s91OCCnI6ottmCi3CbhKSAelPr5fLRKe6Pi2qVb9OOUy6tomT5B4KmIchkHW+bkFYcVhcBu4k0vjqWOYO7yuwqYXkFDopunYCbrKMON25Bqu8EKDSgaHjGTxdliBxHwZG9CA8twBQNW3oWPO95twjuj+HEZHu/tebrBIFIAv9LRPiKna4ywRLP5Llxz0OhdVHeEPSw3nIPuMk5vqru3Icor9B2Fn/VA5c67gb60Db4wZoHJT04/N5Y5KtA19N6s1pdhI0J9r6yprT/XfSQNC+oD7K7RtIKQ81fQVKCInSZTfps4IkmYKa6oesJBOlZV2L9QOAca2TSYDYcOCnU3qz0YKzD/UEB1V3vbS18hJY8nICIUVIdCT94yl6cdGQmDYl+wlVphY6w90T4BYrJ9DI7gY4bQGTcD3zikdlk2frQT6uzy4L6h38XSQOQ8wFuGlvKbPOm8gcJRgjdrC312QAAAABJRU5ErkJggg==", AL = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAACXBIWXMAAAsTAAALEwEAmpwYAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAMCSURBVHgBrVZLTxNRFP7mdiQUAw4akGhMhugCNFG2gIndmRBNWbLw+Qus7oyLFlcSEnHjwgdi/AHGbkhcFRPAJVVZsDE0oMTEYCFCO+08rufe3hkGbJEKX3JyX+d+37nn3M4tsAs45wZZkixDtsi3kFdzCTIT9UJsUgR7xUQtIa0K+R1qUmSGGGd/fsTsynvZbpTXpU/H4VM4Y5xD34nL6Gnr9beukQ1rmvakpoBIhyKHMzONB95T/Ch8Q2tjG5obDET1JulXdAqwnE2sbCyJXXjYO47TJKiQIpHhvwRU5FLdGh1B+eVzPJq4iENMr3jtPCuvmOUUsbi+gCud13Dj7D1/9a5/Et3PuR+5ILdfjaPh/AV4mg2Ll4lbqxBqIfLKPoABnUYX3n4dl3NKJElr70gkx9QWkRrDnf+CMgnoHcfBikWUvCLK3EJJWmUsTfRpTqyVIdYKaGvqwJuFx/hEtVL1mxAdpqK/JXN787o8UoRCZQXKM5FZkrSwRa7M8jbVekEKRnQdGtOkiEJMXHPBNyhG7uw0sLwkTgyWz4NFG9HV0udqWpCRoGgc21NFuYLjufxYpB2eC3z/ndNPNou4kRACcXlrJicpcoqeGNmvVWitrbjdeT8iSWlO5DvcBjVQred5cF0XjuMg6kX9EC4JgR7pRPlnfh1LJWirq0HUYaJwuxNCmDEG27b9KVNXBaH0LMvbEtxIcqpFVIvct9A+kwUO0qnKT7sO+AJhCIGc7LUcwUFB13W/uxYIRPr7cVAICWRF7wNZjA0MwH3xbJvj0NCQgzoh8j82Nsa6u7tF8Gn/my9hD17lTvtR7pFxMgRfnL2baZrhz7jpq2bEyJuZ5jYRu0rkfwTm5uaCNyJ8LFO9UtwdHQlOUS95MpkMv3gmduQu4a8KEbdOgRC5QAI1CpQKXOY/y3z+izgWi/FMJhMmT4U5qz2ZQj0J9QufmppCOp1GNptFLpeTPoZhgIgRj8dlq1D1yax1ElGT13zvyPB9/LtIKIJ8iHBRzYmUGrtx/AGKRqt4j4yNAwAAAABJRU5ErkJggg==", uL = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAACXBIWXMAAAsTAAALEwEAmpwYAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAR/SURBVHgBrVZ9TFVlGP+959x7uYDARRKvfdxsU1CzbII44A9wtRwsw+mWzWzSZv2Rq1gtV84JjC1oOYXcqhUIytba+pgM26JIcCVJyXRT3EoSCLoxcrt83e9zztvzvvccvIIaLZ/td877+Xs+3/Me4A7COXcRKgldhEF+Q3zmWAVhOf6riE0mwUKl+XaK2C3IX6NXFcEl+mf6vAiFgsj7+SSU1hOxRbvLcS73aTidiSjKudfaOkGoZozVx/PZ5pBXmuSSuO5YH4bHZvDy9mzkL3XDkZcnbYouSsGQdxqHWn8Cp5GvDpXg0awMYdAR4kgjJdUWp3ILy1Hz8S94Zl8H7HYVqx5ajNQUJ2yKAiUQkLAxhkSng0iXYKUnHaWvnkJt03mLqkrk5iYFZvwk+cz4OErz78HmAg8iGhAIGdB0WqhpUIPBGKit6Rx+muPk0RMbH8C6FcmY8Xot3korJ5YHIjQu/fIl6E8+jpW/X8TRNzdg2yYPAmFdkgkFjMhZMACmRaXSQNhAScF9aHgjlxeyceilm6H1/Agzf80yB6amctGZHLwGB70dDUfA+y9j1/O7yboCfvFXH2MTGhQi5xR0Fo3i/qVJ/HDFerYm0wal8ROmtLchQpMzwVCsOoBiUebCg62iN+ydRHRjPo9+9jn0LWVQRkfgONaIZWqYlRRQpUSiZHJAeoFIBJty3OzhJSrsRxtgu/ob9G3bEWk7Bd+KNbju81uhqhBVVCZaGY4owtN+piQlQdvxLLiqgqohtmxqCsw/QwqCImPU9ssxIdreV0QOYeg6VEKqHoLDSKCZZDFdxMSpFDELbd0C1nMWKpEKtxS7HVTo1FAga1E+WOzkcI642gYoLAblxRAKqc/XPoLE02fE7JDNTAgwMkJ7mdwv7aY4S5AnsDxh7GZiAcOQb2ufQk99ctJatXz2oDFz/7yjTW4vVFgcLBHRGJKt1DTcDZFeeDxWd0LkoIsaxQGfD1FKpCpOLJtrB2D/6AMJIdrOXYjse2seuUHhErAtWoSk9HQx1C1CJLJRHGQJCKlUBUYYtuYmqL3nwBdnIPJOHXhaGnhCwiyRaPPUVLAwVcyB/WCjozCyshHe8xIMtxvXgypMH9pEiOTXL8OVhPThASSWPQX7+/XgWVmI1L6LgWnF+Pqsl8+19tOOYVwdjxqRtw/AWLUattbjcO7cAdvp7+FZlmItO0nRYOIz2y16iYYOTi4Gm1oQqqpBzZcjfEP5t8qlgYl5uf9jzI/c8g6ltn0M0/sP8lBjsyzk5Oxsa0kLcQ9ZVfQC4QIrKHQZ33yHC3+G+N4XO9E/ODmPeK7UnbhC3gyyL2oL+eofepg9WR4weTeIhvzYCU3WQEJmJnqvTKH/mo+ZJ+xfhEtv2nv+Zs4YuZBqk/PGfWDeRFLJ68+tZedby/CgO1kS8DhFfPbN5bNovRudH5bg4J7H4snrb29P7CL3WZdtd99fvLN3hIdbj3M9Zx03COHD78kxMTfnR6ACCxHz0m/hC5cu/j/+LipMAl8c4aA5Jq5H1504/gHdu6pacKBOxAAAAABJRU5ErkJggg==", zL = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAACXBIWXMAAAsTAAALEwEAmpwYAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAM1SURBVHgBrVZLTxRBEP66Z3bCCrgEH/g4iKCIMRJJPPi4ED148aAx8WAg0cQYb4KJZxZ/AcarCQSORhNuegIvQDzIw2gMiUIEURDcBRYWmNkZq3q7YQKsWZBKKtVd3fV91dW10wv8Q4IgKCFtJu0mHQ3WJaF9jaTl2K5wkAbIV9pyEYktwB+RiZOW8Hzo1yoGJ5fRN76KxVUfAfkOFVmoLI3g8rEC1BxyTGiStEUI0ZqTgMuhwRVw31gKH6czOL3fQtKVqIhJTKSgiNJugJ8LHsfg6dVSVJTaBiZOJC2bCHTmir1jYAFdX9KoPezACyQKbIHljEBEAq6/FsFBWCbHaMLF9aoCNNQWm8UmcxJhak5mgMvSMZjC++9pHIk5iNgSq76ALQVSrkBZITC9aEiyBHwCtiMzK7hZHSWSIlOuWiIZk5qRS1Py9Y+H15+WACuCmWWJJU9iluw8lWeRxj9SWbviMzHZQFtK4kBRBJ3DSxim0ur7a+OB1Nnf5cmz3iRKohJldIl7HEnlESh0uDQCHmXtWMBKBgTKVpCuk1mWBSEtdA4tmTLVcZvzzdzg2fTIGKrfvPKkEIiVxhCJRKiAG5qMpiJQxcGG5kDGc1EzOwc/8PH71B3rQPkRDm4U3O/MNjc3h3Q6Ddu2VTasa7hExCBha4CN9X0fmUwGnuchGo0iFovxUg/fwTke8YKUUqkBCme40YbXw4lwvOu6xlVu6wtRGfDixqPnKwxuNBRXLsMbwnYnYgjCwgRjaqBLsxvC96gluUbgOA52S0IEgzx6R1q3kpj0X7Y+8KXIdud2z8JV59L7pLcePreLi8+yu4vblC85wbMnfbcxnOjPtv8OGJigrOAoOq70Ge9x+l0J/m708Kyhqin7fcH2JdBHaD7/wrjaw9+ie6TJmn0X0XCySZ8X+YveW0+xlXvP8FC9DTxQBMxkHPVVjxVJkA+J3sN7GbyBYrW0aMxND04c2S8rvs1/RvzDfUylJ3JeBwOrU59oInshDB43k62ezEZNon7hw7P96J1+qwin0uNqT6EdU4CXDl4LA2/5ZObITD367UH+0h38x7+LRg2QCAGOal9ct3lO+QtuMhO18TT89AAAAABJRU5ErkJggg==", hL = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAACXBIWXMAAAsTAAALEwEAmpwYAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAOtSURBVHgBpVa/byNFFP5mf3gd20nsJAYZdBfTnI5Dp9wB7Ykg/gCQ6JEoqDE1hZ2GhgIaKoo7UVHCHwBJh4QEF0ruCHHBRbYSYq/t3ayz3h3eG8/4NgZyju5Zb2dmZ+b73q+dMXCJSCnLpE3SXdJD+VR6+l2DtI6rCm/SAIvK/YWJaOHH2kIlcbQrg15D+p07sn9Ul0+eHMhOpyNPT0/l2dmZnPOqMY8n5sCb1LS4PxnvIRp+Bjlpw7JfhLArsEQJofwCaWrzWsRxrPZtbGwgl8sZmJYQYscMrKzlBjwa7CA4fZ8AXbj5W3DcNTi2BcsKSC3Ytg3HcZDP5xXwyckJfN+fEWQ9ESbm1DwkLTN4HH4FN7cFQfSCVlhiupKbQH5LT1d5wJqmqWrH4zGKxSJWV1cZsk96lzxpGw84NOUk3sf5qEUW18jSELZW7lsiILJQkdFGpcYbbl3XxXA4VESMRXpfeaCtP+TBqPsKWdmG623RJmgw4yeBQmKU/kDPWbxxHo1oTGR2ToFz6KrVqpmuOPR4j3vJ+R7Fqg3b4cT8TeBLClzMykBqJoms+N1fMElSVK/fU95w4pnI8zyebjDBu6pqou8pHFBqiWOCWtcJuoCn4s0TkziCf/IYf/3+I4WHxomDwtotlfgoigzBW5yDO2rjZF+FhRMLMSaMYw4aaag10O2U5M/Hv8I//gMv33gHa7U3kPdc+AffqHyY8iWpOzohtOtwWjUm5KBFkhfayFTztHroV1zdxDiqIoyOEB39DK+8CW+5rpKvvMwQAHgKLATmJNF6UWq1Glka4bevP8WAgnDvow9UDpIkyRKoKuIKqo97d8nOfZWDi8m9KIO0S/Z7ePTT50iiY6yEryMuvYSuO0ZpuYIbN7cUUaVS4eV99r3NPTu3jatIrriJZe9NFK+/hgJ9XOuTHF6orqs5LlUt++xBizrNNN5DMnyb2BfzwEh48IhKfILSzVdVaDhEKysr5mz6hD34knuWuw3hbENKXElkSDVfLE37tJmrKHPwfWdR1vnc2OORvdRUBEYXkeLt23CvXZsllq3X8iB7Fn1I2hfkhZVvXtkLI/yR6fiz0erIVgTMNHux1IJgkvTZnpgTlZXBC4WCmdrRmP/a0JrdT5OHMhnUZdInLn+qcgDZ73Vkr9dTyrfaYDCQ9OVmb7YWLhN9kc+uzDTelWnYkOloWxH6/a6ky0UGQTAP/J9X5v+R8KX/QC4uu/I5/l00NEAvA3io33FIy5dh/AMtU6MJ1TyzJQAAAABJRU5ErkJggg==", OL = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAACXBIWXMAAAsTAAALEwEAmpwYAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAPMSURBVHgBpVZNbFRVFP7unfdmOm9qO0XaYQy1RWZhrFEUkmI14kJNJFHREDeaGBO26DTRsHRYIgkYWbhRoYkrQkzYYOIGMVY2En5LICEpNCWloaXTdv76Zt67nHPffa8zoYU2nOb0nXvvOd93zrn3vTvAY0QplSb9nvQs6bhaljkzlyftx3qFgwzAWuX4akRiBfBv6FEgTfO4sXgebvEvNErnobx57SPjvYglBxBPvw/rmTfC0CLpQSHEj6sScDsMuAau3TsG5U5C2t0QVhoy5mg/3ytD+WX4tQmKAVJbf0HMGQhhCkRy8BECk7lmr00dhXv/N1jtr0NKWzuJ1lToT2hw36ugUbmJ+MYv0JYdDh2Gw0pE2HN6XOS2MHh9ZgR26iVIQhWCoBhdLGejgiBNoElI66XLsLv3hSTcrtco7rY0MdyatFcdgzt9BFYiA4kaEVRJa4GNChFUiayq7WDd+NC81ZZFnWK5tWb/jusKTPbjPChdH4JsTMLi7Ila6qxN6uahdP4iqsAUA8+nfStfB5ydcHInw1Z1WfRvD1tTU2P+uQsdfkwOIOn0CNuOG9AIubVHQumnMmQNr64qZQHPW8CgfcPa0vcie+aZ4GO2Dp+qyGOnPpcQEom4jQ0dCd17zo634L0dPbg5UUJbXKI7ncDo1dmwEM1YXHRRXXLJ9LG/uIAj+3Uqu3gPtrF15dYDhL1YqvuYmXdRqjYwvDeHvoyD2fklHfGAgOZKLvqzDvJ7t6Jcq2vfqutF8f9cnA5b1M97oHPIffYH7kxXwRVwys/3pMhU+iQtVjzMl+tolg7H0tVYtFkyRps4VQ7KoQr6MkncOvmp9pNRhD6KYZMFss8msHtwEwVWKMMl1Bt+i84uuLg7U8O7O7qRbrfRKssvDRPcZqOzPR4t5janqJ8+fj49jifJr2fu6IPwwnOpKL4/2x4uFyOCXdsyZk5hU1cbMl0JrFVSyRg2b0xG41dyXaF5iU/ROdJ3vh50sP2nEY8Z5d1g9UusUSaDxz5Seh3w9s6jEkGfTvMm81s3xw6NTz6C+G8U4ep6RBlwv7cX9v+XwuktdEgEfzf+5lHsuwPaMdT1ErBaI7+HUyeav0VfkRbF0JuQhmS94Czi2wMQAy+zqe+GVqfg+tPiHT6kvJ4NyjeqHqO8zr7eD4eab7j8ypkoVYhcrl1R3vZXHyHym1QD7/lQ+aP/NoMXmjFXujKZXX++9Zg2HX+eAcauQk1MBAGdncDQW8AHu8FtNbLilblaJXzpn1Brl7PqKX5d5A3AXBPguJkrmGO+qjwEQ2RwVFODJksAAAAASUVORK5CYII=", fL = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAACXBIWXMAAAsTAAALEwEAmpwYAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAOeSURBVHgBpVZdb0xdFH72mZlGW6+2b956fYSQSEhaQSoiKhFuRBNfvwA34ooSIq6My2oidSuor8SFC19JXSI6roSixAUp7QWJMFM62qNzzvasffY+M2NmhFjNmv1x1nqetddee+8CvxCtdTP1OPUudUQXJWvnuqmL8KciThbgd6W/FpGqAn6ATZraLONCZhDf7wyYVo+PGxtv4UIk2pejrqsLyXXrnWuOekIp1VeTQNJhwQ3gVN8p6LExeK2tUC3N8BoajUuYn4DO5xGOvqMP0HjpMhJtyx1MmiQnKghs5IZ9qrcH/tkzSHWshpdKQRGFTjBoxkVDm18g/DaJwquXqNu1BzOOHHVwB91KlMs5myeSFgGfPn8OqfZ281ERxVOl0SgLH/FJPyT59NATpPbucySSrlUkeesI+tnsDoafI79pA1JtbUg0zoRnQZVDm8uZBo7eBJxUxVXwW/D1C1fyCvU3brl9uUeCjcpGPyIzEx0rocZGSdDOqFVM4BKpNiWhZ7Jzs2DTFH0QkoAkhRfDQGcnGq7fdqlqSfJnh/SCh4MAwRNSJdksvPoZxegdypp6qH84c/VbnDJtDTz/uwmokMmgQCy7im4h2G6qZmDAGJjIP39i1bSUlBh7s9ks8SKm+T7wOjR9Zfdd5XLGNyHpIpYl2CAEK02AzL+JXga+DzWP+7R3FjAnEXHUaSmZqH+c4Hm7vvEQqjcH9cE3vkIbPsy4yBbJnDlQYL0r82fT8niKFf2RkX4BWieBJo71ZKQNfjQ39hU4RJthP/bzDOl4GUGcTyn1spP3gVEfzgPnGbnmxurpovZzbv8E8ClEGQbKMYTgrenNakJNeR9Wzk1q2ONQJmYVvEqs5GKCBMurpmxORu0DruLadNRfm6xprljmVoaE4L70PF5cVeV/xrSMG93HvB/jPpz2I5WK+s+rMJdFJYtYN+WgySZnZVTYuQ2KFRAfMJEVBM/R7d1PaZpDi6X8dr8QA5sKWrAAqUdDzmoxS1fJvXFPRgneI+74x+l9GlSCi0gBWHCU+CQvXnFTF+QucmvcQ82pdZ3wLMmfiLP3Dh91+TdvQ7lR9PwZCXp7dDD7Xx1a1b9Q+S62wcme0heuu3okWqdjk+FnOuhYUUEUlqgB3rFVh5nBUvB0KWa1J1PY5WUzJ1zLseeTiRfPoUdHI4cmnhm5a7Z0QdJqpeqTWWsl8uhf0L8vd/Vf/HfRbQGyJYAjdi5ty7ym/AA6pls/2DukmwAAAABJRU5ErkJggg==", gL = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAACXBIWXMAAAsTAAALEwEAmpwYAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAALHSURBVHgBrVZBTxNBFP52u9tYMGF7gCMuVwoJBk9iYvXIBf+BejGesB6Mx5ajaWI4GxWjP0CriR63JnpuE4Fwa4UTJ0CpJXR3x/eGme1EW8SW176+2Z153zfvm9mdAqeYEMIjL5IH5A3RtT11r0Du43+NkxTAWW2tH5HVA/wBhRK5x9fh1y84/vRRRnFwIMfYk5NIzcwivbgI5+o1nbpPvmJZ1mpfApZDgUvAo9WnEDs7sMfHYWU92COjMiVuHUK0Woi3v1MOMPr6DVK5WQ1TIpKVvwjUzCX7UfkJjp8/gzN/BbbrwiIUSoJEkykCQv4C8a82wq1NpG/fxYVHjzXcQ12JpTWnUGNZGLzz8gXcmRnYPIBQLMucjaXgT/i4HdOATr0G9959TcJyXSaSpiZYo3AnWv+G1s3rcHM5pEYvnhB0Z9FlUu2kCrqOfv6gSraQefder0uVCG5YavYNvnM4Pwd7ZxtOjmZPAJoARgVCJKLSx1ItIKKOcGMdWFjAyNsPelDWoZ9bclE3NxDR7sAlH/HEBEDaa1RLSm/uB6G/J4vOMoUdxNksQiJyGw24U1PcWeAKAmrkD2gLttttOI6DVColPdkJLIdaaB2VtEmM4xhRFCEMQ2QyGYyNjUmZWIU5WQF12LYtXQMl8zWAdDT7zYlwfqfT0bd8lkg+UDwD7jStF0g/Y3DtRp5vmwPMOIhpAtOYoCkbSprzMF5HZfsJQTqdxnmZQVDn1mfy/O7uLpaXl4eugvUvl8uYnp7my4p+50vL5/P64RzYfd83X+O+Zg34KgiCoQlqtVpyRphl+eqUEsVicWBwzjVOPB9/aFfQvYOQGOBsBfRZoJIewaWynv8C5nVjaQ0rmZi9jkxmL0I94dVqFZVKBfV6Hc1mU47xPA8EjKWlJRmV9Twy+1XCa/JKnN0CMcS/i4IC2DMAG+oeS+qdhvEbO0F4AtTecrwAAAAASUVORK5CYII=", CL = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAACXBIWXMAAAsTAAALEwEAmpwYAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAOESURBVHgBrVZNaFNLFP5ubtrXvoaXxD58ryI1VfC/NSKCYLVXoS5UiBsRdGM3giuruOhGkyDoRkQE/0DQlStFBd16K4ooCrb+okITxZ+KtE1ta/68dzxn7kyaapRaPcnJnDmZ+b45Z07uCfATEUKESOOkNmlKjMuQ8nWSRvCrwpsUwGTl7I+IjArgu2hIkIZ43p26hSvPrsoxkxuWayKhRkQbmhFbsBFWU6vemiFNGoZx9IcEnA4FLgEP3jiMdOY1/gtMR7g2hEB1HeoKAh/wGWOFMfQNpuW+S1vPS0IlCSJJfkegTi7Zk9cP4did01jRuBxVZhUEvWgTTFdgby6Pf4sO7vn9yJJvTmEEJ/pfYGe0A2s27ddwu3Ukhs45DQ84LUn7EI7fPYMlDYsBn1EhTqBtrICWvIN5cFFXDbwbAV49vY/Q5j1oX79Pp2spkaQ1wVkatvf2PxbREyuNlv8XI1AT0PQ0Gl4U0sEWpF1XdBH7VMA/QuCUP4fbg89hd1zT99JNBGsMdfoUe5qONCM9/BpLZjSPn5pHQ0MrQjE+W1b4gpeGiU8UbW//I1izWiWJkrCfPjZJuvQtCc5pGcgOora6dkJ66CDyHjzbI+LpTU6jKCKXz8uDMA4XiIqikwlibHEpwucBfswOoN4Iyw1QCeHxpG1i0YA3f++62DI8WiLe0TKE9tk5OFQIM59cpHRIgjYmiLLVQ+FJIHrnnbwkqfXXUEC+UgT1gybm9BsyhCoiGBsYkf5sNotAYxFzidsh9fV16xRFmED+oFKcnrJqKTpFqabPpMC8L5ycCXxWafriYHR0FC4RySjGrwtuLjOBYEKuSyuVOK4DR9kuVQ2KisBx4TgOyoXBDTGxqjn+tLzumiD+hDC4OS2ip5kSgTVrFf6UVDVEtdnDBDfYis3fgN8W4dXcXwtj2nOFCeQzw4q0SpUrBKYkvM0XjqC6ydKuyz6qYb7ybp7FV3dhqqLPFdx2SbvO8bPIpyYdpBmOQJJMJQpa//faOPxe/mVvYEMSMJN2JNq6EG/rKm2arMzcGCeChJ4mFeY3hxAioXvgg/cPReRYs8CBYEntpWHhTp8mta8+JOO0LEvYtl3ePhPlmJVaZicN3Nm8lvmKWubza+j58Aj7L7yB9ZacwSAyK1ait30diEBvrdgyK4pq+ufE5MUWv/HvolMBDJUBppSPUxr6GcZXPmEoU3BtZ+cAAAAASUVORK5CYII=", mL = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAACXBIWXMAAAsTAAALEwEAmpwYAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAARkSURBVHgBpVZ7TJtVFP99LaVWHisbaBkTcCGAgoRuY8qWrJ2Zz2TWQGaiiYMlsImJDra4zCha5v6ZmEiCjyVqWHzMxBAjPrIoKKsYozKgyhjbYKEyVraO9f3+2n7e+/HdrpGOddlJTs79bs/9/e4959xzCywjgiCoib5JdJDojHBdHNJcK9Fi3KrQRRJAqtJzIyIuCfheYoxE1fR7eMIGzUoFVvR+BmGgH5u5Z6C5OxtVpatg0K+Fbv1qttRJtIPjuK4bEtBwSOAwjVjR2z+Fhlo17hvqA5e/Gr+WbsXxnyzw+Hj4AmHMXHJDIL5fv/OESCiJkZB0LCGQdi6yD5vnMHDqEvbmzYMbM8PxyHb0nOUwMrkAjqO+bLEAfzCC8ekF7Km7H+27axhcGzsJx2JOzBgNS7DzCPiKSiiqqsCdOwduQw1OzfjhDURE8K4vJxGNxa6ziGcQMHLGhpefrUR7cw0Ll5aQWBhBDzGN0dPj8D2sg6KiAvKMTMikHUhOoAyPaloQ4uQJsRXoeni8QUxcuIaBo0+xvJwkBFvTpN030plAw/OQE0uXy/z+OAFDo8ZHQhJOyNyG8pVSiGPIvlOGE0PTjEBPyzyNDJ6mX9FoFNF9r0DZ9hKw/wD4zGzIHQ4ItbWYtLjhcIdEIO8nU4jEovHdu/xHIaRfwV92HmtDLnT/5sSuLZ+jbN1m6tBKN2mgo76TFvx5RQYZCcNZawBfefKhsFmR/mIzcpUCOr+3orH7DFykgmhiFzUKZzQMBQK45nNg20OP4171Gvx+up8dUEcJqunog95JsfzohN0VQsuRP1A/XYaLr3WiYH8TfiiZwMGGKvB8lJRoJK4Rtxuq0AI0wh3QFm+CXlMC89wwIyimeOKFsli9JIdcPHl8JIbvhi6i9vUxvLfnQ3AkhC+8vxshUv909zQXXj+POfDIUkSQEZEjt2gNbDE/Qk5HnCANCbLzxxhUhYeBb3nyJRPnbI4g9r07jENZJHGRRnj4xbJkwofD+GVWQH1JGII/CHuaDJVKefx3imKhgxWZSoTCJKZyFZy8DP8XpyecdL4wyKMsI4YvXKtQUFiEQmUeiu8qiC+LE+jW57PCSFnUWenIVuQhJ1cBOQmpSqWCXrsJsZwK5mKmBCY6MuiKcKsMb9eN4rkHfLB6SSlfncWDBw149fhhFFc/xlz6KEEXO4FunSZlkuwMBS5cJfWhyEFb2Xl8+uQO3JMeRPeOOujLNzK3b1irGCRGbxqdx7aWE+TKxu/wTSUnSwlt7ig2asZRU5qG7Ts7wWWU05+OkarctaTZHfp4DG99ZBb7Tqok4olJP2pvrsYbTVo6EW92YlnQATFiD6cO1HGxW6aSDwauZeBUOiTMJQ+OkRj66ODv83bUH/gZ/172LQtP89beVJ2QPxHcyD6SPZmtEol4w02jl9FnmsU/U3ZY5r2ijzozHVsIoEFXmAic9MlMfujFR/+YkLoMCrfx76JVAnAkAM5Ic0ba85fD+A+CLnN0K/RGhQAAAABJRU5ErkJggg==", LL = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAACXBIWXMAAAsTAAALEwEAmpwYAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAR8SURBVHgBpVZrTFxFFP7u3V0WwlKWIslCyyMULBEsbCutqGGxUVurdlFjLCGNRWubauThK9GEurRNjGlM+GGURg01MRFFraQmYizCphqSUh7lVZ5hobA8Aixln90H15nLne2SBdymJzmZuZMz33fmnDNnLrCJCIKgJvoJ0WaiY8JdsUhr5URTcK9CN0kAoUrtRkTcOuBlZDAQVdPvzoE5aLaGIbLuOziMV/GEuxApCVHY9WAs9AWp0O1JYFuXiFZxHFe9IQENhwQOY7sZl1tGcfRRNdL+/hVITERTcj7qm8Zhc3hgd7oxNrUMgdhe+vxZ4eH0WIZlICRVQQSS5yJ7W+80Wtpu4W31JLjBAcwXHEJttxddQ4vgOGrLNgtwuLzoGZnHyZceQuWJXAZXwU7CsZjTaNCwuM5/Bo92NxQ7M8ANDYLbuw9tIzbYCdAKQa7+oZ95xFwTtb1/DqVFWah8M5eFS0tITIyglgzHfL09sO/XQZGZCVmkCrzkgWQENy/HM5q3CJwQEFuB7ofV5kLf6AKu1BxmeWkhBE/KJe+P0RXna0chI6OMbOcdDj8BQ+M5uXgSrE0cCvOUiOOH0Bozh5//uskICmiZy8mkkH75fD74Siug/KAC3MeV8CiUkFksEPLySOwtYqzd3hU4a0cgBHgfG+lAatQ1dLT9i+yEaNT3ZYsFIpGUUyf1dFb35wgGrXLISBZvml1ocCUgbHYKivfKsC2Kx5lfbuHEVwOwOb0i2ar6IFcp8FHvVdQQJ95v7MTUggkNLSbmgY4S5NBZ7eVhLNu9YjQWl+/g9XOtKJnZhckKA7a/+waatGOoKMqEkwDbnasql/HYMb2IYmsuPk1/AaXpzyFfWED7dT9BCiUQL5TJbLubUCIeEo7vG0dRcLYHX5y6AN5ux8lvS8UcUO/pKJdxeHr8AmLMTZjrr4PG0YJ9s7/jAd7pJ+DoPaezNH0dZhecCL/jAsLDseTh1+RSHRUGuFxr1pPjVbi08xr6rJPwXZ9ATl4WZhetqFHp8dOXr4g2NMkmyhStUmJ8xgGXLIK4H9RBsGR10zoKWv8x4yBkQjeyXj2N+uEriNmShohe//4lXiIgWY9nhRGyRHiciFwZx9S8CfO37SSsU/B6zTiQEcFMuiiBkc70umTcC0Px4yqcS2nEXGsvMpIO43x9GeK3ZqG//zb2JyuZWQMlqGYn0O3WhExSjH/AHYyBIm4eThuP1LjnccMUjZzt4dA8tpeZ/cZaRTMZCowd03jq1B+klPx3eEPJzw6H0mdGyYthGJsYQGJSGjRbvMjVHoFKtY2aXCStoiSo2Z35phNnv+6C2Db/h4TJjngZYlUuvFO0B0cOaemSv9mJZUEnZBB7+OnjWtIRc6RuGUo+BIyaPTige4SBU6mSMIMeHAMZ6KODG6T3v/xhEyld+6bwNG+Vx3MC8ieCG9jHek9muUQi3nBjxwwajBPoHl6Eadom2qhVYcgngHpdUiDwuk/m+odeffQvCqFLs3AffxflEoAlAHBMWjPQnr8Zxn+ZTYAC+NOunAAAAABJRU5ErkJggg==", vL = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAACXBIWXMAAAsTAAALEwEAmpwYAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAN+SURBVHgBpVZJTJNBFP7+ioBYtLiDUdG4JMYQwHAiWjRePCBGvZi4xLjdFC/GS7XoxYMHT8aoCZAYiQdNUA4kalgSuZiymYiytTURiGwFy1K6jO/NP1PKmgKveZ3/n775vjffzLwpsIgJIWzkD8hryN1i2oZVXzF5JpZqPEgBxGulCxEZ84DfpsZJbuP3OlcPKmu7UU+t79+UjMnMSEXW/o0oKtgD++EMPdRHXmIYxtMFCVgOBS6BH5e64O31Y8uGFKStS4J1zWoZ5x8PYmxiCu4/oxD0/v7JSUmozEkkJXMIVOaS3dszjMLb1TiQuQFhYYYZBscg2pq9AuOTIXzvHMDNMwfhuJGn4e7omRhac2qaWJbyj204kbcV3T3jeFrRRpmGVJQxW0v9IN314y9unT8Ex/U8LVcOkXgSVBRLY2tpH4Tj2Tf4L2djZDyEfl9AAqemrMYoyWIoEkGfaTrBCWL7FisevnDhaO52Xhdev1LyY4bK3s2he0+9gbfPj6x9m0kKQ8Kkrk3EueO7UFbVFQWfOxMh29aOfthz0/H5eaH+NY1ncFovKoMDFgyNTiE5KQGFR3fi6qn9yNicgoN70uB80YwB32QMhYiSBIIhObbO1Sux1O4qttBXET9V1nlNnSlzlmZsMoy3nzzwjU3BShKVVXXKBPy0JrywpoflGnHsgI+2sGGR4ytrPToDOxNk81Nrx6DMgD0QjNCAAIEFUVHtRu6FD9iUlizBJghYgsY4x04EwtB7q76pVxNkskTyQHl6/DM2SjAUQdAfwfN3P2GxGPjlHZkpPXtEICLE9IZSCugDqQlizJjVAmECYY/fjBnjWRMPP6y3JqnfDazUuJQo80UJ7IfTza6lJLuAZe2Llo1mlqiOvODexWRcyn8i9VabYUkmzKMg5dy197XuruSDxos8zG8T/bRjgw1EsjwCXiqBHUhJb9TduxPoxPqIpJZnkbjuLr423JIEy2Hgwngkv1z3lMXWoivkTauS8m21Xa/w6GWzIoiXxNTHcT0b9oJD3CHvBn7gXLnueHTH/Ws5MjBaY+IGz5FjlZUozDkXjhNmZUVL+xDO3v1C5WFsUXh77jY4rmXLNgbcqV/muzKLFYl5ZTb2UZ36TaVkCJ5ev4yxWROpLG9DkX1nLPC8V+b8kzYv/TIRv9WIFfy7KFYAwzGAbtXnVNt8QfsPpAY0myr8p50AAAAASUVORK5CYII=", qL = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAACXBIWXMAAAsTAAALEwEAmpwYAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAObSURBVHgBpVY9iBRJFP6qerp7lhvPvcPg9m64W9RjPY41EqMVRUyEFcVIMFAjQycx3jUzUTcSRERDEQMRA8HARRQDFQXxB1QcV3QN1JnZ1enp6e4q36upGntmWFn1MY/uqlfv+16996p6gG+I1nqYdIr0OulL/VVqdq5COorvFXayAMuVs8smooWHbIRGkiTRtSvXdHXTbv1i/Tajc5P7dO3SVWPr21WlH6/QBz5Fj2l+T9MUrVaL55A1FhGWRyDG1ph16nMTWX0RURQZe7E4pIPAHybTCRqvFEIcGSDgyB04A8dxDN/3IaWEHhoCyhpypEFWATUv4Q+Fxq6UovWRUCojoiK7TxNWg0hmeCBdzvPgtHWEYQjP8wyBTDPoNzGKW+soTn4E3rYhsszYC4UCgiAwPuxrZcrVRLoJ0uGMnNrttnFiYAYwJDQv3pPzhxiiSc/3MZGqDrlV9mESTi1jkZ41KbJM+3nAOe2CWkfaqokWrRjIIioAvTdDiCTt2Kya2lC6XIAkW7jNeQe7eMTRswyAszOB6c+RIRCKCt+MuAt61rgdM4ndBUuFqXaa6Gdvo/38FTJPImWSYtiNLLn30II2iURBR0Wk9x8hOn+ZCwjN0UctMilSqtfqUazYNsGumwX3L+dsfscBJLfuIvyXon3mQ1CHCCKBFLbNgNJMHfIPhYU9vyPX29BUXMUpK6dov6YUj4/hrxsX2Vot2IIgm3tjKh5siREcXoTQFpi2DiENgbc65S5F6bjrFkU/bUhQUohnQySnf4FuLDj60e45ELmn9z9F08aAiJLu1GlNMmDTQS+OEyaoMpNc+SvU63lkL3wsbF8FvSAHQEqnavD+zNDYsQqDRjqI6zrE/t9lN1vvEpQO7kX71h14lI7CZG8c6ZNnVNTHvZFRngvj63p3QamSaxWCiY1u6gFP8tHW1Kaaetg8qdV6rspPJ87od7+N608Xyjq6OWLeF4+e7FnDPg4j51/hPHTuDNvTHMWPivN17U1ySdKgTi+zPOKDwoucfi84qz3FLOcIu+oqeYC07k7kUuBCLg3uIrfRc9DmypbWUO1O5FKV34n3T4rsKV1o1OveWDIQucuAlSMW8+v3gO9vvpzodYpJWPhesTBIXxWQHluRD7trz194FnzGDXq+aGTgjuLtmevbpcv7by38iQ1Qc2876+jMcIv2Adf7wZcU+9E/p5cv1/VP/LuoWIBaDvClnZu2aV1SvgBIocKrNuRZrwAAAABJRU5ErkJggg==", yL = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAACXBIWXMAAAsTAAALEwEAmpwYAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAPzSURBVHgBpVZbaFxVFF1z55FMM2PHOmlFSYlBlCoIgUpaReqHFS1IFMVXldaPIlix44dCPiQp9qOCj6pVWxBT86GkItgKoh+SIn5IUVMSM7U1jzGJY52kmfd05s6997j3yT23dybpJKULNue19177cc7cARpACBEh6SUZIpkSl5G292Ik7bhasJHtYLXoXzURKe6zI5SoVquiWCyKbDYrMpmMlFwuJ/f4rC6rWL0/T53zXhr6eG4YBsrlMu9B0zR4PB4IS4fmbZJ7LJZlybGlpQVer1e56SPd/UsIOHIaDvGcHeu6Dp/PJ53DTEEvnCOlCnTDC6/HAvy3IHhdhyThYAKBAJqbm5W7V4nkkENg12+YJMLOKXX4/X4ncpb02BPwCt4PQCenazd9XZOJsrFJMiSdZJfQbEYuTcS4VBu5W8YHb0A+XkVmNI/UidCSc7ZhEj3NvhEh6eeJZke/mxdn7nkEydcPwJq7WGPMGbRUspifMFCKmygXsk5mfM71t+YXMPPKGzi/e58q0/18zX00eZRXhdGz0Gf+QW4mienxBKLPPY7orielE0YgmAXCJXioTMFy2CEwyxVcHPgKKZLSn+MwIVAYOYvQXZvYLMYl6uaZ/7YOtL+3H01tN6FMiv+9cwR/PbwTpZG4JLAiD8AwK9D0SwiUtsq94ukzmHzqRaQ+/AzG37PS9tbBo/Df3qGy2Obh+6uaK1MWQOrdo5j/+Bg0uhnQPLj+sR2IPNONRE8vtLVhtPW8hvSnXyD7/Sm+IRSdH617d2HdC0/D8vtk44PBIBMkmECoq6nqyWN1Nolk79vIfPcjEVMTb1yPUPd2+Gi+8OU3sLJ56Si8bQs2vv8mfBta5W0yTVOKTQCHoFKpOASqvoyF4ydx4eBHsj9uNG28GW0fHEDo3rvVO5KiCNSb4B4k0AChrZuxZrFhNVjT1YkAkSwH+TgXkeEMhvhK8WvkCFQGgt5Eivow98kAzFxeaofv64J3XQSZEz/ItW99FBtie9C6Z2dNBvLSUF8Ip3izj8tEB4IemRxzP58W8a4dYjh6p5T45odEnvYUFgZPirHOB53zsc7tojg8KihI6YN6oVRj6jdfojg1Lc4/+5L43TYc6dgi/j14WFjlypLfZyObF8m3DjskbDO5t0cUJhJutXbVoCFeceS/Ru+QyhNEVJmeFSuBdSaff1n8RjZsW/zjnDrqd5oiFj8w8htw4ciAyPz0izvNFcG6c8e/JdvP1VZa1H+AxOLnT4L7wMKGKxHxudJ3Ibbs9RJ2wxsRqbnbcV0QfWgEO5O0O0K3Q/e6znH6ipEvQ8I9OSZWjyFxDf8uYraDtMvhlL3HJY008vE/M9FJvtrwmx0AAAAASUVORK5CYII=", wL = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAACXBIWXMAAAsTAAALEwEAmpwYAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAASKSURBVHgBpVZtTFtlFH5ueym3X6NlARng0g1IiLoPjD8GzomJcQ6zMD/QOTVZ4kf8peWH89/oNJuixhkTY7bwpZiYECfww8U5CWNbmPFrzKAuSgoBNkZpoa39oO29fT3v7b2lKsUZ3+Tcc3vueZ/nfc8573kLrDEYYw6SNpJhkkm2MpY0m5vEhf86+CQN4GZHdz4iYRXwl0l5SBz899jCJYxeP6PqSDKk+pRZb0W143Y0lO/G9pJ6fWqQ5IggCO/lJeDh0MBVwE+vvo8bsVk4pRLYTQ6YRYvqF5djWJajuB6Z5rPwWn0nqohQGx4iOfIPAm3lKvvQha/wwdRL2FF7F0RDAXkxchRUnfHVJwHLShzToato3vwU9lQd0uFa9Z0IesxJXeZhCYVCiEajuHD+LEQMYO+eCAxCxlNYwc3odIYsTTqV+B4FVjekdW16uOqIZEon6CZ1MJlMwufzQZIkGI1G+P1+jAy9ylr2zcNuY3+jEFTwDAGDooQhJ36Gef0wxMJG7nSOCO4TtNVPcsvc3Jw63VI4QxDVkPpPIdL8MAb7P8SD1QOoMBrIngHnyEzjYsStEIkcvAJIjbA8dFYPlVOkxz7+lkgk+E6wuHAesB6C89qdKOy4BuXunXh8vxun+sohdXex/Uoqs/RMVsC0TRkSKRhm7ZDxA+SBixAbdnKz20CPZv62vLwMg8GAsor7YbI+hqXK7xCsCMPU06UCPNLSgu0dncLJQolF47E04nEqpxiEKEmMJOCnXAkwkq9y+rS+g3t5iJZ4chfHx2F6ux2mK2MIbvHC/m4KZrMZygkrWK8TwkYX5Ht2Ifrs8zhx+DA2DPbLmfylkYoRmZwC5RoUKTi2bcWBi5d4dKagH0VKLvOPXWapui1s4R0Ti/nA/PR57ncj830hscSxF1hodoYFg0FV2tvbWUlJCaNEMi3rWXG5XNkjLmYPBG2PVVTC/1kf5EA9lHAS3inAZlVQXKVgrqYYDptdd4fNZgOvOpY9FKuPzDYAF48/d5acEiIpIBQGbiklTd3hjwhQXL5LncDPSO/Ro3D29shvcYPdkgXTt1B8Wy3PLZdglsBkMqmVhFgBLGNJxGtF8NCWlQG+G0YUWhrg9Xox+OQTinvRb3SYJTF3pTq4wh91dbp5jDuNkDRyAl5JQigI8Y5vUVpZmZ1c/esIPu/thfLmMXhSCSPFE2uGpalJfx3kVcS7Jq8k8DahKIparoIGEg6H8cnHr6Npcxe2rcsPrJ5oLtiEgr2/6eZNIgEFieQc34XFYlEB9cRNTEzg6y8fTb94cFpwFmHNZat9iUS09+mmHt6LNHb1guG3FKMkskAgwDo7jqc/OlnEGOf7F0mHwJQlklhb7o3n4ti57dpN6jh/Hx4dwhvjB7Chxog1181WVv90TSse2PiK/uWv7TqHxENK7bfe8C/w/Pgc5uOzeTl4JLeur8cz1a2kd+hmfqt59B+rXZlujUS9Mn8KfINR3xmVcD4+o/pYxSIVsKF0dy7wqldmnpWpOelhNz+G2f/4d+HWAJZyACc1m0cr87zjT8cv6mg/RdfrAAAAAElFTkSuQmCC", xL = (e) => {\n let t = u8;\n const o = e.classes();\n switch (!0) {\n case o.includes(L1.ABKHAZIA.toLowerCase()):\n t = kf;\n break;\n case o.includes(L1.AFGHANISTAN.toLowerCase()):\n t = u8;\n break;\n case o.includes(L1.ALBANIA.toLowerCase()):\n t = Nf;\n break;\n case o.includes(L1.ALGERIA.toLowerCase()):\n t = Tf;\n break;\n case o.includes(L1.ANDORRA.toLowerCase()):\n t = If;\n break;\n case o.includes(L1.ANGOLA.toLowerCase()):\n t = Df;\n break;\n case o.includes(L1.ANTIGUABARBUDA.toLowerCase()):\n t = Hf;\n break;\n case o.includes(L1.ARGENTINA.toLowerCase()):\n t = Vf;\n break;\n case o.includes(L1.ARMENIA.toLowerCase()):\n t = Pf;\n break;\n case o.includes(L1.AUSTRALIA.toLowerCase()):\n t = Ff;\n break;\n case o.includes(L1.AUSTRIA.toLowerCase()):\n t = Xf;\n break;\n case o.includes(L1.AZERBAIJAN.toLowerCase()):\n t = Uf;\n break;\n case o.includes(L1.BAHAMAS.toLowerCase()):\n t = Yf;\n break;\n case o.includes(L1.BAHRAIN.toLowerCase()):\n t = Gf;\n break;\n case o.includes(L1.BANGLADESH.toLowerCase()):\n t = Qf;\n break;\n case o.includes(L1.BARBADOS.toLowerCase()):\n t = Zf;\n break;\n case o.includes(L1.BELARUS.toLowerCase()):\n t = jf;\n break;\n case o.includes(L1.BELGIUM.toLowerCase()):\n t = Kf;\n break;\n case o.includes(L1.BELIZE.toLowerCase()):\n t = Jf;\n break;\n case o.includes(L1.BENIN.toLowerCase()):\n t = _f;\n break;\n case o.includes(L1.BHUTAN.toLowerCase()):\n t = $f;\n break;\n case o.includes(L1.BOLIVIA.toLowerCase()):\n t = eg;\n break;\n case o.includes(L1.BOSNIAHERZEGOVINA.toLowerCase()):\n t = tg;\n break;\n case o.includes(L1.BOTSWANA.toLowerCase()):\n t = og;\n break;\n case o.includes(L1.BRAZIL.toLowerCase()):\n t = rg;\n break;\n case o.includes(L1.BRUNEI.toLowerCase()):\n t = ng;\n break;\n case o.includes(L1.BULGARIA.toLowerCase()):\n t = ig;\n break;\n case o.includes(L1.BURKINAFASO.toLowerCase()):\n t = ag;\n break;\n case o.includes(L1.BURUNDI.toLowerCase()):\n t = sg;\n break;\n case o.includes(L1.CAMBODIA.toLowerCase()):\n t = cg;\n break;\n case o.includes(L1.CAMEROON.toLowerCase()):\n t = lg;\n break;\n case o.includes(L1.CANADA.toLowerCase()):\n t = pg;\n break;\n case o.includes(L1.CAPEVERDE.toLowerCase()):\n t = dg;\n break;\n case o.includes(L1.CENTRAL_AFRICAN_REPUBLIC.toLowerCase()):\n t = bg;\n break;\n case o.includes(L1.CHAD.toLowerCase()):\n t = Mg;\n break;\n case o.includes(L1.CHILE.toLowerCase()):\n t = Ag;\n break;\n case o.includes(L1.CHINA.toLowerCase()):\n t = ug;\n break;\n case o.includes(L1.COLOMBIA.toLowerCase()):\n t = zg;\n break;\n case o.includes(L1.COMOROS.toLowerCase()):\n t = hg;\n break;\n case o.includes(L1.CONGO.toLowerCase()):\n t = Og;\n break;\n case o.includes(L1.COOKISLANDS.toLowerCase()):\n t = fg;\n break;\n case o.includes(L1.COSTARICA.toLowerCase()):\n t = gg;\n break;\n case o.includes(L1.CROATIA.toLowerCase()):\n t = Cg;\n break;\n case o.includes(L1.CUBA.toLowerCase()):\n t = mg;\n break;\n case o.includes(L1.CYPRUS.toLowerCase()):\n t = Lg;\n break;\n case o.includes(L1.CZECH_REPUBLIC.toLowerCase()):\n t = vg;\n break;\n case o.includes(L1.DEMOCRATIC_REPUBLIC_CONGO.toLowerCase()):\n t = qg;\n break;\n case o.includes(L1.DENMARK.toLowerCase()):\n t = yg;\n break;\n case o.includes(L1.DJIBOUTI.toLowerCase()):\n t = wg;\n break;\n case o.includes(L1.DOMINICA.toLowerCase()):\n t = xg;\n break;\n case o.includes(L1.DOMINICAN_REPUBLIC.toLowerCase()):\n t = Wg;\n break;\n case o.includes(L1.EASTTIMOR.toLowerCase()):\n t = Rg;\n break;\n case o.includes(L1.ECUADOR.toLowerCase()):\n t = Bg;\n break;\n case o.includes(L1.EGYPT.toLowerCase()):\n t = Sg;\n break;\n case o.includes(L1.ELSALVADOR.toLowerCase()):\n t = Eg;\n break;\n case o.includes(L1.EQUITORIAL_GUINEA.toLowerCase()):\n t = kg;\n break;\n case o.includes(L1.ERITREA.toLowerCase()):\n t = Ng;\n break;\n case o.includes(L1.ESTONIA.toLowerCase()):\n t = Tg;\n break;\n case o.includes(L1.ETHIOPIA.toLowerCase()):\n t = Ig;\n break;\n case o.includes(L1.EU.toLowerCase()):\n t = Dg;\n break;\n case o.includes(L1.F_S_MICRONESIA.toLowerCase()):\n t = Hg;\n break;\n case o.includes(L1.FIJI.toLowerCase()):\n t = Vg;\n break;\n case o.includes(L1.FINLAND.toLowerCase()):\n t = Pg;\n break;\n case o.includes(L1.FRANCE.toLowerCase()):\n t = nC;\n break;\n case o.includes(L1.GABON.toLowerCase()):\n t = iC;\n break;\n case o.includes(L1.GAMBIA.toLowerCase()):\n t = aC;\n break;\n case o.includes(L1.GEORGIA.toLowerCase()):\n t = sC;\n break;\n case o.includes(L1.GERMANY.toLowerCase()):\n t = cC;\n break;\n case o.includes(L1.GHANA.toLowerCase()):\n t = lC;\n break;\n case o.includes(L1.GREECE.toLowerCase()):\n t = pC;\n break;\n case o.includes(L1.GRENADA.toLowerCase()):\n t = dC;\n break;\n case o.includes(L1.GUATEMALA.toLowerCase()):\n t = Fg;\n break;\n case o.includes(L1.GUINEABISSAU.toLowerCase()):\n t = Xg;\n break;\n case o.includes(L1.GUINEA.toLowerCase()):\n t = Ug;\n break;\n case o.includes(L1.GUYANA.toLowerCase()):\n t = Yg;\n break;\n case o.includes(L1.HAITI.toLowerCase()):\n t = Gg;\n break;\n case o.includes(L1.HONDURAS.toLowerCase()):\n t = Qg;\n break;\n case o.includes(L1.HONG_KONG.toLowerCase()):\n t = Zg;\n break;\n case o.includes(L1.HUNGARY.toLowerCase()):\n t = jg;\n break;\n case o.includes(L1.ICELAND.toLowerCase()):\n t = Kg;\n break;\n case o.includes(L1.INDIA.toLowerCase()):\n t = Jg;\n break;\n case o.includes(L1.INDONESIA.toLowerCase()):\n t = _g;\n break;\n case o.includes(L1.IRAN.toLowerCase()):\n t = $g;\n break;\n case o.includes(L1.IRAQ.toLowerCase()):\n t = eC;\n break;\n case o.includes(L1.IRELAND.toLowerCase()):\n t = tC;\n break;\n case o.includes(L1.ISRAEL.toLowerCase()):\n t = oC;\n break;\n case o.includes(L1.ITALY.toLowerCase()):\n t = rC;\n break;\n case o.includes(L1.IVORY_COAST.toLowerCase()):\n t = bC;\n break;\n case o.includes(L1.JAMAICA.toLowerCase()):\n t = MC;\n break;\n case o.includes(L1.JAPAN.toLowerCase()):\n t = AC;\n break;\n case o.includes(L1.JORDAN.toLowerCase()):\n t = uC;\n break;\n case o.includes(L1.KENYA.toLowerCase()):\n t = zC;\n break;\n case o.includes(L1.KIRIBATI.toLowerCase()):\n t = hC;\n break;\n case o.includes(L1.KOSOVO.toLowerCase()):\n t = OC;\n break;\n case o.includes(L1.KZAKHSTAN.toLowerCase()):\n t = fC;\n break;\n case o.includes(L1.KUWAIT.toLowerCase()):\n t = gC;\n break;\n case o.includes(L1.KYRGYZSTAN.toLowerCase()):\n t = CC;\n break;\n case o.includes(L1.LAOS.toLowerCase()):\n t = mC;\n break;\n case o.includes(L1.LATVIA.toLowerCase()):\n t = LC;\n break;\n case o.includes(L1.LEBANON.toLowerCase()):\n t = vC;\n break;\n case o.includes(L1.LESOTHO.toLowerCase()):\n t = qC;\n break;\n case o.includes(L1.LIBERIA.toLowerCase()):\n t = yC;\n break;\n case o.includes(L1.LIBIA.toLowerCase()):\n t = wC;\n break;\n case o.includes(L1.LIECHTENSTEIN.toLowerCase()):\n t = xC;\n break;\n case o.includes(L1.LITHUANIA.toLowerCase()):\n t = WC;\n break;\n case o.includes(L1.LUXEMBOURG.toLowerCase()):\n t = RC;\n break;\n case o.includes(L1.MACEDONIA.toLowerCase()):\n t = BC;\n break;\n case o.includes(L1.MADAGASCAR.toLowerCase()):\n t = SC;\n break;\n case o.includes(L1.MALAWI.toLowerCase()):\n t = EC;\n break;\n case o.includes(L1.MALAYSIA.toLowerCase()):\n t = kC;\n break;\n case o.includes(L1.MALDIVES.toLowerCase()):\n t = NC;\n break;\n case o.includes(L1.MALI.toLowerCase()):\n t = TC;\n break;\n case o.includes(L1.MALTA.toLowerCase()):\n t = IC;\n break;\n case o.includes(L1.MARSHALL_ISLANDS.toLowerCase()):\n t = DC;\n break;\n case o.includes(L1.MAURITANIA.toLowerCase()):\n t = HC;\n break;\n case o.includes(L1.MAURITIUS.toLowerCase()):\n t = VC;\n break;\n case o.includes(L1.MEXICO.toLowerCase()):\n t = PC;\n break;\n case o.includes(L1.MOLDOVA.toLowerCase()):\n t = FC;\n break;\n case o.includes(L1.MONACO.toLowerCase()):\n t = XC;\n break;\n case o.includes(L1.MONGOLIA.toLowerCase()):\n t = UC;\n break;\n case o.includes(L1.MONTENEGRO.toLowerCase()):\n t = YC;\n break;\n case o.includes(L1.MOROCCO.toLowerCase()):\n t = GC;\n break;\n case o.includes(L1.MOZAMBIQUE.toLowerCase()):\n t = QC;\n break;\n case o.includes(L1.MYANMAR.toLowerCase()):\n t = ZC;\n break;\n case o.includes(L1.NAGORNOKARABAKJ.toLowerCase()):\n t = jC;\n break;\n case o.includes(L1.NAMIBIA.toLowerCase()):\n t = KC;\n break;\n case o.includes(L1.NAURU.toLowerCase()):\n t = JC;\n break;\n case o.includes(L1.NEPAL.toLowerCase()):\n t = _C;\n break;\n case o.includes(L1.NETHERLANDS.toLowerCase()):\n t = $C;\n break;\n case o.includes(L1.NEW_ZEALAND.toLowerCase()):\n t = em;\n break;\n case o.includes(L1.NICARAGUA.toLowerCase()):\n t = tm;\n break;\n case o.includes(L1.NIGER.toLowerCase()):\n t = om;\n break;\n case o.includes(L1.NIGERIA.toLowerCase()):\n t = rm;\n break;\n case o.includes(L1.NIUE.toLowerCase()):\n t = nm;\n break;\n case o.includes(L1.NORTH_KOREA.toLowerCase()):\n t = im;\n break;\n case o.includes(L1.NORTHERN_CYPRUS.toLowerCase()):\n t = am;\n break;\n case o.includes(L1.NORWAY.toLowerCase()):\n t = sm;\n break;\n case o.includes(L1.ORMAN.toLowerCase()):\n t = cm;\n break;\n case o.includes(L1.PAKISTAN.toLowerCase()):\n t = lm;\n break;\n case o.includes(L1.PALAU.toLowerCase()):\n t = pm;\n break;\n case o.includes(L1.PALESTINE.toLowerCase()):\n t = dm;\n break;\n case o.includes(L1.PAPA_NEW_GUINEA.toLowerCase()):\n t = bm;\n break;\n case o.includes(L1.PARAGUAY.toLowerCase()):\n t = Mm;\n break;\n case o.includes(L1.PERU.toLowerCase()):\n t = Am;\n break;\n case o.includes(L1.PHILLIPPINES.toLowerCase()):\n t = um;\n break;\n case o.includes(L1.POLAND.toLowerCase()):\n t = zm;\n break;\n case o.includes(L1.PORTUGAL.toLowerCase()):\n t = hm;\n break;\n case o.includes(L1.PUERTO_RICA.toLowerCase()):\n t = Om;\n break;\n case o.includes(L1.QATAR.toLowerCase()):\n t = fm;\n break;\n case o.includes(L1.REPUBLIC_OF_CHINA.toLowerCase()):\n t = gm;\n break;\n case o.includes(L1.ROMANIA.toLowerCase()):\n t = Cm;\n break;\n case o.includes(L1.RUSSIA.toLowerCase()):\n t = mm;\n break;\n case o.includes(L1.RWANDA.toLowerCase()):\n t = Lm;\n break;\n case o.includes(L1.SAHRAWI_ARAB_DEMOCRATIC_REPUBLIC.toLowerCase()):\n t = vm;\n break;\n case o.includes(L1.SAINT_KITTS_AND_NEVIS.toLowerCase()):\n t = qm;\n break;\n case o.includes(L1.SAINT_LUCIA.toLowerCase()):\n t = ym;\n break;\n case o.includes(L1.SAMOA.toLowerCase()):\n t = wm;\n break;\n case o.includes(L1.SAN_MARINO.toLowerCase()):\n t = xm;\n break;\n case o.includes(L1.SAO_TOME_AND_PRINCIPE.toLowerCase()):\n t = Wm;\n break;\n case o.includes(L1.SAUDI_ARABIA.toLowerCase()):\n t = Rm;\n break;\n case o.includes(L1.SENEGAL.toLowerCase()):\n t = Bm;\n break;\n case o.includes(L1.SERBIA.toLowerCase()):\n t = Sm;\n break;\n case o.includes(L1.SEYCHELLES.toLowerCase()):\n t = Em;\n break;\n case o.includes(L1.SIERRA_LEONE.toLowerCase()):\n t = km;\n break;\n case o.includes(L1.SINGAPORE.toLowerCase()):\n t = Nm;\n break;\n case o.includes(L1.SLOVAKIA.toLowerCase()):\n t = Tm;\n break;\n case o.includes(L1.SLOVENIA.toLowerCase()):\n t = Im;\n break;\n case o.includes(L1.SOLOMON_ISLANDS.toLowerCase()):\n t = Dm;\n break;\n case o.includes(L1.SOMALIA.toLowerCase()):\n t = Hm;\n break;\n case o.includes(L1.SOMALILAND.toLowerCase()):\n t = Vm;\n break;\n case o.includes(L1.SOUTH_AFRICA.toLowerCase()):\n t = Pm;\n break;\n case o.includes(L1.SOUTH_KOREA.toLowerCase()):\n t = Fm;\n break;\n case o.includes(L1.SOUTH_OSSETIA.toLowerCase()):\n t = Xm;\n break;\n case o.includes(L1.SOUTH_SUDAN.toLowerCase()):\n t = Um;\n break;\n case o.includes(L1.SPAIN.toLowerCase()):\n t = Ym;\n break;\n case o.includes(L1.SRI_LANKA.toLowerCase()):\n t = Gm;\n break;\n case o.includes(L1.ST_VINCENT_AND_THE_GRENADINES.toLowerCase()):\n t = Qm;\n break;\n case o.includes(L1.SUDAN.toLowerCase()):\n t = Zm;\n break;\n case o.includes(L1.SURINAME.toLowerCase()):\n t = jm;\n break;\n case o.includes(L1.SWAZILAND.toLowerCase()):\n t = Km;\n break;\n case o.includes(L1.SWEDEN.toLowerCase()):\n t = Jm;\n break;\n case o.includes(L1.SWITZERLAND.toLowerCase()):\n t = _m;\n break;\n case o.includes(L1.SYRIA.toLowerCase()):\n t = $m;\n break;\n case o.includes(L1.TAJIKISTAN.toLowerCase()):\n t = eL;\n break;\n case o.includes(L1.TANZANIA.toLowerCase()):\n t = tL;\n break;\n case o.includes(L1.THAILAND.toLowerCase()):\n t = oL;\n break;\n case o.includes(L1.TOGO.toLowerCase()):\n t = rL;\n break;\n case o.includes(L1.TONGA.toLowerCase()):\n t = nL;\n break;\n case o.includes(L1.TRANSNISTRIA.toLowerCase()):\n t = iL;\n break;\n case o.includes(L1.TRINIDAD_TOBAGO.toLowerCase()):\n t = aL;\n break;\n case o.includes(L1.TUNISIA.toLowerCase()):\n t = sL;\n break;\n case o.includes(L1.TURKEY.toLowerCase()):\n t = cL;\n break;\n case o.includes(L1.TURKMENISTAN.toLowerCase()):\n t = lL;\n break;\n case o.includes(L1.TUVALU.toLowerCase()):\n t = pL;\n break;\n case o.includes(L1.U_S_VIRGIN_ISLANDS.toLowerCase()):\n t = dL;\n break;\n case o.includes(L1.UGANDA.toLowerCase()):\n t = bL;\n break;\n case o.includes(L1.UKRAINE.toLowerCase()):\n t = ML;\n break;\n case o.includes(L1.UNITED_ARAB_EMIRATES.toLowerCase()):\n t = AL;\n break;\n case o.includes(L1.UNITED_KINGDOM.toLowerCase()):\n t = uL;\n break;\n case o.includes(L1.UZBEKISTAN.toLowerCase()):\n t = zL;\n break;\n case o.includes(L1.VATICAN_CITY.toLowerCase()):\n t = hL;\n break;\n case o.includes(L1.VENEZUELA.toLowerCase()):\n t = OL;\n break;\n case o.includes(L1.VIETNAM.toLowerCase()):\n t = fL;\n break;\n case o.includes(L1.YEMEN.toLowerCase()):\n t = gL;\n break;\n case o.includes(L1.ZAMBIA.toLowerCase()):\n t = CL;\n break;\n case o.includes(L1.BRITISH_VIRGIN_ISLANDS.toLowerCase()):\n t = mL;\n break;\n case o.includes(L1.CAYMAN_ISLANDS.toLowerCase()):\n t = LL;\n break;\n case o.includes(L1.CURACAO.toLowerCase()):\n t = vL;\n break;\n case o.includes(L1.GUERNSEY.toLowerCase()):\n t = qL;\n break;\n case o.includes(L1.JERSEY.toLowerCase()):\n t = yL;\n break;\n case o.includes(L1.ZIMBABWE.toLowerCase()):\n t = wL;\n break;\n default:\n t = Ef;\n break;\n }\n return t;\n}, J2 = {\n Countries: [\n {\n CountryName: "United States Of America",\n CountryCode: "US",\n Flag: "FlagUSA"\n },\n {\n CountryName: "Abkhazia",\n CountryCode: "AB",\n Flag: "FlagAB"\n },\n {\n CountryName: "Afghanistan",\n CountryCode: "AF",\n Flag: "FlagAF"\n },\n {\n CountryName: "Albania",\n CountryCode: "ALB",\n Flag: "FlagALB"\n },\n {\n CountryName: "Algeria",\n CountryCode: "ALG",\n Flag: "FlagALG"\n },\n {\n CountryName: "Andorra",\n CountryCode: "AND",\n Flag: "FlagAND"\n },\n {\n CountryName: "Angola",\n CountryCode: "ANG",\n Flag: "FlagANG"\n },\n {\n CountryName: "Antigua & Barbuda",\n CountryCode: "ANB",\n Flag: "FlagANB"\n },\n {\n CountryName: "Argentina",\n CountryCode: "ARG",\n Flag: "FlagARG"\n },\n {\n CountryName: "Armenia",\n CountryCode: "ARM",\n Flag: "FlagARM"\n },\n {\n CountryName: "Australia",\n CountryCode: "AUS",\n Flag: "FlagAUS"\n },\n {\n CountryName: "Austria",\n CountryCode: "AS",\n Flag: "FlagAS"\n },\n {\n CountryName: "Azerbaijan",\n CountryCode: "AZ",\n Flag: "FlagAZ"\n },\n {\n CountryName: "Bahamas",\n CountryCode: "BAM",\n Flag: "FlagBAM"\n },\n {\n CountryName: "Bahrain",\n CountryCode: "BAH",\n Flag: "FlagBAH"\n },\n {\n CountryName: "Bangladesh",\n CountryCode: "BAN",\n Flag: "FlagBAN"\n },\n {\n CountryName: "Barbados",\n CountryCode: "BAR",\n Flag: "FlagBAR"\n },\n {\n CountryName: "Belarus",\n CountryCode: "BER",\n Flag: "FlagBER"\n },\n {\n CountryName: "Belgium",\n CountryCode: "BEL",\n Flag: "FlagBEL"\n },\n {\n CountryName: "Belize",\n CountryCode: "BEZ",\n Flag: "FlagBEZ"\n },\n {\n CountryName: "Benin",\n CountryCode: "BEN",\n Flag: "FlagBEN"\n },\n {\n CountryName: "Bhutan",\n CountryCode: "BHU",\n Flag: "FlagBHU"\n },\n {\n CountryName: "Bolivia",\n CountryCode: "BOL",\n Flag: "FlagBOL"\n },\n {\n CountryName: "Bosnia & Herzegovina",\n CountryCode: "BOS",\n Flag: "FlagBOS"\n },\n {\n CountryName: "Botswana",\n CountryCode: "BOT",\n Flag: "FlagBOT"\n },\n {\n CountryName: "Brazil",\n CountryCode: "BRA",\n Flag: "FlagBRA"\n },\n {\n CountryName: "Brunei",\n CountryCode: "BRU",\n Flag: "FlagBRU"\n },\n {\n CountryName: "Bulgaria",\n CountryCode: "BUL",\n Flag: "FlagBUL"\n },\n {\n CountryName: "Burkina Faso",\n CountryCode: "BUR",\n Flag: "FlagBUR"\n },\n {\n CountryName: "Burundi",\n CountryCode: "BUD",\n Flag: "FlagBUD"\n },\n {\n CountryName: "Cambodia",\n CountryCode: "CAD",\n Flag: "FlagCAD"\n },\n {\n CountryName: "Cameroon",\n CountryCode: "CAM",\n Flag: "FlagCAM"\n },\n {\n CountryName: "Canada",\n CountryCode: "CA",\n Flag: "FlagCA"\n },\n {\n CountryName: "Cape Verde",\n CountryCode: "CV",\n Flag: "FlagCV"\n },\n {\n CountryName: "Central African Republic",\n CountryCode: "CAR",\n Flag: "FlagCAR"\n },\n {\n CountryName: "Chad",\n CountryCode: "CH",\n Flag: "FlagCH"\n },\n {\n CountryName: "Chile",\n CountryCode: "CHE",\n Flag: "FlagCHE"\n },\n {\n CountryName: "China",\n CountryCode: "CHI",\n Flag: "FlagCHI"\n },\n {\n CountryName: "Colombia",\n CountryCode: "COL",\n Flag: "FlagCOL"\n },\n {\n CountryName: "Comoros",\n CountryCode: "COM",\n Flag: "FlagCOM"\n },\n {\n CountryName: "Congo",\n CountryCode: "CON",\n Flag: "FlagCON"\n },\n {\n CountryName: "Cook Islands",\n CountryCode: "CI",\n Flag: "FlagCI"\n },\n {\n CountryName: "Costa Rica",\n CountryCode: "CR",\n Flag: "FlagCR"\n },\n {\n CountryName: "Croatia",\n CountryCode: "CRO",\n Flag: "FlagCRO"\n },\n {\n CountryName: "Cuba",\n CountryCode: "CU",\n Flag: "FlagCU"\n },\n {\n CountryName: "Cyprus",\n CountryCode: "CY",\n Flag: "FlagCY"\n },\n {\n CountryName: "Czech Republic",\n CountryCode: "CZ",\n Flag: "FlagCZ"\n },\n {\n CountryName: "Democratic Republic of the Congo",\n CountryCode: "DRC",\n Flag: "FlagDRC"\n },\n {\n CountryName: "Denmark",\n CountryCode: "DEN",\n Flag: "FlagDEN"\n },\n {\n CountryName: "Djibouti",\n CountryCode: "DJ",\n Flag: "FlagDJ"\n },\n {\n CountryName: "Dominica",\n CountryCode: "DOM",\n Flag: "FlagDOM"\n },\n {\n CountryName: "Dominican Republic",\n CountryCode: "DR",\n Flag: "FlagDR"\n },\n {\n CountryName: "East Timor",\n CountryCode: "ET",\n Flag: "FlagET"\n },\n {\n CountryName: "Ecuador",\n CountryCode: "EC",\n Flag: "FlagEC"\n },\n {\n CountryName: "Egypt",\n CountryCode: "EG",\n Flag: "FlagEG"\n },\n {\n CountryName: "El Salvador",\n CountryCode: "ES",\n Flag: "FlagES"\n },\n {\n CountryName: "Equitorial Guinea",\n CountryCode: "EQG",\n Flag: "FlagEQG"\n },\n {\n CountryName: "Eritrea",\n CountryCode: "ERI",\n Flag: "FlagERI"\n },\n {\n CountryName: "Estonia",\n CountryCode: "EST",\n Flag: "FlagEST"\n },\n {\n CountryName: "Ethiopia",\n CountryCode: "ETH",\n Flag: "FlagETH"\n },\n {\n CountryName: "EU",\n CountryCode: "EU",\n Flag: "FlagEU"\n },\n {\n CountryName: "F.S. Micronesia",\n CountryCode: "FS",\n Flag: "FlagFS"\n },\n {\n CountryName: "Fiji",\n CountryCode: "FI",\n Flag: "FlagFI"\n },\n {\n CountryName: "Finland",\n CountryCode: "FD",\n Flag: "FlagFD"\n },\n {\n CountryName: "France",\n CountryCode: "FR",\n Flag: "FlagFR"\n },\n {\n CountryName: "Gabon",\n CountryCode: "GAB",\n Flag: "FlagGAB"\n },\n {\n CountryName: "Gambia",\n CountryCode: "GAM",\n Flag: "FlagGAM"\n },\n {\n CountryName: "Georgia",\n CountryCode: "GEO",\n Flag: "FlagGEO"\n },\n {\n CountryName: "Germany",\n CountryCode: "GER",\n Flag: "FlagGER"\n },\n {\n CountryName: "Ghana",\n CountryCode: "GH",\n Flag: "FlagGH"\n },\n {\n CountryName: "Greece",\n CountryCode: "GR",\n Flag: "FlagGR"\n },\n {\n CountryName: "Grenada",\n CountryCode: "GRA",\n Flag: "FlagGRA"\n },\n {\n CountryName: "Guatemala",\n CountryCode: "GU",\n Flag: "FlagGU"\n },\n {\n CountryName: "Guinea-Bissau",\n CountryCode: "GB",\n Flag: "FlagGB"\n },\n {\n CountryName: "Guinea",\n CountryCode: "GUI",\n Flag: "FlagGUI"\n },\n {\n CountryName: "Guyana",\n CountryCode: "GUY",\n Flag: "FlagGUY"\n },\n {\n CountryName: "Haiti",\n CountryCode: "HAI",\n Flag: "FlagHAI"\n },\n {\n CountryName: "Honduras",\n CountryCode: "HON",\n Flag: "FlagHON"\n },\n {\n CountryName: "Hong Kong",\n CountryCode: "HK",\n Flag: "FlagHK"\n },\n {\n CountryName: "Hungary",\n CountryCode: "HU",\n Flag: "FlagHU"\n },\n {\n CountryName: "Iceland",\n CountryCode: "IL",\n Flag: "FlagIL"\n },\n {\n CountryName: "India",\n CountryCode: "IND",\n Flag: "FlagIND"\n },\n {\n CountryName: "Indonesia",\n CountryCode: "INA",\n Flag: "FlagINA"\n },\n {\n CountryName: "Iran",\n CountryCode: "IRN",\n Flag: "FlagIRN"\n },\n {\n CountryName: "Iraq",\n CountryCode: "IRQ",\n Flag: "FlagIRQ"\n },\n {\n CountryName: "Ireland",\n CountryCode: "IRE",\n Flag: "FlagIRE"\n },\n {\n CountryName: "Israel",\n CountryCode: "ISR",\n Flag: "FlagISR"\n },\n {\n CountryName: "Italy",\n CountryCode: "IT",\n Flag: "FlagIT"\n },\n {\n CountryName: "Ivory Coast",\n CountryCode: "IC",\n Flag: "FlagIC"\n },\n {\n CountryName: "Jamaica",\n CountryCode: "JAM",\n Flag: "FlagJAM"\n },\n {\n CountryName: "Japan",\n CountryCode: "JAP",\n Flag: "FlagJAP"\n },\n {\n CountryName: "Jordan",\n CountryCode: "JOR",\n Flag: "FlagJOR"\n },\n {\n CountryName: "Kenya",\n CountryCode: "KEN",\n Flag: "FlagKEN"\n },\n {\n CountryName: "Kiribati",\n CountryCode: "KI",\n Flag: "FlagKI"\n },\n {\n CountryName: "Kosovo",\n CountryCode: "KO",\n Flag: "FlagKO"\n },\n {\n CountryName: "Kzakhstan",\n CountryCode: "KZ",\n Flag: "FlagKZ"\n },\n {\n CountryName: "Kuwait",\n CountryCode: "KU",\n Flag: "FlagKU"\n },\n {\n CountryName: "Kyrgyzstan",\n CountryCode: "KY",\n Flag: "FlagKY"\n },\n {\n CountryName: "Laos",\n CountryCode: "LAO",\n Flag: "FlagLAO"\n },\n {\n CountryName: "Latvia",\n CountryCode: "LAT",\n Flag: "FlagLAT"\n },\n {\n CountryName: "Lebanon",\n CountryCode: "LEB",\n Flag: "FlagLEB"\n },\n {\n CountryName: "Lesotho",\n CountryCode: "LES",\n Flag: "FlagLES"\n },\n {\n CountryName: "Liberia",\n CountryCode: "LIB",\n Flag: "FlagLIB"\n },\n {\n CountryName: "Libya",\n CountryCode: "LI",\n Flag: "FlagLI"\n },\n {\n CountryName: "Liechtenstein",\n CountryCode: "LIN",\n Flag: "FlagLIN"\n },\n {\n CountryName: "Lithuania",\n CountryCode: "LIT",\n Flag: "FlagLIT"\n },\n {\n CountryName: "Luxembourg",\n CountryCode: "LUX",\n Flag: "FlagLUX"\n },\n // {\n // CountryName: \'Macau\',\n // CountryCode: \'MA\',\n // Flag: "FlagMA",\n // },\n {\n CountryName: "Macedonia",\n CountryCode: "MAE",\n Flag: "FlagMAE"\n },\n {\n CountryName: "Madagascar",\n CountryCode: "mg",\n Flag: "FlagMG"\n },\n {\n CountryName: "Malawi",\n CountryCode: "MAW",\n Flag: "FlagMAW"\n },\n {\n CountryName: "Malaysia",\n CountryCode: "MAL",\n Flag: "FlagMAL"\n },\n {\n CountryName: "Maldives",\n CountryCode: "MV",\n Flag: "FlagMV"\n },\n {\n CountryName: "Mali",\n CountryCode: "MI",\n Flag: "FlagMI"\n },\n {\n CountryName: "Malta",\n CountryCode: "MT",\n Flag: "FlagMT"\n },\n {\n CountryName: "Marshall Islands",\n CountryCode: "MIS",\n Flag: "FlagMIS"\n },\n {\n CountryName: "Mauritania",\n CountryCode: "MU",\n Flag: "FlagMU"\n },\n {\n CountryName: "Mauritius",\n CountryCode: "MAU",\n Flag: "FlagMAU"\n },\n {\n CountryName: "Mexico",\n CountryCode: "MX",\n Flag: "FlagMX"\n },\n {\n CountryName: "Moldova",\n CountryCode: "MO",\n Flag: "FlagMO"\n },\n {\n CountryName: "Monaco",\n CountryCode: "MON",\n Flag: "FlagMON"\n },\n {\n CountryName: "Mongolia",\n CountryCode: "MGL",\n Flag: "FlagMGL"\n },\n {\n CountryName: "Montenegro",\n CountryCode: "MOG",\n Flag: "FlagMOG"\n },\n {\n CountryName: "Morocco",\n CountryCode: "MOR",\n Flag: "FlagMOR"\n },\n {\n CountryName: "Mozambique",\n CountryCode: "MZ",\n Flag: "FlagMZ"\n },\n {\n CountryName: "Myanmar",\n CountryCode: "MY",\n Flag: "FlagMY"\n },\n {\n CountryName: "Nagorno-Karabakj",\n CountryCode: "NK",\n Flag: "FlagNK"\n },\n {\n CountryName: "Namibia",\n CountryCode: "NM",\n Flag: "FlagNM"\n },\n {\n CountryName: "Nauru",\n CountryCode: "NA",\n Flag: "FlagNA"\n },\n {\n CountryName: "Nepal",\n CountryCode: "NP",\n Flag: "FlagNP"\n },\n {\n CountryName: "Netherlands",\n CountryCode: "NL",\n Flag: "FlagNL"\n },\n {\n CountryName: "New Zealand",\n CountryCode: "NZ",\n Flag: "FlagNZ"\n },\n {\n CountryName: "Nicaragua",\n CountryCode: "NIC",\n Flag: "FlagNIC"\n },\n {\n CountryName: "Niger",\n CountryCode: "NIG",\n Flag: "FlagNIG"\n },\n {\n CountryName: "Nigeria",\n CountryCode: "NGA",\n Flag: "FlagNGA"\n },\n {\n CountryName: "Niue",\n CountryCode: "NI",\n Flag: "FlagNI"\n },\n {\n CountryName: "North Korea",\n CountryCode: "NKO",\n Flag: "FlagNKO"\n },\n {\n CountryName: "Northern Cyprus",\n CountryCode: "NC",\n Flag: "FlagNC"\n },\n {\n CountryName: "Norway",\n CountryCode: "NY",\n Flag: "FlagNY"\n },\n {\n CountryName: "Orman",\n CountryCode: "OR",\n Flag: "FlagOR"\n },\n {\n CountryName: "Pakistan",\n CountryCode: "PK",\n Flag: "FlagPK"\n },\n {\n CountryName: "Palau",\n CountryCode: "PA",\n Flag: "FlagPA"\n },\n {\n CountryName: "Palestine",\n CountryCode: "PAL",\n Flag: "FlagPAL"\n },\n {\n CountryName: "Papa New Guinea",\n CountryCode: "PNG",\n Flag: "FlagPNG"\n },\n {\n CountryName: "Paraguay",\n CountryCode: "PAR",\n Flag: "FlagPAR"\n },\n {\n CountryName: "Peru",\n CountryCode: "PE",\n Flag: "FlagPE"\n },\n {\n CountryName: "Phillippines",\n CountryCode: "PH",\n Flag: "FlagPH"\n },\n {\n CountryName: "Poland",\n CountryCode: "PL",\n Flag: "FlagPL"\n },\n {\n CountryName: "Portugal",\n CountryCode: "POR",\n Flag: "FlagPOR"\n },\n {\n CountryName: "Puerto Rica",\n CountryCode: "PR",\n Flag: "FlagPR"\n },\n {\n CountryName: "Qatar",\n CountryCode: "QT",\n Flag: "FlagQT"\n },\n {\n CountryName: "Republic of China",\n CountryCode: "RC",\n Flag: "FlagRC"\n },\n {\n CountryName: "Romania",\n CountryCode: "RO",\n Flag: "FlagRO"\n },\n {\n CountryName: "Russia",\n CountryCode: "RU",\n Flag: "FlagRU"\n },\n {\n CountryName: "Rwanda",\n CountryCode: "RW",\n Flag: "FlagRW"\n },\n {\n CountryName: "Sahrawi Arab Democratic Republic",\n CountryCode: "SA",\n Flag: "FlagSA"\n },\n {\n CountryName: "Saint Kitts and Nevis",\n CountryCode: "SK",\n Flag: "FlagSK"\n },\n {\n CountryName: "Saint Lucia",\n CountryCode: "SL",\n Flag: "FlagSL"\n },\n {\n CountryName: "Samoa",\n CountryCode: "SAM",\n Flag: "FlagSAM"\n },\n {\n CountryName: "San Marino",\n CountryCode: "SM",\n Flag: "FlagSM"\n },\n {\n CountryName: "Sao Tome and Principe",\n CountryCode: "STP",\n Flag: "FlagSTP"\n },\n {\n CountryName: "Saudi Arabia",\n CountryCode: "SAU",\n Flag: "FlagSAU"\n },\n {\n CountryName: "Senegal",\n CountryCode: "SEN",\n Flag: "FlagSEN"\n },\n {\n CountryName: "Serbia",\n CountryCode: "SER",\n Flag: "FlagSER"\n },\n {\n CountryName: "Seychelles",\n CountryCode: "SY",\n Flag: "FlagSY"\n },\n {\n CountryName: "Sierra Leone",\n CountryCode: "SLE",\n Flag: "FlagSLE"\n },\n {\n CountryName: "Singapore",\n CountryCode: "SGP",\n Flag: "FlagSGP"\n },\n {\n CountryName: "Slovakia",\n CountryCode: "SLO",\n Flag: "FlagSLO"\n },\n {\n CountryName: "Slovenia",\n CountryCode: "SLV",\n Flag: "FlagSLV"\n },\n {\n CountryName: "Solomon Islands",\n CountryCode: "SI",\n Flag: "FlagSI"\n },\n {\n CountryName: "Somalia",\n CountryCode: "SOM",\n Flag: "FlagSOM"\n },\n {\n CountryName: "Somaliland",\n CountryCode: "SMD",\n Flag: "FlagSMD"\n },\n {\n CountryName: "South Africa",\n CountryCode: "SAF",\n Flag: "FlagSAF"\n },\n {\n CountryName: "South Korea",\n CountryCode: "SKO",\n Flag: "FlagSKO"\n },\n {\n CountryName: "South Ossetia",\n CountryCode: "SO",\n Flag: "FlagSO"\n },\n {\n CountryName: "South Sudan",\n CountryCode: "SS",\n Flag: "FlagSS"\n },\n {\n CountryName: "Spain",\n CountryCode: "SP",\n Flag: "FlagSP"\n },\n {\n CountryName: "Sri Lanka",\n CountryCode: "SLA",\n Flag: "FlagSLA"\n },\n {\n CountryName: "St. Vincent and the Grenadines",\n CountryCode: "SV",\n Flag: "FlagSV"\n },\n {\n CountryName: "Sudan",\n CountryCode: "SUD",\n Flag: "FlagSUD"\n },\n {\n CountryName: "Suriname",\n CountryCode: "SU",\n Flag: "FlagSU"\n },\n {\n CountryName: "Swaziland",\n CountryCode: "SWA",\n Flag: "FlagSWA"\n },\n {\n CountryName: "Sweden",\n CountryCode: "SWD",\n Flag: "FlagSWD"\n },\n {\n CountryName: "Switzerland",\n CountryCode: "SW",\n Flag: "FlagSW"\n },\n {\n CountryName: "Syria",\n CountryCode: "SYR",\n Flag: "FlagSYR"\n },\n {\n CountryName: "Tajikistan",\n CountryCode: "TAJ",\n Flag: "FlagTAJ"\n },\n {\n CountryName: "Tanzania",\n CountryCode: "TA",\n Flag: "FlagTA"\n },\n {\n CountryName: "Thailand",\n CountryCode: "TH",\n Flag: "FlagTH"\n },\n {\n CountryName: "Togo",\n CountryCode: "TOG",\n Flag: "FlagTOG"\n },\n {\n CountryName: "Tonga",\n CountryCode: "TO",\n Flag: "FlagTO"\n },\n {\n CountryName: "Transnistria",\n CountryCode: "TR",\n Flag: "FlagTR"\n },\n {\n CountryName: "Trinidad & Tobago",\n CountryCode: "TT",\n Flag: "FlagTT"\n },\n {\n CountryName: "Tunisia",\n CountryCode: "TUN",\n Flag: "FlagTUN"\n },\n {\n CountryName: "Turkey",\n CountryCode: "TUR",\n Flag: "FlagTUR"\n },\n {\n CountryName: "Turkmenistan",\n CountryCode: "TK",\n Flag: "FlagTK"\n },\n {\n CountryName: "Tuvalu",\n CountryCode: "TU",\n Flag: "FlagTU"\n },\n {\n CountryName: "U.S. Virgin Islands",\n CountryCode: "VI",\n Flag: "FlagVI"\n },\n {\n CountryName: "Uganda",\n CountryCode: "UG",\n Flag: "FlagUG"\n },\n {\n CountryName: "Ukraine",\n CountryCode: "UKR",\n Flag: "FlagUKR"\n },\n {\n CountryName: "United Arab Emirates",\n CountryCode: "AE",\n Flag: "FlagAE"\n },\n {\n CountryName: "United Kingdom",\n CountryCode: "UK",\n Flag: "FlagUK"\n },\n {\n CountryName: "Uzbekistan",\n CountryCode: "UZ",\n Flag: "FlagUZ"\n },\n {\n CountryName: "Vatican City",\n CountryCode: "VC",\n Flag: "FlagVC"\n },\n {\n CountryName: "Venezuela",\n CountryCode: "VN",\n Flag: "FlagVN"\n },\n {\n CountryName: "Vietnam",\n CountryCode: "VT",\n Flag: "FlagVT"\n },\n {\n CountryName: "Yemen",\n CountryCode: "YM",\n Flag: "FlagYM"\n },\n {\n CountryName: "Zambia",\n CountryCode: "ZA",\n Flag: "FlagZA"\n },\n {\n CountryName: "British Virgin Islands",\n CountryCode: "BV",\n Flag: "FlagBV"\n },\n {\n CountryName: "Cayman Islands",\n CountryCode: "CAY",\n Flag: "FlagCAY"\n },\n {\n CountryName: "Curacao",\n CountryCode: "CUR",\n Flag: "FlagCUR"\n },\n {\n CountryName: "Guernsey",\n CountryCode: "GUE",\n Flag: "FlagGUE"\n },\n {\n CountryName: "Jersey",\n CountryCode: "JE",\n Flag: "FlagJE"\n },\n {\n CountryName: "Zimbabwe",\n CountryCode: "ZM",\n Flag: "FlagZM"\n },\n {\n CountryName: "Madagascar",\n CountryCode: "MG",\n Flag: "FlagMG"\n }\n ]\n};\nfunction i4(e) {\n const [t, o] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)("");\n return (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => {\n var n;\n (n = J2.Countries) == null || n.map((r) => {\n (e.name == r.Flag || e.name == r.CountryName) && o(r.CountryCode.toLowerCase());\n });\n }, [e.name]), t && /* @__PURE__ */ e1(\n ml,\n {\n className: "icon-flag",\n ...e,\n hideClassName: e.hideClassName,\n children: [\n /* @__PURE__ */ c(\n Sf,\n {\n src: `${xL({\n classes: () => [t]\n })}`,\n alt: t\n }\n ),\n e.hideClassName != null && !e.hideClassName && /* @__PURE__ */ c(Bf, { children: t })\n ]\n },\n e.name\n );\n}\nfunction WL(e, t) {\n const {\n disabled: o,\n iconLeft: n,\n iconRight: r,\n iconSize: i = "xxs",\n onIconLeftClick: a,\n onIconRightClick: s,\n colorIconLeft: l = "#000",\n colorIconRight: p = "#000",\n ...d\n } = e, [b, M] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(), [u, A] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)();\n return (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => {\n n != null && n.includes("Flag") && M(n), r != null && r.includes("Flag") && A(n);\n }, [n, r]), /* @__PURE__ */ e1(Wf, { isError: e.isError, className: "input-wrapper", children: [\n /* @__PURE__ */ c(\n Rf,\n {\n ...d,\n ref: t,\n disabled: o,\n iconLeft: n,\n iconRight: r,\n $isError: e.isError,\n $isReadOnly: e.isReadOnly\n }\n ),\n !!n && /* @__PURE__ */ c(n4, { onClick: a, isDisabled: o, children: n.includes("Flag") ? /* @__PURE__ */ c(i4, { "data-position": "left", name: b, size: i }) : /* @__PURE__ */ c(\n Z1,\n {\n "data-position": "left",\n name: n,\n size: i,\n color: l\n }\n ) }),\n !!r && /* @__PURE__ */ c(n4, { onClick: s, isDisabled: o, children: r.includes("Flag") ? /* @__PURE__ */ c(i4, { "data-position": "right", name: u, size: i }) : /* @__PURE__ */ c(\n Z1,\n {\n "data-position": "right",\n name: r,\n size: i,\n color: p\n }\n ) })\n ] });\n}\nconst RL = (0,react__WEBPACK_IMPORTED_MODULE_0__.forwardRef)(WL), BL = styled_components__WEBPACK_IMPORTED_MODULE_1___default().div((e) => {\n const { colors: t, fontFamily: o, typography: n, fontWeight: r, lineHeight: i } = e.theme;\n let a = t.textIcon.textPrimary, s = o.base, l = n.t28, p = "normal", d = i.lh36, b = r.medium, M = "16.8px", u = "12.6px";\n switch (e != null && e.color && (a = e.color), e == null ? void 0 : e.variant) {\n case "display-lg":\n l = n.t28, d = i.lh39, b = r.medium, e != null && e.fontWeight && (b = r[e.fontWeight]), e != null && e.fontFamily && (s = o[e.fontFamily]);\n break;\n case "heading-lg-medium":\n l = n.t20, d = i.lh28, b = r.medium, e != null && e.fontWeight && (b = r[e.fontWeight]), e != null && e.fontFamily && (s = o[e.fontFamily]);\n break;\n case "heading-lg-regular":\n l = n.t20, d = i.lh28, b = r.regular, e != null && e.fontWeight && (b = r[e.fontWeight]), e != null && e.fontFamily && (s = o[e.fontFamily]);\n break;\n case "heading-md":\n l = n.t18, d = i.lh25, b = r.medium, e != null && e.fontWeight && (b = r[e.fontWeight]), e != null && e.fontFamily && (s = o[e.fontFamily]);\n break;\n case "heading-sm":\n l = n.t16, d = i.lh25, b = r.regular, e != null && e.fontWeight && (b = r[e.fontWeight]), e != null && e.fontFamily && (s = o[e.fontFamily]);\n break;\n case "heading-xs-medium":\n l = n.t14, d = i.lh19, b = r.medium, e != null && e.fontWeight && (b = r[e.fontWeight]), e != null && e.fontFamily && (s = o[e.fontFamily]);\n break;\n case "heading-xs-regular":\n l = n.t14, d = i.lh19, b = r.regular, e != null && e.fontWeight && (b = r[e.fontWeight]), e != null && e.fontFamily && (s = o[e.fontFamily]);\n break;\n case "body-lg-regular":\n l = n.t14, d = i.lh19, b = r.regular, e != null && e.fontWeight && (b = r[e.fontWeight]), e != null && e.fontFamily && (s = o[e.fontFamily]);\n break;\n case "body-lg-light":\n l = n.t14, d = i.lh19, b = r.light, e != null && e.fontWeight && (b = r[e.fontWeight]), e != null && e.fontFamily && (s = o[e.fontFamily]);\n break;\n case "body-sm-bold":\n l = n.t12, d = M, b = r.bold, e != null && e.fontWeight && (b = r[e.fontWeight]), e != null && e.fontFamily && (s = o[e.fontFamily]);\n break;\n case "body-sm-medium":\n l = n.t12, d = M, b = r.medium, e != null && e.fontWeight && (b = r[e.fontWeight]), e != null && e.fontFamily && (s = o[e.fontFamily]);\n break;\n case "body-sm-regular":\n l = n.t12, d = M, b = r.regular, e != null && e.fontWeight && (b = r[e.fontWeight]), e != null && e.fontFamily && (s = o[e.fontFamily]);\n break;\n case "body-sm-light":\n l = n.t12, d = M, b = r.light, e != null && e.fontWeight && (b = r[e.fontWeight]), e != null && e.fontFamily && (s = o[e.fontFamily]);\n break;\n case "label-lg-regular":\n l = n.t12, d = M, b = r.regular, e != null && e.fontWeight && (b = r[e.fontWeight]), e != null && e.fontFamily && (s = o[e.fontFamily]);\n break;\n case "label-lg-light":\n l = n.t12, d = M, b = r.light, e != null && e.fontWeight && (b = r[e.fontWeight]), e != null && e.fontFamily && (s = o[e.fontFamily]);\n break;\n case "label-sm":\n l = n.t10, d = i.lh14, b = r.medium, e != null && e.fontWeight && (b = r[e.fontWeight]), e != null && e.fontFamily && (s = o[e.fontFamily]);\n break;\n case "label-sm-regular":\n l = n.t10, d = i.lh14, b = r.regular, e != null && e.fontWeight && (b = r[e.fontWeight]), e != null && e.fontFamily && (s = o[e.fontFamily]);\n break;\n case "label-sm-light":\n l = n.t10, d = i.lh14, b = r.light, e != null && e.fontWeight && (b = r[e.fontWeight]), e != null && e.fontFamily && (s = o[e.fontFamily]);\n break;\n case "label-xs-regular":\n l = n.t9, d = u, b = r.regular, e != null && e.fontWeight && (b = r[e.fontWeight]), e != null && e.fontFamily && (s = o[e.fontFamily]);\n break;\n case "label-xs-light":\n l = n.t9, d = u, b = r.light, e != null && e.fontWeight && (b = r[e.fontWeight]), e != null && e.fontFamily && (s = o[e.fontFamily]);\n break;\n }\n return (0,styled_components__WEBPACK_IMPORTED_MODULE_1__.css)`\n margin: 0px;\n color: ${a};\n font-family: ${s};\n font-size: ${l};\n font-style: ${p};\n font-weight: ${b};\n line-height: ${d};\n ${e != null && e.$whiteSpace ? `white-space:${e == null ? void 0 : e.$whiteSpace}` : ""}\n `;\n}), nr = ({ children: e, ...t }) => {\n let o = "p";\n if (t != null && t.element)\n o = t == null ? void 0 : t.element;\n else if (t != null && t.variant)\n switch (t == null ? void 0 : t.variant) {\n case "display-lg":\n o = "h1";\n break;\n case "heading-lg-medium":\n o = "h2";\n break;\n case "heading-lg-regular":\n o = "h2";\n break;\n case "heading-md":\n o = "h3";\n break;\n case "heading-sm":\n o = "h3";\n break;\n case "heading-xs-medium":\n o = "h4";\n break;\n case "heading-xs-regular":\n o = "h4";\n break;\n case "body-lg-regular":\n o = "p";\n break;\n case "body-lg-light":\n o = "p";\n break;\n case "body-sm-bold":\n o = "p";\n break;\n case "body-sm-medium":\n o = "p";\n break;\n case "body-sm-regular":\n o = "p";\n break;\n case "body-sm-light":\n o = "p";\n break;\n case "label-lg-regular":\n o = "label";\n break;\n case "label-lg-light":\n o = "label";\n break;\n case "label-sm":\n o = "label";\n break;\n case "label-sm-regular":\n o = "label";\n break;\n case "label-sm-light":\n o = "label";\n break;\n case "label-xs-regular":\n o = t != null && t.element ? t == null ? void 0 : t.element : "label";\n break;\n case "label-xs-light":\n o = t != null && t.element ? t == null ? void 0 : t.element : "label";\n break;\n }\n return /* @__PURE__ */ c(BL, { as: o, ...t, children: e });\n}, z8 = 4;\n(styled_components__WEBPACK_IMPORTED_MODULE_1___default().div)`\n width: 400px;\n`;\nconst Go = styled_components__WEBPACK_IMPORTED_MODULE_1___default().span(({ theme: { colors: e } }) => (0,styled_components__WEBPACK_IMPORTED_MODULE_1__.css)`\n color: ${e.textIcon.textSecondary};\n `), SL = styled_components__WEBPACK_IMPORTED_MODULE_1___default()(nr)`\n ${({ theme: e, isError: t, isDisabled: o }) => {\n const { colors: n, lineHeight: r, fontWeight: i } = e;\n let a = n.textIcon.textLowemphasis;\n return o ? a = n.pinkSwan : t && (a = n.error), (0,styled_components__WEBPACK_IMPORTED_MODULE_1__.css)`\n display: inline-block;\n vertical-align: top;\n line-height: ${r.lh20};\n color: ${a};\n font-size: 9px;\n font-weight: ${i.regular};\n `;\n}}\n`;\nstyled_components__WEBPACK_IMPORTED_MODULE_1___default().span(\n ({ theme: e, isDisabled: t, isError: o }) => {\n const { colors: n, typography: r, lineHeight: i } = e;\n let a = n.grey;\n return t ? a = n.pinkSwan : o && (a = n.error), (0,styled_components__WEBPACK_IMPORTED_MODULE_1__.css)`\n display: inline-block;\n vertical-align: top;\n margin: 4px 0 0;\n font-size: ${r.t12};\n line-height: ${i.lh20};\n color: ${a};\n `;\n }\n);\nconst Ta = styled_components__WEBPACK_IMPORTED_MODULE_1___default()(nr)`\n ${({ theme: e, isError: t, isDisabled: o }) => {\n const { colors: n } = e;\n let r = n.textIcon.textPrimary;\n return o ? r = n.textIcon.textDisabledOnbg : t && (r = n.textIcon.textError), (0,styled_components__WEBPACK_IMPORTED_MODULE_1__.css)`\n display: inline-block;\n vertical-align: top;\n margin-bottom: 5px;\n color: ${r};\n ${(i) => i.$active && !t && (0,styled_components__WEBPACK_IMPORTED_MODULE_1__.css)`\n color: ${r};\n `}\n\n ${o && (0,styled_components__WEBPACK_IMPORTED_MODULE_1__.css)`\n ${Go} {\n color: ${n.textIcon.textDisabledOnbg};\n }\n `}\n &:focus-visible {\n outline: none;\n }\n\n ${t && !o && (0,styled_components__WEBPACK_IMPORTED_MODULE_1__.css)`\n ${Go} {\n color: ${n.textIcon.textError};\n }\n `}\n `;\n}}\n`, ir = (styled_components__WEBPACK_IMPORTED_MODULE_1___default().span)`\n color: ${({ theme: e }) => e.colors.pinkSwan};\n margin-left: ${({ theme: e }) => e.spacings.sp4};\n`, Qo = styled_components__WEBPACK_IMPORTED_MODULE_1___default()(SL)`\n margin-left: 10px;\n`, EL = styled_components__WEBPACK_IMPORTED_MODULE_1___default().textarea.attrs(() => ({\n as: "textarea"\n}))(({ theme: e, isError: t, isReadOnly: o, required: n, $hasValue: r }) => {\n const {\n colors: i,\n borderRadius: a,\n typography: s,\n transitions: l,\n fontFamily: p,\n fontWeight: d,\n spacings: b\n } = e;\n return (0,styled_components__WEBPACK_IMPORTED_MODULE_1__.css)`\n padding-top: 12.96px;\n padding-bottom: 12.96px;\n width: 100%;\n resize: vertical;\n min-height: 90px;\n border-radius: ${a.base};\n background: ${i.field.fieldBgDefault};\n padding: ${b.sp4};\n color: ${t ? i.textIcon.textError : i.textIcon.textPrimary};\n border: 1px solid\n ${t ? i.textIcon.textError : i.field.fieldBgDefault};\n transition: ${l.base};\n font-family: ${p.base};\n font-size: ${s.t12};\n font-weight: ${d.light};\n outline: none;\n box-sizing: border-box;\n border-left: 2px solid\n ${n && !t ? i.border.borderSecondary : n && t ? i.border.borderError : "none"};\n\n ${o && (0,styled_components__WEBPACK_IMPORTED_MODULE_1__.css)`\n border: 1px solid ${i.border.borderTertiary};\n pointer-events: none;\n background-color: ${i.backgrounds.bgPrimary} !important;\n color: ${i.grey};\n `}\n\n &:hover:not(:disabled):not(:focus) {\n /* border-color: ${!t && i.pinkSwan}; */\n background-color: ${i.field.fieldBgHover};\n }\n\n ${!t && (0,styled_components__WEBPACK_IMPORTED_MODULE_1__.css)`\n &:focus {\n border-color: ${i.border.borderSecondary};\n color: ${i.textIcon.textHighemphasis};\n &:hover {\n /* background-color: ${i.field.fieldBgHover}; */\n border: 1px solid\n ${t ? i.border.borderError : i.field.fieldBorderActive};\n border-left: 2px solid\n ${n && !t ? i.field.fieldBorderActive : n && t ? i.border.borderError : "none"};\n }\n }\n `}\n\n &:disabled {\n border-color: transparent;\n // new disabled color\n background-color: ${i.backgrounds.bgDisabledPrimary};\n color: ${i.textIcon.textDisabledOnbg};\n //\n\n border-left: 2px solid\n ${n ? i.border.borderReadonly : "transparent"};\n font-weight: ${d.light};\n\n &,\n &::placeholder {\n color: ${i.textIcon.textDisabledOnbg};\n }\n }\n\n &::placeholder {\n color: ${i.field.fieldTextPlaceholder};\n font-size: ${s.t12};\n font-weight: ${d.regular};\n }\n\n &:active {\n border: 1px solid\n ${t ? i.border.borderError : i.field.fieldBorderActive};\n border-left: 2px solid\n ${n && !t ? i.backgrounds.bgReadOnly : n && t ? i.border.borderError : "none"};\n }\n\n ${r && (0,styled_components__WEBPACK_IMPORTED_MODULE_1__.css)`\n border-color: ${i.field.fieldBorderActive};\n `}\n /* Styles for the scrollbar */\n &::-webkit-scrollbar {\n height: ${z8}px;\n width: ${z8}px;\n }\n &::-webkit-scrollbar-track {\n background-color: ${(M) => M.theme.colors.scroll.scrollBgPrimary};\n }\n\n &::-webkit-scrollbar-thumb {\n background-color: ${(M) => M.theme.colors.scroll.scrollBgDefault};\n\n border-radius: ${(M) => M.theme.borderRadius.xl};\n }\n /* Handle on hover */\n &::-webkit-scrollbar-thumb:hover {\n background-color: ${(M) => M.theme.colors.scroll.scrollBgHover};\n }\n &::-webkit-scrollbar-thumb:active {\n background-color: ${(M) => M.theme.colors.scroll.scrollBgPressed};\n }\n\n &:focus-visible {\n outline: 1px solid ${(M) => M.theme.colors.border.borderSecondary} !important;\n }\n `;\n}), kL = styled_components__WEBPACK_IMPORTED_MODULE_1___default().div(\n ({ $Optinal: e }) => (0,styled_components__WEBPACK_IMPORTED_MODULE_1__.css)`\n display: flex;\n align-items: center;\n\n ${!e && (0,styled_components__WEBPACK_IMPORTED_MODULE_1__.css)`\n gap: 8px;\n `}\n ${e && (0,styled_components__WEBPACK_IMPORTED_MODULE_1__.css)`\n gap: 20px;\n `}\n `\n), NL = (styled_components__WEBPACK_IMPORTED_MODULE_1___default().div)`\n flex-basis: 70%;\n`, TL = (styled_components__WEBPACK_IMPORTED_MODULE_1___default().div)`\n position: relative;\n`, IL = styled_components__WEBPACK_IMPORTED_MODULE_1___default().label(({ theme: e, isError: t, isDisabled: o }) => {\n const { colors: n, typography: r } = e;\n let i = n.black;\n return o ? i = n.grey : t && (i = n.black), (0,styled_components__WEBPACK_IMPORTED_MODULE_1__.css)`\n position: absolute;\n top: 10px;\n left: 10px;\n pointer-events: none;\n transition: 0.3s;\n display: inline-block;\n vertical-align: top;\n font-size: ${r.t10};\n color: ${i};\n padding: 0 5px;\n ${(a) => a.floating && (0,styled_components__WEBPACK_IMPORTED_MODULE_1__.css)`\n top: -8px;\n left: 10px;\n padding: 2px 5px;\n &::after {\n content: \'\';\n width: 100%;\n display: block;\n background-color: #fff;\n height: 14px;\n margin-top: -17px;\n }\n `}\n ${(a) => a.$active && !t && (0,styled_components__WEBPACK_IMPORTED_MODULE_1__.css)`\n color: ${n.textIcon.textSecondary};\n `}\n `;\n});\nfunction DL(e, t) {\n const {\n label: o,\n id: n,\n iconLeft: r,\n iconRight: i,\n multiLine: a,\n isDisabled: s,\n isRequired: l,\n supportText: p,\n iconSize: d,\n labelType: b,\n handleClearFn: M,\n ...u\n } = e, A = {\n disabled: s,\n ref: t,\n id: n,\n ...u\n }, [z, f] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(!1), [O, h] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(!1), [g, v] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(!1), L = (T) => {\n f(!0), h(!0), u.onFocus && u.onFocus(T);\n }, y = (T) => {\n f(T.target.value !== ""), h(!1), u.onBlur && u.onBlur(T);\n }, B = (T) => {\n v(T.target.value !== ""), u.onChange && u.onChange(T);\n }, X = () => {\n M && M(), f(!1), v(!1);\n };\n (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => {\n e.value ? f(!0) : f(!1);\n }, [e.value]);\n const F = () => {\n switch (!0) {\n case (!!r || !!i):\n return /* @__PURE__ */ c(\n RL,\n {\n ...A,\n iconLeft: r,\n iconRight: i,\n iconSize: d,\n required: l,\n $inputId: o,\n onFocus: L,\n onBlur: y,\n onChange: B,\n $hasValue: g,\n disabled: s,\n handleClearFn: X,\n placeholder: b === "inside" ? "" : e.placeholder\n }\n );\n case a:\n return /* @__PURE__ */ c(\n EL,\n {\n required: l,\n onFocus: L,\n onBlur: y,\n onChange: B,\n $hasValue: g,\n ...A\n }\n );\n default:\n return /* @__PURE__ */ c(\n gl,\n {\n required: l,\n $inputId: o,\n ...A,\n onFocus: L,\n onBlur: y,\n onChange: B,\n $hasValue: g,\n disabled: s,\n handleClearFn: X,\n placeholder: b === "inside" ? "" : e.placeholder\n }\n );\n }\n };\n return /* @__PURE__ */ c(s0, { children: b === "horizontal" ? /* @__PURE__ */ e1(kL, { $Optinal: l, children: [\n o && o.length > 0 && /* @__PURE__ */ e1(\n Ta,\n {\n variant: "label-sm-regular",\n htmlFor: o,\n isDisabled: s,\n isError: A.isError,\n className: "input__label",\n tabIndex: -1,\n $active: O,\n element: "label",\n children: [\n o,\n " ",\n l && o && o.length > 0 && /* @__PURE__ */ c(Go, { children: "*" }),\n !l && o && o.length > 0 && /* @__PURE__ */ c(ir, { children: "Optional" })\n ]\n }\n ),\n /* @__PURE__ */ e1(NL, { children: [\n F(),\n !!p && /* @__PURE__ */ c(\n Qo,\n {\n isDisabled: s,\n isError: A.isError,\n className: "supportText",\n variant: "label-sm-regular",\n element: "span",\n children: p\n }\n )\n ] })\n ] }) : b === "inside" ? /* @__PURE__ */ e1(TL, { children: [\n F(),\n /* @__PURE__ */ e1(\n IL,\n {\n floating: z.toString() === "true",\n htmlFor: o,\n isDisabled: s,\n isError: A.isError,\n $active: O,\n children: [\n o,\n " ",\n l && o && o.length > 0 && /* @__PURE__ */ c(Go, { children: "*" })\n ]\n }\n ),\n !!p && /* @__PURE__ */ c(\n Qo,\n {\n isDisabled: s,\n isError: A.isError,\n className: "supportText",\n variant: "label-sm-regular",\n element: "span",\n children: p\n }\n )\n ] }) : /* @__PURE__ */ e1(s0, { children: [\n o && o.length > 0 && /* @__PURE__ */ e1(\n Ta,\n {\n variant: "label-sm-regular",\n element: "label",\n htmlFor: o,\n isDisabled: s,\n isError: A.isError,\n className: "input__label 1",\n tabIndex: -1,\n $active: O,\n children: [\n o,\n " ",\n l && /* @__PURE__ */ c(Go, { children: "*" }),\n !l && /* @__PURE__ */ c(ir, { children: "Optional" })\n ]\n }\n ),\n F(),\n !!p && /* @__PURE__ */ c(\n Qo,\n {\n isDisabled: s,\n isError: A.isError,\n className: "supportText",\n variant: "label-sm-regular",\n element: "span",\n children: p\n }\n )\n ] }) });\n}\nconst Y2 = (0,react__WEBPACK_IMPORTED_MODULE_0__.forwardRef)(DL);\nfunction HL(e, t) {\n const { limit: o = 50, isError: n, supportText: r, value: i, ...a } = e, [s, l] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(0);\n (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => {\n i || l(0);\n }, [i]);\n const p = (M) => {\n const u = M.currentTarget.value;\n l(u.length);\n }, d = s > o;\n return /* @__PURE__ */ c(s0, { children: /* @__PURE__ */ c(\n Y2,\n {\n ref: t,\n value: i,\n isError: d || n,\n limit: o,\n supportText: d ? "You used too many characters" : r,\n onKeyUp: p,\n ...a\n }\n ) });\n}\nconst VL = (0,react__WEBPACK_IMPORTED_MODULE_0__.forwardRef)(HL);\nfunction Ia(e) {\n const { limit: t } = e;\n return t ? /* @__PURE__ */ c(VL, { isRequired: !0, ...e }) : /* @__PURE__ */ c(Y2, { isRequired: !0, ...e });\n}\nvar nt = /* @__PURE__ */ ((e) => (e.PRIMARY = "primary", e.SECONDARY = "secondary", e.TERTIARY = "tertiary", e.LINK = "link", e.MINI = "mini", e))(nt || {}), P5 = /* @__PURE__ */ ((e) => (e.SMALL = "sm", e.LARGE = "lg", e))(P5 || {});\nconst $0 = (e, t = 1) => `0 0 0 ${t}px ${e} inset`, Pt = styled_components__WEBPACK_IMPORTED_MODULE_1___default().button(\n ({ theme: e, size: t }) => {\n const {\n lineHeight: o,\n fontWeight: n,\n typography: r,\n colors: i,\n transitions: a,\n borderRadius: s,\n mixins: l,\n itemSize: p\n } = e, d = t === P5.SMALL;\n return (0,styled_components__WEBPACK_IMPORTED_MODULE_1__.css)`\n ${l.buttonReset};\n\n background-color: ${i.buttonBackgound.buttonBgPrimaryDefault};\n border-radius: ${s.base};\n padding: 0 ${d ? 0.625 : 0.75}rem;\n line-height: ${d ? o.lh32 : o.lh40};\n font-weight: ${n.regular};\n font-size: ${r.t12};\n color: ${i.buttonText.buttonTextPrimary};\n box-shadow: ${$0(i.buttonBackgound.buttonBgPrimaryDefault)};\n min-width: ${d ? p.md : p.lg};\n\n &:not(:disabled) {\n &:hover {\n background-color: ${i.buttonBackgound.buttonBgPrimaryHover};\n box-shadow: ${$0(i.buttonBackgound.buttonBgPrimaryHover)};\n transition: ${a.base};\n color: ${i.buttonText.buttonTextPrimary};\n }\n\n &:focus-visible {\n background-color: ${i.buttonBackgound.buttonBgPrimaryHover};\n box-shadow: ${$0(i.border.borderFocused, 2)};\n transition: ${a.base};\n color: ${i.buttonText.buttonTextPrimary};\n }\n\n &:active {\n background-color: ${i.buttonBackgound.buttonBgPrimaryPressed};\n box-shadow: ${$0(i.buttonBackgound.buttonBgPrimaryPressed)};\n transition: ${a.base};\n color: ${i.buttonText.buttonTextPrimaryPressed};\n }\n }\n\n &[aria-disabled=\'true\'] {\n background-color: ${i.backgrounds.bgDisabledPrimary};\n box-shadow: ${$0(i.backgrounds.bgDisabledPrimary)};\n color: ${i.textIcon.textDisabledOnbg};\n cursor: default;\n pointer-events: none;\n }\n `;\n }\n), F5 = styled_components__WEBPACK_IMPORTED_MODULE_1___default()(Pt)(\n ({ theme: { colors: e, fontWeight: t } }) => (0,styled_components__WEBPACK_IMPORTED_MODULE_1__.css)`\n background-color: ${e.buttonBackgound.buttonBgSecondaryDefault};\n color: ${e.buttonText.buttonTextSecondaryDefault};\n font-weight: ${t.regular};\n box-shadow: ${$0(e.buttonBorder.buttonBorderSecondaryDefault)};\n\n &:hover {\n background-color: ${e.buttonBackgound.buttonBgSecondaryHover} ;\n box-shadow: ${$0(e.buttonBackgound.buttonBgSecondaryHover)} ;\n }\n\n &:active {\n background-color: ${e.buttonBackgound.buttonBgSecondaryPressed} ;\n }\n\n &:focus-visible{\n background-color: ${e.buttonBackgound.buttonBgSecondaryHover} ;\n color: ${e.buttonText.buttonTextSecondaryFocused} ;\n }\n\n &[aria-disabled=\'true\'] {\n background-color: ${e.buttonBackgound.buttonBgSecondaryDefault};\n box-shadow: ${$0(e.backgrounds.bgDisabledPrimary)} ;\n cursor: default;\n color: ${e.textIcon.textDisabledOnbg};\n pointer-events: none;\n }\n `\n), PL = styled_components__WEBPACK_IMPORTED_MODULE_1___default()(Pt)(\n ({ theme: { colors: e, fontWeight: t } }) => (0,styled_components__WEBPACK_IMPORTED_MODULE_1__.css)`\n background-color: ${e.buttonBackgound.buttonBgTertiary};\n color: ${e.buttonText.buttonTextTertiary};\n box-shadow: ${$0(e.buttonBorder.buttonBorderTertiaryDefault)};\n font-weight: ${t.regular};\n\n &:not(:disabled) {\n &:hover {\n background-color: ${e.buttonBackgound.buttonBgTertiary};\n box-shadow: ${$0(e.buttonBorder.buttonBorderTertiaryHover)};\n color: ${e.buttonText.buttonTextTertiary};\n }\n\n &:focus-visible {\n background-color: ${e.buttonBackgound.buttonBgTertiary};\n box-shadow: ${$0(e.border.borderFocused, 2)};\n color: ${e.buttonText.buttonTextTertiary};\n }\n\n &:active {\n background-color: ${e.buttonBackgound.buttonBgTertiary};\n box-shadow: ${$0(e.buttonBorder.buttonBorderTertiaryPressed)};\n color: ${e.buttonText.buttonTextTertiary};\n }\n }\n\n &[aria-disabled=\'true\'] {\n background-color: ${e.buttonBackgound.buttonBgTertiary};\n cursor: default;\n color: ${e.textIcon.textDisabledNobg};\n box-shadow: ${$0(e.border.borderTertiary)};\n pointer-events: none;\n }\n `\n), FL = styled_components__WEBPACK_IMPORTED_MODULE_1___default()(Pt)(\n ({ theme: { colors: e, fontWeight: t } }) => (0,styled_components__WEBPACK_IMPORTED_MODULE_1__.css)`\n background-color: transparent;\n color: ${e.buttonText.buttonTextlinkDefault};\n font-weight: ${t.regular};\n box-shadow: none;\n\n &:not(:disabled) {\n &:hover {\n background-color: ${e.buttonBackgound.buttonBgTextlinkHover};\n box-shadow: none;\n color: ${e.buttonText.buttonTextlinkHover};\n }\n\n &:focus-visible{\n background-color: transparent;\n box-shadow: ${$0(e.border.borderFocused, 2)};\n color: ${e.buttonText.buttonTextlinkHover};\n }\n\n &:active {\n background-color: transparent;\n box-shadow: none;\n color: ${e.buttonText.buttonTextlinkPressed};\n }\n }\n\n &[aria-disabled=\'true\'] {\n background-color: transparent;\n box-shadow: none;\n color: ${e.textIcon.textDisabledNobg};\n pointer-events: none;\n }\n `\n);\nfunction B2(e) {\n const {\n buttonType: t = nt.PRIMARY,\n isDisabled: o,\n ...n\n } = e, r = { ...n };\n switch (t) {\n case nt.SECONDARY:\n return /* @__PURE__ */ c(F5, { "aria-disabled": o, ...r, children: e.children });\n case nt.TERTIARY:\n return /* @__PURE__ */ c(PL, { "aria-disabled": o, ...r, children: e.children });\n case nt.LINK:\n return /* @__PURE__ */ c(FL, { "aria-disabled": o, ...r, children: e.children });\n default:\n return /* @__PURE__ */ c(Pt, { "aria-disabled": o, ...r, children: e.children });\n }\n}\nconst P2 = styled_components__WEBPACK_IMPORTED_MODULE_1___default().div(\n ({ theme: e, orientation: t, $hasMargin: o, $default: n }) => (0,styled_components__WEBPACK_IMPORTED_MODULE_1__.css)`\n width: ${t === "vertical" ? "1px" : "100%"};\n height: ${t === "vertical" ? "100%" : "1px"};\n background-color: ${n ? e.colors.border.borderTertiary : e.colors.LavenderMist};\n margin: ${o && t === "vertical" ? "1px 4px" : o && t === "horizontal" ? "4px 1px" : "0"};\n `\n);\nstyled_components__WEBPACK_IMPORTED_MODULE_1___default().div(\n ({ orientation: e }) => (0,styled_components__WEBPACK_IMPORTED_MODULE_1__.css)`\n width: ${e === "horizontal" ? "400px" : "0"};\n height: 300px;\n `\n);\n(styled_components__WEBPACK_IMPORTED_MODULE_1___default().div)`\n width: 100%;\n`;\nfunction Ll({\n children: e,\n container: t = window.document.body\n}) {\n return (0,react_dom__WEBPACK_IMPORTED_MODULE_2__.createPortal)(e, t);\n}\nconst XL = (styled_components__WEBPACK_IMPORTED_MODULE_1___default().div)`\n position: relative;\n`;\nstyled_components__WEBPACK_IMPORTED_MODULE_1___default().div(\n ({ theme: { colors: e } }) => (0,styled_components__WEBPACK_IMPORTED_MODULE_1__.css)`\n background-color: ${e.backgrounds.bgTertiary};\n border-radius: 4px;\n `\n);\nconst X5 = styled_components__WEBPACK_IMPORTED_MODULE_1___default().div(\n ({\n $isOpenedUp: e,\n theme: {\n borderRadius: t,\n colors: o,\n cubicBezier: n,\n typography: r,\n lineHeight: i,\n GLOBAL_ITEM_HEIGHT_CONDENSED: a,\n GLOBAL_ITEM_HEIGHT: s,\n spacings: l,\n animations: p\n },\n width: d = "100%",\n coords: b,\n $bodyPadding: M\n }) => {\n const { innerWidth: u, innerHeight: A } = window, z = e ? (0,styled_components__WEBPACK_IMPORTED_MODULE_1__.css)`\n bottom: ${b ? `${A - b.bottom}px` : "100%"};\n margin-bottom: ${l.sp8};\n ` : (0,styled_components__WEBPACK_IMPORTED_MODULE_1__.css)`\n top: ${b ? `${Number(b.top + b.height)}px` : "100%"};\n margin-top: ${l.sp4};\n `;\n return (0,styled_components__WEBPACK_IMPORTED_MODULE_1__.css)`\n position: absolute;\n min-height: ${a};\n min-width: 50px;\n width: ${d};\n max-width: ${d};\n box-sizing: border-box;\n padding: ${M || l.sp8};\n background: ${o.backgrounds.bgPrimary};\n border-radius: ${t.base};\n animation-duration: 0.3s;\n animation-timing-function: ${n};\n animation-fill-mode: forwards;\n animation-name: ${p.fadeIn};\n font-size: ${r.t14};\n line-height: ${i.lh22};\n border: 1px solid ${o.border.borderTertiary};\n z-index: 10;\n\n li > div > label > span {\n width: ${d};\n display: inline-block !important;\n overflow: hidden;\n white-space: nowrap;\n text-overflow: ellipsis;\n }\n li > span {\n width: ${d};\n display: inline-block !important;\n overflow: hidden;\n white-space: nowrap;\n text-overflow: ellipsis;\n }\n ${z};\n\n &.align-center {\n left: ${b ? `${b.left + b.width / 2}px` : "50%"};\n margin-left: -${Number(parseFloat(d)) / 2}px;\n }\n\n &.align-right {\n right: ${b ? u - b.left - b.width : 0}px;\n }\n\n &.align-left {\n left: ${b ? b.left : 0}px;\n }\n\n .scrollbar-container {\n max-height: ${Number(parseFloat(s)) * 6}rem;\n }\n\n .ps--active-y {\n margin-right: -${l.sp8};\n }\n `;\n }\n), UL = typeof window < "u" ? react__WEBPACK_IMPORTED_MODULE_0__.useLayoutEffect : react__WEBPACK_IMPORTED_MODULE_0__.useEffect;\nfunction YL(e, t, o) {\n const n = (0,react__WEBPACK_IMPORTED_MODULE_0__.useRef)(t);\n UL(() => {\n n.current = t;\n }, [t]), (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => {\n const r = (o == null ? void 0 : o.current) || window;\n if (!(r && r.addEventListener))\n return;\n const i = (a) => n.current(a);\n return r.addEventListener(e, i), () => {\n r.removeEventListener(e, i);\n };\n }, [e, o]);\n}\nfunction GL(e, t, o = "mousedown") {\n YL(o, (n) => {\n const r = e == null ? void 0 : e.current;\n !r || r.contains(n.target) || t(n);\n });\n}\nconst it = ({\n body: e,\n position: t = Ol.LEFT,\n children: o,\n isShowed: n,\n onChange: r,\n isDisabled: i,\n preventCloseOnClickInside: a,\n isBodyGenerated: s,\n dropdownBodyWidth: l,\n bodyPadding: p,\n dropdownStyles: d\n}) => {\n const b = (0,react__WEBPACK_IMPORTED_MODULE_0__.useRef)(null), M = (0,react__WEBPACK_IMPORTED_MODULE_0__.useRef)(null), [u, A] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(!1), [z, f] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(!1), O = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)(\n (B) => {\n B.stopPropagation(), (!a && !n || !(B.target instanceof HTMLElement) || !M.current || !M.current.contains(B.target)) && (A(!1), r && r(!1));\n },\n [r, n, a]\n ), h = () => {\n var H;\n const B = window.pageYOffset, X = window.innerHeight, w = (((H = b.current) == null ? void 0 : H.offsetTop) || 0) - B > X / 2;\n f(w);\n };\n GL(M, O), (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => {\n h(), A(!!n);\n }, [n]);\n const g = (B) => {\n B.stopPropagation(), !i && n === void 0 && (r && r(!u), h(), A((X) => !X));\n }, v = (0,react__WEBPACK_IMPORTED_MODULE_0__.useMemo)(() => `dropdown-body align-${t}`, [t]);\n return /* @__PURE__ */ e1(\n XL,\n {\n className: "dropdown",\n ref: b,\n onClick: g,\n children: [\n /* @__PURE__ */ c("div", { children: o }),\n u && /* @__PURE__ */ c(s ? Ll : react__WEBPACK_IMPORTED_MODULE_0__.Fragment, { children: /* @__PURE__ */ c(\n X5,\n {\n $bodyPadding: p,\n ref: M,\n className: v,\n $isOpenedUp: z,\n coords: (() => s && b.current ? b.current.getBoundingClientRect() : null)(),\n width: l,\n style: d,\n children: e\n }\n ) })\n ]\n }\n );\n}, U5 = (e, t, o) => {\n react__WEBPACK_IMPORTED_MODULE_0___default().useEffect(() => {\n const n = (r) => {\n t && r.target instanceof HTMLElement && e.current && !e.current.contains(r.target) && o && o();\n };\n return document.addEventListener("mousedown", n), () => {\n document.removeEventListener("mousedown", n);\n };\n }, [e, t, o]);\n}, QL = styled_components__WEBPACK_IMPORTED_MODULE_1___default().div(\n ({ theme: { spacings: e, colors: t }, width: o }) => (0,styled_components__WEBPACK_IMPORTED_MODULE_1__.css)`\n position: relative;\n \n & > .dropdown > .dropdown-body {\n padding: ${e.sp8};\n width: ${o}px;\n background: ${t.backgrounds.bgPrimary};\n border: 1px solid ${t.border.borderPrimary};\n }\n `\n), ZL = styled_components__WEBPACK_IMPORTED_MODULE_1___default().div(\n ({ theme: { spacings: e } }) => (0,styled_components__WEBPACK_IMPORTED_MODULE_1__.css)`\n padding-bottom: ${e.sp8};\n `\n), jL = styled_components__WEBPACK_IMPORTED_MODULE_1___default().div(\n ({ theme: { spacings: e } }) => (0,styled_components__WEBPACK_IMPORTED_MODULE_1__.css)`\n display: flex;\n align-items: center;\n justify-content: flex-end;\n padding-top: ${e.sp8};\n box-sizing: border-box;\n gap: 8px;\n\n\n `\n);\nfunction Er(e) {\n const {\n children: t,\n applyText: o = "Apply",\n clearText: n = "Clear",\n position: r,\n width: i = 336,\n isDisabled: a,\n button: s,\n isShowed: l,\n isFilterValueChanged: p,\n onApplyFilter: d,\n onClearFilter: b,\n handleDropdownShowed: M,\n isEnableApplyBtn: u\n } = e, A = (0,react__WEBPACK_IMPORTED_MODULE_0__.useRef)(null);\n return U5(A, l, M), /* @__PURE__ */ c(QL, { width: i, ref: A, children: /* @__PURE__ */ c(\n it,\n {\n body: /* @__PURE__ */ e1(s0, { children: [\n /* @__PURE__ */ c(ZL, { children: t }),\n /* @__PURE__ */ c(P2, { $default: !0 }),\n /* @__PURE__ */ e1(jL, { children: [\n /* @__PURE__ */ c(\n B2,\n {\n onClick: b,\n isDisabled: !p,\n buttonType: "link",\n size: "sm",\n children: n\n }\n ),\n /* @__PURE__ */ c(\n B2,\n {\n onClick: d,\n buttonType: "primary",\n isDisabled: u,\n size: "sm",\n children: o\n }\n )\n ] })\n ] }),\n position: r,\n isShowed: l,\n preventCloseOnClickInside: !0,\n isDisabled: a,\n dropdownBodyWidth: "336px",\n children: s\n }\n ) });\n}\nconst V2 = styled_components__WEBPACK_IMPORTED_MODULE_1___default().div(({ theme: { borderRadius: e, typography: t, colors: o }, $noDigit: n, $variant: r }) => (0,styled_components__WEBPACK_IMPORTED_MODULE_1__.css)`\n height: 14px;\n min-width: 8px;\n display: flex;\n justify-content: center;\n align-items: center;\n font-size: ${t.t10};\n background-color: ${r === "blue" || r === void 0 ? `${o.backgrounds.bgTertiary}` : `${o.backgrounds.bgErrorPrimary}`};\n color: ${o.textIcon.textTertiary};\n border-radius: ${e.xxl};\n padding: 0 4px;\n ${n && (0,styled_components__WEBPACK_IMPORTED_MODULE_1__.css)`\n background-color: ${r === "blue" || r === void 0 ? `${o.backgrounds.bgTertiary}` : `${o.backgrounds.bgErrorPrimary}`};\n height: 8px;\n width: 8px;\n border-radius: ${e.xxl};\n min-width: auto;\n padding: 0;\n `}\n `), KL = styled_components__WEBPACK_IMPORTED_MODULE_1___default().div(\n ({ theme: { spacings: e }, $noDigit: t, $badgeSize: o }) => (0,styled_components__WEBPACK_IMPORTED_MODULE_1__.css)`\n position: relative;\n\n ${V2} {\n position: absolute;\n top: -${e.sp6};\n right: ${o === 1 ? "-6px" : o === 2 ? "-9.5px" : o === 3 ? "-14px" : 0};\n ${t && (0,styled_components__WEBPACK_IMPORTED_MODULE_1__.css)`\n top: -4px;\n right: -4px;\n `}\n }\n `\n), Ue = styled_components__WEBPACK_IMPORTED_MODULE_1___default().span(\n ({ theme: { mixins: e } }) => (0,styled_components__WEBPACK_IMPORTED_MODULE_1__.css)`\n display: block;\n max-width: 90px;\n ${e.ellipsis}\n `\n), vl = styled_components__WEBPACK_IMPORTED_MODULE_1___default().div(\n ({ theme: { colors: e }, $isActive: t }) => (0,styled_components__WEBPACK_IMPORTED_MODULE_1__.css)`\n display: flex;\n align-items: center;\n gap: 4px;\n &:hover {\n color: ${t ? e.textIcon.textTertiary : e.textIcon.textPressed};\n }\n &:focus {\n color: ${e.textIcon.textSecondary} !important ;\n }\n color: ${t ? e.textIcon.textTertiary : e.textIcon.textSecondary};\n ${V2} {\n width: 4px;\n height: 4px;\n background: ${t ? e.textIcon.textTertiary : e.textIcon.textSecondary};\n }\n `\n), JL = styled_components__WEBPACK_IMPORTED_MODULE_1___default().div(\n ({ theme: { spacings: e } }) => (0,styled_components__WEBPACK_IMPORTED_MODULE_1__.css)`\n display: flex;\n align-items: center;\n gap: 4px;\n flex-wrap: wrap;\n margin-bottom: ${e.sp8};\n `\n), It = styled_components__WEBPACK_IMPORTED_MODULE_1___default().span(\n ({}) => (0,styled_components__WEBPACK_IMPORTED_MODULE_1__.css)`\n display: flex;\n align-items: center;\n gap: 4px;\n svg {\n width: 12px;\n }\n `\n), Da = styled_components__WEBPACK_IMPORTED_MODULE_1___default().span(\n ({ theme: { colors: e } }) => (0,styled_components__WEBPACK_IMPORTED_MODULE_1__.css)`\n div {\n background-color: ${e.backgrounds.bgTertiary};\n }\n `\n), d3 = styled_components__WEBPACK_IMPORTED_MODULE_1___default().span(\n ({ theme: {} }) => (0,styled_components__WEBPACK_IMPORTED_MODULE_1__.css)`\n svg {\n opacity: 0.2;\n }\n `\n), _L = styled_components__WEBPACK_IMPORTED_MODULE_1___default()(F5)(\n ({\n theme: { colors: e, fontWeight: t, typography: o, lineHeight: n, itemSize: r },\n $isActive: i,\n isFiltered: a,\n ...s\n }) => (0,styled_components__WEBPACK_IMPORTED_MODULE_1__.css)`\n display: flex;\n align-items: center;\n justify-content: space-between;\n font-size: ${o.t12};\n background-color: ${e.backgrounds.bgPrimary} !important;\n border-radius: 40px;\n height: ${r.md};\n white-space: nowrap;\n min-width: min-content;\n //new\n color: ${e.textIcon.textPrimary} !important;\n box-shadow: ${$0(e.border.borderTertiary)};\n line-height: ${n.lh20};\n font-weight: ${t.regular};\n &:not(:disabled) {\n &:hover {\n ${!i && !a && (0,styled_components__WEBPACK_IMPORTED_MODULE_1__.css)`\n background-color: ${e.backgrounds.bgHoverPrimary} !important;\n box-shadow: ${$0(e.border.borderTertiary)};\n `}\n }\n\n &:focus-visible {\n color: ${e.textIcon.textPrimary} !important;\n border-color: ${e.border.borderFocused} mpo !important;\n box-shadow: ${$0(e.border.borderFocused)} !important;\n }\n\n &:active {\n background-color: ${e.blue};\n color: ${e.white};\n }\n }\n svg {\n color: ${e.textIcon.textPrimary} !important;\n }\n &:disabled {\n box-shadow: ${$0(e.border.borderDisabledOnbg)} !important;\n color: ${e.textIcon.textDisabledOnbg} !important;\n ${Da} {\n div {\n\n background-color: ${e.backgrounds.bgDisabledPrimary};\n color: ${e.textIcon.textDisabledOnbg};\n }\n }\n svg {\n color: ${e.backgrounds.bgDisabledPrimary}!important;\n background-color:${e.textIcon.textDisabledOnbg} !important;\n border-radius: ${D3.sp8};\n opacity:1;\n }\n }\n ${a && (0,styled_components__WEBPACK_IMPORTED_MODULE_1__.css)`\n color: ${e.textIcon.textSecondary} !important;\n background-color: ${e.backgrounds.bgPrimary};\n box-shadow: ${$0(e.border.borderSecondary)};\n\n svg {\n color: ${e.textIcon.textTertiary};\n opacity: 0.3;\n }\n &:hover {\n color: ${e.textIcon.textPressed} !important;\n box-shadow: ${$0(e.border.borderPressed)} !important;\n background-color: ${e.backgrounds.bgSecondary} !important;\n }\n `}\n ${i ? (0,styled_components__WEBPACK_IMPORTED_MODULE_1__.css)`\n color: ${e.textIcon.textTertiary} !important;\n background-color: ${e.backgrounds.bgPressed} !important;\n border-color: ${e.backgrounds.bgPressed} !important;\n box-shadow: ${$0(e.backgrounds.bgPressed)} !important;\n svg {\n color: ${e.textIcon.textTertiary} !important;\n opacity: 1;\n }\n ${Da} {\n div {\n background-color: ${e.backgrounds.bgPrimary};\n color: ${e.textIcon.textPressed};\n border-radius: ${D3.sp8};\n opacity:1;\n }\n }\n ` : (0,styled_components__WEBPACK_IMPORTED_MODULE_1__.css)`\n color: ${e.dark};\n background-color: ${e.white};\n svg {\n color: ${e.dark};\n }\n `}\n `\n);\nfunction Y5(e) {\n return /* @__PURE__ */ (0,react__WEBPACK_IMPORTED_MODULE_0__.createElement)(_L, { ...e, key: "isActive-" + e.$isActive });\n}\nconst $L = (e) => {\n if (typeof e == "number" && (e = e.toString()), typeof e != "string")\n throw new Error("Input is not a valid number or string");\n if (e === "0")\n return 1;\n const t = e.replace(".", "");\n return t === "99+" || t.length >= 3 ? 3 : t.length;\n}, ev = "99+";\nfunction Ae(e) {\n const { count: t = 0, children: o, noDigit: n, variant: r } = e, i = (0,react__WEBPACK_IMPORTED_MODULE_0__.useMemo)(() => Number(t) >= 1 ? Number(t) > 99 ? ev : Number(t).toString() : null, [Number(t)]), a = () => n ? /* @__PURE__ */ c(V2, { $variant: r, $noDigit: n }) : /* @__PURE__ */ c(V2, { $variant: r, children: i });\n return o ? Number(t) > 0 ? /* @__PURE__ */ e1(KL, { $noDigit: n, $badgeSize: $L(i), children: [\n /* @__PURE__ */ c(a, {}),\n o\n ] }) : /* @__PURE__ */ c(s0, { children: o }) : /* @__PURE__ */ c(a, {});\n}\nconst tv = styled_components__WEBPACK_IMPORTED_MODULE_1___default()(Y5)(\n ({ theme: { colors: e }, $isActive: t }) => (0,styled_components__WEBPACK_IMPORTED_MODULE_1__.css)`\n ${V2} {\n background-color: ${e.blue};\n\n &:not(:first-child) {\n margin-left: 8px;\n }\n }\n\n &:not(:disabled) {\n &:active {\n ${V2} {\n background-color: ${e.white};\n color: ${e.blue};\n }\n }\n }\n\n ${t && (0,styled_components__WEBPACK_IMPORTED_MODULE_1__.css)`\n &:not(:focus) {\n ${V2} {\n background-color: ${e.white};\n color: ${e.blue};\n }\n }\n `}\n\n &:disabled {\n ${V2} {\n background-color: ${e.lavenderGrey};\n color: ${e.white};\n }\n }\n `\n), ov = styled_components__WEBPACK_IMPORTED_MODULE_1___default()(Ue)``;\nfunction rv(e) {\n const { count: t, children: o, ...n } = e;\n return /* @__PURE__ */ e1(tv, { ...n, isApplied: !!t, children: [\n o && /* @__PURE__ */ c(ov, { children: o }),\n /* @__PURE__ */ c(Ae, { count: t })\n ] });\n}\nconst nv = styled_components__WEBPACK_IMPORTED_MODULE_1___default()(Ue)`\n & + & {\n &:before {\n content: \'\\\\2022\';\n display: inline-block;\n vertical-align: middle;\n margin: 0 8px;\n line-height: 1;\n }\n }\n`;\nfunction iv(e) {\n const { range: t = [], ...o } = e, n = (0,react__WEBPACK_IMPORTED_MODULE_0__.useMemo)(\n () => t.map(\n (r, i) => /* @__PURE__ */ c(nv, { children: r }, i)\n ),\n [t]\n );\n return /* @__PURE__ */ c(Y5, { ...o, isApplied: !!t.length, children: n });\n}\nfunction b3(e) {\n const { isDisabled: t, count: o, range: n, ...r } = e, i = { disabled: t, ...r };\n return n && n.length ? /* @__PURE__ */ c(iv, { range: n, ...i }) : o ? /* @__PURE__ */ c(rv, { count: o, ...i }) : /* @__PURE__ */ c(Y5, { ...i });\n}\nconst io = (e) => {\n const [t, o] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(e || !1), n = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)(\n () => o((i) => !i),\n [o]\n ), r = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)(\n (i) => o(() => i),\n [o]\n );\n return [t, n, r];\n};\nfunction av(e) {\n const [t, o] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(0), n = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)(\n (r) => {\n r.code === "ArrowDown" ? (r.preventDefault(), o(t === e - 1 ? 0 : t + 1)) : r.code === "ArrowUp" && (r.preventDefault(), o(t === 0 ? e - 1 : t - 1));\n },\n [e, t, o]\n );\n return (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => (document.addEventListener("keydown", n, !1), () => {\n document.removeEventListener("keydown", n, !1);\n }), [n]), [t, o];\n}\nconst sv = () => {\n const e = (0,react__WEBPACK_IMPORTED_MODULE_0__.useRef)(!0);\n return (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => {\n e.current = !1;\n }, []), e.current;\n};\nfunction h8(e) {\n const {\n onClearFilter: t,\n onApplyFilter: o,\n value: n,\n isDisabled: r,\n buttonText: i,\n ...a\n } = e, [s, l] = io(!1), [p, d] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(""), [b, M] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(!1), u = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)(() => {\n o && o(p), l();\n }, [o, l, p]), A = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)(() => {\n d(""), o && o(""), t && t(), l();\n }, [t]);\n (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => {\n typeof n == "string" && d(n);\n }, [n]), (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => {\n (n !== p !== b || p) && M(!0);\n }, [n, p, s, b]);\n const z = (0,react__WEBPACK_IMPORTED_MODULE_0__.useMemo)(\n () => /* @__PURE__ */ c(s0, { children: n ? /* @__PURE__ */ c(\n b3,\n {\n isDisabled: r,\n $isActive: s,\n onClick: l,\n isFiltered: !!(!s && n),\n children: /* @__PURE__ */ e1(It, { children: [\n /* @__PURE__ */ c(Ue, { children: n || i }),\n s ? /* @__PURE__ */ c(\n Z1,\n {\n name: s ? "ChevronUpDropdown" : "ChevronDownDropdown",\n size: "xxs"\n }\n ) : /* @__PURE__ */ c(d3, { onClick: A, children: /* @__PURE__ */ c(Z1, { name: "Close", color: `${v2.black}`, size: "xxs" }) })\n ] })\n }\n ) : /* @__PURE__ */ c(\n b3,\n {\n isDisabled: r,\n $isActive: s,\n onClick: l,\n isFiltered: !!(!s && n),\n children: /* @__PURE__ */ e1(It, { children: [\n /* @__PURE__ */ c(Ue, { children: n || i }),\n n ? /* @__PURE__ */ c(d3, { onClick: A, children: /* @__PURE__ */ c(Z1, { name: "Close", color: `${v2.black}`, size: "xxs" }) }) : /* @__PURE__ */ c(\n Z1,\n {\n name: s ? "ChevronUpDropdown" : "ChevronDownDropdown",\n size: "xxs"\n }\n )\n ] })\n }\n ) }),\n [l, s, r, n, i]\n ), f = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)(\n (O) => d(O.currentTarget.value),\n []\n );\n return /* @__PURE__ */ c(\n Er,\n {\n ...a,\n button: z,\n isShowed: s,\n isFilterValueChanged: b,\n onApplyFilter: u,\n onClearFilter: A,\n handleDropdownShowed: l,\n children: /* @__PURE__ */ c(\n Ia,\n {\n ...a,\n isRequired: !1,\n placeholder: "Insert text here",\n onChange: f,\n value: p,\n handleClearFn: () => {\n d("");\n }\n }\n )\n }\n );\n}\nfunction a4(e, t) {\n return a4 = Object.setPrototypeOf ? Object.setPrototypeOf.bind() : function(o, n) {\n return o.__proto__ = n, o;\n }, a4(e, t);\n}\nfunction V4(e, t) {\n e.prototype = Object.create(t.prototype), e.prototype.constructor = e, a4(e, t);\n}\nfunction gi(e) {\n return e && e.stopPropagation && e.stopPropagation(), e && e.preventDefault && e.preventDefault(), !1;\n}\nfunction Ci(e) {\n return e == null ? [] : Array.isArray(e) ? e.slice() : [e];\n}\nfunction on(e) {\n return e !== null && e.length === 1 ? e[0] : e.slice();\n}\nfunction rn(e) {\n Object.keys(e).forEach((t) => {\n typeof document < "u" && document.addEventListener(t, e[t], !1);\n });\n}\nfunction Zt(e, t) {\n return Ha(function(o, n) {\n let r = o;\n return r <= n.min && (r = n.min), r >= n.max && (r = n.max), r;\n }(e, t), t);\n}\nfunction Ha(e, t) {\n const o = (e - t.min) % t.step;\n let n = e - o;\n return 2 * Math.abs(o) >= t.step && (n += o > 0 ? t.step : -t.step), parseFloat(n.toFixed(5));\n}\nlet Va = function(e) {\n function t(n) {\n var r;\n (r = e.call(this, n) || this).onKeyUp = () => {\n r.onEnd();\n }, r.onMouseUp = () => {\n r.onEnd(r.getMouseEventMap());\n }, r.onTouchEnd = (s) => {\n s.preventDefault(), r.onEnd(r.getTouchEventMap());\n }, r.onBlur = () => {\n r.setState({ index: -1 }, r.onEnd(r.getKeyDownEventMap()));\n }, r.onMouseMove = (s) => {\n r.setState({ pending: !0 });\n const l = r.getMousePosition(s), p = r.getDiffPosition(l[0]), d = r.getValueFromPosition(p);\n r.move(d);\n }, r.onTouchMove = (s) => {\n if (s.touches.length > 1)\n return;\n r.setState({ pending: !0 });\n const l = r.getTouchPosition(s);\n if (r.isScrolling === void 0) {\n const b = l[0] - r.startPosition[0], M = l[1] - r.startPosition[1];\n r.isScrolling = Math.abs(M) > Math.abs(b);\n }\n if (r.isScrolling)\n return void r.setState({ index: -1 });\n const p = r.getDiffPosition(l[0]), d = r.getValueFromPosition(p);\n r.move(d);\n }, r.onKeyDown = (s) => {\n if (!(s.ctrlKey || s.shiftKey || s.altKey || s.metaKey))\n switch (r.setState({ pending: !0 }), s.key) {\n case "ArrowLeft":\n case "ArrowDown":\n case "Left":\n case "Down":\n s.preventDefault(), r.moveDownByStep();\n break;\n case "ArrowRight":\n case "ArrowUp":\n case "Right":\n case "Up":\n s.preventDefault(), r.moveUpByStep();\n break;\n case "Home":\n s.preventDefault(), r.move(r.props.min);\n break;\n case "End":\n s.preventDefault(), r.move(r.props.max);\n break;\n case "PageDown":\n s.preventDefault(), r.moveDownByStep(r.props.pageFn(r.props.step));\n break;\n case "PageUp":\n s.preventDefault(), r.moveUpByStep(r.props.pageFn(r.props.step));\n }\n }, r.onSliderMouseDown = (s) => {\n if (!r.props.disabled && s.button !== 2) {\n if (r.setState({ pending: !0 }), !r.props.snapDragDisabled) {\n const l = r.getMousePosition(s);\n r.forceValueFromPosition(l[0], (p) => {\n r.start(p, l[0]), rn(r.getMouseEventMap());\n });\n }\n gi(s);\n }\n }, r.onSliderClick = (s) => {\n if (!r.props.disabled && r.props.onSliderClick && !r.hasMoved) {\n const l = r.getMousePosition(s), p = Zt(r.calcValue(r.calcOffsetFromPosition(l[0])), r.props);\n r.props.onSliderClick(p);\n }\n }, r.createOnKeyDown = (s) => (l) => {\n r.props.disabled || (r.start(s), rn(r.getKeyDownEventMap()), gi(l));\n }, r.createOnMouseDown = (s) => (l) => {\n if (r.props.disabled || l.button === 2)\n return;\n r.setState({ pending: !0 });\n const p = r.getMousePosition(l);\n r.start(s, p[0]), rn(r.getMouseEventMap()), gi(l);\n }, r.createOnTouchStart = (s) => (l) => {\n if (r.props.disabled || l.touches.length > 1)\n return;\n r.setState({ pending: !0 });\n const p = r.getTouchPosition(l);\n r.startPosition = p, r.isScrolling = void 0, r.start(s, p[0]), rn(r.getTouchEventMap()), function(d) {\n d.stopPropagation && d.stopPropagation();\n }(l);\n }, r.handleResize = () => {\n const s = window.setTimeout(() => {\n r.pendingResizeTimeouts.shift(), r.resize();\n }, 0);\n r.pendingResizeTimeouts.push(s);\n }, r.renderThumb = (s, l) => {\n const p = r.props.thumbClassName + " " + r.props.thumbClassName + "-" + l + " " + (r.state.index === l ? r.props.thumbActiveClassName : ""), d = { ref: (M) => {\n r["thumb" + l] = M;\n }, key: r.props.thumbClassName + "-" + l, className: p, style: s, onMouseDown: r.createOnMouseDown(l), onTouchStart: r.createOnTouchStart(l), onFocus: r.createOnKeyDown(l), tabIndex: 0, role: "slider", "aria-orientation": r.props.orientation, "aria-valuenow": r.state.value[l], "aria-valuemin": r.props.min, "aria-valuemax": r.props.max, "aria-label": Array.isArray(r.props.ariaLabel) ? r.props.ariaLabel[l] : r.props.ariaLabel, "aria-labelledby": Array.isArray(r.props.ariaLabelledby) ? r.props.ariaLabelledby[l] : r.props.ariaLabelledby, "aria-disabled": r.props.disabled }, b = { index: l, value: on(r.state.value), valueNow: r.state.value[l] };\n return r.props.ariaValuetext && (d["aria-valuetext"] = typeof r.props.ariaValuetext == "string" ? r.props.ariaValuetext : r.props.ariaValuetext(b)), r.props.renderThumb(d, b);\n }, r.renderTrack = (s, l, p) => {\n const d = { key: r.props.trackClassName + "-" + s, className: r.props.trackClassName + " " + r.props.trackClassName + "-" + s, style: r.buildTrackStyle(l, r.state.upperBound - p) }, b = { index: s, value: on(r.state.value) };\n return r.props.renderTrack(d, b);\n };\n let i = Ci(n.value);\n i.length || (i = Ci(n.defaultValue)), r.pendingResizeTimeouts = [];\n const a = [];\n for (let s = 0; s < i.length; s += 1)\n i[s] = Zt(i[s], n), a.push(s);\n return r.resizeObserver = null, r.resizeElementRef = react__WEBPACK_IMPORTED_MODULE_0___default().createRef(), r.state = { index: -1, upperBound: 0, sliderLength: 0, value: i, zIndices: a }, r;\n }\n V4(t, e);\n var o = t.prototype;\n return o.componentDidMount = function() {\n typeof window < "u" && (this.resizeObserver = new ResizeObserver(this.handleResize), this.resizeObserver.observe(this.resizeElementRef.current), this.resize());\n }, t.getDerivedStateFromProps = function(n, r) {\n const i = Ci(n.value);\n return i.length ? r.pending ? null : { value: i.map((a) => Zt(a, n)) } : null;\n }, o.componentDidUpdate = function() {\n this.state.upperBound === 0 && this.resize();\n }, o.componentWillUnmount = function() {\n this.clearPendingResizeTimeouts(), this.resizeObserver && this.resizeObserver.disconnect();\n }, o.onEnd = function(n) {\n n && function(r) {\n Object.keys(r).forEach((i) => {\n typeof document < "u" && document.removeEventListener(i, r[i], !1);\n });\n }(n), this.hasMoved && this.fireChangeEvent("onAfterChange"), this.setState({ pending: !1 }), this.hasMoved = !1;\n }, o.getValue = function() {\n return on(this.state.value);\n }, o.getClosestIndex = function(n) {\n let r = Number.MAX_VALUE, i = -1;\n const { value: a } = this.state, s = a.length;\n for (let l = 0; l < s; l += 1) {\n const p = this.calcOffset(a[l]), d = Math.abs(n - p);\n d < r && (r = d, i = l);\n }\n return i;\n }, o.getMousePosition = function(n) {\n return [n["page" + this.axisKey()], n["page" + this.orthogonalAxisKey()]];\n }, o.getTouchPosition = function(n) {\n const r = n.touches[0];\n return [r["page" + this.axisKey()], r["page" + this.orthogonalAxisKey()]];\n }, o.getKeyDownEventMap = function() {\n return { keydown: this.onKeyDown, keyup: this.onKeyUp, focusout: this.onBlur };\n }, o.getMouseEventMap = function() {\n return { mousemove: this.onMouseMove, mouseup: this.onMouseUp };\n }, o.getTouchEventMap = function() {\n return { touchmove: this.onTouchMove, touchend: this.onTouchEnd };\n }, o.getValueFromPosition = function(n) {\n const r = n / (this.state.sliderLength - this.state.thumbSize) * (this.props.max - this.props.min);\n return Zt(this.state.startValue + r, this.props);\n }, o.getDiffPosition = function(n) {\n let r = n - this.state.startPosition;\n return this.props.invert && (r *= -1), r;\n }, o.resize = function() {\n const { slider: n, thumb0: r } = this;\n if (!n || !r)\n return;\n const i = this.sizeKey(), a = n.getBoundingClientRect(), s = n[i], l = a[this.posMaxKey()], p = a[this.posMinKey()], d = r.getBoundingClientRect()[i.replace("client", "").toLowerCase()], b = s - d, M = Math.abs(l - p);\n this.state.upperBound === b && this.state.sliderLength === M && this.state.thumbSize === d || this.setState({ upperBound: b, sliderLength: M, thumbSize: d });\n }, o.calcOffset = function(n) {\n const r = this.props.max - this.props.min;\n return r === 0 ? 0 : (n - this.props.min) / r * this.state.upperBound;\n }, o.calcValue = function(n) {\n return n / this.state.upperBound * (this.props.max - this.props.min) + this.props.min;\n }, o.calcOffsetFromPosition = function(n) {\n const { slider: r } = this, i = r.getBoundingClientRect(), a = i[this.posMaxKey()], s = i[this.posMinKey()];\n let l = n - (window["page" + this.axisKey() + "Offset"] + (this.props.invert ? a : s));\n return this.props.invert && (l = this.state.sliderLength - l), l -= this.state.thumbSize / 2, l;\n }, o.forceValueFromPosition = function(n, r) {\n const i = this.calcOffsetFromPosition(n), a = this.getClosestIndex(i), s = Zt(this.calcValue(i), this.props), l = this.state.value.slice();\n l[a] = s;\n for (let p = 0; p < l.length - 1; p += 1)\n if (l[p + 1] - l[p] < this.props.minDistance)\n return;\n this.fireChangeEvent("onBeforeChange"), this.hasMoved = !0, this.setState({ value: l }, () => {\n r(a), this.fireChangeEvent("onChange");\n });\n }, o.clearPendingResizeTimeouts = function() {\n do {\n const n = this.pendingResizeTimeouts.shift();\n clearTimeout(n);\n } while (this.pendingResizeTimeouts.length);\n }, o.start = function(n, r) {\n const i = this["thumb" + n];\n i && i.focus();\n const { zIndices: a } = this.state;\n a.splice(a.indexOf(n), 1), a.push(n), this.setState((s) => ({ startValue: s.value[n], startPosition: r !== void 0 ? r : s.startPosition, index: n, zIndices: a }));\n }, o.moveUpByStep = function(n) {\n n === void 0 && (n = this.props.step);\n const r = this.state.value[this.state.index], i = Zt(this.props.invert && this.props.orientation === "horizontal" ? r - n : r + n, this.props);\n this.move(Math.min(i, this.props.max));\n }, o.moveDownByStep = function(n) {\n n === void 0 && (n = this.props.step);\n const r = this.state.value[this.state.index], i = Zt(this.props.invert && this.props.orientation === "horizontal" ? r + n : r - n, this.props);\n this.move(Math.max(i, this.props.min));\n }, o.move = function(n) {\n const r = this.state.value.slice(), { index: i } = this.state, { length: a } = r, s = r[i];\n if (n === s)\n return;\n this.hasMoved || this.fireChangeEvent("onBeforeChange"), this.hasMoved = !0;\n const { pearling: l, max: p, min: d, minDistance: b } = this.props;\n if (!l) {\n if (i > 0) {\n const M = r[i - 1];\n n < M + b && (n = M + b);\n }\n if (i < a - 1) {\n const M = r[i + 1];\n n > M - b && (n = M - b);\n }\n }\n r[i] = n, l && a > 1 && (n > s ? (this.pushSucceeding(r, b, i), function(M, u, A, z) {\n for (let f = 0; f < M; f += 1) {\n const O = z - f * A;\n u[M - 1 - f] > O && (u[M - 1 - f] = O);\n }\n }(a, r, b, p)) : n < s && (this.pushPreceding(r, b, i), function(M, u, A, z) {\n for (let f = 0; f < M; f += 1) {\n const O = z + f * A;\n u[f] < O && (u[f] = O);\n }\n }(a, r, b, d))), this.setState({ value: r }, this.fireChangeEvent.bind(this, "onChange"));\n }, o.pushSucceeding = function(n, r, i) {\n let a, s;\n for (a = i, s = n[a] + r; n[a + 1] !== null && s > n[a + 1]; a += 1, s = n[a] + r)\n n[a + 1] = Ha(s, this.props);\n }, o.pushPreceding = function(n, r, i) {\n for (let a = i, s = n[a] - r; n[a - 1] !== null && s < n[a - 1]; a -= 1, s = n[a] - r)\n n[a - 1] = Ha(s, this.props);\n }, o.axisKey = function() {\n return this.props.orientation === "vertical" ? "Y" : "X";\n }, o.orthogonalAxisKey = function() {\n return this.props.orientation === "vertical" ? "X" : "Y";\n }, o.posMinKey = function() {\n return this.props.orientation === "vertical" ? this.props.invert ? "bottom" : "top" : this.props.invert ? "right" : "left";\n }, o.posMaxKey = function() {\n return this.props.orientation === "vertical" ? this.props.invert ? "top" : "bottom" : this.props.invert ? "left" : "right";\n }, o.sizeKey = function() {\n return this.props.orientation === "vertical" ? "clientHeight" : "clientWidth";\n }, o.fireChangeEvent = function(n) {\n this.props[n] && this.props[n](on(this.state.value), this.state.index);\n }, o.buildThumbStyle = function(n, r) {\n const i = { position: "absolute", touchAction: "none", willChange: this.state.index >= 0 ? this.posMinKey() : void 0, zIndex: this.state.zIndices.indexOf(r) + 1 };\n return i[this.posMinKey()] = n + "px", i;\n }, o.buildTrackStyle = function(n, r) {\n const i = { position: "absolute", willChange: this.state.index >= 0 ? this.posMinKey() + "," + this.posMaxKey() : void 0 };\n return i[this.posMinKey()] = n, i[this.posMaxKey()] = r, i;\n }, o.buildMarkStyle = function(n) {\n var r;\n return (r = { position: "absolute" })[this.posMinKey()] = n, r;\n }, o.renderThumbs = function(n) {\n const { length: r } = n, i = [];\n for (let s = 0; s < r; s += 1)\n i[s] = this.buildThumbStyle(n[s], s);\n const a = [];\n for (let s = 0; s < r; s += 1)\n a[s] = this.renderThumb(i[s], s);\n return a;\n }, o.renderTracks = function(n) {\n const r = [], i = n.length - 1;\n r.push(this.renderTrack(0, 0, n[0]));\n for (let a = 0; a < i; a += 1)\n r.push(this.renderTrack(a + 1, n[a], n[a + 1]));\n return r.push(this.renderTrack(i + 1, n[i], this.state.upperBound)), r;\n }, o.renderMarks = function() {\n let { marks: n } = this.props;\n const r = this.props.max - this.props.min + 1;\n return typeof n == "boolean" ? n = Array.from({ length: r }).map((i, a) => a) : typeof n == "number" && (n = Array.from({ length: r }).map((i, a) => a).filter((i) => i % n == 0)), n.map(parseFloat).sort((i, a) => i - a).map((i) => {\n const a = this.calcOffset(i), s = { key: i, className: this.props.markClassName, style: this.buildMarkStyle(a) };\n return this.props.renderMark(s);\n });\n }, o.render = function() {\n const n = [], { value: r } = this.state, i = r.length;\n for (let p = 0; p < i; p += 1)\n n[p] = this.calcOffset(r[p], p);\n const a = this.props.withTracks ? this.renderTracks(n) : null, s = this.renderThumbs(n), l = this.props.marks ? this.renderMarks() : null;\n return react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", { ref: (p) => {\n this.slider = p, this.resizeElementRef.current = p;\n }, style: { position: "relative" }, className: this.props.className + (this.props.disabled ? " disabled" : ""), onMouseDown: this.onSliderMouseDown, onClick: this.onSliderClick }, a, s, l);\n }, t;\n}((react__WEBPACK_IMPORTED_MODULE_0___default().Component));\nVa.displayName = "ReactSlider", Va.defaultProps = { min: 0, max: 100, step: 1, pageFn: (e) => 10 * e, minDistance: 0, defaultValue: 0, orientation: "horizontal", className: "slider", thumbClassName: "thumb", thumbActiveClassName: "active", trackClassName: "track", markClassName: "mark", withTracks: !0, pearling: !1, disabled: !1, snapDragDisabled: !1, invert: !1, marks: [], renderThumb: (e) => react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", e), renderTrack: (e) => react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", e), renderMark: (e) => react__WEBPACK_IMPORTED_MODULE_0___default().createElement("span", e) };\nvar cv = Va;\n(styled_components__WEBPACK_IMPORTED_MODULE_1___default().div)`\n width: 100%;\n min-width: 480px;\n`;\nconst lv = (styled_components__WEBPACK_IMPORTED_MODULE_1___default().div)`\n color: transparent !important ;\n\n :focus-visible{\n outline: none !important;\n }\n\n `, pv = (styled_components__WEBPACK_IMPORTED_MODULE_1___default().div)`\n position: absolute;\n top: -8px;\n background: transparent;\n line-height: 24px;\n width: 15px;\n :focus-visible{\n outline: none !important;\n } \n\n `, dv = styled_components__WEBPACK_IMPORTED_MODULE_1___default().div(\n ({\n theme: { borderRadius: e, colors: t, transitions: o }\n }) => (0,styled_components__WEBPACK_IMPORTED_MODULE_1__.css)`\n .horizontal-slider {\n width: 100%;\n max-width: 500px;\n height: 50px;\n}\n\n.horizontal-slider .example-track {\n top: 20px;\n height: 4px;\n border-radius: ${e.base};\n \n}\n\n.horizontal-slider .example-thumb {\n z-index: 0 !important;\n top: 14px; \n width: 16px;\n height: 16px;\n border-radius: 50%;\n background-color: ${t.backgrounds.bgTertiary};\n color: white;\n cursor: pointer;\n box-sizing: border-box;\n transition: ${o.base};\n border: none;\n \n &:hover,\n &:active {\n box-shadow: 0 0 0px 10px ${t.backgrounds.bgReadOnly};\n transform: scale(1);\n \n }\n\n \n}\n.example-thumb{\n &:focus-visible{\n outline: none !important;\n }\n}\n\n.example-track.example-track-0 {\n background: ${t.slider.sliderBgDefault};\n}\n\n.example-track.example-track-1 {\n background: ${t.backgrounds.bgTertiary};\n}\n\n.example-track.example-track-2 {\n background: ${t.slider.sliderBgDefault};\n}\n\n\n `\n);\nfunction ar(e, t) {\n if (e == null)\n return {};\n var o = {};\n for (var n in e)\n if ({}.hasOwnProperty.call(e, n)) {\n if (t.includes(n))\n continue;\n o[n] = e[n];\n }\n return o;\n}\nfunction a0() {\n return a0 = Object.assign ? Object.assign.bind() : function(e) {\n for (var t = 1; t < arguments.length; t++) {\n var o = arguments[t];\n for (var n in o)\n ({}).hasOwnProperty.call(o, n) && (e[n] = o[n]);\n }\n return e;\n }, a0.apply(null, arguments);\n}\nvar ql = react__WEBPACK_IMPORTED_MODULE_0__.createContext(), yl = react__WEBPACK_IMPORTED_MODULE_0__.createContext();\nfunction bv(e) {\n var t = e.children, o = react__WEBPACK_IMPORTED_MODULE_0__.useState(null), n = o[0], r = o[1], i = react__WEBPACK_IMPORTED_MODULE_0__.useRef(!1);\n react__WEBPACK_IMPORTED_MODULE_0__.useEffect(function() {\n return function() {\n i.current = !0;\n };\n }, []);\n var a = react__WEBPACK_IMPORTED_MODULE_0__.useCallback(function(s) {\n i.current || r(s);\n }, []);\n return /* @__PURE__ */ react__WEBPACK_IMPORTED_MODULE_0__.createElement(ql.Provider, {\n value: n\n }, /* @__PURE__ */ react__WEBPACK_IMPORTED_MODULE_0__.createElement(yl.Provider, {\n value: a\n }, t));\n}\nvar wl = function(t) {\n return Array.isArray(t) ? t[0] : t;\n}, xl = function(t) {\n if (typeof t == "function") {\n for (var o = arguments.length, n = new Array(o > 1 ? o - 1 : 0), r = 1; r < o; r++)\n n[r - 1] = arguments[r];\n return t.apply(void 0, n);\n }\n}, Pa = function(t, o) {\n if (typeof t == "function")\n return xl(t, o);\n t != null && (t.current = o);\n}, O8 = function(t) {\n return t.reduce(function(o, n) {\n var r = n[0], i = n[1];\n return o[r] = i, o;\n }, {});\n}, f8 = typeof window < "u" && window.document && window.document.createElement ? react__WEBPACK_IMPORTED_MODULE_0__.useLayoutEffect : react__WEBPACK_IMPORTED_MODULE_0__.useEffect, F2 = "top", de = "bottom", be = "right", X2 = "left", G5 = "auto", kr = [F2, de, be, X2], Y3 = "start", sr = "end", Mv = "clippingParents", Wl = "viewport", Wo = "popper", Av = "reference", g8 = /* @__PURE__ */ kr.reduce(function(e, t) {\n return e.concat([t + "-" + Y3, t + "-" + sr]);\n}, []), Rl = /* @__PURE__ */ [].concat(kr, [G5]).reduce(function(e, t) {\n return e.concat([t, t + "-" + Y3, t + "-" + sr]);\n}, []), uv = "beforeRead", zv = "read", hv = "afterRead", Ov = "beforeMain", fv = "main", gv = "afterMain", Cv = "beforeWrite", mv = "write", Lv = "afterWrite", vv = [uv, zv, hv, Ov, fv, gv, Cv, mv, Lv];\nfunction Ye(e) {\n return e ? (e.nodeName || "").toLowerCase() : null;\n}\nfunction te(e) {\n if (e == null)\n return window;\n if (e.toString() !== "[object Window]") {\n var t = e.ownerDocument;\n return t && t.defaultView || window;\n }\n return e;\n}\nfunction M3(e) {\n var t = te(e).Element;\n return e instanceof t || e instanceof Element;\n}\nfunction le(e) {\n var t = te(e).HTMLElement;\n return e instanceof t || e instanceof HTMLElement;\n}\nfunction Q5(e) {\n if (typeof ShadowRoot > "u")\n return !1;\n var t = te(e).ShadowRoot;\n return e instanceof t || e instanceof ShadowRoot;\n}\nfunction qv(e) {\n var t = e.state;\n Object.keys(t.elements).forEach(function(o) {\n var n = t.styles[o] || {}, r = t.attributes[o] || {}, i = t.elements[o];\n !le(i) || !Ye(i) || (Object.assign(i.style, n), Object.keys(r).forEach(function(a) {\n var s = r[a];\n s === !1 ? i.removeAttribute(a) : i.setAttribute(a, s === !0 ? "" : s);\n }));\n });\n}\nfunction yv(e) {\n var t = e.state, o = {\n popper: {\n position: t.options.strategy,\n left: "0",\n top: "0",\n margin: "0"\n },\n arrow: {\n position: "absolute"\n },\n reference: {}\n };\n return Object.assign(t.elements.popper.style, o.popper), t.styles = o, t.elements.arrow && Object.assign(t.elements.arrow.style, o.arrow), function() {\n Object.keys(t.elements).forEach(function(n) {\n var r = t.elements[n], i = t.attributes[n] || {}, a = Object.keys(t.styles.hasOwnProperty(n) ? t.styles[n] : o[n]), s = a.reduce(function(l, p) {\n return l[p] = "", l;\n }, {});\n !le(r) || !Ye(r) || (Object.assign(r.style, s), Object.keys(i).forEach(function(l) {\n r.removeAttribute(l);\n }));\n });\n };\n}\nconst wv = {\n name: "applyStyles",\n enabled: !0,\n phase: "write",\n fn: qv,\n effect: yv,\n requires: ["computeStyles"]\n};\nfunction He(e) {\n return e.split("-")[0];\n}\nvar s3 = Math.max, s4 = Math.min, G3 = Math.round;\nfunction Fa() {\n var e = navigator.userAgentData;\n return e != null && e.brands && Array.isArray(e.brands) ? e.brands.map(function(t) {\n return t.brand + "/" + t.version;\n }).join(" ") : navigator.userAgent;\n}\nfunction Bl() {\n return !/^((?!chrome|android).)*safari/i.test(Fa());\n}\nfunction Q3(e, t, o) {\n t === void 0 && (t = !1), o === void 0 && (o = !1);\n var n = e.getBoundingClientRect(), r = 1, i = 1;\n t && le(e) && (r = e.offsetWidth > 0 && G3(n.width) / e.offsetWidth || 1, i = e.offsetHeight > 0 && G3(n.height) / e.offsetHeight || 1);\n var a = M3(e) ? te(e) : window, s = a.visualViewport, l = !Bl() && o, p = (n.left + (l && s ? s.offsetLeft : 0)) / r, d = (n.top + (l && s ? s.offsetTop : 0)) / i, b = n.width / r, M = n.height / i;\n return {\n width: b,\n height: M,\n top: d,\n right: p + b,\n bottom: d + M,\n left: p,\n x: p,\n y: d\n };\n}\nfunction Z5(e) {\n var t = Q3(e), o = e.offsetWidth, n = e.offsetHeight;\n return Math.abs(t.width - o) <= 1 && (o = t.width), Math.abs(t.height - n) <= 1 && (n = t.height), {\n x: e.offsetLeft,\n y: e.offsetTop,\n width: o,\n height: n\n };\n}\nfunction Sl(e, t) {\n var o = t.getRootNode && t.getRootNode();\n if (e.contains(t))\n return !0;\n if (o && Q5(o)) {\n var n = t;\n do {\n if (n && e.isSameNode(n))\n return !0;\n n = n.parentNode || n.host;\n } while (n);\n }\n return !1;\n}\nfunction pt(e) {\n return te(e).getComputedStyle(e);\n}\nfunction xv(e) {\n return ["table", "td", "th"].indexOf(Ye(e)) >= 0;\n}\nfunction Ft(e) {\n return ((M3(e) ? e.ownerDocument : (\n // $FlowFixMe[prop-missing]\n e.document\n )) || window.document).documentElement;\n}\nfunction P4(e) {\n return Ye(e) === "html" ? e : (\n // this is a quicker (but less type safe) way to save quite some bytes from the bundle\n // $FlowFixMe[incompatible-return]\n // $FlowFixMe[prop-missing]\n e.assignedSlot || // step into the shadow DOM of the parent of a slotted node\n e.parentNode || // DOM Element detected\n (Q5(e) ? e.host : null) || // ShadowRoot detected\n // $FlowFixMe[incompatible-call]: HTMLElement is a Node\n Ft(e)\n );\n}\nfunction C8(e) {\n return !le(e) || // https://github.com/popperjs/popper-core/issues/837\n pt(e).position === "fixed" ? null : e.offsetParent;\n}\nfunction Wv(e) {\n var t = /firefox/i.test(Fa()), o = /Trident/i.test(Fa());\n if (o && le(e)) {\n var n = pt(e);\n if (n.position === "fixed")\n return null;\n }\n var r = P4(e);\n for (Q5(r) && (r = r.host); le(r) && ["html", "body"].indexOf(Ye(r)) < 0; ) {\n var i = pt(r);\n if (i.transform !== "none" || i.perspective !== "none" || i.contain === "paint" || ["transform", "perspective"].indexOf(i.willChange) !== -1 || t && i.willChange === "filter" || t && i.filter && i.filter !== "none")\n return r;\n r = r.parentNode;\n }\n return null;\n}\nfunction Nr(e) {\n for (var t = te(e), o = C8(e); o && xv(o) && pt(o).position === "static"; )\n o = C8(o);\n return o && (Ye(o) === "html" || Ye(o) === "body" && pt(o).position === "static") ? t : o || Wv(e) || t;\n}\nfunction j5(e) {\n return ["top", "bottom"].indexOf(e) >= 0 ? "x" : "y";\n}\nfunction Zo(e, t, o) {\n return s3(e, s4(t, o));\n}\nfunction Rv(e, t, o) {\n var n = Zo(e, t, o);\n return n > o ? o : n;\n}\nfunction El() {\n return {\n top: 0,\n right: 0,\n bottom: 0,\n left: 0\n };\n}\nfunction kl(e) {\n return Object.assign({}, El(), e);\n}\nfunction Nl(e, t) {\n return t.reduce(function(o, n) {\n return o[n] = e, o;\n }, {});\n}\nvar Bv = function(t, o) {\n return t = typeof t == "function" ? t(Object.assign({}, o.rects, {\n placement: o.placement\n })) : t, kl(typeof t != "number" ? t : Nl(t, kr));\n};\nfunction Sv(e) {\n var t, o = e.state, n = e.name, r = e.options, i = o.elements.arrow, a = o.modifiersData.popperOffsets, s = He(o.placement), l = j5(s), p = [X2, be].indexOf(s) >= 0, d = p ? "height" : "width";\n if (!(!i || !a)) {\n var b = Bv(r.padding, o), M = Z5(i), u = l === "y" ? F2 : X2, A = l === "y" ? de : be, z = o.rects.reference[d] + o.rects.reference[l] - a[l] - o.rects.popper[d], f = a[l] - o.rects.reference[l], O = Nr(i), h = O ? l === "y" ? O.clientHeight || 0 : O.clientWidth || 0 : 0, g = z / 2 - f / 2, v = b[u], L = h - M[d] - b[A], y = h / 2 - M[d] / 2 + g, B = Zo(v, y, L), X = l;\n o.modifiersData[n] = (t = {}, t[X] = B, t.centerOffset = B - y, t);\n }\n}\nfunction Ev(e) {\n var t = e.state, o = e.options, n = o.element, r = n === void 0 ? "[data-popper-arrow]" : n;\n r != null && (typeof r == "string" && (r = t.elements.popper.querySelector(r), !r) || Sl(t.elements.popper, r) && (t.elements.arrow = r));\n}\nconst kv = {\n name: "arrow",\n enabled: !0,\n phase: "main",\n fn: Sv,\n effect: Ev,\n requires: ["popperOffsets"],\n requiresIfExists: ["preventOverflow"]\n};\nfunction Z3(e) {\n return e.split("-")[1];\n}\nvar Nv = {\n top: "auto",\n right: "auto",\n bottom: "auto",\n left: "auto"\n};\nfunction Tv(e, t) {\n var o = e.x, n = e.y, r = t.devicePixelRatio || 1;\n return {\n x: G3(o * r) / r || 0,\n y: G3(n * r) / r || 0\n };\n}\nfunction m8(e) {\n var t, o = e.popper, n = e.popperRect, r = e.placement, i = e.variation, a = e.offsets, s = e.position, l = e.gpuAcceleration, p = e.adaptive, d = e.roundOffsets, b = e.isFixed, M = a.x, u = M === void 0 ? 0 : M, A = a.y, z = A === void 0 ? 0 : A, f = typeof d == "function" ? d({\n x: u,\n y: z\n }) : {\n x: u,\n y: z\n };\n u = f.x, z = f.y;\n var O = a.hasOwnProperty("x"), h = a.hasOwnProperty("y"), g = X2, v = F2, L = window;\n if (p) {\n var y = Nr(o), B = "clientHeight", X = "clientWidth";\n if (y === te(o) && (y = Ft(o), pt(y).position !== "static" && s === "absolute" && (B = "scrollHeight", X = "scrollWidth")), y = y, r === F2 || (r === X2 || r === be) && i === sr) {\n v = de;\n var F = b && y === L && L.visualViewport ? L.visualViewport.height : (\n // $FlowFixMe[prop-missing]\n y[B]\n );\n z -= F - n.height, z *= l ? 1 : -1;\n }\n if (r === X2 || (r === F2 || r === de) && i === sr) {\n g = be;\n var T = b && y === L && L.visualViewport ? L.visualViewport.width : (\n // $FlowFixMe[prop-missing]\n y[X]\n );\n u -= T - n.width, u *= l ? 1 : -1;\n }\n }\n var w = Object.assign({\n position: s\n }, p && Nv), H = d === !0 ? Tv({\n x: u,\n y: z\n }, te(o)) : {\n x: u,\n y: z\n };\n if (u = H.x, z = H.y, l) {\n var C;\n return Object.assign({}, w, (C = {}, C[v] = h ? "0" : "", C[g] = O ? "0" : "", C.transform = (L.devicePixelRatio || 1) <= 1 ? "translate(" + u + "px, " + z + "px)" : "translate3d(" + u + "px, " + z + "px, 0)", C));\n }\n return Object.assign({}, w, (t = {}, t[v] = h ? z + "px" : "", t[g] = O ? u + "px" : "", t.transform = "", t));\n}\nfunction Iv(e) {\n var t = e.state, o = e.options, n = o.gpuAcceleration, r = n === void 0 ? !0 : n, i = o.adaptive, a = i === void 0 ? !0 : i, s = o.roundOffsets, l = s === void 0 ? !0 : s, p = {\n placement: He(t.placement),\n variation: Z3(t.placement),\n popper: t.elements.popper,\n popperRect: t.rects.popper,\n gpuAcceleration: r,\n isFixed: t.options.strategy === "fixed"\n };\n t.modifiersData.popperOffsets != null && (t.styles.popper = Object.assign({}, t.styles.popper, m8(Object.assign({}, p, {\n offsets: t.modifiersData.popperOffsets,\n position: t.options.strategy,\n adaptive: a,\n roundOffsets: l\n })))), t.modifiersData.arrow != null && (t.styles.arrow = Object.assign({}, t.styles.arrow, m8(Object.assign({}, p, {\n offsets: t.modifiersData.arrow,\n position: "absolute",\n adaptive: !1,\n roundOffsets: l\n })))), t.attributes.popper = Object.assign({}, t.attributes.popper, {\n "data-popper-placement": t.placement\n });\n}\nconst Dv = {\n name: "computeStyles",\n enabled: !0,\n phase: "beforeWrite",\n fn: Iv,\n data: {}\n};\nvar nn = {\n passive: !0\n};\nfunction Hv(e) {\n var t = e.state, o = e.instance, n = e.options, r = n.scroll, i = r === void 0 ? !0 : r, a = n.resize, s = a === void 0 ? !0 : a, l = te(t.elements.popper), p = [].concat(t.scrollParents.reference, t.scrollParents.popper);\n return i && p.forEach(function(d) {\n d.addEventListener("scroll", o.update, nn);\n }), s && l.addEventListener("resize", o.update, nn), function() {\n i && p.forEach(function(d) {\n d.removeEventListener("scroll", o.update, nn);\n }), s && l.removeEventListener("resize", o.update, nn);\n };\n}\nconst Vv = {\n name: "eventListeners",\n enabled: !0,\n phase: "write",\n fn: function() {\n },\n effect: Hv,\n data: {}\n};\nvar Pv = {\n left: "right",\n right: "left",\n bottom: "top",\n top: "bottom"\n};\nfunction In(e) {\n return e.replace(/left|right|bottom|top/g, function(t) {\n return Pv[t];\n });\n}\nvar Fv = {\n start: "end",\n end: "start"\n};\nfunction L8(e) {\n return e.replace(/start|end/g, function(t) {\n return Fv[t];\n });\n}\nfunction K5(e) {\n var t = te(e), o = t.pageXOffset, n = t.pageYOffset;\n return {\n scrollLeft: o,\n scrollTop: n\n };\n}\nfunction J5(e) {\n return Q3(Ft(e)).left + K5(e).scrollLeft;\n}\nfunction Xv(e, t) {\n var o = te(e), n = Ft(e), r = o.visualViewport, i = n.clientWidth, a = n.clientHeight, s = 0, l = 0;\n if (r) {\n i = r.width, a = r.height;\n var p = Bl();\n (p || !p && t === "fixed") && (s = r.offsetLeft, l = r.offsetTop);\n }\n return {\n width: i,\n height: a,\n x: s + J5(e),\n y: l\n };\n}\nfunction Uv(e) {\n var t, o = Ft(e), n = K5(e), r = (t = e.ownerDocument) == null ? void 0 : t.body, i = s3(o.scrollWidth, o.clientWidth, r ? r.scrollWidth : 0, r ? r.clientWidth : 0), a = s3(o.scrollHeight, o.clientHeight, r ? r.scrollHeight : 0, r ? r.clientHeight : 0), s = -n.scrollLeft + J5(e), l = -n.scrollTop;\n return pt(r || o).direction === "rtl" && (s += s3(o.clientWidth, r ? r.clientWidth : 0) - i), {\n width: i,\n height: a,\n x: s,\n y: l\n };\n}\nfunction _5(e) {\n var t = pt(e), o = t.overflow, n = t.overflowX, r = t.overflowY;\n return /auto|scroll|overlay|hidden/.test(o + r + n);\n}\nfunction Tl(e) {\n return ["html", "body", "#document"].indexOf(Ye(e)) >= 0 ? e.ownerDocument.body : le(e) && _5(e) ? e : Tl(P4(e));\n}\nfunction jo(e, t) {\n var o;\n t === void 0 && (t = []);\n var n = Tl(e), r = n === ((o = e.ownerDocument) == null ? void 0 : o.body), i = te(n), a = r ? [i].concat(i.visualViewport || [], _5(n) ? n : []) : n, s = t.concat(a);\n return r ? s : (\n // $FlowFixMe[incompatible-call]: isBody tells us target will be an HTMLElement here\n s.concat(jo(P4(a)))\n );\n}\nfunction Xa(e) {\n return Object.assign({}, e, {\n left: e.x,\n top: e.y,\n right: e.x + e.width,\n bottom: e.y + e.height\n });\n}\nfunction Yv(e, t) {\n var o = Q3(e, !1, t === "fixed");\n return o.top = o.top + e.clientTop, o.left = o.left + e.clientLeft, o.bottom = o.top + e.clientHeight, o.right = o.left + e.clientWidth, o.width = e.clientWidth, o.height = e.clientHeight, o.x = o.left, o.y = o.top, o;\n}\nfunction v8(e, t, o) {\n return t === Wl ? Xa(Xv(e, o)) : M3(t) ? Yv(t, o) : Xa(Uv(Ft(e)));\n}\nfunction Gv(e) {\n var t = jo(P4(e)), o = ["absolute", "fixed"].indexOf(pt(e).position) >= 0, n = o && le(e) ? Nr(e) : e;\n return M3(n) ? t.filter(function(r) {\n return M3(r) && Sl(r, n) && Ye(r) !== "body";\n }) : [];\n}\nfunction Qv(e, t, o, n) {\n var r = t === "clippingParents" ? Gv(e) : [].concat(t), i = [].concat(r, [o]), a = i[0], s = i.reduce(function(l, p) {\n var d = v8(e, p, n);\n return l.top = s3(d.top, l.top), l.right = s4(d.right, l.right), l.bottom = s4(d.bottom, l.bottom), l.left = s3(d.left, l.left), l;\n }, v8(e, a, n));\n return s.width = s.right - s.left, s.height = s.bottom - s.top, s.x = s.left, s.y = s.top, s;\n}\nfunction Il(e) {\n var t = e.reference, o = e.element, n = e.placement, r = n ? He(n) : null, i = n ? Z3(n) : null, a = t.x + t.width / 2 - o.width / 2, s = t.y + t.height / 2 - o.height / 2, l;\n switch (r) {\n case F2:\n l = {\n x: a,\n y: t.y - o.height\n };\n break;\n case de:\n l = {\n x: a,\n y: t.y + t.height\n };\n break;\n case be:\n l = {\n x: t.x + t.width,\n y: s\n };\n break;\n case X2:\n l = {\n x: t.x - o.width,\n y: s\n };\n break;\n default:\n l = {\n x: t.x,\n y: t.y\n };\n }\n var p = r ? j5(r) : null;\n if (p != null) {\n var d = p === "y" ? "height" : "width";\n switch (i) {\n case Y3:\n l[p] = l[p] - (t[d] / 2 - o[d] / 2);\n break;\n case sr:\n l[p] = l[p] + (t[d] / 2 - o[d] / 2);\n break;\n }\n }\n return l;\n}\nfunction cr(e, t) {\n t === void 0 && (t = {});\n var o = t, n = o.placement, r = n === void 0 ? e.placement : n, i = o.strategy, a = i === void 0 ? e.strategy : i, s = o.boundary, l = s === void 0 ? Mv : s, p = o.rootBoundary, d = p === void 0 ? Wl : p, b = o.elementContext, M = b === void 0 ? Wo : b, u = o.altBoundary, A = u === void 0 ? !1 : u, z = o.padding, f = z === void 0 ? 0 : z, O = kl(typeof f != "number" ? f : Nl(f, kr)), h = M === Wo ? Av : Wo, g = e.rects.popper, v = e.elements[A ? h : M], L = Qv(M3(v) ? v : v.contextElement || Ft(e.elements.popper), l, d, a), y = Q3(e.elements.reference), B = Il({\n reference: y,\n element: g,\n strategy: "absolute",\n placement: r\n }), X = Xa(Object.assign({}, g, B)), F = M === Wo ? X : y, T = {\n top: L.top - F.top + O.top,\n bottom: F.bottom - L.bottom + O.bottom,\n left: L.left - F.left + O.left,\n right: F.right - L.right + O.right\n }, w = e.modifiersData.offset;\n if (M === Wo && w) {\n var H = w[r];\n Object.keys(T).forEach(function(C) {\n var q = [be, de].indexOf(C) >= 0 ? 1 : -1, m = [F2, de].indexOf(C) >= 0 ? "y" : "x";\n T[C] += H[m] * q;\n });\n }\n return T;\n}\nfunction Zv(e, t) {\n t === void 0 && (t = {});\n var o = t, n = o.placement, r = o.boundary, i = o.rootBoundary, a = o.padding, s = o.flipVariations, l = o.allowedAutoPlacements, p = l === void 0 ? Rl : l, d = Z3(n), b = d ? s ? g8 : g8.filter(function(A) {\n return Z3(A) === d;\n }) : kr, M = b.filter(function(A) {\n return p.indexOf(A) >= 0;\n });\n M.length === 0 && (M = b);\n var u = M.reduce(function(A, z) {\n return A[z] = cr(e, {\n placement: z,\n boundary: r,\n rootBoundary: i,\n padding: a\n })[He(z)], A;\n }, {});\n return Object.keys(u).sort(function(A, z) {\n return u[A] - u[z];\n });\n}\nfunction jv(e) {\n if (He(e) === G5)\n return [];\n var t = In(e);\n return [L8(e), t, L8(t)];\n}\nfunction Kv(e) {\n var t = e.state, o = e.options, n = e.name;\n if (!t.modifiersData[n]._skip) {\n for (var r = o.mainAxis, i = r === void 0 ? !0 : r, a = o.altAxis, s = a === void 0 ? !0 : a, l = o.fallbackPlacements, p = o.padding, d = o.boundary, b = o.rootBoundary, M = o.altBoundary, u = o.flipVariations, A = u === void 0 ? !0 : u, z = o.allowedAutoPlacements, f = t.options.placement, O = He(f), h = O === f, g = l || (h || !A ? [In(f)] : jv(f)), v = [f].concat(g).reduce(function(_, r1) {\n return _.concat(He(r1) === G5 ? Zv(t, {\n placement: r1,\n boundary: d,\n rootBoundary: b,\n padding: p,\n flipVariations: A,\n allowedAutoPlacements: z\n }) : r1);\n }, []), L = t.rects.reference, y = t.rects.popper, B = /* @__PURE__ */ new Map(), X = !0, F = v[0], T = 0; T < v.length; T++) {\n var w = v[T], H = He(w), C = Z3(w) === Y3, q = [F2, de].indexOf(H) >= 0, m = q ? "width" : "height", k = cr(t, {\n placement: w,\n boundary: d,\n rootBoundary: b,\n altBoundary: M,\n padding: p\n }), x = q ? C ? be : X2 : C ? de : F2;\n L[m] > y[m] && (x = In(x));\n var N = In(x), V = [];\n if (i && V.push(k[H] <= 0), s && V.push(k[x] <= 0, k[N] <= 0), V.every(function(_) {\n return _;\n })) {\n F = w, X = !1;\n break;\n }\n B.set(w, V);\n }\n if (X)\n for (var R = A ? 3 : 1, I = function(r1) {\n var K = v.find(function(Q) {\n var E = B.get(Q);\n if (E)\n return E.slice(0, r1).every(function(D) {\n return D;\n });\n });\n if (K)\n return F = K, "break";\n }, j = R; j > 0; j--) {\n var U = I(j);\n if (U === "break")\n break;\n }\n t.placement !== F && (t.modifiersData[n]._skip = !0, t.placement = F, t.reset = !0);\n }\n}\nconst Jv = {\n name: "flip",\n enabled: !0,\n phase: "main",\n fn: Kv,\n requiresIfExists: ["offset"],\n data: {\n _skip: !1\n }\n};\nfunction q8(e, t, o) {\n return o === void 0 && (o = {\n x: 0,\n y: 0\n }), {\n top: e.top - t.height - o.y,\n right: e.right - t.width + o.x,\n bottom: e.bottom - t.height + o.y,\n left: e.left - t.width - o.x\n };\n}\nfunction y8(e) {\n return [F2, be, de, X2].some(function(t) {\n return e[t] >= 0;\n });\n}\nfunction _v(e) {\n var t = e.state, o = e.name, n = t.rects.reference, r = t.rects.popper, i = t.modifiersData.preventOverflow, a = cr(t, {\n elementContext: "reference"\n }), s = cr(t, {\n altBoundary: !0\n }), l = q8(a, n), p = q8(s, r, i), d = y8(l), b = y8(p);\n t.modifiersData[o] = {\n referenceClippingOffsets: l,\n popperEscapeOffsets: p,\n isReferenceHidden: d,\n hasPopperEscaped: b\n }, t.attributes.popper = Object.assign({}, t.attributes.popper, {\n "data-popper-reference-hidden": d,\n "data-popper-escaped": b\n });\n}\nconst $v = {\n name: "hide",\n enabled: !0,\n phase: "main",\n requiresIfExists: ["preventOverflow"],\n fn: _v\n};\nfunction eq(e, t, o) {\n var n = He(e), r = [X2, F2].indexOf(n) >= 0 ? -1 : 1, i = typeof o == "function" ? o(Object.assign({}, t, {\n placement: e\n })) : o, a = i[0], s = i[1];\n return a = a || 0, s = (s || 0) * r, [X2, be].indexOf(n) >= 0 ? {\n x: s,\n y: a\n } : {\n x: a,\n y: s\n };\n}\nfunction tq(e) {\n var t = e.state, o = e.options, n = e.name, r = o.offset, i = r === void 0 ? [0, 0] : r, a = Rl.reduce(function(d, b) {\n return d[b] = eq(b, t.rects, i), d;\n }, {}), s = a[t.placement], l = s.x, p = s.y;\n t.modifiersData.popperOffsets != null && (t.modifiersData.popperOffsets.x += l, t.modifiersData.popperOffsets.y += p), t.modifiersData[n] = a;\n}\nconst oq = {\n name: "offset",\n enabled: !0,\n phase: "main",\n requires: ["popperOffsets"],\n fn: tq\n};\nfunction rq(e) {\n var t = e.state, o = e.name;\n t.modifiersData[o] = Il({\n reference: t.rects.reference,\n element: t.rects.popper,\n strategy: "absolute",\n placement: t.placement\n });\n}\nconst nq = {\n name: "popperOffsets",\n enabled: !0,\n phase: "read",\n fn: rq,\n data: {}\n};\nfunction iq(e) {\n return e === "x" ? "y" : "x";\n}\nfunction aq(e) {\n var t = e.state, o = e.options, n = e.name, r = o.mainAxis, i = r === void 0 ? !0 : r, a = o.altAxis, s = a === void 0 ? !1 : a, l = o.boundary, p = o.rootBoundary, d = o.altBoundary, b = o.padding, M = o.tether, u = M === void 0 ? !0 : M, A = o.tetherOffset, z = A === void 0 ? 0 : A, f = cr(t, {\n boundary: l,\n rootBoundary: p,\n padding: b,\n altBoundary: d\n }), O = He(t.placement), h = Z3(t.placement), g = !h, v = j5(O), L = iq(v), y = t.modifiersData.popperOffsets, B = t.rects.reference, X = t.rects.popper, F = typeof z == "function" ? z(Object.assign({}, t.rects, {\n placement: t.placement\n })) : z, T = typeof F == "number" ? {\n mainAxis: F,\n altAxis: F\n } : Object.assign({\n mainAxis: 0,\n altAxis: 0\n }, F), w = t.modifiersData.offset ? t.modifiersData.offset[t.placement] : null, H = {\n x: 0,\n y: 0\n };\n if (y) {\n if (i) {\n var C, q = v === "y" ? F2 : X2, m = v === "y" ? de : be, k = v === "y" ? "height" : "width", x = y[v], N = x + f[q], V = x - f[m], R = u ? -X[k] / 2 : 0, I = h === Y3 ? B[k] : X[k], j = h === Y3 ? -X[k] : -B[k], U = t.elements.arrow, _ = u && U ? Z5(U) : {\n width: 0,\n height: 0\n }, r1 = t.modifiersData["arrow#persistent"] ? t.modifiersData["arrow#persistent"].padding : El(), K = r1[q], Q = r1[m], E = Zo(0, B[k], _[k]), D = g ? B[k] / 2 - R - E - K - T.mainAxis : I - E - K - T.mainAxis, G = g ? -B[k] / 2 + R + E + Q + T.mainAxis : j + E + Q + T.mainAxis, J = t.elements.arrow && Nr(t.elements.arrow), S = J ? v === "y" ? J.clientTop || 0 : J.clientLeft || 0 : 0, W = (C = w == null ? void 0 : w[v]) != null ? C : 0, P = x + D - W - S, Y = x + G - W, Z = Zo(u ? s4(N, P) : N, x, u ? s3(V, Y) : V);\n y[v] = Z, H[v] = Z - x;\n }\n if (s) {\n var t1, i1 = v === "x" ? F2 : X2, n1 = v === "x" ? de : be, s1 = y[L], d1 = L === "y" ? "height" : "width", b1 = s1 + f[i1], c1 = s1 - f[n1], a1 = [F2, X2].indexOf(O) !== -1, l1 = (t1 = w == null ? void 0 : w[L]) != null ? t1 : 0, p1 = a1 ? b1 : s1 - B[d1] - X[d1] - l1 + T.altAxis, M1 = a1 ? s1 + B[d1] + X[d1] - l1 - T.altAxis : c1, A1 = u && a1 ? Rv(p1, s1, M1) : Zo(u ? p1 : b1, s1, u ? M1 : c1);\n y[L] = A1, H[L] = A1 - s1;\n }\n t.modifiersData[n] = H;\n }\n}\nconst sq = {\n name: "preventOverflow",\n enabled: !0,\n phase: "main",\n fn: aq,\n requiresIfExists: ["offset"]\n};\nfunction cq(e) {\n return {\n scrollLeft: e.scrollLeft,\n scrollTop: e.scrollTop\n };\n}\nfunction lq(e) {\n return e === te(e) || !le(e) ? K5(e) : cq(e);\n}\nfunction pq(e) {\n var t = e.getBoundingClientRect(), o = G3(t.width) / e.offsetWidth || 1, n = G3(t.height) / e.offsetHeight || 1;\n return o !== 1 || n !== 1;\n}\nfunction dq(e, t, o) {\n o === void 0 && (o = !1);\n var n = le(t), r = le(t) && pq(t), i = Ft(t), a = Q3(e, r, o), s = {\n scrollLeft: 0,\n scrollTop: 0\n }, l = {\n x: 0,\n y: 0\n };\n return (n || !n && !o) && ((Ye(t) !== "body" || // https://github.com/popperjs/popper-core/issues/1078\n _5(i)) && (s = lq(t)), le(t) ? (l = Q3(t, !0), l.x += t.clientLeft, l.y += t.clientTop) : i && (l.x = J5(i))), {\n x: a.left + s.scrollLeft - l.x,\n y: a.top + s.scrollTop - l.y,\n width: a.width,\n height: a.height\n };\n}\nfunction bq(e) {\n var t = /* @__PURE__ */ new Map(), o = /* @__PURE__ */ new Set(), n = [];\n e.forEach(function(i) {\n t.set(i.name, i);\n });\n function r(i) {\n o.add(i.name);\n var a = [].concat(i.requires || [], i.requiresIfExists || []);\n a.forEach(function(s) {\n if (!o.has(s)) {\n var l = t.get(s);\n l && r(l);\n }\n }), n.push(i);\n }\n return e.forEach(function(i) {\n o.has(i.name) || r(i);\n }), n;\n}\nfunction Mq(e) {\n var t = bq(e);\n return vv.reduce(function(o, n) {\n return o.concat(t.filter(function(r) {\n return r.phase === n;\n }));\n }, []);\n}\nfunction Aq(e) {\n var t;\n return function() {\n return t || (t = new Promise(function(o) {\n Promise.resolve().then(function() {\n t = void 0, o(e());\n });\n })), t;\n };\n}\nfunction uq(e) {\n var t = e.reduce(function(o, n) {\n var r = o[n.name];\n return o[n.name] = r ? Object.assign({}, r, n, {\n options: Object.assign({}, r.options, n.options),\n data: Object.assign({}, r.data, n.data)\n }) : n, o;\n }, {});\n return Object.keys(t).map(function(o) {\n return t[o];\n });\n}\nvar w8 = {\n placement: "bottom",\n modifiers: [],\n strategy: "absolute"\n};\nfunction x8() {\n for (var e = arguments.length, t = new Array(e), o = 0; o < e; o++)\n t[o] = arguments[o];\n return !t.some(function(n) {\n return !(n && typeof n.getBoundingClientRect == "function");\n });\n}\nfunction zq(e) {\n e === void 0 && (e = {});\n var t = e, o = t.defaultModifiers, n = o === void 0 ? [] : o, r = t.defaultOptions, i = r === void 0 ? w8 : r;\n return function(s, l, p) {\n p === void 0 && (p = i);\n var d = {\n placement: "bottom",\n orderedModifiers: [],\n options: Object.assign({}, w8, i),\n modifiersData: {},\n elements: {\n reference: s,\n popper: l\n },\n attributes: {},\n styles: {}\n }, b = [], M = !1, u = {\n state: d,\n setOptions: function(O) {\n var h = typeof O == "function" ? O(d.options) : O;\n z(), d.options = Object.assign({}, i, d.options, h), d.scrollParents = {\n reference: M3(s) ? jo(s) : s.contextElement ? jo(s.contextElement) : [],\n popper: jo(l)\n };\n var g = Mq(uq([].concat(n, d.options.modifiers)));\n return d.orderedModifiers = g.filter(function(v) {\n return v.enabled;\n }), A(), u.update();\n },\n // Sync update – it will always be executed, even if not necessary. This\n // is useful for low frequency updates where sync behavior simplifies the\n // logic.\n // For high frequency updates (e.g. `resize` and `scroll` events), always\n // prefer the async Popper#update method\n forceUpdate: function() {\n if (!M) {\n var O = d.elements, h = O.reference, g = O.popper;\n if (x8(h, g)) {\n d.rects = {\n reference: dq(h, Nr(g), d.options.strategy === "fixed"),\n popper: Z5(g)\n }, d.reset = !1, d.placement = d.options.placement, d.orderedModifiers.forEach(function(T) {\n return d.modifiersData[T.name] = Object.assign({}, T.data);\n });\n for (var v = 0; v < d.orderedModifiers.length; v++) {\n if (d.reset === !0) {\n d.reset = !1, v = -1;\n continue;\n }\n var L = d.orderedModifiers[v], y = L.fn, B = L.options, X = B === void 0 ? {} : B, F = L.name;\n typeof y == "function" && (d = y({\n state: d,\n options: X,\n name: F,\n instance: u\n }) || d);\n }\n }\n }\n },\n // Async and optimistically optimized update – it will not be executed if\n // not necessary (debounced to run at most once-per-tick)\n update: Aq(function() {\n return new Promise(function(f) {\n u.forceUpdate(), f(d);\n });\n }),\n destroy: function() {\n z(), M = !0;\n }\n };\n if (!x8(s, l))\n return u;\n u.setOptions(p).then(function(f) {\n !M && p.onFirstUpdate && p.onFirstUpdate(f);\n });\n function A() {\n d.orderedModifiers.forEach(function(f) {\n var O = f.name, h = f.options, g = h === void 0 ? {} : h, v = f.effect;\n if (typeof v == "function") {\n var L = v({\n state: d,\n name: O,\n instance: u,\n options: g\n }), y = function() {\n };\n b.push(L || y);\n }\n });\n }\n function z() {\n b.forEach(function(f) {\n return f();\n }), b = [];\n }\n return u;\n };\n}\nvar hq = [Vv, nq, Dv, wv, oq, Jv, sq, kv, $v], Oq = /* @__PURE__ */ zq({\n defaultModifiers: hq\n}), fq = typeof Element < "u", gq = typeof Map == "function", Cq = typeof Set == "function", mq = typeof ArrayBuffer == "function" && !!ArrayBuffer.isView;\nfunction Dn(e, t) {\n if (e === t)\n return !0;\n if (e && t && typeof e == "object" && typeof t == "object") {\n if (e.constructor !== t.constructor)\n return !1;\n var o, n, r;\n if (Array.isArray(e)) {\n if (o = e.length, o != t.length)\n return !1;\n for (n = o; n-- !== 0; )\n if (!Dn(e[n], t[n]))\n return !1;\n return !0;\n }\n var i;\n if (gq && e instanceof Map && t instanceof Map) {\n if (e.size !== t.size)\n return !1;\n for (i = e.entries(); !(n = i.next()).done; )\n if (!t.has(n.value[0]))\n return !1;\n for (i = e.entries(); !(n = i.next()).done; )\n if (!Dn(n.value[1], t.get(n.value[0])))\n return !1;\n return !0;\n }\n if (Cq && e instanceof Set && t instanceof Set) {\n if (e.size !== t.size)\n return !1;\n for (i = e.entries(); !(n = i.next()).done; )\n if (!t.has(n.value[0]))\n return !1;\n return !0;\n }\n if (mq && ArrayBuffer.isView(e) && ArrayBuffer.isView(t)) {\n if (o = e.length, o != t.length)\n return !1;\n for (n = o; n-- !== 0; )\n if (e[n] !== t[n])\n return !1;\n return !0;\n }\n if (e.constructor === RegExp)\n return e.source === t.source && e.flags === t.flags;\n if (e.valueOf !== Object.prototype.valueOf && typeof e.valueOf == "function" && typeof t.valueOf == "function")\n return e.valueOf() === t.valueOf();\n if (e.toString !== Object.prototype.toString && typeof e.toString == "function" && typeof t.toString == "function")\n return e.toString() === t.toString();\n if (r = Object.keys(e), o = r.length, o !== Object.keys(t).length)\n return !1;\n for (n = o; n-- !== 0; )\n if (!Object.prototype.hasOwnProperty.call(t, r[n]))\n return !1;\n if (fq && e instanceof Element)\n return !1;\n for (n = o; n-- !== 0; )\n if (!((r[n] === "_owner" || r[n] === "__v" || r[n] === "__o") && e.$$typeof) && !Dn(e[r[n]], t[r[n]]))\n return !1;\n return !0;\n }\n return e !== e && t !== t;\n}\nvar Lq = function(t, o) {\n try {\n return Dn(t, o);\n } catch (n) {\n if ((n.message || "").match(/stack|recursion/i))\n return console.warn("react-fast-compare cannot handle circular refs"), !1;\n throw n;\n }\n};\nconst vq = /* @__PURE__ */ Q2(Lq);\nvar qq = [], Dl = function(t, o, n) {\n n === void 0 && (n = {});\n var r = react__WEBPACK_IMPORTED_MODULE_0__.useRef(null), i = {\n onFirstUpdate: n.onFirstUpdate,\n placement: n.placement || "bottom",\n strategy: n.strategy || "absolute",\n modifiers: n.modifiers || qq\n }, a = react__WEBPACK_IMPORTED_MODULE_0__.useState({\n styles: {\n popper: {\n position: i.strategy,\n left: "0",\n top: "0"\n },\n arrow: {\n position: "absolute"\n }\n },\n attributes: {}\n }), s = a[0], l = a[1], p = react__WEBPACK_IMPORTED_MODULE_0__.useMemo(function() {\n return {\n name: "updateState",\n enabled: !0,\n phase: "write",\n fn: function(u) {\n var A = u.state, z = Object.keys(A.elements);\n react_dom__WEBPACK_IMPORTED_MODULE_2__.flushSync(function() {\n l({\n styles: O8(z.map(function(f) {\n return [f, A.styles[f] || {}];\n })),\n attributes: O8(z.map(function(f) {\n return [f, A.attributes[f]];\n }))\n });\n });\n },\n requires: ["computeStyles"]\n };\n }, []), d = react__WEBPACK_IMPORTED_MODULE_0__.useMemo(function() {\n var M = {\n onFirstUpdate: i.onFirstUpdate,\n placement: i.placement,\n strategy: i.strategy,\n modifiers: [].concat(i.modifiers, [p, {\n name: "applyStyles",\n enabled: !1\n }])\n };\n return vq(r.current, M) ? r.current || M : (r.current = M, M);\n }, [i.onFirstUpdate, i.placement, i.strategy, i.modifiers, p]), b = react__WEBPACK_IMPORTED_MODULE_0__.useRef();\n return f8(function() {\n b.current && b.current.setOptions(d);\n }, [d]), f8(function() {\n if (!(t == null || o == null)) {\n var M = n.createPopper || Oq, u = M(t, o, d);\n return b.current = u, function() {\n u.destroy(), b.current = null;\n };\n }\n }, [t, o, n.createPopper]), {\n state: b.current ? b.current.state : null,\n styles: s.styles,\n attributes: s.attributes,\n update: b.current ? b.current.update : null,\n forceUpdate: b.current ? b.current.forceUpdate : null\n };\n}, yq = function() {\n}, wq = function() {\n return Promise.resolve(null);\n}, xq = [];\nfunction Wq(e) {\n var t = e.placement, o = t === void 0 ? "bottom" : t, n = e.strategy, r = n === void 0 ? "absolute" : n, i = e.modifiers, a = i === void 0 ? xq : i, s = e.referenceElement, l = e.onFirstUpdate, p = e.innerRef, d = e.children, b = react__WEBPACK_IMPORTED_MODULE_0__.useContext(ql), M = react__WEBPACK_IMPORTED_MODULE_0__.useState(null), u = M[0], A = M[1], z = react__WEBPACK_IMPORTED_MODULE_0__.useState(null), f = z[0], O = z[1];\n react__WEBPACK_IMPORTED_MODULE_0__.useEffect(function() {\n Pa(p, u);\n }, [p, u]);\n var h = react__WEBPACK_IMPORTED_MODULE_0__.useMemo(function() {\n return {\n placement: o,\n strategy: r,\n onFirstUpdate: l,\n modifiers: [].concat(a, [{\n name: "arrow",\n enabled: f != null,\n options: {\n element: f\n }\n }])\n };\n }, [o, r, l, a, f]), g = Dl(s || b, u, h), v = g.state, L = g.styles, y = g.forceUpdate, B = g.update, X = react__WEBPACK_IMPORTED_MODULE_0__.useMemo(function() {\n return {\n ref: A,\n style: L.popper,\n placement: v ? v.placement : o,\n hasPopperEscaped: v && v.modifiersData.hide ? v.modifiersData.hide.hasPopperEscaped : null,\n isReferenceHidden: v && v.modifiersData.hide ? v.modifiersData.hide.isReferenceHidden : null,\n arrowProps: {\n style: L.arrow,\n ref: O\n },\n forceUpdate: y || yq,\n update: B || wq\n };\n }, [A, O, o, v, L, B, y]);\n return wl(d)(X);\n}\nvar Rq = "production" !== "production", Hl = function() {\n};\nif (Rq) {\n var Bq = function(t, o) {\n var n = arguments.length;\n o = new Array(n > 1 ? n - 1 : 0);\n for (var r = 1; r < n; r++)\n o[r - 1] = arguments[r];\n var i = 0, a = "Warning: " + t.replace(/%s/g, function() {\n return o[i++];\n });\n typeof console < "u" && console.error(a);\n try {\n throw new Error(a);\n } catch {\n }\n };\n Hl = function(e, t, o) {\n var n = arguments.length;\n o = new Array(n > 2 ? n - 2 : 0);\n for (var r = 2; r < n; r++)\n o[r - 2] = arguments[r];\n if (t === void 0)\n throw new Error(\n "`warning(condition, format, ...args)` requires a warning message argument"\n );\n e || Bq.apply(null, [t].concat(o));\n };\n}\nvar Sq = Hl;\nconst Eq = /* @__PURE__ */ Q2(Sq);\nfunction kq(e) {\n var t = e.children, o = e.innerRef, n = react__WEBPACK_IMPORTED_MODULE_0__.useContext(yl), r = react__WEBPACK_IMPORTED_MODULE_0__.useCallback(function(i) {\n Pa(o, i), xl(n, i);\n }, [o, n]);\n return react__WEBPACK_IMPORTED_MODULE_0__.useEffect(function() {\n return function() {\n return Pa(o, null);\n };\n }, []), react__WEBPACK_IMPORTED_MODULE_0__.useEffect(function() {\n Eq(!!n, "`Reference` should not be used outside of a `Manager` component.");\n }, [n]), wl(t)({\n ref: r\n });\n}\nfunction Vl(e) {\n var t = react__WEBPACK_IMPORTED_MODULE_0__.useRef(e);\n return t.current = e, react__WEBPACK_IMPORTED_MODULE_0__.useCallback(function() {\n return t.current;\n }, []);\n}\nvar Nq = function() {\n};\nfunction Tq(e) {\n var t = e.initial, o = e.value, n = e.onChange, r = n === void 0 ? Nq : n;\n if (t === void 0 && o === void 0)\n throw new TypeError(\'Either "value" or "initial" variable must be set. Now both are undefined\');\n var i = react__WEBPACK_IMPORTED_MODULE_0__.useState(t), a = i[0], s = i[1], l = Vl(a), p = react__WEBPACK_IMPORTED_MODULE_0__.useCallback(function(b) {\n var M = l(), u = typeof b == "function" ? b(M) : b;\n typeof u.persist == "function" && u.persist(), s(u), typeof r == "function" && r(u);\n }, [l, r]), d = o !== void 0;\n return [d ? o : a, d ? r : p];\n}\nfunction Pl(e, t) {\n return e === void 0 && (e = 0), t === void 0 && (t = 0), function() {\n return {\n width: 0,\n height: 0,\n top: t,\n right: e,\n bottom: t,\n left: e,\n x: 0,\n y: 0,\n toJSON: function() {\n return null;\n }\n };\n };\n}\nvar Iq = ["styles", "attributes"], W8 = {\n getBoundingClientRect: Pl()\n}, R8 = {\n closeOnOutsideClick: !0,\n closeOnTriggerHidden: !1,\n defaultVisible: !1,\n delayHide: 0,\n delayShow: 0,\n followCursor: !1,\n interactive: !1,\n mutationObserverOptions: {\n attributes: !0,\n childList: !0,\n subtree: !0\n },\n offset: [0, 6],\n trigger: "hover"\n};\nfunction Dq(e, t) {\n var o, n, r;\n e === void 0 && (e = {}), t === void 0 && (t = {});\n var i = Object.keys(R8).reduce(function(m, k) {\n var x;\n return a0({}, m, (x = {}, x[k] = m[k] !== void 0 ? m[k] : R8[k], x));\n }, e), a = react__WEBPACK_IMPORTED_MODULE_0__.useMemo(\n function() {\n return [{\n name: "offset",\n options: {\n offset: i.offset\n }\n }];\n },\n // eslint-disable-next-line react-hooks/exhaustive-deps\n Array.isArray(i.offset) ? i.offset : []\n ), s = a0({}, t, {\n placement: t.placement || i.placement,\n modifiers: t.modifiers || a\n }), l = react__WEBPACK_IMPORTED_MODULE_0__.useState(null), p = l[0], d = l[1], b = react__WEBPACK_IMPORTED_MODULE_0__.useState(null), M = b[0], u = b[1], A = Tq({\n initial: i.defaultVisible,\n value: i.visible,\n onChange: i.onVisibleChange\n }), z = A[0], f = A[1], O = react__WEBPACK_IMPORTED_MODULE_0__.useRef();\n react__WEBPACK_IMPORTED_MODULE_0__.useEffect(function() {\n return function() {\n return clearTimeout(O.current);\n };\n }, []);\n var h = Dl(i.followCursor ? W8 : p, M, s), g = h.styles, v = h.attributes, L = ar(h, Iq), y = L.update, B = Vl({\n visible: z,\n triggerRef: p,\n tooltipRef: M,\n finalConfig: i\n }), X = react__WEBPACK_IMPORTED_MODULE_0__.useCallback(\n function(m) {\n return Array.isArray(i.trigger) ? i.trigger.includes(m) : i.trigger === m;\n },\n // eslint-disable-next-line react-hooks/exhaustive-deps\n Array.isArray(i.trigger) ? i.trigger : [i.trigger]\n ), F = react__WEBPACK_IMPORTED_MODULE_0__.useCallback(function() {\n clearTimeout(O.current), O.current = window.setTimeout(function() {\n return f(!1);\n }, i.delayHide);\n }, [i.delayHide, f]), T = react__WEBPACK_IMPORTED_MODULE_0__.useCallback(function() {\n clearTimeout(O.current), O.current = window.setTimeout(function() {\n return f(!0);\n }, i.delayShow);\n }, [i.delayShow, f]), w = react__WEBPACK_IMPORTED_MODULE_0__.useCallback(function() {\n B().visible ? F() : T();\n }, [B, F, T]);\n react__WEBPACK_IMPORTED_MODULE_0__.useEffect(function() {\n if (B().finalConfig.closeOnOutsideClick) {\n var m = function(x) {\n var N, V = B(), R = V.tooltipRef, I = V.triggerRef, j = (x.composedPath == null || (N = x.composedPath()) == null ? void 0 : N[0]) || x.target;\n j instanceof Node && R != null && I != null && !R.contains(j) && !I.contains(j) && F();\n };\n return document.addEventListener("mousedown", m), function() {\n return document.removeEventListener("mousedown", m);\n };\n }\n }, [B, F]), react__WEBPACK_IMPORTED_MODULE_0__.useEffect(function() {\n if (!(p == null || !X("click")))\n return p.addEventListener("click", w), function() {\n return p.removeEventListener("click", w);\n };\n }, [p, X, w]), react__WEBPACK_IMPORTED_MODULE_0__.useEffect(function() {\n if (!(p == null || !X("double-click")))\n return p.addEventListener("dblclick", w), function() {\n return p.removeEventListener("dblclick", w);\n };\n }, [p, X, w]), react__WEBPACK_IMPORTED_MODULE_0__.useEffect(function() {\n if (!(p == null || !X("right-click"))) {\n var m = function(x) {\n x.preventDefault(), w();\n };\n return p.addEventListener("contextmenu", m), function() {\n return p.removeEventListener("contextmenu", m);\n };\n }\n }, [p, X, w]), react__WEBPACK_IMPORTED_MODULE_0__.useEffect(function() {\n if (!(p == null || !X("focus")))\n return p.addEventListener("focus", T), p.addEventListener("blur", F), function() {\n p.removeEventListener("focus", T), p.removeEventListener("blur", F);\n };\n }, [p, X, T, F]), react__WEBPACK_IMPORTED_MODULE_0__.useEffect(function() {\n if (!(p == null || !X("hover")))\n return p.addEventListener("mouseenter", T), p.addEventListener("mouseleave", F), function() {\n p.removeEventListener("mouseenter", T), p.removeEventListener("mouseleave", F);\n };\n }, [p, X, T, F]), react__WEBPACK_IMPORTED_MODULE_0__.useEffect(function() {\n if (!(M == null || !X("hover") || !B().finalConfig.interactive))\n return M.addEventListener("mouseenter", T), M.addEventListener("mouseleave", F), function() {\n M.removeEventListener("mouseenter", T), M.removeEventListener("mouseleave", F);\n };\n }, [M, X, T, F, B]);\n var H = L == null || (o = L.state) == null || (n = o.modifiersData) == null || (r = n.hide) == null ? void 0 : r.isReferenceHidden;\n react__WEBPACK_IMPORTED_MODULE_0__.useEffect(function() {\n i.closeOnTriggerHidden && H && F();\n }, [i.closeOnTriggerHidden, F, H]), react__WEBPACK_IMPORTED_MODULE_0__.useEffect(function() {\n if (!i.followCursor || p == null)\n return;\n function m(k) {\n var x = k.clientX, N = k.clientY;\n W8.getBoundingClientRect = Pl(x, N), y == null || y();\n }\n return p.addEventListener("mousemove", m), function() {\n return p.removeEventListener("mousemove", m);\n };\n }, [i.followCursor, p, y]), react__WEBPACK_IMPORTED_MODULE_0__.useEffect(function() {\n if (!(M == null || y == null || i.mutationObserverOptions == null)) {\n var m = new MutationObserver(y);\n return m.observe(M, i.mutationObserverOptions), function() {\n return m.disconnect();\n };\n }\n }, [i.mutationObserverOptions, M, y]);\n var C = function(k) {\n return k === void 0 && (k = {}), a0({}, k, {\n style: a0({}, k.style, g.popper)\n }, v.popper, {\n "data-popper-interactive": i.interactive\n });\n }, q = function(k) {\n return k === void 0 && (k = {}), a0({}, k, v.arrow, {\n style: a0({}, k.style, g.arrow),\n "data-popper-arrow": !0\n });\n };\n return a0({\n getArrowProps: q,\n getTooltipProps: C,\n setTooltipRef: u,\n setTriggerRef: d,\n tooltipRef: M,\n triggerRef: p,\n visible: z\n }, L);\n}\nconst Hq = (styled_components__WEBPACK_IMPORTED_MODULE_1___default().div)``, Fl = styled_components__WEBPACK_IMPORTED_MODULE_1___default().div(\n ({\n size: e,\n theme: { colors: t, typography: o, spacings: n, borderRadius: r, fontWeight: i }\n }) => (0,styled_components__WEBPACK_IMPORTED_MODULE_1__.css)`\n font-size: ${o.t10};\n line-height: ${e === "mini" ? "10px" : 1};\n font-weight: ${e === "mini" ? i.regular : i.medium};\n padding: ${e === "mini" ? `${n.sp4} 5px` : n.sp8};\n border-radius: ${r.base};\n background: ${t.backgrounds.bgTertiary};\n color: ${t.textIcon.textTertiary};\n border: none;\n z-index: 9999;\n\n &[data-popper-interactive=\'false\'] {\n pointer-events: none;\n }\n `\n);\nfunction A3(e) {\n const {\n text: t,\n place: o,\n children: n,\n followCursor: r,\n size: i = "default",\n ...a\n } = e, s = i === "mini" ? [0, 2] : [0, 6], { getTooltipProps: l, setTooltipRef: p, setTriggerRef: d, visible: b } = Dq({\n ...a,\n followCursor: r,\n placement: o,\n offset: s\n });\n return /* @__PURE__ */ e1(Hq, { ref: d, children: [\n n,\n b && (0,react_dom__WEBPACK_IMPORTED_MODULE_2__.createPortal)(\n /* @__PURE__ */ c(\n Fl,\n {\n size: i,\n ref: p,\n ...l({ className: "tooltip-container" }),\n children: t\n }\n ),\n document.body\n )\n ] });\n}\nfunction Vq(e) {\n const { minValue: t, maxValue: o, isDisabled: n, value: r, getValue: i, ...a } = e, [s, l] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(r), p = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)(\n (d) => {\n l(d), i && i(d);\n },\n [l, i]\n );\n return (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => {\n l(r);\n }, [r]), /* @__PURE__ */ c(dv, { children: /* @__PURE__ */ c(\n cv,\n {\n ...a,\n min: t,\n max: o,\n disabled: n,\n value: s,\n onChange: p,\n className: "horizontal-slider",\n thumbClassName: "example-thumb",\n trackClassName: "example-track",\n renderThumb: (d, b) => /* @__PURE__ */ c(lv, { ...d, children: /* @__PURE__ */ c(pv, { children: /* @__PURE__ */ c(A3, { size: "default", text: b.valueNow, place: "top", children: b.valueNow }) }) })\n }\n ) });\n}\nconst Pq = (styled_components__WEBPACK_IMPORTED_MODULE_1___default().div)`\n display: flex;\n align-items: center;\n margin-bottom: ${({ theme: { spacings: e } }) => e.sp16};\n`, B8 = (styled_components__WEBPACK_IMPORTED_MODULE_1___default().div)`\n flex: 1;\n\n input[type=\'number\'] {\n ::-webkit-outer-spin-button,\n ::-webkit-inner-spin-button {\n -webkit-appearance: none;\n margin: 0;\n }\n }\n`, Fq = styled_components__WEBPACK_IMPORTED_MODULE_1___default().div(\n ({ theme: { spacings: e } }) => (0,styled_components__WEBPACK_IMPORTED_MODULE_1__.css)`\n padding-top: ${e.sp24};\n width: 1rem;\n margin: 0 ${e.sp8};\n `\n), Xq = styled_components__WEBPACK_IMPORTED_MODULE_1___default().div(\n ({}) => (0,styled_components__WEBPACK_IMPORTED_MODULE_1__.css)`\n p {\n position: absolute;\n margin-top: -15px;\n }\n `\n);\nfunction Uq(e, t) {\n const {\n isDisabled: o,\n value: n,\n hideClearButton: r,\n min: i,\n max: a,\n onChange: s,\n isValidation: l,\n ...p\n } = e, [d, b] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(n), [M, u] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(!1), [A, z] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(!1), [f, O] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(0), [h, g] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(0);\n (0,react__WEBPACK_IMPORTED_MODULE_0__.useImperativeHandle)(t, () => ({\n handleReset(X) {\n b(X);\n }\n })), (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => {\n b(n), O(n[0]), g(n[1]);\n }, [n]), (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => {\n d[0] > d[1] && l ? u(!0) : u(!1);\n }, [d, l]), (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => {\n d[1] < d[0] && l ? z(!0) : z(!1);\n }, [d, l]);\n const v = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)(\n (X) => {\n const { value: F } = X.target, T = /^[0-9\\b]+$/, w = [Number(F), d[1]];\n (F === "" || T.test(F)) && (b(w), s(w), O(F)), u(!1);\n },\n [d, f]\n ), L = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)(\n (X) => {\n const { value: F } = X.currentTarget, T = /^[0-9\\b]+$/, w = [d[0], Number(F)];\n (F === "" || T.test(F)) && (b(w), s(w), g(F)), z(!1);\n },\n [d, h]\n ), y = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)(\n (X) => {\n b(X), s(X), z(!1), u(!1), O(X[0]), g(X[1]);\n },\n [s, f, h, d]\n ), B = {\n type: "text",\n isDisabled: o,\n placeholder: "Enter amount"\n };\n return /* @__PURE__ */ e1(react__WEBPACK_IMPORTED_MODULE_0__.Fragment, { children: [\n /* @__PURE__ */ e1(Pq, { children: [\n /* @__PURE__ */ c(B8, { children: /* @__PURE__ */ c(\n Y2,\n {\n label: "From",\n value: f,\n onChange: v,\n isError: M,\n isRequired: !0,\n hideClearButton: r,\n handleClearFn: () => {\n const X = [0, d[1]];\n O(""), b(X), s(X);\n },\n ...B\n }\n ) }),\n /* @__PURE__ */ c(Fq, { children: /* @__PURE__ */ c(P2, { $default: !0 }) }),\n /* @__PURE__ */ c(B8, { children: /* @__PURE__ */ c(\n Y2,\n {\n label: "To",\n value: h,\n onChange: L,\n isError: A,\n isRequired: !0,\n hideClearButton: r,\n handleClearFn: () => {\n const X = [d[0], 0];\n g(""), b(X), s(X);\n },\n ...B\n }\n ) })\n ] }),\n M && A && /* @__PURE__ */ c(Xq, { children: /* @__PURE__ */ c(Qo, { isError: !0, children: "From value must be smaller than To value" }) }),\n /* @__PURE__ */ c(\n Vq,\n {\n ...p,\n isDisabled: o,\n value: d,\n getValue: y,\n minValue: i,\n maxValue: a\n }\n )\n ] });\n}\nconst Xl = (0,react__WEBPACK_IMPORTED_MODULE_0__.forwardRef)(Uq);\nfunction Yq(e) {\n const {\n onClearFilter: t,\n isDisabled: o,\n onApplyFilter: n,\n value: r,\n buttonText: i,\n showDefaultValue: a,\n ...s\n } = e, l = (0,react__WEBPACK_IMPORTED_MODULE_0__.useRef)(null), [p, d] = io(!1), [b, M] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(r), [u, A] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(!1), [z, f] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(!0);\n (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => {\n M(r);\n }, [r]);\n const O = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)(() => {\n b && (n && n(b), d());\n }, [n, d, b]);\n (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => {\n b[0] < b[1] ? f(!1) : f(!0);\n }, [b[0], b[1]]);\n const h = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)(() => {\n const L = [0, 0];\n M(L), n && n(L), l != null && l.current && l.current.handleReset(L), t && t(), d();\n }, []);\n (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => {\n A(\n b[0] !== 0 || b[1] !== 0 || r[0] !== 0 || r[1] !== 0\n );\n }, [r, b, p]);\n const g = (0,react__WEBPACK_IMPORTED_MODULE_0__.useMemo)(() => /* @__PURE__ */ c(\n b3,\n {\n ...{\n isDisabled: o,\n isActive: p,\n onClick: d\n },\n isDisabled: o,\n $isActive: p,\n onClick: d,\n isFiltered: !!(!p && r[0] && r[1]),\n children: /* @__PURE__ */ e1(It, { children: [\n /* @__PURE__ */ c(Ue, { children: r[1] && !a ? /* @__PURE__ */ e1(vl, { $isActive: p, children: [\n r[0],\n " ",\n /* @__PURE__ */ c(Ae, { count: 0, noDigit: !0 }),\n " ",\n r[1]\n ] }) : i }),\n r[1] ? !p && !a ? /* @__PURE__ */ c(d3, { onClick: h, children: /* @__PURE__ */ c(Z1, { name: "Close", color: `${v2.black}`, size: "xxs" }) }) : /* @__PURE__ */ c(\n Z1,\n {\n name: p ? "ChevronUpDropdown" : "ChevronDownDropdown",\n size: "xxs"\n }\n ) : /* @__PURE__ */ c(\n Z1,\n {\n name: p ? "ChevronUpDropdown" : "ChevronDownDropdown",\n size: "xxs"\n }\n )\n ] })\n }\n ), [d, p, o, r, i]), v = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)(([L, y]) => {\n M([L, y]);\n }, []);\n return /* @__PURE__ */ c(\n Er,\n {\n ...s,\n button: g,\n isShowed: p,\n isFilterValueChanged: u,\n onApplyFilter: O,\n onClearFilter: h,\n handleDropdownShowed: d,\n isEnableApplyBtn: z,\n children: /* @__PURE__ */ c(\n Xl,\n {\n ...s,\n ref: l,\n onChange: v,\n value: b,\n isValidation: !0\n }\n )\n }\n );\n}\nfunction r2(e) {\n return e.replace(/([a-z])([A-Z])/g, "$1 $2").split(/(?=[A-Z])/).map(\n (n, r) => r === 0 ? n.charAt(0).toUpperCase() + n.slice(1) : n.toLowerCase()\n ).join(" ");\n}\nfunction Me(e) {\n "@babel/helpers - typeof";\n return Me = typeof Symbol == "function" && typeof Symbol.iterator == "symbol" ? function(t) {\n return typeof t;\n } : function(t) {\n return t && typeof Symbol == "function" && t.constructor === Symbol && t !== Symbol.prototype ? "symbol" : typeof t;\n }, Me(e);\n}\nfunction v0(e) {\n if (e === null || e === !0 || e === !1)\n return NaN;\n var t = Number(e);\n return isNaN(t) ? t : t < 0 ? Math.ceil(t) : Math.floor(t);\n}\nfunction Q1(e, t) {\n if (t.length < e)\n throw new TypeError(e + " argument" + (e > 1 ? "s" : "") + " required, but only " + t.length + " present");\n}\nfunction j1(e) {\n Q1(1, arguments);\n var t = Object.prototype.toString.call(e);\n return e instanceof Date || Me(e) === "object" && t === "[object Date]" ? new Date(e.getTime()) : typeof e == "number" || t === "[object Number]" ? new Date(e) : ((typeof e == "string" || t === "[object String]") && typeof console < "u" && (console.warn("Starting with v2.0.0-beta.1 date-fns doesn\'t accept strings as date arguments. Please use `parseISO` to parse strings. See: https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#string-arguments"), console.warn(new Error().stack)), /* @__PURE__ */ new Date(NaN));\n}\nfunction ao(e, t) {\n Q1(2, arguments);\n var o = j1(e), n = v0(t);\n return isNaN(n) ? /* @__PURE__ */ new Date(NaN) : (n && o.setDate(o.getDate() + n), o);\n}\nfunction ve(e, t) {\n Q1(2, arguments);\n var o = j1(e), n = v0(t);\n if (isNaN(n))\n return /* @__PURE__ */ new Date(NaN);\n if (!n)\n return o;\n var r = o.getDate(), i = new Date(o.getTime());\n i.setMonth(o.getMonth() + n + 1, 0);\n var a = i.getDate();\n return r >= a ? i : (o.setFullYear(i.getFullYear(), i.getMonth(), r), o);\n}\nfunction $5(e, t) {\n Q1(2, arguments);\n var o = j1(e).getTime(), n = v0(t);\n return new Date(o + n);\n}\nvar Gq = 36e5;\nfunction Qq(e, t) {\n Q1(2, arguments);\n var o = v0(t);\n return $5(e, o * Gq);\n}\nvar Zq = {};\nfunction Xt() {\n return Zq;\n}\nfunction Ul(e, t) {\n var o, n, r, i, a, s, l, p;\n Q1(1, arguments);\n var d = Xt(), b = v0((o = (n = (r = (i = t == null ? void 0 : t.weekStartsOn) !== null && i !== void 0 ? i : t == null || (a = t.locale) === null || a === void 0 || (s = a.options) === null || s === void 0 ? void 0 : s.weekStartsOn) !== null && r !== void 0 ? r : d.weekStartsOn) !== null && n !== void 0 ? n : (l = d.locale) === null || l === void 0 || (p = l.options) === null || p === void 0 ? void 0 : p.weekStartsOn) !== null && o !== void 0 ? o : 0);\n if (!(b >= 0 && b <= 6))\n throw new RangeError("weekStartsOn must be between 0 and 6 inclusively");\n var M = j1(e), u = M.getDay(), A = (u < b ? 7 : 0) + u - b;\n return M.setDate(M.getDate() - A), M.setHours(0, 0, 0, 0), M;\n}\nfunction c4(e) {\n return Q1(1, arguments), Ul(e, {\n weekStartsOn: 1\n });\n}\nfunction jq(e) {\n Q1(1, arguments);\n var t = j1(e), o = t.getFullYear(), n = /* @__PURE__ */ new Date(0);\n n.setFullYear(o + 1, 0, 4), n.setHours(0, 0, 0, 0);\n var r = c4(n), i = /* @__PURE__ */ new Date(0);\n i.setFullYear(o, 0, 4), i.setHours(0, 0, 0, 0);\n var a = c4(i);\n return t.getTime() >= r.getTime() ? o + 1 : t.getTime() >= a.getTime() ? o : o - 1;\n}\nfunction Kq(e) {\n Q1(1, arguments);\n var t = jq(e), o = /* @__PURE__ */ new Date(0);\n o.setFullYear(t, 0, 4), o.setHours(0, 0, 0, 0);\n var n = c4(o);\n return n;\n}\nfunction j3(e) {\n var t = new Date(Date.UTC(e.getFullYear(), e.getMonth(), e.getDate(), e.getHours(), e.getMinutes(), e.getSeconds(), e.getMilliseconds()));\n return t.setUTCFullYear(e.getFullYear()), e.getTime() - t.getTime();\n}\nfunction Ve(e) {\n Q1(1, arguments);\n var t = j1(e);\n return t.setHours(0, 0, 0, 0), t;\n}\nvar Jq = 864e5;\nfunction l4(e, t) {\n Q1(2, arguments);\n var o = Ve(e), n = Ve(t), r = o.getTime() - j3(o), i = n.getTime() - j3(n);\n return Math.round((r - i) / Jq);\n}\nvar _q = 6e4;\nfunction Ua(e, t) {\n Q1(2, arguments);\n var o = v0(t);\n return $5(e, o * _q);\n}\nfunction Yl(e, t) {\n Q1(2, arguments);\n var o = v0(t), n = o * 3;\n return ve(e, n);\n}\nfunction p4(e, t) {\n Q1(2, arguments);\n var o = v0(t), n = o * 7;\n return ao(e, n);\n}\nfunction K3(e, t) {\n Q1(2, arguments);\n var o = v0(t);\n return ve(e, o * 12);\n}\nfunction S8(e) {\n Q1(1, arguments);\n var t;\n if (e && typeof e.forEach == "function")\n t = e;\n else if (Me(e) === "object" && e !== null)\n t = Array.prototype.slice.call(e);\n else\n return /* @__PURE__ */ new Date(NaN);\n var o;\n return t.forEach(function(n) {\n var r = j1(n);\n (o === void 0 || o < r || isNaN(Number(r))) && (o = r);\n }), o || /* @__PURE__ */ new Date(NaN);\n}\nfunction E8(e) {\n Q1(1, arguments);\n var t;\n if (e && typeof e.forEach == "function")\n t = e;\n else if (Me(e) === "object" && e !== null)\n t = Array.prototype.slice.call(e);\n else\n return /* @__PURE__ */ new Date(NaN);\n var o;\n return t.forEach(function(n) {\n var r = j1(n);\n (o === void 0 || o > r || isNaN(r.getDate())) && (o = r);\n }), o || /* @__PURE__ */ new Date(NaN);\n}\nfunction Hn(e, t) {\n Q1(2, arguments);\n var o = j1(e), n = j1(t), r = o.getTime() - n.getTime();\n return r < 0 ? -1 : r > 0 ? 1 : r;\n}\nvar e6 = 6e4, t6 = 36e5, $q = 1e3;\nfunction ey(e, t) {\n Q1(2, arguments);\n var o = Ve(e), n = Ve(t);\n return o.getTime() === n.getTime();\n}\nfunction F4(e) {\n return Q1(1, arguments), e instanceof Date || Me(e) === "object" && Object.prototype.toString.call(e) === "[object Date]";\n}\nfunction lr(e) {\n if (Q1(1, arguments), !F4(e) && typeof e != "number")\n return !1;\n var t = j1(e);\n return !isNaN(Number(t));\n}\nfunction pr(e, t) {\n Q1(2, arguments);\n var o = j1(e), n = j1(t), r = o.getFullYear() - n.getFullYear(), i = o.getMonth() - n.getMonth();\n return r * 12 + i;\n}\nfunction S3(e) {\n Q1(1, arguments);\n var t = j1(e), o = Math.floor(t.getMonth() / 3) + 1;\n return o;\n}\nfunction d4(e, t) {\n Q1(2, arguments);\n var o = j1(e), n = j1(t);\n return o.getFullYear() - n.getFullYear();\n}\nfunction ty(e, t) {\n return Q1(2, arguments), j1(e).getTime() - j1(t).getTime();\n}\nvar k8 = {\n ceil: Math.ceil,\n round: Math.round,\n floor: Math.floor,\n trunc: function(t) {\n return t < 0 ? Math.ceil(t) : Math.floor(t);\n }\n // Math.trunc is not supported by IE\n}, oy = "trunc";\nfunction ry(e) {\n return e ? k8[e] : k8[oy];\n}\nfunction b4(e) {\n Q1(1, arguments);\n var t = j1(e);\n return t.setHours(23, 59, 59, 999), t;\n}\nfunction Gl(e) {\n Q1(1, arguments);\n var t = j1(e), o = t.getMonth();\n return t.setFullYear(t.getFullYear(), o + 1, 0), t.setHours(23, 59, 59, 999), t;\n}\nfunction ny(e) {\n Q1(1, arguments);\n var t = j1(e);\n return b4(t).getTime() === Gl(t).getTime();\n}\nfunction iy(e, t) {\n Q1(2, arguments);\n var o = j1(e), n = j1(t), r = Hn(o, n), i = Math.abs(pr(o, n)), a;\n if (i < 1)\n a = 0;\n else {\n o.getMonth() === 1 && o.getDate() > 27 && o.setDate(30), o.setMonth(o.getMonth() - r * i);\n var s = Hn(o, n) === -r;\n ny(j1(e)) && i === 1 && Hn(e, n) === 1 && (s = !1), a = r * (i - Number(s));\n }\n return a === 0 ? 0 : a;\n}\nfunction ay(e, t, o) {\n Q1(2, arguments);\n var n = ty(e, t) / 1e3;\n return ry(o == null ? void 0 : o.roundingMethod)(n);\n}\nfunction Ya(e) {\n Q1(1, arguments);\n var t = j1(e), o = t.getMonth(), n = o - o % 3;\n return t.setMonth(n, 1), t.setHours(0, 0, 0, 0), t;\n}\nfunction Ql(e) {\n Q1(1, arguments);\n var t = j1(e);\n return t.setDate(1), t.setHours(0, 0, 0, 0), t;\n}\nfunction sy(e) {\n Q1(1, arguments);\n var t = j1(e), o = t.getFullYear();\n return t.setFullYear(o + 1, 0, 0), t.setHours(23, 59, 59, 999), t;\n}\nfunction Zl(e) {\n Q1(1, arguments);\n var t = j1(e), o = /* @__PURE__ */ new Date(0);\n return o.setFullYear(t.getFullYear(), 0, 1), o.setHours(0, 0, 0, 0), o;\n}\nfunction jl(e, t) {\n Q1(2, arguments);\n var o = v0(t);\n return $5(e, -o);\n}\nvar cy = 864e5;\nfunction ly(e) {\n Q1(1, arguments);\n var t = j1(e), o = t.getTime();\n t.setUTCMonth(0, 1), t.setUTCHours(0, 0, 0, 0);\n var n = t.getTime(), r = o - n;\n return Math.floor(r / cy) + 1;\n}\nfunction J3(e) {\n Q1(1, arguments);\n var t = 1, o = j1(e), n = o.getUTCDay(), r = (n < t ? 7 : 0) + n - t;\n return o.setUTCDate(o.getUTCDate() - r), o.setUTCHours(0, 0, 0, 0), o;\n}\nfunction Kl(e) {\n Q1(1, arguments);\n var t = j1(e), o = t.getUTCFullYear(), n = /* @__PURE__ */ new Date(0);\n n.setUTCFullYear(o + 1, 0, 4), n.setUTCHours(0, 0, 0, 0);\n var r = J3(n), i = /* @__PURE__ */ new Date(0);\n i.setUTCFullYear(o, 0, 4), i.setUTCHours(0, 0, 0, 0);\n var a = J3(i);\n return t.getTime() >= r.getTime() ? o + 1 : t.getTime() >= a.getTime() ? o : o - 1;\n}\nfunction py(e) {\n Q1(1, arguments);\n var t = Kl(e), o = /* @__PURE__ */ new Date(0);\n o.setUTCFullYear(t, 0, 4), o.setUTCHours(0, 0, 0, 0);\n var n = J3(o);\n return n;\n}\nvar dy = 6048e5;\nfunction Jl(e) {\n Q1(1, arguments);\n var t = j1(e), o = J3(t).getTime() - py(t).getTime();\n return Math.round(o / dy) + 1;\n}\nfunction u3(e, t) {\n var o, n, r, i, a, s, l, p;\n Q1(1, arguments);\n var d = Xt(), b = v0((o = (n = (r = (i = t == null ? void 0 : t.weekStartsOn) !== null && i !== void 0 ? i : t == null || (a = t.locale) === null || a === void 0 || (s = a.options) === null || s === void 0 ? void 0 : s.weekStartsOn) !== null && r !== void 0 ? r : d.weekStartsOn) !== null && n !== void 0 ? n : (l = d.locale) === null || l === void 0 || (p = l.options) === null || p === void 0 ? void 0 : p.weekStartsOn) !== null && o !== void 0 ? o : 0);\n if (!(b >= 0 && b <= 6))\n throw new RangeError("weekStartsOn must be between 0 and 6 inclusively");\n var M = j1(e), u = M.getUTCDay(), A = (u < b ? 7 : 0) + u - b;\n return M.setUTCDate(M.getUTCDate() - A), M.setUTCHours(0, 0, 0, 0), M;\n}\nfunction o6(e, t) {\n var o, n, r, i, a, s, l, p;\n Q1(1, arguments);\n var d = j1(e), b = d.getUTCFullYear(), M = Xt(), u = v0((o = (n = (r = (i = t == null ? void 0 : t.firstWeekContainsDate) !== null && i !== void 0 ? i : t == null || (a = t.locale) === null || a === void 0 || (s = a.options) === null || s === void 0 ? void 0 : s.firstWeekContainsDate) !== null && r !== void 0 ? r : M.firstWeekContainsDate) !== null && n !== void 0 ? n : (l = M.locale) === null || l === void 0 || (p = l.options) === null || p === void 0 ? void 0 : p.firstWeekContainsDate) !== null && o !== void 0 ? o : 1);\n if (!(u >= 1 && u <= 7))\n throw new RangeError("firstWeekContainsDate must be between 1 and 7 inclusively");\n var A = /* @__PURE__ */ new Date(0);\n A.setUTCFullYear(b + 1, 0, u), A.setUTCHours(0, 0, 0, 0);\n var z = u3(A, t), f = /* @__PURE__ */ new Date(0);\n f.setUTCFullYear(b, 0, u), f.setUTCHours(0, 0, 0, 0);\n var O = u3(f, t);\n return d.getTime() >= z.getTime() ? b + 1 : d.getTime() >= O.getTime() ? b : b - 1;\n}\nfunction by(e, t) {\n var o, n, r, i, a, s, l, p;\n Q1(1, arguments);\n var d = Xt(), b = v0((o = (n = (r = (i = t == null ? void 0 : t.firstWeekContainsDate) !== null && i !== void 0 ? i : t == null || (a = t.locale) === null || a === void 0 || (s = a.options) === null || s === void 0 ? void 0 : s.firstWeekContainsDate) !== null && r !== void 0 ? r : d.firstWeekContainsDate) !== null && n !== void 0 ? n : (l = d.locale) === null || l === void 0 || (p = l.options) === null || p === void 0 ? void 0 : p.firstWeekContainsDate) !== null && o !== void 0 ? o : 1), M = o6(e, t), u = /* @__PURE__ */ new Date(0);\n u.setUTCFullYear(M, 0, b), u.setUTCHours(0, 0, 0, 0);\n var A = u3(u, t);\n return A;\n}\nvar My = 6048e5;\nfunction _l(e, t) {\n Q1(1, arguments);\n var o = j1(e), n = u3(o, t).getTime() - by(o, t).getTime();\n return Math.round(n / My) + 1;\n}\nfunction P0(e, t) {\n for (var o = e < 0 ? "-" : "", n = Math.abs(e).toString(); n.length < t; )\n n = "0" + n;\n return o + n;\n}\nvar Ay = {\n // Year\n y: function(t, o) {\n var n = t.getUTCFullYear(), r = n > 0 ? n : 1 - n;\n return P0(o === "yy" ? r % 100 : r, o.length);\n },\n // Month\n M: function(t, o) {\n var n = t.getUTCMonth();\n return o === "M" ? String(n + 1) : P0(n + 1, 2);\n },\n // Day of the month\n d: function(t, o) {\n return P0(t.getUTCDate(), o.length);\n },\n // AM or PM\n a: function(t, o) {\n var n = t.getUTCHours() / 12 >= 1 ? "pm" : "am";\n switch (o) {\n case "a":\n case "aa":\n return n.toUpperCase();\n case "aaa":\n return n;\n case "aaaaa":\n return n[0];\n case "aaaa":\n default:\n return n === "am" ? "a.m." : "p.m.";\n }\n },\n // Hour [1-12]\n h: function(t, o) {\n return P0(t.getUTCHours() % 12 || 12, o.length);\n },\n // Hour [0-23]\n H: function(t, o) {\n return P0(t.getUTCHours(), o.length);\n },\n // Minute\n m: function(t, o) {\n return P0(t.getUTCMinutes(), o.length);\n },\n // Second\n s: function(t, o) {\n return P0(t.getUTCSeconds(), o.length);\n },\n // Fraction of second\n S: function(t, o) {\n var n = o.length, r = t.getUTCMilliseconds(), i = Math.floor(r * Math.pow(10, n - 3));\n return P0(i, o.length);\n }\n};\nconst Ct = Ay;\nvar L3 = {\n am: "am",\n pm: "pm",\n midnight: "midnight",\n noon: "noon",\n morning: "morning",\n afternoon: "afternoon",\n evening: "evening",\n night: "night"\n}, uy = {\n // Era\n G: function(t, o, n) {\n var r = t.getUTCFullYear() > 0 ? 1 : 0;\n switch (o) {\n case "G":\n case "GG":\n case "GGG":\n return n.era(r, {\n width: "abbreviated"\n });\n case "GGGGG":\n return n.era(r, {\n width: "narrow"\n });\n case "GGGG":\n default:\n return n.era(r, {\n width: "wide"\n });\n }\n },\n // Year\n y: function(t, o, n) {\n if (o === "yo") {\n var r = t.getUTCFullYear(), i = r > 0 ? r : 1 - r;\n return n.ordinalNumber(i, {\n unit: "year"\n });\n }\n return Ct.y(t, o);\n },\n // Local week-numbering year\n Y: function(t, o, n, r) {\n var i = o6(t, r), a = i > 0 ? i : 1 - i;\n if (o === "YY") {\n var s = a % 100;\n return P0(s, 2);\n }\n return o === "Yo" ? n.ordinalNumber(a, {\n unit: "year"\n }) : P0(a, o.length);\n },\n // ISO week-numbering year\n R: function(t, o) {\n var n = Kl(t);\n return P0(n, o.length);\n },\n // Extended year. This is a single number designating the year of this calendar system.\n // The main difference between `y` and `u` localizers are B.C. years:\n // | Year | `y` | `u` |\n // |------|-----|-----|\n // | AC 1 | 1 | 1 |\n // | BC 1 | 1 | 0 |\n // | BC 2 | 2 | -1 |\n // Also `yy` always returns the last two digits of a year,\n // while `uu` pads single digit years to 2 characters and returns other years unchanged.\n u: function(t, o) {\n var n = t.getUTCFullYear();\n return P0(n, o.length);\n },\n // Quarter\n Q: function(t, o, n) {\n var r = Math.ceil((t.getUTCMonth() + 1) / 3);\n switch (o) {\n case "Q":\n return String(r);\n case "QQ":\n return P0(r, 2);\n case "Qo":\n return n.ordinalNumber(r, {\n unit: "quarter"\n });\n case "QQQ":\n return n.quarter(r, {\n width: "abbreviated",\n context: "formatting"\n });\n case "QQQQQ":\n return n.quarter(r, {\n width: "narrow",\n context: "formatting"\n });\n case "QQQQ":\n default:\n return n.quarter(r, {\n width: "wide",\n context: "formatting"\n });\n }\n },\n // Stand-alone quarter\n q: function(t, o, n) {\n var r = Math.ceil((t.getUTCMonth() + 1) / 3);\n switch (o) {\n case "q":\n return String(r);\n case "qq":\n return P0(r, 2);\n case "qo":\n return n.ordinalNumber(r, {\n unit: "quarter"\n });\n case "qqq":\n return n.quarter(r, {\n width: "abbreviated",\n context: "standalone"\n });\n case "qqqqq":\n return n.quarter(r, {\n width: "narrow",\n context: "standalone"\n });\n case "qqqq":\n default:\n return n.quarter(r, {\n width: "wide",\n context: "standalone"\n });\n }\n },\n // Month\n M: function(t, o, n) {\n var r = t.getUTCMonth();\n switch (o) {\n case "M":\n case "MM":\n return Ct.M(t, o);\n case "Mo":\n return n.ordinalNumber(r + 1, {\n unit: "month"\n });\n case "MMM":\n return n.month(r, {\n width: "abbreviated",\n context: "formatting"\n });\n case "MMMMM":\n return n.month(r, {\n width: "narrow",\n context: "formatting"\n });\n case "MMMM":\n default:\n return n.month(r, {\n width: "wide",\n context: "formatting"\n });\n }\n },\n // Stand-alone month\n L: function(t, o, n) {\n var r = t.getUTCMonth();\n switch (o) {\n case "L":\n return String(r + 1);\n case "LL":\n return P0(r + 1, 2);\n case "Lo":\n return n.ordinalNumber(r + 1, {\n unit: "month"\n });\n case "LLL":\n return n.month(r, {\n width: "abbreviated",\n context: "standalone"\n });\n case "LLLLL":\n return n.month(r, {\n width: "narrow",\n context: "standalone"\n });\n case "LLLL":\n default:\n return n.month(r, {\n width: "wide",\n context: "standalone"\n });\n }\n },\n // Local week of year\n w: function(t, o, n, r) {\n var i = _l(t, r);\n return o === "wo" ? n.ordinalNumber(i, {\n unit: "week"\n }) : P0(i, o.length);\n },\n // ISO week of year\n I: function(t, o, n) {\n var r = Jl(t);\n return o === "Io" ? n.ordinalNumber(r, {\n unit: "week"\n }) : P0(r, o.length);\n },\n // Day of the month\n d: function(t, o, n) {\n return o === "do" ? n.ordinalNumber(t.getUTCDate(), {\n unit: "date"\n }) : Ct.d(t, o);\n },\n // Day of year\n D: function(t, o, n) {\n var r = ly(t);\n return o === "Do" ? n.ordinalNumber(r, {\n unit: "dayOfYear"\n }) : P0(r, o.length);\n },\n // Day of week\n E: function(t, o, n) {\n var r = t.getUTCDay();\n switch (o) {\n case "E":\n case "EE":\n case "EEE":\n return n.day(r, {\n width: "abbreviated",\n context: "formatting"\n });\n case "EEEEE":\n return n.day(r, {\n width: "narrow",\n context: "formatting"\n });\n case "EEEEEE":\n return n.day(r, {\n width: "short",\n context: "formatting"\n });\n case "EEEE":\n default:\n return n.day(r, {\n width: "wide",\n context: "formatting"\n });\n }\n },\n // Local day of week\n e: function(t, o, n, r) {\n var i = t.getUTCDay(), a = (i - r.weekStartsOn + 8) % 7 || 7;\n switch (o) {\n case "e":\n return String(a);\n case "ee":\n return P0(a, 2);\n case "eo":\n return n.ordinalNumber(a, {\n unit: "day"\n });\n case "eee":\n return n.day(i, {\n width: "abbreviated",\n context: "formatting"\n });\n case "eeeee":\n return n.day(i, {\n width: "narrow",\n context: "formatting"\n });\n case "eeeeee":\n return n.day(i, {\n width: "short",\n context: "formatting"\n });\n case "eeee":\n default:\n return n.day(i, {\n width: "wide",\n context: "formatting"\n });\n }\n },\n // Stand-alone local day of week\n c: function(t, o, n, r) {\n var i = t.getUTCDay(), a = (i - r.weekStartsOn + 8) % 7 || 7;\n switch (o) {\n case "c":\n return String(a);\n case "cc":\n return P0(a, o.length);\n case "co":\n return n.ordinalNumber(a, {\n unit: "day"\n });\n case "ccc":\n return n.day(i, {\n width: "abbreviated",\n context: "standalone"\n });\n case "ccccc":\n return n.day(i, {\n width: "narrow",\n context: "standalone"\n });\n case "cccccc":\n return n.day(i, {\n width: "short",\n context: "standalone"\n });\n case "cccc":\n default:\n return n.day(i, {\n width: "wide",\n context: "standalone"\n });\n }\n },\n // ISO day of week\n i: function(t, o, n) {\n var r = t.getUTCDay(), i = r === 0 ? 7 : r;\n switch (o) {\n case "i":\n return String(i);\n case "ii":\n return P0(i, o.length);\n case "io":\n return n.ordinalNumber(i, {\n unit: "day"\n });\n case "iii":\n return n.day(r, {\n width: "abbreviated",\n context: "formatting"\n });\n case "iiiii":\n return n.day(r, {\n width: "narrow",\n context: "formatting"\n });\n case "iiiiii":\n return n.day(r, {\n width: "short",\n context: "formatting"\n });\n case "iiii":\n default:\n return n.day(r, {\n width: "wide",\n context: "formatting"\n });\n }\n },\n // AM or PM\n a: function(t, o, n) {\n var r = t.getUTCHours(), i = r / 12 >= 1 ? "pm" : "am";\n switch (o) {\n case "a":\n case "aa":\n return n.dayPeriod(i, {\n width: "abbreviated",\n context: "formatting"\n });\n case "aaa":\n return n.dayPeriod(i, {\n width: "abbreviated",\n context: "formatting"\n }).toLowerCase();\n case "aaaaa":\n return n.dayPeriod(i, {\n width: "narrow",\n context: "formatting"\n });\n case "aaaa":\n default:\n return n.dayPeriod(i, {\n width: "wide",\n context: "formatting"\n });\n }\n },\n // AM, PM, midnight, noon\n b: function(t, o, n) {\n var r = t.getUTCHours(), i;\n switch (r === 12 ? i = L3.noon : r === 0 ? i = L3.midnight : i = r / 12 >= 1 ? "pm" : "am", o) {\n case "b":\n case "bb":\n return n.dayPeriod(i, {\n width: "abbreviated",\n context: "formatting"\n });\n case "bbb":\n return n.dayPeriod(i, {\n width: "abbreviated",\n context: "formatting"\n }).toLowerCase();\n case "bbbbb":\n return n.dayPeriod(i, {\n width: "narrow",\n context: "formatting"\n });\n case "bbbb":\n default:\n return n.dayPeriod(i, {\n width: "wide",\n context: "formatting"\n });\n }\n },\n // in the morning, in the afternoon, in the evening, at night\n B: function(t, o, n) {\n var r = t.getUTCHours(), i;\n switch (r >= 17 ? i = L3.evening : r >= 12 ? i = L3.afternoon : r >= 4 ? i = L3.morning : i = L3.night, o) {\n case "B":\n case "BB":\n case "BBB":\n return n.dayPeriod(i, {\n width: "abbreviated",\n context: "formatting"\n });\n case "BBBBB":\n return n.dayPeriod(i, {\n width: "narrow",\n context: "formatting"\n });\n case "BBBB":\n default:\n return n.dayPeriod(i, {\n width: "wide",\n context: "formatting"\n });\n }\n },\n // Hour [1-12]\n h: function(t, o, n) {\n if (o === "ho") {\n var r = t.getUTCHours() % 12;\n return r === 0 && (r = 12), n.ordinalNumber(r, {\n unit: "hour"\n });\n }\n return Ct.h(t, o);\n },\n // Hour [0-23]\n H: function(t, o, n) {\n return o === "Ho" ? n.ordinalNumber(t.getUTCHours(), {\n unit: "hour"\n }) : Ct.H(t, o);\n },\n // Hour [0-11]\n K: function(t, o, n) {\n var r = t.getUTCHours() % 12;\n return o === "Ko" ? n.ordinalNumber(r, {\n unit: "hour"\n }) : P0(r, o.length);\n },\n // Hour [1-24]\n k: function(t, o, n) {\n var r = t.getUTCHours();\n return r === 0 && (r = 24), o === "ko" ? n.ordinalNumber(r, {\n unit: "hour"\n }) : P0(r, o.length);\n },\n // Minute\n m: function(t, o, n) {\n return o === "mo" ? n.ordinalNumber(t.getUTCMinutes(), {\n unit: "minute"\n }) : Ct.m(t, o);\n },\n // Second\n s: function(t, o, n) {\n return o === "so" ? n.ordinalNumber(t.getUTCSeconds(), {\n unit: "second"\n }) : Ct.s(t, o);\n },\n // Fraction of second\n S: function(t, o) {\n return Ct.S(t, o);\n },\n // Timezone (ISO-8601. If offset is 0, output is always `\'Z\'`)\n X: function(t, o, n, r) {\n var i = r._originalDate || t, a = i.getTimezoneOffset();\n if (a === 0)\n return "Z";\n switch (o) {\n case "X":\n return T8(a);\n case "XXXX":\n case "XX":\n return $t(a);\n case "XXXXX":\n case "XXX":\n default:\n return $t(a, ":");\n }\n },\n // Timezone (ISO-8601. If offset is 0, output is `\'+00:00\'` or equivalent)\n x: function(t, o, n, r) {\n var i = r._originalDate || t, a = i.getTimezoneOffset();\n switch (o) {\n case "x":\n return T8(a);\n case "xxxx":\n case "xx":\n return $t(a);\n case "xxxxx":\n case "xxx":\n default:\n return $t(a, ":");\n }\n },\n // Timezone (GMT)\n O: function(t, o, n, r) {\n var i = r._originalDate || t, a = i.getTimezoneOffset();\n switch (o) {\n case "O":\n case "OO":\n case "OOO":\n return "GMT" + N8(a, ":");\n case "OOOO":\n default:\n return "GMT" + $t(a, ":");\n }\n },\n // Timezone (specific non-location)\n z: function(t, o, n, r) {\n var i = r._originalDate || t, a = i.getTimezoneOffset();\n switch (o) {\n case "z":\n case "zz":\n case "zzz":\n return "GMT" + N8(a, ":");\n case "zzzz":\n default:\n return "GMT" + $t(a, ":");\n }\n },\n // Seconds timestamp\n t: function(t, o, n, r) {\n var i = r._originalDate || t, a = Math.floor(i.getTime() / 1e3);\n return P0(a, o.length);\n },\n // Milliseconds timestamp\n T: function(t, o, n, r) {\n var i = r._originalDate || t, a = i.getTime();\n return P0(a, o.length);\n }\n};\nfunction N8(e, t) {\n var o = e > 0 ? "-" : "+", n = Math.abs(e), r = Math.floor(n / 60), i = n % 60;\n if (i === 0)\n return o + String(r);\n var a = t || "";\n return o + String(r) + a + P0(i, 2);\n}\nfunction T8(e, t) {\n if (e % 60 === 0) {\n var o = e > 0 ? "-" : "+";\n return o + P0(Math.abs(e) / 60, 2);\n }\n return $t(e, t);\n}\nfunction $t(e, t) {\n var o = t || "", n = e > 0 ? "-" : "+", r = Math.abs(e), i = P0(Math.floor(r / 60), 2), a = P0(r % 60, 2);\n return n + i + o + a;\n}\nconst zy = uy;\nvar I8 = function(t, o) {\n switch (t) {\n case "P":\n return o.date({\n width: "short"\n });\n case "PP":\n return o.date({\n width: "medium"\n });\n case "PPP":\n return o.date({\n width: "long"\n });\n case "PPPP":\n default:\n return o.date({\n width: "full"\n });\n }\n}, $l = function(t, o) {\n switch (t) {\n case "p":\n return o.time({\n width: "short"\n });\n case "pp":\n return o.time({\n width: "medium"\n });\n case "ppp":\n return o.time({\n width: "long"\n });\n case "pppp":\n default:\n return o.time({\n width: "full"\n });\n }\n}, hy = function(t, o) {\n var n = t.match(/(P+)(p+)?/) || [], r = n[1], i = n[2];\n if (!i)\n return I8(t, o);\n var a;\n switch (r) {\n case "P":\n a = o.dateTime({\n width: "short"\n });\n break;\n case "PP":\n a = o.dateTime({\n width: "medium"\n });\n break;\n case "PPP":\n a = o.dateTime({\n width: "long"\n });\n break;\n case "PPPP":\n default:\n a = o.dateTime({\n width: "full"\n });\n break;\n }\n return a.replace("{{date}}", I8(r, o)).replace("{{time}}", $l(i, o));\n}, Oy = {\n p: $l,\n P: hy\n};\nconst Ga = Oy;\nvar fy = ["D", "DD"], gy = ["YY", "YYYY"];\nfunction ep(e) {\n return fy.indexOf(e) !== -1;\n}\nfunction tp(e) {\n return gy.indexOf(e) !== -1;\n}\nfunction M4(e, t, o) {\n if (e === "YYYY")\n throw new RangeError("Use `yyyy` instead of `YYYY` (in `".concat(t, "`) for formatting years to the input `").concat(o, "`; see: https://github.com/date-fns/date-fns/blob/master/docs/unicodeTokens.md"));\n if (e === "YY")\n throw new RangeError("Use `yy` instead of `YY` (in `".concat(t, "`) for formatting years to the input `").concat(o, "`; see: https://github.com/date-fns/date-fns/blob/master/docs/unicodeTokens.md"));\n if (e === "D")\n throw new RangeError("Use `d` instead of `D` (in `".concat(t, "`) for formatting days of the month to the input `").concat(o, "`; see: https://github.com/date-fns/date-fns/blob/master/docs/unicodeTokens.md"));\n if (e === "DD")\n throw new RangeError("Use `dd` instead of `DD` (in `".concat(t, "`) for formatting days of the month to the input `").concat(o, "`; see: https://github.com/date-fns/date-fns/blob/master/docs/unicodeTokens.md"));\n}\nvar Cy = {\n lessThanXSeconds: {\n one: "less than a second",\n other: "less than {{count}} seconds"\n },\n xSeconds: {\n one: "1 second",\n other: "{{count}} seconds"\n },\n halfAMinute: "half a minute",\n lessThanXMinutes: {\n one: "less than a minute",\n other: "less than {{count}} minutes"\n },\n xMinutes: {\n one: "1 minute",\n other: "{{count}} minutes"\n },\n aboutXHours: {\n one: "about 1 hour",\n other: "about {{count}} hours"\n },\n xHours: {\n one: "1 hour",\n other: "{{count}} hours"\n },\n xDays: {\n one: "1 day",\n other: "{{count}} days"\n },\n aboutXWeeks: {\n one: "about 1 week",\n other: "about {{count}} weeks"\n },\n xWeeks: {\n one: "1 week",\n other: "{{count}} weeks"\n },\n aboutXMonths: {\n one: "about 1 month",\n other: "about {{count}} months"\n },\n xMonths: {\n one: "1 month",\n other: "{{count}} months"\n },\n aboutXYears: {\n one: "about 1 year",\n other: "about {{count}} years"\n },\n xYears: {\n one: "1 year",\n other: "{{count}} years"\n },\n overXYears: {\n one: "over 1 year",\n other: "over {{count}} years"\n },\n almostXYears: {\n one: "almost 1 year",\n other: "almost {{count}} years"\n }\n}, my = function(t, o, n) {\n var r, i = Cy[t];\n return typeof i == "string" ? r = i : o === 1 ? r = i.one : r = i.other.replace("{{count}}", o.toString()), n != null && n.addSuffix ? n.comparison && n.comparison > 0 ? "in " + r : r + " ago" : r;\n};\nconst Ly = my;\nfunction mi(e) {\n return function() {\n var t = arguments.length > 0 && arguments[0] !== void 0 ? arguments[0] : {}, o = t.width ? String(t.width) : e.defaultWidth, n = e.formats[o] || e.formats[e.defaultWidth];\n return n;\n };\n}\nvar vy = {\n full: "EEEE, MMMM do, y",\n long: "MMMM do, y",\n medium: "MMM d, y",\n short: "MM/dd/yyyy"\n}, qy = {\n full: "h:mm:ss a zzzz",\n long: "h:mm:ss a z",\n medium: "h:mm:ss a",\n short: "h:mm a"\n}, yy = {\n full: "{{date}} \'at\' {{time}}",\n long: "{{date}} \'at\' {{time}}",\n medium: "{{date}}, {{time}}",\n short: "{{date}}, {{time}}"\n}, wy = {\n date: mi({\n formats: vy,\n defaultWidth: "full"\n }),\n time: mi({\n formats: qy,\n defaultWidth: "full"\n }),\n dateTime: mi({\n formats: yy,\n defaultWidth: "full"\n })\n};\nconst xy = wy;\nvar Wy = {\n lastWeek: "\'last\' eeee \'at\' p",\n yesterday: "\'yesterday at\' p",\n today: "\'today at\' p",\n tomorrow: "\'tomorrow at\' p",\n nextWeek: "eeee \'at\' p",\n other: "P"\n}, Ry = function(t, o, n, r) {\n return Wy[t];\n};\nconst By = Ry;\nfunction Ro(e) {\n return function(t, o) {\n var n = o != null && o.context ? String(o.context) : "standalone", r;\n if (n === "formatting" && e.formattingValues) {\n var i = e.defaultFormattingWidth || e.defaultWidth, a = o != null && o.width ? String(o.width) : i;\n r = e.formattingValues[a] || e.formattingValues[i];\n } else {\n var s = e.defaultWidth, l = o != null && o.width ? String(o.width) : e.defaultWidth;\n r = e.values[l] || e.values[s];\n }\n var p = e.argumentCallback ? e.argumentCallback(t) : t;\n return r[p];\n };\n}\nvar Sy = {\n narrow: ["B", "A"],\n abbreviated: ["BC", "AD"],\n wide: ["Before Christ", "Anno Domini"]\n}, Ey = {\n narrow: ["1", "2", "3", "4"],\n abbreviated: ["Q1", "Q2", "Q3", "Q4"],\n wide: ["1st quarter", "2nd quarter", "3rd quarter", "4th quarter"]\n}, ky = {\n narrow: ["J", "F", "M", "A", "M", "J", "J", "A", "S", "O", "N", "D"],\n abbreviated: ["Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"],\n wide: ["January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"]\n}, Ny = {\n narrow: ["S", "M", "T", "W", "T", "F", "S"],\n short: ["Su", "Mo", "Tu", "We", "Th", "Fr", "Sa"],\n abbreviated: ["Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"],\n wide: ["Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"]\n}, Ty = {\n narrow: {\n am: "a",\n pm: "p",\n midnight: "mi",\n noon: "n",\n morning: "morning",\n afternoon: "afternoon",\n evening: "evening",\n night: "night"\n },\n abbreviated: {\n am: "AM",\n pm: "PM",\n midnight: "midnight",\n noon: "noon",\n morning: "morning",\n afternoon: "afternoon",\n evening: "evening",\n night: "night"\n },\n wide: {\n am: "a.m.",\n pm: "p.m.",\n midnight: "midnight",\n noon: "noon",\n morning: "morning",\n afternoon: "afternoon",\n evening: "evening",\n night: "night"\n }\n}, Iy = {\n narrow: {\n am: "a",\n pm: "p",\n midnight: "mi",\n noon: "n",\n morning: "in the morning",\n afternoon: "in the afternoon",\n evening: "in the evening",\n night: "at night"\n },\n abbreviated: {\n am: "AM",\n pm: "PM",\n midnight: "midnight",\n noon: "noon",\n morning: "in the morning",\n afternoon: "in the afternoon",\n evening: "in the evening",\n night: "at night"\n },\n wide: {\n am: "a.m.",\n pm: "p.m.",\n midnight: "midnight",\n noon: "noon",\n morning: "in the morning",\n afternoon: "in the afternoon",\n evening: "in the evening",\n night: "at night"\n }\n}, Dy = function(t, o) {\n var n = Number(t), r = n % 100;\n if (r > 20 || r < 10)\n switch (r % 10) {\n case 1:\n return n + "st";\n case 2:\n return n + "nd";\n case 3:\n return n + "rd";\n }\n return n + "th";\n}, Hy = {\n ordinalNumber: Dy,\n era: Ro({\n values: Sy,\n defaultWidth: "wide"\n }),\n quarter: Ro({\n values: Ey,\n defaultWidth: "wide",\n argumentCallback: function(t) {\n return t - 1;\n }\n }),\n month: Ro({\n values: ky,\n defaultWidth: "wide"\n }),\n day: Ro({\n values: Ny,\n defaultWidth: "wide"\n }),\n dayPeriod: Ro({\n values: Ty,\n defaultWidth: "wide",\n formattingValues: Iy,\n defaultFormattingWidth: "wide"\n })\n};\nconst Vy = Hy;\nfunction Bo(e) {\n return function(t) {\n var o = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : {}, n = o.width, r = n && e.matchPatterns[n] || e.matchPatterns[e.defaultMatchWidth], i = t.match(r);\n if (!i)\n return null;\n var a = i[0], s = n && e.parsePatterns[n] || e.parsePatterns[e.defaultParseWidth], l = Array.isArray(s) ? Fy(s, function(b) {\n return b.test(a);\n }) : Py(s, function(b) {\n return b.test(a);\n }), p;\n p = e.valueCallback ? e.valueCallback(l) : l, p = o.valueCallback ? o.valueCallback(p) : p;\n var d = t.slice(a.length);\n return {\n value: p,\n rest: d\n };\n };\n}\nfunction Py(e, t) {\n for (var o in e)\n if (e.hasOwnProperty(o) && t(e[o]))\n return o;\n}\nfunction Fy(e, t) {\n for (var o = 0; o < e.length; o++)\n if (t(e[o]))\n return o;\n}\nfunction Xy(e) {\n return function(t) {\n var o = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : {}, n = t.match(e.matchPattern);\n if (!n)\n return null;\n var r = n[0], i = t.match(e.parsePattern);\n if (!i)\n return null;\n var a = e.valueCallback ? e.valueCallback(i[0]) : i[0];\n a = o.valueCallback ? o.valueCallback(a) : a;\n var s = t.slice(r.length);\n return {\n value: a,\n rest: s\n };\n };\n}\nvar Uy = /^(\\d+)(th|st|nd|rd)?/i, Yy = /\\d+/i, Gy = {\n narrow: /^(b|a)/i,\n abbreviated: /^(b\\.?\\s?c\\.?|b\\.?\\s?c\\.?\\s?e\\.?|a\\.?\\s?d\\.?|c\\.?\\s?e\\.?)/i,\n wide: /^(before christ|before common era|anno domini|common era)/i\n}, Qy = {\n any: [/^b/i, /^(a|c)/i]\n}, Zy = {\n narrow: /^[1234]/i,\n abbreviated: /^q[1234]/i,\n wide: /^[1234](th|st|nd|rd)? quarter/i\n}, jy = {\n any: [/1/i, /2/i, /3/i, /4/i]\n}, Ky = {\n narrow: /^[jfmasond]/i,\n abbreviated: /^(jan|feb|mar|apr|may|jun|jul|aug|sep|oct|nov|dec)/i,\n wide: /^(january|february|march|april|may|june|july|august|september|october|november|december)/i\n}, Jy = {\n narrow: [/^j/i, /^f/i, /^m/i, /^a/i, /^m/i, /^j/i, /^j/i, /^a/i, /^s/i, /^o/i, /^n/i, /^d/i],\n any: [/^ja/i, /^f/i, /^mar/i, /^ap/i, /^may/i, /^jun/i, /^jul/i, /^au/i, /^s/i, /^o/i, /^n/i, /^d/i]\n}, _y = {\n narrow: /^[smtwf]/i,\n short: /^(su|mo|tu|we|th|fr|sa)/i,\n abbreviated: /^(sun|mon|tue|wed|thu|fri|sat)/i,\n wide: /^(sunday|monday|tuesday|wednesday|thursday|friday|saturday)/i\n}, $y = {\n narrow: [/^s/i, /^m/i, /^t/i, /^w/i, /^t/i, /^f/i, /^s/i],\n any: [/^su/i, /^m/i, /^tu/i, /^w/i, /^th/i, /^f/i, /^sa/i]\n}, ew = {\n narrow: /^(a|p|mi|n|(in the|at) (morning|afternoon|evening|night))/i,\n any: /^([ap]\\.?\\s?m\\.?|midnight|noon|(in the|at) (morning|afternoon|evening|night))/i\n}, tw = {\n any: {\n am: /^a/i,\n pm: /^p/i,\n midnight: /^mi/i,\n noon: /^no/i,\n morning: /morning/i,\n afternoon: /afternoon/i,\n evening: /evening/i,\n night: /night/i\n }\n}, ow = {\n ordinalNumber: Xy({\n matchPattern: Uy,\n parsePattern: Yy,\n valueCallback: function(t) {\n return parseInt(t, 10);\n }\n }),\n era: Bo({\n matchPatterns: Gy,\n defaultMatchWidth: "wide",\n parsePatterns: Qy,\n defaultParseWidth: "any"\n }),\n quarter: Bo({\n matchPatterns: Zy,\n defaultMatchWidth: "wide",\n parsePatterns: jy,\n defaultParseWidth: "any",\n valueCallback: function(t) {\n return t + 1;\n }\n }),\n month: Bo({\n matchPatterns: Ky,\n defaultMatchWidth: "wide",\n parsePatterns: Jy,\n defaultParseWidth: "any"\n }),\n day: Bo({\n matchPatterns: _y,\n defaultMatchWidth: "wide",\n parsePatterns: $y,\n defaultParseWidth: "any"\n }),\n dayPeriod: Bo({\n matchPatterns: ew,\n defaultMatchWidth: "any",\n parsePatterns: tw,\n defaultParseWidth: "any"\n })\n};\nconst rw = ow;\nvar nw = {\n code: "en-US",\n formatDistance: Ly,\n formatLong: xy,\n formatRelative: By,\n localize: Vy,\n match: rw,\n options: {\n weekStartsOn: 0,\n firstWeekContainsDate: 1\n }\n};\nconst r6 = nw;\nvar iw = /[yYQqMLwIdDecihHKkms]o|(\\w)\\1*|\'\'|\'(\'\'|[^\'])+(\'|$)|./g, aw = /P+p+|P+|p+|\'\'|\'(\'\'|[^\'])+(\'|$)|./g, sw = /^\'([^]*?)\'?$/, cw = /\'\'/g, lw = /[a-zA-Z]/;\nfunction dr(e, t, o) {\n var n, r, i, a, s, l, p, d, b, M, u, A, z, f, O, h, g, v;\n Q1(2, arguments);\n var L = String(t), y = Xt(), B = (n = (r = o == null ? void 0 : o.locale) !== null && r !== void 0 ? r : y.locale) !== null && n !== void 0 ? n : r6, X = v0((i = (a = (s = (l = o == null ? void 0 : o.firstWeekContainsDate) !== null && l !== void 0 ? l : o == null || (p = o.locale) === null || p === void 0 || (d = p.options) === null || d === void 0 ? void 0 : d.firstWeekContainsDate) !== null && s !== void 0 ? s : y.firstWeekContainsDate) !== null && a !== void 0 ? a : (b = y.locale) === null || b === void 0 || (M = b.options) === null || M === void 0 ? void 0 : M.firstWeekContainsDate) !== null && i !== void 0 ? i : 1);\n if (!(X >= 1 && X <= 7))\n throw new RangeError("firstWeekContainsDate must be between 1 and 7 inclusively");\n var F = v0((u = (A = (z = (f = o == null ? void 0 : o.weekStartsOn) !== null && f !== void 0 ? f : o == null || (O = o.locale) === null || O === void 0 || (h = O.options) === null || h === void 0 ? void 0 : h.weekStartsOn) !== null && z !== void 0 ? z : y.weekStartsOn) !== null && A !== void 0 ? A : (g = y.locale) === null || g === void 0 || (v = g.options) === null || v === void 0 ? void 0 : v.weekStartsOn) !== null && u !== void 0 ? u : 0);\n if (!(F >= 0 && F <= 6))\n throw new RangeError("weekStartsOn must be between 0 and 6 inclusively");\n if (!B.localize)\n throw new RangeError("locale must contain localize property");\n if (!B.formatLong)\n throw new RangeError("locale must contain formatLong property");\n var T = j1(e);\n if (!lr(T))\n throw new RangeError("Invalid time value");\n var w = j3(T), H = jl(T, w), C = {\n firstWeekContainsDate: X,\n weekStartsOn: F,\n locale: B,\n _originalDate: T\n }, q = L.match(aw).map(function(m) {\n var k = m[0];\n if (k === "p" || k === "P") {\n var x = Ga[k];\n return x(m, B.formatLong);\n }\n return m;\n }).join("").match(iw).map(function(m) {\n if (m === "\'\'")\n return "\'";\n var k = m[0];\n if (k === "\'")\n return pw(m);\n var x = zy[k];\n if (x)\n return !(o != null && o.useAdditionalWeekYearTokens) && tp(m) && M4(m, t, String(e)), !(o != null && o.useAdditionalDayOfYearTokens) && ep(m) && M4(m, t, String(e)), x(H, m, B.localize, C);\n if (k.match(lw))\n throw new RangeError("Format string contains an unescaped latin alphabet character `" + k + "`");\n return m;\n }).join("");\n return q;\n}\nfunction pw(e) {\n var t = e.match(sw);\n return t ? t[1].replace(cw, "\'") : e;\n}\nfunction n6(e, t) {\n if (e == null)\n throw new TypeError("assign requires that input parameter not be null or undefined");\n for (var o in t)\n Object.prototype.hasOwnProperty.call(t, o) && (e[o] = t[o]);\n return e;\n}\nfunction dw(e) {\n return n6({}, e);\n}\nvar D8 = 1440, bw = 2520, Li = 43200, Mw = 86400;\nfunction Aw(e, t, o) {\n var n, r;\n Q1(2, arguments);\n var i = Xt(), a = (n = (r = o == null ? void 0 : o.locale) !== null && r !== void 0 ? r : i.locale) !== null && n !== void 0 ? n : r6;\n if (!a.formatDistance)\n throw new RangeError("locale must contain formatDistance property");\n var s = Hn(e, t);\n if (isNaN(s))\n throw new RangeError("Invalid time value");\n var l = n6(dw(o), {\n addSuffix: !!(o != null && o.addSuffix),\n comparison: s\n }), p, d;\n s > 0 ? (p = j1(t), d = j1(e)) : (p = j1(e), d = j1(t));\n var b = ay(d, p), M = (j3(d) - j3(p)) / 1e3, u = Math.round((b - M) / 60), A;\n if (u < 2)\n return o != null && o.includeSeconds ? b < 5 ? a.formatDistance("lessThanXSeconds", 5, l) : b < 10 ? a.formatDistance("lessThanXSeconds", 10, l) : b < 20 ? a.formatDistance("lessThanXSeconds", 20, l) : b < 40 ? a.formatDistance("halfAMinute", 0, l) : b < 60 ? a.formatDistance("lessThanXMinutes", 1, l) : a.formatDistance("xMinutes", 1, l) : u === 0 ? a.formatDistance("lessThanXMinutes", 1, l) : a.formatDistance("xMinutes", u, l);\n if (u < 45)\n return a.formatDistance("xMinutes", u, l);\n if (u < 90)\n return a.formatDistance("aboutXHours", 1, l);\n if (u < D8) {\n var z = Math.round(u / 60);\n return a.formatDistance("aboutXHours", z, l);\n } else {\n if (u < bw)\n return a.formatDistance("xDays", 1, l);\n if (u < Li) {\n var f = Math.round(u / D8);\n return a.formatDistance("xDays", f, l);\n } else if (u < Mw)\n return A = Math.round(u / Li), a.formatDistance("aboutXMonths", A, l);\n }\n if (A = iy(d, p), A < 12) {\n var O = Math.round(u / Li);\n return a.formatDistance("xMonths", O, l);\n } else {\n var h = A % 12, g = Math.floor(A / 12);\n return h < 3 ? a.formatDistance("aboutXYears", g, l) : h < 9 ? a.formatDistance("overXYears", g, l) : a.formatDistance("almostXYears", g + 1, l);\n }\n}\nfunction uw(e, t) {\n return Q1(1, arguments), Aw(e, Date.now(), t);\n}\nfunction H8(e) {\n Q1(1, arguments);\n var t = j1(e), o = t.getDate();\n return o;\n}\nfunction zw(e) {\n Q1(1, arguments);\n var t = j1(e), o = t.getDay();\n return o;\n}\nfunction hw(e) {\n Q1(1, arguments);\n var t = j1(e), o = t.getFullYear(), n = t.getMonth(), r = /* @__PURE__ */ new Date(0);\n return r.setFullYear(o, n + 1, 0), r.setHours(0, 0, 0, 0), r.getDate();\n}\nfunction Pe(e) {\n Q1(1, arguments);\n var t = j1(e), o = t.getHours();\n return o;\n}\nvar Ow = 6048e5;\nfunction fw(e) {\n Q1(1, arguments);\n var t = j1(e), o = c4(t).getTime() - Kq(t).getTime();\n return Math.round(o / Ow) + 1;\n}\nfunction Fe(e) {\n Q1(1, arguments);\n var t = j1(e), o = t.getMinutes();\n return o;\n}\nfunction g2(e) {\n Q1(1, arguments);\n var t = j1(e), o = t.getMonth();\n return o;\n}\nfunction V8(e) {\n Q1(1, arguments);\n var t = j1(e), o = t.getSeconds();\n return o;\n}\nfunction Qa(e) {\n Q1(1, arguments);\n var t = j1(e), o = t.getTime();\n return o;\n}\nfunction L0(e) {\n return Q1(1, arguments), j1(e).getFullYear();\n}\nfunction Dt(e, t) {\n Q1(2, arguments);\n var o = j1(e), n = j1(t);\n return o.getTime() > n.getTime();\n}\nfunction vt(e, t) {\n Q1(2, arguments);\n var o = j1(e), n = j1(t);\n return o.getTime() < n.getTime();\n}\nfunction gw(e, t) {\n Q1(2, arguments);\n var o = j1(e), n = j1(t);\n return o.getTime() === n.getTime();\n}\nfunction P8(e, t) {\n (t == null || t > e.length) && (t = e.length);\n for (var o = 0, n = Array(t); o < t; o++)\n n[o] = e[o];\n return n;\n}\nfunction Cw(e, t) {\n if (e) {\n if (typeof e == "string")\n return P8(e, t);\n var o = {}.toString.call(e).slice(8, -1);\n return o === "Object" && e.constructor && (o = e.constructor.name), o === "Map" || o === "Set" ? Array.from(e) : o === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(o) ? P8(e, t) : void 0;\n }\n}\nfunction F8(e, t) {\n var o = typeof Symbol < "u" && e[Symbol.iterator] || e["@@iterator"];\n if (!o) {\n if (Array.isArray(e) || (o = Cw(e)) || t && e && typeof e.length == "number") {\n o && (e = o);\n var n = 0, r = function() {\n };\n return {\n s: r,\n n: function() {\n return n >= e.length ? {\n done: !0\n } : {\n done: !1,\n value: e[n++]\n };\n },\n e: function(p) {\n throw p;\n },\n f: r\n };\n }\n throw new TypeError(`Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.`);\n }\n var i, a = !0, s = !1;\n return {\n s: function() {\n o = o.call(e);\n },\n n: function() {\n var p = o.next();\n return a = p.done, p;\n },\n e: function(p) {\n s = !0, i = p;\n },\n f: function() {\n try {\n a || o.return == null || o.return();\n } finally {\n if (s)\n throw i;\n }\n }\n };\n}\nfunction o0(e) {\n if (e === void 0)\n throw new ReferenceError("this hasn\'t been initialised - super() hasn\'t been called");\n return e;\n}\nfunction S0(e, t) {\n if (typeof t != "function" && t !== null)\n throw new TypeError("Super expression must either be null or a function");\n e.prototype = Object.create(t && t.prototype, {\n constructor: {\n value: e,\n writable: !0,\n configurable: !0\n }\n }), Object.defineProperty(e, "prototype", {\n writable: !1\n }), t && a4(e, t);\n}\nfunction A4(e) {\n return A4 = Object.setPrototypeOf ? Object.getPrototypeOf.bind() : function(t) {\n return t.__proto__ || Object.getPrototypeOf(t);\n }, A4(e);\n}\nfunction op() {\n try {\n var e = !Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function() {\n }));\n } catch {\n }\n return (op = function() {\n return !!e;\n })();\n}\nfunction mw(e, t) {\n if (t && (Me(t) == "object" || typeof t == "function"))\n return t;\n if (t !== void 0)\n throw new TypeError("Derived constructors may only return object or undefined");\n return o0(e);\n}\nfunction E0(e) {\n var t = op();\n return function() {\n var o, n = A4(e);\n if (t) {\n var r = A4(this).constructor;\n o = Reflect.construct(n, arguments, r);\n } else\n o = n.apply(this, arguments);\n return mw(this, o);\n };\n}\nfunction y0(e, t) {\n if (!(e instanceof t))\n throw new TypeError("Cannot call a class as a function");\n}\nfunction Lw(e, t) {\n if (Me(e) != "object" || !e)\n return e;\n var o = e[Symbol.toPrimitive];\n if (o !== void 0) {\n var n = o.call(e, t || "default");\n if (Me(n) != "object")\n return n;\n throw new TypeError("@@toPrimitive must return a primitive value.");\n }\n return (t === "string" ? String : Number)(e);\n}\nfunction rp(e) {\n var t = Lw(e, "string");\n return Me(t) == "symbol" ? t : t + "";\n}\nfunction X8(e, t) {\n for (var o = 0; o < t.length; o++) {\n var n = t[o];\n n.enumerable = n.enumerable || !1, n.configurable = !0, "value" in n && (n.writable = !0), Object.defineProperty(e, rp(n.key), n);\n }\n}\nfunction w0(e, t, o) {\n return t && X8(e.prototype, t), o && X8(e, o), Object.defineProperty(e, "prototype", {\n writable: !1\n }), e;\n}\nfunction t0(e, t, o) {\n return (t = rp(t)) in e ? Object.defineProperty(e, t, {\n value: o,\n enumerable: !0,\n configurable: !0,\n writable: !0\n }) : e[t] = o, e;\n}\nvar vw = 10, np = /* @__PURE__ */ function() {\n function e() {\n y0(this, e), t0(this, "priority", void 0), t0(this, "subPriority", 0);\n }\n return w0(e, [{\n key: "validate",\n value: function(o, n) {\n return !0;\n }\n }]), e;\n}(), qw = /* @__PURE__ */ function(e) {\n S0(o, e);\n var t = E0(o);\n function o(n, r, i, a, s) {\n var l;\n return y0(this, o), l = t.call(this), l.value = n, l.validateValue = r, l.setValue = i, l.priority = a, s && (l.subPriority = s), l;\n }\n return w0(o, [{\n key: "validate",\n value: function(r, i) {\n return this.validateValue(r, this.value, i);\n }\n }, {\n key: "set",\n value: function(r, i, a) {\n return this.setValue(r, i, this.value, a);\n }\n }]), o;\n}(np), yw = /* @__PURE__ */ function(e) {\n S0(o, e);\n var t = E0(o);\n function o() {\n var n;\n y0(this, o);\n for (var r = arguments.length, i = new Array(r), a = 0; a < r; a++)\n i[a] = arguments[a];\n return n = t.call.apply(t, [this].concat(i)), t0(o0(n), "priority", vw), t0(o0(n), "subPriority", -1), n;\n }\n return w0(o, [{\n key: "set",\n value: function(r, i) {\n if (i.timestampIsSet)\n return r;\n var a = /* @__PURE__ */ new Date(0);\n return a.setFullYear(r.getUTCFullYear(), r.getUTCMonth(), r.getUTCDate()), a.setHours(r.getUTCHours(), r.getUTCMinutes(), r.getUTCSeconds(), r.getUTCMilliseconds()), a;\n }\n }]), o;\n}(np), T0 = /* @__PURE__ */ function() {\n function e() {\n y0(this, e), t0(this, "incompatibleTokens", void 0), t0(this, "priority", void 0), t0(this, "subPriority", void 0);\n }\n return w0(e, [{\n key: "run",\n value: function(o, n, r, i) {\n var a = this.parse(o, n, r, i);\n return a ? {\n setter: new qw(a.value, this.validate, this.set, this.priority, this.subPriority),\n rest: a.rest\n } : null;\n }\n }, {\n key: "validate",\n value: function(o, n, r) {\n return !0;\n }\n }]), e;\n}(), ww = /* @__PURE__ */ function(e) {\n S0(o, e);\n var t = E0(o);\n function o() {\n var n;\n y0(this, o);\n for (var r = arguments.length, i = new Array(r), a = 0; a < r; a++)\n i[a] = arguments[a];\n return n = t.call.apply(t, [this].concat(i)), t0(o0(n), "priority", 140), t0(o0(n), "incompatibleTokens", ["R", "u", "t", "T"]), n;\n }\n return w0(o, [{\n key: "parse",\n value: function(r, i, a) {\n switch (i) {\n case "G":\n case "GG":\n case "GGG":\n return a.era(r, {\n width: "abbreviated"\n }) || a.era(r, {\n width: "narrow"\n });\n case "GGGGG":\n return a.era(r, {\n width: "narrow"\n });\n case "GGGG":\n default:\n return a.era(r, {\n width: "wide"\n }) || a.era(r, {\n width: "abbreviated"\n }) || a.era(r, {\n width: "narrow"\n });\n }\n }\n }, {\n key: "set",\n value: function(r, i, a) {\n return i.era = a, r.setUTCFullYear(a, 0, 1), r.setUTCHours(0, 0, 0, 0), r;\n }\n }]), o;\n}(T0), c2 = {\n month: /^(1[0-2]|0?\\d)/,\n // 0 to 12\n date: /^(3[0-1]|[0-2]?\\d)/,\n // 0 to 31\n dayOfYear: /^(36[0-6]|3[0-5]\\d|[0-2]?\\d?\\d)/,\n // 0 to 366\n week: /^(5[0-3]|[0-4]?\\d)/,\n // 0 to 53\n hour23h: /^(2[0-3]|[0-1]?\\d)/,\n // 0 to 23\n hour24h: /^(2[0-4]|[0-1]?\\d)/,\n // 0 to 24\n hour11h: /^(1[0-1]|0?\\d)/,\n // 0 to 11\n hour12h: /^(1[0-2]|0?\\d)/,\n // 0 to 12\n minute: /^[0-5]?\\d/,\n // 0 to 59\n second: /^[0-5]?\\d/,\n // 0 to 59\n singleDigit: /^\\d/,\n // 0 to 9\n twoDigits: /^\\d{1,2}/,\n // 0 to 99\n threeDigits: /^\\d{1,3}/,\n // 0 to 999\n fourDigits: /^\\d{1,4}/,\n // 0 to 9999\n anyDigitsSigned: /^-?\\d+/,\n singleDigitSigned: /^-?\\d/,\n // 0 to 9, -0 to -9\n twoDigitsSigned: /^-?\\d{1,2}/,\n // 0 to 99, -0 to -99\n threeDigitsSigned: /^-?\\d{1,3}/,\n // 0 to 999, -0 to -999\n fourDigitsSigned: /^-?\\d{1,4}/\n // 0 to 9999, -0 to -9999\n}, ke = {\n basicOptionalMinutes: /^([+-])(\\d{2})(\\d{2})?|Z/,\n basic: /^([+-])(\\d{2})(\\d{2})|Z/,\n basicOptionalSeconds: /^([+-])(\\d{2})(\\d{2})((\\d{2}))?|Z/,\n extended: /^([+-])(\\d{2}):(\\d{2})|Z/,\n extendedOptionalSeconds: /^([+-])(\\d{2}):(\\d{2})(:(\\d{2}))?|Z/\n};\nfunction l2(e, t) {\n return e && {\n value: t(e.value),\n rest: e.rest\n };\n}\nfunction o2(e, t) {\n var o = t.match(e);\n return o ? {\n value: parseInt(o[0], 10),\n rest: t.slice(o[0].length)\n } : null;\n}\nfunction Ne(e, t) {\n var o = t.match(e);\n if (!o)\n return null;\n if (o[0] === "Z")\n return {\n value: 0,\n rest: t.slice(1)\n };\n var n = o[1] === "+" ? 1 : -1, r = o[2] ? parseInt(o[2], 10) : 0, i = o[3] ? parseInt(o[3], 10) : 0, a = o[5] ? parseInt(o[5], 10) : 0;\n return {\n value: n * (r * t6 + i * e6 + a * $q),\n rest: t.slice(o[0].length)\n };\n}\nfunction ip(e) {\n return o2(c2.anyDigitsSigned, e);\n}\nfunction i2(e, t) {\n switch (e) {\n case 1:\n return o2(c2.singleDigit, t);\n case 2:\n return o2(c2.twoDigits, t);\n case 3:\n return o2(c2.threeDigits, t);\n case 4:\n return o2(c2.fourDigits, t);\n default:\n return o2(new RegExp("^\\\\d{1," + e + "}"), t);\n }\n}\nfunction u4(e, t) {\n switch (e) {\n case 1:\n return o2(c2.singleDigitSigned, t);\n case 2:\n return o2(c2.twoDigitsSigned, t);\n case 3:\n return o2(c2.threeDigitsSigned, t);\n case 4:\n return o2(c2.fourDigitsSigned, t);\n default:\n return o2(new RegExp("^-?\\\\d{1," + e + "}"), t);\n }\n}\nfunction i6(e) {\n switch (e) {\n case "morning":\n return 4;\n case "evening":\n return 17;\n case "pm":\n case "noon":\n case "afternoon":\n return 12;\n case "am":\n case "midnight":\n case "night":\n default:\n return 0;\n }\n}\nfunction ap(e, t) {\n var o = t > 0, n = o ? t : 1 - t, r;\n if (n <= 50)\n r = e || 100;\n else {\n var i = n + 50, a = Math.floor(i / 100) * 100, s = e >= i % 100;\n r = e + a - (s ? 100 : 0);\n }\n return o ? r : 1 - r;\n}\nfunction sp(e) {\n return e % 400 === 0 || e % 4 === 0 && e % 100 !== 0;\n}\nvar xw = /* @__PURE__ */ function(e) {\n S0(o, e);\n var t = E0(o);\n function o() {\n var n;\n y0(this, o);\n for (var r = arguments.length, i = new Array(r), a = 0; a < r; a++)\n i[a] = arguments[a];\n return n = t.call.apply(t, [this].concat(i)), t0(o0(n), "priority", 130), t0(o0(n), "incompatibleTokens", ["Y", "R", "u", "w", "I", "i", "e", "c", "t", "T"]), n;\n }\n return w0(o, [{\n key: "parse",\n value: function(r, i, a) {\n var s = function(p) {\n return {\n year: p,\n isTwoDigitYear: i === "yy"\n };\n };\n switch (i) {\n case "y":\n return l2(i2(4, r), s);\n case "yo":\n return l2(a.ordinalNumber(r, {\n unit: "year"\n }), s);\n default:\n return l2(i2(i.length, r), s);\n }\n }\n }, {\n key: "validate",\n value: function(r, i) {\n return i.isTwoDigitYear || i.year > 0;\n }\n }, {\n key: "set",\n value: function(r, i, a) {\n var s = r.getUTCFullYear();\n if (a.isTwoDigitYear) {\n var l = ap(a.year, s);\n return r.setUTCFullYear(l, 0, 1), r.setUTCHours(0, 0, 0, 0), r;\n }\n var p = !("era" in i) || i.era === 1 ? a.year : 1 - a.year;\n return r.setUTCFullYear(p, 0, 1), r.setUTCHours(0, 0, 0, 0), r;\n }\n }]), o;\n}(T0), Ww = /* @__PURE__ */ function(e) {\n S0(o, e);\n var t = E0(o);\n function o() {\n var n;\n y0(this, o);\n for (var r = arguments.length, i = new Array(r), a = 0; a < r; a++)\n i[a] = arguments[a];\n return n = t.call.apply(t, [this].concat(i)), t0(o0(n), "priority", 130), t0(o0(n), "incompatibleTokens", ["y", "R", "u", "Q", "q", "M", "L", "I", "d", "D", "i", "t", "T"]), n;\n }\n return w0(o, [{\n key: "parse",\n value: function(r, i, a) {\n var s = function(p) {\n return {\n year: p,\n isTwoDigitYear: i === "YY"\n };\n };\n switch (i) {\n case "Y":\n return l2(i2(4, r), s);\n case "Yo":\n return l2(a.ordinalNumber(r, {\n unit: "year"\n }), s);\n default:\n return l2(i2(i.length, r), s);\n }\n }\n }, {\n key: "validate",\n value: function(r, i) {\n return i.isTwoDigitYear || i.year > 0;\n }\n }, {\n key: "set",\n value: function(r, i, a, s) {\n var l = o6(r, s);\n if (a.isTwoDigitYear) {\n var p = ap(a.year, l);\n return r.setUTCFullYear(p, 0, s.firstWeekContainsDate), r.setUTCHours(0, 0, 0, 0), u3(r, s);\n }\n var d = !("era" in i) || i.era === 1 ? a.year : 1 - a.year;\n return r.setUTCFullYear(d, 0, s.firstWeekContainsDate), r.setUTCHours(0, 0, 0, 0), u3(r, s);\n }\n }]), o;\n}(T0), Rw = /* @__PURE__ */ function(e) {\n S0(o, e);\n var t = E0(o);\n function o() {\n var n;\n y0(this, o);\n for (var r = arguments.length, i = new Array(r), a = 0; a < r; a++)\n i[a] = arguments[a];\n return n = t.call.apply(t, [this].concat(i)), t0(o0(n), "priority", 130), t0(o0(n), "incompatibleTokens", ["G", "y", "Y", "u", "Q", "q", "M", "L", "w", "d", "D", "e", "c", "t", "T"]), n;\n }\n return w0(o, [{\n key: "parse",\n value: function(r, i) {\n return u4(i === "R" ? 4 : i.length, r);\n }\n }, {\n key: "set",\n value: function(r, i, a) {\n var s = /* @__PURE__ */ new Date(0);\n return s.setUTCFullYear(a, 0, 4), s.setUTCHours(0, 0, 0, 0), J3(s);\n }\n }]), o;\n}(T0), Bw = /* @__PURE__ */ function(e) {\n S0(o, e);\n var t = E0(o);\n function o() {\n var n;\n y0(this, o);\n for (var r = arguments.length, i = new Array(r), a = 0; a < r; a++)\n i[a] = arguments[a];\n return n = t.call.apply(t, [this].concat(i)), t0(o0(n), "priority", 130), t0(o0(n), "incompatibleTokens", ["G", "y", "Y", "R", "w", "I", "i", "e", "c", "t", "T"]), n;\n }\n return w0(o, [{\n key: "parse",\n value: function(r, i) {\n return u4(i === "u" ? 4 : i.length, r);\n }\n }, {\n key: "set",\n value: function(r, i, a) {\n return r.setUTCFullYear(a, 0, 1), r.setUTCHours(0, 0, 0, 0), r;\n }\n }]), o;\n}(T0), Sw = /* @__PURE__ */ function(e) {\n S0(o, e);\n var t = E0(o);\n function o() {\n var n;\n y0(this, o);\n for (var r = arguments.length, i = new Array(r), a = 0; a < r; a++)\n i[a] = arguments[a];\n return n = t.call.apply(t, [this].concat(i)), t0(o0(n), "priority", 120), t0(o0(n), "incompatibleTokens", ["Y", "R", "q", "M", "L", "w", "I", "d", "D", "i", "e", "c", "t", "T"]), n;\n }\n return w0(o, [{\n key: "parse",\n value: function(r, i, a) {\n switch (i) {\n case "Q":\n case "QQ":\n return i2(i.length, r);\n case "Qo":\n return a.ordinalNumber(r, {\n unit: "quarter"\n });\n case "QQQ":\n return a.quarter(r, {\n width: "abbreviated",\n context: "formatting"\n }) || a.quarter(r, {\n width: "narrow",\n context: "formatting"\n });\n case "QQQQQ":\n return a.quarter(r, {\n width: "narrow",\n context: "formatting"\n });\n case "QQQQ":\n default:\n return a.quarter(r, {\n width: "wide",\n context: "formatting"\n }) || a.quarter(r, {\n width: "abbreviated",\n context: "formatting"\n }) || a.quarter(r, {\n width: "narrow",\n context: "formatting"\n });\n }\n }\n }, {\n key: "validate",\n value: function(r, i) {\n return i >= 1 && i <= 4;\n }\n }, {\n key: "set",\n value: function(r, i, a) {\n return r.setUTCMonth((a - 1) * 3, 1), r.setUTCHours(0, 0, 0, 0), r;\n }\n }]), o;\n}(T0), Ew = /* @__PURE__ */ function(e) {\n S0(o, e);\n var t = E0(o);\n function o() {\n var n;\n y0(this, o);\n for (var r = arguments.length, i = new Array(r), a = 0; a < r; a++)\n i[a] = arguments[a];\n return n = t.call.apply(t, [this].concat(i)), t0(o0(n), "priority", 120), t0(o0(n), "incompatibleTokens", ["Y", "R", "Q", "M", "L", "w", "I", "d", "D", "i", "e", "c", "t", "T"]), n;\n }\n return w0(o, [{\n key: "parse",\n value: function(r, i, a) {\n switch (i) {\n case "q":\n case "qq":\n return i2(i.length, r);\n case "qo":\n return a.ordinalNumber(r, {\n unit: "quarter"\n });\n case "qqq":\n return a.quarter(r, {\n width: "abbreviated",\n context: "standalone"\n }) || a.quarter(r, {\n width: "narrow",\n context: "standalone"\n });\n case "qqqqq":\n return a.quarter(r, {\n width: "narrow",\n context: "standalone"\n });\n case "qqqq":\n default:\n return a.quarter(r, {\n width: "wide",\n context: "standalone"\n }) || a.quarter(r, {\n width: "abbreviated",\n context: "standalone"\n }) || a.quarter(r, {\n width: "narrow",\n context: "standalone"\n });\n }\n }\n }, {\n key: "validate",\n value: function(r, i) {\n return i >= 1 && i <= 4;\n }\n }, {\n key: "set",\n value: function(r, i, a) {\n return r.setUTCMonth((a - 1) * 3, 1), r.setUTCHours(0, 0, 0, 0), r;\n }\n }]), o;\n}(T0), kw = /* @__PURE__ */ function(e) {\n S0(o, e);\n var t = E0(o);\n function o() {\n var n;\n y0(this, o);\n for (var r = arguments.length, i = new Array(r), a = 0; a < r; a++)\n i[a] = arguments[a];\n return n = t.call.apply(t, [this].concat(i)), t0(o0(n), "incompatibleTokens", ["Y", "R", "q", "Q", "L", "w", "I", "D", "i", "e", "c", "t", "T"]), t0(o0(n), "priority", 110), n;\n }\n return w0(o, [{\n key: "parse",\n value: function(r, i, a) {\n var s = function(p) {\n return p - 1;\n };\n switch (i) {\n case "M":\n return l2(o2(c2.month, r), s);\n case "MM":\n return l2(i2(2, r), s);\n case "Mo":\n return l2(a.ordinalNumber(r, {\n unit: "month"\n }), s);\n case "MMM":\n return a.month(r, {\n width: "abbreviated",\n context: "formatting"\n }) || a.month(r, {\n width: "narrow",\n context: "formatting"\n });\n case "MMMMM":\n return a.month(r, {\n width: "narrow",\n context: "formatting"\n });\n case "MMMM":\n default:\n return a.month(r, {\n width: "wide",\n context: "formatting"\n }) || a.month(r, {\n width: "abbreviated",\n context: "formatting"\n }) || a.month(r, {\n width: "narrow",\n context: "formatting"\n });\n }\n }\n }, {\n key: "validate",\n value: function(r, i) {\n return i >= 0 && i <= 11;\n }\n }, {\n key: "set",\n value: function(r, i, a) {\n return r.setUTCMonth(a, 1), r.setUTCHours(0, 0, 0, 0), r;\n }\n }]), o;\n}(T0), Nw = /* @__PURE__ */ function(e) {\n S0(o, e);\n var t = E0(o);\n function o() {\n var n;\n y0(this, o);\n for (var r = arguments.length, i = new Array(r), a = 0; a < r; a++)\n i[a] = arguments[a];\n return n = t.call.apply(t, [this].concat(i)), t0(o0(n), "priority", 110), t0(o0(n), "incompatibleTokens", ["Y", "R", "q", "Q", "M", "w", "I", "D", "i", "e", "c", "t", "T"]), n;\n }\n return w0(o, [{\n key: "parse",\n value: function(r, i, a) {\n var s = function(p) {\n return p - 1;\n };\n switch (i) {\n case "L":\n return l2(o2(c2.month, r), s);\n case "LL":\n return l2(i2(2, r), s);\n case "Lo":\n return l2(a.ordinalNumber(r, {\n unit: "month"\n }), s);\n case "LLL":\n return a.month(r, {\n width: "abbreviated",\n context: "standalone"\n }) || a.month(r, {\n width: "narrow",\n context: "standalone"\n });\n case "LLLLL":\n return a.month(r, {\n width: "narrow",\n context: "standalone"\n });\n case "LLLL":\n default:\n return a.month(r, {\n width: "wide",\n context: "standalone"\n }) || a.month(r, {\n width: "abbreviated",\n context: "standalone"\n }) || a.month(r, {\n width: "narrow",\n context: "standalone"\n });\n }\n }\n }, {\n key: "validate",\n value: function(r, i) {\n return i >= 0 && i <= 11;\n }\n }, {\n key: "set",\n value: function(r, i, a) {\n return r.setUTCMonth(a, 1), r.setUTCHours(0, 0, 0, 0), r;\n }\n }]), o;\n}(T0);\nfunction Tw(e, t, o) {\n Q1(2, arguments);\n var n = j1(e), r = v0(t), i = _l(n, o) - r;\n return n.setUTCDate(n.getUTCDate() - i * 7), n;\n}\nvar Iw = /* @__PURE__ */ function(e) {\n S0(o, e);\n var t = E0(o);\n function o() {\n var n;\n y0(this, o);\n for (var r = arguments.length, i = new Array(r), a = 0; a < r; a++)\n i[a] = arguments[a];\n return n = t.call.apply(t, [this].concat(i)), t0(o0(n), "priority", 100), t0(o0(n), "incompatibleTokens", ["y", "R", "u", "q", "Q", "M", "L", "I", "d", "D", "i", "t", "T"]), n;\n }\n return w0(o, [{\n key: "parse",\n value: function(r, i, a) {\n switch (i) {\n case "w":\n return o2(c2.week, r);\n case "wo":\n return a.ordinalNumber(r, {\n unit: "week"\n });\n default:\n return i2(i.length, r);\n }\n }\n }, {\n key: "validate",\n value: function(r, i) {\n return i >= 1 && i <= 53;\n }\n }, {\n key: "set",\n value: function(r, i, a, s) {\n return u3(Tw(r, a, s), s);\n }\n }]), o;\n}(T0);\nfunction Dw(e, t) {\n Q1(2, arguments);\n var o = j1(e), n = v0(t), r = Jl(o) - n;\n return o.setUTCDate(o.getUTCDate() - r * 7), o;\n}\nvar Hw = /* @__PURE__ */ function(e) {\n S0(o, e);\n var t = E0(o);\n function o() {\n var n;\n y0(this, o);\n for (var r = arguments.length, i = new Array(r), a = 0; a < r; a++)\n i[a] = arguments[a];\n return n = t.call.apply(t, [this].concat(i)), t0(o0(n), "priority", 100), t0(o0(n), "incompatibleTokens", ["y", "Y", "u", "q", "Q", "M", "L", "w", "d", "D", "e", "c", "t", "T"]), n;\n }\n return w0(o, [{\n key: "parse",\n value: function(r, i, a) {\n switch (i) {\n case "I":\n return o2(c2.week, r);\n case "Io":\n return a.ordinalNumber(r, {\n unit: "week"\n });\n default:\n return i2(i.length, r);\n }\n }\n }, {\n key: "validate",\n value: function(r, i) {\n return i >= 1 && i <= 53;\n }\n }, {\n key: "set",\n value: function(r, i, a) {\n return J3(Dw(r, a));\n }\n }]), o;\n}(T0), Vw = [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31], Pw = [31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31], Fw = /* @__PURE__ */ function(e) {\n S0(o, e);\n var t = E0(o);\n function o() {\n var n;\n y0(this, o);\n for (var r = arguments.length, i = new Array(r), a = 0; a < r; a++)\n i[a] = arguments[a];\n return n = t.call.apply(t, [this].concat(i)), t0(o0(n), "priority", 90), t0(o0(n), "subPriority", 1), t0(o0(n), "incompatibleTokens", ["Y", "R", "q", "Q", "w", "I", "D", "i", "e", "c", "t", "T"]), n;\n }\n return w0(o, [{\n key: "parse",\n value: function(r, i, a) {\n switch (i) {\n case "d":\n return o2(c2.date, r);\n case "do":\n return a.ordinalNumber(r, {\n unit: "date"\n });\n default:\n return i2(i.length, r);\n }\n }\n }, {\n key: "validate",\n value: function(r, i) {\n var a = r.getUTCFullYear(), s = sp(a), l = r.getUTCMonth();\n return s ? i >= 1 && i <= Pw[l] : i >= 1 && i <= Vw[l];\n }\n }, {\n key: "set",\n value: function(r, i, a) {\n return r.setUTCDate(a), r.setUTCHours(0, 0, 0, 0), r;\n }\n }]), o;\n}(T0), Xw = /* @__PURE__ */ function(e) {\n S0(o, e);\n var t = E0(o);\n function o() {\n var n;\n y0(this, o);\n for (var r = arguments.length, i = new Array(r), a = 0; a < r; a++)\n i[a] = arguments[a];\n return n = t.call.apply(t, [this].concat(i)), t0(o0(n), "priority", 90), t0(o0(n), "subpriority", 1), t0(o0(n), "incompatibleTokens", ["Y", "R", "q", "Q", "M", "L", "w", "I", "d", "E", "i", "e", "c", "t", "T"]), n;\n }\n return w0(o, [{\n key: "parse",\n value: function(r, i, a) {\n switch (i) {\n case "D":\n case "DD":\n return o2(c2.dayOfYear, r);\n case "Do":\n return a.ordinalNumber(r, {\n unit: "date"\n });\n default:\n return i2(i.length, r);\n }\n }\n }, {\n key: "validate",\n value: function(r, i) {\n var a = r.getUTCFullYear(), s = sp(a);\n return s ? i >= 1 && i <= 366 : i >= 1 && i <= 365;\n }\n }, {\n key: "set",\n value: function(r, i, a) {\n return r.setUTCMonth(0, a), r.setUTCHours(0, 0, 0, 0), r;\n }\n }]), o;\n}(T0);\nfunction a6(e, t, o) {\n var n, r, i, a, s, l, p, d;\n Q1(2, arguments);\n var b = Xt(), M = v0((n = (r = (i = (a = o == null ? void 0 : o.weekStartsOn) !== null && a !== void 0 ? a : o == null || (s = o.locale) === null || s === void 0 || (l = s.options) === null || l === void 0 ? void 0 : l.weekStartsOn) !== null && i !== void 0 ? i : b.weekStartsOn) !== null && r !== void 0 ? r : (p = b.locale) === null || p === void 0 || (d = p.options) === null || d === void 0 ? void 0 : d.weekStartsOn) !== null && n !== void 0 ? n : 0);\n if (!(M >= 0 && M <= 6))\n throw new RangeError("weekStartsOn must be between 0 and 6 inclusively");\n var u = j1(e), A = v0(t), z = u.getUTCDay(), f = A % 7, O = (f + 7) % 7, h = (O < M ? 7 : 0) + A - z;\n return u.setUTCDate(u.getUTCDate() + h), u;\n}\nvar Uw = /* @__PURE__ */ function(e) {\n S0(o, e);\n var t = E0(o);\n function o() {\n var n;\n y0(this, o);\n for (var r = arguments.length, i = new Array(r), a = 0; a < r; a++)\n i[a] = arguments[a];\n return n = t.call.apply(t, [this].concat(i)), t0(o0(n), "priority", 90), t0(o0(n), "incompatibleTokens", ["D", "i", "e", "c", "t", "T"]), n;\n }\n return w0(o, [{\n key: "parse",\n value: function(r, i, a) {\n switch (i) {\n case "E":\n case "EE":\n case "EEE":\n return a.day(r, {\n width: "abbreviated",\n context: "formatting"\n }) || a.day(r, {\n width: "short",\n context: "formatting"\n }) || a.day(r, {\n width: "narrow",\n context: "formatting"\n });\n case "EEEEE":\n return a.day(r, {\n width: "narrow",\n context: "formatting"\n });\n case "EEEEEE":\n return a.day(r, {\n width: "short",\n context: "formatting"\n }) || a.day(r, {\n width: "narrow",\n context: "formatting"\n });\n case "EEEE":\n default:\n return a.day(r, {\n width: "wide",\n context: "formatting"\n }) || a.day(r, {\n width: "abbreviated",\n context: "formatting"\n }) || a.day(r, {\n width: "short",\n context: "formatting"\n }) || a.day(r, {\n width: "narrow",\n context: "formatting"\n });\n }\n }\n }, {\n key: "validate",\n value: function(r, i) {\n return i >= 0 && i <= 6;\n }\n }, {\n key: "set",\n value: function(r, i, a, s) {\n return r = a6(r, a, s), r.setUTCHours(0, 0, 0, 0), r;\n }\n }]), o;\n}(T0), Yw = /* @__PURE__ */ function(e) {\n S0(o, e);\n var t = E0(o);\n function o() {\n var n;\n y0(this, o);\n for (var r = arguments.length, i = new Array(r), a = 0; a < r; a++)\n i[a] = arguments[a];\n return n = t.call.apply(t, [this].concat(i)), t0(o0(n), "priority", 90), t0(o0(n), "incompatibleTokens", ["y", "R", "u", "q", "Q", "M", "L", "I", "d", "D", "E", "i", "c", "t", "T"]), n;\n }\n return w0(o, [{\n key: "parse",\n value: function(r, i, a, s) {\n var l = function(d) {\n var b = Math.floor((d - 1) / 7) * 7;\n return (d + s.weekStartsOn + 6) % 7 + b;\n };\n switch (i) {\n case "e":\n case "ee":\n return l2(i2(i.length, r), l);\n case "eo":\n return l2(a.ordinalNumber(r, {\n unit: "day"\n }), l);\n case "eee":\n return a.day(r, {\n width: "abbreviated",\n context: "formatting"\n }) || a.day(r, {\n width: "short",\n context: "formatting"\n }) || a.day(r, {\n width: "narrow",\n context: "formatting"\n });\n case "eeeee":\n return a.day(r, {\n width: "narrow",\n context: "formatting"\n });\n case "eeeeee":\n return a.day(r, {\n width: "short",\n context: "formatting"\n }) || a.day(r, {\n width: "narrow",\n context: "formatting"\n });\n case "eeee":\n default:\n return a.day(r, {\n width: "wide",\n context: "formatting"\n }) || a.day(r, {\n width: "abbreviated",\n context: "formatting"\n }) || a.day(r, {\n width: "short",\n context: "formatting"\n }) || a.day(r, {\n width: "narrow",\n context: "formatting"\n });\n }\n }\n }, {\n key: "validate",\n value: function(r, i) {\n return i >= 0 && i <= 6;\n }\n }, {\n key: "set",\n value: function(r, i, a, s) {\n return r = a6(r, a, s), r.setUTCHours(0, 0, 0, 0), r;\n }\n }]), o;\n}(T0), Gw = /* @__PURE__ */ function(e) {\n S0(o, e);\n var t = E0(o);\n function o() {\n var n;\n y0(this, o);\n for (var r = arguments.length, i = new Array(r), a = 0; a < r; a++)\n i[a] = arguments[a];\n return n = t.call.apply(t, [this].concat(i)), t0(o0(n), "priority", 90), t0(o0(n), "incompatibleTokens", ["y", "R", "u", "q", "Q", "M", "L", "I", "d", "D", "E", "i", "e", "t", "T"]), n;\n }\n return w0(o, [{\n key: "parse",\n value: function(r, i, a, s) {\n var l = function(d) {\n var b = Math.floor((d - 1) / 7) * 7;\n return (d + s.weekStartsOn + 6) % 7 + b;\n };\n switch (i) {\n case "c":\n case "cc":\n return l2(i2(i.length, r), l);\n case "co":\n return l2(a.ordinalNumber(r, {\n unit: "day"\n }), l);\n case "ccc":\n return a.day(r, {\n width: "abbreviated",\n context: "standalone"\n }) || a.day(r, {\n width: "short",\n context: "standalone"\n }) || a.day(r, {\n width: "narrow",\n context: "standalone"\n });\n case "ccccc":\n return a.day(r, {\n width: "narrow",\n context: "standalone"\n });\n case "cccccc":\n return a.day(r, {\n width: "short",\n context: "standalone"\n }) || a.day(r, {\n width: "narrow",\n context: "standalone"\n });\n case "cccc":\n default:\n return a.day(r, {\n width: "wide",\n context: "standalone"\n }) || a.day(r, {\n width: "abbreviated",\n context: "standalone"\n }) || a.day(r, {\n width: "short",\n context: "standalone"\n }) || a.day(r, {\n width: "narrow",\n context: "standalone"\n });\n }\n }\n }, {\n key: "validate",\n value: function(r, i) {\n return i >= 0 && i <= 6;\n }\n }, {\n key: "set",\n value: function(r, i, a, s) {\n return r = a6(r, a, s), r.setUTCHours(0, 0, 0, 0), r;\n }\n }]), o;\n}(T0);\nfunction Qw(e, t) {\n Q1(2, arguments);\n var o = v0(t);\n o % 7 === 0 && (o = o - 7);\n var n = 1, r = j1(e), i = r.getUTCDay(), a = o % 7, s = (a + 7) % 7, l = (s < n ? 7 : 0) + o - i;\n return r.setUTCDate(r.getUTCDate() + l), r;\n}\nvar Zw = /* @__PURE__ */ function(e) {\n S0(o, e);\n var t = E0(o);\n function o() {\n var n;\n y0(this, o);\n for (var r = arguments.length, i = new Array(r), a = 0; a < r; a++)\n i[a] = arguments[a];\n return n = t.call.apply(t, [this].concat(i)), t0(o0(n), "priority", 90), t0(o0(n), "incompatibleTokens", ["y", "Y", "u", "q", "Q", "M", "L", "w", "d", "D", "E", "e", "c", "t", "T"]), n;\n }\n return w0(o, [{\n key: "parse",\n value: function(r, i, a) {\n var s = function(p) {\n return p === 0 ? 7 : p;\n };\n switch (i) {\n case "i":\n case "ii":\n return i2(i.length, r);\n case "io":\n return a.ordinalNumber(r, {\n unit: "day"\n });\n case "iii":\n return l2(a.day(r, {\n width: "abbreviated",\n context: "formatting"\n }) || a.day(r, {\n width: "short",\n context: "formatting"\n }) || a.day(r, {\n width: "narrow",\n context: "formatting"\n }), s);\n case "iiiii":\n return l2(a.day(r, {\n width: "narrow",\n context: "formatting"\n }), s);\n case "iiiiii":\n return l2(a.day(r, {\n width: "short",\n context: "formatting"\n }) || a.day(r, {\n width: "narrow",\n context: "formatting"\n }), s);\n case "iiii":\n default:\n return l2(a.day(r, {\n width: "wide",\n context: "formatting"\n }) || a.day(r, {\n width: "abbreviated",\n context: "formatting"\n }) || a.day(r, {\n width: "short",\n context: "formatting"\n }) || a.day(r, {\n width: "narrow",\n context: "formatting"\n }), s);\n }\n }\n }, {\n key: "validate",\n value: function(r, i) {\n return i >= 1 && i <= 7;\n }\n }, {\n key: "set",\n value: function(r, i, a) {\n return r = Qw(r, a), r.setUTCHours(0, 0, 0, 0), r;\n }\n }]), o;\n}(T0), jw = /* @__PURE__ */ function(e) {\n S0(o, e);\n var t = E0(o);\n function o() {\n var n;\n y0(this, o);\n for (var r = arguments.length, i = new Array(r), a = 0; a < r; a++)\n i[a] = arguments[a];\n return n = t.call.apply(t, [this].concat(i)), t0(o0(n), "priority", 80), t0(o0(n), "incompatibleTokens", ["b", "B", "H", "k", "t", "T"]), n;\n }\n return w0(o, [{\n key: "parse",\n value: function(r, i, a) {\n switch (i) {\n case "a":\n case "aa":\n case "aaa":\n return a.dayPeriod(r, {\n width: "abbreviated",\n context: "formatting"\n }) || a.dayPeriod(r, {\n width: "narrow",\n context: "formatting"\n });\n case "aaaaa":\n return a.dayPeriod(r, {\n width: "narrow",\n context: "formatting"\n });\n case "aaaa":\n default:\n return a.dayPeriod(r, {\n width: "wide",\n context: "formatting"\n }) || a.dayPeriod(r, {\n width: "abbreviated",\n context: "formatting"\n }) || a.dayPeriod(r, {\n width: "narrow",\n context: "formatting"\n });\n }\n }\n }, {\n key: "set",\n value: function(r, i, a) {\n return r.setUTCHours(i6(a), 0, 0, 0), r;\n }\n }]), o;\n}(T0), Kw = /* @__PURE__ */ function(e) {\n S0(o, e);\n var t = E0(o);\n function o() {\n var n;\n y0(this, o);\n for (var r = arguments.length, i = new Array(r), a = 0; a < r; a++)\n i[a] = arguments[a];\n return n = t.call.apply(t, [this].concat(i)), t0(o0(n), "priority", 80), t0(o0(n), "incompatibleTokens", ["a", "B", "H", "k", "t", "T"]), n;\n }\n return w0(o, [{\n key: "parse",\n value: function(r, i, a) {\n switch (i) {\n case "b":\n case "bb":\n case "bbb":\n return a.dayPeriod(r, {\n width: "abbreviated",\n context: "formatting"\n }) || a.dayPeriod(r, {\n width: "narrow",\n context: "formatting"\n });\n case "bbbbb":\n return a.dayPeriod(r, {\n width: "narrow",\n context: "formatting"\n });\n case "bbbb":\n default:\n return a.dayPeriod(r, {\n width: "wide",\n context: "formatting"\n }) || a.dayPeriod(r, {\n width: "abbreviated",\n context: "formatting"\n }) || a.dayPeriod(r, {\n width: "narrow",\n context: "formatting"\n });\n }\n }\n }, {\n key: "set",\n value: function(r, i, a) {\n return r.setUTCHours(i6(a), 0, 0, 0), r;\n }\n }]), o;\n}(T0), Jw = /* @__PURE__ */ function(e) {\n S0(o, e);\n var t = E0(o);\n function o() {\n var n;\n y0(this, o);\n for (var r = arguments.length, i = new Array(r), a = 0; a < r; a++)\n i[a] = arguments[a];\n return n = t.call.apply(t, [this].concat(i)), t0(o0(n), "priority", 80), t0(o0(n), "incompatibleTokens", ["a", "b", "t", "T"]), n;\n }\n return w0(o, [{\n key: "parse",\n value: function(r, i, a) {\n switch (i) {\n case "B":\n case "BB":\n case "BBB":\n return a.dayPeriod(r, {\n width: "abbreviated",\n context: "formatting"\n }) || a.dayPeriod(r, {\n width: "narrow",\n context: "formatting"\n });\n case "BBBBB":\n return a.dayPeriod(r, {\n width: "narrow",\n context: "formatting"\n });\n case "BBBB":\n default:\n return a.dayPeriod(r, {\n width: "wide",\n context: "formatting"\n }) || a.dayPeriod(r, {\n width: "abbreviated",\n context: "formatting"\n }) || a.dayPeriod(r, {\n width: "narrow",\n context: "formatting"\n });\n }\n }\n }, {\n key: "set",\n value: function(r, i, a) {\n return r.setUTCHours(i6(a), 0, 0, 0), r;\n }\n }]), o;\n}(T0), _w = /* @__PURE__ */ function(e) {\n S0(o, e);\n var t = E0(o);\n function o() {\n var n;\n y0(this, o);\n for (var r = arguments.length, i = new Array(r), a = 0; a < r; a++)\n i[a] = arguments[a];\n return n = t.call.apply(t, [this].concat(i)), t0(o0(n), "priority", 70), t0(o0(n), "incompatibleTokens", ["H", "K", "k", "t", "T"]), n;\n }\n return w0(o, [{\n key: "parse",\n value: function(r, i, a) {\n switch (i) {\n case "h":\n return o2(c2.hour12h, r);\n case "ho":\n return a.ordinalNumber(r, {\n unit: "hour"\n });\n default:\n return i2(i.length, r);\n }\n }\n }, {\n key: "validate",\n value: function(r, i) {\n return i >= 1 && i <= 12;\n }\n }, {\n key: "set",\n value: function(r, i, a) {\n var s = r.getUTCHours() >= 12;\n return s && a < 12 ? r.setUTCHours(a + 12, 0, 0, 0) : !s && a === 12 ? r.setUTCHours(0, 0, 0, 0) : r.setUTCHours(a, 0, 0, 0), r;\n }\n }]), o;\n}(T0), $w = /* @__PURE__ */ function(e) {\n S0(o, e);\n var t = E0(o);\n function o() {\n var n;\n y0(this, o);\n for (var r = arguments.length, i = new Array(r), a = 0; a < r; a++)\n i[a] = arguments[a];\n return n = t.call.apply(t, [this].concat(i)), t0(o0(n), "priority", 70), t0(o0(n), "incompatibleTokens", ["a", "b", "h", "K", "k", "t", "T"]), n;\n }\n return w0(o, [{\n key: "parse",\n value: function(r, i, a) {\n switch (i) {\n case "H":\n return o2(c2.hour23h, r);\n case "Ho":\n return a.ordinalNumber(r, {\n unit: "hour"\n });\n default:\n return i2(i.length, r);\n }\n }\n }, {\n key: "validate",\n value: function(r, i) {\n return i >= 0 && i <= 23;\n }\n }, {\n key: "set",\n value: function(r, i, a) {\n return r.setUTCHours(a, 0, 0, 0), r;\n }\n }]), o;\n}(T0), ex = /* @__PURE__ */ function(e) {\n S0(o, e);\n var t = E0(o);\n function o() {\n var n;\n y0(this, o);\n for (var r = arguments.length, i = new Array(r), a = 0; a < r; a++)\n i[a] = arguments[a];\n return n = t.call.apply(t, [this].concat(i)), t0(o0(n), "priority", 70), t0(o0(n), "incompatibleTokens", ["h", "H", "k", "t", "T"]), n;\n }\n return w0(o, [{\n key: "parse",\n value: function(r, i, a) {\n switch (i) {\n case "K":\n return o2(c2.hour11h, r);\n case "Ko":\n return a.ordinalNumber(r, {\n unit: "hour"\n });\n default:\n return i2(i.length, r);\n }\n }\n }, {\n key: "validate",\n value: function(r, i) {\n return i >= 0 && i <= 11;\n }\n }, {\n key: "set",\n value: function(r, i, a) {\n var s = r.getUTCHours() >= 12;\n return s && a < 12 ? r.setUTCHours(a + 12, 0, 0, 0) : r.setUTCHours(a, 0, 0, 0), r;\n }\n }]), o;\n}(T0), tx = /* @__PURE__ */ function(e) {\n S0(o, e);\n var t = E0(o);\n function o() {\n var n;\n y0(this, o);\n for (var r = arguments.length, i = new Array(r), a = 0; a < r; a++)\n i[a] = arguments[a];\n return n = t.call.apply(t, [this].concat(i)), t0(o0(n), "priority", 70), t0(o0(n), "incompatibleTokens", ["a", "b", "h", "H", "K", "t", "T"]), n;\n }\n return w0(o, [{\n key: "parse",\n value: function(r, i, a) {\n switch (i) {\n case "k":\n return o2(c2.hour24h, r);\n case "ko":\n return a.ordinalNumber(r, {\n unit: "hour"\n });\n default:\n return i2(i.length, r);\n }\n }\n }, {\n key: "validate",\n value: function(r, i) {\n return i >= 1 && i <= 24;\n }\n }, {\n key: "set",\n value: function(r, i, a) {\n var s = a <= 24 ? a % 24 : a;\n return r.setUTCHours(s, 0, 0, 0), r;\n }\n }]), o;\n}(T0), ox = /* @__PURE__ */ function(e) {\n S0(o, e);\n var t = E0(o);\n function o() {\n var n;\n y0(this, o);\n for (var r = arguments.length, i = new Array(r), a = 0; a < r; a++)\n i[a] = arguments[a];\n return n = t.call.apply(t, [this].concat(i)), t0(o0(n), "priority", 60), t0(o0(n), "incompatibleTokens", ["t", "T"]), n;\n }\n return w0(o, [{\n key: "parse",\n value: function(r, i, a) {\n switch (i) {\n case "m":\n return o2(c2.minute, r);\n case "mo":\n return a.ordinalNumber(r, {\n unit: "minute"\n });\n default:\n return i2(i.length, r);\n }\n }\n }, {\n key: "validate",\n value: function(r, i) {\n return i >= 0 && i <= 59;\n }\n }, {\n key: "set",\n value: function(r, i, a) {\n return r.setUTCMinutes(a, 0, 0), r;\n }\n }]), o;\n}(T0), rx = /* @__PURE__ */ function(e) {\n S0(o, e);\n var t = E0(o);\n function o() {\n var n;\n y0(this, o);\n for (var r = arguments.length, i = new Array(r), a = 0; a < r; a++)\n i[a] = arguments[a];\n return n = t.call.apply(t, [this].concat(i)), t0(o0(n), "priority", 50), t0(o0(n), "incompatibleTokens", ["t", "T"]), n;\n }\n return w0(o, [{\n key: "parse",\n value: function(r, i, a) {\n switch (i) {\n case "s":\n return o2(c2.second, r);\n case "so":\n return a.ordinalNumber(r, {\n unit: "second"\n });\n default:\n return i2(i.length, r);\n }\n }\n }, {\n key: "validate",\n value: function(r, i) {\n return i >= 0 && i <= 59;\n }\n }, {\n key: "set",\n value: function(r, i, a) {\n return r.setUTCSeconds(a, 0), r;\n }\n }]), o;\n}(T0), nx = /* @__PURE__ */ function(e) {\n S0(o, e);\n var t = E0(o);\n function o() {\n var n;\n y0(this, o);\n for (var r = arguments.length, i = new Array(r), a = 0; a < r; a++)\n i[a] = arguments[a];\n return n = t.call.apply(t, [this].concat(i)), t0(o0(n), "priority", 30), t0(o0(n), "incompatibleTokens", ["t", "T"]), n;\n }\n return w0(o, [{\n key: "parse",\n value: function(r, i) {\n var a = function(l) {\n return Math.floor(l * Math.pow(10, -i.length + 3));\n };\n return l2(i2(i.length, r), a);\n }\n }, {\n key: "set",\n value: function(r, i, a) {\n return r.setUTCMilliseconds(a), r;\n }\n }]), o;\n}(T0), ix = /* @__PURE__ */ function(e) {\n S0(o, e);\n var t = E0(o);\n function o() {\n var n;\n y0(this, o);\n for (var r = arguments.length, i = new Array(r), a = 0; a < r; a++)\n i[a] = arguments[a];\n return n = t.call.apply(t, [this].concat(i)), t0(o0(n), "priority", 10), t0(o0(n), "incompatibleTokens", ["t", "T", "x"]), n;\n }\n return w0(o, [{\n key: "parse",\n value: function(r, i) {\n switch (i) {\n case "X":\n return Ne(ke.basicOptionalMinutes, r);\n case "XX":\n return Ne(ke.basic, r);\n case "XXXX":\n return Ne(ke.basicOptionalSeconds, r);\n case "XXXXX":\n return Ne(ke.extendedOptionalSeconds, r);\n case "XXX":\n default:\n return Ne(ke.extended, r);\n }\n }\n }, {\n key: "set",\n value: function(r, i, a) {\n return i.timestampIsSet ? r : new Date(r.getTime() - a);\n }\n }]), o;\n}(T0), ax = /* @__PURE__ */ function(e) {\n S0(o, e);\n var t = E0(o);\n function o() {\n var n;\n y0(this, o);\n for (var r = arguments.length, i = new Array(r), a = 0; a < r; a++)\n i[a] = arguments[a];\n return n = t.call.apply(t, [this].concat(i)), t0(o0(n), "priority", 10), t0(o0(n), "incompatibleTokens", ["t", "T", "X"]), n;\n }\n return w0(o, [{\n key: "parse",\n value: function(r, i) {\n switch (i) {\n case "x":\n return Ne(ke.basicOptionalMinutes, r);\n case "xx":\n return Ne(ke.basic, r);\n case "xxxx":\n return Ne(ke.basicOptionalSeconds, r);\n case "xxxxx":\n return Ne(ke.extendedOptionalSeconds, r);\n case "xxx":\n default:\n return Ne(ke.extended, r);\n }\n }\n }, {\n key: "set",\n value: function(r, i, a) {\n return i.timestampIsSet ? r : new Date(r.getTime() - a);\n }\n }]), o;\n}(T0), sx = /* @__PURE__ */ function(e) {\n S0(o, e);\n var t = E0(o);\n function o() {\n var n;\n y0(this, o);\n for (var r = arguments.length, i = new Array(r), a = 0; a < r; a++)\n i[a] = arguments[a];\n return n = t.call.apply(t, [this].concat(i)), t0(o0(n), "priority", 40), t0(o0(n), "incompatibleTokens", "*"), n;\n }\n return w0(o, [{\n key: "parse",\n value: function(r) {\n return ip(r);\n }\n }, {\n key: "set",\n value: function(r, i, a) {\n return [new Date(a * 1e3), {\n timestampIsSet: !0\n }];\n }\n }]), o;\n}(T0), cx = /* @__PURE__ */ function(e) {\n S0(o, e);\n var t = E0(o);\n function o() {\n var n;\n y0(this, o);\n for (var r = arguments.length, i = new Array(r), a = 0; a < r; a++)\n i[a] = arguments[a];\n return n = t.call.apply(t, [this].concat(i)), t0(o0(n), "priority", 20), t0(o0(n), "incompatibleTokens", "*"), n;\n }\n return w0(o, [{\n key: "parse",\n value: function(r) {\n return ip(r);\n }\n }, {\n key: "set",\n value: function(r, i, a) {\n return [new Date(a), {\n timestampIsSet: !0\n }];\n }\n }]), o;\n}(T0), lx = {\n G: new ww(),\n y: new xw(),\n Y: new Ww(),\n R: new Rw(),\n u: new Bw(),\n Q: new Sw(),\n q: new Ew(),\n M: new kw(),\n L: new Nw(),\n w: new Iw(),\n I: new Hw(),\n d: new Fw(),\n D: new Xw(),\n E: new Uw(),\n e: new Yw(),\n c: new Gw(),\n i: new Zw(),\n a: new jw(),\n b: new Kw(),\n B: new Jw(),\n h: new _w(),\n H: new $w(),\n K: new ex(),\n k: new tx(),\n m: new ox(),\n s: new rx(),\n S: new nx(),\n X: new ix(),\n x: new ax(),\n t: new sx(),\n T: new cx()\n}, px = /[yYQqMLwIdDecihHKkms]o|(\\w)\\1*|\'\'|\'(\'\'|[^\'])+(\'|$)|./g, dx = /P+p+|P+|p+|\'\'|\'(\'\'|[^\'])+(\'|$)|./g, bx = /^\'([^]*?)\'?$/, Mx = /\'\'/g, Ax = /\\S/, ux = /[a-zA-Z]/;\nfunction vi(e, t, o, n) {\n var r, i, a, s, l, p, d, b, M, u, A, z, f, O, h, g, v, L;\n Q1(3, arguments);\n var y = String(e), B = String(t), X = Xt(), F = (r = (i = n == null ? void 0 : n.locale) !== null && i !== void 0 ? i : X.locale) !== null && r !== void 0 ? r : r6;\n if (!F.match)\n throw new RangeError("locale must contain match property");\n var T = v0((a = (s = (l = (p = n == null ? void 0 : n.firstWeekContainsDate) !== null && p !== void 0 ? p : n == null || (d = n.locale) === null || d === void 0 || (b = d.options) === null || b === void 0 ? void 0 : b.firstWeekContainsDate) !== null && l !== void 0 ? l : X.firstWeekContainsDate) !== null && s !== void 0 ? s : (M = X.locale) === null || M === void 0 || (u = M.options) === null || u === void 0 ? void 0 : u.firstWeekContainsDate) !== null && a !== void 0 ? a : 1);\n if (!(T >= 1 && T <= 7))\n throw new RangeError("firstWeekContainsDate must be between 1 and 7 inclusively");\n var w = v0((A = (z = (f = (O = n == null ? void 0 : n.weekStartsOn) !== null && O !== void 0 ? O : n == null || (h = n.locale) === null || h === void 0 || (g = h.options) === null || g === void 0 ? void 0 : g.weekStartsOn) !== null && f !== void 0 ? f : X.weekStartsOn) !== null && z !== void 0 ? z : (v = X.locale) === null || v === void 0 || (L = v.options) === null || L === void 0 ? void 0 : L.weekStartsOn) !== null && A !== void 0 ? A : 0);\n if (!(w >= 0 && w <= 6))\n throw new RangeError("weekStartsOn must be between 0 and 6 inclusively");\n if (B === "")\n return y === "" ? j1(o) : /* @__PURE__ */ new Date(NaN);\n var H = {\n firstWeekContainsDate: T,\n weekStartsOn: w,\n locale: F\n }, C = [new yw()], q = B.match(dx).map(function(E) {\n var D = E[0];\n if (D in Ga) {\n var G = Ga[D];\n return G(E, F.formatLong);\n }\n return E;\n }).join("").match(px), m = [], k = F8(q), x;\n try {\n var N = function() {\n var D = x.value;\n !(n != null && n.useAdditionalWeekYearTokens) && tp(D) && M4(D, B, e), !(n != null && n.useAdditionalDayOfYearTokens) && ep(D) && M4(D, B, e);\n var G = D[0], J = lx[G];\n if (J) {\n var S = J.incompatibleTokens;\n if (Array.isArray(S)) {\n var W = m.find(function(Y) {\n return S.includes(Y.token) || Y.token === G;\n });\n if (W)\n throw new RangeError("The format string mustn\'t contain `".concat(W.fullToken, "` and `").concat(D, "` at the same time"));\n } else if (J.incompatibleTokens === "*" && m.length > 0)\n throw new RangeError("The format string mustn\'t contain `".concat(D, "` and any other token at the same time"));\n m.push({\n token: G,\n fullToken: D\n });\n var P = J.run(y, D, F.match, H);\n if (!P)\n return {\n v: /* @__PURE__ */ new Date(NaN)\n };\n C.push(P.setter), y = P.rest;\n } else {\n if (G.match(ux))\n throw new RangeError("Format string contains an unescaped latin alphabet character `" + G + "`");\n if (D === "\'\'" ? D = "\'" : G === "\'" && (D = zx(D)), y.indexOf(D) === 0)\n y = y.slice(D.length);\n else\n return {\n v: /* @__PURE__ */ new Date(NaN)\n };\n }\n };\n for (k.s(); !(x = k.n()).done; ) {\n var V = N();\n if (Me(V) === "object")\n return V.v;\n }\n } catch (E) {\n k.e(E);\n } finally {\n k.f();\n }\n if (y.length > 0 && Ax.test(y))\n return /* @__PURE__ */ new Date(NaN);\n var R = C.map(function(E) {\n return E.priority;\n }).sort(function(E, D) {\n return D - E;\n }).filter(function(E, D, G) {\n return G.indexOf(E) === D;\n }).map(function(E) {\n return C.filter(function(D) {\n return D.priority === E;\n }).sort(function(D, G) {\n return G.subPriority - D.subPriority;\n });\n }).map(function(E) {\n return E[0];\n }), I = j1(o);\n if (isNaN(I.getTime()))\n return /* @__PURE__ */ new Date(NaN);\n var j = jl(I, j3(I)), U = {}, _ = F8(R), r1;\n try {\n for (_.s(); !(r1 = _.n()).done; ) {\n var K = r1.value;\n if (!K.validate(j, H))\n return /* @__PURE__ */ new Date(NaN);\n var Q = K.set(j, U, H);\n Array.isArray(Q) ? (j = Q[0], n6(U, Q[1])) : j = Q;\n }\n } catch (E) {\n _.e(E);\n } finally {\n _.f();\n }\n return j;\n}\nfunction zx(e) {\n return e.match(bx)[1].replace(Mx, "\'");\n}\nfunction hx(e, t) {\n Q1(2, arguments);\n var o = j1(e), n = j1(t);\n return o.getFullYear() === n.getFullYear() && o.getMonth() === n.getMonth();\n}\nfunction Ox(e, t) {\n Q1(2, arguments);\n var o = Ya(e), n = Ya(t);\n return o.getTime() === n.getTime();\n}\nfunction fx(e, t) {\n Q1(2, arguments);\n var o = j1(e), n = j1(t);\n return o.getFullYear() === n.getFullYear();\n}\nfunction br(e, t) {\n Q1(2, arguments);\n var o = j1(e).getTime(), n = j1(t.start).getTime(), r = j1(t.end).getTime();\n if (!(n <= r))\n throw new RangeError("Invalid interval");\n return o >= n && o <= r;\n}\nfunction gx(e, t) {\n Q1(2, arguments);\n var o = v0(t);\n return ao(e, -o);\n}\nfunction Cx(e, t) {\n var o;\n Q1(1, arguments);\n var n = v0((o = t == null ? void 0 : t.additionalDigits) !== null && o !== void 0 ? o : 2);\n if (n !== 2 && n !== 1 && n !== 0)\n throw new RangeError("additionalDigits must be 0, 1 or 2");\n if (!(typeof e == "string" || Object.prototype.toString.call(e) === "[object String]"))\n return /* @__PURE__ */ new Date(NaN);\n var r = qx(e), i;\n if (r.date) {\n var a = yx(r.date, n);\n i = wx(a.restDateString, a.year);\n }\n if (!i || isNaN(i.getTime()))\n return /* @__PURE__ */ new Date(NaN);\n var s = i.getTime(), l = 0, p;\n if (r.time && (l = xx(r.time), isNaN(l)))\n return /* @__PURE__ */ new Date(NaN);\n if (r.timezone) {\n if (p = Wx(r.timezone), isNaN(p))\n return /* @__PURE__ */ new Date(NaN);\n } else {\n var d = new Date(s + l), b = /* @__PURE__ */ new Date(0);\n return b.setFullYear(d.getUTCFullYear(), d.getUTCMonth(), d.getUTCDate()), b.setHours(d.getUTCHours(), d.getUTCMinutes(), d.getUTCSeconds(), d.getUTCMilliseconds()), b;\n }\n return new Date(s + l + p);\n}\nvar an = {\n dateTimeDelimiter: /[T ]/,\n timeZoneDelimiter: /[Z ]/i,\n timezone: /([Z+-].*)$/\n}, mx = /^-?(?:(\\d{3})|(\\d{2})(?:-?(\\d{2}))?|W(\\d{2})(?:-?(\\d{1}))?|)$/, Lx = /^(\\d{2}(?:[.,]\\d*)?)(?::?(\\d{2}(?:[.,]\\d*)?))?(?::?(\\d{2}(?:[.,]\\d*)?))?$/, vx = /^([+-])(\\d{2})(?::?(\\d{2}))?$/;\nfunction qx(e) {\n var t = {}, o = e.split(an.dateTimeDelimiter), n;\n if (o.length > 2)\n return t;\n if (/:/.test(o[0]) ? n = o[0] : (t.date = o[0], n = o[1], an.timeZoneDelimiter.test(t.date) && (t.date = e.split(an.timeZoneDelimiter)[0], n = e.substr(t.date.length, e.length))), n) {\n var r = an.timezone.exec(n);\n r ? (t.time = n.replace(r[1], ""), t.timezone = r[1]) : t.time = n;\n }\n return t;\n}\nfunction yx(e, t) {\n var o = new RegExp("^(?:(\\\\d{4}|[+-]\\\\d{" + (4 + t) + "})|(\\\\d{2}|[+-]\\\\d{" + (2 + t) + "})$)"), n = e.match(o);\n if (!n)\n return {\n year: NaN,\n restDateString: ""\n };\n var r = n[1] ? parseInt(n[1]) : null, i = n[2] ? parseInt(n[2]) : null;\n return {\n year: i === null ? r : i * 100,\n restDateString: e.slice((n[1] || n[2]).length)\n };\n}\nfunction wx(e, t) {\n if (t === null)\n return /* @__PURE__ */ new Date(NaN);\n var o = e.match(mx);\n if (!o)\n return /* @__PURE__ */ new Date(NaN);\n var n = !!o[4], r = So(o[1]), i = So(o[2]) - 1, a = So(o[3]), s = So(o[4]), l = So(o[5]) - 1;\n if (n)\n return kx(t, s, l) ? Rx(t, s, l) : /* @__PURE__ */ new Date(NaN);\n var p = /* @__PURE__ */ new Date(0);\n return !Sx(t, i, a) || !Ex(t, r) ? /* @__PURE__ */ new Date(NaN) : (p.setUTCFullYear(t, i, Math.max(r, a)), p);\n}\nfunction So(e) {\n return e ? parseInt(e) : 1;\n}\nfunction xx(e) {\n var t = e.match(Lx);\n if (!t)\n return NaN;\n var o = qi(t[1]), n = qi(t[2]), r = qi(t[3]);\n return Nx(o, n, r) ? o * t6 + n * e6 + r * 1e3 : NaN;\n}\nfunction qi(e) {\n return e && parseFloat(e.replace(",", ".")) || 0;\n}\nfunction Wx(e) {\n if (e === "Z")\n return 0;\n var t = e.match(vx);\n if (!t)\n return 0;\n var o = t[1] === "+" ? -1 : 1, n = parseInt(t[2]), r = t[3] && parseInt(t[3]) || 0;\n return Tx(n, r) ? o * (n * t6 + r * e6) : NaN;\n}\nfunction Rx(e, t, o) {\n var n = /* @__PURE__ */ new Date(0);\n n.setUTCFullYear(e, 0, 4);\n var r = n.getUTCDay() || 7, i = (t - 1) * 7 + o + 1 - r;\n return n.setUTCDate(n.getUTCDate() + i), n;\n}\nvar Bx = [31, null, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31];\nfunction cp(e) {\n return e % 400 === 0 || e % 4 === 0 && e % 100 !== 0;\n}\nfunction Sx(e, t, o) {\n return t >= 0 && t <= 11 && o >= 1 && o <= (Bx[t] || (cp(e) ? 29 : 28));\n}\nfunction Ex(e, t) {\n return t >= 1 && t <= (cp(e) ? 366 : 365);\n}\nfunction kx(e, t, o) {\n return t >= 1 && t <= 53 && o >= 0 && o <= 6;\n}\nfunction Nx(e, t, o) {\n return e === 24 ? t === 0 && o === 0 : o >= 0 && o < 60 && t >= 0 && t < 60 && e >= 0 && e < 25;\n}\nfunction Tx(e, t) {\n return t >= 0 && t <= 59;\n}\nfunction W2(e, t) {\n Q1(2, arguments);\n var o = j1(e), n = v0(t), r = o.getFullYear(), i = o.getDate(), a = /* @__PURE__ */ new Date(0);\n a.setFullYear(r, n, 15), a.setHours(0, 0, 0, 0);\n var s = hw(a);\n return o.setMonth(n, Math.min(i, s)), o;\n}\nfunction Ix(e, t) {\n if (Q1(2, arguments), Me(t) !== "object" || t === null)\n throw new RangeError("values parameter must be an object");\n var o = j1(e);\n return isNaN(o.getTime()) ? /* @__PURE__ */ new Date(NaN) : (t.year != null && o.setFullYear(t.year), t.month != null && (o = W2(o, t.month)), t.date != null && o.setDate(v0(t.date)), t.hours != null && o.setHours(v0(t.hours)), t.minutes != null && o.setMinutes(v0(t.minutes)), t.seconds != null && o.setSeconds(v0(t.seconds)), t.milliseconds != null && o.setMilliseconds(v0(t.milliseconds)), o);\n}\nfunction Vn(e, t) {\n Q1(2, arguments);\n var o = j1(e), n = v0(t);\n return o.setHours(n), o;\n}\nfunction Pn(e, t) {\n Q1(2, arguments);\n var o = j1(e), n = v0(t);\n return o.setMinutes(n), o;\n}\nfunction v3(e, t) {\n Q1(2, arguments);\n var o = j1(e), n = v0(t), r = Math.floor(o.getMonth() / 3) + 1, i = n - r;\n return W2(o, o.getMonth() + i * 3);\n}\nfunction Dx(e, t) {\n Q1(2, arguments);\n var o = j1(e), n = v0(t);\n return o.setSeconds(n), o;\n}\nfunction et(e, t) {\n Q1(2, arguments);\n var o = j1(e), n = v0(t);\n return isNaN(o.getTime()) ? /* @__PURE__ */ new Date(NaN) : (o.setFullYear(n), o);\n}\nfunction _3(e, t) {\n Q1(2, arguments);\n var o = v0(t);\n return ve(e, -o);\n}\nfunction Hx(e, t) {\n Q1(2, arguments);\n var o = v0(t);\n return Yl(e, -o);\n}\nfunction U8(e, t) {\n Q1(2, arguments);\n var o = v0(t);\n return p4(e, -o);\n}\nfunction Mr(e, t) {\n Q1(2, arguments);\n var o = v0(t);\n return K3(e, -o);\n}\n(styled_components__WEBPACK_IMPORTED_MODULE_1___default().div)`\n position: absolute;\n top: 20px;\n transform: translateX(-50%);\n width: 230px;\n`;\nconst Y8 = (styled_components__WEBPACK_IMPORTED_MODULE_1___default().div)`\n & + & {\n margin: ${({ theme: { spacings: e } }) => e.sp16} 0 0;\n }\n`;\nvar Za = { exports: {} }, sn = { exports: {} }, D0 = {};\n/** @license React v16.13.1\n * react-is.production.min.js\n *\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\nvar G8;\nfunction Vx() {\n if (G8)\n return D0;\n G8 = 1;\n var e = typeof Symbol == "function" && Symbol.for, t = e ? Symbol.for("react.element") : 60103, o = e ? Symbol.for("react.portal") : 60106, n = e ? Symbol.for("react.fragment") : 60107, r = e ? Symbol.for("react.strict_mode") : 60108, i = e ? Symbol.for("react.profiler") : 60114, a = e ? Symbol.for("react.provider") : 60109, s = e ? Symbol.for("react.context") : 60110, l = e ? Symbol.for("react.async_mode") : 60111, p = e ? Symbol.for("react.concurrent_mode") : 60111, d = e ? Symbol.for("react.forward_ref") : 60112, b = e ? Symbol.for("react.suspense") : 60113, M = e ? Symbol.for("react.suspense_list") : 60120, u = e ? Symbol.for("react.memo") : 60115, A = e ? Symbol.for("react.lazy") : 60116, z = e ? Symbol.for("react.block") : 60121, f = e ? Symbol.for("react.fundamental") : 60117, O = e ? Symbol.for("react.responder") : 60118, h = e ? Symbol.for("react.scope") : 60119;\n function g(L) {\n if (typeof L == "object" && L !== null) {\n var y = L.$$typeof;\n switch (y) {\n case t:\n switch (L = L.type, L) {\n case l:\n case p:\n case n:\n case i:\n case r:\n case b:\n return L;\n default:\n switch (L = L && L.$$typeof, L) {\n case s:\n case d:\n case A:\n case u:\n case a:\n return L;\n default:\n return y;\n }\n }\n case o:\n return y;\n }\n }\n }\n function v(L) {\n return g(L) === p;\n }\n return D0.AsyncMode = l, D0.ConcurrentMode = p, D0.ContextConsumer = s, D0.ContextProvider = a, D0.Element = t, D0.ForwardRef = d, D0.Fragment = n, D0.Lazy = A, D0.Memo = u, D0.Portal = o, D0.Profiler = i, D0.StrictMode = r, D0.Suspense = b, D0.isAsyncMode = function(L) {\n return v(L) || g(L) === l;\n }, D0.isConcurrentMode = v, D0.isContextConsumer = function(L) {\n return g(L) === s;\n }, D0.isContextProvider = function(L) {\n return g(L) === a;\n }, D0.isElement = function(L) {\n return typeof L == "object" && L !== null && L.$$typeof === t;\n }, D0.isForwardRef = function(L) {\n return g(L) === d;\n }, D0.isFragment = function(L) {\n return g(L) === n;\n }, D0.isLazy = function(L) {\n return g(L) === A;\n }, D0.isMemo = function(L) {\n return g(L) === u;\n }, D0.isPortal = function(L) {\n return g(L) === o;\n }, D0.isProfiler = function(L) {\n return g(L) === i;\n }, D0.isStrictMode = function(L) {\n return g(L) === r;\n }, D0.isSuspense = function(L) {\n return g(L) === b;\n }, D0.isValidElementType = function(L) {\n return typeof L == "string" || typeof L == "function" || L === n || L === p || L === i || L === r || L === b || L === M || typeof L == "object" && L !== null && (L.$$typeof === A || L.$$typeof === u || L.$$typeof === a || L.$$typeof === s || L.$$typeof === d || L.$$typeof === f || L.$$typeof === O || L.$$typeof === h || L.$$typeof === z);\n }, D0.typeOf = g, D0;\n}\nvar H0 = {};\n/** @license React v16.13.1\n * react-is.development.js\n *\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\nvar Q8;\nfunction Px() {\n return Q8 || (Q8 = 1, false && 0), H0;\n}\nvar Z8;\nfunction s6() {\n return Z8 || (Z8 = 1, true ? sn.exports = Vx() : 0), sn.exports;\n}\n/*\nobject-assign\n(c) Sindre Sorhus\n@license MIT\n*/\nvar yi, j8;\nfunction Fx() {\n if (j8)\n return yi;\n j8 = 1;\n var e = Object.getOwnPropertySymbols, t = Object.prototype.hasOwnProperty, o = Object.prototype.propertyIsEnumerable;\n function n(i) {\n if (i == null)\n throw new TypeError("Object.assign cannot be called with null or undefined");\n return Object(i);\n }\n function r() {\n try {\n if (!Object.assign)\n return !1;\n var i = new String("abc");\n if (i[5] = "de", Object.getOwnPropertyNames(i)[0] === "5")\n return !1;\n for (var a = {}, s = 0; s < 10; s++)\n a["_" + String.fromCharCode(s)] = s;\n var l = Object.getOwnPropertyNames(a).map(function(d) {\n return a[d];\n });\n if (l.join("") !== "0123456789")\n return !1;\n var p = {};\n return "abcdefghijklmnopqrst".split("").forEach(function(d) {\n p[d] = d;\n }), Object.keys(Object.assign({}, p)).join("") === "abcdefghijklmnopqrst";\n } catch {\n return !1;\n }\n }\n return yi = r() ? Object.assign : function(i, a) {\n for (var s, l = n(i), p, d = 1; d < arguments.length; d++) {\n s = Object(arguments[d]);\n for (var b in s)\n t.call(s, b) && (l[b] = s[b]);\n if (e) {\n p = e(s);\n for (var M = 0; M < p.length; M++)\n o.call(s, p[M]) && (l[p[M]] = s[p[M]]);\n }\n }\n return l;\n }, yi;\n}\nvar wi, K8;\nfunction c6() {\n if (K8)\n return wi;\n K8 = 1;\n var e = "SECRET_DO_NOT_PASS_THIS_OR_YOU_WILL_BE_FIRED";\n return wi = e, wi;\n}\nvar xi, J8;\nfunction lp() {\n return J8 || (J8 = 1, xi = Function.call.bind(Object.prototype.hasOwnProperty)), xi;\n}\nvar Wi, _8;\nfunction Xx() {\n if (_8)\n return Wi;\n _8 = 1;\n var e = function() {\n };\n if (false) { var t, o, n; }\n function r(i, a, s, l, p) {\n if (false) { var u, M, b, d; }\n }\n return r.resetWarningCache = function() {\n false && (0);\n }, Wi = r, Wi;\n}\nvar Ri, $8;\nfunction Ux() {\n if ($8)\n return Ri;\n $8 = 1;\n var e = s6(), t = Fx(), o = c6(), n = lp(), r = Xx(), i = function() {\n };\n false && (0);\n function a() {\n return null;\n }\n return Ri = function(s, l) {\n var p = typeof Symbol == "function" && Symbol.iterator, d = "@@iterator";\n function b(R) {\n var I = R && (p && R[p] || R[d]);\n if (typeof I == "function")\n return I;\n }\n var M = "<>", u = {\n array: O("array"),\n bigint: O("bigint"),\n bool: O("boolean"),\n func: O("function"),\n number: O("number"),\n object: O("object"),\n string: O("string"),\n symbol: O("symbol"),\n any: h(),\n arrayOf: g,\n element: v(),\n elementType: L(),\n instanceOf: y,\n node: T(),\n objectOf: X,\n oneOf: B,\n oneOfType: F,\n shape: H,\n exact: C\n };\n function A(R, I) {\n return R === I ? R !== 0 || 1 / R === 1 / I : R !== R && I !== I;\n }\n function z(R, I) {\n this.message = R, this.data = I && typeof I == "object" ? I : {}, this.stack = "";\n }\n z.prototype = Error.prototype;\n function f(R) {\n if (false)\n { var I, j; }\n function U(r1, K, Q, E, D, G, J) {\n if (E = E || M, G = G || Q, J !== o) {\n if (l) {\n var S = new Error(\n "Calling PropTypes validators directly is not supported by the `prop-types` package. Use `PropTypes.checkPropTypes()` to call them. Read more at http://fb.me/use-check-prop-types"\n );\n throw S.name = "Invariant Violation", S;\n } else if (false) { var W; }\n }\n return K[Q] == null ? r1 ? K[Q] === null ? new z("The " + D + " `" + G + "` is marked as required " + ("in `" + E + "`, but its value is `null`.")) : new z("The " + D + " `" + G + "` is marked as required in " + ("`" + E + "`, but its value is `undefined`.")) : null : R(K, Q, E, D, G);\n }\n var _ = U.bind(null, !1);\n return _.isRequired = U.bind(null, !0), _;\n }\n function O(R) {\n function I(j, U, _, r1, K, Q) {\n var E = j[U], D = k(E);\n if (D !== R) {\n var G = x(E);\n return new z(\n "Invalid " + r1 + " `" + K + "` of type " + ("`" + G + "` supplied to `" + _ + "`, expected ") + ("`" + R + "`."),\n { expectedType: R }\n );\n }\n return null;\n }\n return f(I);\n }\n function h() {\n return f(a);\n }\n function g(R) {\n function I(j, U, _, r1, K) {\n if (typeof R != "function")\n return new z("Property `" + K + "` of component `" + _ + "` has invalid PropType notation inside arrayOf.");\n var Q = j[U];\n if (!Array.isArray(Q)) {\n var E = k(Q);\n return new z("Invalid " + r1 + " `" + K + "` of type " + ("`" + E + "` supplied to `" + _ + "`, expected an array."));\n }\n for (var D = 0; D < Q.length; D++) {\n var G = R(Q, D, _, r1, K + "[" + D + "]", o);\n if (G instanceof Error)\n return G;\n }\n return null;\n }\n return f(I);\n }\n function v() {\n function R(I, j, U, _, r1) {\n var K = I[j];\n if (!s(K)) {\n var Q = k(K);\n return new z("Invalid " + _ + " `" + r1 + "` of type " + ("`" + Q + "` supplied to `" + U + "`, expected a single ReactElement."));\n }\n return null;\n }\n return f(R);\n }\n function L() {\n function R(I, j, U, _, r1) {\n var K = I[j];\n if (!e.isValidElementType(K)) {\n var Q = k(K);\n return new z("Invalid " + _ + " `" + r1 + "` of type " + ("`" + Q + "` supplied to `" + U + "`, expected a single ReactElement type."));\n }\n return null;\n }\n return f(R);\n }\n function y(R) {\n function I(j, U, _, r1, K) {\n if (!(j[U] instanceof R)) {\n var Q = R.name || M, E = V(j[U]);\n return new z("Invalid " + r1 + " `" + K + "` of type " + ("`" + E + "` supplied to `" + _ + "`, expected ") + ("instance of `" + Q + "`."));\n }\n return null;\n }\n return f(I);\n }\n function B(R) {\n if (!Array.isArray(R))\n return false && (0), a;\n function I(j, U, _, r1, K) {\n for (var Q = j[U], E = 0; E < R.length; E++)\n if (A(Q, R[E]))\n return null;\n var D = JSON.stringify(R, function(J, S) {\n var W = x(S);\n return W === "symbol" ? String(S) : S;\n });\n return new z("Invalid " + r1 + " `" + K + "` of value `" + String(Q) + "` " + ("supplied to `" + _ + "`, expected one of " + D + "."));\n }\n return f(I);\n }\n function X(R) {\n function I(j, U, _, r1, K) {\n if (typeof R != "function")\n return new z("Property `" + K + "` of component `" + _ + "` has invalid PropType notation inside objectOf.");\n var Q = j[U], E = k(Q);\n if (E !== "object")\n return new z("Invalid " + r1 + " `" + K + "` of type " + ("`" + E + "` supplied to `" + _ + "`, expected an object."));\n for (var D in Q)\n if (n(Q, D)) {\n var G = R(Q, D, _, r1, K + "." + D, o);\n if (G instanceof Error)\n return G;\n }\n return null;\n }\n return f(I);\n }\n function F(R) {\n if (!Array.isArray(R))\n return false && 0, a;\n for (var I = 0; I < R.length; I++) {\n var j = R[I];\n if (typeof j != "function")\n return i(\n "Invalid argument supplied to oneOfType. Expected an array of check functions, but received " + N(j) + " at index " + I + "."\n ), a;\n }\n function U(_, r1, K, Q, E) {\n for (var D = [], G = 0; G < R.length; G++) {\n var J = R[G], S = J(_, r1, K, Q, E, o);\n if (S == null)\n return null;\n S.data && n(S.data, "expectedType") && D.push(S.data.expectedType);\n }\n var W = D.length > 0 ? ", expected one of type [" + D.join(", ") + "]" : "";\n return new z("Invalid " + Q + " `" + E + "` supplied to " + ("`" + K + "`" + W + "."));\n }\n return f(U);\n }\n function T() {\n function R(I, j, U, _, r1) {\n return q(I[j]) ? null : new z("Invalid " + _ + " `" + r1 + "` supplied to " + ("`" + U + "`, expected a ReactNode."));\n }\n return f(R);\n }\n function w(R, I, j, U, _) {\n return new z(\n (R || "React class") + ": " + I + " type `" + j + "." + U + "` is invalid; it must be a function, usually from the `prop-types` package, but received `" + _ + "`."\n );\n }\n function H(R) {\n function I(j, U, _, r1, K) {\n var Q = j[U], E = k(Q);\n if (E !== "object")\n return new z("Invalid " + r1 + " `" + K + "` of type `" + E + "` " + ("supplied to `" + _ + "`, expected `object`."));\n for (var D in R) {\n var G = R[D];\n if (typeof G != "function")\n return w(_, r1, K, D, x(G));\n var J = G(Q, D, _, r1, K + "." + D, o);\n if (J)\n return J;\n }\n return null;\n }\n return f(I);\n }\n function C(R) {\n function I(j, U, _, r1, K) {\n var Q = j[U], E = k(Q);\n if (E !== "object")\n return new z("Invalid " + r1 + " `" + K + "` of type `" + E + "` " + ("supplied to `" + _ + "`, expected `object`."));\n var D = t({}, j[U], R);\n for (var G in D) {\n var J = R[G];\n if (n(R, G) && typeof J != "function")\n return w(_, r1, K, G, x(J));\n if (!J)\n return new z(\n "Invalid " + r1 + " `" + K + "` key `" + G + "` supplied to `" + _ + "`.\\nBad object: " + JSON.stringify(j[U], null, " ") + `\nValid keys: ` + JSON.stringify(Object.keys(R), null, " ")\n );\n var S = J(Q, G, _, r1, K + "." + G, o);\n if (S)\n return S;\n }\n return null;\n }\n return f(I);\n }\n function q(R) {\n switch (typeof R) {\n case "number":\n case "string":\n case "undefined":\n return !0;\n case "boolean":\n return !R;\n case "object":\n if (Array.isArray(R))\n return R.every(q);\n if (R === null || s(R))\n return !0;\n var I = b(R);\n if (I) {\n var j = I.call(R), U;\n if (I !== R.entries) {\n for (; !(U = j.next()).done; )\n if (!q(U.value))\n return !1;\n } else\n for (; !(U = j.next()).done; ) {\n var _ = U.value;\n if (_ && !q(_[1]))\n return !1;\n }\n } else\n return !1;\n return !0;\n default:\n return !1;\n }\n }\n function m(R, I) {\n return R === "symbol" ? !0 : I ? I["@@toStringTag"] === "Symbol" || typeof Symbol == "function" && I instanceof Symbol : !1;\n }\n function k(R) {\n var I = typeof R;\n return Array.isArray(R) ? "array" : R instanceof RegExp ? "object" : m(I, R) ? "symbol" : I;\n }\n function x(R) {\n if (typeof R > "u" || R === null)\n return "" + R;\n var I = k(R);\n if (I === "object") {\n if (R instanceof Date)\n return "date";\n if (R instanceof RegExp)\n return "regexp";\n }\n return I;\n }\n function N(R) {\n var I = x(R);\n switch (I) {\n case "array":\n case "object":\n return "an " + I;\n case "boolean":\n case "date":\n case "regexp":\n return "a " + I;\n default:\n return I;\n }\n }\n function V(R) {\n return !R.constructor || !R.constructor.name ? M : R.constructor.name;\n }\n return u.checkPropTypes = r, u.resetWarningCache = r.resetWarningCache, u.PropTypes = u, u;\n }, Ri;\n}\nvar Bi, e7;\nfunction Yx() {\n if (e7)\n return Bi;\n e7 = 1;\n var e = c6();\n function t() {\n }\n function o() {\n }\n return o.resetWarningCache = t, Bi = function() {\n function n(a, s, l, p, d, b) {\n if (b !== e) {\n var M = new Error(\n "Calling PropTypes validators directly is not supported by the `prop-types` package. Use PropTypes.checkPropTypes() to call them. Read more at http://fb.me/use-check-prop-types"\n );\n throw M.name = "Invariant Violation", M;\n }\n }\n n.isRequired = n;\n function r() {\n return n;\n }\n var i = {\n array: n,\n bigint: n,\n bool: n,\n func: n,\n number: n,\n object: n,\n string: n,\n symbol: n,\n any: n,\n arrayOf: r,\n element: n,\n elementType: n,\n instanceOf: r,\n node: n,\n objectOf: r,\n oneOf: r,\n oneOfType: r,\n shape: r,\n exact: r,\n checkPropTypes: o,\n resetWarningCache: t\n };\n return i.PropTypes = i, i;\n }, Bi;\n}\nif (false) { var Gx, Qx; } else\n Za.exports = Yx()();\nvar pp = Za.exports;\nconst q3 = /* @__PURE__ */ (/* unused pure expression or super */ null && (Q2(pp)));\nvar dp = { exports: {} };\n/*!\n\tCopyright (c) 2018 Jed Watson.\n\tLicensed under the MIT License (MIT), see\n\thttp://jedwatson.github.io/classnames\n*/\n(function(e) {\n (function() {\n var t = {}.hasOwnProperty;\n function o() {\n for (var i = "", a = 0; a < arguments.length; a++) {\n var s = arguments[a];\n s && (i = r(i, n(s)));\n }\n return i;\n }\n function n(i) {\n if (typeof i == "string" || typeof i == "number")\n return i;\n if (typeof i != "object")\n return "";\n if (Array.isArray(i))\n return o.apply(null, i);\n if (i.toString !== Object.prototype.toString && !i.toString.toString().includes("[native code]"))\n return i.toString();\n var a = "";\n for (var s in i)\n t.call(i, s) && i[s] && (a = r(a, s));\n return a;\n }\n function r(i, a) {\n return a ? i ? i + " " + a : i + a : i;\n }\n e.exports ? (o.default = o, e.exports = o) : window.classNames = o;\n })();\n})(dp);\nvar Zx = dp.exports;\nconst m2 = /* @__PURE__ */ Q2(Zx);\nfunction jx(e, t) {\n e.prototype = Object.create(t.prototype), e.prototype.constructor = e, ja(e, t);\n}\nfunction ja(e, t) {\n return ja = Object.setPrototypeOf || function(n, r) {\n return n.__proto__ = r, n;\n }, ja(e, t);\n}\nfunction Kx(e, t) {\n if (e == null)\n return {};\n var o = {}, n = Object.keys(e), r, i;\n for (i = 0; i < n.length; i++)\n r = n[i], !(t.indexOf(r) >= 0) && (o[r] = e[r]);\n return o;\n}\nfunction t7(e) {\n if (e === void 0)\n throw new ReferenceError("this hasn\'t been initialised - super() hasn\'t been called");\n return e;\n}\nfunction Jx(e, t, o) {\n return e === t ? !0 : e.correspondingElement ? e.correspondingElement.classList.contains(o) : e.classList.contains(o);\n}\nfunction _x(e, t, o) {\n if (e === t)\n return !0;\n for (; e.parentNode || e.host; ) {\n if (e.parentNode && Jx(e, t, o))\n return !0;\n e = e.parentNode || e.host;\n }\n return e;\n}\nfunction $x(e) {\n return document.documentElement.clientWidth <= e.clientX || document.documentElement.clientHeight <= e.clientY;\n}\nvar eW = function() {\n if (!(typeof window > "u" || typeof window.addEventListener != "function")) {\n var t = !1, o = Object.defineProperty({}, "passive", {\n get: function() {\n t = !0;\n }\n }), n = function() {\n };\n return window.addEventListener("testPassiveEventSupport", n, o), window.removeEventListener("testPassiveEventSupport", n, o), t;\n }\n};\nfunction tW(e) {\n return e === void 0 && (e = 0), function() {\n return ++e;\n };\n}\nvar oW = tW(), Ka, cn = {}, Si = {}, rW = ["touchstart", "touchmove"], nW = "ignore-react-onclickoutside";\nfunction o7(e, t) {\n var o = {}, n = rW.indexOf(t) !== -1;\n return n && Ka && (o.passive = !e.props.preventDefault), o;\n}\nfunction X4(e, t) {\n var o, n, r = e.displayName || e.name || "Component";\n return n = o = /* @__PURE__ */ function(i) {\n jx(a, i);\n function a(l) {\n var p;\n return p = i.call(this, l) || this, p.__outsideClickHandler = function(d) {\n if (typeof p.__clickOutsideHandlerProp == "function") {\n p.__clickOutsideHandlerProp(d);\n return;\n }\n var b = p.getInstance();\n if (typeof b.props.handleClickOutside == "function") {\n b.props.handleClickOutside(d);\n return;\n }\n if (typeof b.handleClickOutside == "function") {\n b.handleClickOutside(d);\n return;\n }\n throw new Error("WrappedComponent: " + r + " lacks a handleClickOutside(event) function for processing outside click events.");\n }, p.__getComponentNode = function() {\n var d = p.getInstance();\n return t && typeof t.setClickOutsideRef == "function" ? t.setClickOutsideRef()(d) : typeof d.setClickOutsideRef == "function" ? d.setClickOutsideRef() : (0,react_dom__WEBPACK_IMPORTED_MODULE_2__.findDOMNode)(d);\n }, p.enableOnClickOutside = function() {\n if (!(typeof document > "u" || Si[p._uid])) {\n typeof Ka > "u" && (Ka = eW()), Si[p._uid] = !0;\n var d = p.props.eventTypes;\n d.forEach || (d = [d]), cn[p._uid] = function(b) {\n if (p.componentNode !== null && !(p.initTimeStamp > b.timeStamp) && (p.props.preventDefault && b.preventDefault(), p.props.stopPropagation && b.stopPropagation(), !(p.props.excludeScrollbar && $x(b)))) {\n var M = b.composed && b.composedPath && b.composedPath().shift() || b.target;\n _x(M, p.componentNode, p.props.outsideClickIgnoreClass) === document && p.__outsideClickHandler(b);\n }\n }, d.forEach(function(b) {\n document.addEventListener(b, cn[p._uid], o7(t7(p), b));\n });\n }\n }, p.disableOnClickOutside = function() {\n delete Si[p._uid];\n var d = cn[p._uid];\n if (d && typeof document < "u") {\n var b = p.props.eventTypes;\n b.forEach || (b = [b]), b.forEach(function(M) {\n return document.removeEventListener(M, d, o7(t7(p), M));\n }), delete cn[p._uid];\n }\n }, p.getRef = function(d) {\n return p.instanceRef = d;\n }, p._uid = oW(), p.initTimeStamp = performance.now(), p;\n }\n var s = a.prototype;\n return s.getInstance = function() {\n if (e.prototype && !e.prototype.isReactComponent)\n return this;\n var p = this.instanceRef;\n return p.getInstance ? p.getInstance() : p;\n }, s.componentDidMount = function() {\n if (!(typeof document > "u" || !document.createElement)) {\n var p = this.getInstance();\n if (t && typeof t.handleClickOutside == "function" && (this.__clickOutsideHandlerProp = t.handleClickOutside(p), typeof this.__clickOutsideHandlerProp != "function"))\n throw new Error("WrappedComponent: " + r + " lacks a function for processing outside click events specified by the handleClickOutside config option.");\n this.componentNode = this.__getComponentNode(), !this.props.disableOnClickOutside && this.enableOnClickOutside();\n }\n }, s.componentDidUpdate = function() {\n this.componentNode = this.__getComponentNode();\n }, s.componentWillUnmount = function() {\n this.disableOnClickOutside();\n }, s.render = function() {\n var p = this.props;\n p.excludeScrollbar;\n var d = Kx(p, ["excludeScrollbar"]);\n return e.prototype && e.prototype.isReactComponent ? d.ref = this.getRef : d.wrappedRef = this.getRef, d.disableOnClickOutside = this.disableOnClickOutside, d.enableOnClickOutside = this.enableOnClickOutside, (0,react__WEBPACK_IMPORTED_MODULE_0__.createElement)(e, d);\n }, a;\n }(react__WEBPACK_IMPORTED_MODULE_0__.Component), o.displayName = "OnClickOutside(" + r + ")", o.defaultProps = {\n eventTypes: ["mousedown", "touchstart"],\n excludeScrollbar: t && t.excludeScrollbar || !1,\n outsideClickIgnoreClass: nW,\n preventDefault: !1,\n stopPropagation: !1\n }, o.getClass = function() {\n return e.getClass ? e.getClass() : e;\n }, n;\n}\nfunction r7(e, t) {\n var o = Object.keys(e);\n if (Object.getOwnPropertySymbols) {\n var n = Object.getOwnPropertySymbols(e);\n t && (n = n.filter(function(r) {\n return Object.getOwnPropertyDescriptor(e, r).enumerable;\n })), o.push.apply(o, n);\n }\n return o;\n}\nfunction z4(e) {\n for (var t = 1; t < arguments.length; t++) {\n var o = arguments[t] != null ? arguments[t] : {};\n t % 2 ? r7(Object(o), !0).forEach(function(n) {\n z1(e, n, o[n]);\n }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(o)) : r7(Object(o)).forEach(function(n) {\n Object.defineProperty(e, n, Object.getOwnPropertyDescriptor(o, n));\n });\n }\n return e;\n}\nfunction Ja(e) {\n return Ja = typeof Symbol == "function" && typeof Symbol.iterator == "symbol" ? function(t) {\n return typeof t;\n } : function(t) {\n return t && typeof Symbol == "function" && t.constructor === Symbol && t !== Symbol.prototype ? "symbol" : typeof t;\n }, Ja(e);\n}\nfunction z2(e, t) {\n if (!(e instanceof t))\n throw new TypeError("Cannot call a class as a function");\n}\nfunction n7(e, t) {\n for (var o = 0; o < t.length; o++) {\n var n = t[o];\n n.enumerable = n.enumerable || !1, n.configurable = !0, "value" in n && (n.writable = !0), Object.defineProperty(e, bp(n.key), n);\n }\n}\nfunction h2(e, t, o) {\n return t && n7(e.prototype, t), o && n7(e, o), Object.defineProperty(e, "prototype", { writable: !1 }), e;\n}\nfunction z1(e, t, o) {\n return (t = bp(t)) in e ? Object.defineProperty(e, t, { value: o, enumerable: !0, configurable: !0, writable: !0 }) : e[t] = o, e;\n}\nfunction $3() {\n return $3 = Object.assign ? Object.assign.bind() : function(e) {\n for (var t = 1; t < arguments.length; t++) {\n var o = arguments[t];\n for (var n in o)\n Object.prototype.hasOwnProperty.call(o, n) && (e[n] = o[n]);\n }\n return e;\n }, $3.apply(this, arguments);\n}\nfunction O2(e, t) {\n if (typeof t != "function" && t !== null)\n throw new TypeError("Super expression must either be null or a function");\n e.prototype = Object.create(t && t.prototype, { constructor: { value: e, writable: !0, configurable: !0 } }), Object.defineProperty(e, "prototype", { writable: !1 }), t && _a(e, t);\n}\nfunction h4(e) {\n return h4 = Object.setPrototypeOf ? Object.getPrototypeOf.bind() : function(t) {\n return t.__proto__ || Object.getPrototypeOf(t);\n }, h4(e);\n}\nfunction _a(e, t) {\n return _a = Object.setPrototypeOf ? Object.setPrototypeOf.bind() : function(o, n) {\n return o.__proto__ = n, o;\n }, _a(e, t);\n}\nfunction f1(e) {\n if (e === void 0)\n throw new ReferenceError("this hasn\'t been initialised - super() hasn\'t been called");\n return e;\n}\nfunction f2(e) {\n var t = function() {\n if (typeof Reflect > "u" || !Reflect.construct || Reflect.construct.sham)\n return !1;\n if (typeof Proxy == "function")\n return !0;\n try {\n return Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function() {\n })), !0;\n } catch {\n return !1;\n }\n }();\n return function() {\n var o, n = h4(e);\n if (t) {\n var r = h4(this).constructor;\n o = Reflect.construct(n, arguments, r);\n } else\n o = n.apply(this, arguments);\n return function(i, a) {\n if (a && (typeof a == "object" || typeof a == "function"))\n return a;\n if (a !== void 0)\n throw new TypeError("Derived constructors may only return object or undefined");\n return f1(i);\n }(this, o);\n };\n}\nfunction Ar(e) {\n return function(t) {\n if (Array.isArray(t))\n return Ei(t);\n }(e) || function(t) {\n if (typeof Symbol < "u" && t[Symbol.iterator] != null || t["@@iterator"] != null)\n return Array.from(t);\n }(e) || function(t, o) {\n if (t) {\n if (typeof t == "string")\n return Ei(t, o);\n var n = Object.prototype.toString.call(t).slice(8, -1);\n if (n === "Object" && t.constructor && (n = t.constructor.name), n === "Map" || n === "Set")\n return Array.from(t);\n if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))\n return Ei(t, o);\n }\n }(e) || function() {\n throw new TypeError(`Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.`);\n }();\n}\nfunction Ei(e, t) {\n (t == null || t > e.length) && (t = e.length);\n for (var o = 0, n = new Array(t); o < t; o++)\n n[o] = e[o];\n return n;\n}\nfunction bp(e) {\n var t = function(o, n) {\n if (typeof o != "object" || o === null)\n return o;\n var r = o[Symbol.toPrimitive];\n if (r !== void 0) {\n var i = r.call(o, n || "default");\n if (typeof i != "object")\n return i;\n throw new TypeError("@@toPrimitive must return a primitive value.");\n }\n return (n === "string" ? String : Number)(o);\n }(e, "string");\n return typeof t == "symbol" ? t : String(t);\n}\nvar i7 = function(e, t) {\n switch (e) {\n case "P":\n return t.date({ width: "short" });\n case "PP":\n return t.date({ width: "medium" });\n case "PPP":\n return t.date({ width: "long" });\n default:\n return t.date({ width: "full" });\n }\n}, a7 = function(e, t) {\n switch (e) {\n case "p":\n return t.time({ width: "short" });\n case "pp":\n return t.time({ width: "medium" });\n case "ppp":\n return t.time({ width: "long" });\n default:\n return t.time({ width: "full" });\n }\n}, iW = { p: a7, P: function(e, t) {\n var o, n = e.match(/(P+)(p+)?/) || [], r = n[1], i = n[2];\n if (!i)\n return i7(e, t);\n switch (r) {\n case "P":\n o = t.dateTime({ width: "short" });\n break;\n case "PP":\n o = t.dateTime({ width: "medium" });\n break;\n case "PPP":\n o = t.dateTime({ width: "long" });\n break;\n default:\n o = t.dateTime({ width: "full" });\n }\n return o.replace("{{date}}", i7(r, t)).replace("{{time}}", a7(i, t));\n} }, Ko = 12, aW = /P+p+|P+|p+|\'\'|\'(\'\'|[^\'])+(\'|$)|./g;\nfunction G0(e) {\n var t = e ? typeof e == "string" || e instanceof String ? Cx(e) : j1(e) : /* @__PURE__ */ new Date();\n return Lt(t) ? t : null;\n}\nfunction Lt(e, t) {\n return t = t || /* @__PURE__ */ new Date("1/1/1000"), lr(e) && !vt(e, t);\n}\nfunction e2(e, t, o) {\n if (o === "en")\n return dr(e, t, { awareOfUnicodeTokens: !0 });\n var n = St(o);\n return o && !n && console.warn(\'A locale object was not found for the provided string ["\'.concat(o, \'"].\')), !n && c3() && St(c3()) && (n = St(c3())), dr(e, t, { locale: n || null, awareOfUnicodeTokens: !0 });\n}\nfunction Be(e, t) {\n var o = t.dateFormat, n = t.locale;\n return e && e2(e, Array.isArray(o) ? o[0] : o, n) || "";\n}\nfunction s7(e, t) {\n var o = t.hour, n = o === void 0 ? 0 : o, r = t.minute, i = r === void 0 ? 0 : r, a = t.second;\n return Vn(Pn(Dx(e, a === void 0 ? 0 : a), i), n);\n}\nfunction Xe(e, t, o) {\n var n = St(t || c3());\n return Ul(e, { locale: n, weekStartsOn: o });\n}\nfunction Bt(e) {\n return Ql(e);\n}\nfunction Xo(e) {\n return Zl(e);\n}\nfunction c7(e) {\n return Ya(e);\n}\nfunction l7() {\n return Ve(G0());\n}\nfunction qt(e, t) {\n return e && t ? fx(e, t) : !e && !t;\n}\nfunction fe(e, t) {\n return e && t ? hx(e, t) : !e && !t;\n}\nfunction O4(e, t) {\n return e && t ? Ox(e, t) : !e && !t;\n}\nfunction Q0(e, t) {\n return e && t ? ey(e, t) : !e && !t;\n}\nfunction i3(e, t) {\n return e && t ? gw(e, t) : !e && !t;\n}\nfunction Fn(e, t, o) {\n var n, r = Ve(t), i = b4(o);\n try {\n n = br(e, { start: r, end: i });\n } catch {\n n = !1;\n }\n return n;\n}\nfunction c3() {\n return (typeof window < "u" ? window : globalThis).__localeId__;\n}\nfunction St(e) {\n if (typeof e == "string") {\n var t = typeof window < "u" ? window : globalThis;\n return t.__localeData__ ? t.__localeData__[e] : null;\n }\n return e;\n}\nfunction l6(e, t) {\n return e2(W2(G0(), e), "LLLL", t);\n}\nfunction Mp(e, t) {\n return e2(W2(G0(), e), "LLL", t);\n}\nfunction U4(e) {\n var t = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : {}, o = t.minDate, n = t.maxDate, r = t.excludeDates, i = t.excludeDateIntervals, a = t.includeDates, s = t.includeDateIntervals, l = t.filterDate;\n return Y4(e, { minDate: o, maxDate: n }) || r && r.some(function(p) {\n return Q0(e, p);\n }) || i && i.some(function(p) {\n var d = p.start, b = p.end;\n return br(e, { start: d, end: b });\n }) || a && !a.some(function(p) {\n return Q0(e, p);\n }) || s && !s.some(function(p) {\n var d = p.start, b = p.end;\n return br(e, { start: d, end: b });\n }) || l && !l(G0(e)) || !1;\n}\nfunction p6(e) {\n var t = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : {}, o = t.excludeDates, n = t.excludeDateIntervals;\n return n && n.length > 0 ? n.some(function(r) {\n var i = r.start, a = r.end;\n return br(e, { start: i, end: a });\n }) : o && o.some(function(r) {\n return Q0(e, r);\n }) || !1;\n}\nfunction Ap(e) {\n var t = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : {}, o = t.minDate, n = t.maxDate, r = t.excludeDates, i = t.includeDates, a = t.filterDate;\n return Y4(e, { minDate: Ql(o), maxDate: Gl(n) }) || r && r.some(function(s) {\n return fe(e, s);\n }) || i && !i.some(function(s) {\n return fe(e, s);\n }) || a && !a(G0(e)) || !1;\n}\nfunction ki(e, t, o, n) {\n var r = L0(e), i = g2(e), a = L0(t), s = g2(t), l = L0(n);\n return r === a && r === l ? i <= o && o <= s : r < a ? l === r && i <= o || l === a && s >= o || l < a && l > r : void 0;\n}\nfunction sW(e) {\n var t = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : {}, o = t.minDate, n = t.maxDate, r = t.excludeDates, i = t.includeDates, a = t.filterDate;\n return Y4(e, { minDate: o, maxDate: n }) || r && r.some(function(s) {\n return O4(e, s);\n }) || i && !i.some(function(s) {\n return O4(e, s);\n }) || a && !a(G0(e)) || !1;\n}\nfunction Ni(e, t, o) {\n if (!lr(t) || !lr(o))\n return !1;\n var n = L0(t), r = L0(o);\n return n <= e && r >= e;\n}\nfunction up(e) {\n var t = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : {}, o = t.minDate, n = t.maxDate, r = t.excludeDates, i = t.includeDates, a = t.filterDate, s = new Date(e, 0, 1);\n return Y4(s, { minDate: Zl(o), maxDate: sy(n) }) || r && r.some(function(l) {\n return qt(s, l);\n }) || i && !i.some(function(l) {\n return qt(s, l);\n }) || a && !a(G0(s)) || !1;\n}\nfunction Ti(e, t, o, n) {\n var r = L0(e), i = S3(e), a = L0(t), s = S3(t), l = L0(n);\n return r === a && r === l ? i <= o && o <= s : r < a ? l === r && i <= o || l === a && s >= o || l < a && l > r : void 0;\n}\nfunction Y4(e) {\n var t = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : {}, o = t.minDate, n = t.maxDate;\n return o && l4(e, o) < 0 || n && l4(e, n) > 0;\n}\nfunction p7(e, t) {\n return t.some(function(o) {\n return Pe(o) === Pe(e) && Fe(o) === Fe(e);\n });\n}\nfunction d7(e) {\n var t = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : {}, o = t.excludeTimes, n = t.includeTimes, r = t.filterTime;\n return o && p7(e, o) || n && !p7(e, n) || r && !r(e) || !1;\n}\nfunction b7(e, t) {\n var o = t.minTime, n = t.maxTime;\n if (!o || !n)\n throw new Error("Both minTime and maxTime props required");\n var r, i = G0(), a = Vn(Pn(i, Fe(e)), Pe(e)), s = Vn(Pn(i, Fe(o)), Pe(o)), l = Vn(Pn(i, Fe(n)), Pe(n));\n try {\n r = !br(a, { start: s, end: l });\n } catch {\n r = !1;\n }\n return r;\n}\nfunction M7(e) {\n var t = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : {}, o = t.minDate, n = t.includeDates, r = _3(e, 1);\n return o && pr(o, r) > 0 || n && n.every(function(i) {\n return pr(i, r) > 0;\n }) || !1;\n}\nfunction A7(e) {\n var t = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : {}, o = t.maxDate, n = t.includeDates, r = ve(e, 1);\n return o && pr(r, o) > 0 || n && n.every(function(i) {\n return pr(r, i) > 0;\n }) || !1;\n}\nfunction u7(e) {\n var t = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : {}, o = t.minDate, n = t.includeDates, r = Mr(e, 1);\n return o && d4(o, r) > 0 || n && n.every(function(i) {\n return d4(i, r) > 0;\n }) || !1;\n}\nfunction z7(e) {\n var t = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : {}, o = t.maxDate, n = t.includeDates, r = K3(e, 1);\n return o && d4(r, o) > 0 || n && n.every(function(i) {\n return d4(r, i) > 0;\n }) || !1;\n}\nfunction zp(e) {\n var t = e.minDate, o = e.includeDates;\n if (o && t) {\n var n = o.filter(function(r) {\n return l4(r, t) >= 0;\n });\n return E8(n);\n }\n return o ? E8(o) : t;\n}\nfunction hp(e) {\n var t = e.maxDate, o = e.includeDates;\n if (o && t) {\n var n = o.filter(function(r) {\n return l4(r, t) <= 0;\n });\n return S8(n);\n }\n return o ? S8(o) : t;\n}\nfunction h7() {\n for (var e = arguments.length > 0 && arguments[0] !== void 0 ? arguments[0] : [], t = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : "react-datepicker__day--highlighted", o = /* @__PURE__ */ new Map(), n = 0, r = e.length; n < r; n++) {\n var i = e[n];\n if (F4(i)) {\n var a = e2(i, "MM.dd.yyyy"), s = o.get(a) || [];\n s.includes(t) || (s.push(t), o.set(a, s));\n } else if (Ja(i) === "object") {\n var l = Object.keys(i), p = l[0], d = i[l[0]];\n if (typeof p == "string" && d.constructor === Array)\n for (var b = 0, M = d.length; b < M; b++) {\n var u = e2(d[b], "MM.dd.yyyy"), A = o.get(u) || [];\n A.includes(p) || (A.push(p), o.set(u, A));\n }\n }\n }\n return o;\n}\nfunction cW() {\n var e = arguments.length > 0 && arguments[0] !== void 0 ? arguments[0] : [], t = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : "react-datepicker__day--holidays", o = /* @__PURE__ */ new Map();\n return e.forEach(function(n) {\n var r = n.date, i = n.holidayName;\n if (F4(r)) {\n var a = e2(r, "MM.dd.yyyy"), s = o.get(a) || {};\n if (!("className" in s) || s.className !== t || (l = s.holidayNames, p = [i], l.length !== p.length || !l.every(function(b, M) {\n return b === p[M];\n }))) {\n var l, p;\n s.className = t;\n var d = s.holidayNames;\n s.holidayNames = d ? [].concat(Ar(d), [i]) : [i], o.set(a, s);\n }\n }\n }), o;\n}\nfunction lW(e, t, o, n, r) {\n for (var i = r.length, a = [], s = 0; s < i; s++) {\n var l = Ua(Qq(e, Pe(r[s])), Fe(r[s])), p = Ua(e, (o + 1) * n);\n Dt(l, t) && vt(l, p) && a.push(r[s]);\n }\n return a;\n}\nfunction O7(e) {\n return e < 10 ? "0".concat(e) : "".concat(e);\n}\nfunction E3(e) {\n var t = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : Ko, o = Math.ceil(L0(e) / t) * t;\n return { startPeriod: o - (t - 1), endPeriod: o };\n}\nfunction f7(e) {\n var t = e.getSeconds(), o = e.getMilliseconds();\n return j1(e.getTime() - 1e3 * t - o);\n}\nfunction pW(e, t, o, n) {\n for (var r = [], i = 0; i < 2 * t + 1; i++) {\n var a = e + t - i, s = !0;\n o && (s = L0(o) <= a), n && s && (s = L0(n) >= a), s && r.push(a);\n }\n return r;\n}\nvar dW = X4(function(e) {\n O2(o, (react__WEBPACK_IMPORTED_MODULE_0___default().Component));\n var t = f2(o);\n function o(n) {\n var r;\n z2(this, o), z1(f1(r = t.call(this, n)), "renderOptions", function() {\n var l = r.props.year, p = r.state.yearsList.map(function(M) {\n return react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", { className: l === M ? "react-datepicker__year-option react-datepicker__year-option--selected_year" : "react-datepicker__year-option", key: M, onClick: r.onChange.bind(f1(r), M), "aria-selected": l === M ? "true" : void 0 }, l === M ? react__WEBPACK_IMPORTED_MODULE_0___default().createElement("span", { className: "react-datepicker__year-option--selected" }, "✓") : "", M);\n }), d = r.props.minDate ? L0(r.props.minDate) : null, b = r.props.maxDate ? L0(r.props.maxDate) : null;\n return b && r.state.yearsList.find(function(M) {\n return M === b;\n }) || p.unshift(react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", { className: "react-datepicker__year-option", key: "upcoming", onClick: r.incrementYears }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement("a", { className: "react-datepicker__navigation react-datepicker__navigation--years react-datepicker__navigation--years-upcoming" }))), d && r.state.yearsList.find(function(M) {\n return M === d;\n }) || p.push(react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", { className: "react-datepicker__year-option", key: "previous", onClick: r.decrementYears }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement("a", { className: "react-datepicker__navigation react-datepicker__navigation--years react-datepicker__navigation--years-previous" }))), p;\n }), z1(f1(r), "onChange", function(l) {\n r.props.onChange(l);\n }), z1(f1(r), "handleClickOutside", function() {\n r.props.onCancel();\n }), z1(f1(r), "shiftYears", function(l) {\n var p = r.state.yearsList.map(function(d) {\n return d + l;\n });\n r.setState({ yearsList: p });\n }), z1(f1(r), "incrementYears", function() {\n return r.shiftYears(1);\n }), z1(f1(r), "decrementYears", function() {\n return r.shiftYears(-1);\n });\n var i = n.yearDropdownItemNumber, a = n.scrollableYearDropdown, s = i || (a ? 10 : 5);\n return r.state = { yearsList: pW(r.props.year, s, r.props.minDate, r.props.maxDate) }, r.dropdownRef = (0,react__WEBPACK_IMPORTED_MODULE_0__.createRef)(), r;\n }\n return h2(o, [{ key: "componentDidMount", value: function() {\n var n = this.dropdownRef.current;\n if (n) {\n var r = n.children ? Array.from(n.children) : null, i = r ? r.find(function(a) {\n return a.ariaSelected;\n }) : null;\n n.scrollTop = i ? i.offsetTop + (i.clientHeight - n.clientHeight) / 2 : (n.scrollHeight - n.clientHeight) / 2;\n }\n } }, { key: "render", value: function() {\n var n = m2({ "react-datepicker__year-dropdown": !0, "react-datepicker__year-dropdown--scrollable": this.props.scrollableYearDropdown });\n return react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", { className: n, ref: this.dropdownRef }, this.renderOptions());\n } }]), o;\n}()), bW = function(e) {\n O2(o, (react__WEBPACK_IMPORTED_MODULE_0___default().Component));\n var t = f2(o);\n function o() {\n var n;\n z2(this, o);\n for (var r = arguments.length, i = new Array(r), a = 0; a < r; a++)\n i[a] = arguments[a];\n return z1(f1(n = t.call.apply(t, [this].concat(i))), "state", { dropdownVisible: !1 }), z1(f1(n), "renderSelectOptions", function() {\n for (var s = n.props.minDate ? L0(n.props.minDate) : 1900, l = n.props.maxDate ? L0(n.props.maxDate) : 2100, p = [], d = s; d <= l; d++)\n p.push(react__WEBPACK_IMPORTED_MODULE_0___default().createElement("option", { key: d, value: d }, d));\n return p;\n }), z1(f1(n), "onSelectChange", function(s) {\n n.onChange(s.target.value);\n }), z1(f1(n), "renderSelectMode", function() {\n return react__WEBPACK_IMPORTED_MODULE_0___default().createElement("select", { value: n.props.year, className: "react-datepicker__year-select", onChange: n.onSelectChange }, n.renderSelectOptions());\n }), z1(f1(n), "renderReadView", function(s) {\n return react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", { key: "read", style: { visibility: s ? "visible" : "hidden" }, className: "react-datepicker__year-read-view", onClick: function(l) {\n return n.toggleDropdown(l);\n } }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement("span", { className: "react-datepicker__year-read-view--down-arrow" }), react__WEBPACK_IMPORTED_MODULE_0___default().createElement("span", { className: "react-datepicker__year-read-view--selected-year" }, n.props.year));\n }), z1(f1(n), "renderDropdown", function() {\n return react__WEBPACK_IMPORTED_MODULE_0___default().createElement(dW, { key: "dropdown", year: n.props.year, onChange: n.onChange, onCancel: n.toggleDropdown, minDate: n.props.minDate, maxDate: n.props.maxDate, scrollableYearDropdown: n.props.scrollableYearDropdown, yearDropdownItemNumber: n.props.yearDropdownItemNumber });\n }), z1(f1(n), "renderScrollMode", function() {\n var s = n.state.dropdownVisible, l = [n.renderReadView(!s)];\n return s && l.unshift(n.renderDropdown()), l;\n }), z1(f1(n), "onChange", function(s) {\n n.toggleDropdown(), s !== n.props.year && n.props.onChange(s);\n }), z1(f1(n), "toggleDropdown", function(s) {\n n.setState({ dropdownVisible: !n.state.dropdownVisible }, function() {\n n.props.adjustDateOnChange && n.handleYearChange(n.props.date, s);\n });\n }), z1(f1(n), "handleYearChange", function(s, l) {\n n.onSelect(s, l), n.setOpen();\n }), z1(f1(n), "onSelect", function(s, l) {\n n.props.onSelect && n.props.onSelect(s, l);\n }), z1(f1(n), "setOpen", function() {\n n.props.setOpen && n.props.setOpen(!0);\n }), n;\n }\n return h2(o, [{ key: "render", value: function() {\n var n;\n switch (this.props.dropdownMode) {\n case "scroll":\n n = this.renderScrollMode();\n break;\n case "select":\n n = this.renderSelectMode();\n }\n return react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", { className: "react-datepicker__year-dropdown-container react-datepicker__year-dropdown-container--".concat(this.props.dropdownMode) }, n);\n } }]), o;\n}(), MW = X4(function(e) {\n O2(o, (react__WEBPACK_IMPORTED_MODULE_0___default().Component));\n var t = f2(o);\n function o() {\n var n;\n z2(this, o);\n for (var r = arguments.length, i = new Array(r), a = 0; a < r; a++)\n i[a] = arguments[a];\n return z1(f1(n = t.call.apply(t, [this].concat(i))), "isSelectedMonth", function(s) {\n return n.props.month === s;\n }), z1(f1(n), "renderOptions", function() {\n return n.props.monthNames.map(function(s, l) {\n return react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", { className: n.isSelectedMonth(l) ? "react-datepicker__month-option react-datepicker__month-option--selected_month" : "react-datepicker__month-option", key: s, onClick: n.onChange.bind(f1(n), l), "aria-selected": n.isSelectedMonth(l) ? "true" : void 0 }, n.isSelectedMonth(l) ? react__WEBPACK_IMPORTED_MODULE_0___default().createElement("span", { className: "react-datepicker__month-option--selected" }, "✓") : "", s);\n });\n }), z1(f1(n), "onChange", function(s) {\n return n.props.onChange(s);\n }), z1(f1(n), "handleClickOutside", function() {\n return n.props.onCancel();\n }), n;\n }\n return h2(o, [{ key: "render", value: function() {\n return react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", { className: "react-datepicker__month-dropdown" }, this.renderOptions());\n } }]), o;\n}()), AW = function(e) {\n O2(o, (react__WEBPACK_IMPORTED_MODULE_0___default().Component));\n var t = f2(o);\n function o() {\n var n;\n z2(this, o);\n for (var r = arguments.length, i = new Array(r), a = 0; a < r; a++)\n i[a] = arguments[a];\n return z1(f1(n = t.call.apply(t, [this].concat(i))), "state", { dropdownVisible: !1 }), z1(f1(n), "renderSelectOptions", function(s) {\n return s.map(function(l, p) {\n return react__WEBPACK_IMPORTED_MODULE_0___default().createElement("option", { key: p, value: p }, l);\n });\n }), z1(f1(n), "renderSelectMode", function(s) {\n return react__WEBPACK_IMPORTED_MODULE_0___default().createElement("select", { value: n.props.month, className: "react-datepicker__month-select", onChange: function(l) {\n return n.onChange(l.target.value);\n } }, n.renderSelectOptions(s));\n }), z1(f1(n), "renderReadView", function(s, l) {\n return react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", { key: "read", style: { visibility: s ? "visible" : "hidden" }, className: "react-datepicker__month-read-view", onClick: n.toggleDropdown }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement("span", { className: "react-datepicker__month-read-view--down-arrow" }), react__WEBPACK_IMPORTED_MODULE_0___default().createElement("span", { className: "react-datepicker__month-read-view--selected-month" }, l[n.props.month]));\n }), z1(f1(n), "renderDropdown", function(s) {\n return react__WEBPACK_IMPORTED_MODULE_0___default().createElement(MW, { key: "dropdown", month: n.props.month, monthNames: s, onChange: n.onChange, onCancel: n.toggleDropdown });\n }), z1(f1(n), "renderScrollMode", function(s) {\n var l = n.state.dropdownVisible, p = [n.renderReadView(!l, s)];\n return l && p.unshift(n.renderDropdown(s)), p;\n }), z1(f1(n), "onChange", function(s) {\n n.toggleDropdown(), s !== n.props.month && n.props.onChange(s);\n }), z1(f1(n), "toggleDropdown", function() {\n return n.setState({ dropdownVisible: !n.state.dropdownVisible });\n }), n;\n }\n return h2(o, [{ key: "render", value: function() {\n var n, r = this, i = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11].map(this.props.useShortMonthInDropdown ? function(a) {\n return Mp(a, r.props.locale);\n } : function(a) {\n return l6(a, r.props.locale);\n });\n switch (this.props.dropdownMode) {\n case "scroll":\n n = this.renderScrollMode(i);\n break;\n case "select":\n n = this.renderSelectMode(i);\n }\n return react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", { className: "react-datepicker__month-dropdown-container react-datepicker__month-dropdown-container--".concat(this.props.dropdownMode) }, n);\n } }]), o;\n}();\nfunction uW(e, t) {\n for (var o = [], n = Bt(e), r = Bt(t); !Dt(n, r); )\n o.push(G0(n)), n = ve(n, 1);\n return o;\n}\nvar zW = X4(function(e) {\n O2(o, (react__WEBPACK_IMPORTED_MODULE_0___default().Component));\n var t = f2(o);\n function o(n) {\n var r;\n return z2(this, o), z1(f1(r = t.call(this, n)), "renderOptions", function() {\n return r.state.monthYearsList.map(function(i) {\n var a = Qa(i), s = qt(r.props.date, i) && fe(r.props.date, i);\n return react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", { className: s ? "react-datepicker__month-year-option--selected_month-year" : "react-datepicker__month-year-option", key: a, onClick: r.onChange.bind(f1(r), a), "aria-selected": s ? "true" : void 0 }, s ? react__WEBPACK_IMPORTED_MODULE_0___default().createElement("span", { className: "react-datepicker__month-year-option--selected" }, "✓") : "", e2(i, r.props.dateFormat, r.props.locale));\n });\n }), z1(f1(r), "onChange", function(i) {\n return r.props.onChange(i);\n }), z1(f1(r), "handleClickOutside", function() {\n r.props.onCancel();\n }), r.state = { monthYearsList: uW(r.props.minDate, r.props.maxDate) }, r;\n }\n return h2(o, [{ key: "render", value: function() {\n var n = m2({ "react-datepicker__month-year-dropdown": !0, "react-datepicker__month-year-dropdown--scrollable": this.props.scrollableMonthYearDropdown });\n return react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", { className: n }, this.renderOptions());\n } }]), o;\n}()), hW = function(e) {\n O2(o, (react__WEBPACK_IMPORTED_MODULE_0___default().Component));\n var t = f2(o);\n function o() {\n var n;\n z2(this, o);\n for (var r = arguments.length, i = new Array(r), a = 0; a < r; a++)\n i[a] = arguments[a];\n return z1(f1(n = t.call.apply(t, [this].concat(i))), "state", { dropdownVisible: !1 }), z1(f1(n), "renderSelectOptions", function() {\n for (var s = Bt(n.props.minDate), l = Bt(n.props.maxDate), p = []; !Dt(s, l); ) {\n var d = Qa(s);\n p.push(react__WEBPACK_IMPORTED_MODULE_0___default().createElement("option", { key: d, value: d }, e2(s, n.props.dateFormat, n.props.locale))), s = ve(s, 1);\n }\n return p;\n }), z1(f1(n), "onSelectChange", function(s) {\n n.onChange(s.target.value);\n }), z1(f1(n), "renderSelectMode", function() {\n return react__WEBPACK_IMPORTED_MODULE_0___default().createElement("select", { value: Qa(Bt(n.props.date)), className: "react-datepicker__month-year-select", onChange: n.onSelectChange }, n.renderSelectOptions());\n }), z1(f1(n), "renderReadView", function(s) {\n var l = e2(n.props.date, n.props.dateFormat, n.props.locale);\n return react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", { key: "read", style: { visibility: s ? "visible" : "hidden" }, className: "react-datepicker__month-year-read-view", onClick: function(p) {\n return n.toggleDropdown(p);\n } }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement("span", { className: "react-datepicker__month-year-read-view--down-arrow" }), react__WEBPACK_IMPORTED_MODULE_0___default().createElement("span", { className: "react-datepicker__month-year-read-view--selected-month-year" }, l));\n }), z1(f1(n), "renderDropdown", function() {\n return react__WEBPACK_IMPORTED_MODULE_0___default().createElement(zW, { key: "dropdown", date: n.props.date, dateFormat: n.props.dateFormat, onChange: n.onChange, onCancel: n.toggleDropdown, minDate: n.props.minDate, maxDate: n.props.maxDate, scrollableMonthYearDropdown: n.props.scrollableMonthYearDropdown, locale: n.props.locale });\n }), z1(f1(n), "renderScrollMode", function() {\n var s = n.state.dropdownVisible, l = [n.renderReadView(!s)];\n return s && l.unshift(n.renderDropdown()), l;\n }), z1(f1(n), "onChange", function(s) {\n n.toggleDropdown();\n var l = G0(parseInt(s));\n qt(n.props.date, l) && fe(n.props.date, l) || n.props.onChange(l);\n }), z1(f1(n), "toggleDropdown", function() {\n return n.setState({ dropdownVisible: !n.state.dropdownVisible });\n }), n;\n }\n return h2(o, [{ key: "render", value: function() {\n var n;\n switch (this.props.dropdownMode) {\n case "scroll":\n n = this.renderScrollMode();\n break;\n case "select":\n n = this.renderSelectMode();\n }\n return react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", { className: "react-datepicker__month-year-dropdown-container react-datepicker__month-year-dropdown-container--".concat(this.props.dropdownMode) }, n);\n } }]), o;\n}(), OW = function(e) {\n O2(o, (react__WEBPACK_IMPORTED_MODULE_0___default().Component));\n var t = f2(o);\n function o() {\n var n;\n z2(this, o);\n for (var r = arguments.length, i = new Array(r), a = 0; a < r; a++)\n i[a] = arguments[a];\n return z1(f1(n = t.call.apply(t, [this].concat(i))), "dayEl", react__WEBPACK_IMPORTED_MODULE_0___default().createRef()), z1(f1(n), "handleClick", function(s) {\n !n.isDisabled() && n.props.onClick && n.props.onClick(s);\n }), z1(f1(n), "handleMouseEnter", function(s) {\n !n.isDisabled() && n.props.onMouseEnter && n.props.onMouseEnter(s);\n }), z1(f1(n), "handleOnKeyDown", function(s) {\n s.key === " " && (s.preventDefault(), s.key = "Enter"), n.props.handleOnKeyDown(s);\n }), z1(f1(n), "isSameDay", function(s) {\n return Q0(n.props.day, s);\n }), z1(f1(n), "isKeyboardSelected", function() {\n return !n.props.disabledKeyboardNavigation && !(n.isSameDay(n.props.selected) || n.isSameWeek(n.props.selected)) && (n.isSameDay(n.props.preSelection) || n.isSameWeek(n.props.preSelection));\n }), z1(f1(n), "isDisabled", function() {\n return U4(n.props.day, n.props);\n }), z1(f1(n), "isExcluded", function() {\n return p6(n.props.day, n.props);\n }), z1(f1(n), "isStartOfWeek", function() {\n return Q0(n.props.day, Xe(n.props.day, n.props.locale, n.props.calendarStartDay));\n }), z1(f1(n), "isSameWeek", function(s) {\n return n.props.showWeekPicker && Q0(s, Xe(n.props.day, n.props.locale, n.props.calendarStartDay));\n }), z1(f1(n), "getHighLightedClass", function() {\n var s = n.props, l = s.day, p = s.highlightDates;\n if (!p)\n return !1;\n var d = e2(l, "MM.dd.yyyy");\n return p.get(d);\n }), z1(f1(n), "getHolidaysClass", function() {\n var s = n.props, l = s.day, p = s.holidays;\n if (!p)\n return !1;\n var d = e2(l, "MM.dd.yyyy");\n return p.has(d) ? [p.get(d).className] : void 0;\n }), z1(f1(n), "isInRange", function() {\n var s = n.props, l = s.day, p = s.startDate, d = s.endDate;\n return !(!p || !d) && Fn(l, p, d);\n }), z1(f1(n), "isInSelectingRange", function() {\n var s, l = n.props, p = l.day, d = l.selectsStart, b = l.selectsEnd, M = l.selectsRange, u = l.selectsDisabledDaysInRange, A = l.startDate, z = l.endDate, f = (s = n.props.selectingDate) !== null && s !== void 0 ? s : n.props.preSelection;\n return !(!(d || b || M) || !f || !u && n.isDisabled()) && (d && z && (vt(f, z) || i3(f, z)) ? Fn(p, f, z) : (b && A && (Dt(f, A) || i3(f, A)) || !(!M || !A || z || !Dt(f, A) && !i3(f, A))) && Fn(p, A, f));\n }), z1(f1(n), "isSelectingRangeStart", function() {\n var s;\n if (!n.isInSelectingRange())\n return !1;\n var l = n.props, p = l.day, d = l.startDate, b = l.selectsStart, M = (s = n.props.selectingDate) !== null && s !== void 0 ? s : n.props.preSelection;\n return Q0(p, b ? M : d);\n }), z1(f1(n), "isSelectingRangeEnd", function() {\n var s;\n if (!n.isInSelectingRange())\n return !1;\n var l = n.props, p = l.day, d = l.endDate, b = l.selectsEnd, M = l.selectsRange, u = (s = n.props.selectingDate) !== null && s !== void 0 ? s : n.props.preSelection;\n return Q0(p, b || M ? u : d);\n }), z1(f1(n), "isRangeStart", function() {\n var s = n.props, l = s.day, p = s.startDate, d = s.endDate;\n return !(!p || !d) && Q0(p, l);\n }), z1(f1(n), "isRangeEnd", function() {\n var s = n.props, l = s.day, p = s.startDate, d = s.endDate;\n return !(!p || !d) && Q0(d, l);\n }), z1(f1(n), "isWeekend", function() {\n var s = zw(n.props.day);\n return s === 0 || s === 6;\n }), z1(f1(n), "isAfterMonth", function() {\n return n.props.month !== void 0 && (n.props.month + 1) % 12 === g2(n.props.day);\n }), z1(f1(n), "isBeforeMonth", function() {\n return n.props.month !== void 0 && (g2(n.props.day) + 1) % 12 === n.props.month;\n }), z1(f1(n), "isCurrentDay", function() {\n return n.isSameDay(G0());\n }), z1(f1(n), "isSelected", function() {\n return n.isSameDay(n.props.selected) || n.isSameWeek(n.props.selected);\n }), z1(f1(n), "getClassNames", function(s) {\n var l, p = n.props.dayClassName ? n.props.dayClassName(s) : void 0;\n return m2("react-datepicker__day", p, "react-datepicker__day--" + e2(n.props.day, "ddd", l), { "react-datepicker__day--disabled": n.isDisabled(), "react-datepicker__day--excluded": n.isExcluded(), "react-datepicker__day--selected": n.isSelected(), "react-datepicker__day--keyboard-selected": n.isKeyboardSelected(), "react-datepicker__day--range-start": n.isRangeStart(), "react-datepicker__day--range-end": n.isRangeEnd(), "react-datepicker__day--in-range": n.isInRange(), "react-datepicker__day--in-selecting-range": n.isInSelectingRange(), "react-datepicker__day--selecting-range-start": n.isSelectingRangeStart(), "react-datepicker__day--selecting-range-end": n.isSelectingRangeEnd(), "react-datepicker__day--today": n.isCurrentDay(), "react-datepicker__day--weekend": n.isWeekend(), "react-datepicker__day--outside-month": n.isAfterMonth() || n.isBeforeMonth() }, n.getHighLightedClass("react-datepicker__day--highlighted"), n.getHolidaysClass());\n }), z1(f1(n), "getAriaLabel", function() {\n var s = n.props, l = s.day, p = s.ariaLabelPrefixWhenEnabled, d = p === void 0 ? "Choose" : p, b = s.ariaLabelPrefixWhenDisabled, M = b === void 0 ? "Not available" : b, u = n.isDisabled() || n.isExcluded() ? M : d;\n return "".concat(u, " ").concat(e2(l, "PPPP", n.props.locale));\n }), z1(f1(n), "getTitle", function() {\n var s = n.props, l = s.day, p = s.holidays, d = p === void 0 ? /* @__PURE__ */ new Map() : p, b = e2(l, "MM.dd.yyyy");\n return d.has(b) && d.get(b).holidayNames.length > 0 ? d.get(b).holidayNames.join(", ") : "";\n }), z1(f1(n), "getTabIndex", function(s, l) {\n var p = s || n.props.selected, d = l || n.props.preSelection;\n return (!n.props.showWeekPicker || !n.props.showWeekNumber && n.isStartOfWeek()) && (n.isKeyboardSelected() || n.isSameDay(p) && Q0(d, p)) ? 0 : -1;\n }), z1(f1(n), "handleFocusDay", function() {\n var s, l = arguments.length > 0 && arguments[0] !== void 0 ? arguments[0] : {}, p = !1;\n n.getTabIndex() === 0 && !l.isInputFocused && n.isSameDay(n.props.preSelection) && (document.activeElement && document.activeElement !== document.body || (p = !0), n.props.inline && !n.props.shouldFocusDayInline && (p = !1), n.props.containerRef && n.props.containerRef.current && n.props.containerRef.current.contains(document.activeElement) && document.activeElement.classList.contains("react-datepicker__day") && (p = !0), n.props.monthShowsDuplicateDaysEnd && n.isAfterMonth() && (p = !1), n.props.monthShowsDuplicateDaysStart && n.isBeforeMonth() && (p = !1)), p && ((s = n.dayEl.current) === null || s === void 0 || s.focus({ preventScroll: !0 }));\n }), z1(f1(n), "renderDayContents", function() {\n return n.props.monthShowsDuplicateDaysEnd && n.isAfterMonth() || n.props.monthShowsDuplicateDaysStart && n.isBeforeMonth() ? null : n.props.renderDayContents ? n.props.renderDayContents(H8(n.props.day), n.props.day) : H8(n.props.day);\n }), z1(f1(n), "render", function() {\n return react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", { ref: n.dayEl, className: n.getClassNames(n.props.day), onKeyDown: n.handleOnKeyDown, onClick: n.handleClick, onMouseEnter: n.handleMouseEnter, tabIndex: n.getTabIndex(), "aria-label": n.getAriaLabel(), role: "option", title: n.getTitle(), "aria-disabled": n.isDisabled(), "aria-current": n.isCurrentDay() ? "date" : void 0, "aria-selected": n.isSelected() || n.isInRange() }, n.renderDayContents(), n.getTitle() !== "" && react__WEBPACK_IMPORTED_MODULE_0___default().createElement("span", { className: "holiday-overlay" }, n.getTitle()));\n }), n;\n }\n return h2(o, [{ key: "componentDidMount", value: function() {\n this.handleFocusDay();\n } }, { key: "componentDidUpdate", value: function(n) {\n this.handleFocusDay(n);\n } }]), o;\n}(), fW = function(e) {\n O2(o, (react__WEBPACK_IMPORTED_MODULE_0___default().Component));\n var t = f2(o);\n function o() {\n var n;\n z2(this, o);\n for (var r = arguments.length, i = new Array(r), a = 0; a < r; a++)\n i[a] = arguments[a];\n return z1(f1(n = t.call.apply(t, [this].concat(i))), "weekNumberEl", react__WEBPACK_IMPORTED_MODULE_0___default().createRef()), z1(f1(n), "handleClick", function(s) {\n n.props.onClick && n.props.onClick(s);\n }), z1(f1(n), "handleOnKeyDown", function(s) {\n s.key === " " && (s.preventDefault(), s.key = "Enter"), n.props.handleOnKeyDown(s);\n }), z1(f1(n), "isKeyboardSelected", function() {\n return !n.props.disabledKeyboardNavigation && !Q0(n.props.date, n.props.selected) && Q0(n.props.date, n.props.preSelection);\n }), z1(f1(n), "getTabIndex", function() {\n return n.props.showWeekPicker && n.props.showWeekNumber && (n.isKeyboardSelected() || Q0(n.props.date, n.props.selected) && Q0(n.props.preSelection, n.props.selected)) ? 0 : -1;\n }), z1(f1(n), "handleFocusWeekNumber", function() {\n var s = arguments.length > 0 && arguments[0] !== void 0 ? arguments[0] : {}, l = !1;\n n.getTabIndex() === 0 && !s.isInputFocused && Q0(n.props.date, n.props.preSelection) && (document.activeElement && document.activeElement !== document.body || (l = !0), n.props.inline && !n.props.shouldFocusDayInline && (l = !1), n.props.containerRef && n.props.containerRef.current && n.props.containerRef.current.contains(document.activeElement) && document.activeElement && document.activeElement.classList.contains("react-datepicker__week-number") && (l = !0)), l && n.weekNumberEl.current && n.weekNumberEl.current.focus({ preventScroll: !0 });\n }), n;\n }\n return h2(o, [{ key: "componentDidMount", value: function() {\n this.handleFocusWeekNumber();\n } }, { key: "componentDidUpdate", value: function(n) {\n this.handleFocusWeekNumber(n);\n } }, { key: "render", value: function() {\n var n = this.props, r = n.weekNumber, i = n.ariaLabelPrefix, a = i === void 0 ? "week " : i, s = { "react-datepicker__week-number": !0, "react-datepicker__week-number--clickable": !!n.onClick, "react-datepicker__week-number--selected": Q0(this.props.date, this.props.selected), "react-datepicker__week-number--keyboard-selected": this.isKeyboardSelected() };\n return react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", { ref: this.weekNumberEl, className: m2(s), "aria-label": "".concat(a, " ").concat(this.props.weekNumber), onClick: this.handleClick, onKeyDown: this.handleOnKeyDown, tabIndex: this.getTabIndex() }, r);\n } }], [{ key: "defaultProps", get: function() {\n return { ariaLabelPrefix: "week " };\n } }]), o;\n}(), gW = function(e) {\n O2(o, (react__WEBPACK_IMPORTED_MODULE_0___default().Component));\n var t = f2(o);\n function o() {\n var n;\n z2(this, o);\n for (var r = arguments.length, i = new Array(r), a = 0; a < r; a++)\n i[a] = arguments[a];\n return z1(f1(n = t.call.apply(t, [this].concat(i))), "handleDayClick", function(s, l) {\n n.props.onDayClick && n.props.onDayClick(s, l);\n }), z1(f1(n), "handleDayMouseEnter", function(s) {\n n.props.onDayMouseEnter && n.props.onDayMouseEnter(s);\n }), z1(f1(n), "handleWeekClick", function(s, l, p) {\n if (typeof n.props.onWeekSelect == "function" && n.props.onWeekSelect(s, l, p), n.props.showWeekPicker) {\n var d = Xe(s, n.props.locale, n.props.calendarStartDay);\n n.handleDayClick(d, p);\n }\n n.props.shouldCloseOnSelect && n.props.setOpen(!1);\n }), z1(f1(n), "formatWeekNumber", function(s) {\n return n.props.formatWeekNumber ? n.props.formatWeekNumber(s) : function(l, p) {\n var d = p && St(p) || c3() && St(c3());\n return fw(l, d ? { locale: d } : null);\n }(s);\n }), z1(f1(n), "renderDays", function() {\n var s = Xe(n.props.day, n.props.locale, n.props.calendarStartDay), l = [], p = n.formatWeekNumber(s);\n if (n.props.showWeekNumber) {\n var d = n.props.onWeekSelect || n.props.showWeekPicker ? n.handleWeekClick.bind(f1(n), s, p) : void 0;\n l.push(react__WEBPACK_IMPORTED_MODULE_0___default().createElement(fW, { key: "W", weekNumber: p, date: s, onClick: d, selected: n.props.selected, preSelection: n.props.preSelection, ariaLabelPrefix: n.props.ariaLabelPrefix, showWeekPicker: n.props.showWeekPicker, showWeekNumber: n.props.showWeekNumber, disabledKeyboardNavigation: n.props.disabledKeyboardNavigation, handleOnKeyDown: n.props.handleOnKeyDown, isInputFocused: n.props.isInputFocused, containerRef: n.props.containerRef }));\n }\n return l.concat([0, 1, 2, 3, 4, 5, 6].map(function(b) {\n var M = ao(s, b);\n return react__WEBPACK_IMPORTED_MODULE_0___default().createElement(OW, { ariaLabelPrefixWhenEnabled: n.props.chooseDayAriaLabelPrefix, ariaLabelPrefixWhenDisabled: n.props.disabledDayAriaLabelPrefix, key: M.valueOf(), day: M, month: n.props.month, onClick: n.handleDayClick.bind(f1(n), M), onMouseEnter: n.handleDayMouseEnter.bind(f1(n), M), minDate: n.props.minDate, maxDate: n.props.maxDate, excludeDates: n.props.excludeDates, excludeDateIntervals: n.props.excludeDateIntervals, includeDates: n.props.includeDates, includeDateIntervals: n.props.includeDateIntervals, highlightDates: n.props.highlightDates, holidays: n.props.holidays, selectingDate: n.props.selectingDate, filterDate: n.props.filterDate, preSelection: n.props.preSelection, selected: n.props.selected, selectsStart: n.props.selectsStart, selectsEnd: n.props.selectsEnd, selectsRange: n.props.selectsRange, showWeekPicker: n.props.showWeekPicker, showWeekNumber: n.props.showWeekNumber, selectsDisabledDaysInRange: n.props.selectsDisabledDaysInRange, startDate: n.props.startDate, endDate: n.props.endDate, dayClassName: n.props.dayClassName, renderDayContents: n.props.renderDayContents, disabledKeyboardNavigation: n.props.disabledKeyboardNavigation, handleOnKeyDown: n.props.handleOnKeyDown, isInputFocused: n.props.isInputFocused, containerRef: n.props.containerRef, inline: n.props.inline, shouldFocusDayInline: n.props.shouldFocusDayInline, monthShowsDuplicateDaysEnd: n.props.monthShowsDuplicateDaysEnd, monthShowsDuplicateDaysStart: n.props.monthShowsDuplicateDaysStart, locale: n.props.locale });\n }));\n }), z1(f1(n), "startOfWeek", function() {\n return Xe(n.props.day, n.props.locale, n.props.calendarStartDay);\n }), z1(f1(n), "isKeyboardSelected", function() {\n return !n.props.disabledKeyboardNavigation && !Q0(n.startOfWeek(), n.props.selected) && Q0(n.startOfWeek(), n.props.preSelection);\n }), n;\n }\n return h2(o, [{ key: "render", value: function() {\n var n = { "react-datepicker__week": !0, "react-datepicker__week--selected": Q0(this.startOfWeek(), this.props.selected), "react-datepicker__week--keyboard-selected": this.isKeyboardSelected() };\n return react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", { className: m2(n) }, this.renderDays());\n } }], [{ key: "defaultProps", get: function() {\n return { shouldCloseOnSelect: !0 };\n } }]), o;\n}(), Op = "two_columns", fp = "three_columns", gp = "four_columns", Ii = z1(z1(z1({}, Op, { grid: [[0, 1], [2, 3], [4, 5], [6, 7], [8, 9], [10, 11]], verticalNavigationOffset: 2 }), fp, { grid: [[0, 1, 2], [3, 4, 5], [6, 7, 8], [9, 10, 11]], verticalNavigationOffset: 3 }), gp, { grid: [[0, 1, 2, 3], [4, 5, 6, 7], [8, 9, 10, 11]], verticalNavigationOffset: 4 });\nfunction g7(e, t) {\n return e ? gp : t ? Op : fp;\n}\nvar CW = function(e) {\n O2(o, (react__WEBPACK_IMPORTED_MODULE_0___default().Component));\n var t = f2(o);\n function o() {\n var n;\n z2(this, o);\n for (var r = arguments.length, i = new Array(r), a = 0; a < r; a++)\n i[a] = arguments[a];\n return z1(f1(n = t.call.apply(t, [this].concat(i))), "MONTH_REFS", Ar(Array(12)).map(function() {\n return react__WEBPACK_IMPORTED_MODULE_0___default().createRef();\n })), z1(f1(n), "QUARTER_REFS", Ar(Array(4)).map(function() {\n return react__WEBPACK_IMPORTED_MODULE_0___default().createRef();\n })), z1(f1(n), "isDisabled", function(s) {\n return U4(s, n.props);\n }), z1(f1(n), "isExcluded", function(s) {\n return p6(s, n.props);\n }), z1(f1(n), "handleDayClick", function(s, l) {\n n.props.onDayClick && n.props.onDayClick(s, l, n.props.orderInDisplay);\n }), z1(f1(n), "handleDayMouseEnter", function(s) {\n n.props.onDayMouseEnter && n.props.onDayMouseEnter(s);\n }), z1(f1(n), "handleMouseLeave", function() {\n n.props.onMouseLeave && n.props.onMouseLeave();\n }), z1(f1(n), "isRangeStartMonth", function(s) {\n var l = n.props, p = l.day, d = l.startDate, b = l.endDate;\n return !(!d || !b) && fe(W2(p, s), d);\n }), z1(f1(n), "isRangeStartQuarter", function(s) {\n var l = n.props, p = l.day, d = l.startDate, b = l.endDate;\n return !(!d || !b) && O4(v3(p, s), d);\n }), z1(f1(n), "isRangeEndMonth", function(s) {\n var l = n.props, p = l.day, d = l.startDate, b = l.endDate;\n return !(!d || !b) && fe(W2(p, s), b);\n }), z1(f1(n), "isRangeEndQuarter", function(s) {\n var l = n.props, p = l.day, d = l.startDate, b = l.endDate;\n return !(!d || !b) && O4(v3(p, s), b);\n }), z1(f1(n), "isInSelectingRangeMonth", function(s) {\n var l, p = n.props, d = p.day, b = p.selectsStart, M = p.selectsEnd, u = p.selectsRange, A = p.startDate, z = p.endDate, f = (l = n.props.selectingDate) !== null && l !== void 0 ? l : n.props.preSelection;\n return !(!(b || M || u) || !f) && (b && z ? ki(f, z, s, d) : (M && A || !(!u || !A || z)) && ki(A, f, s, d));\n }), z1(f1(n), "isSelectingMonthRangeStart", function(s) {\n var l;\n if (!n.isInSelectingRangeMonth(s))\n return !1;\n var p = n.props, d = p.day, b = p.startDate, M = p.selectsStart, u = W2(d, s), A = (l = n.props.selectingDate) !== null && l !== void 0 ? l : n.props.preSelection;\n return fe(u, M ? A : b);\n }), z1(f1(n), "isSelectingMonthRangeEnd", function(s) {\n var l;\n if (!n.isInSelectingRangeMonth(s))\n return !1;\n var p = n.props, d = p.day, b = p.endDate, M = p.selectsEnd, u = p.selectsRange, A = W2(d, s), z = (l = n.props.selectingDate) !== null && l !== void 0 ? l : n.props.preSelection;\n return fe(A, M || u ? z : b);\n }), z1(f1(n), "isInSelectingRangeQuarter", function(s) {\n var l, p = n.props, d = p.day, b = p.selectsStart, M = p.selectsEnd, u = p.selectsRange, A = p.startDate, z = p.endDate, f = (l = n.props.selectingDate) !== null && l !== void 0 ? l : n.props.preSelection;\n return !(!(b || M || u) || !f) && (b && z ? Ti(f, z, s, d) : (M && A || !(!u || !A || z)) && Ti(A, f, s, d));\n }), z1(f1(n), "isWeekInMonth", function(s) {\n var l = n.props.day, p = ao(s, 6);\n return fe(s, l) || fe(p, l);\n }), z1(f1(n), "isCurrentMonth", function(s, l) {\n return L0(s) === L0(G0()) && l === g2(G0());\n }), z1(f1(n), "isCurrentQuarter", function(s, l) {\n return L0(s) === L0(G0()) && l === S3(G0());\n }), z1(f1(n), "isSelectedMonth", function(s, l, p) {\n return g2(p) === l && L0(s) === L0(p);\n }), z1(f1(n), "isSelectedQuarter", function(s, l, p) {\n return S3(s) === l && L0(s) === L0(p);\n }), z1(f1(n), "renderWeeks", function() {\n for (var s = [], l = n.props.fixedHeight, p = 0, d = !1, b = Xe(Bt(n.props.day), n.props.locale, n.props.calendarStartDay); s.push(react__WEBPACK_IMPORTED_MODULE_0___default().createElement(gW, { ariaLabelPrefix: n.props.weekAriaLabelPrefix, chooseDayAriaLabelPrefix: n.props.chooseDayAriaLabelPrefix, disabledDayAriaLabelPrefix: n.props.disabledDayAriaLabelPrefix, key: p, day: b, month: g2(n.props.day), onDayClick: n.handleDayClick, onDayMouseEnter: n.handleDayMouseEnter, onWeekSelect: n.props.onWeekSelect, formatWeekNumber: n.props.formatWeekNumber, locale: n.props.locale, minDate: n.props.minDate, maxDate: n.props.maxDate, excludeDates: n.props.excludeDates, excludeDateIntervals: n.props.excludeDateIntervals, includeDates: n.props.includeDates, includeDateIntervals: n.props.includeDateIntervals, inline: n.props.inline, shouldFocusDayInline: n.props.shouldFocusDayInline, highlightDates: n.props.highlightDates, holidays: n.props.holidays, selectingDate: n.props.selectingDate, filterDate: n.props.filterDate, preSelection: n.props.preSelection, selected: n.props.selected, selectsStart: n.props.selectsStart, selectsEnd: n.props.selectsEnd, selectsRange: n.props.selectsRange, selectsDisabledDaysInRange: n.props.selectsDisabledDaysInRange, showWeekNumber: n.props.showWeekNumbers, showWeekPicker: n.props.showWeekPicker, startDate: n.props.startDate, endDate: n.props.endDate, dayClassName: n.props.dayClassName, setOpen: n.props.setOpen, shouldCloseOnSelect: n.props.shouldCloseOnSelect, disabledKeyboardNavigation: n.props.disabledKeyboardNavigation, renderDayContents: n.props.renderDayContents, handleOnKeyDown: n.props.handleOnKeyDown, isInputFocused: n.props.isInputFocused, containerRef: n.props.containerRef, calendarStartDay: n.props.calendarStartDay, monthShowsDuplicateDaysEnd: n.props.monthShowsDuplicateDaysEnd, monthShowsDuplicateDaysStart: n.props.monthShowsDuplicateDaysStart })), !d; ) {\n p++, b = p4(b, 1);\n var M = l && p >= 6, u = !l && !n.isWeekInMonth(b);\n if (M || u) {\n if (!n.props.peekNextMonth)\n break;\n d = !0;\n }\n }\n return s;\n }), z1(f1(n), "onMonthClick", function(s, l) {\n n.handleDayClick(Bt(W2(n.props.day, l)), s);\n }), z1(f1(n), "onMonthMouseEnter", function(s) {\n n.handleDayMouseEnter(Bt(W2(n.props.day, s)));\n }), z1(f1(n), "handleMonthNavigation", function(s, l) {\n n.isDisabled(l) || n.isExcluded(l) || (n.props.setPreSelection(l), n.MONTH_REFS[s].current && n.MONTH_REFS[s].current.focus());\n }), z1(f1(n), "onMonthKeyDown", function(s, l) {\n var p = n.props, d = p.selected, b = p.preSelection, M = p.disabledKeyboardNavigation, u = p.showTwoColumnMonthYearPicker, A = p.showFourColumnMonthYearPicker, z = p.setPreSelection, f = s.key;\n if (f !== "Tab" && s.preventDefault(), !M) {\n var O = g7(A, u), h = Ii[O].verticalNavigationOffset, g = Ii[O].grid;\n switch (f) {\n case "Enter":\n n.onMonthClick(s, l), z(d);\n break;\n case "ArrowRight":\n n.handleMonthNavigation(l === 11 ? 0 : l + 1, ve(b, 1));\n break;\n case "ArrowLeft":\n n.handleMonthNavigation(l === 0 ? 11 : l - 1, _3(b, 1));\n break;\n case "ArrowUp":\n n.handleMonthNavigation(g[0].includes(l) ? l + 12 - h : l - h, _3(b, h));\n break;\n case "ArrowDown":\n n.handleMonthNavigation(g[g.length - 1].includes(l) ? l - 12 + h : l + h, ve(b, h));\n }\n }\n }), z1(f1(n), "onQuarterClick", function(s, l) {\n n.handleDayClick(c7(v3(n.props.day, l)), s);\n }), z1(f1(n), "onQuarterMouseEnter", function(s) {\n n.handleDayMouseEnter(c7(v3(n.props.day, s)));\n }), z1(f1(n), "handleQuarterNavigation", function(s, l) {\n n.isDisabled(l) || n.isExcluded(l) || (n.props.setPreSelection(l), n.QUARTER_REFS[s - 1].current && n.QUARTER_REFS[s - 1].current.focus());\n }), z1(f1(n), "onQuarterKeyDown", function(s, l) {\n var p = s.key;\n if (!n.props.disabledKeyboardNavigation)\n switch (p) {\n case "Enter":\n n.onQuarterClick(s, l), n.props.setPreSelection(n.props.selected);\n break;\n case "ArrowRight":\n n.handleQuarterNavigation(l === 4 ? 1 : l + 1, Yl(n.props.preSelection, 1));\n break;\n case "ArrowLeft":\n n.handleQuarterNavigation(l === 1 ? 4 : l - 1, Hx(n.props.preSelection, 1));\n }\n }), z1(f1(n), "getMonthClassNames", function(s) {\n var l = n.props, p = l.day, d = l.startDate, b = l.endDate, M = l.selected, u = l.minDate, A = l.maxDate, z = l.preSelection, f = l.monthClassName, O = l.excludeDates, h = l.includeDates, g = f ? f(W2(p, s)) : void 0, v = W2(p, s);\n return m2("react-datepicker__month-text", "react-datepicker__month-".concat(s), g, { "react-datepicker__month-text--disabled": (u || A || O || h) && Ap(v, n.props), "react-datepicker__month-text--selected": n.isSelectedMonth(p, s, M), "react-datepicker__month-text--keyboard-selected": !n.props.disabledKeyboardNavigation && g2(z) === s, "react-datepicker__month-text--in-selecting-range": n.isInSelectingRangeMonth(s), "react-datepicker__month-text--in-range": ki(d, b, s, p), "react-datepicker__month-text--range-start": n.isRangeStartMonth(s), "react-datepicker__month-text--range-end": n.isRangeEndMonth(s), "react-datepicker__month-text--selecting-range-start": n.isSelectingMonthRangeStart(s), "react-datepicker__month-text--selecting-range-end": n.isSelectingMonthRangeEnd(s), "react-datepicker__month-text--today": n.isCurrentMonth(p, s) });\n }), z1(f1(n), "getTabIndex", function(s) {\n var l = g2(n.props.preSelection);\n return n.props.disabledKeyboardNavigation || s !== l ? "-1" : "0";\n }), z1(f1(n), "getQuarterTabIndex", function(s) {\n var l = S3(n.props.preSelection);\n return n.props.disabledKeyboardNavigation || s !== l ? "-1" : "0";\n }), z1(f1(n), "getAriaLabel", function(s) {\n var l = n.props, p = l.chooseDayAriaLabelPrefix, d = p === void 0 ? "Choose" : p, b = l.disabledDayAriaLabelPrefix, M = b === void 0 ? "Not available" : b, u = l.day, A = W2(u, s), z = n.isDisabled(A) || n.isExcluded(A) ? M : d;\n return "".concat(z, " ").concat(e2(A, "MMMM yyyy"));\n }), z1(f1(n), "getQuarterClassNames", function(s) {\n var l = n.props, p = l.day, d = l.startDate, b = l.endDate, M = l.selected, u = l.minDate, A = l.maxDate, z = l.preSelection, f = l.disabledKeyboardNavigation;\n return m2("react-datepicker__quarter-text", "react-datepicker__quarter-".concat(s), { "react-datepicker__quarter-text--disabled": (u || A) && sW(v3(p, s), n.props), "react-datepicker__quarter-text--selected": n.isSelectedQuarter(p, s, M), "react-datepicker__quarter-text--keyboard-selected": !f && S3(z) === s, "react-datepicker__quarter-text--in-selecting-range": n.isInSelectingRangeQuarter(s), "react-datepicker__quarter-text--in-range": Ti(d, b, s, p), "react-datepicker__quarter-text--range-start": n.isRangeStartQuarter(s), "react-datepicker__quarter-text--range-end": n.isRangeEndQuarter(s) });\n }), z1(f1(n), "getMonthContent", function(s) {\n var l = n.props, p = l.showFullMonthYearPicker, d = l.renderMonthContent, b = l.locale, M = l.day, u = Mp(s, b), A = l6(s, b);\n return d ? d(s, u, A, M) : p ? A : u;\n }), z1(f1(n), "getQuarterContent", function(s) {\n var l = n.props, p = l.renderQuarterContent, d = function(b, M) {\n return e2(v3(G0(), b), "QQQ", M);\n }(s, l.locale);\n return p ? p(s, d) : d;\n }), z1(f1(n), "renderMonths", function() {\n var s = n.props, l = s.showTwoColumnMonthYearPicker, p = s.showFourColumnMonthYearPicker, d = s.day, b = s.selected;\n return Ii[g7(p, l)].grid.map(function(M, u) {\n return react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", { className: "react-datepicker__month-wrapper", key: u }, M.map(function(A, z) {\n return react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", { ref: n.MONTH_REFS[A], key: z, onClick: function(f) {\n n.onMonthClick(f, A);\n }, onKeyDown: function(f) {\n n.onMonthKeyDown(f, A);\n }, onMouseEnter: function() {\n return n.onMonthMouseEnter(A);\n }, tabIndex: n.getTabIndex(A), className: n.getMonthClassNames(A), role: "option", "aria-label": n.getAriaLabel(A), "aria-current": n.isCurrentMonth(d, A) ? "date" : void 0, "aria-selected": n.isSelectedMonth(d, A, b) }, n.getMonthContent(A));\n }));\n });\n }), z1(f1(n), "renderQuarters", function() {\n var s = n.props, l = s.day, p = s.selected;\n return react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", { className: "react-datepicker__quarter-wrapper" }, [1, 2, 3, 4].map(function(d, b) {\n return react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", { key: b, ref: n.QUARTER_REFS[b], role: "option", onClick: function(M) {\n n.onQuarterClick(M, d);\n }, onKeyDown: function(M) {\n n.onQuarterKeyDown(M, d);\n }, onMouseEnter: function() {\n return n.onQuarterMouseEnter(d);\n }, className: n.getQuarterClassNames(d), "aria-selected": n.isSelectedQuarter(l, d, p), tabIndex: n.getQuarterTabIndex(d), "aria-current": n.isCurrentQuarter(l, d) ? "date" : void 0 }, n.getQuarterContent(d));\n }));\n }), z1(f1(n), "getClassNames", function() {\n var s = n.props, l = s.selectingDate, p = s.selectsStart, d = s.selectsEnd, b = s.showMonthYearPicker, M = s.showQuarterYearPicker, u = s.showWeekPicker;\n return m2("react-datepicker__month", { "react-datepicker__month--selecting-range": l && (p || d) }, { "react-datepicker__monthPicker": b }, { "react-datepicker__quarterPicker": M }, { "react-datepicker__weekPicker": u });\n }), n;\n }\n return h2(o, [{ key: "render", value: function() {\n var n = this.props, r = n.showMonthYearPicker, i = n.showQuarterYearPicker, a = n.day, s = n.ariaLabelPrefix, l = s === void 0 ? "month " : s;\n return react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", { className: this.getClassNames(), onMouseLeave: this.handleMouseLeave, "aria-label": "".concat(l, " ").concat(e2(a, "yyyy-MM")), role: "listbox" }, r ? this.renderMonths() : i ? this.renderQuarters() : this.renderWeeks());\n } }]), o;\n}(), Cp = function(e) {\n O2(o, (react__WEBPACK_IMPORTED_MODULE_0___default().Component));\n var t = f2(o);\n function o() {\n var n;\n z2(this, o);\n for (var r = arguments.length, i = new Array(r), a = 0; a < r; a++)\n i[a] = arguments[a];\n return z1(f1(n = t.call.apply(t, [this].concat(i))), "state", { height: null }), z1(f1(n), "scrollToTheSelectedTime", function() {\n requestAnimationFrame(function() {\n n.list && (n.list.scrollTop = n.centerLi && o.calcCenterPosition(n.props.monthRef ? n.props.monthRef.clientHeight - n.header.clientHeight : n.list.clientHeight, n.centerLi));\n });\n }), z1(f1(n), "handleClick", function(s) {\n (n.props.minTime || n.props.maxTime) && b7(s, n.props) || (n.props.excludeTimes || n.props.includeTimes || n.props.filterTime) && d7(s, n.props) || n.props.onChange(s);\n }), z1(f1(n), "isSelectedTime", function(s) {\n return n.props.selected && (l = n.props.selected, p = s, f7(l).getTime() === f7(p).getTime());\n var l, p;\n }), z1(f1(n), "isDisabledTime", function(s) {\n return (n.props.minTime || n.props.maxTime) && b7(s, n.props) || (n.props.excludeTimes || n.props.includeTimes || n.props.filterTime) && d7(s, n.props);\n }), z1(f1(n), "liClasses", function(s) {\n var l = ["react-datepicker__time-list-item", n.props.timeClassName ? n.props.timeClassName(s) : void 0];\n return n.isSelectedTime(s) && l.push("react-datepicker__time-list-item--selected"), n.isDisabledTime(s) && l.push("react-datepicker__time-list-item--disabled"), n.props.injectTimes && (60 * Pe(s) + Fe(s)) % n.props.intervals != 0 && l.push("react-datepicker__time-list-item--injected"), l.join(" ");\n }), z1(f1(n), "handleOnKeyDown", function(s, l) {\n s.key === " " && (s.preventDefault(), s.key = "Enter"), s.key !== "ArrowUp" && s.key !== "ArrowLeft" || !s.target.previousSibling || (s.preventDefault(), s.target.previousSibling.focus()), s.key !== "ArrowDown" && s.key !== "ArrowRight" || !s.target.nextSibling || (s.preventDefault(), s.target.nextSibling.focus()), s.key === "Enter" && n.handleClick(l), n.props.handleOnKeyDown(s);\n }), z1(f1(n), "renderTimes", function() {\n for (var s = [], l = n.props.format ? n.props.format : "p", p = n.props.intervals, d = n.props.selected || n.props.openToDate || G0(), b = Ve(d), M = n.props.injectTimes && n.props.injectTimes.sort(function(g, v) {\n return g - v;\n }), u = 60 * function(g) {\n var v = new Date(g.getFullYear(), g.getMonth(), g.getDate()), L = new Date(g.getFullYear(), g.getMonth(), g.getDate(), 24);\n return Math.round((+L - +v) / 36e5);\n }(d), A = u / p, z = 0; z < A; z++) {\n var f = Ua(b, z * p);\n if (s.push(f), M) {\n var O = lW(b, f, z, p, M);\n s = s.concat(O);\n }\n }\n var h = s.reduce(function(g, v) {\n return v.getTime() <= d.getTime() ? v : g;\n }, s[0]);\n return s.map(function(g, v) {\n return react__WEBPACK_IMPORTED_MODULE_0___default().createElement("li", { key: v, onClick: n.handleClick.bind(f1(n), g), className: n.liClasses(g), ref: function(L) {\n g === h && (n.centerLi = L);\n }, onKeyDown: function(L) {\n n.handleOnKeyDown(L, g);\n }, tabIndex: g === h ? 0 : -1, role: "option", "aria-selected": n.isSelectedTime(g) ? "true" : void 0, "aria-disabled": n.isDisabledTime(g) ? "true" : void 0 }, e2(g, l, n.props.locale));\n });\n }), n;\n }\n return h2(o, [{ key: "componentDidMount", value: function() {\n this.scrollToTheSelectedTime(), this.props.monthRef && this.header && this.setState({ height: this.props.monthRef.clientHeight - this.header.clientHeight });\n } }, { key: "render", value: function() {\n var n = this, r = this.state.height;\n return react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", { className: "react-datepicker__time-container ".concat(this.props.todayButton ? "react-datepicker__time-container--with-today-button" : "") }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", { className: "react-datepicker__header react-datepicker__header--time ".concat(this.props.showTimeSelectOnly ? "react-datepicker__header--time--only" : ""), ref: function(i) {\n n.header = i;\n } }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", { className: "react-datepicker-time__header" }, this.props.timeCaption)), react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", { className: "react-datepicker__time" }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", { className: "react-datepicker__time-box" }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement("ul", { className: "react-datepicker__time-list", ref: function(i) {\n n.list = i;\n }, style: r ? { height: r } : {}, role: "listbox", "aria-label": this.props.timeCaption }, this.renderTimes()))));\n } }], [{ key: "defaultProps", get: function() {\n return { intervals: 30, onTimeChange: function() {\n }, todayButton: null, timeCaption: "Time" };\n } }]), o;\n}();\nz1(Cp, "calcCenterPosition", function(e, t) {\n return t.offsetTop - (e / 2 - t.clientHeight / 2);\n});\nvar mW = function(e) {\n O2(o, (react__WEBPACK_IMPORTED_MODULE_0___default().Component));\n var t = f2(o);\n function o(n) {\n var r;\n return z2(this, o), z1(f1(r = t.call(this, n)), "YEAR_REFS", Ar(Array(r.props.yearItemNumber)).map(function() {\n return react__WEBPACK_IMPORTED_MODULE_0___default().createRef();\n })), z1(f1(r), "isDisabled", function(i) {\n return U4(i, r.props);\n }), z1(f1(r), "isExcluded", function(i) {\n return p6(i, r.props);\n }), z1(f1(r), "selectingDate", function() {\n var i;\n return (i = r.props.selectingDate) !== null && i !== void 0 ? i : r.props.preSelection;\n }), z1(f1(r), "updateFocusOnPaginate", function(i) {\n var a = (function() {\n this.YEAR_REFS[i].current.focus();\n }).bind(f1(r));\n window.requestAnimationFrame(a);\n }), z1(f1(r), "handleYearClick", function(i, a) {\n r.props.onDayClick && r.props.onDayClick(i, a);\n }), z1(f1(r), "handleYearNavigation", function(i, a) {\n var s = r.props, l = s.date, p = s.yearItemNumber, d = E3(l, p).startPeriod;\n r.isDisabled(a) || r.isExcluded(a) || (r.props.setPreSelection(a), i - d == -1 ? r.updateFocusOnPaginate(p - 1) : i - d === p ? r.updateFocusOnPaginate(0) : r.YEAR_REFS[i - d].current.focus());\n }), z1(f1(r), "isSameDay", function(i, a) {\n return Q0(i, a);\n }), z1(f1(r), "isCurrentYear", function(i) {\n return i === L0(G0());\n }), z1(f1(r), "isRangeStart", function(i) {\n return r.props.startDate && r.props.endDate && qt(et(G0(), i), r.props.startDate);\n }), z1(f1(r), "isRangeEnd", function(i) {\n return r.props.startDate && r.props.endDate && qt(et(G0(), i), r.props.endDate);\n }), z1(f1(r), "isInRange", function(i) {\n return Ni(i, r.props.startDate, r.props.endDate);\n }), z1(f1(r), "isInSelectingRange", function(i) {\n var a = r.props, s = a.selectsStart, l = a.selectsEnd, p = a.selectsRange, d = a.startDate, b = a.endDate;\n return !(!(s || l || p) || !r.selectingDate()) && (s && b ? Ni(i, r.selectingDate(), b) : (l && d || !(!p || !d || b)) && Ni(i, d, r.selectingDate()));\n }), z1(f1(r), "isSelectingRangeStart", function(i) {\n if (!r.isInSelectingRange(i))\n return !1;\n var a = r.props, s = a.startDate, l = a.selectsStart, p = et(G0(), i);\n return qt(p, l ? r.selectingDate() : s);\n }), z1(f1(r), "isSelectingRangeEnd", function(i) {\n if (!r.isInSelectingRange(i))\n return !1;\n var a = r.props, s = a.endDate, l = a.selectsEnd, p = a.selectsRange, d = et(G0(), i);\n return qt(d, l || p ? r.selectingDate() : s);\n }), z1(f1(r), "isKeyboardSelected", function(i) {\n var a = Xo(et(r.props.date, i));\n return !r.props.disabledKeyboardNavigation && !r.props.inline && !Q0(a, Xo(r.props.selected)) && Q0(a, Xo(r.props.preSelection));\n }), z1(f1(r), "onYearClick", function(i, a) {\n var s = r.props.date;\n r.handleYearClick(Xo(et(s, a)), i);\n }), z1(f1(r), "onYearKeyDown", function(i, a) {\n var s = i.key;\n if (!r.props.disabledKeyboardNavigation)\n switch (s) {\n case "Enter":\n r.onYearClick(i, a), r.props.setPreSelection(r.props.selected);\n break;\n case "ArrowRight":\n r.handleYearNavigation(a + 1, K3(r.props.preSelection, 1));\n break;\n case "ArrowLeft":\n r.handleYearNavigation(a - 1, Mr(r.props.preSelection, 1));\n }\n }), z1(f1(r), "getYearClassNames", function(i) {\n var a = r.props, s = a.minDate, l = a.maxDate, p = a.selected, d = a.excludeDates, b = a.includeDates, M = a.filterDate;\n return m2("react-datepicker__year-text", { "react-datepicker__year-text--selected": i === L0(p), "react-datepicker__year-text--disabled": (s || l || d || b || M) && up(i, r.props), "react-datepicker__year-text--keyboard-selected": r.isKeyboardSelected(i), "react-datepicker__year-text--range-start": r.isRangeStart(i), "react-datepicker__year-text--range-end": r.isRangeEnd(i), "react-datepicker__year-text--in-range": r.isInRange(i), "react-datepicker__year-text--in-selecting-range": r.isInSelectingRange(i), "react-datepicker__year-text--selecting-range-start": r.isSelectingRangeStart(i), "react-datepicker__year-text--selecting-range-end": r.isSelectingRangeEnd(i), "react-datepicker__year-text--today": r.isCurrentYear(i) });\n }), z1(f1(r), "getYearTabIndex", function(i) {\n return r.props.disabledKeyboardNavigation ? "-1" : i === L0(r.props.preSelection) ? "0" : "-1";\n }), z1(f1(r), "getYearContainerClassNames", function() {\n var i = r.props, a = i.selectingDate, s = i.selectsStart, l = i.selectsEnd, p = i.selectsRange;\n return m2("react-datepicker__year", { "react-datepicker__year--selecting-range": a && (s || l || p) });\n }), z1(f1(r), "getYearContent", function(i) {\n return r.props.renderYearContent ? r.props.renderYearContent(i) : i;\n }), r;\n }\n return h2(o, [{ key: "render", value: function() {\n for (var n = this, r = [], i = this.props, a = i.date, s = i.yearItemNumber, l = i.onYearMouseEnter, p = i.onYearMouseLeave, d = E3(a, s), b = d.startPeriod, M = d.endPeriod, u = function(z) {\n r.push(react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", { ref: n.YEAR_REFS[z - b], onClick: function(f) {\n n.onYearClick(f, z);\n }, onKeyDown: function(f) {\n n.onYearKeyDown(f, z);\n }, tabIndex: n.getYearTabIndex(z), className: n.getYearClassNames(z), onMouseEnter: function(f) {\n return l(f, z);\n }, onMouseLeave: function(f) {\n return p(f, z);\n }, key: z, "aria-current": n.isCurrentYear(z) ? "date" : void 0 }, n.getYearContent(z)));\n }, A = b; A <= M; A++)\n u(A);\n return react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", { className: this.getYearContainerClassNames() }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", { className: "react-datepicker__year-wrapper", onMouseLeave: this.props.clearSelectingDate }, r));\n } }]), o;\n}(), LW = function(e) {\n O2(o, (react__WEBPACK_IMPORTED_MODULE_0___default().Component));\n var t = f2(o);\n function o(n) {\n var r;\n return z2(this, o), z1(f1(r = t.call(this, n)), "onTimeChange", function(i) {\n r.setState({ time: i });\n var a = r.props.date, s = a instanceof Date && !isNaN(a) ? a : /* @__PURE__ */ new Date();\n s.setHours(i.split(":")[0]), s.setMinutes(i.split(":")[1]), r.props.onChange(s);\n }), z1(f1(r), "renderTimeInput", function() {\n var i = r.state.time, a = r.props, s = a.date, l = a.timeString, p = a.customTimeInput;\n return p ? react__WEBPACK_IMPORTED_MODULE_0___default().cloneElement(p, { date: s, value: i, onChange: r.onTimeChange }) : react__WEBPACK_IMPORTED_MODULE_0___default().createElement("input", { type: "time", className: "react-datepicker-time__input", placeholder: "Time", name: "time-input", required: !0, value: i, onChange: function(d) {\n r.onTimeChange(d.target.value || l);\n } });\n }), r.state = { time: r.props.timeString }, r;\n }\n return h2(o, [{ key: "render", value: function() {\n return react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", { className: "react-datepicker__input-time-container" }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", { className: "react-datepicker-time__caption" }, this.props.timeInputLabel), react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", { className: "react-datepicker-time__input-container" }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", { className: "react-datepicker-time__input" }, this.renderTimeInput())));\n } }], [{ key: "getDerivedStateFromProps", value: function(n, r) {\n return n.timeString !== r.time ? { time: n.timeString } : null;\n } }]), o;\n}();\nfunction vW(e) {\n var t = e.className, o = e.children, n = e.showPopperArrow, r = e.arrowProps, i = r === void 0 ? {} : r;\n return react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", { className: t }, n && react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", $3({ className: "react-datepicker__triangle" }, i)), o);\n}\nvar qW = ["react-datepicker__year-select", "react-datepicker__month-select", "react-datepicker__month-year-select"], yW = function(e) {\n O2(o, (react__WEBPACK_IMPORTED_MODULE_0___default().Component));\n var t = f2(o);\n function o(n) {\n var r;\n return z2(this, o), z1(f1(r = t.call(this, n)), "handleClickOutside", function(i) {\n r.props.onClickOutside(i);\n }), z1(f1(r), "setClickOutsideRef", function() {\n return r.containerRef.current;\n }), z1(f1(r), "handleDropdownFocus", function(i) {\n (function() {\n var a = ((arguments.length > 0 && arguments[0] !== void 0 ? arguments[0] : {}).className || "").split(/\\s+/);\n return qW.some(function(s) {\n return a.indexOf(s) >= 0;\n });\n })(i.target) && r.props.onDropdownFocus();\n }), z1(f1(r), "getDateInView", function() {\n var i = r.props, a = i.preSelection, s = i.selected, l = i.openToDate, p = zp(r.props), d = hp(r.props), b = G0(), M = l || s || a;\n return M || (p && vt(b, p) ? p : d && Dt(b, d) ? d : b);\n }), z1(f1(r), "increaseMonth", function() {\n r.setState(function(i) {\n var a = i.date;\n return { date: ve(a, 1) };\n }, function() {\n return r.handleMonthChange(r.state.date);\n });\n }), z1(f1(r), "decreaseMonth", function() {\n r.setState(function(i) {\n var a = i.date;\n return { date: _3(a, 1) };\n }, function() {\n return r.handleMonthChange(r.state.date);\n });\n }), z1(f1(r), "handleDayClick", function(i, a, s) {\n r.props.onSelect(i, a, s), r.props.setPreSelection && r.props.setPreSelection(i);\n }), z1(f1(r), "handleDayMouseEnter", function(i) {\n r.setState({ selectingDate: i }), r.props.onDayMouseEnter && r.props.onDayMouseEnter(i);\n }), z1(f1(r), "handleMonthMouseLeave", function() {\n r.setState({ selectingDate: null }), r.props.onMonthMouseLeave && r.props.onMonthMouseLeave();\n }), z1(f1(r), "handleYearMouseEnter", function(i, a) {\n r.setState({ selectingDate: et(G0(), a) }), r.props.onYearMouseEnter && r.props.onYearMouseEnter(i, a);\n }), z1(f1(r), "handleYearMouseLeave", function(i, a) {\n r.props.onYearMouseLeave && r.props.onYearMouseLeave(i, a);\n }), z1(f1(r), "handleYearChange", function(i) {\n r.props.onYearChange && (r.props.onYearChange(i), r.setState({ isRenderAriaLiveMessage: !0 })), r.props.adjustDateOnChange && (r.props.onSelect && r.props.onSelect(i), r.props.setOpen && r.props.setOpen(!0)), r.props.setPreSelection && r.props.setPreSelection(i);\n }), z1(f1(r), "handleMonthChange", function(i) {\n r.handleCustomMonthChange(i), r.props.adjustDateOnChange && (r.props.onSelect && r.props.onSelect(i), r.props.setOpen && r.props.setOpen(!0)), r.props.setPreSelection && r.props.setPreSelection(i);\n }), z1(f1(r), "handleCustomMonthChange", function(i) {\n r.props.onMonthChange && (r.props.onMonthChange(i), r.setState({ isRenderAriaLiveMessage: !0 }));\n }), z1(f1(r), "handleMonthYearChange", function(i) {\n r.handleYearChange(i), r.handleMonthChange(i);\n }), z1(f1(r), "changeYear", function(i) {\n r.setState(function(a) {\n var s = a.date;\n return { date: et(s, i) };\n }, function() {\n return r.handleYearChange(r.state.date);\n });\n }), z1(f1(r), "changeMonth", function(i) {\n r.setState(function(a) {\n var s = a.date;\n return { date: W2(s, i) };\n }, function() {\n return r.handleMonthChange(r.state.date);\n });\n }), z1(f1(r), "changeMonthYear", function(i) {\n r.setState(function(a) {\n var s = a.date;\n return { date: et(W2(s, g2(i)), L0(i)) };\n }, function() {\n return r.handleMonthYearChange(r.state.date);\n });\n }), z1(f1(r), "header", function() {\n var i = Xe(arguments.length > 0 && arguments[0] !== void 0 ? arguments[0] : r.state.date, r.props.locale, r.props.calendarStartDay), a = [];\n return r.props.showWeekNumbers && a.push(react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", { key: "W", className: "react-datepicker__day-name" }, r.props.weekLabel || "#")), a.concat([0, 1, 2, 3, 4, 5, 6].map(function(s) {\n var l = ao(i, s), p = r.formatWeekday(l, r.props.locale), d = r.props.weekDayClassName ? r.props.weekDayClassName(l) : void 0;\n return react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", { key: s, className: m2("react-datepicker__day-name", d) }, p);\n }));\n }), z1(f1(r), "formatWeekday", function(i, a) {\n return r.props.formatWeekDay ? function(s, l, p) {\n return l(e2(s, "EEEE", p));\n }(i, r.props.formatWeekDay, a) : r.props.useWeekdaysShort ? function(s, l) {\n return e2(s, "EEE", l);\n }(i, a) : function(s, l) {\n return e2(s, "EEEEEE", l);\n }(i, a);\n }), z1(f1(r), "decreaseYear", function() {\n r.setState(function(i) {\n var a = i.date;\n return { date: Mr(a, r.props.showYearPicker ? r.props.yearItemNumber : 1) };\n }, function() {\n return r.handleYearChange(r.state.date);\n });\n }), z1(f1(r), "clearSelectingDate", function() {\n r.setState({ selectingDate: null });\n }), z1(f1(r), "renderPreviousButton", function() {\n if (!r.props.renderCustomHeader) {\n var i;\n switch (!0) {\n case r.props.showMonthYearPicker:\n i = u7(r.state.date, r.props);\n break;\n case r.props.showYearPicker:\n i = function(O) {\n var h = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : {}, g = h.minDate, v = h.yearItemNumber, L = v === void 0 ? Ko : v, y = E3(Xo(Mr(O, L)), L).endPeriod, B = g && L0(g);\n return B && B > y || !1;\n }(r.state.date, r.props);\n break;\n default:\n i = M7(r.state.date, r.props);\n }\n if ((r.props.forceShowMonthNavigation || r.props.showDisabledMonthNavigation || !i) && !r.props.showTimeSelectOnly) {\n var a = ["react-datepicker__navigation", "react-datepicker__navigation--previous"], s = r.decreaseMonth;\n (r.props.showMonthYearPicker || r.props.showQuarterYearPicker || r.props.showYearPicker) && (s = r.decreaseYear), i && r.props.showDisabledMonthNavigation && (a.push("react-datepicker__navigation--previous--disabled"), s = null);\n var l = r.props.showMonthYearPicker || r.props.showQuarterYearPicker || r.props.showYearPicker, p = r.props, d = p.previousMonthButtonLabel, b = p.previousYearButtonLabel, M = r.props, u = M.previousMonthAriaLabel, A = u === void 0 ? typeof d == "string" ? d : "Previous Month" : u, z = M.previousYearAriaLabel, f = z === void 0 ? typeof b == "string" ? b : "Previous Year" : z;\n return react__WEBPACK_IMPORTED_MODULE_0___default().createElement("button", { type: "button", className: a.join(" "), onClick: s, onKeyDown: r.props.handleOnKeyDown, "aria-label": l ? f : A }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement("span", { className: ["react-datepicker__navigation-icon", "react-datepicker__navigation-icon--previous"].join(" ") }, l ? r.props.previousYearButtonLabel : r.props.previousMonthButtonLabel));\n }\n }\n }), z1(f1(r), "increaseYear", function() {\n r.setState(function(i) {\n var a = i.date;\n return { date: K3(a, r.props.showYearPicker ? r.props.yearItemNumber : 1) };\n }, function() {\n return r.handleYearChange(r.state.date);\n });\n }), z1(f1(r), "renderNextButton", function() {\n if (!r.props.renderCustomHeader) {\n var i;\n switch (!0) {\n case r.props.showMonthYearPicker:\n i = z7(r.state.date, r.props);\n break;\n case r.props.showYearPicker:\n i = function(O) {\n var h = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : {}, g = h.maxDate, v = h.yearItemNumber, L = v === void 0 ? Ko : v, y = E3(K3(O, L), L).startPeriod, B = g && L0(g);\n return B && B < y || !1;\n }(r.state.date, r.props);\n break;\n default:\n i = A7(r.state.date, r.props);\n }\n if ((r.props.forceShowMonthNavigation || r.props.showDisabledMonthNavigation || !i) && !r.props.showTimeSelectOnly) {\n var a = ["react-datepicker__navigation", "react-datepicker__navigation--next"];\n r.props.showTimeSelect && a.push("react-datepicker__navigation--next--with-time"), r.props.todayButton && a.push("react-datepicker__navigation--next--with-today-button");\n var s = r.increaseMonth;\n (r.props.showMonthYearPicker || r.props.showQuarterYearPicker || r.props.showYearPicker) && (s = r.increaseYear), i && r.props.showDisabledMonthNavigation && (a.push("react-datepicker__navigation--next--disabled"), s = null);\n var l = r.props.showMonthYearPicker || r.props.showQuarterYearPicker || r.props.showYearPicker, p = r.props, d = p.nextMonthButtonLabel, b = p.nextYearButtonLabel, M = r.props, u = M.nextMonthAriaLabel, A = u === void 0 ? typeof d == "string" ? d : "Next Month" : u, z = M.nextYearAriaLabel, f = z === void 0 ? typeof b == "string" ? b : "Next Year" : z;\n return react__WEBPACK_IMPORTED_MODULE_0___default().createElement("button", { type: "button", className: a.join(" "), onClick: s, onKeyDown: r.props.handleOnKeyDown, "aria-label": l ? f : A }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement("span", { className: ["react-datepicker__navigation-icon", "react-datepicker__navigation-icon--next"].join(" ") }, l ? r.props.nextYearButtonLabel : r.props.nextMonthButtonLabel));\n }\n }\n }), z1(f1(r), "renderCurrentMonth", function() {\n var i = arguments.length > 0 && arguments[0] !== void 0 ? arguments[0] : r.state.date, a = ["react-datepicker__current-month"];\n return r.props.showYearDropdown && a.push("react-datepicker__current-month--hasYearDropdown"), r.props.showMonthDropdown && a.push("react-datepicker__current-month--hasMonthDropdown"), r.props.showMonthYearDropdown && a.push("react-datepicker__current-month--hasMonthYearDropdown"), react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", { className: a.join(" ") }, e2(i, r.props.dateFormat, r.props.locale));\n }), z1(f1(r), "renderYearDropdown", function() {\n var i = arguments.length > 0 && arguments[0] !== void 0 && arguments[0];\n if (r.props.showYearDropdown && !i)\n return react__WEBPACK_IMPORTED_MODULE_0___default().createElement(bW, { adjustDateOnChange: r.props.adjustDateOnChange, date: r.state.date, onSelect: r.props.onSelect, setOpen: r.props.setOpen, dropdownMode: r.props.dropdownMode, onChange: r.changeYear, minDate: r.props.minDate, maxDate: r.props.maxDate, year: L0(r.state.date), scrollableYearDropdown: r.props.scrollableYearDropdown, yearDropdownItemNumber: r.props.yearDropdownItemNumber });\n }), z1(f1(r), "renderMonthDropdown", function() {\n var i = arguments.length > 0 && arguments[0] !== void 0 && arguments[0];\n if (r.props.showMonthDropdown && !i)\n return react__WEBPACK_IMPORTED_MODULE_0___default().createElement(AW, { dropdownMode: r.props.dropdownMode, locale: r.props.locale, onChange: r.changeMonth, month: g2(r.state.date), useShortMonthInDropdown: r.props.useShortMonthInDropdown });\n }), z1(f1(r), "renderMonthYearDropdown", function() {\n var i = arguments.length > 0 && arguments[0] !== void 0 && arguments[0];\n if (r.props.showMonthYearDropdown && !i)\n return react__WEBPACK_IMPORTED_MODULE_0___default().createElement(hW, { dropdownMode: r.props.dropdownMode, locale: r.props.locale, dateFormat: r.props.dateFormat, onChange: r.changeMonthYear, minDate: r.props.minDate, maxDate: r.props.maxDate, date: r.state.date, scrollableMonthYearDropdown: r.props.scrollableMonthYearDropdown });\n }), z1(f1(r), "handleTodayButtonClick", function(i) {\n r.props.onSelect(l7(), i), r.props.setPreSelection && r.props.setPreSelection(l7());\n }), z1(f1(r), "renderTodayButton", function() {\n if (r.props.todayButton && !r.props.showTimeSelectOnly)\n return react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", { className: "react-datepicker__today-button", onClick: function(i) {\n return r.handleTodayButtonClick(i);\n } }, r.props.todayButton);\n }), z1(f1(r), "renderDefaultHeader", function(i) {\n var a = i.monthDate, s = i.i;\n return react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", { className: "react-datepicker__header ".concat(r.props.showTimeSelect ? "react-datepicker__header--has-time-select" : "") }, r.renderCurrentMonth(a), react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", { className: "react-datepicker__header__dropdown react-datepicker__header__dropdown--".concat(r.props.dropdownMode), onFocus: r.handleDropdownFocus }, r.renderMonthDropdown(s !== 0), r.renderMonthYearDropdown(s !== 0), r.renderYearDropdown(s !== 0)), react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", { className: "react-datepicker__day-names" }, r.header(a)));\n }), z1(f1(r), "renderCustomHeader", function() {\n var i = arguments.length > 0 && arguments[0] !== void 0 ? arguments[0] : {}, a = i.monthDate, s = i.i;\n if (r.props.showTimeSelect && !r.state.monthContainer || r.props.showTimeSelectOnly)\n return null;\n var l = M7(r.state.date, r.props), p = A7(r.state.date, r.props), d = u7(r.state.date, r.props), b = z7(r.state.date, r.props), M = !r.props.showMonthYearPicker && !r.props.showQuarterYearPicker && !r.props.showYearPicker;\n return react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", { className: "react-datepicker__header react-datepicker__header--custom", onFocus: r.props.onDropdownFocus }, r.props.renderCustomHeader(z4(z4({}, r.state), {}, { customHeaderCount: s, monthDate: a, changeMonth: r.changeMonth, changeYear: r.changeYear, decreaseMonth: r.decreaseMonth, increaseMonth: r.increaseMonth, decreaseYear: r.decreaseYear, increaseYear: r.increaseYear, prevMonthButtonDisabled: l, nextMonthButtonDisabled: p, prevYearButtonDisabled: d, nextYearButtonDisabled: b })), M && react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", { className: "react-datepicker__day-names" }, r.header(a)));\n }), z1(f1(r), "renderYearHeader", function() {\n var i = r.state.date, a = r.props, s = a.showYearPicker, l = E3(i, a.yearItemNumber), p = l.startPeriod, d = l.endPeriod;\n return react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", { className: "react-datepicker__header react-datepicker-year-header" }, s ? "".concat(p, " - ").concat(d) : L0(i));\n }), z1(f1(r), "renderHeader", function(i) {\n switch (!0) {\n case r.props.renderCustomHeader !== void 0:\n return r.renderCustomHeader(i);\n case (r.props.showMonthYearPicker || r.props.showQuarterYearPicker || r.props.showYearPicker):\n return r.renderYearHeader(i);\n default:\n return r.renderDefaultHeader(i);\n }\n }), z1(f1(r), "renderMonths", function() {\n var i;\n if (!r.props.showTimeSelectOnly && !r.props.showYearPicker) {\n for (var a = [], s = r.props.showPreviousMonths ? r.props.monthsShown - 1 : 0, l = _3(r.state.date, s), p = (i = r.props.monthSelectedIn) !== null && i !== void 0 ? i : s, d = 0; d < r.props.monthsShown; ++d) {\n var b = ve(l, d - p + s), M = "month-".concat(d), u = d < r.props.monthsShown - 1, A = d > 0;\n a.push(react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", { key: M, ref: function(z) {\n r.monthContainer = z;\n }, className: "react-datepicker__month-container" }, r.renderHeader({ monthDate: b, i: d }), react__WEBPACK_IMPORTED_MODULE_0___default().createElement(CW, { chooseDayAriaLabelPrefix: r.props.chooseDayAriaLabelPrefix, disabledDayAriaLabelPrefix: r.props.disabledDayAriaLabelPrefix, weekAriaLabelPrefix: r.props.weekAriaLabelPrefix, ariaLabelPrefix: r.props.monthAriaLabelPrefix, onChange: r.changeMonthYear, day: b, dayClassName: r.props.dayClassName, calendarStartDay: r.props.calendarStartDay, monthClassName: r.props.monthClassName, onDayClick: r.handleDayClick, handleOnKeyDown: r.props.handleOnDayKeyDown, onDayMouseEnter: r.handleDayMouseEnter, onMouseLeave: r.handleMonthMouseLeave, onWeekSelect: r.props.onWeekSelect, orderInDisplay: d, formatWeekNumber: r.props.formatWeekNumber, locale: r.props.locale, minDate: r.props.minDate, maxDate: r.props.maxDate, excludeDates: r.props.excludeDates, excludeDateIntervals: r.props.excludeDateIntervals, highlightDates: r.props.highlightDates, holidays: r.props.holidays, selectingDate: r.state.selectingDate, includeDates: r.props.includeDates, includeDateIntervals: r.props.includeDateIntervals, inline: r.props.inline, shouldFocusDayInline: r.props.shouldFocusDayInline, fixedHeight: r.props.fixedHeight, filterDate: r.props.filterDate, preSelection: r.props.preSelection, setPreSelection: r.props.setPreSelection, selected: r.props.selected, selectsStart: r.props.selectsStart, selectsEnd: r.props.selectsEnd, selectsRange: r.props.selectsRange, selectsDisabledDaysInRange: r.props.selectsDisabledDaysInRange, showWeekNumbers: r.props.showWeekNumbers, startDate: r.props.startDate, endDate: r.props.endDate, peekNextMonth: r.props.peekNextMonth, setOpen: r.props.setOpen, shouldCloseOnSelect: r.props.shouldCloseOnSelect, renderDayContents: r.props.renderDayContents, renderMonthContent: r.props.renderMonthContent, renderQuarterContent: r.props.renderQuarterContent, renderYearContent: r.props.renderYearContent, disabledKeyboardNavigation: r.props.disabledKeyboardNavigation, showMonthYearPicker: r.props.showMonthYearPicker, showFullMonthYearPicker: r.props.showFullMonthYearPicker, showTwoColumnMonthYearPicker: r.props.showTwoColumnMonthYearPicker, showFourColumnMonthYearPicker: r.props.showFourColumnMonthYearPicker, showYearPicker: r.props.showYearPicker, showQuarterYearPicker: r.props.showQuarterYearPicker, showWeekPicker: r.props.showWeekPicker, isInputFocused: r.props.isInputFocused, containerRef: r.containerRef, monthShowsDuplicateDaysEnd: u, monthShowsDuplicateDaysStart: A })));\n }\n return a;\n }\n }), z1(f1(r), "renderYears", function() {\n if (!r.props.showTimeSelectOnly)\n return r.props.showYearPicker ? react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", { className: "react-datepicker__year--container" }, r.renderHeader(), react__WEBPACK_IMPORTED_MODULE_0___default().createElement(mW, $3({ onDayClick: r.handleDayClick, selectingDate: r.state.selectingDate, clearSelectingDate: r.clearSelectingDate, date: r.state.date }, r.props, { onYearMouseEnter: r.handleYearMouseEnter, onYearMouseLeave: r.handleYearMouseLeave }))) : void 0;\n }), z1(f1(r), "renderTimeSection", function() {\n if (r.props.showTimeSelect && (r.state.monthContainer || r.props.showTimeSelectOnly))\n return react__WEBPACK_IMPORTED_MODULE_0___default().createElement(Cp, { selected: r.props.selected, openToDate: r.props.openToDate, onChange: r.props.onTimeChange, timeClassName: r.props.timeClassName, format: r.props.timeFormat, includeTimes: r.props.includeTimes, intervals: r.props.timeIntervals, minTime: r.props.minTime, maxTime: r.props.maxTime, excludeTimes: r.props.excludeTimes, filterTime: r.props.filterTime, timeCaption: r.props.timeCaption, todayButton: r.props.todayButton, showMonthDropdown: r.props.showMonthDropdown, showMonthYearDropdown: r.props.showMonthYearDropdown, showYearDropdown: r.props.showYearDropdown, withPortal: r.props.withPortal, monthRef: r.state.monthContainer, injectTimes: r.props.injectTimes, locale: r.props.locale, handleOnKeyDown: r.props.handleOnKeyDown, showTimeSelectOnly: r.props.showTimeSelectOnly });\n }), z1(f1(r), "renderInputTimeSection", function() {\n var i = new Date(r.props.selected), a = Lt(i) && r.props.selected ? "".concat(O7(i.getHours()), ":").concat(O7(i.getMinutes())) : "";\n if (r.props.showTimeInput)\n return react__WEBPACK_IMPORTED_MODULE_0___default().createElement(LW, { date: i, timeString: a, timeInputLabel: r.props.timeInputLabel, onChange: r.props.onTimeChange, customTimeInput: r.props.customTimeInput });\n }), z1(f1(r), "renderAriaLiveRegion", function() {\n var i, a = E3(r.state.date, r.props.yearItemNumber), s = a.startPeriod, l = a.endPeriod;\n return i = r.props.showYearPicker ? "".concat(s, " - ").concat(l) : r.props.showMonthYearPicker || r.props.showQuarterYearPicker ? L0(r.state.date) : "".concat(l6(g2(r.state.date), r.props.locale), " ").concat(L0(r.state.date)), react__WEBPACK_IMPORTED_MODULE_0___default().createElement("span", { role: "alert", "aria-live": "polite", className: "react-datepicker__aria-live" }, r.state.isRenderAriaLiveMessage && i);\n }), z1(f1(r), "renderChildren", function() {\n if (r.props.children)\n return react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", { className: "react-datepicker__children-container" }, r.props.children);\n }), r.containerRef = react__WEBPACK_IMPORTED_MODULE_0___default().createRef(), r.state = { date: r.getDateInView(), selectingDate: null, monthContainer: null, isRenderAriaLiveMessage: !1 }, r;\n }\n return h2(o, [{ key: "componentDidMount", value: function() {\n var n = this;\n this.props.showTimeSelect && (this.assignMonthContainer = void n.setState({ monthContainer: n.monthContainer }));\n } }, { key: "componentDidUpdate", value: function(n) {\n var r = this;\n if (!this.props.preSelection || Q0(this.props.preSelection, n.preSelection) && this.props.monthSelectedIn === n.monthSelectedIn)\n this.props.openToDate && !Q0(this.props.openToDate, n.openToDate) && this.setState({ date: this.props.openToDate });\n else {\n var i = !fe(this.state.date, this.props.preSelection);\n this.setState({ date: this.props.preSelection }, function() {\n return i && r.handleCustomMonthChange(r.state.date);\n });\n }\n } }, { key: "render", value: function() {\n var n = this.props.container || vW;\n return react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", { style: { display: "contents" }, ref: this.containerRef }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement(n, { className: m2("react-datepicker", this.props.className, { "react-datepicker--time-only": this.props.showTimeSelectOnly }), showPopperArrow: this.props.showPopperArrow, arrowProps: this.props.arrowProps }, this.renderAriaLiveRegion(), this.renderPreviousButton(), this.renderNextButton(), this.renderMonths(), this.renderYears(), this.renderTodayButton(), this.renderTimeSection(), this.renderInputTimeSection(), this.renderChildren()));\n } }], [{ key: "defaultProps", get: function() {\n return { onDropdownFocus: function() {\n }, monthsShown: 1, forceShowMonthNavigation: !1, timeCaption: "Time", previousYearButtonLabel: "Previous Year", nextYearButtonLabel: "Next Year", previousMonthButtonLabel: "Previous Month", nextMonthButtonLabel: "Next Month", customTimeInput: null, yearItemNumber: Ko };\n } }]), o;\n}(), wW = function(e) {\n var t = e.icon, o = e.className, n = o === void 0 ? "" : o, r = e.onClick, i = "react-datepicker__calendar-icon";\n return react__WEBPACK_IMPORTED_MODULE_0___default().isValidElement(t) ? react__WEBPACK_IMPORTED_MODULE_0___default().cloneElement(t, { className: "".concat(t.props.className || "", " ").concat(i, " ").concat(n), onClick: function(a) {\n typeof t.props.onClick == "function" && t.props.onClick(a), typeof r == "function" && r(a);\n } }) : typeof t == "string" ? react__WEBPACK_IMPORTED_MODULE_0___default().createElement("i", { className: "".concat(i, " ").concat(t, " ").concat(n), "aria-hidden": "true", onClick: r }) : react__WEBPACK_IMPORTED_MODULE_0___default().createElement("svg", { className: "".concat(i, " ").concat(n), xmlns: "http://www.w3.org/2000/svg", viewBox: "0 0 448 512", onClick: r }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement("path", { d: "M96 32V64H48C21.5 64 0 85.5 0 112v48H448V112c0-26.5-21.5-48-48-48H352V32c0-17.7-14.3-32-32-32s-32 14.3-32 32V64H160V32c0-17.7-14.3-32-32-32S96 14.3 96 32zM448 192H0V464c0 26.5 21.5 48 48 48H400c26.5 0 48-21.5 48-48V192z" }));\n}, mp = function(e) {\n O2(o, (react__WEBPACK_IMPORTED_MODULE_0___default().Component));\n var t = f2(o);\n function o(n) {\n var r;\n return z2(this, o), (r = t.call(this, n)).el = document.createElement("div"), r;\n }\n return h2(o, [{ key: "componentDidMount", value: function() {\n this.portalRoot = (this.props.portalHost || document).getElementById(this.props.portalId), this.portalRoot || (this.portalRoot = document.createElement("div"), this.portalRoot.setAttribute("id", this.props.portalId), (this.props.portalHost || document.body).appendChild(this.portalRoot)), this.portalRoot.appendChild(this.el);\n } }, { key: "componentWillUnmount", value: function() {\n this.portalRoot.removeChild(this.el);\n } }, { key: "render", value: function() {\n return react_dom__WEBPACK_IMPORTED_MODULE_2___default().createPortal(this.props.children, this.el);\n } }]), o;\n}(), xW = function(e) {\n return !e.disabled && e.tabIndex !== -1;\n}, Lp = function(e) {\n O2(o, (react__WEBPACK_IMPORTED_MODULE_0___default().Component));\n var t = f2(o);\n function o(n) {\n var r;\n return z2(this, o), z1(f1(r = t.call(this, n)), "getTabChildren", function() {\n return Array.prototype.slice.call(r.tabLoopRef.current.querySelectorAll("[tabindex], a, button, input, select, textarea"), 1, -1).filter(xW);\n }), z1(f1(r), "handleFocusStart", function() {\n var i = r.getTabChildren();\n i && i.length > 1 && i[i.length - 1].focus();\n }), z1(f1(r), "handleFocusEnd", function() {\n var i = r.getTabChildren();\n i && i.length > 1 && i[0].focus();\n }), r.tabLoopRef = react__WEBPACK_IMPORTED_MODULE_0___default().createRef(), r;\n }\n return h2(o, [{ key: "render", value: function() {\n return this.props.enableTabLoop ? react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", { className: "react-datepicker__tab-loop", ref: this.tabLoopRef }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", { className: "react-datepicker__tab-loop__start", tabIndex: "0", onFocus: this.handleFocusStart }), this.props.children, react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", { className: "react-datepicker__tab-loop__end", tabIndex: "0", onFocus: this.handleFocusEnd })) : this.props.children;\n } }], [{ key: "defaultProps", get: function() {\n return { enableTabLoop: !0 };\n } }]), o;\n}(), WW = function(e) {\n O2(o, (react__WEBPACK_IMPORTED_MODULE_0___default().Component));\n var t = f2(o);\n function o() {\n return z2(this, o), t.apply(this, arguments);\n }\n return h2(o, [{ key: "render", value: function() {\n var n, r = this.props, i = r.className, a = r.wrapperClassName, s = r.hidePopper, l = r.popperComponent, p = r.popperModifiers, d = r.popperPlacement, b = r.popperProps, M = r.targetComponent, u = r.enableTabLoop, A = r.popperOnKeyDown, z = r.portalId, f = r.portalHost;\n if (!s) {\n var O = m2("react-datepicker-popper", i);\n n = react__WEBPACK_IMPORTED_MODULE_0___default().createElement(Wq, $3({ modifiers: p, placement: d }, b), function(g) {\n var v = g.ref, L = g.style, y = g.placement, B = g.arrowProps;\n return react__WEBPACK_IMPORTED_MODULE_0___default().createElement(Lp, { enableTabLoop: u }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", { ref: v, style: L, className: O, "data-placement": y, onKeyDown: A }, react__WEBPACK_IMPORTED_MODULE_0___default().cloneElement(l, { arrowProps: B })));\n });\n }\n this.props.popperContainer && (n = react__WEBPACK_IMPORTED_MODULE_0___default().createElement(this.props.popperContainer, {}, n)), z && !s && (n = react__WEBPACK_IMPORTED_MODULE_0___default().createElement(mp, { portalId: z, portalHost: f }, n));\n var h = m2("react-datepicker-wrapper", a);\n return react__WEBPACK_IMPORTED_MODULE_0___default().createElement(bv, { className: "react-datepicker-manager" }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement(kq, null, function(g) {\n var v = g.ref;\n return react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", { ref: v, className: h }, M);\n }), n);\n } }], [{ key: "defaultProps", get: function() {\n return { hidePopper: !0, popperModifiers: [], popperProps: {}, popperPlacement: "bottom-start" };\n } }]), o;\n}(), C7 = "react-datepicker-ignore-onclickoutside", RW = X4(yW), Di = "Date input not valid.", vp = function(e) {\n O2(o, (react__WEBPACK_IMPORTED_MODULE_0___default().Component));\n var t = f2(o);\n function o(n) {\n var r;\n return z2(this, o), z1(f1(r = t.call(this, n)), "getPreSelection", function() {\n return r.props.openToDate ? r.props.openToDate : r.props.selectsEnd && r.props.startDate ? r.props.startDate : r.props.selectsStart && r.props.endDate ? r.props.endDate : G0();\n }), z1(f1(r), "modifyHolidays", function() {\n var i;\n return (i = r.props.holidays) === null || i === void 0 ? void 0 : i.reduce(function(a, s) {\n var l = new Date(s.date);\n return lr(l) ? [].concat(Ar(a), [z4(z4({}, s), {}, { date: l })]) : a;\n }, []);\n }), z1(f1(r), "calcInitialState", function() {\n var i, a = r.getPreSelection(), s = zp(r.props), l = hp(r.props), p = s && vt(a, Ve(s)) ? s : l && Dt(a, b4(l)) ? l : a;\n return { open: r.props.startOpen || !1, preventFocus: !1, preSelection: (i = r.props.selectsRange ? r.props.startDate : r.props.selected) !== null && i !== void 0 ? i : p, highlightDates: h7(r.props.highlightDates), focused: !1, shouldFocusDayInline: !1, isRenderAriaLiveMessage: !1 };\n }), z1(f1(r), "clearPreventFocusTimeout", function() {\n r.preventFocusTimeout && clearTimeout(r.preventFocusTimeout);\n }), z1(f1(r), "setFocus", function() {\n r.input && r.input.focus && r.input.focus({ preventScroll: !0 });\n }), z1(f1(r), "setBlur", function() {\n r.input && r.input.blur && r.input.blur(), r.cancelFocusInput();\n }), z1(f1(r), "setOpen", function(i) {\n var a = arguments.length > 1 && arguments[1] !== void 0 && arguments[1];\n r.setState({ open: i, preSelection: i && r.state.open ? r.state.preSelection : r.calcInitialState().preSelection, lastPreSelectChange: Hi }, function() {\n i || r.setState(function(s) {\n return { focused: !!a && s.focused };\n }, function() {\n !a && r.setBlur(), r.setState({ inputValue: null });\n });\n });\n }), z1(f1(r), "inputOk", function() {\n return F4(r.state.preSelection);\n }), z1(f1(r), "isCalendarOpen", function() {\n return r.props.open === void 0 ? r.state.open && !r.props.disabled && !r.props.readOnly : r.props.open;\n }), z1(f1(r), "handleFocus", function(i) {\n r.state.preventFocus || (r.props.onFocus(i), r.props.preventOpenOnFocus || r.props.readOnly || r.setOpen(!0)), r.setState({ focused: !0 });\n }), z1(f1(r), "sendFocusBackToInput", function() {\n r.preventFocusTimeout && r.clearPreventFocusTimeout(), r.setState({ preventFocus: !0 }, function() {\n r.preventFocusTimeout = setTimeout(function() {\n r.setFocus(), r.setState({ preventFocus: !1 });\n });\n });\n }), z1(f1(r), "cancelFocusInput", function() {\n clearTimeout(r.inputFocusTimeout), r.inputFocusTimeout = null;\n }), z1(f1(r), "deferFocusInput", function() {\n r.cancelFocusInput(), r.inputFocusTimeout = setTimeout(function() {\n return r.setFocus();\n }, 1);\n }), z1(f1(r), "handleDropdownFocus", function() {\n r.cancelFocusInput();\n }), z1(f1(r), "handleBlur", function(i) {\n (!r.state.open || r.props.withPortal || r.props.showTimeInput) && r.props.onBlur(i), r.setState({ focused: !1 });\n }), z1(f1(r), "handleCalendarClickOutside", function(i) {\n r.props.inline || r.setOpen(!1), r.props.onClickOutside(i), r.props.withPortal && i.preventDefault();\n }), z1(f1(r), "handleChange", function() {\n for (var i = arguments.length, a = new Array(i), s = 0; s < i; s++)\n a[s] = arguments[s];\n var l = a[0];\n if (!r.props.onChangeRaw || (r.props.onChangeRaw.apply(f1(r), a), typeof l.isDefaultPrevented == "function" && !l.isDefaultPrevented())) {\n r.setState({ inputValue: l.target.value, lastPreSelectChange: BW });\n var p, d, b, M, u, A, z, f, O = (p = l.target.value, d = r.props.dateFormat, b = r.props.locale, M = r.props.strictParsing, u = r.props.minDate, A = null, z = St(b) || St(c3()), f = !0, Array.isArray(d) ? (d.forEach(function(h) {\n var g = vi(p, h, /* @__PURE__ */ new Date(), { locale: z });\n M && (f = Lt(g, u) && p === e2(g, h, b)), Lt(g, u) && f && (A = g);\n }), A) : (A = vi(p, d, /* @__PURE__ */ new Date(), { locale: z }), M ? f = Lt(A) && p === e2(A, d, b) : Lt(A) || (d = d.match(aW).map(function(h) {\n var g = h[0];\n return g === "p" || g === "P" ? z ? (0, iW[g])(h, z.formatLong) : g : h;\n }).join(""), p.length > 0 && (A = vi(p, d.slice(0, p.length), /* @__PURE__ */ new Date())), Lt(A) || (A = new Date(p))), Lt(A) && f ? A : null));\n r.props.showTimeSelectOnly && r.props.selected && O && !Q0(O, r.props.selected) && (O = Ix(r.props.selected, { hours: Pe(O), minutes: Fe(O), seconds: V8(O) })), !O && l.target.value || (r.props.showWeekPicker && (O = Xe(O, r.props.locale, r.props.calendarStartDay)), r.setSelected(O, l, !0));\n }\n }), z1(f1(r), "handleSelect", function(i, a, s) {\n if (r.props.shouldCloseOnSelect && !r.props.showTimeSelect && r.sendFocusBackToInput(), r.props.onChangeRaw && r.props.onChangeRaw(a), r.props.showWeekPicker && (i = Xe(i, r.props.locale, r.props.calendarStartDay)), r.setSelected(i, a, !1, s), r.props.showDateSelect && r.setState({ isRenderAriaLiveMessage: !0 }), !r.props.shouldCloseOnSelect || r.props.showTimeSelect)\n r.setPreSelection(i);\n else if (!r.props.inline) {\n r.props.selectsRange || r.setOpen(!1);\n var l = r.props, p = l.startDate, d = l.endDate;\n !p || d || vt(i, p) || r.setOpen(!1);\n }\n }), z1(f1(r), "setSelected", function(i, a, s, l) {\n var p = i;\n if (r.props.showYearPicker) {\n if (p !== null && up(L0(p), r.props))\n return;\n } else if (r.props.showMonthYearPicker) {\n if (p !== null && Ap(p, r.props))\n return;\n } else if (p !== null && U4(p, r.props))\n return;\n var d = r.props, b = d.onChange, M = d.selectsRange, u = d.startDate, A = d.endDate;\n if (!i3(r.props.selected, p) || r.props.allowSameDay || M)\n if (p !== null && (!r.props.selected || s && (r.props.showTimeSelect || r.props.showTimeSelectOnly || r.props.showTimeInput) || (p = s7(p, { hour: Pe(r.props.selected), minute: Fe(r.props.selected), second: V8(r.props.selected) })), r.props.inline || r.setState({ preSelection: p }), r.props.focusSelectedMonth || r.setState({ monthSelectedIn: l })), M) {\n var z = u && !A, f = u && A;\n !u && !A ? b([p, null], a) : z && (vt(p, u) ? b([p, null], a) : b([u, p], a)), f && b([p, null], a);\n } else\n b(p, a);\n s || (r.props.onSelect(p, a), r.setState({ inputValue: null }));\n }), z1(f1(r), "setPreSelection", function(i) {\n var a = r.props.minDate !== void 0, s = r.props.maxDate !== void 0, l = !0;\n if (i) {\n r.props.showWeekPicker && (i = Xe(i, r.props.locale, r.props.calendarStartDay));\n var p = Ve(i);\n if (a && s)\n l = Fn(i, r.props.minDate, r.props.maxDate);\n else if (a) {\n var d = Ve(r.props.minDate);\n l = Dt(i, d) || i3(p, d);\n } else if (s) {\n var b = b4(r.props.maxDate);\n l = vt(i, b) || i3(p, b);\n }\n }\n l && r.setState({ preSelection: i });\n }), z1(f1(r), "toggleCalendar", function() {\n r.setOpen(!r.state.open);\n }), z1(f1(r), "handleTimeChange", function(i) {\n var a = r.props.selected ? r.props.selected : r.getPreSelection(), s = r.props.selected ? i : s7(a, { hour: Pe(i), minute: Fe(i) });\n r.setState({ preSelection: s }), r.props.onChange(s), r.props.shouldCloseOnSelect && (r.sendFocusBackToInput(), r.setOpen(!1)), r.props.showTimeInput && r.setOpen(!0), (r.props.showTimeSelectOnly || r.props.showTimeSelect) && r.setState({ isRenderAriaLiveMessage: !0 }), r.setState({ inputValue: null });\n }), z1(f1(r), "onInputClick", function() {\n r.props.disabled || r.props.readOnly || r.setOpen(!0), r.props.onInputClick();\n }), z1(f1(r), "onInputKeyDown", function(i) {\n r.props.onKeyDown(i);\n var a = i.key;\n if (r.state.open || r.props.inline || r.props.preventOpenOnFocus) {\n if (r.state.open) {\n if (a === "ArrowDown" || a === "ArrowUp") {\n i.preventDefault();\n var s = r.props.showWeekPicker && r.props.showWeekNumbers ? \'.react-datepicker__week-number[tabindex="0"]\' : \'.react-datepicker__day[tabindex="0"]\', l = r.calendar.componentNode && r.calendar.componentNode.querySelector(s);\n return void (l && l.focus({ preventScroll: !0 }));\n }\n var p = G0(r.state.preSelection);\n a === "Enter" ? (i.preventDefault(), r.inputOk() && r.state.lastPreSelectChange === Hi ? (r.handleSelect(p, i), !r.props.shouldCloseOnSelect && r.setPreSelection(p)) : r.setOpen(!1)) : a === "Escape" ? (i.preventDefault(), r.sendFocusBackToInput(), r.setOpen(!1)) : a === "Tab" && r.setOpen(!1), r.inputOk() || r.props.onInputError({ code: 1, msg: Di });\n }\n } else\n a !== "ArrowDown" && a !== "ArrowUp" && a !== "Enter" || r.onInputClick();\n }), z1(f1(r), "onPortalKeyDown", function(i) {\n i.key === "Escape" && (i.preventDefault(), r.setState({ preventFocus: !0 }, function() {\n r.setOpen(!1), setTimeout(function() {\n r.setFocus(), r.setState({ preventFocus: !1 });\n });\n }));\n }), z1(f1(r), "onDayKeyDown", function(i) {\n r.props.onKeyDown(i);\n var a = i.key, s = G0(r.state.preSelection);\n if (a === "Enter")\n i.preventDefault(), r.handleSelect(s, i), !r.props.shouldCloseOnSelect && r.setPreSelection(s);\n else if (a === "Escape")\n i.preventDefault(), r.setOpen(!1), r.inputOk() || r.props.onInputError({ code: 1, msg: Di });\n else if (!r.props.disabledKeyboardNavigation) {\n var l;\n switch (a) {\n case "ArrowLeft":\n l = r.props.showWeekPicker ? U8(s, 1) : gx(s, 1);\n break;\n case "ArrowRight":\n l = r.props.showWeekPicker ? p4(s, 1) : ao(s, 1);\n break;\n case "ArrowUp":\n l = U8(s, 1);\n break;\n case "ArrowDown":\n l = p4(s, 1);\n break;\n case "PageUp":\n l = _3(s, 1);\n break;\n case "PageDown":\n l = ve(s, 1);\n break;\n case "Home":\n l = Mr(s, 1);\n break;\n case "End":\n l = K3(s, 1);\n break;\n default:\n l = null;\n }\n if (!l)\n return void (r.props.onInputError && r.props.onInputError({ code: 1, msg: Di }));\n if (i.preventDefault(), r.setState({ lastPreSelectChange: Hi }), r.props.adjustDateOnChange && r.setSelected(l), r.setPreSelection(l), r.props.inline) {\n var p = g2(s), d = g2(l), b = L0(s), M = L0(l);\n p !== d || b !== M ? r.setState({ shouldFocusDayInline: !0 }) : r.setState({ shouldFocusDayInline: !1 });\n }\n }\n }), z1(f1(r), "onPopperKeyDown", function(i) {\n i.key === "Escape" && (i.preventDefault(), r.sendFocusBackToInput());\n }), z1(f1(r), "onClearClick", function(i) {\n i && i.preventDefault && i.preventDefault(), r.sendFocusBackToInput(), r.props.selectsRange ? r.props.onChange([null, null], i) : r.props.onChange(null, i), r.setState({ inputValue: null });\n }), z1(f1(r), "clear", function() {\n r.onClearClick();\n }), z1(f1(r), "onScroll", function(i) {\n typeof r.props.closeOnScroll == "boolean" && r.props.closeOnScroll ? i.target !== document && i.target !== document.documentElement && i.target !== document.body || r.setOpen(!1) : typeof r.props.closeOnScroll == "function" && r.props.closeOnScroll(i) && r.setOpen(!1);\n }), z1(f1(r), "renderCalendar", function() {\n return r.props.inline || r.isCalendarOpen() ? react__WEBPACK_IMPORTED_MODULE_0___default().createElement(RW, { ref: function(i) {\n r.calendar = i;\n }, locale: r.props.locale, calendarStartDay: r.props.calendarStartDay, chooseDayAriaLabelPrefix: r.props.chooseDayAriaLabelPrefix, disabledDayAriaLabelPrefix: r.props.disabledDayAriaLabelPrefix, weekAriaLabelPrefix: r.props.weekAriaLabelPrefix, monthAriaLabelPrefix: r.props.monthAriaLabelPrefix, adjustDateOnChange: r.props.adjustDateOnChange, setOpen: r.setOpen, shouldCloseOnSelect: r.props.shouldCloseOnSelect, dateFormat: r.props.dateFormatCalendar, useWeekdaysShort: r.props.useWeekdaysShort, formatWeekDay: r.props.formatWeekDay, dropdownMode: r.props.dropdownMode, selected: r.props.selected, preSelection: r.state.preSelection, onSelect: r.handleSelect, onWeekSelect: r.props.onWeekSelect, openToDate: r.props.openToDate, minDate: r.props.minDate, maxDate: r.props.maxDate, selectsStart: r.props.selectsStart, selectsEnd: r.props.selectsEnd, selectsRange: r.props.selectsRange, startDate: r.props.startDate, endDate: r.props.endDate, excludeDates: r.props.excludeDates, excludeDateIntervals: r.props.excludeDateIntervals, filterDate: r.props.filterDate, onClickOutside: r.handleCalendarClickOutside, formatWeekNumber: r.props.formatWeekNumber, highlightDates: r.state.highlightDates, holidays: cW(r.modifyHolidays()), includeDates: r.props.includeDates, includeDateIntervals: r.props.includeDateIntervals, includeTimes: r.props.includeTimes, injectTimes: r.props.injectTimes, inline: r.props.inline, shouldFocusDayInline: r.state.shouldFocusDayInline, peekNextMonth: r.props.peekNextMonth, showMonthDropdown: r.props.showMonthDropdown, showPreviousMonths: r.props.showPreviousMonths, useShortMonthInDropdown: r.props.useShortMonthInDropdown, showMonthYearDropdown: r.props.showMonthYearDropdown, showWeekNumbers: r.props.showWeekNumbers, showYearDropdown: r.props.showYearDropdown, withPortal: r.props.withPortal, forceShowMonthNavigation: r.props.forceShowMonthNavigation, showDisabledMonthNavigation: r.props.showDisabledMonthNavigation, scrollableYearDropdown: r.props.scrollableYearDropdown, scrollableMonthYearDropdown: r.props.scrollableMonthYearDropdown, todayButton: r.props.todayButton, weekLabel: r.props.weekLabel, outsideClickIgnoreClass: C7, fixedHeight: r.props.fixedHeight, monthsShown: r.props.monthsShown, monthSelectedIn: r.state.monthSelectedIn, onDropdownFocus: r.handleDropdownFocus, onMonthChange: r.props.onMonthChange, onYearChange: r.props.onYearChange, dayClassName: r.props.dayClassName, weekDayClassName: r.props.weekDayClassName, monthClassName: r.props.monthClassName, timeClassName: r.props.timeClassName, showDateSelect: r.props.showDateSelect, showTimeSelect: r.props.showTimeSelect, showTimeSelectOnly: r.props.showTimeSelectOnly, onTimeChange: r.handleTimeChange, timeFormat: r.props.timeFormat, timeIntervals: r.props.timeIntervals, minTime: r.props.minTime, maxTime: r.props.maxTime, excludeTimes: r.props.excludeTimes, filterTime: r.props.filterTime, timeCaption: r.props.timeCaption, className: r.props.calendarClassName, container: r.props.calendarContainer, yearItemNumber: r.props.yearItemNumber, yearDropdownItemNumber: r.props.yearDropdownItemNumber, previousMonthAriaLabel: r.props.previousMonthAriaLabel, previousMonthButtonLabel: r.props.previousMonthButtonLabel, nextMonthAriaLabel: r.props.nextMonthAriaLabel, nextMonthButtonLabel: r.props.nextMonthButtonLabel, previousYearAriaLabel: r.props.previousYearAriaLabel, previousYearButtonLabel: r.props.previousYearButtonLabel, nextYearAriaLabel: r.props.nextYearAriaLabel, nextYearButtonLabel: r.props.nextYearButtonLabel, timeInputLabel: r.props.timeInputLabel, disabledKeyboardNavigation: r.props.disabledKeyboardNavigation, renderCustomHeader: r.props.renderCustomHeader, popperProps: r.props.popperProps, renderDayContents: r.props.renderDayContents, renderMonthContent: r.props.renderMonthContent, renderQuarterContent: r.props.renderQuarterContent, renderYearContent: r.props.renderYearContent, onDayMouseEnter: r.props.onDayMouseEnter, onMonthMouseLeave: r.props.onMonthMouseLeave, onYearMouseEnter: r.props.onYearMouseEnter, onYearMouseLeave: r.props.onYearMouseLeave, selectsDisabledDaysInRange: r.props.selectsDisabledDaysInRange, showTimeInput: r.props.showTimeInput, showMonthYearPicker: r.props.showMonthYearPicker, showFullMonthYearPicker: r.props.showFullMonthYearPicker, showTwoColumnMonthYearPicker: r.props.showTwoColumnMonthYearPicker, showFourColumnMonthYearPicker: r.props.showFourColumnMonthYearPicker, showYearPicker: r.props.showYearPicker, showQuarterYearPicker: r.props.showQuarterYearPicker, showWeekPicker: r.props.showWeekPicker, showPopperArrow: r.props.showPopperArrow, excludeScrollbar: r.props.excludeScrollbar, handleOnKeyDown: r.props.onKeyDown, handleOnDayKeyDown: r.onDayKeyDown, isInputFocused: r.state.focused, customTimeInput: r.props.customTimeInput, setPreSelection: r.setPreSelection }, r.props.children) : null;\n }), z1(f1(r), "renderAriaLiveRegion", function() {\n var i, a = r.props, s = a.dateFormat, l = a.locale, p = r.props.showTimeInput || r.props.showTimeSelect ? "PPPPp" : "PPPP";\n return i = r.props.selectsRange ? "Selected start date: ".concat(Be(r.props.startDate, { dateFormat: p, locale: l }), ". ").concat(r.props.endDate ? "End date: " + Be(r.props.endDate, { dateFormat: p, locale: l }) : "") : r.props.showTimeSelectOnly ? "Selected time: ".concat(Be(r.props.selected, { dateFormat: s, locale: l })) : r.props.showYearPicker ? "Selected year: ".concat(Be(r.props.selected, { dateFormat: "yyyy", locale: l })) : r.props.showMonthYearPicker ? "Selected month: ".concat(Be(r.props.selected, { dateFormat: "MMMM yyyy", locale: l })) : r.props.showQuarterYearPicker ? "Selected quarter: ".concat(Be(r.props.selected, { dateFormat: "yyyy, QQQ", locale: l })) : "Selected date: ".concat(Be(r.props.selected, { dateFormat: p, locale: l })), react__WEBPACK_IMPORTED_MODULE_0___default().createElement("span", { role: "alert", "aria-live": "polite", className: "react-datepicker__aria-live" }, i);\n }), z1(f1(r), "renderDateInput", function() {\n var i, a = m2(r.props.className, z1({}, C7, r.state.open)), s = r.props.customInput || react__WEBPACK_IMPORTED_MODULE_0___default().createElement("input", { type: "text" }), l = r.props.customInputRef || "ref", p = typeof r.props.value == "string" ? r.props.value : typeof r.state.inputValue == "string" ? r.state.inputValue : r.props.selectsRange ? function(d, b, M) {\n if (!d)\n return "";\n var u = Be(d, M), A = b ? Be(b, M) : "";\n return "".concat(u, " - ").concat(A);\n }(r.props.startDate, r.props.endDate, r.props) : Be(r.props.selected, r.props);\n return react__WEBPACK_IMPORTED_MODULE_0___default().cloneElement(s, (z1(z1(z1(z1(z1(z1(z1(z1(z1(z1(i = {}, l, function(d) {\n r.input = d;\n }), "value", p), "onBlur", r.handleBlur), "onChange", r.handleChange), "onClick", r.onInputClick), "onFocus", r.handleFocus), "onKeyDown", r.onInputKeyDown), "id", r.props.id), "name", r.props.name), "form", r.props.form), z1(z1(z1(z1(z1(z1(z1(z1(z1(z1(i, "autoFocus", r.props.autoFocus), "placeholder", r.props.placeholderText), "disabled", r.props.disabled), "autoComplete", r.props.autoComplete), "className", m2(s.props.className, a)), "title", r.props.title), "readOnly", r.props.readOnly), "required", r.props.required), "tabIndex", r.props.tabIndex), "aria-describedby", r.props.ariaDescribedBy), z1(z1(z1(i, "aria-invalid", r.props.ariaInvalid), "aria-labelledby", r.props.ariaLabelledBy), "aria-required", r.props.ariaRequired)));\n }), z1(f1(r), "renderClearButton", function() {\n var i = r.props, a = i.isClearable, s = i.disabled, l = i.selected, p = i.startDate, d = i.endDate, b = i.clearButtonTitle, M = i.clearButtonClassName, u = M === void 0 ? "" : M, A = i.ariaLabelClose, z = A === void 0 ? "Close" : A;\n return !a || l == null && p == null && d == null ? null : react__WEBPACK_IMPORTED_MODULE_0___default().createElement("button", { type: "button", className: m2("react-datepicker__close-icon", u, { "react-datepicker__close-icon--disabled": s }), disabled: s, "aria-label": z, onClick: r.onClearClick, title: b, tabIndex: -1 });\n }), r.state = r.calcInitialState(), r.preventFocusTimeout = null, r;\n }\n return h2(o, [{ key: "componentDidMount", value: function() {\n window.addEventListener("scroll", this.onScroll, !0);\n } }, { key: "componentDidUpdate", value: function(n, r) {\n var i, a;\n n.inline && (i = n.selected, a = this.props.selected, i && a ? g2(i) !== g2(a) || L0(i) !== L0(a) : i !== a) && this.setPreSelection(this.props.selected), this.state.monthSelectedIn !== void 0 && n.monthsShown !== this.props.monthsShown && this.setState({ monthSelectedIn: 0 }), n.highlightDates !== this.props.highlightDates && this.setState({ highlightDates: h7(this.props.highlightDates) }), r.focused || i3(n.selected, this.props.selected) || this.setState({ inputValue: null }), r.open !== this.state.open && (r.open === !1 && this.state.open === !0 && this.props.onCalendarOpen(), r.open === !0 && this.state.open === !1 && this.props.onCalendarClose());\n } }, { key: "componentWillUnmount", value: function() {\n this.clearPreventFocusTimeout(), window.removeEventListener("scroll", this.onScroll, !0);\n } }, { key: "renderInputContainer", value: function() {\n var n = this.props, r = n.showIcon, i = n.icon, a = n.calendarIconClassname, s = n.toggleCalendarOnIconClick, l = this.state.open;\n return react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", { className: "react-datepicker__input-container".concat(r ? " react-datepicker__view-calendar-icon" : "") }, r && react__WEBPACK_IMPORTED_MODULE_0___default().createElement(wW, $3({ icon: i, className: "".concat(a, " ").concat(l && "react-datepicker-ignore-onclickoutside") }, s ? { onClick: this.toggleCalendar } : null)), this.state.isRenderAriaLiveMessage && this.renderAriaLiveRegion(), this.renderDateInput(), this.renderClearButton());\n } }, { key: "render", value: function() {\n var n = this.renderCalendar();\n if (this.props.inline)\n return n;\n if (this.props.withPortal) {\n var r = this.state.open ? react__WEBPACK_IMPORTED_MODULE_0___default().createElement(Lp, { enableTabLoop: this.props.enableTabLoop }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", { className: "react-datepicker__portal", tabIndex: -1, onKeyDown: this.onPortalKeyDown }, n)) : null;\n return this.state.open && this.props.portalId && (r = react__WEBPACK_IMPORTED_MODULE_0___default().createElement(mp, { portalId: this.props.portalId, portalHost: this.props.portalHost }, r)), react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", null, this.renderInputContainer(), r);\n }\n return react__WEBPACK_IMPORTED_MODULE_0___default().createElement(WW, { className: this.props.popperClassName, wrapperClassName: this.props.wrapperClassName, hidePopper: !this.isCalendarOpen(), portalId: this.props.portalId, portalHost: this.props.portalHost, popperModifiers: this.props.popperModifiers, targetComponent: this.renderInputContainer(), popperContainer: this.props.popperContainer, popperComponent: n, popperPlacement: this.props.popperPlacement, popperProps: this.props.popperProps, popperOnKeyDown: this.onPopperKeyDown, enableTabLoop: this.props.enableTabLoop });\n } }], [{ key: "defaultProps", get: function() {\n return { allowSameDay: !1, dateFormat: "MM/dd/yyyy", dateFormatCalendar: "LLLL yyyy", onChange: function() {\n }, disabled: !1, disabledKeyboardNavigation: !1, dropdownMode: "scroll", onFocus: function() {\n }, onBlur: function() {\n }, onKeyDown: function() {\n }, onInputClick: function() {\n }, onSelect: function() {\n }, onClickOutside: function() {\n }, onMonthChange: function() {\n }, onCalendarOpen: function() {\n }, onCalendarClose: function() {\n }, preventOpenOnFocus: !1, onYearChange: function() {\n }, onInputError: function() {\n }, monthsShown: 1, readOnly: !1, withPortal: !1, selectsDisabledDaysInRange: !1, shouldCloseOnSelect: !0, showTimeSelect: !1, showTimeInput: !1, showPreviousMonths: !1, showMonthYearPicker: !1, showFullMonthYearPicker: !1, showTwoColumnMonthYearPicker: !1, showFourColumnMonthYearPicker: !1, showYearPicker: !1, showQuarterYearPicker: !1, showWeekPicker: !1, strictParsing: !1, timeIntervals: 30, timeCaption: "Time", previousMonthAriaLabel: "Previous Month", previousMonthButtonLabel: "Previous Month", nextMonthAriaLabel: "Next Month", nextMonthButtonLabel: "Next Month", previousYearAriaLabel: "Previous Year", previousYearButtonLabel: "Previous Year", nextYearAriaLabel: "Next Year", nextYearButtonLabel: "Next Year", timeInputLabel: "Time", enableTabLoop: !0, yearItemNumber: Ko, focusSelectedMonth: !1, showPopperArrow: !0, excludeScrollbar: !0, customTimeInput: null, calendarStartDay: void 0, toggleCalendarOnIconClick: !1 };\n } }]), o;\n}(), BW = "input", Hi = "navigate";\nconst m7 = [\n "January",\n "February",\n "March",\n "April",\n "May",\n "June",\n "July",\n "August",\n "September",\n "October",\n "November",\n "December"\n], f4 = styled_components__WEBPACK_IMPORTED_MODULE_1___default().div(\n ({\n $columnStart: e = "",\n $middle: t = !1,\n $center: o = !1,\n end: n = !1,\n $cellHeight: r = 1,\n $rowStart: i = "",\n width: a = 1,\n area: s = ""\n }) => (0,styled_components__WEBPACK_IMPORTED_MODULE_1__.css)`\n grid-column-end: ${`span ${a}`};\n grid-row-end: ${`span ${r}`};\n grid-column-start: ${e};\n grid-row-start: ${i};\n grid-area: ${s};\n\n ${t && (0,styled_components__WEBPACK_IMPORTED_MODULE_1__.css)`\n display: inline-flex;\n flex-flow: column wrap;\n justify-content: center;\n justify-self: stretch;\n `}\n\n ${o && (0,styled_components__WEBPACK_IMPORTED_MODULE_1__.css)`\n text-align: center;\n `}\n\n ${n && (0,styled_components__WEBPACK_IMPORTED_MODULE_1__.css)`\n text-align: end;\n `}\n `\n), SW = "12px", EW = "20px", so = styled_components__WEBPACK_IMPORTED_MODULE_1___default().div(\n ({\n theme: e,\n $minRowHeight: t = EW,\n $justifyContent: o = "",\n $alignContent: n = "",\n alignItems: r = "",\n // Add the alignItems prop with a default value of \'center\'\n flow: i = "row",\n height: a = "",\n areas: s = "",\n rows: l = "",\n gap: p = SW,\n columns: d\n }) => (0,styled_components__WEBPACK_IMPORTED_MODULE_1__.css)`\n display: grid;\n grid-gap: ${p};\n height: ${a};\n grid-template-columns: ${d && `repeat(${d}, 1fr)`};\n grid-auto-rows: ${`minmax(${t}, auto)`};\n grid-template-areas: ${s};\n grid-template-rows: ${l};\n grid-auto-flow: ${i};\n justify-content: ${o};\n align-content: ${n};\n align-items: ${r}; // Add align-items property\n `\n), qp = (styled_components__WEBPACK_IMPORTED_MODULE_1___default().label)`\n\n`, Xn = styled_components__WEBPACK_IMPORTED_MODULE_1___default().div(\n ({ theme: { colors: e, typography: t, fontWeight: o, borderRadius: n } }) => (0,styled_components__WEBPACK_IMPORTED_MODULE_1__.css)`\n display: flex;\n align-items: center;\n padding: 0 8.46px;\n background: ${e.backgrounds.bgPrimary};\n color:${e.textIcon.textHighemphasis};\n border-radius: ${n.base};\n font-size: ${t.t12};\n font-weight: ${o.light};\n transition: color 0.2s, background-color 0.2s;\n height: 24px;\n /* max-width: 64px; */\n cursor: pointer;\n white-space: nowrap;\n\n &:hover {\n background-color: ${e.backgrounds.bgHoverPrimary};\n }\n &:focus-visible{\n box-shadow: 0 0 0 2px ${e.border.borderFocused} inset;\n outline: none;\n }\n \n &:active {\n background-color: ${e.backgrounds.bgTertiary};\n color: ${e.textIcon.textTertiary};\n &:hover {\n background-color: ${e.backgrounds.bgHoverSecondary};\n }\n }\n\n ${no} {\n margin: 0 5px 0 -10px;\n }\n `\n), kW = styled_components__WEBPACK_IMPORTED_MODULE_1___default().input(\n ({ theme: { colors: e } }) => (0,styled_components__WEBPACK_IMPORTED_MODULE_1__.css)`\n position: absolute;\n left: -9999px;\n width: 0;\n height: 0;\n\n &:checked + ${Xn} {\n background-color: ${e.backgrounds.bgTertiary};\n color: ${e.textIcon.textTertiary};\n &:not(:active) {\n \n &:hover {\n background-color: ${e.backgrounds.bgHoverSecondary};;\n }\n }\n &:active{\n background: ${e.backgrounds.bgPressed};\n }\n \n }\n \n\n &:disabled + ${Xn} {\n background-color: ${e.backgrounds.bgPrimary};\n color: ${e.textIcon.textLowemphasis};\n cursor: not-allowed;\n }\n\n &:checked:disabled + ${Xn} {\n color: ${e.toggleSwitch.switchTextReadonlyActive};\n background-color: ${e.backgrounds.bgReadOnly};\n cursor: not-allowed;\n }\n `\n), yp = (styled_components__WEBPACK_IMPORTED_MODULE_1___default().div)`\n display: flex;\n align-items: center;\n\n ${Pt} {\n margin-left: ${({ theme: e }) => e.spacings.sp4};\n }\n`, NW = styled_components__WEBPACK_IMPORTED_MODULE_1___default().div(\n ({\n $isDisabled: e,\n $isError: t,\n $isReadOnly: o,\n theme: { colors: n, spacings: r, borderRadius: i }\n }) => (0,styled_components__WEBPACK_IMPORTED_MODULE_1__.css)`\n display: flex;\n background-color: ${n.white};\n border: 1px solid ${n.gainsboro};\n padding: 3px;\n border-radius: ${i.base};\n\n ${qp} {\n margin-right: ${r.sp4};\n\n &:last-child {\n margin-right: 0;\n }\n }\n\n ${t && (0,styled_components__WEBPACK_IMPORTED_MODULE_1__.css)`\n border-color: ${n.red};\n `}\n\n ${e && (0,styled_components__WEBPACK_IMPORTED_MODULE_1__.css)`\n background-color: ${n.white};\n border-color: ${n.gainsboro};\n `}\n ${o && (0,styled_components__WEBPACK_IMPORTED_MODULE_1__.css)`\n width: 100%;\n `}\n `\n), TW = styled_components__WEBPACK_IMPORTED_MODULE_1___default().div(\n ({ theme: { typography: e } }) => (0,styled_components__WEBPACK_IMPORTED_MODULE_1__.css)`\n height: 24px;\n font-size: ${e.t12};\n width: 100%;\n display: flex;\n align-items: center;\n padding: 0 8px;\n background-color: #cbc9e0;\n color: #ffffff;\n `\n);\n(styled_components__WEBPACK_IMPORTED_MODULE_1___default().div)`\n position: absolute;\n top: 20px;\n transform: translateX(-50%);\n width: 300px;\n`;\nconst L7 = styled_components__WEBPACK_IMPORTED_MODULE_1___default().div(\n ({}) => (0,styled_components__WEBPACK_IMPORTED_MODULE_1__.css)`\n display: flex;\n justify-content: space-between;\n `\n), v7 = styled_components__WEBPACK_IMPORTED_MODULE_1___default().div(\n ({}) => (0,styled_components__WEBPACK_IMPORTED_MODULE_1__.css)`\n display: flex;\n justify-content: flex-end;\n `\n), q7 = styled_components__WEBPACK_IMPORTED_MODULE_1___default().div(\n ({}) => (0,styled_components__WEBPACK_IMPORTED_MODULE_1__.css)`\n display: flex;\n gap: 8px;\n `\n), IW = styled_components__WEBPACK_IMPORTED_MODULE_1___default().div(\n ({ theme: e }) => (0,styled_components__WEBPACK_IMPORTED_MODULE_1__.css)`\n padding: ${e.spacings.sp16};\n background-color: ${e.colors.white};\n box-shadow: ${e.shadows.sm};\n position: absolute;\n z-index: 10;\n `\n), DW = styled_components__WEBPACK_IMPORTED_MODULE_1___default().div(\n ({ theme: { spacings: e, colors: t } }) => (0,styled_components__WEBPACK_IMPORTED_MODULE_1__.css)`\n padding: ${e.sp8} 0;\n ${P2} {\n background-color: ${t.LavenderMist};\n }\n `\n), y7 = styled_components__WEBPACK_IMPORTED_MODULE_1___default().div(\n ({ theme: { spacings: e, colors: t } }) => (0,styled_components__WEBPACK_IMPORTED_MODULE_1__.css)`\n padding: ${e.sp12} 0;\n ${P2} {\n background-color: ${t.LavenderMist};\n }\n `\n), HW = styled_components__WEBPACK_IMPORTED_MODULE_1___default().header(\n ({ theme: { spacings: e } }) => (0,styled_components__WEBPACK_IMPORTED_MODULE_1__.css)`\n display: flex;\n justify-content: space-between;\n align-items: center;\n padding-bottom: ${e.sp8};\n user-select: none;\n `\n), VW = styled_components__WEBPACK_IMPORTED_MODULE_1___default().header(\n ({ theme: {} }) => (0,styled_components__WEBPACK_IMPORTED_MODULE_1__.css)`\n display: flex;\n gap: 4px;\n padding-left: 11px;\n `\n);\nstyled_components__WEBPACK_IMPORTED_MODULE_1___default().header(\n ({ theme: { spacings: e } }) => (0,styled_components__WEBPACK_IMPORTED_MODULE_1__.css)`\n margin: 0 0 ${e.sp8} 0;\n `\n);\nconst w7 = styled_components__WEBPACK_IMPORTED_MODULE_1___default().div(\n ({ theme: { borderRadius: e, transitions: t, colors: o } }) => (0,styled_components__WEBPACK_IMPORTED_MODULE_1__.css)`\n padding: 10px;\n border-radius: ${e.base};\n transition: ${t.base};\n cursor: pointer;\n\n &:hover {\n background-color: ${o.backgrounds.whiteSmoke};\n }\n\n .icon-system {\n color: ${o.textIcon.textPrimary};\n }\n `\n), PW = styled_components__WEBPACK_IMPORTED_MODULE_1___default().p(\n ({ theme: e }) => (0,styled_components__WEBPACK_IMPORTED_MODULE_1__.css)`\n font-family: ${e.fontFamily.base};\n font-weight: ${e.fontWeight.regular};\n font-size: ${e.typography.t16};\n color: ${e.colors.black};\n margin: 0;\n width: 100%;\n\n .dropdown div div .input__label {\n display: none;\n }\n .input-container {\n &:has(.input-clear-btn) {\n input {\n padding-left: ${e.spacings.sp8} !important;\n padding-right: 35px !important;\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n }\n }\n input {\n padding-right: 25px !important;\n padding-left: ${e.spacings.sp8} !important;\n }\n .input-clear-btn {\n right: 36px;\n }\n }\n ${so} {\n padding: 0;\n }\n `\n), FW = styled_components__WEBPACK_IMPORTED_MODULE_1___default().div(\n ({ theme: { spacings: e }, $isTime: t }) => (0,styled_components__WEBPACK_IMPORTED_MODULE_1__.css)`\n display: flex;\n justify-content: space-between;\n ${t && (0,styled_components__WEBPACK_IMPORTED_MODULE_1__.css)`\n padding-bottom: ${e.sp8};\n `}\n `\n), XW = styled_components__WEBPACK_IMPORTED_MODULE_1___default().span(\n ({ theme: e }) => (0,styled_components__WEBPACK_IMPORTED_MODULE_1__.css)`\n font-family: ${e.fontFamily.base};\n font-weight: ${e.fontWeight.light};\n font-size: ${e.typography.t12};\n color: ${e.colors.dark};\n `\n), x7 = styled_components__WEBPACK_IMPORTED_MODULE_1___default().div(({}) => (0,styled_components__WEBPACK_IMPORTED_MODULE_1__.css)`\n display: flex;\n justify-content: space-between;\n padding-right: 20px;\n input {\n padding-right: 22px !important;\n padding-left: 8px !important;\n }\n svg {\n width: 12px;\n }\n `), W7 = (styled_components__WEBPACK_IMPORTED_MODULE_1___default().span)`\n padding: 8px;\n`;\n(styled_components__WEBPACK_IMPORTED_MODULE_1___default().span)`\n position: relative;\n`;\nconst R7 = (styled_components__WEBPACK_IMPORTED_MODULE_1___default().div)`\n /* ${yp}{\n justify-content: flex-end;\n } */\n`, B7 = styled_components__WEBPACK_IMPORTED_MODULE_1___default().div(({ theme: { spacings: e } }) => (0,styled_components__WEBPACK_IMPORTED_MODULE_1__.css)`\n padding-top: ${e.sp8};\n label {\n display: unset;\n }\n svg {\n top: 11px !important;\n }\n `), S7 = (styled_components__WEBPACK_IMPORTED_MODULE_1___default().div)`\n display: flex;\n justify-content: space-between;\n label {\n display: unset;\n }\n ${so} {\n padding: 0;\n }\n`;\n(styled_components__WEBPACK_IMPORTED_MODULE_1___default().div)`\n padding: 8px;\n\n header {\n margin: 0px;\n }\n`;\n(styled_components__WEBPACK_IMPORTED_MODULE_1___default().div)``;\n(styled_components__WEBPACK_IMPORTED_MODULE_1___default().div)`\n input {\n z-index: 13;\n }\n label {\n display: unset;\n }\n ${so} {\n padding: 0;\n }\n`;\nstyled_components__WEBPACK_IMPORTED_MODULE_1___default().div(\n ({}) => (0,styled_components__WEBPACK_IMPORTED_MODULE_1__.css)`\n label {\n display: unset;\n }\n ${so} {\n padding: 0;\n }\n `\n);\nconst E7 = styled_components__WEBPACK_IMPORTED_MODULE_1___default()(Y2)`\n cursor: pointer;\n position: relative;\n + * {\n .icon-system {\n cursor: pointer;\n }\n }\n`;\nstyled_components__WEBPACK_IMPORTED_MODULE_1___default().div(\n ({ $isTime: e }) => (0,styled_components__WEBPACK_IMPORTED_MODULE_1__.css)`\n ${e && (0,styled_components__WEBPACK_IMPORTED_MODULE_1__.css)`\n display: flex;\n justify-content: space-between;\n `}\n\n gap:8px;\n padding: 0 24px;\n margin-top: 24px;\n input {\n z-index: 11;\n }\n width: ${e ? "308px" : "306px"};\n `\n);\nstyled_components__WEBPACK_IMPORTED_MODULE_1___default().div(({ theme: e }) => (0,styled_components__WEBPACK_IMPORTED_MODULE_1__.css)``);\nstyled_components__WEBPACK_IMPORTED_MODULE_1___default().div(({ theme: e }) => (0,styled_components__WEBPACK_IMPORTED_MODULE_1__.css)``);\nconst UW = styled_components__WEBPACK_IMPORTED_MODULE_1___default().div(\n ({}) => (0,styled_components__WEBPACK_IMPORTED_MODULE_1__.css)`\n position: absolute;\n bottom: 0;\n `\n), wp = styled_components__WEBPACK_IMPORTED_MODULE_1___default().div(\n ({ theme: e, isDisabled: t, $isTime: o }) => (0,styled_components__WEBPACK_IMPORTED_MODULE_1__.css)`\n .react-datepicker-popper[data-placement^=\'top\'],\n .react-datepicker-popper[data-placement^=\'bottom\'],\n .react-datepicker-popper[data-placement^=\'left\'],\n .react-datepicker-popper[data-placement^=\'right\'] {\n position: fixed !important;\n }\n .align-center,\n .align-left,\n .align-right {\n top: 100%;\n height: fit-content;\n }\n\n .react-datepicker__day-name {\n width: 32px !important;\n height: 32px !important;\n /* padding: 10px; */\n }\n .react-datepicker__day {\n width: 32px !important;\n height: 32px !important;\n font-size: ${e.typography.t12} !important;\n line-height: ${e.lineHeight.lh20};\n }\n .react-datepicker-popper {\n width: min-content;\n }\n ${o && (0,styled_components__WEBPACK_IMPORTED_MODULE_1__.css)`\n .react-datepicker-wrapper {\n position: absolute;\n top: 16px;\n }\n `}\n .react-datepicker__aria-live {\n display: none;\n }\n\n .react-datepicker-popper {\n background-color: ${e.colors.white};\n box-shadow: ${e.shadows.sm};\n padding: ${e.spacings.sp16};\n background-color: ${e.colors.backgrounds.bgPrimary};\n }\n .react-datepicker {\n font-family: ${e.fontFamily.base};\n font-size: ${e.typography.t12};\n line-height: ${e.lineHeight.lh20};\n color: ${e.colors.blue};\n border: none;\n background-color: ${e.colors.backgrounds.bgPrimary};\n border-radius: ${e.borderRadius.base};\n display: flex;\n flex-direction: column;\n position: relative;\n\n &__header {\n text-align: center;\n background-color: ${e.colors.backgrounds.bgPrimary};\n border-bottom: none;\n border-top-left-radius: ${e.borderRadius.base};\n padding: 0px;\n position: relative;\n\n &:not(.react-datepicker__header--has-time-select) {\n border-top-right-radius: ${e.borderRadius.base};\n }\n }\n\n &__day,\n &__day-name {\n display: inline-block;\n margin: 2px;\n }\n\n &__day {\n outline: none;\n display: inline-flex;\n align-items: center;\n justify-content: center;\n width: ${e.itemSize.lg};\n height: ${e.itemSize.lg};\n font-size: ${e.typography.t16};\n font-weight: ${e.fontWeight.regular};\n color: ${e.colors.textIcon.textSecondary};\n border-radius: ${e.borderRadius.base};\n transition: ${e.transitions.base};\n\n &:hover {\n transition: ${e.transitions.base};\n\n background-color: ${e.colors.backgrounds.bgHoverPrimary};\n color: ${e.colors.textIcon.textSecondary};\n }\n\n &-name {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n width: ${e.itemSize.lg};\n height: ${e.itemSize.lg};\n color: ${e.colors.textIcon.textLowemphasis};\n }\n }\n\n &__triangle {\n display: none;\n }\n }\n .react-datepicker__month {\n padding-bottom: 0px !important;\n }\n .react-datepicker__day--selected,\n .react-datepicker__day--in-selecting-range,\n .react-datepicker__day--in-range,\n .react-datepicker__month-text--selected,\n .react-datepicker__month-text--in-selecting-range,\n .react-datepicker__month-text--in-range,\n .react-datepicker__quarter-text--selected,\n .react-datepicker__quarter-text--in-selecting-range,\n .react-datepicker__quarter-text--in-range,\n .react-datepicker__year-text--selected,\n .react-datepicker__year-text--in-selecting-range,\n .react-datepicker__year-text--in-range,\n .react-datepicker__day--keyboard-selected,\n .react-datepicker__month-text--keyboard-selected,\n .react-datepicker__quarter-text--keyboard-selected,\n .react-datepicker__year-text--keyboard-selected {\n border-radius: ${e.borderRadius.base};\n background-color: ${e.colors.backgrounds.bgHoverSecondary};\n color: ${e.colors.buttonText.buttonTextPrimaryPressed};\n\n &:hover {\n background-color: ${e.colors.backgrounds.bgHoverSecondary};\n color: ${e.colors.buttonText.buttonTextPrimaryPressed};\n }\n }\n\n .react-datepicker-popper[data-placement^=\'bottom\']\n .react-datepicker__triangle,\n .react-datepicker-popper[data-placement^=\'top\'] .react-datepicker__triangle,\n .react-datepicker__year-read-view--down-arrow,\n .react-datepicker__month-read-view--down-arrow,\n .react-datepicker__month-year-read-view--down-arrow {\n margin-left: -8px;\n position: absolute;\n }\n\n .react-datepicker-popper[data-placement^=\'bottom\']\n .react-datepicker__triangle,\n .react-datepicker-popper[data-placement^=\'top\'] .react-datepicker__triangle,\n .react-datepicker__year-read-view--down-arrow,\n .react-datepicker__month-read-view--down-arrow,\n .react-datepicker__month-year-read-view--down-arrow,\n .react-datepicker-popper[data-placement^=\'bottom\']\n .react-datepicker__triangle::before,\n .react-datepicker-popper[data-placement^=\'top\']\n .react-datepicker__triangle::before,\n .react-datepicker__year-read-view--down-arrow::before,\n .react-datepicker__month-read-view--down-arrow::before,\n .react-datepicker__month-year-read-view--down-arrow::before {\n box-sizing: content-box;\n position: absolute;\n border: 8px solid transparent;\n height: 0;\n width: 1px;\n }\n\n .react-datepicker-popper[data-placement^=\'bottom\']\n .react-datepicker__triangle::before,\n .react-datepicker-popper[data-placement^=\'top\']\n .react-datepicker__triangle::before,\n .react-datepicker__year-read-view--down-arrow::before,\n .react-datepicker__month-read-view--down-arrow::before,\n .react-datepicker__month-year-read-view--down-arrow::before {\n content: \'\';\n z-index: -1;\n border-width: 8px;\n left: -8px;\n border-bottom-color: ${e.colors.black};\n }\n\n .react-datepicker-popper[data-placement^=\'bottom\']\n .react-datepicker__triangle {\n top: 0;\n margin-top: -8px;\n }\n\n .react-datepicker-popper[data-placement^=\'bottom\']\n .react-datepicker__triangle,\n .react-datepicker-popper[data-placement^=\'bottom\']\n .react-datepicker__triangle::before {\n border-top: none;\n border-bottom-color: ${e.colors.white};\n }\n\n .react-datepicker-popper[data-placement^=\'bottom\']\n .react-datepicker__triangle::before {\n top: -1px;\n border-bottom-color: ${e.colors.white};\n }\n\n .react-datepicker-popper[data-placement^=\'top\'] .react-datepicker__triangle,\n .react-datepicker__year-read-view--down-arrow,\n .react-datepicker__month-read-view--down-arrow,\n .react-datepicker__month-year-read-view--down-arrow {\n bottom: 0;\n margin-bottom: -8px;\n }\n\n .react-datepicker-popper[data-placement^=\'top\'] .react-datepicker__triangle,\n .react-datepicker__year-read-view--down-arrow,\n .react-datepicker__month-read-view--down-arrow,\n .react-datepicker__month-year-read-view--down-arrow,\n .react-datepicker-popper[data-placement^=\'top\']\n .react-datepicker__triangle::before,\n .react-datepicker__year-read-view--down-arrow::before,\n .react-datepicker__month-read-view--down-arrow::before,\n .react-datepicker__month-year-read-view--down-arrow::before {\n border-bottom: none;\n border-top-color: ${e.colors.white};\n }\n\n .react-datepicker-popper[data-placement^=\'top\']\n .react-datepicker__triangle::before,\n .react-datepicker__year-read-view--down-arrow::before,\n .react-datepicker__month-read-view--down-arrow::before,\n .react-datepicker__month-year-read-view--down-arrow::before {\n bottom: -1px;\n border-top-color: ${e.colors.white};\n }\n .react-datepicker--time-only .react-datepicker__triangle {\n left: 35px;\n }\n\n .react-datepicker--time-only .react-datepicker__time-container {\n border-left: 0;\n }\n\n .react-datepicker__year-option:first-of-type,\n .react-datepicker__month-option:first-of-type,\n .react-datepicker__month-year-option:first-of-type {\n border-top-left-radius: ${e.borderRadius.base};\n border-top-right-radius: ${e.borderRadius.base};\n }\n\n .react-datepicker--time-only .react-datepicker__time,\n .react-datepicker--time-only .react-datepicker__time-box {\n border-bottom-left-radius: ${e.borderRadius.base};\n border-bottom-right-radius: ${e.borderRadius.base};\n }\n\n .react-datepicker__day--today,\n .react-datepicker__month-text--today,\n .react-datepicker__quarter-text--today,\n .react-datepicker__year-text--today {\n font-weight: ${e.fontWeight.regular};\n }\n\n .react-datepicker--time-only .react-datepicker__triangle {\n left: 35px;\n }\n\n .react-datepicker--time-only .react-datepicker__time-container {\n border-left: 0;\n }\n\n .react-datepicker__triangle {\n position: absolute;\n left: 50px;\n }\n\n .react-datepicker-popper {\n z-index: 10;\n }\n\n .react-datepicker-popper[data-placement^=\'bottom\'] {\n margin-top: 10px;\n }\n\n .react-datepicker-popper[data-placement=\'bottom-end\']\n .react-datepicker__triangle,\n .react-datepicker-popper[data-placement=\'top-end\']\n .react-datepicker__triangle {\n left: auto;\n right: 50px;\n }\n\n .react-datepicker-popper[data-placement^=\'top\'] {\n margin-bottom: 10px;\n }\n\n .react-datepicker-popper[data-placement^=\'right\'] {\n margin-left: 8px;\n }\n\n .react-datepicker-popper[data-placement^=\'right\']\n .react-datepicker__triangle {\n left: auto;\n right: 42px;\n }\n\n .react-datepicker-popper[data-placement^=\'left\'] {\n margin-right: 8px;\n }\n\n .react-datepicker-popper[data-placement^=\'left\']\n .react-datepicker__triangle {\n left: 42px;\n right: auto;\n }\n .react-datepicker__header--time {\n padding-bottom: 8px;\n padding-left: 5px;\n padding-right: 5px;\n }\n\n .react-datepicker__header--time:not(.react-datepicker__header--time--only) {\n border-top-left-radius: 0;\n }\n\n .react-datepicker__year-dropdown-container--select,\n .react-datepicker__month-dropdown-container--select,\n .react-datepicker__month-year-dropdown-container--select,\n .react-datepicker__year-dropdown-container--scroll,\n .react-datepicker__month-dropdown-container--scroll,\n .react-datepicker__month-year-dropdown-container--scroll {\n display: inline-block;\n margin: 0 2px;\n }\n\n .react-datepicker__current-month,\n .react-datepicker-time__header,\n .react-datepicker-year-header {\n margin-top: 0;\n color: ${e.colors.black};\n font-weight: ${e.fontWeight.bold};\n font-size: ${e.typography.t16};\n }\n\n .react-datepicker-time__header {\n text-overflow: ellipsis;\n white-space: nowrap;\n overflow: hidden;\n }\n\n .react-datepicker__navigation {\n background: none;\n line-height: 1.7rem;\n text-align: center;\n cursor: pointer;\n position: absolute;\n top: 10px;\n padding: 0;\n border: 0.45rem solid transparent;\n z-index: 1;\n height: 10px;\n width: 10px;\n text-indent: -999em;\n overflow: hidden;\n }\n\n .react-datepicker__navigation--previous {\n left: 10px;\n border-right-color: ${e.colors.black};\n }\n\n .react-datepicker__navigation--previous:hover {\n border-right-color: ${e.colors.black};\n }\n\n .react-datepicker__navigation--previous--disabled,\n .react-datepicker__navigation--previous--disabled:hover {\n border-right-color: ${e.colors.darkGray};\n cursor: default;\n }\n\n .react-datepicker__navigation--next {\n right: 10px;\n border-left-color: ${e.colors.black};\n }\n\n .react-datepicker__navigation--next--with-time:not(\n .react-datepicker__navigation--next--with-today-button\n ) {\n right: 95px;\n }\n\n .react-datepicker__navigation--next:hover {\n border-left-color: ${e.colors.black};\n }\n\n .react-datepicker__navigation--next--disabled,\n .react-datepicker__navigation--next--disabled:hover {\n border-left-color: ${e.colors.darkGray};\n cursor: default;\n }\n\n .react-datepicker__navigation--years {\n position: relative;\n top: 0;\n display: block;\n margin-left: auto;\n margin-right: auto;\n }\n\n .react-datepicker__navigation--years-previous {\n top: 4px;\n border-top-color: ${e.colors.black};\n }\n\n .react-datepicker__navigation--years-previous:hover {\n border-top-color: ${e.colors.black};\n }\n\n .react-datepicker__navigation--years-upcoming {\n top: -4px;\n border-bottom-color: ${e.colors.black};\n }\n\n .react-datepicker__navigation--years-upcoming:hover {\n border-bottom-color: ${e.colors.black};\n }\n\n .react-datepicker__month-container {\n float: left;\n }\n\n .react-datepicker__year {\n margin: 0.4rem;\n text-align: center;\n }\n\n .react-datepicker__year-wrapper {\n display: flex;\n flex-wrap: wrap;\n max-width: 180px;\n }\n\n .react-datepicker__year .react-datepicker__year-text {\n display: inline-block;\n width: 4rem;\n margin: 2px;\n }\n\n .react-datepicker__month {\n padding-bottom: 1rem;\n text-align: center;\n }\n\n .react-datepicker__month .react-datepicker__month-text,\n .react-datepicker__month .react-datepicker__quarter-text {\n display: inline-block;\n width: 4rem;\n margin: 2px;\n }\n\n .react-datepicker__input-time-container {\n clear: both;\n width: 100%;\n float: left;\n margin: 5px 0 10px 15px;\n text-align: left;\n }\n\n .react-datepicker__input-time-container .react-datepicker-time__caption {\n display: inline-block;\n }\n\n .react-datepicker__input-time-container\n .react-datepicker-time__input-container {\n display: inline-block;\n }\n\n .react-datepicker__input-time-container\n .react-datepicker-time__input-container\n .react-datepicker-time__input {\n display: inline-block;\n margin-left: 10px;\n }\n\n .react-datepicker__input-time-container\n .react-datepicker-time__input-container\n .react-datepicker-time__input\n input {\n width: 85px;\n }\n\n .react-datepicker__input-time-container\n .react-datepicker-time__input-container\n .react-datepicker-time__input\n input[type=\'time\']::-webkit-inner-spin-button,\n .react-datepicker__input-time-container\n .react-datepicker-time__input-container\n .react-datepicker-time__input\n input[type=\'time\']::-webkit-outer-spin-button {\n -webkit-appearance: none;\n margin: 0;\n }\n\n .react-datepicker__input-time-container\n .react-datepicker-time__input-container\n .react-datepicker-time__input\n input[type=\'time\'] {\n -moz-appearance: textfield;\n }\n\n .react-datepicker__input-time-container\n .react-datepicker-time__input-container\n .react-datepicker-time__delimiter {\n margin-left: 5px;\n display: inline-block;\n }\n\n .react-datepicker__time-container {\n float: right;\n border-left: none;\n width: 85px;\n }\n\n .react-datepicker__time-container--with-today-button {\n display: inline;\n border: 1px solid ${e.colors.black};\n border-radius: 0.3rem;\n position: absolute;\n right: -72px;\n top: 0;\n }\n .react-datepicker__today-button {\n border-top: none !important;\n text-align: left !important;\n }\n\n .react-datepicker__time-container .react-datepicker__time {\n position: relative;\n background: ${e.colors.white};\n border-bottom-right-radius: ${e.borderRadius.base};\n }\n\n .react-datepicker__time-container\n .react-datepicker__time\n .react-datepicker__time-box {\n width: 85px;\n overflow-x: hidden;\n margin: 0 auto;\n text-align: center;\n border-bottom-right-radius: ${e.borderRadius.base};\n }\n\n .react-datepicker__time-container\n .react-datepicker__time\n .react-datepicker__time-box\n ul.react-datepicker__time-list {\n list-style: none;\n margin: 0;\n height: calc(195px + (1.7rem / 2));\n overflow-y: scroll;\n padding-right: 0;\n padding-left: 0;\n width: 100%;\n box-sizing: content-box;\n }\n\n .react-datepicker__time-container\n .react-datepicker__time\n .react-datepicker__time-box\n ul.react-datepicker__time-list\n li.react-datepicker__time-list-item {\n height: 30px;\n padding: 5px 10px;\n white-space: nowrap;\n }\n\n .react-datepicker__time-container\n .react-datepicker__time\n .react-datepicker__time-box\n ul.react-datepicker__time-list\n li.react-datepicker__time-list-item:hover {\n cursor: pointer;\n background-color: ${e.colors.white};\n }\n\n .react-datepicker__time-container\n .react-datepicker__time\n .react-datepicker__time-box\n ul.react-datepicker__time-list\n li.react-datepicker__time-list-item--selected {\n background-color: ${e.colors.blue};\n color: ${e.colors.white};\n font-weight: bold;\n }\n\n .react-datepicker__time-container\n .react-datepicker__time\n .react-datepicker__time-box\n ul.react-datepicker__time-list\n li.react-datepicker__time-list-item--selected:hover {\n background-color: ${e.colors.blue};\n }\n\n .react-datepicker__time-container\n .react-datepicker__time\n .react-datepicker__time-box\n ul.react-datepicker__time-list\n li.react-datepicker__time-list-item--disabled {\n color: ${e.colors.darkGray};\n }\n\n .react-datepicker__week-number {\n color: ${e.colors.darkGray};\n display: inline-block;\n width: 1.7rem;\n line-height: 1.7rem;\n text-align: center;\n margin: 0.166rem;\n }\n\n .react-datepicker__week-number.react-datepicker__week-number--clickable {\n cursor: pointer;\n }\n\n .react-datepicker__week-number.react-datepicker__week-number--clickable:hover {\n border-radius: ${e.borderRadius.base};\n background-color: ${e.colors.white};\n }\n\n .react-datepicker__day-names,\n .react-datepicker__week {\n white-space: nowrap;\n user-select: none;\n }\n\n .react-datepicker__time-name {\n color: ${e.colors.black};\n display: inline-block;\n width: 1.7rem;\n line-height: 1.7rem;\n text-align: center;\n margin: 0.166rem;\n }\n\n .react-datepicker__month--selected,\n .react-datepicker__month--in-selecting-range,\n .react-datepicker__month--in-range,\n .react-datepicker__quarter--selected,\n .react-datepicker__quarter--in-selecting-range,\n .react-datepicker__quarter--in-range {\n border-radius: ${e.borderRadius.base};\n background-color: ${e.colors.blue};\n color: ${e.colors.white};\n }\n\n .react-datepicker__month--selected:hover,\n .react-datepicker__month--in-selecting-range:hover,\n .react-datepicker__month--in-range:hover,\n .react-datepicker__quarter--selected:hover,\n .react-datepicker__quarter--in-selecting-range:hover,\n .react-datepicker__quarter--in-range:hover {\n background-color: ${e.colors.scampi};\n }\n\n .react-datepicker__month--disabled,\n .react-datepicker__quarter--disabled {\n color: ${e.colors.darkGray};\n pointer-events: none;\n }\n\n .react-datepicker__month--disabled:hover,\n .react-datepicker__quarter--disabled:hover {\n cursor: default;\n background-color: transparent;\n }\n\n .react-datepicker__day,\n .react-datepicker__month-text,\n .react-datepicker__quarter-text,\n .react-datepicker__year-text {\n cursor: pointer;\n }\n\n .react-datepicker__month-text:hover,\n .react-datepicker__quarter-text:hover,\n .react-datepicker__year-text:hover {\n border-radius: ${e.borderRadius.base};\n background-color: ${e.colors.white};\n }\n\n .react-datepicker__day--highlighted,\n .react-datepicker__month-text--highlighted,\n .react-datepicker__quarter-text--highlighted,\n .react-datepicker__year-text--highlighted {\n border-radius: ${e.borderRadius.base};\n background-color: ${e.colors.mediumSeaGreen};\n color: ${e.colors.white};\n }\n\n .react-datepicker__day--highlighted:hover,\n .react-datepicker__month-text--highlighted:hover,\n .react-datepicker__quarter-text--highlighted:hover,\n .react-datepicker__year-text--highlighted:hover {\n background-color: ${e.colors.mediumSeaGreen};\n }\n\n .react-datepicker__day--highlighted-custom-1,\n .react-datepicker__month-text--highlighted-custom-1,\n .react-datepicker__quarter-text--highlighted-custom-1,\n .react-datepicker__year-text--highlighted-custom-1 {\n color: ${e.colors.pink};\n }\n\n .react-datepicker__day--highlighted-custom-2,\n .react-datepicker__month-text--highlighted-custom-2,\n .react-datepicker__quarter-text--highlighted-custom-2,\n .react-datepicker__year-text--highlighted-custom-2 {\n color: ${e.colors.green};\n }\n\n .react-datepicker__day--in-selecting-range,\n .react-datepicker__month-text--in-selecting-range,\n .react-datepicker__quarter-text--in-selecting-range,\n .react-datepicker__year-text--in-selecting-range {\n background-color: ${`rgba( ${e.colors.blue}, 0.5)`};\n }\n\n .react-datepicker__month--selecting-range .react-datepicker__day--in-range,\n .react-datepicker__month--selecting-range\n .react-datepicker__month-text--in-range,\n .react-datepicker__month--selecting-range\n .react-datepicker__quarter-text--in-range,\n .react-datepicker__month--selecting-range\n .react-datepicker__year-text--in-range {\n background-color: ${e.colors.lavenderGrey};\n color: ${e.colors.black};\n }\n\n .react-datepicker__day--disabled,\n .react-datepicker__month-text--disabled,\n .react-datepicker__quarter-text--disabled,\n .react-datepicker__year-text--disabled {\n cursor: default;\n color: ${e.colors.darkGray};\n }\n\n .react-datepicker__day--disabled:hover,\n .react-datepicker__month-text--disabled:hover,\n .react-datepicker__quarter-text--disabled:hover,\n .react-datepicker__year-text--disabled:hover {\n background-color: transparent;\n }\n\n .react-datepicker__quarter-text.react-datepicker__month--selected:hover,\n .react-datepicker__quarter-text.react-datepicker__month--in-range:hover,\n .react-datepicker__quarter-text.react-datepicker__quarter--selected:hover,\n .react-datepicker__quarter-text.react-datepicker__quarter--in-range:hover {\n background-color: ${e.colors.blue};\n }\n\n .react-datepicker__month-text:hover,\n .react-datepicker__quarter-text:hover {\n background-color: ${e.colors.white};\n }\n\n .react-datepicker__input-container {\n position: relative;\n display: inline-block;\n width: 100%;\n }\n\n .react-datepicker__year-read-view,\n .react-datepicker__month-read-view,\n .react-datepicker__month-year-read-view {\n border: 1px solid transparent;\n border-radius: ${e.borderRadius.base};\n }\n\n .react-datepicker__year-read-view:hover,\n .react-datepicker__month-read-view:hover,\n .react-datepicker__month-year-read-view:hover {\n cursor: pointer;\n }\n\n .react-datepicker__year-read-view:hover\n .react-datepicker__year-read-view--down-arrow,\n .react-datepicker__year-read-view:hover\n .react-datepicker__month-read-view--down-arrow,\n .react-datepicker__month-read-view:hover\n .react-datepicker__year-read-view--down-arrow,\n .react-datepicker__month-read-view:hover\n .react-datepicker__month-read-view--down-arrow,\n .react-datepicker__month-year-read-view:hover\n .react-datepicker__year-read-view--down-arrow,\n .react-datepicker__month-year-read-view:hover\n .react-datepicker__month-read-view--down-arrow {\n border-top-color: transparent;\n }\n\n .react-datepicker__year-read-view--down-arrow,\n .react-datepicker__month-read-view--down-arrow,\n .react-datepicker__month-year-read-view--down-arrow {\n border-top-color: ${e.colors.black};\n float: right;\n margin-left: 20px;\n top: 8px;\n position: relative;\n border-width: 0.45rem;\n }\n\n .react-datepicker__year-dropdown,\n .react-datepicker__month-dropdown,\n .react-datepicker__month-year-dropdown {\n background-color: ${e.colors.white};\n position: absolute;\n width: 50%;\n left: 25%;\n top: 30px;\n z-index: 1;\n text-align: center;\n border-radius: ${e.borderRadius.base};\n border: 1px solid ${e.colors.black};\n }\n\n .react-datepicker__year-dropdown:hover,\n .react-datepicker__month-dropdown:hover,\n .react-datepicker__month-year-dropdown:hover {\n cursor: pointer;\n }\n\n .react-datepicker__year-dropdown--scrollable,\n .react-datepicker__month-dropdown--scrollable,\n .react-datepicker__month-year-dropdown--scrollable {\n height: 150px;\n overflow-y: scroll;\n }\n\n .react-datepicker__year-option,\n .react-datepicker__month-option,\n .react-datepicker__month-year-option {\n line-height: 20px;\n width: 100%;\n display: block;\n margin-left: auto;\n margin-right: auto;\n }\n\n .react-datepicker__year-option:last-of-type,\n .react-datepicker__month-option:last-of-type,\n .react-datepicker__month-year-option:last-of-type {\n -webkit-user-select: none;\n -moz-user-select: none;\n -ms-user-select: none;\n user-select: none;\n border-bottom-left-radius: ${e.borderRadius.base};\n border-bottom-right-radius: ${e.borderRadius.base};\n }\n\n .react-datepicker__year-option:hover,\n .react-datepicker__month-option:hover,\n .react-datepicker__month-year-option:hover {\n background-color: ${e.colors.black};\n }\n\n .react-datepicker__year-option:hover\n .react-datepicker__navigation--years-upcoming,\n .react-datepicker__month-option:hover\n .react-datepicker__navigation--years-upcoming,\n .react-datepicker__month-year-option:hover\n .react-datepicker__navigation--years-upcoming {\n border-bottom-color: ${e.colors.black};\n }\n\n .react-datepicker__year-option:hover\n .react-datepicker__navigation--years-previous,\n .react-datepicker__month-option:hover\n .react-datepicker__navigation--years-previous,\n .react-datepicker__month-year-option:hover\n .react-datepicker__navigation--years-previous {\n border-top-color: ${e.colors.black};\n }\n\n .react-datepicker__year-option--selected,\n .react-datepicker__month-option--selected,\n .react-datepicker__month-year-option--selected {\n position: absolute;\n left: 15px;\n }\n\n .react-datepicker__close-icon {\n cursor: pointer;\n background-color: transparent;\n border: 0;\n outline: 0;\n padding: 0 6px 0 0;\n position: absolute;\n top: 0;\n right: 0;\n height: 100%;\n display: table-cell;\n vertical-align: middle;\n }\n\n .react-datepicker__today-button {\n background: ${e.colors.white};\n border-top: 1px solid ${e.colors.black};\n cursor: pointer;\n text-align: center;\n font-weight: bold;\n padding: 0px;\n clear: left;\n }\n\n .react-datepicker__portal {\n position: fixed;\n width: 100vw;\n height: 100vh;\n background-color: ${`rgba(${e.colors.black}, 0.8)`};\n left: 0;\n top: 0;\n justify-content: center;\n align-items: center;\n display: flex;\n z-index: 2147483647;\n }\n\n .react-datepicker__portal .react-datepicker__day-name,\n .react-datepicker__portal .react-datepicker__day,\n .react-datepicker__portal .react-datepicker__time-name {\n width: 3rem;\n line-height: 3rem;\n }\n\n @media (max-width: 400px), (max-height: 550px) {\n .react-datepicker__portal .react-datepicker__day-name,\n .react-datepicker__portal .react-datepicker__day,\n .react-datepicker__portal .react-datepicker__time-name {\n width: 2rem;\n line-height: 2rem;\n }\n }\n\n .react-datepicker__portal .react-datepicker__current-month,\n .react-datepicker__portal .react-datepicker-time__header {\n font-size: ${e.typography.t20};\n }\n\n .react-datepicker__portal .react-datepicker__navigation {\n border: 0.81rem solid transparent;\n }\n\n .react-datepicker__portal .react-datepicker__navigation--previous {\n border-right-color: ${e.colors.black};\n }\n\n .react-datepicker__portal .react-datepicker__navigation--previous:hover {\n border-right-color: unset;\n }\n\n .react-datepicker__portal .react-datepicker__navigation--previous--disabled,\n .react-datepicker__portal\n .react-datepicker__navigation--previous--disabled:hover {\n border-right-color: ${e.colors.grey};\n cursor: default;\n }\n\n .react-datepicker__portal .react-datepicker__navigation--next {\n border-left-color: ${e.colors.black};\n }\n\n .react-datepicker__portal .react-datepicker__navigation--next:hover {\n border-left-color: unset;\n }\n\n .react-datepicker__portal .react-datepicker__navigation--next--disabled,\n .react-datepicker__portal\n .react-datepicker__navigation--next--disabled:hover {\n border-left-color: ${e.colors.grey};\n cursor: default;\n }\n\n .react-datepicker__day--outside-month {\n color: ${e.colors.textIcon.textDisabledOnbg};\n }\n ${t && (0,styled_components__WEBPACK_IMPORTED_MODULE_1__.css)`\n ${V5} {\n cursor: default;\n color: ${e.colors.textIcon.textDisabledNobg};\n background-color: ${e.colors.backgrounds.bgDisabledPrimary};\n }\n svg {\n color: #8f8f95;\n }\n `}\n `\n);\n(styled_components__WEBPACK_IMPORTED_MODULE_1___default().div)`\n width: 250px;\n`;\nstyled_components__WEBPACK_IMPORTED_MODULE_1___default().div(() => (0,styled_components__WEBPACK_IMPORTED_MODULE_1__.css)`\n display: flex;\n flex-direction: column;\n gap: 8px;\n `);\nstyled_components__WEBPACK_IMPORTED_MODULE_1___default().div(() => (0,styled_components__WEBPACK_IMPORTED_MODULE_1__.css)`\n display: flex;\n gap: 8px;\n justify-content: flex-end;\n `);\nconst xp = styled_components__WEBPACK_IMPORTED_MODULE_1___default().div(\n ({ theme: { spacings: e } }) => (0,styled_components__WEBPACK_IMPORTED_MODULE_1__.css)`\n margin-bottom: ${e.sp8};\n `\n), YW = (styled_components__WEBPACK_IMPORTED_MODULE_1___default().div)`\n display: flex;\n justify-content: flex-start;\n align-items: center;\n gap: 4px;\n flex-wrap: wrap;\n`;\n(styled_components__WEBPACK_IMPORTED_MODULE_1___default().div)`\n width: 400px;\n`;\nstyled_components__WEBPACK_IMPORTED_MODULE_1___default().div(\n ({ theme: {} }) => (0,styled_components__WEBPACK_IMPORTED_MODULE_1__.css)`\n display: flex;\n flex-direction: column;\n gap: 8px;\n `\n);\nconst GW = styled_components__WEBPACK_IMPORTED_MODULE_1___default().div(({ theme: {} }) => (0,styled_components__WEBPACK_IMPORTED_MODULE_1__.css)``), k7 = styled_components__WEBPACK_IMPORTED_MODULE_1___default().div(({ theme: {} }) => (0,styled_components__WEBPACK_IMPORTED_MODULE_1__.css)``);\nstyled_components__WEBPACK_IMPORTED_MODULE_1___default().div(\n ({ theme: {} }) => (0,styled_components__WEBPACK_IMPORTED_MODULE_1__.css)`\n ${xp} {\n label {\n display: none;\n }\n }\n `\n);\nstyled_components__WEBPACK_IMPORTED_MODULE_1___default().div(\n ({ theme: { spacings: e } }) => (0,styled_components__WEBPACK_IMPORTED_MODULE_1__.css)`\n margin: ${e.sp8};\n `\n);\nstyled_components__WEBPACK_IMPORTED_MODULE_1___default().div(\n ({ theme: { spacings: e } }) => (0,styled_components__WEBPACK_IMPORTED_MODULE_1__.css)`\n display: flex;\n justify-content: flex-end;\n gap: 8px;\n padding: 0 ${e.sp8};\n `\n);\nconst Vi = styled_components__WEBPACK_IMPORTED_MODULE_1___default()(Y2)(({ iconRight: e }) => (0,styled_components__WEBPACK_IMPORTED_MODULE_1__.css)`\n cursor: pointer;\n position: relative;\n + * {\n .icon-system {\n cursor: pointer;\n }\n }\n ${e && e == "ChevronUp" && (0,styled_components__WEBPACK_IMPORTED_MODULE_1__.css)`\n border: 1px solid #312783;\n `}\n `), QW = styled_components__WEBPACK_IMPORTED_MODULE_1___default().div(\n ({ theme: {} }) => (0,styled_components__WEBPACK_IMPORTED_MODULE_1__.css)`\n position: relative;\n input {\n padding-right: 48px;\n }\n `\n);\nstyled_components__WEBPACK_IMPORTED_MODULE_1___default().div(\n ({ horizontal: e, outside: t, inside: o }) => (0,styled_components__WEBPACK_IMPORTED_MODULE_1__.css)`\n svg {\n position: absolute;\n right: 32px;\n top: 28px;\n z-index: 1;\n opacity: 0.2;\n width: 12px;\n cursor: pointer;\n }\n ${e && (0,styled_components__WEBPACK_IMPORTED_MODULE_1__.css)`\n svg {\n position: absolute;\n right: 30px;\n top: 10px;\n z-index: 1;\n opacity: 0.2;\n width: 12px;\n cursor: pointer;\n }\n `}\n ${t && (0,styled_components__WEBPACK_IMPORTED_MODULE_1__.css)`\n svg {\n position: absolute;\n right: 30px;\n top: 30px;\n z-index: 1;\n width: 12px;\n opacity: 0.2;\n cursor: pointer;\n }\n `}\n ${o && (0,styled_components__WEBPACK_IMPORTED_MODULE_1__.css)`\n svg {\n position: absolute;\n right: 30px;\n top: 10px;\n z-index: 1;\n width: 12px;\n opacity: 0.2;\n cursor: pointer;\n }\n `}\n `\n);\nconst ZW = (styled_components__WEBPACK_IMPORTED_MODULE_1___default().ul)`\n padding-left: 20px;\n padding-right: 10px;\n margin: 0;\n`, jW = styled_components__WEBPACK_IMPORTED_MODULE_1___default()(Fl)`\n margin-bottom: 5px;\n padding: 0;\n display: list-item;\n &:last-child {\n margin-bottom: 0;\n }\n`;\n(styled_components__WEBPACK_IMPORTED_MODULE_1___default().div)`\n width: 250px;\n`;\nconst KW = styled_components__WEBPACK_IMPORTED_MODULE_1___default().div(() => (0,styled_components__WEBPACK_IMPORTED_MODULE_1__.css)`\n display: flex;\n flex-direction: column;\n gap:8px;\n `);\nstyled_components__WEBPACK_IMPORTED_MODULE_1___default().div(() => (0,styled_components__WEBPACK_IMPORTED_MODULE_1__.css)`\n display: flex;\n gap:8px;\n justify-content: flex-end;\n `);\n(styled_components__WEBPACK_IMPORTED_MODULE_1___default().div)`\n width: 518px;\n`;\nconst JW = styled_components__WEBPACK_IMPORTED_MODULE_1___default().div(\n ({ theme: {} }) => (0,styled_components__WEBPACK_IMPORTED_MODULE_1__.css)`\n position: relative;\n .input-clear-btn {\n right: 32px;\n }\n .input-wrapper input {\n padding-right: 34px;\n }\n `\n), _W = styled_components__WEBPACK_IMPORTED_MODULE_1___default()(Y2)(\n ({ theme: { colors: e } }) => (0,styled_components__WEBPACK_IMPORTED_MODULE_1__.css)`\n border-bottom: 1px solid ${e.border.borderTertiary};\n background-color: ${e.backgrounds.bgPrimary};\n border-radius: 0px;\n color: ${e.textIcon.textLowemphasis};\n &:hover:not(:disabled):not(:focus) {\n border: 1px solid transparent;\n border-bottom: 1px solid ${e.border.borderTertiary};\n }\n &:hover:focus {\n border: 1px solid transparent;\n border-bottom: 1px solid ${e.border.borderTertiary};\n }\n &:hover {\n border: 1px solid transparent;\n border-bottom: 1px solid ${e.border.borderTertiary};\n }\n &:focus {\n border: 1px solid transparent;\n border-bottom: 1px solid ${e.border.borderTertiary};\n }\n `\n);\nfunction G4(e) {\n const t = (0,react__WEBPACK_IMPORTED_MODULE_0__.useRef)(null), [o, n] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(""), {\n onChange: r,\n value: i,\n getValue: a,\n iconSize: s,\n inputType: l,\n resetValues: p,\n handleClearFn: d,\n ...b\n } = e, M = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)(\n (A) => {\n const { value: z } = A.currentTarget;\n n(z), r && r(A), a && a(z);\n },\n [n, r, a]\n ), u = () => {\n d && d(), n(""), a && a("");\n };\n return (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => {\n p && u();\n }, [p]), (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => {\n i && n(i);\n }, [i]), /* @__PURE__ */ c(JW, { children: l != "base" ? /* @__PURE__ */ c(\n _W,\n {\n ...b,\n onChange: M,\n colorIconLeft: "#797980",\n iconLeft: "Search",\n value: o,\n ref: t,\n handleClearFn: u,\n iconSize: s || "xxs",\n label: e.label\n }\n ) : /* @__PURE__ */ c(\n Y2,\n {\n ...b,\n onChange: M,\n iconLeft: "Search",\n colorIconLeft: "#797980",\n value: o,\n ref: t,\n handleClearFn: u,\n iconSize: s || "xxs"\n }\n ) });\n}\nconst $W = styled_components__WEBPACK_IMPORTED_MODULE_1___default().div(\n ({ theme: {} }) => (0,styled_components__WEBPACK_IMPORTED_MODULE_1__.css)`\n \n width: 100%;\n height: 100%;\n align-self: stretch;\n border-radius: 4px;\n `\n), eR = styled_components__WEBPACK_IMPORTED_MODULE_1___default().div(\n ({ theme: {} }) => (0,styled_components__WEBPACK_IMPORTED_MODULE_1__.css)`\n width: 100%;\n height: 100%;\n align-self: stretch;\n border-radius: 4px;\n `\n);\n(styled_components__WEBPACK_IMPORTED_MODULE_1___default().div)`\n width: 300px;\n`;\nvar N7 = Number.isNaN || function(t) {\n return typeof t == "number" && t !== t;\n};\nfunction tR(e, t) {\n return !!(e === t || N7(e) && N7(t));\n}\nfunction oR(e, t) {\n if (e.length !== t.length)\n return !1;\n for (var o = 0; o < e.length; o++)\n if (!tR(e[o], t[o]))\n return !1;\n return !0;\n}\nfunction p2(e, t) {\n t === void 0 && (t = oR);\n var o, n = [], r, i = !1;\n function a() {\n for (var s = [], l = 0; l < arguments.length; l++)\n s[l] = arguments[l];\n return i && o === this && t(s, n) || (r = e.apply(this, s), i = !0, o = this, n = s), r;\n }\n return a;\n}\nvar rR = typeof performance == "object" && typeof performance.now == "function", T7 = rR ? function() {\n return performance.now();\n} : function() {\n return Date.now();\n};\nfunction I7(e) {\n cancelAnimationFrame(e.id);\n}\nfunction nR(e, t) {\n var o = T7();\n function n() {\n T7() - o >= t ? e.call(null) : r.id = requestAnimationFrame(n);\n }\n var r = {\n id: requestAnimationFrame(n)\n };\n return r;\n}\nvar Pi = -1;\nfunction D7(e) {\n if (e === void 0 && (e = !1), Pi === -1 || e) {\n var t = document.createElement("div"), o = t.style;\n o.width = "50px", o.height = "50px", o.overflow = "scroll", document.body.appendChild(t), Pi = t.offsetWidth - t.clientWidth, document.body.removeChild(t);\n }\n return Pi;\n}\nvar y3 = null;\nfunction H7(e) {\n if (e === void 0 && (e = !1), y3 === null || e) {\n var t = document.createElement("div"), o = t.style;\n o.width = "50px", o.height = "50px", o.overflow = "scroll", o.direction = "rtl";\n var n = document.createElement("div"), r = n.style;\n return r.width = "100px", r.height = "100px", t.appendChild(n), document.body.appendChild(t), t.scrollLeft > 0 ? y3 = "positive-descending" : (t.scrollLeft = 1, t.scrollLeft === 0 ? y3 = "negative" : y3 = "positive-ascending"), document.body.removeChild(t), y3;\n }\n return y3;\n}\n"production";\nvar iR = 150, aR = function(t, o) {\n return t;\n}, Un = null, Yn = null;\n false && (0);\nfunction sR(e) {\n var t, o = e.getItemOffset, n = e.getEstimatedTotalSize, r = e.getItemSize, i = e.getOffsetForIndexAndAlignment, a = e.getStartIndexForOffset, s = e.getStopIndexForStartIndex, l = e.initInstanceProps, p = e.shouldResetStyleCacheOnItemSizeChange, d = e.validateProps;\n return t = /* @__PURE__ */ function(b) {\n V4(M, b);\n function M(A) {\n var z;\n return z = b.call(this, A) || this, z._instanceProps = l(z.props, o0(z)), z._outerRef = void 0, z._resetIsScrollingTimeoutId = null, z.state = {\n instance: o0(z),\n isScrolling: !1,\n scrollDirection: "forward",\n scrollOffset: typeof z.props.initialScrollOffset == "number" ? z.props.initialScrollOffset : 0,\n scrollUpdateWasRequested: !1\n }, z._callOnItemsRendered = void 0, z._callOnItemsRendered = p2(function(f, O, h, g) {\n return z.props.onItemsRendered({\n overscanStartIndex: f,\n overscanStopIndex: O,\n visibleStartIndex: h,\n visibleStopIndex: g\n });\n }), z._callOnScroll = void 0, z._callOnScroll = p2(function(f, O, h) {\n return z.props.onScroll({\n scrollDirection: f,\n scrollOffset: O,\n scrollUpdateWasRequested: h\n });\n }), z._getItemStyle = void 0, z._getItemStyle = function(f) {\n var O = z.props, h = O.direction, g = O.itemSize, v = O.layout, L = z._getItemStyleCache(p && g, p && v, p && h), y;\n if (L.hasOwnProperty(f))\n y = L[f];\n else {\n var B = o(z.props, f, z._instanceProps), X = r(z.props, f, z._instanceProps), F = h === "horizontal" || v === "horizontal", T = h === "rtl", w = F ? B : 0;\n L[f] = y = {\n position: "absolute",\n left: T ? void 0 : w,\n right: T ? w : void 0,\n top: F ? 0 : B,\n height: F ? "100%" : X,\n width: F ? X : "100%"\n };\n }\n return y;\n }, z._getItemStyleCache = void 0, z._getItemStyleCache = p2(function(f, O, h) {\n return {};\n }), z._onScrollHorizontal = function(f) {\n var O = f.currentTarget, h = O.clientWidth, g = O.scrollLeft, v = O.scrollWidth;\n z.setState(function(L) {\n if (L.scrollOffset === g)\n return null;\n var y = z.props.direction, B = g;\n if (y === "rtl")\n switch (H7()) {\n case "negative":\n B = -g;\n break;\n case "positive-descending":\n B = v - h - g;\n break;\n }\n return B = Math.max(0, Math.min(B, v - h)), {\n isScrolling: !0,\n scrollDirection: L.scrollOffset < B ? "forward" : "backward",\n scrollOffset: B,\n scrollUpdateWasRequested: !1\n };\n }, z._resetIsScrollingDebounced);\n }, z._onScrollVertical = function(f) {\n var O = f.currentTarget, h = O.clientHeight, g = O.scrollHeight, v = O.scrollTop;\n z.setState(function(L) {\n if (L.scrollOffset === v)\n return null;\n var y = Math.max(0, Math.min(v, g - h));\n return {\n isScrolling: !0,\n scrollDirection: L.scrollOffset < y ? "forward" : "backward",\n scrollOffset: y,\n scrollUpdateWasRequested: !1\n };\n }, z._resetIsScrollingDebounced);\n }, z._outerRefSetter = function(f) {\n var O = z.props.outerRef;\n z._outerRef = f, typeof O == "function" ? O(f) : O != null && typeof O == "object" && O.hasOwnProperty("current") && (O.current = f);\n }, z._resetIsScrollingDebounced = function() {\n z._resetIsScrollingTimeoutId !== null && I7(z._resetIsScrollingTimeoutId), z._resetIsScrollingTimeoutId = nR(z._resetIsScrolling, iR);\n }, z._resetIsScrolling = function() {\n z._resetIsScrollingTimeoutId = null, z.setState({\n isScrolling: !1\n }, function() {\n z._getItemStyleCache(-1, null);\n });\n }, z;\n }\n M.getDerivedStateFromProps = function(z, f) {\n return cR(z, f), d(z), null;\n };\n var u = M.prototype;\n return u.scrollTo = function(z) {\n z = Math.max(0, z), this.setState(function(f) {\n return f.scrollOffset === z ? null : {\n scrollDirection: f.scrollOffset < z ? "forward" : "backward",\n scrollOffset: z,\n scrollUpdateWasRequested: !0\n };\n }, this._resetIsScrollingDebounced);\n }, u.scrollToItem = function(z, f) {\n f === void 0 && (f = "auto");\n var O = this.props, h = O.itemCount, g = O.layout, v = this.state.scrollOffset;\n z = Math.max(0, Math.min(z, h - 1));\n var L = 0;\n if (this._outerRef) {\n var y = this._outerRef;\n g === "vertical" ? L = y.scrollWidth > y.clientWidth ? D7() : 0 : L = y.scrollHeight > y.clientHeight ? D7() : 0;\n }\n this.scrollTo(i(this.props, z, f, v, this._instanceProps, L));\n }, u.componentDidMount = function() {\n var z = this.props, f = z.direction, O = z.initialScrollOffset, h = z.layout;\n if (typeof O == "number" && this._outerRef != null) {\n var g = this._outerRef;\n f === "horizontal" || h === "horizontal" ? g.scrollLeft = O : g.scrollTop = O;\n }\n this._callPropsCallbacks();\n }, u.componentDidUpdate = function() {\n var z = this.props, f = z.direction, O = z.layout, h = this.state, g = h.scrollOffset, v = h.scrollUpdateWasRequested;\n if (v && this._outerRef != null) {\n var L = this._outerRef;\n if (f === "horizontal" || O === "horizontal")\n if (f === "rtl")\n switch (H7()) {\n case "negative":\n L.scrollLeft = -g;\n break;\n case "positive-ascending":\n L.scrollLeft = g;\n break;\n default:\n var y = L.clientWidth, B = L.scrollWidth;\n L.scrollLeft = B - y - g;\n break;\n }\n else\n L.scrollLeft = g;\n else\n L.scrollTop = g;\n }\n this._callPropsCallbacks();\n }, u.componentWillUnmount = function() {\n this._resetIsScrollingTimeoutId !== null && I7(this._resetIsScrollingTimeoutId);\n }, u.render = function() {\n var z = this.props, f = z.children, O = z.className, h = z.direction, g = z.height, v = z.innerRef, L = z.innerElementType, y = z.innerTagName, B = z.itemCount, X = z.itemData, F = z.itemKey, T = F === void 0 ? aR : F, w = z.layout, H = z.outerElementType, C = z.outerTagName, q = z.style, m = z.useIsScrolling, k = z.width, x = this.state.isScrolling, N = h === "horizontal" || w === "horizontal", V = N ? this._onScrollHorizontal : this._onScrollVertical, R = this._getRangeToRender(), I = R[0], j = R[1], U = [];\n if (B > 0)\n for (var _ = I; _ <= j; _++)\n U.push((0,react__WEBPACK_IMPORTED_MODULE_0__.createElement)(f, {\n data: X,\n key: T(_, X),\n index: _,\n isScrolling: m ? x : void 0,\n style: this._getItemStyle(_)\n }));\n var r1 = n(this.props, this._instanceProps);\n return (0,react__WEBPACK_IMPORTED_MODULE_0__.createElement)(H || C || "div", {\n className: O,\n onScroll: V,\n ref: this._outerRefSetter,\n style: a0({\n position: "relative",\n height: g,\n width: k,\n overflow: "auto",\n WebkitOverflowScrolling: "touch",\n willChange: "transform",\n direction: h\n }, q)\n }, (0,react__WEBPACK_IMPORTED_MODULE_0__.createElement)(L || y || "div", {\n children: U,\n ref: v,\n style: {\n height: N ? "100%" : r1,\n pointerEvents: x ? "none" : void 0,\n width: N ? r1 : "100%"\n }\n }));\n }, u._callPropsCallbacks = function() {\n if (typeof this.props.onItemsRendered == "function") {\n var z = this.props.itemCount;\n if (z > 0) {\n var f = this._getRangeToRender(), O = f[0], h = f[1], g = f[2], v = f[3];\n this._callOnItemsRendered(O, h, g, v);\n }\n }\n if (typeof this.props.onScroll == "function") {\n var L = this.state, y = L.scrollDirection, B = L.scrollOffset, X = L.scrollUpdateWasRequested;\n this._callOnScroll(y, B, X);\n }\n }, u._getRangeToRender = function() {\n var z = this.props, f = z.itemCount, O = z.overscanCount, h = this.state, g = h.isScrolling, v = h.scrollDirection, L = h.scrollOffset;\n if (f === 0)\n return [0, 0, 0, 0];\n var y = a(this.props, L, this._instanceProps), B = s(this.props, y, L, this._instanceProps), X = !g || v === "backward" ? Math.max(1, O) : 1, F = !g || v === "forward" ? Math.max(1, O) : 1;\n return [Math.max(0, y - X), Math.max(0, Math.min(f - 1, B + F)), y, B];\n }, M;\n }(react__WEBPACK_IMPORTED_MODULE_0__.PureComponent), t.defaultProps = {\n direction: "ltr",\n itemData: void 0,\n layout: "vertical",\n overscanCount: 2,\n useIsScrolling: !1\n }, t;\n}\nvar cR = function(t, o) {\n var n = t.children, r = t.direction, i = t.height, a = t.layout, s = t.innerTagName, l = t.outerTagName, p = t.width, d = o.instance;\n if (false) { var b; }\n}, lR = 50, k3 = function(t, o, n) {\n var r = t, i = r.itemSize, a = n.itemMetadataMap, s = n.lastMeasuredIndex;\n if (o > s) {\n var l = 0;\n if (s >= 0) {\n var p = a[s];\n l = p.offset + p.size;\n }\n for (var d = s + 1; d <= o; d++) {\n var b = i(d);\n a[d] = {\n offset: l,\n size: b\n }, l += b;\n }\n n.lastMeasuredIndex = o;\n }\n return a[o];\n}, pR = function(t, o, n) {\n var r = o.itemMetadataMap, i = o.lastMeasuredIndex, a = i > 0 ? r[i].offset : 0;\n return a >= n ? Wp(t, o, i, 0, n) : dR(t, o, Math.max(0, i), n);\n}, Wp = function(t, o, n, r, i) {\n for (; r <= n; ) {\n var a = r + Math.floor((n - r) / 2), s = k3(t, a, o).offset;\n if (s === i)\n return a;\n s < i ? r = a + 1 : s > i && (n = a - 1);\n }\n return r > 0 ? r - 1 : 0;\n}, dR = function(t, o, n, r) {\n for (var i = t.itemCount, a = 1; n < i && k3(t, n, o).offset < r; )\n n += a, a *= 2;\n return Wp(t, o, Math.min(n, i - 1), Math.floor(n / 2), r);\n}, V7 = function(t, o) {\n var n = t.itemCount, r = o.itemMetadataMap, i = o.estimatedItemSize, a = o.lastMeasuredIndex, s = 0;\n if (a >= n && (a = n - 1), a >= 0) {\n var l = r[a];\n s = l.offset + l.size;\n }\n var p = n - a - 1, d = p * i;\n return s + d;\n}, P7 = /* @__PURE__ */ sR({\n getItemOffset: function(t, o, n) {\n return k3(t, o, n).offset;\n },\n getItemSize: function(t, o, n) {\n return n.itemMetadataMap[o].size;\n },\n getEstimatedTotalSize: V7,\n getOffsetForIndexAndAlignment: function(t, o, n, r, i, a) {\n var s = t.direction, l = t.height, p = t.layout, d = t.width, b = s === "horizontal" || p === "horizontal", M = b ? d : l, u = k3(t, o, i), A = V7(t, i), z = Math.max(0, Math.min(A - M, u.offset)), f = Math.max(0, u.offset - M + u.size + a);\n switch (n === "smart" && (r >= f - M && r <= z + M ? n = "auto" : n = "center"), n) {\n case "start":\n return z;\n case "end":\n return f;\n case "center":\n return Math.round(f + (z - f) / 2);\n case "auto":\n default:\n return r >= f && r <= z ? r : r < f ? f : z;\n }\n },\n getStartIndexForOffset: function(t, o, n) {\n return pR(t, n, o);\n },\n getStopIndexForStartIndex: function(t, o, n, r) {\n for (var i = t.direction, a = t.height, s = t.itemCount, l = t.layout, p = t.width, d = i === "horizontal" || l === "horizontal", b = d ? p : a, M = k3(t, o, r), u = n + b, A = M.offset + M.size, z = o; z < s - 1 && A < u; )\n z++, A += k3(t, z, r).size;\n return z;\n },\n initInstanceProps: function(t, o) {\n var n = t, r = n.estimatedItemSize, i = {\n itemMetadataMap: {},\n estimatedItemSize: r || lR,\n lastMeasuredIndex: -1\n };\n return o.resetAfterIndex = function(a, s) {\n s === void 0 && (s = !0), i.lastMeasuredIndex = Math.min(i.lastMeasuredIndex, a - 1), o._getItemStyleCache(-1), s && o.forceUpdate();\n }, i;\n },\n shouldResetStyleCacheOnItemSizeChange: !1,\n validateProps: function(t) {\n var o = t.itemSize;\n if (false)\n {}\n }\n});\nfunction F7(e) {\n return typeof e == "number" && isFinite(e) && Math.floor(e) === e;\n}\nfunction bR(e) {\n var t = e.lastRenderedStartIndex, o = e.lastRenderedStopIndex, n = e.startIndex, r = e.stopIndex;\n return !(n > o || r < t);\n}\nfunction MR(e) {\n for (var t = e.isItemLoaded, o = e.itemCount, n = e.minimumBatchSize, r = e.startIndex, i = e.stopIndex, a = [], s = null, l = null, p = r; p <= i; p++) {\n var d = t(p);\n d ? l !== null && (a.push(s, l), s = l = null) : (l = p, s === null && (s = p));\n }\n if (l !== null) {\n for (var b = Math.min(Math.max(l, s + n - 1), o - 1), M = l + 1; M <= b && !t(M); M++)\n l = M;\n a.push(s, l);\n }\n if (a.length)\n for (; a[1] - a[0] + 1 < n && a[0] > 0; ) {\n var u = a[0] - 1;\n if (!t(u))\n a[0] = u;\n else\n break;\n }\n return a;\n}\nvar AR = function(e, t) {\n if (!(e instanceof t))\n throw new TypeError("Cannot call a class as a function");\n}, uR = function() {\n function e(t, o) {\n for (var n = 0; n < o.length; n++) {\n var r = o[n];\n r.enumerable = r.enumerable || !1, r.configurable = !0, "value" in r && (r.writable = !0), Object.defineProperty(t, r.key, r);\n }\n }\n return function(t, o, n) {\n return o && e(t.prototype, o), n && e(t, n), t;\n };\n}(), zR = function(e, t) {\n if (typeof t != "function" && t !== null)\n throw new TypeError("Super expression must either be null or a function, not " + typeof t);\n e.prototype = Object.create(t && t.prototype, {\n constructor: {\n value: e,\n enumerable: !1,\n writable: !0,\n configurable: !0\n }\n }), t && (Object.setPrototypeOf ? Object.setPrototypeOf(e, t) : e.__proto__ = t);\n}, X7 = function(e, t) {\n if (!e)\n throw new ReferenceError("this hasn\'t been initialised - super() hasn\'t been called");\n return t && (typeof t == "object" || typeof t == "function") ? t : e;\n}, hR = function(e) {\n zR(t, e);\n function t() {\n var o, n, r, i;\n AR(this, t);\n for (var a = arguments.length, s = Array(a), l = 0; l < a; l++)\n s[l] = arguments[l];\n return i = (n = (r = X7(this, (o = t.__proto__ || Object.getPrototypeOf(t)).call.apply(o, [this].concat(s))), r), r._lastRenderedStartIndex = -1, r._lastRenderedStopIndex = -1, r._memoizedUnloadedRanges = [], r._onItemsRendered = function(p) {\n var d = p.visibleStartIndex, b = p.visibleStopIndex;\n false && (0), r._lastRenderedStartIndex = d, r._lastRenderedStopIndex = b, r._ensureRowsLoaded(d, b);\n }, r._setRef = function(p) {\n r._listRef = p;\n }, n), X7(r, i);\n }\n return uR(t, [{\n key: "resetloadMoreItemsCache",\n value: function() {\n var n = arguments.length > 0 && arguments[0] !== void 0 ? arguments[0] : !1;\n this._memoizedUnloadedRanges = [], n && this._ensureRowsLoaded(this._lastRenderedStartIndex, this._lastRenderedStopIndex);\n }\n }, {\n key: "componentDidMount",\n value: function() {\n false && 0;\n }\n }, {\n key: "render",\n value: function() {\n var n = this.props.children;\n return n({\n onItemsRendered: this._onItemsRendered,\n ref: this._setRef\n });\n }\n }, {\n key: "_ensureRowsLoaded",\n value: function(n, r) {\n var i = this.props, a = i.isItemLoaded, s = i.itemCount, l = i.minimumBatchSize, p = l === void 0 ? 10 : l, d = i.threshold, b = d === void 0 ? 15 : d, M = MR({\n isItemLoaded: a,\n itemCount: s,\n minimumBatchSize: p,\n startIndex: Math.max(0, n - b),\n stopIndex: Math.min(s - 1, r + b)\n });\n (this._memoizedUnloadedRanges.length !== M.length || this._memoizedUnloadedRanges.some(function(u, A) {\n return M[A] !== u;\n })) && (this._memoizedUnloadedRanges = M, this._loadUnloadedRanges(M));\n }\n }, {\n key: "_loadUnloadedRanges",\n value: function(n) {\n for (var r = this, i = this.props.loadMoreItems || this.props.loadMoreRows, a = function(p) {\n var d = n[p], b = n[p + 1], M = i(d, b);\n M != null && M.then(function() {\n if (bR({\n lastRenderedStartIndex: r._lastRenderedStartIndex,\n lastRenderedStopIndex: r._lastRenderedStopIndex,\n startIndex: d,\n stopIndex: b\n })) {\n if (r._listRef == null)\n return;\n typeof r._listRef.resetAfterIndex == "function" ? r._listRef.resetAfterIndex(d, !0) : (typeof r._listRef._getItemStyleCache == "function" && r._listRef._getItemStyleCache(-1), r._listRef.forceUpdate());\n }\n });\n }, s = 0; s < n.length; s += 2)\n a(s);\n }\n }]), t;\n}(react__WEBPACK_IMPORTED_MODULE_0__.PureComponent);\nconst Rp = styled_components__WEBPACK_IMPORTED_MODULE_1___default().div(\n ({ theme: { typography: e, lineHeight: t, colors: o, fontWeight: n } }) => (0,styled_components__WEBPACK_IMPORTED_MODULE_1__.css)`\n display: flex;\n justify-content: flex-start;\n align-items: center;\n font-size: ${e.t10};\n line-height: ${t.lh20};\n color: ${o.textIcon.textHighemphasis};\n font-weight: ${n.light};\n\n & > div:first-child {\n margin-right: 8px;\n }\n `\n), OR = (styled_components__WEBPACK_IMPORTED_MODULE_1___default().div)`\n display: flex;\n align-items: center;\n`, Bp = styled_components__WEBPACK_IMPORTED_MODULE_1___default().span(\n ({ theme: { colors: e, typography: t, lineHeight: o, fontWeight: n } }) => {\n const r = t.t12;\n return (0,styled_components__WEBPACK_IMPORTED_MODULE_1__.css)`\n margin-left: 4px;\n font-size: ${r};\n font-weight: ${n.light};\n line-height: ${o.lh20};\n color:${e.textIcon.textPrimary};\n `;\n }\n), U7 = 4, ln = styled_components__WEBPACK_IMPORTED_MODULE_1___default().div(\n ({ theme: {} }) => (0,styled_components__WEBPACK_IMPORTED_MODULE_1__.css)`\n input {\n cursor: pointer;\n }\n `\n), pn = styled_components__WEBPACK_IMPORTED_MODULE_1___default().div(\n ({ theme: { colors: e } }) => (0,styled_components__WEBPACK_IMPORTED_MODULE_1__.css)`\n .icon-system {\n color: ${e.textIcon.textPrimary};\n }\n `\n), dn = styled_components__WEBPACK_IMPORTED_MODULE_1___default().div(({ theme: {} }) => (0,styled_components__WEBPACK_IMPORTED_MODULE_1__.css)``), Y7 = styled_components__WEBPACK_IMPORTED_MODULE_1___default().div(\n ({ theme: { colors: e }, isContentLarge: t, contentHeight: o }) => (0,styled_components__WEBPACK_IMPORTED_MODULE_1__.css)`\n background: ${e.backgrounds.bgPrimary};\n ${t == "true" && (0,styled_components__WEBPACK_IMPORTED_MODULE_1__.css)`\n .List {\n height: fit-content !important;\n }\n .List .ListWrapDiv {\n height: ${o - 4}px !important;\n }\n `}\n `\n), G7 = styled_components__WEBPACK_IMPORTED_MODULE_1___default().div(\n ({ theme: { spacings: e, lineHeight: t } }) => (0,styled_components__WEBPACK_IMPORTED_MODULE_1__.css)`\n span {\n margin-left: ${e.sp8};\n }\n ${Bp} {\n line-height: ${t.lh16};\n }\n `\n), Q7 = styled_components__WEBPACK_IMPORTED_MODULE_1___default().div(\n () => (0,styled_components__WEBPACK_IMPORTED_MODULE_1__.css)`\n /* padding-bottom: 3px; */\n position: relative;\n top: -3px;\n height: 16px;\n `\n), Z7 = styled_components__WEBPACK_IMPORTED_MODULE_1___default().div(\n ({ theme: { lineHeight: e } }) => (0,styled_components__WEBPACK_IMPORTED_MODULE_1__.css)`\n ${Rp} {\n line-height: ${e.lh16};\n }\n `\n), fR = styled_components__WEBPACK_IMPORTED_MODULE_1___default().div(\n ({ theme: { spacings: e } }) => (0,styled_components__WEBPACK_IMPORTED_MODULE_1__.css)`\n display: flex;\n height: 24px;\n align-items: center;\n flex-shrink: 0;\n border-radius: 4px;\n padding: 0px ${e.sp8};\n width: auto;\n `\n), $a = styled_components__WEBPACK_IMPORTED_MODULE_1___default().div(\n ({ theme: { colors: e, spacings: t }, $subLabel: o, $isSelected: n, $isScroll: r }) => (0,styled_components__WEBPACK_IMPORTED_MODULE_1__.css)`\n display: flex;\n height: auto;\n align-items: center;\n flex-shrink: 0;\n padding: 3.5px ${t.sp8};\n gap: ${t.sp8};\n width: auto;\n cursor: pointer;\n\n ${r && (0,styled_components__WEBPACK_IMPORTED_MODULE_1__.css)`\n margin-right: 8px;\n `}\n\n ${o && (0,styled_components__WEBPACK_IMPORTED_MODULE_1__.css)`\n height: 40px;\n `}\n\n ${n && (0,styled_components__WEBPACK_IMPORTED_MODULE_1__.css)`\n background: ${e.backgrounds.bgSelected};\n `}\n :nth-child(0) {\n display: flex;\n justify-content: flex-end;\n width: 100%;\n }\n\n &:hover {\n background: ${e.backgrounds.bgHoverPrimary};\n }\n &:focus-visible {\n border: 1px solid ${e.border.borderFocused};\n outline: none;\n }\n &:hover ${e5} {\n display: block;\n }\n `\n), gR = styled_components__WEBPACK_IMPORTED_MODULE_1___default().label(\n ({ theme: { fontFamily: e, typography: t, fontWeight: o } }) => (0,styled_components__WEBPACK_IMPORTED_MODULE_1__.css)`\n display: inline-block;\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n flex-direction: column;\n justify-content: center;\n color: #797980;\n font-family: ${e.base};\n font-size: ${t.t12};\n font-weight: ${o.medium};\n line-height: 16.8px;\n cursor: pointer;\n `\n), Se = styled_components__WEBPACK_IMPORTED_MODULE_1___default().label(\n ({\n theme: { colors: e, fontFamily: t, typography: o, lineHeight: n, fontWeight: r }\n }) => (0,styled_components__WEBPACK_IMPORTED_MODULE_1__.css)`\n display: inline-block;\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n flex-direction: column;\n justify-content: center;\n flex: 1 0 0;\n overflow: hidden;\n color: ${e.textIcon.textPrimary};\n word-break: break-all;\n font-family: ${t.base};\n font-size: ${o.t12};\n font-weight: ${r.light};\n line-height: ${n.lh17};\n max-height: 17px;\n cursor: pointer;\n label {\n cursor: pointer;\n }\n `\n), j7 = styled_components__WEBPACK_IMPORTED_MODULE_1___default().div(\n ({ theme: {} }) => (0,styled_components__WEBPACK_IMPORTED_MODULE_1__.css)`\n display: inline-block;\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n\n cursor: pointer;\n label {\n cursor: pointer;\n }\n `\n), K7 = styled_components__WEBPACK_IMPORTED_MODULE_1___default().label(\n ({\n theme: { colors: e, fontFamily: t, typography: o, lineHeight: n, fontWeight: r }\n }) => (0,styled_components__WEBPACK_IMPORTED_MODULE_1__.css)`\n display: flex;\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n flex-direction: column;\n justify-content: center;\n flex: 1 0 0;\n overflow: hidden;\n color: ${e.list.listTextLowemphasis};\n word-break: break-all;\n font-family: ${t.base};\n font-size: ${o.t10};\n font-weight: ${r.light};\n line-height: 16.8px;\n cursor: pointer;\n label {\n cursor: pointer;\n }\n `\n), J7 = styled_components__WEBPACK_IMPORTED_MODULE_1___default().label(\n ({\n theme: { colors: e, fontFamily: t, typography: o, lineHeight: n, fontWeight: r }\n }) => (0,styled_components__WEBPACK_IMPORTED_MODULE_1__.css)`\n display: inline-block;\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n justify-content: center;\n overflow: hidden;\n color: ${e.textIcon.textPrimary};\n word-break: break-all;\n font-family: ${t.base};\n font-size: ${o.t12};\n font-weight: ${r.light};\n line-height: ${n.lh20};\n cursor: pointer;\n label {\n cursor: pointer;\n }\n `\n), CR = styled_components__WEBPACK_IMPORTED_MODULE_1___default().div(\n ({ theme: { colors: e, borderRadius: t } }) => (0,styled_components__WEBPACK_IMPORTED_MODULE_1__.css)`\n ::-webkit-scrollbar {\n height: ${U7}px;\n width: ${U7}px;\n }\n ::-webkit-scrollbar-track {\n background-color: ${e.scroll.scrollBgPrimary};\n border-radius: ${t.xl};\n }\n\n ::-webkit-scrollbar-thumb {\n background-color: ${e.scroll.scrollBgDefault};\n }\n /* Handle on hover */\n ::-webkit-scrollbar-thumb:hover {\n background-color: ${e.scroll.scrollBgHover};\n }\n ::-webkit-scrollbar-thumb:active {\n background-color: ${e.scroll.scrollBgPressed};\n }\n `\n), Fi = styled_components__WEBPACK_IMPORTED_MODULE_1___default().div(({ theme: {} }) => (0,styled_components__WEBPACK_IMPORTED_MODULE_1__.css)``), bn = styled_components__WEBPACK_IMPORTED_MODULE_1___default().span(\n ({ $width: e }) => (0,styled_components__WEBPACK_IMPORTED_MODULE_1__.css)`\n display: inline-block;\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n width: ${e ? "40px" : "180px"};\n line-height: 17px;\n `\n), Mn = styled_components__WEBPACK_IMPORTED_MODULE_1___default().span(\n ({ theme: { colors: e }, isTimeZone: t }) => (0,styled_components__WEBPACK_IMPORTED_MODULE_1__.css)`\n padding-left: 16px;\n display: inline-block;\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n line-height: 17px;\n\n ${!t && (0,styled_components__WEBPACK_IMPORTED_MODULE_1__.css)`\n color: ${e.textIcon.textLowemphasis};\n `}\n ${t && (0,styled_components__WEBPACK_IMPORTED_MODULE_1__.css)`\n color: ${e.textIcon.textMediumemphasis};\n `}\n `\n), _7 = styled_components__WEBPACK_IMPORTED_MODULE_1___default().div(\n ({ theme: { spacings: e } }) => (0,styled_components__WEBPACK_IMPORTED_MODULE_1__.css)`\n .icon-flag {\n img {\n width: ${e.sp16};\n height: ${e.sp16};\n }\n }\n `\n), e5 = styled_components__WEBPACK_IMPORTED_MODULE_1___default().div(\n ({ theme: {} }) => (0,styled_components__WEBPACK_IMPORTED_MODULE_1__.css)`\n display: none;\n width: 100%;\n position: absolute;\n left: 207px;\n z-index: 2;\n top: 0;\n `\n), mR = styled_components__WEBPACK_IMPORTED_MODULE_1___default().div(\n ({ theme: { colors: e } }) => (0,styled_components__WEBPACK_IMPORTED_MODULE_1__.css)`\n div {\n overflow: visible !important;\n /* background: ${e.backgrounds.bgPrimary}; */\n }\n ${$a} {\n margin-right: 0;\n }\n `\n), $7 = styled_components__WEBPACK_IMPORTED_MODULE_1___default().div(\n ({ theme: { borderRadius: e, colors: t } }) => (0,styled_components__WEBPACK_IMPORTED_MODULE_1__.css)`\n .logo-svg {\n display: flex;\n padding: 2.667px;\n justify-content: center;\n align-items: center;\n background: ${t.white};\n border-radius: ${e.circle};\n border: 0.667px solid #f4f4f4;\n svg {\n border-radius: ${e.circle};\n }\n }\n `\n);\nstyled_components__WEBPACK_IMPORTED_MODULE_1___default().div(\n ({ theme: {} }) => (0,styled_components__WEBPACK_IMPORTED_MODULE_1__.css)`\n button {\n width: 20px;\n height: 20px;\n padding: 5px;\n div {\n width: auto;\n }\n svg {\n width: 10px;\n height: 10px;\n }\n }\n `\n);\nconst ge = styled_components__WEBPACK_IMPORTED_MODULE_1___default().div(\n ({ theme: { itemSize: e, colors: t, borderRadius: o, transitions: n, spacings: r } }) => (0,styled_components__WEBPACK_IMPORTED_MODULE_1__.css)`\n display: flex;\n align-items: center;\n justify-content: center;\n align-self: start;\n width: ${e.xxs};\n height: ${e.xxs};\n border: 1px solid ${t.border.borderPrimary};\n border-radius: ${o.sm};\n transition: ${n.base};\n box-sizing: border-box;\n background-color: ${t.backgrounds.bgPrimary};\n padding: ${r.sp2};\n .icon-system {\n opacity: 0;\n color: ${t.textIcon.textTertiary};\n transition: ${n.base};\n\n > svg {\n width: 9px;\n }\n }\n `\n), LR = styled_components__WEBPACK_IMPORTED_MODULE_1___default().div(() => (0,styled_components__WEBPACK_IMPORTED_MODULE_1__.css)``), vR = styled_components__WEBPACK_IMPORTED_MODULE_1___default().label(\n ({ theme: { colors: e, spacings: t }, $isReadOnly: o, $isError: n, $isRtl: r }) => (0,styled_components__WEBPACK_IMPORTED_MODULE_1__.css)`\n display: flex;\n align-items: center;\n cursor: pointer;\n width: 100%;\n user-select: none;\n gap: ${t.sp8};\n &:hover {\n ${ge} {\n border-color: ${e.border.borderSecondary};\n }\n }\n\n ${o && (0,styled_components__WEBPACK_IMPORTED_MODULE_1__.css)`\n ${g4}:checked + ${ge} {\n background-color: ${e.backgrounds.bgReadOnly};\n border-color: ${e.backgrounds.bgReadOnly};\n .icon-system {\n color: ${e.textIcon.textTertiary};\n }\n }\n `}\n\n ${n && (0,styled_components__WEBPACK_IMPORTED_MODULE_1__.css)`\n ${ge} {\n background-color: ${e.backgrounds.bgPrimary};\n border-color: ${e.border.borderError};\n\n .icon-system {\n color: ${e.textIcon.textTertiary};\n }\n }\n `}\n\n ${r && (0,styled_components__WEBPACK_IMPORTED_MODULE_1__.css)`\n flex-direction: row-reverse;\n `}\n `\n), e9 = styled_components__WEBPACK_IMPORTED_MODULE_1___default().span(\n ({ theme: e }) => (0,styled_components__WEBPACK_IMPORTED_MODULE_1__.css)`\n font-size: ${e.typography.t14};\n font-weight: ${e.fontWeight.light};\n line-height: ${e.lineHeight.lh22};\n color: ${e.colors.textIcon.textHighemphasis};\n padding-left: ${e.spacings.sp4};\n padding-right: ${e.spacings.sp4};\n `\n), qR = styled_components__WEBPACK_IMPORTED_MODULE_1___default().span(\n ({ theme: e }) => (0,styled_components__WEBPACK_IMPORTED_MODULE_1__.css)`\n font-size: ${e.typography.t10};\n font-weight: ${e.fontWeight.regular};\n line-height: ${e.lineHeight.lh14};\n color: ${e.colors.textIcon.textError};\n `\n), yR = styled_components__WEBPACK_IMPORTED_MODULE_1___default().div(\n ({}) => (0,styled_components__WEBPACK_IMPORTED_MODULE_1__.css)`\n display: flex;\n flex-direction: column;\n gap: 4px;\n `\n), g4 = styled_components__WEBPACK_IMPORTED_MODULE_1___default().input(\n ({ theme: { colors: e, transitions: t }, $isError: o }) => (0,styled_components__WEBPACK_IMPORTED_MODULE_1__.css)`\n opacity: 0;\n display: none;\n\n &:checked + ${ge} {\n background-color: ${e.backgrounds.bgTertiary};\n border-color: ${e.backgrounds.bgTertiary};\n transition: ${t.base};\n\n .icon-system {\n opacity: 1;\n transition: ${t.base};\n }\n }\n\n &:focus + ${ge} {\n transition: ${t.base};\n }\n\n &:disabled {\n & ~ * {\n cursor: default;\n }\n\n & + ${ge} {\n background-color: ${e.backgrounds.bgDisabledPrimary};\n border-color: ${e.border.borderDisabledOnbg}; // #D2D2D5;\n\n .icon-system,\n + ${e9}, ~ ${e9} ${ir} {\n color: ${e.textIcon.textDisabledOnbg};\n }\n }\n }\n\n ${o && (0,styled_components__WEBPACK_IMPORTED_MODULE_1__.css)`\n background-color: ${e.backgrounds.bgPrimary};\n border-color: ${e.border.borderError};\n\n &:checked + ${ge} {\n background-color: ${e.backgrounds.bgPrimary};\n border-color: ${e.border.borderError};\n &::after {\n background-color: ${e.backgrounds.bgPrimary};\n border-color: ${e.border.borderError};\n }\n }\n `}\n `\n), wR = styled_components__WEBPACK_IMPORTED_MODULE_1___default().label(\n ({ theme: { typography: e, fontWeight: t, lineHeight: o, colors: n } }) => (0,styled_components__WEBPACK_IMPORTED_MODULE_1__.css)`\n font-size: ${e.t10};\n font-weight: ${t.light};\n line-height: ${o.lh18};\n color: ${n.textIcon.textHighemphasis};\n `\n), Sp = (e) => {\n const {\n label: t,\n customIcon: o,\n isReadOnly: n,\n isError: r,\n isDisabled: i,\n isRequired: a,\n isRtl: s,\n className: l,\n inputType: p = "checkbox",\n ...d\n } = e;\n return n && (d.disabled = !0), /* @__PURE__ */ e1(yR, { children: [\n /* @__PURE__ */ e1(\n vR,\n {\n $isRtl: s,\n $isReadOnly: n,\n $isError: r,\n className: l,\n role: "checkbox",\n "aria-checked": d.checked,\n "aria-label": t == null ? void 0 : t.toString(),\n "aria-labelledby": t == null ? void 0 : t.toString(),\n tabIndex: 0,\n children: [\n /* @__PURE__ */ e1(LR, { $isRtl: s, children: [\n /* @__PURE__ */ c(\n g4,\n {\n disabled: i,\n $isError: r,\n name: t == null ? void 0 : t.toString(),\n type: p,\n id: t == null ? void 0 : t.toString(),\n ...d\n }\n ),\n /* @__PURE__ */ c(ge, { children: o && /* @__PURE__ */ c(Z1, { name: o, size: "xxxs" }) })\n ] }),\n t && /* @__PURE__ */ c(wR, { htmlFor: t == null ? void 0 : t.toString(), children: t }),\n !a && /* @__PURE__ */ c(\n nr,\n {\n color: "#767676",\n variant: "label-sm-regular",\n element: "label",\n children: "Optional"\n }\n )\n ]\n }\n ),\n (d == null ? void 0 : d.errorText) && /* @__PURE__ */ c(qR, { children: d == null ? void 0 : d.errorText })\n ] });\n}, xR = (e, t) => {\n const { isPartlyOnly: o, ...n } = e;\n return /* @__PURE__ */ c(\n Sp,\n {\n ...n,\n customIcon: o ? "Minus" : "CheckMark",\n ref: t,\n inputType: "checkbox"\n }\n );\n}, yt = (0,react__WEBPACK_IMPORTED_MODULE_0__.forwardRef)(xR), WR = styled_components__WEBPACK_IMPORTED_MODULE_1___default()(Sp)(\n ({ theme: { colors: e, transitions: t, borderRadius: o } }) => (0,styled_components__WEBPACK_IMPORTED_MODULE_1__.css)`\n ${ge} {\n border-radius: ${o.circle};\n padding: 2px;\n\n &:after {\n content: \'\';\n display: block;\n width: 100%;\n height: 100%;\n opacity: 0;\n border-radius: ${o.circle};\n transition: ${t.base};\n background-color: ${e.backgrounds.bgTertiary};\n }\n }\n\n ${g4}:checked + ${ge} {\n background-color: ${e.backgrounds.bgPrimary};\n\n &:after {\n opacity: 1;\n transition: ${t.base};\n }\n }\n\n ${g4}:disabled {\n &:checked + ${ge} {\n &:after {\n background-color: ${e.backgrounds.bgTertiary};\n }\n }\n }\n `\n), RR = (e, t) => /* @__PURE__ */ c(WR, { ...e, inputType: "radio", ref: t }), An = (0,react__WEBPACK_IMPORTED_MODULE_0__.forwardRef)(RR), BR = () => /* @__PURE__ */ e1(\n "svg",\n {\n width: "24",\n height: "24",\n viewBox: "0 0 24 24",\n fill: "none",\n xmlns: "http://www.w3.org/2000/svg",\n xmlnsXlink: "http://www.w3.org/1999/xlink",\n children: [\n /* @__PURE__ */ c("rect", { width: "24", height: "24", fill: "url(#pattern0)" }),\n /* @__PURE__ */ e1("defs", { children: [\n /* @__PURE__ */ c(\n "pattern",\n {\n id: "pattern0",\n patternContentUnits: "objectBoundingBox",\n width: "1",\n height: "1",\n children: /* @__PURE__ */ c("use", { xlinkHref: "#image0", transform: "scale(0.004)" })\n }\n ),\n /* @__PURE__ */ c(\n "image",\n {\n id: "image0",\n width: "250",\n height: "250",\n xlinkHref: "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAPoAAAD6CAYAAACI7Fo9AAAag0lEQVR4Ae1daZdVRZbdb8hMBlmFYIuKHwoF51IR6KpmSBRFUQQhwb/U/6H7S/+AAkywe3VLDmitBrRJluJqVKgqQLuEXuUAmk2+nN7LXieGTCjJzPfuFOfeu+9aKLx3I+LcfWK/iBsn4uxKawQz4EUEiEChEagW+un4cESACBgESHR2BCJQAgRI9BI4mY9IBEh09gEiUAIESPQSOJmPSARIdPYBIlACBEj0EjiZj0gESHT2ASJQAgRI9BI4mY9IBEh09gEiUAIESPQSOJmPSARIdPYBIlACBEj0EjiZj0gESHT2ASJQAgRI9BI4mY9IBEh09gEiUAIESPQSOJmPSARIdPYBIlACBEj0EjiZj0gESHT2ASJQAgRI9BI4mY9IBEh09gEiUAIESPQSOJmPSARIdPYBIlACBEj0EjiZj0gESHT2ASJQAgRI9BI4mY9IBEh09gEiUAIESPQSOJmPSARIdPYBIlACBEj0EjiZj0gESHT2ASJQAgRI9BI4mY9IBOqEYHEEZmaAVgvAzOL3ZnZHBajVMmuNDeUcARK9DQdWa0B1BYBKGzdndUsLaN3WZVJWj852OkeARF8AMxnJq3Xgh1vAv/27HdA1cL3ZAlYsA/buAJZWdU00FoCTXwVEgERvA/xmDfjHfwIufQNUq24a30a5NG6pVAD5AapVgeF/Bnq3As1RTuPTwLpIdXIxbgFvCqmmJoAHHwL6dtsb5b1YyB7qj9jU3QXIqP7ehwDowQU8yK88AuwmHol5/i+ExiRw8FU7ik5N2RFdFudC/ZmetsaeOAXc/CtQ77aj/DyPwI+JAMeDxfqAEH1mHNj8NNC7yd5tyL9YwRS/b80AMrJf+RYYOAtgadjXiRQflVUnhABH9DaAnG4ClWXAoV325qqCFTn/Y3N0EEAT0GBTG1DylkAIkOhtAG9INAHs6QUeWgUY4gcmu4nrAzj5MfCnq0C1B5CRnhcRuBcCJPq9UPmbz2T0nB4HHv81sHOL/dKPqH9za2b/9Cvvt0aB9/9gp+8zzcyaZ0M5Q4BEb9dhMlrW5lbfhWharv4BoPl/NuavaveeFoBoBxfj2u0DZgQfA177e+DxR+3iV+j3Yj9VH/kSOHcRqC4Fmop+gNrFlveljwBH9DYxllXu6Slg1RpgX68tpGH6Xq8BY+PA+6fsjIMjepsOLdltJHonDpcFuKadvvd06ViUk40zch0ZBMZ+BOpdjKl34tKy3Euid+DpWgVoNYB/+A2w8SlbUEb6kJesFYgNl78BPjjHmHpIX2hum0TvxDtC9GmgvgLoe80WDP2eLlbIvne5jp10R2kD//hYa/hfTQiQ6B16w4zgE8DeXuD+Fbqm78OfAFe/AeoSU3dT+g4fj7cXFAESvUPHygJccxx4ZgOw4yVbWMui3PXvgYH/BLCE7+kdurXwt5PoEVxsYuhdwMHXbWENo6eP65stsQ2gwuwzETxb3CIkegTf+pj6/q3AI39nR8/Qi3I+pn72c+Czy0BtCafvEVxb2CIkegTXCqmbElN/CDjoDrr4BbEI1SVSREZ0iamPjgH9ctClm3vfEwG2IJWQ6BEdaabKM8A7r9jsLhLPDr3Y7Uf1/g+B0R+BrjrTTEV0b+GKkegRXSrT95kGsHUj8OIGO30PvSgnawUS7rtwGTj7KYBlQIsHXSJ6uFjFSPSI/pTpu2yJXb4S2PdKxEpSKFZxHv29TN95EQGHAIkeoyuYEXwSOLALWNJj87iFnr7PuPj54Bng+nXG1GO4t1BFSfQY7pTRU9JM/eYJ4GVFaaYkgeW1G8DQabcllifaYni5GEVJ9Bh+lNF7Wt6Ll86lmYpRXXJFHbGPyYm2CaBOLyeHbU5rYheI6TgTVmsAb7k0U2b1PfD83W/g+eAMcOkKUOkB/JQ+5uOyeE4RINFjOs7E1CeAR9YCb+6wlYVefZcBXX6AGhPA0WG7JdYfZ435uCyeUwRI9AQcZ2LqVaDvVVuZ346aQNWxqzgxBNz+CahLTJ3v6rHxzGsFJHoCnjMjuMTUNwPPPubSTAVGVqbvMts4/xUw8rlNV+2n9Ak8MqvIGQKBu2PO0JrHXCGUKLisWm2Pr8pt8lnISwZv+QGS1NTHZVEusD0hsWDbVO5KrA+YBBRTwOHd9v24qWBHml+A6x8Gbn1H6abEnJ3DijiiJ+Q0GT29dNMORTF1+QG6eh04KdJNsiWWCSkS8ni+qiHRE/SXUXC5DzjktsRqSDPlt8Sac+rTlG5K0N25qopET9BdhtjjlG5KEFJWlRACJHpCQEo1ZvFrHFi/TrF0k6SZUrB+kCDsrKoNBEj0NkDq6BazW2UuS6ym2PXxQaB520o3abKrI3x5cyQESPRIsM1fyMTUx4BXfws8pk266Ys56SYuys3vwyJ+Q6In7FWJn8s59dVrgP3KpJtue+mmesIPzerUI0Cip+Ei2ZzSBA7uBtRJNw0BYz9QuikNt2uuk0RPwTtGumkM2CbSTU/aBoLvlJO1A5Fu+ho4KdJNjKmn4Hm9VZLoafjGSTfVRLppt21AQ0zdn0s/KtJN3DiThufV1kmip+Qas1FlAnhTqXTTNUo3peR5ndWS6Cn5RVbfmxPAc+uBXo3STS7NlN8PnxIMrFYJAiR6io4wJOoGDrjpu4aQlo+fe+mmKlfgU+wBeqom0VP0hYmpN4D92/RJN525YKWbqpRuSrEH6KmaRE/RF7LS3px00k3+oEtgxGVEp3RTik5XWnXgbqcUlQTN8lNlI91UtcdEQ+eAmJVu+ggYvUnppgTdrbYqEj1l18j0fUZi6puA59crk266BJyhdFPKPUBH9SR6yn7wW2KX/QrY75JHakjrNHtOfSBlAFi9CgRI9AzcYBblJq3EspFuaoZP4eZfKQZO3yHdxCyxGfSGME2Q6Bngbqbv48BzmqSbWlbu+dr/AsNnnHQTd8tl0BvCNEGiZ4S7SDfVlsxJN6kYPJ0RRuSB0k0Z9YQwzZDoGeFupJvGrXTTw6vd6nvg5Xe/gUekmy5TuimjnhCmGRI9I9xNTF2kmx4F9my3jYY+6CID+i+km1RMNTJySomaIdEzdLZZAKsom7675z8xDNz+2W6m8Qt1GULDplJGgERPGeA7q/dbYn+nULpp5Etg5AKlm+70V5H+TqJn6E2Zvot00+oH7Lu6NC2fhbxkpi4/QJRuCumF9Nsm0dPH+K4WzHv5FPCuQukm0WijdNNd7irMP0j0jF1ppu/jwOangR1KzqnL3neZWVz5FhgQ6aallG7KuFuk3hyJnjrEv2xgSnbGiXTTLvtd6NV3scL8AAE4MmgTW4Z+pfglavwkDgIkehz0IpY1xG7olW66chWo9QD+lFvEx2QxRQiQ6AGcYRa/Jqx0U+9ma4AfUQOYY5qUkFqtBtwaBY5/ZKfvlG4K5Y3k2yXRk8e0vRrNbpW5LLHQsFHF2XB8GJh20k0q7GoPUd61AAIk+gLgpPmVGcEbwGtOuqnZCi9p7KfqIxeB8/8NVJcCYhev/CNAogfyoSx2TU8Cqx8E9u2wRmiYvkuaKZFuklEdTBwZqHck3yyJnjym7dcom2VaQN/r+qSbjg0DDUo3te9L5XeS6AEdZKSbGla66YUnrCGhw1p+P/6lr4EPRijdFLB7JNo0iZ4onB1WJtJNU4BIN737ui2rIaY+K930AcDFuA59qvR2Ej2wY0zutklgzw5g5Qq75zz0qO7PqQ9/Anz9NVCXmDoX5QL3lHjNk+jx8ItdWhbgmg3guQ1A70ZbnUlSEbvm6BXI6rssyl3/HhhwaaYo3RQdTw0lSXQFXjDvxSLd5KbvGkZPY5NsiZUssQ2gWlMAFE2IjACJHhm65AqasNoYsH8r8MgDdutp8Om72zwj0k0XLtuYuoYfoORQL1dNJLoCfwupm3JO/WGbElpM0hJTHx0D+ocAdHPvu4KuEtkEEj0ydMkW9FNlkW4SksvoGTgnxeyhlv4PKd2UrLezr41Ezx7ze7Yo5Bbppq0vAS9usNJNXk3lngUy+ND82FSAzy4BZ0W6Sc6pNzNomE0kjgCJnjik0SqU6fv0FLB8JbDPKa+Gfk+XJ/GvEEdlUa7CsHo074YvRaKH98GsBYZUXrqpG2hqkG5y8fOTTrqpq8fONmaN5l9ygQCJrshNMlWfEemmJ4GdSs6pS0xdzqkb6SammVLUWzozhUTvDK9U75bFNyPdtHQuzVSqDbZbuQu1yUEXTFjRh3aL8j4dCJDoOvwwa4XZFdeYk26S8+Ch39V9/PyD0066aQnAnXKzLsvFX0h0ZW4yi3ITwNq1wBvbrHGhD7rIgC4/QGMTgBFk7GFCCmXdZlFzSPRFIQpwg2EW0PdqgLYXafLEKSfdVOei3CJQqfqaRFflDmuMWX2XmPoW4NnH7ejpw1yhzPUx9XMXKd0Uygdx2iXR46CXUlmZvhvpptXAWy7NVOj3dJlkyI+NrBnIqA72nJS8n061dFc6uMau1byXTwGHFUo3nfgQuPVXoN7N6XtsR2dUAYmeEdCdNiOjp8TUtzwNbHfn1INP351005/+Agx8TOmmTn0a8n4SPST6i7QtCqeV5cC7r9kbQ0/fxQqfFOOol25iD1rEizq+ppt0+OGeVpjp+wTw+g5gzSq3JTbwkTaf5/3kWeDqNaDG46v39J22D0l0bR65wx6Zqk+PAxvWATs32S9CT9/lOK2M6jdHgf4/AJDNMzzRdofXdP6VRNfplzmrXEz9kEsz5c+tz90Q7m/HB+ekmzTZFQ4RvS2T6Hp9YywzI3gDeFWkm9bahBShd8rdJd10kWmmlHch24/yYGSZbTRbYkW6aQ2wr9cioWH67qWbTEyd0k3quyhHdPUusgkf0LTKqz11Hbnf/aKc7H2ndJP+TkSi6/cRvHTT1ueBF5+yBocOtck7uQQALl0DTop0k6SZosiD2t5Eoqt1zR2GOemm+grg0G77eej3dLFCElLIdVSkm3ipRoBEV+2eOeNMosgJu/d95X06pu9+BB/6L+DaN066SaIEvNQhQKKrc8m9DZIFuOY48OwGYMdL9h6/S+3eJdL/1KeZuv4dMHjaTt8ZU08f9ygtkOhRUAtUxsSqu4GDLqbuF8QCmWObdSP4709a6aYKpZuCumO+xkn0+ZBR+LmPqXvpJrMgFnhLrI+pn/0cuPBHoMZFOYU9h6eKVTplPqNkpb0pMfWHgQO77F2hp+/yYyMxdSPdJAdduPd9PvcF/ZwjelD4O2/cTN8BvPOyPumm45Ru6tyhGZUg0TMCOqlmZPou0k3bNgEbn3DKq4G9KKvvEu77lNJNSbk58XoCd5HEn6fwFZotsU66ae/L9nFDb54RK7xOHKWbdHZBEl2nXxa0yizKTQJ9rwA9TrppwQIZfOnzvA+cBa7fACjdlAHoHTRBoncAlpZbzfRdpJueAl520k2hF+VMTL0KXL0OnDpjY+oqwn9anBbYDhI9sAOiNm+km5Yok25yD2NEHijdFNW1qZQj0VOBNf1KzQg+bqWbHpI0Uwqlm6qUbkq/I7TZAoneJlDabjOLck66ac92a515dw9oqEmG46WbJPc7pZsCeuPupkn0u/HI17+EWVXgoJduUnSg5MQwMPYzUKd0k4o+RaKrcEM0I8wI3gC2bQaefYzSTdFQLEcpEj3Hfpbpu5FuegDY69JMhY6pm0mGk26SnXImO0WOMS6K6SR6zj1pElBM24QUskDXVJB62cfUjXTT95Ru0tDFSHQNXohhg5++b9Eo3fQ/lG6K4dpEi5LoicIZprIpkW66DzjspJtUpJlyPctsiW3avfBh0GGrggCJXoB+YIg9Duxx0k1Gsy3wOXW/K+7kx8CfrwHVHnsApwBw5/IRSPRcuu1uo2X6LtJN69cBvS7NVPCYupdu+hl4X6SbllK66W6vZfsvEj1bvNNrzexWAQ69YZvw59bTa7D9mt8bAJq3gaoIPSiK9bf/BPm/k0TPvw/NE5gRfAx47Q7pptChNp9m6vwXwHkn3dQk0YP0OBI9COzJN2q2xE4Bqx8E3t5h6w99os2nmbo9DsxKN5HoyTu/jRpJ9DZAys0tsgDXAvpeB7q7dOR+94tyR4Yo3RSyH5HoIdFPuG2RbpppACLdtPFJW3no6btfK6B0U8LO7rA6Er1DwFTfLllip4CuFUCfopi6ZImV65jkfpcrcOjPWVGq/5HoBXO3yd02Cby9E9Ai3eSn70OfAFdFuokpoTPvdSR65pCn26Csvot00zPr56SbVMTUa8C33wFDlG5KtwPMUzuJPg8wef7YHCoR6SanvOrFEIM+k1ttPzIAYBygdFO23iDRs8U7k9bMCN4A9m8DHn4AkAWx0ItyPqZ+5gJw4TJQW0I99Uw6g2uERM8S7YzaElJ76aaDr9hGNUzf75Ju4t73jHqD83+mrbGxzBDwYa13dgGycUam76EXu/2ofvwjYPQm0CVppjJDpNwNcUQvqP9lBBfppq0vAS9scNP3wN6elW76Cvj4U3vQpaUgUUZBu8BdjxXY9XfZwn8kiIDfEnvfSuBtN30P/Z4uj+elm46I8mroKUaCeGuvikTX7qEY9pn3ci/d1KUrzdTgGeDGDaaZiuHejoqS6B3Bla+bZfScUSrddOW6i6kvs9lr84Vs/qwl0fPns7Ytlpmxl27q29V2scxuPCYiDxNAnb0wdcwJceoQh23ASzft3Qk8eL8y6aYzwB+vAJUeu1gYFqlit06iF9u/ZqPMtJNuesudUw+dPFJCavIDNDYOHJFRfYmO9YMidwUSvcje9c8mzLpDuklT7PrEEKWbvJvS/D+Jnia6Sur2W2JFuumZdXbzTOidcmYDTwUY+RI4/zlQWcotsWl2FxI9TXSV1C3xc63STZKaul+m7+7MuhLICmcGiV44l977gbx00+HdgGSi0STddPwU8NN3jKnf23PJfEqiJ4Oj+lr89H3LM8B2JbnfZe+7zDb+/BdAhB4k97uKI7Xqvdm5gSR655jltoSRbloOHHZ66qFX3wVIn6nWSzdp2KabWwcvYDiJvgA4RfvKEHsCeKMXWLNKV5ZYL91U4/HVVLodiZ4KrDorlem7SDdt+DXQu8naGHr1XY7Tyqh+00s3LaF0Uxq9h0RPA1XNdbYA1IE+l2bKn1vXYHL/INAac2mmNAX7NYAT0wYSPSaAeStelTDWGLD7d8Bja11CisDHRX1CipEvgHMXgZocdCHRE+1aJHqicOqvTBa7pqeVSjc1gH/1MXUSPdHORKInCmeOKhPppt1Ad13HopwPqxnpph+BehcPuiTZm0j0JNHMSV2yYabVALa9ALz4lDU6dFjLx9S/ugacHGFMPemuRKInjWge6hOiTwN1kW7SGFOndFPivYhETxzSfFRoRvBJQM6pa5NuGv4E+JrSTYl2JBI9UTjzU5nEz0W66bkNuqSbJPe7SDcNeOkmCQfyio0AiR4bwvxW4KWbDviYugJS+bj+UckSS+mmxDoXiZ4YlPmryOyKG5uTbvILYiGfxMfUT38GfC7STbIlVsEPUEhMkmibRE8CxZzWIe/poqf+wMPAQZc8UsWW2BowOgb0DwHg3vdEeheJngiM+a3ET5XfeUWPdJO3qf9DSjcl1bNI9KSQzGk9MoKLdNO2l4Dn11O6KaduXNRsEn1RiIp9g9kSOwUsXwnsc9P3wFvfDeCUbkq235HoyeKZy9rMe/kUcGAX0NOtQznFRARgw2xGuomLcrH6FokeC75iFDbSTQ3g+SeAne6cus/8EuoJZfW9VgOu3gCGz7gtsTzoEtkdJHpk6IpTcFa6aRlwyE3fVXDKGXFsGMAkpZvi9DgSPQ56BSprRvAG8JakmbpfyTl1Fz//D0o3xe5pJHpsCItRgYmpTwCPPgq8qVC66aiM6pRuitzZSPTI0BWvoIlfi3STQuXVE8PA2ChQr/OcepSeR6JHQa2gZczqu5xT32Klm5otIPROuVnppi+AkQtAZRm3xEbpfiR6FNQKWkam7166Sd7V5ZLPQl6yHic/NpKT/oSkmWKPjeQOwhYJtuIW8tJN74p0kxxlbYZ/Vh9Tf28YuEXppkgOIdEjwVbcQn76bqSbNtrnDD59d9JNV74FBindFKnzkeiRYCt2ISPddB/Q50+0BZ6+C9p+A8+RAQDN8K8UeesBJHrePJaBvWb6Pg68qVS66co1d05dxa6eDBySQBMkegIgFq0Kmaob6aZ1lG4qim9J9KJ4MunnkNFSsXRT8zZgVGc4qrfleRK9LZjKd5NZgBPppt8C65RJN52TmPoXQJXSTW13TBK9bajKdaM/p756DbDPbYn1C2KhkJCde5Il9nYDeF9i6nUAHNHbcgeJ3hZMJb1JVttbwEGF0k1Hh4DGD5RuardnkujtIlXC+7x003aRbnrSAtBVt+fE5ax4iD/ySiGjukg3DX4KYBngN9SU0EVtPzKJ3jZUJbxRpJumrHTTIZf7XXbKhfwz3Zybrf/LUQDTwIyCOL/23iFvObyIwLwImNxt4zYhxfmLwNR0+M0qsn4wKWmqfwXc/Am4fynQ4iaaeX0oX1RaI1zOWBAhfmmG0IoMCTVFYFSAGRnd5YdHkVlaTeGIrtUzmuxy6qsyTdZ0ychOkrfnERK9PZxKf1fo46qld0BMALgYFxNAFicCeUCARM+Dl2gjEYiJAIkeE0AWJwJ5QIBEz4OXaCMRiIkAiR4TQBYnAnlAgETPg5doIxGIiQCJHhNAFicCeUCARM+Dl2gjEYiJAIkeE0AWJwJ5QIBEz4OXaCMRiIkAiR4TQBYnAnlAgETPg5doIxGIiQCJHhNAFicCeUCARM+Dl2gjEYiJAIkeE0AWJwJ5QIBEz4OXaCMRiIkAiR4TQBYnAnlAgETPg5doIxGIiQCJHhNAFicCeUCARM+Dl2gjEYiJAIkeE0AWJwJ5QIBEz4OXaCMRiIkAiR4TQBYnAnlAgETPg5doIxGIiQCJHhNAFicCeUCARM+Dl2gjEYiJAIkeE0AWJwJ5QIBEz4OXaCMRiIkAiR4TQBYnAnlAgETPg5doIxGIiQCJHhNAFicCeUCARM+Dl2gjEYiJAIkeE0AWJwJ5QIBEz4OXaCMRiInA/wNesgjeBcB+xwAAAABJRU5ErkJggg=="\n }\n )\n ] })\n ]\n }\n), SR = () => /* @__PURE__ */ e1(\n "svg",\n {\n width: "160",\n height: "160",\n viewBox: "0 0 160 160",\n fill: "none",\n xmlns: "http://www.w3.org/2000/svg",\n children: [\n /* @__PURE__ */ c(\n "path",\n {\n style: { mixBlendMode: "multiply" },\n d: "M2.66606 100.557C3.07565 102.104 3.53002 103.631 4.02914 105.139C4.44368 106.394 4.88889 107.634 5.36477 108.862V108.871C5.83917 110.097 6.34275 111.309 6.87551 112.507V112.514C8.57465 116.33 10.5711 120.006 12.8465 123.509C18.0688 121.838 29.4432 117.515 48.0128 112.357C62.4821 108.338 94.834 100.323 124.467 93.9558C143.363 89.897 153.635 87.352 156.802 86.3192C157.549 86.075 158.855 85.5074 159.5 84.8945C159.734 84.6695 159.875 84.3656 159.898 84.042C159.964 82.7034 159.998 81.3567 159.999 80.0018C160.002 73.7381 159.272 67.4954 157.824 61.4015C143.939 65.5715 106.711 73.2868 75.4808 80.8084C42.2682 88.81 13.5522 97.5403 2.66606 100.557Z",\n fill: "url(#paint0_linear)"\n }\n ),\n /* @__PURE__ */ c(\n "path",\n {\n style: { mixBlendMode: "multiply" },\n d: "M3.75756 55.7105L3.74569 55.7491L3.73456 55.7824C3.72195 55.8233 3.70933 55.8633 3.69598 55.9041C3.63216 56.1069 3.56909 56.3103 3.50676 56.5141C3.50305 56.5244 3.50008 56.5348 3.49712 56.5452C3.48079 56.5972 3.46521 56.6491 3.44963 56.701C3.34278 57.0522 3.2384 57.404 3.1365 57.7562L3.12685 57.7903C3.02346 58.1455 2.92304 58.5021 2.82559 58.8602C38.0713 50.3102 62.8754 43.3073 84.2714 36.6182C96.8115 32.6968 106.007 29.1352 112.211 25.9988C112.354 25.9261 112.497 25.8534 112.638 25.7806L112.764 25.7153C112.862 25.6649 112.96 25.6144 113.056 25.5669L113.212 25.4853L113.465 25.3518L113.628 25.2642L113.865 25.1373L114.028 25.0483L114.258 24.9222L114.415 24.8353L114.646 24.7062L114.794 24.6246L115.037 24.4859L115.161 24.4154L115.486 24.2262L115.517 24.2076L115.864 24.0021L115.97 23.9375C116.045 23.8908 116.125 23.844 116.201 23.7973L116.329 23.7186L116.53 23.5932L116.661 23.5109L116.851 23.3899C116.894 23.3625 116.937 23.335 116.979 23.3068C117.042 23.2675 117.103 23.2274 117.163 23.1874L117.287 23.1065L117.47 22.9841L117.584 22.9099C117.65 22.8653 117.715 22.8216 117.779 22.777L117.871 22.7132C117.965 22.6479 118.058 22.5829 118.149 22.5181C120.18 21.0593 123.17 18.4126 122.955 15.2718C122.955 15.2443 122.95 15.2169 122.948 15.1894C122.8 13.652 121.397 11.4594 117.161 9.13622L116.893 8.99673L116.577 8.832L116.153 8.61534L116.004 8.54114C115.699 8.38681 115.392 8.23445 115.084 8.08407L114.888 7.98761L114.414 7.75982L114.169 7.64407L113.803 7.47118L113.534 7.34727L113.255 7.21817L112.958 7.08461L112.705 6.97108L112.394 6.83159L112.165 6.73067L111.831 6.58228L111.654 6.50808C111.221 6.32109 110.785 6.13782 110.348 5.95826L110.232 5.91003L109.825 5.74531L109.681 5.68743L109.272 5.52567L109.14 5.47374L108.71 5.30679L108.635 5.27859C107.96 5.01939 107.281 4.76958 106.598 4.52918L106.573 4.52027C106.409 4.4624 106.245 4.40526 106.081 4.34887L106.02 4.3281L105.526 4.15966L105.495 4.14928C104.615 3.85248 103.729 3.572 102.837 3.30785L102.814 3.30118L102.295 3.14907L102.256 3.13794C101.504 2.92029 100.748 2.71376 99.9858 2.51837C100.036 3.13052 100.05 3.67885 100.004 4.07656C99.7855 5.92709 98.8439 7.48973 97.3903 8.86688C94.3806 11.7176 88.4045 14.6819 80.9784 17.2952C73.0499 20.0947 56.575 25.5217 41.9714 29.1812C32.1768 31.6365 19.2657 34.8307 13.0587 36.1812C12.8183 36.5477 12.5814 36.9162 12.3479 37.2868C12.3382 37.3016 12.3286 37.3164 12.3197 37.3313L12.3093 37.3469C12.27 37.4092 12.2306 37.4708 12.1921 37.5331C12.0971 37.6845 12.0026 37.8363 11.9086 37.9887C11.893 38.0132 11.8782 38.0376 11.8633 38.0629C11.8485 38.0881 11.8277 38.12 11.8107 38.1489C11.7936 38.1779 11.7624 38.2231 11.7365 38.2647C11.6437 38.4131 11.551 38.5682 11.4589 38.7203C11.4352 38.7604 11.4115 38.8004 11.3847 38.8405L11.2979 38.9889C11.202 39.1477 11.1072 39.3065 11.0137 39.4652C11.0063 39.4771 10.9996 39.489 10.993 39.5009L10.9885 39.509C10.7713 39.878 10.5571 40.249 10.3459 40.622L10.2138 40.855C10.1243 41.0153 10.035 41.1758 9.94597 41.3366L9.93855 41.3492L9.91555 41.3915L9.79683 41.6059L9.53415 42.0889C9.50002 42.1528 9.46663 42.2166 9.4325 42.2796L9.39762 42.3442C9.3071 42.5134 9.21657 42.6825 9.12753 42.8525L9.12085 42.8658L9.11566 42.8755C8.9069 43.2712 8.70136 43.6714 8.49904 44.076L8.39961 44.2726C8.31354 44.4448 8.22895 44.6169 8.14436 44.792V44.798C8.12136 44.844 8.0991 44.89 8.07684 44.936L8.06793 44.9538L8.02341 45.045C7.93981 45.2162 7.8567 45.3881 7.77409 45.5607L7.66279 45.7967C7.51785 46.1009 7.37538 46.4064 7.23539 46.7131V46.7168C7.09441 47.023 6.9559 47.3304 6.81986 47.6391C6.80428 47.6739 6.7887 47.7081 6.77386 47.7422L6.75382 47.7875C6.67319 47.9725 6.59256 48.1577 6.51192 48.3432L6.48521 48.4055C6.46147 48.4619 6.43698 48.5176 6.41101 48.574C6.33236 48.7575 6.25445 48.9415 6.17728 49.126C6.14759 49.1965 6.11791 49.267 6.08898 49.3382C5.95442 49.6607 5.8221 49.9847 5.692 50.3102V50.3184V50.3236C5.56239 50.6491 5.43427 50.9761 5.30763 51.3045L5.27424 51.3906C5.20004 51.5887 5.12584 51.7883 5.05164 51.9842L4.97744 52.1912C4.90324 52.3856 4.83349 52.5807 4.76299 52.7766L4.73406 52.8582C4.71996 52.8953 4.7066 52.9324 4.69324 52.9703C4.57155 53.3096 4.45209 53.6497 4.33485 53.9905C4.33328 53.9944 4.33204 53.9983 4.33114 54.0024L4.32669 54.015C4.20846 54.3588 4.09295 54.7031 3.98017 55.0479L3.97572 55.0612V55.0679C3.97415 55.0715 3.97291 55.0752 3.97201 55.079C3.89533 55.2883 3.82385 55.4988 3.75756 55.7105Z",\n fill: "url(#paint1_linear)"\n }\n ),\n /* @__PURE__ */ c(\n "path",\n {\n style: { mixBlendMode: "multiply" },\n d: "M3.07564 81.166C5.24975 81.1779 10.8616 80.8907 17.0908 80.2949C27.9406 79.2561 49.6282 76.4366 74.3744 73.2363C93.6386 70.7455 135.79 64.6292 157.832 61.403C157.796 61.2492 157.76 61.0975 157.723 60.9482C157.655 60.6692 157.585 60.3912 157.514 60.1142C157.489 60.0155 157.464 59.9175 157.44 59.8174L157.436 59.801C157.386 59.6121 157.337 59.4229 157.287 59.2334C157.26 59.1332 157.233 59.0331 157.206 58.9366C157.14 58.6932 157.073 58.4506 157.004 58.2087L156.956 58.0358C156.9 57.8392 156.842 57.6441 156.785 57.4489L156.731 57.2656C156.702 57.1662 156.672 57.0675 156.642 56.9688C156.585 56.7789 156.528 56.5889 156.469 56.3997C156.438 56.3003 156.408 56.2009 156.377 56.1029C156.312 55.8944 156.245 55.6867 156.179 55.4789L156.147 55.3802C156.124 55.306 156.101 55.237 156.078 55.1651C156.033 55.027 155.987 54.889 155.94 54.751C155.909 54.6553 155.877 54.5596 155.845 54.4639L155.741 54.1574C155.741 54.15 155.736 54.1426 155.733 54.1352L155.553 53.6158C155.517 53.5141 155.479 53.4117 155.446 53.3101C155.361 53.0731 155.277 52.8372 155.192 52.6022C155.161 52.5169 155.129 52.4315 155.097 52.3455C155.073 52.2794 155.048 52.2141 155.023 52.1481C154.968 51.9997 154.914 51.8565 154.859 51.7111C154.819 51.6035 154.778 51.4966 154.737 51.3898C154.709 51.3156 154.681 51.2414 154.653 51.1731L154.54 50.88C154.498 50.7739 154.456 50.6671 154.414 50.561C154.372 50.4549 154.334 50.3606 154.294 50.2642C154.244 50.1366 154.193 50.0084 154.14 49.8798C154.099 49.7797 154.057 49.6795 154.016 49.583L153.936 49.3909C153.884 49.264 153.832 49.1371 153.778 49.0102C153.731 48.8989 153.684 48.7876 153.636 48.6763C153.568 48.516 153.499 48.3563 153.43 48.197C153.381 48.0872 153.333 47.9776 153.287 47.8683C153.245 47.7726 153.202 47.6768 153.159 47.5811C153.104 47.4565 153.049 47.3311 152.993 47.2101C152.943 47.0981 152.891 46.9875 152.84 46.8747C152.789 46.762 152.743 46.6618 152.692 46.5557C152.661 46.4889 152.63 46.4221 152.6 46.3561C152.546 46.2411 152.492 46.1268 152.439 46.0118C152.375 45.8748 152.31 45.7375 152.244 45.6L152.237 45.5866L152.224 45.5592C152.17 45.4472 152.118 45.3366 152.063 45.2246C151.96 45.0099 151.855 44.7962 151.75 44.5835C151.69 44.4633 151.63 44.3438 151.57 44.2236L151.407 43.9008L151.358 43.8044C151.35 43.7858 151.34 43.7673 151.331 43.7495L151.151 43.3985L151.087 43.2753C151.034 43.1734 150.981 43.0718 150.928 42.9704L150.75 42.6313C150.638 42.4191 150.525 42.2074 150.41 41.9961L150.212 41.6333C150.138 41.5042 150.07 41.3743 149.998 41.2452L149.971 41.1955L149.773 40.8431C149.751 40.8023 149.728 40.7622 149.705 40.7214L149.542 40.4357C149.477 40.3215 149.413 40.2079 149.347 40.0944C149.281 39.9809 149.227 39.8881 149.167 39.785C149.098 39.6663 149.029 39.5468 148.959 39.4288L148.736 39.0504C143.097 39.8666 136.245 40.8312 127.825 41.9969C109.338 44.5523 88.5721 47.9462 67.3268 50.6938C34.6855 54.8942 13.3184 58.0217 2.82262 58.8646C2.77711 59.0318 2.73234 59.1985 2.68831 59.3647C2.67941 59.3981 2.6705 59.4308 2.66234 59.4634L2.60892 59.6645C2.60725 59.6698 2.60601 59.6753 2.60521 59.6808C2.56613 59.8292 2.52705 59.9776 2.48797 60.126C2.4568 60.2477 2.42712 60.3694 2.39596 60.4911C2.38186 60.549 2.36776 60.6061 2.35292 60.6632C2.34402 60.6996 2.33511 60.7374 2.32547 60.7723C2.31582 60.8072 2.31137 60.8294 2.30469 60.8576C2.28391 60.9407 2.26388 61.0246 2.24384 61.1077C0.759524 67.2487 0.00659236 73.5437 0.000732422 79.8616C0.0222509 80.6889 1.21319 81.1556 3.07564 81.166Z",\n fill: "url(#paint2_linear)"\n }\n ),\n /* @__PURE__ */ c(\n "path",\n {\n style: { mixBlendMode: "multiply" },\n d: "M140.319 132.559C134.976 137.535 115.809 146.553 96.8189 150.304C78.8696 153.85 62.7144 154.641 51.9923 154.654C52.177 154.919 52.5859 155.167 53.23 155.411C54.5196 155.869 55.824 156.295 57.1433 156.688L57.1775 156.699C57.7424 156.867 58.3093 157.028 58.8782 157.183L58.9524 157.204C59.2037 157.272 59.4555 157.34 59.7078 157.406L59.822 157.436C60.0936 157.506 60.3657 157.575 60.6382 157.643L60.7488 157.67C60.9754 157.726 61.2022 157.781 61.4292 157.835L61.6518 157.888C61.8893 157.944 62.1272 157.999 62.3657 158.052L62.5534 158.094C62.7656 158.141 62.9778 158.187 63.1908 158.233L63.5098 158.301L63.9914 158.4L64.3275 158.468C64.5501 158.512 64.7676 158.554 64.9879 158.596L65.4005 158.67L65.7463 158.733L66.1915 158.813L66.3814 158.845C66.698 158.9 67.0156 158.952 67.3342 159.003L67.5568 159.038L68.094 159.12L68.1912 159.135C68.5795 159.192 68.9686 159.247 69.3584 159.298L69.4059 159.305C69.6107 159.332 69.8155 159.358 70.0203 159.383L70.0744 159.39C70.7052 159.468 71.3381 159.538 71.9733 159.602H71.9829C72.4133 159.645 72.8451 159.685 73.2785 159.721C75.4941 159.905 77.7345 159.998 79.9996 160C104.066 160 125.65 149.372 140.317 132.556L140.319 132.559Z",\n fill: "url(#paint3_linear)"\n }\n ),\n /* @__PURE__ */ c(\n "path",\n {\n style: { mixBlendMode: "multiply" },\n d: "M145.77 107.163C143.706 107.163 131.821 107.442 112.646 109.28C87.5274 111.689 50.9394 116.965 36.1443 119.488C26.9552 121.055 18.3849 122.888 13.2101 124.051C13.4421 124.403 13.6771 124.752 13.915 125.099L14.0753 125.334C14.1742 125.482 14.2759 125.628 14.3803 125.772C14.4367 125.853 14.4938 125.934 14.5502 126.014C14.6548 126.163 14.7587 126.311 14.8641 126.46L14.9739 126.608C15.191 126.911 15.4107 127.213 15.6328 127.513C15.6788 127.575 15.7233 127.636 15.7693 127.697C15.8791 127.846 15.9919 127.994 16.1017 128.142L16.2665 128.36C16.3793 128.508 16.4928 128.657 16.6071 128.805L16.728 128.961C16.9842 129.291 17.2425 129.619 17.5027 129.945L17.5427 129.996C17.6667 130.151 17.7921 130.305 17.9137 130.458L18.0584 130.636C18.1831 130.784 18.3078 130.94 18.4332 131.09L18.5467 131.227C18.9667 131.73 19.3926 132.228 19.8244 132.72L19.9328 132.843C20.0708 133 20.2095 133.156 20.349 133.312C20.3809 133.348 20.4129 133.386 20.4455 133.419C20.9036 133.93 21.3678 134.434 21.8383 134.932L21.885 134.982C22.0384 135.144 22.1925 135.305 22.3473 135.466L22.4215 135.545C23.0774 136.224 23.7452 136.892 24.4249 137.548L24.4761 137.597C25.1687 138.263 25.8714 138.917 26.5842 139.558L26.6087 139.58C27.3339 140.23 28.0705 140.867 28.8184 141.49C29.2183 141.826 30.091 141.886 32.8297 141.368C38.5766 140.281 60.1003 136.545 83.965 133.274C106.418 130.197 130.529 129.545 133.743 129.577C137.941 129.62 141.915 130.555 140.314 132.555C140.494 132.35 140.672 132.143 140.849 131.935L140.889 131.889C140.892 131.885 140.895 131.881 140.898 131.877C141.068 131.679 141.237 131.479 141.405 131.277L141.441 131.235C141.45 131.222 141.461 131.211 141.471 131.198C141.637 131 141.803 130.8 141.968 130.596L142.028 130.522C142.195 130.316 142.362 130.109 142.529 129.901L142.56 129.862C143.181 129.083 143.787 128.293 144.38 127.492L144.408 127.455C145.002 126.653 145.578 125.841 146.138 125.016L146.143 125.01L146.158 124.987C146.311 124.762 146.463 124.537 146.614 124.311C146.628 124.289 146.642 124.268 146.657 124.246C146.806 124.025 146.952 123.802 147.096 123.578L147.104 123.567C147.116 123.548 147.128 123.529 147.14 123.511C147.289 123.284 147.435 123.056 147.579 122.828C147.588 122.815 147.596 122.802 147.604 122.789C148.841 120.841 149.992 118.838 151.059 116.779L151.074 116.753C151.201 116.505 151.328 116.258 151.454 116.011L151.467 115.986L151.477 115.966C151.603 115.716 151.727 115.465 151.848 115.214L151.853 115.204L151.862 115.185C152.888 113.092 153.824 110.949 154.671 108.756C154.98 107.859 154.016 107.163 145.77 107.163Z",\n fill: "url(#paint4_linear)"\n }\n ),\n /* @__PURE__ */ c(\n "path",\n {\n style: { mixBlendMode: "multiply" },\n d: "M66.7339 9.22594C67.392 4.45714 54.7518 5.24514 54.1938 4.25458C47.6411 6.48826 41.4074 9.56624 35.6501 13.4108C35.4015 13.5748 35.3014 13.9346 36.4507 14.1691C38.9536 14.6811 44.2486 15.2331 48.0062 15.2643C56.011 15.3333 66.1336 13.5792 66.7339 9.22594Z",\n fill: "url(#paint5_linear)"\n }\n ),\n /* @__PURE__ */ c(\n "path",\n {\n style: { mixBlendMode: "multiply" },\n d: "M150.3 111.678C148.301 112.48 137.463 115.772 125.621 120.396C113.274 125.219 104.579 131.07 104.468 137.469C104.38 142.545 114.119 146.15 116.341 147.184C118.562 148.217 119.519 148.917 119.771 149.437C135.586 140.36 148.005 126.035 154.653 108.838C154.09 110.131 152.684 110.72 150.3 111.678Z",\n fill: "url(#paint6_linear)"\n }\n ),\n /* @__PURE__ */ c(\n "path",\n {\n style: { mixBlendMode: "multiply" },\n d: "M17.6147 70.1957C31.6699 64.0757 46.4049 57.2331 56.0422 52.6928C71.1192 45.5897 84.284 36.9336 81.4191 28.1165C78.8718 20.2639 68.393 21.2078 47.4823 24.9496C34.0318 27.3567 16.2472 31.7879 13.849 34.9962L13.7555 35.1335C13.6568 35.2819 13.5574 35.4303 13.4587 35.5787C5.16293 47.9782 0.240403 62.8336 0.00889464 78.8192C0.00444254 79.1657 0.000732422 79.5122 0.000732422 79.858C0.031155 78.4356 5.13325 75.6308 17.6147 70.1957Z",\n fill: "url(#paint7_linear)"\n }\n ),\n /* @__PURE__ */ c(\n "path",\n {\n style: { mixBlendMode: "multiply" },\n d: "M133.38 37.9605C116.982 40.3712 90.9592 45.189 93.4991 60.5675C95.4543 72.4076 119.11 75.8608 128.996 77.767C136.844 79.2814 152.202 81.3738 158.773 83.0158C159.651 83.2384 159.926 83.6569 159.902 84.1288C159.902 84.1236 159.902 84.1192 159.902 84.114C159.936 83.4329 159.961 82.7495 159.976 82.0639V81.9414C159.992 81.2959 160 80.6491 160 80.0011C160 65.202 155.981 51.3431 148.977 39.4526L148.7 39.0074C147.857 37.6444 142.19 36.6649 133.38 37.9605Z",\n fill: "url(#paint8_linear)"\n }\n ),\n /* @__PURE__ */ c(\n "path",\n {\n style: { mixBlendMode: "multiply" },\n d: "M92.441 95.2543C90.8791 89.4667 82.4053 85.2812 70.3112 85.5772C57.5485 85.8903 44.2931 87.0938 28.3176 90.6858C14.0419 93.8957 5.38928 97.5953 4.05366 98.1466C2.80188 98.666 2.37744 99.3427 2.60673 100.325V100.332C2.66262 100.543 2.71852 100.754 2.77442 100.964C2.84862 101.24 2.92282 101.516 3.0037 101.791C3.02745 101.876 3.05193 101.96 3.0779 102.045C3.14172 102.268 3.20553 102.49 3.27083 102.708C3.28938 102.771 3.30793 102.835 3.32722 102.899C3.40835 103.17 3.49047 103.44 3.57357 103.709C3.59806 103.789 3.62329 103.867 3.64777 103.947C3.71307 104.155 3.77985 104.364 3.84663 104.572L3.92454 104.814C4.01111 105.08 4.09917 105.345 4.1887 105.61L4.25771 105.812C4.33191 106.021 4.40092 106.23 4.47364 106.438L4.56861 106.708C4.6537 106.949 4.74002 107.189 4.82758 107.427L4.89436 107.61C4.97796 107.839 5.06304 108.067 5.14961 108.295L5.25869 108.58C5.33239 108.774 5.4066 108.967 5.48129 109.159C5.51172 109.236 5.5414 109.314 5.57256 109.392C5.6715 109.64 5.77043 109.887 5.86937 110.134C5.90869 110.233 5.9495 110.33 5.98957 110.431C6.06081 110.603 6.13229 110.776 6.20402 110.95L6.32867 111.247C6.43058 111.487 6.53322 111.726 6.63661 111.964C6.67965 112.063 6.72343 112.161 6.76646 112.261C6.8377 112.423 6.90942 112.584 6.98165 112.745L7.13005 113.078C7.21217 113.259 7.29527 113.44 7.37937 113.621C7.44615 113.769 7.51441 113.91 7.58194 114.053C7.65614 114.211 7.73034 114.367 7.80454 114.523L7.97817 114.884C8.0457 115.023 8.11396 115.162 8.18223 115.301C8.26311 115.465 8.34399 115.628 8.42635 115.791C8.50872 115.954 8.59108 116.121 8.67493 116.285C8.74072 116.414 8.80701 116.542 8.87379 116.67C8.93414 116.788 8.99498 116.905 9.05632 117.021C9.12459 117.154 9.1936 117.285 9.26334 117.416C9.36624 117.611 9.47012 117.805 9.57499 117.999C9.65513 118.147 9.73576 118.295 9.81689 118.444C9.8713 118.543 9.92596 118.642 9.98087 118.741C10.06 118.884 10.1397 119.027 10.2198 119.169L10.3623 119.421C10.5107 119.685 10.662 119.949 10.8164 120.211C10.8616 120.285 10.9062 120.365 10.9514 120.442C11.041 120.595 11.131 120.747 11.2215 120.899L11.3432 121.102C11.5317 121.417 11.7219 121.729 11.9138 122.04L11.965 122.122C12.0669 122.286 12.1691 122.449 12.2715 122.612L12.3731 122.773C12.7011 123.29 13.0348 123.804 13.3741 124.313L13.4483 124.421C13.8079 124.959 14.1747 125.494 14.5487 126.023C14.5524 126.03 14.5569 126.036 14.5613 126.043C17.5245 130.246 20.8839 134.155 24.5934 137.717C24.7245 137.844 24.8566 137.971 24.9896 138.096L25.0816 138.183C25.5763 138.652 26.0784 139.114 26.5879 139.57L26.6109 139.59C27.1199 140.047 27.6352 140.497 28.1565 140.94L28.2708 141.038L28.2775 141.045C28.4605 141.2 28.6445 141.354 28.8295 141.507C28.9107 141.572 29.0023 141.622 29.1004 141.656C28.8874 141.573 29.2377 141.21 30.3165 140.803C35.0654 139.022 41.0483 136.655 51.5998 131.43C62.1846 126.188 66.2746 123.992 77.6304 115.707C88.3941 107.852 94.5261 102.971 92.441 95.2543Z",\n fill: "url(#paint9_linear)"\n }\n ),\n /* @__PURE__ */ c(\n "path",\n {\n style: { mixBlendMode: "multiply" },\n d: "M86.1457 150.933C85.0528 147.626 76.4714 146.419 66.0683 148.512C60.1025 149.712 55.8552 151.529 53.9735 152.518C51.4691 153.833 51.1723 154.647 53.2945 155.435H53.299C53.4333 155.482 53.5691 155.529 53.7041 155.575L54.0469 155.694C54.5911 155.88 55.1431 156.063 55.7031 156.241L55.7432 156.254C56.2992 156.43 56.8609 156.602 57.4283 156.769C57.6217 156.826 57.8154 156.883 58.0093 156.939L58.1213 156.97C63.3179 158.443 68.6507 159.385 74.0375 159.78C75.5579 158.161 87.8635 156.134 86.1457 150.933Z",\n fill: "url(#paint10_linear)"\n }\n ),\n /* @__PURE__ */ c(\n "path",\n {\n style: { mixBlendMode: "multiply" },\n d: "M82.4446 8.55297C105.322 8.23985 114.972 10.6869 119.363 12.2333C121.973 13.1533 122.648 14.0296 122.839 14.6121C122.424 13.1237 120.885 11.173 117.134 9.12134L117.12 9.11392C106.027 3.29371 93.3997 0 80.0034 0C63.5967 0 48.3445 4.93946 35.6501 13.4108C43.7663 11.7465 62.5534 8.82454 82.4446 8.55297Z",\n fill: "url(#paint11_linear)"\n }\n ),\n /* @__PURE__ */ c(\n "path",\n {\n style: { mixBlendMode: "multiply" },\n d: "M86.1457 150.933C85.0528 147.626 76.4714 146.419 66.0683 148.512C60.1025 149.712 55.8552 151.529 53.9735 152.518C51.4691 153.833 51.1723 154.647 53.2945 155.435H53.299C53.4333 155.482 53.5691 155.529 53.7041 155.575L54.0469 155.694C54.5911 155.88 55.1431 156.063 55.7031 156.241L55.7432 156.254C56.2992 156.43 56.8609 156.602 57.4283 156.769C57.6217 156.826 57.8154 156.883 58.0093 156.939L58.1213 156.97C63.3179 158.443 68.6507 159.385 74.0375 159.78C75.5579 158.161 87.8635 156.134 86.1457 150.933Z",\n fill: "url(#paint12_linear)"\n }\n ),\n /* @__PURE__ */ c(\n "path",\n {\n d: "M82.4446 8.55297C105.322 8.23985 114.972 10.6869 119.363 12.2333C121.973 13.1533 122.648 14.0296 122.839 14.6121C122.424 13.1237 120.885 11.173 117.134 9.12134L117.12 9.11392C106.027 3.29371 93.3997 0 80.0034 0C63.5967 0 48.3445 4.93946 35.6501 13.4108C43.7663 11.7465 62.5534 8.82454 82.4446 8.55297Z",\n fill: "url(#paint13_linear)"\n }\n ),\n /* @__PURE__ */ c(\n "path",\n {\n style: { mixBlendMode: "multiply" },\n d: "M17.6147 70.1956C31.67 64.0756 46.4049 57.2329 56.0422 52.6927C56.57 52.4453 57.0951 52.1948 57.6175 51.941C30.41 55.5145 12.2403 58.1085 2.82337 58.8646C2.80037 58.9507 2.77662 59.0367 2.75288 59.1228L2.68832 59.3647C2.68832 59.3751 2.68313 59.3847 2.68016 59.3944C2.63786 59.5554 2.59557 59.7157 2.55402 59.8767C2.5414 59.9227 2.52953 59.9687 2.51766 60.0139C2.47363 60.1851 2.43035 60.3565 2.3878 60.5281C2.37667 60.5749 2.3648 60.6209 2.35293 60.6669C2.34848 60.6869 2.34328 60.7062 2.33883 60.7255C2.2906 60.9199 2.24311 61.1151 2.19637 61.3095C2.18449 61.3592 2.17262 61.4089 2.16149 61.4579C2.11845 61.6379 2.07616 61.8182 2.03461 61.9988C2.02496 62.0403 2.01531 62.0819 2.00641 62.1234C1.90401 62.5686 1.80508 63.0165 1.7096 63.4672C1.70292 63.5021 1.6955 63.5369 1.68808 63.5711C1.6495 63.7566 1.61141 63.9423 1.57381 64.1283C1.56343 64.1832 1.5523 64.2381 1.54117 64.2938C1.50604 64.4674 1.47191 64.6405 1.43877 64.8132L1.40983 64.9616C1.36828 65.1775 1.32821 65.3949 1.28888 65.6123V65.6227C1.24733 65.8522 1.20676 66.082 1.16719 66.312C1.16051 66.3476 1.15458 66.3862 1.14864 66.4196C1.11698 66.6056 1.08582 66.7921 1.05515 66.979L1.02621 67.1579C0.998505 67.327 0.971793 67.4965 0.946069 67.6661C0.937165 67.7247 0.927519 67.7834 0.918615 67.8412C0.888934 68.0386 0.859253 68.236 0.831057 68.4348C0.826605 68.4608 0.822895 68.486 0.819185 68.509C0.786536 68.7386 0.754629 68.9683 0.723465 69.1984L0.710109 69.3015C0.683891 69.4909 0.659157 69.6804 0.635907 69.8699C0.627745 69.9329 0.620325 69.9967 0.612163 70.0598C0.591386 70.226 0.571352 70.3925 0.55206 70.5592C0.544639 70.6237 0.536477 70.6883 0.529057 70.7528C0.50828 70.9378 0.487752 71.1231 0.46747 71.3086L0.454114 71.4303C0.42938 71.6603 0.404646 71.8906 0.379912 72.1211C0.379912 72.15 0.374718 72.1797 0.37175 72.2086C0.352457 72.4045 0.334649 72.6011 0.31684 72.7978C0.310904 72.8631 0.30571 72.9291 0.299774 72.9944C0.285923 73.1591 0.272072 73.3241 0.258221 73.4893C0.253027 73.5583 0.247091 73.6281 0.241897 73.6978C0.227799 73.8737 0.215184 74.0495 0.20257 74.2261L0.19144 74.3819C0.175116 74.6134 0.160275 74.8442 0.146177 75.0757C0.146177 75.0957 0.146177 75.1158 0.142467 75.135C0.130595 75.3428 0.11897 75.5506 0.107592 75.7583C0.107592 75.8244 0.100914 75.8911 0.097946 75.9572C0.0897838 76.1226 0.0816218 76.2874 0.0749437 76.4528C0.0749437 76.527 0.0682652 76.5975 0.0652971 76.6695C0.0583717 76.8416 0.0519413 77.0148 0.0460051 77.1889C0.0460051 77.2475 0.0415529 77.3061 0.0400689 77.3647C0.0326487 77.5977 0.0259703 77.8307 0.0200342 78.0637V78.0726C0.0148401 78.2952 0.0103881 78.5245 0.00742004 78.7508V78.8992C0.00742004 79.2175 0 79.5366 0 79.8556C0.0311646 78.4354 5.13326 75.6307 17.6147 70.1956Z",\n fill: "url(#paint14_linear)"\n }\n ),\n /* @__PURE__ */ c(\n "path",\n {\n style: { mixBlendMode: "multiply" },\n d: "M145.77 107.163C143.706 107.163 131.821 107.442 112.646 109.28C87.5274 111.689 50.9394 116.965 36.1443 119.488C26.9552 121.055 18.3849 122.888 13.2101 124.051C13.4421 124.403 13.6771 124.752 13.915 125.099L14.0753 125.334C14.1742 125.482 14.2759 125.628 14.3803 125.772C14.4367 125.853 14.4938 125.934 14.5502 126.014C14.6548 126.163 14.7587 126.311 14.8641 126.46L14.9739 126.608C15.191 126.911 15.4107 127.213 15.6328 127.513C15.6788 127.575 15.7233 127.636 15.7693 127.697C15.8791 127.846 15.9919 127.994 16.1017 128.142L16.2665 128.36C16.3793 128.508 16.4928 128.657 16.6071 128.805L16.728 128.961C16.9842 129.291 17.2425 129.619 17.5027 129.945L17.5427 129.996C17.6667 130.151 17.7921 130.305 17.9137 130.458L18.0584 130.636C18.1831 130.784 18.3078 130.94 18.4332 131.09L18.5467 131.227C18.9667 131.73 19.3926 132.228 19.8244 132.72L19.9328 132.843C20.0708 133 20.2095 133.156 20.349 133.312C20.3809 133.348 20.4129 133.386 20.4455 133.419C20.9036 133.93 21.3678 134.434 21.8383 134.932L21.885 134.982C22.0384 135.144 22.1925 135.305 22.3473 135.466L22.4215 135.545C23.0774 136.224 23.7452 136.892 24.4249 137.548L24.4761 137.597C25.1687 138.263 25.8714 138.917 26.5842 139.558L26.6087 139.58C27.3339 140.23 28.0705 140.867 28.8184 141.49C29.2183 141.826 30.091 141.886 32.8297 141.368C38.5766 140.281 60.1003 136.545 83.965 133.274C106.418 130.197 130.529 129.545 133.743 129.577C137.941 129.62 141.915 130.555 140.314 132.555C140.494 132.35 140.672 132.143 140.849 131.935L140.889 131.889C140.892 131.885 140.895 131.881 140.898 131.877C141.068 131.679 141.237 131.479 141.405 131.277L141.441 131.235C141.45 131.222 141.461 131.211 141.471 131.198C141.637 131 141.803 130.8 141.968 130.596L142.028 130.522C142.195 130.316 142.362 130.109 142.529 129.901L142.56 129.862C143.181 129.083 143.787 128.293 144.38 127.492L144.408 127.455C145.002 126.653 145.578 125.841 146.138 125.016L146.143 125.01L146.158 124.987C146.311 124.762 146.463 124.537 146.614 124.311C146.628 124.289 146.642 124.268 146.657 124.246C146.806 124.025 146.952 123.802 147.096 123.578L147.104 123.567C147.116 123.548 147.128 123.529 147.14 123.511C147.289 123.284 147.435 123.056 147.579 122.828C147.588 122.815 147.596 122.802 147.604 122.789C148.841 120.841 149.992 118.838 151.059 116.779L151.074 116.753C151.201 116.505 151.328 116.258 151.454 116.011L151.467 115.986L151.477 115.966C151.603 115.716 151.727 115.465 151.848 115.214L151.853 115.204L151.862 115.185C152.888 113.092 153.824 110.949 154.671 108.756C154.98 107.859 154.016 107.163 145.77 107.163Z",\n fill: "url(#paint15_linear)"\n }\n ),\n /* @__PURE__ */ e1("defs", { children: [\n /* @__PURE__ */ e1(\n "linearGradient",\n {\n id: "paint0_linear",\n x1: "2.66606",\n y1: "92.4554",\n x2: "160.007",\n y2: "92.4554",\n gradientUnits: "userSpaceOnUse",\n children: [\n /* @__PURE__ */ c("stop", { offset: "0.03", stopColor: "#E9F7FE", stopOpacity: "0.4" }),\n /* @__PURE__ */ c("stop", { offset: "0.31", stopColor: "#5EA1D7" }),\n /* @__PURE__ */ c("stop", { offset: "0.55", stopColor: "#4DA3DA" }),\n /* @__PURE__ */ c("stop", { offset: "0.89", stopColor: "#645FAA" }),\n /* @__PURE__ */ c("stop", { offset: "1", stopColor: "#414099" })\n ]\n }\n ),\n /* @__PURE__ */ e1(\n "linearGradient",\n {\n id: "paint1_linear",\n x1: "20.8714",\n y1: "74.2626",\n x2: "98.1835",\n y2: "-3.05173",\n gradientUnits: "userSpaceOnUse",\n children: [\n /* @__PURE__ */ c("stop", { stopColor: "#FFF795", stopOpacity: "0.3" }),\n /* @__PURE__ */ c("stop", { offset: "0.35", stopColor: "#F3C206" }),\n /* @__PURE__ */ c("stop", { offset: "0.65", stopColor: "#FFC20E" }),\n /* @__PURE__ */ c("stop", { offset: "0.95", stopColor: "#F99B1C" }),\n /* @__PURE__ */ c("stop", { offset: "1", stopColor: "#F6891F" })\n ]\n }\n ),\n /* @__PURE__ */ e1(\n "linearGradient",\n {\n id: "paint2_linear",\n x1: "2.34921",\n y1: "60.0993",\n x2: "156.032",\n y2: "60.0993",\n gradientUnits: "userSpaceOnUse",\n children: [\n /* @__PURE__ */ c("stop", { stopColor: "#912A73" }),\n /* @__PURE__ */ c("stop", { offset: "0.17", stopColor: "#C6168D" }),\n /* @__PURE__ */ c("stop", { offset: "0.51", stopColor: "#F175AD" }),\n /* @__PURE__ */ c("stop", { offset: "0.76", stopColor: "#C593C3" }),\n /* @__PURE__ */ c("stop", { offset: "1", stopColor: "white", stopOpacity: "0.5" })\n ]\n }\n ),\n /* @__PURE__ */ e1(\n "linearGradient",\n {\n id: "paint3_linear",\n x1: "67.4151",\n y1: "146.281",\n x2: "150.697",\n y2: "146.281",\n gradientUnits: "userSpaceOnUse",\n children: [\n /* @__PURE__ */ c("stop", { stopColor: "#72BF44" }),\n /* @__PURE__ */ c("stop", { offset: "0.19", stopColor: "#91C83D" }),\n /* @__PURE__ */ c("stop", { offset: "0.38", stopColor: "#ACD037" }),\n /* @__PURE__ */ c("stop", { offset: "0.47", stopColor: "#99CA3B" }),\n /* @__PURE__ */ c("stop", { offset: "0.6", stopColor: "#7DC242" }),\n /* @__PURE__ */ c("stop", { offset: "0.72", stopColor: "#4FB848" }),\n /* @__PURE__ */ c("stop", { offset: "0.84", stopColor: "#24AE4D" }),\n /* @__PURE__ */ c("stop", { offset: "0.94", stopColor: "#0AA850" }),\n /* @__PURE__ */ c("stop", { offset: "1", stopColor: "#00A651" })\n ]\n }\n ),\n /* @__PURE__ */ e1(\n "linearGradient",\n {\n id: "paint4_linear",\n x1: "24.1118",\n y1: "124.458",\n x2: "131.498",\n y2: "124.458",\n gradientUnits: "userSpaceOnUse",\n children: [\n /* @__PURE__ */ c("stop", { stopColor: "#0077AC" }),\n /* @__PURE__ */ c("stop", { offset: "0.22", stopColor: "#0083BB" }),\n /* @__PURE__ */ c("stop", { offset: "0.44", stopColor: "#0099DA" }),\n /* @__PURE__ */ c("stop", { offset: "0.65", stopColor: "#00B2DD" }),\n /* @__PURE__ */ c("stop", { offset: "0.67", stopColor: "#00B1DA" }),\n /* @__PURE__ */ c("stop", { offset: "0.83", stopColor: "#00ACC6" }),\n /* @__PURE__ */ c("stop", { offset: "0.94", stopColor: "#00AAA9" }),\n /* @__PURE__ */ c("stop", { offset: "1", stopColor: "#00A99D" })\n ]\n }\n ),\n /* @__PURE__ */ e1(\n "linearGradient",\n {\n id: "paint5_linear",\n x1: "44.3183",\n y1: "7.71376",\n x2: "64.3489",\n y2: "15.9874",\n gradientUnits: "userSpaceOnUse",\n children: [\n /* @__PURE__ */ c("stop", { stopColor: "#F58220" }),\n /* @__PURE__ */ c("stop", { offset: "1", stopColor: "#FCAF17" })\n ]\n }\n ),\n /* @__PURE__ */ e1(\n "linearGradient",\n {\n id: "paint6_linear",\n x1: "104.468",\n y1: "129.137",\n x2: "154.651",\n y2: "129.137",\n gradientUnits: "userSpaceOnUse",\n children: [\n /* @__PURE__ */ c("stop", { stopColor: "#008A4B" }),\n /* @__PURE__ */ c("stop", { offset: "0.12", stopColor: "#179449" }),\n /* @__PURE__ */ c("stop", { offset: "0.56", stopColor: "#6CB842" }),\n /* @__PURE__ */ c("stop", { offset: "0.76", stopColor: "#8DC63F" }),\n /* @__PURE__ */ c("stop", { offset: "1", stopColor: "#32A443" })\n ]\n }\n ),\n /* @__PURE__ */ e1(\n "linearGradient",\n {\n id: "paint7_linear",\n x1: "0.000732422",\n y1: "51.004",\n x2: "81.8161",\n y2: "51.004",\n gradientUnits: "userSpaceOnUse",\n children: [\n /* @__PURE__ */ c("stop", { stopColor: "#FCAF17" }),\n /* @__PURE__ */ c("stop", { offset: "1", stopColor: "#F04E23" })\n ]\n }\n ),\n /* @__PURE__ */ e1(\n "linearGradient",\n {\n id: "paint8_linear",\n x1: "93.3262",\n y1: "60.7419",\n x2: "163.801",\n y2: "60.7419",\n gradientUnits: "userSpaceOnUse",\n children: [\n /* @__PURE__ */ c("stop", { offset: "0.19", stopColor: "#812990" }),\n /* @__PURE__ */ c("stop", { offset: "0.31", stopColor: "#882E92" }),\n /* @__PURE__ */ c("stop", { offset: "0.5", stopColor: "#9C3B97" }),\n /* @__PURE__ */ c("stop", { offset: "0.71", stopColor: "#BC509F" }),\n /* @__PURE__ */ c("stop", { offset: "0.95", stopColor: "#E86DAA" }),\n /* @__PURE__ */ c("stop", { offset: "1", stopColor: "#F173AC" })\n ]\n }\n ),\n /* @__PURE__ */ e1(\n "linearGradient",\n {\n id: "paint9_linear",\n x1: "2.54588",\n y1: "113.606",\n x2: "92.8454",\n y2: "113.606",\n gradientUnits: "userSpaceOnUse",\n children: [\n /* @__PURE__ */ c("stop", { stopColor: "#0089CF", stopOpacity: "0.9" }),\n /* @__PURE__ */ c("stop", { offset: "1", stopColor: "#0054A6" })\n ]\n }\n ),\n /* @__PURE__ */ e1(\n "linearGradient",\n {\n id: "paint10_linear",\n x1: "86.7802",\n y1: "156.894",\n x2: "60.4973",\n y2: "150.099",\n gradientUnits: "userSpaceOnUse",\n children: [\n /* @__PURE__ */ c("stop", { stopColor: "#9ACA3C" }),\n /* @__PURE__ */ c("stop", { offset: "0.34", stopColor: "#7AC340" }),\n /* @__PURE__ */ c("stop", { offset: "1", stopColor: "#33B44A" })\n ]\n }\n ),\n /* @__PURE__ */ e1(\n "linearGradient",\n {\n id: "paint11_linear",\n x1: "49.7751",\n y1: "5.1769",\n x2: "103.842",\n y2: "12.7753",\n gradientUnits: "userSpaceOnUse",\n children: [\n /* @__PURE__ */ c("stop", { stopColor: "#FDB515" }),\n /* @__PURE__ */ c("stop", { offset: "0.36", stopColor: "#FFD100" }),\n /* @__PURE__ */ c("stop", { offset: "0.58", stopColor: "#FFC907" }),\n /* @__PURE__ */ c("stop", { offset: "0.7", stopColor: "#FFC20E" }),\n /* @__PURE__ */ c("stop", { offset: "0.87", stopColor: "#FBA617" }),\n /* @__PURE__ */ c("stop", { offset: "1", stopColor: "#F78E1E" })\n ]\n }\n ),\n /* @__PURE__ */ e1(\n "linearGradient",\n {\n id: "paint12_linear",\n x1: "63.8311",\n y1: "158.853",\n x2: "77.472",\n y2: "145.212",\n gradientUnits: "userSpaceOnUse",\n children: [\n /* @__PURE__ */ c("stop", { stopColor: "#BAD532" }),\n /* @__PURE__ */ c("stop", { offset: "0.03", stopColor: "#B1D334", stopOpacity: "0.93" }),\n /* @__PURE__ */ c("stop", { offset: "0.11", stopColor: "#94CC39", stopOpacity: "0.72" }),\n /* @__PURE__ */ c("stop", { offset: "0.21", stopColor: "#7AC53D", stopOpacity: "0.52" }),\n /* @__PURE__ */ c("stop", { offset: "0.31", stopColor: "#64C041", stopOpacity: "0.36" }),\n /* @__PURE__ */ c("stop", { offset: "0.41", stopColor: "#52BC44", stopOpacity: "0.23" }),\n /* @__PURE__ */ c("stop", { offset: "0.53", stopColor: "#44B847", stopOpacity: "0.13" }),\n /* @__PURE__ */ c("stop", { offset: "0.65", stopColor: "#3AB649", stopOpacity: "0.06" }),\n /* @__PURE__ */ c("stop", { offset: "0.79", stopColor: "#35B44A", stopOpacity: "0.01" }),\n /* @__PURE__ */ c("stop", { offset: "1", stopColor: "#33B44A", stopOpacity: "0" })\n ]\n }\n ),\n /* @__PURE__ */ e1(\n "linearGradient",\n {\n id: "paint13_linear",\n x1: "50.2055",\n y1: "19.6079",\n x2: "101.358",\n y2: "5.90185",\n gradientUnits: "userSpaceOnUse",\n children: [\n /* @__PURE__ */ c("stop", { stopColor: "#F15F22", stopOpacity: "0.8" }),\n /* @__PURE__ */ c("stop", { offset: "0.21", stopColor: "#F6861A", stopOpacity: "0.48" }),\n /* @__PURE__ */ c("stop", { offset: "0.39", stopColor: "#FAA514", stopOpacity: "0.22" }),\n /* @__PURE__ */ c("stop", { offset: "0.52", stopColor: "#FDB910", stopOpacity: "0.06" }),\n /* @__PURE__ */ c("stop", { offset: "0.59", stopColor: "#FEC00F", stopOpacity: "0" }),\n /* @__PURE__ */ c("stop", { offset: "0.65", stopColor: "#FDBC10", stopOpacity: "0.04" }),\n /* @__PURE__ */ c("stop", { offset: "0.75", stopColor: "#FCB313", stopOpacity: "0.15" }),\n /* @__PURE__ */ c("stop", { offset: "0.88", stopColor: "#FAA418", stopOpacity: "0.32" }),\n /* @__PURE__ */ c("stop", { offset: "1", stopColor: "#F7941D", stopOpacity: "0.5" })\n ]\n }\n ),\n /* @__PURE__ */ e1(\n "linearGradient",\n {\n id: "paint14_linear",\n x1: "2.34922",\n y1: "65.9024",\n x2: "156.032",\n y2: "65.9024",\n gradientUnits: "userSpaceOnUse",\n children: [\n /* @__PURE__ */ c("stop", { stopColor: "#F4EAE5", stopOpacity: "0.06" }),\n /* @__PURE__ */ c("stop", { offset: "0.19", stopColor: "#DAAFAC", stopOpacity: "0.33" }),\n /* @__PURE__ */ c("stop", { offset: "0.68", stopColor: "#981B1E" })\n ]\n }\n ),\n /* @__PURE__ */ e1(\n "linearGradient",\n {\n id: "paint15_linear",\n x1: "13.2094",\n y1: "124.458",\n x2: "154.728",\n y2: "124.458",\n gradientUnits: "userSpaceOnUse",\n children: [\n /* @__PURE__ */ c("stop", { offset: "0.85", stopColor: "white", stopOpacity: "0" }),\n /* @__PURE__ */ c("stop", { offset: "0.91", stopColor: "#D6D7D8", stopOpacity: "0.23" }),\n /* @__PURE__ */ c("stop", { offset: "0.97", stopColor: "#B4B6B8", stopOpacity: "0.43" }),\n /* @__PURE__ */ c("stop", { offset: "1", stopColor: "#A7A9AC", stopOpacity: "0.5" })\n ]\n }\n )\n ] })\n ]\n }\n), ER = () => /* @__PURE__ */ c(\n "svg",\n {\n width: "160",\n height: "160",\n viewBox: "0 0 160 160",\n fill: "none",\n xmlns: "http://www.w3.org/2000/svg",\n children: /* @__PURE__ */ c(\n "path",\n {\n d: "M159.994 80.9826C159.998 80.6571 160 80.338 160 80.0253C160 79.8122 160 79.5994 160 79.3868C160 79.3132 160 79.2395 160 79.1711C160 79.0319 160 78.8927 159.995 78.7542C159.995 78.6629 159.995 78.5724 159.99 78.4818C159.99 78.3632 159.985 78.2447 159.982 78.1254C159.982 78.0245 159.977 77.9229 159.975 77.8212C159.973 77.7196 159.968 77.6099 159.965 77.5038L159.954 77.1702C159.954 77.0797 159.948 76.9891 159.944 76.8985C159.94 76.7741 159.934 76.6496 159.929 76.5252C159.929 76.4663 159.924 76.4073 159.921 76.3477C159.888 75.6201 159.846 74.8935 159.793 74.1679V74.1385C159.779 73.9514 159.765 73.7637 159.75 73.5766V73.5494C159.415 69.3605 158.75 65.2047 157.762 61.1204L157.726 60.9665L157.684 60.8008C157.637 60.6071 157.588 60.4149 157.536 60.222L157.514 60.1314C157.509 60.1137 157.505 60.096 157.5 60.0784C157.456 59.9031 157.41 59.7283 157.363 59.554C157.363 59.5467 157.36 59.5393 157.358 59.5312C157.319 59.3839 157.28 59.2381 157.24 59.0938L157.203 58.9524C157.196 58.9296 157.19 58.9067 157.184 58.8839C157.163 58.8103 157.143 58.7307 157.121 58.6542C157.089 58.5378 157.056 58.421 157.023 58.3036C157.015 58.2771 157.009 58.2506 157.001 58.2241L156.952 58.0518C156.952 58.0498 156.952 58.0478 156.952 58.0459C156.878 57.797 156.809 57.5496 156.735 57.3014C156.734 57.2947 156.732 57.288 156.73 57.2815L156.656 57.0437L156.637 56.984V56.9752C156.585 56.8024 156.533 56.6288 156.479 56.4545C156.475 56.4413 156.471 56.4273 156.467 56.414L156.445 56.3404C156.437 56.3154 156.429 56.2903 156.422 56.2668C156.406 56.2167 156.391 56.1666 156.375 56.1195C156.332 55.983 156.289 55.847 156.245 55.7115C156.209 55.5981 156.173 55.4847 156.136 55.3713L156.075 55.182C156.061 55.1386 156.046 55.0951 156.032 55.0517C155.992 54.9294 155.951 54.8067 155.91 54.6835L155.903 54.6599C155.883 54.5995 155.863 54.5392 155.842 54.4788L155.803 54.3617L155.734 54.1599V54.1496C155.734 54.1452 155.73 54.14 155.729 54.1349C155.669 53.9586 155.608 53.7829 155.547 53.6076L155.531 53.5627C155.503 53.4824 155.475 53.4014 155.446 53.3211L155.398 53.1849C155.357 53.071 155.316 52.9569 155.275 52.8425C155.247 52.7688 155.22 52.69 155.192 52.6142C155.173 52.5604 155.153 52.5074 155.133 52.4537L155.124 52.4301C155.118 52.4102 155.11 52.3903 155.103 52.3712L155.098 52.3565C155.077 52.3005 155.057 52.2453 155.035 52.1893L154.99 52.0678C154.977 52.0317 154.963 51.9941 154.95 51.9603L154.891 51.8012C154.881 51.7747 154.871 51.7482 154.861 51.7224L154.75 51.4279L154.739 51.3977C154.728 51.3704 154.717 51.3424 154.706 51.3152C154.675 51.2342 154.644 51.1539 154.613 51.0736C154.589 51.0118 154.566 50.9499 154.539 50.8881L154.513 50.8203L154.414 50.5685C154.382 50.4875 154.349 50.4065 154.316 50.3255L154.242 50.1495L154.207 50.0604C154.197 50.0368 154.188 50.0125 154.178 49.9867L154.136 49.8821L154.032 49.6296L153.977 49.4955C153.946 49.4219 153.915 49.3483 153.885 49.2746C153.848 49.1862 153.811 49.0971 153.775 49.0095L153.698 48.8276C153.689 48.8077 153.68 48.7871 153.672 48.7665C153.664 48.7459 153.646 48.7054 153.633 48.6752C153.58 48.55 153.526 48.4253 153.472 48.3011C153.454 48.2584 153.435 48.2164 153.417 48.1744L153.401 48.1361L153.284 47.8666L153.2 47.6781L153.119 47.4969L153.113 47.4829L152.989 47.2053C152.962 47.1442 152.934 47.0838 152.907 47.0234C152.899 47.0065 152.891 46.9896 152.884 46.9726C152.877 46.9557 152.863 46.927 152.852 46.9041L152.837 46.8688L152.702 46.5742L152.656 46.4755L152.641 46.4417C152.634 46.4269 152.628 46.4122 152.62 46.3975L152.598 46.3489L152.437 46.005C152.417 45.9623 152.397 45.9196 152.377 45.8776L152.313 45.7414C152.288 45.6913 152.265 45.6405 152.239 45.5897L152.189 45.4858C152.146 45.396 152.104 45.3061 152.06 45.2163C151.994 45.0813 151.928 44.9465 151.862 44.812C151.832 44.7494 151.801 44.6868 151.77 44.6242C151.763 44.608 151.755 44.5918 151.746 44.5756C151.696 44.4733 151.645 44.3716 151.594 44.27L151.567 44.2163C151.559 44.2008 151.551 44.1853 151.544 44.1706L151.414 43.9121C151.414 43.9055 151.407 43.8989 151.403 43.8923L151.33 43.745L151.241 43.5712C151.214 43.5196 151.188 43.4674 151.161 43.4165L151.15 43.3944L151.086 43.2715C151.078 43.256 151.07 43.2413 151.062 43.2258L150.847 42.812C150.814 42.7501 150.782 42.6882 150.749 42.6264L150.665 42.4703C150.607 42.3623 150.55 42.2542 150.492 42.1462L150.409 41.9916C150.383 41.943 150.356 41.8951 150.331 41.8443C150.176 41.5606 150.02 41.2778 149.862 40.996L149.772 40.8347L149.734 40.767C149.67 40.6536 149.605 40.5401 149.541 40.4267L149.497 40.3531L149.346 40.0887C149.34 40.0792 149.334 40.0689 149.329 40.0585L149.165 39.7787L149.099 39.6646L148.961 39.4289L148.955 39.4193L148.734 39.043C148.713 39.0087 148.689 38.9766 148.661 38.9473C147.899 37.8427 145.495 37.3906 143.589 37.2072C141.528 37.0076 137.988 36.9281 132.871 37.6807C126.694 38.5887 118.695 39.9098 111.603 42.0792C108.595 43.0005 105.923 44.0226 103.629 45.1287C91.8719 46.8835 79.7184 48.6973 67.3366 50.2989C65.3183 50.5601 63.3448 50.8166 61.4163 51.0685C67.679 47.8556 72.4456 44.8157 75.8986 41.8377C76.7807 41.0786 77.619 40.2699 78.4093 39.4157C80.4164 38.8005 82.4173 38.1815 84.4121 37.5585C96.4132 33.8028 105.77 30.2475 112.23 26.98C112.378 26.9064 112.517 26.8328 112.658 26.7591L112.785 26.6936L113.079 26.5426L113.235 26.4601L113.489 26.3269L113.653 26.2385C113.732 26.1965 113.812 26.1538 113.89 26.1111L114.053 26.0227L114.285 25.8961L114.441 25.8092L114.674 25.6788L114.821 25.5971L115.052 25.4653L115.19 25.3865C115.301 25.3231 115.41 25.2596 115.518 25.1957L115.548 25.1781C115.667 25.1089 115.782 25.0396 115.897 24.9704L116.004 24.9063L116.237 24.7642L116.365 24.6854L116.568 24.5595L116.7 24.4755L116.891 24.354L117.022 24.2701L117.208 24.1493L117.333 24.0668L117.518 23.9431L117.633 23.8695C117.7 23.8246 117.765 23.7796 117.83 23.734L117.924 23.6699C118.022 23.6036 118.116 23.5376 118.206 23.4718C120.625 21.7457 123.462 19.0026 123.238 15.7396C123.238 15.7153 123.235 15.6917 123.233 15.666V15.6373C123.095 14.1939 122.039 11.9994 117.913 9.56415L117.889 9.55015L117.751 9.46915L117.663 9.41908L117.569 9.36532L117.426 9.28431L117.374 9.25486L117.171 9.14219L117.145 9.1282L117.135 9.12304L117.122 9.11568C116.68 8.88543 116.239 8.65886 115.797 8.43598L115.767 8.42125C115.489 8.28207 115.21 8.14363 114.93 8.00813L114.888 7.98751L114.702 7.89767L114.408 7.75702H114.401L114.216 7.66938L114.159 7.64287L114.073 7.60163L113.86 7.50148L113.793 7.46982L113.581 7.37188L113.49 7.3299L113.471 7.32107L113.316 7.24743L113.243 7.21429L112.948 7.081L112.894 7.05596L112.785 7.00736L112.696 6.96686L112.384 6.82768L112.31 6.79454L112.281 6.78202L112.155 6.72605L111.823 6.57877L111.646 6.50513L111.476 6.43149L111.108 6.27317L110.822 6.15313L110.527 6.03015L110.344 5.95651L110.227 5.90791C110.092 5.85268 109.956 5.79819 109.821 5.74369L109.673 5.68552L109.265 5.52351L109.133 5.47196L108.702 5.3048L108.629 5.27608C108.39 5.18476 108.149 5.09419 107.908 5.00435H107.9C107.464 4.84234 107.026 4.68254 106.593 4.5301L106.566 4.52053L106.074 4.34895L106.013 4.32833C105.848 4.27187 105.684 4.21615 105.521 4.16117L105.487 4.14938L105.234 4.06543L105.013 3.99179L104.651 3.87397L104.38 3.78707L104.051 3.6825L103.734 3.58309L103.439 3.49178L102.906 3.3305L102.832 3.30841L102.808 3.30105L102.292 3.14935H102.281H102.274L102.253 3.14346L102.126 3.10737C101.227 2.84914 100.324 2.60638 99.4164 2.37907C84.4694 -1.33826 68.7698 -0.688327 54.181 4.25174L54.1582 4.25984C53.9911 4.31728 53.8232 4.37472 53.6561 4.43364L53.5265 4.47856C53.3571 4.53747 53.1885 4.59785 53.0199 4.65824L52.9073 4.698L52.3779 4.89094L52.3109 4.91524C47.8766 6.55097 43.5967 8.57844 39.522 10.9736L39.4808 10.9979C39.3475 11.076 39.2142 11.1555 39.0817 11.235L38.8741 11.3588C38.7607 11.4265 38.6478 11.4947 38.5354 11.5635C38.4456 11.618 38.3557 11.6725 38.2667 11.7277C38.166 11.7891 38.0654 11.8509 37.9648 11.9133C37.8642 11.9756 37.7616 12.0394 37.657 12.1047L37.3853 12.2748C37.2705 12.347 37.1559 12.4206 37.0415 12.4958L36.8052 12.6453C36.6702 12.7312 36.5362 12.8178 36.4032 12.9052L36.222 13.023C36.0257 13.1512 35.8311 13.2798 35.6382 13.4089C35.3128 13.6261 35.1523 13.9745 35.2192 14.3191C35.3422 14.9546 36.0984 15.1799 36.6572 15.2941C39.1244 15.7985 44.3681 16.3611 48.243 16.3935C48.3947 16.3935 48.5457 16.3935 48.6973 16.3935C52.9434 16.3935 57.2063 15.8965 60.4577 15.0179C62.4147 14.4885 63.9918 13.8301 65.1411 13.0598C66.2904 12.2896 67.0281 11.3963 67.3285 10.4088C72.0841 10.0546 77.1687 9.802 82.4278 9.73057C87.2381 9.6643 91.6761 9.71805 95.7417 9.89185C92.6877 12.2837 87.4499 14.8412 80.7602 17.1984C76.7387 18.6138 71.5819 20.3436 65.9613 22.1205C61.1336 22.4718 55.1043 23.4262 47.6165 24.7664C40.3451 26.0669 32.7432 27.7805 26.7544 29.4669C19.3697 31.5465 15.0279 33.4007 13.8506 34.9781L13.8352 35.0002L13.4442 35.5798C13.3124 35.7771 13.1806 35.9752 13.051 36.1733C13.0478 36.1773 13.0449 36.1815 13.0422 36.1858C12.8176 36.5275 12.585 36.8891 12.3302 37.2904L12.2654 37.3942L12.1771 37.5349C12.0819 37.6866 11.9874 37.8385 11.8936 37.9907L11.8863 38.0025L11.8811 38.0113L11.7236 38.2661L11.5255 38.5924C11.5174 38.6049 11.51 38.6174 11.5027 38.6299L11.446 38.722L11.2663 39.0224C11.2317 39.0799 11.1979 39.138 11.1633 39.1962L11.1242 39.261L11.0027 39.4657L10.9821 39.5011L10.9785 39.5085C10.8032 39.8067 10.6243 40.116 10.4373 40.4444C10.4226 40.4702 10.4078 40.496 10.3939 40.5181C10.3799 40.5401 10.3556 40.5843 10.3364 40.6189L10.2878 40.7029L10.2039 40.8502L10.0787 41.0726L10.0301 41.1602L9.93148 41.3377L9.89982 41.3951L9.78423 41.6101C9.76435 41.647 9.74447 41.6838 9.72386 41.7206L9.6944 41.7751C9.63649 41.8811 9.57881 41.9872 9.52138 42.0932L9.37413 42.365C9.28725 42.5292 9.19963 42.6927 9.11202 42.8591L9.10171 42.8797C8.89997 43.2634 8.69824 43.6559 8.48472 44.08L8.38533 44.2759C8.29918 44.4482 8.21451 44.6206 8.12616 44.7995L8.00541 45.0462C7.92197 45.2175 7.83902 45.3894 7.75656 45.5617C7.72784 45.6221 7.69986 45.6824 7.67115 45.7421L7.64538 45.7973C7.50181 46.0992 7.35823 46.4078 7.21761 46.7141V46.7178C7.07772 47.0227 6.93783 47.3327 6.80162 47.6405L6.75892 47.737V47.7422L6.7383 47.7893C6.65657 47.9741 6.57632 48.1575 6.49607 48.346L6.39741 48.578C6.31863 48.7621 6.24132 48.9462 6.16401 49.131L6.07566 49.3424C5.9424 49.6627 5.80913 49.9904 5.68102 50.3115L5.67366 50.3284C5.54334 50.6554 5.41376 50.9853 5.28859 51.3108L5.25546 51.3962C5.18184 51.5943 5.10821 51.7938 5.03016 51.9927L4.95654 52.1996C4.88438 52.396 4.81297 52.5923 4.74228 52.7887L4.66866 52.9824C4.54865 53.3167 4.4279 53.6599 4.31157 53.9986L4.30126 54.0281C4.18199 54.3771 4.06492 54.724 3.95448 55.059L3.9508 55.0694V55.0789L3.94712 55.0914C3.87865 55.2999 3.81165 55.5097 3.74465 55.7189L3.68354 55.9118C3.61923 56.1151 3.55592 56.3185 3.49358 56.5223L3.43689 56.7086C3.3316 57.0554 3.22631 57.4104 3.12324 57.7653L3.11367 57.7985C3.00912 58.16 2.90825 58.5201 2.81253 58.8692C2.81282 58.8704 2.81282 58.8717 2.81253 58.8729V58.8802C2.76787 59.0462 2.7232 59.2121 2.67853 59.378L2.58208 59.7462L2.47827 60.1446C2.45765 60.2264 2.43704 60.3081 2.41716 60.3899L2.23457 61.1263C1.34717 64.7973 0.72125 68.5268 0.361506 72.2864C0.35488 72.3512 0.348989 72.416 0.343099 72.4816C0.328374 72.634 0.315121 72.7857 0.301132 72.9381L0.279045 73.1966C0.268001 73.3299 0.256956 73.4639 0.246649 73.5972C0.239286 73.69 0.231188 73.7821 0.224561 73.8748C0.214253 74.0103 0.204682 74.1466 0.19511 74.2821C0.188484 74.369 0.181857 74.4551 0.175967 74.5413C0.161978 74.7467 0.149462 74.9522 0.136945 75.1584L0.119275 75.4625C0.112649 75.5818 0.106022 75.7004 0.100132 75.8189C0.094242 75.925 0.0890882 76.031 0.0846706 76.1371C0.0787805 76.2542 0.0736265 76.3713 0.0684727 76.4876C0.0630734 76.5912 0.0586558 76.695 0.0552199 76.7991C0.050066 76.9258 0.0456483 77.0517 0.0412307 77.1776C0.0412307 77.2711 0.0346045 77.3647 0.0316594 77.4582C0.025033 77.6577 0.0198789 77.8566 0.0147251 78.0561C0.0147251 78.1099 0.0147251 78.1644 0.0147251 78.2182C0.0107983 78.4032 0.00736247 78.5881 0.00441741 78.7727C0.00441741 78.794 0.00441741 78.8154 0.00441741 78.8375V78.8419C0.00441741 78.9685 0.00441759 79.0871 0 79.2005C0 79.2557 0 79.311 0 79.3669C0 79.5474 0 79.713 0 79.8721V79.9023C0.0147253 80.4679 0.402737 81.7853 3.67396 81.803H3.80796C6.14708 81.803 11.7074 81.504 17.6431 80.9355C28.0075 79.9428 48.257 77.3271 71.7041 74.2902L74.5019 73.9279C81.1283 73.0707 90.4053 71.7923 100.639 70.3504C102.392 71.3593 104.342 72.2437 106.39 73.0221C95.9906 75.3786 85.4517 77.7874 75.3774 80.2145C67.3167 82.1564 59.5086 84.1454 52.16 86.0844C44.2819 86.9224 36.6145 88.2074 28.5811 90.0146C19.7511 92.0029 11.2266 94.6156 4.57883 97.3786L4.40287 97.4522C2.90162 98.0715 2.2942 99.0414 2.59607 100.335V100.345L2.59975 100.359L2.65939 100.58V100.589L2.7632 100.982V100.987C2.8383 101.263 2.91487 101.539 2.99292 101.815C3.01648 101.899 3.04078 101.984 3.06654 102.069C3.12986 102.29 3.19416 102.511 3.25945 102.731L3.3154 102.923C3.39639 103.194 3.47861 103.464 3.56205 103.733L3.63568 103.97C3.70121 104.179 3.76747 104.387 3.83447 104.595L3.85877 104.669C3.87644 104.725 3.89484 104.78 3.91251 104.835C3.94712 104.942 3.98614 105.048 4.01854 105.155C4.07007 105.311 4.12161 105.468 4.17389 105.624L4.2431 105.827C4.31476 106.036 4.38691 106.244 4.45956 106.453L4.55454 106.723C4.63994 106.963 4.72609 107.203 4.81297 107.442L4.87997 107.626C4.9639 107.854 5.04906 108.082 5.13545 108.31C5.17153 108.405 5.20908 108.5 5.24442 108.595C5.27976 108.69 5.31804 108.785 5.35412 108.88L5.46677 109.175L5.50358 109.269C5.52125 109.316 5.53966 109.362 5.55807 109.409C5.65599 109.657 5.75612 109.905 5.85625 110.152L5.95786 110.399L5.977 110.446C6.05063 110.618 6.11984 110.791 6.19199 110.962L6.22218 111.035L6.31568 111.256C6.41778 111.496 6.52061 111.734 6.62418 111.973L6.71474 112.179L6.7545 112.267C6.82812 112.428 6.89733 112.59 6.96949 112.751C7.01955 112.862 7.06888 112.972 7.11674 113.084C7.1992 113.266 7.2824 113.447 7.36633 113.627C7.43358 113.775 7.50107 113.919 7.56881 114.06C7.64243 114.217 7.71606 114.374 7.78969 114.53C7.84712 114.651 7.90504 114.771 7.96345 114.891C8.03045 115.03 8.09892 115.169 8.16739 115.308C8.24764 115.472 8.32937 115.635 8.41109 115.799C8.49282 115.962 8.57602 116.128 8.65995 116.292C8.72523 116.421 8.79125 116.55 8.85801 116.678C8.91912 116.796 8.97949 116.913 9.0406 117.029L9.05901 117.065C9.12183 117.185 9.18466 117.305 9.24749 117.424C9.35106 117.621 9.45512 117.815 9.55967 118.007L9.80116 118.449C9.85638 118.548 9.91087 118.647 9.96609 118.743C10.0451 118.887 10.1246 119.03 10.2046 119.172L10.3033 119.346L10.3475 119.42C10.4991 119.687 10.6516 119.953 10.8017 120.211L10.9365 120.441C11.0256 120.594 11.1161 120.747 11.2067 120.899L11.3289 121.103C11.5196 121.421 11.711 121.736 11.8995 122.04L11.9496 122.122C12.0512 122.286 12.1535 122.449 12.2566 122.612L12.3582 122.773C12.3707 122.793 12.384 122.812 12.3965 122.833C12.409 122.854 12.4274 122.88 12.4421 122.907C12.5644 123.098 12.6871 123.289 12.8103 123.48C12.8176 123.492 12.825 123.504 12.8331 123.516C12.9487 123.695 13.065 123.871 13.1821 124.048L13.1902 124.062C13.4074 124.392 13.6386 124.734 13.8948 125.11L13.9338 125.166L14.0553 125.345L14.1974 125.549L14.2924 125.686L14.3601 125.783L14.5192 126.011C14.5236 126.016 14.5273 126.022 14.5309 126.027L14.5434 126.044C14.5434 126.049 14.5501 126.053 14.553 126.058C14.6502 126.195 14.7467 126.332 14.8475 126.469L14.9565 126.621L15.0662 126.773L15.1479 126.885C15.3018 127.098 15.4579 127.313 15.6162 127.526L15.6633 127.59L15.7524 127.711C15.8628 127.858 15.9738 128.006 16.0852 128.153C16.1397 128.226 16.1949 128.3 16.2494 128.374C16.3628 128.521 16.4764 128.668 16.5903 128.816L16.711 128.972C16.9716 129.308 17.2323 129.64 17.4856 129.956L17.5261 130.007C17.6497 130.162 17.7749 130.316 17.9001 130.47L18.0473 130.646C18.172 130.798 18.2972 130.95 18.4228 131.102L18.5362 131.238C18.9559 131.741 19.3859 132.244 19.8136 132.731L19.9219 132.855C20.0598 133.011 20.1987 133.168 20.3386 133.325L20.4343 133.431C20.893 133.942 21.362 134.452 21.8281 134.945L21.8744 134.994C22.0276 135.156 22.1817 135.318 22.3368 135.479L22.4104 135.557C22.6674 135.823 22.9258 136.089 23.1909 136.353L23.2189 136.381C23.6142 136.78 24.014 137.175 24.4146 137.56L24.4661 137.609C24.5029 137.645 24.5397 137.683 24.5787 137.716C24.7105 137.843 24.8423 137.97 24.9749 138.095L25.0485 138.164L25.0647 138.18C25.1898 138.298 25.3165 138.416 25.4424 138.534C25.516 138.608 25.5896 138.673 25.6669 138.742C25.7538 138.823 25.8414 138.904 25.9283 138.983L26.1153 139.155C26.2663 139.292 26.4172 139.429 26.5667 139.563L26.5711 139.567L26.5954 139.589L26.6123 139.605C26.7596 139.738 26.9105 139.871 27.0651 140.006L27.2448 140.165L27.5334 140.416C27.6608 140.527 27.7881 140.637 27.9155 140.746C27.9891 140.811 28.0627 140.876 28.1415 140.94L28.1975 140.988L28.2395 141.024L28.2623 141.044C28.4095 141.171 28.5627 141.297 28.7136 141.423L28.8049 141.496L28.8182 141.507C28.8506 141.533 28.8844 141.558 28.919 141.58C29.026 141.653 29.1418 141.712 29.2636 141.756H29.2695H29.2754C29.597 141.858 29.9336 141.905 30.2708 141.894C30.9681 141.894 31.9296 141.764 33.302 141.505C37.6651 140.678 59.0588 136.896 84.0101 133.478C91.453 132.457 99.0409 131.71 105.969 131.165C104.453 133.095 103.671 135.048 103.637 137.007C103.574 140.606 107.793 143.407 111.39 145.226C106.627 146.781 101.598 148.145 96.5509 149.141C93.2377 149.795 89.9937 150.354 86.8322 150.83C86.7985 150.611 86.7466 150.395 86.6768 150.184C86.0657 148.334 83.5757 147.043 79.6646 146.547C75.8758 146.068 71.0363 146.357 66.0378 147.363C59.2959 148.719 55.0204 150.794 53.8703 151.397C52.1033 152.323 51.4068 153.023 51.4568 153.813C51.5113 154.671 52.4442 155.128 53.2622 155.433L53.282 155.44L53.6347 155.563L53.687 155.582L54.0301 155.7C54.5845 155.89 55.1418 156.074 55.6845 156.247L55.7264 156.261L56.1498 156.393H56.1564C56.459 156.487 56.7683 156.582 57.0812 156.675L57.1261 156.689L57.1607 156.699L57.2166 156.716L57.411 156.774C57.6047 156.831 57.7983 156.887 57.9919 156.942L58.1046 156.975C58.6072 157.118 59.1118 157.255 59.6183 157.387L59.692 157.406L59.8061 157.437L59.8245 157.441C60.0297 157.494 60.2351 157.546 60.4408 157.598L60.6219 157.644L60.7308 157.671L60.7853 157.684L61.3184 157.813L61.4112 157.836L61.6372 157.889C61.6784 157.899 61.7204 157.908 61.7623 157.917L62.2085 158.021L62.3506 158.053L62.5384 158.095C62.6194 158.113 62.7011 158.13 62.7828 158.148C62.8933 158.172 63.0037 158.197 63.1156 158.222L63.176 158.235L63.4955 158.303L63.8533 158.376L64.0588 158.418H64.0742L64.3128 158.467C64.5332 158.51 64.754 158.553 64.9754 158.595L65.3885 158.669L65.7338 158.732L65.9326 158.767L66.0113 158.781L66.1814 158.811L66.3706 158.844L66.9258 158.937L67.0635 158.959L67.3241 159.001L67.545 159.036C67.6731 159.057 67.8012 159.076 67.93 159.095L68.0037 159.106L68.0854 159.119L68.1826 159.133C68.428 159.168 68.671 159.203 68.9115 159.237L69.0845 159.261L69.351 159.297L69.3982 159.303L69.9275 159.371L70.0093 159.381L70.063 159.388L70.4083 159.429C71.0062 159.5 71.6045 159.565 72.2033 159.623C72.4036 159.642 72.6039 159.661 72.8048 159.679L73.1546 159.71L73.2334 159.716L73.2658 159.72C73.4962 159.739 73.7281 159.757 73.9601 159.774L74.0212 159.779C76.0002 159.926 78.0022 160 79.9849 160C85.8763 160.002 91.7501 159.357 97.5007 158.076C103.072 156.83 108.494 154.988 113.671 152.581C115.726 151.626 117.741 150.582 119.715 149.449C119.728 149.442 119.741 149.437 119.754 149.43C120.811 148.823 121.852 148.193 122.877 147.539L122.913 147.516C123.173 147.35 123.432 147.183 123.69 147.014L123.863 146.901C124.076 146.761 124.287 146.62 124.498 146.479L124.728 146.325C124.924 146.192 125.119 146.059 125.312 145.926C125.492 145.802 125.672 145.676 125.851 145.55C125.988 145.454 126.125 145.359 126.261 145.262C126.445 145.131 126.628 145 126.81 144.868L126.989 144.738C127.189 144.591 127.389 144.443 127.587 144.296L127.672 144.233C127.808 144.133 127.944 144.033 128.079 143.931C132.538 140.57 136.636 136.754 140.306 132.545C140.485 132.34 140.663 132.134 140.84 131.926L140.89 131.868C141.06 131.668 141.229 131.468 141.396 131.269L141.463 131.189C141.629 130.989 141.795 130.788 141.96 130.587L142.019 130.513C142.188 130.307 142.355 130.1 142.52 129.893L142.552 129.852C143.169 129.08 143.781 128.282 144.371 127.483L144.399 127.445C144.988 126.646 145.57 125.825 146.127 125.011L146.135 124.999L146.151 124.976C146.304 124.752 146.456 124.527 146.606 124.301L146.649 124.236C146.796 124.014 146.943 123.791 147.09 123.567L147.134 123.5C147.281 123.273 147.428 123.045 147.576 122.816L147.6 122.778C148.833 120.832 149.996 118.809 151.06 116.761L151.069 116.744L151.074 116.735C151.202 116.489 151.328 116.242 151.453 115.993L151.477 115.946C151.603 115.696 151.727 115.445 151.852 115.193L151.865 115.165C152.463 113.946 153.032 112.703 153.569 111.449C153.606 111.362 153.642 111.276 153.681 111.19C153.732 111.068 153.782 110.946 153.833 110.822C153.894 110.674 153.955 110.529 154.016 110.384C154.069 110.254 154.122 110.123 154.174 109.993C154.226 109.863 154.285 109.721 154.339 109.585C154.399 109.433 154.458 109.283 154.518 109.131C154.559 109.026 154.601 108.92 154.641 108.814V108.809C154.651 108.783 154.661 108.757 154.672 108.735C154.672 108.727 154.678 108.717 154.681 108.707C154.856 108.183 154.7 107.808 154.54 107.584C154.072 106.937 152.969 106.305 145.245 106.305C145.135 106.305 133.659 106.362 112.317 108.408C103.746 109.231 93.7177 110.402 83.6412 111.691C86.3654 109.556 88.6147 107.578 90.244 105.607C91.3757 104.237 92.1819 102.907 92.6906 101.567C103.109 99.1106 113.986 96.6392 124.245 94.4352C140.532 90.9365 152.55 88.097 156.394 86.8392C157.117 86.6028 158.544 86.0093 159.307 85.2839L159.312 85.2788C159.598 85.002 159.791 84.6437 159.865 84.253C159.879 84.2051 159.889 84.1557 159.892 84.1057V84.1013V84.091C159.892 84.0674 159.892 84.0438 159.892 84.0173C159.892 84.0102 159.892 84.0031 159.892 83.996C159.924 83.3457 159.949 82.6881 159.965 82.0393V81.9171C159.972 81.6395 159.976 81.3648 159.981 81.0916L159.994 80.9826ZM60.1249 13.8147C56.8625 14.6983 52.5333 15.1814 48.2467 15.1453C44.8938 15.1174 40.3429 14.6659 37.7329 14.2248C41.8316 13.4457 52.4582 11.5937 65.9245 10.5207C64.9725 12.2608 61.9854 13.3124 60.1249 13.8147ZM81.1718 18.3804C90.9045 14.9539 95.4553 11.9413 97.5662 9.98537C106.728 10.4714 113.852 11.5974 118.838 13.3537C120.6 13.9745 121.688 14.6726 121.9 15.3191C121.938 15.4598 121.964 15.6034 121.979 15.7484V15.775C121.979 15.7897 121.979 15.8037 121.982 15.8199C122.084 17.3037 121.384 19.658 117.472 22.4475C117.384 22.5108 117.294 22.5742 117.203 22.6375L117.113 22.6993L116.923 22.829L116.813 22.9026L116.635 23.0219L116.514 23.1007L116.335 23.2178L116.209 23.2988L116.024 23.4159L115.896 23.4969L115.699 23.6191L115.575 23.6928L115.35 23.8297L115.245 23.8931C115.134 23.9603 115.021 24.0276 114.906 24.0948L114.876 24.1125C114.771 24.1739 114.665 24.2355 114.557 24.2973L114.424 24.371L114.198 24.4998L114.051 24.5801C113.978 24.6221 113.904 24.6648 113.824 24.7068L113.671 24.7922L113.445 24.9159L113.285 25.0028C113.211 25.0448 113.13 25.086 113.052 25.128L112.892 25.2134L112.643 25.3452L112.49 25.4255L112.204 25.5728L112.079 25.6369C111.94 25.7085 111.8 25.78 111.659 25.8511C105.26 29.0876 95.9648 32.6202 84.0314 36.3515C82.6468 36.7855 81.2591 37.2163 79.8686 37.6439C80.4219 36.9092 80.9076 36.1259 81.3198 35.3036C82.4978 32.925 82.7187 30.5759 81.9868 28.3225C81.308 26.2304 80.099 24.709 78.2915 23.6714C76.5922 22.6957 74.3436 22.15 71.4163 22.0034C71.1134 21.9887 70.8039 21.9779 70.4878 21.971C74.5019 20.6787 78.156 19.4408 81.1718 18.3789V18.3804ZM74.3245 72.6856L71.5267 73.0479C48.0906 76.0796 27.8507 78.6983 17.5069 79.6887C11.4953 80.2639 5.88644 80.5629 3.66513 80.5503C1.88558 80.5408 1.27079 80.1085 1.23545 79.8876C1.25828 79.7616 1.54837 79.0282 5.06403 77.1018C7.8022 75.6017 12.1425 73.5619 18.3337 70.8659C32.1475 64.8495 46.7028 58.0945 56.4811 53.4868C56.9818 53.2512 57.4729 53.0163 57.9581 52.7821C61.018 52.3805 64.1945 51.9664 67.4875 51.5398C78.6994 50.0898 89.7228 48.466 100.428 46.8695C98.0448 48.3541 96.1886 49.9963 94.8972 51.7651C92.9321 54.4581 92.2135 57.5091 92.7621 60.8383C93.3378 64.3245 95.6814 67.0977 98.9702 69.3217C89.3288 70.673 80.6284 71.8689 74.3252 72.6841L74.3245 72.6856ZM113.149 151.492C108.053 153.861 102.717 155.674 97.2327 156.9C91.5718 158.161 85.7896 158.796 79.9901 158.794C78.7929 158.794 77.5884 158.765 76.3824 158.711C76.847 158.531 77.3535 158.343 77.8549 158.16C79.8494 157.428 82.3314 156.517 84.1514 155.324C85.6409 154.348 86.5207 153.283 86.7865 152.141C90.0394 151.654 93.3835 151.081 96.7939 150.407C101.984 149.382 107.518 147.885 113.006 146.04C113.704 146.36 114.34 146.635 114.865 146.863C115.234 147.022 115.552 147.157 115.777 147.264C117.276 147.961 118.059 148.447 118.463 148.767C116.726 149.742 114.955 150.65 113.149 151.491L113.149 151.492ZM112.439 109.702C130.298 107.989 142.412 107.604 145.247 107.604C148.215 107.604 150.342 107.693 151.749 107.878C153.048 108.049 153.414 108.268 153.502 108.341V108.349L153.483 108.4C153.034 109.422 151.81 109.953 149.51 110.877C148.915 111.115 147.449 111.603 145.42 112.276C140.835 113.8 133.16 116.351 125.026 119.527C118.514 122.07 113.4 124.755 109.825 127.498C108.878 128.218 107.984 129.005 107.151 129.855C99.8619 130.408 91.7681 131.186 83.8422 132.273C58.8651 135.697 37.4413 139.484 33.0716 140.311C32.7321 140.375 32.4259 140.429 32.1475 140.475C36.6299 138.77 42.3721 136.425 52.0871 131.614C62.4051 126.503 66.5562 124.31 78.0036 115.955C79.2867 115.019 80.5062 114.118 81.6621 113.252C92.4418 111.858 103.274 110.579 112.44 109.7L112.439 109.702ZM156.007 85.6948C150.369 87.5358 130.072 91.9491 123.986 93.257C113.951 95.4131 103.324 97.8226 93.1125 100.228C93.4924 98.5561 93.4343 96.8403 92.9358 94.9934C92.522 93.4609 91.6606 92.033 90.3766 90.7502C89.1249 89.4984 87.4911 88.4107 85.5297 87.5219C81.467 85.6808 76.2204 84.7824 70.3575 84.9268C66.6762 85.0173 63.1178 85.1816 59.6338 85.4246C64.8149 84.091 70.1779 82.7492 75.6571 81.4289C86.3448 78.8515 97.5596 76.2983 108.576 73.8056C114.653 75.8477 121.266 77.073 126.07 77.9633C126.935 78.1239 127.752 78.2748 128.484 78.4162C131.572 79.012 135.779 79.6895 140.233 80.4045C147.041 81.5018 154.081 82.6358 157.998 83.6152C158.555 83.7544 158.635 83.926 158.644 84.0306C158.623 84.1794 158.553 84.3171 158.445 84.4216C157.95 84.8944 156.82 85.429 156.007 85.6948H156.007Z",\n fill: "currentColor"\n }\n )\n }\n), kR = () => /* @__PURE__ */ c(\n "svg",\n {\n width: "20",\n height: "20",\n viewBox: "0 0 20 20",\n fill: "none",\n xmlns: "http://www.w3.org/2000/svg",\n children: /* @__PURE__ */ c(\n "path",\n {\n d: "M19.9993 10.1228C19.9998 10.0821 20 10.0423 20 10.0032C20 9.97653 20 9.94992 20 9.92335C20 9.91415 20 9.90494 20 9.89638C20 9.87898 20 9.86159 19.9994 9.84428C19.9994 9.83287 19.9994 9.82154 19.9987 9.81022C19.9987 9.7954 19.9982 9.78058 19.9978 9.76567C19.9978 9.75306 19.9971 9.74036 19.9969 9.72765C19.9966 9.71495 19.996 9.70123 19.9957 9.68798L19.9943 9.64628C19.9943 9.63496 19.9935 9.62364 19.993 9.61232C19.9925 9.59676 19.9918 9.5812 19.9912 9.56565C19.9912 9.55828 19.9905 9.55092 19.9902 9.54346C19.986 9.45252 19.9807 9.36169 19.9741 9.27099V9.26731C19.9724 9.24393 19.9706 9.22046 19.9687 9.19708V9.19367C19.9268 8.67007 19.8437 8.15058 19.7202 7.64005L19.7157 7.62081L19.7105 7.6001C19.7046 7.57589 19.6985 7.55186 19.6921 7.52775L19.6893 7.51642C19.6887 7.51421 19.6881 7.512 19.6875 7.5098C19.682 7.48789 19.6763 7.46604 19.6704 7.44426C19.6704 7.44334 19.67 7.44241 19.6697 7.4414C19.6649 7.42299 19.66 7.40477 19.6551 7.38672L19.6504 7.36905C19.6495 7.3662 19.6488 7.36334 19.648 7.36049C19.6454 7.35128 19.6428 7.34134 19.6402 7.33177C19.6361 7.31723 19.632 7.30262 19.6278 7.28795C19.6269 7.28464 19.6261 7.28133 19.6251 7.27801L19.619 7.25647C19.619 7.25623 19.619 7.25598 19.619 7.25574C19.6098 7.22462 19.6011 7.1937 19.5919 7.16267C19.5917 7.16183 19.5915 7.161 19.5912 7.16019L19.582 7.13046L19.5797 7.123V7.1219C19.5732 7.10029 19.5666 7.0786 19.5599 7.05682C19.5593 7.05516 19.5589 7.05341 19.5583 7.05175L19.5556 7.04255C19.5547 7.03942 19.5536 7.03629 19.5527 7.03334C19.5507 7.02708 19.5489 7.02082 19.5468 7.01493C19.5415 6.99787 19.5361 6.98087 19.5306 6.96394C19.5262 6.94976 19.5216 6.93559 19.517 6.92141L19.5094 6.89775C19.5076 6.89232 19.5058 6.88689 19.5039 6.88146C19.499 6.86618 19.4939 6.85084 19.4888 6.83544L19.4878 6.83249C19.4854 6.82494 19.4829 6.81739 19.4803 6.80985L19.4753 6.79521L19.4668 6.76999V6.7687C19.4668 6.76815 19.4663 6.7675 19.4661 6.76686C19.4586 6.74483 19.451 6.72286 19.4434 6.70095L19.4414 6.69533C19.4379 6.6853 19.4344 6.67518 19.4308 6.66514L19.4247 6.64811C19.4197 6.63388 19.4145 6.61961 19.4093 6.60531C19.4058 6.59611 19.4025 6.58626 19.399 6.57677C19.3966 6.57005 19.3941 6.56343 19.3917 6.55671L19.3906 6.55376C19.3897 6.55128 19.3888 6.54879 19.3879 6.5464L19.3872 6.54456C19.3847 6.53756 19.3821 6.53066 19.3794 6.52366L19.3738 6.50847C19.3722 6.50396 19.3704 6.49927 19.3687 6.49503L19.3614 6.47515C19.3601 6.47184 19.3589 6.46852 19.3576 6.4653L19.3438 6.42848L19.3423 6.42471C19.341 6.4213 19.3397 6.4178 19.3383 6.4144C19.3344 6.40427 19.3306 6.39424 19.3266 6.38421C19.3237 6.37647 19.3207 6.36874 19.3174 6.36101L19.3141 6.35254L19.3017 6.32106C19.2977 6.31093 19.2936 6.30081 19.2895 6.29068L19.2803 6.26868L19.2759 6.25754C19.2747 6.2546 19.2735 6.25156 19.2722 6.24834L19.267 6.23527L19.254 6.20369L19.2471 6.18694C19.2433 6.17774 19.2394 6.16853 19.2356 6.15933C19.2311 6.14828 19.2264 6.13714 19.2219 6.12619L19.2122 6.10345C19.2111 6.10097 19.21 6.09839 19.209 6.09581C19.208 6.09323 19.2058 6.08817 19.2041 6.0844C19.1975 6.06875 19.1908 6.05316 19.1839 6.03764C19.1817 6.0323 19.1794 6.02705 19.1771 6.0218L19.1751 6.01702L19.1605 5.98333L19.15 5.95976L19.1399 5.93712L19.1391 5.93537L19.1237 5.90067C19.1203 5.89303 19.1168 5.88548 19.1134 5.87793C19.1123 5.87581 19.1114 5.87369 19.1105 5.87158C19.1096 5.86946 19.1078 5.86587 19.1065 5.86302L19.1046 5.8586L19.0878 5.82178L19.0821 5.80944L19.0801 5.80521C19.0793 5.80337 19.0785 5.80153 19.0776 5.79969L19.0748 5.79361L19.0546 5.75062C19.0522 5.74528 19.0497 5.73995 19.0471 5.7347L19.0391 5.71767C19.036 5.71141 19.0331 5.70506 19.0299 5.69871L19.0236 5.68573C19.0183 5.6745 19.0129 5.66327 19.0075 5.65204C18.9993 5.63516 18.991 5.61832 18.9828 5.6015C18.979 5.59368 18.9751 5.58585 18.9713 5.57803C18.9703 5.576 18.9693 5.57398 18.9683 5.57195C18.962 5.55916 18.9556 5.54646 18.9493 5.53375L18.9459 5.52703C18.9449 5.5251 18.9439 5.52317 18.943 5.52133L18.9267 5.48902C18.9267 5.48819 18.9259 5.48736 18.9254 5.48653L18.9162 5.46812L18.9051 5.4464C18.9018 5.43995 18.8985 5.43342 18.8951 5.42707L18.8938 5.42431L18.8858 5.40893C18.8847 5.407 18.8837 5.40516 18.8828 5.40323L18.8558 5.35149C18.8518 5.34376 18.8477 5.33603 18.8436 5.3283L18.8331 5.30878C18.8259 5.29528 18.8187 5.28178 18.8115 5.26828L18.8011 5.24895C18.7979 5.24287 18.7945 5.23689 18.7913 5.23054C18.772 5.19507 18.7525 5.15972 18.7328 5.1245L18.7215 5.10434L18.7167 5.09587C18.7087 5.08169 18.7007 5.06752 18.6926 5.05334L18.6871 5.04414L18.6683 5.01109C18.6675 5.0099 18.6667 5.00861 18.6661 5.00732L18.6456 4.97234L18.6374 4.95807L18.6201 4.92862L18.6194 4.92742L18.5918 4.88038C18.5892 4.87608 18.5861 4.87207 18.5826 4.86841C18.4874 4.73034 18.1869 4.67382 17.9487 4.6509C17.691 4.62595 17.2485 4.61601 16.6089 4.71009C15.8368 4.82359 14.8369 4.98872 13.9504 5.2599C13.5743 5.37506 13.2403 5.50282 12.9536 5.64108C11.484 5.86044 9.9648 6.08716 8.41708 6.28737C8.16478 6.32002 7.9181 6.35208 7.67704 6.38356C8.45987 5.98195 9.05569 5.60196 9.48733 5.22971C9.59759 5.13482 9.70237 5.03374 9.80116 4.92696C10.052 4.85007 10.3022 4.77268 10.5515 4.69481C12.0517 4.22535 13.2212 3.78093 14.0288 3.37251C14.0472 3.3633 14.0646 3.3541 14.0823 3.34489L14.0981 3.3367L14.1349 3.31783L14.1544 3.30752L14.1861 3.29086L14.2066 3.27981C14.2165 3.27456 14.2265 3.26923 14.2362 3.26389L14.2567 3.25284L14.2856 3.23701L14.3052 3.22615L14.3343 3.20985L14.3527 3.19964L14.3816 3.18316L14.3988 3.17331C14.4126 3.16539 14.4262 3.15745 14.4397 3.14947L14.4435 3.14726C14.4583 3.13861 14.4728 3.12995 14.4871 3.1213L14.5005 3.11329L14.5296 3.09553L14.5456 3.08568L14.571 3.06994L14.5875 3.05944L14.6114 3.04426L14.6278 3.03376L14.6509 3.01867L14.6666 3.00836L14.6898 2.99289L14.7041 2.98369C14.7125 2.97807 14.7206 2.97246 14.7288 2.96675L14.7405 2.95874C14.7528 2.95046 14.7645 2.9422 14.7757 2.93398C15.0782 2.71821 15.4328 2.37533 15.4048 1.96745C15.4048 1.96441 15.4043 1.96147 15.4041 1.95825V1.95466C15.3868 1.77424 15.2549 1.49993 14.7391 1.19552L14.7362 1.19377L14.7189 1.18364L14.7079 1.17738L14.6961 1.17066L14.6783 1.16054L14.6717 1.15686L14.6464 1.14277L14.6431 1.14102L14.6419 1.14038L14.6403 1.13946C14.585 1.11068 14.5298 1.08236 14.4746 1.0545L14.4709 1.05266C14.4361 1.03526 14.4013 1.01795 14.3662 1.00102L14.3609 0.998439L14.3378 0.987209L14.3009 0.969627H14.3001L14.277 0.958673L14.2699 0.955359L14.2591 0.950204L14.2326 0.937685L14.2241 0.933727L14.1977 0.921485L14.1863 0.916238L14.1839 0.915133L14.1645 0.905928L14.1553 0.901786L14.1185 0.885125L14.1117 0.881995L14.0981 0.87592L14.087 0.870857L14.0479 0.85346L14.0387 0.849317L14.0351 0.847753L14.0193 0.840757L13.9779 0.822347L13.9557 0.813142L13.9346 0.803937L13.8885 0.784146L13.8527 0.769142L13.8159 0.753769L13.793 0.744564L13.7784 0.738489C13.7615 0.731585 13.7445 0.724773 13.7276 0.717962L13.7092 0.71069L13.6581 0.690439L13.6416 0.683995L13.5878 0.6631L13.5786 0.65951C13.5487 0.648095 13.5187 0.636773 13.4885 0.625543H13.4876C13.433 0.605292 13.3783 0.585317 13.3241 0.566263L13.3208 0.565066L13.2592 0.543619L13.2517 0.541041C13.2311 0.533984 13.2105 0.527019 13.1901 0.520146L13.1859 0.518673L13.1542 0.508179L13.1266 0.498974L13.0814 0.484246L13.0475 0.473384L13.0064 0.460313L12.9667 0.447886L12.9299 0.436472L12.8632 0.416313L12.854 0.413552L12.851 0.412631L12.7865 0.393669H12.7851H12.7842L12.7817 0.392932L12.7657 0.388422C12.6533 0.356143 12.5404 0.325797 12.4271 0.297384C10.5587 -0.167283 8.59623 -0.0860409 6.77263 0.531468L6.76977 0.532481C6.74888 0.53966 6.7279 0.54684 6.70701 0.554204L6.69081 0.559819C6.66964 0.567183 6.64857 0.574731 6.62749 0.58228L6.61341 0.58725L6.54724 0.611367L6.53886 0.614405C5.98457 0.818872 5.44959 1.07231 4.94025 1.3717L4.93509 1.37474C4.91844 1.3845 4.90178 1.39444 4.88521 1.40438L4.85926 1.41984C4.84509 1.42831 4.83097 1.43684 4.81692 1.44543C4.8057 1.45225 4.79447 1.45906 4.78333 1.46596C4.77075 1.47363 4.75818 1.48136 4.7456 1.48916C4.73302 1.49695 4.7202 1.50493 4.70713 1.51309L4.67317 1.53436C4.65881 1.54338 4.64448 1.55258 4.63019 1.56197L4.60065 1.58066C4.58377 1.5914 4.56702 1.60223 4.5504 1.61315L4.52776 1.62788C4.50321 1.6439 4.47889 1.65997 4.45477 1.67611C4.41409 1.70327 4.39403 1.74681 4.40241 1.78989C4.41778 1.86933 4.51229 1.89749 4.58215 1.91176C4.89055 1.97482 5.54601 2.04514 6.03038 2.04919C6.04934 2.04919 6.06821 2.04919 6.08717 2.04919C6.61792 2.04919 7.15079 1.98706 7.55721 1.87724C7.80184 1.81106 7.99897 1.72877 8.14263 1.63248C8.2863 1.5362 8.37851 1.42454 8.41606 1.3011C9.01051 1.25682 9.64609 1.22525 10.3035 1.21632C10.9048 1.20804 11.4595 1.21476 11.9677 1.23648C11.586 1.53546 10.9312 1.85515 10.095 2.1498C9.59234 2.32672 8.94774 2.54295 8.24516 2.76507C7.6417 2.80897 6.88804 2.92827 5.95206 3.0958C5.04314 3.25836 4.0929 3.47256 3.3443 3.68336C2.42121 3.94331 1.87849 4.17509 1.73133 4.37226L1.72939 4.37503L1.68053 4.44747C1.66405 4.47214 1.64758 4.4969 1.63138 4.52166C1.63098 4.52216 1.63061 4.52268 1.63028 4.52323C1.60221 4.56594 1.57312 4.61113 1.54128 4.6613L1.53318 4.67428L1.52214 4.69186C1.51023 4.71082 1.49842 4.72982 1.4867 4.74884L1.48578 4.75031L1.48514 4.75142L1.46544 4.78327L1.44069 4.82405C1.43967 4.82561 1.43875 4.82718 1.43783 4.82874L1.43075 4.84025L1.40829 4.8778C1.40397 4.88498 1.39973 4.89226 1.39541 4.89953L1.39053 4.90763L1.37534 4.93322L1.37277 4.93764L1.37231 4.93856C1.3504 4.97584 1.32804 5.0145 1.30466 5.05555C1.30282 5.05877 1.30098 5.062 1.29923 5.06476C1.29748 5.06752 1.29445 5.07304 1.29205 5.07737L1.28598 5.08786L1.27549 5.10627L1.25984 5.13407L1.25377 5.14503L1.24144 5.16721L1.23748 5.17439L1.22303 5.20127C1.22054 5.20587 1.21806 5.21047 1.21548 5.21508L1.2118 5.22189C1.20456 5.23514 1.19735 5.2484 1.19017 5.26165L1.17177 5.29562C1.16091 5.31615 1.14995 5.33658 1.139 5.35739L1.13771 5.35996C1.1125 5.40792 1.08728 5.45698 1.06059 5.51L1.04817 5.53449C1.0374 5.55603 1.02681 5.57757 1.01577 5.59994L1.00068 5.63077C0.990246 5.65219 0.979877 5.67367 0.969569 5.69521C0.96598 5.70276 0.962483 5.71031 0.958893 5.71776L0.955672 5.72467C0.937726 5.76241 0.919779 5.80097 0.902201 5.83927V5.83973C0.884715 5.87784 0.867229 5.91659 0.850202 5.95507L0.844864 5.96713V5.96777L0.842287 5.97366C0.832072 5.99677 0.82204 6.01969 0.812009 6.04325L0.799676 6.07225C0.789829 6.09526 0.780165 6.11827 0.770502 6.14138L0.759458 6.1678C0.7428 6.20784 0.726142 6.2488 0.710128 6.28893L0.709207 6.29105C0.692918 6.33192 0.67672 6.37316 0.661074 6.41385L0.656933 6.42452C0.647729 6.44929 0.638526 6.47423 0.62877 6.49908L0.619567 6.52495C0.610548 6.5495 0.601621 6.57404 0.592786 6.59859L0.583582 6.6228C0.568581 6.66459 0.553487 6.70749 0.538946 6.74983L0.537658 6.75351C0.522748 6.79714 0.508115 6.8405 0.49431 6.88238L0.49385 6.88367V6.88487L0.49339 6.88643C0.484831 6.91248 0.476456 6.93872 0.468081 6.96486L0.460442 6.98898C0.452404 7.01438 0.444489 7.03982 0.436697 7.06528L0.429611 7.08857C0.41645 7.13193 0.403289 7.1763 0.390405 7.22067L0.389208 7.22481C0.376139 7.27 0.363531 7.31502 0.351567 7.35865C0.351602 7.3588 0.351602 7.35896 0.351567 7.35911V7.36003C0.345983 7.38077 0.3404 7.40151 0.334817 7.42226L0.32276 7.46828L0.309784 7.51808C0.307207 7.5283 0.30463 7.53852 0.302145 7.54873L0.279321 7.64078C0.168397 8.09967 0.0901562 8.56585 0.0451882 9.0358C0.0443599 9.0439 0.0436237 9.052 0.0428874 9.0602C0.0410467 9.07925 0.0393902 9.09821 0.0376415 9.11727L0.0348806 9.14958C0.0335001 9.16624 0.0321196 9.18299 0.0308311 9.19965C0.0299108 9.21125 0.0288984 9.22276 0.0280701 9.23436C0.0267817 9.25129 0.0255852 9.26832 0.0243888 9.28526C0.0235605 9.29612 0.0227322 9.30689 0.0219959 9.31766C0.0202473 9.34334 0.0186827 9.36903 0.0171182 9.3948L0.0149094 9.43282C0.0140811 9.44773 0.0132528 9.46255 0.0125165 9.47737C0.0117802 9.49062 0.011136 9.50388 0.0105838 9.51713C0.00984756 9.53177 0.00920332 9.54641 0.00855909 9.56095C0.00788418 9.5739 0.00733197 9.58688 0.00690249 9.59989C0.00625825 9.61572 0.00570603 9.63146 0.00515383 9.6472C0.00515383 9.65889 0.00432556 9.67058 0.00395743 9.68227C0.00312913 9.70722 0.00248487 9.73207 0.00184064 9.75702C0.00184064 9.76374 0.00184064 9.77055 0.00184064 9.77727C0.00134979 9.8004 0.000920309 9.82351 0.000552176 9.84658C0.000552176 9.84925 0.000552176 9.85192 0.000552176 9.85468V9.85524C0.000552176 9.87107 0.000552199 9.88589 0 9.90006C0 9.90697 0 9.91387 0 9.92087C0 9.94342 0 9.96413 0 9.98401V9.98779C0.00184066 10.0585 0.0503421 10.2232 0.459245 10.2254H0.475996C0.768385 10.2254 1.46342 10.188 2.20539 10.1169C3.50094 9.99285 6.03213 9.66589 8.96302 9.28627L9.31274 9.24098C10.141 9.13384 11.3007 8.97404 12.5799 8.7938C12.7991 8.91991 13.0428 9.03047 13.2987 9.12776C11.9988 9.42232 10.6815 9.72342 9.42217 10.0268C8.41459 10.2696 7.43858 10.5182 6.52 10.7605C5.53524 10.8653 4.57681 11.0259 3.57264 11.2518C2.46888 11.5004 1.40332 11.827 0.572354 12.1723L0.550358 12.1815C0.362703 12.2589 0.286775 12.3802 0.324509 12.5419V12.5431L0.324969 12.5449L0.332424 12.5725V12.5737L0.3454 12.6227V12.6234C0.354788 12.6579 0.364359 12.6924 0.374115 12.7268C0.37706 12.7374 0.380097 12.748 0.383318 12.7586C0.391233 12.7862 0.399271 12.8138 0.407431 12.8414L0.414425 12.8654C0.424549 12.8992 0.434826 12.933 0.445256 12.9666L0.45446 12.9963C0.462651 13.0224 0.470934 13.0484 0.479309 13.0744L0.482346 13.0836C0.484555 13.0906 0.486855 13.0975 0.489064 13.1044C0.49339 13.1178 0.498268 13.131 0.502317 13.1444C0.508759 13.1639 0.515202 13.1835 0.521736 13.203L0.530387 13.2283C0.539345 13.2545 0.548364 13.2805 0.557445 13.3066L0.569317 13.3403C0.579993 13.3704 0.590761 13.4004 0.601621 13.4303L0.609996 13.4532C0.620488 13.4817 0.631133 13.5102 0.641931 13.5387C0.646441 13.5507 0.651135 13.5626 0.655552 13.5744C0.65997 13.5863 0.664756 13.5982 0.669265 13.6101L0.683346 13.6469L0.687948 13.6586C0.690157 13.6645 0.692457 13.6703 0.694758 13.6761C0.706999 13.7072 0.719515 13.7381 0.732032 13.769L0.744732 13.7999L0.747125 13.8058C0.756328 13.8273 0.76498 13.8488 0.773999 13.8702L0.777772 13.8794L0.78946 13.907C0.802222 13.937 0.815076 13.9668 0.828022 13.9966L0.839342 14.0223L0.844312 14.0334C0.853516 14.0536 0.862167 14.0737 0.871186 14.0939C0.877444 14.1078 0.88361 14.1215 0.889593 14.1355C0.8999 14.1582 0.9103 14.1809 0.920792 14.2034C0.929197 14.2218 0.937634 14.2399 0.946101 14.2575C0.955304 14.2772 0.964508 14.2968 0.973711 14.3163C0.980889 14.3314 0.988129 14.3464 0.995431 14.3614C1.00381 14.3788 1.01236 14.3962 1.02092 14.4135C1.03096 14.434 1.04117 14.4544 1.05139 14.4749C1.0616 14.4953 1.072 14.516 1.08249 14.5365C1.09065 14.5527 1.09891 14.5688 1.10725 14.5848C1.11489 14.5995 1.12244 14.6141 1.13008 14.6287L1.13238 14.6331C1.14023 14.6481 1.14808 14.6631 1.15594 14.678C1.16888 14.7026 1.18189 14.7268 1.19496 14.7508L1.22515 14.8061C1.23205 14.8185 1.23886 14.8309 1.24576 14.8429C1.25564 14.8609 1.26558 14.8787 1.27558 14.8965L1.28791 14.9183L1.29343 14.9275C1.31239 14.9609 1.33144 14.9941 1.35022 15.0263L1.36706 15.0552C1.3782 15.0743 1.38952 15.0934 1.40084 15.1124L1.41611 15.1378C1.43995 15.1776 1.46388 15.217 1.48744 15.255L1.4937 15.2652C1.5064 15.2857 1.51919 15.3061 1.53208 15.3265L1.54478 15.3466C1.54634 15.3491 1.548 15.3516 1.54956 15.3541C1.55113 15.3567 1.55343 15.36 1.55527 15.3633C1.57055 15.3873 1.58588 15.4112 1.60128 15.435C1.60221 15.4365 1.60313 15.438 1.60414 15.4395C1.61859 15.4618 1.63313 15.4839 1.64776 15.506L1.64877 15.5078C1.67592 15.549 1.70482 15.5918 1.73685 15.6388L1.74173 15.6457L1.75691 15.6681L1.77468 15.6936L1.78655 15.7107L1.79501 15.7229L1.81489 15.7513C1.81545 15.752 1.81591 15.7527 1.81637 15.7534L1.81793 15.7555C1.81793 15.7561 1.81876 15.7567 1.81913 15.7572C1.83128 15.7744 1.84333 15.7916 1.85594 15.8087L1.86956 15.8276L1.88327 15.8466L1.89349 15.8607C1.91273 15.8873 1.93224 15.9141 1.95202 15.9408L1.95791 15.9488L1.96905 15.9639C1.98285 15.9823 1.99672 16.0007 2.01065 16.0191C2.01746 16.0283 2.02436 16.0375 2.03117 16.0467C2.04534 16.0651 2.05955 16.0835 2.07378 16.1019L2.08888 16.1215C2.12146 16.1635 2.15404 16.205 2.1857 16.2444L2.19076 16.2509C2.20622 16.2702 2.22186 16.2895 2.23751 16.3087L2.25592 16.3308C2.2715 16.3498 2.28715 16.3688 2.30285 16.3878L2.31703 16.4047C2.36949 16.4676 2.42323 16.5304 2.4767 16.5914L2.49023 16.6068C2.50747 16.6264 2.52484 16.646 2.54232 16.6656L2.55429 16.6789C2.61162 16.7428 2.67025 16.8065 2.72851 16.8681L2.7343 16.8743C2.75345 16.8945 2.77271 16.9147 2.7921 16.9348L2.80131 16.9446C2.83342 16.9779 2.86573 17.0111 2.89886 17.0442L2.90236 17.0477C2.95178 17.0975 3.00175 17.1469 3.05182 17.195L3.05826 17.2011C3.06286 17.2056 3.06747 17.2103 3.07234 17.2146C3.08882 17.2304 3.10529 17.2462 3.12186 17.2619L3.13106 17.2705L3.13308 17.2725C3.14873 17.2873 3.16456 17.302 3.1803 17.3167C3.1895 17.3259 3.1987 17.3341 3.20837 17.3428C3.21923 17.3529 3.23018 17.3629 3.24104 17.3729L3.26442 17.3943C3.28328 17.4115 3.30215 17.4286 3.32083 17.4454L3.32138 17.4459L3.32442 17.4486L3.32654 17.4506C3.34495 17.4672 3.36381 17.4839 3.38314 17.5007L3.40559 17.5206L3.44167 17.552C3.45759 17.5658 3.47352 17.5796 3.48944 17.5933C3.49864 17.6014 3.50784 17.6095 3.51769 17.6175L3.52469 17.6234L3.52993 17.628L3.53278 17.6305C3.55119 17.6464 3.57033 17.6621 3.5892 17.6778L3.60061 17.6871L3.60227 17.6883C3.60632 17.6917 3.61055 17.6948 3.61488 17.6975C3.62825 17.7066 3.64272 17.714 3.65795 17.7195H3.65869H3.65942C3.69962 17.7322 3.74169 17.7381 3.78385 17.7368C3.87101 17.7368 3.9912 17.7205 4.16275 17.6881C4.70814 17.5848 7.38235 17.112 10.5013 16.6847C11.4316 16.5571 12.3801 16.4638 13.2461 16.3957C13.0567 16.6369 12.9588 16.8811 12.9546 17.1258C12.9468 17.5758 13.4741 17.9258 13.9238 18.1532C13.3283 18.3476 12.6997 18.5181 12.0689 18.6426C11.6547 18.7244 11.2492 18.7942 10.854 18.8538C10.8498 18.8264 10.8433 18.7993 10.8346 18.773C10.7582 18.5417 10.447 18.3804 9.95808 18.3184C9.48448 18.2585 8.87954 18.2947 8.25473 18.4204C7.41198 18.5899 6.87755 18.8492 6.73379 18.9246C6.51291 19.0404 6.42585 19.1278 6.43211 19.2266C6.43892 19.3338 6.55552 19.391 6.65777 19.4291L6.66026 19.43L6.70434 19.4454L6.71087 19.4477L6.75376 19.4625C6.82306 19.4863 6.89273 19.5093 6.96056 19.5309L6.96581 19.5326L7.01872 19.5491H7.01955C7.05738 19.5609 7.09603 19.5727 7.13515 19.5844L7.14076 19.5861L7.14509 19.5874L7.15208 19.5895L7.17638 19.5967C7.20058 19.6038 7.22479 19.6109 7.24899 19.6178L7.26307 19.6219C7.3259 19.6397 7.38897 19.6569 7.45229 19.6733L7.4615 19.6758L7.47576 19.6796L7.47806 19.6801C7.50371 19.6868 7.52939 19.6933 7.55509 19.6997L7.57773 19.7055L7.59136 19.7088L7.59817 19.7105L7.6648 19.7266L7.67639 19.7295L7.70465 19.7361C7.7098 19.7374 7.71505 19.7385 7.72029 19.7397L7.77607 19.7526L7.79383 19.7566L7.8173 19.7619C7.82742 19.7642 7.83764 19.7663 7.84785 19.7685C7.86166 19.7715 7.87546 19.7747 7.88945 19.7777L7.897 19.7794L7.93694 19.7878L7.98167 19.797L8.00735 19.8023H8.00928L8.0391 19.8084C8.06664 19.8138 8.09425 19.8192 8.12193 19.8244L8.17356 19.8336L8.21672 19.8415L8.24157 19.8459L8.25142 19.8477L8.27268 19.8514L8.29633 19.8555L8.36572 19.8671L8.38293 19.8698L8.41551 19.8751L8.44312 19.8795C8.45914 19.8821 8.47515 19.8845 8.49125 19.8869L8.50046 19.8883L8.51067 19.8898L8.52282 19.8916C8.5535 19.896 8.58387 19.9004 8.61394 19.9046L8.63556 19.9076L8.66888 19.9121L8.67477 19.9129L8.74094 19.9214L8.75116 19.9227L8.75788 19.9235L8.80104 19.9286C8.87577 19.9375 8.95056 19.9456 9.02542 19.9529C9.05045 19.9553 9.07548 19.9577 9.10061 19.9599L9.14432 19.9637L9.15417 19.9646L9.15822 19.965C9.18703 19.9674 9.21602 19.9696 9.24501 19.9717L9.25265 19.9724C9.50003 19.9908 9.75027 20 9.99811 20C10.7345 20.0002 11.4688 19.9196 12.1876 19.7595C12.884 19.6037 13.5617 19.3735 14.2089 19.0727C14.4658 18.9533 14.7176 18.8227 14.9643 18.6811C14.966 18.6803 14.9676 18.6796 14.9692 18.6787C15.1014 18.6029 15.2315 18.5241 15.3596 18.4423L15.3641 18.4395C15.3966 18.4188 15.429 18.3979 15.4613 18.3768L15.4828 18.3626C15.5095 18.3451 15.5359 18.3275 15.5623 18.3099L15.591 18.2906C15.6155 18.2741 15.6398 18.2574 15.664 18.2407C15.6865 18.2252 15.709 18.2095 15.7314 18.1937C15.7485 18.1817 15.7656 18.1699 15.7826 18.1578C15.8056 18.1414 15.8285 18.125 15.8512 18.1085L15.8736 18.0923C15.8986 18.0738 15.9236 18.0554 15.9484 18.037L15.959 18.0291C15.9759 18.0166 15.993 18.0041 16.0098 17.9914C16.5672 17.5712 17.0795 17.0942 17.5383 16.5682C17.5606 16.5425 17.5829 16.5167 17.605 16.4908L17.6113 16.4835C17.6325 16.4585 17.6536 16.4335 17.6745 16.4086L17.6829 16.3986C17.7037 16.3736 17.7244 16.3485 17.745 16.3233L17.7524 16.3141C17.7735 16.2884 17.7943 16.2625 17.8149 16.2366L17.819 16.2316C17.8961 16.135 17.9726 16.0353 18.0464 15.9354L18.0499 15.9306C18.1235 15.8308 18.1962 15.7281 18.2659 15.6263L18.2669 15.6249L18.2689 15.622C18.288 15.594 18.307 15.5658 18.3257 15.5376L18.3311 15.5295C18.3495 15.5017 18.3679 15.4739 18.3863 15.4459L18.3917 15.4375C18.4101 15.4092 18.4285 15.3807 18.4469 15.352L18.45 15.3472C18.6041 15.104 18.7495 14.8512 18.8825 14.5951L18.8836 14.593L18.8842 14.5919C18.9002 14.5612 18.916 14.5303 18.9316 14.4991L18.9346 14.4933C18.9504 14.462 18.9659 14.4307 18.9815 14.3991L18.9831 14.3956C19.0579 14.2433 19.129 14.0879 19.1961 13.9311C19.2008 13.9203 19.2053 13.9095 19.2101 13.8987C19.2165 13.8835 19.2228 13.8683 19.2291 13.8527C19.2367 13.8343 19.2443 13.8161 19.252 13.798C19.2587 13.7817 19.2652 13.7654 19.2717 13.7491C19.2783 13.7329 19.2856 13.7152 19.2924 13.6981C19.2999 13.6792 19.3073 13.6603 19.3147 13.6414C19.3199 13.6282 19.3251 13.615 19.3302 13.6018V13.6011C19.3314 13.5979 19.3327 13.5947 19.334 13.5919C19.334 13.5908 19.3348 13.5896 19.3352 13.5884C19.357 13.5229 19.3375 13.4759 19.3175 13.448C19.259 13.3671 19.1212 13.2881 18.1556 13.2881C18.1419 13.2881 16.7073 13.2952 14.0396 13.5511C12.9682 13.6539 11.7147 13.8002 10.4552 13.9614C10.7957 13.6945 11.0768 13.4472 11.2805 13.2009C11.422 13.0297 11.5227 12.8633 11.5863 12.6958C12.8886 12.3888 14.2483 12.0799 15.5307 11.8044C17.5665 11.3671 19.0687 11.0121 19.5492 10.8549C19.6396 10.8254 19.8181 10.7512 19.9134 10.6605L19.914 10.6598C19.9497 10.6253 19.9738 10.5805 19.9831 10.5316C19.9849 10.5256 19.9861 10.5195 19.9865 10.5132V10.5127V10.5114C19.9865 10.5084 19.9865 10.5055 19.9865 10.5022C19.9865 10.5013 19.9865 10.5004 19.9865 10.4995C19.9905 10.4182 19.9937 10.336 19.9957 10.2549V10.2396C19.9965 10.2049 19.9971 10.1706 19.9976 10.1364L19.9993 10.1228ZM7.51561 1.72683C7.10781 1.83729 6.56666 1.89768 6.03084 1.89317C5.61172 1.88967 5.04286 1.83324 4.71661 1.7781C5.22896 1.68072 6.55727 1.44921 8.24056 1.31509C8.12156 1.53261 7.74818 1.66405 7.51561 1.72683ZM10.1465 2.29754C11.3631 1.86923 11.9319 1.49266 12.1958 1.24817C13.3409 1.30892 14.2315 1.44967 14.8547 1.66921C15.075 1.74681 15.211 1.83407 15.2375 1.91489C15.2422 1.93248 15.2455 1.95043 15.2473 1.96856V1.97187C15.2473 1.97371 15.2473 1.97546 15.2478 1.97748C15.2605 2.16297 15.173 2.45725 14.684 2.80594C14.6729 2.81385 14.6617 2.82177 14.6504 2.82969L14.6391 2.83742L14.6154 2.85362L14.6016 2.86282L14.5793 2.87774L14.5642 2.88759L14.5419 2.90222L14.5261 2.91235L14.503 2.92698L14.487 2.93711L14.4624 2.95239L14.4469 2.96159L14.4187 2.97872L14.4057 2.98663C14.3918 2.99504 14.3777 3.00345 14.3632 3.01185L14.3595 3.01406C14.3464 3.02173 14.3331 3.02944 14.3196 3.03717L14.303 3.04637L14.2748 3.06248L14.2564 3.07251C14.2472 3.07776 14.238 3.0831 14.228 3.08835L14.2089 3.09903L14.1807 3.11449L14.1606 3.12535C14.1514 3.1306 14.1413 3.13575 14.1315 3.141L14.1114 3.15168L14.0803 3.16815L14.0612 3.17819L14.0255 3.1966L14.0098 3.20461C13.9925 3.21357 13.9751 3.22249 13.9574 3.23139C13.1575 3.63595 11.9956 4.07752 10.5039 4.54394C10.3308 4.59819 10.1574 4.65204 9.98357 4.70549C10.0527 4.61365 10.1134 4.51573 10.165 4.41295C10.3122 4.11563 10.3398 3.82199 10.2484 3.54031C10.1635 3.2788 10.0124 3.08862 9.78644 2.95892C9.57403 2.83696 9.29296 2.76875 8.92703 2.75043C8.88918 2.74859 8.85049 2.74724 8.81098 2.74638C9.31274 2.58483 9.7695 2.4301 10.1465 2.29736V2.29754ZM9.29056 9.0857L8.94084 9.13098C6.01133 9.50995 3.48134 9.83729 2.18836 9.96109C1.43691 10.033 0.735805 10.0704 0.458141 10.0688C0.235697 10.0676 0.158849 10.0136 0.154432 9.98595C0.157285 9.97021 0.193546 9.87852 0.633004 9.63772C0.975275 9.45021 1.51781 9.19523 2.29172 8.85824C4.01844 8.10619 5.83785 7.26181 7.06014 6.68585C7.12272 6.6564 7.18411 6.62703 7.24476 6.59776C7.62725 6.54756 8.02431 6.4958 8.43594 6.44247C9.83742 6.26123 11.2153 6.05826 12.5535 5.85869C12.2556 6.04426 12.0236 6.24954 11.8622 6.47064C11.6165 6.80727 11.5267 7.18863 11.5953 7.60479C11.6672 8.04056 11.9602 8.38722 12.3713 8.66521C11.1661 8.83412 10.0786 8.98361 9.29066 9.08551L9.29056 9.0857ZM14.1436 18.9365C13.5066 19.2326 12.8396 19.4592 12.1541 19.6125C11.4465 19.7701 10.7237 19.8495 9.99876 19.8492C9.84911 19.8492 9.69855 19.8456 9.5478 19.8389C9.60587 19.8164 9.66919 19.7929 9.73186 19.7701C9.98118 19.6786 10.2914 19.5646 10.5189 19.4155C10.7051 19.2935 10.8151 19.1603 10.8483 19.0176C11.2549 18.9567 11.6729 18.8851 12.0992 18.8009C12.748 18.6727 13.4397 18.4856 14.1257 18.255C14.213 18.295 14.2925 18.3294 14.3582 18.3578C14.4042 18.3778 14.444 18.3946 14.4721 18.408C14.6595 18.4951 14.7574 18.5558 14.8079 18.5959C14.5908 18.7178 14.3694 18.8313 14.1437 18.9364L14.1436 18.9365ZM14.0549 13.7127C16.2873 13.4986 17.8015 13.4504 18.1559 13.4504C18.5269 13.4504 18.7928 13.4617 18.9686 13.4848C19.131 13.5061 19.1768 13.5336 19.1878 13.5426V13.5436L19.1853 13.55C19.1293 13.6778 18.9762 13.7442 18.6888 13.8596C18.6144 13.8894 18.4311 13.9504 18.1776 14.0345C17.6044 14.225 16.645 14.5438 15.6282 14.9408C14.8142 15.2588 14.1749 15.5944 13.7281 15.9373C13.6097 16.0272 13.498 16.1257 13.3939 16.2318C12.4827 16.301 11.471 16.3983 10.4803 16.5341C7.35814 16.9621 4.68016 17.4355 4.13395 17.5389C4.09152 17.5469 4.05323 17.5537 4.01844 17.5594C4.57874 17.3462 5.29651 17.0531 6.51089 16.4517C7.80064 15.8129 8.31952 15.5388 9.75045 14.4944C9.91084 14.3774 10.0633 14.2647 10.2078 14.1566C11.5552 13.9823 12.9093 13.8224 14.055 13.7125L14.0549 13.7127ZM19.5009 10.7119C18.7961 10.942 16.259 11.4936 15.4982 11.6571C14.2439 11.9266 12.9155 12.2278 11.6391 12.5285C11.6866 12.3195 11.6793 12.105 11.617 11.8742C11.5653 11.6826 11.4576 11.5041 11.2971 11.3438C11.1406 11.1873 10.9364 11.0513 10.6912 10.9402C10.1834 10.7101 9.52755 10.5978 8.79469 10.6158C8.33452 10.6272 7.88973 10.6477 7.45423 10.6781C8.10186 10.5114 8.77223 10.3437 9.45714 10.1786C10.7931 9.85643 12.1949 9.53729 13.5719 9.2257C14.3317 9.48096 15.1582 9.63413 15.7587 9.74542C15.8669 9.76549 15.969 9.78436 16.0605 9.80203C16.4465 9.8765 16.9724 9.96118 17.5291 10.0506C18.3801 10.1877 19.2601 10.3295 19.7498 10.4519C19.8193 10.4693 19.8294 10.4908 19.8305 10.5038C19.8279 10.5224 19.8191 10.5396 19.8056 10.5527C19.7437 10.6118 19.6025 10.6786 19.5008 10.7119H19.5009Z",\n fill: "#fff"\n }\n )\n }\n), NR = () => /* @__PURE__ */ e1(\n "svg",\n {\n width: "160",\n height: "160",\n viewBox: "0 0 160 160",\n fill: "none",\n color: "transparent",\n xmlns: "http://www.w3.org/2000/svg",\n children: [\n /* @__PURE__ */ c("mask", { id: "path-1-inside-1", fill: "white", children: /* @__PURE__ */ c("path", { d: "M159.994 80.9826C159.998 80.6571 160 80.338 160 80.0253C160 79.8122 160 79.5994 160 79.3868C160 79.3132 160 79.2395 160 79.1711C160 79.0319 160 78.8927 159.995 78.7542C159.995 78.6629 159.995 78.5724 159.99 78.4818C159.99 78.3632 159.985 78.2447 159.982 78.1254C159.982 78.0245 159.977 77.9229 159.975 77.8212C159.973 77.7196 159.968 77.6099 159.965 77.5038L159.954 77.1702C159.954 77.0797 159.948 76.9891 159.944 76.8985C159.94 76.7741 159.934 76.6496 159.929 76.5252C159.929 76.4663 159.924 76.4073 159.921 76.3477C159.888 75.6201 159.846 74.8935 159.793 74.1679V74.1385C159.779 73.9514 159.765 73.7637 159.75 73.5766V73.5494C159.415 69.3605 158.75 65.2047 157.762 61.1204L157.726 60.9665L157.684 60.8008C157.637 60.6071 157.588 60.4149 157.536 60.222L157.514 60.1314C157.509 60.1137 157.505 60.096 157.5 60.0784C157.456 59.9031 157.41 59.7283 157.363 59.554C157.363 59.5467 157.36 59.5393 157.358 59.5312C157.319 59.3839 157.28 59.2381 157.24 59.0938L157.203 58.9524C157.196 58.9296 157.19 58.9067 157.184 58.8839C157.163 58.8103 157.143 58.7307 157.121 58.6542C157.089 58.5378 157.056 58.421 157.023 58.3036C157.015 58.2771 157.009 58.2506 157.001 58.2241L156.952 58.0518C156.952 58.0498 156.952 58.0478 156.952 58.0459C156.878 57.797 156.809 57.5496 156.735 57.3014C156.734 57.2947 156.732 57.288 156.73 57.2815L156.656 57.0437L156.637 56.984V56.9752C156.585 56.8024 156.533 56.6288 156.479 56.4545C156.475 56.4413 156.471 56.4273 156.467 56.414L156.445 56.3404C156.437 56.3154 156.429 56.2903 156.422 56.2668C156.406 56.2167 156.391 56.1666 156.375 56.1195C156.332 55.983 156.289 55.847 156.245 55.7115C156.209 55.5981 156.173 55.4847 156.136 55.3713L156.075 55.182C156.061 55.1386 156.046 55.0951 156.032 55.0517C155.992 54.9294 155.951 54.8067 155.91 54.6835L155.903 54.6599C155.883 54.5995 155.863 54.5392 155.842 54.4788L155.803 54.3617L155.734 54.1599V54.1496C155.734 54.1452 155.73 54.14 155.729 54.1349C155.669 53.9586 155.608 53.7829 155.547 53.6076L155.531 53.5627C155.503 53.4824 155.475 53.4014 155.446 53.3211L155.398 53.1849C155.357 53.071 155.316 52.9569 155.275 52.8425C155.247 52.7688 155.22 52.69 155.192 52.6142C155.173 52.5604 155.153 52.5074 155.133 52.4537L155.124 52.4301C155.118 52.4102 155.11 52.3903 155.103 52.3712L155.098 52.3565C155.077 52.3005 155.057 52.2453 155.035 52.1893L154.99 52.0678C154.977 52.0317 154.963 51.9941 154.95 51.9603L154.891 51.8012C154.881 51.7747 154.871 51.7482 154.861 51.7224L154.75 51.4279L154.739 51.3977C154.728 51.3704 154.717 51.3424 154.706 51.3152C154.675 51.2342 154.644 51.1539 154.613 51.0736C154.589 51.0118 154.566 50.9499 154.539 50.8881L154.513 50.8203L154.414 50.5685C154.382 50.4875 154.349 50.4065 154.316 50.3255L154.242 50.1495L154.207 50.0604C154.197 50.0368 154.188 50.0125 154.178 49.9867L154.136 49.8821L154.032 49.6296L153.977 49.4955C153.946 49.4219 153.915 49.3483 153.885 49.2746C153.848 49.1862 153.811 49.0971 153.775 49.0095L153.698 48.8276C153.689 48.8077 153.68 48.7871 153.672 48.7665C153.664 48.7459 153.646 48.7054 153.633 48.6752C153.58 48.55 153.526 48.4253 153.472 48.3011C153.454 48.2584 153.435 48.2164 153.417 48.1744L153.401 48.1361L153.284 47.8666L153.2 47.6781L153.119 47.4969L153.113 47.4829L152.989 47.2053C152.962 47.1442 152.934 47.0838 152.907 47.0234C152.899 47.0065 152.891 46.9896 152.884 46.9726C152.877 46.9557 152.863 46.927 152.852 46.9041L152.837 46.8688L152.702 46.5742L152.656 46.4755L152.641 46.4417C152.634 46.4269 152.628 46.4122 152.62 46.3975L152.598 46.3489L152.437 46.005C152.417 45.9623 152.397 45.9196 152.377 45.8776L152.313 45.7414C152.288 45.6913 152.265 45.6405 152.239 45.5897L152.189 45.4858C152.146 45.396 152.104 45.3061 152.06 45.2163C151.994 45.0813 151.928 44.9465 151.862 44.812C151.832 44.7494 151.801 44.6868 151.77 44.6242C151.763 44.608 151.755 44.5918 151.746 44.5756C151.696 44.4733 151.645 44.3716 151.594 44.27L151.567 44.2163C151.559 44.2008 151.551 44.1853 151.544 44.1706L151.414 43.9121C151.414 43.9055 151.407 43.8989 151.403 43.8923L151.33 43.745L151.241 43.5712C151.214 43.5196 151.188 43.4674 151.161 43.4165L151.15 43.3944L151.086 43.2715C151.078 43.256 151.07 43.2413 151.062 43.2258L150.847 42.812C150.814 42.7501 150.782 42.6882 150.749 42.6264L150.665 42.4703C150.607 42.3623 150.55 42.2542 150.492 42.1462L150.409 41.9916C150.383 41.943 150.356 41.8951 150.331 41.8443C150.176 41.5606 150.02 41.2778 149.862 40.996L149.772 40.8347L149.734 40.767C149.67 40.6536 149.605 40.5401 149.541 40.4267L149.497 40.3531L149.346 40.0887C149.34 40.0792 149.334 40.0689 149.329 40.0585L149.165 39.7787L149.099 39.6646L148.961 39.4289L148.955 39.4193L148.734 39.043C148.713 39.0087 148.689 38.9766 148.661 38.9473C147.899 37.8427 145.495 37.3906 143.589 37.2072C141.528 37.0076 137.988 36.9281 132.871 37.6807C126.694 38.5887 118.695 39.9098 111.603 42.0792C108.595 43.0005 105.923 44.0226 103.629 45.1287C91.8719 46.8835 79.7184 48.6973 67.3366 50.2989C65.3183 50.5601 63.3448 50.8166 61.4163 51.0685C67.679 47.8556 72.4456 44.8157 75.8986 41.8377C76.7807 41.0786 77.619 40.2699 78.4093 39.4157C80.4164 38.8005 82.4173 38.1815 84.4121 37.5585C96.4132 33.8028 105.77 30.2475 112.23 26.98C112.378 26.9064 112.517 26.8328 112.658 26.7591L112.785 26.6936L113.079 26.5426L113.235 26.4601L113.489 26.3269L113.653 26.2385C113.732 26.1965 113.812 26.1538 113.89 26.1111L114.053 26.0227L114.285 25.8961L114.441 25.8092L114.674 25.6788L114.821 25.5971L115.052 25.4653L115.19 25.3865C115.301 25.3231 115.41 25.2596 115.518 25.1957L115.548 25.1781C115.667 25.1089 115.782 25.0396 115.897 24.9704L116.004 24.9063L116.237 24.7642L116.365 24.6854L116.568 24.5595L116.7 24.4755L116.891 24.354L117.022 24.2701L117.208 24.1493L117.333 24.0668L117.518 23.9431L117.633 23.8695C117.7 23.8246 117.765 23.7796 117.83 23.734L117.924 23.6699C118.022 23.6036 118.116 23.5376 118.206 23.4718C120.625 21.7457 123.462 19.0026 123.238 15.7396C123.238 15.7153 123.235 15.6917 123.233 15.666V15.6373C123.095 14.1939 122.039 11.9994 117.913 9.56415L117.889 9.55015L117.751 9.46915L117.663 9.41908L117.569 9.36532L117.426 9.28431L117.374 9.25486L117.171 9.14219L117.145 9.1282L117.135 9.12304L117.122 9.11568C116.68 8.88543 116.239 8.65886 115.797 8.43598L115.767 8.42125C115.489 8.28207 115.21 8.14363 114.93 8.00813L114.888 7.98751L114.702 7.89767L114.408 7.75702H114.401L114.216 7.66938L114.159 7.64287L114.073 7.60163L113.86 7.50148L113.793 7.46982L113.581 7.37188L113.49 7.3299L113.471 7.32107L113.316 7.24743L113.243 7.21429L112.948 7.081L112.894 7.05596L112.785 7.00736L112.696 6.96686L112.384 6.82768L112.31 6.79454L112.281 6.78202L112.155 6.72605L111.823 6.57877L111.646 6.50513L111.476 6.43149L111.108 6.27317L110.822 6.15313L110.527 6.03015L110.344 5.95651L110.227 5.90791C110.092 5.85268 109.956 5.79819 109.821 5.74369L109.673 5.68552L109.265 5.52351L109.133 5.47196L108.702 5.3048L108.629 5.27608C108.39 5.18476 108.149 5.09419 107.908 5.00435H107.9C107.464 4.84234 107.026 4.68254 106.593 4.5301L106.566 4.52053L106.074 4.34895L106.013 4.32833C105.848 4.27187 105.684 4.21615 105.521 4.16117L105.487 4.14938L105.234 4.06543L105.013 3.99179L104.651 3.87397L104.38 3.78707L104.051 3.6825L103.734 3.58309L103.439 3.49178L102.906 3.3305L102.832 3.30841L102.808 3.30105L102.292 3.14935H102.281H102.274L102.253 3.14346L102.126 3.10737C101.227 2.84914 100.324 2.60638 99.4164 2.37907C84.4694 -1.33826 68.7698 -0.688327 54.181 4.25174L54.1582 4.25984C53.9911 4.31728 53.8232 4.37472 53.6561 4.43364L53.5265 4.47856C53.3571 4.53747 53.1885 4.59785 53.0199 4.65824L52.9073 4.698L52.3779 4.89094L52.3109 4.91524C47.8766 6.55097 43.5967 8.57844 39.522 10.9736L39.4808 10.9979C39.3475 11.076 39.2142 11.1555 39.0817 11.235L38.8741 11.3588C38.7607 11.4265 38.6478 11.4947 38.5354 11.5635C38.4456 11.618 38.3557 11.6725 38.2667 11.7277C38.166 11.7891 38.0654 11.8509 37.9648 11.9133C37.8642 11.9756 37.7616 12.0394 37.657 12.1047L37.3853 12.2748C37.2705 12.347 37.1559 12.4206 37.0415 12.4958L36.8052 12.6453C36.6702 12.7312 36.5362 12.8178 36.4032 12.9052L36.222 13.023C36.0257 13.1512 35.8311 13.2798 35.6382 13.4089C35.3128 13.6261 35.1523 13.9745 35.2192 14.3191C35.3422 14.9546 36.0984 15.1799 36.6572 15.2941C39.1244 15.7985 44.3681 16.3611 48.243 16.3935C48.3947 16.3935 48.5457 16.3935 48.6973 16.3935C52.9434 16.3935 57.2063 15.8965 60.4577 15.0179C62.4147 14.4885 63.9918 13.8301 65.1411 13.0598C66.2904 12.2896 67.0281 11.3963 67.3285 10.4088C72.0841 10.0546 77.1687 9.802 82.4278 9.73057C87.2381 9.6643 91.6761 9.71805 95.7417 9.89185C92.6877 12.2837 87.4499 14.8412 80.7602 17.1984C76.7387 18.6138 71.5819 20.3436 65.9613 22.1205C61.1336 22.4718 55.1043 23.4262 47.6165 24.7664C40.3451 26.0669 32.7432 27.7805 26.7544 29.4669C19.3697 31.5465 15.0279 33.4007 13.8506 34.9781L13.8352 35.0002L13.4442 35.5798C13.3124 35.7771 13.1806 35.9752 13.051 36.1733C13.0478 36.1773 13.0449 36.1815 13.0422 36.1858C12.8176 36.5275 12.585 36.8891 12.3302 37.2904L12.2654 37.3942L12.1771 37.5349C12.0819 37.6866 11.9874 37.8385 11.8936 37.9907L11.8863 38.0025L11.8811 38.0113L11.7236 38.2661L11.5255 38.5924C11.5174 38.6049 11.51 38.6174 11.5027 38.6299L11.446 38.722L11.2663 39.0224C11.2317 39.0799 11.1979 39.138 11.1633 39.1962L11.1242 39.261L11.0027 39.4657L10.9821 39.5011L10.9785 39.5085C10.8032 39.8067 10.6243 40.116 10.4373 40.4444C10.4226 40.4702 10.4078 40.496 10.3939 40.5181C10.3799 40.5401 10.3556 40.5843 10.3364 40.6189L10.2878 40.7029L10.2039 40.8502L10.0787 41.0726L10.0301 41.1602L9.93148 41.3377L9.89982 41.3951L9.78423 41.6101C9.76435 41.647 9.74447 41.6838 9.72386 41.7206L9.6944 41.7751C9.63649 41.8811 9.57881 41.9872 9.52138 42.0932L9.37413 42.365C9.28725 42.5292 9.19963 42.6927 9.11202 42.8591L9.10171 42.8797C8.89997 43.2634 8.69824 43.6559 8.48472 44.08L8.38533 44.2759C8.29918 44.4482 8.21451 44.6206 8.12616 44.7995L8.00541 45.0462C7.92197 45.2175 7.83902 45.3894 7.75656 45.5617C7.72784 45.6221 7.69986 45.6824 7.67115 45.7421L7.64538 45.7973C7.50181 46.0992 7.35823 46.4078 7.21761 46.7141V46.7178C7.07772 47.0227 6.93783 47.3327 6.80162 47.6405L6.75892 47.737V47.7422L6.7383 47.7893C6.65657 47.9741 6.57632 48.1575 6.49607 48.346L6.39741 48.578C6.31863 48.7621 6.24132 48.9462 6.16401 49.131L6.07566 49.3424C5.9424 49.6627 5.80913 49.9904 5.68102 50.3115L5.67366 50.3284C5.54334 50.6554 5.41376 50.9853 5.28859 51.3108L5.25546 51.3962C5.18184 51.5943 5.10821 51.7938 5.03016 51.9927L4.95654 52.1996C4.88438 52.396 4.81297 52.5923 4.74228 52.7887L4.66866 52.9824C4.54865 53.3167 4.4279 53.6599 4.31157 53.9986L4.30126 54.0281C4.18199 54.3771 4.06492 54.724 3.95448 55.059L3.9508 55.0694V55.0789L3.94712 55.0914C3.87865 55.2999 3.81165 55.5097 3.74465 55.7189L3.68354 55.9118C3.61923 56.1151 3.55592 56.3185 3.49358 56.5223L3.43689 56.7086C3.3316 57.0554 3.22631 57.4104 3.12324 57.7653L3.11367 57.7985C3.00912 58.16 2.90825 58.5201 2.81253 58.8692C2.81282 58.8704 2.81282 58.8717 2.81253 58.8729V58.8802C2.76787 59.0462 2.7232 59.2121 2.67853 59.378L2.58208 59.7462L2.47827 60.1446C2.45765 60.2264 2.43704 60.3081 2.41716 60.3899L2.23457 61.1263C1.34717 64.7973 0.72125 68.5268 0.361506 72.2864C0.35488 72.3512 0.348989 72.416 0.343099 72.4816C0.328374 72.634 0.315121 72.7857 0.301132 72.9381L0.279045 73.1966C0.268001 73.3299 0.256956 73.4639 0.246649 73.5972C0.239286 73.69 0.231188 73.7821 0.224561 73.8748C0.214253 74.0103 0.204682 74.1466 0.19511 74.2821C0.188484 74.369 0.181857 74.4551 0.175967 74.5413C0.161978 74.7467 0.149462 74.9522 0.136945 75.1584L0.119275 75.4625C0.112649 75.5818 0.106022 75.7004 0.100132 75.8189C0.094242 75.925 0.0890882 76.031 0.0846706 76.1371C0.0787805 76.2542 0.0736265 76.3713 0.0684727 76.4876C0.0630734 76.5912 0.0586558 76.695 0.0552199 76.7991C0.050066 76.9258 0.0456483 77.0517 0.0412307 77.1776C0.0412307 77.2711 0.0346045 77.3647 0.0316594 77.4582C0.025033 77.6577 0.0198789 77.8566 0.0147251 78.0561C0.0147251 78.1099 0.0147251 78.1644 0.0147251 78.2182C0.0107983 78.4032 0.00736247 78.5881 0.00441741 78.7727C0.00441741 78.794 0.00441741 78.8154 0.00441741 78.8375V78.8419C0.00441741 78.9685 0.00441759 79.0871 0 79.2005C0 79.2557 0 79.311 0 79.3669C0 79.5474 0 79.713 0 79.8721V79.9023C0.0147253 80.4679 0.402737 81.7853 3.67396 81.803H3.80796C6.14708 81.803 11.7074 81.504 17.6431 80.9355C28.0075 79.9428 48.257 77.3271 71.7041 74.2902L74.5019 73.9279C81.1283 73.0707 90.4053 71.7923 100.639 70.3504C102.392 71.3593 104.342 72.2437 106.39 73.0221C95.9906 75.3786 85.4517 77.7874 75.3774 80.2145C67.3167 82.1564 59.5086 84.1454 52.16 86.0844C44.2819 86.9224 36.6145 88.2074 28.5811 90.0146C19.7511 92.0029 11.2266 94.6156 4.57883 97.3786L4.40287 97.4522C2.90162 98.0715 2.2942 99.0414 2.59607 100.335V100.345L2.59975 100.359L2.65939 100.58V100.589L2.7632 100.982V100.987C2.8383 101.263 2.91487 101.539 2.99292 101.815C3.01648 101.899 3.04078 101.984 3.06654 102.069C3.12986 102.29 3.19416 102.511 3.25945 102.731L3.3154 102.923C3.39639 103.194 3.47861 103.464 3.56205 103.733L3.63568 103.97C3.70121 104.179 3.76747 104.387 3.83447 104.595L3.85877 104.669C3.87644 104.725 3.89484 104.78 3.91251 104.835C3.94712 104.942 3.98614 105.048 4.01854 105.155C4.07007 105.311 4.12161 105.468 4.17389 105.624L4.2431 105.827C4.31476 106.036 4.38691 106.244 4.45956 106.453L4.55454 106.723C4.63994 106.963 4.72609 107.203 4.81297 107.442L4.87997 107.626C4.9639 107.854 5.04906 108.082 5.13545 108.31C5.17153 108.405 5.20908 108.5 5.24442 108.595C5.27976 108.69 5.31804 108.785 5.35412 108.88L5.46677 109.175L5.50358 109.269C5.52125 109.316 5.53966 109.362 5.55807 109.409C5.65599 109.657 5.75612 109.905 5.85625 110.152L5.95786 110.399L5.977 110.446C6.05063 110.618 6.11984 110.791 6.19199 110.962L6.22218 111.035L6.31568 111.256C6.41778 111.496 6.52061 111.734 6.62418 111.973L6.71474 112.179L6.7545 112.267C6.82812 112.428 6.89733 112.59 6.96949 112.751C7.01955 112.862 7.06888 112.972 7.11674 113.084C7.1992 113.266 7.2824 113.447 7.36633 113.627C7.43358 113.775 7.50107 113.919 7.56881 114.06C7.64243 114.217 7.71606 114.374 7.78969 114.53C7.84712 114.651 7.90504 114.771 7.96345 114.891C8.03045 115.03 8.09892 115.169 8.16739 115.308C8.24764 115.472 8.32937 115.635 8.41109 115.799C8.49282 115.962 8.57602 116.128 8.65995 116.292C8.72523 116.421 8.79125 116.55 8.85801 116.678C8.91912 116.796 8.97949 116.913 9.0406 117.029L9.05901 117.065C9.12183 117.185 9.18466 117.305 9.24749 117.424C9.35106 117.621 9.45512 117.815 9.55967 118.007L9.80116 118.449C9.85638 118.548 9.91087 118.647 9.96609 118.743C10.0451 118.887 10.1246 119.03 10.2046 119.172L10.3033 119.346L10.3475 119.42C10.4991 119.687 10.6516 119.953 10.8017 120.211L10.9365 120.441C11.0256 120.594 11.1161 120.747 11.2067 120.899L11.3289 121.103C11.5196 121.421 11.711 121.736 11.8995 122.04L11.9496 122.122C12.0512 122.286 12.1535 122.449 12.2566 122.612L12.3582 122.773C12.3707 122.793 12.384 122.812 12.3965 122.833C12.409 122.854 12.4274 122.88 12.4421 122.907C12.5644 123.098 12.6871 123.289 12.8103 123.48C12.8176 123.492 12.825 123.504 12.8331 123.516C12.9487 123.695 13.065 123.871 13.1821 124.048L13.1902 124.062C13.4074 124.392 13.6386 124.734 13.8948 125.11L13.9338 125.166L14.0553 125.345L14.1974 125.549L14.2924 125.686L14.3601 125.783L14.5192 126.011C14.5236 126.016 14.5273 126.022 14.5309 126.027L14.5434 126.044C14.5434 126.049 14.5501 126.053 14.553 126.058C14.6502 126.195 14.7467 126.332 14.8475 126.469L14.9565 126.621L15.0662 126.773L15.1479 126.885C15.3018 127.098 15.4579 127.313 15.6162 127.526L15.6633 127.59L15.7524 127.711C15.8628 127.858 15.9738 128.006 16.0852 128.153C16.1397 128.226 16.1949 128.3 16.2494 128.374C16.3628 128.521 16.4764 128.668 16.5903 128.816L16.711 128.972C16.9716 129.308 17.2323 129.64 17.4856 129.956L17.5261 130.007C17.6497 130.162 17.7749 130.316 17.9001 130.47L18.0473 130.646C18.172 130.798 18.2972 130.95 18.4228 131.102L18.5362 131.238C18.9559 131.741 19.3859 132.244 19.8136 132.731L19.9219 132.855C20.0598 133.011 20.1987 133.168 20.3386 133.325L20.4343 133.431C20.893 133.942 21.362 134.452 21.8281 134.945L21.8744 134.994C22.0276 135.156 22.1817 135.318 22.3368 135.479L22.4104 135.557C22.6674 135.823 22.9258 136.089 23.1909 136.353L23.2189 136.381C23.6142 136.78 24.014 137.175 24.4146 137.56L24.4661 137.609C24.5029 137.645 24.5397 137.683 24.5787 137.716C24.7105 137.843 24.8423 137.97 24.9749 138.095L25.0485 138.164L25.0647 138.18C25.1898 138.298 25.3165 138.416 25.4424 138.534C25.516 138.608 25.5896 138.673 25.6669 138.742C25.7538 138.823 25.8414 138.904 25.9283 138.983L26.1153 139.155C26.2663 139.292 26.4172 139.429 26.5667 139.563L26.5711 139.567L26.5954 139.589L26.6123 139.605C26.7596 139.738 26.9105 139.871 27.0651 140.006L27.2448 140.165L27.5334 140.416C27.6608 140.527 27.7881 140.637 27.9155 140.746C27.9891 140.811 28.0627 140.876 28.1415 140.94L28.1975 140.988L28.2395 141.024L28.2623 141.044C28.4095 141.171 28.5627 141.297 28.7136 141.423L28.8049 141.496L28.8182 141.507C28.8506 141.533 28.8844 141.558 28.919 141.58C29.026 141.653 29.1418 141.712 29.2636 141.756H29.2695H29.2754C29.597 141.858 29.9336 141.905 30.2708 141.894C30.9681 141.894 31.9296 141.764 33.302 141.505C37.6651 140.678 59.0588 136.896 84.0101 133.478C91.453 132.457 99.0409 131.71 105.969 131.165C104.453 133.095 103.671 135.048 103.637 137.007C103.574 140.606 107.793 143.407 111.39 145.226C106.627 146.781 101.598 148.145 96.5509 149.141C93.2377 149.795 89.9937 150.354 86.8322 150.83C86.7985 150.611 86.7466 150.395 86.6768 150.184C86.0657 148.334 83.5757 147.043 79.6646 146.547C75.8758 146.068 71.0363 146.357 66.0378 147.363C59.2959 148.719 55.0204 150.794 53.8703 151.397C52.1033 152.323 51.4068 153.023 51.4568 153.813C51.5113 154.671 52.4442 155.128 53.2622 155.433L53.282 155.44L53.6347 155.563L53.687 155.582L54.0301 155.7C54.5845 155.89 55.1418 156.074 55.6845 156.247L55.7264 156.261L56.1498 156.393H56.1564C56.459 156.487 56.7683 156.582 57.0812 156.675L57.1261 156.689L57.1607 156.699L57.2166 156.716L57.411 156.774C57.6047 156.831 57.7983 156.887 57.9919 156.942L58.1046 156.975C58.6072 157.118 59.1118 157.255 59.6183 157.387L59.692 157.406L59.8061 157.437L59.8245 157.441C60.0297 157.494 60.2351 157.546 60.4408 157.598L60.6219 157.644L60.7308 157.671L60.7853 157.684L61.3184 157.813L61.4112 157.836L61.6372 157.889C61.6784 157.899 61.7204 157.908 61.7623 157.917L62.2085 158.021L62.3506 158.053L62.5384 158.095C62.6194 158.113 62.7011 158.13 62.7828 158.148C62.8933 158.172 63.0037 158.197 63.1156 158.222L63.176 158.235L63.4955 158.303L63.8533 158.376L64.0588 158.418H64.0742L64.3128 158.467C64.5332 158.51 64.754 158.553 64.9754 158.595L65.3885 158.669L65.7338 158.732L65.9326 158.767L66.0113 158.781L66.1814 158.811L66.3706 158.844L66.9258 158.937L67.0635 158.959L67.3241 159.001L67.545 159.036C67.6731 159.057 67.8012 159.076 67.93 159.095L68.0037 159.106L68.0854 159.119L68.1826 159.133C68.428 159.168 68.671 159.203 68.9115 159.237L69.0845 159.261L69.351 159.297L69.3982 159.303L69.9275 159.371L70.0093 159.381L70.063 159.388L70.4083 159.429C71.0062 159.5 71.6045 159.565 72.2033 159.623C72.4036 159.642 72.6039 159.661 72.8048 159.679L73.1546 159.71L73.2334 159.716L73.2658 159.72C73.4962 159.739 73.7281 159.757 73.9601 159.774L74.0212 159.779C76.0002 159.926 78.0022 160 79.9849 160C85.8763 160.002 91.7501 159.357 97.5007 158.076C103.072 156.83 108.494 154.988 113.671 152.581C115.726 151.626 117.741 150.582 119.715 149.449C119.728 149.442 119.741 149.437 119.754 149.43C120.811 148.823 121.852 148.193 122.877 147.539L122.913 147.516C123.173 147.35 123.432 147.183 123.69 147.014L123.863 146.901C124.076 146.761 124.287 146.62 124.498 146.479L124.728 146.325C124.924 146.192 125.119 146.059 125.312 145.926C125.492 145.802 125.672 145.676 125.851 145.55C125.988 145.454 126.125 145.359 126.261 145.262C126.445 145.131 126.628 145 126.81 144.868L126.989 144.738C127.189 144.591 127.389 144.443 127.587 144.296L127.672 144.233C127.808 144.133 127.944 144.033 128.079 143.931C132.538 140.57 136.636 136.754 140.306 132.545C140.485 132.34 140.663 132.134 140.84 131.926L140.89 131.868C141.06 131.668 141.229 131.468 141.396 131.269L141.463 131.189C141.629 130.989 141.795 130.788 141.96 130.587L142.019 130.513C142.188 130.307 142.355 130.1 142.52 129.893L142.552 129.852C143.169 129.08 143.781 128.282 144.371 127.483L144.399 127.445C144.988 126.646 145.57 125.825 146.127 125.011L146.135 124.999L146.151 124.976C146.304 124.752 146.456 124.527 146.606 124.301L146.649 124.236C146.796 124.014 146.943 123.791 147.09 123.567L147.134 123.5C147.281 123.273 147.428 123.045 147.576 122.816L147.6 122.778C148.833 120.832 149.996 118.809 151.06 116.761L151.069 116.744L151.074 116.735C151.202 116.489 151.328 116.242 151.453 115.993L151.477 115.946C151.603 115.696 151.727 115.445 151.852 115.193L151.865 115.165C152.463 113.946 153.032 112.703 153.569 111.449C153.606 111.362 153.642 111.276 153.681 111.19C153.732 111.068 153.782 110.946 153.833 110.822C153.894 110.674 153.955 110.529 154.016 110.384C154.069 110.254 154.122 110.123 154.174 109.993C154.226 109.863 154.285 109.721 154.339 109.585C154.399 109.433 154.458 109.283 154.518 109.131C154.559 109.026 154.601 108.92 154.641 108.814V108.809C154.651 108.783 154.661 108.757 154.672 108.735C154.672 108.727 154.678 108.717 154.681 108.707C154.856 108.183 154.7 107.808 154.54 107.584C154.072 106.937 152.969 106.305 145.245 106.305C145.135 106.305 133.659 106.362 112.317 108.408C103.746 109.231 93.7177 110.402 83.6412 111.691C86.3654 109.556 88.6147 107.578 90.244 105.607C91.3757 104.237 92.1819 102.907 92.6906 101.567C103.109 99.1106 113.986 96.6392 124.245 94.4352C140.532 90.9365 152.55 88.097 156.394 86.8392C157.117 86.6028 158.544 86.0093 159.307 85.2839L159.312 85.2788C159.598 85.002 159.791 84.6437 159.865 84.253C159.879 84.2051 159.889 84.1557 159.892 84.1057V84.1013V84.091C159.892 84.0674 159.892 84.0438 159.892 84.0173C159.892 84.0102 159.892 84.0031 159.892 83.996C159.924 83.3457 159.949 82.6881 159.965 82.0393V81.9171C159.972 81.6395 159.976 81.3648 159.981 81.0916L159.994 80.9826ZM60.1249 13.8147C56.8625 14.6983 52.5333 15.1814 48.2467 15.1453C44.8938 15.1174 40.3429 14.6659 37.7329 14.2248C41.8316 13.4457 52.4582 11.5937 65.9245 10.5207C64.9725 12.2608 61.9854 13.3124 60.1249 13.8147ZM81.1718 18.3804C90.9045 14.9539 95.4553 11.9413 97.5662 9.98537C106.728 10.4714 113.852 11.5974 118.838 13.3537C120.6 13.9745 121.688 14.6726 121.9 15.3191C121.938 15.4598 121.964 15.6034 121.979 15.7484V15.775C121.979 15.7897 121.979 15.8037 121.982 15.8199C122.084 17.3037 121.384 19.658 117.472 22.4475C117.384 22.5108 117.294 22.5742 117.203 22.6375L117.113 22.6993L116.923 22.829L116.813 22.9026L116.635 23.0219L116.514 23.1007L116.335 23.2178L116.209 23.2988L116.024 23.4159L115.896 23.4969L115.699 23.6191L115.575 23.6928L115.35 23.8297L115.245 23.8931C115.134 23.9603 115.021 24.0276 114.906 24.0948L114.876 24.1125C114.771 24.1739 114.665 24.2355 114.557 24.2973L114.424 24.371L114.198 24.4998L114.051 24.5801C113.978 24.6221 113.904 24.6648 113.824 24.7068L113.671 24.7922L113.445 24.9159L113.285 25.0028C113.211 25.0448 113.13 25.086 113.052 25.128L112.892 25.2134L112.643 25.3452L112.49 25.4255L112.204 25.5728L112.079 25.6369C111.94 25.7085 111.8 25.78 111.659 25.8511C105.26 29.0876 95.9648 32.6202 84.0314 36.3515C82.6468 36.7855 81.2591 37.2163 79.8686 37.6439C80.4219 36.9092 80.9076 36.1259 81.3198 35.3036C82.4978 32.925 82.7187 30.5759 81.9868 28.3225C81.308 26.2304 80.099 24.709 78.2915 23.6714C76.5922 22.6957 74.3436 22.15 71.4163 22.0034C71.1134 21.9887 70.8039 21.9779 70.4878 21.971C74.5019 20.6787 78.156 19.4408 81.1718 18.3789V18.3804ZM74.3245 72.6856L71.5267 73.0479C48.0906 76.0796 27.8507 78.6983 17.5069 79.6887C11.4953 80.2639 5.88644 80.5629 3.66513 80.5503C1.88558 80.5408 1.27079 80.1085 1.23545 79.8876C1.25828 79.7616 1.54837 79.0282 5.06403 77.1018C7.8022 75.6017 12.1425 73.5619 18.3337 70.8659C32.1475 64.8495 46.7028 58.0945 56.4811 53.4868C56.9818 53.2512 57.4729 53.0163 57.9581 52.7821C61.018 52.3805 64.1945 51.9664 67.4875 51.5398C78.6994 50.0898 89.7228 48.466 100.428 46.8695C98.0448 48.3541 96.1886 49.9963 94.8972 51.7651C92.9321 54.4581 92.2135 57.5091 92.7621 60.8383C93.3378 64.3245 95.6814 67.0977 98.9702 69.3217C89.3288 70.673 80.6284 71.8689 74.3252 72.6841L74.3245 72.6856ZM113.149 151.492C108.053 153.861 102.717 155.674 97.2327 156.9C91.5718 158.161 85.7896 158.796 79.9901 158.794C78.7929 158.794 77.5884 158.765 76.3824 158.711C76.847 158.531 77.3535 158.343 77.8549 158.16C79.8494 157.428 82.3314 156.517 84.1514 155.324C85.6409 154.348 86.5207 153.283 86.7865 152.141C90.0394 151.654 93.3835 151.081 96.7939 150.407C101.984 149.382 107.518 147.885 113.006 146.04C113.704 146.36 114.34 146.635 114.865 146.863C115.234 147.022 115.552 147.157 115.777 147.264C117.276 147.961 118.059 148.447 118.463 148.767C116.726 149.742 114.955 150.65 113.149 151.491L113.149 151.492ZM112.439 109.702C130.298 107.989 142.412 107.604 145.247 107.604C148.215 107.604 150.342 107.693 151.749 107.878C153.048 108.049 153.414 108.268 153.502 108.341V108.349L153.483 108.4C153.034 109.422 151.81 109.953 149.51 110.877C148.915 111.115 147.449 111.603 145.42 112.276C140.835 113.8 133.16 116.351 125.026 119.527C118.514 122.07 113.4 124.755 109.825 127.498C108.878 128.218 107.984 129.005 107.151 129.855C99.8619 130.408 91.7681 131.186 83.8422 132.273C58.8651 135.697 37.4413 139.484 33.0716 140.311C32.7321 140.375 32.4259 140.429 32.1475 140.475C36.6299 138.77 42.3721 136.425 52.0871 131.614C62.4051 126.503 66.5562 124.31 78.0036 115.955C79.2867 115.019 80.5062 114.118 81.6621 113.252C92.4418 111.858 103.274 110.579 112.44 109.7L112.439 109.702ZM156.007 85.6948C150.369 87.5358 130.072 91.9491 123.986 93.257C113.951 95.4131 103.324 97.8226 93.1125 100.228C93.4924 98.5561 93.4343 96.8403 92.9358 94.9934C92.522 93.4609 91.6606 92.033 90.3766 90.7502C89.1249 89.4984 87.4911 88.4107 85.5297 87.5219C81.467 85.6808 76.2204 84.7824 70.3575 84.9268C66.6762 85.0173 63.1178 85.1816 59.6338 85.4246C64.8149 84.091 70.1779 82.7492 75.6571 81.4289C86.3448 78.8515 97.5596 76.2983 108.576 73.8056C114.653 75.8477 121.266 77.073 126.07 77.9633C126.935 78.1239 127.752 78.2748 128.484 78.4162C131.572 79.012 135.779 79.6895 140.233 80.4045C147.041 81.5018 154.081 82.6358 157.998 83.6152C158.555 83.7544 158.635 83.926 158.644 84.0306C158.623 84.1794 158.553 84.3171 158.445 84.4216C157.95 84.8944 156.82 85.429 156.007 85.6948H156.007Z" }) }),\n /* @__PURE__ */ c(\n "path",\n {\n d: "M159.994 80.9826C159.998 80.6571 160 80.338 160 80.0253C160 79.8122 160 79.5994 160 79.3868C160 79.3132 160 79.2395 160 79.1711C160 79.0319 160 78.8927 159.995 78.7542C159.995 78.6629 159.995 78.5724 159.99 78.4818C159.99 78.3632 159.985 78.2447 159.982 78.1254C159.982 78.0245 159.977 77.9229 159.975 77.8212C159.973 77.7196 159.968 77.6099 159.965 77.5038L159.954 77.1702C159.954 77.0797 159.948 76.9891 159.944 76.8985C159.94 76.7741 159.934 76.6496 159.929 76.5252C159.929 76.4663 159.924 76.4073 159.921 76.3477C159.888 75.6201 159.846 74.8935 159.793 74.1679V74.1385C159.779 73.9514 159.765 73.7637 159.75 73.5766V73.5494C159.415 69.3605 158.75 65.2047 157.762 61.1204L157.726 60.9665L157.684 60.8008C157.637 60.6071 157.588 60.4149 157.536 60.222L157.514 60.1314C157.509 60.1137 157.505 60.096 157.5 60.0784C157.456 59.9031 157.41 59.7283 157.363 59.554C157.363 59.5467 157.36 59.5393 157.358 59.5312C157.319 59.3839 157.28 59.2381 157.24 59.0938L157.203 58.9524C157.196 58.9296 157.19 58.9067 157.184 58.8839C157.163 58.8103 157.143 58.7307 157.121 58.6542C157.089 58.5378 157.056 58.421 157.023 58.3036C157.015 58.2771 157.009 58.2506 157.001 58.2241L156.952 58.0518C156.952 58.0498 156.952 58.0478 156.952 58.0459C156.878 57.797 156.809 57.5496 156.735 57.3014C156.734 57.2947 156.732 57.288 156.73 57.2815L156.656 57.0437L156.637 56.984V56.9752C156.585 56.8024 156.533 56.6288 156.479 56.4545C156.475 56.4413 156.471 56.4273 156.467 56.414L156.445 56.3404C156.437 56.3154 156.429 56.2903 156.422 56.2668C156.406 56.2167 156.391 56.1666 156.375 56.1195C156.332 55.983 156.289 55.847 156.245 55.7115C156.209 55.5981 156.173 55.4847 156.136 55.3713L156.075 55.182C156.061 55.1386 156.046 55.0951 156.032 55.0517C155.992 54.9294 155.951 54.8067 155.91 54.6835L155.903 54.6599C155.883 54.5995 155.863 54.5392 155.842 54.4788L155.803 54.3617L155.734 54.1599V54.1496C155.734 54.1452 155.73 54.14 155.729 54.1349C155.669 53.9586 155.608 53.7829 155.547 53.6076L155.531 53.5627C155.503 53.4824 155.475 53.4014 155.446 53.3211L155.398 53.1849C155.357 53.071 155.316 52.9569 155.275 52.8425C155.247 52.7688 155.22 52.69 155.192 52.6142C155.173 52.5604 155.153 52.5074 155.133 52.4537L155.124 52.4301C155.118 52.4102 155.11 52.3903 155.103 52.3712L155.098 52.3565C155.077 52.3005 155.057 52.2453 155.035 52.1893L154.99 52.0678C154.977 52.0317 154.963 51.9941 154.95 51.9603L154.891 51.8012C154.881 51.7747 154.871 51.7482 154.861 51.7224L154.75 51.4279L154.739 51.3977C154.728 51.3704 154.717 51.3424 154.706 51.3152C154.675 51.2342 154.644 51.1539 154.613 51.0736C154.589 51.0118 154.566 50.9499 154.539 50.8881L154.513 50.8203L154.414 50.5685C154.382 50.4875 154.349 50.4065 154.316 50.3255L154.242 50.1495L154.207 50.0604C154.197 50.0368 154.188 50.0125 154.178 49.9867L154.136 49.8821L154.032 49.6296L153.977 49.4955C153.946 49.4219 153.915 49.3483 153.885 49.2746C153.848 49.1862 153.811 49.0971 153.775 49.0095L153.698 48.8276C153.689 48.8077 153.68 48.7871 153.672 48.7665C153.664 48.7459 153.646 48.7054 153.633 48.6752C153.58 48.55 153.526 48.4253 153.472 48.3011C153.454 48.2584 153.435 48.2164 153.417 48.1744L153.401 48.1361L153.284 47.8666L153.2 47.6781L153.119 47.4969L153.113 47.4829L152.989 47.2053C152.962 47.1442 152.934 47.0838 152.907 47.0234C152.899 47.0065 152.891 46.9896 152.884 46.9726C152.877 46.9557 152.863 46.927 152.852 46.9041L152.837 46.8688L152.702 46.5742L152.656 46.4755L152.641 46.4417C152.634 46.4269 152.628 46.4122 152.62 46.3975L152.598 46.3489L152.437 46.005C152.417 45.9623 152.397 45.9196 152.377 45.8776L152.313 45.7414C152.288 45.6913 152.265 45.6405 152.239 45.5897L152.189 45.4858C152.146 45.396 152.104 45.3061 152.06 45.2163C151.994 45.0813 151.928 44.9465 151.862 44.812C151.832 44.7494 151.801 44.6868 151.77 44.6242C151.763 44.608 151.755 44.5918 151.746 44.5756C151.696 44.4733 151.645 44.3716 151.594 44.27L151.567 44.2163C151.559 44.2008 151.551 44.1853 151.544 44.1706L151.414 43.9121C151.414 43.9055 151.407 43.8989 151.403 43.8923L151.33 43.745L151.241 43.5712C151.214 43.5196 151.188 43.4674 151.161 43.4165L151.15 43.3944L151.086 43.2715C151.078 43.256 151.07 43.2413 151.062 43.2258L150.847 42.812C150.814 42.7501 150.782 42.6882 150.749 42.6264L150.665 42.4703C150.607 42.3623 150.55 42.2542 150.492 42.1462L150.409 41.9916C150.383 41.943 150.356 41.8951 150.331 41.8443C150.176 41.5606 150.02 41.2778 149.862 40.996L149.772 40.8347L149.734 40.767C149.67 40.6536 149.605 40.5401 149.541 40.4267L149.497 40.3531L149.346 40.0887C149.34 40.0792 149.334 40.0689 149.329 40.0585L149.165 39.7787L149.099 39.6646L148.961 39.4289L148.955 39.4193L148.734 39.043C148.713 39.0087 148.689 38.9766 148.661 38.9473C147.899 37.8427 145.495 37.3906 143.589 37.2072C141.528 37.0076 137.988 36.9281 132.871 37.6807C126.694 38.5887 118.695 39.9098 111.603 42.0792C108.595 43.0005 105.923 44.0226 103.629 45.1287C91.8719 46.8835 79.7184 48.6973 67.3366 50.2989C65.3183 50.5601 63.3448 50.8166 61.4163 51.0685C67.679 47.8556 72.4456 44.8157 75.8986 41.8377C76.7807 41.0786 77.619 40.2699 78.4093 39.4157C80.4164 38.8005 82.4173 38.1815 84.4121 37.5585C96.4132 33.8028 105.77 30.2475 112.23 26.98C112.378 26.9064 112.517 26.8328 112.658 26.7591L112.785 26.6936L113.079 26.5426L113.235 26.4601L113.489 26.3269L113.653 26.2385C113.732 26.1965 113.812 26.1538 113.89 26.1111L114.053 26.0227L114.285 25.8961L114.441 25.8092L114.674 25.6788L114.821 25.5971L115.052 25.4653L115.19 25.3865C115.301 25.3231 115.41 25.2596 115.518 25.1957L115.548 25.1781C115.667 25.1089 115.782 25.0396 115.897 24.9704L116.004 24.9063L116.237 24.7642L116.365 24.6854L116.568 24.5595L116.7 24.4755L116.891 24.354L117.022 24.2701L117.208 24.1493L117.333 24.0668L117.518 23.9431L117.633 23.8695C117.7 23.8246 117.765 23.7796 117.83 23.734L117.924 23.6699C118.022 23.6036 118.116 23.5376 118.206 23.4718C120.625 21.7457 123.462 19.0026 123.238 15.7396C123.238 15.7153 123.235 15.6917 123.233 15.666V15.6373C123.095 14.1939 122.039 11.9994 117.913 9.56415L117.889 9.55015L117.751 9.46915L117.663 9.41908L117.569 9.36532L117.426 9.28431L117.374 9.25486L117.171 9.14219L117.145 9.1282L117.135 9.12304L117.122 9.11568C116.68 8.88543 116.239 8.65886 115.797 8.43598L115.767 8.42125C115.489 8.28207 115.21 8.14363 114.93 8.00813L114.888 7.98751L114.702 7.89767L114.408 7.75702H114.401L114.216 7.66938L114.159 7.64287L114.073 7.60163L113.86 7.50148L113.793 7.46982L113.581 7.37188L113.49 7.3299L113.471 7.32107L113.316 7.24743L113.243 7.21429L112.948 7.081L112.894 7.05596L112.785 7.00736L112.696 6.96686L112.384 6.82768L112.31 6.79454L112.281 6.78202L112.155 6.72605L111.823 6.57877L111.646 6.50513L111.476 6.43149L111.108 6.27317L110.822 6.15313L110.527 6.03015L110.344 5.95651L110.227 5.90791C110.092 5.85268 109.956 5.79819 109.821 5.74369L109.673 5.68552L109.265 5.52351L109.133 5.47196L108.702 5.3048L108.629 5.27608C108.39 5.18476 108.149 5.09419 107.908 5.00435H107.9C107.464 4.84234 107.026 4.68254 106.593 4.5301L106.566 4.52053L106.074 4.34895L106.013 4.32833C105.848 4.27187 105.684 4.21615 105.521 4.16117L105.487 4.14938L105.234 4.06543L105.013 3.99179L104.651 3.87397L104.38 3.78707L104.051 3.6825L103.734 3.58309L103.439 3.49178L102.906 3.3305L102.832 3.30841L102.808 3.30105L102.292 3.14935H102.281H102.274L102.253 3.14346L102.126 3.10737C101.227 2.84914 100.324 2.60638 99.4164 2.37907C84.4694 -1.33826 68.7698 -0.688327 54.181 4.25174L54.1582 4.25984C53.9911 4.31728 53.8232 4.37472 53.6561 4.43364L53.5265 4.47856C53.3571 4.53747 53.1885 4.59785 53.0199 4.65824L52.9073 4.698L52.3779 4.89094L52.3109 4.91524C47.8766 6.55097 43.5967 8.57844 39.522 10.9736L39.4808 10.9979C39.3475 11.076 39.2142 11.1555 39.0817 11.235L38.8741 11.3588C38.7607 11.4265 38.6478 11.4947 38.5354 11.5635C38.4456 11.618 38.3557 11.6725 38.2667 11.7277C38.166 11.7891 38.0654 11.8509 37.9648 11.9133C37.8642 11.9756 37.7616 12.0394 37.657 12.1047L37.3853 12.2748C37.2705 12.347 37.1559 12.4206 37.0415 12.4958L36.8052 12.6453C36.6702 12.7312 36.5362 12.8178 36.4032 12.9052L36.222 13.023C36.0257 13.1512 35.8311 13.2798 35.6382 13.4089C35.3128 13.6261 35.1523 13.9745 35.2192 14.3191C35.3422 14.9546 36.0984 15.1799 36.6572 15.2941C39.1244 15.7985 44.3681 16.3611 48.243 16.3935C48.3947 16.3935 48.5457 16.3935 48.6973 16.3935C52.9434 16.3935 57.2063 15.8965 60.4577 15.0179C62.4147 14.4885 63.9918 13.8301 65.1411 13.0598C66.2904 12.2896 67.0281 11.3963 67.3285 10.4088C72.0841 10.0546 77.1687 9.802 82.4278 9.73057C87.2381 9.6643 91.6761 9.71805 95.7417 9.89185C92.6877 12.2837 87.4499 14.8412 80.7602 17.1984C76.7387 18.6138 71.5819 20.3436 65.9613 22.1205C61.1336 22.4718 55.1043 23.4262 47.6165 24.7664C40.3451 26.0669 32.7432 27.7805 26.7544 29.4669C19.3697 31.5465 15.0279 33.4007 13.8506 34.9781L13.8352 35.0002L13.4442 35.5798C13.3124 35.7771 13.1806 35.9752 13.051 36.1733C13.0478 36.1773 13.0449 36.1815 13.0422 36.1858C12.8176 36.5275 12.585 36.8891 12.3302 37.2904L12.2654 37.3942L12.1771 37.5349C12.0819 37.6866 11.9874 37.8385 11.8936 37.9907L11.8863 38.0025L11.8811 38.0113L11.7236 38.2661L11.5255 38.5924C11.5174 38.6049 11.51 38.6174 11.5027 38.6299L11.446 38.722L11.2663 39.0224C11.2317 39.0799 11.1979 39.138 11.1633 39.1962L11.1242 39.261L11.0027 39.4657L10.9821 39.5011L10.9785 39.5085C10.8032 39.8067 10.6243 40.116 10.4373 40.4444C10.4226 40.4702 10.4078 40.496 10.3939 40.5181C10.3799 40.5401 10.3556 40.5843 10.3364 40.6189L10.2878 40.7029L10.2039 40.8502L10.0787 41.0726L10.0301 41.1602L9.93148 41.3377L9.89982 41.3951L9.78423 41.6101C9.76435 41.647 9.74447 41.6838 9.72386 41.7206L9.6944 41.7751C9.63649 41.8811 9.57881 41.9872 9.52138 42.0932L9.37413 42.365C9.28725 42.5292 9.19963 42.6927 9.11202 42.8591L9.10171 42.8797C8.89997 43.2634 8.69824 43.6559 8.48472 44.08L8.38533 44.2759C8.29918 44.4482 8.21451 44.6206 8.12616 44.7995L8.00541 45.0462C7.92197 45.2175 7.83902 45.3894 7.75656 45.5617C7.72784 45.6221 7.69986 45.6824 7.67115 45.7421L7.64538 45.7973C7.50181 46.0992 7.35823 46.4078 7.21761 46.7141V46.7178C7.07772 47.0227 6.93783 47.3327 6.80162 47.6405L6.75892 47.737V47.7422L6.7383 47.7893C6.65657 47.9741 6.57632 48.1575 6.49607 48.346L6.39741 48.578C6.31863 48.7621 6.24132 48.9462 6.16401 49.131L6.07566 49.3424C5.9424 49.6627 5.80913 49.9904 5.68102 50.3115L5.67366 50.3284C5.54334 50.6554 5.41376 50.9853 5.28859 51.3108L5.25546 51.3962C5.18184 51.5943 5.10821 51.7938 5.03016 51.9927L4.95654 52.1996C4.88438 52.396 4.81297 52.5923 4.74228 52.7887L4.66866 52.9824C4.54865 53.3167 4.4279 53.6599 4.31157 53.9986L4.30126 54.0281C4.18199 54.3771 4.06492 54.724 3.95448 55.059L3.9508 55.0694V55.0789L3.94712 55.0914C3.87865 55.2999 3.81165 55.5097 3.74465 55.7189L3.68354 55.9118C3.61923 56.1151 3.55592 56.3185 3.49358 56.5223L3.43689 56.7086C3.3316 57.0554 3.22631 57.4104 3.12324 57.7653L3.11367 57.7985C3.00912 58.16 2.90825 58.5201 2.81253 58.8692C2.81282 58.8704 2.81282 58.8717 2.81253 58.8729V58.8802C2.76787 59.0462 2.7232 59.2121 2.67853 59.378L2.58208 59.7462L2.47827 60.1446C2.45765 60.2264 2.43704 60.3081 2.41716 60.3899L2.23457 61.1263C1.34717 64.7973 0.72125 68.5268 0.361506 72.2864C0.35488 72.3512 0.348989 72.416 0.343099 72.4816C0.328374 72.634 0.315121 72.7857 0.301132 72.9381L0.279045 73.1966C0.268001 73.3299 0.256956 73.4639 0.246649 73.5972C0.239286 73.69 0.231188 73.7821 0.224561 73.8748C0.214253 74.0103 0.204682 74.1466 0.19511 74.2821C0.188484 74.369 0.181857 74.4551 0.175967 74.5413C0.161978 74.7467 0.149462 74.9522 0.136945 75.1584L0.119275 75.4625C0.112649 75.5818 0.106022 75.7004 0.100132 75.8189C0.094242 75.925 0.0890882 76.031 0.0846706 76.1371C0.0787805 76.2542 0.0736265 76.3713 0.0684727 76.4876C0.0630734 76.5912 0.0586558 76.695 0.0552199 76.7991C0.050066 76.9258 0.0456483 77.0517 0.0412307 77.1776C0.0412307 77.2711 0.0346045 77.3647 0.0316594 77.4582C0.025033 77.6577 0.0198789 77.8566 0.0147251 78.0561C0.0147251 78.1099 0.0147251 78.1644 0.0147251 78.2182C0.0107983 78.4032 0.00736247 78.5881 0.00441741 78.7727C0.00441741 78.794 0.00441741 78.8154 0.00441741 78.8375V78.8419C0.00441741 78.9685 0.00441759 79.0871 0 79.2005C0 79.2557 0 79.311 0 79.3669C0 79.5474 0 79.713 0 79.8721V79.9023C0.0147253 80.4679 0.402737 81.7853 3.67396 81.803H3.80796C6.14708 81.803 11.7074 81.504 17.6431 80.9355C28.0075 79.9428 48.257 77.3271 71.7041 74.2902L74.5019 73.9279C81.1283 73.0707 90.4053 71.7923 100.639 70.3504C102.392 71.3593 104.342 72.2437 106.39 73.0221C95.9906 75.3786 85.4517 77.7874 75.3774 80.2145C67.3167 82.1564 59.5086 84.1454 52.16 86.0844C44.2819 86.9224 36.6145 88.2074 28.5811 90.0146C19.7511 92.0029 11.2266 94.6156 4.57883 97.3786L4.40287 97.4522C2.90162 98.0715 2.2942 99.0414 2.59607 100.335V100.345L2.59975 100.359L2.65939 100.58V100.589L2.7632 100.982V100.987C2.8383 101.263 2.91487 101.539 2.99292 101.815C3.01648 101.899 3.04078 101.984 3.06654 102.069C3.12986 102.29 3.19416 102.511 3.25945 102.731L3.3154 102.923C3.39639 103.194 3.47861 103.464 3.56205 103.733L3.63568 103.97C3.70121 104.179 3.76747 104.387 3.83447 104.595L3.85877 104.669C3.87644 104.725 3.89484 104.78 3.91251 104.835C3.94712 104.942 3.98614 105.048 4.01854 105.155C4.07007 105.311 4.12161 105.468 4.17389 105.624L4.2431 105.827C4.31476 106.036 4.38691 106.244 4.45956 106.453L4.55454 106.723C4.63994 106.963 4.72609 107.203 4.81297 107.442L4.87997 107.626C4.9639 107.854 5.04906 108.082 5.13545 108.31C5.17153 108.405 5.20908 108.5 5.24442 108.595C5.27976 108.69 5.31804 108.785 5.35412 108.88L5.46677 109.175L5.50358 109.269C5.52125 109.316 5.53966 109.362 5.55807 109.409C5.65599 109.657 5.75612 109.905 5.85625 110.152L5.95786 110.399L5.977 110.446C6.05063 110.618 6.11984 110.791 6.19199 110.962L6.22218 111.035L6.31568 111.256C6.41778 111.496 6.52061 111.734 6.62418 111.973L6.71474 112.179L6.7545 112.267C6.82812 112.428 6.89733 112.59 6.96949 112.751C7.01955 112.862 7.06888 112.972 7.11674 113.084C7.1992 113.266 7.2824 113.447 7.36633 113.627C7.43358 113.775 7.50107 113.919 7.56881 114.06C7.64243 114.217 7.71606 114.374 7.78969 114.53C7.84712 114.651 7.90504 114.771 7.96345 114.891C8.03045 115.03 8.09892 115.169 8.16739 115.308C8.24764 115.472 8.32937 115.635 8.41109 115.799C8.49282 115.962 8.57602 116.128 8.65995 116.292C8.72523 116.421 8.79125 116.55 8.85801 116.678C8.91912 116.796 8.97949 116.913 9.0406 117.029L9.05901 117.065C9.12183 117.185 9.18466 117.305 9.24749 117.424C9.35106 117.621 9.45512 117.815 9.55967 118.007L9.80116 118.449C9.85638 118.548 9.91087 118.647 9.96609 118.743C10.0451 118.887 10.1246 119.03 10.2046 119.172L10.3033 119.346L10.3475 119.42C10.4991 119.687 10.6516 119.953 10.8017 120.211L10.9365 120.441C11.0256 120.594 11.1161 120.747 11.2067 120.899L11.3289 121.103C11.5196 121.421 11.711 121.736 11.8995 122.04L11.9496 122.122C12.0512 122.286 12.1535 122.449 12.2566 122.612L12.3582 122.773C12.3707 122.793 12.384 122.812 12.3965 122.833C12.409 122.854 12.4274 122.88 12.4421 122.907C12.5644 123.098 12.6871 123.289 12.8103 123.48C12.8176 123.492 12.825 123.504 12.8331 123.516C12.9487 123.695 13.065 123.871 13.1821 124.048L13.1902 124.062C13.4074 124.392 13.6386 124.734 13.8948 125.11L13.9338 125.166L14.0553 125.345L14.1974 125.549L14.2924 125.686L14.3601 125.783L14.5192 126.011C14.5236 126.016 14.5273 126.022 14.5309 126.027L14.5434 126.044C14.5434 126.049 14.5501 126.053 14.553 126.058C14.6502 126.195 14.7467 126.332 14.8475 126.469L14.9565 126.621L15.0662 126.773L15.1479 126.885C15.3018 127.098 15.4579 127.313 15.6162 127.526L15.6633 127.59L15.7524 127.711C15.8628 127.858 15.9738 128.006 16.0852 128.153C16.1397 128.226 16.1949 128.3 16.2494 128.374C16.3628 128.521 16.4764 128.668 16.5903 128.816L16.711 128.972C16.9716 129.308 17.2323 129.64 17.4856 129.956L17.5261 130.007C17.6497 130.162 17.7749 130.316 17.9001 130.47L18.0473 130.646C18.172 130.798 18.2972 130.95 18.4228 131.102L18.5362 131.238C18.9559 131.741 19.3859 132.244 19.8136 132.731L19.9219 132.855C20.0598 133.011 20.1987 133.168 20.3386 133.325L20.4343 133.431C20.893 133.942 21.362 134.452 21.8281 134.945L21.8744 134.994C22.0276 135.156 22.1817 135.318 22.3368 135.479L22.4104 135.557C22.6674 135.823 22.9258 136.089 23.1909 136.353L23.2189 136.381C23.6142 136.78 24.014 137.175 24.4146 137.56L24.4661 137.609C24.5029 137.645 24.5397 137.683 24.5787 137.716C24.7105 137.843 24.8423 137.97 24.9749 138.095L25.0485 138.164L25.0647 138.18C25.1898 138.298 25.3165 138.416 25.4424 138.534C25.516 138.608 25.5896 138.673 25.6669 138.742C25.7538 138.823 25.8414 138.904 25.9283 138.983L26.1153 139.155C26.2663 139.292 26.4172 139.429 26.5667 139.563L26.5711 139.567L26.5954 139.589L26.6123 139.605C26.7596 139.738 26.9105 139.871 27.0651 140.006L27.2448 140.165L27.5334 140.416C27.6608 140.527 27.7881 140.637 27.9155 140.746C27.9891 140.811 28.0627 140.876 28.1415 140.94L28.1975 140.988L28.2395 141.024L28.2623 141.044C28.4095 141.171 28.5627 141.297 28.7136 141.423L28.8049 141.496L28.8182 141.507C28.8506 141.533 28.8844 141.558 28.919 141.58C29.026 141.653 29.1418 141.712 29.2636 141.756H29.2695H29.2754C29.597 141.858 29.9336 141.905 30.2708 141.894C30.9681 141.894 31.9296 141.764 33.302 141.505C37.6651 140.678 59.0588 136.896 84.0101 133.478C91.453 132.457 99.0409 131.71 105.969 131.165C104.453 133.095 103.671 135.048 103.637 137.007C103.574 140.606 107.793 143.407 111.39 145.226C106.627 146.781 101.598 148.145 96.5509 149.141C93.2377 149.795 89.9937 150.354 86.8322 150.83C86.7985 150.611 86.7466 150.395 86.6768 150.184C86.0657 148.334 83.5757 147.043 79.6646 146.547C75.8758 146.068 71.0363 146.357 66.0378 147.363C59.2959 148.719 55.0204 150.794 53.8703 151.397C52.1033 152.323 51.4068 153.023 51.4568 153.813C51.5113 154.671 52.4442 155.128 53.2622 155.433L53.282 155.44L53.6347 155.563L53.687 155.582L54.0301 155.7C54.5845 155.89 55.1418 156.074 55.6845 156.247L55.7264 156.261L56.1498 156.393H56.1564C56.459 156.487 56.7683 156.582 57.0812 156.675L57.1261 156.689L57.1607 156.699L57.2166 156.716L57.411 156.774C57.6047 156.831 57.7983 156.887 57.9919 156.942L58.1046 156.975C58.6072 157.118 59.1118 157.255 59.6183 157.387L59.692 157.406L59.8061 157.437L59.8245 157.441C60.0297 157.494 60.2351 157.546 60.4408 157.598L60.6219 157.644L60.7308 157.671L60.7853 157.684L61.3184 157.813L61.4112 157.836L61.6372 157.889C61.6784 157.899 61.7204 157.908 61.7623 157.917L62.2085 158.021L62.3506 158.053L62.5384 158.095C62.6194 158.113 62.7011 158.13 62.7828 158.148C62.8933 158.172 63.0037 158.197 63.1156 158.222L63.176 158.235L63.4955 158.303L63.8533 158.376L64.0588 158.418H64.0742L64.3128 158.467C64.5332 158.51 64.754 158.553 64.9754 158.595L65.3885 158.669L65.7338 158.732L65.9326 158.767L66.0113 158.781L66.1814 158.811L66.3706 158.844L66.9258 158.937L67.0635 158.959L67.3241 159.001L67.545 159.036C67.6731 159.057 67.8012 159.076 67.93 159.095L68.0037 159.106L68.0854 159.119L68.1826 159.133C68.428 159.168 68.671 159.203 68.9115 159.237L69.0845 159.261L69.351 159.297L69.3982 159.303L69.9275 159.371L70.0093 159.381L70.063 159.388L70.4083 159.429C71.0062 159.5 71.6045 159.565 72.2033 159.623C72.4036 159.642 72.6039 159.661 72.8048 159.679L73.1546 159.71L73.2334 159.716L73.2658 159.72C73.4962 159.739 73.7281 159.757 73.9601 159.774L74.0212 159.779C76.0002 159.926 78.0022 160 79.9849 160C85.8763 160.002 91.7501 159.357 97.5007 158.076C103.072 156.83 108.494 154.988 113.671 152.581C115.726 151.626 117.741 150.582 119.715 149.449C119.728 149.442 119.741 149.437 119.754 149.43C120.811 148.823 121.852 148.193 122.877 147.539L122.913 147.516C123.173 147.35 123.432 147.183 123.69 147.014L123.863 146.901C124.076 146.761 124.287 146.62 124.498 146.479L124.728 146.325C124.924 146.192 125.119 146.059 125.312 145.926C125.492 145.802 125.672 145.676 125.851 145.55C125.988 145.454 126.125 145.359 126.261 145.262C126.445 145.131 126.628 145 126.81 144.868L126.989 144.738C127.189 144.591 127.389 144.443 127.587 144.296L127.672 144.233C127.808 144.133 127.944 144.033 128.079 143.931C132.538 140.57 136.636 136.754 140.306 132.545C140.485 132.34 140.663 132.134 140.84 131.926L140.89 131.868C141.06 131.668 141.229 131.468 141.396 131.269L141.463 131.189C141.629 130.989 141.795 130.788 141.96 130.587L142.019 130.513C142.188 130.307 142.355 130.1 142.52 129.893L142.552 129.852C143.169 129.08 143.781 128.282 144.371 127.483L144.399 127.445C144.988 126.646 145.57 125.825 146.127 125.011L146.135 124.999L146.151 124.976C146.304 124.752 146.456 124.527 146.606 124.301L146.649 124.236C146.796 124.014 146.943 123.791 147.09 123.567L147.134 123.5C147.281 123.273 147.428 123.045 147.576 122.816L147.6 122.778C148.833 120.832 149.996 118.809 151.06 116.761L151.069 116.744L151.074 116.735C151.202 116.489 151.328 116.242 151.453 115.993L151.477 115.946C151.603 115.696 151.727 115.445 151.852 115.193L151.865 115.165C152.463 113.946 153.032 112.703 153.569 111.449C153.606 111.362 153.642 111.276 153.681 111.19C153.732 111.068 153.782 110.946 153.833 110.822C153.894 110.674 153.955 110.529 154.016 110.384C154.069 110.254 154.122 110.123 154.174 109.993C154.226 109.863 154.285 109.721 154.339 109.585C154.399 109.433 154.458 109.283 154.518 109.131C154.559 109.026 154.601 108.92 154.641 108.814V108.809C154.651 108.783 154.661 108.757 154.672 108.735C154.672 108.727 154.678 108.717 154.681 108.707C154.856 108.183 154.7 107.808 154.54 107.584C154.072 106.937 152.969 106.305 145.245 106.305C145.135 106.305 133.659 106.362 112.317 108.408C103.746 109.231 93.7177 110.402 83.6412 111.691C86.3654 109.556 88.6147 107.578 90.244 105.607C91.3757 104.237 92.1819 102.907 92.6906 101.567C103.109 99.1106 113.986 96.6392 124.245 94.4352C140.532 90.9365 152.55 88.097 156.394 86.8392C157.117 86.6028 158.544 86.0093 159.307 85.2839L159.312 85.2788C159.598 85.002 159.791 84.6437 159.865 84.253C159.879 84.2051 159.889 84.1557 159.892 84.1057V84.1013V84.091C159.892 84.0674 159.892 84.0438 159.892 84.0173C159.892 84.0102 159.892 84.0031 159.892 83.996C159.924 83.3457 159.949 82.6881 159.965 82.0393V81.9171C159.972 81.6395 159.976 81.3648 159.981 81.0916L159.994 80.9826ZM60.1249 13.8147C56.8625 14.6983 52.5333 15.1814 48.2467 15.1453C44.8938 15.1174 40.3429 14.6659 37.7329 14.2248C41.8316 13.4457 52.4582 11.5937 65.9245 10.5207C64.9725 12.2608 61.9854 13.3124 60.1249 13.8147ZM81.1718 18.3804C90.9045 14.9539 95.4553 11.9413 97.5662 9.98537C106.728 10.4714 113.852 11.5974 118.838 13.3537C120.6 13.9745 121.688 14.6726 121.9 15.3191C121.938 15.4598 121.964 15.6034 121.979 15.7484V15.775C121.979 15.7897 121.979 15.8037 121.982 15.8199C122.084 17.3037 121.384 19.658 117.472 22.4475C117.384 22.5108 117.294 22.5742 117.203 22.6375L117.113 22.6993L116.923 22.829L116.813 22.9026L116.635 23.0219L116.514 23.1007L116.335 23.2178L116.209 23.2988L116.024 23.4159L115.896 23.4969L115.699 23.6191L115.575 23.6928L115.35 23.8297L115.245 23.8931C115.134 23.9603 115.021 24.0276 114.906 24.0948L114.876 24.1125C114.771 24.1739 114.665 24.2355 114.557 24.2973L114.424 24.371L114.198 24.4998L114.051 24.5801C113.978 24.6221 113.904 24.6648 113.824 24.7068L113.671 24.7922L113.445 24.9159L113.285 25.0028C113.211 25.0448 113.13 25.086 113.052 25.128L112.892 25.2134L112.643 25.3452L112.49 25.4255L112.204 25.5728L112.079 25.6369C111.94 25.7085 111.8 25.78 111.659 25.8511C105.26 29.0876 95.9648 32.6202 84.0314 36.3515C82.6468 36.7855 81.2591 37.2163 79.8686 37.6439C80.4219 36.9092 80.9076 36.1259 81.3198 35.3036C82.4978 32.925 82.7187 30.5759 81.9868 28.3225C81.308 26.2304 80.099 24.709 78.2915 23.6714C76.5922 22.6957 74.3436 22.15 71.4163 22.0034C71.1134 21.9887 70.8039 21.9779 70.4878 21.971C74.5019 20.6787 78.156 19.4408 81.1718 18.3789V18.3804ZM74.3245 72.6856L71.5267 73.0479C48.0906 76.0796 27.8507 78.6983 17.5069 79.6887C11.4953 80.2639 5.88644 80.5629 3.66513 80.5503C1.88558 80.5408 1.27079 80.1085 1.23545 79.8876C1.25828 79.7616 1.54837 79.0282 5.06403 77.1018C7.8022 75.6017 12.1425 73.5619 18.3337 70.8659C32.1475 64.8495 46.7028 58.0945 56.4811 53.4868C56.9818 53.2512 57.4729 53.0163 57.9581 52.7821C61.018 52.3805 64.1945 51.9664 67.4875 51.5398C78.6994 50.0898 89.7228 48.466 100.428 46.8695C98.0448 48.3541 96.1886 49.9963 94.8972 51.7651C92.9321 54.4581 92.2135 57.5091 92.7621 60.8383C93.3378 64.3245 95.6814 67.0977 98.9702 69.3217C89.3288 70.673 80.6284 71.8689 74.3252 72.6841L74.3245 72.6856ZM113.149 151.492C108.053 153.861 102.717 155.674 97.2327 156.9C91.5718 158.161 85.7896 158.796 79.9901 158.794C78.7929 158.794 77.5884 158.765 76.3824 158.711C76.847 158.531 77.3535 158.343 77.8549 158.16C79.8494 157.428 82.3314 156.517 84.1514 155.324C85.6409 154.348 86.5207 153.283 86.7865 152.141C90.0394 151.654 93.3835 151.081 96.7939 150.407C101.984 149.382 107.518 147.885 113.006 146.04C113.704 146.36 114.34 146.635 114.865 146.863C115.234 147.022 115.552 147.157 115.777 147.264C117.276 147.961 118.059 148.447 118.463 148.767C116.726 149.742 114.955 150.65 113.149 151.491L113.149 151.492ZM112.439 109.702C130.298 107.989 142.412 107.604 145.247 107.604C148.215 107.604 150.342 107.693 151.749 107.878C153.048 108.049 153.414 108.268 153.502 108.341V108.349L153.483 108.4C153.034 109.422 151.81 109.953 149.51 110.877C148.915 111.115 147.449 111.603 145.42 112.276C140.835 113.8 133.16 116.351 125.026 119.527C118.514 122.07 113.4 124.755 109.825 127.498C108.878 128.218 107.984 129.005 107.151 129.855C99.8619 130.408 91.7681 131.186 83.8422 132.273C58.8651 135.697 37.4413 139.484 33.0716 140.311C32.7321 140.375 32.4259 140.429 32.1475 140.475C36.6299 138.77 42.3721 136.425 52.0871 131.614C62.4051 126.503 66.5562 124.31 78.0036 115.955C79.2867 115.019 80.5062 114.118 81.6621 113.252C92.4418 111.858 103.274 110.579 112.44 109.7L112.439 109.702ZM156.007 85.6948C150.369 87.5358 130.072 91.9491 123.986 93.257C113.951 95.4131 103.324 97.8226 93.1125 100.228C93.4924 98.5561 93.4343 96.8403 92.9358 94.9934C92.522 93.4609 91.6606 92.033 90.3766 90.7502C89.1249 89.4984 87.4911 88.4107 85.5297 87.5219C81.467 85.6808 76.2204 84.7824 70.3575 84.9268C66.6762 85.0173 63.1178 85.1816 59.6338 85.4246C64.8149 84.091 70.1779 82.7492 75.6571 81.4289C86.3448 78.8515 97.5596 76.2983 108.576 73.8056C114.653 75.8477 121.266 77.073 126.07 77.9633C126.935 78.1239 127.752 78.2748 128.484 78.4162C131.572 79.012 135.779 79.6895 140.233 80.4045C147.041 81.5018 154.081 82.6358 157.998 83.6152C158.555 83.7544 158.635 83.926 158.644 84.0306C158.623 84.1794 158.553 84.3171 158.445 84.4216C157.95 84.8944 156.82 85.429 156.007 85.6948H156.007Z",\n stroke: "black",\n strokeWidth: "2",\n mask: "url(#path-1-inside-1)"\n }\n )\n ]\n }\n), TR = () => /* @__PURE__ */ c(\n "svg",\n {\n width: "160",\n height: "160",\n viewBox: "0 0 160 160",\n fill: "none",\n xmlns: "http://www.w3.org/2000/svg",\n children: /* @__PURE__ */ c(\n "path",\n {\n d: "M159.994 80.9833C159.998 80.6564 160 80.3338 160 80.0187V80.0017C160 79.7955 160 79.5893 160 79.3831C160 79.3095 160 79.23 160 79.1534C160 79.0194 160 78.8846 159.995 78.7506C159.995 78.6563 159.995 78.5628 159.99 78.4686C159.99 78.3537 159.985 78.2381 159.982 78.1232C159.979 78.0083 159.977 77.9141 159.974 77.8095C159.971 77.7049 159.969 77.6055 159.965 77.5032L159.954 77.16C159.954 77.0731 159.948 76.9869 159.945 76.9L159.929 76.5156C159.929 76.4626 159.924 76.4096 159.922 76.3566C159.889 75.6202 159.845 74.8858 159.792 74.1533V74.1364C159.779 73.9459 159.764 73.7552 159.749 73.5642V73.5487C159.414 69.3571 158.749 65.1984 157.761 61.1111L157.725 60.9639C157.712 60.9094 157.697 60.8549 157.684 60.8011C157.636 60.6045 157.587 60.4094 157.536 60.212C157.53 60.184 157.522 60.1553 157.516 60.1273L157.503 60.078C157.417 59.7456 157.33 59.414 157.24 59.0831C157.229 59.0382 157.216 58.9933 157.204 58.9484L157.186 58.8836L157.123 58.6501C157.09 58.5316 157.056 58.413 157.023 58.2945C157.016 58.2702 157.009 58.2451 157.003 58.2208L156.953 58.0485V58.0441C156.882 57.7942 156.809 57.5448 156.732 57.2959C156.731 57.2899 156.729 57.284 156.727 57.2782L156.654 57.0404L156.635 56.9807V56.9756C156.582 56.7989 156.529 56.6229 156.475 56.4461L156.464 56.4108L156.442 56.3371L156.422 56.2716L156.369 56.1022C156.328 55.9697 156.286 55.8386 156.244 55.7075C156.207 55.5907 156.169 55.4739 156.131 55.357L156.072 55.1729L156.03 55.0463C155.989 54.9203 155.947 54.7951 155.906 54.67L155.9 54.6523C155.88 54.5919 155.86 54.5315 155.839 54.4711L155.801 54.3577C155.715 54.1039 155.627 53.8501 155.539 53.5963L155.524 53.5551C155.496 53.4748 155.468 53.3938 155.44 53.3135C155.424 53.2693 155.408 53.2252 155.392 53.181C155.35 53.0632 155.309 52.9468 155.266 52.8297C155.239 52.7561 155.213 52.6824 155.186 52.6088L155.123 52.449C155.119 52.4387 155.116 52.4277 155.111 52.4173L155.091 52.3629L155.086 52.3481C155.066 52.2922 155.045 52.2369 155.024 52.181L154.979 52.0595L154.942 51.9623C154.921 51.9048 154.9 51.8474 154.878 51.7907C154.868 51.7649 154.859 51.7391 154.849 51.717L154.739 51.4225L154.727 51.3923L154.696 51.3128C154.664 51.2296 154.631 51.1463 154.599 51.0624C154.576 51.0027 154.553 50.9424 154.526 50.8827L154.499 50.815L154.401 50.5631C154.368 50.4821 154.336 50.4011 154.303 50.3201L154.229 50.1441L154.197 50.0646C154.186 50.0366 154.175 50.0086 154.164 49.9806C154.153 49.9527 154.136 49.9122 154.122 49.8783L154.019 49.6257L153.965 49.4954L153.869 49.2649C153.833 49.1787 153.796 49.0918 153.762 49.0057C153.737 48.946 153.711 48.8871 153.688 48.8282L153.659 48.759L153.622 48.6713L153.467 48.312C153.447 48.2634 153.426 48.2155 153.405 48.1647L153.39 48.1301L153.273 47.8606C153.246 47.7987 153.218 47.7369 153.19 47.675C153.162 47.6131 153.134 47.5498 153.106 47.4865L153.102 47.4769L152.978 47.1993L152.897 47.0204L152.871 46.9622C152.861 46.9408 152.852 46.9195 152.841 46.8981L152.826 46.8628L152.691 46.5682L152.645 46.4695C152.642 46.4607 152.637 46.4526 152.634 46.4438C152.63 46.4349 152.617 46.4077 152.609 46.3893C152.601 46.3709 152.594 46.3583 152.587 46.3429L152.426 45.999C152.407 45.9577 152.387 45.9165 152.368 45.876C152.349 45.8355 152.321 45.7781 152.299 45.7287C152.276 45.6794 152.252 45.6323 152.229 45.5815L152.179 45.4776C152.137 45.3878 152.094 45.2979 152.051 45.2081C151.989 45.0807 151.926 44.9541 151.864 44.8267C151.829 44.753 151.795 44.6845 151.76 44.6138C151.752 44.5984 151.745 44.5829 151.737 44.5674C151.687 44.4651 151.635 44.3635 151.584 44.2618L151.557 44.2081C151.551 44.1934 151.543 44.1794 151.536 44.1654L151.403 43.9003L151.394 43.8841L151.32 43.7368L151.233 43.5674L151.15 43.4054L151.147 43.3914L151.084 43.2699C151.004 43.1153 150.923 42.9599 150.842 42.8053C150.81 42.7449 150.778 42.6838 150.746 42.6234L150.664 42.4702L150.485 42.1396L150.404 41.9886C150.378 41.9415 150.353 41.8944 150.33 41.8472C150.174 41.56 150.016 41.2733 149.855 40.9871L149.77 40.8347L149.734 40.7706C149.668 40.6533 149.602 40.5367 149.535 40.4208L149.495 40.3472L149.344 40.0828C149.338 40.0733 149.332 40.0644 149.327 40.0549L149.15 39.7507L149.097 39.6587L148.959 39.423L148.953 39.4135L148.732 39.0372C148.711 39.0029 148.686 38.9708 148.659 38.9414C147.897 37.8369 145.493 37.3847 143.587 37.2014C141.526 37.0018 137.986 36.9223 132.869 37.6749C126.692 38.5828 118.693 39.9039 111.601 42.0733C108.592 42.9945 105.921 44.0166 103.626 45.1227C91.8697 46.8775 79.7162 48.6912 67.3344 50.2929C65.3161 50.554 63.3426 50.8105 61.4141 51.0624C67.6768 47.8495 72.4433 44.8097 75.8964 41.8318C76.7793 41.0746 77.6183 40.2677 78.4093 39.4149C80.4164 38.8008 82.4173 38.182 84.4121 37.5585C96.4132 33.8029 105.77 30.2476 112.23 26.9803C112.378 26.9067 112.517 26.833 112.658 26.7594L112.785 26.6938L113.079 26.5429L113.235 26.4604L113.489 26.3271L113.653 26.2387C113.732 26.1968 113.812 26.1541 113.89 26.1114L114.053 26.023L114.285 25.8963L114.441 25.8094L114.674 25.6791L114.821 25.5974L115.052 25.4655L115.19 25.3867C115.301 25.3234 115.41 25.2598 115.518 25.196L115.548 25.1783C115.667 25.1091 115.782 25.0399 115.897 24.9707L116.004 24.9066L116.237 24.7645L116.365 24.6857L116.568 24.5598L116.7 24.4758L116.891 24.3543L117.022 24.2704L117.208 24.1496L117.333 24.0671L117.518 23.9434L117.633 23.8698C117.7 23.8249 117.765 23.7799 117.83 23.7343L117.924 23.6702C118.022 23.6039 118.116 23.5379 118.206 23.4721C120.625 21.746 123.462 19.003 123.238 15.7401C123.238 15.7158 123.235 15.6922 123.233 15.6664V15.6377C123.095 14.1944 122.039 11.9999 117.913 9.56471L117.889 9.55072L117.751 9.46971L117.663 9.41964L117.569 9.36588L117.426 9.28488L117.374 9.25542L117.171 9.14276L117.145 9.12876L117.135 9.12361L117.122 9.11625C116.68 8.886 116.239 8.65944 115.797 8.43656L115.767 8.42183C115.489 8.28265 115.21 8.14421 114.93 8.00872L114.888 7.9881L114.702 7.89752L114.408 7.75687H114.401L114.216 7.66924L114.159 7.64273L114.073 7.60149L113.86 7.50135L113.793 7.46968L113.581 7.37174L113.49 7.32977L113.471 7.32093L113.316 7.24729L113.243 7.21415L112.948 7.08087L112.894 7.05583L112.785 7.00723L112.696 6.96673L112.384 6.82755L112.31 6.79441L112.281 6.7819L112.155 6.72593L111.823 6.57865L111.646 6.50501L111.476 6.43137L111.108 6.27305L110.822 6.15302L110.527 6.03004L110.344 5.9564L110.227 5.9078C110.092 5.85257 109.956 5.79808 109.821 5.74359L109.673 5.68541L109.265 5.52341L109.133 5.47186L108.702 5.3047L108.629 5.27598C108.39 5.18467 108.149 5.09409 107.908 5.00425H107.9C107.464 4.84225 107.026 4.68245 106.593 4.53002L106.566 4.52045L106.074 4.34887L106.013 4.32825C105.848 4.27179 105.684 4.21607 105.521 4.16109L105.487 4.14931L105.234 4.06536L105.013 3.99172L104.651 3.8739L104.38 3.787L104.051 3.68244L103.734 3.58302L103.439 3.49171L102.906 3.33044L102.832 3.30835L102.808 3.30099L102.292 3.14929H102.281H102.274L102.253 3.1434L102.126 3.10732C101.227 2.84909 100.324 2.60633 99.4164 2.37903C84.4694 -1.33824 68.7698 -0.688315 54.181 4.25167L54.1582 4.25977C53.9911 4.3172 53.8232 4.37464 53.6561 4.43355L53.5265 4.47847C53.3571 4.53738 53.1885 4.59777 53.0199 4.65815L52.9073 4.69792L52.3779 4.89085L52.3109 4.91515C47.8766 6.55085 43.5967 8.57828 39.522 10.9734L39.4808 10.9977C39.3475 11.0758 39.2142 11.1553 39.0817 11.2348L38.8741 11.3585C38.7607 11.4263 38.6478 11.4945 38.5354 11.5633C38.4456 11.6178 38.3557 11.6722 38.2667 11.7275C38.166 11.7888 38.0654 11.8507 37.9648 11.913C37.8642 11.9754 37.7616 12.0392 37.657 12.1045L37.3853 12.2746C37.2705 12.3468 37.1559 12.4204 37.0415 12.4955L36.8052 12.645C36.6702 12.7309 36.5362 12.8176 36.4032 12.905L36.222 13.0228C36.0257 13.1509 35.8311 13.2795 35.6382 13.4087C35.3128 13.6259 35.1523 13.9742 35.2192 14.3188C35.3422 14.9543 36.0984 15.1797 36.6572 15.2938C39.1244 15.7982 44.3681 16.3608 48.243 16.3932C48.3947 16.3932 48.5457 16.3932 48.6973 16.3932C52.9434 16.3932 57.2063 15.8962 60.4577 15.0177C62.4147 14.4882 63.9918 13.8299 65.1411 13.0596C66.2904 12.2893 67.0281 11.3961 67.3285 10.4086C72.0841 10.0544 77.1687 9.80182 82.4278 9.73039C87.2381 9.66412 91.6756 9.71788 95.7402 9.89166C92.6899 12.279 87.4565 14.8365 80.7631 17.1937C76.7417 18.609 71.5841 20.3388 65.9642 22.1157C61.1365 22.467 55.1072 23.4213 47.6202 24.7616C40.3451 26.0664 32.7432 27.78 26.7544 29.4663C19.3697 31.5459 15.0279 33.4001 13.8506 34.9775L13.8352 34.9996L13.4442 35.5791C13.3124 35.7764 13.1806 35.9745 13.051 36.1726C13.0478 36.1766 13.0449 36.1808 13.0422 36.1851C12.8176 36.5268 12.585 36.8884 12.3302 37.2897L12.2654 37.3936L12.1771 37.5342C12.0819 37.6859 11.9874 37.8378 11.8936 37.99L11.8863 38.0018L11.8811 38.0106L11.7236 38.2654L11.5255 38.5917C11.5174 38.6042 11.51 38.6167 11.5027 38.6292L11.446 38.7213L11.2663 39.0217C11.2317 39.0791 11.1979 39.1373 11.1633 39.1955L11.1242 39.2603L11.0027 39.465L10.9821 39.5004L10.9785 39.5077C10.8032 39.806 10.6243 40.1152 10.4373 40.4437C10.4226 40.4694 10.4078 40.4952 10.3939 40.5173C10.3799 40.5394 10.3556 40.5836 10.3364 40.6182L10.2878 40.7021L10.2039 40.8494L10.0787 41.0718L10.0301 41.1594L9.93148 41.3369L9.89982 41.3944L9.78423 41.6094C9.76435 41.6462 9.74447 41.683 9.72386 41.7198L9.6944 41.7743C9.63649 41.8804 9.57881 41.9864 9.52138 42.0924L9.37413 42.3642C9.28725 42.5284 9.19963 42.6919 9.11202 42.8583L9.10171 42.8789C8.89997 43.2626 8.69824 43.6551 8.48472 44.0792L8.38533 44.2751C8.29918 44.4474 8.21451 44.6197 8.12616 44.7987L8.00541 45.0454C7.92197 45.2167 7.83902 45.3885 7.75656 45.5608C7.72784 45.6212 7.69986 45.6816 7.67115 45.7412L7.64538 45.7965C7.50181 46.0984 7.35823 46.4069 7.21761 46.7133V46.717C7.07772 47.0218 6.93783 47.3318 6.80162 47.6397L6.75892 47.7361V47.7413L6.7383 47.7884C6.65657 47.9732 6.57632 48.1566 6.49607 48.3451L6.39741 48.5771C6.31863 48.7612 6.24132 48.9453 6.16401 49.1301L6.07566 49.3415C5.9424 49.6618 5.80913 49.9895 5.68102 50.3105L5.67366 50.3275C5.54334 50.6544 5.41376 50.9843 5.28859 51.3098L5.25546 51.3952C5.18184 51.5933 5.10821 51.7929 5.03016 51.9917L4.95654 52.1986C4.88438 52.395 4.81297 52.5914 4.74228 52.7878L4.66866 52.9814C4.54865 53.3157 4.4279 53.6589 4.31157 53.9976L4.30126 54.0271C4.18199 54.3761 4.06492 54.723 3.95448 55.058L3.9508 55.0683V55.0779L3.94712 55.0904C3.87865 55.2988 3.81165 55.5087 3.74465 55.7178L3.68354 55.9108C3.61923 56.114 3.55592 56.3175 3.49358 56.5212L3.43689 56.7075C3.3316 57.0544 3.22631 57.4093 3.12324 57.7643L3.11367 57.7974C3.00912 58.159 2.90825 58.5191 2.81253 58.8681C2.81282 58.8693 2.81282 58.8706 2.81253 58.8718V58.8792C2.76787 59.0451 2.7232 59.211 2.67853 59.377L2.58208 59.7451L2.47827 60.1435C2.45765 60.2253 2.43704 60.307 2.41716 60.3888L2.23457 61.1251C1.34717 64.7962 0.72125 68.5255 0.361506 72.2851C0.35488 72.3499 0.348989 72.4147 0.343099 72.4802C0.328374 72.6327 0.315121 72.7844 0.301132 72.9368L0.279045 73.1953C0.268001 73.3286 0.256956 73.4626 0.246649 73.5959C0.239286 73.6887 0.231188 73.7807 0.224561 73.8735C0.214253 74.009 0.204682 74.1452 0.19511 74.2807C0.188484 74.3676 0.181857 74.4538 0.175967 74.5399C0.161978 74.7454 0.149462 74.9508 0.136945 75.157L0.119275 75.4611C0.112649 75.5804 0.106022 75.699 0.100132 75.8176C0.094242 75.9236 0.0890882 76.0296 0.0846706 76.1357C0.0787805 76.2528 0.0736265 76.3699 0.0684727 76.4862C0.0630734 76.5898 0.0586558 76.6936 0.0552199 76.7977C0.050066 76.9243 0.0456483 77.0503 0.0412307 77.1762C0.0412307 77.2697 0.0346045 77.3632 0.0316594 77.4568C0.025033 77.6563 0.0198789 77.8551 0.0147251 78.0547C0.0147251 78.1085 0.0147251 78.163 0.0147251 78.2167C0.0107983 78.4018 0.00736247 78.5866 0.00441741 78.7712C0.00441741 78.7926 0.00441741 78.8139 0.00441741 78.836V78.8404C0.00441741 78.9671 0.00441759 79.0856 0 79.1991C0 79.2543 0 79.3095 0 79.3655C0 79.5459 0 79.7116 0 79.8706V79.9008C0.0147253 80.4664 0.402737 81.7838 3.67396 81.8014H3.80796C6.14708 81.8014 11.7074 81.5025 17.6431 80.934C28.0075 79.9413 48.257 77.3257 71.7041 74.2888L74.5019 73.9265C81.1283 73.0694 90.4053 71.791 100.639 70.3491C102.392 71.358 104.342 72.2424 106.39 73.0208C95.9906 75.3772 85.4517 77.7859 75.3774 80.2131C67.3167 82.1549 59.5086 84.1439 52.1607 86.0828C44.2783 86.9208 36.6145 88.2058 28.5811 90.0129C19.7511 92.0012 11.2266 94.6139 4.57883 97.3768L4.40287 97.4504C2.90162 98.0697 2.2942 99.0396 2.59607 100.333V100.343L2.59975 100.357L2.65939 100.578V100.587L2.7632 100.98V100.985C2.8383 101.261 2.91487 101.537 2.99292 101.813C3.01648 101.897 3.04078 101.982 3.06654 102.067C3.12986 102.288 3.19416 102.509 3.25945 102.73L3.3154 102.921C3.39639 103.192 3.47861 103.462 3.56205 103.731L3.63568 103.968C3.70121 104.177 3.76747 104.385 3.83447 104.593L3.85877 104.667C3.87644 104.723 3.89484 104.778 3.91251 104.833C3.94712 104.94 3.98614 105.046 4.01854 105.153C4.07007 105.309 4.12161 105.466 4.17389 105.622L4.2431 105.825C4.31476 106.034 4.38691 106.242 4.45956 106.451L4.55454 106.721C4.63994 106.961 4.72609 107.201 4.81297 107.44L4.87997 107.624C4.9639 107.852 5.04906 108.08 5.13545 108.308C5.17153 108.403 5.20908 108.498 5.24442 108.593C5.27976 108.688 5.31804 108.783 5.35412 108.878L5.46677 109.173L5.50358 109.267C5.52125 109.314 5.53966 109.36 5.55807 109.407C5.65599 109.655 5.75612 109.903 5.85625 110.15L5.95786 110.397L5.977 110.444C6.05063 110.616 6.11984 110.789 6.19199 110.959L6.22218 111.033L6.31568 111.254C6.41778 111.494 6.52061 111.732 6.62418 111.971L6.71474 112.177L6.7545 112.265C6.82812 112.426 6.89733 112.588 6.96949 112.749C7.01955 112.86 7.06888 112.97 7.11674 113.082C7.1992 113.264 7.2824 113.445 7.36633 113.625C7.43358 113.772 7.50107 113.917 7.56881 114.058C7.64243 114.215 7.71606 114.372 7.78969 114.528C7.84712 114.649 7.90504 114.769 7.96345 114.889C8.03045 115.028 8.09892 115.167 8.16739 115.306C8.24764 115.47 8.32937 115.633 8.41109 115.797C8.49282 115.96 8.57602 116.126 8.65995 116.29C8.72523 116.419 8.79125 116.548 8.85801 116.676C8.91912 116.794 8.97949 116.911 9.0406 117.027L9.05901 117.063C9.12183 117.183 9.18466 117.303 9.24749 117.422C9.35106 117.618 9.45512 117.813 9.55967 118.005L9.80116 118.446C9.85638 118.546 9.91087 118.645 9.96609 118.741C10.0451 118.885 10.1246 119.028 10.2046 119.169L10.3033 119.344L10.3475 119.418C10.4991 119.685 10.6516 119.951 10.8017 120.209L10.9365 120.439C11.0256 120.592 11.1161 120.745 11.2067 120.897L11.3289 121.1C11.5196 121.418 11.711 121.734 11.8995 122.038L11.9496 122.119C12.0512 122.284 12.1535 122.446 12.2566 122.61L12.3582 122.77C12.3707 122.79 12.384 122.81 12.3965 122.831C12.409 122.851 12.4274 122.878 12.4421 122.904C12.5644 123.096 12.6871 123.287 12.8103 123.478C12.8176 123.49 12.825 123.502 12.8331 123.513C12.9494 123.692 13.066 123.87 13.1828 124.048C13.1828 124.048 13.1872 124.056 13.1902 124.06C13.4074 124.39 13.6386 124.732 13.8948 125.108L13.9338 125.164L14.0553 125.343L14.1974 125.547L14.2924 125.684L14.3601 125.781L14.5192 126.008C14.5236 126.013 14.5273 126.019 14.5309 126.025L14.5434 126.041C14.5434 126.047 14.5501 126.051 14.553 126.055C14.6502 126.193 14.7467 126.33 14.8475 126.467L14.9565 126.619L15.0662 126.77L15.1479 126.883C15.3018 127.096 15.4579 127.31 15.6162 127.524L15.6633 127.588L15.7524 127.709C15.8628 127.856 15.9738 128.003 16.0852 128.15C16.1397 128.224 16.1949 128.298 16.2494 128.371C16.3628 128.519 16.4764 128.666 16.5903 128.813L16.711 128.969C16.9716 129.306 17.2323 129.637 17.4856 129.953L17.5261 130.005C17.6497 130.159 17.7749 130.313 17.9001 130.467L18.0473 130.644C18.172 130.796 18.2972 130.948 18.4228 131.1L18.5362 131.235C18.9559 131.738 19.3859 132.241 19.8136 132.729L19.9219 132.852C20.0598 133.009 20.1987 133.166 20.3386 133.322L20.4343 133.429C20.893 133.94 21.362 134.45 21.8281 134.942L21.8744 134.992C22.0276 135.154 22.1817 135.315 22.3368 135.476L22.4104 135.554C22.6674 135.821 22.9258 136.087 23.1909 136.351L23.2189 136.379C23.6142 136.777 24.014 137.173 24.4146 137.557L24.4661 137.606C24.5029 137.643 24.5397 137.68 24.5787 137.714C24.7105 137.841 24.8423 137.967 24.9749 138.092L25.0485 138.162L25.0647 138.177C25.1898 138.296 25.3165 138.413 25.4424 138.531C25.516 138.605 25.5896 138.671 25.6669 138.74C25.7538 138.821 25.8414 138.901 25.9283 138.981L26.1153 139.152C26.2663 139.29 26.4172 139.426 26.5667 139.561L26.5711 139.564L26.5954 139.587L26.6123 139.602C26.7596 139.735 26.9105 139.869 27.0651 140.003L27.2448 140.162L27.5334 140.414C27.6608 140.524 27.7881 140.634 27.9155 140.743C27.9891 140.808 28.0627 140.873 28.1415 140.937L28.1975 140.985L28.2395 141.021L28.2623 141.042C28.4095 141.168 28.5627 141.294 28.7136 141.42L28.8049 141.494L28.8182 141.504C28.8506 141.531 28.8844 141.556 28.919 141.578C29.026 141.651 29.1418 141.709 29.2636 141.753H29.2695H29.2754C29.597 141.855 29.9336 141.902 30.2708 141.891C30.9681 141.891 31.9296 141.761 33.302 141.502C37.6651 140.676 59.0588 136.894 84.0101 133.475C91.453 132.455 99.0409 131.708 105.969 131.163C104.453 133.092 103.671 135.046 103.637 137.004C103.574 140.604 107.793 143.404 111.39 145.222C106.626 146.777 101.598 148.142 96.5509 149.138C93.2377 149.793 89.9937 150.35 86.8322 150.827C86.7985 150.608 86.7466 150.392 86.6768 150.181C86.0657 148.331 83.5757 147.04 79.6646 146.545C75.8758 146.065 71.0363 146.355 66.0378 147.361C59.2959 148.716 55.0204 150.791 53.8703 151.394C52.1033 152.32 51.4068 153.02 51.4568 153.81C51.5113 154.668 52.4442 155.125 53.2622 155.43L53.282 155.437L53.6347 155.56L53.687 155.579L54.0301 155.697C54.5845 155.887 55.1418 156.071 55.6845 156.244L55.7264 156.258L56.1513 156.391C56.4553 156.486 56.7675 156.581 57.0834 156.675L57.1254 156.688L57.16 156.699L57.213 156.714L57.4103 156.773C57.6039 156.83 57.7976 156.887 57.9912 156.942L58.1038 156.974C58.6079 157.117 59.1142 157.255 59.6228 157.387L59.6927 157.406L59.8068 157.436L59.823 157.44C60.0302 157.494 60.2375 157.546 60.4452 157.598L60.6226 157.644L60.7316 157.67L60.7839 157.683C60.9625 157.727 61.1419 157.77 61.3221 157.813L61.4119 157.835L61.6379 157.888L61.7601 157.916C61.9103 157.951 62.0608 157.986 62.2115 158.02L62.3514 158.052L62.5391 158.094L62.7791 158.147L63.1185 158.22L63.1767 158.233L63.4963 158.3L63.8489 158.374L64.0617 158.417H64.075L64.3135 158.466C64.5339 158.51 64.7548 158.553 64.9761 158.594L65.3892 158.668L65.7345 158.731L65.9296 158.766L66.0143 158.781L66.1822 158.811L66.3714 158.843L66.9243 158.935L67.0679 158.959L67.3248 159L67.5457 159.035L67.9264 159.094L68 159.105L68.0795 159.118L68.1767 159.132C68.4221 159.168 68.6643 159.202 68.9034 159.236L69.0823 159.26C69.1699 159.272 69.2583 159.285 69.3451 159.296L69.3923 159.303L69.915 159.37L70.0048 159.381L70.0586 159.388C70.1653 159.401 70.2728 159.413 70.3803 159.426C70.988 159.499 71.5964 159.565 72.2055 159.624C72.4019 159.643 72.5982 159.661 72.7945 159.679L73.1494 159.71L73.2231 159.716L73.2554 159.72C73.4837 159.739 73.7119 159.756 73.9409 159.773L74.0145 159.779C75.9936 159.926 77.9948 160 79.9783 160C85.8697 160.002 91.7435 159.357 97.494 158.076C103.066 156.83 108.487 154.988 113.665 152.582C115.72 151.626 117.734 150.582 119.708 149.449C119.72 149.442 119.734 149.437 119.747 149.43C120.804 148.823 121.846 148.192 122.872 147.538L122.903 147.518C123.165 147.351 123.425 147.183 123.685 147.013L123.855 146.902C124.068 146.762 124.281 146.62 124.494 146.478L124.72 146.325C124.917 146.193 125.112 146.059 125.309 145.924C125.483 145.804 125.657 145.683 125.83 145.562C125.972 145.462 126.115 145.363 126.256 145.262C126.44 145.132 126.624 145.001 126.803 144.869C126.863 144.825 126.924 144.782 126.984 144.738C127.184 144.591 127.383 144.444 127.582 144.297L127.668 144.233C127.802 144.132 127.939 144.033 128.073 143.931C132.533 140.57 136.631 136.754 140.301 132.546C140.48 132.341 140.658 132.134 140.835 131.927L140.885 131.868C141.055 131.669 141.224 131.469 141.391 131.269L141.458 131.19C141.624 130.989 141.79 130.788 141.955 130.587L142.014 130.514C142.183 130.307 142.35 130.101 142.514 129.893L142.547 129.853C143.164 129.081 143.776 128.283 144.366 127.484L144.394 127.446C144.983 126.647 145.565 125.826 146.122 125.011L146.13 124.999L146.146 124.977C146.299 124.752 146.451 124.527 146.601 124.301L146.643 124.237C146.791 124.015 146.938 123.792 147.085 123.568L147.129 123.501C147.276 123.274 147.423 123.046 147.57 122.817L147.595 122.779C148.828 120.833 149.991 118.81 151.055 116.761L151.064 116.745L151.068 116.736C151.196 116.49 151.323 116.243 151.448 115.993L151.472 115.947C151.598 115.697 151.722 115.446 151.847 115.194L151.86 115.166C152.455 113.953 153.02 112.717 153.553 111.47C153.594 111.376 153.634 111.283 153.674 111.19C153.723 111.074 153.772 110.957 153.821 110.839C153.885 110.692 153.948 110.538 154.01 110.387C154.062 110.261 154.113 110.134 154.164 110.007C154.22 109.867 154.278 109.728 154.334 109.588C154.39 109.448 154.45 109.294 154.508 109.146C154.551 109.038 154.594 108.931 154.636 108.822V108.816C154.645 108.791 154.655 108.765 154.666 108.742C154.666 108.733 154.672 108.724 154.675 108.714C154.85 108.19 154.694 107.814 154.534 107.591C154.066 106.944 152.964 106.311 145.239 106.311C145.129 106.311 133.653 106.369 112.311 108.415C103.74 109.238 93.7118 110.409 83.6353 111.698C86.3595 109.563 88.6088 107.585 90.2381 105.614C91.3698 104.244 92.176 102.914 92.6848 101.574C103.103 99.1184 113.98 96.6463 124.24 94.4423C140.526 90.9437 152.544 88.1042 156.388 86.8464C157.111 86.6101 158.539 86.0165 159.301 85.2912L159.306 85.286C159.592 85.0093 159.784 84.6513 159.859 84.261C159.873 84.2131 159.883 84.1637 159.886 84.1137V84.1093V84.099C159.92 83.4178 159.946 82.7286 159.963 82.0481V81.9259C159.97 81.6468 159.974 81.3699 159.979 81.0953L159.994 80.9833ZM82.4043 8.48663C63.0758 8.751 46.0792 11.4396 39.067 12.7083C51.3788 5.19866 65.4577 1.2472 79.9908 1.2472C92.7168 1.22863 105.256 4.30768 116.526 10.2186L116.537 10.2245C117.42 10.7068 118.623 11.4381 119.678 12.3269C119.541 12.2746 119.399 12.2223 119.254 12.1715C111.652 9.49328 99.2544 8.25246 82.4043 8.48663ZM14.4838 36.2757L14.7783 35.8398L14.8615 35.7175C15.209 35.2595 16.1978 34.4819 18.9294 33.3662C21.0012 32.5201 23.7482 31.6136 27.0946 30.6711C33.0458 28.995 40.605 27.2918 47.8329 25.9979C58.3777 24.1106 65.9929 22.9935 71.3603 23.263C74.0845 23.3992 76.1512 23.8911 77.6752 24.766C79.1993 25.6408 80.2242 26.9346 80.8029 28.7182C81.439 30.677 81.2447 32.6534 80.2043 34.7565C79.2354 36.7205 77.5089 38.7809 75.0733 40.8811C70.8523 44.5233 64.597 48.2737 55.9481 52.3489C46.1778 56.9528 31.6344 63.7025 17.8346 69.7122C7.78674 74.0885 3.19834 76.4641 1.25754 78.0238C1.61288 63.1339 6.20055 48.6531 14.4838 36.2757ZM54.4542 152.539C55.5674 151.955 59.7089 149.947 66.2874 148.624C71.1564 147.644 75.853 147.36 79.5108 147.823C82.8667 148.248 85.0467 149.263 85.4907 150.61C85.9244 151.921 85.2816 153.085 83.4689 154.272C81.7696 155.387 79.362 156.271 77.4271 156.982C75.6174 157.644 74.471 158.08 73.8562 158.553C68.6428 158.152 63.4824 157.232 58.4514 155.807L58.3387 155.775C58.148 155.72 57.9573 155.664 57.7674 155.609C57.1982 155.441 56.6401 155.27 56.1071 155.101L56.0688 155.088C55.5328 154.918 54.9843 154.736 54.4387 154.55L54.1008 154.433L54.0485 154.414L53.7098 154.297C52.9735 154.023 52.7711 153.826 52.7203 153.761C52.7674 153.657 53.0332 153.285 54.4542 152.539ZM104.892 137.06C104.987 131.573 112.107 125.913 125.482 120.688C133.581 117.521 141.239 114.98 145.814 113.46C147.94 112.753 149.348 112.286 149.975 112.033C150.924 111.652 151.746 111.323 152.434 110.968C145.8 126.473 134.24 139.574 119.614 148.107C119.158 147.643 118.252 147.027 116.308 146.123C116.068 146.012 115.742 145.871 115.366 145.708C112.481 144.462 104.821 141.148 104.892 137.06ZM111.96 43.2692C118.972 41.1241 126.911 39.8133 133.044 38.912C136.116 38.4598 138.595 38.3148 140.514 38.3148C141.712 38.3148 142.692 38.3715 143.459 38.4459C146.331 38.7227 147.442 39.3612 147.628 39.6602C147.718 39.8074 147.808 39.9532 147.897 40.0976C155.022 52.1925 158.769 65.9791 158.746 80.0172C158.746 80.6328 158.738 81.2757 158.723 81.9281V82.0489C158.723 82.2079 158.714 82.3677 158.709 82.5275C158.576 82.4771 158.44 82.4345 158.302 82.4001C154.334 81.4082 147.266 80.2698 140.432 79.1689C135.989 78.4524 131.791 77.7764 128.726 77.1843C127.989 77.0422 127.17 76.8897 126.303 76.7292C120.781 75.7064 113.214 74.3043 106.64 71.7792C103.071 70.4088 100.215 68.8506 98.1493 67.1473C95.7933 65.2018 94.3944 63.0081 94.0034 60.6273C93.5101 57.6435 94.1507 54.9078 95.9133 52.4961C98.6006 48.8105 104.001 45.7066 111.962 43.2707L111.96 43.2692ZM89.2832 104.852C86.7284 107.945 82.514 111.111 77.2703 114.94C65.9024 123.237 61.78 125.415 51.5305 130.49C40.9518 135.73 35.1118 138.027 30.4733 139.768C29.9432 139.968 29.578 140.155 29.3284 140.329L29.0913 140.129L29.0685 140.109L28.9558 140.013C28.4405 139.571 27.9251 139.124 27.4318 138.682L27.4148 138.666L27.4082 138.66C26.9186 138.218 26.4201 137.762 25.9268 137.295L25.8348 137.207C25.7047 137.084 25.5749 136.959 25.4453 136.835C21.7947 133.327 18.4878 129.478 15.5698 125.34L15.5558 125.321C15.1921 124.805 14.8276 124.273 14.4728 123.742L14.4028 123.636C14.0708 123.139 13.7402 122.628 13.417 122.119L13.3183 121.964C13.2172 121.804 13.1166 121.643 13.0164 121.482L12.9664 121.401C12.7816 121.102 12.5931 120.792 12.4046 120.478L12.2846 120.278C12.1957 120.13 12.1071 119.98 12.0188 119.828L11.8863 119.6C11.739 119.347 11.5918 119.085 11.4394 118.822L11.3944 118.744L11.2987 118.574C11.2202 118.434 11.1417 118.293 11.0631 118.153L10.9019 117.858C10.8224 117.711 10.7421 117.563 10.6641 117.422C10.561 117.232 10.4586 117.04 10.357 116.848C10.2945 116.731 10.2334 116.613 10.1715 116.496L10.1531 116.46L9.97345 116.114C9.90792 115.988 9.84239 115.862 9.7776 115.734C9.69612 115.573 9.61464 115.411 9.53316 115.248C9.45217 115.088 9.37266 114.926 9.29314 114.765C9.22614 114.629 9.1584 114.492 9.09214 114.355C9.03471 114.236 8.97802 114.119 8.92133 114C8.8477 113.846 8.77407 113.692 8.70045 113.538C8.63345 113.395 8.56718 113.254 8.50092 113.111C8.41846 112.933 8.33649 112.755 8.25501 112.577C8.20592 112.467 8.15684 112.357 8.10775 112.249C8.03413 112.09 7.96565 111.932 7.89571 111.772L7.85595 111.683L7.7676 111.482C7.6655 111.248 7.56439 111.013 7.46426 110.777L7.37296 110.56L7.34204 110.486C7.27136 110.317 7.20092 110.147 7.13073 109.977L7.11085 109.93C7.07772 109.85 7.04459 109.769 7.01219 109.688C6.91402 109.443 6.81585 109.199 6.71768 108.957C6.70001 108.912 6.68308 108.867 6.66541 108.823L6.62786 108.727C6.55374 108.538 6.48012 108.348 6.40698 108.158C6.3709 108.064 6.33335 107.97 6.29949 107.876C6.21457 107.652 6.13088 107.428 6.04842 107.202L5.98216 107.023C5.89577 106.787 5.8111 106.551 5.72814 106.314C5.69648 106.226 5.66556 106.137 5.63464 106.048C5.56248 105.843 5.49156 105.638 5.42186 105.431L5.35338 105.233C5.26552 104.972 5.17889 104.711 5.09348 104.449L5.01986 104.21C4.95359 104.006 4.8888 103.801 4.82401 103.596L4.75038 103.362C4.66792 103.096 4.58693 102.83 4.50742 102.564L4.4522 102.375C4.3879 102.158 4.32458 101.941 4.26224 101.723L4.18861 101.473C4.11204 101.203 4.03694 100.933 3.96332 100.663C3.9081 100.456 3.85361 100.249 3.79913 100.04C3.69237 99.5801 3.69163 99.0904 4.86524 98.6066L5.04415 98.5329C11.6286 95.7972 20.0794 93.2052 28.8417 91.2346C42.7741 88.099 55.5873 86.5438 70.3892 86.1756C76.065 86.0364 81.1217 86.895 85.0136 88.6587C88.6265 90.2964 91.0112 92.661 91.7283 95.3171C92.6538 98.7465 91.8999 101.687 89.2832 104.853V104.852Z",\n fill: "#231F20"\n }\n )\n }\n), IR = () => /* @__PURE__ */ e1(\n "svg",\n {\n width: "160",\n height: "48",\n viewBox: "0 0 160 48",\n fill: "none",\n xmlns: "http://www.w3.org/2000/svg",\n children: [\n /* @__PURE__ */ c(\n "path",\n {\n d: "M57.7234 12.2924C57.3418 12.3007 56.9724 12.1559 56.696 11.8896C56.4238 11.5935 56.2725 11.2041 56.2725 10.7997C56.2725 10.3953 56.4238 10.0059 56.696 9.70982C56.9762 9.44923 57.3428 9.30463 57.7234 9.30463C58.1039 9.30463 58.4706 9.44923 58.7508 9.70982C59.023 10.0059 59.1743 10.3953 59.1743 10.7997C59.1743 11.2041 59.023 11.5935 58.7508 11.8896C58.4743 12.1559 58.105 12.3007 57.7234 12.2924ZM58.8524 27.3308H56.5944V14.595H58.8524V27.3308Z",\n fill: "#231F20"\n }\n ),\n /* @__PURE__ */ c(\n "path",\n {\n d: "M62.7304 14.9635C63.2479 14.8321 63.9338 14.6931 64.788 14.5464C65.7643 14.3895 66.7519 14.3159 67.7404 14.3265C68.5911 14.2995 69.4385 14.4452 70.2327 14.755C70.854 15.0113 71.4001 15.4244 71.8189 15.9549C72.2285 16.5008 72.513 17.1322 72.6516 17.8032C72.8195 18.5839 72.9009 19.3812 72.8943 20.1801V27.3222H70.6363V20.6686C70.6444 19.9985 70.5915 19.3291 70.4782 18.6689C70.4019 18.1871 70.2248 17.7274 69.9589 17.3204C69.7172 16.9794 69.3799 16.7197 68.9908 16.5748C68.5079 16.4076 67.9993 16.3292 67.4892 16.3434C67.2464 16.3434 66.9981 16.3434 66.7412 16.3662C66.4844 16.3891 66.236 16.4034 66.0017 16.4291C65.7674 16.4548 65.5586 16.4805 65.3723 16.5148L64.9743 16.5862V27.3394H62.7163L62.7304 14.9635Z",\n fill: "#231F20"\n }\n ),\n /* @__PURE__ */ c(\n "path",\n {\n d: "M78.5083 14.595H83.2755V16.5062H78.5083V22.3828C78.4988 22.9133 78.548 23.4432 78.6551 23.9626C78.7244 24.3184 78.8731 24.6536 79.0897 24.9425C79.2803 25.1755 79.5316 25.3496 79.8151 25.4453C80.1441 25.5481 80.487 25.5973 80.8312 25.591C81.3851 25.6097 81.938 25.5314 82.4655 25.3596C82.8776 25.2025 83.1626 25.0939 83.3122 25.0282L83.7497 26.9137C83.3658 27.0865 82.9695 27.2298 82.5643 27.3422C81.9346 27.5225 81.2823 27.6091 80.628 27.5993C79.9083 27.6212 79.1907 27.5089 78.5111 27.2679C77.9826 27.0673 77.5181 26.7245 77.1676 26.2766C76.8111 25.7954 76.5669 25.2387 76.4535 24.6482C76.3069 23.9111 76.2378 23.1603 76.2475 22.4085V11.044L78.5055 10.6526L78.5083 14.595Z",\n fill: "#231F20"\n }\n ),\n /* @__PURE__ */ c(\n "path",\n {\n d: "M85.1864 20.9857C85.1653 19.9805 85.3279 18.98 85.6662 18.0346C85.9508 17.2569 86.3865 16.5449 86.9477 15.9406C87.4657 15.3959 88.0933 14.9702 88.7879 14.6921C89.4647 14.4176 90.187 14.276 90.9161 14.275C92.6096 14.275 93.908 14.8102 94.8112 15.8806C95.7144 16.9509 96.166 18.5793 96.166 20.7658V21.1457C96.1676 21.2889 96.1601 21.432 96.1434 21.5742H87.5347C87.6307 22.896 88.007 23.9007 88.6637 24.5882C89.3204 25.2757 90.3554 25.6186 91.7685 25.6167C92.4396 25.6289 93.1096 25.5588 93.764 25.4081C94.1807 25.31 94.5878 25.1742 94.9805 25.0024L95.2967 26.9137C94.8357 27.1232 94.3528 27.2794 93.8572 27.3793C93.09 27.5515 92.3059 27.6339 91.5201 27.625C90.5493 27.6473 89.5836 27.4765 88.6779 27.1222C87.9238 26.8196 87.2481 26.3467 86.7021 25.7395C86.1765 25.132 85.7849 24.4182 85.5533 23.6454C85.2991 22.7827 85.1753 21.886 85.1864 20.9857ZM93.8261 19.7373C93.8786 18.8277 93.6083 17.929 93.064 17.2033C92.8058 16.8772 92.4751 16.6174 92.0989 16.4452C91.7227 16.2729 91.3117 16.193 90.8992 16.212C90.4253 16.2012 89.9557 16.3061 89.5303 16.5176C89.1467 16.7125 88.8052 16.9824 88.5254 17.3118C88.2472 17.6464 88.0302 18.0285 87.8847 18.4403C87.7334 18.8589 87.632 19.2943 87.5827 19.7373H93.8261Z",\n fill: "#231F20"\n }\n ),\n /* @__PURE__ */ c(\n "path",\n {\n d: "M103.694 14.3264C103.915 14.3275 104.137 14.3399 104.357 14.3636C104.608 14.3864 104.854 14.4207 105.096 14.4607C105.339 14.5007 105.559 14.5407 105.763 14.5835C105.913 14.6115 106.062 14.6478 106.209 14.6921L105.822 16.6776C105.532 16.5819 105.237 16.5037 104.938 16.4434C104.416 16.3444 103.886 16.2994 103.355 16.3091C102.936 16.3095 102.517 16.3545 102.107 16.4434C101.695 16.5348 101.427 16.5948 101.297 16.629V27.3308H99.0393V15.1349C99.6847 14.9059 100.345 14.7216 101.015 14.5835C101.896 14.4024 102.794 14.3162 103.694 14.3264Z",\n fill: "#231F20"\n }\n ),\n /* @__PURE__ */ c(\n "path",\n {\n d: "M110.504 14.595H115.272V16.5062H110.504V22.3828C110.495 22.9133 110.544 23.4432 110.651 23.9626C110.72 24.3184 110.869 24.6536 111.086 24.9425C111.276 25.1755 111.528 25.3496 111.811 25.4453C112.14 25.5481 112.483 25.5973 112.827 25.591C113.381 25.6097 113.934 25.5314 114.462 25.3596C114.874 25.2025 115.159 25.0939 115.308 25.0282L115.746 26.9137C115.362 27.0865 114.966 27.2298 114.56 27.3422C113.931 27.5225 113.278 27.6091 112.624 27.5993C111.904 27.6212 111.187 27.5089 110.507 27.2679C109.978 27.0687 109.513 26.7257 109.164 26.2766C108.807 25.7954 108.563 25.2387 108.45 24.6482C108.303 23.9111 108.234 23.1603 108.244 22.4085V11.044L110.502 10.6526L110.504 14.595Z",\n fill: "#231F20"\n }\n ),\n /* @__PURE__ */ c(\n "path",\n {\n d: "M122.76 14.3265C122.952 14.3265 123.175 14.3265 123.426 14.3636C123.677 14.4008 123.92 14.4208 124.163 14.4608C124.405 14.5008 124.625 14.5408 124.829 14.5836C124.979 14.6116 125.128 14.6478 125.275 14.6922L124.899 16.6777C124.61 16.582 124.315 16.5038 124.016 16.4434C123.494 16.3443 122.963 16.2993 122.432 16.3091C122.013 16.3095 121.595 16.3545 121.185 16.4434C120.776 16.5348 120.505 16.5948 120.375 16.6291V27.3308H118.117V15.135C118.762 14.9063 119.422 14.7221 120.092 14.5836C120.97 14.4033 121.864 14.3171 122.76 14.3265Z",\n fill: "#231F20"\n }\n ),\n /* @__PURE__ */ c(\n "path",\n {\n d: "M137.996 26.9623C137.48 27.0937 136.798 27.2327 135.949 27.3794C134.978 27.5352 133.995 27.6088 133.011 27.5993C132.176 27.6238 131.345 27.4781 130.567 27.1708C129.94 26.9129 129.39 26.4957 128.969 25.9595C128.553 25.4112 128.256 24.7805 128.097 24.1083C127.912 23.3349 127.823 22.5413 127.832 21.7457V14.6036H130.09V21.2657C130.09 22.8161 130.332 23.9264 130.815 24.5968C131.299 25.2672 132.113 25.6015 133.259 25.5996C133.502 25.5996 133.753 25.5996 134.01 25.5767C134.267 25.5539 134.51 25.5396 134.736 25.5139C134.961 25.4881 135.167 25.4653 135.354 25.4396C135.489 25.4283 135.623 25.3995 135.752 25.3539V14.595H138.01L137.996 26.9623Z",\n fill: "#231F20"\n }\n ),\n /* @__PURE__ */ c(\n "path",\n {\n d: "M144.795 25.6881C145.712 25.6881 146.395 25.5681 146.839 25.3224C147.05 25.2124 147.226 25.0426 147.344 24.8337C147.462 24.6248 147.518 24.3858 147.505 24.1454C147.512 23.8873 147.456 23.6313 147.342 23.4005C147.228 23.1696 147.059 22.9711 146.85 22.8227C146.177 22.3724 145.454 22.0033 144.696 21.7228C144.214 21.5257 143.748 21.3257 143.305 21.1229C142.891 20.9365 142.504 20.6932 142.156 20.4001C141.833 20.1219 141.57 19.7796 141.383 19.3945C141.178 18.9415 141.082 18.4464 141.1 17.9489C141.081 17.4353 141.183 16.9244 141.398 16.4585C141.612 15.9926 141.933 15.5849 142.334 15.2692C143.158 14.6064 144.279 14.275 145.698 14.275C146.054 14.2761 146.409 14.2971 146.762 14.3379C147.118 14.3779 147.448 14.4264 147.756 14.4836C148.063 14.5407 148.32 14.6036 148.566 14.6693C148.811 14.735 148.981 14.7892 149.111 14.8407L148.699 16.8005C148.337 16.6255 147.959 16.4895 147.57 16.3948C146.96 16.2444 146.334 16.1743 145.707 16.1862C145.135 16.1722 144.57 16.3028 144.061 16.5662C143.842 16.6731 143.659 16.8427 143.534 17.0539C143.409 17.2651 143.348 17.5087 143.358 17.7547C143.354 18.0085 143.408 18.26 143.516 18.4889C143.634 18.7128 143.799 18.9079 143.999 19.0602C144.251 19.2503 144.524 19.4104 144.812 19.5373C145.134 19.683 145.52 19.8373 145.972 20.003C146.569 20.2315 147.101 20.4553 147.57 20.6743C148.003 20.8719 148.406 21.1317 148.766 21.4457C149.095 21.7392 149.356 22.1032 149.528 22.5113C149.719 22.998 149.811 23.519 149.797 24.0426C149.797 25.2158 149.365 26.1052 148.501 26.7108C147.637 27.3165 146.408 27.6193 144.812 27.6193C143.932 27.6459 143.052 27.5498 142.198 27.3336C141.568 27.1432 141.14 27.0003 140.914 26.9051L141.326 24.9453C141.583 25.0424 141.995 25.191 142.56 25.3853C143.284 25.6062 144.039 25.7085 144.795 25.6881Z",\n fill: "#231F20"\n }\n ),\n /* @__PURE__ */ c(\n "path",\n {\n d: "M154.761 14.595H159.529V16.5062H154.761V22.3828C154.752 22.9133 154.801 23.4432 154.908 23.9626C154.977 24.3184 155.126 24.6536 155.343 24.9425C155.533 25.1755 155.785 25.3496 156.068 25.4453C156.397 25.5481 156.74 25.5973 157.084 25.591C157.638 25.6097 158.191 25.5314 158.719 25.3596L159.565 25.0282L160 26.9137C159.616 27.0865 159.22 27.2298 158.814 27.3422C158.185 27.5225 157.533 27.6091 156.878 27.5993C156.159 27.6212 155.441 27.5089 154.761 27.2679C154.233 27.0673 153.768 26.7245 153.418 26.2766C153.061 25.7954 152.817 25.2387 152.704 24.6482C152.557 23.9111 152.488 23.1603 152.498 22.4085V11.044L154.756 10.6526L154.761 14.595Z",\n fill: "#231F20"\n }\n ),\n /* @__PURE__ */ c(\n "path",\n {\n style: { mixBlendMode: "multiply" },\n d: "M0.787476 30.2048C0.908844 30.6676 1.04433 31.1275 1.19392 31.5789C1.31811 31.956 1.44794 32.3274 1.58907 32.6959C1.7302 33.0645 1.87132 33.4273 2.03785 33.7873C2.54255 34.9375 3.13618 36.0456 3.81321 37.1012C5.36278 36.5984 8.73851 35.3014 14.2565 33.7501C18.5524 32.5445 28.1518 30.1362 36.9496 28.2221C42.5579 27.0051 45.6062 26.2395 46.5461 25.9367C46.8361 25.8461 47.107 25.7018 47.3449 25.511C47.4146 25.4432 47.4568 25.3515 47.4634 25.2539C47.4832 24.8511 47.4945 24.4454 47.4945 24.0397C47.4957 22.151 47.2768 20.2687 46.8425 18.4318C42.7216 19.6831 31.6715 22.0028 22.4023 24.2626C12.5433 26.6766 4.01926 29.2877 0.787476 30.2048Z",\n fill: "url(#paint0_linear)"\n }\n ),\n /* @__PURE__ */ c(\n "path",\n {\n style: { mixBlendMode: "multiply" },\n d: "M1.11198 16.732V16.7548V16.7891C1.09222 16.8519 1.07247 16.9119 1.05553 16.9748V17.0205C1.02166 17.1272 0.990614 17.2329 0.962389 17.3376C0.931341 17.4433 0.900295 17.5519 0.87207 17.6576C11.3323 15.0864 18.6963 12.9866 25.0469 10.9754C28.767 9.79842 31.4964 8.7271 33.3395 7.78435L33.4665 7.7215L33.5032 7.7015L33.5907 7.65579L33.6358 7.63008L33.7121 7.59008L33.7318 7.5758L33.8024 7.53866C33.8174 7.52756 33.8335 7.51799 33.8504 7.51009L33.9181 7.47295L33.9661 7.44724L34.0338 7.40725L34.0762 7.38439L34.1495 7.34154L34.1862 7.32154L34.2822 7.2644L34.3866 7.20155L34.4177 7.18155L34.4854 7.14156L34.5249 7.11585L34.5842 7.07871L34.6209 7.05585L34.6774 7.01872L34.7169 6.99301L34.7705 6.95872L34.8072 6.93301L34.8636 6.89587L34.8975 6.87302L34.954 6.83302L34.9822 6.81302L35.064 6.75589C35.6681 6.31879 36.5543 5.52459 36.4922 4.58184C36.4909 4.57332 36.4909 4.56463 36.4922 4.55612C36.4471 4.09617 36.0322 3.43624 34.7733 2.73918L34.6943 2.69632L34.6011 2.64776L34.4741 2.58205L34.429 2.55919L34.1467 2.42207L34.0875 2.3935L33.9463 2.32493L33.8758 2.29065L33.7657 2.23923L33.6866 2.19923L33.6048 2.16209L33.5173 2.1221L33.4411 2.08781L33.3479 2.04496L33.2802 2.01639L33.1814 1.97069L33.1306 1.94783L32.7411 1.78213H32.7072L32.5859 1.73357L32.5435 1.71643L32.4222 1.66786L32.3826 1.65358L32.2556 1.60215H32.2331L31.629 1.37646L31.4738 1.29076H31.454L31.3073 1.23934C31.0448 1.15077 30.7823 1.06793 30.5198 0.987934L30.3674 0.942223C30.1444 0.876516 29.9186 0.813668 29.6928 0.756531C29.7067 0.912389 29.7067 1.06919 29.6928 1.22505C29.6104 1.77957 29.3352 2.2861 28.9166 2.65347C28.0219 3.51052 26.2493 4.399 24.0449 5.18463C21.691 6.02454 16.7995 7.65579 12.4726 8.75567C9.5626 9.49274 5.73245 10.4526 3.88934 10.8583L3.67765 11.1897L3.64378 11.2468L3.55911 11.384V11.404L3.54217 11.4325L3.51959 11.4668C3.49419 11.5125 3.46596 11.5582 3.43774 11.6039L3.41798 11.6382L3.38975 11.6839C3.36153 11.7296 3.33331 11.7782 3.3079 11.8268L3.11597 12.161C3.11597 12.1867 3.09057 12.2096 3.07928 12.2324L2.99743 12.3781L2.96356 12.4438C2.93533 12.4924 2.90993 12.541 2.88453 12.5895C2.85912 12.6381 2.86477 12.6267 2.85348 12.6467V12.6667C2.82525 12.7153 2.79985 12.7667 2.77162 12.8181L2.58816 13.1809C2.58816 13.2009 2.5684 13.2181 2.55993 13.2381L2.48373 13.3952L2.46115 13.438L2.44704 13.4637C2.42163 13.5152 2.39623 13.5666 2.37365 13.6209L2.33978 13.6894L2.21277 13.9751C2.17043 14.0665 2.12809 14.1608 2.08857 14.2608L2.07446 14.2922V14.3065L2.0039 14.4722V14.4922L1.98132 14.5436L1.91358 14.7093L1.88535 14.7722C1.84584 14.8693 1.80632 14.9664 1.76963 15.0579C1.73011 15.155 1.69342 15.2521 1.65673 15.3435V15.3693C1.63415 15.4292 1.61157 15.4892 1.59181 15.5464L1.56641 15.6092C1.54665 15.6692 1.52407 15.7264 1.50432 15.7863V15.8092V15.8435C1.46762 15.9463 1.43093 16.0492 1.39706 16.1492C1.36037 16.252 1.3265 16.3549 1.29263 16.4606L1.11198 16.732Z",\n fill: "url(#paint1_linear)"\n }\n ),\n /* @__PURE__ */ c(\n "path",\n {\n style: { mixBlendMode: "multiply" },\n d: "M0.908795 24.3796C1.55515 24.3796 3.22043 24.2968 5.06918 24.1197C8.28967 23.8054 14.7278 22.9598 22.072 21.997C27.7904 21.2485 40.2998 19.4116 46.8424 18.4431L46.8114 18.306C46.7916 18.2231 46.769 18.1403 46.7493 18.0546C46.7493 18.026 46.7323 17.9975 46.7267 17.9689L46.6844 17.7975L46.659 17.7089L46.5997 17.4889C46.5937 17.4722 46.589 17.455 46.5856 17.4375L46.5348 17.2604L46.5178 17.2061L46.4924 17.1175L46.4416 16.9461C46.4416 16.9147 46.4219 16.8861 46.4134 16.8547L46.3541 16.669V16.6376C46.3541 16.6176 46.34 16.5947 46.3316 16.5747C46.3231 16.5548 46.3061 16.4919 46.292 16.449C46.2779 16.4062 46.2723 16.3919 46.2638 16.3633L46.2328 16.2719C46.2158 16.2205 46.1989 16.1691 46.1791 16.1177C46.1594 16.0662 46.1594 16.0548 46.1481 16.0234L46.0719 15.812C46.0719 15.7863 46.0549 15.7605 46.0437 15.7348C46.0324 15.7091 46.0295 15.6948 46.0239 15.6748L45.9731 15.5434L45.9392 15.4463L45.9138 15.3834L45.8687 15.2892C45.8545 15.2577 45.8433 15.2235 45.832 15.192C45.8207 15.1606 45.8066 15.132 45.7953 15.1035C45.784 15.0749 45.7642 15.0263 45.7501 14.9863C45.736 14.9464 45.7247 14.9264 45.7134 14.8978L45.688 14.8378L45.6429 14.7264L45.6005 14.6235C45.5808 14.5778 45.5582 14.5293 45.5384 14.4807L45.4961 14.3807L45.4594 14.295L45.4086 14.1836C45.3945 14.1493 45.3775 14.115 45.3634 14.0836L45.3211 13.9865C45.3105 13.967 45.3011 13.947 45.2929 13.9265L45.2449 13.8236C45.2251 13.7808 45.2054 13.7408 45.1884 13.6979C45.1715 13.6636 45.1546 13.6322 45.1405 13.5979L45.0473 13.4065L44.9937 13.298L44.9457 13.2008L44.9316 13.1723V13.1551C44.9118 13.1208 44.8949 13.0837 44.878 13.0494C44.8703 13.0377 44.8637 13.0252 44.8582 13.0123L44.8102 12.9209L44.7594 12.818L44.6578 12.6266L44.5985 12.518L44.5336 12.4038V12.3866L44.4743 12.2809C44.4661 12.2695 44.4594 12.257 44.4546 12.2438C44.4376 12.2152 44.4207 12.1866 44.4066 12.1581L44.3473 12.0552L44.2937 11.9638L44.2316 11.8553L44.1639 11.7438C42.4901 11.9867 40.4579 12.2781 37.9543 12.6266C32.4673 13.3951 26.3058 14.415 20.0003 15.2406C10.3106 16.509 3.97123 17.4461 0.855167 17.7003C0.855167 17.7518 0.826942 17.8003 0.815652 17.8518V17.8803L0.798717 17.9403L0.764844 18.0746C0.764844 18.1117 0.745089 18.1489 0.736621 18.186L0.722508 18.2374V18.2689V18.2946L0.705574 18.3688C0.264981 20.2146 0.0413927 22.1065 0.0394596 24.0054C0.00276686 24.2368 0.358404 24.3768 0.908795 24.3796Z",\n fill: "url(#paint2_linear)"\n }\n ),\n /* @__PURE__ */ c(\n "path",\n {\n style: { mixBlendMode: "multiply" },\n d: "M41.635 39.8209C40.0487 41.315 34.3585 44.0233 28.722 45.1518C24.3381 46.015 19.8827 46.4522 15.4166 46.4574C15.5165 46.5654 15.6432 46.6444 15.7836 46.6859C16.1674 46.823 16.5541 46.9516 16.9464 47.0687C17.113 47.1201 17.2823 47.1687 17.4488 47.2144H17.4714L17.6972 47.2744H17.7311L17.9738 47.3373H18.0049L18.2081 47.3858L18.273 47.4001L18.4875 47.4515H18.5411L18.7303 47.4944L18.8262 47.5144L18.9674 47.543L19.069 47.563L19.2637 47.6029L19.3879 47.6258L19.4895 47.6458L19.6222 47.6687H19.6786L19.9609 47.7172H20.0286L20.1867 47.7401H20.2149L20.5621 47.7886H20.5762L20.7596 47.8115L21.3242 47.8743L21.708 47.9115C22.3666 47.9667 23.0318 47.9943 23.7035 47.9943C27.0962 48.0098 30.4526 47.2882 33.546 45.8782C36.6394 44.4681 39.3979 42.4025 41.635 39.8209Z",\n fill: "url(#paint3_linear)"\n }\n ),\n /* @__PURE__ */ c(\n "path",\n {\n style: { mixBlendMode: "multiply" },\n d: "M43.2635 32.1902C42.651 32.1902 39.1229 32.2731 33.4327 32.8273C25.9756 33.5501 15.1174 35.1356 10.7255 35.8927C7.99614 36.3641 5.45305 36.9155 3.9176 37.264C3.98534 37.3697 4.05591 37.4754 4.12647 37.5782L4.17445 37.6497L4.26478 37.7811L4.31558 37.8553L4.40872 37.9868L4.43977 38.0325L4.63735 38.3039L4.67686 38.361L4.77565 38.4924L4.82363 38.5581L4.92524 38.6924C4.92524 38.7095 4.95065 38.7238 4.96194 38.7381L5.19056 39.0238L5.20467 39.0381L5.31475 39.1781L5.35709 39.2323C5.39378 39.2781 5.43047 39.3238 5.46999 39.3666L5.50386 39.4095C5.62805 39.5609 5.75506 39.6952 5.88208 39.858L5.91312 39.8951L6.03732 40.0351L6.06554 40.0665C6.20102 40.2208 6.33932 40.3722 6.48045 40.5208L6.49456 40.5379L6.63004 40.6836L6.65262 40.7065C6.84738 40.9093 7.04495 41.1121 7.24817 41.3093L7.26229 41.3236C7.46833 41.5235 7.6772 41.7207 7.88889 41.9121C8.1034 42.1092 8.32073 42.3006 8.54371 42.4834C8.66225 42.5863 8.92192 42.6034 9.73481 42.4491C11.4283 42.1206 17.8298 40.9979 24.9115 40.0151C29.8129 39.371 34.7457 39.001 39.6874 38.9067C40.9321 38.9067 42.1119 39.1923 41.6377 39.8009C41.6913 39.738 41.7421 39.6752 41.7958 39.6152V39.6009L41.9482 39.418L42.0978 39.2381L42.1147 39.2152L42.2643 39.0295C42.4478 38.7953 42.6284 38.5581 42.8034 38.3182C42.9784 38.0753 43.1506 37.8325 43.3171 37.584L43.4526 37.3811V37.3611L43.5824 37.1611V37.144L43.7123 36.9383C44.0792 36.3527 44.4235 35.7499 44.7397 35.1328C44.7792 35.0585 44.8159 34.9842 44.8526 34.9071L44.9626 34.6814C45.2675 34.0491 45.545 33.4054 45.7953 32.7502C45.9957 32.3988 45.7106 32.1902 43.2635 32.1902Z",\n fill: "url(#paint4_linear)"\n }\n ),\n /* @__PURE__ */ c(\n "path",\n {\n style: { mixBlendMode: "multiply" },\n d: "M19.8056 2.76768C20.0003 1.33927 16.2492 1.57067 16.0827 1.27356C14.1379 1.94509 12.2877 2.8699 10.5788 4.02469C10.5054 4.07612 10.4743 4.18182 10.8159 4.25324C11.9525 4.45361 13.1029 4.56346 14.2565 4.58178C16.6218 4.60178 19.6193 4.07612 19.8056 2.76768Z",\n fill: "url(#paint5_linear)"\n }\n ),\n /* @__PURE__ */ c(\n "path",\n {\n style: { mixBlendMode: "multiply" },\n d: "M44.607 33.5473C44.0143 33.7873 40.7966 34.7786 37.2826 36.167C33.6133 37.6154 31.0364 39.3724 31.0053 41.295C30.9771 42.8206 33.8674 43.9033 34.5278 44.2147C35.1883 44.5261 35.4706 44.7347 35.5468 44.8918C40.2747 42.1438 43.9288 37.8382 45.8997 32.6931C45.7332 33.0816 45.3042 33.2588 44.607 33.5473Z",\n fill: "url(#paint6_linear)"\n }\n ),\n /* @__PURE__ */ c(\n "path",\n {\n style: { mixBlendMode: "multiply" },\n d: "M5.22448 21.0858C9.39616 19.2459 13.7711 17.1919 16.6303 15.8263C21.1068 13.6923 25.0131 11.0925 24.1636 8.44424C23.4071 6.0845 20.2967 6.36733 14.09 7.49292C10.099 8.2157 4.82086 9.54699 4.10958 10.5097L4.08136 10.5497L3.99386 10.684C1.4466 14.5317 0.059042 19.0457 0 23.6769C0 23.7797 0 23.8855 0 23.9883C0.00564503 23.5741 1.52134 22.717 5.22448 21.0858Z",\n fill: "url(#paint7_linear)"\n }\n ),\n /* @__PURE__ */ c(\n "path",\n {\n style: { mixBlendMode: "multiply" },\n d: "M39.5858 11.401C34.7198 12.1238 26.9946 13.5722 27.7482 18.1917C28.3296 21.7485 35.3492 22.7855 38.2846 23.3598C40.6132 23.814 45.1716 24.4425 47.1219 24.9367C47.3816 25.0024 47.4635 25.1281 47.4578 25.271C47.4578 25.0682 47.4747 24.8625 47.4804 24.6568V24.6196C47.4804 24.4292 47.4804 24.2387 47.4804 24.0483C47.49 19.7635 46.3632 15.5546 44.2176 11.861L44.1357 11.7267C43.893 11.3068 42.1995 11.0039 39.5858 11.401Z",\n fill: "url(#paint8_linear)"\n }\n ),\n /* @__PURE__ */ c(\n "path",\n {\n style: { mixBlendMode: "multiply" },\n d: "M27.4349 28.6135C26.972 26.8766 24.4571 25.6167 20.8669 25.7053C16.6715 25.7872 12.4952 26.3012 8.40265 27.2394C5.94165 27.773 3.53145 28.5234 1.19959 29.482C0.827014 29.6363 0.702822 29.842 0.770562 30.1362L0.821365 30.3248L0.889107 30.5733C0.889107 30.599 0.903222 30.6247 0.908867 30.6504L0.968137 30.8504L0.985072 30.9076C1.00765 30.9876 1.03306 31.0704 1.05846 31.1504L1.07822 31.2218L1.13749 31.4104C1.14629 31.4337 1.15383 31.4576 1.16007 31.4818C1.1883 31.5618 1.2137 31.6418 1.2391 31.7218C1.24695 31.7413 1.25355 31.7614 1.25886 31.7818C1.28144 31.8446 1.30402 31.9075 1.32377 31.9703C1.34353 32.0332 1.34353 32.0246 1.352 32.0503L1.42821 32.2674C1.43603 32.285 1.44263 32.3032 1.44796 32.3217L1.52417 32.5274L1.55804 32.6131C1.5778 32.6731 1.60038 32.7302 1.62296 32.7874L1.65119 32.8588L1.73868 33.0816C1.73868 33.1102 1.76409 33.1388 1.77538 33.1702L1.83747 33.3244C1.85159 33.353 1.86288 33.3844 1.87699 33.413C1.90521 33.4844 1.93626 33.5559 1.96731 33.6273C1.97877 33.6575 1.99197 33.6871 2.00683 33.7158L2.06892 33.8615C2.08303 33.8958 2.09997 33.9301 2.11408 33.9615L2.18747 34.1244C2.20722 34.1701 2.22698 34.2129 2.24956 34.2558C2.27214 34.2986 2.2919 34.3501 2.31448 34.3958L2.36528 34.5043C2.38504 34.5472 2.40762 34.5872 2.42738 34.63L2.49794 34.7786L2.57415 34.9271C2.59109 34.9643 2.61084 35.0043 2.6306 35.0414L2.68705 35.1471L2.74632 35.2671L2.83947 35.4414L2.91285 35.5728C2.92696 35.6042 2.9439 35.6328 2.96083 35.6642L3.0314 35.7928L3.07374 35.867L3.20922 36.1041L3.24873 36.1756L3.32776 36.3127C3.34101 36.332 3.35325 36.3521 3.36446 36.3727L3.5338 36.6584L3.54792 36.6812L3.64106 36.8298L3.66929 36.8784C3.76808 37.0326 3.86686 37.1869 3.96847 37.3412L3.98823 37.3726C4.09549 37.5354 4.20556 37.6954 4.31564 37.8554C5.19606 39.1168 6.19315 40.2906 7.2934 41.3607L7.41194 41.475L7.44017 41.5007C7.58694 41.6436 7.72242 41.7864 7.88613 41.9178C8.03572 42.0549 8.18814 42.2035 8.34338 42.3235L8.37724 42.3549L8.54095 42.4949C8.56489 42.5141 8.59153 42.5295 8.61998 42.5406C8.55789 42.5149 8.66232 42.4063 8.98126 42.2835C11.1369 41.4641 13.2458 40.5237 15.2981 39.4666C18.4395 37.8925 19.656 37.2326 23.0261 34.7443C26.2325 32.3988 28.053 30.9304 27.4349 28.6135Z",\n fill: "url(#paint9_linear)"\n }\n ),\n /* @__PURE__ */ c(\n "path",\n {\n style: { mixBlendMode: "multiply" },\n d: "M25.5664 45.3403C25.2418 44.3461 22.6959 43.9833 19.608 44.6118C18.3633 44.8491 17.1558 45.2546 16.0178 45.8174C15.2726 46.2116 15.171 46.4573 15.8146 46.6944L15.9331 46.7373L16.0347 46.7716L16.5287 46.9373C16.6924 46.9925 16.8589 47.0439 17.0282 47.0915L17.2004 47.143H17.2343C18.7765 47.5897 20.3596 47.8768 21.9592 48C22.4221 47.5115 26.0744 46.903 25.5664 45.3403Z",\n fill: "url(#paint10_linear)"\n }\n ),\n /* @__PURE__ */ c(\n "path",\n {\n style: { mixBlendMode: "multiply" },\n d: "M24.4684 2.56487C31.2425 2.4706 34.1214 3.20766 35.4254 3.67047C36.1988 3.95615 36.3992 4.21041 36.4556 4.38468C36.3343 3.93901 35.8911 3.35336 34.7621 2.73628C30.9878 0.740159 26.7532 -0.193348 22.5006 0.0332999C18.248 0.259947 14.1336 1.63843 10.5873 4.02471C15.1646 3.13763 19.8087 2.64923 24.4684 2.56487Z",\n fill: "url(#paint11_linear)"\n }\n ),\n /* @__PURE__ */ c(\n "path",\n {\n style: { mixBlendMode: "multiply" },\n d: "M25.5664 45.3403C25.2418 44.3461 22.6959 43.9833 19.608 44.6118C18.3633 44.8491 17.1558 45.2546 16.0178 45.8174C15.2726 46.2116 15.171 46.4573 15.8146 46.6944L15.9331 46.7373L16.0347 46.7716L16.5287 46.9373C16.6924 46.9925 16.8589 47.0439 17.0282 47.0915L17.2004 47.143H17.2343C18.7765 47.5897 20.3596 47.8768 21.9592 48C22.4221 47.5115 26.0744 46.903 25.5664 45.3403Z",\n fill: "url(#paint12_linear)"\n }\n ),\n /* @__PURE__ */ c(\n "path",\n {\n d: "M24.4684 2.56487C31.2425 2.4706 34.1214 3.20766 35.4254 3.67047C36.1988 3.95615 36.3992 4.21041 36.4556 4.38468C36.3343 3.93901 35.8911 3.35336 34.7621 2.73628C30.9878 0.740159 26.7532 -0.193348 22.5006 0.0332999C18.248 0.259947 14.1336 1.63843 10.5873 4.02471C15.1646 3.13763 19.8087 2.64923 24.4684 2.56487Z",\n fill: "url(#paint13_linear)"\n }\n ),\n /* @__PURE__ */ c(\n "path",\n {\n style: { mixBlendMode: "multiply" },\n d: "M5.22446 21.0858C9.39614 19.246 13.771 17.1919 16.6303 15.8263L17.0988 15.6006C9.02357 16.6748 3.62974 17.4547 0.835448 17.6804C0.827544 17.7058 0.820951 17.7315 0.815693 17.7576C0.807793 17.7819 0.801196 17.8067 0.795933 17.8318C0.781821 17.8804 0.770529 17.929 0.759239 17.9775V18.0175C0.759239 18.069 0.733837 18.1204 0.719724 18.1718V18.2147V18.2318L0.677388 18.4061V18.4518C0.677388 18.5061 0.651984 18.5603 0.640694 18.6146V18.6517C0.609646 18.786 0.581422 18.9203 0.553197 19.0546V19.086L0.519328 19.2545V19.3031C0.519328 19.3545 0.49957 19.4088 0.48828 19.4602V19.5059L0.454411 19.7002L0.420538 19.9088V19.9402C0.420538 19.9973 0.400783 20.0516 0.392315 20.1087V20.163L0.36691 20.3144C0.365668 20.3325 0.365668 20.3506 0.36691 20.3687C0.36691 20.4287 0.347154 20.4858 0.338687 20.5458V20.5687C0.338687 20.6373 0.318928 20.7087 0.31046 20.7772V20.8087C0.31046 20.8629 0.293524 20.9201 0.287879 20.9772V21.0343L0.270945 21.1858C0.26956 21.2048 0.26956 21.2239 0.270945 21.2429C0.270945 21.3 0.270947 21.3543 0.25119 21.4115V21.4457C0.25119 21.5172 0.237077 21.5857 0.228609 21.6543V21.68C0.228609 21.74 0.228608 21.8 0.214496 21.8571C0.213101 21.8771 0.213101 21.8971 0.214496 21.9171C0.214496 21.9657 0.214495 22.0171 0.200382 22.0657C0.18627 22.1142 0.200382 22.1085 0.200382 22.1285C0.200382 22.1485 0.200382 22.2342 0.200382 22.2856C0.200382 22.3371 0.200382 22.3171 0.200382 22.3342C0.200382 22.4028 0.200382 22.4713 0.200382 22.5428V22.5599V22.7484C0.198979 22.7684 0.198979 22.7885 0.200382 22.8084V22.957C0.201789 22.9779 0.201789 22.9989 0.200382 23.0199C0.200382 23.0741 0.200382 23.1256 0.200382 23.177V23.2284V23.4398C0.200382 23.5055 0.200382 23.5741 0.200382 23.6426V23.6883C0.200382 23.7826 0.200382 23.8798 0.200382 23.974C0.00562847 23.5741 1.52132 22.717 5.22446 21.0858Z",\n fill: "url(#paint14_linear)"\n }\n ),\n /* @__PURE__ */ c(\n "path",\n {\n style: { mixBlendMode: "multiply" },\n d: "M43.2635 32.1902C42.651 32.1902 39.1229 32.2731 33.4327 32.8273C25.9756 33.5501 15.1174 35.1356 10.7255 35.8927C7.99614 36.3641 5.45305 36.9155 3.9176 37.264C3.98534 37.3697 4.05591 37.4754 4.12647 37.5782L4.17445 37.6497L4.26478 37.7811L4.31558 37.8553L4.40872 37.9868L4.43977 38.0325L4.63735 38.3039L4.67686 38.361L4.77565 38.4924L4.82363 38.5581L4.92524 38.6924C4.92524 38.7095 4.95065 38.7238 4.96194 38.7381L5.19056 39.0238L5.20467 39.0381L5.31475 39.1781L5.35709 39.2323C5.39378 39.2781 5.43047 39.3238 5.46999 39.3666L5.50386 39.4095C5.62805 39.5609 5.75506 39.6952 5.88208 39.858L5.91312 39.8951L6.03732 40.0351L6.06554 40.0665C6.20102 40.2208 6.33932 40.3722 6.48045 40.5208L6.49456 40.5379L6.63004 40.6836L6.65262 40.7065C6.84738 40.9093 7.04495 41.1121 7.24817 41.3093L7.26229 41.3236C7.46833 41.5235 7.6772 41.7207 7.88889 41.9121C8.1034 42.1092 8.32073 42.3006 8.54371 42.4834C8.66225 42.5863 8.92192 42.6034 9.73481 42.4491C11.4283 42.1206 17.8298 40.9979 24.9115 40.0151C29.8129 39.371 34.7457 39.001 39.6874 38.9067C40.9321 38.9067 42.1119 39.1923 41.6377 39.8009C41.6913 39.738 41.7421 39.6752 41.7958 39.6152V39.6009L41.9482 39.418L42.0978 39.2381L42.1147 39.2152L42.2643 39.0295C42.4478 38.7953 42.6284 38.5581 42.8034 38.3182C42.9784 38.0753 43.1506 37.8325 43.3171 37.584L43.4526 37.3811V37.3611L43.5824 37.1611V37.144L43.7123 36.9383C44.0792 36.3527 44.4235 35.7499 44.7397 35.1328C44.7792 35.0585 44.8159 34.9842 44.8526 34.9071L44.9626 34.6814C45.2675 34.0491 45.545 33.4054 45.7953 32.7502C45.9957 32.3988 45.7106 32.1902 43.2635 32.1902Z",\n fill: "url(#paint15_linear)"\n }\n ),\n /* @__PURE__ */ c(\n "path",\n {\n d: "M60.3369 34.1186C59.9772 34.0956 59.617 34.155 59.2832 34.2925C58.9494 34.4301 58.6506 34.6421 58.4091 34.9128C57.9669 35.4423 57.7449 36.1765 57.743 37.1155C57.7386 37.5287 57.7928 37.9405 57.9039 38.3382C57.9961 38.6833 58.1565 39.0059 58.3752 39.2867C58.5841 39.55 58.8508 39.7603 59.1542 39.9009C59.4965 40.0564 59.8687 40.1325 60.2437 40.1237C60.468 40.1249 60.6922 40.1144 60.9155 40.0923C61.0669 40.079 61.217 40.0532 61.3643 40.0151V37.044H62.8489V41.0179C62.5107 41.132 62.1644 41.2199 61.813 41.2807C61.2542 41.3819 60.6872 41.4297 60.1195 41.4236C59.5685 41.4308 59.021 41.334 58.5051 41.1379C58.0333 40.9571 57.6078 40.671 57.2603 40.3008C56.905 39.9125 56.6339 39.4532 56.4644 38.9524C56.2666 38.3611 56.1711 37.7396 56.1821 37.1155C56.1707 36.4886 56.277 35.8652 56.4954 35.2785C56.6816 34.7724 56.97 34.3112 57.3422 33.9244C57.7004 33.5491 58.1347 33.2567 58.6151 33.0673C59.1113 32.8745 59.6389 32.7776 60.1703 32.7816C60.5078 32.7784 60.8449 32.8042 61.178 32.8588C61.435 32.9013 61.6894 32.9585 61.9401 33.0302C62.1204 33.0827 62.296 33.1505 62.465 33.233L62.7473 33.3901L62.2985 34.6186C62.0235 34.4579 61.7282 34.3358 61.4207 34.2558C61.0672 34.1606 60.7026 34.1145 60.3369 34.1186Z",\n fill: "#231F20"\n }\n ),\n /* @__PURE__ */ c(\n "path",\n {\n d: "M68.5561 32.9016C69.7359 32.9016 70.6363 33.1216 71.2629 33.5587C71.8895 33.9958 72.1999 34.6643 72.1999 35.5585C72.1999 36.6803 71.6533 37.4421 70.5601 37.8439C70.7087 38.0344 70.8781 38.2572 71.0681 38.5124C71.2572 38.7753 71.4492 39.0581 71.6326 39.3695C71.8161 39.6809 72.0193 39.9923 72.1971 40.3123C72.3749 40.6322 72.5386 40.9522 72.6798 41.2636H71.0173C70.8687 40.976 70.7078 40.6903 70.5347 40.4065C70.3616 40.1228 70.1866 39.8371 70.0097 39.5495C69.8319 39.2638 69.6569 39.0152 69.4847 38.7753C69.3125 38.5353 69.1516 38.3153 69.002 38.1239C68.892 38.1239 68.796 38.1239 68.7198 38.1239H67.7742V41.2579H66.3037V33.1044C66.6844 33.0243 67.0701 32.9708 67.4581 32.9445C67.8674 32.9159 68.2343 32.9016 68.5561 32.9016ZM68.6605 34.2043C68.3463 34.2043 68.0556 34.2158 67.7884 34.2386V36.9126H68.4488C68.7688 36.9153 69.0885 36.8953 69.4057 36.8526C69.646 36.8231 69.8792 36.7506 70.0943 36.6384C70.2706 36.5433 70.4157 36.3983 70.5121 36.2213C70.6138 36.0139 70.6623 35.784 70.6532 35.5528C70.6612 35.3289 70.6126 35.1067 70.5121 34.9071C70.4185 34.7318 70.2775 34.5871 70.1056 34.49C69.9101 34.3802 69.6971 34.3058 69.4762 34.27C69.2069 34.2228 68.9338 34.2008 68.6605 34.2043Z",\n fill: "#231F20"\n }\n ),\n /* @__PURE__ */ c(\n "path",\n {\n d: "M82.9142 37.1155C82.9258 37.7544 82.8195 38.39 82.601 38.9895C82.4147 39.4955 82.1263 39.9567 81.7542 40.3437C81.3986 40.7045 80.9701 40.9832 80.4982 41.1607C79.5064 41.5265 78.419 41.5265 77.4273 41.1607C76.9533 40.984 76.5228 40.7052 76.1656 40.3437C75.7947 39.9558 75.5065 39.4949 75.3189 38.9895C75.0967 38.3908 74.9885 37.7549 74.9999 37.1155C74.988 36.4778 75.0962 35.8437 75.3189 35.2471C75.5122 34.74 75.8073 34.2789 76.1854 33.8929C76.5456 33.531 76.9775 33.2506 77.4527 33.0702C78.4347 32.7045 79.5133 32.7045 80.4953 33.0702C80.9682 33.2487 81.3968 33.5295 81.7514 33.8929C82.121 34.2819 82.409 34.7425 82.5981 35.2471C82.8198 35.8439 82.9271 36.478 82.9142 37.1155ZM76.5354 37.1155C76.5299 37.5327 76.585 37.9486 76.6991 38.3496C76.7955 38.6925 76.9576 39.0128 77.1761 39.2924C77.3816 39.5493 77.6422 39.7554 77.9382 39.8952C78.2559 40.0423 78.6021 40.1155 78.9514 40.1094C79.297 40.1145 79.6394 40.0413 79.9534 39.8952C80.2494 39.7554 80.51 39.5493 80.7155 39.2924C80.934 39.0128 81.0961 38.6925 81.1925 38.3496C81.4108 37.5417 81.4108 36.6892 81.1925 35.8813C81.0961 35.5384 80.934 35.2181 80.7155 34.9386C80.51 34.6817 80.2494 34.4755 79.9534 34.3358C79.6401 34.1873 79.2974 34.113 78.9514 34.1186C78.6018 34.1121 78.2552 34.1864 77.9382 34.3358C77.6414 34.4767 77.3806 34.6849 77.1761 34.9443C76.9598 35.2253 76.7979 35.5451 76.6991 35.887C76.5848 36.2861 76.5297 36.7 76.5354 37.1155Z",\n fill: "#231F20"\n }\n ),\n /* @__PURE__ */ c(\n "path",\n {\n d: "M89.1322 41.435C88.6415 41.4474 88.1529 41.365 87.6927 41.1921C87.3128 41.0431 86.9719 40.8075 86.6964 40.5036C86.4309 40.204 86.2317 39.8505 86.1121 39.4666C85.9829 39.041 85.9192 38.5977 85.923 38.1525V33.0016H87.4218V38.0239C87.4157 38.3493 87.4576 38.6738 87.546 38.9867C87.614 39.2269 87.7346 39.4485 87.8988 39.6352C88.0477 39.8008 88.2335 39.9281 88.4407 40.0065C88.666 40.0884 88.9042 40.128 89.1435 40.1237C89.3838 40.1278 89.6228 40.0881 89.8491 40.0065C90.0591 39.9286 90.2477 39.8013 90.3995 39.6352C90.5635 39.4438 90.6823 39.2171 90.7467 38.9724C90.8351 38.6595 90.8769 38.335 90.8709 38.0096V33.0016H92.3668V38.1439C92.3717 38.5897 92.306 39.0333 92.1721 39.458C92.0515 39.8421 91.8514 40.1956 91.585 40.4951C91.3053 40.8005 90.9594 41.0362 90.5745 41.1836C90.1134 41.3575 89.6243 41.4428 89.1322 41.435Z",\n fill: "#231F20"\n }\n ),\n /* @__PURE__ */ c(\n "path",\n {\n d: "M98.2377 32.9016C99.4231 32.9016 100.333 33.1206 100.967 33.5587C101.601 33.9967 101.917 34.6814 101.915 35.6128C101.927 36.0422 101.84 36.4686 101.661 36.8583C101.495 37.205 101.241 37.5007 100.925 37.7154C100.564 37.9491 100.164 38.1128 99.7449 38.1982C99.2212 38.3071 98.6875 38.3589 98.153 38.3525H97.4107V41.2664H95.926V33.1044C96.3045 33.0221 96.6885 32.9686 97.0748 32.9445C97.4953 32.9159 97.882 32.9016 98.2377 32.9016ZM98.3421 34.2043C97.9658 34.2043 97.6553 34.2158 97.4107 34.2386V37.0555H98.1304C98.6965 37.085 99.2617 36.9813 99.7816 36.7526C100.158 36.5507 100.346 36.1698 100.346 35.6099C100.354 35.3738 100.301 35.1396 100.194 34.93C100.095 34.7499 99.9482 34.6015 99.7703 34.5014C99.5699 34.3911 99.3522 34.3166 99.1268 34.2815C98.868 34.2323 98.6054 34.2065 98.3421 34.2043Z",\n fill: "#231F20"\n }\n ),\n /* @__PURE__ */ e1("defs", { children: [\n /* @__PURE__ */ e1(\n "linearGradient",\n {\n id: "paint0_linear",\n x1: "0.787476",\n y1: "27.7736",\n x2: "47.4888",\n y2: "27.7736",\n gradientUnits: "userSpaceOnUse",\n children: [\n /* @__PURE__ */ c("stop", { offset: "0.03", stopColor: "#E9F7FE", stopOpacity: "0.4" }),\n /* @__PURE__ */ c("stop", { offset: "0.31", stopColor: "#5EA1D7" }),\n /* @__PURE__ */ c("stop", { offset: "0.55", stopColor: "#4DA3DA" }),\n /* @__PURE__ */ c("stop", { offset: "0.89", stopColor: "#645FAA" }),\n /* @__PURE__ */ c("stop", { offset: "1", stopColor: "#414099" })\n ]\n }\n ),\n /* @__PURE__ */ e1(\n "linearGradient",\n {\n id: "paint1_linear",\n x1: "6.19251",\n y1: "22.3057",\n x2: "29.4169",\n y2: "-0.639732",\n gradientUnits: "userSpaceOnUse",\n children: [\n /* @__PURE__ */ c("stop", { stopColor: "#FFF795", stopOpacity: "0.3" }),\n /* @__PURE__ */ c("stop", { offset: "0.35", stopColor: "#F3C206" }),\n /* @__PURE__ */ c("stop", { offset: "0.65", stopColor: "#FFC20E" }),\n /* @__PURE__ */ c("stop", { offset: "0.95", stopColor: "#F99B1C" }),\n /* @__PURE__ */ c("stop", { offset: "1", stopColor: "#F6891F" })\n ]\n }\n ),\n /* @__PURE__ */ e1(\n "linearGradient",\n {\n id: "paint2_linear",\n x1: "0.694283",\n y1: "18.0517",\n x2: "46.309",\n y2: "18.0517",\n gradientUnits: "userSpaceOnUse",\n children: [\n /* @__PURE__ */ c("stop", { stopColor: "#912A73" }),\n /* @__PURE__ */ c("stop", { offset: "0.17", stopColor: "#C6168D" }),\n /* @__PURE__ */ c("stop", { offset: "0.51", stopColor: "#F175AD" }),\n /* @__PURE__ */ c("stop", { offset: "0.76", stopColor: "#C593C3" }),\n /* @__PURE__ */ c("stop", { offset: "1", stopColor: "white", stopOpacity: "0.5" })\n ]\n }\n ),\n /* @__PURE__ */ e1(\n "linearGradient",\n {\n id: "paint3_linear",\n x1: "20.006",\n y1: "43.9433",\n x2: "44.7256",\n y2: "43.9433",\n gradientUnits: "userSpaceOnUse",\n children: [\n /* @__PURE__ */ c("stop", { stopColor: "#72BF44" }),\n /* @__PURE__ */ c("stop", { offset: "0.19", stopColor: "#91C83D" }),\n /* @__PURE__ */ c("stop", { offset: "0.38", stopColor: "#ACD037" }),\n /* @__PURE__ */ c("stop", { offset: "0.47", stopColor: "#99CA3B" }),\n /* @__PURE__ */ c("stop", { offset: "0.6", stopColor: "#7DC242" }),\n /* @__PURE__ */ c("stop", { offset: "0.72", stopColor: "#4FB848" }),\n /* @__PURE__ */ c("stop", { offset: "0.84", stopColor: "#24AE4D" }),\n /* @__PURE__ */ c("stop", { offset: "0.94", stopColor: "#0AA850" }),\n /* @__PURE__ */ c("stop", { offset: "1", stopColor: "#00A651" })\n ]\n }\n ),\n /* @__PURE__ */ e1(\n "linearGradient",\n {\n id: "paint4_linear",\n x1: "7.15503",\n y1: "37.3868",\n x2: "39.0269",\n y2: "37.3868",\n gradientUnits: "userSpaceOnUse",\n children: [\n /* @__PURE__ */ c("stop", { stopColor: "#0077AC" }),\n /* @__PURE__ */ c("stop", { offset: "0.22", stopColor: "#0083BB" }),\n /* @__PURE__ */ c("stop", { offset: "0.44", stopColor: "#0099DA" }),\n /* @__PURE__ */ c("stop", { offset: "0.65", stopColor: "#00B2DD" }),\n /* @__PURE__ */ c("stop", { offset: "0.67", stopColor: "#00B1DA" }),\n /* @__PURE__ */ c("stop", { offset: "0.83", stopColor: "#00ACC6" }),\n /* @__PURE__ */ c("stop", { offset: "0.94", stopColor: "#00AAA9" }),\n /* @__PURE__ */ c("stop", { offset: "1", stopColor: "#00A99D" })\n ]\n }\n ),\n /* @__PURE__ */ e1(\n "linearGradient",\n {\n id: "paint5_linear",\n x1: "13.1501",\n y1: "2.31345",\n x2: "19.1179",\n y2: "4.74801",\n gradientUnits: "userSpaceOnUse",\n children: [\n /* @__PURE__ */ c("stop", { stopColor: "#F58220" }),\n /* @__PURE__ */ c("stop", { offset: "1", stopColor: "#FCAF17" })\n ]\n }\n ),\n /* @__PURE__ */ e1(\n "linearGradient",\n {\n id: "paint6_linear",\n x1: "31.0053",\n y1: "38.7925",\n x2: "45.8997",\n y2: "38.7925",\n gradientUnits: "userSpaceOnUse",\n children: [\n /* @__PURE__ */ c("stop", { stopColor: "#008A4B" }),\n /* @__PURE__ */ c("stop", { offset: "0.12", stopColor: "#179449" }),\n /* @__PURE__ */ c("stop", { offset: "0.56", stopColor: "#6CB842" }),\n /* @__PURE__ */ c("stop", { offset: "0.76", stopColor: "#8DC63F" }),\n /* @__PURE__ */ c("stop", { offset: "1", stopColor: "#32A443" })\n ]\n }\n ),\n /* @__PURE__ */ e1(\n "linearGradient",\n {\n id: "paint7_linear",\n x1: "-0.00282252",\n y1: "15.3178",\n x2: "24.2821",\n y2: "15.3178",\n gradientUnits: "userSpaceOnUse",\n children: [\n /* @__PURE__ */ c("stop", { stopColor: "#FCAF17" }),\n /* @__PURE__ */ c("stop", { offset: "1", stopColor: "#F04E23" })\n ]\n }\n ),\n /* @__PURE__ */ e1(\n "linearGradient",\n {\n id: "paint8_linear",\n x1: "27.6974",\n y1: "18.2432",\n x2: "48.615",\n y2: "18.2432",\n gradientUnits: "userSpaceOnUse",\n children: [\n /* @__PURE__ */ c("stop", { offset: "0.19", stopColor: "#812990" }),\n /* @__PURE__ */ c("stop", { offset: "0.31", stopColor: "#882E92" }),\n /* @__PURE__ */ c("stop", { offset: "0.5", stopColor: "#9C3B97" }),\n /* @__PURE__ */ c("stop", { offset: "0.71", stopColor: "#BC509F" }),\n /* @__PURE__ */ c("stop", { offset: "0.95", stopColor: "#E86DAA" }),\n /* @__PURE__ */ c("stop", { offset: "1", stopColor: "#F173AC" })\n ]\n }\n ),\n /* @__PURE__ */ e1(\n "linearGradient",\n {\n id: "paint9_linear",\n x1: "0.753627",\n y1: "34.1272",\n x2: "27.5534",\n y2: "34.1272",\n gradientUnits: "userSpaceOnUse",\n children: [\n /* @__PURE__ */ c("stop", { stopColor: "#0089CF", stopOpacity: "0.9" }),\n /* @__PURE__ */ c("stop", { offset: "1", stopColor: "#0054A6" })\n ]\n }\n ),\n /* @__PURE__ */ e1(\n "linearGradient",\n {\n id: "paint10_linear",\n x1: "25.7555",\n y1: "47.1315",\n x2: "17.9423",\n y2: "45.1347",\n gradientUnits: "userSpaceOnUse",\n children: [\n /* @__PURE__ */ c("stop", { stopColor: "#9ACA3C" }),\n /* @__PURE__ */ c("stop", { offset: "0.34", stopColor: "#7AC340" }),\n /* @__PURE__ */ c("stop", { offset: "1", stopColor: "#33B44A" })\n ]\n }\n ),\n /* @__PURE__ */ e1(\n "linearGradient",\n {\n id: "paint11_linear",\n x1: "14.7702",\n y1: "1.55069",\n x2: "30.8265",\n y2: "3.77982",\n gradientUnits: "userSpaceOnUse",\n children: [\n /* @__PURE__ */ c("stop", { stopColor: "#FDB515" }),\n /* @__PURE__ */ c("stop", { offset: "0.36", stopColor: "#FFD100" }),\n /* @__PURE__ */ c("stop", { offset: "0.58", stopColor: "#FFC907" }),\n /* @__PURE__ */ c("stop", { offset: "0.7", stopColor: "#FFC20E" }),\n /* @__PURE__ */ c("stop", { offset: "0.87", stopColor: "#FBA617" }),\n /* @__PURE__ */ c("stop", { offset: "1", stopColor: "#F78E1E" })\n ]\n }\n ),\n /* @__PURE__ */ e1(\n "linearGradient",\n {\n id: "paint12_linear",\n x1: "18.9419",\n y1: "47.72",\n x2: "23.0412",\n y2: "43.67",\n gradientUnits: "userSpaceOnUse",\n children: [\n /* @__PURE__ */ c("stop", { stopColor: "#BAD532" }),\n /* @__PURE__ */ c("stop", { offset: "0.03", stopColor: "#B1D334", stopOpacity: "0.93" }),\n /* @__PURE__ */ c("stop", { offset: "0.11", stopColor: "#94CC39", stopOpacity: "0.72" }),\n /* @__PURE__ */ c("stop", { offset: "0.21", stopColor: "#7AC53D", stopOpacity: "0.52" }),\n /* @__PURE__ */ c("stop", { offset: "0.31", stopColor: "#64C041", stopOpacity: "0.36" }),\n /* @__PURE__ */ c("stop", { offset: "0.41", stopColor: "#52BC44", stopOpacity: "0.23" }),\n /* @__PURE__ */ c("stop", { offset: "0.53", stopColor: "#44B847", stopOpacity: "0.13" }),\n /* @__PURE__ */ c("stop", { offset: "0.65", stopColor: "#3AB649", stopOpacity: "0.06" }),\n /* @__PURE__ */ c("stop", { offset: "0.79", stopColor: "#35B44A", stopOpacity: "0.01" }),\n /* @__PURE__ */ c("stop", { offset: "1", stopColor: "#33B44A", stopOpacity: "0" })\n ]\n }\n ),\n /* @__PURE__ */ e1(\n "linearGradient",\n {\n id: "paint13_linear",\n x1: "14.8973",\n y1: "5.88737",\n x2: "30.1067",\n y2: "1.86255",\n gradientUnits: "userSpaceOnUse",\n children: [\n /* @__PURE__ */ c("stop", { stopColor: "#F15F22", stopOpacity: "0.8" }),\n /* @__PURE__ */ c("stop", { offset: "0.21", stopColor: "#F6861A", stopOpacity: "0.48" }),\n /* @__PURE__ */ c("stop", { offset: "0.39", stopColor: "#FAA514", stopOpacity: "0.22" }),\n /* @__PURE__ */ c("stop", { offset: "0.52", stopColor: "#FDB910", stopOpacity: "0.06" }),\n /* @__PURE__ */ c("stop", { offset: "0.59", stopColor: "#FEC00F", stopOpacity: "0" }),\n /* @__PURE__ */ c("stop", { offset: "0.65", stopColor: "#FDBC10", stopOpacity: "0.04" }),\n /* @__PURE__ */ c("stop", { offset: "0.75", stopColor: "#FCB313", stopOpacity: "0.15" }),\n /* @__PURE__ */ c("stop", { offset: "0.88", stopColor: "#FAA418", stopOpacity: "0.32" }),\n /* @__PURE__ */ c("stop", { offset: "1", stopColor: "#F7941D", stopOpacity: "0.5" })\n ]\n }\n ),\n /* @__PURE__ */ e1(\n "linearGradient",\n {\n id: "paint14_linear",\n x1: "0.694323",\n y1: "19.7945",\n x2: "46.309",\n y2: "19.7945",\n gradientUnits: "userSpaceOnUse",\n children: [\n /* @__PURE__ */ c("stop", { stopColor: "#F4EAE5", stopOpacity: "0.06" }),\n /* @__PURE__ */ c("stop", { offset: "0.19", stopColor: "#DAAFAC", stopOpacity: "0.33" }),\n /* @__PURE__ */ c("stop", { offset: "0.68", stopColor: "#981B1E" })\n ]\n }\n ),\n /* @__PURE__ */ e1(\n "linearGradient",\n {\n id: "paint15_linear",\n x1: "3.9176",\n y1: "37.3868",\n x2: "45.9223",\n y2: "37.3868",\n gradientUnits: "userSpaceOnUse",\n children: [\n /* @__PURE__ */ c("stop", { offset: "0.85", stopColor: "white", stopOpacity: "0" }),\n /* @__PURE__ */ c("stop", { offset: "0.91", stopColor: "#D6D7D8", stopOpacity: "0.23" }),\n /* @__PURE__ */ c("stop", { offset: "0.97", stopColor: "#B4B6B8", stopOpacity: "0.43" }),\n /* @__PURE__ */ c("stop", { offset: "1", stopColor: "#A7A9AC", stopOpacity: "0.5" })\n ]\n }\n )\n ] })\n ]\n }\n), DR = () => /* @__PURE__ */ e1(\n "svg",\n {\n width: "160",\n height: "160",\n viewBox: "0 0 160 160",\n fill: "none",\n xmlns: "http://www.w3.org/2000/svg",\n children: [\n /* @__PURE__ */ c(\n "path",\n {\n opacity: "0.61",\n d: "M154.651 108.987C148.002 126.208 135.581 140.553 119.769 149.642C119.517 149.122 118.563 148.422 116.338 147.386C114.113 146.35 104.38 142.741 104.466 137.657C104.576 131.25 113.271 125.389 125.619 120.561C137.459 115.931 148.298 112.634 150.297 111.831C152.684 110.872 154.09 110.283 154.651 108.987ZM17.614 70.2925C31.6694 64.1641 46.4044 57.3119 56.0417 52.7654C71.1188 45.6525 84.2837 36.9845 81.4187 28.1552C78.8714 20.2918 68.3926 21.2369 47.4818 24.984C34.0312 27.3943 16.2465 31.8316 13.8483 35.0444L13.7548 35.1819C13.6561 35.3305 13.5567 35.4791 13.458 35.6277C5.16222 48.0443 0.239672 62.9202 0.00816225 78.9278C0.00371014 79.2748 0 79.6218 0 79.968C0.0304228 78.5437 5.13254 75.7351 17.614 70.2925ZM133.38 38.0128C116.981 40.4269 90.9589 45.2513 93.4988 60.6511C95.454 72.5074 119.11 75.9654 128.996 77.8742C136.844 79.3907 152.202 81.486 158.773 83.1303C159.651 83.3532 159.926 83.7723 159.902 84.2449C159.902 84.2397 159.902 84.2352 159.902 84.23C159.936 83.5479 159.961 82.8636 159.976 82.177V82.0544C159.992 81.408 160 80.7604 160 80.1115C160 65.292 155.981 51.4139 148.977 39.507L148.7 39.0612C147.857 37.6963 142.19 36.7155 133.38 38.0128ZM92.4407 95.3857C90.8787 89.5901 82.4049 85.3988 70.3107 85.6952C57.548 86.0088 44.2926 87.214 28.3169 90.8109C14.0412 94.0252 5.38854 97.7299 4.05291 98.282C2.80112 98.8021 2.37669 99.4797 2.60597 100.463V100.47C2.66187 100.682 2.71777 100.893 2.77367 101.103C2.84787 101.38 2.92207 101.656 3.00295 101.932C3.02669 102.016 3.05118 102.101 3.07715 102.186C3.14096 102.409 3.20478 102.632 3.27008 102.849C3.28863 102.913 3.30718 102.977 3.32647 103.041C3.4076 103.312 3.48971 103.583 3.57282 103.852C3.59731 103.932 3.62254 104.011 3.64702 104.09C3.71232 104.299 3.7791 104.508 3.84588 104.716L3.92379 104.959C4.01036 105.225 4.09842 105.49 4.18795 105.755L4.25696 105.958C4.33116 106.167 4.40017 106.376 4.47289 106.584L4.56787 106.856C4.65295 107.096 4.73927 107.336 4.82683 107.576L4.89361 107.758C4.97721 107.987 5.0623 108.216 5.14887 108.444L5.25794 108.73C5.33165 108.924 5.40585 109.117 5.48055 109.309C5.51097 109.387 5.54065 109.465 5.57182 109.543C5.67075 109.791 5.76969 110.038 5.86863 110.286C5.90795 110.385 5.94876 110.482 5.98883 110.583C6.06007 110.756 6.13155 110.929 6.20328 111.103L6.32794 111.401C6.42984 111.641 6.53249 111.88 6.63587 112.118C6.67891 112.217 6.72269 112.315 6.76573 112.416C6.83696 112.578 6.90869 112.739 6.98091 112.9L7.12932 113.234C7.21143 113.415 7.29454 113.596 7.37863 113.778C7.44542 113.926 7.51368 114.067 7.5812 114.211C7.65541 114.368 7.72961 114.525 7.80381 114.681L7.97744 115.042C8.04497 115.181 8.11323 115.321 8.1815 115.46C8.26238 115.624 8.34326 115.787 8.42562 115.951C8.50799 116.114 8.59035 116.281 8.6742 116.445C8.73999 116.574 8.80628 116.703 8.87306 116.831C8.93341 116.949 8.99426 117.066 9.0556 117.183C9.12386 117.315 9.19287 117.447 9.26262 117.578C9.36551 117.773 9.4694 117.967 9.57427 118.161C9.65441 118.31 9.73504 118.459 9.81617 118.607C9.87058 118.706 9.92524 118.805 9.98015 118.904C10.0593 119.048 10.1389 119.191 10.2191 119.333L10.3615 119.586C10.51 119.85 10.6613 120.114 10.8157 120.377C10.8609 120.451 10.9055 120.531 10.9507 120.608C11.0403 120.761 11.1303 120.914 11.2208 121.066L11.3425 121.269C11.531 121.584 11.7212 121.897 11.9131 122.208L11.9643 122.29C12.0662 122.454 12.1684 122.618 12.2708 122.781L12.3724 122.942C12.7004 123.46 13.0341 123.974 13.3734 124.484L13.4476 124.592C13.8072 125.132 14.174 125.667 14.548 126.197C14.5517 126.204 14.5562 126.21 14.5606 126.216C17.5238 130.425 20.8833 134.34 24.5927 137.907C24.7238 138.034 24.8559 138.161 24.989 138.287L25.081 138.374C25.5757 138.843 26.0778 139.306 26.5873 139.762L26.6103 139.782C27.1193 140.24 27.6345 140.691 28.1559 141.135L28.2702 141.233L28.2769 141.24C28.4599 141.395 28.6439 141.549 28.8289 141.702C28.9101 141.767 29.0017 141.817 29.0998 141.851C28.8868 141.769 29.237 141.405 30.3159 140.997C35.0648 139.214 41.0477 136.843 51.5992 131.611C62.1841 126.362 66.2741 124.163 77.63 115.867C88.3937 108.001 94.5258 103.113 92.4407 95.3857ZM86.1454 151.141C85.0524 147.829 76.471 146.621 66.0679 148.717C60.102 149.918 55.8547 151.738 53.973 152.729C51.4686 154.045 51.1718 154.86 53.294 155.649H53.2985C53.4328 155.696 53.5686 155.743 53.7036 155.79L54.0464 155.909C54.5906 156.095 55.1426 156.278 55.7026 156.457L55.7427 156.47C56.2987 156.646 56.8604 156.818 57.4278 156.986C57.6212 157.043 57.8149 157.099 58.0088 157.155L58.1208 157.187C63.3175 158.662 68.6503 159.604 74.0371 160C75.5575 158.379 87.8632 156.35 86.1454 151.141ZM82.4442 8.56477C105.322 8.25121 114.971 10.7017 119.363 12.2501C121.973 13.1715 122.648 14.049 122.839 14.6323C122.423 13.1418 120.884 11.1884 117.134 9.13392L117.12 9.12649C106.027 3.29826 93.3994 0 80.003 0C63.5962 0 48.344 4.94627 35.6495 13.4293C43.7658 11.7627 62.5529 8.83671 82.4442 8.56477Z",\n fill: "url(#paint0_linear)"\n }\n ),\n /* @__PURE__ */ c(\n "path",\n {\n d: "M75.1401 80.4387C106.226 72.9516 143.283 65.2717 157.103 61.1208C158.545 67.1868 159.272 73.4008 159.268 79.6359C159.268 80.9846 159.235 82.3251 159.168 83.6575C159.145 83.9797 159.004 84.2822 158.772 84.5062C158.13 85.1162 156.83 85.6813 156.086 85.9243C152.934 86.9583 142.709 89.4858 123.901 93.5259C94.4026 99.8623 62.2036 107.841 47.7988 111.843C29.3148 116.975 17.9944 121.279 12.7947 122.943C10.5298 119.456 8.54249 115.796 6.85119 111.997V111.991C6.32088 110.801 5.81962 109.594 5.34742 108.372V108.362C4.87472 107.141 4.43156 105.906 4.01795 104.656C3.52161 103.156 3.06935 101.635 2.66115 100.096C13.4889 97.0933 42.0725 88.403 75.1401 80.4387ZM3.7395 55.4551L3.72768 55.4935L3.7166 55.5267C3.70405 55.5673 3.69149 55.6072 3.67819 55.6478C3.61468 55.8497 3.5519 56.0521 3.48985 56.255C3.48616 56.2653 3.48321 56.2756 3.48025 56.286C3.464 56.3377 3.44849 56.3894 3.43298 56.4411C3.32662 56.7907 3.22273 57.1408 3.1213 57.4914L3.11169 57.5253C3.00878 57.8789 2.90883 58.2339 2.81183 58.5904C37.895 50.0796 62.5847 43.1087 83.882 36.4503C96.3643 32.5469 105.517 29.0016 111.692 25.8796C111.836 25.8072 111.977 25.7348 112.118 25.6624L112.243 25.5974C112.341 25.5472 112.438 25.497 112.534 25.4497L112.689 25.3685L112.941 25.2355L113.103 25.1484L113.339 25.0221L113.501 24.9334L113.731 24.8079L113.887 24.7215L114.116 24.5929L114.264 24.5117L114.506 24.3736L114.629 24.3034L114.952 24.1151L114.983 24.0966L115.329 23.892L115.435 23.8278C115.509 23.7812 115.589 23.7347 115.664 23.6882L115.792 23.6099L115.992 23.485L116.122 23.4031L116.311 23.2827C116.354 23.2553 116.397 23.228 116.439 23.1999C116.501 23.1608 116.562 23.1209 116.622 23.081L116.746 23.0005L116.927 22.8787L117.041 22.8048C117.107 22.7605 117.171 22.7169 117.235 22.6726L117.327 22.6091C117.421 22.5441 117.513 22.4793 117.603 22.4148C119.625 20.9627 122.601 18.3282 122.387 15.2017C122.387 15.1744 122.383 15.1471 122.381 15.1197C122.233 13.5894 120.837 11.4068 116.619 9.09429L116.354 8.95543L116.038 8.79147L115.616 8.5758L115.469 8.50194C115.164 8.34831 114.859 8.19665 114.553 8.04696L114.357 7.95095L113.885 7.7242L113.642 7.60898L113.277 7.43689L113.01 7.31354L112.732 7.18503L112.437 7.05208L112.185 6.93907L111.875 6.80022L111.647 6.69977L111.315 6.55205L111.138 6.47819C110.707 6.29207 110.274 6.10963 109.838 5.93089L109.722 5.88289L109.318 5.71892L109.174 5.66131L108.767 5.50029L108.636 5.44859L108.208 5.28241L108.134 5.25434C107.462 4.99633 106.786 4.74767 106.106 4.50836L106.08 4.4995C105.918 4.44189 105.754 4.38502 105.591 4.32888L105.53 4.3082L105.039 4.14054L105.007 4.1302C104.132 3.83477 103.25 3.55558 102.362 3.29264L102.34 3.28599L101.822 3.13458L101.783 3.1235C101.035 2.90685 100.282 2.70127 99.524 2.50677C99.5742 3.11611 99.5882 3.66193 99.5417 4.05782C99.3246 5.89987 98.3873 7.45535 96.9404 8.82618C93.9446 11.6639 87.996 14.6145 80.6042 17.2159C72.7123 20.0026 56.3133 25.4046 41.7771 29.0474C32.0276 31.4914 19.1761 34.671 12.9978 36.0153C12.7585 36.3801 12.5226 36.747 12.2902 37.1158C12.2806 37.1306 12.271 37.1453 12.2621 37.1601L12.2518 37.1756C12.2126 37.2377 12.1735 37.299 12.1351 37.361C12.0406 37.5117 11.9465 37.6628 11.8529 37.8145C11.8374 37.8389 11.8227 37.8632 11.8079 37.8884C11.7931 37.9135 11.7724 37.9452 11.7555 37.974C11.7385 38.0028 11.7074 38.0479 11.6816 38.0893C11.5893 38.237 11.4969 38.3913 11.4054 38.5428C11.3817 38.5826 11.3581 38.6225 11.3315 38.6624L11.2451 38.8101C11.1496 38.9682 11.0553 39.1262 10.9622 39.2843C10.9548 39.2961 10.9482 39.3079 10.9415 39.3198L10.9371 39.3279C10.7209 39.6952 10.5077 40.0645 10.2975 40.4358L10.166 40.6677C10.0769 40.8272 9.988 40.987 9.89937 41.147L9.89198 41.1596L9.86909 41.2017L9.75091 41.4151L9.48945 41.896C9.45547 41.9595 9.42224 42.023 9.38826 42.0858L9.35355 42.15C9.26344 42.3184 9.17333 42.4868 9.0847 42.656L9.07805 42.6693L9.07288 42.6789C8.86509 43.0728 8.6605 43.4711 8.45911 43.8739L8.36014 44.0696C8.27446 44.241 8.19026 44.4124 8.10606 44.5867V44.5926C8.08317 44.6384 8.06101 44.6842 8.03885 44.7299L8.02999 44.7477L7.98567 44.8385C7.90246 45.0089 7.81974 45.18 7.7375 45.3518L7.62672 45.5867C7.48244 45.8895 7.34063 46.1936 7.20129 46.4989V46.5026C7.06095 46.8074 6.92308 47.1134 6.78767 47.4206C6.77216 47.4554 6.75665 47.4893 6.74188 47.5233L6.72194 47.5684C6.64168 47.7525 6.56142 47.9369 6.48116 48.1216L6.45457 48.1836C6.43093 48.2397 6.40656 48.2951 6.38071 48.3513C6.30242 48.534 6.22486 48.7171 6.14805 48.9008C6.11851 48.971 6.08896 49.0411 6.06016 49.112C5.92623 49.4331 5.79451 49.7556 5.66501 50.0796V50.0877V50.0929C5.536 50.4169 5.40847 50.7423 5.28242 51.0693L5.24918 51.155C5.17532 51.3522 5.10146 51.5509 5.02761 51.7458L4.95375 51.9519C4.87989 52.1454 4.81046 52.3397 4.74029 52.5347L4.71149 52.6159C4.69745 52.6528 4.68416 52.6898 4.67086 52.7274C4.54974 53.0652 4.43082 53.4037 4.31412 53.743C4.31256 53.7468 4.31133 53.7508 4.31043 53.7548L4.306 53.7674C4.18832 54.1096 4.07334 54.4523 3.96108 54.7955L3.95665 54.8088V54.8154C3.95508 54.819 3.95385 54.8227 3.95295 54.8265C3.87663 55.0348 3.80548 55.2443 3.7395 55.4551ZM3.06147 80.7977C5.22555 80.8095 10.8115 80.5237 17.012 79.9306C27.8117 78.8965 49.3993 76.0899 74.0314 72.9043C93.2068 70.4249 135.164 64.3367 157.104 61.1252C157.068 60.9721 157.032 60.8212 156.996 60.6725C156.928 60.3948 156.859 60.1181 156.788 59.8423C156.763 59.7441 156.738 59.6466 156.714 59.5469L156.71 59.5306C156.66 59.3425 156.611 59.1542 156.562 58.9656C156.535 58.8659 156.508 58.7662 156.481 58.6702C156.415 58.4279 156.348 58.1864 156.28 57.9456L156.232 57.7735C156.176 57.5778 156.119 57.3835 156.062 57.1893L156.009 57.0069C155.98 56.9079 155.95 56.8096 155.92 56.7114C155.863 56.5223 155.806 56.3333 155.748 56.1449C155.717 56.0459 155.687 55.947 155.656 55.8495C155.591 55.6419 155.525 55.4351 155.458 55.2283L155.427 55.1301C155.404 55.0562 155.381 54.9875 155.358 54.9159C155.313 54.7785 155.268 54.6411 155.221 54.5038C155.19 54.4085 155.159 54.3132 155.127 54.2179L155.023 53.9129C155.023 53.9055 155.017 53.8981 155.015 53.8907L154.836 53.3737C154.8 53.2725 154.762 53.1706 154.729 53.0694C154.645 52.8336 154.561 52.5987 154.476 52.3648C154.445 52.2799 154.413 52.1949 154.382 52.1092C154.358 52.0435 154.333 51.9785 154.308 51.9128C154.254 51.765 154.2 51.6225 154.145 51.4777C154.105 51.3706 154.064 51.2643 154.023 51.1579C153.996 51.0841 153.968 51.0102 153.94 50.9423L153.827 50.6505C153.785 50.5449 153.744 50.4385 153.702 50.3329C153.66 50.2273 153.622 50.1335 153.582 50.0375C153.533 49.9104 153.482 49.7829 153.429 49.6549C153.388 49.5552 153.347 49.4555 153.306 49.3595L153.226 49.1682C153.174 49.0419 153.122 48.9156 153.069 48.7893C153.022 48.6785 152.975 48.5677 152.928 48.4569C152.86 48.2974 152.792 48.1383 152.723 47.9798C152.673 47.8704 152.626 47.7614 152.58 47.6526C152.539 47.5573 152.496 47.462 152.453 47.3667C152.398 47.2426 152.343 47.1178 152.288 46.9974C152.237 46.8859 152.186 46.7759 152.135 46.6636C152.084 46.5513 152.039 46.4516 151.988 46.346C151.957 46.2795 151.926 46.213 151.896 46.1473C151.843 46.0328 151.789 45.9191 151.736 45.8046C151.672 45.6682 151.607 45.5316 151.542 45.3947L151.535 45.3814L151.522 45.3541C151.469 45.2425 151.416 45.1325 151.362 45.021C151.259 44.8073 151.155 44.5945 151.05 44.3828C150.991 44.2632 150.931 44.1442 150.871 44.0246L150.709 43.7033L150.66 43.6073C150.652 43.5888 150.642 43.5704 150.633 43.5526L150.454 43.2033L150.39 43.0807C150.337 42.9792 150.285 42.878 150.232 42.7771L150.055 42.4396C149.944 42.2283 149.831 42.0176 149.717 41.8073L149.519 41.4462C149.446 41.3176 149.378 41.1884 149.306 41.0599L149.279 41.0104L149.082 40.6596C149.06 40.6189 149.037 40.5791 149.014 40.5384L148.852 40.2541C148.788 40.1403 148.724 40.0273 148.658 39.9143C148.592 39.8013 148.539 39.709 148.479 39.6063C148.41 39.4882 148.341 39.3692 148.272 39.2518L148.05 38.8751C142.437 39.6876 135.617 40.6477 127.235 41.8081C108.834 44.3518 88.1637 47.7301 67.0163 50.4651C34.5248 54.6426 13.2563 57.7558 2.80887 58.5948C2.76357 58.7613 2.71901 58.9272 2.67518 59.0926C2.66632 59.1259 2.65746 59.1584 2.64933 59.1909L2.59616 59.391C2.5945 59.3963 2.59326 59.4018 2.59246 59.4073C2.55356 59.555 2.51466 59.7027 2.47576 59.8504C2.44474 59.9716 2.4152 60.0927 2.38418 60.2138C2.37015 60.2714 2.35611 60.3283 2.34134 60.3852C2.33248 60.4214 2.32361 60.459 2.31401 60.4937C2.30441 60.5285 2.29998 60.5506 2.29333 60.5787C2.27265 60.6614 2.25271 60.7449 2.23277 60.8276C0.755293 66.9405 0.00583292 73.2066 0 79.4955C0.0214192 80.3191 1.20686 80.7836 3.06073 80.794L3.06147 80.7977ZM139.672 131.955C134.354 136.909 115.275 145.885 96.3724 149.618C78.5058 153.148 62.4252 153.936 51.7525 153.949C51.9364 154.212 52.3434 154.459 52.9845 154.702C54.2682 155.159 55.5666 155.582 56.8798 155.974L56.9138 155.984C57.4761 156.151 58.0404 156.312 58.6066 156.467L58.6805 156.487C58.9306 156.555 59.1813 156.622 59.4324 156.688L59.5461 156.718C59.8165 156.788 60.0873 156.857 60.3586 156.924L60.4686 156.951C60.6942 157.007 60.9199 157.061 61.1459 157.115L61.3675 157.168C61.6039 157.224 61.8407 157.278 62.078 157.331L62.2649 157.373C62.4761 157.42 62.6874 157.466 62.8994 157.512L63.217 157.579L63.6963 157.677L64.0309 157.745C64.2525 157.789 64.4689 157.831 64.6882 157.873L65.0989 157.947L65.4431 158.01L65.8862 158.089L66.0753 158.121C66.3904 158.175 66.7066 158.227 67.0237 158.278L67.2452 158.313L67.78 158.394L67.8767 158.409C68.2633 158.466 68.6505 158.52 69.0385 158.572L69.0858 158.578C69.2897 158.605 69.4935 158.631 69.6974 158.657L69.7513 158.663C70.3791 158.74 71.0091 158.811 71.6413 158.874H71.6509C72.0793 158.917 72.5092 158.957 72.9405 158.993C75.146 159.176 77.376 159.268 79.6307 159.27C103.586 159.27 125.07 148.691 139.669 131.952L139.672 131.955ZM145.098 106.676C143.043 106.676 131.213 106.953 112.127 108.783C87.1237 111.18 50.7044 116.433 35.9776 118.944C26.8309 120.504 18.3001 122.328 13.1492 123.486C13.3801 123.836 13.614 124.184 13.8508 124.529L14.0104 124.763C14.1089 124.911 14.21 125.056 14.3139 125.199C14.3701 125.28 14.4269 125.361 14.4831 125.44C14.5872 125.588 14.6906 125.736 14.7955 125.884L14.9048 126.031C15.121 126.333 15.3396 126.634 15.5607 126.932C15.6065 126.994 15.6508 127.055 15.6966 127.116C15.8059 127.263 15.9182 127.411 16.0275 127.559L16.1914 127.775C16.3037 127.923 16.4167 128.071 16.5305 128.218L16.6509 128.373C16.9059 128.702 17.1629 129.029 17.4219 129.354L17.4618 129.404C17.5852 129.558 17.71 129.711 17.8311 129.864L17.9751 130.04C18.0992 130.188 18.2233 130.343 18.3481 130.493L18.4611 130.629C18.8792 131.13 19.3031 131.625 19.733 132.115L19.8408 132.238C19.9782 132.394 20.1163 132.549 20.2552 132.705C20.2869 132.741 20.3187 132.778 20.3512 132.812C20.8072 133.32 21.2693 133.822 21.7375 134.318L21.7841 134.367C21.9367 134.528 22.0901 134.689 22.2442 134.849L22.3181 134.927C22.971 135.604 23.6357 136.268 24.3123 136.921L24.3632 136.97C25.0526 137.633 25.752 138.284 26.4616 138.922L26.486 138.944C27.2078 139.591 27.941 140.225 28.6855 140.845C29.0836 141.18 29.9522 141.24 32.6783 140.723C38.3987 139.641 59.8231 135.923 83.5778 132.667C105.927 129.604 129.927 128.955 133.126 128.987C137.305 129.03 141.26 129.96 139.667 131.951C139.846 131.747 140.024 131.541 140.2 131.334L140.239 131.288C140.242 131.284 140.246 131.28 140.249 131.276C140.417 131.079 140.586 130.88 140.753 130.679L140.788 130.637C140.798 130.625 140.808 130.613 140.819 130.6C140.984 130.403 141.149 130.204 141.313 130.001L141.373 129.927C141.54 129.722 141.706 129.516 141.871 129.309L141.903 129.27C142.52 128.495 143.124 127.709 143.714 126.912L143.742 126.874C144.333 126.076 144.907 125.267 145.465 124.447L145.469 124.44L145.484 124.418C145.637 124.194 145.788 123.97 145.938 123.745C145.952 123.723 145.966 123.702 145.981 123.68C146.128 123.46 146.274 123.238 146.418 123.016L146.425 123.004C146.438 122.985 146.45 122.967 146.462 122.948C146.609 122.722 146.755 122.496 146.898 122.268C146.907 122.256 146.915 122.242 146.923 122.23C148.154 120.291 149.301 118.297 150.363 116.247L150.377 116.221C150.504 115.975 150.63 115.729 150.756 115.483L150.768 115.458L150.779 115.438C150.904 115.189 151.027 114.94 151.148 114.69L151.152 114.679L151.162 114.661C152.183 112.577 153.115 110.444 153.958 108.262C154.265 107.365 153.305 106.672 145.097 106.672L145.098 106.676ZM66.4254 9.18366C67.0805 4.43672 54.4986 5.22111 53.9432 4.23508C47.4207 6.45853 41.2157 9.5224 35.485 13.3493C35.2376 13.5126 35.1378 13.8708 36.2819 14.1042C38.7732 14.6138 44.0438 15.1633 47.784 15.1943C55.752 15.263 65.8279 13.517 66.4254 9.18366Z",\n fill: "url(#paint1_linear)"\n }\n ),\n /* @__PURE__ */ c(\n "path",\n {\n style: { mixBlendMode: "multiply" },\n d: "M154.675 108.338C148.058 125.457 135.694 139.716 119.954 148.751C119.704 148.234 118.755 147.538 116.54 146.508C114.325 145.479 104.637 141.891 104.722 136.838C104.832 130.468 113.487 124.643 125.777 119.843C137.563 115.241 148.352 111.963 150.342 111.165C152.718 110.212 154.117 109.626 154.675 108.338ZM18.2713 69.8739C32.2618 63.782 46.9287 56.9707 56.5216 52.4512C71.5291 45.3807 84.6332 36.7642 81.7815 27.9875C79.2459 20.171 68.8155 21.1105 48.0012 24.8352C34.6127 27.2312 16.9101 31.6421 14.523 34.8358L14.4299 34.9724C14.3317 35.1201 14.2327 35.2678 14.1345 35.4156C5.87698 47.7582 0.977152 62.5456 0.746711 78.4578C0.742279 78.8027 0.738586 79.1477 0.738586 79.4918C0.768869 78.076 5.84744 75.2841 18.2713 69.8739ZM133.503 37.7864C117.18 40.1861 91.2776 44.9818 93.8058 60.2899C95.752 72.0756 119.298 75.513 129.139 77.4105C136.951 78.918 152.238 81.0008 158.779 82.6353C159.652 82.8569 159.926 83.2734 159.903 83.7432C159.903 83.738 159.903 83.7336 159.903 83.7284C159.936 83.0504 159.961 82.3701 159.976 81.6877V81.5658C159.992 80.9232 160 80.2794 160 79.6344C160 64.9031 156 51.1077 149.027 39.2717L148.752 38.8286C147.913 37.4718 142.272 36.4969 133.503 37.7864ZM92.7526 94.8176C91.1978 89.0566 82.7631 84.8902 70.7247 85.1849C58.0209 85.4966 44.8267 86.6946 28.9248 90.2701C14.715 93.4653 6.10225 97.1479 4.77278 97.6967C3.52678 98.2137 3.1043 98.8873 3.33253 99.8652V99.8718C3.38817 100.083 3.44381 100.292 3.49945 100.501C3.57331 100.776 3.64717 101.051 3.72767 101.325C3.75131 101.409 3.77568 101.493 3.80153 101.577C3.86505 101.799 3.92857 102.02 3.99357 102.237C4.01203 102.3 4.0305 102.364 4.0497 102.427C4.13045 102.697 4.21219 102.966 4.29491 103.234C4.31929 103.313 4.3444 103.391 4.36877 103.47C4.43377 103.678 4.50024 103.885 4.56672 104.092L4.64427 104.334C4.73044 104.598 4.81808 104.862 4.90721 105.125L4.9759 105.327C5.04976 105.535 5.11844 105.743 5.19083 105.95L5.28537 106.219C5.37006 106.459 5.45598 106.697 5.54314 106.935L5.60961 107.117C5.69283 107.344 5.77752 107.571 5.86369 107.798L5.97226 108.082C6.04563 108.275 6.11948 108.467 6.19384 108.658C6.22412 108.736 6.25366 108.813 6.28468 108.891C6.38316 109.137 6.48164 109.383 6.58012 109.629C6.61927 109.728 6.65989 109.824 6.69977 109.925C6.77068 110.096 6.84183 110.269 6.91323 110.442L7.03731 110.737C7.13874 110.976 7.24092 111.214 7.34383 111.451C7.38667 111.549 7.43024 111.647 7.47308 111.746C7.54399 111.907 7.61538 112.068 7.68727 112.228L7.83499 112.559C7.91673 112.74 7.99945 112.92 8.08316 113.1C8.14963 113.248 8.21758 113.387 8.28479 113.531C8.35865 113.687 8.43251 113.843 8.50637 113.998L8.6792 114.357C8.74642 114.495 8.81437 114.634 8.88232 114.772C8.96282 114.935 9.04333 115.098 9.12531 115.26C9.2073 115.423 9.28928 115.588 9.37274 115.752C9.43823 115.88 9.50421 116.008 9.57069 116.136C9.63076 116.252 9.69132 116.369 9.75238 116.485C9.82033 116.617 9.88902 116.747 9.95845 116.878C10.0609 117.071 10.1643 117.265 10.2687 117.458C10.3484 117.605 10.4287 117.753 10.5094 117.901C10.5636 117.999 10.618 118.098 10.6727 118.196C10.7515 118.339 10.8307 118.481 10.9105 118.623L11.0523 118.874C11.2 119.137 11.3507 119.399 11.5043 119.66C11.5494 119.734 11.5937 119.813 11.6387 119.89C11.7279 120.042 11.8175 120.194 11.9076 120.345L12.0287 120.547C12.2163 120.86 12.4057 121.171 12.5967 121.48L12.6477 121.562C12.7491 121.725 12.8508 121.888 12.9527 122.05L13.0539 122.21C13.3804 122.725 13.7125 123.236 14.0503 123.743L14.1241 123.85C14.4821 124.387 14.8472 124.918 15.2194 125.446C15.2231 125.452 15.2276 125.458 15.232 125.465C18.1815 129.649 21.5254 133.54 25.2178 137.086C25.3483 137.212 25.4797 137.338 25.6122 137.463L25.7038 137.55C26.1962 138.016 26.696 138.476 27.2031 138.93L27.226 138.95C27.7327 139.405 28.2455 139.853 28.7645 140.294L28.8783 140.392L28.8849 140.398C29.0671 140.553 29.2503 140.706 29.4344 140.859C29.5152 140.923 29.6064 140.973 29.704 141.006C29.492 140.924 29.8406 140.563 30.9146 140.158C35.6416 138.385 41.5968 136.028 52.0996 130.827C62.6357 125.61 66.7068 123.423 78.0102 115.177C88.7243 107.357 94.828 102.499 92.7526 94.8176ZM86.4863 150.241C85.3984 146.949 76.8565 145.748 66.5015 147.831C60.5632 149.025 56.3355 150.835 54.4624 151.819C51.9696 153.127 51.6742 153.938 53.7866 154.722H53.791C53.9247 154.769 54.0599 154.816 54.1943 154.862L54.5355 154.981C55.0771 155.166 55.6267 155.347 56.1841 155.525L56.2239 155.538C56.7774 155.713 57.3365 155.884 57.9013 156.051C58.0938 156.107 58.2866 156.163 58.4796 156.219L58.5911 156.251C63.7638 157.717 69.072 158.654 74.434 159.047C75.9473 157.436 88.1962 155.419 86.4863 150.241ZM82.8022 8.51377C105.575 8.20208 115.179 10.638 119.55 12.1772C122.149 13.093 122.82 13.9653 123.011 14.5451C122.597 13.0635 121.065 11.1217 117.331 9.07953L117.318 9.07214C106.276 3.27862 93.7068 0 80.3723 0C64.0412 0 48.8594 4.91682 36.2236 13.3493C44.3023 11.6927 63.0027 8.78409 82.8022 8.51377Z",\n fill: "url(#paint2_linear)"\n }\n ),\n /* @__PURE__ */ e1("defs", { children: [\n /* @__PURE__ */ e1(\n "linearGradient",\n {\n id: "paint0_linear",\n x1: "7.41796",\n y1: "113.847",\n x2: "152.537",\n y2: "46.268",\n gradientUnits: "userSpaceOnUse",\n children: [\n /* @__PURE__ */ c("stop", { stopColor: "#6D6E71" }),\n /* @__PURE__ */ c("stop", { offset: "0.55", stopColor: "#B1B3B6", stopOpacity: "0.6" }),\n /* @__PURE__ */ c("stop", { offset: "1", stopColor: "#D8D9DA" })\n ]\n }\n ),\n /* @__PURE__ */ e1(\n "linearGradient",\n {\n id: "paint1_linear",\n x1: "1.42253",\n y1: "91.3359",\n x2: "158.6",\n y2: "69.2461",\n gradientUnits: "userSpaceOnUse",\n children: [\n /* @__PURE__ */ c("stop", { stopColor: "#414042" }),\n /* @__PURE__ */ c("stop", { offset: "0.51", stopColor: "#D3D5D6" }),\n /* @__PURE__ */ c("stop", { offset: "1", stopColor: "#414042" })\n ]\n }\n ),\n /* @__PURE__ */ e1(\n "linearGradient",\n {\n id: "paint2_linear",\n x1: "8.12231",\n y1: "113.169",\n x2: "152.503",\n y2: "45.8438",\n gradientUnits: "userSpaceOnUse",\n children: [\n /* @__PURE__ */ c("stop", { stopColor: "#515254" }),\n /* @__PURE__ */ c("stop", { offset: "0.09", stopColor: "#595A5C" }),\n /* @__PURE__ */ c("stop", { offset: "0.23", stopColor: "#6E6F71" }),\n /* @__PURE__ */ c("stop", { offset: "0.41", stopColor: "#909194" }),\n /* @__PURE__ */ c("stop", { offset: "0.55", stopColor: "#B1B3B6" }),\n /* @__PURE__ */ c("stop", { offset: "1", stopColor: "#3E3E3F" })\n ]\n }\n )\n ] })\n ]\n }\n), HR = () => /* @__PURE__ */ e1(\n "svg",\n {\n width: "160",\n height: "160",\n viewBox: "0 0 160 160",\n fill: "none",\n xmlns: "http://www.w3.org/2000/svg",\n children: [\n /* @__PURE__ */ c(\n "path",\n {\n d: "M75.4854 80.8074C106.714 73.2859 143.941 65.5709 157.825 61.401C159.274 67.4948 160.004 73.7372 160 80.0008C160 81.3557 159.966 82.7024 159.899 84.0409C159.877 84.3645 159.735 84.6684 159.501 84.8934C158.857 85.5063 157.551 86.0739 156.803 86.318C153.637 87.3568 143.365 89.8958 124.47 93.9544C94.8364 100.32 62.4895 108.335 48.0185 112.355C29.4495 117.511 18.077 121.835 12.8535 123.506C10.5782 120.003 8.58175 116.326 6.88268 112.511V112.504C6.34993 111.308 5.84637 110.096 5.37199 108.868V108.858C4.89712 107.632 4.45193 106.391 4.03641 105.136C3.5378 103.628 3.08345 102.101 2.67338 100.554C13.5509 97.5382 42.2658 88.8081 75.4854 80.8074ZM3.75668 55.7093L3.74481 55.7478L3.73368 55.7812C3.72107 55.822 3.70845 55.8621 3.6951 55.9029C3.63129 56.1057 3.56822 56.309 3.50589 56.5128C3.50218 56.5232 3.49921 56.5336 3.49625 56.544C3.47992 56.5959 3.46434 56.6479 3.44876 56.6998C3.34191 57.051 3.23754 57.4027 3.13564 57.7549L3.12599 57.789C3.02261 58.1442 2.92219 58.5008 2.82475 58.8589C38.0692 50.3092 62.8723 43.3064 84.2675 36.6175C96.8071 32.6961 106.002 29.1346 112.206 25.9983C112.35 25.9256 112.492 25.8529 112.633 25.7802L112.759 25.7149C112.857 25.6644 112.955 25.614 113.051 25.5665L113.207 25.4849L113.46 25.3513L113.623 25.2637L113.86 25.1369L114.023 25.0478L114.253 24.9217L114.41 24.8349L114.641 24.7058L114.789 24.6242L115.032 24.4854L115.156 24.4149L115.481 24.2257L115.512 24.2072L115.859 24.0016L115.965 23.9371C116.039 23.8903 116.12 23.8436 116.196 23.7969L116.324 23.7182L116.525 23.5928L116.656 23.5105L116.846 23.3895C116.889 23.3621 116.932 23.3346 116.974 23.3064C117.037 23.2671 117.098 23.227 117.158 23.187L117.282 23.1061L117.465 22.9837L117.579 22.9095C117.645 22.8649 117.71 22.8212 117.773 22.7766L117.866 22.7128C117.96 22.6475 118.053 22.5825 118.144 22.5177C120.175 21.059 123.165 18.4123 122.95 15.2716C122.95 15.2441 122.945 15.2166 122.943 15.1892C122.795 13.6518 121.392 11.4593 117.155 9.13615L116.888 8.99666L116.571 8.83194L116.148 8.61528L115.999 8.54108C115.694 8.38675 115.387 8.2344 115.079 8.08403L114.883 7.98757L114.409 7.75978L114.164 7.64403L113.798 7.47115L113.529 7.34724L113.25 7.21814L112.954 7.08459L112.701 6.97106L112.389 6.83157L112.16 6.73066L111.826 6.58227L111.649 6.50807C111.216 6.32109 110.78 6.13782 110.343 5.95826L110.227 5.91004L109.82 5.74532L109.676 5.68744L109.267 5.52569L109.135 5.47375L108.705 5.30681L108.631 5.27862C107.955 5.01942 107.276 4.76962 106.593 4.52922L106.568 4.52032C106.405 4.46244 106.24 4.40531 106.076 4.34892L106.015 4.32814L105.522 4.15971L105.49 4.14933C104.61 3.85254 103.725 3.57207 102.833 3.30793L102.81 3.30125L102.29 3.14914L102.251 3.13801C101.5 2.92037 100.743 2.71385 99.9814 2.51846C100.032 3.13059 100.046 3.67891 99.9992 4.07661C99.781 5.9271 98.8394 7.4897 97.3859 8.86681C94.3764 11.7175 88.4004 14.6817 80.9746 17.2949C73.0465 20.0944 56.5721 25.5212 41.969 29.1806C32.1748 31.6358 19.2642 34.83 13.0575 36.1804C12.8171 36.547 12.5802 36.9155 12.3467 37.286C12.337 37.3008 12.3274 37.3157 12.3185 37.3305L12.3081 37.3461C12.2688 37.4084 12.2294 37.47 12.1909 37.5323C12.0959 37.6837 12.0014 37.8355 11.9074 37.9879C11.8918 38.0124 11.877 38.0369 11.8622 38.0621C11.8473 38.0873 11.8265 38.1192 11.8095 38.1482C11.7924 38.1771 11.7612 38.2224 11.7353 38.2639C11.6425 38.4123 11.5498 38.5674 11.4578 38.7195C11.434 38.7596 11.4103 38.7996 11.3836 38.8397L11.2968 38.9881C11.2008 39.1469 11.1061 39.3056 11.0126 39.4644C11.0052 39.4763 10.9985 39.4882 10.9918 39.5L10.9874 39.5082C10.7702 39.8772 10.556 40.2482 10.3448 40.6212L10.2127 40.8541C10.1232 41.0144 10.0339 41.1749 9.94486 41.3357L9.93744 41.3483L9.91444 41.3906L9.79572 41.605L9.53306 42.0881C9.49893 42.1519 9.46554 42.2157 9.43141 42.2787L9.39653 42.3433C9.30601 42.5125 9.21549 42.6816 9.12645 42.8516L9.11977 42.8649L9.11458 42.8746C8.90583 43.2703 8.7003 43.6704 8.49798 44.0751L8.39856 44.2717C8.31249 44.4438 8.2279 44.616 8.14331 44.7911V44.797C8.12031 44.843 8.09805 44.889 8.07579 44.935L8.06689 44.9528L8.02237 45.0441C7.93877 45.2152 7.85567 45.3871 7.77306 45.5598L7.66177 45.7957C7.51683 46.0999 7.37437 46.4054 7.23438 46.7121V46.7158C7.0934 47.0219 6.9549 47.3294 6.81887 47.638C6.80329 47.6729 6.7877 47.707 6.77286 47.7412L6.75283 47.7864C6.6722 47.9714 6.59157 48.1567 6.51094 48.3422L6.48423 48.4045C6.46049 48.4609 6.436 48.5165 6.41003 48.5729C6.33138 48.7564 6.25347 48.9405 6.17631 49.125C6.14663 49.1954 6.11695 49.2659 6.08801 49.3372C5.95346 49.6597 5.82114 49.9837 5.69105 50.3092V50.3173V50.3225C5.56145 50.648 5.43333 50.975 5.3067 51.3034L5.27331 51.3895C5.19911 51.5876 5.12491 51.7872 5.05071 51.9831L4.97651 52.1901C4.90231 52.3845 4.83257 52.5796 4.76208 52.7755L4.73314 52.8571C4.71904 52.8942 4.70569 52.9313 4.69233 52.9691C4.57064 53.3085 4.45118 53.6485 4.33395 53.9894C4.33238 53.9932 4.33114 53.9972 4.33024 54.0012L4.32579 54.0138C4.20756 54.3576 4.09206 54.7019 3.97928 55.0467L3.97483 55.06V55.0667C3.97326 55.0703 3.97202 55.074 3.97112 55.0778C3.89445 55.2871 3.82297 55.4975 3.75668 55.7093ZM3.07554 81.1679C5.24956 81.1798 10.8612 80.8927 17.0902 80.2969C27.9395 79.2581 49.6264 76.4386 74.3717 73.2384C93.6351 70.7476 135.785 64.6315 157.826 61.4054C157.79 61.2516 157.754 61.1 157.718 60.9506C157.649 60.6716 157.58 60.3936 157.508 60.1166C157.483 60.0179 157.458 59.92 157.434 59.8198L157.43 59.8035C157.38 59.6145 157.331 59.4253 157.281 59.2359C157.254 59.1357 157.227 59.0355 157.2 58.9391C157.134 58.6957 157.067 58.4531 156.999 58.2112L156.95 58.0383C156.894 57.8417 156.836 57.6466 156.779 57.4514L156.726 57.2682C156.697 57.1687 156.666 57.07 156.637 56.9714C156.579 56.7814 156.522 56.5915 156.464 56.4023C156.433 56.3028 156.402 56.2034 156.371 56.1055C156.306 55.897 156.24 55.6892 156.173 55.4815L156.142 55.3828C156.119 55.3086 156.095 55.2396 156.072 55.1676C156.027 55.0296 155.981 54.8916 155.935 54.7536C155.903 54.6579 155.872 54.5622 155.84 54.4664L155.735 54.16C155.735 54.1526 155.73 54.1452 155.728 54.1378L155.547 53.6184C155.512 53.5167 155.473 53.4143 155.44 53.3127C155.356 53.0757 155.271 52.8398 155.186 52.6048C155.155 52.5195 155.123 52.4342 155.091 52.3481C155.067 52.2821 155.042 52.2168 155.017 52.1507C154.963 52.0023 154.908 51.8591 154.854 51.7137C154.813 51.6061 154.772 51.4993 154.731 51.3924C154.704 51.3182 154.675 51.244 154.647 51.1758L154.534 50.8827C154.492 50.7766 154.451 50.6698 154.408 50.5637C154.366 50.4576 154.328 50.3633 154.288 50.2669C154.239 50.1392 154.187 50.0111 154.134 49.8825C154.093 49.7823 154.051 49.6822 154.011 49.5857L153.931 49.3936C153.878 49.2667 153.826 49.1398 153.772 49.0129C153.725 48.9016 153.678 48.7903 153.631 48.679C153.562 48.5188 153.494 48.359 153.424 48.1997C153.375 48.0899 153.327 47.9803 153.281 47.871C153.24 47.7753 153.197 47.6796 153.154 47.5839C153.098 47.4592 153.043 47.3338 152.987 47.2129C152.937 47.1008 152.886 46.9903 152.835 46.8775C152.783 46.7647 152.737 46.6646 152.686 46.5585C152.655 46.4917 152.625 46.4249 152.594 46.3589C152.541 46.2439 152.487 46.1296 152.433 46.0146C152.369 45.8776 152.304 45.7403 152.238 45.6028L152.231 45.5894L152.218 45.562C152.165 45.45 152.112 45.3394 152.058 45.2274C151.954 45.0127 151.849 44.799 151.744 44.5863C151.685 44.4661 151.624 44.3466 151.564 44.2264L151.402 43.9037L151.353 43.8072C151.344 43.7887 151.334 43.7701 151.325 43.7523L151.145 43.4014L151.081 43.2782C151.028 43.1763 150.975 43.0746 150.923 42.9732L150.744 42.6342C150.633 42.422 150.519 42.2102 150.405 41.999L150.206 41.6362C150.132 41.5071 150.064 41.3772 149.992 41.2481L149.965 41.1984L149.767 40.846C149.745 40.8052 149.722 40.7651 149.699 40.7243L149.536 40.4386C149.472 40.3244 149.407 40.2109 149.341 40.0973C149.275 39.9838 149.221 39.8911 149.161 39.7879C149.092 39.6692 149.023 39.5498 148.953 39.4318L148.731 39.0534C143.092 39.8695 136.24 40.8341 127.82 41.9998C109.334 44.5551 88.5688 47.9489 67.3242 50.6965C34.6835 54.8931 13.3172 58.0205 2.82178 58.8634C2.77627 59.0306 2.7315 59.1973 2.68748 59.3635C2.67858 59.3969 2.66967 59.4295 2.66151 59.4622L2.60809 59.6632C2.60642 59.6686 2.60518 59.674 2.60438 59.6796C2.5653 59.828 2.52622 59.9764 2.48714 60.1248C2.45598 60.2464 2.4263 60.3681 2.39514 60.4898C2.38104 60.5477 2.36694 60.6048 2.3521 60.6619C2.3432 60.6983 2.33429 60.7361 2.32465 60.771C2.315 60.8059 2.31055 60.8282 2.30387 60.8563C2.2831 60.9394 2.26306 61.0233 2.24303 61.1064C0.758763 67.2473 0.00585972 73.5421 0 79.8598C0.0215176 80.6871 1.21241 81.1538 3.0748 81.1642L3.07554 81.1679ZM140.314 132.559C134.971 137.536 115.805 146.553 96.8153 150.304C78.8666 153.85 62.7121 154.641 51.9903 154.654C52.1751 154.919 52.5839 155.167 53.228 155.411C54.5175 155.869 55.822 156.295 57.1412 156.689L57.1753 156.699C57.7402 156.867 58.3071 157.028 58.876 157.183L58.9502 157.204C59.2015 157.272 59.4532 157.34 59.7055 157.406L59.8198 157.436C60.0914 157.506 60.3634 157.575 60.636 157.643L60.7465 157.67C60.9731 157.726 61.1999 157.781 61.4269 157.835L61.6495 157.888C61.887 157.944 62.1249 157.999 62.3633 158.052L62.551 158.094C62.7633 158.141 62.9755 158.187 63.1884 158.233L63.5075 158.301L63.989 158.4L64.3251 158.468C64.5477 158.512 64.7651 158.554 64.9855 158.596L65.3981 158.67L65.7438 158.733L66.189 158.813L66.379 158.845C66.6955 158.9 67.0131 158.952 67.3317 159.003L67.5543 159.038L68.0915 159.12L68.1887 159.135C68.577 159.192 68.966 159.247 69.3558 159.298L69.4033 159.305C69.6081 159.332 69.8129 159.358 70.0177 159.383L70.0718 159.39C70.7025 159.468 71.3354 159.538 71.9706 159.602H71.9802C72.4106 159.645 72.8424 159.685 73.2757 159.721C75.4913 159.905 77.7316 159.998 79.9967 160C104.062 160 125.645 149.373 140.311 132.556L140.314 132.559ZM145.765 107.165C143.701 107.165 131.816 107.443 112.642 109.281C87.5241 111.69 50.9375 116.966 36.143 119.489C26.9542 121.056 18.3842 122.889 13.2096 124.052C13.4416 124.404 13.6766 124.753 13.9145 125.1L14.0748 125.335C14.1737 125.483 14.2753 125.629 14.3797 125.773C14.4361 125.854 14.4932 125.935 14.5496 126.015C14.6543 126.164 14.7581 126.312 14.8635 126.46L14.9733 126.609C15.1905 126.912 15.4101 127.214 15.6322 127.514C15.6782 127.576 15.7227 127.637 15.7687 127.698C15.8785 127.846 15.9913 127.995 16.1011 128.143L16.2659 128.361C16.3786 128.509 16.4922 128.657 16.6064 128.806L16.7274 128.962C16.9836 129.292 17.2418 129.62 17.502 129.946L17.5421 129.997C17.666 130.152 17.7914 130.305 17.9131 130.459L18.0578 130.636C18.1824 130.785 18.3071 130.94 18.4325 131.091L18.546 131.228C18.9659 131.731 19.3918 132.228 19.8237 132.72L19.932 132.844C20.07 133.001 20.2088 133.157 20.3483 133.313C20.3802 133.349 20.4121 133.387 20.4447 133.42C20.9028 133.931 21.367 134.435 21.8374 134.933L21.8842 134.983C22.0375 135.145 22.1916 135.306 22.3464 135.467L22.4206 135.545C23.0766 136.225 23.7443 136.893 24.424 137.548L24.4752 137.597C25.1677 138.264 25.8704 138.917 26.5832 139.559L26.6077 139.581C27.3328 140.231 28.0694 140.867 28.8173 141.491C29.2172 141.827 30.0898 141.887 32.8285 141.368C38.5752 140.281 60.098 136.545 83.9618 133.275C106.414 130.198 130.525 129.546 133.738 129.578C137.936 129.621 141.91 130.555 140.309 132.556C140.489 132.35 140.667 132.144 140.844 131.935L140.883 131.889C140.887 131.886 140.89 131.882 140.893 131.878C141.063 131.68 141.232 131.48 141.4 131.277L141.435 131.236C141.445 131.223 141.455 131.211 141.466 131.199C141.632 131.001 141.798 130.8 141.962 130.597L142.022 130.523C142.19 130.316 142.357 130.109 142.523 129.902L142.555 129.862C143.175 129.084 143.782 128.294 144.374 127.493L144.403 127.455C144.996 126.654 145.573 125.841 146.133 125.017L146.137 125.011L146.153 124.988C146.306 124.763 146.458 124.538 146.609 124.312C146.623 124.29 146.637 124.269 146.652 124.247C146.8 124.025 146.946 123.803 147.091 123.579L147.098 123.567C147.111 123.549 147.123 123.53 147.135 123.512C147.283 123.285 147.429 123.057 147.573 122.828C147.582 122.816 147.59 122.802 147.598 122.79C148.835 120.842 149.987 118.839 151.054 116.78L151.068 116.754C151.196 116.507 151.322 116.259 151.449 116.012L151.461 115.987L151.472 115.967C151.598 115.717 151.721 115.466 151.843 115.215L151.847 115.205L151.857 115.186C152.883 113.093 153.819 110.95 154.665 108.758C154.974 107.857 154.009 107.161 145.764 107.161L145.765 107.165ZM66.7307 9.22593C67.3888 4.45725 54.749 5.24523 54.1911 4.25469C47.6386 6.48831 41.4051 9.56622 35.6481 13.4107C35.3995 13.5747 35.2993 13.9345 36.4487 14.169C38.9514 14.6809 44.2462 15.233 48.0036 15.2641C56.0082 15.3331 66.1304 13.5791 66.7307 9.22593Z",\n fill: "url(#paint0_linear)"\n }\n ),\n /* @__PURE__ */ c(\n "path",\n {\n opacity: "0.35",\n d: "M154.645 108.835C147.997 126.031 135.576 140.356 119.764 149.433C119.512 148.913 118.559 148.213 116.334 147.179C114.109 146.145 104.376 142.541 104.462 137.464C104.573 131.066 113.267 125.214 125.614 120.392C137.454 115.768 148.293 112.476 150.292 111.674C152.679 110.717 154.084 110.129 154.645 108.835ZM17.6138 70.1939C31.6685 64.0741 46.4029 57.2316 56.0398 52.6915C71.1163 45.5885 84.2806 36.9326 81.4158 28.1157C78.8686 20.2634 68.3902 21.2072 47.4803 24.949C34.0303 27.3559 16.2463 31.787 13.8482 34.9953L13.7547 35.1326C13.656 35.281 13.5566 35.4294 13.4579 35.5778C5.1625 47.9769 0.24015 62.832 0.00865019 78.8172C0.00419827 79.1637 0.000488281 79.5102 0.000488281 79.8559C0.0309098 78.4336 5.13282 75.6289 17.6138 70.1939ZM133.375 37.9595C116.977 40.3702 90.9556 45.1878 93.4954 60.566C95.4505 72.4058 119.105 75.8589 128.991 77.7651C136.839 79.2794 152.196 81.3718 158.767 83.0138C159.644 83.2364 159.92 83.6549 159.896 84.1268C159.896 84.1216 159.896 84.1171 159.896 84.1119C159.93 83.4308 159.955 82.7474 159.97 82.0618V81.9394C159.986 81.2939 159.994 80.6471 159.994 79.9991C159.994 65.2004 155.975 51.3418 148.971 39.4516L148.694 39.0064C147.851 37.6434 142.185 36.664 133.375 37.9595ZM92.4373 95.2519C90.8754 89.4645 82.4019 85.2791 70.3083 85.5751C57.5461 85.8882 44.2912 87.0917 28.3162 90.6836C14.0411 93.8934 5.3888 97.5929 4.05323 98.1442C2.80149 98.6636 2.37707 99.3402 2.60635 100.323V100.329C2.66225 100.541 2.71814 100.752 2.77404 100.961C2.84824 101.237 2.92244 101.513 3.00331 101.789C3.02706 101.873 3.05154 101.958 3.07751 102.043C3.14132 102.265 3.20513 102.488 3.27043 102.705C3.28898 102.769 3.30753 102.833 3.32682 102.897C3.40794 103.168 3.49006 103.438 3.57316 103.707C3.59764 103.786 3.62287 103.865 3.64736 103.944C3.71265 104.153 3.77943 104.361 3.84621 104.569L3.92412 104.812C4.01068 105.077 4.09873 105.342 4.18827 105.607L4.25727 105.81C4.33147 106.018 4.40047 106.227 4.47319 106.435L4.56816 106.706C4.65324 106.946 4.73956 107.186 4.82712 107.425L4.8939 107.607C4.97749 107.836 5.06257 108.064 5.14914 108.292L5.25821 108.577C5.33192 108.771 5.40612 108.964 5.48081 109.156C5.51123 109.234 5.54091 109.312 5.57207 109.39C5.67101 109.637 5.76994 109.884 5.86887 110.132C5.90819 110.23 5.949 110.327 5.98907 110.428C6.0603 110.6 6.13178 110.774 6.20351 110.948L6.32816 111.245C6.43006 111.484 6.5327 111.723 6.63608 111.961C6.67912 112.06 6.7229 112.158 6.76593 112.258C6.83716 112.42 6.90889 112.581 6.98111 112.742L7.12951 113.075C7.21162 113.256 7.29472 113.437 7.37881 113.618C7.44559 113.766 7.51385 113.907 7.58138 114.051C7.65557 114.208 7.72977 114.365 7.80397 114.52L7.9776 114.881C8.04512 115.02 8.11338 115.159 8.18164 115.298C8.26252 115.462 8.3434 115.625 8.42576 115.788C8.50812 115.952 8.59048 116.118 8.67432 116.282C8.74011 116.411 8.8064 116.539 8.87318 116.668C8.93353 116.785 8.99437 116.902 9.05571 117.019C9.12397 117.151 9.19297 117.282 9.26272 117.413C9.36561 117.608 9.46949 117.802 9.57436 117.996C9.65449 118.144 9.73512 118.293 9.81624 118.441C9.87066 118.54 9.92532 118.639 9.98022 118.738C10.0594 118.881 10.139 119.024 10.2191 119.166L10.3616 119.418C10.51 119.682 10.6614 119.946 10.8157 120.208C10.861 120.283 10.9055 120.362 10.9507 120.439C11.0403 120.592 11.1303 120.744 11.2208 120.896L11.3425 121.099C11.531 121.414 11.7212 121.726 11.9131 122.037L11.9643 122.119C12.0662 122.283 12.1683 122.446 12.2707 122.609L12.3724 122.77C12.7003 123.287 13.034 123.8 13.3733 124.31L13.4475 124.418C13.8071 124.956 14.1739 125.49 14.5479 126.02C14.5516 126.027 14.5561 126.033 14.5605 126.04C17.5236 130.243 20.8829 134.152 24.5922 137.714C24.7233 137.841 24.8553 137.967 24.9884 138.093L25.0804 138.18C25.5751 138.648 26.0772 139.11 26.5866 139.566L26.6096 139.587C27.1187 140.044 27.6338 140.494 28.1552 140.937L28.2695 141.035L28.2762 141.042C28.4592 141.196 28.6432 141.35 28.8282 141.504C28.9094 141.568 29.001 141.618 29.099 141.652C28.8861 141.57 29.2363 141.207 30.3151 140.8C35.0639 139.019 41.0465 136.651 51.5976 131.426C62.182 126.185 66.2719 123.989 77.6272 115.705C88.3905 107.849 94.5223 102.968 92.4373 95.2519ZM86.1423 150.929C85.0493 147.622 76.4683 146.416 66.0656 148.508C60.1 149.708 55.8529 151.526 53.9712 152.515C51.467 153.829 51.1702 154.643 53.2923 155.431H53.2967C53.431 155.478 53.5668 155.525 53.7018 155.572L54.0446 155.69C54.5888 155.876 55.1408 156.059 55.7008 156.237L55.7408 156.251C56.2968 156.426 56.8585 156.598 57.4259 156.766C57.6193 156.822 57.813 156.879 58.0069 156.935L58.1189 156.967C63.3153 158.44 68.6479 159.381 74.0345 159.776C75.5549 158.157 87.86 156.13 86.1423 150.929ZM82.4413 8.55276C105.318 8.23965 114.967 10.6867 119.358 12.233C121.968 13.153 122.643 14.0293 122.834 14.6117C122.419 13.1233 120.88 11.1727 117.129 9.12112L117.116 9.1137C106.023 3.29363 93.396 0 80.0001 0C63.594 0 48.3425 4.93934 35.6485 13.4105C43.7644 11.7462 62.5508 8.82432 82.4413 8.55276Z",\n fill: "url(#paint1_linear)"\n }\n ),\n /* @__PURE__ */ c(\n "path",\n {\n style: { mixBlendMode: "multiply" },\n d: "M154.645 108.835C147.997 126.031 135.576 140.356 119.764 149.433C119.512 148.913 118.559 148.213 116.334 147.179C114.109 146.145 104.376 142.541 104.462 137.464C104.573 131.066 113.267 125.214 125.614 120.392C137.454 115.768 148.293 112.476 150.292 111.674C152.679 110.717 154.084 110.129 154.645 108.835ZM17.6138 70.1939C31.6685 64.0741 46.4029 57.2316 56.0398 52.6915C71.1163 45.5885 84.2806 36.9326 81.4158 28.1157C78.8686 20.2634 68.3902 21.2072 47.4803 24.949C34.0303 27.3559 16.2463 31.787 13.8482 34.9953L13.7547 35.1326C13.656 35.281 13.5566 35.4294 13.4579 35.5778C5.1625 47.9769 0.24015 62.832 0.00865019 78.8172C0.00419827 79.1637 0.000488281 79.5102 0.000488281 79.8559C0.0309098 78.4336 5.13282 75.6289 17.6138 70.1939ZM133.375 37.9595C116.977 40.3702 90.9556 45.1878 93.4954 60.566C95.4505 72.4058 119.105 75.8589 128.991 77.7651C136.839 79.2794 152.196 81.3718 158.767 83.0138C159.644 83.2364 159.92 83.6549 159.896 84.1268C159.896 84.1216 159.896 84.1171 159.896 84.1119C159.93 83.4308 159.955 82.7474 159.97 82.0618V81.9394C159.986 81.2939 159.994 80.6471 159.994 79.9991C159.994 65.2004 155.975 51.3418 148.971 39.4516L148.694 39.0064C147.851 37.6434 142.185 36.664 133.375 37.9595ZM92.4373 95.2519C90.8754 89.4645 82.4019 85.2791 70.3083 85.5751C57.5461 85.8882 44.2912 87.0917 28.3162 90.6836C14.0411 93.8934 5.3888 97.5929 4.05323 98.1442C2.80149 98.6636 2.37707 99.3402 2.60635 100.323V100.329C2.66225 100.541 2.71814 100.752 2.77404 100.961C2.84824 101.237 2.92244 101.513 3.00331 101.789C3.02706 101.873 3.05154 101.958 3.07751 102.043C3.14132 102.265 3.20513 102.488 3.27043 102.705C3.28898 102.769 3.30753 102.833 3.32682 102.897C3.40794 103.168 3.49006 103.438 3.57316 103.707C3.59764 103.786 3.62287 103.865 3.64736 103.944C3.71265 104.153 3.77943 104.361 3.84621 104.569L3.92412 104.812C4.01068 105.077 4.09873 105.342 4.18827 105.607L4.25727 105.81C4.33147 106.018 4.40047 106.227 4.47319 106.435L4.56816 106.706C4.65324 106.946 4.73956 107.186 4.82712 107.425L4.8939 107.607C4.97749 107.836 5.06257 108.064 5.14914 108.292L5.25821 108.577C5.33192 108.771 5.40612 108.964 5.48081 109.156C5.51123 109.234 5.54091 109.312 5.57207 109.39C5.67101 109.637 5.76994 109.884 5.86887 110.132C5.90819 110.23 5.949 110.327 5.98907 110.428C6.0603 110.6 6.13178 110.774 6.20351 110.948L6.32816 111.245C6.43006 111.484 6.5327 111.723 6.63608 111.961C6.67912 112.06 6.7229 112.158 6.76593 112.258C6.83716 112.42 6.90889 112.581 6.98111 112.742L7.12951 113.075C7.21162 113.256 7.29472 113.437 7.37881 113.618C7.44559 113.766 7.51385 113.907 7.58138 114.051C7.65557 114.208 7.72977 114.365 7.80397 114.52L7.9776 114.881C8.04512 115.02 8.11338 115.159 8.18164 115.298C8.26252 115.462 8.3434 115.625 8.42576 115.788C8.50812 115.952 8.59048 116.118 8.67432 116.282C8.74011 116.411 8.8064 116.539 8.87318 116.668C8.93353 116.785 8.99437 116.902 9.05571 117.019C9.12397 117.151 9.19297 117.282 9.26272 117.413C9.36561 117.608 9.46949 117.802 9.57436 117.996C9.65449 118.144 9.73512 118.293 9.81624 118.441C9.87066 118.54 9.92532 118.639 9.98022 118.738C10.0594 118.881 10.139 119.024 10.2191 119.166L10.3616 119.418C10.51 119.682 10.6614 119.946 10.8157 120.208C10.861 120.283 10.9055 120.362 10.9507 120.439C11.0403 120.592 11.1303 120.744 11.2208 120.896L11.3425 121.099C11.531 121.414 11.7212 121.726 11.9131 122.037L11.9643 122.119C12.0662 122.283 12.1683 122.446 12.2707 122.609L12.3724 122.77C12.7003 123.287 13.034 123.8 13.3733 124.31L13.4475 124.418C13.8071 124.956 14.1739 125.49 14.5479 126.02C14.5516 126.027 14.5561 126.033 14.5605 126.04C17.5236 130.243 20.8829 134.152 24.5922 137.714C24.7233 137.841 24.8553 137.967 24.9884 138.093L25.0804 138.18C25.5751 138.648 26.0772 139.11 26.5866 139.566L26.6096 139.587C27.1187 140.044 27.6338 140.494 28.1552 140.937L28.2695 141.035L28.2762 141.042C28.4592 141.196 28.6432 141.35 28.8282 141.504C28.9094 141.568 29.001 141.618 29.099 141.652C28.8861 141.57 29.2363 141.207 30.3151 140.8C35.0639 139.019 41.0465 136.651 51.5976 131.426C62.182 126.185 66.2719 123.989 77.6272 115.705C88.3905 107.849 94.5223 102.968 92.4373 95.2519ZM86.1423 150.929C85.0493 147.622 76.4683 146.416 66.0656 148.508C60.1 149.708 55.8529 151.526 53.9712 152.515C51.467 153.829 51.1702 154.643 53.2923 155.431H53.2967C53.431 155.478 53.5668 155.525 53.7018 155.572L54.0446 155.69C54.5888 155.876 55.1408 156.059 55.7008 156.237L55.7408 156.251C56.2968 156.426 56.8585 156.598 57.4259 156.766C57.6193 156.822 57.813 156.879 58.0069 156.935L58.1189 156.967C63.3153 158.44 68.6479 159.381 74.0345 159.776C75.5549 158.157 87.86 156.13 86.1423 150.929ZM82.4413 8.55276C105.318 8.23965 114.967 10.6867 119.358 12.233C121.968 13.153 122.643 14.0293 122.834 14.6117C122.419 13.1233 120.88 11.1727 117.129 9.12112L117.116 9.1137C106.023 3.29363 93.396 0 80.0001 0C63.594 0 48.3425 4.93934 35.6485 13.4105C43.7644 11.7462 62.5508 8.82432 82.4413 8.55276Z",\n fill: "url(#paint2_linear)"\n }\n ),\n /* @__PURE__ */ e1("defs", { children: [\n /* @__PURE__ */ e1(\n "linearGradient",\n {\n id: "paint0_linear",\n x1: "1.42907",\n y1: "91.7545",\n x2: "159.328",\n y2: "69.5628",\n gradientUnits: "userSpaceOnUse",\n children: [\n /* @__PURE__ */ c("stop", { stopColor: "#414042" }),\n /* @__PURE__ */ c("stop", { offset: "0.3", stopColor: "#808285" }),\n /* @__PURE__ */ c("stop", { offset: "0.53", stopColor: "#A7A9AC" }),\n /* @__PURE__ */ c("stop", { offset: "0.77", stopColor: "#808285" }),\n /* @__PURE__ */ c("stop", { offset: "1", stopColor: "#414042" })\n ]\n }\n ),\n /* @__PURE__ */ e1(\n "linearGradient",\n {\n id: "paint1_linear",\n x1: "7.41814",\n y1: "113.688",\n x2: "152.461",\n y2: "46.0521",\n gradientUnits: "userSpaceOnUse",\n children: [\n /* @__PURE__ */ c("stop", { stopColor: "#6D6E71" }),\n /* @__PURE__ */ c("stop", { offset: "0.12", stopColor: "#757679" }),\n /* @__PURE__ */ c("stop", { offset: "0.3", stopColor: "#8A8B8E" }),\n /* @__PURE__ */ c("stop", { offset: "0.52", stopColor: "#ACAEB1" }),\n /* @__PURE__ */ c("stop", { offset: "0.55", stopColor: "#B1B3B6" }),\n /* @__PURE__ */ c("stop", { offset: "1", stopColor: "#808285" })\n ]\n }\n ),\n /* @__PURE__ */ e1(\n "linearGradient",\n {\n id: "paint2_linear",\n x1: "7.41814",\n y1: "113.688",\n x2: "152.461",\n y2: "46.0521",\n gradientUnits: "userSpaceOnUse",\n children: [\n /* @__PURE__ */ c("stop", { stopColor: "#6D6E71" }),\n /* @__PURE__ */ c("stop", { offset: "0.12", stopColor: "#757679" }),\n /* @__PURE__ */ c("stop", { offset: "0.3", stopColor: "#8A8B8E" }),\n /* @__PURE__ */ c("stop", { offset: "0.52", stopColor: "#ACAEB1" }),\n /* @__PURE__ */ c("stop", { offset: "0.55", stopColor: "#B1B3B6" }),\n /* @__PURE__ */ c("stop", { offset: "1", stopColor: "#808285" })\n ]\n }\n )\n ] })\n ]\n }\n), VR = () => /* @__PURE__ */ e1(\n "svg",\n {\n width: "160",\n height: "130",\n viewBox: "0 0 160 130",\n fill: "none",\n xmlns: "http://www.w3.org/2000/svg",\n children: [\n /* @__PURE__ */ c(\n "path",\n {\n d: "M2.23805 85.8336C1.64946 85.8462 1.07975 85.6269 0.653288 85.2237C0.233418 84.7754 0 84.1858 0 83.5734C0 82.9611 0.233418 82.3715 0.653288 81.9232C1.08623 81.5284 1.65253 81.3093 2.24023 81.3093C2.82793 81.3093 3.39423 81.5284 3.82717 81.9232C4.24704 82.3715 4.48045 82.9611 4.48045 83.5734C4.48045 84.1858 4.24704 84.7754 3.82717 85.2237C3.39911 85.6272 2.82797 85.8464 2.23805 85.8336ZM3.97955 108.604H0.496552V89.32H3.97955V108.604Z",\n fill: "#231F20"\n }\n ),\n /* @__PURE__ */ c(\n "path",\n {\n d: "M9.96604 89.8783C10.7628 89.6793 11.8164 89.4673 13.1356 89.2467C14.6417 89.0113 16.1649 88.8999 17.6896 88.9137C19.0018 88.8725 20.309 89.0931 21.5339 89.5625C22.4936 89.9482 23.3366 90.5741 23.9807 91.3793C24.6176 92.2056 25.0635 93.1611 25.2869 94.178C25.5441 95.3603 25.6682 96.5673 25.6569 97.7769V108.591H22.1739V98.5166C22.1865 97.502 22.1049 96.4884 21.9301 95.4886C21.8142 94.76 21.5409 94.065 21.129 93.4513C20.7564 92.9337 20.2363 92.539 19.6357 92.3179C18.8923 92.0651 18.1093 91.9464 17.3239 91.9676C16.9494 91.9676 16.562 91.9676 16.1658 92.0022C15.7696 92.0368 15.3864 92.0584 15.0251 92.0973C14.6637 92.1363 14.3416 92.1752 14.0542 92.2271L13.4403 92.3352V108.604H9.95734L9.96604 89.8783Z",\n fill: "#231F20"\n }\n ),\n /* @__PURE__ */ c(\n "path",\n {\n d: "M34.3208 89.3201H41.6742V92.2139H34.3208V101.112C34.3051 101.915 34.3796 102.717 34.5428 103.504C34.651 104.043 34.8818 104.55 35.2176 104.987C35.5086 105.343 35.8973 105.608 36.3366 105.749C36.8439 105.904 37.373 105.979 37.9039 105.969C38.7568 105.998 39.6082 105.879 40.4204 105.619C41.056 105.385 41.4957 105.217 41.7265 105.117L42.397 107.972C41.8047 108.234 41.1935 108.451 40.5684 108.621C39.5971 108.894 38.591 109.025 37.5817 109.01C36.4718 109.045 35.365 108.876 34.3164 108.513C33.5006 108.208 32.7841 107.687 32.244 107.008C31.694 106.279 31.3174 105.436 31.1425 104.542C30.9183 103.426 30.8118 102.289 30.8247 101.151V83.9433L34.3077 83.3507L34.3208 89.3201Z",\n fill: "#231F20"\n }\n ),\n /* @__PURE__ */ c(\n "path",\n {\n d: "M44.6043 99.0012C44.5723 97.4788 44.8248 95.9637 45.3487 94.5328C45.7857 93.3543 46.458 92.2758 47.3253 91.3621C48.1243 90.5362 49.0923 89.8901 50.164 89.4675C51.2083 89.0536 52.3223 88.8407 53.4467 88.8403C56.059 88.8403 58.0617 89.6492 59.4592 91.267C60.8568 92.8847 61.549 95.3547 61.549 98.6638V99.2391C61.5503 99.456 61.5372 99.6727 61.5098 99.8879H48.2222C48.3731 101.889 48.9536 103.41 49.9637 104.451C50.9738 105.493 52.5702 106.012 54.7528 106.009C55.7894 106.029 56.8247 105.923 57.8353 105.693C58.4798 105.543 59.1104 105.339 59.7205 105.083L60.2037 107.973C59.4934 108.292 58.7483 108.528 57.9833 108.678C56.8014 108.938 55.5933 109.063 54.3828 109.05C52.8838 109.084 51.3928 108.825 49.9942 108.288C48.8299 107.832 47.7871 107.116 46.9466 106.195C46.1444 105.274 45.5505 104.193 45.2051 103.024C44.7992 101.721 44.5966 100.365 44.6043 99.0012ZM57.9267 97.1066C58.0088 95.7291 57.5918 94.3681 56.7512 93.2697C56.3524 92.7765 55.8422 92.3836 55.262 92.1228C54.6819 91.862 54.048 91.7407 53.4119 91.7687C52.6793 91.7612 51.9554 91.9273 51.3003 92.2532C50.7091 92.5488 50.1835 92.9592 49.7547 93.4601C49.3249 93.9653 48.9888 94.5424 48.7621 95.1644C48.5307 95.7988 48.3743 96.4578 48.2962 97.1282L57.9267 97.1066Z",\n fill: "#231F20"\n }\n ),\n /* @__PURE__ */ c(\n "path",\n {\n d: "M73.1476 88.9136C73.4908 88.9153 73.8337 88.934 74.1751 88.9699C74.5582 89.0045 74.937 89.0564 75.3114 89.117C75.6858 89.1775 76.0254 89.2424 76.3389 89.303C76.571 89.3453 76.8006 89.4002 77.0268 89.4673L76.4303 92.4736C75.9849 92.3292 75.5313 92.2107 75.0719 92.1189C74.2654 91.9691 73.4456 91.901 72.6251 91.9156C71.9783 91.9162 71.3333 91.9844 70.7008 92.1189C70.0695 92.2574 69.6515 92.3482 69.4513 92.4001V108.604H65.9683V90.1378C66.964 89.7915 67.9822 89.5126 69.0159 89.303C70.3754 89.0287 71.7604 88.8982 73.1476 88.9136Z",\n fill: "#231F20"\n }\n ),\n /* @__PURE__ */ c(\n "path",\n {\n d: "M83.6354 89.3201H90.9845V92.2139H83.6354V101.112C83.6198 101.915 83.6943 102.717 83.8575 103.504C83.9639 104.044 84.1949 104.551 84.5323 104.987C84.8233 105.343 85.212 105.608 85.6512 105.749C86.1585 105.905 86.6876 105.979 87.2186 105.969C88.0714 105.998 88.9228 105.879 89.735 105.619C90.3707 105.385 90.8104 105.217 91.0629 105.117L91.7334 107.972C91.1412 108.234 90.5299 108.451 89.9048 108.621C88.9335 108.894 87.9274 109.025 86.9181 109.01C85.8082 109.045 84.7014 108.876 83.6528 108.513C82.837 108.208 82.1205 107.687 81.5805 107.008C81.0305 106.279 80.6539 105.436 80.479 104.542C80.2548 103.426 80.1483 102.289 80.1611 101.151V83.9433L83.6441 83.3507L83.6354 89.3201Z",\n fill: "#231F20"\n }\n ),\n /* @__PURE__ */ c(\n "path",\n {\n d: "M102.557 88.9136C102.9 88.9152 103.243 88.934 103.584 88.9698C103.968 89.0044 104.351 89.0563 104.721 89.1169C105.091 89.1775 105.439 89.2423 105.748 89.3029C105.982 89.3454 106.213 89.4002 106.441 89.4673L105.844 92.4736C104.616 92.0704 103.327 91.8816 102.035 91.9156C101.389 91.9158 100.746 91.984 100.115 92.1189C99.4789 92.2573 99.0609 92.3481 98.865 92.4001V108.604H95.382V90.1377C96.3778 89.7915 97.396 89.5126 98.4296 89.3029C99.7878 89.0289 101.171 88.8984 102.557 88.9136Z",\n fill: "#231F20"\n }\n ),\n /* @__PURE__ */ c(\n "path",\n {\n d: "M126.058 108.046C125.261 108.245 124.212 108.457 122.902 108.677C121.403 108.914 119.887 109.025 118.369 109.01C117.082 109.047 115.799 108.827 114.599 108.362C113.633 107.97 112.785 107.338 112.135 106.528C111.494 105.699 111.037 104.745 110.794 103.729C110.508 102.557 110.369 101.354 110.38 100.147V89.3332H113.863V99.4205C113.863 101.771 114.236 103.452 114.982 104.464C115.728 105.476 116.985 105.983 118.753 105.983C119.123 105.983 119.51 105.983 119.906 105.948C120.302 105.913 120.677 105.892 121.03 105.853C121.382 105.814 121.691 105.779 121.979 105.745C122.189 105.722 122.396 105.679 122.597 105.615V89.3202H126.08L126.058 108.046Z",\n fill: "#231F20"\n }\n ),\n /* @__PURE__ */ c(\n "path",\n {\n d: "M136.547 106.121C137.966 106.121 139.017 105.935 139.699 105.563C140.025 105.397 140.296 105.14 140.478 104.823C140.661 104.507 140.747 104.145 140.726 103.781C140.738 103.391 140.652 103.004 140.476 102.654C140.301 102.305 140.041 102.004 139.721 101.778C138.681 101.098 137.567 100.54 136.399 100.113C135.65 99.8245 134.935 99.5217 134.252 99.2045C133.613 98.9222 133.015 98.554 132.476 98.1101C131.934 97.6596 131.503 97.0906 131.218 96.4476C130.934 95.8045 130.802 95.1048 130.835 94.403C130.805 93.6247 130.962 92.8504 131.293 92.1442C131.624 91.438 132.119 90.82 132.737 90.3413C134.009 89.3377 135.738 88.8374 137.927 88.8403C138.475 88.8403 139.023 88.8707 139.568 88.9311C140.117 88.9917 140.626 89.0695 141.101 89.1517C141.575 89.2339 141.972 89.3334 142.35 89.4329C142.729 89.5324 142.99 89.6189 143.191 89.6924L142.555 92.6598C141.998 92.3949 141.414 92.189 140.814 92.0456C139.873 91.82 138.907 91.7139 137.94 91.7298C137.059 91.7105 136.187 91.9081 135.402 92.3051C135.064 92.4672 134.782 92.7241 134.59 93.044C134.398 93.3638 134.305 93.7326 134.322 94.1046C134.313 94.4886 134.395 94.8694 134.562 95.2163C134.742 95.557 134.998 95.8528 135.31 96.0814C135.697 96.3702 136.116 96.6127 136.56 96.8038C137.056 97.0244 137.653 97.2623 138.349 97.5088C139.272 97.8549 140.091 98.1923 140.814 98.5254C141.481 98.8287 142.104 99.2217 142.664 99.6933C143.171 100.138 143.573 100.689 143.839 101.307C144.13 102.045 144.269 102.833 144.249 103.625C144.249 105.407 143.583 106.756 142.25 107.67C140.918 108.584 139.021 109.041 136.56 109.041C135.202 109.081 133.846 108.935 132.528 108.608C131.859 108.426 131.199 108.209 130.552 107.96L131.183 104.992C131.584 105.144 132.215 105.364 133.09 105.663C134.211 105.997 135.377 106.151 136.547 106.121Z",\n fill: "#231F20"\n }\n ),\n /* @__PURE__ */ c(\n "path",\n {\n d: "M151.924 89.3201H159.273V92.2139H151.924V101.112C151.908 101.915 151.983 102.717 152.146 103.504C152.254 104.043 152.485 104.55 152.821 104.987C153.112 105.343 153.5 105.608 153.94 105.749C154.447 105.904 154.976 105.979 155.507 105.969C156.36 105.998 157.211 105.879 158.023 105.619C158.659 105.385 159.099 105.217 159.33 105.117L160 107.972C159.408 108.234 158.797 108.451 158.171 108.621C157.2 108.894 156.194 109.025 155.185 109.01C154.075 109.045 152.968 108.876 151.919 108.513C151.104 108.208 150.387 107.687 149.847 107.008C149.297 106.279 148.921 105.436 148.746 104.542C148.521 103.426 148.415 102.289 148.428 101.151V83.9433L151.911 83.3507L151.924 89.3201Z",\n fill: "#231F20"\n }\n ),\n /* @__PURE__ */ c(\n "path",\n {\n style: { mixBlendMode: "multiply" },\n d: "M44.6041 45.7437C44.7899 46.4445 44.9989 47.1395 45.2311 47.8287C45.4183 48.3997 45.6229 48.9663 45.8406 49.5243C46.0583 50.078 46.276 50.6317 46.5328 51.1724C47.3081 52.9092 48.2224 54.5814 49.267 56.1728C51.6572 55.4158 56.8643 53.4477 65.3758 51.1032C71.9979 49.2734 86.8093 45.6269 100.376 42.7331C109.026 40.8861 113.733 39.7311 115.178 39.2726C115.625 39.1312 116.042 38.9115 116.41 38.6237C116.519 38.5215 116.584 38.3825 116.593 38.2344C116.624 37.6245 116.641 37.0146 116.641 36.396C116.641 33.5468 116.307 30.7073 115.644 27.9351C109.288 29.8341 92.2428 33.3422 77.9451 36.7637C62.7375 40.4016 49.5892 44.3725 44.6041 45.7437Z",\n fill: "url(#paint0_linear)"\n }\n ),\n /* @__PURE__ */ c(\n "path",\n {\n style: { mixBlendMode: "multiply" },\n d: "M45.1054 25.3396V25.3959C45.0792 25.4867 45.0488 25.5775 45.0183 25.6727L44.9965 25.7462C44.9486 25.902 44.9008 26.062 44.8572 26.2264C44.8093 26.3864 44.7614 26.5508 44.7179 26.7152C60.8529 22.8221 72.2118 19.6384 82.0034 16.5975C87.7459 14.811 91.956 13.1933 94.799 11.7658L94.9906 11.6663L95.0515 11.636L95.1822 11.5668L95.2562 11.5322L95.3694 11.4717L95.4477 11.4284L95.5522 11.3722L95.6306 11.3332L95.7351 11.2727L95.8047 11.2337L95.9136 11.1775L95.9789 11.1386L96.0877 11.0737L96.1487 11.0434L96.2967 10.9569L96.4534 10.8661L96.5057 10.8358L96.6102 10.7709L96.6668 10.7363L96.7582 10.6801L96.8191 10.6411L96.9062 10.5849L96.9672 10.546L97.0499 10.4941L97.1065 10.4551L97.1892 10.4032L97.2415 10.3643L97.3329 10.3037L97.3764 10.2778L97.5027 10.1869C98.4344 9.52945 99.8015 8.3226 99.7013 6.89514V6.86054C99.6317 6.15979 98.9917 5.16057 97.0499 4.10511L96.928 4.04023L96.7843 3.96669L96.5884 3.8672L96.5187 3.8326L96.0834 3.62497L95.9963 3.58171L95.7786 3.4779L95.6698 3.42599L95.5 3.34813L95.3781 3.29189L95.2475 3.23134L95.1168 3.17078L94.9993 3.11887L94.8556 3.05831L94.7511 3.01073L94.5988 2.94584L94.516 2.91124L93.9196 2.66036L93.8673 2.63873L93.6801 2.56086L93.6148 2.53491L93.4276 2.46137H93.3666L93.1707 2.38352H93.1359C92.8268 2.26672 92.5177 2.15426 92.2042 2.04612L91.9778 1.96825H91.9517L91.7253 1.89472C91.3204 1.76062 90.9155 1.63086 90.5062 1.50974L90.2711 1.44053C89.9272 1.34104 89.5832 1.2502 89.2349 1.15936C89.2563 1.39535 89.2563 1.63278 89.2349 1.86877C89.109 2.70874 88.6842 3.47606 88.0377 4.03158C86.6575 5.32927 83.9234 6.67454 80.5231 7.86409C76.8921 9.13582 69.347 11.6058 62.6727 13.2711C58.184 14.3871 52.2716 15.8405 49.433 16.4548L49.1065 16.9566V16.9782L49.0542 17.0604L48.9236 17.268V17.3026L48.9018 17.3415L48.867 17.3934L48.7408 17.6011L48.7059 17.6573L48.6667 17.7222L48.5361 17.9385C48.436 18.1028 48.3359 18.2759 48.2401 18.4446C48.2401 18.4792 48.2009 18.5138 48.1791 18.5484L48.0572 18.769C48.04 18.8016 48.0211 18.8334 48.0006 18.8642L47.8831 19.0848L47.8352 19.1713V19.2016L47.7133 19.4308C47.6175 19.6125 47.5217 19.7942 47.4303 19.9758L47.3867 20.0667L47.2692 20.3003L47.2387 20.3608V20.4041L47.1212 20.6377C47.1212 20.6723 47.0907 20.7069 47.0733 20.7458L46.8773 21.1784C46.812 21.3168 46.7467 21.4552 46.6858 21.6109L46.664 21.6542C46.6248 21.7407 46.59 21.8229 46.5552 21.9094V21.9354L46.5203 22.0132C46.4855 22.0954 46.4507 22.1819 46.4115 22.2641L46.3723 22.3593C46.3114 22.5063 46.2504 22.6534 46.1938 22.7918C46.1329 22.9389 46.0763 23.0903 46.0197 23.2244V23.2633L45.9152 23.5358C45.9152 23.5661 45.8934 23.5964 45.8803 23.631L45.7846 23.8949V23.9338L45.7628 23.9857C45.7105 24.1371 45.654 24.2928 45.6017 24.4485C45.5451 24.6086 45.4929 24.7643 45.4406 24.92L45.1054 25.3396Z",\n fill: "url(#paint1_linear)"\n }\n ),\n /* @__PURE__ */ c(\n "path",\n {\n style: { mixBlendMode: "multiply" },\n d: "M44.7915 36.9239C45.7885 36.9239 48.3572 36.7984 51.2089 36.5259C56.1765 36.0544 66.1074 34.7697 77.4358 33.3163C86.2565 32.183 105.552 29.3973 115.644 27.9309L115.596 27.7276C115.562 27.5978 115.531 27.4724 115.501 27.3469C115.501 27.3037 115.475 27.2561 115.466 27.2128C115.444 27.1263 115.422 27.0398 115.396 26.9533C115.37 26.8668 115.396 26.8625 115.361 26.8192L115.27 26.4861C115.261 26.4608 115.253 26.4347 115.248 26.4083L115.17 26.1401L115.144 26.0579L115.104 25.9238C115.078 25.8373 115.052 25.7508 115.022 25.6643L114.983 25.5302L114.891 25.2447V25.2014L114.856 25.1019C114.835 25.0414 114.817 24.9765 114.795 24.9159C114.774 24.8554 114.765 24.8251 114.752 24.7818C114.733 24.7366 114.717 24.6904 114.704 24.6434C114.678 24.5612 114.647 24.4834 114.621 24.4055C114.595 24.3276 114.591 24.3103 114.573 24.2671L114.43 23.9081L114.386 23.7913C114.377 23.7614 114.365 23.7325 114.351 23.7048C114.329 23.6355 114.303 23.5707 114.277 23.5058C114.261 23.4558 114.242 23.4067 114.221 23.3587C114.207 23.3262 114.195 23.293 114.186 23.2592L114.134 23.1251L114.073 22.9824L114.02 22.844C113.994 22.7877 113.972 22.7272 113.946 22.6709L113.894 22.5325L113.855 22.446L113.785 22.273L113.72 22.1216C113.685 22.048 113.655 21.9745 113.624 21.901L113.559 21.7539L113.498 21.6241C113.476 21.5636 113.45 21.5073 113.424 21.4511C113.398 21.3949 113.376 21.3516 113.354 21.2997C113.332 21.2478 113.311 21.2002 113.285 21.1526L113.245 21.0618L113.171 20.9061L113.08 20.7201C113.058 20.6682 113.032 20.6163 113.006 20.5644C112.98 20.5124 112.914 20.3697 112.862 20.2745L112.784 20.1102L112.706 19.9631V19.9198V19.8939L112.623 19.7338L112.597 19.6776C112.571 19.6343 112.549 19.5868 112.523 19.5392C112.498 19.4873 112.47 19.4368 112.44 19.3878L112.288 19.098L112.196 18.9336C112.161 18.873 112.131 18.8125 112.096 18.7562V18.7346L112.009 18.5746L111.974 18.5183C111.952 18.4751 111.926 18.4318 111.9 18.3886L111.813 18.2328L111.73 18.0901L111.634 17.93L111.53 17.757C108.948 18.129 105.814 18.5659 101.952 19.098C93.4881 20.2572 83.9839 21.8015 74.2533 23.0516C59.3112 24.9722 49.5283 26.3953 44.7261 26.776L44.6608 27.0052V27.0485L44.6347 27.1436C44.6347 27.2128 44.5955 27.2821 44.5781 27.3513L44.5389 27.5156V27.5935V27.6411V27.68L44.5128 27.7968C43.8332 30.59 43.4883 33.4533 43.4853 36.3269C43.3939 36.7033 43.9381 36.9196 44.7915 36.9239Z",\n fill: "url(#paint2_linear)"\n }\n ),\n /* @__PURE__ */ c(\n "path",\n {\n style: { mixBlendMode: "multiply" },\n d: "M107.624 60.2993C105.182 62.5659 96.4048 66.6666 87.7104 68.3709C80.9479 69.6767 74.0758 70.34 67.1868 70.3521C67.3403 70.5155 67.5361 70.6338 67.7528 70.6938C68.3449 70.9057 68.9414 71.0961 69.5466 71.2778L70.3259 71.4984H70.3607L70.709 71.5892H70.7613L71.1313 71.6844H71.1836L71.497 71.7579L71.5972 71.7838L71.9237 71.8574H72.0108L72.3025 71.9223L72.4505 71.9526L72.6682 72.0001L72.8249 72.0304L73.1253 72.0866L73.3126 72.1212L73.4736 72.1515L73.6783 72.1861H73.7653L74.2007 72.2553H74.3008L74.549 72.2943H74.5926L75.1281 72.3678H75.1498L75.4285 72.4024H75.4546C75.7463 72.437 76.0336 72.4716 76.3253 72.4976L76.9175 72.5538C77.9333 72.6374 78.9594 72.6793 79.9956 72.6793C85.23 72.685 90.4047 71.5734 95.1692 69.4196C99.9336 67.2658 104.177 64.1201 107.611 60.1955L107.624 60.2993Z",\n fill: "url(#paint3_linear)"\n }\n ),\n /* @__PURE__ */ c(\n "path",\n {\n style: { mixBlendMode: "multiply" },\n d: "M110.124 48.75C109.179 48.75 103.737 48.8754 94.9552 49.7103C83.4569 50.8047 66.7037 53.2054 59.9337 54.356C55.7236 55.0654 51.8009 55.9003 49.4324 56.4323L49.7546 56.9081L49.8286 57.012C49.8722 57.0812 49.9201 57.146 49.9679 57.2109L50.0463 57.3234L50.19 57.5267L50.2379 57.5959L50.5426 58.0068L50.6036 58.089L50.756 58.2923C50.7821 58.3226 50.8039 58.3572 50.83 58.3918L50.9867 58.5908L51.0433 58.6643L51.396 59.0969V59.1229L51.5701 59.3305L51.6354 59.4127L51.8052 59.6203L51.8575 59.6809C52.0534 59.9101 52.245 60.1134 52.4452 60.36L52.4931 60.4162L52.6847 60.6282L52.7282 60.6801L53.3639 61.3679L53.3856 61.3895L53.599 61.6101L53.6338 61.6447C53.9342 61.9561 54.239 62.2589 54.5524 62.5574L54.5742 62.579C54.892 62.8818 55.2142 63.1803 55.5407 63.4701C55.876 63.7643 56.2112 64.0541 56.5552 64.3352C56.738 64.4866 57.1386 64.5126 58.3924 64.279C61.0047 63.7859 70.8746 62.0859 81.8025 60.5979C89.3722 59.6313 96.9897 59.0796 104.621 58.9455C106.541 58.9671 108.36 59.3781 107.629 60.2994L107.873 60.0183V59.9966L108.104 59.7241V59.7025L108.33 59.43L108.36 59.3997L108.587 59.1142C108.87 58.7595 109.148 58.4005 109.418 58.0371C109.688 57.6738 109.954 57.3018 110.211 56.9298L110.42 56.6226L110.441 56.5967L110.642 56.2896V56.2636L110.846 55.9522C111.412 55.0654 111.939 54.157 112.431 53.2184C112.492 53.1059 112.549 52.9934 112.605 52.881L112.775 52.5393C113.241 51.5876 113.672 50.61 114.081 49.6151C114.338 49.0658 113.898 48.75 110.124 48.75Z",\n fill: "url(#paint4_linear)"\n }\n ),\n /* @__PURE__ */ c(\n "path",\n {\n style: { mixBlendMode: "multiply" },\n d: "M73.9402 4.19608C74.2449 2.03327 68.4545 2.38798 68.2019 1.93811C65.2014 2.95311 62.3473 4.3535 59.7121 6.10369C59.5989 6.17722 59.551 6.3416 60.0778 6.44541C61.8255 6.74741 63.594 6.91516 65.3676 6.94718C69.0291 6.97746 73.6615 6.17289 73.9402 4.19608Z",\n fill: "url(#paint5_linear)"\n }\n ),\n /* @__PURE__ */ c(\n "path",\n {\n style: { mixBlendMode: "multiply" },\n d: "M112.196 50.8005C111.282 51.1682 106.319 52.6648 100.898 54.7671C95.2384 56.9602 91.2634 59.6248 91.2112 62.5532C91.172 64.8588 95.6302 66.5025 96.649 66.9697C97.6678 67.4368 98.1032 67.7569 98.2164 67.9949C105.509 63.8357 111.146 57.3179 114.186 49.5287C113.933 50.0997 113.289 50.3679 112.196 50.8005Z",\n fill: "url(#paint6_linear)"\n }\n ),\n /* @__PURE__ */ c(\n "path",\n {\n style: { mixBlendMode: "multiply" },\n d: "M51.4483 31.9322C57.8831 29.1465 64.6314 26.0363 69.0417 23.9687C75.9468 20.7374 81.9724 16.8011 80.6619 12.7913C79.4951 9.21828 74.6973 9.64652 65.1234 11.3508C58.9672 12.4452 50.8213 14.4609 49.7242 15.9187L49.685 15.9836L49.5457 16.1825C45.621 22.0103 43.4825 28.8442 43.3895 35.8555C43.3895 36.0155 43.3895 36.1713 43.3895 36.3313C43.3982 35.6825 45.7361 34.4064 51.4483 31.9322Z",\n fill: "url(#paint7_linear)"\n }\n ),\n /* @__PURE__ */ c(\n "path",\n {\n style: { mixBlendMode: "multiply" },\n d: "M104.451 17.2682C96.9412 18.3669 85.0293 20.5557 86.1918 27.5546C87.0887 32.94 97.9164 34.5102 102.444 35.3753C106.036 36.0631 113.067 37.019 116.076 37.7631C116.476 37.8625 116.603 38.0572 116.594 38.2691C116.594 37.9577 116.62 37.6463 116.629 37.3348V37.2786C116.629 36.9902 116.629 36.7018 116.629 36.4135C116.638 29.9276 114.895 23.5581 111.583 17.969L111.452 17.7657C111.078 17.1255 108.483 16.6799 104.451 17.2682Z",\n fill: "url(#paint8_linear)"\n }\n ),\n /* @__PURE__ */ c(\n "path",\n {\n style: { mixBlendMode: "multiply" },\n d: "M85.6947 43.33C84.9763 40.7 81.0971 38.7924 75.5635 38.9308C69.0918 39.0504 62.6494 39.8287 56.3374 41.2537C52.5407 42.0574 48.8227 43.1923 45.2266 44.645C44.6519 44.8829 44.4604 45.19 44.5649 45.6356C44.591 45.7307 44.6171 45.8302 44.6389 45.9254C44.6708 46.0494 44.7056 46.1748 44.7434 46.3017C44.7434 46.3406 44.7434 46.3796 44.7738 46.4142C44.8043 46.518 44.8348 46.6175 44.8609 46.717L44.887 46.8035C44.9262 46.9289 44.9654 47.05 45.0002 47.1712C45.0002 47.2101 45.0263 47.2447 45.0351 47.2793L45.1265 47.5648C45.1401 47.6017 45.1517 47.6392 45.1613 47.6773C45.2005 47.7984 45.244 47.9152 45.2832 48.0363C45.2832 48.0666 45.2832 48.0968 45.3137 48.1315L45.4138 48.4126C45.4138 48.4559 45.4443 48.4948 45.4574 48.5381L45.5749 48.8625C45.587 48.8906 45.5972 48.9195 45.6054 48.949L45.723 49.2604L45.7752 49.3902C45.8057 49.4767 45.8405 49.5632 45.8753 49.6498C45.8872 49.6868 45.9018 49.7229 45.9189 49.7579C45.9624 49.8704 46.006 49.9828 46.0538 50.0953C46.0538 50.1385 46.0887 50.1861 46.1104 50.2294L46.2062 50.463L46.2628 50.5971L46.4065 50.9258C46.4065 50.9691 46.4457 51.0123 46.4631 51.0599L46.5632 51.2805C46.5632 51.3281 46.6111 51.38 46.6329 51.4319L46.7461 51.6785L46.8375 51.8731L46.942 52.0894L47.0204 52.2538C47.0509 52.3143 47.0813 52.3792 47.1162 52.4398C47.151 52.5003 47.1902 52.5912 47.225 52.6647C47.2598 52.7383 47.3034 52.8161 47.3382 52.8896L47.4296 53.067C47.4601 53.1189 47.4862 53.1708 47.5123 53.2227C47.5385 53.2746 47.5776 53.3438 47.6081 53.4044L47.7518 53.6683L47.8606 53.8716L47.939 54.0057C47.9738 54.0705 48.0087 54.1354 48.0479 54.2003L48.1132 54.3171C48.1828 54.4339 48.2481 54.555 48.3221 54.6761C48.3221 54.7107 48.3613 54.7453 48.3831 54.7799L48.505 54.9876L48.5616 55.0784L48.8228 55.511V55.5499L48.9665 55.7705L49.01 55.844C49.1624 56.0776 49.3148 56.3112 49.4715 56.5448L49.502 56.5924C49.6674 56.8389 49.8329 57.0812 50.007 57.3234C51.365 59.2348 52.903 61.0134 54.6002 62.6353L54.7831 62.804L54.8223 62.8472C55.053 63.0592 55.2794 63.2798 55.5145 63.4745L56.2242 64.0887L56.2764 64.1319L56.529 64.3396C56.5641 64.371 56.6057 64.3947 56.6509 64.4088C56.5551 64.3742 56.7162 64.2055 57.2081 64.0238C60.5317 62.7792 63.7844 61.3554 66.9518 59.7587C71.7975 57.3753 73.6696 56.3761 78.8724 52.6042C83.853 49.0615 86.6612 46.8338 85.6947 43.33Z",\n fill: "url(#paint9_linear)"\n }\n ),\n /* @__PURE__ */ c(\n "path",\n {\n style: { mixBlendMode: "multiply" },\n d: "M82.8261 68.6569C82.3254 67.1559 78.394 66.6065 73.631 67.5582C71.7122 67.9143 69.8508 68.5269 68.0974 69.3792C66.948 69.9762 66.813 70.3482 67.7839 70.7072L67.9668 70.7721L68.1235 70.824L68.8811 71.0749H68.9028L69.6734 71.3128L69.939 71.3863H69.9913C72.3695 72.0554 74.8099 72.483 77.2751 72.6624C77.976 71.9443 83.6098 71.023 82.8261 68.6569Z",\n fill: "url(#paint10_linear)"\n }\n ),\n /* @__PURE__ */ c(\n "path",\n {\n style: { mixBlendMode: "multiply" },\n d: "M81.1279 3.89336C91.603 3.75062 96.022 4.86231 98.0334 5.56738C99.2264 5.99995 99.5355 6.38493 99.6226 6.64879C99.4353 5.96967 98.73 5.08291 97.0103 4.14858C91.1879 1.12201 84.6535 -0.293402 78.0915 0.050578C71.5295 0.394558 65.1813 2.48527 59.7118 6.10376C66.7732 4.75598 73.9384 4.01644 81.1279 3.89336Z",\n fill: "url(#paint11_linear)"\n }\n ),\n /* @__PURE__ */ c(\n "path",\n {\n style: { mixBlendMode: "multiply" },\n d: "M82.8261 68.6569C82.3254 67.1559 78.394 66.6065 73.631 67.5582C71.7122 67.9143 69.8508 68.5269 68.0974 69.3792C66.948 69.9762 66.813 70.3482 67.7839 70.7072L67.9668 70.7721L68.1235 70.824L68.8811 71.0749H68.9028L69.6734 71.3128L69.939 71.3863H69.9913C72.3695 72.0554 74.8099 72.483 77.2751 72.6624C77.976 71.9443 83.6098 71.023 82.8261 68.6569Z",\n fill: "url(#paint12_linear)"\n }\n ),\n /* @__PURE__ */ c(\n "path",\n {\n d: "M81.1279 3.89336C91.603 3.75062 96.022 4.86231 98.0334 5.56738C99.2264 5.99995 99.5355 6.38493 99.6226 6.64879C99.4353 5.96967 98.73 5.08291 97.0103 4.14858C91.1879 1.12201 84.6535 -0.293402 78.0915 0.050578C71.5295 0.394558 65.1813 2.48527 59.7118 6.10376C66.7732 4.75598 73.9384 4.01644 81.1279 3.89336Z",\n fill: "url(#paint13_linear)"\n }\n ),\n /* @__PURE__ */ c(\n "path",\n {\n style: { mixBlendMode: "multiply" },\n d: "M51.4485 31.9323C57.8833 29.1466 64.6316 26.0364 69.0419 23.9688L69.7647 23.6271C57.3086 25.2535 48.9886 26.4344 44.6784 26.7761C44.6784 26.8194 44.6566 26.8583 44.6436 26.8972C44.6354 26.9338 44.6253 26.9699 44.6131 27.0054C44.5913 27.0789 44.5739 27.1525 44.5521 27.226V27.2866C44.5304 27.3644 44.5086 27.4423 44.4912 27.5201V27.585V27.611L44.4259 27.8792V27.9441C44.4259 28.0262 44.3867 28.1084 44.3693 28.1906V28.2468C44.3214 28.4501 44.2778 28.6535 44.2343 28.8568V28.9043L44.1821 29.1596V29.2331C44.1821 29.3153 44.1516 29.3931 44.1342 29.471V29.5402C44.1342 29.6397 44.0993 29.7392 44.0776 29.8387C44.0776 29.9425 44.0427 30.0463 44.021 30.1501V30.202C44.021 30.2842 43.9905 30.3707 43.9774 30.4529V30.5351L43.9382 30.7687V30.8465L43.8991 31.1147V31.1537C43.8991 31.2575 43.8686 31.3613 43.8555 31.4651V31.5127C43.8555 31.5992 43.8338 31.6857 43.825 31.7722V31.8587L43.7989 32.0837V32.1745L43.7728 32.4254V32.4816C43.7728 32.5855 43.751 32.6893 43.7423 32.7931V32.8363L43.7162 33.1045C43.7162 33.1305 43.7162 33.1608 43.7162 33.191C43.7162 33.2213 43.7162 33.3424 43.6944 33.416C43.6727 33.4895 43.6944 33.4809 43.6944 33.5111C43.6944 33.5414 43.6944 33.6712 43.6727 33.7534C43.6748 33.7764 43.6748 33.7996 43.6727 33.8226C43.6727 33.9307 43.6727 34.0345 43.6727 34.1383V34.1643C43.6727 34.2595 43.6727 34.3546 43.6727 34.4498C43.6748 34.48 43.6748 34.5104 43.6727 34.5406C43.6727 34.6142 43.6727 34.692 43.6727 34.7656C43.6727 34.8391 43.6727 34.8305 43.6727 34.8651C43.6727 34.8997 43.6727 35.0208 43.6727 35.0986C43.6747 35.126 43.6747 35.1535 43.6727 35.1808C43.6727 35.2846 43.6727 35.3928 43.6727 35.4966C43.6727 35.6004 43.6727 35.7042 43.6727 35.8037V35.8729C43.6727 36.0157 43.6727 36.1627 43.6727 36.3055C43.3984 35.6826 45.7363 34.4065 51.4485 31.9323Z",\n fill: "url(#paint14_linear)"\n }\n ),\n /* @__PURE__ */ c(\n "path",\n {\n style: { mixBlendMode: "multiply" },\n d: "M110.124 48.75C109.179 48.75 103.737 48.8754 94.9552 49.7103C83.4569 50.8047 66.7037 53.2054 59.9337 54.356C55.7236 55.0654 51.8009 55.9003 49.4324 56.4323L49.7546 56.9081L49.8286 57.012C49.8722 57.0812 49.9201 57.146 49.9679 57.2109L50.0463 57.3234L50.19 57.5267L50.2379 57.5959L50.5426 58.0068L50.6036 58.089L50.756 58.2923C50.7821 58.3226 50.8039 58.3572 50.83 58.3918L50.9867 58.5908L51.0433 58.6643L51.396 59.0969V59.1229L51.5701 59.3305L51.6354 59.4127L51.8052 59.6203L51.8575 59.6809C52.0534 59.9101 52.245 60.1134 52.4452 60.36L52.4931 60.4162L52.6847 60.6282L52.7282 60.6801L53.3639 61.3679L53.3856 61.3895L53.599 61.6101L53.6338 61.6447C53.9342 61.9561 54.239 62.2589 54.5524 62.5574L54.5742 62.579C54.892 62.8818 55.2142 63.1803 55.5407 63.4701C55.876 63.7643 56.2112 64.0541 56.5552 64.3352C56.738 64.4866 57.1386 64.5126 58.3924 64.279C61.0047 63.7859 70.8746 62.0859 81.8025 60.5979C89.3722 59.6313 96.9897 59.0796 104.621 58.9455C106.541 58.9671 108.36 59.3781 107.629 60.2994L107.873 60.0183V59.9966L108.104 59.7241V59.7025L108.33 59.43L108.36 59.3997L108.587 59.1142C108.87 58.7595 109.148 58.4005 109.418 58.0371C109.688 57.6738 109.954 57.3018 110.211 56.9298L110.42 56.6226L110.441 56.5967L110.642 56.2896V56.2636L110.846 55.9522C111.412 55.0654 111.939 54.157 112.431 53.2184C112.492 53.1059 112.549 52.9934 112.605 52.881L112.775 52.5393C113.241 51.5876 113.672 50.61 114.081 49.6151C114.338 49.0658 113.898 48.75 110.124 48.75Z",\n fill: "url(#paint15_linear)"\n }\n ),\n /* @__PURE__ */ c(\n "path",\n {\n d: "M51.5183 118.921C50.2121 118.921 49.2282 119.318 48.5447 120.123C47.8611 120.928 47.5128 122.035 47.5128 123.454C47.5063 124.081 47.5899 124.706 47.761 125.309C47.9042 125.832 48.1514 126.32 48.4881 126.746C48.8115 127.143 49.2226 127.461 49.6897 127.676C50.2186 127.908 50.7923 128.021 51.3702 128.009C51.7161 128.012 52.062 127.997 52.4064 127.965C52.6404 127.946 52.8722 127.906 53.0987 127.844V123.346H55.3887V129.363C54.8677 129.537 54.3334 129.671 53.7909 129.761C52.9292 129.916 52.0544 129.988 51.1787 129.977C50.3287 129.988 49.4841 129.841 48.6883 129.544C47.9609 129.272 47.3046 128.84 46.7683 128.281C46.2211 127.692 45.803 126.997 45.5406 126.239C45.2373 125.342 45.0901 124.4 45.1052 123.454C45.0879 122.505 45.2519 121.561 45.5885 120.672C45.8801 119.908 46.3244 119.211 46.8946 118.622C47.4493 118.062 48.119 117.626 48.8581 117.346C49.6241 117.056 50.4374 116.909 51.257 116.913C51.7775 116.909 52.2975 116.948 52.8113 117.03C53.2079 117.096 53.6004 117.184 53.9868 117.294C54.2656 117.372 54.5367 117.474 54.7966 117.601L55.232 117.835L54.5398 119.695C54.1147 119.453 53.6594 119.269 53.1857 119.145C52.6427 118.996 52.0818 118.92 51.5183 118.921Z",\n fill: "#231F20"\n }\n ),\n /* @__PURE__ */ c(\n "path",\n {\n d: "M64.1919 117.078C66.0117 117.078 67.4006 117.406 68.3671 118.068C68.8465 118.41 69.2305 118.867 69.4834 119.397C69.7362 119.926 69.8495 120.511 69.8126 121.096C69.8126 122.798 68.9694 123.951 67.283 124.557C67.5152 124.845 67.7765 125.183 68.0667 125.569C68.3584 125.967 68.6545 126.399 68.9375 126.867C69.2205 127.334 69.5339 127.805 69.8082 128.294C70.0825 128.783 70.335 129.259 70.5527 129.73H67.9883C67.759 129.298 67.5109 128.865 67.2438 128.433C66.9783 128 66.7083 127.567 66.4341 127.135C66.1598 126.702 65.8898 126.326 65.6243 125.958C65.3587 125.591 65.1105 125.262 64.8798 124.972C64.71 124.972 64.5619 124.972 64.4444 124.972H63.012V129.709H60.7176V117.385C61.3058 117.26 61.9024 117.177 62.5026 117.138C63.1296 117.099 63.6955 117.078 64.1919 117.078ZM64.3573 119.046C63.8697 119.046 63.4213 119.046 63.012 119.102V123.147H64.009C64.5024 123.15 64.9954 123.121 65.4849 123.06C65.8565 123.017 66.2167 122.905 66.5472 122.731C66.8191 122.587 67.043 122.368 67.1916 122.1C67.3495 121.786 67.4245 121.438 67.4093 121.088C67.4216 120.75 67.3467 120.415 67.1916 120.114C67.0473 119.848 66.83 119.627 66.5647 119.478C66.2633 119.312 65.9346 119.199 65.5938 119.145C65.1867 119.077 64.7745 119.044 64.3617 119.046H64.3573Z",\n fill: "#231F20"\n }\n ),\n /* @__PURE__ */ c(\n "path",\n {\n d: "M86.3392 123.454C86.3577 124.421 86.1938 125.384 85.856 126.291C85.5707 127.059 85.1256 127.757 84.5498 128.342C84.0011 128.889 83.3404 129.312 82.6124 129.583C81.0827 130.137 79.4053 130.137 77.8756 129.583C77.145 129.312 76.4814 128.889 75.9294 128.342C75.3555 127.756 74.9107 127.058 74.6233 126.291C73.9674 124.46 73.9674 122.46 74.6233 120.629C74.9226 119.861 75.3776 119.161 75.9599 118.574C76.5162 118.027 77.1823 117.603 77.9147 117.329C79.4295 116.775 81.0933 116.775 82.6081 117.329C83.3374 117.599 83.9986 118.024 84.5455 118.574C85.1149 119.166 85.559 119.864 85.8516 120.629C86.1932 121.531 86.3587 122.49 86.3392 123.454ZM76.4998 123.454C76.4915 124.087 76.5766 124.718 76.7523 125.327C76.903 125.845 77.1528 126.33 77.4881 126.754C77.8063 127.142 78.208 127.454 78.6636 127.667C79.1537 127.89 79.6877 128.001 80.2266 127.991C80.7597 127.999 81.2878 127.888 81.7721 127.667C82.2277 127.454 82.6294 127.142 82.9477 126.754C83.2829 126.33 83.5327 125.845 83.6834 125.327C84.02 124.102 84.02 122.81 83.6834 121.585C83.5327 121.067 83.2829 120.582 82.9477 120.158C82.6294 119.77 82.2277 119.458 81.7721 119.245C81.2878 119.024 80.7597 118.913 80.2266 118.921C79.6877 118.911 79.1537 119.022 78.6636 119.245C78.2058 119.458 77.8036 119.774 77.4881 120.166C77.1544 120.592 76.9048 121.076 76.7523 121.594C76.5763 122.198 76.4913 122.825 76.4998 123.454Z",\n fill: "#231F20"\n }\n ),\n /* @__PURE__ */ c(\n "path",\n {\n d: "M95.9306 129.998C95.1733 130.016 94.4197 129.89 93.7101 129.626C93.1244 129.402 92.5985 129.047 92.1733 128.588C91.7628 128.134 91.4554 127.597 91.272 127.014C91.0743 126.37 90.9774 125.701 90.9847 125.028V117.203H93.2922V124.812C93.2826 125.303 93.3471 125.793 93.4838 126.265C93.5904 126.63 93.7762 126.966 94.028 127.252C94.2598 127.499 94.5458 127.69 94.8639 127.81C95.2112 127.935 95.5785 127.996 95.948 127.991C96.3202 127.996 96.6903 127.934 97.0408 127.81C97.3619 127.691 97.6511 127.5 97.8854 127.252C98.1372 126.966 98.3229 126.63 98.4296 126.265C98.5662 125.793 98.6308 125.303 98.6212 124.812V117.203H100.933V125.028C100.942 125.701 100.842 126.372 100.637 127.014C100.449 127.597 100.139 128.133 99.727 128.588C99.2962 129.048 98.7643 129.404 98.1727 129.626C97.4554 129.889 96.6948 130.015 95.9306 129.998Z",\n fill: "#231F20"\n }\n ),\n /* @__PURE__ */ c(\n "path",\n {\n d: "M109.976 117.078C111.805 117.078 113.208 117.408 114.186 118.068C115.161 118.734 115.649 119.768 115.649 121.178C115.666 121.83 115.532 122.477 115.257 123.069C115.002 123.595 114.61 124.043 114.121 124.366C113.566 124.723 112.949 124.971 112.301 125.097C111.494 125.266 110.67 125.346 109.845 125.335H108.7V129.743H106.41V117.385C106.993 117.257 107.586 117.174 108.182 117.138C108.831 117.099 109.427 117.078 109.976 117.078ZM110.137 119.046C109.558 119.046 109.079 119.046 108.7 119.102V123.367H109.811C110.684 123.411 111.556 123.252 112.357 122.904C112.95 122.597 113.25 122.018 113.25 121.174C113.261 120.816 113.179 120.461 113.011 120.145C112.856 119.872 112.631 119.647 112.357 119.491C112.048 119.324 111.713 119.212 111.365 119.158C110.96 119.087 110.549 119.049 110.137 119.046Z",\n fill: "#231F20"\n }\n ),\n /* @__PURE__ */ e1("defs", { children: [\n /* @__PURE__ */ e1(\n "linearGradient",\n {\n id: "paint0_linear",\n x1: "44.6041",\n y1: "42.0583",\n x2: "116.641",\n y2: "42.0583",\n gradientUnits: "userSpaceOnUse",\n children: [\n /* @__PURE__ */ c("stop", { offset: "0.03", stopColor: "#E9F7FE", stopOpacity: "0.4" }),\n /* @__PURE__ */ c("stop", { offset: "0.31", stopColor: "#5EA1D7" }),\n /* @__PURE__ */ c("stop", { offset: "0.55", stopColor: "#4DA3DA" }),\n /* @__PURE__ */ c("stop", { offset: "0.89", stopColor: "#645FAA" }),\n /* @__PURE__ */ c("stop", { offset: "1", stopColor: "#414099" })\n ]\n }\n ),\n /* @__PURE__ */ e1(\n "linearGradient",\n {\n id: "paint1_linear",\n x1: "52.9421",\n y1: "33.7832",\n x2: "88.1087",\n y2: "-1.61628",\n gradientUnits: "userSpaceOnUse",\n children: [\n /* @__PURE__ */ c("stop", { stopColor: "#FFF795", stopOpacity: "0.3" }),\n /* @__PURE__ */ c("stop", { offset: "0.35", stopColor: "#F3C206" }),\n /* @__PURE__ */ c("stop", { offset: "0.65", stopColor: "#FFC20E" }),\n /* @__PURE__ */ c("stop", { offset: "0.95", stopColor: "#F99B1C" }),\n /* @__PURE__ */ c("stop", { offset: "1", stopColor: "#F6891F" })\n ]\n }\n ),\n /* @__PURE__ */ e1(\n "linearGradient",\n {\n id: "paint2_linear",\n x1: "44.4606",\n y1: "27.3383",\n x2: "114.821",\n y2: "27.3383",\n gradientUnits: "userSpaceOnUse",\n children: [\n /* @__PURE__ */ c("stop", { stopColor: "#912A73" }),\n /* @__PURE__ */ c("stop", { offset: "0.17", stopColor: "#C6168D" }),\n /* @__PURE__ */ c("stop", { offset: "0.51", stopColor: "#F175AD" }),\n /* @__PURE__ */ c("stop", { offset: "0.76", stopColor: "#C593C3" }),\n /* @__PURE__ */ c("stop", { offset: "1", stopColor: "white", stopOpacity: "0.5" })\n ]\n }\n ),\n /* @__PURE__ */ e1(\n "linearGradient",\n {\n id: "paint3_linear",\n x1: "74.2486",\n y1: "66.5412",\n x2: "112.379",\n y2: "66.5412",\n gradientUnits: "userSpaceOnUse",\n children: [\n /* @__PURE__ */ c("stop", { stopColor: "#72BF44" }),\n /* @__PURE__ */ c("stop", { offset: "0.19", stopColor: "#91C83D" }),\n /* @__PURE__ */ c("stop", { offset: "0.38", stopColor: "#ACD037" }),\n /* @__PURE__ */ c("stop", { offset: "0.47", stopColor: "#99CA3B" }),\n /* @__PURE__ */ c("stop", { offset: "0.6", stopColor: "#7DC242" }),\n /* @__PURE__ */ c("stop", { offset: "0.72", stopColor: "#4FB848" }),\n /* @__PURE__ */ c("stop", { offset: "0.84", stopColor: "#24AE4D" }),\n /* @__PURE__ */ c("stop", { offset: "0.94", stopColor: "#0AA850" }),\n /* @__PURE__ */ c("stop", { offset: "1", stopColor: "#00A651" })\n ]\n }\n ),\n /* @__PURE__ */ e1(\n "linearGradient",\n {\n id: "paint4_linear",\n x1: "54.4218",\n y1: "56.614",\n x2: "103.589",\n y2: "56.614",\n gradientUnits: "userSpaceOnUse",\n children: [\n /* @__PURE__ */ c("stop", { stopColor: "#0077AC" }),\n /* @__PURE__ */ c("stop", { offset: "0.22", stopColor: "#0083BB" }),\n /* @__PURE__ */ c("stop", { offset: "0.44", stopColor: "#0099DA" }),\n /* @__PURE__ */ c("stop", { offset: "0.65", stopColor: "#00B2DD" }),\n /* @__PURE__ */ c("stop", { offset: "0.67", stopColor: "#00B1DA" }),\n /* @__PURE__ */ c("stop", { offset: "0.83", stopColor: "#00ACC6" }),\n /* @__PURE__ */ c("stop", { offset: "0.94", stopColor: "#00AAA9" }),\n /* @__PURE__ */ c("stop", { offset: "1", stopColor: "#00A99D" })\n ]\n }\n ),\n /* @__PURE__ */ e1(\n "linearGradient",\n {\n id: "paint5_linear",\n x1: "63.674",\n y1: "3.50831",\n x2: "72.83",\n y2: "7.31346",\n gradientUnits: "userSpaceOnUse",\n children: [\n /* @__PURE__ */ c("stop", { stopColor: "#F58220" }),\n /* @__PURE__ */ c("stop", { offset: "1", stopColor: "#FCAF17" })\n ]\n }\n ),\n /* @__PURE__ */ e1(\n "linearGradient",\n {\n id: "paint6_linear",\n x1: "91.2112",\n y1: "58.7423",\n x2: "114.186",\n y2: "58.7423",\n gradientUnits: "userSpaceOnUse",\n children: [\n /* @__PURE__ */ c("stop", { stopColor: "#008A4B" }),\n /* @__PURE__ */ c("stop", { offset: "0.12", stopColor: "#179449" }),\n /* @__PURE__ */ c("stop", { offset: "0.56", stopColor: "#6CB842" }),\n /* @__PURE__ */ c("stop", { offset: "0.76", stopColor: "#8DC63F" }),\n /* @__PURE__ */ c("stop", { offset: "1", stopColor: "#32A443" })\n ]\n }\n ),\n /* @__PURE__ */ e1(\n "linearGradient",\n {\n id: "paint7_linear",\n x1: "43.3851",\n y1: "23.203",\n x2: "80.8404",\n y2: "23.203",\n gradientUnits: "userSpaceOnUse",\n children: [\n /* @__PURE__ */ c("stop", { stopColor: "#FCAF17" }),\n /* @__PURE__ */ c("stop", { offset: "1", stopColor: "#F04E23" })\n ]\n }\n ),\n /* @__PURE__ */ e1(\n "linearGradient",\n {\n id: "paint8_linear",\n x1: "86.1134",\n y1: "27.6324",\n x2: "118.379",\n y2: "27.6324",\n gradientUnits: "userSpaceOnUse",\n children: [\n /* @__PURE__ */ c("stop", { offset: "0.19", stopColor: "#812990" }),\n /* @__PURE__ */ c("stop", { offset: "0.31", stopColor: "#882E92" }),\n /* @__PURE__ */ c("stop", { offset: "0.5", stopColor: "#9C3B97" }),\n /* @__PURE__ */ c("stop", { offset: "0.71", stopColor: "#BC509F" }),\n /* @__PURE__ */ c("stop", { offset: "0.95", stopColor: "#E86DAA" }),\n /* @__PURE__ */ c("stop", { offset: "1", stopColor: "#F173AC" })\n ]\n }\n ),\n /* @__PURE__ */ e1(\n "linearGradient",\n {\n id: "paint9_linear",\n x1: "44.5474",\n y1: "51.6785",\n x2: "85.8906",\n y2: "51.6785",\n gradientUnits: "userSpaceOnUse",\n children: [\n /* @__PURE__ */ c("stop", { stopColor: "#0089CF", stopOpacity: "0.9" }),\n /* @__PURE__ */ c("stop", { offset: "1", stopColor: "#0054A6" })\n ]\n }\n ),\n /* @__PURE__ */ e1(\n "linearGradient",\n {\n id: "paint10_linear",\n x1: "83.1134",\n y1: "71.369",\n x2: "71.0939",\n y2: "68.2428",\n gradientUnits: "userSpaceOnUse",\n children: [\n /* @__PURE__ */ c("stop", { stopColor: "#9ACA3C" }),\n /* @__PURE__ */ c("stop", { offset: "0.34", stopColor: "#7AC340" }),\n /* @__PURE__ */ c("stop", { offset: "1", stopColor: "#33B44A" })\n ]\n }\n ),\n /* @__PURE__ */ e1(\n "linearGradient",\n {\n id: "paint11_linear",\n x1: "66.1727",\n y1: "2.35777",\n x2: "90.9219",\n y2: "5.85813",\n gradientUnits: "userSpaceOnUse",\n children: [\n /* @__PURE__ */ c("stop", { stopColor: "#FDB515" }),\n /* @__PURE__ */ c("stop", { offset: "0.36", stopColor: "#FFD100" }),\n /* @__PURE__ */ c("stop", { offset: "0.58", stopColor: "#FFC907" }),\n /* @__PURE__ */ c("stop", { offset: "0.7", stopColor: "#FFC20E" }),\n /* @__PURE__ */ c("stop", { offset: "0.87", stopColor: "#FBA617" }),\n /* @__PURE__ */ c("stop", { offset: "1", stopColor: "#F78E1E" })\n ]\n }\n ),\n /* @__PURE__ */ e1(\n "linearGradient",\n {\n id: "paint12_linear",\n x1: "72.6079",\n y1: "72.2601",\n x2: "78.815",\n y2: "66.0169",\n gradientUnits: "userSpaceOnUse",\n children: [\n /* @__PURE__ */ c("stop", { stopColor: "#BAD532" }),\n /* @__PURE__ */ c("stop", { offset: "0.03", stopColor: "#B1D334", stopOpacity: "0.93" }),\n /* @__PURE__ */ c("stop", { offset: "0.11", stopColor: "#94CC39", stopOpacity: "0.72" }),\n /* @__PURE__ */ c("stop", { offset: "0.21", stopColor: "#7AC53D", stopOpacity: "0.52" }),\n /* @__PURE__ */ c("stop", { offset: "0.31", stopColor: "#64C041", stopOpacity: "0.36" }),\n /* @__PURE__ */ c("stop", { offset: "0.41", stopColor: "#52BC44", stopOpacity: "0.23" }),\n /* @__PURE__ */ c("stop", { offset: "0.53", stopColor: "#44B847", stopOpacity: "0.13" }),\n /* @__PURE__ */ c("stop", { offset: "0.65", stopColor: "#3AB649", stopOpacity: "0.06" }),\n /* @__PURE__ */ c("stop", { offset: "0.79", stopColor: "#35B44A", stopOpacity: "0.01" }),\n /* @__PURE__ */ c("stop", { offset: "1", stopColor: "#33B44A", stopOpacity: "0" })\n ]\n }\n ),\n /* @__PURE__ */ e1(\n "linearGradient",\n {\n id: "paint13_linear",\n x1: "66.3687",\n y1: "8.91975",\n x2: "89.767",\n y2: "2.61074",\n gradientUnits: "userSpaceOnUse",\n children: [\n /* @__PURE__ */ c("stop", { stopColor: "#F15F22", stopOpacity: "0.8" }),\n /* @__PURE__ */ c("stop", { offset: "0.21", stopColor: "#F6861A", stopOpacity: "0.48" }),\n /* @__PURE__ */ c("stop", { offset: "0.39", stopColor: "#FAA514", stopOpacity: "0.22" }),\n /* @__PURE__ */ c("stop", { offset: "0.52", stopColor: "#FDB910", stopOpacity: "0.06" }),\n /* @__PURE__ */ c("stop", { offset: "0.59", stopColor: "#FEC00F", stopOpacity: "0" }),\n /* @__PURE__ */ c("stop", { offset: "0.65", stopColor: "#FDBC10", stopOpacity: "0.04" }),\n /* @__PURE__ */ c("stop", { offset: "0.75", stopColor: "#FCB313", stopOpacity: "0.15" }),\n /* @__PURE__ */ c("stop", { offset: "0.88", stopColor: "#FAA418", stopOpacity: "0.32" }),\n /* @__PURE__ */ c("stop", { offset: "1", stopColor: "#F7941D", stopOpacity: "0.5" })\n ]\n }\n ),\n /* @__PURE__ */ e1(\n "linearGradient",\n {\n id: "paint14_linear",\n x1: "44.4607",\n y1: "29.9814",\n x2: "114.822",\n y2: "29.9814",\n gradientUnits: "userSpaceOnUse",\n children: [\n /* @__PURE__ */ c("stop", { stopColor: "#F4EAE5", stopOpacity: "0.06" }),\n /* @__PURE__ */ c("stop", { offset: "0.19", stopColor: "#DAAFAC", stopOpacity: "0.33" }),\n /* @__PURE__ */ c("stop", { offset: "0.68", stopColor: "#981B1E" })\n ]\n }\n ),\n /* @__PURE__ */ e1(\n "linearGradient",\n {\n id: "paint15_linear",\n x1: "49.4324",\n y1: "56.614",\n x2: "114.225",\n y2: "56.614",\n gradientUnits: "userSpaceOnUse",\n children: [\n /* @__PURE__ */ c("stop", { offset: "0.85", stopColor: "white", stopOpacity: "0" }),\n /* @__PURE__ */ c("stop", { offset: "0.91", stopColor: "#D6D7D8", stopOpacity: "0.23" }),\n /* @__PURE__ */ c("stop", { offset: "0.97", stopColor: "#B4B6B8", stopOpacity: "0.43" }),\n /* @__PURE__ */ c("stop", { offset: "1", stopColor: "#A7A9AC", stopOpacity: "0.5" })\n ]\n }\n )\n ] })\n ]\n }\n), PR = () => /* @__PURE__ */ e1(\n "svg",\n {\n width: "219",\n height: "63",\n viewBox: "0 0 219 63",\n fill: "none",\n xmlns: "http://www.w3.org/2000/svg",\n xmlnsXlink: "http://www.w3.org/1999/xlink",\n children: [\n /* @__PURE__ */ c("rect", { width: "219", height: "63", fill: "url(#pattern0)" }),\n /* @__PURE__ */ e1("defs", { children: [\n /* @__PURE__ */ c(\n "pattern",\n {\n id: "pattern0",\n patternContentUnits: "objectBoundingBox",\n width: "1",\n height: "1",\n children: /* @__PURE__ */ c(\n "use",\n {\n xlinkHref: "#image0_6622_91263",\n transform: "matrix(0.00338437 0 0 0.0117647 -0.00765512 0)"\n }\n )\n }\n ),\n /* @__PURE__ */ c(\n "image",\n {\n id: "image0_6622_91263",\n width: "300",\n height: "85",\n xlinkHref: "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAASwAAABVCAYAAADzJ9nIAAAKqmlDQ1BJQ0MgUHJvZmlsZQAASImVlwdQk9kWgO///+kktIQISAm9CdIJICX00HuzEZIAoYQYCCh2ZXEF14KKCCiCLogouCp1LYAotkWxF3RBFhFlXSzYUHk/MAR337z35p2ZM+ebk3PPuefOvZnzA0CR54hEqbA8AGnCTHGotxsjOiaWgR8COEAGJIAACoebIWIFB/sDVGbs3+X9XQBN2lumk7n+/ff/Kgo8fgYXACgY5XheBjcN5VOovuCKxJkAIAdQv052pmiSO1GmidENonx/khOneWSS46cYA6ZiwkPdUaYBQCBzOOJEAMgM1M/I4iaieciuKJsLeQIhyiKUndPS0nkoH0fZEI1BfeTJ/Mz47/Ik/i1nvDQnh5Mo5elepoTgIcgQpXJW/J/H8b8lLVUyU0MfVXKS2CcUtYromd1PSfeTsjA+MGiGBbyp+ClOkvhEzDA3wz12hnkcDz/p2tRA/xlOEHixpXky2eEzzM/wDJthcXqotFaC2J01wxzxbF1JSoTUn8RnS/PnJIVHzXCWIDJwhjNSwvxmY9ylfrEkVLp/vtDbbbaul7T3tIzv+hWwpWszk8J9pL1zZvfPF7Jmc2ZES/fG43t4zsZESONFmW7SWqLUYGk8P9Vb6s/ICpOuzUQv5OzaYOkZJnN8g2cY+ANvwAA+wAOEotYaoN1n8pdnTjbini5aIRYkJmUyWOgL4zPYQq7ZPIaluaUVAJPvdfo6vKVPvUOIfmXWt+Y2APa/o9A26wvpAaAlFwD5o7M+fQv0Ku0DoL2dKxFnTfum3hIW/ReQAzSgAjSADjAEpsAS2AJH4Ao8gS8IAuEgBiwBXJAE0oAYZINVYD3IAwVgO9gNSkA5OAgOg2PgBGgCp0E7uAiughvgDngE+sAgeAlGwXswDkEQHqJAVEgF0oT0IBPIEmJCzpAn5A+FQjFQHJQICSEJtAraCBVAhVAJVAHVQL9ALVA7dBnqgR5A/dAw9Ab6DCMwGabB6rA+PB9mwizYDw6HF8OJ8DI4B86Ft8LFcCV8FG6E2+Gr8B24D34JjyEAkUHoiBZiijARdyQIiUUSEDGyBslHipBKpA5pRbqQW0gfMoJ8wuAwVAwDY4pxxPhgIjBczDLMGswWTAnmMKYR04m5henHjGK+YSlYNawJ1gHLxkZjE7HZ2DxsEbYK24C9gL2DHcS+x+FwdJwBzg7ng4vBJeNW4rbg9uHqcW24HtwAbgyPx6vgTfBO+CA8B5+Jz8PvxR/Fn8PfxA/iPxJkCJoES4IXIZYgJGwgFBGOEM4SbhKGCONEeaIe0YEYROQRVxC3EQ8RW4nXiYPEcZICyYDkRAonJZPWk4pJdaQLpF7SWxkZGW0Ze5kQGYHMOplimeMyl2T6ZT6RFcnGZHfyIrKEvJVcTW4jPyC/pVAo+hRXSiwlk7KVUkM5T3lC+ShLlTWTZcvyZNfKlso2yt6UfSVHlNOTY8ktkcuRK5I7KXddbkSeKK8v7y7PkV8jXyrfIn9PfkyBqmChEKSQprBF4YjCZYXninhFfUVPRZ5iruJBxfOKA1SEqkN1p3KpG6mHqBeogzQczYDGpiXTCmjHaN20USVFJWulSKXlSqVKZ5T66Ahdn86mp9K30U/Q79I/z1Gfw5rDn7N5Tt2cm3M+KM9VdlXmK+cr1yvfUf6swlDxVElR2aHSpPJYFaNqrBqimq26X/WC6shc2lzHudy5+XNPzH2oBqsZq4WqrVQ7qHZNbUxdQ91bXaS+V/28+ogGXcNVI1ljl8ZZjWFNqqazpkBzl+Y5zRcMJQaLkcooZnQyRrXUtHy0JFoVWt1a49oG2hHaG7TrtR/rkHSYOgk6u3Q6dEZ1NXUDdFfp1uo+1CPqMfWS9Pbodel90DfQj9LfpN+k/9xA2YBtkGNQa9BrSDF0MVxmWGl42whnxDRKMdpndMMYNrYxTjIuNb5uApvYmghM9pn0zMPOs58nnFc5754p2ZRlmmVaa9pvRjfzN9tg1mT2ar7u/Nj5O+Z3zf9mbmOean7I/JGFooWvxQaLVos3lsaWXMtSy9tWFCsvq7VWzVavrU2s+db7re/bUG0CbDbZdNh8tbWzFdvW2Q7b6drF2ZXZ3WPSmMHMLcxL9lh7N/u19qftPznYOmQ6nHD4y9HUMcXxiOPzBQYL+AsOLRhw0nbiOFU49TkznOOcDzj3uWi5cFwqXZ666rjyXKtch1hGrGTWUdYrN3M3sVuD2wd3B/fV7m0eiIe3R75Ht6eiZ4RniecTL22vRK9ar1FvG++V3m0+WB8/nx0+99jqbC67hj3qa+e72rfTj+wX5lfi99Tf2F/s3xoAB/gG7AzoDdQLFAY2BYEgdtDOoMfBBsHLgn8NwYUEh5SGPAu1CF0V2hVGDVsadiTsfbhb+LbwRxGGEZKIjki5yEWRNZEfojyiCqP6oudHr46+GqMaI4hpjsXHRsZWxY4t9Fy4e+HgIptFeYvuLjZYvHzx5SWqS1KXnFkqt5Sz9GQcNi4q7kjcF04Qp5IzFs+OL4sf5bpz93Bf8lx5u3jDfCd+IX8owSmhMOF5olPizsThJJekoqQRgbugRPA62Se5PPlDSlBKdcpEalRqfRohLS6tRagoTBF2pmukL0/vEZmI8kR9yxyW7V42KvYTV2VAGYszmjNp6GB0TWIo+UHSn+WcVZr1MTsy++RyheXC5ddWGK/YvGIoxyvn55WYldyVHau0Vq1f1b+atbpiDbQmfk3HWp21uWsH13mvO7yetD5l/W8bzDcUbni3MWpja6567rrcgR+8f6jNk80T593b5Lip/EfMj4Ifuzdbbd67+Vs+L/9KgXlBUcGXLdwtV36y+Kn4p4mtCVu7t9lu278dt124/e4Olx2HCxUKcwoHdgbsbNzF2JW/693upbsvF1kXle8h7ZHs6Sv2L27eq7t3+94vJUkld0rdSuvL1Mo2l33Yx9t3c7/r/rpy9fKC8s8HBAfuV3hXNFbqVxYdxB3MOvjsUOShrp+ZP9dUqVYVVH2tFlb3HQ493FljV1NzRO3Itlq4VlI7fHTR0RvHPI4115nWVdTT6wuOg+OS4y9+ifvl7gm/Ex0nmSfrTumdKmugNuQ3Qo0rGkebkpr6mmOae1p8WzpaHVsbfjX7tfq01unSM0pntp0lnc09O3Eu59xYm6htpD2xfaBjacej89Hnb3eGdHZf8Ltw6aLXxfNdrK5zl5wunb7scLnlCvNK01Xbq43XbK41/GbzW0O3bXfjdbvrzTfsb7T2LOg5e9PlZvstj1sXb7NvX70TeKfnbsTd+/cW3eu7z7v//EHqg9cPsx6OP1rXi+3Nfyz/uOiJ2pPK341+r++z7TvT79F/7WnY00cD3IGXf2T88WUw9xnlWdGQ5lDNc8vnp4e9hm+8WPhi8KXo5fhI3p8Kf5a9Mnx16i/Xv66NRo8Ovha/nniz5a3K2+p31u86xoLHnrxPez/+If+jysfDn5ifuj5HfR4az/6C/1L81ehr6ze/b70TaRMTIo6YMzUKIKjCCQkAvKkGgBIDAPUGAKSF0/P0lEDT3wBTBP4TT8/cU2ILQJ0rAEFtAHisA6AGtfqoJaM6ORKFuwLYykqqM7Pv1Jw+KRrod0J2MMB/rehVdxsF/5DpGf67ff/TAmnWv9l/AQqVBifvbywuAAAAOGVYSWZNTQAqAAAACAABh2kABAAAAAEAAAAaAAAAAAACoAIABAAAAAEAAAEsoAMABAAAAAEAAABVAAAAAMQ28cYAACSvSURBVHgB7V0LfFTF1T9zd0lQKr6r+ECsqLW+QR5JtKKfqEUetkIIJFAFQgL4qFbt14eK/T4/P/VrfbQkJAGlkoQEKgpoi7VWRZKAQlWsWrX1/YYW0SKQ7N7z/WdDyGZ37+7MnbubDb3z+yV778w5Z86cO/fcM2fOzBD5yZeALwFfAr4EfAn4EvAl4EvAl4AvAV8CvgR8CfgS8CXgS8CXQHZLQHQ7e2dcfgD1acsjEscR8wAS9A3w1A9/BxLTASTEYfj9CvmfEvFHyP+MWHyC+w/ItjdSgJ6jtfVbu70dXjPw2NIzKGR/E3LpD9L446/TuKJClWoqK6svp6B4j9vaXpg9e/beJxsVIfgwe6UEukdhFZScAyV0MQm+CC/kYA8k+zZobCCbn4ES+y2tXwLl1sPSYw8dQ3ZoNNpwPpTxeZDLgV1bwNtpbNHXuuYlvquoqnkHD/aY3aWfMvHLgsRLgunx8vLSJxJj+bm+BLJfAplTWKdN6UNf46lQUlfiZfxW+kTDYdD/ExTiEtq1azltXLYtfXUZUl5VfwhRYCKU1GRYkrAyoaock2uF1YUiE20WzPWCes0rL7/izS6F/o0vgSyXQJIXxCPOhxUfRZa4jiwuxfuoZCF4VHM7GeYKDKfupOb6dz2la0Js+fKDKdB6E+QxCyoqR42UNworui5YXn+0WNzpW13RUvGvs1kC6VNY+ZPPIGH9BI2fkCUCWEYhnkvr617tVn5WNv4IChRyEX31+FBXWJVV1VDOEd+XWhVMTbbFN86ZObNZDcGH8iXQPRLwXmFFhn727Xhh5sB6sLqnWU61cgh83UNfirm0afF2J6i05K9qvBRDv7sx9Bvgjr66worxYWlUxw9xOFTqO+o1ROaDZlQC3iqUvOLR8FO9jpfyquxTVlKuIoh/19N+/CrllVycEUmvfqgfrWhcDZ/aw+6VlR6nAtOoehgd0OIyEQi+Ulm5oKAjx//1JZBNEvBGYY0YEaSC4rvhq1oFRXVkNjXQgZf+sP1+D57vxIg14ABjnr1i6UhqbXsFMsFsaOYSY2bDfW2iH/yNayuram5xT8PH9CWQHgmYKyzpVG89Er4P8YP0sJhOquIGys9dQ8MmHeZ5LSsa7oTe+APkEhOe4HlNcQTdW1hdSM2tqKp+oqKiIuP8d+HCv/ElECUBM4WVP+UUCoiNGOoMiaLZsy4F5VPA2kBDp57gCeNLlwZoRcMSyOQGT+i5IGJmYXVWiNitC4QVfBlDxFM6c/0rXwLdJwH3Cmt4cQEJuwXDna93H/se1SzEURQMP095U841orh06T7U2/4dlFWRER1DZI8srHYuhDiSLX52XnV1viFbProvAWMJuFNYBSUjYVmtxXAn83FVxk12ICAQZmDx05Q/eZwDRPJshqM7l5dDJhcmB0x/qVcWVgen8OAfgHitpvnza0Z25Pm/vgS6QwJy1kwvyfgqwozX3piYmcJYo+gmrWqsgWWVmZnHFPy1W1guJwqT0LaJl8+rqRk6p7T0tSRg2V109mT45PhkCgXa+76gVizn2ky7cjbTi4s+zwrmC4qOIDuA4GJ7f2qjL4isfyJ+0F2/zHSDIoHillwX3N4Bhf0VhQObafvOzfTKsn+ZsqPXq4cUHU29gi9gGHiwacXZic/zqaluljZvqxpuQCQBZhzTmdTjsLQDRzXYhkp/PyDsQWVlZVs00LoPNG/yReivQ9r9rEJ+bOVicufE/AHgpXJ4C89U+mfXUNPiDc4IBiUyZrGPPQ4z1ueAyomwzk/C7+GOFJl3gJ/NULibESbzEuB+T7tan+i25WdS+XNk3av0YZ+F60Hg76AU/H+C8g8B+zLa8QJGNU9i84K3HHFiCtQV1uAx+1Lvvn+GUCHYvTAxf0oi93hquv9LrdatXHo+sf0EHpS74bVyZeoKy33gqBozWNLTPLtsZvbGahVMHkVsTYPikRZvH7VWJYFifgcv10IKc40nC+vPLjmdbLoJ/F2CWnsnqVmtiCOz0Q0kcn6r3X/VaugKlV9yBTJKwP/5XQtc363Hx+F+4p2LqWXZjmRU1BVWQfEiKKvvJyPmXRk3oQHrQW+38uAAhHMotPIByJN/34SCOMa7+iKUSqiptk6L5oqlAzHxsBFy0Vxmo1VLOzDTizRu4pkqmOm0sKLq/8WsstLro+67/1K+SIJ/iOdxctqYYXqALGsurX3wPVd1FBTfDP5udYWbCimyDRMvpjbrDnpu8dupwLXKC6btR9R6FXDkn7MVqEU0DvhLDCXvg1vmTgyBMRSOT2oKK69kEszW+nh0r3KgoGzxCIlwEzUvaVGiWjDpZOIAzH3+DjrABUo4TkDMLdRcpz8LtrJRKtWhTmSN8pmw5pFX4+VYiz2/1tKoQgwF1FJVVVV/m6wJGL6NF4KGAUvtOauR74QSPGbWzJmPdmZ001VeyaXoBwbLnlzx/VN84P5HGVP6pTiAPp6hECDmRWSHb6V1De8o8+gEmF/yI8j3R+hGGYrJ4y3QB1dTS+2SWJZSd+TBJf1gtL4JRHPTOrZ2pnuJ7LuNd1KQvrWcIHaDoHL8HRpbjcL9heh8TyjAdYKsbPwJbm7rzPDsai3Uy+00ZuLvvKBYUbHwRDhvb8aDngh6nkb1M9HnOQFx3IwZM/7pBa+uaERWK3RTzBvz4/jQyWFn8pRXko9niqVZGQ4BYvoHfRUc6HoyYVhxX0QDIKaQRiVvYJpKbf45tdTdEk29faYkOif2OpfvgGb1Vlkx/5Z2QYNurP04tjpX9883vA88mNr4Kyj5OX6xdYtqgnXXVKenrB5tOAk+CG+VlRzyCZ6FTfrWqXKuAjd79vTXAVdcU1Pzszabbt+tuFRQU8KA1gFtYfseAE5NCew1QN6EfeCzwWy1uMhr0hr0UlscZ0/tDx/nk6Bp7qvSYCwCKifH9m3dH9ef66KSNAKC4o/AO0Eb1ysEgV2HY1JyR3H+pDyYsFNicNzfMuNLbF+Gr9IEz5RVLDdNtTfji3AGsjfFFiW8t/m6hPnJMm2xMFmxfhnXQ4EP81pZRfNRWlr69uyy0iLBYiwsI+XhZTSNxNdiSkV19bmJy9KUe86EQ8nKRdCyS2UlZ9uI34dP9AX8yg/EJ644FQprNtn+DWhrKiveCt6eifxRZDbQHX+yUW22rd224SWDItEAbpUVs/Q/vb1bti/BL+XWAkdX7ZqSW1gicF9XcKM7WDEWHNuLPzOiooK8tvYlGjwmj3L7yh0SLnREYW6klvrnHMsTFaxonIZsuTuoF2kXHuo1UFRVXhBToVFePmPVggULvtkWwoskxGgVnFQwwha/BsypqeA8KY/EKAWfAi39L790mJN9H1wQLybkRS7PCtjfQNkp8NlKF4N+HdGE8yfLj/2I6Kwk13jB7V+Rba3HMKg5IVze5KHwaZ4LBTAbz25AQhjTzIiRQo+DDJzsWgkOc6qgttA8ah/xdEWWUQY5fY+DRXwcZDsIsGiDfngUrHqHJLeKkbsveJGkA7C57govSGnTyC9+EA83sZXI4lRqXvwXZZqPP9gHAYbvQOiHKOMkA7Qw7T56ouwcGU+IkRXzq2sWoC1SARsn2BqXYufSFcaEUhHIL0FsFDq8TmK+n8L2T7RCEtpnxaSlkCyth+9zuCNAfvEz6HvfdizvKJAuEjnq0El5xdPw4sMHnGK1SWuof0IFkqiuIRMOp5zc11B0QKJixzzmnxG3/jJVSEIX/PwpOLsAMVjJkpwxbK67JhrEir7pcm2JW7rcu79Z2G3KSvLcXAf/CsdbMEyPaCkrSWtn7rWeKCtmBI3zZd2lrGRTBIYzs8pmTsflXHlvmljwzaY0UuJL/6SesnqDwmI4+sB0LWUlGZHxeMxrUvLkBCAjvtWUlZyh1lNWss6WOsQtoQ97mXrlLAI5DWXFf4R/bgD4v01LWUmemxf/Cf+3y0udlFhh5RfLYdRZOoQcYJ/AF2iGQ1nmspvqytH5arpUKISe0/x3tTLW6vouNFzfwKoZV7TcNbqHiIiluhXkPBj6i0Hz5y9IbU245X1Y8beAepM6Or9F1q6zad1iGXriLjEiyd0mi8YpoVrY199tEvSoW9Q4vPxiBIJq+QRXY7JqpNkMvwx41UuJFZagMj0yCaBldPDOXfpfjgSkPMlqrpu554spI4N1l1uEgjfi6y5nXEzTPQgA/Y0pES/xLbKvR/R6Yr+ORkW24GINcD3QoJinjCCdvBy6kJ5dZja5YGPnDbdJ0LEpUeU7Iv2tbtPO1tUpUXNzREoYOfwV4q6UcJ0AG7DN+PjOW5dXqT8IcbzHKyx5sCmJ77lkoRMtjDVS2XbEVlvrRJjR/8Df/E5GFa4erTsQUIigNk38Fzri8xtNqXiNj3WBbXbAuhRD56+MaDNPmDt3bnyfMiIKZOnvUHdeA5SnUXPj302rxTByE/rKh450Ohb4JgIQkcOAE5VE5Yl3o270L+X7JWcTkyU7FPfSx4PvuhJ5h8fnJ8zZhcNcvuvJmQgi/FjCGpJkxneuPm1FSeDVipj+M/Kw1aAzB/X8MkwP4wzAlrqHtSq1g3OhxDWnpmNr4J3YUv57dFZZW2xJNtxfOWPGu9iWBj469wl+sQO/fsQR3sdFCf6BMlcMR25z/Qpl+JSA7M7KYqGgADgnZfWpANh0WIgtwpm6OLZTVCmXzXyQAkatuKnhIwBuUgNuh4pXWCRkRLT7JGNbmmsRbJqlqblOb9wsD5EgutqD1txIY8a/6QGdtJH47OMPF2A5z+smFWC2UM13o1pJ3tQjATpGFRzbxsxWhlUCZGcrQIgkFimn/jAJMVCJhWRAYWtlsmLaZbUmLR/eexSGg4clhekolNamvev2jltPfpMpXBHvlO+qsAZ+JxcWyNlGjNiezS4aseEZcmvIfAjH9Dca81d1H4xnzOsRwnDOFhb/WA8rBpo9W8HfTliE1RWgXCrz3INvxHBkdrutzXnqvX2LFyf6KvGGh7reMLKj1kh7McHglFKtJrFsdfcPY8eKFLspOLHhmC9otWOZLeKsr64K65CD8zD0CToSSFXA/DJmZbyJ3UpVVybK5VHy7MEEhOBrScy1M8GyaR1YzPww2qwXTBtdqRDHV1ZWSqvIq6SusIjrvKp0D532Ted+HfEV7Yk+j0zn30SWfeseuPgLFYWF182qgdI6Jh5dI4cxIdHBW/SvHVlbm4rQ2FQAe8rDAe/l21T7LOg/EcM/rFosU0uw+LmrcrJoxB7mXF2IRa7QshXJDpRjZnAfQ/bWIZLdu+lnQ2aU0IW9GKsShirBJgBiETwP2bUJivSzVGKZ2qnupG1tD+tXoIDRVCu3VNFLTH9G31FJh0JptdCw4gtcn0reXPtLVCT/9JLcl4vpIEWkDZ5brx0VN9XKMCql1NXC0gvKi69gFy2Jz+zROeb+EEvIGZgelTjcy52jeU8r+fQ9lyYXck2b8jo8XuvFFrwm7HbBtXJ1Rhr9sND4FRzuW9aFRrpvbC5QrkIOt7MgdVVYTCcZ8LQ+bQuaDZhyjbpq6Xh8Ifu5xpeIjEMpRhduNKLRDcizZ097y8j5LgzX4HW0OaC1BCc92xh38KL72x4przdbaSHcpqDkdQwRrzYeJirxK85UApNATFnRj7sqLEEDlRsQC8h2zxr2xPIfe2+zB1876yexZHvKPVbuuLayMBI6wZt28jeU6dj8Z2XYTAFaLnYCkbIT1r34e4fyS/6GvwpYXhenh2U+VpluKJwVH4ROhZU36ZvKzCcEFO4dtQnpdWPmI0uOhnX1H0YcSOtqXOHrRjS6EZkJh8u6TsKwL3VULPp3XKX8DQdfSgmTaYDI4Qr2da6rFXQc+uEsLHL+PRTXFlhfC6hg8vdoxOWGMYEdHIkBHVcpfj9XXkCdgpBpcafCsixEuBskDrxigJ1dqMKaCYbUXKZOnAfIq8XjTjWkNR/nnX1sUsF9999/qAl+Oy6rOoSJcndsNa8vDRSa6u8GVfPZtfatWKZjMuQhbOGyhfKLH6CzJ5mFIBEfqNZi1/tZqZHXgOpUWCR6aeDFg7Y8+GF8Zo/NkQrLIPEKGl30FwMC3Y4qwsGPTJjIbWs72AQ/ggszT5lGiP6lDJtpwKbaEviAXA+xE7DbB8Gel2OP+GcjPq+8kmtcWV2qJz1xfABnAp4yktXZIdhAYTE2DN5bktygz3TvbcG/6uniyM0lI4Vly4NAM5m8Dmj0mvfm2ktA8kavyYLeCVDr91Br6GWSm++lJ2XNx6BTYZk0VGh8CU3qyQSuDPI0SvwajZnkHB1tRDtzyNOnT/8Sm/y57qg4rUd9OOfULEFfORX1yPym2rsoZJ+AKbd6z/mXE2Yi0Iyh4n9r0N6hBCuyxyDpVFjySGmTJLeu7elpVSN2LBCnGDWDqcdbV3vaj9XMe641L2xvOrnaCyV5O3nC1zRZ7B7w9fVvYh+pYpy7eSoYWOY5E0L8FA76J0meypwqyXMM1VJqWmp0jKE6FRZbrr+mES7CQYXV6cb8ppeA6Uk4jINfd1mL0stkZqjLLZShrfq4rs2KHETgGj2CyMkWF8eQ3r9XZoegMdVr38qtuZtqCyM7djL/Aj4u73zA8kRmW6zGuQb7JudLcTsh9mhL8OTMKJV2Kiy7zUxhWYZBlkrsphFoZcM4+K6+ZVSDoIVUWKhuFRhVll5kHFRhtB7QCltfmHPInyrTsK2epbA6GtZc/y62GL4eO5xgS+XwORgu3oWA4792FLv+FWIo9e6bfHmUIDX5mvp0XTciHrFTYYmwYQfjnj4kvDlePFo5jOHkfVoYWQwcChkEEaNdQoQ8CDOw3lMWkWCzBcTKFaURcO2StRgu3ggFdhKF5a4pLAOP33Bfo/gu4rbOc8RnUpdv+zY/jqQyVdCpsFqW/RMCMrGy8HXooenRxovwig0y4x77Jo0tfNuMRvZgI9LdyNrELqbqL4NTszn8rlNRXL4Q58bl9eSMdXXygN/bMWw8EcPGM/Fu3oK/LfpNEv/jjCPUn5EIZcX73amwZKuYXnNuXIoSIdK0fCBFvV4U2zTXnIwlAwT3mgSn+UjXjWH6i2vcaMRW1lm/lhUvVDT7nl3LcxSb6n5OO7+AFcma+6rh1KD8iccl5EXIg2QVkxAjFCHTCtZVYQnhXmERHUrDpwxLK7fpIL6y4TsgO9yMNPZqH1v4JzMaWYbNdIFbjlgYfPiiK924BBZFks3pomHlTiODJ+wfnbXXXW9c9RUU15WwuK7QapsIjE0IvzPcnDA/ceaIxNmZzQ3GVGf2ZRT2KNBbH0Mzu2+ZbjNchIP2JTO7s7v5ibirrK7+Lqbd3YcJMG9KRNdVHtPTeD7fUMLNzZkBuF8owaYbKHIQqzzcAQepcsyearvC4ymijF0y0Vy/CPFWH8FRqLblC1vfRk3xIwDJQ0Hxq+BRYfgvTowsBZJ+tm5MXS0s237GiBdLXE6DZ5ot8TFiQBN5ZYM88hv+AaP0Ie0US40oZBuyLSYbsRQQZv0ounLWOX3c7BCN6GrNryPKSvqPLobCPbfLX+8AfKaGSZ5NEHvWpiNJTjwkbIdf6YgWW8DWDbFZmb7vqrBa6p+HCW7ieO9PvbdPz3QjXNUnD5dgcYcr3GgkxpersDAcndWTr+fNu/9onFH4PbdtQPxW6JD999cZaiSvart4AgA7kwPtLhV0JCyPEiXY9AP1T1KFdEOYJ0v5rEZnXsLWI+qMiLE0dOoJ6vDeQ3ZVWNLtTuIps2rEzT3CymoN/QZfPffDHikkph3UV1SZySu7sEUwfCsC3GP7hTqTgpoKvVTgmxZvh5xrlRkQ4s60+rJkMGZB8e+w6Jjx+31HvjiJDBlWlxep/RDW7SlJJTvdR56MLc9iUE29wvNVQV3BnT21PyL1X43IN3/yGbE04jumTY/FAmne96PeX5Vp4mQWfGVjISp0PwvWwa3gX9J5hVoWaU1NzbEd6Nn2W1VVdaogusKEL0E6QzjVmsS9qpCA60e5OXdpwOuB5vZdjo96u4XENM0RWWDPVqckt4opmHKWU7FWPvPmlPDM7yeFYSyeVk7iPMR2pWcUdc6EQ8kOPwND4qR2dsSkWLbiFdaOYCO+aG2xgFr3THfgtN5TtHAyBbxq6ZFon7lVxLSNgqE7ddiurFxwZpvNq3VwMglrs/Vr0/pw7H29KY04fLmMhemhuHynDCFK8YVOPDPmhKOSX1C8Aj7PTv+TELmOaJGVTY6lKGBvhoVCDEhWS6RMpFj201J3P+DeTklnDwBCeApKTtxz68VF/pSvk53zNOQ7IIpc3EaF8QrrxUWfQ5gropD0LwXtSwKBlCoLMPWpm2HY3AgNfoAZEWBbfBuNKvlChw4LngML5ISK+TX36eBlArZifvWPIZdvm9QF39cfEDD6sQkNR1w7dL1jWeKCFfBnjU9cpJmbN2EfDP/gS4MPx6vEHiis4VPGqLEj/p4Sju1rU8J0AuyHYSR2hogfsnWCaFwNKz4KOqcJ8k05WxmvsCL1iEUa1TmB9odTO7tmz1Y2NOClLHBiWCP/PdqBfbc1kjyrD6uJI6Y0fq+aP78mztzVIOcpKHgZCb+VnNEySmjXA0YEkiGva3iHbM1DXoVYBqX1w2RkU5bllVxKIgfxieKClLA6AELkGX3QpRK1+A6lKjmMYWyK1Fy/Akro0RRQncVCHIR959dgeDiqM9PFlTxwIyhexns5UAU7scJqrpV+LA0T0akqPOT8kqdJCre704pGvJBiokdsXIeZwVYtWlbwxmh4BFfWV1bWjIjO647riurqC8DLH0zrhsPmbRzC2mBKJyl+S93/4qV6LilMbKEQ/4fhy/Pa1sCwycej7z6Gnd4exjDlmFiyntyzeAjnEcK60ExyT3eR+1u85Lt9PUnwmd+h5iUtSSA6iwKt02DpbO3MSHm1H4Yaj0G+S2nIhMNTQkcDyDWO+SVQVJEPv/KIJ7HCkoSZvHFcRmJQcppp8KRDovnN6PXKhh/g4f7YkzqZn6WxE9X9KagUzuxDMN1fGls/hoirpF8rNj9T9xVVCy4VHAkbMK+S6b/MiahQYDlhktrR3JXUWXgxXogM6wqKnT9a8hzE/OKrIh/ZoPUG+oyZ9dCVhwR3cGAHxfuor57az2BMABOTVVBSSK1tbyrzJsTiGArOt88u24yt+iY4AziWTKCc3I+huGrhuz7fESp/8rch358C7nUouj+hDdp+bkwKOaSIyZnzHqwSbxSN1PRhHk/r6zc61Jie7JWN/wvCP/KMOONEGM3TcCqram5H/f/pwMNOJjF9dtkM753VDhXK7MrK6lKyRHUSEPUiPNtZ5TOPVUcwhBw2eTAFradABV941+kTYH6KL/MO/B6Jfn60C0rrsTh5eEK8guL5oFmWsMw58xNYkJuAJycZoDAZoxy5C4oFC4/lkGkYrL3jndFjSpj+Rru2nU5ySY9OioRrmLqFIjOTH8ItlBtpgxCH6bAQgWW6F9vu/CAaz1lhSaj8kuugBX8RjWB8zfY11Fyffqfzw0sGUMCSXxds0+FRYrqVxk2cq0NN+q7ICn6QGoerdmw/4Nrrrkv/floVVTV348F36Qip+XOGgMIthMJd5gyRhpLhRQMg1+Xon91moUaGp811wxK2Lr+kBrzNSFiWkUwOgb8heNdedFWdtIaE1Qjcw13he4HEOBuhue7qaFLOQ0IJ1Vz7SzRaPagsmrLTtRyzyunhoVPS90Ve0XANBSILub1UVq/rKquICKyAtK4Ukijr3WfbK/Oqqs5TAHYFAuf6qMqq6k1eKitYAmsyrqxk66UTvrl2EPqn+pDHldQckOQpOLZ1uUMpjAp2pygcCeoWiMtdKytZVXP9GmrddSba8bxuzd7AY1eKQGucmwF9N0WSY2uLN8AUTQ2bglTXYg5HZhEFrJamWoxpDdOjDafg5RmNrWGvxpetnyG1eHQODKJx41+IL3DOqaipGSxs2uAMkbiEieopbP189uzp5nJBFVBU40DzZ5DLWYlrdJ+LuKvTEMrg7UdNlx0500TiFvTRg3RRteGZP0A9c9BnV6bELSgZiRcellaanPaJGGDehnfgUlpX+3SiYld5BcV3Q76eWeQpeFhPofBMWr8EQ+P4pKaECorvBMM3xKN7lBOZ+RHLyQ41Rr6cKmSfeqA3fbnfcUQhaUVdCf60HXgq1URgBM2lMRNvVYbfDVg5v2YNlIT7fZqYMNVM98yaVfq0bt3V1dUnhGwqxssyGQ95oC6+CjwmEv57dvnMm1Rg0w4jD6HYP3cO6imFzNEvPE9vwCFdQdvFApLLhXRSXjGOjhNXgq/0Dl+ZHiHL/iFFTpzWYVABdkjR0ZQTuA5GxhS042AFDD0Q5jXo61XUUpfUl6umsGhCgPJznoXQ8/S40Ib+El+uvkpYKxpXQ3AXKcGaADE9RWNfu4DEXFuHDGbgLhGkEdeSijjLzda4Bc/gfSiKz7FS7XNYTdtEWEinMUYndg6xdbQl6Bjkj8ODPS0VSaNyppZZ5aX5RjTShdzulC+CdTMB8jrGoJpNoLEaFgs+pLV/NqDTjppXdCaO4roWPE0xphVNgPlJvAs/w15Z66Kz03bdbjnKNuAcBKH2vsYzsxP9eSOUFCxVBHPLve0VkqLCAiUZOk/8alq0ayej2aaw3ibufTqNG/dlJ4tqV9JXBKvvVDXongUFhfkFh4OnzJkz7f2s51zutimH8xa2wGbMBra7C46ApXBYpC8zfYbZuM0owwyd2IS4q1fJtjdRS71evJeOIOSauVDOSNQl3RiDwQfiqTRmKZnly/1i5GVvtVca7a2lw3ci2HYlnAfZ4VxEOaMp4KSPnO8A+UKZydOABG1p/+WXUP4KAoAh3zpXbgR1hSWZlQs2meXixH0T8e5BXvYoLLlWkMQw3RAGKQOEMVyNn3s9kEfWkYCyCiF+7MI5ZWVPZR1zPZmh06b0QZAGDp+A/zVgH4SXHn/W19CkrXjB/xl56cP0Aa2ve7UnN9OU96AWgabFGyhvCoLp7D9Ae+Zo4fYoYN6JDjISAaLaTu9fL1hwDIfs2zyfo8gS+VkkppaXzfSVldfPo90vpj1B4zUb2U4veVhDIu5bFsPC4kmJivaKPGYbw4dLaWyRq+lcy7ZPh7KSX8a9MV1fXl66ZG9smN+mniEBfYUl29VUvxxj0vEwW8M9o5mKXDJjWx3ruzR64uOKGHFgs2fOXImtkORs1d6WrplVVuptEPHeJiG/PWmXgDuFJdlqrn0IjraJe43SksfMyxX54woxa2GWystnViD6uxiygQLs2Un6rGymIiir+3p2S3zu9wYJuFdYsvURpcXn42pzjxYG08cIjj0HkexrvGqHXBuIXRBG4oXf6hXNTNORvMPBfsmc8lK5RMNPvgS6XQJ6s4RO7A6bdBgFAnJdl2lcTuZnCZlfoF7WRTSqMC1K91cLFx4RbLOxRQkNdRJfVuYj7ivUyxp91fTpHyXib+nSpYF/bN12A2K+jsLM8WeACXBANMwpLX0tEbyf50vACwmYWVgdHKxf8ik1DzwHfq0f4k9vZXgHje74Zaqhvjvy06WsZJPkC48Ay2F4se/qjia6qRO83gOeBzkpK0lzy9ZtCwXTRnzxtmCSwZLKKhDm82SEvZs6fRxfAioS8EZhRWpCJLhcLE32t3C7WqXyOBiMQeLy0pKBADbBgzEEnEnnXYGI2/Sn2WWlNwq2zoBCz+Kpa36ZLToLvF6bTCLY36s/JhYODoeDCP7jUyDLly2bry8rK63EcqCiZLh+mS8BEwl4qLB2syFD7Jtqv4PjtM9Fjt7Lme7gJWa5x9D3EbJwBo0pMl9qoSn58vLpL8FyGQKtfCVe9I810dMJ/ikU0A2zymaeNru0dGOqisJCHIs4vLckHNpyFNtiLD41z+Px4egFrxfJp+LGL/93koD3CqtDenJ7iqbaIRSWG/fzUx3ZSX/TZWHJXUKJx9C4ohOhqB5MykMGCmHBzPv04+P7Yybxcvh/ui9yWa5PFDwVOy4cjZnN/1NueiiENXY0MBhshXYS6zFh8RCWmfwNj0/6RL3xiyoz4wP+O0kgc51LHgvEdA2EW4gufbCDkL1zujPJKPVaCgYX0yWXvetQX1Zkz5+/4GKbEIwr6DI8kD7pZ4obMDytLC+fscZtXXITQFhV6+C9+gKxZ7+fN79mIhZ7nw5f1mLf8e5Wqj5eKglkTmFFc5JXcjFeTlhedCF+o7cCMVBYCB+QOysIepIC9Ee6pOiN6Cp7wvUDDzzQ+6tdIbnTQiFMlxHgGevJvEi8BUO352ENNdmh4MI5c66Q2wMbpblz51qH9TtS+roOgmX1L4wE95FnEmJvrL8aEfaRfQkkkUD3KKxohuSpIRafjO1Yj8DwZH9skXFPdLHj9YrGuVBOveBL2YA9gF7piQrKsW27C+S6xIBtD8JiIezlLfdSwop+5sOhHA50xGX+EENN+OcQrmHRRm4LvtAjdlVwbJBf4EugUwLdr7A6efGvNCQwb979RwcCfBhQegkR2hoK5XzuheWkwYIP6kvAl4AvAV8CvgR8CfgS8CXgS8CXgC8BXwK+BHwJ+BLIlAT+H3jX8PUgE5jvAAAAAElFTkSuQmCC"\n }\n )\n ] })\n ]\n }\n), FR = () => /* @__PURE__ */ e1(\n "svg",\n {\n width: "138",\n height: "37",\n viewBox: "0 0 138 37",\n fill: "none",\n xmlns: "http://www.w3.org/2000/svg",\n children: [\n /* @__PURE__ */ e1("g", { "clip-path": "url(#clip0_6736_4393)", children: [\n /* @__PURE__ */ c(\n "path",\n {\n d: "M99.3 22.7001C99.3 21.9001 99.5 21.6001 100.3 21.6001H102.4L103.4 25.3001C103.7 25.5001 105.2 26.6001 107.3 26.6001C110.1 26.6001 111.4 25.2001 111.4 23.6001C111.4 22.1001 110.3 20.9001 108 20.2001C107.3 20.0001 106.4 19.7001 105.9 19.6001C102.1 18.5001 99.3 16.7001 99.3 12.8001C99.3 8.1001 103.1 6.2001 107.4 6.2001C112 6.2001 114.5 7.9001 115.2 8.3001V13.0001C115.2 13.8001 114.9 14.1001 114.2 14.1001H112.2L111.1 10.2001C110.8 10.0001 109.6 9.3001 107.7 9.3001C105.4 9.3001 103.9 10.3001 103.9 12.2001C103.9 14.1001 105.8 15.1001 108.2 15.8001C108.9 16.0001 109.5 16.2001 110 16.3001C113.5 17.3001 116.2 19.3001 116.2 22.9001C116.2 28.1001 112.1 29.8001 107.4 29.8001C102.8 29.8001 100.1 28.0001 99.4 27.5001V22.7001H99.3ZM96.2 23.7001C96.2 23.3001 96 23.0001 95.6 23.0001C95.2 23.0001 94.9 23.4001 94.5 23.8001C94 24.2001 92.3 26.4001 89 26.4001C85.5 26.4001 82.3 23.2001 82.3 18.0001C82.3 13.2001 84.7 9.4001 89 9.4001C90.4 9.4001 91.7 9.8001 92.1 9.9001L93.3 14.0001H95.3C95.9 14.0001 96.3 13.8001 96.3 12.9001V8.2001C95.4 7.6001 93.1 6.1001 89 6.1001C82 6.1001 77.3 10.5001 77.3 17.9001C77.3 25.7001 82.1 29.7001 88.6 29.7001C92.7 29.7001 95.4 28.0001 96.3 27.4001V23.7001H96.2ZM137.4 23.7001C137.4 23.3001 137.2 23.0001 136.8 23.0001C136.4 23.0001 136.1 23.4001 135.7 23.8001C135.2 24.2001 133.5 26.4001 130.2 26.4001C126.7 26.4001 123.5 23.2001 123.5 18.0001C123.5 13.2001 125.9 9.4001 130.2 9.4001C131.6 9.4001 132.9 9.8001 133.3 9.9001L134.5 14.0001H136.5C137.1 14.0001 137.5 13.8001 137.5 12.9001V8.2001C136.6 7.6001 134.3 6.1001 130.2 6.1001C123.2 6.1001 118.5 10.5001 118.5 17.9001C118.5 25.7001 123.3 29.7001 129.8 29.7001C133.9 29.7001 136.6 28.0001 137.5 27.4001V23.7001H137.4Z",\n fill: "white"\n }\n ),\n /* @__PURE__ */ c(\n "path",\n {\n d: "M18 7.3001C23.3 7.3001 26.3 10.9001 27.3 12.6001C28.2 10.4001 30.1 6.8001 31 5.6001C29.6 4.1001 25.1 0.100098 18 0.100098C7.9 0.100098 0 8.3001 0 18.1001C0 28.7001 8.6 35.3001 15.6 35.9001V28.6001C11.8 27.8001 7.2 24.1001 7.2 18.1001C7.2 12.1001 12.1 7.3001 18 7.3001Z",\n fill: "white"\n }\n ),\n /* @__PURE__ */ c(\n "path",\n {\n d: "M53.7001 0.200195V7.5002C57.5 8.3002 62.1 12.0002 62.1 18.0002C62.1 24.0002 57.2 28.8002 51.3 28.8002C46 28.8002 43 25.2002 42 23.5002C41.1 25.7002 39.2 29.3002 38.3 30.5002C39.7 32.0002 44.2 36.0002 51.3 36.0002C61.4 36.0002 69.3001 27.8002 69.3001 18.0002C69.3001 7.40019 60.6 0.900195 53.7001 0.200195Z",\n fill: "white"\n }\n ),\n /* @__PURE__ */ c(\n "path",\n {\n d: "M48.8999 7.4001V0.100098C37.8999 1.2001 34.2999 9.8001 31.2999 16.6001C27.6999 24.9001 25.3999 27.5001 20.3999 28.6001V35.9001C30.9999 34.8001 34.9999 26.2001 37.8999 19.5001C40.7999 12.6001 43.0999 8.3001 48.8999 7.4001Z",\n fill: "white"\n }\n ),\n /* @__PURE__ */ c(\n "path",\n {\n d: "M65.6 34.0001C65.6 33.2001 66.2 32.6001 66.9 32.6001C67.6 32.6001 68.2 33.2001 68.2 34.0001C68.2 34.8001 67.6 35.4001 66.9 35.4001C66.1 35.4001 65.6 34.8001 65.6 34.0001ZM66.9 35.6001C67.8 35.6001 68.5 34.9001 68.5 34.0001C68.5 33.1001 67.7 32.4001 66.9 32.4001C66 32.4001 65.2 33.1001 65.2 34.0001C65.2 34.9001 66 35.6001 66.9 35.6001ZM66.5 34.1001H66.8L67.3 34.9001H67.6L67.1 34.1001C67.4 34.1001 67.6 33.9001 67.6 33.6001C67.6 33.2001 67.4 33.1001 66.9 33.1001H66.2V35.0001H66.5V34.1001ZM66.5 33.9001V33.3001H66.9C67.1 33.3001 67.3 33.3001 67.3 33.6001C67.3 33.9001 67.1 33.9001 66.8 33.9001H66.5Z",\n fill: "white"\n }\n )\n ] }),\n /* @__PURE__ */ c("defs", { children: /* @__PURE__ */ c("clipPath", { id: "clip0_6736_4393", children: /* @__PURE__ */ c("rect", { width: "137.4", height: "36.1", fill: "white" }) }) })\n ]\n }\n), XR = () => /* @__PURE__ */ e1(\n "svg",\n {\n width: "48",\n height: "48",\n viewBox: "0 0 48 48",\n fill: "none",\n xmlns: "http://www.w3.org/2000/svg",\n children: [\n /* @__PURE__ */ c(\n "path",\n {\n d: "M12.4674 5.13566C16.1383 5.13566 18.2162 7.70349 18.9089 8.91607C19.5322 7.34684 20.8483 4.77901 21.4716 3.92307C20.5019 2.85314 17.3851 0 12.4674 0C5.4718 0 0 5.84894 0 12.8391C0 20.4 5.95664 25.1077 10.8051 25.5356V20.3286C8.17307 19.758 4.98696 17.1189 4.98696 12.8391C4.98696 8.55943 8.38086 5.13566 12.4674 5.13566Z",\n fill: "#003A5C"\n }\n ),\n /* @__PURE__ */ c(\n "path",\n {\n d: "M37.1949 0.0712891V5.27828C39.8269 5.8489 43.013 8.48806 43.013 12.7678C43.013 17.0475 39.6191 20.4713 35.5325 20.4713C31.8616 20.4713 29.7837 17.9034 29.0911 16.6908C28.4677 18.2601 27.1517 20.8279 26.5283 21.6838C27.498 22.7538 30.6149 25.6069 35.5325 25.6069C42.5281 25.6069 47.9999 19.758 47.9999 12.7678C47.9999 5.20695 41.974 0.570589 37.1949 0.0712891Z",\n fill: "#97999B"\n }\n ),\n /* @__PURE__ */ c(\n "path",\n {\n d: "M33.8699 5.20699V0C26.251 0.784614 23.7575 6.91887 21.6796 11.7692C19.1861 17.6895 17.593 19.544 14.1299 20.3286V25.5356C21.4718 24.751 24.2423 18.6168 26.251 13.8377C28.2596 8.91607 29.8527 5.84894 33.8699 5.20699Z",\n fill: "#00B2A9"\n }\n ),\n /* @__PURE__ */ c(\n "path",\n {\n d: "M45.4362 24.1803C45.4362 23.6097 45.8518 23.1817 46.3367 23.1817C46.8215 23.1817 47.2371 23.6097 47.2371 24.1803C47.2371 24.7509 46.8215 25.1789 46.3367 25.1789C45.7826 25.1789 45.4362 24.7509 45.4362 24.1803ZM46.3367 25.3216C46.96 25.3216 47.4449 24.8223 47.4449 24.1803C47.4449 23.5384 46.8908 23.0391 46.3367 23.0391C45.7133 23.0391 45.1592 23.5384 45.1592 24.1803C45.1592 24.8223 45.7133 25.3216 46.3367 25.3216ZM46.0596 24.2516H46.2674L46.6137 24.8223H46.8215L46.4752 24.2516C46.683 24.2516 46.8215 24.109 46.8215 23.895C46.8215 23.6097 46.683 23.5384 46.3367 23.5384H45.8518V24.8936H46.0596V24.2516ZM46.0596 24.109V23.681H46.3367C46.4752 23.681 46.6137 23.681 46.6137 23.895C46.6137 24.109 46.4752 24.109 46.2674 24.109H46.0596Z",\n fill: "white"\n }\n ),\n /* @__PURE__ */ c(\n "path",\n {\n d: "M18.2223 41.8111C18.2223 41.2405 18.365 41.0265 18.9356 41.0265H20.4335L21.1468 43.6657C21.3608 43.8083 22.4307 44.5929 23.9286 44.5929C25.9258 44.5929 26.8531 43.5943 26.8531 42.4531C26.8531 41.3832 26.0685 40.5272 24.4279 40.0279C23.9286 39.8853 23.2866 39.6713 22.93 39.5999C20.2195 38.8153 18.2223 37.5314 18.2223 34.7496C18.2223 31.3972 20.9328 30.0419 23.9999 30.0419C27.281 30.0419 29.0643 31.2545 29.5636 31.5398V34.8923C29.5636 35.4629 29.3496 35.6769 28.8503 35.6769H27.4237L26.6391 32.8951C26.4251 32.7524 25.5692 32.2531 24.2139 32.2531C22.5734 32.2531 21.5034 32.9664 21.5034 34.3216C21.5034 35.6769 22.8587 36.3902 24.5706 36.8895C25.0699 37.0321 25.4978 37.1748 25.8545 37.2461C28.351 37.9594 30.2768 39.386 30.2768 41.9538C30.2768 45.6629 27.3524 46.8755 23.9999 46.8755C20.7188 46.8755 18.7929 45.5915 18.2936 45.2349V41.8111H18.2223ZM16.0111 42.5244C16.0111 42.2391 15.8685 42.0251 15.5832 42.0251C15.2978 42.0251 15.0839 42.3104 14.7985 42.5957C14.4419 42.8811 13.2293 44.4503 10.8755 44.4503C8.37897 44.4503 6.09646 42.1678 6.09646 38.4587C6.09646 35.0349 7.80834 32.3244 10.8755 32.3244C11.8741 32.3244 12.8013 32.6097 13.0867 32.6811L13.9426 35.6055H15.3692C15.7971 35.6055 16.0825 35.4629 16.0825 34.8209V31.4685C15.4405 31.0405 13.7999 29.9706 10.8755 29.9706C5.88247 29.9706 2.53003 33.109 2.53003 38.3874C2.53003 43.951 5.9538 46.8041 10.5902 46.8041C13.5146 46.8041 15.4405 45.5915 16.0825 45.1636V42.5244H16.0111ZM45.3985 42.5244C45.3985 42.2391 45.2558 42.0251 44.9705 42.0251C44.6852 42.0251 44.4712 42.3104 44.1859 42.5957C43.8293 42.8811 42.6167 44.4503 40.2628 44.4503C37.7663 44.4503 35.4838 42.1678 35.4838 38.4587C35.4838 35.0349 37.1957 32.3244 40.2628 32.3244C41.2614 32.3244 42.1887 32.6097 42.474 32.6811L43.33 35.6055H44.7565C45.1845 35.6055 45.4698 35.4629 45.4698 34.8209V31.4685C44.8279 31.0405 43.1873 29.9706 40.2628 29.9706C35.2698 29.9706 31.9174 33.109 31.9174 38.3874C31.9174 43.951 35.3412 46.8041 39.9775 46.8041C42.902 46.8041 44.8279 45.5915 45.4698 45.1636V42.5244H45.3985Z",\n fill: "#003A5C"\n }\n )\n ]\n }\n), UR = () => /* @__PURE__ */ e1(\n "svg",\n {\n width: "48",\n height: "48",\n viewBox: "0 0 48 48",\n fill: "none",\n xmlns: "http://www.w3.org/2000/svg",\n children: [\n /* @__PURE__ */ c("rect", { width: "48", height: "48", fill: "white" }),\n /* @__PURE__ */ c(\n "path",\n {\n d: "M15.7625 10.5255C18.3846 10.5255 19.8688 12.3597 20.3635 13.2258C20.8088 12.1049 21.7488 10.2708 22.194 9.65937C21.5014 8.89514 19.2751 6.85718 15.7625 6.85718C10.7656 6.85718 6.85718 11.035 6.85718 16.028C6.85718 21.4286 11.1119 24.7912 14.5751 25.0969V21.3776C12.6951 20.97 10.4193 19.0849 10.4193 16.028C10.4193 12.9711 12.8435 10.5255 15.7625 10.5255Z",\n fill: "#003A5C"\n }\n ),\n /* @__PURE__ */ c(\n "path",\n {\n d: "M33.4249 6.9082V10.6275C35.3049 11.0351 37.5807 12.9202 37.5807 15.9771C37.5807 19.0341 35.1565 21.4796 32.2375 21.4796C29.6154 21.4796 28.1312 19.6454 27.6364 18.7793C27.1912 19.9002 26.2512 21.7344 25.8059 22.3457C26.4985 23.11 28.7249 25.1479 32.2375 25.1479C37.2343 25.1479 41.1428 20.9701 41.1428 15.9771C41.1428 10.5765 36.8386 7.26485 33.4249 6.9082Z",\n fill: "#97999B"\n }\n ),\n /* @__PURE__ */ c(\n "path",\n {\n d: "M31.05 10.5765V6.85718C25.6079 7.41762 23.8268 11.7992 22.3426 15.2638C20.5615 19.4925 19.4236 20.8172 16.95 21.3776V25.0969C22.1942 24.5365 24.1731 20.1549 25.6079 16.7413C27.0426 13.2258 28.1805 11.035 31.05 10.5765Z",\n fill: "#00B2A9"\n }\n ),\n /* @__PURE__ */ c(\n "path",\n {\n d: "M39.3117 24.1289C39.3117 23.7213 39.6085 23.4156 39.9548 23.4156C40.3011 23.4156 40.598 23.7213 40.598 24.1289C40.598 24.5365 40.3011 24.8422 39.9548 24.8422C39.559 24.8422 39.3117 24.5365 39.3117 24.1289ZM39.9548 24.9441C40.4001 24.9441 40.7464 24.5874 40.7464 24.1289C40.7464 23.6704 40.3506 23.3137 39.9548 23.3137C39.5096 23.3137 39.1138 23.6704 39.1138 24.1289C39.1138 24.5874 39.5096 24.9441 39.9548 24.9441ZM39.7569 24.1799H39.9054L40.1527 24.5874H40.3011L40.0538 24.1799C40.2022 24.1799 40.3011 24.078 40.3011 23.9251C40.3011 23.7213 40.2022 23.6704 39.9548 23.6704H39.6085V24.6384H39.7569V24.1799ZM39.7569 24.078V23.7723H39.9548C40.0538 23.7723 40.1527 23.7723 40.1527 23.9251C40.1527 24.078 40.0538 24.078 39.9054 24.078H39.7569Z",\n fill: "white"\n }\n ),\n /* @__PURE__ */ c(\n "path",\n {\n d: "M19.8731 36.7223C19.8731 36.3147 19.975 36.1619 20.3826 36.1619H21.4525L21.962 38.047C22.1148 38.1489 22.8791 38.7093 23.949 38.7093C25.3756 38.7093 26.0379 37.996 26.0379 37.1808C26.0379 36.4166 25.4775 35.8052 24.3056 35.4486C23.949 35.3467 23.4905 35.1938 23.2357 35.1429C21.2997 34.5824 19.8731 33.6654 19.8731 31.6784C19.8731 29.2838 21.8091 28.3157 23.9999 28.3157C26.3436 28.3157 27.6173 29.1819 27.974 29.3856V31.7803C27.974 32.1878 27.8211 32.3407 27.4645 32.3407H26.4455L25.8851 30.3537C25.7322 30.2518 25.1208 29.8951 24.1528 29.8951C22.981 29.8951 22.2167 30.4046 22.2167 31.3727C22.2167 32.3407 23.1848 32.8502 24.4075 33.2068C24.7642 33.3087 25.0699 33.4106 25.3246 33.4616C27.1078 33.9711 28.4835 34.99 28.4835 36.8242C28.4835 39.4735 26.3945 40.3397 23.9999 40.3397C21.6563 40.3397 20.2807 39.4226 19.924 39.1679V36.7223H19.8731ZM18.2937 37.2318C18.2937 37.028 18.1918 36.8751 17.988 36.8751C17.7842 36.8751 17.6313 37.0789 17.4275 37.2827C17.1728 37.4865 16.3067 38.6074 14.6253 38.6074C12.8421 38.6074 11.2118 36.977 11.2118 34.3277C11.2118 31.8821 12.4345 29.9461 14.6253 29.9461C15.3386 29.9461 16.001 30.1499 16.2048 30.2008L16.8161 32.2897H17.8351C18.1408 32.2897 18.3446 32.1878 18.3446 31.7293V29.3347C17.8861 29.029 16.7142 28.2648 14.6253 28.2648C11.0589 28.2648 8.66431 30.5065 8.66431 34.2767C8.66431 38.2508 11.1099 40.2887 14.4215 40.2887C16.5104 40.2887 17.8861 39.4226 18.3446 39.1169V37.2318H18.2937ZM39.2846 37.2318C39.2846 37.028 39.1827 36.8751 38.9789 36.8751C38.7752 36.8751 38.6223 37.0789 38.4185 37.2827C38.1638 37.4865 37.2976 38.6074 35.6163 38.6074C33.8331 38.6074 32.2027 36.977 32.2027 34.3277C32.2027 31.8821 33.4255 29.9461 35.6163 29.9461C36.3296 29.9461 36.9919 30.1499 37.1957 30.2008L37.8071 32.2897H38.8261C39.1318 32.2897 39.3356 32.1878 39.3356 31.7293V29.3347C38.877 29.029 37.7052 28.2648 35.6163 28.2648C32.0499 28.2648 29.6553 30.5065 29.6553 34.2767C29.6553 38.2508 32.1008 40.2887 35.4125 40.2887C37.5014 40.2887 38.877 39.4226 39.3356 39.1169V37.2318H39.2846Z",\n fill: "#003A5C"\n }\n )\n ]\n }\n), YR = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({\n __proto__: null,\n CSCHorizontaWhite: FR,\n CSCHorizontal: PR,\n CSCVertical: XR,\n CSCVerticalFilled: UR,\n Client: BR,\n Colored: SR,\n Filled: ER,\n FilledWhite: kR,\n KeyLine: NR,\n KeyLineDark: TR,\n Landscape: IR,\n Mono: DR,\n MonoDark: HR,\n Portrait: VR\n}, Symbol.toStringTag, { value: "Module" }));\nfunction GR(e) {\n return /* @__PURE__ */ c(Cl, { className: "logo-svg", ...e });\n}\nconst ur = Sr(YR)(GR), QR = styled_components__WEBPACK_IMPORTED_MODULE_1___default().div(\n ({ theme: { colors: e, borderRadius: t, itemSize: o }, size: n, $hasUrl: r }) => {\n let i;\n switch (n) {\n case n2.MEDIUM:\n i = o.md;\n break;\n case n2.LARGE:\n i = o.lg;\n break;\n case n2.EXTRA_LARGE:\n i = o.xl;\n break;\n case n2.SMALL:\n i = o.sm;\n break;\n case n2.XSMALL:\n default:\n i = o.xs;\n }\n return (0,styled_components__WEBPACK_IMPORTED_MODULE_1__.css)`\n display: flex;\n align-items: center;\n justify-content: center;\n width: ${i};\n height: ${i};\n overflow: hidden;\n border-radius: ${t.circle};\n background-color: ${r ? "none" : e.topBar.topBarBgTertiary};\n color: ${e.grey};\n position: relative;\n\n img {\n display: block;\n max-width: 100%;\n max-height: 100%;\n border-radius: ${t.circle};\n }\n `;\n }\n), ZR = styled_components__WEBPACK_IMPORTED_MODULE_1___default().div(\n ({ theme: { borderRadius: e } }) => (0,styled_components__WEBPACK_IMPORTED_MODULE_1__.css)`\n position: absolute;\n /* top: 0.25rem;\n right: 0.25rem;\n bottom: 0.25rem;\n left: 0.25rem; */\n display: flex;\n justify-content: center;\n align-items: center;\n overflow: hidden;\n border-radius: ${e.circle};\n\n .icon-system {\n /* position: absolute;\n bottom: -5%;\n left: 50%;\n right: 0; */\n width: 75%;\n /* transform: translate(-50%, 0); */\n display: flex;\n justify-content: center;\n align-items: center;\n\n svg {\n width: 75%;\n }\n }\n `\n), jR = (styled_components__WEBPACK_IMPORTED_MODULE_1___default().div)`\n display: flex;\n align-items: center;\n`, KR = styled_components__WEBPACK_IMPORTED_MODULE_1___default().span(\n ({ theme: { typography: e, fontWeight: t, lineHeight: o, colors: n }, size: r }) => {\n let i;\n switch (r) {\n case n2.MEDIUM:\n i = e.t16;\n break;\n case n2.LARGE:\n i = e.t20;\n break;\n case n2.EXTRA_LARGE:\n i = e.t24;\n break;\n case n2.SMALL:\n i = e.t12;\n break;\n case n2.XSMALL:\n default:\n i = e.t10;\n }\n const a = parseFloat(i) * 10;\n return (0,styled_components__WEBPACK_IMPORTED_MODULE_1__.css)`\n display: block;\n color: ${n.topBar.topBarTextSecondary};\n font-size: ${i};\n font-weight: ${t.medium};\n line-height: ${o.lh20};\n white-space: nowrap;\n text-overflow: ellipsis;\n overflow: hidden;\n max-width: ${a}rem;\n `;\n }\n), JR = (e, t) => {\n const { size: o, url: n, name: r } = e;\n let i;\n if (r && !n) {\n const a = r.split(" "), s = a.length >= 2 ? `${a[0].charAt(0)}${a[1].charAt(0)}`.toUpperCase() : Array.from(r)[0].toUpperCase();\n i = /* @__PURE__ */ c(KR, { size: o, children: s });\n } else\n n ? i = /* @__PURE__ */ c("img", { src: n, alt: r }) : i = /* @__PURE__ */ c(ZR, { children: /* @__PURE__ */ c(Z1, { name: "ProfileFilled", color: "#1D174F", size: "xxs" }) });\n return /* @__PURE__ */ c(QR, { size: o, $hasUrl: !!n, ref: t, children: i });\n}, t9 = (0,react__WEBPACK_IMPORTED_MODULE_0__.forwardRef)(JR), _R = (e, t) => {\n const { size: o = n2.SMALL, name: n, ...r } = e;\n return n ? /* @__PURE__ */ c(jR, { ref: t, children: /* @__PURE__ */ c(t9, { size: o, ...r, name: n }) }) : /* @__PURE__ */ c(t9, { ref: t, size: o, ...r });\n}, zr = (0,react__WEBPACK_IMPORTED_MODULE_0__.forwardRef)(_R), $R = 2, eB = {\n xs: 16,\n sm: 24,\n md: 40,\n lg: 48,\n xl: 64\n};\nfunction tB(e, t, o) {\n return o || e[t];\n}\nfunction oB(e) {\n const t = tB(eB, e), o = $R, n = (t - o) / 2, r = n * 2 * Math.PI;\n return [t, o, n, r];\n}\nconst rB = styled_components__WEBPACK_IMPORTED_MODULE_1___default().svg(\n ({ theme: { colors: e } }) => (0,styled_components__WEBPACK_IMPORTED_MODULE_1__.css)`\n color: ${e.backgrounds.bgInformationalPrimary};\n stroke: currentColor;\n transform: rotate(-90deg);\n fill: none;\n `\n), nB = styled_components__WEBPACK_IMPORTED_MODULE_1___default().circle(\n ({ theme: { colors: e } }) => (0,styled_components__WEBPACK_IMPORTED_MODULE_1__.css)`\n color: ${e.backgrounds.bgInformationalPrimary};\n `\n), iB = styled_components__WEBPACK_IMPORTED_MODULE_1___default().circle(\n ({ theme: { colors: e } }) => (0,styled_components__WEBPACK_IMPORTED_MODULE_1__.css)`\n color: ${e.border.borderPrimary};\n `\n), aB = (e, t) => {\n const { progress: o = 0, size: n = "xs", ...r } = e, [i, a, s, l] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useMemo)(\n () => oB(n),\n [n]\n ), p = o <= 0 ? 0 : o > 100 ? 100 : Number(o), d = l - l * p / 100;\n return /* @__PURE__ */ e1(\n rB,\n {\n ...r,\n width: i,\n height: i,\n viewBox: `0 0 ${i} ${i}`,\n ref: t,\n children: [\n /* @__PURE__ */ c(\n iB,\n {\n cx: i / 2,\n cy: i / 2,\n r: s,\n strokeWidth: a,\n strokeDasharray: l,\n strokeDashoffset: 0\n }\n ),\n /* @__PURE__ */ c(\n nB,\n {\n cx: i / 2,\n cy: i / 2,\n r: s,\n strokeWidth: a,\n strokeDasharray: l,\n strokeDashoffset: d\n }\n )\n ]\n }\n );\n}, sB = (0,react__WEBPACK_IMPORTED_MODULE_0__.forwardRef)(aB), Xi = {\n CIRCLE: "circle",\n LINEAR: "linear"\n}, t5 = {\n CYAN: "cyan",\n BLUE: "blue"\n}, cB = styled_components__WEBPACK_IMPORTED_MODULE_1___default().div(\n ({ theme: { colors: e }, progress: t, $backgroundColor: o }) => {\n let n;\n switch (o) {\n case t5.BLUE:\n n = e.backgrounds.bgInformationalPrimary;\n break;\n case t5.CYAN:\n default:\n n = e.backgrounds.bgInformationalPrimary;\n }\n return (0,styled_components__WEBPACK_IMPORTED_MODULE_1__.css)`\n position: relative;\n width: 100%;\n min-width: 40px;\n height: 4px;\n background-color: ${e.border.borderPrimary};\n border-radius: 20px;\n overflow: hidden;\n\n &:after {\n content: \'\';\n position: absolute;\n height: 100%;\n width: ${t}%;\n background-color: ${n};\n border-radius: 20px;\n transition: width 0.2s linear;\n }\n `;\n }\n);\nfunction lB(e, t) {\n const {\n progress: o = 0,\n backgroundColor: n = t5.CYAN,\n ...r\n } = e, i = o <= 0 ? 0 : o > 100 ? 100 : Number(o);\n return /* @__PURE__ */ c(\n cB,\n {\n ref: t,\n progress: i,\n $backgroundColor: n,\n ...r\n }\n );\n}\nconst pB = (0,react__WEBPACK_IMPORTED_MODULE_0__.forwardRef)(lB), dB = (e, t) => {\n const { hasLabel: o, progress: n, type: r = Xi.CIRCLE } = e;\n return /* @__PURE__ */ e1(OR, { ref: t, children: [\n (() => {\n switch (r) {\n case Xi.LINEAR:\n return /* @__PURE__ */ c(pB, { progress: n });\n case Xi.CIRCLE:\n default:\n return /* @__PURE__ */ c(sB, { progress: n });\n }\n })(),\n o && /* @__PURE__ */ e1(Bp, { children: [\n Number(n),\n "%"\n ] })\n ] });\n}, C4 = (0,react__WEBPACK_IMPORTED_MODULE_0__.forwardRef)(dB), Q4 = styled_components__WEBPACK_IMPORTED_MODULE_1___default().div(\n ({ theme: { borderRadius: e } }) => (0,styled_components__WEBPACK_IMPORTED_MODULE_1__.css)`\n display: inline-block;\n width: 6px;\n height: 6px;\n border-radius: ${e.circle};\n `\n), bB = styled_components__WEBPACK_IMPORTED_MODULE_1___default()(Q4)(\n ({ theme: { colors: e } }) => (0,styled_components__WEBPACK_IMPORTED_MODULE_1__.css)`\n background-color: ${e.backgrounds.bgSuccessPrimary};\n `\n), MB = styled_components__WEBPACK_IMPORTED_MODULE_1___default()(Q4)(\n ({ theme: { colors: e } }) => (0,styled_components__WEBPACK_IMPORTED_MODULE_1__.css)`\n background-color: ${e.backgrounds.bgWarningPrimary};\n `\n), Ep = styled_components__WEBPACK_IMPORTED_MODULE_1___default()(Q4)(\n ({ theme: { colors: e } }) => (0,styled_components__WEBPACK_IMPORTED_MODULE_1__.css)`\n background-color: ${e.backgrounds.bgErrorPrimary};\n `\n), H3 = {\n ACTIVE: "active",\n PENDING: "pending",\n INACTIVE: "inactive"\n}, o9 = ({ type: e, ...t }) => {\n switch (e) {\n case H3.ACTIVE:\n return /* @__PURE__ */ c(bB, { ...t });\n case H3.PENDING:\n return /* @__PURE__ */ c(MB, { ...t });\n case H3.INACTIVE:\n default:\n return /* @__PURE__ */ c(Ep, { ...t });\n }\n}, m4 = ({\n type: e,\n hasLabel: t = !0,\n children: o,\n iconStyle: n,\n ...r\n}) => {\n if (!t)\n return /* @__PURE__ */ c(o9, { type: e });\n let i;\n switch (e) {\n case H3.ACTIVE:\n i = "Active";\n break;\n case H3.PENDING:\n i = "Pending";\n break;\n case H3.INACTIVE:\n default:\n i = "Inactive";\n }\n return /* @__PURE__ */ e1(Rp, { ...r, children: [\n /* @__PURE__ */ c(o9, { type: e, style: n }),\n o || i\n ] });\n}, Z4 = styled_components__WEBPACK_IMPORTED_MODULE_1___default().div(\n ({ theme: { typography: e, fontWeight: t, spacings: o } }) => (0,styled_components__WEBPACK_IMPORTED_MODULE_1__.css)`\n display: inline-flex;\n justify-content: center;\n align-items: center;\n padding: ${o.sp4} ${o.sp6};\n border-radius: 56px;\n font-size: ${e.t10};\n font-weight: ${t.medium};\n height: 16px;\n box-sizing: border-box;\n border: 1px solid transparent;\n `\n), AB = styled_components__WEBPACK_IMPORTED_MODULE_1___default()(Z4)(\n ({ theme: { colors: e } }) => (0,styled_components__WEBPACK_IMPORTED_MODULE_1__.css)`\n background-color: ${e.backgrounds.bgSuccessPrimary};\n border-color: ${e.backgrounds.bgSuccessPrimary};\n color: ${e.textIcon.textTertiary};\n `\n), uB = styled_components__WEBPACK_IMPORTED_MODULE_1___default()(Z4)(\n ({ theme: { colors: e } }) => (0,styled_components__WEBPACK_IMPORTED_MODULE_1__.css)`\n background-color: ${e.backgrounds.bgWarningPrimary};\n border-color: ${e.backgrounds.bgWarningPrimary};\n color: ${e.textIcon.textTertiary};\n `\n), zB = styled_components__WEBPACK_IMPORTED_MODULE_1___default()(Z4)(\n ({ theme: { colors: e } }) => (0,styled_components__WEBPACK_IMPORTED_MODULE_1__.css)`\n background-color: ${e.backgrounds.bgErrorPrimary};\n border-color: ${e.backgrounds.bgErrorPrimary};\n color: ${e.textIcon.textTertiary};\n `\n), hB = styled_components__WEBPACK_IMPORTED_MODULE_1___default()(Z4)(\n ({ theme: { colors: e } }) => (0,styled_components__WEBPACK_IMPORTED_MODULE_1__.css)`\n background-color: ${e.backgrounds.bgErrorSecondary};\n border-color: ${e.border.borderError};\n color: ${e.textIcon.textError};\n `\n), Ui = {\n LOW: "low",\n MEDIUM: "medium",\n HIGH: "high",\n NO_GO: "no_go"\n}, o5 = ({\n type: e,\n children: t,\n ...o\n}) => {\n switch (e) {\n case Ui.LOW:\n return /* @__PURE__ */ c(AB, { ...o, children: t || "Low" });\n case Ui.MEDIUM:\n return /* @__PURE__ */ c(uB, { ...o, children: t || "Medium" });\n case Ui.HIGH:\n return /* @__PURE__ */ c(zB, { ...o, children: t || "High" });\n default:\n return /* @__PURE__ */ c(hB, { ...o, children: t || "No Go" });\n }\n};\nfunction un({\n style: e,\n isGroup: t,\n radioBtnValue: o,\n isRadioButton: n,\n data: r,\n index: i,\n onSelectHandle: a,\n label: s,\n subLabel: l,\n isMulti: p,\n checkboxValue: d,\n groupByDivider: b,\n defaultValues: M,\n selectedLists: u,\n tooltipText: A\n}) {\n var g, v, L, y, B, X, F, T, w, H, C, q, m, k, x, N, V, R, I, j, U, _, r1, K, Q, E, D, G, J, S, W, P, Y, Z, t1, i1, n1, s1, d1, b1, c1, a1, l1, p1, M1, A1, u1, h1, C1, q1, W1, R1, k1, N1, v1, S1, D1, F1, U1, h0, O0, w1, g1, E1, B1, K1, p0, e0, H1, x1, I1, X1, J1, f0, I0, O1, V1, G1, i0, b0, g0, u0, z0, V0, W0, F0, b2, Z2, j0, a2, A2, Ot, ft, jr, Kr, ho, Jr, _r, xe, We, he, Oo, $r, Yt, fo, f3, Gt, Qt, g3, go, Co, je, gt, C3, mo, Lo, m3, vo, qo, qs, ys, ws, xs, Ws, Rs, Bs, Ss, Es, ks, Ns, Ts, Is, Ds, Hs, Vs, Ps, Fs, Xs, Us, Ys, Gs, Qs, Zs, js, Ks, Js, _s, $s, e8, t8, o8, r8, n8, i8, a8, s8;\n if (t)\n return b ? i == 0 ? "" : /* @__PURE__ */ c(\n Fi,\n {\n className: `ListItem list-item-${i}`,\n style: e,\n children: /* @__PURE__ */ c(P2, { $default: !0 })\n },\n (g = r[i].item) == null ? void 0 : g.value\n ) : /* @__PURE__ */ c(\n Fi,\n {\n className: `ListItem list-item-${i}`,\n style: e,\n children: /* @__PURE__ */ c(fR, { children: /* @__PURE__ */ c(gR, { children: s }) })\n },\n (v = r[i].item) != null && v.value ? (L = r[i].item) == null ? void 0 : L.value : i\n );\n const z = (S2, E2, Re) => {\n if ((M == null ? void 0 : M.length) == 0) {\n let Oe;\n return S2 == null || S2.filter((w2) => {\n var yo;\n (yo = E2[Re].item) != null && yo.value && (w2 != null && w2.value) && E2[Re].item.value == (w2 == null ? void 0 : w2.value) && (Oe = !1);\n }), Oe;\n } else {\n let Oe;\n return S2 == null || S2.filter((w2) => {\n var yo, c8;\n (yo = E2[Re].item) != null && yo.value && (w2 != null && w2.value) && ((c8 = E2[Re].item) == null ? void 0 : c8.value) == (w2 == null ? void 0 : w2.value) && (Oe = !0);\n }), Oe;\n }\n }, f = (S2, E2, Re) => {\n let Oe;\n return Re == null || Re.filter((w2) => {\n w2.value == S2[E2].item.value && (Oe = !0);\n }), Oe;\n }, O = (S2, E2, Re) => {\n let Oe;\n return Re.value == S2[E2].item.value && (Oe = !0), Oe;\n };\n let h = (r == null ? void 0 : r[0].type) == "item" && (r == null ? void 0 : r.length) > 8 ? !0 : (r == null ? void 0 : r[0].type) != "item" && (r == null ? void 0 : r.length) > 10;\n return /* @__PURE__ */ c(s0, { children: /* @__PURE__ */ c(\n Fi,\n {\n className: `ListItem list-item-${i}`,\n style: e,\n children: (y = r[i].item) != null && y.tooltipText ? /* @__PURE__ */ c(\n A3,\n {\n text: (B = r[i].item) == null ? void 0 : B.tooltipText,\n size: "mini",\n place: "bottom",\n children: /* @__PURE__ */ e1(\n $a,\n {\n onClick: () => {\n a && a(r[i], i);\n },\n $subLabel: !!((X = r[i].item) != null && X.subLabel),\n tabIndex: 0,\n $isSelected: M != null && M.length ? f(r, i, M) : (M == null ? void 0 : M.length) == null ? z([M], r, i) : !(u != null && u.length) && u != null ? (u == null ? void 0 : u.value) === ((F = r[i].item) == null ? void 0 : F.value) : !!z(u, r, i),\n $isScroll: h,\n children: [\n ((T = r[i].item) == null ? void 0 : T.leftIcon) && /* @__PURE__ */ c(react__WEBPACK_IMPORTED_MODULE_0__.Fragment, { children: ((w = J2 == null ? void 0 : J2.Countries.filter((S2) => {\n var E2;\n return ((E2 = r[i].item) == null ? void 0 : E2.leftIcon.name) == S2.CountryName;\n })) == null ? void 0 : w.length) > 0 ? /* @__PURE__ */ c(_7, { children: /* @__PURE__ */ c(\n i4,\n {\n name: (H = r[i].item) == null ? void 0 : H.leftIcon.name,\n size: "xxs",\n hideClassName: !0\n }\n ) }) : /* @__PURE__ */ c(pn, { children: /* @__PURE__ */ c(\n Z1,\n {\n name: (C = r[i].item) == null ? void 0 : C.leftIcon.name,\n size: "xxs",\n color: (q = r[i].item) != null && q.leftIcon.color ? (m = r[i].item) == null ? void 0 : m.leftIcon.color : "#2B2B37"\n }\n ) }) }),\n !((k = r[i].item) != null && k.countryList) && !((x = r[i].item) != null && x.timeZone) && p && ((N = r[i].item) == null ? void 0 : N.rightIcon) == null && !n && /* @__PURE__ */ c(ln, { children: M ? /* @__PURE__ */ c(\n yt,\n {\n defaultChecked: f(\n r,\n i,\n M\n ),\n id: (V = r[i].item) == null ? void 0 : V.value,\n isRequired: !0\n }\n ) : /* @__PURE__ */ c(\n yt,\n {\n defaultChecked: d[i],\n id: (R = r[i].item) == null ? void 0 : R.value,\n isRequired: !0\n }\n ) }),\n !((I = r[i].item) != null && I.countryList) && !((j = r[i].item) != null && j.timeZone) && n && !p && (M ? /* @__PURE__ */ c(\n An,\n {\n name: "list",\n defaultChecked: O(\n r,\n i,\n M\n ),\n isRequired: !0\n },\n i\n ) : /* @__PURE__ */ c(\n An,\n {\n name: "list",\n defaultChecked: o[i],\n isRequired: !0\n },\n i\n )),\n (((U = r[i].item) == null ? void 0 : U.avatar) || ((_ = r[i].item) == null ? void 0 : _.logoName)) && /* @__PURE__ */ e1($7, { children: [\n !((r1 = r[i].item) != null && r1.avatar) && ((K = r[i].item) == null ? void 0 : K.logoName) && /* @__PURE__ */ c(\n ur,\n {\n name: (Q = r[i].item) == null ? void 0 : Q.logoName,\n size: "10px"\n }\n ),\n ((E = r[i].item) == null ? void 0 : E.avatar) && /* @__PURE__ */ c(\n zr,\n {\n size: "xs",\n url: `${(D = r[i].item) == null ? void 0 : D.avatar.url}`,\n name: `${(G = r[i].item) == null ? void 0 : G.avatar.name}`\n }\n )\n ] }),\n !((J = r[i].item) != null && J.countryList) && !((S = r[i].item) != null && S.timeZone) ? (W = r[i].item) != null && W.subLabel ? /* @__PURE__ */ e1(K7, { children: [\n /* @__PURE__ */ c(J7, { children: s }),\n /* @__PURE__ */ c(j7, { children: l })\n ] }) : /* @__PURE__ */ c(Se, { children: s }) : (P = r[i].item) != null && P.timeZone ? /* @__PURE__ */ e1(Se, { children: [\n /* @__PURE__ */ c(\n bn,\n {\n $width: ((t1 = (Z = (Y = r[i].item) == null ? void 0 : Y.timeZone) == null ? void 0 : Z.zone) == null ? void 0 : t1.length) <= 4,\n children: (n1 = (i1 = r[i].item) == null ? void 0 : i1.timeZone) == null ? void 0 : n1.zone\n }\n ),\n /* @__PURE__ */ c(Mn, { isTimeZone: !0, children: (d1 = (s1 = r[i].item) == null ? void 0 : s1.timeZone) == null ? void 0 : d1.time })\n ] }) : /* @__PURE__ */ e1(Se, { children: [\n /* @__PURE__ */ c(\n bn,\n {\n $width: ((a1 = (c1 = (b1 = r[i].item) == null ? void 0 : b1.countryList) == null ? void 0 : c1.countryCode) == null ? void 0 : a1.length) <= 4,\n children: (p1 = (l1 = r[i].item) == null ? void 0 : l1.countryList) == null ? void 0 : p1.countryCode\n }\n ),\n /* @__PURE__ */ c(Mn, { isTimeZone: !1, children: (A1 = (M1 = r[i].item) == null ? void 0 : M1.countryList) == null ? void 0 : A1.countryName })\n ] }),\n ((u1 = r[i].item) == null ? void 0 : u1.subMenu) == !0 && /* @__PURE__ */ c(e5, { children: /* @__PURE__ */ c(dt, { data: (h1 = r[i].item) == null ? void 0 : h1.subMenuData }) }),\n /* @__PURE__ */ e1(ln, { children: [\n ((C1 = r[i].item) == null ? void 0 : C1.rightIcon) != null ? /* @__PURE__ */ c(pn, { children: /* @__PURE__ */ c(\n Z1,\n {\n name: (W1 = (q1 = r[i].item) == null ? void 0 : q1.rightIcon) == null ? void 0 : W1.name,\n size: "xxs",\n color: (R1 = r[i].item) != null && R1.rightIcon.color ? (k1 = r[i].item) == null ? void 0 : k1.rightIcon.color : "#2B2B37"\n }\n ) }) : (N1 = r[i].item) != null && N1.indicator && ((v1 = r[i].item) == null ? void 0 : v1.indicator.indicatorType.toLowerCase()) == "risk" ? /* @__PURE__ */ c(Q7, { children: /* @__PURE__ */ c(\n o5,\n {\n type: (D1 = (S1 = r[i].item) == null ? void 0 : S1.indicator) == null ? void 0 : D1.status\n }\n ) }) : ((U1 = (F1 = r[i].item) == null ? void 0 : F1.indicator) == null ? void 0 : U1.indicatorType.toLowerCase()) == "status" ? /* @__PURE__ */ c(Z7, { children: /* @__PURE__ */ c(\n m4,\n {\n type: (O0 = (h0 = r[i].item) == null ? void 0 : h0.indicator) == null ? void 0 : O0.status,\n hasLabel: (g1 = (w1 = r[i].item) == null ? void 0 : w1.indicator) == null ? void 0 : g1.hasLabel\n }\n ) }) : ((B1 = (E1 = r[i].item) == null ? void 0 : E1.indicator) == null ? void 0 : B1.indicatorType.toLowerCase()) == "progress" ? /* @__PURE__ */ c(G7, { children: /* @__PURE__ */ c(\n C4,\n {\n progress: (p0 = (K1 = r[i].item) == null ? void 0 : K1.indicator) == null ? void 0 : p0.progress,\n type: (H1 = (e0 = r[i].item) == null ? void 0 : e0.indicator) == null ? void 0 : H1.status,\n hasLabel: (I1 = (x1 = r[i].item) == null ? void 0 : x1.indicator) == null ? void 0 : I1.hasLabel\n }\n ) }) : null,\n !((X1 = r[i].item) != null && X1.indicator) && ((J1 = r[i].item) == null ? void 0 : J1.isFavourite) && /* @__PURE__ */ c(Z1, { name: "StarSolid", size: "xs" }),\n !((f0 = r[i].item) != null && f0.indicator) && !((I0 = r[i].item) != null && I0.isFavourite) && ((O1 = r[i].item) == null ? void 0 : O1.isActionButton) && /* @__PURE__ */ c(Se, { children: "Action Btn" }),\n !((V1 = r[i].item) != null && V1.indicator) && !((G1 = r[i].item) != null && G1.isFavourite) && !((i0 = r[i].item) != null && i0.isActionButton) && ((b0 = r[i].item) == null ? void 0 : b0.isToggle) && /* @__PURE__ */ c(Se, { children: "toggle" })\n ] })\n ]\n }\n )\n }\n ) : /* @__PURE__ */ e1(\n $a,\n {\n onClick: () => {\n a && a(r[i], i);\n },\n $subLabel: !!((g0 = r[i].item) != null && g0.subLabel),\n tabIndex: 0,\n $isSelected: M != null && M.length ? f(r, i, M) : (M == null ? void 0 : M.length) == null ? z([M], r, i) : !(u != null && u.length) && u != null ? (u == null ? void 0 : u.value) === ((u0 = r[i].item) == null ? void 0 : u0.value) : !!z(u, r, i),\n $isScroll: h,\n children: [\n ((z0 = r[i].item) == null ? void 0 : z0.leftIcon) && /* @__PURE__ */ c(react__WEBPACK_IMPORTED_MODULE_0__.Fragment, { children: ((V0 = J2 == null ? void 0 : J2.Countries.filter((S2) => {\n var E2;\n return ((E2 = r[i].item) == null ? void 0 : E2.leftIcon.name) == S2.CountryName;\n })) == null ? void 0 : V0.length) > 0 ? /* @__PURE__ */ c(_7, { children: /* @__PURE__ */ c(\n i4,\n {\n name: (W0 = r[i].item) == null ? void 0 : W0.leftIcon.name,\n size: "xxs",\n hideClassName: !0\n }\n ) }) : /* @__PURE__ */ c(pn, { children: /* @__PURE__ */ c(\n Z1,\n {\n name: (F0 = r[i].item) == null ? void 0 : F0.leftIcon.name,\n size: "xxs",\n color: (b2 = r[i].item) != null && b2.leftIcon.color ? (Z2 = r[i].item) == null ? void 0 : Z2.leftIcon.color : "#2B2B37"\n }\n ) }) }),\n !((j0 = r[i].item) != null && j0.countryList) && !((a2 = r[i].item) != null && a2.timeZone) && p && ((A2 = r[i].item) == null ? void 0 : A2.rightIcon) == null && !n && /* @__PURE__ */ c(ln, { children: M ? /* @__PURE__ */ c(\n yt,\n {\n defaultChecked: f(\n r,\n i,\n M\n ),\n id: (Ot = r[i].item) == null ? void 0 : Ot.value,\n isRequired: !0\n }\n ) : /* @__PURE__ */ c(\n yt,\n {\n defaultChecked: d[i],\n id: (ft = r[i].item) == null ? void 0 : ft.value,\n isRequired: !0\n }\n ) }),\n !((jr = r[i].item) != null && jr.countryList) && !((Kr = r[i].item) != null && Kr.timeZone) && n && !p && (M ? /* @__PURE__ */ c(\n An,\n {\n name: "list",\n defaultChecked: O(\n r,\n i,\n M\n ),\n isRequired: !0\n },\n i\n ) : /* @__PURE__ */ c(\n An,\n {\n name: "list",\n defaultChecked: o[i],\n isRequired: !0\n },\n i\n )),\n (((ho = r[i].item) == null ? void 0 : ho.avatar) || ((Jr = r[i].item) == null ? void 0 : Jr.logoName)) && /* @__PURE__ */ e1($7, { children: [\n !((_r = r[i].item) != null && _r.avatar) && ((xe = r[i].item) == null ? void 0 : xe.logoName) && /* @__PURE__ */ c(ur, { name: (We = r[i].item) == null ? void 0 : We.logoName, size: "10px" }),\n ((he = r[i].item) == null ? void 0 : he.avatar) && /* @__PURE__ */ c(\n zr,\n {\n size: "xs",\n url: `${(Oo = r[i].item) == null ? void 0 : Oo.avatar.url}`,\n name: `${($r = r[i].item) == null ? void 0 : $r.avatar.name}`\n }\n )\n ] }),\n !((Yt = r[i].item) != null && Yt.countryList) && !((fo = r[i].item) != null && fo.timeZone) ? (f3 = r[i].item) != null && f3.subLabel ? /* @__PURE__ */ e1(K7, { children: [\n /* @__PURE__ */ c(J7, { children: s }),\n /* @__PURE__ */ c(j7, { children: l })\n ] }) : /* @__PURE__ */ c(Se, { children: s }) : (Gt = r[i].item) != null && Gt.timeZone ? /* @__PURE__ */ e1(Se, { children: [\n /* @__PURE__ */ c(\n bn,\n {\n $width: ((go = (g3 = (Qt = r[i].item) == null ? void 0 : Qt.timeZone) == null ? void 0 : g3.zone) == null ? void 0 : go.length) <= 4,\n children: (je = (Co = r[i].item) == null ? void 0 : Co.timeZone) == null ? void 0 : je.zone\n }\n ),\n /* @__PURE__ */ c(Mn, { isTimeZone: !0, children: (C3 = (gt = r[i].item) == null ? void 0 : gt.timeZone) == null ? void 0 : C3.time })\n ] }) : /* @__PURE__ */ e1(Se, { children: [\n /* @__PURE__ */ c(\n bn,\n {\n $width: ((m3 = (Lo = (mo = r[i].item) == null ? void 0 : mo.countryList) == null ? void 0 : Lo.countryCode) == null ? void 0 : m3.length) <= 4,\n children: (qo = (vo = r[i].item) == null ? void 0 : vo.countryList) == null ? void 0 : qo.countryCode\n }\n ),\n /* @__PURE__ */ c(Mn, { isTimeZone: !1, children: (ys = (qs = r[i].item) == null ? void 0 : qs.countryList) == null ? void 0 : ys.countryName })\n ] }),\n ((ws = r[i].item) == null ? void 0 : ws.subMenu) == !0 && /* @__PURE__ */ c(e5, { children: /* @__PURE__ */ c(dt, { data: (xs = r[i].item) == null ? void 0 : xs.subMenuData }) }),\n /* @__PURE__ */ e1(ln, { children: [\n ((Ws = r[i].item) == null ? void 0 : Ws.rightIcon) != null ? /* @__PURE__ */ c(pn, { children: /* @__PURE__ */ c(\n Z1,\n {\n name: (Bs = (Rs = r[i].item) == null ? void 0 : Rs.rightIcon) == null ? void 0 : Bs.name,\n size: "xxs",\n color: (Ss = r[i].item) != null && Ss.rightIcon.color ? (Es = r[i].item) == null ? void 0 : Es.rightIcon.color : "#2B2B37"\n }\n ) }) : (ks = r[i].item) != null && ks.indicator && ((Ns = r[i].item) == null ? void 0 : Ns.indicator.indicatorType.toLowerCase()) == "risk" ? /* @__PURE__ */ c(Q7, { children: /* @__PURE__ */ c(\n o5,\n {\n type: (Is = (Ts = r[i].item) == null ? void 0 : Ts.indicator) == null ? void 0 : Is.status\n }\n ) }) : ((Hs = (Ds = r[i].item) == null ? void 0 : Ds.indicator) == null ? void 0 : Hs.indicatorType.toLowerCase()) == "status" ? /* @__PURE__ */ c(Z7, { children: /* @__PURE__ */ c(\n m4,\n {\n type: (Ps = (Vs = r[i].item) == null ? void 0 : Vs.indicator) == null ? void 0 : Ps.status,\n hasLabel: (Xs = (Fs = r[i].item) == null ? void 0 : Fs.indicator) == null ? void 0 : Xs.hasLabel\n }\n ) }) : ((Ys = (Us = r[i].item) == null ? void 0 : Us.indicator) == null ? void 0 : Ys.indicatorType.toLowerCase()) == "progress" ? /* @__PURE__ */ c(G7, { children: /* @__PURE__ */ c(\n C4,\n {\n progress: (Qs = (Gs = r[i].item) == null ? void 0 : Gs.indicator) == null ? void 0 : Qs.progress,\n type: (js = (Zs = r[i].item) == null ? void 0 : Zs.indicator) == null ? void 0 : js.status,\n hasLabel: (Js = (Ks = r[i].item) == null ? void 0 : Ks.indicator) == null ? void 0 : Js.hasLabel\n }\n ) }) : null,\n !((_s = r[i].item) != null && _s.indicator) && (($s = r[i].item) == null ? void 0 : $s.isFavourite) && /* @__PURE__ */ c(Z1, { name: "StarSolid", size: "xs" }),\n !((e8 = r[i].item) != null && e8.indicator) && !((t8 = r[i].item) != null && t8.isFavourite) && ((o8 = r[i].item) == null ? void 0 : o8.isActionButton) && /* @__PURE__ */ c(Se, { children: "Action Btn" }),\n !((r8 = r[i].item) != null && r8.indicator) && !((n8 = r[i].item) != null && n8.isFavourite) && !((i8 = r[i].item) != null && i8.isActionButton) && ((a8 = r[i].item) == null ? void 0 : a8.isToggle) && /* @__PURE__ */ c(Se, { children: "toggle" })\n ] })\n ]\n }\n )\n },\n (s8 = r[i].item) == null ? void 0 : s8.value\n ) });\n}\nconst OB = 1, r5 = 2;\nlet hr = {};\nconst fB = (e) => !!hr[e], gB = (e, t) => {\n for (let o = e; o <= t; o++)\n hr[o] = OB;\n return new Promise((o) => {\n for (let n = e; n <= t; n++)\n hr[n] = r5;\n o();\n });\n}, Eo = 28;\nfunction CB(e) {\n const {\n highLightSelectedOptions: t,\n data: o,\n isMulti: n,\n isRadioButton: r,\n selectedOptions: i,\n groupByDivider: a,\n defaultValues: s,\n maxheight: l,\n selectedLists: p,\n resetList: d,\n showSelectedList: b\n } = e, [M, u] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)([]), [A, z] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)([]), [f, O] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)([]);\n let h = 225;\n const g = o && (o == null ? void 0 : o.length) > 8 ? l || h : o && (o == null ? void 0 : o.length) * Eo;\n (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => {\n (s == null ? void 0 : s.length) == 0 && O([]);\n }, [s]);\n const v = (F, T) => {\n var H, C;\n let w = {\n ...F == null ? void 0 : F.item\n };\n if (n)\n if (F.length) {\n let q = F;\n const m = [...M];\n q == null || q.map((x) => {\n let N = x.value - 1;\n m[N] = !M[N];\n }), u(m);\n let k = [];\n q == null || q.map((x) => {\n k.push({ label: x.label, value: x.value });\n }), f.push(k), O(k), t && i && i(k);\n } else {\n const q = [...M];\n q[T] = !M[T], u(q);\n let m;\n o && (m = { label: (H = o[T]) == null ? void 0 : H.label, value: (C = o[T]) == null ? void 0 : C.value }), f.push(m);\n let k;\n const x = f.reduce(\n (V, R) => ((k = V.find(\n (I) => I.value === R.value\n )) ? k.times++ : (R.times = 1, V.push(R)), V),\n []\n );\n x == null || x.map((V, R) => {\n V.times == 2 && x.splice(R, 1);\n });\n let N = [];\n x == null || x.map((V) => {\n N.push({ label: V.label, value: V.value });\n }), O(N), i && i(N);\n }\n else if (r) {\n let q = [];\n if (o)\n for (let k = 0; k < (o == null ? void 0 : o.length); k++)\n q[k] = !1;\n F && (q[T] = !0), z(q);\n let m = {\n value: w.value,\n label: w.label\n };\n i && i(m), O(m);\n } else {\n let q;\n w.countryList ? q = {\n countryList: { countryCode: w.countryList.countryCode },\n countryName: w.countryList.countryName,\n value: w.value,\n leftIcon: w.leftIcon\n } : w.timeZone ? q = {\n zone: w.timeZone.zone,\n time: w.timeZone.time,\n value: w.value\n } : q = {\n value: w.value,\n label: w.label\n }, i && i(q), O(q);\n }\n };\n (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => {\n s != null && n && (o == null || o.filter((F) => {\n Object.keys(s).forEach(function(T) {\n var w;\n s[T] && ((w = s[T]) != null && w.value) && F.value == s[T].value && v(s, s[T].value - 1);\n });\n }));\n }, []), (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => {\n d != null && d.length && t && (o == null || o.filter((F) => {\n Object.keys(d).forEach(function(T) {\n var w;\n d[T] && ((w = d[T]) != null && w.value) && F.value == d[T].value && v(d, d[T].value - 1);\n });\n }));\n }, [d, t]);\n const L = (0,react__WEBPACK_IMPORTED_MODULE_0__.useMemo)(() => {\n const F = {};\n let T = !0;\n if (o)\n for (let H = 0; H < (o == null ? void 0 : o.length); H++) {\n const C = o[H];\n !(C != null && C.hasOwnProperty("group")) && T && (T = !1), F[C == null ? void 0 : C.group] || (F[C == null ? void 0 : C.group] = []), F[C == null ? void 0 : C.group].push(C);\n }\n return Object.entries(F).reduce(\n (H, [C, q]) => (T && H.push({ type: "group", group: C }), q.forEach((m) => H.push({ type: "item", item: m })), H),\n []\n );\n }, [o]);\n let y;\n if (o)\n for (let F = 0; F < (o == null ? void 0 : o.length); F++)\n o[F].subMenu && (y = !0), o[F].subLabel;\n let B = (0,react__WEBPACK_IMPORTED_MODULE_0__.useRef)();\n (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => {\n var F, T, w;\n if (b && (F = B == null ? void 0 : B.current) != null && F.childNodes) {\n let H = ((T = s[0]) == null ? void 0 : T.value) <= 8 ? 0 : 27, C = (s == null ? void 0 : s.value) <= 8 ? 0 : 27;\n B.current.childNodes[0].scrollTop = (s == null ? void 0 : s.length) > 0 ? ((w = s[0]) == null ? void 0 : w.value) * H : (s == null ? void 0 : s.value) * C;\n }\n }, [b]);\n let X;\n return (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => {\n var F, T, w;\n (w = (T = (F = B == null ? void 0 : B.current) == null ? void 0 : F.children[0]) == null ? void 0 : T.children[0]) != null && w.classList && g != h && (B == null || B.current.children[0].children[0].classList.add(\n "ListWrapDiv"\n ), X = B.current.children[0].children[0].clientHeight);\n }, [B, g, o, h]), /* @__PURE__ */ c(react__WEBPACK_IMPORTED_MODULE_0__.Fragment, { children: /* @__PURE__ */ c(\n hR,\n {\n isItemLoaded: fB,\n itemCount: L.length,\n loadMoreItems: gB,\n children: ({ onItemsRendered: F, ref: T }) => /* @__PURE__ */ c(CR, { children: y ? /* @__PURE__ */ c(mR, { children: /* @__PURE__ */ c(Y7, { children: /* @__PURE__ */ c(\n P7,\n {\n className: "List subList",\n height: g,\n itemCount: L.length,\n itemSize: (w) => L[w].type === "group" && a ? w == 0 ? 0 : 6 : (o == null ? void 0 : o.length) == 1 ? 24 : Eo,\n onItemsRendered: F,\n ref: T,\n width: "",\n children: ({ index: w, style: H }) => {\n const C = L[w];\n if (C.type === "group")\n return /* @__PURE__ */ c(\n dn,\n {\n style: {\n ...H,\n height: w == L.length - 1 ? 24 : H.height\n },\n children: /* @__PURE__ */ c(\n un,\n {\n ...e,\n isGroup: C.type === "group",\n style: {\n marginBottom: `${w == L.length - 1 ? "0" : "4px"}`\n },\n data: L,\n index: w,\n label: C.group,\n groupByDivider: a\n }\n )\n }\n );\n if (C.type === "item") {\n const { item: q } = C;\n let m, k;\n return hr[w] === r5 ? (m = `${q.label}`, m = `${q.subLabel}`) : (m = "Loading...", k = "Loading..."), /* @__PURE__ */ c(\n dn,\n {\n style: {\n ...H,\n height: w == L.length - 1 ? 24 : H.height\n },\n children: /* @__PURE__ */ c(\n un,\n {\n ...e,\n isGroup: C.type === "group",\n style: {\n marginBottom: `${w == L.length - 1 ? "0" : "4px"}`\n },\n data: L,\n index: w,\n onSelectHandle: v,\n checkboxValue: M,\n label: m,\n subLabel: k,\n radioBtnValue: A,\n isRadioButton: r,\n isMulti: n,\n defaultValues: s\n }\n )\n }\n );\n }\n return "";\n }\n }\n ) }) }) : (\n //\n /* @__PURE__ */ c(\n Y7,\n {\n isContentLarge: o && (o == null ? void 0 : o.length) > 8 ? `${g}px` : "true",\n contentHeight: (o == null ? void 0 : o.length) == 1 ? 28 : X,\n ref: B,\n children: /* @__PURE__ */ c(\n P7,\n {\n className: "List",\n height: g,\n itemCount: L.length,\n itemSize: (w) => L[w].type === "group" && a ? w == 0 ? 0 : 6 : (o == null ? void 0 : o.length) == 1 ? 24 : Eo,\n onItemsRendered: F,\n ref: T,\n width: "",\n children: ({ index: w, style: H }) => {\n var q, m;\n const C = L[w];\n if (C.type === "group")\n return /* @__PURE__ */ c(\n dn,\n {\n style: {\n ...H,\n height: w == L.length - 1 ? 24 : H.height\n },\n children: /* @__PURE__ */ c(\n un,\n {\n ...e,\n isGroup: C.type === "group",\n style: {\n marginBottom: `${w == L.length - 1 ? "0" : "4px"}`\n },\n data: L,\n index: w,\n label: C.group,\n groupByDivider: a\n }\n )\n }\n );\n if (C.type === "item") {\n const { item: k } = C;\n let x, N;\n return hr[w] === r5 ? (x = `${k.label}`, N = `${k.subLabel}`) : (x = "Loading...", N = "Loading..."), /* @__PURE__ */ c(\n dn,\n {\n style: {\n ...H,\n top: (q = L[w].item) != null && q.subLabel ? H.top * 1.5 : H.top,\n height: (m = L[w].item) != null && m.subLabel ? 40 : w == L.length - 1 ? 24 : H.height\n },\n children: /* @__PURE__ */ c(\n un,\n {\n ...e,\n isGroup: C.type === "group",\n style: {\n marginBottom: `${w == L.length - 1 ? "0" : "4px"}`\n },\n data: L,\n index: w,\n onSelectHandle: v,\n checkboxValue: M,\n label: x,\n subLabel: N,\n radioBtnValue: A,\n isRadioButton: r,\n isMulti: n,\n defaultValues: s,\n selectedLists: f || p\n }\n )\n }\n );\n }\n return "";\n }\n }\n )\n }\n )\n ) })\n },\n a\n ) });\n}\nvar kp = { exports: {} };\n/*! react-checkbox-tree - v1.8.0 | 2022 */\n(function(e, t) {\n /*! For license information please see index.browser.js.LICENSE.txt */\n (function(o, n) {\n e.exports = n((react__WEBPACK_IMPORTED_MODULE_0___default()));\n })(self, (o) => (() => {\n var n = { 4184: (s, l) => {\n var p;\n (function() {\n var d = {}.hasOwnProperty;\n function b() {\n for (var M = [], u = 0; u < arguments.length; u++) {\n var A = arguments[u];\n if (A) {\n var z = typeof A;\n if (z === "string" || z === "number")\n M.push(A);\n else if (Array.isArray(A)) {\n if (A.length) {\n var f = b.apply(null, A);\n f && M.push(f);\n }\n } else if (z === "object")\n if (A.toString === Object.prototype.toString)\n for (var O in A)\n d.call(A, O) && A[O] && M.push(O);\n else\n M.push(A.toString());\n }\n }\n return M.join(" ");\n }\n s.exports ? (b.default = b, s.exports = b) : (p = (function() {\n return b;\n }).apply(l, [])) === void 0 || (s.exports = p);\n })();\n }, 8552: (s, l, p) => {\n var d = p(852)(p(5639), "DataView");\n s.exports = d;\n }, 1989: (s, l, p) => {\n var d = p(1789), b = p(401), M = p(7667), u = p(1327), A = p(1866);\n function z(f) {\n var O = -1, h = f == null ? 0 : f.length;\n for (this.clear(); ++O < h; ) {\n var g = f[O];\n this.set(g[0], g[1]);\n }\n }\n z.prototype.clear = d, z.prototype.delete = b, z.prototype.get = M, z.prototype.has = u, z.prototype.set = A, s.exports = z;\n }, 8407: (s, l, p) => {\n var d = p(7040), b = p(4125), M = p(2117), u = p(7518), A = p(4705);\n function z(f) {\n var O = -1, h = f == null ? 0 : f.length;\n for (this.clear(); ++O < h; ) {\n var g = f[O];\n this.set(g[0], g[1]);\n }\n }\n z.prototype.clear = d, z.prototype.delete = b, z.prototype.get = M, z.prototype.has = u, z.prototype.set = A, s.exports = z;\n }, 7071: (s, l, p) => {\n var d = p(852)(p(5639), "Map");\n s.exports = d;\n }, 3369: (s, l, p) => {\n var d = p(4785), b = p(1285), M = p(6e3), u = p(9916), A = p(5265);\n function z(f) {\n var O = -1, h = f == null ? 0 : f.length;\n for (this.clear(); ++O < h; ) {\n var g = f[O];\n this.set(g[0], g[1]);\n }\n }\n z.prototype.clear = d, z.prototype.delete = b, z.prototype.get = M, z.prototype.has = u, z.prototype.set = A, s.exports = z;\n }, 3818: (s, l, p) => {\n var d = p(852)(p(5639), "Promise");\n s.exports = d;\n }, 8525: (s, l, p) => {\n var d = p(852)(p(5639), "Set");\n s.exports = d;\n }, 8668: (s, l, p) => {\n var d = p(3369), b = p(619), M = p(2385);\n function u(A) {\n var z = -1, f = A == null ? 0 : A.length;\n for (this.__data__ = new d(); ++z < f; )\n this.add(A[z]);\n }\n u.prototype.add = u.prototype.push = b, u.prototype.has = M, s.exports = u;\n }, 6384: (s, l, p) => {\n var d = p(8407), b = p(7465), M = p(3779), u = p(7599), A = p(4758), z = p(4309);\n function f(O) {\n var h = this.__data__ = new d(O);\n this.size = h.size;\n }\n f.prototype.clear = b, f.prototype.delete = M, f.prototype.get = u, f.prototype.has = A, f.prototype.set = z, s.exports = f;\n }, 2705: (s, l, p) => {\n var d = p(5639).Symbol;\n s.exports = d;\n }, 1149: (s, l, p) => {\n var d = p(5639).Uint8Array;\n s.exports = d;\n }, 577: (s, l, p) => {\n var d = p(852)(p(5639), "WeakMap");\n s.exports = d;\n }, 4963: (s) => {\n s.exports = function(l, p) {\n for (var d = -1, b = l == null ? 0 : l.length, M = 0, u = []; ++d < b; ) {\n var A = l[d];\n p(A, d, l) && (u[M++] = A);\n }\n return u;\n };\n }, 4636: (s, l, p) => {\n var d = p(2545), b = p(5694), M = p(1469), u = p(4144), A = p(5776), z = p(6719), f = Object.prototype.hasOwnProperty;\n s.exports = function(O, h) {\n var g = M(O), v = !g && b(O), L = !g && !v && u(O), y = !g && !v && !L && z(O), B = g || v || L || y, X = B ? d(O.length, String) : [], F = X.length;\n for (var T in O)\n !h && !f.call(O, T) || B && (T == "length" || L && (T == "offset" || T == "parent") || y && (T == "buffer" || T == "byteLength" || T == "byteOffset") || A(T, F)) || X.push(T);\n return X;\n };\n }, 2488: (s) => {\n s.exports = function(l, p) {\n for (var d = -1, b = p.length, M = l.length; ++d < b; )\n l[M + d] = p[d];\n return l;\n };\n }, 2908: (s) => {\n s.exports = function(l, p) {\n for (var d = -1, b = l == null ? 0 : l.length; ++d < b; )\n if (p(l[d], d, l))\n return !0;\n return !1;\n };\n }, 8470: (s, l, p) => {\n var d = p(7813);\n s.exports = function(b, M) {\n for (var u = b.length; u--; )\n if (d(b[u][0], M))\n return u;\n return -1;\n };\n }, 8866: (s, l, p) => {\n var d = p(2488), b = p(1469);\n s.exports = function(M, u, A) {\n var z = u(M);\n return b(M) ? z : d(z, A(M));\n };\n }, 4239: (s, l, p) => {\n var d = p(2705), b = p(9607), M = p(2333), u = d ? d.toStringTag : void 0;\n s.exports = function(A) {\n return A == null ? A === void 0 ? "[object Undefined]" : "[object Null]" : u && u in Object(A) ? b(A) : M(A);\n };\n }, 9454: (s, l, p) => {\n var d = p(4239), b = p(7005);\n s.exports = function(M) {\n return b(M) && d(M) == "[object Arguments]";\n };\n }, 939: (s, l, p) => {\n var d = p(2492), b = p(7005);\n s.exports = function M(u, A, z, f, O) {\n return u === A || (u == null || A == null || !b(u) && !b(A) ? u != u && A != A : d(u, A, z, f, M, O));\n };\n }, 2492: (s, l, p) => {\n var d = p(6384), b = p(7114), M = p(8351), u = p(6096), A = p(4160), z = p(1469), f = p(4144), O = p(6719), h = "[object Arguments]", g = "[object Array]", v = "[object Object]", L = Object.prototype.hasOwnProperty;\n s.exports = function(y, B, X, F, T, w) {\n var H = z(y), C = z(B), q = H ? g : A(y), m = C ? g : A(B), k = (q = q == h ? v : q) == v, x = (m = m == h ? v : m) == v, N = q == m;\n if (N && f(y)) {\n if (!f(B))\n return !1;\n H = !0, k = !1;\n }\n if (N && !k)\n return w || (w = new d()), H || O(y) ? b(y, B, X, F, T, w) : M(y, B, q, X, F, T, w);\n if (!(1 & X)) {\n var V = k && L.call(y, "__wrapped__"), R = x && L.call(B, "__wrapped__");\n if (V || R) {\n var I = V ? y.value() : y, j = R ? B.value() : B;\n return w || (w = new d()), T(I, j, X, F, w);\n }\n }\n return !!N && (w || (w = new d()), u(y, B, X, F, T, w));\n };\n }, 8458: (s, l, p) => {\n var d = p(3560), b = p(5346), M = p(3218), u = p(346), A = /^\\[object .+?Constructor\\]$/, z = Function.prototype, f = Object.prototype, O = z.toString, h = f.hasOwnProperty, g = RegExp("^" + O.call(h).replace(/[\\\\^$.*+?()[\\]{}|]/g, "\\\\$&").replace(/hasOwnProperty|(function).*?(?=\\\\\\()| for .+?(?=\\\\\\])/g, "$1.*?") + "$");\n s.exports = function(v) {\n return !(!M(v) || b(v)) && (d(v) ? g : A).test(u(v));\n };\n }, 8749: (s, l, p) => {\n var d = p(4239), b = p(1780), M = p(7005), u = {};\n u["[object Float32Array]"] = u["[object Float64Array]"] = u["[object Int8Array]"] = u["[object Int16Array]"] = u["[object Int32Array]"] = u["[object Uint8Array]"] = u["[object Uint8ClampedArray]"] = u["[object Uint16Array]"] = u["[object Uint32Array]"] = !0, u["[object Arguments]"] = u["[object Array]"] = u["[object ArrayBuffer]"] = u["[object Boolean]"] = u["[object DataView]"] = u["[object Date]"] = u["[object Error]"] = u["[object Function]"] = u["[object Map]"] = u["[object Number]"] = u["[object Object]"] = u["[object RegExp]"] = u["[object Set]"] = u["[object String]"] = u["[object WeakMap]"] = !1, s.exports = function(A) {\n return M(A) && b(A.length) && !!u[d(A)];\n };\n }, 280: (s, l, p) => {\n var d = p(5726), b = p(6916), M = Object.prototype.hasOwnProperty;\n s.exports = function(u) {\n if (!d(u))\n return b(u);\n var A = [];\n for (var z in Object(u))\n M.call(u, z) && z != "constructor" && A.push(z);\n return A;\n };\n }, 2545: (s) => {\n s.exports = function(l, p) {\n for (var d = -1, b = Array(l); ++d < l; )\n b[d] = p(d);\n return b;\n };\n }, 1717: (s) => {\n s.exports = function(l) {\n return function(p) {\n return l(p);\n };\n };\n }, 4757: (s) => {\n s.exports = function(l, p) {\n return l.has(p);\n };\n }, 4429: (s, l, p) => {\n var d = p(5639)["__core-js_shared__"];\n s.exports = d;\n }, 7114: (s, l, p) => {\n var d = p(8668), b = p(2908), M = p(4757);\n s.exports = function(u, A, z, f, O, h) {\n var g = 1 & z, v = u.length, L = A.length;\n if (v != L && !(g && L > v))\n return !1;\n var y = h.get(u), B = h.get(A);\n if (y && B)\n return y == A && B == u;\n var X = -1, F = !0, T = 2 & z ? new d() : void 0;\n for (h.set(u, A), h.set(A, u); ++X < v; ) {\n var w = u[X], H = A[X];\n if (f)\n var C = g ? f(H, w, X, A, u, h) : f(w, H, X, u, A, h);\n if (C !== void 0) {\n if (C)\n continue;\n F = !1;\n break;\n }\n if (T) {\n if (!b(A, function(q, m) {\n if (!M(T, m) && (w === q || O(w, q, z, f, h)))\n return T.push(m);\n })) {\n F = !1;\n break;\n }\n } else if (w !== H && !O(w, H, z, f, h)) {\n F = !1;\n break;\n }\n }\n return h.delete(u), h.delete(A), F;\n };\n }, 8351: (s, l, p) => {\n var d = p(2705), b = p(1149), M = p(7813), u = p(7114), A = p(8776), z = p(1814), f = d ? d.prototype : void 0, O = f ? f.valueOf : void 0;\n s.exports = function(h, g, v, L, y, B, X) {\n switch (v) {\n case "[object DataView]":\n if (h.byteLength != g.byteLength || h.byteOffset != g.byteOffset)\n return !1;\n h = h.buffer, g = g.buffer;\n case "[object ArrayBuffer]":\n return !(h.byteLength != g.byteLength || !B(new b(h), new b(g)));\n case "[object Boolean]":\n case "[object Date]":\n case "[object Number]":\n return M(+h, +g);\n case "[object Error]":\n return h.name == g.name && h.message == g.message;\n case "[object RegExp]":\n case "[object String]":\n return h == g + "";\n case "[object Map]":\n var F = A;\n case "[object Set]":\n var T = 1 & L;\n if (F || (F = z), h.size != g.size && !T)\n return !1;\n var w = X.get(h);\n if (w)\n return w == g;\n L |= 2, X.set(h, g);\n var H = u(F(h), F(g), L, y, B, X);\n return X.delete(h), H;\n case "[object Symbol]":\n if (O)\n return O.call(h) == O.call(g);\n }\n return !1;\n };\n }, 6096: (s, l, p) => {\n var d = p(8234), b = Object.prototype.hasOwnProperty;\n s.exports = function(M, u, A, z, f, O) {\n var h = 1 & A, g = d(M), v = g.length;\n if (v != d(u).length && !h)\n return !1;\n for (var L = v; L--; ) {\n var y = g[L];\n if (!(h ? y in u : b.call(u, y)))\n return !1;\n }\n var B = O.get(M), X = O.get(u);\n if (B && X)\n return B == u && X == M;\n var F = !0;\n O.set(M, u), O.set(u, M);\n for (var T = h; ++L < v; ) {\n var w = M[y = g[L]], H = u[y];\n if (z)\n var C = h ? z(H, w, y, u, M, O) : z(w, H, y, M, u, O);\n if (!(C === void 0 ? w === H || f(w, H, A, z, O) : C)) {\n F = !1;\n break;\n }\n T || (T = y == "constructor");\n }\n if (F && !T) {\n var q = M.constructor, m = u.constructor;\n q == m || !("constructor" in M) || !("constructor" in u) || typeof q == "function" && q instanceof q && typeof m == "function" && m instanceof m || (F = !1);\n }\n return O.delete(M), O.delete(u), F;\n };\n }, 1957: (s, l, p) => {\n var d = typeof p.g == "object" && p.g && p.g.Object === Object && p.g;\n s.exports = d;\n }, 8234: (s, l, p) => {\n var d = p(8866), b = p(9551), M = p(3674);\n s.exports = function(u) {\n return d(u, M, b);\n };\n }, 5050: (s, l, p) => {\n var d = p(7019);\n s.exports = function(b, M) {\n var u = b.__data__;\n return d(M) ? u[typeof M == "string" ? "string" : "hash"] : u.map;\n };\n }, 852: (s, l, p) => {\n var d = p(8458), b = p(7801);\n s.exports = function(M, u) {\n var A = b(M, u);\n return d(A) ? A : void 0;\n };\n }, 9607: (s, l, p) => {\n var d = p(2705), b = Object.prototype, M = b.hasOwnProperty, u = b.toString, A = d ? d.toStringTag : void 0;\n s.exports = function(z) {\n var f = M.call(z, A), O = z[A];\n try {\n z[A] = void 0;\n var h = !0;\n } catch {\n }\n var g = u.call(z);\n return h && (f ? z[A] = O : delete z[A]), g;\n };\n }, 9551: (s, l, p) => {\n var d = p(4963), b = p(479), M = Object.prototype.propertyIsEnumerable, u = Object.getOwnPropertySymbols, A = u ? function(z) {\n return z == null ? [] : (z = Object(z), d(u(z), function(f) {\n return M.call(z, f);\n }));\n } : b;\n s.exports = A;\n }, 4160: (s, l, p) => {\n var d = p(8552), b = p(7071), M = p(3818), u = p(8525), A = p(577), z = p(4239), f = p(346), O = "[object Map]", h = "[object Promise]", g = "[object Set]", v = "[object WeakMap]", L = "[object DataView]", y = f(d), B = f(b), X = f(M), F = f(u), T = f(A), w = z;\n (d && w(new d(new ArrayBuffer(1))) != L || b && w(new b()) != O || M && w(M.resolve()) != h || u && w(new u()) != g || A && w(new A()) != v) && (w = function(H) {\n var C = z(H), q = C == "[object Object]" ? H.constructor : void 0, m = q ? f(q) : "";\n if (m)\n switch (m) {\n case y:\n return L;\n case B:\n return O;\n case X:\n return h;\n case F:\n return g;\n case T:\n return v;\n }\n return C;\n }), s.exports = w;\n }, 7801: (s) => {\n s.exports = function(l, p) {\n return l == null ? void 0 : l[p];\n };\n }, 1789: (s, l, p) => {\n var d = p(4536);\n s.exports = function() {\n this.__data__ = d ? d(null) : {}, this.size = 0;\n };\n }, 401: (s) => {\n s.exports = function(l) {\n var p = this.has(l) && delete this.__data__[l];\n return this.size -= p ? 1 : 0, p;\n };\n }, 7667: (s, l, p) => {\n var d = p(4536), b = Object.prototype.hasOwnProperty;\n s.exports = function(M) {\n var u = this.__data__;\n if (d) {\n var A = u[M];\n return A === "__lodash_hash_undefined__" ? void 0 : A;\n }\n return b.call(u, M) ? u[M] : void 0;\n };\n }, 1327: (s, l, p) => {\n var d = p(4536), b = Object.prototype.hasOwnProperty;\n s.exports = function(M) {\n var u = this.__data__;\n return d ? u[M] !== void 0 : b.call(u, M);\n };\n }, 1866: (s, l, p) => {\n var d = p(4536);\n s.exports = function(b, M) {\n var u = this.__data__;\n return this.size += this.has(b) ? 0 : 1, u[b] = d && M === void 0 ? "__lodash_hash_undefined__" : M, this;\n };\n }, 5776: (s) => {\n var l = /^(?:0|[1-9]\\d*)$/;\n s.exports = function(p, d) {\n var b = typeof p;\n return !!(d = d ?? 9007199254740991) && (b == "number" || b != "symbol" && l.test(p)) && p > -1 && p % 1 == 0 && p < d;\n };\n }, 7019: (s) => {\n s.exports = function(l) {\n var p = typeof l;\n return p == "string" || p == "number" || p == "symbol" || p == "boolean" ? l !== "__proto__" : l === null;\n };\n }, 5346: (s, l, p) => {\n var d, b = p(4429), M = (d = /[^.]+$/.exec(b && b.keys && b.keys.IE_PROTO || "")) ? "Symbol(src)_1." + d : "";\n s.exports = function(u) {\n return !!M && M in u;\n };\n }, 5726: (s) => {\n var l = Object.prototype;\n s.exports = function(p) {\n var d = p && p.constructor;\n return p === (typeof d == "function" && d.prototype || l);\n };\n }, 7040: (s) => {\n s.exports = function() {\n this.__data__ = [], this.size = 0;\n };\n }, 4125: (s, l, p) => {\n var d = p(8470), b = Array.prototype.splice;\n s.exports = function(M) {\n var u = this.__data__, A = d(u, M);\n return !(A < 0 || (A == u.length - 1 ? u.pop() : b.call(u, A, 1), --this.size, 0));\n };\n }, 2117: (s, l, p) => {\n var d = p(8470);\n s.exports = function(b) {\n var M = this.__data__, u = d(M, b);\n return u < 0 ? void 0 : M[u][1];\n };\n }, 7518: (s, l, p) => {\n var d = p(8470);\n s.exports = function(b) {\n return d(this.__data__, b) > -1;\n };\n }, 4705: (s, l, p) => {\n var d = p(8470);\n s.exports = function(b, M) {\n var u = this.__data__, A = d(u, b);\n return A < 0 ? (++this.size, u.push([b, M])) : u[A][1] = M, this;\n };\n }, 4785: (s, l, p) => {\n var d = p(1989), b = p(8407), M = p(7071);\n s.exports = function() {\n this.size = 0, this.__data__ = { hash: new d(), map: new (M || b)(), string: new d() };\n };\n }, 1285: (s, l, p) => {\n var d = p(5050);\n s.exports = function(b) {\n var M = d(this, b).delete(b);\n return this.size -= M ? 1 : 0, M;\n };\n }, 6e3: (s, l, p) => {\n var d = p(5050);\n s.exports = function(b) {\n return d(this, b).get(b);\n };\n }, 9916: (s, l, p) => {\n var d = p(5050);\n s.exports = function(b) {\n return d(this, b).has(b);\n };\n }, 5265: (s, l, p) => {\n var d = p(5050);\n s.exports = function(b, M) {\n var u = d(this, b), A = u.size;\n return u.set(b, M), this.size += u.size == A ? 0 : 1, this;\n };\n }, 8776: (s) => {\n s.exports = function(l) {\n var p = -1, d = Array(l.size);\n return l.forEach(function(b, M) {\n d[++p] = [M, b];\n }), d;\n };\n }, 4536: (s, l, p) => {\n var d = p(852)(Object, "create");\n s.exports = d;\n }, 6916: (s, l, p) => {\n var d = p(5569)(Object.keys, Object);\n s.exports = d;\n }, 1167: (s, l, p) => {\n s = p.nmd(s);\n var d = p(1957), b = l && !l.nodeType && l, M = b && s && !s.nodeType && s, u = M && M.exports === b && d.process, A = function() {\n try {\n return M && M.require && M.require("util").types || u && u.binding && u.binding("util");\n } catch {\n }\n }();\n s.exports = A;\n }, 2333: (s) => {\n var l = Object.prototype.toString;\n s.exports = function(p) {\n return l.call(p);\n };\n }, 5569: (s) => {\n s.exports = function(l, p) {\n return function(d) {\n return l(p(d));\n };\n };\n }, 5639: (s, l, p) => {\n var d = p(1957), b = typeof self == "object" && self && self.Object === Object && self, M = d || b || Function("return this")();\n s.exports = M;\n }, 619: (s) => {\n s.exports = function(l) {\n return this.__data__.set(l, "__lodash_hash_undefined__"), this;\n };\n }, 2385: (s) => {\n s.exports = function(l) {\n return this.__data__.has(l);\n };\n }, 1814: (s) => {\n s.exports = function(l) {\n var p = -1, d = Array(l.size);\n return l.forEach(function(b) {\n d[++p] = b;\n }), d;\n };\n }, 7465: (s, l, p) => {\n var d = p(8407);\n s.exports = function() {\n this.__data__ = new d(), this.size = 0;\n };\n }, 3779: (s) => {\n s.exports = function(l) {\n var p = this.__data__, d = p.delete(l);\n return this.size = p.size, d;\n };\n }, 7599: (s) => {\n s.exports = function(l) {\n return this.__data__.get(l);\n };\n }, 4758: (s) => {\n s.exports = function(l) {\n return this.__data__.has(l);\n };\n }, 4309: (s, l, p) => {\n var d = p(8407), b = p(7071), M = p(3369);\n s.exports = function(u, A) {\n var z = this.__data__;\n if (z instanceof d) {\n var f = z.__data__;\n if (!b || f.length < 199)\n return f.push([u, A]), this.size = ++z.size, this;\n z = this.__data__ = new M(f);\n }\n return z.set(u, A), this.size = z.size, this;\n };\n }, 346: (s) => {\n var l = Function.prototype.toString;\n s.exports = function(p) {\n if (p != null) {\n try {\n return l.call(p);\n } catch {\n }\n try {\n return p + "";\n } catch {\n }\n }\n return "";\n };\n }, 7813: (s) => {\n s.exports = function(l, p) {\n return l === p || l != l && p != p;\n };\n }, 5694: (s, l, p) => {\n var d = p(9454), b = p(7005), M = Object.prototype, u = M.hasOwnProperty, A = M.propertyIsEnumerable, z = d(function() {\n return arguments;\n }()) ? d : function(f) {\n return b(f) && u.call(f, "callee") && !A.call(f, "callee");\n };\n s.exports = z;\n }, 1469: (s) => {\n var l = Array.isArray;\n s.exports = l;\n }, 8612: (s, l, p) => {\n var d = p(3560), b = p(1780);\n s.exports = function(M) {\n return M != null && b(M.length) && !d(M);\n };\n }, 4144: (s, l, p) => {\n s = p.nmd(s);\n var d = p(5639), b = p(5062), M = l && !l.nodeType && l, u = M && s && !s.nodeType && s, A = u && u.exports === M ? d.Buffer : void 0, z = (A ? A.isBuffer : void 0) || b;\n s.exports = z;\n }, 8446: (s, l, p) => {\n var d = p(939);\n s.exports = function(b, M) {\n return d(b, M);\n };\n }, 3560: (s, l, p) => {\n var d = p(4239), b = p(3218);\n s.exports = function(M) {\n if (!b(M))\n return !1;\n var u = d(M);\n return u == "[object Function]" || u == "[object GeneratorFunction]" || u == "[object AsyncFunction]" || u == "[object Proxy]";\n };\n }, 1780: (s) => {\n s.exports = function(l) {\n return typeof l == "number" && l > -1 && l % 1 == 0 && l <= 9007199254740991;\n };\n }, 3218: (s) => {\n s.exports = function(l) {\n var p = typeof l;\n return l != null && (p == "object" || p == "function");\n };\n }, 7005: (s) => {\n s.exports = function(l) {\n return l != null && typeof l == "object";\n };\n }, 6719: (s, l, p) => {\n var d = p(8749), b = p(1717), M = p(1167), u = M && M.isTypedArray, A = u ? b(u) : d;\n s.exports = A;\n }, 3674: (s, l, p) => {\n var d = p(4636), b = p(280), M = p(8612);\n s.exports = function(u) {\n return M(u) ? d(u) : b(u);\n };\n }, 8306: (s, l, p) => {\n var d = p(3369);\n function b(M, u) {\n if (typeof M != "function" || u != null && typeof u != "function")\n throw new TypeError("Expected a function");\n var A = function() {\n var z = arguments, f = u ? u.apply(this, z) : z[0], O = A.cache;\n if (O.has(f))\n return O.get(f);\n var h = M.apply(this, z);\n return A.cache = O.set(f, h) || O, h;\n };\n return A.cache = new (b.Cache || d)(), A;\n }\n b.Cache = d, s.exports = b;\n }, 479: (s) => {\n s.exports = function() {\n return [];\n };\n }, 5062: (s) => {\n s.exports = function() {\n return !1;\n };\n }, 2703: (s, l, p) => {\n var d = p(414);\n function b() {\n }\n function M() {\n }\n M.resetWarningCache = b, s.exports = function() {\n function u(f, O, h, g, v, L) {\n if (L !== d) {\n var y = new Error("Calling PropTypes validators directly is not supported by the `prop-types` package. Use PropTypes.checkPropTypes() to call them. Read more at http://fb.me/use-check-prop-types");\n throw y.name = "Invariant Violation", y;\n }\n }\n function A() {\n return u;\n }\n u.isRequired = u;\n var z = { array: u, bigint: u, bool: u, func: u, number: u, object: u, string: u, symbol: u, any: u, arrayOf: A, element: u, elementType: u, instanceOf: A, node: u, objectOf: A, oneOf: A, oneOfType: A, shape: A, exact: A, checkPropTypes: M, resetWarningCache: b };\n return z.PropTypes = z, z;\n };\n }, 5697: (s, l, p) => {\n s.exports = p(2703)();\n }, 414: (s) => {\n s.exports = "SECRET_DO_NOT_PASS_THIS_OR_YOU_WILL_BE_FIRED";\n }, 9787: (s) => {\n s.exports = o;\n } }, r = {};\n function i(s) {\n var l = r[s];\n if (l !== void 0)\n return l.exports;\n var p = r[s] = { id: s, loaded: !1, exports: {} };\n return n[s](p, p.exports, i), p.loaded = !0, p.exports;\n }\n i.n = (s) => {\n var l = s && s.__esModule ? () => s.default : () => s;\n return i.d(l, { a: l }), l;\n }, i.d = (s, l) => {\n for (var p in l)\n i.o(l, p) && !i.o(s, p) && Object.defineProperty(s, p, { enumerable: !0, get: l[p] });\n }, i.g = function() {\n if (typeof globalThis == "object")\n return globalThis;\n try {\n return this || new Function("return this")();\n } catch {\n if (typeof window == "object")\n return window;\n }\n }(), i.o = (s, l) => Object.prototype.hasOwnProperty.call(s, l), i.r = (s) => {\n typeof Symbol < "u" && Symbol.toStringTag && Object.defineProperty(s, Symbol.toStringTag, { value: "Module" }), Object.defineProperty(s, "__esModule", { value: !0 });\n }, i.nmd = (s) => (s.paths = [], s.children || (s.children = []), s);\n var a = {};\n return (() => {\n i.r(a), i.d(a, { default: () => O0, expandNodesToLevel: () => h0 });\n var s = i(4184), l = i.n(s), p = i(8446), d = i.n(p), b = i(8306), M = i.n(b);\n let u = (w1 = 21) => crypto.getRandomValues(new Uint8Array(w1)).reduce((g1, E1) => g1 + ((E1 &= 63) < 36 ? E1.toString(36) : E1 < 62 ? (E1 - 26).toString(36).toUpperCase() : E1 > 62 ? "-" : "_"), "");\n var A = i(5697), z = i.n(A), f = i(9787), O = i.n(f);\n function h(w1) {\n return h = typeof Symbol == "function" && typeof Symbol.iterator == "symbol" ? function(g1) {\n return typeof g1;\n } : function(g1) {\n return g1 && typeof Symbol == "function" && g1.constructor === Symbol && g1 !== Symbol.prototype ? "symbol" : typeof g1;\n }, h(w1);\n }\n var g = ["children", "title"];\n function v() {\n return v = Object.assign ? Object.assign.bind() : function(w1) {\n for (var g1 = 1; g1 < arguments.length; g1++) {\n var E1 = arguments[g1];\n for (var B1 in E1)\n Object.prototype.hasOwnProperty.call(E1, B1) && (w1[B1] = E1[B1]);\n }\n return w1;\n }, v.apply(this, arguments);\n }\n function L(w1, g1) {\n if (!(w1 instanceof g1))\n throw new TypeError("Cannot call a class as a function");\n }\n function y(w1, g1) {\n for (var E1 = 0; E1 < g1.length; E1++) {\n var B1 = g1[E1];\n B1.enumerable = B1.enumerable || !1, B1.configurable = !0, "value" in B1 && (B1.writable = !0), Object.defineProperty(w1, B1.key, B1);\n }\n }\n function B(w1, g1) {\n return B = Object.setPrototypeOf ? Object.setPrototypeOf.bind() : function(E1, B1) {\n return E1.__proto__ = B1, E1;\n }, B(w1, g1);\n }\n function X(w1, g1) {\n if (g1 && (h(g1) === "object" || typeof g1 == "function"))\n return g1;\n if (g1 !== void 0)\n throw new TypeError("Derived constructors may only return object or undefined");\n return function(E1) {\n if (E1 === void 0)\n throw new ReferenceError("this hasn\'t been initialised - super() hasn\'t been called");\n return E1;\n }(w1);\n }\n function F(w1) {\n return F = Object.setPrototypeOf ? Object.getPrototypeOf.bind() : function(g1) {\n return g1.__proto__ || Object.getPrototypeOf(g1);\n }, F(w1);\n }\n function T(w1, g1, E1) {\n return g1 in w1 ? Object.defineProperty(w1, g1, { value: E1, enumerable: !0, configurable: !0, writable: !0 }) : w1[g1] = E1, w1;\n }\n var w = function(w1) {\n (function(H1, x1) {\n if (typeof x1 != "function" && x1 !== null)\n throw new TypeError("Super expression must either be null or a function");\n H1.prototype = Object.create(x1 && x1.prototype, { constructor: { value: H1, writable: !0, configurable: !0 } }), Object.defineProperty(H1, "prototype", { writable: !1 }), x1 && B(H1, x1);\n })(e0, w1);\n var g1, E1, B1, K1, p0 = (B1 = e0, K1 = function() {\n if (typeof Reflect > "u" || !Reflect.construct || Reflect.construct.sham)\n return !1;\n if (typeof Proxy == "function")\n return !0;\n try {\n return Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function() {\n })), !0;\n } catch {\n return !1;\n }\n }(), function() {\n var H1, x1 = F(B1);\n if (K1) {\n var I1 = F(this).constructor;\n H1 = Reflect.construct(x1, arguments, I1);\n } else\n H1 = x1.apply(this, arguments);\n return X(this, H1);\n });\n function e0() {\n return L(this, e0), p0.apply(this, arguments);\n }\n return g1 = e0, (E1 = [{ key: "render", value: function() {\n var H1 = this.props, x1 = H1.children, I1 = H1.title, X1 = function(J1, f0) {\n if (J1 == null)\n return {};\n var I0, O1, V1 = function(i0, b0) {\n if (i0 == null)\n return {};\n var g0, u0, z0 = {}, V0 = Object.keys(i0);\n for (u0 = 0; u0 < V0.length; u0++)\n g0 = V0[u0], b0.indexOf(g0) >= 0 || (z0[g0] = i0[g0]);\n return z0;\n }(J1, f0);\n if (Object.getOwnPropertySymbols) {\n var G1 = Object.getOwnPropertySymbols(J1);\n for (O1 = 0; O1 < G1.length; O1++)\n I0 = G1[O1], f0.indexOf(I0) >= 0 || Object.prototype.propertyIsEnumerable.call(J1, I0) && (V1[I0] = J1[I0]);\n }\n return V1;\n }(H1, g);\n return O().createElement("button", v({ "aria-label": I1, title: I1, type: "button" }, X1), x1);\n } }]) && y(g1.prototype, E1), Object.defineProperty(g1, "prototype", { writable: !1 }), e0;\n }(O().PureComponent);\n T(w, "propTypes", { children: z().node.isRequired, title: z().string }), T(w, "defaultProps", { title: null });\n const H = w, C = { ALL: "all", PARENT: "parent", LEAF: "leaf" };\n function q(w1) {\n this.message = w1, this.stack = Error().stack;\n }\n q.prototype = Object.create(Error.prototype), q.prototype.name = "CheckboxTreeError";\n const m = q;\n function k(w1, g1) {\n var E1 = Object.keys(w1);\n if (Object.getOwnPropertySymbols) {\n var B1 = Object.getOwnPropertySymbols(w1);\n g1 && (B1 = B1.filter(function(K1) {\n return Object.getOwnPropertyDescriptor(w1, K1).enumerable;\n })), E1.push.apply(E1, B1);\n }\n return E1;\n }\n function x(w1, g1, E1) {\n return g1 in w1 ? Object.defineProperty(w1, g1, { value: E1, enumerable: !0, configurable: !0, writable: !0 }) : w1[g1] = E1, w1;\n }\n function N(w1, g1) {\n if (!(w1 instanceof g1))\n throw new TypeError("Cannot call a class as a function");\n }\n function V(w1, g1) {\n for (var E1 = 0; E1 < g1.length; E1++) {\n var B1 = g1[E1];\n B1.enumerable = B1.enumerable || !1, B1.configurable = !0, "value" in B1 && (B1.writable = !0), Object.defineProperty(w1, B1.key, B1);\n }\n }\n var R = C;\n const I = function() {\n function w1(B1) {\n var K1 = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : {};\n N(this, w1), this.props = B1, this.flatNodes = K1;\n }\n var g1, E1;\n return g1 = w1, E1 = [{ key: "setProps", value: function(B1) {\n this.props = B1;\n } }, { key: "clone", value: function() {\n var B1 = this, K1 = {};\n return Object.keys(this.flatNodes).forEach(function(p0) {\n var e0 = B1.flatNodes[p0];\n K1[p0] = function(H1) {\n for (var x1 = 1; x1 < arguments.length; x1++) {\n var I1 = arguments[x1] != null ? arguments[x1] : {};\n x1 % 2 ? k(Object(I1), !0).forEach(function(X1) {\n x(H1, X1, I1[X1]);\n }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(H1, Object.getOwnPropertyDescriptors(I1)) : k(Object(I1)).forEach(function(X1) {\n Object.defineProperty(H1, X1, Object.getOwnPropertyDescriptor(I1, X1));\n });\n }\n return H1;\n }({}, e0);\n }), new w1(this.props, K1);\n } }, { key: "getNode", value: function(B1) {\n return this.flatNodes[B1];\n } }, { key: "reset", value: function() {\n this.flatNodes = {};\n } }, { key: "flattenNodes", value: function(B1) {\n var K1 = this, p0 = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : {}, e0 = arguments.length > 2 && arguments[2] !== void 0 ? arguments[2] : 0;\n if (Array.isArray(B1) && B1.length !== 0) {\n var H1 = this.props, x1 = H1.disabled, I1 = H1.noCascade;\n B1.forEach(function(X1, J1) {\n var f0 = K1.nodeHasChildren(X1);\n if (K1.flatNodes[X1.value] !== void 0)\n throw new m("Duplicate value \'".concat(X1.value, "\' detected. All node values must be unique."));\n K1.flatNodes[X1.value] = { label: X1.label, value: X1.value, children: X1.children, parent: p0, isChild: p0.value !== void 0, isParent: f0, isLeaf: !f0, showCheckbox: X1.showCheckbox === void 0 || X1.showCheckbox, disabled: K1.getDisabledState(X1, p0, x1, I1), treeDepth: e0, index: J1 }, K1.flattenNodes(X1.children, X1, e0 + 1);\n });\n }\n } }, { key: "nodeHasChildren", value: function(B1) {\n return Array.isArray(B1.children);\n } }, { key: "getDisabledState", value: function(B1, K1, p0, e0) {\n return !!p0 || !(e0 || !K1.disabled) || !!B1.disabled;\n } }, { key: "deserializeLists", value: function(B1) {\n var K1 = this, p0 = ["checked", "expanded"];\n Object.keys(this.flatNodes).forEach(function(e0) {\n p0.forEach(function(H1) {\n K1.flatNodes[e0][H1] = !1;\n });\n }), p0.forEach(function(e0) {\n B1[e0].forEach(function(H1) {\n K1.flatNodes[H1] !== void 0 && (K1.flatNodes[H1][e0] = !0);\n });\n });\n } }, { key: "serializeList", value: function(B1) {\n var K1 = this, p0 = [];\n return Object.keys(this.flatNodes).forEach(function(e0) {\n K1.flatNodes[e0][B1] && p0.push(e0);\n }), p0;\n } }, { key: "expandAllNodes", value: function(B1) {\n var K1 = this;\n return Object.keys(this.flatNodes).forEach(function(p0) {\n K1.flatNodes[p0].isParent && (K1.flatNodes[p0].expanded = B1);\n }), this;\n } }, { key: "toggleChecked", value: function(B1, K1, p0, e0) {\n var H1 = this, x1 = !(arguments.length > 4 && arguments[4] !== void 0) || arguments[4], I1 = this.flatNodes[B1.value], X1 = [R.PARENT, R.ALL].indexOf(p0) > -1, J1 = [R.LEAF, R.ALL].indexOf(p0) > -1;\n if (I1.isLeaf || e0) {\n if (B1.disabled)\n return this;\n this.toggleNode(B1.value, "checked", K1);\n } else\n (X1 || I1.children.length === 0) && this.toggleNode(B1.value, "checked", K1), J1 && I1.children.forEach(function(f0) {\n H1.toggleChecked(f0, K1, p0, e0, !1);\n });\n return x1 && !e0 && I1.isChild && X1 && this.toggleParentStatus(I1.parent, p0), this;\n } }, { key: "toggleParentStatus", value: function(B1, K1) {\n var p0 = this.flatNodes[B1.value];\n p0.isChild ? (K1 === R.ALL && this.toggleNode(B1.value, "checked", this.isEveryChildChecked(p0)), this.toggleParentStatus(p0.parent, K1)) : this.toggleNode(B1.value, "checked", this.isEveryChildChecked(p0));\n } }, { key: "isEveryChildChecked", value: function(B1) {\n var K1 = this;\n return B1.children.every(function(p0) {\n return K1.getNode(p0.value).checked;\n });\n } }, { key: "toggleNode", value: function(B1, K1, p0) {\n return this.flatNodes[B1][K1] = p0, this;\n } }], E1 && V(g1.prototype, E1), Object.defineProperty(g1, "prototype", { writable: !1 }), w1;\n }();\n function j(w1) {\n return j = typeof Symbol == "function" && typeof Symbol.iterator == "symbol" ? function(g1) {\n return typeof g1;\n } : function(g1) {\n return g1 && typeof Symbol == "function" && g1.constructor === Symbol && g1 !== Symbol.prototype ? "symbol" : typeof g1;\n }, j(w1);\n }\n function U() {\n return U = Object.assign ? Object.assign.bind() : function(w1) {\n for (var g1 = 1; g1 < arguments.length; g1++) {\n var E1 = arguments[g1];\n for (var B1 in E1)\n Object.prototype.hasOwnProperty.call(E1, B1) && (w1[B1] = E1[B1]);\n }\n return w1;\n }, U.apply(this, arguments);\n }\n function _(w1, g1) {\n var E1 = Object.keys(w1);\n if (Object.getOwnPropertySymbols) {\n var B1 = Object.getOwnPropertySymbols(w1);\n g1 && (B1 = B1.filter(function(K1) {\n return Object.getOwnPropertyDescriptor(w1, K1).enumerable;\n })), E1.push.apply(E1, B1);\n }\n return E1;\n }\n function r1(w1, g1) {\n if (!(w1 instanceof g1))\n throw new TypeError("Cannot call a class as a function");\n }\n function K(w1, g1) {\n for (var E1 = 0; E1 < g1.length; E1++) {\n var B1 = g1[E1];\n B1.enumerable = B1.enumerable || !1, B1.configurable = !0, "value" in B1 && (B1.writable = !0), Object.defineProperty(w1, B1.key, B1);\n }\n }\n function Q(w1, g1) {\n return Q = Object.setPrototypeOf ? Object.setPrototypeOf.bind() : function(E1, B1) {\n return E1.__proto__ = B1, E1;\n }, Q(w1, g1);\n }\n function E(w1, g1) {\n if (g1 && (j(g1) === "object" || typeof g1 == "function"))\n return g1;\n if (g1 !== void 0)\n throw new TypeError("Derived constructors may only return object or undefined");\n return function(E1) {\n if (E1 === void 0)\n throw new ReferenceError("this hasn\'t been initialised - super() hasn\'t been called");\n return E1;\n }(w1);\n }\n function D(w1) {\n return D = Object.setPrototypeOf ? Object.getPrototypeOf.bind() : function(g1) {\n return g1.__proto__ || Object.getPrototypeOf(g1);\n }, D(w1);\n }\n function G(w1, g1, E1) {\n return g1 in w1 ? Object.defineProperty(w1, g1, { value: E1, enumerable: !0, configurable: !0, writable: !0 }) : w1[g1] = E1, w1;\n }\n var J = function(w1) {\n (function(H1, x1) {\n if (typeof x1 != "function" && x1 !== null)\n throw new TypeError("Super expression must either be null or a function");\n H1.prototype = Object.create(x1 && x1.prototype, { constructor: { value: H1, writable: !0, configurable: !0 } }), Object.defineProperty(H1, "prototype", { writable: !1 }), x1 && Q(H1, x1);\n })(e0, w1);\n var g1, E1, B1, K1, p0 = (B1 = e0, K1 = function() {\n if (typeof Reflect > "u" || !Reflect.construct || Reflect.construct.sham)\n return !1;\n if (typeof Proxy == "function")\n return !0;\n try {\n return Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function() {\n })), !0;\n } catch {\n return !1;\n }\n }(), function() {\n var H1, x1 = D(B1);\n if (K1) {\n var I1 = D(this).constructor;\n H1 = Reflect.construct(x1, arguments, I1);\n } else\n H1 = x1.apply(this, arguments);\n return E(this, H1);\n });\n function e0() {\n return r1(this, e0), p0.apply(this, arguments);\n }\n return g1 = e0, E1 = [{ key: "componentDidMount", value: function() {\n this.updateDeterminateProperty();\n } }, { key: "componentDidUpdate", value: function() {\n this.updateDeterminateProperty();\n } }, { key: "updateDeterminateProperty", value: function() {\n var H1 = this.props.indeterminate;\n this.checkbox.indeterminate = H1;\n } }, { key: "render", value: function() {\n var H1 = this, x1 = function(I1) {\n for (var X1 = 1; X1 < arguments.length; X1++) {\n var J1 = arguments[X1] != null ? arguments[X1] : {};\n X1 % 2 ? _(Object(J1), !0).forEach(function(f0) {\n G(I1, f0, J1[f0]);\n }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(I1, Object.getOwnPropertyDescriptors(J1)) : _(Object(J1)).forEach(function(f0) {\n Object.defineProperty(I1, f0, Object.getOwnPropertyDescriptor(J1, f0));\n });\n }\n return I1;\n }({}, this.props);\n return delete x1.indeterminate, O().createElement("input", U({}, x1, { ref: function(I1) {\n H1.checkbox = I1;\n }, type: "checkbox" }));\n } }], E1 && K(g1.prototype, E1), Object.defineProperty(g1, "prototype", { writable: !1 }), e0;\n }(O().PureComponent);\n G(J, "propTypes", { indeterminate: z().bool }), G(J, "defaultProps", { indeterminate: !1 });\n const S = J, W = z().shape({ check: z().node, uncheck: z().node, halfCheck: z().node, expandClose: z().node, expandOpen: z().node, expandAll: z().node, collapseAll: z().node, parentClose: z().node, parentOpen: z().node, leaf: z().node }), P = z().shape({ collapseAll: z().string.isRequired, expandAll: z().string.isRequired, toggle: z().string.isRequired });\n function Y(w1) {\n return Y = typeof Symbol == "function" && typeof Symbol.iterator == "symbol" ? function(g1) {\n return typeof g1;\n } : function(g1) {\n return g1 && typeof Symbol == "function" && g1.constructor === Symbol && g1 !== Symbol.prototype ? "symbol" : typeof g1;\n }, Y(w1);\n }\n function Z(w1, g1) {\n for (var E1 = 0; E1 < g1.length; E1++) {\n var B1 = g1[E1];\n B1.enumerable = B1.enumerable || !1, B1.configurable = !0, "value" in B1 && (B1.writable = !0), Object.defineProperty(w1, B1.key, B1);\n }\n }\n function t1(w1, g1) {\n return t1 = Object.setPrototypeOf ? Object.setPrototypeOf.bind() : function(E1, B1) {\n return E1.__proto__ = B1, E1;\n }, t1(w1, g1);\n }\n function i1(w1, g1) {\n if (g1 && (Y(g1) === "object" || typeof g1 == "function"))\n return g1;\n if (g1 !== void 0)\n throw new TypeError("Derived constructors may only return object or undefined");\n return n1(w1);\n }\n function n1(w1) {\n if (w1 === void 0)\n throw new ReferenceError("this hasn\'t been initialised - super() hasn\'t been called");\n return w1;\n }\n function s1(w1) {\n return s1 = Object.setPrototypeOf ? Object.getPrototypeOf.bind() : function(g1) {\n return g1.__proto__ || Object.getPrototypeOf(g1);\n }, s1(w1);\n }\n function d1(w1, g1, E1) {\n return g1 in w1 ? Object.defineProperty(w1, g1, { value: E1, enumerable: !0, configurable: !0, writable: !0 }) : w1[g1] = E1, w1;\n }\n var b1 = function(w1) {\n (function(H1, x1) {\n if (typeof x1 != "function" && x1 !== null)\n throw new TypeError("Super expression must either be null or a function");\n H1.prototype = Object.create(x1 && x1.prototype, { constructor: { value: H1, writable: !0, configurable: !0 } }), Object.defineProperty(H1, "prototype", { writable: !1 }), x1 && t1(H1, x1);\n })(e0, w1);\n var g1, E1, B1, K1, p0 = (B1 = e0, K1 = function() {\n if (typeof Reflect > "u" || !Reflect.construct || Reflect.construct.sham)\n return !1;\n if (typeof Proxy == "function")\n return !0;\n try {\n return Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function() {\n })), !0;\n } catch {\n return !1;\n }\n }(), function() {\n var H1, x1 = s1(B1);\n if (K1) {\n var I1 = s1(this).constructor;\n H1 = Reflect.construct(x1, arguments, I1);\n } else\n H1 = x1.apply(this, arguments);\n return i1(this, H1);\n });\n function e0(H1) {\n var x1;\n return function(I1, X1) {\n if (!(I1 instanceof X1))\n throw new TypeError("Cannot call a class as a function");\n }(this, e0), (x1 = p0.call(this, H1)).onCheck = x1.onCheck.bind(n1(x1)), x1.onCheckboxKeyPress = x1.onCheckboxKeyPress.bind(n1(x1)), x1.onCheckboxKeyUp = x1.onCheckboxKeyUp.bind(n1(x1)), x1.onClick = x1.onClick.bind(n1(x1)), x1.onExpand = x1.onExpand.bind(n1(x1)), x1;\n }\n return g1 = e0, (E1 = [{ key: "onCheck", value: function() {\n var H1 = this.props, x1 = H1.value;\n (0, H1.onCheck)({ value: x1, checked: this.getCheckState({ toggle: !0 }) });\n } }, { key: "onCheckboxKeyPress", value: function(H1) {\n H1.which === 32 && H1.preventDefault();\n } }, { key: "onCheckboxKeyUp", value: function(H1) {\n var x1 = H1.keyCode;\n [13, 32].includes(x1) && this.onCheck();\n } }, { key: "onClick", value: function() {\n var H1 = this.props, x1 = H1.expandOnClick, I1 = H1.isParent, X1 = H1.value, J1 = H1.onClick;\n I1 && x1 && this.onExpand(), J1({ value: X1, checked: this.getCheckState({ toggle: !1 }) });\n } }, { key: "onExpand", value: function() {\n var H1 = this.props, x1 = H1.expanded, I1 = H1.value;\n (0, H1.onExpand)({ value: I1, expanded: !x1 });\n } }, { key: "getCheckState", value: function(H1) {\n var x1 = H1.toggle, I1 = this.props, X1 = I1.checked, J1 = I1.optimisticToggle;\n return !(X1 !== 0 || !x1) || X1 === 1 && !x1 || X1 === 2 && J1;\n } }, { key: "renderCollapseButton", value: function() {\n var H1 = this.props, x1 = H1.expandDisabled, I1 = H1.isLeaf, X1 = H1.lang;\n return I1 ? O().createElement("span", { className: "rct-collapse" }, O().createElement("span", { className: "rct-icon" })) : O().createElement(H, { className: "rct-collapse rct-collapse-btn", disabled: x1, title: X1.toggle, onClick: this.onExpand }, this.renderCollapseIcon());\n } }, { key: "renderCollapseIcon", value: function() {\n var H1 = this.props, x1 = H1.expanded, I1 = H1.icons, X1 = I1.expandClose, J1 = I1.expandOpen;\n return x1 ? J1 : X1;\n } }, { key: "renderCheckboxIcon", value: function() {\n var H1 = this.props, x1 = H1.checked, I1 = H1.icons, X1 = I1.uncheck, J1 = I1.check, f0 = I1.halfCheck;\n return x1 === 0 ? X1 : x1 === 1 ? J1 : f0;\n } }, { key: "renderNodeIcon", value: function() {\n var H1 = this.props, x1 = H1.expanded, I1 = H1.icon, X1 = H1.icons, J1 = X1.leaf, f0 = X1.parentClose, I0 = X1.parentOpen, O1 = H1.isLeaf;\n return I1 !== null ? I1 : O1 ? J1 : x1 ? I0 : f0;\n } }, { key: "renderBareLabel", value: function(H1) {\n var x1 = this.props, I1 = x1.onClick, X1 = x1.title, J1 = I1 !== null;\n return O().createElement("span", { className: "rct-bare-label", title: X1 }, J1 ? O().createElement("span", { className: "rct-node-clickable", onClick: this.onClick, onKeyPress: this.onClick, role: "button", tabIndex: 0 }, H1) : H1);\n } }, { key: "renderCheckboxLabel", value: function(H1) {\n var x1 = this.props, I1 = x1.checked, X1 = x1.disabled, J1 = x1.title, f0 = x1.treeId, I0 = x1.value, O1 = x1.onClick !== null, V1 = "".concat(f0, "-").concat(String(I0).split(" ").join("_")), G1 = [O().createElement("label", { key: 0, htmlFor: V1, title: J1 }, O().createElement(S, { checked: I1 === 1, disabled: X1, id: V1, indeterminate: I1 === 2, onClick: this.onCheck, onChange: function() {\n } }), O().createElement("span", { "aria-checked": I1 === 1, "aria-disabled": X1, className: "rct-checkbox", role: "checkbox", tabIndex: 0, onKeyPress: this.onCheckboxKeyPress, onKeyUp: this.onCheckboxKeyUp }, this.renderCheckboxIcon()), O1 ? null : H1)];\n return O1 && G1.push(O().createElement("span", { key: 1, className: "rct-node-clickable", onClick: this.onClick, onKeyPress: this.onClick, role: "link", tabIndex: 0 }, H1)), G1;\n } }, { key: "renderLabel", value: function() {\n var H1 = this.props, x1 = H1.label, I1 = H1.showCheckbox, X1 = [H1.showNodeIcon ? O().createElement("span", { key: 0, className: "rct-node-icon" }, this.renderNodeIcon()) : null, O().createElement("span", { key: 1, className: "rct-title" }, x1)];\n return I1 ? this.renderCheckboxLabel(X1) : this.renderBareLabel(X1);\n } }, { key: "renderChildren", value: function() {\n return this.props.expanded ? this.props.children : null;\n } }, { key: "render", value: function() {\n var H1 = this.props, x1 = H1.className, I1 = H1.disabled, X1 = H1.expanded, J1 = H1.isLeaf, f0 = l()({ "rct-node": !0, "rct-node-leaf": J1, "rct-node-parent": !J1, "rct-node-expanded": !J1 && X1, "rct-node-collapsed": !J1 && !X1, "rct-disabled": I1 }, x1);\n return O().createElement("li", { className: f0 }, O().createElement("span", { className: "rct-text" }, this.renderCollapseButton(), this.renderLabel()), this.renderChildren());\n } }]) && Z(g1.prototype, E1), Object.defineProperty(g1, "prototype", { writable: !1 }), e0;\n }(O().PureComponent);\n d1(b1, "propTypes", { checked: z().number.isRequired, disabled: z().bool.isRequired, expandDisabled: z().bool.isRequired, expanded: z().bool.isRequired, icons: W.isRequired, isLeaf: z().bool.isRequired, isParent: z().bool.isRequired, label: z().node.isRequired, lang: P.isRequired, optimisticToggle: z().bool.isRequired, showNodeIcon: z().bool.isRequired, treeId: z().string.isRequired, value: z().oneOfType([z().string, z().number]).isRequired, onCheck: z().func.isRequired, onExpand: z().func.isRequired, children: z().node, className: z().string, expandOnClick: z().bool, icon: z().node, showCheckbox: z().bool, title: z().string, onClick: z().func }), d1(b1, "defaultProps", { children: null, className: null, expandOnClick: !1, icon: null, showCheckbox: !0, title: null, onClick: function() {\n } });\n const c1 = b1, a1 = z().oneOfType([z().arrayOf(z().string), z().arrayOf(z().number)]);\n function l1(w1, g1) {\n var E1 = Object.keys(w1);\n if (Object.getOwnPropertySymbols) {\n var B1 = Object.getOwnPropertySymbols(w1);\n g1 && (B1 = B1.filter(function(K1) {\n return Object.getOwnPropertyDescriptor(w1, K1).enumerable;\n })), E1.push.apply(E1, B1);\n }\n return E1;\n }\n function p1(w1) {\n for (var g1 = 1; g1 < arguments.length; g1++) {\n var E1 = arguments[g1] != null ? arguments[g1] : {};\n g1 % 2 ? l1(Object(E1), !0).forEach(function(B1) {\n M1(w1, B1, E1[B1]);\n }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(w1, Object.getOwnPropertyDescriptors(E1)) : l1(Object(E1)).forEach(function(B1) {\n Object.defineProperty(w1, B1, Object.getOwnPropertyDescriptor(E1, B1));\n });\n }\n return w1;\n }\n function M1(w1, g1, E1) {\n return g1 in w1 ? Object.defineProperty(w1, g1, { value: E1, enumerable: !0, configurable: !0, writable: !0 }) : w1[g1] = E1, w1;\n }\n var A1 = { label: z().node.isRequired, value: z().oneOfType([z().string, z().number]).isRequired, disabled: z().bool, icon: z().node, showCheckbox: z().bool, title: z().string };\n const u1 = z().oneOfType([z().shape(A1), z().shape(p1(p1({}, A1), {}, { children: z().arrayOf(A1).isRequired }))]);\n function h1(w1) {\n return h1 = typeof Symbol == "function" && typeof Symbol.iterator == "symbol" ? function(g1) {\n return typeof g1;\n } : function(g1) {\n return g1 && typeof Symbol == "function" && g1.constructor === Symbol && g1 !== Symbol.prototype ? "symbol" : typeof g1;\n }, h1(w1);\n }\n function C1(w1, g1) {\n var E1 = Object.keys(w1);\n if (Object.getOwnPropertySymbols) {\n var B1 = Object.getOwnPropertySymbols(w1);\n g1 && (B1 = B1.filter(function(K1) {\n return Object.getOwnPropertyDescriptor(w1, K1).enumerable;\n })), E1.push.apply(E1, B1);\n }\n return E1;\n }\n function q1(w1) {\n for (var g1 = 1; g1 < arguments.length; g1++) {\n var E1 = arguments[g1] != null ? arguments[g1] : {};\n g1 % 2 ? C1(Object(E1), !0).forEach(function(B1) {\n S1(w1, B1, E1[B1]);\n }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(w1, Object.getOwnPropertyDescriptors(E1)) : C1(Object(E1)).forEach(function(B1) {\n Object.defineProperty(w1, B1, Object.getOwnPropertyDescriptor(E1, B1));\n });\n }\n return w1;\n }\n function W1(w1, g1) {\n for (var E1 = 0; E1 < g1.length; E1++) {\n var B1 = g1[E1];\n B1.enumerable = B1.enumerable || !1, B1.configurable = !0, "value" in B1 && (B1.writable = !0), Object.defineProperty(w1, B1.key, B1);\n }\n }\n function R1(w1, g1) {\n return R1 = Object.setPrototypeOf ? Object.setPrototypeOf.bind() : function(E1, B1) {\n return E1.__proto__ = B1, E1;\n }, R1(w1, g1);\n }\n function k1(w1, g1) {\n if (g1 && (h1(g1) === "object" || typeof g1 == "function"))\n return g1;\n if (g1 !== void 0)\n throw new TypeError("Derived constructors may only return object or undefined");\n return N1(w1);\n }\n function N1(w1) {\n if (w1 === void 0)\n throw new ReferenceError("this hasn\'t been initialised - super() hasn\'t been called");\n return w1;\n }\n function v1(w1) {\n return v1 = Object.setPrototypeOf ? Object.getPrototypeOf.bind() : function(g1) {\n return g1.__proto__ || Object.getPrototypeOf(g1);\n }, v1(w1);\n }\n function S1(w1, g1, E1) {\n return g1 in w1 ? Object.defineProperty(w1, g1, { value: E1, enumerable: !0, configurable: !0, writable: !0 }) : w1[g1] = E1, w1;\n }\n var D1 = function(w1) {\n (function(x1, I1) {\n if (typeof I1 != "function" && I1 !== null)\n throw new TypeError("Super expression must either be null or a function");\n x1.prototype = Object.create(I1 && I1.prototype, { constructor: { value: x1, writable: !0, configurable: !0 } }), Object.defineProperty(x1, "prototype", { writable: !1 }), I1 && R1(x1, I1);\n })(H1, w1);\n var g1, E1, B1, K1, p0, e0 = (K1 = H1, p0 = function() {\n if (typeof Reflect > "u" || !Reflect.construct || Reflect.construct.sham)\n return !1;\n if (typeof Proxy == "function")\n return !0;\n try {\n return Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function() {\n })), !0;\n } catch {\n return !1;\n }\n }(), function() {\n var x1, I1 = v1(K1);\n if (p0) {\n var X1 = v1(this).constructor;\n x1 = Reflect.construct(I1, arguments, X1);\n } else\n x1 = I1.apply(this, arguments);\n return k1(this, x1);\n });\n function H1(x1) {\n var I1;\n (function(J1, f0) {\n if (!(J1 instanceof f0))\n throw new TypeError("Cannot call a class as a function");\n })(this, H1), I1 = e0.call(this, x1);\n var X1 = new I(x1);\n return X1.flattenNodes(x1.nodes), X1.deserializeLists({ checked: x1.checked, expanded: x1.expanded }), I1.state = { id: x1.id || "rct-".concat(u()), model: X1, prevProps: x1 }, I1.onCheck = I1.onCheck.bind(N1(I1)), I1.onExpand = I1.onExpand.bind(N1(I1)), I1.onNodeClick = I1.onNodeClick.bind(N1(I1)), I1.onExpandAll = I1.onExpandAll.bind(N1(I1)), I1.onCollapseAll = I1.onCollapseAll.bind(N1(I1)), I1.combineMemorized = M()(function(J1, f0) {\n return q1(q1({}, J1), f0);\n }).bind(N1(I1)), I1;\n }\n return g1 = H1, E1 = [{ key: "onCheck", value: function(x1) {\n var I1 = this.props, X1 = I1.checkModel, J1 = I1.noCascade, f0 = I1.onCheck, I0 = this.state.model.clone(), O1 = I0.getNode(x1.value);\n I0.toggleChecked(x1, x1.checked, X1, J1), f0(I0.serializeList("checked"), q1(q1({}, O1), x1));\n } }, { key: "onExpand", value: function(x1) {\n var I1 = this.props.onExpand, X1 = this.state.model.clone(), J1 = X1.getNode(x1.value);\n X1.toggleNode(x1.value, "expanded", x1.expanded), I1(X1.serializeList("expanded"), q1(q1({}, J1), x1));\n } }, { key: "onNodeClick", value: function(x1) {\n (0, this.props.onClick)(q1(q1({}, this.state.model.getNode(x1.value)), x1));\n } }, { key: "onExpandAll", value: function() {\n this.expandAllNodes();\n } }, { key: "onCollapseAll", value: function() {\n this.expandAllNodes(!1);\n } }, { key: "expandAllNodes", value: function() {\n var x1 = !(arguments.length > 0 && arguments[0] !== void 0) || arguments[0], I1 = this.props.onExpand;\n I1(this.state.model.clone().expandAllNodes(x1).serializeList("expanded"));\n } }, { key: "determineShallowCheckState", value: function(x1, I1) {\n var X1 = this.state.model.getNode(x1.value);\n return X1.isLeaf || I1 || x1.children.length === 0 ? X1.checked ? 1 : 0 : this.isEveryChildChecked(x1) ? 1 : this.isSomeChildChecked(x1) ? 2 : 0;\n } }, { key: "isEveryChildChecked", value: function(x1) {\n var I1 = this;\n return x1.children.every(function(X1) {\n return I1.state.model.getNode(X1.value).checkState === 1;\n });\n } }, { key: "isSomeChildChecked", value: function(x1) {\n var I1 = this;\n return x1.children.some(function(X1) {\n return I1.state.model.getNode(X1.value).checkState > 0;\n });\n } }, { key: "renderTreeNodes", value: function(x1) {\n var I1 = this, X1 = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : {}, J1 = this.props, f0 = J1.expandDisabled, I0 = J1.expandOnClick, O1 = J1.icons, V1 = J1.lang, G1 = J1.noCascade, i0 = J1.onClick, b0 = J1.onlyLeafCheckboxes, g0 = J1.optimisticToggle, u0 = J1.showNodeTitle, z0 = J1.showNodeIcon, V0 = this.state, W0 = V0.id, F0 = V0.model, b2 = H1.defaultProps.icons, Z2 = x1.map(function(j0) {\n var a2 = j0.value, A2 = F0.getNode(j0.value), Ot = A2.isParent ? I1.renderTreeNodes(j0.children, j0) : null;\n A2.checkState = I1.determineShallowCheckState(j0, G1);\n var ft = b0 ? A2.isLeaf : A2.showCheckbox;\n return !X1.value || F0.getNode(X1.value).expanded ? O().createElement(c1, { key: a2, checked: A2.checkState, className: j0.className, disabled: A2.disabled, expandDisabled: f0, expandOnClick: I0, expanded: A2.expanded, icon: j0.icon, icons: I1.combineMemorized(b2, O1), label: j0.label, lang: V1, optimisticToggle: g0, isLeaf: A2.isLeaf, isParent: A2.isParent, showCheckbox: ft, showNodeIcon: z0, title: u0 ? j0.title || j0.label : j0.title, treeId: W0, value: j0.value, onCheck: I1.onCheck, onClick: i0 && I1.onNodeClick, onExpand: I1.onExpand }, Ot) : null;\n });\n return O().createElement("ol", null, Z2);\n } }, { key: "renderExpandAll", value: function() {\n var x1 = this.props, I1 = x1.icons, X1 = I1.expandAll, J1 = I1.collapseAll, f0 = x1.lang;\n return x1.showExpandAll ? O().createElement("div", { className: "rct-options" }, O().createElement(H, { className: "rct-option rct-option-expand-all", title: f0.expandAll, onClick: this.onExpandAll }, X1), O().createElement(H, { className: "rct-option rct-option-collapse-all", title: f0.collapseAll, onClick: this.onCollapseAll }, J1)) : null;\n } }, { key: "renderHiddenInput", value: function() {\n var x1 = this.props, I1 = x1.name, X1 = x1.nameAsArray;\n return I1 === void 0 ? null : X1 ? this.renderArrayHiddenInput() : this.renderJoinedHiddenInput();\n } }, { key: "renderArrayHiddenInput", value: function() {\n var x1 = this.props, I1 = x1.checked, X1 = x1.name;\n return I1.map(function(J1) {\n var f0 = "".concat(X1, "[]");\n return O().createElement("input", { key: J1, name: f0, type: "hidden", value: J1 });\n });\n } }, { key: "renderJoinedHiddenInput", value: function() {\n var x1 = this.props, I1 = x1.checked, X1 = x1.name, J1 = I1.join(",");\n return O().createElement("input", { name: X1, type: "hidden", value: J1 });\n } }, { key: "render", value: function() {\n var x1, I1 = this.props, X1 = I1.direction, J1 = I1.disabled, f0 = I1.iconsClass, I0 = I1.nodes, O1 = I1.nativeCheckboxes, V1 = this.state.id, G1 = this.renderTreeNodes(I0), i0 = l()((S1(x1 = { "react-checkbox-tree": !0, "rct-disabled": J1 }, "rct-icons-".concat(f0), !0), S1(x1, "rct-native-display", O1), S1(x1, "rct-direction-rtl", X1 === "rtl"), x1));\n return O().createElement("div", { className: i0, id: V1 }, this.renderExpandAll(), this.renderHiddenInput(), G1);\n } }], B1 = [{ key: "getDerivedStateFromProps", value: function(x1, I1) {\n var X1 = I1.model, J1 = I1.prevProps, f0 = x1.disabled, I0 = x1.id, O1 = x1.nodes, V1 = q1(q1({}, I1), {}, { prevProps: x1 });\n return X1.setProps(x1), d()(J1.nodes, O1) && J1.disabled === f0 || (X1.reset(), X1.flattenNodes(O1)), I0 !== null && (V1 = q1(q1({}, V1), {}, { id: I0 })), X1.deserializeLists({ checked: x1.checked, expanded: x1.expanded }), V1;\n } }], E1 && W1(g1.prototype, E1), B1 && W1(g1, B1), Object.defineProperty(g1, "prototype", { writable: !1 }), H1;\n }(O().Component);\n function F1(w1) {\n return function(g1) {\n if (Array.isArray(g1))\n return U1(g1);\n }(w1) || function(g1) {\n if (typeof Symbol < "u" && g1[Symbol.iterator] != null || g1["@@iterator"] != null)\n return Array.from(g1);\n }(w1) || function(g1, E1) {\n if (g1) {\n if (typeof g1 == "string")\n return U1(g1, E1);\n var B1 = Object.prototype.toString.call(g1).slice(8, -1);\n return B1 === "Object" && g1.constructor && (B1 = g1.constructor.name), B1 === "Map" || B1 === "Set" ? Array.from(g1) : B1 === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(B1) ? U1(g1, E1) : void 0;\n }\n }(w1) || function() {\n throw new TypeError(`Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.`);\n }();\n }\n function U1(w1, g1) {\n (g1 == null || g1 > w1.length) && (g1 = w1.length);\n for (var E1 = 0, B1 = new Array(g1); E1 < g1; E1++)\n B1[E1] = w1[E1];\n return B1;\n }\n function h0(w1, g1) {\n var E1 = arguments.length > 2 && arguments[2] !== void 0 ? arguments[2] : 0;\n if (E1 > g1)\n return [];\n var B1 = [];\n return w1.forEach(function(K1) {\n K1.children && (B1 = [].concat(F1(B1), [K1.value], F1(h0(K1.children, g1, E1 + 1))));\n }), B1;\n }\n S1(D1, "propTypes", { nodes: z().arrayOf(u1).isRequired, checkModel: z().oneOf([C.LEAF, C.ALL]), checked: a1, direction: z().string, disabled: z().bool, expandDisabled: z().bool, expandOnClick: z().bool, expanded: a1, icons: W, iconsClass: z().string, id: z().string, lang: P, name: z().string, nameAsArray: z().bool, nativeCheckboxes: z().bool, noCascade: z().bool, onlyLeafCheckboxes: z().bool, optimisticToggle: z().bool, showExpandAll: z().bool, showNodeIcon: z().bool, showNodeTitle: z().bool, onCheck: z().func, onClick: z().func, onExpand: z().func }), S1(D1, "defaultProps", { checkModel: C.LEAF, checked: [], direction: "ltr", disabled: !1, expandDisabled: !1, expandOnClick: !1, expanded: [], icons: { check: O().createElement("span", { className: "rct-icon rct-icon-check" }), uncheck: O().createElement("span", { className: "rct-icon rct-icon-uncheck" }), halfCheck: O().createElement("span", { className: "rct-icon rct-icon-half-check" }), expandClose: O().createElement("span", { className: "rct-icon rct-icon-expand-close" }), expandOpen: O().createElement("span", { className: "rct-icon rct-icon-expand-open" }), expandAll: O().createElement("span", { className: "rct-icon rct-icon-expand-all" }), collapseAll: O().createElement("span", { className: "rct-icon rct-icon-collapse-all" }), parentClose: O().createElement("span", { className: "rct-icon rct-icon-parent-close" }), parentOpen: O().createElement("span", { className: "rct-icon rct-icon-parent-open" }), leaf: O().createElement("span", { className: "rct-icon rct-icon-leaf" }) }, iconsClass: "fa4", id: null, lang: { collapseAll: "Collapse all", expandAll: "Expand all", toggle: "Toggle" }, name: void 0, nameAsArray: !1, nativeCheckboxes: !1, noCascade: !1, onlyLeafCheckboxes: !1, optimisticToggle: !0, showExpandAll: !1, showNodeIcon: !0, showNodeTitle: !1, onCheck: function() {\n }, onClick: null, onExpand: function() {\n } });\n const O0 = D1;\n })(), a;\n })());\n})(kp);\nvar mB = kp.exports;\nconst LB = /* @__PURE__ */ Q2(mB);\nstyled_components__WEBPACK_IMPORTED_MODULE_1___default().span(\n ({ theme: e }) => (0,styled_components__WEBPACK_IMPORTED_MODULE_1__.css)`\n font-size: ${e.typography.t14};\n font-weight: ${e.fontWeight.light};\n line-height: ${e.lineHeight.lh22};\n color: ${e.colors.textIcon.textPrimary};\n padding-left: 0.5rem;\n `\n);\nstyled_components__WEBPACK_IMPORTED_MODULE_1___default().div(\n ({ theme: { spacings: e } }) => (0,styled_components__WEBPACK_IMPORTED_MODULE_1__.css)`\n display: flex;\n align-items: center;\n padding: 0 ${e.sp8};\n `\n);\nconst vB = styled_components__WEBPACK_IMPORTED_MODULE_1___default().div(\n ({ theme: e }) => (0,styled_components__WEBPACK_IMPORTED_MODULE_1__.css)`\n > label {\n pointer-events: none;\n }\n `\n);\nstyled_components__WEBPACK_IMPORTED_MODULE_1___default().div(\n ({ theme: e }) => (0,styled_components__WEBPACK_IMPORTED_MODULE_1__.css)`\n display: flex;\n flex-direction: row;\n align-items: center;\n width: 200px;\n justify-content: space-between;\n `\n);\nstyled_components__WEBPACK_IMPORTED_MODULE_1___default().div(\n ({ theme: e }) => (0,styled_components__WEBPACK_IMPORTED_MODULE_1__.css)`\n display: flex;\n align-items: center;\n min-width: 200px;\n width: 150px;\n gap: 8px;\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n `\n);\nconst qB = styled_components__WEBPACK_IMPORTED_MODULE_1___default().div(\n ({ theme: { colors: e } }) => (0,styled_components__WEBPACK_IMPORTED_MODULE_1__.css)`\n cursor: pointer;\n .icon-system {\n color: ${e.textIcon.textPrimary};\n }\n `\n), yB = styled_components__WEBPACK_IMPORTED_MODULE_1___default().div(\n ({ theme: { colors: e } }) => (0,styled_components__WEBPACK_IMPORTED_MODULE_1__.css)`\n cursor: pointer;\n .icon-system {\n color: ${e.textIcon.textPrimary};\n }\n `\n), wB = styled_components__WEBPACK_IMPORTED_MODULE_1___default().div(\n ({ theme: e, $hideCheck: t, isSelected: o, $expandIconName: n }) => (0,styled_components__WEBPACK_IMPORTED_MODULE_1__.css)`\n li {\n list-style-type: none;\n }\n\n label > input {\n display: none;\n }\n .rct-title {\n width: 100%;\n }\n .rct-text .rct-checkbox {\n margin-right: 4px;\n ${t && (0,styled_components__WEBPACK_IMPORTED_MODULE_1__.css)`\n display: none;\n `}\n }\n .rct-text > .rct-collapse-btn {\n border: none;\n background: none;\n }\n .rct-node-expanded {\n padding-left: ${D3.sp8};\n }\n .rct-node-icon .icon-system {\n color: ${e.colors.textIcon.textPrimary};\n }\n .rct-node-clickable:focus {\n outline: 0;\n background: none;\n }\n .rct-text {\n display: flex !important;\n align-items: center !important;\n }\n .rct-node-collapsed {\n padding-left: ${D3.sp8};\n }\n /* .rct-node .rct-text label {\n display: flex !important;\n justify-content: space-between;\n align-items: center !important;\n width: 100%;\n } */\n & label {\n font-size: ${e.typography.t12};\n font-weight: ${e.fontWeight.light};\n line-height: ${e.lineHeight.lh20};\n color: ${e.colors.textIcon.textPrimary};\n overflow: hidden;\n text-overflow: ellipsis;\n }\n .rct-node-leaf {\n padding-left: ${D3.sp8} !important;\n }\n .rct-text {\n padding: 2px;\n color: ${e.colors.textIcon.textPrimary};\n }\n\n .rct-node-leaf .rct-text {\n background: unset;\n }\n .react-checkbox-tree label:hover {\n background: transparent;\n }\n .rct-node-parent .rct-node-clickable {\n align-items: center;\n gap: 8px;\n ${n && (0,styled_components__WEBPACK_IMPORTED_MODULE_1__.css)`\n padding-left: 0px;\n `}\n ${!n && (0,styled_components__WEBPACK_IMPORTED_MODULE_1__.css)`\n padding-left: 8px;\n `}\n &:hover,\n :focus {\n background: unset;\n }\n .rct-text {\n background: unset;\n }\n }\n `\n), xB = (e) => {\n const {\n iconName: t,\n checked: o,\n nodes: n,\n expanded: r,\n onCheck: i,\n onClick: a,\n onExpand: s,\n hideCheck: l = !0,\n showNodeIcon: p,\n expandIconName: d,\n expandIcon: b,\n expandOnClick: M\n } = e;\n let u = (0,react__WEBPACK_IMPORTED_MODULE_0__.useRef)();\n const A = react__WEBPACK_IMPORTED_MODULE_0___default().useCallback(\n ({ checked: h = !1, isPartlyOnly: g = !1 }) => /* @__PURE__ */ c(vB, { className: "rct-checkbox", children: /* @__PURE__ */ c(\n yt,\n {\n isRequired: !0,\n label: "",\n readOnly: !0,\n checked: h,\n isPartlyOnly: g\n }\n ) }),\n []\n );\n (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => {\n var h;\n n == null || n.map((g, v) => {\n var L;\n (L = document.getElementsByClassName("rct-collapse-btn")[v]) == null || L.removeAttribute("title");\n }), console.log("CheckBoxTreeRef", (h = u == null ? void 0 : u.current) == null ? void 0 : h.onNo);\n }, [n]);\n const [z, f] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(!1), O = (h) => {\n f(!z);\n };\n return /* @__PURE__ */ c(\n wB,\n {\n $hideCheck: l,\n $expandIconName: d,\n isSelected: z,\n children: /* @__PURE__ */ c(\n LB,\n {\n ref: u,\n nodes: n,\n expandOnClick: M,\n checked: o,\n expanded: r,\n onCheck: i,\n onClick: (h) => {\n O(), a(h);\n },\n onExpand: s,\n showNodeIcon: p,\n icons: {\n expandOpen: b ? /* @__PURE__ */ c(qB, { children: /* @__PURE__ */ c(\n Z1,\n {\n color: "#000",\n name: d || "ChevronDown",\n size: "xxs"\n }\n ) }) : null,\n expandClose: b ? /* @__PURE__ */ c(yB, { children: /* @__PURE__ */ c(\n Z1,\n {\n color: "#000",\n name: d || "ChevronRight",\n size: "xxs"\n }\n ) }) : null,\n check: /* @__PURE__ */ c(A, { checked: !0 }),\n uncheck: /* @__PURE__ */ c(A, {}),\n halfCheck: /* @__PURE__ */ c(A, { isPartlyOnly: !0, checked: !0 })\n }\n }\n )\n }\n );\n};\n(styled_components__WEBPACK_IMPORTED_MODULE_1___default().div)`\n /* max-width: 378px; */\n min-height: 350px;\n height: 276px;\n width: 100%;\n background-color: ${({ theme: e }) => e.colors.white};\n padding: ${({ theme: e }) => e.spacings.sp8} 0;\n`;\nconst WB = styled_components__WEBPACK_IMPORTED_MODULE_1___default().div(\n ({ theme: e }) => (0,styled_components__WEBPACK_IMPORTED_MODULE_1__.css)`\n .rct-node-clickable {\n display: flex;\n }\n .rct-text {\n padding: 0;\n }\n .rct-node {\n .rct-node-clickable {\n cursor: pointer;\n &:focus {\n background: ${e.colors.backgrounds.bgSelected};\n }\n &:hover {\n background: ${e.colors.backgrounds.bgHoverPrimary};\n }\n }\n }\n\n svg {\n height: 13px;\n }\n .rct-title {\n overflow: hidden;\n white-space: nowrap;\n text-overflow: ellipsis;\n font-size: ${e.typography.t12};\n font-weight: ${e.fontWeight.light};\n line-height: ${e.lineHeight.lh17};\n color: ${e.colors.textIcon.textPrimary};\n }\n label {\n overflow: hidden;\n white-space: nowrap;\n text-overflow: ellipsis;\n font-size: ${e.typography.t12};\n font-weight: ${e.fontWeight.light};\n line-height: ${e.lineHeight.lh17};\n color: ${e.colors.textIcon.textPrimary};\n }\n .react-checkbox-tree ol ol {\n padding-left: 15px;\n }\n .rct-node-parent .rct-node-clickable {\n padding: 3.5px;\n }\n .rct-node-icon > div {\n padding: 0;\n }\n .rct-node .rct-node-parent .rct-node-expanded {\n padding-left: 0px;\n }\n .rct-node-expanded {\n padding-left: 0px;\n }\n .rct-node-collapsed {\n padding-left: 0px;\n }\n ol li {\n padding: 4px 0;\n }\n .rct-collapse,\n .rct-checkbox,\n .rct-node-icon {\n padding: 0;\n }\n `\n);\nfunction RB(e) {\n const { nodes: t, selectedOptions: o, expandAll: n } = e, [r, i] = react__WEBPACK_IMPORTED_MODULE_0___default().useState([]), a = (s) => {\n let l = [];\n return s == null || s.forEach(({ value: p, children: d }) => {\n l = [...l, p, ...a(d)];\n }), l;\n };\n return (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => {\n i(n ? a(t) : []);\n }, [n]), /* @__PURE__ */ c(WB, { children: /* @__PURE__ */ c(\n xB,\n {\n nodes: t,\n expanded: r,\n onClick: (s) => {\n o && o(s);\n },\n onExpand: i,\n expandAll: n,\n ...e\n }\n ) });\n}\nfunction dt(e) {\n const { nestedList: t } = e;\n return /* @__PURE__ */ c(react__WEBPACK_IMPORTED_MODULE_0__.Fragment, { children: t ? /* @__PURE__ */ c(eR, { children: /* @__PURE__ */ c(RB, { ...e }) }) : /* @__PURE__ */ c($W, { children: /* @__PURE__ */ c(CB, { ...e }) }) });\n}\nfunction Np(e, t) {\n const [o, n] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(e);\n return (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => {\n const r = setTimeout(() => n(e), t || 500);\n return () => {\n clearTimeout(r);\n };\n }, [e, t]), o;\n}\nconst r9 = (e) => {\n let t = (e == null ? void 0 : e.data) ?? [], o = e == null ? void 0 : e.isSearchable;\n const [n, r] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(t), [i, a] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(""), [s, l] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(!1), [p, d] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(""), b = Np(i, 500), M = (z) => {\n a(z), l(!s), e == null || e.setSearchValue(z);\n }, u = () => {\n let z = t == null ? void 0 : t.filter(\n (f) => {\n var O, h, g;\n return (f == null ? void 0 : f.countryList) != null ? (h = (O = f == null ? void 0 : f.countryList) == null ? void 0 : O.countryName) == null ? void 0 : h.toLowerCase().includes(b.toLowerCase()) : (f == null ? void 0 : f.timeZone) != null ? (g = f == null ? void 0 : f.timeZone) == null ? void 0 : g.zone.toLowerCase().includes(b.toLowerCase()) : f == null ? void 0 : f.label.toLowerCase().includes(b.toLowerCase());\n }\n );\n r(z);\n };\n (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => {\n u();\n }, [b]);\n const A = (z) => {\n (typeof z == "object" && Object.keys(z).length || z.length > 0) && (d(z), e.selectedValue && e.selectedValue(z));\n };\n return /* @__PURE__ */ e1(KW, { children: [\n o && /* @__PURE__ */ c(G4, { getValue: M, value: i, placeholder: "Search" }),\n /* @__PURE__ */ c(\n dt,\n {\n ...e,\n defaultValues: e == null ? void 0 : e.values,\n selectedLists: p,\n data: n,\n selectedOptions: A,\n showSelectedList: e == null ? void 0 : e.showSelectedList\n }\n )\n ] });\n}, BB = 4, SB = {\n xs: 14,\n sm: 24,\n md: 40,\n lg: 48,\n xl: 64\n};\nfunction EB(e, t, o) {\n return o || e[t];\n}\nfunction kB(e) {\n const t = EB(SB, e), o = BB, n = (t - o) / 2, r = n * 2 * Math.PI;\n return [t, o, n, r];\n}\nconst NB = (0,styled_components__WEBPACK_IMPORTED_MODULE_1__.keyframes)`\n 0% {\n transform: rotate(0deg);\n }\n 100% {\n transform: rotate(360deg);\n }\n`, TB = styled_components__WEBPACK_IMPORTED_MODULE_1___default().svg(\n ({ theme: { colors: e } }) => (0,styled_components__WEBPACK_IMPORTED_MODULE_1__.css)`\n color: ${e.info};\n stroke: currentColor;\n transform: rotate(-90deg);\n fill: none;\n `\n), IB = styled_components__WEBPACK_IMPORTED_MODULE_1___default().circle(\n ({ theme: { colors: e } }) => (0,styled_components__WEBPACK_IMPORTED_MODULE_1__.css)`\n color: ${e.backgrounds.bgInformationalPrimary};\n animation: ${NB} 1s linear infinite;\n transform-origin: center;\n `\n), DB = styled_components__WEBPACK_IMPORTED_MODULE_1___default().circle(\n ({ theme: { colors: e } }) => (0,styled_components__WEBPACK_IMPORTED_MODULE_1__.css)`\n color: ${e.border.borderTertiary};\n `\n), HB = (e, t) => {\n const { progress: o = 0, size: n = "md", ...r } = e, [i, a, s, l] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useMemo)(\n () => kB(n),\n [n]\n ), p = l - l * 25 / 100;\n return /* @__PURE__ */ e1(\n TB,\n {\n ...r,\n width: i,\n height: i,\n viewBox: `0 0 ${i} ${i}`,\n ref: t,\n children: [\n /* @__PURE__ */ c(\n DB,\n {\n cx: i / 2,\n cy: i / 2,\n r: s,\n strokeWidth: a,\n strokeDasharray: l,\n strokeDashoffset: 0\n }\n ),\n /* @__PURE__ */ c(\n IB,\n {\n cx: i / 2,\n cy: i / 2,\n r: s,\n strokeWidth: a,\n strokeDasharray: l,\n strokeDashoffset: p\n }\n )\n ]\n }\n );\n}, VB = (0,react__WEBPACK_IMPORTED_MODULE_0__.forwardRef)(HB), Yi = {\n CIRCLE: "circle",\n LINEAR: "linear"\n}, n5 = {\n CYAN: "cyan",\n BLUE: "blue"\n}, PB = (0,styled_components__WEBPACK_IMPORTED_MODULE_1__.keyframes)`\n 0% {\n width: 0;\n }\n 100% {\n width: 100%;\n }\n`, FB = styled_components__WEBPACK_IMPORTED_MODULE_1___default().div(\n ({ theme: { colors: e }, progress: t, $backgroundColor: o }) => {\n let n;\n switch (o) {\n case n5.BLUE:\n n = e.backgrounds.bgInformationalPrimary;\n break;\n case n5.CYAN:\n default:\n n = e.backgrounds.bgInformationalPrimary;\n }\n return (0,styled_components__WEBPACK_IMPORTED_MODULE_1__.css)`\n position: relative;\n width: 100%;\n min-width: 100px;\n height: 4px;\n background-color: ${e.border.borderTertiary};\n border-radius: 20px;\n overflow: hidden;\n\n &:after {\n content: \'\';\n position: absolute;\n height: 100%;\n width: ${t}%;\n background-color: ${n};\n border-radius: 20px;\n transition: width 0.2s linear;\n animation: ${PB} 2s linear infinite;\n }\n `;\n }\n);\nfunction XB(e, t) {\n const {\n progress: o = 0,\n backgroundColor: n = n5.CYAN,\n ...r\n } = e;\n return /* @__PURE__ */ c(\n FB,\n {\n ref: t,\n progress: 5,\n $backgroundColor: n,\n ...r\n }\n );\n}\nconst UB = (0,react__WEBPACK_IMPORTED_MODULE_0__.forwardRef)(XB);\n(styled_components__WEBPACK_IMPORTED_MODULE_1___default().div)`\n width: 970px;\n`;\nconst YB = (styled_components__WEBPACK_IMPORTED_MODULE_1___default().div)`\n display: flex;\n align-items: center;\n`, GB = (e, t) => {\n const { progress: o, type: n = Yi.CIRCLE } = e;\n return /* @__PURE__ */ c(YB, { ref: t, children: (() => {\n switch (n) {\n case Yi.LINEAR:\n return /* @__PURE__ */ c(UB, { progress: o });\n case Yi.CIRCLE:\n default:\n return /* @__PURE__ */ c(VB, { progress: o });\n }\n })() });\n}, Tp = (0,react__WEBPACK_IMPORTED_MODULE_0__.forwardRef)(GB), QB = styled_components__WEBPACK_IMPORTED_MODULE_1___default().div(\n ({ theme: { typography: e, lineHeight: t } }) => (0,styled_components__WEBPACK_IMPORTED_MODULE_1__.css)`\n ${X5} {\n font-size: ${e.t12};\n line-height: ${t.lh20};\n }\n\n `\n), i5 = styled_components__WEBPACK_IMPORTED_MODULE_1___default().div(\n ({ theme: { colors: e } }) => (0,styled_components__WEBPACK_IMPORTED_MODULE_1__.css)`\n color: ${e.grey};\n display: flex;\n width: 100%;\n align-items: center;\n box-sizing: border-box;\n gap: 8px;\n\n svg {\n height: 100%;\n width: 14px;\n }\n\n \n `\n), ZB = styled_components__WEBPACK_IMPORTED_MODULE_1___default().strong(\n ({ theme: { colors: e, fontWeight: t, spacings: o } }) => (0,styled_components__WEBPACK_IMPORTED_MODULE_1__.css)`\n color: ${e.grey};\n display: block;\n font-weight: ${t.regular};\n margin: 0 ${o.sp4} ${o.sp8};\n `\n), tt = (e) => {\n const {\n data: t,\n selectedOptions: o,\n isMulti: n,\n isFilter: r,\n ApplyFilter: i,\n placeholder: a,\n label: s,\n labelType: l,\n dropdownBodyWidth: p,\n position: d,\n getSearchValue: b,\n isSearchable: M,\n isBodyGenerated: u,\n defaultValues: A,\n autoSearch: z,\n isRequired: f,\n iconRight: O,\n showSelectedList: h,\n isHideClearBtn: g,\n handleClearFn: v,\n isLoading: L,\n isTooltip: y\n } = e, B = (0,react__WEBPACK_IMPORTED_MODULE_0__.useRef)(null), [X, F] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(!1), [T, w] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(""), [H, C] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)([]), q = (0,react__WEBPACK_IMPORTED_MODULE_0__.useRef)(), [m, k] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(t), [x, N] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(!0), V = (K, Q) => {\n let E, D = [];\n if (A != null)\n return K != null && K.length ? (Q == null || Q.filter((G) => {\n K == null || K.map((J) => {\n G.label == (J == null ? void 0 : J.label) && G.value == (J == null ? void 0 : J.value) && D.push(!0);\n });\n }), D.length == (K == null ? void 0 : K.length)) : Q != null && Q.timeZone ? (Q == null || Q.filter((G) => {\n G.timeZone.zone == K.timeZone.zone && G.value == K.value && (E = !0);\n }), E) : (Q == null || Q.filter((G) => {\n G.label == K.label && G.value == K.value && (E = !0);\n }), E);\n };\n (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => {\n var K, Q, E;\n if (V(A, t))\n if (A != null && A.length) {\n let D = [];\n A == null || A.map((G) => {\n D.push(G.label);\n }), w(D), C(A);\n } else if ((K = A == null ? void 0 : A.timeZone) != null && K.zone) {\n let D = `${(Q = A == null ? void 0 : A.timeZone) == null ? void 0 : Q.zone}`;\n C(A), w(D);\n } else if (A != null && A.countryList) {\n let D = `${(E = A == null ? void 0 : A.countryList) == null ? void 0 : E.countryCode}`;\n C(A), w(D);\n } else\n C(A), w(A == null ? void 0 : A.label);\n JSON.stringify(A) === "{}" && (C({}), w("")), (A == null ? void 0 : A.length) == 0 && (C([]), w(""));\n }, [A, L, t]);\n const R = () => {\n F(!X);\n };\n (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => {\n A && z && (k(t), N(!0));\n }, [A]);\n const I = (K) => {\n let Q = K.target.value;\n if (N(!1), Q.length > 0) {\n w(Q);\n let E = [];\n t == null || t.filter((D) => {\n D.label.toString().toLowerCase().includes(Q) && E.push(D);\n }), k(E);\n } else\n w(""), C([]), k(t);\n F(!0);\n };\n U5(B, X, R), (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => {\n !n && T && F(!1);\n }, [n, T]);\n const j = (K) => {\n var Q;\n if (N(!0), K) {\n let E = [];\n K.length && (K == null || K.map((D) => {\n E.push(D.label);\n }), w(E), C(K), k([K]), o && o(K));\n }\n K != null && K.countryList && (w((Q = K.countryList) == null ? void 0 : Q.countryCode), o && o(K)), K != null && K.zone && (w(K.zone), o && o(K)), K != null && K.label && (w(K.label), C(K), k([K]), o && o(K));\n }, U = (K) => {\n var Q;\n if (K != null && K.countryList && (w(K.countryCode), o && o(K)), K != null && K.zone && (w(K.zone), o && o(K)), K != null && K.label && (w(K.label), o && o(K.label)), K) {\n let E = [];\n K.length && (K == null || K.map((D) => {\n E.push(D.label);\n }), w(E), o && o(E));\n }\n K && C(K), ((Q = Object.keys(K)) == null ? void 0 : Q.length) === 0 && (w(""), C(K)), r && (C(K), o && o(K)), i && i(K);\n }, _ = (K) => {\n b && b(K);\n }, r1 = () => {\n v && v(), w(""), k(t), n ? (C([]), o && o([]), i && i([])) : (C({}), o && o({}), i && i({})), F(!1);\n };\n return /* @__PURE__ */ c(GW, { ref: q, children: /* @__PURE__ */ c(\n it,\n {\n isShowed: X,\n isBodyGenerated: u,\n dropdownBodyWidth: p || "100%",\n position: d,\n body: !L && !(e != null && e.isDisabled) && t && t.length > 0 ? /* @__PURE__ */ c(k7, { ref: B, children: z ? /* @__PURE__ */ c(\n dt,\n {\n ...e,\n defaultValues: H,\n data: m,\n isMulti: !1,\n selectedOptions: j,\n showSelectedList: h\n }\n ) : /* @__PURE__ */ c(\n r9,\n {\n ...e,\n values: H,\n ApplyFilterValue: U,\n selectedValue: j,\n setSearchValue: _,\n isSearchable: !!(t && (t == null ? void 0 : t.length) > 10 && M),\n showSelectedList: h\n }\n ) }) : L && !(e != null && e.isDisabled) ? /* @__PURE__ */ e1(i5, { children: [\n /* @__PURE__ */ c(Tp, { type: "circle", progress: 50 }),\n " Loading"\n ] }) : /* @__PURE__ */ c(k7, { ref: B, children: z ? /* @__PURE__ */ c(\n dt,\n {\n ...e,\n defaultValues: H,\n data: m,\n isMulti: !1,\n selectedOptions: j,\n showSelectedList: h\n }\n ) : /* @__PURE__ */ c(\n r9,\n {\n ...e,\n values: H,\n ApplyFilterValue: U,\n selectedValue: j,\n setSearchValue: _,\n isSearchable: !!(t && (t == null ? void 0 : t.length) > 10 && M),\n showSelectedList: h\n }\n ) }),\n children: /* @__PURE__ */ c(QW, { children: z ? /* @__PURE__ */ c(\n Vi,\n {\n ...e,\n placeholder: a || "Select",\n iconRight: O || (X ? "ChevronUp" : "ChevronDown"),\n readOnly: !1,\n label: s,\n labelType: l,\n isRequired: f || !1,\n iconSize: "xxxs",\n onClick: R,\n value: T,\n handleClearFn: r1,\n onChange: I,\n hideClearButton: x\n }\n ) : /* @__PURE__ */ c(s0, { children: n && T && y ? /* @__PURE__ */ c(\n A3,\n {\n place: "right-start",\n followCursor: !0,\n text: /* @__PURE__ */ c(ZW, { children: T == null ? void 0 : T.map((K) => /* @__PURE__ */ c(jW, { children: K })) }),\n children: /* @__PURE__ */ c(s0, { children: /* @__PURE__ */ c(\n Vi,\n {\n ...e,\n placeholder: a || "Select",\n iconRight: O || (X ? "ChevronUp" : "ChevronDown"),\n readOnly: !0,\n label: s,\n labelType: l,\n isRequired: f || !1,\n iconSize: "xxxs",\n onClick: R,\n onIconRightClick: R,\n value: T,\n handleClearFn: r1,\n onChange: () => null,\n hideClearButton: g\n }\n ) })\n }\n ) : /* @__PURE__ */ c(\n Vi,\n {\n ...e,\n placeholder: a || "Select",\n iconRight: O || (X ? "ChevronUp" : "ChevronDown"),\n readOnly: !0,\n label: s,\n labelType: l,\n isRequired: f || !1,\n iconSize: "xxxs",\n onClick: R,\n onIconRightClick: R,\n value: T,\n handleClearFn: r1,\n onChange: () => null,\n hideClearButton: g\n }\n ) }) })\n }\n ) });\n}, zn = [\n {\n value: 0,\n label: "January"\n },\n {\n value: 1,\n label: "February"\n },\n {\n value: 2,\n label: "March"\n },\n {\n value: 3,\n label: "April"\n },\n {\n value: 4,\n label: "May"\n },\n {\n value: 5,\n label: "June"\n },\n {\n value: 6,\n label: "July"\n },\n {\n value: 7,\n label: "August"\n },\n {\n value: 8,\n label: "September"\n },\n {\n value: 9,\n label: "October"\n },\n {\n value: 10,\n label: "November"\n },\n {\n value: 11,\n label: "December"\n }\n];\nfunction Ip(e) {\n const { date: t, decreaseMonth: o, increaseMonth: n, changeMonth: r, changeYear: i } = e, l = ((M, u, A) => {\n var z, f;\n return (f = (z = new Array(u - M)) == null ? void 0 : z.fill({ ...A, ...M, ...u })) == null ? void 0 : f.map((O, h) => h + M);\n })(1900, L0(/* @__PURE__ */ new Date()) + 100, 1);\n let p = [];\n l.map((M, u) => {\n p.push({ value: u, label: M });\n });\n const d = () => {\n let M = [], u = m7[g2(t)];\n return zn == null || zn.map((A) => {\n A.label == u && M.push(A);\n }), M;\n }, b = () => {\n let M = [], u = L0(t);\n return p == null || p.map((A) => {\n A.label == u && M.push(A);\n }), M;\n };\n return /* @__PURE__ */ e1(HW, { children: [\n /* @__PURE__ */ c(PW, { children: /* @__PURE__ */ e1(so, { columns: 12, $justifyContent: "space-between", children: [\n /* @__PURE__ */ c(f4, { width: 7, children: /* @__PURE__ */ c(\n tt,\n {\n data: zn,\n selectedOptions: (M) => {\n if (M.label) {\n let u = m7.indexOf(M.label);\n r(u);\n }\n },\n defaultValues: d(),\n autoSearch: !0,\n dropdownBodyWidth: "115px",\n showSelectedList: !0\n }\n ) }),\n /* @__PURE__ */ c(f4, { width: 5, children: /* @__PURE__ */ c(\n tt,\n {\n data: p,\n selectedOptions: (M) => {\n let u = M == null ? void 0 : M.label;\n M.label && i(u);\n },\n defaultValues: b(),\n autoSearch: !0,\n dropdownBodyWidth: "104px",\n showSelectedList: !0\n }\n ) })\n ] }) }),\n /* @__PURE__ */ e1(VW, { children: [\n /* @__PURE__ */ c(w7, { onClick: o, children: /* @__PURE__ */ c(Z1, { name: "ChevronLeft", size: "xxxs" }) }),\n /* @__PURE__ */ c(w7, { onClick: n, children: /* @__PURE__ */ c(Z1, { name: "ChevronRight", size: "xxxs" }) })\n ] })\n ] });\n}\nconst q2 = (e) => {\n let t = e == null ? void 0 : e.replace(/#/, "");\n (t == null ? void 0 : t.length) === 3 && (t = t[0] + t[0] + t[1] + t[1] + t[2] + t[2]);\n const o = parseInt(t, 16), n = o >> 16 & 255, r = o >> 8 & 255, i = o & 255;\n return `${n},${r},${i}`;\n};\n(styled_components__WEBPACK_IMPORTED_MODULE_1___default().div)`\n position: absolute;\n top: 20px;\n transform: translateX(-50%);\n width: 400px;\n`;\nconst jB = styled_components__WEBPACK_IMPORTED_MODULE_1___default().header(\n ({ theme: { colors: e } }) => (0,styled_components__WEBPACK_IMPORTED_MODULE_1__.css)`\n div {\n right: 26px;\n top: 50%;\n }\n svg {\n background: rgba(\n ${q2(e.backgrounds.bgTransparencyPrimary)},\n 0.1\n );\n border-radius: 8px;\n width: 6px !important;\n height: 6px !important;\n padding: 3px;\n color: white;\n transition: 0.3s all ease-in-out;\n &:hover {\n background: ${e.backgrounds.bgHoverSecondary};\n transition: 0.3s all ease-in-out;\n }\n }\n `\n);\nstyled_components__WEBPACK_IMPORTED_MODULE_1___default().header(\n ({ theme: { spacings: e } }) => (0,styled_components__WEBPACK_IMPORTED_MODULE_1__.css)`\n display: flex;\n justify-content: space-between;\n align-items: center;\n padding-bottom: ${e.sp16};\n user-select: none;\n `\n);\nstyled_components__WEBPACK_IMPORTED_MODULE_1___default().header(\n ({ theme: {} }) => (0,styled_components__WEBPACK_IMPORTED_MODULE_1__.css)`\n display: flex;\n `\n);\nstyled_components__WEBPACK_IMPORTED_MODULE_1___default().div(\n ({ theme: { spacings: e, borderRadius: t, transitions: o, colors: n } }) => (0,styled_components__WEBPACK_IMPORTED_MODULE_1__.css)`\n width: ${e.sp12};\n height: ${e.sp12};\n padding: 6px 10px;\n border-radius: ${t.base};\n transition: ${o.base};\n cursor: pointer;\n\n &:hover {\n background-color: ${n.backgrounds.whiteSmoke};\n }\n\n .icon-system {\n color: ${n.black};\n }\n `\n);\nstyled_components__WEBPACK_IMPORTED_MODULE_1___default().p(\n ({ theme: e }) => (0,styled_components__WEBPACK_IMPORTED_MODULE_1__.css)`\n font-family: ${e.fontFamily.base};\n font-weight: ${e.fontWeight.regular};\n font-size: ${e.typography.t16};\n color: ${e.colors.black};\n margin: 0;\n display: flex;\n justify-content: center;\n align-items: center;\n width: 52%;\n `\n);\nstyled_components__WEBPACK_IMPORTED_MODULE_1___default().div(\n ({ theme: e }) => (0,styled_components__WEBPACK_IMPORTED_MODULE_1__.css)`\n flex-basis: 51%;\n input {\n font-family: ${e.fontFamily.base};\n font-weight: ${e.fontWeight.regular};\n font-size: ${e.typography.t16};\n color: ${e.colors.black};\n margin: 0;\n height: 2rem;\n position: absolute;\n top: -16px;\n border: none;\n padding-right: 0;\n padding-left: 10px;\n }\n .icon-system {\n svg {\n width: 1.5rem;\n }\n }\n ${X5} {\n top: 16px;\n left: -10px;\n }\n `\n);\nstyled_components__WEBPACK_IMPORTED_MODULE_1___default()(Y2)`\n cursor: pointer;\n /* position: relative; */\n /* z-index: 99; */\n /* z-index: ${(e) => e.iconRight === "ChevronDown" ? 2 : 1}; */\n + * {\n .icon-system {\n pointer-events: none;\n }\n }\n`;\n(styled_components__WEBPACK_IMPORTED_MODULE_1___default().div)`\n position: absolute;\n top: ${(e) => e.isLabel ? "28px" : e.checkRequired ? "5px" : "28px"};\n right: 35px;\n cursor: pointer;\n background: #ffffff;\n z-index: 2;\n`;\nconst KB = styled_components__WEBPACK_IMPORTED_MODULE_1___default().div(\n ({ theme: e, isDisabled: t }) => (0,styled_components__WEBPACK_IMPORTED_MODULE_1__.css)`\n position: relative;\n .align-center,\n .align-left,\n .align-right {\n top: 100%;\n height: fit-content;\n }\n .react-datepicker__day-name {\n width: 32px !important;\n height: 32px !important;\n /* padding: 10px; */\n }\n .react-datepicker__day-name {\n width: 32px !important;\n height: 32px !important;\n /* padding: 10px; */\n }\n .react-datepicker__day {\n width: 32px !important;\n height: 32px !important;\n font-size: ${e.typography.t12} !important;\n line-height: ${e.lineHeight.lh20};\n }\n .react-datepicker-popper {\n width: min-content;\n }\n .react-datepicker {\n font-family: ${e.fontFamily.base};\n font-size: ${e.typography.t12};\n background-color: ${e.colors.backgrounds.bgPrimary};\n color: ${e.colors.blue};\n border: none;\n border-radius: ${e.borderRadius.base};\n box-shadow: ${e.shadows.sm};\n display: inline-block;\n position: relative;\n\n .react-datepicker__aria-live {\n display: none;\n }\n &__header {\n text-align: center;\n background-color: ${e.colors.backgrounds.bgPrimary};\n border-bottom: none;\n border-top-left-radius: ${e.borderRadius.base};\n /* padding: 0; */\n position: relative;\n padding: ${e.spacings.sp16} ${e.spacings.sp16} 0;\n\n &:not(.react-datepicker__header--has-time-select) {\n border-top-right-radius: ${e.borderRadius.base};\n }\n }\n\n &__day,\n &__day-name {\n display: inline-block;\n margin: 2px;\n }\n\n &__day {\n outline: none;\n display: inline-flex;\n align-items: center;\n justify-content: center;\n width: ${e.itemSize.lg};\n height: ${e.itemSize.lg};\n font-size: ${e.typography.t16};\n font-weight: ${e.fontWeight.regular};\n color: ${e.colors.textIcon.textSecondary};\n border-radius: ${e.borderRadius.base};\n transition: ${e.transitions.base};\n\n &--keyboard-selected,\n &--selected {\n background-color: ${e.colors.backgrounds.bgTertiary} !important;\n color: ${e.colors.textIcon.textTertiary} !important;\n }\n\n &:hover {\n transition: ${e.transitions.base};\n background-color: ${e.colors.backgrounds.bgHoverPrimary};\n color: ${e.colors.textIcon.textSecondary};\n }\n\n &-name {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n width: ${e.itemSize.lg};\n height: ${e.itemSize.lg};\n color: ${e.colors.textIcon.textLowemphasis};\n }\n }\n\n &__triangle {\n display: none;\n }\n }\n .react-datepicker__day--in-range {\n :hover {\n background: none;\n }\n }\n .react-datepicker__day--selected,\n .react-datepicker__day--in-selecting-range,\n .react-datepicker__day--in-range,\n .react-datepicker__month-text--selected,\n .react-datepicker__month-text--in-selecting-range,\n .react-datepicker__month-text--in-range,\n .react-datepicker__quarter-text--selected,\n .react-datepicker__quarter-text--in-selecting-range,\n .react-datepicker__quarter-text--in-range,\n .react-datepicker__year-text--selected,\n .react-datepicker__year-text--in-selecting-range,\n .react-datepicker__year-text--in-range,\n .react-datepicker__day--keyboard-selected,\n .react-datepicker__month-text--keyboard-selected,\n .react-datepicker__quarter-text--keyboard-selected,\n .react-datepicker__year-text--keyboard-selected {\n border-radius: ${e.borderRadius.base};\n background-color: ${e.colors.backgrounds.bgHoverPrimary};\n color: ${e.colors.textIcon.textSecondary};\n\n /* &:hover {\n background-color: ${e.colors.blue};\n } */\n }\n\n .react-datepicker-popper[data-placement^=\'bottom\']\n .react-datepicker__triangle,\n .react-datepicker-popper[data-placement^=\'top\'] .react-datepicker__triangle,\n .react-datepicker__year-read-view--down-arrow,\n .react-datepicker__month-read-view--down-arrow,\n .react-datepicker__month-year-read-view--down-arrow {\n margin-left: -8px;\n position: absolute;\n }\n\n .react-datepicker-popper[data-placement^=\'bottom\']\n .react-datepicker__triangle,\n .react-datepicker-popper[data-placement^=\'top\'] .react-datepicker__triangle,\n .react-datepicker__year-read-view--down-arrow,\n .react-datepicker__month-read-view--down-arrow,\n .react-datepicker__month-year-read-view--down-arrow,\n .react-datepicker-popper[data-placement^=\'bottom\']\n .react-datepicker__triangle::before,\n .react-datepicker-popper[data-placement^=\'top\']\n .react-datepicker__triangle::before,\n .react-datepicker__year-read-view--down-arrow::before,\n .react-datepicker__month-read-view--down-arrow::before,\n .react-datepicker__month-year-read-view--down-arrow::before {\n box-sizing: content-box;\n position: absolute;\n border: 8px solid transparent;\n height: 0;\n width: 1px;\n }\n\n .react-datepicker-popper[data-placement^=\'bottom\']\n .react-datepicker__triangle::before,\n .react-datepicker-popper[data-placement^=\'top\']\n .react-datepicker__triangle::before,\n .react-datepicker__year-read-view--down-arrow::before,\n .react-datepicker__month-read-view--down-arrow::before,\n .react-datepicker__month-year-read-view--down-arrow::before {\n content: \'\';\n z-index: -1;\n border-width: 8px;\n left: -8px;\n border-bottom-color: ${e.colors.black};\n }\n\n .react-datepicker-popper[data-placement^=\'bottom\']\n .react-datepicker__triangle {\n top: 0;\n margin-top: -8px;\n }\n\n .react-datepicker-popper[data-placement^=\'bottom\']\n .react-datepicker__triangle,\n .react-datepicker-popper[data-placement^=\'bottom\']\n .react-datepicker__triangle::before {\n border-top: none;\n border-bottom-color: ${e.colors.white};\n }\n\n .react-datepicker-popper[data-placement^=\'bottom\']\n .react-datepicker__triangle::before {\n top: -1px;\n border-bottom-color: ${e.colors.white};\n }\n\n .react-datepicker-popper[data-placement^=\'top\'] .react-datepicker__triangle,\n .react-datepicker__year-read-view--down-arrow,\n .react-datepicker__month-read-view--down-arrow,\n .react-datepicker__month-year-read-view--down-arrow {\n bottom: 0;\n margin-bottom: -8px;\n }\n\n .react-datepicker-popper[data-placement^=\'top\'] .react-datepicker__triangle,\n .react-datepicker__year-read-view--down-arrow,\n .react-datepicker__month-read-view--down-arrow,\n .react-datepicker__month-year-read-view--down-arrow,\n .react-datepicker-popper[data-placement^=\'top\']\n .react-datepicker__triangle::before,\n .react-datepicker__year-read-view--down-arrow::before,\n .react-datepicker__month-read-view--down-arrow::before,\n .react-datepicker__month-year-read-view--down-arrow::before {\n border-bottom: none;\n border-top-color: ${e.colors.white};\n }\n\n .react-datepicker-popper[data-placement^=\'top\']\n .react-datepicker__triangle::before,\n .react-datepicker__year-read-view--down-arrow::before,\n .react-datepicker__month-read-view--down-arrow::before,\n .react-datepicker__month-year-read-view--down-arrow::before {\n bottom: -1px;\n border-top-color: ${e.colors.white};\n }\n\n .react-datepicker-wrapper {\n display: flex;\n padding: 0;\n border: 0;\n }\n\n .react-datepicker--time-only .react-datepicker__triangle {\n left: 35px;\n }\n\n .react-datepicker--time-only .react-datepicker__time-container {\n border-left: 0;\n }\n\n .react-datepicker__year-option:first-of-type,\n .react-datepicker__month-option:first-of-type,\n .react-datepicker__month-year-option:first-of-type {\n border-top-left-radius: ${e.borderRadius.base};\n border-top-right-radius: ${e.borderRadius.base};\n }\n\n .react-datepicker--time-only .react-datepicker__time,\n .react-datepicker--time-only .react-datepicker__time-box {\n border-bottom-left-radius: ${e.borderRadius.base};\n border-bottom-right-radius: ${e.borderRadius.base};\n }\n\n .react-datepicker__day--today,\n .react-datepicker__month-text--today,\n .react-datepicker__quarter-text--today,\n .react-datepicker__year-text--today {\n font-weight: ${e.fontWeight.regular};\n }\n\n .react-datepicker--time-only .react-datepicker__triangle {\n left: 35px;\n }\n\n .react-datepicker--time-only .react-datepicker__time-container {\n border-left: 0;\n }\n\n .react-datepicker__triangle {\n position: absolute;\n left: 50px;\n }\n\n .react-datepicker-popper {\n z-index: 10;\n }\n\n /* .react-datepicker-popper[data-placement^=\'bottom\'] {\n margin-top: 10px;\n } */\n\n .react-datepicker-popper[data-placement=\'bottom-end\']\n .react-datepicker__triangle,\n .react-datepicker-popper[data-placement=\'top-end\']\n .react-datepicker__triangle {\n left: auto;\n right: 50px;\n }\n\n .react-datepicker-popper[data-placement^=\'top\'] {\n margin-bottom: 10px;\n }\n\n .react-datepicker-popper[data-placement^=\'right\'] {\n margin-left: 8px;\n }\n\n .react-datepicker-popper[data-placement^=\'right\']\n .react-datepicker__triangle {\n left: auto;\n right: 42px;\n }\n\n .react-datepicker-popper[data-placement^=\'left\'] {\n margin-right: 8px;\n }\n\n .react-datepicker-popper[data-placement^=\'left\']\n .react-datepicker__triangle {\n left: 42px;\n right: auto;\n }\n\n .react-datepicker__header--time {\n padding-bottom: 8px;\n padding-left: 5px;\n padding-right: 5px;\n }\n\n .react-datepicker__header--time:not(.react-datepicker__header--time--only) {\n border-top-left-radius: 0;\n }\n\n .react-datepicker__year-dropdown-container--select,\n .react-datepicker__month-dropdown-container--select,\n .react-datepicker__month-year-dropdown-container--select,\n .react-datepicker__year-dropdown-container--scroll,\n .react-datepicker__month-dropdown-container--scroll,\n .react-datepicker__month-year-dropdown-container--scroll {\n display: inline-block;\n margin: 0 2px;\n }\n\n .react-datepicker__current-month,\n .react-datepicker-time__header,\n .react-datepicker-year-header {\n margin-top: 0;\n color: ${e.colors.black};\n font-weight: ${e.fontWeight.bold};\n font-size: ${e.typography.t16};\n }\n\n .react-datepicker-time__header {\n text-overflow: ellipsis;\n white-space: nowrap;\n overflow: hidden;\n }\n\n .react-datepicker__navigation {\n background: none;\n line-height: 1.7rem;\n text-align: center;\n cursor: pointer;\n position: absolute;\n top: 10px;\n padding: 0;\n border: 0.45rem solid transparent;\n z-index: 1;\n height: 10px;\n width: 10px;\n text-indent: -999em;\n overflow: hidden;\n }\n\n .react-datepicker__navigation--previous {\n left: 10px;\n border-right-color: ${e.colors.black};\n }\n\n .react-datepicker__navigation--previous:hover {\n border-right-color: ${e.colors.black};\n }\n\n .react-datepicker__navigation--previous--disabled,\n .react-datepicker__navigation--previous--disabled:hover {\n border-right-color: ${e.colors.darkGray};\n cursor: default;\n }\n\n .react-datepicker__navigation--next {\n right: 10px;\n border-left-color: ${e.colors.black};\n }\n\n .react-datepicker__navigation--next--with-time:not(\n .react-datepicker__navigation--next--with-today-button\n ) {\n right: 95px;\n }\n\n .react-datepicker__navigation--next:hover {\n border-left-color: ${e.colors.black};\n }\n\n .react-datepicker__navigation--next--disabled,\n .react-datepicker__navigation--next--disabled:hover {\n border-left-color: ${e.colors.darkGray};\n cursor: default;\n }\n\n .react-datepicker__navigation--years {\n position: relative;\n top: 0;\n display: block;\n margin-left: auto;\n margin-right: auto;\n }\n\n .react-datepicker__navigation--years-previous {\n top: 4px;\n border-top-color: ${e.colors.black};\n }\n\n .react-datepicker__navigation--years-previous:hover {\n border-top-color: ${e.colors.black};\n }\n\n .react-datepicker__navigation--years-upcoming {\n top: -4px;\n border-bottom-color: ${e.colors.black};\n }\n\n .react-datepicker__navigation--years-upcoming:hover {\n border-bottom-color: ${e.colors.black};\n }\n\n .react-datepicker__month-container {\n float: left;\n }\n\n .react-datepicker__year {\n margin: 0.4rem;\n text-align: center;\n }\n\n .react-datepicker__year-wrapper {\n display: flex;\n flex-wrap: wrap;\n max-width: 180px;\n }\n\n .react-datepicker__year .react-datepicker__year-text {\n display: inline-block;\n width: 4rem;\n margin: 2px;\n }\n\n .react-datepicker__month {\n padding-bottom: 1rem;\n text-align: center;\n }\n\n .react-datepicker__month .react-datepicker__month-text,\n .react-datepicker__month .react-datepicker__quarter-text {\n display: inline-block;\n width: 4rem;\n margin: 2px;\n }\n\n .react-datepicker__input-time-container {\n clear: both;\n width: 100%;\n float: left;\n margin: 5px 0 10px 15px;\n text-align: left;\n }\n\n .react-datepicker__input-time-container .react-datepicker-time__caption {\n display: inline-block;\n }\n\n .react-datepicker__input-time-container\n .react-datepicker-time__input-container {\n display: inline-block;\n }\n\n .react-datepicker__input-time-container\n .react-datepicker-time__input-container\n .react-datepicker-time__input {\n display: inline-block;\n margin-left: 10px;\n }\n\n .react-datepicker__input-time-container\n .react-datepicker-time__input-container\n .react-datepicker-time__input\n input {\n width: 85px;\n }\n\n .react-datepicker__input-time-container\n .react-datepicker-time__input-container\n .react-datepicker-time__input\n input[type=\'time\']::-webkit-inner-spin-button,\n .react-datepicker__input-time-container\n .react-datepicker-time__input-container\n .react-datepicker-time__input\n input[type=\'time\']::-webkit-outer-spin-button {\n -webkit-appearance: none;\n margin: 0;\n }\n\n .react-datepicker__input-time-container\n .react-datepicker-time__input-container\n .react-datepicker-time__input\n input[type=\'time\'] {\n -moz-appearance: textfield;\n }\n\n .react-datepicker__input-time-container\n .react-datepicker-time__input-container\n .react-datepicker-time__delimiter {\n margin-left: 5px;\n display: inline-block;\n }\n\n .react-datepicker__time-container {\n float: right;\n border-left: none;\n width: 85px;\n }\n\n .react-datepicker__time-container--with-today-button {\n display: inline;\n border: 1px solid ${e.colors.black};\n border-radius: 0.3rem;\n position: absolute;\n right: -72px;\n top: 0;\n }\n\n .react-datepicker__time-container .react-datepicker__time {\n position: relative;\n background: ${e.colors.white};\n border-bottom-right-radius: ${e.borderRadius.base};\n }\n\n .react-datepicker__time-container\n .react-datepicker__time\n .react-datepicker__time-box {\n width: 85px;\n overflow-x: hidden;\n margin: 0 auto;\n text-align: center;\n border-bottom-right-radius: ${e.borderRadius.base};\n }\n\n .react-datepicker__time-container\n .react-datepicker__time\n .react-datepicker__time-box\n ul.react-datepicker__time-list {\n list-style: none;\n margin: 0;\n height: calc(195px + (1.7rem / 2));\n overflow-y: scroll;\n padding-right: 0;\n padding-left: 0;\n width: 100%;\n box-sizing: content-box;\n }\n\n .react-datepicker__time-container\n .react-datepicker__time\n .react-datepicker__time-box\n ul.react-datepicker__time-list\n li.react-datepicker__time-list-item {\n height: 30px;\n padding: 5px 10px;\n white-space: nowrap;\n }\n\n .react-datepicker__time-container\n .react-datepicker__time\n .react-datepicker__time-box\n ul.react-datepicker__time-list\n li.react-datepicker__time-list-item:hover {\n cursor: pointer;\n background-color: ${e.colors.white};\n }\n\n .react-datepicker__time-container\n .react-datepicker__time\n .react-datepicker__time-box\n ul.react-datepicker__time-list\n li.react-datepicker__time-list-item--selected {\n background-color: ${e.colors.blue};\n color: ${e.colors.white};\n font-weight: bold;\n }\n\n .react-datepicker__time-container\n .react-datepicker__time\n .react-datepicker__time-box\n ul.react-datepicker__time-list\n li.react-datepicker__time-list-item--selected:hover {\n background-color: ${e.colors.blue};\n }\n\n .react-datepicker__time-container\n .react-datepicker__time\n .react-datepicker__time-box\n ul.react-datepicker__time-list\n li.react-datepicker__time-list-item--disabled {\n color: ${e.colors.darkGray};\n }\n\n .react-datepicker__week-number {\n color: ${e.colors.darkGray};\n display: inline-block;\n width: 1.7rem;\n line-height: 1.7rem;\n text-align: center;\n margin: 0.166rem;\n }\n\n .react-datepicker__week-number.react-datepicker__week-number--clickable {\n cursor: pointer;\n }\n\n .react-datepicker__week-number.react-datepicker__week-number--clickable:hover {\n border-radius: ${e.borderRadius.base};\n background-color: ${e.colors.white};\n }\n\n .react-datepicker__day-names,\n .react-datepicker__week {\n white-space: nowrap;\n user-select: none;\n }\n\n .react-datepicker__time-name {\n color: ${e.colors.black};\n display: inline-block;\n width: 1.7rem;\n line-height: 1.7rem;\n text-align: center;\n margin: 0.166rem;\n }\n\n .react-datepicker__month--selected,\n .react-datepicker__month--in-selecting-range,\n .react-datepicker__month--in-range,\n .react-datepicker__quarter--selected,\n .react-datepicker__quarter--in-selecting-range,\n .react-datepicker__quarter--in-range {\n border-radius: ${e.borderRadius.base};\n background-color: ${e.colors.blue};\n color: ${e.colors.white};\n }\n\n .react-datepicker__month--selected:hover,\n .react-datepicker__month--in-selecting-range:hover,\n .react-datepicker__month--in-range:hover,\n .react-datepicker__quarter--selected:hover,\n .react-datepicker__quarter--in-selecting-range:hover,\n .react-datepicker__quarter--in-range:hover {\n background-color: ${e.colors.scampi};\n }\n\n .react-datepicker__month--disabled,\n .react-datepicker__quarter--disabled {\n color: ${e.colors.darkGray};\n pointer-events: none;\n }\n\n .react-datepicker__month--disabled:hover,\n .react-datepicker__quarter--disabled:hover {\n cursor: default;\n background-color: transparent;\n }\n\n .react-datepicker__day,\n .react-datepicker__month-text,\n .react-datepicker__quarter-text,\n .react-datepicker__year-text {\n cursor: pointer;\n }\n\n .react-datepicker__month-text:hover,\n .react-datepicker__quarter-text:hover,\n .react-datepicker__year-text:hover {\n border-radius: ${e.borderRadius.base};\n background-color: ${e.colors.white};\n }\n\n .react-datepicker__day--highlighted,\n .react-datepicker__month-text--highlighted,\n .react-datepicker__quarter-text--highlighted,\n .react-datepicker__year-text--highlighted {\n border-radius: ${e.borderRadius.base};\n background-color: ${e.colors.success};\n color: ${e.colors.white};\n }\n\n .react-datepicker__day--highlighted:hover,\n .react-datepicker__month-text--highlighted:hover,\n .react-datepicker__quarter-text--highlighted:hover,\n .react-datepicker__year-text--highlighted:hover {\n background-color: ${e.colors.success};\n }\n\n .react-datepicker__day--highlighted-custom-1,\n .react-datepicker__month-text--highlighted-custom-1,\n .react-datepicker__quarter-text--highlighted-custom-1,\n .react-datepicker__year-text--highlighted-custom-1 {\n color: ${e.colors.pink};\n }\n\n .react-datepicker__day--highlighted-custom-2,\n .react-datepicker__month-text--highlighted-custom-2,\n .react-datepicker__quarter-text--highlighted-custom-2,\n .react-datepicker__year-text--highlighted-custom-2 {\n color: ${e.colors.green};\n }\n\n .react-datepicker__day--in-selecting-range,\n .react-datepicker__month-text--in-selecting-range,\n .react-datepicker__quarter-text--in-selecting-range,\n .react-datepicker__year-text--in-selecting-range {\n background-color: ${`rgba( ${e.colors.blue}, 0.5)`};\n }\n\n .react-datepicker__month--selecting-range .react-datepicker__day--in-range,\n .react-datepicker__month--selecting-range\n .react-datepicker__month-text--in-range,\n .react-datepicker__month--selecting-range\n .react-datepicker__quarter-text--in-range,\n .react-datepicker__month--selecting-range\n .react-datepicker__year-text--in-range {\n background-color: ${e.colors.backgrounds.bgHoverPrimary};\n color: ${e.colors.black};\n }\n\n .react-datepicker__day--disabled,\n .react-datepicker__month-text--disabled,\n .react-datepicker__quarter-text--disabled,\n .react-datepicker__year-text--disabled {\n cursor: default;\n color: ${e.colors.darkGray};\n }\n\n .react-datepicker__day--disabled:hover,\n .react-datepicker__month-text--disabled:hover,\n .react-datepicker__quarter-text--disabled:hover,\n .react-datepicker__year-text--disabled:hover {\n background-color: transparent;\n }\n\n .react-datepicker__quarter-text.react-datepicker__month--selected:hover,\n .react-datepicker__quarter-text.react-datepicker__month--in-range:hover,\n .react-datepicker__quarter-text.react-datepicker__quarter--selected:hover,\n .react-datepicker__quarter-text.react-datepicker__quarter--in-range:hover {\n background-color: ${e.colors.blue};\n }\n\n .react-datepicker__month-text:hover,\n .react-datepicker__quarter-text:hover {\n background-color: ${e.colors.white};\n }\n\n .react-datepicker__input-container {\n position: relative;\n display: inline-block;\n width: 100%;\n .input-wrapper {\n /* background-color: ${e.colors.white}; */\n input {\n /* background-color: transparent; */\n }\n }\n }\n\n .react-datepicker__year-read-view,\n .react-datepicker__month-read-view,\n .react-datepicker__month-year-read-view {\n border: 1px solid transparent;\n border-radius: ${e.borderRadius.base};\n }\n\n .react-datepicker__year-read-view:hover,\n .react-datepicker__month-read-view:hover,\n .react-datepicker__month-year-read-view:hover {\n cursor: pointer;\n }\n\n .react-datepicker__year-read-view:hover\n .react-datepicker__year-read-view--down-arrow,\n .react-datepicker__year-read-view:hover\n .react-datepicker__month-read-view--down-arrow,\n .react-datepicker__month-read-view:hover\n .react-datepicker__year-read-view--down-arrow,\n .react-datepicker__month-read-view:hover\n .react-datepicker__month-read-view--down-arrow,\n .react-datepicker__month-year-read-view:hover\n .react-datepicker__year-read-view--down-arrow,\n .react-datepicker__month-year-read-view:hover\n .react-datepicker__month-read-view--down-arrow {\n border-top-color: transparent;\n }\n\n .react-datepicker__year-read-view--down-arrow,\n .react-datepicker__month-read-view--down-arrow,\n .react-datepicker__month-year-read-view--down-arrow {\n border-top-color: ${e.colors.black};\n float: right;\n margin-left: 20px;\n top: 8px;\n position: relative;\n border-width: 0.45rem;\n }\n\n .react-datepicker__year-dropdown,\n .react-datepicker__month-dropdown,\n .react-datepicker__month-year-dropdown {\n background-color: ${e.colors.white};\n position: absolute;\n width: 50%;\n left: 25%;\n top: 30px;\n z-index: 1;\n text-align: center;\n border-radius: ${e.borderRadius.base};\n border: 1px solid ${e.colors.black};\n }\n\n .react-datepicker__year-dropdown:hover,\n .react-datepicker__month-dropdown:hover,\n .react-datepicker__month-year-dropdown:hover {\n cursor: pointer;\n }\n\n .react-datepicker__year-dropdown--scrollable,\n .react-datepicker__month-dropdown--scrollable,\n .react-datepicker__month-year-dropdown--scrollable {\n height: 150px;\n overflow-y: scroll;\n }\n\n .react-datepicker__year-option,\n .react-datepicker__month-option,\n .react-datepicker__month-year-option {\n line-height: 20px;\n width: 100%;\n display: block;\n margin-left: auto;\n margin-right: auto;\n }\n\n .react-datepicker__year-option:last-of-type,\n .react-datepicker__month-option:last-of-type,\n .react-datepicker__month-year-option:last-of-type {\n -webkit-user-select: none;\n -moz-user-select: none;\n -ms-user-select: none;\n user-select: none;\n border-bottom-left-radius: ${e.borderRadius.base};\n border-bottom-right-radius: ${e.borderRadius.base};\n }\n\n .react-datepicker__year-option:hover,\n .react-datepicker__month-option:hover,\n .react-datepicker__month-year-option:hover {\n background-color: ${e.colors.black};\n }\n\n .react-datepicker__year-option:hover\n .react-datepicker__navigation--years-upcoming,\n .react-datepicker__month-option:hover\n .react-datepicker__navigation--years-upcoming,\n .react-datepicker__month-year-option:hover\n .react-datepicker__navigation--years-upcoming {\n border-bottom-color: ${e.colors.black};\n }\n\n .react-datepicker__year-option:hover\n .react-datepicker__navigation--years-previous,\n .react-datepicker__month-option:hover\n .react-datepicker__navigation--years-previous,\n .react-datepicker__month-year-option:hover\n .react-datepicker__navigation--years-previous {\n border-top-color: ${e.colors.black};\n }\n\n .react-datepicker__year-option--selected,\n .react-datepicker__month-option--selected,\n .react-datepicker__month-year-option--selected {\n position: absolute;\n left: 15px;\n }\n\n .react-datepicker__close-icon {\n cursor: pointer;\n background-color: transparent;\n border: 0;\n outline: 0;\n padding: 0 6px 0 0;\n position: absolute;\n top: 0;\n right: 0;\n height: 100%;\n display: table-cell;\n vertical-align: middle;\n }\n\n .react-datepicker__today-button {\n background: ${e.colors.white};\n border-top: 1px solid ${e.colors.black};\n cursor: pointer;\n text-align: center;\n font-weight: bold;\n padding: 5px 0;\n clear: left;\n }\n\n .react-datepicker__portal {\n position: fixed;\n width: 100vw;\n height: 100vh;\n background-color: ${`rgba(${e.colors.black}, 0.8)`};\n left: 0;\n top: 0;\n justify-content: center;\n align-items: center;\n display: flex;\n z-index: 2147483647;\n }\n\n .react-datepicker__portal .react-datepicker__day-name,\n .react-datepicker__portal .react-datepicker__day,\n .react-datepicker__portal .react-datepicker__time-name {\n width: 3rem;\n line-height: 3rem;\n }\n\n @media (max-width: 400px), (max-height: 550px) {\n .react-datepicker__portal .react-datepicker__day-name,\n .react-datepicker__portal .react-datepicker__day,\n .react-datepicker__portal .react-datepicker__time-name {\n width: 2rem;\n line-height: 2rem;\n }\n }\n\n .react-datepicker__portal .react-datepicker__current-month,\n .react-datepicker__portal .react-datepicker-time__header {\n font-size: ${e.typography.t20};\n }\n\n .react-datepicker__portal .react-datepicker__navigation {\n border: 0.81rem solid transparent;\n }\n\n .react-datepicker__portal .react-datepicker__navigation--previous {\n border-right-color: ${e.colors.black};\n }\n\n .react-datepicker__portal .react-datepicker__navigation--previous:hover {\n border-right-color: unset;\n }\n\n .react-datepicker__portal .react-datepicker__navigation--previous--disabled,\n .react-datepicker__portal\n .react-datepicker__navigation--previous--disabled:hover {\n border-right-color: ${e.colors.grey};\n cursor: default;\n }\n\n .react-datepicker__portal .react-datepicker__navigation--next {\n border-left-color: ${e.colors.black};\n }\n\n .react-datepicker__portal .react-datepicker__navigation--next:hover {\n border-left-color: unset;\n }\n\n .react-datepicker__portal .react-datepicker__navigation--next--disabled,\n .react-datepicker__portal\n .react-datepicker__navigation--next--disabled:hover {\n border-left-color: ${e.colors.grey};\n cursor: default;\n }\n\n .react-datepicker__day--outside-month {\n color: ${e.colors.textIcon.textDisabledOnbg};\n }\n\n ${t && (0,styled_components__WEBPACK_IMPORTED_MODULE_1__.css)`\n ${V5} {\n cursor: default;\n color: ${e.colors.textIcon.textDisabledNobg};\n background-color: ${e.colors.backgrounds.bgDisabledPrimary};\n }\n `}\n `\n);\nfunction n9(e) {\n const {\n label: t,\n getValue: o,\n isDisabled: n,\n placeholder: r,\n isRequired: i,\n isError: a,\n disableClear: s,\n handleClearButton: l,\n dateFormat: p = "dd/MM/yyyy",\n popperPlacement: d = "top-start",\n minDate: b,\n maxDate: M,\n defaultValue: u,\n ...A\n } = e, [z, f] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(null), [O, h] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(!1), g = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)(\n (H) => /* @__PURE__ */ c(Ip, { ...H }),\n []\n ), v = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)(\n (H) => H.substr(0, 1),\n []\n ), L = (0,react__WEBPACK_IMPORTED_MODULE_0__.useMemo)(\n () => /* @__PURE__ */ c(\n Y2,\n {\n placeholder: r,\n iconLeft: "Calendar",\n iconRight: O ? "ChevronUp" : "ChevronDown",\n readOnly: !0,\n label: t,\n isRequired: i,\n isError: a,\n iconSize: "xxxs",\n hideClearButton: !0\n }\n ),\n [r, O, t, i, a]\n ), y = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)(\n (H) => {\n f(H), o && o(H), h(!1);\n },\n [f, o, h]\n ), B = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)(() => {\n h(!0);\n }, [h]), X = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)(() => {\n h(!1);\n }, [h]), F = (H) => {\n H.stopPropagation(), f(null);\n }, T = () => {\n if (b)\n return b;\n }, w = () => {\n if (M)\n return M;\n };\n return (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => {\n ((A == null ? void 0 : A.value) == null || (A == null ? void 0 : A.value) == "") && f(null);\n }, [A == null ? void 0 : A.value]), /* @__PURE__ */ e1(KB, { isDisabled: n, children: [\n /* @__PURE__ */ c(\n vp,\n {\n ...A,\n closeOnScroll: !0,\n renderCustomHeader: g,\n formatWeekDay: v,\n onChange: y,\n onFocus: B,\n onBlur: X,\n customInput: L,\n placeholderText: r,\n disabled: n,\n selected: z || u,\n dateFormat: p,\n popperClassName: "some-custom-class",\n popperPlacement: "bottom-start",\n popperModifiers: [\n {\n name: "offset",\n options: {\n offset: [0, 0]\n }\n },\n {\n name: "preventOverflow",\n options: {\n rootBoundary: "viewport",\n tether: !1,\n altAxis: !0\n }\n }\n ],\n popperProps: { strategy: "fixed" },\n minDate: T(),\n maxDate: w()\n }\n ),\n (z || A.value || u) && !s && /* @__PURE__ */ c(jB, { children: /* @__PURE__ */ c(\n fl,\n {\n onClick: n ? () => null : (H) => {\n l && l(), F(H), f(null);\n },\n children: /* @__PURE__ */ c(\n Z1,\n {\n name: "Cross",\n size: "xxs",\n color: n ? "#A6A6A6" : "#312783"\n }\n )\n }\n ) })\n ] });\n}\nfunction JB(e, t) {\n const {\n isDisabled: o,\n hideClearBtn: n,\n min: r,\n max: i,\n onChange: a,\n dateFormat: s = "dd/MM/yyyy",\n ...l\n } = e, [p, d] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)({\n min: r,\n max: i\n });\n (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => {\n d({ min: r, max: i });\n }, [r, i]), (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => {\n r && !p.min && p.min != null && (d({ ...p, min: r }), a({ ...p, min: r }));\n }, [r, a, p]), (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => {\n i && !p.max && p.max != null && (d({ ...p, max: i }), a({ ...p, max: i }));\n }, [i, a, p]), (0,react__WEBPACK_IMPORTED_MODULE_0__.useImperativeHandle)(t, () => ({\n handleReset(f) {\n d(f);\n }\n }));\n const b = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)(\n (f) => {\n d({ ...p, min: f }), a({ ...p, min: f });\n },\n [a, p]\n ), M = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)(\n (f) => {\n d({ ...p, max: f }), a({ ...p, max: f });\n },\n [a, p]\n ), u = {\n placeholder: "Select a date",\n startDate: p.min,\n endDate: p.max,\n isDisabled: o,\n dateFormat: s\n }, A = p.min && typeof s == "string" ? dr(new Date(p.min), s) : "", z = p.max && typeof s == "string" ? dr(new Date(p.max), s) : "";\n return /* @__PURE__ */ e1("div", { className: "date-range-container", children: [\n /* @__PURE__ */ c(Y8, { children: /* @__PURE__ */ c(\n n9,\n {\n ...u,\n label: "From",\n getValue: b,\n selected: p.min,\n maxDate: p.max || (l == null ? void 0 : l.maxToDate),\n value: A,\n selectsStart: !0,\n isRequired: !0,\n disableClear: n,\n handleClearButton: () => {\n d({\n min: null,\n max: null\n });\n }\n }\n ) }),\n /* @__PURE__ */ c(Y8, { children: /* @__PURE__ */ c(\n n9,\n {\n ...u,\n label: "To",\n getValue: M,\n selected: p.max,\n minDate: p.min,\n maxDate: l == null ? void 0 : l.maxToDate,\n isDisabled: !p.min,\n value: z,\n selectsEnd: !0,\n disableClear: n,\n handleClearButton: () => {\n d({\n min: p.min ? p.min : null,\n max: null\n });\n }\n }\n ) })\n ] });\n}\nconst Dp = (0,react__WEBPACK_IMPORTED_MODULE_0__.forwardRef)(JB);\nfunction _B(e) {\n const {\n onClearFilter: t,\n onApplyFilter: o,\n value: n,\n isDisabled: r,\n buttonText: i,\n dateFormat: a = "dd/MM/yyyy",\n ...s\n } = e, [l, p] = io(!1), d = (0,react__WEBPACK_IMPORTED_MODULE_0__.useRef)(null), [b, M] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(null), [u, A] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(!1);\n (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => {\n n && M(n);\n }, [n]);\n const z = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)(() => {\n b && (o && o(b), p());\n }, [o, p, b]), f = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)(() => {\n const g = {\n min: null,\n max: null\n };\n o && o(g), M(g), d != null && d.current && d.current.handleReset(g), t && t(), p();\n }, []);\n (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => {\n A(\n (b == null ? void 0 : b.min) !== null || (b == null ? void 0 : b.max) !== null || (n == null ? void 0 : n.min) !== null || (n == null ? void 0 : n.max) !== null\n );\n }, [n, l, b]);\n const O = (0,react__WEBPACK_IMPORTED_MODULE_0__.useMemo)(() => {\n const g = (y) => dr(new Date(y), a), v = {\n isDisabled: r,\n isActive: l,\n onClick: p\n };\n if (!n.min && !n.max)\n return /* @__PURE__ */ c(b3, { ...v, "aria-label": `${i} filter`, children: /* @__PURE__ */ e1(It, { children: [\n /* @__PURE__ */ e1(Ue, { children: [\n " ",\n i\n ] }),\n /* @__PURE__ */ c(\n Z1,\n {\n name: l ? "ChevronUpDropdown" : "ChevronDownDropdown",\n size: "xxs"\n }\n )\n ] }) });\n let L = [\n n != null && n.min ? `${g(n.min)} ` : "...",\n n != null && n.max ? g(n.max) : "..."\n ];\n return /* @__PURE__ */ c(\n b3,\n {\n ...v,\n isDisabled: r,\n $isActive: l,\n onClick: p,\n isFiltered: !!(!l && L),\n children: /* @__PURE__ */ e1(It, { children: [\n /* @__PURE__ */ c(Ue, { children: L ? /* @__PURE__ */ e1(vl, { $isActive: l, children: [\n L[0],\n /* @__PURE__ */ c(Ae, { count: 0, noDigit: !0 }),\n L[1],\n " "\n ] }) : i }),\n l && L ? /* @__PURE__ */ c(\n Z1,\n {\n name: l ? "ChevronUpDropdown" : "ChevronDownDropdown",\n size: "xxs"\n }\n ) : /* @__PURE__ */ c(d3, { onClick: f, children: /* @__PURE__ */ c(Z1, { name: "Close", color: `${v2.black}`, size: "xxs" }) })\n ] })\n }\n );\n }, [p, l, r, n, i]);\n return /* @__PURE__ */ c(\n Er,\n {\n ...s,\n button: O,\n isShowed: l,\n isFilterValueChanged: u,\n onApplyFilter: z,\n onClearFilter: f,\n handleDropdownShowed: p,\n children: /* @__PURE__ */ c(\n Dp,\n {\n ...s,\n dateFormat: a,\n ref: d,\n onChange: ({ min: g, max: v }) => {\n M({\n min: g,\n max: v\n });\n },\n min: b != null && b.min ? new Date(b.min) : null,\n max: b != null && b.max ? new Date(b.max) : null\n }\n )\n }\n );\n}\nconst $B = styled_components__WEBPACK_IMPORTED_MODULE_1___default()(F5)(\n ({ theme: { colors: e, fontWeight: t, typography: o, lineHeight: n, itemSize: r } }) => (0,styled_components__WEBPACK_IMPORTED_MODULE_1__.css)`\n display: flex;\n align-items: center;\n justify-content: space-between;\n font-size: ${o.t12};\n background: ${e.backgrounds.bgPrimary};\n border-radius: 40px;\n height: ${r.md};\n white-space: nowrap;\n min-width: min-content;\n //new\n color: ${e.textIcon.textPrimary} !important;\n box-shadow: ${$0(e.border.borderTertiary)};\n line-height: ${n.lh20};\n font-weight: ${t.regular};\n &:not(:disabled) {\n &:not(:active) {\n &:hover {\n background-color: ${e.backgrounds.bgHoverPrimary} !important;\n box-shadow: ${$0(e.border.borderTertiary)};\n }\n\n &:focus-visible {\n background: ${e.backgrounds.bgPrimary} !important;\n color: ${e.textIcon.textPrimary} !important;\n border-color: ${e.border.borderFocused} !important;\n box-shadow: ${$0(\n e.border.borderFocused\n )} !important;\n }\n }\n }\n svg {\n color: ${e.textIcon.textPrimary} !important;\n }\n &:active {\n background: ${e.backgrounds.bgPressed} !important;\n color: ${e.textIcon.textTertiary} !important;\n\n svg {\n color: ${e.buttonText.buttonTextPrimary} !important;\n /* background: ${e.backgrounds.bgTransparencyPressed} !important;\n border-radius: 8px; */\n opacity: unset;\n }\n }\n `\n);\nfunction eS(e) {\n return /* @__PURE__ */ (0,react__WEBPACK_IMPORTED_MODULE_0__.createElement)($B, { ...e, key: "isActive-" + e.$isActive });\n}\nfunction tS(e) {\n const { isDisabled: t, ...o } = e, n = { disabled: t, ...o };\n return /* @__PURE__ */ c(eS, { ...n });\n}\nfunction Gn(e) {\n const {\n isSearchable: t,\n getFilteredValue: o,\n highLightSelectedOptions: n,\n values: r,\n data: i,\n isMulti: a,\n placeholder: s,\n label: l\n } = e, [p, d] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(""), [b, M] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(i), [u, A] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(), z = Np(p, 500), [f, O] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(!1), [h, g] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(), v = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)((X) => {\n d(X), O(!!X);\n }, []);\n (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => {\n (r == null ? void 0 : r.length) == 0 && A([]);\n }, [r]);\n const L = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)(\n (X) => {\n if (a)\n if (!f)\n A(X), o && o(X);\n else {\n let F = [...X, ...u];\n F == null || F.map((T, w) => {\n T != null && T.times && F.splice(w, 1);\n }), A(X), o && o(X);\n }\n else\n A(X), o && o(X);\n },\n [u]\n ), y = () => {\n let X = i == null ? void 0 : i.filter(\n (F) => {\n var T, w, H, C, q;\n return (F == null ? void 0 : F.countryList) != null ? (w = (T = F == null ? void 0 : F.countryList) == null ? void 0 : T.countryName) == null ? void 0 : w.toLowerCase().includes(z == null ? void 0 : z.toLowerCase()) : (F == null ? void 0 : F.timeZone) != null ? (C = (H = F == null ? void 0 : F.timeZone) == null ? void 0 : H.zone) == null ? void 0 : C.toLowerCase().includes(z == null ? void 0 : z.toLowerCase()) : (q = F == null ? void 0 : F.label) == null ? void 0 : q.toLowerCase().includes(z == null ? void 0 : z.toLowerCase());\n }\n );\n M(X);\n };\n (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => {\n y();\n }, [z]);\n const B = (X, F) => {\n let T = [];\n F == null || F.filter((w) => {\n w.value != X.value && T.push(w);\n }), A(T), o && o(T), g(T);\n };\n return /* @__PURE__ */ e1(react__WEBPACK_IMPORTED_MODULE_0__.Fragment, { children: [\n t && /* @__PURE__ */ c(xp, { children: /* @__PURE__ */ c(\n G4,\n {\n label: l,\n getValue: v,\n value: p,\n placeholder: s\n }\n ) }),\n /* @__PURE__ */ c(YW, { children: n && (u == null ? void 0 : u.map((X) => /* @__PURE__ */ c(JL, { children: /* @__PURE__ */ c(tS, { children: /* @__PURE__ */ e1(It, { children: [\n /* @__PURE__ */ c(Ue, { children: X.label }),\n (X == null ? void 0 : X.label) && /* @__PURE__ */ c(\n d3,\n {\n onClick: () => B(X, u),\n children: /* @__PURE__ */ c(\n Z1,\n {\n name: "Close",\n color: `${v2.black}`,\n size: "xxs"\n }\n )\n }\n )\n ] }) }) }))) }),\n /* @__PURE__ */ c(\n dt,\n {\n ...e,\n defaultValues: r,\n selectedLists: u,\n data: b || i,\n selectedOptions: L,\n resetList: h,\n highLightSelectedOptions: n,\n maxheight: 245\n }\n )\n ] });\n}\nfunction Gi(e) {\n const {\n onApplyFilter: t,\n value: o = null,\n data: n,\n isDisabled: r,\n buttonText: i,\n onClearFilter: a,\n label: s,\n isFilterCleard: l,\n ...p\n } = e, [d, b] = io(!1), [M, u] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)([]), [A, z] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(), [f, O] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(!1), h = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)(() => {\n t && t(A), b();\n }, [t, b, M]), g = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)(() => {\n u(""), z([]), a && a(), t && e.isMulti && t(""), b();\n }, [a]);\n (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => {\n o && u(o);\n }, [o]), (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => {\n l || z([]);\n }, [l]), (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => {\n var X, F;\n let B;\n if (typeof M == "object" || typeof o == "object")\n B = !!(M && ((X = Object.keys(M)) == null ? void 0 : X.length) > 0 || o && ((F = Object.keys(o)) == null ? void 0 : F.length) > 0);\n else {\n let T = o;\n B = !!((M == null ? void 0 : M.length) > 0 || T && (T == null ? void 0 : T.length) > 0);\n }\n B !== f && O(B);\n }, [o, M, f]);\n let v = o;\n const L = (0,react__WEBPACK_IMPORTED_MODULE_0__.useMemo)(\n () => /* @__PURE__ */ c(react__WEBPACK_IMPORTED_MODULE_0__.Fragment, { children: A != null && A.length && (o != null && o.length) ? /* @__PURE__ */ c(\n b3,\n {\n isDisabled: r,\n $isActive: d,\n onClick: b,\n isFiltered: !!(!d && o),\n children: /* @__PURE__ */ e1(It, { children: [\n /* @__PURE__ */ c(Ue, { children: i }),\n /* @__PURE__ */ c(Da, { children: /* @__PURE__ */ c(Ae, { count: o == null ? void 0 : o.length }) }),\n d ? /* @__PURE__ */ c(\n Z1,\n {\n name: d ? "ChevronUpDropdown" : "ChevronDownDropdown",\n size: "xxs"\n }\n ) : /* @__PURE__ */ c(d3, { onClick: g, children: /* @__PURE__ */ c(Z1, { name: "Close", color: `${v2.black}`, size: "xxs" }) })\n ] })\n }\n ) : /* @__PURE__ */ c(\n b3,\n {\n isDisabled: r,\n $isActive: d,\n onClick: b,\n isFiltered: !!(!d && o),\n children: /* @__PURE__ */ e1(It, { children: [\n /* @__PURE__ */ c(Ue, { children: o && (v == null ? void 0 : v.label) || i }),\n o ? /* @__PURE__ */ c(d3, { onClick: g, children: /* @__PURE__ */ c(Z1, { name: "Close", color: `${v2.black}`, size: "xxs" }) }) : /* @__PURE__ */ c(\n Z1,\n {\n name: d ? "ChevronUpDropdown" : "ChevronDownDropdown",\n size: "xxs"\n }\n )\n ] })\n }\n ) }),\n [b, d, r, o, i]\n ), y = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)(\n (B) => {\n B.length ? (z(B), u(B), O(!0)) : typeof B == "object" && (z(B), u(B.label), O(!0));\n },\n [M]\n );\n return /* @__PURE__ */ c(\n Er,\n {\n ...p,\n button: L,\n isShowed: d,\n isFilterValueChanged: f,\n onApplyFilter: h,\n onClearFilter: g,\n handleDropdownShowed: b,\n children: /* @__PURE__ */ c(\n Gn,\n {\n ...p,\n data: n,\n getFilteredValue: y,\n isSearchable: !0,\n values: A,\n label: s\n }\n )\n }\n );\n}\nconst oS = ({\n filterData: e,\n handleFilterValue: t,\n filterValues: o,\n clearFilter: n\n}) => {\n function r(l) {\n return l == null ? void 0 : l.map((p) => ({\n value: p,\n label: p\n }));\n }\n const [i, a] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(!1);\n return (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => {\n JSON.stringify(o) == "{}" && a(!0);\n }, [o]), /* @__PURE__ */ c("div", { children: (() => {\n var l, p, d, b, M, u, A, z, f, O, h, g, v, L, y;\n switch (e.type) {\n case "input":\n return /* @__PURE__ */ c(\n h8,\n {\n label: e.filterLabel ? e.filterLabel : r2(e.columnId),\n buttonText: e.filterLabel ? e.filterLabel : r2(e.columnId),\n onApplyFilter: (B) => {\n t(e.columnId, B);\n },\n value: o[e.columnId] || "",\n onClearFilter: () => n(e.columnId)\n }\n );\n case "dropdown":\n return /* @__PURE__ */ c(s0, { children: /* @__PURE__ */ c(\n Gi,\n {\n buttonText: e.filterLabel ? e.filterLabel : r2(e.columnId),\n placeholder: `Search ${e.filterLabel ? e.filterLabel : r2(e.columnId)}`,\n isSearchable: !0,\n data: (l = e == null ? void 0 : e.settings) == null ? void 0 : l.options,\n onApplyFilter: (B) => {\n const X = [B].map(\n (F) => F.value\n );\n t(e.columnId, X);\n },\n value: (p = r(\n o[e.columnId]\n )) == null ? void 0 : p[0],\n onClearFilter: () => n(e.columnId),\n isFilterCleard: ((d = r(o[e.columnId])) == null ? void 0 : d.length) > 0\n }\n ) });\n case "daterange":\n return /* @__PURE__ */ c(s0, { children: /* @__PURE__ */ c(\n _B,\n {\n buttonText: e.filterLabel ? e.filterLabel : r2(e.columnId),\n onApplyFilter: (B) => {\n t(e.columnId, [B.min, B.max]);\n },\n value: o[e.columnId] ? {\n min: o[e.columnId][0],\n max: o[e.columnId][1]\n } : {\n min: null,\n max: null\n },\n onClearFilter: () => n(e.columnId)\n }\n ) });\n case "amount":\n return (\n // @ts-ignore\n /* @__PURE__ */ c(\n Yq,\n {\n buttonText: e.filterLabel ? e.filterLabel : r2(e.columnId),\n showDefaultValue: i,\n value: o[e.columnId] || [0, 0],\n onApplyFilter: (B) => {\n t(e.columnId, B), a(!1);\n },\n min: (M = (b = e == null ? void 0 : e.settings) == null ? void 0 : b.value) != null && M.min ? (A = (u = e == null ? void 0 : e.settings) == null ? void 0 : u.value) == null ? void 0 : A.min : null,\n max: (f = (z = e == null ? void 0 : e.settings) == null ? void 0 : z.value) != null && f.max ? (h = (O = e == null ? void 0 : e.settings) == null ? void 0 : O.value) == null ? void 0 : h.max : null,\n onClearFilter: () => {\n n(e.columnId), a(!0);\n }\n }\n )\n );\n case "dropdown-multi":\n return /* @__PURE__ */ c(s0, { children: /* @__PURE__ */ c(\n Gi,\n {\n buttonText: e.filterLabel ? e.filterLabel : r2(e.columnId),\n placeholder: `Search ${e.filterLabel ? e.filterLabel : r2(e.columnId)}`,\n isSearchable: !0,\n isMulti: !0,\n data: (g = e == null ? void 0 : e.settings) == null ? void 0 : g.options,\n onApplyFilter: (B) => {\n const X = B.map(\n (F) => F.value\n );\n t(e.columnId, X);\n },\n value: r(\n o[e.columnId]\n ),\n onClearFilter: () => n(e.columnId),\n isFilterCleard: ((v = r(o[e.columnId])) == null ? void 0 : v.length) > 0\n }\n ) });\n case "dropdown-multi-chip":\n return /* @__PURE__ */ c(s0, { children: /* @__PURE__ */ c(\n Gi,\n {\n buttonText: e.filterLabel ? e.filterLabel : r2(e.columnId),\n placeholder: `Search ${e.filterLabel ? e.filterLabel : r2(e.columnId)}`,\n isSearchable: !0,\n isMulti: !0,\n highLightSelectedOptions: !0,\n data: (L = e == null ? void 0 : e.settings) == null ? void 0 : L.options,\n onApplyFilter: (B) => {\n const X = B.map(\n (F) => F.value\n );\n t(e.columnId, X);\n },\n value: r(\n o[e.columnId]\n ),\n onClearFilter: () => n(e.columnId),\n isFilterCleard: ((y = r(o[e.columnId])) == null ? void 0 : y.length) > 0\n }\n ) });\n default:\n return /* @__PURE__ */ c(\n h8,\n {\n label: e.filterLabel ? e.filterLabel : r2(e.columnId),\n buttonText: e.filterLabel ? e.filterLabel : r2(e.columnId),\n onApplyFilter: (B) => {\n t(e.columnId, B);\n },\n value: o[e.columnId] || "",\n onClearFilter: () => n(e.columnId)\n }\n );\n }\n })() });\n}, rS = (styled_components__WEBPACK_IMPORTED_MODULE_1___default().div)`\n display: flex;\n margin-left: auto;\n align-items: flex-start;\n\n .skeleton-child-container {\n display: flex;\n margin-left: auto;\n align-items: flex-start;\n > * {\n margin-left: ${({ theme: e }) => e.spacings.sp8};\n }\n }\n`, nS = (styled_components__WEBPACK_IMPORTED_MODULE_1___default().div)`\n ${Pt} {\n min-width: max-content;\n }\n`;\n(styled_components__WEBPACK_IMPORTED_MODULE_1___default().div)`\n width: 100%;\n display: flex;\n align-items: center;\n margin-bottom: ${({ theme: e }) => e.spacings.sp8};\n`;\n(styled_components__WEBPACK_IMPORTED_MODULE_1___default().div)`\n display: flex;\n\n > * {\n margin-right: ${({ theme: e }) => e.spacings.sp8};\n }\n`;\nstyled_components__WEBPACK_IMPORTED_MODULE_1___default().span(\n ({ theme: e }) => (0,styled_components__WEBPACK_IMPORTED_MODULE_1__.css)`\n display: inline-flex;\n font-family: ${e.fontFamily.base};\n font-size: ${e.typography.t14};\n line-height: ${e.lineHeight.lh22};\n color: ${e.colors.blue};\n padding: 0.3125rem 0.625rem;\n cursor: pointer;\n user-select: none;\n `\n);\n(styled_components__WEBPACK_IMPORTED_MODULE_1___default().div)`\n display: flex;\n justify-content: center;\n align-items: center;\n`;\nconst iS = (styled_components__WEBPACK_IMPORTED_MODULE_1___default().div)`\n margin-bottom: 8px;\n > div {\n padding: 0;\n }\n\n ${(e) => e.loading && (0,styled_components__WEBPACK_IMPORTED_MODULE_1__.css)`\n padding-left: 10px;\n .skeleton-container {\n div {\n opacity: 0;\n }\n }\n `}\n`, aS = (styled_components__WEBPACK_IMPORTED_MODULE_1___default().div)`\n display: flex;\n justify-content: flex-start;\n align-items: center;\n gap: 4px;\n padding: 8px 0 0 0px;\n`, sS = (styled_components__WEBPACK_IMPORTED_MODULE_1___default().div)``, cS = (styled_components__WEBPACK_IMPORTED_MODULE_1___default().div)`\n > div {\n padding: 0;\n }\n`, lS = (styled_components__WEBPACK_IMPORTED_MODULE_1___default().div)`\n display: flex;\n justify-content: flex-start;\n gap: 8px;\n align-items: stretch;\n`, Qi = (styled_components__WEBPACK_IMPORTED_MODULE_1___default().div)`\n ${(e) => e.$items === "tabs" && (0,styled_components__WEBPACK_IMPORTED_MODULE_1__.css)`\n flex-basis: 136px;\n `}\n\n ${(e) => e.$items === "divider" && (0,styled_components__WEBPACK_IMPORTED_MODULE_1__.css)`\n flex-basis: 4px;\n `}\n\n ${(e) => e.$items === "content" && (0,styled_components__WEBPACK_IMPORTED_MODULE_1__.css)`\n flex-grow: 1;\n `}\n\n ${(e) => e.$tabsMaxHeight == !0 && (0,styled_components__WEBPACK_IMPORTED_MODULE_1__.css)`\n .scrollbar-container {\n padding-right: 10px;\n }\n `}\n`, pS = (styled_components__WEBPACK_IMPORTED_MODULE_1___default().div)`\n .date-range-container {\n display: flex;\n justify-content: space-between;\n\n align-items: center;\n gap: 16px;\n & > div {\n margin-top: 0;\n }\n }\n`, Hp = styled_components__WEBPACK_IMPORTED_MODULE_1___default()(B2)(\n ({ theme: { borderRadius: e }, size: t, buttonType: o }) => {\n const n = t === P5.SMALL;\n return (0,styled_components__WEBPACK_IMPORTED_MODULE_1__.css)`\n ${no} {\n width: ${n ? "12px" : "16px"};\n padding: ${n ? "7px" : "9px"};\n * {\n max-width: 100%;\n height: 100%;\n }\n border-radius: ${e.base};\n ${o == nt.MINI && (0,styled_components__WEBPACK_IMPORTED_MODULE_1__.css)`\n width: 10px;\n padding: 5px;\n & svg {\n width: 10px;\n }\n `}\n }\n `;\n }\n), V3 = styled_components__WEBPACK_IMPORTED_MODULE_1___default()(Hp)(\n ({ theme: { colors: e, shadows: t }, buttonType: o }) => (0,styled_components__WEBPACK_IMPORTED_MODULE_1__.css)`\n padding: 3px;\n min-width: auto;\n ${o == nt.MINI && (0,styled_components__WEBPACK_IMPORTED_MODULE_1__.css)`\n background-color: ${e.backgrounds.bgPrimary};\n color: ${e.textIcon.textPrimary};\n padding: 0px;\n box-shadow: none;\n min-height: 20px;\n min-width: 20px;\n max-height: 20px;\n max-width: 20px;\n display: block;\n box-sizing: border-box;\n &:not(:disabled):hover {\n background-color: ${e.backgrounds.bgHoverPrimary};\n color: ${e.textIcon.textPrimary};\n padding: 0px;\n box-shadow: none;\n }\n &:not(:disabled):focus {\n background-color: ${e.backgrounds.bgPrimary};\n color: ${e.textIcon.textPrimary};\n }\n &:not(:disabled):active {\n background-color: ${e.backgrounds.bgPressed};\n color: ${e.textIcon.textTertiary};\n padding: 0px;\n box-shadow: none;\n }\n &[aria-disabled=\'true\'] {\n background-color: ${e.backgrounds.bgDisabledPrimary};\n color: ${e.textIcon.textDisabledOnbg};\n }\n `}\n `\n);\nfunction G2(e) {\n const {\n name: t,\n tooltipText: o,\n isDisabled: n,\n isTooltip: r,\n toolTipPosition: i,\n buttonType: a,\n ...s\n } = e;\n return /* @__PURE__ */ e1(react__WEBPACK_IMPORTED_MODULE_0__.Fragment, { children: [\n a == nt.MINI && (r && !n ? /* @__PURE__ */ c(A3, { text: o, place: i, size: "mini", children: /* @__PURE__ */ c(\n V3,\n {\n isDisabled: n,\n buttonType: a,\n ...s,\n children: /* @__PURE__ */ c(Z1, { name: t, size: "xxxs" })\n }\n ) }) : /* @__PURE__ */ c(\n V3,\n {\n isDisabled: n,\n buttonType: a,\n ...s,\n children: /* @__PURE__ */ c(Z1, { name: t })\n }\n )),\n a != nt.MINI && /* @__PURE__ */ c(\n V3,\n {\n isDisabled: n,\n buttonType: a,\n ...s,\n children: /* @__PURE__ */ c(Z1, { name: t })\n }\n )\n ] });\n}\nconst dS = styled_components__WEBPACK_IMPORTED_MODULE_1___default().div(\n ({ theme: { colors: e } }) => {\n const t = `rgba(${q2(e.backgrounds.blackOverlay)}, 0.6)`;\n return (0,styled_components__WEBPACK_IMPORTED_MODULE_1__.css)`\n position: absolute;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n background-color: ${t};\n z-index: 2;\n `;\n }\n);\n(styled_components__WEBPACK_IMPORTED_MODULE_1___default().div)`\n /* width: 320px; */\n position: relative;\n`;\n(styled_components__WEBPACK_IMPORTED_MODULE_1___default().div)`\n width: calc(100% - 40px);\n height: 500px;\n margin-bottom: 10px;\n padding: 20px;\n position: relative;\n`;\nconst bS = ({}, e) => /* @__PURE__ */ c(dS, { ref: e }), MS = (0,react__WEBPACK_IMPORTED_MODULE_0__.forwardRef)(bS), Qn = {\n SMALL: n2.SMALL,\n MEDIUM: n2.MEDIUM,\n LARGE: n2.LARGE\n}, i9 = 4, AS = (0,styled_components__WEBPACK_IMPORTED_MODULE_1__.keyframes)`\n 0% {\n transform: translateY(-10px);\n }\n 100% {\n transform: translateY(0px);\n }\n`, uS = styled_components__WEBPACK_IMPORTED_MODULE_1___default().div(\n ({ theme: { cubicBezier: e, animations: t, spacings: o } }) => (0,styled_components__WEBPACK_IMPORTED_MODULE_1__.css)`\n position: fixed;\n z-index: 9;\n top: 0;\n bottom: 0;\n left: 0;\n right: 0;\n display: flex;\n align-items: center;\n justify-content: center;\n padding: ${o.sp48};\n animation-duration: 0.3s;\n animation-timing-function: ${e};\n animation-fill-mode: forwards;\n animation-name: ${t.fadeIn};\n `\n), zS = styled_components__WEBPACK_IMPORTED_MODULE_1___default().div(\n ({\n theme: { colors: e, cubicBezier: t, spacings: o },\n size: n,\n isResize: r,\n isFilterModal: i\n }) => {\n let a;\n switch (n) {\n case Qn.LARGE:\n a = 1264;\n break;\n case Qn.MEDIUM:\n a = 612;\n break;\n case Qn.SMALL:\n default:\n a = 464;\n }\n return (0,styled_components__WEBPACK_IMPORTED_MODULE_1__.css)`\n display: flex;\n flex-direction: column;\n justify-content: space-between;\n position: relative;\n z-index: 3;\n width: ${a}px;\n max-width: 100%;\n max-height: 100%;\n background-color: ${e.backgrounds.bgPrimary};\n box-sizing: border-box;\n animation-duration: 1.5s;\n animation-timing-function: ${t};\n animation-fill-mode: forwards;\n animation-name: ${AS};\n border-radius: ${o.sp8};\n resize: ${r ? "both" : "none"};\n h3 {\n margin: 0;\n padding: 12px 12px ${o.sp8} ${o.sp16};\n }\n .close-btn {\n .icon-system {\n color: ${e.textIcon.textPrimary};\n }\n position: absolute;\n z-index: 1;\n top: ${o.sp12};\n right: ${o.sp12};\n background-color: ${e.backgrounds.bgPrimary};\n box-shadow: none;\n }\n ${!i && (0,styled_components__WEBPACK_IMPORTED_MODULE_1__.css)`\n overflow-y: auto;\n `}\n `;\n }\n), hS = styled_components__WEBPACK_IMPORTED_MODULE_1___default().div(\n ({ theme: { spacings: e } }) => (0,styled_components__WEBPACK_IMPORTED_MODULE_1__.css)`\n display: flex;\n justify-content: flex-end;\n flex-wrap: wrap;\n padding: ${e.sp12};\n ${Pt} {\n margin-left: ${e.sp8};\n }\n `\n);\nstyled_components__WEBPACK_IMPORTED_MODULE_1___default().p(\n ({ theme: { colors: e, lineHeight: t, typography: o } }) => (0,styled_components__WEBPACK_IMPORTED_MODULE_1__.css)`\n font-size: ${o.t14};\n line-height: ${t.lh22};\n color: ${e.grey};\n margin: 0;\n `\n);\nconst OS = styled_components__WEBPACK_IMPORTED_MODULE_1___default().h3(\n ({ theme: { colors: e, lineHeight: t, typography: o, fontWeight: n } }) => (0,styled_components__WEBPACK_IMPORTED_MODULE_1__.css)`\n font-size: ${o.t18};\n line-height: ${t.lh32};\n font-weight: ${n.medium};\n color: ${e.textIcon.textHighemphasis};\n `\n);\n(styled_components__WEBPACK_IMPORTED_MODULE_1___default().div)`\n display: flex;\n align-items: center;\n justify-content: flex-start;\n`;\n(styled_components__WEBPACK_IMPORTED_MODULE_1___default().div)`\n border-left: 2px solid rgba(229, 229, 229, 1);\n height: 28px;\n margin: 12px;\n`;\nconst fS = styled_components__WEBPACK_IMPORTED_MODULE_1___default().div(\n ({ theme: { spacings: e, colors: t, borderRadius: o } }) => (0,styled_components__WEBPACK_IMPORTED_MODULE_1__.css)`\n padding: ${e.sp6};\n margin: 10px;\n overflow: hidden;\n overflow-y: auto;\n\n &::-webkit-scrollbar {\n height: ${i9}px;\n width: ${i9}px;\n }\n &::-webkit-scrollbar-track {\n background-color: ${t.scroll.scrollBgPrimary};\n border-radius: ${o.xl};\n }\n\n &::-webkit-scrollbar-thumb {\n background-color: ${t.scroll.scrollBgDefault};\n }\n /* Handle on hover */\n &::-webkit-scrollbar-thumb:hover {\n background-color: ${t.scroll.scrollBgHover};\n }\n &::-webkit-scrollbar-thumb:active {\n background-color: ${t.scroll.scrollBgPressed};\n }\n `\n);\nfunction gS({\n isOpen: e = !1,\n size: t = Qn.SMALL,\n hasCloseButton: o = !1,\n preventCloseOnClickOutside: n = !1,\n onClose: r,\n children: i,\n container: a,\n actionsGroup: s,\n title: l,\n isResize: p,\n isFilterModal: d\n}, b) {\n const M = (0,react__WEBPACK_IMPORTED_MODULE_0__.useRef)(null);\n return U5(M, !n, r), (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => (e && (window.document.body.style.overflow = "hidden"), () => {\n window.document.body.style.overflow = "visible";\n }), [e]), e ? /* @__PURE__ */ c(Ll, { container: a, children: /* @__PURE__ */ e1(uS, { ref: b, children: [\n /* @__PURE__ */ c(MS, {}),\n /* @__PURE__ */ e1(\n zS,\n {\n size: t,\n ref: M,\n isResize: p,\n isFilterModal: d,\n children: [\n /* @__PURE__ */ e1("div", { children: [\n typeof l == "string" ? /* @__PURE__ */ e1(s0, { children: [\n /* @__PURE__ */ c(OS, { children: l }),\n /* @__PURE__ */ c(P2, { $default: !0 })\n ] }) : /* @__PURE__ */ e1(s0, { children: [\n l,\n /* @__PURE__ */ c(P2, { $default: !0 })\n ] }),\n o && /* @__PURE__ */ c(\n G2,\n {\n buttonType: "tertiary",\n name: "Cross",\n className: "close-btn",\n onClick: r,\n size: "sm"\n }\n )\n ] }),\n /* @__PURE__ */ c(fS, { children: i }),\n /* @__PURE__ */ c("div", { children: s && /* @__PURE__ */ e1(s0, { children: [\n /* @__PURE__ */ c(P2, { $default: !0 }),\n /* @__PURE__ */ c(hS, { children: s })\n ] }) })\n ]\n }\n )\n ] }) }) : null;\n}\nconst CS = (0,react__WEBPACK_IMPORTED_MODULE_0__.forwardRef)(gS);\nvar a5 = { exports: {} }, s5 = { exports: {} };\n/*!\n * perfect-scrollbar v1.5.6\n * Copyright 2024 Hyunje Jun, MDBootstrap and Contributors\n * Licensed under MIT\n */\nfunction De(e) {\n return getComputedStyle(e);\n}\nfunction D2(e, t) {\n for (var o in t) {\n var n = t[o];\n typeof n == "number" && (n = n + "px"), e.style[o] = n;\n }\n return e;\n}\nfunction hn(e) {\n var t = document.createElement("div");\n return t.className = e, t;\n}\nvar a9 = typeof Element < "u" && (Element.prototype.matches || Element.prototype.webkitMatchesSelector || Element.prototype.mozMatchesSelector || Element.prototype.msMatchesSelector);\nfunction wt(e, t) {\n if (!a9)\n throw new Error("No element matching method supported");\n return a9.call(e, t);\n}\nfunction N3(e) {\n e.remove ? e.remove() : e.parentNode && e.parentNode.removeChild(e);\n}\nfunction s9(e, t) {\n return Array.prototype.filter.call(\n e.children,\n function(o) {\n return wt(o, t);\n }\n );\n}\nvar d2 = {\n main: "ps",\n rtl: "ps__rtl",\n element: {\n thumb: function(e) {\n return "ps__thumb-" + e;\n },\n rail: function(e) {\n return "ps__rail-" + e;\n },\n consuming: "ps__child--consume"\n },\n state: {\n focus: "ps--focus",\n clicking: "ps--clicking",\n active: function(e) {\n return "ps--active-" + e;\n },\n scrolling: function(e) {\n return "ps--scrolling-" + e;\n }\n }\n}, Vp = { x: null, y: null };\nfunction Pp(e, t) {\n var o = e.element.classList, n = d2.state.scrolling(t);\n o.contains(n) ? clearTimeout(Vp[t]) : o.add(n);\n}\nfunction Fp(e, t) {\n Vp[t] = setTimeout(\n function() {\n return e.isAlive && e.element.classList.remove(d2.state.scrolling(t));\n },\n e.settings.scrollingThreshold\n );\n}\nfunction mS(e, t) {\n Pp(e, t), Fp(e, t);\n}\nvar Tr = function(t) {\n this.element = t, this.handlers = {};\n}, Xp = { isEmpty: { configurable: !0 } };\nTr.prototype.bind = function(t, o) {\n typeof this.handlers[t] > "u" && (this.handlers[t] = []), this.handlers[t].push(o), this.element.addEventListener(t, o, !1);\n};\nTr.prototype.unbind = function(t, o) {\n var n = this;\n this.handlers[t] = this.handlers[t].filter(function(r) {\n return o && r !== o ? !0 : (n.element.removeEventListener(t, r, !1), !1);\n });\n};\nTr.prototype.unbindAll = function() {\n for (var t in this.handlers)\n this.unbind(t);\n};\nXp.isEmpty.get = function() {\n var e = this;\n return Object.keys(this.handlers).every(\n function(t) {\n return e.handlers[t].length === 0;\n }\n );\n};\nObject.defineProperties(Tr.prototype, Xp);\nvar co = function() {\n this.eventElements = [];\n};\nco.prototype.eventElement = function(t) {\n var o = this.eventElements.filter(function(n) {\n return n.element === t;\n })[0];\n return o || (o = new Tr(t), this.eventElements.push(o)), o;\n};\nco.prototype.bind = function(t, o, n) {\n this.eventElement(t).bind(o, n);\n};\nco.prototype.unbind = function(t, o, n) {\n var r = this.eventElement(t);\n r.unbind(o, n), r.isEmpty && this.eventElements.splice(this.eventElements.indexOf(r), 1);\n};\nco.prototype.unbindAll = function() {\n this.eventElements.forEach(function(t) {\n return t.unbindAll();\n }), this.eventElements = [];\n};\nco.prototype.once = function(t, o, n) {\n var r = this.eventElement(t), i = function(a) {\n r.unbind(o, i), n(a);\n };\n r.bind(o, i);\n};\nfunction On(e) {\n if (typeof window.CustomEvent == "function")\n return new CustomEvent(e);\n var t = document.createEvent("CustomEvent");\n return t.initCustomEvent(e, !1, !1, void 0), t;\n}\nfunction L4(e, t, o, n, r) {\n n === void 0 && (n = !0), r === void 0 && (r = !1);\n var i;\n if (t === "top")\n i = ["contentHeight", "containerHeight", "scrollTop", "y", "up", "down"];\n else if (t === "left")\n i = ["contentWidth", "containerWidth", "scrollLeft", "x", "left", "right"];\n else\n throw new Error("A proper axis should be provided");\n LS(e, o, i, n, r);\n}\nfunction LS(e, t, o, n, r) {\n var i = o[0], a = o[1], s = o[2], l = o[3], p = o[4], d = o[5];\n n === void 0 && (n = !0), r === void 0 && (r = !1);\n var b = e.element;\n e.reach[l] = null, b[s] < 1 && (e.reach[l] = "start"), b[s] > e[i] - e[a] - 1 && (e.reach[l] = "end"), t && (b.dispatchEvent(On("ps-scroll-" + l)), t < 0 ? b.dispatchEvent(On("ps-scroll-" + p)) : t > 0 && b.dispatchEvent(On("ps-scroll-" + d)), n && mS(e, l)), e.reach[l] && (t || r) && b.dispatchEvent(On("ps-" + l + "-reach-" + e.reach[l]));\n}\nfunction t2(e) {\n return parseInt(e, 10) || 0;\n}\nfunction vS(e) {\n return wt(e, "input,[contenteditable]") || wt(e, "select,[contenteditable]") || wt(e, "textarea,[contenteditable]") || wt(e, "button,[contenteditable]");\n}\nfunction qS(e) {\n var t = De(e);\n return t2(t.width) + t2(t.paddingLeft) + t2(t.paddingRight) + t2(t.borderLeftWidth) + t2(t.borderRightWidth);\n}\nvar R3 = {\n isWebKit: typeof document < "u" && "WebkitAppearance" in document.documentElement.style,\n supportsTouch: typeof window < "u" && ("ontouchstart" in window || "maxTouchPoints" in window.navigator && window.navigator.maxTouchPoints > 0 || window.DocumentTouch && document instanceof window.DocumentTouch),\n supportsIePointer: typeof navigator < "u" && navigator.msMaxTouchPoints,\n isChrome: typeof navigator < "u" && /Chrome/i.test(navigator && navigator.userAgent)\n};\nfunction bt(e) {\n var t = e.element, o = Math.floor(t.scrollTop), n = t.getBoundingClientRect();\n e.containerWidth = Math.floor(n.width), e.containerHeight = Math.floor(n.height), e.contentWidth = t.scrollWidth, e.contentHeight = t.scrollHeight, t.contains(e.scrollbarXRail) || (s9(t, d2.element.rail("x")).forEach(function(r) {\n return N3(r);\n }), t.appendChild(e.scrollbarXRail)), t.contains(e.scrollbarYRail) || (s9(t, d2.element.rail("y")).forEach(function(r) {\n return N3(r);\n }), t.appendChild(e.scrollbarYRail)), !e.settings.suppressScrollX && e.containerWidth + e.settings.scrollXMarginOffset < e.contentWidth ? (e.scrollbarXActive = !0, e.railXWidth = e.containerWidth - e.railXMarginWidth, e.railXRatio = e.containerWidth / e.railXWidth, e.scrollbarXWidth = c9(e, t2(e.railXWidth * e.containerWidth / e.contentWidth)), e.scrollbarXLeft = t2(\n (e.negativeScrollAdjustment + t.scrollLeft) * (e.railXWidth - e.scrollbarXWidth) / (e.contentWidth - e.containerWidth)\n )) : e.scrollbarXActive = !1, !e.settings.suppressScrollY && e.containerHeight + e.settings.scrollYMarginOffset < e.contentHeight ? (e.scrollbarYActive = !0, e.railYHeight = e.containerHeight - e.railYMarginHeight, e.railYRatio = e.containerHeight / e.railYHeight, e.scrollbarYHeight = c9(\n e,\n t2(e.railYHeight * e.containerHeight / e.contentHeight)\n ), e.scrollbarYTop = t2(\n o * (e.railYHeight - e.scrollbarYHeight) / (e.contentHeight - e.containerHeight)\n )) : e.scrollbarYActive = !1, e.scrollbarXLeft >= e.railXWidth - e.scrollbarXWidth && (e.scrollbarXLeft = e.railXWidth - e.scrollbarXWidth), e.scrollbarYTop >= e.railYHeight - e.scrollbarYHeight && (e.scrollbarYTop = e.railYHeight - e.scrollbarYHeight), yS(t, e), e.scrollbarXActive ? t.classList.add(d2.state.active("x")) : (t.classList.remove(d2.state.active("x")), e.scrollbarXWidth = 0, e.scrollbarXLeft = 0, t.scrollLeft = e.isRtl === !0 ? e.contentWidth : 0), e.scrollbarYActive ? t.classList.add(d2.state.active("y")) : (t.classList.remove(d2.state.active("y")), e.scrollbarYHeight = 0, e.scrollbarYTop = 0, t.scrollTop = 0);\n}\nfunction c9(e, t) {\n return e.settings.minScrollbarLength && (t = Math.max(t, e.settings.minScrollbarLength)), e.settings.maxScrollbarLength && (t = Math.min(t, e.settings.maxScrollbarLength)), t;\n}\nfunction yS(e, t) {\n var o = { width: t.railXWidth }, n = Math.floor(e.scrollTop);\n t.isRtl ? o.left = t.negativeScrollAdjustment + e.scrollLeft + t.containerWidth - t.contentWidth : o.left = e.scrollLeft, t.isScrollbarXUsingBottom ? o.bottom = t.scrollbarXBottom - n : o.top = t.scrollbarXTop + n, D2(t.scrollbarXRail, o);\n var r = { top: n, height: t.railYHeight };\n t.isScrollbarYUsingRight ? t.isRtl ? r.right = t.contentWidth - (t.negativeScrollAdjustment + e.scrollLeft) - t.scrollbarYRight - t.scrollbarYOuterWidth - 9 : r.right = t.scrollbarYRight - e.scrollLeft : t.isRtl ? r.left = t.negativeScrollAdjustment + e.scrollLeft + t.containerWidth * 2 - t.contentWidth - t.scrollbarYLeft - t.scrollbarYOuterWidth : r.left = t.scrollbarYLeft + e.scrollLeft, D2(t.scrollbarYRail, r), D2(t.scrollbarX, {\n left: t.scrollbarXLeft,\n width: t.scrollbarXWidth - t.railBorderXWidth\n }), D2(t.scrollbarY, {\n top: t.scrollbarYTop,\n height: t.scrollbarYHeight - t.railBorderYWidth\n });\n}\nfunction wS(e) {\n e.event.bind(e.scrollbarY, "mousedown", function(t) {\n return t.stopPropagation();\n }), e.event.bind(e.scrollbarYRail, "mousedown", function(t) {\n var o = t.pageY - window.pageYOffset - e.scrollbarYRail.getBoundingClientRect().top, n = o > e.scrollbarYTop ? 1 : -1;\n e.element.scrollTop += n * e.containerHeight, bt(e), t.stopPropagation();\n }), e.event.bind(e.scrollbarX, "mousedown", function(t) {\n return t.stopPropagation();\n }), e.event.bind(e.scrollbarXRail, "mousedown", function(t) {\n var o = t.pageX - window.pageXOffset - e.scrollbarXRail.getBoundingClientRect().left, n = o > e.scrollbarXLeft ? 1 : -1;\n e.element.scrollLeft += n * e.containerWidth, bt(e), t.stopPropagation();\n });\n}\nvar fn = null;\nfunction xS(e) {\n l9(e, [\n "containerHeight",\n "contentHeight",\n "pageY",\n "railYHeight",\n "scrollbarY",\n "scrollbarYHeight",\n "scrollTop",\n "y",\n "scrollbarYRail"\n ]), l9(e, [\n "containerWidth",\n "contentWidth",\n "pageX",\n "railXWidth",\n "scrollbarX",\n "scrollbarXWidth",\n "scrollLeft",\n "x",\n "scrollbarXRail"\n ]);\n}\nfunction l9(e, t) {\n var o = t[0], n = t[1], r = t[2], i = t[3], a = t[4], s = t[5], l = t[6], p = t[7], d = t[8], b = e.element, M = null, u = null, A = null;\n function z(h) {\n h.touches && h.touches[0] && (h[r] = h.touches[0]["page" + p.toUpperCase()]), fn === a && (b[l] = M + A * (h[r] - u), Pp(e, p), bt(e), h.stopPropagation(), h.preventDefault());\n }\n function f() {\n Fp(e, p), e[d].classList.remove(d2.state.clicking), document.removeEventListener("mousemove", z), document.removeEventListener("mouseup", f), document.removeEventListener("touchmove", z), document.removeEventListener("touchend", f), fn = null;\n }\n function O(h) {\n fn === null && (fn = a, M = b[l], h.touches && (h[r] = h.touches[0]["page" + p.toUpperCase()]), u = h[r], A = (e[n] - e[o]) / (e[i] - e[s]), h.touches ? (document.addEventListener("touchmove", z, { passive: !1 }), document.addEventListener("touchend", f)) : (document.addEventListener("mousemove", z), document.addEventListener("mouseup", f)), e[d].classList.add(d2.state.clicking)), h.stopPropagation(), h.cancelable && h.preventDefault();\n }\n e[a].addEventListener("mousedown", O), e[a].addEventListener("touchstart", O);\n}\nfunction WS(e) {\n var t = e.element, o = function() {\n return wt(t, ":hover");\n }, n = function() {\n return wt(e.scrollbarX, ":focus") || wt(e.scrollbarY, ":focus");\n };\n function r(i, a) {\n var s = Math.floor(t.scrollTop);\n if (i === 0) {\n if (!e.scrollbarYActive)\n return !1;\n if (s === 0 && a > 0 || s >= e.contentHeight - e.containerHeight && a < 0)\n return !e.settings.wheelPropagation;\n }\n var l = t.scrollLeft;\n if (a === 0) {\n if (!e.scrollbarXActive)\n return !1;\n if (l === 0 && i < 0 || l >= e.contentWidth - e.containerWidth && i > 0)\n return !e.settings.wheelPropagation;\n }\n return !0;\n }\n e.event.bind(e.ownerDocument, "keydown", function(i) {\n if (!(i.isDefaultPrevented && i.isDefaultPrevented() || i.defaultPrevented) && !(!o() && !n())) {\n var a = document.activeElement ? document.activeElement : e.ownerDocument.activeElement;\n if (a) {\n if (a.tagName === "IFRAME")\n a = a.contentDocument.activeElement;\n else\n for (; a.shadowRoot; )\n a = a.shadowRoot.activeElement;\n if (vS(a))\n return;\n }\n var s = 0, l = 0;\n switch (i.which) {\n case 37:\n i.metaKey ? s = -e.contentWidth : i.altKey ? s = -e.containerWidth : s = -30;\n break;\n case 38:\n i.metaKey ? l = e.contentHeight : i.altKey ? l = e.containerHeight : l = 30;\n break;\n case 39:\n i.metaKey ? s = e.contentWidth : i.altKey ? s = e.containerWidth : s = 30;\n break;\n case 40:\n i.metaKey ? l = -e.contentHeight : i.altKey ? l = -e.containerHeight : l = -30;\n break;\n case 32:\n i.shiftKey ? l = e.containerHeight : l = -e.containerHeight;\n break;\n case 33:\n l = e.containerHeight;\n break;\n case 34:\n l = -e.containerHeight;\n break;\n case 36:\n l = e.contentHeight;\n break;\n case 35:\n l = -e.contentHeight;\n break;\n default:\n return;\n }\n e.settings.suppressScrollX && s !== 0 || e.settings.suppressScrollY && l !== 0 || (t.scrollTop -= l, t.scrollLeft += s, bt(e), r(s, l) && i.preventDefault());\n }\n });\n}\nfunction RS(e) {\n var t = e.element;\n function o(a, s) {\n var l = Math.floor(t.scrollTop), p = t.scrollTop === 0, d = l + t.offsetHeight === t.scrollHeight, b = t.scrollLeft === 0, M = t.scrollLeft + t.offsetWidth === t.scrollWidth, u;\n return Math.abs(s) > Math.abs(a) ? u = p || d : u = b || M, u ? !e.settings.wheelPropagation : !0;\n }\n function n(a) {\n var s = a.deltaX, l = -1 * a.deltaY;\n return (typeof s > "u" || typeof l > "u") && (s = -1 * a.wheelDeltaX / 6, l = a.wheelDeltaY / 6), a.deltaMode && a.deltaMode === 1 && (s *= 10, l *= 10), s !== s && l !== l && (s = 0, l = a.wheelDelta), a.shiftKey ? [-l, -s] : [s, l];\n }\n function r(a, s, l) {\n if (!R3.isWebKit && t.querySelector("select:focus"))\n return !0;\n if (!t.contains(a))\n return !1;\n for (var p = a; p && p !== t; ) {\n if (p.classList.contains(d2.element.consuming))\n return !0;\n var d = De(p);\n if (l && d.overflowY.match(/(scroll|auto)/)) {\n var b = p.scrollHeight - p.clientHeight;\n if (b > 0 && (p.scrollTop > 0 && l < 0 || p.scrollTop < b && l > 0))\n return !0;\n }\n if (s && d.overflowX.match(/(scroll|auto)/)) {\n var M = p.scrollWidth - p.clientWidth;\n if (M > 0 && (p.scrollLeft > 0 && s < 0 || p.scrollLeft < M && s > 0))\n return !0;\n }\n p = p.parentNode;\n }\n return !1;\n }\n function i(a) {\n var s = n(a), l = s[0], p = s[1];\n if (!r(a.target, l, p)) {\n var d = !1;\n e.settings.useBothWheelAxes ? e.scrollbarYActive && !e.scrollbarXActive ? (p ? t.scrollTop -= p * e.settings.wheelSpeed : t.scrollTop += l * e.settings.wheelSpeed, d = !0) : e.scrollbarXActive && !e.scrollbarYActive && (l ? t.scrollLeft += l * e.settings.wheelSpeed : t.scrollLeft -= p * e.settings.wheelSpeed, d = !0) : (t.scrollTop -= p * e.settings.wheelSpeed, t.scrollLeft += l * e.settings.wheelSpeed), bt(e), d = d || o(l, p), d && !a.ctrlKey && (a.stopPropagation(), a.preventDefault());\n }\n }\n typeof window.onwheel < "u" ? e.event.bind(t, "wheel", i) : typeof window.onmousewheel < "u" && e.event.bind(t, "mousewheel", i);\n}\nfunction BS(e) {\n if (!R3.supportsTouch && !R3.supportsIePointer)\n return;\n var t = e.element, o = {\n startOffset: {},\n startTime: 0,\n speed: {},\n easingLoop: null\n };\n function n(b, M) {\n var u = Math.floor(t.scrollTop), A = t.scrollLeft, z = Math.abs(b), f = Math.abs(M);\n if (f > z) {\n if (M < 0 && u === e.contentHeight - e.containerHeight || M > 0 && u === 0)\n return window.scrollY === 0 && M > 0 && R3.isChrome;\n } else if (z > f && (b < 0 && A === e.contentWidth - e.containerWidth || b > 0 && A === 0))\n return !0;\n return !0;\n }\n function r(b, M) {\n t.scrollTop -= M, t.scrollLeft -= b, bt(e);\n }\n function i(b) {\n return b.targetTouches ? b.targetTouches[0] : b;\n }\n function a(b) {\n return b.target === e.scrollbarX || b.target === e.scrollbarY || b.pointerType && b.pointerType === "pen" && b.buttons === 0 ? !1 : !!(b.targetTouches && b.targetTouches.length === 1 || b.pointerType && b.pointerType !== "mouse" && b.pointerType !== b.MSPOINTER_TYPE_MOUSE);\n }\n function s(b) {\n if (a(b)) {\n var M = i(b);\n o.startOffset.pageX = M.pageX, o.startOffset.pageY = M.pageY, o.startTime = (/* @__PURE__ */ new Date()).getTime(), o.easingLoop !== null && clearInterval(o.easingLoop);\n }\n }\n function l(b, M, u) {\n if (!t.contains(b))\n return !1;\n for (var A = b; A && A !== t; ) {\n if (A.classList.contains(d2.element.consuming))\n return !0;\n var z = De(A);\n if (u && z.overflowY.match(/(scroll|auto)/)) {\n var f = A.scrollHeight - A.clientHeight;\n if (f > 0 && (A.scrollTop > 0 && u < 0 || A.scrollTop < f && u > 0))\n return !0;\n }\n if (M && z.overflowX.match(/(scroll|auto)/)) {\n var O = A.scrollWidth - A.clientWidth;\n if (O > 0 && (A.scrollLeft > 0 && M < 0 || A.scrollLeft < O && M > 0))\n return !0;\n }\n A = A.parentNode;\n }\n return !1;\n }\n function p(b) {\n if (a(b)) {\n var M = i(b), u = { pageX: M.pageX, pageY: M.pageY }, A = u.pageX - o.startOffset.pageX, z = u.pageY - o.startOffset.pageY;\n if (l(b.target, A, z))\n return;\n r(A, z), o.startOffset = u;\n var f = (/* @__PURE__ */ new Date()).getTime(), O = f - o.startTime;\n O > 0 && (o.speed.x = A / O, o.speed.y = z / O, o.startTime = f), n(A, z) && b.cancelable && b.preventDefault();\n }\n }\n function d() {\n e.settings.swipeEasing && (clearInterval(o.easingLoop), o.easingLoop = setInterval(function() {\n if (e.isInitialized) {\n clearInterval(o.easingLoop);\n return;\n }\n if (!o.speed.x && !o.speed.y) {\n clearInterval(o.easingLoop);\n return;\n }\n if (Math.abs(o.speed.x) < 0.01 && Math.abs(o.speed.y) < 0.01) {\n clearInterval(o.easingLoop);\n return;\n }\n r(o.speed.x * 30, o.speed.y * 30), o.speed.x *= 0.8, o.speed.y *= 0.8;\n }, 10));\n }\n R3.supportsTouch ? (e.event.bind(t, "touchstart", s), e.event.bind(t, "touchmove", p), e.event.bind(t, "touchend", d)) : R3.supportsIePointer && (window.PointerEvent ? (e.event.bind(t, "pointerdown", s), e.event.bind(t, "pointermove", p), e.event.bind(t, "pointerup", d)) : window.MSPointerEvent && (e.event.bind(t, "MSPointerDown", s), e.event.bind(t, "MSPointerMove", p), e.event.bind(t, "MSPointerUp", d)));\n}\nvar SS = function() {\n return {\n handlers: ["click-rail", "drag-thumb", "keyboard", "wheel", "touch"],\n maxScrollbarLength: null,\n minScrollbarLength: null,\n scrollingThreshold: 1e3,\n scrollXMarginOffset: 0,\n scrollYMarginOffset: 0,\n suppressScrollX: !1,\n suppressScrollY: !1,\n swipeEasing: !0,\n useBothWheelAxes: !1,\n wheelPropagation: !0,\n wheelSpeed: 1\n };\n}, ES = {\n "click-rail": wS,\n "drag-thumb": xS,\n keyboard: WS,\n wheel: RS,\n touch: BS\n}, Ir = function(t, o) {\n var n = this;\n if (o === void 0 && (o = {}), typeof t == "string" && (t = document.querySelector(t)), !t || !t.nodeName)\n throw new Error("no element is specified to initialize PerfectScrollbar");\n this.element = t, t.classList.add(d2.main), this.settings = SS();\n for (var r in o)\n this.settings[r] = o[r];\n this.containerWidth = null, this.containerHeight = null, this.contentWidth = null, this.contentHeight = null;\n var i = function() {\n return t.classList.add(d2.state.focus);\n }, a = function() {\n return t.classList.remove(d2.state.focus);\n };\n this.isRtl = De(t).direction === "rtl", this.isRtl === !0 && t.classList.add(d2.rtl), this.isNegativeScroll = function() {\n var p = t.scrollLeft, d = null;\n return t.scrollLeft = -1, d = t.scrollLeft < 0, t.scrollLeft = p, d;\n }(), this.negativeScrollAdjustment = this.isNegativeScroll ? t.scrollWidth - t.clientWidth : 0, this.event = new co(), this.ownerDocument = t.ownerDocument || document, this.scrollbarXRail = hn(d2.element.rail("x")), t.appendChild(this.scrollbarXRail), this.scrollbarX = hn(d2.element.thumb("x")), this.scrollbarXRail.appendChild(this.scrollbarX), this.scrollbarX.setAttribute("tabindex", 0), this.event.bind(this.scrollbarX, "focus", i), this.event.bind(this.scrollbarX, "blur", a), this.scrollbarXActive = null, this.scrollbarXWidth = null, this.scrollbarXLeft = null;\n var s = De(this.scrollbarXRail);\n this.scrollbarXBottom = parseInt(s.bottom, 10), isNaN(this.scrollbarXBottom) ? (this.isScrollbarXUsingBottom = !1, this.scrollbarXTop = t2(s.top)) : this.isScrollbarXUsingBottom = !0, this.railBorderXWidth = t2(s.borderLeftWidth) + t2(s.borderRightWidth), D2(this.scrollbarXRail, { display: "block" }), this.railXMarginWidth = t2(s.marginLeft) + t2(s.marginRight), D2(this.scrollbarXRail, { display: "" }), this.railXWidth = null, this.railXRatio = null, this.scrollbarYRail = hn(d2.element.rail("y")), t.appendChild(this.scrollbarYRail), this.scrollbarY = hn(d2.element.thumb("y")), this.scrollbarYRail.appendChild(this.scrollbarY), this.scrollbarY.setAttribute("tabindex", 0), this.event.bind(this.scrollbarY, "focus", i), this.event.bind(this.scrollbarY, "blur", a), this.scrollbarYActive = null, this.scrollbarYHeight = null, this.scrollbarYTop = null;\n var l = De(this.scrollbarYRail);\n this.scrollbarYRight = parseInt(l.right, 10), isNaN(this.scrollbarYRight) ? (this.isScrollbarYUsingRight = !1, this.scrollbarYLeft = t2(l.left)) : this.isScrollbarYUsingRight = !0, this.scrollbarYOuterWidth = this.isRtl ? qS(this.scrollbarY) : null, this.railBorderYWidth = t2(l.borderTopWidth) + t2(l.borderBottomWidth), D2(this.scrollbarYRail, { display: "block" }), this.railYMarginHeight = t2(l.marginTop) + t2(l.marginBottom), D2(this.scrollbarYRail, { display: "" }), this.railYHeight = null, this.railYRatio = null, this.reach = {\n x: t.scrollLeft <= 0 ? "start" : t.scrollLeft >= this.contentWidth - this.containerWidth ? "end" : null,\n y: t.scrollTop <= 0 ? "start" : t.scrollTop >= this.contentHeight - this.containerHeight ? "end" : null\n }, this.isAlive = !0, this.settings.handlers.forEach(function(p) {\n return ES[p](n);\n }), this.lastScrollTop = Math.floor(t.scrollTop), this.lastScrollLeft = t.scrollLeft, this.event.bind(this.element, "scroll", function(p) {\n return n.onScroll(p);\n }), bt(this);\n};\nIr.prototype.update = function() {\n this.isAlive && (this.negativeScrollAdjustment = this.isNegativeScroll ? this.element.scrollWidth - this.element.clientWidth : 0, D2(this.scrollbarXRail, { display: "block" }), D2(this.scrollbarYRail, { display: "block" }), this.railXMarginWidth = t2(De(this.scrollbarXRail).marginLeft) + t2(De(this.scrollbarXRail).marginRight), this.railYMarginHeight = t2(De(this.scrollbarYRail).marginTop) + t2(De(this.scrollbarYRail).marginBottom), D2(this.scrollbarXRail, { display: "none" }), D2(this.scrollbarYRail, { display: "none" }), bt(this), L4(this, "top", 0, !1, !0), L4(this, "left", 0, !1, !0), D2(this.scrollbarXRail, { display: "" }), D2(this.scrollbarYRail, { display: "" }));\n};\nIr.prototype.onScroll = function(t) {\n this.isAlive && (bt(this), L4(this, "top", this.element.scrollTop - this.lastScrollTop), L4(this, "left", this.element.scrollLeft - this.lastScrollLeft), this.lastScrollTop = Math.floor(this.element.scrollTop), this.lastScrollLeft = this.element.scrollLeft);\n};\nIr.prototype.destroy = function() {\n this.isAlive && (this.event.unbindAll(), N3(this.scrollbarX), N3(this.scrollbarY), N3(this.scrollbarXRail), N3(this.scrollbarYRail), this.removePsClasses(), this.element = null, this.scrollbarX = null, this.scrollbarY = null, this.scrollbarXRail = null, this.scrollbarYRail = null, this.isAlive = !1);\n};\nIr.prototype.removePsClasses = function() {\n this.element.className = this.element.className.split(" ").filter(function(t) {\n return !t.match(/^ps([-_].+|)$/);\n }).join(" ");\n};\nconst kS = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({\n __proto__: null,\n default: Ir\n}, Symbol.toStringTag, { value: "Module" })), NS = /* @__PURE__ */ zl(kS);\n(function(e, t) {\n Object.defineProperty(t, "__esModule", {\n value: !0\n });\n var o = Object.assign || function(f) {\n for (var O = 1; O < arguments.length; O++) {\n var h = arguments[O];\n for (var g in h)\n Object.prototype.hasOwnProperty.call(h, g) && (f[g] = h[g]);\n }\n return f;\n }, n = function() {\n function f(O, h) {\n for (var g = 0; g < h.length; g++) {\n var v = h[g];\n v.enumerable = v.enumerable || !1, v.configurable = !0, "value" in v && (v.writable = !0), Object.defineProperty(O, v.key, v);\n }\n }\n return function(O, h, g) {\n return h && f(O.prototype, h), g && f(O, g), O;\n };\n }(), r = (react__WEBPACK_IMPORTED_MODULE_0___default()), i = p(r), a = pp, s = NS, l = p(s);\n function p(f) {\n return f && f.__esModule ? f : { default: f };\n }\n function d(f, O) {\n var h = {};\n for (var g in f)\n O.indexOf(g) >= 0 || Object.prototype.hasOwnProperty.call(f, g) && (h[g] = f[g]);\n return h;\n }\n function b(f, O) {\n if (!(f instanceof O))\n throw new TypeError("Cannot call a class as a function");\n }\n function M(f, O) {\n if (!f)\n throw new ReferenceError("this hasn\'t been initialised - super() hasn\'t been called");\n return O && (typeof O == "object" || typeof O == "function") ? O : f;\n }\n function u(f, O) {\n if (typeof O != "function" && O !== null)\n throw new TypeError("Super expression must either be null or a function, not " + typeof O);\n f.prototype = Object.create(O && O.prototype, { constructor: { value: f, enumerable: !1, writable: !0, configurable: !0 } }), O && (Object.setPrototypeOf ? Object.setPrototypeOf(f, O) : f.__proto__ = O);\n }\n var A = {\n "ps-scroll-y": "onScrollY",\n "ps-scroll-x": "onScrollX",\n "ps-scroll-up": "onScrollUp",\n "ps-scroll-down": "onScrollDown",\n "ps-scroll-left": "onScrollLeft",\n "ps-scroll-right": "onScrollRight",\n "ps-y-reach-start": "onYReachStart",\n "ps-y-reach-end": "onYReachEnd",\n "ps-x-reach-start": "onXReachStart",\n "ps-x-reach-end": "onXReachEnd"\n };\n Object.freeze(A);\n var z = function(f) {\n u(O, f);\n function O(h) {\n b(this, O);\n var g = M(this, (O.__proto__ || Object.getPrototypeOf(O)).call(this, h));\n return g.handleRef = g.handleRef.bind(g), g._handlerByEvent = {}, g;\n }\n return n(O, [{\n key: "componentDidMount",\n value: function() {\n this.props.option && console.warn(\'react-perfect-scrollbar: the "option" prop has been deprecated in favor of "options"\'), this._ps = new l.default(this._container, this.props.options || this.props.option), this._updateEventHook(), this._updateClassName();\n }\n }, {\n key: "componentDidUpdate",\n value: function(g) {\n this._updateEventHook(g), this.updateScroll(), g.className !== this.props.className && this._updateClassName();\n }\n }, {\n key: "componentWillUnmount",\n value: function() {\n var g = this;\n Object.keys(this._handlerByEvent).forEach(function(v) {\n var L = g._handlerByEvent[v];\n L && g._container.removeEventListener(v, L, !1);\n }), this._handlerByEvent = {}, this._ps.destroy(), this._ps = null;\n }\n }, {\n key: "_updateEventHook",\n value: function() {\n var g = this, v = arguments.length > 0 && arguments[0] !== void 0 ? arguments[0] : {};\n Object.keys(A).forEach(function(L) {\n var y = g.props[A[L]], B = v[A[L]];\n if (y !== B) {\n if (B) {\n var X = g._handlerByEvent[L];\n g._container.removeEventListener(L, X, !1), g._handlerByEvent[L] = null;\n }\n if (y) {\n var F = function() {\n return y(g._container);\n };\n g._container.addEventListener(L, F, !1), g._handlerByEvent[L] = F;\n }\n }\n });\n }\n }, {\n key: "_updateClassName",\n value: function() {\n var g = this.props.className, v = this._container.className.split(" ").filter(function(L) {\n return L.match(/^ps([-_].+|)$/);\n }).join(" ");\n this._container && (this._container.className = "scrollbar-container" + (g ? " " + g : "") + (v ? " " + v : ""));\n }\n }, {\n key: "updateScroll",\n value: function() {\n this.props.onSync(this._ps);\n }\n }, {\n key: "handleRef",\n value: function(g) {\n this._container = g, this.props.containerRef(g);\n }\n }, {\n key: "render",\n value: function() {\n var g = this.props;\n g.className;\n var v = g.style;\n g.option, g.options, g.containerRef, g.onScrollY, g.onScrollX, g.onScrollUp, g.onScrollDown, g.onScrollLeft, g.onScrollRight, g.onYReachStart, g.onYReachEnd, g.onXReachStart, g.onXReachEnd;\n var L = g.component;\n g.onSync;\n var y = g.children, B = d(g, ["className", "style", "option", "options", "containerRef", "onScrollY", "onScrollX", "onScrollUp", "onScrollDown", "onScrollLeft", "onScrollRight", "onYReachStart", "onYReachEnd", "onXReachStart", "onXReachEnd", "component", "onSync", "children"]), X = L;\n return i.default.createElement(\n X,\n o({ style: v, ref: this.handleRef }, B),\n y\n );\n }\n }]), O;\n }(r.Component);\n t.default = z, z.defaultProps = {\n className: "",\n style: void 0,\n option: void 0,\n options: void 0,\n containerRef: function() {\n },\n onScrollY: void 0,\n onScrollX: void 0,\n onScrollUp: void 0,\n onScrollDown: void 0,\n onScrollLeft: void 0,\n onScrollRight: void 0,\n onYReachStart: void 0,\n onYReachEnd: void 0,\n onXReachStart: void 0,\n onXReachEnd: void 0,\n onSync: function(O) {\n return O.update();\n },\n component: "div"\n }, z.propTypes = {\n children: a.PropTypes.node.isRequired,\n className: a.PropTypes.string,\n style: a.PropTypes.object,\n option: a.PropTypes.object,\n options: a.PropTypes.object,\n containerRef: a.PropTypes.func,\n onScrollY: a.PropTypes.func,\n onScrollX: a.PropTypes.func,\n onScrollUp: a.PropTypes.func,\n onScrollDown: a.PropTypes.func,\n onScrollLeft: a.PropTypes.func,\n onScrollRight: a.PropTypes.func,\n onYReachStart: a.PropTypes.func,\n onYReachEnd: a.PropTypes.func,\n onXReachStart: a.PropTypes.func,\n onXReachEnd: a.PropTypes.func,\n onSync: a.PropTypes.func,\n component: a.PropTypes.string\n }, e.exports = t.default;\n})(s5, s5.exports);\nvar TS = s5.exports;\n(function(e, t) {\n Object.defineProperty(t, "__esModule", {\n value: !0\n });\n var o = TS, n = r(o);\n function r(i) {\n return i && i.__esModule ? i : { default: i };\n }\n t.default = n.default, e.exports = t.default;\n})(a5, a5.exports);\nvar IS = a5.exports;\nconst DS = /* @__PURE__ */ Q2(IS), Ee = 4, gn = 8, HS = styled_components__WEBPACK_IMPORTED_MODULE_1___default().div(\n ({ theme: { colors: e, borderRadius: t } }) => (0,styled_components__WEBPACK_IMPORTED_MODULE_1__.css)`\n height: 100%;\n\n .ps {\n overflow: hidden !important;\n overflow-anchor: none;\n -ms-overflow-style: none;\n touch-action: auto;\n -ms-touch-action: auto;\n }\n\n .ps__rail-x {\n display: none;\n opacity: 0;\n transition: background-color 0.2s linear, opacity 0.2s linear;\n -webkit-transition: background-color 0.2s linear, opacity 0.2s linear;\n height: ${Ee}px;\n /* there must be \'bottom\' or \'top\' for ps__rail-x */\n bottom: ${gn}px;\n /* please don\'t change \'position\' */\n position: absolute;\n background: ${e.scroll.scrollBgPrimary};\n }\n\n .ps__rail-y {\n display: none;\n opacity: 0;\n transition: background-color 0.2s linear, opacity 0.2s linear;\n -webkit-transition: background-color 0.2s linear, opacity 0.2s linear;\n width: ${Ee}px;\n /* there must be \'right\' or \'left\' for ps__rail-y */\n right: ${gn}px;\n /* please don\'t change \'position\' */\n position: absolute;\n \n background: ${e.scroll.scrollBgPrimary};\n }\n\n .ps__thumb-x {\n background-color: ${e.scroll.scrollBgDefault};\n border-radius: ${t.xl};\n transition: background-color 0.2s linear, height 0.2s ease-in-out;\n -webkit-transition: background-color 0.2s linear, height 0.2s ease-in-out;\n height: ${Ee}px;\n /* there must be \'bottom\' for ps__thumb-x */\n bottom: 0;\n /* please don\'t change \'position\' */\n position: absolute;\n }\n\n .ps__thumb-y {\n background-color: ${e.scroll.scrollBgDefault};\n border-radius: ${t.xl};\n transition: background-color 0.2s linear, width 0.2s ease-in-out;\n -webkit-transition: background-color 0.2s linear, width 0.2s ease-in-out;\n width: ${Ee}px;\n /* there must be \'right\' for ps__thumb-y */\n right: 0;\n /* please don\'t change \'position\' */\n position: absolute;\n }\n\n /* MS supports */\n @supports (-ms-overflow-style: none) {\n .ps {\n overflow: auto !important;\n }\n }\n\n @media screen and (-ms-high-contrast: active), (-ms-high-contrast: none) {\n .ps {\n overflow: auto !important;\n }\n }\n\n .scrollbar-container {\n position: relative;\n height: 100%;\n box-sizing: border-box;\n }\n\n .ps--active-x {\n padding-bottom: ${Ee + gn * 2}px;\n }\n\n .ps--active-y {\n padding-right: ${Ee + gn * 2}px;\n }\n\n .ps--active-x > .ps__rail-x,\n .ps--active-y > .ps__rail-y {\n display: block;\n background-color: ${e.scroll.scrollBgPrimary};\n border-radius: ${t.xl};\n }\n\n .ps:hover > .ps__rail-x,\n .ps:hover > .ps__rail-y,\n .ps--focus > .ps__rail-x,\n .ps--focus > .ps__rail-y,\n .ps--scrolling-x > .ps__rail-x,\n .ps--scrolling-y > .ps__rail-y {\n opacity: 1;\n }\n\n .ps .ps__rail-x:hover,\n .ps .ps__rail-y:hover,\n .ps .ps__rail-x:focus,\n .ps .ps__rail-y:focus,\n .ps .ps__rail-x.ps--clicking,\n .ps .ps__rail-y.ps--clicking {\n background-color: ${e.scroll.scrollBgPrimary};\n opacity: 1;\n }\n\n .ps__rail-y:hover > .ps__thumb-y,\n .ps__rail-y:focus > .ps__thumb-y,\n .ps__rail-y.ps--clicking .ps__thumb-y {\n background-color: ${e.scroll.scrollBgPressed};\n width: ${Ee}px;\n }\n\n .ps__rail-y:hover > .ps__thumb-y {\n background-color: ${e.scroll.scrollBgHover};\n width: ${Ee}px;\n }\n\n .ps__rail-x:hover > .ps__thumb-x,\n .ps__rail-x:focus > .ps__thumb-x,\n .ps__rail-x.ps--clicking .ps__thumb-x {\n background-color: ${e.scroll.scrollBgPressed};\n height: ${Ee}px;\n }\n\n .ps__rail-x:hover > .ps__thumb-x {\n background-color: ${e.scroll.scrollBgHover};\n height: ${Ee}px;\n }\n\n .ps__rail-y {\n margin-top: 8px;\n }\n `\n);\n(styled_components__WEBPACK_IMPORTED_MODULE_1___default().div)`\n background-color: ${({ theme: e }) => e.colors.backgrounds.whiteSmoke};\n height: 100%;\n`;\n(styled_components__WEBPACK_IMPORTED_MODULE_1___default().div)`\n width: 800px;\n height: 400px;\n background-color: ${({ theme: e }) => e.colors.backgrounds.bgPrimary};\n padding: ${({ theme: e }) => e.spacings.sp8} 0;\n`;\n(styled_components__WEBPACK_IMPORTED_MODULE_1___default().div)`\n height: 1000px;\n`;\n(styled_components__WEBPACK_IMPORTED_MODULE_1___default().div)`\n width: 800px;\n height: 400px;\n padding: 0 ${({ theme: e }) => e.spacings.sp8};\n background-color: ${({ theme: e }) => e.colors.backgrounds.bgPrimary};\n`;\n(styled_components__WEBPACK_IMPORTED_MODULE_1___default().div)`\n width: 1000px;\n height: 100%;\n`;\nfunction VS({ children: e, ...t }, o) {\n const n = (0,react__WEBPACK_IMPORTED_MODULE_0__.useRef)(null);\n return (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => {\n n.current && n.current.updateScroll();\n }, []), /* @__PURE__ */ c(HS, { ref: o, children: /* @__PURE__ */ c(DS, { ref: n, ...t, children: e }) });\n}\nconst j4 = (0,react__WEBPACK_IMPORTED_MODULE_0__.forwardRef)(VS), d6 = styled_components__WEBPACK_IMPORTED_MODULE_1___default().button(\n ({\n theme: {\n borderRadius: e,\n lineHeight: t,\n typography: o,\n colors: n,\n transitions: r,\n mixins: i,\n GLOBAL_ITEM_HEIGHT_CONDENSED: a\n },\n isActive: s,\n orientation: l\n }) => {\n const p = (0,styled_components__WEBPACK_IMPORTED_MODULE_1__.css)`\n transition: ${r.base};\n color: ${n.blue};\n\n &:after {\n transition: ${r.base};\n opacity: 1;\n z-index: 1;\n }\n `, d = () => {\n switch (l) {\n case H2.VERTICAL:\n return (0,styled_components__WEBPACK_IMPORTED_MODULE_1__.css)`\n top: 6px;\n bottom: 6px;\n left: 0;\n width: 2px;\n border-radius: ${e.base} 0 0 ${e.base};\n box-shadow: 2px 0 0 0 ${n.tab.tabIndicator} inset;\n `;\n case H2.HORIZONTAL:\n default:\n return (0,styled_components__WEBPACK_IMPORTED_MODULE_1__.css)`\n bottom: 0;\n right: 12px;\n left: 12px;\n height: 2px;\n border-radius: 0;\n box-shadow: 0 2px 0 0 ${n.tab.tabIndicator} inset;\n `;\n }\n }, b = () => {\n switch (l) {\n case H2.VERTICAL:\n return (0,styled_components__WEBPACK_IMPORTED_MODULE_1__.css)`\n top: 1px;\n bottom: 1px;\n left: 0;\n width: 2px;\n border-radius: ${e.base} 0 0 ${e.base};\n box-shadow: 2px 0 0 0 ${n.tab.tabIndicator} inset;\n `;\n case H2.HORIZONTAL:\n default:\n return (0,styled_components__WEBPACK_IMPORTED_MODULE_1__.css)`\n bottom: 0;\n right: 1px;\n left: 1px;\n height: 2px;\n border-radius: 0;\n box-shadow: 0 2px 0 0 ${n.tab.tabIndicator} inset;\n `;\n }\n };\n return (0,styled_components__WEBPACK_IMPORTED_MODULE_1__.css)`\n ${i.buttonReset};\n\n padding: 6px 12px;\n font-size: ${o.t14};\n line-height: ${t.lh22};\n color: ${n.eclipse};\n min-width: 178px;\n text-align: center;\n position: relative;\n height: ${a};\n white-space: nowrap;\n\n &:after {\n content: \'\';\n position: absolute;\n opacity: 0;\n transition: ${r.base};\n ${d};\n }\n\n &:not(:disabled) {\n &:hover {\n background-color: ${n.backgrounds.cultured};\n transition: ${r.base};\n ${s && (0,styled_components__WEBPACK_IMPORTED_MODULE_1__.css)`\n &:after {\n content: \'\';\n position: absolute;\n opacity: 1;\n transition: ${r.base};\n ${b};\n }\n `}\n }\n\n ${s && (0,styled_components__WEBPACK_IMPORTED_MODULE_1__.css)`\n ${p}\n `}\n\n &:active {\n ${p}\n }\n }\n\n &:disabled {\n color: ${n.gainsboro};\n cursor: default;\n }\n `;\n }\n), b6 = styled_components__WEBPACK_IMPORTED_MODULE_1___default().span(\n ({ theme: { typography: e, lineHeight: t, colors: o, fontWeight: n } }) => (0,styled_components__WEBPACK_IMPORTED_MODULE_1__.css)`\n font-size: ${e.t12};\n line-height: ${t.lh20};\n color: ${o.textIcon.textMediumemphasis};\n font-weight: ${n.medium};\n\n &:not(:last-child) {\n margin-right: ${({ theme: r }) => r.spacings.sp12};\n }\n `\n), T3 = styled_components__WEBPACK_IMPORTED_MODULE_1___default()(d6)(\n ({ theme: { colors: e, spacings: t }, isActive: o, orientation: n }) => {\n (0,styled_components__WEBPACK_IMPORTED_MODULE_1__.css)`\n ${V2} {\n background-color: ${e.backgrounds.bgTertiary};\n }\n &:hover {\n background: ${e.backgrounds.bgHoverPrimary};\n }\n `;\n const r = n === H2.VERTICAL;\n return (0,styled_components__WEBPACK_IMPORTED_MODULE_1__.css)`\n display: flex;\n align-items: center;\n justify-content: ${r ? "flex-start" : "center"};\n min-width: ${r ? "100%" : "auto"};\n .icon-system {\n color: ${e.textIcon.textHighemphasis};\n }\n &:hover {\n background: ${e.backgrounds.bgHoverPrimary} !important;\n }\n\n ${no} {\n &:not(:first-child:last-child) {\n margin-right: ${t.sp4};\n }\n\n & + ${V2} {\n &:not(:first-child:last-child) {\n margin-left: 0;\n }\n }\n }\n\n ${V2} {\n &:not(:first-child:last-child) {\n margin-left: ${r ? "auto" : "0"};\n }\n }\n\n &:disabled {\n ${V2} {\n background-color: ${e.backgrounds.bgDisabledPrimary};\n }\n ${b6} {\n color: ${e.textIcon.textDisabledNobg} !important;\n }\n .icon-system {\n color: ${e.textIcon.textDisabledNobg} !important ;\n }\n }\n `;\n }\n), PS = (e, t) => {\n const {\n children: o,\n iconLeft: n,\n title: r,\n badge: i,\n isDisabled: a,\n noDigit: s,\n badgeVariant: l,\n ...p\n } = e, d = /* @__PURE__ */ e1(\n T3,\n {\n ref: t,\n disabled: a,\n role: "tab",\n "aria-selected": p.isActive,\n ...p,\n children: [\n n && /* @__PURE__ */ c(Z1, { name: n, size: "xxxs" }),\n o && /* @__PURE__ */ c(b6, { children: o }),\n !!i && /* @__PURE__ */ c(Ae, { count: i, noDigit: s, variant: l })\n ]\n }\n );\n return r ? /* @__PURE__ */ c(A3, { text: r, place: "bottom", children: d }) : d;\n}, M6 = (0,react__WEBPACK_IMPORTED_MODULE_0__.forwardRef)(PS), FS = styled_components__WEBPACK_IMPORTED_MODULE_1___default().div(\n ({\n maxHeight: e,\n theme: { spacings: t, GLOBAL_ITEM_HEIGHT_CONDENSED: o, mixins: n }\n }) => {\n const r = Number(parseFloat(o)) * 6;\n return (0,styled_components__WEBPACK_IMPORTED_MODULE_1__.css)`\n overflow: auto;\n\n background: ${({ theme: i }) => i.colors.backgrounds.bgPrimary};\n\n ${T3} {\n justify-content: flex-start;\n\n ${b6} {\n ${n.ellipsis}\n }\n }\n\n .scrollbar-container {\n padding: 0;\n max-height: ${e ? `${e}px` : `${r}rem`};\n\n .ps__rail-y {\n right: 0 !important;\n }\n }\n `;\n }\n);\n(styled_components__WEBPACK_IMPORTED_MODULE_1___default().div)`\n width: 300px;\n`;\nconst XS = (e, t) => {\n const {\n tabItems: o = [],\n activeTab: n = null,\n onChange: r,\n customTab: i,\n isZIndexReverse: a,\n maxHeight: s,\n ...l\n } = e;\n return /* @__PURE__ */ c(FS, { ref: t, ...l, maxHeight: s, children: /* @__PURE__ */ c(j4, { children: (() => o.map((d, b) => {\n const M = () => r(d), u = (d == null ? void 0 : d.children) === (n == null ? void 0 : n.children);\n return a && (d.style = {\n ...d.style,\n zIndex: o.length - b\n }), i ? i({\n ...d,\n isActive: u,\n key: (d == null ? void 0 : d.children) + (u ? "-selected" : "-not-selected") || b,\n onClick: M,\n orientation: H2.VERTICAL\n }) : /* @__PURE__ */ (0,react__WEBPACK_IMPORTED_MODULE_0__.createElement)(\n M6,\n {\n ...d,\n orientation: H2.VERTICAL,\n isActive: u,\n key: (d == null ? void 0 : d.children) + (u ? "-selected" : "-not-selected") || b,\n onClick: M\n }\n );\n }))() }) });\n}, Up = (0,react__WEBPACK_IMPORTED_MODULE_0__.forwardRef)(XS), US = ({\n filters: e,\n filterValues: t,\n handleFilterValue: o,\n clearFilter: n,\n setClearFilterId: r,\n maxVisibleFilters: i,\n tabsMaxHeight: a,\n enableFilterIndicatorDots: s\n}) => {\n const [l, p] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)([]), [d, b] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(null), [M, u] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(), A = (0,react__WEBPACK_IMPORTED_MODULE_0__.useRef)(null), z = (0,react__WEBPACK_IMPORTED_MODULE_0__.useRef)(null);\n (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => {\n l.length > 0 && b(l[0]);\n }, [l.length]);\n const f = (T) => {\n b(T);\n }, O = (T) => T.slice(i).map((w) => ({\n children: w.filterLabel ? w.filterLabel : r2(w.columnId),\n title: "",\n noDigit: s,\n badge: t[w.columnId] === void 0 ? 0 : w.type === "daterange" && Array.isArray(t[w.columnId]) ? t[w.columnId].length - 1 : Array.isArray(t[w.columnId]) ? t[w.columnId].length : 1\n }));\n (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => {\n p(O(e.filter((T) => T.enableFilter)));\n }, [e, t]);\n function h(T, w) {\n for (let H of w)\n if (H.columnId === T)\n return H.type;\n return null;\n }\n function g(T, w) {\n for (let H of T)\n if (H.columnId === w) {\n if (H.type === "input" || H.type === "amount")\n return H.settings.options;\n if (H.type === "dropdown" || H.type === "dropdown-multi" || H.type === "dropdown-multi-chip")\n return H.settings.options;\n }\n return null;\n }\n function v(T, w) {\n for (let H of T)\n if (H.columnId === w)\n return H.settings.value;\n return null;\n }\n const L = (T) => {\n r(T);\n };\n function y(T) {\n return T == null ? void 0 : T.map((w) => ({\n value: w,\n label: w\n }));\n }\n const B = (T, w, H, C) => {\n switch (L(T), w) {\n case "input":\n return /* @__PURE__ */ c((react__WEBPACK_IMPORTED_MODULE_0___default().Fragment), { children: /* @__PURE__ */ c(\n Ia,\n {\n label: C || r2(T),\n isRequired: !1,\n placeholder: C || r2(T),\n onChange: (x) => {\n o(T, x == null ? void 0 : x.target.value);\n },\n value: t[T] || "",\n hideClearButton: !0\n }\n ) }, T);\n case "dropdown":\n return /* @__PURE__ */ c((react__WEBPACK_IMPORTED_MODULE_0___default().Fragment), { children: /* @__PURE__ */ c(\n Gn,\n {\n placeholder: `Search ${C || r2(T)}`,\n isSearchable: !0,\n data: g(H, T),\n getFilteredValue: (x) => {\n const N = [x].map(\n (V) => V.value\n );\n o(T, N), u(x);\n },\n defaultValues: M,\n values: y(t[T])\n }\n ) }, T);\n case "daterange":\n const q = {\n min: null,\n max: null\n };\n return A != null && A.current && JSON.stringify(t) === "{}" && A.current.handleReset(q), /* @__PURE__ */ c(pS, { children: /* @__PURE__ */ c(\n Dp,\n {\n onChange: (x) => {\n o(T, [x.min, x.max]);\n },\n value: t[T] ? {\n min: t[T][0],\n max: t[T][1]\n } : {\n min: null,\n max: null\n },\n ref: A,\n min: t[T] ? t[T][0] : null,\n max: t[T] ? t[T][1] : null,\n hideClearBtn: !0\n }\n ) }, T);\n case "amount":\n const m = v(H, T), k = [0, 0];\n return z != null && z.current && JSON.stringify(t) === "{}" && z.current.handleReset(k), /* @__PURE__ */ c((react__WEBPACK_IMPORTED_MODULE_0___default().Fragment), { children: /* @__PURE__ */ c(\n Xl,\n {\n value: t[T] || k,\n onChange: (x) => {\n o(T, x);\n },\n ref: z,\n min: m != null && m.min ? m == null ? void 0 : m.min : null,\n max: m != null && m.max ? m == null ? void 0 : m.max : null,\n isValidation: !0,\n hideClearButton: !0\n }\n ) }, T);\n case "dropdown-multi":\n return /* @__PURE__ */ c((react__WEBPACK_IMPORTED_MODULE_0___default().Fragment), { children: /* @__PURE__ */ c(\n Gn,\n {\n placeholder: `Search ${C || r2(T)}`,\n isSearchable: !0,\n isMulti: !0,\n data: g(H, T),\n getFilteredValue: (x) => {\n const N = x.map(\n (V) => V.value\n );\n o(T, N), u(x);\n },\n defaultValues: JSON.stringify(t) === "{}" ? [] : u,\n values: JSON.stringify(t) === "{}" ? [] : y(t[T])\n }\n ) }, T);\n case "dropdown-multi-chip":\n return /* @__PURE__ */ c((react__WEBPACK_IMPORTED_MODULE_0___default().Fragment), { children: /* @__PURE__ */ c(\n Gn,\n {\n placeholder: `Search ${C || r2(T)}`,\n highLightSelectedOptions: !0,\n isSearchable: !0,\n isMulti: !0,\n data: g(H, T),\n getFilteredValue: (x) => {\n const N = x.map(\n (V) => V.value\n );\n o(T, N), u(x);\n },\n defaultValues: JSON.stringify(t) === "{}" ? [] : u,\n values: JSON.stringify(t) === "{}" ? [] : y(t[T])\n }\n ) }, T);\n default:\n return /* @__PURE__ */ c((react__WEBPACK_IMPORTED_MODULE_0___default().Fragment), { children: /* @__PURE__ */ c(\n Ia,\n {\n label: C || r2(T),\n isRequired: !1,\n placeholder: C || r2(T),\n onChange: (x) => {\n o(T, x == null ? void 0 : x.target.value);\n },\n value: t[T] || "",\n hideClearButton: !0\n }\n ) }, T);\n }\n }, X = () => {\n if (d) {\n const T = d.children, w = e.find(\n (H) => H.filterLabel ? H.filterLabel === T : r2(H.columnId) === T\n );\n if (w)\n return /* @__PURE__ */ c("div", { children: B(\n w.columnId,\n h(w.columnId, e) || "",\n e,\n w.filterLabel\n ) });\n }\n return null;\n };\n let F = a || 500;\n return /* @__PURE__ */ c(cS, { children: /* @__PURE__ */ e1(lS, { children: [\n /* @__PURE__ */ c(\n Qi,\n {\n $items: "tabs",\n $tabsMaxHeight: (l == null ? void 0 : l.length) >= 13,\n children: /* @__PURE__ */ c(\n Up,\n {\n tabItems: l,\n activeTab: d,\n onChange: f,\n maxHeight: F\n }\n )\n }\n ),\n /* @__PURE__ */ c(Qi, { $items: "divider", children: /* @__PURE__ */ c(P2, { $default: !0, orientation: "vertical", $hasMargin: !0 }) }),\n /* @__PURE__ */ c(Qi, { $items: "content", children: X() })\n ] }) });\n};\nfunction p9(e, t) {\n var o = Object.keys(e);\n if (Object.getOwnPropertySymbols) {\n var n = Object.getOwnPropertySymbols(e);\n t && (n = n.filter(function(r) {\n return Object.getOwnPropertyDescriptor(e, r).enumerable;\n })), o.push.apply(o, n);\n }\n return o;\n}\nfunction d9(e) {\n for (var t = 1; t < arguments.length; t++) {\n var o = arguments[t] != null ? arguments[t] : {};\n t % 2 ? p9(Object(o), !0).forEach(function(n) {\n t0(e, n, o[n]);\n }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(o)) : p9(Object(o)).forEach(function(n) {\n Object.defineProperty(e, n, Object.getOwnPropertyDescriptor(o, n));\n });\n }\n return e;\n}\nfunction N2(e) {\n return "Minified Redux error #" + e + "; visit https://redux.js.org/Errors?code=" + e + " for the full message or use the non-minified dev environment for full errors. ";\n}\nvar b9 = function() {\n return typeof Symbol == "function" && Symbol.observable || "@@observable";\n}(), Zi = function() {\n return Math.random().toString(36).substring(7).split("").join(".");\n}, M9 = {\n INIT: "@@redux/INIT" + Zi(),\n REPLACE: "@@redux/REPLACE" + Zi(),\n PROBE_UNKNOWN_ACTION: function() {\n return "@@redux/PROBE_UNKNOWN_ACTION" + Zi();\n }\n};\nfunction YS(e) {\n if (typeof e != "object" || e === null)\n return !1;\n for (var t = e; Object.getPrototypeOf(t) !== null; )\n t = Object.getPrototypeOf(t);\n return Object.getPrototypeOf(e) === t;\n}\nfunction GS(e) {\n if (e === void 0)\n return "undefined";\n if (e === null)\n return "null";\n var t = typeof e;\n switch (t) {\n case "boolean":\n case "string":\n case "number":\n case "symbol":\n case "function":\n return t;\n }\n if (Array.isArray(e))\n return "array";\n if (jS(e))\n return "date";\n if (ZS(e))\n return "error";\n var o = QS(e);\n switch (o) {\n case "Symbol":\n case "Promise":\n case "WeakMap":\n case "WeakSet":\n case "Map":\n case "Set":\n return o;\n }\n return t.slice(8, -1).toLowerCase().replace(/\\s/g, "");\n}\nfunction QS(e) {\n return typeof e.constructor == "function" ? e.constructor.name : null;\n}\nfunction ZS(e) {\n return e instanceof Error || typeof e.message == "string" && e.constructor && typeof e.constructor.stackTraceLimit == "number";\n}\nfunction jS(e) {\n return e instanceof Date ? !0 : typeof e.toDateString == "function" && typeof e.getDate == "function" && typeof e.setDate == "function";\n}\nfunction e3(e) {\n var t = typeof e;\n return false && (0), t;\n}\nfunction Yp(e, t, o) {\n var n;\n if (typeof t == "function" && typeof o == "function" || typeof o == "function" && typeof arguments[3] == "function")\n throw new Error( true ? N2(0) : 0);\n if (typeof t == "function" && typeof o > "u" && (o = t, t = void 0), typeof o < "u") {\n if (typeof o != "function")\n throw new Error( true ? N2(1) : 0);\n return o(Yp)(e, t);\n }\n if (typeof e != "function")\n throw new Error( true ? N2(2) : 0);\n var r = e, i = t, a = [], s = a, l = !1;\n function p() {\n s === a && (s = a.slice());\n }\n function d() {\n if (l)\n throw new Error( true ? N2(3) : 0);\n return i;\n }\n function b(z) {\n if (typeof z != "function")\n throw new Error( true ? N2(4) : 0);\n if (l)\n throw new Error( true ? N2(5) : 0);\n var f = !0;\n return p(), s.push(z), function() {\n if (f) {\n if (l)\n throw new Error( true ? N2(6) : 0);\n f = !1, p();\n var h = s.indexOf(z);\n s.splice(h, 1), a = null;\n }\n };\n }\n function M(z) {\n if (!YS(z))\n throw new Error( true ? N2(7) : 0);\n if (typeof z.type > "u")\n throw new Error( true ? N2(8) : 0);\n if (l)\n throw new Error( true ? N2(9) : 0);\n try {\n l = !0, i = r(i, z);\n } finally {\n l = !1;\n }\n for (var f = a = s, O = 0; O < f.length; O++) {\n var h = f[O];\n h();\n }\n return z;\n }\n function u(z) {\n if (typeof z != "function")\n throw new Error( true ? N2(10) : 0);\n r = z, M({\n type: M9.REPLACE\n });\n }\n function A() {\n var z, f = b;\n return z = {\n /**\n * The minimal observable subscription method.\n * @param {Object} observer Any object that can be used as an observer.\n * The observer object should have a `next` method.\n * @returns {subscription} An object with an `unsubscribe` method that can\n * be used to unsubscribe the observable from the store, and prevent further\n * emission of values from the observable.\n */\n subscribe: function(h) {\n if (typeof h != "object" || h === null)\n throw new Error( true ? N2(11) : 0);\n function g() {\n h.next && h.next(d());\n }\n g();\n var v = f(g);\n return {\n unsubscribe: v\n };\n }\n }, z[b9] = function() {\n return this;\n }, z;\n }\n return M({\n type: M9.INIT\n }), n = {\n dispatch: M,\n subscribe: b,\n getState: d,\n replaceReducer: u\n }, n[b9] = A, n;\n}\nfunction A9(e, t) {\n return function() {\n return t(e.apply(this, arguments));\n };\n}\nfunction u9(e, t) {\n if (typeof e == "function")\n return A9(e, t);\n if (typeof e != "object" || e === null)\n throw new Error( true ? N2(16) : 0);\n var o = {};\n for (var n in e) {\n var r = e[n];\n typeof r == "function" && (o[n] = A9(r, t));\n }\n return o;\n}\nfunction Gp() {\n for (var e = arguments.length, t = new Array(e), o = 0; o < e; o++)\n t[o] = arguments[o];\n return t.length === 0 ? function(n) {\n return n;\n } : t.length === 1 ? t[0] : t.reduce(function(n, r) {\n return function() {\n return n(r.apply(void 0, arguments));\n };\n });\n}\nfunction KS() {\n for (var e = arguments.length, t = new Array(e), o = 0; o < e; o++)\n t[o] = arguments[o];\n return function(n) {\n return function() {\n var r = n.apply(void 0, arguments), i = function() {\n throw new Error( true ? N2(15) : 0);\n }, a = {\n getState: r.getState,\n dispatch: function() {\n return i.apply(void 0, arguments);\n }\n }, s = t.map(function(l) {\n return l(a);\n });\n return i = Gp.apply(void 0, s)(r.dispatch), d9(d9({}, r), {}, {\n dispatch: i\n });\n };\n };\n}\nvar A6 = /* @__PURE__ */ react__WEBPACK_IMPORTED_MODULE_0___default().createContext(null);\n false && (0);\nfunction JS(e) {\n e();\n}\nvar Qp = JS, _S = function(t) {\n return Qp = t;\n}, $S = function() {\n return Qp;\n};\nfunction eE() {\n var e = $S(), t = null, o = null;\n return {\n clear: function() {\n t = null, o = null;\n },\n notify: function() {\n e(function() {\n for (var r = t; r; )\n r.callback(), r = r.next;\n });\n },\n get: function() {\n for (var r = [], i = t; i; )\n r.push(i), i = i.next;\n return r;\n },\n subscribe: function(r) {\n var i = !0, a = o = {\n callback: r,\n next: null,\n prev: o\n };\n return a.prev ? a.prev.next = a : t = a, function() {\n !i || t === null || (i = !1, a.next ? a.next.prev = a.prev : o = a.prev, a.prev ? a.prev.next = a.next : t = a.next);\n };\n }\n };\n}\nvar z9 = {\n notify: function() {\n },\n get: function() {\n return [];\n }\n};\nfunction Zp(e, t) {\n var o, n = z9;\n function r(b) {\n return l(), n.subscribe(b);\n }\n function i() {\n n.notify();\n }\n function a() {\n d.onStateChange && d.onStateChange();\n }\n function s() {\n return !!o;\n }\n function l() {\n o || (o = t ? t.addNestedSub(a) : e.subscribe(a), n = eE());\n }\n function p() {\n o && (o(), o = void 0, n.clear(), n = z9);\n }\n var d = {\n addNestedSub: r,\n notifyNestedSubs: i,\n handleChangeWrapper: a,\n isSubscribed: s,\n trySubscribe: l,\n tryUnsubscribe: p,\n getListeners: function() {\n return n;\n }\n };\n return d;\n}\nvar jp = typeof window < "u" && typeof window.document < "u" && typeof window.document.createElement < "u" ? react__WEBPACK_IMPORTED_MODULE_0__.useLayoutEffect : react__WEBPACK_IMPORTED_MODULE_0__.useEffect;\nfunction Kp(e) {\n var t = e.store, o = e.context, n = e.children, r = (0,react__WEBPACK_IMPORTED_MODULE_0__.useMemo)(function() {\n var s = Zp(t);\n return {\n store: t,\n subscription: s\n };\n }, [t]), i = (0,react__WEBPACK_IMPORTED_MODULE_0__.useMemo)(function() {\n return t.getState();\n }, [t]);\n jp(function() {\n var s = r.subscription;\n return s.onStateChange = s.notifyNestedSubs, s.trySubscribe(), i !== t.getState() && s.notifyNestedSubs(), function() {\n s.tryUnsubscribe(), s.onStateChange = null;\n };\n }, [r, i]);\n var a = o || A6;\n return /* @__PURE__ */ react__WEBPACK_IMPORTED_MODULE_0___default().createElement(a.Provider, {\n value: r\n }, n);\n}\n false && (0);\nvar u6 = s6(), tE = {\n childContextTypes: !0,\n contextType: !0,\n contextTypes: !0,\n defaultProps: !0,\n displayName: !0,\n getDefaultProps: !0,\n getDerivedStateFromError: !0,\n getDerivedStateFromProps: !0,\n mixins: !0,\n propTypes: !0,\n type: !0\n}, oE = {\n name: !0,\n length: !0,\n prototype: !0,\n caller: !0,\n callee: !0,\n arguments: !0,\n arity: !0\n}, rE = {\n $$typeof: !0,\n render: !0,\n defaultProps: !0,\n displayName: !0,\n propTypes: !0\n}, Jp = {\n $$typeof: !0,\n compare: !0,\n defaultProps: !0,\n displayName: !0,\n propTypes: !0,\n type: !0\n}, z6 = {};\nz6[u6.ForwardRef] = rE;\nz6[u6.Memo] = Jp;\nfunction h9(e) {\n return u6.isMemo(e) ? Jp : z6[e.$$typeof] || tE;\n}\nvar nE = Object.defineProperty, iE = Object.getOwnPropertyNames, O9 = Object.getOwnPropertySymbols, aE = Object.getOwnPropertyDescriptor, sE = Object.getPrototypeOf, f9 = Object.prototype;\nfunction _p(e, t, o) {\n if (typeof t != "string") {\n if (f9) {\n var n = sE(t);\n n && n !== f9 && _p(e, n, o);\n }\n var r = iE(t);\n O9 && (r = r.concat(O9(t)));\n for (var i = h9(e), a = h9(t), s = 0; s < r.length; ++s) {\n var l = r[s];\n if (!oE[l] && !(o && o[l]) && !(a && a[l]) && !(i && i[l])) {\n var p = aE(t, l);\n try {\n nE(e, l, p);\n } catch {\n }\n }\n }\n }\n return e;\n}\nvar cE = _p;\nconst g9 = /* @__PURE__ */ Q2(cE);\nvar c5 = { exports: {} }, X0 = {};\n/** @license React v17.0.2\n * react-is.production.min.js\n *\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\nvar C9;\nfunction lE() {\n if (C9)\n return X0;\n C9 = 1;\n var e = 60103, t = 60106, o = 60107, n = 60108, r = 60114, i = 60109, a = 60110, s = 60112, l = 60113, p = 60120, d = 60115, b = 60116, M = 60121, u = 60122, A = 60117, z = 60129, f = 60131;\n if (typeof Symbol == "function" && Symbol.for) {\n var O = Symbol.for;\n e = O("react.element"), t = O("react.portal"), o = O("react.fragment"), n = O("react.strict_mode"), r = O("react.profiler"), i = O("react.provider"), a = O("react.context"), s = O("react.forward_ref"), l = O("react.suspense"), p = O("react.suspense_list"), d = O("react.memo"), b = O("react.lazy"), M = O("react.block"), u = O("react.server.block"), A = O("react.fundamental"), z = O("react.debug_trace_mode"), f = O("react.legacy_hidden");\n }\n function h(C) {\n if (typeof C == "object" && C !== null) {\n var q = C.$$typeof;\n switch (q) {\n case e:\n switch (C = C.type, C) {\n case o:\n case r:\n case n:\n case l:\n case p:\n return C;\n default:\n switch (C = C && C.$$typeof, C) {\n case a:\n case s:\n case b:\n case d:\n case i:\n return C;\n default:\n return q;\n }\n }\n case t:\n return q;\n }\n }\n }\n var g = i, v = e, L = s, y = o, B = b, X = d, F = t, T = r, w = n, H = l;\n return X0.ContextConsumer = a, X0.ContextProvider = g, X0.Element = v, X0.ForwardRef = L, X0.Fragment = y, X0.Lazy = B, X0.Memo = X, X0.Portal = F, X0.Profiler = T, X0.StrictMode = w, X0.Suspense = H, X0.isAsyncMode = function() {\n return !1;\n }, X0.isConcurrentMode = function() {\n return !1;\n }, X0.isContextConsumer = function(C) {\n return h(C) === a;\n }, X0.isContextProvider = function(C) {\n return h(C) === i;\n }, X0.isElement = function(C) {\n return typeof C == "object" && C !== null && C.$$typeof === e;\n }, X0.isForwardRef = function(C) {\n return h(C) === s;\n }, X0.isFragment = function(C) {\n return h(C) === o;\n }, X0.isLazy = function(C) {\n return h(C) === b;\n }, X0.isMemo = function(C) {\n return h(C) === d;\n }, X0.isPortal = function(C) {\n return h(C) === t;\n }, X0.isProfiler = function(C) {\n return h(C) === r;\n }, X0.isStrictMode = function(C) {\n return h(C) === n;\n }, X0.isSuspense = function(C) {\n return h(C) === l;\n }, X0.isValidElementType = function(C) {\n return typeof C == "string" || typeof C == "function" || C === o || C === r || C === z || C === n || C === l || C === p || C === f || typeof C == "object" && C !== null && (C.$$typeof === b || C.$$typeof === d || C.$$typeof === i || C.$$typeof === a || C.$$typeof === s || C.$$typeof === A || C.$$typeof === M || C[0] === u);\n }, X0.typeOf = h, X0;\n}\nvar U0 = {};\n/** @license React v17.0.2\n * react-is.development.js\n *\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\nvar m9;\nfunction pE() {\n return m9 || (m9 = 1, false && 0), U0;\n}\n true ? c5.exports = lE() : 0;\nvar L9 = c5.exports, dE = ["getDisplayName", "methodName", "renderCountProp", "shouldHandleStateChanges", "storeKey", "withRef", "forwardRef", "context"], bE = ["reactReduxForwardedRef"], ME = [], AE = [null, null], uE = function(t) {\n try {\n return JSON.stringify(t);\n } catch {\n return String(t);\n }\n};\nfunction zE(e, t) {\n var o = e[1];\n return [t.payload, o + 1];\n}\nfunction v9(e, t, o) {\n jp(function() {\n return e.apply(void 0, t);\n }, o);\n}\nfunction hE(e, t, o, n, r, i, a) {\n e.current = n, t.current = r, o.current = !1, i.current && (i.current = null, a());\n}\nfunction OE(e, t, o, n, r, i, a, s, l, p) {\n if (e) {\n var d = !1, b = null, M = function() {\n if (!d) {\n var z = t.getState(), f, O;\n try {\n f = n(z, r.current);\n } catch (h) {\n O = h, b = h;\n }\n O || (b = null), f === i.current ? a.current || l() : (i.current = f, s.current = f, a.current = !0, p({\n type: "STORE_UPDATED",\n payload: {\n error: O\n }\n }));\n }\n };\n o.onStateChange = M, o.trySubscribe(), M();\n var u = function() {\n if (d = !0, o.tryUnsubscribe(), o.onStateChange = null, b)\n throw b;\n };\n return u;\n }\n}\nvar fE = function() {\n return [null, 0];\n};\nfunction gE(e, t) {\n t === void 0 && (t = {});\n var o = t, n = o.getDisplayName, r = n === void 0 ? function(y) {\n return "ConnectAdvanced(" + y + ")";\n } : n, i = o.methodName, a = i === void 0 ? "connectAdvanced" : i, s = o.renderCountProp, l = s === void 0 ? void 0 : s, p = o.shouldHandleStateChanges, d = p === void 0 ? !0 : p, b = o.storeKey, M = b === void 0 ? "store" : b, u = o.withRef, A = u === void 0 ? !1 : u, z = o.forwardRef, f = z === void 0 ? !1 : z, O = o.context, h = O === void 0 ? A6 : O, g = ar(o, dE);\n if (false) { var v; }\n var L = h;\n return function(B) {\n if (false)\n {}\n var X = B.displayName || B.name || "Component", F = r(X), T = a0({}, g, {\n getDisplayName: r,\n methodName: a,\n renderCountProp: l,\n shouldHandleStateChanges: d,\n storeKey: M,\n displayName: F,\n wrappedComponentName: X,\n WrappedComponent: B\n }), w = g.pure;\n function H(x) {\n return e(x.dispatch, T);\n }\n var C = w ? react__WEBPACK_IMPORTED_MODULE_0__.useMemo : function(x) {\n return x();\n };\n function q(x) {\n var N = (0,react__WEBPACK_IMPORTED_MODULE_0__.useMemo)(function() {\n var c1 = x.reactReduxForwardedRef, a1 = ar(x, bE);\n return [x.context, c1, a1];\n }, [x]), V = N[0], R = N[1], I = N[2], j = (0,react__WEBPACK_IMPORTED_MODULE_0__.useMemo)(function() {\n return V && V.Consumer && L9.isContextConsumer(/* @__PURE__ */ react__WEBPACK_IMPORTED_MODULE_0___default().createElement(V.Consumer, null)) ? V : L;\n }, [V, L]), U = (0,react__WEBPACK_IMPORTED_MODULE_0__.useContext)(j), _ = !!x.store && !!x.store.getState && !!x.store.dispatch, r1 = !!U && !!U.store;\n if (false)\n {}\n var K = _ ? x.store : U.store, Q = (0,react__WEBPACK_IMPORTED_MODULE_0__.useMemo)(function() {\n return H(K);\n }, [K]), E = (0,react__WEBPACK_IMPORTED_MODULE_0__.useMemo)(function() {\n if (!d)\n return AE;\n var c1 = Zp(K, _ ? null : U.subscription), a1 = c1.notifyNestedSubs.bind(c1);\n return [c1, a1];\n }, [K, _, U]), D = E[0], G = E[1], J = (0,react__WEBPACK_IMPORTED_MODULE_0__.useMemo)(function() {\n return _ ? U : a0({}, U, {\n subscription: D\n });\n }, [_, U, D]), S = (0,react__WEBPACK_IMPORTED_MODULE_0__.useReducer)(zE, ME, fE), W = S[0], P = W[0], Y = S[1];\n if (P && P.error)\n throw P.error;\n var Z = (0,react__WEBPACK_IMPORTED_MODULE_0__.useRef)(), t1 = (0,react__WEBPACK_IMPORTED_MODULE_0__.useRef)(I), i1 = (0,react__WEBPACK_IMPORTED_MODULE_0__.useRef)(), n1 = (0,react__WEBPACK_IMPORTED_MODULE_0__.useRef)(!1), s1 = C(function() {\n return i1.current && I === t1.current ? i1.current : Q(K.getState(), I);\n }, [K, P, I]);\n v9(hE, [t1, Z, n1, I, s1, i1, G]), v9(OE, [d, K, D, Q, t1, Z, n1, i1, G, Y], [K, D, Q]);\n var d1 = (0,react__WEBPACK_IMPORTED_MODULE_0__.useMemo)(function() {\n return /* @__PURE__ */ react__WEBPACK_IMPORTED_MODULE_0___default().createElement(B, a0({}, s1, {\n ref: R\n }));\n }, [R, B, s1]), b1 = (0,react__WEBPACK_IMPORTED_MODULE_0__.useMemo)(function() {\n return d ? /* @__PURE__ */ react__WEBPACK_IMPORTED_MODULE_0___default().createElement(j.Provider, {\n value: J\n }, d1) : d1;\n }, [j, d1, J]);\n return b1;\n }\n var m = w ? react__WEBPACK_IMPORTED_MODULE_0___default().memo(q) : q;\n if (m.WrappedComponent = B, m.displayName = q.displayName = F, f) {\n var k = react__WEBPACK_IMPORTED_MODULE_0___default().forwardRef(function(N, V) {\n return /* @__PURE__ */ react__WEBPACK_IMPORTED_MODULE_0___default().createElement(m, a0({}, N, {\n reactReduxForwardedRef: V\n }));\n });\n return k.displayName = F, k.WrappedComponent = B, g9(k, B);\n }\n return g9(m, B);\n };\n}\nfunction q9(e, t) {\n return e === t ? e !== 0 || t !== 0 || 1 / e === 1 / t : e !== e && t !== t;\n}\nfunction ji(e, t) {\n if (q9(e, t))\n return !0;\n if (typeof e != "object" || e === null || typeof t != "object" || t === null)\n return !1;\n var o = Object.keys(e), n = Object.keys(t);\n if (o.length !== n.length)\n return !1;\n for (var r = 0; r < o.length; r++)\n if (!Object.prototype.hasOwnProperty.call(t, o[r]) || !q9(e[o[r]], t[o[r]]))\n return !1;\n return !0;\n}\nfunction CE(e, t) {\n var o = {}, n = function(a) {\n var s = e[a];\n typeof s == "function" && (o[a] = function() {\n return t(s.apply(void 0, arguments));\n });\n };\n for (var r in e)\n n(r);\n return o;\n}\nfunction mE(e) {\n if (typeof e != "object" || e === null)\n return !1;\n var t = Object.getPrototypeOf(e);\n if (t === null)\n return !0;\n for (var o = t; Object.getPrototypeOf(o) !== null; )\n o = Object.getPrototypeOf(o);\n return t === o;\n}\nfunction $p(e) {\n typeof console < "u" && typeof console.error == "function" && console.error(e);\n try {\n throw new Error(e);\n } catch {\n }\n}\nfunction ed(e, t, o) {\n mE(e) || $p(o + "() in " + t + " must return a plain object. Instead received " + e + ".");\n}\nfunction h6(e) {\n return function(o, n) {\n var r = e(o, n);\n function i() {\n return r;\n }\n return i.dependsOnOwnProps = !1, i;\n };\n}\nfunction y9(e) {\n return e.dependsOnOwnProps !== null && e.dependsOnOwnProps !== void 0 ? !!e.dependsOnOwnProps : e.length !== 1;\n}\nfunction td(e, t) {\n return function(n, r) {\n var i = r.displayName, a = function(l, p) {\n return a.dependsOnOwnProps ? a.mapToProps(l, p) : a.mapToProps(l);\n };\n return a.dependsOnOwnProps = !0, a.mapToProps = function(l, p) {\n a.mapToProps = e, a.dependsOnOwnProps = y9(e);\n var d = a(l, p);\n return typeof d == "function" && (a.mapToProps = d, a.dependsOnOwnProps = y9(d), d = a(l, p)), false && 0, d;\n }, a;\n };\n}\nfunction LE(e) {\n return typeof e == "function" ? td(e, "mapDispatchToProps") : void 0;\n}\nfunction vE(e) {\n return e ? void 0 : h6(function(t) {\n return {\n dispatch: t\n };\n });\n}\nfunction qE(e) {\n return e && typeof e == "object" ? h6(function(t) {\n return CE(e, t);\n }) : void 0;\n}\nconst yE = [LE, vE, qE];\nfunction wE(e) {\n return typeof e == "function" ? td(e, "mapStateToProps") : void 0;\n}\nfunction xE(e) {\n return e ? void 0 : h6(function() {\n return {};\n });\n}\nconst WE = [wE, xE];\nfunction RE(e, t, o) {\n return a0({}, o, e, t);\n}\nfunction BE(e) {\n return function(o, n) {\n var r = n.displayName, i = n.pure, a = n.areMergedPropsEqual, s = !1, l;\n return function(d, b, M) {\n var u = e(d, b, M);\n return s ? (!i || !a(u, l)) && (l = u) : (s = !0, l = u, false && 0), l;\n };\n };\n}\nfunction SE(e) {\n return typeof e == "function" ? BE(e) : void 0;\n}\nfunction EE(e) {\n return e ? void 0 : function() {\n return RE;\n };\n}\nconst kE = [SE, EE];\nfunction Ki(e, t, o) {\n if (e)\n (t === "mapStateToProps" || t === "mapDispatchToProps") && (Object.prototype.hasOwnProperty.call(e, "dependsOnOwnProps") || $p("The selector for " + t + " of " + o + " did not specify a value for dependsOnOwnProps."));\n else\n throw new Error("Unexpected value for " + t + " in " + o + ".");\n}\nfunction NE(e, t, o, n) {\n Ki(e, "mapStateToProps", n), Ki(t, "mapDispatchToProps", n), Ki(o, "mergeProps", n);\n}\nvar TE = ["initMapStateToProps", "initMapDispatchToProps", "initMergeProps"];\nfunction IE(e, t, o, n) {\n return function(i, a) {\n return o(e(i, a), t(n, a), a);\n };\n}\nfunction DE(e, t, o, n, r) {\n var i = r.areStatesEqual, a = r.areOwnPropsEqual, s = r.areStatePropsEqual, l = !1, p, d, b, M, u;\n function A(g, v) {\n return p = g, d = v, b = e(p, d), M = t(n, d), u = o(b, M, d), l = !0, u;\n }\n function z() {\n return b = e(p, d), t.dependsOnOwnProps && (M = t(n, d)), u = o(b, M, d), u;\n }\n function f() {\n return e.dependsOnOwnProps && (b = e(p, d)), t.dependsOnOwnProps && (M = t(n, d)), u = o(b, M, d), u;\n }\n function O() {\n var g = e(p, d), v = !s(g, b);\n return b = g, v && (u = o(b, M, d)), u;\n }\n function h(g, v) {\n var L = !a(v, d), y = !i(g, p, v, d);\n return p = g, d = v, L && y ? z() : L ? f() : y ? O() : u;\n }\n return function(v, L) {\n return l ? h(v, L) : A(v, L);\n };\n}\nfunction HE(e, t) {\n var o = t.initMapStateToProps, n = t.initMapDispatchToProps, r = t.initMergeProps, i = ar(t, TE), a = o(e, i), s = n(e, i), l = r(e, i);\n false && 0;\n var p = i.pure ? DE : IE;\n return p(a, s, l, e, i);\n}\nvar VE = ["pure", "areStatesEqual", "areOwnPropsEqual", "areStatePropsEqual", "areMergedPropsEqual"];\nfunction Ji(e, t, o) {\n for (var n = t.length - 1; n >= 0; n--) {\n var r = t[n](e);\n if (r)\n return r;\n }\n return function(i, a) {\n throw new Error("Invalid value of type " + typeof e + " for " + o + " argument when connecting component " + a.wrappedComponentName + ".");\n };\n}\nfunction PE(e, t) {\n return e === t;\n}\nfunction FE(e) {\n var t = e === void 0 ? {} : e, o = t.connectHOC, n = o === void 0 ? gE : o, r = t.mapStateToPropsFactories, i = r === void 0 ? WE : r, a = t.mapDispatchToPropsFactories, s = a === void 0 ? yE : a, l = t.mergePropsFactories, p = l === void 0 ? kE : l, d = t.selectorFactory, b = d === void 0 ? HE : d;\n return function(u, A, z, f) {\n f === void 0 && (f = {});\n var O = f, h = O.pure, g = h === void 0 ? !0 : h, v = O.areStatesEqual, L = v === void 0 ? PE : v, y = O.areOwnPropsEqual, B = y === void 0 ? ji : y, X = O.areStatePropsEqual, F = X === void 0 ? ji : X, T = O.areMergedPropsEqual, w = T === void 0 ? ji : T, H = ar(O, VE), C = Ji(u, i, "mapStateToProps"), q = Ji(A, s, "mapDispatchToProps"), m = Ji(z, p, "mergeProps");\n return n(b, a0({\n // used in error messages\n methodName: "connect",\n // used to compute Connect\'s displayName from the wrapped component\'s displayName.\n getDisplayName: function(x) {\n return "Connect(" + x + ")";\n },\n // if mapStateToProps is falsy, the Connect component doesn\'t subscribe to store state changes\n shouldHandleStateChanges: !!u,\n // passed through to selectorFactory\n initMapStateToProps: C,\n initMapDispatchToProps: q,\n initMergeProps: m,\n pure: g,\n areStatesEqual: L,\n areOwnPropsEqual: B,\n areStatePropsEqual: F,\n areMergedPropsEqual: w\n }, H));\n };\n}\nconst od = /* @__PURE__ */ FE();\n_S(react_dom__WEBPACK_IMPORTED_MODULE_2__.unstable_batchedUpdates);\nfunction XE(e, t) {\n if (e.length !== t.length)\n return !1;\n for (var o = 0; o < e.length; o++)\n if (e[o] !== t[o])\n return !1;\n return !0;\n}\nfunction rd(e, t) {\n var o = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(function() {\n return {\n inputs: t,\n result: e()\n };\n })[0], n = (0,react__WEBPACK_IMPORTED_MODULE_0__.useRef)(!0), r = (0,react__WEBPACK_IMPORTED_MODULE_0__.useRef)(o), i = n.current || !!(t && r.current.inputs && XE(t, r.current.inputs)), a = i ? r.current : {\n inputs: t,\n result: e()\n };\n return (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(function() {\n n.current = !1, r.current = a;\n }, [a]), a.result;\n}\nfunction UE(e, t) {\n return rd(function() {\n return e;\n }, t);\n}\nvar R0 = rd, l0 = UE, YE = "production" === "production", _i = "Invariant failed";\nfunction w9(e, t) {\n if (!e) {\n if (YE)\n throw new Error(_i);\n var o = typeof t == "function" ? t() : t, n = o ? "".concat(_i, ": ").concat(o) : _i;\n throw new Error(n);\n }\n}\nvar Ce = function(t) {\n var o = t.top, n = t.right, r = t.bottom, i = t.left, a = n - i, s = r - o, l = {\n top: o,\n right: n,\n bottom: r,\n left: i,\n width: a,\n height: s,\n x: i,\n y: o,\n center: {\n x: (n + i) / 2,\n y: (r + o) / 2\n }\n };\n return l;\n}, O6 = function(t, o) {\n return {\n top: t.top - o.top,\n left: t.left - o.left,\n bottom: t.bottom + o.bottom,\n right: t.right + o.right\n };\n}, x9 = function(t, o) {\n return {\n top: t.top + o.top,\n left: t.left + o.left,\n bottom: t.bottom - o.bottom,\n right: t.right - o.right\n };\n}, GE = function(t, o) {\n return {\n top: t.top + o.y,\n left: t.left + o.x,\n bottom: t.bottom + o.y,\n right: t.right + o.x\n };\n}, $i = {\n top: 0,\n right: 0,\n bottom: 0,\n left: 0\n}, f6 = function(t) {\n var o = t.borderBox, n = t.margin, r = n === void 0 ? $i : n, i = t.border, a = i === void 0 ? $i : i, s = t.padding, l = s === void 0 ? $i : s, p = Ce(O6(o, r)), d = Ce(x9(o, a)), b = Ce(x9(d, l));\n return {\n marginBox: p,\n borderBox: Ce(o),\n paddingBox: d,\n contentBox: b,\n margin: r,\n border: a,\n padding: l\n };\n}, ne = function(t) {\n var o = t.slice(0, -2), n = t.slice(-2);\n if (n !== "px")\n return 0;\n var r = Number(o);\n return isNaN(r) && ( false ? 0 : w9(!1)), r;\n}, QE = function() {\n return {\n x: window.pageXOffset,\n y: window.pageYOffset\n };\n}, v4 = function(t, o) {\n var n = t.borderBox, r = t.border, i = t.margin, a = t.padding, s = GE(n, o);\n return f6({\n borderBox: s,\n border: r,\n margin: i,\n padding: a\n });\n}, q4 = function(t, o) {\n return o === void 0 && (o = QE()), v4(t, o);\n}, nd = function(t, o) {\n var n = {\n top: ne(o.marginTop),\n right: ne(o.marginRight),\n bottom: ne(o.marginBottom),\n left: ne(o.marginLeft)\n }, r = {\n top: ne(o.paddingTop),\n right: ne(o.paddingRight),\n bottom: ne(o.paddingBottom),\n left: ne(o.paddingLeft)\n }, i = {\n top: ne(o.borderTopWidth),\n right: ne(o.borderRightWidth),\n bottom: ne(o.borderBottomWidth),\n left: ne(o.borderLeftWidth)\n };\n return f6({\n borderBox: t,\n margin: n,\n padding: r,\n border: i\n });\n}, id = function(t) {\n var o = t.getBoundingClientRect(), n = window.getComputedStyle(t);\n return nd(o, n);\n}, ZE = function(t) {\n var o = [], n = null, r = function() {\n for (var a = arguments.length, s = new Array(a), l = 0; l < a; l++)\n s[l] = arguments[l];\n o = s, !n && (n = requestAnimationFrame(function() {\n n = null, t.apply(void 0, o);\n }));\n };\n return r.cancel = function() {\n n && (cancelAnimationFrame(n), n = null);\n }, r;\n};\nconst Or = ZE;\nvar jE = "production" === "production", KE = /[ \\t]{2,}/g, JE = /^[ \\t]*/gm, W9 = function(t) {\n return t.replace(KE, " ").replace(JE, "").trim();\n}, _E = function(t) {\n return W9(`\n %creact-beautiful-dnd\n\n %c` + W9(t) + `\n\n %c👷‍ This is a development only message. It will be removed in production builds.\n`);\n}, $E = function(t) {\n return [_E(t), "color: #00C584; font-size: 1.2em; font-weight: bold;", "line-height: 1.5", "color: #723874;"];\n}, ek = "__react-beautiful-dnd-disable-dev-warnings";\nfunction ad(e, t) {\n var o;\n jE || typeof window < "u" && window[ek] || (o = console)[e].apply(o, $E(t));\n}\nvar Z0 = ad.bind(null, "warn"), l5 = ad.bind(null, "error");\nfunction Et() {\n}\nfunction tk(e, t) {\n return a0({}, e, {}, t);\n}\nfunction se(e, t, o) {\n var n = t.map(function(r) {\n var i = tk(o, r.options);\n return e.addEventListener(r.eventName, r.fn, i), function() {\n e.removeEventListener(r.eventName, r.fn, i);\n };\n });\n return function() {\n n.forEach(function(i) {\n i();\n });\n };\n}\nvar ok = "production" === "production", R9 = "Invariant failed";\nfunction fr(e) {\n this.message = e;\n}\nfr.prototype.toString = function() {\n return this.message;\n};\nfunction y1(e, t) {\n if (!e)\n throw ok ? new fr(R9) : new fr(R9 + ": " + (t || ""));\n}\nvar rk = function(e) {\n V4(t, e);\n function t() {\n for (var n, r = arguments.length, i = new Array(r), a = 0; a < r; a++)\n i[a] = arguments[a];\n return n = e.call.apply(e, [this].concat(i)) || this, n.callbacks = null, n.unbind = Et, n.onWindowError = function(s) {\n var l = n.getCallbacks();\n l.isDragging() && (l.tryAbort(), false && 0);\n var p = s.error;\n p instanceof fr && (s.preventDefault(), false && 0);\n }, n.getCallbacks = function() {\n if (!n.callbacks)\n throw new Error("Unable to find AppCallbacks in ");\n return n.callbacks;\n }, n.setCallbacks = function(s) {\n n.callbacks = s;\n }, n;\n }\n var o = t.prototype;\n return o.componentDidMount = function() {\n this.unbind = se(window, [{\n eventName: "error",\n fn: this.onWindowError\n }]);\n }, o.componentDidCatch = function(r) {\n if (r instanceof fr) {\n false && 0, this.setState({});\n return;\n }\n throw r;\n }, o.componentWillUnmount = function() {\n this.unbind();\n }, o.render = function() {\n return this.props.children(this.setCallbacks);\n }, t;\n}((react__WEBPACK_IMPORTED_MODULE_0___default().Component)), nk = `\n Press space bar to start a drag.\n When dragging you can use the arrow keys to move the item around and escape to cancel.\n Some screen readers may require you to be in focus mode or to use your pass through key\n`, y4 = function(t) {\n return t + 1;\n}, ik = function(t) {\n return `\n You have lifted an item in position ` + y4(t.source.index) + `\n`;\n}, sd = function(t, o) {\n var n = t.droppableId === o.droppableId, r = y4(t.index), i = y4(o.index);\n return n ? `\n You have moved the item from position ` + r + `\n to position ` + i + `\n ` : `\n You have moved the item from position ` + r + `\n in list ` + t.droppableId + `\n to list ` + o.droppableId + `\n in position ` + i + `\n `;\n}, cd = function(t, o, n) {\n var r = o.droppableId === n.droppableId;\n return r ? `\n The item ` + t + `\n has been combined with ` + n.draggableId : `\n The item ` + t + `\n in list ` + o.droppableId + `\n has been combined with ` + n.draggableId + `\n in list ` + n.droppableId + `\n `;\n}, ak = function(t) {\n var o = t.destination;\n if (o)\n return sd(t.source, o);\n var n = t.combine;\n return n ? cd(t.draggableId, t.source, n) : "You are over an area that cannot be dropped on";\n}, B9 = function(t) {\n return `\n The item has returned to its starting position\n of ` + y4(t.index) + `\n`;\n}, sk = function(t) {\n if (t.reason === "CANCEL")\n return `\n Movement cancelled.\n ` + B9(t.source) + `\n `;\n var o = t.destination, n = t.combine;\n return o ? `\n You have dropped the item.\n ` + sd(t.source, o) + `\n ` : n ? `\n You have dropped the item.\n ` + cd(t.draggableId, t.source, n) + `\n ` : `\n The item has been dropped while not over a drop area.\n ` + B9(t.source) + `\n `;\n}, Zn = {\n dragHandleUsageInstructions: nk,\n onDragStart: ik,\n onDragUpdate: ak,\n onDragEnd: sk\n}, u2 = {\n x: 0,\n y: 0\n}, C2 = function(t, o) {\n return {\n x: t.x + o.x,\n y: t.y + o.y\n };\n}, _2 = function(t, o) {\n return {\n x: t.x - o.x,\n y: t.y - o.y\n };\n}, kt = function(t, o) {\n return t.x === o.x && t.y === o.y;\n}, lo = function(t) {\n return {\n x: t.x !== 0 ? -t.x : 0,\n y: t.y !== 0 ? -t.y : 0\n };\n}, z3 = function(t, o, n) {\n var r;\n return n === void 0 && (n = 0), r = {}, r[t] = o, r[t === "x" ? "y" : "x"] = n, r;\n}, gr = function(t, o) {\n return Math.sqrt(Math.pow(o.x - t.x, 2) + Math.pow(o.y - t.y, 2));\n}, S9 = function(t, o) {\n return Math.min.apply(Math, o.map(function(n) {\n return gr(t, n);\n }));\n}, ld = function(t) {\n return function(o) {\n return {\n x: t(o.x),\n y: t(o.y)\n };\n };\n}, ck = function(e, t) {\n var o = Ce({\n top: Math.max(t.top, e.top),\n right: Math.min(t.right, e.right),\n bottom: Math.min(t.bottom, e.bottom),\n left: Math.max(t.left, e.left)\n });\n return o.width <= 0 || o.height <= 0 ? null : o;\n}, Dr = function(t, o) {\n return {\n top: t.top + o.y,\n left: t.left + o.x,\n bottom: t.bottom + o.y,\n right: t.right + o.x\n };\n}, E9 = function(t) {\n return [{\n x: t.left,\n y: t.top\n }, {\n x: t.right,\n y: t.top\n }, {\n x: t.left,\n y: t.bottom\n }, {\n x: t.right,\n y: t.bottom\n }];\n}, lk = {\n top: 0,\n right: 0,\n bottom: 0,\n left: 0\n}, pk = function(t, o) {\n return o ? Dr(t, o.scroll.diff.displacement) : t;\n}, dk = function(t, o, n) {\n if (n && n.increasedBy) {\n var r;\n return a0({}, t, (r = {}, r[o.end] = t[o.end] + n.increasedBy[o.line], r));\n }\n return t;\n}, bk = function(t, o) {\n return o && o.shouldClipSubject ? ck(o.pageMarginBox, t) : Ce(t);\n}, eo = function(e) {\n var t = e.page, o = e.withPlaceholder, n = e.axis, r = e.frame, i = pk(t.marginBox, r), a = dk(i, n, o), s = bk(a, r);\n return {\n page: t,\n withPlaceholder: o,\n active: s\n };\n}, g6 = function(e, t) {\n e.frame || ("production", y1(!1));\n var o = e.frame, n = _2(t, o.scroll.initial), r = lo(n), i = a0({}, o, {\n scroll: {\n initial: o.scroll.initial,\n current: t,\n diff: {\n value: n,\n displacement: r\n },\n max: o.scroll.max\n }\n }), a = eo({\n page: e.subject.page,\n withPlaceholder: e.subject.withPlaceholder,\n axis: e.axis,\n frame: i\n }), s = a0({}, e, {\n frame: i,\n subject: a\n });\n return s;\n};\nfunction Mk(e) {\n return Number.isInteger ? Number.isInteger(e) : typeof e == "number" && isFinite(e) && Math.floor(e) === e;\n}\nfunction w4(e) {\n return Object.values ? Object.values(e) : Object.keys(e).map(function(t) {\n return e[t];\n });\n}\nfunction C6(e, t) {\n if (e.findIndex)\n return e.findIndex(t);\n for (var o = 0; o < e.length; o++)\n if (t(e[o]))\n return o;\n return -1;\n}\nfunction Ut(e, t) {\n if (e.find)\n return e.find(t);\n var o = C6(e, t);\n if (o !== -1)\n return e[o];\n}\nfunction pd(e) {\n return Array.prototype.slice.call(e);\n}\nvar dd = p2(function(e) {\n return e.reduce(function(t, o) {\n return t[o.descriptor.id] = o, t;\n }, {});\n}), bd = p2(function(e) {\n return e.reduce(function(t, o) {\n return t[o.descriptor.id] = o, t;\n }, {});\n}), K4 = p2(function(e) {\n return w4(e);\n}), Ak = p2(function(e) {\n return w4(e);\n}), h3 = p2(function(e, t) {\n var o = Ak(t).filter(function(n) {\n return e === n.descriptor.droppableId;\n }).sort(function(n, r) {\n return n.descriptor.index - r.descriptor.index;\n });\n return o;\n});\nfunction m6(e) {\n return e.at && e.at.type === "REORDER" ? e.at.destination : null;\n}\nfunction J4(e) {\n return e.at && e.at.type === "COMBINE" ? e.at.combine : null;\n}\nvar _4 = p2(function(e, t) {\n return t.filter(function(o) {\n return o.descriptor.id !== e.descriptor.id;\n });\n}), uk = function(e) {\n var t = e.isMovingForward, o = e.draggable, n = e.destination, r = e.insideDestination, i = e.previousImpact;\n if (!n.isCombineEnabled)\n return null;\n var a = m6(i);\n if (!a)\n return null;\n function s(z) {\n var f = {\n type: "COMBINE",\n combine: {\n draggableId: z,\n droppableId: n.descriptor.id\n }\n };\n return a0({}, i, {\n at: f\n });\n }\n var l = i.displaced.all, p = l.length ? l[0] : null;\n if (t)\n return p ? s(p) : null;\n var d = _4(o, r);\n if (!p) {\n if (!d.length)\n return null;\n var b = d[d.length - 1];\n return s(b.descriptor.id);\n }\n var M = C6(d, function(z) {\n return z.descriptor.id === p;\n });\n M === -1 && ( false ? 0 : y1(!1));\n var u = M - 1;\n if (u < 0)\n return null;\n var A = d[u];\n return s(A.descriptor.id);\n}, po = function(e, t) {\n return e.descriptor.droppableId === t.descriptor.id;\n}, Md = {\n point: u2,\n value: 0\n}, Cr = {\n invisible: {},\n visible: {},\n all: []\n}, zk = {\n displaced: Cr,\n displacedBy: Md,\n at: null\n}, pe = function(e, t) {\n return function(o) {\n return e <= o && o <= t;\n };\n}, Ad = function(e) {\n var t = pe(e.top, e.bottom), o = pe(e.left, e.right);\n return function(n) {\n var r = t(n.top) && t(n.bottom) && o(n.left) && o(n.right);\n if (r)\n return !0;\n var i = t(n.top) || t(n.bottom), a = o(n.left) || o(n.right), s = i && a;\n if (s)\n return !0;\n var l = n.top < e.top && n.bottom > e.bottom, p = n.left < e.left && n.right > e.right, d = l && p;\n if (d)\n return !0;\n var b = l && a || p && i;\n return b;\n };\n}, hk = function(e) {\n var t = pe(e.top, e.bottom), o = pe(e.left, e.right);\n return function(n) {\n var r = t(n.top) && t(n.bottom) && o(n.left) && o(n.right);\n return r;\n };\n}, L6 = {\n direction: "vertical",\n line: "y",\n crossAxisLine: "x",\n start: "top",\n end: "bottom",\n size: "height",\n crossAxisStart: "left",\n crossAxisEnd: "right",\n crossAxisSize: "width"\n}, ud = {\n direction: "horizontal",\n line: "x",\n crossAxisLine: "y",\n start: "left",\n end: "right",\n size: "width",\n crossAxisStart: "top",\n crossAxisEnd: "bottom",\n crossAxisSize: "height"\n}, Ok = function(e) {\n return function(t) {\n var o = pe(t.top, t.bottom), n = pe(t.left, t.right);\n return function(r) {\n return e === L6 ? o(r.top) && o(r.bottom) : n(r.left) && n(r.right);\n };\n };\n}, fk = function(t, o) {\n var n = o.frame ? o.frame.scroll.diff.displacement : u2;\n return Dr(t, n);\n}, gk = function(t, o, n) {\n return o.subject.active ? n(o.subject.active)(t) : !1;\n}, Ck = function(t, o, n) {\n return n(o)(t);\n}, v6 = function(t) {\n var o = t.target, n = t.destination, r = t.viewport, i = t.withDroppableDisplacement, a = t.isVisibleThroughFrameFn, s = i ? fk(o, n) : o;\n return gk(s, n, a) && Ck(s, r, a);\n}, mk = function(t) {\n return v6(a0({}, t, {\n isVisibleThroughFrameFn: Ad\n }));\n}, zd = function(t) {\n return v6(a0({}, t, {\n isVisibleThroughFrameFn: hk\n }));\n}, Lk = function(t) {\n return v6(a0({}, t, {\n isVisibleThroughFrameFn: Ok(t.destination.axis)\n }));\n}, vk = function(t, o, n) {\n if (typeof n == "boolean")\n return n;\n if (!o)\n return !0;\n var r = o.invisible, i = o.visible;\n if (r[t])\n return !1;\n var a = i[t];\n return a ? a.shouldAnimate : !0;\n};\nfunction qk(e, t) {\n var o = e.page.marginBox, n = {\n top: t.point.y,\n right: 0,\n bottom: 0,\n left: t.point.x\n };\n return Ce(O6(o, n));\n}\nfunction mr(e) {\n var t = e.afterDragging, o = e.destination, n = e.displacedBy, r = e.viewport, i = e.forceShouldAnimate, a = e.last;\n return t.reduce(function(l, p) {\n var d = qk(p, n), b = p.descriptor.id;\n l.all.push(b);\n var M = mk({\n target: d,\n destination: o,\n viewport: r,\n withDroppableDisplacement: !0\n });\n if (!M)\n return l.invisible[p.descriptor.id] = !0, l;\n var u = vk(b, a, i), A = {\n draggableId: b,\n shouldAnimate: u\n };\n return l.visible[b] = A, l;\n }, {\n all: [],\n visible: {},\n invisible: {}\n });\n}\nfunction yk(e, t) {\n if (!e.length)\n return 0;\n var o = e[e.length - 1].descriptor.index;\n return t.inHomeList ? o : o + 1;\n}\nfunction k9(e) {\n var t = e.insideDestination, o = e.inHomeList, n = e.displacedBy, r = e.destination, i = yk(t, {\n inHomeList: o\n });\n return {\n displaced: Cr,\n displacedBy: n,\n at: {\n type: "REORDER",\n destination: {\n droppableId: r.descriptor.id,\n index: i\n }\n }\n };\n}\nfunction x4(e) {\n var t = e.draggable, o = e.insideDestination, n = e.destination, r = e.viewport, i = e.displacedBy, a = e.last, s = e.index, l = e.forceShouldAnimate, p = po(t, n);\n if (s == null)\n return k9({\n insideDestination: o,\n inHomeList: p,\n displacedBy: i,\n destination: n\n });\n var d = Ut(o, function(z) {\n return z.descriptor.index === s;\n });\n if (!d)\n return k9({\n insideDestination: o,\n inHomeList: p,\n displacedBy: i,\n destination: n\n });\n var b = _4(t, o), M = o.indexOf(d), u = b.slice(M), A = mr({\n afterDragging: u,\n destination: n,\n displacedBy: i,\n last: a,\n viewport: r.frame,\n forceShouldAnimate: l\n });\n return {\n displaced: A,\n displacedBy: i,\n at: {\n type: "REORDER",\n destination: {\n droppableId: n.descriptor.id,\n index: s\n }\n }\n };\n}\nfunction Ht(e, t) {\n return !!t.effected[e];\n}\nvar wk = function(e) {\n var t = e.isMovingForward, o = e.destination, n = e.draggables, r = e.combine, i = e.afterCritical;\n if (!o.isCombineEnabled)\n return null;\n var a = r.draggableId, s = n[a], l = s.descriptor.index, p = Ht(a, i);\n return p ? t ? l : l - 1 : t ? l + 1 : l;\n}, xk = function(e) {\n var t = e.isMovingForward, o = e.isInHomeList, n = e.insideDestination, r = e.location;\n if (!n.length)\n return null;\n var i = r.index, a = t ? i + 1 : i - 1, s = n[0].descriptor.index, l = n[n.length - 1].descriptor.index, p = o ? l : l + 1;\n return a < s || a > p ? null : a;\n}, Wk = function(e) {\n var t = e.isMovingForward, o = e.isInHomeList, n = e.draggable, r = e.draggables, i = e.destination, a = e.insideDestination, s = e.previousImpact, l = e.viewport, p = e.afterCritical, d = s.at;\n if (d || ( false ? 0 : y1(!1)), d.type === "REORDER") {\n var b = xk({\n isMovingForward: t,\n isInHomeList: o,\n location: d.destination,\n insideDestination: a\n });\n return b == null ? null : x4({\n draggable: n,\n insideDestination: a,\n destination: i,\n viewport: l,\n last: s.displaced,\n displacedBy: s.displacedBy,\n index: b\n });\n }\n var M = wk({\n isMovingForward: t,\n destination: i,\n displaced: s.displaced,\n draggables: r,\n combine: d.combine,\n afterCritical: p\n });\n return M == null ? null : x4({\n draggable: n,\n insideDestination: a,\n destination: i,\n viewport: l,\n last: s.displaced,\n displacedBy: s.displacedBy,\n index: M\n });\n}, Rk = function(e) {\n var t = e.displaced, o = e.afterCritical, n = e.combineWith, r = e.displacedBy, i = !!(t.visible[n] || t.invisible[n]);\n return Ht(n, o) ? i ? u2 : lo(r.point) : i ? r.point : u2;\n}, Bk = function(e) {\n var t = e.afterCritical, o = e.impact, n = e.draggables, r = J4(o);\n r || ("production", y1(!1));\n var i = r.draggableId, a = n[i].page.borderBox.center, s = Rk({\n displaced: o.displaced,\n afterCritical: t,\n combineWith: i,\n displacedBy: o.displacedBy\n });\n return C2(a, s);\n}, hd = function(t, o) {\n return o.margin[t.start] + o.borderBox[t.size] / 2;\n}, Sk = function(t, o) {\n return o.margin[t.end] + o.borderBox[t.size] / 2;\n}, q6 = function(t, o, n) {\n return o[t.crossAxisStart] + n.margin[t.crossAxisStart] + n.borderBox[t.crossAxisSize] / 2;\n}, N9 = function(t) {\n var o = t.axis, n = t.moveRelativeTo, r = t.isMoving;\n return z3(o.line, n.marginBox[o.end] + hd(o, r), q6(o, n.marginBox, r));\n}, T9 = function(t) {\n var o = t.axis, n = t.moveRelativeTo, r = t.isMoving;\n return z3(o.line, n.marginBox[o.start] - Sk(o, r), q6(o, n.marginBox, r));\n}, Ek = function(t) {\n var o = t.axis, n = t.moveInto, r = t.isMoving;\n return z3(o.line, n.contentBox[o.start] + hd(o, r), q6(o, n.contentBox, r));\n}, kk = function(e) {\n var t = e.impact, o = e.draggable, n = e.draggables, r = e.droppable, i = e.afterCritical, a = h3(r.descriptor.id, n), s = o.page, l = r.axis;\n if (!a.length)\n return Ek({\n axis: l,\n moveInto: r.page,\n isMoving: s\n });\n var p = t.displaced, d = t.displacedBy, b = p.all[0];\n if (b) {\n var M = n[b];\n if (Ht(b, i))\n return T9({\n axis: l,\n moveRelativeTo: M.page,\n isMoving: s\n });\n var u = v4(M.page, d.point);\n return T9({\n axis: l,\n moveRelativeTo: u,\n isMoving: s\n });\n }\n var A = a[a.length - 1];\n if (A.descriptor.id === o.descriptor.id)\n return s.borderBox.center;\n if (Ht(A.descriptor.id, i)) {\n var z = v4(A.page, lo(i.displacedBy.point));\n return N9({\n axis: l,\n moveRelativeTo: z,\n isMoving: s\n });\n }\n return N9({\n axis: l,\n moveRelativeTo: A.page,\n isMoving: s\n });\n}, p5 = function(e, t) {\n var o = e.frame;\n return o ? C2(t, o.scroll.diff.displacement) : t;\n}, Nk = function(t) {\n var o = t.impact, n = t.draggable, r = t.droppable, i = t.draggables, a = t.afterCritical, s = n.page.borderBox.center, l = o.at;\n return !r || !l ? s : l.type === "REORDER" ? kk({\n impact: o,\n draggable: n,\n draggables: i,\n droppable: r,\n afterCritical: a\n }) : Bk({\n impact: o,\n draggables: i,\n afterCritical: a\n });\n}, $4 = function(e) {\n var t = Nk(e), o = e.droppable, n = o ? p5(o, t) : t;\n return n;\n}, Od = function(e, t) {\n var o = _2(t, e.scroll.initial), n = lo(o), r = Ce({\n top: t.y,\n bottom: t.y + e.frame.height,\n left: t.x,\n right: t.x + e.frame.width\n }), i = {\n frame: r,\n scroll: {\n initial: e.scroll.initial,\n max: e.scroll.max,\n current: t,\n diff: {\n value: o,\n displacement: n\n }\n }\n };\n return i;\n};\nfunction I9(e, t) {\n return e.map(function(o) {\n return t[o];\n });\n}\nfunction Tk(e, t) {\n for (var o = 0; o < t.length; o++) {\n var n = t[o].visible[e];\n if (n)\n return n;\n }\n return null;\n}\nvar Ik = function(e) {\n var t = e.impact, o = e.viewport, n = e.destination, r = e.draggables, i = e.maxScrollChange, a = Od(o, C2(o.scroll.current, i)), s = n.frame ? g6(n, C2(n.frame.scroll.current, i)) : n, l = t.displaced, p = mr({\n afterDragging: I9(l.all, r),\n destination: n,\n displacedBy: t.displacedBy,\n viewport: a.frame,\n last: l,\n forceShouldAnimate: !1\n }), d = mr({\n afterDragging: I9(l.all, r),\n destination: s,\n displacedBy: t.displacedBy,\n viewport: o.frame,\n last: l,\n forceShouldAnimate: !1\n }), b = {}, M = {}, u = [l, p, d];\n l.all.forEach(function(z) {\n var f = Tk(z, u);\n if (f) {\n M[z] = f;\n return;\n }\n b[z] = !0;\n });\n var A = a0({}, t, {\n displaced: {\n all: l.all,\n invisible: b,\n visible: M\n }\n });\n return A;\n}, Dk = function(e, t) {\n return C2(e.scroll.diff.displacement, t);\n}, y6 = function(e) {\n var t = e.pageBorderBoxCenter, o = e.draggable, n = e.viewport, r = Dk(n, t), i = _2(r, o.page.borderBox.center);\n return C2(o.client.borderBox.center, i);\n}, fd = function(e) {\n var t = e.draggable, o = e.destination, n = e.newPageBorderBoxCenter, r = e.viewport, i = e.withDroppableDisplacement, a = e.onlyOnMainAxis, s = a === void 0 ? !1 : a, l = _2(n, t.page.borderBox.center), p = Dr(t.page.borderBox, l), d = {\n target: p,\n destination: o,\n withDroppableDisplacement: i,\n viewport: r\n };\n return s ? Lk(d) : zd(d);\n}, Hk = function(e) {\n var t = e.isMovingForward, o = e.draggable, n = e.destination, r = e.draggables, i = e.previousImpact, a = e.viewport, s = e.previousPageBorderBoxCenter, l = e.previousClientSelection, p = e.afterCritical;\n if (!n.isEnabled)\n return null;\n var d = h3(n.descriptor.id, r), b = po(o, n), M = uk({\n isMovingForward: t,\n draggable: o,\n destination: n,\n insideDestination: d,\n previousImpact: i\n }) || Wk({\n isMovingForward: t,\n isInHomeList: b,\n draggable: o,\n draggables: r,\n destination: n,\n insideDestination: d,\n previousImpact: i,\n viewport: a,\n afterCritical: p\n });\n if (!M)\n return null;\n var u = $4({\n impact: M,\n draggable: o,\n droppable: n,\n draggables: r,\n afterCritical: p\n }), A = fd({\n draggable: o,\n destination: n,\n newPageBorderBoxCenter: u,\n viewport: a.frame,\n withDroppableDisplacement: !1,\n onlyOnMainAxis: !0\n });\n if (A) {\n var z = y6({\n pageBorderBoxCenter: u,\n draggable: o,\n viewport: a\n });\n return {\n clientSelection: z,\n impact: M,\n scrollJumpRequest: null\n };\n }\n var f = _2(u, s), O = Ik({\n impact: M,\n viewport: a,\n destination: n,\n draggables: r,\n maxScrollChange: f\n });\n return {\n clientSelection: l,\n impact: O,\n scrollJumpRequest: f\n };\n}, x2 = function(t) {\n var o = t.subject.active;\n return o || ( false ? 0 : y1(!1)), o;\n}, Vk = function(e) {\n var t = e.isMovingForward, o = e.pageBorderBoxCenter, n = e.source, r = e.droppables, i = e.viewport, a = n.subject.active;\n if (!a)\n return null;\n var s = n.axis, l = pe(a[s.start], a[s.end]), p = K4(r).filter(function(b) {\n return b !== n;\n }).filter(function(b) {\n return b.isEnabled;\n }).filter(function(b) {\n return !!b.subject.active;\n }).filter(function(b) {\n return Ad(i.frame)(x2(b));\n }).filter(function(b) {\n var M = x2(b);\n return t ? a[s.crossAxisEnd] < M[s.crossAxisEnd] : M[s.crossAxisStart] < a[s.crossAxisStart];\n }).filter(function(b) {\n var M = x2(b), u = pe(M[s.start], M[s.end]);\n return l(M[s.start]) || l(M[s.end]) || u(a[s.start]) || u(a[s.end]);\n }).sort(function(b, M) {\n var u = x2(b)[s.crossAxisStart], A = x2(M)[s.crossAxisStart];\n return t ? u - A : A - u;\n }).filter(function(b, M, u) {\n return x2(b)[s.crossAxisStart] === x2(u[0])[s.crossAxisStart];\n });\n if (!p.length)\n return null;\n if (p.length === 1)\n return p[0];\n var d = p.filter(function(b) {\n var M = pe(x2(b)[s.start], x2(b)[s.end]);\n return M(o[s.line]);\n });\n return d.length === 1 ? d[0] : d.length > 1 ? d.sort(function(b, M) {\n return x2(b)[s.start] - x2(M)[s.start];\n })[0] : p.sort(function(b, M) {\n var u = S9(o, E9(x2(b))), A = S9(o, E9(x2(M)));\n return u !== A ? u - A : x2(b)[s.start] - x2(M)[s.start];\n })[0];\n}, D9 = function(t, o) {\n var n = t.page.borderBox.center;\n return Ht(t.descriptor.id, o) ? _2(n, o.displacedBy.point) : n;\n}, Pk = function(t, o) {\n var n = t.page.borderBox;\n return Ht(t.descriptor.id, o) ? Dr(n, lo(o.displacedBy.point)) : n;\n}, Fk = function(e) {\n var t = e.pageBorderBoxCenter, o = e.viewport, n = e.destination, r = e.insideDestination, i = e.afterCritical, a = r.filter(function(s) {\n return zd({\n target: Pk(s, i),\n destination: n,\n viewport: o.frame,\n withDroppableDisplacement: !0\n });\n }).sort(function(s, l) {\n var p = gr(t, p5(n, D9(s, i))), d = gr(t, p5(n, D9(l, i)));\n return p < d ? -1 : d < p ? 1 : s.descriptor.index - l.descriptor.index;\n });\n return a[0] || null;\n}, Hr = p2(function(t, o) {\n var n = o[t.line];\n return {\n value: n,\n point: z3(t.line, n)\n };\n}), Xk = function(t, o, n) {\n var r = t.axis;\n if (t.descriptor.mode === "virtual")\n return z3(r.line, o[r.line]);\n var i = t.subject.page.contentBox[r.size], a = h3(t.descriptor.id, n), s = a.reduce(function(d, b) {\n return d + b.client.marginBox[r.size];\n }, 0), l = s + o[r.line], p = l - i;\n return p <= 0 ? null : z3(r.line, p);\n}, gd = function(t, o) {\n return a0({}, t, {\n scroll: a0({}, t.scroll, {\n max: o\n })\n });\n}, Cd = function(t, o, n) {\n var r = t.frame;\n po(o, t) && ( false ? 0 : y1(!1)), t.subject.withPlaceholder && ( false ? 0 : y1(!1));\n var i = Hr(t.axis, o.displaceBy).point, a = Xk(t, i, n), s = {\n placeholderSize: i,\n increasedBy: a,\n oldFrameMaxScroll: t.frame ? t.frame.scroll.max : null\n };\n if (!r) {\n var l = eo({\n page: t.subject.page,\n withPlaceholder: s,\n axis: t.axis,\n frame: t.frame\n });\n return a0({}, t, {\n subject: l\n });\n }\n var p = a ? C2(r.scroll.max, a) : r.scroll.max, d = gd(r, p), b = eo({\n page: t.subject.page,\n withPlaceholder: s,\n axis: t.axis,\n frame: d\n });\n return a0({}, t, {\n subject: b,\n frame: d\n });\n}, Uk = function(t) {\n var o = t.subject.withPlaceholder;\n o || ( false ? 0 : y1(!1));\n var n = t.frame;\n if (!n) {\n var r = eo({\n page: t.subject.page,\n axis: t.axis,\n frame: null,\n withPlaceholder: null\n });\n return a0({}, t, {\n subject: r\n });\n }\n var i = o.oldFrameMaxScroll;\n i || ( false ? 0 : y1(!1));\n var a = gd(n, i), s = eo({\n page: t.subject.page,\n axis: t.axis,\n frame: a,\n withPlaceholder: null\n });\n return a0({}, t, {\n subject: s,\n frame: a\n });\n}, Yk = function(e) {\n var t = e.previousPageBorderBoxCenter, o = e.moveRelativeTo, n = e.insideDestination, r = e.draggable, i = e.draggables, a = e.destination, s = e.viewport, l = e.afterCritical;\n if (!o) {\n if (n.length)\n return null;\n var p = {\n displaced: Cr,\n displacedBy: Md,\n at: {\n type: "REORDER",\n destination: {\n droppableId: a.descriptor.id,\n index: 0\n }\n }\n }, d = $4({\n impact: p,\n draggable: r,\n droppable: a,\n draggables: i,\n afterCritical: l\n }), b = po(r, a) ? a : Cd(a, r, i), M = fd({\n draggable: r,\n destination: b,\n newPageBorderBoxCenter: d,\n viewport: s.frame,\n withDroppableDisplacement: !1,\n onlyOnMainAxis: !0\n });\n return M ? p : null;\n }\n var u = t[a.axis.line] <= o.page.borderBox.center[a.axis.line], A = function() {\n var f = o.descriptor.index;\n return o.descriptor.id === r.descriptor.id || u ? f : f + 1;\n }(), z = Hr(a.axis, r.displaceBy);\n return x4({\n draggable: r,\n insideDestination: n,\n destination: a,\n viewport: s,\n displacedBy: z,\n last: Cr,\n index: A\n });\n}, Gk = function(e) {\n var t = e.isMovingForward, o = e.previousPageBorderBoxCenter, n = e.draggable, r = e.isOver, i = e.draggables, a = e.droppables, s = e.viewport, l = e.afterCritical, p = Vk({\n isMovingForward: t,\n pageBorderBoxCenter: o,\n source: r,\n droppables: a,\n viewport: s\n });\n if (!p)\n return null;\n var d = h3(p.descriptor.id, i), b = Fk({\n pageBorderBoxCenter: o,\n viewport: s,\n destination: p,\n insideDestination: d,\n afterCritical: l\n }), M = Yk({\n previousPageBorderBoxCenter: o,\n destination: p,\n draggable: n,\n draggables: i,\n moveRelativeTo: b,\n insideDestination: d,\n viewport: s,\n afterCritical: l\n });\n if (!M)\n return null;\n var u = $4({\n impact: M,\n draggable: n,\n droppable: p,\n draggables: i,\n afterCritical: l\n }), A = y6({\n pageBorderBoxCenter: u,\n draggable: n,\n viewport: s\n });\n return {\n clientSelection: A,\n impact: M,\n scrollJumpRequest: null\n };\n}, $2 = function(e) {\n var t = e.at;\n return t ? t.type === "REORDER" ? t.destination.droppableId : t.combine.droppableId : null;\n}, Qk = function(t, o) {\n var n = $2(t);\n return n ? o[n] : null;\n}, Zk = function(e) {\n var t = e.state, o = e.type, n = Qk(t.impact, t.dimensions.droppables), r = !!n, i = t.dimensions.droppables[t.critical.droppable.id], a = n || i, s = a.axis.direction, l = s === "vertical" && (o === "MOVE_UP" || o === "MOVE_DOWN") || s === "horizontal" && (o === "MOVE_LEFT" || o === "MOVE_RIGHT");\n if (l && !r)\n return null;\n var p = o === "MOVE_DOWN" || o === "MOVE_RIGHT", d = t.dimensions.draggables[t.critical.draggable.id], b = t.current.page.borderBoxCenter, M = t.dimensions, u = M.draggables, A = M.droppables;\n return l ? Hk({\n isMovingForward: p,\n previousPageBorderBoxCenter: b,\n draggable: d,\n destination: a,\n draggables: u,\n viewport: t.viewport,\n previousClientSelection: t.current.client.selection,\n previousImpact: t.impact,\n afterCritical: t.afterCritical\n }) : Gk({\n isMovingForward: p,\n previousPageBorderBoxCenter: b,\n draggable: d,\n isOver: a,\n draggables: u,\n droppables: A,\n viewport: t.viewport,\n afterCritical: t.afterCritical\n });\n};\nfunction t3(e) {\n return e.phase === "DRAGGING" || e.phase === "COLLECTING";\n}\nfunction md(e) {\n var t = pe(e.top, e.bottom), o = pe(e.left, e.right);\n return function(r) {\n return t(r.y) && o(r.x);\n };\n}\nfunction jk(e, t) {\n return e.left < t.right && e.right > t.left && e.top < t.bottom && e.bottom > t.top;\n}\nfunction Kk(e) {\n var t = e.pageBorderBox, o = e.draggable, n = e.candidates, r = o.page.borderBox.center, i = n.map(function(a) {\n var s = a.axis, l = z3(a.axis.line, t.center[s.line], a.page.borderBox.center[s.crossAxisLine]);\n return {\n id: a.descriptor.id,\n distance: gr(r, l)\n };\n }).sort(function(a, s) {\n return s.distance - a.distance;\n });\n return i[0] ? i[0].id : null;\n}\nfunction Jk(e) {\n var t = e.pageBorderBox, o = e.draggable, n = e.droppables, r = K4(n).filter(function(i) {\n if (!i.isEnabled)\n return !1;\n var a = i.subject.active;\n if (!a || !jk(t, a))\n return !1;\n if (md(a)(t.center))\n return !0;\n var s = i.axis, l = a.center[s.crossAxisLine], p = t[s.crossAxisStart], d = t[s.crossAxisEnd], b = pe(a[s.crossAxisStart], a[s.crossAxisEnd]), M = b(p), u = b(d);\n return !M && !u ? !0 : M ? p < l : d > l;\n });\n return r.length ? r.length === 1 ? r[0].descriptor.id : Kk({\n pageBorderBox: t,\n draggable: o,\n candidates: r\n }) : null;\n}\nvar Ld = function(t, o) {\n return Ce(Dr(t, o));\n}, _k = function(e, t) {\n var o = e.frame;\n return o ? Ld(t, o.scroll.diff.value) : t;\n};\nfunction vd(e) {\n var t = e.displaced, o = e.id;\n return !!(t.visible[o] || t.invisible[o]);\n}\nfunction $k(e) {\n var t = e.draggable, o = e.closest, n = e.inHomeList;\n return o ? n && o.descriptor.index > t.descriptor.index ? o.descriptor.index - 1 : o.descriptor.index : null;\n}\nvar eN = function(e) {\n var t = e.pageBorderBoxWithDroppableScroll, o = e.draggable, n = e.destination, r = e.insideDestination, i = e.last, a = e.viewport, s = e.afterCritical, l = n.axis, p = Hr(n.axis, o.displaceBy), d = p.value, b = t[l.start], M = t[l.end], u = _4(o, r), A = Ut(u, function(f) {\n var O = f.descriptor.id, h = f.page.borderBox.center[l.line], g = Ht(O, s), v = vd({\n displaced: i,\n id: O\n });\n return g ? v ? M <= h : b < h - d : v ? M <= h + d : b < h;\n }), z = $k({\n draggable: o,\n closest: A,\n inHomeList: po(o, n)\n });\n return x4({\n draggable: o,\n insideDestination: r,\n destination: n,\n viewport: a,\n last: i,\n displacedBy: p,\n index: z\n });\n}, tN = 4, oN = function(e) {\n var t = e.draggable, o = e.pageBorderBoxWithDroppableScroll, n = e.previousImpact, r = e.destination, i = e.insideDestination, a = e.afterCritical;\n if (!r.isCombineEnabled)\n return null;\n var s = r.axis, l = Hr(r.axis, t.displaceBy), p = l.value, d = o[s.start], b = o[s.end], M = _4(t, i), u = Ut(M, function(z) {\n var f = z.descriptor.id, O = z.page.borderBox, h = O[s.size], g = h / tN, v = Ht(f, a), L = vd({\n displaced: n.displaced,\n id: f\n });\n return v ? L ? b > O[s.start] + g && b < O[s.end] - g : d > O[s.start] - p + g && d < O[s.end] - p - g : L ? b > O[s.start] + p + g && b < O[s.end] + p - g : d > O[s.start] + g && d < O[s.end] - g;\n });\n if (!u)\n return null;\n var A = {\n displacedBy: l,\n displaced: n.displaced,\n at: {\n type: "COMBINE",\n combine: {\n draggableId: u.descriptor.id,\n droppableId: r.descriptor.id\n }\n }\n };\n return A;\n}, qd = function(e) {\n var t = e.pageOffset, o = e.draggable, n = e.draggables, r = e.droppables, i = e.previousImpact, a = e.viewport, s = e.afterCritical, l = Ld(o.page.borderBox, t), p = Jk({\n pageBorderBox: l,\n draggable: o,\n droppables: r\n });\n if (!p)\n return zk;\n var d = r[p], b = h3(d.descriptor.id, n), M = _k(d, l);\n return oN({\n pageBorderBoxWithDroppableScroll: M,\n draggable: o,\n previousImpact: i,\n destination: d,\n insideDestination: b,\n afterCritical: s\n }) || eN({\n pageBorderBoxWithDroppableScroll: M,\n draggable: o,\n destination: d,\n insideDestination: b,\n last: i.displaced,\n viewport: a,\n afterCritical: s\n });\n}, w6 = function(e, t) {\n var o;\n return a0({}, e, (o = {}, o[t.descriptor.id] = t, o));\n}, rN = function(t) {\n var o = t.previousImpact, n = t.impact, r = t.droppables, i = $2(o), a = $2(n);\n if (!i || i === a)\n return r;\n var s = r[i];\n if (!s.subject.withPlaceholder)\n return r;\n var l = Uk(s);\n return w6(r, l);\n}, nN = function(e) {\n var t = e.draggable, o = e.draggables, n = e.droppables, r = e.previousImpact, i = e.impact, a = rN({\n previousImpact: r,\n impact: i,\n droppables: n\n }), s = $2(i);\n if (!s)\n return a;\n var l = n[s];\n if (po(t, l) || l.subject.withPlaceholder)\n return a;\n var p = Cd(l, t, o);\n return w6(a, p);\n}, Jo = function(e) {\n var t = e.state, o = e.clientSelection, n = e.dimensions, r = e.viewport, i = e.impact, a = e.scrollJumpRequest, s = r || t.viewport, l = n || t.dimensions, p = o || t.current.client.selection, d = _2(p, t.initial.client.selection), b = {\n offset: d,\n selection: p,\n borderBoxCenter: C2(t.initial.client.borderBoxCenter, d)\n }, M = {\n selection: C2(b.selection, s.scroll.current),\n borderBoxCenter: C2(b.borderBoxCenter, s.scroll.current),\n offset: C2(b.offset, s.scroll.diff.value)\n }, u = {\n client: b,\n page: M\n };\n if (t.phase === "COLLECTING")\n return a0({\n phase: "COLLECTING"\n }, t, {\n dimensions: l,\n viewport: s,\n current: u\n });\n var A = l.draggables[t.critical.draggable.id], z = i || qd({\n pageOffset: M.offset,\n draggable: A,\n draggables: l.draggables,\n droppables: l.droppables,\n previousImpact: t.impact,\n viewport: s,\n afterCritical: t.afterCritical\n }), f = nN({\n draggable: A,\n impact: z,\n previousImpact: t.impact,\n draggables: l.draggables,\n droppables: l.droppables\n }), O = a0({}, t, {\n current: u,\n dimensions: {\n draggables: l.draggables,\n droppables: f\n },\n impact: z,\n viewport: s,\n scrollJumpRequest: a || null,\n forceShouldAnimate: a ? !1 : null\n });\n return O;\n};\nfunction iN(e, t) {\n return e.map(function(o) {\n return t[o];\n });\n}\nvar yd = function(e) {\n var t = e.impact, o = e.viewport, n = e.draggables, r = e.destination, i = e.forceShouldAnimate, a = t.displaced, s = iN(a.all, n), l = mr({\n afterDragging: s,\n destination: r,\n displacedBy: t.displacedBy,\n viewport: o.frame,\n forceShouldAnimate: i,\n last: a\n });\n return a0({}, t, {\n displaced: l\n });\n}, wd = function(e) {\n var t = e.impact, o = e.draggable, n = e.droppable, r = e.draggables, i = e.viewport, a = e.afterCritical, s = $4({\n impact: t,\n draggable: o,\n draggables: r,\n droppable: n,\n afterCritical: a\n });\n return y6({\n pageBorderBoxCenter: s,\n draggable: o,\n viewport: i\n });\n}, xd = function(e) {\n var t = e.state, o = e.dimensions, n = e.viewport;\n t.movementMode !== "SNAP" && ("production", y1(!1));\n var r = t.impact, i = n || t.viewport, a = o || t.dimensions, s = a.draggables, l = a.droppables, p = s[t.critical.draggable.id], d = $2(r);\n d || ( false ? 0 : y1(!1));\n var b = l[d], M = yd({\n impact: r,\n viewport: i,\n destination: b,\n draggables: s\n }), u = wd({\n impact: M,\n draggable: p,\n droppable: b,\n draggables: s,\n viewport: i,\n afterCritical: t.afterCritical\n });\n return Jo({\n impact: M,\n clientSelection: u,\n state: t,\n dimensions: a,\n viewport: i\n });\n}, aN = function(e) {\n return {\n index: e.index,\n droppableId: e.droppableId\n };\n}, Wd = function(e) {\n var t = e.draggable, o = e.home, n = e.draggables, r = e.viewport, i = Hr(o.axis, t.displaceBy), a = h3(o.descriptor.id, n), s = a.indexOf(t);\n s === -1 && ( false ? 0 : y1(!1));\n var l = a.slice(s + 1), p = l.reduce(function(u, A) {\n return u[A.descriptor.id] = !0, u;\n }, {}), d = {\n inVirtualList: o.descriptor.mode === "virtual",\n displacedBy: i,\n effected: p\n }, b = mr({\n afterDragging: l,\n destination: o,\n displacedBy: i,\n last: null,\n viewport: r.frame,\n forceShouldAnimate: !1\n }), M = {\n displaced: b,\n displacedBy: i,\n at: {\n type: "REORDER",\n destination: aN(t.descriptor)\n }\n };\n return {\n impact: M,\n afterCritical: d\n };\n}, sN = function(e, t) {\n return {\n draggables: e.draggables,\n droppables: w6(e.droppables, t)\n };\n}, Vr = function(t) {\n "production";\n}, Pr = function(t) {\n "production";\n}, cN = function(e) {\n var t = e.draggable, o = e.offset, n = e.initialWindowScroll, r = v4(t.client, o), i = q4(r, n), a = a0({}, t, {\n placeholder: a0({}, t.placeholder, {\n client: r\n }),\n client: r,\n page: i\n });\n return a;\n}, lN = function(e) {\n var t = e.frame;\n return t || ( false ? 0 : y1(!1)), t;\n}, pN = function(e) {\n var t = e.additions, o = e.updatedDroppables, n = e.viewport, r = n.scroll.diff.value;\n return t.map(function(i) {\n var a = i.descriptor.droppableId, s = o[a], l = lN(s), p = l.scroll.diff.value, d = C2(r, p), b = cN({\n draggable: i,\n offset: d,\n initialWindowScroll: n.scroll.initial\n });\n return b;\n });\n}, dN = function(e) {\n var t = e.state, o = e.published;\n Vr();\n var n = o.modified.map(function(g) {\n var v = t.dimensions.droppables[g.droppableId], L = g6(v, g.scroll);\n return L;\n }), r = a0({}, t.dimensions.droppables, {}, dd(n)), i = bd(pN({\n additions: o.additions,\n updatedDroppables: r,\n viewport: t.viewport\n })), a = a0({}, t.dimensions.draggables, {}, i);\n o.removals.forEach(function(g) {\n delete a[g];\n });\n var s = {\n droppables: r,\n draggables: a\n }, l = $2(t.impact), p = l ? s.droppables[l] : null, d = s.draggables[t.critical.draggable.id], b = s.droppables[t.critical.droppable.id], M = Wd({\n draggable: d,\n home: b,\n draggables: a,\n viewport: t.viewport\n }), u = M.impact, A = M.afterCritical, z = p && p.isCombineEnabled ? t.impact : u, f = qd({\n pageOffset: t.current.page.offset,\n draggable: s.draggables[t.critical.draggable.id],\n draggables: s.draggables,\n droppables: s.droppables,\n previousImpact: z,\n viewport: t.viewport,\n afterCritical: A\n });\n Pr();\n var O = a0({\n phase: "DRAGGING"\n }, t, {\n phase: "DRAGGING",\n impact: f,\n onLiftImpact: u,\n dimensions: s,\n afterCritical: A,\n forceShouldAnimate: !1\n });\n if (t.phase === "COLLECTING")\n return O;\n var h = a0({\n phase: "DROP_PENDING"\n }, O, {\n phase: "DROP_PENDING",\n reason: t.reason,\n isWaiting: !1\n });\n return h;\n}, d5 = function(t) {\n return t.movementMode === "SNAP";\n}, ea = function(t, o, n) {\n var r = sN(t.dimensions, o);\n return !d5(t) || n ? Jo({\n state: t,\n dimensions: r\n }) : xd({\n state: t,\n dimensions: r\n });\n};\nfunction ta(e) {\n return e.isDragging && e.movementMode === "SNAP" ? a0({\n phase: "DRAGGING"\n }, e, {\n scrollJumpRequest: null\n }) : e;\n}\nvar H9 = {\n phase: "IDLE",\n completed: null,\n shouldFlush: !1\n}, bN = function(e, t) {\n if (e === void 0 && (e = H9), t.type === "FLUSH")\n return a0({}, H9, {\n shouldFlush: !0\n });\n if (t.type === "INITIAL_PUBLISH") {\n e.phase !== "IDLE" && ( false ? 0 : y1(!1));\n var o = t.payload, n = o.critical, r = o.clientSelection, i = o.viewport, a = o.dimensions, s = o.movementMode, l = a.draggables[n.draggable.id], p = a.droppables[n.droppable.id], d = {\n selection: r,\n borderBoxCenter: l.client.borderBox.center,\n offset: u2\n }, b = {\n client: d,\n page: {\n selection: C2(d.selection, i.scroll.initial),\n borderBoxCenter: C2(d.selection, i.scroll.initial),\n offset: C2(d.selection, i.scroll.diff.value)\n }\n }, M = K4(a.droppables).every(function(J) {\n return !J.isFixedOnPage;\n }), u = Wd({\n draggable: l,\n home: p,\n draggables: a.draggables,\n viewport: i\n }), A = u.impact, z = u.afterCritical, f = {\n phase: "DRAGGING",\n isDragging: !0,\n critical: n,\n movementMode: s,\n dimensions: a,\n initial: b,\n current: b,\n isWindowScrollAllowed: M,\n impact: A,\n afterCritical: z,\n onLiftImpact: A,\n viewport: i,\n scrollJumpRequest: null,\n forceShouldAnimate: null\n };\n return f;\n }\n if (t.type === "COLLECTION_STARTING") {\n if (e.phase === "COLLECTING" || e.phase === "DROP_PENDING")\n return e;\n e.phase !== "DRAGGING" && ( false ? 0 : y1(!1));\n var O = a0({\n phase: "COLLECTING"\n }, e, {\n phase: "COLLECTING"\n });\n return O;\n }\n if (t.type === "PUBLISH_WHILE_DRAGGING")\n return e.phase === "COLLECTING" || e.phase === "DROP_PENDING" || ( false ? 0 : y1(!1)), dN({\n state: e,\n published: t.payload\n });\n if (t.type === "MOVE") {\n if (e.phase === "DROP_PENDING")\n return e;\n t3(e) || ( false ? 0 : y1(!1));\n var h = t.payload.client;\n return kt(h, e.current.client.selection) ? e : Jo({\n state: e,\n clientSelection: h,\n impact: d5(e) ? e.impact : null\n });\n }\n if (t.type === "UPDATE_DROPPABLE_SCROLL") {\n if (e.phase === "DROP_PENDING" || e.phase === "COLLECTING")\n return ta(e);\n t3(e) || ( false ? 0 : y1(!1));\n var g = t.payload, v = g.id, L = g.newScroll, y = e.dimensions.droppables[v];\n if (!y)\n return e;\n var B = g6(y, L);\n return ea(e, B, !1);\n }\n if (t.type === "UPDATE_DROPPABLE_IS_ENABLED") {\n if (e.phase === "DROP_PENDING")\n return e;\n t3(e) || ( false ? 0 : y1(!1));\n var X = t.payload, F = X.id, T = X.isEnabled, w = e.dimensions.droppables[F];\n w || ( false ? 0 : y1(!1)), w.isEnabled === T && ( false ? 0 : y1(!1));\n var H = a0({}, w, {\n isEnabled: T\n });\n return ea(e, H, !0);\n }\n if (t.type === "UPDATE_DROPPABLE_IS_COMBINE_ENABLED") {\n if (e.phase === "DROP_PENDING")\n return e;\n t3(e) || ( false ? 0 : y1(!1));\n var C = t.payload, q = C.id, m = C.isCombineEnabled, k = e.dimensions.droppables[q];\n k || ( false ? 0 : y1(!1)), k.isCombineEnabled === m && ( false ? 0 : y1(!1));\n var x = a0({}, k, {\n isCombineEnabled: m\n });\n return ea(e, x, !0);\n }\n if (t.type === "MOVE_BY_WINDOW_SCROLL") {\n if (e.phase === "DROP_PENDING" || e.phase === "DROP_ANIMATING")\n return e;\n t3(e) || ( false ? 0 : y1(!1)), e.isWindowScrollAllowed || ( false ? 0 : y1(!1));\n var N = t.payload.newScroll;\n if (kt(e.viewport.scroll.current, N))\n return ta(e);\n var V = Od(e.viewport, N);\n return d5(e) ? xd({\n state: e,\n viewport: V\n }) : Jo({\n state: e,\n viewport: V\n });\n }\n if (t.type === "UPDATE_VIEWPORT_MAX_SCROLL") {\n if (!t3(e))\n return e;\n var R = t.payload.maxScroll;\n if (kt(R, e.viewport.scroll.max))\n return e;\n var I = a0({}, e.viewport, {\n scroll: a0({}, e.viewport.scroll, {\n max: R\n })\n });\n return a0({\n phase: "DRAGGING"\n }, e, {\n viewport: I\n });\n }\n if (t.type === "MOVE_UP" || t.type === "MOVE_DOWN" || t.type === "MOVE_LEFT" || t.type === "MOVE_RIGHT") {\n if (e.phase === "COLLECTING" || e.phase === "DROP_PENDING")\n return e;\n e.phase !== "DRAGGING" && ( false ? 0 : y1(!1));\n var j = Zk({\n state: e,\n type: t.type\n });\n return j ? Jo({\n state: e,\n impact: j.impact,\n clientSelection: j.clientSelection,\n scrollJumpRequest: j.scrollJumpRequest\n }) : e;\n }\n if (t.type === "DROP_PENDING") {\n var U = t.payload.reason;\n e.phase !== "COLLECTING" && ( false ? 0 : y1(!1));\n var _ = a0({\n phase: "DROP_PENDING"\n }, e, {\n phase: "DROP_PENDING",\n isWaiting: !0,\n reason: U\n });\n return _;\n }\n if (t.type === "DROP_ANIMATE") {\n var r1 = t.payload, K = r1.completed, Q = r1.dropDuration, E = r1.newHomeClientOffset;\n e.phase === "DRAGGING" || e.phase === "DROP_PENDING" || ( false ? 0 : y1(!1));\n var D = {\n phase: "DROP_ANIMATING",\n completed: K,\n dropDuration: Q,\n newHomeClientOffset: E,\n dimensions: e.dimensions\n };\n return D;\n }\n if (t.type === "DROP_COMPLETE") {\n var G = t.payload.completed;\n return {\n phase: "IDLE",\n completed: G,\n shouldFlush: !1\n };\n }\n return e;\n}, MN = function(t) {\n return {\n type: "BEFORE_INITIAL_CAPTURE",\n payload: t\n };\n}, AN = function(t) {\n return {\n type: "LIFT",\n payload: t\n };\n}, uN = function(t) {\n return {\n type: "INITIAL_PUBLISH",\n payload: t\n };\n}, zN = function(t) {\n return {\n type: "PUBLISH_WHILE_DRAGGING",\n payload: t\n };\n}, hN = function() {\n return {\n type: "COLLECTION_STARTING",\n payload: null\n };\n}, ON = function(t) {\n return {\n type: "UPDATE_DROPPABLE_SCROLL",\n payload: t\n };\n}, fN = function(t) {\n return {\n type: "UPDATE_DROPPABLE_IS_ENABLED",\n payload: t\n };\n}, gN = function(t) {\n return {\n type: "UPDATE_DROPPABLE_IS_COMBINE_ENABLED",\n payload: t\n };\n}, Rd = function(t) {\n return {\n type: "MOVE",\n payload: t\n };\n}, CN = function(t) {\n return {\n type: "MOVE_BY_WINDOW_SCROLL",\n payload: t\n };\n}, mN = function(t) {\n return {\n type: "UPDATE_VIEWPORT_MAX_SCROLL",\n payload: t\n };\n}, LN = function() {\n return {\n type: "MOVE_UP",\n payload: null\n };\n}, vN = function() {\n return {\n type: "MOVE_DOWN",\n payload: null\n };\n}, qN = function() {\n return {\n type: "MOVE_RIGHT",\n payload: null\n };\n}, yN = function() {\n return {\n type: "MOVE_LEFT",\n payload: null\n };\n}, x6 = function() {\n return {\n type: "FLUSH",\n payload: null\n };\n}, wN = function(t) {\n return {\n type: "DROP_ANIMATE",\n payload: t\n };\n}, W6 = function(t) {\n return {\n type: "DROP_COMPLETE",\n payload: t\n };\n}, Bd = function(t) {\n return {\n type: "DROP",\n payload: t\n };\n}, xN = function(t) {\n return {\n type: "DROP_PENDING",\n payload: t\n };\n}, Sd = function() {\n return {\n type: "DROP_ANIMATION_FINISHED",\n payload: null\n };\n};\nfunction WN(e) {\n if (!(e.length <= 1)) {\n for (var t = e.map(function(s) {\n return s.descriptor.index;\n }), o = {}, n = 1; n < t.length; n++) {\n var r = t[n], i = t[n - 1];\n r !== i + 1 && (o[r] = !0);\n }\n if (Object.keys(o).length) {\n var a = t.map(function(s) {\n var l = !!o[s];\n return l ? "[🔥" + s + "]" : "" + s;\n }).join(", ");\n false && 0;\n }\n }\n}\nfunction RN(e, t) {\n if (false) { var o; }\n}\nvar BN = function(e) {\n return function(t) {\n var o = t.getState, n = t.dispatch;\n return function(r) {\n return function(i) {\n if (i.type !== "LIFT") {\n r(i);\n return;\n }\n var a = i.payload, s = a.id, l = a.clientSelection, p = a.movementMode, d = o();\n d.phase === "DROP_ANIMATING" && n(W6({\n completed: d.completed\n })), o().phase !== "IDLE" && ( false ? 0 : y1(!1)), n(x6()), n(MN({\n draggableId: s,\n movementMode: p\n }));\n var b = {\n shouldPublishImmediately: p === "SNAP"\n }, M = {\n draggableId: s,\n scrollOptions: b\n }, u = e.startPublishing(M), A = u.critical, z = u.dimensions, f = u.viewport;\n RN(A, z), n(uN({\n critical: A,\n dimensions: z,\n clientSelection: l,\n movementMode: p,\n viewport: f\n }));\n };\n };\n };\n}, SN = function(e) {\n return function() {\n return function(t) {\n return function(o) {\n o.type === "INITIAL_PUBLISH" && e.dragging(), o.type === "DROP_ANIMATE" && e.dropping(o.payload.completed.result.reason), (o.type === "FLUSH" || o.type === "DROP_COMPLETE") && e.resting(), t(o);\n };\n };\n };\n}, R6 = {\n outOfTheWay: "cubic-bezier(0.2, 0, 0, 1)",\n drop: "cubic-bezier(.2,1,.1,1)"\n}, Lr = {\n opacity: {\n drop: 0,\n combining: 0.7\n },\n scale: {\n drop: 0.75\n }\n}, B6 = {\n outOfTheWay: 0.2,\n minDropTime: 0.33,\n maxDropTime: 0.55\n}, jt = B6.outOfTheWay + "s " + R6.outOfTheWay, _o = {\n fluid: "opacity " + jt,\n snap: "transform " + jt + ", opacity " + jt,\n drop: function(t) {\n var o = t + "s " + R6.drop;\n return "transform " + o + ", opacity " + o;\n },\n outOfTheWay: "transform " + jt,\n placeholder: "height " + jt + ", width " + jt + ", margin " + jt\n}, V9 = function(t) {\n return kt(t, u2) ? null : "translate(" + t.x + "px, " + t.y + "px)";\n}, b5 = {\n moveTo: V9,\n drop: function(t, o) {\n var n = V9(t);\n return n ? o ? n + " scale(" + Lr.scale.drop + ")" : n : null;\n }\n}, M5 = B6.minDropTime, Ed = B6.maxDropTime, EN = Ed - M5, P9 = 1500, kN = 0.6, NN = function(e) {\n var t = e.current, o = e.destination, n = e.reason, r = gr(t, o);\n if (r <= 0)\n return M5;\n if (r >= P9)\n return Ed;\n var i = r / P9, a = M5 + EN * i, s = n === "CANCEL" ? a * kN : a;\n return Number(s.toFixed(2));\n}, TN = function(e) {\n var t = e.impact, o = e.draggable, n = e.dimensions, r = e.viewport, i = e.afterCritical, a = n.draggables, s = n.droppables, l = $2(t), p = l ? s[l] : null, d = s[o.descriptor.droppableId], b = wd({\n impact: t,\n draggable: o,\n draggables: a,\n afterCritical: i,\n droppable: p || d,\n viewport: r\n }), M = _2(b, o.client.borderBox.center);\n return M;\n}, IN = function(e) {\n var t = e.draggables, o = e.reason, n = e.lastImpact, r = e.home, i = e.viewport, a = e.onLiftImpact;\n if (!n.at || o !== "DROP") {\n var s = yd({\n draggables: t,\n impact: a,\n destination: r,\n viewport: i,\n forceShouldAnimate: !0\n });\n return {\n impact: s,\n didDropInsideDroppable: !1\n };\n }\n if (n.at.type === "REORDER")\n return {\n impact: n,\n didDropInsideDroppable: !0\n };\n var l = a0({}, n, {\n displaced: Cr\n });\n return {\n impact: l,\n didDropInsideDroppable: !0\n };\n}, DN = function(e) {\n var t = e.getState, o = e.dispatch;\n return function(n) {\n return function(r) {\n if (r.type !== "DROP") {\n n(r);\n return;\n }\n var i = t(), a = r.payload.reason;\n if (i.phase === "COLLECTING") {\n o(xN({\n reason: a\n }));\n return;\n }\n if (i.phase !== "IDLE") {\n var s = i.phase === "DROP_PENDING" && i.isWaiting;\n s && ( false ? 0 : y1(!1)), i.phase === "DRAGGING" || i.phase === "DROP_PENDING" || ( false ? 0 : y1(!1));\n var l = i.critical, p = i.dimensions, d = p.draggables[i.critical.draggable.id], b = IN({\n reason: a,\n lastImpact: i.impact,\n afterCritical: i.afterCritical,\n onLiftImpact: i.onLiftImpact,\n home: i.dimensions.droppables[i.critical.droppable.id],\n viewport: i.viewport,\n draggables: i.dimensions.draggables\n }), M = b.impact, u = b.didDropInsideDroppable, A = u ? m6(M) : null, z = u ? J4(M) : null, f = {\n index: l.draggable.index,\n droppableId: l.droppable.id\n }, O = {\n draggableId: d.descriptor.id,\n type: d.descriptor.type,\n source: f,\n reason: a,\n mode: i.movementMode,\n destination: A,\n combine: z\n }, h = TN({\n impact: M,\n draggable: d,\n dimensions: p,\n viewport: i.viewport,\n afterCritical: i.afterCritical\n }), g = {\n critical: i.critical,\n afterCritical: i.afterCritical,\n result: O,\n impact: M\n }, v = !kt(i.current.client.offset, h) || !!O.combine;\n if (!v) {\n o(W6({\n completed: g\n }));\n return;\n }\n var L = NN({\n current: i.current.client.offset,\n destination: h,\n reason: a\n }), y = {\n newHomeClientOffset: h,\n dropDuration: L,\n completed: g\n };\n o(wN(y));\n }\n };\n };\n}, kd = function() {\n return {\n x: window.pageXOffset,\n y: window.pageYOffset\n };\n};\nfunction HN(e) {\n return {\n eventName: "scroll",\n options: {\n passive: !0,\n capture: !1\n },\n fn: function(o) {\n o.target !== window && o.target !== window.document || e();\n }\n };\n}\nfunction VN(e) {\n var t = e.onWindowScroll;\n function o() {\n t(kd());\n }\n var n = Or(o), r = HN(n), i = Et;\n function a() {\n return i !== Et;\n }\n function s() {\n a() && ( false ? 0 : y1(!1)), i = se(window, [r]);\n }\n function l() {\n a() || ( false ? 0 : y1(!1)), n.cancel(), i(), i = Et;\n }\n return {\n start: s,\n stop: l,\n isActive: a\n };\n}\nvar PN = function(t) {\n return t.type === "DROP_COMPLETE" || t.type === "DROP_ANIMATE" || t.type === "FLUSH";\n}, FN = function(e) {\n var t = VN({\n onWindowScroll: function(n) {\n e.dispatch(CN({\n newScroll: n\n }));\n }\n });\n return function(o) {\n return function(n) {\n !t.isActive() && n.type === "INITIAL_PUBLISH" && t.start(), t.isActive() && PN(n) && t.stop(), o(n);\n };\n };\n}, XN = function(e) {\n var t = !1, o = !1, n = setTimeout(function() {\n o = !0;\n }), r = function(a) {\n if (t) {\n false && 0;\n return;\n }\n if (o) {\n false && 0;\n return;\n }\n t = !0, e(a), clearTimeout(n);\n };\n return r.wasCalled = function() {\n return t;\n }, r;\n}, UN = function() {\n var e = [], t = function(i) {\n var a = C6(e, function(p) {\n return p.timerId === i;\n });\n a === -1 && ( false ? 0 : y1(!1));\n var s = e.splice(a, 1), l = s[0];\n l.callback();\n }, o = function(i) {\n var a = setTimeout(function() {\n return t(a);\n }), s = {\n timerId: a,\n callback: i\n };\n e.push(s);\n }, n = function() {\n if (e.length) {\n var i = [].concat(e);\n e.length = 0, i.forEach(function(a) {\n clearTimeout(a.timerId), a.callback();\n });\n }\n };\n return {\n add: o,\n flush: n\n };\n}, YN = function(t, o) {\n return t == null && o == null ? !0 : t == null || o == null ? !1 : t.droppableId === o.droppableId && t.index === o.index;\n}, GN = function(t, o) {\n return t == null && o == null ? !0 : t == null || o == null ? !1 : t.draggableId === o.draggableId && t.droppableId === o.droppableId;\n}, QN = function(t, o) {\n if (t === o)\n return !0;\n var n = t.draggable.id === o.draggable.id && t.draggable.droppableId === o.draggable.droppableId && t.draggable.type === o.draggable.type && t.draggable.index === o.draggable.index, r = t.droppable.id === o.droppable.id && t.droppable.type === o.droppable.type;\n return n && r;\n}, ko = function(t, o) {\n Vr(), o(), Pr();\n}, Cn = function(t, o) {\n return {\n draggableId: t.draggable.id,\n type: t.droppable.type,\n source: {\n droppableId: t.droppable.id,\n index: t.draggable.index\n },\n mode: o\n };\n}, oa = function(t, o, n, r) {\n if (!t) {\n n(r(o));\n return;\n }\n var i = XN(n), a = {\n announce: i\n };\n t(o, a), i.wasCalled() || n(r(o));\n}, ZN = function(e, t) {\n var o = UN(), n = null, r = function(M, u) {\n n && ( false ? 0 : y1(!1)), ko("onBeforeCapture", function() {\n var A = e().onBeforeCapture;\n if (A) {\n var z = {\n draggableId: M,\n mode: u\n };\n A(z);\n }\n });\n }, i = function(M, u) {\n n && ( false ? 0 : y1(!1)), ko("onBeforeDragStart", function() {\n var A = e().onBeforeDragStart;\n A && A(Cn(M, u));\n });\n }, a = function(M, u) {\n n && ( false ? 0 : y1(!1));\n var A = Cn(M, u);\n n = {\n mode: u,\n lastCritical: M,\n lastLocation: A.source,\n lastCombine: null\n }, o.add(function() {\n ko("onDragStart", function() {\n return oa(e().onDragStart, A, t, Zn.onDragStart);\n });\n });\n }, s = function(M, u) {\n var A = m6(u), z = J4(u);\n n || ( false ? 0 : y1(!1));\n var f = !QN(M, n.lastCritical);\n f && (n.lastCritical = M);\n var O = !YN(n.lastLocation, A);\n O && (n.lastLocation = A);\n var h = !GN(n.lastCombine, z);\n if (h && (n.lastCombine = z), !(!f && !O && !h)) {\n var g = a0({}, Cn(M, n.mode), {\n combine: z,\n destination: A\n });\n o.add(function() {\n ko("onDragUpdate", function() {\n return oa(e().onDragUpdate, g, t, Zn.onDragUpdate);\n });\n });\n }\n }, l = function() {\n n || ( false ? 0 : y1(!1)), o.flush();\n }, p = function(M) {\n n || ( false ? 0 : y1(!1)), n = null, ko("onDragEnd", function() {\n return oa(e().onDragEnd, M, t, Zn.onDragEnd);\n });\n }, d = function() {\n if (n) {\n var M = a0({}, Cn(n.lastCritical, n.mode), {\n combine: null,\n destination: null,\n reason: "CANCEL"\n });\n p(M);\n }\n };\n return {\n beforeCapture: r,\n beforeStart: i,\n start: a,\n update: s,\n flush: l,\n drop: p,\n abort: d\n };\n}, jN = function(e, t) {\n var o = ZN(e, t);\n return function(n) {\n return function(r) {\n return function(i) {\n if (i.type === "BEFORE_INITIAL_CAPTURE") {\n o.beforeCapture(i.payload.draggableId, i.payload.movementMode);\n return;\n }\n if (i.type === "INITIAL_PUBLISH") {\n var a = i.payload.critical;\n o.beforeStart(a, i.payload.movementMode), r(i), o.start(a, i.payload.movementMode);\n return;\n }\n if (i.type === "DROP_COMPLETE") {\n var s = i.payload.completed.result;\n o.flush(), r(i), o.drop(s);\n return;\n }\n if (r(i), i.type === "FLUSH") {\n o.abort();\n return;\n }\n var l = n.getState();\n l.phase === "DRAGGING" && o.update(l.critical, l.impact);\n };\n };\n };\n}, KN = function(e) {\n return function(t) {\n return function(o) {\n if (o.type !== "DROP_ANIMATION_FINISHED") {\n t(o);\n return;\n }\n var n = e.getState();\n n.phase !== "DROP_ANIMATING" && ( false ? 0 : y1(!1)), e.dispatch(W6({\n completed: n.completed\n }));\n };\n };\n}, JN = function(e) {\n var t = null, o = null;\n function n() {\n o && (cancelAnimationFrame(o), o = null), t && (t(), t = null);\n }\n return function(r) {\n return function(i) {\n if ((i.type === "FLUSH" || i.type === "DROP_COMPLETE" || i.type === "DROP_ANIMATION_FINISHED") && n(), r(i), i.type === "DROP_ANIMATE") {\n var a = {\n eventName: "scroll",\n options: {\n capture: !0,\n passive: !1,\n once: !0\n },\n fn: function() {\n var l = e.getState();\n l.phase === "DROP_ANIMATING" && e.dispatch(Sd());\n }\n };\n o = requestAnimationFrame(function() {\n o = null, t = se(window, [a]);\n });\n }\n };\n };\n}, _N = function(e) {\n return function() {\n return function(t) {\n return function(o) {\n (o.type === "DROP_COMPLETE" || o.type === "FLUSH" || o.type === "DROP_ANIMATE") && e.stopPublishing(), t(o);\n };\n };\n };\n}, $N = function(e) {\n var t = !1;\n return function() {\n return function(o) {\n return function(n) {\n if (n.type === "INITIAL_PUBLISH") {\n t = !0, e.tryRecordFocus(n.payload.critical.draggable.id), o(n), e.tryRestoreFocusRecorded();\n return;\n }\n if (o(n), !!t) {\n if (n.type === "FLUSH") {\n t = !1, e.tryRestoreFocusRecorded();\n return;\n }\n if (n.type === "DROP_COMPLETE") {\n t = !1;\n var r = n.payload.completed.result;\n r.combine && e.tryShiftRecord(r.draggableId, r.combine.draggableId), e.tryRestoreFocusRecorded();\n }\n }\n };\n };\n };\n}, eT = function(t) {\n return t.type === "DROP_COMPLETE" || t.type === "DROP_ANIMATE" || t.type === "FLUSH";\n}, tT = function(e) {\n return function(t) {\n return function(o) {\n return function(n) {\n if (eT(n)) {\n e.stop(), o(n);\n return;\n }\n if (n.type === "INITIAL_PUBLISH") {\n o(n);\n var r = t.getState();\n r.phase !== "DRAGGING" && ( false ? 0 : y1(!1)), e.start(r);\n return;\n }\n o(n), e.scroll(t.getState());\n };\n };\n };\n}, oT = function(e) {\n return function(t) {\n return function(o) {\n if (t(o), o.type === "PUBLISH_WHILE_DRAGGING") {\n var n = e.getState();\n n.phase === "DROP_PENDING" && (n.isWaiting || e.dispatch(Bd({\n reason: n.reason\n })));\n }\n };\n };\n}, rT = false ? 0 : Gp, nT = function(e) {\n var t = e.dimensionMarshal, o = e.focusMarshal, n = e.styleMarshal, r = e.getResponders, i = e.announce, a = e.autoScroller;\n return Yp(bN, rT(KS(SN(n), _N(t), BN(t), DN, KN, JN, oT, tT(a), FN, $N(o), jN(r, i))));\n}, ra = function() {\n return {\n additions: {},\n removals: {},\n modified: {}\n };\n};\nfunction iT(e) {\n var t = e.registry, o = e.callbacks, n = ra(), r = null, i = function() {\n r || (o.collectionStarting(), r = requestAnimationFrame(function() {\n r = null, Vr();\n var d = n, b = d.additions, M = d.removals, u = d.modified, A = Object.keys(b).map(function(O) {\n return t.draggable.getById(O).getDimension(u2);\n }).sort(function(O, h) {\n return O.descriptor.index - h.descriptor.index;\n }), z = Object.keys(u).map(function(O) {\n var h = t.droppable.getById(O), g = h.callbacks.getScrollWhileDragging();\n return {\n droppableId: O,\n scroll: g\n };\n }), f = {\n additions: A,\n removals: Object.keys(M),\n modified: z\n };\n n = ra(), Pr(), o.publish(f);\n }));\n }, a = function(d) {\n var b = d.descriptor.id;\n n.additions[b] = d, n.modified[d.descriptor.droppableId] = !0, n.removals[b] && delete n.removals[b], i();\n }, s = function(d) {\n var b = d.descriptor;\n n.removals[b.id] = !0, n.modified[b.droppableId] = !0, n.additions[b.id] && delete n.additions[b.id], i();\n }, l = function() {\n r && (cancelAnimationFrame(r), r = null, n = ra());\n };\n return {\n add: a,\n remove: s,\n stop: l\n };\n}\nvar Nd = function(e) {\n var t = e.scrollHeight, o = e.scrollWidth, n = e.height, r = e.width, i = _2({\n x: o,\n y: t\n }, {\n x: r,\n y: n\n }), a = {\n x: Math.max(0, i.x),\n y: Math.max(0, i.y)\n };\n return a;\n}, Td = function() {\n var e = document.documentElement;\n return e || ( false ? 0 : y1(!1)), e;\n}, Id = function() {\n var e = Td(), t = Nd({\n scrollHeight: e.scrollHeight,\n scrollWidth: e.scrollWidth,\n width: e.clientWidth,\n height: e.clientHeight\n });\n return t;\n}, aT = function() {\n var e = kd(), t = Id(), o = e.y, n = e.x, r = Td(), i = r.clientWidth, a = r.clientHeight, s = n + i, l = o + a, p = Ce({\n top: o,\n left: n,\n right: s,\n bottom: l\n }), d = {\n frame: p,\n scroll: {\n initial: e,\n current: e,\n max: t,\n diff: {\n value: u2,\n displacement: u2\n }\n }\n };\n return d;\n}, sT = function(e) {\n var t = e.critical, o = e.scrollOptions, n = e.registry;\n Vr();\n var r = aT(), i = r.scroll.current, a = t.droppable, s = n.droppable.getAllByType(a.type).map(function(b) {\n return b.callbacks.getDimensionAndWatchScroll(i, o);\n }), l = n.draggable.getAllByType(t.draggable.type).map(function(b) {\n return b.getDimension(i);\n }), p = {\n draggables: bd(l),\n droppables: dd(s)\n };\n Pr();\n var d = {\n dimensions: p,\n critical: t,\n viewport: r\n };\n return d;\n};\nfunction F9(e, t, o) {\n if (o.descriptor.id === t.id || o.descriptor.type !== t.type)\n return !1;\n var n = e.droppable.getById(o.descriptor.droppableId);\n return n.descriptor.mode !== "virtual" ? ( false && 0, !1) : !0;\n}\nvar cT = function(e, t) {\n var o = null, n = iT({\n callbacks: {\n publish: t.publishWhileDragging,\n collectionStarting: t.collectionStarting\n },\n registry: e\n }), r = function(u, A) {\n e.droppable.exists(u) || ( false ? 0 : y1(!1)), o && t.updateDroppableIsEnabled({\n id: u,\n isEnabled: A\n });\n }, i = function(u, A) {\n o && (e.droppable.exists(u) || ( false ? 0 : y1(!1)), t.updateDroppableIsCombineEnabled({\n id: u,\n isCombineEnabled: A\n }));\n }, a = function(u, A) {\n o && (e.droppable.exists(u) || ( false ? 0 : y1(!1)), t.updateDroppableScroll({\n id: u,\n newScroll: A\n }));\n }, s = function(u, A) {\n o && e.droppable.getById(u).callbacks.scroll(A);\n }, l = function() {\n if (o) {\n n.stop();\n var u = o.critical.droppable;\n e.droppable.getAllByType(u.type).forEach(function(A) {\n return A.callbacks.dragStopped();\n }), o.unsubscribe(), o = null;\n }\n }, p = function(u) {\n o || ( false ? 0 : y1(!1));\n var A = o.critical.draggable;\n u.type === "ADDITION" && F9(e, A, u.value) && n.add(u.value), u.type === "REMOVAL" && F9(e, A, u.value) && n.remove(u.value);\n }, d = function(u) {\n o && ( false ? 0 : y1(!1));\n var A = e.draggable.getById(u.draggableId), z = e.droppable.getById(A.descriptor.droppableId), f = {\n draggable: A.descriptor,\n droppable: z.descriptor\n }, O = e.subscribe(p);\n return o = {\n critical: f,\n unsubscribe: O\n }, sT({\n critical: f,\n registry: e,\n scrollOptions: u.scrollOptions\n });\n }, b = {\n updateDroppableIsEnabled: r,\n updateDroppableIsCombineEnabled: i,\n scrollDroppable: s,\n updateDroppableScroll: a,\n startPublishing: d,\n stopPublishing: l\n };\n return b;\n}, Dd = function(e, t) {\n return e.phase === "IDLE" ? !0 : e.phase !== "DROP_ANIMATING" || e.completed.result.draggableId === t ? !1 : e.completed.result.reason === "DROP";\n}, lT = function(e) {\n window.scrollBy(e.x, e.y);\n}, pT = p2(function(e) {\n return K4(e).filter(function(t) {\n return !(!t.isEnabled || !t.frame);\n });\n}), dT = function(t, o) {\n var n = Ut(pT(o), function(r) {\n return r.frame || ( false ? 0 : y1(!1)), md(r.frame.pageMarginBox)(t);\n });\n return n;\n}, bT = function(e) {\n var t = e.center, o = e.destination, n = e.droppables;\n if (o) {\n var r = n[o];\n return r.frame ? r : null;\n }\n var i = dT(t, n);\n return i;\n}, Nt = {\n startFromPercentage: 0.25,\n maxScrollAtPercentage: 0.05,\n maxPixelScroll: 28,\n ease: function(t) {\n return Math.pow(t, 2);\n },\n durationDampening: {\n stopDampeningAt: 1200,\n accelerateAt: 360\n }\n}, MT = function(e, t) {\n var o = e[t.size] * Nt.startFromPercentage, n = e[t.size] * Nt.maxScrollAtPercentage, r = {\n startScrollingFrom: o,\n maxScrollValueAt: n\n };\n return r;\n}, Hd = function(e) {\n var t = e.startOfRange, o = e.endOfRange, n = e.current, r = o - t;\n if (r === 0)\n return false && 0, 0;\n var i = n - t, a = i / r;\n return a;\n}, S6 = 1, AT = function(e, t) {\n if (e > t.startScrollingFrom)\n return 0;\n if (e <= t.maxScrollValueAt)\n return Nt.maxPixelScroll;\n if (e === t.startScrollingFrom)\n return S6;\n var o = Hd({\n startOfRange: t.maxScrollValueAt,\n endOfRange: t.startScrollingFrom,\n current: e\n }), n = 1 - o, r = Nt.maxPixelScroll * Nt.ease(n);\n return Math.ceil(r);\n}, X9 = Nt.durationDampening.accelerateAt, U9 = Nt.durationDampening.stopDampeningAt, uT = function(e, t) {\n var o = t, n = U9, r = Date.now(), i = r - o;\n if (i >= U9)\n return e;\n if (i < X9)\n return S6;\n var a = Hd({\n startOfRange: X9,\n endOfRange: n,\n current: i\n }), s = e * Nt.ease(a);\n return Math.ceil(s);\n}, Y9 = function(e) {\n var t = e.distanceToEdge, o = e.thresholds, n = e.dragStartTime, r = e.shouldUseTimeDampening, i = AT(t, o);\n return i === 0 ? 0 : r ? Math.max(uT(i, n), S6) : i;\n}, G9 = function(e) {\n var t = e.container, o = e.distanceToEdges, n = e.dragStartTime, r = e.axis, i = e.shouldUseTimeDampening, a = MT(t, r), s = o[r.end] < o[r.start];\n return s ? Y9({\n distanceToEdge: o[r.end],\n thresholds: a,\n dragStartTime: n,\n shouldUseTimeDampening: i\n }) : -1 * Y9({\n distanceToEdge: o[r.start],\n thresholds: a,\n dragStartTime: n,\n shouldUseTimeDampening: i\n });\n}, zT = function(e) {\n var t = e.container, o = e.subject, n = e.proposedScroll, r = o.height > t.height, i = o.width > t.width;\n return !i && !r ? n : i && r ? null : {\n x: i ? 0 : n.x,\n y: r ? 0 : n.y\n };\n}, hT = ld(function(e) {\n return e === 0 ? 0 : e;\n}), Vd = function(e) {\n var t = e.dragStartTime, o = e.container, n = e.subject, r = e.center, i = e.shouldUseTimeDampening, a = {\n top: r.y - o.top,\n right: o.right - r.x,\n bottom: o.bottom - r.y,\n left: r.x - o.left\n }, s = G9({\n container: o,\n distanceToEdges: a,\n dragStartTime: t,\n axis: L6,\n shouldUseTimeDampening: i\n }), l = G9({\n container: o,\n distanceToEdges: a,\n dragStartTime: t,\n axis: ud,\n shouldUseTimeDampening: i\n }), p = hT({\n x: l,\n y: s\n });\n if (kt(p, u2))\n return null;\n var d = zT({\n container: o,\n subject: n,\n proposedScroll: p\n });\n return d ? kt(d, u2) ? null : d : null;\n}, OT = ld(function(e) {\n return e === 0 ? 0 : e > 0 ? 1 : -1;\n}), E6 = function() {\n var e = function(o, n) {\n return o < 0 ? o : o > n ? o - n : 0;\n };\n return function(t) {\n var o = t.current, n = t.max, r = t.change, i = C2(o, r), a = {\n x: e(i.x, n.x),\n y: e(i.y, n.y)\n };\n return kt(a, u2) ? null : a;\n };\n}(), Pd = function(t) {\n var o = t.max, n = t.current, r = t.change, i = {\n x: Math.max(n.x, o.x),\n y: Math.max(n.y, o.y)\n }, a = OT(r), s = E6({\n max: i,\n current: n,\n change: a\n });\n return !s || a.x !== 0 && s.x === 0 || a.y !== 0 && s.y === 0;\n}, k6 = function(t, o) {\n return Pd({\n current: t.scroll.current,\n max: t.scroll.max,\n change: o\n });\n}, fT = function(t, o) {\n if (!k6(t, o))\n return null;\n var n = t.scroll.max, r = t.scroll.current;\n return E6({\n current: r,\n max: n,\n change: o\n });\n}, N6 = function(t, o) {\n var n = t.frame;\n return n ? Pd({\n current: n.scroll.current,\n max: n.scroll.max,\n change: o\n }) : !1;\n}, gT = function(t, o) {\n var n = t.frame;\n return !n || !N6(t, o) ? null : E6({\n current: n.scroll.current,\n max: n.scroll.max,\n change: o\n });\n}, CT = function(e) {\n var t = e.viewport, o = e.subject, n = e.center, r = e.dragStartTime, i = e.shouldUseTimeDampening, a = Vd({\n dragStartTime: r,\n container: t.frame,\n subject: o,\n center: n,\n shouldUseTimeDampening: i\n });\n return a && k6(t, a) ? a : null;\n}, mT = function(e) {\n var t = e.droppable, o = e.subject, n = e.center, r = e.dragStartTime, i = e.shouldUseTimeDampening, a = t.frame;\n if (!a)\n return null;\n var s = Vd({\n dragStartTime: r,\n container: a.pageMarginBox,\n subject: o,\n center: n,\n shouldUseTimeDampening: i\n });\n return s && N6(t, s) ? s : null;\n}, Q9 = function(e) {\n var t = e.state, o = e.dragStartTime, n = e.shouldUseTimeDampening, r = e.scrollWindow, i = e.scrollDroppable, a = t.current.page.borderBoxCenter, s = t.dimensions.draggables[t.critical.draggable.id], l = s.page.marginBox;\n if (t.isWindowScrollAllowed) {\n var p = t.viewport, d = CT({\n dragStartTime: o,\n viewport: p,\n subject: l,\n center: a,\n shouldUseTimeDampening: n\n });\n if (d) {\n r(d);\n return;\n }\n }\n var b = bT({\n center: a,\n destination: $2(t.impact),\n droppables: t.dimensions.droppables\n });\n if (b) {\n var M = mT({\n dragStartTime: o,\n droppable: b,\n subject: l,\n center: a,\n shouldUseTimeDampening: n\n });\n M && i(b.descriptor.id, M);\n }\n}, LT = function(e) {\n var t = e.scrollWindow, o = e.scrollDroppable, n = Or(t), r = Or(o), i = null, a = function(d) {\n i || ( false ? 0 : y1(!1));\n var b = i, M = b.shouldUseTimeDampening, u = b.dragStartTime;\n Q9({\n state: d,\n scrollWindow: n,\n scrollDroppable: r,\n dragStartTime: u,\n shouldUseTimeDampening: M\n });\n }, s = function(d) {\n Vr(), i && ( false ? 0 : y1(!1));\n var b = Date.now(), M = !1, u = function() {\n M = !0;\n };\n Q9({\n state: d,\n dragStartTime: 0,\n shouldUseTimeDampening: !1,\n scrollWindow: u,\n scrollDroppable: u\n }), i = {\n dragStartTime: b,\n shouldUseTimeDampening: M\n }, Pr(), M && a(d);\n }, l = function() {\n i && (n.cancel(), r.cancel(), i = null);\n };\n return {\n start: s,\n stop: l,\n scroll: a\n };\n}, vT = function(e) {\n var t = e.move, o = e.scrollDroppable, n = e.scrollWindow, r = function(p, d) {\n var b = C2(p.current.client.selection, d);\n t({\n client: b\n });\n }, i = function(p, d) {\n if (!N6(p, d))\n return d;\n var b = gT(p, d);\n if (!b)\n return o(p.descriptor.id, d), null;\n var M = _2(d, b);\n o(p.descriptor.id, M);\n var u = _2(d, M);\n return u;\n }, a = function(p, d, b) {\n if (!p || !k6(d, b))\n return b;\n var M = fT(d, b);\n if (!M)\n return n(b), null;\n var u = _2(b, M);\n n(u);\n var A = _2(b, u);\n return A;\n }, s = function(p) {\n var d = p.scrollJumpRequest;\n if (d) {\n var b = $2(p.impact);\n b || ( false ? 0 : y1(!1));\n var M = i(p.dimensions.droppables[b], d);\n if (M) {\n var u = p.viewport, A = a(p.isWindowScrollAllowed, u, M);\n A && r(p, A);\n }\n }\n };\n return s;\n}, qT = function(e) {\n var t = e.scrollDroppable, o = e.scrollWindow, n = e.move, r = LT({\n scrollWindow: o,\n scrollDroppable: t\n }), i = vT({\n move: n,\n scrollWindow: o,\n scrollDroppable: t\n }), a = function(p) {\n if (p.phase === "DRAGGING") {\n if (p.movementMode === "FLUID") {\n r.scroll(p);\n return;\n }\n p.scrollJumpRequest && i(p);\n }\n }, s = {\n scroll: a,\n start: r.start,\n stop: r.stop\n };\n return s;\n}, to = "data-rbd", oo = function() {\n var e = to + "-drag-handle";\n return {\n base: e,\n draggableId: e + "-draggable-id",\n contextId: e + "-context-id"\n };\n}(), A5 = function() {\n var e = to + "-draggable";\n return {\n base: e,\n contextId: e + "-context-id",\n id: e + "-id"\n };\n}(), yT = function() {\n var e = to + "-droppable";\n return {\n base: e,\n contextId: e + "-context-id",\n id: e + "-id"\n };\n}(), Z9 = {\n contextId: to + "-scroll-container-context-id"\n}, wT = function(t) {\n return function(o) {\n return "[" + o + \'="\' + t + \'"]\';\n };\n}, No = function(t, o) {\n return t.map(function(n) {\n var r = n.styles[o];\n return r ? n.selector + " { " + r + " }" : "";\n }).join(" ");\n}, xT = "pointer-events: none;", WT = function(e) {\n var t = wT(e), o = function() {\n var s = `\n cursor: -webkit-grab;\n cursor: grab;\n `;\n return {\n selector: t(oo.contextId),\n styles: {\n always: `\n -webkit-touch-callout: none;\n -webkit-tap-highlight-color: rgba(0,0,0,0);\n touch-action: manipulation;\n `,\n resting: s,\n dragging: xT,\n dropAnimating: s\n }\n };\n }(), n = function() {\n var s = `\n transition: ` + _o.outOfTheWay + `;\n `;\n return {\n selector: t(A5.contextId),\n styles: {\n dragging: s,\n dropAnimating: s,\n userCancel: s\n }\n };\n }(), r = {\n selector: t(yT.contextId),\n styles: {\n always: "overflow-anchor: none;"\n }\n }, i = {\n selector: "body",\n styles: {\n dragging: `\n cursor: grabbing;\n cursor: -webkit-grabbing;\n user-select: none;\n -webkit-user-select: none;\n -moz-user-select: none;\n -ms-user-select: none;\n overflow-anchor: none;\n `\n }\n }, a = [n, o, r, i];\n return {\n always: No(a, "always"),\n resting: No(a, "resting"),\n dragging: No(a, "dragging"),\n dropAnimating: No(a, "dropAnimating"),\n userCancel: No(a, "userCancel")\n };\n}, ee = typeof window < "u" && typeof window.document < "u" && typeof window.document.createElement < "u" ? react__WEBPACK_IMPORTED_MODULE_0__.useLayoutEffect : react__WEBPACK_IMPORTED_MODULE_0__.useEffect, na = function() {\n var t = document.querySelector("head");\n return t || ( false ? 0 : y1(!1)), t;\n}, j9 = function(t) {\n var o = document.createElement("style");\n return t && o.setAttribute("nonce", t), o.type = "text/css", o;\n};\nfunction RT(e, t) {\n var o = R0(function() {\n return WT(e);\n }, [e]), n = (0,react__WEBPACK_IMPORTED_MODULE_0__.useRef)(null), r = (0,react__WEBPACK_IMPORTED_MODULE_0__.useRef)(null), i = l0(p2(function(b) {\n var M = r.current;\n M || ( false ? 0 : y1(!1)), M.textContent = b;\n }), []), a = l0(function(b) {\n var M = n.current;\n M || ( false ? 0 : y1(!1)), M.textContent = b;\n }, []);\n ee(function() {\n !n.current && !r.current || ( false ? 0 : y1(!1));\n var b = j9(t), M = j9(t);\n return n.current = b, r.current = M, b.setAttribute(to + "-always", e), M.setAttribute(to + "-dynamic", e), na().appendChild(b), na().appendChild(M), a(o.always), i(o.resting), function() {\n var u = function(z) {\n var f = z.current;\n f || ( false ? 0 : y1(!1)), na().removeChild(f), z.current = null;\n };\n u(n), u(r);\n };\n }, [t, a, i, o.always, o.resting, e]);\n var s = l0(function() {\n return i(o.dragging);\n }, [i, o.dragging]), l = l0(function(b) {\n if (b === "DROP") {\n i(o.dropAnimating);\n return;\n }\n i(o.userCancel);\n }, [i, o.dropAnimating, o.userCancel]), p = l0(function() {\n r.current && i(o.resting);\n }, [i, o.resting]), d = R0(function() {\n return {\n dragging: s,\n dropping: l,\n resting: p\n };\n }, [s, l, p]);\n return d;\n}\nvar Fd = function(e) {\n return e && e.ownerDocument ? e.ownerDocument.defaultView : window;\n};\nfunction Fr(e) {\n return e instanceof Fd(e).HTMLElement;\n}\nfunction Xd(e, t) {\n var o = "[" + oo.contextId + \'="\' + e + \'"]\', n = pd(document.querySelectorAll(o));\n if (!n.length)\n return false && 0, null;\n var r = Ut(n, function(i) {\n return i.getAttribute(oo.draggableId) === t;\n });\n return r ? Fr(r) ? r : ( false && 0, null) : ( false && 0, null);\n}\nfunction BT(e) {\n var t = (0,react__WEBPACK_IMPORTED_MODULE_0__.useRef)({}), o = (0,react__WEBPACK_IMPORTED_MODULE_0__.useRef)(null), n = (0,react__WEBPACK_IMPORTED_MODULE_0__.useRef)(null), r = (0,react__WEBPACK_IMPORTED_MODULE_0__.useRef)(!1), i = l0(function(M, u) {\n var A = {\n id: M,\n focus: u\n };\n return t.current[M] = A, function() {\n var f = t.current, O = f[M];\n O !== A && delete f[M];\n };\n }, []), a = l0(function(M) {\n var u = Xd(e, M);\n u && u !== document.activeElement && u.focus();\n }, [e]), s = l0(function(M, u) {\n o.current === M && (o.current = u);\n }, []), l = l0(function() {\n n.current || r.current && (n.current = requestAnimationFrame(function() {\n n.current = null;\n var M = o.current;\n M && a(M);\n }));\n }, [a]), p = l0(function(M) {\n o.current = null;\n var u = document.activeElement;\n u && u.getAttribute(oo.draggableId) === M && (o.current = M);\n }, []);\n ee(function() {\n return r.current = !0, function() {\n r.current = !1;\n var M = n.current;\n M && cancelAnimationFrame(M);\n };\n }, []);\n var d = R0(function() {\n return {\n register: i,\n tryRecordFocus: p,\n tryRestoreFocusRecorded: l,\n tryShiftRecord: s\n };\n }, [i, p, l, s]);\n return d;\n}\nfunction ST() {\n var e = {\n draggables: {},\n droppables: {}\n }, t = [];\n function o(b) {\n return t.push(b), function() {\n var u = t.indexOf(b);\n u !== -1 && t.splice(u, 1);\n };\n }\n function n(b) {\n t.length && t.forEach(function(M) {\n return M(b);\n });\n }\n function r(b) {\n return e.draggables[b] || null;\n }\n function i(b) {\n var M = r(b);\n return M || ( false ? 0 : y1(!1)), M;\n }\n var a = {\n register: function(M) {\n e.draggables[M.descriptor.id] = M, n({\n type: "ADDITION",\n value: M\n });\n },\n update: function(M, u) {\n var A = e.draggables[u.descriptor.id];\n A && A.uniqueId === M.uniqueId && (delete e.draggables[u.descriptor.id], e.draggables[M.descriptor.id] = M);\n },\n unregister: function(M) {\n var u = M.descriptor.id, A = r(u);\n A && M.uniqueId === A.uniqueId && (delete e.draggables[u], n({\n type: "REMOVAL",\n value: M\n }));\n },\n getById: i,\n findById: r,\n exists: function(M) {\n return !!r(M);\n },\n getAllByType: function(M) {\n return w4(e.draggables).filter(function(u) {\n return u.descriptor.type === M;\n });\n }\n };\n function s(b) {\n return e.droppables[b] || null;\n }\n function l(b) {\n var M = s(b);\n return M || ( false ? 0 : y1(!1)), M;\n }\n var p = {\n register: function(M) {\n e.droppables[M.descriptor.id] = M;\n },\n unregister: function(M) {\n var u = s(M.descriptor.id);\n u && M.uniqueId === u.uniqueId && delete e.droppables[M.descriptor.id];\n },\n getById: l,\n findById: s,\n exists: function(M) {\n return !!s(M);\n },\n getAllByType: function(M) {\n return w4(e.droppables).filter(function(u) {\n return u.descriptor.type === M;\n });\n }\n };\n function d() {\n e.draggables = {}, e.droppables = {}, t.length = 0;\n }\n return {\n draggable: a,\n droppable: p,\n subscribe: o,\n clean: d\n };\n}\nfunction ET() {\n var e = R0(ST, []);\n return (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(function() {\n return function() {\n requestAnimationFrame(e.clean);\n };\n }, [e]), e;\n}\nvar T6 = react__WEBPACK_IMPORTED_MODULE_0___default().createContext(null), vr = function() {\n var e = document.body;\n return e || ( false ? 0 : y1(!1)), e;\n}, kT = {\n position: "absolute",\n width: "1px",\n height: "1px",\n margin: "-1px",\n border: "0",\n padding: "0",\n overflow: "hidden",\n clip: "rect(0 0 0 0)",\n "clip-path": "inset(100%)"\n}, NT = function(t) {\n return "rbd-announcement-" + t;\n};\nfunction TT(e) {\n var t = R0(function() {\n return NT(e);\n }, [e]), o = (0,react__WEBPACK_IMPORTED_MODULE_0__.useRef)(null);\n (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(function() {\n var i = document.createElement("div");\n return o.current = i, i.id = t, i.setAttribute("aria-live", "assertive"), i.setAttribute("aria-atomic", "true"), a0(i.style, kT), vr().appendChild(i), function() {\n setTimeout(function() {\n var l = vr();\n l.contains(i) && l.removeChild(i), i === o.current && (o.current = null);\n });\n };\n }, [t]);\n var n = l0(function(r) {\n var i = o.current;\n if (i) {\n i.textContent = r;\n return;\n }\n false && 0;\n }, []);\n return n;\n}\nvar IT = 0, DT = {\n separator: "::"\n};\nfunction I6(e, t) {\n return t === void 0 && (t = DT), R0(function() {\n return "" + e + t.separator + IT++;\n }, [t.separator, e]);\n}\nfunction HT(e) {\n var t = e.contextId, o = e.uniqueId;\n return "rbd-hidden-text-" + t + "-" + o;\n}\nfunction VT(e) {\n var t = e.contextId, o = e.text, n = I6("hidden-text", {\n separator: "-"\n }), r = R0(function() {\n return HT({\n contextId: t,\n uniqueId: n\n });\n }, [n, t]);\n return (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(function() {\n var a = document.createElement("div");\n return a.id = r, a.textContent = o, a.style.display = "none", vr().appendChild(a), function() {\n var l = vr();\n l.contains(a) && l.removeChild(a);\n };\n }, [r, o]), r;\n}\nvar ei = react__WEBPACK_IMPORTED_MODULE_0___default().createContext(null), PT = {\n react: "^16.8.5 || ^17.0.0 || ^18.0.0",\n "react-dom": "^16.8.5 || ^17.0.0 || ^18.0.0"\n}, FT = /(\\d+)\\.(\\d+)\\.(\\d+)/, K9 = function(t) {\n var o = FT.exec(t);\n o == null && ( false ? 0 : y1(!1));\n var n = Number(o[1]), r = Number(o[2]), i = Number(o[3]);\n return {\n major: n,\n minor: r,\n patch: i,\n raw: t\n };\n}, XT = function(t, o) {\n return o.major > t.major ? !0 : o.major < t.major ? !1 : o.minor > t.minor ? !0 : o.minor < t.minor ? !1 : o.patch >= t.patch;\n}, UT = function(e, t) {\n var o = K9(e), n = K9(t);\n XT(o, n) || false && 0;\n}, ia = (/* unused pure expression or super */ null && (`\n We expect a html5 doctype: \n This is to ensure consistent browser layout and measurement\n\n More information: https://github.com/atlassian/react-beautiful-dnd/blob/master/docs/guides/doctype.md\n`)), YT = function(e) {\n var t = e.doctype;\n if (!t) {\n false && 0;\n return;\n }\n t.name.toLowerCase() !== "html" && "production" !== "production" && 0, t.publicId !== "" && "production" !== "production" && 0;\n};\nfunction D6(e) {\n false && 0;\n}\nfunction Xr(e, t) {\n D6(function() {\n (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(function() {\n try {\n e();\n } catch (o) {\n l5(`\n A setup problem was encountered.\n\n > ` + o.message + `\n `);\n }\n }, t);\n });\n}\nfunction GT() {\n Xr(function() {\n UT(PT.react, (react__WEBPACK_IMPORTED_MODULE_0___default().version)), YT(document);\n }, []);\n}\nfunction H6(e) {\n var t = (0,react__WEBPACK_IMPORTED_MODULE_0__.useRef)(e);\n return (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(function() {\n t.current = e;\n }), t;\n}\nfunction QT() {\n var e = null;\n function t() {\n return !!e;\n }\n function o(a) {\n return a === e;\n }\n function n(a) {\n e && ( false ? 0 : y1(!1));\n var s = {\n abandon: a\n };\n return e = s, s;\n }\n function r() {\n e || ( false ? 0 : y1(!1)), e = null;\n }\n function i() {\n e && (e.abandon(), r());\n }\n return {\n isClaimed: t,\n isActive: o,\n claim: n,\n release: r,\n tryAbandon: i\n };\n}\nvar ZT = 9, jT = 13, V6 = 27, Ud = 32, KT = 33, JT = 34, _T = 35, $T = 36, eI = 37, tI = 38, oI = 39, rI = 40, mn, nI = (mn = {}, mn[jT] = !0, mn[ZT] = !0, mn), Yd = function(e) {\n nI[e.keyCode] && e.preventDefault();\n}, ti = function() {\n var e = "visibilitychange";\n if (typeof document > "u")\n return e;\n var t = [e, "ms" + e, "webkit" + e, "moz" + e, "o" + e], o = Ut(t, function(n) {\n return "on" + n in document;\n });\n return o || e;\n}(), Gd = 0, J9 = 5;\nfunction iI(e, t) {\n return Math.abs(t.x - e.x) >= J9 || Math.abs(t.y - e.y) >= J9;\n}\nvar _9 = {\n type: "IDLE"\n};\nfunction aI(e) {\n var t = e.cancel, o = e.completed, n = e.getPhase, r = e.setPhase;\n return [{\n eventName: "mousemove",\n fn: function(a) {\n var s = a.button, l = a.clientX, p = a.clientY;\n if (s === Gd) {\n var d = {\n x: l,\n y: p\n }, b = n();\n if (b.type === "DRAGGING") {\n a.preventDefault(), b.actions.move(d);\n return;\n }\n b.type !== "PENDING" && ( false ? 0 : y1(!1));\n var M = b.point;\n if (iI(M, d)) {\n a.preventDefault();\n var u = b.actions.fluidLift(d);\n r({\n type: "DRAGGING",\n actions: u\n });\n }\n }\n }\n }, {\n eventName: "mouseup",\n fn: function(a) {\n var s = n();\n if (s.type !== "DRAGGING") {\n t();\n return;\n }\n a.preventDefault(), s.actions.drop({\n shouldBlockNextClick: !0\n }), o();\n }\n }, {\n eventName: "mousedown",\n fn: function(a) {\n n().type === "DRAGGING" && a.preventDefault(), t();\n }\n }, {\n eventName: "keydown",\n fn: function(a) {\n var s = n();\n if (s.type === "PENDING") {\n t();\n return;\n }\n if (a.keyCode === V6) {\n a.preventDefault(), t();\n return;\n }\n Yd(a);\n }\n }, {\n eventName: "resize",\n fn: t\n }, {\n eventName: "scroll",\n options: {\n passive: !0,\n capture: !1\n },\n fn: function() {\n n().type === "PENDING" && t();\n }\n }, {\n eventName: "webkitmouseforcedown",\n fn: function(a) {\n var s = n();\n if (s.type === "IDLE" && ( false ? 0 : y1(!1)), s.actions.shouldRespectForcePress()) {\n t();\n return;\n }\n a.preventDefault();\n }\n }, {\n eventName: ti,\n fn: t\n }];\n}\nfunction sI(e) {\n var t = (0,react__WEBPACK_IMPORTED_MODULE_0__.useRef)(_9), o = (0,react__WEBPACK_IMPORTED_MODULE_0__.useRef)(Et), n = R0(function() {\n return {\n eventName: "mousedown",\n fn: function(b) {\n if (!b.defaultPrevented && b.button === Gd && !(b.ctrlKey || b.metaKey || b.shiftKey || b.altKey)) {\n var M = e.findClosestDraggableId(b);\n if (M) {\n var u = e.tryGetLock(M, a, {\n sourceEvent: b\n });\n if (u) {\n b.preventDefault();\n var A = {\n x: b.clientX,\n y: b.clientY\n };\n o.current(), p(u, A);\n }\n }\n }\n }\n };\n }, [e]), r = R0(function() {\n return {\n eventName: "webkitmouseforcewillbegin",\n fn: function(b) {\n if (!b.defaultPrevented) {\n var M = e.findClosestDraggableId(b);\n if (M) {\n var u = e.findOptionsForDraggable(M);\n u && (u.shouldRespectForcePress || e.canGetLock(M) && b.preventDefault());\n }\n }\n }\n };\n }, [e]), i = l0(function() {\n var b = {\n passive: !1,\n capture: !0\n };\n o.current = se(window, [r, n], b);\n }, [r, n]), a = l0(function() {\n var d = t.current;\n d.type !== "IDLE" && (t.current = _9, o.current(), i());\n }, [i]), s = l0(function() {\n var d = t.current;\n a(), d.type === "DRAGGING" && d.actions.cancel({\n shouldBlockNextClick: !0\n }), d.type === "PENDING" && d.actions.abort();\n }, [a]), l = l0(function() {\n var b = {\n capture: !0,\n passive: !1\n }, M = aI({\n cancel: s,\n completed: a,\n getPhase: function() {\n return t.current;\n },\n setPhase: function(A) {\n t.current = A;\n }\n });\n o.current = se(window, M, b);\n }, [s, a]), p = l0(function(b, M) {\n t.current.type !== "IDLE" && ( false ? 0 : y1(!1)), t.current = {\n type: "PENDING",\n point: M,\n actions: b\n }, l();\n }, [l]);\n ee(function() {\n return i(), function() {\n o.current();\n };\n }, [i]);\n}\nvar w3;\nfunction cI() {\n}\nvar lI = (w3 = {}, w3[JT] = !0, w3[KT] = !0, w3[$T] = !0, w3[_T] = !0, w3);\nfunction pI(e, t) {\n function o() {\n t(), e.cancel();\n }\n function n() {\n t(), e.drop();\n }\n return [{\n eventName: "keydown",\n fn: function(i) {\n if (i.keyCode === V6) {\n i.preventDefault(), o();\n return;\n }\n if (i.keyCode === Ud) {\n i.preventDefault(), n();\n return;\n }\n if (i.keyCode === rI) {\n i.preventDefault(), e.moveDown();\n return;\n }\n if (i.keyCode === tI) {\n i.preventDefault(), e.moveUp();\n return;\n }\n if (i.keyCode === oI) {\n i.preventDefault(), e.moveRight();\n return;\n }\n if (i.keyCode === eI) {\n i.preventDefault(), e.moveLeft();\n return;\n }\n if (lI[i.keyCode]) {\n i.preventDefault();\n return;\n }\n Yd(i);\n }\n }, {\n eventName: "mousedown",\n fn: o\n }, {\n eventName: "mouseup",\n fn: o\n }, {\n eventName: "click",\n fn: o\n }, {\n eventName: "touchstart",\n fn: o\n }, {\n eventName: "resize",\n fn: o\n }, {\n eventName: "wheel",\n fn: o,\n options: {\n passive: !0\n }\n }, {\n eventName: ti,\n fn: o\n }];\n}\nfunction dI(e) {\n var t = (0,react__WEBPACK_IMPORTED_MODULE_0__.useRef)(cI), o = R0(function() {\n return {\n eventName: "keydown",\n fn: function(i) {\n if (i.defaultPrevented || i.keyCode !== Ud)\n return;\n var a = e.findClosestDraggableId(i);\n if (!a)\n return;\n var s = e.tryGetLock(a, d, {\n sourceEvent: i\n });\n if (!s)\n return;\n i.preventDefault();\n var l = !0, p = s.snapLift();\n t.current();\n function d() {\n l || ( false ? 0 : y1(!1)), l = !1, t.current(), n();\n }\n t.current = se(window, pI(p, d), {\n capture: !0,\n passive: !1\n });\n }\n };\n }, [e]), n = l0(function() {\n var i = {\n passive: !1,\n capture: !0\n };\n t.current = se(window, [o], i);\n }, [o]);\n ee(function() {\n return n(), function() {\n t.current();\n };\n }, [n]);\n}\nvar aa = {\n type: "IDLE"\n}, bI = 120, MI = 0.15;\nfunction AI(e) {\n var t = e.cancel, o = e.getPhase;\n return [{\n eventName: "orientationchange",\n fn: t\n }, {\n eventName: "resize",\n fn: t\n }, {\n eventName: "contextmenu",\n fn: function(r) {\n r.preventDefault();\n }\n }, {\n eventName: "keydown",\n fn: function(r) {\n if (o().type !== "DRAGGING") {\n t();\n return;\n }\n r.keyCode === V6 && r.preventDefault(), t();\n }\n }, {\n eventName: ti,\n fn: t\n }];\n}\nfunction uI(e) {\n var t = e.cancel, o = e.completed, n = e.getPhase;\n return [{\n eventName: "touchmove",\n options: {\n capture: !1\n },\n fn: function(i) {\n var a = n();\n if (a.type !== "DRAGGING") {\n t();\n return;\n }\n a.hasMoved = !0;\n var s = i.touches[0], l = s.clientX, p = s.clientY, d = {\n x: l,\n y: p\n };\n i.preventDefault(), a.actions.move(d);\n }\n }, {\n eventName: "touchend",\n fn: function(i) {\n var a = n();\n if (a.type !== "DRAGGING") {\n t();\n return;\n }\n i.preventDefault(), a.actions.drop({\n shouldBlockNextClick: !0\n }), o();\n }\n }, {\n eventName: "touchcancel",\n fn: function(i) {\n if (n().type !== "DRAGGING") {\n t();\n return;\n }\n i.preventDefault(), t();\n }\n }, {\n eventName: "touchforcechange",\n fn: function(i) {\n var a = n();\n a.type === "IDLE" && ("production", y1(!1));\n var s = i.touches[0];\n if (s) {\n var l = s.force >= MI;\n if (l) {\n var p = a.actions.shouldRespectForcePress();\n if (a.type === "PENDING") {\n p && t();\n return;\n }\n if (p) {\n if (a.hasMoved) {\n i.preventDefault();\n return;\n }\n t();\n return;\n }\n i.preventDefault();\n }\n }\n }\n }, {\n eventName: ti,\n fn: t\n }];\n}\nfunction zI(e) {\n var t = (0,react__WEBPACK_IMPORTED_MODULE_0__.useRef)(aa), o = (0,react__WEBPACK_IMPORTED_MODULE_0__.useRef)(Et), n = l0(function() {\n return t.current;\n }, []), r = l0(function(u) {\n t.current = u;\n }, []), i = R0(function() {\n return {\n eventName: "touchstart",\n fn: function(u) {\n if (!u.defaultPrevented) {\n var A = e.findClosestDraggableId(u);\n if (A) {\n var z = e.tryGetLock(A, s, {\n sourceEvent: u\n });\n if (z) {\n var f = u.touches[0], O = f.clientX, h = f.clientY, g = {\n x: O,\n y: h\n };\n o.current(), b(z, g);\n }\n }\n }\n }\n };\n }, [e]), a = l0(function() {\n var u = {\n capture: !0,\n passive: !1\n };\n o.current = se(window, [i], u);\n }, [i]), s = l0(function() {\n var M = t.current;\n M.type !== "IDLE" && (M.type === "PENDING" && clearTimeout(M.longPressTimerId), r(aa), o.current(), a());\n }, [a, r]), l = l0(function() {\n var M = t.current;\n s(), M.type === "DRAGGING" && M.actions.cancel({\n shouldBlockNextClick: !0\n }), M.type === "PENDING" && M.actions.abort();\n }, [s]), p = l0(function() {\n var u = {\n capture: !0,\n passive: !1\n }, A = {\n cancel: l,\n completed: s,\n getPhase: n\n }, z = se(window, uI(A), u), f = se(window, AI(A), u);\n o.current = function() {\n z(), f();\n };\n }, [l, n, s]), d = l0(function() {\n var u = n();\n u.type !== "PENDING" && ( false ? 0 : y1(!1));\n var A = u.actions.fluidLift(u.point);\n r({\n type: "DRAGGING",\n actions: A,\n hasMoved: !1\n });\n }, [n, r]), b = l0(function(u, A) {\n n().type !== "IDLE" && ( false ? 0 : y1(!1));\n var z = setTimeout(d, bI);\n r({\n type: "PENDING",\n point: A,\n actions: u,\n longPressTimerId: z\n }), p();\n }, [p, n, r, d]);\n ee(function() {\n return a(), function() {\n o.current();\n var A = n();\n A.type === "PENDING" && (clearTimeout(A.longPressTimerId), r(aa));\n };\n }, [n, a, r]), ee(function() {\n var u = se(window, [{\n eventName: "touchmove",\n fn: function() {\n },\n options: {\n capture: !1,\n passive: !1\n }\n }]);\n return u;\n }, []);\n}\nfunction hI(e) {\n D6(function() {\n var t = H6(e);\n Xr(function() {\n t.current.length !== e.length && ( false ? 0 : y1(!1));\n });\n });\n}\nvar OI = {\n input: !0,\n button: !0,\n textarea: !0,\n select: !0,\n option: !0,\n optgroup: !0,\n video: !0,\n audio: !0\n};\nfunction Qd(e, t) {\n if (t == null)\n return !1;\n var o = !!OI[t.tagName.toLowerCase()];\n if (o)\n return !0;\n var n = t.getAttribute("contenteditable");\n return n === "true" || n === "" ? !0 : t === e ? !1 : Qd(e, t.parentElement);\n}\nfunction fI(e, t) {\n var o = t.target;\n return Fr(o) ? Qd(e, o) : !1;\n}\nvar gI = function(e) {\n return Ce(e.getBoundingClientRect()).center;\n};\nfunction CI(e) {\n return e instanceof Fd(e).Element;\n}\nvar mI = function() {\n var e = "matches";\n if (typeof document > "u")\n return e;\n var t = [e, "msMatchesSelector", "webkitMatchesSelector"], o = Ut(t, function(n) {\n return n in Element.prototype;\n });\n return o || e;\n}();\nfunction Zd(e, t) {\n return e == null ? null : e[mI](t) ? e : Zd(e.parentElement, t);\n}\nfunction LI(e, t) {\n return e.closest ? e.closest(t) : Zd(e, t);\n}\nfunction vI(e) {\n return "[" + oo.contextId + \'="\' + e + \'"]\';\n}\nfunction qI(e, t) {\n var o = t.target;\n if (!CI(o))\n return false && 0, null;\n var n = vI(e), r = LI(o, n);\n return r ? Fr(r) ? r : ( false && 0, null) : null;\n}\nfunction yI(e, t) {\n var o = qI(e, t);\n return o ? o.getAttribute(oo.draggableId) : null;\n}\nfunction wI(e, t) {\n var o = "[" + A5.contextId + \'="\' + e + \'"]\', n = pd(document.querySelectorAll(o)), r = Ut(n, function(i) {\n return i.getAttribute(A5.id) === t;\n });\n return r ? Fr(r) ? r : ( false && 0, null) : null;\n}\nfunction xI(e) {\n e.preventDefault();\n}\nfunction Ln(e) {\n var t = e.expected, o = e.phase, n = e.isLockActive, r = e.shouldWarn;\n return n() ? t !== o ? (r && "production" !== "production" && 0, !1) : !0 : (r && "production" !== "production" && 0, !1);\n}\nfunction jd(e) {\n var t = e.lockAPI, o = e.store, n = e.registry, r = e.draggableId;\n if (t.isClaimed())\n return !1;\n var i = n.draggable.findById(r);\n return i ? !(!i.options.isEnabled || !Dd(o.getState(), r)) : ( false && 0, !1);\n}\nfunction WI(e) {\n var t = e.lockAPI, o = e.contextId, n = e.store, r = e.registry, i = e.draggableId, a = e.forceSensorStop, s = e.sourceEvent, l = jd({\n lockAPI: t,\n store: n,\n registry: r,\n draggableId: i\n });\n if (!l)\n return null;\n var p = r.draggable.getById(i), d = wI(o, p.descriptor.id);\n if (!d)\n return false && 0, null;\n if (s && !p.options.canDragInteractiveElements && fI(d, s))\n return null;\n var b = t.claim(a || Et), M = "PRE_DRAG";\n function u() {\n return p.options.shouldRespectForcePress;\n }\n function A() {\n return t.isActive(b);\n }\n function z(y, B) {\n Ln({\n expected: y,\n phase: M,\n isLockActive: A,\n shouldWarn: !0\n }) && n.dispatch(B());\n }\n var f = z.bind(null, "DRAGGING");\n function O(y) {\n function B() {\n t.release(), M = "COMPLETED";\n }\n M !== "PRE_DRAG" && (B(), M !== "PRE_DRAG" && ( false ? 0 : y1(!1))), n.dispatch(AN(y.liftActionArgs)), M = "DRAGGING";\n function X(F, T) {\n if (T === void 0 && (T = {\n shouldBlockNextClick: !1\n }), y.cleanup(), T.shouldBlockNextClick) {\n var w = se(window, [{\n eventName: "click",\n fn: xI,\n options: {\n once: !0,\n passive: !1,\n capture: !0\n }\n }]);\n setTimeout(w);\n }\n B(), n.dispatch(Bd({\n reason: F\n }));\n }\n return a0({\n isActive: function() {\n return Ln({\n expected: "DRAGGING",\n phase: M,\n isLockActive: A,\n shouldWarn: !1\n });\n },\n shouldRespectForcePress: u,\n drop: function(T) {\n return X("DROP", T);\n },\n cancel: function(T) {\n return X("CANCEL", T);\n }\n }, y.actions);\n }\n function h(y) {\n var B = Or(function(F) {\n f(function() {\n return Rd({\n client: F\n });\n });\n }), X = O({\n liftActionArgs: {\n id: i,\n clientSelection: y,\n movementMode: "FLUID"\n },\n cleanup: function() {\n return B.cancel();\n },\n actions: {\n move: B\n }\n });\n return a0({}, X, {\n move: B\n });\n }\n function g() {\n var y = {\n moveUp: function() {\n return f(LN);\n },\n moveRight: function() {\n return f(qN);\n },\n moveDown: function() {\n return f(vN);\n },\n moveLeft: function() {\n return f(yN);\n }\n };\n return O({\n liftActionArgs: {\n id: i,\n clientSelection: gI(d),\n movementMode: "SNAP"\n },\n cleanup: Et,\n actions: y\n });\n }\n function v() {\n var y = Ln({\n expected: "PRE_DRAG",\n phase: M,\n isLockActive: A,\n shouldWarn: !0\n });\n y && t.release();\n }\n var L = {\n isActive: function() {\n return Ln({\n expected: "PRE_DRAG",\n phase: M,\n isLockActive: A,\n shouldWarn: !1\n });\n },\n shouldRespectForcePress: u,\n fluidLift: h,\n snapLift: g,\n abort: v\n };\n return L;\n}\nvar RI = [sI, dI, zI];\nfunction BI(e) {\n var t = e.contextId, o = e.store, n = e.registry, r = e.customSensors, i = e.enableDefaultSensors, a = [].concat(i ? RI : [], r || []), s = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(function() {\n return QT();\n })[0], l = l0(function(h, g) {\n h.isDragging && !g.isDragging && s.tryAbandon();\n }, [s]);\n ee(function() {\n var h = o.getState(), g = o.subscribe(function() {\n var v = o.getState();\n l(h, v), h = v;\n });\n return g;\n }, [s, o, l]), ee(function() {\n return s.tryAbandon;\n }, [s.tryAbandon]);\n var p = l0(function(O) {\n return jd({\n lockAPI: s,\n registry: n,\n store: o,\n draggableId: O\n });\n }, [s, n, o]), d = l0(function(O, h, g) {\n return WI({\n lockAPI: s,\n registry: n,\n contextId: t,\n store: o,\n draggableId: O,\n forceSensorStop: h,\n sourceEvent: g && g.sourceEvent ? g.sourceEvent : null\n });\n }, [t, s, n, o]), b = l0(function(O) {\n return yI(t, O);\n }, [t]), M = l0(function(O) {\n var h = n.draggable.findById(O);\n return h ? h.options : null;\n }, [n.draggable]), u = l0(function() {\n s.isClaimed() && (s.tryAbandon(), o.getState().phase !== "IDLE" && o.dispatch(x6()));\n }, [s, o]), A = l0(s.isClaimed, [s]), z = R0(function() {\n return {\n canGetLock: p,\n tryGetLock: d,\n findClosestDraggableId: b,\n findOptionsForDraggable: M,\n tryReleaseLock: u,\n isLockClaimed: A\n };\n }, [p, d, b, M, u, A]);\n hI(a);\n for (var f = 0; f < a.length; f++)\n a[f](z);\n}\nvar SI = function(t) {\n return {\n onBeforeCapture: t.onBeforeCapture,\n onBeforeDragStart: t.onBeforeDragStart,\n onDragStart: t.onDragStart,\n onDragEnd: t.onDragEnd,\n onDragUpdate: t.onDragUpdate\n };\n};\nfunction To(e) {\n return e.current || ( false ? 0 : y1(!1)), e.current;\n}\nfunction EI(e) {\n var t = e.contextId, o = e.setCallbacks, n = e.sensors, r = e.nonce, i = e.dragHandleUsageInstructions, a = (0,react__WEBPACK_IMPORTED_MODULE_0__.useRef)(null);\n GT();\n var s = H6(e), l = l0(function() {\n return SI(s.current);\n }, [s]), p = TT(t), d = VT({\n contextId: t,\n text: i\n }), b = RT(t, r), M = l0(function(F) {\n To(a).dispatch(F);\n }, []), u = R0(function() {\n return u9({\n publishWhileDragging: zN,\n updateDroppableScroll: ON,\n updateDroppableIsEnabled: fN,\n updateDroppableIsCombineEnabled: gN,\n collectionStarting: hN\n }, M);\n }, [M]), A = ET(), z = R0(function() {\n return cT(A, u);\n }, [A, u]), f = R0(function() {\n return qT(a0({\n scrollWindow: lT,\n scrollDroppable: z.scrollDroppable\n }, u9({\n move: Rd\n }, M)));\n }, [z.scrollDroppable, M]), O = BT(t), h = R0(function() {\n return nT({\n announce: p,\n autoScroller: f,\n dimensionMarshal: z,\n focusMarshal: O,\n getResponders: l,\n styleMarshal: b\n });\n }, [p, f, z, O, l, b]);\n false && 0, a.current = h;\n var g = l0(function() {\n var F = To(a), T = F.getState();\n T.phase !== "IDLE" && F.dispatch(x6());\n }, []), v = l0(function() {\n var F = To(a).getState();\n return F.isDragging || F.phase === "DROP_ANIMATING";\n }, []), L = R0(function() {\n return {\n isDragging: v,\n tryAbort: g\n };\n }, [v, g]);\n o(L);\n var y = l0(function(F) {\n return Dd(To(a).getState(), F);\n }, []), B = l0(function() {\n return t3(To(a).getState());\n }, []), X = R0(function() {\n return {\n marshal: z,\n focus: O,\n contextId: t,\n canLift: y,\n isMovementAllowed: B,\n dragHandleUsageInstructionsId: d,\n registry: A\n };\n }, [t, z, d, O, y, B, A]);\n return BI({\n contextId: t,\n store: h,\n registry: A,\n customSensors: n,\n enableDefaultSensors: e.enableDefaultSensors !== !1\n }), (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(function() {\n return g;\n }, [g]), react__WEBPACK_IMPORTED_MODULE_0___default().createElement(ei.Provider, {\n value: X\n }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement(Kp, {\n context: T6,\n store: h\n }, e.children));\n}\nvar kI = 0;\nfunction NI() {\n return R0(function() {\n return "" + kI++;\n }, []);\n}\nfunction TI(e) {\n var t = NI(), o = e.dragHandleUsageInstructions || Zn.dragHandleUsageInstructions;\n return react__WEBPACK_IMPORTED_MODULE_0___default().createElement(rk, null, function(n) {\n return react__WEBPACK_IMPORTED_MODULE_0___default().createElement(EI, {\n nonce: e.nonce,\n contextId: t,\n setCallbacks: n,\n dragHandleUsageInstructions: o,\n enableDefaultSensors: e.enableDefaultSensors,\n sensors: e.sensors,\n onBeforeCapture: e.onBeforeCapture,\n onBeforeDragStart: e.onBeforeDragStart,\n onDragStart: e.onDragStart,\n onDragUpdate: e.onDragUpdate,\n onDragEnd: e.onDragEnd\n }, e.children);\n });\n}\nvar P6 = function(t) {\n return function(o) {\n return t === o;\n };\n}, II = P6("scroll"), DI = P6("auto"), HI = P6("visible"), $9 = function(t, o) {\n return o(t.overflowX) || o(t.overflowY);\n}, VI = function(t, o) {\n return o(t.overflowX) && o(t.overflowY);\n}, Kd = function(t) {\n var o = window.getComputedStyle(t), n = {\n overflowX: o.overflowX,\n overflowY: o.overflowY\n };\n return $9(n, II) || $9(n, DI);\n}, PI = function() {\n if (true)\n return !1;\n var t = vr(), o = document.documentElement;\n if (o || ("production", y1(!1)), !Kd(t))\n return !1;\n var n = window.getComputedStyle(o), r = {\n overflowX: n.overflowX,\n overflowY: n.overflowY\n };\n return VI(r, HI) || false && 0, !1;\n}, Jd = function e(t) {\n return t == null ? null : t === document.body ? PI() ? t : null : t === document.documentElement ? null : Kd(t) ? t : e(t.parentElement);\n}, FI = function(e) {\n if (e) {\n var t = Jd(e.parentElement);\n t && "production" !== "production" && 0;\n }\n}, u5 = function(e) {\n return {\n x: e.scrollLeft,\n y: e.scrollTop\n };\n}, XI = function e(t) {\n if (!t)\n return !1;\n var o = window.getComputedStyle(t);\n return o.position === "fixed" ? !0 : e(t.parentElement);\n}, UI = function(e) {\n var t = Jd(e), o = XI(e);\n return {\n closestScrollable: t,\n isFixedOnPage: o\n };\n}, YI = function(e) {\n var t = e.descriptor, o = e.isEnabled, n = e.isCombineEnabled, r = e.isFixedOnPage, i = e.direction, a = e.client, s = e.page, l = e.closest, p = function() {\n if (!l)\n return null;\n var u = l.scrollSize, A = l.client, z = Nd({\n scrollHeight: u.scrollHeight,\n scrollWidth: u.scrollWidth,\n height: A.paddingBox.height,\n width: A.paddingBox.width\n });\n return {\n pageMarginBox: l.page.marginBox,\n frameClient: A,\n scrollSize: u,\n shouldClipSubject: l.shouldClipSubject,\n scroll: {\n initial: l.scroll,\n current: l.scroll,\n max: z,\n diff: {\n value: u2,\n displacement: u2\n }\n }\n };\n }(), d = i === "vertical" ? L6 : ud, b = eo({\n page: s,\n withPlaceholder: null,\n axis: d,\n frame: p\n }), M = {\n descriptor: t,\n isCombineEnabled: n,\n isFixedOnPage: r,\n axis: d,\n isEnabled: o,\n client: a,\n page: s,\n frame: p,\n subject: b\n };\n return M;\n}, GI = function(t, o) {\n var n = id(t);\n if (!o || t !== o)\n return n;\n var r = n.paddingBox.top - o.scrollTop, i = n.paddingBox.left - o.scrollLeft, a = r + o.scrollHeight, s = i + o.scrollWidth, l = {\n top: r,\n right: s,\n bottom: a,\n left: i\n }, p = O6(l, n.border), d = f6({\n borderBox: p,\n margin: n.margin,\n border: n.border,\n padding: n.padding\n });\n return d;\n}, QI = function(e) {\n var t = e.ref, o = e.descriptor, n = e.env, r = e.windowScroll, i = e.direction, a = e.isDropDisabled, s = e.isCombineEnabled, l = e.shouldClipSubject, p = n.closestScrollable, d = GI(t, p), b = q4(d, r), M = function() {\n if (!p)\n return null;\n var A = id(p), z = {\n scrollHeight: p.scrollHeight,\n scrollWidth: p.scrollWidth\n };\n return {\n client: A,\n page: q4(A, r),\n scroll: u5(p),\n scrollSize: z,\n shouldClipSubject: l\n };\n }(), u = YI({\n descriptor: o,\n isEnabled: !a,\n isCombineEnabled: s,\n isFixedOnPage: n.isFixedOnPage,\n direction: i,\n client: d,\n page: b,\n closest: M\n });\n return u;\n}, ZI = {\n passive: !1\n}, jI = {\n passive: !0\n}, ec = function(e) {\n return e.shouldPublishImmediately ? ZI : jI;\n};\nfunction W4(e) {\n var t = (0,react__WEBPACK_IMPORTED_MODULE_0__.useContext)(e);\n return t || ( false ? 0 : y1(!1)), t;\n}\nvar vn = function(t) {\n return t && t.env.closestScrollable || null;\n};\nfunction KI(e) {\n var t = (0,react__WEBPACK_IMPORTED_MODULE_0__.useRef)(null), o = W4(ei), n = I6("droppable"), r = o.registry, i = o.marshal, a = H6(e), s = R0(function() {\n return {\n id: e.droppableId,\n type: e.type,\n mode: e.mode\n };\n }, [e.droppableId, e.mode, e.type]), l = (0,react__WEBPACK_IMPORTED_MODULE_0__.useRef)(s), p = R0(function() {\n return p2(function(v, L) {\n t.current || ( false ? 0 : y1(!1));\n var y = {\n x: v,\n y: L\n };\n i.updateDroppableScroll(s.id, y);\n });\n }, [s.id, i]), d = l0(function() {\n var v = t.current;\n return !v || !v.env.closestScrollable ? u2 : u5(v.env.closestScrollable);\n }, []), b = l0(function() {\n var v = d();\n p(v.x, v.y);\n }, [d, p]), M = R0(function() {\n return Or(b);\n }, [b]), u = l0(function() {\n var v = t.current, L = vn(v);\n v && L || ( false ? 0 : y1(!1));\n var y = v.scrollOptions;\n if (y.shouldPublishImmediately) {\n b();\n return;\n }\n M();\n }, [M, b]), A = l0(function(v, L) {\n t.current && ( false ? 0 : y1(!1));\n var y = a.current, B = y.getDroppableRef();\n B || ( false ? 0 : y1(!1));\n var X = UI(B), F = {\n ref: B,\n descriptor: s,\n env: X,\n scrollOptions: L\n };\n t.current = F;\n var T = QI({\n ref: B,\n descriptor: s,\n env: X,\n windowScroll: v,\n direction: y.direction,\n isDropDisabled: y.isDropDisabled,\n isCombineEnabled: y.isCombineEnabled,\n shouldClipSubject: !y.ignoreContainerClipping\n }), w = X.closestScrollable;\n return w && (w.setAttribute(Z9.contextId, o.contextId), w.addEventListener("scroll", u, ec(F.scrollOptions)), false && 0), T;\n }, [o.contextId, s, u, a]), z = l0(function() {\n var v = t.current, L = vn(v);\n return v && L || ( false ? 0 : y1(!1)), u5(L);\n }, []), f = l0(function() {\n var v = t.current;\n v || ( false ? 0 : y1(!1));\n var L = vn(v);\n t.current = null, L && (M.cancel(), L.removeAttribute(Z9.contextId), L.removeEventListener("scroll", u, ec(v.scrollOptions)));\n }, [u, M]), O = l0(function(v) {\n var L = t.current;\n L || ( false ? 0 : y1(!1));\n var y = vn(L);\n y || ( false ? 0 : y1(!1)), y.scrollTop += v.y, y.scrollLeft += v.x;\n }, []), h = R0(function() {\n return {\n getDimensionAndWatchScroll: A,\n getScrollWhileDragging: z,\n dragStopped: f,\n scroll: O\n };\n }, [f, A, z, O]), g = R0(function() {\n return {\n uniqueId: n,\n descriptor: s,\n callbacks: h\n };\n }, [h, s, n]);\n ee(function() {\n return l.current = g.descriptor, r.droppable.register(g), function() {\n t.current && ( false && 0, f()), r.droppable.unregister(g);\n };\n }, [h, s, f, g, i, r.droppable]), ee(function() {\n t.current && i.updateDroppableIsEnabled(l.current.id, !e.isDropDisabled);\n }, [e.isDropDisabled, i]), ee(function() {\n t.current && i.updateDroppableIsCombineEnabled(l.current.id, e.isCombineEnabled);\n }, [e.isCombineEnabled, i]);\n}\nfunction sa() {\n}\nvar tc = {\n width: 0,\n height: 0,\n margin: lk\n}, JI = function(t) {\n var o = t.isAnimatingOpenOnMount, n = t.placeholder, r = t.animate;\n return o || r === "close" ? tc : {\n height: n.client.borderBox.height,\n width: n.client.borderBox.width,\n margin: n.client.margin\n };\n}, _I = function(t) {\n var o = t.isAnimatingOpenOnMount, n = t.placeholder, r = t.animate, i = JI({\n isAnimatingOpenOnMount: o,\n placeholder: n,\n animate: r\n });\n return {\n display: n.display,\n boxSizing: "border-box",\n width: i.width,\n height: i.height,\n marginTop: i.margin.top,\n marginRight: i.margin.right,\n marginBottom: i.margin.bottom,\n marginLeft: i.margin.left,\n flexShrink: "0",\n flexGrow: "0",\n pointerEvents: "none",\n transition: r !== "none" ? _o.placeholder : null\n };\n};\nfunction $I(e) {\n var t = (0,react__WEBPACK_IMPORTED_MODULE_0__.useRef)(null), o = l0(function() {\n t.current && (clearTimeout(t.current), t.current = null);\n }, []), n = e.animate, r = e.onTransitionEnd, i = e.onClose, a = e.contextId, s = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(e.animate === "open"), l = s[0], p = s[1];\n (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(function() {\n return l ? n !== "open" ? (o(), p(!1), sa) : t.current ? sa : (t.current = setTimeout(function() {\n t.current = null, p(!1);\n }), o) : sa;\n }, [n, l, o]);\n var d = l0(function(M) {\n M.propertyName === "height" && (r(), n === "close" && i());\n }, [n, i, r]), b = _I({\n isAnimatingOpenOnMount: l,\n animate: e.animate,\n placeholder: e.placeholder\n });\n return react__WEBPACK_IMPORTED_MODULE_0___default().createElement(e.placeholder.tagName, {\n style: b,\n "data-rbd-placeholder-context-id": a,\n onTransitionEnd: d,\n ref: e.innerRef\n });\n}\nvar eD = react__WEBPACK_IMPORTED_MODULE_0___default().memo($I), F6 = react__WEBPACK_IMPORTED_MODULE_0___default().createContext(null);\nfunction _d(e) {\n e && Fr(e) || ( false ? 0 : y1(!1));\n}\nfunction ca(e) {\n return typeof e == "boolean";\n}\nfunction la(e, t) {\n t.forEach(function(o) {\n return o(e);\n });\n}\nvar tD = [function(t) {\n var o = t.props;\n o.droppableId || ( false ? 0 : y1(!1)), typeof o.droppableId != "string" && ( false ? 0 : y1(!1));\n}, function(t) {\n var o = t.props;\n ca(o.isDropDisabled) || ( false ? 0 : y1(!1)), ca(o.isCombineEnabled) || ( false ? 0 : y1(!1)), ca(o.ignoreContainerClipping) || ( false ? 0 : y1(!1));\n}, function(t) {\n var o = t.getDroppableRef;\n _d(o());\n}], oD = [function(t) {\n var o = t.props, n = t.getPlaceholderRef;\n if (o.placeholder) {\n var r = n();\n r || false && 0;\n }\n}], rD = [function(t) {\n var o = t.props;\n o.renderClone || ( false ? 0 : y1(!1));\n}, function(t) {\n var o = t.getPlaceholderRef;\n o() && ( false ? 0 : y1(!1));\n}];\nfunction nD(e) {\n Xr(function() {\n la(e, tD), e.props.mode === "standard" && la(e, oD), e.props.mode === "virtual" && la(e, rD);\n });\n}\nvar iD = function(e) {\n V4(t, e);\n function t() {\n for (var n, r = arguments.length, i = new Array(r), a = 0; a < r; a++)\n i[a] = arguments[a];\n return n = e.call.apply(e, [this].concat(i)) || this, n.state = {\n isVisible: !!n.props.on,\n data: n.props.on,\n animate: n.props.shouldAnimate && n.props.on ? "open" : "none"\n }, n.onClose = function() {\n n.state.animate === "close" && n.setState({\n isVisible: !1\n });\n }, n;\n }\n t.getDerivedStateFromProps = function(r, i) {\n return r.shouldAnimate ? r.on ? {\n isVisible: !0,\n data: r.on,\n animate: "open"\n } : i.isVisible ? {\n isVisible: !0,\n data: i.data,\n animate: "close"\n } : {\n isVisible: !1,\n animate: "close",\n data: null\n } : {\n isVisible: !!r.on,\n data: r.on,\n animate: "none"\n };\n };\n var o = t.prototype;\n return o.render = function() {\n if (!this.state.isVisible)\n return null;\n var r = {\n onClose: this.onClose,\n data: this.state.data,\n animate: this.state.animate\n };\n return this.props.children(r);\n }, t;\n}((react__WEBPACK_IMPORTED_MODULE_0___default().PureComponent)), oc = {\n dragging: 5e3,\n dropAnimating: 4500\n}, aD = function(t, o) {\n return o ? _o.drop(o.duration) : t ? _o.snap : _o.fluid;\n}, sD = function(t, o) {\n return t ? o ? Lr.opacity.drop : Lr.opacity.combining : null;\n}, cD = function(t) {\n return t.forceShouldAnimate != null ? t.forceShouldAnimate : t.mode === "SNAP";\n};\nfunction lD(e) {\n var t = e.dimension, o = t.client, n = e.offset, r = e.combineWith, i = e.dropping, a = !!r, s = cD(e), l = !!i, p = l ? b5.drop(n, a) : b5.moveTo(n), d = {\n position: "fixed",\n top: o.marginBox.top,\n left: o.marginBox.left,\n boxSizing: "border-box",\n width: o.borderBox.width,\n height: o.borderBox.height,\n transition: aD(s, i),\n transform: p,\n opacity: sD(a, l),\n zIndex: l ? oc.dropAnimating : oc.dragging,\n pointerEvents: "none"\n };\n return d;\n}\nfunction pD(e) {\n return {\n transform: b5.moveTo(e.offset),\n transition: e.shouldAnimateDisplacement ? null : "none"\n };\n}\nfunction dD(e) {\n return e.type === "DRAGGING" ? lD(e) : pD(e);\n}\nfunction bD(e, t, o) {\n o === void 0 && (o = u2);\n var n = window.getComputedStyle(t), r = t.getBoundingClientRect(), i = nd(r, n), a = q4(i, o), s = {\n client: i,\n tagName: t.tagName.toLowerCase(),\n display: n.display\n }, l = {\n x: i.marginBox.width,\n y: i.marginBox.height\n }, p = {\n descriptor: e,\n placeholder: s,\n displaceBy: l,\n client: i,\n page: a\n };\n return p;\n}\nfunction MD(e) {\n var t = I6("draggable"), o = e.descriptor, n = e.registry, r = e.getDraggableRef, i = e.canDragInteractiveElements, a = e.shouldRespectForcePress, s = e.isEnabled, l = R0(function() {\n return {\n canDragInteractiveElements: i,\n shouldRespectForcePress: a,\n isEnabled: s\n };\n }, [i, s, a]), p = l0(function(u) {\n var A = r();\n return A || ( false ? 0 : y1(!1)), bD(o, A, u);\n }, [o, r]), d = R0(function() {\n return {\n uniqueId: t,\n descriptor: o,\n options: l,\n getDimension: p\n };\n }, [o, p, l, t]), b = (0,react__WEBPACK_IMPORTED_MODULE_0__.useRef)(d), M = (0,react__WEBPACK_IMPORTED_MODULE_0__.useRef)(!0);\n ee(function() {\n return n.draggable.register(b.current), function() {\n return n.draggable.unregister(b.current);\n };\n }, [n.draggable]), ee(function() {\n if (M.current) {\n M.current = !1;\n return;\n }\n var u = b.current;\n b.current = d, n.draggable.update(d, u);\n }, [d, n.draggable]);\n}\nfunction AD(e, t, o) {\n Xr(function() {\n function n(i) {\n return "Draggable[id: " + i + "]: ";\n }\n var r = e.draggableId;\n r || ( false ? 0 : y1(!1)), typeof r != "string" && ( false ? 0 : y1(!1)), Mk(e.index) || ( false ? 0 : y1(!1)), e.mapped.type !== "DRAGGING" && (_d(o()), e.isEnabled && (Xd(t, r) || ( false ? 0 : y1(!1))));\n });\n}\nfunction uD(e) {\n D6(function() {\n var t = (0,react__WEBPACK_IMPORTED_MODULE_0__.useRef)(e);\n Xr(function() {\n e !== t.current && ( false ? 0 : y1(!1));\n }, [e]);\n });\n}\nfunction zD(e) {\n e.preventDefault();\n}\nfunction hD(e) {\n var t = (0,react__WEBPACK_IMPORTED_MODULE_0__.useRef)(null), o = l0(function(F) {\n t.current = F;\n }, []), n = l0(function() {\n return t.current;\n }, []), r = W4(ei), i = r.contextId, a = r.dragHandleUsageInstructionsId, s = r.registry, l = W4(F6), p = l.type, d = l.droppableId, b = R0(function() {\n return {\n id: e.draggableId,\n index: e.index,\n type: p,\n droppableId: d\n };\n }, [e.draggableId, e.index, p, d]), M = e.children, u = e.draggableId, A = e.isEnabled, z = e.shouldRespectForcePress, f = e.canDragInteractiveElements, O = e.isClone, h = e.mapped, g = e.dropAnimationFinished;\n if (AD(e, i, n), uD(O), !O) {\n var v = R0(function() {\n return {\n descriptor: b,\n registry: s,\n getDraggableRef: n,\n canDragInteractiveElements: f,\n shouldRespectForcePress: z,\n isEnabled: A\n };\n }, [b, s, n, f, z, A]);\n MD(v);\n }\n var L = R0(function() {\n return A ? {\n tabIndex: 0,\n role: "button",\n "aria-describedby": a,\n "data-rbd-drag-handle-draggable-id": u,\n "data-rbd-drag-handle-context-id": i,\n draggable: !1,\n onDragStart: zD\n } : null;\n }, [i, a, u, A]), y = l0(function(F) {\n h.type === "DRAGGING" && h.dropping && F.propertyName === "transform" && g();\n }, [g, h]), B = R0(function() {\n var F = dD(h), T = h.type === "DRAGGING" && h.dropping ? y : null, w = {\n innerRef: o,\n draggableProps: {\n "data-rbd-draggable-context-id": i,\n "data-rbd-draggable-id": u,\n style: F,\n onTransitionEnd: T\n },\n dragHandleProps: L\n };\n return w;\n }, [i, L, u, h, y, o]), X = R0(function() {\n return {\n draggableId: b.id,\n type: b.type,\n source: {\n index: b.index,\n droppableId: b.droppableId\n }\n };\n }, [b.droppableId, b.id, b.index, b.type]);\n return M(B, h.snapshot, X);\n}\nvar $d = function(e, t) {\n return e === t;\n}, eb = function(e) {\n var t = e.combine, o = e.destination;\n return o ? o.droppableId : t ? t.droppableId : null;\n}, OD = function(t) {\n return t.combine ? t.combine.draggableId : null;\n}, fD = function(t) {\n return t.at && t.at.type === "COMBINE" ? t.at.combine.draggableId : null;\n};\nfunction gD() {\n var e = p2(function(r, i) {\n return {\n x: r,\n y: i\n };\n }), t = p2(function(r, i, a, s, l) {\n return {\n isDragging: !0,\n isClone: i,\n isDropAnimating: !!l,\n dropAnimation: l,\n mode: r,\n draggingOver: a,\n combineWith: s,\n combineTargetFor: null\n };\n }), o = p2(function(r, i, a, s, l, p, d) {\n return {\n mapped: {\n type: "DRAGGING",\n dropping: null,\n draggingOver: l,\n combineWith: p,\n mode: i,\n offset: r,\n dimension: a,\n forceShouldAnimate: d,\n snapshot: t(i, s, l, p, null)\n }\n };\n }), n = function(i, a) {\n if (i.isDragging) {\n if (i.critical.draggable.id !== a.draggableId)\n return null;\n var s = i.current.client.offset, l = i.dimensions.draggables[a.draggableId], p = $2(i.impact), d = fD(i.impact), b = i.forceShouldAnimate;\n return o(e(s.x, s.y), i.movementMode, l, a.isClone, p, d, b);\n }\n if (i.phase === "DROP_ANIMATING") {\n var M = i.completed;\n if (M.result.draggableId !== a.draggableId)\n return null;\n var u = a.isClone, A = i.dimensions.draggables[a.draggableId], z = M.result, f = z.mode, O = eb(z), h = OD(z), g = i.dropDuration, v = {\n duration: g,\n curve: R6.drop,\n moveTo: i.newHomeClientOffset,\n opacity: h ? Lr.opacity.drop : null,\n scale: h ? Lr.scale.drop : null\n };\n return {\n mapped: {\n type: "DRAGGING",\n offset: i.newHomeClientOffset,\n dimension: A,\n dropping: v,\n draggingOver: O,\n combineWith: h,\n mode: f,\n forceShouldAnimate: null,\n snapshot: t(f, u, O, h, v)\n }\n };\n }\n return null;\n };\n return n;\n}\nfunction tb(e) {\n return {\n isDragging: !1,\n isDropAnimating: !1,\n isClone: !1,\n dropAnimation: null,\n mode: null,\n draggingOver: null,\n combineTargetFor: e,\n combineWith: null\n };\n}\nvar CD = {\n mapped: {\n type: "SECONDARY",\n offset: u2,\n combineTargetFor: null,\n shouldAnimateDisplacement: !0,\n snapshot: tb(null)\n }\n};\nfunction mD() {\n var e = p2(function(a, s) {\n return {\n x: a,\n y: s\n };\n }), t = p2(tb), o = p2(function(a, s, l) {\n return s === void 0 && (s = null), {\n mapped: {\n type: "SECONDARY",\n offset: a,\n combineTargetFor: s,\n shouldAnimateDisplacement: l,\n snapshot: t(s)\n }\n };\n }), n = function(s) {\n return s ? o(u2, s, !0) : null;\n }, r = function(s, l, p, d) {\n var b = p.displaced.visible[s], M = !!(d.inVirtualList && d.effected[s]), u = J4(p), A = u && u.draggableId === s ? l : null;\n if (!b) {\n if (!M)\n return n(A);\n if (p.displaced.invisible[s])\n return null;\n var z = lo(d.displacedBy.point), f = e(z.x, z.y);\n return o(f, A, !0);\n }\n if (M)\n return n(A);\n var O = p.displacedBy.point, h = e(O.x, O.y);\n return o(h, A, b.shouldAnimate);\n }, i = function(s, l) {\n if (s.isDragging)\n return s.critical.draggable.id === l.draggableId ? null : r(l.draggableId, s.critical.draggable.id, s.impact, s.afterCritical);\n if (s.phase === "DROP_ANIMATING") {\n var p = s.completed;\n return p.result.draggableId === l.draggableId ? null : r(l.draggableId, p.result.draggableId, p.impact, p.afterCritical);\n }\n return null;\n };\n return i;\n}\nvar LD = function() {\n var t = gD(), o = mD(), n = function(i, a) {\n return t(i, a) || o(i, a) || CD;\n };\n return n;\n}, vD = {\n dropAnimationFinished: Sd\n}, qD = od(LD, vD, null, {\n context: T6,\n pure: !0,\n areStatePropsEqual: $d\n})(hD);\nfunction ob(e) {\n var t = W4(F6), o = t.isUsingCloneFor;\n return o === e.draggableId && !e.isClone ? null : react__WEBPACK_IMPORTED_MODULE_0___default().createElement(qD, e);\n}\nfunction yD(e) {\n var t = typeof e.isDragDisabled == "boolean" ? !e.isDragDisabled : !0, o = !!e.disableInteractiveElementBlocking, n = !!e.shouldRespectForcePress;\n return react__WEBPACK_IMPORTED_MODULE_0___default().createElement(ob, a0({}, e, {\n isClone: !1,\n isEnabled: t,\n canDragInteractiveElements: o,\n shouldRespectForcePress: n\n }));\n}\nfunction wD(e) {\n var t = (0,react__WEBPACK_IMPORTED_MODULE_0__.useContext)(ei);\n t || ( false ? 0 : y1(!1));\n var o = t.contextId, n = t.isMovementAllowed, r = (0,react__WEBPACK_IMPORTED_MODULE_0__.useRef)(null), i = (0,react__WEBPACK_IMPORTED_MODULE_0__.useRef)(null), a = e.children, s = e.droppableId, l = e.type, p = e.mode, d = e.direction, b = e.ignoreContainerClipping, M = e.isDropDisabled, u = e.isCombineEnabled, A = e.snapshot, z = e.useClone, f = e.updateViewportMaxScroll, O = e.getContainerForClone, h = l0(function() {\n return r.current;\n }, []), g = l0(function(H) {\n r.current = H;\n }, []), v = l0(function() {\n return i.current;\n }, []), L = l0(function(H) {\n i.current = H;\n }, []);\n nD({\n props: e,\n getDroppableRef: h,\n getPlaceholderRef: v\n });\n var y = l0(function() {\n n() && f({\n maxScroll: Id()\n });\n }, [n, f]);\n KI({\n droppableId: s,\n type: l,\n mode: p,\n direction: d,\n isDropDisabled: M,\n isCombineEnabled: u,\n ignoreContainerClipping: b,\n getDroppableRef: h\n });\n var B = react__WEBPACK_IMPORTED_MODULE_0___default().createElement(iD, {\n on: e.placeholder,\n shouldAnimate: e.shouldAnimatePlaceholder\n }, function(H) {\n var C = H.onClose, q = H.data, m = H.animate;\n return react__WEBPACK_IMPORTED_MODULE_0___default().createElement(eD, {\n placeholder: q,\n onClose: C,\n innerRef: L,\n animate: m,\n contextId: o,\n onTransitionEnd: y\n });\n }), X = R0(function() {\n return {\n innerRef: g,\n placeholder: B,\n droppableProps: {\n "data-rbd-droppable-id": s,\n "data-rbd-droppable-context-id": o\n }\n };\n }, [o, s, B, g]), F = z ? z.dragging.draggableId : null, T = R0(function() {\n return {\n droppableId: s,\n type: l,\n isUsingCloneFor: F\n };\n }, [s, F, l]);\n function w() {\n if (!z)\n return null;\n var H = z.dragging, C = z.render, q = react__WEBPACK_IMPORTED_MODULE_0___default().createElement(ob, {\n draggableId: H.draggableId,\n index: H.source.index,\n isClone: !0,\n isEnabled: !0,\n shouldRespectForcePress: !1,\n canDragInteractiveElements: !0\n }, function(m, k) {\n return C(m, k, H);\n });\n return react_dom__WEBPACK_IMPORTED_MODULE_2___default().createPortal(q, O());\n }\n return react__WEBPACK_IMPORTED_MODULE_0___default().createElement(F6.Provider, {\n value: T\n }, a(X, A), w());\n}\nvar pa = function(t, o) {\n return t === o.droppable.type;\n}, rc = function(t, o) {\n return o.draggables[t.draggable.id];\n}, xD = function() {\n var t = {\n placeholder: null,\n shouldAnimatePlaceholder: !0,\n snapshot: {\n isDraggingOver: !1,\n draggingOverWith: null,\n draggingFromThisWith: null,\n isUsingPlaceholder: !1\n },\n useClone: null\n }, o = a0({}, t, {\n shouldAnimatePlaceholder: !1\n }), n = p2(function(a) {\n return {\n draggableId: a.id,\n type: a.type,\n source: {\n index: a.index,\n droppableId: a.droppableId\n }\n };\n }), r = p2(function(a, s, l, p, d, b) {\n var M = d.descriptor.id, u = d.descriptor.droppableId === a;\n if (u) {\n var A = b ? {\n render: b,\n dragging: n(d.descriptor)\n } : null, z = {\n isDraggingOver: l,\n draggingOverWith: l ? M : null,\n draggingFromThisWith: M,\n isUsingPlaceholder: !0\n };\n return {\n placeholder: d.placeholder,\n shouldAnimatePlaceholder: !1,\n snapshot: z,\n useClone: A\n };\n }\n if (!s)\n return o;\n if (!p)\n return t;\n var f = {\n isDraggingOver: l,\n draggingOverWith: M,\n draggingFromThisWith: null,\n isUsingPlaceholder: !0\n };\n return {\n placeholder: d.placeholder,\n shouldAnimatePlaceholder: !0,\n snapshot: f,\n useClone: null\n };\n }), i = function(s, l) {\n var p = l.droppableId, d = l.type, b = !l.isDropDisabled, M = l.renderClone;\n if (s.isDragging) {\n var u = s.critical;\n if (!pa(d, u))\n return o;\n var A = rc(u, s.dimensions), z = $2(s.impact) === p;\n return r(p, b, z, z, A, M);\n }\n if (s.phase === "DROP_ANIMATING") {\n var f = s.completed;\n if (!pa(d, f.critical))\n return o;\n var O = rc(f.critical, s.dimensions);\n return r(p, b, eb(f.result) === p, $2(f.impact) === p, O, M);\n }\n if (s.phase === "IDLE" && s.completed && !s.shouldFlush) {\n var h = s.completed;\n if (!pa(d, h.critical))\n return o;\n var g = $2(h.impact) === p, v = !!(h.impact.at && h.impact.at.type === "COMBINE"), L = h.critical.droppable.id === p;\n return g ? v ? t : o : L ? t : o;\n }\n return o;\n };\n return i;\n}, WD = {\n updateViewportMaxScroll: mN\n};\nfunction RD() {\n return document.body || ( false ? 0 : y1(!1)), document.body;\n}\nvar BD = {\n mode: "standard",\n type: "DEFAULT",\n direction: "vertical",\n isDropDisabled: !1,\n isCombineEnabled: !1,\n ignoreContainerClipping: !1,\n renderClone: null,\n getContainerForClone: RD\n}, rb = od(xD, WD, null, {\n context: T6,\n pure: !0,\n areStatePropsEqual: $d\n})(wD);\nrb.defaultProps = BD;\nconst SD = styled_components__WEBPACK_IMPORTED_MODULE_1___default().div.attrs({\n as: "div"\n})`\n .scrollbar-container {\n padding-right: 0;\n }\n .ps__rail-y {\n right: 0 !important;\n }\n`, ED = (styled_components__WEBPACK_IMPORTED_MODULE_1___default().div)`\n display: flex;\n justify-content: space-between;\n align-items: center;\n width: 100%;\n box-sizing: border-box;\n padding: 2px 0;\n label {\n font-size: 12px;\n }\n`, kD = styled_components__WEBPACK_IMPORTED_MODULE_1___default().div.attrs({\n as: "div"\n})``, ND = styled_components__WEBPACK_IMPORTED_MODULE_1___default().div(\n ({ theme: { colors: e } }) => (0,styled_components__WEBPACK_IMPORTED_MODULE_1__.css)`\n .icon-system {\n cursor: move;\n padding: 3px;\n color: ${e.textIcon.textPrimary};\n }\n `\n), TD = (styled_components__WEBPACK_IMPORTED_MODULE_1___default().div)`\n max-height: ${(e) => e.$hasScroll ? "200px" : "338px"};\n`, ID = ({\n columnsState: e,\n selectedColumns: t,\n handleColumnsStateChange: o,\n handleCheckboxColumnsChange: n,\n pageSize: r,\n filterNames: i\n}) => {\n const a = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)(\n (b, M, u) => {\n const A = Array.from(b), [z] = A.splice(M, 1);\n return A.splice(u, 0, z), new Set(A);\n },\n []\n ), s = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)(\n (b) => {\n if (!b.destination)\n return;\n const M = a(\n e.items,\n b.source.index,\n b.destination.index\n );\n o({\n items: M\n });\n },\n [e, o, a]\n );\n function l(b) {\n return b == null ? void 0 : b.toLowerCase().replace(/\\s+/g, "");\n }\n function p(b, M) {\n for (const u of b)\n if (l(u) === l(M))\n return u;\n return null;\n }\n const d = () => /* @__PURE__ */ c(rb, { droppableId: "droppable", children: (b) => /* @__PURE__ */ e1("div", { ...b.droppableProps, ref: b.innerRef, children: [\n Array.from(e.items).map((M, u) => (\n // @ts-ignore\n /* @__PURE__ */ c(yD, { draggableId: M, index: u, children: (A) => /* @__PURE__ */ c(\n kD,\n {\n ref: A.innerRef,\n ...A.draggableProps,\n ...A.dragHandleProps,\n children: /* @__PURE__ */ e1(ED, { children: [\n /* @__PURE__ */ c(\n yt,\n {\n label: p(i, M) || r2(M),\n checked: t.has(M),\n isRequired: !0,\n onChange: n(M)\n }\n ),\n /* @__PURE__ */ c(ND, { children: /* @__PURE__ */ c(\n Z1,\n {\n name: "MoveDots",\n "aria-label": "Drag List Item",\n size: "xxs"\n }\n ) })\n ] })\n }\n ) }, M)\n )),\n b.placeholder\n ] }) });\n return /* @__PURE__ */ c(SD, { children: /* @__PURE__ */ c(j4, { options: { suppressScrollX: !0, useBothWheelAxes: !1 }, children: /* @__PURE__ */ c(TD, { $hasScroll: !!(r && r <= 10), children: /* @__PURE__ */ c(TI, { onDragEnd: s, children: d() }) }) }) });\n}, nc = (e, t) => !e && !t || e.size !== t.size ? !1 : String(Array.from(e)) === String(Array.from(t));\nvar nb = { exports: {} };\n(function(e) {\n /**\n * Highcharts JS v11.4.8 (2024-08-29)\n *\n * (c) 2009-2024 Torstein Honsi\n *\n * License: www.highcharts.com/license\n */\n (function(t, o) {\n e.exports ? (o.default = o, e.exports = t && t.document ? o(t) : o) : (t.Highcharts && t.Highcharts.error(16, !0), t.Highcharts = o(t));\n })(typeof window < "u" ? window : D5, function(t) {\n var o = {};\n function n(r, i, a, s) {\n !r.hasOwnProperty(i) && (r[i] = s.apply(null, a), t && typeof CustomEvent == "function" && t.dispatchEvent(new CustomEvent("HighchartsModuleLoaded", { detail: { path: i, module: r[i] } })));\n }\n return n(o, "Core/Globals.js", [], function() {\n var r, i;\n return (i = r || (r = {})).SVG_NS = "http://www.w3.org/2000/svg", i.product = "Highcharts", i.version = "11.4.8", i.win = t !== void 0 ? t : {}, i.doc = i.win.document, i.svg = i.doc && i.doc.createElementNS && !!i.doc.createElementNS(i.SVG_NS, "svg").createSVGRect, i.userAgent = i.win.navigator && i.win.navigator.userAgent || "", i.isChrome = i.win.chrome, i.isFirefox = i.userAgent.indexOf("Firefox") !== -1, i.isMS = /(edge|msie|trident)/i.test(i.userAgent) && !i.win.opera, i.isSafari = !i.isChrome && i.userAgent.indexOf("Safari") !== -1, i.isTouchDevice = /(Mobile|Android|Windows Phone)/.test(i.userAgent), i.isWebKit = i.userAgent.indexOf("AppleWebKit") !== -1, i.deg2rad = 2 * Math.PI / 360, i.hasBidiBug = i.isFirefox && 4 > parseInt(i.userAgent.split("Firefox/")[1], 10), i.marginNames = ["plotTop", "marginRight", "marginBottom", "plotLeft"], i.noop = function() {\n }, i.supportsPassiveEvents = function() {\n let a = !1;\n if (!i.isMS) {\n let s = Object.defineProperty({}, "passive", { get: function() {\n a = !0;\n } });\n i.win.addEventListener && i.win.removeEventListener && (i.win.addEventListener("testPassive", i.noop, s), i.win.removeEventListener("testPassive", i.noop, s));\n }\n return a;\n }(), i.charts = [], i.composed = [], i.dateFormats = {}, i.seriesTypes = {}, i.symbolSizes = {}, i.chartCount = 0, r;\n }), n(o, "Core/Utilities.js", [o["Core/Globals.js"]], function(r) {\n let i, { charts: a, doc: s, win: l } = r;\n function p(q, m, k, x) {\n let N = m ? "Highcharts error" : "Highcharts warning";\n q === 32 && (q = `${N}: Deprecated member`);\n let V = f(q), R = V ? `${N} #${q}: www.highcharts.com/errors/${q}/` : q.toString();\n if (x !== void 0) {\n let I = "";\n V && (R += "?"), T(x, function(j, U) {\n I += `\n - ${U}: ${j}`, V && (R += encodeURI(U) + "=" + encodeURI(j));\n }), R += I;\n }\n H(r, "displayError", { chart: k, code: q, message: R, params: x }, function() {\n if (m)\n throw Error(R);\n l.console && p.messages.indexOf(R) === -1 && console.warn(R);\n }), p.messages.push(R);\n }\n function d(q, m) {\n return parseInt(q, m || 10);\n }\n function b(q) {\n return typeof q == "string";\n }\n function M(q) {\n let m = Object.prototype.toString.call(q);\n return m === "[object Array]" || m === "[object Array Iterator]";\n }\n function u(q, m) {\n return !!q && typeof q == "object" && (!m || !M(q));\n }\n function A(q) {\n return u(q) && typeof q.nodeType == "number";\n }\n function z(q) {\n let m = q && q.constructor;\n return !!(u(q, !0) && !A(q) && m && m.name && m.name !== "Object");\n }\n function f(q) {\n return typeof q == "number" && !isNaN(q) && q < 1 / 0 && q > -1 / 0;\n }\n function O(q) {\n return q != null;\n }\n function h(q, m, k) {\n let x, N = b(m) && !O(k), V = (R, I) => {\n O(R) ? q.setAttribute(I, R) : N ? (x = q.getAttribute(I)) || I !== "class" || (x = q.getAttribute(I + "Name")) : q.removeAttribute(I);\n };\n return b(m) ? V(k, m) : T(m, V), x;\n }\n function g(q) {\n return M(q) ? q : [q];\n }\n function v(q, m) {\n let k;\n for (k in q || (q = {}), m)\n q[k] = m[k];\n return q;\n }\n function L() {\n let q = arguments, m = q.length;\n for (let k = 0; k < m; k++) {\n let x = q[k];\n if (x != null)\n return x;\n }\n }\n function y(q, m) {\n v(q.style, m);\n }\n function B(q) {\n return Math.pow(10, Math.floor(Math.log(q) / Math.LN10));\n }\n function X(q, m) {\n return q > 1e14 ? q : parseFloat(q.toPrecision(m || 14));\n }\n (p || (p = {})).messages = [], Math.easeInOutSine = function(q) {\n return -0.5 * (Math.cos(Math.PI * q) - 1);\n };\n let F = Array.prototype.find ? function(q, m) {\n return q.find(m);\n } : function(q, m) {\n let k, x = q.length;\n for (k = 0; k < x; k++)\n if (m(q[k], k))\n return q[k];\n };\n function T(q, m, k) {\n for (let x in q)\n Object.hasOwnProperty.call(q, x) && m.call(k || q[x], q[x], x, q);\n }\n function w(q, m, k) {\n function x(R, I) {\n let j = q.removeEventListener;\n j && j.call(q, R, I, !1);\n }\n function N(R) {\n let I, j;\n q.nodeName && (m ? (I = {})[m] = !0 : I = R, T(I, function(U, _) {\n if (R[_])\n for (j = R[_].length; j--; )\n x(_, R[_][j].fn);\n }));\n }\n let V = typeof q == "function" && q.prototype || q;\n if (Object.hasOwnProperty.call(V, "hcEvents")) {\n let R = V.hcEvents;\n if (m) {\n let I = R[m] || [];\n k ? (R[m] = I.filter(function(j) {\n return k !== j.fn;\n }), x(m, k)) : (N(R), R[m] = []);\n } else\n N(R), delete V.hcEvents;\n }\n }\n function H(q, m, k, x) {\n if (k = k || {}, s.createEvent && (q.dispatchEvent || q.fireEvent && q !== r)) {\n let N = s.createEvent("Events");\n N.initEvent(m, !0, !0), k = v(N, k), q.dispatchEvent ? q.dispatchEvent(k) : q.fireEvent(m, k);\n } else if (q.hcEvents) {\n k.target || v(k, { preventDefault: function() {\n k.defaultPrevented = !0;\n }, target: q, type: m });\n let N = [], V = q, R = !1;\n for (; V.hcEvents; )\n Object.hasOwnProperty.call(V, "hcEvents") && V.hcEvents[m] && (N.length && (R = !0), N.unshift.apply(N, V.hcEvents[m])), V = Object.getPrototypeOf(V);\n R && N.sort((I, j) => I.order - j.order), N.forEach((I) => {\n I.fn.call(q, k) === !1 && k.preventDefault();\n });\n }\n x && !k.defaultPrevented && x.call(q, k);\n }\n T({ map: "map", each: "forEach", grep: "filter", reduce: "reduce", some: "some" }, function(q, m) {\n r[m] = function(k) {\n return p(32, !1, void 0, { [`Highcharts.${m}`]: `use Array.${q}` }), Array.prototype[q].apply(k, [].slice.call(arguments, 1));\n };\n });\n let C = function() {\n let q = Math.random().toString(36).substring(2, 9) + "-", m = 0;\n return function() {\n return "highcharts-" + (i ? "" : q) + m++;\n };\n }();\n return l.jQuery && (l.jQuery.fn.highcharts = function() {\n let q = [].slice.call(arguments);\n if (this[0])\n return q[0] ? (new r[b(q[0]) ? q.shift() : "Chart"](this[0], q[0], q[1]), this) : a[h(this[0], "data-highcharts-chart")];\n }), { addEvent: function(q, m, k, x = {}) {\n let N = typeof q == "function" && q.prototype || q;\n Object.hasOwnProperty.call(N, "hcEvents") || (N.hcEvents = {});\n let V = N.hcEvents;\n r.Point && q instanceof r.Point && q.series && q.series.chart && (q.series.chart.runTrackerClick = !0);\n let R = q.addEventListener;\n R && R.call(q, m, k, !!r.supportsPassiveEvents && { passive: x.passive === void 0 ? m.indexOf("touch") !== -1 : x.passive, capture: !1 }), V[m] || (V[m] = []);\n let I = { fn: k, order: typeof x.order == "number" ? x.order : 1 / 0 };\n return V[m].push(I), V[m].sort((j, U) => j.order - U.order), function() {\n w(q, m, k);\n };\n }, arrayMax: function(q) {\n let m = q.length, k = q[0];\n for (; m--; )\n q[m] > k && (k = q[m]);\n return k;\n }, arrayMin: function(q) {\n let m = q.length, k = q[0];\n for (; m--; )\n q[m] < k && (k = q[m]);\n return k;\n }, attr: h, clamp: function(q, m, k) {\n return q > m ? q < k ? q : k : m;\n }, clearTimeout: function(q) {\n O(q) && clearTimeout(q);\n }, correctFloat: X, createElement: function(q, m, k, x, N) {\n let V = s.createElement(q);\n return m && v(V, m), N && y(V, { padding: "0", border: "none", margin: "0" }), k && y(V, k), x && x.appendChild(V), V;\n }, crisp: (q, m = 0, k) => {\n let x = m % 2 / 2, N = k ? -1 : 1;\n return (Math.round(q * N - x) + x) * N;\n }, css: y, defined: O, destroyObjectProperties: function(q, m, k) {\n T(q, function(x, N) {\n x !== m && (x != null && x.destroy) && x.destroy(), (x != null && x.destroy || !k) && delete q[N];\n });\n }, diffObjects: function(q, m, k, x) {\n let N = {};\n return function V(R, I, j, U) {\n let _ = k ? I : R;\n T(R, function(r1, K) {\n if (!U && x && x.indexOf(K) > -1 && I[K]) {\n r1 = g(r1), j[K] = [];\n for (let Q = 0; Q < Math.max(r1.length, I[K].length); Q++)\n I[K][Q] && (r1[Q] === void 0 ? j[K][Q] = I[K][Q] : (j[K][Q] = {}, V(r1[Q], I[K][Q], j[K][Q], U + 1)));\n } else\n u(r1, !0) && !r1.nodeType ? (j[K] = M(r1) ? [] : {}, V(r1, I[K] || {}, j[K], U + 1), Object.keys(j[K]).length !== 0 || K === "colorAxis" && U === 0 || delete j[K]) : (R[K] !== I[K] || K in R && !(K in I)) && K !== "__proto__" && K !== "constructor" && (j[K] = _[K]);\n });\n }(q, m, N, 0), N;\n }, discardElement: function(q) {\n q && q.parentElement && q.parentElement.removeChild(q);\n }, erase: function(q, m) {\n let k = q.length;\n for (; k--; )\n if (q[k] === m) {\n q.splice(k, 1);\n break;\n }\n }, error: p, extend: v, extendClass: function(q, m) {\n let k = function() {\n };\n return k.prototype = new q(), v(k.prototype, m), k;\n }, find: F, fireEvent: H, getClosestDistance: function(q, m) {\n let k, x, N, V = !m;\n return q.forEach((R) => {\n if (R.length > 1)\n for (N = R.length - 1; N > 0; N--)\n (x = R[N] - R[N - 1]) < 0 && !V ? (m == null || m(), m = void 0) : x && (k === void 0 || x < k) && (k = x);\n }), k;\n }, getMagnitude: B, getNestedProperty: function(q, m) {\n let k = q.split(".");\n for (; k.length && O(m); ) {\n let x = k.shift();\n if (x === void 0 || x === "__proto__")\n return;\n if (x === "this") {\n let V;\n return u(m) && (V = m["@this"]), V ?? m;\n }\n let N = m[x];\n if (!O(N) || typeof N == "function" || typeof N.nodeType == "number" || N === l)\n return;\n m = N;\n }\n return m;\n }, getStyle: function q(m, k, x) {\n let N;\n if (k === "width") {\n let R = Math.min(m.offsetWidth, m.scrollWidth), I = m.getBoundingClientRect && m.getBoundingClientRect().width;\n return I < R && I >= R - 1 && (R = Math.floor(I)), Math.max(0, R - (q(m, "padding-left", !0) || 0) - (q(m, "padding-right", !0) || 0));\n }\n if (k === "height")\n return Math.max(0, Math.min(m.offsetHeight, m.scrollHeight) - (q(m, "padding-top", !0) || 0) - (q(m, "padding-bottom", !0) || 0));\n let V = l.getComputedStyle(m, void 0);\n return V && (N = V.getPropertyValue(k), L(x, k !== "opacity") && (N = d(N))), N;\n }, inArray: function(q, m, k) {\n return p(32, !1, void 0, { "Highcharts.inArray": "use Array.indexOf" }), m.indexOf(q, k);\n }, insertItem: function(q, m) {\n let k, x = q.options.index, N = m.length;\n for (k = q.options.isInternal ? N : 0; k < N + 1; k++)\n if (!m[k] || f(x) && x < L(m[k].options.index, m[k]._i) || m[k].options.isInternal) {\n m.splice(k, 0, q);\n break;\n }\n return k;\n }, isArray: M, isClass: z, isDOMElement: A, isFunction: function(q) {\n return typeof q == "function";\n }, isNumber: f, isObject: u, isString: b, keys: function(q) {\n return p(32, !1, void 0, { "Highcharts.keys": "use Object.keys" }), Object.keys(q);\n }, merge: function() {\n let q, m = arguments, k = {}, x = function(V, R) {\n return typeof V != "object" && (V = {}), T(R, function(I, j) {\n j !== "__proto__" && j !== "constructor" && (!u(I, !0) || z(I) || A(I) ? V[j] = R[j] : V[j] = x(V[j] || {}, I));\n }), V;\n };\n m[0] === !0 && (k = m[1], m = Array.prototype.slice.call(m, 2));\n let N = m.length;\n for (q = 0; q < N; q++)\n k = x(k, m[q]);\n return k;\n }, normalizeTickInterval: function(q, m, k, x, N) {\n let V, R = q;\n k = L(k, B(q));\n let I = q / k;\n for (!m && (m = N ? [1, 1.2, 1.5, 2, 2.5, 3, 4, 5, 6, 8, 10] : [1, 2, 2.5, 5, 10], x === !1 && (k === 1 ? m = m.filter(function(j) {\n return j % 1 == 0;\n }) : k <= 0.1 && (m = [1 / k]))), V = 0; V < m.length && (R = m[V], (!N || !(R * k >= q)) && (N || !(I <= (m[V] + (m[V + 1] || m[V])) / 2))); V++)\n ;\n return X(R * k, -Math.round(Math.log(1e-3) / Math.LN10));\n }, objectEach: T, offset: function(q) {\n let m = s.documentElement, k = q.parentElement || q.parentNode ? q.getBoundingClientRect() : { top: 0, left: 0, width: 0, height: 0 };\n return { top: k.top + (l.pageYOffset || m.scrollTop) - (m.clientTop || 0), left: k.left + (l.pageXOffset || m.scrollLeft) - (m.clientLeft || 0), width: k.width, height: k.height };\n }, pad: function(q, m, k) {\n return Array((m || 2) + 1 - String(q).replace("-", "").length).join(k || "0") + q;\n }, pick: L, pInt: d, pushUnique: function(q, m) {\n return 0 > q.indexOf(m) && !!q.push(m);\n }, relativeLength: function(q, m, k) {\n return /%$/.test(q) ? m * parseFloat(q) / 100 + (k || 0) : parseFloat(q);\n }, removeEvent: w, replaceNested: function(q, ...m) {\n let k, x;\n do\n for (x of (k = q, m))\n q = q.replace(x[0], x[1]);\n while (q !== k);\n return q;\n }, splat: g, stableSort: function(q, m) {\n let k, x, N = q.length;\n for (x = 0; x < N; x++)\n q[x].safeI = x;\n for (q.sort(function(V, R) {\n return (k = m(V, R)) === 0 ? V.safeI - R.safeI : k;\n }), x = 0; x < N; x++)\n delete q[x].safeI;\n }, syncTimeout: function(q, m, k) {\n return m > 0 ? setTimeout(q, m, k) : (q.call(0, k), -1);\n }, timeUnits: { millisecond: 1, second: 1e3, minute: 6e4, hour: 36e5, day: 864e5, week: 6048e5, month: 24192e5, year: 314496e5 }, uniqueKey: C, useSerialIds: function(q) {\n return i = L(q, i);\n }, wrap: function(q, m, k) {\n let x = q[m];\n q[m] = function() {\n let N = arguments, V = this;\n return k.apply(this, [function() {\n return x.apply(V, arguments.length ? arguments : N);\n }].concat([].slice.call(arguments)));\n };\n } };\n }), n(o, "Core/Chart/ChartDefaults.js", [], function() {\n return { alignThresholds: !1, panning: { enabled: !1, type: "x" }, styledMode: !1, borderRadius: 0, colorCount: 10, allowMutatingData: !0, ignoreHiddenSeries: !0, spacing: [10, 10, 15, 10], resetZoomButton: { theme: {}, position: {} }, reflow: !0, type: "line", zooming: { singleTouch: !1, resetButton: { theme: { zIndex: 6 }, position: { align: "right", x: -10, y: 10 } } }, width: null, height: null, borderColor: "#334eff", backgroundColor: "#ffffff", plotBorderColor: "#cccccc" };\n }), n(o, "Core/Color/Palettes.js", [], function() {\n return { colors: ["#2caffe", "#544fc5", "#00e272", "#fe6a35", "#6b8abc", "#d568fb", "#2ee0ca", "#fa4b42", "#feb56a", "#91e8e1"] };\n }), n(o, "Core/Time.js", [o["Core/Globals.js"], o["Core/Utilities.js"]], function(r, i) {\n let { win: a } = r, { defined: s, error: l, extend: p, isNumber: d, isObject: b, merge: M, objectEach: u, pad: A, pick: z, splat: f, timeUnits: O } = i, h = r.isSafari && a.Intl && a.Intl.DateTimeFormat.prototype.formatRange, g = r.isSafari && a.Intl && !a.Intl.DateTimeFormat.prototype.formatRange;\n class v {\n constructor(y) {\n this.options = {}, this.useUTC = !1, this.variableTimezone = !1, this.Date = a.Date, this.getTimezoneOffset = this.timezoneOffsetFunction(), this.update(y);\n }\n get(y, B) {\n if (this.variableTimezone || this.timezoneOffset) {\n let X = B.getTime(), F = X - this.getTimezoneOffset(B);\n B.setTime(F);\n let T = B["getUTC" + y]();\n return B.setTime(X), T;\n }\n return this.useUTC ? B["getUTC" + y]() : B["get" + y]();\n }\n set(y, B, X) {\n if (this.variableTimezone || this.timezoneOffset) {\n if (y === "Milliseconds" || y === "Seconds" || y === "Minutes" && this.getTimezoneOffset(B) % 36e5 == 0)\n return B["setUTC" + y](X);\n let F = this.getTimezoneOffset(B), T = B.getTime() - F;\n B.setTime(T), B["setUTC" + y](X);\n let w = this.getTimezoneOffset(B);\n return T = B.getTime() + w, B.setTime(T);\n }\n return this.useUTC || h && y === "FullYear" ? B["setUTC" + y](X) : B["set" + y](X);\n }\n update(y = {}) {\n let B = z(y.useUTC, !0);\n this.options = y = M(!0, this.options, y), this.Date = y.Date || a.Date || Date, this.useUTC = B, this.timezoneOffset = B && y.timezoneOffset || void 0, this.getTimezoneOffset = this.timezoneOffsetFunction(), this.variableTimezone = B && !!(y.getTimezoneOffset || y.timezone);\n }\n makeTime(y, B, X, F, T, w) {\n let H, C, q;\n return this.useUTC ? (H = this.Date.UTC.apply(0, arguments), C = this.getTimezoneOffset(H), H += C, C !== (q = this.getTimezoneOffset(H)) ? H += q - C : C - 36e5 !== this.getTimezoneOffset(H - 36e5) || g || (H -= 36e5)) : H = new this.Date(y, B, z(X, 1), z(F, 0), z(T, 0), z(w, 0)).getTime(), H;\n }\n timezoneOffsetFunction() {\n let y = this, B = this.options, X = B.getTimezoneOffset;\n return this.useUTC ? B.timezone ? (F) => {\n try {\n let T = `shortOffset,${B.timezone || ""}`, [w, H, C, q, m = 0] = (v.formatCache[T] = v.formatCache[T] || Intl.DateTimeFormat("en", { timeZone: B.timezone, timeZoneName: "shortOffset" })).format(F).split(/(GMT|:)/).map(Number), k = -(36e5 * (C + m / 60));\n if (d(k))\n return k;\n } catch {\n l(34);\n }\n return 0;\n } : this.useUTC && X ? (F) => 6e4 * X(F.valueOf()) : () => 6e4 * (y.timezoneOffset || 0) : (F) => 6e4 * new Date(F.toString()).getTimezoneOffset();\n }\n dateFormat(y, B, X) {\n if (!s(B) || isNaN(B))\n return r.defaultOptions.lang && r.defaultOptions.lang.invalidDate || "";\n y = z(y, "%Y-%m-%d %H:%M:%S");\n let F = this, T = new this.Date(B), w = this.get("Hours", T), H = this.get("Day", T), C = this.get("Date", T), q = this.get("Month", T), m = this.get("FullYear", T), k = r.defaultOptions.lang, x = k && k.weekdays, N = k && k.shortWeekdays;\n return u(p({ a: N ? N[H] : x[H].substr(0, 3), A: x[H], d: A(C), e: A(C, 2, " "), w: H, b: k.shortMonths[q], B: k.months[q], m: A(q + 1), o: q + 1, y: m.toString().substr(2, 2), Y: m, H: A(w), k: w, I: A(w % 12 || 12), l: w % 12 || 12, M: A(this.get("Minutes", T)), p: w < 12 ? "AM" : "PM", P: w < 12 ? "am" : "pm", S: A(this.get("Seconds", T)), L: A(Math.floor(B % 1e3), 3) }, r.dateFormats), function(V, R) {\n for (; y.indexOf("%" + R) !== -1; )\n y = y.replace("%" + R, typeof V == "function" ? V.call(F, B) : V);\n }), X ? y.substr(0, 1).toUpperCase() + y.substr(1) : y;\n }\n resolveDTLFormat(y) {\n return b(y, !0) ? y : { main: (y = f(y))[0], from: y[1], to: y[2] };\n }\n getTimeTicks(y, B, X, F) {\n let T, w, H, C, q = this, m = q.Date, k = [], x = {}, N = new m(B), V = y.unitRange, R = y.count || 1;\n if (F = z(F, 1), s(B)) {\n q.set("Milliseconds", N, V >= O.second ? 0 : R * Math.floor(q.get("Milliseconds", N) / R)), V >= O.second && q.set("Seconds", N, V >= O.minute ? 0 : R * Math.floor(q.get("Seconds", N) / R)), V >= O.minute && q.set("Minutes", N, V >= O.hour ? 0 : R * Math.floor(q.get("Minutes", N) / R)), V >= O.hour && q.set("Hours", N, V >= O.day ? 0 : R * Math.floor(q.get("Hours", N) / R)), V >= O.day && q.set("Date", N, V >= O.month ? 1 : Math.max(1, R * Math.floor(q.get("Date", N) / R))), V >= O.month && (q.set("Month", N, V >= O.year ? 0 : R * Math.floor(q.get("Month", N) / R)), w = q.get("FullYear", N)), V >= O.year && (w -= w % R, q.set("FullYear", N, w)), V === O.week && (C = q.get("Day", N), q.set("Date", N, q.get("Date", N) - C + F + (C < F ? -7 : 0))), w = q.get("FullYear", N);\n let I = q.get("Month", N), j = q.get("Date", N), U = q.get("Hours", N);\n B = N.getTime(), (q.variableTimezone || !q.useUTC) && s(X) && (H = X - B > 4 * O.month || q.getTimezoneOffset(B) !== q.getTimezoneOffset(X));\n let _ = N.getTime();\n for (T = 1; _ < X; )\n k.push(_), V === O.year ? _ = q.makeTime(w + T * R, 0) : V === O.month ? _ = q.makeTime(w, I + T * R) : H && (V === O.day || V === O.week) ? _ = q.makeTime(w, I, j + T * R * (V === O.day ? 1 : 7)) : H && V === O.hour && R > 1 ? _ = q.makeTime(w, I, j, U + T * R) : _ += V * R, T++;\n k.push(_), V <= O.hour && k.length < 1e4 && k.forEach(function(r1) {\n r1 % 18e5 == 0 && q.dateFormat("%H%M%S%L", r1) === "000000000" && (x[r1] = "day");\n });\n }\n return k.info = p(y, { higherRanks: x, totalRange: V * R }), k;\n }\n getDateFormat(y, B, X, F) {\n let T = this.dateFormat("%m-%d %H:%M:%S.%L", B), w = "01-01 00:00:00.000", H = { millisecond: 15, second: 12, minute: 9, hour: 6, day: 3 }, C = "millisecond", q = C;\n for (C in O) {\n if (y === O.week && +this.dateFormat("%w", B) === X && T.substr(6) === w.substr(6)) {\n C = "week";\n break;\n }\n if (O[C] > y) {\n C = q;\n break;\n }\n if (H[C] && T.substr(H[C]) !== w.substr(H[C]))\n break;\n C !== "week" && (q = C);\n }\n return this.resolveDTLFormat(F[C]).main;\n }\n }\n return v.formatCache = {}, v;\n }), n(o, "Core/Defaults.js", [o["Core/Chart/ChartDefaults.js"], o["Core/Globals.js"], o["Core/Color/Palettes.js"], o["Core/Time.js"], o["Core/Utilities.js"]], function(r, i, a, s, l) {\n let { isTouchDevice: p } = i, { fireEvent: d, merge: b } = l, M = { colors: a.colors, symbols: ["circle", "diamond", "square", "triangle", "triangle-down"], lang: { loading: "Loading...", months: ["January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"], shortMonths: ["Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"], weekdays: ["Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"], decimalPoint: ".", numericSymbols: ["k", "M", "G", "T", "P", "E"], resetZoom: "Reset zoom", resetZoomTitle: "Reset zoom level 1:1", thousandsSep: " " }, global: { buttonTheme: { fill: "#f7f7f7", padding: 8, r: 2, stroke: "#cccccc", "stroke-width": 1, style: { color: "#333333", cursor: "pointer", fontSize: "0.8em", fontWeight: "normal" }, states: { hover: { fill: "#e6e6e6" }, select: { fill: "#e6e9ff", style: { color: "#000000", fontWeight: "bold" } }, disabled: { style: { color: "#cccccc" } } } } }, time: { Date: void 0, getTimezoneOffset: void 0, timezone: void 0, timezoneOffset: 0, useUTC: !0 }, chart: r, title: { style: { color: "#333333", fontWeight: "bold" }, text: "Chart title", align: "center", margin: 15, widthAdjust: -44 }, subtitle: { style: { color: "#666666", fontSize: "0.8em" }, text: "", align: "center", widthAdjust: -44 }, caption: { margin: 15, style: { color: "#666666", fontSize: "0.8em" }, text: "", align: "left", verticalAlign: "bottom" }, plotOptions: {}, legend: { enabled: !0, align: "center", alignColumns: !0, className: "highcharts-no-tooltip", events: {}, layout: "horizontal", itemMarginBottom: 2, itemMarginTop: 2, labelFormatter: function() {\n return this.name;\n }, borderColor: "#999999", borderRadius: 0, navigation: { style: { fontSize: "0.8em" }, activeColor: "#0022ff", inactiveColor: "#cccccc" }, itemStyle: { color: "#333333", cursor: "pointer", fontSize: "0.8em", textDecoration: "none", textOverflow: "ellipsis" }, itemHoverStyle: { color: "#000000" }, itemHiddenStyle: { color: "#666666", textDecoration: "line-through" }, shadow: !1, itemCheckboxStyle: { position: "absolute", width: "13px", height: "13px" }, squareSymbol: !0, symbolPadding: 5, verticalAlign: "bottom", x: 0, y: 0, title: { style: { fontSize: "0.8em", fontWeight: "bold" } } }, loading: { labelStyle: { fontWeight: "bold", position: "relative", top: "45%" }, style: { position: "absolute", backgroundColor: "#ffffff", opacity: 0.5, textAlign: "center" } }, tooltip: { enabled: !0, animation: { duration: 300, easing: (A) => Math.sqrt(1 - Math.pow(A - 1, 2)) }, borderRadius: 3, dateTimeLabelFormats: { millisecond: "%A, %e %b, %H:%M:%S.%L", second: "%A, %e %b, %H:%M:%S", minute: "%A, %e %b, %H:%M", hour: "%A, %e %b, %H:%M", day: "%A, %e %b %Y", week: "Week from %A, %e %b %Y", month: "%B %Y", year: "%Y" }, footerFormat: "", headerShape: "callout", hideDelay: 500, padding: 8, shape: "callout", shared: !1, snap: p ? 25 : 10, headerFormat: \'{point.key}
\', pointFormat: \' {series.name}: {point.y}
\', backgroundColor: "#ffffff", borderWidth: void 0, shadow: !0, stickOnContact: !1, style: { color: "#333333", cursor: "default", fontSize: "0.8em" }, useHTML: !1 }, credits: { enabled: !0, href: "https://www.highcharts.com?credits", position: { align: "right", x: -10, verticalAlign: "bottom", y: -5 }, style: { cursor: "pointer", color: "#999999", fontSize: "0.6em" }, text: "Highcharts.com" } };\n M.chart.styledMode = !1;\n let u = new s(M.time);\n return { defaultOptions: M, defaultTime: u, getOptions: function() {\n return M;\n }, setOptions: function(A) {\n return d(i, "setOptions", { options: A }), b(!0, M, A), (A.time || A.global) && (i.time ? i.time.update(b(M.global, M.time, A.global, A.time)) : i.time = u), M;\n } };\n }), n(o, "Core/Color/Color.js", [o["Core/Globals.js"], o["Core/Utilities.js"]], function(r, i) {\n let { isNumber: a, merge: s, pInt: l } = i;\n class p {\n static parse(b) {\n return b ? new p(b) : p.None;\n }\n constructor(b) {\n let M, u, A, z;\n this.rgba = [NaN, NaN, NaN, NaN], this.input = b;\n let f = r.Color;\n if (f && f !== p)\n return new f(b);\n if (typeof b == "object" && b.stops !== void 0)\n this.stops = b.stops.map((O) => new p(O[1]));\n else if (typeof b == "string") {\n if (this.input = b = p.names[b.toLowerCase()] || b, b.charAt(0) === "#") {\n let O = b.length, h = parseInt(b.substr(1), 16);\n O === 7 ? u = [(16711680 & h) >> 16, (65280 & h) >> 8, 255 & h, 1] : O === 4 && (u = [(3840 & h) >> 4 | (3840 & h) >> 8, (240 & h) >> 4 | 240 & h, (15 & h) << 4 | 15 & h, 1]);\n }\n if (!u)\n for (A = p.parsers.length; A-- && !u; )\n (M = (z = p.parsers[A]).regex.exec(b)) && (u = z.parse(M));\n }\n u && (this.rgba = u);\n }\n get(b) {\n let M = this.input, u = this.rgba;\n if (typeof M == "object" && this.stops !== void 0) {\n let A = s(M);\n return A.stops = [].slice.call(A.stops), this.stops.forEach((z, f) => {\n A.stops[f] = [A.stops[f][0], z.get(b)];\n }), A;\n }\n return u && a(u[0]) ? b !== "rgb" && (b || u[3] !== 1) ? b === "a" ? `${u[3]}` : "rgba(" + u.join(",") + ")" : "rgb(" + u[0] + "," + u[1] + "," + u[2] + ")" : M;\n }\n brighten(b) {\n let M = this.rgba;\n if (this.stops)\n this.stops.forEach(function(u) {\n u.brighten(b);\n });\n else if (a(b) && b !== 0)\n for (let u = 0; u < 3; u++)\n M[u] += l(255 * b), M[u] < 0 && (M[u] = 0), M[u] > 255 && (M[u] = 255);\n return this;\n }\n setOpacity(b) {\n return this.rgba[3] = b, this;\n }\n tweenTo(b, M) {\n let u = this.rgba, A = b.rgba;\n if (!a(u[0]) || !a(A[0]))\n return b.input || "none";\n let z = A[3] !== 1 || u[3] !== 1;\n return (z ? "rgba(" : "rgb(") + Math.round(A[0] + (u[0] - A[0]) * (1 - M)) + "," + Math.round(A[1] + (u[1] - A[1]) * (1 - M)) + "," + Math.round(A[2] + (u[2] - A[2]) * (1 - M)) + (z ? "," + (A[3] + (u[3] - A[3]) * (1 - M)) : "") + ")";\n }\n }\n return p.names = { white: "#ffffff", black: "#000000" }, p.parsers = [{ regex: /rgba\\(\\s*(\\d{1,3})\\s*,\\s*(\\d{1,3})\\s*,\\s*(\\d{1,3})\\s*,\\s*(\\d?(?:\\.\\d+)?)\\s*\\)/, parse: function(d) {\n return [l(d[1]), l(d[2]), l(d[3]), parseFloat(d[4], 10)];\n } }, { regex: /rgb\\(\\s*(\\d{1,3})\\s*,\\s*(\\d{1,3})\\s*,\\s*(\\d{1,3})\\s*\\)/, parse: function(d) {\n return [l(d[1]), l(d[2]), l(d[3]), 1];\n } }], p.None = new p(""), p;\n }), n(o, "Core/Animation/Fx.js", [o["Core/Color/Color.js"], o["Core/Globals.js"], o["Core/Utilities.js"]], function(r, i, a) {\n let { parse: s } = r, { win: l } = i, { isNumber: p, objectEach: d } = a;\n class b {\n constructor(u, A, z) {\n this.pos = NaN, this.options = A, this.elem = u, this.prop = z;\n }\n dSetter() {\n let u = this.paths, A = u && u[0], z = u && u[1], f = this.now || 0, O = [];\n if (f !== 1 && A && z)\n if (A.length === z.length && f < 1)\n for (let h = 0; h < z.length; h++) {\n let g = A[h], v = z[h], L = [];\n for (let y = 0; y < v.length; y++) {\n let B = g[y], X = v[y];\n p(B) && p(X) && !(v[0] === "A" && (y === 4 || y === 5)) ? L[y] = B + f * (X - B) : L[y] = X;\n }\n O.push(L);\n }\n else\n O = z;\n else\n O = this.toD || [];\n this.elem.attr("d", O, void 0, !0);\n }\n update() {\n let u = this.elem, A = this.prop, z = this.now, f = this.options.step;\n this[A + "Setter"] ? this[A + "Setter"]() : u.attr ? u.element && u.attr(A, z, null, !0) : u.style[A] = z + this.unit, f && f.call(u, z, this);\n }\n run(u, A, z) {\n let f = this, O = f.options, h = function(L) {\n return !h.stopped && f.step(L);\n }, g = l.requestAnimationFrame || function(L) {\n setTimeout(L, 13);\n }, v = function() {\n for (let L = 0; L < b.timers.length; L++)\n b.timers[L]() || b.timers.splice(L--, 1);\n b.timers.length && g(v);\n };\n u !== A || this.elem["forceAnimate:" + this.prop] ? (this.startTime = +/* @__PURE__ */ new Date(), this.start = u, this.end = A, this.unit = z, this.now = this.start, this.pos = 0, h.elem = this.elem, h.prop = this.prop, h() && b.timers.push(h) === 1 && g(v)) : (delete O.curAnim[this.prop], O.complete && Object.keys(O.curAnim).length === 0 && O.complete.call(this.elem));\n }\n step(u) {\n let A, z, f = +/* @__PURE__ */ new Date(), O = this.options, h = this.elem, g = O.complete, v = O.duration, L = O.curAnim;\n return h.attr && !h.element ? A = !1 : u || f >= v + this.startTime ? (this.now = this.end, this.pos = 1, this.update(), L[this.prop] = !0, z = !0, d(L, function(y) {\n y !== !0 && (z = !1);\n }), z && g && g.call(h), A = !1) : (this.pos = O.easing((f - this.startTime) / v), this.now = this.start + (this.end - this.start) * this.pos, this.update(), A = !0), A;\n }\n initPath(u, A, z) {\n let f = u.startX, O = u.endX, h = z.slice(), g = u.isArea, v = g ? 2 : 1, L = A && z.length > A.length && z.hasStackedCliffs, y, B, X, F, T = A && A.slice();\n if (!T || L)\n return [h, h];\n function w(C, q) {\n for (; C.length < B; ) {\n let m = C[0], k = q[B - C.length];\n if (k && m[0] === "M" && (k[0] === "C" ? C[0] = ["C", m[1], m[2], m[1], m[2], m[1], m[2]] : C[0] = ["L", m[1], m[2]]), C.unshift(m), g) {\n let x = C.pop();\n C.push(C[C.length - 1], x);\n }\n }\n }\n function H(C) {\n for (; C.length < B; ) {\n let q = C[Math.floor(C.length / v) - 1].slice();\n if (q[0] === "C" && (q[1] = q[5], q[2] = q[6]), g) {\n let m = C[Math.floor(C.length / v)].slice();\n C.splice(C.length / 2, 0, q, m);\n } else\n C.push(q);\n }\n }\n if (f && O && O.length) {\n for (X = 0; X < f.length; X++) {\n if (f[X] === O[0]) {\n y = X;\n break;\n }\n if (f[0] === O[O.length - f.length + X]) {\n y = X, F = !0;\n break;\n }\n if (f[f.length - 1] === O[O.length - f.length + X]) {\n y = f.length - X;\n break;\n }\n }\n y === void 0 && (T = []);\n }\n return T.length && p(y) && (B = h.length + y * v, F ? (w(T, h), H(h)) : (w(h, T), H(T))), [T, h];\n }\n fillSetter() {\n b.prototype.strokeSetter.apply(this, arguments);\n }\n strokeSetter() {\n this.elem.attr(this.prop, s(this.start).tweenTo(s(this.end), this.pos), void 0, !0);\n }\n }\n return b.timers = [], b;\n }), n(o, "Core/Animation/AnimationUtilities.js", [o["Core/Animation/Fx.js"], o["Core/Utilities.js"]], function(r, i) {\n let { defined: a, getStyle: s, isArray: l, isNumber: p, isObject: d, merge: b, objectEach: M, pick: u } = i;\n function A(f) {\n return d(f) ? b({ duration: 500, defer: 0 }, f) : { duration: f ? 500 : 0, defer: 0 };\n }\n function z(f, O) {\n let h = r.timers.length;\n for (; h--; )\n r.timers[h].elem !== f || O && O !== r.timers[h].prop || (r.timers[h].stopped = !0);\n }\n return { animate: function(f, O, h) {\n let g, v = "", L, y, B;\n d(h) || (B = arguments, h = { duration: B[2], easing: B[3], complete: B[4] }), p(h.duration) || (h.duration = 400), h.easing = typeof h.easing == "function" ? h.easing : Math[h.easing] || Math.easeInOutSine, h.curAnim = b(O), M(O, function(X, F) {\n z(f, F), y = new r(f, h, F), L = void 0, F === "d" && l(O.d) ? (y.paths = y.initPath(f, f.pathArray, O.d), y.toD = O.d, g = 0, L = 1) : f.attr ? g = f.attr(F) : (g = parseFloat(s(f, F)) || 0, F !== "opacity" && (v = "px")), L || (L = X), typeof L == "string" && L.match("px") && (L = L.replace(/px/g, "")), y.run(g, L, v);\n });\n }, animObject: A, getDeferredAnimation: function(f, O, h) {\n let g = A(O), v = h ? [h] : f.series, L = 0, y = 0;\n return v.forEach((B) => {\n let X = A(B.options.animation);\n L = d(O) && a(O.defer) ? g.defer : Math.max(L, X.duration + X.defer), y = Math.min(g.duration, X.duration);\n }), f.renderer.forExport && (L = 0), { defer: Math.max(0, L - y), duration: Math.min(L, y) };\n }, setAnimation: function(f, O) {\n O.renderer.globalAnimation = u(f, O.options.chart.animation, !0);\n }, stop: z };\n }), n(o, "Core/Renderer/HTML/AST.js", [o["Core/Globals.js"], o["Core/Utilities.js"]], function(r, i) {\n let { SVG_NS: a, win: s } = r, { attr: l, createElement: p, css: d, error: b, isFunction: M, isString: u, objectEach: A, splat: z } = i, { trustedTypes: f } = s, O = f && M(f.createPolicy) && f.createPolicy("highcharts", { createHTML: (L) => L }), h = O ? O.createHTML("") : "", g = function() {\n try {\n return !!new DOMParser().parseFromString(h, "text/html");\n } catch {\n return !1;\n }\n }();\n class v {\n static filterUserAttributes(y) {\n return A(y, (B, X) => {\n let F = !0;\n v.allowedAttributes.indexOf(X) === -1 && (F = !1), ["background", "dynsrc", "href", "lowsrc", "src"].indexOf(X) !== -1 && (F = u(B) && v.allowedReferences.some((T) => B.indexOf(T) === 0)), F || (b(33, !1, void 0, { "Invalid attribute in config": `${X}` }), delete y[X]), u(B) && y[X] && (y[X] = B.replace(/ {\n let F = X.split(":").map((w) => w.trim()), T = F.shift();\n return T && F.length && (B[T.replace(/-([a-z])/g, (w) => w[1].toUpperCase())] = F.join(":")), B;\n }, {});\n }\n static setElementHTML(y, B) {\n y.innerHTML = v.emptyHTML, B && new v(B).addToDOM(y);\n }\n constructor(y) {\n this.nodes = typeof y == "string" ? this.parseMarkup(y) : y;\n }\n addToDOM(y) {\n return function B(X, F) {\n let T;\n return z(X).forEach(function(w) {\n let H, C = w.tagName, q = w.textContent ? r.doc.createTextNode(w.textContent) : void 0, m = v.bypassHTMLFiltering;\n if (C)\n if (C === "#text")\n H = q;\n else if (v.allowedTags.indexOf(C) !== -1 || m) {\n let k = C === "svg" ? a : F.namespaceURI || a, x = r.doc.createElementNS(k, C), N = w.attributes || {};\n A(w, function(V, R) {\n R !== "tagName" && R !== "attributes" && R !== "children" && R !== "style" && R !== "textContent" && (N[R] = V);\n }), l(x, m ? N : v.filterUserAttributes(N)), w.style && d(x, w.style), q && x.appendChild(q), B(w.children || [], x), H = x;\n } else\n b(33, !1, void 0, { "Invalid tagName in config": C });\n H && F.appendChild(H), T = H;\n }), T;\n }(this.nodes, y);\n }\n parseMarkup(y) {\n let B, X = [];\n if (y = y.trim().replace(/ style=(["\'])/g, " data-style=$1"), g)\n B = new DOMParser().parseFromString(O ? O.createHTML(y) : y, "text/html");\n else {\n let T = p("div");\n T.innerHTML = y, B = { body: T };\n }\n let F = (T, w) => {\n let H = T.nodeName.toLowerCase(), C = { tagName: H };\n H === "#text" && (C.textContent = T.textContent || "");\n let q = T.attributes;\n if (q) {\n let m = {};\n [].forEach.call(q, (k) => {\n k.name === "data-style" ? C.style = v.parseStyle(k.value) : m[k.name] = k.value;\n }), C.attributes = m;\n }\n if (T.childNodes.length) {\n let m = [];\n [].forEach.call(T.childNodes, (k) => {\n F(k, m);\n }), m.length && (C.children = m);\n }\n w.push(C);\n };\n return [].forEach.call(B.body.childNodes, (T) => F(T, X)), X;\n }\n }\n return v.allowedAttributes = ["alt", "aria-controls", "aria-describedby", "aria-expanded", "aria-haspopup", "aria-hidden", "aria-label", "aria-labelledby", "aria-live", "aria-pressed", "aria-readonly", "aria-roledescription", "aria-selected", "class", "clip-path", "color", "colspan", "cx", "cy", "d", "dx", "dy", "disabled", "fill", "filterUnits", "flood-color", "flood-opacity", "height", "href", "id", "in", "in2", "markerHeight", "markerWidth", "offset", "opacity", "operator", "orient", "padding", "paddingLeft", "paddingRight", "patternUnits", "r", "radius", "refX", "refY", "role", "scope", "slope", "src", "startOffset", "stdDeviation", "stroke", "stroke-linecap", "stroke-width", "style", "tableValues", "result", "rowspan", "summary", "target", "tabindex", "text-align", "text-anchor", "textAnchor", "textLength", "title", "type", "valign", "width", "x", "x1", "x2", "xlink:href", "y", "y1", "y2", "zIndex"], v.allowedReferences = ["https://", "http://", "mailto:", "/", "../", "./", "#"], v.allowedTags = ["a", "abbr", "b", "br", "button", "caption", "circle", "clipPath", "code", "dd", "defs", "div", "dl", "dt", "em", "feComponentTransfer", "feComposite", "feDropShadow", "feFlood", "feFuncA", "feFuncB", "feFuncG", "feFuncR", "feGaussianBlur", "feMorphology", "feOffset", "feMerge", "feMergeNode", "filter", "h1", "h2", "h3", "h4", "h5", "h6", "hr", "i", "img", "li", "linearGradient", "marker", "ol", "p", "path", "pattern", "pre", "rect", "small", "span", "stop", "strong", "style", "sub", "sup", "svg", "table", "text", "textPath", "thead", "title", "tbody", "tspan", "td", "th", "tr", "u", "ul", "#text"], v.emptyHTML = h, v.bypassHTMLFiltering = !1, v;\n }), n(o, "Core/Templating.js", [o["Core/Defaults.js"], o["Core/Utilities.js"]], function(r, i) {\n let { defaultOptions: a, defaultTime: s } = r, { extend: l, getNestedProperty: p, isArray: d, isNumber: b, isObject: M, pick: u, pInt: A } = i, z = { add: (h, g) => h + g, divide: (h, g) => g !== 0 ? h / g : "", eq: (h, g) => h == g, each: function(h) {\n let g = arguments[arguments.length - 1];\n return !!d(h) && h.map((v, L) => f(g.body, l(M(v) ? v : { "@this": v }, { "@index": L, "@first": L === 0, "@last": L === h.length - 1 }))).join("");\n }, ge: (h, g) => h >= g, gt: (h, g) => h > g, if: (h) => !!h, le: (h, g) => h <= g, lt: (h, g) => h < g, multiply: (h, g) => h * g, ne: (h, g) => h != g, subtract: (h, g) => h - g, unless: (h) => !h };\n function f(h = "", g, v) {\n let L = /\\{([\\w\\:\\.\\,;\\-\\/<>%@"\'’= #\\(\\)]+)\\}/g, y = /\\(([\\w\\:\\.\\,;\\-\\/<>%@"\'= ]+)\\)/g, B = [], X = /f$/, F = /\\.(\\d)/, T = a.lang, w = v && v.time || s, H = v && v.numberFormatter || O, C = (N = "") => {\n let V;\n return N === "true" || N !== "false" && ((V = Number(N)).toString() === N ? V : p(N, g));\n }, q, m, k = 0, x;\n for (; (q = L.exec(h)) !== null; ) {\n let N = y.exec(q[1]);\n N && (q = N, x = !0), m && m.isBlock || (m = { ctx: g, expression: q[1], find: q[0], isBlock: q[1].charAt(0) === "#", start: q.index, startInner: q.index + q[0].length, length: q[0].length });\n let V = q[1].split(" ")[0].replace("#", "");\n z[V] && (m.isBlock && V === m.fn && k++, m.fn || (m.fn = V));\n let R = q[1] === "else";\n if (m.isBlock && m.fn && (q[1] === `/${m.fn}` || R))\n if (k)\n !R && k--;\n else {\n let I = m.startInner, j = h.substr(I, q.index - I);\n m.body === void 0 ? (m.body = j, m.startInner = q.index + q[0].length) : m.elseBody = j, m.find += j + q[0], R || (B.push(m), m = void 0);\n }\n else\n m.isBlock || B.push(m);\n if (N && !(m != null && m.isBlock))\n break;\n }\n return B.forEach((N) => {\n let V, R, { body: I, elseBody: j, expression: U, fn: _ } = N;\n if (_) {\n let r1 = [N], K = U.split(" ");\n for (R = z[_].length; R--; )\n r1.unshift(C(K[R + 1]));\n V = z[_].apply(g, r1), N.isBlock && typeof V == "boolean" && (V = f(V ? I : j, g, v));\n } else {\n let r1 = U.split(":");\n if (V = C(r1.shift() || ""), r1.length && typeof V == "number") {\n let K = r1.join(":");\n if (X.test(K)) {\n let Q = parseInt((K.match(F) || ["", "-1"])[1], 10);\n V !== null && (V = H(V, Q, T.decimalPoint, K.indexOf(",") > -1 ? T.thousandsSep : ""));\n } else\n V = w.dateFormat(K, V);\n }\n }\n h = h.replace(N.find, u(V, ""));\n }), x ? f(h, g, v) : h;\n }\n function O(h, g, v, L) {\n let y, B;\n h = +h || 0, g = +g;\n let X = a.lang, F = (h.toString().split(".")[1] || "").split("e")[0].length, T = h.toString().split("e"), w = g;\n g === -1 ? g = Math.min(F, 20) : b(g) ? g && T[1] && T[1] < 0 && ((B = g + +T[1]) >= 0 ? (T[0] = (+T[0]).toExponential(B).split("e")[0], g = B) : (T[0] = T[0].split(".")[0] || 0, h = g < 20 ? (T[0] * Math.pow(10, T[1])).toFixed(g) : 0, T[1] = 0)) : g = 2;\n let H = (Math.abs(T[1] ? T[0] : h) + Math.pow(10, -Math.max(g, F) - 1)).toFixed(g), C = String(A(H)), q = C.length > 3 ? C.length % 3 : 0;\n return v = u(v, X.decimalPoint), L = u(L, X.thousandsSep), y = (h < 0 ? "-" : "") + (q ? C.substr(0, q) + L : ""), 0 > +T[1] && !w ? y = "0" : y += C.substr(q).replace(/(\\d{3})(?=\\d)/g, "$1" + L), g ? y += v + H.slice(-g) : +y == 0 && (y = "0"), T[1] && +y != 0 && (y += "e" + T[1]), y;\n }\n return { dateFormat: function(h, g, v) {\n return s.dateFormat(h, g, v);\n }, format: f, helpers: z, numberFormat: O };\n }), n(o, "Core/Renderer/RendererRegistry.js", [o["Core/Globals.js"]], function(r) {\n var i, a;\n let s;\n return (a = i || (i = {})).rendererTypes = {}, a.getRendererType = function(l = s) {\n return a.rendererTypes[l] || a.rendererTypes[s];\n }, a.registerRendererType = function(l, p, d) {\n a.rendererTypes[l] = p, (!s || d) && (s = l, r.Renderer = p);\n }, i;\n }), n(o, "Core/Renderer/RendererUtilities.js", [o["Core/Utilities.js"]], function(r) {\n var i;\n let { clamp: a, pick: s, pushUnique: l, stableSort: p } = r;\n return (i || (i = {})).distribute = function d(b, M, u) {\n let A = b, z = A.reducedLen || M, f = (C, q) => C.target - q.target, O = [], h = b.length, g = [], v = O.push, L, y, B, X = !0, F, T, w = 0, H;\n for (L = h; L--; )\n w += b[L].size;\n if (w > z) {\n for (p(b, (C, q) => (q.rank || 0) - (C.rank || 0)), B = (H = b[0].rank === b[b.length - 1].rank) ? h / 2 : -1, y = H ? B : h - 1; B && w > z; )\n F = b[L = Math.floor(y)], l(g, L) && (w -= F.size), y += B, H && y >= b.length && (B /= 2, y = B);\n g.sort((C, q) => q - C).forEach((C) => v.apply(O, b.splice(C, 1)));\n }\n for (p(b, f), b = b.map((C) => ({ size: C.size, targets: [C.target], align: s(C.align, 0.5) })); X; ) {\n for (L = b.length; L--; )\n F = b[L], T = (Math.min.apply(0, F.targets) + Math.max.apply(0, F.targets)) / 2, F.pos = a(T - F.size * F.align, 0, M - F.size);\n for (L = b.length, X = !1; L--; )\n L > 0 && b[L - 1].pos + b[L - 1].size > b[L].pos && (b[L - 1].size += b[L].size, b[L - 1].targets = b[L - 1].targets.concat(b[L].targets), b[L - 1].align = 0.5, b[L - 1].pos + b[L - 1].size > M && (b[L - 1].pos = M - b[L - 1].size), b.splice(L, 1), X = !0);\n }\n return v.apply(A, O), L = 0, b.some((C) => {\n let q = 0;\n return (C.targets || []).some(() => (A[L].pos = C.pos + q, u !== void 0 && Math.abs(A[L].pos - A[L].target) > u ? (A.slice(0, L + 1).forEach((m) => delete m.pos), A.reducedLen = (A.reducedLen || M) - 0.1 * M, A.reducedLen > 0.1 * M && d(A, M, u), !0) : (q += A[L].size, L++, !1)));\n }), p(A, f), A;\n }, i;\n }), n(o, "Core/Renderer/SVG/SVGElement.js", [o["Core/Animation/AnimationUtilities.js"], o["Core/Color/Color.js"], o["Core/Globals.js"], o["Core/Utilities.js"]], function(r, i, a, s) {\n let { animate: l, animObject: p, stop: d } = r, { deg2rad: b, doc: M, svg: u, SVG_NS: A, win: z } = a, { addEvent: f, attr: O, createElement: h, crisp: g, css: v, defined: L, erase: y, extend: B, fireEvent: X, isArray: F, isFunction: T, isObject: w, isString: H, merge: C, objectEach: q, pick: m, pInt: k, pushUnique: x, replaceNested: N, syncTimeout: V, uniqueKey: R } = s;\n class I {\n _defaultGetter(U) {\n let _ = m(this[U + "Value"], this[U], this.element ? this.element.getAttribute(U) : null, 0);\n return /^-?[\\d\\.]+$/.test(_) && (_ = parseFloat(_)), _;\n }\n _defaultSetter(U, _, r1) {\n r1.setAttribute(_, U);\n }\n add(U) {\n let _, r1 = this.renderer, K = this.element;\n return U && (this.parentGroup = U), this.textStr !== void 0 && this.element.nodeName === "text" && r1.buildText(this), this.added = !0, (!U || U.handleZ || this.zIndex) && (_ = this.zIndexSetter()), _ || (U ? U.element : r1.box).appendChild(K), this.onAdd && this.onAdd(), this;\n }\n addClass(U, _) {\n let r1 = _ ? "" : this.attr("class") || "";\n return (U = (U || "").split(/ /g).reduce(function(K, Q) {\n return r1.indexOf(Q) === -1 && K.push(Q), K;\n }, r1 ? [r1] : []).join(" ")) !== r1 && this.attr("class", U), this;\n }\n afterSetters() {\n this.doTransform && (this.updateTransform(), this.doTransform = !1);\n }\n align(U, _, r1, K = !0) {\n let Q, E, D, G, J = {}, S = this.renderer, W = S.alignedObjects, P = !!U;\n U ? (this.alignOptions = U, this.alignByTranslate = _, this.alignTo = r1) : (U = this.alignOptions || {}, _ = this.alignByTranslate, r1 = this.alignTo);\n let Y = !r1 || H(r1) ? r1 || "renderer" : void 0;\n Y && (P && x(W, this), r1 = void 0);\n let Z = m(r1, S[Y], S), t1 = U.align, i1 = U.verticalAlign;\n return Q = (Z.x || 0) + (U.x || 0), E = (Z.y || 0) + (U.y || 0), t1 === "right" ? D = 1 : t1 === "center" && (D = 2), D && (Q += ((Z.width || 0) - (U.width || 0)) / D), J[_ ? "translateX" : "x"] = Math.round(Q), i1 === "bottom" ? G = 1 : i1 === "middle" && (G = 2), G && (E += ((Z.height || 0) - (U.height || 0)) / G), J[_ ? "translateY" : "y"] = Math.round(E), K && (this[this.placed ? "animate" : "attr"](J), this.placed = !0), this.alignAttr = J, this;\n }\n alignSetter(U) {\n let _ = { left: "start", center: "middle", right: "end" };\n _[U] && (this.alignValue = U, this.element.setAttribute("text-anchor", _[U]));\n }\n animate(U, _, r1) {\n let K = p(m(_, this.renderer.globalAnimation, !0)), Q = K.defer;\n return M.hidden && (K.duration = 0), K.duration !== 0 ? (r1 && (K.complete = r1), V(() => {\n this.element && l(this, U, K);\n }, Q)) : (this.attr(U, void 0, r1 || K.complete), q(U, function(E, D) {\n K.step && K.step.call(this, E, { prop: D, pos: 1, elem: this });\n }, this)), this;\n }\n applyTextOutline(U) {\n let _ = this.element;\n U.indexOf("contrast") !== -1 && (U = U.replace(/contrast/g, this.renderer.getContrast(_.style.fill)));\n let r1 = U.split(" "), K = r1[r1.length - 1], Q = r1[0];\n if (Q && Q !== "none" && a.svg) {\n this.fakeTS = !0, Q = Q.replace(/(^[\\d\\.]+)(.*?)$/g, function(S, W, P) {\n return 2 * Number(W) + P;\n }), this.removeTextOutline();\n let E = M.createElementNS(A, "tspan");\n O(E, { class: "highcharts-text-outline", fill: K, stroke: K, "stroke-width": Q, "stroke-linejoin": "round" });\n let D = _.querySelector("textPath") || _;\n [].forEach.call(D.childNodes, (S) => {\n let W = S.cloneNode(!0);\n W.removeAttribute && ["fill", "stroke", "stroke-width", "stroke"].forEach((P) => W.removeAttribute(P)), E.appendChild(W);\n });\n let G = 0;\n [].forEach.call(D.querySelectorAll("text tspan"), (S) => {\n G += Number(S.getAttribute("dy"));\n });\n let J = M.createElementNS(A, "tspan");\n J.textContent = "​", O(J, { x: Number(_.getAttribute("x")), dy: -G }), E.appendChild(J), D.insertBefore(E, D.firstChild);\n }\n }\n attr(U, _, r1, K) {\n let { element: Q } = this, E = I.symbolCustomAttribs, D, G, J = this, S;\n return typeof U == "string" && _ !== void 0 && (D = U, (U = {})[D] = _), typeof U == "string" ? J = (this[U + "Getter"] || this._defaultGetter).call(this, U, Q) : (q(U, function(W, P) {\n S = !1, K || d(this, P), this.symbolName && E.indexOf(P) !== -1 && (G || (this.symbolAttr(U), G = !0), S = !0), this.rotation && (P === "x" || P === "y") && (this.doTransform = !0), S || (this[P + "Setter"] || this._defaultSetter).call(this, W, P, Q);\n }, this), this.afterSetters()), r1 && r1.call(this), J;\n }\n clip(U) {\n if (U && !U.clipPath) {\n let _ = R() + "-", r1 = this.renderer.createElement("clipPath").attr({ id: _ }).add(this.renderer.defs);\n B(U, { clipPath: r1, id: _, count: 0 }), U.add(r1);\n }\n return this.attr("clip-path", U ? `url(${this.renderer.url}#${U.id})` : "none");\n }\n crisp(U, _) {\n _ = Math.round(_ || U.strokeWidth || 0);\n let r1 = U.x || this.x || 0, K = U.y || this.y || 0, Q = (U.width || this.width || 0) + r1, E = (U.height || this.height || 0) + K, D = g(r1, _), G = g(K, _);\n return B(U, { x: D, y: G, width: g(Q, _) - D, height: g(E, _) - G }), L(U.strokeWidth) && (U.strokeWidth = _), U;\n }\n complexColor(U, _, r1) {\n let K = this.renderer, Q, E, D, G, J, S, W, P, Y, Z, t1 = [], i1;\n X(this.renderer, "complexColor", { args: arguments }, function() {\n if (U.radialGradient ? E = "radialGradient" : U.linearGradient && (E = "linearGradient"), E) {\n if (D = U[E], J = K.gradients, S = U.stops, Y = r1.radialReference, F(D) && (U[E] = D = { x1: D[0], y1: D[1], x2: D[2], y2: D[3], gradientUnits: "userSpaceOnUse" }), E === "radialGradient" && Y && !L(D.gradientUnits) && (G = D, D = C(D, K.getRadialAttr(Y, G), { gradientUnits: "userSpaceOnUse" })), q(D, function(n1, s1) {\n s1 !== "id" && t1.push(s1, n1);\n }), q(S, function(n1) {\n t1.push(n1);\n }), J[t1 = t1.join(",")])\n Z = J[t1].attr("id");\n else {\n D.id = Z = R();\n let n1 = J[t1] = K.createElement(E).attr(D).add(K.defs);\n n1.radAttr = G, n1.stops = [], S.forEach(function(s1) {\n s1[1].indexOf("rgba") === 0 ? (W = (Q = i.parse(s1[1])).get("rgb"), P = Q.get("a")) : (W = s1[1], P = 1);\n let d1 = K.createElement("stop").attr({ offset: s1[0], "stop-color": W, "stop-opacity": P }).add(n1);\n n1.stops.push(d1);\n });\n }\n i1 = "url(" + K.url + "#" + Z + ")", r1.setAttribute(_, i1), r1.gradient = t1, U.toString = function() {\n return i1;\n };\n }\n });\n }\n css(U) {\n let _ = this.styles, r1 = {}, K = this.element, Q, E = !_;\n if (_ && q(U, function(D, G) {\n _ && _[G] !== D && (r1[G] = D, E = !0);\n }), E) {\n _ && (U = B(_, r1)), U.width === null || U.width === "auto" ? delete this.textWidth : K.nodeName.toLowerCase() === "text" && U.width && (Q = this.textWidth = k(U.width)), B(this.styles, U), Q && !u && this.renderer.forExport && delete U.width;\n let D = C(U);\n K.namespaceURI === this.SVG_NS && (["textOutline", "textOverflow", "width"].forEach((G) => D && delete D[G]), D.color && (D.fill = D.color)), v(K, D);\n }\n return this.added && (this.element.nodeName === "text" && this.renderer.buildText(this), U.textOutline && this.applyTextOutline(U.textOutline)), this;\n }\n dashstyleSetter(U) {\n let _, r1 = this["stroke-width"];\n if (r1 === "inherit" && (r1 = 1), U = U && U.toLowerCase()) {\n let K = U.replace("shortdashdotdot", "3,1,1,1,1,1,").replace("shortdashdot", "3,1,1,1").replace("shortdot", "1,1,").replace("shortdash", "3,1,").replace("longdash", "8,3,").replace(/dot/g, "1,3,").replace("dash", "4,3,").replace(/,$/, "").split(",");\n for (_ = K.length; _--; )\n K[_] = "" + k(K[_]) * m(r1, NaN);\n U = K.join(",").replace(/NaN/g, "none"), this.element.setAttribute("stroke-dasharray", U);\n }\n }\n destroy() {\n var G;\n let U = this, _ = U.element || {}, r1 = U.renderer, K = _.ownerSVGElement, Q = _.nodeName === "SPAN" && U.parentGroup || void 0, E, D;\n if (_.onclick = _.onmouseout = _.onmouseover = _.onmousemove = _.point = null, d(U), U.clipPath && K) {\n let J = U.clipPath;\n [].forEach.call(K.querySelectorAll("[clip-path],[CLIP-PATH]"), function(S) {\n S.getAttribute("clip-path").indexOf(J.element.id) > -1 && S.removeAttribute("clip-path");\n }), U.clipPath = J.destroy();\n }\n if (U.connector = (G = U.connector) == null ? void 0 : G.destroy(), U.stops) {\n for (D = 0; D < U.stops.length; D++)\n U.stops[D].destroy();\n U.stops.length = 0, U.stops = void 0;\n }\n for (U.safeRemoveChild(_); Q && Q.div && Q.div.childNodes.length === 0; )\n E = Q.parentGroup, U.safeRemoveChild(Q.div), delete Q.div, Q = E;\n U.alignOptions && y(r1.alignedObjects, U), q(U, function(J, S) {\n U[S] && U[S].parentGroup === U && U[S].destroy && U[S].destroy(), delete U[S];\n });\n }\n dSetter(U, _, r1) {\n F(U) && (typeof U[0] == "string" && (U = this.renderer.pathToSegments(U)), this.pathArray = U, U = U.reduce((K, Q, E) => Q && Q.join ? (E ? K + " " : "") + Q.join(" ") : (Q || "").toString(), "")), /(NaN| {2}|^$)/.test(U) && (U = "M 0 0"), this[_] !== U && (r1.setAttribute(_, U), this[_] = U);\n }\n fillSetter(U, _, r1) {\n typeof U == "string" ? r1.setAttribute(_, U) : U && this.complexColor(U, _, r1);\n }\n hrefSetter(U, _, r1) {\n r1.setAttributeNS("http://www.w3.org/1999/xlink", _, U);\n }\n getBBox(U, _) {\n let r1, K, Q, E, { alignValue: D, element: G, renderer: J, styles: S, textStr: W } = this, { cache: P, cacheKeys: Y } = J, Z = G.namespaceURI === this.SVG_NS, t1 = m(_, this.rotation, 0), i1 = J.styledMode ? G && I.prototype.getStyle.call(G, "font-size") : S.fontSize;\n if (L(W) && ((E = W.toString()).indexOf("<") === -1 && (E = E.replace(/\\d/g, "0")), E += ["", J.rootFontSize, i1, t1, this.textWidth, D, S.textOverflow, S.fontWeight].join(",")), E && !U && (r1 = P[E]), !r1 || r1.polygon) {\n if (Z || J.forExport) {\n try {\n Q = this.fakeTS && function(s1) {\n let d1 = G.querySelector(".highcharts-text-outline");\n d1 && v(d1, { display: s1 });\n }, T(Q) && Q("none"), r1 = G.getBBox ? B({}, G.getBBox()) : { width: G.offsetWidth, height: G.offsetHeight, x: 0, y: 0 }, T(Q) && Q("");\n } catch {\n }\n (!r1 || r1.width < 0) && (r1 = { x: 0, y: 0, width: 0, height: 0 });\n } else\n r1 = this.htmlGetBBox();\n K = r1.height, Z && (r1.height = K = { "11px,17": 14, "13px,20": 16 }[`${i1 || ""},${Math.round(K)}`] || K), t1 && (r1 = this.getRotatedBox(r1, t1));\n let n1 = { bBox: r1 };\n X(this, "afterGetBBox", n1), r1 = n1.bBox;\n }\n if (E && (W === "" || r1.height > 0)) {\n for (; Y.length > 250; )\n delete P[Y.shift()];\n P[E] || Y.push(E), P[E] = r1;\n }\n return r1;\n }\n getRotatedBox(U, _) {\n let { x: r1, y: K, width: Q, height: E } = U, { alignValue: D, translateY: G, rotationOriginX: J = 0, rotationOriginY: S = 0 } = this, W = { right: 1, center: 0.5 }[D || 0] || 0, P = Number(this.element.getAttribute("y") || 0) - (G ? 0 : K), Y = _ * b, Z = (_ - 90) * b, t1 = Math.cos(Y), i1 = Math.sin(Y), n1 = Q * t1, s1 = Q * i1, d1 = Math.cos(Z), b1 = Math.sin(Z), [[c1, a1], [l1, p1]] = [J, S].map((D1) => [D1 - D1 * t1, D1 * i1]), M1 = r1 + W * (Q - n1) + c1 + p1 + P * d1, A1 = M1 + n1, u1 = A1 - E * d1, h1 = u1 - n1, C1 = K + P - W * s1 - a1 + l1 + P * b1, q1 = C1 + s1, W1 = q1 - E * b1, R1 = W1 - s1, k1 = Math.min(M1, A1, u1, h1), N1 = Math.min(C1, q1, W1, R1), v1 = Math.max(M1, A1, u1, h1) - k1, S1 = Math.max(C1, q1, W1, R1) - N1;\n return { x: k1, y: N1, width: v1, height: S1, polygon: [[M1, C1], [A1, q1], [u1, W1], [h1, R1]] };\n }\n getStyle(U) {\n return z.getComputedStyle(this.element || this, "").getPropertyValue(U);\n }\n hasClass(U) {\n return ("" + this.attr("class")).split(" ").indexOf(U) !== -1;\n }\n hide() {\n return this.attr({ visibility: "hidden" });\n }\n htmlGetBBox() {\n return { height: 0, width: 0, x: 0, y: 0 };\n }\n constructor(U, _) {\n this.onEvents = {}, this.opacity = 1, this.SVG_NS = A, this.element = _ === "span" || _ === "body" ? h(_) : M.createElementNS(this.SVG_NS, _), this.renderer = U, this.styles = {}, X(this, "afterInit");\n }\n on(U, _) {\n let { onEvents: r1 } = this;\n return r1[U] && r1[U](), r1[U] = f(this.element, U, _), this;\n }\n opacitySetter(U, _, r1) {\n let K = Number(Number(U).toFixed(3));\n this.opacity = K, r1.setAttribute(_, K);\n }\n reAlign() {\n var U;\n (U = this.alignOptions) != null && U.width && this.alignOptions.align !== "left" && (this.alignOptions.width = this.getBBox().width, this.placed = !1, this.align());\n }\n removeClass(U) {\n return this.attr("class", ("" + this.attr("class")).replace(H(U) ? RegExp(`(^| )${U}( |$)`) : U, " ").replace(/ +/g, " ").trim());\n }\n removeTextOutline() {\n let U = this.element.querySelector("tspan.highcharts-text-outline");\n U && this.safeRemoveChild(U);\n }\n safeRemoveChild(U) {\n let _ = U.parentNode;\n _ && _.removeChild(U);\n }\n setRadialReference(U) {\n let _ = this.element.gradient && this.renderer.gradients[this.element.gradient];\n return this.element.radialReference = U, _ && _.radAttr && _.animate(this.renderer.getRadialAttr(U, _.radAttr)), this;\n }\n shadow(U) {\n var Q;\n let { renderer: _ } = this, r1 = C(((Q = this.parentGroup) == null ? void 0 : Q.rotation) === 90 ? { offsetX: -1, offsetY: -1 } : {}, w(U) ? U : {}), K = _.shadowDefinition(r1);\n return this.attr({ filter: U ? `url(${_.url}#${K})` : "none" });\n }\n show(U = !0) {\n return this.attr({ visibility: U ? "inherit" : "visible" });\n }\n "stroke-widthSetter"(U, _, r1) {\n this[_] = U, r1.setAttribute(_, U);\n }\n strokeWidth() {\n if (!this.renderer.styledMode)\n return this["stroke-width"] || 0;\n let U = this.getStyle("stroke-width"), _ = 0, r1;\n return /px$/.test(U) ? _ = k(U) : U !== "" && (O(r1 = M.createElementNS(A, "rect"), { width: U, "stroke-width": 0 }), this.element.parentNode.appendChild(r1), _ = r1.getBBox().width, r1.parentNode.removeChild(r1)), _;\n }\n symbolAttr(U) {\n let _ = this;\n I.symbolCustomAttribs.forEach(function(r1) {\n _[r1] = m(U[r1], _[r1]);\n }), _.attr({ d: _.renderer.symbols[_.symbolName](_.x, _.y, _.width, _.height, _) });\n }\n textSetter(U) {\n U !== this.textStr && (delete this.textPxLength, this.textStr = U, this.added && this.renderer.buildText(this), this.reAlign());\n }\n titleSetter(U) {\n let _ = this.element, r1 = _.getElementsByTagName("title")[0] || M.createElementNS(this.SVG_NS, "title");\n _.insertBefore ? _.insertBefore(r1, _.firstChild) : _.appendChild(r1), r1.textContent = N(m(U, ""), [/<[^>]*>/g, ""]).replace(/</g, "<").replace(/>/g, ">");\n }\n toFront() {\n let U = this.element;\n return U.parentNode.appendChild(U), this;\n }\n translate(U, _) {\n return this.attr({ translateX: U, translateY: _ });\n }\n updateTransform(U = "transform") {\n var P;\n let { element: _, matrix: r1, rotation: K = 0, rotationOriginX: Q, rotationOriginY: E, scaleX: D, scaleY: G, translateX: J = 0, translateY: S = 0 } = this, W = ["translate(" + J + "," + S + ")"];\n L(r1) && W.push("matrix(" + r1.join(",") + ")"), K && (W.push("rotate(" + K + " " + m(Q, _.getAttribute("x"), 0) + " " + m(E, _.getAttribute("y") || 0) + ")"), ((P = this.text) == null ? void 0 : P.element.tagName) === "SPAN" && this.text.attr({ rotation: K, rotationOriginX: (Q || 0) - this.padding, rotationOriginY: (E || 0) - this.padding })), (L(D) || L(G)) && W.push("scale(" + m(D, 1) + " " + m(G, 1) + ")"), W.length && !(this.text || this).textPath && _.setAttribute(U, W.join(" "));\n }\n visibilitySetter(U, _, r1) {\n U === "inherit" ? r1.removeAttribute(_) : this[_] !== U && r1.setAttribute(_, U), this[_] = U;\n }\n xGetter(U) {\n return this.element.nodeName === "circle" && (U === "x" ? U = "cx" : U === "y" && (U = "cy")), this._defaultGetter(U);\n }\n zIndexSetter(U, _) {\n let r1 = this.renderer, K = this.parentGroup, Q = (K || r1).element || r1.box, E = this.element, D = Q === r1.box, G, J, S, W = !1, P, Y = this.added, Z;\n if (L(U) ? (E.setAttribute("data-z-index", U), U = +U, this[_] === U && (Y = !1)) : L(this[_]) && E.removeAttribute("data-z-index"), this[_] = U, Y) {\n for ((U = this.zIndex) && K && (K.handleZ = !0), Z = (G = Q.childNodes).length - 1; Z >= 0 && !W; Z--)\n P = !L(S = (J = G[Z]).getAttribute("data-z-index")), J !== E && (U < 0 && P && !D && !Z ? (Q.insertBefore(E, G[Z]), W = !0) : (k(S) <= U || P && (!L(U) || U >= 0)) && (Q.insertBefore(E, G[Z + 1]), W = !0));\n W || (Q.insertBefore(E, G[D ? 3 : 0]), W = !0);\n }\n return W;\n }\n }\n return I.symbolCustomAttribs = ["anchorX", "anchorY", "clockwise", "end", "height", "innerR", "r", "start", "width", "x", "y"], I.prototype.strokeSetter = I.prototype.fillSetter, I.prototype.yGetter = I.prototype.xGetter, I.prototype.matrixSetter = I.prototype.rotationOriginXSetter = I.prototype.rotationOriginYSetter = I.prototype.rotationSetter = I.prototype.scaleXSetter = I.prototype.scaleYSetter = I.prototype.translateXSetter = I.prototype.translateYSetter = I.prototype.verticalAlignSetter = function(j, U) {\n this[U] = j, this.doTransform = !0;\n }, I;\n }), n(o, "Core/Renderer/SVG/SVGLabel.js", [o["Core/Renderer/SVG/SVGElement.js"], o["Core/Utilities.js"]], function(r, i) {\n let { defined: a, extend: s, isNumber: l, merge: p, pick: d, removeEvent: b } = i;\n class M extends r {\n constructor(A, z, f, O, h, g, v, L, y, B) {\n let X;\n super(A, "g"), this.paddingLeftSetter = this.paddingSetter, this.paddingRightSetter = this.paddingSetter, this.doUpdate = !1, this.textStr = z, this.x = f, this.y = O, this.anchorX = g, this.anchorY = v, this.baseline = y, this.className = B, this.addClass(B === "button" ? "highcharts-no-tooltip" : "highcharts-label"), B && this.addClass("highcharts-" + B), this.text = A.text(void 0, 0, 0, L).attr({ zIndex: 1 }), typeof h == "string" && ((X = /^url\\((.*?)\\)$/.test(h)) || this.renderer.symbols[h]) && (this.symbolKey = h), this.bBox = M.emptyBBox, this.padding = 3, this.baselineOffset = 0, this.needsBox = A.styledMode || X, this.deferredAttr = {}, this.alignFactor = 0;\n }\n alignSetter(A) {\n let z = { left: 0, center: 0.5, right: 1 }[A];\n z !== this.alignFactor && (this.alignFactor = z, this.bBox && l(this.xSetting) && this.attr({ x: this.xSetting }));\n }\n anchorXSetter(A, z) {\n this.anchorX = A, this.boxAttr(z, Math.round(A) - this.getCrispAdjust() - this.xSetting);\n }\n anchorYSetter(A, z) {\n this.anchorY = A, this.boxAttr(z, A - this.ySetting);\n }\n boxAttr(A, z) {\n this.box ? this.box.attr(A, z) : this.deferredAttr[A] = z;\n }\n css(A) {\n if (A) {\n let z = {};\n A = p(A), M.textProps.forEach((f) => {\n A[f] !== void 0 && (z[f] = A[f], delete A[f]);\n }), this.text.css(z), "fontSize" in z || "fontWeight" in z ? this.updateTextPadding() : ("width" in z || "textOverflow" in z) && this.updateBoxSize();\n }\n return r.prototype.css.call(this, A);\n }\n destroy() {\n b(this.element, "mouseenter"), b(this.element, "mouseleave"), this.text && this.text.destroy(), this.box && (this.box = this.box.destroy()), r.prototype.destroy.call(this);\n }\n fillSetter(A, z) {\n A && (this.needsBox = !0), this.fill = A, this.boxAttr(z, A);\n }\n getBBox(A, z) {\n this.textStr && this.bBox.width === 0 && this.bBox.height === 0 && this.updateBoxSize();\n let { padding: f, height: O = 0, translateX: h = 0, translateY: g = 0, width: v = 0 } = this, L = d(this.paddingLeft, f), y = z ?? (this.rotation || 0), B = { width: v, height: O, x: h + this.bBox.x - L, y: g + this.bBox.y - f + this.baselineOffset };\n return y && (B = this.getRotatedBox(B, y)), B;\n }\n getCrispAdjust() {\n return (this.renderer.styledMode && this.box ? this.box.strokeWidth() : this["stroke-width"] ? parseInt(this["stroke-width"], 10) : 0) % 2 / 2;\n }\n heightSetter(A) {\n this.heightSetting = A, this.doUpdate = !0;\n }\n afterSetters() {\n super.afterSetters(), this.doUpdate && (this.updateBoxSize(), this.doUpdate = !1);\n }\n onAdd() {\n this.text.add(this), this.attr({ text: d(this.textStr, ""), x: this.x || 0, y: this.y || 0 }), this.box && a(this.anchorX) && this.attr({ anchorX: this.anchorX, anchorY: this.anchorY });\n }\n paddingSetter(A, z) {\n l(A) ? A !== this[z] && (this[z] = A, this.updateTextPadding()) : this[z] = void 0;\n }\n rSetter(A, z) {\n this.boxAttr(z, A);\n }\n strokeSetter(A, z) {\n this.stroke = A, this.boxAttr(z, A);\n }\n "stroke-widthSetter"(A, z) {\n A && (this.needsBox = !0), this["stroke-width"] = A, this.boxAttr(z, A);\n }\n "text-alignSetter"(A) {\n this.textAlign = A;\n }\n textSetter(A) {\n A !== void 0 && this.text.attr({ text: A }), this.updateTextPadding(), this.reAlign();\n }\n updateBoxSize() {\n let A, z = this.text, f = {}, O = this.padding, h = this.bBox = (!l(this.widthSetting) || !l(this.heightSetting) || this.textAlign) && a(z.textStr) ? z.getBBox(void 0, 0) : M.emptyBBox;\n this.width = this.getPaddedWidth(), this.height = (this.heightSetting || h.height || 0) + 2 * O;\n let g = this.renderer.fontMetrics(z);\n if (this.baselineOffset = O + Math.min((this.text.firstLineMetrics || g).b, h.height || 1 / 0), this.heightSetting && (this.baselineOffset += (this.heightSetting - g.h) / 2), this.needsBox && !z.textPath) {\n if (!this.box) {\n let v = this.box = this.symbolKey ? this.renderer.symbol(this.symbolKey) : this.renderer.rect();\n v.addClass((this.className === "button" ? "" : "highcharts-label-box") + (this.className ? " highcharts-" + this.className + "-box" : "")), v.add(this);\n }\n A = this.getCrispAdjust(), f.x = A, f.y = (this.baseline ? -this.baselineOffset : 0) + A, f.width = Math.round(this.width), f.height = Math.round(this.height), this.box.attr(s(f, this.deferredAttr)), this.deferredAttr = {};\n }\n }\n updateTextPadding() {\n let A = this.text;\n if (!A.textPath) {\n this.updateBoxSize();\n let z = this.baseline ? 0 : this.baselineOffset, f = d(this.paddingLeft, this.padding);\n a(this.widthSetting) && this.bBox && (this.textAlign === "center" || this.textAlign === "right") && (f += { center: 0.5, right: 1 }[this.textAlign] * (this.widthSetting - this.bBox.width)), (f !== A.x || z !== A.y) && (A.attr("x", f), A.hasBoxWidthChanged && (this.bBox = A.getBBox(!0)), z !== void 0 && A.attr("y", z)), A.x = f, A.y = z;\n }\n }\n widthSetter(A) {\n this.widthSetting = l(A) ? A : void 0, this.doUpdate = !0;\n }\n getPaddedWidth() {\n let A = this.padding, z = d(this.paddingLeft, A), f = d(this.paddingRight, A);\n return (this.widthSetting || this.bBox.width || 0) + z + f;\n }\n xSetter(A) {\n this.x = A, this.alignFactor && (A -= this.alignFactor * this.getPaddedWidth(), this["forceAnimate:x"] = !0), this.xSetting = Math.round(A), this.attr("translateX", this.xSetting);\n }\n ySetter(A) {\n this.ySetting = this.y = Math.round(A), this.attr("translateY", this.ySetting);\n }\n }\n return M.emptyBBox = { width: 0, height: 0, x: 0, y: 0 }, M.textProps = ["color", "direction", "fontFamily", "fontSize", "fontStyle", "fontWeight", "lineHeight", "textAlign", "textDecoration", "textOutline", "textOverflow", "whiteSpace", "width"], M;\n }), n(o, "Core/Renderer/SVG/Symbols.js", [o["Core/Utilities.js"]], function(r) {\n let { defined: i, isNumber: a, pick: s } = r;\n function l(b, M, u, A, z) {\n let f = [];\n if (z) {\n let O = z.start || 0, h = s(z.r, u), g = s(z.r, A || u), v = 2e-4 / (z.borderRadius ? 1 : Math.max(h, 1)), L = Math.abs((z.end || 0) - O - 2 * Math.PI) < v, y = (z.end || 0) - (L ? v : 0), B = z.innerR, X = s(z.open, L), F = Math.cos(O), T = Math.sin(O), w = Math.cos(y), H = Math.sin(y), C = s(z.longArc, y - O - Math.PI < v ? 0 : 1), q = ["A", h, g, 0, C, s(z.clockwise, 1), b + h * w, M + g * H];\n q.params = { start: O, end: y, cx: b, cy: M }, f.push(["M", b + h * F, M + g * T], q), i(B) && ((q = ["A", B, B, 0, C, i(z.clockwise) ? 1 - z.clockwise : 0, b + B * F, M + B * T]).params = { start: y, end: O, cx: b, cy: M }, f.push(X ? ["M", b + B * w, M + B * H] : ["L", b + B * w, M + B * H], q)), X || f.push(["Z"]);\n }\n return f;\n }\n function p(b, M, u, A, z) {\n return z && z.r ? d(b, M, u, A, z) : [["M", b, M], ["L", b + u, M], ["L", b + u, M + A], ["L", b, M + A], ["Z"]];\n }\n function d(b, M, u, A, z) {\n let f = (z == null ? void 0 : z.r) || 0;\n return [["M", b + f, M], ["L", b + u - f, M], ["A", f, f, 0, 0, 1, b + u, M + f], ["L", b + u, M + A - f], ["A", f, f, 0, 0, 1, b + u - f, M + A], ["L", b + f, M + A], ["A", f, f, 0, 0, 1, b, M + A - f], ["L", b, M + f], ["A", f, f, 0, 0, 1, b + f, M], ["Z"]];\n }\n return { arc: l, callout: function(b, M, u, A, z) {\n let f = Math.min(z && z.r || 0, u, A), O = f + 6, h = z && z.anchorX, g = z && z.anchorY || 0, v = d(b, M, u, A, { r: f });\n if (!a(h) || h < u && h > 0 && g < A && g > 0)\n return v;\n if (b + h > u - O)\n if (g > M + O && g < M + A - O)\n v.splice(3, 1, ["L", b + u, g - 6], ["L", b + u + 6, g], ["L", b + u, g + 6], ["L", b + u, M + A - f]);\n else if (h < u) {\n let L = g < M + O, y = L ? M : M + A;\n v.splice(L ? 2 : 5, 0, ["L", h, g], ["L", b + u - f, y]);\n } else\n v.splice(3, 1, ["L", b + u, A / 2], ["L", h, g], ["L", b + u, A / 2], ["L", b + u, M + A - f]);\n else if (b + h < O)\n if (g > M + O && g < M + A - O)\n v.splice(7, 1, ["L", b, g + 6], ["L", b - 6, g], ["L", b, g - 6], ["L", b, M + f]);\n else if (h > 0) {\n let L = g < M + O, y = L ? M : M + A;\n v.splice(L ? 1 : 6, 0, ["L", h, g], ["L", b + f, y]);\n } else\n v.splice(7, 1, ["L", b, A / 2], ["L", h, g], ["L", b, A / 2], ["L", b, M + f]);\n else\n g > A && h < u - O ? v.splice(5, 1, ["L", h + 6, M + A], ["L", h, M + A + 6], ["L", h - 6, M + A], ["L", b + f, M + A]) : g < 0 && h > O && v.splice(1, 1, ["L", h - 6, M], ["L", h, M - 6], ["L", h + 6, M], ["L", u - f, M]);\n return v;\n }, circle: function(b, M, u, A) {\n return l(b + u / 2, M + A / 2, u / 2, A / 2, { start: 0.5 * Math.PI, end: 2.5 * Math.PI, open: !1 });\n }, diamond: function(b, M, u, A) {\n return [["M", b + u / 2, M], ["L", b + u, M + A / 2], ["L", b + u / 2, M + A], ["L", b, M + A / 2], ["Z"]];\n }, rect: p, roundedRect: d, square: p, triangle: function(b, M, u, A) {\n return [["M", b + u / 2, M], ["L", b + u, M + A], ["L", b, M + A], ["Z"]];\n }, "triangle-down": function(b, M, u, A) {\n return [["M", b, M], ["L", b + u, M], ["L", b + u / 2, M + A], ["Z"]];\n } };\n }), n(o, "Core/Renderer/SVG/TextBuilder.js", [o["Core/Renderer/HTML/AST.js"], o["Core/Globals.js"], o["Core/Utilities.js"]], function(r, i, a) {\n let { doc: s, SVG_NS: l, win: p } = i, { attr: d, extend: b, fireEvent: M, isString: u, objectEach: A, pick: z } = a;\n return class {\n constructor(f) {\n let O = f.styles;\n this.renderer = f.renderer, this.svgElement = f, this.width = f.textWidth, this.textLineHeight = O && O.lineHeight, this.textOutline = O && O.textOutline, this.ellipsis = !!(O && O.textOverflow === "ellipsis"), this.noWrap = !!(O && O.whiteSpace === "nowrap");\n }\n buildSVG() {\n let f = this.svgElement, O = f.element, h = f.renderer, g = z(f.textStr, "").toString(), v = g.indexOf("<") !== -1, L = O.childNodes, y = !f.added && h.box, B = [g, this.ellipsis, this.noWrap, this.textLineHeight, this.textOutline, f.getStyle("font-size"), this.width].join(",");\n if (B !== f.textCache) {\n f.textCache = B, delete f.actualWidth;\n for (let X = L.length; X--; )\n O.removeChild(L[X]);\n if (v || this.ellipsis || this.width || f.textPath || g.indexOf(" ") !== -1 && (!this.noWrap || //g.test(g))) {\n if (g !== "") {\n y && y.appendChild(O);\n let X = new r(g);\n this.modifyTree(X.nodes), X.addToDOM(O), this.modifyDOM(), this.ellipsis && (O.textContent || "").indexOf("…") !== -1 && f.attr("title", this.unescapeEntities(f.textStr || "", ["<", ">"])), y && y.removeChild(O);\n }\n } else\n O.appendChild(s.createTextNode(this.unescapeEntities(g)));\n u(this.textOutline) && f.applyTextOutline && f.applyTextOutline(this.textOutline);\n }\n }\n modifyDOM() {\n let f, O = this.svgElement, h = d(O.element, "x");\n for (O.firstLineMetrics = void 0; (f = O.element.firstChild) && /^[\\s\\u200B]*$/.test(f.textContent || " "); )\n O.element.removeChild(f);\n [].forEach.call(O.element.querySelectorAll("tspan.highcharts-br"), (y, B) => {\n y.nextSibling && y.previousSibling && (B === 0 && y.previousSibling.nodeType === 1 && (O.firstLineMetrics = O.renderer.fontMetrics(y.previousSibling)), d(y, { dy: this.getLineHeight(y.nextSibling), x: h }));\n });\n let g = this.width || 0;\n if (!g)\n return;\n let v = (y, B) => {\n let X = y.textContent || "", F = X.replace(/([^\\^])-/g, "$1- ").split(" "), T = !this.noWrap && (F.length > 1 || O.element.childNodes.length > 1), w = this.getLineHeight(B), H = 0, C = O.actualWidth;\n if (this.ellipsis)\n X && this.truncate(y, X, void 0, 0, Math.max(0, g - 0.8 * w), (q, m) => q.substring(0, m) + "…");\n else if (T) {\n let q = [], m = [];\n for (; B.firstChild && B.firstChild !== y; )\n m.push(B.firstChild), B.removeChild(B.firstChild);\n for (; F.length; )\n F.length && !this.noWrap && H > 0 && (q.push(y.textContent || ""), y.textContent = F.join(" ").replace(/- /g, "-")), this.truncate(y, void 0, F, H === 0 && C || 0, g, (k, x) => F.slice(0, x).join(" ").replace(/- /g, "-")), C = O.actualWidth, H++;\n m.forEach((k) => {\n B.insertBefore(k, y);\n }), q.forEach((k) => {\n B.insertBefore(s.createTextNode(k), y);\n let x = s.createElementNS(l, "tspan");\n x.textContent = "​", d(x, { dy: w, x: h }), B.insertBefore(x, y);\n });\n }\n }, L = (y) => {\n [].slice.call(y.childNodes).forEach((B) => {\n B.nodeType === p.Node.TEXT_NODE ? v(B, y) : (B.className.baseVal.indexOf("highcharts-br") !== -1 && (O.actualWidth = 0), L(B));\n });\n };\n L(O.element);\n }\n getLineHeight(f) {\n let O = f.nodeType === p.Node.TEXT_NODE ? f.parentElement : f;\n return this.textLineHeight ? parseInt(this.textLineHeight.toString(), 10) : this.renderer.fontMetrics(O || this.svgElement.element).h;\n }\n modifyTree(f) {\n let O = (h, g) => {\n let { attributes: v = {}, children: L, style: y = {}, tagName: B } = h, X = this.renderer.styledMode;\n if (B === "b" || B === "strong" ? X ? v.class = "highcharts-strong" : y.fontWeight = "bold" : (B === "i" || B === "em") && (X ? v.class = "highcharts-emphasized" : y.fontStyle = "italic"), y && y.color && (y.fill = y.color), B === "br") {\n v.class = "highcharts-br", h.textContent = "​";\n let F = f[g + 1];\n F && F.textContent && (F.textContent = F.textContent.replace(/^ +/gm, ""));\n } else\n B === "a" && L && L.some((F) => F.tagName === "#text") && (h.children = [{ children: L, tagName: "tspan" }]);\n B !== "#text" && B !== "a" && (h.tagName = "tspan"), b(h, { attributes: v, style: y }), L && L.filter((F) => F.tagName !== "#text").forEach(O);\n };\n f.forEach(O), M(this.svgElement, "afterModifyTree", { nodes: f });\n }\n truncate(f, O, h, g, v, L) {\n let y, B, X = this.svgElement, { rotation: F } = X, T = [], w = h ? 1 : 0, H = (O || h || "").length, C = H, q = function(m, k) {\n let x = k || m, N = f.parentNode;\n if (N && T[x] === void 0 && N.getSubStringLength)\n try {\n T[x] = g + N.getSubStringLength(0, h ? x + 1 : x);\n } catch {\n }\n return T[x];\n };\n if (X.rotation = 0, g + (B = q(f.textContent.length)) > v) {\n for (; w <= H; )\n C = Math.ceil((w + H) / 2), h && (y = L(h, C)), B = q(C, y && y.length - 1), w === H ? w = H + 1 : B > v ? H = C - 1 : w = C;\n H === 0 ? f.textContent = "" : O && H === O.length - 1 || (f.textContent = y || L(O || h, C));\n }\n h && h.splice(0, C), X.actualWidth = B, X.rotation = F;\n }\n unescapeEntities(f, O) {\n return A(this.renderer.escapes, function(h, g) {\n O && O.indexOf(h) !== -1 || (f = f.toString().replace(RegExp(h, "g"), g));\n }), f;\n }\n };\n }), n(o, "Core/Renderer/SVG/SVGRenderer.js", [o["Core/Renderer/HTML/AST.js"], o["Core/Defaults.js"], o["Core/Color/Color.js"], o["Core/Globals.js"], o["Core/Renderer/RendererRegistry.js"], o["Core/Renderer/SVG/SVGElement.js"], o["Core/Renderer/SVG/SVGLabel.js"], o["Core/Renderer/SVG/Symbols.js"], o["Core/Renderer/SVG/TextBuilder.js"], o["Core/Utilities.js"]], function(r, i, a, s, l, p, d, b, M, u) {\n let A, { defaultOptions: z } = i, { charts: f, deg2rad: O, doc: h, isFirefox: g, isMS: v, isWebKit: L, noop: y, SVG_NS: B, symbolSizes: X, win: F } = s, { addEvent: T, attr: w, createElement: H, crisp: C, css: q, defined: m, destroyObjectProperties: k, extend: x, isArray: N, isNumber: V, isObject: R, isString: I, merge: j, pick: U, pInt: _, replaceNested: r1, uniqueKey: K } = u;\n class Q {\n constructor(D, G, J, S, W, P, Y) {\n let Z, t1, i1 = this.createElement("svg").attr({ version: "1.1", class: "highcharts-root" }), n1 = i1.element;\n Y || i1.css(this.getStyle(S || {})), D.appendChild(n1), w(D, "dir", "ltr"), D.innerHTML.indexOf("xmlns") === -1 && w(n1, "xmlns", this.SVG_NS), this.box = n1, this.boxWrapper = i1, this.alignedObjects = [], this.url = this.getReferenceURL(), this.createElement("desc").add().element.appendChild(h.createTextNode("Created with Highcharts 11.4.8")), this.defs = this.createElement("defs").add(), this.allowHTML = P, this.forExport = W, this.styledMode = Y, this.gradients = {}, this.cache = {}, this.cacheKeys = [], this.imgCount = 0, this.rootFontSize = i1.getStyle("font-size"), this.setSize(G, J, !1), g && D.getBoundingClientRect && ((Z = function() {\n q(D, { left: 0, top: 0 }), t1 = D.getBoundingClientRect(), q(D, { left: Math.ceil(t1.left) - t1.left + "px", top: Math.ceil(t1.top) - t1.top + "px" });\n })(), this.unSubPixelFix = T(F, "resize", Z));\n }\n definition(D) {\n return new r([D]).addToDOM(this.defs.element);\n }\n getReferenceURL() {\n if ((g || L) && h.getElementsByTagName("base").length) {\n if (!m(A)) {\n let D = K(), G = new r([{ tagName: "svg", attributes: { width: 8, height: 8 }, children: [{ tagName: "defs", children: [{ tagName: "clipPath", attributes: { id: D }, children: [{ tagName: "rect", attributes: { width: 4, height: 4 } }] }] }, { tagName: "rect", attributes: { id: "hitme", width: 8, height: 8, "clip-path": `url(#${D})`, fill: "rgba(0,0,0,0.001)" } }] }]).addToDOM(h.body);\n q(G, { position: "fixed", top: 0, left: 0, zIndex: 9e5 });\n let J = h.elementFromPoint(6, 6);\n A = (J && J.id) === "hitme", h.body.removeChild(G);\n }\n if (A)\n return r1(F.location.href.split("#")[0], [/<[^>]*>/g, ""], [/([\\(\'\\)])/g, "\\\\$1"], [/ /g, "%20"]);\n }\n return "";\n }\n getStyle(D) {\n return this.style = x({ fontFamily: "Helvetica, Arial, sans-serif", fontSize: "1rem" }, D), this.style;\n }\n setStyle(D) {\n this.boxWrapper.css(this.getStyle(D));\n }\n isHidden() {\n return !this.boxWrapper.getBBox().width;\n }\n destroy() {\n let D = this.defs;\n return this.box = null, this.boxWrapper = this.boxWrapper.destroy(), k(this.gradients || {}), this.gradients = null, this.defs = D.destroy(), this.unSubPixelFix && this.unSubPixelFix(), this.alignedObjects = null, null;\n }\n createElement(D) {\n return new this.Element(this, D);\n }\n getRadialAttr(D, G) {\n return { cx: D[0] - D[2] / 2 + (G.cx || 0) * D[2], cy: D[1] - D[2] / 2 + (G.cy || 0) * D[2], r: (G.r || 0) * D[2] };\n }\n shadowDefinition(D) {\n let G = [`highcharts-drop-shadow-${this.chartIndex}`, ...Object.keys(D).map((S) => `${S}-${D[S]}`)].join("-").toLowerCase().replace(/[^a-z\\d\\-]/g, ""), J = j({ color: "#000000", offsetX: 1, offsetY: 1, opacity: 0.15, width: 5 }, D);\n return this.defs.element.querySelector(`#${G}`) || this.definition({ tagName: "filter", attributes: { id: G, filterUnits: J.filterUnits }, children: this.getShadowFilterContent(J) }), G;\n }\n getShadowFilterContent(D) {\n return [{ tagName: "feDropShadow", attributes: { dx: D.offsetX, dy: D.offsetY, "flood-color": D.color, "flood-opacity": Math.min(5 * D.opacity, 1), stdDeviation: D.width / 2 } }];\n }\n buildText(D) {\n new M(D).buildSVG();\n }\n getContrast(D) {\n let G = a.parse(D).rgba.map((S) => {\n let W = S / 255;\n return W <= 0.03928 ? W / 12.92 : Math.pow((W + 0.055) / 1.055, 2.4);\n }), J = 0.2126 * G[0] + 0.7152 * G[1] + 0.0722 * G[2];\n return 1.05 / (J + 0.05) > (J + 0.05) / 0.05 ? "#FFFFFF" : "#000000";\n }\n button(D, G, J, S, W = {}, P, Y, Z, t1, i1) {\n let n1 = this.label(D, G, J, t1, void 0, void 0, i1, void 0, "button"), s1 = this.styledMode, d1 = arguments, b1 = 0;\n W = j(z.global.buttonTheme, W), s1 && (delete W.fill, delete W.stroke, delete W["stroke-width"]);\n let c1 = W.states || {}, a1 = W.style || {};\n delete W.states, delete W.style;\n let l1 = [r.filterUserAttributes(W)], p1 = [a1];\n return s1 || ["hover", "select", "disabled"].forEach((M1, A1) => {\n l1.push(j(l1[0], r.filterUserAttributes(d1[A1 + 5] || c1[M1] || {}))), p1.push(l1[A1 + 1].style), delete l1[A1 + 1].style;\n }), T(n1.element, v ? "mouseover" : "mouseenter", function() {\n b1 !== 3 && n1.setState(1);\n }), T(n1.element, v ? "mouseout" : "mouseleave", function() {\n b1 !== 3 && n1.setState(b1);\n }), n1.setState = (M1 = 0) => {\n if (M1 !== 1 && (n1.state = b1 = M1), n1.removeClass(/highcharts-button-(normal|hover|pressed|disabled)/).addClass("highcharts-button-" + ["normal", "hover", "pressed", "disabled"][M1]), !s1) {\n n1.attr(l1[M1]);\n let A1 = p1[M1];\n R(A1) && n1.css(A1);\n }\n }, n1.attr(l1[0]), !s1 && (n1.css(x({ cursor: "default" }, a1)), i1 && n1.text.css({ pointerEvents: "none" })), n1.on("touchstart", (M1) => M1.stopPropagation()).on("click", function(M1) {\n b1 !== 3 && S.call(n1, M1);\n });\n }\n crispLine(D, G) {\n let [J, S] = D;\n return m(J[1]) && J[1] === S[1] && (J[1] = S[1] = C(J[1], G)), m(J[2]) && J[2] === S[2] && (J[2] = S[2] = C(J[2], G)), D;\n }\n path(D) {\n let G = this.styledMode ? {} : { fill: "none" };\n return N(D) ? G.d = D : R(D) && x(G, D), this.createElement("path").attr(G);\n }\n circle(D, G, J) {\n let S = R(D) ? D : D === void 0 ? {} : { x: D, y: G, r: J }, W = this.createElement("circle");\n return W.xSetter = W.ySetter = function(P, Y, Z) {\n Z.setAttribute("c" + Y, P);\n }, W.attr(S);\n }\n arc(D, G, J, S, W, P) {\n let Y;\n R(D) ? (G = (Y = D).y, J = Y.r, S = Y.innerR, W = Y.start, P = Y.end, D = Y.x) : Y = { innerR: S, start: W, end: P };\n let Z = this.symbol("arc", D, G, J, J, Y);\n return Z.r = J, Z;\n }\n rect(D, G, J, S, W, P) {\n let Y = R(D) ? D : D === void 0 ? {} : { x: D, y: G, r: W, width: Math.max(J || 0, 0), height: Math.max(S || 0, 0) }, Z = this.createElement("rect");\n return this.styledMode || (P !== void 0 && (Y["stroke-width"] = P, x(Y, Z.crisp(Y))), Y.fill = "none"), Z.rSetter = function(t1, i1, n1) {\n Z.r = t1, w(n1, { rx: t1, ry: t1 });\n }, Z.rGetter = function() {\n return Z.r || 0;\n }, Z.attr(Y);\n }\n roundedRect(D) {\n return this.symbol("roundedRect").attr(D);\n }\n setSize(D, G, J) {\n this.width = D, this.height = G, this.boxWrapper.animate({ width: D, height: G }, { step: function() {\n this.attr({ viewBox: "0 0 " + this.attr("width") + " " + this.attr("height") });\n }, duration: U(J, !0) ? void 0 : 0 }), this.alignElements();\n }\n g(D) {\n let G = this.createElement("g");\n return D ? G.attr({ class: "highcharts-" + D }) : G;\n }\n image(D, G, J, S, W, P) {\n let Y = { preserveAspectRatio: "none" };\n V(G) && (Y.x = G), V(J) && (Y.y = J), V(S) && (Y.width = S), V(W) && (Y.height = W);\n let Z = this.createElement("image").attr(Y), t1 = function(i1) {\n Z.attr({ href: D }), P.call(Z, i1);\n };\n if (P) {\n Z.attr({ href: "data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==" });\n let i1 = new F.Image();\n T(i1, "load", t1), i1.src = D, i1.complete && t1({});\n } else\n Z.attr({ href: D });\n return Z;\n }\n symbol(D, G, J, S, W, P) {\n let Y, Z, t1, i1, n1 = this, s1 = /^url\\((.*?)\\)$/, d1 = s1.test(D), b1 = !d1 && (this.symbols[D] ? D : "circle"), c1 = b1 && this.symbols[b1];\n if (c1)\n typeof G == "number" && (Z = c1.call(this.symbols, G || 0, J || 0, S || 0, W || 0, P)), Y = this.path(Z), n1.styledMode || Y.attr("fill", "none"), x(Y, { symbolName: b1 || void 0, x: G, y: J, width: S, height: W }), P && x(Y, P);\n else if (d1) {\n t1 = D.match(s1)[1];\n let a1 = Y = this.image(t1);\n a1.imgwidth = U(P && P.width, X[t1] && X[t1].width), a1.imgheight = U(P && P.height, X[t1] && X[t1].height), i1 = (l1) => l1.attr({ width: l1.width, height: l1.height }), ["width", "height"].forEach((l1) => {\n a1[`${l1}Setter`] = function(p1, M1) {\n this[M1] = p1;\n let { alignByTranslate: A1, element: u1, width: h1, height: C1, imgwidth: q1, imgheight: W1 } = this, R1 = M1 === "width" ? q1 : W1, k1 = 1;\n P && P.backgroundSize === "within" && h1 && C1 && q1 && W1 ? (k1 = Math.min(h1 / q1, C1 / W1), w(u1, { width: Math.round(q1 * k1), height: Math.round(W1 * k1) })) : u1 && R1 && u1.setAttribute(M1, R1), !A1 && q1 && W1 && this.translate(((h1 || 0) - q1 * k1) / 2, ((C1 || 0) - W1 * k1) / 2);\n };\n }), m(G) && a1.attr({ x: G, y: J }), a1.isImg = !0, a1.symbolUrl = D, m(a1.imgwidth) && m(a1.imgheight) ? i1(a1) : (a1.attr({ width: 0, height: 0 }), H("img", { onload: function() {\n let l1 = f[n1.chartIndex];\n this.width === 0 && (q(this, { position: "absolute", top: "-999em" }), h.body.appendChild(this)), X[t1] = { width: this.width, height: this.height }, a1.imgwidth = this.width, a1.imgheight = this.height, a1.element && i1(a1), this.parentNode && this.parentNode.removeChild(this), n1.imgCount--, n1.imgCount || !l1 || l1.hasLoaded || l1.onload();\n }, src: t1 }), this.imgCount++);\n }\n return Y;\n }\n clipRect(D, G, J, S) {\n return this.rect(D, G, J, S, 0);\n }\n text(D, G, J, S) {\n let W = {};\n if (S && (this.allowHTML || !this.forExport))\n return this.html(D, G, J);\n W.x = Math.round(G || 0), J && (W.y = Math.round(J)), m(D) && (W.text = D);\n let P = this.createElement("text").attr(W);\n return S && (!this.forExport || this.allowHTML) || (P.xSetter = function(Y, Z, t1) {\n let i1 = t1.getElementsByTagName("tspan"), n1 = t1.getAttribute(Z);\n for (let s1 = 0, d1; s1 < i1.length; s1++)\n (d1 = i1[s1]).getAttribute(Z) === n1 && d1.setAttribute(Z, Y);\n t1.setAttribute(Z, Y);\n }), P;\n }\n fontMetrics(D) {\n let G = _(p.prototype.getStyle.call(D, "font-size") || 0), J = G < 24 ? G + 3 : Math.round(1.2 * G), S = Math.round(0.8 * J);\n return { h: J, b: S, f: G };\n }\n rotCorr(D, G, J) {\n let S = D;\n return G && J && (S = Math.max(S * Math.cos(G * O), 4)), { x: -D / 3 * Math.sin(G * O), y: S };\n }\n pathToSegments(D) {\n let G = [], J = [], S = { A: 8, C: 7, H: 2, L: 3, M: 3, Q: 5, S: 5, T: 3, V: 2 };\n for (let W = 0; W < D.length; W++)\n I(J[0]) && V(D[W]) && J.length === S[J[0].toUpperCase()] && D.splice(W, 0, J[0].replace("M", "L").replace("m", "l")), typeof D[W] == "string" && (J.length && G.push(J.slice(0)), J.length = 0), J.push(D[W]);\n return G.push(J.slice(0)), G;\n }\n label(D, G, J, S, W, P, Y, Z, t1) {\n return new d(this, D, G, J, S, W, P, Y, Z, t1);\n }\n alignElements() {\n this.alignedObjects.forEach((D) => D.align());\n }\n }\n return x(Q.prototype, { Element: p, SVG_NS: B, escapes: { "&": "&", "<": "<", ">": ">", "\'": "'", \'"\': """ }, symbols: b, draw: y }), l.registerRendererType("svg", Q, !0), Q;\n }), n(o, "Core/Renderer/HTML/HTMLElement.js", [o["Core/Renderer/HTML/AST.js"], o["Core/Globals.js"], o["Core/Renderer/SVG/SVGElement.js"], o["Core/Utilities.js"]], function(r, i, a, s) {\n let { composed: l } = i, { attr: p, css: d, createElement: b, defined: M, extend: u, pInt: A, pushUnique: z } = s;\n function f(v, L, y) {\n var X;\n let B = ((X = this.div) == null ? void 0 : X.style) || y.style;\n a.prototype[`${L}Setter`].call(this, v, L, y), B && (B[L] = v);\n }\n let O = (v, L) => {\n var y;\n if (!v.div) {\n let B = p(v.element, "class"), X = v.css, F = b("div", B ? { className: B } : void 0, { position: "absolute", left: `${v.translateX || 0}px`, top: `${v.translateY || 0}px`, ...v.styles, display: v.display, opacity: v.opacity, visibility: v.visibility }, ((y = v.parentGroup) == null ? void 0 : y.div) || L);\n v.classSetter = (T, w, H) => {\n H.setAttribute("class", T), F.className = T;\n }, v.translateXSetter = v.translateYSetter = (T, w) => {\n v[w] = T, F.style[w === "translateX" ? "left" : "top"] = `${T}px`, v.doTransform = !0;\n }, v.opacitySetter = v.visibilitySetter = f, v.css = (T) => (X.call(v, T), T.cursor && (F.style.cursor = T.cursor), T.pointerEvents && (F.style.pointerEvents = T.pointerEvents), v), v.on = function() {\n return a.prototype.on.apply({ element: F, onEvents: v.onEvents }, arguments), v;\n }, v.div = F;\n }\n return v.div;\n };\n class h extends a {\n static compose(L) {\n z(l, this.compose) && (L.prototype.html = function(y, B, X) {\n return new h(this, "span").attr({ text: y, x: Math.round(B), y: Math.round(X) });\n });\n }\n constructor(L, y) {\n super(L, y), this.css({ position: "absolute", ...L.styledMode ? {} : { fontFamily: L.style.fontFamily, fontSize: L.style.fontSize } }), this.element.style.whiteSpace = "nowrap";\n }\n getSpanCorrection(L, y, B) {\n this.xCorr = -L * B, this.yCorr = -y;\n }\n css(L) {\n let y, { element: B } = this, X = B.tagName === "SPAN" && L && "width" in L, F = X && L.width;\n return X && (delete L.width, this.textWidth = A(F) || void 0, y = !0), (L == null ? void 0 : L.textOverflow) === "ellipsis" && (L.whiteSpace = "nowrap", L.overflow = "hidden"), u(this.styles, L), d(B, L), y && this.updateTransform(), this;\n }\n htmlGetBBox() {\n let { element: L } = this;\n return { x: L.offsetLeft, y: L.offsetTop, width: L.offsetWidth, height: L.offsetHeight };\n }\n updateTransform() {\n var V;\n if (!this.added) {\n this.alignOnAdd = !0;\n return;\n }\n let { element: L, renderer: y, rotation: B, rotationOriginX: X, rotationOriginY: F, styles: T, textAlign: w = "left", textWidth: H, translateX: C = 0, translateY: q = 0, x: m = 0, y: k = 0 } = this, x = { left: 0, center: 0.5, right: 1 }[w], N = T.whiteSpace;\n if (d(L, { marginLeft: `${C}px`, marginTop: `${q}px` }), L.tagName === "SPAN") {\n let R = [B, w, L.innerHTML, H, this.textAlign].join(","), I = -(((V = this.parentGroup) == null ? void 0 : V.padding) * 1) || 0, j, U = !1;\n if (H !== this.oldTextWidth) {\n let E = this.textPxLength ? this.textPxLength : (d(L, { width: "", whiteSpace: N || "nowrap" }), L.offsetWidth), D = H || 0;\n (D > this.oldTextWidth || E > D) && (/[ \\-]/.test(L.textContent || L.innerText) || L.style.textOverflow === "ellipsis") && (d(L, { width: E > D || B ? H + "px" : "auto", display: "block", whiteSpace: N || "normal" }), this.oldTextWidth = H, U = !0);\n }\n this.hasBoxWidthChanged = U, R !== this.cTT && (j = y.fontMetrics(L).b, M(B) && (B !== (this.oldRotation || 0) || w !== this.oldAlign) && this.setSpanRotation(B, I, I), this.getSpanCorrection(!M(B) && this.textPxLength || L.offsetWidth, j, x));\n let { xCorr: _ = 0, yCorr: r1 = 0 } = this, K = (X ?? m) - _ - m - I, Q = (F ?? k) - r1 - k - I;\n d(L, { left: `${m + _}px`, top: `${k + r1}px`, transformOrigin: `${K}px ${Q}px` }), this.cTT = R, this.oldRotation = B, this.oldAlign = w;\n }\n }\n setSpanRotation(L, y, B) {\n d(this.element, { transform: `rotate(${L}deg)`, transformOrigin: `${y}% ${B}px` });\n }\n add(L) {\n let y, B = this.renderer.box.parentNode, X = [];\n if (this.parentGroup = L, L && !(y = L.div)) {\n let F = L;\n for (; F; )\n X.push(F), F = F.parentGroup;\n for (let T of X.reverse())\n y = O(T, B);\n }\n return (y || B).appendChild(this.element), this.added = !0, this.alignOnAdd && this.updateTransform(), this;\n }\n textSetter(L) {\n L !== this.textStr && (delete this.bBox, delete this.oldTextWidth, r.setElementHTML(this.element, L ?? ""), this.textStr = L, this.doTransform = !0);\n }\n alignSetter(L) {\n this.alignValue = this.textAlign = L, this.doTransform = !0;\n }\n xSetter(L, y) {\n this[y] = L, this.doTransform = !0;\n }\n }\n let g = h.prototype;\n return g.visibilitySetter = g.opacitySetter = f, g.ySetter = g.rotationSetter = g.rotationOriginXSetter = g.rotationOriginYSetter = g.xSetter, h;\n }), n(o, "Core/Axis/AxisDefaults.js", [], function() {\n var r, i;\n return (i = r || (r = {})).xAxis = { alignTicks: !0, allowDecimals: void 0, panningEnabled: !0, zIndex: 2, zoomEnabled: !0, dateTimeLabelFormats: { millisecond: { main: "%H:%M:%S.%L", range: !1 }, second: { main: "%H:%M:%S", range: !1 }, minute: { main: "%H:%M", range: !1 }, hour: { main: "%H:%M", range: !1 }, day: { main: "%e %b" }, week: { main: "%e %b" }, month: { main: "%b \'%y" }, year: { main: "%Y" } }, endOnTick: !1, gridLineDashStyle: "Solid", gridZIndex: 1, labels: { autoRotationLimit: 80, distance: 15, enabled: !0, indentation: 10, overflow: "justify", reserveSpace: void 0, rotation: void 0, staggerLines: 0, step: 0, useHTML: !1, zIndex: 7, style: { color: "#333333", cursor: "default", fontSize: "0.8em" } }, maxPadding: 0.01, minorGridLineDashStyle: "Solid", minorTickLength: 2, minorTickPosition: "outside", minorTicksPerMajor: 5, minPadding: 0.01, offset: void 0, reversed: void 0, reversedStacks: !1, showEmpty: !0, showFirstLabel: !0, showLastLabel: !0, startOfWeek: 1, startOnTick: !1, tickLength: 10, tickPixelInterval: 100, tickmarkPlacement: "between", tickPosition: "outside", title: { align: "middle", useHTML: !1, x: 0, y: 0, style: { color: "#666666", fontSize: "0.8em" } }, visible: !0, minorGridLineColor: "#f2f2f2", minorGridLineWidth: 1, minorTickColor: "#999999", lineColor: "#333333", lineWidth: 1, gridLineColor: "#e6e6e6", gridLineWidth: void 0, tickColor: "#333333" }, i.yAxis = { reversedStacks: !0, endOnTick: !0, maxPadding: 0.05, minPadding: 0.05, tickPixelInterval: 72, showLastLabel: !0, labels: { x: void 0 }, startOnTick: !0, title: { text: "Values" }, stackLabels: { animation: {}, allowOverlap: !1, enabled: !1, crop: !0, overflow: "justify", formatter: function() {\n let { numberFormatter: a } = this.axis.chart;\n return a(this.total || 0, -1);\n }, style: { color: "#000000", fontSize: "0.7em", fontWeight: "bold", textOutline: "1px contrast" } }, gridLineWidth: 1, lineWidth: 0 }, r;\n }), n(o, "Core/Foundation.js", [o["Core/Utilities.js"]], function(r) {\n var i;\n let { addEvent: a, isFunction: s, objectEach: l, removeEvent: p } = r;\n return (i || (i = {})).registerEventOptions = function(d, b) {\n d.eventOptions = d.eventOptions || {}, l(b.events, function(M, u) {\n d.eventOptions[u] !== M && (d.eventOptions[u] && (p(d, u, d.eventOptions[u]), delete d.eventOptions[u]), s(M) && (d.eventOptions[u] = M, a(d, u, M, { order: 0 })));\n });\n }, i;\n }), n(o, "Core/Axis/Tick.js", [o["Core/Templating.js"], o["Core/Globals.js"], o["Core/Utilities.js"]], function(r, i, a) {\n let { deg2rad: s } = i, { clamp: l, correctFloat: p, defined: d, destroyObjectProperties: b, extend: M, fireEvent: u, isNumber: A, merge: z, objectEach: f, pick: O } = a;\n return class {\n constructor(h, g, v, L, y) {\n this.isNew = !0, this.isNewLabel = !0, this.axis = h, this.pos = g, this.type = v || "", this.parameters = y || {}, this.tickmarkOffset = this.parameters.tickmarkOffset, this.options = this.parameters.options, u(this, "init"), v || L || this.addLabel();\n }\n addLabel() {\n let h = this, g = h.axis, v = g.options, L = g.chart, y = g.categories, B = g.logarithmic, X = g.names, F = h.pos, T = O(h.options && h.options.labels, v.labels), w = g.tickPositions, H = F === w[0], C = F === w[w.length - 1], q = (!T.step || T.step === 1) && g.tickInterval === 1, m = w.info, k = h.label, x, N, V, R = this.parameters.category || (y ? O(y[F], X[F], F) : F);\n B && A(R) && (R = p(B.lin2log(R))), g.dateTime && (m ? x = (N = L.time.resolveDTLFormat(v.dateTimeLabelFormats[!v.grid && m.higherRanks[F] || m.unitName])).main : A(R) && (x = g.dateTime.getXDateFormat(R, v.dateTimeLabelFormats || {}))), h.isFirst = H, h.isLast = C;\n let I = { axis: g, chart: L, dateTimeLabelFormat: x, isFirst: H, isLast: C, pos: F, tick: h, tickPositionInfo: m, value: R };\n u(this, "labelFormat", I);\n let j = (r1) => T.formatter ? T.formatter.call(r1, r1) : T.format ? (r1.text = g.defaultLabelFormatter.call(r1), r.format(T.format, r1, L)) : g.defaultLabelFormatter.call(r1), U = j.call(I, I), _ = N && N.list;\n _ ? h.shortenLabel = function() {\n for (V = 0; V < _.length; V++)\n if (M(I, { dateTimeLabelFormat: _[V] }), k.attr({ text: j.call(I, I) }), k.getBBox().width < g.getSlotWidth(h) - 2 * (T.padding || 0))\n return;\n k.attr({ text: "" });\n } : h.shortenLabel = void 0, q && g._addedPlotLB && h.moveLabel(U, T), d(k) || h.movedLabel ? k && k.textStr !== U && !q && (!k.textWidth || T.style.width || k.styles.width || k.css({ width: null }), k.attr({ text: U }), k.textPxLength = k.getBBox().width) : (h.label = k = h.createLabel(U, T), h.rotation = 0);\n }\n createLabel(h, g, v) {\n let L = this.axis, y = L.chart, B = d(h) && g.enabled ? y.renderer.text(h, v == null ? void 0 : v.x, v == null ? void 0 : v.y, g.useHTML).add(L.labelGroup) : void 0;\n return B && (y.styledMode || B.css(z(g.style)), B.textPxLength = B.getBBox().width), B;\n }\n destroy() {\n b(this, this.axis);\n }\n getPosition(h, g, v, L) {\n let y = this.axis, B = y.chart, X = L && B.oldChartHeight || B.chartHeight, F = { x: h ? p(y.translate(g + v, void 0, void 0, L) + y.transB) : y.left + y.offset + (y.opposite ? (L && B.oldChartWidth || B.chartWidth) - y.right - y.left : 0), y: h ? X - y.bottom + y.offset - (y.opposite ? y.height : 0) : p(X - y.translate(g + v, void 0, void 0, L) - y.transB) };\n return F.y = l(F.y, -1e9, 1e9), u(this, "afterGetPosition", { pos: F }), F;\n }\n getLabelPosition(h, g, v, L, y, B, X, F) {\n let T, w, H = this.axis, C = H.transA, q = H.isLinked && H.linkedParent ? H.linkedParent.reversed : H.reversed, m = H.staggerLines, k = H.tickRotCorr || { x: 0, y: 0 }, x = L || H.reserveSpaceDefault ? 0 : -H.labelOffset * (H.labelAlign === "center" ? 0.5 : 1), N = y.distance, V = {};\n return T = H.side === 0 ? v.rotation ? -N : -v.getBBox().height : H.side === 2 ? k.y + N : Math.cos(v.rotation * s) * (k.y - v.getBBox(!1, 0).height / 2), d(y.y) && (T = H.side === 0 && H.horiz ? y.y + T : y.y), h = h + O(y.x, [0, 1, 0, -1][H.side] * N) + x + k.x - (B && L ? B * C * (q ? -1 : 1) : 0), g = g + T - (B && !L ? B * C * (q ? 1 : -1) : 0), m && (w = X / (F || 1) % m, H.opposite && (w = m - w - 1), g += w * (H.labelOffset / m)), V.x = h, V.y = Math.round(g), u(this, "afterGetLabelPosition", { pos: V, tickmarkOffset: B, index: X }), V;\n }\n getLabelSize() {\n return this.label ? this.label.getBBox()[this.axis.horiz ? "height" : "width"] : 0;\n }\n getMarkPath(h, g, v, L, y = !1, B) {\n return B.crispLine([["M", h, g], ["L", h + (y ? 0 : -v), g + (y ? v : 0)]], L);\n }\n handleOverflow(h) {\n let g = this.axis, v = g.options.labels, L = h.x, y = g.chart.chartWidth, B = g.chart.spacing, X = O(g.labelLeft, Math.min(g.pos, B[3])), F = O(g.labelRight, Math.max(g.isRadial ? 0 : g.pos + g.len, y - B[1])), T = this.label, w = this.rotation, H = { left: 0, center: 0.5, right: 1 }[g.labelAlign || T.attr("align")], C = T.getBBox().width, q = g.getSlotWidth(this), m = {}, k = q, x = 1, N, V, R;\n w || v.overflow !== "justify" ? w < 0 && L - H * C < X ? R = Math.round(L / Math.cos(w * s) - X) : w > 0 && L + H * C > F && (R = Math.round((y - L) / Math.cos(w * s))) : (N = L - H * C, V = L + (1 - H) * C, N < X ? k = h.x + k * (1 - H) - X : V > F && (k = F - h.x + k * H, x = -1), (k = Math.min(q, k)) < q && g.labelAlign === "center" && (h.x += x * (q - k - H * (q - Math.min(C, k)))), (C > k || g.autoRotation && (T.styles || {}).width) && (R = k)), R && (this.shortenLabel ? this.shortenLabel() : (m.width = Math.floor(R) + "px", (v.style || {}).textOverflow || (m.textOverflow = "ellipsis"), T.css(m)));\n }\n moveLabel(h, g) {\n let v = this, L = v.label, y = v.axis, B = !1, X;\n L && L.textStr === h ? (v.movedLabel = L, B = !0, delete v.label) : f(y.ticks, function(F) {\n B || F.isNew || F === v || !F.label || F.label.textStr !== h || (v.movedLabel = F.label, B = !0, F.labelPos = v.movedLabel.xy, delete F.label);\n }), !B && (v.labelPos || L) && (X = v.labelPos || L.xy, v.movedLabel = v.createLabel(h, g, X), v.movedLabel && v.movedLabel.attr({ opacity: 0 }));\n }\n render(h, g, v) {\n let L = this.axis, y = L.horiz, B = this.pos, X = O(this.tickmarkOffset, L.tickmarkOffset), F = this.getPosition(y, B, X, g), T = F.x, w = F.y, H = L.pos, C = H + L.len, q = y ? T : w;\n !L.chart.polar && this.isNew && (p(q) < H || q > C) && (v = 0);\n let m = O(v, this.label && this.label.newOpacity, 1);\n v = O(v, 1), this.isActive = !0, this.renderGridLine(g, v), this.renderMark(F, v), this.renderLabel(F, g, m, h), this.isNew = !1, u(this, "afterRender");\n }\n renderGridLine(h, g) {\n let v = this.axis, L = v.options, y = {}, B = this.pos, X = this.type, F = O(this.tickmarkOffset, v.tickmarkOffset), T = v.chart.renderer, w = this.gridLine, H, C = L.gridLineWidth, q = L.gridLineColor, m = L.gridLineDashStyle;\n this.type === "minor" && (C = L.minorGridLineWidth, q = L.minorGridLineColor, m = L.minorGridLineDashStyle), w || (v.chart.styledMode || (y.stroke = q, y["stroke-width"] = C || 0, y.dashstyle = m), X || (y.zIndex = 1), h && (g = 0), this.gridLine = w = T.path().attr(y).addClass("highcharts-" + (X ? X + "-" : "") + "grid-line").add(v.gridGroup)), w && (H = v.getPlotLinePath({ value: B + F, lineWidth: w.strokeWidth(), force: "pass", old: h, acrossPanes: !1 })) && w[h || this.isNew ? "attr" : "animate"]({ d: H, opacity: g });\n }\n renderMark(h, g) {\n let v = this.axis, L = v.options, y = v.chart.renderer, B = this.type, X = v.tickSize(B ? B + "Tick" : "tick"), F = h.x, T = h.y, w = O(L[B !== "minor" ? "tickWidth" : "minorTickWidth"], !B && v.isXAxis ? 1 : 0), H = L[B !== "minor" ? "tickColor" : "minorTickColor"], C = this.mark, q = !C;\n X && (v.opposite && (X[0] = -X[0]), C || (this.mark = C = y.path().addClass("highcharts-" + (B ? B + "-" : "") + "tick").add(v.axisGroup), v.chart.styledMode || C.attr({ stroke: H, "stroke-width": w })), C[q ? "attr" : "animate"]({ d: this.getMarkPath(F, T, X[0], C.strokeWidth(), v.horiz, y), opacity: g }));\n }\n renderLabel(h, g, v, L) {\n let y = this.axis, B = y.horiz, X = y.options, F = this.label, T = X.labels, w = T.step, H = O(this.tickmarkOffset, y.tickmarkOffset), C = h.x, q = h.y, m = !0;\n F && A(C) && (F.xy = h = this.getLabelPosition(C, q, F, B, T, H, L, w), (!this.isFirst || this.isLast || X.showFirstLabel) && (!this.isLast || this.isFirst || X.showLastLabel) ? !B || T.step || T.rotation || g || v === 0 || this.handleOverflow(h) : m = !1, w && L % w && (m = !1), m && A(h.y) ? (h.opacity = v, F[this.isNewLabel ? "attr" : "animate"](h).show(!0), this.isNewLabel = !1) : (F.hide(), this.isNewLabel = !0));\n }\n replaceMovedLabel() {\n let h = this.label, g = this.axis;\n h && !this.isNew && (h.animate({ opacity: 0 }, void 0, h.destroy), delete this.label), g.isDirty = !0, this.label = this.movedLabel, delete this.movedLabel;\n }\n };\n }), n(o, "Core/Axis/Axis.js", [o["Core/Animation/AnimationUtilities.js"], o["Core/Axis/AxisDefaults.js"], o["Core/Color/Color.js"], o["Core/Defaults.js"], o["Core/Foundation.js"], o["Core/Globals.js"], o["Core/Axis/Tick.js"], o["Core/Utilities.js"]], function(r, i, a, s, l, p, d, b) {\n let { animObject: M } = r, { xAxis: u, yAxis: A } = i, { defaultOptions: z } = s, { registerEventOptions: f } = l, { deg2rad: O } = p, { arrayMax: h, arrayMin: g, clamp: v, correctFloat: L, defined: y, destroyObjectProperties: B, erase: X, error: F, extend: T, fireEvent: w, getClosestDistance: H, insertItem: C, isArray: q, isNumber: m, isString: k, merge: x, normalizeTickInterval: N, objectEach: V, pick: R, relativeLength: I, removeEvent: j, splat: U, syncTimeout: _ } = b, r1 = (Q, E) => N(E, void 0, void 0, R(Q.options.allowDecimals, E < 0.5 || Q.tickAmount !== void 0), !!Q.tickAmount);\n T(z, { xAxis: u, yAxis: x(u, A) });\n class K {\n constructor(E, D, G) {\n this.init(E, D, G);\n }\n init(E, D, G = this.coll) {\n let J = G === "xAxis", S = this.isZAxis || (E.inverted ? !J : J);\n this.chart = E, this.horiz = S, this.isXAxis = J, this.coll = G, w(this, "init", { userOptions: D }), this.opposite = R(D.opposite, this.opposite), this.side = R(D.side, this.side, S ? this.opposite ? 0 : 2 : this.opposite ? 1 : 3), this.setOptions(D);\n let W = this.options, P = W.labels;\n this.type ?? (this.type = W.type || "linear"), this.uniqueNames ?? (this.uniqueNames = W.uniqueNames ?? !0), w(this, "afterSetType"), this.userOptions = D, this.minPixelPadding = 0, this.reversed = R(W.reversed, this.reversed), this.visible = W.visible, this.zoomEnabled = W.zoomEnabled, this.hasNames = this.type === "category" || W.categories === !0, this.categories = q(W.categories) && W.categories || (this.hasNames ? [] : void 0), this.names || (this.names = [], this.names.keys = {}), this.plotLinesAndBandsGroups = {}, this.positiveValuesOnly = !!this.logarithmic, this.isLinked = y(W.linkedTo), this.ticks = {}, this.labelEdge = [], this.minorTicks = {}, this.plotLinesAndBands = [], this.alternateBands = {}, this.len ?? (this.len = 0), this.minRange = this.userMinRange = W.minRange || W.maxZoom, this.range = W.range, this.offset = W.offset || 0, this.max = void 0, this.min = void 0;\n let Y = R(W.crosshair, U(E.options.tooltip.crosshairs)[J ? 0 : 1]);\n this.crosshair = Y === !0 ? {} : Y, E.axes.indexOf(this) === -1 && (J ? E.axes.splice(E.xAxis.length, 0, this) : E.axes.push(this), C(this, E[this.coll])), E.orderItems(this.coll), this.series = this.series || [], E.inverted && !this.isZAxis && J && !y(this.reversed) && (this.reversed = !0), this.labelRotation = m(P.rotation) ? P.rotation : void 0, f(this, W), w(this, "afterInit");\n }\n setOptions(E) {\n let D = this.horiz ? { labels: { autoRotation: [-45], padding: 4 }, margin: 15 } : { labels: { padding: 1 }, title: { rotation: 90 * this.side } };\n this.options = x(D, z[this.coll], E), w(this, "afterSetOptions", { userOptions: E });\n }\n defaultLabelFormatter() {\n let E = this.axis, { numberFormatter: D } = this.chart, G = m(this.value) ? this.value : NaN, J = E.chart.time, S = E.categories, W = this.dateTimeLabelFormat, P = z.lang, Y = P.numericSymbols, Z = P.numericSymbolMagnitude || 1e3, t1 = E.logarithmic ? Math.abs(G) : E.tickInterval, i1 = Y && Y.length, n1, s1;\n if (S)\n s1 = `${this.value}`;\n else if (W)\n s1 = J.dateFormat(W, G);\n else if (i1 && Y && t1 >= 1e3)\n for (; i1-- && s1 === void 0; )\n t1 >= (n1 = Math.pow(Z, i1 + 1)) && 10 * G % n1 == 0 && Y[i1] !== null && G !== 0 && (s1 = D(G / n1, -1) + Y[i1]);\n return s1 === void 0 && (s1 = Math.abs(G) >= 1e4 ? D(G, -1) : D(G, -1, void 0, "")), s1;\n }\n getSeriesExtremes() {\n let E, D = this;\n w(this, "getSeriesExtremes", null, function() {\n D.hasVisibleSeries = !1, D.dataMin = D.dataMax = D.threshold = void 0, D.softThreshold = !D.isXAxis, D.series.forEach((G) => {\n if (G.reserveSpace()) {\n let J = G.options, S, W = J.threshold, P, Y;\n if (D.hasVisibleSeries = !0, D.positiveValuesOnly && 0 >= (W || 0) && (W = void 0), D.isXAxis)\n (S = G.xData) && S.length && (S = D.logarithmic ? S.filter((Z) => Z > 0) : S, P = (E = G.getXExtremes(S)).min, Y = E.max, m(P) || P instanceof Date || (S = S.filter(m), P = (E = G.getXExtremes(S)).min, Y = E.max), S.length && (D.dataMin = Math.min(R(D.dataMin, P), P), D.dataMax = Math.max(R(D.dataMax, Y), Y)));\n else {\n let Z = G.applyExtremes();\n m(Z.dataMin) && (P = Z.dataMin, D.dataMin = Math.min(R(D.dataMin, P), P)), m(Z.dataMax) && (Y = Z.dataMax, D.dataMax = Math.max(R(D.dataMax, Y), Y)), y(W) && (D.threshold = W), (!J.softThreshold || D.positiveValuesOnly) && (D.softThreshold = !1);\n }\n }\n });\n }), w(this, "afterGetSeriesExtremes");\n }\n translate(E, D, G, J, S, W) {\n var b1;\n let P = this.linkedParent || this, Y = J && P.old ? P.old.min : P.min;\n if (!m(Y))\n return NaN;\n let Z = P.minPixelPadding, t1 = (P.isOrdinal || ((b1 = P.brokenAxis) == null ? void 0 : b1.hasBreaks) || P.logarithmic && S) && P.lin2val, i1 = 1, n1 = 0, s1 = J && P.old ? P.old.transA : P.transA, d1 = 0;\n return s1 || (s1 = P.transA), G && (i1 *= -1, n1 = P.len), P.reversed && (i1 *= -1, n1 -= i1 * (P.sector || P.len)), D ? (d1 = (E = E * i1 + n1 - Z) / s1 + Y, t1 && (d1 = P.lin2val(d1))) : (t1 && (E = P.val2lin(E)), d1 = i1 * (E - Y) * s1 + n1 + i1 * Z + (m(W) ? s1 * W : 0), P.isRadial || (d1 = L(d1))), d1;\n }\n toPixels(E, D) {\n return this.translate(E, !1, !this.horiz, void 0, !0) + (D ? 0 : this.pos);\n }\n toValue(E, D) {\n return this.translate(E - (D ? 0 : this.pos), !0, !this.horiz, void 0, !0);\n }\n getPlotLinePath(E) {\n let D = this, G = D.chart, J = D.left, S = D.top, W = E.old, P = E.value, Y = E.lineWidth, Z = W && G.oldChartHeight || G.chartHeight, t1 = W && G.oldChartWidth || G.chartWidth, i1 = D.transB, n1 = E.translatedValue, s1 = E.force, d1, b1, c1, a1, l1;\n function p1(A1, u1, h1) {\n return s1 !== "pass" && (A1 < u1 || A1 > h1) && (s1 ? A1 = v(A1, u1, h1) : l1 = !0), A1;\n }\n let M1 = { value: P, lineWidth: Y, old: W, force: s1, acrossPanes: E.acrossPanes, translatedValue: n1 };\n return w(this, "getPlotLinePath", M1, function(A1) {\n d1 = c1 = (n1 = v(n1 = R(n1, D.translate(P, void 0, void 0, W)), -1e9, 1e9)) + i1, b1 = a1 = Z - n1 - i1, m(n1) ? D.horiz ? (b1 = S, a1 = Z - D.bottom + (D.options.isInternal ? 0 : G.scrollablePixelsY || 0), d1 = c1 = p1(d1, J, J + D.width)) : (d1 = J, c1 = t1 - D.right + (G.scrollablePixelsX || 0), b1 = a1 = p1(b1, S, S + D.height)) : (l1 = !0, s1 = !1), A1.path = l1 && !s1 ? void 0 : G.renderer.crispLine([["M", d1, b1], ["L", c1, a1]], Y || 1);\n }), M1.path;\n }\n getLinearTickPositions(E, D, G) {\n let J, S, W, P = L(Math.floor(D / E) * E), Y = L(Math.ceil(G / E) * E), Z = [];\n if (L(P + E) === P && (W = 20), this.single)\n return [D];\n for (J = P; J <= Y && (Z.push(J), (J = L(J + E, W)) !== S); )\n S = J;\n return Z;\n }\n getMinorTickInterval() {\n let { minorTicks: E, minorTickInterval: D } = this.options;\n return E === !0 ? R(D, "auto") : E !== !1 ? D : void 0;\n }\n getMinorTickPositions() {\n let E = this.options, D = this.tickPositions, G = this.minorTickInterval, J = this.pointRangePadding || 0, S = (this.min || 0) - J, W = (this.max || 0) + J, P = W - S, Y = [], Z;\n if (P && P / G < this.len / 3) {\n let t1 = this.logarithmic;\n if (t1)\n this.paddedTicks.forEach(function(i1, n1, s1) {\n n1 && Y.push.apply(Y, t1.getLogTickPositions(G, s1[n1 - 1], s1[n1], !0));\n });\n else if (this.dateTime && this.getMinorTickInterval() === "auto")\n Y = Y.concat(this.getTimeTicks(this.dateTime.normalizeTimeTickInterval(G), S, W, E.startOfWeek));\n else\n for (Z = S + (D[0] - S) % G; Z <= W && Z !== Y[0]; Z += G)\n Y.push(Z);\n }\n return Y.length !== 0 && this.trimTicks(Y), Y;\n }\n adjustForMinRange() {\n let E = this.options, D = this.logarithmic, { max: G, min: J, minRange: S } = this, W, P, Y, Z;\n this.isXAxis && S === void 0 && !D && (S = y(E.min) || y(E.max) || y(E.floor) || y(E.ceiling) ? null : Math.min(5 * (H(this.series.map((t1) => {\n var i1;\n return (t1.xIncrement ? (i1 = t1.xData) == null ? void 0 : i1.slice(0, 2) : t1.xData) || [];\n })) || 0), this.dataMax - this.dataMin)), m(G) && m(J) && m(S) && G - J < S && (P = this.dataMax - this.dataMin >= S, W = (S - G + J) / 2, Y = [J - W, R(E.min, J - W)], P && (Y[2] = D ? D.log2lin(this.dataMin) : this.dataMin), Z = [(J = h(Y)) + S, R(E.max, J + S)], P && (Z[2] = D ? D.log2lin(this.dataMax) : this.dataMax), (G = g(Z)) - J < S && (Y[0] = G - S, Y[1] = R(E.min, G - S), J = h(Y))), this.minRange = S, this.min = J, this.max = G;\n }\n getClosest() {\n let E, D;\n if (this.categories)\n D = 1;\n else {\n let G = [];\n this.series.forEach(function(J) {\n var W;\n let S = J.closestPointRange;\n ((W = J.xData) == null ? void 0 : W.length) === 1 ? G.push(J.xData[0]) : !J.noSharedTooltip && y(S) && J.reserveSpace() && (D = y(D) ? Math.min(D, S) : S);\n }), G.length && (G.sort((J, S) => J - S), E = H([G]));\n }\n return E && D ? Math.min(E, D) : E || D;\n }\n nameToX(E) {\n let D = q(this.options.categories), G = D ? this.categories : this.names, J = E.options.x, S;\n return E.series.requireSorting = !1, y(J) || (J = this.uniqueNames && G ? D ? G.indexOf(E.name) : R(G.keys[E.name], -1) : E.series.autoIncrement()), J === -1 ? !D && G && (S = G.length) : S = J, S !== void 0 ? (this.names[S] = E.name, this.names.keys[E.name] = S) : E.x && (S = E.x), S;\n }\n updateNames() {\n let E = this, D = this.names;\n D.length > 0 && (Object.keys(D.keys).forEach(function(G) {\n delete D.keys[G];\n }), D.length = 0, this.minRange = this.userMinRange, (this.series || []).forEach((G) => {\n G.xIncrement = null, (!G.points || G.isDirtyData) && (E.max = Math.max(E.max, G.xData.length - 1), G.processData(), G.generatePoints()), G.data.forEach(function(J, S) {\n let W;\n J != null && J.options && J.name !== void 0 && (W = E.nameToX(J)) !== void 0 && W !== J.x && (J.x = W, G.xData[S] = W);\n });\n }));\n }\n setAxisTranslation() {\n let E = this, D = E.max - E.min, G = E.linkedParent, J = !!E.categories, S = E.isXAxis, W = E.axisPointRange || 0, P, Y = 0, Z = 0, t1, i1 = E.transA;\n (S || J || W) && (P = E.getClosest(), G ? (Y = G.minPointOffset, Z = G.pointRangePadding) : E.series.forEach(function(n1) {\n let s1 = J ? 1 : S ? R(n1.options.pointRange, P, 0) : E.axisPointRange || 0, d1 = n1.options.pointPlacement;\n if (W = Math.max(W, s1), !E.single || J) {\n let b1 = n1.is("xrange") ? !S : S;\n Y = Math.max(Y, b1 && k(d1) ? 0 : s1 / 2), Z = Math.max(Z, b1 && d1 === "on" ? 0 : s1);\n }\n }), t1 = E.ordinal && E.ordinal.slope && P ? E.ordinal.slope / P : 1, E.minPointOffset = Y *= t1, E.pointRangePadding = Z *= t1, E.pointRange = Math.min(W, E.single && J ? 1 : D), S && P && (E.closestPointRange = P)), E.translationSlope = E.transA = i1 = E.staticScale || E.len / (D + Z || 1), E.transB = E.horiz ? E.left : E.bottom, E.minPixelPadding = i1 * Y, w(this, "afterSetAxisTranslation");\n }\n minFromRange() {\n let { max: E, min: D } = this;\n return m(E) && m(D) && E - D || void 0;\n }\n setTickInterval(E) {\n var v1, S1, D1, F1;\n let { categories: D, chart: G, dataMax: J, dataMin: S, dateTime: W, isXAxis: P, logarithmic: Y, options: Z, softThreshold: t1 } = this, i1 = m(this.threshold) ? this.threshold : void 0, n1 = this.minRange || 0, { ceiling: s1, floor: d1, linkedTo: b1, softMax: c1, softMin: a1 } = Z, l1 = m(b1) && ((v1 = G[this.coll]) == null ? void 0 : v1[b1]), p1 = Z.tickPixelInterval, M1 = Z.maxPadding, A1 = Z.minPadding, u1 = 0, h1, C1 = m(Z.tickInterval) && Z.tickInterval >= 0 ? Z.tickInterval : void 0, q1, W1, R1, k1;\n if (W || D || l1 || this.getTickAmount(), R1 = R(this.userMin, Z.min), k1 = R(this.userMax, Z.max), l1 ? (this.linkedParent = l1, h1 = l1.getExtremes(), this.min = R(h1.min, h1.dataMin), this.max = R(h1.max, h1.dataMax), this.type !== l1.type && F(11, !0, G)) : (t1 && y(i1) && m(J) && m(S) && (S >= i1 ? (q1 = i1, A1 = 0) : J <= i1 && (W1 = i1, M1 = 0)), this.min = R(R1, q1, S), this.max = R(k1, W1, J)), m(this.max) && m(this.min) && (Y && (this.positiveValuesOnly && !E && 0 >= Math.min(this.min, R(S, this.min)) && F(10, !0, G), this.min = L(Y.log2lin(this.min), 16), this.max = L(Y.log2lin(this.max), 16)), this.range && m(S) && (this.userMin = this.min = R1 = Math.max(S, this.minFromRange() || 0), this.userMax = k1 = this.max, this.range = void 0)), w(this, "foundExtremes"), this.adjustForMinRange(), m(this.min) && m(this.max)) {\n if (!m(this.userMin) && m(a1) && a1 < this.min && (this.min = R1 = a1), !m(this.userMax) && m(c1) && c1 > this.max && (this.max = k1 = c1), D || this.axisPointRange || (S1 = this.stacking) != null && S1.usePercentage || l1 || !(u1 = this.max - this.min) || (!y(R1) && A1 && (this.min -= u1 * A1), y(k1) || !M1 || (this.max += u1 * M1)), !m(this.userMin) && m(d1) && (this.min = Math.max(this.min, d1)), !m(this.userMax) && m(s1) && (this.max = Math.min(this.max, s1)), t1 && m(S) && m(J)) {\n let U1 = i1 || 0;\n !y(R1) && this.min < U1 && S >= U1 ? this.min = Z.minRange ? Math.min(U1, this.max - n1) : U1 : !y(k1) && this.max > U1 && J <= U1 && (this.max = Z.minRange ? Math.max(U1, this.min + n1) : U1);\n }\n !G.polar && this.min > this.max && (y(Z.min) ? this.max = this.min : y(Z.max) && (this.min = this.max)), u1 = this.max - this.min;\n }\n if (this.min !== this.max && m(this.min) && m(this.max) ? l1 && !C1 && p1 === l1.options.tickPixelInterval ? this.tickInterval = C1 = l1.tickInterval : this.tickInterval = R(C1, this.tickAmount ? u1 / Math.max(this.tickAmount - 1, 1) : void 0, D ? 1 : u1 * p1 / Math.max(this.len, p1)) : this.tickInterval = 1, P && !E) {\n let U1 = this.min !== ((D1 = this.old) == null ? void 0 : D1.min) || this.max !== ((F1 = this.old) == null ? void 0 : F1.max);\n this.series.forEach(function(h0) {\n var O0;\n h0.forceCrop = (O0 = h0.forceCropping) == null ? void 0 : O0.call(h0), h0.processData(U1);\n }), w(this, "postProcessData", { hasExtremesChanged: U1 });\n }\n this.setAxisTranslation(), w(this, "initialAxisTranslation"), this.pointRange && !C1 && (this.tickInterval = Math.max(this.pointRange, this.tickInterval));\n let N1 = R(Z.minTickInterval, W && !this.series.some((U1) => U1.noSharedTooltip) ? this.closestPointRange : 0);\n !C1 && this.tickInterval < N1 && (this.tickInterval = N1), W || Y || C1 || (this.tickInterval = r1(this, this.tickInterval)), this.tickAmount || (this.tickInterval = this.unsquish()), this.setTickPositions();\n }\n setTickPositions() {\n var t1, i1;\n let E = this.options, D = E.tickPositions, G = E.tickPositioner, J = this.getMinorTickInterval(), S = !this.isPanning, W = S && E.startOnTick, P = S && E.endOnTick, Y = [], Z;\n if (this.tickmarkOffset = this.categories && E.tickmarkPlacement === "between" && this.tickInterval === 1 ? 0.5 : 0, this.single = this.min === this.max && y(this.min) && !this.tickAmount && (this.min % 1 == 0 || E.allowDecimals !== !1), D)\n Y = D.slice();\n else if (m(this.min) && m(this.max)) {\n if (!((t1 = this.ordinal) != null && t1.positions) && (this.max - this.min) / this.tickInterval > Math.max(2 * this.len, 200))\n Y = [this.min, this.max], F(19, !1, this.chart);\n else if (this.dateTime)\n Y = this.getTimeTicks(this.dateTime.normalizeTimeTickInterval(this.tickInterval, E.units), this.min, this.max, E.startOfWeek, (i1 = this.ordinal) == null ? void 0 : i1.positions, this.closestPointRange, !0);\n else if (this.logarithmic)\n Y = this.logarithmic.getLogTickPositions(this.tickInterval, this.min, this.max);\n else {\n let n1 = this.tickInterval, s1 = n1;\n for (; s1 <= 2 * n1 && (Y = this.getLinearTickPositions(this.tickInterval, this.min, this.max), this.tickAmount && Y.length > this.tickAmount); )\n this.tickInterval = r1(this, s1 *= 1.1);\n }\n Y.length > this.len && (Y = [Y[0], Y[Y.length - 1]])[0] === Y[1] && (Y.length = 1), G && (this.tickPositions = Y, (Z = G.apply(this, [this.min, this.max])) && (Y = Z));\n }\n this.tickPositions = Y, this.minorTickInterval = J === "auto" && this.tickInterval ? this.tickInterval / E.minorTicksPerMajor : J, this.paddedTicks = Y.slice(0), this.trimTicks(Y, W, P), !this.isLinked && m(this.min) && m(this.max) && (this.single && Y.length < 2 && !this.categories && !this.series.some((n1) => n1.is("heatmap") && n1.options.pointPlacement === "between") && (this.min -= 0.5, this.max += 0.5), D || Z || this.adjustTickAmount()), w(this, "afterSetTickPositions");\n }\n trimTicks(E, D, G) {\n let J = E[0], S = E[E.length - 1], W = !this.isOrdinal && this.minPointOffset || 0;\n if (w(this, "trimTicks"), !this.isLinked) {\n if (D && J !== -1 / 0)\n this.min = J;\n else\n for (; this.min - W > E[0]; )\n E.shift();\n if (G)\n this.max = S;\n else\n for (; this.max + W < E[E.length - 1]; )\n E.pop();\n E.length === 0 && y(J) && !this.options.tickPositions && E.push((S + J) / 2);\n }\n }\n alignToOthers() {\n let E, D = this, G = D.chart, J = [this], S = D.options, W = G.options.chart, P = this.coll === "yAxis" && W.alignThresholds, Y = [];\n if (D.thresholdAlignment = void 0, (W.alignTicks !== !1 && S.alignTicks || P) && S.startOnTick !== !1 && S.endOnTick !== !1 && !D.logarithmic) {\n let Z = (i1) => {\n let { horiz: n1, options: s1 } = i1;\n return [n1 ? s1.left : s1.top, s1.width, s1.height, s1.pane].join(",");\n }, t1 = Z(this);\n G[this.coll].forEach(function(i1) {\n let { series: n1 } = i1;\n n1.length && n1.some((s1) => s1.visible) && i1 !== D && Z(i1) === t1 && (E = !0, J.push(i1));\n });\n }\n if (E && P) {\n J.forEach((t1) => {\n let i1 = t1.getThresholdAlignment(D);\n m(i1) && Y.push(i1);\n });\n let Z = Y.length > 1 ? Y.reduce((t1, i1) => t1 += i1, 0) / Y.length : void 0;\n J.forEach((t1) => {\n t1.thresholdAlignment = Z;\n });\n }\n return E;\n }\n getThresholdAlignment(E) {\n if ((!m(this.dataMin) || this !== E && this.series.some((D) => D.isDirty || D.isDirtyData)) && this.getSeriesExtremes(), m(this.threshold)) {\n let D = v((this.threshold - (this.dataMin || 0)) / ((this.dataMax || 0) - (this.dataMin || 0)), 0, 1);\n return this.options.reversed && (D = 1 - D), D;\n }\n }\n getTickAmount() {\n let E = this.options, D = E.tickPixelInterval, G = E.tickAmount;\n y(E.tickInterval) || G || !(this.len < D) || this.isRadial || this.logarithmic || !E.startOnTick || !E.endOnTick || (G = 2), !G && this.alignToOthers() && (G = Math.ceil(this.len / D) + 1), G < 4 && (this.finalTickAmt = G, G = 5), this.tickAmount = G;\n }\n adjustTickAmount() {\n let E = this, { finalTickAmt: D, max: G, min: J, options: S, tickPositions: W, tickAmount: P, thresholdAlignment: Y } = E, Z = W == null ? void 0 : W.length, t1 = R(E.threshold, E.softThreshold ? 0 : null), i1, n1, s1 = E.tickInterval, d1, b1 = () => W.push(L(W[W.length - 1] + s1)), c1 = () => W.unshift(L(W[0] - s1));\n if (m(Y) && (d1 = Y < 0.5 ? Math.ceil(Y * (P - 1)) : Math.floor(Y * (P - 1)), S.reversed && (d1 = P - 1 - d1)), E.hasData() && m(J) && m(G)) {\n let a1 = () => {\n E.transA *= (Z - 1) / (P - 1), E.min = S.startOnTick ? W[0] : Math.min(J, W[0]), E.max = S.endOnTick ? W[W.length - 1] : Math.max(G, W[W.length - 1]);\n };\n if (m(d1) && m(E.threshold)) {\n for (; W[d1] !== t1 || W.length !== P || W[0] > J || W[W.length - 1] < G; ) {\n for (W.length = 0, W.push(E.threshold); W.length < P; )\n W[d1] === void 0 || W[d1] > E.threshold ? c1() : b1();\n if (s1 > 8 * E.tickInterval)\n break;\n s1 *= 2;\n }\n a1();\n } else if (Z < P) {\n for (; W.length < P; )\n W.length % 2 || J === t1 ? b1() : c1();\n a1();\n }\n if (y(D)) {\n for (n1 = i1 = W.length; n1--; )\n (D === 3 && n1 % 2 == 1 || D <= 2 && n1 > 0 && n1 < i1 - 1) && W.splice(n1, 1);\n E.finalTickAmt = void 0;\n }\n }\n }\n setScale() {\n var W, P;\n let { coll: E, stacking: D } = this, G = !1, J = !1;\n this.series.forEach((Y) => {\n G = G || Y.isDirtyData || Y.isDirty, J = J || Y.xAxis && Y.xAxis.isDirty || !1;\n }), this.setAxisSize();\n let S = this.len !== (this.old && this.old.len);\n S || G || J || this.isLinked || this.forceRedraw || this.userMin !== (this.old && this.old.userMin) || this.userMax !== (this.old && this.old.userMax) || this.alignToOthers() ? (D && E === "yAxis" && D.buildStacks(), this.forceRedraw = !1, this.userMinRange || (this.minRange = void 0), this.getSeriesExtremes(), this.setTickInterval(), D && E === "xAxis" && D.buildStacks(), this.isDirty || (this.isDirty = S || this.min !== ((W = this.old) == null ? void 0 : W.min) || this.max !== ((P = this.old) == null ? void 0 : P.max))) : D && D.cleanStacks(), G && delete this.allExtremes, w(this, "afterSetScale");\n }\n setExtremes(E, D, G = !0, J, S) {\n this.series.forEach((W) => {\n delete W.kdTree;\n }), w(this, "setExtremes", S = T(S, { min: E, max: D }), (W) => {\n this.userMin = W.min, this.userMax = W.max, this.eventArgs = W, G && this.chart.redraw(J);\n });\n }\n setAxisSize() {\n let E = this.chart, D = this.options, G = D.offsets || [0, 0, 0, 0], J = this.horiz, S = this.width = Math.round(I(R(D.width, E.plotWidth - G[3] + G[1]), E.plotWidth)), W = this.height = Math.round(I(R(D.height, E.plotHeight - G[0] + G[2]), E.plotHeight)), P = this.top = Math.round(I(R(D.top, E.plotTop + G[0]), E.plotHeight, E.plotTop)), Y = this.left = Math.round(I(R(D.left, E.plotLeft + G[3]), E.plotWidth, E.plotLeft));\n this.bottom = E.chartHeight - W - P, this.right = E.chartWidth - S - Y, this.len = Math.max(J ? S : W, 0), this.pos = J ? Y : P;\n }\n getExtremes() {\n let E = this.logarithmic;\n return { min: E ? L(E.lin2log(this.min)) : this.min, max: E ? L(E.lin2log(this.max)) : this.max, dataMin: this.dataMin, dataMax: this.dataMax, userMin: this.userMin, userMax: this.userMax };\n }\n getThreshold(E) {\n let D = this.logarithmic, G = D ? D.lin2log(this.min) : this.min, J = D ? D.lin2log(this.max) : this.max;\n return E === null || E === -1 / 0 ? E = G : E === 1 / 0 ? E = J : G > E ? E = G : J < E && (E = J), this.translate(E, 0, 1, 0, 1);\n }\n autoLabelAlign(E) {\n let D = (R(E, 0) - 90 * this.side + 720) % 360, G = { align: "center" };\n return w(this, "autoLabelAlign", G, function(J) {\n D > 15 && D < 165 ? J.align = "right" : D > 195 && D < 345 && (J.align = "left");\n }), G.align;\n }\n tickSize(E) {\n let D = this.options, G = R(D[E === "tick" ? "tickWidth" : "minorTickWidth"], E === "tick" && this.isXAxis && !this.categories ? 1 : 0), J = D[E === "tick" ? "tickLength" : "minorTickLength"], S;\n G && J && (D[E + "Position"] === "inside" && (J = -J), S = [J, G]);\n let W = { tickSize: S };\n return w(this, "afterTickSize", W), W.tickSize;\n }\n labelMetrics() {\n let E = this.chart.renderer, D = this.ticks, G = D[Object.keys(D)[0]] || {};\n return this.chart.renderer.fontMetrics(G.label || G.movedLabel || E.box);\n }\n unsquish() {\n let E = this.options.labels, D = E.padding || 0, G = this.horiz, J = this.tickInterval, S = this.len / (((this.categories ? 1 : 0) + this.max - this.min) / J), W = E.rotation, P = L(0.8 * this.labelMetrics().h), Y = Math.max(this.max - this.min, 0), Z = function(d1) {\n let b1 = (d1 + 2 * D) / (S || 1);\n return (b1 = b1 > 1 ? Math.ceil(b1) : 1) * J > Y && d1 !== 1 / 0 && S !== 1 / 0 && Y && (b1 = Math.ceil(Y / J)), L(b1 * J);\n }, t1 = J, i1, n1 = Number.MAX_VALUE, s1;\n if (G) {\n if (!E.staggerLines && (m(W) ? s1 = [W] : S < E.autoRotationLimit && (s1 = E.autoRotation)), s1) {\n let d1, b1;\n for (let c1 of s1)\n (c1 === W || c1 && c1 >= -90 && c1 <= 90) && (b1 = (d1 = Z(Math.abs(P / Math.sin(O * c1)))) + Math.abs(c1 / 360)) < n1 && (n1 = b1, i1 = c1, t1 = d1);\n }\n } else\n t1 = Z(0.75 * P);\n return this.autoRotation = s1, this.labelRotation = R(i1, m(W) ? W : 0), E.step ? J : t1;\n }\n getSlotWidth(E) {\n let D = this.chart, G = this.horiz, J = this.options.labels, S = Math.max(this.tickPositions.length - (this.categories ? 0 : 1), 1), W = D.margin[3];\n if (E && m(E.slotWidth))\n return E.slotWidth;\n if (G && J.step < 2)\n return J.rotation ? 0 : (this.staggerLines || 1) * this.len / S;\n if (!G) {\n let P = J.style.width;\n if (P !== void 0)\n return parseInt(String(P), 10);\n if (W)\n return W - D.spacing[3];\n }\n return 0.33 * D.chartWidth;\n }\n renderUnsquish() {\n let E = this.chart, D = E.renderer, G = this.tickPositions, J = this.ticks, S = this.options.labels, W = S.style, P = this.horiz, Y = this.getSlotWidth(), Z = Math.max(1, Math.round(Y - (P ? 2 * (S.padding || 0) : S.distance || 0))), t1 = {}, i1 = this.labelMetrics(), n1 = W.textOverflow, s1, d1, b1 = 0, c1, a1;\n if (k(S.rotation) || (t1.rotation = S.rotation || 0), G.forEach(function(l1) {\n let p1 = J[l1];\n p1.movedLabel && p1.replaceMovedLabel(), p1 && p1.label && p1.label.textPxLength > b1 && (b1 = p1.label.textPxLength);\n }), this.maxLabelLength = b1, this.autoRotation)\n b1 > Z && b1 > i1.h ? t1.rotation = this.labelRotation : this.labelRotation = 0;\n else if (Y && (s1 = Z, !n1))\n for (d1 = "clip", a1 = G.length; !P && a1--; )\n (c1 = J[G[a1]].label) && (c1.styles.textOverflow === "ellipsis" ? c1.css({ textOverflow: "clip" }) : c1.textPxLength > Y && c1.css({ width: Y + "px" }), c1.getBBox().height > this.len / G.length - (i1.h - i1.f) && (c1.specificTextOverflow = "ellipsis"));\n t1.rotation && (s1 = b1 > 0.5 * E.chartHeight ? 0.33 * E.chartHeight : b1, n1 || (d1 = "ellipsis")), this.labelAlign = S.align || this.autoLabelAlign(this.labelRotation), this.labelAlign && (t1.align = this.labelAlign), G.forEach(function(l1) {\n let p1 = J[l1], M1 = p1 && p1.label, A1 = W.width, u1 = {};\n M1 && (M1.attr(t1), p1.shortenLabel ? p1.shortenLabel() : s1 && !A1 && W.whiteSpace !== "nowrap" && (s1 < M1.textPxLength || M1.element.tagName === "SPAN") ? (u1.width = s1 + "px", n1 || (u1.textOverflow = M1.specificTextOverflow || d1), M1.css(u1)) : !M1.styles.width || u1.width || A1 || M1.css({ width: null }), delete M1.specificTextOverflow, p1.rotation = t1.rotation);\n }, this), this.tickRotCorr = D.rotCorr(i1.b, this.labelRotation || 0, this.side !== 0);\n }\n hasData() {\n return this.series.some(function(E) {\n return E.hasData();\n }) || this.options.showEmpty && y(this.min) && y(this.max);\n }\n addTitle(E) {\n let D, G = this.chart.renderer, J = this.horiz, S = this.opposite, W = this.options.title, P = this.chart.styledMode;\n this.axisTitle || ((D = W.textAlign) || (D = (J ? { low: "left", middle: "center", high: "right" } : { low: S ? "right" : "left", middle: "center", high: S ? "left" : "right" })[W.align]), this.axisTitle = G.text(W.text || "", 0, 0, W.useHTML).attr({ zIndex: 7, rotation: W.rotation || 0, align: D }).addClass("highcharts-axis-title"), P || this.axisTitle.css(x(W.style)), this.axisTitle.add(this.axisGroup), this.axisTitle.isNew = !0), P || W.style.width || this.isRadial || this.axisTitle.css({ width: this.len + "px" }), this.axisTitle[E ? "show" : "hide"](E);\n }\n generateTick(E) {\n let D = this.ticks;\n D[E] ? D[E].addLabel() : D[E] = new d(this, E);\n }\n createGroups() {\n let { axisParent: E, chart: D, coll: G, options: J } = this, S = D.renderer, W = (P, Y, Z) => S.g(P).attr({ zIndex: Z }).addClass(`highcharts-${G.toLowerCase()}${Y} ` + (this.isRadial ? `highcharts-radial-axis${Y} ` : "") + (J.className || "")).add(E);\n this.axisGroup || (this.gridGroup = W("grid", "-grid", J.gridZIndex), this.axisGroup = W("axis", "", J.zIndex), this.labelGroup = W("axis-labels", "-labels", J.labels.zIndex));\n }\n getOffset() {\n let E = this, { chart: D, horiz: G, options: J, side: S, ticks: W, tickPositions: P, coll: Y } = E, Z = D.inverted && !E.isZAxis ? [1, 0, 3, 2][S] : S, t1 = E.hasData(), i1 = J.title, n1 = J.labels, s1 = m(J.crossing), d1 = D.axisOffset, b1 = D.clipOffset, c1 = [-1, 1, 1, -1][S], a1, l1 = 0, p1, M1 = 0, A1 = 0, u1, h1;\n if (E.showAxis = a1 = t1 || J.showEmpty, E.staggerLines = E.horiz && n1.staggerLines || void 0, E.createGroups(), t1 || E.isLinked ? (P.forEach(function(C1) {\n E.generateTick(C1);\n }), E.renderUnsquish(), E.reserveSpaceDefault = S === 0 || S === 2 || { 1: "left", 3: "right" }[S] === E.labelAlign, R(n1.reserveSpace, !s1 && null, E.labelAlign === "center" || null, E.reserveSpaceDefault) && P.forEach(function(C1) {\n A1 = Math.max(W[C1].getLabelSize(), A1);\n }), E.staggerLines && (A1 *= E.staggerLines), E.labelOffset = A1 * (E.opposite ? -1 : 1)) : V(W, function(C1, q1) {\n C1.destroy(), delete W[q1];\n }), i1 != null && i1.text && i1.enabled !== !1 && (E.addTitle(a1), a1 && !s1 && i1.reserveSpace !== !1 && (E.titleOffset = l1 = E.axisTitle.getBBox()[G ? "height" : "width"], M1 = y(p1 = i1.offset) ? 0 : R(i1.margin, G ? 5 : 10))), E.renderLine(), E.offset = c1 * R(J.offset, d1[S] ? d1[S] + (J.margin || 0) : 0), E.tickRotCorr = E.tickRotCorr || { x: 0, y: 0 }, h1 = S === 0 ? -E.labelMetrics().h : S === 2 ? E.tickRotCorr.y : 0, u1 = Math.abs(A1) + M1, A1 && (u1 -= h1, u1 += c1 * (G ? R(n1.y, E.tickRotCorr.y + c1 * n1.distance) : R(n1.x, c1 * n1.distance))), E.axisTitleMargin = R(p1, u1), E.getMaxLabelDimensions && (E.maxLabelDimensions = E.getMaxLabelDimensions(W, P)), Y !== "colorAxis" && b1) {\n let C1 = this.tickSize("tick");\n d1[S] = Math.max(d1[S], (E.axisTitleMargin || 0) + l1 + c1 * E.offset, u1, P && P.length && C1 ? C1[0] + c1 * E.offset : 0);\n let q1 = !E.axisLine || J.offset ? 0 : E.axisLine.strokeWidth() / 2;\n b1[Z] = Math.max(b1[Z], q1);\n }\n w(this, "afterGetOffset");\n }\n getLinePath(E) {\n let D = this.chart, G = this.opposite, J = this.offset, S = this.horiz, W = this.left + (G ? this.width : 0) + J, P = D.chartHeight - this.bottom - (G ? this.height : 0) + J;\n return G && (E *= -1), D.renderer.crispLine([["M", S ? this.left : W, S ? P : this.top], ["L", S ? D.chartWidth - this.right : W, S ? P : D.chartHeight - this.bottom]], E);\n }\n renderLine() {\n this.axisLine || (this.axisLine = this.chart.renderer.path().addClass("highcharts-axis-line").add(this.axisGroup), this.chart.styledMode || this.axisLine.attr({ stroke: this.options.lineColor, "stroke-width": this.options.lineWidth, zIndex: 7 }));\n }\n getTitlePosition(E) {\n let D = this.horiz, G = this.left, J = this.top, S = this.len, W = this.options.title, P = D ? G : J, Y = this.opposite, Z = this.offset, t1 = W.x, i1 = W.y, n1 = this.chart.renderer.fontMetrics(E), s1 = E ? Math.max(E.getBBox(!1, 0).height - n1.h - 1, 0) : 0, d1 = { low: P + (D ? 0 : S), middle: P + S / 2, high: P + (D ? S : 0) }[W.align], b1 = (D ? J + this.height : G) + (D ? 1 : -1) * (Y ? -1 : 1) * (this.axisTitleMargin || 0) + [-s1, s1, n1.f, -s1][this.side], c1 = { x: D ? d1 + t1 : b1 + (Y ? this.width : 0) + Z + t1, y: D ? b1 + i1 - (Y ? this.height : 0) + Z : d1 + i1 };\n return w(this, "afterGetTitlePosition", { titlePosition: c1 }), c1;\n }\n renderMinorTick(E, D) {\n let G = this.minorTicks;\n G[E] || (G[E] = new d(this, E, "minor")), D && G[E].isNew && G[E].render(null, !0), G[E].render(null, !1, 1);\n }\n renderTick(E, D, G) {\n let J = this.isLinked, S = this.ticks;\n (!J || E >= this.min && E <= this.max || this.grid && this.grid.isColumn) && (S[E] || (S[E] = new d(this, E)), G && S[E].isNew && S[E].render(D, !0, -1), S[E].render(D));\n }\n render() {\n let E, D, G = this, J = G.chart, S = G.logarithmic, W = J.renderer, P = G.options, Y = G.isLinked, Z = G.tickPositions, t1 = G.axisTitle, i1 = G.ticks, n1 = G.minorTicks, s1 = G.alternateBands, d1 = P.stackLabels, b1 = P.alternateGridColor, c1 = P.crossing, a1 = G.tickmarkOffset, l1 = G.axisLine, p1 = G.showAxis, M1 = M(W.globalAnimation);\n if (G.labelEdge.length = 0, G.overlap = !1, [i1, n1, s1].forEach(function(A1) {\n V(A1, function(u1) {\n u1.isActive = !1;\n });\n }), m(c1)) {\n let A1 = this.isXAxis ? J.yAxis[0] : J.xAxis[0], u1 = [1, -1, -1, 1][this.side];\n if (A1) {\n let h1 = A1.toPixels(c1, !0);\n G.horiz && (h1 = A1.len - h1), G.offset = u1 * h1;\n }\n }\n if (G.hasData() || Y) {\n let A1 = G.chart.hasRendered && G.old && m(G.old.min);\n G.minorTickInterval && !G.categories && G.getMinorTickPositions().forEach(function(u1) {\n G.renderMinorTick(u1, A1);\n }), Z.length && (Z.forEach(function(u1, h1) {\n G.renderTick(u1, h1, A1);\n }), a1 && (G.min === 0 || G.single) && (i1[-1] || (i1[-1] = new d(G, -1, null, !0)), i1[-1].render(-1))), b1 && Z.forEach(function(u1, h1) {\n D = Z[h1 + 1] !== void 0 ? Z[h1 + 1] + a1 : G.max - a1, h1 % 2 == 0 && u1 < G.max && D <= G.max + (J.polar ? -a1 : a1) && (s1[u1] || (s1[u1] = new p.PlotLineOrBand(G, {})), E = u1 + a1, s1[u1].options = { from: S ? S.lin2log(E) : E, to: S ? S.lin2log(D) : D, color: b1, className: "highcharts-alternate-grid" }, s1[u1].render(), s1[u1].isActive = !0);\n }), G._addedPlotLB || (G._addedPlotLB = !0, (P.plotLines || []).concat(P.plotBands || []).forEach(function(u1) {\n G.addPlotBandOrLine(u1);\n }));\n }\n [i1, n1, s1].forEach(function(A1) {\n let u1 = [], h1 = M1.duration;\n V(A1, function(C1, q1) {\n C1.isActive || (C1.render(q1, !1, 0), C1.isActive = !1, u1.push(q1));\n }), _(function() {\n let C1 = u1.length;\n for (; C1--; )\n A1[u1[C1]] && !A1[u1[C1]].isActive && (A1[u1[C1]].destroy(), delete A1[u1[C1]]);\n }, A1 !== s1 && J.hasRendered && h1 ? h1 : 0);\n }), l1 && (l1[l1.isPlaced ? "animate" : "attr"]({ d: this.getLinePath(l1.strokeWidth()) }), l1.isPlaced = !0, l1[p1 ? "show" : "hide"](p1)), t1 && p1 && (t1[t1.isNew ? "attr" : "animate"](G.getTitlePosition(t1)), t1.isNew = !1), d1 && d1.enabled && G.stacking && G.stacking.renderStackTotals(), G.old = { len: G.len, max: G.max, min: G.min, transA: G.transA, userMax: G.userMax, userMin: G.userMin }, G.isDirty = !1, w(this, "afterRender");\n }\n redraw() {\n this.visible && (this.render(), this.plotLinesAndBands.forEach(function(E) {\n E.render();\n })), this.series.forEach(function(E) {\n E.isDirty = !0;\n });\n }\n getKeepProps() {\n return this.keepProps || K.keepProps;\n }\n destroy(E) {\n let D = this, G = D.plotLinesAndBands, J = this.eventOptions;\n if (w(this, "destroy", { keepEvents: E }), E || j(D), [D.ticks, D.minorTicks, D.alternateBands].forEach(function(S) {\n B(S);\n }), G) {\n let S = G.length;\n for (; S--; )\n G[S].destroy();\n }\n for (let S in ["axisLine", "axisTitle", "axisGroup", "gridGroup", "labelGroup", "cross", "scrollbar"].forEach(function(W) {\n D[W] && (D[W] = D[W].destroy());\n }), D.plotLinesAndBandsGroups)\n D.plotLinesAndBandsGroups[S] = D.plotLinesAndBandsGroups[S].destroy();\n V(D, function(S, W) {\n D.getKeepProps().indexOf(W) === -1 && delete D[W];\n }), this.eventOptions = J;\n }\n drawCrosshair(E, D) {\n let G = this.crosshair, J = R(G && G.snap, !0), S = this.chart, W, P, Y, Z = this.cross, t1;\n if (w(this, "drawCrosshair", { e: E, point: D }), E || (E = this.cross && this.cross.e), G && (y(D) || !J) !== !1) {\n if (J ? y(D) && (P = R(this.coll !== "colorAxis" ? D.crosshairPos : null, this.isXAxis ? D.plotX : this.len - D.plotY)) : P = E && (this.horiz ? E.chartX - this.pos : this.len - E.chartY + this.pos), y(P) && (t1 = { value: D && (this.isXAxis ? D.x : R(D.stackY, D.y)), translatedValue: P }, S.polar && T(t1, { isCrosshair: !0, chartX: E && E.chartX, chartY: E && E.chartY, point: D }), W = this.getPlotLinePath(t1) || null), !y(W)) {\n this.hideCrosshair();\n return;\n }\n Y = this.categories && !this.isRadial, Z || (this.cross = Z = S.renderer.path().addClass("highcharts-crosshair highcharts-crosshair-" + (Y ? "category " : "thin ") + (G.className || "")).attr({ zIndex: R(G.zIndex, 2) }).add(), !S.styledMode && (Z.attr({ stroke: G.color || (Y ? a.parse("#ccd3ff").setOpacity(0.25).get() : "#cccccc"), "stroke-width": R(G.width, 1) }).css({ "pointer-events": "none" }), G.dashStyle && Z.attr({ dashstyle: G.dashStyle }))), Z.show().attr({ d: W }), Y && !G.width && Z.attr({ "stroke-width": this.transA }), this.cross.e = E;\n } else\n this.hideCrosshair();\n w(this, "afterDrawCrosshair", { e: E, point: D });\n }\n hideCrosshair() {\n this.cross && this.cross.hide(), w(this, "afterHideCrosshair");\n }\n update(E, D) {\n let G = this.chart;\n E = x(this.userOptions, E), this.destroy(!0), this.init(G, E), G.isDirtyBox = !0, R(D, !0) && G.redraw();\n }\n remove(E) {\n let D = this.chart, G = this.coll, J = this.series, S = J.length;\n for (; S--; )\n J[S] && J[S].remove(!1);\n X(D.axes, this), X(D[G] || [], this), D.orderItems(G), this.destroy(), D.isDirtyBox = !0, R(E, !0) && D.redraw();\n }\n setTitle(E, D) {\n this.update({ title: E }, D);\n }\n setCategories(E, D) {\n this.update({ categories: E }, D);\n }\n }\n return K.keepProps = ["coll", "extKey", "hcEvents", "len", "names", "series", "userMax", "userMin"], K;\n }), n(o, "Core/Axis/DateTimeAxis.js", [o["Core/Utilities.js"]], function(r) {\n var i;\n let { addEvent: a, getMagnitude: s, normalizeTickInterval: l, timeUnits: p } = r;\n return function(d) {\n function b() {\n return this.chart.time.getTimeTicks.apply(this.chart.time, arguments);\n }\n function M() {\n if (this.type !== "datetime") {\n this.dateTime = void 0;\n return;\n }\n this.dateTime || (this.dateTime = new u(this));\n }\n d.compose = function(A) {\n return A.keepProps.includes("dateTime") || (A.keepProps.push("dateTime"), A.prototype.getTimeTicks = b, a(A, "afterSetType", M)), A;\n };\n class u {\n constructor(z) {\n this.axis = z;\n }\n normalizeTimeTickInterval(z, f) {\n let O = f || [["millisecond", [1, 2, 5, 10, 20, 25, 50, 100, 200, 500]], ["second", [1, 2, 5, 10, 15, 30]], ["minute", [1, 2, 5, 10, 15, 30]], ["hour", [1, 2, 3, 4, 6, 8, 12]], ["day", [1, 2]], ["week", [1, 2]], ["month", [1, 2, 3, 4, 6]], ["year", null]], h = O[O.length - 1], g = p[h[0]], v = h[1], L;\n for (L = 0; L < O.length && (g = p[(h = O[L])[0]], v = h[1], !O[L + 1] || !(z <= (g * v[v.length - 1] + p[O[L + 1][0]]) / 2)); L++)\n ;\n g === p.year && z < 5 * g && (v = [1, 2, 5]);\n let y = l(z / g, v, h[0] === "year" ? Math.max(s(z / g), 1) : 1);\n return { unitRange: g, count: y, unitName: h[0] };\n }\n getXDateFormat(z, f) {\n let { axis: O } = this, h = O.chart.time;\n return O.closestPointRange ? h.getDateFormat(O.closestPointRange, z, O.options.startOfWeek, f) || h.resolveDTLFormat(f.year).main : h.resolveDTLFormat(f.day).main;\n }\n }\n d.Additions = u;\n }(i || (i = {})), i;\n }), n(o, "Core/Axis/LogarithmicAxis.js", [o["Core/Utilities.js"]], function(r) {\n var i;\n let { addEvent: a, normalizeTickInterval: s, pick: l } = r;\n return function(p) {\n function d() {\n this.type !== "logarithmic" ? this.logarithmic = void 0 : this.logarithmic ?? (this.logarithmic = new M(this));\n }\n function b() {\n let u = this.logarithmic;\n u && (this.lin2val = function(A) {\n return u.lin2log(A);\n }, this.val2lin = function(A) {\n return u.log2lin(A);\n });\n }\n p.compose = function(u) {\n return u.keepProps.includes("logarithmic") || (u.keepProps.push("logarithmic"), a(u, "afterSetType", d), a(u, "afterInit", b)), u;\n };\n class M {\n constructor(A) {\n this.axis = A;\n }\n getLogTickPositions(A, z, f, O) {\n let h = this.axis, g = h.len, v = h.options, L = [];\n if (O || (this.minorAutoInterval = void 0), A >= 0.5)\n A = Math.round(A), L = h.getLinearTickPositions(A, z, f);\n else if (A >= 0.08) {\n let y, B, X, F, T, w, H, C = Math.floor(z);\n for (y = A > 0.3 ? [1, 2, 4] : A > 0.15 ? [1, 2, 4, 6, 8] : [1, 2, 3, 4, 5, 6, 7, 8, 9], B = C; B < f + 1 && !H; B++)\n for (X = 0, F = y.length; X < F && !H; X++)\n (T = this.log2lin(this.lin2log(B) * y[X])) > z && (!O || w <= f) && w !== void 0 && L.push(w), w > f && (H = !0), w = T;\n } else {\n let y = this.lin2log(z), B = this.lin2log(f), X = O ? h.getMinorTickInterval() : v.tickInterval, F = v.tickPixelInterval / (O ? 5 : 1), T = O ? g / h.tickPositions.length : g;\n A = s(A = l(X === "auto" ? null : X, this.minorAutoInterval, (B - y) * F / (T || 1))), L = h.getLinearTickPositions(A, y, B).map(this.log2lin), O || (this.minorAutoInterval = A / 5);\n }\n return O || (h.tickInterval = A), L;\n }\n lin2log(A) {\n return Math.pow(10, A);\n }\n log2lin(A) {\n return Math.log(A) / Math.LN10;\n }\n }\n p.Additions = M;\n }(i || (i = {})), i;\n }), n(o, "Core/Axis/PlotLineOrBand/PlotLineOrBandAxis.js", [o["Core/Utilities.js"]], function(r) {\n var i;\n let { erase: a, extend: s, isNumber: l } = r;\n return function(p) {\n let d;\n function b(h) {\n return this.addPlotBandOrLine(h, "plotBands");\n }\n function M(h, g) {\n let v = this.userOptions, L = new d(this, h);\n if (this.visible && (L = L.render()), L) {\n if (this._addedPlotLB || (this._addedPlotLB = !0, (v.plotLines || []).concat(v.plotBands || []).forEach((y) => {\n this.addPlotBandOrLine(y);\n })), g) {\n let y = v[g] || [];\n y.push(h), v[g] = y;\n }\n this.plotLinesAndBands.push(L);\n }\n return L;\n }\n function u(h) {\n return this.addPlotBandOrLine(h, "plotLines");\n }\n function A(h, g, v) {\n v = v || this.options;\n let L = this.getPlotLinePath({ value: g, force: !0, acrossPanes: v.acrossPanes }), y = [], B = this.horiz, X = !l(this.min) || !l(this.max) || h < this.min && g < this.min || h > this.max && g > this.max, F = this.getPlotLinePath({ value: h, force: !0, acrossPanes: v.acrossPanes }), T, w = 1, H;\n if (F && L)\n for (X && (H = F.toString() === L.toString(), w = 0), T = 0; T < F.length; T += 2) {\n let C = F[T], q = F[T + 1], m = L[T], k = L[T + 1];\n (C[0] === "M" || C[0] === "L") && (q[0] === "M" || q[0] === "L") && (m[0] === "M" || m[0] === "L") && (k[0] === "M" || k[0] === "L") && (B && m[1] === C[1] ? (m[1] += w, k[1] += w) : B || m[2] !== C[2] || (m[2] += w, k[2] += w), y.push(["M", C[1], C[2]], ["L", q[1], q[2]], ["L", k[1], k[2]], ["L", m[1], m[2]], ["Z"])), y.isFlat = H;\n }\n return y;\n }\n function z(h) {\n this.removePlotBandOrLine(h);\n }\n function f(h) {\n let g = this.plotLinesAndBands, v = this.options, L = this.userOptions;\n if (g) {\n let y = g.length;\n for (; y--; )\n g[y].id === h && g[y].destroy();\n [v.plotLines || [], L.plotLines || [], v.plotBands || [], L.plotBands || []].forEach(function(B) {\n for (y = B.length; y--; )\n (B[y] || {}).id === h && a(B, B[y]);\n });\n }\n }\n function O(h) {\n this.removePlotBandOrLine(h);\n }\n p.compose = function(h, g) {\n let v = g.prototype;\n return v.addPlotBand || (d = h, s(v, { addPlotBand: b, addPlotLine: u, addPlotBandOrLine: M, getPlotBandPath: A, removePlotBand: z, removePlotLine: O, removePlotBandOrLine: f })), g;\n };\n }(i || (i = {})), i;\n }), n(o, "Core/Axis/PlotLineOrBand/PlotLineOrBand.js", [o["Core/Axis/PlotLineOrBand/PlotLineOrBandAxis.js"], o["Core/Utilities.js"]], function(r, i) {\n let { addEvent: a, arrayMax: s, arrayMin: l, defined: p, destroyObjectProperties: d, erase: b, fireEvent: M, merge: u, objectEach: A, pick: z } = i;\n class f {\n static compose(h, g) {\n return a(h, "afterInit", function() {\n this.labelCollectors.push(() => {\n var L;\n let v = [];\n for (let y of this.axes)\n for (let { label: B, options: X } of y.plotLinesAndBands)\n B && !((L = X == null ? void 0 : X.label) != null && L.allowOverlap) && v.push(B);\n return v;\n });\n }), r.compose(f, g);\n }\n constructor(h, g) {\n this.axis = h, this.options = g, this.id = g.id;\n }\n render() {\n M(this, "render");\n let { axis: h, options: g } = this, { horiz: v, logarithmic: L } = h, { color: y, events: B, zIndex: X = 0 } = g, F = {}, T = h.chart.renderer, w = g.to, H = g.from, C = g.value, q = g.borderWidth, m = g.label, { label: k, svgElem: x } = this, N = [], V, R = p(H) && p(w), I = p(C), j = !x, U = { class: "highcharts-plot-" + (R ? "band " : "line ") + (g.className || "") }, _ = R ? "bands" : "lines";\n if (!h.chart.styledMode && (I ? (U.stroke = y || "#999999", U["stroke-width"] = z(g.width, 1), g.dashStyle && (U.dashstyle = g.dashStyle)) : R && (U.fill = y || "#e6e9ff", q && (U.stroke = g.borderColor, U["stroke-width"] = q))), F.zIndex = X, _ += "-" + X, (V = h.plotLinesAndBandsGroups[_]) || (h.plotLinesAndBandsGroups[_] = V = T.g("plot-" + _).attr(F).add()), x || (this.svgElem = x = T.path().attr(U).add(V)), p(C))\n N = h.getPlotLinePath({ value: (L == null ? void 0 : L.log2lin(C)) ?? C, lineWidth: x.strokeWidth(), acrossPanes: g.acrossPanes });\n else {\n if (!(p(H) && p(w)))\n return;\n N = h.getPlotBandPath((L == null ? void 0 : L.log2lin(H)) ?? H, (L == null ? void 0 : L.log2lin(w)) ?? w, g);\n }\n return !this.eventsAdded && B && (A(B, (r1, K) => {\n x == null || x.on(K, (Q) => {\n B[K].apply(this, [Q]);\n });\n }), this.eventsAdded = !0), (j || !x.d) && (N != null && N.length) ? x.attr({ d: N }) : x && (N ? (x.show(), x.animate({ d: N })) : x.d && (x.hide(), k && (this.label = k = k.destroy()))), m && (p(m.text) || p(m.formatter)) && (N != null && N.length) && h.width > 0 && h.height > 0 && !N.isFlat ? (m = u({ align: v && R ? "center" : void 0, x: v ? !R && 4 : 10, verticalAlign: !v && R ? "middle" : void 0, y: v ? R ? 16 : 10 : R ? 6 : -4, rotation: v && !R ? 90 : 0, ...R ? { inside: !0 } : {} }, m), this.renderLabel(m, N, R, X)) : k && k.hide(), this;\n }\n renderLabel(h, g, v, L) {\n var m;\n let y = this.axis, B = y.chart.renderer, X = h.inside, F = this.label;\n F || (this.label = F = B.text(this.getLabelText(h), 0, 0, h.useHTML).attr({ align: h.textAlign || h.align, rotation: h.rotation, class: "highcharts-plot-" + (v ? "band" : "line") + "-label " + (h.className || ""), zIndex: L }), y.chart.styledMode || F.css(u({ fontSize: "0.8em", textOverflow: v && !X ? "" : "ellipsis" }, h.style)), F.add());\n let T = g.xBounds || [g[0][1], g[1][1], v ? g[2][1] : g[0][1]], w = g.yBounds || [g[0][2], g[1][2], v ? g[2][2] : g[0][2]], H = l(T), C = l(w), q = s(T) - H;\n F.align(h, !1, { x: H, y: C, width: q, height: s(w) - C }), (!F.alignValue || F.alignValue === "left" || p(X)) && F.css({ width: (((m = h.style) == null ? void 0 : m.width) || (v && X ? q : F.rotation === 90 ? y.height - (F.alignAttr.y - y.top) : (h.clip ? y.width : y.chart.chartWidth) - (F.alignAttr.x - y.left))) + "px" }), F.show(!0);\n }\n getLabelText(h) {\n return p(h.formatter) ? h.formatter.call(this) : h.text;\n }\n destroy() {\n b(this.axis.plotLinesAndBands, this), delete this.axis, d(this);\n }\n }\n return f;\n }), n(o, "Core/Tooltip.js", [o["Core/Animation/AnimationUtilities.js"], o["Core/Templating.js"], o["Core/Globals.js"], o["Core/Renderer/RendererUtilities.js"], o["Core/Renderer/RendererRegistry.js"], o["Core/Utilities.js"]], function(r, i, a, s, l, p) {\n var d;\n let { animObject: b } = r, { format: M } = i, { composed: u, doc: A, isSafari: z } = a, { distribute: f } = s, { addEvent: O, clamp: h, css: g, discardElement: v, extend: L, fireEvent: y, isArray: B, isNumber: X, isString: F, merge: T, pick: w, pushUnique: H, splat: C, syncTimeout: q } = p;\n class m {\n constructor(x, N, V) {\n this.allowShared = !0, this.crosshairs = [], this.distance = 0, this.isHidden = !0, this.isSticky = !1, this.options = {}, this.outside = !1, this.chart = x, this.init(x, N), this.pointer = V;\n }\n bodyFormatter(x) {\n return x.map(function(N) {\n let V = N.series.tooltipOptions;\n return (V[(N.point.formatPrefix || "point") + "Formatter"] || N.point.tooltipFormatter).call(N.point, V[(N.point.formatPrefix || "point") + "Format"] || "");\n });\n }\n cleanSplit(x) {\n this.chart.series.forEach(function(N) {\n let V = N && N.tt;\n V && (!V.isActive || x ? N.tt = V.destroy() : V.isActive = !1);\n });\n }\n defaultFormatter(x) {\n let N, V = this.points || C(this);\n return (N = (N = [x.tooltipFooterHeaderFormatter(V[0])]).concat(x.bodyFormatter(V))).push(x.tooltipFooterHeaderFormatter(V[0], !0)), N;\n }\n destroy() {\n this.label && (this.label = this.label.destroy()), this.split && (this.cleanSplit(!0), this.tt && (this.tt = this.tt.destroy())), this.renderer && (this.renderer = this.renderer.destroy(), v(this.container)), p.clearTimeout(this.hideTimer);\n }\n getAnchor(x, N) {\n let V, { chart: R, pointer: I } = this, j = R.inverted, U = R.plotTop, _ = R.plotLeft;\n if ((x = C(x))[0].series && x[0].series.yAxis && !x[0].series.yAxis.options.reversedStacks && (x = x.slice().reverse()), this.followPointer && N)\n N.chartX === void 0 && (N = I.normalize(N)), V = [N.chartX - _, N.chartY - U];\n else if (x[0].tooltipPos)\n V = x[0].tooltipPos;\n else {\n let r1 = 0, K = 0;\n x.forEach(function(Q) {\n let E = Q.pos(!0);\n E && (r1 += E[0], K += E[1]);\n }), r1 /= x.length, K /= x.length, this.shared && x.length > 1 && N && (j ? r1 = N.chartX : K = N.chartY), V = [r1 - _, K - U];\n }\n return V.map(Math.round);\n }\n getClassName(x, N, V) {\n let R = this.options, I = x.series, j = I.options;\n return [R.className, "highcharts-label", V && "highcharts-tooltip-header", N ? "highcharts-tooltip-box" : "highcharts-tooltip", !V && "highcharts-color-" + w(x.colorIndex, I.colorIndex), j && j.className].filter(F).join(" ");\n }\n getLabel({ anchorX: x, anchorY: N } = { anchorX: 0, anchorY: 0 }) {\n let V = this, R = this.chart.styledMode, I = this.options, j = this.split && this.allowShared, U = this.container, _ = this.chart.renderer;\n if (this.label) {\n let r1 = !this.label.hasClass("highcharts-label");\n (!j && r1 || j && !r1) && this.destroy();\n }\n if (!this.label) {\n if (this.outside) {\n let r1 = this.chart.options.chart.style, K = l.getRendererType();\n this.container = U = a.doc.createElement("div"), U.className = "highcharts-tooltip-container", g(U, { position: "absolute", top: "1px", pointerEvents: "none", zIndex: Math.max(this.options.style.zIndex || 0, (r1 && r1.zIndex || 0) + 3) }), this.renderer = _ = new K(U, 0, 0, r1, void 0, void 0, _.styledMode);\n }\n if (j ? this.label = _.g("tooltip") : (this.label = _.label("", x, N, I.shape, void 0, void 0, I.useHTML, void 0, "tooltip").attr({ padding: I.padding, r: I.borderRadius }), R || this.label.attr({ fill: I.backgroundColor, "stroke-width": I.borderWidth || 0 }).css(I.style).css({ pointerEvents: I.style.pointerEvents || (this.shouldStickOnContact() ? "auto" : "none") })), V.outside) {\n let r1 = this.label;\n [r1.xSetter, r1.ySetter].forEach((K, Q) => {\n r1[Q ? "ySetter" : "xSetter"] = (E) => {\n K.call(r1, V.distance), r1[Q ? "y" : "x"] = E, U && (U.style[Q ? "top" : "left"] = `${E}px`);\n };\n });\n }\n this.label.attr({ zIndex: 8 }).shadow(I.shadow).add();\n }\n return U && !U.parentElement && a.doc.body.appendChild(U), this.label;\n }\n getPlayingField() {\n let { body: x, documentElement: N } = A, { chart: V, distance: R, outside: I } = this;\n return { width: I ? Math.max(x.scrollWidth, N.scrollWidth, x.offsetWidth, N.offsetWidth, N.clientWidth) - 2 * R : V.chartWidth, height: I ? Math.max(x.scrollHeight, N.scrollHeight, x.offsetHeight, N.offsetHeight, N.clientHeight) : V.chartHeight };\n }\n getPosition(x, N, V) {\n var M1, A1;\n let { distance: R, chart: I, outside: j, pointer: U } = this, { inverted: _, plotLeft: r1, plotTop: K, polar: Q } = I, { plotX: E = 0, plotY: D = 0 } = V, G = {}, J = _ && V.h || 0, { height: S, width: W } = this.getPlayingField(), P = U.getChartPosition(), Y = (u1) => u1 * P.scaleX, Z = (u1) => u1 * P.scaleY, t1 = (u1) => {\n let h1 = u1 === "x";\n return [u1, h1 ? W : S, h1 ? x : N].concat(j ? [h1 ? Y(x) : Z(N), h1 ? P.left - R + Y(E + r1) : P.top - R + Z(D + K), 0, h1 ? W : S] : [h1 ? x : N, h1 ? E + r1 : D + K, h1 ? r1 : K, h1 ? r1 + I.plotWidth : K + I.plotHeight]);\n }, i1 = t1("y"), n1 = t1("x"), s1, d1 = !!V.negative;\n !Q && ((A1 = (M1 = I.hoverSeries) == null ? void 0 : M1.yAxis) != null && A1.reversed) && (d1 = !d1);\n let b1 = !this.followPointer && w(V.ttBelow, !Q && !_ === d1), c1 = function(u1, h1, C1, q1, W1, R1, k1) {\n let N1 = j ? u1 === "y" ? Z(R) : Y(R) : R, v1 = (C1 - q1) / 2, S1 = q1 < W1 - R, D1 = W1 + R + q1 < h1, F1 = W1 - N1 - C1 + v1, U1 = W1 + N1 - v1;\n if (b1 && D1)\n G[u1] = U1;\n else if (!b1 && S1)\n G[u1] = F1;\n else if (S1)\n G[u1] = Math.min(k1 - q1, F1 - J < 0 ? F1 : F1 - J);\n else {\n if (!D1)\n return !1;\n G[u1] = Math.max(R1, U1 + J + C1 > h1 ? U1 : U1 + J);\n }\n }, a1 = function(u1, h1, C1, q1, W1) {\n if (W1 < R || W1 > h1 - R)\n return !1;\n W1 < C1 / 2 ? G[u1] = 1 : W1 > h1 - q1 / 2 ? G[u1] = h1 - q1 - 2 : G[u1] = W1 - C1 / 2;\n }, l1 = function(u1) {\n [i1, n1] = [n1, i1], s1 = u1;\n }, p1 = () => {\n c1.apply(0, i1) !== !1 ? a1.apply(0, n1) !== !1 || s1 || (l1(!0), p1()) : s1 ? G.x = G.y = 0 : (l1(!0), p1());\n };\n return (_ && !Q || this.len > 1) && l1(), p1(), G;\n }\n hide(x) {\n let N = this;\n p.clearTimeout(this.hideTimer), x = w(x, this.options.hideDelay), this.isHidden || (this.hideTimer = q(function() {\n let V = N.getLabel();\n N.getLabel().animate({ opacity: 0 }, { duration: x && 150, complete: () => {\n V.hide(), N.container && N.container.remove();\n } }), N.isHidden = !0;\n }, x));\n }\n init(x, N) {\n this.chart = x, this.options = N, this.crosshairs = [], this.isHidden = !0, this.split = N.split && !x.inverted && !x.polar, this.shared = N.shared || this.split, this.outside = w(N.outside, !!(x.scrollablePixelsX || x.scrollablePixelsY));\n }\n shouldStickOnContact(x) {\n return !!(!this.followPointer && this.options.stickOnContact && (!x || this.pointer.inClass(x.target, "highcharts-tooltip")));\n }\n move(x, N, V, R) {\n let I = this, j = b(!I.isHidden && I.options.animation), U = I.followPointer || (I.len || 0) > 1, _ = { x, y: N };\n U || (_.anchorX = V, _.anchorY = R), j.step = () => I.drawTracker(), I.getLabel().animate(_, j);\n }\n refresh(x, N) {\n let { chart: V, options: R, pointer: I, shared: j } = this, U = C(x), _ = U[0], r1 = [], K = R.format, Q = R.formatter || this.defaultFormatter, E = V.styledMode, D = {}, G = this.allowShared;\n if (!R.enabled || !_.series)\n return;\n p.clearTimeout(this.hideTimer), this.allowShared = !(!B(x) && x.series && x.series.noSharedTooltip), G = G && !this.allowShared, this.followPointer = !this.split && _.series.tooltipOptions.followPointer;\n let J = this.getAnchor(x, N), S = J[0], W = J[1];\n j && this.allowShared ? (I.applyInactiveState(U), U.forEach(function(Z) {\n Z.setState("hover"), r1.push(Z.getLabelConfig());\n }), (D = _.getLabelConfig()).points = r1) : D = _.getLabelConfig(), this.len = r1.length;\n let P = F(K) ? M(K, D, V) : Q.call(D, this), Y = _.series;\n if (this.distance = w(Y.tooltipOptions.distance, 16), P === !1)\n this.hide();\n else {\n if (this.split && this.allowShared)\n this.renderSplit(P, U);\n else {\n let Z = S, t1 = W;\n if (N && I.isDirectTouch && (Z = N.chartX - V.plotLeft, t1 = N.chartY - V.plotTop), V.polar || Y.options.clip === !1 || U.some((i1) => I.isDirectTouch || i1.series.shouldShowTooltip(Z, t1))) {\n let i1 = this.getLabel(G && this.tt || {});\n (!R.style.width || E) && i1.css({ width: (this.outside ? this.getPlayingField() : V.spacingBox).width + "px" }), i1.attr({ class: this.getClassName(_), text: P && P.join ? P.join("") : P }), this.outside && i1.attr({ x: h(i1.x || 0, 0, this.getPlayingField().width - (i1.width || 0)) }), E || i1.attr({ stroke: R.borderColor || _.color || Y.color || "#666666" }), this.updatePosition({ plotX: S, plotY: W, negative: _.negative, ttBelow: _.ttBelow, h: J[2] || 0 });\n } else {\n this.hide();\n return;\n }\n }\n this.isHidden && this.label && this.label.attr({ opacity: 1 }).show(), this.isHidden = !1;\n }\n y(this, "refresh");\n }\n renderSplit(x, N) {\n var h1;\n let V = this, { chart: R, chart: { chartWidth: I, chartHeight: j, plotHeight: U, plotLeft: _, plotTop: r1, scrollablePixelsY: K = 0, scrollablePixelsX: Q, styledMode: E }, distance: D, options: G, options: { positioner: J }, pointer: S } = V, { scrollLeft: W = 0, scrollTop: P = 0 } = ((h1 = R.scrollablePlotArea) == null ? void 0 : h1.scrollingContainer) || {}, Y = V.outside && typeof Q != "number" ? A.documentElement.getBoundingClientRect() : { left: W, right: W + I, top: P, bottom: P + j }, Z = V.getLabel(), t1 = this.renderer || R.renderer, i1 = !!(R.xAxis[0] && R.xAxis[0].opposite), { left: n1, top: s1 } = S.getChartPosition(), d1 = r1 + P, b1 = 0, c1 = U - K;\n function a1(C1, q1, W1, R1, k1 = !0) {\n let N1, v1;\n return W1 ? (N1 = i1 ? 0 : c1, v1 = h(C1 - R1 / 2, Y.left, Y.right - R1 - (V.outside ? n1 : 0))) : (N1 = q1 - d1, v1 = h(v1 = k1 ? C1 - R1 - D : C1 + D, k1 ? v1 : Y.left, Y.right)), { x: v1, y: N1 };\n }\n F(x) && (x = [!1, x]);\n let l1 = x.slice(0, N.length + 1).reduce(function(C1, q1, W1) {\n if (q1 !== !1 && q1 !== "") {\n let R1 = N[W1 - 1] || { isHeader: !0, plotX: N[0].plotX, plotY: U, series: {} }, k1 = R1.isHeader, N1 = k1 ? V : R1.series, v1 = N1.tt = function(h0, O0, w1) {\n let g1 = h0, { isHeader: E1, series: B1 } = O0;\n if (!g1) {\n let K1 = { padding: G.padding, r: G.borderRadius };\n E || (K1.fill = G.backgroundColor, K1["stroke-width"] = G.borderWidth ?? 1), g1 = t1.label("", 0, 0, G[E1 ? "headerShape" : "shape"], void 0, void 0, G.useHTML).addClass(V.getClassName(O0, !0, E1)).attr(K1).add(Z);\n }\n return g1.isActive = !0, g1.attr({ text: w1 }), E || g1.css(G.style).attr({ stroke: G.borderColor || O0.color || B1.color || "#333333" }), g1;\n }(N1.tt, R1, q1.toString()), S1 = v1.getBBox(), D1 = S1.width + v1.strokeWidth();\n k1 && (b1 = S1.height, c1 += b1, i1 && (d1 -= b1));\n let { anchorX: F1, anchorY: U1 } = function(h0) {\n let O0, w1, { isHeader: g1, plotX: E1 = 0, plotY: B1 = 0, series: K1 } = h0;\n if (g1)\n O0 = Math.max(_ + E1, _), w1 = r1 + U / 2;\n else {\n let { xAxis: p0, yAxis: e0 } = K1;\n O0 = p0.pos + h(E1, -D, p0.len + D), K1.shouldShowTooltip(0, e0.pos - r1 + B1, { ignoreX: !0 }) && (w1 = e0.pos + B1);\n }\n return { anchorX: O0 = h(O0, Y.left - D, Y.right + D), anchorY: w1 };\n }(R1);\n if (typeof U1 == "number") {\n let h0 = S1.height + 1, O0 = J ? J.call(V, D1, h0, R1) : a1(F1, U1, k1, D1);\n C1.push({ align: J ? 0 : void 0, anchorX: F1, anchorY: U1, boxWidth: D1, point: R1, rank: w(O0.rank, k1 ? 1 : 0), size: h0, target: O0.y, tt: v1, x: O0.x });\n } else\n v1.isActive = !1;\n }\n return C1;\n }, []);\n !J && l1.some((C1) => {\n let { outside: q1 } = V, W1 = (q1 ? n1 : 0) + C1.anchorX;\n return W1 < Y.left && W1 + C1.boxWidth < Y.right || W1 < n1 - Y.left + C1.boxWidth && Y.right - W1 > W1;\n }) && (l1 = l1.map((C1) => {\n let { x: q1, y: W1 } = a1(C1.anchorX, C1.anchorY, C1.point.isHeader, C1.boxWidth, !1);\n return L(C1, { target: W1, x: q1 });\n })), V.cleanSplit(), f(l1, c1);\n let p1 = { left: n1, right: n1 };\n l1.forEach(function(C1) {\n let { x: q1, boxWidth: W1, isHeader: R1 } = C1;\n !R1 && (V.outside && n1 + q1 < p1.left && (p1.left = n1 + q1), !R1 && V.outside && p1.left + W1 > p1.right && (p1.right = n1 + q1));\n }), l1.forEach(function(C1) {\n let { x: q1, anchorX: W1, anchorY: R1, pos: k1, point: { isHeader: N1 } } = C1, v1 = { visibility: k1 === void 0 ? "hidden" : "inherit", x: q1, y: (k1 || 0) + d1, anchorX: W1, anchorY: R1 };\n if (V.outside && q1 < W1) {\n let S1 = n1 - p1.left;\n S1 > 0 && (N1 || (v1.x = q1 + S1, v1.anchorX = W1 + S1), N1 && (v1.x = (p1.right - p1.left) / 2, v1.anchorX = W1 + S1));\n }\n C1.tt.attr(v1);\n });\n let { container: M1, outside: A1, renderer: u1 } = V;\n if (A1 && M1 && u1) {\n let { width: C1, height: q1, x: W1, y: R1 } = Z.getBBox();\n u1.setSize(C1 + W1, q1 + R1, !1), M1.style.left = p1.left + "px", M1.style.top = s1 + "px";\n }\n z && Z.attr({ opacity: Z.opacity === 1 ? 0.999 : 1 });\n }\n drawTracker() {\n if (!this.shouldStickOnContact()) {\n this.tracker && (this.tracker = this.tracker.destroy());\n return;\n }\n let x = this.chart, N = this.label, V = this.shared ? x.hoverPoints : x.hoverPoint;\n if (!N || !V)\n return;\n let R = { x: 0, y: 0, width: 0, height: 0 }, I = this.getAnchor(V), j = N.getBBox();\n I[0] += x.plotLeft - (N.translateX || 0), I[1] += x.plotTop - (N.translateY || 0), R.x = Math.min(0, I[0]), R.y = Math.min(0, I[1]), R.width = I[0] < 0 ? Math.max(Math.abs(I[0]), j.width - I[0]) : Math.max(Math.abs(I[0]), j.width), R.height = I[1] < 0 ? Math.max(Math.abs(I[1]), j.height - Math.abs(I[1])) : Math.max(Math.abs(I[1]), j.height), this.tracker ? this.tracker.attr(R) : (this.tracker = N.renderer.rect(R).addClass("highcharts-tracker").add(N), x.styledMode || this.tracker.attr({ fill: "rgba(0,0,0,0)" }));\n }\n styledModeFormat(x) {\n return x.replace(\'style="font-size: 0.8em"\', \'class="highcharts-header"\').replace(/style="color:{(point|series)\\.color}"/g, \'class="highcharts-color-{$1.colorIndex} {series.options.className} {point.options.className}"\');\n }\n tooltipFooterHeaderFormatter(x, N) {\n let V = x.series, R = V.tooltipOptions, I = V.xAxis, j = I && I.dateTime, U = { isFooter: N, labelConfig: x }, _ = R.xDateFormat, r1 = R[N ? "footerFormat" : "headerFormat"];\n return y(this, "headerFormatter", U, function(K) {\n j && !_ && X(x.key) && (_ = j.getXDateFormat(x.key, R.dateTimeLabelFormats)), j && _ && (x.point && x.point.tooltipDateKeys || ["key"]).forEach(function(Q) {\n r1 = r1.replace("{point." + Q + "}", "{point." + Q + ":" + _ + "}");\n }), V.chart.styledMode && (r1 = this.styledModeFormat(r1)), K.text = M(r1, { point: x, series: V }, this.chart);\n }), U.text;\n }\n update(x) {\n this.destroy(), this.init(this.chart, T(!0, this.options, x));\n }\n updatePosition(x) {\n let { chart: N, container: V, distance: R, options: I, pointer: j, renderer: U } = this, { height: _ = 0, width: r1 = 0 } = this.getLabel(), { left: K, top: Q, scaleX: E, scaleY: D } = j.getChartPosition(), G = (I.positioner || this.getPosition).call(this, r1, _, x), J = (x.plotX || 0) + N.plotLeft, S = (x.plotY || 0) + N.plotTop, W;\n U && V && (I.positioner && (G.x += K - R, G.y += Q - R), W = (I.borderWidth || 0) + 2 * R + 2, U.setSize(r1 + W, _ + W, !1), (E !== 1 || D !== 1) && (g(V, { transform: `scale(${E}, ${D})` }), J *= E, S *= D), J += K - G.x, S += Q - G.y), this.move(Math.round(G.x), Math.round(G.y || 0), J, S);\n }\n }\n return (d = m || (m = {})).compose = function(k) {\n H(u, "Core.Tooltip") && O(k, "afterInit", function() {\n let x = this.chart;\n x.options.tooltip && (x.tooltip = new d(x, x.options.tooltip, this));\n });\n }, m;\n }), n(o, "Core/Series/Point.js", [o["Core/Renderer/HTML/AST.js"], o["Core/Animation/AnimationUtilities.js"], o["Core/Defaults.js"], o["Core/Templating.js"], o["Core/Utilities.js"]], function(r, i, a, s, l) {\n let { animObject: p } = i, { defaultOptions: d } = a, { format: b } = s, { addEvent: M, crisp: u, erase: A, extend: z, fireEvent: f, getNestedProperty: O, isArray: h, isFunction: g, isNumber: v, isObject: L, merge: y, pick: B, syncTimeout: X, removeEvent: F, uniqueKey: T } = l;\n class w {\n animateBeforeDestroy() {\n let C = this, q = { x: C.startXPos, opacity: 0 }, m = C.getGraphicalProps();\n m.singular.forEach(function(k) {\n C[k] = C[k].animate(k === "dataLabel" ? { x: C[k].startXPos, y: C[k].startYPos, opacity: 0 } : q);\n }), m.plural.forEach(function(k) {\n C[k].forEach(function(x) {\n x.element && x.animate(z({ x: C.startXPos }, x.startYPos ? { x: x.startXPos, y: x.startYPos } : {}));\n });\n });\n }\n applyOptions(C, q) {\n let m = this.series, k = m.options.pointValKey || m.pointValKey;\n return z(this, C = w.prototype.optionsToObject.call(this, C)), this.options = this.options ? z(this.options, C) : C, C.group && delete this.group, C.dataLabels && delete this.dataLabels, k && (this.y = w.prototype.getNestedProperty.call(this, k)), this.selected && (this.state = "select"), "name" in this && q === void 0 && m.xAxis && m.xAxis.hasNames && (this.x = m.xAxis.nameToX(this)), this.x === void 0 && m ? this.x = q ?? m.autoIncrement() : v(C.x) && m.options.relativeXValue && (this.x = m.autoIncrement(C.x)), this.isNull = this.isValid && !this.isValid(), this.formatPrefix = this.isNull ? "null" : "point", this;\n }\n destroy() {\n if (!this.destroyed) {\n let C = this, q = C.series, m = q.chart, k = q.options.dataSorting, x = m.hoverPoints, N = p(C.series.chart.renderer.globalAnimation), V = () => {\n for (let R in (C.graphic || C.graphics || C.dataLabel || C.dataLabels) && (F(C), C.destroyElements()), C)\n delete C[R];\n };\n C.legendItem && m.legend.destroyItem(C), x && (C.setState(), A(x, C), x.length || (m.hoverPoints = null)), C === m.hoverPoint && C.onMouseOut(), k && k.enabled ? (this.animateBeforeDestroy(), X(V, N.duration)) : V(), m.pointCount--;\n }\n this.destroyed = !0;\n }\n destroyElements(C) {\n let q = this, m = q.getGraphicalProps(C);\n m.singular.forEach(function(k) {\n q[k] = q[k].destroy();\n }), m.plural.forEach(function(k) {\n q[k].forEach(function(x) {\n x && x.element && x.destroy();\n }), delete q[k];\n });\n }\n firePointEvent(C, q, m) {\n let k = this, x = this.series.options;\n k.manageEvent(C), C === "click" && x.allowPointSelect && (m = function(N) {\n !k.destroyed && k.select && k.select(null, N.ctrlKey || N.metaKey || N.shiftKey);\n }), f(k, C, q, m);\n }\n getClassName() {\n return "highcharts-point" + (this.selected ? " highcharts-point-select" : "") + (this.negative ? " highcharts-negative" : "") + (this.isNull ? " highcharts-null-point" : "") + (this.colorIndex !== void 0 ? " highcharts-color-" + this.colorIndex : "") + (this.options.className ? " " + this.options.className : "") + (this.zone && this.zone.className ? " " + this.zone.className.replace("highcharts-negative", "") : "");\n }\n getGraphicalProps(C) {\n let q, m, k = this, x = [], N = { singular: [], plural: [] };\n for ((C = C || { graphic: 1, dataLabel: 1 }).graphic && x.push("graphic", "connector"), C.dataLabel && x.push("dataLabel", "dataLabelPath", "dataLabelUpper"), m = x.length; m--; )\n k[q = x[m]] && N.singular.push(q);\n return ["graphic", "dataLabel"].forEach(function(V) {\n let R = V + "s";\n C[V] && k[R] && N.plural.push(R);\n }), N;\n }\n getLabelConfig() {\n return { x: this.category, y: this.y, color: this.color, colorIndex: this.colorIndex, key: this.name || this.category, series: this.series, point: this, percentage: this.percentage, total: this.total || this.stackTotal };\n }\n getNestedProperty(C) {\n return C ? C.indexOf("custom.") === 0 ? O(C, this.options) : this[C] : void 0;\n }\n getZone() {\n let C = this.series, q = C.zones, m = C.zoneAxis || "y", k, x = 0;\n for (k = q[0]; this[m] >= k.value; )\n k = q[++x];\n return this.nonZonedColor || (this.nonZonedColor = this.color), k && k.color && !this.options.color ? this.color = k.color : this.color = this.nonZonedColor, k;\n }\n hasNewShapeType() {\n return (this.graphic && (this.graphic.symbolName || this.graphic.element.nodeName)) !== this.shapeType;\n }\n constructor(C, q, m) {\n this.formatPrefix = "point", this.visible = !0, this.series = C, this.applyOptions(q, m), this.id ?? (this.id = T()), this.resolveColor(), C.chart.pointCount++, f(this, "afterInit");\n }\n isValid() {\n return (v(this.x) || this.x instanceof Date) && v(this.y);\n }\n optionsToObject(C) {\n let q = this.series, m = q.options.keys, k = m || q.pointArrayMap || ["y"], x = k.length, N = {}, V, R = 0, I = 0;\n if (v(C) || C === null)\n N[k[0]] = C;\n else if (h(C))\n for (!m && C.length > x && ((V = typeof C[0]) == "string" ? N.name = C[0] : V === "number" && (N.x = C[0]), R++); I < x; )\n m && C[R] === void 0 || (k[I].indexOf(".") > 0 ? w.prototype.setNestedProperty(N, C[R], k[I]) : N[k[I]] = C[R]), R++, I++;\n else\n typeof C == "object" && (N = C, C.dataLabels && (q.hasDataLabels = () => !0), C.marker && (q._hasPointMarkers = !0));\n return N;\n }\n pos(C, q = this.plotY) {\n if (!this.destroyed) {\n let { plotX: m, series: k } = this, { chart: x, xAxis: N, yAxis: V } = k, R = 0, I = 0;\n if (v(m) && v(q))\n return C && (R = N ? N.pos : x.plotLeft, I = V ? V.pos : x.plotTop), x.inverted && N && V ? [V.len - q + I, N.len - m + R] : [m + R, q + I];\n }\n }\n resolveColor() {\n let C = this.series, q = C.chart.options.chart, m = C.chart.styledMode, k, x, N = q.colorCount, V;\n delete this.nonZonedColor, C.options.colorByPoint ? (m || (k = (x = C.options.colors || C.chart.options.colors)[C.colorCounter], N = x.length), V = C.colorCounter, C.colorCounter++, C.colorCounter === N && (C.colorCounter = 0)) : (m || (k = C.color), V = C.colorIndex), this.colorIndex = B(this.options.colorIndex, V), this.color = B(this.options.color, k);\n }\n setNestedProperty(C, q, m) {\n return m.split(".").reduce(function(k, x, N, V) {\n let R = V.length - 1 === N;\n return k[x] = R ? q : L(k[x], !0) ? k[x] : {}, k[x];\n }, C), C;\n }\n shouldDraw() {\n return !this.isNull;\n }\n tooltipFormatter(C) {\n let q = this.series, m = q.tooltipOptions, k = B(m.valueDecimals, ""), x = m.valuePrefix || "", N = m.valueSuffix || "";\n return q.chart.styledMode && (C = q.chart.tooltip.styledModeFormat(C)), (q.pointArrayMap || ["y"]).forEach(function(V) {\n V = "{point." + V, (x || N) && (C = C.replace(RegExp(V + "}", "g"), x + V + "}" + N)), C = C.replace(RegExp(V + "}", "g"), V + ":,." + k + "f}");\n }), b(C, { point: this, series: this.series }, q.chart);\n }\n update(C, q, m, k) {\n let x, N = this, V = N.series, R = N.graphic, I = V.chart, j = V.options;\n function U() {\n N.applyOptions(C);\n let _ = R && N.hasMockGraphic, r1 = N.y === null ? !_ : _;\n R && r1 && (N.graphic = R.destroy(), delete N.hasMockGraphic), L(C, !0) && (R && R.element && C && C.marker && C.marker.symbol !== void 0 && (N.graphic = R.destroy()), C != null && C.dataLabels && N.dataLabel && (N.dataLabel = N.dataLabel.destroy())), x = N.index, V.updateParallelArrays(N, x), j.data[x] = L(j.data[x], !0) || L(C, !0) ? N.options : B(C, j.data[x]), V.isDirty = V.isDirtyData = !0, !V.fixedBox && V.hasCartesianSeries && (I.isDirtyBox = !0), j.legendType === "point" && (I.isDirtyLegend = !0), q && I.redraw(m);\n }\n q = B(q, !0), k === !1 ? U() : N.firePointEvent("update", { options: C }, U);\n }\n remove(C, q) {\n this.series.removePoint(this.series.data.indexOf(this), C, q);\n }\n select(C, q) {\n let m = this, k = m.series, x = k.chart;\n C = B(C, !m.selected), this.selectedStaging = C, m.firePointEvent(C ? "select" : "unselect", { accumulate: q }, function() {\n m.selected = m.options.selected = C, k.options.data[k.data.indexOf(m)] = m.options, m.setState(C && "select"), q || x.getSelectedPoints().forEach(function(N) {\n let V = N.series;\n N.selected && N !== m && (N.selected = N.options.selected = !1, V.options.data[V.data.indexOf(N)] = N.options, N.setState(x.hoverPoints && V.options.inactiveOtherPoints ? "inactive" : ""), N.firePointEvent("unselect"));\n });\n }), delete this.selectedStaging;\n }\n onMouseOver(C) {\n let { inverted: q, pointer: m } = this.series.chart;\n m && (C = C ? m.normalize(C) : m.getChartCoordinatesFromPoint(this, q), m.runPointActions(C, this));\n }\n onMouseOut() {\n let C = this.series.chart;\n this.firePointEvent("mouseOut"), this.series.options.inactiveOtherPoints || (C.hoverPoints || []).forEach(function(q) {\n q.setState();\n }), C.hoverPoints = C.hoverPoint = null;\n }\n manageEvent(C) {\n var k, x, N, V, R, I;\n let q = y(this.series.options.point, this.options), m = (k = q.events) == null ? void 0 : k[C];\n g(m) && (!((x = this.hcEvents) != null && x[C]) || ((V = (N = this.hcEvents) == null ? void 0 : N[C]) == null ? void 0 : V.map((j) => j.fn).indexOf(m)) === -1) ? ((R = this.importedUserEvent) == null || R.call(this), this.importedUserEvent = M(this, C, m)) : this.importedUserEvent && !m && ((I = this.hcEvents) != null && I[C]) && (F(this, C), delete this.hcEvents[C], Object.keys(this.hcEvents) || delete this.importedUserEvent);\n }\n setState(C, q) {\n var P;\n let m = this.series, k = this.state, x = m.options.states[C || "normal"] || {}, N = d.plotOptions[m.type].marker && m.options.marker, V = N && N.enabled === !1, R = N && N.states && N.states[C || "normal"] || {}, I = R.enabled === !1, j = this.marker || {}, U = m.chart, _ = N && m.markerAttribs, r1 = m.halo, K, Q, E, D = m.stateMarkerGraphic, G;\n if ((C = C || "") === this.state && !q || this.selected && C !== "select" || x.enabled === !1 || C && (I || V && R.enabled === !1) || C && j.states && j.states[C] && j.states[C].enabled === !1)\n return;\n if (this.state = C, _ && (K = m.markerAttribs(this, C)), this.graphic && !this.hasMockGraphic) {\n if (k && this.graphic.removeClass("highcharts-point-" + k), C && this.graphic.addClass("highcharts-point-" + C), !U.styledMode) {\n Q = m.pointAttribs(this, C), E = B(U.options.chart.animation, x.animation);\n let Y = Q.opacity;\n m.options.inactiveOtherPoints && v(Y) && (this.dataLabels || []).forEach(function(Z) {\n Z && !Z.hasClass("highcharts-data-label-hidden") && (Z.animate({ opacity: Y }, E), Z.connector && Z.connector.animate({ opacity: Y }, E));\n }), this.graphic.animate(Q, E);\n }\n K && this.graphic.animate(K, B(U.options.chart.animation, R.animation, N.animation)), D && D.hide();\n } else\n C && R && (G = j.symbol || m.symbol, D && D.currentSymbol !== G && (D = D.destroy()), K && (D ? D[q ? "animate" : "attr"]({ x: K.x, y: K.y }) : G && (m.stateMarkerGraphic = D = U.renderer.symbol(G, K.x, K.y, K.width, K.height).add(m.markerGroup), D.currentSymbol = G)), !U.styledMode && D && this.state !== "inactive" && D.attr(m.pointAttribs(this, C))), D && (D[C && this.isInside ? "show" : "hide"](), D.element.point = this, D.addClass(this.getClassName(), !0));\n let J = x.halo, S = this.graphic || D, W = S && S.visibility || "inherit";\n J && J.size && S && W !== "hidden" && !this.isCluster ? (r1 || (m.halo = r1 = U.renderer.path().add(S.parentGroup)), r1.show()[q ? "animate" : "attr"]({ d: this.haloPath(J.size) }), r1.attr({ class: "highcharts-halo highcharts-color-" + B(this.colorIndex, m.colorIndex) + (this.className ? " " + this.className : ""), visibility: W, zIndex: -1 }), r1.point = this, U.styledMode || r1.attr(z({ fill: this.color || m.color, "fill-opacity": J.opacity }, r.filterUserAttributes(J.attributes || {})))) : (P = r1 == null ? void 0 : r1.point) != null && P.haloPath && !r1.point.destroyed && r1.animate({ d: r1.point.haloPath(0) }, null, r1.hide), f(this, "afterSetState", { state: C });\n }\n haloPath(C) {\n let q = this.pos();\n return q ? this.series.chart.renderer.symbols.circle(u(q[0], 1) - C, q[1] - C, 2 * C, 2 * C) : [];\n }\n }\n return w;\n }), n(o, "Core/Pointer.js", [o["Core/Color/Color.js"], o["Core/Globals.js"], o["Core/Utilities.js"]], function(r, i, a) {\n var s;\n let { parse: l } = r, { charts: p, composed: d, isTouchDevice: b } = i, { addEvent: M, attr: u, css: A, extend: z, find: f, fireEvent: O, isNumber: h, isObject: g, objectEach: v, offset: L, pick: y, pushUnique: B, splat: X } = a;\n class F {\n applyInactiveState(w) {\n let H = [], C;\n (w || []).forEach(function(q) {\n C = q.series, H.push(C), C.linkedParent && H.push(C.linkedParent), C.linkedSeries && (H = H.concat(C.linkedSeries)), C.navigatorSeries && H.push(C.navigatorSeries);\n }), this.chart.series.forEach(function(q) {\n H.indexOf(q) === -1 ? q.setState("inactive", !0) : q.options.inactiveOtherPoints && q.setAllPointsToState("inactive");\n });\n }\n destroy() {\n let w = this;\n this.eventsToUnbind.forEach((H) => H()), this.eventsToUnbind = [], !i.chartCount && (F.unbindDocumentMouseUp && F.unbindDocumentMouseUp.forEach((H) => H()), F.unbindDocumentTouchEnd && (F.unbindDocumentTouchEnd = F.unbindDocumentTouchEnd())), clearInterval(w.tooltipTimeout), v(w, function(H, C) {\n w[C] = void 0;\n });\n }\n getSelectionMarkerAttrs(w, H) {\n let C = { args: { chartX: w, chartY: H }, attrs: {}, shapeType: "rect" };\n return O(this, "getSelectionMarkerAttrs", C, (q) => {\n let m, { chart: k, zoomHor: x, zoomVert: N } = this, { mouseDownX: V = 0, mouseDownY: R = 0 } = k, I = q.attrs;\n I.x = k.plotLeft, I.y = k.plotTop, I.width = x ? 1 : k.plotWidth, I.height = N ? 1 : k.plotHeight, x && (m = w - V, I.width = Math.max(1, Math.abs(m)), I.x = (m > 0 ? 0 : m) + V), N && (m = H - R, I.height = Math.max(1, Math.abs(m)), I.y = (m > 0 ? 0 : m) + R);\n }), C;\n }\n drag(w) {\n let { chart: H } = this, { mouseDownX: C = 0, mouseDownY: q = 0 } = H, { panning: m, panKey: k, selectionMarkerFill: x } = H.options.chart, N = H.plotLeft, V = H.plotTop, R = H.plotWidth, I = H.plotHeight, j = g(m) ? m.enabled : m, U = k && w[`${k}Key`], _ = w.chartX, r1 = w.chartY, K, Q = this.selectionMarker;\n if ((!Q || !Q.touch) && (_ < N ? _ = N : _ > N + R && (_ = N + R), r1 < V ? r1 = V : r1 > V + I && (r1 = V + I), this.hasDragged = Math.sqrt(Math.pow(C - _, 2) + Math.pow(q - r1, 2)), this.hasDragged > 10)) {\n K = H.isInsidePlot(C - N, q - V, { visiblePlotOnly: !0 });\n let { shapeType: E, attrs: D } = this.getSelectionMarkerAttrs(_, r1);\n (H.hasCartesianSeries || H.mapView) && this.hasZoom && K && !U && !Q && (this.selectionMarker = Q = H.renderer[E](), Q.attr({ class: "highcharts-selection-marker", zIndex: 7 }).add(), H.styledMode || Q.attr({ fill: x || l("#334eff").setOpacity(0.25).get() })), Q && Q.attr(D), K && !Q && j && H.pan(w, m);\n }\n }\n dragStart(w) {\n let H = this.chart;\n H.mouseIsDown = w.type, H.cancelClick = !1, H.mouseDownX = w.chartX, H.mouseDownY = w.chartY;\n }\n getSelectionBox(w) {\n let H = { args: { marker: w }, result: w.getBBox() };\n return O(this, "getSelectionBox", H), H.result;\n }\n drop(w) {\n let H, { chart: C, selectionMarker: q } = this;\n for (let m of C.axes)\n m.isPanning && (m.isPanning = !1, (m.options.startOnTick || m.options.endOnTick || m.series.some((k) => k.boosted)) && (m.forceRedraw = !0, m.setExtremes(m.userMin, m.userMax, !1), H = !0));\n if (H && C.redraw(), q && w) {\n if (this.hasDragged) {\n let m = this.getSelectionBox(q);\n C.transform({ axes: C.axes.filter((k) => k.zoomEnabled && (k.coll === "xAxis" && this.zoomX || k.coll === "yAxis" && this.zoomY)), selection: { originalEvent: w, xAxis: [], yAxis: [], ...m }, from: m });\n }\n h(C.index) && (this.selectionMarker = q.destroy());\n }\n C && h(C.index) && (A(C.container, { cursor: C._cursor }), C.cancelClick = this.hasDragged > 10, C.mouseIsDown = !1, this.hasDragged = 0, this.pinchDown = []);\n }\n findNearestKDPoint(w, H, C) {\n let q;\n return w.forEach(function(m) {\n let k = !(m.noSharedTooltip && H) && 0 > m.options.findNearestPointBy.indexOf("y"), x = m.searchPoint(C, k);\n g(x, !0) && x.series && (!g(q, !0) || function(N, V) {\n var U, _;\n let R = N.distX - V.distX, I = N.dist - V.dist, j = ((U = V.series.group) == null ? void 0 : U.zIndex) - ((_ = N.series.group) == null ? void 0 : _.zIndex);\n return R !== 0 && H ? R : I !== 0 ? I : j !== 0 ? j : N.series.index > V.series.index ? -1 : 1;\n }(q, x) > 0) && (q = x);\n }), q;\n }\n getChartCoordinatesFromPoint(w, H) {\n let { xAxis: C, yAxis: q } = w.series, m = w.shapeArgs;\n if (C && q) {\n let k = w.clientX ?? w.plotX ?? 0, x = w.plotY || 0;\n return w.isNode && m && h(m.x) && h(m.y) && (k = m.x, x = m.y), H ? { chartX: q.len + q.pos - x, chartY: C.len + C.pos - k } : { chartX: k + C.pos, chartY: x + q.pos };\n }\n if (m && m.x && m.y)\n return { chartX: m.x, chartY: m.y };\n }\n getChartPosition() {\n if (this.chartPosition)\n return this.chartPosition;\n let { container: w } = this.chart, H = L(w);\n this.chartPosition = { left: H.left, top: H.top, scaleX: 1, scaleY: 1 };\n let { offsetHeight: C, offsetWidth: q } = w;\n return q > 2 && C > 2 && (this.chartPosition.scaleX = H.width / q, this.chartPosition.scaleY = H.height / C), this.chartPosition;\n }\n getCoordinates(w) {\n let H = { xAxis: [], yAxis: [] };\n for (let C of this.chart.axes)\n H[C.isXAxis ? "xAxis" : "yAxis"].push({ axis: C, value: C.toValue(w[C.horiz ? "chartX" : "chartY"]) });\n return H;\n }\n getHoverData(w, H, C, q, m, k) {\n let x = [], N = function(U) {\n return U.visible && !(!m && U.directTouch) && y(U.options.enableMouseTracking, !0);\n }, V = H, R, I = { chartX: k ? k.chartX : void 0, chartY: k ? k.chartY : void 0, shared: m };\n O(this, "beforeGetHoverData", I), R = V && !V.stickyTracking ? [V] : C.filter((U) => U.stickyTracking && (I.filter || N)(U));\n let j = q && w || !k ? w : this.findNearestKDPoint(R, m, k);\n return V = j && j.series, j && (m && !V.noSharedTooltip ? (R = C.filter(function(U) {\n return I.filter ? I.filter(U) : N(U) && !U.noSharedTooltip;\n })).forEach(function(U) {\n let _ = f(U.points, function(r1) {\n return r1.x === j.x && !r1.isNull;\n });\n g(_) && (U.boosted && U.boost && (_ = U.boost.getPoint(_)), x.push(_));\n }) : x.push(j)), O(this, "afterGetHoverData", I = { hoverPoint: j }), { hoverPoint: I.hoverPoint, hoverSeries: V, hoverPoints: x };\n }\n getPointFromEvent(w) {\n let H = w.target, C;\n for (; H && !C; )\n C = H.point, H = H.parentNode;\n return C;\n }\n onTrackerMouseOut(w) {\n let H = this.chart, C = w.relatedTarget, q = H.hoverSeries;\n this.isDirectTouch = !1, !q || !C || q.stickyTracking || this.inClass(C, "highcharts-tooltip") || this.inClass(C, "highcharts-series-" + q.index) && this.inClass(C, "highcharts-tracker") || q.onMouseOut();\n }\n inClass(w, H) {\n let C = w, q;\n for (; C; ) {\n if (q = u(C, "class")) {\n if (q.indexOf(H) !== -1)\n return !0;\n if (q.indexOf("highcharts-container") !== -1)\n return !1;\n }\n C = C.parentElement;\n }\n }\n constructor(w, H) {\n var C;\n this.hasDragged = 0, this.pointerCaptureEventsToUnbind = [], this.eventsToUnbind = [], this.options = H, this.chart = w, this.runChartClick = !!((C = H.chart.events) != null && C.click), this.pinchDown = [], this.setDOMEvents(), O(this, "afterInit");\n }\n normalize(w, H) {\n let C = w.touches, q = C ? C.length ? C.item(0) : y(C.changedTouches, w.changedTouches)[0] : w;\n H || (H = this.getChartPosition());\n let m = q.pageX - H.left, k = q.pageY - H.top;\n return z(w, { chartX: Math.round(m /= H.scaleX), chartY: Math.round(k /= H.scaleY) });\n }\n onContainerClick(w) {\n let H = this.chart, C = H.hoverPoint, q = this.normalize(w), m = H.plotLeft, k = H.plotTop;\n !H.cancelClick && (C && this.inClass(q.target, "highcharts-tracker") ? (O(C.series, "click", z(q, { point: C })), H.hoverPoint && C.firePointEvent("click", q)) : (z(q, this.getCoordinates(q)), H.isInsidePlot(q.chartX - m, q.chartY - k, { visiblePlotOnly: !0 }) && O(H, "click", q)));\n }\n onContainerMouseDown(w) {\n var C;\n let H = (1 & (w.buttons || w.button)) == 1;\n w = this.normalize(w), i.isFirefox && w.button !== 0 && this.onContainerMouseMove(w), (w.button === void 0 || H) && (this.zoomOption(w), H && ((C = w.preventDefault) == null || C.call(w)), this.dragStart(w));\n }\n onContainerMouseLeave(w) {\n let { pointer: H } = p[y(F.hoverChartIndex, -1)] || {};\n w = this.normalize(w), this.onContainerMouseMove(w), H && !this.inClass(w.relatedTarget, "highcharts-tooltip") && (H.reset(), H.chartPosition = void 0);\n }\n onContainerMouseEnter() {\n delete this.chartPosition;\n }\n onContainerMouseMove(w) {\n let H = this.chart, C = H.tooltip, q = this.normalize(w);\n this.setHoverChartIndex(w), (H.mouseIsDown === "mousedown" || this.touchSelect(q)) && this.drag(q), !H.openMenu && (this.inClass(q.target, "highcharts-tracker") || H.isInsidePlot(q.chartX - H.plotLeft, q.chartY - H.plotTop, { visiblePlotOnly: !0 })) && !(C && C.shouldStickOnContact(q)) && (this.inClass(q.target, "highcharts-no-tooltip") ? this.reset(!1, 0) : this.runPointActions(q));\n }\n onDocumentTouchEnd(w) {\n this.onDocumentMouseUp(w);\n }\n onContainerTouchMove(w) {\n this.touchSelect(w) ? this.onContainerMouseMove(w) : this.touch(w);\n }\n onContainerTouchStart(w) {\n this.touchSelect(w) ? this.onContainerMouseDown(w) : (this.zoomOption(w), this.touch(w, !0));\n }\n onDocumentMouseMove(w) {\n let H = this.chart, C = H.tooltip, q = this.chartPosition, m = this.normalize(w, q);\n !q || H.isInsidePlot(m.chartX - H.plotLeft, m.chartY - H.plotTop, { visiblePlotOnly: !0 }) || C && C.shouldStickOnContact(m) || m.target !== H.container.ownerDocument && this.inClass(m.target, "highcharts-tracker") || this.reset();\n }\n onDocumentMouseUp(w) {\n var H, C;\n (C = (H = p[y(F.hoverChartIndex, -1)]) == null ? void 0 : H.pointer) == null || C.drop(w);\n }\n pinch(w) {\n let H = this, { chart: C, hasZoom: q, lastTouches: m } = H, k = [].map.call(w.touches || [], (I) => H.normalize(I)), x = k.length, N = x === 1 && (H.inClass(w.target, "highcharts-tracker") && C.runTrackerClick || H.runChartClick), V = C.tooltip, R = x === 1 && y(V == null ? void 0 : V.options.followTouchMove, !0);\n x > 1 ? H.initiated = !0 : R && (H.initiated = !1), q && H.initiated && !N && w.cancelable !== !1 && w.preventDefault(), w.type === "touchstart" ? (H.pinchDown = k, H.res = !0, C.mouseDownX = w.chartX) : R ? this.runPointActions(H.normalize(w)) : m && (O(C, "touchpan", { originalEvent: w, touches: k }, () => {\n let I = (j) => {\n let U = j[0], _ = j[1] || U;\n return { x: U.chartX, y: U.chartY, width: _.chartX - U.chartX, height: _.chartY - U.chartY };\n };\n C.transform({ axes: C.axes.filter((j) => j.zoomEnabled && (this.zoomHor && j.horiz || this.zoomVert && !j.horiz)), to: I(k), from: I(m), trigger: w.type });\n }), H.res && (H.res = !1, this.reset(!1, 0))), H.lastTouches = k;\n }\n reset(w, H) {\n let C = this.chart, q = C.hoverSeries, m = C.hoverPoint, k = C.hoverPoints, x = C.tooltip, N = x && x.shared ? k : m;\n w && N && X(N).forEach(function(V) {\n V.series.isCartesian && V.plotX === void 0 && (w = !1);\n }), w ? x && N && X(N).length && (x.refresh(N), x.shared && k ? k.forEach(function(V) {\n V.setState(V.state, !0), V.series.isCartesian && (V.series.xAxis.crosshair && V.series.xAxis.drawCrosshair(null, V), V.series.yAxis.crosshair && V.series.yAxis.drawCrosshair(null, V));\n }) : m && (m.setState(m.state, !0), C.axes.forEach(function(V) {\n V.crosshair && m.series[V.coll] === V && V.drawCrosshair(null, m);\n }))) : (m && m.onMouseOut(), k && k.forEach(function(V) {\n V.setState();\n }), q && q.onMouseOut(), x && x.hide(H), this.unDocMouseMove && (this.unDocMouseMove = this.unDocMouseMove()), C.axes.forEach(function(V) {\n V.hideCrosshair();\n }), C.hoverPoints = C.hoverPoint = void 0);\n }\n runPointActions(w, H, C) {\n let q = this.chart, m = q.series, k = q.tooltip && q.tooltip.options.enabled ? q.tooltip : void 0, x = !!k && k.shared, N = H || q.hoverPoint, V = N && N.series || q.hoverSeries, R = (!w || w.type !== "touchmove") && (!!H || V && V.directTouch && this.isDirectTouch), I = this.getHoverData(N, V, m, R, x, w);\n N = I.hoverPoint, V = I.hoverSeries;\n let j = I.hoverPoints, U = V && V.tooltipOptions.followPointer && !V.tooltipOptions.split, _ = x && V && !V.noSharedTooltip;\n if (N && (C || N !== q.hoverPoint || k && k.isHidden)) {\n if ((q.hoverPoints || []).forEach(function(r1) {\n j.indexOf(r1) === -1 && r1.setState();\n }), q.hoverSeries !== V && V.onMouseOver(), this.applyInactiveState(j), (j || []).forEach(function(r1) {\n r1.setState("hover");\n }), q.hoverPoint && q.hoverPoint.firePointEvent("mouseOut"), !N.series)\n return;\n q.hoverPoints = j, q.hoverPoint = N, N.firePointEvent("mouseOver", void 0, () => {\n k && N && k.refresh(_ ? j : N, w);\n });\n } else if (U && k && !k.isHidden) {\n let r1 = k.getAnchor([{}], w);\n q.isInsidePlot(r1[0], r1[1], { visiblePlotOnly: !0 }) && k.updatePosition({ plotX: r1[0], plotY: r1[1] });\n }\n this.unDocMouseMove || (this.unDocMouseMove = M(q.container.ownerDocument, "mousemove", (r1) => {\n var K, Q;\n return (Q = (K = p[F.hoverChartIndex ?? -1]) == null ? void 0 : K.pointer) == null ? void 0 : Q.onDocumentMouseMove(r1);\n }), this.eventsToUnbind.push(this.unDocMouseMove)), q.axes.forEach(function(r1) {\n let K, Q = y((r1.crosshair || {}).snap, !0);\n !Q || (K = q.hoverPoint) && K.series[r1.coll] === r1 || (K = f(j, (E) => E.series && E.series[r1.coll] === r1)), K || !Q ? r1.drawCrosshair(w, K) : r1.hideCrosshair();\n });\n }\n setDOMEvents() {\n let w = this.chart.container, H = w.ownerDocument;\n w.onmousedown = this.onContainerMouseDown.bind(this), w.onmousemove = this.onContainerMouseMove.bind(this), w.onclick = this.onContainerClick.bind(this), this.eventsToUnbind.push(M(w, "mouseenter", this.onContainerMouseEnter.bind(this)), M(w, "mouseleave", this.onContainerMouseLeave.bind(this))), F.unbindDocumentMouseUp || (F.unbindDocumentMouseUp = []), F.unbindDocumentMouseUp.push(M(H, "mouseup", this.onDocumentMouseUp.bind(this)));\n let C = this.chart.renderTo.parentElement;\n for (; C && C.tagName !== "BODY"; )\n this.eventsToUnbind.push(M(C, "scroll", () => {\n delete this.chartPosition;\n })), C = C.parentElement;\n this.eventsToUnbind.push(M(w, "touchstart", this.onContainerTouchStart.bind(this), { passive: !1 }), M(w, "touchmove", this.onContainerTouchMove.bind(this), { passive: !1 })), F.unbindDocumentTouchEnd || (F.unbindDocumentTouchEnd = M(H, "touchend", this.onDocumentTouchEnd.bind(this), { passive: !1 })), this.setPointerCapture(), M(this.chart, "redraw", this.setPointerCapture.bind(this));\n }\n setPointerCapture() {\n var m, k;\n if (!b)\n return;\n let w = this.pointerCaptureEventsToUnbind, H = this.chart, C = H.container, q = y((m = H.options.tooltip) == null ? void 0 : m.followTouchMove, !0) && H.series.some((x) => x.options.findNearestPointBy.indexOf("y") > -1);\n !this.hasPointerCapture && q ? (w.push(M(C, "pointerdown", (x) => {\n var N, V;\n (N = x.target) != null && N.hasPointerCapture(x.pointerId) && ((V = x.target) == null || V.releasePointerCapture(x.pointerId));\n }), M(C, "pointermove", (x) => {\n var N, V;\n (V = (N = H.pointer) == null ? void 0 : N.getPointFromEvent(x)) == null || V.onMouseOver(x);\n })), H.styledMode || A(C, { "touch-action": "none" }), C.className += " highcharts-no-touch-action", this.hasPointerCapture = !0) : this.hasPointerCapture && !q && (w.forEach((x) => x()), w.length = 0, H.styledMode || A(C, { "touch-action": y((k = H.options.chart.style) == null ? void 0 : k["touch-action"], "manipulation") }), C.className = C.className.replace(" highcharts-no-touch-action", ""), this.hasPointerCapture = !1);\n }\n setHoverChartIndex(w) {\n var q;\n let H = this.chart, C = i.charts[y(F.hoverChartIndex, -1)];\n if (C && C !== H) {\n let m = { relatedTarget: H.container };\n w && !(w != null && w.relatedTarget) && (w = { ...m, ...w }), (q = C.pointer) == null || q.onContainerMouseLeave(w || m);\n }\n C && C.mouseIsDown || (F.hoverChartIndex = H.index);\n }\n touch(w, H) {\n let C, { chart: q, pinchDown: m = [] } = this;\n this.setHoverChartIndex(), (w = this.normalize(w)).touches.length === 1 ? q.isInsidePlot(w.chartX - q.plotLeft, w.chartY - q.plotTop, { visiblePlotOnly: !0 }) && !q.openMenu ? (H && this.runPointActions(w), w.type === "touchmove" && (C = !!m[0] && Math.pow(m[0].chartX - w.chartX, 2) + Math.pow(m[0].chartY - w.chartY, 2) >= 16), y(C, !0) && this.pinch(w)) : H && this.reset() : w.touches.length === 2 && this.pinch(w);\n }\n touchSelect(w) {\n return !!(this.chart.zooming.singleTouch && w.touches && w.touches.length === 1);\n }\n zoomOption(w) {\n let H = this.chart, C = H.inverted, q = H.zooming.type || "", m, k;\n /touch/.test(w.type) && (q = y(H.zooming.pinchType, q)), this.zoomX = m = /x/.test(q), this.zoomY = k = /y/.test(q), this.zoomHor = m && !C || k && C, this.zoomVert = k && !C || m && C, this.hasZoom = m || k;\n }\n }\n return (s = F || (F = {})).compose = function(T) {\n B(d, "Core.Pointer") && M(T, "beforeRender", function() {\n this.pointer = new s(this, this.options);\n });\n }, F;\n }), n(o, "Core/Legend/LegendSymbol.js", [o["Core/Utilities.js"]], function(r) {\n var i;\n let { extend: a, merge: s, pick: l } = r;\n return function(p) {\n function d(b, M, u) {\n var C, q;\n let A = this.legendItem = this.legendItem || {}, { chart: z, options: f } = this, { baseline: O = 0, symbolWidth: h, symbolHeight: g } = b, v = this.symbol || "circle", L = g / 2, y = z.renderer, B = A.group, X = O - Math.round((((C = b.fontMetrics) == null ? void 0 : C.b) || g) * (u ? 0.4 : 0.3)), F = {}, T, w = f.marker, H = 0;\n if (z.styledMode || (F["stroke-width"] = Math.min(f.lineWidth || 0, 24), f.dashStyle ? F.dashstyle = f.dashStyle : f.linecap === "square" || (F["stroke-linecap"] = "round")), A.line = y.path().addClass("highcharts-graph").attr(F).add(B), u && (A.area = y.path().addClass("highcharts-area").add(B)), F["stroke-linecap"] && (H = Math.min(A.line.strokeWidth(), h) / 2), h) {\n let m = [["M", H, X], ["L", h - H, X]];\n A.line.attr({ d: m }), (q = A.area) == null || q.attr({ d: [...m, ["L", h - H, O], ["L", H, O]] });\n }\n if (w && w.enabled !== !1 && h) {\n let m = Math.min(l(w.radius, L), L);\n v.indexOf("url") === 0 && (w = s(w, { width: g, height: g }), m = 0), A.symbol = T = y.symbol(v, h / 2 - m, X - m, 2 * m, 2 * m, a({ context: "legend" }, w)).addClass("highcharts-point").add(B), T.isMarker = !0;\n }\n }\n p.areaMarker = function(b, M) {\n d.call(this, b, M, !0);\n }, p.lineMarker = d, p.rectangle = function(b, M) {\n let u = M.legendItem || {}, A = b.options, z = b.symbolHeight, f = A.squareSymbol, O = f ? z : b.symbolWidth;\n u.symbol = this.chart.renderer.rect(f ? (b.symbolWidth - z) / 2 : 0, b.baseline - z + 1, O, z, l(b.options.symbolRadius, z / 2)).addClass("highcharts-point").attr({ zIndex: 3 }).add(u.group);\n };\n }(i || (i = {})), i;\n }), n(o, "Core/Series/SeriesDefaults.js", [], function() {\n return { lineWidth: 2, allowPointSelect: !1, crisp: !0, showCheckbox: !1, animation: { duration: 1e3 }, enableMouseTracking: !0, events: {}, marker: { enabledThreshold: 2, lineColor: "#ffffff", lineWidth: 0, radius: 4, states: { normal: { animation: !0 }, hover: { animation: { duration: 150 }, enabled: !0, radiusPlus: 2, lineWidthPlus: 1 }, select: { fillColor: "#cccccc", lineColor: "#000000", lineWidth: 2 } } }, point: { events: {} }, dataLabels: { animation: {}, align: "center", borderWidth: 0, defer: !0, formatter: function() {\n let { numberFormatter: r } = this.series.chart;\n return typeof this.y != "number" ? "" : r(this.y, -1);\n }, padding: 5, style: { fontSize: "0.7em", fontWeight: "bold", color: "contrast", textOutline: "1px contrast" }, verticalAlign: "bottom", x: 0, y: 0 }, cropThreshold: 300, opacity: 1, pointRange: 0, softThreshold: !0, states: { normal: { animation: !0 }, hover: { animation: { duration: 150 }, lineWidthPlus: 1, marker: {}, halo: { size: 10, opacity: 0.25 } }, select: { animation: { duration: 0 } }, inactive: { animation: { duration: 150 }, opacity: 0.2 } }, stickyTracking: !0, turboThreshold: 1e3, findNearestPointBy: "x" };\n }), n(o, "Core/Series/SeriesRegistry.js", [o["Core/Globals.js"], o["Core/Defaults.js"], o["Core/Series/Point.js"], o["Core/Utilities.js"]], function(r, i, a, s) {\n var l;\n let { defaultOptions: p } = i, { extend: d, extendClass: b, merge: M } = s;\n return function(u) {\n function A(z, f) {\n let O = p.plotOptions || {}, h = f.defaultOptions, g = f.prototype;\n return g.type = z, g.pointClass || (g.pointClass = a), !u.seriesTypes[z] && (h && (O[z] = h), u.seriesTypes[z] = f, !0);\n }\n u.seriesTypes = r.seriesTypes, u.registerSeriesType = A, u.seriesType = function(z, f, O, h, g) {\n let v = p.plotOptions || {};\n if (f = f || "", v[z] = M(v[f], O), delete u.seriesTypes[z], A(z, b(u.seriesTypes[f] || function() {\n }, h)), u.seriesTypes[z].prototype.type = z, g) {\n class L extends a {\n }\n d(L.prototype, g), u.seriesTypes[z].prototype.pointClass = L;\n }\n return u.seriesTypes[z];\n };\n }(l || (l = {})), l;\n }), n(o, "Core/Series/Series.js", [o["Core/Animation/AnimationUtilities.js"], o["Core/Defaults.js"], o["Core/Foundation.js"], o["Core/Globals.js"], o["Core/Legend/LegendSymbol.js"], o["Core/Series/Point.js"], o["Core/Series/SeriesDefaults.js"], o["Core/Series/SeriesRegistry.js"], o["Core/Renderer/SVG/SVGElement.js"], o["Core/Utilities.js"]], function(r, i, a, s, l, p, d, b, M, u) {\n let { animObject: A, setAnimation: z } = r, { defaultOptions: f } = i, { registerEventOptions: O } = a, { svg: h, win: g } = s, { seriesTypes: v } = b, { arrayMax: L, arrayMin: y, clamp: B, correctFloat: X, crisp: F, defined: T, destroyObjectProperties: w, diffObjects: H, erase: C, error: q, extend: m, find: k, fireEvent: x, getClosestDistance: N, getNestedProperty: V, insertItem: R, isArray: I, isNumber: j, isString: U, merge: _, objectEach: r1, pick: K, removeEvent: Q, splat: E, syncTimeout: D } = u;\n class G {\n constructor() {\n this.zoneAxis = "y";\n }\n init(S, W) {\n let P;\n x(this, "init", { options: W });\n let Y = this, Z = S.series;\n this.eventsToUnbind = [], Y.chart = S, Y.options = Y.setOptions(W);\n let t1 = Y.options, i1 = t1.visible !== !1;\n Y.linkedSeries = [], Y.bindAxes(), m(Y, { name: t1.name, state: "", visible: i1, selected: t1.selected === !0 }), O(this, t1);\n let n1 = t1.events;\n (n1 && n1.click || t1.point && t1.point.events && t1.point.events.click || t1.allowPointSelect) && (S.runTrackerClick = !0), Y.getColor(), Y.getSymbol(), Y.parallelArrays.forEach(function(s1) {\n Y[s1 + "Data"] || (Y[s1 + "Data"] = []);\n }), Y.isCartesian && (S.hasCartesianSeries = !0), Z.length && (P = Z[Z.length - 1]), Y._i = K(P && P._i, -1) + 1, Y.opacity = Y.options.opacity, S.orderItems("series", R(this, Z)), t1.dataSorting && t1.dataSorting.enabled ? Y.setDataSortingOptions() : Y.points || Y.data || Y.setData(t1.data, !1), x(this, "afterInit");\n }\n is(S) {\n return v[S] && this instanceof v[S];\n }\n bindAxes() {\n let S, W = this, P = W.options, Y = W.chart;\n x(this, "bindAxes", null, function() {\n (W.axisTypes || []).forEach(function(Z) {\n (Y[Z] || []).forEach(function(t1) {\n S = t1.options, (K(P[Z], 0) === t1.index || P[Z] !== void 0 && P[Z] === S.id) && (R(W, t1.series), W[Z] = t1, t1.isDirty = !0);\n }), W[Z] || W.optionalAxis === Z || q(18, !0, Y);\n });\n }), x(this, "afterBindAxes");\n }\n updateParallelArrays(S, W, P) {\n let Y = S.series, Z = j(W) ? function(t1) {\n let i1 = t1 === "y" && Y.toYData ? Y.toYData(S) : S[t1];\n Y[t1 + "Data"][W] = i1;\n } : function(t1) {\n Array.prototype[W].apply(Y[t1 + "Data"], P);\n };\n Y.parallelArrays.forEach(Z);\n }\n hasData() {\n return this.visible && this.dataMax !== void 0 && this.dataMin !== void 0 || this.visible && this.yData && this.yData.length > 0;\n }\n hasMarkerChanged(S, W) {\n let P = S.marker, Y = W.marker || {};\n return P && (Y.enabled && !P.enabled || Y.symbol !== P.symbol || Y.height !== P.height || Y.width !== P.width);\n }\n autoIncrement(S) {\n let W = this.options, P = W.pointIntervalUnit, Y = W.relativeXValue, Z = this.chart.time, t1 = this.xIncrement, i1, n1;\n return t1 = K(t1, W.pointStart, 0), this.pointInterval = n1 = K(this.pointInterval, W.pointInterval, 1), Y && j(S) && (n1 *= S), P && (i1 = new Z.Date(t1), P === "day" ? Z.set("Date", i1, Z.get("Date", i1) + n1) : P === "month" ? Z.set("Month", i1, Z.get("Month", i1) + n1) : P === "year" && Z.set("FullYear", i1, Z.get("FullYear", i1) + n1), n1 = i1.getTime() - t1), Y && j(S) ? t1 + n1 : (this.xIncrement = t1 + n1, t1);\n }\n setDataSortingOptions() {\n let S = this.options;\n m(this, { requireSorting: !1, sorted: !1, enabledDataSorting: !0, allowDG: !1 }), T(S.pointRange) || (S.pointRange = 1);\n }\n setOptions(S) {\n var M1, A1;\n let W, P = this.chart, Y = P.options.plotOptions, Z = P.userOptions || {}, t1 = _(S), i1 = P.styledMode, n1 = { plotOptions: Y, userOptions: t1 };\n x(this, "setOptions", n1);\n let s1 = n1.plotOptions[this.type], d1 = Z.plotOptions || {}, b1 = d1.series || {}, c1 = f.plotOptions[this.type] || {}, a1 = d1[this.type] || {};\n this.userOptions = n1.userOptions;\n let l1 = _(s1, Y.series, a1, t1);\n this.tooltipOptions = _(f.tooltip, (M1 = f.plotOptions.series) == null ? void 0 : M1.tooltip, c1 == null ? void 0 : c1.tooltip, P.userOptions.tooltip, (A1 = d1.series) == null ? void 0 : A1.tooltip, a1.tooltip, t1.tooltip), this.stickyTracking = K(t1.stickyTracking, a1.stickyTracking, b1.stickyTracking, !!this.tooltipOptions.shared && !this.noSharedTooltip || l1.stickyTracking), s1.marker === null && delete l1.marker, this.zoneAxis = l1.zoneAxis || "y";\n let p1 = this.zones = (l1.zones || []).map((u1) => ({ ...u1 }));\n return (l1.negativeColor || l1.negativeFillColor) && !l1.zones && (W = { value: l1[this.zoneAxis + "Threshold"] || l1.threshold || 0, className: "highcharts-negative" }, i1 || (W.color = l1.negativeColor, W.fillColor = l1.negativeFillColor), p1.push(W)), p1.length && T(p1[p1.length - 1].value) && p1.push(i1 ? {} : { color: this.color, fillColor: this.fillColor }), x(this, "afterSetOptions", { options: l1 }), l1;\n }\n getName() {\n return K(this.options.name, "Series " + (this.index + 1));\n }\n getCyclic(S, W, P) {\n let Y, Z, t1 = this.chart, i1 = `${S}Index`, n1 = `${S}Counter`, s1 = (P == null ? void 0 : P.length) || t1.options.chart.colorCount;\n !W && (T(Z = K(S === "color" ? this.options.colorIndex : void 0, this[i1])) ? Y = Z : (t1.series.length || (t1[n1] = 0), Y = t1[n1] % s1, t1[n1] += 1), P && (W = P[Y])), Y !== void 0 && (this[i1] = Y), this[S] = W;\n }\n getColor() {\n this.chart.styledMode ? this.getCyclic("color") : this.options.colorByPoint ? this.color = "#cccccc" : this.getCyclic("color", this.options.color || f.plotOptions[this.type].color, this.chart.options.colors);\n }\n getPointsCollection() {\n return (this.hasGroupedData ? this.points : this.data) || [];\n }\n getSymbol() {\n let S = this.options.marker;\n this.getCyclic("symbol", S.symbol, this.chart.options.symbols);\n }\n findPointIndex(S, W) {\n let P, Y, Z, t1 = S.id, i1 = S.x, n1 = this.points, s1 = this.options.dataSorting;\n if (t1) {\n let d1 = this.chart.get(t1);\n d1 instanceof p && (P = d1);\n } else if (this.linkedParent || this.enabledDataSorting || this.options.relativeXValue) {\n let d1 = (b1) => !b1.touched && b1.index === S.index;\n if (s1 && s1.matchByName ? d1 = (b1) => !b1.touched && b1.name === S.name : this.options.relativeXValue && (d1 = (b1) => !b1.touched && b1.options.x === S.x), !(P = k(n1, d1)))\n return;\n }\n return P && (Z = P && P.index) !== void 0 && (Y = !0), Z === void 0 && j(i1) && (Z = this.xData.indexOf(i1, W)), Z !== -1 && Z !== void 0 && this.cropped && (Z = Z >= this.cropStart ? Z - this.cropStart : Z), !Y && j(Z) && n1[Z] && n1[Z].touched && (Z = void 0), Z;\n }\n updateData(S, W) {\n let P = this.options, Y = P.dataSorting, Z = this.points, t1 = [], i1 = this.requireSorting, n1 = S.length === Z.length, s1, d1, b1, c1, a1 = !0;\n if (this.xIncrement = null, S.forEach(function(l1, p1) {\n let M1, A1 = T(l1) && this.pointClass.prototype.optionsToObject.call({ series: this }, l1) || {}, u1 = A1.x;\n A1.id || j(u1) ? ((M1 = this.findPointIndex(A1, c1)) === -1 || M1 === void 0 ? t1.push(l1) : Z[M1] && l1 !== P.data[M1] ? (Z[M1].update(l1, !1, null, !1), Z[M1].touched = !0, i1 && (c1 = M1 + 1)) : Z[M1] && (Z[M1].touched = !0), (!n1 || p1 !== M1 || Y && Y.enabled || this.hasDerivedData) && (s1 = !0)) : t1.push(l1);\n }, this), s1)\n for (d1 = Z.length; d1--; )\n (b1 = Z[d1]) && !b1.touched && b1.remove && b1.remove(!1, W);\n else\n !n1 || Y && Y.enabled ? a1 = !1 : (S.forEach(function(l1, p1) {\n l1 === Z[p1].y || Z[p1].destroyed || Z[p1].update(l1, !1, null, !1);\n }), t1.length = 0);\n return Z.forEach(function(l1) {\n l1 && (l1.touched = !1);\n }), !!a1 && (t1.forEach(function(l1) {\n this.addPoint(l1, !1, null, null, !1);\n }, this), this.xIncrement === null && this.xData && this.xData.length && (this.xIncrement = L(this.xData), this.autoIncrement()), !0);\n }\n setData(S, W = !0, P, Y) {\n var N1;\n let Z = this, t1 = Z.points, i1 = t1 && t1.length || 0, n1 = Z.options, s1 = Z.chart, d1 = n1.dataSorting, b1 = Z.xAxis, c1 = n1.turboThreshold, a1 = this.xData, l1 = this.yData, p1 = Z.pointArrayMap, M1 = p1 && p1.length, A1 = n1.keys, u1, h1, C1, q1 = 0, W1 = 1, R1;\n s1.options.chart.allowMutatingData || (n1.data && delete Z.options.data, Z.userOptions.data && delete Z.userOptions.data, R1 = _(!0, S));\n let k1 = (S = R1 || S || []).length;\n if (d1 && d1.enabled && (S = this.sortData(S)), s1.options.chart.allowMutatingData && Y !== !1 && k1 && i1 && !Z.cropped && !Z.hasGroupedData && Z.visible && !Z.boosted && (C1 = this.updateData(S, P)), !C1) {\n Z.xIncrement = null, Z.colorCounter = 0, this.parallelArrays.forEach(function(S1) {\n Z[S1 + "Data"].length = 0;\n });\n let v1 = c1 && k1 > c1;\n if (v1) {\n let S1 = Z.getFirstValidPoint(S), D1 = Z.getFirstValidPoint(S, k1 - 1, -1), F1 = (U1) => !!(I(U1) && (A1 || j(U1[0])));\n if (j(S1) && j(D1))\n for (u1 = 0; u1 < k1; u1++)\n a1[u1] = this.autoIncrement(), l1[u1] = S[u1];\n else if (F1(S1) && F1(D1))\n if (M1)\n if (S1.length === M1)\n for (u1 = 0; u1 < k1; u1++)\n a1[u1] = this.autoIncrement(), l1[u1] = S[u1];\n else\n for (u1 = 0; u1 < k1; u1++)\n h1 = S[u1], a1[u1] = h1[0], l1[u1] = h1.slice(1, M1 + 1);\n else if (A1 && (q1 = A1.indexOf("x"), W1 = A1.indexOf("y"), q1 = q1 >= 0 ? q1 : 0, W1 = W1 >= 0 ? W1 : 1), S1.length === 1 && (W1 = 0), q1 === W1)\n for (u1 = 0; u1 < k1; u1++)\n a1[u1] = this.autoIncrement(), l1[u1] = S[u1][W1];\n else\n for (u1 = 0; u1 < k1; u1++)\n h1 = S[u1], a1[u1] = h1[q1], l1[u1] = h1[W1];\n else\n v1 = !1;\n }\n if (!v1)\n for (u1 = 0; u1 < k1; u1++)\n h1 = { series: Z }, Z.pointClass.prototype.applyOptions.apply(h1, [S[u1]]), Z.updateParallelArrays(h1, u1);\n for (l1 && U(l1[0]) && q(14, !0, s1), Z.data = [], Z.options.data = Z.userOptions.data = S, u1 = i1; u1--; )\n (N1 = t1[u1]) == null || N1.destroy();\n b1 && (b1.minRange = b1.userMinRange), Z.isDirty = s1.isDirtyBox = !0, Z.isDirtyData = !!t1, P = !1;\n }\n n1.legendType === "point" && (this.processData(), this.generatePoints()), W && s1.redraw(P);\n }\n sortData(S) {\n let W = this, P = W.options.dataSorting.sortKey || "y", Y = function(Z, t1) {\n return T(t1) && Z.pointClass.prototype.optionsToObject.call({ series: Z }, t1) || {};\n };\n return S.forEach(function(Z, t1) {\n S[t1] = Y(W, Z), S[t1].index = t1;\n }, this), S.concat().sort((Z, t1) => {\n let i1 = V(P, Z), n1 = V(P, t1);\n return n1 < i1 ? -1 : n1 > i1 ? 1 : 0;\n }).forEach(function(Z, t1) {\n Z.x = t1;\n }, this), W.linkedSeries && W.linkedSeries.forEach(function(Z) {\n let t1 = Z.options, i1 = t1.data;\n t1.dataSorting && t1.dataSorting.enabled || !i1 || (i1.forEach(function(n1, s1) {\n i1[s1] = Y(Z, n1), S[s1] && (i1[s1].x = S[s1].x, i1[s1].index = s1);\n }), Z.setData(i1, !1));\n }), S;\n }\n getProcessedData(S) {\n let W = this, P = W.xAxis, Y = W.options.cropThreshold, Z = P == null ? void 0 : P.logarithmic, t1 = W.isCartesian, i1, n1, s1 = 0, d1, b1, c1, a1 = W.xData, l1 = W.yData, p1 = !1, M1 = a1.length;\n P && (b1 = (d1 = P.getExtremes()).min, c1 = d1.max, p1 = !!(P.categories && !P.names.length)), t1 && W.sorted && !S && (!Y || M1 > Y || W.forceCrop) && (a1[M1 - 1] < b1 || a1[0] > c1 ? (a1 = [], l1 = []) : W.yData && (a1[0] < b1 || a1[M1 - 1] > c1) && (a1 = (i1 = this.cropData(W.xData, W.yData, b1, c1)).xData, l1 = i1.yData, s1 = i1.start, n1 = !0));\n let A1 = N([Z ? a1.map(Z.log2lin) : a1], () => W.requireSorting && !p1 && q(15, !1, W.chart));\n return { xData: a1, yData: l1, cropped: n1, cropStart: s1, closestPointRange: A1 };\n }\n processData(S) {\n let W = this.xAxis;\n if (this.isCartesian && !this.isDirty && !W.isDirty && !this.yAxis.isDirty && !S)\n return !1;\n let P = this.getProcessedData();\n this.cropped = P.cropped, this.cropStart = P.cropStart, this.processedXData = P.xData, this.processedYData = P.yData, this.closestPointRange = this.basePointRange = P.closestPointRange, x(this, "afterProcessData");\n }\n cropData(S, W, P, Y) {\n let Z = S.length, t1, i1, n1 = 0, s1 = Z;\n for (t1 = 0; t1 < Z; t1++)\n if (S[t1] >= P) {\n n1 = Math.max(0, t1 - 1);\n break;\n }\n for (i1 = t1; i1 < Z; i1++)\n if (S[i1] > Y) {\n s1 = i1 + 1;\n break;\n }\n return { xData: S.slice(n1, s1), yData: W.slice(n1, s1), start: n1, end: s1 };\n }\n generatePoints() {\n let S = this.options, W = this.processedData || S.data, P = this.processedXData, Y = this.processedYData, Z = this.pointClass, t1 = P.length, i1 = this.cropStart || 0, n1 = this.hasGroupedData, s1 = S.keys, d1 = [], b1 = S.dataGrouping && S.dataGrouping.groupAll ? i1 : 0, c1, a1, l1, p1, M1 = this.data;\n if (!M1 && !n1) {\n let A1 = [];\n A1.length = W.length, M1 = this.data = A1;\n }\n for (s1 && n1 && (this.options.keys = !1), p1 = 0; p1 < t1; p1++)\n a1 = i1 + p1, n1 ? ((l1 = new Z(this, [P[p1]].concat(E(Y[p1])))).dataGroup = this.groupMap[b1 + p1], l1.dataGroup.options && (l1.options = l1.dataGroup.options, m(l1, l1.dataGroup.options), delete l1.dataLabels)) : (l1 = M1[a1]) || W[a1] === void 0 || (M1[a1] = l1 = new Z(this, W[a1], P[p1])), l1 && (l1.index = n1 ? b1 + p1 : a1, d1[p1] = l1);\n if (this.options.keys = s1, M1 && (t1 !== (c1 = M1.length) || n1))\n for (p1 = 0; p1 < c1; p1++)\n p1 !== i1 || n1 || (p1 += t1), M1[p1] && (M1[p1].destroyElements(), M1[p1].plotX = void 0);\n this.data = M1, this.points = d1, x(this, "afterGeneratePoints");\n }\n getXExtremes(S) {\n return { min: y(S), max: L(S) };\n }\n getExtremes(S, W) {\n let P = this.xAxis, Y = this.yAxis, Z = [], t1 = this.requireSorting && !this.is("column") ? 1 : 0, i1 = !!Y && Y.positiveValuesOnly, n1 = W || this.getExtremesFromAll || this.options.getExtremesFromAll, { processedXData: s1, processedYData: d1 } = this, b1, c1, a1, l1, p1, M1, A1, u1 = 0, h1 = 0, C1 = 0;\n if (this.cropped && n1) {\n let k1 = this.getProcessedData(!0);\n s1 = k1.xData, d1 = k1.yData;\n }\n let q1 = (S = S || this.stackedYData || d1 || []).length, W1 = s1 || this.xData;\n for (P && (u1 = (b1 = P.getExtremes()).min, h1 = b1.max), M1 = 0; M1 < q1; M1++)\n if (l1 = W1[M1], c1 = (j(p1 = S[M1]) || I(p1)) && ((j(p1) ? p1 > 0 : p1.length) || !i1), a1 = W || this.getExtremesFromAll || this.options.getExtremesFromAll || this.cropped || !P || (W1[M1 + t1] || l1) >= u1 && (W1[M1 - t1] || l1) <= h1, c1 && a1)\n if (A1 = p1.length)\n for (; A1--; )\n j(p1[A1]) && (Z[C1++] = p1[A1]);\n else\n Z[C1++] = p1;\n let R1 = { activeYData: Z, dataMin: y(Z), dataMax: L(Z) };\n return x(this, "afterGetExtremes", { dataExtremes: R1 }), R1;\n }\n applyExtremes() {\n let S = this.getExtremes();\n return this.dataMin = S.dataMin, this.dataMax = S.dataMax, S;\n }\n getFirstValidPoint(S, W = 0, P = 1) {\n let Y = S.length, Z = W;\n for (; Z >= 0 && Z < Y; ) {\n if (T(S[Z]))\n return S[Z];\n Z += P;\n }\n }\n translate() {\n var h1;\n this.processedXData || this.processData(), this.generatePoints();\n let S = this.options, W = S.stacking, P = this.xAxis, Y = P.categories, Z = this.enabledDataSorting, t1 = this.yAxis, i1 = this.points, n1 = i1.length, s1 = this.pointPlacementToXValue(), d1 = !!s1, b1 = S.threshold, c1 = S.startFromThreshold ? b1 : 0, a1, l1, p1, M1, A1 = Number.MAX_VALUE;\n function u1(C1) {\n return B(C1, -1e9, 1e9);\n }\n for (a1 = 0; a1 < n1; a1++) {\n let C1, q1 = i1[a1], W1 = q1.x, R1, k1, N1 = q1.y, v1 = q1.low, S1 = W && ((h1 = t1.stacking) == null ? void 0 : h1.stacks[(this.negStacks && N1 < (c1 ? 0 : b1) ? "-" : "") + this.stackKey]);\n l1 = P.translate(W1, !1, !1, !1, !0, s1), q1.plotX = j(l1) ? X(u1(l1)) : void 0, W && this.visible && S1 && S1[W1] && (M1 = this.getStackIndicator(M1, W1, this.index), !q1.isNull && M1.key && (k1 = (R1 = S1[W1]).points[M1.key]), R1 && I(k1) && (v1 = k1[0], N1 = k1[1], v1 === c1 && M1.key === S1[W1].base && (v1 = K(j(b1) ? b1 : t1.min)), t1.positiveValuesOnly && T(v1) && v1 <= 0 && (v1 = void 0), q1.total = q1.stackTotal = K(R1.total), q1.percentage = T(q1.y) && R1.total ? q1.y / R1.total * 100 : void 0, q1.stackY = N1, this.irregularWidths || R1.setOffset(this.pointXOffset || 0, this.barW || 0, void 0, void 0, void 0, this.xAxis))), q1.yBottom = T(v1) ? u1(t1.translate(v1, !1, !0, !1, !0)) : void 0, this.dataModify && (N1 = this.dataModify.modifyValue(N1, a1)), j(N1) && q1.plotX !== void 0 && (C1 = j(C1 = t1.translate(N1, !1, !0, !1, !0)) ? u1(C1) : void 0), q1.plotY = C1, q1.isInside = this.isPointInside(q1), q1.clientX = d1 ? X(P.translate(W1, !1, !1, !1, !0, s1)) : l1, q1.negative = (q1.y || 0) < (b1 || 0), q1.category = K(Y && Y[q1.x], q1.x), q1.isNull || q1.visible === !1 || (p1 !== void 0 && (A1 = Math.min(A1, Math.abs(l1 - p1))), p1 = l1), q1.zone = this.zones.length ? q1.getZone() : void 0, !q1.graphic && this.group && Z && (q1.isNew = !0);\n }\n this.closestPointRangePx = A1, x(this, "afterTranslate");\n }\n getValidPoints(S, W, P) {\n let Y = this.chart;\n return (S || this.points || []).filter(function(Z) {\n let { plotX: t1, plotY: i1 } = Z;\n return !!((P || !Z.isNull && j(i1)) && (!W || Y.isInsidePlot(t1, i1, { inverted: Y.inverted }))) && Z.visible !== !1;\n });\n }\n getClipBox() {\n let { chart: S, xAxis: W, yAxis: P } = this, { x: Y, y: Z, width: t1, height: i1 } = _(S.clipBox);\n return W && W.len !== S.plotSizeX && (t1 = W.len), P && P.len !== S.plotSizeY && (i1 = P.len), S.inverted && !this.invertible && ([t1, i1] = [i1, t1]), { x: Y, y: Z, width: t1, height: i1 };\n }\n getSharedClipKey() {\n return this.sharedClipKey = (this.options.xAxis || 0) + "," + (this.options.yAxis || 0), this.sharedClipKey;\n }\n setClip() {\n let { chart: S, group: W, markerGroup: P } = this, Y = S.sharedClips, Z = S.renderer, t1 = this.getClipBox(), i1 = this.getSharedClipKey(), n1 = Y[i1];\n n1 ? n1.animate(t1) : Y[i1] = n1 = Z.clipRect(t1), W && W.clip(this.options.clip === !1 ? void 0 : n1), P && P.clip();\n }\n animate(S) {\n let { chart: W, group: P, markerGroup: Y } = this, Z = W.inverted, t1 = A(this.options.animation), i1 = [this.getSharedClipKey(), t1.duration, t1.easing, t1.defer].join(","), n1 = W.sharedClips[i1], s1 = W.sharedClips[i1 + "m"];\n if (S && P) {\n let d1 = this.getClipBox();\n if (n1)\n n1.attr("height", d1.height);\n else {\n d1.width = 0, Z && (d1.x = W.plotHeight), n1 = W.renderer.clipRect(d1), W.sharedClips[i1] = n1;\n let b1 = { x: -99, y: -99, width: Z ? W.plotWidth + 199 : 99, height: Z ? 99 : W.plotHeight + 199 };\n s1 = W.renderer.clipRect(b1), W.sharedClips[i1 + "m"] = s1;\n }\n P.clip(n1), Y == null || Y.clip(s1);\n } else if (n1 && !n1.hasClass("highcharts-animating")) {\n let d1 = this.getClipBox(), b1 = t1.step;\n (Y != null && Y.element.childNodes.length || W.series.length > 1) && (t1.step = function(c1, a1) {\n b1 && b1.apply(a1, arguments), a1.prop === "width" && (s1 != null && s1.element) && s1.attr(Z ? "height" : "width", c1 + 99);\n }), n1.addClass("highcharts-animating").animate(d1, t1);\n }\n }\n afterAnimate() {\n this.setClip(), r1(this.chart.sharedClips, (S, W, P) => {\n S && !this.chart.container.querySelector(`[clip-path="url(#${S.id})"]`) && (S.destroy(), delete P[W]);\n }), this.finishedAnimating = !0, x(this, "afterAnimate");\n }\n drawPoints(S = this.points) {\n let W, P, Y, Z, t1, i1, n1, s1 = this.chart, d1 = s1.styledMode, { colorAxis: b1, options: c1 } = this, a1 = c1.marker, l1 = this[this.specialGroup || "markerGroup"], p1 = this.xAxis, M1 = K(a1.enabled, !p1 || !!p1.isRadial || null, this.closestPointRangePx >= a1.enabledThreshold * a1.radius);\n if (a1.enabled !== !1 || this._hasPointMarkers)\n for (W = 0; W < S.length; W++)\n if (Z = (Y = (P = S[W]).graphic) ? "animate" : "attr", t1 = P.marker || {}, i1 = !!P.marker, (M1 && t1.enabled === void 0 || t1.enabled) && !P.isNull && P.visible !== !1) {\n let A1 = K(t1.symbol, this.symbol, "rect");\n n1 = this.markerAttribs(P, P.selected && "select"), this.enabledDataSorting && (P.startXPos = p1.reversed ? -(n1.width || 0) : p1.width);\n let u1 = P.isInside !== !1;\n if (!Y && u1 && ((n1.width || 0) > 0 || P.hasImage) && (P.graphic = Y = s1.renderer.symbol(A1, n1.x, n1.y, n1.width, n1.height, i1 ? t1 : a1).add(l1), this.enabledDataSorting && s1.hasRendered && (Y.attr({ x: P.startXPos }), Z = "animate")), Y && Z === "animate" && Y[u1 ? "show" : "hide"](u1).animate(n1), Y) {\n let h1 = this.pointAttribs(P, d1 || !P.selected ? void 0 : "select");\n d1 ? b1 && Y.css({ fill: h1.fill }) : Y[Z](h1);\n }\n Y && Y.addClass(P.getClassName(), !0);\n } else\n Y && (P.graphic = Y.destroy());\n }\n markerAttribs(S, W) {\n let P = this.options, Y = P.marker, Z = S.marker || {}, t1 = Z.symbol || Y.symbol, i1 = {}, n1, s1, d1 = K(Z.radius, Y && Y.radius);\n W && (n1 = Y.states[W], d1 = K((s1 = Z.states && Z.states[W]) && s1.radius, n1 && n1.radius, d1 && d1 + (n1 && n1.radiusPlus || 0))), S.hasImage = t1 && t1.indexOf("url") === 0, S.hasImage && (d1 = 0);\n let b1 = S.pos();\n return j(d1) && b1 && (P.crisp && (b1[0] = F(b1[0], S.hasImage ? 0 : t1 === "rect" ? (Y == null ? void 0 : Y.lineWidth) || 0 : 1)), i1.x = b1[0] - d1, i1.y = b1[1] - d1), d1 && (i1.width = i1.height = 2 * d1), i1;\n }\n pointAttribs(S, W) {\n let P = this.options.marker, Y = S && S.options, Z = Y && Y.marker || {}, t1 = Y && Y.color, i1 = S && S.color, n1 = S && S.zone && S.zone.color, s1, d1, b1 = this.color, c1, a1, l1 = K(Z.lineWidth, P.lineWidth), p1 = 1;\n return b1 = t1 || n1 || i1 || b1, c1 = Z.fillColor || P.fillColor || b1, a1 = Z.lineColor || P.lineColor || b1, W = W || "normal", s1 = P.states[W] || {}, l1 = K((d1 = Z.states && Z.states[W] || {}).lineWidth, s1.lineWidth, l1 + K(d1.lineWidthPlus, s1.lineWidthPlus, 0)), c1 = d1.fillColor || s1.fillColor || c1, { stroke: a1 = d1.lineColor || s1.lineColor || a1, "stroke-width": l1, fill: c1, opacity: p1 = K(d1.opacity, s1.opacity, p1) };\n }\n destroy(S) {\n let W, P, Y, Z = this, t1 = Z.chart, i1 = /AppleWebKit\\/533/.test(g.navigator.userAgent), n1 = Z.data || [];\n for (x(Z, "destroy", { keepEventsForUpdate: S }), this.removeEvents(S), (Z.axisTypes || []).forEach(function(s1) {\n (Y = Z[s1]) && Y.series && (C(Y.series, Z), Y.isDirty = Y.forceRedraw = !0);\n }), Z.legendItem && Z.chart.legend.destroyItem(Z), W = n1.length; W--; )\n (P = n1[W]) && P.destroy && P.destroy();\n for (let s1 of Z.zones)\n w(s1, void 0, !0);\n u.clearTimeout(Z.animationTimeout), r1(Z, function(s1, d1) {\n s1 instanceof M && !s1.survive && s1[i1 && d1 === "group" ? "hide" : "destroy"]();\n }), t1.hoverSeries === Z && (t1.hoverSeries = void 0), C(t1.series, Z), t1.orderItems("series"), r1(Z, function(s1, d1) {\n S && d1 === "hcEvents" || delete Z[d1];\n });\n }\n applyZones() {\n let { area: S, chart: W, graph: P, zones: Y, points: Z, xAxis: t1, yAxis: i1, zoneAxis: n1 } = this, { inverted: s1, renderer: d1 } = W, b1 = this[`${n1}Axis`], { isXAxis: c1, len: a1 = 0 } = b1 || {}, l1 = ((P == null ? void 0 : P.strokeWidth()) || 0) / 2 + 1, p1 = (M1, A1 = 0, u1 = 0) => {\n s1 && (u1 = a1 - u1);\n let { translated: h1 = 0, lineClip: C1 } = M1, q1 = u1 - h1;\n C1 == null || C1.push(["L", A1, Math.abs(q1) < l1 ? u1 - l1 * (q1 <= 0 ? -1 : 1) : h1]);\n };\n if (Y.length && (P || S) && b1 && j(b1.min)) {\n let M1 = b1.getExtremes().max, A1 = (C1) => {\n C1.forEach((q1, W1) => {\n (q1[0] === "M" || q1[0] === "L") && (C1[W1] = [q1[0], c1 ? a1 - q1[1] : q1[1], c1 ? q1[2] : a1 - q1[2]]);\n });\n };\n if (Y.forEach((C1) => {\n C1.lineClip = [], C1.translated = B(b1.toPixels(K(C1.value, M1), !0) || 0, 0, a1);\n }), P && !this.showLine && P.hide(), S && S.hide(), n1 === "y" && Z.length < t1.len)\n for (let C1 of Z) {\n let { plotX: q1, plotY: W1, zone: R1 } = C1, k1 = R1 && Y[Y.indexOf(R1) - 1];\n R1 && p1(R1, q1, W1), k1 && p1(k1, q1, W1);\n }\n let u1 = [], h1 = b1.toPixels(b1.getExtremes().min, !0);\n Y.forEach((C1) => {\n var h0, O0;\n let q1 = C1.lineClip || [], W1 = Math.round(C1.translated || 0);\n t1.reversed && q1.reverse();\n let { clip: R1, simpleClip: k1 } = C1, N1 = 0, v1 = 0, S1 = t1.len, D1 = i1.len;\n c1 ? (N1 = W1, S1 = h1) : (v1 = W1, D1 = h1);\n let F1 = [["M", N1, v1], ["L", S1, v1], ["L", S1, D1], ["L", N1, D1], ["Z"]], U1 = [F1[0], ...q1, F1[1], F1[2], ...u1, F1[3], F1[4]];\n u1 = q1.reverse(), h1 = W1, s1 && (A1(U1), S && A1(F1)), R1 ? (R1.animate({ d: U1 }), k1 == null || k1.animate({ d: F1 })) : (R1 = C1.clip = d1.path(U1), S && (k1 = C1.simpleClip = d1.path(F1))), P && ((h0 = C1.graph) == null || h0.clip(R1)), S && ((O0 = C1.area) == null || O0.clip(k1));\n });\n } else\n this.visible && (P && P.show(), S && S.show());\n }\n plotGroup(S, W, P, Y, Z) {\n let t1 = this[S], i1 = !t1, n1 = { visibility: P, zIndex: Y || 0.1 };\n return T(this.opacity) && !this.chart.styledMode && this.state !== "inactive" && (n1.opacity = this.opacity), t1 || (this[S] = t1 = this.chart.renderer.g().add(Z)), t1.addClass("highcharts-" + W + " highcharts-series-" + this.index + " highcharts-" + this.type + "-series " + (T(this.colorIndex) ? "highcharts-color-" + this.colorIndex + " " : "") + (this.options.className || "") + (t1.hasClass("highcharts-tracker") ? " highcharts-tracker" : ""), !0), t1.attr(n1)[i1 ? "attr" : "animate"](this.getPlotBox(W)), t1;\n }\n getPlotBox(S) {\n let W = this.xAxis, P = this.yAxis, Y = this.chart, Z = Y.inverted && !Y.polar && W && this.invertible && S === "series";\n return Y.inverted && (W = P, P = this.xAxis), { translateX: W ? W.left : Y.plotLeft, translateY: P ? P.top : Y.plotTop, rotation: Z ? 90 : 0, rotationOriginX: Z ? (W.len - P.len) / 2 : 0, rotationOriginY: Z ? (W.len + P.len) / 2 : 0, scaleX: Z ? -1 : 1, scaleY: 1 };\n }\n removeEvents(S) {\n let { eventsToUnbind: W } = this;\n S || Q(this), W.length && (W.forEach((P) => {\n P();\n }), W.length = 0);\n }\n render() {\n var d1, b1, c1, a1, l1;\n let S = this, { chart: W, options: P, hasRendered: Y } = S, Z = A(P.animation), t1 = S.visible ? "inherit" : "hidden", i1 = P.zIndex, n1 = W.seriesGroup, s1 = S.finishedAnimating ? 0 : Z.duration;\n x(this, "render"), S.plotGroup("group", "series", t1, i1, n1), S.markerGroup = S.plotGroup("markerGroup", "markers", t1, i1, n1), P.clip !== !1 && S.setClip(), s1 && ((d1 = S.animate) == null || d1.call(S, !0)), S.drawGraph && (S.drawGraph(), S.applyZones()), S.visible && S.drawPoints(), (b1 = S.drawDataLabels) == null || b1.call(S), (c1 = S.redrawPoints) == null || c1.call(S), P.enableMouseTracking && ((a1 = S.drawTracker) == null || a1.call(S)), s1 && ((l1 = S.animate) == null || l1.call(S)), Y || (s1 && Z.defer && (s1 += Z.defer), S.animationTimeout = D(() => {\n S.afterAnimate();\n }, s1 || 0)), S.isDirty = !1, S.hasRendered = !0, x(S, "afterRender");\n }\n redraw() {\n let S = this.isDirty || this.isDirtyData;\n this.translate(), this.render(), S && delete this.kdTree;\n }\n reserveSpace() {\n return this.visible || !this.chart.options.chart.ignoreHiddenSeries;\n }\n searchPoint(S, W) {\n let { xAxis: P, yAxis: Y } = this, Z = this.chart.inverted;\n return this.searchKDTree({ clientX: Z ? P.len - S.chartY + P.pos : S.chartX - P.pos, plotY: Z ? Y.len - S.chartX + Y.pos : S.chartY - Y.pos }, W, S);\n }\n buildKDTree(S) {\n this.buildingKdTree = !0;\n let W = this, P = W.options.findNearestPointBy.indexOf("y") > -1 ? 2 : 1;\n delete W.kdTree, D(function() {\n W.kdTree = function Y(Z, t1, i1) {\n let n1, s1, d1 = Z == null ? void 0 : Z.length;\n if (d1)\n return n1 = W.kdAxisArray[t1 % i1], Z.sort((b1, c1) => (b1[n1] || 0) - (c1[n1] || 0)), { point: Z[s1 = Math.floor(d1 / 2)], left: Y(Z.slice(0, s1), t1 + 1, i1), right: Y(Z.slice(s1 + 1), t1 + 1, i1) };\n }(W.getValidPoints(void 0, !W.directTouch), P, P), W.buildingKdTree = !1;\n }, W.options.kdNow || (S == null ? void 0 : S.type) === "touchstart" ? 0 : 1);\n }\n searchKDTree(S, W, P) {\n let Y = this, [Z, t1] = this.kdAxisArray, i1 = W ? "distX" : "dist", n1 = (Y.options.findNearestPointBy || "").indexOf("y") > -1 ? 2 : 1, s1 = !!Y.isBubble;\n if (this.kdTree || this.buildingKdTree || this.buildKDTree(P), this.kdTree)\n return function d1(b1, c1, a1, l1) {\n var R1;\n let p1 = c1.point, M1 = Y.kdAxisArray[a1 % l1], A1, u1, h1 = p1;\n (function(k1, N1) {\n var w1;\n let v1 = k1[Z], S1 = N1[Z], D1 = T(v1) && T(S1) ? v1 - S1 : null, F1 = k1[t1], U1 = N1[t1], h0 = T(F1) && T(U1) ? F1 - U1 : 0, O0 = s1 && ((w1 = N1.marker) == null ? void 0 : w1.radius) || 0;\n N1.dist = Math.sqrt((D1 && D1 * D1 || 0) + h0 * h0) - O0, N1.distX = T(D1) ? Math.abs(D1) - O0 : Number.MAX_VALUE;\n })(b1, p1);\n let C1 = (b1[M1] || 0) - (p1[M1] || 0) + (s1 && ((R1 = p1.marker) == null ? void 0 : R1.radius) || 0), q1 = C1 < 0 ? "left" : "right", W1 = C1 < 0 ? "right" : "left";\n return c1[q1] && (h1 = (A1 = d1(b1, c1[q1], a1 + 1, l1))[i1] < h1[i1] ? A1 : p1), c1[W1] && Math.sqrt(C1 * C1) < h1[i1] && (h1 = (u1 = d1(b1, c1[W1], a1 + 1, l1))[i1] < h1[i1] ? u1 : h1), h1;\n }(S, this.kdTree, n1, n1);\n }\n pointPlacementToXValue() {\n let { options: S, xAxis: W } = this, P = S.pointPlacement;\n return P === "between" && (P = W.reversed ? -0.5 : 0.5), j(P) ? P * (S.pointRange || W.pointRange) : 0;\n }\n isPointInside(S) {\n let { chart: W, xAxis: P, yAxis: Y } = this, { plotX: Z = -1, plotY: t1 = -1 } = S;\n return t1 >= 0 && t1 <= (Y ? Y.len : W.plotHeight) && Z >= 0 && Z <= (P ? P.len : W.plotWidth);\n }\n drawTracker() {\n var c1;\n let S = this, W = S.options, P = W.trackByArea, Y = [].concat((P ? S.areaPath : S.graphPath) || []), Z = S.chart, t1 = Z.pointer, i1 = Z.renderer, n1 = ((c1 = Z.options.tooltip) == null ? void 0 : c1.snap) || 0, s1 = () => {\n W.enableMouseTracking && Z.hoverSeries !== S && S.onMouseOver();\n }, d1 = "rgba(192,192,192," + (h ? 1e-4 : 2e-3) + ")", b1 = S.tracker;\n b1 ? b1.attr({ d: Y }) : S.graph && (S.tracker = b1 = i1.path(Y).attr({ visibility: S.visible ? "inherit" : "hidden", zIndex: 2 }).addClass(P ? "highcharts-tracker-area" : "highcharts-tracker-line").add(S.group), Z.styledMode || b1.attr({ "stroke-linecap": "round", "stroke-linejoin": "round", stroke: d1, fill: P ? d1 : "none", "stroke-width": S.graph.strokeWidth() + (P ? 0 : 2 * n1) }), [S.tracker, S.markerGroup, S.dataLabelsGroup].forEach((a1) => {\n a1 && (a1.addClass("highcharts-tracker").on("mouseover", s1).on("mouseout", (l1) => {\n t1 == null || t1.onTrackerMouseOut(l1);\n }), W.cursor && !Z.styledMode && a1.css({ cursor: W.cursor }), a1.on("touchstart", s1));\n })), x(this, "afterDrawTracker");\n }\n addPoint(S, W, P, Y, Z) {\n let t1, i1, n1 = this.options, s1 = this.data, d1 = this.chart, b1 = this.xAxis, c1 = b1 && b1.hasNames && b1.names, a1 = n1.data, l1 = this.xData;\n W = K(W, !0);\n let p1 = { series: this };\n this.pointClass.prototype.applyOptions.apply(p1, [S]);\n let M1 = p1.x;\n if (i1 = l1.length, this.requireSorting && M1 < l1[i1 - 1])\n for (t1 = !0; i1 && l1[i1 - 1] > M1; )\n i1--;\n this.updateParallelArrays(p1, "splice", [i1, 0, 0]), this.updateParallelArrays(p1, i1), c1 && p1.name && (c1[M1] = p1.name), a1.splice(i1, 0, S), (t1 || this.processedData) && (this.data.splice(i1, 0, null), this.processData()), n1.legendType === "point" && this.generatePoints(), P && (s1[0] && s1[0].remove ? s1[0].remove(!1) : (s1.shift(), this.updateParallelArrays(p1, "shift"), a1.shift())), Z !== !1 && x(this, "addPoint", { point: p1 }), this.isDirty = !0, this.isDirtyData = !0, W && d1.redraw(Y);\n }\n removePoint(S, W, P) {\n let Y = this, Z = Y.data, t1 = Z[S], i1 = Y.points, n1 = Y.chart, s1 = function() {\n i1 && i1.length === Z.length && i1.splice(S, 1), Z.splice(S, 1), Y.options.data.splice(S, 1), Y.updateParallelArrays(t1 || { series: Y }, "splice", [S, 1]), t1 && t1.destroy(), Y.isDirty = !0, Y.isDirtyData = !0, W && n1.redraw();\n };\n z(P, n1), W = K(W, !0), t1 ? t1.firePointEvent("remove", null, s1) : s1();\n }\n remove(S, W, P, Y) {\n let Z = this, t1 = Z.chart;\n function i1() {\n Z.destroy(Y), t1.isDirtyLegend = t1.isDirtyBox = !0, t1.linkSeries(Y), K(S, !0) && t1.redraw(W);\n }\n P !== !1 ? x(Z, "remove", null, i1) : i1();\n }\n update(S, W) {\n var A1, u1, h1;\n x(this, "update", { options: S = H(S, this.userOptions) });\n let P = this, Y = P.chart, Z = P.userOptions, t1 = P.initialType || P.type, i1 = Y.options.plotOptions, n1 = v[t1].prototype, s1 = P.finishedAnimating && { animation: !1 }, d1 = {}, b1, c1, a1 = ["colorIndex", "eventOptions", "navigatorSeries", "symbolIndex", "baseSeries"], l1 = S.type || Z.type || Y.options.chart.type, p1 = !(this.hasDerivedData || l1 && l1 !== this.type || S.pointStart !== void 0 || S.pointInterval !== void 0 || S.relativeXValue !== void 0 || S.joinBy || S.mapData || ["dataGrouping", "pointStart", "pointInterval", "pointIntervalUnit", "keys"].some((C1) => P.hasOptionChanged(C1)));\n l1 = l1 || t1, p1 && (a1.push("data", "isDirtyData", "isDirtyCanvas", "points", "processedData", "processedXData", "processedYData", "xIncrement", "cropped", "_hasPointMarkers", "hasDataLabels", "nodes", "layout", "level", "mapMap", "mapData", "minY", "maxY", "minX", "maxX", "transformGroups"), S.visible !== !1 && a1.push("area", "graph"), P.parallelArrays.forEach(function(C1) {\n a1.push(C1 + "Data");\n }), S.data && (S.dataSorting && m(P.options.dataSorting, S.dataSorting), this.setData(S.data, !1))), S = _(Z, { index: Z.index === void 0 ? P.index : Z.index, pointStart: ((A1 = i1 == null ? void 0 : i1.series) == null ? void 0 : A1.pointStart) ?? Z.pointStart ?? ((u1 = P.xData) == null ? void 0 : u1[0]) }, !p1 && { data: P.options.data }, S, s1), p1 && S.data && (S.data = P.options.data), (a1 = ["group", "markerGroup", "dataLabelsGroup", "transformGroup"].concat(a1)).forEach(function(C1) {\n a1[C1] = P[C1], delete P[C1];\n });\n let M1 = !1;\n if (v[l1]) {\n if (M1 = l1 !== P.type, P.remove(!1, !1, !1, !0), M1)\n if (Y.propFromSeries(), Object.setPrototypeOf)\n Object.setPrototypeOf(P, v[l1].prototype);\n else {\n let C1 = Object.hasOwnProperty.call(P, "hcEvents") && P.hcEvents;\n for (c1 in n1)\n P[c1] = void 0;\n m(P, v[l1].prototype), C1 ? P.hcEvents = C1 : delete P.hcEvents;\n }\n } else\n q(17, !0, Y, { missingModuleFor: l1 });\n if (a1.forEach(function(C1) {\n P[C1] = a1[C1];\n }), P.init(Y, S), p1 && this.points)\n for (let C1 of ((b1 = P.options).visible === !1 ? (d1.graphic = 1, d1.dataLabel = 1) : (this.hasMarkerChanged(b1, Z) && (d1.graphic = 1), (h1 = P.hasDataLabels) != null && h1.call(P) || (d1.dataLabel = 1)), this.points))\n C1 && C1.series && (C1.resolveColor(), Object.keys(d1).length && C1.destroyElements(d1), b1.showInLegend === !1 && C1.legendItem && Y.legend.destroyItem(C1));\n P.initialType = t1, Y.linkSeries(), Y.setSortedData(), M1 && P.linkedSeries.length && (P.isDirtyData = !0), x(this, "afterUpdate"), K(W, !0) && Y.redraw(!!p1 && void 0);\n }\n setName(S) {\n this.name = this.options.name = this.userOptions.name = S, this.chart.isDirtyLegend = !0;\n }\n hasOptionChanged(S) {\n var i1, n1;\n let W = this.chart, P = this.options[S], Y = W.options.plotOptions, Z = this.userOptions[S], t1 = K((i1 = Y == null ? void 0 : Y[this.type]) == null ? void 0 : i1[S], (n1 = Y == null ? void 0 : Y.series) == null ? void 0 : n1[S]);\n return Z && !T(t1) ? P !== Z : P !== K(t1, P);\n }\n onMouseOver() {\n let S = this.chart, W = S.hoverSeries, P = S.pointer;\n P == null || P.setHoverChartIndex(), W && W !== this && W.onMouseOut(), this.options.events.mouseOver && x(this, "mouseOver"), this.setState("hover"), S.hoverSeries = this;\n }\n onMouseOut() {\n let S = this.options, W = this.chart, P = W.tooltip, Y = W.hoverPoint;\n W.hoverSeries = null, Y && Y.onMouseOut(), this && S.events.mouseOut && x(this, "mouseOut"), P && !this.stickyTracking && (!P.shared || this.noSharedTooltip) && P.hide(), W.series.forEach(function(Z) {\n Z.setState("", !0);\n });\n }\n setState(S, W) {\n let P = this, Y = P.options, Z = P.graph, t1 = Y.inactiveOtherPoints, i1 = Y.states, n1 = K(i1[S || "normal"] && i1[S || "normal"].animation, P.chart.options.chart.animation), s1 = Y.lineWidth, d1 = Y.opacity;\n if (S = S || "", P.state !== S && ([P.group, P.markerGroup, P.dataLabelsGroup].forEach(function(b1) {\n b1 && (P.state && b1.removeClass("highcharts-series-" + P.state), S && b1.addClass("highcharts-series-" + S));\n }), P.state = S, !P.chart.styledMode)) {\n if (i1[S] && i1[S].enabled === !1)\n return;\n if (S && (s1 = i1[S].lineWidth || s1 + (i1[S].lineWidthPlus || 0), d1 = K(i1[S].opacity, d1)), Z && !Z.dashstyle && j(s1))\n for (let b1 of [Z, ...this.zones.map((c1) => c1.graph)])\n b1 == null || b1.animate({ "stroke-width": s1 }, n1);\n t1 || [P.group, P.markerGroup, P.dataLabelsGroup, P.labelBySeries].forEach(function(b1) {\n b1 && b1.animate({ opacity: d1 }, n1);\n });\n }\n W && t1 && P.points && P.setAllPointsToState(S || void 0);\n }\n setAllPointsToState(S) {\n this.points.forEach(function(W) {\n W.setState && W.setState(S);\n });\n }\n setVisible(S, W) {\n var n1;\n let P = this, Y = P.chart, Z = Y.options.chart.ignoreHiddenSeries, t1 = P.visible;\n P.visible = S = P.options.visible = P.userOptions.visible = S === void 0 ? !t1 : S;\n let i1 = S ? "show" : "hide";\n ["group", "dataLabelsGroup", "markerGroup", "tracker", "tt"].forEach((s1) => {\n var d1;\n (d1 = P[s1]) == null || d1[i1]();\n }), (Y.hoverSeries === P || ((n1 = Y.hoverPoint) == null ? void 0 : n1.series) === P) && P.onMouseOut(), P.legendItem && Y.legend.colorizeItem(P, S), P.isDirty = !0, P.options.stacking && Y.series.forEach((s1) => {\n s1.options.stacking && s1.visible && (s1.isDirty = !0);\n }), P.linkedSeries.forEach((s1) => {\n s1.setVisible(S, !1);\n }), Z && (Y.isDirtyBox = !0), x(P, i1), W !== !1 && Y.redraw();\n }\n show() {\n this.setVisible(!0);\n }\n hide() {\n this.setVisible(!1);\n }\n select(S) {\n this.selected = S = this.options.selected = S === void 0 ? !this.selected : S, this.checkbox && (this.checkbox.checked = S), x(this, S ? "select" : "unselect");\n }\n shouldShowTooltip(S, W, P = {}) {\n return P.series = this, P.visiblePlotOnly = !0, this.chart.isInsidePlot(S, W, P);\n }\n drawLegendSymbol(S, W) {\n var P;\n (P = l[this.options.legendSymbol || "rectangle"]) == null || P.call(this, S, W);\n }\n }\n return G.defaultOptions = d, G.types = b.seriesTypes, G.registerType = b.registerSeriesType, m(G.prototype, { axisTypes: ["xAxis", "yAxis"], coll: "series", colorCounter: 0, directTouch: !1, invertible: !0, isCartesian: !0, kdAxisArray: ["clientX", "plotY"], parallelArrays: ["x", "y"], pointClass: p, requireSorting: !0, sorted: !0 }), b.series = G, G;\n }), n(o, "Core/Legend/Legend.js", [o["Core/Animation/AnimationUtilities.js"], o["Core/Foundation.js"], o["Core/Globals.js"], o["Core/Series/Series.js"], o["Core/Series/Point.js"], o["Core/Renderer/RendererUtilities.js"], o["Core/Templating.js"], o["Core/Utilities.js"]], function(r, i, a, s, l, p, d, b) {\n var M;\n let { animObject: u, setAnimation: A } = r, { registerEventOptions: z } = i, { composed: f, marginNames: O } = a, { distribute: h } = p, { format: g } = d, { addEvent: v, createElement: L, css: y, defined: B, discardElement: X, find: F, fireEvent: T, isNumber: w, merge: H, pick: C, pushUnique: q, relativeLength: m, stableSort: k, syncTimeout: x } = b;\n class N {\n constructor(R, I) {\n this.allItems = [], this.initialItemY = 0, this.itemHeight = 0, this.itemMarginBottom = 0, this.itemMarginTop = 0, this.itemX = 0, this.itemY = 0, this.lastItemY = 0, this.lastLineHeight = 0, this.legendHeight = 0, this.legendWidth = 0, this.maxItemWidth = 0, this.maxLegendWidth = 0, this.offsetWidth = 0, this.padding = 0, this.pages = [], this.symbolHeight = 0, this.symbolWidth = 0, this.titleHeight = 0, this.totalItemWidth = 0, this.widthOption = 0, this.chart = R, this.setOptions(I), I.enabled && (this.render(), z(this, I), v(this.chart, "endResize", function() {\n this.legend.positionCheckboxes();\n })), v(this.chart, "render", () => {\n this.options.enabled && this.proximate && (this.proximatePositions(), this.positionItems());\n });\n }\n setOptions(R) {\n let I = C(R.padding, 8);\n this.options = R, this.chart.styledMode || (this.itemStyle = R.itemStyle, this.itemHiddenStyle = H(this.itemStyle, R.itemHiddenStyle)), this.itemMarginTop = R.itemMarginTop, this.itemMarginBottom = R.itemMarginBottom, this.padding = I, this.initialItemY = I - 5, this.symbolWidth = C(R.symbolWidth, 16), this.pages = [], this.proximate = R.layout === "proximate" && !this.chart.inverted, this.baseline = void 0;\n }\n update(R, I) {\n let j = this.chart;\n this.setOptions(H(!0, this.options, R)), "events" in this.options && z(this, this.options), this.destroy(), j.isDirtyLegend = j.isDirtyBox = !0, C(I, !0) && j.redraw(), T(this, "afterUpdate", { redraw: I });\n }\n colorizeItem(R, I) {\n let { area: j, group: U, label: _, line: r1, symbol: K } = R.legendItem || {};\n if (U == null || U[I ? "removeClass" : "addClass"]("highcharts-legend-item-hidden"), !this.chart.styledMode) {\n let { itemHiddenStyle: Q = {} } = this, E = Q.color, { fillColor: D, fillOpacity: G, lineColor: J, marker: S } = R.options, W = (P) => (!I && (P.fill && (P.fill = E), P.stroke && (P.stroke = E)), P);\n _ == null || _.css(H(I ? this.itemStyle : Q)), r1 == null || r1.attr(W({ stroke: J || R.color })), K && K.attr(W(S && K.isMarker ? R.pointAttribs() : { fill: R.color })), j == null || j.attr(W({ fill: D || R.color, "fill-opacity": D ? 1 : G ?? 0.75 }));\n }\n T(this, "afterColorizeItem", { item: R, visible: I });\n }\n positionItems() {\n this.allItems.forEach(this.positionItem, this), this.chart.isResizing || this.positionCheckboxes();\n }\n positionItem(R) {\n let { group: I, x: j = 0, y: U = 0 } = R.legendItem || {}, _ = this.options, r1 = _.symbolPadding, K = !_.rtl, Q = R.checkbox;\n if (I && I.element) {\n let E = { translateX: K ? j : this.legendWidth - j - 2 * r1 - 4, translateY: U };\n I[B(I.translateY) ? "animate" : "attr"](E, void 0, () => {\n T(this, "afterPositionItem", { item: R });\n });\n }\n Q && (Q.x = j, Q.y = U);\n }\n destroyItem(R) {\n let I = R.checkbox, j = R.legendItem || {};\n for (let U of ["group", "label", "line", "symbol"])\n j[U] && (j[U] = j[U].destroy());\n I && X(I), R.legendItem = void 0;\n }\n destroy() {\n for (let R of this.getAllItems())\n this.destroyItem(R);\n for (let R of ["clipRect", "up", "down", "pager", "nav", "box", "title", "group"])\n this[R] && (this[R] = this[R].destroy());\n this.display = null;\n }\n positionCheckboxes() {\n let R, I = this.group && this.group.alignAttr, j = this.clipHeight || this.legendHeight, U = this.titleHeight;\n I && (R = I.translateY, this.allItems.forEach(function(_) {\n let r1, K = _.checkbox;\n K && (r1 = R + U + K.y + (this.scrollOffset || 0) + 3, y(K, { left: I.translateX + _.checkboxOffset + K.x - 20 + "px", top: r1 + "px", display: this.proximate || r1 > R - 6 && r1 < R + j - 6 ? "" : "none" }));\n }, this));\n }\n renderTitle() {\n let R = this.options, I = this.padding, j = R.title, U, _ = 0;\n j.text && (this.title || (this.title = this.chart.renderer.label(j.text, I - 3, I - 4, void 0, void 0, void 0, R.useHTML, void 0, "legend-title").attr({ zIndex: 1 }), this.chart.styledMode || this.title.css(j.style), this.title.add(this.group)), j.width || this.title.css({ width: this.maxLegendWidth + "px" }), _ = (U = this.title.getBBox()).height, this.offsetWidth = U.width, this.contentGroup.attr({ translateY: _ })), this.titleHeight = _;\n }\n setText(R) {\n let I = this.options;\n R.legendItem.label.attr({ text: I.labelFormat ? g(I.labelFormat, R, this.chart) : I.labelFormatter.call(R) });\n }\n renderItem(R) {\n let I = R.legendItem = R.legendItem || {}, j = this.chart, U = j.renderer, _ = this.options, r1 = _.layout === "horizontal", K = this.symbolWidth, Q = _.symbolPadding || 0, E = this.itemStyle, D = this.itemHiddenStyle, G = r1 ? C(_.itemDistance, 20) : 0, J = !_.rtl, S = !R.series, W = !S && R.series.drawLegendSymbol ? R.series : R, P = W.options, Y = !!this.createCheckboxForItem && P && P.showCheckbox, Z = _.useHTML, t1 = R.options.className, i1 = I.label, n1 = K + Q + G + (Y ? 20 : 0);\n !i1 && (I.group = U.g("legend-item").addClass("highcharts-" + W.type + "-series highcharts-color-" + R.colorIndex + (t1 ? " " + t1 : "") + (S ? " highcharts-series-" + R.index : "")).attr({ zIndex: 1 }).add(this.scrollGroup), I.label = i1 = U.text("", J ? K + Q : -Q, this.baseline || 0, Z), j.styledMode || i1.css(H(R.visible ? E : D)), i1.attr({ align: J ? "left" : "right", zIndex: 2 }).add(I.group), !this.baseline && (this.fontMetrics = U.fontMetrics(i1), this.baseline = this.fontMetrics.f + 3 + this.itemMarginTop, i1.attr("y", this.baseline), this.symbolHeight = C(_.symbolHeight, this.fontMetrics.f), _.squareSymbol && (this.symbolWidth = C(_.symbolWidth, Math.max(this.symbolHeight, 16)), n1 = this.symbolWidth + Q + G + (Y ? 20 : 0), J && i1.attr("x", this.symbolWidth + Q))), W.drawLegendSymbol(this, R), this.setItemEvents && this.setItemEvents(R, i1, Z)), Y && !R.checkbox && this.createCheckboxForItem && this.createCheckboxForItem(R), this.colorizeItem(R, R.visible), (j.styledMode || !E.width) && i1.css({ width: (_.itemWidth || this.widthOption || j.spacingBox.width) - n1 + "px" }), this.setText(R);\n let s1 = i1.getBBox(), d1 = this.fontMetrics && this.fontMetrics.h || 0;\n R.itemWidth = R.checkboxOffset = _.itemWidth || I.labelWidth || s1.width + n1, this.maxItemWidth = Math.max(this.maxItemWidth, R.itemWidth), this.totalItemWidth += R.itemWidth, this.itemHeight = R.itemHeight = Math.round(I.labelHeight || (s1.height > 1.5 * d1 ? s1.height : d1));\n }\n layoutItem(R) {\n let I = this.options, j = this.padding, U = I.layout === "horizontal", _ = R.itemHeight, r1 = this.itemMarginBottom, K = this.itemMarginTop, Q = U ? C(I.itemDistance, 20) : 0, E = this.maxLegendWidth, D = I.alignColumns && this.totalItemWidth > E ? this.maxItemWidth : R.itemWidth, G = R.legendItem || {};\n U && this.itemX - j + D > E && (this.itemX = j, this.lastLineHeight && (this.itemY += K + this.lastLineHeight + r1), this.lastLineHeight = 0), this.lastItemY = K + this.itemY + r1, this.lastLineHeight = Math.max(_, this.lastLineHeight), G.x = this.itemX, G.y = this.itemY, U ? this.itemX += D : (this.itemY += K + _ + r1, this.lastLineHeight = _), this.offsetWidth = this.widthOption || Math.max((U ? this.itemX - j - (R.checkbox ? 0 : Q) : D) + j, this.offsetWidth);\n }\n getAllItems() {\n let R = [];\n return this.chart.series.forEach(function(I) {\n let j = I && I.options;\n I && C(j.showInLegend, !B(j.linkedTo) && void 0, !0) && (R = R.concat((I.legendItem || {}).labels || (j.legendType === "point" ? I.data : I)));\n }), T(this, "afterGetAllItems", { allItems: R }), R;\n }\n getAlignment() {\n let R = this.options;\n return this.proximate ? R.align.charAt(0) + "tv" : R.floating ? "" : R.align.charAt(0) + R.verticalAlign.charAt(0) + R.layout.charAt(0);\n }\n adjustMargins(R, I) {\n let j = this.chart, U = this.options, _ = this.getAlignment();\n _ && [/(lth|ct|rth)/, /(rtv|rm|rbv)/, /(rbh|cb|lbh)/, /(lbv|lm|ltv)/].forEach(function(r1, K) {\n r1.test(_) && !B(R[K]) && (j[O[K]] = Math.max(j[O[K]], j.legend[(K + 1) % 2 ? "legendHeight" : "legendWidth"] + [1, -1, -1, 1][K] * U[K % 2 ? "x" : "y"] + C(U.margin, 12) + I[K] + (j.titleOffset[K] || 0)));\n });\n }\n proximatePositions() {\n let R, I = this.chart, j = [], U = this.options.align === "left";\n for (let _ of (this.allItems.forEach(function(r1) {\n let K, Q, E = U, D, G;\n r1.yAxis && (r1.xAxis.options.reversed && (E = !E), r1.points && (K = F(E ? r1.points : r1.points.slice(0).reverse(), function(J) {\n return w(J.plotY);\n })), Q = this.itemMarginTop + r1.legendItem.label.getBBox().height + this.itemMarginBottom, G = r1.yAxis.top - I.plotTop, D = r1.visible ? (K ? K.plotY : r1.yAxis.height) + (G - 0.3 * Q) : G + r1.yAxis.height, j.push({ target: D, size: Q, item: r1 }));\n }, this), h(j, I.plotHeight)))\n R = _.item.legendItem || {}, w(_.pos) && (R.y = I.plotTop - I.spacing[0] + _.pos);\n }\n render() {\n let R = this.chart, I = R.renderer, j = this.options, U = this.padding, _ = this.getAllItems(), r1, K, Q, E = this.group, D, G = this.box;\n this.itemX = U, this.itemY = this.initialItemY, this.offsetWidth = 0, this.lastItemY = 0, this.widthOption = m(j.width, R.spacingBox.width - U), D = R.spacingBox.width - 2 * U - j.x, ["rm", "lm"].indexOf(this.getAlignment().substring(0, 2)) > -1 && (D /= 2), this.maxLegendWidth = this.widthOption || D, E || (this.group = E = I.g("legend").addClass(j.className || "").attr({ zIndex: 7 }).add(), this.contentGroup = I.g().attr({ zIndex: 1 }).add(E), this.scrollGroup = I.g().add(this.contentGroup)), this.renderTitle(), k(_, (J, S) => (J.options && J.options.legendIndex || 0) - (S.options && S.options.legendIndex || 0)), j.reversed && _.reverse(), this.allItems = _, this.display = r1 = !!_.length, this.lastLineHeight = 0, this.maxItemWidth = 0, this.totalItemWidth = 0, this.itemHeight = 0, _.forEach(this.renderItem, this), _.forEach(this.layoutItem, this), K = (this.widthOption || this.offsetWidth) + U, Q = this.lastItemY + this.lastLineHeight + this.titleHeight, Q = this.handleOverflow(Q) + U, G || (this.box = G = I.rect().addClass("highcharts-legend-box").attr({ r: j.borderRadius }).add(E)), R.styledMode || G.attr({ stroke: j.borderColor, "stroke-width": j.borderWidth || 0, fill: j.backgroundColor || "none" }).shadow(j.shadow), K > 0 && Q > 0 && G[G.placed ? "animate" : "attr"](G.crisp.call({}, { x: 0, y: 0, width: K, height: Q }, G.strokeWidth())), E[r1 ? "show" : "hide"](), R.styledMode && E.getStyle("display") === "none" && (K = Q = 0), this.legendWidth = K, this.legendHeight = Q, r1 && this.align(), this.proximate || this.positionItems(), T(this, "afterRender");\n }\n align(R = this.chart.spacingBox) {\n let I = this.chart, j = this.options, U = R.y;\n /(lth|ct|rth)/.test(this.getAlignment()) && I.titleOffset[0] > 0 ? U += I.titleOffset[0] : /(lbh|cb|rbh)/.test(this.getAlignment()) && I.titleOffset[2] > 0 && (U -= I.titleOffset[2]), U !== R.y && (R = H(R, { y: U })), I.hasRendered || (this.group.placed = !1), this.group.align(H(j, { width: this.legendWidth, height: this.legendHeight, verticalAlign: this.proximate ? "top" : j.verticalAlign }), !0, R);\n }\n handleOverflow(R) {\n let I = this, j = this.chart, U = j.renderer, _ = this.options, r1 = _.y, K = _.verticalAlign === "top", Q = this.padding, E = _.maxHeight, D = _.navigation, G = C(D.animation, !0), J = D.arrowSize || 12, S = this.pages, W = this.allItems, P = function(b1) {\n typeof b1 == "number" ? d1.attr({ height: b1 }) : d1 && (I.clipRect = d1.destroy(), I.contentGroup.clip()), I.contentGroup.div && (I.contentGroup.div.style.clip = b1 ? "rect(" + Q + "px,9999px," + (Q + b1) + "px,0)" : "auto");\n }, Y = function(b1) {\n return I[b1] = U.circle(0, 0, 1.3 * J).translate(J / 2, J / 2).add(s1), j.styledMode || I[b1].attr("fill", "rgba(0,0,0,0.0001)"), I[b1];\n }, Z, t1, i1, n1 = j.spacingBox.height + (K ? -r1 : r1) - Q, s1 = this.nav, d1 = this.clipRect;\n return _.layout !== "horizontal" || _.verticalAlign === "middle" || _.floating || (n1 /= 2), E && (n1 = Math.min(n1, E)), S.length = 0, R && n1 > 0 && R > n1 && D.enabled !== !1 ? (this.clipHeight = Z = Math.max(n1 - 20 - this.titleHeight - Q, 0), this.currentPage = C(this.currentPage, 1), this.fullHeight = R, W.forEach((b1, c1) => {\n let a1 = (i1 = b1.legendItem || {}).y || 0, l1 = Math.round(i1.label.getBBox().height), p1 = S.length;\n (!p1 || a1 - S[p1 - 1] > Z && (t1 || a1) !== S[p1 - 1]) && (S.push(t1 || a1), p1++), i1.pageIx = p1 - 1, t1 && ((W[c1 - 1].legendItem || {}).pageIx = p1 - 1), c1 === W.length - 1 && a1 + l1 - S[p1 - 1] > Z && a1 > S[p1 - 1] && (S.push(a1), i1.pageIx = p1), a1 !== t1 && (t1 = a1);\n }), d1 || (d1 = I.clipRect = U.clipRect(0, Q - 2, 9999, 0), I.contentGroup.clip(d1)), P(Z), s1 || (this.nav = s1 = U.g().attr({ zIndex: 1 }).add(this.group), this.up = U.symbol("triangle", 0, 0, J, J).add(s1), Y("upTracker").on("click", function() {\n I.scroll(-1, G);\n }), this.pager = U.text("", 15, 10).addClass("highcharts-legend-navigation"), !j.styledMode && D.style && this.pager.css(D.style), this.pager.add(s1), this.down = U.symbol("triangle-down", 0, 0, J, J).add(s1), Y("downTracker").on("click", function() {\n I.scroll(1, G);\n })), I.scroll(0), R = n1) : s1 && (P(), this.nav = s1.destroy(), this.scrollGroup.attr({ translateY: 1 }), this.clipHeight = 0), R;\n }\n scroll(R, I) {\n let j = this.chart, U = this.pages, _ = U.length, r1 = this.clipHeight, K = this.options.navigation, Q = this.pager, E = this.padding, D = this.currentPage + R;\n D > _ && (D = _), D > 0 && (I !== void 0 && A(I, j), this.nav.attr({ translateX: E, translateY: r1 + this.padding + 7 + this.titleHeight, visibility: "inherit" }), [this.up, this.upTracker].forEach(function(G) {\n G.attr({ class: D === 1 ? "highcharts-legend-nav-inactive" : "highcharts-legend-nav-active" });\n }), Q.attr({ text: D + "/" + _ }), [this.down, this.downTracker].forEach(function(G) {\n G.attr({ x: 18 + this.pager.getBBox().width, class: D === _ ? "highcharts-legend-nav-inactive" : "highcharts-legend-nav-active" });\n }, this), j.styledMode || (this.up.attr({ fill: D === 1 ? K.inactiveColor : K.activeColor }), this.upTracker.css({ cursor: D === 1 ? "default" : "pointer" }), this.down.attr({ fill: D === _ ? K.inactiveColor : K.activeColor }), this.downTracker.css({ cursor: D === _ ? "default" : "pointer" })), this.scrollOffset = -U[D - 1] + this.initialItemY, this.scrollGroup.animate({ translateY: this.scrollOffset }), this.currentPage = D, this.positionCheckboxes(), x(() => {\n T(this, "afterScroll", { currentPage: D });\n }, u(C(I, j.renderer.globalAnimation, !0)).duration));\n }\n setItemEvents(R, I, j) {\n let U = this, _ = R.legendItem || {}, r1 = U.chart.renderer.boxWrapper, K = R instanceof l, Q = R instanceof s, E = "highcharts-legend-" + (K ? "point" : "series") + "-active", D = U.chart.styledMode, G = j ? [I, _.symbol] : [_.group], J = (S) => {\n U.allItems.forEach((W) => {\n R !== W && [W].concat(W.linkedSeries || []).forEach((P) => {\n P.setState(S, !K);\n });\n });\n };\n for (let S of G)\n S && S.on("mouseover", function() {\n R.visible && J("inactive"), R.setState("hover"), R.visible && r1.addClass(E), D || I.css(U.options.itemHoverStyle);\n }).on("mouseout", function() {\n U.chart.styledMode || I.css(H(R.visible ? U.itemStyle : U.itemHiddenStyle)), J(""), r1.removeClass(E), R.setState();\n }).on("click", function(W) {\n let P = function() {\n R.setVisible && R.setVisible(), J(R.visible ? "inactive" : "");\n };\n r1.removeClass(E), T(U, "itemClick", { browserEvent: W, legendItem: R }, P), K ? R.firePointEvent("legendItemClick", { browserEvent: W }) : Q && T(R, "legendItemClick", { browserEvent: W });\n });\n }\n createCheckboxForItem(R) {\n R.checkbox = L("input", { type: "checkbox", className: "highcharts-legend-checkbox", checked: R.selected, defaultChecked: R.selected }, this.options.itemCheckboxStyle, this.chart.container), v(R.checkbox, "click", function(I) {\n let j = I.target;\n T(R.series || R, "checkboxClick", { checked: j.checked, item: R }, function() {\n R.select();\n });\n });\n }\n }\n return (M = N || (N = {})).compose = function(V) {\n q(f, "Core.Legend") && v(V, "beforeMargins", function() {\n this.legend = new M(this, this.options.legend);\n });\n }, N;\n }), n(o, "Core/Chart/Chart.js", [o["Core/Animation/AnimationUtilities.js"], o["Core/Axis/Axis.js"], o["Core/Defaults.js"], o["Core/Templating.js"], o["Core/Foundation.js"], o["Core/Globals.js"], o["Core/Renderer/RendererRegistry.js"], o["Core/Series/Series.js"], o["Core/Series/SeriesRegistry.js"], o["Core/Renderer/SVG/SVGRenderer.js"], o["Core/Time.js"], o["Core/Utilities.js"], o["Core/Renderer/HTML/AST.js"], o["Core/Axis/Tick.js"]], function(r, i, a, s, l, p, d, b, M, u, A, z, f, O) {\n let { animate: h, animObject: g, setAnimation: v } = r, { defaultOptions: L, defaultTime: y } = a, { numberFormat: B } = s, { registerEventOptions: X } = l, { charts: F, doc: T, marginNames: w, svg: H, win: C } = p, { seriesTypes: q } = M, { addEvent: m, attr: k, createElement: x, css: N, defined: V, diffObjects: R, discardElement: I, erase: j, error: U, extend: _, find: r1, fireEvent: K, getStyle: Q, isArray: E, isNumber: D, isObject: G, isString: J, merge: S, objectEach: W, pick: P, pInt: Y, relativeLength: Z, removeEvent: t1, splat: i1, syncTimeout: n1, uniqueKey: s1 } = z;\n class d1 {\n static chart(c1, a1, l1) {\n return new d1(c1, a1, l1);\n }\n constructor(c1, a1, l1) {\n this.sharedClips = {};\n let p1 = [...arguments];\n (J(c1) || c1.nodeName) && (this.renderTo = p1.shift()), this.init(p1[0], p1[1]);\n }\n setZoomOptions() {\n let c1 = this.options.chart, a1 = c1.zooming;\n this.zooming = { ...a1, type: P(c1.zoomType, a1.type), key: P(c1.zoomKey, a1.key), pinchType: P(c1.pinchType, a1.pinchType), singleTouch: P(c1.zoomBySingleTouch, a1.singleTouch, !1), resetButton: S(a1.resetButton, c1.resetZoomButton) };\n }\n init(c1, a1) {\n K(this, "init", { args: arguments }, function() {\n let l1 = S(L, c1), p1 = l1.chart;\n this.userOptions = _({}, c1), this.margin = [], this.spacing = [], this.labelCollectors = [], this.callback = a1, this.isResizing = 0, this.options = l1, this.axes = [], this.series = [], this.time = c1.time && Object.keys(c1.time).length ? new A(c1.time) : p.time, this.numberFormatter = p1.numberFormatter || B, this.styledMode = p1.styledMode, this.hasCartesianSeries = p1.showAxes, this.index = F.length, F.push(this), p.chartCount++, X(this, p1), this.xAxis = [], this.yAxis = [], this.pointCount = this.colorCounter = this.symbolCounter = 0, this.setZoomOptions(), K(this, "afterInit"), this.firstRender();\n });\n }\n initSeries(c1) {\n let a1 = this.options.chart, l1 = c1.type || a1.type, p1 = q[l1];\n p1 || U(17, !0, this, { missingModuleFor: l1 });\n let M1 = new p1();\n return typeof M1.init == "function" && M1.init(this, c1), M1;\n }\n setSortedData() {\n this.getSeriesOrderByLinks().forEach(function(c1) {\n c1.points || c1.data || !c1.enabledDataSorting || c1.setData(c1.options.data, !1);\n });\n }\n getSeriesOrderByLinks() {\n return this.series.concat().sort(function(c1, a1) {\n return c1.linkedSeries.length || a1.linkedSeries.length ? a1.linkedSeries.length - c1.linkedSeries.length : 0;\n });\n }\n orderItems(c1, a1 = 0) {\n let l1 = this[c1], p1 = this.options[c1] = i1(this.options[c1]).slice(), M1 = this.userOptions[c1] = this.userOptions[c1] ? i1(this.userOptions[c1]).slice() : [];\n if (this.hasRendered && (p1.splice(a1), M1.splice(a1)), l1)\n for (let A1 = a1, u1 = l1.length; A1 < u1; ++A1) {\n let h1 = l1[A1];\n h1 && (h1.index = A1, h1 instanceof b && (h1.name = h1.getName()), h1.options.isInternal || (p1[A1] = h1.options, M1[A1] = h1.userOptions));\n }\n }\n isInsidePlot(c1, a1, l1 = {}) {\n var S1;\n let { inverted: p1, plotBox: M1, plotLeft: A1, plotTop: u1, scrollablePlotBox: h1 } = this, { scrollLeft: C1 = 0, scrollTop: q1 = 0 } = l1.visiblePlotOnly && ((S1 = this.scrollablePlotArea) == null ? void 0 : S1.scrollingContainer) || {}, W1 = l1.series, R1 = l1.visiblePlotOnly && h1 || M1, k1 = l1.inverted ? a1 : c1, N1 = l1.inverted ? c1 : a1, v1 = { x: k1, y: N1, isInsidePlot: !0, options: l1 };\n if (!l1.ignoreX) {\n let D1 = W1 && (p1 && !this.polar ? W1.yAxis : W1.xAxis) || { pos: A1, len: 1 / 0 }, F1 = l1.paneCoordinates ? D1.pos + k1 : A1 + k1;\n F1 >= Math.max(C1 + A1, D1.pos) && F1 <= Math.min(C1 + A1 + R1.width, D1.pos + D1.len) || (v1.isInsidePlot = !1);\n }\n if (!l1.ignoreY && v1.isInsidePlot) {\n let D1 = !p1 && l1.axis && !l1.axis.isXAxis && l1.axis || W1 && (p1 ? W1.xAxis : W1.yAxis) || { pos: u1, len: 1 / 0 }, F1 = l1.paneCoordinates ? D1.pos + N1 : u1 + N1;\n F1 >= Math.max(q1 + u1, D1.pos) && F1 <= Math.min(q1 + u1 + R1.height, D1.pos + D1.len) || (v1.isInsidePlot = !1);\n }\n return K(this, "afterIsInsidePlot", v1), v1.isInsidePlot;\n }\n redraw(c1) {\n K(this, "beforeRedraw");\n let a1 = this.hasCartesianSeries ? this.axes : this.colorAxis || [], l1 = this.series, p1 = this.pointer, M1 = this.legend, A1 = this.userOptions.legend, u1 = this.renderer, h1 = u1.isHidden(), C1 = [], q1, W1, R1, k1 = this.isDirtyBox, N1 = this.isDirtyLegend, v1;\n for (u1.rootFontSize = u1.boxWrapper.getStyle("font-size"), this.setResponsive && this.setResponsive(!1), v(!!this.hasRendered && c1, this), h1 && this.temporaryDisplay(), this.layOutTitles(!1), R1 = l1.length; R1--; )\n if (((v1 = l1[R1]).options.stacking || v1.options.centerInCategory) && (W1 = !0, v1.isDirty)) {\n q1 = !0;\n break;\n }\n if (q1)\n for (R1 = l1.length; R1--; )\n (v1 = l1[R1]).options.stacking && (v1.isDirty = !0);\n l1.forEach(function(S1) {\n S1.isDirty && (S1.options.legendType === "point" ? (typeof S1.updateTotals == "function" && S1.updateTotals(), N1 = !0) : A1 && (A1.labelFormatter || A1.labelFormat) && (N1 = !0)), S1.isDirtyData && K(S1, "updatedData");\n }), N1 && M1 && M1.options.enabled && (M1.render(), this.isDirtyLegend = !1), W1 && this.getStacks(), a1.forEach(function(S1) {\n S1.updateNames(), S1.setScale();\n }), this.getMargins(), a1.forEach(function(S1) {\n S1.isDirty && (k1 = !0);\n }), a1.forEach(function(S1) {\n let D1 = S1.min + "," + S1.max;\n S1.extKey !== D1 && (S1.extKey = D1, C1.push(function() {\n K(S1, "afterSetExtremes", _(S1.eventArgs, S1.getExtremes())), delete S1.eventArgs;\n })), (k1 || W1) && S1.redraw();\n }), k1 && this.drawChartBox(), K(this, "predraw"), l1.forEach(function(S1) {\n (k1 || S1.isDirty) && S1.visible && S1.redraw(), S1.isDirtyData = !1;\n }), p1 && p1.reset(!0), u1.draw(), K(this, "redraw"), K(this, "render"), h1 && this.temporaryDisplay(!0), C1.forEach(function(S1) {\n S1.call();\n });\n }\n get(c1) {\n let a1 = this.series;\n function l1(M1) {\n return M1.id === c1 || M1.options && M1.options.id === c1;\n }\n let p1 = r1(this.axes, l1) || r1(this.series, l1);\n for (let M1 = 0; !p1 && M1 < a1.length; M1++)\n p1 = r1(a1[M1].points || [], l1);\n return p1;\n }\n getAxes() {\n let c1 = this.userOptions;\n for (let a1 of (K(this, "getAxes"), ["xAxis", "yAxis"]))\n for (let l1 of c1[a1] = i1(c1[a1] || {}))\n new i(this, l1, a1);\n K(this, "afterGetAxes");\n }\n getSelectedPoints() {\n return this.series.reduce((c1, a1) => (a1.getPointsCollection().forEach((l1) => {\n P(l1.selectedStaging, l1.selected) && c1.push(l1);\n }), c1), []);\n }\n getSelectedSeries() {\n return this.series.filter(function(c1) {\n return c1.selected;\n });\n }\n setTitle(c1, a1, l1) {\n this.applyDescription("title", c1), this.applyDescription("subtitle", a1), this.applyDescription("caption", void 0), this.layOutTitles(l1);\n }\n applyDescription(c1, a1) {\n let l1 = this, p1 = this.options[c1] = S(this.options[c1], a1), M1 = this[c1];\n M1 && a1 && (this[c1] = M1 = M1.destroy()), p1 && !M1 && ((M1 = this.renderer.text(p1.text, 0, 0, p1.useHTML).attr({ align: p1.align, class: "highcharts-" + c1, zIndex: p1.zIndex || 4 }).add()).update = function(A1, u1) {\n l1.applyDescription(c1, A1), l1.layOutTitles(u1);\n }, this.styledMode || M1.css(_(c1 === "title" ? { fontSize: this.options.isStock ? "1em" : "1.2em" } : {}, p1.style)), this[c1] = M1);\n }\n layOutTitles(c1 = !0) {\n let a1 = [0, 0, 0], l1 = this.renderer, p1 = this.spacingBox;\n ["title", "subtitle", "caption"].forEach(function(A1) {\n let u1 = this[A1], h1 = this.options[A1], C1 = h1.verticalAlign || "top", q1 = A1 === "title" ? C1 === "top" ? -3 : 0 : C1 === "top" ? a1[0] + 2 : 0;\n if (u1) {\n u1.css({ width: (h1.width || p1.width + (h1.widthAdjust || 0)) + "px" });\n let W1 = l1.fontMetrics(u1).b, R1 = Math.round(u1.getBBox(h1.useHTML).height);\n u1.align(_({ y: C1 === "bottom" ? W1 : q1 + W1, height: R1 }, h1), !1, "spacingBox"), h1.floating || (C1 === "top" ? a1[0] = Math.ceil(a1[0] + R1) : C1 === "bottom" && (a1[2] = Math.ceil(a1[2] + R1)));\n }\n }, this), a1[0] && (this.options.title.verticalAlign || "top") === "top" && (a1[0] += this.options.title.margin), a1[2] && this.options.caption.verticalAlign === "bottom" && (a1[2] += this.options.caption.margin);\n let M1 = !this.titleOffset || this.titleOffset.join(",") !== a1.join(",");\n this.titleOffset = a1, K(this, "afterLayOutTitles"), !this.isDirtyBox && M1 && (this.isDirtyBox = this.isDirtyLegend = M1, this.hasRendered && c1 && this.isDirtyBox && this.redraw());\n }\n getContainerBox() {\n let c1 = [].map.call(this.renderTo.children, (l1) => {\n if (l1 !== this.container) {\n let p1 = l1.style.display;\n return l1.style.display = "none", [l1, p1];\n }\n }), a1 = { width: Q(this.renderTo, "width", !0) || 0, height: Q(this.renderTo, "height", !0) || 0 };\n return c1.filter(Boolean).forEach(([l1, p1]) => {\n l1.style.display = p1;\n }), a1;\n }\n getChartSize() {\n var A1;\n let c1 = this.options.chart, a1 = c1.width, l1 = c1.height, p1 = this.getContainerBox(), M1 = p1.height > 1 && !(!((A1 = this.renderTo.parentElement) != null && A1.style.height) && this.renderTo.style.height === "100%");\n this.chartWidth = Math.max(0, a1 || p1.width || 600), this.chartHeight = Math.max(0, Z(l1, this.chartWidth) || (M1 ? p1.height : 400)), this.containerBox = p1;\n }\n temporaryDisplay(c1) {\n let a1 = this.renderTo, l1;\n if (c1)\n for (; a1 && a1.style; )\n a1.hcOrigStyle && (N(a1, a1.hcOrigStyle), delete a1.hcOrigStyle), a1.hcOrigDetached && (T.body.removeChild(a1), a1.hcOrigDetached = !1), a1 = a1.parentNode;\n else\n for (; a1 && a1.style && (T.body.contains(a1) || a1.parentNode || (a1.hcOrigDetached = !0, T.body.appendChild(a1)), (Q(a1, "display", !1) === "none" || a1.hcOricDetached) && (a1.hcOrigStyle = { display: a1.style.display, height: a1.style.height, overflow: a1.style.overflow }, l1 = { display: "block", overflow: "hidden" }, a1 !== this.renderTo && (l1.height = 0), N(a1, l1), a1.offsetWidth || a1.style.setProperty("display", "block", "important")), (a1 = a1.parentNode) !== T.body); )\n ;\n }\n setClassName(c1) {\n this.container.className = "highcharts-container " + (c1 || "");\n }\n getContainer() {\n var R1;\n let c1 = this.options, a1 = c1.chart, l1 = "data-highcharts-chart", p1 = s1(), M1, A1 = this.renderTo;\n A1 || (this.renderTo = A1 = a1.renderTo), J(A1) && (this.renderTo = A1 = T.getElementById(A1)), A1 || U(13, !0, this);\n let u1 = Y(k(A1, l1));\n D(u1) && F[u1] && F[u1].hasRendered && F[u1].destroy(), k(A1, l1, this.index), A1.innerHTML = f.emptyHTML, a1.skipClone || A1.offsetWidth || this.temporaryDisplay(), this.getChartSize();\n let h1 = this.chartHeight, C1 = this.chartWidth;\n N(A1, { overflow: "hidden" }), this.styledMode || (M1 = _({ position: "relative", overflow: "hidden", width: C1 + "px", height: h1 + "px", textAlign: "left", lineHeight: "normal", zIndex: 0, "-webkit-tap-highlight-color": "rgba(0,0,0,0)", userSelect: "none", "touch-action": "manipulation", outline: "none", padding: "0px" }, a1.style || {}));\n let q1 = x("div", { id: p1 }, M1, A1);\n this.container = q1, this.getChartSize(), C1 === this.chartWidth || (C1 = this.chartWidth, this.styledMode || N(q1, { width: P((R1 = a1.style) == null ? void 0 : R1.width, C1 + "px") })), this.containerBox = this.getContainerBox(), this._cursor = q1.style.cursor;\n let W1 = a1.renderer || !H ? d.getRendererType(a1.renderer) : u;\n if (this.renderer = new W1(q1, C1, h1, void 0, a1.forExport, c1.exporting && c1.exporting.allowHTML, this.styledMode), v(void 0, this), this.setClassName(a1.className), this.styledMode)\n for (let k1 in c1.defs)\n this.renderer.definition(c1.defs[k1]);\n else\n this.renderer.setStyle(a1.style);\n this.renderer.chartIndex = this.index, K(this, "afterGetContainer");\n }\n getMargins(c1) {\n let { spacing: a1, margin: l1, titleOffset: p1 } = this;\n this.resetMargins(), p1[0] && !V(l1[0]) && (this.plotTop = Math.max(this.plotTop, p1[0] + a1[0])), p1[2] && !V(l1[2]) && (this.marginBottom = Math.max(this.marginBottom, p1[2] + a1[2])), this.legend && this.legend.display && this.legend.adjustMargins(l1, a1), K(this, "getMargins"), c1 || this.getAxisMargins();\n }\n getAxisMargins() {\n let c1 = this, a1 = c1.axisOffset = [0, 0, 0, 0], l1 = c1.colorAxis, p1 = c1.margin, M1 = function(A1) {\n A1.forEach(function(u1) {\n u1.visible && u1.getOffset();\n });\n };\n c1.hasCartesianSeries ? M1(c1.axes) : l1 && l1.length && M1(l1), w.forEach(function(A1, u1) {\n V(p1[u1]) || (c1[A1] += a1[u1]);\n }), c1.setChartSize();\n }\n getOptions() {\n return R(this.userOptions, L);\n }\n reflow(c1) {\n var M1;\n let a1 = this, l1 = a1.containerBox, p1 = a1.getContainerBox();\n (M1 = a1.pointer) == null || delete M1.chartPosition, !a1.isPrinting && !a1.isResizing && l1 && p1.width && ((p1.width !== l1.width || p1.height !== l1.height) && (z.clearTimeout(a1.reflowTimeout), a1.reflowTimeout = n1(function() {\n a1.container && a1.setSize(void 0, void 0, !1);\n }, c1 ? 100 : 0)), a1.containerBox = p1);\n }\n setReflow() {\n let c1 = this, a1 = (l1) => {\n var p1;\n (p1 = c1.options) != null && p1.chart.reflow && c1.hasLoaded && c1.reflow(l1);\n };\n if (typeof ResizeObserver == "function")\n new ResizeObserver(a1).observe(c1.renderTo);\n else {\n let l1 = m(C, "resize", a1);\n m(this, "destroy", l1);\n }\n }\n setSize(c1, a1, l1) {\n let p1 = this, M1 = p1.renderer;\n p1.isResizing += 1, v(l1, p1);\n let A1 = M1.globalAnimation;\n p1.oldChartHeight = p1.chartHeight, p1.oldChartWidth = p1.chartWidth, c1 !== void 0 && (p1.options.chart.width = c1), a1 !== void 0 && (p1.options.chart.height = a1), p1.getChartSize();\n let { chartWidth: u1, chartHeight: h1, scrollablePixelsX: C1 = 0, scrollablePixelsY: q1 = 0 } = p1;\n (p1.isDirtyBox || u1 !== p1.oldChartWidth || h1 !== p1.oldChartHeight) && (p1.styledMode || (A1 ? h : N)(p1.container, { width: `${u1 + C1}px`, height: `${h1 + q1}px` }, A1), p1.setChartSize(!0), M1.setSize(u1, h1, A1), p1.axes.forEach(function(W1) {\n W1.isDirty = !0, W1.setScale();\n }), p1.isDirtyLegend = !0, p1.isDirtyBox = !0, p1.layOutTitles(), p1.getMargins(), p1.redraw(A1), p1.oldChartHeight = void 0, K(p1, "resize"), setTimeout(() => {\n p1 && K(p1, "endResize");\n }, g(A1).duration)), p1.isResizing -= 1;\n }\n setChartSize(c1) {\n let a1, l1, p1, M1, { chartHeight: A1, chartWidth: u1, inverted: h1, spacing: C1, renderer: q1 } = this, W1 = this.clipOffset, R1 = Math[h1 ? "floor" : "round"];\n this.plotLeft = a1 = Math.round(this.plotLeft), this.plotTop = l1 = Math.round(this.plotTop), this.plotWidth = p1 = Math.max(0, Math.round(u1 - a1 - this.marginRight)), this.plotHeight = M1 = Math.max(0, Math.round(A1 - l1 - this.marginBottom)), this.plotSizeX = h1 ? M1 : p1, this.plotSizeY = h1 ? p1 : M1, this.spacingBox = q1.spacingBox = { x: C1[3], y: C1[0], width: u1 - C1[3] - C1[1], height: A1 - C1[0] - C1[2] }, this.plotBox = q1.plotBox = { x: a1, y: l1, width: p1, height: M1 }, W1 && (this.clipBox = { x: R1(W1[3]), y: R1(W1[0]), width: R1(this.plotSizeX - W1[1] - W1[3]), height: R1(this.plotSizeY - W1[0] - W1[2]) }), c1 || (this.axes.forEach(function(k1) {\n k1.setAxisSize(), k1.setAxisTranslation();\n }), q1.alignElements()), K(this, "afterSetChartSize", { skipAxes: c1 });\n }\n resetMargins() {\n K(this, "resetMargins");\n let c1 = this, a1 = c1.options.chart, l1 = a1.plotBorderWidth || 0, p1 = l1 / 2;\n ["margin", "spacing"].forEach(function(M1) {\n let A1 = a1[M1], u1 = G(A1) ? A1 : [A1, A1, A1, A1];\n ["Top", "Right", "Bottom", "Left"].forEach(function(h1, C1) {\n c1[M1][C1] = P(a1[M1 + h1], u1[C1]);\n });\n }), w.forEach(function(M1, A1) {\n c1[M1] = P(c1.margin[A1], c1.spacing[A1]);\n }), c1.axisOffset = [0, 0, 0, 0], c1.clipOffset = [p1, p1, p1, p1], c1.plotBorderWidth = l1;\n }\n drawChartBox() {\n let c1 = this.options.chart, a1 = this.renderer, l1 = this.chartWidth, p1 = this.chartHeight, M1 = this.styledMode, A1 = this.plotBGImage, u1 = c1.backgroundColor, h1 = c1.plotBackgroundColor, C1 = c1.plotBackgroundImage, q1 = this.plotLeft, W1 = this.plotTop, R1 = this.plotWidth, k1 = this.plotHeight, N1 = this.plotBox, v1 = this.clipRect, S1 = this.clipBox, D1 = this.chartBackground, F1 = this.plotBackground, U1 = this.plotBorder, h0, O0, w1, g1 = "animate";\n D1 || (this.chartBackground = D1 = a1.rect().addClass("highcharts-background").add(), g1 = "attr"), M1 ? h0 = O0 = D1.strokeWidth() : (O0 = (h0 = c1.borderWidth || 0) + (c1.shadow ? 8 : 0), w1 = { fill: u1 || "none" }, (h0 || D1["stroke-width"]) && (w1.stroke = c1.borderColor, w1["stroke-width"] = h0), D1.attr(w1).shadow(c1.shadow)), D1[g1]({ x: O0 / 2, y: O0 / 2, width: l1 - O0 - h0 % 2, height: p1 - O0 - h0 % 2, r: c1.borderRadius }), g1 = "animate", F1 || (g1 = "attr", this.plotBackground = F1 = a1.rect().addClass("highcharts-plot-background").add()), F1[g1](N1), !M1 && (F1.attr({ fill: h1 || "none" }).shadow(c1.plotShadow), C1 && (A1 ? (C1 !== A1.attr("href") && A1.attr("href", C1), A1.animate(N1)) : this.plotBGImage = a1.image(C1, q1, W1, R1, k1).add())), v1 ? v1.animate({ width: S1.width, height: S1.height }) : this.clipRect = a1.clipRect(S1), g1 = "animate", U1 || (g1 = "attr", this.plotBorder = U1 = a1.rect().addClass("highcharts-plot-border").attr({ zIndex: 1 }).add()), M1 || U1.attr({ stroke: c1.plotBorderColor, "stroke-width": c1.plotBorderWidth || 0, fill: "none" }), U1[g1](U1.crisp({ x: q1, y: W1, width: R1, height: k1 }, -U1.strokeWidth())), this.isDirtyBox = !1, K(this, "afterDrawChartBox");\n }\n propFromSeries() {\n let c1, a1, l1, p1 = this, M1 = p1.options.chart, A1 = p1.options.series;\n ["inverted", "angular", "polar"].forEach(function(u1) {\n for (a1 = q[M1.type], l1 = M1[u1] || a1 && a1.prototype[u1], c1 = A1 && A1.length; !l1 && c1--; )\n (a1 = q[A1[c1].type]) && a1.prototype[u1] && (l1 = !0);\n p1[u1] = l1;\n });\n }\n linkSeries(c1) {\n let a1 = this, l1 = a1.series;\n l1.forEach(function(p1) {\n p1.linkedSeries.length = 0;\n }), l1.forEach(function(p1) {\n let { linkedTo: M1 } = p1.options;\n if (J(M1)) {\n let A1;\n (A1 = M1 === ":previous" ? a1.series[p1.index - 1] : a1.get(M1)) && A1.linkedParent !== p1 && (A1.linkedSeries.push(p1), p1.linkedParent = A1, A1.enabledDataSorting && p1.setDataSortingOptions(), p1.visible = P(p1.options.visible, A1.options.visible, p1.visible));\n }\n }), K(this, "afterLinkSeries", { isUpdating: c1 });\n }\n renderSeries() {\n this.series.forEach(function(c1) {\n c1.translate(), c1.render();\n });\n }\n render() {\n var q1;\n let c1 = this.axes, a1 = this.colorAxis, l1 = this.renderer, p1 = this.options.chart.axisLayoutRuns || 2, M1 = (W1) => {\n W1.forEach((R1) => {\n R1.visible && R1.render();\n });\n }, A1 = 0, u1 = !0, h1, C1 = 0;\n for (let W1 of (this.setTitle(), K(this, "beforeMargins"), (q1 = this.getStacks) == null || q1.call(this), this.getMargins(!0), this.setChartSize(), c1)) {\n let { options: R1 } = W1, { labels: k1 } = R1;\n if (this.hasCartesianSeries && W1.horiz && W1.visible && k1.enabled && W1.series.length && W1.coll !== "colorAxis" && !this.polar) {\n A1 = R1.tickLength, W1.createGroups();\n let N1 = new O(W1, 0, "", !0), v1 = N1.createLabel("x", k1);\n if (N1.destroy(), v1 && P(k1.reserveSpace, !D(R1.crossing)) && (A1 = v1.getBBox().height + k1.distance + Math.max(R1.offset || 0, 0)), A1) {\n v1 == null || v1.destroy();\n break;\n }\n }\n }\n for (this.plotHeight = Math.max(this.plotHeight - A1, 0); (u1 || h1 || p1 > 1) && C1 < p1; ) {\n let W1 = this.plotWidth, R1 = this.plotHeight;\n for (let k1 of c1)\n C1 === 0 ? k1.setScale() : (k1.horiz && u1 || !k1.horiz && h1) && k1.setTickInterval(!0);\n C1 === 0 ? this.getAxisMargins() : this.getMargins(), u1 = W1 / this.plotWidth > (C1 ? 1 : 1.1), h1 = R1 / this.plotHeight > (C1 ? 1 : 1.05), C1++;\n }\n this.drawChartBox(), this.hasCartesianSeries ? M1(c1) : a1 && a1.length && M1(a1), this.seriesGroup || (this.seriesGroup = l1.g("series-group").attr({ zIndex: 3 }).shadow(this.options.chart.seriesGroupShadow).add()), this.renderSeries(), this.addCredits(), this.setResponsive && this.setResponsive(), this.hasRendered = !0;\n }\n addCredits(c1) {\n let a1 = this, l1 = S(!0, this.options.credits, c1);\n l1.enabled && !this.credits && (this.credits = this.renderer.text(l1.text + (this.mapCredits || ""), 0, 0).addClass("highcharts-credits").on("click", function() {\n l1.href && (C.location.href = l1.href);\n }).attr({ align: l1.position.align, zIndex: 8 }), a1.styledMode || this.credits.css(l1.style), this.credits.add().align(l1.position), this.credits.update = function(p1) {\n a1.credits = a1.credits.destroy(), a1.addCredits(p1);\n });\n }\n destroy() {\n let c1, a1 = this, l1 = a1.axes, p1 = a1.series, M1 = a1.container, A1 = M1 && M1.parentNode;\n for (K(a1, "destroy"), a1.renderer.forExport ? j(F, a1) : F[a1.index] = void 0, p.chartCount--, a1.renderTo.removeAttribute("data-highcharts-chart"), t1(a1), c1 = l1.length; c1--; )\n l1[c1] = l1[c1].destroy();\n for (this.scroller && this.scroller.destroy && this.scroller.destroy(), c1 = p1.length; c1--; )\n p1[c1] = p1[c1].destroy();\n ["title", "subtitle", "chartBackground", "plotBackground", "plotBGImage", "plotBorder", "seriesGroup", "clipRect", "credits", "pointer", "rangeSelector", "legend", "resetZoomButton", "tooltip", "renderer"].forEach(function(u1) {\n let h1 = a1[u1];\n h1 && h1.destroy && (a1[u1] = h1.destroy());\n }), M1 && (M1.innerHTML = f.emptyHTML, t1(M1), A1 && I(M1)), W(a1, function(u1, h1) {\n delete a1[h1];\n });\n }\n firstRender() {\n var p1;\n let c1 = this, a1 = c1.options;\n c1.getContainer(), c1.resetMargins(), c1.setChartSize(), c1.propFromSeries(), c1.getAxes();\n let l1 = E(a1.series) ? a1.series : [];\n a1.series = [], l1.forEach(function(M1) {\n c1.initSeries(M1);\n }), c1.linkSeries(), c1.setSortedData(), K(c1, "beforeRender"), c1.render(), (p1 = c1.pointer) == null || p1.getChartPosition(), c1.renderer.imgCount || c1.hasLoaded || c1.onload(), c1.temporaryDisplay(!0);\n }\n onload() {\n this.callbacks.concat([this.callback]).forEach(function(c1) {\n c1 && this.index !== void 0 && c1.apply(this, [this]);\n }, this), K(this, "load"), K(this, "render"), V(this.index) && this.setReflow(), this.warnIfA11yModuleNotLoaded(), this.hasLoaded = !0;\n }\n warnIfA11yModuleNotLoaded() {\n let { options: c1, title: a1 } = this;\n !c1 || this.accessibility || (this.renderer.boxWrapper.attr({ role: "img", "aria-label": (a1 && a1.element.textContent || "").replace(/ this.transform({ reset: !0, trigger: "zoom" }));\n }\n pan(c1, a1) {\n let l1 = this, p1 = typeof a1 == "object" ? a1 : { enabled: a1, type: "x" }, M1 = p1.type, A1 = M1 && l1[{ x: "xAxis", xy: "axes", y: "yAxis" }[M1]].filter((h1) => h1.options.panningEnabled && !h1.options.isInternal), u1 = l1.options.chart;\n u1 != null && u1.panning && (u1.panning = p1), K(this, "pan", { originalEvent: c1 }, () => {\n l1.transform({ axes: A1, event: c1, to: { x: c1.chartX - (l1.mouseDownX || 0), y: c1.chartY - (l1.mouseDownY || 0) }, trigger: "pan" }), N(l1.container, { cursor: "move" });\n });\n }\n transform(c1) {\n var k1;\n let { axes: a1 = this.axes, event: l1, from: p1 = {}, reset: M1, selection: A1, to: u1 = {}, trigger: h1 } = c1, { inverted: C1 } = this, q1 = !1, W1, R1;\n for (let N1 of ((k1 = this.hoverPoints) == null || k1.forEach((v1) => v1.setState()), a1)) {\n let { horiz: v1, len: S1, minPointOffset: D1 = 0, options: F1, reversed: U1 } = N1, h0 = v1 ? "width" : "height", O0 = v1 ? "x" : "y", w1 = P(u1[h0], N1.len), g1 = P(p1[h0], N1.len), E1 = 10 > Math.abs(w1) ? 1 : w1 / g1, B1 = (p1[O0] || 0) + g1 / 2 - N1.pos, K1 = B1 - ((u1[O0] ?? N1.pos) + w1 / 2 - N1.pos) / E1, p0 = U1 && !C1 || !U1 && C1 ? -1 : 1;\n if (!M1 && (B1 < 0 || B1 > N1.len))\n continue;\n let e0 = N1.toValue(K1, !0) + (A1 || N1.isOrdinal ? 0 : D1 * p0), H1 = N1.toValue(K1 + S1 / E1, !0) - (A1 || N1.isOrdinal ? 0 : D1 * p0 || 0), x1 = N1.allExtremes;\n if (e0 > H1 && ([e0, H1] = [H1, e0]), E1 === 1 && !M1 && N1.coll === "yAxis" && !x1) {\n for (let V0 of N1.series) {\n let W0 = V0.getExtremes(V0.getProcessedData(!0).yData, !0);\n x1 ?? (x1 = { dataMin: Number.MAX_VALUE, dataMax: -Number.MAX_VALUE }), D(W0.dataMin) && D(W0.dataMax) && (x1.dataMin = Math.min(W0.dataMin, x1.dataMin), x1.dataMax = Math.max(W0.dataMax, x1.dataMax));\n }\n N1.allExtremes = x1;\n }\n let { dataMin: I1, dataMax: X1, min: J1, max: f0 } = _(N1.getExtremes(), x1 || {}), I0 = I1 ?? F1.min, O1 = X1 ?? F1.max, V1 = H1 - e0, G1 = N1.categories ? 0 : Math.min(V1, O1 - I0), i0 = I0 - G1 * (V(F1.min) ? 0 : F1.minPadding), b0 = O1 + G1 * (V(F1.max) ? 0 : F1.maxPadding), g0 = N1.allowZoomOutside || E1 === 1 || h1 !== "zoom" && E1 > 1, u0 = Math.min(F1.min ?? i0, i0, g0 ? J1 : i0), z0 = Math.max(F1.max ?? b0, b0, g0 ? f0 : b0);\n (!N1.isOrdinal || N1.options.overscroll || E1 !== 1 || M1) && (e0 < u0 && (e0 = u0, E1 >= 1 && (H1 = e0 + V1)), H1 > z0 && (H1 = z0, E1 >= 1 && (e0 = H1 - V1)), (M1 || N1.series.length && (e0 !== J1 || H1 !== f0) && e0 >= u0 && H1 <= z0) && (A1 ? A1[N1.coll].push({ axis: N1, min: e0, max: H1 }) : (N1.isPanning = h1 !== "zoom", N1.isPanning && (R1 = !0), N1.setExtremes(M1 ? void 0 : e0, M1 ? void 0 : H1, !1, !1, { move: K1, trigger: h1, scale: E1 }), !M1 && (e0 > u0 || H1 < z0) && h1 !== "mousewheel" && (W1 = !0)), q1 = !0), l1 && (this[v1 ? "mouseDownX" : "mouseDownY"] = l1[v1 ? "chartX" : "chartY"]));\n }\n return q1 && (A1 ? K(this, "selection", A1, () => {\n delete c1.selection, c1.trigger = "zoom", this.transform(c1);\n }) : (!W1 || R1 || this.resetZoomButton ? !W1 && this.resetZoomButton && (this.resetZoomButton = this.resetZoomButton.destroy()) : this.showResetZoom(), this.redraw(h1 === "zoom" && (this.options.chart.animation ?? this.pointCount < 100)))), q1;\n }\n }\n return _(d1.prototype, { callbacks: [], collectionsWithInit: { xAxis: [d1.prototype.addAxis, [!0]], yAxis: [d1.prototype.addAxis, [!1]], series: [d1.prototype.addSeries] }, collectionsWithUpdate: ["xAxis", "yAxis", "series"], propsRequireDirtyBox: ["backgroundColor", "borderColor", "borderWidth", "borderRadius", "plotBackgroundColor", "plotBackgroundImage", "plotBorderColor", "plotBorderWidth", "plotShadow", "shadow"], propsRequireReflow: ["margin", "marginTop", "marginRight", "marginBottom", "marginLeft", "spacing", "spacingTop", "spacingRight", "spacingBottom", "spacingLeft"], propsRequireUpdateSeries: ["chart.inverted", "chart.polar", "chart.ignoreHiddenSeries", "chart.type", "colors", "plotOptions", "time", "tooltip"] }), d1;\n }), n(o, "Extensions/ScrollablePlotArea.js", [o["Core/Animation/AnimationUtilities.js"], o["Core/Globals.js"], o["Core/Renderer/RendererRegistry.js"], o["Core/Utilities.js"]], function(r, i, a, s) {\n let { stop: l } = r, { composed: p } = i, { addEvent: d, createElement: b, css: M, defined: u, merge: A, pushUnique: z } = s;\n function f() {\n let g = this.scrollablePlotArea;\n (this.scrollablePixelsX || this.scrollablePixelsY) && !g && (this.scrollablePlotArea = g = new h(this)), g == null || g.applyFixed();\n }\n function O() {\n this.chart.scrollablePlotArea && (this.chart.scrollablePlotArea.isDirty = !0);\n }\n class h {\n static compose(v, L, y) {\n z(p, this.compose) && (d(v, "afterInit", O), d(L, "afterSetChartSize", (B) => this.afterSetSize(B.target, B)), d(L, "render", f), d(y, "show", O));\n }\n static afterSetSize(v, L) {\n let y, B, X, { minWidth: F, minHeight: T } = v.options.chart.scrollablePlotArea || {}, { clipBox: w, plotBox: H, inverted: C, renderer: q } = v;\n if (!q.forExport && (F ? (v.scrollablePixelsX = y = Math.max(0, F - v.chartWidth), y && (v.scrollablePlotBox = A(v.plotBox), H.width = v.plotWidth += y, w[C ? "height" : "width"] += y, X = !0)) : T && (v.scrollablePixelsY = B = Math.max(0, T - v.chartHeight), u(B) && (v.scrollablePlotBox = A(v.plotBox), H.height = v.plotHeight += B, w[C ? "width" : "height"] += B, X = !1)), u(X) && !L.skipAxes))\n for (let m of v.axes)\n m.horiz === X && (m.setAxisSize(), m.setAxisTranslation());\n }\n constructor(v) {\n var k;\n let L, y = v.options.chart, B = a.getRendererType(), X = y.scrollablePlotArea || {}, F = this.moveFixedElements.bind(this), T = { WebkitOverflowScrolling: "touch", overflowX: "hidden", overflowY: "hidden" };\n v.scrollablePixelsX && (T.overflowX = "auto"), v.scrollablePixelsY && (T.overflowY = "auto"), this.chart = v;\n let w = this.parentDiv = b("div", { className: "highcharts-scrolling-parent" }, { position: "relative" }, v.renderTo), H = this.scrollingContainer = b("div", { className: "highcharts-scrolling" }, T, w), C = this.innerContainer = b("div", { className: "highcharts-inner-container" }, void 0, H), q = this.fixedDiv = b("div", { className: "highcharts-fixed" }, { position: "absolute", overflow: "hidden", pointerEvents: "none", zIndex: (((k = y.style) == null ? void 0 : k.zIndex) || 0) + 2, top: 0 }, void 0, !0), m = this.fixedRenderer = new B(q, v.chartWidth, v.chartHeight, y.style);\n this.mask = m.path().attr({ fill: y.backgroundColor || "#fff", "fill-opacity": X.opacity ?? 0.85, zIndex: -1 }).addClass("highcharts-scrollable-mask").add(), H.parentNode.insertBefore(q, H), M(v.renderTo, { overflow: "visible" }), d(v, "afterShowResetZoom", F), d(v, "afterApplyDrilldown", F), d(v, "afterLayOutTitles", F), d(H, "scroll", () => {\n let { pointer: x, hoverPoint: N } = v;\n x && (delete x.chartPosition, N && (L = N), x.runPointActions(void 0, L, !0));\n }), C.appendChild(v.container);\n }\n applyFixed() {\n var D;\n let { chart: v, fixedRenderer: L, isDirty: y, scrollingContainer: B } = this, { axisOffset: X, chartWidth: F, chartHeight: T, container: w, plotHeight: H, plotLeft: C, plotTop: q, plotWidth: m, scrollablePixelsX: k = 0, scrollablePixelsY: x = 0 } = v, { scrollPositionX: N = 0, scrollPositionY: V = 0 } = v.options.chart.scrollablePlotArea || {}, R = F + k, I = T + x;\n L.setSize(F, T), (y ?? !0) && (this.isDirty = !1, this.moveFixedElements()), l(v.container), M(w, { width: `${R}px`, height: `${I}px` }), v.renderer.boxWrapper.attr({ width: R, height: I, viewBox: [0, 0, R, I].join(" ") }), (D = v.chartBackground) == null || D.attr({ width: R, height: I }), M(B, { width: `${F}px`, height: `${T}px` }), u(y) || (B.scrollLeft = k * N, B.scrollTop = x * V);\n let j = q - X[0] - 1, U = C - X[3] - 1, _ = q + H + X[2] + 1, r1 = C + m + X[1] + 1, K = C + m - k, Q = q + H - x, E = [["M", 0, 0]];\n k ? E = [["M", 0, j], ["L", C - 1, j], ["L", C - 1, _], ["L", 0, _], ["Z"], ["M", K, j], ["L", F, j], ["L", F, _], ["L", K, _], ["Z"]] : x && (E = [["M", U, 0], ["L", U, q - 1], ["L", r1, q - 1], ["L", r1, 0], ["Z"], ["M", U, Q], ["L", U, T], ["L", r1, T], ["L", r1, Q], ["Z"]]), v.redrawTrigger !== "adjustHeight" && this.mask.attr({ d: E });\n }\n moveFixedElements() {\n let v, { container: L, inverted: y, scrollablePixelsX: B, scrollablePixelsY: X } = this.chart, F = this.fixedRenderer, T = h.fixedSelectors;\n for (let w of (B && !y ? v = ".highcharts-yaxis" : B && y || X && !y ? v = ".highcharts-xaxis" : X && y && (v = ".highcharts-yaxis"), v && T.push(`${v}:not(.highcharts-radial-axis)`, `${v}-labels:not(.highcharts-radial-axis-labels)`), T))\n [].forEach.call(L.querySelectorAll(w), (H) => {\n (H.namespaceURI === F.SVG_NS ? F.box : F.box.parentNode).appendChild(H), H.style.pointerEvents = "auto";\n });\n }\n }\n return h.fixedSelectors = [".highcharts-breadcrumbs-group", ".highcharts-contextbutton", ".highcharts-caption", ".highcharts-credits", ".highcharts-drillup-button", ".highcharts-legend", ".highcharts-legend-checkbox", ".highcharts-navigator-series", ".highcharts-navigator-xaxis", ".highcharts-navigator-yaxis", ".highcharts-navigator", ".highcharts-range-selector-group", ".highcharts-reset-zoom", ".highcharts-scrollbar", ".highcharts-subtitle", ".highcharts-title"], h;\n }), n(o, "Core/Axis/Stacking/StackItem.js", [o["Core/Templating.js"], o["Core/Series/SeriesRegistry.js"], o["Core/Utilities.js"]], function(r, i, a) {\n let { format: s } = r, { series: l } = i, { destroyObjectProperties: p, fireEvent: d, isNumber: b, pick: M } = a;\n return class {\n constructor(u, A, z, f, O) {\n let h = u.chart.inverted, g = u.reversed;\n this.axis = u;\n let v = this.isNegative = !!z != !!g;\n this.options = A = A || {}, this.x = f, this.total = null, this.cumulative = null, this.points = {}, this.hasValidPoints = !1, this.stack = O, this.leftCliff = 0, this.rightCliff = 0, this.alignOptions = { align: A.align || (h ? v ? "left" : "right" : "center"), verticalAlign: A.verticalAlign || (h ? "middle" : v ? "bottom" : "top"), y: A.y, x: A.x }, this.textAlign = A.textAlign || (h ? v ? "right" : "left" : "center");\n }\n destroy() {\n p(this, this.axis);\n }\n render(u) {\n let A = this.axis.chart, z = this.options, f = z.format, O = f ? s(f, this, A) : z.formatter.call(this);\n if (this.label)\n this.label.attr({ text: O, visibility: "hidden" });\n else {\n this.label = A.renderer.label(O, null, void 0, z.shape, void 0, void 0, z.useHTML, !1, "stack-labels");\n let h = { r: z.borderRadius || 0, text: O, padding: M(z.padding, 5), visibility: "hidden" };\n A.styledMode || (h.fill = z.backgroundColor, h.stroke = z.borderColor, h["stroke-width"] = z.borderWidth, this.label.css(z.style || {})), this.label.attr(h), this.label.added || this.label.add(u);\n }\n this.label.labelrank = A.plotSizeY, d(this, "afterRender");\n }\n setOffset(u, A, z, f, O, h) {\n let { alignOptions: g, axis: v, label: L, options: y, textAlign: B } = this, X = v.chart, F = this.getStackBox({ xOffset: u, width: A, boxBottom: z, boxTop: f, defaultX: O, xAxis: h }), { verticalAlign: T } = g;\n if (L && F) {\n let w = L.getBBox(void 0, 0), H = L.padding, C = M(y.overflow, "justify") === "justify", q;\n g.x = y.x || 0, g.y = y.y || 0;\n let { x: m, y: k } = this.adjustStackPosition({ labelBox: w, verticalAlign: T, textAlign: B });\n F.x -= m, F.y -= k, L.align(g, !1, F), (q = X.isInsidePlot(L.alignAttr.x + g.x + m, L.alignAttr.y + g.y + k)) || (C = !1), C && l.prototype.justifyDataLabel.call(v, L, g, L.alignAttr, w, F), L.attr({ x: L.alignAttr.x, y: L.alignAttr.y, rotation: y.rotation, rotationOriginX: w.width * { left: 0, center: 0.5, right: 1 }[y.textAlign || "center"], rotationOriginY: w.height / 2 }), M(!C && y.crop, !0) && (q = b(L.x) && b(L.y) && X.isInsidePlot(L.x - H + (L.width || 0), L.y) && X.isInsidePlot(L.x + H, L.y)), L[q ? "show" : "hide"]();\n }\n d(this, "afterSetOffset", { xOffset: u, width: A });\n }\n adjustStackPosition({ labelBox: u, verticalAlign: A, textAlign: z }) {\n let f = { bottom: 0, middle: 1, top: 2, right: 1, center: 0, left: -1 }, O = f[A], h = f[z];\n return { x: u.width / 2 + u.width / 2 * h, y: u.height / 2 * O };\n }\n getStackBox(u) {\n let A = this.axis, z = A.chart, { boxTop: f, defaultX: O, xOffset: h, width: g, boxBottom: v } = u, L = A.stacking.usePercentage ? 100 : M(f, this.total, 0), y = A.toPixels(L), B = u.xAxis || z.xAxis[0], X = M(O, B.translate(this.x)) + h, F = Math.abs(y - A.toPixels(v || b(A.min) && A.logarithmic && A.logarithmic.lin2log(A.min) || 0)), T = z.inverted, w = this.isNegative;\n return T ? { x: (w ? y : y - F) - z.plotLeft, y: B.height - X - g + B.top - z.plotTop, width: F, height: g } : { x: X + B.transB - z.plotLeft, y: (w ? y - F : y) - z.plotTop, width: g, height: F };\n }\n };\n }), n(o, "Core/Axis/Stacking/StackingAxis.js", [o["Core/Animation/AnimationUtilities.js"], o["Core/Axis/Axis.js"], o["Core/Series/SeriesRegistry.js"], o["Core/Axis/Stacking/StackItem.js"], o["Core/Utilities.js"]], function(r, i, a, s, l) {\n var p;\n let { getDeferredAnimation: d } = r, { series: { prototype: b } } = a, { addEvent: M, correctFloat: u, defined: A, destroyObjectProperties: z, fireEvent: f, isArray: O, isNumber: h, objectEach: g, pick: v } = l;\n function L() {\n let q = this.inverted;\n this.axes.forEach((m) => {\n m.stacking && m.stacking.stacks && m.hasVisibleSeries && (m.stacking.oldStacks = m.stacking.stacks);\n }), this.series.forEach((m) => {\n let k = m.xAxis && m.xAxis.options || {};\n m.options.stacking && m.reserveSpace() && (m.stackKey = [m.type, v(m.options.stack, ""), q ? k.top : k.left, q ? k.height : k.width].join(","));\n });\n }\n function y() {\n var m;\n let q = this.stacking;\n if (q) {\n let k = q.stacks;\n g(k, (x, N) => {\n z(x), delete k[N];\n }), (m = q.stackTotalGroup) == null || m.destroy();\n }\n }\n function B() {\n this.stacking || (this.stacking = new C(this));\n }\n function X(q, m, k, x) {\n return !A(q) || q.x !== m || x && q.stackKey !== x ? q = { x: m, index: 0, key: x, stackKey: x } : q.index++, q.key = [k, m, q.index].join(","), q;\n }\n function F() {\n let q, m = this, k = m.yAxis, x = m.stackKey || "", N = k.stacking.stacks, V = m.processedXData, R = m.options.stacking, I = m[R + "Stacker"];\n I && [x, "-" + x].forEach((j) => {\n var Q;\n let U = V.length, _, r1, K;\n for (; U--; )\n _ = V[U], q = m.getStackIndicator(q, _, m.index, j), r1 = (Q = N[j]) == null ? void 0 : Q[_], (K = r1 == null ? void 0 : r1.points[q.key || ""]) && I.call(m, K, r1, U);\n });\n }\n function T(q, m, k) {\n let x = m.total ? 100 / m.total : 0;\n q[0] = u(q[0] * x), q[1] = u(q[1] * x), this.stackedYData[k] = q[1];\n }\n function w(q) {\n (this.is("column") || this.is("columnrange")) && (this.options.centerInCategory && !this.options.stacking && this.chart.series.length > 1 ? b.setStackedPoints.call(this, q, "group") : q.stacking.resetStacks());\n }\n function H(q, m) {\n var s1, d1;\n let k, x, N, V, R, I, j, U, _, r1 = m || this.options.stacking;\n if (!r1 || !this.reserveSpace() || ({ group: "xAxis" }[r1] || "yAxis") !== q.coll)\n return;\n let K = this.processedXData, Q = this.processedYData, E = [], D = Q.length, G = this.options, J = G.threshold || 0, S = G.startFromThreshold ? J : 0, W = G.stack, P = m ? `${this.type},${r1}` : this.stackKey || "", Y = "-" + P, Z = this.negStacks, t1 = q.stacking, i1 = t1.stacks, n1 = t1.oldStacks;\n for (t1.stacksTouched += 1, j = 0; j < D; j++) {\n U = K[j], _ = Q[j], I = (k = this.getStackIndicator(k, U, this.index)).key || "", i1[R = (x = Z && _ < (S ? 0 : J)) ? Y : P] || (i1[R] = {}), i1[R][U] || ((s1 = n1[R]) != null && s1[U] ? (i1[R][U] = n1[R][U], i1[R][U].total = null) : i1[R][U] = new s(q, q.options.stackLabels, !!x, U, W)), N = i1[R][U], _ !== null ? (N.points[I] = N.points[this.index] = [v(N.cumulative, S)], A(N.cumulative) || (N.base = I), N.touched = t1.stacksTouched, k.index > 0 && this.singleStacks === !1 && (N.points[I][0] = N.points[this.index + "," + U + ",0"][0])) : (delete N.points[I], delete N.points[this.index]);\n let b1 = N.total || 0;\n r1 === "percent" ? (V = x ? P : Y, b1 = Z && ((d1 = i1[V]) != null && d1[U]) ? (V = i1[V][U]).total = Math.max(V.total || 0, b1) + Math.abs(_) || 0 : u(b1 + (Math.abs(_) || 0))) : r1 === "group" ? (O(_) && (_ = _[0]), _ !== null && b1++) : b1 = u(b1 + (_ || 0)), r1 === "group" ? N.cumulative = (b1 || 1) - 1 : N.cumulative = u(v(N.cumulative, S) + (_ || 0)), N.total = b1, _ !== null && (N.points[I].push(N.cumulative), E[j] = N.cumulative, N.hasValidPoints = !0);\n }\n r1 === "percent" && (t1.usePercentage = !0), r1 !== "group" && (this.stackedYData = E), t1.oldStacks = {};\n }\n class C {\n constructor(m) {\n this.oldStacks = {}, this.stacks = {}, this.stacksTouched = 0, this.axis = m;\n }\n buildStacks() {\n let m, k, x = this.axis, N = x.series, V = x.coll === "xAxis", R = x.options.reversedStacks, I = N.length;\n for (this.resetStacks(), this.usePercentage = !1, k = I; k--; )\n m = N[R ? k : I - k - 1], V && m.setGroupedPoints(x), m.setStackedPoints(x);\n if (!V)\n for (k = 0; k < I; k++)\n N[k].modifyStacks();\n f(x, "afterBuildStacks");\n }\n cleanStacks() {\n this.oldStacks && (this.stacks = this.oldStacks, g(this.stacks, (m) => {\n g(m, (k) => {\n k.cumulative = k.total;\n });\n }));\n }\n resetStacks() {\n g(this.stacks, (m) => {\n g(m, (k, x) => {\n h(k.touched) && k.touched < this.stacksTouched ? (k.destroy(), delete m[x]) : (k.total = null, k.cumulative = null);\n });\n });\n }\n renderStackTotals() {\n var I;\n let m = this.axis, k = m.chart, x = k.renderer, N = this.stacks, V = d(k, ((I = m.options.stackLabels) == null ? void 0 : I.animation) || !1), R = this.stackTotalGroup = this.stackTotalGroup || x.g("stack-labels").attr({ zIndex: 6, opacity: 0 }).add();\n R.translate(k.plotLeft, k.plotTop), g(N, (j) => {\n g(j, (U) => {\n U.render(R);\n });\n }), R.animate({ opacity: 1 }, V);\n }\n }\n return (p || (p = {})).compose = function(q, m, k) {\n let x = m.prototype, N = k.prototype;\n x.getStacks || (M(q, "init", B), M(q, "destroy", y), x.getStacks = L, N.getStackIndicator = X, N.modifyStacks = F, N.percentStacker = T, N.setGroupedPoints = w, N.setStackedPoints = H);\n }, p;\n }), n(o, "Series/Line/LineSeries.js", [o["Core/Series/Series.js"], o["Core/Series/SeriesRegistry.js"], o["Core/Utilities.js"]], function(r, i, a) {\n let { defined: s, merge: l, isObject: p } = a;\n class d extends r {\n drawGraph() {\n let M = this.options, u = (this.gappedPath || this.getGraphPath).call(this), A = this.chart.styledMode;\n [this, ...this.zones].forEach((z, f) => {\n let O, h = z.graph, g = h ? "animate" : "attr", v = z.dashStyle || M.dashStyle;\n h ? (h.endX = this.preventGraphAnimation ? null : u.xMap, h.animate({ d: u })) : u.length && (z.graph = h = this.chart.renderer.path(u).addClass("highcharts-graph" + (f ? ` highcharts-zone-graph-${f - 1} ` : " ") + (f && z.className || "")).attr({ zIndex: 1 }).add(this.group)), h && !A && (O = { stroke: !f && M.lineColor || z.color || this.color || "#cccccc", "stroke-width": M.lineWidth || 0, fill: this.fillGraph && this.color || "none" }, v ? O.dashstyle = v : M.linecap !== "square" && (O["stroke-linecap"] = O["stroke-linejoin"] = "round"), h[g](O).shadow(f < 2 && M.shadow && l({ filterUnits: "userSpaceOnUse" }, p(M.shadow) ? M.shadow : {}))), h && (h.startX = u.xMap, h.isArea = u.isArea);\n });\n }\n getGraphPath(M, u, A) {\n let z = this, f = z.options, O = [], h = [], g, v = f.step, L = (M = M || z.points).reversed;\n return L && M.reverse(), (v = { right: 1, center: 2 }[v] || v && 3) && L && (v = 4 - v), (M = this.getValidPoints(M, !1, !(f.connectNulls && !u && !A))).forEach(function(y, B) {\n let X, F = y.plotX, T = y.plotY, w = M[B - 1], H = y.isNull || typeof T != "number";\n (y.leftCliff || w && w.rightCliff) && !A && (g = !0), H && !s(u) && B > 0 ? g = !f.connectNulls : H && !u ? g = !0 : (B === 0 || g ? X = [["M", y.plotX, y.plotY]] : z.getPointSpline ? X = [z.getPointSpline(M, y, B)] : v ? (X = v === 1 ? [["L", w.plotX, T]] : v === 2 ? [["L", (w.plotX + F) / 2, w.plotY], ["L", (w.plotX + F) / 2, T]] : [["L", F, w.plotY]]).push(["L", F, T]) : X = [["L", F, T]], h.push(y.x), v && (h.push(y.x), v === 2 && h.push(y.x)), O.push.apply(O, X), g = !1);\n }), O.xMap = h, z.graphPath = O, O;\n }\n }\n return d.defaultOptions = l(r.defaultOptions, { legendSymbol: "lineMarker" }), i.registerSeriesType("line", d), d;\n }), n(o, "Series/Area/AreaSeriesDefaults.js", [], function() {\n return { threshold: 0, legendSymbol: "areaMarker" };\n }), n(o, "Series/Area/AreaSeries.js", [o["Series/Area/AreaSeriesDefaults.js"], o["Core/Series/SeriesRegistry.js"], o["Core/Utilities.js"]], function(r, i, a) {\n let { seriesTypes: { line: s } } = i, { extend: l, merge: p, objectEach: d, pick: b } = a;\n class M extends s {\n drawGraph() {\n this.areaPath = [], super.drawGraph.apply(this);\n let { areaPath: A, options: z } = this;\n [this, ...this.zones].forEach((f, O) => {\n let h = {}, g = f.fillColor || z.fillColor, v = f.area, L = v ? "animate" : "attr";\n v ? (v.endX = this.preventGraphAnimation ? null : A.xMap, v.animate({ d: A })) : (h.zIndex = 0, (v = f.area = this.chart.renderer.path(A).addClass("highcharts-area" + (O ? ` highcharts-zone-area-${O - 1} ` : " ") + (O && f.className || "")).add(this.group)).isArea = !0), this.chart.styledMode || (h.fill = g || f.color || this.color, h["fill-opacity"] = g ? 1 : z.fillOpacity ?? 0.75, v.css({ pointerEvents: this.stickyTracking ? "none" : "auto" })), v[L](h), v.startX = A.xMap, v.shiftUnit = z.step ? 2 : 1;\n });\n }\n getGraphPath(A) {\n let z, f, O, h = s.prototype.getGraphPath, g = this.options, v = g.stacking, L = this.yAxis, y = [], B = [], X = this.index, F = L.stacking.stacks[this.stackKey], T = g.threshold, w = Math.round(L.getThreshold(g.threshold)), H = b(g.connectNulls, v === "percent"), C = function(V, R, I) {\n let j = A[V], U = v && F[j.x].points[X], _ = j[I + "Null"] || 0, r1 = j[I + "Cliff"] || 0, K, Q, E = !0;\n r1 || _ ? (K = (_ ? U[0] : U[1]) + r1, Q = U[0] + r1, E = !!_) : !v && A[R] && A[R].isNull && (K = Q = T), K !== void 0 && (B.push({ plotX: z, plotY: K === null ? w : L.getThreshold(K), isNull: E, isCliff: !0 }), y.push({ plotX: z, plotY: Q === null ? w : L.getThreshold(Q), doCurve: !1 }));\n };\n A = A || this.points, v && (A = this.getStackPoints(A));\n for (let V = 0, R = A.length; V < R; ++V)\n v || (A[V].leftCliff = A[V].rightCliff = A[V].leftNull = A[V].rightNull = void 0), f = A[V].isNull, z = b(A[V].rectPlotX, A[V].plotX), O = v ? b(A[V].yBottom, w) : w, f && !H || (H || C(V, V - 1, "left"), f && !v && H || (B.push(A[V]), y.push({ x: V, plotX: z, plotY: O })), H || C(V, V + 1, "right"));\n let q = h.call(this, B, !0, !0);\n y.reversed = !0;\n let m = h.call(this, y, !0, !0), k = m[0];\n k && k[0] === "M" && (m[0] = ["L", k[1], k[2]]);\n let x = q.concat(m);\n x.length && x.push(["Z"]);\n let N = h.call(this, B, !1, H);\n return this.chart.series.length > 1 && v && B.some((V) => V.isCliff) && (x.hasStackedCliffs = N.hasStackedCliffs = !0), x.xMap = q.xMap, this.areaPath = x, N;\n }\n getStackPoints(A) {\n let z = this, f = [], O = [], h = this.xAxis, g = this.yAxis, v = g.stacking.stacks[this.stackKey], L = {}, y = g.series, B = y.length, X = g.options.reversedStacks ? 1 : -1, F = y.indexOf(z);\n if (A = A || this.points, this.options.stacking) {\n for (let w = 0; w < A.length; w++)\n A[w].leftNull = A[w].rightNull = void 0, L[A[w].x] = A[w];\n d(v, function(w, H) {\n w.total !== null && O.push(H);\n }), O.sort(function(w, H) {\n return w - H;\n });\n let T = y.map((w) => w.visible);\n O.forEach(function(w, H) {\n let C = 0, q, m;\n if (L[w] && !L[w].isNull)\n f.push(L[w]), [-1, 1].forEach(function(k) {\n let x = k === 1 ? "rightNull" : "leftNull", N = v[O[H + k]], V = 0;\n if (N) {\n let R = F;\n for (; R >= 0 && R < B; ) {\n let I = y[R].index;\n !(q = N.points[I]) && (I === z.index ? L[w][x] = !0 : T[R] && (m = v[w].points[I]) && (V -= m[1] - m[0])), R += X;\n }\n }\n L[w][k === 1 ? "rightCliff" : "leftCliff"] = V;\n });\n else {\n let k = F;\n for (; k >= 0 && k < B; ) {\n let x = y[k].index;\n if (q = v[w].points[x]) {\n C = q[1];\n break;\n }\n k += X;\n }\n C = b(C, 0), C = g.translate(C, 0, 1, 0, 1), f.push({ isNull: !0, plotX: h.translate(w, 0, 0, 0, 1), x: w, plotY: C, yBottom: C });\n }\n });\n }\n return f;\n }\n }\n return M.defaultOptions = p(s.defaultOptions, r), l(M.prototype, { singleStacks: !1 }), i.registerSeriesType("area", M), M;\n }), n(o, "Series/Spline/SplineSeries.js", [o["Core/Series/SeriesRegistry.js"], o["Core/Utilities.js"]], function(r, i) {\n let { line: a } = r.seriesTypes, { merge: s, pick: l } = i;\n class p extends a {\n getPointSpline(b, M, u) {\n let A, z, f, O, h = M.plotX || 0, g = M.plotY || 0, v = b[u - 1], L = b[u + 1];\n function y(X) {\n return X && !X.isNull && X.doCurve !== !1 && !M.isCliff;\n }\n if (y(v) && y(L)) {\n let X = v.plotX || 0, F = v.plotY || 0, T = L.plotX || 0, w = L.plotY || 0, H = 0;\n A = (1.5 * h + X) / 2.5, z = (1.5 * g + F) / 2.5, f = (1.5 * h + T) / 2.5, O = (1.5 * g + w) / 2.5, f !== A && (H = (O - z) * (f - h) / (f - A) + g - O), z += H, O += H, z > F && z > g ? (z = Math.max(F, g), O = 2 * g - z) : z < F && z < g && (z = Math.min(F, g), O = 2 * g - z), O > w && O > g ? (O = Math.max(w, g), z = 2 * g - O) : O < w && O < g && (O = Math.min(w, g), z = 2 * g - O), M.rightContX = f, M.rightContY = O, M.controlPoints = { low: [A, z], high: [f, O] };\n }\n let B = ["C", l(v.rightContX, v.plotX, 0), l(v.rightContY, v.plotY, 0), l(A, h, 0), l(z, g, 0), h, g];\n return v.rightContX = v.rightContY = void 0, B;\n }\n }\n return p.defaultOptions = s(a.defaultOptions), r.registerSeriesType("spline", p), p;\n }), n(o, "Series/AreaSpline/AreaSplineSeries.js", [o["Series/Spline/SplineSeries.js"], o["Core/Series/SeriesRegistry.js"], o["Core/Utilities.js"]], function(r, i, a) {\n let { area: s, area: { prototype: l } } = i.seriesTypes, { extend: p, merge: d } = a;\n class b extends r {\n }\n return b.defaultOptions = d(r.defaultOptions, s.defaultOptions), p(b.prototype, { getGraphPath: l.getGraphPath, getStackPoints: l.getStackPoints, drawGraph: l.drawGraph }), i.registerSeriesType("areaspline", b), b;\n }), n(o, "Series/Column/ColumnSeriesDefaults.js", [], function() {\n return { borderRadius: 3, centerInCategory: !1, groupPadding: 0.2, marker: null, pointPadding: 0.1, minPointLength: 0, cropThreshold: 50, pointRange: null, states: { hover: { halo: !1, brightness: 0.1 }, select: { color: "#cccccc", borderColor: "#000000" } }, dataLabels: { align: void 0, verticalAlign: void 0, y: void 0 }, startFromThreshold: !0, stickyTracking: !1, tooltip: { distance: 6 }, threshold: 0, borderColor: "#ffffff" };\n }), n(o, "Series/Column/ColumnSeries.js", [o["Core/Animation/AnimationUtilities.js"], o["Core/Color/Color.js"], o["Series/Column/ColumnSeriesDefaults.js"], o["Core/Globals.js"], o["Core/Series/Series.js"], o["Core/Series/SeriesRegistry.js"], o["Core/Utilities.js"]], function(r, i, a, s, l, p, d) {\n let { animObject: b } = r, { parse: M } = i, { noop: u } = s, { clamp: A, crisp: z, defined: f, extend: O, fireEvent: h, isArray: g, isNumber: v, merge: L, pick: y, objectEach: B } = d;\n class X extends l {\n animate(T) {\n let w, H, C = this, q = this.yAxis, m = q.pos, k = q.reversed, x = C.options, { clipOffset: N, inverted: V } = this.chart, R = {}, I = V ? "translateX" : "translateY";\n T && N ? (R.scaleY = 1e-3, H = A(q.toPixels(x.threshold), m, m + q.len), V ? (H += k ? -Math.floor(N[0]) : Math.ceil(N[2]), R.translateX = H - q.len) : (H += k ? Math.ceil(N[0]) : -Math.floor(N[2]), R.translateY = H), C.clipBox && C.setClip(), C.group.attr(R)) : (w = Number(C.group.attr(I)), C.group.animate({ scaleY: 1 }, O(b(C.options.animation), { step: function(j, U) {\n C.group && (R[I] = w + U.pos * (m - w), C.group.attr(R));\n } })));\n }\n init(T, w) {\n super.init.apply(this, arguments);\n let H = this;\n (T = H.chart).hasRendered && T.series.forEach(function(C) {\n C.type === H.type && (C.isDirty = !0);\n });\n }\n getColumnMetrics() {\n var _, r1;\n let T = this, w = T.options, H = T.xAxis, C = T.yAxis, q = H.options.reversedStacks, m = H.reversed && !q || !H.reversed && q, k = {}, x, N = 0;\n w.grouping === !1 ? N = 1 : T.chart.series.forEach(function(K) {\n let Q, E = K.yAxis, D = K.options;\n K.type === T.type && K.reserveSpace() && C.len === E.len && C.pos === E.pos && (D.stacking && D.stacking !== "group" ? (k[x = K.stackKey] === void 0 && (k[x] = N++), Q = k[x]) : D.grouping !== !1 && (Q = N++), K.columnIndex = Q);\n });\n let V = Math.min(Math.abs(H.transA) * (!((_ = H.brokenAxis) != null && _.hasBreaks) && ((r1 = H.ordinal) == null ? void 0 : r1.slope) || w.pointRange || H.closestPointRange || H.tickInterval || 1), H.len), R = V * w.groupPadding, I = (V - 2 * R) / (N || 1), j = Math.min(w.maxPointWidth || H.len, y(w.pointWidth, I * (1 - 2 * w.pointPadding))), U = (T.columnIndex || 0) + (m ? 1 : 0);\n return T.columnMetrics = { width: j, offset: (I - j) / 2 + (R + U * I - V / 2) * (m ? -1 : 1), paddedWidth: I, columnCount: N }, T.columnMetrics;\n }\n crispCol(T, w, H, C) {\n let q = this.borderWidth, m = this.chart.inverted;\n return C = z(w + C, q, m) - (w = z(w, q, m)), this.options.crisp && (H = z(T + H, q) - (T = z(T, q))), { x: T, y: w, width: H, height: C };\n }\n adjustForMissingColumns(T, w, H, C) {\n var q;\n if (!H.isNull && C.columnCount > 1) {\n let m = this.xAxis.series.filter((V) => V.visible).map((V) => V.index), k = 0, x = 0;\n B((q = this.xAxis.stacking) == null ? void 0 : q.stacks, (V) => {\n if (typeof H.x == "number") {\n let R = V[H.x.toString()];\n if (R && g(R.points[this.index])) {\n let I = Object.keys(R.points).filter((j) => !j.match(",") && R.points[j] && R.points[j].length > 1).map(parseFloat).filter((j) => m.indexOf(j) !== -1).sort((j, U) => U - j);\n k = I.indexOf(this.index), x = I.length;\n }\n }\n }), k = this.xAxis.reversed ? x - 1 - k : k;\n let N = (x - 1) * C.paddedWidth + w;\n T = (H.plotX || 0) + N / 2 - w - k * C.paddedWidth;\n }\n return T;\n }\n translate() {\n let T = this, w = T.chart, H = T.options, C = T.dense = T.closestPointRange * T.xAxis.transA < 2, q = T.borderWidth = y(H.borderWidth, C ? 0 : 1), m = T.xAxis, k = T.yAxis, x = H.threshold, N = y(H.minPointLength, 5), V = T.getColumnMetrics(), R = V.width, I = T.pointXOffset = V.offset, j = T.dataMin, U = T.dataMax, _ = T.translatedThreshold = k.getThreshold(x), r1 = T.barW = Math.max(R, 1 + 2 * q);\n H.pointPadding && (r1 = Math.ceil(r1)), l.prototype.translate.apply(T), T.points.forEach(function(K) {\n let Q = y(K.yBottom, _), E = 999 + Math.abs(Q), D = K.plotX || 0, G = A(K.plotY, -E, k.len + E), J, S = Math.min(G, Q), W = Math.max(G, Q) - S, P = R, Y = D + I, Z = r1;\n N && Math.abs(W) < N && (W = N, J = !k.reversed && !K.negative || k.reversed && K.negative, v(x) && v(U) && K.y === x && U <= x && (k.min || 0) < x && (j !== U || (k.max || 0) <= x) && (J = !J, K.negative = !K.negative), S = Math.abs(S - _) > N ? Q - N : _ - (J ? N : 0)), f(K.options.pointWidth) && (Y -= Math.round(((P = Z = Math.ceil(K.options.pointWidth)) - R) / 2)), H.centerInCategory && !H.stacking && (Y = T.adjustForMissingColumns(Y, P, K, V)), K.barX = Y, K.pointWidth = P, K.tooltipPos = w.inverted ? [A(k.len + k.pos - w.plotLeft - G, k.pos - w.plotLeft, k.len + k.pos - w.plotLeft), m.len + m.pos - w.plotTop - Y - Z / 2, W] : [m.left - w.plotLeft + Y + Z / 2, A(G + k.pos - w.plotTop, k.pos - w.plotTop, k.len + k.pos - w.plotTop), W], K.shapeType = T.pointClass.prototype.shapeType || "roundedRect", K.shapeArgs = T.crispCol(Y, K.isNull ? _ : S, Z, K.isNull ? 0 : W);\n }), h(this, "afterColumnTranslate");\n }\n drawGraph() {\n this.group[this.dense ? "addClass" : "removeClass"]("highcharts-dense-data");\n }\n pointAttribs(T, w) {\n let H = this.options, C = this.pointAttrToOptions || {}, q = C.stroke || "borderColor", m = C["stroke-width"] || "borderWidth", k, x, N, V = T && T.color || this.color, R = T && T[q] || H[q] || V, I = T && T.options.dashStyle || H.dashStyle, j = T && T[m] || H[m] || this[m] || 0, U = y(T && T.opacity, H.opacity, 1);\n T && this.zones.length && (x = T.getZone(), V = T.options.color || x && (x.color || T.nonZonedColor) || this.color, x && (R = x.borderColor || R, I = x.dashStyle || I, j = x.borderWidth || j)), w && T && (N = (k = L(H.states[w], T.options.states && T.options.states[w] || {})).brightness, V = k.color || N !== void 0 && M(V).brighten(k.brightness).get() || V, R = k[q] || R, j = k[m] || j, I = k.dashStyle || I, U = y(k.opacity, U));\n let _ = { fill: V, stroke: R, "stroke-width": j, opacity: U };\n return I && (_.dashstyle = I), _;\n }\n drawPoints(T = this.points) {\n let w, H = this, C = this.chart, q = H.options, m = C.renderer, k = q.animationLimit || 250;\n T.forEach(function(x) {\n let N = x.plotY, V = x.graphic, R = !!V, I = V && C.pointCount < k ? "animate" : "attr";\n v(N) && x.y !== null ? (w = x.shapeArgs, V && x.hasNewShapeType() && (V = V.destroy()), H.enabledDataSorting && (x.startXPos = H.xAxis.reversed ? -(w && w.width || 0) : H.xAxis.width), !V && (x.graphic = V = m[x.shapeType](w).add(x.group || H.group), V && H.enabledDataSorting && C.hasRendered && C.pointCount < k && (V.attr({ x: x.startXPos }), R = !0, I = "animate")), V && R && V[I](L(w)), C.styledMode || V[I](H.pointAttribs(x, x.selected && "select")).shadow(x.allowShadow !== !1 && q.shadow), V && (V.addClass(x.getClassName(), !0), V.attr({ visibility: x.visible ? "inherit" : "hidden" }))) : V && (x.graphic = V.destroy());\n });\n }\n drawTracker(T = this.points) {\n let w, H = this, C = H.chart, q = C.pointer, m = function(k) {\n let x = q == null ? void 0 : q.getPointFromEvent(k);\n q && x && H.options.enableMouseTracking && (q.isDirectTouch = !0, x.onMouseOver(k));\n };\n T.forEach(function(k) {\n w = g(k.dataLabels) ? k.dataLabels : k.dataLabel ? [k.dataLabel] : [], k.graphic && (k.graphic.element.point = k), w.forEach(function(x) {\n (x.div || x.element).point = k;\n });\n }), H._hasTracking || (H.trackerGroups.forEach(function(k) {\n H[k] && (H[k].addClass("highcharts-tracker").on("mouseover", m).on("mouseout", function(x) {\n q == null || q.onTrackerMouseOut(x);\n }).on("touchstart", m), !C.styledMode && H.options.cursor && H[k].css({ cursor: H.options.cursor }));\n }), H._hasTracking = !0), h(this, "afterDrawTracker");\n }\n remove() {\n let T = this, w = T.chart;\n w.hasRendered && w.series.forEach(function(H) {\n H.type === T.type && (H.isDirty = !0);\n }), l.prototype.remove.apply(T, arguments);\n }\n }\n return X.defaultOptions = L(l.defaultOptions, a), O(X.prototype, { directTouch: !0, getSymbol: u, negStacks: !0, trackerGroups: ["group", "dataLabelsGroup"] }), p.registerSeriesType("column", X), X;\n }), n(o, "Core/Series/DataLabel.js", [o["Core/Animation/AnimationUtilities.js"], o["Core/Templating.js"], o["Core/Utilities.js"]], function(r, i, a) {\n var s;\n let { getDeferredAnimation: l } = r, { format: p } = i, { defined: d, extend: b, fireEvent: M, isArray: u, isString: A, merge: z, objectEach: f, pick: O, pInt: h, splat: g } = a;\n return function(v) {\n function L() {\n return H(this).some((q) => q == null ? void 0 : q.enabled);\n }\n function y(q, m, k, x, N) {\n var G;\n let { chart: V, enabledDataSorting: R } = this, I = this.isCartesian && V.inverted, j = q.plotX, U = q.plotY, _ = k.rotation || 0, r1 = d(j) && d(U) && V.isInsidePlot(j, Math.round(U), { inverted: I, paneCoordinates: !0, series: this }), K = _ === 0 && O(k.overflow, R ? "none" : "justify") === "justify", Q = this.visible && q.visible !== !1 && d(j) && (q.series.forceDL || R && !K || r1 || O(k.inside, !!this.options.stacking) && x && V.isInsidePlot(j, I ? x.x + 1 : x.y + x.height - 1, { inverted: I, paneCoordinates: !0, series: this })), E = q.pos();\n if (Q && E) {\n var D;\n let J = m.getBBox(), S = m.getBBox(void 0, 0), W = { right: 1, center: 0.5 }[k.align || 0] || 0, P = { bottom: 1, middle: 0.5 }[k.verticalAlign || 0] || 0;\n if (x = b({ x: E[0], y: Math.round(E[1]), width: 0, height: 0 }, x || {}), k.alignTo === "plotEdges" && this.isCartesian && (x[I ? "x" : "y"] = 0, x[I ? "width" : "height"] = ((G = this.yAxis) == null ? void 0 : G.len) || 0), b(k, { width: J.width, height: J.height }), D = x, R && this.xAxis && !K && this.setDataLabelStartPos(q, m, N, r1, D), m.align(z(k, { width: S.width, height: S.height }), !1, x, !1), m.alignAttr.x += W * (S.width - J.width), m.alignAttr.y += P * (S.height - J.height), m[m.placed ? "animate" : "attr"]({ x: m.alignAttr.x + (J.width - S.width) / 2, y: m.alignAttr.y + (J.height - S.height) / 2, rotationOriginX: (m.width || 0) / 2, rotationOriginY: (m.height || 0) / 2 }), K && x.height >= 0)\n this.justifyDataLabel(m, k, m.alignAttr, J, x, N);\n else if (O(k.crop, !0)) {\n let { x: Y, y: Z } = m.alignAttr;\n Q = V.isInsidePlot(Y, Z, { paneCoordinates: !0, series: this }) && V.isInsidePlot(Y + J.width - 1, Z + J.height - 1, { paneCoordinates: !0, series: this });\n }\n k.shape && !_ && m[N ? "attr" : "animate"]({ anchorX: E[0], anchorY: E[1] });\n }\n N && R && (m.placed = !1), Q || R && !K ? (m.show(), m.placed = !0) : (m.hide(), m.placed = !1);\n }\n function B() {\n return this.plotGroup("dataLabelsGroup", "data-labels", this.hasRendered ? "inherit" : "hidden", this.options.dataLabels.zIndex || 6);\n }\n function X(q) {\n let m = this.hasRendered || 0, k = this.initDataLabelsGroup().attr({ opacity: +m });\n return !m && k && (this.visible && k.show(), this.options.animation ? k.animate({ opacity: 1 }, q) : k.attr({ opacity: 1 })), k;\n }\n function F(q) {\n var Q;\n let m;\n q = q || this.points;\n let k = this, x = k.chart, N = k.options, V = x.renderer, { backgroundColor: R, plotBackgroundColor: I } = x.options.chart, j = V.getContrast(A(I) && I || A(R) && R || "#000000"), U = H(k), { animation: _, defer: r1 } = U[0], K = r1 ? l(x, _, k) : { defer: 0, duration: 0 };\n M(this, "drawDataLabels"), (Q = k.hasDataLabels) != null && Q.call(k) && (m = this.initDataLabels(K), q.forEach((E) => {\n var J, S;\n let D = E.dataLabels || [];\n g(w(U, E.dlOptions || ((J = E.options) == null ? void 0 : J.dataLabels))).forEach((W, P) => {\n let Y = W.enabled && (E.visible || E.dataLabelOnHidden) && (!E.isNull || E.dataLabelOnNull) && function(A1, u1) {\n let h1 = u1.filter;\n if (h1) {\n let C1 = h1.operator, q1 = A1[h1.property], W1 = h1.value;\n return C1 === ">" && q1 > W1 || C1 === "<" && q1 < W1 || C1 === ">=" && q1 >= W1 || C1 === "<=" && q1 <= W1 || C1 === "==" && q1 == W1 || C1 === "===" && q1 === W1 || C1 === "!=" && q1 != W1 || C1 === "!==" && q1 !== W1;\n }\n return !0;\n }(E, W), { backgroundColor: Z, borderColor: t1, distance: i1, style: n1 = {} } = W, s1, d1, b1, c1, a1 = {}, l1 = D[P], p1 = !l1, M1;\n Y && (d1 = O(W[E.formatPrefix + "Format"], W.format), s1 = E.getLabelConfig(), b1 = d(d1) ? p(d1, s1, x) : (W[E.formatPrefix + "Formatter"] || W.formatter).call(s1, W), c1 = W.rotation, !x.styledMode && (n1.color = O(W.color, n1.color, A(k.color) ? k.color : void 0, "#000000"), n1.color === "contrast" ? (Z !== "none" && (M1 = Z), E.contrastColor = V.getContrast(M1 !== "auto" && M1 || E.color || k.color), n1.color = M1 || !d(i1) && W.inside || 0 > h(i1 || 0) || N.stacking ? E.contrastColor : j) : delete E.contrastColor, N.cursor && (n1.cursor = N.cursor)), a1 = { r: W.borderRadius || 0, rotation: c1, padding: W.padding, zIndex: 1 }, x.styledMode || (a1.fill = Z === "auto" ? E.color : Z, a1.stroke = t1 === "auto" ? E.color : t1, a1["stroke-width"] = W.borderWidth), f(a1, (A1, u1) => {\n A1 === void 0 && delete a1[u1];\n })), !l1 || Y && d(b1) && !!l1.div == !!W.useHTML && (l1.rotation && W.rotation || l1.rotation === W.rotation) || (l1 = void 0, p1 = !0), Y && d(b1) && (l1 ? a1.text = b1 : (l1 = V.label(b1, 0, 0, W.shape, void 0, void 0, W.useHTML, void 0, "data-label")).addClass(" highcharts-data-label-color-" + E.colorIndex + " " + (W.className || "") + (W.useHTML ? " highcharts-tracker" : "")), l1 && (l1.options = W, l1.attr(a1), x.styledMode ? n1.width && l1.css({ width: n1.width, textOverflow: n1.textOverflow }) : l1.css(n1).shadow(W.shadow), M(l1, "beforeAddingDataLabel", { labelOptions: W, point: E }), l1.added || l1.add(m), k.alignDataLabel(E, l1, W, void 0, p1), l1.isActive = !0, D[P] && D[P] !== l1 && D[P].destroy(), D[P] = l1));\n });\n let G = D.length;\n for (; G--; )\n D[G] && D[G].isActive ? D[G].isActive = !1 : ((S = D[G]) == null || S.destroy(), D.splice(G, 1));\n E.dataLabel = D[0], E.dataLabels = D;\n })), M(this, "afterDrawDataLabels");\n }\n function T(q, m, k, x, N, V) {\n let R = this.chart, I = m.align, j = m.verticalAlign, U = q.box ? 0 : q.padding || 0, _ = R.inverted ? this.yAxis : this.xAxis, r1 = _ ? _.left - R.plotLeft : 0, K = R.inverted ? this.xAxis : this.yAxis, Q = K ? K.top - R.plotTop : 0, { x: E = 0, y: D = 0 } = m, G, J;\n return (G = (k.x || 0) + U + r1) < 0 && (I === "right" && E >= 0 ? (m.align = "left", m.inside = !0) : E -= G, J = !0), (G = (k.x || 0) + x.width - U + r1) > R.plotWidth && (I === "left" && E <= 0 ? (m.align = "right", m.inside = !0) : E += R.plotWidth - G, J = !0), (G = k.y + U + Q) < 0 && (j === "bottom" && D >= 0 ? (m.verticalAlign = "top", m.inside = !0) : D -= G, J = !0), (G = (k.y || 0) + x.height - U + Q) > R.plotHeight && (j === "top" && D <= 0 ? (m.verticalAlign = "bottom", m.inside = !0) : D += R.plotHeight - G, J = !0), J && (m.x = E, m.y = D, q.placed = !V, q.align(m, void 0, N)), J;\n }\n function w(q, m) {\n let k = [], x;\n if (u(q) && !u(m))\n k = q.map(function(N) {\n return z(N, m);\n });\n else if (u(m) && !u(q))\n k = m.map(function(N) {\n return z(q, N);\n });\n else if (u(q) || u(m)) {\n if (u(q) && u(m))\n for (x = Math.max(q.length, m.length); x--; )\n k[x] = z(q[x], m[x]);\n } else\n k = z(q, m);\n return k;\n }\n function H(q) {\n var k, x;\n let m = q.chart.options.plotOptions;\n return g(w(w((k = m == null ? void 0 : m.series) == null ? void 0 : k.dataLabels, (x = m == null ? void 0 : m[q.type]) == null ? void 0 : x.dataLabels), q.options.dataLabels));\n }\n function C(q, m, k, x, N) {\n let V = this.chart, R = V.inverted, I = this.xAxis, j = I.reversed, U = ((R ? m.height : m.width) || 0) / 2, _ = q.pointWidth, r1 = _ ? _ / 2 : 0;\n m.startXPos = R ? N.x : j ? -U - r1 : I.width - U + r1, m.startYPos = R ? j ? this.yAxis.height - U + r1 : -U - r1 : N.y, x ? m.visibility === "hidden" && (m.show(), m.attr({ opacity: 0 }).animate({ opacity: 1 })) : m.attr({ opacity: 1 }).animate({ opacity: 0 }, void 0, m.hide), V.hasRendered && (k && m.attr({ x: m.startXPos, y: m.startYPos }), m.placed = !0);\n }\n v.compose = function(q) {\n let m = q.prototype;\n m.initDataLabels || (m.initDataLabels = X, m.initDataLabelsGroup = B, m.alignDataLabel = y, m.drawDataLabels = F, m.justifyDataLabel = T, m.setDataLabelStartPos = C, m.hasDataLabels = L);\n };\n }(s || (s = {})), s;\n }), n(o, "Series/Column/ColumnDataLabel.js", [o["Core/Series/DataLabel.js"], o["Core/Globals.js"], o["Core/Series/SeriesRegistry.js"], o["Core/Utilities.js"]], function(r, i, a, s) {\n var l;\n let { composed: p } = i, { series: d } = a, { merge: b, pick: M, pushUnique: u } = s;\n return function(A) {\n function z(f, O, h, g, v) {\n let L = this.chart.inverted, y = f.series, B = (y.xAxis ? y.xAxis.len : this.chart.plotSizeX) || 0, X = (y.yAxis ? y.yAxis.len : this.chart.plotSizeY) || 0, F = f.dlBox || f.shapeArgs, T = M(f.below, f.plotY > M(this.translatedThreshold, X)), w = M(h.inside, !!this.options.stacking);\n if (F) {\n if (g = b(F), !(h.overflow === "allow" && h.crop === !1)) {\n g.y < 0 && (g.height += g.y, g.y = 0);\n let H = g.y + g.height - X;\n H > 0 && H < g.height - 1 && (g.height -= H);\n }\n L && (g = { x: X - g.y - g.height, y: B - g.x - g.width, width: g.height, height: g.width }), w || (L ? (g.x += T ? 0 : g.width, g.width = 0) : (g.y += T ? g.height : 0, g.height = 0));\n }\n h.align = M(h.align, !L || w ? "center" : T ? "right" : "left"), h.verticalAlign = M(h.verticalAlign, L || w ? "middle" : T ? "top" : "bottom"), d.prototype.alignDataLabel.call(this, f, O, h, g, v), h.inside && f.contrastColor && O.css({ color: f.contrastColor });\n }\n A.compose = function(f) {\n r.compose(d), u(p, "ColumnDataLabel") && (f.prototype.alignDataLabel = z);\n };\n }(l || (l = {})), l;\n }), n(o, "Series/Bar/BarSeries.js", [o["Series/Column/ColumnSeries.js"], o["Core/Series/SeriesRegistry.js"], o["Core/Utilities.js"]], function(r, i, a) {\n let { extend: s, merge: l } = a;\n class p extends r {\n }\n return p.defaultOptions = l(r.defaultOptions, {}), s(p.prototype, { inverted: !0 }), i.registerSeriesType("bar", p), p;\n }), n(o, "Series/Scatter/ScatterSeriesDefaults.js", [], function() {\n return { lineWidth: 0, findNearestPointBy: "xy", jitter: { x: 0, y: 0 }, marker: { enabled: !0 }, tooltip: { headerFormat: \' {series.name}
\', pointFormat: "x: {point.x}
y: {point.y}
" } };\n }), n(o, "Series/Scatter/ScatterSeries.js", [o["Series/Scatter/ScatterSeriesDefaults.js"], o["Core/Series/SeriesRegistry.js"], o["Core/Utilities.js"]], function(r, i, a) {\n let { column: s, line: l } = i.seriesTypes, { addEvent: p, extend: d, merge: b } = a;\n class M extends l {\n applyJitter() {\n let A = this, z = this.options.jitter, f = this.points.length;\n z && this.points.forEach(function(O, h) {\n ["x", "y"].forEach(function(g, v) {\n if (z[g] && !O.isNull) {\n let L = `plot${g.toUpperCase()}`, y = A[`${g}Axis`], B = z[g] * y.transA;\n if (y && !y.logarithmic) {\n let X = Math.max(0, (O[L] || 0) - B), F = Math.min(y.len, (O[L] || 0) + B);\n O[L] = X + (F - X) * function(T) {\n let w = 1e4 * Math.sin(T);\n return w - Math.floor(w);\n }(h + v * f), g === "x" && (O.clientX = O.plotX);\n }\n }\n });\n });\n }\n drawGraph() {\n this.options.lineWidth ? super.drawGraph() : this.graph && (this.graph = this.graph.destroy());\n }\n }\n return M.defaultOptions = b(l.defaultOptions, r), d(M.prototype, { drawTracker: s.prototype.drawTracker, sorted: !1, requireSorting: !1, noSharedTooltip: !0, trackerGroups: ["group", "markerGroup", "dataLabelsGroup"] }), p(M, "afterTranslate", function() {\n this.applyJitter();\n }), i.registerSeriesType("scatter", M), M;\n }), n(o, "Series/CenteredUtilities.js", [o["Core/Globals.js"], o["Core/Series/Series.js"], o["Core/Utilities.js"]], function(r, i, a) {\n var s, l;\n let { deg2rad: p } = r, { fireEvent: d, isNumber: b, pick: M, relativeLength: u } = a;\n return (l = s || (s = {})).getCenter = function() {\n let A = this.options, z = this.chart, f = 2 * (A.slicedOffset || 0), O = z.plotWidth - 2 * f, h = z.plotHeight - 2 * f, g = A.center, v = Math.min(O, h), L = A.thickness, y, B = A.size, X = A.innerSize || 0, F, T;\n typeof B == "string" && (B = parseFloat(B)), typeof X == "string" && (X = parseFloat(X));\n let w = [M(g[0], "50%"), M(g[1], "50%"), M(B && B < 0 ? void 0 : A.size, "100%"), M(X && X < 0 ? void 0 : A.innerSize || 0, "0%")];\n for (!z.angular || this instanceof i || (w[3] = 0), F = 0; F < 4; ++F)\n T = w[F], y = F < 2 || F === 2 && /%$/.test(T), w[F] = u(T, [O, h, v, w[2]][F]) + (y ? f : 0);\n return w[3] > w[2] && (w[3] = w[2]), b(L) && 2 * L < w[2] && L > 0 && (w[3] = w[2] - 2 * L), d(this, "afterGetCenter", { positions: w }), w;\n }, l.getStartAndEndRadians = function(A, z) {\n let f = b(A) ? A : 0, O = b(z) && z > f && z - f < 360 ? z : f + 360;\n return { start: p * (f + -90), end: p * (O + -90) };\n }, s;\n }), n(o, "Series/Pie/PiePoint.js", [o["Core/Animation/AnimationUtilities.js"], o["Core/Series/Point.js"], o["Core/Utilities.js"]], function(r, i, a) {\n let { setAnimation: s } = r, { addEvent: l, defined: p, extend: d, isNumber: b, pick: M, relativeLength: u } = a;\n class A extends i {\n getConnectorPath(f) {\n let O = f.dataLabelPosition, h = f.options || {}, g = h.connectorShape, v = this.connectorShapes[g] || g;\n return O && v.call(this, { ...O.computed, alignment: O.alignment }, O.connectorPosition, h) || [];\n }\n getTranslate() {\n return this.sliced && this.slicedTranslation || { translateX: 0, translateY: 0 };\n }\n haloPath(f) {\n let O = this.shapeArgs;\n return this.sliced || !this.visible ? [] : this.series.chart.renderer.symbols.arc(O.x, O.y, O.r + f, O.r + f, { innerR: O.r - 1, start: O.start, end: O.end, borderRadius: O.borderRadius });\n }\n constructor(f, O, h) {\n super(f, O, h), this.half = 0, this.name ?? (this.name = "Slice");\n let g = (v) => {\n this.slice(v.type === "select");\n };\n l(this, "select", g), l(this, "unselect", g);\n }\n isValid() {\n return b(this.y) && this.y >= 0;\n }\n setVisible(f, O = !0) {\n f !== this.visible && this.update({ visible: f ?? !this.visible }, O, void 0, !1);\n }\n slice(f, O, h) {\n let g = this.series;\n s(h, g.chart), O = M(O, !0), this.sliced = this.options.sliced = f = p(f) ? f : !this.sliced, g.options.data[g.data.indexOf(this)] = this.options, this.graphic && this.graphic.animate(this.getTranslate());\n }\n }\n return d(A.prototype, { connectorShapes: { fixedOffset: function(z, f, O) {\n let h = f.breakAt, g = f.touchingSliceAt, v = O.softConnector ? ["C", z.x + (z.alignment === "left" ? -5 : 5), z.y, 2 * h.x - g.x, 2 * h.y - g.y, h.x, h.y] : ["L", h.x, h.y];\n return [["M", z.x, z.y], v, ["L", g.x, g.y]];\n }, straight: function(z, f) {\n let O = f.touchingSliceAt;\n return [["M", z.x, z.y], ["L", O.x, O.y]];\n }, crookedLine: function(z, f, O) {\n let { breakAt: h, touchingSliceAt: g } = f, { series: v } = this, [L, y, B] = v.center, X = B / 2, { plotLeft: F, plotWidth: T } = v.chart, w = z.alignment === "left", { x: H, y: C } = z, q = h.x;\n if (O.crookDistance) {\n let k = u(O.crookDistance, 1);\n q = w ? L + X + (T + F - L - X) * (1 - k) : F + (L - X) * k;\n } else\n q = L + (y - C) * Math.tan((this.angle || 0) - Math.PI / 2);\n let m = [["M", H, C]];\n return (w ? q <= H && q >= h.x : q >= H && q <= h.x) && m.push(["L", q, C]), m.push(["L", h.x, h.y], ["L", g.x, g.y]), m;\n } } }), A;\n }), n(o, "Series/Pie/PieSeriesDefaults.js", [], function() {\n return { borderRadius: 3, center: [null, null], clip: !1, colorByPoint: !0, dataLabels: { connectorPadding: 5, connectorShape: "crookedLine", crookDistance: void 0, distance: 30, enabled: !0, formatter: function() {\n return this.point.isNull ? void 0 : this.point.name;\n }, softConnector: !0, x: 0 }, fillColor: void 0, ignoreHiddenPoint: !0, inactiveOtherPoints: !0, legendType: "point", marker: null, size: null, showInLegend: !1, slicedOffset: 10, stickyTracking: !1, tooltip: { followPointer: !0 }, borderColor: "#ffffff", borderWidth: 1, lineWidth: void 0, states: { hover: { brightness: 0.1 } } };\n }), n(o, "Series/Pie/PieSeries.js", [o["Series/CenteredUtilities.js"], o["Series/Column/ColumnSeries.js"], o["Core/Globals.js"], o["Series/Pie/PiePoint.js"], o["Series/Pie/PieSeriesDefaults.js"], o["Core/Series/Series.js"], o["Core/Series/SeriesRegistry.js"], o["Core/Renderer/SVG/Symbols.js"], o["Core/Utilities.js"]], function(r, i, a, s, l, p, d, b, M) {\n let { getStartAndEndRadians: u } = r, { noop: A } = a, { clamp: z, extend: f, fireEvent: O, merge: h, pick: g } = M;\n class v extends p {\n animate(y) {\n let B = this, X = B.points, F = B.startAngleRad;\n y || X.forEach(function(T) {\n let w = T.graphic, H = T.shapeArgs;\n w && H && (w.attr({ r: g(T.startR, B.center && B.center[3] / 2), start: F, end: F }), w.animate({ r: H.r, start: H.start, end: H.end }, B.options.animation));\n });\n }\n drawEmpty() {\n let y, B, X = this.startAngleRad, F = this.endAngleRad, T = this.options;\n this.total === 0 && this.center ? (y = this.center[0], B = this.center[1], this.graph || (this.graph = this.chart.renderer.arc(y, B, this.center[1] / 2, 0, X, F).addClass("highcharts-empty-series").add(this.group)), this.graph.attr({ d: b.arc(y, B, this.center[2] / 2, 0, { start: X, end: F, innerR: this.center[3] / 2 }) }), this.chart.styledMode || this.graph.attr({ "stroke-width": T.borderWidth, fill: T.fillColor || "none", stroke: T.color || "#cccccc" })) : this.graph && (this.graph = this.graph.destroy());\n }\n drawPoints() {\n let y = this.chart.renderer;\n this.points.forEach(function(B) {\n B.graphic && B.hasNewShapeType() && (B.graphic = B.graphic.destroy()), B.graphic || (B.graphic = y[B.shapeType](B.shapeArgs).add(B.series.group), B.delayedRendering = !0);\n });\n }\n generatePoints() {\n super.generatePoints(), this.updateTotals();\n }\n getX(y, B, X, F) {\n let T = this.center, w = this.radii ? this.radii[X.index] || 0 : T[2] / 2, H = F.dataLabelPosition, C = (H == null ? void 0 : H.distance) || 0, q = Math.asin(z((y - T[1]) / (w + C), -1, 1));\n return T[0] + Math.cos(q) * (w + C) * (B ? -1 : 1) + (C > 0 ? (B ? -1 : 1) * (F.padding || 0) : 0);\n }\n hasData() {\n return !!this.processedXData.length;\n }\n redrawPoints() {\n let y, B, X, F, T = this, w = T.chart;\n this.drawEmpty(), T.group && !w.styledMode && T.group.shadow(T.options.shadow), T.points.forEach(function(H) {\n let C = {};\n B = H.graphic, !H.isNull && B ? (F = H.shapeArgs, y = H.getTranslate(), w.styledMode || (X = T.pointAttribs(H, H.selected && "select")), H.delayedRendering ? (B.setRadialReference(T.center).attr(F).attr(y), w.styledMode || B.attr(X).attr({ "stroke-linejoin": "round" }), H.delayedRendering = !1) : (B.setRadialReference(T.center), w.styledMode || h(!0, C, X), h(!0, C, F, y), B.animate(C)), B.attr({ visibility: H.visible ? "inherit" : "hidden" }), B.addClass(H.getClassName(), !0)) : B && (H.graphic = B.destroy());\n });\n }\n sortByAngle(y, B) {\n y.sort(function(X, F) {\n return X.angle !== void 0 && (F.angle - X.angle) * B;\n });\n }\n translate(y) {\n O(this, "translate"), this.generatePoints();\n let B = this.options, X = B.slicedOffset, F = u(B.startAngle, B.endAngle), T = this.startAngleRad = F.start, w = (this.endAngleRad = F.end) - T, H = this.points, C = B.ignoreHiddenPoint, q = H.length, m, k, x, N, V, R, I, j = 0;\n for (y || (this.center = y = this.getCenter()), R = 0; R < q; R++) {\n I = H[R], m = T + j * w, I.isValid() && (!C || I.visible) && (j += I.percentage / 100), k = T + j * w;\n let U = { x: y[0], y: y[1], r: y[2] / 2, innerR: y[3] / 2, start: Math.round(1e3 * m) / 1e3, end: Math.round(1e3 * k) / 1e3 };\n I.shapeType = "arc", I.shapeArgs = U, (x = (k + m) / 2) > 1.5 * Math.PI ? x -= 2 * Math.PI : x < -Math.PI / 2 && (x += 2 * Math.PI), I.slicedTranslation = { translateX: Math.round(Math.cos(x) * X), translateY: Math.round(Math.sin(x) * X) }, N = Math.cos(x) * y[2] / 2, V = Math.sin(x) * y[2] / 2, I.tooltipPos = [y[0] + 0.7 * N, y[1] + 0.7 * V], I.half = x < -Math.PI / 2 || x > Math.PI / 2 ? 1 : 0, I.angle = x;\n }\n O(this, "afterTranslate");\n }\n updateTotals() {\n let y = this.points, B = y.length, X = this.options.ignoreHiddenPoint, F, T, w = 0;\n for (F = 0; F < B; F++)\n (T = y[F]).isValid() && (!X || T.visible) && (w += T.y);\n for (F = 0, this.total = w; F < B; F++)\n (T = y[F]).percentage = w > 0 && (T.visible || !X) ? T.y / w * 100 : 0, T.total = w;\n }\n }\n return v.defaultOptions = h(p.defaultOptions, l), f(v.prototype, { axisTypes: [], directTouch: !0, drawGraph: void 0, drawTracker: i.prototype.drawTracker, getCenter: r.getCenter, getSymbol: A, invertible: !1, isCartesian: !1, noSharedTooltip: !0, pointAttribs: i.prototype.pointAttribs, pointClass: s, requireSorting: !1, searchPoint: A, trackerGroups: ["group", "dataLabelsGroup"] }), d.registerSeriesType("pie", v), v;\n }), n(o, "Series/Pie/PieDataLabel.js", [o["Core/Series/DataLabel.js"], o["Core/Globals.js"], o["Core/Renderer/RendererUtilities.js"], o["Core/Series/SeriesRegistry.js"], o["Core/Utilities.js"]], function(r, i, a, s, l) {\n var p;\n let { composed: d, noop: b } = i, { distribute: M } = a, { series: u } = s, { arrayMax: A, clamp: z, defined: f, pick: O, pushUnique: h, relativeLength: g } = l;\n return function(v) {\n let L = { radialDistributionY: function(T, w) {\n var H;\n return (((H = w.dataLabelPosition) == null ? void 0 : H.top) || 0) + T.distributeBox.pos;\n }, radialDistributionX: function(T, w, H, C, q) {\n let m = q.dataLabelPosition;\n return T.getX(H < ((m == null ? void 0 : m.top) || 0) + 2 || H > ((m == null ? void 0 : m.bottom) || 0) - 2 ? C : H, w.half, w, q);\n }, justify: function(T, w, H, C) {\n var q;\n return C[0] + (T.half ? -1 : 1) * (H + (((q = w.dataLabelPosition) == null ? void 0 : q.distance) || 0));\n }, alignToPlotEdges: function(T, w, H, C) {\n let q = T.getBBox().width;\n return w ? q + C : H - q - C;\n }, alignToConnectors: function(T, w, H, C) {\n let q = 0, m;\n return T.forEach(function(k) {\n (m = k.dataLabel.getBBox().width) > q && (q = m);\n }), w ? q + C : H - q - C;\n } };\n function y(T, w) {\n let { center: H, options: C } = this, q = H[2] / 2, m = T.angle || 0, k = Math.cos(m), x = Math.sin(m), N = H[0] + k * q, V = H[1] + x * q, R = Math.min((C.slicedOffset || 0) + (C.borderWidth || 0), w / 5);\n return { natural: { x: N + k * w, y: V + x * w }, computed: {}, alignment: w < 0 ? "center" : T.half ? "right" : "left", connectorPosition: { breakAt: { x: N + k * R, y: V + x * R }, touchingSliceAt: { x: N, y: V } }, distance: w };\n }\n function B() {\n var Q;\n let T = this, w = T.points, H = T.chart, C = H.plotWidth, q = H.plotHeight, m = H.plotLeft, k = Math.round(H.chartWidth / 3), x = T.center, N = x[2] / 2, V = x[1], R = [[], []], I = [0, 0, 0, 0], j = T.dataLabelPositioners, U, _, r1, K = 0;\n T.visible && ((Q = T.hasDataLabels) != null && Q.call(T)) && (w.forEach((E) => {\n (E.dataLabels || []).forEach((D) => {\n D.shortened && (D.attr({ width: "auto" }).css({ width: "auto", textOverflow: "clip" }), D.shortened = !1);\n });\n }), u.prototype.drawDataLabels.apply(T), w.forEach((E) => {\n (E.dataLabels || []).forEach((D, G) => {\n var P;\n let J = x[2] / 2, S = D.options, W = g((S == null ? void 0 : S.distance) || 0, J);\n G === 0 && R[E.half].push(E), !f((P = S == null ? void 0 : S.style) == null ? void 0 : P.width) && D.getBBox().width > k && (D.css({ width: Math.round(0.7 * k) + "px" }), D.shortened = !0), D.dataLabelPosition = this.getDataLabelPosition(E, W), K = Math.max(K, W);\n });\n }), R.forEach((E, D) => {\n let G = E.length, J = [], S, W, P = 0, Y;\n G && (T.sortByAngle(E, D - 0.5), K > 0 && (S = Math.max(0, V - N - K), W = Math.min(V + N + K, H.plotHeight), E.forEach((Z) => {\n (Z.dataLabels || []).forEach((t1) => {\n var n1;\n let i1 = t1.dataLabelPosition;\n i1 && i1.distance > 0 && (i1.top = Math.max(0, V - N - i1.distance), i1.bottom = Math.min(V + N + i1.distance, H.plotHeight), P = t1.getBBox().height || 21, t1.lineHeight = H.renderer.fontMetrics(t1.text || t1).h + 2 * t1.padding, Z.distributeBox = { target: (((n1 = t1.dataLabelPosition) == null ? void 0 : n1.natural.y) || 0) - i1.top + t1.lineHeight / 2, size: P, rank: Z.y }, J.push(Z.distributeBox));\n });\n }), M(J, Y = W + P - S, Y / 5)), E.forEach((Z) => {\n (Z.dataLabels || []).forEach((t1) => {\n let i1 = t1.options || {}, n1 = Z.distributeBox, s1 = t1.dataLabelPosition, d1 = (s1 == null ? void 0 : s1.natural.y) || 0, b1 = i1.connectorPadding || 0, c1 = t1.lineHeight || 21, a1 = (c1 - t1.getBBox().height) / 2, l1 = 0, p1 = d1, M1 = "inherit";\n if (s1) {\n if (J && f(n1) && s1.distance > 0 && (n1.pos === void 0 ? M1 = "hidden" : (r1 = n1.size, p1 = j.radialDistributionY(Z, t1))), i1.justify)\n l1 = j.justify(Z, t1, N, x);\n else\n switch (i1.alignTo) {\n case "connectors":\n l1 = j.alignToConnectors(E, D, C, m);\n break;\n case "plotEdges":\n l1 = j.alignToPlotEdges(t1, D, C, m);\n break;\n default:\n l1 = j.radialDistributionX(T, Z, p1 - a1, d1, t1);\n }\n if (s1.attribs = { visibility: M1, align: s1.alignment }, s1.posAttribs = { x: l1 + (i1.x || 0) + ({ left: b1, right: -b1 }[s1.alignment] || 0), y: p1 + (i1.y || 0) - c1 / 2 }, s1.computed.x = l1, s1.computed.y = p1 - a1, O(i1.crop, !0)) {\n let A1;\n l1 - (_ = t1.getBBox().width) < b1 && D === 1 ? (A1 = Math.round(_ - l1 + b1), I[3] = Math.max(A1, I[3])) : l1 + _ > C - b1 && D === 0 && (A1 = Math.round(l1 + _ - C + b1), I[1] = Math.max(A1, I[1])), p1 - r1 / 2 < 0 ? I[0] = Math.max(Math.round(-p1 + r1 / 2), I[0]) : p1 + r1 / 2 > q && (I[2] = Math.max(Math.round(p1 + r1 / 2 - q), I[2])), s1.sideOverflow = A1;\n }\n }\n });\n }));\n }), (A(I) === 0 || this.verifyDataLabelOverflow(I)) && (this.placeDataLabels(), this.points.forEach((E) => {\n (E.dataLabels || []).forEach((D) => {\n var W;\n let { connectorColor: G, connectorWidth: J = 1 } = D.options || {}, S = D.dataLabelPosition;\n if (J) {\n let P;\n U = D.connector, S && S.distance > 0 ? (P = !U, U || (D.connector = U = H.renderer.path().addClass("highcharts-data-label-connector highcharts-color-" + E.colorIndex + (E.className ? " " + E.className : "")).add(T.dataLabelsGroup)), H.styledMode || U.attr({ "stroke-width": J, stroke: G || E.color || "#666666" }), U[P ? "attr" : "animate"]({ d: E.getConnectorPath(D) }), U.attr({ visibility: (W = S.attribs) == null ? void 0 : W.visibility })) : U && (D.connector = U.destroy());\n }\n });\n })));\n }\n function X() {\n this.points.forEach((T) => {\n (T.dataLabels || []).forEach((w) => {\n var C;\n let H = w.dataLabelPosition;\n H ? (H.sideOverflow && (w.css({ width: Math.max(w.getBBox().width - H.sideOverflow, 0) + "px", textOverflow: (((C = w.options) == null ? void 0 : C.style) || {}).textOverflow || "ellipsis" }), w.shortened = !0), w.attr(H.attribs), w[w.moved ? "animate" : "attr"](H.posAttribs), w.moved = !0) : w && w.attr({ y: -9999 });\n }), delete T.distributeBox;\n }, this);\n }\n function F(T) {\n let w = this.center, H = this.options, C = H.center, q = H.minSize || 80, m = q, k = H.size !== null;\n return !k && (C[0] !== null ? m = Math.max(w[2] - Math.max(T[1], T[3]), q) : (m = Math.max(w[2] - T[1] - T[3], q), w[0] += (T[3] - T[1]) / 2), C[1] !== null ? m = z(m, q, w[2] - Math.max(T[0], T[2])) : (m = z(m, q, w[2] - T[0] - T[2]), w[1] += (T[0] - T[2]) / 2), m < w[2] ? (w[2] = m, w[3] = Math.min(H.thickness ? Math.max(0, m - 2 * H.thickness) : Math.max(0, g(H.innerSize || 0, m)), m), this.translate(w), this.drawDataLabels && this.drawDataLabels()) : k = !0), k;\n }\n v.compose = function(T) {\n if (r.compose(u), h(d, "PieDataLabel")) {\n let w = T.prototype;\n w.dataLabelPositioners = L, w.alignDataLabel = b, w.drawDataLabels = B, w.getDataLabelPosition = y, w.placeDataLabels = X, w.verifyDataLabelOverflow = F;\n }\n };\n }(p || (p = {})), p;\n }), n(o, "Core/Geometry/GeometryUtilities.js", [], function() {\n var r, i;\n return (i = r || (r = {})).getCenterOfPoints = function(a) {\n let s = a.reduce((l, p) => (l.x += p.x, l.y += p.y, l), { x: 0, y: 0 });\n return { x: s.x / a.length, y: s.y / a.length };\n }, i.getDistanceBetweenPoints = function(a, s) {\n return Math.sqrt(Math.pow(s.x - a.x, 2) + Math.pow(s.y - a.y, 2));\n }, i.getAngleBetweenPoints = function(a, s) {\n return Math.atan2(s.x - a.x, s.y - a.y);\n }, i.pointInPolygon = function({ x: a, y: s }, l) {\n let p = l.length, d, b, M = !1;\n for (d = 0, b = p - 1; d < p; b = d++) {\n let [u, A] = l[d], [z, f] = l[b];\n A > s != f > s && a < (z - u) * (s - A) / (f - A) + u && (M = !M);\n }\n return M;\n }, r;\n }), n(o, "Extensions/OverlappingDataLabels.js", [o["Core/Geometry/GeometryUtilities.js"], o["Core/Utilities.js"]], function(r, i) {\n let { pointInPolygon: a } = r, { addEvent: s, fireEvent: l, objectEach: p, pick: d } = i;\n function b(A) {\n let z = A.length, f = (X, F) => !(F.x >= X.x + X.width || F.x + F.width <= X.x || F.y >= X.y + X.height || F.y + F.height <= X.y), O = (X, F) => {\n for (let T of X)\n if (a({ x: T[0], y: T[1] }, F))\n return !0;\n return !1;\n }, h, g, v, L, y, B = !1;\n for (let X = 0; X < z; X++)\n (h = A[X]) && (h.oldOpacity = h.opacity, h.newOpacity = 1, h.absoluteBox = function(F) {\n var T, w;\n if (F && (!F.alignAttr || F.placed)) {\n let H = F.box ? 0 : F.padding || 0, C = F.alignAttr || { x: F.attr("x"), y: F.attr("y") }, q = F.getBBox();\n return F.width = q.width, F.height = q.height, { x: C.x + (((T = F.parentGroup) == null ? void 0 : T.translateX) || 0) + H, y: C.y + (((w = F.parentGroup) == null ? void 0 : w.translateY) || 0) + H, width: (F.width || 0) - 2 * H, height: (F.height || 0) - 2 * H, polygon: q == null ? void 0 : q.polygon };\n }\n }(h));\n A.sort((X, F) => (F.labelrank || 0) - (X.labelrank || 0));\n for (let X = 0; X < z; ++X) {\n L = (g = A[X]) && g.absoluteBox;\n let F = L == null ? void 0 : L.polygon;\n for (let T = X + 1; T < z; ++T) {\n y = (v = A[T]) && v.absoluteBox;\n let w = !1;\n if (L && y && g !== v && g.newOpacity !== 0 && v.newOpacity !== 0 && g.visibility !== "hidden" && v.visibility !== "hidden") {\n let H = y.polygon;\n if (F && H && F !== H ? O(F, H) && (w = !0) : f(L, y) && (w = !0), w) {\n let C = g.labelrank < v.labelrank ? g : v, q = C.text;\n C.newOpacity = 0, q != null && q.element.querySelector("textPath") && q.hide();\n }\n }\n }\n }\n for (let X of A)\n M(X, this) && (B = !0);\n B && l(this, "afterHideAllOverlappingLabels");\n }\n function M(A, z) {\n let f, O, h = !1;\n return A && (O = A.newOpacity, A.oldOpacity !== O && (A.hasClass("highcharts-data-label") ? (A[O ? "removeClass" : "addClass"]("highcharts-data-label-hidden"), f = function() {\n z.styledMode || A.css({ pointerEvents: O ? "auto" : "none" });\n }, h = !0, A[A.isOld ? "animate" : "attr"]({ opacity: O }, void 0, f), l(z, "afterHideOverlappingLabel")) : A.attr({ opacity: O })), A.isOld = !0), h;\n }\n function u() {\n var f;\n let A = this, z = [];\n for (let O of A.labelCollectors || [])\n z = z.concat(O());\n for (let O of A.yAxis || [])\n O.stacking && O.options.stackLabels && !O.options.stackLabels.allowOverlap && p(O.stacking.stacks, (h) => {\n p(h, (g) => {\n g.label && z.push(g.label);\n });\n });\n for (let O of A.series || [])\n if (O.visible && ((f = O.hasDataLabels) != null && f.call(O))) {\n let h = (g) => {\n for (let v of g)\n v.visible && (v.dataLabels || []).forEach((L) => {\n var B;\n let y = L.options || {};\n L.labelrank = d(y.labelrank, v.labelrank, (B = v.shapeArgs) == null ? void 0 : B.height), y.allowOverlap ?? Number(y.distance) > 0 ? (L.oldOpacity = L.opacity, L.newOpacity = 1, M(L, A)) : z.push(L);\n });\n };\n h(O.nodes || []), h(O.points);\n }\n this.hideOverlappingLabels(z);\n }\n return { compose: function(A) {\n let z = A.prototype;\n z.hideOverlappingLabels || (z.hideOverlappingLabels = b, s(A, "render", u));\n } };\n }), n(o, "Extensions/BorderRadius.js", [o["Core/Defaults.js"], o["Core/Globals.js"], o["Core/Utilities.js"]], function(r, i, a) {\n let { defaultOptions: s } = r, { noop: l } = i, { addEvent: p, extend: d, isObject: b, merge: M, relativeLength: u } = a, A = { radius: 0, scope: "stack", where: void 0 }, z = l, f = l;\n function O(y, B, X, F, T = {}) {\n let w = z(y, B, X, F, T), { innerR: H = 0, r: C = X, start: q = 0, end: m = 0 } = T;\n if (T.open || !T.borderRadius)\n return w;\n let k = m - q, x = Math.sin(k / 2), N = Math.max(Math.min(u(T.borderRadius || 0, C - H), (C - H) / 2, C * x / (1 + x)), 0), V = Math.min(N, k / Math.PI * 2 * H), R = w.length - 1;\n for (; R--; )\n (function(I, j, U) {\n let _, r1, K, Q = I[j], E = I[j + 1];\n if (E[0] === "Z" && (E = I[0]), (Q[0] === "M" || Q[0] === "L") && E[0] === "A" ? (_ = Q, r1 = E, K = !0) : Q[0] === "A" && (E[0] === "M" || E[0] === "L") && (_ = E, r1 = Q), _ && r1 && r1.params) {\n let D = r1[1], G = r1[5], J = r1.params, { start: S, end: W, cx: P, cy: Y } = J, Z = G ? D - U : D + U, t1 = Z ? Math.asin(U / Z) : 0, i1 = G ? t1 : -t1, n1 = Math.cos(t1) * Z;\n K ? (J.start = S + i1, _[1] = P + n1 * Math.cos(S), _[2] = Y + n1 * Math.sin(S), I.splice(j + 1, 0, ["A", U, U, 0, 0, 1, P + D * Math.cos(J.start), Y + D * Math.sin(J.start)])) : (J.end = W - i1, r1[6] = P + D * Math.cos(J.end), r1[7] = Y + D * Math.sin(J.end), I.splice(j + 1, 0, ["A", U, U, 0, 0, 1, P + n1 * Math.cos(W), Y + n1 * Math.sin(W)])), r1[4] = Math.abs(J.end - J.start) < Math.PI ? 0 : 1;\n }\n })(w, R, R > 1 ? V : N);\n return w;\n }\n function h() {\n var y, B;\n if (this.options.borderRadius && !(this.chart.is3d && this.chart.is3d())) {\n let { options: X, yAxis: F } = this, T = X.stacking === "percent", w = (B = (y = s.plotOptions) == null ? void 0 : y[this.type]) == null ? void 0 : B.borderRadius, H = g(X.borderRadius, b(w) ? w : {}), C = F.options.reversed;\n for (let q of this.points) {\n let { shapeArgs: m } = q;\n if (q.shapeType === "roundedRect" && m) {\n let { width: k = 0, height: x = 0, y: N = 0 } = m, V = N, R = x;\n if (H.scope === "stack" && q.stackTotal) {\n let _ = F.translate(T ? 100 : q.stackTotal, !1, !0, !1, !0), r1 = F.translate(X.threshold || 0, !1, !0, !1, !0), K = this.crispCol(0, Math.min(_, r1), 0, Math.abs(_ - r1));\n V = K.y, R = K.height;\n }\n let I = (q.negative ? -1 : 1) * (C ? -1 : 1) == -1, j = H.where;\n !j && this.is("waterfall") && Math.abs((q.yBottom || 0) - (this.translatedThreshold || 0)) > this.borderWidth && (j = "all"), j || (j = "end");\n let U = Math.min(u(H.radius, k), k / 2, j === "all" ? x / 2 : 1 / 0) || 0;\n j === "end" && (I && (V -= U), R += U), d(m, { brBoxHeight: R, brBoxY: V, r: U });\n }\n }\n }\n }\n function g(y, B) {\n return b(y) || (y = { radius: y || 0 }), M(A, B, y);\n }\n function v() {\n let y = g(this.options.borderRadius);\n for (let B of this.points) {\n let X = B.shapeArgs;\n X && (X.borderRadius = u(y.radius, (X.r || 0) - (X.innerR || 0)));\n }\n }\n function L(y, B, X, F, T = {}) {\n let w = f(y, B, X, F, T), { r: H = 0, brBoxHeight: C = F, brBoxY: q = B } = T, m = B - q, k = q + C - (B + F), x = m - H > -0.1 ? 0 : H, N = k - H > -0.1 ? 0 : H, V = Math.max(x && m, 0), R = Math.max(N && k, 0), I = [y + x, B], j = [y + X - x, B], U = [y + X, B + x], _ = [y + X, B + F - N], r1 = [y + X - N, B + F], K = [y + N, B + F], Q = [y, B + F - N], E = [y, B + x], D = (G, J) => Math.sqrt(Math.pow(G, 2) - Math.pow(J, 2));\n if (V) {\n let G = D(x, x - V);\n I[0] -= G, j[0] += G, U[1] = E[1] = B + x - V;\n }\n if (F < x - V) {\n let G = D(x, x - V - F);\n U[0] = _[0] = y + X - x + G, r1[0] = Math.min(U[0], r1[0]), K[0] = Math.max(_[0], K[0]), Q[0] = E[0] = y + x - G, U[1] = E[1] = B + F;\n }\n if (R) {\n let G = D(N, N - R);\n r1[0] += G, K[0] -= G, _[1] = Q[1] = B + F - N + R;\n }\n if (F < N - R) {\n let G = D(N, N - R - F);\n U[0] = _[0] = y + X - N + G, j[0] = Math.min(U[0], j[0]), I[0] = Math.max(_[0], I[0]), Q[0] = E[0] = y + N - G, _[1] = Q[1] = B;\n }\n return w.length = 0, w.push(["M", ...I], ["L", ...j], ["A", x, x, 0, 0, 1, ...U], ["L", ..._], ["A", N, N, 0, 0, 1, ...r1], ["L", ...K], ["A", N, N, 0, 0, 1, ...Q], ["L", ...E], ["A", x, x, 0, 0, 1, ...I], ["Z"]), w;\n }\n return { compose: function(y, B, X) {\n let F = y.types.pie;\n if (!B.symbolCustomAttribs.includes("borderRadius")) {\n let T = X.prototype.symbols;\n p(y, "afterColumnTranslate", h, { order: 9 }), p(F, "afterTranslate", v), B.symbolCustomAttribs.push("borderRadius", "brBoxHeight", "brBoxY"), z = T.arc, f = T.roundedRect, T.arc = O, T.roundedRect = L;\n }\n }, optionsToObject: g };\n }), n(o, "Core/Responsive.js", [o["Core/Utilities.js"]], function(r) {\n var i;\n let { diffObjects: a, extend: s, find: l, merge: p, pick: d, uniqueKey: b } = r;\n return function(M) {\n function u(z, f) {\n let O = z.condition;\n (O.callback || function() {\n return this.chartWidth <= d(O.maxWidth, Number.MAX_VALUE) && this.chartHeight <= d(O.maxHeight, Number.MAX_VALUE) && this.chartWidth >= d(O.minWidth, 0) && this.chartHeight >= d(O.minHeight, 0);\n }).call(this) && f.push(z._id);\n }\n function A(z, f) {\n let O = this.options.responsive, h = this.currentResponsive, g = [], v;\n !f && O && O.rules && O.rules.forEach((B) => {\n B._id === void 0 && (B._id = b()), this.matchResponsiveRule(B, g);\n }, this);\n let L = p(...g.map((B) => l((O || {}).rules || [], (X) => X._id === B)).map((B) => B && B.chartOptions));\n L.isResponsiveOptions = !0, g = g.toString() || void 0;\n let y = h && h.ruleIds;\n g === y || (h && (this.currentResponsive = void 0, this.updatingResponsive = !0, this.update(h.undoOptions, z, !0), this.updatingResponsive = !1), g ? ((v = a(L, this.options, !0, this.collectionsWithUpdate)).isResponsiveOptions = !0, this.currentResponsive = { ruleIds: g, mergedOptions: L, undoOptions: v }, this.updatingResponsive || this.update(L, z, !0)) : this.currentResponsive = void 0);\n }\n M.compose = function(z) {\n let f = z.prototype;\n return f.matchResponsiveRule || s(f, { matchResponsiveRule: u, setResponsive: A }), z;\n };\n }(i || (i = {})), i;\n }), n(o, "masters/highcharts.src.js", [o["Core/Globals.js"], o["Core/Utilities.js"], o["Core/Defaults.js"], o["Core/Animation/Fx.js"], o["Core/Animation/AnimationUtilities.js"], o["Core/Renderer/HTML/AST.js"], o["Core/Templating.js"], o["Core/Renderer/RendererRegistry.js"], o["Core/Renderer/RendererUtilities.js"], o["Core/Renderer/SVG/SVGElement.js"], o["Core/Renderer/SVG/SVGRenderer.js"], o["Core/Renderer/HTML/HTMLElement.js"], o["Core/Axis/Axis.js"], o["Core/Axis/DateTimeAxis.js"], o["Core/Axis/LogarithmicAxis.js"], o["Core/Axis/PlotLineOrBand/PlotLineOrBand.js"], o["Core/Axis/Tick.js"], o["Core/Tooltip.js"], o["Core/Series/Point.js"], o["Core/Pointer.js"], o["Core/Legend/Legend.js"], o["Core/Legend/LegendSymbol.js"], o["Core/Chart/Chart.js"], o["Extensions/ScrollablePlotArea.js"], o["Core/Axis/Stacking/StackingAxis.js"], o["Core/Axis/Stacking/StackItem.js"], o["Core/Series/Series.js"], o["Core/Series/SeriesRegistry.js"], o["Series/Column/ColumnDataLabel.js"], o["Series/Pie/PieDataLabel.js"], o["Core/Series/DataLabel.js"], o["Extensions/OverlappingDataLabels.js"], o["Extensions/BorderRadius.js"], o["Core/Responsive.js"], o["Core/Color/Color.js"], o["Core/Time.js"]], function(r, i, a, s, l, p, d, b, M, u, A, z, f, O, h, g, v, L, y, B, X, F, T, w, H, C, q, m, k, x, N, V, R, I, j, U) {\n return r.AST = p, r.Axis = f, r.Chart = T, r.Color = j, r.DataLabel = N, r.Fx = s, r.HTMLElement = z, r.Legend = X, r.LegendSymbol = F, r.OverlappingDataLabels = r.OverlappingDataLabels || V, r.PlotLineOrBand = g, r.Point = y, r.Pointer = B, r.RendererRegistry = b, r.Series = q, r.SeriesRegistry = m, r.StackItem = C, r.SVGElement = u, r.SVGRenderer = A, r.Templating = d, r.Tick = v, r.Time = U, r.Tooltip = L, r.animate = l.animate, r.animObject = l.animObject, r.chart = T.chart, r.color = j.parse, r.dateFormat = d.dateFormat, r.defaultOptions = a.defaultOptions, r.distribute = M.distribute, r.format = d.format, r.getDeferredAnimation = l.getDeferredAnimation, r.getOptions = a.getOptions, r.numberFormat = d.numberFormat, r.seriesType = m.seriesType, r.setAnimation = l.setAnimation, r.setOptions = a.setOptions, r.stop = l.stop, r.time = a.defaultTime, r.timers = s.timers, R.compose(r.Series, r.SVGElement, r.SVGRenderer), k.compose(r.Series.types.column), N.compose(r.Series), O.compose(r.Axis), z.compose(r.SVGRenderer), X.compose(r.Chart), h.compose(r.Axis), V.compose(r.Chart), x.compose(r.Series.types.pie), g.compose(r.Chart, r.Axis), B.compose(r.Chart), I.compose(r.Chart), w.compose(r.Axis, r.Chart, r.Series), H.compose(r.Axis, r.Chart, r.Series), L.compose(r.Pointer), i.extend(r, i), r;\n }), o["masters/highcharts.src.js"]._modules = o, o["masters/highcharts.src.js"];\n });\n})(nb);\nvar DD = nb.exports;\nconst l3 = /* @__PURE__ */ Q2(DD), HD = ["#312783", "#009FE3", "#831F82", "#EC619F", "#FF0000", "#F39200"];\nvar ib = { exports: {} };\n(function(e) {\n /**\n * Highcharts JS v11.4.8 (2024-08-29)\n *\n * Variable Pie module for Highcharts\n *\n * (c) 2010-2024 Grzegorz Blachliński\n *\n * License: www.highcharts.com/license\n */\n (function(t) {\n e.exports ? (t.default = t, e.exports = t) : t(typeof Highcharts < "u" ? Highcharts : void 0);\n })(function(t) {\n var o = t ? t._modules : {};\n function n(r, i, a, s) {\n r.hasOwnProperty(i) || (r[i] = s.apply(null, a), typeof CustomEvent == "function" && t.win.dispatchEvent(new CustomEvent("HighchartsModuleLoaded", { detail: { path: i, module: r[i] } })));\n }\n n(o, "Series/VariablePie/VariablePieSeriesDefaults.js", [], function() {\n return { minPointSize: "10%", maxPointSize: "100%", zMin: void 0, zMax: void 0, sizeBy: "area", tooltip: { pointFormat: \' {series.name}
Value: {point.y}
Size: {point.z}
\' } };\n }), n(o, "Series/VariablePie/VariablePieSeries.js", [o["Core/Series/SeriesRegistry.js"], o["Core/Utilities.js"], o["Series/VariablePie/VariablePieSeriesDefaults.js"]], function(r, i, a) {\n let { pie: s } = r.seriesTypes, { arrayMax: l, arrayMin: p, clamp: d, extend: b, fireEvent: M, merge: u, pick: A } = i;\n class z extends s {\n calculateExtremes() {\n let O, h, g = this.chart, v = g.plotWidth, L = g.plotHeight, y = this.options, B = 2 * (y.slicedOffset || 0), X = this.zData, F = Math.min(v, L) - B, T = {}, w = this.center || this.getCenter();\n for (let H of ["minPointSize", "maxPointSize"]) {\n let C = y[H], q = /%$/.test(C);\n C = parseInt(C, 10), T[H] = q ? F * C / 100 : 2 * C;\n }\n this.minPxSize = w[3] + T.minPointSize, this.maxPxSize = d(w[2], w[3] + T.minPointSize, T.maxPointSize), X.length && (O = A(y.zMin, p(X.filter(this.zValEval))), h = A(y.zMax, l(X.filter(this.zValEval))), this.getRadii(O, h, this.minPxSize, this.maxPxSize));\n }\n getRadii(O, h, g, v) {\n let L, y, B, X = this.zData, F = [], T = this.options.sizeBy !== "radius", w = h - O;\n for (let H = 0; H < X.length; H++)\n (y = this.zValEval(X[H]) ? X[H] : O) <= O ? B = g / 2 : y >= h ? B = v / 2 : (L = w > 0 ? (y - O) / w : 0.5, T && (L = Math.sqrt(L)), B = Math.ceil(g + L * (v - g)) / 2), F.push(B);\n this.radii = F;\n }\n redraw() {\n this.center = null, super.redraw();\n }\n getDataLabelPosition(O, h) {\n let { center: g, options: v } = this, L = O.angle || 0, y = this.radii[O.index], B = g[0] + Math.cos(L) * y, X = g[1] + Math.sin(L) * y, F = Math.min((v.slicedOffset || 0) + (v.borderWidth || 0), h / 5);\n return { distance: h, natural: { x: B + Math.cos(L) * h, y: X + Math.sin(L) * h }, computed: {}, alignment: O.half ? "right" : "left", connectorPosition: { breakAt: { x: B + Math.cos(L) * F, y: X + Math.sin(L) * F }, touchingSliceAt: { x: B, y: X } } };\n }\n translate(O) {\n this.generatePoints();\n let h = this.options, g = h.slicedOffset, v = h.startAngle || 0, L = Math.PI / 180 * (v - 90), y = Math.PI / 180 * (A(h.endAngle, v + 360) - 90), B = y - L, X = this.points, F = h.ignoreHiddenPoint, T = 0, w, H, C, q, m, k, x;\n this.startAngleRad = L, this.endAngleRad = y, this.calculateExtremes(), O || (this.center = O = this.getCenter());\n for (let N = 0; N < X.length; N++)\n k = X[N], x = this.radii[N], w = L + T * B, (!F || k.visible) && (T += k.percentage / 100), H = L + T * B, k.shapeType = "arc", k.shapeArgs = { x: O[0], y: O[1], r: x, innerR: O[3] / 2, start: Math.round(1e3 * w) / 1e3, end: Math.round(1e3 * H) / 1e3 }, (C = (H + w) / 2) > 1.5 * Math.PI ? C -= 2 * Math.PI : C < -Math.PI / 2 && (C += 2 * Math.PI), k.slicedTranslation = { translateX: Math.round(Math.cos(C) * g), translateY: Math.round(Math.sin(C) * g) }, q = Math.cos(C) * O[2] / 2, m = Math.sin(C) * O[2] / 2, k.tooltipPos = [O[0] + 0.7 * q, O[1] + 0.7 * m], k.half = C < -Math.PI / 2 || C > Math.PI / 2 ? 1 : 0, k.angle = C;\n M(this, "afterTranslate");\n }\n zValEval(O) {\n return !(typeof O != "number" || isNaN(O)) || null;\n }\n }\n return z.defaultOptions = u(s.defaultOptions, a), b(z.prototype, { pointArrayMap: ["y", "z"], parallelArrays: ["x", "y", "z"] }), r.registerSeriesType("variablepie", z), z;\n }), n(o, "masters/modules/variable-pie.src.js", [o["Core/Globals.js"]], function(r) {\n return r;\n });\n });\n})(ib);\nvar VD = ib.exports;\nconst PD = /* @__PURE__ */ Q2(VD);\nvar ab = { exports: {} };\n(function(e) {\n /**\n * Highcharts JS v11.4.8 (2024-08-29)\n *\n * (c) 2009-2024 Torstein Honsi\n *\n * License: www.highcharts.com/license\n */\n (function(t) {\n e.exports ? (t.default = t, e.exports = t) : t(typeof Highcharts < "u" ? Highcharts : void 0);\n })(function(t) {\n var o = t ? t._modules : {};\n function n(r, i, a, s) {\n r.hasOwnProperty(i) || (r[i] = s.apply(null, a), typeof CustomEvent == "function" && t.win.dispatchEvent(new CustomEvent("HighchartsModuleLoaded", { detail: { path: i, module: r[i] } })));\n }\n n(o, "Extensions/Pane/PaneComposition.js", [o["Core/Utilities.js"]], function(r) {\n let { addEvent: i, correctFloat: a, defined: s, pick: l } = r;\n function p(A) {\n let z, f = this;\n return A && f.pane.forEach((O) => {\n d(A.chartX - f.plotLeft, A.chartY - f.plotTop, O.center) && (z = O);\n }), z;\n }\n function d(A, z, f, O, h) {\n let g = !0, v = f[0], L = f[1], y = Math.sqrt(Math.pow(A - v, 2) + Math.pow(z - L, 2));\n if (s(O) && s(h)) {\n let B = Math.atan2(a(z - L, 8), a(A - v, 8));\n h !== O && (g = O > h ? B >= O && B <= Math.PI || B <= h && B >= -Math.PI : B >= O && B <= a(h, 8));\n }\n return y <= Math.ceil(f[2] / 2) && g;\n }\n function b(A) {\n this.polar && (A.options.inverted && ([A.x, A.y] = [A.y, A.x]), A.isInsidePlot = this.pane.some((z) => d(A.x, A.y, z.center, z.axis && z.axis.normalizedStartAngleRad, z.axis && z.axis.normalizedEndAngleRad)));\n }\n function M(A) {\n let z = this.chart;\n A.hoverPoint && A.hoverPoint.plotX && A.hoverPoint.plotY && z.hoverPane && !d(A.hoverPoint.plotX, A.hoverPoint.plotY, z.hoverPane.center) && (A.hoverPoint = void 0);\n }\n function u(A) {\n let z = this.chart;\n z.polar ? (z.hoverPane = z.getHoverPane(A), A.filter = function(f) {\n return f.visible && !(!A.shared && f.directTouch) && l(f.options.enableMouseTracking, !0) && (!z.hoverPane || f.xAxis.pane === z.hoverPane);\n }) : z.hoverPane = void 0;\n }\n return { compose: function(A, z) {\n let f = A.prototype;\n f.getHoverPane || (f.collectionsWithUpdate.push("pane"), f.getHoverPane = p, i(A, "afterIsInsidePlot", b), i(z, "afterGetHoverData", M), i(z, "beforeGetHoverData", u));\n } };\n }), n(o, "Extensions/Pane/PaneDefaults.js", [], function() {\n return { pane: { center: ["50%", "50%"], size: "85%", innerSize: "0%", startAngle: 0 }, background: { shape: "circle", borderRadius: 0, borderWidth: 1, borderColor: "#cccccc", backgroundColor: { linearGradient: { x1: 0, y1: 0, x2: 0, y2: 1 }, stops: [[0, "#ffffff"], [1, "#e6e6e6"]] }, from: -Number.MAX_VALUE, innerRadius: 0, to: Number.MAX_VALUE, outerRadius: "105%" } };\n }), n(o, "Extensions/Pane/Pane.js", [o["Series/CenteredUtilities.js"], o["Extensions/Pane/PaneComposition.js"], o["Extensions/Pane/PaneDefaults.js"], o["Core/Utilities.js"]], function(r, i, a, s) {\n let { extend: l, merge: p, splat: d } = s;\n class b {\n constructor(u, A) {\n this.coll = "pane", this.init(u, A);\n }\n init(u, A) {\n this.chart = A, this.background = [], A.pane.push(this), this.setOptions(u);\n }\n setOptions(u) {\n this.options = u = p(a.pane, this.chart.angular ? { background: {} } : void 0, u);\n }\n render() {\n let u = this.options, A = this.chart.renderer;\n this.group || (this.group = A.g("pane-group").attr({ zIndex: u.zIndex || 0 }).add()), this.updateCenter();\n let z = this.options.background;\n if (z) {\n let f = Math.max((z = d(z)).length, this.background.length || 0);\n for (let O = 0; O < f; O++)\n z[O] && this.axis ? this.renderBackground(p(a.background, z[O]), O) : this.background[O] && (this.background[O] = this.background[O].destroy(), this.background.splice(O, 1));\n }\n }\n renderBackground(u, A) {\n let z = { class: "highcharts-pane " + (u.className || "") }, f = "animate";\n this.chart.styledMode || l(z, { fill: u.backgroundColor, stroke: u.borderColor, "stroke-width": u.borderWidth }), this.background[A] || (this.background[A] = this.chart.renderer.path().add(this.group), f = "attr"), this.background[A][f]({ d: this.axis.getPlotBandPath(u.from, u.to, u) }).attr(z);\n }\n updateCenter(u) {\n this.center = (u || this.axis || {}).center = r.getCenter.call(this);\n }\n update(u, A) {\n p(!0, this.options, u), this.setOptions(this.options), this.render(), this.chart.axes.forEach(function(z) {\n z.pane === this && (z.pane = null, z.update({}, A));\n }, this);\n }\n }\n return b.compose = i.compose, b;\n }), n(o, "Series/AreaRange/AreaRangePoint.js", [o["Core/Series/SeriesRegistry.js"], o["Core/Utilities.js"]], function(r, i) {\n let { area: { prototype: { pointClass: a, pointClass: { prototype: s } } } } = r.seriesTypes, { defined: l, isNumber: p } = i;\n return class extends a {\n setState() {\n let d = this.state, b = this.series, M = b.chart.polar;\n l(this.plotHigh) || (this.plotHigh = b.yAxis.toPixels(this.high, !0)), l(this.plotLow) || (this.plotLow = this.plotY = b.yAxis.toPixels(this.low, !0)), b.lowerStateMarkerGraphic = b.stateMarkerGraphic, b.stateMarkerGraphic = b.upperStateMarkerGraphic, this.graphic = this.graphics && this.graphics[1], this.plotY = this.plotHigh, M && p(this.plotHighX) && (this.plotX = this.plotHighX), s.setState.apply(this, arguments), this.state = d, this.plotY = this.plotLow, this.graphic = this.graphics && this.graphics[0], M && p(this.plotLowX) && (this.plotX = this.plotLowX), b.upperStateMarkerGraphic = b.stateMarkerGraphic, b.stateMarkerGraphic = b.lowerStateMarkerGraphic, b.lowerStateMarkerGraphic = void 0;\n let u = b.modifyMarkerSettings();\n s.setState.apply(this, arguments), b.restoreMarkerSettings(u);\n }\n haloPath() {\n let d = this.series.chart.polar, b = [];\n return this.plotY = this.plotLow, d && p(this.plotLowX) && (this.plotX = this.plotLowX), this.isInside && (b = s.haloPath.apply(this, arguments)), this.plotY = this.plotHigh, d && p(this.plotHighX) && (this.plotX = this.plotHighX), this.isTopInside && (b = b.concat(s.haloPath.apply(this, arguments))), b;\n }\n isValid() {\n return p(this.low) && p(this.high);\n }\n };\n }), n(o, "Series/AreaRange/AreaRangeSeries.js", [o["Series/AreaRange/AreaRangePoint.js"], o["Core/Globals.js"], o["Core/Series/SeriesRegistry.js"], o["Core/Utilities.js"]], function(r, i, a, s) {\n let { noop: l } = i, { area: p, area: { prototype: d }, column: { prototype: b } } = a.seriesTypes, { addEvent: M, defined: u, extend: A, isArray: z, isNumber: f, pick: O, merge: h } = s;\n class g extends p {\n toYData(L) {\n return [L.low, L.high];\n }\n highToXY(L) {\n let y = this.chart, B = this.xAxis.postTranslate(L.rectPlotX || 0, this.yAxis.len - (L.plotHigh || 0));\n L.plotHighX = B.x - y.plotLeft, L.plotHigh = B.y - y.plotTop, L.plotLowX = L.plotX;\n }\n getGraphPath(L) {\n let y = [], B = [], X = d.getGraphPath, F = this.options, T = this.chart.polar, w = T && F.connectEnds !== !1, H = F.connectNulls, C, q, m, k = F.step;\n for (C = (L = L || this.points).length; C--; ) {\n q = L[C];\n let I = T ? { plotX: q.rectPlotX, plotY: q.yBottom, doCurve: !1 } : { plotX: q.plotX, plotY: q.plotY, doCurve: !1 };\n q.isNull || w || H || L[C + 1] && !L[C + 1].isNull || B.push(I), m = { polarPlotY: q.polarPlotY, rectPlotX: q.rectPlotX, yBottom: q.yBottom, plotX: O(q.plotHighX, q.plotX), plotY: q.plotHigh, isNull: q.isNull }, B.push(m), y.push(m), q.isNull || w || H || L[C - 1] && !L[C - 1].isNull || B.push(I);\n }\n let x = X.call(this, L);\n k && (k === !0 && (k = "left"), F.step = { left: "right", center: "center", right: "left" }[k]);\n let N = X.call(this, y), V = X.call(this, B);\n F.step = k;\n let R = [].concat(x, N);\n return !this.chart.polar && V[0] && V[0][0] === "M" && (V[0] = ["L", V[0][1], V[0][2]]), this.graphPath = R, this.areaPath = x.concat(V), R.isArea = !0, R.xMap = x.xMap, this.areaPath.xMap = x.xMap, R;\n }\n drawDataLabels() {\n var m, k;\n let L, y, B, X, F, T = this.points, w = T.length, H = [], C = this.options.dataLabels, q = this.chart.inverted;\n if (C) {\n if (z(C) ? (X = C[0] || { enabled: !1 }, F = C[1] || { enabled: !1 }) : ((X = A({}, C)).x = C.xHigh, X.y = C.yHigh, (F = A({}, C)).x = C.xLow, F.y = C.yLow), X.enabled || ((m = this.hasDataLabels) == null ? void 0 : m.call(this))) {\n for (L = w; L--; )\n if (y = T[L]) {\n let { plotHigh: x = 0, plotLow: N = 0 } = y;\n B = X.inside ? x < N : x > N, y.y = y.high, y._plotY = y.plotY, y.plotY = x, H[L] = y.dataLabel, y.dataLabel = y.dataLabelUpper, y.below = B, q ? X.align || (X.align = B ? "right" : "left") : X.verticalAlign || (X.verticalAlign = B ? "top" : "bottom");\n }\n for (this.options.dataLabels = X, d.drawDataLabels && d.drawDataLabels.apply(this, arguments), L = w; L--; )\n (y = T[L]) && (y.dataLabelUpper = y.dataLabel, y.dataLabel = H[L], delete y.dataLabels, y.y = y.low, y.plotY = y._plotY);\n }\n if (F.enabled || (k = this.hasDataLabels) != null && k.call(this)) {\n for (L = w; L--; )\n if (y = T[L]) {\n let { plotHigh: x = 0, plotLow: N = 0 } = y;\n B = F.inside ? x < N : x > N, y.below = !B, q ? F.align || (F.align = B ? "left" : "right") : F.verticalAlign || (F.verticalAlign = B ? "bottom" : "top");\n }\n this.options.dataLabels = F, d.drawDataLabels && d.drawDataLabels.apply(this, arguments);\n }\n if (X.enabled)\n for (L = w; L--; )\n (y = T[L]) && (y.dataLabels = [y.dataLabelUpper, y.dataLabel].filter(function(x) {\n return !!x;\n }));\n this.options.dataLabels = C;\n }\n }\n alignDataLabel() {\n b.alignDataLabel.apply(this, arguments);\n }\n modifyMarkerSettings() {\n let L = { marker: this.options.marker, symbol: this.symbol };\n if (this.options.lowMarker) {\n let { options: { marker: y, lowMarker: B } } = this;\n this.options.marker = h(y, B), B.symbol && (this.symbol = B.symbol);\n }\n return L;\n }\n restoreMarkerSettings(L) {\n this.options.marker = L.marker, this.symbol = L.symbol;\n }\n drawPoints() {\n let L, y, B = this.points.length, X = this.modifyMarkerSettings();\n for (d.drawPoints.apply(this, arguments), this.restoreMarkerSettings(X), L = 0; L < B; )\n (y = this.points[L]).graphics = y.graphics || [], y.origProps = { plotY: y.plotY, plotX: y.plotX, isInside: y.isInside, negative: y.negative, zone: y.zone, y: y.y }, (y.graphic || y.graphics[0]) && (y.graphics[0] = y.graphic), y.graphic = y.graphics[1], y.plotY = y.plotHigh, u(y.plotHighX) && (y.plotX = y.plotHighX), y.y = O(y.high, y.origProps.y), y.negative = y.y < (this.options.threshold || 0), this.zones.length && (y.zone = y.getZone()), this.chart.polar || (y.isInside = y.isTopInside = y.plotY !== void 0 && y.plotY >= 0 && y.plotY <= this.yAxis.len && y.plotX >= 0 && y.plotX <= this.xAxis.len), L++;\n for (d.drawPoints.apply(this, arguments), L = 0; L < B; )\n (y = this.points[L]).graphics = y.graphics || [], (y.graphic || y.graphics[1]) && (y.graphics[1] = y.graphic), y.graphic = y.graphics[0], y.origProps && (A(y, y.origProps), delete y.origProps), L++;\n }\n hasMarkerChanged(L, y) {\n let B = L.lowMarker, X = y.lowMarker || {};\n return B && (B.enabled === !1 || X.symbol !== B.symbol || X.height !== B.height || X.width !== B.width) || super.hasMarkerChanged(L, y);\n }\n }\n return g.defaultOptions = h(p.defaultOptions, { lineWidth: 1, threshold: null, tooltip: { pointFormat: \' {series.name}: {point.low} - {point.high}
\' }, trackByArea: !0, dataLabels: { align: void 0, verticalAlign: void 0, xLow: 0, xHigh: 0, yLow: 0, yHigh: 0 } }), M(g, "afterTranslate", function() {\n this.pointArrayMap.join(",") === "low,high" && this.points.forEach((v) => {\n let L = v.high, y = v.plotY;\n v.isNull ? v.plotY = void 0 : (v.plotLow = y, v.plotHigh = f(L) ? this.yAxis.translate(this.dataModify ? this.dataModify.modifyValue(L) : L, !1, !0, void 0, !0) : void 0, this.dataModify && (v.yBottom = v.plotHigh));\n });\n }, { order: 0 }), M(g, "afterTranslate", function() {\n this.points.forEach((v) => {\n if (this.chart.polar)\n this.highToXY(v), v.plotLow = v.plotY, v.tooltipPos = [((v.plotHighX || 0) + (v.plotLowX || 0)) / 2, ((v.plotHigh || 0) + (v.plotLow || 0)) / 2];\n else {\n let L = v.pos(!1, v.plotLow), y = v.pos(!1, v.plotHigh);\n L && y && (L[0] = (L[0] + y[0]) / 2, L[1] = (L[1] + y[1]) / 2), v.tooltipPos = L;\n }\n });\n }, { order: 3 }), A(g.prototype, { deferTranslatePolar: !0, pointArrayMap: ["low", "high"], pointClass: r, pointValKey: "low", setStackedPoints: l }), a.registerSeriesType("arearange", g), g;\n }), n(o, "Series/AreaSplineRange/AreaSplineRangeSeries.js", [o["Series/AreaRange/AreaRangeSeries.js"], o["Core/Series/SeriesRegistry.js"], o["Core/Utilities.js"]], function(r, i, a) {\n let { spline: { prototype: s } } = i.seriesTypes, { merge: l, extend: p } = a;\n class d extends r {\n }\n return d.defaultOptions = l(r.defaultOptions), p(d.prototype, { getPointSpline: s.getPointSpline }), i.registerSeriesType("areasplinerange", d), d;\n }), n(o, "Series/BoxPlot/BoxPlotSeriesDefaults.js", [], function() {\n return { threshold: null, tooltip: { pointFormat: \' {series.name}
Maximum: {point.high}
Upper quartile: {point.q3}
Median: {point.median}
Lower quartile: {point.q1}
Minimum: {point.low}
\' }, whiskerLength: "50%", fillColor: "#ffffff", lineWidth: 1, medianWidth: 2, whiskerWidth: 2 };\n }), n(o, "Series/BoxPlot/BoxPlotSeries.js", [o["Series/BoxPlot/BoxPlotSeriesDefaults.js"], o["Series/Column/ColumnSeries.js"], o["Core/Globals.js"], o["Core/Series/SeriesRegistry.js"], o["Core/Utilities.js"]], function(r, i, a, s, l) {\n let { noop: p } = a, { crisp: d, extend: b, merge: M, pick: u } = l;\n class A extends i {\n pointAttribs() {\n return {};\n }\n translate() {\n let f = this.yAxis, O = this.pointArrayMap;\n super.translate.apply(this), this.points.forEach(function(h) {\n O.forEach(function(g) {\n h[g] !== null && (h[g + "Plot"] = f.translate(h[g], 0, 1, 0, 1));\n }), h.plotHigh = h.highPlot;\n });\n }\n drawPoints() {\n let f, O, h, g, v, L, y, B, X, F, T, w, H, C = this.points, q = this.options, m = this.chart, k = m.renderer, x = this.doQuartiles !== !1, N = this.options.whiskerLength;\n for (let V of C) {\n let R = (B = V.graphic) ? "animate" : "attr", I = V.shapeArgs, j = {}, U = {}, _ = {}, r1 = {}, K = V.color || this.color;\n if (V.plotY !== void 0) {\n let Q;\n X = I.width, T = (F = I.x) + X, w = X / 2, f = x ? V.q1Plot : V.lowPlot, O = x ? V.q3Plot : V.lowPlot, h = V.highPlot, g = V.lowPlot, B || (V.graphic = B = k.g("point").add(this.group), V.stem = k.path().addClass("highcharts-boxplot-stem").add(B), N && (V.whiskers = k.path().addClass("highcharts-boxplot-whisker").add(B)), x && (V.box = k.path(y).addClass("highcharts-boxplot-box").add(B)), V.medianShape = k.path(L).addClass("highcharts-boxplot-median").add(B)), m.styledMode || (U.stroke = V.stemColor || q.stemColor || K, U["stroke-width"] = u(V.stemWidth, q.stemWidth, q.lineWidth), U.dashstyle = V.stemDashStyle || q.stemDashStyle || q.dashStyle, V.stem.attr(U), N && (_.stroke = V.whiskerColor || q.whiskerColor || K, _["stroke-width"] = u(V.whiskerWidth, q.whiskerWidth, q.lineWidth), _.dashstyle = V.whiskerDashStyle || q.whiskerDashStyle || q.dashStyle, V.whiskers.attr(_)), x && (j.fill = V.fillColor || q.fillColor || K, j.stroke = q.lineColor || K, j["stroke-width"] = q.lineWidth || 0, j.dashstyle = V.boxDashStyle || q.boxDashStyle || q.dashStyle, V.box.attr(j)), r1.stroke = V.medianColor || q.medianColor || K, r1["stroke-width"] = u(V.medianWidth, q.medianWidth, q.lineWidth), r1.dashstyle = V.medianDashStyle || q.medianDashStyle || q.dashStyle, V.medianShape.attr(r1));\n let E = d((V.plotX || 0) + (this.pointXOffset || 0) + (this.barW || 0) / 2, V.stem.strokeWidth());\n if (Q = [["M", E, O], ["L", E, h], ["M", E, f], ["L", E, g]], V.stem[R]({ d: Q }), x) {\n let D = V.box.strokeWidth();\n f = d(f, D), O = d(O, D), Q = [["M", F = d(F, D), O], ["L", F, f], ["L", T = d(T, D), f], ["L", T, O], ["L", F, O], ["Z"]], V.box[R]({ d: Q });\n }\n if (N) {\n let D = V.whiskers.strokeWidth();\n h = d(V.highPlot, D), g = d(V.lowPlot, D), Q = [["M", d(E - (H = typeof N == "string" && /%$/.test(N) ? w * parseFloat(N) / 100 : Number(N) / 2)), h], ["L", d(E + H), h], ["M", d(E - H), g], ["L", d(E + H), g]], V.whiskers[R]({ d: Q });\n }\n Q = [["M", F, v = d(V.medianPlot, V.medianShape.strokeWidth())], ["L", T, v]], V.medianShape[R]({ d: Q });\n }\n }\n }\n toYData(f) {\n return [f.low, f.q1, f.median, f.q3, f.high];\n }\n }\n return A.defaultOptions = M(i.defaultOptions, r), b(A.prototype, { pointArrayMap: ["low", "q1", "median", "q3", "high"], pointValKey: "high", drawDataLabels: p, setStackedPoints: p }), s.registerSeriesType("boxplot", A), A;\n }), n(o, "Series/Bubble/BubbleLegendDefaults.js", [], function() {\n return { borderColor: void 0, borderWidth: 2, className: void 0, color: void 0, connectorClassName: void 0, connectorColor: void 0, connectorDistance: 60, connectorWidth: 1, enabled: !1, labels: { className: void 0, allowOverlap: !1, format: "", formatter: void 0, align: "right", style: { fontSize: "0.9em", color: "#000000" }, x: 0, y: 0 }, maxSize: 60, minSize: 10, legendIndex: 0, ranges: { value: void 0, borderColor: void 0, color: void 0, connectorColor: void 0 }, sizeBy: "area", sizeByAbsoluteValue: !1, zIndex: 1, zThreshold: 0 };\n }), n(o, "Series/Bubble/BubbleLegendItem.js", [o["Core/Color/Color.js"], o["Core/Templating.js"], o["Core/Globals.js"], o["Core/Utilities.js"]], function(r, i, a, s) {\n let { parse: l } = r, { noop: p } = a, { arrayMax: d, arrayMin: b, isNumber: M, merge: u, pick: A, stableSort: z } = s;\n return class {\n constructor(f, O) {\n this.setState = p, this.init(f, O);\n }\n init(f, O) {\n this.options = f, this.visible = !0, this.chart = O.chart, this.legend = O;\n }\n addToLegend(f) {\n f.splice(this.options.legendIndex, 0, this);\n }\n drawLegendSymbol(f) {\n let O, h = A(f.options.itemDistance, 20), g = this.legendItem || {}, v = this.options, L = v.ranges, y = v.connectorDistance;\n if (!L || !L.length || !M(L[0].value)) {\n f.options.bubbleLegend.autoRanges = !0;\n return;\n }\n z(L, function(T, w) {\n return w.value - T.value;\n }), this.ranges = L, this.setOptions(), this.render();\n let B = this.getMaxLabelSize(), X = this.ranges[0].radius, F = 2 * X;\n O = (O = y - X + B.width) > 0 ? O : 0, this.maxLabel = B, this.movementX = v.labels.align === "left" ? O : 0, g.labelWidth = F + O + h, g.labelHeight = F + B.height / 2;\n }\n setOptions() {\n let f = this.ranges, O = this.options, h = this.chart.series[O.seriesIndex], g = this.legend.baseline, v = { zIndex: O.zIndex, "stroke-width": O.borderWidth }, L = { zIndex: O.zIndex, "stroke-width": O.connectorWidth }, y = { align: this.legend.options.rtl || O.labels.align === "left" ? "right" : "left", zIndex: O.zIndex }, B = h.options.marker.fillOpacity, X = this.chart.styledMode;\n f.forEach(function(F, T) {\n X || (v.stroke = A(F.borderColor, O.borderColor, h.color), v.fill = A(F.color, O.color, B !== 1 ? l(h.color).setOpacity(B).get("rgba") : h.color), L.stroke = A(F.connectorColor, O.connectorColor, h.color)), f[T].radius = this.getRangeRadius(F.value), f[T] = u(f[T], { center: f[0].radius - f[T].radius + g }), X || u(!0, f[T], { bubbleAttribs: u(v), connectorAttribs: u(L), labelAttribs: y });\n }, this);\n }\n getRangeRadius(f) {\n let O = this.options, h = this.options.seriesIndex, g = this.chart.series[h], v = O.ranges[0].value, L = O.ranges[O.ranges.length - 1].value, y = O.minSize, B = O.maxSize;\n return g.getRadius.call(this, L, v, y, B, f);\n }\n render() {\n let f = this.legendItem || {}, O = this.chart.renderer, h = this.options.zThreshold;\n for (let g of (this.symbols || (this.symbols = { connectors: [], bubbleItems: [], labels: [] }), f.symbol = O.g("bubble-legend"), f.label = O.g("bubble-legend-item").css(this.legend.itemStyle || {}), f.symbol.translateX = 0, f.symbol.translateY = 0, f.symbol.add(f.label), f.label.add(f.group), this.ranges))\n g.value >= h && this.renderRange(g);\n this.hideOverlappingLabels();\n }\n renderRange(f) {\n let O = this.ranges[0], h = this.legend, g = this.options, v = g.labels, L = this.chart, y = L.series[g.seriesIndex], B = L.renderer, X = this.symbols, F = X.labels, T = f.center, w = Math.abs(f.radius), H = g.connectorDistance || 0, C = v.align, q = h.options.rtl, m = g.borderWidth, k = g.connectorWidth, x = O.radius || 0, N = T - w - m / 2 + k / 2, V = (N % 1 ? 1 : 0.5) - (k % 2 ? 0 : 0.5), R = B.styledMode, I = q || C === "left" ? -H : H;\n C === "center" && (I = 0, g.connectorDistance = 0, f.labelAttribs.align = "center"), X.bubbleItems.push(B.circle(x, T + V, w).attr(R ? {} : f.bubbleAttribs).addClass((R ? "highcharts-color-" + y.colorIndex + " " : "") + "highcharts-bubble-legend-symbol " + (g.className || "")).add(this.legendItem.symbol)), X.connectors.push(B.path(B.crispLine([["M", x, N], ["L", x + I, N]], g.connectorWidth)).attr(R ? {} : f.connectorAttribs).addClass((R ? "highcharts-color-" + this.options.seriesIndex + " " : "") + "highcharts-bubble-legend-connectors " + (g.connectorClassName || "")).add(this.legendItem.symbol));\n let j = B.text(this.formatLabel(f)).attr(R ? {} : f.labelAttribs).css(R ? {} : v.style).addClass("highcharts-bubble-legend-labels " + (g.labels.className || "")).add(this.legendItem.symbol), U = { x: x + I + g.labels.x, y: N + g.labels.y + 0.4 * j.getBBox().height };\n j.attr(U), F.push(j), j.placed = !0, j.alignAttr = U;\n }\n getMaxLabelSize() {\n let f, O;\n return this.symbols.labels.forEach(function(h) {\n O = h.getBBox(!0), f = f ? O.width > f.width ? O : f : O;\n }), f || {};\n }\n formatLabel(f) {\n let O = this.options, h = O.labels.formatter, g = O.labels.format, { numberFormatter: v } = this.chart;\n return g ? i.format(g, f) : h ? h.call(f) : v(f.value, 1);\n }\n hideOverlappingLabels() {\n let f = this.chart, O = this.options.labels.allowOverlap, h = this.symbols;\n !O && h && (f.hideOverlappingLabels(h.labels), h.labels.forEach(function(g, v) {\n g.newOpacity ? g.newOpacity !== g.oldOpacity && h.connectors[v].show() : h.connectors[v].hide();\n }));\n }\n getRanges() {\n let f = this.legend.bubbleLegend, O = f.chart.series, h = f.options.ranges, g, v, L = Number.MAX_VALUE, y = -Number.MAX_VALUE;\n return O.forEach(function(B) {\n B.isBubble && !B.ignoreSeries && (v = B.zData.filter(M)).length && (L = A(B.options.zMin, Math.min(L, Math.max(b(v), B.options.displayNegative === !1 ? B.options.zThreshold : -Number.MAX_VALUE))), y = A(B.options.zMax, Math.max(y, d(v))));\n }), g = L === y ? [{ value: y }] : [{ value: L }, { value: (L + y) / 2 }, { value: y, autoRanges: !0 }], h.length && h[0].radius && g.reverse(), g.forEach(function(B, X) {\n h && h[X] && (g[X] = u(h[X], B));\n }), g;\n }\n predictBubbleSizes() {\n let f = this.chart, O = f.legend.options, h = O.floating, g = O.layout === "horizontal", v = g ? f.legend.lastLineHeight : 0, L = f.plotSizeX, y = f.plotSizeY, B = f.series[this.options.seriesIndex], X = B.getPxExtremes(), F = Math.ceil(X.minPxSize), T = Math.ceil(X.maxPxSize), w = Math.min(y, L), H, C = B.options.maxSize;\n return h || !/%$/.test(C) ? H = T : (H = (w + v) * (C = parseFloat(C)) / 100 / (C / 100 + 1), (g && y - H >= L || !g && L - H >= y) && (H = T)), [F, Math.ceil(H)];\n }\n updateRanges(f, O) {\n let h = this.legend.options.bubbleLegend;\n h.minSize = f, h.maxSize = O, h.ranges = this.getRanges();\n }\n correctSizes() {\n let f = this.legend, O = this.chart.series[this.options.seriesIndex].getPxExtremes();\n Math.abs(Math.ceil(O.maxPxSize) - this.options.maxSize) > 1 && (this.updateRanges(this.options.minSize, O.maxPxSize), f.render());\n }\n };\n }), n(o, "Series/Bubble/BubbleLegendComposition.js", [o["Series/Bubble/BubbleLegendDefaults.js"], o["Series/Bubble/BubbleLegendItem.js"], o["Core/Defaults.js"], o["Core/Globals.js"], o["Core/Utilities.js"]], function(r, i, a, s, l) {\n let { setOptions: p } = a, { composed: d } = s, { addEvent: b, objectEach: M, pushUnique: u, wrap: A } = l;\n function z(L, y, B) {\n let X, F, T, w = this.legend, H = f(this) >= 0;\n w && w.options.enabled && w.bubbleLegend && w.options.bubbleLegend.autoRanges && H ? (X = w.bubbleLegend.options, F = w.bubbleLegend.predictBubbleSizes(), w.bubbleLegend.updateRanges(F[0], F[1]), X.placed || (w.group.placed = !1, w.allItems.forEach((C) => {\n (T = C.legendItem || {}).group && (T.group.translateY = void 0);\n })), w.render(), X.placed || (this.getMargins(), this.axes.forEach(function(C) {\n C.visible && C.render(), X.placed || (C.setScale(), C.updateNames(), M(C.ticks, function(q) {\n q.isNew = !0, q.isNewLabel = !0;\n }));\n }), this.getMargins()), X.placed = !0, L.call(this, y, B), w.bubbleLegend.correctSizes(), v(w, O(w))) : (L.call(this, y, B), w && w.options.enabled && w.bubbleLegend && (w.render(), v(w, O(w))));\n }\n function f(L) {\n let y = L.series, B = 0;\n for (; B < y.length; ) {\n if (y[B] && y[B].isBubble && y[B].visible && y[B].zData.length)\n return B;\n B++;\n }\n return -1;\n }\n function O(L) {\n let y = L.allItems, B = [], X = y.length, F, T, w, H = 0, C = 0;\n for (H = 0; H < X; H++)\n if (T = y[H].legendItem || {}, w = (y[H + 1] || {}).legendItem || {}, T.labelHeight && (y[H].itemHeight = T.labelHeight), y[H] === y[X - 1] || T.y !== w.y) {\n for (B.push({ height: 0 }), F = B[B.length - 1]; C <= H; C++)\n y[C].itemHeight > F.height && (F.height = y[C].itemHeight);\n F.step = H;\n }\n return B;\n }\n function h(L) {\n let y = this.bubbleLegend, B = this.options, X = B.bubbleLegend, F = f(this.chart);\n y && y.ranges && y.ranges.length && (X.ranges.length && (X.autoRanges = !!X.ranges[0].autoRanges), this.destroyItem(y)), F >= 0 && B.enabled && X.enabled && (X.seriesIndex = F, this.bubbleLegend = new i(X, this), this.bubbleLegend.addToLegend(L.allItems));\n }\n function g(L) {\n let y;\n if (L.defaultPrevented)\n return !1;\n let B = L.legendItem, X = this.chart, F = B.visible;\n this && this.bubbleLegend && (B.visible = !F, B.ignoreSeries = F, y = f(X) >= 0, this.bubbleLegend.visible !== y && (this.update({ bubbleLegend: { enabled: y } }), this.bubbleLegend.visible = y), B.visible = F);\n }\n function v(L, y) {\n let B = L.allItems, X = L.options.rtl, F, T, w, H, C = 0;\n B.forEach((q, m) => {\n (H = q.legendItem || {}).group && (F = H.group.translateX || 0, T = H.y || 0, ((w = q.movementX) || X && q.ranges) && (w = X ? F - q.options.maxSize / 2 : F + w, H.group.attr({ translateX: w })), m > y[C].step && C++, H.group.attr({ translateY: Math.round(T + y[C].height / 2) }), H.y = T + y[C].height / 2);\n });\n }\n return { compose: function(L, y) {\n u(d, "Series.BubbleLegend") && (p({ legend: { bubbleLegend: r } }), A(L.prototype, "drawChartBox", z), b(y, "afterGetAllItems", h), b(y, "itemClick", g));\n } };\n }), n(o, "Series/Bubble/BubblePoint.js", [o["Core/Series/Point.js"], o["Core/Series/SeriesRegistry.js"], o["Core/Utilities.js"]], function(r, i, a) {\n let { seriesTypes: { scatter: { prototype: { pointClass: s } } } } = i, { extend: l } = a;\n class p extends s {\n haloPath(b) {\n let M = (b && this.marker && this.marker.radius || 0) + b;\n if (this.series.chart.inverted) {\n let u = this.pos() || [0, 0], { xAxis: A, yAxis: z, chart: f } = this.series;\n return f.renderer.symbols.circle(A.len - u[1] - M, z.len - u[0] - M, 2 * M, 2 * M);\n }\n return r.prototype.haloPath.call(this, M);\n }\n }\n return l(p.prototype, { ttBelow: !1 }), p;\n }), n(o, "Series/Bubble/BubbleSeries.js", [o["Series/Bubble/BubbleLegendComposition.js"], o["Series/Bubble/BubblePoint.js"], o["Core/Color/Color.js"], o["Core/Globals.js"], o["Core/Series/SeriesRegistry.js"], o["Core/Utilities.js"]], function(r, i, a, s, l, p) {\n let { parse: d } = a, { composed: b, noop: M } = s, { series: u, seriesTypes: { column: { prototype: A }, scatter: z } } = l, { addEvent: f, arrayMax: O, arrayMin: h, clamp: g, extend: v, isNumber: L, merge: y, pick: B, pushUnique: X } = p;\n function F() {\n let w = this.len, { coll: H, isXAxis: C, min: q } = this, m = C ? "xData" : "yData", k = (this.max || 0) - (q || 0), x = 0, N = w, V = w / k, R;\n (H === "xAxis" || H === "yAxis") && (this.series.forEach((I) => {\n if (I.bubblePadding && I.reserveSpace()) {\n this.allowZoomOutside = !0, R = !0;\n let j = I[m];\n if (C && ((I.onPoint || I).getRadii(0, 0, I), I.onPoint && (I.radii = I.onPoint.radii)), k > 0) {\n let U = j.length;\n for (; U--; )\n if (L(j[U]) && this.dataMin <= j[U] && j[U] <= this.max) {\n let _ = I.radii && I.radii[U] || 0;\n x = Math.min((j[U] - q) * V - _, x), N = Math.max((j[U] - q) * V + _, N);\n }\n }\n }\n }), R && k > 0 && !this.logarithmic && (N -= w, V *= (w + Math.max(0, x) - Math.min(N, w)) / w, [["min", "userMin", x], ["max", "userMax", N]].forEach((I) => {\n B(this.options[I[0]], this[I[1]]) === void 0 && (this[I[0]] += I[2] / V);\n })));\n }\n class T extends z {\n static compose(H, C, q) {\n r.compose(C, q), X(b, "Series.Bubble") && f(H, "foundExtremes", F);\n }\n animate(H) {\n !H && this.points.length < this.options.animationLimit && this.points.forEach(function(C) {\n let { graphic: q, plotX: m = 0, plotY: k = 0 } = C;\n q && q.width && (this.hasRendered || q.attr({ x: m, y: k, width: 1, height: 1 }), q.animate(this.markerAttribs(C), this.options.animation));\n }, this);\n }\n getRadii() {\n let H = this.zData, C = this.yData, q = [], m, k, x, N = this.chart.bubbleZExtremes, { minPxSize: V, maxPxSize: R } = this.getPxExtremes();\n if (!N) {\n let I, j = Number.MAX_VALUE, U = -Number.MAX_VALUE;\n this.chart.series.forEach((_) => {\n if (_.bubblePadding && _.reserveSpace()) {\n let r1 = (_.onPoint || _).getZExtremes();\n r1 && (j = Math.min(B(j, r1.zMin), r1.zMin), U = Math.max(B(U, r1.zMax), r1.zMax), I = !0);\n }\n }), I ? (N = { zMin: j, zMax: U }, this.chart.bubbleZExtremes = N) : N = { zMin: 0, zMax: 0 };\n }\n for (k = 0, m = H.length; k < m; k++)\n x = H[k], q.push(this.getRadius(N.zMin, N.zMax, V, R, x, C && C[k]));\n this.radii = q;\n }\n getRadius(H, C, q, m, k, x) {\n let N = this.options, V = N.sizeBy !== "width", R = N.zThreshold, I = C - H, j = 0.5;\n if (x === null || k === null)\n return null;\n if (L(k)) {\n if (N.sizeByAbsoluteValue && (k = Math.abs(k - R), C = I = Math.max(C - R, Math.abs(H - R)), H = 0), k < H)\n return q / 2 - 1;\n I > 0 && (j = (k - H) / I);\n }\n return V && j >= 0 && (j = Math.sqrt(j)), Math.ceil(q + j * (m - q)) / 2;\n }\n hasData() {\n return !!this.processedXData.length;\n }\n markerAttribs(H, C) {\n let q = super.markerAttribs(H, C), { height: m = 0, width: k = 0 } = q;\n return this.chart.inverted ? v(q, { x: (H.plotX || 0) - k / 2, y: (H.plotY || 0) - m / 2 }) : q;\n }\n pointAttribs(H, C) {\n let q = this.options.marker.fillOpacity, m = u.prototype.pointAttribs.call(this, H, C);\n return q !== 1 && (m.fill = d(m.fill).setOpacity(q).get("rgba")), m;\n }\n translate() {\n super.translate.call(this), this.getRadii(), this.translateBubble();\n }\n translateBubble() {\n let { data: H, options: C, radii: q } = this, { minPxSize: m } = this.getPxExtremes(), k = H.length;\n for (; k--; ) {\n let x = H[k], N = q ? q[k] : 0;\n this.zoneAxis === "z" && (x.negative = (x.z || 0) < (C.zThreshold || 0)), L(N) && N >= m / 2 ? (x.marker = v(x.marker, { radius: N, width: 2 * N, height: 2 * N }), x.dlBox = { x: x.plotX - N, y: x.plotY - N, width: 2 * N, height: 2 * N }) : (x.shapeArgs = x.plotY = x.dlBox = void 0, x.isInside = !1);\n }\n }\n getPxExtremes() {\n let H = Math.min(this.chart.plotWidth, this.chart.plotHeight), C = (k) => {\n let x;\n return typeof k == "string" && (x = /%$/.test(k), k = parseInt(k, 10)), x ? H * k / 100 : k;\n }, q = C(B(this.options.minSize, 8)), m = Math.max(C(B(this.options.maxSize, "20%")), q);\n return { minPxSize: q, maxPxSize: m };\n }\n getZExtremes() {\n let H = this.options, C = (this.zData || []).filter(L);\n if (C.length) {\n let q = B(H.zMin, g(h(C), H.displayNegative === !1 ? H.zThreshold || 0 : -Number.MAX_VALUE, Number.MAX_VALUE)), m = B(H.zMax, O(C));\n if (L(q) && L(m))\n return { zMin: q, zMax: m };\n }\n }\n }\n return T.defaultOptions = y(z.defaultOptions, { dataLabels: { formatter: function() {\n let { numberFormatter: w } = this.series.chart, { z: H } = this.point;\n return L(H) ? w(H, -1) : "";\n }, inside: !0, verticalAlign: "middle" }, animationLimit: 250, marker: { lineColor: null, lineWidth: 1, fillOpacity: 0.5, radius: null, states: { hover: { radiusPlus: 0 } }, symbol: "circle" }, minSize: 8, maxSize: "20%", softThreshold: !1, states: { hover: { halo: { size: 5 } } }, tooltip: { pointFormat: "({point.x}, {point.y}), Size: {point.z}" }, turboThreshold: 0, zThreshold: 0, zoneAxis: "z" }), v(T.prototype, { alignDataLabel: A.alignDataLabel, applyZones: M, bubblePadding: !0, isBubble: !0, pointArrayMap: ["y", "z"], pointClass: i, parallelArrays: ["x", "y", "z"], trackerGroups: ["group", "dataLabelsGroup"], specialGroup: "group", zoneAxis: "z" }), f(T, "updatedData", (w) => {\n delete w.target.chart.bubbleZExtremes;\n }), f(T, "remove", (w) => {\n delete w.target.chart.bubbleZExtremes;\n }), l.registerSeriesType("bubble", T), T;\n }), n(o, "Series/ColumnRange/ColumnRangePoint.js", [o["Core/Series/SeriesRegistry.js"], o["Core/Utilities.js"]], function(r, i) {\n let { seriesTypes: { column: { prototype: { pointClass: { prototype: a } } }, arearange: { prototype: { pointClass: s } } } } = r, { extend: l, isNumber: p } = i;\n class d extends s {\n isValid() {\n return p(this.low);\n }\n }\n return l(d.prototype, { setState: a.setState }), d;\n }), n(o, "Series/ColumnRange/ColumnRangeSeries.js", [o["Series/ColumnRange/ColumnRangePoint.js"], o["Core/Globals.js"], o["Core/Series/SeriesRegistry.js"], o["Core/Utilities.js"]], function(r, i, a, s) {\n let { noop: l } = i, { seriesTypes: { arearange: p, column: d, column: { prototype: b } } } = a, { addEvent: M, clamp: u, extend: A, isNumber: z, merge: f, pick: O } = s;\n class h extends p {\n setOptions() {\n return f(!0, arguments[0], { stacking: void 0 }), p.prototype.setOptions.apply(this, arguments);\n }\n translate() {\n return b.translate.apply(this);\n }\n pointAttribs() {\n return b.pointAttribs.apply(this, arguments);\n }\n translate3dPoints() {\n return b.translate3dPoints.apply(this, arguments);\n }\n translate3dShapes() {\n return b.translate3dShapes.apply(this, arguments);\n }\n afterColumnTranslate() {\n let v, L, y, B, X = this.yAxis, F = this.xAxis, T = F.startAngleRad, w = this.chart, H = this.xAxis.isRadial, C = Math.max(w.chartWidth, w.chartHeight) + 999;\n this.points.forEach((q) => {\n let m = q.shapeArgs || {}, k = this.options.minPointLength, x = q.plotY, N = X.translate(q.high, 0, 1, 0, 1);\n if (z(N) && z(x))\n if (q.plotHigh = u(N, -C, C), q.plotLow = u(x, -C, C), B = q.plotHigh, Math.abs(v = O(q.rectPlotY, q.plotY) - q.plotHigh) < k ? (L = k - v, v += L, B -= L / 2) : v < 0 && (v *= -1, B -= v), H && this.polar)\n y = q.barX + T, q.shapeType = "arc", q.shapeArgs = this.polar.arc(B + v, B, y, y + q.pointWidth);\n else {\n m.height = v, m.y = B;\n let { x: V = 0, width: R = 0 } = m;\n q.shapeArgs = f(q.shapeArgs, this.crispCol(V, B, R, v)), q.tooltipPos = w.inverted ? [X.len + X.pos - w.plotLeft - B - v / 2, F.len + F.pos - w.plotTop - V - R / 2, v] : [F.left - w.plotLeft + V + R / 2, X.pos - w.plotTop + B + v / 2, v];\n }\n });\n }\n }\n return h.defaultOptions = f(d.defaultOptions, p.defaultOptions, { borderRadius: { where: "all" }, pointRange: null, legendSymbol: "rectangle", marker: null, states: { hover: { halo: !1 } } }), M(h, "afterColumnTranslate", function() {\n h.prototype.afterColumnTranslate.apply(this);\n }, { order: 5 }), A(h.prototype, { directTouch: !0, pointClass: r, trackerGroups: ["group", "dataLabelsGroup"], adjustForMissingColumns: b.adjustForMissingColumns, animate: b.animate, crispCol: b.crispCol, drawGraph: l, drawPoints: b.drawPoints, getSymbol: l, drawTracker: b.drawTracker, getColumnMetrics: b.getColumnMetrics }), a.registerSeriesType("columnrange", h), h;\n }), n(o, "Series/ColumnPyramid/ColumnPyramidSeriesDefaults.js", [], function() {\n return {};\n }), n(o, "Series/ColumnPyramid/ColumnPyramidSeries.js", [o["Series/ColumnPyramid/ColumnPyramidSeriesDefaults.js"], o["Core/Series/SeriesRegistry.js"], o["Core/Utilities.js"]], function(r, i, a) {\n let { column: s } = i.seriesTypes, { clamp: l, merge: p, pick: d } = a;\n class b extends s {\n translate() {\n let u = this.chart, A = this.options, z = this.dense = this.closestPointRange * this.xAxis.transA < 2, f = this.borderWidth = d(A.borderWidth, z ? 0 : 1), O = this.yAxis, h = A.threshold, g = d(A.minPointLength, 5), v = this.getColumnMetrics(), L = v.width, y = this.pointXOffset = v.offset, B = this.translatedThreshold = O.getThreshold(h), X = this.barW = Math.max(L, 1 + 2 * f);\n for (let F of (u.inverted && (B -= 0.5), A.pointPadding && (X = Math.ceil(X)), super.translate(), this.points)) {\n let T = d(F.yBottom, B), w = 999 + Math.abs(T), H = l(F.plotY, -w, O.len + w), C = X / 2, q = Math.min(H, T), m = Math.max(H, T) - q, k = F.plotX + y, x, N, V, R, I, j, U, _, r1, K, Q;\n A.centerInCategory && (k = this.adjustForMissingColumns(k, L, F, v)), F.barX = k, F.pointWidth = L, F.tooltipPos = u.inverted ? [O.len + O.pos - u.plotLeft - H, this.xAxis.len - k - C, m] : [k + C, H + O.pos - u.plotTop, m], x = h + (F.total || F.y), A.stacking === "percent" && (x = h + (F.y < 0) ? -100 : 100);\n let E = O.toPixels(x, !0);\n V = (N = u.plotHeight - E - (u.plotHeight - B)) ? C * (q - E) / N : 0, R = N ? C * (q + m - E) / N : 0, j = k - V + C, U = k + V + C, _ = k + R + C, r1 = k - R + C, K = q - g, Q = q + m, F.y < 0 && (K = q, Q = q + m + g), u.inverted && (I = O.width - q, N = E - (O.width - B), V = C * (E - I) / N, R = C * (E - (I - m)) / N, U = (j = k + C + V) - 2 * V, _ = k - R + C, r1 = k + R + C, K = q, Q = q + m - g, F.y < 0 && (Q = q + m + g)), F.shapeType = "path", F.shapeArgs = { x: j, y: K, width: U - j, height: m, d: [["M", j, K], ["L", U, K], ["L", _, Q], ["L", r1, Q], ["Z"]] };\n }\n }\n }\n return b.defaultOptions = p(s.defaultOptions, r), i.registerSeriesType("columnpyramid", b), b;\n }), n(o, "Series/ErrorBar/ErrorBarSeriesDefaults.js", [], function() {\n return { color: "#000000", grouping: !1, linkedTo: ":previous", tooltip: { pointFormat: \' {series.name}: {point.low} - {point.high}
\' }, whiskerWidth: null };\n }), n(o, "Series/ErrorBar/ErrorBarSeries.js", [o["Series/BoxPlot/BoxPlotSeries.js"], o["Series/Column/ColumnSeries.js"], o["Series/ErrorBar/ErrorBarSeriesDefaults.js"], o["Core/Series/SeriesRegistry.js"], o["Core/Utilities.js"]], function(r, i, a, s, l) {\n let { arearange: p } = s.seriesTypes, { addEvent: d, merge: b, extend: M } = l;\n class u extends r {\n getColumnMetrics() {\n return this.linkedParent && this.linkedParent.columnMetrics || i.prototype.getColumnMetrics.call(this);\n }\n drawDataLabels() {\n let z = this.pointValKey;\n if (p)\n for (let f of (p.prototype.drawDataLabels.call(this), this.points))\n f.y = f[z];\n }\n toYData(z) {\n return [z.low, z.high];\n }\n }\n return u.defaultOptions = b(r.defaultOptions, a), d(u, "afterTranslate", function() {\n for (let A of this.points)\n A.plotLow = A.plotY;\n }, { order: 0 }), M(u.prototype, { pointArrayMap: ["low", "high"], pointValKey: "high", doQuartiles: !1 }), s.registerSeriesType("errorbar", u), u;\n }), n(o, "Series/Gauge/GaugePoint.js", [o["Core/Series/SeriesRegistry.js"]], function(r) {\n let { series: { prototype: { pointClass: i } } } = r;\n return class extends i {\n setState(a) {\n this.state = a;\n }\n };\n }), n(o, "Series/Gauge/GaugeSeries.js", [o["Series/Gauge/GaugePoint.js"], o["Core/Globals.js"], o["Core/Series/SeriesRegistry.js"], o["Core/Utilities.js"]], function(r, i, a, s) {\n let { noop: l } = i, { series: p, seriesTypes: { column: d } } = a, { clamp: b, isNumber: M, extend: u, merge: A, pick: z, pInt: f, defined: O } = s;\n class h extends p {\n translate() {\n let v = this.yAxis, L = this.options, y = v.center;\n this.generatePoints(), this.points.forEach((B) => {\n let X = A(L.dial, B.dial), F = f(X.radius) * y[2] / 200, T = f(X.baseLength) * F / 100, w = f(X.rearLength) * F / 100, H = X.baseWidth, C = X.topWidth, q = L.overshoot, m = v.startAngleRad + v.translate(B.y, void 0, void 0, void 0, !0);\n (M(q) || L.wrap === !1) && (q = M(q) ? q / 180 * Math.PI : 0, m = b(m, v.startAngleRad - q, v.endAngleRad + q)), m = 180 * m / Math.PI, B.shapeType = "path";\n let k = X.path || [["M", -w, -H / 2], ["L", T, -H / 2], ["L", F, -C / 2], ["L", F, C / 2], ["L", T, H / 2], ["L", -w, H / 2], ["Z"]];\n B.shapeArgs = { d: k, translateX: y[0], translateY: y[1], rotation: m }, B.plotX = y[0], B.plotY = y[1], O(B.y) && v.max - v.min && (B.percentage = (B.y - v.min) / (v.max - v.min) * 100);\n });\n }\n drawPoints() {\n let v = this, L = v.chart, y = v.yAxis.center, B = v.pivot, X = v.options, F = X.pivot, T = L.renderer;\n v.points.forEach((w) => {\n let H = w.graphic, C = w.shapeArgs, q = C.d, m = A(X.dial, w.dial);\n H ? (H.animate(C), C.d = q) : w.graphic = T[w.shapeType](C).addClass("highcharts-dial").add(v.group), L.styledMode || w.graphic[H ? "animate" : "attr"]({ stroke: m.borderColor, "stroke-width": m.borderWidth, fill: m.backgroundColor });\n }), B ? B.animate({ translateX: y[0], translateY: y[1] }) : F && (v.pivot = T.circle(0, 0, F.radius).attr({ zIndex: 2 }).addClass("highcharts-pivot").translate(y[0], y[1]).add(v.group), L.styledMode || v.pivot.attr({ fill: F.backgroundColor, stroke: F.borderColor, "stroke-width": F.borderWidth }));\n }\n animate(v) {\n let L = this;\n v || L.points.forEach((y) => {\n let B = y.graphic;\n B && (B.attr({ rotation: 180 * L.yAxis.startAngleRad / Math.PI }), B.animate({ rotation: y.shapeArgs.rotation }, L.options.animation));\n });\n }\n render() {\n this.group = this.plotGroup("group", "series", this.visible ? "inherit" : "hidden", this.options.zIndex, this.chart.seriesGroup), p.prototype.render.call(this), this.group.clip(this.chart.clipRect);\n }\n setData(v, L) {\n p.prototype.setData.call(this, v, !1), this.processData(), this.generatePoints(), z(L, !0) && this.chart.redraw();\n }\n hasData() {\n return !!this.points.length;\n }\n }\n return h.defaultOptions = A(p.defaultOptions, { dataLabels: { borderColor: "#cccccc", borderRadius: 3, borderWidth: 1, crop: !1, defer: !1, enabled: !0, verticalAlign: "top", y: 15, zIndex: 2 }, dial: { backgroundColor: "#000000", baseLength: "70%", baseWidth: 3, borderColor: "#cccccc", borderWidth: 0, radius: "80%", rearLength: "10%", topWidth: 1 }, pivot: { radius: 5, borderWidth: 0, borderColor: "#cccccc", backgroundColor: "#000000" }, tooltip: { headerFormat: "" }, showInLegend: !1 }), u(h.prototype, { angular: !0, directTouch: !0, drawGraph: l, drawTracker: d.prototype.drawTracker, fixedBox: !0, forceDL: !0, noSharedTooltip: !0, pointClass: r, trackerGroups: ["group", "dataLabelsGroup"] }), a.registerSeriesType("gauge", h), h;\n }), n(o, "Series/DragNodesComposition.js", [o["Core/Globals.js"], o["Core/Utilities.js"]], function(r, i) {\n let { composed: a } = r, { addEvent: s, pushUnique: l } = i;\n function p() {\n let d, b, M, u = this;\n u.container && (d = s(u.container, "mousedown", (A) => {\n let z = u.hoverPoint;\n z && z.series && z.series.hasDraggableNodes && z.series.options.draggable && (z.series.onMouseDown(z, A), b = s(u.container, "mousemove", (f) => z && z.series && z.series.onMouseMove(z, f)), M = s(u.container.ownerDocument, "mouseup", (f) => (b(), M(), z && z.series && z.series.onMouseUp(z, f))));\n })), s(u, "destroy", function() {\n d();\n });\n }\n return { compose: function(d) {\n l(a, "DragNodes") && s(d, "load", p);\n }, onMouseDown: function(d, b) {\n var u;\n let M = ((u = this.chart.pointer) == null ? void 0 : u.normalize(b)) || b;\n d.fixedPosition = { chartX: M.chartX, chartY: M.chartY, plotX: d.plotX, plotY: d.plotY }, d.inDragMode = !0;\n }, onMouseMove: function(d, b) {\n var M;\n if (d.fixedPosition && d.inDragMode) {\n let u, A, z = this.chart, f = ((M = z.pointer) == null ? void 0 : M.normalize(b)) || b, O = d.fixedPosition.chartX - f.chartX, h = d.fixedPosition.chartY - f.chartY, g = z.graphLayoutsLookup;\n (Math.abs(O) > 5 || Math.abs(h) > 5) && (u = d.fixedPosition.plotX - O, A = d.fixedPosition.plotY - h, z.isInsidePlot(u, A) && (d.plotX = u, d.plotY = A, d.hasDragged = !0, this.redrawHalo(d), g.forEach((v) => {\n v.restartSimulation();\n })));\n }\n }, onMouseUp: function(d) {\n d.fixedPosition && (d.hasDragged && (this.layout.enableSimulation ? this.layout.start() : this.chart.redraw()), d.inDragMode = d.hasDragged = !1, this.options.fixedDraggable || delete d.fixedPosition);\n }, redrawHalo: function(d) {\n d && this.halo && this.halo.attr({ d: d.haloPath(this.options.states.hover.halo.size) });\n } };\n }), n(o, "Series/GraphLayoutComposition.js", [o["Core/Animation/AnimationUtilities.js"], o["Core/Globals.js"], o["Core/Utilities.js"]], function(r, i, a) {\n let { setAnimation: s } = r, { composed: l } = i, { addEvent: p, pushUnique: d } = a;\n function b() {\n this.graphLayoutsLookup && (this.graphLayoutsLookup.forEach((z) => {\n z.updateSimulation();\n }), this.redraw());\n }\n function M() {\n this.graphLayoutsLookup && (this.graphLayoutsLookup.forEach((z) => {\n z.updateSimulation(!1);\n }), this.redraw());\n }\n function u() {\n this.graphLayoutsLookup && this.graphLayoutsLookup.forEach((z) => {\n z.stop();\n });\n }\n function A() {\n let z, f = !1, O = (h) => {\n h.maxIterations-- && isFinite(h.temperature) && !h.isStable() && !h.enableSimulation && (h.beforeStep && h.beforeStep(), h.step(), z = !1, f = !0);\n };\n if (this.graphLayoutsLookup) {\n for (s(!1, this), this.graphLayoutsLookup.forEach((h) => h.start()); !z; )\n z = !0, this.graphLayoutsLookup.forEach(O);\n f && this.series.forEach((h) => {\n h && h.layout && h.render();\n });\n }\n }\n return { compose: function(z) {\n d(l, "GraphLayout") && (p(z, "afterPrint", b), p(z, "beforePrint", M), p(z, "predraw", u), p(z, "render", A));\n }, integrations: {}, layouts: {} };\n }), n(o, "Series/PackedBubble/PackedBubblePoint.js", [o["Core/Chart/Chart.js"], o["Core/Series/Point.js"], o["Core/Series/SeriesRegistry.js"]], function(r, i, a) {\n let { seriesTypes: { bubble: { prototype: { pointClass: s } } } } = a;\n return class extends s {\n destroy() {\n var l;\n return (l = this.series) != null && l.layout && this.series.layout.removeElementFromCollection(this, this.series.layout.nodes), i.prototype.destroy.apply(this, arguments);\n }\n firePointEvent() {\n let l = this.series.options;\n if (this.isParentNode && l.parentNode) {\n let p = l.allowPointSelect;\n l.allowPointSelect = l.parentNode.allowPointSelect, i.prototype.firePointEvent.apply(this, arguments), l.allowPointSelect = p;\n } else\n i.prototype.firePointEvent.apply(this, arguments);\n }\n select() {\n let l = this.series.chart;\n this.isParentNode ? (l.getSelectedPoints = l.getSelectedParentNodes, i.prototype.select.apply(this, arguments), l.getSelectedPoints = r.prototype.getSelectedPoints) : i.prototype.select.apply(this, arguments);\n }\n };\n }), n(o, "Series/PackedBubble/PackedBubbleSeriesDefaults.js", [o["Core/Utilities.js"]], function(r) {\n let { isNumber: i } = r;\n return { minSize: "10%", maxSize: "50%", sizeBy: "area", zoneAxis: "y", crisp: !1, tooltip: { pointFormat: "Value: {point.value}" }, draggable: !0, useSimulation: !0, parentNode: { allowPointSelect: !1 }, dataLabels: { formatter: function() {\n let { numberFormatter: a } = this.series.chart, { value: s } = this.point;\n return i(s) ? a(s, -1) : "";\n }, parentNodeFormatter: function() {\n return this.name;\n }, parentNodeTextPath: { enabled: !0 }, padding: 0, style: { transition: "opacity 2000ms" } }, layoutAlgorithm: { initialPositions: "circle", initialPositionRadius: 20, bubblePadding: 5, parentNodeLimit: !1, seriesInteraction: !0, dragBetweenSeries: !1, parentNodeOptions: { maxIterations: 400, gravitationalConstant: 0.03, maxSpeed: 50, initialPositionRadius: 100, seriesInteraction: !0, marker: { fillColor: null, fillOpacity: 1, lineWidth: null, lineColor: null, symbol: "circle" } }, enableSimulation: !0, type: "packedbubble", integration: "packedbubble", maxIterations: 1e3, splitSeries: !1, maxSpeed: 5, gravitationalConstant: 0.01, friction: -0.981 } };\n }), n(o, "Series/Networkgraph/VerletIntegration.js", [], function() {\n return { attractive: function(r, i, a) {\n let s = r.getMass(), l = -a.x * i * this.diffTemperature, p = -a.y * i * this.diffTemperature;\n r.fromNode.fixedPosition || (r.fromNode.plotX -= l * s.fromNode / r.fromNode.degree, r.fromNode.plotY -= p * s.fromNode / r.fromNode.degree), r.toNode.fixedPosition || (r.toNode.plotX += l * s.toNode / r.toNode.degree, r.toNode.plotY += p * s.toNode / r.toNode.degree);\n }, attractiveForceFunction: function(r, i) {\n return (i - r) / r;\n }, barycenter: function() {\n let r = this.options.gravitationalConstant || 0, i = (this.barycenter.xFactor - (this.box.left + this.box.width) / 2) * r, a = (this.barycenter.yFactor - (this.box.top + this.box.height) / 2) * r;\n this.nodes.forEach(function(s) {\n s.fixedPosition || (s.plotX -= i / s.mass / s.degree, s.plotY -= a / s.mass / s.degree);\n });\n }, getK: function(r) {\n return Math.pow(r.box.width * r.box.height / r.nodes.length, 0.5);\n }, integrate: function(r, i) {\n let a = -r.options.friction, s = r.options.maxSpeed, l = i.prevX, p = i.prevY, d = (i.plotX + i.dispX - l) * a, b = (i.plotY + i.dispY - p) * a, M = Math.abs, u = M(d) / (d || 1), A = M(b) / (b || 1), z = u * Math.min(s, Math.abs(d)), f = A * Math.min(s, Math.abs(b));\n i.prevX = i.plotX + i.dispX, i.prevY = i.plotY + i.dispY, i.plotX += z, i.plotY += f, i.temperature = r.vectorLength({ x: z, y: f });\n }, repulsive: function(r, i, a) {\n let s = i * this.diffTemperature / r.mass / r.degree;\n r.fixedPosition || (r.plotX += a.x * s, r.plotY += a.y * s);\n }, repulsiveForceFunction: function(r, i) {\n return (i - r) / r * (i > r ? 1 : 0);\n } };\n }), n(o, "Series/PackedBubble/PackedBubbleIntegration.js", [o["Core/Globals.js"], o["Series/Networkgraph/VerletIntegration.js"]], function(r, i) {\n let { noop: a } = r;\n return { barycenter: function() {\n let s, l, p = this.options.gravitationalConstant, d = this.box, b = this.nodes;\n for (let M of b)\n this.options.splitSeries && !M.isParentNode ? (s = M.series.parentNode.plotX, l = M.series.parentNode.plotY) : (s = d.width / 2, l = d.height / 2), M.fixedPosition || (M.plotX -= (M.plotX - s) * p / (M.mass * Math.sqrt(b.length)), M.plotY -= (M.plotY - l) * p / (M.mass * Math.sqrt(b.length)));\n }, getK: a, integrate: i.integrate, repulsive: function(s, l, p, d) {\n let b = l * this.diffTemperature / s.mass / s.degree, M = p.x * b, u = p.y * b;\n s.fixedPosition || (s.plotX += M, s.plotY += u), d.fixedPosition || (d.plotX -= M, d.plotY -= u);\n }, repulsiveForceFunction: function(s, l, p, d) {\n return Math.min(s, (p.marker.radius + d.marker.radius) / 2);\n } };\n }), n(o, "Series/Networkgraph/EulerIntegration.js", [], function() {\n return { attractive: function(r, i, a, s) {\n let l = r.getMass(), p = a.x / s * i, d = a.y / s * i;\n r.fromNode.fixedPosition || (r.fromNode.dispX -= p * l.fromNode / r.fromNode.degree, r.fromNode.dispY -= d * l.fromNode / r.fromNode.degree), r.toNode.fixedPosition || (r.toNode.dispX += p * l.toNode / r.toNode.degree, r.toNode.dispY += d * l.toNode / r.toNode.degree);\n }, attractiveForceFunction: function(r, i) {\n return r * r / i;\n }, barycenter: function() {\n let r = this.options.gravitationalConstant, i = this.barycenter.xFactor, a = this.barycenter.yFactor;\n this.nodes.forEach(function(s) {\n if (!s.fixedPosition) {\n let l = s.getDegree(), p = l * (1 + l / 2);\n s.dispX += (i - s.plotX) * r * p / s.degree, s.dispY += (a - s.plotY) * r * p / s.degree;\n }\n });\n }, getK: function(r) {\n return Math.pow(r.box.width * r.box.height / r.nodes.length, 0.3);\n }, integrate: function(r, i) {\n i.dispX += i.dispX * r.options.friction, i.dispY += i.dispY * r.options.friction;\n let a = i.temperature = r.vectorLength({ x: i.dispX, y: i.dispY });\n a !== 0 && (i.plotX += i.dispX / a * Math.min(Math.abs(i.dispX), r.temperature), i.plotY += i.dispY / a * Math.min(Math.abs(i.dispY), r.temperature));\n }, repulsive: function(r, i, a, s) {\n r.dispX += a.x / s * i / r.degree, r.dispY += a.y / s * i / r.degree;\n }, repulsiveForceFunction: function(r, i) {\n return i * i / r;\n } };\n }), n(o, "Series/Networkgraph/QuadTreeNode.js", [], function() {\n class r {\n constructor(a) {\n this.body = !1, this.isEmpty = !1, this.isInternal = !1, this.nodes = [], this.box = a, this.boxSize = Math.min(a.width, a.height);\n }\n divideBox() {\n let a = this.box.width / 2, s = this.box.height / 2;\n this.nodes[0] = new r({ left: this.box.left, top: this.box.top, width: a, height: s }), this.nodes[1] = new r({ left: this.box.left + a, top: this.box.top, width: a, height: s }), this.nodes[2] = new r({ left: this.box.left + a, top: this.box.top + s, width: a, height: s }), this.nodes[3] = new r({ left: this.box.left, top: this.box.top + s, width: a, height: s });\n }\n getBoxPosition(a) {\n let s = a.plotX < this.box.left + this.box.width / 2, l = a.plotY < this.box.top + this.box.height / 2;\n return s ? l ? 0 : 3 : l ? 1 : 2;\n }\n insert(a, s) {\n let l;\n this.isInternal ? this.nodes[this.getBoxPosition(a)].insert(a, s - 1) : (this.isEmpty = !1, this.body ? s ? (this.isInternal = !0, this.divideBox(), this.body !== !0 && (this.nodes[this.getBoxPosition(this.body)].insert(this.body, s - 1), this.body = !0), this.nodes[this.getBoxPosition(a)].insert(a, s - 1)) : ((l = new r({ top: a.plotX || NaN, left: a.plotY || NaN, width: 0.1, height: 0.1 })).body = a, l.isInternal = !1, this.nodes.push(l)) : (this.isInternal = !1, this.body = a));\n }\n updateMassAndCenter() {\n let a = 0, s = 0, l = 0;\n if (this.isInternal) {\n for (let p of this.nodes)\n p.isEmpty || (a += p.mass, s += p.plotX * p.mass, l += p.plotY * p.mass);\n s /= a, l /= a;\n } else\n this.body && (a = this.body.mass, s = this.body.plotX, l = this.body.plotY);\n this.mass = a, this.plotX = s, this.plotY = l;\n }\n }\n return r;\n }), n(o, "Series/Networkgraph/QuadTree.js", [o["Series/Networkgraph/QuadTreeNode.js"]], function(r) {\n return class {\n constructor(i, a, s, l) {\n this.box = { left: i, top: a, width: s, height: l }, this.maxDepth = 25, this.root = new r(this.box), this.root.isInternal = !0, this.root.isRoot = !0, this.root.divideBox();\n }\n calculateMassAndCenter() {\n this.visitNodeRecursive(null, null, function(i) {\n i.updateMassAndCenter();\n });\n }\n insertNodes(i) {\n for (let a of i)\n this.root.insert(a, this.maxDepth);\n }\n visitNodeRecursive(i, a, s) {\n let l;\n if (i || (i = this.root), i === this.root && a && (l = a(i)), l !== !1) {\n for (let p of i.nodes) {\n if (p.isInternal) {\n if (a && (l = a(p)), l === !1)\n continue;\n this.visitNodeRecursive(p, a, s);\n } else\n p.body && a && a(p.body);\n s && s(p);\n }\n i === this.root && s && s(i);\n }\n }\n };\n }), n(o, "Series/Networkgraph/ReingoldFruchtermanLayout.js", [o["Series/Networkgraph/EulerIntegration.js"], o["Core/Globals.js"], o["Series/GraphLayoutComposition.js"], o["Series/Networkgraph/QuadTree.js"], o["Core/Utilities.js"], o["Series/Networkgraph/VerletIntegration.js"]], function(r, i, a, s, l, p) {\n let { win: d } = i, { clamp: b, defined: M, isFunction: u, fireEvent: A, pick: z } = l;\n class f {\n constructor() {\n this.box = {}, this.currentStep = 0, this.initialRendering = !0, this.links = [], this.nodes = [], this.series = [], this.simulation = !1;\n }\n static compose(h) {\n a.compose(h), a.integrations.euler = r, a.integrations.verlet = p, a.layouts["reingold-fruchterman"] = f;\n }\n init(h) {\n this.options = h, this.nodes = [], this.links = [], this.series = [], this.box = { x: 0, y: 0, width: 0, height: 0 }, this.setInitialRendering(!0), this.integration = a.integrations[h.integration], this.enableSimulation = h.enableSimulation, this.attractiveForce = z(h.attractiveForce, this.integration.attractiveForceFunction), this.repulsiveForce = z(h.repulsiveForce, this.integration.repulsiveForceFunction), this.approximation = h.approximation;\n }\n updateSimulation(h) {\n this.enableSimulation = z(h, this.options.enableSimulation);\n }\n start() {\n let h = this.series, g = this.options;\n this.currentStep = 0, this.forces = h[0] && h[0].forces || [], this.chart = h[0] && h[0].chart, this.initialRendering && (this.initPositions(), h.forEach(function(v) {\n v.finishedAnimating = !0, v.render();\n })), this.setK(), this.resetSimulation(g), this.enableSimulation && this.step();\n }\n step() {\n let h = this.series;\n for (let g of (this.currentStep++, this.approximation === "barnes-hut" && (this.createQuadTree(), this.quadTree.calculateMassAndCenter()), this.forces || []))\n this[g + "Forces"](this.temperature);\n if (this.applyLimits(), this.temperature = this.coolDown(this.startTemperature, this.diffTemperature, this.currentStep), this.prevSystemTemperature = this.systemTemperature, this.systemTemperature = this.getSystemTemperature(), this.enableSimulation) {\n for (let g of h)\n g.chart && g.render();\n this.maxIterations-- && isFinite(this.temperature) && !this.isStable() ? (this.simulation && d.cancelAnimationFrame(this.simulation), this.simulation = d.requestAnimationFrame(() => this.step())) : (this.simulation = !1, this.series.forEach((g) => {\n A(g, "afterSimulation");\n }));\n }\n }\n stop() {\n this.simulation && d.cancelAnimationFrame(this.simulation);\n }\n setArea(h, g, v, L) {\n this.box = { left: h, top: g, width: v, height: L };\n }\n setK() {\n this.k = this.options.linkLength || this.integration.getK(this);\n }\n addElementsToCollection(h, g) {\n for (let v of h)\n g.indexOf(v) === -1 && g.push(v);\n }\n removeElementFromCollection(h, g) {\n let v = g.indexOf(h);\n v !== -1 && g.splice(v, 1);\n }\n clear() {\n this.nodes.length = 0, this.links.length = 0, this.series.length = 0, this.resetSimulation();\n }\n resetSimulation() {\n this.forcedStop = !1, this.systemTemperature = 0, this.setMaxIterations(), this.setTemperature(), this.setDiffTemperature();\n }\n restartSimulation() {\n this.simulation ? this.resetSimulation() : (this.setInitialRendering(!1), this.enableSimulation ? this.start() : this.setMaxIterations(1), this.chart && this.chart.redraw(), this.setInitialRendering(!0));\n }\n setMaxIterations(h) {\n this.maxIterations = z(h, this.options.maxIterations);\n }\n setTemperature() {\n this.temperature = this.startTemperature = Math.sqrt(this.nodes.length);\n }\n setDiffTemperature() {\n this.diffTemperature = this.startTemperature / (this.options.maxIterations + 1);\n }\n setInitialRendering(h) {\n this.initialRendering = h;\n }\n createQuadTree() {\n this.quadTree = new s(this.box.left, this.box.top, this.box.width, this.box.height), this.quadTree.insertNodes(this.nodes);\n }\n initPositions() {\n let h = this.options.initialPositions;\n if (u(h))\n for (let g of (h.call(this), this.nodes))\n M(g.prevX) || (g.prevX = g.plotX), M(g.prevY) || (g.prevY = g.plotY), g.dispX = 0, g.dispY = 0;\n else\n h === "circle" ? this.setCircularPositions() : this.setRandomPositions();\n }\n setCircularPositions() {\n let h, g = this.box, v = this.nodes, L = 2 * Math.PI / (v.length + 1), y = v.filter(function(w) {\n return w.linksTo.length === 0;\n }), B = {}, X = this.options.initialPositionRadius, F = (w) => {\n for (let H of w.linksFrom || [])\n B[H.toNode.id] || (B[H.toNode.id] = !0, T.push(H.toNode), F(H.toNode));\n }, T = [];\n for (let w of y)\n T.push(w), F(w);\n if (T.length)\n for (let w of v)\n T.indexOf(w) === -1 && T.push(w);\n else\n T = v;\n for (let w = 0, H = T.length; w < H; ++w)\n (h = T[w]).plotX = h.prevX = z(h.plotX, g.width / 2 + X * Math.cos(w * L)), h.plotY = h.prevY = z(h.plotY, g.height / 2 + X * Math.sin(w * L)), h.dispX = 0, h.dispY = 0;\n }\n setRandomPositions() {\n let h, g = this.box, v = this.nodes, L = v.length + 1, y = (B) => {\n let X = B * B / Math.PI;\n return X - Math.floor(X);\n };\n for (let B = 0, X = v.length; B < X; ++B)\n (h = v[B]).plotX = h.prevX = z(h.plotX, g.width * y(B)), h.plotY = h.prevY = z(h.plotY, g.height * y(L + B)), h.dispX = 0, h.dispY = 0;\n }\n force(h, ...g) {\n this.integration[h].apply(this, g);\n }\n barycenterForces() {\n this.getBarycenter(), this.force("barycenter");\n }\n getBarycenter() {\n let h = 0, g = 0, v = 0;\n for (let L of this.nodes)\n g += L.plotX * L.mass, v += L.plotY * L.mass, h += L.mass;\n return this.barycenter = { x: g, y: v, xFactor: g / h, yFactor: v / h }, this.barycenter;\n }\n barnesHutApproximation(h, g) {\n let v, L, y = this.getDistXY(h, g), B = this.vectorLength(y);\n return h !== g && B !== 0 && (g.isInternal ? g.boxSize / B < this.options.theta && B !== 0 ? (L = this.repulsiveForce(B, this.k), this.force("repulsive", h, L * g.mass, y, B), v = !1) : v = !0 : (L = this.repulsiveForce(B, this.k), this.force("repulsive", h, L * g.mass, y, B))), v;\n }\n repulsiveForces() {\n if (this.approximation === "barnes-hut")\n for (let h of this.nodes)\n this.quadTree.visitNodeRecursive(null, (g) => this.barnesHutApproximation(h, g));\n else {\n let h, g, v;\n for (let L of this.nodes)\n for (let y of this.nodes)\n L === y || L.fixedPosition || (v = this.getDistXY(L, y), (g = this.vectorLength(v)) !== 0 && (h = this.repulsiveForce(g, this.k), this.force("repulsive", L, h * y.mass, v, g)));\n }\n }\n attractiveForces() {\n let h, g, v;\n for (let L of this.links)\n L.fromNode && L.toNode && (h = this.getDistXY(L.fromNode, L.toNode), (g = this.vectorLength(h)) !== 0 && (v = this.attractiveForce(g, this.k), this.force("attractive", L, v, h, g)));\n }\n applyLimits() {\n for (let h of this.nodes)\n h.fixedPosition || (this.integration.integrate(this, h), this.applyLimitBox(h, this.box), h.dispX = 0, h.dispY = 0);\n }\n applyLimitBox(h, g) {\n let v = h.radius;\n h.plotX = b(h.plotX, g.left + v, g.width - v), h.plotY = b(h.plotY, g.top + v, g.height - v);\n }\n coolDown(h, g, v) {\n return h - g * v;\n }\n isStable() {\n return 1e-5 > Math.abs(this.systemTemperature - this.prevSystemTemperature) || this.temperature <= 0;\n }\n getSystemTemperature() {\n let h = 0;\n for (let g of this.nodes)\n h += g.temperature;\n return h;\n }\n vectorLength(h) {\n return Math.sqrt(h.x * h.x + h.y * h.y);\n }\n getDistR(h, g) {\n let v = this.getDistXY(h, g);\n return this.vectorLength(v);\n }\n getDistXY(h, g) {\n let v = h.plotX - g.plotX, L = h.plotY - g.plotY;\n return { x: v, y: L, absX: Math.abs(v), absY: Math.abs(L) };\n }\n }\n return f;\n }), n(o, "Series/PackedBubble/PackedBubbleLayout.js", [o["Series/GraphLayoutComposition.js"], o["Series/PackedBubble/PackedBubbleIntegration.js"], o["Series/Networkgraph/ReingoldFruchtermanLayout.js"], o["Core/Utilities.js"]], function(r, i, a, s) {\n let { addEvent: l, pick: p } = s;\n function d() {\n let u = this.series, A = [];\n return u.forEach((z) => {\n z.parentNode && z.parentNode.selected && A.push(z.parentNode);\n }), A;\n }\n function b() {\n this.allDataPoints && delete this.allDataPoints;\n }\n class M extends a {\n constructor() {\n super(...arguments), this.index = NaN, this.nodes = [], this.series = [];\n }\n static compose(A) {\n a.compose(A), r.integrations.packedbubble = i, r.layouts.packedbubble = M;\n let z = A.prototype;\n z.getSelectedParentNodes || (l(A, "beforeRedraw", b), z.getSelectedParentNodes = d);\n }\n beforeStep() {\n this.options.marker && this.series.forEach((A) => {\n A && A.calculateParentRadius();\n });\n }\n isStable() {\n let A = Math.abs(this.prevSystemTemperature - this.systemTemperature);\n return 1 > Math.abs(10 * this.systemTemperature / Math.sqrt(this.nodes.length)) && A < 1e-5 || this.temperature <= 0;\n }\n setCircularPositions() {\n let A = this.box, z = this.nodes, f = 2 * Math.PI / (z.length + 1), O = this.options.initialPositionRadius, h, g, v = 0;\n for (let L of z)\n this.options.splitSeries && !L.isParentNode ? (h = L.series.parentNode.plotX, g = L.series.parentNode.plotY) : (h = A.width / 2, g = A.height / 2), L.plotX = L.prevX = p(L.plotX, h + O * Math.cos(L.index || v * f)), L.plotY = L.prevY = p(L.plotY, g + O * Math.sin(L.index || v * f)), L.dispX = 0, L.dispY = 0, v++;\n }\n repulsiveForces() {\n let A, z, f, O = this, h = O.options.bubblePadding, g = O.nodes;\n g.forEach((v) => {\n v.degree = v.mass, v.neighbours = 0, g.forEach((L) => {\n A = 0, v !== L && !v.fixedPosition && (O.options.seriesInteraction || v.series === L.series) && (f = O.getDistXY(v, L), (z = O.vectorLength(f) - (v.marker.radius + L.marker.radius + h)) < 0 && (v.degree += 0.01, v.neighbours++, A = O.repulsiveForce(-z / Math.sqrt(v.neighbours), O.k, v, L)), O.force("repulsive", v, A * L.mass, f, L, z));\n });\n });\n }\n applyLimitBox(A, z) {\n let f, O;\n this.options.splitSeries && !A.isParentNode && this.options.parentNodeLimit && (f = this.getDistXY(A, A.series.parentNode), (O = A.series.parentNodeRadius - A.marker.radius - this.vectorLength(f)) < 0 && O > -2 * A.marker.radius && (A.plotX -= 0.01 * f.x, A.plotY -= 0.01 * f.y)), super.applyLimitBox(A, z);\n }\n }\n return r.layouts.packedbubble = M, M;\n }), n(o, "Series/SimulationSeriesUtilities.js", [o["Core/Utilities.js"], o["Core/Animation/AnimationUtilities.js"]], function(r, i) {\n let { merge: a, syncTimeout: s } = r, { animObject: l } = i;\n return { initDataLabels: function() {\n let p = this.options.dataLabels;\n if (!this.dataLabelsGroup) {\n let d = this.initDataLabelsGroup();\n return !this.chart.styledMode && (p != null && p.style) && d.css(p.style), d.attr({ opacity: 0 }), this.visible && d.show(), d;\n }\n return this.dataLabelsGroup.attr(a({ opacity: 1 }, this.getPlotBox("data-labels"))), this.dataLabelsGroup;\n }, initDataLabelsDefer: function() {\n var d;\n let p = this.options.dataLabels;\n p != null && p.defer && ((d = this.options.layoutAlgorithm) != null && d.enableSimulation) ? s(() => {\n this.deferDataLabels = !1;\n }, p ? l(p.animation).defer : 0) : this.deferDataLabels = !1;\n } };\n }), n(o, "Extensions/TextPath.js", [o["Core/Globals.js"], o["Core/Utilities.js"]], function(r, i) {\n let { deg2rad: a } = r, { addEvent: s, merge: l, uniqueKey: p, defined: d, extend: b } = i;\n function M(z, f) {\n f = l(!0, { enabled: !0, attributes: { dy: -5, startOffset: "50%", textAnchor: "middle" } }, f);\n let O = this.renderer.url, h = this.text || this, g = h.textPath, { attributes: v, enabled: L } = f;\n if (z = z || g && g.path, g && g.undo(), z && L) {\n let y = s(h, "afterModifyTree", (B) => {\n if (z && L) {\n let X = z.attr("id");\n X || z.attr("id", X = p());\n let F = { x: 0, y: 0 };\n d(v.dx) && (F.dx = v.dx, delete v.dx), d(v.dy) && (F.dy = v.dy, delete v.dy), h.attr(F), this.attr({ transform: "" }), this.box && (this.box = this.box.destroy());\n let T = B.nodes.slice(0);\n B.nodes.length = 0, B.nodes[0] = { tagName: "textPath", attributes: b(v, { "text-anchor": v.textAnchor, href: `${O}#${X}` }), children: T };\n }\n });\n h.textPath = { path: z, undo: y };\n } else\n h.attr({ dx: 0, dy: 0 }), delete h.textPath;\n return this.added && (h.textCache = "", this.renderer.buildText(h)), this;\n }\n function u(z) {\n var h;\n let f = z.bBox, O = (h = this.element) == null ? void 0 : h.querySelector("textPath");\n if (O) {\n let g = [], { b: v, h: L } = this.renderer.fontMetrics(this.element), y = L - v, B = RegExp(\'(|]*>|<\\\\/tspan>)\', "g"), X = O.innerHTML.replace(B, "").split(/]*>/), F = X.length, T = (w, H) => {\n let { x: C, y: q } = H, m = (O.getRotationOfChar(w) - 90) * a, k = Math.cos(m), x = Math.sin(m);\n return [[C - y * k, q - y * x], [C + v * k, q + v * x]];\n };\n for (let w = 0, H = 0; H < F; H++) {\n let C = X[H].length;\n for (let q = 0; q < C; q += 5)\n try {\n let m = w + q + H, [k, x] = T(m, O.getStartPositionOfChar(m));\n q === 0 ? (g.push(x), g.push(k)) : (H === 0 && g.unshift(x), H === F - 1 && g.push(k));\n } catch {\n break;\n }\n w += C - 1;\n try {\n let q = w + H, m = O.getEndPositionOfChar(q), [k, x] = T(q, m);\n g.unshift(x), g.unshift(k);\n } catch {\n break;\n }\n }\n g.length && g.push(g[0].slice()), f.polygon = g;\n }\n return f;\n }\n function A(z) {\n var g;\n let f = z.labelOptions, O = z.point, h = f[O.formatPrefix + "TextPath"] || f.textPath;\n h && !f.useHTML && (this.setTextPath(((g = O.getDataLabelPath) == null ? void 0 : g.call(O, this)) || O.graphic, h), O.dataLabelPath && !h.enabled && (O.dataLabelPath = O.dataLabelPath.destroy()));\n }\n return { compose: function(z) {\n s(z, "afterGetBBox", u), s(z, "beforeAddingDataLabel", A);\n let f = z.prototype;\n f.setTextPath || (f.setTextPath = M);\n } };\n }), n(o, "Series/PackedBubble/PackedBubbleSeries.js", [o["Core/Color/Color.js"], o["Series/DragNodesComposition.js"], o["Series/GraphLayoutComposition.js"], o["Core/Globals.js"], o["Series/PackedBubble/PackedBubblePoint.js"], o["Series/PackedBubble/PackedBubbleSeriesDefaults.js"], o["Series/PackedBubble/PackedBubbleLayout.js"], o["Core/Series/SeriesRegistry.js"], o["Series/SimulationSeriesUtilities.js"], o["Core/Utilities.js"], o["Core/Renderer/SVG/SVGElement.js"], o["Extensions/TextPath.js"]], function(r, i, a, s, l, p, d, b, M, u, A, z) {\n let { parse: f } = r, { noop: O } = s, { series: { prototype: h }, seriesTypes: { bubble: g } } = b, { initDataLabels: v, initDataLabelsDefer: L } = M, { addEvent: y, clamp: B, defined: X, extend: F, fireEvent: T, isArray: w, isNumber: H, merge: C, pick: q } = u;\n z.compose(A);\n class m extends g {\n constructor() {\n super(...arguments), this.parentNodeMass = 0, this.deferDataLabels = !0;\n }\n static compose(x, N, V) {\n g.compose(x, N, V), i.compose(N), d.compose(N);\n }\n accumulateAllPoints() {\n let x, N = this.chart, V = [];\n for (let R of N.series)\n if (R.is("packedbubble") && R.reserveSpace()) {\n x = R.yData || [];\n for (let I = 0; I < x.length; I++)\n V.push([null, null, x[I], R.index, I, { id: I, marker: { radius: 0 } }]);\n }\n return V;\n }\n addLayout() {\n let x = this.options.layoutAlgorithm = this.options.layoutAlgorithm || {}, N = x.type || "packedbubble", V = this.chart.options.chart, R = this.chart.graphLayoutsStorage, I = this.chart.graphLayoutsLookup, j;\n R || (this.chart.graphLayoutsStorage = R = {}, this.chart.graphLayoutsLookup = I = []), (j = R[N]) || (x.enableSimulation = X(V.forExport) ? !V.forExport : x.enableSimulation, R[N] = j = new a.layouts[N](), j.init(x), I.splice(j.index, 0, j)), this.layout = j, this.points.forEach((U) => {\n U.mass = 2, U.degree = 1, U.collisionNmb = 1;\n }), j.setArea(0, 0, this.chart.plotWidth, this.chart.plotHeight), j.addElementsToCollection([this], j.series), j.addElementsToCollection(this.points, j.nodes);\n }\n addSeriesLayout() {\n let x = this.options.layoutAlgorithm = this.options.layoutAlgorithm || {}, N = x.type || "packedbubble", V = this.chart.graphLayoutsStorage, R = this.chart.graphLayoutsLookup, I = C(x, x.parentNodeOptions, { enableSimulation: this.layout.options.enableSimulation }), j = V[N + "-series"];\n j || (V[N + "-series"] = j = new a.layouts[N](), j.init(I), R.splice(j.index, 0, j)), this.parentNodeLayout = j, this.createParentNodes();\n }\n calculateParentRadius() {\n let x = this.seriesBox();\n this.parentNodeRadius = B(Math.sqrt(2 * this.parentNodeMass / Math.PI) + 20, 20, x ? Math.max(Math.sqrt(Math.pow(x.width, 2) + Math.pow(x.height, 2)) / 2 + 20, 20) : Math.sqrt(2 * this.parentNodeMass / Math.PI) + 20), this.parentNode && (this.parentNode.marker.radius = this.parentNode.radius = this.parentNodeRadius);\n }\n calculateZExtremes() {\n let x = this.chart.series, N = this.options.zMin, V = this.options.zMax, R = 1 / 0, I = -1 / 0;\n return N && V ? [N, V] : (x.forEach((j) => {\n j.yData.forEach((U) => {\n X(U) && (U > I && (I = U), U < R && (R = U));\n });\n }), [N = q(N, R), V = q(V, I)]);\n }\n checkOverlap(x, N) {\n let V = x[0] - N[0], R = x[1] - N[1];\n return Math.sqrt(V * V + R * R) - Math.abs(x[2] + N[2]) < -1e-3;\n }\n createParentNodes() {\n let x = this.pointClass, N = this.chart, V = this.parentNodeLayout, R = this.layout.options, I, j = this.parentNode, U = { radius: this.parentNodeRadius, lineColor: this.color, fillColor: f(this.color).brighten(0.4).get() };\n R.parentNodeOptions && (U = C(R.parentNodeOptions.marker || {}, U)), this.parentNodeMass = 0, this.points.forEach((_) => {\n this.parentNodeMass += Math.PI * Math.pow(_.marker.radius, 2);\n }), this.calculateParentRadius(), V.nodes.forEach((_) => {\n _.seriesIndex === this.index && (I = !0);\n }), V.setArea(0, 0, N.plotWidth, N.plotHeight), I || (j || (j = new x(this, { mass: this.parentNodeRadius / 2, marker: U, dataLabels: { inside: !1 }, states: { normal: { marker: U }, hover: { marker: U } }, dataLabelOnNull: !0, degree: this.parentNodeRadius, isParentNode: !0, seriesIndex: this.index })), this.parentNode && (j.plotX = this.parentNode.plotX, j.plotY = this.parentNode.plotY), this.parentNode = j, V.addElementsToCollection([this], V.series), V.addElementsToCollection([j], V.nodes));\n }\n deferLayout() {\n let x = this.options.layoutAlgorithm;\n this.visible && (this.addLayout(), x.splitSeries && this.addSeriesLayout());\n }\n destroy() {\n this.chart.graphLayoutsLookup && this.chart.graphLayoutsLookup.forEach((x) => {\n x.removeElementFromCollection(this, x.series);\n }, this), this.parentNode && this.parentNodeLayout && (this.parentNodeLayout.removeElementFromCollection(this.parentNode, this.parentNodeLayout.nodes), this.parentNode.dataLabel && (this.parentNode.dataLabel = this.parentNode.dataLabel.destroy())), h.destroy.apply(this, arguments);\n }\n drawDataLabels() {\n !this.deferDataLabels && (h.drawDataLabels.call(this, this.points), this.parentNode && (this.parentNode.formatPrefix = "parentNode", h.drawDataLabels.call(this, [this.parentNode])));\n }\n drawGraph() {\n var I;\n if (!this.layout || !this.layout.options.splitSeries)\n return;\n let x = this.chart, N = this.layout.options.parentNodeOptions.marker, V = { fill: N.fillColor || f(this.color).brighten(0.4).get(), opacity: N.fillOpacity, stroke: N.lineColor || this.color, "stroke-width": q(N.lineWidth, this.options.lineWidth) }, R = {};\n this.parentNodesGroup = this.plotGroup("parentNodesGroup", "parentNode", this.visible ? "inherit" : "hidden", 0.1, x.seriesGroup), (I = this.group) == null || I.attr({ zIndex: 2 }), this.calculateParentRadius(), this.parentNode && X(this.parentNode.plotX) && X(this.parentNode.plotY) && X(this.parentNodeRadius) && (R = C({ x: this.parentNode.plotX - this.parentNodeRadius, y: this.parentNode.plotY - this.parentNodeRadius, width: 2 * this.parentNodeRadius, height: 2 * this.parentNodeRadius }, V), this.parentNode.graphic || (this.graph = this.parentNode.graphic = x.renderer.symbol(V.symbol).add(this.parentNodesGroup)), this.parentNode.graphic.attr(R));\n }\n drawTracker() {\n let x, N = this.parentNode;\n super.drawTracker(), N && (x = w(N.dataLabels) ? N.dataLabels : N.dataLabel ? [N.dataLabel] : [], N.graphic && (N.graphic.element.point = N), x.forEach((V) => {\n (V.div || V.element).point = N;\n }));\n }\n getPointRadius() {\n let x, N, V, R, I = this.chart, j = I.plotWidth, U = I.plotHeight, _ = this.options, r1 = _.useSimulation, K = Math.min(j, U), Q = {}, E = [], D = I.allDataPoints || [], G = D.length;\n ["minSize", "maxSize"].forEach((S) => {\n let W = parseInt(_[S], 10), P = /%$/.test(_[S]);\n Q[S] = P ? K * W / 100 : W * Math.sqrt(G);\n }), I.minRadius = x = Q.minSize / Math.sqrt(G), I.maxRadius = N = Q.maxSize / Math.sqrt(G);\n let J = r1 ? this.calculateZExtremes() : [x, N];\n D.forEach((S, W) => {\n V = r1 ? B(S[2], J[0], J[1]) : S[2], (R = this.getRadius(J[0], J[1], x, N, V)) === 0 && (R = null), D[W][2] = R, E.push(R);\n }), this.radii = E;\n }\n init() {\n return h.init.apply(this, arguments), L.call(this), this.eventsToUnbind.push(y(this, "updatedData", function() {\n this.chart.series.forEach((x) => {\n x.type === this.type && (x.isDirty = !0);\n }, this);\n })), this;\n }\n onMouseUp(x) {\n if (x.fixedPosition && !x.removed) {\n let N, V = this.layout, R = this.parentNodeLayout;\n R && V.options.dragBetweenSeries && R.nodes.forEach((I) => {\n x && x.marker && I !== x.series.parentNode && (N = V.getDistXY(x, I), V.vectorLength(N) - I.marker.radius - x.marker.radius < 0 && (I.series.addPoint(C(x.options, { plotX: x.plotX, plotY: x.plotY }), !1), V.removeElementFromCollection(x, V.nodes), x.remove()));\n }), i.onMouseUp.apply(this, arguments);\n }\n }\n placeBubbles(x) {\n let N = this.checkOverlap, V = this.positionBubble, R = [], I = 1, j = 0, U = 0, _, r1 = [], K, Q = x.sort((E, D) => D[2] - E[2]);\n if (Q.length) {\n if (R.push([[0, 0, Q[0][2], Q[0][3], Q[0][4]]]), Q.length > 1)\n for (R.push([[0, 0 - Q[1][2] - Q[0][2], Q[1][2], Q[1][3], Q[1][4]]]), K = 2; K < Q.length; K++)\n Q[K][2] = Q[K][2] || 1, N(_ = V(R[I][j], R[I - 1][U], Q[K]), R[I][0]) ? (R.push([]), U = 0, R[I + 1].push(V(R[I][j], R[I][0], Q[K])), I++, j = 0) : I > 1 && R[I - 1][U + 1] && N(_, R[I - 1][U + 1]) ? (U++, R[I].push(V(R[I][j], R[I - 1][U], Q[K])), j++) : (j++, R[I].push(_));\n this.chart.stages = R, this.chart.rawPositions = [].concat.apply([], R), this.resizeRadius(), r1 = this.chart.rawPositions;\n }\n return r1;\n }\n pointAttribs(x, N) {\n let V = this.options, R = x && x.isParentNode, I = V.marker;\n R && V.layoutAlgorithm && V.layoutAlgorithm.parentNodeOptions && (I = V.layoutAlgorithm.parentNodeOptions.marker);\n let j = I.fillOpacity, U = h.pointAttribs.call(this, x, N);\n return j !== 1 && (U["fill-opacity"] = j), U;\n }\n positionBubble(x, N, V) {\n let R = Math.asin, I = Math.acos, j = Math.pow, U = Math.abs, _ = (0, Math.sqrt)(j(x[0] - N[0], 2) + j(x[1] - N[1], 2)), r1 = I((j(_, 2) + j(V[2] + N[2], 2) - j(V[2] + x[2], 2)) / (2 * (V[2] + N[2]) * _)), K = R(U(x[0] - N[0]) / _), Q = (x[1] - N[1] < 0 ? 0 : Math.PI) + r1 + K * ((x[0] - N[0]) * (x[1] - N[1]) < 0 ? 1 : -1), E = Math.cos(Q), D = Math.sin(Q);\n return [N[0] + (N[2] + V[2]) * D, N[1] - (N[2] + V[2]) * E, V[2], V[3], V[4]];\n }\n render() {\n let x = [];\n h.render.apply(this, arguments), !this.options.dataLabels.allowOverlap && (this.data.forEach((N) => {\n w(N.dataLabels) && N.dataLabels.forEach((V) => {\n x.push(V);\n });\n }), this.options.useSimulation && this.chart.hideOverlappingLabels(x));\n }\n resizeRadius() {\n let x, N, V, R, I, j = this.chart, U = j.rawPositions, _ = Math.min, r1 = Math.max, K = j.plotLeft, Q = j.plotTop, E = j.plotHeight, D = j.plotWidth;\n for (let W of (x = V = Number.POSITIVE_INFINITY, N = R = Number.NEGATIVE_INFINITY, U))\n I = W[2], x = _(x, W[0] - I), N = r1(N, W[0] + I), V = _(V, W[1] - I), R = r1(R, W[1] + I);\n let G = [N - x, R - V], J = [(D - K) / G[0], (E - Q) / G[1]], S = _.apply([], J);\n if (Math.abs(S - 1) > 1e-10) {\n for (let W of U)\n W[2] *= S;\n this.placeBubbles(U);\n } else\n j.diffY = E / 2 + Q - V - (R - V) / 2, j.diffX = D / 2 + K - x - (N - x) / 2;\n }\n seriesBox() {\n let x, N = this.chart, V = this.data, R = Math.max, I = Math.min, j = [N.plotLeft, N.plotLeft + N.plotWidth, N.plotTop, N.plotTop + N.plotHeight];\n return V.forEach((U) => {\n X(U.plotX) && X(U.plotY) && U.marker.radius && (x = U.marker.radius, j[0] = I(j[0], U.plotX - x), j[1] = R(j[1], U.plotX + x), j[2] = I(j[2], U.plotY - x), j[3] = R(j[3], U.plotY + x));\n }), H(j.width / j.height) ? j : null;\n }\n setVisible() {\n let x = this;\n h.setVisible.apply(x, arguments), x.parentNodeLayout && x.graph ? x.visible ? (x.graph.show(), x.parentNode.dataLabel && x.parentNode.dataLabel.show()) : (x.graph.hide(), x.parentNodeLayout.removeElementFromCollection(x.parentNode, x.parentNodeLayout.nodes), x.parentNode.dataLabel && x.parentNode.dataLabel.hide()) : x.layout && (x.visible ? x.layout.addElementsToCollection(x.points, x.layout.nodes) : x.points.forEach((N) => {\n x.layout.removeElementFromCollection(N, x.layout.nodes);\n }));\n }\n translate() {\n let x, N, V, R = this.chart, I = this.data, j = this.index, U = this.options.useSimulation;\n for (let _ of (this.processedXData = this.xData, this.generatePoints(), X(R.allDataPoints) || (R.allDataPoints = this.accumulateAllPoints(), this.getPointRadius()), U ? V = R.allDataPoints : (V = this.placeBubbles(R.allDataPoints), this.options.draggable = !1), V))\n _[3] === j && (x = I[_[4]], N = q(_[2], void 0), U || (x.plotX = _[0] - R.plotLeft + R.diffX, x.plotY = _[1] - R.plotTop + R.diffY), H(N) && (x.marker = F(x.marker, { radius: N, width: 2 * N, height: 2 * N }), x.radius = N));\n U && this.deferLayout(), T(this, "afterTranslate");\n }\n }\n return m.defaultOptions = C(g.defaultOptions, p), F(m.prototype, { pointClass: l, axisTypes: [], directTouch: !0, forces: ["barycenter", "repulsive"], hasDraggableNodes: !0, invertible: !1, isCartesian: !1, noSharedTooltip: !0, pointArrayMap: ["value"], pointValKey: "value", requireSorting: !1, trackerGroups: ["group", "dataLabelsGroup", "parentNodesGroup"], initDataLabels: v, alignDataLabel: h.alignDataLabel, indexateNodes: O, onMouseDown: i.onMouseDown, onMouseMove: i.onMouseMove, redrawHalo: i.redrawHalo, searchPoint: O }), b.registerSeriesType("packedbubble", m), m;\n }), n(o, "Series/Polygon/PolygonSeriesDefaults.js", [], function() {\n return { marker: { enabled: !1, states: { hover: { enabled: !1 } } }, stickyTracking: !1, tooltip: { followPointer: !0, pointFormat: "" }, trackByArea: !0, legendSymbol: "rectangle" };\n }), n(o, "Series/Polygon/PolygonSeries.js", [o["Core/Globals.js"], o["Series/Polygon/PolygonSeriesDefaults.js"], o["Core/Series/SeriesRegistry.js"], o["Core/Utilities.js"]], function(r, i, a, s) {\n let { noop: l } = r, { area: p, line: d, scatter: b } = a.seriesTypes, { extend: M, merge: u } = s;\n class A extends b {\n getGraphPath() {\n let f = d.prototype.getGraphPath.call(this), O = f.length + 1;\n for (; O--; )\n (O === f.length || f[O][0] === "M") && O > 0 && f.splice(O, 0, ["Z"]);\n return this.areaPath = f, f;\n }\n drawGraph() {\n this.options.fillColor = this.color, p.prototype.drawGraph.call(this);\n }\n }\n return A.defaultOptions = u(b.defaultOptions, i), M(A.prototype, { type: "polygon", drawTracker: d.prototype.drawTracker, setStackedPoints: l }), a.registerSeriesType("polygon", A), A;\n }), n(o, "Core/Axis/RadialAxisDefaults.js", [], function() {\n return { circular: { gridLineWidth: 1, labels: { align: void 0, x: 0, y: void 0, style: { textOverflow: "none" } }, maxPadding: 0, minPadding: 0, showLastLabel: !1, tickLength: 0 }, radial: { gridLineInterpolation: "circle", gridLineWidth: 1, labels: { align: "right", padding: 5, x: -3, y: -2 }, showLastLabel: !1, title: { x: 4, text: null, rotation: 90 } }, radialGauge: { endOnTick: !1, gridLineWidth: 0, labels: { align: "center", distance: -25, x: 0, y: void 0 }, lineWidth: 1, minorGridLineWidth: 0, minorTickInterval: "auto", minorTickLength: 10, minorTickPosition: "inside", minorTickWidth: 1, startOnTick: !1, tickLength: 10, tickPixelInterval: 100, tickPosition: "inside", tickWidth: 2, title: { rotation: 0, text: "" }, zIndex: 2 } };\n }), n(o, "Core/Axis/RadialAxis.js", [o["Core/Axis/RadialAxisDefaults.js"], o["Core/Defaults.js"], o["Core/Globals.js"], o["Core/Utilities.js"]], function(r, i, a, s) {\n var l;\n let { defaultOptions: p } = i, { composed: d, noop: b } = a, { addEvent: M, correctFloat: u, defined: A, extend: z, fireEvent: f, isObject: O, merge: h, pick: g, pushUnique: v, relativeLength: L, wrap: y } = s;\n return function(B) {\n function X() {\n this.autoConnect = this.isCircular && g(this.userMax, this.options.max) === void 0 && u(this.endAngleRad - this.startAngleRad) === u(2 * Math.PI), !this.isCircular && this.chart.inverted && this.max++, this.autoConnect && (this.max += this.categories && 1 || this.pointRange || this.closestPointRange || 0);\n }\n function F() {\n return () => {\n if (this.isRadial && this.tickPositions && this.options.labels && this.options.labels.allowOverlap !== !0)\n return this.tickPositions.map((W) => this.ticks[W] && this.ticks[W].label).filter((W) => !!W);\n };\n }\n function T() {\n return b;\n }\n function w(W, P, Y) {\n let Z = this.pane.center, t1 = W.value, i1, n1, s1;\n return this.isCircular ? (A(t1) ? W.point && (W.point.shapeArgs || {}).start && (t1 = this.chart.inverted ? this.translate(W.point.rectPlotY, !0) : W.point.x) : (n1 = W.chartX || 0, s1 = W.chartY || 0, t1 = this.translate(Math.atan2(s1 - Y, n1 - P) - this.startAngleRad, !0)), n1 = (i1 = this.getPosition(t1)).x, s1 = i1.y) : (A(t1) || (n1 = W.chartX, s1 = W.chartY), A(n1) && A(s1) && (Y = Z[1] + this.chart.plotTop, t1 = this.translate(Math.min(Math.sqrt(Math.pow(n1 - P, 2) + Math.pow(s1 - Y, 2)), Z[2] / 2) - Z[3] / 2, !0))), [t1, n1 || 0, s1 || 0];\n }\n function H(W, P, Y) {\n let Z = this.pane.center, t1 = this.chart, i1 = this.left || 0, n1 = this.top || 0, s1, d1 = g(P, Z[2] / 2 - this.offset), b1;\n return Y === void 0 && (Y = this.horiz ? 0 : this.center && -this.center[3] / 2), Y && (d1 += Y), this.isCircular || P !== void 0 ? ((b1 = this.chart.renderer.symbols.arc(i1 + Z[0], n1 + Z[1], d1, d1, { start: this.startAngleRad, end: this.endAngleRad, open: !0, innerR: 0 })).xBounds = [i1 + Z[0]], b1.yBounds = [n1 + Z[1] - d1]) : (s1 = this.postTranslate(this.angleRad, d1), b1 = [["M", this.center[0] + t1.plotLeft, this.center[1] + t1.plotTop], ["L", s1.x, s1.y]]), b1;\n }\n function C() {\n this.constructor.prototype.getOffset.call(this), this.chart.axisOffset[this.side] = 0;\n }\n function q(W, P, Y) {\n let Z = this.chart, t1 = (k1) => {\n if (typeof k1 == "string") {\n let N1 = parseInt(k1, 10);\n return a1.test(k1) && (N1 = N1 * s1 / 100), N1;\n }\n return k1;\n }, i1 = this.center, n1 = this.startAngleRad, s1 = i1[2] / 2, d1 = Math.min(this.offset, 0), b1 = this.left || 0, c1 = this.top || 0, a1 = /%$/, l1 = this.isCircular, p1, M1, A1, u1, h1, C1, q1 = g(t1(Y.outerRadius), s1), W1 = t1(Y.innerRadius), R1 = g(t1(Y.thickness), 10);\n if (this.options.gridLineInterpolation === "polygon")\n C1 = this.getPlotLinePath({ value: W }).concat(this.getPlotLinePath({ value: P, reverse: !0 }));\n else {\n W = Math.max(W, this.min), P = Math.min(P, this.max);\n let k1 = this.translate(W), N1 = this.translate(P);\n l1 || (q1 = k1 || 0, W1 = N1 || 0), Y.shape !== "circle" && l1 ? (p1 = n1 + (k1 || 0), M1 = n1 + (N1 || 0)) : (p1 = -Math.PI / 2, M1 = 1.5 * Math.PI, h1 = !0), q1 -= d1, R1 -= d1, C1 = Z.renderer.symbols.arc(b1 + i1[0], c1 + i1[1], q1, q1, { start: Math.min(p1, M1), end: Math.max(p1, M1), innerR: g(W1, q1 - R1), open: h1, borderRadius: Y.borderRadius }), l1 && (A1 = (M1 + p1) / 2, u1 = b1 + i1[0] + i1[2] / 2 * Math.cos(A1), C1.xBounds = A1 > -Math.PI / 2 && A1 < Math.PI / 2 ? [u1, Z.plotWidth] : [0, u1], C1.yBounds = [c1 + i1[1] + i1[2] / 2 * Math.sin(A1)], C1.yBounds[0] += A1 > -Math.PI && A1 < 0 || A1 > Math.PI ? -10 : 10);\n }\n return C1;\n }\n function m(W) {\n let P = this.pane.center, Y = this.chart, Z = Y.inverted, t1 = W.reverse, i1 = this.pane.options.background ? this.pane.options.background[0] || this.pane.options.background : {}, n1 = i1.innerRadius || "0%", s1 = i1.outerRadius || "100%", d1 = P[0] + Y.plotLeft, b1 = P[1] + Y.plotTop, c1 = this.height, a1 = W.isCrosshair, l1 = P[3] / 2, p1 = W.value, M1, A1, u1, h1, C1, q1, W1, R1, k1, N1 = this.getPosition(p1), v1 = N1.x, S1 = N1.y;\n if (a1 && (p1 = (R1 = this.getCrosshairPosition(W, d1, b1))[0], v1 = R1[1], S1 = R1[2]), this.isCircular)\n A1 = Math.sqrt(Math.pow(v1 - d1, 2) + Math.pow(S1 - b1, 2)), u1 = typeof n1 == "string" ? L(n1, 1) : n1 / A1, h1 = typeof s1 == "string" ? L(s1, 1) : s1 / A1, P && l1 && (u1 < (M1 = l1 / A1) && (u1 = M1), h1 < M1 && (h1 = M1)), k1 = [["M", d1 + u1 * (v1 - d1), b1 - u1 * (b1 - S1)], ["L", v1 - (1 - h1) * (v1 - d1), S1 + (1 - h1) * (b1 - S1)]];\n else if ((p1 = this.translate(p1)) && (p1 < 0 || p1 > c1) && (p1 = 0), this.options.gridLineInterpolation === "circle")\n k1 = this.getLinePath(0, p1, l1);\n else if (k1 = [], Y[Z ? "yAxis" : "xAxis"].forEach((D1) => {\n D1.pane === this.pane && (C1 = D1);\n }), C1) {\n W1 = C1.tickPositions, C1.autoConnect && (W1 = W1.concat([W1[0]])), t1 && (W1 = W1.slice().reverse()), p1 && (p1 += l1);\n for (let D1 = 0; D1 < W1.length; D1++)\n q1 = C1.getPosition(W1[D1], p1), k1.push(D1 ? ["L", q1.x, q1.y] : ["M", q1.x, q1.y]);\n }\n return k1;\n }\n function k(W, P) {\n let Y = this.translate(W);\n return this.postTranslate(this.isCircular ? Y : this.angleRad, g(this.isCircular ? P : Y < 0 ? 0 : Y, this.center[2] / 2) - this.offset);\n }\n function x() {\n let W = this.center, P = this.chart, Y = this.options.title;\n return { x: P.plotLeft + W[0] + (Y.x || 0), y: P.plotTop + W[1] - { high: 0.5, middle: 0.25, low: 0 }[Y.align] * W[2] + (Y.y || 0) };\n }\n function N(W) {\n W.beforeSetTickPositions = X, W.createLabelCollector = F, W.getCrosshairPosition = w, W.getLinePath = H, W.getOffset = C, W.getPlotBandPath = q, W.getPlotLinePath = m, W.getPosition = k, W.getTitlePosition = x, W.postTranslate = Q, W.setAxisSize = D, W.setAxisTranslation = G, W.setOptions = J;\n }\n function V() {\n let W = this.chart, P = this.options, Y = W.angular && this.isXAxis, Z = this.pane, t1 = Z && Z.options;\n if (!Y && Z && (W.angular || W.polar)) {\n let i1 = 2 * Math.PI, n1 = (g(t1.startAngle, 0) - 90) * Math.PI / 180, s1 = (g(t1.endAngle, g(t1.startAngle, 0) + 360) - 90) * Math.PI / 180;\n this.angleRad = (P.angle || 0) * Math.PI / 180, this.startAngleRad = n1, this.endAngleRad = s1, this.offset = P.offset || 0;\n let d1 = (n1 % i1 + i1) % i1, b1 = (s1 % i1 + i1) % i1;\n d1 > Math.PI && (d1 -= i1), b1 > Math.PI && (b1 -= i1), this.normalizedStartAngleRad = d1, this.normalizedEndAngleRad = b1;\n }\n }\n function R(W) {\n this.isRadial && (W.align = void 0, W.preventDefault());\n }\n function I() {\n if (this.chart && this.chart.labelCollectors) {\n let W = this.labelCollector ? this.chart.labelCollectors.indexOf(this.labelCollector) : -1;\n W >= 0 && this.chart.labelCollectors.splice(W, 1);\n }\n }\n function j(W) {\n let P, Y = this.chart, Z = Y.angular, t1 = Y.polar, i1 = this.isXAxis, n1 = this.coll, s1 = W.userOptions.pane || 0, d1 = this.pane = Y.pane && Y.pane[s1];\n if (n1 === "colorAxis") {\n this.isRadial = !1;\n return;\n }\n Z ? (Z && i1 ? (this.isHidden = !0, this.createLabelCollector = T, this.getOffset = b, this.redraw = E, this.render = E, this.setScale = b, this.setCategories = b, this.setTitle = b) : N(this), P = !i1) : t1 && (N(this), P = this.horiz), Z || t1 ? (this.isRadial = !0, this.labelCollector || (this.labelCollector = this.createLabelCollector()), this.labelCollector && Y.labelCollectors.push(this.labelCollector)) : this.isRadial = !1, d1 && P && (d1.axis = this), this.isCircular = P;\n }\n function U() {\n this.isRadial && this.beforeSetTickPositions();\n }\n function _(W) {\n let P = this.label;\n if (!P)\n return;\n let Y = this.axis, Z = P.getBBox(), t1 = Y.options.labels, i1 = (Y.translate(this.pos) + Y.startAngleRad + Math.PI / 2) / Math.PI * 180 % 360, n1 = Math.round(i1), s1 = A(t1.y) ? 0 : -(0.3 * Z.height), d1 = t1.y, b1, c1 = 20, a1 = t1.align, l1 = "end", p1 = n1 < 0 ? n1 + 360 : n1, M1 = p1, A1 = 0, u1 = 0;\n Y.isRadial && (b1 = Y.getPosition(this.pos, Y.center[2] / 2 + L(g(t1.distance, -25), Y.center[2] / 2, -Y.center[2] / 2)), t1.rotation === "auto" ? P.attr({ rotation: i1 }) : A(d1) || (d1 = Y.chart.renderer.fontMetrics(P).b - Z.height / 2), A(a1) || (Y.isCircular ? (Z.width > Y.len * Y.tickInterval / (Y.max - Y.min) && (c1 = 0), a1 = i1 > c1 && i1 < 180 - c1 ? "left" : i1 > 180 + c1 && i1 < 360 - c1 ? "right" : "center") : a1 = "center", P.attr({ align: a1 })), a1 === "auto" && Y.tickPositions.length === 2 && Y.isCircular && (p1 > 90 && p1 < 180 ? p1 = 180 - p1 : p1 > 270 && p1 <= 360 && (p1 = 540 - p1), M1 > 180 && M1 <= 360 && (M1 = 360 - M1), (Y.pane.options.startAngle === n1 || Y.pane.options.startAngle === n1 + 360 || Y.pane.options.startAngle === n1 - 360) && (l1 = "start"), a1 = n1 >= -90 && n1 <= 90 || n1 >= -360 && n1 <= -270 || n1 >= 270 && n1 <= 360 ? l1 === "start" ? "right" : "left" : l1 === "start" ? "left" : "right", M1 > 70 && M1 < 110 && (a1 = "center"), p1 < 15 || p1 >= 180 && p1 < 195 ? A1 = 0.3 * Z.height : p1 >= 15 && p1 <= 35 ? A1 = l1 === "start" ? 0 : 0.75 * Z.height : p1 >= 195 && p1 <= 215 ? A1 = l1 === "start" ? 0.75 * Z.height : 0 : p1 > 35 && p1 <= 90 ? A1 = l1 === "start" ? -(0.25 * Z.height) : Z.height : p1 > 215 && p1 <= 270 && (A1 = l1 === "start" ? Z.height : -(0.25 * Z.height)), M1 < 15 ? u1 = l1 === "start" ? -(0.15 * Z.height) : 0.15 * Z.height : M1 > 165 && M1 <= 180 && (u1 = l1 === "start" ? 0.15 * Z.height : -(0.15 * Z.height)), P.attr({ align: a1 }), P.translate(u1, A1 + s1)), W.pos.x = b1.x + (t1.x || 0), W.pos.y = b1.y + (d1 || 0));\n }\n function r1(W) {\n this.axis.getPosition && z(W.pos, this.axis.getPosition(this.pos));\n }\n function K({ options: W }) {\n W.xAxis && h(!0, B.radialDefaultOptions.circular, W.xAxis), W.yAxis && h(!0, B.radialDefaultOptions.radialGauge, W.yAxis);\n }\n function Q(W, P) {\n let Y = this.chart, Z = this.center;\n return W = this.startAngleRad + W, { x: Y.plotLeft + Z[0] + Math.cos(W) * P, y: Y.plotTop + Z[1] + Math.sin(W) * P };\n }\n function E() {\n this.isDirty = !1;\n }\n function D() {\n let W, P;\n this.constructor.prototype.setAxisSize.call(this), this.isRadial && (this.pane.updateCenter(this), W = this.center = this.pane.center.slice(), this.isCircular ? this.sector = this.endAngleRad - this.startAngleRad : (P = this.postTranslate(this.angleRad, W[3] / 2), W[0] = P.x - this.chart.plotLeft, W[1] = P.y - this.chart.plotTop), this.len = this.width = this.height = (W[2] - W[3]) * g(this.sector, 1) / 2);\n }\n function G() {\n this.constructor.prototype.setAxisTranslation.call(this), this.center && (this.isCircular ? this.transA = (this.endAngleRad - this.startAngleRad) / (this.max - this.min || 1) : this.transA = (this.center[2] - this.center[3]) / 2 / (this.max - this.min || 1), this.isXAxis ? this.minPixelPadding = this.transA * this.minPointOffset : this.minPixelPadding = 0);\n }\n function J(W) {\n let { coll: P } = this, { angular: Y, inverted: Z, polar: t1 } = this.chart, i1 = {};\n Y ? this.isXAxis || (i1 = h(p.yAxis, B.radialDefaultOptions.radialGauge)) : t1 && (i1 = this.horiz ? h(p.xAxis, B.radialDefaultOptions.circular) : h(P === "xAxis" ? p.xAxis : p.yAxis, B.radialDefaultOptions.radial)), Z && P === "yAxis" && (i1.stackLabels = O(p.yAxis, !0) ? p.yAxis.stackLabels : {}, i1.reversedStacks = !0);\n let n1 = this.options = h(i1, W);\n n1.plotBands || (n1.plotBands = []), f(this, "afterSetOptions");\n }\n function S(W, P, Y, Z, t1, i1, n1) {\n let s1, d1 = this.axis;\n return d1.isRadial ? ["M", P, Y, "L", (s1 = d1.getPosition(this.pos, d1.center[2] / 2 + Z)).x, s1.y] : W.call(this, P, Y, Z, t1, i1, n1);\n }\n B.radialDefaultOptions = h(r), B.compose = function(W, P) {\n return v(d, "Axis.Radial") && (M(W, "afterInit", V), M(W, "autoLabelAlign", R), M(W, "destroy", I), M(W, "init", j), M(W, "initialAxisTranslation", U), M(P, "afterGetLabelPosition", _), M(P, "afterGetPosition", r1), M(a, "setOptions", K), y(P.prototype, "getMarkPath", S)), W;\n };\n }(l || (l = {})), l;\n }), n(o, "Series/PolarComposition.js", [o["Core/Animation/AnimationUtilities.js"], o["Core/Globals.js"], o["Core/Series/Series.js"], o["Extensions/Pane/Pane.js"], o["Core/Axis/RadialAxis.js"], o["Core/Utilities.js"]], function(r, i, a, s, l, p) {\n let { animObject: d } = r, { composed: b } = i, { addEvent: M, defined: u, find: A, isNumber: z, merge: f, pick: O, pushUnique: h, relativeLength: g, splat: v, uniqueKey: L, wrap: y } = p;\n function B() {\n (this.pane || []).forEach((K) => {\n K.render();\n });\n }\n function X(K) {\n let Q = K.args[0].xAxis, E = K.args[0].yAxis, D = K.args[0].chart;\n Q && E && (E.gridLineInterpolation === "polygon" ? (Q.startOnTick = !0, Q.endOnTick = !0) : Q.gridLineInterpolation === "polygon" && D.inverted && (E.startOnTick = !0, E.endOnTick = !0));\n }\n function F() {\n this.pane || (this.pane = []), this.options.pane = v(this.options.pane), this.options.pane.forEach((K) => {\n new s(K, this);\n }, this);\n }\n function T(K) {\n let Q = K.args.marker, E = this.chart.xAxis[0], D = this.chart.yAxis[0], G = this.chart.inverted, J = G ? D : E, S = G ? E : D;\n if (this.chart.polar) {\n K.preventDefault();\n let W = (Q.attr ? Q.attr("start") : Q.start) - J.startAngleRad, P = Q.attr ? Q.attr("r") : Q.r, Y = (Q.attr ? Q.attr("end") : Q.end) - J.startAngleRad, Z = Q.attr ? Q.attr("innerR") : Q.innerR;\n K.result.x = W + J.pos, K.result.width = Y - W, K.result.y = S.len + S.pos - P, K.result.height = P - Z;\n }\n }\n function w(K) {\n let Q = this.chart;\n if (Q.polar && Q.hoverPane && Q.hoverPane.axis) {\n K.preventDefault();\n let E = Q.hoverPane.center, D = Q.mouseDownX || 0, G = Q.mouseDownY || 0, J = K.args.chartY, S = K.args.chartX, W = 2 * Math.PI, P = Q.hoverPane.axis.startAngleRad, Y = Q.hoverPane.axis.endAngleRad, Z = Q.inverted ? Q.xAxis[0] : Q.yAxis[0], t1 = {}, i1 = "arc";\n if (t1.x = E[0] + Q.plotLeft, t1.y = E[1] + Q.plotTop, this.zoomHor) {\n let n1 = P > 0 ? Y - P : Math.abs(P) + Math.abs(Y), s1 = Math.atan2(G - Q.plotTop - E[1], D - Q.plotLeft - E[0]) - P, d1 = Math.atan2(J - Q.plotTop - E[1], S - Q.plotLeft - E[0]) - P;\n t1.r = E[2] / 2, t1.innerR = E[3] / 2, s1 <= 0 && (s1 += W), d1 <= 0 && (d1 += W), d1 < s1 && (d1 = [s1, s1 = d1][0]), n1 < W && P + d1 > Y + (W - n1) / 2 && (d1 = s1, s1 = P <= 0 ? P : 0);\n let b1 = t1.start = Math.max(s1 + P, P), c1 = t1.end = Math.min(d1 + P, Y);\n if (Z.options.gridLineInterpolation === "polygon") {\n let a1 = Q.hoverPane.axis, l1 = b1 - a1.startAngleRad + a1.pos, p1 = Z.getPlotLinePath({ value: Z.max }), M1 = a1.toValue(l1), A1 = a1.toValue(l1 + (c1 - b1));\n if (M1 < a1.getExtremes().min) {\n let { min: u1, max: h1 } = a1.getExtremes();\n M1 = h1 - (u1 - M1);\n }\n if (A1 < a1.getExtremes().min) {\n let { min: u1, max: h1 } = a1.getExtremes();\n A1 = h1 - (u1 - A1);\n }\n A1 < M1 && (A1 = [M1, M1 = A1][0]), (p1 = m(p1, M1, A1, a1)).push(["L", E[0] + Q.plotLeft, Q.plotTop + E[1]]), t1.d = p1, i1 = "path";\n }\n }\n if (this.zoomVert) {\n let n1 = Q.inverted ? Q.xAxis[0] : Q.yAxis[0], s1 = Math.sqrt(Math.pow(D - Q.plotLeft - E[0], 2) + Math.pow(G - Q.plotTop - E[1], 2)), d1 = Math.sqrt(Math.pow(S - Q.plotLeft - E[0], 2) + Math.pow(J - Q.plotTop - E[1], 2));\n if (d1 < s1 && (s1 = [d1, d1 = s1][0]), d1 > E[2] / 2 && (d1 = E[2] / 2), s1 < E[3] / 2 && (s1 = E[3] / 2), this.zoomHor || (t1.start = P, t1.end = Y), t1.r = d1, t1.innerR = s1, n1.options.gridLineInterpolation === "polygon") {\n let b1 = n1.toValue(n1.len + n1.pos - s1), c1 = n1.toValue(n1.len + n1.pos - d1), a1 = n1.getPlotLinePath({ value: c1 }).concat(n1.getPlotLinePath({ value: b1, reverse: !0 }));\n t1.d = a1, i1 = "path";\n }\n }\n if (this.zoomHor && this.zoomVert && Z.options.gridLineInterpolation === "polygon") {\n let n1 = Q.hoverPane.axis, s1 = t1.start || 0, d1 = t1.end || 0, b1 = s1 - n1.startAngleRad + n1.pos, c1 = n1.toValue(b1), a1 = n1.toValue(b1 + (d1 - s1));\n if (t1.d instanceof Array) {\n let l1 = t1.d.slice(0, t1.d.length / 2), p1 = t1.d.slice(t1.d.length / 2, t1.d.length);\n p1 = [...p1].reverse();\n let M1 = Q.hoverPane.axis;\n l1 = m(l1, c1, a1, M1), (p1 = m(p1, c1, a1, M1)) && (p1[0][0] = "L"), p1 = [...p1].reverse(), t1.d = l1.concat(p1), i1 = "path";\n }\n }\n K.attrs = t1, K.shapeType = i1;\n }\n }\n function H() {\n let K = this.chart;\n K.polar && (this.polar = new r1(this), K.inverted && (this.isRadialSeries = !0, this.is("column") && (this.isRadialBar = !0)));\n }\n function C() {\n if (this.chart.polar && this.xAxis) {\n let { xAxis: K, yAxis: Q } = this, E = this.chart;\n this.kdByAngle = E.tooltip && E.tooltip.shared, this.kdByAngle || E.inverted ? this.searchPoint = q : this.options.findNearestPointBy = "xy";\n let D = this.points, G = D.length;\n for (; G--; )\n this.is("column") || this.is("columnrange") || this.polar.toXY(D[G]), E.hasParallelCoordinates || this.yAxis.reversed || (O(D[G].y, Number.MIN_VALUE) < Q.min || D[G].x < K.min || D[G].x > K.max ? (D[G].isNull = !0, D[G].plotY = NaN) : D[G].isNull = D[G].isValid && !D[G].isValid());\n this.hasClipCircleSetter || (this.hasClipCircleSetter = !!this.eventsToUnbind.push(M(this, "afterRender", function() {\n let J;\n E.polar && this.options.clip !== !1 && (J = this.yAxis.pane.center, this.clipCircle ? this.clipCircle.animate({ x: J[0], y: J[1], r: J[2] / 2, innerR: J[3] / 2 }) : this.clipCircle = function(S, W, P, Y, Z) {\n let t1 = L(), i1 = S.createElement("clipPath").attr({ id: t1 }).add(S.defs), n1 = Z ? S.arc(W, P, Y, Z, 0, 2 * Math.PI).add(i1) : S.circle(W, P, Y).add(i1);\n return n1.id = t1, n1.clipPath = i1, n1;\n }(E.renderer, J[0], J[1], J[2] / 2, J[3] / 2), this.group.clip(this.clipCircle), this.setClip = i.noop);\n })));\n }\n }\n function q(K) {\n let Q = this.chart, E = this.xAxis, D = this.yAxis, G = E.pane && E.pane.center, J = K.chartX - (G && G[0] || 0) - Q.plotLeft, S = K.chartY - (G && G[1] || 0) - Q.plotTop, W = Q.inverted ? { clientX: K.chartX - D.pos, plotY: K.chartY - E.pos } : { clientX: 180 + -180 / Math.PI * Math.atan2(J, S) };\n return this.searchKDTree(W);\n }\n function m(K, Q, E, D) {\n let G = D.tickInterval, J = D.tickPositions, S = A(J, (P) => P >= E), W = A([...J].reverse(), (P) => P <= Q);\n return u(S) || (S = J[J.length - 1]), u(W) || (W = J[0], S += G, K[0][0] = "L", K.unshift(K[K.length - 3])), (K = K.slice(J.indexOf(W), J.indexOf(S) + 1))[0][0] = "M", K;\n }\n function k(K, Q) {\n return A(this.pane || [], (E) => E.options.id === Q) || K.call(this, Q);\n }\n function x(K, Q, E, D, G, J) {\n let S, W, P, Y = this.chart, Z = O(D.inside, !!this.options.stacking);\n if (Y.polar) {\n if (S = Q.rectPlotX / Math.PI * 180, Y.inverted)\n this.forceDL = Y.isInsidePlot(Q.plotX, Q.plotY), Z && Q.shapeArgs ? (W = Q.shapeArgs, G = f(G, { x: (P = this.yAxis.postTranslate(((W.start || 0) + (W.end || 0)) / 2 - this.xAxis.startAngleRad, Q.barX + Q.pointWidth / 2)).x - Y.plotLeft, y: P.y - Y.plotTop })) : Q.tooltipPos && (G = f(G, { x: Q.tooltipPos[0], y: Q.tooltipPos[1] })), D.align = O(D.align, "center"), D.verticalAlign = O(D.verticalAlign, "middle");\n else {\n var t1;\n let i1, n1;\n (t1 = D).align === null && (i1 = S > 20 && S < 160 ? "left" : S > 200 && S < 340 ? "right" : "center", t1.align = i1), t1.verticalAlign === null && (n1 = S < 45 || S > 315 ? "bottom" : S > 135 && S < 225 ? "top" : "middle", t1.verticalAlign = n1), D = t1;\n }\n a.prototype.alignDataLabel.call(this, Q, E, D, G, J), this.isRadialBar && Q.shapeArgs && Q.shapeArgs.start === Q.shapeArgs.end ? E.hide() : E.show();\n } else\n K.call(this, Q, E, D, G, J);\n }\n function N() {\n let K = this.options, Q = K.stacking, E = this.chart, D = this.xAxis, G = this.yAxis, J = G.reversed, S = G.center, W = D.startAngleRad, P = D.endAngleRad - W, Y = K.threshold, Z = 0, t1, i1, n1, s1, d1, b1 = 0, c1 = 0, a1, l1, p1, M1, A1, u1, h1, C1;\n if (D.isRadial)\n for (n1 = (t1 = this.points).length, s1 = G.translate(G.min), d1 = G.translate(G.max), Y = K.threshold || 0, E.inverted && z(Y) && u(Z = G.translate(Y)) && (Z < 0 ? Z = 0 : Z > P && (Z = P), this.translatedThreshold = Z + W); n1--; ) {\n if (u1 = (i1 = t1[n1]).barX, l1 = i1.x, p1 = i1.y, i1.shapeType = "arc", E.inverted) {\n i1.plotY = G.translate(p1), Q && G.stacking ? (A1 = G.stacking.stacks[(p1 < 0 ? "-" : "") + this.stackKey], this.visible && A1 && A1[l1] && !i1.isNull && (M1 = A1[l1].points[this.getStackIndicator(void 0, l1, this.index).key], b1 = G.translate(M1[0]), c1 = G.translate(M1[1]), u(b1) && (b1 = p.clamp(b1, 0, P)))) : (b1 = Z, c1 = i1.plotY), b1 > c1 && (c1 = [b1, b1 = c1][0]), J ? c1 > s1 ? c1 = s1 : b1 < d1 ? b1 = d1 : (b1 > s1 || c1 < d1) && (b1 = c1 = P) : b1 < s1 ? b1 = s1 : c1 > d1 ? c1 = d1 : (c1 < s1 || b1 > d1) && (b1 = c1 = 0), G.min > G.max && (b1 = c1 = J ? P : 0), b1 += W, c1 += W, S && (i1.barX = u1 += S[3] / 2), h1 = Math.max(u1, 0), C1 = Math.max(u1 + i1.pointWidth, 0);\n let q1 = K.borderRadius, W1 = g((typeof q1 == "object" ? q1.radius : q1) || 0, C1 - h1);\n i1.shapeArgs = { x: S[0], y: S[1], r: C1, innerR: h1, start: b1, end: c1, borderRadius: W1 }, i1.opacity = b1 === c1 ? 0 : void 0, i1.plotY = (u(this.translatedThreshold) && (b1 < this.translatedThreshold ? b1 : c1)) - W;\n } else\n b1 = u1 + W, i1.shapeArgs = this.polar.arc(i1.yBottom, i1.plotY, b1, b1 + i1.pointWidth), i1.shapeArgs.borderRadius = 0;\n this.polar.toXY(i1), E.inverted ? (a1 = G.postTranslate(i1.rectPlotY, u1 + i1.pointWidth / 2), i1.tooltipPos = [a1.x - E.plotLeft, a1.y - E.plotTop]) : i1.tooltipPos = [i1.plotX, i1.plotY], S && (i1.ttBelow = i1.plotY > S[1]);\n }\n }\n function V(K, Q) {\n let E, D, G = this;\n if (this.chart.polar) {\n Q = Q || this.points;\n for (let S = 0; S < Q.length; S++)\n if (!Q[S].isNull) {\n E = S;\n break;\n }\n this.options.connectEnds !== !1 && E !== void 0 && (this.connectEnds = !0, Q.splice(Q.length, 0, Q[E]), D = !0), Q.forEach((S) => {\n S.polarPlotY === void 0 && G.polar.toXY(S);\n });\n }\n let J = K.apply(this, [].slice.call(arguments, 1));\n return D && Q.pop(), J;\n }\n function R(K, Q) {\n let E = this.chart, D = { xAxis: [], yAxis: [] };\n return E.polar ? E.axes.forEach((G) => {\n if (G.coll === "colorAxis")\n return;\n let J = G.isXAxis, S = G.center, W = Q.chartX - S[0] - E.plotLeft, P = Q.chartY - S[1] - E.plotTop;\n D[J ? "xAxis" : "yAxis"].push({ axis: G, value: G.translate(J ? Math.PI - Math.atan2(W, P) : Math.sqrt(Math.pow(W, 2) + Math.pow(P, 2)), !0) });\n }) : D = K.call(this, Q), D;\n }\n function I(K, Q) {\n this.chart.polar || K.call(this, Q);\n }\n function j(K, Q) {\n let E = this, D = this.chart, G = this.group, J = this.markerGroup, S = this.xAxis && this.xAxis.center, W = D.plotLeft, P = D.plotTop, Y = this.options.animation, Z, t1, i1, n1, s1, d1;\n D.polar ? E.isRadialBar ? Q || (E.startAngleRad = O(E.translatedThreshold, E.xAxis.startAngleRad), i.seriesTypes.pie.prototype.animate.call(E, Q)) : (Y = d(Y), E.is("column") ? Q || (t1 = S[3] / 2, E.points.forEach((b1) => {\n i1 = b1.graphic, s1 = (n1 = b1.shapeArgs) && n1.r, d1 = n1 && n1.innerR, i1 && n1 && (i1.attr({ r: t1, innerR: t1 }), i1.animate({ r: s1, innerR: d1 }, E.options.animation));\n })) : Q ? (Z = { translateX: S[0] + W, translateY: S[1] + P, scaleX: 1e-3, scaleY: 1e-3 }, G.attr(Z), J && J.attr(Z)) : (Z = { translateX: W, translateY: P, scaleX: 1, scaleY: 1 }, G.animate(Z, Y), J && J.animate(Z, Y))) : K.call(this, Q);\n }\n function U(K, Q, E, D) {\n let G, J;\n if (this.chart.polar)\n if (D) {\n let S = (J = function P(Y, Z, t1, i1) {\n let n1, s1, d1, b1, c1, a1, l1 = i1 ? 1 : 0, p1 = (n1 = Z >= 0 && Z <= Y.length - 1 ? Z : Z < 0 ? Y.length - 1 + Z : 0) - 1 < 0 ? Y.length - (1 + l1) : n1 - 1, M1 = n1 + 1 > Y.length - 1 ? l1 : n1 + 1, A1 = Y[p1], u1 = Y[M1], h1 = A1.plotX, C1 = A1.plotY, q1 = u1.plotX, W1 = u1.plotY, R1 = Y[n1].plotX, k1 = Y[n1].plotY;\n s1 = (1.5 * R1 + h1) / 2.5, d1 = (1.5 * k1 + C1) / 2.5, b1 = (1.5 * R1 + q1) / 2.5, c1 = (1.5 * k1 + W1) / 2.5;\n let N1 = Math.sqrt(Math.pow(s1 - R1, 2) + Math.pow(d1 - k1, 2)), v1 = Math.sqrt(Math.pow(b1 - R1, 2) + Math.pow(c1 - k1, 2)), S1 = Math.atan2(d1 - k1, s1 - R1);\n a1 = Math.PI / 2 + (S1 + Math.atan2(c1 - k1, b1 - R1)) / 2, Math.abs(S1 - a1) > Math.PI / 2 && (a1 -= Math.PI), s1 = R1 + Math.cos(a1) * N1, d1 = k1 + Math.sin(a1) * N1;\n let D1 = { rightContX: b1 = R1 + Math.cos(Math.PI + a1) * v1, rightContY: c1 = k1 + Math.sin(Math.PI + a1) * v1, leftContX: s1, leftContY: d1, plotX: R1, plotY: k1 };\n return t1 && (D1.prevPointCont = P(Y, p1, !1, i1)), D1;\n }(Q, D, !0, this.connectEnds)).prevPointCont && J.prevPointCont.rightContX, W = J.prevPointCont && J.prevPointCont.rightContY;\n G = ["C", z(S) ? S : J.plotX, z(W) ? W : J.plotY, z(J.leftContX) ? J.leftContX : J.plotX, z(J.leftContY) ? J.leftContY : J.plotY, J.plotX, J.plotY];\n } else\n G = ["M", E.plotX, E.plotY];\n else\n G = K.call(this, Q, E, D);\n return G;\n }\n function _(K, Q, E = this.plotY) {\n if (!this.destroyed) {\n let { plotX: D, series: G } = this, { chart: J } = G;\n return J.polar && z(D) && z(E) ? [D + (Q ? J.plotLeft : 0), E + (Q ? J.plotTop : 0)] : K.call(this, Q, E);\n }\n }\n class r1 {\n static compose(Q, E, D, G, J, S, W, P, Y, Z) {\n if (s.compose(E, D), l.compose(Q, J), h(b, "Polar")) {\n let t1 = E.prototype, i1 = S.prototype, n1 = D.prototype, s1 = G.prototype;\n if (M(E, "afterDrawChartBox", B), M(E, "getAxes", F), M(E, "init", X), y(t1, "get", k), y(n1, "getCoordinates", R), y(n1, "pinch", I), M(D, "getSelectionMarkerAttrs", w), M(D, "getSelectionBox", T), M(G, "afterInit", H), M(G, "afterTranslate", C, { order: 2 }), M(G, "afterColumnTranslate", N, { order: 4 }), y(s1, "animate", j), y(i1, "pos", _), P) {\n let d1 = P.prototype;\n y(d1, "alignDataLabel", x), y(d1, "animate", j);\n }\n if (Y && y(Y.prototype, "getGraphPath", V), Z) {\n let d1 = Z.prototype;\n y(d1, "getPointSpline", U), W && (W.prototype.getPointSpline = d1.getPointSpline);\n }\n }\n }\n constructor(Q) {\n this.series = Q;\n }\n arc(Q, E, D, G) {\n let J = this.series, S = J.xAxis.center, W = J.yAxis.len, P = S[3] / 2, Y = W - E + P, Z = W - O(Q, W) + P;\n return J.yAxis.reversed && (Y < 0 && (Y = P), Z < 0 && (Z = P)), { x: S[0], y: S[1], r: Y, innerR: Z, start: D, end: G };\n }\n toXY(Q) {\n let E = this.series, D = E.chart, G = E.xAxis, J = E.yAxis, S = Q.plotX, W = D.inverted, P = Q.y, Y = Q.plotY, Z = W ? S : J.len - Y, t1;\n if (W && E && !E.isRadialBar && (Q.plotY = Y = z(P) ? J.translate(P) : 0), Q.rectPlotX = S, Q.rectPlotY = Y, J.center && (Z += J.center[3] / 2), z(Y)) {\n let i1 = W ? J.postTranslate(Y, Z) : G.postTranslate(S, Z);\n Q.plotX = Q.polarPlotX = i1.x - D.plotLeft, Q.plotY = Q.polarPlotY = i1.y - D.plotTop;\n }\n E.kdByAngle ? ((t1 = (S / Math.PI * 180 + G.pane.options.startAngle) % 360) < 0 && (t1 += 360), Q.clientX = t1) : Q.clientX = Q.plotX;\n }\n }\n return r1;\n }), n(o, "Core/Axis/WaterfallAxis.js", [o["Core/Globals.js"], o["Core/Axis/Stacking/StackItem.js"], o["Core/Utilities.js"]], function(r, i, a) {\n var s;\n let { composed: l } = r, { addEvent: p, objectEach: d, pushUnique: b } = a;\n return function(M) {\n function u() {\n let h = this.waterfall.stacks;\n h && (h.changed = !1, delete h.alreadyChanged);\n }\n function A() {\n let h = this.options.stackLabels;\n h && h.enabled && this.waterfall.stacks && this.waterfall.renderStackTotals();\n }\n function z() {\n this.waterfall || (this.waterfall = new O(this));\n }\n function f() {\n let h = this.axes;\n for (let g of this.series)\n if (g.options.stacking) {\n for (let v of h)\n v.isXAxis || (v.waterfall.stacks.changed = !0);\n break;\n }\n }\n M.compose = function(h, g) {\n b(l, "Axis.Waterfall") && (p(h, "init", z), p(h, "afterBuildStacks", u), p(h, "afterRender", A), p(g, "beforeRedraw", f));\n };\n class O {\n constructor(g) {\n this.axis = g, this.stacks = { changed: !1 };\n }\n renderStackTotals() {\n let g = this.axis, v = g.waterfall.stacks, L = g.stacking && g.stacking.stackTotalGroup, y = new i(g, g.options.stackLabels || {}, !1, 0, void 0);\n this.dummyStackItem = y, L && d(v, (B) => {\n d(B, (X, F) => {\n y.total = X.stackTotal, y.x = +F, X.label && (y.label = X.label), i.prototype.render.call(y, L), X.label = y.label, delete y.label;\n });\n }), y.total = null;\n }\n }\n M.Composition = O;\n }(s || (s = {})), s;\n }), n(o, "Series/Waterfall/WaterfallPoint.js", [o["Series/Column/ColumnSeries.js"], o["Core/Series/Point.js"], o["Core/Utilities.js"]], function(r, i, a) {\n let { isNumber: s } = a;\n class l extends r.prototype.pointClass {\n getClassName() {\n let d = i.prototype.getClassName.call(this);\n return this.isSum ? d += " highcharts-sum" : this.isIntermediateSum && (d += " highcharts-intermediate-sum"), d;\n }\n isValid() {\n return s(this.y) || this.isSum || !!this.isIntermediateSum;\n }\n }\n return l;\n }), n(o, "Series/Waterfall/WaterfallSeriesDefaults.js", [], function() {\n return { dataLabels: { inside: !0 }, lineWidth: 1, lineColor: "#333333", dashStyle: "Dot", borderColor: "#333333", states: { hover: { lineWidthPlus: 0 } } };\n }), n(o, "Series/Waterfall/WaterfallSeries.js", [o["Core/Series/SeriesRegistry.js"], o["Core/Utilities.js"], o["Core/Axis/WaterfallAxis.js"], o["Series/Waterfall/WaterfallPoint.js"], o["Series/Waterfall/WaterfallSeriesDefaults.js"]], function(r, i, a, s, l) {\n let { column: p, line: d } = r.seriesTypes, { addEvent: b, arrayMax: M, arrayMin: u, correctFloat: A, crisp: z, extend: f, isNumber: O, merge: h, objectEach: g, pick: v } = i;\n function L(B, X) {\n return Object.hasOwnProperty.call(B, X);\n }\n class y extends p {\n generatePoints() {\n p.prototype.generatePoints.apply(this);\n for (let X = 0, F = this.points.length; X < F; X++) {\n let T = this.points[X], w = this.processedYData[X];\n O(w) && (T.isIntermediateSum || T.isSum) && (T.y = A(w));\n }\n }\n processData(X) {\n let F, T, w, H, C, q, m = this.options, k = this.yData, x = m.data, N = k.length, V = m.threshold || 0;\n w = T = H = C = 0;\n for (let R = 0; R < N; R++)\n q = k[R], F = x && x[R] ? x[R] : {}, q === "sum" || F.isSum ? k[R] = A(w) : q === "intermediateSum" || F.isIntermediateSum ? (k[R] = A(T), T = 0) : (w += q, T += q), H = Math.min(w, H), C = Math.max(w, C);\n super.processData.call(this, X), m.stacking || (this.dataMin = H + V, this.dataMax = C);\n }\n toYData(X) {\n return X.isSum ? "sum" : X.isIntermediateSum ? "intermediateSum" : X.y;\n }\n updateParallelArrays(X, F) {\n super.updateParallelArrays.call(this, X, F), (this.yData[0] === "sum" || this.yData[0] === "intermediateSum") && (this.yData[0] = null);\n }\n pointAttribs(X, F) {\n let T = this.options.upColor;\n T && !X.options.color && O(X.y) && (X.color = X.y > 0 ? T : void 0);\n let w = p.prototype.pointAttribs.call(this, X, F);\n return delete w.dashstyle, w;\n }\n getGraphPath() {\n return [["M", 0, 0]];\n }\n getCrispPath() {\n var k;\n let X = this.data.filter((x) => O(x.y)), F = this.yAxis, T = X.length, w = ((k = this.graph) == null ? void 0 : k.strokeWidth()) || 0, H = this.xAxis.reversed, C = this.yAxis.reversed, q = this.options.stacking, m = [];\n for (let x = 1; x < T; x++) {\n if (!(this.options.connectNulls || O(this.data[X[x].index - 1].y)))\n continue;\n let N = X[x].box, V = X[x - 1], R = V.y || 0, I = X[x - 1].box;\n if (!N || !I)\n continue;\n let j = F.waterfall.stacks[this.stackKey], U = R > 0 ? -I.height : 0;\n if (j && I && N) {\n let _, r1 = j[x - 1];\n if (q) {\n let K = r1.connectorThreshold;\n _ = z(F.translate(K, !1, !0, !1, !0) + (C ? U : 0), w);\n } else\n _ = z(I.y + (V.minPointLengthOffset || 0), w);\n m.push(["M", (I.x || 0) + (H ? 0 : I.width || 0), _], ["L", (N.x || 0) + (H && N.width || 0), _]);\n }\n if (I && m.length && (!q && R < 0 && !C || R > 0 && C)) {\n let _ = m[m.length - 2];\n _ && typeof _[2] == "number" && (_[2] += I.height || 0);\n let r1 = m[m.length - 1];\n r1 && typeof r1[2] == "number" && (r1[2] += I.height || 0);\n }\n }\n return m;\n }\n drawGraph() {\n d.prototype.drawGraph.call(this), this.graph && this.graph.attr({ d: this.getCrispPath() });\n }\n setStackedPoints(X) {\n var G;\n let F = this.options, T = (G = X.waterfall) == null ? void 0 : G.stacks, w = F.threshold || 0, H = this.stackKey, C = this.xData, q = C.length, m = w, k = m, x, N = 0, V = 0, R = 0, I, j, U, _, r1, K, Q, E, D = (J, S, W, P) => {\n if (x) {\n if (I)\n for (; W < I; W++)\n x.stackState[W] += P;\n else\n x.stackState[0] = J, I = x.stackState.length;\n x.stackState.push(x.stackState[I - 1] + S);\n }\n };\n if (X.stacking && T && this.reserveSpace()) {\n E = T.changed, (Q = T.alreadyChanged) && 0 > Q.indexOf(H) && (E = !0), T[H] || (T[H] = {});\n let J = T[H];\n if (J)\n for (let S = 0; S < q; S++)\n (!J[K = C[S]] || E) && (J[K] = { negTotal: 0, posTotal: 0, stackTotal: 0, threshold: 0, stateIndex: 0, stackState: [], label: E && J[K] ? J[K].label : void 0 }), x = J[K], (r1 = this.yData[S]) >= 0 ? x.posTotal += r1 : x.negTotal += r1, _ = F.data[S], j = x.absolutePos = x.posTotal, U = x.absoluteNeg = x.negTotal, x.stackTotal = j + U, I = x.stackState.length, _ && _.isIntermediateSum ? (D(R, V, 0, R), R = V, V = w, m ^= k, k ^= m, m ^= k) : _ && _.isSum ? (D(w, N, I, 0), m = w) : (D(m, r1, 0, N), _ && (N += r1, V += r1)), x.stateIndex++, x.threshold = m, m += x.stackTotal;\n T.changed = !1, T.alreadyChanged || (T.alreadyChanged = []), T.alreadyChanged.push(H);\n }\n }\n getExtremes() {\n let X, F, T, w = this.options.stacking;\n return w ? (X = this.yAxis.waterfall.stacks, F = this.stackedYNeg = [], T = this.stackedYPos = [], w === "overlap" ? g(X[this.stackKey], function(H) {\n F.push(u(H.stackState)), T.push(M(H.stackState));\n }) : g(X[this.stackKey], function(H) {\n F.push(H.negTotal + H.threshold), T.push(H.posTotal + H.threshold);\n }), { dataMin: u(F), dataMax: M(T) }) : { dataMin: this.dataMin, dataMax: this.dataMax };\n }\n }\n return y.defaultOptions = h(p.defaultOptions, l), y.compose = a.compose, f(y.prototype, { pointValKey: "y", showLine: !0, pointClass: s }), b(y, "afterColumnTranslate", function() {\n let { options: B, points: X, yAxis: F } = this, T = v(B.minPointLength, 5), w = T / 2, H = B.threshold || 0, C = B.stacking, q = F.waterfall.stacks[this.stackKey], m = H, k = H, x, N, V, R;\n for (let I = 0; I < X.length; I++) {\n let j = X[I], U = this.processedYData[I], _ = f({ x: 0, y: 0, width: 0, height: 0 }, j.shapeArgs || {});\n j.box = _;\n let r1 = [0, U], K = j.y || 0;\n if (C) {\n if (q) {\n let D = q[I];\n C === "overlap" ? (N = D.stackState[D.stateIndex--], x = K >= 0 ? N : N - K, L(D, "absolutePos") && delete D.absolutePos, L(D, "absoluteNeg") && delete D.absoluteNeg) : (K >= 0 ? (N = D.threshold + D.posTotal, D.posTotal -= K, x = N) : (N = D.threshold + D.negTotal, D.negTotal -= K, x = N - K), !D.posTotal && O(D.absolutePos) && L(D, "absolutePos") && (D.posTotal = D.absolutePos, delete D.absolutePos), !D.negTotal && O(D.absoluteNeg) && L(D, "absoluteNeg") && (D.negTotal = D.absoluteNeg, delete D.absoluteNeg)), j.isSum || (D.connectorThreshold = D.threshold + D.stackTotal), F.reversed ? (V = K >= 0 ? x - K : x + K, R = x) : (V = x, R = x - K), j.below = V <= H, _.y = F.translate(V, !1, !0, !1, !0), _.height = Math.abs(_.y - F.translate(R, !1, !0, !1, !0));\n let G = F.waterfall.dummyStackItem;\n G && (G.x = I, G.label = q[I].label, G.setOffset(this.pointXOffset || 0, this.barW || 0, this.stackedYNeg[I], this.stackedYPos[I], void 0, this.xAxis));\n }\n } else\n x = Math.max(k, k + K) + r1[0], _.y = F.translate(x, !1, !0, !1, !0), j.isSum ? (_.y = F.translate(r1[1], !1, !0, !1, !0), _.height = Math.min(F.translate(r1[0], !1, !0, !1, !0), F.len) - _.y, j.below = r1[1] <= H) : j.isIntermediateSum ? (K >= 0 ? (V = r1[1] + m, R = m) : (V = m, R = r1[1] + m), F.reversed && (V ^= R, R ^= V, V ^= R), _.y = F.translate(V, !1, !0, !1, !0), _.height = Math.abs(_.y - Math.min(F.translate(R, !1, !0, !1, !0), F.len)), m += r1[1], j.below = V <= H) : (_.height = U > 0 ? F.translate(k, !1, !0, !1, !0) - _.y : F.translate(k, !1, !0, !1, !0) - F.translate(k - U, !1, !0, !1, !0), k += U, j.below = k < H), _.height < 0 && (_.y += _.height, _.height *= -1);\n j.plotY = _.y, j.yBottom = _.y + _.height, _.height <= T && !j.isNull ? (_.height = T, _.y -= w, j.yBottom = _.y + _.height, j.plotY = _.y, K < 0 ? j.minPointLengthOffset = -w : j.minPointLengthOffset = w) : (j.isNull && (_.width = 0), j.minPointLengthOffset = 0);\n let Q = j.plotY + (j.negative ? _.height : 0);\n j.below && (j.plotY += _.height), j.tooltipPos && (this.chart.inverted ? j.tooltipPos[0] = F.len - Q : j.tooltipPos[1] = Q), j.isInside = this.isPointInside(j);\n let E = z(j.yBottom, this.borderWidth);\n _.y = z(_.y, this.borderWidth), _.height = E - _.y, h(!0, j.shapeArgs, _);\n }\n }, { order: 2 }), r.registerSeriesType("waterfall", y), y;\n }), n(o, "masters/highcharts-more.src.js", [o["Core/Globals.js"], o["Core/Series/SeriesRegistry.js"], o["Extensions/Pane/Pane.js"], o["Series/Bubble/BubbleSeries.js"], o["Series/PackedBubble/PackedBubbleSeries.js"], o["Series/PolarComposition.js"], o["Core/Axis/RadialAxis.js"], o["Series/Waterfall/WaterfallSeries.js"]], function(r, i, a, s, l, p, d, b) {\n return r.RadialAxis = d, s.compose(r.Axis, r.Chart, r.Legend), l.compose(r.Axis, r.Chart, r.Legend), a.compose(r.Chart, r.Pointer), p.compose(r.Axis, r.Chart, r.Pointer, r.Series, r.Tick, r.Point, i.seriesTypes.areasplinerange, i.seriesTypes.column, i.seriesTypes.line, i.seriesTypes.spline), b.compose(r.Axis, r.Chart), r;\n });\n });\n})(ab);\nvar FD = ab.exports;\nconst XD = /* @__PURE__ */ Q2(FD);\nlet UD = {\n credits: {\n enabled: !1\n }\n};\nconst sb = (0,react__WEBPACK_IMPORTED_MODULE_0__.createContext)({\n Highcharts: l3\n}), YD = ({ children: e }) => {\n const [t, o] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(!1), n = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)(\n (r) => {\n var i = r.relativeLength;\n r.Series.prototype.drawLegendSymbol = r.seriesTypes.column.prototype.drawLegendSymbol, r.wrap(\n r.seriesTypes.column.prototype,\n "translate",\n function(a) {\n var s = this.options, l = s.topMargin || 0, p = s.bottomMargin || 0;\n a.call(this), this.points.forEach(function(d) {\n var b = d.shapeArgs, M = b.width, u = b.height, A = b.x, z = b.y, f = i(s.borderRadiusTopLeft || 0, M), O = i(s.borderRadiusTopRight || 0, M), h = i(s.borderRadiusBottomRight || 0, M), g = i(s.borderRadiusBottomLeft || 0, M);\n if ((d == null ? void 0 : d.y) < 0 && (f > 0 && (g = f, f = 0), O > 0 && (h = O, O = 0)), f || O || h || g) {\n var v = Math.min(M, u) / 2;\n f > v && (f = v), O > v && (O = v), h > v && (h = v), g > v && (g = v), d.dlBox = d.shapeArgs, d.shapeType = "path", d.shapeArgs = {\n d: [\n ["M", A + f, z + l],\n // top side\n ["L", A + M - O, z + l],\n // top right corner\n [\n "C",\n A + M - O / 2,\n z,\n A + M,\n z + O / 2,\n A + M,\n z + O\n ],\n // right side\n ["L", A + M, z + u - h],\n // bottom right corner\n [\n "C",\n A + M,\n z + u - h / 2,\n A + M - h / 2,\n z + u,\n A + M - h,\n z + u + p\n ],\n // bottom side\n ["L", A + g, z + u + p],\n // bottom left corner\n [\n "C",\n A + g / 2,\n z + u,\n A,\n z + u - g / 2,\n A,\n z + u - g\n ],\n // left side\n ["L", A, z + f],\n // top left corner\n [\n "C",\n A,\n z + f / 2,\n A + f / 2,\n z,\n A + f,\n z\n ],\n ["Z"]\n ]\n };\n }\n });\n }\n ), o(!0);\n },\n [l3, t]\n );\n return (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => {\n n(l3);\n }, []), /* @__PURE__ */ c(\n sb.Provider,\n {\n value: {\n isRenderChart: t,\n Highcharts: l3,\n defaultSetting: UD\n },\n children: e\n }\n );\n};\nXD(l3);\nl3.setOptions({\n colors: HD\n});\nPD(l3);\nconst bo = () => {\n const e = (0,react__WEBPACK_IMPORTED_MODULE_0__.useContext)(sb);\n if (e === void 0)\n throw new Error("Need to have Provider wrapped.");\n return e;\n}, GD = (e) => typeof e == "number" && Number(e).toFixed(2), QD = (e, t) => (t ? Number(e) : Number(e).toFixed(2)).toString().replace(/\\B(?=(\\d{3})+(?!\\d))/g, ",");\n(styled_components__WEBPACK_IMPORTED_MODULE_1___default().div)`\n width: 100%;\n`;\nconst ZD = (0,styled_components__WEBPACK_IMPORTED_MODULE_1__.keyframes)`\n to {\n background-position: 100%;\n }\n`, jD = styled_components__WEBPACK_IMPORTED_MODULE_1___default().div(\n ({\n theme: { colors: e },\n radius: t,\n width: o,\n height: n,\n circle: r,\n $animate: i,\n $visible: a\n }) => (0,styled_components__WEBPACK_IMPORTED_MODULE_1__.css)`\n display: block;\n position: relative;\n overflow: ${a ? "hidden" : "none"};\n background-color: ${e.dataTable.dataTableLoaderBg};\n border-radius: ${r ? "50%" : `${t}px` || "4px"};\n height: ${typeof n == "number" ? `${n}px` : n || "auto"};\n width: ${`${o}px` || "100%"};\n\n ${i && (0,styled_components__WEBPACK_IMPORTED_MODULE_1__.css)`\n &:after {\n content: \'\';\n position: absolute;\n top: 0;\n left: 0;\n bottom: 0;\n right: 0;\n background: linear-gradient(\n 0.25turn,\n transparent,\n ${e.dataTable.dataTableLoaderGradient},\n transparent\n ),\n linear-gradient(\n ${e.dataTable.dataTableLoaderBg},\n ${e.dataTable.dataTableLoaderBg}\n ),\n radial-gradient(\n 38px circle at 19px 19px,\n ${e.dataTable.dataTableLoaderGradient} 50%,\n transparent 51%\n ),\n linear-gradient(\n ${e.dataTable.dataTableLoaderBg},\n ${e.dataTable.dataTableLoaderBg}\n );\n background-repeat: no-repeat;\n background-size: 50px;\n background-position: -350px;\n animation: ${ZD} 1.7s infinite linear;\n }\n `}\n\n ${!a && (0,styled_components__WEBPACK_IMPORTED_MODULE_1__.css)`\n background-color: transparent;\n &:after {\n content: none;\n }\n `}\n `\n), KD = (styled_components__WEBPACK_IMPORTED_MODULE_1___default().div)`\n visibility: ${(e) => e.$visible ? "hidden" : "visible"};\n`, ie = ({\n visible: e = !0,\n animate: t = !0,\n children: o,\n ...n\n}) => /* @__PURE__ */ c(\n jD,\n {\n ...n,\n $visible: e,\n $animate: t,\n className: "skeleton-container",\n children: /* @__PURE__ */ c(KD, { $visible: e, className: "skeleton-child-container", children: o })\n }\n), JD = ({\n setColumnFilters: e,\n tableData: t,\n maxVisibleFilters: o = 5,\n defaultColumnsState: n,\n allColumnsState: r,\n columnsState: i,\n handleChangeColumnOrder: a,\n handleColumnsStateChange: s,\n handleResetColumnOrder: l,\n resetColumnsState: p,\n handleColumnsHide: d,\n rightSideContainer: b,\n columnFilters: M,\n tableConfig: u,\n loading: A,\n columnVisibility: z,\n showRightSideContent: f,\n tabsMaxHeight: O,\n columnChooserActionLabel: h,\n enableFilterIndicatorDots: g\n}) => {\n var E, D, G, J;\n const [v, L] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)({}), [y, B] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(!1), [X, F] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(""), [T, w] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(n), [H, C] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(!1), [q, m] = io(!1);\n (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => {\n n && i && r && (!nc(r, i) || !nc(n, T)) && C(!0);\n }, [i, n, T, r]);\n const k = (S) => {\n const W = new Set(T);\n Object.entries(S).forEach(([P, Y]) => {\n Y ? W.add(P) : W.delete(P);\n }), w(W);\n };\n (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => {\n k(z);\n }, [z]);\n const x = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)(\n (S) => () => {\n const W = new Set(T);\n W.has(S) ? W.delete(S) : W.add(S), w(W);\n },\n [T]\n ), N = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)(() => {\n a();\n const S = {};\n i.items.forEach((W) => {\n S[W] = T.has(W);\n }), d(S), m();\n }, [\n i,\n a,\n d,\n T,\n m\n ]), V = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)(() => {\n w(n), l(), p();\n }, [n, l, p]), R = (S, W) => {\n L((P) => ({\n ...P,\n [S]: W\n }));\n }, I = (S) => {\n const W = { ...v };\n delete W[S], L(W);\n }, j = (S = v) => {\n const W = Object.entries(S).map(([P, Y]) => ({\n id: P,\n value: Y\n }));\n e(W);\n }, U = (S, W) => {\n L((Z) => ({\n ...Z,\n [S]: W\n }));\n const P = {\n ...v,\n [S]: W\n }, Y = Object.entries(P).map(\n ([Z, t1]) => ({\n id: Z,\n value: t1\n })\n );\n e(Y);\n }, _ = /* @__PURE__ */ e1(s0, { children: [\n /* @__PURE__ */ c(\n B2,\n {\n buttonType: "link",\n size: "sm",\n onClick: () => I(X),\n isDisabled: !v[X],\n children: "Clear"\n }\n ),\n /* @__PURE__ */ c(\n B2,\n {\n size: "sm",\n onClick: () => {\n j(), B(!1);\n },\n children: "Apply"\n }\n )\n ] }), r1 = ((D = (E = u == null ? void 0 : u.options) == null ? void 0 : E.data) == null ? void 0 : D.length) > 0 || (M == null ? void 0 : M.length) !== 0, K = t.slice(o).length < 1, Q = u.getAllColumns().filter((S) => {\n var W;\n return !((W = S == null ? void 0 : S.columnDef) != null && W.hideFromColumnChooser);\n }).map((S) => {\n var W;\n return (W = S.columnDef) == null ? void 0 : W.filterLabel;\n });\n return /* @__PURE__ */ e1(iS, { className: "action-bar-container", loading: A, children: [\n /* @__PURE__ */ e1(so, { columns: 12, alignItems: "end", children: [\n /* @__PURE__ */ c(f4, { width: 6, children: r1 ? /* @__PURE__ */ e1(aS, { children: [\n /* @__PURE__ */ c(\n ie,\n {\n radius: 4,\n height: A ? K2 : "auto",\n visible: A,\n children: !K && /* @__PURE__ */ c(\n G2,\n {\n name: "Filters",\n size: "sm",\n buttonType: "tertiary",\n onClick: () => B(!0),\n isDisabled: K\n }\n )\n }\n ),\n t.slice(0, o).map((S) => S.enableFilter ? /* @__PURE__ */ c(sS, { children: /* @__PURE__ */ c(\n ie,\n {\n radius: 4,\n height: A ? K2 : "auto",\n visible: A,\n children: /* @__PURE__ */ c(\n oS,\n {\n filterData: S,\n handleFilterValue: U,\n filterValues: v,\n clearFilter: I\n }\n )\n }\n ) }, S.columnId) : null),\n /* @__PURE__ */ c(\n ie,\n {\n radius: 4,\n height: A ? K2 : "auto",\n visible: A,\n children: M.length !== 0 && /* @__PURE__ */ c(nS, { children: /* @__PURE__ */ c(\n B2,\n {\n buttonType: "link",\n children: "Clear all",\n size: "sm",\n onClick: () => {\n L({}), e([]);\n }\n }\n ) })\n }\n )\n ] }) : null }),\n /* @__PURE__ */ c(f4, { width: 6, $middle: !0, end: !0, children: /* @__PURE__ */ e1(rS, { children: [\n r1 ? /* @__PURE__ */ c(\n ie,\n {\n radius: 4,\n height: A ? K2 : "auto",\n visible: A,\n children: b && b\n }\n ) : f ? /* @__PURE__ */ c(\n ie,\n {\n radius: 4,\n height: A ? K2 : "auto",\n visible: A,\n children: b && b\n }\n ) : null,\n /* @__PURE__ */ c(s0, { children: r1 ? /* @__PURE__ */ c(s0, { children: !!i && /* @__PURE__ */ c(\n ie,\n {\n radius: 4,\n height: A ? K2 : "auto",\n visible: A,\n children: /* @__PURE__ */ c(\n Er,\n {\n button: /* @__PURE__ */ c(\n G2,\n {\n size: "sm",\n buttonType: "tertiary",\n name: "ColumnOptions",\n onClick: m,\n "aria-label": "Open Draggable sort column List"\n }\n ),\n position: "right",\n isShowed: q,\n isFilterValueChanged: H,\n applyText: "Apply",\n clearText: h,\n width: 352,\n onApplyFilter: N,\n onClearFilter: V,\n handleDropdownShowed: m,\n children: /* @__PURE__ */ c(\n ID,\n {\n filterNames: Q,\n columnsState: i,\n selectedColumns: T,\n handleColumnsStateChange: s,\n handleCheckboxColumnsChange: x,\n pageSize: (J = (G = u == null ? void 0 : u.getPaginationRowModel()) == null ? void 0 : G.rows) == null ? void 0 : J.length\n }\n )\n }\n )\n }\n ) }) : null })\n ] }) })\n ] }),\n /* @__PURE__ */ c(\n CS,\n {\n isOpen: y,\n onClose: () => B(!1),\n title: "More filters",\n size: "md",\n hasCloseButton: !0,\n actionsGroup: _,\n isFilterModal: !0,\n children: /* @__PURE__ */ c(s0, { children: /* @__PURE__ */ c(\n US,\n {\n filters: t,\n handleFilterValue: R,\n filterValues: v,\n clearFilter: I,\n setClearFilterId: F,\n maxVisibleFilters: o,\n tabsMaxHeight: O,\n enableFilterIndicatorDots: g\n }\n ) })\n }\n )\n ] });\n}, _D = styled_components__WEBPACK_IMPORTED_MODULE_1___default().button(({ theme: { colors: e, borderRadius: t, spacings: o }, $isDisable: n, $isDropdown: r }) => (0,styled_components__WEBPACK_IMPORTED_MODULE_1__.css)`\n display: flex;\n align-items: center;\n max-width: 100%;\n background-color: transparent;\n border: none;\n padding: 0;\n border-radius: 2px;\n &:focus-visible {\n outline: ${e.border.borderFocused} solid 1px;\n }\n ${r && (0,styled_components__WEBPACK_IMPORTED_MODULE_1__.css)`\n ${ot} {\n border-top-left-radius: ${t.sm};\n border-bottom-left-radius: ${t.sm};\n padding: ${o.sp6} ${o.sp4} ${o.sp6} ${o.sp8};\n border-top-right-radius: 0px;\n border-bottom-right-radius: 0px;\n }\n ${o3} {\n border-top-right-radius: ${t.sm};\n border-bottom-right-radius: ${t.sm};\n }\n `}\n ${!r && (0,styled_components__WEBPACK_IMPORTED_MODULE_1__.css)`\n ${ot} {\n border-radius: ${t.sm};\n padding: 6px 8px;\n }\n ${o3} {\n border-radius: none;\n }\n `}\n ${ot} {\n cursor: pointer;\n &:hover {\n background-color: ${e.actionButton.actionButtonBgHoverButton};\n }\n &:active {\n background-color: ${e.actionButton.actionButtonBgPressedButton};\n }\n }\n\n ${n && (0,styled_components__WEBPACK_IMPORTED_MODULE_1__.css)`\n ${ot} {\n pointer-events: none;\n color: ${e.textIcon.textDisabledOnbg};\n cursor: none;\n }\n\n ${o3} {\n pointer-events: none;\n color: ${e.textIcon.textDisabledOnbg};\n svg {\n color: ${e.textIcon.textDisabledOnbg} !important;\n }\n }\n `}\n &:has(${o3}:hover) {\n ${ot}{\n background-color: ${e.actionButton.actionButtonBgHoverDropdown};\n }\n }\n\n &:has(${ot}:hover) {\n ${o3}{\n background-color: ${e.actionButton.actionButtonBgHoverDropdown};\n }\n }\n ${o3} {\n cursor: pointer;\n svg {\n color: ${e.textIcon.textLowemphasis};\n }\n &:hover {\n background-color: ${e.backgrounds.bgHoverPrimary};\n }\n &:active {\n background-color: ${e.actionButton.actionButtonBgPressedDropdown};\n svg {\n color: ${e.textIcon.textPrimary};\n }\n }\n }\n `);\n(styled_components__WEBPACK_IMPORTED_MODULE_1___default().div)`\n padding: 0;\n`;\nstyled_components__WEBPACK_IMPORTED_MODULE_1___default().div(({ theme: { spacings: e } }) => (0,styled_components__WEBPACK_IMPORTED_MODULE_1__.css)`\n display: flex;\n align-items: center;\n gap: ${e.sp4};\n `);\nconst o3 = styled_components__WEBPACK_IMPORTED_MODULE_1___default().div(({ theme: { spacings: e, colors: t } }) => (0,styled_components__WEBPACK_IMPORTED_MODULE_1__.css)`\n padding: ${e.sp12} 6px;\n `), ot = styled_components__WEBPACK_IMPORTED_MODULE_1___default().div(\n ({ theme: { colors: e, typography: t, lineHeight: o, fontWeight: n }, $iconButton: r }) => (0,styled_components__WEBPACK_IMPORTED_MODULE_1__.css)`\n display: flex;\n align-items: center;\n justify-content: center;\n gap: 4px;\n max-width: 100%;\n font-size: ${t.t12};\n line-height: ${o.lh20};\n font-weight: ${n.regular};\n border: none;\n background-color: transparent;\n color: ${e.textIcon.textPrimary};\n border-radius: 2px;\n box-sizing: border-box;\n\n ${r && (0,styled_components__WEBPACK_IMPORTED_MODULE_1__.css)`\n height: 32px;\n width: 32px;\n `}\n `\n), $D = styled_components__WEBPACK_IMPORTED_MODULE_1___default().div(({ theme: {} }) => (0,styled_components__WEBPACK_IMPORTED_MODULE_1__.css)`\n display: flex;\n `), Y_ = ({\n iconName: e,\n text: t,\n isDisable: o,\n count: n,\n dropDown: r,\n iconRight: i,\n iconLeft: a,\n dropDownBody: s,\n onClick: l,\n ...p\n}) => /* @__PURE__ */ c(_D, { $isDisable: o, $isDropdown: r, children: e && !r && !t && !a && !i ? n ? /* @__PURE__ */ c(ot, { onClick: l, $iconButton: !0, children: /* @__PURE__ */ c(Ae, { ...p, count: n, children: /* @__PURE__ */ c(Z1, { name: e, size: "xxxs" }) }) }) : /* @__PURE__ */ c(ot, { onClick: l, $iconButton: !0, children: /* @__PURE__ */ c(Z1, { name: e, size: "xxxs" }) }) : /* @__PURE__ */ e1($D, { className: "actionBtnDropdown", children: [\n /* @__PURE__ */ e1(ot, { onClick: l, children: [\n !i && a && /* @__PURE__ */ c(Z1, { name: e, size: "xxxs" }),\n t,\n !a && i && !r && /* @__PURE__ */ c(Z1, { name: e, size: "xxxs" })\n ] }),\n r && !i && a && /* @__PURE__ */ c(\n it,\n {\n body: s,\n position: "right",\n dropdownBodyWidth: "175px",\n children: /* @__PURE__ */ c(o3, { children: /* @__PURE__ */ c(Z1, { name: "ChevronDownDropdown", size: "xxxxs" }) })\n }\n )\n] }) }), rt = {\n INFO: "info",\n SUCCESS: "success",\n ERROR: "error",\n WARNING: "warning"\n}, eH = styled_components__WEBPACK_IMPORTED_MODULE_1___default().div(({ theme: e, type: t }) => {\n const { colors: o, typography: n, lineHeight: r, borderRadius: i, spacings: a } = e;\n let s, l;\n switch (t) {\n case rt.SUCCESS:\n s = o.textIcon.textAlertSuccess, l = o.backgrounds.bgSuccessSecondary;\n break;\n case rt.WARNING:\n s = o.textIcon.textAlertWarning, l = o.backgrounds.bgWarningSecondary;\n break;\n case rt.ERROR:\n s = o.textIcon.textAlertError, l = o.backgrounds.bgErrorSecondary;\n break;\n case rt.INFO:\n default:\n s = o.textIcon.textAlertInformational, l = o.backgrounds.bgInformationalSecondary;\n }\n return (0,styled_components__WEBPACK_IMPORTED_MODULE_1__.css)`\n display: flex;\n align-items: center;\n gap: 8px;\n width: 444px;\n max-width: 100%;\n border-radius: ${i.base};\n font-size: ${n.t12};\n line-height: ${r.lh22};\n color: ${s};\n background-color: ${l};\n padding: 5px ${a.sp8};\n `;\n});\n(styled_components__WEBPACK_IMPORTED_MODULE_1___default().div)`\n padding: 32px;\n`;\nconst tH = ({ text: e, type: t = rt.INFO }, o) => /* @__PURE__ */ e1(eH, { ref: o, type: t, children: [\n /* @__PURE__ */ c(Z1, { name: (() => {\n switch (t) {\n case rt.SUCCESS:\n return "Success";\n case rt.ERROR:\n return "Error";\n case rt.WARNING:\n return "Alert";\n case rt.INFO:\n default:\n return "Info";\n }\n })(), size: "xs" }),\n e\n] }), G_ = (0,react__WEBPACK_IMPORTED_MODULE_0__.forwardRef)(tH), cb = (styled_components__WEBPACK_IMPORTED_MODULE_1___default().button)`\n .icon-system {\n margin-top: 1px;\n }\n`, oH = (styled_components__WEBPACK_IMPORTED_MODULE_1___default().span)``, lb = (styled_components__WEBPACK_IMPORTED_MODULE_1___default().li)``, rH = styled_components__WEBPACK_IMPORTED_MODULE_1___default().ul(\n ({\n theme: {\n typography: e,\n lineHeight: t,\n fontWeight: o,\n colors: n,\n mixins: r,\n fontFamily: i,\n transitions: a\n }\n }) => {\n const s = n.textIcon.textSecondary, l = n.textIcon.textLowemphasis, p = n.textIcon.textLowemphasis, d = n.textIcon.textLowemphasis;\n return (0,styled_components__WEBPACK_IMPORTED_MODULE_1__.css)`\n ${r.listReset};\n display: flex;\n flex-wrap: wrap;\n align-items: center;\n color: ${s};\n ${lb} {\n font-size: ${e.t10};\n line-height: ${t.lh18};\n font-weight: ${o.regular};\n font-family: ${i.base};\n color: ${n.textIcon.textSecondary};\n transition: ${a.base};\n &:hover {\n text-shadow: 0px 0px 0px ${n.textIcon.textSecondary};\n font-weight: ${o.medium};\n transition: ${a.base};\n }\n &:active {\n text-shadow: 0px 0px 0px ${n.textIcon.textSecondary};\n }\n }\n ${cb} {\n display: flex;\n align-items: center;\n color: ${l};\n text-decoration: none;\n cursor: pointer;\n border: none;\n padding: 3px 0;\n background: transparent;\n font-family: ${i.base};\n font-size: ${e.t10};\n line-height: ${t.lh18};\n font-weight: ${o.regular};\n transition: ${a.base};\n &:hover {\n color: ${p};\n text-shadow: 0px 0px 0px #797980;\n transition: ${a.base};\n font-weight: ${o.medium};\n }\n &:hover {\n color: ${p};\n text-shadow: 0px 0px 0px #797980;\n transition: ${a.base};\n }\n &:focus {\n color: ${p};\n text-decoration: none;\n }\n &:active {\n color: ${d};\n }\n .icon-system {\n width: 9px;\n padding: 3.5px;\n color: ${n.textIcon.textLowemphasis};\n svg {\n width: 9px;\n }\n }\n }\n `;\n }\n), nH = ({ name: e, to: t }) => /* @__PURE__ */ e1(cb, { onClick: t, "data-text": e, children: [\n e,\n /* @__PURE__ */ c(Z1, { size: "xs", name: "ChevronRight" })\n] }), iH = (e, t) => {\n const { itemsList: o = [] } = e;\n return /* @__PURE__ */ c(rH, { ref: t, children: (() => o.map((r, i) => {\n const { name: a, to: s } = r;\n return /* @__PURE__ */ c(lb, { children: (() => i !== o.length - 1 ? /* @__PURE__ */ c(nH, { name: a, to: s }) : /* @__PURE__ */ c(oH, { children: a }))() }, a);\n }))() });\n}, aH = (0,react__WEBPACK_IMPORTED_MODULE_0__.forwardRef)(iH);\n(styled_components__WEBPACK_IMPORTED_MODULE_1___default().div)``;\nconst z5 = (styled_components__WEBPACK_IMPORTED_MODULE_1___default().span)``, sH = styled_components__WEBPACK_IMPORTED_MODULE_1___default()(Hp)(\n ({ theme: { spacings: e }, $iconRight: t, $iconLeft: o, size: n }) => (0,styled_components__WEBPACK_IMPORTED_MODULE_1__.css)`\n display: flex;\n align-items: center;\n justify-content: space-between;\n\n ${!!t && (0,styled_components__WEBPACK_IMPORTED_MODULE_1__.css)`\n ${z5} {\n padding-right: ${n == "sm" ? "10px" : `${e.sp12}`};\n }\n .icon-system {\n padding: 0px;\n\n height: ${n != "sm" ? "16px" : "12px"};\n\n svg {\n height: ${n != "sm" ? "16px" : "12px"};\n }\n }\n `}\n\n ${!!o && (0,styled_components__WEBPACK_IMPORTED_MODULE_1__.css)`\n ${z5} {\n padding-left: ${n == "sm" ? "10px" : `${e.sp12}`};\n }\n\n .icon-system {\n padding: 0px;\n\n height: ${n != "sm" ? "16px" : "12px"};\n\n svg {\n height: ${n != "sm" ? "16px" : "12px"};\n }\n }\n `}\n `\n);\nfunction X6(e) {\n const { children: t, ...o } = e;\n return /* @__PURE__ */ c(react__WEBPACK_IMPORTED_MODULE_0__.Fragment, { children: o.buttonType != "mini" && /* @__PURE__ */ e1(sH, { ...o, children: [\n o.$iconLeft && /* @__PURE__ */ c(Z1, { name: o.$iconLeft }),\n /* @__PURE__ */ c(z5, { children: t }),\n o.$iconRight && /* @__PURE__ */ c(Z1, { name: o.$iconRight })\n ] }) });\n}\nconst cH = (e, t) => {\n const { isDisabled: o, ...n } = e;\n return /* @__PURE__ */ c(d6, { ref: t, disabled: o, ...n });\n}, Q_ = (0,react__WEBPACK_IMPORTED_MODULE_0__.forwardRef)(cH);\n(styled_components__WEBPACK_IMPORTED_MODULE_1___default().div)`\n width: 504px;\n`;\nconst lH = styled_components__WEBPACK_IMPORTED_MODULE_1___default().div(\n ({ theme: { colors: e }, $isEntity: t }) => (0,styled_components__WEBPACK_IMPORTED_MODULE_1__.css)`\n background-color: ${e.backgrounds.bgPrimary};\n min-height: ${t ? "auto" : "303px"};\n `\n), pH = styled_components__WEBPACK_IMPORTED_MODULE_1___default().div(() => (0,styled_components__WEBPACK_IMPORTED_MODULE_1__.css)``), dH = styled_components__WEBPACK_IMPORTED_MODULE_1___default().div(\n ({ theme: { spacings: e } }) => (0,styled_components__WEBPACK_IMPORTED_MODULE_1__.css)`\n margin-top: 8px;\n .scrollbar-container {\n max-height: 303px;\n }\n\n .ps--active-y {\n padding-right: ${e.sp8};\n }\n `\n), bH = styled_components__WEBPACK_IMPORTED_MODULE_1___default().div(\n () => (0,styled_components__WEBPACK_IMPORTED_MODULE_1__.css)`\n display: flex;\n justify-content: flex-end;\n `\n), MH = styled_components__WEBPACK_IMPORTED_MODULE_1___default().div(\n ({ theme: { colors: e } }) => (0,styled_components__WEBPACK_IMPORTED_MODULE_1__.css)`\n width: 100%;\n label{\n display: none;\n }\n .icon-system{\n svg{\n width: 16px;\n height: 16px;\n color: ${e.textIcon.textLowemphasis};\n }\n }\n `\n), AH = styled_components__WEBPACK_IMPORTED_MODULE_1___default().div(\n () => (0,styled_components__WEBPACK_IMPORTED_MODULE_1__.css)`\n display: flex;\n justify-content: space-between;\n align-items: center;\n `\n), ic = styled_components__WEBPACK_IMPORTED_MODULE_1___default().div(\n ({ theme: { spacings: e } }) => (0,styled_components__WEBPACK_IMPORTED_MODULE_1__.css)`\n padding-top: ${e.sp8};\n padding-bottom: ${e.sp8};\n `\n), uH = styled_components__WEBPACK_IMPORTED_MODULE_1___default().div(() => (0,styled_components__WEBPACK_IMPORTED_MODULE_1__.css)`\n width: 100%;\n height: 304px;\n position: relative;\n display: flex;\n align-items: center;\n justify-content: center;\n & > div {\n max-width: 215px;\n display: flex;\n flex-direction: column;\n gap: 4px;\n }\n `), oi = (0,react__WEBPACK_IMPORTED_MODULE_0__.createContext)({});\nfunction zH() {\n return /* @__PURE__ */ c(uH, { children: /* @__PURE__ */ e1("div", { children: [\n /* @__PURE__ */ c(\n nr,\n {\n variant: "heading-xs-medium",\n style: { fontWeight: 500, textAlign: "center" },\n children: "We couldn’t find any matches"\n }\n ),\n /* @__PURE__ */ c(\n nr,\n {\n variant: "body-sm-regular",\n style: { fontWeight: 400, textAlign: "center" },\n children: "There is no result for your search. Try searching for a different client"\n }\n )\n ] }) });\n}\nfunction hH(e) {\n const {\n children: t,\n actionsGroup: o,\n getSearchValue: n,\n hasActionGroup: r,\n loadingProgress: i\n } = e, a = (0,react__WEBPACK_IMPORTED_MODULE_0__.useContext)(oi), s = i ? i == 100 : !0, l = s && ((t == null ? void 0 : t.length) == 0 || !t) && (a == null ? void 0 : a.searchValue);\n return /* @__PURE__ */ e1(lH, { $isEntity: a == null ? void 0 : a.isEnity, children: [\n /* @__PURE__ */ e1(pH, { children: [\n /* @__PURE__ */ c(AH, { children: /* @__PURE__ */ c(MH, { children: /* @__PURE__ */ c(\n G4,\n {\n getValue: n,\n value: a == null ? void 0 : a.searchValue,\n placeholder: "Search"\n }\n ) }) }),\n !s && i && /* @__PURE__ */ c(ic, { children: /* @__PURE__ */ c(C4, { type: "linear", progress: i }) })\n ] }),\n l ? /* @__PURE__ */ c(zH, {}) : /* @__PURE__ */ c(s0, { children: s && /* @__PURE__ */ e1(s0, { children: [\n t && /* @__PURE__ */ c(dH, { children: /* @__PURE__ */ c(j4, { children: t }) }),\n r && /* @__PURE__ */ e1(s0, { children: [\n /* @__PURE__ */ c(ic, { children: /* @__PURE__ */ c(P2, {}) }),\n o && /* @__PURE__ */ c(bH, { children: o })\n ] })\n ] }) })\n ] });\n}\nconst OH = (styled_components__WEBPACK_IMPORTED_MODULE_1___default().div)`\n display: flex;\n align-items: center;\n height: 24px;\n width: 100%;\n`, pb = styled_components__WEBPACK_IMPORTED_MODULE_1___default().p(\n ({ theme: e }) => (0,styled_components__WEBPACK_IMPORTED_MODULE_1__.css)`\n font-family: ${e.fontFamily.base};\n font-size: ${e.typography.t12};\n font-weight: ${e.fontWeight.light};\n line-height: ${e.lineHeight.lh20};\n color: ${e.colors.textIcon.textPrimary};\n word-break: break-word;\n max-width: 357px;\n padding: 0 4px 0 4px;\n margin: 0;\n transition: ${e.transitions.base};\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n `\n), fH = styled_components__WEBPACK_IMPORTED_MODULE_1___default().div(\n ({ theme: { itemSize: e, colors: t, borderRadius: o } }) => (0,styled_components__WEBPACK_IMPORTED_MODULE_1__.css)`\n width: ${e.xs};\n height: ${e.xs};\n overflow: hidden;\n border: 1px solid ${t.backgrounds.whiteSmoke};\n border-radius: ${o.circle};\n box-sizing: border-box;\n display: flex;\n align-items: center;\n justify-content: center;\n .icon-system{\n color:${t.textIcon.textPrimary};\n }\n svg {\n width: 100%;\n border-radius: ${o.circle};\n }\n `\n), gH = styled_components__WEBPACK_IMPORTED_MODULE_1___default().div(\n ({ theme: { colors: e } }) => (0,styled_components__WEBPACK_IMPORTED_MODULE_1__.css)`\n \n .icon-system{\n color:${e.textIcon.textPrimary};\n }\n `\n), CH = (styled_components__WEBPACK_IMPORTED_MODULE_1___default().img)`\n width: 100%;\n`, mH = styled_components__WEBPACK_IMPORTED_MODULE_1___default().div(\n ({ theme: { spacings: e, colors: t, itemSize: o, transitions: n }, $isFavourite: r }) => (0,styled_components__WEBPACK_IMPORTED_MODULE_1__.css)`\n transition: ${n.base};\n width: ${o.sm};\n &:hover {\n transition: ${n.base};\n\n .icon-system {\n color: ${r ? t.backgrounds.intertrustOrange : t.whisper};\n }\n }\n .icon-system {\n color: ${r ? t.backgrounds.intertrustOrange : t.whisper};\n }\n ${V3} {\n &,\n &:hover {\n background-color: transparent;\n }\n\n .icon-system {\n color: ${r ? t.backgrounds.intertrustOrange : t.whisper};\n transition: ${n.base};\n }\n\n svg {\n width: 16px;\n margin: ${e.sp4};\n }\n }\n `\n), LH = styled_components__WEBPACK_IMPORTED_MODULE_1___default().div(\n ({\n theme: { colors: e, spacings: t, borderRadius: o, transitions: n },\n $isFocused: r,\n $isSelected: i\n }) => (0,styled_components__WEBPACK_IMPORTED_MODULE_1__.css)`\n display: flex;\n align-items: center;\n padding-left: ${t.sp4};\n padding-right: ${t.sp4};\n transition: ${n.base};\n cursor: pointer;\n justify-content: space-between;\n &:hover {\n background-color: ${e.backgrounds.bgHoverPrimary};\n transition: ${n.base};\n }\n\n ${r && (0,styled_components__WEBPACK_IMPORTED_MODULE_1__.css)`\n background-color: ${e.blue};\n border: 1px solid ${e.blue};\n transition: ${n.base};\n\n ${pb} {\n color: ${e.white};\n transition: ${n.base};\n }\n\n &:hover {\n background-color: ${e.blue};\n }\n `}\n ${i && (0,styled_components__WEBPACK_IMPORTED_MODULE_1__.css)`\n background-color:${e.backgrounds.bgSelected};\n color:${e.textIcon.textPrimary};\n `}\n `\n);\n(styled_components__WEBPACK_IMPORTED_MODULE_1___default().div)`\n width: 456px;\n`;\nfunction vH(e) {\n const {\n onFavouriteClick: t,\n imgComponent: o,\n hasFavouriteIcon: n,\n $isFavourite: r = !1,\n onRowClick: i,\n $isFocused: a,\n clientName: s = "",\n img: l,\n clientCode: p,\n selectedClient: d,\n isRecent: b,\n data: M\n } = e, { isEnity: u } = (0,react__WEBPACK_IMPORTED_MODULE_0__.useContext)(oi), A = u ? M == null ? void 0 : M.entityName : s, z = u ? M == null ? void 0 : M.entityCode : p, f = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)(\n (h) => {\n h && h.stopPropagation && h.stopPropagation(), t && t({\n clientCode: p,\n clientName: s\n });\n },\n [t, p, s]\n ), O = () => i && i({\n [u ? "entityCode" : "clientCode"]: z,\n [u ? "entityName" : "clientName"]: A\n }) || null;\n return /* @__PURE__ */ e1(\n LH,\n {\n $isFocused: a,\n $isFavourite: r,\n $isSelected: d != null && d.clientCode ? (d == null ? void 0 : d.clientCode) == p : !1,\n children: [\n /* @__PURE__ */ e1(OH, { onClick: O, children: [\n b && /* @__PURE__ */ c(gH, { children: /* @__PURE__ */ c(Z1, { name: "Recent", size: "sm", color: "black" }) }),\n (l || o) && /* @__PURE__ */ e1(fH, { children: [\n l && /* @__PURE__ */ c(CH, { src: l }),\n !l && o && /* @__PURE__ */ c(ur, { size: "12px", name: o })\n ] }),\n /* @__PURE__ */ c(pb, { children: A })\n ] }),\n n && /* @__PURE__ */ c(mH, { $isFavourite: r, children: /* @__PURE__ */ c("div", { onClick: f, children: /* @__PURE__ */ c(Z1, { name: "StarSolid", size: "sm" }) }) })\n ]\n }\n );\n}\nconst qH = styled_components__WEBPACK_IMPORTED_MODULE_1___default().div(\n ({ theme: { spacings: e } }) => (0,styled_components__WEBPACK_IMPORTED_MODULE_1__.css)`\n &:not(:last-of-type) {\n margin-bottom: ${e.sp4};\n }\n `\n), yH = styled_components__WEBPACK_IMPORTED_MODULE_1___default().p(\n ({ theme: e }) => (0,styled_components__WEBPACK_IMPORTED_MODULE_1__.css)`\n font-family: ${e.fontFamily.base};\n font-size: ${e.typography.t12};\n line-height: ${e.lineHeight.lh20};\n color:${e.colors.textIcon.textLowemphasis};\n padding: 0 ${e.spacings.sp8};\n margin: 0;\n height: 24px;\n\n `\n), wH = styled_components__WEBPACK_IMPORTED_MODULE_1___default().ul(\n ({ theme: { mixins: e, colors: t } }) => (0,styled_components__WEBPACK_IMPORTED_MODULE_1__.css)`\n ${e.listReset};\n\n background-color: ${t.backgrounds.bgPrimary};\n `\n), xH = (styled_components__WEBPACK_IMPORTED_MODULE_1___default().li)`\n & + & {\n margin-top: ${({ theme: { spacings: e } }) => e.sp8};\n }\n`;\n(styled_components__WEBPACK_IMPORTED_MODULE_1___default().div)`\n width: 504px;\n`;\nfunction WH(e) {\n const {\n title: t,\n clients: o,\n onRowClick: n,\n onFavouriteClick: r,\n selectedClient: i,\n isRecent: a\n } = e, s = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)(\n () => o.map(\n (l, p) => /* @__PURE__ */ c(xH, { children: /* @__PURE__ */ c(\n vH,\n {\n onRowClick: n,\n onFavouriteClick: r,\n selectedClient: i,\n ...l,\n isRecent: a,\n data: {\n ...l\n }\n }\n ) }, p)\n ),\n [o, n, r]\n );\n return /* @__PURE__ */ e1(qH, { children: [\n /* @__PURE__ */ c(yH, { children: t }),\n /* @__PURE__ */ c(wH, { children: s() })\n ] });\n}\n(styled_components__WEBPACK_IMPORTED_MODULE_1___default().div)`\n width: 504px;\n`;\nconst RH = (styled_components__WEBPACK_IMPORTED_MODULE_1___default().div)`\n display: flex;\n flex-direction: row;\n align-items: center;\n gap:${(e) => e.theme.spacings.sp8}\n`;\nfunction BH() {\n const e = (0,react__WEBPACK_IMPORTED_MODULE_0__.useContext)(oi);\n return /* @__PURE__ */ e1(RH, { children: [\n /* @__PURE__ */ c(B2, { buttonType: "link", size: "sm", onClick: e == null ? void 0 : e.onClearFilter, children: "Clear filter" }),\n /* @__PURE__ */ c(B2, { size: "sm", onClick: e == null ? void 0 : e.onClientSubmit, children: "Select Client" })\n ] });\n}\nfunction db(e) {\n const { clientsData: t, onRowClick: o, onFavouriteClick: n, onSubmit: r, getSearchValue: i, defaultSearchValue: a = "", ...s } = e, [l, p] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(\n (e == null ? void 0 : e.selectedClient) ?? null\n ), [d, b] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(a), M = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)(\n (O) => {\n o && o(O), p(O);\n },\n [l]\n ), u = (O) => {\n b(O), i && i(O);\n }, A = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)(() => {\n p(null), o && o(null), u(""), r && r(null);\n }, []), z = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)(() => {\n r && r(l);\n }, [l, d]), f = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)(\n () => t.map(\n ({ group: O, data: h, isRecent: g }, v) => /* @__PURE__ */ c(\n WH,\n {\n title: O,\n clients: h,\n isRecent: g,\n onFavouriteClick: n,\n onRowClick: M,\n selectedClient: l,\n isLastGroup: v == (t == null ? void 0 : t.length) - 1\n },\n O\n )\n ),\n [t, o, n, l]\n );\n return /* @__PURE__ */ c(\n oi.Provider,\n {\n value: {\n onSelectClient: M,\n onClearFilter: A,\n selectedClient: l,\n onClientSubmit: z,\n searchValue: d,\n isEnity: e.isEnity\n },\n children: /* @__PURE__ */ c(hH, { ...s, getSearchValue: u, actionsGroup: /* @__PURE__ */ c(BH, {}), children: f() })\n }\n );\n}\nconst SH = (0,styled_components__WEBPACK_IMPORTED_MODULE_1__.keyframes)`\n from {\n opacity: 0;\n }\n to {\n opacity: 1;\n }\n`;\n(styled_components__WEBPACK_IMPORTED_MODULE_1___default().div)`\n width: 100%;\n`;\nconst EH = (styled_components__WEBPACK_IMPORTED_MODULE_1___default().div)`\n display: flex;\n flex-direction: column;\n margin-bottom: 16px;\n`, bb = styled_components__WEBPACK_IMPORTED_MODULE_1___default().div(\n ({ theme: { colors: e }, $isDisabled: t }) => (0,styled_components__WEBPACK_IMPORTED_MODULE_1__.css)`\n display: flex;\n align-items: center;\n justify-content: space-between;\n user-select: none;\n ${t && (0,styled_components__WEBPACK_IMPORTED_MODULE_1__.css)`\n color: ${e.veryLightGrey};\n cursor: default;\n pointer-events: none;\n `}\n `\n), U6 = styled_components__WEBPACK_IMPORTED_MODULE_1___default().div(\n ({ theme: { mixins: e, colors: t, fontWeight: o, lineHeight: n, typography: r } }) => (0,styled_components__WEBPACK_IMPORTED_MODULE_1__.css)`\n ${e.ellipsis};\n font-size: ${r.t10};\n font-weight: ${o.light};\n line-height: ${n.lh20};\n color: ${t.textIcon.textHighemphasis};\n `\n), ac = styled_components__WEBPACK_IMPORTED_MODULE_1___default().div(\n ({ theme: { cubicBezier: e } }) => (0,styled_components__WEBPACK_IMPORTED_MODULE_1__.css)`\n transition: height 0.3s ${e.base};\n box-sizing: border-box;\n animation: ${SH} 0.5s ${e.base} forwards;\n width: 100%;\n `\n), kH = styled_components__WEBPACK_IMPORTED_MODULE_1___default().div(\n ({ theme: { colors: e, cubicBezier: t, spacings: o }, $isCollapsed: n }) => (0,styled_components__WEBPACK_IMPORTED_MODULE_1__.css)`\n transform-origin: center;\n transform: rotate(${n ? "180deg" : "0"});\n transition: transform 0.3s ${t.base};\n cursor: pointer;\n color:${e.textIcon.textPrimary};\n padding: ${o.sp4};\n ${!n && (0,styled_components__WEBPACK_IMPORTED_MODULE_1__.css)`\n padding: ${o.sp4};\n border: 1px solid ${e.filterboxBorder.filterboxButtonBorderDefault};\n border-radius: 50%;\n background-color: ${e.filterboxBackground.filterboxButtonBg};\n `}\n `\n), h5 = ({\n title: e,\n isOpened: t = !1,\n isDisabled: o,\n children: n,\n onExpandCollapseClick: r,\n openedState: i,\n expandWithTitle: a,\n isExpandEnable: s,\n ...l\n}) => {\n const p = sv(), [d, b] = io(!t), [M, u] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(0), A = (0,react__WEBPACK_IMPORTED_MODULE_0__.useRef)(null);\n (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => {\n p || z();\n }, [t]), (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => {\n A && A.current && (d ? A.current.style.overflow = "hidden" : A && A.current && (A.current.style.overflow = "visible"));\n }, [d]);\n const z = o ? () => null : b, f = () => {\n z(), r && r(!d);\n };\n return (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => {\n i && i(d);\n }, [d]), (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => {\n A && A.current && u(A.current.scrollHeight);\n }, [d, M]), /* @__PURE__ */ e1(EH, { ...l, className: "collapse-wrapper", children: [\n /* @__PURE__ */ e1(bb, { $isDisabled: o, children: [\n d || a ? /* @__PURE__ */ c(U6, { children: e }) : !a && /* @__PURE__ */ c(\n ac,\n {\n ref: A,\n children: n\n }\n ),\n s || s == null ? /* @__PURE__ */ c(kH, { $isCollapsed: d, onClick: f, children: /* @__PURE__ */ c(Z1, { name: "ChevronDownDropdown", size: "xxxs" }) }) : null\n ] }),\n a && /* @__PURE__ */ c(\n ac,\n {\n ref: A,\n style: {\n height: d ? 0 : M\n },\n children: n\n }\n )\n ] });\n}, NH = styled_components__WEBPACK_IMPORTED_MODULE_1___default().form(\n ({ theme: { borderRadius: e, colors: t, typography: o } }) => (0,styled_components__WEBPACK_IMPORTED_MODULE_1__.css)`\n /* width: 510px;\n height: 200px; */\n /* padding: ${o.t10}; */\n flex-direction: column;\n display: flex;\n /* align-items: flex-start;\n justify-content: center;\n border-radius: ${e.base};\n background: ${t.backgrounds.bgPrimary}; */\n `\n);\n(styled_components__WEBPACK_IMPORTED_MODULE_1___default().div)`\n width: 518px;\n`;\nconst TH = styled_components__WEBPACK_IMPORTED_MODULE_1___default().div(\n ({ theme: { colors: e }, $accordionExpanded: t, $isAccordionEnabled: o }) => (0,styled_components__WEBPACK_IMPORTED_MODULE_1__.css)`\n ${t && (0,styled_components__WEBPACK_IMPORTED_MODULE_1__.css)`\n .icon-system {\n color: ${e.textIcon.textSecondary};\n }\n `}\n ${o && (0,styled_components__WEBPACK_IMPORTED_MODULE_1__.css)`\n .icon-system {\n color: ${e.textIcon.textPrimary};\n }\n `}\n `\n), IH = styled_components__WEBPACK_IMPORTED_MODULE_1___default().textarea(\n ({ theme: { borderRadius: e, colors: t, typography: o } }) => (0,styled_components__WEBPACK_IMPORTED_MODULE_1__.css)`\n display: flex;\n padding: ${o.t10};\n min-height: 200px;\n border-radius: ${e.base};\n border: 1px solid ${t.border.borderTertiary};\n outline: none;\n background: ${t.backgrounds.bgPrimary};\n color: ${t.textIcon.textLowemphasis};\n `\n), DH = styled_components__WEBPACK_IMPORTED_MODULE_1___default().div(\n ({ theme: { spacings: e } }) => (0,styled_components__WEBPACK_IMPORTED_MODULE_1__.css)`\n display: flex;\n gap: ${e.sp4};\n width: fit-content;\n `\n), HH = styled_components__WEBPACK_IMPORTED_MODULE_1___default().div(\n ({ theme: { lineHeight: e, colors: t } }) => (0,styled_components__WEBPACK_IMPORTED_MODULE_1__.css)`\n width: 100%;\n height: ${e.lh20};\n align-items: center;\n color: ${t.textIcon.textPrimary};\n `\n), VH = styled_components__WEBPACK_IMPORTED_MODULE_1___default().div(\n ({\n theme: { lineHeight: e, colors: t, typography: o, fontWeight: n, fontFamily: r }\n }) => (0,styled_components__WEBPACK_IMPORTED_MODULE_1__.css)`\n color: ${t.textIcon.textLowemphasis};\n font-feature-settings: \'clig\' off, \'liga\' off;\n\n /* XS - Ubuntu Regular */\n font-family: ${r.base};\n font-size: ${o.t12};\n font-style: normal;\n font-weight: ${n.regular};\n line-height: ${e.lh20}; /* 166.667% */\n `\n), PH = styled_components__WEBPACK_IMPORTED_MODULE_1___default().div(\n () => (0,styled_components__WEBPACK_IMPORTED_MODULE_1__.css)`\n display: flex;\n flex-direction: column;\n /* justify-content: flex-start;\n align-items: center; */\n /* height: 100vh; */\n `\n), FH = styled_components__WEBPACK_IMPORTED_MODULE_1___default().div(\n ({\n theme: { lineHeight: e, colors: t, typography: o, fontWeight: n, fontFamily: r }\n }) => (0,styled_components__WEBPACK_IMPORTED_MODULE_1__.css)`\n color: var(--color-greyscales-grey-400, #a6a6ab);\n font-feature-settings: \'clig\' off, \'liga\' off;\n\n /* Heading/Small - Medium */\n font-family: ${r.base};\n font-size: ${o.t14};\n font-style: normal;\n font-weight: ${n.medium};\n line-height: ${e.lh20}; /* 142.857% */\n `\n), XH = styled_components__WEBPACK_IMPORTED_MODULE_1___default().span(\n ({\n theme: { lineHeight: e, colors: t, typography: o, fontWeight: n },\n $isAccordionEnabled: r\n }) => (0,styled_components__WEBPACK_IMPORTED_MODULE_1__.css)`\n font-feature-settings: \'clig\' off, \'liga\' off;\n width: Auto;\n /* Heading/Small - Medium */\n font-family: \'Ubuntu\';\n font-size: ${o.t14};\n font-style: normal;\n font-weight: ${n.medium};\n line-height: ${e.lh20}; /* 142.857% */\n color: ${r ? t.textIcon.textPrimary : t.textIcon.textDisabledOnbg};\n font-feature-settings: \'clig\' off, \'liga\' off;\n &.active {\n color: ${t.textIcon.textSecondary};\n }\n `\n), UH = styled_components__WEBPACK_IMPORTED_MODULE_1___default().div(\n ({ theme: { colors: e } }) => (0,styled_components__WEBPACK_IMPORTED_MODULE_1__.css)`\n /* width: 510px; */\n `\n);\n(styled_components__WEBPACK_IMPORTED_MODULE_1___default().div)`\n margin-right: -6px;\n margin-top: -11px;\n`;\nconst YH = styled_components__WEBPACK_IMPORTED_MODULE_1___default().div(\n ({ theme: { colors: e } }) => (0,styled_components__WEBPACK_IMPORTED_MODULE_1__.css)`\n &:hover {\n color: ${e.textIcon.textSecondary};\n }\n &.active {\n color: ${e.textIcon.textSecondary};\n }\n `\n), GH = styled_components__WEBPACK_IMPORTED_MODULE_1___default().div(\n ({ theme: { spacings: e, colors: t }, $isAccordionEnabled: o }) => (0,styled_components__WEBPACK_IMPORTED_MODULE_1__.css)`\n color: ${o ? t.textIcon.textPrimary : t.textIcon.textDisabledOnbg};\n ${V2} {\n background-color: ${o ? "" : t.textIcon.textDisabledOnbg};\n }\n display: flex;\n padding: 5px ${e.sp4};\n align-items: center;\n gap: ${e.sp8};\n ${!o && (0,styled_components__WEBPACK_IMPORTED_MODULE_1__.css)`\n ${FH}\n `}\n\n cursor: pointer;\n font-weight: bold;\n\n &:hover {\n ${o && (0,styled_components__WEBPACK_IMPORTED_MODULE_1__.css)`\n color: ${t.textIcon.textSecondary};\n `}\n\n >div .icon-system {\n ${o && (0,styled_components__WEBPACK_IMPORTED_MODULE_1__.css)`\n color: ${t.textIcon.textSecondary};\n `}\n }\n\n > span {\n ${o && (0,styled_components__WEBPACK_IMPORTED_MODULE_1__.css)`\n color: ${t.textIcon.textSecondary};\n `}\n }\n }\n\n &.active {\n ${o && (0,styled_components__WEBPACK_IMPORTED_MODULE_1__.css)`\n color: ${t.textIcon.textSecondary};\n `}\n }\n `\n), QH = styled_components__WEBPACK_IMPORTED_MODULE_1___default().div(\n ({ theme: { colors: e }, $accordionExpanded: t, $showScrollbar: o }) => (0,styled_components__WEBPACK_IMPORTED_MODULE_1__.css)`\n max-height: ${t ? o ? "204px" : "auto" : "0"};\n /* max-width: 510px; */\n transition: max-height 0.3s ease-out;\n margin-top: 10px;\n overflow-y: ${o ? "auto" : ""};\n /* remove scrollbar arrow */\n scrollbar-width: thin;\n scrollbar-color: ${e.scroll.scrollBgDefault} transparent;\n\n &::-webkit-scrollbar {\n width: 4px;\n }\n\n &::-webkit-scrollbar-thumb {\n background-color: #cccccc;\n border-radius: 5px;\n }\n\n &::-webkit-scrollbar-track {\n background-color: transparent;\n }\n `\n), ZH = styled_components__WEBPACK_IMPORTED_MODULE_1___default().div(\n ({ theme: { lineHeight: e, colors: t } }) => (0,styled_components__WEBPACK_IMPORTED_MODULE_1__.css)`\n display: flex;\n\n align-items: center;\n\n font-weight: bold;\n\n height: ${e.lh18};\n padding-left: 4px;\n width: auto;\n .icon-system {\n color: ${t.textIcon.textPrimary};\n }\n `\n), jH = styled_components__WEBPACK_IMPORTED_MODULE_1___default().hr(\n ({ theme: { colors: e } }) => (0,styled_components__WEBPACK_IMPORTED_MODULE_1__.css)`\n width: 118px;\n margin-top: 0px;\n margin-bottom: 5px;\n border: none;\n border-top: 2px solid ${e.border.borderSecondary};\n margin-left: 0px;\n `\n), KH = (styled_components__WEBPACK_IMPORTED_MODULE_1___default().div)`\n display: flex;\n align-items: center;\n gap: 5px;\n`;\nstyled_components__WEBPACK_IMPORTED_MODULE_1___default().div(\n ({ theme: { lineHeight: e, typography: t } }) => (0,styled_components__WEBPACK_IMPORTED_MODULE_1__.css)`\n width: ${t.t18};\n height: ${e.lh18};\n border-radius: 50%;\n margin-right: 5px;\n margin-left: ${t.t8};\n overflow: hidden;\n img {\n width: 100%;\n\n height: 100%;\n\n object-fit: cover;\n }\n `\n);\nconst JH = (styled_components__WEBPACK_IMPORTED_MODULE_1___default().div)`\n margin-left: 8px;\n display: flex;\n align-items: center;\n gap: 5px;\n`, _H = styled_components__WEBPACK_IMPORTED_MODULE_1___default().p(\n ({\n theme: { lineHeight: e, colors: t, fontWeight: o, typography: n, fontFamily: r }\n }) => (0,styled_components__WEBPACK_IMPORTED_MODULE_1__.css)`\n color: ${t.textIcon.textHighemphasis};\n font-feature-settings: \'clig\' off, \'liga\' off;\n\n /* Label/Small - Medium */\n font-family: ${r.base};\n font-size: ${n.t10};\n font-style: normal;\n font-weight: ${o.medium};\n line-height: ${e.lh18}; /* 180% */\n `\n), $H = styled_components__WEBPACK_IMPORTED_MODULE_1___default().div(\n ({ theme: { typography: e } }) => (0,styled_components__WEBPACK_IMPORTED_MODULE_1__.css)`\n display: flex;\n flex-direction: column;\n\n margin-top: ${e.t8};\n `\n), Mb = styled_components__WEBPACK_IMPORTED_MODULE_1___default().p(\n ({ theme: { lineHeight: e, colors: t, fontWeight: o, typography: n } }) => (0,styled_components__WEBPACK_IMPORTED_MODULE_1__.css)`\n margin: 0px;\n margin-left: 30px;\n color: ${t.textIcon.textLowemphasis};\n font-feature-settings: \'clig\' off, \'liga\' off;\n\n font-size: ${n.t12};\n font-style: normal;\n font-weight: ${o.regular};\n line-height: ${e.lh20}; /* 166.667% */\n `\n), eV = styled_components__WEBPACK_IMPORTED_MODULE_1___default()(Mb)(\n ({ theme: { colors: e, typography: t, fontWeight: o, lineHeight: n } }) => (0,styled_components__WEBPACK_IMPORTED_MODULE_1__.css)`\n color: ${e.textIcon.textLowemphasis};\n font-feature-settings: \'clig\' off, \'liga\' off;\n margin-left: 30px;\n\n font-size: ${t.t10};\n font-style: normal;\n font-weight: ${o.regular};\n line-height: ${n.lh18}; /* 180% */\n `\n), tV = styled_components__WEBPACK_IMPORTED_MODULE_1___default().p(\n ({ theme: { lineHeight: e, colors: t, fontWeight: o, typography: n } }) => (0,styled_components__WEBPACK_IMPORTED_MODULE_1__.css)`\n margin: 0;\n color: ${t.textIcon.textLowemphasis};\n font-feature-settings: \'clig\' off, \'liga\' off;\n\n /* Label/Small - Light */\n font-family: Ubuntu;\n font-size: ${n.t10};\n font-style: normal;\n font-weight: ${o.light};\n line-height: ${e.lh18}; /* 180% */\n\n margin-left: 5px;\n `\n);\nstyled_components__WEBPACK_IMPORTED_MODULE_1___default().input(() => (0,styled_components__WEBPACK_IMPORTED_MODULE_1__.css)``);\nstyled_components__WEBPACK_IMPORTED_MODULE_1___default().div(\n ({ theme: { typography: e } }) => (0,styled_components__WEBPACK_IMPORTED_MODULE_1__.css)`\n width: ${e.t12};\n height: ${e.t12};\n flex-shrink: 0;\n right: 88px;\n position: absolute;\n `\n);\nconst oV = styled_components__WEBPACK_IMPORTED_MODULE_1___default().div(\n ({ theme: { lineHeight: e, typography: t, spacings: o } }) => (0,styled_components__WEBPACK_IMPORTED_MODULE_1__.css)`\n margin-top: ${t.t10};\n height: ${e.lh32};\n display: flex;\n gap: ${o.sp8};\n align-items: center;\n position: relative;\n padding-left: ${o.sp4};\n padding-right: ${o.sp4};\n width: 100%;\n\n div .input {\n margin-left: 5px;\n }\n `\n), rV = (styled_components__WEBPACK_IMPORTED_MODULE_1___default().div)`\n label {\n display: none;\n }\n`, nV = ({ timestamp: e, edited: t, name: o }) => {\n const n = uw(e, { addSuffix: !0 });\n return /* @__PURE__ */ e1(ZH, { children: [\n t ? /* @__PURE__ */ c(Ae, { noDigit: !0, count: 1, children: /* @__PURE__ */ c(Z1, { name: "Alert", size: "xs" }) }) : /* @__PURE__ */ c(zr, { size: "xs", name: o }),\n /* @__PURE__ */ e1(JH, { children: [\n /* @__PURE__ */ c(_H, { children: o }),\n /* @__PURE__ */ c(tV, { children: n })\n ] })\n ] });\n}, iV = ({\n name: e,\n text: t,\n timestamp: o,\n edited: n\n}) => /* @__PURE__ */ e1($H, { children: [\n /* @__PURE__ */ c(KH, { children: /* @__PURE__ */ c(nV, { name: e, timestamp: o, edited: n }) }),\n /* @__PURE__ */ c("div", { children: n ? /* @__PURE__ */ c(eV, { children: t }) : /* @__PURE__ */ c(s0, { children: /* @__PURE__ */ c(Mb, { children: t }) }) })\n] }), Z_ = (e, t) => {\n const [o] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)("Insert and edit form data"), [n, r] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(o), {\n name: i,\n text: a,\n timestamp: s,\n edited: l,\n showScrollbar: p,\n isAccordionEnabled: d,\n isAccordionOpen: b,\n isReadOnly: M,\n defaultComments: u,\n isAddComment: A,\n commentSumitHandler: z,\n ...f\n } = e, [O, h] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)([]), [g, v] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(""), [L, y] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(!1), [B, X] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(!1), [F, T] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(!0);\n (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => {\n y(b);\n }, [b]);\n const [w, H] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)([]), C = () => {\n d && y(!L);\n };\n (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => {\n (u == null ? void 0 : u.length) > 0 && (O == null ? void 0 : O.length) == 0 && (u == null || u.map((I) => {\n let j = I == null ? void 0 : I.UserName, U = new Date(I == null ? void 0 : I.CreatedAt);\n O.push({\n name: j,\n id: I._id,\n timestamp: U,\n text: I == null ? void 0 : I.Comment,\n edited: !1\n });\n }));\n }, [u]);\n const q = () => {\n let R;\n g.trim() !== "" && (R = {\n name: i,\n text: g,\n timestamp: /* @__PURE__ */ new Date(),\n edited: !1\n }, h([...O, R]), v("")), z && z([...O, R]);\n }, m = (R) => {\n d && (r(R.target.value), X(!0), T(R.target.value.trim() === ""));\n }, k = (R) => {\n if (R.preventDefault(), B && n.trim() !== "") {\n const I = n, j = {\n name: i,\n text: "Edited",\n timestamp: /* @__PURE__ */ new Date(),\n edited: !0\n };\n H([\n ...w,\n { comments: n, timestamp: /* @__PURE__ */ new Date() }\n ]), h([...O, j]), r(I), X(!1);\n }\n }, x = () => {\n v("");\n }, N = (R) => {\n R.key === "Enter" && !R.shiftKey && (R.preventDefault(), k(R));\n }, V = g.trim() === "";\n return /* @__PURE__ */ e1(PH, { children: [\n M && /* @__PURE__ */ e1(NH, { onSubmit: k, children: [\n /* @__PURE__ */ e1(DH, { children: [\n /* @__PURE__ */ c(HH, { children: "Text label" }),\n /* @__PURE__ */ c(VH, { children: "Optional" })\n ] }),\n /* @__PURE__ */ c(\n IH,\n {\n placeholder: "Insert text here..",\n value: n,\n onChange: m,\n onKeyDown: N,\n disabled: !d\n }\n )\n ] }),\n /* @__PURE__ */ e1(UH, { children: [\n /* @__PURE__ */ e1(\n GH,\n {\n $isAccordionEnabled: d,\n onClick: C,\n className: L ? "active" : "",\n children: [\n /* @__PURE__ */ c(Ae, { noDigit: !0, count: 2, children: /* @__PURE__ */ c(Z1, { name: "Monologue", size: "xs" }) }),\n /* @__PURE__ */ c(\n XH,\n {\n $isAccordionEnabled: d,\n className: L ? "active" : "",\n children: "Comments"\n }\n ),\n /* @__PURE__ */ c(\n YH,\n {\n className: L ? "active" : "",\n children: /* @__PURE__ */ c(\n TH,\n {\n $accordionExpanded: L,\n $isAccordionEnabled: d,\n children: /* @__PURE__ */ c(\n Z1,\n {\n name: L ? "ChevronUp" : "ChevronDown",\n size: "xxxs"\n }\n )\n }\n )\n }\n )\n ]\n }\n ),\n L && /* @__PURE__ */ c(jH, {}),\n /* @__PURE__ */ c(\n QH,\n {\n $showScrollbar: p,\n $accordionExpanded: L,\n children: L && /* @__PURE__ */ c("div", { style: { height: "100%", overflowY: "auto" }, children: O.map((R, I) => /* @__PURE__ */ c(\n iV,\n {\n name: R.name,\n text: R.text,\n timestamp: R.timestamp,\n edited: R.edited\n },\n I\n )) })\n }\n ),\n L && !M && A && /* @__PURE__ */ e1(oV, { children: [\n /* @__PURE__ */ c(zr, { size: "xs", name: i }),\n /* @__PURE__ */ c(rV, { children: /* @__PURE__ */ c(\n Y2,\n {\n handleClearFn: x,\n size: 402,\n type: "text",\n placeholder: "Enter your comment...",\n value: g,\n onChange: (R) => {\n v(R.target.value), T(R.target.value.trim() === "");\n },\n disabled: !d\n }\n ) }),\n /* @__PURE__ */ c(\n G2,\n {\n buttonType: "tertiary",\n onClick: q,\n name: "Send",\n size: "sm",\n disabled: V\n }\n )\n ] })\n ] })\n ] });\n}, aV = (styled_components__WEBPACK_IMPORTED_MODULE_1___default().div)`\n position: absolute;\n top: ${(e) => e != null && e.y ? e == null ? void 0 : e.y : 0}px;\n left: ${(e) => e != null && e.x ? e == null ? void 0 : e.x : 0}px;\n z-index: 1;\n max-width: 208px;\n width: 208px;\n`, sV = (styled_components__WEBPACK_IMPORTED_MODULE_1___default().div)``, cV = (styled_components__WEBPACK_IMPORTED_MODULE_1___default().div)``;\nstyled_components__WEBPACK_IMPORTED_MODULE_1___default().div(\n ({\n theme: { colors: e, fontFamily: t, typography: o, lineHeight: n, fontWeight: r, spacings: i }\n }) => (0,styled_components__WEBPACK_IMPORTED_MODULE_1__.css)`\n width: 500px;\n height: 400px;\n background: ${e.fieldBlue};\n padding: ${i.sp12};\n font-family: ${t.base};\n font-size: ${o.t16};\n font-weight: ${r.regular};\n line-height: ${n.lh18};\n `\n);\nconst lV = () => {\n const [e, t] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(!1), [o, n] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)({\n x: 0,\n y: 0\n });\n return (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => {\n const r = () => t(!1);\n return document.addEventListener("click", r), () => {\n document.removeEventListener("click", r);\n };\n }, []), {\n clicked: e,\n setClicked: t,\n points: o,\n setPoints: n\n };\n}, j_ = (e) => {\n const { clicked: t, setClicked: o, points: n, setPoints: r } = lV(), { children: i, menu: a, selectedOptions: s } = e, l = (p) => {\n s && s(p);\n };\n return /* @__PURE__ */ e1(sV, { children: [\n i && /* @__PURE__ */ c(\n cV,\n {\n onContextMenu: (p) => {\n p.preventDefault(), o(!0), r({\n x: p.pageX,\n y: p.pageY\n });\n },\n children: i\n }\n ),\n t && /* @__PURE__ */ c(aV, { x: n.x, y: n.y, children: /* @__PURE__ */ c(\n dt,\n {\n data: a,\n groupByDivider: !0,\n maxheight: 310,\n selectedOptions: l\n }\n ) })\n ] });\n};\n/**\n * table-core\n *\n * Copyright (c) TanStack\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE.md file in the root directory of this source tree.\n *\n * @license MIT\n */\nfunction xt(e, t) {\n return typeof e == "function" ? e(t) : e;\n}\nfunction oe(e, t) {\n return (o) => {\n t.setState((n) => ({\n ...n,\n [e]: xt(o, n[e])\n }));\n };\n}\nfunction ri(e) {\n return e instanceof Function;\n}\nfunction pV(e) {\n return Array.isArray(e) && e.every((t) => typeof t == "number");\n}\nfunction dV(e, t) {\n const o = [], n = (r) => {\n r.forEach((i) => {\n o.push(i);\n const a = t(i);\n a != null && a.length && n(a);\n });\n };\n return n(e), o;\n}\nfunction M0(e, t, o) {\n let n = [], r;\n return (i) => {\n let a;\n o.key && o.debug && (a = Date.now());\n const s = e(i);\n if (!(s.length !== n.length || s.some((d, b) => n[b] !== d)))\n return r;\n n = s;\n let p;\n if (o.key && o.debug && (p = Date.now()), r = t(...s), o == null || o.onChange == null || o.onChange(r), o.key && o.debug && o != null && o.debug()) {\n const d = Math.round((Date.now() - a) * 100) / 100, b = Math.round((Date.now() - p) * 100) / 100, M = b / 16, u = (A, z) => {\n for (A = String(A); A.length < z; )\n A = " " + A;\n return A;\n };\n console.info(`%c⏱ ${u(b, 5)} /${u(d, 5)} ms`, `\n font-size: .6rem;\n font-weight: bold;\n color: hsl(${Math.max(0, Math.min(120 - 120 * M, 120))}deg 100% 31%);`, o == null ? void 0 : o.key);\n }\n return r;\n };\n}\nfunction A0(e, t, o, n) {\n return {\n debug: () => {\n var r;\n return (r = e == null ? void 0 : e.debugAll) != null ? r : e[t];\n },\n key: false && 0,\n onChange: n\n };\n}\nfunction bV(e, t, o, n) {\n const r = () => {\n var a;\n return (a = i.getValue()) != null ? a : e.options.renderFallbackValue;\n }, i = {\n id: `${t.id}_${o.id}`,\n row: t,\n column: o,\n getValue: () => t.getValue(n),\n renderValue: r,\n getContext: M0(() => [e, o, t, i], (a, s, l, p) => ({\n table: a,\n column: s,\n row: l,\n cell: p,\n getValue: p.getValue,\n renderValue: p.renderValue\n }), A0(e.options, "debugCells", "cell.getContext"))\n };\n return e._features.forEach((a) => {\n a.createCell == null || a.createCell(i, o, t, e);\n }, {}), i;\n}\nfunction MV(e, t, o, n) {\n var r, i;\n const s = {\n ...e._getDefaultColumnDef(),\n ...t\n }, l = s.accessorKey;\n let p = (r = (i = s.id) != null ? i : l ? typeof String.prototype.replaceAll == "function" ? l.replaceAll(".", "_") : l.replace(/\\./g, "_") : void 0) != null ? r : typeof s.header == "string" ? s.header : void 0, d;\n if (s.accessorFn ? d = s.accessorFn : l && (l.includes(".") ? d = (M) => {\n let u = M;\n for (const z of l.split(".")) {\n var A;\n u = (A = u) == null ? void 0 : A[z], false && 0;\n }\n return u;\n } : d = (M) => M[s.accessorKey]), !p)\n throw false ? 0 : new Error();\n let b = {\n id: `${String(p)}`,\n accessorFn: d,\n parent: n,\n depth: o,\n columnDef: s,\n columns: [],\n getFlatColumns: M0(() => [!0], () => {\n var M;\n return [b, ...(M = b.columns) == null ? void 0 : M.flatMap((u) => u.getFlatColumns())];\n }, A0(e.options, "debugColumns", "column.getFlatColumns")),\n getLeafColumns: M0(() => [e._getOrderColumnsFn()], (M) => {\n var u;\n if ((u = b.columns) != null && u.length) {\n let A = b.columns.flatMap((z) => z.getLeafColumns());\n return M(A);\n }\n return [b];\n }, A0(e.options, "debugColumns", "column.getLeafColumns"))\n };\n for (const M of e._features)\n M.createColumn == null || M.createColumn(b, e);\n return b;\n}\nconst L2 = "debugHeaders";\nfunction sc(e, t, o) {\n var n;\n let i = {\n id: (n = o.id) != null ? n : t.id,\n column: t,\n index: o.index,\n isPlaceholder: !!o.isPlaceholder,\n placeholderId: o.placeholderId,\n depth: o.depth,\n subHeaders: [],\n colSpan: 0,\n rowSpan: 0,\n headerGroup: null,\n getLeafHeaders: () => {\n const a = [], s = (l) => {\n l.subHeaders && l.subHeaders.length && l.subHeaders.map(s), a.push(l);\n };\n return s(i), a;\n },\n getContext: () => ({\n table: e,\n header: i,\n column: t\n })\n };\n return e._features.forEach((a) => {\n a.createHeader == null || a.createHeader(i, e);\n }), i;\n}\nconst AV = {\n createTable: (e) => {\n e.getHeaderGroups = M0(() => [e.getAllColumns(), e.getVisibleLeafColumns(), e.getState().columnPinning.left, e.getState().columnPinning.right], (t, o, n, r) => {\n var i, a;\n const s = (i = n == null ? void 0 : n.map((b) => o.find((M) => M.id === b)).filter(Boolean)) != null ? i : [], l = (a = r == null ? void 0 : r.map((b) => o.find((M) => M.id === b)).filter(Boolean)) != null ? a : [], p = o.filter((b) => !(n != null && n.includes(b.id)) && !(r != null && r.includes(b.id)));\n return qn(t, [...s, ...p, ...l], e);\n }, A0(e.options, L2, "getHeaderGroups")), e.getCenterHeaderGroups = M0(() => [e.getAllColumns(), e.getVisibleLeafColumns(), e.getState().columnPinning.left, e.getState().columnPinning.right], (t, o, n, r) => (o = o.filter((i) => !(n != null && n.includes(i.id)) && !(r != null && r.includes(i.id))), qn(t, o, e, "center")), A0(e.options, L2, "getCenterHeaderGroups")), e.getLeftHeaderGroups = M0(() => [e.getAllColumns(), e.getVisibleLeafColumns(), e.getState().columnPinning.left], (t, o, n) => {\n var r;\n const i = (r = n == null ? void 0 : n.map((a) => o.find((s) => s.id === a)).filter(Boolean)) != null ? r : [];\n return qn(t, i, e, "left");\n }, A0(e.options, L2, "getLeftHeaderGroups")), e.getRightHeaderGroups = M0(() => [e.getAllColumns(), e.getVisibleLeafColumns(), e.getState().columnPinning.right], (t, o, n) => {\n var r;\n const i = (r = n == null ? void 0 : n.map((a) => o.find((s) => s.id === a)).filter(Boolean)) != null ? r : [];\n return qn(t, i, e, "right");\n }, A0(e.options, L2, "getRightHeaderGroups")), e.getFooterGroups = M0(() => [e.getHeaderGroups()], (t) => [...t].reverse(), A0(e.options, L2, "getFooterGroups")), e.getLeftFooterGroups = M0(() => [e.getLeftHeaderGroups()], (t) => [...t].reverse(), A0(e.options, L2, "getLeftFooterGroups")), e.getCenterFooterGroups = M0(() => [e.getCenterHeaderGroups()], (t) => [...t].reverse(), A0(e.options, L2, "getCenterFooterGroups")), e.getRightFooterGroups = M0(() => [e.getRightHeaderGroups()], (t) => [...t].reverse(), A0(e.options, L2, "getRightFooterGroups")), e.getFlatHeaders = M0(() => [e.getHeaderGroups()], (t) => t.map((o) => o.headers).flat(), A0(e.options, L2, "getFlatHeaders")), e.getLeftFlatHeaders = M0(() => [e.getLeftHeaderGroups()], (t) => t.map((o) => o.headers).flat(), A0(e.options, L2, "getLeftFlatHeaders")), e.getCenterFlatHeaders = M0(() => [e.getCenterHeaderGroups()], (t) => t.map((o) => o.headers).flat(), A0(e.options, L2, "getCenterFlatHeaders")), e.getRightFlatHeaders = M0(() => [e.getRightHeaderGroups()], (t) => t.map((o) => o.headers).flat(), A0(e.options, L2, "getRightFlatHeaders")), e.getCenterLeafHeaders = M0(() => [e.getCenterFlatHeaders()], (t) => t.filter((o) => {\n var n;\n return !((n = o.subHeaders) != null && n.length);\n }), A0(e.options, L2, "getCenterLeafHeaders")), e.getLeftLeafHeaders = M0(() => [e.getLeftFlatHeaders()], (t) => t.filter((o) => {\n var n;\n return !((n = o.subHeaders) != null && n.length);\n }), A0(e.options, L2, "getLeftLeafHeaders")), e.getRightLeafHeaders = M0(() => [e.getRightFlatHeaders()], (t) => t.filter((o) => {\n var n;\n return !((n = o.subHeaders) != null && n.length);\n }), A0(e.options, L2, "getRightLeafHeaders")), e.getLeafHeaders = M0(() => [e.getLeftHeaderGroups(), e.getCenterHeaderGroups(), e.getRightHeaderGroups()], (t, o, n) => {\n var r, i, a, s, l, p;\n return [...(r = (i = t[0]) == null ? void 0 : i.headers) != null ? r : [], ...(a = (s = o[0]) == null ? void 0 : s.headers) != null ? a : [], ...(l = (p = n[0]) == null ? void 0 : p.headers) != null ? l : []].map((d) => d.getLeafHeaders()).flat();\n }, A0(e.options, L2, "getLeafHeaders"));\n }\n};\nfunction qn(e, t, o, n) {\n var r, i;\n let a = 0;\n const s = function(M, u) {\n u === void 0 && (u = 1), a = Math.max(a, u), M.filter((A) => A.getIsVisible()).forEach((A) => {\n var z;\n (z = A.columns) != null && z.length && s(A.columns, u + 1);\n }, 0);\n };\n s(e);\n let l = [];\n const p = (M, u) => {\n const A = {\n depth: u,\n id: [n, `${u}`].filter(Boolean).join("_"),\n headers: []\n }, z = [];\n M.forEach((f) => {\n const O = [...z].reverse()[0], h = f.column.depth === A.depth;\n let g, v = !1;\n if (h && f.column.parent ? g = f.column.parent : (g = f.column, v = !0), O && (O == null ? void 0 : O.column) === g)\n O.subHeaders.push(f);\n else {\n const L = sc(o, g, {\n id: [n, u, g.id, f == null ? void 0 : f.id].filter(Boolean).join("_"),\n isPlaceholder: v,\n placeholderId: v ? `${z.filter((y) => y.column === g).length}` : void 0,\n depth: u,\n index: z.length\n });\n L.subHeaders.push(f), z.push(L);\n }\n A.headers.push(f), f.headerGroup = A;\n }), l.push(A), u > 0 && p(z, u - 1);\n }, d = t.map((M, u) => sc(o, M, {\n depth: a,\n index: u\n }));\n p(d, a - 1), l.reverse();\n const b = (M) => M.filter((A) => A.column.getIsVisible()).map((A) => {\n let z = 0, f = 0, O = [0];\n A.subHeaders && A.subHeaders.length ? (O = [], b(A.subHeaders).forEach((g) => {\n let {\n colSpan: v,\n rowSpan: L\n } = g;\n z += v, O.push(L);\n })) : z = 1;\n const h = Math.min(...O);\n return f = f + h, A.colSpan = z, A.rowSpan = f, {\n colSpan: z,\n rowSpan: f\n };\n });\n return b((r = (i = l[0]) == null ? void 0 : i.headers) != null ? r : []), l;\n}\nconst Y6 = (e, t, o, n, r, i, a) => {\n let s = {\n id: t,\n index: n,\n original: o,\n depth: r,\n parentId: a,\n _valuesCache: {},\n _uniqueValuesCache: {},\n getValue: (l) => {\n if (s._valuesCache.hasOwnProperty(l))\n return s._valuesCache[l];\n const p = e.getColumn(l);\n if (p != null && p.accessorFn)\n return s._valuesCache[l] = p.accessorFn(s.original, n), s._valuesCache[l];\n },\n getUniqueValues: (l) => {\n if (s._uniqueValuesCache.hasOwnProperty(l))\n return s._uniqueValuesCache[l];\n const p = e.getColumn(l);\n if (p != null && p.accessorFn)\n return p.columnDef.getUniqueValues ? (s._uniqueValuesCache[l] = p.columnDef.getUniqueValues(s.original, n), s._uniqueValuesCache[l]) : (s._uniqueValuesCache[l] = [s.getValue(l)], s._uniqueValuesCache[l]);\n },\n renderValue: (l) => {\n var p;\n return (p = s.getValue(l)) != null ? p : e.options.renderFallbackValue;\n },\n subRows: i ?? [],\n getLeafRows: () => dV(s.subRows, (l) => l.subRows),\n getParentRow: () => s.parentId ? e.getRow(s.parentId, !0) : void 0,\n getParentRows: () => {\n let l = [], p = s;\n for (; ; ) {\n const d = p.getParentRow();\n if (!d)\n break;\n l.push(d), p = d;\n }\n return l.reverse();\n },\n getAllCells: M0(() => [e.getAllLeafColumns()], (l) => l.map((p) => bV(e, s, p, p.id)), A0(e.options, "debugRows", "getAllCells")),\n _getAllCellsByColumnId: M0(() => [s.getAllCells()], (l) => l.reduce((p, d) => (p[d.column.id] = d, p), {}), A0(e.options, "debugRows", "getAllCellsByColumnId"))\n };\n for (let l = 0; l < e._features.length; l++) {\n const p = e._features[l];\n p == null || p.createRow == null || p.createRow(s, e);\n }\n return s;\n}, uV = {\n createColumn: (e, t) => {\n e._getFacetedRowModel = t.options.getFacetedRowModel && t.options.getFacetedRowModel(t, e.id), e.getFacetedRowModel = () => e._getFacetedRowModel ? e._getFacetedRowModel() : t.getPreFilteredRowModel(), e._getFacetedUniqueValues = t.options.getFacetedUniqueValues && t.options.getFacetedUniqueValues(t, e.id), e.getFacetedUniqueValues = () => e._getFacetedUniqueValues ? e._getFacetedUniqueValues() : /* @__PURE__ */ new Map(), e._getFacetedMinMaxValues = t.options.getFacetedMinMaxValues && t.options.getFacetedMinMaxValues(t, e.id), e.getFacetedMinMaxValues = () => {\n if (e._getFacetedMinMaxValues)\n return e._getFacetedMinMaxValues();\n };\n }\n}, Ab = (e, t, o) => {\n var n, r;\n const i = o == null || (n = o.toString()) == null ? void 0 : n.toLowerCase();\n return !!(!((r = e.getValue(t)) == null || (r = r.toString()) == null || (r = r.toLowerCase()) == null) && r.includes(i));\n};\nAb.autoRemove = (e) => Le(e);\nconst ub = (e, t, o) => {\n var n;\n return !!(!((n = e.getValue(t)) == null || (n = n.toString()) == null) && n.includes(o));\n};\nub.autoRemove = (e) => Le(e);\nconst zb = (e, t, o) => {\n var n;\n return ((n = e.getValue(t)) == null || (n = n.toString()) == null ? void 0 : n.toLowerCase()) === (o == null ? void 0 : o.toLowerCase());\n};\nzb.autoRemove = (e) => Le(e);\nconst hb = (e, t, o) => {\n var n;\n return (n = e.getValue(t)) == null ? void 0 : n.includes(o);\n};\nhb.autoRemove = (e) => Le(e) || !(e != null && e.length);\nconst Ob = (e, t, o) => !o.some((n) => {\n var r;\n return !((r = e.getValue(t)) != null && r.includes(n));\n});\nOb.autoRemove = (e) => Le(e) || !(e != null && e.length);\nconst fb = (e, t, o) => o.some((n) => {\n var r;\n return (r = e.getValue(t)) == null ? void 0 : r.includes(n);\n});\nfb.autoRemove = (e) => Le(e) || !(e != null && e.length);\nconst gb = (e, t, o) => e.getValue(t) === o;\ngb.autoRemove = (e) => Le(e);\nconst Cb = (e, t, o) => e.getValue(t) == o;\nCb.autoRemove = (e) => Le(e);\nconst G6 = (e, t, o) => {\n let [n, r] = o;\n const i = e.getValue(t);\n return i >= n && i <= r;\n};\nG6.resolveFilterValue = (e) => {\n let [t, o] = e, n = typeof t != "number" ? parseFloat(t) : t, r = typeof o != "number" ? parseFloat(o) : o, i = t === null || Number.isNaN(n) ? -1 / 0 : n, a = o === null || Number.isNaN(r) ? 1 / 0 : r;\n if (i > a) {\n const s = i;\n i = a, a = s;\n }\n return [i, a];\n};\nG6.autoRemove = (e) => Le(e) || Le(e[0]) && Le(e[1]);\nconst _e = {\n includesString: Ab,\n includesStringSensitive: ub,\n equalsString: zb,\n arrIncludes: hb,\n arrIncludesAll: Ob,\n arrIncludesSome: fb,\n equals: gb,\n weakEquals: Cb,\n inNumberRange: G6\n};\nfunction Le(e) {\n return e == null || e === "";\n}\nconst zV = {\n getDefaultColumnDef: () => ({\n filterFn: "auto"\n }),\n getInitialState: (e) => ({\n columnFilters: [],\n ...e\n }),\n getDefaultOptions: (e) => ({\n onColumnFiltersChange: oe("columnFilters", e),\n filterFromLeafRows: !1,\n maxLeafRowFilterDepth: 100\n }),\n createColumn: (e, t) => {\n e.getAutoFilterFn = () => {\n const o = t.getCoreRowModel().flatRows[0], n = o == null ? void 0 : o.getValue(e.id);\n return typeof n == "string" ? _e.includesString : typeof n == "number" ? _e.inNumberRange : typeof n == "boolean" || n !== null && typeof n == "object" ? _e.equals : Array.isArray(n) ? _e.arrIncludes : _e.weakEquals;\n }, e.getFilterFn = () => {\n var o, n;\n return ri(e.columnDef.filterFn) ? e.columnDef.filterFn : e.columnDef.filterFn === "auto" ? e.getAutoFilterFn() : (\n // @ts-ignore\n (o = (n = t.options.filterFns) == null ? void 0 : n[e.columnDef.filterFn]) != null ? o : _e[e.columnDef.filterFn]\n );\n }, e.getCanFilter = () => {\n var o, n, r;\n return ((o = e.columnDef.enableColumnFilter) != null ? o : !0) && ((n = t.options.enableColumnFilters) != null ? n : !0) && ((r = t.options.enableFilters) != null ? r : !0) && !!e.accessorFn;\n }, e.getIsFiltered = () => e.getFilterIndex() > -1, e.getFilterValue = () => {\n var o;\n return (o = t.getState().columnFilters) == null || (o = o.find((n) => n.id === e.id)) == null ? void 0 : o.value;\n }, e.getFilterIndex = () => {\n var o, n;\n return (o = (n = t.getState().columnFilters) == null ? void 0 : n.findIndex((r) => r.id === e.id)) != null ? o : -1;\n }, e.setFilterValue = (o) => {\n t.setColumnFilters((n) => {\n const r = e.getFilterFn(), i = n == null ? void 0 : n.find((d) => d.id === e.id), a = xt(o, i ? i.value : void 0);\n if (cc(r, a, e)) {\n var s;\n return (s = n == null ? void 0 : n.filter((d) => d.id !== e.id)) != null ? s : [];\n }\n const l = {\n id: e.id,\n value: a\n };\n if (i) {\n var p;\n return (p = n == null ? void 0 : n.map((d) => d.id === e.id ? l : d)) != null ? p : [];\n }\n return n != null && n.length ? [...n, l] : [l];\n });\n };\n },\n createRow: (e, t) => {\n e.columnFilters = {}, e.columnFiltersMeta = {};\n },\n createTable: (e) => {\n e.setColumnFilters = (t) => {\n const o = e.getAllLeafColumns(), n = (r) => {\n var i;\n return (i = xt(t, r)) == null ? void 0 : i.filter((a) => {\n const s = o.find((l) => l.id === a.id);\n if (s) {\n const l = s.getFilterFn();\n if (cc(l, a.value, s))\n return !1;\n }\n return !0;\n });\n };\n e.options.onColumnFiltersChange == null || e.options.onColumnFiltersChange(n);\n }, e.resetColumnFilters = (t) => {\n var o, n;\n e.setColumnFilters(t ? [] : (o = (n = e.initialState) == null ? void 0 : n.columnFilters) != null ? o : []);\n }, e.getPreFilteredRowModel = () => e.getCoreRowModel(), e.getFilteredRowModel = () => (!e._getFilteredRowModel && e.options.getFilteredRowModel && (e._getFilteredRowModel = e.options.getFilteredRowModel(e)), e.options.manualFiltering || !e._getFilteredRowModel ? e.getPreFilteredRowModel() : e._getFilteredRowModel());\n }\n};\nfunction cc(e, t, o) {\n return (e && e.autoRemove ? e.autoRemove(t, o) : !1) || typeof t > "u" || typeof t == "string" && !t;\n}\nconst hV = (e, t, o) => o.reduce((n, r) => {\n const i = r.getValue(e);\n return n + (typeof i == "number" ? i : 0);\n}, 0), OV = (e, t, o) => {\n let n;\n return o.forEach((r) => {\n const i = r.getValue(e);\n i != null && (n > i || n === void 0 && i >= i) && (n = i);\n }), n;\n}, fV = (e, t, o) => {\n let n;\n return o.forEach((r) => {\n const i = r.getValue(e);\n i != null && (n < i || n === void 0 && i >= i) && (n = i);\n }), n;\n}, gV = (e, t, o) => {\n let n, r;\n return o.forEach((i) => {\n const a = i.getValue(e);\n a != null && (n === void 0 ? a >= a && (n = r = a) : (n > a && (n = a), r < a && (r = a)));\n }), [n, r];\n}, CV = (e, t) => {\n let o = 0, n = 0;\n if (t.forEach((r) => {\n let i = r.getValue(e);\n i != null && (i = +i) >= i && (++o, n += i);\n }), o)\n return n / o;\n}, mV = (e, t) => {\n if (!t.length)\n return;\n const o = t.map((i) => i.getValue(e));\n if (!pV(o))\n return;\n if (o.length === 1)\n return o[0];\n const n = Math.floor(o.length / 2), r = o.sort((i, a) => i - a);\n return o.length % 2 !== 0 ? r[n] : (r[n - 1] + r[n]) / 2;\n}, LV = (e, t) => Array.from(new Set(t.map((o) => o.getValue(e))).values()), vV = (e, t) => new Set(t.map((o) => o.getValue(e))).size, qV = (e, t) => t.length, da = {\n sum: hV,\n min: OV,\n max: fV,\n extent: gV,\n mean: CV,\n median: mV,\n unique: LV,\n uniqueCount: vV,\n count: qV\n}, yV = {\n getDefaultColumnDef: () => ({\n aggregatedCell: (e) => {\n var t, o;\n return (t = (o = e.getValue()) == null || o.toString == null ? void 0 : o.toString()) != null ? t : null;\n },\n aggregationFn: "auto"\n }),\n getInitialState: (e) => ({\n grouping: [],\n ...e\n }),\n getDefaultOptions: (e) => ({\n onGroupingChange: oe("grouping", e),\n groupedColumnMode: "reorder"\n }),\n createColumn: (e, t) => {\n e.toggleGrouping = () => {\n t.setGrouping((o) => o != null && o.includes(e.id) ? o.filter((n) => n !== e.id) : [...o ?? [], e.id]);\n }, e.getCanGroup = () => {\n var o, n;\n return ((o = e.columnDef.enableGrouping) != null ? o : !0) && ((n = t.options.enableGrouping) != null ? n : !0) && (!!e.accessorFn || !!e.columnDef.getGroupingValue);\n }, e.getIsGrouped = () => {\n var o;\n return (o = t.getState().grouping) == null ? void 0 : o.includes(e.id);\n }, e.getGroupedIndex = () => {\n var o;\n return (o = t.getState().grouping) == null ? void 0 : o.indexOf(e.id);\n }, e.getToggleGroupingHandler = () => {\n const o = e.getCanGroup();\n return () => {\n o && e.toggleGrouping();\n };\n }, e.getAutoAggregationFn = () => {\n const o = t.getCoreRowModel().flatRows[0], n = o == null ? void 0 : o.getValue(e.id);\n if (typeof n == "number")\n return da.sum;\n if (Object.prototype.toString.call(n) === "[object Date]")\n return da.extent;\n }, e.getAggregationFn = () => {\n var o, n;\n if (!e)\n throw new Error();\n return ri(e.columnDef.aggregationFn) ? e.columnDef.aggregationFn : e.columnDef.aggregationFn === "auto" ? e.getAutoAggregationFn() : (o = (n = t.options.aggregationFns) == null ? void 0 : n[e.columnDef.aggregationFn]) != null ? o : da[e.columnDef.aggregationFn];\n };\n },\n createTable: (e) => {\n e.setGrouping = (t) => e.options.onGroupingChange == null ? void 0 : e.options.onGroupingChange(t), e.resetGrouping = (t) => {\n var o, n;\n e.setGrouping(t ? [] : (o = (n = e.initialState) == null ? void 0 : n.grouping) != null ? o : []);\n }, e.getPreGroupedRowModel = () => e.getFilteredRowModel(), e.getGroupedRowModel = () => (!e._getGroupedRowModel && e.options.getGroupedRowModel && (e._getGroupedRowModel = e.options.getGroupedRowModel(e)), e.options.manualGrouping || !e._getGroupedRowModel ? e.getPreGroupedRowModel() : e._getGroupedRowModel());\n },\n createRow: (e, t) => {\n e.getIsGrouped = () => !!e.groupingColumnId, e.getGroupingValue = (o) => {\n if (e._groupingValuesCache.hasOwnProperty(o))\n return e._groupingValuesCache[o];\n const n = t.getColumn(o);\n return n != null && n.columnDef.getGroupingValue ? (e._groupingValuesCache[o] = n.columnDef.getGroupingValue(e.original), e._groupingValuesCache[o]) : e.getValue(o);\n }, e._groupingValuesCache = {};\n },\n createCell: (e, t, o, n) => {\n e.getIsGrouped = () => t.getIsGrouped() && t.id === o.groupingColumnId, e.getIsPlaceholder = () => !e.getIsGrouped() && t.getIsGrouped(), e.getIsAggregated = () => {\n var r;\n return !e.getIsGrouped() && !e.getIsPlaceholder() && !!((r = o.subRows) != null && r.length);\n };\n }\n};\nfunction wV(e, t, o) {\n if (!(t != null && t.length) || !o)\n return e;\n const n = e.filter((i) => !t.includes(i.id));\n return o === "remove" ? n : [...t.map((i) => e.find((a) => a.id === i)).filter(Boolean), ...n];\n}\nconst xV = {\n getInitialState: (e) => ({\n columnOrder: [],\n ...e\n }),\n getDefaultOptions: (e) => ({\n onColumnOrderChange: oe("columnOrder", e)\n }),\n createColumn: (e, t) => {\n e.getIndex = M0((o) => [$o(t, o)], (o) => o.findIndex((n) => n.id === e.id), A0(t.options, "debugColumns", "getIndex")), e.getIsFirstColumn = (o) => {\n var n;\n return ((n = $o(t, o)[0]) == null ? void 0 : n.id) === e.id;\n }, e.getIsLastColumn = (o) => {\n var n;\n const r = $o(t, o);\n return ((n = r[r.length - 1]) == null ? void 0 : n.id) === e.id;\n };\n },\n createTable: (e) => {\n e.setColumnOrder = (t) => e.options.onColumnOrderChange == null ? void 0 : e.options.onColumnOrderChange(t), e.resetColumnOrder = (t) => {\n var o;\n e.setColumnOrder(t ? [] : (o = e.initialState.columnOrder) != null ? o : []);\n }, e._getOrderColumnsFn = M0(() => [e.getState().columnOrder, e.getState().grouping, e.options.groupedColumnMode], (t, o, n) => (r) => {\n let i = [];\n if (!(t != null && t.length))\n i = r;\n else {\n const a = [...t], s = [...r];\n for (; s.length && a.length; ) {\n const l = a.shift(), p = s.findIndex((d) => d.id === l);\n p > -1 && i.push(s.splice(p, 1)[0]);\n }\n i = [...i, ...s];\n }\n return wV(i, o, n);\n }, A0(e.options, "debugTable", "_getOrderColumnsFn"));\n }\n}, ba = () => ({\n left: [],\n right: []\n}), WV = {\n getInitialState: (e) => ({\n columnPinning: ba(),\n ...e\n }),\n getDefaultOptions: (e) => ({\n onColumnPinningChange: oe("columnPinning", e)\n }),\n createColumn: (e, t) => {\n e.pin = (o) => {\n const n = e.getLeafColumns().map((r) => r.id).filter(Boolean);\n t.setColumnPinning((r) => {\n var i, a;\n if (o === "right") {\n var s, l;\n return {\n left: ((s = r == null ? void 0 : r.left) != null ? s : []).filter((b) => !(n != null && n.includes(b))),\n right: [...((l = r == null ? void 0 : r.right) != null ? l : []).filter((b) => !(n != null && n.includes(b))), ...n]\n };\n }\n if (o === "left") {\n var p, d;\n return {\n left: [...((p = r == null ? void 0 : r.left) != null ? p : []).filter((b) => !(n != null && n.includes(b))), ...n],\n right: ((d = r == null ? void 0 : r.right) != null ? d : []).filter((b) => !(n != null && n.includes(b)))\n };\n }\n return {\n left: ((i = r == null ? void 0 : r.left) != null ? i : []).filter((b) => !(n != null && n.includes(b))),\n right: ((a = r == null ? void 0 : r.right) != null ? a : []).filter((b) => !(n != null && n.includes(b)))\n };\n });\n }, e.getCanPin = () => e.getLeafColumns().some((n) => {\n var r, i, a;\n return ((r = n.columnDef.enablePinning) != null ? r : !0) && ((i = (a = t.options.enableColumnPinning) != null ? a : t.options.enablePinning) != null ? i : !0);\n }), e.getIsPinned = () => {\n const o = e.getLeafColumns().map((s) => s.id), {\n left: n,\n right: r\n } = t.getState().columnPinning, i = o.some((s) => n == null ? void 0 : n.includes(s)), a = o.some((s) => r == null ? void 0 : r.includes(s));\n return i ? "left" : a ? "right" : !1;\n }, e.getPinnedIndex = () => {\n var o, n;\n const r = e.getIsPinned();\n return r ? (o = (n = t.getState().columnPinning) == null || (n = n[r]) == null ? void 0 : n.indexOf(e.id)) != null ? o : -1 : 0;\n };\n },\n createRow: (e, t) => {\n e.getCenterVisibleCells = M0(() => [e._getAllVisibleCells(), t.getState().columnPinning.left, t.getState().columnPinning.right], (o, n, r) => {\n const i = [...n ?? [], ...r ?? []];\n return o.filter((a) => !i.includes(a.column.id));\n }, A0(t.options, "debugRows", "getCenterVisibleCells")), e.getLeftVisibleCells = M0(() => [e._getAllVisibleCells(), t.getState().columnPinning.left], (o, n) => (n ?? []).map((i) => o.find((a) => a.column.id === i)).filter(Boolean).map((i) => ({\n ...i,\n position: "left"\n })), A0(t.options, "debugRows", "getLeftVisibleCells")), e.getRightVisibleCells = M0(() => [e._getAllVisibleCells(), t.getState().columnPinning.right], (o, n) => (n ?? []).map((i) => o.find((a) => a.column.id === i)).filter(Boolean).map((i) => ({\n ...i,\n position: "right"\n })), A0(t.options, "debugRows", "getRightVisibleCells"));\n },\n createTable: (e) => {\n e.setColumnPinning = (t) => e.options.onColumnPinningChange == null ? void 0 : e.options.onColumnPinningChange(t), e.resetColumnPinning = (t) => {\n var o, n;\n return e.setColumnPinning(t ? ba() : (o = (n = e.initialState) == null ? void 0 : n.columnPinning) != null ? o : ba());\n }, e.getIsSomeColumnsPinned = (t) => {\n var o;\n const n = e.getState().columnPinning;\n if (!t) {\n var r, i;\n return !!((r = n.left) != null && r.length || (i = n.right) != null && i.length);\n }\n return !!((o = n[t]) != null && o.length);\n }, e.getLeftLeafColumns = M0(() => [e.getAllLeafColumns(), e.getState().columnPinning.left], (t, o) => (o ?? []).map((n) => t.find((r) => r.id === n)).filter(Boolean), A0(e.options, "debugColumns", "getLeftLeafColumns")), e.getRightLeafColumns = M0(() => [e.getAllLeafColumns(), e.getState().columnPinning.right], (t, o) => (o ?? []).map((n) => t.find((r) => r.id === n)).filter(Boolean), A0(e.options, "debugColumns", "getRightLeafColumns")), e.getCenterLeafColumns = M0(() => [e.getAllLeafColumns(), e.getState().columnPinning.left, e.getState().columnPinning.right], (t, o, n) => {\n const r = [...o ?? [], ...n ?? []];\n return t.filter((i) => !r.includes(i.id));\n }, A0(e.options, "debugColumns", "getCenterLeafColumns"));\n }\n}, yn = {\n size: 150,\n minSize: 20,\n maxSize: Number.MAX_SAFE_INTEGER\n}, Ma = () => ({\n startOffset: null,\n startSize: null,\n deltaOffset: null,\n deltaPercentage: null,\n isResizingColumn: !1,\n columnSizingStart: []\n}), RV = {\n getDefaultColumnDef: () => yn,\n getInitialState: (e) => ({\n columnSizing: {},\n columnSizingInfo: Ma(),\n ...e\n }),\n getDefaultOptions: (e) => ({\n columnResizeMode: "onEnd",\n columnResizeDirection: "ltr",\n onColumnSizingChange: oe("columnSizing", e),\n onColumnSizingInfoChange: oe("columnSizingInfo", e)\n }),\n createColumn: (e, t) => {\n e.getSize = () => {\n var o, n, r;\n const i = t.getState().columnSizing[e.id];\n return Math.min(Math.max((o = e.columnDef.minSize) != null ? o : yn.minSize, (n = i ?? e.columnDef.size) != null ? n : yn.size), (r = e.columnDef.maxSize) != null ? r : yn.maxSize);\n }, e.getStart = M0((o) => [o, $o(t, o), t.getState().columnSizing], (o, n) => n.slice(0, e.getIndex(o)).reduce((r, i) => r + i.getSize(), 0), A0(t.options, "debugColumns", "getStart")), e.getAfter = M0((o) => [o, $o(t, o), t.getState().columnSizing], (o, n) => n.slice(e.getIndex(o) + 1).reduce((r, i) => r + i.getSize(), 0), A0(t.options, "debugColumns", "getAfter")), e.resetSize = () => {\n t.setColumnSizing((o) => {\n let {\n [e.id]: n,\n ...r\n } = o;\n return r;\n });\n }, e.getCanResize = () => {\n var o, n;\n return ((o = e.columnDef.enableResizing) != null ? o : !0) && ((n = t.options.enableColumnResizing) != null ? n : !0);\n }, e.getIsResizing = () => t.getState().columnSizingInfo.isResizingColumn === e.id;\n },\n createHeader: (e, t) => {\n e.getSize = () => {\n let o = 0;\n const n = (r) => {\n if (r.subHeaders.length)\n r.subHeaders.forEach(n);\n else {\n var i;\n o += (i = r.column.getSize()) != null ? i : 0;\n }\n };\n return n(e), o;\n }, e.getStart = () => {\n if (e.index > 0) {\n const o = e.headerGroup.headers[e.index - 1];\n return o.getStart() + o.getSize();\n }\n return 0;\n }, e.getResizeHandler = (o) => {\n const n = t.getColumn(e.column.id), r = n == null ? void 0 : n.getCanResize();\n return (i) => {\n if (!n || !r || (i.persist == null || i.persist(), Aa(i) && i.touches && i.touches.length > 1))\n return;\n const a = e.getSize(), s = e ? e.getLeafHeaders().map((O) => [O.column.id, O.column.getSize()]) : [[n.id, n.getSize()]], l = Aa(i) ? Math.round(i.touches[0].clientX) : i.clientX, p = {}, d = (O, h) => {\n typeof h == "number" && (t.setColumnSizingInfo((g) => {\n var v, L;\n const y = t.options.columnResizeDirection === "rtl" ? -1 : 1, B = (h - ((v = g == null ? void 0 : g.startOffset) != null ? v : 0)) * y, X = Math.max(B / ((L = g == null ? void 0 : g.startSize) != null ? L : 0), -0.999999);\n return g.columnSizingStart.forEach((F) => {\n let [T, w] = F;\n p[T] = Math.round(Math.max(w + w * X, 0) * 100) / 100;\n }), {\n ...g,\n deltaOffset: B,\n deltaPercentage: X\n };\n }), (t.options.columnResizeMode === "onChange" || O === "end") && t.setColumnSizing((g) => ({\n ...g,\n ...p\n })));\n }, b = (O) => d("move", O), M = (O) => {\n d("end", O), t.setColumnSizingInfo((h) => ({\n ...h,\n isResizingColumn: !1,\n startOffset: null,\n startSize: null,\n deltaOffset: null,\n deltaPercentage: null,\n columnSizingStart: []\n }));\n }, u = o || typeof document < "u" ? document : null, A = {\n moveHandler: (O) => b(O.clientX),\n upHandler: (O) => {\n u == null || u.removeEventListener("mousemove", A.moveHandler), u == null || u.removeEventListener("mouseup", A.upHandler), M(O.clientX);\n }\n }, z = {\n moveHandler: (O) => (O.cancelable && (O.preventDefault(), O.stopPropagation()), b(O.touches[0].clientX), !1),\n upHandler: (O) => {\n var h;\n u == null || u.removeEventListener("touchmove", z.moveHandler), u == null || u.removeEventListener("touchend", z.upHandler), O.cancelable && (O.preventDefault(), O.stopPropagation()), M((h = O.touches[0]) == null ? void 0 : h.clientX);\n }\n }, f = BV() ? {\n passive: !1\n } : !1;\n Aa(i) ? (u == null || u.addEventListener("touchmove", z.moveHandler, f), u == null || u.addEventListener("touchend", z.upHandler, f)) : (u == null || u.addEventListener("mousemove", A.moveHandler, f), u == null || u.addEventListener("mouseup", A.upHandler, f)), t.setColumnSizingInfo((O) => ({\n ...O,\n startOffset: l,\n startSize: a,\n deltaOffset: 0,\n deltaPercentage: 0,\n columnSizingStart: s,\n isResizingColumn: n.id\n }));\n };\n };\n },\n createTable: (e) => {\n e.setColumnSizing = (t) => e.options.onColumnSizingChange == null ? void 0 : e.options.onColumnSizingChange(t), e.setColumnSizingInfo = (t) => e.options.onColumnSizingInfoChange == null ? void 0 : e.options.onColumnSizingInfoChange(t), e.resetColumnSizing = (t) => {\n var o;\n e.setColumnSizing(t ? {} : (o = e.initialState.columnSizing) != null ? o : {});\n }, e.resetHeaderSizeInfo = (t) => {\n var o;\n e.setColumnSizingInfo(t ? Ma() : (o = e.initialState.columnSizingInfo) != null ? o : Ma());\n }, e.getTotalSize = () => {\n var t, o;\n return (t = (o = e.getHeaderGroups()[0]) == null ? void 0 : o.headers.reduce((n, r) => n + r.getSize(), 0)) != null ? t : 0;\n }, e.getLeftTotalSize = () => {\n var t, o;\n return (t = (o = e.getLeftHeaderGroups()[0]) == null ? void 0 : o.headers.reduce((n, r) => n + r.getSize(), 0)) != null ? t : 0;\n }, e.getCenterTotalSize = () => {\n var t, o;\n return (t = (o = e.getCenterHeaderGroups()[0]) == null ? void 0 : o.headers.reduce((n, r) => n + r.getSize(), 0)) != null ? t : 0;\n }, e.getRightTotalSize = () => {\n var t, o;\n return (t = (o = e.getRightHeaderGroups()[0]) == null ? void 0 : o.headers.reduce((n, r) => n + r.getSize(), 0)) != null ? t : 0;\n };\n }\n};\nlet wn = null;\nfunction BV() {\n if (typeof wn == "boolean")\n return wn;\n let e = !1;\n try {\n const t = {\n get passive() {\n return e = !0, !1;\n }\n }, o = () => {\n };\n window.addEventListener("test", o, t), window.removeEventListener("test", o);\n } catch {\n e = !1;\n }\n return wn = e, wn;\n}\nfunction Aa(e) {\n return e.type === "touchstart";\n}\nconst SV = {\n getInitialState: (e) => ({\n columnVisibility: {},\n ...e\n }),\n getDefaultOptions: (e) => ({\n onColumnVisibilityChange: oe("columnVisibility", e)\n }),\n createColumn: (e, t) => {\n e.toggleVisibility = (o) => {\n e.getCanHide() && t.setColumnVisibility((n) => ({\n ...n,\n [e.id]: o ?? !e.getIsVisible()\n }));\n }, e.getIsVisible = () => {\n var o, n;\n const r = e.columns;\n return (o = r.length ? r.some((i) => i.getIsVisible()) : (n = t.getState().columnVisibility) == null ? void 0 : n[e.id]) != null ? o : !0;\n }, e.getCanHide = () => {\n var o, n;\n return ((o = e.columnDef.enableHiding) != null ? o : !0) && ((n = t.options.enableHiding) != null ? n : !0);\n }, e.getToggleVisibilityHandler = () => (o) => {\n e.toggleVisibility == null || e.toggleVisibility(o.target.checked);\n };\n },\n createRow: (e, t) => {\n e._getAllVisibleCells = M0(() => [e.getAllCells(), t.getState().columnVisibility], (o) => o.filter((n) => n.column.getIsVisible()), A0(t.options, "debugRows", "_getAllVisibleCells")), e.getVisibleCells = M0(() => [e.getLeftVisibleCells(), e.getCenterVisibleCells(), e.getRightVisibleCells()], (o, n, r) => [...o, ...n, ...r], A0(t.options, "debugRows", "getVisibleCells"));\n },\n createTable: (e) => {\n const t = (o, n) => M0(() => [n(), n().filter((r) => r.getIsVisible()).map((r) => r.id).join("_")], (r) => r.filter((i) => i.getIsVisible == null ? void 0 : i.getIsVisible()), A0(e.options, "debugColumns", o));\n e.getVisibleFlatColumns = t("getVisibleFlatColumns", () => e.getAllFlatColumns()), e.getVisibleLeafColumns = t("getVisibleLeafColumns", () => e.getAllLeafColumns()), e.getLeftVisibleLeafColumns = t("getLeftVisibleLeafColumns", () => e.getLeftLeafColumns()), e.getRightVisibleLeafColumns = t("getRightVisibleLeafColumns", () => e.getRightLeafColumns()), e.getCenterVisibleLeafColumns = t("getCenterVisibleLeafColumns", () => e.getCenterLeafColumns()), e.setColumnVisibility = (o) => e.options.onColumnVisibilityChange == null ? void 0 : e.options.onColumnVisibilityChange(o), e.resetColumnVisibility = (o) => {\n var n;\n e.setColumnVisibility(o ? {} : (n = e.initialState.columnVisibility) != null ? n : {});\n }, e.toggleAllColumnsVisible = (o) => {\n var n;\n o = (n = o) != null ? n : !e.getIsAllColumnsVisible(), e.setColumnVisibility(e.getAllLeafColumns().reduce((r, i) => ({\n ...r,\n [i.id]: o || !(i.getCanHide != null && i.getCanHide())\n }), {}));\n }, e.getIsAllColumnsVisible = () => !e.getAllLeafColumns().some((o) => !(o.getIsVisible != null && o.getIsVisible())), e.getIsSomeColumnsVisible = () => e.getAllLeafColumns().some((o) => o.getIsVisible == null ? void 0 : o.getIsVisible()), e.getToggleAllColumnsVisibilityHandler = () => (o) => {\n var n;\n e.toggleAllColumnsVisible((n = o.target) == null ? void 0 : n.checked);\n };\n }\n};\nfunction $o(e, t) {\n return t ? t === "center" ? e.getCenterVisibleLeafColumns() : t === "left" ? e.getLeftVisibleLeafColumns() : e.getRightVisibleLeafColumns() : e.getVisibleLeafColumns();\n}\nconst EV = {\n createTable: (e) => {\n e._getGlobalFacetedRowModel = e.options.getFacetedRowModel && e.options.getFacetedRowModel(e, "__global__"), e.getGlobalFacetedRowModel = () => e.options.manualFiltering || !e._getGlobalFacetedRowModel ? e.getPreFilteredRowModel() : e._getGlobalFacetedRowModel(), e._getGlobalFacetedUniqueValues = e.options.getFacetedUniqueValues && e.options.getFacetedUniqueValues(e, "__global__"), e.getGlobalFacetedUniqueValues = () => e._getGlobalFacetedUniqueValues ? e._getGlobalFacetedUniqueValues() : /* @__PURE__ */ new Map(), e._getGlobalFacetedMinMaxValues = e.options.getFacetedMinMaxValues && e.options.getFacetedMinMaxValues(e, "__global__"), e.getGlobalFacetedMinMaxValues = () => {\n if (e._getGlobalFacetedMinMaxValues)\n return e._getGlobalFacetedMinMaxValues();\n };\n }\n}, kV = {\n getInitialState: (e) => ({\n globalFilter: void 0,\n ...e\n }),\n getDefaultOptions: (e) => ({\n onGlobalFilterChange: oe("globalFilter", e),\n globalFilterFn: "auto",\n getColumnCanGlobalFilter: (t) => {\n var o;\n const n = (o = e.getCoreRowModel().flatRows[0]) == null || (o = o._getAllCellsByColumnId()[t.id]) == null ? void 0 : o.getValue();\n return typeof n == "string" || typeof n == "number";\n }\n }),\n createColumn: (e, t) => {\n e.getCanGlobalFilter = () => {\n var o, n, r, i;\n return ((o = e.columnDef.enableGlobalFilter) != null ? o : !0) && ((n = t.options.enableGlobalFilter) != null ? n : !0) && ((r = t.options.enableFilters) != null ? r : !0) && ((i = t.options.getColumnCanGlobalFilter == null ? void 0 : t.options.getColumnCanGlobalFilter(e)) != null ? i : !0) && !!e.accessorFn;\n };\n },\n createTable: (e) => {\n e.getGlobalAutoFilterFn = () => _e.includesString, e.getGlobalFilterFn = () => {\n var t, o;\n const {\n globalFilterFn: n\n } = e.options;\n return ri(n) ? n : n === "auto" ? e.getGlobalAutoFilterFn() : (t = (o = e.options.filterFns) == null ? void 0 : o[n]) != null ? t : _e[n];\n }, e.setGlobalFilter = (t) => {\n e.options.onGlobalFilterChange == null || e.options.onGlobalFilterChange(t);\n }, e.resetGlobalFilter = (t) => {\n e.setGlobalFilter(t ? void 0 : e.initialState.globalFilter);\n };\n }\n}, NV = {\n getInitialState: (e) => ({\n expanded: {},\n ...e\n }),\n getDefaultOptions: (e) => ({\n onExpandedChange: oe("expanded", e),\n paginateExpandedRows: !0\n }),\n createTable: (e) => {\n let t = !1, o = !1;\n e._autoResetExpanded = () => {\n var n, r;\n if (!t) {\n e._queue(() => {\n t = !0;\n });\n return;\n }\n if ((n = (r = e.options.autoResetAll) != null ? r : e.options.autoResetExpanded) != null ? n : !e.options.manualExpanding) {\n if (o)\n return;\n o = !0, e._queue(() => {\n e.resetExpanded(), o = !1;\n });\n }\n }, e.setExpanded = (n) => e.options.onExpandedChange == null ? void 0 : e.options.onExpandedChange(n), e.toggleAllRowsExpanded = (n) => {\n n ?? !e.getIsAllRowsExpanded() ? e.setExpanded(!0) : e.setExpanded({});\n }, e.resetExpanded = (n) => {\n var r, i;\n e.setExpanded(n ? {} : (r = (i = e.initialState) == null ? void 0 : i.expanded) != null ? r : {});\n }, e.getCanSomeRowsExpand = () => e.getPrePaginationRowModel().flatRows.some((n) => n.getCanExpand()), e.getToggleAllRowsExpandedHandler = () => (n) => {\n n.persist == null || n.persist(), e.toggleAllRowsExpanded();\n }, e.getIsSomeRowsExpanded = () => {\n const n = e.getState().expanded;\n return n === !0 || Object.values(n).some(Boolean);\n }, e.getIsAllRowsExpanded = () => {\n const n = e.getState().expanded;\n return typeof n == "boolean" ? n === !0 : !(!Object.keys(n).length || e.getRowModel().flatRows.some((r) => !r.getIsExpanded()));\n }, e.getExpandedDepth = () => {\n let n = 0;\n return (e.getState().expanded === !0 ? Object.keys(e.getRowModel().rowsById) : Object.keys(e.getState().expanded)).forEach((i) => {\n const a = i.split(".");\n n = Math.max(n, a.length);\n }), n;\n }, e.getPreExpandedRowModel = () => e.getSortedRowModel(), e.getExpandedRowModel = () => (!e._getExpandedRowModel && e.options.getExpandedRowModel && (e._getExpandedRowModel = e.options.getExpandedRowModel(e)), e.options.manualExpanding || !e._getExpandedRowModel ? e.getPreExpandedRowModel() : e._getExpandedRowModel());\n },\n createRow: (e, t) => {\n e.toggleExpanded = (o) => {\n t.setExpanded((n) => {\n var r;\n const i = n === !0 ? !0 : !!(n != null && n[e.id]);\n let a = {};\n if (n === !0 ? Object.keys(t.getRowModel().rowsById).forEach((s) => {\n a[s] = !0;\n }) : a = n, o = (r = o) != null ? r : !i, !i && o)\n return {\n ...a,\n [e.id]: !0\n };\n if (i && !o) {\n const {\n [e.id]: s,\n ...l\n } = a;\n return l;\n }\n return n;\n });\n }, e.getIsExpanded = () => {\n var o;\n const n = t.getState().expanded;\n return !!((o = t.options.getIsRowExpanded == null ? void 0 : t.options.getIsRowExpanded(e)) != null ? o : n === !0 || n != null && n[e.id]);\n }, e.getCanExpand = () => {\n var o, n, r;\n return (o = t.options.getRowCanExpand == null ? void 0 : t.options.getRowCanExpand(e)) != null ? o : ((n = t.options.enableExpanding) != null ? n : !0) && !!((r = e.subRows) != null && r.length);\n }, e.getIsAllParentsExpanded = () => {\n let o = !0, n = e;\n for (; o && n.parentId; )\n n = t.getRow(n.parentId, !0), o = n.getIsExpanded();\n return o;\n }, e.getToggleExpandedHandler = () => {\n const o = e.getCanExpand();\n return () => {\n o && e.toggleExpanded();\n };\n };\n }\n}, O5 = 0, f5 = 10, ua = () => ({\n pageIndex: O5,\n pageSize: f5\n}), TV = {\n getInitialState: (e) => ({\n ...e,\n pagination: {\n ...ua(),\n ...e == null ? void 0 : e.pagination\n }\n }),\n getDefaultOptions: (e) => ({\n onPaginationChange: oe("pagination", e)\n }),\n createTable: (e) => {\n let t = !1, o = !1;\n e._autoResetPageIndex = () => {\n var n, r;\n if (!t) {\n e._queue(() => {\n t = !0;\n });\n return;\n }\n if ((n = (r = e.options.autoResetAll) != null ? r : e.options.autoResetPageIndex) != null ? n : !e.options.manualPagination) {\n if (o)\n return;\n o = !0, e._queue(() => {\n e.resetPageIndex(), o = !1;\n });\n }\n }, e.setPagination = (n) => {\n const r = (i) => xt(n, i);\n return e.options.onPaginationChange == null ? void 0 : e.options.onPaginationChange(r);\n }, e.resetPagination = (n) => {\n var r;\n e.setPagination(n ? ua() : (r = e.initialState.pagination) != null ? r : ua());\n }, e.setPageIndex = (n) => {\n e.setPagination((r) => {\n let i = xt(n, r.pageIndex);\n const a = typeof e.options.pageCount > "u" || e.options.pageCount === -1 ? Number.MAX_SAFE_INTEGER : e.options.pageCount - 1;\n return i = Math.max(0, Math.min(i, a)), {\n ...r,\n pageIndex: i\n };\n });\n }, e.resetPageIndex = (n) => {\n var r, i;\n e.setPageIndex(n ? O5 : (r = (i = e.initialState) == null || (i = i.pagination) == null ? void 0 : i.pageIndex) != null ? r : O5);\n }, e.resetPageSize = (n) => {\n var r, i;\n e.setPageSize(n ? f5 : (r = (i = e.initialState) == null || (i = i.pagination) == null ? void 0 : i.pageSize) != null ? r : f5);\n }, e.setPageSize = (n) => {\n e.setPagination((r) => {\n const i = Math.max(1, xt(n, r.pageSize)), a = r.pageSize * r.pageIndex, s = Math.floor(a / i);\n return {\n ...r,\n pageIndex: s,\n pageSize: i\n };\n });\n }, e.setPageCount = (n) => e.setPagination((r) => {\n var i;\n let a = xt(n, (i = e.options.pageCount) != null ? i : -1);\n return typeof a == "number" && (a = Math.max(-1, a)), {\n ...r,\n pageCount: a\n };\n }), e.getPageOptions = M0(() => [e.getPageCount()], (n) => {\n let r = [];\n return n && n > 0 && (r = [...new Array(n)].fill(null).map((i, a) => a)), r;\n }, A0(e.options, "debugTable", "getPageOptions")), e.getCanPreviousPage = () => e.getState().pagination.pageIndex > 0, e.getCanNextPage = () => {\n const {\n pageIndex: n\n } = e.getState().pagination, r = e.getPageCount();\n return r === -1 ? !0 : r === 0 ? !1 : n < r - 1;\n }, e.previousPage = () => e.setPageIndex((n) => n - 1), e.nextPage = () => e.setPageIndex((n) => n + 1), e.firstPage = () => e.setPageIndex(0), e.lastPage = () => e.setPageIndex(e.getPageCount() - 1), e.getPrePaginationRowModel = () => e.getExpandedRowModel(), e.getPaginationRowModel = () => (!e._getPaginationRowModel && e.options.getPaginationRowModel && (e._getPaginationRowModel = e.options.getPaginationRowModel(e)), e.options.manualPagination || !e._getPaginationRowModel ? e.getPrePaginationRowModel() : e._getPaginationRowModel()), e.getPageCount = () => {\n var n;\n return (n = e.options.pageCount) != null ? n : Math.ceil(e.getRowCount() / e.getState().pagination.pageSize);\n }, e.getRowCount = () => {\n var n;\n return (n = e.options.rowCount) != null ? n : e.getPrePaginationRowModel().rows.length;\n };\n }\n}, za = () => ({\n top: [],\n bottom: []\n}), IV = {\n getInitialState: (e) => ({\n rowPinning: za(),\n ...e\n }),\n getDefaultOptions: (e) => ({\n onRowPinningChange: oe("rowPinning", e)\n }),\n createRow: (e, t) => {\n e.pin = (o, n, r) => {\n const i = n ? e.getLeafRows().map((l) => {\n let {\n id: p\n } = l;\n return p;\n }) : [], a = r ? e.getParentRows().map((l) => {\n let {\n id: p\n } = l;\n return p;\n }) : [], s = /* @__PURE__ */ new Set([...a, e.id, ...i]);\n t.setRowPinning((l) => {\n var p, d;\n if (o === "bottom") {\n var b, M;\n return {\n top: ((b = l == null ? void 0 : l.top) != null ? b : []).filter((z) => !(s != null && s.has(z))),\n bottom: [...((M = l == null ? void 0 : l.bottom) != null ? M : []).filter((z) => !(s != null && s.has(z))), ...Array.from(s)]\n };\n }\n if (o === "top") {\n var u, A;\n return {\n top: [...((u = l == null ? void 0 : l.top) != null ? u : []).filter((z) => !(s != null && s.has(z))), ...Array.from(s)],\n bottom: ((A = l == null ? void 0 : l.bottom) != null ? A : []).filter((z) => !(s != null && s.has(z)))\n };\n }\n return {\n top: ((p = l == null ? void 0 : l.top) != null ? p : []).filter((z) => !(s != null && s.has(z))),\n bottom: ((d = l == null ? void 0 : l.bottom) != null ? d : []).filter((z) => !(s != null && s.has(z)))\n };\n });\n }, e.getCanPin = () => {\n var o;\n const {\n enableRowPinning: n,\n enablePinning: r\n } = t.options;\n return typeof n == "function" ? n(e) : (o = n ?? r) != null ? o : !0;\n }, e.getIsPinned = () => {\n const o = [e.id], {\n top: n,\n bottom: r\n } = t.getState().rowPinning, i = o.some((s) => n == null ? void 0 : n.includes(s)), a = o.some((s) => r == null ? void 0 : r.includes(s));\n return i ? "top" : a ? "bottom" : !1;\n }, e.getPinnedIndex = () => {\n var o, n;\n const r = e.getIsPinned();\n if (!r)\n return -1;\n const i = (o = r === "top" ? t.getTopRows() : t.getBottomRows()) == null ? void 0 : o.map((a) => {\n let {\n id: s\n } = a;\n return s;\n });\n return (n = i == null ? void 0 : i.indexOf(e.id)) != null ? n : -1;\n };\n },\n createTable: (e) => {\n e.setRowPinning = (t) => e.options.onRowPinningChange == null ? void 0 : e.options.onRowPinningChange(t), e.resetRowPinning = (t) => {\n var o, n;\n return e.setRowPinning(t ? za() : (o = (n = e.initialState) == null ? void 0 : n.rowPinning) != null ? o : za());\n }, e.getIsSomeRowsPinned = (t) => {\n var o;\n const n = e.getState().rowPinning;\n if (!t) {\n var r, i;\n return !!((r = n.top) != null && r.length || (i = n.bottom) != null && i.length);\n }\n return !!((o = n[t]) != null && o.length);\n }, e._getPinnedRows = (t, o, n) => {\n var r;\n return ((r = e.options.keepPinnedRows) == null || r ? (\n //get all rows that are pinned even if they would not be otherwise visible\n //account for expanded parent rows, but not pagination or filtering\n (o ?? []).map((a) => {\n const s = e.getRow(a, !0);\n return s.getIsAllParentsExpanded() ? s : null;\n })\n ) : (\n //else get only visible rows that are pinned\n (o ?? []).map((a) => t.find((s) => s.id === a))\n )).filter(Boolean).map((a) => ({\n ...a,\n position: n\n }));\n }, e.getTopRows = M0(() => [e.getRowModel().rows, e.getState().rowPinning.top], (t, o) => e._getPinnedRows(t, o, "top"), A0(e.options, "debugRows", "getTopRows")), e.getBottomRows = M0(() => [e.getRowModel().rows, e.getState().rowPinning.bottom], (t, o) => e._getPinnedRows(t, o, "bottom"), A0(e.options, "debugRows", "getBottomRows")), e.getCenterRows = M0(() => [e.getRowModel().rows, e.getState().rowPinning.top, e.getState().rowPinning.bottom], (t, o, n) => {\n const r = /* @__PURE__ */ new Set([...o ?? [], ...n ?? []]);\n return t.filter((i) => !r.has(i.id));\n }, A0(e.options, "debugRows", "getCenterRows"));\n }\n}, DV = {\n getInitialState: (e) => ({\n rowSelection: {},\n ...e\n }),\n getDefaultOptions: (e) => ({\n onRowSelectionChange: oe("rowSelection", e),\n enableRowSelection: !0,\n enableMultiRowSelection: !0,\n enableSubRowSelection: !0\n // enableGroupingRowSelection: false,\n // isAdditiveSelectEvent: (e: unknown) => !!e.metaKey,\n // isInclusiveSelectEvent: (e: unknown) => !!e.shiftKey,\n }),\n createTable: (e) => {\n e.setRowSelection = (t) => e.options.onRowSelectionChange == null ? void 0 : e.options.onRowSelectionChange(t), e.resetRowSelection = (t) => {\n var o;\n return e.setRowSelection(t ? {} : (o = e.initialState.rowSelection) != null ? o : {});\n }, e.toggleAllRowsSelected = (t) => {\n e.setRowSelection((o) => {\n t = typeof t < "u" ? t : !e.getIsAllRowsSelected();\n const n = {\n ...o\n }, r = e.getPreGroupedRowModel().flatRows;\n return t ? r.forEach((i) => {\n i.getCanSelect() && (n[i.id] = !0);\n }) : r.forEach((i) => {\n delete n[i.id];\n }), n;\n });\n }, e.toggleAllPageRowsSelected = (t) => e.setRowSelection((o) => {\n const n = typeof t < "u" ? t : !e.getIsAllPageRowsSelected(), r = {\n ...o\n };\n return e.getRowModel().rows.forEach((i) => {\n g5(r, i.id, n, !0, e);\n }), r;\n }), e.getPreSelectedRowModel = () => e.getCoreRowModel(), e.getSelectedRowModel = M0(() => [e.getState().rowSelection, e.getCoreRowModel()], (t, o) => Object.keys(t).length ? ha(e, o) : {\n rows: [],\n flatRows: [],\n rowsById: {}\n }, A0(e.options, "debugTable", "getSelectedRowModel")), e.getFilteredSelectedRowModel = M0(() => [e.getState().rowSelection, e.getFilteredRowModel()], (t, o) => Object.keys(t).length ? ha(e, o) : {\n rows: [],\n flatRows: [],\n rowsById: {}\n }, A0(e.options, "debugTable", "getFilteredSelectedRowModel")), e.getGroupedSelectedRowModel = M0(() => [e.getState().rowSelection, e.getSortedRowModel()], (t, o) => Object.keys(t).length ? ha(e, o) : {\n rows: [],\n flatRows: [],\n rowsById: {}\n }, A0(e.options, "debugTable", "getGroupedSelectedRowModel")), e.getIsAllRowsSelected = () => {\n const t = e.getFilteredRowModel().flatRows, {\n rowSelection: o\n } = e.getState();\n let n = !!(t.length && Object.keys(o).length);\n return n && t.some((r) => r.getCanSelect() && !o[r.id]) && (n = !1), n;\n }, e.getIsAllPageRowsSelected = () => {\n const t = e.getPaginationRowModel().flatRows.filter((r) => r.getCanSelect()), {\n rowSelection: o\n } = e.getState();\n let n = !!t.length;\n return n && t.some((r) => !o[r.id]) && (n = !1), n;\n }, e.getIsSomeRowsSelected = () => {\n var t;\n const o = Object.keys((t = e.getState().rowSelection) != null ? t : {}).length;\n return o > 0 && o < e.getFilteredRowModel().flatRows.length;\n }, e.getIsSomePageRowsSelected = () => {\n const t = e.getPaginationRowModel().flatRows;\n return e.getIsAllPageRowsSelected() ? !1 : t.filter((o) => o.getCanSelect()).some((o) => o.getIsSelected() || o.getIsSomeSelected());\n }, e.getToggleAllRowsSelectedHandler = () => (t) => {\n e.toggleAllRowsSelected(t.target.checked);\n }, e.getToggleAllPageRowsSelectedHandler = () => (t) => {\n e.toggleAllPageRowsSelected(t.target.checked);\n };\n },\n createRow: (e, t) => {\n e.toggleSelected = (o, n) => {\n const r = e.getIsSelected();\n t.setRowSelection((i) => {\n var a;\n if (o = typeof o < "u" ? o : !r, e.getCanSelect() && r === o)\n return i;\n const s = {\n ...i\n };\n return g5(s, e.id, o, (a = n == null ? void 0 : n.selectChildren) != null ? a : !0, t), s;\n });\n }, e.getIsSelected = () => {\n const {\n rowSelection: o\n } = t.getState();\n return Q6(e, o);\n }, e.getIsSomeSelected = () => {\n const {\n rowSelection: o\n } = t.getState();\n return C5(e, o) === "some";\n }, e.getIsAllSubRowsSelected = () => {\n const {\n rowSelection: o\n } = t.getState();\n return C5(e, o) === "all";\n }, e.getCanSelect = () => {\n var o;\n return typeof t.options.enableRowSelection == "function" ? t.options.enableRowSelection(e) : (o = t.options.enableRowSelection) != null ? o : !0;\n }, e.getCanSelectSubRows = () => {\n var o;\n return typeof t.options.enableSubRowSelection == "function" ? t.options.enableSubRowSelection(e) : (o = t.options.enableSubRowSelection) != null ? o : !0;\n }, e.getCanMultiSelect = () => {\n var o;\n return typeof t.options.enableMultiRowSelection == "function" ? t.options.enableMultiRowSelection(e) : (o = t.options.enableMultiRowSelection) != null ? o : !0;\n }, e.getToggleSelectedHandler = () => {\n const o = e.getCanSelect();\n return (n) => {\n var r;\n o && e.toggleSelected((r = n.target) == null ? void 0 : r.checked);\n };\n };\n }\n}, g5 = (e, t, o, n, r) => {\n var i;\n const a = r.getRow(t, !0);\n o ? (a.getCanMultiSelect() || Object.keys(e).forEach((s) => delete e[s]), a.getCanSelect() && (e[t] = !0)) : delete e[t], n && (i = a.subRows) != null && i.length && a.getCanSelectSubRows() && a.subRows.forEach((s) => g5(e, s.id, o, n, r));\n};\nfunction ha(e, t) {\n const o = e.getState().rowSelection, n = [], r = {}, i = function(a, s) {\n return a.map((l) => {\n var p;\n const d = Q6(l, o);\n if (d && (n.push(l), r[l.id] = l), (p = l.subRows) != null && p.length && (l = {\n ...l,\n subRows: i(l.subRows)\n }), d)\n return l;\n }).filter(Boolean);\n };\n return {\n rows: i(t.rows),\n flatRows: n,\n rowsById: r\n };\n}\nfunction Q6(e, t) {\n var o;\n return (o = t[e.id]) != null ? o : !1;\n}\nfunction C5(e, t, o) {\n var n;\n if (!((n = e.subRows) != null && n.length))\n return !1;\n let r = !0, i = !1;\n return e.subRows.forEach((a) => {\n if (!(i && !r) && (a.getCanSelect() && (Q6(a, t) ? i = !0 : r = !1), a.subRows && a.subRows.length)) {\n const s = C5(a, t);\n s === "all" ? i = !0 : (s === "some" && (i = !0), r = !1);\n }\n }), r ? "all" : i ? "some" : !1;\n}\nconst m5 = /([0-9]+)/gm, HV = (e, t, o) => mb(Vt(e.getValue(o)).toLowerCase(), Vt(t.getValue(o)).toLowerCase()), VV = (e, t, o) => mb(Vt(e.getValue(o)), Vt(t.getValue(o))), PV = (e, t, o) => Z6(Vt(e.getValue(o)).toLowerCase(), Vt(t.getValue(o)).toLowerCase()), FV = (e, t, o) => Z6(Vt(e.getValue(o)), Vt(t.getValue(o))), XV = (e, t, o) => {\n const n = e.getValue(o), r = t.getValue(o);\n return n > r ? 1 : n < r ? -1 : 0;\n}, UV = (e, t, o) => Z6(e.getValue(o), t.getValue(o));\nfunction Z6(e, t) {\n return e === t ? 0 : e > t ? 1 : -1;\n}\nfunction Vt(e) {\n return typeof e == "number" ? isNaN(e) || e === 1 / 0 || e === -1 / 0 ? "" : String(e) : typeof e == "string" ? e : "";\n}\nfunction mb(e, t) {\n const o = e.split(m5).filter(Boolean), n = t.split(m5).filter(Boolean);\n for (; o.length && n.length; ) {\n const r = o.shift(), i = n.shift(), a = parseInt(r, 10), s = parseInt(i, 10), l = [a, s].sort();\n if (isNaN(l[0])) {\n if (r > i)\n return 1;\n if (i > r)\n return -1;\n continue;\n }\n if (isNaN(l[1]))\n return isNaN(a) ? -1 : 1;\n if (a > s)\n return 1;\n if (s > a)\n return -1;\n }\n return o.length - n.length;\n}\nconst Io = {\n alphanumeric: HV,\n alphanumericCaseSensitive: VV,\n text: PV,\n textCaseSensitive: FV,\n datetime: XV,\n basic: UV\n}, YV = {\n getInitialState: (e) => ({\n sorting: [],\n ...e\n }),\n getDefaultColumnDef: () => ({\n sortingFn: "auto",\n sortUndefined: 1\n }),\n getDefaultOptions: (e) => ({\n onSortingChange: oe("sorting", e),\n isMultiSortEvent: (t) => t.shiftKey\n }),\n createColumn: (e, t) => {\n e.getAutoSortingFn = () => {\n const o = t.getFilteredRowModel().flatRows.slice(10);\n let n = !1;\n for (const r of o) {\n const i = r == null ? void 0 : r.getValue(e.id);\n if (Object.prototype.toString.call(i) === "[object Date]")\n return Io.datetime;\n if (typeof i == "string" && (n = !0, i.split(m5).length > 1))\n return Io.alphanumeric;\n }\n return n ? Io.text : Io.basic;\n }, e.getAutoSortDir = () => {\n const o = t.getFilteredRowModel().flatRows[0];\n return typeof (o == null ? void 0 : o.getValue(e.id)) == "string" ? "asc" : "desc";\n }, e.getSortingFn = () => {\n var o, n;\n if (!e)\n throw new Error();\n return ri(e.columnDef.sortingFn) ? e.columnDef.sortingFn : e.columnDef.sortingFn === "auto" ? e.getAutoSortingFn() : (o = (n = t.options.sortingFns) == null ? void 0 : n[e.columnDef.sortingFn]) != null ? o : Io[e.columnDef.sortingFn];\n }, e.toggleSorting = (o, n) => {\n const r = e.getNextSortingOrder(), i = typeof o < "u" && o !== null;\n t.setSorting((a) => {\n const s = a == null ? void 0 : a.find((u) => u.id === e.id), l = a == null ? void 0 : a.findIndex((u) => u.id === e.id);\n let p = [], d, b = i ? o : r === "desc";\n if (a != null && a.length && e.getCanMultiSort() && n ? s ? d = "toggle" : d = "add" : a != null && a.length && l !== a.length - 1 ? d = "replace" : s ? d = "toggle" : d = "replace", d === "toggle" && (i || r || (d = "remove")), d === "add") {\n var M;\n p = [...a, {\n id: e.id,\n desc: b\n }], p.splice(0, p.length - ((M = t.options.maxMultiSortColCount) != null ? M : Number.MAX_SAFE_INTEGER));\n } else\n d === "toggle" ? p = a.map((u) => u.id === e.id ? {\n ...u,\n desc: b\n } : u) : d === "remove" ? p = a.filter((u) => u.id !== e.id) : p = [{\n id: e.id,\n desc: b\n }];\n return p;\n });\n }, e.getFirstSortDir = () => {\n var o, n;\n return ((o = (n = e.columnDef.sortDescFirst) != null ? n : t.options.sortDescFirst) != null ? o : e.getAutoSortDir() === "desc") ? "desc" : "asc";\n }, e.getNextSortingOrder = (o) => {\n var n, r;\n const i = e.getFirstSortDir(), a = e.getIsSorted();\n return a ? a !== i && ((n = t.options.enableSortingRemoval) == null || n) && // If enableSortRemove, enable in general\n (!(o && (r = t.options.enableMultiRemove) != null) || r) ? !1 : a === "desc" ? "asc" : "desc" : i;\n }, e.getCanSort = () => {\n var o, n;\n return ((o = e.columnDef.enableSorting) != null ? o : !0) && ((n = t.options.enableSorting) != null ? n : !0) && !!e.accessorFn;\n }, e.getCanMultiSort = () => {\n var o, n;\n return (o = (n = e.columnDef.enableMultiSort) != null ? n : t.options.enableMultiSort) != null ? o : !!e.accessorFn;\n }, e.getIsSorted = () => {\n var o;\n const n = (o = t.getState().sorting) == null ? void 0 : o.find((r) => r.id === e.id);\n return n ? n.desc ? "desc" : "asc" : !1;\n }, e.getSortIndex = () => {\n var o, n;\n return (o = (n = t.getState().sorting) == null ? void 0 : n.findIndex((r) => r.id === e.id)) != null ? o : -1;\n }, e.clearSorting = () => {\n t.setSorting((o) => o != null && o.length ? o.filter((n) => n.id !== e.id) : []);\n }, e.getToggleSortingHandler = () => {\n const o = e.getCanSort();\n return (n) => {\n o && (n.persist == null || n.persist(), e.toggleSorting == null || e.toggleSorting(void 0, e.getCanMultiSort() ? t.options.isMultiSortEvent == null ? void 0 : t.options.isMultiSortEvent(n) : !1));\n };\n };\n },\n createTable: (e) => {\n e.setSorting = (t) => e.options.onSortingChange == null ? void 0 : e.options.onSortingChange(t), e.resetSorting = (t) => {\n var o, n;\n e.setSorting(t ? [] : (o = (n = e.initialState) == null ? void 0 : n.sorting) != null ? o : []);\n }, e.getPreSortedRowModel = () => e.getGroupedRowModel(), e.getSortedRowModel = () => (!e._getSortedRowModel && e.options.getSortedRowModel && (e._getSortedRowModel = e.options.getSortedRowModel(e)), e.options.manualSorting || !e._getSortedRowModel ? e.getPreSortedRowModel() : e._getSortedRowModel());\n }\n}, GV = [\n AV,\n SV,\n xV,\n WV,\n uV,\n zV,\n EV,\n //depends on ColumnFaceting\n kV,\n //depends on ColumnFiltering\n YV,\n yV,\n //depends on RowSorting\n NV,\n TV,\n IV,\n DV,\n RV\n];\nfunction QV(e) {\n var t, o;\n false && 0;\n const n = [...GV, ...(t = e._features) != null ? t : []];\n let r = {\n _features: n\n };\n const i = r._features.reduce((M, u) => Object.assign(M, u.getDefaultOptions == null ? void 0 : u.getDefaultOptions(r)), {}), a = (M) => r.options.mergeOptions ? r.options.mergeOptions(i, M) : {\n ...i,\n ...M\n };\n let l = {\n ...{},\n ...(o = e.initialState) != null ? o : {}\n };\n r._features.forEach((M) => {\n var u;\n l = (u = M.getInitialState == null ? void 0 : M.getInitialState(l)) != null ? u : l;\n });\n const p = [];\n let d = !1;\n const b = {\n _features: n,\n options: {\n ...i,\n ...e\n },\n initialState: l,\n _queue: (M) => {\n p.push(M), d || (d = !0, Promise.resolve().then(() => {\n for (; p.length; )\n p.shift()();\n d = !1;\n }).catch((u) => setTimeout(() => {\n throw u;\n })));\n },\n reset: () => {\n r.setState(r.initialState);\n },\n setOptions: (M) => {\n const u = xt(M, r.options);\n r.options = a(u);\n },\n getState: () => r.options.state,\n setState: (M) => {\n r.options.onStateChange == null || r.options.onStateChange(M);\n },\n _getRowId: (M, u, A) => {\n var z;\n return (z = r.options.getRowId == null ? void 0 : r.options.getRowId(M, u, A)) != null ? z : `${A ? [A.id, u].join(".") : u}`;\n },\n getCoreRowModel: () => (r._getCoreRowModel || (r._getCoreRowModel = r.options.getCoreRowModel(r)), r._getCoreRowModel()),\n // The final calls start at the bottom of the model,\n // expanded rows, which then work their way up\n getRowModel: () => r.getPaginationRowModel(),\n //in next version, we should just pass in the row model as the optional 2nd arg\n getRow: (M, u) => {\n let A = (u ? r.getPrePaginationRowModel() : r.getRowModel()).rowsById[M];\n if (!A && (A = r.getCoreRowModel().rowsById[M], !A))\n throw false ? 0 : new Error();\n return A;\n },\n _getDefaultColumnDef: M0(() => [r.options.defaultColumn], (M) => {\n var u;\n return M = (u = M) != null ? u : {}, {\n header: (A) => {\n const z = A.header.column.columnDef;\n return z.accessorKey ? z.accessorKey : z.accessorFn ? z.id : null;\n },\n // footer: props => props.header.column.id,\n cell: (A) => {\n var z, f;\n return (z = (f = A.renderValue()) == null || f.toString == null ? void 0 : f.toString()) != null ? z : null;\n },\n ...r._features.reduce((A, z) => Object.assign(A, z.getDefaultColumnDef == null ? void 0 : z.getDefaultColumnDef()), {}),\n ...M\n };\n }, A0(e, "debugColumns", "_getDefaultColumnDef")),\n _getColumnDefs: () => r.options.columns,\n getAllColumns: M0(() => [r._getColumnDefs()], (M) => {\n const u = function(A, z, f) {\n return f === void 0 && (f = 0), A.map((O) => {\n const h = MV(r, O, f, z), g = O;\n return h.columns = g.columns ? u(g.columns, h, f + 1) : [], h;\n });\n };\n return u(M);\n }, A0(e, "debugColumns", "getAllColumns")),\n getAllFlatColumns: M0(() => [r.getAllColumns()], (M) => M.flatMap((u) => u.getFlatColumns()), A0(e, "debugColumns", "getAllFlatColumns")),\n _getAllFlatColumnsById: M0(() => [r.getAllFlatColumns()], (M) => M.reduce((u, A) => (u[A.id] = A, u), {}), A0(e, "debugColumns", "getAllFlatColumnsById")),\n getAllLeafColumns: M0(() => [r.getAllColumns(), r._getOrderColumnsFn()], (M, u) => {\n let A = M.flatMap((z) => z.getLeafColumns());\n return u(A);\n }, A0(e, "debugColumns", "getAllLeafColumns")),\n getColumn: (M) => {\n const u = r._getAllFlatColumnsById()[M];\n return false && 0, u;\n }\n };\n Object.assign(r, b);\n for (let M = 0; M < r._features.length; M++) {\n const u = r._features[M];\n u == null || u.createTable == null || u.createTable(r);\n }\n return r;\n}\nfunction ZV() {\n return (e) => M0(() => [e.options.data], (t) => {\n const o = {\n rows: [],\n flatRows: [],\n rowsById: {}\n }, n = function(r, i, a) {\n i === void 0 && (i = 0);\n const s = [];\n for (let p = 0; p < r.length; p++) {\n const d = Y6(e, e._getRowId(r[p], p, a), r[p], p, i, void 0, a == null ? void 0 : a.id);\n if (o.flatRows.push(d), o.rowsById[d.id] = d, s.push(d), e.options.getSubRows) {\n var l;\n d.originalSubRows = e.options.getSubRows(r[p], p), (l = d.originalSubRows) != null && l.length && (d.subRows = n(d.originalSubRows, i + 1, d));\n }\n }\n return s;\n };\n return o.rows = n(t), o;\n }, A0(e.options, "debugTable", "getRowModel", () => e._autoResetPageIndex()));\n}\nfunction jV() {\n return (e) => M0(() => [e.getState().expanded, e.getPreExpandedRowModel(), e.options.paginateExpandedRows], (t, o, n) => !o.rows.length || t !== !0 && !Object.keys(t ?? {}).length || !n ? o : Lb(o), A0(e.options, "debugTable", "getExpandedRowModel"));\n}\nfunction Lb(e) {\n const t = [], o = (n) => {\n var r;\n t.push(n), (r = n.subRows) != null && r.length && n.getIsExpanded() && n.subRows.forEach(o);\n };\n return e.rows.forEach(o), {\n rows: t,\n flatRows: e.flatRows,\n rowsById: e.rowsById\n };\n}\nfunction KV() {\n return (e, t) => M0(() => {\n var o;\n return [(o = e.getColumn(t)) == null ? void 0 : o.getFacetedRowModel()];\n }, (o) => {\n if (!o)\n return;\n const n = o.flatRows.flatMap((a) => {\n var s;\n return (s = a.getUniqueValues(t)) != null ? s : [];\n }).map(Number).filter((a) => !Number.isNaN(a));\n if (!n.length)\n return;\n let r = n[0], i = n[n.length - 1];\n for (const a of n)\n a < r ? r = a : a > i && (i = a);\n return [r, i];\n }, A0(e.options, "debugTable", "getFacetedMinMaxValues"));\n}\nfunction vb(e, t, o) {\n return o.options.filterFromLeafRows ? JV(e, t, o) : _V(e, t, o);\n}\nfunction JV(e, t, o) {\n var n;\n const r = [], i = {}, a = (n = o.options.maxLeafRowFilterDepth) != null ? n : 100, s = function(l, p) {\n p === void 0 && (p = 0);\n const d = [];\n for (let M = 0; M < l.length; M++) {\n var b;\n let u = l[M];\n const A = Y6(o, u.id, u.original, u.index, u.depth, void 0, u.parentId);\n if (A.columnFilters = u.columnFilters, (b = u.subRows) != null && b.length && p < a) {\n if (A.subRows = s(u.subRows, p + 1), u = A, t(u) && !A.subRows.length) {\n d.push(u), i[u.id] = u, r.push(u);\n continue;\n }\n if (t(u) || A.subRows.length) {\n d.push(u), i[u.id] = u, r.push(u);\n continue;\n }\n } else\n u = A, t(u) && (d.push(u), i[u.id] = u, r.push(u));\n }\n return d;\n };\n return {\n rows: s(e),\n flatRows: r,\n rowsById: i\n };\n}\nfunction _V(e, t, o) {\n var n;\n const r = [], i = {}, a = (n = o.options.maxLeafRowFilterDepth) != null ? n : 100, s = function(l, p) {\n p === void 0 && (p = 0);\n const d = [];\n for (let M = 0; M < l.length; M++) {\n let u = l[M];\n if (t(u)) {\n var b;\n if ((b = u.subRows) != null && b.length && p < a) {\n const z = Y6(o, u.id, u.original, u.index, u.depth, void 0, u.parentId);\n z.subRows = s(u.subRows, p + 1), u = z;\n }\n d.push(u), r.push(u), i[u.id] = u;\n }\n }\n return d;\n };\n return {\n rows: s(e),\n flatRows: r,\n rowsById: i\n };\n}\nfunction $V() {\n return (e, t) => M0(() => [e.getPreFilteredRowModel(), e.getState().columnFilters, e.getState().globalFilter, e.getFilteredRowModel()], (o, n, r) => {\n if (!o.rows.length || !(n != null && n.length) && !r)\n return o;\n const i = [...n.map((s) => s.id).filter((s) => s !== t), r ? "__global__" : void 0].filter(Boolean), a = (s) => {\n for (let l = 0; l < i.length; l++)\n if (s.columnFilters[i[l]] === !1)\n return !1;\n return !0;\n };\n return vb(o.rows, a, e);\n }, A0(e.options, "debugTable", "getFacetedRowModel"));\n}\nfunction eP() {\n return (e, t) => M0(() => {\n var o;\n return [(o = e.getColumn(t)) == null ? void 0 : o.getFacetedRowModel()];\n }, (o) => {\n if (!o)\n return /* @__PURE__ */ new Map();\n let n = /* @__PURE__ */ new Map();\n for (let i = 0; i < o.flatRows.length; i++) {\n const a = o.flatRows[i].getUniqueValues(t);\n for (let s = 0; s < a.length; s++) {\n const l = a[s];\n if (n.has(l)) {\n var r;\n n.set(l, ((r = n.get(l)) != null ? r : 0) + 1);\n } else\n n.set(l, 1);\n }\n }\n return n;\n }, A0(e.options, "debugTable", `getFacetedUniqueValues_${t}`));\n}\nfunction tP() {\n return (e) => M0(() => [e.getPreFilteredRowModel(), e.getState().columnFilters, e.getState().globalFilter], (t, o, n) => {\n if (!t.rows.length || !(o != null && o.length) && !n) {\n for (let M = 0; M < t.flatRows.length; M++)\n t.flatRows[M].columnFilters = {}, t.flatRows[M].columnFiltersMeta = {};\n return t;\n }\n const r = [], i = [];\n (o ?? []).forEach((M) => {\n var u;\n const A = e.getColumn(M.id);\n if (!A)\n return;\n const z = A.getFilterFn();\n if (!z) {\n false && 0;\n return;\n }\n r.push({\n id: M.id,\n filterFn: z,\n resolvedValue: (u = z.resolveFilterValue == null ? void 0 : z.resolveFilterValue(M.value)) != null ? u : M.value\n });\n });\n const a = (o ?? []).map((M) => M.id), s = e.getGlobalFilterFn(), l = e.getAllLeafColumns().filter((M) => M.getCanGlobalFilter());\n n && s && l.length && (a.push("__global__"), l.forEach((M) => {\n var u;\n i.push({\n id: M.id,\n filterFn: s,\n resolvedValue: (u = s.resolveFilterValue == null ? void 0 : s.resolveFilterValue(n)) != null ? u : n\n });\n }));\n let p, d;\n for (let M = 0; M < t.flatRows.length; M++) {\n const u = t.flatRows[M];\n if (u.columnFilters = {}, r.length)\n for (let A = 0; A < r.length; A++) {\n p = r[A];\n const z = p.id;\n u.columnFilters[z] = p.filterFn(u, z, p.resolvedValue, (f) => {\n u.columnFiltersMeta[z] = f;\n });\n }\n if (i.length) {\n for (let A = 0; A < i.length; A++) {\n d = i[A];\n const z = d.id;\n if (d.filterFn(u, z, d.resolvedValue, (f) => {\n u.columnFiltersMeta[z] = f;\n })) {\n u.columnFilters.__global__ = !0;\n break;\n }\n }\n u.columnFilters.__global__ !== !0 && (u.columnFilters.__global__ = !1);\n }\n }\n const b = (M) => {\n for (let u = 0; u < a.length; u++)\n if (M.columnFilters[a[u]] === !1)\n return !1;\n return !0;\n };\n return vb(t.rows, b, e);\n }, A0(e.options, "debugTable", "getFilteredRowModel", () => e._autoResetPageIndex()));\n}\nfunction oP(e) {\n return (t) => M0(() => [t.getState().pagination, t.getPrePaginationRowModel(), t.options.paginateExpandedRows ? void 0 : t.getState().expanded], (o, n) => {\n if (!n.rows.length)\n return n;\n const {\n pageSize: r,\n pageIndex: i\n } = o;\n let {\n rows: a,\n flatRows: s,\n rowsById: l\n } = n;\n const p = r * i, d = p + r;\n a = a.slice(p, d);\n let b;\n t.options.paginateExpandedRows ? b = {\n rows: a,\n flatRows: s,\n rowsById: l\n } : b = Lb({\n rows: a,\n flatRows: s,\n rowsById: l\n }), b.flatRows = [];\n const M = (u) => {\n b.flatRows.push(u), u.subRows.length && u.subRows.forEach(M);\n };\n return b.rows.forEach(M), b;\n }, A0(t.options, "debugTable", "getPaginationRowModel"));\n}\nfunction rP() {\n return (e) => M0(() => [e.getState().sorting, e.getPreSortedRowModel()], (t, o) => {\n if (!o.rows.length || !(t != null && t.length))\n return o;\n const n = e.getState().sorting, r = [], i = n.filter((l) => {\n var p;\n return (p = e.getColumn(l.id)) == null ? void 0 : p.getCanSort();\n }), a = {};\n i.forEach((l) => {\n const p = e.getColumn(l.id);\n p && (a[l.id] = {\n sortUndefined: p.columnDef.sortUndefined,\n invertSorting: p.columnDef.invertSorting,\n sortingFn: p.getSortingFn()\n });\n });\n const s = (l) => {\n const p = l.map((d) => ({\n ...d\n }));\n return p.sort((d, b) => {\n for (let u = 0; u < i.length; u += 1) {\n var M;\n const A = i[u], z = a[A.id], f = z.sortUndefined, O = (M = A == null ? void 0 : A.desc) != null ? M : !1;\n let h = 0;\n if (f) {\n const g = d.getValue(A.id), v = b.getValue(A.id), L = g === void 0, y = v === void 0;\n if (L || y) {\n if (f === "first")\n return L ? -1 : 1;\n if (f === "last")\n return L ? 1 : -1;\n h = L && y ? 0 : L ? f : -f;\n }\n }\n if (h === 0 && (h = z.sortingFn(d, b, A.id)), h !== 0)\n return O && (h *= -1), z.invertSorting && (h *= -1), h;\n }\n return d.index - b.index;\n }), p.forEach((d) => {\n var b;\n r.push(d), (b = d.subRows) != null && b.length && (d.subRows = s(d.subRows));\n }), p;\n };\n return {\n rows: s(o.rows),\n flatRows: r,\n rowsById: o.rowsById\n };\n }, A0(e.options, "debugTable", "getSortedRowModel", () => e._autoResetPageIndex()));\n}\n/**\n * react-table\n *\n * Copyright (c) TanStack\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE.md file in the root directory of this source tree.\n *\n * @license MIT\n */\nfunction Oa(e, t) {\n return e ? nP(e) ? /* @__PURE__ */ react__WEBPACK_IMPORTED_MODULE_0__.createElement(e, t) : e : null;\n}\nfunction nP(e) {\n return iP(e) || typeof e == "function" || aP(e);\n}\nfunction iP(e) {\n return typeof e == "function" && (() => {\n const t = Object.getPrototypeOf(e);\n return t.prototype && t.prototype.isReactComponent;\n })();\n}\nfunction aP(e) {\n return typeof e == "object" && typeof e.$$typeof == "symbol" && ["react.memo", "react.forward_ref"].includes(e.$$typeof.description);\n}\nfunction sP(e) {\n const t = {\n state: {},\n // Dummy state\n onStateChange: () => {\n },\n // noop\n renderFallbackValue: null,\n ...e\n }, [o] = react__WEBPACK_IMPORTED_MODULE_0__.useState(() => ({\n current: QV(t)\n })), [n, r] = react__WEBPACK_IMPORTED_MODULE_0__.useState(() => o.current.initialState);\n return o.current.setOptions((i) => ({\n ...i,\n ...e,\n state: {\n ...n,\n ...e.state\n },\n // Similarly, we\'ll maintain both our internal state and any user-provided\n // state.\n onStateChange: (a) => {\n r(a), e.onStateChange == null || e.onStateChange(a);\n }\n })), o.current;\n}\n/**\n * match-sorter-utils\n *\n * Copyright (c) TanStack\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE.md file in the root directory of this source tree.\n *\n * @license MIT\n */\nconst qb = {\n À: "A",\n Á: "A",\n Â: "A",\n Ã: "A",\n Ä: "A",\n Å: "A",\n Ấ: "A",\n Ắ: "A",\n Ẳ: "A",\n Ẵ: "A",\n Ặ: "A",\n Æ: "AE",\n Ầ: "A",\n Ằ: "A",\n Ȃ: "A",\n Ç: "C",\n Ḉ: "C",\n È: "E",\n É: "E",\n Ê: "E",\n Ë: "E",\n Ế: "E",\n Ḗ: "E",\n Ề: "E",\n Ḕ: "E",\n Ḝ: "E",\n Ȇ: "E",\n Ì: "I",\n Í: "I",\n Î: "I",\n Ï: "I",\n Ḯ: "I",\n Ȋ: "I",\n Ð: "D",\n Ñ: "N",\n Ò: "O",\n Ó: "O",\n Ô: "O",\n Õ: "O",\n Ö: "O",\n Ø: "O",\n Ố: "O",\n Ṍ: "O",\n Ṓ: "O",\n Ȏ: "O",\n Ù: "U",\n Ú: "U",\n Û: "U",\n Ü: "U",\n Ý: "Y",\n à: "a",\n á: "a",\n â: "a",\n ã: "a",\n ä: "a",\n å: "a",\n ấ: "a",\n ắ: "a",\n ẳ: "a",\n ẵ: "a",\n ặ: "a",\n æ: "ae",\n ầ: "a",\n ằ: "a",\n ȃ: "a",\n ç: "c",\n ḉ: "c",\n è: "e",\n é: "e",\n ê: "e",\n ë: "e",\n ế: "e",\n ḗ: "e",\n ề: "e",\n ḕ: "e",\n ḝ: "e",\n ȇ: "e",\n ì: "i",\n í: "i",\n î: "i",\n ï: "i",\n ḯ: "i",\n ȋ: "i",\n ð: "d",\n ñ: "n",\n ò: "o",\n ó: "o",\n ô: "o",\n õ: "o",\n ö: "o",\n ø: "o",\n ố: "o",\n ṍ: "o",\n ṓ: "o",\n ȏ: "o",\n ù: "u",\n ú: "u",\n û: "u",\n ü: "u",\n ý: "y",\n ÿ: "y",\n Ā: "A",\n ā: "a",\n Ă: "A",\n ă: "a",\n Ą: "A",\n ą: "a",\n Ć: "C",\n ć: "c",\n Ĉ: "C",\n ĉ: "c",\n Ċ: "C",\n ċ: "c",\n Č: "C",\n č: "c",\n C̆: "C",\n c̆: "c",\n Ď: "D",\n ď: "d",\n Đ: "D",\n đ: "d",\n Ē: "E",\n ē: "e",\n Ĕ: "E",\n ĕ: "e",\n Ė: "E",\n ė: "e",\n Ę: "E",\n ę: "e",\n Ě: "E",\n ě: "e",\n Ĝ: "G",\n Ǵ: "G",\n ĝ: "g",\n ǵ: "g",\n Ğ: "G",\n ğ: "g",\n Ġ: "G",\n ġ: "g",\n Ģ: "G",\n ģ: "g",\n Ĥ: "H",\n ĥ: "h",\n Ħ: "H",\n ħ: "h",\n Ḫ: "H",\n ḫ: "h",\n Ĩ: "I",\n ĩ: "i",\n Ī: "I",\n ī: "i",\n Ĭ: "I",\n ĭ: "i",\n Į: "I",\n į: "i",\n İ: "I",\n ı: "i",\n IJ: "IJ",\n ij: "ij",\n Ĵ: "J",\n ĵ: "j",\n Ķ: "K",\n ķ: "k",\n Ḱ: "K",\n ḱ: "k",\n K̆: "K",\n k̆: "k",\n Ĺ: "L",\n ĺ: "l",\n Ļ: "L",\n ļ: "l",\n Ľ: "L",\n ľ: "l",\n Ŀ: "L",\n ŀ: "l",\n Ł: "l",\n ł: "l",\n Ḿ: "M",\n ḿ: "m",\n M̆: "M",\n m̆: "m",\n Ń: "N",\n ń: "n",\n Ņ: "N",\n ņ: "n",\n Ň: "N",\n ň: "n",\n ʼn: "n",\n N̆: "N",\n n̆: "n",\n Ō: "O",\n ō: "o",\n Ŏ: "O",\n ŏ: "o",\n Ő: "O",\n ő: "o",\n Œ: "OE",\n œ: "oe",\n P̆: "P",\n p̆: "p",\n Ŕ: "R",\n ŕ: "r",\n Ŗ: "R",\n ŗ: "r",\n Ř: "R",\n ř: "r",\n R̆: "R",\n r̆: "r",\n Ȓ: "R",\n ȓ: "r",\n Ś: "S",\n ś: "s",\n Ŝ: "S",\n ŝ: "s",\n Ş: "S",\n Ș: "S",\n ș: "s",\n ş: "s",\n Š: "S",\n š: "s",\n Ţ: "T",\n ţ: "t",\n ț: "t",\n Ț: "T",\n Ť: "T",\n ť: "t",\n Ŧ: "T",\n ŧ: "t",\n T̆: "T",\n t̆: "t",\n Ũ: "U",\n ũ: "u",\n Ū: "U",\n ū: "u",\n Ŭ: "U",\n ŭ: "u",\n Ů: "U",\n ů: "u",\n Ű: "U",\n ű: "u",\n Ų: "U",\n ų: "u",\n Ȗ: "U",\n ȗ: "u",\n V̆: "V",\n v̆: "v",\n Ŵ: "W",\n ŵ: "w",\n Ẃ: "W",\n ẃ: "w",\n X̆: "X",\n x̆: "x",\n Ŷ: "Y",\n ŷ: "y",\n Ÿ: "Y",\n Y̆: "Y",\n y̆: "y",\n Ź: "Z",\n ź: "z",\n Ż: "Z",\n ż: "z",\n Ž: "Z",\n ž: "z",\n ſ: "s",\n ƒ: "f",\n Ơ: "O",\n ơ: "o",\n Ư: "U",\n ư: "u",\n Ǎ: "A",\n ǎ: "a",\n Ǐ: "I",\n ǐ: "i",\n Ǒ: "O",\n ǒ: "o",\n Ǔ: "U",\n ǔ: "u",\n Ǖ: "U",\n ǖ: "u",\n Ǘ: "U",\n ǘ: "u",\n Ǚ: "U",\n ǚ: "u",\n Ǜ: "U",\n ǜ: "u",\n Ứ: "U",\n ứ: "u",\n Ṹ: "U",\n ṹ: "u",\n Ǻ: "A",\n ǻ: "a",\n Ǽ: "AE",\n ǽ: "ae",\n Ǿ: "O",\n ǿ: "o",\n Þ: "TH",\n þ: "th",\n Ṕ: "P",\n ṕ: "p",\n Ṥ: "S",\n ṥ: "s",\n X́: "X",\n x́: "x",\n Ѓ: "Г",\n ѓ: "г",\n Ќ: "К",\n ќ: "к",\n A̋: "A",\n a̋: "a",\n E̋: "E",\n e̋: "e",\n I̋: "I",\n i̋: "i",\n Ǹ: "N",\n ǹ: "n",\n Ồ: "O",\n ồ: "o",\n Ṑ: "O",\n ṑ: "o",\n Ừ: "U",\n ừ: "u",\n Ẁ: "W",\n ẁ: "w",\n Ỳ: "Y",\n ỳ: "y",\n Ȁ: "A",\n ȁ: "a",\n Ȅ: "E",\n ȅ: "e",\n Ȉ: "I",\n ȉ: "i",\n Ȍ: "O",\n ȍ: "o",\n Ȑ: "R",\n ȑ: "r",\n Ȕ: "U",\n ȕ: "u",\n B̌: "B",\n b̌: "b",\n Č̣: "C",\n č̣: "c",\n Ê̌: "E",\n ê̌: "e",\n F̌: "F",\n f̌: "f",\n Ǧ: "G",\n ǧ: "g",\n Ȟ: "H",\n ȟ: "h",\n J̌: "J",\n ǰ: "j",\n Ǩ: "K",\n ǩ: "k",\n M̌: "M",\n m̌: "m",\n P̌: "P",\n p̌: "p",\n Q̌: "Q",\n q̌: "q",\n Ř̩: "R",\n ř̩: "r",\n Ṧ: "S",\n ṧ: "s",\n V̌: "V",\n v̌: "v",\n W̌: "W",\n w̌: "w",\n X̌: "X",\n x̌: "x",\n Y̌: "Y",\n y̌: "y",\n A̧: "A",\n a̧: "a",\n B̧: "B",\n b̧: "b",\n Ḑ: "D",\n ḑ: "d",\n Ȩ: "E",\n ȩ: "e",\n Ɛ̧: "E",\n ɛ̧: "e",\n Ḩ: "H",\n ḩ: "h",\n I̧: "I",\n i̧: "i",\n Ɨ̧: "I",\n ɨ̧: "i",\n M̧: "M",\n m̧: "m",\n O̧: "O",\n o̧: "o",\n Q̧: "Q",\n q̧: "q",\n U̧: "U",\n u̧: "u",\n X̧: "X",\n x̧: "x",\n Z̧: "Z",\n z̧: "z"\n}, cP = Object.keys(qb).join("|"), lP = new RegExp(cP, "g");\nfunction pP(e) {\n return e.replace(lP, (t) => qb[t]);\n}\n/**\n * @name match-sorter\n * @license MIT license.\n * @copyright (c) 2099 Kent C. Dodds\n * @author Kent C. Dodds (https://kentcdodds.com)\n */\nconst I2 = {\n CASE_SENSITIVE_EQUAL: 7,\n EQUAL: 6,\n STARTS_WITH: 5,\n WORD_STARTS_WITH: 4,\n CONTAINS: 3,\n ACRONYM: 2,\n MATCHES: 1,\n NO_MATCH: 0\n};\nfunction dP(e, t, o) {\n var n;\n if (o = o || {}, o.threshold = (n = o.threshold) != null ? n : I2.MATCHES, !o.accessors) {\n const a = lc(e, t, o);\n return {\n // ends up being duplicate of \'item\' in matches but consistent\n rankedValue: e,\n rank: a,\n accessorIndex: -1,\n accessorThreshold: o.threshold,\n passed: a >= o.threshold\n };\n }\n const r = uP(e, o.accessors), i = {\n rankedValue: e,\n rank: I2.NO_MATCH,\n accessorIndex: -1,\n accessorThreshold: o.threshold,\n passed: !1\n };\n for (let a = 0; a < r.length; a++) {\n const s = r[a];\n let l = lc(s.itemValue, t, o);\n const {\n minRanking: p,\n maxRanking: d,\n threshold: b = o.threshold\n } = s.attributes;\n l < p && l >= I2.MATCHES ? l = p : l > d && (l = d), l = Math.min(l, d), l >= b && l > i.rank && (i.rank = l, i.passed = !0, i.accessorIndex = a, i.accessorThreshold = b, i.rankedValue = s.itemValue);\n }\n return i;\n}\nfunction lc(e, t, o) {\n return e = pc(e, o), t = pc(t, o), t.length > e.length ? I2.NO_MATCH : e === t ? I2.CASE_SENSITIVE_EQUAL : (e = e.toLowerCase(), t = t.toLowerCase(), e === t ? I2.EQUAL : e.startsWith(t) ? I2.STARTS_WITH : e.includes(` ${t}`) ? I2.WORD_STARTS_WITH : e.includes(t) ? I2.CONTAINS : t.length === 1 ? I2.NO_MATCH : bP(e).includes(t) ? I2.ACRONYM : MP(e, t));\n}\nfunction bP(e) {\n let t = "";\n return e.split(" ").forEach((n) => {\n n.split("-").forEach((i) => {\n t += i.substr(0, 1);\n });\n }), t;\n}\nfunction MP(e, t) {\n let o = 0, n = 0;\n function r(l, p, d) {\n for (let b = d, M = p.length; b < M; b++)\n if (p[b] === l)\n return o += 1, b + 1;\n return -1;\n }\n function i(l) {\n const p = 1 / l, d = o / t.length;\n return I2.MATCHES + d * p;\n }\n const a = r(t[0], e, 0);\n if (a < 0)\n return I2.NO_MATCH;\n n = a;\n for (let l = 1, p = t.length; l < p; l++) {\n const d = t[l];\n if (n = r(d, e, n), !(n > -1))\n return I2.NO_MATCH;\n }\n const s = n - a;\n return i(s);\n}\nfunction pc(e, t) {\n let {\n keepDiacritics: o\n } = t;\n return e = `${e}`, o || (e = pP(e)), e;\n}\nfunction AP(e, t) {\n let o = t;\n typeof t == "object" && (o = t.accessor);\n const n = o(e);\n return n == null ? [] : Array.isArray(n) ? n : [String(n)];\n}\nfunction uP(e, t) {\n const o = [];\n for (let n = 0, r = t.length; n < r; n++) {\n const i = t[n], a = zP(i), s = AP(e, i);\n for (let l = 0, p = s.length; l < p; l++)\n o.push({\n itemValue: s[l],\n attributes: a\n });\n }\n return o;\n}\nconst dc = {\n maxRanking: 1 / 0,\n minRanking: -1 / 0\n};\nfunction zP(e) {\n return typeof e == "function" ? dc : {\n ...dc,\n ...e\n };\n}\nconst hP = styled_components__WEBPACK_IMPORTED_MODULE_1___default().span(\n ({ theme: { colors: e, typography: t, lineHeight: o }, isDisabled: n, fontSize: r }) => (0,styled_components__WEBPACK_IMPORTED_MODULE_1__.css)`\n font-size: ${r === "xs" ? t.t10 : "11px"};\n line-height: ${o.lh20};\n color: ${n ? e.veryLightGrey : e.textIcon.textLowemphasis};\n `\n);\nfunction OP(e) {\n const { pageSize: t, currentPage: o, limit: n, isDisabled: r, fontSize: i } = e, a = (0,react__WEBPACK_IMPORTED_MODULE_0__.useMemo)(() => !t || !o || !n ? "" : `${`${Number(t) * (Number(o) - 1) + 1} - ${Number(o) * Number(t) > n ? n : Number(o) * Number(t)}`} of ${n}`, [o, t, n]);\n return /* @__PURE__ */ c(hP, { isDisabled: r, fontSize: i, children: a });\n}\nconst fP = styled_components__WEBPACK_IMPORTED_MODULE_1___default().div(\n ({ theme: { colors: e, transitions: t, spacings: o }, isDisabled: n }) => (0,styled_components__WEBPACK_IMPORTED_MODULE_1__.css)`\n & + & {\n margin-left: ${o.sp8};\n }\n\n .icon-system {\n cursor: ${n ? "default" : "pointer"};\n color: ${n ? e.veryLightGrey : e.textIcon.textHighemphasis};\n transition: ${t.base};\n\n &:hover {\n transition: ${t.base};\n color: ${!n && e.textIcon.textHighemphasis};\n }\n }\n `\n);\nfunction gP(e) {\n const { name: t, onClick: o, isDisabled: n } = e, r = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)(() => {\n !n && o && o();\n }, [n, o]);\n return /* @__PURE__ */ c(fP, { isDisabled: n, onClick: r, children: /* @__PURE__ */ c(Z1, { name: t, size: "xxxs" }) });\n}\nconst CP = (styled_components__WEBPACK_IMPORTED_MODULE_1___default().div)`\n display: flex;\n justify-content: space-between;\n align-items: center;\n gap: 8px;\n`;\nfunction mP(e) {\n const {\n currentPage: t = 1,\n limit: o = 1,\n onFirstPageClick: n,\n onPrevClick: r,\n onLastPageClick: i,\n onNextClick: a,\n isDisabled: s\n } = e, l = (0,react__WEBPACK_IMPORTED_MODULE_0__.useMemo)(\n () => [\n {\n name: "FirstPage",\n onClick: n,\n isDisabled: !!(t <= 1 || s)\n },\n {\n name: "ChevronLeft",\n onClick: r,\n isDisabled: !!(t <= 1 || s)\n },\n {\n name: "ChevronRight",\n onClick: a,\n isDisabled: !!(t >= o || s)\n },\n {\n name: "LastPage",\n onClick: i,\n isDisabled: !!(t >= o || s)\n }\n ],\n [\n t,\n o,\n n,\n r,\n a,\n i,\n s\n ]\n );\n return /* @__PURE__ */ c(CP, { children: l.map(\n (p) => /* @__PURE__ */ c(\n gP,\n {\n name: p.name,\n isDisabled: p.isDisabled,\n onClick: p.onClick\n },\n p.name\n )\n ) });\n}\n(styled_components__WEBPACK_IMPORTED_MODULE_1___default().div)`\n width: 600px;\n`;\nconst LP = styled_components__WEBPACK_IMPORTED_MODULE_1___default().div(\n ({ theme: { colors: e, borderRadius: t }, loading: o }) => (0,styled_components__WEBPACK_IMPORTED_MODULE_1__.css)`\n display: flex;\n justify-content: flex-start;\n align-items: center;\n gap: 24px;\n padding: 4px 9px;\n min-height: 40px;\n box-sizing: border-box;\n border: ${o ? "transparent" : `1px solid ${e.border.borderTertiary}`};\n border-top: none;\n border-radius: 0 0 ${t.base} ${t.base};\n background: ${o ? "transparent" : e.backgrounds.bgPrimary};\n &.align-center {\n justify-content: center;\n }\n\n &.align-right {\n justify-content: flex-end;\n }\n ${o && (0,styled_components__WEBPACK_IMPORTED_MODULE_1__.css)`\n padding-right: 0;\n & .skeleton-container {\n margin: 6px 0;\n div {\n opacity: 0;\n }\n }\n `}\n `\n), vP = styled_components__WEBPACK_IMPORTED_MODULE_1___default().div(\n ({ theme: { colors: e, typography: t, lineHeight: o, itemSize: n }, isDisabled: r }) => (0,styled_components__WEBPACK_IMPORTED_MODULE_1__.css)`\n display: flex;\n justify-content: space-between;\n align-items: center;\n font-size: ${t.t10};\n line-height: ${o.lh20};\n color: ${r ? e.veryLightGrey : e.eclipse};\n\n .dropdown > div:first-child > input {\n padding: 0;\n width: ${n.md};\n height: ${n.md};\n cursor: ${r ? "default" : "pointer"};\n text-align: center;\n text-overflow: initial;\n background: ${e.white};\n }\n\n .dropdown-body {\n min-width: 80px;\n }\n `\n), qP = styled_components__WEBPACK_IMPORTED_MODULE_1___default().div(\n ({ theme: { colors: e, spacings: t, typography: o }, fontSize: n }) => (0,styled_components__WEBPACK_IMPORTED_MODULE_1__.css)`\n margin: 0 ${t.sp8} 0 0;\n font-size: ${n === "xs" ? o.t10 : "11px"};\n color: ${e.textIcon.textMediumemphasis};\n `\n), yP = styled_components__WEBPACK_IMPORTED_MODULE_1___default().div(\n ({\n theme: { colors: e, typography: t, fontWeight: o, itemSize: n },\n isDisabled: r,\n fontSize: i\n }) => (0,styled_components__WEBPACK_IMPORTED_MODULE_1__.css)`\n input {\n max-width: 39px;\n max-height: 15px;\n padding: 4px 8px;\n font-size: ${i === "xs" ? t.t10 : "11px"};\n background-color: ${e.backgrounds.bgPrimary};\n border: 1px solid ${e.border.borderTertiary};\n font-weight: ${o.regular};\n }\n label {\n display: none;\n }\n `\n);\nfunction wP(e) {\n const { size: t, options: o, onChange: n, isDisabled: r, fontSize: i } = e, [a, s] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)("");\n (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => {\n t && s(Number(t));\n }, [t]);\n const l = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)(\n (d) => {\n s(d), n(d);\n },\n [n]\n ), p = (0,react__WEBPACK_IMPORTED_MODULE_0__.useMemo)(\n () => o.map(\n (d, b) => ({\n label: d,\n value: b\n })\n ),\n [l, o]\n );\n return /* @__PURE__ */ e1(vP, { isDisabled: r, children: [\n /* @__PURE__ */ c(qP, { fontSize: i, children: "Rows per page" }),\n /* @__PURE__ */ c(\n it,\n {\n isBodyGenerated: !0,\n dropdownBodyWidth: "58px",\n bodyPadding: "0px",\n body: /* @__PURE__ */ c(\n dt,\n {\n data: p,\n selectedOptions: (d) => {\n l(d.label);\n }\n }\n ),\n isDisabled: r,\n children: /* @__PURE__ */ c(yP, { fontSize: i, children: /* @__PURE__ */ c(\n Y2,\n {\n isDisabled: r,\n value: a,\n readOnly: !0,\n hideClearButton: !0\n }\n ) })\n }\n )\n ] });\n}\nfunction xP(e) {\n const {\n currentPage: t,\n isDisabled: o,\n limit: n,\n onFirstPageClick: r,\n onLastPageClick: i,\n onNextClick: a,\n onPageSizeChange: s,\n onPrevClick: l,\n pageSize: p,\n pageSizeOptions: d,\n position: b = Ol.RIGHT,\n loading: M,\n fontSize: u\n } = e, A = (0,react__WEBPACK_IMPORTED_MODULE_0__.useMemo)(() => `table-pagination align-${b}`, [b]);\n return /* @__PURE__ */ e1(LP, { className: A, loading: M, children: [\n p && /* @__PURE__ */ e1(s0, { children: [\n /* @__PURE__ */ c(\n ie,\n {\n radius: 4,\n height: M ? K2 : "auto",\n visible: M,\n children: /* @__PURE__ */ c(\n wP,\n {\n size: p,\n options: d,\n onChange: s,\n fontSize: u\n }\n )\n }\n ),\n /* @__PURE__ */ c(\n ie,\n {\n radius: 4,\n height: M ? K2 : "auto",\n visible: M,\n children: /* @__PURE__ */ c(\n OP,\n {\n pageSize: p,\n currentPage: t,\n limit: n,\n isDisabled: o,\n fontSize: u\n }\n )\n }\n )\n ] }),\n /* @__PURE__ */ c(\n ie,\n {\n radius: 4,\n height: M ? K2 : "auto",\n visible: M,\n children: /* @__PURE__ */ c(\n mP,\n {\n currentPage: t,\n limit: Number(n) / Number(p),\n onFirstPageClick: r,\n onPrevClick: l,\n onLastPageClick: i,\n onNextClick: a,\n isDisabled: o\n }\n )\n }\n )\n ] });\n}\nconst WP = (e, t, o) => {\n const n = e.getValue(t), [r, i] = o;\n if ((r || i) && !n)\n return !1;\n const a = new Date(r), s = new Date(i);\n return r && !i ? n.getTime() >= a.getTime() : !r && i ? n.getTime() <= s.getTime() : r && i ? n.getTime() >= a.getTime() && n.getTime() <= s.getTime() : !0;\n}, RP = (e, t, o) => {\n const n = e.getValue(t);\n return o ? typeof o == "string" ? o.includes(n) : Array.isArray(o) ? n >= o[0] && n <= o[1] : !0 : !1;\n}, BP = (e, t, o) => {\n if ((t == null ? void 0 : t.length) < 1 || e.length < 2 || !o)\n return e;\n const n = /* @__PURE__ */ new Map();\n e.forEach((a, s) => {\n n.set(a[o], { index: s, obj: a });\n });\n const r = [];\n t.forEach((a) => {\n if (n.has(a)) {\n const { index: s, obj: l } = n.get(a);\n console.log("index", s), r.push(l), n.delete(a);\n }\n });\n const i = Array.from(n.values()).map((a) => a.obj);\n return r.push(...i), r;\n}, SP = (e, t, o) => {\n let n = (o == null ? void 0 : o.maxValue) ?? Number.NEGATIVE_INFINITY, r = (o == null ? void 0 : o.minValue) ?? Number.POSITIVE_INFINITY;\n return e.forEach((i) => {\n const a = i[t];\n if (a != null && !isNaN(a)) {\n const s = parseFloat(a);\n s > n && (n = s), s < r && (r = s);\n }\n }), r === Number.POSITIVE_INFINITY && n === Number.NEGATIVE_INFINITY ? { min: void 0, max: void 0 } : { min: r, max: n };\n}, fa = (e, t, o) => {\n const n = {};\n return e.forEach((r) => {\n let i = r[t];\n if (o && (i = o(r)), i != null) {\n const a = typeof i == "number" ? String(i) : i.toString();\n n[a] = { value: a, label: a };\n }\n }), Object.values(n);\n};\nfunction x3(e, t, o) {\n let n = o.initialDeps ?? [], r;\n return () => {\n var i, a, s, l;\n let p;\n o.key && ((i = o.debug) != null && i.call(o)) && (p = Date.now());\n const d = e();\n if (!(d.length !== n.length || d.some((u, A) => n[A] !== u)))\n return r;\n n = d;\n let M;\n if (o.key && ((a = o.debug) != null && a.call(o)) && (M = Date.now()), r = t(...d), o.key && ((s = o.debug) != null && s.call(o))) {\n const u = Math.round((Date.now() - p) * 100) / 100, A = Math.round((Date.now() - M) * 100) / 100, z = A / 16, f = (O, h) => {\n for (O = String(O); O.length < h; )\n O = " " + O;\n return O;\n };\n console.info(\n `%c⏱ ${f(A, 5)} /${f(u, 5)} ms`,\n `\n font-size: .6rem;\n font-weight: bold;\n color: hsl(${Math.max(\n 0,\n Math.min(120 - 120 * z, 120)\n )}deg 100% 31%);`,\n o == null ? void 0 : o.key\n );\n }\n return (l = o == null ? void 0 : o.onChange) == null || l.call(o, r), r;\n };\n}\nfunction ga(e, t) {\n if (e === void 0)\n throw new Error(`Unexpected undefined${t ? `: ${t}` : ""}`);\n return e;\n}\nconst EP = (e, t) => Math.abs(e - t) < 1, kP = (e, t, o) => {\n let n;\n return function(...r) {\n e.clearTimeout(n), n = e.setTimeout(() => t.apply(this, r), o);\n };\n}, NP = (e) => e, yb = (e) => {\n const t = Math.max(e.startIndex - e.overscan, 0), o = Math.min(e.endIndex + e.overscan, e.count - 1), n = [];\n for (let r = t; r <= o; r++)\n n.push(r);\n return n;\n}, TP = (e, t) => {\n const o = e.scrollElement;\n if (!o)\n return;\n const n = e.targetWindow;\n if (!n)\n return;\n const r = (a) => {\n const { width: s, height: l } = a;\n t({ width: Math.round(s), height: Math.round(l) });\n };\n if (r(o.getBoundingClientRect()), !n.ResizeObserver)\n return () => {\n };\n const i = new n.ResizeObserver((a) => {\n const s = a[0];\n if (s != null && s.borderBoxSize) {\n const l = s.borderBoxSize[0];\n if (l) {\n r({ width: l.inlineSize, height: l.blockSize });\n return;\n }\n }\n r(o.getBoundingClientRect());\n });\n return i.observe(o, { box: "border-box" }), () => {\n i.unobserve(o);\n };\n}, bc = {\n passive: !0\n}, IP = typeof window > "u" ? !0 : "onscrollend" in window, DP = (e, t) => {\n const o = e.scrollElement;\n if (!o)\n return;\n const n = e.targetWindow;\n if (!n)\n return;\n let r = 0;\n const i = e.options.useScrollendEvent && IP ? () => {\n } : kP(\n n,\n () => {\n t(r, !1);\n },\n e.options.isScrollingResetDelay\n ), a = (p) => () => {\n const { horizontal: d, isRtl: b } = e.options;\n r = d ? o.scrollLeft * (b && -1 || 1) : o.scrollTop, i(), t(r, p);\n }, s = a(!0), l = a(!1);\n return l(), o.addEventListener("scroll", s, bc), o.addEventListener("scrollend", l, bc), () => {\n o.removeEventListener("scroll", s), o.removeEventListener("scrollend", l);\n };\n}, HP = (e, t, o) => {\n if (t != null && t.borderBoxSize) {\n const n = t.borderBoxSize[0];\n if (n)\n return Math.round(\n n[o.options.horizontal ? "inlineSize" : "blockSize"]\n );\n }\n return Math.round(\n e.getBoundingClientRect()[o.options.horizontal ? "width" : "height"]\n );\n}, VP = (e, {\n adjustments: t = 0,\n behavior: o\n}, n) => {\n var r, i;\n const a = e + t;\n (i = (r = n.scrollElement) == null ? void 0 : r.scrollTo) == null || i.call(r, {\n [n.options.horizontal ? "left" : "top"]: a,\n behavior: o\n });\n};\nclass PP {\n constructor(t) {\n this.unsubs = [], this.scrollElement = null, this.targetWindow = null, this.isScrolling = !1, this.scrollToIndexTimeoutId = null, this.measurementsCache = [], this.itemSizeCache = /* @__PURE__ */ new Map(), this.pendingMeasuredCacheIndexes = [], this.scrollRect = null, this.scrollOffset = null, this.scrollDirection = null, this.scrollAdjustments = 0, this.elementsCache = /* @__PURE__ */ new Map(), this.observer = /* @__PURE__ */ (() => {\n let o = null;\n const n = () => o || (!this.targetWindow || !this.targetWindow.ResizeObserver ? null : o = new this.targetWindow.ResizeObserver((r) => {\n r.forEach((i) => {\n this._measureElement(i.target, i);\n });\n }));\n return {\n disconnect: () => {\n var r;\n (r = n()) == null || r.disconnect(), o = null;\n },\n observe: (r) => {\n var i;\n return (i = n()) == null ? void 0 : i.observe(r, { box: "border-box" });\n },\n unobserve: (r) => {\n var i;\n return (i = n()) == null ? void 0 : i.unobserve(r);\n }\n };\n })(), this.range = null, this.setOptions = (o) => {\n Object.entries(o).forEach(([n, r]) => {\n typeof r > "u" && delete o[n];\n }), this.options = {\n debug: !1,\n initialOffset: 0,\n overscan: 1,\n paddingStart: 0,\n paddingEnd: 0,\n scrollPaddingStart: 0,\n scrollPaddingEnd: 0,\n horizontal: !1,\n getItemKey: NP,\n rangeExtractor: yb,\n onChange: () => {\n },\n measureElement: HP,\n initialRect: { width: 0, height: 0 },\n scrollMargin: 0,\n gap: 0,\n indexAttribute: "data-index",\n initialMeasurementsCache: [],\n lanes: 1,\n isScrollingResetDelay: 150,\n enabled: !0,\n isRtl: !1,\n useScrollendEvent: !0,\n ...o\n };\n }, this.notify = (o) => {\n var n, r;\n (r = (n = this.options).onChange) == null || r.call(n, this, o);\n }, this.maybeNotify = x3(\n () => (this.calculateRange(), [\n this.isScrolling,\n this.range ? this.range.startIndex : null,\n this.range ? this.range.endIndex : null\n ]),\n (o) => {\n this.notify(o);\n },\n {\n key: false && 0,\n debug: () => this.options.debug,\n initialDeps: [\n this.isScrolling,\n this.range ? this.range.startIndex : null,\n this.range ? this.range.endIndex : null\n ]\n }\n ), this.cleanup = () => {\n this.unsubs.filter(Boolean).forEach((o) => o()), this.unsubs = [], this.observer.disconnect(), this.scrollElement = null, this.targetWindow = null;\n }, this._didMount = () => () => {\n this.cleanup();\n }, this._willUpdate = () => {\n var o;\n const n = this.options.enabled ? this.options.getScrollElement() : null;\n if (this.scrollElement !== n) {\n if (this.cleanup(), !n) {\n this.maybeNotify();\n return;\n }\n this.scrollElement = n, this.scrollElement && "ownerDocument" in this.scrollElement ? this.targetWindow = this.scrollElement.ownerDocument.defaultView : this.targetWindow = ((o = this.scrollElement) == null ? void 0 : o.window) ?? null, this.elementsCache.forEach((r) => {\n this.observer.observe(r);\n }), this._scrollToOffset(this.getScrollOffset(), {\n adjustments: void 0,\n behavior: void 0\n }), this.unsubs.push(\n this.options.observeElementRect(this, (r) => {\n this.scrollRect = r, this.maybeNotify();\n })\n ), this.unsubs.push(\n this.options.observeElementOffset(this, (r, i) => {\n this.scrollAdjustments = 0, this.scrollDirection = i ? this.getScrollOffset() < r ? "forward" : "backward" : null, this.scrollOffset = r, this.isScrolling = i, this.maybeNotify();\n })\n );\n }\n }, this.getSize = () => this.options.enabled ? (this.scrollRect = this.scrollRect ?? this.options.initialRect, this.scrollRect[this.options.horizontal ? "width" : "height"]) : (this.scrollRect = null, 0), this.getScrollOffset = () => this.options.enabled ? (this.scrollOffset = this.scrollOffset ?? (typeof this.options.initialOffset == "function" ? this.options.initialOffset() : this.options.initialOffset), this.scrollOffset) : (this.scrollOffset = null, 0), this.getFurthestMeasurement = (o, n) => {\n const r = /* @__PURE__ */ new Map(), i = /* @__PURE__ */ new Map();\n for (let a = n - 1; a >= 0; a--) {\n const s = o[a];\n if (r.has(s.lane))\n continue;\n const l = i.get(\n s.lane\n );\n if (l == null || s.end > l.end ? i.set(s.lane, s) : s.end < l.end && r.set(s.lane, !0), r.size === this.options.lanes)\n break;\n }\n return i.size === this.options.lanes ? Array.from(i.values()).sort((a, s) => a.end === s.end ? a.index - s.index : a.end - s.end)[0] : void 0;\n }, this.getMeasurementOptions = x3(\n () => [\n this.options.count,\n this.options.paddingStart,\n this.options.scrollMargin,\n this.options.getItemKey,\n this.options.enabled\n ],\n (o, n, r, i, a) => (this.pendingMeasuredCacheIndexes = [], {\n count: o,\n paddingStart: n,\n scrollMargin: r,\n getItemKey: i,\n enabled: a\n }),\n {\n key: !1\n }\n ), this.getMeasurements = x3(\n () => [this.getMeasurementOptions(), this.itemSizeCache],\n ({ count: o, paddingStart: n, scrollMargin: r, getItemKey: i, enabled: a }, s) => {\n if (!a)\n return this.measurementsCache = [], this.itemSizeCache.clear(), [];\n this.measurementsCache.length === 0 && (this.measurementsCache = this.options.initialMeasurementsCache, this.measurementsCache.forEach((d) => {\n this.itemSizeCache.set(d.key, d.size);\n }));\n const l = this.pendingMeasuredCacheIndexes.length > 0 ? Math.min(...this.pendingMeasuredCacheIndexes) : 0;\n this.pendingMeasuredCacheIndexes = [];\n const p = this.measurementsCache.slice(0, l);\n for (let d = l; d < o; d++) {\n const b = i(d), M = this.options.lanes === 1 ? p[d - 1] : this.getFurthestMeasurement(p, d), u = M ? M.end + this.options.gap : n + r, A = s.get(b), z = typeof A == "number" ? A : this.options.estimateSize(d), f = u + z, O = M ? M.lane : d % this.options.lanes;\n p[d] = {\n index: d,\n start: u,\n size: z,\n end: f,\n key: b,\n lane: O\n };\n }\n return this.measurementsCache = p, p;\n },\n {\n key: false && 0,\n debug: () => this.options.debug\n }\n ), this.calculateRange = x3(\n () => [this.getMeasurements(), this.getSize(), this.getScrollOffset()],\n (o, n, r) => this.range = o.length > 0 && n > 0 ? FP({\n measurements: o,\n outerSize: n,\n scrollOffset: r\n }) : null,\n {\n key: false && 0,\n debug: () => this.options.debug\n }\n ), this.getIndexes = x3(\n () => [\n this.options.rangeExtractor,\n this.calculateRange(),\n this.options.overscan,\n this.options.count\n ],\n (o, n, r, i) => n === null ? [] : o({\n startIndex: n.startIndex,\n endIndex: n.endIndex,\n overscan: r,\n count: i\n }),\n {\n key: false && 0,\n debug: () => this.options.debug\n }\n ), this.indexFromElement = (o) => {\n const n = this.options.indexAttribute, r = o.getAttribute(n);\n return r ? parseInt(r, 10) : (console.warn(\n `Missing attribute name \'${n}={index}\' on measured element.`\n ), -1);\n }, this._measureElement = (o, n) => {\n const r = this.indexFromElement(o), i = this.measurementsCache[r];\n if (!i)\n return;\n const a = i.key, s = this.elementsCache.get(a);\n s !== o && (s && this.observer.unobserve(s), this.observer.observe(o), this.elementsCache.set(a, o)), o.isConnected && this.resizeItem(r, this.options.measureElement(o, n, this));\n }, this.resizeItem = (o, n) => {\n const r = this.measurementsCache[o];\n if (!r)\n return;\n const i = this.itemSizeCache.get(r.key) ?? r.size, a = n - i;\n a !== 0 && ((this.shouldAdjustScrollPositionOnItemSizeChange !== void 0 ? this.shouldAdjustScrollPositionOnItemSizeChange(r, a, this) : r.start < this.getScrollOffset() + this.scrollAdjustments) && ( false && 0, this._scrollToOffset(this.getScrollOffset(), {\n adjustments: this.scrollAdjustments += a,\n behavior: void 0\n })), this.pendingMeasuredCacheIndexes.push(r.index), this.itemSizeCache = new Map(this.itemSizeCache.set(r.key, n)), this.notify(!1));\n }, this.measureElement = (o) => {\n if (!o) {\n this.elementsCache.forEach((n, r) => {\n n.isConnected || (this.observer.unobserve(n), this.elementsCache.delete(r));\n });\n return;\n }\n this._measureElement(o, void 0);\n }, this.getVirtualItems = x3(\n () => [this.getIndexes(), this.getMeasurements()],\n (o, n) => {\n const r = [];\n for (let i = 0, a = o.length; i < a; i++) {\n const s = o[i], l = n[s];\n r.push(l);\n }\n return r;\n },\n {\n key: false && 0,\n debug: () => this.options.debug\n }\n ), this.getVirtualItemForOffset = (o) => {\n const n = this.getMeasurements();\n if (n.length !== 0)\n return ga(\n n[wb(\n 0,\n n.length - 1,\n (r) => ga(n[r]).start,\n o\n )]\n );\n }, this.getOffsetForAlignment = (o, n) => {\n const r = this.getSize(), i = this.getScrollOffset();\n n === "auto" && (o <= i ? n = "start" : o >= i + r ? n = "end" : n = "start"), n === "start" ? o = o : n === "end" ? o = o - r : n === "center" && (o = o - r / 2);\n const a = this.options.horizontal ? "scrollWidth" : "scrollHeight", l = (this.scrollElement ? "document" in this.scrollElement ? this.scrollElement.document.documentElement[a] : this.scrollElement[a] : 0) - r;\n return Math.max(Math.min(l, o), 0);\n }, this.getOffsetForIndex = (o, n = "auto") => {\n o = Math.max(0, Math.min(o, this.options.count - 1));\n const r = this.measurementsCache[o];\n if (!r)\n return;\n const i = this.getSize(), a = this.getScrollOffset();\n if (n === "auto")\n if (r.end >= a + i - this.options.scrollPaddingEnd)\n n = "end";\n else if (r.start <= a + this.options.scrollPaddingStart)\n n = "start";\n else\n return [a, n];\n const s = n === "end" ? r.end + this.options.scrollPaddingEnd : r.start - this.options.scrollPaddingStart;\n return [this.getOffsetForAlignment(s, n), n];\n }, this.isDynamicMode = () => this.elementsCache.size > 0, this.cancelScrollToIndex = () => {\n this.scrollToIndexTimeoutId !== null && this.targetWindow && (this.targetWindow.clearTimeout(this.scrollToIndexTimeoutId), this.scrollToIndexTimeoutId = null);\n }, this.scrollToOffset = (o, { align: n = "start", behavior: r } = {}) => {\n this.cancelScrollToIndex(), r === "smooth" && this.isDynamicMode() && console.warn(\n "The `smooth` scroll behavior is not fully supported with dynamic size."\n ), this._scrollToOffset(this.getOffsetForAlignment(o, n), {\n adjustments: void 0,\n behavior: r\n });\n }, this.scrollToIndex = (o, { align: n = "auto", behavior: r } = {}) => {\n o = Math.max(0, Math.min(o, this.options.count - 1)), this.cancelScrollToIndex(), r === "smooth" && this.isDynamicMode() && console.warn(\n "The `smooth` scroll behavior is not fully supported with dynamic size."\n );\n const i = this.getOffsetForIndex(o, n);\n if (!i)\n return;\n const [a, s] = i;\n this._scrollToOffset(a, { adjustments: void 0, behavior: r }), r !== "smooth" && this.isDynamicMode() && this.targetWindow && (this.scrollToIndexTimeoutId = this.targetWindow.setTimeout(() => {\n if (this.scrollToIndexTimeoutId = null, this.elementsCache.has(\n this.options.getItemKey(o)\n )) {\n const [p] = ga(\n this.getOffsetForIndex(o, s)\n );\n EP(p, this.getScrollOffset()) || this.scrollToIndex(o, { align: s, behavior: r });\n } else\n this.scrollToIndex(o, { align: s, behavior: r });\n }));\n }, this.scrollBy = (o, { behavior: n } = {}) => {\n this.cancelScrollToIndex(), n === "smooth" && this.isDynamicMode() && console.warn(\n "The `smooth` scroll behavior is not fully supported with dynamic size."\n ), this._scrollToOffset(this.getScrollOffset() + o, {\n adjustments: void 0,\n behavior: n\n });\n }, this.getTotalSize = () => {\n var o;\n const n = this.getMeasurements();\n let r;\n return n.length === 0 ? r = this.options.paddingStart : r = this.options.lanes === 1 ? ((o = n[n.length - 1]) == null ? void 0 : o.end) ?? 0 : Math.max(\n ...n.slice(-this.options.lanes).map((i) => i.end)\n ), Math.max(\n r - this.options.scrollMargin + this.options.paddingEnd,\n 0\n );\n }, this._scrollToOffset = (o, {\n adjustments: n,\n behavior: r\n }) => {\n this.options.scrollToFn(o, { behavior: r, adjustments: n }, this);\n }, this.measure = () => {\n this.itemSizeCache = /* @__PURE__ */ new Map(), this.notify(!1);\n }, this.setOptions(t);\n }\n}\nconst wb = (e, t, o, n) => {\n for (; e <= t; ) {\n const r = (e + t) / 2 | 0, i = o(r);\n if (i < n)\n e = r + 1;\n else if (i > n)\n t = r - 1;\n else\n return r;\n }\n return e > 0 ? e - 1 : 0;\n};\nfunction FP({\n measurements: e,\n outerSize: t,\n scrollOffset: o\n}) {\n const n = e.length - 1, i = wb(0, n, (s) => e[s].start, o);\n let a = i;\n for (; a < n && e[a].end < o + t; )\n a++;\n return { startIndex: i, endIndex: a };\n}\nconst XP = typeof document < "u" ? react__WEBPACK_IMPORTED_MODULE_0__.useLayoutEffect : react__WEBPACK_IMPORTED_MODULE_0__.useEffect;\nfunction UP(e) {\n const t = react__WEBPACK_IMPORTED_MODULE_0__.useReducer(() => ({}), {})[1], o = {\n ...e,\n onChange: (r, i) => {\n var a;\n i ? (0,react_dom__WEBPACK_IMPORTED_MODULE_2__.flushSync)(t) : t(), (a = e.onChange) == null || a.call(e, r, i);\n }\n }, [n] = react__WEBPACK_IMPORTED_MODULE_0__.useState(\n () => new PP(o)\n );\n return n.setOptions(o), react__WEBPACK_IMPORTED_MODULE_0__.useEffect(() => n._didMount(), []), XP(() => n._willUpdate()), n;\n}\nfunction Mc(e) {\n return UP({\n observeElementRect: TP,\n observeElementOffset: DP,\n scrollToFn: VP,\n ...e\n });\n}\nconst L5 = styled_components__WEBPACK_IMPORTED_MODULE_1___default().div(\n ({ theme: e }) => (0,styled_components__WEBPACK_IMPORTED_MODULE_1__.css)`\n padding: ${e.spacings.sp4} 0;\n cursor: col-resize;\n `\n), YP = styled_components__WEBPACK_IMPORTED_MODULE_1___default().div(\n ({ theme: e }) => (0,styled_components__WEBPACK_IMPORTED_MODULE_1__.css)`\n width: 1px;\n height: 2rem;\n background-color: ${e.colors.dataTable.dataTableBorderCell};\n `\n);\n(styled_components__WEBPACK_IMPORTED_MODULE_1___default().div)`\n padding: 0 ${({ theme: e }) => e.spacings.sp16};\n background-color: ${({ theme: e }) => e.colors.white};\n`;\nconst GP = ({ ...e }) => /* @__PURE__ */ c(L5, { ...e, children: /* @__PURE__ */ c(YP, {}) }), QP = (0,styled_components__WEBPACK_IMPORTED_MODULE_1__.css)`\n ${({ theme: e }) => (0,styled_components__WEBPACK_IMPORTED_MODULE_1__.css)`\n font-family: ${e.fontFamily.base};\n font-size: ${e.typography.t12};\n font-weight: ${e.fontWeight.regular};\n line-height: ${e.lineHeight.lh18};\n color: ${e.colors.black};\n //user-select: none;\n `}\n`, ZP = styled_components__WEBPACK_IMPORTED_MODULE_1___default().div(\n ({\n theme: { colors: e, GLOBAL_ITEM_HEIGHT_CONDENSED: t, spacings: o },\n tableRowCell: n,\n loading: r\n }) => (0,styled_components__WEBPACK_IMPORTED_MODULE_1__.css)`\n width: 100%;\n height: ${n ? "24px" : t};\n background-color: transparent;\n box-sizing: border-box;\n padding: 2px ${o.sp4};\n border-bottom: ${n || r ? "none" : `1px solid ${e.dataTable.dataTableBorderHeader}`};\n ${QP}\n `\n), jP = (styled_components__WEBPACK_IMPORTED_MODULE_1___default().div)`\n height: 100%;\n display: flex;\n justify-content: center;\n flex-direction: column;\n`, xb = ({\n children: e,\n tableRowCell: t,\n loading: o,\n ...n\n}) => /* @__PURE__ */ c(ZP, { tableRowCell: t, loading: o, ...n, children: /* @__PURE__ */ c(jP, { children: e }) }), KP = styled_components__WEBPACK_IMPORTED_MODULE_1___default()(xb)(\n ({ theme: { transitions: e, spacings: t, colors: o }, loading: n }) => (0,styled_components__WEBPACK_IMPORTED_MODULE_1__.css)`\n position: ${n ? "static" : "relative"};\n padding: 0 8px;\n background-color: ${n ? "transparent" : `${o.dataTable.dataTableBgHeader}`};\n border-right: ${n ? "none" : `1px solid ${o.dataTable.dataTableBorderCell}`};\n &:hover {\n .icon-system {\n opacity: 1;\n transition: ${e.base};\n }\n }\n\n ${n && (0,styled_components__WEBPACK_IMPORTED_MODULE_1__.css)`\n & .skeleton-container {\n div {\n opacity: 0;\n }\n }\n `}\n\n .icon-system {\n width: auto;\n opacity: 0;\n transition: ${e.base};\n }\n\n ${Rb} {\n position: absolute;\n top: 0;\n right: 0;\n bottom: 0;\n pointer-events: none;\n }\n\n ${L5} {\n pointer-events: all;\n padding-left: ${t.sp16};\n }\n\n ${Wb} {\n width: 100%;\n /* padding-right: ${t.sp24}; */\n }\n\n /* &:last-child {\n ${L5} {\n display: none;\n }\n } */\n `\n), Wb = styled_components__WEBPACK_IMPORTED_MODULE_1___default().div(\n ({ theme: { mixins: e, typography: t, fontWeight: o, colors: n }, fontSize: r }) => (0,styled_components__WEBPACK_IMPORTED_MODULE_1__.css)`\n ${e.ellipsis}\n font-size: ${r === "xs" ? t.t10 : "11px"};\n font-weight: ${o.regular};\n color: ${n.textIcon.textPrimary};\n text-align: left;\n `\n), Rb = (styled_components__WEBPACK_IMPORTED_MODULE_1___default().div)`\n display: flex;\n align-items: center;\n`;\n(styled_components__WEBPACK_IMPORTED_MODULE_1___default().div)`\n width: 120px;\n`;\nconst JP = styled_components__WEBPACK_IMPORTED_MODULE_1___default().div(\n ({ theme: { colors: e } }) => (0,styled_components__WEBPACK_IMPORTED_MODULE_1__.css)`\n .icon-system {\n color: ${e.textIcon.textPrimary};\n }\n `\n), Ac = (e) => {\n const {\n dividerProps: t,\n sortClick: o,\n children: n,\n isSorted: r,\n hasSorting: i,\n loading: a,\n fontSize: s,\n renderSortIcon: l,\n ...p\n } = e;\n return /* @__PURE__ */ e1(KP, { forwardedAs: "th", loading: a, ...p, children: [\n /* @__PURE__ */ c(Wb, { fontSize: s, ...o, children: n }),\n /* @__PURE__ */ e1(Rb, { children: [\n i && l && /* @__PURE__ */ c(JP, { children: /* @__PURE__ */ c(Z1, { name: r ? "ArrowBottom" : "ArrowUp", size: "xxs" }) }),\n /* @__PURE__ */ c(GP, { ...t })\n ] })\n ] });\n}, Bb = styled_components__WEBPACK_IMPORTED_MODULE_1___default()(xb)`\n padding: 0 8px;\n`, _P = styled_components__WEBPACK_IMPORTED_MODULE_1___default().div(\n ({ theme: { mixins: e, typography: t, fontWeight: o, colors: n }, fontSize: r }) => (0,styled_components__WEBPACK_IMPORTED_MODULE_1__.css)`\n ${e.ellipsis}\n font-size: ${r === "xs" ? t.t10 : "11px"};\n font-weight: ${o.light};\n color: ${n.textIcon.textBody};\n `\n), uc = ({\n children: e,\n style: t,\n fontSize: o,\n ...n\n}) => /* @__PURE__ */ c(Bb, { forwardedAs: "td", tableRowCell: !0, style: t, ...n, children: /* @__PURE__ */ e1(_P, { fontSize: o, children: [\n e,\n " "\n] }) }), zc = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAMAAAAECAYAAABLLYUHAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAA4SURBVHgBFYoxEQAwCANLFSChkiqpLjimWOzKAoQMSe7vZTEANCIg7n6rCmS6M1N5/hgyZWaH8xoY0hGjnTH2YAAAAABJRU5ErkJggg==", hc = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAMAAAAECAYAAABLLYUHAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAA/SURBVHgBATQAy/8AmJiYn5eXlyAAAAAAAZiYmP8AAADg////gQIAAAAAAAAAEAICAvAEAAAAsAcHB2FhYWHwzmIPuHsaJu8AAAAASUVORK5CYII=", Oc = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAQAAAADCAYAAAC09K7GAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAA+SURBVHgBATMAzP8AAAAAAJeXl2CZmZlQAAAAAAGXl5cgAQEBvwAAABAHBwchBAEBAX8AAAAgAAAAAPr6+p8ctQtiqvlgDAAAAABJRU5ErkJggg==", fc = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAQAAAADCAYAAAC09K7GAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAA4SURBVHgBJYhRDQAgCAWf/lCPCBrFFMCfDaxkBBsgym233a6o6gLASGYloh5xwu3u428zYxFpry8+sg1vQIIZMwAAAABJRU5ErkJggg==";\nstyled_components__WEBPACK_IMPORTED_MODULE_1___default().div(() => (0,styled_components__WEBPACK_IMPORTED_MODULE_1__.css)`\n max-width: 95vw;\n min-width: 95vw;\n `);\nconst $P = styled_components__WEBPACK_IMPORTED_MODULE_1___default().div(() => (0,styled_components__WEBPACK_IMPORTED_MODULE_1__.css)``), eF = styled_components__WEBPACK_IMPORTED_MODULE_1___default().div(({ theme: { colors: e, borderRadius: t }, loading: o, $hideOverflow: n }) => (0,styled_components__WEBPACK_IMPORTED_MODULE_1__.css)`\n border: ${o ? "transparent" : `1px solid ${e.border.borderTertiary}`};\n max-height: 500px;\n max-width: 100%;\n overflow: ${o ? "hidden" : "auto"};\n border-top-left-radius: ${t.base};\n border-top-right-radius: ${t.base};\n position: relative;\n\n ${n && (0,styled_components__WEBPACK_IMPORTED_MODULE_1__.css)`\n overflow: hidden;\n `}\n\n /* sticky columns */\n .sticky {\n position: sticky;\n left: 0;\n z-index: 9;\n background-color: ${e.dataTable.dataTableBgFilter};\n th {\n background: ${e.dataTable.dataTableBgHeader};\n }\n }\n\n /* Scrollbar */\n\n &::-webkit-scrollbar {\n width: 12px;\n height: 12px;\n }\n\n &::-webkit-scrollbar-corner {\n border: 1px solid #e1e3e1;\n }\n\n &::-webkit-scrollbar-button:start {\n display: none;\n }\n &::-webkit-scrollbar-button:end {\n display: block;\n }\n\n &::-webkit-scrollbar:horizontal:corner-present {\n border-right-width: 0px;\n }\n\n /* &::-webkit-scrollbar-thumb:horizontal {\n background-color: ${e.veryLightGrey};\n border-radius: ${t.lg};\n min-width: 20px;\n height: 30%;\n } */\n\n &::-webkit-scrollbar-thumb:horizontal {\n background-color: ${e.scroll.scrollBgDefault};\n background-clip: content-box;\n border: 2px solid transparent;\n box-shadow: inset 0 0 0 4px ${e.scroll.scrollBgDefault};\n border-radius: ${t.lg};\n }\n\n &::-webkit-scrollbar-track-piece:horizontal:start {\n margin-left: 0px;\n }\n &::-webkit-scrollbar-track-piece:horizontal:end {\n margin-right: 0px;\n }\n\n &::-webkit-scrollbar-track-piece:horizontal:decrement {\n background-color: ${e.scroll.scrollBgPrimary};\n border-top: 1px solid ${e.border.borderPrimary};\n background-clip: content-box;\n }\n\n &::-webkit-scrollbar-track-piece:horizontal:increment {\n background-color: ${e.scroll.scrollBgPrimary};\n border-top: 1px solid ${e.border.borderPrimary};\n background-clip: content-box;\n }\n\n &::-webkit-scrollbar-button:horizontal {\n height: 12px;\n }\n\n &::-webkit-scrollbar-button:horizontal:decrement {\n background-image: url(${zc});\n background-size: inherit;\n background-repeat: no-repeat;\n background-position: 5px 3px, 0 0;\n height: 16px;\n background-color: ${e.backgrounds.bgPrimary};\n border: 1px solid ${e.border.borderTertiary};\n }\n\n &::-webkit-scrollbar-button:horizontal:decrement:active {\n background-image: url(${zc});\n background-color: ${e.veryLightGrey};\n }\n\n &::-webkit-scrollbar-button:horizontal:increment {\n background-image: url(${hc});\n background-repeat: no-repeat;\n background-size: inherit;\n background-position: 5px 3px, 0 0;\n background-color: ${e.backgrounds.bgPrimary};\n height: 14px;\n border: 1px solid ${e.border.borderTertiary};\n }\n\n &::-webkit-scrollbar-button:horizontal:increment:active {\n background-image: url(${hc});\n background-color: ${e.veryLightGrey};\n }\n\n &::-webkit-scrollbar-button:horizontal:end:increment:corner-present {\n border-right-width: 0;\n }\n\n &::-webkit-scrollbar:vertical:corner-present {\n border-bottom-width: 0;\n }\n\n /* &::-webkit-scrollbar-thumb:vertical {\n background-color: ${e.veryLightGrey};\n border-radius: ${t.lg};\n min-height: 20px;\n } */\n\n &::-webkit-scrollbar-thumb:vertical {\n background-color: transparent;\n background-clip: content-box;\n border: 2px solid transparent;\n box-shadow: inset 0 0 0 4px ${e.veryLightGrey};\n border-radius: ${t.lg};\n }\n\n &::-webkit-scrollbar-track-piece:vertical:start {\n margin-top: 0px;\n }\n &::-webkit-scrollbar-track-piece:vertical:end {\n margin-bottom: 0px;\n }\n\n &::-webkit-scrollbar-track-piece:vertical:decrement {\n background-color: ${e.white};\n border-left: 1px solid #f2f2f2;\n }\n &::-webkit-scrollbar-track-piece:vertical:increment {\n background-color: ${e.white};\n border-left: 1px solid #f2f2f2;\n }\n &::-webkit-scrollbar-button:vertical {\n height: 13px;\n }\n &::-webkit-scrollbar-button:vertical:decrement {\n background-image: url(${Oc});\n background-size: inherit;\n background-repeat: no-repeat;\n background-position: 3px 3px, 0 0;\n height: 13px;\n background-color: #f8f8f8;\n border: 1px solid #e1e3e1;\n }\n &::-webkit-scrollbar-button:vertical:decrement:active {\n background-image: url(${Oc});\n background-color: ${e.veryLightGrey};\n }\n &::-webkit-scrollbar-button:vertical:increment {\n background-image: url(${fc});\n background-size: inherit;\n background-repeat: no-repeat;\n background-position: 3px 3px, 0 0;\n height: 12px;\n background-color: #f8f8f8;\n border: 1px solid #e1e3e1;\n }\n &::-webkit-scrollbar-button:vertical:increment:active {\n background-image: url(${fc});\n background-color: ${e.veryLightGrey};\n }\n &::-webkit-scrollbar-button:vertical:end:increment:corner-present {\n border-bottom-width: 0;\n height: 11px;\n }\n &::-webkit-scrollbar:disabled {\n -webkit-border-image: none;\n display: none;\n }\n\n /* Scrollbar */\n `), tF = styled_components__WEBPACK_IMPORTED_MODULE_1___default().div(({ theme: { borderRadius: e } }) => (0,styled_components__WEBPACK_IMPORTED_MODULE_1__.css)`\n width: fit-content;\n border-radius: ${e.base};\n position: relative;\n border-spacing: 0px;\n\n .table-scroll-container {\n padding-right: 0px;\n }\n width: auto;\n `), oF = (styled_components__WEBPACK_IMPORTED_MODULE_1___default().div)`\n width: 100%;\n position: sticky;\n top: 0;\n z-index: 1;\n table-layout: fixed;\n`, rF = (styled_components__WEBPACK_IMPORTED_MODULE_1___default().div)`\n .table-scroll-container {\n padding-right: 0px !important;\n }\n`, nF = (styled_components__WEBPACK_IMPORTED_MODULE_1___default().div)`\n width: 100%;\n position: sticky;\n bottom: 0;\n z-index: 1;\n`, gc = styled_components__WEBPACK_IMPORTED_MODULE_1___default().div(\n ({ theme: { colors: e }, loading: t }) => (0,styled_components__WEBPACK_IMPORTED_MODULE_1__.css)`\n display: inline-flex;\n width: 100%;\n background: ${t ? "transparent" : e.dataTable.dataTableBgPrimary};\n border-top: ${t ? "transparent" : `1px solid ${e.dataTable.dataTableBorderCell}`};\n &:first-child {\n border-top: none;\n }\n .table-body-column {\n border-right: ${t ? "transparent" : `1px solid ${e.dataTable.dataTableBorderCell}`};\n }\n &:hover {\n ${!t && (0,styled_components__WEBPACK_IMPORTED_MODULE_1__.css)`\n background-color: ${e.backgrounds.bgHoverPrimary} !important;\n `}\n }\n `\n), iF = styled_components__WEBPACK_IMPORTED_MODULE_1___default().div(\n () => (0,styled_components__WEBPACK_IMPORTED_MODULE_1__.css)`\n display: inline-flex;\n width: 100%;\n ${Bb} {\n background-color: #fbfbfb;\n }\n `\n), aF = styled_components__WEBPACK_IMPORTED_MODULE_1___default().div(\n ({ theme: { colors: e }, isLoading: t }) => (0,styled_components__WEBPACK_IMPORTED_MODULE_1__.css)`\n display: inline-flex;\n width: 100%;\n background: ${t ? "transparent" : e.dataTable.dataTableBgHeader};\n `\n), sF = styled_components__WEBPACK_IMPORTED_MODULE_1___default().div(\n () => (0,styled_components__WEBPACK_IMPORTED_MODULE_1__.css)`\n display: flex;\n &.header-last-row {\n display: flex;\n flex-direction: column;\n }\n `\n);\n(styled_components__WEBPACK_IMPORTED_MODULE_1___default().div)`\n display: flex;\n align-items: center;\n justify-content: flex-start;\n gap: 4px;\n`;\nconst Sb = (styled_components__WEBPACK_IMPORTED_MODULE_1___default().div)`\n display: flex;\n align-items: center;\n justify-content: center;\n min-height: 400px;\n\n ${(e) => e.filterState && (0,styled_components__WEBPACK_IMPORTED_MODULE_1__.css)`\n width: 100vw;\n `}\n ${(e) => !e.filterState && (0,styled_components__WEBPACK_IMPORTED_MODULE_1__.css)`\n max-width: 100%;\n `}\n`, Eb = (styled_components__WEBPACK_IMPORTED_MODULE_1___default().div)`\n display: flex;\n align-items: center;\n justify-content: center;\n flex-direction: column;\n width: 262px;\n text-align: center;\n`, kb = styled_components__WEBPACK_IMPORTED_MODULE_1___default().h1(\n ({ theme: { colors: e, typography: t, fontWeight: o } }) => (0,styled_components__WEBPACK_IMPORTED_MODULE_1__.css)`\n font-size: ${t.t14};\n font-weight: ${o.medium};\n color: ${e.textIcon.textPrimary};\n margin-top: 24px;\n `\n), Nb = styled_components__WEBPACK_IMPORTED_MODULE_1___default().p(\n ({ theme: { colors: e, typography: t, fontWeight: o } }) => (0,styled_components__WEBPACK_IMPORTED_MODULE_1__.css)`\n font-size: ${t.t12};\n font-weight: ${o.regular};\n color: ${e.textIcon.textLowemphasis};\n margin: 0;\n line-height: 20px;\n `\n), cF = (styled_components__WEBPACK_IMPORTED_MODULE_1___default().div)`\n margin-top: 10px;\n`, lF = styled_components__WEBPACK_IMPORTED_MODULE_1___default().td(\n ({ theme: { colors: e } }) => (0,styled_components__WEBPACK_IMPORTED_MODULE_1__.css)`\n padding: 0 10px;\n color: ${e.textIcon.textBody};\n `\n), pF = (styled_components__WEBPACK_IMPORTED_MODULE_1___default().div)`\n display: flex;\n`;\nfunction dF({\n value: e,\n onChange: t,\n debounce: o = 500,\n columnFilters: n,\n ...r\n}) {\n const [i, a] = react__WEBPACK_IMPORTED_MODULE_0___default().useState(e);\n return react__WEBPACK_IMPORTED_MODULE_0___default().useEffect(() => {\n a(e);\n }, [e]), react__WEBPACK_IMPORTED_MODULE_0___default().useEffect(() => {\n n.length === 0 ? a("") : a(e);\n }, [n]), react__WEBPACK_IMPORTED_MODULE_0___default().useEffect(() => {\n const l = setTimeout(() => {\n t(i);\n }, o);\n return () => clearTimeout(l);\n }, [i]), /* @__PURE__ */ c(s0, { children: /* @__PURE__ */ c(\n Y2,\n {\n ...r,\n value: i,\n onChange: (l) => {\n var p;\n return a((p = l == null ? void 0 : l.target) == null ? void 0 : p.value);\n },\n handleClearFn: () => a("")\n }\n ) });\n}\nconst bF = styled_components__WEBPACK_IMPORTED_MODULE_1___default().div(\n ({ theme: { typography: e, fontWeight: t, colors: o }, fontSize: n }) => (0,styled_components__WEBPACK_IMPORTED_MODULE_1__.css)`\n display: flex;\n .input-container {\n width: 100%;\n }\n & label {\n display: none;\n }\n & input {\n max-height: 22px;\n padding: 5px 8px;\n background-color: ${o.dataTable.dataTableBgFilter};\n width: 100%;\n font-size: ${n === "xs" ? e.t10 : "11px"};\n font-weight: ${t.light};\n border: 1px solid ${o.border.borderTertiary};\n }\n\n & .input-clear-btn {\n top: 2px;\n }\n `\n), MF = (0,react__WEBPACK_IMPORTED_MODULE_0__.memo)(\n ({\n column: e,\n fontSize: t,\n columnFilters: o\n }) => {\n const n = e.getFilterValue();\n return /* @__PURE__ */ c(bF, { fontSize: t, children: /* @__PURE__ */ c(\n dF,\n {\n value: n ?? "",\n onChange: e.setFilterValue,\n columnFilters: o\n }\n ) });\n }\n), AF = () => /* @__PURE__ */ c("svg", { viewBox: "0 0 48 48", fill: "none", xmlns: "http://www.w3.org/2000/svg", children: /* @__PURE__ */ c(\n "path",\n {\n fill: "currentColor",\n fillRule: "evenodd",\n clipRule: "evenodd",\n d: "M23.3847 2H24.8282V39.7475H23.3847V2ZM0 7.05219V28.9934C0 30.2204 1.01045 31.1586 2.16525 31.1586H4.76357V39.3866H6.06272L14.002 31.1586H21.0029V29.7151H13.4246L6.20707 37.2213V29.7151H2.16525C1.7322 29.7151 1.4435 29.3543 1.4435 28.9934V7.05219C1.4435 6.61914 1.80437 6.33044 2.16525 6.33044H21.0751V4.88694H2.16525C1.01045 4.81476 0 5.82521 0 7.05219ZM45.9033 10.9496H26.9935V12.3931H45.9033C46.3364 12.3931 46.6251 12.754 46.6251 13.1149V35.0561C46.6251 35.4891 46.2642 35.7778 45.9033 35.7778H41.7893V43.284L34.5718 35.7778H26.9935V37.2213H33.9944L41.9337 45.4493H43.2328V37.2213H45.8311C47.0581 37.2213 47.9964 36.2109 47.9964 35.0561V13.1149C48.0685 11.9601 47.0581 10.9496 45.9033 10.9496ZM10.1767 24.0855L8.80536 23.6525L12.0532 12.6097H14.8681L18.1881 23.6525L16.8168 24.0855L15.5176 19.6828H11.4758L10.1767 24.0855ZM15.0846 18.2393L13.8576 14.0532H13.1359L11.9089 18.2393H15.0846ZM37.9641 20.982C37.9641 19.2498 36.5927 17.8785 34.8605 17.8785H31.757V22.7142V24.1577V28.9934H34.8605C36.5927 28.9934 37.9641 27.6221 37.9641 25.8899C37.9641 24.8795 37.531 24.0134 36.8092 23.436C37.531 22.8586 37.9641 21.9925 37.9641 20.982ZM36.5206 25.8177C36.5206 26.756 35.7266 27.5499 34.7883 27.5499H33.1283V24.1577H34.7883C35.7988 24.1577 36.5206 24.8795 36.5206 25.8177ZM33.2005 22.7142V19.322H34.8605C35.7988 19.322 36.5927 20.1159 36.5927 21.0542C36.5927 21.9925 35.7988 22.7864 34.8605 22.7864H33.2005V22.7142Z"\n }\n) }), uF = () => /* @__PURE__ */ c("svg", { viewBox: "0 0 48 48", fill: "none", xmlns: "http://www.w3.org/2000/svg", children: /* @__PURE__ */ c(\n "path",\n {\n fill: "currentColor",\n fillRule: "evenodd",\n clipRule: "evenodd",\n d: "M0 23.2953C0 34.5061 9.149 43.5906 20.2953 43.5906C21.5195 43.5906 22.8081 43.4618 24.0967 43.2041L23.8389 41.9799C22.9248 42.1412 21.9209 42.2577 20.9396 42.2918V32.522C21.6054 32.547 22.2712 32.607 22.9369 32.7021L23.1302 31.4135C22.4289 31.3133 21.6886 31.252 20.9396 31.2298V23.9396H29.6362C29.6326 24.4939 29.6197 25.0389 29.5732 25.5504L30.8618 25.6148C30.9083 25.0564 30.9212 24.498 30.9248 23.9396H40.5906V23.2953C40.5906 12.0846 31.5061 3 20.2953 3C9.08457 3 0 12.149 0 23.2953ZM15.861 4.80265C12.8883 5.51367 10.1765 6.93239 7.9193 8.87096C8.84477 10.0305 10.0633 11.0242 11.4911 11.8173C12.5741 8.77108 14.0823 6.33553 15.861 4.80265ZM6.96225 9.75084C3.59729 13.061 1.44808 17.6113 1.28859 22.651H9.66952C9.72458 19.1645 10.2253 15.9191 11.068 13.1106C9.42297 12.2246 8.01723 11.0915 6.96225 9.75084ZM9.66939 23.9396H1.35303C1.51174 28.955 3.62532 33.4856 6.9618 36.7916C8.02646 35.4813 9.41989 34.3587 11.043 33.4718C10.2133 30.6706 9.72321 27.4306 9.66939 23.9396ZM7.90867 37.6686C10.1363 39.5962 12.818 41.0162 15.7734 41.7465C14.0032 40.2056 12.5131 37.7722 11.4478 34.7273C10.035 35.5232 8.82686 36.514 7.90867 37.6686ZM10.9583 23.9396H19.651V31.23C16.9774 31.3112 14.4341 31.8961 12.2279 32.8844C11.4676 30.2435 11.0116 27.1956 10.9583 23.9396ZM19.651 22.651H10.9583C11.0118 19.3844 11.4706 16.3273 12.2354 13.6804C14.4416 14.6528 16.9881 15.2178 19.651 15.2965V22.651ZM20.9396 22.651H29.6323C29.5788 19.3796 29.1187 16.3183 28.3519 13.6687C26.1573 14.6487 23.6232 15.2179 20.9396 15.2966V22.651ZM30.9212 22.651H39.2376C39.0782 17.6139 36.947 13.0659 33.5855 9.75615C32.5235 11.0801 31.1438 12.2011 29.5365 13.0816C30.373 15.8913 30.8672 19.1445 30.9212 22.651ZM32.6511 8.89543C31.7315 10.0097 30.5211 10.9814 29.109 11.7672C28.0461 8.76722 26.5688 6.36882 24.8172 4.8441C27.7591 5.57107 30.4296 6.98138 32.6511 8.89543ZM19.651 42.2575C16.7405 41.8536 14.1934 38.7344 12.6202 34.1328C14.6957 33.1886 17.1123 32.6256 19.651 32.5239V42.2575ZM19.651 13.943C17.1108 13.8639 14.7062 13.319 12.6424 12.3931C14.2174 7.82696 16.7542 4.73509 19.651 4.33314V13.943ZM20.9396 13.9423V4.33314C23.8287 4.73402 26.3597 7.81048 27.9356 12.3566C25.8609 13.2934 23.4523 13.8593 20.9396 13.9423ZM47.2269 42.431C47.1624 42.431 47.0336 42.431 46.9691 42.3665L34.9678 38.243H34.3937L33.1812 41.2069H31.6349V45.5236H29.0577C27.9624 45.5236 27.1248 44.6216 27.1248 43.5907V38.243H26.7383C25.7074 38.243 24.8698 37.4054 24.8698 36.3745V29.3517C24.8698 28.3208 25.7074 27.4832 26.7383 27.4832H34.9681L46.9691 23.3598C47.2269 23.2954 47.4846 23.2954 47.6779 23.4887C47.8712 23.6175 48 23.8752 48 24.133V41.5934C48 41.8511 47.8712 42.1088 47.6779 42.2377C47.549 42.3665 47.3557 42.431 47.2269 42.431ZM30.3463 38.3074V41.2069H30.4108V44.2994H29.1222C28.7356 44.2994 28.4134 43.9773 28.4134 43.5907V38.3074H30.3463ZM31.6349 39.9183H32.3436L33.0524 38.2431H31.6349V39.9183ZM35.6295 28.5786V37.1477L46.7114 40.9491V24.7773L35.6295 28.5786ZM26.1584 29.3517C26.1584 29.0295 26.4161 28.7718 26.7383 28.7718H34.341V36.9544H26.7383C26.4161 36.9544 26.1584 36.6967 26.1584 36.3745V29.3517Z"\n }\n) }), zF = () => /* @__PURE__ */ c("svg", { viewBox: "0 0 48 48", fill: "none", xmlns: "http://www.w3.org/2000/svg", children: /* @__PURE__ */ c(\n "path",\n {\n fill: "currentColor",\n fillRule: "evenodd",\n clipRule: "evenodd",\n d: "M43.0913 46.5905V5.24634H45.7536V0H3.07828V5.24634H5.74062V46.5905H3V48H5.74062H43.0913H45.8319V46.5905H43.0913ZM7.15012 37.1158H41.6819V42.7536H7.15012V37.1158ZM4.48778 1.33117H44.4225V3.83686H4.48778V1.33117ZM41.6819 5.24634V35.7063H7.15012V5.24634H41.6819ZM7.15012 46.5905V44.0848H41.6819V46.5905H7.15012ZM11.6134 9.8663H24.69V18.6363H11.6134V9.8663ZM13.0229 17.2268H23.2806V11.1975H13.0229V17.2268ZM11.3784 21.6118H13.336V23.0213H11.3784V21.6118ZM17.1729 21.6118H15.2153V23.0213H17.1729V21.6118ZM19.1305 21.6118H21.0881V23.0213H19.1305V21.6118ZM25.0032 21.6118H23.0456V23.0213H25.0032V21.6118ZM11.3784 25.7617H13.336V27.1712H11.3784V25.7617ZM17.1729 25.7617H15.2153V27.1712H17.1729V25.7617ZM19.1305 25.7617H21.0881V27.1712H19.1305V25.7617ZM25.0032 25.7617H23.0456V27.1712H25.0032V25.7617ZM11.3784 29.8337H13.336V31.2431H11.3784V29.8337ZM17.1729 29.8337H15.2153V31.2431H17.1729V29.8337ZM19.1305 29.8337H21.0881V31.2431H19.1305V29.8337ZM25.0032 29.8337H23.0456V31.2431H25.0032V29.8337ZM36.9054 18.6363H29.1533V11.2758H27.9005V9.8663H29.1533H36.9054H38.1582V11.2758H36.9054V18.6363ZM30.5627 14.7994V17.2268H35.5742V14.7994H30.5627ZM35.5742 13.39V11.1975H30.5627V13.39H35.5742ZM37.845 27.5627H39.1761V31.1647H27.1958V27.5627H28.5269V29.8335H37.845V27.5627Z"\n }\n) }), hF = () => /* @__PURE__ */ c("svg", { viewBox: "0 0 48 48", fill: "none", xmlns: "http://www.w3.org/2000/svg", children: /* @__PURE__ */ c(\n "path",\n {\n fill: "currentColor",\n fillRule: "evenodd",\n clipRule: "evenodd",\n d: "M20.5757 8.28237L10.4428 9.35638C10.1795 8.53516 9.41358 7.94685 8.50061 7.94685C7.3672 7.94685 6.46047 8.85356 6.46047 9.98697C6.46047 10.7755 6.89937 11.4544 7.54815 11.7945L4.24573 22.5679H0V23.7013H1.00685C1.04172 23.9949 1.09998 24.2811 1.19005 24.5513C2.04011 27.3282 5.04367 29.3116 8.4439 29.3116C11.9575 29.3116 15.0744 27.1582 15.8111 24.2113C15.8573 24.0494 15.8941 23.8782 15.9215 23.7013H16.8312V22.5679H12.6421L9.35212 11.8349C9.90152 11.5743 10.3175 11.0743 10.4736 10.4929L20.7011 9.4088C20.9129 10.165 21.3721 10.8117 21.9882 11.2585V37.9256H14.9044V40.8158H8.44394V41.9492H39.6128V40.8158H33.1524V37.9256H26.0685V11.2585C26.6984 10.8017 27.1642 10.1361 27.3694 9.3581L37.6601 10.3447C37.7704 10.9777 38.1687 11.5071 38.717 11.7945L35.4146 22.5679H31.1688V23.7013H32.1757C32.2106 23.9949 32.2688 24.2811 32.3589 24.5513C33.209 27.3282 36.2125 29.3116 39.6128 29.3116C43.1263 29.3116 46.2432 27.1582 46.9799 24.2113C47.024 24.0349 47.0595 23.8672 47.0865 23.7013H48V22.5679H43.811L40.521 11.8349C41.2248 11.5011 41.7096 10.7743 41.7096 9.98697C41.7096 8.85356 40.8029 7.94685 39.6695 7.94685C38.8089 7.94685 38.079 8.4696 37.7774 9.21742L27.4782 8.22995C27.3635 6.41132 25.8789 5 24.0284 5C22.1601 5 20.6648 6.43851 20.5757 8.28237ZM32.0189 39.0023V40.8158H16.0378V39.0023H21.9882V39.0024H26.0685V39.0023H32.0189ZM23.1216 11.7965V37.9256H24.9351V11.7965C24.6467 11.8731 24.3428 11.9138 24.0284 11.9138C23.7139 11.9138 23.41 11.8731 23.1216 11.7965ZM24.0284 6.13341C22.725 6.13341 21.7049 7.21014 21.7049 8.45689C21.7049 9.70365 22.7816 10.7804 24.0284 10.7804C25.3318 10.7804 26.3519 9.70365 26.3519 8.45689C26.3519 7.21014 25.3318 6.13341 24.0284 6.13341ZM8.44394 12.7071L11.4614 22.5679H5.42644L8.44394 12.7071ZM2.16027 23.7013H14.7715C14.7595 23.7769 14.7469 23.8524 14.7343 23.9279C14.111 26.4214 11.5041 28.1782 8.4439 28.1782C5.5537 28.1782 3.00353 26.5348 2.26681 24.2113C2.22272 24.0349 2.18721 23.8672 2.16027 23.7013ZM7.59388 9.93032C7.59388 9.42028 7.99058 9.02357 8.50061 9.02357C9.01065 9.02357 9.40733 9.42028 9.40733 9.93032C9.40733 10.4404 9.01065 10.837 8.50061 10.837C7.99058 10.837 7.59388 10.4404 7.59388 9.93032ZM39.6128 12.7071L42.6303 22.5679H36.5953L39.6128 12.7071ZM33.3291 23.7013H45.9403C45.9284 23.7765 45.9159 23.8516 45.9034 23.9268L45.9032 23.9279C45.2798 26.4214 42.673 28.1782 39.6128 28.1782C36.7225 28.1782 34.1724 26.5348 33.4357 24.2113C33.3916 24.0349 33.3561 23.8672 33.3291 23.7013ZM38.7627 9.93032C38.7627 9.42028 39.1594 9.02357 39.6695 9.02357C40.1795 9.02357 40.5762 9.42028 40.5762 9.93032C40.5762 10.4404 40.1795 10.837 39.6695 10.837C39.1594 10.837 38.7627 10.4404 38.7627 9.93032ZM23.4617 7.72022H24.5951V9.19368H23.4617V7.72022Z"\n }\n) }), OF = () => /* @__PURE__ */ c("svg", { viewBox: "0 0 48 48", fill: "none", xmlns: "http://www.w3.org/2000/svg", children: /* @__PURE__ */ c(\n "path",\n {\n fill: "currentColor",\n fillRule: "evenodd",\n clipRule: "evenodd",\n d: "M42.7265 0H44.9376V1.42645H42.7265V28.3863H24.682V38.1575L33.2407 46.5735H36.3789V48H11.5587V46.5735H14.6969L23.2556 38.1575V28.3863H5.21098V1.42645H3V0H5.21098H42.7265ZM23.2556 46.5022V40.0832L16.6939 46.5022H23.2556ZM24.682 46.5022H31.2436L24.682 40.0832V46.5022ZM6.63742 26.9599H41.3001V1.42645H6.63742V26.9599ZM34.5245 21.8247H35.737V23.2512H12.0579V21.8247H13.3417V15.0491H18.6909V21.8247H21.2585V6.13379H26.6077V21.8247H29.1753V10.9838H34.5245V21.8247ZM33.1694 12.3389H30.6017V21.7534H33.1694V12.3389ZM25.2526 7.48894H22.685V21.8247H25.2526V7.48894ZM17.4071 16.4042H14.8395V21.7534H17.4071V16.4042Z"\n }\n) }), fF = () => /* @__PURE__ */ c("svg", { viewBox: "0 0 48 48", fill: "none", xmlns: "http://www.w3.org/2000/svg", children: /* @__PURE__ */ c(\n "path",\n {\n fill: "currentColor",\n fillRule: "evenodd",\n clipRule: "evenodd",\n d: "M46.6265 41.7349V39.4939H48V45.4939H46.6265V43.1807H2.24095V5.44578H0V4H5.99999V5.44578H3.68673V41.7349H46.6265ZM5.99999 7.9759H8.02408V9.42168H5.99999V7.9759ZM19.7349 16.0001V40.5061H18.2891V17.4458H15.6868V40.5061H14.241V16.0001H19.7349ZM11.7108 27.9278V40.5061H10.2651V29.3736H7.73495V40.5061H6.28916V27.9278H11.7108ZM27.6867 40.506V20.9156H22.265V40.506H23.7108V22.3614H26.3133V40.506H27.6867ZM35.7108 16.0001V40.5061H34.2651V17.4458H31.7349V40.5061H30.2892V16.0001H35.7108ZM43.7349 40.506V28.8674H38.3132V40.506H39.6868V30.3132H42.2891V40.506H43.7349ZM5.99999 23.9519H8.02408V25.3977H5.99999V23.9519ZM12 23.9519H9.97589V25.3977H12V23.9519ZM38.0241 23.9519H40.0482V25.3977H38.0241V23.9519ZM44.0241 23.9519H42V25.3977H44.0241V23.9519ZM5.99999 16.0001H8.02408V17.4458H5.99999V16.0001ZM12 16.0001H9.97589V17.4458H12V16.0001ZM5.99999 19.976H8.02408V21.4218H5.99999V19.976ZM12 19.976H9.97589V21.4218H12V19.976ZM21.9759 16.0001H24V17.4458H21.9759V16.0001ZM28.0482 16.0001H26.0241V17.4458H28.0482V16.0001ZM38.0241 16.0001H40.0482V17.4458H38.0241V16.0001ZM44.0241 16.0001H42V17.4458H44.0241V16.0001ZM38.0241 19.976H40.0482V21.4218H38.0241V19.976ZM44.0241 19.976H42V21.4218H44.0241V19.976ZM12 7.9759H9.97589V9.42168H12V7.9759ZM14.0241 7.9759H16.0482V9.42168H14.0241V7.9759ZM20.0241 7.9759H18V9.42168H20.0241V7.9759ZM21.9759 7.9759H24V9.42168H21.9759V7.9759ZM28.0482 7.9759H26.0241V9.42168H28.0482V7.9759ZM30 7.9759H32.0241V9.42168H30V7.9759ZM36 7.9759H33.9759V9.42168H36V7.9759ZM38.0241 7.9759H40.0482V9.42168H38.0241V7.9759ZM44.0241 7.9759H42V9.42168H44.0241V7.9759ZM5.99999 12.0242H8.02408V13.4699H5.99999V12.0242ZM12 12.0242H9.97589V13.4699H12V12.0242ZM14.0241 12.0242H16.0482V13.4699H14.0241V12.0242ZM20.0241 12.0242H18V13.4699H20.0241V12.0242ZM21.9759 12.0242H24V13.4699H21.9759V12.0242ZM28.0482 12.0242H26.0241V13.4699H28.0482V12.0242ZM30 12.0242H32.0241V13.4699H30V12.0242ZM36 12.0242H33.9759V13.4699H36V12.0242ZM38.0241 12.0242H40.0482V13.4699H38.0241V12.0242ZM44.0241 12.0242H42V13.4699H44.0241V12.0242Z"\n }\n) }), gF = () => /* @__PURE__ */ c("svg", { viewBox: "0 0 48 48", fill: "none", xmlns: "http://www.w3.org/2000/svg", children: /* @__PURE__ */ c(\n "path",\n {\n fill: "currentColor",\n fillRule: "evenodd",\n clipRule: "evenodd",\n d: "M19.9613 0H0V19.9613H19.9613V0ZM18.2901 18.2901H1.57829V1.57832H18.2901V18.2901ZM41.3074 4.05109L33.1964 15.0268L34.5404 16.0199L42.6513 5.04427L41.3074 4.05109ZM10.7698 14.3907H9.0987V10.7698H5.5706V9.19149H9.0987V5.5706H10.7698V9.19149H14.2979V10.7698H10.7698V14.3907ZM9.9342 36.8588L12.441 34.3521L13.6479 35.4662L11.1412 37.9729L13.6479 40.4797L12.441 41.6867L9.9342 39.1799L7.42747 41.6867L6.3134 40.4797L8.82012 37.9729L6.3134 35.4662L7.42747 34.3521L9.9342 36.8588ZM40.3869 12.9052C40.3869 12.441 40.6654 12.0696 40.9439 11.7911C41.3153 11.5125 41.6867 11.3268 42.0581 11.4197C42.9865 11.4197 43.6364 12.2553 43.5436 13.0909C43.5436 13.5551 43.2651 13.9265 42.9865 14.205C42.708 14.4835 42.3366 14.5764 41.9652 14.5764H41.8724C41.4081 14.5764 41.0368 14.2978 40.7583 14.0193C40.4798 13.7408 40.3869 13.3694 40.3869 12.9052ZM33.795 8.63455H33.8878C34.7234 8.63455 35.3733 7.98464 35.4661 7.14905C35.4661 6.68483 35.3734 6.31347 35.0949 6.03494C34.8163 5.75641 34.4449 5.47788 33.9807 5.47788C33.1451 5.38504 32.3096 6.03494 32.3096 6.96338C32.3096 7.4276 32.4023 7.79895 32.6808 8.07748C32.9594 8.44886 33.3308 8.63455 33.795 8.63455ZM32.3096 34.5377H43.5436V36.2089H32.3096V34.5377ZM43.5436 39.8297H32.3096V41.5009H43.5436V39.8297ZM19.9613 48H0V28.0387H19.9613V48ZM18.2901 29.617H1.57829V46.3288H18.2901V29.617ZM47.9072 48H27.9458V28.0387H47.9072V48ZM46.3289 29.617H29.6171V46.3288H46.3289V29.617ZM27.9458 0V19.9613H47.9072V0H27.9458ZM46.3289 18.2901H29.6171V1.57832H46.3289V18.2901ZM24.7891 23.1181H47.8144V24.7893H24.7891V47.8145H23.118V24.7893H0.0928207V23.1181H23.118V5.01365V0.0929341H24.7891V5.01365V23.1181Z"\n }\n) }), CF = () => /* @__PURE__ */ c("svg", { viewBox: "0 0 48 48", fill: "none", xmlns: "http://www.w3.org/2000/svg", children: /* @__PURE__ */ c(\n "path",\n {\n fill: "currentColor",\n fillRule: "evenodd",\n clipRule: "evenodd",\n d: "M4.83221 3H5.99194V4.71631H7.796V36.732L6.37854 43.2672H6.05639V44.5214H4.7678V43.2672H4.44565L3.0282 36.6V8.80903H1.28859V17.5226H0V7.4888H3.0282V4.71631H4.83221V3ZM4.51007 37.3261L5.47651 41.8149L6.50741 37.3261H4.51007ZM6.63623 36.0059V6.10256H4.31679V36.0059H6.63623ZM20.7463 20.5592V19.239H17.2671L17.2671 19.2388C17.3316 18.8428 17.396 18.4468 17.396 18.0508C17.396 17.8527 17.4121 17.6547 17.4282 17.4567C17.4443 17.2586 17.4604 17.0606 17.4604 16.8626H19.7155V15.6083H17.4604V14.6842C17.4604 14.2881 17.5248 14.0241 17.5892 13.76C17.6392 13.5553 17.7279 13.3903 17.7952 13.265L17.7953 13.2648L17.7953 13.2648C17.8148 13.2285 17.8325 13.1956 17.847 13.1659C17.9758 13.0339 18.1047 12.9019 18.298 12.8359C18.4913 12.7699 18.6846 12.7698 18.8778 12.7698C19.3288 12.7698 19.7799 12.9019 20.1664 13.0999L20.553 11.8457C20.2953 11.7137 20.0376 11.6476 19.7799 11.5816C19.5222 11.5156 19.2 11.4496 18.8134 11.4496C18.3624 11.4496 17.9758 11.5156 17.6537 11.5816L17.6536 11.5817C17.3315 11.7137 17.0094 11.8457 16.7517 12.1097C16.494 12.3738 16.3007 12.7038 16.1718 13.0999C16.043 13.496 15.9785 14.0901 15.9785 14.7502V15.6083H14.8188V16.8626H15.9785C15.9785 17.9848 15.8497 19.239 15.5919 20.5592H20.7463ZM14.9476 33.4974H27.8335V34.8176H14.9476V33.4974ZM14.9476 37.1941H27.8335V38.5144H14.9476V37.1941ZM34.9208 36.006H33.1168V37.3262H34.9208V36.006ZM33.1168 39.7025H34.9208V41.0227H33.1168V39.7025ZM39.7531 36.006H37.949V37.3262H39.7531V36.006ZM37.949 39.7025H39.7531V41.0227H37.949V39.7025ZM44.5853 36.006H42.7812V37.3262H44.5853V36.006ZM42.7812 39.7025H44.5853V41.0227H42.7812V39.7025ZM11.4684 4.32024H34.5987V8.611H38.6577V16.5984H39.9463V7.02672L36.0161 3H10.1799V44.5874H27.5758V43.2672H11.4684V4.32024ZM35.9517 4.78233L38.4644 7.35678H35.9517V4.78233ZM23.0657 15.2782H34.9208V16.5984H23.0657V15.2782ZM34.9208 11.5814H23.0657V12.9017H34.9208V11.5814ZM14.9476 22.5394H27.8335V23.8596H14.9476V22.5394ZM27.8335 26.2362H14.9476V27.5564H27.8335V26.2362ZM14.9476 29.8669H27.8335V31.1871H14.9476V29.8669ZM27.8335 18.9087H23.0657V20.2289H27.8335V18.9087ZM31.4416 18.8429H46.196C47.2268 18.8429 48 19.635 48 20.6912V42.8712C48 43.9274 47.1624 44.7195 46.196 44.7195H31.4416C30.4107 44.7195 29.6376 43.8614 29.6376 42.8712V20.6912C29.6376 19.635 30.4751 18.8429 31.4416 18.8429ZM46.196 43.3332C46.5181 43.3332 46.7114 43.0692 46.7114 42.8052V20.6252C46.7114 20.2952 46.4537 20.0971 46.196 20.0971H31.4416C31.1194 20.0971 30.9262 20.3612 30.9262 20.6252V42.8052C30.9262 43.1352 31.1839 43.3332 31.4416 43.3332H46.196ZM44.3275 22.4734H33.3745V29.9987H44.3275V22.4734ZM43.0389 28.7445H34.6631V23.7936H43.0389V28.7445ZM33.1168 32.3753H34.9208V33.6955H33.1168V32.3753ZM39.7531 32.3753H37.949V33.6955H39.7531V32.3753ZM42.7812 32.3753H44.5853V33.6955H42.7812V32.3753Z"\n }\n) }), mF = () => /* @__PURE__ */ c("svg", { viewBox: "0 0 48 48", fill: "none", xmlns: "http://www.w3.org/2000/svg", children: /* @__PURE__ */ c(\n "path",\n {\n fill: "currentColor",\n fillRule: "evenodd",\n clipRule: "evenodd",\n d: "M1.31147 10.3606H39.9999V32.3278H41.3114V10.3606V9.04915V1.7705H34.0327V0H32.7212V5.31145H30.4262V0H29.1147V1.7705H12.2623V0H10.9508V5.31145H8.59017V0H7.27869V1.7705H0V9.04915V10.3606V43.0163H30.6229V41.7048H1.31147V10.3606ZM1.31147 3.08197H7.27869V5.31145H5.83607V6.62292H7.27869H12.1967H13.6393V5.31145H12.1967V3.08197H29.1147V5.31145H27.6721V6.62292H29.1147H34.0327H35.4753V5.31145H34.0327V3.08197H39.9999V9.04915H1.31147V3.08197ZM23.1475 12.7212H18.2295V17.6392H23.1475V12.7212ZM21.836 16.3278H19.4754V13.9671H21.836V16.3278ZM32.918 40.9835C32.918 37.1147 36.0655 33.9672 39.9343 33.9672C43.8032 33.9672 46.8851 37.1147 46.9507 40.9835C46.9507 44.8524 43.8032 47.9999 39.9343 47.9999C36.0655 47.9999 32.918 44.8524 32.918 40.9835ZM34.2294 40.9835C34.2294 44.1311 36.7868 46.6884 39.9343 46.6884C43.0819 46.6884 45.6392 44.1311 45.6392 40.9835C45.6392 37.836 43.0819 35.2786 39.9343 35.2786C36.7868 35.2786 34.2294 37.836 34.2294 40.9835ZM38.3606 39.2131L39.9343 40.7869L42.3606 38.4262L43.2786 39.3442L40.4589 42.1639C40.3278 42.295 40.1966 42.3606 39.9999 42.3606C39.8032 42.3606 39.6721 42.295 39.5409 42.1639L37.4425 40.1311L38.3606 39.2131ZM25.5081 12.7212H30.4262V17.6392H25.5081V12.7212ZM26.7541 16.3278H29.1147V13.9671H26.7541V16.3278ZM37.6393 12.7212H32.7212V17.6392H37.6393V12.7212ZM36.3933 16.3278H34.0327V13.9671H36.3933V16.3278ZM3.7377 19.9343H8.65572V24.8523H3.7377V19.9343ZM4.98362 23.6064H7.34425V21.2458H4.98362V23.6064ZM15.8688 19.9343H10.9508V24.8523H15.8688V19.9343ZM14.5573 23.6064H12.1967V21.2458H14.5573V23.6064ZM18.2295 19.9343H23.1475V24.8523H18.2295V19.9343ZM19.4754 23.6064H21.836V21.2458H19.4754V23.6064ZM30.4262 19.9343H25.5081V24.8523H30.4262V19.9343ZM29.1147 23.6064H26.7541V21.2458H29.1147V23.6064ZM37.6393 24.918H32.7212V19.9999H37.6393V24.918ZM36.3933 21.2459H34.0327V23.6065H36.3933V21.2459ZM8.65572 27.213H3.7377V32.1311H8.65572V27.213ZM7.34425 30.8851H4.98362V28.5245H7.34425V30.8851ZM18.2295 27.213H23.1475V32.1311H18.2295V27.213ZM19.4754 30.8851H21.836V28.5245H19.4754V30.8851ZM30.4262 27.213H25.5081V32.1311H30.4262V27.213ZM29.1147 30.8851H26.7541V28.5245H29.1147V30.8851ZM32.7212 27.213H37.6393V32.1311H32.7212V27.213ZM34.0327 30.8851H36.3933V28.5245H34.0327V30.8851ZM3.67215 39.4098H8.59017V34.4918H3.67215V39.4098ZM4.98362 35.8032H7.34425V38.1639H4.98362V35.8032ZM10.9508 34.4918H15.8688V39.4098H10.9508V34.4918ZM12.1967 38.0983H14.5573V35.7377H12.1967V38.0983ZM18.2295 39.4098H23.1475V34.4918H18.2295V39.4098ZM19.541 35.8032H21.9016V38.1639H19.541V35.8032ZM30.4262 39.4098H25.5081V34.4918H30.4262V39.4098ZM29.1147 35.8032H26.7541V38.1639H29.1147V35.8032ZM14.9508 27.9999L15.8688 28.9179L12.8524 31.9343L10.7541 29.7704L11.6721 28.8523L12.8524 30.0983L14.9508 27.9999Z"\n }\n) }), LF = () => /* @__PURE__ */ c("svg", { viewBox: "0 0 48 48", fill: "none", xmlns: "http://www.w3.org/2000/svg", children: /* @__PURE__ */ c(\n "path",\n {\n fill: "currentColor",\n fillRule: "evenodd",\n clipRule: "evenodd",\n d: "M2.52381 1.52381H29.8762V6.47619H34.6762V9.82857H36.2V4.64762L31.5524 0H1V48H18.6V46.4762H2.52381V1.52381ZM31.4 1.98096L34.3714 4.95238H31.4V1.98096ZM10.9809 11.5809H5.26665V17.2952H10.9809V11.5809ZM9.45712 15.7714H6.71427V13.0285H9.45712V15.7714ZM13.6476 13.7143H32.2381V15.2381H13.6476V13.7143ZM27.3619 22.019H13.6476V23.5428H27.3619V22.019ZM13.6476 30.5525H22.7143V32.0763H13.6476V30.5525ZM19.3619 38.7048H13.6476V40.2286H19.3619V38.7048ZM5.26665 28.4191H10.9809V34.1334H5.26665V28.4191ZM6.71427 32.6858H9.45712V29.9429H6.71427V32.6858ZM5.26665 42.5904H10.9809V36.8761H5.26665V42.5904ZM6.79046 38.3999H9.53332V41.1428H6.79046V38.3999ZM7.70477 22.7809L9.9143 20.5714L10.981 21.6381L7.70477 24.9143L5.34287 22.5524L6.40953 21.4857L7.70477 22.7809ZM43.8191 11.8858L45.3429 9.06671L43.5143 8.07624L44.5048 6.32385L43.2095 5.56194L42.2191 7.31434L40.3905 6.32385L23.4762 37.1048L21.2667 44.7239L21.6476 44.9524L20.9619 46.2477L22.2572 47.0096L22.9429 45.7143L23.3238 45.9429L28.4286 40.1524L43.1333 13.4096L44.9619 14.4L40.0857 23.2381L41.381 24L46.9429 13.8667L43.8191 11.8858ZM23.0191 43.6572L24.4667 38.5524L26.5238 39.6953L23.0191 43.6572ZM27.4381 38.4762L25.0762 37.181L40.9238 8.381L43.2857 9.67625L27.4381 38.4762ZM25.9143 46.5523H34.7524V33.4475H36.2V47.9999H25.9143V46.5523Z"\n }\n) }), vF = () => /* @__PURE__ */ c("svg", { viewBox: "0 0 48 48", fill: "none", xmlns: "http://www.w3.org/2000/svg", children: /* @__PURE__ */ c(\n "path",\n {\n fill: "currentColor",\n fillRule: "evenodd",\n clipRule: "evenodd",\n d: "M40.0672 17.0672V7.31932V7.25209H37.7143V37.9748L36.5041 45.2353H36.1008V46.7815H34.8908V45.2353H34.4873L33.2773 38.1092V3.01681H34.958V1H36.168V3.01681H37.8487V6.10925H41.2773V17.0672H40.0672ZM36.6386 37.437V4.22688H34.4873V37.437H36.6386ZM34.6218 38.647L35.563 44.0924L36.5714 38.647H34.6218ZM12.8403 25.6722V26.9495H7.73109C8 25.7394 8.13443 24.5294 8.13443 23.4537H6.99161V22.2436H8.13443V21.4369C8.13443 20.8319 8.20169 20.2941 8.33615 19.8907C8.4706 19.4873 8.67222 19.2184 8.94112 18.9495C9.14281 18.6806 9.47897 18.479 9.81511 18.4117C10.1512 18.3445 10.5546 18.2773 10.9579 18.2773H10.9582C11.2942 18.2773 11.6303 18.2773 11.8991 18.3445C12.168 18.4117 12.437 18.479 12.7059 18.6134L12.3025 19.8235L12.3022 19.8234C11.8989 19.689 11.4957 19.5546 11.0252 19.5546C10.7563 19.5546 10.6218 19.5546 10.4202 19.6218C10.2185 19.689 10.084 19.7562 9.94953 19.8907C9.81519 20.025 9.74803 20.2265 9.68086 20.428L9.68069 20.4285C9.61346 20.6302 9.61339 20.9663 9.61339 21.3025V22.1764H11.8319V23.3865H9.61339C9.61339 23.5469 9.59809 23.7226 9.58208 23.9064L9.58208 23.9064C9.56455 24.1076 9.54618 24.3185 9.54618 24.5294C9.54618 24.9327 9.47899 25.3361 9.41176 25.6722H12.8403ZM43.4958 10.2773V11.4874H46.8571V34.2773H39.7983V35.4202H48V10.2773H43.4958ZM31.1933 35.4202H0V10.2773H31.1933V11.4874H1.21003V34.2773H31.1933V35.4202ZM31.126 25.6049H17.4118V26.8151H31.126V25.6049ZM17.4118 22.2436H31.126V23.4537H17.4118V22.2436ZM31.126 18.9495H17.4118V20.1596H31.126V18.9495ZM39.7983 25.6049H44.7731V26.8151H39.7983V25.6049ZM44.7731 22.2436H39.7983V23.4537H44.7731V22.2436ZM39.7983 18.9495H44.7731V20.1596H39.7983V18.9495ZM15.7311 22.2436H14.0504V23.4537H15.7311V22.2436ZM3.36134 22.2436H5.04202V23.4537H3.36134V22.2436Z"\n }\n) }), qF = () => /* @__PURE__ */ c("svg", { viewBox: "0 0 48 48", fill: "none", xmlns: "http://www.w3.org/2000/svg", children: /* @__PURE__ */ c(\n "path",\n {\n fill: "currentColor",\n fillRule: "evenodd",\n clipRule: "evenodd",\n d: "M46.1753 6H1.74551C0.793446 6 0 6.79339 0 7.74545V34.6413C0 35.5934 0.793446 36.3868 1.74551 36.3868H3.49093V42.4165H4.76033L10.5521 36.3868H19.438V34.9587H9.91736L4.91907 40.1157V34.9587H1.82483C1.66615 34.9587 1.50746 34.8 1.50746 34.6413V7.74545C1.50746 7.58677 1.66615 7.4281 1.82483 7.4281H46.2546C46.4133 7.4281 46.572 7.58677 46.572 7.74545V34.6413C46.572 34.8 46.4133 34.9587 46.2546 34.9587H45.5405V36.3868H46.2546C47.2066 36.3868 48 35.5934 48 34.6413V7.74545C47.9207 6.79339 47.1273 6 46.1753 6ZM32.9256 13.2991C36.0992 13.2991 38.6381 15.838 38.6381 19.0115C38.6381 22.1851 36.0992 26.152 32.9256 26.152C29.7521 26.152 27.2133 22.2644 27.2133 19.0115C27.2133 15.838 29.7521 13.2991 32.9256 13.2991ZM32.9256 14.7272C30.5455 14.7272 28.6413 16.6314 28.6413 19.0115C28.6413 21.471 30.7041 24.7239 32.9256 24.7239C35.1471 24.7239 37.2099 21.471 37.2099 19.0115C37.2099 16.6314 35.3058 14.7272 32.9256 14.7272ZM38.2414 37.5769H39.6694V41.7025H38.2414V37.5769ZM35.2265 28.1355H30.7042C25.8645 28.1355 21.8975 32.1024 21.8975 36.9421V41.7024H23.3256V36.9421C23.3256 32.8958 26.6579 29.5636 30.7042 29.5636H35.2265C39.2727 29.5636 42.605 32.8958 42.605 36.9421V41.7024H44.0331V36.9421C43.9537 32.1024 40.0661 28.1355 35.2265 28.1355ZM26.2611 37.5769H27.6893V41.7025H26.2611V37.5769ZM6.82312 17.028H15.3124V18.4561H6.82312V17.028ZM24.7538 20.995H6.82312V22.4231H24.7538V20.995ZM6.82312 24.9619H26.7372V26.39H6.82312V24.9619Z"\n }\n) }), yF = () => /* @__PURE__ */ c("svg", { viewBox: "0 0 48 48", fill: "none", xmlns: "http://www.w3.org/2000/svg", children: /* @__PURE__ */ c(\n "path",\n {\n fill: "currentColor",\n fillRule: "evenodd",\n clipRule: "evenodd",\n d: "M17.8889 10.505C20.4748 10.505 22.5758 7.35353 22.5758 4.68687C22.5758 2.10101 20.4748 0 17.8889 0C15.303 0 13.202 2.10101 13.202 4.68687C13.202 7.27272 15.2222 10.505 17.8889 10.505ZM17.8889 1.37374C19.6667 1.37374 21.1212 2.82828 21.1212 4.60606C21.1212 6.54545 19.5051 8.96969 17.8889 8.96969C16.2727 8.96969 14.6566 6.46464 14.6566 4.60606C14.5758 2.82828 16.0303 1.37374 17.8889 1.37374ZM18.6162 16.0808C18.6162 18.909 20.8788 22.3838 23.6263 22.3838C26.3737 22.3838 28.6364 18.9899 28.6364 16.0808C28.6364 13.3333 26.3737 11.0707 23.6263 11.0707C20.8788 11.0707 18.6162 13.3333 18.6162 16.0808ZM23.6263 12.5252C25.6465 12.5252 27.1818 14.1414 27.1818 16.0808C27.1818 18.1818 25.404 20.9292 23.6263 20.9292C21.7677 20.9292 20.0707 18.1818 20.0707 16.0808C20.0707 14.1414 21.6869 12.5252 23.6263 12.5252ZM21.6868 23.9192C17.404 23.9192 14.0101 27.3939 14.0101 31.5959V41.2929C14.0101 42.7474 15.1414 43.8787 16.596 43.8787C17 43.8787 17.4041 43.7979 17.7273 43.5555V47.9192H19.1818V41.2929V33.8586V31.5151H17.7273V33.8586V41.2929C17.7273 41.9394 17.2425 42.4242 16.596 42.4242C15.9495 42.4242 15.4647 41.9394 15.4647 41.2929V31.6767C15.4647 28.202 18.293 25.3737 21.7677 25.3737H25.6465C29.1212 25.3737 31.9495 28.202 31.9495 31.6767V41.3737C31.9495 42.0202 31.4647 42.505 30.8182 42.505C30.1717 42.505 29.6869 42.0202 29.6869 41.3737V33.9394V31.5959H28.2324V33.9394V41.3737V48H29.6869V43.6363C30.0101 43.7979 30.4141 43.9596 30.8182 43.9596C32.2727 43.9596 33.404 42.8282 33.404 41.3737V31.6767C33.3232 27.3939 29.8485 23.9192 25.5657 23.9192H21.6868ZM22.899 41.2929H24.3535V47.9192H22.899V41.2929ZM33.808 4.68687C33.808 7.35353 31.7071 10.505 29.1212 10.505C26.5354 10.505 24.4343 7.27272 24.4343 4.68687C24.4343 2.10101 26.5354 0 29.1212 0C31.7071 0 33.808 2.10101 33.808 4.68687ZM32.3536 4.60606C32.3536 2.82828 30.899 1.37374 29.1212 1.37374C27.3435 1.37374 25.8889 2.82828 25.8889 4.60606C25.8889 6.46464 27.4243 8.96969 29.1212 8.96969C30.7374 8.96969 32.3536 6.54545 32.3536 4.60606ZM9.88889 19.5555C12.4747 19.5555 14.5758 16.404 14.5758 13.7373C14.5758 11.1515 12.4747 9.05046 9.88889 9.05046C7.30303 9.05046 5.20208 11.1515 5.20208 13.7373C5.20208 16.3232 7.30303 19.5555 9.88889 19.5555ZM9.88889 10.505C11.6667 10.505 13.1212 11.9596 13.1212 13.7373C13.1212 15.6767 11.505 18.101 9.88889 18.101C8.19192 18.101 6.65656 15.5959 6.65656 13.7373C6.65656 11.9596 8.11111 10.505 9.88889 10.505ZM17 23.192L15.7879 24C15.0606 22.9495 13.6061 22.3031 11.7475 22.3031H8.19194C5.04042 22.3031 2.45458 24.8889 2.45458 28.0404V36.9293C2.45458 37.4142 2.93939 37.899 3.42424 37.899C3.90909 37.899 4.394 37.495 4.394 36.9293V30.1414V27.9596H5.84848V30.1414V36.9293V47.9192H4.394V39.1111C4.15157 39.2728 3.74747 39.3536 3.42424 39.3536C2.13131 39.3536 1 38.3031 1 36.9293V28.0404C1 24.0808 4.23234 20.8485 8.19194 20.8485H11.7475C14.0909 20.8485 16.0303 21.7374 17 23.192ZM10.697 36.9292H9.24248V47.9191H10.697V36.9292ZM42.0505 13.7373C42.0505 16.404 39.9495 19.5555 37.3636 19.5555C34.7778 19.5555 32.6768 16.3232 32.6768 13.7373C32.6768 11.1515 34.7778 9.05046 37.3636 9.05046C39.9495 9.05046 42.0505 11.1515 42.0505 13.7373ZM40.5959 13.7373C40.5959 11.9596 39.1414 10.505 37.3636 10.505C35.5858 10.505 34.1313 11.9596 34.1313 13.7373C34.1313 15.5959 35.6667 18.101 37.3636 18.101C38.9798 18.101 40.5959 15.6767 40.5959 13.7373ZM39.1415 20.8485H35.5859C33.2425 20.8485 31.3031 21.7374 30.3334 23.192L31.5455 24C32.2728 22.9495 33.8081 22.3031 35.6667 22.3031H39.2222C42.3738 22.3031 44.9596 24.8889 44.9596 28.0404V36.9293C44.9596 37.495 44.4748 37.899 43.9899 37.899C43.5051 37.899 43.0202 37.4142 43.0202 36.9293V30.1414V27.9596H41.5657V30.1414V36.9293V47.9192H43.0202V39.1111C43.3434 39.2728 43.6667 39.3536 43.9899 39.3536C45.3637 39.3536 46.4142 38.2222 46.4142 36.9293V28.0404C46.3334 24.0808 43.1011 20.8485 39.1415 20.8485ZM36.6363 36.9292H38.0909V47.9191H36.6363V36.9292Z"\n }\n) }), wF = () => /* @__PURE__ */ c("svg", { viewBox: "0 0 48 48", fill: "none", xmlns: "http://www.w3.org/2000/svg", children: /* @__PURE__ */ c(\n "path",\n {\n fill: "currentColor",\n fillRule: "evenodd",\n clipRule: "evenodd",\n d: "M23.3443 13.9672V4.85247C22.2952 4.5246 21.5738 3.60656 21.5082 2.49181C21.5082 1.11476 22.623 0 24.0001 0C25.3771 0 26.4918 1.11476 26.4918 2.49181C26.4918 3.60656 25.705 4.59017 24.6558 4.85247V13.9672H23.3443ZM25.1804 2.49181C25.1804 1.83607 24.6558 1.31148 24.0001 1.31148C23.3443 1.31148 22.8197 1.83607 22.8197 2.49181C22.8197 3.14755 23.3443 3.67214 24.0001 3.67214C24.6558 3.67214 25.1804 3.14755 25.1804 2.49181ZM24.0001 15.9999C19.5411 15.9999 15.9345 19.6065 15.9345 24.0655C15.9345 28.5246 19.5411 32.1311 24.0001 32.1311C28.4591 32.1311 32.0656 28.5246 32.0656 24.0655C32.0656 19.6065 28.4591 15.9999 24.0001 15.9999ZM24.0001 30.8852C20.2624 30.8852 17.2459 27.8688 17.2459 24.1311C17.2459 20.3934 20.2624 17.377 24.0001 17.377C27.7378 17.377 30.7541 20.3934 30.7541 24.1311C30.8197 27.8032 27.7378 30.8852 24.0001 30.8852ZM23.2487 25.0943L23.2487 25.0944C23.2314 25.275 23.2131 25.4664 23.2131 25.6394C23.2131 25.9673 23.1476 26.3607 23.082 26.6886H26.0984V27.8034H21.5738C21.7705 26.6886 21.9017 25.6394 21.9017 24.6558H20.9181V23.6066H21.9017V22.8853C21.9017 22.3607 21.9673 21.9017 22.0984 21.5083C22.2296 21.1804 22.4263 20.8525 22.623 20.6558C22.8198 20.4591 23.082 20.2624 23.4099 20.1968C23.6722 20.1312 24.0001 20.0657 24.3935 20.0657C24.7214 20.0657 24.9837 20.0657 25.246 20.1312C25.4106 20.1724 25.5753 20.2394 25.7237 20.2998C25.8117 20.3356 25.8941 20.3691 25.9673 20.3935L25.6394 21.4427C25.3116 21.246 24.9181 21.1804 24.5246 21.1804H24.5245C24.3278 21.1804 24.1312 21.1804 24.0001 21.246C23.8689 21.3115 23.7378 21.3771 23.6067 21.5083C23.4755 21.6394 23.4099 21.8361 23.3443 22.0329C23.2788 22.2295 23.2788 22.4918 23.2788 22.8195V22.8198V23.6066H25.246V24.6558H23.2788C23.2788 24.7797 23.2642 24.9327 23.2487 25.0943ZM13.9672 23.3443V24.6558H4.85248C4.59018 25.705 3.60655 26.4918 2.4918 26.4918C1.11475 26.4918 0 25.3771 0 24C0 22.623 1.11475 21.5082 2.4918 21.5082C3.60655 21.5082 4.59018 22.2951 4.85248 23.3443H13.9672ZM1.31148 24C1.31148 24.6558 1.83606 25.1804 2.4918 25.1804C3.14754 25.1804 3.67216 24.6558 3.67216 24C3.67216 23.3443 3.14754 22.8197 2.4918 22.8197C1.83606 22.8197 1.31148 23.3443 1.31148 24ZM24.6558 43.1475V34.0327H23.3443V43.1475C22.2952 43.4098 21.5082 44.3934 21.5082 45.5082C21.5082 46.8852 22.623 48 24.0001 48C25.3771 48 26.4918 46.8852 26.4918 45.5082C26.4918 44.3934 25.705 43.4754 24.6558 43.1475ZM24.0001 46.6885C23.3443 46.6885 22.8197 46.1639 22.8197 45.5082C22.8197 44.8524 23.3443 44.3278 24.0001 44.3278C24.6558 44.3278 25.1804 44.8524 25.1804 45.5082C25.1804 46.1639 24.6558 46.6885 24.0001 46.6885ZM43.1476 23.3443C43.4099 22.2951 44.3935 21.5082 45.5082 21.5082C46.8853 21.5082 48.0001 22.623 48.0001 24C48.0001 25.3771 46.8853 26.4918 45.5082 26.4918C44.3935 26.4918 43.4099 25.705 43.1476 24.6558H34.0328V23.3443H43.1476ZM44.328 24C44.328 24.6558 44.8525 25.1804 45.5082 25.1804C46.164 25.1804 46.6886 24.6558 46.6886 24C46.6886 23.3443 46.164 22.8197 45.5082 22.8197C44.8525 22.8197 44.328 23.3443 44.328 24ZM31.6066 17.3771L38.0329 10.9509C38.4263 11.1476 38.8197 11.2787 39.2787 11.2787C39.9345 11.2787 40.5247 11.0164 41.0493 10.5574C42.0329 9.5738 42.0329 8.06561 41.0493 7.082C40.0657 6.0984 38.5574 6.0984 37.5738 7.082C36.7869 7.86889 36.6558 9.11479 37.1804 10.0328L30.7541 16.4591L31.6066 17.3771ZM38.4263 7.93446C38.623 7.73773 38.9509 7.60659 39.2787 7.60659C39.6066 7.60659 39.8689 7.73773 40.1312 7.93446C40.5902 8.39347 40.5902 9.11478 40.1312 9.5738C39.6722 10.0328 38.9509 10.0328 38.4919 9.5738C37.9673 9.11478 37.9673 8.39347 38.4263 7.93446ZM10.0328 37.0492L16.4591 30.6229L17.4427 31.541L11.0164 37.9672C11.541 38.8852 11.4099 40.1311 10.623 40.918C10.0984 41.377 9.50828 41.6393 8.85254 41.6393C8.19681 41.6393 7.54102 41.377 7.082 40.918C6.0984 39.9344 6.0984 38.4262 7.082 37.4426C7.86889 36.6557 9.11479 36.5246 10.0328 37.0492ZM8.00005 40.0656C8.45907 40.5246 9.18038 40.5246 9.6394 40.0656C10.0984 39.6065 10.0984 38.8852 9.6394 38.4262C9.18038 37.9672 8.45907 37.9672 8.00005 38.4262C7.54104 38.8852 7.54104 39.6065 8.00005 40.0656ZM38.0329 37.1148L31.6066 30.6886L30.6886 31.6066L37.1148 38.0328C36.5903 38.9509 36.7214 40.1968 37.5083 40.9837C37.9673 41.4427 38.623 41.705 39.2787 41.705C39.9345 41.705 40.5247 41.4427 41.0493 40.9837C42.0329 40 42.0329 38.4919 41.0493 37.5083C40.1968 36.6558 38.9509 36.5902 38.0329 37.1148ZM40.0657 40.0656C39.6066 40.5246 38.8853 40.5246 38.4263 40.0656C37.9673 39.6066 37.9673 38.8853 38.4263 38.4263C38.623 38.2296 38.9509 38.0984 39.2787 38.0984C39.6066 38.0984 39.8689 38.2296 40.1312 38.4263C40.5247 38.8853 40.5247 39.6066 40.0657 40.0656ZM10.0328 10.8852C9.63938 11.0819 9.18035 11.2131 8.78691 11.2131C8.13117 11.2131 7.54102 11.0164 7.082 10.4918C6.0984 9.50816 6.0984 7.99997 7.082 7.01637C8.06561 6.03276 9.57384 6.03276 10.5574 7.01637C11.3443 7.80325 11.4755 9.04915 10.9509 9.96719L17.3771 16.3934L16.4591 17.3114L10.0328 10.8852ZM8.78691 7.60653C8.45904 7.60653 8.13122 7.73767 7.9345 7.9344C7.47548 8.39341 7.47546 9.11472 8.00005 9.57374C8.45907 10.0328 9.18038 10.0328 9.6394 9.57374C10.0984 9.11472 10.0984 8.39341 9.6394 7.9344C9.3771 7.73767 9.11478 7.60653 8.78691 7.60653Z"\n }\n) }), xF = () => /* @__PURE__ */ c("svg", { viewBox: "0 0 48 48", fill: "none", xmlns: "http://www.w3.org/2000/svg", children: /* @__PURE__ */ c(\n "path",\n {\n fill: "currentColor",\n fillRule: "evenodd",\n clipRule: "evenodd",\n d: "M32.5449 1H17.1641V2.48608H32.5449V1ZM11.5913 4.12081C11.5913 5.75548 10.2539 7.16725 8.54489 7.16725C6.83591 7.16725 5.49845 5.75548 5.49845 4.12081C5.49845 2.48613 6.83591 1.07438 8.54489 1.07438C10.1796 1.07438 11.5913 2.41183 11.5913 4.12081ZM10.1796 4.12081C10.1796 3.22917 9.43653 2.48615 8.54489 2.48615C7.65325 2.48615 6.98452 3.22917 6.91022 4.12081C6.91022 5.01245 7.65325 5.75549 8.54489 5.75549C9.43653 5.75549 10.1796 5.01245 10.1796 4.12081ZM31.5046 13.8545L38.6378 20.3932V13.8545H48V15.3405H40.1238V22.1765H38.4149L30.9845 15.3405H0V13.8545H3.41796V12.8885C3.41796 10.4365 5.12694 9.17337 8.54489 9.17337C11.9628 9.17337 13.6718 10.4365 13.6718 12.8885V13.8545H31.5046ZM8.54489 10.6594C5.34985 10.6594 4.90402 11.6997 4.90402 12.8885V13.8545H12.1858V12.8885C12.1858 11.774 11.7399 10.6594 8.54489 10.6594ZM48 5.30963H17.1641V6.7957H48V5.30963ZM17.1641 9.54489H48V11.031H17.1641V9.54489ZM39.3808 33.0248C42.7988 33.0248 44.5077 34.288 44.5077 36.74V37.706H48V39.192H17.0155L9.58514 46.0279H7.87616V39.192H0V37.706H9.28793V44.2447L16.4211 37.706H34.2539V36.74C34.2539 34.288 35.9628 33.0248 39.3808 33.0248ZM39.3808 34.5109C36.1858 34.5109 35.7399 35.5512 35.7399 36.74V37.706H43.0217V36.74C43.0217 35.6255 42.5758 34.5109 39.3808 34.5109ZM42.4272 27.9721C42.4272 26.2631 41.0155 24.9257 39.3808 24.9257C37.6718 24.9257 36.3344 26.3374 36.3344 27.9721C36.3344 29.6811 37.7461 31.0185 39.3808 31.0185C41.0898 31.0928 42.4272 29.6811 42.4272 27.9721ZM37.7461 27.9721C37.7461 27.0805 38.4892 26.3374 39.3808 26.3374C40.2724 26.3374 41.0155 27.0805 41.0155 27.9721C41.0155 28.8637 40.2724 29.6068 39.3808 29.6068C38.4892 29.6068 37.7461 28.8637 37.7461 27.9721ZM0 29.1609H30.8359V30.647H0V29.1609ZM30.8359 33.4706H0V34.9566H30.8359V33.4706ZM0 24.9257H15.3808V26.4117H0V24.9257Z"\n }\n) }), WF = () => /* @__PURE__ */ c("svg", { viewBox: "0 0 48 48", fill: "none", xmlns: "http://www.w3.org/2000/svg", children: /* @__PURE__ */ c(\n "path",\n {\n fill: "currentColor",\n fillRule: "evenodd",\n clipRule: "evenodd",\n d: "M15.8366 4.70728C15.8366 7.41753 13.7682 10.627 11.1293 10.627C8.56169 10.627 6.42195 7.41753 6.42195 4.70728C6.42195 2.13967 8.56169 0 11.1293 0C13.6969 0 15.8366 2.13967 15.8366 4.70728ZM14.5527 4.70728C14.5527 2.8529 13.055 1.2838 11.1293 1.2838C9.27492 1.2838 7.70579 2.8529 7.70579 4.70728C7.70579 6.7043 9.34624 9.34323 11.1293 9.34323C12.9124 9.34323 14.5527 6.7043 14.5527 4.70728ZM41.4413 4.70728C41.4413 7.41753 39.3729 10.627 36.734 10.627C34.1664 10.627 32.0267 7.41753 32.0267 4.70728C32.0267 2.13967 34.1664 0 36.734 0C39.3016 0 41.4413 2.13967 41.4413 4.70728ZM40.1575 4.70728C40.1575 2.8529 38.6597 1.2838 36.734 1.2838C34.8796 1.2838 33.3105 2.8529 33.3105 4.70728C33.3105 6.7043 34.9509 9.34323 36.734 9.34323C38.517 9.34323 40.1575 6.7043 40.1575 4.70728ZM38.5884 12.1962H36.0921V13.48H38.5884C41.8692 13.48 44.5794 16.1903 44.5794 19.4711V28.6717C44.5794 29.3136 44.0802 29.8128 43.4383 29.8128C42.7964 29.8128 42.2971 29.3136 42.2971 28.6717V21.6821V19.3998H41.0133V21.6108V28.6717V46.3596C41.0133 46.5023 40.8707 46.6449 40.7281 46.6449H37.3759V28.6717H36.0921V46.7162H32.7399C32.5973 46.7162 32.4546 46.5736 32.4546 46.4309V28.6717V27.3165H31.1709V28.6717C31.1709 29.3136 30.6716 29.8128 30.0297 29.8128C29.3878 29.8128 28.8885 29.3136 28.8885 28.6717V27.3165H27.6048V28.6717C27.6048 30.0268 28.6746 31.0966 30.0297 31.0966C30.4576 31.0966 30.8142 30.954 31.1708 30.8114L31.1709 30.8113V46.4309C31.1709 47.2868 31.8841 48 32.7399 48H36.0921H36.734H40.7281C41.584 48 42.2971 47.2868 42.2971 46.4309V30.74C42.6538 30.954 43.0104 31.0253 43.4383 31.0253C44.7934 31.0253 45.8633 29.9555 45.8633 28.6003V19.4711C45.8633 15.477 42.5825 12.1962 38.5884 12.1962ZM17.8335 29.8128C18.4754 29.8128 18.9748 29.3136 18.9748 28.6717V27.2452H20.2585V28.6003C20.2585 29.9555 19.1887 31.0253 17.8335 31.0253C17.4056 31.0253 17.049 30.954 16.6924 30.74V46.4309C16.6924 47.2868 15.9792 48 15.1233 48H11.1293H10.4874H7.13518C6.27931 48 5.56612 47.2868 5.56612 46.4309V30.8113L5.56606 30.8114C5.20947 30.954 4.85289 31.0966 4.42498 31.0966C3.06985 31.0966 2 30.0268 2 28.6717V19.4711C2 15.477 5.28079 12.1962 9.27485 12.1962H11.7711V13.48H9.27485C5.99402 13.48 3.28384 16.1903 3.28384 19.4711V28.6717C3.28384 29.3136 3.78308 29.8128 4.42498 29.8128C5.06688 29.8128 5.56612 29.3136 5.56612 28.6717V21.6108V19.3998H6.84996V21.6821V28.6717V46.4309C6.84996 46.5736 6.99253 46.7162 7.13518 46.7162H10.4874V28.6717H11.7711V46.6449H15.1233C15.266 46.6449 15.4086 46.5023 15.4086 46.3596V28.6717V27.3165H16.6924V28.6717C16.6924 29.3136 17.1916 29.8128 17.8335 29.8128ZM34.523 24.8202V13.3373C34.523 12.7667 34.0237 12.2674 33.4532 12.2674H14.4814C13.9108 12.2674 13.4116 12.7667 13.4116 13.3373V24.8202C13.4116 25.3907 13.9108 25.89 14.4814 25.89H21.685L23.9673 28.1723L26.2496 25.89H33.4532C34.0951 25.89 34.523 25.4621 34.523 24.8202ZM33.3105 24.6775H25.7504L24.0386 26.3892L22.3269 24.6775H14.7667V13.4799H33.3818V24.6775H33.3105ZM19.5453 18.4012H21.3284V19.685H19.5453V18.4012ZM24.8945 18.4012H23.1114V19.685H24.8945V18.4012ZM26.6062 18.4012H28.3893V19.685H26.6062V18.4012Z"\n }\n) }), RF = () => /* @__PURE__ */ c("svg", { viewBox: "0 0 48 48", fill: "none", xmlns: "http://www.w3.org/2000/svg", children: /* @__PURE__ */ c(\n "path",\n {\n fill: "currentColor",\n fillRule: "evenodd",\n clipRule: "evenodd",\n d: "M7.32205 12.7689H46.003C47.1124 12.7689 47.926 13.6564 48 14.5439V37.9892C48 39.0247 47.1124 39.9122 46.077 39.9122H7.39599C6.36055 39.9122 5.47305 39.0247 5.47305 37.9892V21.3482H1.25728V31.7026C1.25728 32.2943 1.775 32.812 2.36668 32.812H4.28962V34.1433H2.36668C1.10936 34.1433 0 33.1078 0 31.7766V21.4222V14.6179V9.36673C0 8.10941 1.0354 7 2.36668 7H39.5686C40.8259 7 41.9352 8.03545 41.9352 9.36673V11.6595H40.604V9.36673C40.604 8.77505 40.0863 8.25733 39.4946 8.25733H2.29274C1.70106 8.25733 1.18334 8.77505 1.18334 9.36673V14.6179H5.39902C5.47298 13.5824 6.28661 12.7689 7.32205 12.7689ZM1.25728 15.8752V20.0909H5.47305V15.8752H1.25728ZM46.003 38.6548C46.2989 38.6548 46.5947 38.359 46.5947 38.0632V14.6918C46.5947 14.396 46.2989 14.1002 46.003 14.1002H7.32205C7.02621 14.1002 6.73033 14.396 6.73033 14.6918V21.4222V38.0632C6.73033 38.359 7.02621 38.6548 7.32205 38.6548H46.003ZM42.1572 28.6702H36.832C35.9445 28.6702 35.131 27.8567 35.131 26.9692V23.4931C35.131 22.5316 35.8705 21.792 36.832 21.792H42.1572C43.1186 21.792 43.8582 22.5316 43.8582 23.4931V26.9692C43.8582 27.9307 43.1186 28.6702 42.1572 28.6702ZM36.832 23.1233C36.6101 23.1233 36.4622 23.2712 36.4622 23.4931V26.9692C36.4622 27.1911 36.6101 27.339 36.832 27.339H42.1572C42.379 27.339 42.527 27.1911 42.527 26.9692V23.4931C42.527 23.2712 42.379 23.1233 42.1572 23.1233H36.832ZM11.094 27.339H9.24499V28.6702H11.094V27.339ZM12.943 27.339H14.792V28.6702H12.943V27.339ZM18.49 27.339H16.641V28.6702H18.49V27.339ZM9.24499 32.8119H44.0801V34.1432H9.24499V32.8119Z"\n }\n) }), BF = () => /* @__PURE__ */ c("svg", { viewBox: "0 0 48 48", fill: "none", xmlns: "http://www.w3.org/2000/svg", children: /* @__PURE__ */ c(\n "path",\n {\n fill: "currentColor",\n fillRule: "evenodd",\n clipRule: "evenodd",\n d: "M0 24C0 10.7429 10.819 0 24 0C37.2571 0 48 10.7429 47.9238 24.0762C47.9238 25.5238 47.8476 27.0476 47.5428 28.4952L46.0952 28.1905C46.3238 27.0476 46.4762 25.9048 46.4762 24.7619H36.5714C36.5714 25.1149 36.5512 25.4678 36.5316 25.8104C36.5132 26.1333 36.4952 26.4471 36.4952 26.7429L34.9714 26.6667C35.0476 26.0571 35.0476 25.3714 35.0476 24.7619H24.7619V33.4476C25.0611 33.4725 25.3602 33.4893 25.6568 33.5059C26.2664 33.5401 26.8647 33.5737 27.4286 33.6762L27.2 35.2C27.1352 35.1941 27.0709 35.1882 27.007 35.1824C26.2437 35.1125 25.5352 35.0476 24.7619 35.0476V46.4762C26.2095 46.4 27.581 46.2476 28.9524 45.9428L29.2571 47.3905C27.5047 47.7714 25.7524 48 24 48C10.7429 48 0 37.181 0 24ZM13.5619 10.4381C14.8571 6.78094 16.6095 3.9619 18.7428 2.13332C15.2381 2.97142 12.0381 4.64762 9.37142 6.93334C10.4381 8.30477 11.8857 9.5238 13.5619 10.4381ZM13.0286 11.8095C11.1238 10.819 9.44761 9.44761 8.22856 7.92381C4.26666 11.8857 1.75236 17.219 1.59998 23.1619H11.3524C11.4285 18.9714 12.0381 15.1619 13.0286 11.8095ZM1.52381 24.6857C1.75238 30.6286 4.26666 36.0381 8.22856 39.9238C9.5238 38.4 11.1238 37.0286 13.0286 35.9619C12.0381 32.6857 11.4285 28.8 11.3524 24.6857H1.52381ZM13.5619 37.4857C11.8857 38.4 10.4381 39.619 9.37142 40.9905C12.0381 43.2762 15.2381 44.8762 18.7428 45.7905C16.6095 43.9619 14.8571 41.0667 13.5619 37.4857ZM14.9333 36.7238C16.7619 42.2095 19.8095 45.8667 23.2381 46.3238V34.8952C20.2667 34.9714 17.3714 35.5809 14.9333 36.7238ZM14.4762 35.3524C17.0667 34.2095 20.0381 33.5238 23.2381 33.4476V24.7619H12.9524C13.0286 28.5714 13.5619 32.2286 14.4762 35.3524ZM12.9524 23.1619H23.2381V14.4C20.1143 14.3238 17.0667 13.6381 14.4762 12.4952C13.5619 15.6952 13.0286 19.2762 12.9524 23.1619ZM14.9333 11.1238C17.3714 12.1905 20.1905 12.8762 23.2381 12.9524V1.6C19.8095 2.05715 16.8381 5.71429 14.9333 11.1238ZM34.4381 10.4381C36.1143 9.44761 37.5619 8.30477 38.6285 6.93334C35.9619 4.64762 32.7619 2.97142 29.2571 2.20952C31.3904 3.9619 33.1428 6.85713 34.4381 10.4381ZM33.0666 11.0476C31.2381 5.6381 28.1905 1.98095 24.7619 1.52381V12.8762C27.7333 12.8 30.6285 12.1905 33.0666 11.0476ZM24.7619 14.4V23.0857H35.0476C34.9714 19.2762 34.4381 15.619 33.5238 12.4952C30.9333 13.6381 27.9619 14.3238 24.7619 14.4ZM34.8952 11.8095C35.8857 15.1619 36.4952 19.0476 36.5714 23.1619V23.0857H46.4C46.1714 17.1428 43.6571 11.7333 39.6952 7.84761C38.4762 9.44761 36.8 10.7429 34.8952 11.8095ZM38.0952 28.4952C32.9143 28.4952 28.7238 32.6856 28.7238 37.8666C28.7238 43.0475 32.9143 47.238 38.0952 47.238C43.2762 47.238 47.4667 43.0475 47.4667 37.8666C47.4667 32.6856 43.2 28.4952 38.0952 28.4952ZM38.0952 45.7142C33.7524 45.7142 30.2476 42.2094 30.2476 37.8666C30.2476 33.5237 33.7524 30.019 38.0952 30.019C42.4381 30.019 45.9428 33.5237 45.9428 37.8666C45.9428 42.2094 42.4381 45.7142 38.0952 45.7142ZM37.1047 39.3144C37.1047 39.1133 37.126 38.8909 37.146 38.681V38.681C37.164 38.4932 37.1809 38.3154 37.1809 38.1715H39.4667V36.9524H37.1809V36.0382V36.0379C37.1809 35.6571 37.1809 35.3524 37.2571 35.1239C37.3333 34.8953 37.4095 34.6667 37.5619 34.5143C37.7143 34.362 37.8666 34.2858 38.019 34.2096C38.1714 34.1334 38.4 34.1334 38.6285 34.1334C39.0857 34.1334 39.5428 34.2096 39.9238 34.4382L40.3047 33.2191C40.2196 33.1908 40.124 33.1518 40.0217 33.1102L40.0217 33.1102C39.8492 33.04 39.6579 32.9622 39.4667 32.9143C39.162 32.8382 38.8573 32.8382 38.4765 32.8382H38.4762C38.019 32.8382 37.6381 32.9143 37.3333 32.9905C36.9524 33.0667 36.6476 33.2953 36.419 33.5239C36.1905 33.7524 35.9619 34.1334 35.8095 34.5143C35.6571 34.9715 35.5809 35.5048 35.5809 36.1143V36.9524H34.4381V38.1715H35.5809C35.5809 39.3144 35.4285 40.5334 35.2 41.8286H40.4571V40.5334H36.9524C37.0286 40.1524 37.1047 39.6953 37.1047 39.3144Z"\n }\n) }), SF = () => /* @__PURE__ */ c("svg", { viewBox: "0 0 48 48", fill: "none", xmlns: "http://www.w3.org/2000/svg", children: /* @__PURE__ */ c(\n "path",\n {\n fill: "currentColor",\n fillRule: "evenodd",\n clipRule: "evenodd",\n d: "M43.0322 30.2581H44.3226H44.4516V35.6774H47.8064V37.8064C47.8064 39.2903 46.5806 40.4516 45.1613 40.4516H2.64516C1.16129 40.4516 0 39.2258 0 37.8064V35.6774H3.35485V10.1935C3.35485 8.96774 4.32258 8 5.54839 8H42.1935C43.4194 8 44.3871 8.96774 44.3871 10.1935V14.7097H43.0968V10.1935C43.0968 9.67741 42.6452 9.2258 42.129 9.2258H5.48387C4.96774 9.2258 4.51613 9.67741 4.51613 10.1935V35.6774H43.0322V30.2581ZM45.0323 39.1613C45.8064 39.1613 46.3871 38.5806 46.3871 37.8064V36.9032H1.1613V37.8064C1.1613 38.5806 1.74195 39.1613 2.51614 39.1613H45.0323ZM30 15.9355V18H25.2903V19.2903H30.0645V20.3226H31.3548V19.2903V18.6452V17.7419L39.0322 23.0967L46.7097 17.7419V27.871H31.3548V25.8064H23.4839V27.0968H30.0645V29.1613H48V15.9355H30ZM32.6452 17.1613H45.2258L38.9677 21.5484L32.6452 17.1613ZM21.7419 25.7419H20.0645V27.0323H21.7419V25.7419ZM21.871 17.9354H23.5484V19.2257H21.871V17.9354ZM31.2903 24.1935V23.0967V22.4516V21.871H18.0645V23.0967H30V24.1935H31.2903Z"\n }\n) }), EF = () => /* @__PURE__ */ c("svg", { viewBox: "0 0 48 48", fill: "none", xmlns: "http://www.w3.org/2000/svg", children: /* @__PURE__ */ c(\n "path",\n {\n fill: "currentColor",\n fillRule: "evenodd",\n clipRule: "evenodd",\n d: "M30.6228 5V17.0304H32.6886V20.6152H33.6608L37.1241 17.0304H48V5H30.6228ZM46.8456 15.8152H36.638L33.9038 18.6709V15.8152H31.838V6.21519H46.8456V15.8152ZM39.1899 18.6709H37.9747V38.357H36.0911V35.8051C36.0911 35.7997 36.0919 35.7882 36.0929 35.7711C36.116 35.4006 36.305 32.3718 33.0532 30.3975C31.1696 29.243 28.3747 28.2709 26.3089 27.6633C25.3367 27.3595 24.6684 26.5089 24.5468 25.4759C26.0658 24.1392 26.7949 21.9519 26.9772 21.0405C27.9494 20.7975 28.6177 19.8861 28.6177 18.6709V15.9975H27.8886V11.6835C27.8886 10.6506 27.281 9.73924 26.3696 9.31393V8.8886V7.73418H19.0785C16.4658 7.73418 14.3392 9.86076 14.3392 12.4734V15.9367H13.6101V18.6101C13.6101 19.8861 14.2785 20.7975 15.3114 20.9797C15.5544 21.8911 16.2228 24.0785 17.7418 25.4152C17.6203 26.4481 17.0127 27.2987 15.9797 27.6025C13.9747 28.2101 11.119 29.243 9.23544 30.3367C5.98369 32.2529 6.17255 35.279 6.19568 35.6495C6.19675 35.6667 6.19747 35.6782 6.19747 35.6835V38.2962H4.13164V15.9367C4.13164 15.5114 4.4962 15.1468 4.92151 15.1468H11.8481V13.9316H4.92151C3.82784 13.9316 2.91645 14.843 2.91645 15.9367V38.2962H0V40.2405C0 41.5165 1.03291 42.6101 2.36962 42.6101H39.7367C41.0127 42.6101 42.1063 41.5772 42.1063 40.2405V38.2962H39.1899V18.6709ZM16.4051 20.4329L16.2835 19.9468H15.7975C14.8861 19.9468 14.8253 18.9747 14.8253 18.6709V17.1519H15.5544V12.4734C15.5544 10.5291 17.1342 8.94937 19.0785 8.94937H25.1544C25.0937 10.5899 23.757 11.8658 22.1165 11.8658H18.7139C17.8025 11.8658 17.0734 12.5949 17.0734 13.5063V14.1747H18.2886V13.5063C18.2886 13.2633 18.4709 13.081 18.7139 13.081H22.1165C23.8785 13.081 25.3975 11.9873 26.0658 10.4684C26.4304 10.7114 26.6734 11.1367 26.6734 11.6228V17.1519H27.4025V18.6709C27.4025 18.9747 27.3418 19.9468 26.4304 19.9468H25.9443L25.8835 20.4329C25.8835 20.4937 24.9114 25.5367 21.3873 25.5367H20.9013C17.843 25.5367 16.7273 21.557 16.4663 20.626C16.4317 20.5027 16.4122 20.4329 16.4051 20.4329ZM18.8962 26.2658C19.5038 26.5696 20.1722 26.7519 20.962 26.7519H21.4481C22.238 26.7519 22.9063 26.5696 23.5139 26.2658C23.8177 27.481 24.7291 28.4532 26.0051 28.8177C24.7899 30.1544 23.0886 30.8835 21.2658 30.8835C19.443 30.8835 17.7418 30.1544 16.5266 28.8177C17.681 28.4532 18.5924 27.481 18.8962 26.2658ZM7.47341 35.6835C7.47341 35.6835 7.23038 33.1317 9.96455 31.4911C11.4228 30.6405 13.4278 29.8506 15.1899 29.243C16.6481 31.0658 18.8354 32.0987 21.2051 32.0987C23.5747 32.0987 25.762 31.0658 27.2202 29.243C28.9823 29.8506 30.9873 30.6405 32.4456 31.4911C35.0468 33.0519 34.9533 35.3826 34.9381 35.7625L34.9381 35.7628C34.9373 35.782 34.9367 35.7963 34.9367 35.8051V38.4177H31.4127V35.562H30.1975V38.4177H12.2127V35.562H10.9975V38.4177H7.47341V35.6835ZM40.9519 39.5722V40.3013C40.9519 40.9089 40.4658 41.4557 39.7975 41.4557H2.43038C1.82278 41.4557 1.27594 40.9696 1.27594 40.3013V39.5722H40.9519ZM35.4228 10.3469H37.0025V11.5621H35.4228V10.3469ZM40.1013 10.3469H38.5215V11.5621H40.1013V10.3469ZM41.681 10.3469H43.2607V11.5621H41.681V10.3469Z"\n }\n) }), kF = () => /* @__PURE__ */ c("svg", { viewBox: "0 0 48 48", fill: "none", xmlns: "http://www.w3.org/2000/svg", children: /* @__PURE__ */ c(\n "path",\n {\n fill: "currentColor",\n fillRule: "evenodd",\n clipRule: "evenodd",\n d: "M36.754 11.5445C36.1257 11.5445 35.4974 11.6073 34.8063 11.733C33.7382 6.64398 29.3403 3 24.0629 3C18.8482 3 14.3246 6.76964 13.3194 11.8587C12.5026 11.6702 11.7487 11.5445 10.9948 11.5445C4.90053 11.5445 0 16.5079 0 22.5393C0 27.9424 3.64398 32.5917 8.35602 33.2199H10.3665V31.9634H8.48169C4.46074 31.4608 1.31936 27.3142 1.31936 22.5393C1.31936 17.1361 5.71729 12.7382 11.1204 12.7382C11.9372 12.7382 12.8167 12.8639 13.7592 13.178L14.4503 13.3665L14.5759 12.6754C15.267 7.8377 19.4136 4.25655 24.1885 4.25655C29.0262 4.25655 33.11 7.77488 33.8011 12.6126L33.9267 13.3037L34.6178 13.1152C35.4346 12.9267 36.1885 12.8011 36.9424 12.8011C42.3456 12.8011 46.7435 17.199 46.7435 22.6021C46.7435 27.377 43.6021 31.4608 39.5184 32.0262H37.6964V33.2828H39.644C44.4189 32.5917 48 28.0053 48 22.6021C47.8116 16.5079 42.8482 11.5445 36.754 11.5445ZM34.4294 43.0838C33.2985 38.9372 29.5916 34.7278 25.5079 34.7278V35.9843C29.0262 35.9843 32.3561 40.0053 33.2985 43.6493L31.0995 42.8325L30.6597 43.9634L34.555 45.4084L36.5655 41.7644L35.4974 41.199L34.4294 43.0838ZM33.6754 43.7121L34.1152 43.5864L33.9896 43.7749L33.6754 43.7121ZM17.8429 29.6387V39.377C17.8429 39.7539 17.7172 40.1309 17.5288 40.445H29.4659V41.7016H15.5183C14.1989 41.7016 13.1308 40.6335 13.1308 39.3142V22.9162H20.7958L21.6754 24.6754H32.6702V28.3822H34.6178V36.8011H33.3612V29.6387H17.8429ZM14.3874 24.1728V39.3142C14.3874 39.9424 14.89 40.445 15.5183 40.5079C16.1466 40.5079 16.6492 40.0053 16.6492 39.377V28.3822H31.4764V25.9319H20.9214L20.0418 24.1728H14.3874Z"\n }\n) }), NF = () => /* @__PURE__ */ c("svg", { viewBox: "0 0 48 49", fill: "none", xmlns: "http://www.w3.org/2000/svg", children: /* @__PURE__ */ c(\n "path",\n {\n fill: "currentColor",\n fillRule: "evenodd",\n clipRule: "evenodd",\n d: "M43.4556 11.8639V5.33136H18.4615L16.4734 1H0V36.3609C0 38.3491 1.20711 40.1242 2.98226 40.7633C3.5503 40.9763 4.11837 41.0473 4.68641 41.0473V41.1183H17.0414V39.6982H8.02366C8.87573 38.8461 9.44377 37.639 9.44377 36.4319V13.355H46.5799V35.5799C46.5799 37.8521 44.7337 39.6982 42.4615 39.6982H40.6154V41.1183H42.4615C45.5148 41.1183 48 38.6331 48 35.5799V11.9349H43.4556V11.8639ZM41.9645 11.8639H8.02366V36.3609C8.02366 37.426 7.52661 38.4201 6.60354 39.0592C5.68046 39.6982 4.6154 39.8402 3.47931 39.4142C2.2012 38.9881 1.42012 37.71 1.42012 36.2899V2.42012H15.5503L17.5385 6.75148H41.9645V11.8639ZM24.639 23.5088H23.2899L23.2189 31.5325H16.4024V33.0236L28.6864 48.0059L40.8994 33.2366L41.0414 33.0236V31.6035H34.7219L34.7929 28.1242H33.3728L33.3018 32.9526L39.2662 33.0236L28.6864 45.8047L18.1775 32.9526H24.639V23.5088ZM33.3735 23.5144L34.7937 23.5076L34.8048 25.8508L33.3847 25.8576L33.3735 23.5144Z"\n }\n) }), TF = () => /* @__PURE__ */ c("svg", { viewBox: "0 0 48 48", fill: "none", xmlns: "http://www.w3.org/2000/svg", children: /* @__PURE__ */ c(\n "path",\n {\n fill: "currentColor",\n fillRule: "evenodd",\n clipRule: "evenodd",\n d: "M44.0796 3.74566L44.0799 3.74591C46.5191 6.18511 47.9129 9.40835 48 13.0672C48 16.4646 46.6061 19.775 44.1669 22.2142L35.5426 30.8385L34.4102 29.706L38.6787 25.4374C37.4591 25.7859 36.2396 25.9601 34.9328 25.9601C31.5354 25.9601 28.225 24.5663 25.7858 22.1271C23.3466 19.6879 21.9528 16.4646 21.9528 12.9801C21.9528 11.6733 22.127 10.4538 22.4754 9.23416L17.3357 14.3739H19.862V15.9419H14.7222V10.8022H16.2903V13.3285L25.7858 3.83305L25.786 3.83287C26.0473 3.57155 26.3957 3.22319 26.7441 2.96191L26.9183 2.78767C27.0489 2.70056 27.2014 2.59166 27.3538 2.48276C27.5063 2.37387 27.6587 2.26497 27.7894 2.17786C27.7894 2.09074 27.8766 2.09077 27.8766 2.09077C29.9673 0.696936 32.4065 0 34.9328 0C37.5463 0 39.9854 0.696936 42.0762 2.09077C42.2069 2.22144 42.3593 2.33033 42.5117 2.43922C42.6642 2.54811 42.8167 2.657 42.9473 2.78767C42.9909 2.78767 43.0127 2.80944 43.0345 2.83122C43.0563 2.85299 43.0781 2.87476 43.1216 2.87476C43.47 3.13604 43.7313 3.39733 44.0796 3.74566ZM26.7441 20.9946C28.9219 23.1725 31.7967 24.392 34.8457 24.392C37.9819 24.392 40.8566 23.1725 42.9473 20.9946C45.0381 18.8167 46.2577 15.9419 46.2577 12.8929C46.2577 9.84391 45.1252 6.96915 42.9473 4.79129C42.8167 4.66062 42.6642 4.52995 42.5117 4.39928C42.3593 4.26862 42.2068 4.13796 42.0762 4.00729C41.9891 4.00729 41.902 3.92015 41.902 3.92015C41.6407 3.6588 41.3793 3.48456 41.1179 3.31034C39.2014 2.00362 37.0236 1.39386 34.8457 1.39386C32.6679 1.39386 30.49 2.09073 28.5735 3.31034C28.4428 3.39745 28.3121 3.50635 28.1814 3.61524C28.0507 3.72414 27.9201 3.83303 27.7894 3.92015C27.7023 3.92015 27.6152 4.00729 27.6152 4.00729C27.2668 4.26864 27.0054 4.52995 26.7441 4.79129C24.6533 6.96915 23.4337 9.84391 23.4337 12.8929C23.4337 15.9419 24.5662 18.8167 26.7441 20.9946ZM34.8457 8.18877C36.1525 8.18877 37.2849 9.05991 37.2849 10.1924H38.853C38.853 8.4501 37.4591 7.05627 35.6297 6.70782V5.22686H34.0617V6.70782C32.2323 7.05627 30.9256 8.4501 30.9256 10.1924C30.9256 12.1089 32.6679 13.677 34.8457 13.677C36.1525 13.677 37.2849 14.5481 37.2849 15.6806C37.2849 16.726 36.2396 17.6842 34.8457 17.6842C33.539 17.6842 32.4065 16.8131 32.4065 15.6806H30.8384C30.8384 17.4229 32.2323 18.8167 33.9746 19.1652V20.6461H35.5426V19.1652C37.372 18.8167 38.7659 17.4229 38.7659 15.6806C38.7659 13.7641 37.0236 12.196 34.8457 12.196C33.539 12.196 32.4065 11.3249 32.4065 10.1924C32.4065 9.05991 33.539 8.18877 34.8457 8.18877ZM30.7513 33.1907H28.225H28.0508V31.7968H33.1906V36.9366H31.6225V34.4102L22.127 43.9057C21.4301 44.5155 20.646 45.1253 19.862 45.648C17.7713 46.9547 15.4192 47.6516 12.8929 47.6516C9.4954 47.6516 6.18506 46.2578 3.74585 43.8186L3.74571 43.8184C3.48438 43.5571 3.13601 43.2087 2.87471 42.8603L2.70052 42.6861C2.61341 42.5554 2.5045 42.403 2.39559 42.2505C2.28668 42.0981 2.17777 41.9456 2.09066 41.815V41.7279C0.69683 39.6371 0 37.1979 0 34.6716C0 32.0581 0.784029 29.619 2.17786 27.5282C2.27629 27.397 2.36235 27.2657 2.44537 27.1392C2.58276 26.9296 2.7118 26.7329 2.87471 26.5699C2.87471 26.4828 2.9618 26.3957 2.9618 26.3957C3.22308 26.0473 3.48436 25.786 3.8327 25.4377L3.83295 25.4375L12.4573 16.8131L13.5898 17.9456L9.3212 22.2142C13.764 20.8204 18.8167 21.9529 22.3013 25.4375C24.7405 27.8767 26.1343 31.0999 26.1343 34.5845C26.1343 35.8912 25.96 37.1108 25.6115 38.3304L30.7513 33.1907ZM13.1542 46.0836C15.3321 46.0836 17.4229 45.4738 19.2523 44.3413C19.9492 43.9057 20.6461 43.383 21.343 42.599C23.4338 40.4211 24.6533 37.5464 24.6533 34.4974C24.6533 31.4484 23.5209 28.5736 21.343 26.3957C19.078 24.2178 16.2032 23.0854 13.2413 23.0854C10.2795 23.0854 7.40464 24.1307 5.13966 26.3957C5.00899 26.5264 4.87834 26.6788 4.74769 26.8313C4.61704 26.9837 4.48639 27.1362 4.35572 27.2668C4.35572 27.3104 4.33392 27.3322 4.31212 27.354C4.29032 27.3757 4.26852 27.3975 4.26852 27.4411C4.00735 27.7023 3.83322 27.9634 3.65911 28.2246L3.65876 28.2251C1.21956 32.0582 1.21956 36.9365 3.65876 40.7696V40.8567L4.18143 41.6407V41.6408C4.18143 41.7278 4.18143 41.7279 4.26852 41.815C4.52979 42.1633 4.79108 42.4246 5.05236 42.6859L5.05238 42.6859L5.05257 42.6861C5.57526 43.2088 6.09796 43.6444 6.70776 44.08C8.53717 45.3867 10.8022 46.0836 13.1542 46.0836ZM8.27587 37.285C9.23412 39.1145 11.1506 40.4212 13.4155 40.4212C13.749 40.4212 14.0825 40.3701 14.4941 40.3071C14.6202 40.2878 14.7536 40.2674 14.8965 40.247L15.3321 41.7279C14.7223 41.9021 14.1125 41.9892 13.5027 41.9892C10.3666 41.9892 7.75314 39.9856 6.70776 37.285H5.05257V35.717H6.27219C6.1851 35.3686 6.1851 35.0202 6.1851 34.6719V34.6716V34.6714C6.1851 34.323 6.1851 33.9747 6.27219 33.6263H5.05257V32.0582H6.70776C7.75314 29.2705 10.3666 27.354 13.5027 27.354C14.0254 27.354 14.6352 27.4411 15.3321 27.6154L14.8965 29.0963C14.7537 29.0759 14.6205 29.0555 14.4945 29.0362L14.4941 29.0362L14.4941 29.0362C14.0825 28.9732 13.749 28.9221 13.4155 28.9221C11.1506 28.9221 9.23412 30.2288 8.27587 32.0582H11.6732V33.6263H7.75309C7.666 33.9747 7.666 34.323 7.666 34.6714V34.6716V34.6719C7.666 35.0202 7.666 35.3686 7.75309 35.717H11.6732V37.285H8.27587Z"\n }\n) }), IF = () => /* @__PURE__ */ c("svg", { viewBox: "0 0 48 48", fill: "none", xmlns: "http://www.w3.org/2000/svg", children: /* @__PURE__ */ c(\n "path",\n {\n fill: "currentColor",\n fillRule: "evenodd",\n clipRule: "evenodd",\n d: "M44.0725 3.75249L44.0727 3.75272C46.6036 6.19635 47.9127 9.42546 48 13.0909C48 16.4945 46.6036 19.8109 44.16 22.2545L35.5201 30.8946L34.3855 29.76L38.6619 25.4836C37.44 25.8327 36.2182 26.0073 34.9091 26.0073C31.5055 26.0073 28.1891 24.6109 25.7455 22.1673C23.3018 19.7237 21.9054 16.4946 21.9054 13.0037C21.9054 11.6946 22.0801 10.4728 22.4292 9.25094L17.28 14.4H19.811V15.9709H14.6619V10.8218H16.2327V13.3527L25.7455 3.84002L25.7456 3.83983C26.0074 3.57803 26.3564 3.22905 26.7054 2.96729L26.88 2.79274C27.011 2.70547 27.1637 2.59637 27.3164 2.48728C27.4691 2.37819 27.6219 2.26909 27.7528 2.18182C27.7528 2.09455 27.84 2.09457 27.84 2.09457C29.9346 0.698203 32.3782 0 34.9091 0C37.5273 0 39.971 0.698203 42.0655 2.09457C42.1964 2.22548 42.3492 2.33456 42.5019 2.44365C42.6546 2.55274 42.8073 2.66183 42.9382 2.79274C42.9819 2.79274 43.0037 2.81455 43.0255 2.83636C43.0473 2.85818 43.0691 2.87999 43.1127 2.87999C43.4618 3.14175 43.7235 3.40351 44.0725 3.75249ZM26.7928 21.0328C28.9746 23.2146 31.8545 24.4364 34.9091 24.4364C37.9636 24.4364 40.8437 23.2146 43.0255 21.0328C45.12 18.8509 46.3418 15.9709 46.3418 12.9164C46.3418 9.86181 45.2073 6.98182 43.0255 4.8C42.8946 4.66909 42.7419 4.53819 42.5891 4.40729C42.4364 4.27639 42.2837 4.14549 42.1528 4.01458C42.0655 4.01458 41.9782 3.92727 41.9782 3.92727C41.7163 3.66545 41.4546 3.4909 41.1928 3.31635C39.2728 2.00726 37.0909 1.3964 34.9091 1.3964C32.7273 1.3964 30.5455 2.09453 28.6255 3.31635C28.4946 3.40363 28.3637 3.51272 28.2328 3.62181C28.1018 3.73091 27.9709 3.84 27.84 3.92727C27.7527 3.92727 27.6655 4.01458 27.6655 4.01458C27.3164 4.2764 27.0546 4.53818 26.7928 4.8C24.6982 6.98182 23.4764 9.86181 23.4764 12.9164C23.4764 15.9709 24.611 18.8509 26.7928 21.0328ZM34.257 14.4666V14.4666V14.4667C34.2344 14.749 34.2109 15.0427 34.2109 15.3599C34.2109 15.8835 34.1235 16.4944 34.0363 17.018H39.0109V18.8508H31.5927C31.9418 17.0181 32.1163 15.2726 32.1163 13.7017H30.4581V11.9562H32.1163V10.7344C32.1163 9.86165 32.2909 9.07621 32.4654 8.46531C32.7272 7.8544 32.989 7.41805 33.3381 7.06896C33.6872 6.71987 34.1236 6.54528 34.6472 6.37074C35.1709 6.28347 35.6944 6.19624 36.3053 6.19624C36.7417 6.19624 37.2653 6.28347 37.6144 6.37074C38.0508 6.45801 38.3999 6.54531 38.749 6.71985L38.2254 8.46531C37.7018 8.20349 37.0909 8.02894 36.3927 8.02894H36.3924C36.0435 8.02894 35.7817 8.02894 35.52 8.11619C35.2581 8.20347 35.0835 8.37801 34.909 8.55256C34.7344 8.7271 34.5599 8.98894 34.4726 9.33803C34.3853 9.68712 34.2981 10.1235 34.2981 10.6471V11.9562H37.5272V13.7017H34.2981C34.2981 13.9534 34.278 14.2051 34.257 14.4666ZM8.20366 37.3528C9.16366 39.1856 11.0837 40.4947 13.3528 40.4947C13.789 40.4947 14.3125 40.4074 14.836 40.3202L14.8364 40.3201L15.2727 41.8038C14.6618 41.9783 14.0509 42.0656 13.44 42.0656C10.2982 42.0656 7.67998 40.0583 6.63271 37.3528H4.97461V35.7819H6.19634C6.10909 35.4329 6.10909 35.0839 6.10909 34.7349V34.7346V34.7344C6.10909 34.3854 6.10909 34.0364 6.19634 33.6874H4.97461V32.1165H6.63271C7.67998 29.3237 10.2982 27.4038 13.44 27.4038C13.9637 27.4038 14.5745 27.491 15.2727 27.6656L14.8364 29.1492C14.6936 29.1288 14.5605 29.1084 14.4346 29.0892L14.4335 29.089L14.4331 29.0889C14.0208 29.0258 13.6868 28.9747 13.3528 28.9747C11.0837 28.9747 9.16366 30.2837 8.20366 32.1165H11.6073V33.6874H7.68004C7.59279 34.0364 7.59279 34.3854 7.59279 34.7344V34.7346V34.7349C7.59279 35.0839 7.59279 35.4329 7.68004 35.7819H11.6073V37.3528H8.20366ZM28.2764 33.251H30.8073L25.6582 38.4001C26.0073 37.1782 26.1818 35.9564 26.1818 34.6473C26.1818 31.1564 24.7854 27.9273 22.3418 25.4837C18.8509 21.9928 13.7892 20.8582 9.33825 22.2546L13.6145 17.9783L12.48 16.8437L3.84002 25.4837L3.83977 25.484C3.49081 25.8329 3.22905 26.0947 2.96729 26.4437C2.96729 26.4437 2.88004 26.531 2.88004 26.6182C2.7168 26.7815 2.58747 26.9787 2.44976 27.1886C2.3666 27.3154 2.28039 27.4468 2.18182 27.5783C0.785454 29.6728 0 32.1164 0 34.7346C0 37.2655 0.698203 39.7092 2.09457 41.8037V41.891C2.1818 42.0218 2.29082 42.1745 2.39984 42.3271L2.4 42.3273L2.40016 42.3275C2.50918 42.4802 2.6182 42.6328 2.70543 42.7637L2.88004 42.9382C3.14179 43.2872 3.49077 43.6362 3.75256 43.898L3.75277 43.8982C6.19641 46.3419 9.51277 47.7382 12.9164 47.7382C15.36 47.7382 17.8037 47.0401 19.811 45.731C20.5964 45.2073 21.3819 44.5964 22.08 43.8982L31.5928 34.3855V36.9164H33.1636V31.7673H28.0145V33.251H28.2764ZM19.4619 44.3346C17.6291 45.5564 15.4473 46.2546 13.1782 46.2546C10.8218 46.2546 8.55279 45.5564 6.72006 44.2473C6.10915 43.811 5.5855 43.3746 5.06186 42.851L5.06167 42.8508C4.79992 42.5891 4.53814 42.3273 4.27638 41.9783L4.10188 41.8037L3.57816 41.0182V40.931C1.13452 37.091 1.13452 32.2037 3.57816 28.3637C3.75271 28.1019 3.92731 27.8401 4.18913 27.5783C4.18913 27.5346 4.21095 27.5128 4.23276 27.491C4.25457 27.4692 4.27638 27.4473 4.27638 27.4037C4.40729 27.2728 4.53821 27.1201 4.66912 26.9673C4.80004 26.8146 4.93095 26.6619 5.06186 26.531C7.33095 24.2619 10.2109 23.2146 13.1782 23.2146C16.1454 23.2146 19.0255 24.3492 21.2946 26.531C23.4764 28.7128 24.611 31.5928 24.611 34.6473C24.611 37.7019 23.3891 40.5819 21.2946 42.7637C20.6837 43.3746 20.0728 43.8982 19.4619 44.3346Z"\n }\n) }), DF = () => /* @__PURE__ */ c("svg", { viewBox: "0 0 48 48", fill: "none", xmlns: "http://www.w3.org/2000/svg", children: /* @__PURE__ */ c(\n "path",\n {\n fill: "currentColor",\n fillRule: "evenodd",\n clipRule: "evenodd",\n d: "M43.1215 2.87476C43.47 3.1361 43.7314 3.39744 44.0799 3.7459C46.5191 6.1851 47.9129 9.40833 48 13.0671C48 16.4646 46.6062 19.7749 44.167 22.2141L35.5426 30.8384L34.4101 29.706L38.6787 25.4374C37.4591 25.7858 36.2396 25.96 34.9329 25.96C31.5354 25.96 28.2251 24.5662 25.7859 22.127C23.3467 19.6878 21.9528 16.4646 21.9528 12.98C21.9528 11.6733 22.127 10.4537 22.4755 9.23414L17.3357 14.3738H19.8621V15.9419H14.7223V10.8022H16.2904V13.3285L25.7859 3.83305L25.7861 3.83288C26.0474 3.57155 26.3957 3.22319 26.7441 2.9619C26.7441 2.90806 26.7774 2.88749 26.8234 2.85906C26.8518 2.8415 26.885 2.82093 26.9183 2.78766C27.049 2.70055 27.2014 2.59165 27.3539 2.48275C27.5063 2.37386 27.6588 2.26497 27.7894 2.17785C27.7894 2.09074 27.8765 2.09076 27.8765 2.09076C29.9673 0.696935 32.4066 0 34.9329 0C37.5463 0 39.9855 0.696935 42.0762 2.09076C42.2069 2.22143 42.3593 2.33032 42.5118 2.43921C42.6642 2.5481 42.8167 2.65699 42.9473 2.78766C42.9909 2.78766 43.0127 2.80944 43.0344 2.83121C43.0562 2.85298 43.078 2.87476 43.1215 2.87476ZM26.7441 20.9946C28.922 23.1724 31.7967 24.392 34.8457 24.392C37.9818 24.392 40.8566 23.1724 42.9473 20.9946C45.0381 18.8167 46.2577 15.9419 46.2577 12.8929C46.2577 9.84389 45.1252 6.96913 42.9473 4.79128C42.8167 4.66061 42.6642 4.52995 42.5118 4.39928C42.3593 4.26862 42.2069 4.13796 42.0762 4.00728C41.9891 4.00728 41.902 3.92014 41.902 3.92014C41.6407 3.6588 41.3793 3.48456 41.118 3.31033C39.2014 2.00362 37.0235 1.39386 34.8457 1.39386C32.6678 1.39386 30.49 2.09073 28.5735 3.31033C28.4428 3.39744 28.3121 3.50634 28.1815 3.61523C28.0508 3.72413 27.9201 3.83302 27.7894 3.92014C27.7023 3.92014 27.6153 4.00728 27.6153 4.00728C27.2668 4.26863 27.0055 4.52994 26.7441 4.79128C24.6534 6.96913 23.4337 9.84389 23.4337 12.8929C23.4337 15.9419 24.5663 18.8167 26.7441 20.9946ZM34.8457 8.18875C36.1524 8.18875 37.2849 9.05989 37.2849 10.1924H38.853C38.853 8.45009 37.4591 7.05626 35.6297 6.7078V5.22685H34.0617V6.7078C32.2323 7.05626 30.9255 8.45009 30.9255 10.1924C30.9255 12.1089 32.6678 13.6769 34.8457 13.6769C36.1524 13.6769 37.2849 14.5481 37.2849 15.6806C37.2849 16.7259 36.2395 17.6842 34.8457 17.6842C33.539 17.6842 32.4065 16.813 32.4065 15.6806H30.8384C30.8384 17.4228 32.2322 18.8167 33.9745 19.1651V20.6461H35.5426V19.1651C37.372 18.8167 38.7658 17.4228 38.7658 15.6806C38.7658 13.764 37.0235 12.196 34.8457 12.196C33.539 12.196 32.4065 11.3249 32.4065 10.1924C32.4065 9.05989 33.539 8.18875 34.8457 8.18875ZM30.7514 33.1906H28.225H27.9637V31.7096H33.1034V36.8493H31.5354V34.3231L22.0399 43.8185C21.343 44.5154 20.559 45.1252 19.775 45.6479C17.7714 46.9546 15.3321 47.6515 12.8929 47.6515C9.49549 47.6515 6.18515 46.2577 3.74595 43.8185L3.74581 43.8183C3.48448 43.557 3.1361 43.2086 2.87481 42.8602C2.82098 42.8602 2.80043 42.827 2.77203 42.781C2.75447 42.7526 2.73391 42.7193 2.70062 42.686C2.61351 42.5553 2.50459 42.4029 2.39567 42.2504L2.39561 42.2503C2.28673 42.0979 2.17785 41.9455 2.09076 41.8149V41.7278C0.696935 39.637 0 37.1978 0 34.6715C0 32.0581 0.784028 29.6189 2.17785 27.5282C2.27625 27.397 2.3623 27.2658 2.4453 27.1392C2.58276 26.9297 2.71186 26.7328 2.87481 26.5699C2.87481 26.5263 2.89658 26.5045 2.91836 26.4828C2.94013 26.461 2.9619 26.4392 2.9619 26.3956C3.22318 26.0473 3.48446 25.786 3.8328 25.4377L3.83305 25.4374L12.4574 16.8131L13.5899 17.9456L9.32128 22.2142C13.7641 20.8203 18.8167 21.9528 22.3013 25.4374C24.7405 27.8766 26.1343 31.0998 26.1343 34.5844C26.1343 35.8911 25.96 37.1107 25.6116 38.3303L30.7514 33.1906ZM13.1543 46.0835C15.3322 46.0835 17.4229 45.4737 19.2523 44.3412C19.9492 43.9056 20.6461 43.3829 21.343 42.686C23.4337 40.5081 24.6534 37.6334 24.6534 34.5844C24.6534 31.5354 23.5208 28.6606 21.343 26.4828C19.078 24.3049 16.2033 23.1725 13.2414 23.1725C10.2795 23.1725 7.40473 24.2178 5.13976 26.4828C5.00909 26.6135 4.87841 26.7659 4.74774 26.9184C4.61706 27.0708 4.48638 27.2233 4.35571 27.3539C4.35571 27.3975 4.33394 27.4193 4.31216 27.441C4.29039 27.4628 4.26862 27.4846 4.26862 27.5282C4.00734 27.7894 3.83317 28.0507 3.65899 28.312L3.65886 28.3122C1.21966 32.1452 1.21966 37.0236 3.65886 40.8566V40.9437L4.18152 41.7278V41.7278C4.18152 41.8149 4.18152 41.8149 4.26862 41.902C4.52987 42.2504 4.79114 42.5116 5.05239 42.7729L5.05242 42.7729L5.05244 42.7729L5.05267 42.7732C5.57526 43.2957 6.18495 43.7312 6.79464 44.1667L6.79467 44.1667L6.79472 44.1668L6.79495 44.167C8.71146 45.3866 10.8894 46.0835 13.1543 46.0835ZM11.9809 36.6544C11.9583 36.9363 11.9348 37.2294 11.9348 37.5461C11.8931 37.8383 11.8713 38.1105 11.8504 38.3722C11.8277 38.6568 11.8059 38.929 11.7605 39.2012H16.7261V41.0307H9.32139C9.66984 39.2013 9.84405 37.459 9.84405 35.8909H8.18886V34.1486H9.84405V32.929C9.84405 32.0578 10.0183 31.2738 10.1925 30.664C10.4539 30.0542 10.7152 29.6187 11.0637 29.2702C11.4121 28.9218 11.8477 28.7475 12.3704 28.5733C12.8931 28.4862 13.4158 28.3991 14.0256 28.3991C14.4611 28.3991 14.9838 28.4862 15.3323 28.5733C15.7679 28.6604 16.1163 28.7475 16.4647 28.9218L15.942 30.664C15.4194 30.4027 14.8096 30.2285 14.1127 30.2285H14.1124C13.7641 30.2285 13.5028 30.2285 13.2415 30.3156C12.9802 30.4027 12.8059 30.5769 12.6317 30.7511C12.4574 30.9254 12.2832 31.1867 12.1961 31.5352C12.109 31.8836 12.0219 32.3192 12.0219 32.8419V34.1486H15.2451V35.8909H12.0219C12.0219 36.1422 12.0018 36.3934 11.9809 36.6544Z"\n }\n) }), HF = () => /* @__PURE__ */ c("svg", { viewBox: "0 0 48 48", fill: "none", xmlns: "http://www.w3.org/2000/svg", children: /* @__PURE__ */ c(\n "path",\n {\n fill: "currentColor",\n fillRule: "evenodd",\n clipRule: "evenodd",\n d: "M46.842 23.1278H48V24.2859H46.842C42.0941 33.0289 33.4089 38.4137 24.1448 38.4137C14.8806 38.4137 6.02171 32.8552 1.44753 24.2859H0V23.1278H1.44753C6.19542 14.3848 14.8806 9 24.1448 9C33.4089 9 42.0941 14.4427 46.842 23.1278ZM2.43185 23.649C6.77443 31.8709 15.2859 37.1978 24.1448 37.1978C33.0036 37.1978 41.2835 32.0446 45.8577 23.649C41.2835 15.2533 33.0036 10.1001 24.1448 10.1001C15.2859 10.1001 7.00603 15.3112 2.43185 23.649ZM4.51628 23.3594C8.56936 16.3534 16.0965 12.0108 24.1448 12.0108C32.193 12.0108 39.7201 16.4113 43.8311 23.3594L44.0048 23.649L43.8311 23.9385C39.778 30.9445 32.2509 35.2871 24.2027 35.2871C16.0965 35.2871 8.39566 30.8287 4.51628 23.9385L4.34258 23.649L4.51628 23.3594ZM5.67431 23.7068C9.37998 30.076 16.6176 34.187 24.1448 34.187C31.6719 34.187 38.7358 30.1918 42.6152 23.7068C38.7358 17.2219 31.6719 13.2268 24.1448 13.2268C16.6176 13.2268 9.55368 17.2219 5.67431 23.7068ZM31.9614 18.0905C31.9614 18.7853 31.614 19.4222 31.0929 19.8854L31.614 19.6538C32.3088 20.8697 32.6562 22.2594 32.6562 23.7069C32.6562 28.339 28.8926 32.1605 24.2027 32.1605C19.5706 32.1605 15.7491 28.3969 15.7491 23.7069C15.7491 19.0748 19.5127 15.2533 24.2027 15.2533C25.5344 15.2533 26.8082 15.5428 28.0241 16.1797L27.7925 16.5851C28.1978 16.064 28.8347 15.7165 29.5875 15.7165C30.9192 15.7165 31.9614 16.7588 31.9614 18.0905ZM30.8034 18.0326C30.8034 17.3378 30.2823 16.8167 29.5875 16.8167C28.9505 16.8167 28.3715 17.3957 28.3715 18.0326C28.3715 18.7274 28.8926 19.2485 29.5875 19.2485C30.2823 19.2485 30.8034 18.7274 30.8034 18.0326ZM16.7913 23.649C16.7913 27.7021 20.0917 31.0024 24.1448 31.0024C28.1978 31.0024 31.4982 27.7021 31.4982 23.5911C31.4982 22.3752 31.2087 21.1593 30.6297 20.1171C30.3402 20.2908 29.9928 20.3486 29.6454 20.3486C28.3136 20.3486 27.2714 19.3064 27.2714 17.9747C27.2714 17.6273 27.3293 17.3378 27.4451 17.0483C26.4029 16.5851 25.3028 16.2956 24.1448 16.2956C20.0917 16.2956 16.7913 19.5959 16.7913 23.649ZM24.1448 19.6537C21.9445 19.6537 20.1496 21.4487 20.1496 23.6489C20.1496 25.8492 21.9445 27.6441 24.1448 27.6441C26.345 27.6441 28.1399 25.8492 28.1399 23.6489C28.1399 21.4487 26.345 19.6537 24.1448 19.6537ZM24.1448 26.544C22.5814 26.544 21.2497 25.2702 21.2497 23.6489C21.2497 22.0856 22.5235 20.7539 24.1448 20.7539C25.7081 20.7539 27.0398 22.0277 27.0398 23.6489C27.0398 25.2702 25.7081 26.544 24.1448 26.544Z"\n }\n) }), VF = () => /* @__PURE__ */ c("svg", { viewBox: "0 0 48 48", fill: "none", xmlns: "http://www.w3.org/2000/svg", children: /* @__PURE__ */ c(\n "path",\n {\n fill: "currentColor",\n fillRule: "evenodd",\n clipRule: "evenodd",\n d: "M23.9674 4.81954C25.27 4.81954 26.3772 3.71234 26.3772 2.40976C26.3772 1.10718 25.27 0 23.9674 0C22.6649 0 21.5577 1.10718 21.5577 2.40976C21.5577 3.77747 22.6649 4.81954 23.9674 4.81954ZM23.9674 1.30258C24.5536 1.30258 25.0746 1.8236 25.0746 2.40976C25.0746 2.99592 24.5536 3.51696 23.9674 3.51696C23.3813 3.51696 22.8602 2.99592 22.8602 2.40976C22.8602 1.8236 23.3162 1.30258 23.9674 1.30258ZM23.9674 6.96877C14.5889 6.96877 6.96877 14.5889 6.96877 23.9674C6.96877 33.346 14.5889 40.9661 23.9674 40.9661C33.346 40.9661 40.9661 33.346 40.9661 23.9674C40.9661 14.5889 33.346 6.96877 23.9674 6.96877ZM32.9552 23.3161C32.8901 20.4505 32.4993 17.7802 31.7829 15.5007C33.0855 14.7842 34.1927 13.8724 35.0393 12.8304C37.7748 15.5658 39.4681 19.213 39.5984 23.3161H32.9552ZM24.6187 8.33648C26.8982 8.72725 28.9172 11.2673 30.2198 14.9145C28.5916 15.6309 26.6377 16.0868 24.6187 16.152V8.33648ZM23.3161 8.33648V16.152C21.2971 16.0868 19.4084 15.6309 17.715 14.9145C19.0176 11.2673 21.0366 8.72725 23.3161 8.33648ZM23.3161 17.3894V23.3161H16.2822C16.3473 20.711 16.7381 18.2361 17.3243 16.0868C19.1479 16.8684 21.1669 17.3243 23.3161 17.3894ZM23.3161 24.6187V30.5455C21.1669 30.6106 19.1479 31.0665 17.3243 31.848C16.673 29.6988 16.3473 27.2239 16.2822 24.6187H23.3161ZM23.3161 31.848V39.6635C21.0366 39.2727 19.0176 36.7327 17.715 33.0855C19.4084 32.3691 21.2971 31.9132 23.3161 31.848ZM24.6187 39.6635V31.848C26.6377 31.9132 28.5265 32.3691 30.2198 33.0855C28.9172 36.7327 26.8982 39.2727 24.6187 39.6635ZM24.6187 30.5455V24.6187H31.6526C31.5875 27.2239 31.1967 29.6988 30.6106 31.848C28.787 31.0665 26.768 30.6106 24.6187 30.5455ZM24.6187 23.3161V17.3894C26.768 17.3243 28.787 16.8684 30.6106 16.0868C31.2619 18.2361 31.5875 20.711 31.6526 23.3161H24.6187ZM34.1275 11.9837C33.4111 12.8955 32.4993 13.6119 31.3921 14.2632C30.5454 11.9837 29.4382 10.095 28.0705 8.79239C30.3501 9.44368 32.3691 10.5509 34.1275 11.9837ZM16.5427 14.2632C15.4355 13.6119 14.5237 12.8304 13.8073 11.9837C15.5658 10.4857 17.5848 9.44368 19.8643 8.79239C18.4966 10.095 17.3894 11.9837 16.5427 14.2632ZM12.8304 12.8304C13.677 13.8724 14.7842 14.7842 16.0868 15.5007C15.3704 17.7802 14.9796 20.4505 14.9145 23.3161H8.20621C8.4016 19.2781 10.1601 15.5658 12.8304 12.8304ZM8.27134 24.6187H14.9796C15.0447 27.4844 15.4355 30.1547 16.152 32.4342C14.8494 33.1506 13.7422 34.0624 12.8304 35.1045C10.1601 32.4342 8.4016 28.7218 8.27134 24.6187ZM13.8073 35.9511C14.5237 35.0393 15.4355 34.2578 16.5427 33.6716C17.3894 36.0163 18.4966 37.905 19.8643 39.1425C17.5848 38.5563 15.5007 37.4491 13.8073 35.9511ZM31.3921 33.6716C32.4993 34.3229 33.4111 35.1045 34.1275 35.9511C32.3691 37.4491 30.3501 38.4912 28.0705 39.1425C29.4382 37.905 30.5454 36.0163 31.3921 33.6716ZM35.1045 35.1045C34.2578 34.0624 33.1506 33.1506 31.7829 32.4342C32.4342 30.1547 32.8901 27.4844 32.9552 24.6187H39.6635C39.4681 28.7218 37.7748 32.4342 35.1045 35.1045ZM21.5577 45.5903C21.5577 44.2877 22.6649 43.1805 23.9674 43.1805C25.27 43.1805 26.3772 44.2226 26.3772 45.5903C26.3772 46.8929 25.27 48.0001 23.9674 48.0001C22.6649 48.0001 21.5577 46.8929 21.5577 45.5903ZM22.8602 45.5252C22.8602 46.1113 23.3813 46.6324 23.9674 46.6324C24.5536 46.6324 25.0746 46.1765 25.0746 45.5252C25.0746 44.939 24.5536 44.418 23.9674 44.418C23.3813 44.418 22.8602 44.939 22.8602 45.5252ZM45.5251 21.5577C44.2225 21.5577 43.1153 22.6649 43.1153 23.9675C43.1153 25.2701 44.2225 26.3773 45.5251 26.3773C46.8277 26.3773 47.9349 25.2701 47.9349 23.9675C47.9349 22.6649 46.8277 21.5577 45.5251 21.5577ZM45.5251 25.0747C44.9389 25.0747 44.4179 24.5537 44.4179 23.9675C44.4179 23.3814 44.9389 22.8603 45.5251 22.8603C46.1113 22.8603 46.6323 23.3814 46.6323 23.9675C46.6323 24.6188 46.1113 25.0747 45.5251 25.0747ZM2.40978 21.5577C3.71236 21.5577 4.81956 22.6649 4.81956 23.9675C4.81956 25.3352 3.71236 26.3773 2.40978 26.3773C1.1072 26.3773 0 25.2701 0 23.9675C0 22.6649 1.1072 21.5577 2.40978 21.5577ZM1.30258 23.9675C1.30258 24.5537 1.82362 25.0747 2.40978 25.0747C2.99594 25.0747 3.51698 24.6188 3.51698 23.9675C3.51698 23.3814 2.99594 22.8603 2.40978 22.8603C1.82362 22.8603 1.30258 23.3814 1.30258 23.9675ZM19.4085 3.64718L19.1479 2.40974C10.8766 4.29848 4.29854 10.8114 2.47493 19.0828L3.71238 19.3433C5.47086 11.5929 11.593 5.40567 19.4085 3.64718ZM2.47493 29.1778L3.71238 28.8522C5.53599 36.4071 11.6581 42.5292 19.2782 44.3528L18.9525 45.5903C10.8766 43.7016 4.36367 37.2538 2.47493 29.1778ZM28.5265 44.3528L28.787 45.5902C37.0584 43.7666 43.6364 37.3189 45.5903 29.1126L44.3528 28.787C42.4641 36.5373 36.2769 42.6594 28.5265 44.3528ZM45.5903 19.0828L44.3528 19.3433C42.5943 11.5278 36.4071 5.40567 28.5916 3.64718L28.8521 2.40974C37.1235 4.23335 43.7015 10.8114 45.5903 19.0828Z"\n }\n) }), PF = () => /* @__PURE__ */ c("svg", { viewBox: "0 0 48 48", fill: "none", xmlns: "http://www.w3.org/2000/svg", children: /* @__PURE__ */ c(\n "path",\n {\n fill: "currentColor",\n fillRule: "evenodd",\n clipRule: "evenodd",\n d: "M7 0H37.4991L42.1717 4.67257V48H7V0ZM40.3027 5.01241L37.3293 2.03896V5.01241H40.3027ZM8.44431 1.44426V46.4708H40.5575V6.37168H35.8V1.44426H8.44431ZM32.5717 23.6177H35.885V37.6354H38.1788V39.1647H10.993V37.6354H13.2867V34.1523L17.1098 32.708V31.8585V31.0089L21.9522 28.2903H26.37L30.2779 25.4018L32.5717 23.6177ZM34.4408 25.147H33.1664L31.5522 26.4213H31.6372V37.6354H34.4408V25.147ZM18.639 37.6354H21.4425V30.3293L18.639 31.9434V33.7275V37.6354ZM25.6903 29.8196H22.8868V37.6354H25.6903V29.8196ZM30.023 27.5257L27.2195 29.5646V37.6354H30.023V27.5257ZM17.0248 34.3222L14.731 35.1718V37.6354H17.0248V34.3222ZM36.1399 15.207H22.1222V16.7362H36.1399V15.207ZM22.1222 19.4548H36.1399V20.984H22.1222V19.4548ZM29.0885 10.9592H22.1222V12.4884H29.0885V10.9592ZM19.1487 20.8142H13.5417C13.8575 19.5507 13.9532 18.2871 14.0333 17.2283C14.0394 17.148 14.0454 17.069 14.0514 16.9912H12.777V15.6319H14.0514V14.6974C14.0514 14.0177 14.1363 13.4231 14.3062 12.9983C14.4761 12.4885 14.731 12.1487 14.9859 11.8939C15.3257 11.554 15.5805 11.3841 16.0053 11.2992C16.4301 11.2142 16.8548 11.1293 17.2796 11.1293H17.2799C17.7046 11.1293 18.0444 11.1293 18.2992 11.2142C18.484 11.2142 18.7134 11.3036 18.9228 11.3851C19.0022 11.416 19.0787 11.4457 19.1487 11.4691L18.7239 12.8284C18.2992 12.5735 17.7894 12.4886 17.2796 12.4886H17.2794C17.0246 12.4886 16.7699 12.4886 16.6 12.5735C16.3452 12.6584 16.2603 12.7434 16.0905 12.9132L16.0903 12.9133C15.9204 13.0832 15.8354 13.2532 15.7505 13.508C15.6655 13.8478 15.6655 14.1026 15.6655 14.5272V14.5275V15.5469H18.1292V16.9063H15.6655C15.6655 17.1187 15.6443 17.331 15.623 17.5434C15.6018 17.7558 15.5805 17.9682 15.5805 18.1806C15.538 18.393 15.5168 18.6054 15.4956 18.8178C15.4743 19.0302 15.4531 19.2426 15.4106 19.4549H19.1487V20.8142Z"\n }\n) }), FF = () => /* @__PURE__ */ c("svg", { viewBox: "0 0 48 48", fill: "none", xmlns: "http://www.w3.org/2000/svg", children: /* @__PURE__ */ c(\n "path",\n {\n fill: "currentColor",\n d: "M48 23.1361L47.3717 22.1937L44.8586 23.9529L36.3142 11.7016L38.8272 9.94241L38.199 9L34.8063 11.3874L43.0366 23.1361L41.466 24.0785C40.0209 24.9581 38.8273 26.0262 37.822 27.1571C37.6964 27.0314 37.5707 26.9057 37.3822 26.7801L31.3508 22.6335H31.4136C32.4817 22.6335 33.6754 22.3194 34.6807 21.4398L33.9896 20.5602C31.8535 22.3822 29.2147 21.0628 28.5236 20.6859L28.021 20.3717L23.7487 17.2304C23.3089 16.9162 22.7435 16.7906 22.2408 16.9162C21.7382 17.0419 21.2356 17.356 20.9843 17.7958L19.9791 19.3665C19.0367 20.8743 17.3403 22.1309 15.3927 21.3141C15.0785 21.1885 14.8901 21 14.8273 20.8115C14.7645 20.4345 15.0786 19.9948 15.267 19.8063L18.7225 15.2199C19.3508 14.4031 20.3561 13.9005 21.4241 13.9005C21.487 13.9005 26.6388 13.3979 33.2356 15.4712L33.4869 15.534L36.1256 13.712L35.4974 12.7696L33.3613 14.2775C26.7016 12.2042 21.6126 12.7068 21.4241 12.7696C20.1676 12.8325 18.911 13.3979 18.0943 14.3403L16.2094 14.466C15.5812 14.5288 14.9529 14.3403 14.3246 14.089L12.2513 12.7068L13.1937 11.3874L9.80111 9L9.17283 9.94241L11.6859 11.7016L3.14136 23.9529L0.628272 22.1937L0 23.1361L3.39268 25.5235L11.6859 13.712L13.7592 15.0942L13.8849 15.1571C14.576 15.534 15.267 15.7225 16.0209 15.7225C16.0838 15.7225 16.2094 15.7225 16.2723 15.7225L17.2147 15.6597L14.5131 19.3037C14.4503 19.4293 13.6335 20.3089 13.822 21.2513C13.8848 21.6283 14.199 22.1937 15.0157 22.5707C17.1518 23.5131 19.4764 22.5707 20.9843 20.2461L21.9895 18.6754C22.1152 18.4869 22.3037 18.3612 22.555 18.2984C22.8063 18.2356 22.9948 18.2984 23.1833 18.4241L27.3298 21.4398L27.5183 21.5654L27.7697 21.7539C27.8325 21.8167 27.8953 21.8167 27.9581 21.8796L36.7539 27.9738C37.1937 28.2251 37.3822 28.6649 37.3822 29.1675C37.3822 29.5445 37.2566 29.9215 36.9424 30.1728C36.4398 30.6754 35.6859 30.7382 35.1204 30.3612C34.7435 30.1099 27.8325 25.3351 27.7697 25.2722L27.1414 26.2147C27.2042 26.2775 27.8325 26.6544 28.5864 27.2199L35.3717 31.8691C35.6231 32.1204 35.7487 32.4974 35.7487 32.9372C35.7487 33.377 35.5602 33.8167 35.3089 34.0681C34.8063 34.5707 34.0524 34.6335 33.4869 34.2565C33.4241 34.1937 33.11 34.0052 32.733 33.7539L32.6701 33.6911L25.7592 28.9162L25.1309 29.8586H25.1938C25.4451 30.0471 30.1571 33.3141 32.1048 34.6335C32.5446 35.1989 32.5445 36.0157 32.0419 36.5811C31.5393 37.0838 30.7854 37.1466 30.2199 36.7696C30.0943 36.644 28.6492 35.7016 27.0157 34.5707L26.9529 34.5078L22.4922 31.4293C22.3037 31.3037 22.178 31.2408 22.178 31.2408L21.9267 31.1152L21.2984 32.0576L21.6126 32.3089C22.1152 32.6859 24.3141 34.1937 26.3246 35.5131C26.8272 36.0785 26.7644 36.8953 26.2618 37.4607C25.7592 37.9633 25.0052 38.0262 24.4398 37.6492C24.1885 37.4607 22.4921 36.3298 21.6754 35.7644C21.6754 35.0733 21.4241 34.3822 20.9215 33.8167C20.5445 33.4398 19.9163 33.1885 19.3508 33.1256C19.6649 32.1204 19.288 30.9895 18.4084 30.2984C17.9686 29.9843 17.466 29.7958 16.9005 29.7958C17.6545 28.6649 17.4031 27.0942 16.3351 26.2775C15.7696 25.9005 15.1414 25.712 14.4503 25.8377C13.9476 25.9005 13.5079 26.1518 13.1309 26.466C12.9424 25.9633 12.6911 25.5235 12.2513 25.2094C11.6859 24.8324 11.0576 24.644 10.3665 24.7696C9.67539 24.8953 9.10998 25.2094 8.67019 25.7749L8.48167 26.0262L5.15188 23.4503L4.46079 24.3298L7.79059 26.9058L6.91099 28.0995C6.09424 29.2304 6.28274 30.8639 7.47645 31.6806C7.91624 31.9948 8.41888 32.1832 8.98432 32.1832H9.04713C8.60734 33.2513 8.92151 34.5078 9.86392 35.2618C10.3037 35.5759 10.8063 35.7644 11.3718 35.7644C11.4974 35.7644 11.6231 35.7644 11.7487 35.7644C12.0629 35.7016 12.377 35.5759 12.6911 35.4503C12.8168 36.0157 13.1309 36.5183 13.6335 36.8953C14.0733 37.2094 14.576 37.3979 15.1414 37.3979C15.2671 37.3979 15.3927 37.3979 15.5184 37.3979C15.8325 37.3351 16.2095 37.2094 16.4608 37.0838C16.5864 37.6492 16.9006 38.2147 17.4032 38.5916C17.843 38.9058 18.3456 39.0942 18.9111 39.0942C19.0367 39.0942 19.1623 39.0942 19.288 39.0942C19.9791 38.9686 20.5445 38.6544 20.9843 38.089C21.1728 37.8377 21.3613 37.5235 21.4241 37.2094C22.3037 37.7749 23.4974 38.6544 23.7487 38.7801C24.1885 39.0314 24.6911 39.2199 25.1309 39.2199C25.822 39.2199 26.4503 38.9686 26.9529 38.466C27.4555 37.9633 27.644 37.3351 27.7069 36.7068C28.7121 37.3979 29.4031 37.9005 29.5288 37.9633C29.9686 38.2147 30.4712 38.4031 30.911 38.4031C31.6021 38.4031 32.2304 38.1518 32.733 37.6492C33.2357 37.1466 33.4869 36.4555 33.4869 35.7644C33.7382 35.8272 34.0524 35.89 34.3037 35.89C34.9948 35.89 35.623 35.6387 36.1256 35.1361C36.6283 34.6335 36.8796 34.0052 36.8796 33.2513C36.8796 32.7487 36.754 32.3089 36.5655 31.8691C37.0053 31.7434 37.4451 31.555 37.822 31.178C38.3246 30.6754 38.5759 30.0471 38.5759 29.356C38.5759 29.1047 38.5131 28.8534 38.4503 28.6021C39.3927 27.4712 40.6492 26.4031 42.0942 25.4607L43.6649 24.4555L44.6702 25.8377L48 23.1361ZM7.91629 30.4241C7.28802 29.9215 7.16236 29.0419 7.60215 28.4136L9.36127 26.089C9.61258 25.7749 9.92671 25.5864 10.3037 25.5235C10.6806 25.4607 11.0576 25.5864 11.3718 25.7749C12.0001 26.2775 12.1257 27.1571 11.6859 27.7853L9.92673 30.1099C9.67542 30.4241 9.36128 30.6126 8.98432 30.6754C8.60736 30.7382 8.23042 30.6754 7.91629 30.4241ZM11.4346 34.2565C11.0576 34.3194 10.6806 34.1937 10.3665 34.0052C9.73822 33.5026 9.61256 32.623 10.0524 31.9948L13.5078 27.2199C13.7592 26.9058 14.0733 26.7173 14.4503 26.6544C14.8272 26.5916 15.2042 26.7173 15.5184 26.9058C16.1466 27.4084 16.2723 28.288 15.8325 28.9162L14.0733 31.3665L13.0053 32.8743C12.9425 32.9372 12.9424 33 12.8796 33.0628L12.4398 33.6911C12.1885 34.0052 11.8744 34.1937 11.4346 34.2565ZM15.267 35.8272C14.8901 35.8901 14.5131 35.7644 14.199 35.5759C13.6336 35.1361 13.445 34.3822 13.7592 33.7539L15.0157 32.0576L15.644 31.2408C15.8953 30.9267 16.2094 30.7382 16.5864 30.6754C16.6492 30.6754 16.7121 30.6754 16.8377 30.6754C17.1519 30.6754 17.466 30.801 17.7173 30.9267C18.3456 31.4293 18.4712 32.3089 18.0315 32.9372L17.466 33.6911C17.4032 33.7539 17.4032 33.8167 17.3404 33.8796L16.3351 35.2618C15.9581 35.5759 15.644 35.7644 15.267 35.8272ZM20.0419 36.8953C19.7906 37.2094 19.4764 37.3979 19.0995 37.4607C18.7225 37.5235 18.3456 37.3979 18.0315 37.2094C17.4032 36.7068 17.2775 35.8272 17.7173 35.199C17.7801 35.1361 17.8429 35.0105 17.9058 34.8848C17.9686 34.822 18.0942 34.6335 18.1571 34.5078C18.3456 34.2565 18.5969 34.0052 18.7225 33.9424C19.0995 33.8796 19.7906 34.0681 19.9791 34.2565C20.6702 35.0105 20.5445 36.2042 20.0419 36.8953Z"\n }\n) }), XF = () => /* @__PURE__ */ c("svg", { viewBox: "0 0 48 48", fill: "none", xmlns: "http://www.w3.org/2000/svg", children: /* @__PURE__ */ c(\n "path",\n {\n fill: "currentColor",\n d: "M24.1471 0.00168443C18.5821 -0.0678784 13.2257 2.01901 9.19108 5.91452C5.15644 9.8796 3 15.0968 3 20.7314V26.7138C3 28.9398 4.59994 30.6789 6.75639 31.0267C6.96507 32.4179 8.14765 33.5309 9.60846 33.5309H11.4171C12.1127 33.5309 12.7388 32.9049 12.7388 32.2092V21.2879C12.7388 20.5923 12.1127 19.9662 11.4171 19.9662H9.60846C9.05196 19.9662 8.49546 20.1053 8.07808 20.3836C8.28677 11.8969 15.2431 5.07976 23.7297 5.07976C32.2164 5.07976 39.1726 11.8969 39.3813 20.3836C38.964 20.1053 38.4074 19.9662 37.8509 19.9662H36.0423C35.3467 19.9662 34.7206 20.5923 34.7206 21.2879V32.2092C34.7206 32.9049 35.3467 33.5309 36.0423 33.5309H37.8509C38.1988 33.5309 38.477 33.4614 38.7553 33.3918C37.0858 39.0264 32.4251 43.3393 26.5122 44.3827H26.234C26.0253 43.4089 25.1905 42.7132 24.2166 42.7132H23.1036C21.9906 42.7132 21.0168 43.6175 21.0168 44.8001V45.9131C21.0168 47.0261 21.9211 48 23.1036 48H24.2166C25.3297 48 26.3035 47.0957 26.3035 45.9131V45.774H26.6513C33.8859 44.5219 39.3813 38.8177 40.5639 31.7223C40.6335 31.5136 40.703 31.3049 40.7726 31.0267C42.8595 30.7484 44.529 28.9398 44.529 26.7138V21.427C44.529 9.81003 35.4163 0.210373 24.1471 0.00168443ZM24.9818 45.774C24.9818 46.1218 24.7036 46.4696 24.2862 46.4696H23.1732C22.8254 46.4696 22.4776 46.1914 22.4776 45.774V44.661C22.4776 44.3132 22.7558 43.9654 23.1732 43.9654H24.2862C24.634 43.9654 24.9818 44.2436 24.9818 44.661V45.774ZM9.67802 21.2879L11.4171 21.2183L11.4867 32.0701H9.67802C8.84327 32.0701 8.14764 31.4441 8.14764 30.6093V22.8183C8.14764 21.9835 8.84327 21.2879 9.67802 21.2879ZM37.9205 32.0701L36.1814 32.1397L36.1119 21.2879H37.9205C38.7553 21.2879 39.4509 21.9835 39.4509 22.7487V28.9398C39.4509 29.705 39.3813 30.4702 39.2422 31.2354C39.0335 31.7223 38.477 32.0701 37.9205 32.0701ZM43.1377 26.7138C43.1377 28.105 42.1638 29.2876 40.8421 29.6354V28.9398V24.2791V20.8705C40.8421 11.4795 33.1902 3.82764 23.7993 3.82764C14.4083 3.82764 6.75639 11.4795 6.75639 20.8705V29.705C5.43469 29.4267 4.46081 28.1746 4.46081 26.7834V20.801C4.46081 15.5837 6.5477 10.6448 10.2345 6.95796C13.8518 3.3407 18.7212 1.39294 23.7993 1.39294C23.9384 1.39294 24.0775 1.39294 24.1471 1.39294C34.6511 1.60163 43.1377 10.5752 43.1377 21.427V26.7138Z"\n }\n) }), UF = () => /* @__PURE__ */ c("svg", { viewBox: "0 0 48 48", fill: "none", xmlns: "http://www.w3.org/2000/svg", children: /* @__PURE__ */ c(\n "path",\n {\n fill: "currentColor",\n fillRule: "evenodd",\n clipRule: "evenodd",\n d: "M42.3708 1.45897V5.68996H40.2553V21.3009C41.4954 21.5927 42.3708 22.6869 42.3708 24C42.3708 25.313 41.4954 26.4073 40.2553 26.699V42.31H42.3708V46.541H44.1945V48H42.3708H5.75073H4V46.541H5.75073V42.31H7.8662V26.699C6.62608 26.4073 5.75073 25.313 5.75073 24C5.75073 22.6869 6.62608 21.5927 7.8662 21.3009V5.68996H5.75073V1.45897H4V0H5.75073H42.3708H44.1945V1.45897H42.3708ZM40.9118 1.45897H7.20974V4.23099H12.0972H36.0243H40.9118V1.45897ZM27.0516 24.6565L26.614 24.5106L26.541 24V23.4894L27.0516 23.2705C30.699 21.8845 33.3982 18.6747 34.2006 14.8814C30.845 15.9027 27.4164 16.4134 23.9878 16.4134C20.4863 16.4134 17.0577 15.9027 13.7021 14.8814C14.5774 18.6747 17.2036 21.9574 20.924 23.3434L21.3616 23.4894L21.4347 24.5106L20.924 24.7294C16.4012 26.4072 13.4103 30.7842 13.4103 35.5258V36.1823L20.6322 33.4103C22.7477 32.6079 25.155 32.6079 27.2705 33.4103L34.4923 36.1094V35.4528C34.4923 30.7112 31.5015 26.3343 27.0516 24.6565ZM21.2158 34.8693L13.4833 37.7872V42.31H34.5653V37.7872L26.8328 34.8693C25.009 34.2127 23.0395 34.2127 21.2158 34.8693ZM34.5288 12.8389C34.5471 12.693 34.5653 12.5471 34.5653 12.4012V5.68996H13.4833V12.4741C13.4833 12.62 13.5015 12.7477 13.5197 12.8754C13.538 13.003 13.5562 13.1307 13.5562 13.2766C20.3404 15.465 27.7081 15.465 34.4923 13.2766C34.4923 13.1307 34.5106 12.9848 34.5288 12.8389ZM8.52276 22.614C7.79327 22.614 7.13672 23.1975 7.13672 24C7.13672 24.7294 7.79327 25.386 8.52276 25.386C9.25224 25.386 9.90879 24.8024 9.90879 24C9.90879 23.2705 9.32519 22.614 8.52276 22.614ZM11.3678 24C11.3678 25.313 10.4924 26.4073 9.25224 26.699V42.31H12.0243V35.5258C12.0243 30.7112 14.7963 26.1884 19.0273 24C14.7963 21.8115 12.0243 17.3617 12.0243 12.4741V5.68996H9.25224V21.3009C10.4924 21.5927 11.3678 22.6869 11.3678 24ZM7.13672 46.541H40.8389V43.769H35.9513H12.0243H7.13672V46.541ZM39.5258 25.386C40.2553 25.386 40.9118 24.8024 40.9118 24C40.9118 23.1975 40.2553 22.614 39.5258 22.614C38.7963 22.614 38.1397 23.1975 38.1397 24C38.1397 24.7294 38.7233 25.386 39.5258 25.386ZM36.6808 23.927C36.6808 22.614 37.5562 21.5197 38.7963 21.2279V5.617H36.0243V12.4012C36.0243 17.2158 33.2522 21.7386 29.0212 23.927C33.2522 26.1155 36.0243 30.5653 36.0243 35.4528V42.237H38.7963V26.6261C37.5562 26.3343 36.6808 25.2401 36.6808 23.927ZM24.7903 23.4165H23.3313V25.532H24.7903V23.4165ZM24.7903 27.6473H23.3313V29.7628H24.7903V27.6473Z"\n }\n) }), YF = () => /* @__PURE__ */ c("svg", { viewBox: "0 0 48 48", fill: "none", xmlns: "http://www.w3.org/2000/svg", children: /* @__PURE__ */ c(\n "path",\n {\n fill: "currentColor",\n fillRule: "evenodd",\n clipRule: "evenodd",\n d: "M0 24C0 10.7857 10.7857 0 24 0C37.2143 0 48 10.7143 48 23.9286C48 37.2143 37.2143 48 24 48C10.7857 48 0 37.2143 0 24ZM46.5715 23.9286C46.5715 11.5 36.4286 1.35714 24 1.35714C11.5715 1.35714 1.42858 11.5 1.57144 24C1.57144 29 3.28572 33.6429 6.07143 37.4286L11 30.0715H6.78572C5.14286 30.0715 3.85716 28.7857 3.85716 27.1429C3.85716 26.7143 3.99999 26.2857 4.14285 25.9286C4.57142 24.8572 5.64286 24.2143 6.78572 24.2143H6.85717C7.28575 22.1429 9.07144 20.6429 11.2143 20.6429C12.3572 20.6429 13.5 21.0714 14.3572 21.9286C14.7858 22.3572 15.1429 22.9286 15.3572 23.5L17 21.0714L20.4286 26.1429L28.0714 13.6429L29.8572 16.2143C30.4286 15.6429 31.1429 15.2857 32 15.2857H32.0714C32.5 13.2143 34.2858 11.7143 36.4286 11.7143C37.5715 11.7143 38.7143 12.1429 39.5714 13C40.3571 13.7857 40.7858 14.7857 40.8572 15.9286C41.4286 16 41.9286 16.2857 42.2858 16.6429C42.7858 17.1429 43.0714 17.7857 43.0714 18.5C43.0714 19.2143 42.7858 19.8572 42.2858 20.3572C41.7858 20.8572 41.1429 21.1429 40.4286 21.1429H33.0714L43.0714 35.9286C45.2857 32.5 46.5715 28.3572 46.5715 23.9286ZM41.2143 17.7857C41 17.5714 40.5714 17.4286 40.2143 17.5L39.2143 17.7143L39.3572 16.7857V16.3572C39.3572 15.5714 39 14.7857 38.4286 14.2143C37.8572 13.5714 37.0714 13.2857 36.2857 13.2857C34.5714 13.2857 33.2858 14.6429 33.2144 16.2857V17.2143L32.2857 16.9286C32.1429 16.8572 32 16.8572 31.8572 16.8572C31.3572 16.8572 30.8572 17.1429 30.5714 17.6429L32.0714 19.8572H40.3572C40.7144 19.8572 41 19.7143 41.2143 19.5C41.4286 19.2143 41.5715 18.9286 41.5715 18.6429C41.5715 18.2857 41.4286 18 41.2143 17.7857ZM29.8572 23.0714L31.5 21.4286L28 16.2857L24.7143 21.6429L26.1429 23.0714L28 20.7857L29.8572 23.0714ZM6.71431 28.6429H11.8572L14.2143 25.2143V25.1429C14.2143 24.3572 13.8572 23.5714 13.2857 23C12.7143 22.3572 11.9286 22.0714 11.1429 22.0714C9.4286 22.0714 8.14285 23.4286 8.07143 25.0714V26L7.14286 25.7143C7 25.6429 6.85716 25.6429 6.71431 25.6429C6.14288 25.6429 5.57143 25.9286 5.35715 26.5L5.35712 26.5001C5.2857 26.7144 5.21428 26.9286 5.21428 27.1429C5.21428 27.9286 5.85716 28.6429 6.71431 28.6429ZM16.9286 23.6429L15.5 25.7143L13.5 28.5L15.0001 30L16.8572 27.7143L18.7143 30L20.2143 28.5L16.9286 23.6429ZM12.8572 29.7143L6.85717 38.5715C11 43.4286 17.1429 46.5 24 46.5C26.6429 46.5 29.1429 46.0715 31.5 45.2143L21 29.7143L18.6429 32.0715L16.9286 29.9286L15.2143 32.0715L12.8572 29.7143ZM21.2143 27.5L32.8572 44.7143C36.6429 43.0715 39.8572 40.5 42.2143 37.2857L32.2857 22.6429L29.7143 25.2143L28 23.0714L26.2857 25.2143L24 22.9286L21.2143 27.5ZM22.5714 15C22.5714 16.6429 21.2143 17.9286 19.6429 17.9286C18.0714 17.9286 16.7142 16.6429 16.7142 15C16.7142 13.3572 18.0714 12.0715 19.6429 12.0715C21.2857 12.0715 22.5714 13.4286 22.5714 15ZM21.1429 15C21.1429 14.1429 20.5 13.5 19.6429 13.5C18.8572 13.5 18.1428 14.2143 18.1428 15C18.1428 15.8572 18.7857 16.5 19.6429 16.5C20.5 16.5 21.1429 15.8572 21.1429 15Z"\n }\n) }), GF = () => /* @__PURE__ */ c("svg", { viewBox: "0 0 48 48", fill: "none", xmlns: "http://www.w3.org/2000/svg", children: /* @__PURE__ */ c(\n "path",\n {\n fill: "currentColor",\n d: "M45.3945 18.275C44.1785 18.275 43.1942 19.1435 42.9626 20.3016H42.731C42.0362 20.3016 41.4572 19.8384 41.2835 19.2593C39.0832 11.4427 31.9035 6 23.7974 6C13.7805 6 5.6743 14.1061 5.6743 24.123V24.702H12.4487C12.6803 25.6285 13.433 26.3812 14.3595 26.5549C14.5332 28.9867 14.9385 31.2449 15.5754 33.2135C14.1279 34.0241 12.854 35.0084 11.8697 36.2244C9.72738 34.082 8.10616 31.3607 7.29554 28.2919C7.06394 27.3076 6.13752 26.6128 5.0374 26.6128H4.92159C4.68999 25.5127 3.70566 24.702 2.48974 24.702C1.10011 24.702 0 25.8022 0 27.1918C0 28.5814 1.10011 29.6815 2.48974 29.6815C3.64776 29.6815 4.63209 28.8709 4.92159 27.7708H5.15319C5.6743 27.7708 6.13751 28.1182 6.31122 28.5814C8.33775 36.6297 15.5754 42.304 23.9131 42.304C33.93 42.304 42.0362 34.1978 42.0362 24.1809V23.6019H33.4089C33.351 21.2859 33.1194 19.0277 32.6562 16.9433C33.4668 16.538 33.9879 15.7274 33.9879 14.7431C33.9879 14.4535 33.93 14.2219 33.8721 13.9903C34.6249 13.4113 35.3197 12.7744 35.8408 12.0796C37.9252 14.1062 39.4885 16.6538 40.2992 19.5489C40.5887 20.649 41.6309 21.4596 42.8468 21.4596H43.1363C43.4258 22.5018 44.3522 23.2545 45.5103 23.2545C46.8999 23.2545 48 22.1544 48 20.7648C47.8842 19.3752 46.7841 18.275 45.3945 18.275ZM2.48974 28.4656C1.73703 28.4656 1.15802 27.8866 1.15802 27.1339C1.15802 26.3812 1.73703 25.8022 2.48974 25.8022C3.24245 25.8022 3.82148 26.3812 3.82148 27.1339C3.82148 27.8866 3.24245 28.4656 2.48974 28.4656ZM28.9505 14.7431C28.9505 14.8589 28.9505 14.9747 29.0084 15.0905C27.5609 15.5537 26.0555 15.7853 24.4343 15.8432V7.21591C26.5766 7.50541 28.5452 9.47405 29.9928 12.7165C29.3558 13.1797 28.9505 13.8745 28.9505 14.7431ZM23.2762 7.21591V15.8432C21.0181 15.7853 18.8178 15.2642 16.965 14.4535C18.4125 10.3426 20.6707 7.56332 23.2762 7.21591ZM15.9807 13.9324C14.7069 13.2376 13.6068 12.3112 12.7961 11.269C14.8227 9.53195 17.2545 8.25814 19.918 7.62122C18.3546 9.01085 16.965 11.2111 15.9807 13.9324ZM12.5066 23.544H6.89023C7.06393 19.0277 8.97468 14.9747 11.9855 12.0217C12.9699 13.1797 14.1858 14.222 15.6912 14.9747C15.0543 17.0012 14.649 19.2593 14.4753 21.6912C13.491 21.9228 12.7382 22.6176 12.5066 23.544ZM13.5489 24.123C13.5489 23.3703 14.1279 22.7913 14.8806 22.7913C15.6333 22.7913 16.2123 23.3703 16.2123 24.123C16.2123 24.8757 15.6333 25.4548 14.8806 25.4548C14.1858 25.4548 13.5489 24.8757 13.5489 24.123ZM15.5754 26.497C16.6176 26.2075 17.3703 25.2811 17.3703 24.123C17.3703 22.965 16.6176 22.0386 15.5754 21.7491C15.7491 19.4909 16.0965 17.4065 16.6755 15.4958C18.6441 16.3643 20.9023 16.8854 23.3341 16.9433V23.544H17.544V24.702H23.3341V31.3028C20.9602 31.3607 18.702 31.8818 16.7334 32.7503C16.0965 30.8396 15.6912 28.7551 15.5754 26.497ZM23.2762 41.088C20.7286 40.7406 18.4704 37.9614 17.0229 33.8504C18.8758 33.0398 21.0181 32.5187 23.2762 32.4608V41.088ZM24.4343 41.088V32.4608C25.9976 32.5187 27.5609 32.7503 28.9505 33.2135C28.9505 33.3293 28.8926 33.4451 28.8926 33.5609C28.8926 34.4294 29.2979 35.1242 29.9928 35.5874C28.5452 38.8299 26.5187 40.7406 24.4343 41.088ZM30.0507 33.503C30.0507 32.7503 30.6297 32.1713 31.3824 32.1713C32.1351 32.1713 32.7141 32.7503 32.7141 33.503C32.7141 34.2557 32.1351 34.8347 31.3824 34.8347C30.6876 34.8926 30.0507 34.2557 30.0507 33.503ZM31.3824 31.0712C30.5139 31.0712 29.8191 31.4765 29.3559 32.1134C27.7925 31.5923 26.1134 31.3607 24.3764 31.3028V24.702H32.1351C32.0772 26.9023 31.8456 29.0446 31.3824 31.0712C31.4403 31.0712 31.4403 31.0712 31.3824 31.0712ZM12.7961 37.035C13.6068 35.9928 14.7069 35.0663 15.9807 34.3715C16.965 37.1508 18.3546 39.2931 19.918 40.6828C17.2545 40.0458 14.8227 38.772 12.7961 37.035ZM31.0929 35.9928C31.2087 35.9928 31.3245 36.0507 31.4403 36.0507C32.1351 36.0507 32.7141 35.7611 33.1773 35.2979C33.8721 35.819 34.4511 36.3981 34.9143 36.9771C32.8878 38.7141 30.456 39.9879 27.7925 40.6248C29.0663 39.5826 30.1665 37.9614 31.0929 35.9928ZM35.7829 36.2244C35.2039 35.5295 34.5669 34.8926 33.7563 34.3136C33.8142 34.082 33.8721 33.7925 33.8721 33.5609C33.8721 32.6345 33.351 31.8239 32.5404 31.4186C33.0036 29.3341 33.2931 27.076 33.2931 24.76H40.8203C40.7045 29.2183 38.7937 33.2714 35.7829 36.2244ZM32.193 23.544H24.4343V16.9433C26.1713 16.8854 27.8504 16.5959 29.4137 16.1327C29.877 16.7696 30.6297 17.1749 31.4403 17.1749C31.4403 17.1749 31.4403 17.1749 31.4982 17.1749C31.9035 19.2014 32.193 21.3438 32.193 23.544ZM31.4403 16.0748C30.6876 16.0748 30.1086 15.4958 30.1086 14.7431C30.1086 13.9903 30.6876 13.4113 31.4403 13.4113C32.193 13.4113 32.772 13.9903 32.772 14.7431C32.772 15.4379 32.193 16.0748 31.4403 16.0748ZM33.1773 12.9481C32.7141 12.4849 32.1351 12.2533 31.4403 12.2533C31.3245 12.2533 31.2087 12.2533 31.0929 12.3112C30.1665 10.2847 29.0664 8.72135 27.8504 7.67913C30.5139 8.31604 32.9457 9.58986 34.9723 11.3269C34.4511 11.9059 33.8721 12.427 33.1773 12.9481ZM45.3945 22.0965C44.6417 22.0965 44.0627 21.5175 44.0627 20.7648C44.0627 20.0121 44.6417 19.433 45.3945 19.433C46.1472 19.433 46.7262 20.0121 46.7262 20.7648C46.7262 21.5175 46.1472 22.0965 45.3945 22.0965Z"\n }\n) }), QF = () => /* @__PURE__ */ c("svg", { viewBox: "0 0 48 48", fill: "none", xmlns: "http://www.w3.org/2000/svg", children: /* @__PURE__ */ c(\n "path",\n {\n fill: "currentColor",\n fillRule: "evenodd",\n clipRule: "evenodd",\n d: "M21.6207 13.7241H16.1035C15 13.7241 14.1035 12.8276 14.0345 11.7241V2C14.0345 0.896552 14.931 0 16.0345 0H32.2414C33.3448 0 34.2414 0.896552 34.2414 2V11.6552C34.2414 12.7586 33.3448 13.6552 32.2414 13.6552H26.7241V16.069H28.931V17.4483H26.7241H21.6207H19.4138V16.069H21.6207V13.7241ZM22.931 16.069H25.3448V13.6552H22.931V16.069ZM16.0345 1.37931C15.6897 1.37931 15.4138 1.65517 15.4138 2H15.4828V11.7241C15.4828 12.069 15.7586 12.3448 16.1035 12.3448H21.6207H26.7241H32.2414C32.5862 12.3448 32.8621 12.069 32.8621 11.7241V2C32.8621 1.65517 32.5862 1.37931 32.2414 1.37931H16.0345ZM21.1379 25.6552H11.8276V28.2759H10.4483V24.2759H21.1379V21.8621H23.4827V19.2414H24.8621V21.8621H27.2759V24.2759H37.9655V28.2759H36.5862V25.6552H27.2759V28.069H21.1379V25.6552ZM25.8276 23.3104H22.4483V26.6897H25.8276V23.3104ZM19.2069 30.4827H3.00002C1.89657 30.4827 1 31.3793 1 32.4827V42.2069C1 43.3103 1.89657 44.2069 3.00002 44.2069H8.51726V46.6207H6.31036V48H8.51726H13.6207H15.8276V46.6207H13.6207V44.2069H19.1379C20.2414 44.2069 21.1379 43.3103 21.1379 42.2069V32.4827C21.2069 31.3793 20.3104 30.4827 19.2069 30.4827ZM12.2414 46.5517H9.82758V44.1379H12.2414V46.5517ZM19.8276 42.2069C19.8276 42.5517 19.5517 42.8276 19.2069 42.8276H13.6897H8.58621H3.06897C2.72414 42.8276 2.44826 42.5517 2.44826 42.2069V32.4827C2.44826 32.1379 2.72414 31.862 3.06897 31.862H19.2759C19.6207 31.862 19.8966 32.1379 19.8966 32.4827V42.2069H19.8276ZM29.1379 30.4827H45.3448C46.4483 30.4827 47.3448 31.3793 47.2759 32.4827V42.2069C47.2759 43.3103 46.3793 44.2069 45.2759 44.2069H39.7586V46.6207H41.9655V48H39.7586H34.6552H32.4483V46.6207H34.6552V44.2069H29.1379C28.0345 44.2069 27.138 43.3103 27.138 42.2069V32.4827C27.138 31.3793 28.0345 30.4827 29.1379 30.4827ZM36.0345 46.5517H38.4483V44.1379H36.0345V46.5517ZM45.3448 42.8276C45.6897 42.8276 45.9655 42.5517 45.9655 42.2069H46.0345V32.4827C46.0345 32.1379 45.7587 31.862 45.4138 31.862H29.2069C28.8621 31.862 28.5862 32.1379 28.5862 32.4827V42.2069C28.5862 42.5517 28.8621 42.8276 29.2069 42.8276H34.7242H39.8276H45.3448Z"\n }\n) }), ZF = () => /* @__PURE__ */ c("svg", { viewBox: "0 0 48 48", fill: "none", xmlns: "http://www.w3.org/2000/svg", children: /* @__PURE__ */ c(\n "path",\n {\n fill: "currentColor",\n fillRule: "evenodd",\n clipRule: "evenodd",\n d: "M24.6005 0H23.2408V1.8357H24.6005V0ZM22.7648 4.82723C15.5581 5.37114 9.64306 11.1501 8.89518 18.3569C8.41926 22.8442 9.98299 27.2634 13.1785 30.4589C15.898 33.1784 17.3938 36.7139 17.3938 40.3852V41.473V44.9405C17.3938 46.6402 18.7535 48 20.4532 48H27.3201C29.0198 48 30.3796 46.6402 30.3796 44.9405V41.473V40.4532C30.3796 36.7138 31.8753 33.1785 34.3909 30.6629C37.3144 27.8074 38.9461 24 38.9461 19.8527C38.9461 15.7054 37.1784 11.6261 34.1189 8.83853C31.0595 5.91502 26.9801 4.48729 22.7648 4.82723ZM22.4249 18.2209C22.9688 17.881 23.3767 17.2691 23.3767 16.5892C23.3767 16.3173 23.6487 16.0453 23.9207 16.0453C24.1926 16.0453 24.4646 16.3173 24.4646 16.5892C24.4646 17.2691 24.8725 17.881 25.4164 18.2209L25.0085 29.4391H22.8328L22.4249 18.2209ZM21.745 30.7988H26.0283C26.4362 30.7988 26.7762 31.1388 26.7762 31.5467V36.5779H20.9971V31.5467C20.9971 31.1388 21.3371 30.7988 21.745 30.7988ZM28.1359 37.9376H29.0198V40.1133H18.7535V37.9376H19.6374H28.1359ZM29.0198 44.9405C29.0198 45.8923 28.2719 46.6402 27.3201 46.6402H20.4532C19.5014 46.6402 18.7535 45.8923 18.7535 44.9405V41.473H29.0198V44.9405ZM33.4391 29.6431C31.5354 31.4788 30.1756 33.9263 29.4957 36.5779H28.068V31.5467C28.068 30.4589 27.2521 29.643 26.3003 29.4391L26.7762 17.2011L26.2323 17.0652C25.9603 16.9972 25.8243 16.7932 25.8243 16.5212C25.8243 15.5014 25.0085 14.6176 23.9207 14.6176C22.9008 14.6176 22.017 15.4334 22.017 16.5212C22.017 16.7932 21.813 16.9972 21.609 17.0652L21.0651 17.2011L21.4731 29.4391C20.4532 29.575 19.7054 30.4589 19.7054 31.5467V36.5779H18.2776C17.5977 33.9943 16.2379 31.5467 14.1983 29.5071C11.3428 26.5836 9.91501 22.5723 10.3229 18.4249C10.9348 11.898 16.3739 6.59491 22.9008 6.11899C26.7762 5.84704 30.4476 7.13881 33.3031 9.72238C36.0906 12.3059 37.7223 15.9774 37.7223 19.7847C37.5864 23.5921 36.1586 27.0595 33.4391 29.6431ZM43.8413 19.3087H42.0056V20.6685H43.8413V19.3087ZM4 19.3087H5.8357V20.6685H4V19.3087ZM23.2408 38.0736H24.6005V39.9093H23.2408V38.0736ZM37.1622 32.2941L36.2007 33.2556L37.4988 34.5537L38.4603 33.5922L37.1622 32.2941ZM9.30725 6.32944L10.2687 5.36795L11.5668 6.66597L10.6053 7.62747L9.30725 6.32944ZM37.524 5.36672L36.2259 6.66474L37.1874 7.62623L38.4854 6.32822L37.524 5.36672ZM9.29078 33.5762L10.5888 32.2781L11.5503 33.2396L10.2523 34.5377L9.29078 33.5762Z"\n }\n) }), jF = () => /* @__PURE__ */ c("svg", { viewBox: "0 0 48 48", fill: "none", xmlns: "http://www.w3.org/2000/svg", children: /* @__PURE__ */ c(\n "path",\n {\n fill: "currentColor",\n fillRule: "evenodd",\n clipRule: "evenodd",\n d: "M36.9469 13.5894C36.3153 13.5894 35.6837 13.6525 34.989 13.7788C33.9153 8.66312 29.4944 5 24.1892 5C18.9471 5 14.3998 8.78942 13.3893 13.9051C12.5683 13.7157 11.8104 13.5894 11.0525 13.5894C4.92626 13.5894 0 18.5788 0 24.6419C0 30.0734 3.66311 34.747 8.39989 35.3786H13.8946V34.1154H8.46303C4.42098 33.6102 1.26314 29.4418 1.26314 24.6419C1.26314 19.2103 5.68412 14.7893 11.1156 14.7893C11.9367 14.7893 12.8209 14.9157 13.7682 15.2315L14.463 15.4209L14.5893 14.7262C15.284 9.8631 19.4524 6.26313 24.2523 6.26313C29.1154 6.26313 33.2206 9.79994 33.9154 14.663L34.0417 15.3578L34.7364 15.1683C35.6206 14.9788 36.3153 14.8525 37.0732 14.8525C42.5047 14.8525 46.9257 19.2735 46.9257 24.705C46.9257 29.505 43.7679 33.6102 39.6627 34.1786H34.2943V35.4417H39.5995C44.3995 34.747 47.9994 30.1365 47.9994 24.705C48.0626 18.5788 43.0732 13.5894 36.9469 13.5894ZM30.947 29.1259H30.126V25.8418C30.126 22.4944 27.4102 19.7787 24.0628 19.7787C20.7155 19.7787 17.9998 22.4944 17.9998 25.8418V29.1259H17.1787C16.484 29.1259 15.9156 29.6944 15.9156 30.3891V41.9468C15.9156 42.6416 16.484 43.21 17.1787 43.21H31.0101C31.7049 43.21 32.2733 42.6416 32.2733 41.9468V30.3891C32.147 29.6944 31.6417 29.1259 30.947 29.1259ZM19.1997 25.8418C19.1997 23.1892 21.3471 20.9787 24.0628 20.9787C26.7154 20.9787 28.926 23.126 28.926 25.8418V29.1259H19.2629V25.8418H19.1997ZM30.947 41.8837H17.1156V30.3259H30.947V41.8837ZM23.3681 39.8627V37.3364C22.3576 37.0838 21.5997 36.1364 21.5997 34.9996C21.5997 33.6733 22.6734 32.5996 23.9997 32.5996C25.326 32.5996 26.3997 33.6733 26.3997 34.9996C26.3997 36.1364 25.6418 37.0838 24.6313 37.3364V39.8627H23.3681ZM25.1997 35.0628C25.1997 34.368 24.6313 33.8628 23.9997 33.8628C23.3681 33.8628 22.7997 34.368 22.7997 35.0628C22.7997 35.7575 23.3681 36.2627 23.9997 36.2627C24.6944 36.2627 25.1997 35.6943 25.1997 35.0628Z"\n }\n) }), KF = () => /* @__PURE__ */ c("svg", { viewBox: "0 0 48 49", fill: "none", xmlns: "http://www.w3.org/2000/svg", children: /* @__PURE__ */ c(\n "path",\n {\n fill: "currentColor",\n fillRule: "evenodd",\n clipRule: "evenodd",\n d: "M39.2622 4.8637V15.6074L45.3778 21.7052V49H2V21.7052L8.11556 15.6074V4.8637H18.8533L23.6889 0L28.5245 4.8637H39.2622ZM3.35111 46.677L18.2844 32.6667L3.35111 23.3022V46.677ZM23.6889 36.0059L19.5645 33.4652L4.48889 47.5482H42.8889L27.9556 33.32L23.6889 36.0059ZM43.9556 23.3748L29.1645 32.5941L43.9556 46.677V23.3748ZM39.2622 24.6089L43.5289 21.923L39.2622 17.64V24.6089ZM26.5333 4.8637L23.6889 2.03259L20.8444 4.8637H26.5333ZM37.84 25.4074V6.31555H9.39555V25.4074L23.6178 34.2637L37.84 25.4074ZM3.77778 21.8504L8.04444 24.5363V17.5674L3.77778 21.8504ZM12.7378 10.889H23.6889V12.3408H12.7378V10.889ZM34.64 14.9541H12.7378V16.406H34.64V14.9541ZM12.7378 18.9467H34.64V20.3986H12.7378V18.9467ZM34.64 23.0119H12.7378V24.4637H34.64V23.0119ZM19.28 27.0045H28.0978V28.4563H19.28V27.0045Z"\n }\n) }), JF = () => /* @__PURE__ */ c("svg", { viewBox: "0 0 48 48", fill: "none", xmlns: "http://www.w3.org/2000/svg", children: /* @__PURE__ */ c(\n "path",\n {\n fill: "currentColor",\n fillRule: "evenodd",\n clipRule: "evenodd",\n d: "M31.3964 38.4148H6.32718V9.65901H31.3964V12.9033H32.871V3.02305C32.871 1.3272 31.4701 0 29.848 0H8.02303C6.32717 0 5 1.40093 5 3.02305V44.9771C5 46.6729 6.40091 48.0001 8.02303 48.0001H29.848C31.5438 48.0001 32.871 46.5992 32.871 44.9771V33.4748H31.3964V38.4148ZM7.94932 1.47466H29.7742C30.659 1.47466 31.3964 2.212 31.3964 3.09679V8.25809H6.32718V3.09679C6.40092 2.13826 7.13825 1.47466 7.94932 1.47466ZM29.848 46.5992H8.02303C7.13824 46.5992 6.40092 45.8619 6.40092 44.9771V39.8158H31.4701V44.9771C31.3964 45.8619 30.7328 46.5992 29.848 46.5992ZM21 42.47H16.871V43.9447H21V42.47ZM16.871 4.05531H21V5.52997H16.871V4.05531ZM22.7696 15.6313V18.0645H17.3134V19.5392H22.7696V20.7189H24.2443V19.5392V18.8018V17.7696L33.0185 23.8894L41.7927 17.7696V29.2719H24.2443V26.9125H15.2489V28.3871H22.7696V30.7466H43.2674V15.6313H22.7696ZM25.7927 17.106H40.1706L33.0185 22.1198L25.7927 17.106ZM11.4147 26.9125H13.3318V28.3872H11.4147V26.9125ZM15.3963 17.9909H13.4793V19.4656H15.3963V17.9909ZM24.2443 23.8896V25.143H22.7696V23.8896H9.12902V22.4149H24.2443V23.1522V23.8896Z"\n }\n) }), _F = () => /* @__PURE__ */ c("svg", { viewBox: "0 0 48 48", fill: "none", xmlns: "http://www.w3.org/2000/svg", children: /* @__PURE__ */ c(\n "path",\n {\n fill: "currentColor",\n fillRule: "evenodd",\n clipRule: "evenodd",\n d: "M21.3943 17.4171H15.2914C12.48 17.0057 10.3543 14.2629 10.2857 11.2457C10.2857 7.68 13.1657 4.8 16.7314 4.8H16.7317C17.0744 4.8 17.4172 4.8 17.76 4.86855C18.5143 2.05713 21.0514 0 24 0C27.0171 0 29.4857 1.98857 30.24 4.8C30.5143 4.73143 30.7886 4.73142 31.0628 4.73142C34.6286 4.73142 37.5086 7.61142 37.5086 11.1771C37.5086 14.3314 35.3829 17.0057 32.5714 17.4171H21.3943ZM18.1714 6.23998C17.6914 6.10284 17.2114 6.03428 16.8 6.03428C13.9886 6.03428 11.6571 8.29713 11.6571 11.04C11.6571 13.5771 13.3028 15.7028 15.36 15.9771H32.5028C34.56 15.7028 36.2057 13.5771 36.2057 11.1086C36.2057 8.29713 33.9428 6.03428 31.1314 6.03428C30.7885 6.03428 30.4457 6.03429 29.9657 6.17143L29.2114 6.37713L29.0743 5.62284C28.7314 3.15427 26.6057 1.30285 24.0686 1.30285C21.6 1.30285 19.4057 3.15428 19.0628 5.69142L18.9257 6.44571L18.1714 6.23998ZM9.6 26.6058L10.56 27.5658L7.47426 30.7887L4.25144 27.5658L5.21141 26.6058L6.78855 28.1829V24.2744C6.78855 22.9029 7.88571 21.8058 9.25714 21.8058H23.3143V19.2686H24.6857V21.8058H38.7429C40.1143 21.8058 41.2114 22.9029 41.2114 24.2744V28.1829L42.7885 26.6058L43.7486 27.5658L40.5257 30.7887L37.3028 27.5658L38.2628 26.6058L39.84 28.1829V24.2744C39.84 23.5887 39.2914 23.1086 38.6743 23.1086H9.18855C8.50283 23.1086 8.02287 23.6572 8.02287 24.2744V28.1829L9.6 26.6058ZM15.0171 34.9028H7.61141L7.06285 33.1885H0V45.2571C0 46.6971 1.16572 47.7942 2.53715 47.7942H14.1943C15.4286 47.7942 16.3885 46.8342 16.3885 45.5999V38.2628H15.0857V34.9028H15.0171ZM3.70283 45.2571C3.70283 45.9428 3.15427 46.4914 2.46855 46.4914C1.78284 46.4914 1.23428 45.9428 1.23428 45.2571V34.4914H5.96572L6.51429 36.2056H13.5771V38.2628H3.63428V45.2571H3.70283ZM14.9486 45.5999C14.9486 46.0799 14.6057 46.4228 14.1257 46.4228H4.7314C4.93712 46.0799 5.00571 45.6685 5.00571 45.1885V39.6342H14.9486V45.5999ZM46.6286 34.9028V38.2628H48V45.5999C48 46.8342 47.04 47.7942 45.8057 47.7942H34.1486C32.7771 47.7942 31.6114 46.6971 31.6114 45.2571V33.1885H38.6743L39.2229 34.9028H46.6286ZM34.08 46.4914C34.7657 46.4914 35.3143 45.9428 35.3143 45.2571H35.2457V38.2628H45.1885V36.2056H38.1257L37.5771 34.4914H32.8457V45.2571C32.8457 45.9428 33.3943 46.4914 34.08 46.4914ZM45.7372 46.4228C46.2172 46.4228 46.56 46.0799 46.56 45.5999V39.6342H36.6171V45.1885C36.6171 45.6685 36.5486 46.0799 36.3429 46.4228H45.7372Z"\n }\n) }), $F = () => /* @__PURE__ */ c("svg", { viewBox: "0 0 48 48", fill: "none", xmlns: "http://www.w3.org/2000/svg", children: /* @__PURE__ */ c(\n "path",\n {\n fill: "currentColor",\n fillRule: "evenodd",\n clipRule: "evenodd",\n d: "M44.5151 24.8065V16.127C44.5151 14.4832 43.463 13.0366 42.0164 12.3791C43.2657 11.064 43.8575 8.82837 43.7918 7.77632C43.726 6.65851 43.1343 5.67221 42.2795 4.94892C41.4247 4.22564 40.3726 3.96262 39.3206 4.02837C35.2438 4.48865 35.5069 7.51331 35.6384 8.49961C35.7699 10.0119 36.8877 11.9845 38.3343 12.9051C37.5452 13.6284 37.0192 14.6804 36.5589 15.6667L36.4931 15.7982C36.3616 15.9955 35.7041 16.5873 34.9808 17.0476C34.389 17.2448 33.7315 17.3763 33.074 17.3763L29.326 17.5736C28.7342 17.5736 28.2082 17.9023 27.8137 18.2969C27.4192 18.7571 27.2877 19.3489 27.3534 19.8749C27.3534 20.0722 27.4192 20.2695 27.4849 20.401H20.3836C20.3973 20.3599 20.411 20.3216 20.4241 20.285L20.4241 20.2848C20.4739 20.1459 20.5151 20.031 20.5151 19.8749C20.5808 19.2832 20.3836 18.6914 20.0548 18.2969C19.6603 17.8366 19.1343 17.5736 18.5425 17.5736L14.7945 17.3763H14.7945C14.137 17.3106 13.4794 17.2448 12.8877 17.0476C12.1644 16.5873 11.4411 15.9955 11.3753 15.7982L11.3096 15.6667C10.8493 14.6804 10.3233 13.6284 9.53424 12.9051C11.0466 11.9845 12.0986 10.0119 12.2301 8.49961C12.3616 7.51331 12.6247 4.48865 8.54794 4.02837C7.49589 3.89687 6.37808 4.22564 5.58904 4.94892C4.73424 5.67221 4.20822 6.65851 4.07672 7.77632C4.01096 8.82837 4.60273 11.1297 5.85205 12.3791C4.40547 12.9708 3.35342 14.4174 3.35342 16.127V24.8722C3.41918 26.6476 4.66849 28.1599 6.31233 28.6859L13.611 30.79V42.0339C13.611 43.0202 14.4 43.8092 15.3863 43.8092H17.4247C17.8849 43.8092 18.3452 43.6119 18.674 43.2832C19.0027 42.9544 19.2 42.4941 19.2 42.0339L19.2658 28.6859C19.2658 26.9763 18.2137 25.464 16.5699 24.938L11.7041 23.3599C11.5069 23.2941 11.4411 23.1626 11.3753 23.0311V21.19C12.8219 21.5845 14.3342 21.7818 15.9123 21.8476L17.9507 21.9133C17.8192 22.1763 17.7534 22.5051 17.7534 22.8339C17.7534 24.0832 18.7397 25.0695 19.989 25.0695H23.2767V43.875H24.5918V24.938H27.8794C29.1288 24.938 30.1151 23.9517 30.1151 22.7023C30.1151 22.3736 30.0493 22.0448 29.9178 21.7818L31.9562 21.716C33.4685 21.716 34.9808 21.453 36.4931 21.0585V22.8339C36.4931 23.0311 36.3616 23.1626 36.1644 23.2284L31.2986 24.938C29.6548 25.464 28.6027 26.9763 28.6027 28.6859L28.6685 42.0339C28.6685 43.0202 29.4575 43.8092 30.4438 43.8092H32.4822C33.4685 43.8092 34.2575 43.0202 34.2575 42.0339V30.7243L41.5562 28.6202C43.2658 28.0941 44.4493 26.5818 44.5151 24.8065ZM36.9534 8.3681C36.8219 6.98728 36.8877 5.60646 39.5178 5.34344H39.8466C40.4384 5.34344 41.0959 5.5407 41.5562 5.93522C42.1479 6.3955 42.4767 7.11879 42.5425 7.84207C42.674 9.02564 41.4904 11.9188 40.1096 12.0503C38.7288 12.2476 37.1507 10.0777 36.9534 8.3681ZM6.44384 5.93522C6.96987 5.5407 7.56164 5.34344 8.15342 5.34344H8.48218C11.1123 5.60646 11.1781 6.98728 11.0466 8.3681C10.8493 10.0777 9.27123 12.1818 7.89041 12.0503C6.57534 11.9188 5.39179 9.02564 5.45754 7.84207C5.52329 7.11879 5.85206 6.3955 6.44384 5.93522ZM11.5068 19.8092V19.6777H11.0466L8.48218 18.8886L8.08768 20.138L10.1918 20.7955V23.0311V23.0969C9.7315 23.2284 9.20548 23.2941 8.94246 23.2941L8.87671 24.6092H8.94246C9.53422 24.6092 10.3232 24.412 10.8492 24.2804L10.8493 24.2804L10.8493 24.2804C10.9808 24.4119 11.1781 24.5434 11.3753 24.6092L16.2411 26.1873C17.3589 26.516 18.0822 27.5681 18.0822 28.6859L18.0164 42.0339C18.0164 42.1654 17.9507 42.2969 17.8849 42.3626C17.8192 42.4284 17.6877 42.4941 17.5562 42.4941H15.5178C15.2548 42.4941 15.0575 42.2969 15.0575 42.0339V30.5928C15.0575 30.1325 14.7288 29.738 14.2685 29.6065L6.77261 27.4366C5.58905 27.1078 4.8 26.0558 4.73425 24.8722V16.127C4.73425 14.6147 5.98357 13.4311 7.43014 13.4311C8.74521 13.4311 9.33698 14.4832 10.126 16.2585L10.2575 16.39C10.5863 17.0476 11.8356 17.9023 12.3617 18.2311L12.4931 18.2969C13.2164 18.5599 14.0055 18.6914 14.7945 18.7571L18.5425 18.9544C18.7397 18.9544 19.0027 19.0859 19.1342 19.2174C19.2658 19.4147 19.3315 19.6119 19.3315 19.8092C19.2657 20.2037 19.0027 20.5325 18.5425 20.5325L16.0438 20.4667C14.4657 20.4667 12.9534 20.2695 11.5068 19.8092ZM27.9452 23.6886H20.0548C19.5288 23.6886 19.1342 23.2941 19.1342 22.7681C19.1342 22.2421 19.5288 21.8476 20.0548 21.8476H27.9452C28.4712 21.8476 28.8657 22.2421 28.8657 22.7681C28.8657 23.2284 28.4055 23.6886 27.9452 23.6886ZM33.7315 29.5407C33.2712 29.6722 32.9425 30.0667 32.9425 30.527V41.9681C32.9425 42.2311 32.7452 42.4284 32.4822 42.4284H30.4438C30.1808 42.4284 29.9836 42.2311 29.9836 41.9681L29.9178 28.6202C29.9178 27.5023 30.6411 26.4503 31.7589 26.1215L36.6247 24.5434C36.8219 24.4777 37.0192 24.3462 37.1507 24.2147C37.611 24.3462 38.4657 24.5434 39.0575 24.5434H39.1233L39.0575 23.2284C38.7288 23.2284 38.2685 23.1626 37.7425 23.0311V22.8996V20.664L39.8466 20.0065L39.452 18.7571L36.8877 19.5462H36.4274V19.6777C34.9808 20.138 33.4027 20.3352 31.8904 20.401L29.3918 20.4667C28.9973 20.4667 28.6685 20.138 28.6027 19.7434C28.6027 19.5462 28.6685 19.2832 28.8 19.1517C28.9315 18.9544 29.1288 18.8886 29.3918 18.8886L33.1397 18.6914C33.9288 18.6256 34.7178 18.4941 35.4411 18.2311L35.5726 18.1654C36.0986 17.8366 37.348 16.9818 37.6767 16.3243L37.7425 16.1928C38.5315 14.4174 39.1233 13.3654 40.4384 13.3654C41.9507 13.3654 43.1342 14.6147 43.1342 16.0613V24.7407C43.0685 25.9243 42.2794 26.9763 41.0959 27.3051L33.7315 29.5407ZM1.31507 24.5435V15.5353H0V24.5435C0 27.4366 1.64385 29.8695 4.14248 31.2503V43.8092H5.45755V31.8421C5.65481 31.9079 5.85207 31.9736 6.11508 32.0394L12.0329 33.6832L12.3617 32.4339L6.37809 30.7901C3.28768 30.001 1.31507 27.5682 1.31507 24.5435ZM46.6849 24.5435V15.5353H48V24.5435C48 27.3709 46.3562 29.8695 43.8575 31.2503V43.8092H42.5425V31.8421C42.4438 31.875 42.3288 31.9079 42.2137 31.9408C42.0986 31.9736 41.9836 32.0065 41.8849 32.0394L35.9671 33.6832L35.6384 32.4339L41.5562 30.7901C44.7123 30.001 46.6849 27.5024 46.6849 24.5435Z"\n }\n) }), eX = () => /* @__PURE__ */ c("svg", { viewBox: "0 0 48 48", fill: "none", xmlns: "http://www.w3.org/2000/svg", children: /* @__PURE__ */ c(\n "path",\n {\n fill: "currentColor",\n fillRule: "evenodd",\n clipRule: "evenodd",\n d: "M45.4769 3H2.58749C1.17614 3 0 4.17613 0 5.58748V32.952C0 34.3634 1.17614 35.5395 2.58749 35.5395H5.95904V45.811H7.4488L17.3283 35.5395H45.3985C46.8098 35.5395 47.9859 34.3634 47.9859 32.952V5.58748C48.1428 4.17613 46.9666 3 45.4769 3ZM46.5746 32.952C46.5746 33.5009 46.1041 33.9713 45.5553 33.9713H16.7794L7.60562 43.5371V34.0497H2.66588C2.11702 34.0497 1.64658 33.5793 1.64658 33.0304V5.58748C1.64658 5.03862 2.11702 4.56817 2.66588 4.56817H45.5553C46.1041 4.56817 46.5746 5.03862 46.5746 5.58748V32.952ZM24.0714 11.7034H9.17377V13.2715H24.0714V11.7034ZM9.17377 16.0157H38.8905V17.5839H9.17377V16.0157ZM38.8905 20.3282H9.17377V21.8964H38.8905V20.3282ZM9.17377 24.7191H38.8905V26.2873H9.17377V24.7191Z"\n }\n) }), tX = () => /* @__PURE__ */ c("svg", { viewBox: "0 0 48 48", fill: "none", xmlns: "http://www.w3.org/2000/svg", children: /* @__PURE__ */ c(\n "path",\n {\n fill: "currentColor",\n fillRule: "evenodd",\n clipRule: "evenodd",\n d: "M11.581 0H42.1333L46.8571 4.64762V48H11.6571V32.1524L10.7428 31.4667L9.06664 33.1429L10.4381 34.5143L4.41904 40.5333C3.9619 40.9143 3.42856 41.1429 2.89523 41.1429C2.28571 41.1429 1.75237 40.9143 1.37142 40.5333L0.609515 39.7714C0.228562 39.3143 0 38.781 0 38.2476C0 37.6381 0.228562 37.1048 0.609515 36.7238L6.62858 30.7048L8 32.0762L9.6762 30.4C7.69525 28.1905 6.62858 25.4476 6.62858 22.4762C6.62858 19.2 7.84761 16.2286 10.1333 13.9428C10.5905 13.4857 11.0476 13.1048 11.581 12.7238V0ZM2.4381 39.5429C2.66668 39.7715 3.04761 39.7715 3.27618 39.5429L8.22856 34.5143L6.62858 32.9143L1.6762 37.8667L1.67614 37.8668C1.59997 38.0191 1.52381 38.1715 1.52381 38.3238C1.52381 38.4762 1.52382 38.6286 1.6762 38.781L2.4381 39.5429ZM44.9524 5.02858L41.9809 2.05715V5.02858H44.9524ZM11.2 15.0095C9.21906 16.9905 8.15239 19.6571 8.15239 22.4762C8.15239 25.2952 9.21906 27.9619 11.2 29.8667C13.181 31.8476 15.8476 32.9143 18.6667 32.9143C21.4857 32.9143 24.1524 31.8476 26.1333 29.8667C30.2476 25.7524 30.2476 19.1238 26.1333 15.0095C24.0762 12.9524 21.3333 11.9619 18.6667 11.9619C15.9238 11.9619 13.2572 12.9524 11.2 15.0095ZM13.1048 33.219V46.4762H45.2571V6.47619H40.4571V1.52381H13.1048V11.9619C17.6762 9.60001 23.3905 10.2857 27.2 14.0952C31.9238 18.7429 31.9238 26.3619 27.2 31.0857C24.9143 33.3714 21.8667 34.5905 18.6667 34.5905C16.6857 34.5905 14.781 34.1333 13.1048 33.219ZM32.6857 15.8477H42.5905V17.3715H32.6857V15.8477ZM34.2095 11.5809H29.6381V13.1047H34.2095V11.5809ZM33.6762 24.2286H42.5905V25.7524H33.6762V24.2286ZM42.5905 20.0381H33.6762V21.5619H42.5905V20.0381ZM29.1809 32.6858H42.4381V34.2096H29.1809V32.6858ZM42.5905 28.4953H31.9238V30.0192H42.5905V28.4953ZM21.5619 42.5906H15.8476V36.8763H21.5619V42.5906ZM20.0381 38.4001H17.2952V41.1429H20.0381V38.4001ZM42.4381 41.1429H24.2286V42.6667H42.4381V41.1429ZM24.2286 36.8763H42.5143V38.4001H24.2286V36.8763ZM18.4785 21.401L15.0775 18L14 19.0775L17.401 22.4785L14 25.8796L15.0775 26.9571L18.4785 23.556L21.8796 26.9571L22.9571 25.8796L19.556 22.4785L22.957 19.0775L21.8795 18L18.4785 21.401Z"\n }\n) }), oX = () => /* @__PURE__ */ c("svg", { viewBox: "0 0 48 48", fill: "none", xmlns: "http://www.w3.org/2000/svg", children: /* @__PURE__ */ c(\n "path",\n {\n fill: "currentColor",\n fillRule: "evenodd",\n clipRule: "evenodd",\n d: "M40.851 41.4029V46.8005H42.9168V48H41.1176H30.0557H28.8562H18.9939H17.7944H6.73256H5V46.8005H6.73256V41.2696H17.7944V35.7387H19.4603V35.6054V17.3467C19.4603 15.7474 18.7939 14.2814 17.5278 13.2152L16.9948 12.7487C16.1285 12.0823 15.2621 11.2827 14.5291 10.483L13.9294 9.88327C12.3967 8.15069 11.064 6.21821 9.99782 4.15244L9.33145 2.88632C8.79835 1.88676 9.19812 0.68728 10.1977 0.220816C10.6642 -0.0457341 11.2639 -0.0457321 11.7304 0.0875432C12.1968 0.287456 12.5966 0.620644 12.8632 1.08711L12.9298 1.22038C13.8627 3.08623 15.7952 5.75174 17.1946 7.28441C17.9943 8.1507 18.7273 8.81707 19.5936 9.55009L19.9268 9.81664C20.06 9.94992 20.1934 10.0832 20.3267 10.1498C22.3924 11.4826 25.1245 11.4826 27.2569 10.1498C27.3235 10.0832 27.3902 10.0332 27.4569 9.98324C27.5235 9.93326 27.5902 9.88328 27.6568 9.81664L27.99 9.55009C28.1953 9.36191 28.4006 9.17812 28.6047 8.99535C29.1958 8.46615 29.7775 7.94541 30.3223 7.35104C31.7217 5.81838 33.6542 3.08624 34.6537 1.28702L34.7204 1.15374C35.2535 0.220817 36.3863 -0.179005 37.3859 0.287458C37.8523 0.487371 38.1855 0.953832 38.3854 1.4203C38.5187 1.9534 38.5187 2.4865 38.2521 2.95296L37.5857 4.21907C36.5862 6.28484 35.2535 8.21734 33.6542 9.94991L33.0544 10.5497C32.4441 11.2108 31.795 11.7944 31.1663 12.3595C30.9712 12.5348 30.7781 12.7084 30.5888 12.882L30.0557 13.3484C28.7896 14.4146 28.1232 15.8807 28.1232 17.48V35.7387V35.8719H29.7892V41.4029H40.851ZM20.3933 17.4133V35.672C20.3933 35.8053 20.4599 35.872 20.5265 35.9386H23.0588V21.5449H24.2582V35.9386H26.7905C26.8571 35.9386 26.9237 35.872 26.9237 35.8053V17.5466C26.9237 15.6141 27.79 13.8149 29.256 12.4821L29.7892 12.0157C30.5888 11.3493 31.3885 10.6163 32.1215 9.81664L32.7212 9.2169C34.1873 7.55096 35.4534 5.75174 36.4529 3.75261L37.1193 2.4865C37.2526 2.28659 37.2526 2.08667 37.1859 1.88676C37.1193 1.68684 36.986 1.48693 36.7861 1.4203C36.3863 1.22038 35.9198 1.35366 35.7199 1.75348L35.6533 1.88676C34.6537 3.75261 32.6546 6.5514 31.1885 8.1507C30.5781 8.812 29.9289 9.39564 29.3001 9.96089C29.1052 10.1361 28.9122 10.3096 28.723 10.483L28.3898 10.7496L27.79 11.1494C25.3244 12.7487 22.1258 12.7487 19.5936 11.1494C19.4603 11.105 19.3271 11.0013 19.1939 10.8977C19.1272 10.8458 19.0606 10.794 18.9939 10.7496L18.6607 10.483L18.6603 10.4827C17.7941 9.74976 16.928 9.01685 16.1951 8.1507C14.6624 6.5514 12.6633 3.68598 11.6638 1.82013L11.5971 1.68685C11.4638 1.48693 11.3305 1.35366 11.1306 1.28702C11.064 1.22038 10.9307 1.22038 10.8641 1.22038C10.7974 1.22038 10.6642 1.22038 10.5309 1.28702C10.131 1.48694 9.99777 1.95339 10.1977 2.35322L10.8641 3.61934C11.8636 5.61847 13.0631 7.41768 14.5958 9.08362L15.1955 9.68336C15.9285 10.483 16.7282 11.216 17.5278 11.8824L18.061 12.3489C19.5936 13.6816 20.3933 15.4808 20.3933 17.4133ZM7.66551 42.6024V46.9338H17.5278V42.6024H7.66551ZM18.7273 41.4029V46.9338H28.5897V41.4029V37.0714H26.7905H20.5931H18.7273V41.4029ZM29.7892 42.6024V46.9338H39.6516V42.6024H29.7892ZM27.4569 4.55226C27.4569 6.68466 25.7243 9.28353 23.6585 9.28353C21.5928 9.28353 19.8601 6.68466 19.8601 4.55226C19.8601 2.41985 21.5928 0.753912 23.6585 0.753912C25.7909 0.753912 27.4569 2.48649 27.4569 4.55226ZM26.2573 4.55226C26.2573 3.15287 25.1246 1.95339 23.6585 1.95339C22.2591 1.95339 21.0597 3.15287 21.0597 4.55226C21.0597 6.08492 22.3258 8.08405 23.6585 8.08405C24.9913 8.08405 26.2573 6.08492 26.2573 4.55226Z"\n }\n) }), rX = () => /* @__PURE__ */ c("svg", { viewBox: "0 0 48 48", fill: "none", xmlns: "http://www.w3.org/2000/svg", children: /* @__PURE__ */ c(\n "path",\n {\n fill: "currentColor",\n fillRule: "evenodd",\n clipRule: "evenodd",\n d: "M42.1858 35.1146C39.247 33.3815 34.9519 31.8744 31.7871 30.8948C30.1293 30.3673 29.0743 28.9356 28.9236 27.2779C31.4103 25.168 32.4652 21.6264 32.7666 20.27C34.2737 19.9686 35.3287 18.6122 35.3287 16.7284V12.7347H34.1984V5.87755C34.1984 4.29513 33.2188 2.93878 31.8624 2.2606C31.8624 2.14758 31.8812 2.01573 31.9001 1.88388L31.9001 1.88383L31.9001 1.88378C31.9189 1.75193 31.9378 1.62008 31.9378 1.50706V0H20.7855C16.8671 0 13.6269 3.24019 13.6269 7.15856V12.7347H12.4966V16.7284C12.4966 18.6122 13.5516 19.9686 15.0586 20.27C15.3601 21.6264 16.415 25.0926 18.9017 27.2779C18.7509 28.9356 17.696 30.3673 16.0382 30.8948C12.9487 31.8744 8.57826 33.3815 5.63948 35.1146C0.515465 38.2041 0.967584 43.102 1.04294 43.1774V48H2.55V43.102C2.55 43.0961 2.54942 43.0843 2.54856 43.0668C2.52761 42.6397 2.342 38.8569 6.46837 36.3956C9.25644 34.7378 13.4762 33.2308 16.4903 32.3265C16.7918 32.2512 17.0932 32.1005 17.3946 31.9498C17.8467 35.1146 20.6348 37.6013 23.9503 37.6013C27.2659 37.6013 29.9786 35.1146 30.506 31.9498C30.6568 32.0251 30.8075 32.0816 30.9582 32.1382C31.1089 32.1947 31.2596 32.2512 31.4103 32.3265C34.4244 33.3061 38.6442 34.7378 41.4323 36.3956C45.5353 38.843 45.375 42.597 45.3524 43.1249L45.3524 43.1251C45.3514 43.1497 45.3506 43.1673 45.3506 43.1774V48H46.8577V43.2528C46.8496 43.2366 46.8485 43.1661 46.8465 43.0493C46.8305 42.0744 46.7614 37.8734 42.1858 35.1146ZM16.415 19.5165L16.2643 18.9137H15.6615C14.4558 18.9137 14.0037 17.8587 14.0037 16.8038V14.3171H15.134V7.23391C15.134 4.14443 17.696 1.58242 20.7855 1.58242H30.4307V2.03454H30.28V2.78807C29.7525 4.89796 27.7933 6.48038 25.5327 6.48038H20.0319C18.7509 6.48038 17.696 7.53532 17.696 8.81633V9.87127H19.2031V8.81633C19.2031 8.36421 19.5798 7.91209 20.1073 7.91209H25.6081C28.3208 7.91209 30.6568 6.17896 31.6363 3.76766C32.3145 4.21978 32.842 4.97331 32.842 5.87755V14.2418H33.9723V16.7284C33.9723 17.2559 33.8216 18.8383 32.3145 18.8383H31.7117L31.561 19.4411C31.561 19.5165 29.9786 27.5039 24.4024 27.5039H23.5736C17.9974 27.5793 16.415 19.5918 16.415 19.5165ZM29.0743 30.9702C29.0743 33.8336 26.7384 36.0942 23.9503 36.0942C21.0869 36.0942 18.8263 33.7582 18.8263 30.9702C19.5798 30.2166 20.1073 29.2371 20.4087 28.1821C21.313 28.7096 22.4433 29.011 23.7243 29.011H24.4024C25.6834 29.011 26.7384 28.7096 27.718 28.1821C27.7933 29.3124 28.3208 30.2166 29.0743 30.9702ZM9.40715 43.7048H7.90009V48H9.40715V43.7048ZM38.4181 43.7048H39.9252V48H38.4181V43.7048Z"\n }\n) }), nX = () => /* @__PURE__ */ c("svg", { viewBox: "0 0 48 48", fill: "none", xmlns: "http://www.w3.org/2000/svg", children: /* @__PURE__ */ c(\n "path",\n {\n fill: "currentColor",\n fillRule: "evenodd",\n clipRule: "evenodd",\n d: "M26.0661 39.2083L31.5254 32.3309C32.2804 32.5825 33.1677 32.8673 34.009 33.1373L34.0094 33.1374L34.0095 33.1374C35.3013 33.5519 36.4846 33.9317 36.9139 34.1034L37.4102 32.7563C36.3467 32.4018 31.1709 30.7002 30.1783 30.4165C28.5476 29.9202 27.4841 28.5022 27.3423 26.8006C29.8238 24.6736 30.8164 21.1994 31.1709 19.9232C32.6598 19.6396 33.6525 18.3634 33.6525 16.449V12.5495H32.5181V5.74298C32.5181 4.18316 31.5963 2.83604 30.2492 2.19793C30.2492 2.05613 30.2669 1.93205 30.2847 1.80798L30.2847 1.80794C30.3024 1.68388 30.3201 1.55981 30.3201 1.41802V0H19.4014C15.5018 0 12.3822 3.11965 12.3822 7.0192V12.5495H11.2477V16.449C11.2477 18.2925 12.2404 19.6396 13.8002 19.9232C14.1547 21.2703 15.1473 24.7445 17.6288 26.8006C17.487 28.4313 16.4235 29.9202 14.7928 30.4165C11.7441 31.4092 7.41908 32.8981 4.58304 34.5997C-0.521835 37.6485 -0.0255239 42.3988 0.0453771 42.5406V47.291H1.4634V42.3988C1.4634 42.3966 1.46296 42.3903 1.46226 42.3802C1.44102 42.075 1.1765 38.2735 5.36295 35.7341C7.63179 34.387 10.8223 33.1817 13.5166 32.26L18.976 39.0665L20.1104 38.003L20.7485 38.8538L19.0469 47.0783L20.394 47.3619L21.9538 39.8464C22.1665 39.9173 22.3792 39.9882 22.6628 39.9882C22.8755 39.9882 23.1591 39.9173 23.3718 39.8464L24.9316 47.3619L26.2788 47.0783L24.5771 38.8538L25.2152 38.003L26.0661 39.2083ZM29.7529 31.8346C29.7823 31.8346 29.8238 31.8467 29.8725 31.861L29.8725 31.861C29.9413 31.8811 30.0244 31.9055 30.1074 31.9055L25.9952 37.1521L23.4427 34.7415L27.4132 30.3456C27.9804 30.9838 28.8312 31.551 29.7529 31.8346ZM15.0055 19.2142L14.9346 18.647H14.3674C13.0912 18.647 12.6658 17.5835 12.6658 16.5199V14.0384H13.8002V7.0901C13.8002 3.97046 16.3526 1.48892 19.4014 1.48892H28.9021V1.55982V1.98523H28.7603V2.83604C28.1931 4.89217 26.2788 6.38109 24.0808 6.38109H18.6214C17.3452 6.38109 16.3526 7.44461 16.3526 8.64993V9.71344H17.7706V8.64993C17.7706 8.15362 18.196 7.72821 18.6924 7.72821H24.1517C26.846 7.72821 29.1857 6.02659 30.0365 3.61595C30.7455 4.04136 31.2418 4.82127 31.2418 5.74298V13.9675H32.3763V16.449C32.3763 17.4417 31.9508 18.5761 30.6746 18.5761H30.1074L29.9656 19.1433C29.9656 19.2142 28.4058 27.0842 22.8755 27.0842H22.1665C16.4944 27.1551 15.0055 19.2851 15.0055 19.2142ZM22.0956 28.5731H22.8046C24.0808 28.5731 25.1443 28.2895 26.0661 27.7223L26.0661 27.7224C26.2079 28.2187 26.3497 28.7149 26.5624 29.1403L22.4501 33.678L18.3378 29.1403C18.5506 28.7149 18.7633 28.2186 18.8342 27.7223C19.7559 28.2186 20.8194 28.5731 22.0956 28.5731ZM14.7928 31.9055C14.8966 31.9055 14.9624 31.8675 15.0459 31.8193L15.0459 31.8193C15.0764 31.8016 15.1093 31.7827 15.1473 31.7637C16.069 31.4801 16.8489 30.9838 17.487 30.2747L21.4575 34.6706L18.9051 37.0812L14.7928 31.9055ZM23.0173 38.4284C22.7337 38.7829 22.0956 38.7829 21.8829 38.4284L20.9612 37.1521L22.4501 35.7341L23.939 37.1521L23.0173 38.4284ZM7.63177 43.1079H6.21375V47.362H7.63177V43.1079ZM47.5862 37.5775L48 38.8537L43.5862 42.0443L45.2414 47.22L44.2069 48L39.931 44.8094L35.6552 48L34.6207 47.22L36.2759 42.0443L32 38.8537L32.4138 37.5775H37.6552L39.3103 32.4017H40.6207L42.2759 37.5775H47.5862ZM40 43.3914C40.2069 43.3914 40.4138 43.4623 40.6207 43.6041L43.3103 45.5893L42.2759 42.257C42.069 41.8316 42.2759 41.3353 42.6207 41.0517L45.3793 38.9955H41.931C41.5172 38.9955 41.1034 38.7119 40.9655 38.2865L39.931 34.9542L38.8965 38.2865C38.7586 38.7828 38.4138 39.0664 37.931 39.0664H34.4828L37.2414 41.1226C37.6552 41.4062 37.7931 41.9025 37.6552 42.3279L36.6207 45.6602L39.3793 43.6041C39.5862 43.4623 39.7931 43.3914 40 43.3914Z"\n }\n) }), iX = () => /* @__PURE__ */ c("svg", { viewBox: "0 0 48 48", fill: "none", xmlns: "http://www.w3.org/2000/svg", children: /* @__PURE__ */ c(\n "path",\n {\n fill: "currentColor",\n fillRule: "evenodd",\n clipRule: "evenodd",\n d: "M33.8941 32.1057L38.7846 40.1293C39.0138 40.5113 39.2431 40.8934 39.3195 41.3519C40.0836 42.6509 39.778 43.95 38.4789 44.7141L34.1997 47.1594C33.9705 47.3122 32.8243 47.8471 32.1365 47.9235C31.8309 48 31.5252 48 31.1431 48C30.9903 48 30.8184 47.9809 30.6465 47.9618C30.4745 47.9427 30.3026 47.9235 30.1498 47.9235C29.3341 47.8608 28.57 47.6435 27.8573 47.4409C27.7021 47.3967 27.5492 47.3532 27.3988 47.3122C24.8772 46.5481 22.4319 45.1726 19.9102 42.9566C17.0065 40.5113 14.4084 37.4548 12.1923 34.0161C11.8994 33.5181 11.4717 32.8179 11.0125 32.0662C10.274 30.8573 9.45412 29.5152 8.98294 28.6671C6.91975 25.0756 5.46787 21.4077 4.62731 17.6634C3.93958 14.3776 3.78675 11.6267 4.32165 9.02857C4.33034 8.98077 4.33903 8.93272 4.34777 8.88444C4.4926 8.08372 4.64904 7.21889 5.00938 6.35406C5.23863 5.66633 5.54429 5.13142 5.92636 4.59652C6.30843 4.06162 7.30182 3.29747 7.53106 3.14464L11.7339 0.470132C13.0329 -0.370427 14.332 -0.0647694 15.0961 1.23428C15.3253 1.53991 15.5545 1.92195 15.7838 2.30398L15.7838 2.30409L20.5979 10.3276C21.3621 11.5502 21.1328 12.8493 19.9866 13.6134L15.5546 16.2879C15.0197 16.7464 14.8669 17.1285 15.0961 17.9691C15.1526 18.1104 15.2092 18.2831 15.2734 18.4795C15.3829 18.8139 15.5148 19.2169 15.7074 19.6502C16.3187 21.1021 17.0829 22.5539 17.9999 24.1586L20.2923 27.9794C21.2857 29.5076 22.2791 30.8831 23.2725 32.1057C23.7309 32.6406 24.1894 33.0991 24.495 33.4047L24.4951 33.4048C25.1828 33.9397 25.4885 34.0161 26.329 33.7104L30.6082 31.1124C31.8309 30.501 33.1299 30.8831 33.8941 32.1057ZM33.6648 45.6311L37.8676 43.2623C38.4025 42.9566 38.4789 42.5745 37.944 41.8868C37.834 41.6117 37.6843 41.3761 37.5235 41.1232C37.461 41.0249 37.3969 40.9239 37.3327 40.817L32.4422 32.7935C31.9234 31.9782 31.4046 32.2412 31.2344 32.3275C31.2291 32.3302 31.2242 32.3327 31.2196 32.335L26.8639 35.0095C25.3356 35.6208 24.4187 35.468 23.3489 34.4746C22.9944 34.191 22.5741 33.71 22.088 33.1538C22.0502 33.1105 22.012 33.0668 21.9734 33.0227C20.9036 31.7237 19.9102 30.3482 18.9168 28.6671L16.6244 24.8464C15.631 23.2417 14.8669 21.637 14.2555 20.1087C13.9995 19.4685 13.8507 18.9356 13.7193 18.4651C13.6938 18.3739 13.669 18.2851 13.6442 18.1983C13.3386 16.7464 13.6442 15.9059 14.714 14.9125L19.2225 12.1616C19.3753 12.0851 19.9102 11.7795 19.3753 10.9389L14.5612 2.91541C14.4511 2.64025 14.3014 2.40472 14.1407 2.15174C14.0782 2.05345 14.014 1.95251 13.9499 1.8456C13.7206 1.46352 13.4914 1.3107 13.2622 1.3107C13.0329 1.3107 12.8801 1.38711 12.6508 1.53994L8.52445 4.13803C8.14238 4.36727 7.53106 4.90218 7.30182 5.20784C6.99616 5.66633 6.76692 6.12481 6.53767 6.65971L6.53767 6.65972C6.30843 7.42386 6.07919 8.188 5.92636 9.10497C5.46787 11.4738 5.54429 14.0719 6.23202 17.1285C7.07258 20.72 8.44804 24.3115 10.4348 27.7501C11.199 29.1256 12.8037 31.7237 13.6442 33.0227C15.7074 36.3085 18.2291 39.2123 21.0564 41.6576C23.5017 43.7208 25.6413 45.0198 28.0102 45.7075C28.1987 45.7547 28.3808 45.8018 28.5578 45.8476C29.2414 46.0246 29.8484 46.1817 30.4554 46.2424C30.9903 46.3188 31.5252 46.3188 32.0601 46.2424C32.3658 46.166 33.2063 45.8604 33.6648 45.6311ZM43.5223 21.5606C43.2931 18.1219 42.1469 14.8361 40.2365 11.9323C37.8677 8.18802 34.5054 5.51352 30.379 3.98523L29.997 3.8324L29.3856 5.20787L29.8441 5.36069C33.6649 6.81257 36.7214 9.33425 38.9375 12.7729C40.695 15.5238 41.6884 18.504 41.9176 21.7134C41.994 23.0889 41.994 24.4643 41.7648 25.8398L43.2931 26.069C43.5223 24.5407 43.5987 23.0124 43.5223 21.5606ZM37.6384 25.3048L39.0903 25.5341C39.2431 24.4643 39.3195 23.3945 39.3195 22.4011C39.1667 15.2181 34.1233 9.48704 28.6979 7.80592L28.2394 9.25779C33.8177 10.9389 39.0139 17.587 37.6384 25.3048Z"\n }\n) }), aX = () => /* @__PURE__ */ c("svg", { viewBox: "0 0 48 48", fill: "none", xmlns: "http://www.w3.org/2000/svg", children: /* @__PURE__ */ c(\n "path",\n {\n fill: "currentColor",\n fillRule: "evenodd",\n clipRule: "evenodd",\n d: "M21.1131 33.2371H1.23051V12.4479H21.1131V16.2689H22.4084V7.46105C22.4084 6.101 21.3074 5 19.9473 5H2.46103C1.10098 5 0 6.101 0 7.46105V39.5192C0 40.8793 1.10098 41.9803 2.46103 41.9803H19.9473C21.3074 41.9803 22.4084 40.8793 22.4084 39.5192V30.1285H21.1131V33.2371ZM2.46103 6.29528H19.9473C20.595 6.29528 21.1779 6.81339 21.1779 7.52579V11.2174H1.29528V7.52579C1.23052 6.81339 1.74862 6.29528 2.46103 6.29528ZM19.9473 40.7498H2.46103C1.81339 40.7498 1.23051 40.2317 1.23051 39.5192V34.5324H21.1131V39.5192C21.1131 40.2317 20.595 40.7498 19.9473 40.7498ZM45.5939 5H28.1076C26.7475 5 25.6466 6.101 25.6466 7.46105V16.2689H26.9418V12.4479H46.8244V31.2942V33.3019H26.8771V30.1932H25.5818V39.584C25.5818 40.944 26.6828 42.045 28.0428 42.045H45.5291C46.8892 42.045 47.9902 40.944 47.9902 39.584V31.2942V7.52579C48.1197 6.10098 46.9539 5 45.5939 5ZM45.5939 40.7498H28.1076C27.46 40.7498 26.8771 40.2317 26.8771 39.5192V34.5324H46.7597V39.5192C46.8244 40.2317 46.2415 40.7498 45.5939 40.7498ZM26.8771 11.1526V7.46105C26.8771 6.81341 27.3952 6.23051 28.1076 6.23051H45.5939C46.2415 6.23051 46.8244 6.74864 46.8244 7.46105V11.1526H26.8771ZM38.7289 36.9934H34.9726V38.2887H38.7289V36.9934ZM36.0088 8.10871H37.6927V9.40399H36.0088V8.10871ZM9.32604 36.9934H13.0824V38.2887H9.32604V36.9934ZM11.9814 8.10871H10.2975V9.40399H11.9814V8.10871ZM35.1669 21.2558L30.6334 17.3052L30.5686 19.6367H23.056V18.3414H29.3381V15.6861H30.6981L37.1098 21.2558L30.5686 26.7607H29.2733V23.9111L26.6828 23.8463V22.6158H30.5686V25.1416L35.1669 21.2558ZM17.4215 29.2217L12.888 25.2064L17.4863 21.3853V23.8463L21.3074 23.9111V22.6158H18.7168L18.7816 19.7014H17.4215L10.8804 25.2064L17.292 30.7761H18.7168V28.1207H24.8694V26.8902L17.4215 26.8255V29.2217ZM23.056 22.6158H24.8694V23.9111H23.056V22.6158Z"\n }\n) }), sX = () => /* @__PURE__ */ c("svg", { viewBox: "0 0 48 48", fill: "none", xmlns: "http://www.w3.org/2000/svg", children: /* @__PURE__ */ c(\n "path",\n {\n fill: "currentColor",\n fillRule: "evenodd",\n clipRule: "evenodd",\n d: "M42.7266 0H44.9376V1.42645H42.7266V28.3863H24.682V38.1575L33.2407 46.5735H36.3789V48H11.5587V46.5735H14.6969L23.2556 38.1575V28.3863H5.21102V1.42645H3V0H5.21102H42.7266ZM23.2556 46.5022V40.0832L16.6939 46.5022H23.2556ZM24.682 46.5022H31.2437L24.682 40.0832V46.5022ZM6.63747 26.9599H41.3001V1.42645H6.63747V26.9599ZM12.3433 11.1263L11.3447 10.1279L12.8425 8.63008L11.3447 7.1323L12.3433 6.13379L13.841 7.63157L15.3388 6.13379L16.3373 7.1323L14.8395 8.63008L16.3373 10.1279L15.3388 11.1263L13.841 9.62859L12.3433 11.1263ZM32.6701 22.1812L34.0966 20.7548L35.5943 22.1812L36.5929 21.1827L35.0951 19.7563L36.5929 18.2585L35.5943 17.26L34.0966 18.7577L32.6701 17.26L31.6716 18.2585L33.0981 19.7563L31.6716 21.1827L32.6701 22.1812ZM18.6196 24.1069C17.2645 24.1069 16.1233 22.9658 16.1233 21.6106C16.1233 20.4695 16.8365 19.471 17.9777 19.257V18.1159C17.9777 15.4769 20.1174 13.3373 22.7563 13.3373H24.6107C26.4651 13.3373 27.9628 11.8395 27.9628 9.98509V6.77558L26.679 8.05938L25.6805 7.06087L28.6761 4.06534L31.6003 6.98954L30.6018 7.98807L29.318 6.70426V9.98509C29.318 12.624 27.1783 14.7637 24.5394 14.7637H22.685C20.8306 14.7637 19.3328 16.2615 19.3328 18.1159V19.257C20.3314 19.5423 21.1159 20.4695 21.1159 21.6106C21.1159 22.9658 19.9747 24.1069 18.6196 24.1069ZM19.6895 21.5393C19.6895 20.9687 19.1902 20.4695 18.6196 20.4695C17.9777 20.4695 17.5498 20.9687 17.5498 21.5393C17.5498 22.1099 18.049 22.6092 18.6196 22.6092C19.1902 22.6092 19.6895 22.1099 19.6895 21.5393Z"\n }\n) }), cX = () => /* @__PURE__ */ c("svg", { viewBox: "0 0 48 48", fill: "none", xmlns: "http://www.w3.org/2000/svg", children: /* @__PURE__ */ c(\n "path",\n {\n fill: "currentColor",\n d: "M39.8264 24.6811C41.5893 24.6811 43.3523 24.6811 45.1152 24.6811H48V4.08684C48 1.8431 46.1569 0 43.9132 0H27.5659V1.60267H43.8331C45.1953 1.60267 46.3973 2.72455 46.3973 4.16695V23.2387H45.1152C43.3523 23.2387 41.5893 23.2387 39.8264 23.2387C39.3456 23.2387 38.8648 23.3189 38.4641 23.5593C38.0634 23.7997 37.7429 24.1202 37.5826 24.5209C37.4224 25.0017 37.5025 25.4825 37.7429 25.9633C38.384 27.1653 38.0634 28.6878 36.9416 29.6494C35.8998 30.5309 34.2972 30.611 33.0952 29.7296C31.9733 28.9282 31.5726 27.4858 32.1336 26.2037C32.4541 25.4023 32.4541 24.6812 32.1336 24.1202C31.8932 23.7997 31.4123 23.2387 30.2103 23.2387H27.4858H24.601V22.0367C24.601 21.9566 24.601 21.8765 24.601 21.7963C24.601 21.3957 24.601 20.995 24.601 20.4341V18.7513C24.601 18.591 24.601 18.4307 24.601 18.2704C24.601 17.9499 24.6811 17.7095 25.1619 17.4691C25.4825 17.3088 25.803 17.3089 26.4441 17.5493C28.4474 18.2705 30.6912 17.7095 31.9733 16.0267C33.1753 14.424 33.1753 12.1002 31.9733 10.4975C30.6912 8.81472 28.6077 8.17363 26.5242 8.97497C26.2037 9.0551 25.9633 9.13523 25.6427 9.21536C25.4023 9.21536 25.1619 9.13524 24.9215 8.97497C24.6811 8.8147 24.601 8.49415 24.601 8.25375V0.240391H4.08681C1.84307 0.240391 0 2.08349 0 4.32723V20.5142H1.60267V4.32723C1.60267 2.96496 2.72454 1.76295 4.16694 1.76295H23.2387V8.17363C23.2387 8.89483 23.5593 9.61606 24.1202 10.0969C24.6811 10.5777 25.3222 10.818 26.0434 10.7379C26.4441 10.6578 26.8447 10.5776 27.2454 10.4174C28.6878 9.93656 30.0501 10.2571 30.8514 11.379C31.6528 12.4207 31.6528 13.9432 30.8514 14.985C29.9699 16.1069 28.5275 16.5075 27.1653 16.0267C26.4441 15.7062 25.4825 15.5459 24.601 16.0267C23.6394 16.5075 23.1586 17.3088 23.1586 18.2704C23.1586 19.3122 23.1586 20.1937 23.1586 20.8347C23.1586 21.7162 23.1586 22.7579 23.1586 22.8381V23.3189H17.7095C17.3088 23.3189 17.1486 23.2388 17.1486 23.1586C17.1486 23.0785 17.0684 22.9182 17.2287 22.5977C18.1102 20.6745 17.4691 18.4307 15.7863 17.1486C14.1035 15.8665 11.6194 15.9466 10.0167 17.3089C8.33389 18.6711 7.85309 21.0752 8.81469 22.9182C8.89482 22.9984 8.89482 23.0785 8.81469 23.1586C8.65442 23.2388 8.41402 23.3189 8.17362 23.3189C6.49082 23.3189 4.80801 23.3189 3.12521 23.3189H0.0801331V43.9132C0.0801331 46.1569 1.9232 48 4.16694 48H20.3539V46.3974H4.00668C2.64441 46.3974 1.4424 45.2755 1.4424 43.8331V24.7613H2.88481C4.56761 24.7613 6.25042 24.7613 8.01336 24.7613C8.49416 24.7613 8.97496 24.6811 9.37562 24.4407C9.77629 24.2805 10.0968 23.8798 10.2571 23.4791C10.4174 22.9983 10.3372 22.5175 10.0968 22.0367C9.45576 20.8347 9.77629 19.3122 10.8982 18.3506C11.9399 17.4691 13.5426 17.389 14.7446 18.2704C15.8664 19.0718 16.2671 20.5142 15.7062 21.7963C15.3856 22.5977 15.3856 23.3189 15.7062 23.8798C15.9466 24.2003 16.4274 24.7613 17.6294 24.7613H23.0785V31.2521C23.0785 31.4124 23.0785 31.6528 22.9983 31.813C22.9182 31.9733 22.9182 32.1336 22.8381 32.1336C22.7579 32.1336 22.6778 32.1336 22.4374 32.0534C21.4758 31.5726 20.5142 31.4925 19.5526 31.7329C17.4691 32.2137 16.1068 33.7362 15.8664 35.98C15.7062 37.2621 16.187 38.6244 17.1486 39.5058C18.7513 41.0284 20.5943 41.3489 22.5175 40.4674C22.7579 40.3873 22.7579 40.4674 22.7579 40.4674C22.8381 40.6277 22.9182 40.9483 22.9182 41.1887C22.9182 42.5509 22.9182 43.9132 22.9182 45.2755V48H43.5927C45.8364 48 47.6795 46.1569 47.6795 43.9132V27.7262H46.0768V43.9132C46.0768 45.2755 44.9549 46.4775 43.5125 46.4775H24.601V45.3556C24.601 43.9934 24.601 42.6311 24.601 41.2688C24.601 40.788 24.4407 40.3072 24.2805 39.9065C23.8798 39.025 22.8381 38.7045 21.8765 39.1853C20.5943 39.8264 19.3923 39.586 18.2705 38.5443C17.7095 37.9833 17.389 37.1018 17.4691 36.3005C17.6294 34.778 18.4307 33.8164 19.8731 33.4958C20.4341 33.3355 21.0751 33.4157 21.6361 33.7363C22.2771 34.0568 22.8381 34.0568 23.399 33.8164C23.8798 33.576 24.2805 33.0952 24.4407 32.4541C24.5209 32.1336 24.5209 31.813 24.5209 31.5726V25.0818H29.7295H30.1302C30.5309 25.0818 30.6912 25.1619 30.6912 25.2421C30.6912 25.3222 30.7713 25.4825 30.611 25.803C29.7295 27.7262 30.3706 29.9699 32.0534 31.2521C32.8548 31.8932 33.8965 32.2137 34.8581 32.2137C35.8998 32.2137 37.0217 31.8932 37.823 31.172C39.5058 29.8097 39.9866 27.4057 39.025 25.5626C38.9449 25.4825 38.9449 25.4024 39.025 25.3222C39.3456 24.7613 39.586 24.6811 39.8264 24.6811Z"\n }\n) }), lX = () => /* @__PURE__ */ c("svg", { viewBox: "0 0 48 48", fill: "none", xmlns: "http://www.w3.org/2000/svg", children: /* @__PURE__ */ c(\n "path",\n {\n fill: "currentColor",\n d: "M32.436 29.5777V20.6839H24.3924V14.5368L28.8392 17.8065L29.8202 17.0872L27.9891 11.3978L32.8283 7.86649L32.436 6.68937H26.4196L24.5886 1H23.3461L21.515 6.68937H15.4986L15.1063 7.86649L19.9455 11.3978L18.1145 17.0872L19.0954 17.8065L23.0845 14.9292V20.6839H15.564V32.9128H0V46.4496H15.564H16.8719H31.1281H32.436H48V29.5777H32.436ZM21.2534 11.594C21.3842 11.1362 21.2534 10.6785 20.861 10.4169L17.4605 7.93188H21.6458C22.1035 7.93188 22.4959 7.6703 22.6267 7.21253L23.9346 3.22343L25.2425 7.21253C25.3733 7.6703 25.7657 7.93188 26.2234 7.93188H30.4087L27.0082 10.4169C26.6158 10.6785 26.485 11.1362 26.6158 11.594L27.9237 15.5831L24.5232 13.0981C24.1308 12.8365 23.673 12.8365 23.2807 13.0981L19.8801 15.5831L21.2534 11.594ZM15.564 45.1417H1.3079V34.2207H15.564V45.1417ZM31.1281 45.1417H16.8719V32.9128V21.9918H31.1281V29.5777V45.1417ZM46.6921 45.1417H32.436V30.8856H46.6921V45.1417Z"\n }\n) }), pX = () => /* @__PURE__ */ c("svg", { viewBox: "0 0 48 48", fill: "none", xmlns: "http://www.w3.org/2000/svg", children: /* @__PURE__ */ c(\n "path",\n {\n fill: "currentColor",\n fillRule: "evenodd",\n clipRule: "evenodd",\n d: "M36.9469 11.5894C36.3153 11.5894 35.6837 11.6525 34.989 11.7788C33.9153 6.66311 29.4944 3 24.1892 3C18.9471 3 14.3998 6.78943 13.3893 11.9052C12.5683 11.7157 11.8104 11.5894 11.0525 11.5894C4.92626 11.5894 0 16.5788 0 22.6419C0 28.0734 3.66311 32.747 8.39989 33.3786H10.1051V32.1154H8.46303C4.42098 31.6102 1.26314 27.4418 1.26314 22.6419C1.26314 17.2104 5.68412 12.7894 11.1156 12.7894C11.9367 12.7894 12.8209 12.9157 13.7682 13.2315L14.463 13.4209L14.5893 12.7262C15.284 7.86309 19.4524 4.26314 24.2523 4.26314C29.1154 4.26314 33.2206 7.79993 33.9154 12.663L34.0417 13.3578L34.7364 13.1683C35.5575 12.9788 36.3153 12.8525 37.0732 12.8525C42.5047 12.8525 46.9257 17.2735 46.9257 22.705C46.9257 27.505 43.7679 31.6102 39.6627 32.1786H38.0837V33.4417H39.5995C44.3995 32.747 47.9994 28.1365 47.9994 22.705C48.0626 16.5788 43.0732 11.5894 36.9469 11.5894ZM32.4627 24.284C30.1891 22.0104 27.2207 20.7472 23.9997 20.7472V22.0104C26.8418 22.0104 29.5575 23.1472 31.5786 25.1682C33.5996 27.1892 34.7364 29.905 34.7364 32.7471C34.7364 35.5891 33.5996 38.3049 31.5786 40.3259L31.1365 40.768L32.6522 42.2838L27.5365 43.0417L28.2944 37.9259L29.4944 39.1259L29.9365 38.6838C31.5154 37.1049 32.3996 35.0207 32.3996 32.7471C32.3996 30.5366 31.5154 28.3892 29.9365 26.8103C28.3575 25.2314 26.2734 24.3472 23.9997 24.3472V25.6103C25.8944 25.6103 27.6628 26.3682 29.0523 27.6945C30.3786 29.0208 31.1365 30.8524 31.1365 32.7471C31.1365 34.4523 30.5681 36.0312 29.4944 37.2944L27.4733 35.2733L26.147 44.4943L35.368 43.168L32.968 40.768C34.9891 38.5575 36.0627 35.7786 36.0627 32.7471C35.9364 29.5892 34.7364 26.5577 32.4627 24.284ZM18.505 28.1997C17.4314 29.4628 16.863 31.0418 16.863 32.747C16.863 34.6417 17.6208 36.4733 18.884 37.7996C20.2734 39.1259 22.0418 39.8838 23.9365 39.8838V41.1469C21.6629 41.1469 19.5787 40.2627 17.9998 38.6838C16.4208 37.1048 15.5366 34.9575 15.5366 32.747C15.5366 30.4733 16.4208 28.3892 17.9998 26.8102L18.4419 26.3681L19.6418 27.5681L20.3997 22.4524L15.284 23.2103L16.7998 24.726L16.3577 25.1681C14.3366 27.1892 13.1998 29.9049 13.1998 32.747C13.1998 35.5891 14.3366 38.3048 16.3577 40.3259C18.3787 42.3469 21.0945 43.4837 23.9365 43.4837V44.7469C20.7155 44.7469 17.7471 43.4837 15.4735 41.2101C13.1998 38.9364 11.9367 35.968 11.9367 32.747C11.9367 29.7155 13.0104 26.9365 15.0314 24.726L12.6314 22.3261L21.8523 20.9998L20.5261 30.2207L18.505 28.1997Z"\n }\n) }), dX = () => /* @__PURE__ */ c("svg", { viewBox: "0 0 48 48", fill: "none", xmlns: "http://www.w3.org/2000/svg", children: /* @__PURE__ */ c(\n "path",\n {\n fill: "currentColor",\n fillRule: "evenodd",\n clipRule: "evenodd",\n d: "M47.9747 2.90369V2.02419C47.8947 0.904843 47.0952 0.105308 45.9758 0.0253543H45.0963C37.9805 -0.29446 31.0245 2.42397 25.9874 7.46105L25.8275 7.62094C23.189 10.0195 19.9109 11.0589 16.0732 10.899C10.3165 10.5792 4.79973 12.5781 0.882007 16.4958L0.322322 17.0555L8.31772 25.0508L6.79859 26.5699C5.83915 27.5294 5.83915 29.0485 6.79859 30.0079L7.99789 31.2072L4.87968 33.2061L4.87966 33.2061C4.71976 33.366 4.55985 33.5259 4.55985 33.7658C4.55985 34.0056 4.63984 34.2455 4.79975 34.4054L6.95846 36.5641L3.1207 40.4019L4.24006 41.5212L8.07782 37.6835L10.1566 39.7623L4.71977 45.1991L5.83909 46.3184L11.276 40.8816L13.4347 43.0404C13.5946 43.2003 13.7545 43.2802 13.9944 43.2802H14.0743C14.3142 43.2802 14.554 43.1203 14.634 42.9604L16.6328 39.8422L17.8321 41.0415C18.3118 41.5213 18.9515 41.7611 19.5912 41.7611C20.2308 41.7611 20.8704 41.5213 21.3501 41.0415L22.8692 39.5224L30.3049 46.9581L30.9445 47.4378L31.5042 46.8781C35.342 43.0404 37.3408 37.5236 37.021 31.7669C36.7811 27.9291 37.9005 24.651 40.2991 22.0126L40.459 21.8527C45.576 16.8956 48.2945 9.9396 47.9747 2.90369ZM2.56101 16.9755C6.07897 13.7774 10.8762 12.0983 15.9932 12.3382C17.9921 12.4181 19.911 12.1783 21.59 11.6986L9.437 23.8515L2.56101 16.9755ZM13.9944 41.2814L6.71865 34.0056L9.27713 32.3266L15.6734 38.7229L13.9944 41.2814ZM35.5819 31.9268C35.8217 36.9639 34.2226 41.8411 30.9445 45.359L24.0685 38.483L36.2214 26.3301C35.7417 28.0091 35.5019 29.848 35.5819 31.9268ZM39.8193 20.4135C39.7394 20.4935 39.6594 20.5934 39.5795 20.6933C39.4995 20.7933 39.4196 20.8932 39.3396 20.9732L20.3907 39.9222C20.0709 40.242 19.5112 40.242 19.1914 39.9222L8.07782 28.8086C7.91792 28.6487 7.83792 28.4089 7.83792 28.169C7.83792 27.9291 7.91792 27.6893 8.07782 27.5294L27.0268 8.58039C27.1067 8.50044 27.2067 8.42049 27.3066 8.34054L27.3066 8.34053L27.3067 8.34052C27.4066 8.26056 27.5066 8.18062 27.5865 8.10067C31.9839 3.86313 37.9005 1.46453 44.0569 1.46453H45.0963H45.9758C46.2157 1.46453 46.4555 1.70437 46.4555 1.94423V2.82373C46.6954 9.37992 44.2967 15.7762 39.8193 20.4135ZM30.145 10.739C29.1855 11.6985 28.7059 12.9777 28.7059 14.257C28.7059 15.6162 29.2655 16.8155 30.145 17.775C31.1044 18.7344 32.3837 19.2141 33.663 19.2141C34.9422 19.2141 36.2215 18.7344 37.1809 17.775C39.0998 15.8561 39.0998 12.6579 37.1809 10.739C35.342 8.82015 31.9839 8.82015 30.145 10.739ZM36.0616 16.6556C34.7024 18.0148 32.5436 18.0148 31.1844 16.6556C30.5448 16.016 30.145 15.1365 30.145 14.257C30.145 13.3775 30.4648 12.498 31.1844 11.8584C31.824 11.2188 32.7035 10.819 33.583 10.819C34.4625 10.819 35.342 11.1388 35.9816 11.8584C37.4208 13.2176 37.4208 15.3764 36.0616 16.6556ZM0 43.6038L1.5832 42.021L2.71374 43.1519L1.13054 44.7346L0 43.6038Z"\n }\n) }), bX = () => /* @__PURE__ */ c("svg", { viewBox: "0 0 48 48", fill: "none", xmlns: "http://www.w3.org/2000/svg", children: /* @__PURE__ */ c(\n "path",\n {\n fill: "currentColor",\n fillRule: "evenodd",\n clipRule: "evenodd",\n d: "M40.9957 2.30183C41.0634 1.01551 42.079 0 43.2976 0C44.5162 0 45.5994 1.08322 45.3963 2.36953V7.65021C45.3963 12.2539 43.0267 16.519 39.1001 18.9563C38.4908 19.2948 38.0846 19.9718 38.0846 20.7165V46.5106V46.7814H40.1834V48H36.5952H33.4133H32.8039H29.0127H23.8674H20.4146H19.8053H16.9619H12.3582H9.24397H8.63464H6.12974H2.60933V46.7814H4.77572V46.646V34.6629L4.77558 34.6629C4.50482 34.7306 4.2341 34.7983 3.96334 34.7983C2.88013 34.7983 2 33.9182 2 32.835V25.7264C2 22.5444 4.57264 19.9718 7.75458 19.9718H10.598H10.598C10.8688 19.9718 11.1397 19.9718 11.4105 20.0395C11.6813 20.0395 11.8844 20.1072 12.0875 20.1749L11.6135 21.2581H11.4105H11.275C11.0042 21.1904 10.8011 21.1904 10.598 21.1904H7.75458C5.24965 21.1904 3.21857 23.2214 3.21857 25.7264V32.835C3.21857 33.3089 3.55714 33.6474 3.96334 33.6474C4.43725 33.6474 4.77572 33.2412 4.77572 32.835V27.3512V25.591H5.99437V27.3512V32.835V46.646C5.99437 46.7137 6.06204 46.7814 6.12974 46.7814H8.63464V32.835H9.8533V46.7137H12.3582C12.4259 46.7137 12.4936 46.646 12.4936 46.5783V34.3244H13.7122V46.7137V46.8491H15.6079V46.646V33.2412C15.3371 33.3766 14.9986 33.4443 14.66 33.4443C13.4414 33.4443 12.4936 32.4288 12.4936 31.2778V23.3568C12.4936 19.8364 15.3371 16.9929 18.8576 16.9929H22.0395C22.3103 16.9929 22.6488 16.9929 22.9196 17.0606C23.1904 17.0606 23.3935 17.1283 23.5966 17.196L23.1227 18.2793C23.1227 18.2116 22.9873 18.2116 22.9196 18.2116H22.7842C22.5134 18.1439 22.3103 18.1439 22.0395 18.1439H18.8576C16.0141 18.1439 13.7122 20.4457 13.7122 23.2891V31.2101C13.7122 31.7518 14.1184 32.158 14.66 32.158C15.2017 32.158 15.6079 31.7518 15.6079 31.2101V25.1171V23.1537H16.8265V25.1171V31.2101V46.5106C16.8265 46.646 16.8942 46.7137 17.0296 46.7137H19.8731V31.2101H21.0916V46.7137H23.9351C24.0705 46.7137 24.1382 46.646 24.1382 46.5106V32.9027H25.3568V46.5783V46.7814H27.6587V46.5106V31.6841C27.3202 31.8195 26.9816 31.9549 26.5754 31.9549C25.2891 31.9549 24.2736 30.9393 24.2736 29.653V20.9873C24.2736 17.196 27.3878 14.0818 31.1791 14.0818H34.6995C38.1523 14.0818 40.9957 11.2384 40.9957 7.78561V2.30183ZM38.6262 17.8731C42.2144 15.6389 44.3808 11.78 44.3808 7.58251V2.36953C44.3808 1.76023 43.9069 1.21862 43.2976 1.21862C42.6883 1.21862 42.2144 1.76023 42.2144 2.36953V7.78561C42.2144 11.8477 38.897 15.2327 34.7673 15.2327H31.2468C28.1325 15.2327 25.5599 17.8054 25.5599 20.9196V29.653C25.5599 30.2623 26.0339 30.7362 26.6432 30.7362C27.2525 30.7362 27.7264 30.2623 27.7264 29.653V23.0183V20.9196H28.9449V23.0183V29.653V46.5106C28.9449 46.646 29.0804 46.7814 29.2158 46.7814H32.3977V29.653H33.6163V46.7814H36.7983C36.9337 46.7814 37.069 46.646 37.069 46.5106V20.7165C37.069 19.5656 37.6107 18.4824 38.6262 17.8731ZM33.007 12.5923C35.5119 12.5923 37.4753 9.5458 37.4753 6.97317C37.4753 4.53593 35.4442 2.5049 33.007 2.5049C30.5697 2.5049 28.5387 4.53593 28.5387 6.97317C28.471 9.4781 30.502 12.5923 33.007 12.5923ZM33.007 3.72352C34.8349 3.72352 36.2567 5.21294 36.2567 6.97317C36.2567 8.86879 34.6995 11.3737 33.007 11.3737C31.3145 11.3737 29.7574 8.86879 29.7574 6.97317C29.6897 5.14524 31.1791 3.72352 33.007 3.72352ZM24.7475 10.5614C24.7475 12.8632 22.9196 15.7066 20.6178 15.7066C18.3159 15.7066 16.488 12.8632 16.488 10.5614C16.488 8.25952 18.3159 6.43159 20.6178 6.43159C22.9196 6.43159 24.7475 8.25952 24.7475 10.5614ZM23.5289 10.5614C23.5289 8.93653 22.2426 7.65021 20.6178 7.65021C18.9929 7.65021 17.6389 8.93653 17.7066 10.5614C17.7066 12.2539 19.1283 14.488 20.6178 14.488C22.1072 14.488 23.5289 12.2539 23.5289 10.5614ZM13.2383 14.2849C13.2383 16.3836 11.5458 18.9563 9.44711 18.9563C7.34838 18.9563 5.65587 16.3836 5.65587 14.2849C5.65587 12.1862 7.34838 10.4936 9.44711 10.4936C11.5458 10.4936 13.2383 12.1862 13.2383 14.2849ZM12.0197 14.2172C12.0197 12.7955 10.8688 11.6446 9.44711 11.6446C8.02539 11.6446 6.87444 12.7955 6.87444 14.2172C6.87444 15.7743 8.09309 17.7377 9.44711 17.7377C10.8011 17.7377 12.0197 15.7743 12.0197 14.2172Z"\n }\n) }), MX = () => /* @__PURE__ */ c("svg", { viewBox: "0 0 48 48", fill: "none", xmlns: "http://www.w3.org/2000/svg", children: /* @__PURE__ */ c(\n "path",\n {\n fill: "currentColor",\n fillRule: "evenodd",\n clipRule: "evenodd",\n d: "M42.1333 0H11.581V12.7238C11.0476 13.1048 10.5905 13.4857 10.1333 13.9428C7.84761 16.2286 6.62858 19.2 6.62858 22.4762C6.62858 25.4476 7.69525 28.1905 9.6762 30.4L8 32.0762L6.62858 30.7048L0.609515 36.7238C0.228562 37.1048 0 37.6381 0 38.2476C0 38.781 0.228562 39.3143 0.609515 39.7714L1.37142 40.5333C1.75237 40.9143 2.28571 41.1429 2.89523 41.1429C3.42856 41.1429 3.9619 40.9143 4.41904 40.5333L10.4381 34.5143L9.06664 33.1429L10.7428 31.4667L11.6571 32.1524V48H46.8571V4.64762L42.1333 0ZM3.27618 39.5429C3.04761 39.7714 2.66668 39.7714 2.4381 39.5429L1.6762 38.781C1.52382 38.6286 1.52381 38.4762 1.52381 38.3238C1.52381 38.1715 1.59997 38.0191 1.67614 37.8668L1.6762 37.8667L6.62858 32.9143L8.22856 34.5143L3.27618 39.5429ZM41.9809 2.05715L44.9524 5.02858H41.9809V2.05715ZM8.15239 22.4762C8.15239 19.6571 9.21906 16.9905 11.2 15.0095C13.2572 12.9524 15.9238 11.9619 18.6667 11.9619C21.3333 11.9619 24.0762 12.9524 26.1333 15.0095C30.2476 19.1238 30.2476 25.7524 26.1333 29.8667C24.1524 31.8476 21.4857 32.9143 18.6667 32.9143C15.8476 32.9143 13.181 31.8476 11.2 29.8667C9.21906 27.9619 8.15239 25.2952 8.15239 22.4762ZM13.1048 46.4762V33.219C14.781 34.1333 16.6857 34.5905 18.6667 34.5905C21.8667 34.5905 24.9143 33.3714 27.2 31.0857C31.9238 26.3619 31.9238 18.7429 27.2 14.0952C23.3905 10.2857 17.6762 9.60001 13.1048 11.9619V1.52381H40.4571V6.47619H45.2571V46.4762H13.1048ZM42.5905 15.8477H32.6857V17.3715H42.5905V15.8477ZM29.6381 11.5809H34.2095V13.1047H29.6381V11.5809ZM42.5905 24.2286H33.6762V25.7524H42.5905V24.2286ZM33.6762 20.0381H42.5905V21.5619H33.6762V20.0381ZM42.4381 32.6858H29.1809V34.2096H42.4381V32.6858ZM31.9238 28.4953H42.5905V30.0192H31.9238V28.4953ZM15.8476 42.5906H21.5619V36.8763H15.8476V42.5906ZM17.2952 38.4001H20.0381V41.1429H17.2952V38.4001ZM24.2286 41.1429H42.4381V42.6667H24.2286V41.1429ZM42.5143 36.8763H24.2286V38.4001H42.5143V36.8763ZM17.8285 24.0001L22.4762 19.3525L23.5428 20.4191L17.8285 26.1334L13.9428 22.1715L15.0095 21.1049L17.8285 24.0001Z"\n }\n) }), AX = () => /* @__PURE__ */ c("svg", { viewBox: "0 0 48 48", fill: "none", xmlns: "http://www.w3.org/2000/svg", children: /* @__PURE__ */ c(\n "path",\n {\n fill: "currentColor",\n fillRule: "evenodd",\n clipRule: "evenodd",\n d: "M41.0827 17.5413C41.0827 7.85323 33.2294 0 23.5413 0C13.8532 0 6 7.85323 6 17.5413C6 26.3487 12.4588 33.6147 20.8991 34.8624V39.1193H19.3579V48.0001H20.6789V40.4404H20.8991H26.1835H26.4037V48.0001H27.7249V39.1193H26.1835V34.8624C34.6239 33.6147 41.0827 26.2753 41.0827 17.5413ZM7.32114 17.5413C7.32114 8.58718 14.5872 1.32111 23.5413 1.32111C32.4955 1.32111 39.7615 8.58718 39.7615 17.5413C39.7615 26.4955 32.4955 33.7615 23.5413 33.7615C14.5872 33.7615 7.32114 26.4955 7.32114 17.5413ZM24.8625 39.1193H22.2203V35.0092C22.4405 35.0092 22.6606 35.0276 22.8808 35.0459L22.8809 35.0459C23.1011 35.0643 23.3212 35.0826 23.5413 35.0826C23.9817 35.0826 24.4221 35.0826 24.8625 35.0092V39.1193ZM26.9175 11.3761C26.9175 13.2843 25.4496 15.5596 23.5413 15.5596C21.7065 15.5596 20.1652 13.2843 20.1652 11.3761C20.1652 9.54121 21.6331 7.99994 23.5413 7.99994C25.3762 7.99994 26.9175 9.46781 26.9175 11.3761ZM25.6698 11.3761C25.6698 10.2018 24.7156 9.24763 23.5413 9.24763C22.367 9.24763 21.4863 10.2018 21.4129 11.3761C21.4129 12.6238 22.4404 14.3119 23.5413 14.3119C24.6422 14.3119 25.6698 12.6238 25.6698 11.3761ZM28.6056 25.101V22.4588C28.6056 20.3304 26.9175 18.5689 24.7891 18.6423H22.2937C20.1652 18.6423 18.4771 20.3304 18.4771 22.4588V25.101H17.156V22.4588C17.156 19.5964 19.4313 17.3212 22.2937 17.3212H24.7891C27.6515 17.3212 29.9267 19.5964 29.9267 22.4588V25.101H28.6056ZM23.5413 3.88995C31.101 3.88995 37.1927 10.0551 37.1927 17.5414C37.1927 25.0276 31.101 31.1193 23.5413 31.1927C15.9817 31.1927 9.88995 25.0276 9.88995 17.5414C9.88995 9.98171 16.0551 3.88995 23.5413 3.88995ZM23.6147 5.21104C16.789 5.21104 11.2845 10.7157 11.2845 17.5414C11.2845 24.2937 16.789 29.7982 23.6147 29.8716C30.4404 29.8716 35.945 24.3671 35.945 17.5414C35.945 10.7157 30.4404 5.21104 23.6147 5.21104Z"\n }\n) }), uX = () => /* @__PURE__ */ c("svg", { viewBox: "0 0 48 48", fill: "none", xmlns: "http://www.w3.org/2000/svg", children: /* @__PURE__ */ c(\n "path",\n {\n fill: "currentColor",\n fillRule: "evenodd",\n clipRule: "evenodd",\n d: "M47.2577 19.3815H42.9691C42.4742 17.4021 41.7319 15.5876 40.6598 13.8557L43.7114 10.8041C43.9588 10.5567 43.9588 10.0619 43.7114 9.73196L38.268 4.28867C38.0206 4.04125 37.5258 4.04125 37.1959 4.28867L34.1443 7.34021C32.4123 6.26804 30.5154 5.52578 28.6185 5.03094V0.742264C28.6185 0.329892 28.2886 0 27.8763 0H20.1236C19.7113 0 19.3815 0.329892 19.3815 0.742264V5.03094C17.4021 5.52578 15.5876 6.26804 13.8556 7.34021L10.8041 4.28867C10.5567 4.04125 10.0618 4.04125 9.73191 4.28867L4.28862 9.73196C4.12367 9.89691 4.04116 10.0619 4.04116 10.2268C4.04116 10.3918 4.12367 10.6392 4.28862 10.7217L7.34013 13.7732C6.26797 15.5052 5.52576 17.4021 5.03091 19.299H0.742188C0.329817 19.299 0 19.6289 0 20.0412V27.7938C0 28.2062 0.329817 28.5361 0.742188 28.5361H5.03091C5.52576 30.5155 6.26797 32.3299 7.34013 34.0619L4.28862 37.1134C4.0412 37.3609 4.0412 37.8557 4.28862 38.1856L9.73191 43.6289C9.97933 43.8763 10.4742 43.8763 10.8041 43.6289L13.8556 40.5774C15.5876 41.6495 17.4846 42.3918 19.3815 42.8866V47.1753C19.3815 47.5877 19.7113 47.9175 20.1236 47.9175H27.8763C28.2886 47.9175 28.6185 47.5877 28.6185 47.1753V42.8866C30.5979 42.3918 32.4123 41.6495 34.1443 40.5774L37.1959 43.6289C37.4433 43.8763 37.9381 43.8763 38.268 43.6289L43.7114 38.1856C43.9588 37.9382 43.9588 37.4433 43.7114 37.1134L40.6598 34.0619C41.7319 32.3299 42.4742 30.433 42.9691 28.5361H47.2577C47.6701 28.5361 48 28.2062 48 27.7938V20.0412C48 19.7113 47.6701 19.3815 47.2577 19.3815ZM46.5154 27.1341H42.3093C41.9794 27.1341 41.6494 27.3814 41.567 27.7113C41.0721 29.8557 40.2474 31.9176 39.0103 33.8145C38.8453 34.1444 38.8453 34.4742 39.0927 34.7217L42.0619 37.6908L37.6083 42.1443L34.6392 39.1753C34.3918 38.9279 33.9793 38.9279 33.7319 39.0928C31.835 40.33 29.7732 41.1547 27.6289 41.6495C27.299 41.732 27.0515 41.9794 27.0515 42.3918V46.598H20.7835V42.3918C20.7835 42.0619 20.5361 41.732 20.2062 41.6495C18.0619 41.1547 16 40.33 14.1031 39.0928C13.7732 38.9279 13.4433 38.9279 13.1959 39.1753L10.2267 42.1443L5.7732 37.6908L8.74226 34.7217C8.98968 34.4742 8.98966 34.0619 8.82471 33.8145C7.58759 31.9176 6.76287 29.8557 6.26803 27.7113C6.18555 27.3814 5.93811 27.1341 5.52574 27.1341H1.31957V20.866H5.52574C5.85563 20.866 6.18555 20.6186 6.26803 20.2887C6.76287 18.1443 7.58759 16.0825 8.82471 14.1856C8.98966 13.8557 8.98968 13.5258 8.74226 13.2783L5.7732 10.3093L10.2267 5.85568L13.1959 8.82476C13.4433 9.07218 13.8557 9.07216 14.1031 8.90721C16 7.6701 18.0619 6.84538 20.2062 6.35053C20.5361 6.26806 20.7835 6.02061 20.7835 5.60824V1.40207H27.0515V5.60824C27.0515 5.93814 27.299 6.26806 27.6289 6.35053C29.7732 6.84538 31.835 7.6701 33.7319 8.90721C34.0618 9.07216 34.3918 9.07218 34.6392 8.82476L37.6083 5.85568L42.0619 10.3093L39.0927 13.2783C38.8453 13.5258 38.8453 13.9382 39.0103 14.1856C40.2474 16.0825 41.0721 18.1443 41.567 20.2887C41.6494 20.6186 41.8969 20.866 42.3093 20.866H46.5154V27.1341ZM23.5052 12.6186C17.2371 12.6186 12.1237 17.732 12.1237 24C12.1237 30.2681 17.2371 35.3815 23.5052 35.3815C29.7732 35.3815 34.8866 30.2681 34.8866 24C34.8866 17.732 29.7732 12.6186 23.5052 12.6186ZM23.5052 33.9795C17.9794 33.9795 13.5257 29.5258 13.5257 24C13.5257 18.4743 17.9794 14.0207 23.5052 14.0207C29.031 14.0207 33.4845 18.4743 33.4845 24C33.4845 29.5258 28.9485 33.9795 23.5052 33.9795ZM29.0309 23.3403H31.0928V24.8248H29.0309V23.3403ZM17.8969 23.3403H15.835V24.8248H17.8969V23.3403ZM23.0543 25.3802C23.0328 25.6271 23.0102 25.8858 23.0102 26.1445C23.0102 26.6393 22.9278 27.1342 22.8453 27.5465H27.0515V29.1135H20.7835C21.1134 27.629 21.2783 26.1444 21.2783 24.8248H19.8763V23.3403H21.2783V22.3506C21.2783 21.6083 21.3608 20.9486 21.5258 20.4537C21.6907 19.9589 21.9382 19.629 22.2681 19.2991C22.5155 18.9692 22.9278 18.7217 23.3402 18.6393C23.7525 18.5568 24.2474 18.4744 24.7423 18.4744H24.7426C25.1549 18.4744 25.567 18.4744 25.8968 18.5568C26.2267 18.6393 26.5567 18.7218 26.8866 18.8867L26.3918 20.3713L26.3917 20.3712C25.8969 20.2063 25.402 20.0413 24.8247 20.0413C24.4948 20.0413 24.3299 20.0414 24.0825 20.1238C23.835 20.2063 23.6701 20.2888 23.5052 20.4537C23.3402 20.6187 23.2577 20.8661 23.1753 21.1135C23.0928 21.3609 23.0928 21.7731 23.0928 22.1854V22.1857V23.2579H25.8144V24.7424H23.0928C23.0928 24.9392 23.074 25.1548 23.0543 25.3802Z"\n }\n) }), zX = () => /* @__PURE__ */ c("svg", { viewBox: "0 0 48 48", fill: "none", xmlns: "http://www.w3.org/2000/svg", children: /* @__PURE__ */ c(\n "path",\n {\n fill: "currentColor",\n fillRule: "evenodd",\n clipRule: "evenodd",\n d: "M36.8021 11.5557C36.173 11.5557 35.5439 11.6186 34.8519 11.7444C33.7824 6.64876 29.3788 3 24.0944 3C18.8729 3 14.3434 6.77458 13.3368 11.8703C12.519 11.6815 11.7641 11.5557 11.0092 11.5557C4.90695 11.5557 0 16.5256 0 22.5649C0 27.9751 3.64875 32.6304 8.36697 33.2595H9.18478V32.0013H8.42986C4.40365 31.498 1.25819 27.346 1.25819 22.5649C1.25819 17.1547 5.66185 12.751 11.0721 12.751C11.8899 12.751 12.7706 12.8768 13.7143 13.1913L14.4063 13.3801L14.5321 12.6881C15.2241 7.84404 19.3761 4.25819 24.1573 4.25819C29.0013 4.25819 33.0904 7.78113 33.7825 12.6252L33.9082 13.3172L34.6003 13.1284C35.4181 12.9397 36.173 12.8139 36.9279 12.8139C42.3382 12.8139 46.7418 17.2176 46.7418 22.6278C46.7418 27.4089 43.5963 31.498 39.5072 32.0642H38.7523V33.3224H39.633C44.4142 32.6304 48 28.038 48 22.6278C47.8742 16.5256 42.9043 11.5557 36.8021 11.5557ZM33.0275 27.4719L34.6003 25.3329L31.2031 21.9358L29.0642 23.5086C28.3093 23.0682 27.4915 22.6907 26.6107 22.502L26.2333 19.8598H21.4522L21.0747 22.502C20.194 22.7536 19.3761 23.0682 18.6212 23.5086L16.4823 21.9358L13.0852 25.3329L14.6579 27.4719C14.2176 28.2268 13.8401 29.0446 13.6514 29.9253L11.0092 30.3028V35.0839L13.6514 35.4614C13.903 36.3421 14.2176 37.1599 14.6579 37.9148L13.0852 40.0538L16.4823 43.4509L18.6212 41.8782C19.3761 42.3185 20.194 42.696 21.0747 42.8847L21.4522 45.5269H26.2333L26.6107 42.8847C27.4915 42.6331 28.3093 42.3185 29.0642 41.8782L31.2031 43.4509L34.6003 40.0538L33.0275 37.9148C33.4679 37.1599 33.8453 36.3421 34.0341 35.4614L36.6763 35.0839V30.3028L34.0341 29.9253C33.8453 29.0446 33.4679 28.2268 33.0275 27.4719ZM35.4181 34.0145L33.0275 34.329L32.9017 34.7694C32.6501 35.7759 32.2726 36.7196 31.7064 37.6632L31.4548 38.0407L32.9017 39.9909L31.0773 41.8152L29.1271 40.3683L28.7497 40.62C27.869 41.1861 26.9253 41.5636 25.8558 41.8152L25.4154 41.9411L25.1009 44.3316H22.4587L22.1442 41.9411L21.7038 41.8152C20.6973 41.5636 19.7536 41.1861 18.8099 40.62L18.4325 40.3683L16.4823 41.8152L14.6579 39.9909L16.1048 38.0407L15.8532 37.6632C15.287 36.7825 14.9096 35.8388 14.6579 34.7694L14.5321 34.329L12.1415 34.0145V31.3723L14.5321 31.0577L14.6579 30.6173C14.9096 29.6108 15.287 28.6671 15.8532 27.7235L16.1048 27.346L14.6579 25.3958L16.4823 23.5715L18.4325 25.0184L18.8099 24.7667C19.6907 24.2006 20.6343 23.8231 21.7038 23.5715L22.1442 23.4456L22.4587 21.0551H25.1009L25.4154 23.4456L25.8558 23.5715C26.8624 23.8231 27.806 24.2006 28.7497 24.7667L29.1271 25.0184L31.0773 23.5715L32.9017 25.3958L31.4548 27.346L31.7064 27.7235C32.2726 28.6042 32.6501 29.5479 32.9017 30.6173L33.0275 31.0577L35.4181 31.3723V34.0145ZM17.8034 32.6303C17.8034 29.2961 20.5085 26.5281 23.9056 26.5281C27.3028 26.5281 30.0079 29.2961 30.0079 32.6303C30.0079 35.9646 27.3028 38.7326 23.9056 38.7326C20.5714 38.7326 17.8034 36.0275 17.8034 32.6303ZM18.9987 32.6303C18.9987 35.3355 21.2005 37.5373 23.9056 37.5373C26.6108 37.5373 28.8126 35.3984 28.8126 32.6303C28.8126 29.9252 26.6108 27.7234 23.9056 27.7234C21.2005 27.7234 18.9987 29.9252 18.9987 32.6303Z"\n }\n) }), hX = () => /* @__PURE__ */ c("svg", { viewBox: "0 0 48 48", fill: "none", xmlns: "http://www.w3.org/2000/svg", children: /* @__PURE__ */ c(\n "path",\n {\n fill: "currentColor",\n fillRule: "evenodd",\n clipRule: "evenodd",\n d: "M27.6932 4.20716C27.6932 6.62947 25.8446 9.498 23.486 9.498C21.1912 9.498 19.2789 6.56573 19.2789 4.20716C19.2789 1.91234 21.1912 0 23.486 0C25.7809 0 27.6932 1.91234 27.6932 4.20716ZM26.5458 4.20716C26.5458 2.54979 25.2072 1.14741 23.486 1.14741C21.8287 1.14741 20.4263 2.48605 20.4263 4.20716C20.4263 5.99202 21.8924 8.35059 23.486 8.35059C25.0797 8.35059 26.5458 5.99202 26.5458 4.20716ZM38.2111 25.8804H41.5259C41.8446 25.8804 42.0996 26.1354 42.0996 26.4541V32.4462C42.0996 32.7649 41.8446 33.0199 41.5259 33.0199H38.2111C37.8286 34.486 37.255 35.9521 36.4263 37.2908L38.7848 39.6493C38.9761 39.9043 38.9761 40.2868 38.7848 40.478L34.5777 44.6852C34.3227 44.8764 33.9402 44.8764 33.749 44.6852L31.3904 42.3266C30.0518 43.1553 28.6494 43.729 27.1196 44.1115V47.4262C27.1196 47.745 26.8646 47.9999 26.5458 47.9999H20.5538C20.2351 47.9999 19.9801 47.745 19.9801 47.4262V44.1115C18.5139 43.729 17.0478 43.1553 15.7092 42.3266L13.3506 44.6852C13.0956 44.8764 12.7132 44.8764 12.5219 44.6852L8.31479 40.478C8.12355 40.223 8.12355 39.8406 8.31479 39.6493L10.6733 37.2908C9.84463 35.9521 9.2709 34.5498 8.88843 33.0199H5.57372C5.255 33.0199 5 32.7649 5 32.4462V26.4541C5 26.1354 5.255 25.8804 5.57372 25.8804H8.88843C9.2709 24.4143 9.84463 22.9482 10.6733 21.6095L8.31479 19.251C8.1873 19.1872 8.12352 18.996 8.12352 18.8685C8.12352 18.741 8.1873 18.6135 8.31479 18.486L12.5219 14.2788C12.7769 14.0876 13.1593 14.0876 13.3506 14.2788L15.5179 16.4462C15.9641 13.3227 18.6414 10.9641 21.8924 10.9641H25.2072C28.3945 10.9641 31.0717 13.3227 31.5817 16.4462L33.749 14.2788C34.004 14.0876 34.3865 14.0876 34.5777 14.2788L38.7848 18.486C38.9123 18.5498 38.9761 18.741 38.9761 18.8685C38.9761 18.996 38.9123 19.1235 38.7848 19.251L36.4263 21.6095C37.255 22.9482 37.8286 24.3505 38.2111 25.8804ZM28.4582 35.0597C29.9243 33.6573 30.8167 31.6812 30.8167 29.5139C30.8167 28.8127 30.753 28.1115 30.5617 27.4103C30.243 27.6015 29.8606 27.729 29.4781 27.729C29.0956 27.729 28.7769 27.6653 28.4582 27.4741V35.0597ZM25.1434 11.984H21.8287C18.8964 11.984 16.4741 14.4063 16.4741 17.3386V25.498C16.4741 26.0717 16.9203 26.5179 17.494 26.5179C18.0677 26.5179 18.514 26.0717 18.514 25.498V19.251V17.2749H19.6613V19.251V25.498V36.3346C20.6175 36.8446 21.7649 37.1633 22.9123 37.1633V25.498H24.0598V37.0995C25.2072 36.9083 26.3546 36.5258 27.3107 35.8884V25.498V19.251V17.2749H28.4582V19.251V25.498C28.4582 26.0717 28.9044 26.5179 29.4781 26.5179C30.0518 26.5179 30.498 26.0717 30.498 25.498V17.3386C30.498 14.4063 28.0757 11.984 25.1434 11.984ZM17.5578 27.6653C16.8566 27.6653 16.2828 27.3466 15.9004 26.9003C15.5817 27.729 15.3904 28.6215 15.4542 29.4501C15.4542 31.9999 16.6654 34.231 18.5777 35.6334V27.4103C18.259 27.5378 17.9403 27.6653 17.5578 27.6653ZM37.7012 31.8725H40.9522H41.0796V27.0916H37.8287C37.5099 27.0916 37.3187 26.9004 37.2549 26.6454C36.8725 24.988 36.235 23.3944 35.2789 21.9282C35.1514 21.737 35.1514 21.4183 35.3426 21.2271L37.6375 18.9322L34.1952 15.49L31.9004 17.7848C31.8367 17.8486 31.7729 17.9123 31.7092 17.9123V25.6255C31.7092 25.9442 31.6454 26.2629 31.5179 26.5179C31.8366 27.5378 32.0279 28.5577 32.0279 29.5776C32.0279 34.486 28.0119 38.4382 23.1673 38.4382C18.259 38.4382 14.3068 34.4223 14.3068 29.5776C14.3068 28.1115 14.6893 26.7091 15.3267 25.4342C15.3267 25.4023 15.3427 25.3864 15.3586 25.3705C15.3745 25.3545 15.3905 25.3386 15.3905 25.3067V17.8486C15.3586 17.8167 15.3267 17.8008 15.2948 17.7848C15.263 17.7689 15.2311 17.753 15.1992 17.7211L12.9044 15.4263L9.46215 18.8685L11.757 21.1633C11.9482 21.3545 11.9482 21.6095 11.8208 21.8645C10.8646 23.3306 10.2271 24.9243 9.8446 26.5816C9.78086 26.8366 9.52594 27.0278 9.27096 27.0278H6.0199V31.8725H9.27096C9.58969 31.8725 9.78086 32.0637 9.8446 32.3187C10.2271 33.976 10.8646 35.5697 11.8208 37.0358C11.9482 37.227 11.9482 37.5458 11.757 37.737L9.46215 40.0318L12.9044 43.474L15.1992 41.1792C15.3904 40.988 15.6454 40.988 15.9004 41.1155C17.3665 42.0717 18.9602 42.7091 20.6175 43.0916C20.8725 43.1553 21.0638 43.4103 21.0638 43.6653V46.9163H25.9084V43.6653C25.9084 43.3466 26.0996 43.1553 26.3546 43.0916C28.0119 42.7091 29.6056 42.0717 31.0717 41.1155C31.2629 40.988 31.5817 40.988 31.7729 41.1792L34.0677 43.474L37.5099 40.0318L35.2151 37.737C35.0239 37.5458 35.0239 37.2908 35.1514 37.0358C36.1076 35.5697 36.745 33.976 37.1275 32.3187C37.1912 32.0637 37.4462 31.8725 37.7012 31.8725Z"\n }\n) }), OX = () => /* @__PURE__ */ c("svg", { viewBox: "0 0 48 48", fill: "none", xmlns: "http://www.w3.org/2000/svg", children: /* @__PURE__ */ c(\n "path",\n {\n fill: "currentColor",\n fillRule: "evenodd",\n clipRule: "evenodd",\n d: "M10.0708 22.8672V17.2743H19.4159V15.8584H7.59291V12.6726H20.3363V11.2566H5.53982L3.41593 7.22124V1.41593H6.46018V5.80531H13.3274V1.41593H17.646V5.80531H24.1593V1.41593H27.9115V0H22.7433V4.38939H18.9911V0H11.9115V4.38939H7.8761V0H2V7.57522L4.69027 12.6726H6.17698V17.2035H8.65486V22.7965C8.65486 27.5398 7.02654 34.3363 6.53097 36.2478H4.26548V41.2743H2V47.7168H18.4956V46.3009H3.41593V42.6194H18.7787V41.2035H5.68141V37.5221H20.761V36.1062H8.01769C8.04335 35.9962 8.07185 35.8749 8.10283 35.743C8.67035 33.327 10.0708 27.365 10.0708 22.8672ZM43.9115 46.4425C43.8407 43.8231 43.2035 41.1328 42.0708 38.7257L40.7256 35.8939L41.7876 34.4779C43.1327 32.6372 43.4867 30.3009 42.6371 28.2479C41.5044 25.416 39.3805 21.593 36.2655 16.9912C37.469 16.9912 39.0265 17.2744 40.2301 18.4071C41.0796 19.1859 42.354 19.2567 43.2035 18.478L44.9734 16.8496V14.0177L36.8318 3.96467H34.7787V0.0708655H33.5752L29.0442 3.3275C26.9911 4.60184 25.3628 6.37176 24.3717 8.35405C22.3186 12.3187 20.0531 19.6815 20.9026 31.9293V32.1417L23.5929 36.0355L22.2478 39.2921C21.2566 41.6992 20.6902 44.3186 20.6902 46.9381V48H21.3982H43.9115H46.1062V46.5841H43.9115V46.4425ZM22.2478 31.5045C21.469 19.6815 23.6637 12.6726 25.5752 8.84962C26.4956 7.07971 27.9115 5.52219 29.823 4.31865L33.3628 1.76998V5.23902H36.1239L43.5575 14.3717V16.0709L42.2124 17.2744C41.9292 17.5576 41.4336 17.4868 41.1504 17.2036C39.9469 16.0708 38.177 15.4337 36.1239 15.4337H36.0531C35.6991 15.4337 35.2743 15.2921 35.0619 15.0089C34.7787 14.7257 34.6371 14.3717 34.6371 14.0177H33.2212C33.2212 14.6549 33.4336 15.2213 33.7876 15.7169C38.4601 22.4425 40.4425 26.4779 41.292 28.6018C41.9292 30.2302 41.646 32.0708 40.584 33.4868L39.5221 34.9735L24.6549 34.9027L22.2478 31.5045ZM23.5221 39.6461C22.6111 41.8186 22.1856 44.0605 22.1084 46.3717H42.4955C42.4247 43.9646 41.8584 41.4868 40.7964 39.2921L39.4513 36.4602L24.8672 36.3894L23.5221 39.6461ZM36.2655 8.70799C36.2655 9.27436 35.7699 9.76994 35.2035 9.76994C34.6371 9.76994 34.1416 9.27436 34.1416 8.70799C34.1416 8.14162 34.6371 7.64605 35.2035 7.64605C35.7699 7.64605 36.2655 8.14162 36.2655 8.70799Z"\n }\n) }), fX = () => /* @__PURE__ */ c("svg", { viewBox: "0 0 48 48", fill: "none", xmlns: "http://www.w3.org/2000/svg", children: /* @__PURE__ */ c(\n "path",\n {\n fill: "currentColor",\n fillRule: "evenodd",\n clipRule: "evenodd",\n d: "M35.2094 46.7516C35.9584 46.7516 36.5826 46.1274 36.5826 45.3784H36.5201V37.8257H37.7685V45.3784C37.7685 46.814 36.5825 48 35.1469 48H6.62159C5.18596 48 4 46.814 4 45.3784V6.11703C4 4.6814 5.18596 3.49545 6.62159 3.49545H17.7321V1.74772H20.3537V0H21.6021V1.74772H24.2236V3.49545H35.2094C36.645 3.49545 37.8309 4.6814 37.8309 6.11703V13.857H36.5826V6.11703C36.5826 5.36801 35.9584 4.74382 35.2094 4.74382H24.2236V10.4239H25.3472V11.6723H24.2236H17.7945H16.671V10.4239H17.7945V4.74382H6.684C5.93497 4.74382 5.31078 5.36801 5.31078 6.11703V45.3784C5.31078 46.1274 5.93497 46.7516 6.684 46.7516H35.2094ZM22.9753 2.9961H19.0429V10.4239H22.9753V2.9961ZM7.55786 6.92847H16.7334V8.17684H8.80624V43.3186H33.1495V37.9506H34.3355V44.5045H7.55786V6.92847ZM42.4499 18.788C38.5799 14.918 32.3381 14.918 28.5305 18.788C24.6606 22.6579 24.6606 28.8998 28.5305 32.7073C30.4655 34.6423 32.9623 35.5786 35.5214 35.5786C38.0182 35.5786 40.5773 34.6423 42.5123 32.7073C46.3199 28.8374 46.3198 22.5955 42.4499 18.788ZM41.6385 31.8335C38.2678 35.2041 32.775 35.2041 29.4668 31.8335C26.0962 28.4629 26.0962 23.0324 29.4668 19.6618C32.8374 16.2912 38.2678 16.2912 41.6385 19.6618C44.9466 23.0324 44.9466 28.4629 41.6385 31.8335ZM34.8349 26.2158L33.5865 24.9675L32.7126 25.8413L34.8349 27.9635L38.1431 24.6554L37.2692 23.7815L34.8349 26.2158ZM34.3354 13.8569V6.92847H25.3472V8.17684H33.1495V13.8569H34.3354ZM27.8439 15.792H19.0428V17.0404H27.8439V15.792ZM18.5436 22.9077H23.9116V24.1561H18.5436V22.9077ZM24.1613 30.0857H18.5436V31.3341H24.1613V30.0857ZM18.5436 37.2014H29.2796V38.4498H18.5436V37.2014ZM16.1092 13.9194H11.1781V18.8505H16.1092V13.9194ZM14.8608 17.6021H12.4265V15.1678H14.8608V17.6021ZM11.1781 21.0977H16.1092V26.0287H11.1781V21.0977ZM12.4265 24.7804H14.8608V22.346H12.4265V24.7804ZM16.1092 28.2131H11.1781V33.1442H16.1092V28.2131ZM14.8608 31.8958H12.4265V29.4615H14.8608V31.8958ZM16.1092 40.3224H11.1781V35.3914H16.1092V40.3224ZM14.8608 36.5773H12.4265V39.0116H14.8608V36.5773Z"\n }\n) }), gX = () => /* @__PURE__ */ c("svg", { viewBox: "0 0 48 48", fill: "none", xmlns: "http://www.w3.org/2000/svg", children: /* @__PURE__ */ c(\n "path",\n {\n fill: "currentColor",\n fillRule: "evenodd",\n clipRule: "evenodd",\n d: "M5.33922 36.6519V41.3039C5.33922 42.0792 5.97357 42.7136 6.81938 42.7136H23.2423V44.1233H6.81938C5.26872 44.1233 4 42.8546 4 41.3039V2.81938C4 1.26872 5.26872 0 6.81938 0H26.837C28.3876 0 29.6564 1.26872 29.6564 2.81938V11.207H28.2467V8.95154H5.33922V35.2422H18.7313V36.6519H5.33922ZM26.837 1.40969H6.81938C5.97357 1.40969 5.33922 2.04405 5.33922 2.81938V7.47136H28.2467V2.81938C28.2467 2.04405 27.6123 1.40969 26.837 1.40969ZM41.4273 28.0529C42.7665 28.1938 43.8237 29.3921 43.8237 30.8722C43.8237 30.8871 43.8284 30.9577 43.8365 31.0778L43.8365 31.0786C43.9045 32.0978 44.2094 36.6656 43.8942 40.9515C43.6828 42.2907 43.1894 43.8414 42.7665 44.8282C42.555 45.3921 42.4846 45.8854 42.4846 46.4493V48H41.0749V46.4493C41.0749 45.674 41.1453 45.0396 41.4273 44.3348C41.7092 43.5594 42.2026 42.0793 42.414 40.7401C43.0735 36.4538 42.7458 31.6741 42.7008 31.0181V31.018L42.6965 30.9539L42.696 30.9427C42.696 30.1674 42.1321 29.533 41.4977 29.4625C41.1453 29.4625 40.7224 29.533 40.4405 29.815C40.0881 30.0264 39.9471 30.3789 39.9471 30.8018V31.9295H38.5374V30.3084V28.1938C38.5374 27.8414 38.3964 27.489 38.1145 27.2071C37.8326 26.9956 37.5506 26.8546 37.1277 26.8546C36.3524 26.9251 35.7885 27.5595 35.7885 28.3348V31.0837H34.3788V28.3348V28.2643V27.2071C34.3788 26.8546 34.2378 26.5022 33.9559 26.2203C33.674 25.9383 33.3216 25.7974 32.9691 25.7974C32.2643 25.7974 31.6299 26.3612 31.6299 27.1366V30.5198H30.2202V27.1366V17.0573C30.2202 16.3525 29.6564 15.7181 29.022 15.7181C28.6696 15.7181 28.3877 15.859 28.1762 16.0705C27.9648 16.3524 27.8238 16.7049 27.8238 17.0573L27.7533 34.326L27.1189 34.3965C25.444 34.6645 24.788 33.3403 24.2429 32.2401C24.2145 32.1829 24.1865 32.1263 24.1586 32.0705C24.1237 32.0007 24.0888 31.9298 24.0536 31.8583L24.0535 31.8582L24.0535 31.858C23.8046 31.3526 23.5423 30.8198 23.1718 30.4493C22.326 29.533 21.7621 29.4626 20.7753 30.0969C20.9163 32.3524 22.467 36.7929 24.652 39.1894C27.6828 42.4317 27.8943 43.9824 27.8943 45.392V47.9295H26.4846V45.392C26.4846 44.5462 26.4846 43.207 23.5947 40.1057C20.9868 37.3568 19.3657 32.141 19.3657 29.7445V29.3921L19.7885 29.0397C21.4097 27.9119 22.7489 28.0529 24.1586 29.4625C24.6056 29.9654 24.9197 30.5568 25.2062 31.0964C25.2812 31.2375 25.3542 31.3751 25.4273 31.5066L25.5054 31.6502L25.5458 31.7245C25.8923 32.3628 26.0893 32.7256 26.3436 32.9163L26.4141 17.0573C26.4141 16.3525 26.6256 15.6476 27.1189 15.1542C27.6123 14.5903 28.2467 14.3084 28.9515 14.3084C30.3612 14.3084 31.4889 15.5066 31.4889 17.0573V24.7401C31.8414 24.5286 32.3348 24.3877 32.8282 24.3877C33.6035 24.3877 34.3083 24.7401 34.8017 25.2335C35.0836 25.4449 35.2246 25.7268 35.3656 26.0088L35.3656 26.0088C35.7885 25.6564 36.3524 25.4449 36.9163 25.4449C37.6211 25.4449 38.3259 25.7269 38.8898 26.2203C39.4537 26.7137 39.7356 27.4185 39.7356 28.1938V28.4053C40.229 28.1233 40.8634 27.9824 41.4273 28.0529ZM18.6608 38.978H14.9251V40.3876H18.6608V38.978ZM14.9251 3.73571H18.6608V5.14539H14.9251V3.73571ZM24.5815 14.8017H17.1806L19.3657 12.6167L18.3789 11.6299L14.5022 15.5066L18.3789 19.3127L19.3657 18.326L17.1806 16.2114H24.5815V14.8017ZM39.7356 19.3127L38.7489 18.326L40.9339 16.2114H33.533V14.8017H40.9339L38.8194 12.6167L39.7356 11.6299L43.6123 15.4361L39.7356 19.3127Z"\n }\n) }), CX = () => /* @__PURE__ */ c("svg", { viewBox: "0 0 48 48", fill: "none", xmlns: "http://www.w3.org/2000/svg", children: /* @__PURE__ */ c(\n "path",\n {\n fill: "currentColor",\n fillRule: "evenodd",\n clipRule: "evenodd",\n d: "M47.0191 20.376L47.9346 21.2915L46.4305 22.9918L48 24.5613L47.0845 25.4768L45.2534 23.6458H42.049C41.9837 27.1117 41.0027 30.5777 39.237 33.5858C37.9291 35.8747 36.1635 37.8365 34.1362 39.4714L37.4714 45.4877L36.3597 46.1417L33.0899 40.3215C31.782 41.3025 30.2779 42.0872 28.7738 42.6757C26.2888 43.5913 23.7384 44.1144 21.0572 44.1144C16.6104 44.1144 12.4251 42.6758 9.02453 40.3215L5.75478 46.2071L4.64305 45.5531L7.97821 39.5368C3.13897 35.6785 0 29.7275 0 23.0572C0 11.4169 9.4169 2 21.0572 2C31.455 2 40.218 9.45506 41.8528 19.7221L40.5449 19.9183C39.0409 10.2398 30.8011 3.24252 21.0572 3.24252C10.2016 3.24252 1.3079 12.0709 1.3079 22.9918C1.3079 33.8474 10.1362 42.7412 21.0572 42.7412C23.6076 42.7412 26.0273 42.2834 28.3161 41.3678C32.436 39.733 35.9673 36.7902 38.1907 32.9319C39.8256 30.1199 40.7411 26.9155 40.8719 23.6458H38.0599C38.0272 23.9728 37.9945 24.2834 37.9619 24.594C37.9292 24.9046 37.8965 25.2153 37.8638 25.5422C36.8828 31.7548 32.6322 36.921 26.7466 39.0136C24.9155 39.6676 23.0191 39.9946 21.0572 39.9946C11.6403 39.9946 4.0545 32.3433 4.0545 22.9918C4.0545 13.575 11.7057 5.98912 21.0572 5.98912C29.1662 5.98912 36.1635 11.6785 37.733 19.5913L36.4905 19.8529C35.0518 12.5286 28.5777 7.23161 21.1226 7.23161C12.4905 7.23161 5.4278 14.2943 5.4278 22.9264C5.4278 31.5586 12.4905 38.6212 21.1226 38.6212C22.8883 38.6212 24.654 38.2943 26.3542 37.7057C31.8474 35.7439 35.7711 31.0354 36.6212 25.2807C36.6272 25.2267 36.6332 25.1733 36.6392 25.1203C36.6981 24.5956 36.752 24.1149 36.752 23.5804H33.9401C33.7439 27.8964 31.455 31.7548 27.7929 33.9782C25.7657 35.2207 23.4114 35.8747 21.0572 35.8747C13.9292 35.8747 8.17438 30.1199 8.17438 22.9918C8.17438 15.8638 13.9292 10.109 21.0572 10.109C26.812 10.109 31.9782 13.9673 33.4823 19.5913L32.2398 19.9183C30.8665 14.8828 26.2888 11.3515 21.0572 11.3515C14.7139 11.3515 9.48229 16.5177 9.48229 22.9264C9.48229 29.2697 14.6485 34.5014 21.0572 34.5014C23.1499 34.5014 25.2425 33.9128 27.0736 32.8011C30.3433 30.7739 32.3706 27.3079 32.5668 23.515H29.7548C29.4278 28.0926 25.6349 31.6894 20.9918 31.6894C16.0872 31.6894 12.1635 27.7003 12.1635 22.861C12.1635 17.9564 16.1526 14.0327 20.9918 14.0327C24.5232 14.0327 27.7275 16.1254 29.1008 19.3951L27.9237 19.9183C26.6812 17.1063 24 15.3406 20.9918 15.3406C16.8719 15.3406 13.4714 18.7412 13.4714 22.861C13.4714 26.9809 16.8719 30.3815 20.9918 30.3815C24.9809 30.3815 28.1853 27.3733 28.5123 23.515H25.7003C25.4387 25.8038 23.4114 27.5695 21.0572 27.5695C18.4414 27.5695 16.3488 25.4768 16.3488 22.861C16.3488 20.2452 18.4414 18.1526 21.0572 18.1526C22.1689 18.1526 23.2153 18.545 24.0654 19.2643L23.2153 20.2452C22.5613 19.7221 21.7766 19.4605 20.9918 19.4605C19.0954 19.4605 17.5913 20.9646 17.5913 22.861C17.5913 24.7575 19.0954 26.2616 20.9918 26.2616C22.8883 26.2616 24.3924 24.7575 24.3924 22.861V22.2071H45.188L47.0191 20.376ZM20.9918 23.7766C20.4687 23.7766 20.0763 23.3843 20.0763 22.8611C20.0763 22.4033 20.4687 21.9456 20.9918 21.9456C21.515 21.9456 21.9074 22.3379 21.9074 22.8611C21.9074 23.3843 21.515 23.7766 20.9918 23.7766Z"\n }\n) }), mX = () => /* @__PURE__ */ c("svg", { viewBox: "0 0 48 48", fill: "none", xmlns: "http://www.w3.org/2000/svg", children: /* @__PURE__ */ c(\n "path",\n {\n fill: "currentColor",\n fillRule: "evenodd",\n clipRule: "evenodd",\n d: "M47.0603 21.3614L48 22.3012L46.1205 23.8193L47.7109 25.4097L46.7711 26.3494L44.9639 24.5422H41.7831C41.6386 28.0844 40.6988 31.482 38.9638 34.4458C36.5783 38.494 32.8916 41.6025 28.5543 43.3374C26.0964 44.2772 23.5662 44.7832 20.8915 44.7832C9.39753 44.7832 0 35.3856 0 23.8916C0 12.3976 9.39753 3 20.8915 3C31.2289 3 39.9036 10.3735 41.494 20.5663L40.2651 20.7831C38.747 11.241 30.6506 4.3012 20.9639 4.3012C10.1928 4.3012 1.37343 13.1205 1.37343 23.8916C1.37343 34.6627 10.1928 43.482 20.9639 43.482C23.4217 43.482 25.8072 42.9759 28.1205 42.1085C32.1687 40.5181 35.6385 37.482 37.8795 33.7229C39.5422 30.9037 40.482 27.7229 40.5543 24.4699H37.8072C37.8072 25.0611 37.7476 25.5925 37.6824 26.1728C37.6759 26.2311 37.6693 26.29 37.6627 26.3494C36.7229 32.494 32.5301 37.6265 26.6747 39.7229C24.8674 40.3012 22.988 40.6627 21.0362 40.6627C11.7108 40.6627 4.19272 33.1446 4.19272 23.8193C4.19272 14.494 11.7831 6.97591 21.0362 6.97591C28.988 6.97591 35.9277 12.6868 37.5181 20.494L36.2892 20.7109C34.8434 13.4819 28.4097 8.20484 21.0362 8.20484C12.4337 8.20484 5.49397 15.1446 5.49397 23.747C5.49397 32.3494 12.4337 39.2892 21.0362 39.2892C22.8434 39.2892 24.5783 39 26.2409 38.4217C31.6626 36.5422 35.5662 31.7711 36.4337 26.1326C36.506 25.6265 36.5784 25.0482 36.5784 24.4699H33.8313C33.6867 28.6627 31.4458 32.494 27.759 34.735C25.7349 35.9639 23.494 36.6145 21.1084 36.6145C14.0241 36.6145 8.31327 30.8314 8.31327 23.8193C8.31327 16.735 14.0964 11.0241 21.1084 11.0241C26.8193 11.0241 31.8795 14.8554 33.3976 20.4217L32.1687 20.7831C30.8675 15.7952 26.241 12.3253 21.1084 12.3253C14.747 12.3253 9.61442 17.4578 9.61442 23.8193C9.61442 30.1808 14.747 35.3133 21.1084 35.3133C23.2771 35.3133 25.3012 34.735 27.1085 33.6506C30.3615 31.6265 32.3856 28.229 32.6024 24.4699H29.8554C29.5663 29.0241 25.8072 32.5663 21.1807 32.5663C16.3373 32.5663 12.4337 28.6627 12.4337 23.8193C12.4337 18.9759 16.3373 15.0723 21.1807 15.0723C24.6506 15.0723 27.8313 17.1687 29.2048 20.3494L28.0482 20.8555C26.8193 18.1808 24.1446 16.3735 21.1807 16.3735C17.0602 16.3735 13.735 19.6988 13.735 23.8193C13.735 27.9398 17.0602 31.2651 21.1807 31.2651C25.0843 31.2651 28.2651 28.3012 28.6265 24.4699H26.2409V23.1687H45.2531L47.0603 21.3614ZM23.6386 27.1446V28.5181V28.5904H18.1446C18.4337 27.2892 18.5783 25.988 18.5783 24.8314H17.3494V23.5301H18.5783V22.6627C18.5783 22.0121 18.6506 21.4337 18.7952 21C18.9398 20.5663 19.1566 20.2771 19.4457 19.988C19.6626 19.6988 20.0241 19.482 20.3855 19.4097C20.747 19.3374 21.1807 19.2651 21.6144 19.2651H21.6147C21.976 19.2651 22.3374 19.2651 22.6265 19.3374C22.9156 19.4096 23.2049 19.482 23.494 19.6265L23.0602 20.9277L23.0599 20.9276C22.6263 20.7831 22.1927 20.6386 21.6868 20.6386C21.3976 20.6386 21.253 20.6386 21.0362 20.7109C20.8193 20.7832 20.6747 20.8554 20.5301 21C20.3856 21.1445 20.3134 21.3611 20.2412 21.5778L20.241 21.5783C20.1687 21.7952 20.1686 22.1567 20.1686 22.5181V23.4579H22.5542V24.6868H20.1686C20.1686 24.8593 20.1522 25.0482 20.135 25.2458C20.1161 25.4622 20.0964 25.689 20.0964 25.9157C20.0964 26.3494 20.0241 26.7831 19.9518 27.1446H23.6386Z"\n }\n) }), LX = () => /* @__PURE__ */ c("svg", { viewBox: "0 0 48 48", fill: "none", xmlns: "http://www.w3.org/2000/svg", children: /* @__PURE__ */ c(\n "path",\n {\n fill: "currentColor",\n fillRule: "evenodd",\n clipRule: "evenodd",\n d: "M29.0653 4.70029C29.0653 7.40653 27 10.6113 24.365 10.6113C21.73 10.6113 19.6647 7.40653 19.6647 4.70029C19.6647 2.1365 21.8012 0 24.365 0C26.9288 0 29.0653 2.1365 29.0653 4.70029ZM27.7833 4.70029C27.7833 2.84866 26.2878 1.2819 24.365 1.2819C22.4421 1.2819 20.8753 2.84866 20.9465 4.70029C20.9465 6.69436 22.5846 9.32937 24.365 9.32937C26.1454 9.32937 27.7833 6.69436 27.7833 4.70029ZM33.4094 19.4421V28.6291C33.4094 29.911 32.3412 30.9792 30.9881 30.9792C30.5608 30.9792 30.2047 30.908 29.8486 30.6943V46.362C29.8486 47.2166 29.1365 47.9287 28.2819 47.9287H24.2938H23.6528H20.3056C19.451 47.9287 18.7388 47.2166 18.7388 46.362V30.7656L18.7388 30.7656C18.3827 30.908 18.0267 31.0504 17.5994 31.0504C16.2463 31.0504 15.178 29.9822 15.178 28.6291V19.4421C15.178 15.454 18.4539 12.178 22.4421 12.178H26.1454C30.1335 12.178 33.4094 15.454 33.4094 19.4421ZM29.9198 21.6498V28.6291C29.9198 29.27 30.4184 29.7685 31.0594 29.7685C31.7003 29.7685 32.1988 29.27 32.1988 28.6291V19.4421C32.1988 16.1661 29.4926 13.4599 26.2166 13.4599H22.5134C19.2374 13.4599 16.5312 16.1661 16.5312 19.4421V28.6291C16.5312 29.27 17.0297 29.7685 17.6706 29.7685C18.3115 29.7685 18.81 29.27 18.81 28.6291V21.5786V19.3709H20.092V21.6498V28.6291V46.362C20.092 46.5044 20.2344 46.6469 20.3769 46.6469H23.724V28.6291H25.0059V46.5756H28.3531C28.4955 46.5756 28.638 46.4332 28.638 46.2908V28.6291V21.5786V19.3709H29.9198V21.6498ZM11.4035 13.9585C13.8249 13.9585 15.7478 10.9674 15.7478 8.54601C15.7478 6.12464 13.8249 4.2018 11.4035 4.2018C8.98214 4.2018 7.05931 6.12464 7.05931 8.54601C7.05931 10.9674 8.98214 13.9585 11.4035 13.9585ZM11.4035 5.41248C13.1127 5.41248 14.4659 6.76559 14.4659 8.47479C14.4659 10.2552 12.9703 12.6054 11.4035 12.6054C9.83674 12.6054 8.34124 10.2552 8.34124 8.47479C8.34124 6.83681 9.69431 5.41248 11.4035 5.41248ZM15.0356 46.5756C15.1781 46.5756 15.2492 46.5044 15.2492 46.362V32.0475H16.5312V46.5044C16.5312 47.359 15.8902 48 15.0356 48H11.4035H10.7626H7.77148C6.91688 48 6.27595 47.359 6.27595 46.5044V32.4035C5.99108 32.546 5.63498 32.6172 5.2789 32.6172C3.997 32.6172 3 31.549 3 30.3383V22.0059C3 18.3027 5.99111 15.3116 9.69438 15.3116H13.0415C13.3264 15.3116 13.6825 15.3116 13.9674 15.3828C14.2522 15.3828 14.4659 15.454 14.6795 15.5252L14.181 16.6647C14.181 16.5935 14.0386 16.5935 13.9674 16.5935H13.8249C13.54 16.5223 13.3264 16.5222 13.0415 16.5222H9.69438C6.70328 16.5222 4.28185 18.9436 4.28185 21.9347V30.2671C4.28185 30.8368 4.70916 31.2641 5.2789 31.2641C5.84863 31.2641 6.27595 30.8368 6.27595 30.2671V23.8576V21.7923H7.55788V23.8576V30.2671V46.362C7.55788 46.5044 7.62904 46.5756 7.77148 46.5756H10.7626V30.2671H12.0445V46.5756H15.0356ZM37.2552 13.9585C39.6765 13.9585 41.5994 10.9674 41.5994 8.54601C41.5994 6.12464 39.6765 4.2018 37.2552 4.2018C34.8338 4.2018 32.911 6.12464 32.911 8.54601C32.911 10.9674 34.905 13.9585 37.2552 13.9585ZM37.2552 5.41248C38.9644 5.41248 40.3175 6.76559 40.3175 8.47479C40.3175 10.2552 38.8219 12.6054 37.2552 12.6054C35.6884 12.6054 34.1928 10.2552 34.1928 8.47479C34.1928 6.83681 35.546 5.41248 37.2552 5.41248ZM35.6171 15.2404H38.9644C42.5964 15.2404 45.5875 18.2315 45.5875 21.9347V30.1959C45.5875 31.4778 44.5193 32.4748 43.3086 32.4748C42.9525 32.4748 42.5964 32.4036 42.3115 32.2611V46.362C42.3115 47.2166 41.6706 47.8576 40.816 47.8576H37.8249H37.184H33.5519C32.6973 47.8576 32.0563 47.2166 32.0563 46.362V32.0475H33.3382V46.362C33.3382 46.5045 33.4095 46.5757 33.5519 46.5757H36.543V30.2671H37.8249V46.5045H40.816C40.9584 46.5045 41.0297 46.4332 41.0297 46.2908V30.1959V23.7864V21.7211H42.3115V23.7864V30.1959C42.3115 30.7656 42.7388 31.1929 43.3086 31.1929C43.8783 31.1929 44.3056 30.7656 44.3056 30.1959V21.8635C44.3056 18.8724 41.8843 16.451 38.8932 16.451H35.5459C35.2611 16.451 35.0474 16.451 34.7626 16.5223H34.6202C34.549 16.5935 34.4777 16.5935 34.4065 16.5935L33.908 15.454C34.1217 15.3828 34.4065 15.3116 34.5489 15.3116C34.9762 15.2404 35.3323 15.2404 35.6171 15.2404Z"\n }\n) }), vX = () => /* @__PURE__ */ c("svg", { viewBox: "0 0 48 48", fill: "none", xmlns: "http://www.w3.org/2000/svg", children: /* @__PURE__ */ c(\n "path",\n {\n fill: "currentColor",\n d: "M47.746 13.6296V12.1058H42.7513V14.4762H41.6508C38.8572 14.4762 37.7566 13.7143 37.3334 13.291C36.6561 12.5291 35.6402 12.1058 34.5397 12.1058H34.455C34.455 11.4285 34.201 10.6666 33.8624 10.0741C33.3545 9.31215 32.5079 7.78836 32.5079 6.09524V4.9947H34.3704V0H32.8466V3.4709H15.0688V0H13.545V4.9947H15.9154V6.09524C15.9154 8.88889 15.1534 9.9894 14.7302 10.4127C14.2222 10.836 13.8836 11.4285 13.7143 12.1058H13.2064C12.1059 12.1058 11.09 12.5291 10.4127 13.291C9.98945 13.7143 8.88894 14.4762 6.09529 14.4762H4.99472V12.1058H0V13.6296H3.47098V31.492H0V33.0158H4.99472V31.1534H6.09529C7.87307 31.1534 9.39681 32 10.1587 32.5079C10.7513 32.9312 11.5132 33.1005 12.2751 33.1005H13.6297V34.3703C13.6297 35.1322 13.8836 35.8095 14.2222 36.4867C14.7302 37.2486 15.5767 38.7724 15.5767 40.5502V41.6507H13.6297V46.6454H15.1534V43.1745H33.1852V46.6454H34.709V41.6507H32.254V40.5502C32.254 37.7566 33.0159 36.656 33.5238 36.2327C34.2858 35.5555 34.709 34.5396 34.709 33.4391V33.1852H35.7249C36.4868 33.1852 37.164 32.9312 37.8413 32.5926C38.6032 32.0846 40.1269 31.2381 41.9047 31.2381H43.0053V33.1005H48V31.5767H44.5291V13.7143H47.746V13.6296ZM33.0158 33.4391C33.0158 34.1164 32.7619 34.709 32.254 35.1322C31.4921 35.8095 30.5609 37.3333 30.5609 40.5502V41.6507H16.9312V40.5502C16.9312 38.4338 15.9154 36.5714 15.3228 35.7248C15.0688 35.3016 14.8995 34.8783 14.8995 34.455V19.2169C14.8995 18.5397 15.4074 18.0317 16 17.9471C16.3386 17.9471 16.6772 18.0317 16.9312 18.2857C17.1852 18.5397 17.3545 18.7936 17.3545 19.2169V27.3439H18.8783V15.2381C18.8783 14.5608 19.3863 14.0529 20.0635 14.0529C20.7408 14.0529 21.2487 14.5608 21.2487 15.2381V27.3439H22.7725V12.2751C22.7725 11.5979 23.2804 11.0899 23.9577 11.0899C24.6349 11.0899 25.1429 11.5979 25.1429 12.2751V27.3439H26.6666V15.2381C26.6666 14.5608 27.1746 14.0529 27.8518 14.0529C28.5291 14.0529 29.037 14.5608 29.037 15.2381V27.3439H30.5609V25.1428C30.5609 24.8042 30.7302 24.4656 30.9842 24.2116C31.2381 23.9576 31.5767 23.873 31.9154 23.873C32.508 23.9577 33.0158 24.4656 33.0158 25.1428V33.4391ZM41.6508 29.7143C39.5344 29.7143 37.6719 30.7301 36.8253 31.3227C36.4021 31.5767 35.9788 31.746 35.5555 31.746H34.5397V25.2275C34.5397 23.7883 33.4391 22.6031 32.0846 22.4338C31.5767 22.3492 31.0688 22.5185 30.6455 22.6878V15.2381C30.6455 13.7143 29.4603 12.5291 27.9365 12.5291C27.5132 12.5291 27.09 12.6137 26.7514 12.7831V12.1905C26.7514 10.6666 25.5661 9.48148 24.0423 9.48148C22.5185 9.48148 21.3334 10.6666 21.3334 12.1905V12.7831C20.9947 12.6137 20.5714 12.5291 20.1482 12.5291C18.6244 12.5291 17.4392 13.7143 17.4392 15.2381V16.7619C17.0159 16.5079 16.5079 16.4233 16 16.5079C14.6455 16.6772 13.545 17.8624 13.545 19.3016V31.746H12.1905C11.7672 31.746 11.3439 31.5767 10.9206 31.3227C9.98943 30.7301 8.21169 29.7143 6.09529 29.7143H4.99472V16.0846H6.09529C9.31222 16.0846 10.836 15.1534 11.5133 14.3915C11.9366 13.9682 12.5292 13.6296 13.2064 13.6296H13.545V15.3227H15.0688V13.2063C15.0688 12.5291 15.3228 11.9365 15.8307 11.5132C17.0159 10.4973 17.5238 8.63492 17.5238 6.09524V4.9947H31.1534V6.09524C31.1534 8.21164 32.1693 10.0741 32.7619 10.9206C33.0159 11.3439 33.1852 11.7672 33.1852 12.1905V21.164H34.709V13.545H34.7937C35.4709 13.545 36.0635 13.7989 36.4868 14.3069C37.1641 15.0688 38.6878 16 41.9047 16H43.0053V29.6296H41.6508V29.7143Z"\n }\n) }), qX = () => /* @__PURE__ */ c("svg", { viewBox: "0 0 48 48", fill: "none", xmlns: "http://www.w3.org/2000/svg", children: /* @__PURE__ */ c(\n "path",\n {\n fill: "currentColor",\n fillRule: "evenodd",\n clipRule: "evenodd",\n d: "M45.184 26.68L47.36 24.76L48 25.72L44.608 28.664H44.16L43.904 28.536L40.576 25.784L41.408 24.824L43.712 26.744V22.008C43.712 21.816 43.584 21.624 43.328 21.56L40.768 21.176C40.128 21.048 39.552 20.6 39.36 19.896C38.976 18.616 38.464 17.4 37.824 16.248C37.504 15.608 37.568 14.904 37.952 14.328L39.488 12.28C39.616 12.088 39.616 11.832 39.424 11.64L36.416 8.632C36.224 8.44 35.968 8.44 35.776 8.568L33.728 10.104C33.152 10.552 32.384 10.552 31.808 10.232C30.656 9.528 29.44 9.016 28.16 8.696C27.456 8.504 27.008 7.992 26.88 7.288L26.496 4.728C26.496 4.536 26.304 4.344 26.048 4.344H21.76C21.568 4.344 21.376 4.472 21.312 4.728L20.928 7.288C20.8 7.928 20.352 8.504 19.648 8.696C18.368 9.08 17.152 9.592 16 10.232C15.36 10.552 14.656 10.488 14.08 10.104L12.032 8.568C11.84 8.44 11.584 8.44 11.392 8.632L8.38399 11.64C8.19199 11.832 8.19201 12.088 8.32001 12.28L9.856 14.328C10.304 14.904 10.304 15.672 9.98399 16.248C9.27999 17.4 8.768 18.616 8.448 19.896L7.232 19.576C7.616 18.168 8.19201 16.824 8.896 15.608C9.024 15.416 9.024 15.224 8.896 15.096L7.36001 13.048C6.84801 12.344 6.912 11.384 7.552 10.744L10.56 7.736C11.2 7.096 12.16 7.032 12.864 7.544L14.912 9.08C15.04 9.144 15.232 9.208 15.424 9.08C16.704 8.312 18.048 7.8 19.392 7.416C19.584 7.352 19.776 7.224 19.776 7.032L20.16 4.472C20.288 3.64 21.056 3 21.888 3H26.176C27.008 3 27.776 3.64 27.904 4.472L28.288 7.032C28.352 7.224 28.48 7.352 28.672 7.416C30.08 7.8 31.424 8.376 32.64 9.08C32.832 9.208 33.024 9.208 33.152 9.08L35.136 7.48C35.84 6.968 36.8 7.032 37.44 7.672L40.448 10.68C41.088 11.32 41.152 12.28 40.64 12.984L39.104 15.032C39.04 15.16 38.976 15.352 39.104 15.544C39.872 16.824 40.384 18.168 40.768 19.512C40.832 19.704 40.96 19.896 41.152 19.896L43.712 20.28C44.544 20.408 45.184 21.176 45.184 22.008V26.68ZM39.104 32.632C38.976 32.824 38.976 33.016 39.104 33.144L40.896 35.256C41.408 35.96 41.344 36.92 40.704 37.56L37.696 40.568C37.056 41.208 36.096 41.272 35.392 40.76L33.344 39.224C33.216 39.16 33.024 39.096 32.832 39.224C31.552 39.928 30.208 40.504 28.864 40.888C28.672 40.952 28.48 41.08 28.48 41.272L28.096 43.832C27.968 44.664 27.2 45.304 26.368 45.304H22.08C21.248 45.304 20.48 44.664 20.352 43.832L19.968 41.272C19.904 41.08 19.776 40.952 19.584 40.888C18.176 40.504 16.832 39.928 15.616 39.224C15.424 39.096 15.232 39.096 15.104 39.224L13.056 40.76C12.352 41.272 11.392 41.208 10.752 40.568L7.74398 37.56C7.10398 36.92 7.03999 35.96 7.55199 35.256L9.08799 33.208C9.15199 33.08 9.21599 32.888 9.08799 32.696C8.31999 31.416 7.80798 30.072 7.42398 28.728C7.35998 28.536 7.232 28.344 7.04 28.344L4.48 27.96C3.648 27.832 3.00799 27.064 3.00799 26.232V21.56L0.831992 23.48L0 22.52L3.39199 19.576H3.84L4.096 19.704L7.42398 22.456L6.59199 23.416L4.28799 21.496V26.232C4.28799 26.424 4.41599 26.616 4.67199 26.68L7.23199 27.064C7.87199 27.192 8.448 27.64 8.64 28.344C9.024 29.624 9.536 30.84 10.176 31.992C10.496 32.632 10.432 33.336 10.048 33.912L8.51199 35.96C8.38399 36.152 8.384 36.408 8.576 36.6L11.584 39.608C11.776 39.8 12.032 39.8 12.224 39.672L14.272 38.136C14.848 37.688 15.552 37.688 16.192 38.008C17.344 38.712 18.56 39.224 19.84 39.544C20.544 39.736 20.992 40.248 21.12 40.952L21.504 43.512C21.504 43.704 21.696 43.896 21.952 43.896H26.24C26.432 43.896 26.624 43.768 26.688 43.512L27.072 40.952C27.2 40.312 27.648 39.736 28.352 39.544C29.632 39.16 30.848 38.648 32 38.008C32.64 37.688 33.344 37.752 33.92 38.136L35.968 39.672C36.16 39.8 36.416 39.8 36.608 39.608L39.616 36.6C39.808 36.408 39.808 36.152 39.68 35.96L38.144 33.912C37.696 33.336 37.696 32.568 38.016 31.992C38.72 30.84 39.232 29.624 39.552 28.344L40.768 28.664C40.384 30.072 39.808 31.416 39.104 32.632ZM24.768 24.696H27.968V23.416H24.768V19.256H23.488V23.416C23.488 24.12 24.064 24.696 24.768 24.696ZM23.488 15.736H24.768V17.528H23.488V15.736ZM24.768 30.648H23.488V32.44H24.768V30.648ZM30.72 23.416H32.512V24.696H30.72V23.416ZM17.536 23.416H15.744V24.696H17.536V23.416ZM36.032 24.056C36.032 30.648 30.656 35.96 24.128 35.96C17.536 35.96 12.224 30.648 12.224 24.056C12.224 17.464 17.6 12.152 24.128 12.152C30.72 12.152 36.032 17.464 36.032 24.056ZM34.752 24.056C34.752 18.168 29.952 13.432 24.128 13.432C18.24 13.432 13.504 18.232 13.504 24.056C13.504 29.944 18.24 34.68 24.128 34.68C30.016 34.68 34.752 29.88 34.752 24.056Z"\n }\n) }), yX = () => /* @__PURE__ */ c("svg", { viewBox: "0 0 48 48", fill: "none", xmlns: "http://www.w3.org/2000/svg", children: /* @__PURE__ */ c(\n "path",\n {\n fill: "currentColor",\n fillRule: "evenodd",\n clipRule: "evenodd",\n d: "M29.2489 8.34389L28.1629 7.25792H40.7602V6.02714H28.1629L29.2489 4.94117L28.3077 4L25.7013 6.60632L28.3077 9.28506L29.2489 8.34389ZM47.7104 37.6651H0.21723V11.3846H47.7104V37.6651ZM46.4072 12.6878H1.52034V36.3619H46.4072V12.6878ZM23.3484 25.7556C23.3303 25.9366 23.3122 26.1176 23.3122 26.2986C23.2398 26.6605 23.2398 27.0224 23.2398 27.4566V27.457H26.4253V28.6154H21.6471C21.8643 27.3846 22.0091 26.2986 22.0091 25.285H20.9231V24.1267H22.0091V23.3303C22.0091 22.7511 22.0814 22.2443 22.2262 21.8823C22.371 21.4479 22.5882 21.1584 22.8054 20.9412C23.095 20.6516 23.3122 20.5068 23.6742 20.4344C24.0361 20.362 24.3981 20.2896 24.7601 20.2896H24.7604C25.1223 20.2896 25.4118 20.2896 25.629 20.362C25.7864 20.362 25.982 20.4381 26.1604 20.5075L26.1604 20.5076C26.2281 20.5339 26.2932 20.5593 26.3529 20.5792L25.9909 21.7375C25.629 21.5203 25.1945 21.4479 24.7601 21.4479C24.5429 21.4479 24.3258 21.4479 24.181 21.5203C23.9638 21.5927 23.8914 21.6651 23.7467 21.8099L23.7466 21.8099C23.6018 21.9547 23.5294 22.0995 23.457 22.3167C23.3846 22.6062 23.3846 22.8234 23.3846 23.1852V23.1855V24.0543H25.4841V25.2126H23.3846C23.3846 25.3936 23.3665 25.5746 23.3484 25.7556ZM23.9638 17.2489C19.9819 17.2489 16.6516 20.5068 16.6516 24.5611C16.6516 28.543 19.9095 31.8733 23.9638 31.8733C27.9457 31.8733 31.276 28.6154 31.276 24.5611C31.2036 20.5068 27.9457 17.2489 23.9638 17.2489ZM23.9638 30.4977C20.6335 30.4977 17.9548 27.819 17.9548 24.4887C17.9548 21.1584 20.6335 18.4797 23.9638 18.4797C27.2941 18.4797 29.9728 21.1584 29.9728 24.4887C29.9728 27.819 27.2217 30.4977 23.9638 30.4977ZM7.81903 14.6425H40.0362C42.2805 14.6425 44.0905 16.4524 44.0905 18.6968V30.2805C44.0905 32.5248 42.2805 34.3348 40.0362 34.3348H7.81903C5.57469 34.3348 3.76467 32.5248 3.76467 30.2805V18.6968C3.76467 16.4524 5.57469 14.6425 7.81903 14.6425ZM40.0362 33.0316C41.5566 33.0316 42.7873 31.8009 42.7873 30.2805V18.6968C42.7873 17.1764 41.5566 15.9457 40.0362 15.9457H7.81903C6.29867 15.9457 5.06787 17.1764 5.06787 18.6968V30.2805C5.06787 31.8009 6.29867 33.0316 7.81903 33.0316H40.0362ZM37.647 23.837H35.8371V25.1402H37.647V23.837ZM10.2081 23.837H12.0181V25.1402H10.2081V23.837ZM46.19 6.02718H48V7.33034H46.19V6.02718ZM44.3801 6.02718H42.5701V7.33034H44.3801V6.02718ZM19.8371 41.7193L18.7511 40.7058L19.6199 39.7646L22.2987 42.3709L19.6199 44.9773L18.7511 44.1085L19.8371 43.0225H7.16743V41.7193H19.8371ZM1.80995 41.7195H0V43.0227H1.80995V41.7195ZM3.61991 41.7195H5.42986V43.0227H3.61991V41.7195Z"\n }\n) }), wX = () => /* @__PURE__ */ c("svg", { viewBox: "0 0 48 48", fill: "none", xmlns: "http://www.w3.org/2000/svg", children: /* @__PURE__ */ c(\n "path",\n {\n fill: "currentColor",\n fillRule: "evenodd",\n clipRule: "evenodd",\n d: "M32.5556 36.7677H6.45449V9.45456H32.5556V13.899H34.0101V3.15153C34.0101 1.45456 32.6364 0 30.8586 0H8.15144C6.45447 0 5 1.37375 5 3.15153V44.8485C5 46.5455 6.37366 48.0001 8.15144 48.0001H30.8586C32.5556 48.0001 34.0101 46.6263 34.0101 44.8485V34.1011H32.5556V36.7677ZM8.15144 1.45455H30.8586C31.8283 1.45455 32.5556 2.18183 32.5556 3.15153V8.08081H6.45449V3.15153C6.45449 2.26264 7.26255 1.45455 8.15144 1.45455ZM30.9394 46.5455H8.23233C7.26263 46.5455 6.53528 45.8182 6.53528 44.8485V38.2223H32.6364V44.8485C32.5556 45.7374 31.8283 46.5455 30.9394 46.5455ZM21.9697 41.6162H17.1212V43.0708H21.9697V41.6162ZM15.5051 4.04041H17.5253V5.49497H15.5051V4.04041ZM23.5859 4.04041H19.5455V5.49497H23.5859V4.04041ZM25.2021 22.6263C25.4445 22.6263 25.6061 22.7071 25.7677 22.8687C25.9293 22.9495 26.0101 23.192 25.9292 23.4344V24.0809C25.9292 25.1314 26.1717 26.1819 26.5758 27.1516C26.6566 27.3132 26.6566 27.5556 26.495 27.798C26.4142 27.9597 26.1717 28.1213 25.9292 28.1213H19.8686V26.6667H24.8788C24.6364 25.8586 24.4748 24.9698 24.4748 24.0809H9.84849V22.6263H25.2021ZM33.2829 15.192C30.6162 15.192 28.0303 16.4849 26.3333 18.5859H15.8282V20.0405H26.6565C26.899 20.0405 27.1415 19.9597 27.2223 19.7172C28.596 17.7779 30.8585 16.6465 33.202 16.6465C37.2424 16.6465 40.5556 19.9597 40.5556 24.0001C40.5556 24.4845 40.4749 24.969 40.3941 25.4535L40.3939 25.4546C39.6667 28.8486 36.6767 31.3536 33.202 31.3536C31.1818 31.3536 29.3232 30.5455 27.8687 29.091L26.8182 30.0607C28.5152 31.7577 30.697 32.7274 33.1212 32.7274C37.2424 32.7274 40.8788 29.7375 41.7677 25.6971C41.8485 25.1314 41.9293 24.4849 41.9293 23.9193C42.0909 19.1516 38.1314 15.192 33.2829 15.192ZM15.9091 26.5858H17.9293V28.0404H15.9091V26.5858ZM13.8889 18.5859H11.8687V20.0405H13.8889V18.5859ZM32.9596 21.0909C32.798 21.2526 32.7172 21.4142 32.6364 21.6566C32.5556 21.899 32.4748 22.2223 32.6364 22.7071V23.6768H34.9798V24.9698H32.6364C32.6364 25.1718 32.6162 25.3738 32.596 25.5758C32.5758 25.7778 32.5556 25.9799 32.5556 26.1819C32.5152 26.3839 32.495 26.5859 32.4747 26.7879C32.4545 26.99 32.4343 27.192 32.3939 27.394H35.9495V28.6869H30.6162C30.8586 27.3132 31.0202 26.1011 31.0202 24.9698H29.8081V23.6768H31.0202V22.7879C31.0202 22.1415 31.1011 21.5758 31.2627 21.1718C31.4243 20.6869 31.6667 20.3637 31.9091 20.1213C32.2323 19.798 32.4748 19.6364 32.8788 19.5556L32.879 19.5556C33.283 19.4748 33.687 19.394 34.091 19.394C34.495 19.394 34.8182 19.394 35.0606 19.4748C35.2364 19.4748 35.4546 19.5597 35.6538 19.6373C35.7293 19.6667 35.802 19.695 35.8687 19.7172L35.4647 21.0101C35.0606 20.7677 34.5758 20.6869 34.091 20.6869C33.8485 20.6869 33.6061 20.6869 33.4445 20.7677C33.202 20.8485 33.1213 20.9293 32.9597 21.0909L32.9596 21.0909Z"\n }\n) }), xX = () => /* @__PURE__ */ c("svg", { viewBox: "0 0 48 48", fill: "none", xmlns: "http://www.w3.org/2000/svg", children: /* @__PURE__ */ c(\n "path",\n {\n fill: "currentColor",\n fillRule: "evenodd",\n clipRule: "evenodd",\n d: "M43.52 10.831V4.31822H18.4889L16.4978 0H0V35.2537C0 37.2358 1.2089 39.0056 2.98668 39.6427C3.55556 39.8551 4.12447 39.9259 4.69336 39.9259H13.1556V38.5101H8.03555C8.88888 37.6606 9.38668 36.4571 9.38668 35.2537V12.2468H46.5778V34.4042C46.5778 36.6695 44.7289 38.5101 42.4533 38.5101V39.9259C45.5111 39.9259 48 37.4482 48 34.4042V10.831H43.52ZM42.0267 10.831H8.03555V35.2537C8.03555 36.3155 7.53777 37.3066 6.61332 37.9437C5.68888 38.5808 4.55113 38.7224 3.48446 38.2977C2.27557 37.8729 1.42222 36.5987 1.42222 35.1829V1.41582H15.5734L17.5645 5.73403H42.0267V10.831ZM15.4311 38.51V39.9258H21.76L21.6889 43.3946H23.1111L23.1823 38.51H17.28L27.8045 25.7677L38.3289 38.5808H31.8578V47.996H33.2089L33.28 39.9966H40.1067V38.51L27.8045 23.5024L15.4311 38.51ZM21.7598 45.6638L23.182 45.6579L23.1918 47.994L21.7696 47.9999L21.7598 45.6638Z"\n }\n) }), WX = () => /* @__PURE__ */ c("svg", { viewBox: "0 0 48 48", fill: "none", xmlns: "http://www.w3.org/2000/svg", children: /* @__PURE__ */ c(\n "path",\n {\n fill: "currentColor",\n fillRule: "evenodd",\n clipRule: "evenodd",\n d: "M46.1341 0H2V44.2952H6.18787V47.9999H11.2617V44.2952H36.8724V47.9999H41.9462V44.2952H46.1341V0ZM9.89255 46.4697H7.63757V44.2147H9.89255V46.4697ZM40.577 46.4697H38.3221V44.2147H40.577V46.4697ZM44.8455 42.8456H42.0267H36.9529H11.3422H6.26839H3.4496V1.44968H44.8455V42.8456ZM42.0267 24.0805V19.0066V4.18787H6.18787V40.0267H42.0267V24.0805ZM7.63757 38.5771V32.2147H9.24831V30.765H7.63757V13.3691H9.24831V11.9194H7.63757V5.55701H40.577V18.8456H37.5972V20.2952H40.577V22.5502H37.5972V23.9999H40.577V38.5771H7.63757ZM17.9462 11.9999H30.3489V20.3757H17.9462V11.9999ZM19.3154 18.926H28.8992V13.369H19.3154V18.926ZM19.557 23.114H17.7047V24.5637H19.557V23.114ZM21.4093 23.114H23.2616V24.5637H21.4093V23.114ZM26.8858 23.114H25.0335V24.5637H26.8858V23.114ZM28.7382 23.114H30.5906V24.5637H28.7382V23.114ZM19.557 26.9798H17.7047V28.4295H19.557V26.9798ZM21.4093 26.9798H23.2616V28.4295H21.4093V26.9798ZM26.8858 26.9798H25.0335V28.4295H26.8858V26.9798ZM28.7382 26.9798H30.5906V28.4295H28.7382V26.9798ZM19.557 30.8456H17.7047V32.2953H19.557V30.8456ZM21.4093 30.8456H23.2616V32.2953H21.4093V30.8456ZM26.8858 30.8456H25.0335V32.2953H26.8858V30.8456ZM28.7382 30.8456H30.5906V32.2953H28.7382V30.8456Z"\n }\n) }), RX = () => /* @__PURE__ */ c("svg", { viewBox: "0 0 48 48", fill: "none", xmlns: "http://www.w3.org/2000/svg", children: /* @__PURE__ */ c(\n "path",\n {\n fill: "currentColor",\n fillRule: "evenodd",\n clipRule: "evenodd",\n d: "M1.40351 38.3684H46.5965V44.7544H1.40351V38.3684ZM48 36.9649V3H0V36.9649V38.3684V46.0877H48V38.3684V36.9649ZM46.5965 36.9649H1.40351V4.33331H46.5965V36.9649ZM21.614 26.0176C21.7544 26.0878 21.8947 26.158 22.1053 26.158C22.2719 26.158 22.3945 26.114 22.5427 26.0609C22.5818 26.0469 22.6227 26.0323 22.6667 26.0176L30.4561 21.5264C30.7368 21.3158 30.9474 20.965 30.9474 20.6141C30.9474 20.193 30.7368 19.9123 30.4561 19.7018L22.6667 15.2106C22.3158 15 21.8947 15 21.614 15.2106C21.3333 15.4211 21.1228 15.772 21.1228 16.1228V25.1053C21.1228 25.5264 21.3333 25.8071 21.614 26.0176ZM22.4562 24.5439V16.8246L29.1228 20.6842L22.4562 24.5439ZM11.579 40.8245H44.4912V42.228H11.579V40.8245ZM5.47368 40.5439H4.07017V42.5088H5.47368V40.5439ZM7.92982 40.5439H9.33333V42.5088H7.92982V40.5439Z"\n }\n) }), BX = () => /* @__PURE__ */ c("svg", { viewBox: "0 0 48 48", fill: "none", xmlns: "http://www.w3.org/2000/svg", children: /* @__PURE__ */ c(\n "path",\n {\n fill: "currentColor",\n fillRule: "evenodd",\n clipRule: "evenodd",\n d: "M1.3465 25C1.3465 27.6139 1.8218 30.2277 2.69309 32.6832L1.42578 33.1584C0.475286 30.5446 0 27.7723 0 25C0 11.7723 10.7723 1 24 1C37.2278 1 48 11.7723 48 25C48 27.9307 47.4455 30.8614 46.4158 33.5545L45.0693 33.0792C46.099 30.4654 46.5743 27.7723 46.5743 25C46.5743 18.6634 43.9604 12.9604 39.7624 8.8416C38.495 10.505 36.8317 11.8515 34.8515 12.8812C35.4852 14.9406 35.9604 17.2376 36.2773 19.6931L34.8515 19.8515C34.6139 17.5545 34.1386 15.4951 33.5842 13.5149C30.9703 14.6238 27.9604 15.3366 24.7128 15.4159V21.9901H23.2872V15.4159C20.1188 15.2574 17.0297 14.6238 14.4158 13.4357C13.7821 15.5743 13.3069 17.8713 13.0693 20.3267L11.6435 20.1683C11.8812 17.4753 12.4356 15.0198 13.0693 12.802C11.0891 11.7723 9.42579 10.4258 8.15846 8.8416C3.96044 12.9604 1.3465 18.6634 1.3465 25ZM23.2872 2.50496C19.802 2.901 16.7128 6.62377 14.8118 12.1683C17.2673 13.2772 20.198 13.9901 23.2872 14.0693V2.50496ZM24.7128 2.50496V14.0693C27.7227 13.9901 30.6535 13.2772 33.1882 12.1683C31.208 6.62377 28.1188 2.98021 24.7128 2.50496ZM34.3763 11.5347C36.1188 10.5842 37.6238 9.39605 38.7327 7.9703C36.0396 5.59406 32.7129 3.85149 28.9901 2.9802C31.2079 4.80198 33.0297 7.73268 34.3763 11.5347ZM9.1881 7.9703C10.297 9.31684 11.802 10.5842 13.5445 11.5347C14.8911 7.73268 16.7129 4.80199 18.9307 3.05941C15.2079 3.85149 11.9604 5.59406 9.1881 7.9703ZM4.75248 26.8217C4.75248 29.594 6.97026 32.9207 9.66333 32.9207C12.3564 32.9207 14.5743 29.594 14.5743 26.8217C14.5743 24.1286 12.3564 21.9108 9.66333 21.9108C6.97026 21.9108 4.75248 24.1286 4.75248 26.8217ZM13.0693 26.8217C13.0693 28.8811 11.4059 31.495 9.58414 31.495C7.76236 31.495 6.09897 28.8811 6.09897 26.8217C6.09897 24.9207 7.68315 23.3366 9.58414 23.3366C11.5643 23.3366 13.0693 24.9207 13.0693 26.8217ZM18.8515 29.3564C18.8515 32.2871 21.2278 35.9307 24.0792 35.9307C27.0099 35.9307 29.3069 32.3663 29.3069 29.3564C29.3069 26.4257 26.9307 24.1287 24.0792 24.1287C21.1485 24.1287 18.8515 26.4257 18.8515 29.3564ZM27.8812 29.3564C27.8812 31.5742 25.9802 34.5049 24.0792 34.5049C22.099 34.5049 20.198 31.5742 20.198 29.3564C20.198 27.2178 21.9406 25.4752 24.0792 25.4752C26.2179 25.4752 27.8812 27.2178 27.8812 29.3564ZM22.0198 37.6733C17.5842 37.6733 13.9406 41.3169 13.9406 45.7525V47.8912H15.3664V45.7525C15.3664 42.109 18.3763 39.0991 22.0198 39.0991H26.1386C29.7822 39.0991 32.7921 42.109 32.7921 45.7525V47.8912H34.2178V45.7525C34.2178 41.2377 30.5743 37.6733 26.1386 37.6733H22.0198ZM19.3268 43.9307H17.901V47.8119H19.3268V43.9307ZM28.8317 43.9307H30.2574V47.8119H28.8317V43.9307ZM3.88121 41.7921H5.30689V47.5743H3.88121V41.7921ZM17.0297 36.8812L15.8416 37.6732C15.1287 36.4851 13.4654 35.8514 11.4852 35.8514H7.68313C4.27719 35.8514 1.58416 38.6237 1.58416 41.9505V47.8911H0.158377V41.9505C0.158377 37.7524 3.56432 34.4257 7.68313 34.4257H11.4852C14.0198 34.4257 16 35.297 17.0297 36.8812ZM44.2773 41.7921H42.8515V47.8119H44.2773V41.7921ZM38.5742 32.9207C35.8812 32.9207 33.6634 29.594 33.6634 26.8217C33.6634 24.1286 35.8812 21.9108 38.5742 21.9108C41.2673 21.9108 43.4852 24.1286 43.4852 26.8217C43.4852 29.594 41.2673 32.9207 38.5742 32.9207ZM38.5742 31.495C40.396 31.495 42.0594 28.8811 42.0594 26.8217C42.0594 24.9207 40.4752 23.3366 38.5742 23.3366C36.6732 23.3366 35.0892 24.9207 35.0892 26.8217C35.0892 28.8811 36.7525 31.495 38.5742 31.495ZM40.3961 34.4257H36.594C34.1386 34.4257 32.0792 35.297 31.0495 36.8812L32.2376 37.6732C33.0297 36.5643 34.6138 35.8514 36.594 35.8514H40.3961C43.7228 35.8514 46.495 38.5445 46.495 41.9505V47.8911H47.9208V41.9505C47.9208 37.7524 44.5941 34.4257 40.3961 34.4257Z"\n }\n) }), SX = () => /* @__PURE__ */ c("svg", { viewBox: "0 0 48 48", fill: "none", xmlns: "http://www.w3.org/2000/svg", children: /* @__PURE__ */ c(\n "path",\n {\n fill: "currentColor",\n fillRule: "evenodd",\n clipRule: "evenodd",\n d: "M1.83798 3H46.0913C47.081 3 47.9293 3.8483 48 4.83799V37.2857C48 38.2754 47.1517 39.1237 46.162 39.1237H29.8321V44.2135H35.6289V45.6274H29.8321H18.1679H12.3711V44.2135H18.1679V39.1237H1.83798C0.848289 39.1237 0 38.2754 0 37.2857V4.83799C0 3.8483 0.848289 3 1.83798 3ZM46.0913 4.41384H1.83798C1.6259 4.41384 1.41384 4.62591 1.41384 4.83799V31.2062H46.5155V4.83799C46.5155 4.62591 46.3033 4.41384 46.0913 4.41384ZM19.5817 44.2842H28.4182V39.1944H19.5817V44.2842ZM29.7614 37.7805H46.0913C46.374 37.7805 46.5154 37.5685 46.4447 37.3564V32.6907H1.34317V37.3564C1.34317 37.5685 1.55523 37.7805 1.7673 37.7805H18.0972H29.7614ZM9.96758 17.2798V14.3814C9.33135 14.0987 8.90721 13.3917 8.83652 12.6848V11.6244C8.83652 10.4934 9.75554 9.57437 10.8866 9.57437H13.0074H13.0781L18.8041 7.59499V16.5729L13.0781 14.5935H13.0074H11.3814V17.2798H9.96758ZM13.9971 13.3917L17.4609 14.5935V9.50368L13.9971 10.7054V13.3917ZM10.8866 10.9175C10.5332 10.9175 10.2504 11.2003 10.2504 11.5537V12.6141C10.2504 12.9676 10.5332 13.2504 10.8866 13.2504H12.5832V10.9175H10.8866ZM39.5169 15.2298H22.0559V16.6436H39.5169V15.2298ZM22.0559 11.3417H39.5169V12.7556H22.0559V11.3417ZM39.5169 7.45364H22.0559V8.86748H39.5169V7.45364ZM8.41238 19.1884H39.5169V20.6023H8.41238V19.1884ZM39.5169 23.0765H8.41238V24.4904H39.5169V23.0765ZM8.41238 26.9646H39.5169V28.3784H8.41238V26.9646Z"\n }\n) }), EX = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({\n __proto__: null,\n AbTest: AF,\n Alert: uF,\n Atm: zF,\n Balance: hF,\n BarPresentation: OF,\n Bars: fF,\n Calculate: gF,\n Calculation: CF,\n Calendar: mF,\n CheckList: LF,\n Cheque: vF,\n Comment: qF,\n Company: yF,\n Connection: wF,\n Conversation: xF,\n ConversationPeople: WF,\n CreditCards: RF,\n Currency: BF,\n DesktopMail: SF,\n Digital: EF,\n Download: kF,\n DownloadFolder: NF,\n ExchangeEuroDollar: TF,\n ExchangeEuroPound: IF,\n ExchangePoundDollar: DF,\n Eye: HF,\n Global: VF,\n Graphs: PF,\n Handshake: FF,\n Headphones: XF,\n Hourglass: UF,\n Image: YF,\n Interconnection: GF,\n Intranet: QF,\n Lightbulb: ZF,\n Locked: jF,\n Mail: KF,\n MailPhone: JF,\n Maps: _F,\n Meeting: $F,\n Monologue: eX,\n NoData: tX,\n Pedestal: oX,\n Person: rX,\n PersonStar: nX,\n Phone: iX,\n PhonePair: aX,\n Presentation: sX,\n Puzzle: cX,\n Ranking: lX,\n Refresh: pX,\n Rocket: dX,\n Row: bX,\n Search: MX,\n SearchPerson: AX,\n Settings: uX,\n SettingsCloud: zX,\n SettingsPerson: hX,\n Strategy: OX,\n Survey: fX,\n Swipe: gX,\n Target: CX,\n TargetMoney: mX,\n Team: LX,\n TeamWork: vX,\n Time: qX,\n Transaction: yX,\n TransactionPhone: wX,\n Upload: xX,\n Vault: WX,\n Video: RX,\n Web: BX,\n WebSite: SX\n}, Symbol.toStringTag, { value: "Module" }));\nfunction kX(e) {\n return /* @__PURE__ */ c(mf, { className: "icon-detailed", ...e });\n}\nconst Tb = Sr(EX)(kX), NX = ({ filterState: e }) => /* @__PURE__ */ c(Sb, { filterState: e, children: /* @__PURE__ */ e1(Eb, { children: [\n /* @__PURE__ */ c(Tb, { size: "lg", name: "NoData", color: "#A6A6AB" }),\n /* @__PURE__ */ c(kb, { children: "We couldn’t find any matches" }),\n /* @__PURE__ */ c(Nb, { children: "There is no result for your search. Try searching for a different value." })\n] }) }), TX = ({\n tableEmptyInfoText: e,\n tableEmptyBtnText: t,\n tableEmptyBtnOnClick: o\n}) => /* @__PURE__ */ c(Sb, { children: /* @__PURE__ */ e1(Eb, { children: [\n /* @__PURE__ */ c(Tb, { size: "lg", name: "NoData", color: "#A6A6AB" }),\n /* @__PURE__ */ c(kb, { children: "No data to display" }),\n /* @__PURE__ */ c(Nb, { children: e }),\n /* @__PURE__ */ c(cF, { children: t && /* @__PURE__ */ c(\n X6,\n {\n children: t,\n $iconLeft: "Plus",\n buttonType: "secondary",\n size: "sm",\n onClick: o\n }\n ) })\n] }) }), Uo = {\n bgPrimary: "#272733",\n bgSecondary: "#21202B",\n bgTertiary: "#CCD0FF",\n bgPressed: "#9199F2",\n bgReadOnly: "#1A1A39",\n bgSelected: "#413E5C",\n bgHoverPrimary: "#30303D",\n bgHoverSecondary: "#3D3482",\n bgDisabledPrimary: "#4B4B5C",\n bgDisabledSecondary: "#626275",\n bgInformationalPrimary: "#5BB5FF",\n bgInformationalSecondary: "#182226",\n bgSuccessPrimary: "#2FC294",\n bgSuccessSecondary: "#1A241F",\n bgWarningPrimary: "#E08B4F",\n bgWarningSecondary: "#26221C",\n bgErrorPrimary: "#FB666D",\n bgErrorSecondary: "#29181A",\n bgTransparencyPrimary: "#76768A",\n bgTransparencyHover: "#272733",\n bgTransparencyPressed: "#393947",\n blackOverlay: "#20202C"\n}, IX = {\n borderPrimary: "#393947",\n borderSecondary: "#CCD0FF",\n borderPressed: "#9199F2",\n borderTertiary: "#393947",\n borderAlternative: "#272733",\n borderError: "#FB666D",\n borderFocused: "#5BB5FF",\n borderHover: "#3D3482",\n borderDisabledOnbg: "#8B8B9E",\n borderReadonly: "#1A1A39",\n borderTransparent: "#FFFFFF"\n}, DX = {\n textPrimary: "#FFFFFF",\n textSecondary: "#CCD0FF",\n textTertiary: "#20202C",\n textHover: "#3D3482",\n textPressed: "#9199F2",\n textHighemphasis: "#F0F0F5",\n textBody: "#D8D8E5",\n textMediumemphasis: "#D8D8E5",\n textLowemphasis: "#BCBCCC",\n textDisabledOnbg: "#8B8B9E",\n textDisabledNobg: "#626275",\n textError: "#FB666D",\n textSuccess: "#2FC294",\n textWarning: "#E08B4F",\n textInformational: "#5BB5FF",\n textReadonly: "#1A1A39",\n textDisabled: "#A6A6AB"\n}, HX = {\n // legendBgCyan: \'#009FE3\',\n // legendBgPurple: \'#831F82\',\n // legendBgPink: \'#EC619F\',\n // legendBgRed: \'#FF0000\',\n // legendBgOrange: \'#F39200\',\n // new\n legendBg1: "#CCD0FF",\n legendBg2: "#52CAFA",\n legendBg3: "#BC6FCC",\n legendBg4: "#FF9EBE",\n legendBg5: "#FF8180",\n legendBg6: "#FFB94E",\n legendBg8: "#75D98F",\n legendBorder: "#F0F0F5"\n}, VX = {\n metricsBgHover: "#323045",\n metricsBgUp: "#75D98F",\n metricsBgDown: "#FF8180"\n}, r3 = {\n chartBubbleBgDefault: "#21202B",\n // chartBgBlueActive: \'#312783\',\n // chartBgBlueInactive: \'#CBC9E0\',\n // chartPieBgCyanActive: \'#009FE3\',\n // chartPieBgCyanInactive: \'#BFE7F8\',\n // chartPieBgPurpleActive: \'#831F82\',\n // chartPieBgPurpleInactive: \'#E0C7E0\',\n // chartPieBgPinkActive: \'#EC619F\',\n // chartPieBgPinkInactive: \'#FAD7E7\',\n // chartPieBgGreenActive: \'#009640\',\n // chartPieBgGreenInactive: \'#BFE5CF\',\n // chartPieBgOrangeActive: \'#F39200\',\n // chartPieBgOrangeInactive: \'#FCE4BF\',\n // chartPieBgRedActive: \'#FF0000\',\n // chartPieBgRedInactive: \'#FFBFBF\',\n //new\n chartBgHover: "#21202B",\n chartBg1Active: "#9199F2",\n chartBg1InActive: "#1C1C59",\n chartPieBg2Active: "#52CAFA",\n chartPieBg2InActive: "#184659",\n chartPieBg3Active: "#BC6FCC",\n chartPieBg3InActive: "#4A2152",\n chartPieBg4Active: "#FF9EBE",\n chartPieBg4InActive: "#591F32",\n chartPieBg5Active: "#75D98F",\n chartPieBg5InActive: "#23462D",\n chartPieBg6Active: "#FFB94E",\n chartPieBg6InActive: "#59411C",\n chartPieBg7Active: "#FF8180",\n chartPieBg7InActive: "#561C1B"\n}, PX = {\n buttonBgPrimaryDefault: "#9199F2",\n buttonBgPrimaryHover: "#CCD0FF",\n buttonBgPrimaryPressed: "#3D3482",\n buttonBgSecondaryDefault: "#323045",\n buttonBgSecondaryHover: "#CCD0FF",\n buttonBgSecondaryPressed: "#3D3482",\n buttonBgTertiary: "#323045",\n buttonBgTextlinkHover: "#413E5C"\n}, FX = {\n buttonBorderSecondaryDefault: "#9199F2",\n buttonBorderTertiaryDefault: "#76768A",\n buttonBorderTertiaryHover: "#BCBCCC",\n buttonBorderTertiaryPressed: "#9199F2"\n}, XX = {\n buttonTextPrimary: "#110B38",\n buttonTextPrimaryPressed: "#FFFFFF",\n buttonTextSecondaryDefault: "#9199F2",\n buttonTextSecondaryHover: "#110B38",\n buttonTextSecondaryPressed: "#FFFFFF",\n buttonTextSecondaryFocused: "#110B38",\n buttonTextTertiary: "#FFFFFF",\n buttonTextlinkDefault: "#9199F2",\n buttonTextlinkHover: "#FFFFFF",\n buttonTextlinkPressed: "#CCD0FF"\n}, UX = {\n topBarBgPrimary: "#30303D",\n topBarBgSecondary: "#272733",\n topBarBgTertiary: "#FFFFFF",\n topBarTextPrimary: "#FFFFFF",\n topBarTextSecondary: "#30303D"\n}, YX = {\n fieldBgDefault: "#323045",\n fieldBgHover: "#413E5C",\n fieldTextPlaceholder: "#76768A",\n fieldTextSupport: "#4B4B5C",\n fieldBorderActive: "#393947"\n}, GX = {\n tabIndicator: "#52CAFA",\n //new\n tabBorder: "#30303D"\n}, QX = {\n actionButtonBgHoverDropdown: "#1F1F29",\n actionButtonBgPressedDropdown: "#626275",\n actionButtonBgPressedButton: "#626275",\n actionButtonBgHoverButton: "#393947"\n}, ZX = {\n filterboxButtonBorderHover: "#4B4B5C",\n filterboxButtonBorderDefault: "#393947"\n}, jX = {\n filterboxButtonBg: "#323045",\n filterboxBg: "#272733"\n}, KX = {\n toggleBgInactiveDefault: "#1F1F29",\n switchTextReadonlyActive: "#BCBCCC"\n}, JX = {\n dataTableBgPrimary: "#272733",\n dataTableBgHeader: "#323045",\n dataTableBgFilter: "#272733",\n dataTableBgSecondary: "#751D1C",\n dataTableBgTertiary: "#79551D",\n dataTableBgTotal: "#1F1F29",\n dataTableBorderHeader: "#393947",\n dataTableBorderCell: "#393947",\n dataTableScrollArrow: "#8B8B9E",\n dataTableScrollBgPressedArrow: "#76768A",\n dataTableLoaderBg: "#323045",\n dataTableLoaderGradient: "#413E5C"\n}, _X = {\n scrollBgDefault: "#393947",\n scrollBgHover: "#626275",\n scrollBgPressed: "#8B8B9E",\n scrollBgPrimary: "#1F1F29"\n}, $X = {\n sliderBgDefault: "#30303D"\n}, eU = {\n listTextLowemphasis: "#D8D8E5"\n}, tU = {\n calendarBlockBgDisabled: "#272733"\n}, oU = {\n redOrange: (e) => `linear-gradient(to ${e}, ${r3.chartPieBg7Active} 0%, ${r3.chartPieBg6Active} 100%)`,\n purplePink: (e) => `linear-gradient(to ${e}, ${r3.chartPieBg3Active} 0%, #B52BB3 100%)`,\n blueCyan: (e) => `linear-gradient(to ${e}, ${Uo.bgTertiary} 0%, ${Uo.bgHoverSecondary} 100%)`,\n greenLime: (e) => `linear-gradient(to ${e}, ${Uo.bgSuccessPrimary} 0%, #19B37F 100%)`,\n orangeCherokee: (e) => `linear-gradient(to ${e}, ${r3.chartPieBg6Active} 0%, ${Uo.bgWarningPrimary} 100%)`,\n pinkLavenderPink: (e) => `linear-gradient(to ${e}, ${r3.chartPieBg4Active} 0%, ${r3.chartPieBg4Active} 100%)`\n}, Ib = {\n border: IX,\n textIcon: DX,\n buttonBackgound: PX,\n buttonBorder: FX,\n topBar: UX,\n field: YX,\n ...GX,\n actionButton: QX,\n filterboxBorder: ZX,\n filterboxBackground: jX,\n toggleSwitch: KX,\n dataTable: JX,\n scroll: _X,\n slider: $X,\n dataVisualizationLegend: HX,\n dataVisualizationMetrics: VX,\n dataVisualizationChart: r3,\n list: eU,\n ...tU,\n gradients: oU,\n backgrounds: Uo,\n buttonText: XX\n};\n(0,styled_components__WEBPACK_IMPORTED_MODULE_1__.keyframes)`\n 0% { opacity: 0; }\n 100% { opacity: 1; }\n`;\nconst j6 = (0,react__WEBPACK_IMPORTED_MODULE_0__.createContext)(\n {\n themeValue: "cscBlueLight",\n setThemeValue: (e) => {\n }\n }\n), rU = () => (0,react__WEBPACK_IMPORTED_MODULE_0__.useContext)(j6), nU = ({\n columnResizeMode: e,\n table: t,\n pagination: o,\n showTableFooter: n,\n showColFilters: r,\n columnFilters: i,\n tableEmptyInfoText: a,\n tableEmptyBtnText: s,\n tableEmptyActionBtnOnClick: l,\n getRowStyles: p,\n renderSubComponent: d,\n loading: b,\n fontSize: M,\n columnOrder: u,\n onRowClick: A\n}) => {\n var m, k;\n const z = react__WEBPACK_IMPORTED_MODULE_0___default().useRef(null), [f, O] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(), h = rU();\n (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => {\n h != null && h.themeValue && O(h == null ? void 0 : h.themeValue);\n }, [h == null ? void 0 : h.themeValue]);\n const g = (x, N) => {\n const V = [], R = N.reduce((I, j) => (I[j.id] = j, I), {});\n return x.forEach((I) => {\n R[I] && V.push(R[I]);\n }), V;\n }, v = (x) => (u.length > 0 ? g(u, x.getVisibleFlatColumns()) : x.getVisibleFlatColumns()).filter((V) => {\n var R;\n return ((R = V == null ? void 0 : V.columns) == null ? void 0 : R.length) === 0;\n }), L = t.getFilteredRowModel().rows.length <= 0 && (i == null ? void 0 : i.length) !== 0, y = t.getRowModel().rows.length <= 0 && (i == null ? void 0 : i.length) === 0, B = v(t).map(\n (x, N) => x.columnDef.fixColumn ? N : null\n ).filter((x) => x !== null), X = Mc({\n count: v(t).length,\n estimateSize: (x) => v(t)[x].getSize(),\n getScrollElement: () => z.current,\n horizontal: !0,\n overscan: 5,\n rangeExtractor: (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)(\n (x) => {\n const N = new Set(yb(x));\n return B.forEach((V) => N.add(V)), [...N].sort((V, R) => V - R);\n },\n [B]\n )\n }), { rows: F } = t.getRowModel(), T = Mc({\n count: F.length,\n estimateSize: () => 24,\n getScrollElement: () => z.current,\n overscan: 100\n }), w = X.getVirtualItems(), H = T.getVirtualItems();\n let C, q;\n return X && (w != null && w.length) && (C = ((m = w[0]) == null ? void 0 : m.start) ?? 0, q = X.getTotalSize() - (((k = w[w.length - 1]) == null ? void 0 : k.end) ?? 0)), /* @__PURE__ */ c(s0, { children: y ? /* @__PURE__ */ c(\n TX,\n {\n tableEmptyInfoText: a,\n tableEmptyBtnText: s,\n tableEmptyBtnOnClick: l\n }\n ) : /* @__PURE__ */ e1(s0, { children: [\n /* @__PURE__ */ c(\n eF,\n {\n className: "table__container__wrapper",\n ref: z,\n loading: b,\n $hideOverflow: L,\n children: /* @__PURE__ */ e1(\n tF,\n {\n style: {\n width: "100%"\n },\n className: "table",\n as: "table",\n children: [\n /* @__PURE__ */ c(\n oF,\n {\n as: "thead",\n className: "header table__header__container",\n children: t.getHeaderGroups().map((x, N) => /* @__PURE__ */ e1(\n aF,\n {\n isLoading: b,\n as: "tr",\n children: [\n C ? /* @__PURE__ */ c(\n "th",\n {\n style: { display: "flex", width: C }\n }\n ) : null,\n w.map((V, R) => {\n var U, _, r1, K;\n const I = x.headers[V.index];\n if (!I)\n return null;\n const j = {\n onMouseDown: I == null ? void 0 : I.getResizeHandler(),\n onTouchStart: I == null ? void 0 : I.getResizeHandler(),\n className: `resizer ${(U = I == null ? void 0 : I.column) != null && U.getIsResizing() ? `isResizing ${I == null ? void 0 : I.id}` : ""}`,\n style: {\n paddingLeft: "8px",\n transform: e === "onEnd" && ((_ = I == null ? void 0 : I.column) != null && _.getIsResizing()) ? `translateX(${t.getState().columnSizingInfo.deltaOffset}px)` : ""\n }\n };\n return /* @__PURE__ */ e1(\n sF,\n {\n className: `header-${(I == null ? void 0 : I.subHeaders.length) === 0 ? "last-row" : "not-last-row"} ${// @ts-ignore\n (K = (r1 = I == null ? void 0 : I.column) == null ? void 0 : r1.columnDef) != null && K.fixColumn ? "sticky" : ""}`,\n style: {\n left: I == null ? void 0 : I.getStart("left"),\n flexGrow: R === (I == null ? void 0 : I.headerGroup.headers.length) - 1 ? "1" : "0",\n width: R === (I == null ? void 0 : I.headerGroup.headers.length) - 1 && (I == null ? void 0 : I.subHeaders.length) === 0 ? "100%" : I == null ? void 0 : I.getSize()\n },\n children: [\n /* @__PURE__ */ c(\n Ac,\n {\n fontSize: M,\n loading: b,\n dividerProps: j,\n key: I == null ? void 0 : I.id,\n hasSorting: (I == null ? void 0 : I.subHeaders.length) != 0 ? !1 : I != null && I.column.getCanSort() ? I == null ? void 0 : I.column.getCanSort() : !0,\n colSpan: I == null ? void 0 : I.colSpan,\n renderSortIcon: I == null ? void 0 : I.column.getCanSort(),\n isSorted: (I == null ? void 0 : I.column.getIsSorted()) == "desc",\n "data-column-header": `column-header-${R + 1}`,\n style: {\n flexGrow: R === (I == null ? void 0 : I.headerGroup.headers.length) - 1 ? "1" : "0",\n width: R === (I == null ? void 0 : I.headerGroup.headers.length) - 1 && (I == null ? void 0 : I.subHeaders.length) === 0 ? "100%" : I == null ? void 0 : I.getSize()\n },\n children: /* @__PURE__ */ c(s0, { children: I != null && I.isPlaceholder ? null : /* @__PURE__ */ c(\n pF,\n {\n onClick: I == null ? void 0 : I.column.getToggleSortingHandler(),\n children: /* @__PURE__ */ c("div", { children: Oa(\n I == null ? void 0 : I.column.columnDef.header,\n I == null ? void 0 : I.getContext()\n ) })\n }\n ) })\n }\n ),\n r && (I == null ? void 0 : I.subHeaders.length) === 0 && /* @__PURE__ */ c(\n Ac,\n {\n fontSize: M,\n dividerProps: j,\n loading: b,\n key: (I == null ? void 0 : I.id) + N,\n colSpan: I == null ? void 0 : I.colSpan,\n className: "table-search-column",\n style: {\n width: R === (I == null ? void 0 : I.headerGroup.headers.length) - 1 && (I == null ? void 0 : I.subHeaders.length) === 0 ? "100%" : I == null ? void 0 : I.getSize()\n },\n isSorted: !0,\n "data-column-header": `column-header-${R + 1}`,\n children: I != null && I.isPlaceholder ? null : /* @__PURE__ */ c(\n ie,\n {\n height: b ? K2 : "auto",\n radius: 4,\n visible: b,\n children: I != null && I.column.getCanFilter() ? /* @__PURE__ */ c(\n MF,\n {\n column: I == null ? void 0 : I.column,\n table: t,\n fontSize: M,\n columnFilters: i\n },\n "filter-" + (I == null ? void 0 : I.id) + R + "_" + N\n ) : null\n }\n )\n }\n )\n ]\n },\n R\n );\n }),\n q ? /* @__PURE__ */ c(\n "th",\n {\n style: { display: "flex", width: q }\n }\n ) : null\n ]\n },\n x.id\n ))\n }\n ),\n L ? /* @__PURE__ */ c(NX, { filterState: !0 }) : /* @__PURE__ */ c(rF, { as: "tbody", children: H.map((x) => {\n const N = F[x.index], V = N.getVisibleCells();\n return /* @__PURE__ */ e1(s0, { children: [\n /* @__PURE__ */ e1(\n gc,\n {\n loading: b,\n as: "tr",\n onClick: () => A && A(N),\n style: {\n ...typeof p == "function" ? p(N) : N.getIsSelected() ? {\n backgroundColor: f == "cscBlueLight" ? rr.backgrounds.bgSelected : Ib.backgrounds.bgSelected\n } : {}\n },\n children: [\n C ? /* @__PURE__ */ c(\n "td",\n {\n style: {\n display: "flex",\n width: C\n }\n }\n ) : null,\n w.map((R, I) => {\n var U, _, r1, K;\n const j = V[R.index];\n return /* @__PURE__ */ c(\n uc,\n {\n key: j.id,\n // @ts-ignore\n className: (_ = (U = j == null ? void 0 : j.column) == null ? void 0 : U.columnDef) != null && _.fixColumn ? "sticky table-body-column" : "table-body-column",\n style: {\n cursor: A && !b ? "Pointer" : "initial",\n flexGrow: I === v(t).length - 1 ? "1" : "0",\n width: j.column.getSize(),\n left: (r1 = j == null ? void 0 : j.column) == null ? void 0 : r1.getStart()\n },\n fontSize: M,\n align: (K = j.column.columnDef.meta) == null ? void 0 : K.align,\n children: Oa(\n j.column.columnDef.cell,\n j.getContext()\n )\n }\n );\n }),\n q ? /* @__PURE__ */ c(\n "td",\n {\n style: {\n display: "flex",\n width: q\n }\n }\n ) : null\n ]\n },\n N.id\n ),\n N.getIsExpanded() && d && /* @__PURE__ */ c(\n gc,\n {\n as: "tr",\n style: {\n ...typeof p == "function" ? p(N) : {}\n },\n children: /* @__PURE__ */ c(\n lF,\n {\n colSpan: N.getVisibleCells().length,\n children: d({ row: N })\n }\n )\n }\n )\n ] });\n }) }),\n n && /* @__PURE__ */ c(nF, { children: t.getFooterGroups().map((x) => /* @__PURE__ */ c(iF, { children: x.headers.map((N) => /* @__PURE__ */ c(uc, { fontSize: M, children: N != null && N.isPlaceholder ? null : Oa(\n N == null ? void 0 : N.column.columnDef.footer,\n N == null ? void 0 : N.getContext()\n ) }, N == null ? void 0 : N.id)) }, x.id)) })\n ]\n }\n )\n }\n ),\n o && t.getRowModel().rows.length ? /* @__PURE__ */ c(s0, { children: o }) : null\n ] }) });\n};\nfunction Cc({\n indeterminate: e,\n className: t = "",\n ...o\n}) {\n const n = react__WEBPACK_IMPORTED_MODULE_0___default().useRef(null);\n react__WEBPACK_IMPORTED_MODULE_0___default().useEffect(() => {\n typeof e == "boolean" && n.current && (n.current.indeterminate = !o.checked && e);\n }, [n, e]);\n const r = {};\n return /* @__PURE__ */ c(\n $P,\n {\n onClick: (i) => {\n i.stopPropagation();\n },\n children: /* @__PURE__ */ c(\n yt,\n {\n type: "checkbox",\n ref: n,\n className: t + " cursor-pointer",\n isPartlyOnly: e,\n isRequired: !0,\n ...r,\n ...o\n }\n )\n }\n );\n}\nconst iU = (e, t) => {\n var N1;\n const {\n maxVisibleFilters: o = 4,\n tableEmptyInfoText: n,\n tableEmptyBtnText: r,\n tableEmptyActionBtnOnClick: i,\n getRowStyles: a,\n getRowCanExpand: s,\n renderSubComponent: l,\n isLoading: p = !1,\n isServerSide: d,\n pageCount: b,\n pageSizeCount: M,\n pageTotal: u = 0,\n columnVisibilityState: A = {},\n columnOrderState: z = [],\n pageSizeArray: f,\n fixRowSelectionColumn: O,\n hideActionBar: h,\n hidePagination: g,\n fontSize: v = "xs",\n filterFromLeafRows: L,\n showRightSideContent: y = !1,\n onRowClick: B,\n columnChooserActionLabel: X = "Reset",\n enableFilterIndicatorDots: F\n } = e, [T, w] = react__WEBPACK_IMPORTED_MODULE_0___default().useState("onChange"), [H, C] = react__WEBPACK_IMPORTED_MODULE_0___default().useState(\n []\n ), [q, m] = react__WEBPACK_IMPORTED_MODULE_0___default().useState(""), [k, x] = react__WEBPACK_IMPORTED_MODULE_0___default().useState({}), N = (0,react__WEBPACK_IMPORTED_MODULE_0__.useMemo)(\n () => f || [10, 25, 50, 100, 250],\n [f]\n ), [V, R] = react__WEBPACK_IMPORTED_MODULE_0___default().useState({}), [I, j] = react__WEBPACK_IMPORTED_MODULE_0___default().useState([]), [U, _] = react__WEBPACK_IMPORTED_MODULE_0___default().useState([]), [r1, K] = react__WEBPACK_IMPORTED_MODULE_0___default().useState(p);\n (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => {\n R(A);\n }, []), (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => {\n j(z);\n }, []), (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => {\n K(p);\n }, [p]);\n const [{ pageIndex: Q, pageSize: E }, D] = react__WEBPACK_IMPORTED_MODULE_0___default().useState({\n pageIndex: 0,\n pageSize: M || 10\n }), G = (v1, S1, D1, F1) => {\n const U1 = dP(v1.getValue(S1), D1);\n return F1({\n itemRank: U1\n }), U1.passed;\n }, J = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)(\n (v1) => {\n if (x(v1), e != null && e.onRowSelection) {\n const S1 = setTimeout(() => {\n e != null && e.onRowSelection && (e == null || e.onRowSelection(v1())), clearTimeout(S1);\n }, 100);\n }\n },\n [k]\n ), [S, W] = react__WEBPACK_IMPORTED_MODULE_0___default().useState({}), Y = (() => e != null && e.hasRowSelect ? [\n {\n id: "select",\n header: ({ table: v1 }) => /* @__PURE__ */ c(\n Cc,\n {\n checked: v1.getIsAllRowsSelected() || v1.getIsSomeRowsSelected(),\n indeterminate: v1.getIsSomeRowsSelected(),\n onChange: v1.getToggleAllRowsSelectedHandler(),\n table: v1\n }\n ),\n cell: ({ row: v1 }) => /* @__PURE__ */ c("div", { children: /* @__PURE__ */ c(\n Cc,\n {\n checked: v1.getIsSelected(),\n disabled: !v1.getCanSelect(),\n indeterminate: v1.getIsSomeSelected(),\n onChange: v1.getToggleSelectedHandler()\n }\n ) }),\n size: 35,\n enableSorting: !1,\n fixColumn: O,\n hideFromColumnChooser: !0\n },\n ...e.columns\n ] : [...e.columns])();\n (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => {\n p || K(!1);\n }, [p]);\n const Z = react__WEBPACK_IMPORTED_MODULE_0___default().useMemo(\n () => r1 ? Array(E).fill({}) : e.data,\n [r1, e.data]\n ), t1 = react__WEBPACK_IMPORTED_MODULE_0___default().useMemo(\n () => r1 ? Y.map((v1) => ({\n ...v1,\n cell: () => /* @__PURE__ */ c(ie, { height: K2, radius: 4 }),\n header: () => /* @__PURE__ */ c(ie, { height: K2, radius: 4 })\n })) : Y,\n [r1, Y]\n ), i1 = react__WEBPACK_IMPORTED_MODULE_0___default().useMemo(\n () => ({\n pageIndex: Q,\n pageSize: E\n }),\n [Q, E]\n ), n1 = sP({\n data: Z,\n //props.data,\n columns: t1,\n // columns,\n getRowCanExpand: s,\n pageCount: d ? b ?? -1 : b,\n filterFns: {\n fuzzy: G,\n // prettier-ignore\n dateRangeFilter: WP,\n // prettier-ignore\n amountRangeFilter: RP\n },\n filterFromLeafRows: L ?? !0,\n state: {\n columnFilters: H,\n globalFilter: q,\n pagination: i1,\n rowSelection: k,\n expanded: S,\n columnVisibility: V,\n columnOrder: I,\n sorting: U\n },\n onColumnVisibilityChange: R,\n onColumnOrderChange: j,\n onExpandedChange: W,\n onColumnFiltersChange: C,\n onGlobalFilterChange: m,\n globalFilterFn: G,\n enableColumnFilters: !0,\n enableRowSelection: e == null ? void 0 : e.enableRowSelection,\n onRowSelectionChange: J,\n getCoreRowModel: ZV(),\n getFilteredRowModel: tP(),\n getSortedRowModel: rP(),\n ...g ? {} : { getPaginationRowModel: oP() },\n getFacetedRowModel: $V(),\n getFacetedUniqueValues: eP(),\n getFacetedMinMaxValues: KV(),\n enableGrouping: !0,\n debugTable: !0,\n debugHeaders: !0,\n debugColumns: !1,\n columnResizeMode: T,\n onPaginationChange: D,\n onSortingChange: _,\n manualPagination: d,\n manualFiltering: d,\n manualSorting: d,\n getExpandedRowModel: jV(),\n getSubRows: (v1) => v1.subRows\n }), s1 = (0,react__WEBPACK_IMPORTED_MODULE_0__.useMemo)(\n () => /* @__PURE__ */ c(\n xP,\n {\n currentPage: n1.getState().pagination.pageIndex + 1,\n pageSize: E,\n limit: d ? u : n1.getExpandedRowModel().rows.length,\n onFirstPageClick: () => n1.setPageIndex(0),\n onLastPageClick: () => n1.setPageIndex(n1.getPageCount() - 1),\n onNextClick: () => {\n n1.nextPage(), d && n1.resetRowSelection();\n },\n onPrevClick: () => {\n n1.previousPage(), d && n1.resetRowSelection();\n },\n onPageSizeChange: (v1) => n1.setPageSize(Number(v1)),\n pageSizeOptions: N,\n loading: r1,\n fontSize: v\n }\n ),\n [\n n1,\n n1.setPageIndex,\n n1.nextPage,\n n1.previousPage,\n Q,\n E,\n n1.getRowModel,\n N,\n n1.getFilteredRowModel().rows.length,\n n1.getExpandedRowModel().rows.length,\n r1,\n n1.getPageCount(),\n d,\n n1.getState().pagination.pageIndex,\n u,\n v\n ]\n );\n (0,react__WEBPACK_IMPORTED_MODULE_0__.useImperativeHandle)(t, () => ({\n ...n1,\n tableConfig: n1,\n setColumnResizeMode: w,\n rowSelection: k,\n paginationData: i1,\n columnFilters: H,\n sorting: U,\n columnVisibility: V,\n setColumnVisibility: R,\n columnOrder: I,\n setColumnOrder: j,\n globalFilter: q\n }));\n const d1 = (0,react__WEBPACK_IMPORTED_MODULE_0__.useMemo)(\n () => new Set(\n n1.getAllFlatColumns().filter((v1) => {\n var S1;\n return !((S1 = v1 == null ? void 0 : v1.columnDef) != null && S1.hideFromColumnChooser);\n }).filter((v1) => {\n var S1;\n return ((S1 = v1 == null ? void 0 : v1.columns) == null ? void 0 : S1.length) === 0;\n }).map((v1) => v1.id)\n ),\n []\n ), [b1, c1] = react__WEBPACK_IMPORTED_MODULE_0___default().useState({\n items: z.length > 0 ? z.filter((v1) => v1 !== "actions") : d1\n }), a1 = (0,react__WEBPACK_IMPORTED_MODULE_0__.useMemo)(\n () => new Set(\n n1.getAllFlatColumns().filter((v1) => {\n var S1;\n return !((S1 = v1 == null ? void 0 : v1.columnDef) != null && S1.hideFromColumnChooser);\n }).map((v1) => v1.id)\n ),\n []\n ), l1 = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)(() => {\n const v1 = n1.getAllFlatColumns().filter((D1) => {\n var F1;\n return (F1 = D1 == null ? void 0 : D1.columnDef) == null ? void 0 : F1.hideFromColumnChooser;\n }).map((D1) => D1.id), S1 = Array.from(b1.items);\n j([...v1, ...S1]);\n }, [b1, j]), p1 = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)(() => {\n const v1 = n1.getAllFlatColumns().map((S1) => S1.id);\n j(v1);\n }, [n1, j]), M1 = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)(() => {\n c1({ items: d1 }), R({});\n }, [d1]), A1 = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)(\n (v1) => {\n R(v1);\n },\n [R]\n ), u1 = (v1) => {\n c1(v1);\n }, h1 = (v1, S1) => {\n var D1 = 0;\n return S1.forEach(function(F1) {\n D1 = D1 + v1.includes(F1);\n }), D1 === 1;\n }, C1 = (v1) => {\n const S1 = v1.columnDef;\n if (S1 != null && S1.filterType)\n return S1.filterType;\n const D1 = ["balance", "amount"], F1 = ["date"], U1 = ["status"], h0 = ["jurisdiction"];\n return h1(v1.id.toLowerCase(), F1) ? "daterange" : h1(v1.id.toLowerCase(), D1) ? "amount" : h1(v1.id.toLowerCase(), U1) ? "dropdown" : h1(v1.id.toLowerCase(), h0) ? "dropdown-multi-chip" : "input";\n }, q1 = (v1, S1, D1) => {\n const F1 = v1.columnDef;\n let U1 = {\n value: "",\n option: null\n };\n if (F1 != null && F1.getFilterSettings)\n return F1 == null ? void 0 : F1.getFilterSettings(D1);\n switch (S1) {\n case "daterange":\n U1 = {\n value: { min: null, max: null },\n options: null\n };\n break;\n case "amount":\n U1 = {\n value: SP(D1, F1.accessorKey, {\n minValue: 0,\n maxValue: 1e6\n }),\n options: null\n };\n break;\n case "dropdown-multi":\n U1 = {\n value: "",\n options: fa(\n D1,\n F1.accessorKey,\n F1 == null ? void 0 : F1.accessorFn\n )\n };\n break;\n case "dropdown-multi-chip":\n U1 = {\n value: "",\n options: fa(\n D1,\n F1.accessorKey,\n F1 == null ? void 0 : F1.accessorFn\n )\n };\n break;\n case "dropdown":\n U1 = {\n value: "",\n options: fa(\n D1,\n F1.accessorKey,\n F1 == null ? void 0 : F1.accessorFn\n )\n };\n }\n return U1;\n }, R1 = (0,react__WEBPACK_IMPORTED_MODULE_0__.useMemo)(() => {\n let v1 = [];\n return n1.getAllFlatColumns().map((S1) => {\n var D1;\n if (S1.getCanFilter()) {\n const F1 = C1(S1);\n let U1 = {\n type: F1,\n columnId: S1.id,\n title: S1.id,\n filterLabel: (D1 = S1.columnDef) == null ? void 0 : D1.filterLabel,\n settings: q1(S1, F1, e.data),\n enableFilter: S1.getCanFilter()\n };\n v1.push(U1);\n }\n }), v1;\n }, [e.data]), k1 = (0,react__WEBPACK_IMPORTED_MODULE_0__.useMemo)(\n () => BP(\n e.actionData ? e.actionData : R1,\n (e == null ? void 0 : e.filterOrder) ?? [],\n "columnId"\n ),\n [(N1 = e == null ? void 0 : e.filterOrder) == null ? void 0 : N1.length, e.actionData, e.data]\n );\n return /* @__PURE__ */ e1(s0, { children: [\n !h && /* @__PURE__ */ c(\n JD,\n {\n tableData: k1,\n maxVisibleFilters: o,\n setColumnFilters: C,\n defaultColumnsState: d1,\n allColumnsState: a1,\n columnsState: b1,\n handleChangeColumnOrder: l1,\n handleColumnsStateChange: u1,\n handleResetColumnOrder: p1,\n resetColumnsState: M1,\n handleColumnsHide: A1,\n rightSideContainer: e == null ? void 0 : e.rightSideContainer,\n columnFilters: H,\n tableConfig: n1,\n loading: r1,\n columnVisibility: V,\n showRightSideContent: y,\n columnChooserActionLabel: X,\n enableFilterIndicatorDots: F\n }\n ),\n /* @__PURE__ */ c(\n nU,\n {\n ...e,\n columnResizeMode: T,\n table: n1,\n pagination: g ? null : s1,\n showTableFooter: e.showTableFooter,\n showColFilters: e.showColFilters,\n columnFilters: H,\n tableEmptyInfoText: n,\n tableEmptyBtnText: r,\n tableEmptyActionBtnOnClick: i,\n getRowStyles: a,\n renderSubComponent: l,\n loading: r1,\n fontSize: v,\n columnOrder: I,\n onRowClick: B,\n pageSizeCount: E || 10\n }\n )\n ] });\n}, K_ = react__WEBPACK_IMPORTED_MODULE_0___default().forwardRef(iU);\nfunction aU({\n text: e,\n icon: t,\n isReadOnly: o,\n ...n\n}) {\n return o && (n.disabled = !0), /* @__PURE__ */ e1(qp, { children: [\n /* @__PURE__ */ c(kW, { ...n, type: "radio" }),\n /* @__PURE__ */ e1(Xn, { tabIndex: 0, children: [\n t && /* @__PURE__ */ c(Z1, { name: t, size: "xxs" }),\n e\n ] })\n ] });\n}\nfunction sU({\n data: e = [],\n name: t,\n hasClearButton: o = !1,\n label: n,\n supportText: r,\n isDisabled: i = !1,\n isError: a,\n isRequired: s,\n isReadOnly: l,\n defaultCheckedValue: p = "",\n onChangeCallback: d\n}, b) {\n const [M, u] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(\n !p || i\n ), [A, z] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(""), f = () => {\n z(""), u(!0);\n }, O = (g) => {\n z(g.currentTarget.value), u(!1), d && d(g);\n };\n return (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => {\n z(p);\n }, [p]), /* @__PURE__ */ e1(s0, { children: [\n n && /* @__PURE__ */ e1(\n Ta,\n {\n isError: a,\n isDisabled: i || l,\n variant: "label-sm-regular",\n element: "label",\n className: "toggle__label",\n htmlFor: n,\n children: [\n n,\n " ",\n !s && /* @__PURE__ */ c(ir, { children: "Optional" })\n ]\n }\n ),\n /* @__PURE__ */ e1(yp, { ref: b, children: [\n /* @__PURE__ */ c(\n NW,\n {\n $isError: a,\n $isDisabled: i,\n $isReadOnly: l,\n children: l ? /* @__PURE__ */ c(TW, { children: A }) : /* @__PURE__ */ c(s0, { children: (() => e.map((g) => {\n const { value: v, text: L, icon: y, disabled: B } = g, X = i || B;\n return /* @__PURE__ */ c(\n aU,\n {\n disabled: X,\n name: t,\n value: v,\n text: L,\n icon: y,\n checked: !X && A === v,\n isReadOnly: l,\n onChange: O\n },\n L\n );\n }))() })\n }\n ),\n o && /* @__PURE__ */ c(\n B2,\n {\n buttonType: "link",\n isDisabled: M,\n onClick: f,\n children: "Clear"\n }\n )\n ] }),\n !!r && /* @__PURE__ */ c(\n Qo,\n {\n isDisabled: i || l,\n isError: a,\n className: "supportText",\n children: r\n }\n )\n ] });\n}\nconst cU = (0,react__WEBPACK_IMPORTED_MODULE_0__.forwardRef)(sU), mc = {\n "Africa/Abidjan Time": "Africa/Abidjan",\n "Africa/Accra Time": "Africa/Accra",\n "Africa/Addis_Ababa Time": "Africa/Addis_Ababa",\n "Africa/Algiers Time": "Africa/Algiers",\n "Africa/Asmera Time": "Africa/Asmera",\n "Africa/Bamako Time": "Africa/Bamako",\n "Africa/Bangui Time": "Africa/Bangui",\n "Africa/Banjul Time": "Africa/Banjul",\n "Africa/Bissau Time": "Africa/Bissau",\n "Africa/Blantyre Time": "Africa/Blantyre",\n "Africa/Brazzaville Time": "Africa/Brazzaville",\n "Africa/Bujumbura Time": "Africa/Bujumbura",\n "Africa/Cairo Time": "Africa/Cairo",\n "Africa/Casablanca Time": "Africa/Casablanca",\n "Africa/Ceuta Time": "Africa/Ceuta",\n "Africa/Conakry Time": "Africa/Conakry",\n "Africa/Dakar Time": "Africa/Dakar",\n "Africa/Dar_es_Salaam Time": "Africa/Dar_es_Salaam",\n "Africa/Djibouti Time": "Africa/Djibouti",\n "Africa/Douala Time": "Africa/Douala",\n "Africa/El_Aaiun Time": "Africa/El_Aaiun",\n "Africa/Freetown Time": "Africa/Freetown",\n "Africa/Gaborone Time": "Africa/Gaborone",\n "Africa/Harare Time": "Africa/Harare",\n "Africa/Johannesburg Time": "Africa/Johannesburg",\n "Africa/Juba Time": "Africa/Juba",\n "Africa/Kampala Time": "Africa/Kampala",\n "Africa/Khartoum Time": "Africa/Khartoum",\n "Africa/Kigali Time": "Africa/Kigali",\n "Africa/Kinshasa Time": "Africa/Kinshasa",\n "Africa/Lagos Time": "Africa/Lagos",\n "Africa/Libreville Time": "Africa/Libreville",\n "Africa/Lome Time": "Africa/Lome",\n "Africa/Luanda Time": "Africa/Luanda",\n "Africa/Lubumbashi Time": "Africa/Lubumbashi",\n "Africa/Lusaka Time": "Africa/Lusaka",\n "Africa/Malabo Time": "Africa/Malabo",\n "Africa/Maputo Time": "Africa/Maputo",\n "Africa/Maseru Time": "Africa/Maseru",\n "Africa/Mbabane Time": "Africa/Mbabane",\n "Africa/Mogadishu Time": "Africa/Mogadishu",\n "Africa/Monrovia Time": "Africa/Monrovia",\n "Africa/Nairobi Time": "Africa/Nairobi",\n "Africa/Ndjamena Time": "Africa/Ndjamena",\n "Africa/Niamey Time": "Africa/Niamey",\n "Africa/Nouakchott Time": "Africa/Nouakchott",\n "Africa/Ouagadougou Time": "Africa/Ouagadougou",\n "Africa/Porto-Novo Time": "Africa/Porto-Novo",\n "Africa/Sao_Tome Time": "Africa/Sao_Tome",\n "Africa/Tripoli Time": "Africa/Tripoli",\n "Africa/Tunis Time": "Africa/Tunis",\n "Africa/Windhoek Time": "Africa/Windhoek",\n "America/Adak Time": "America/Adak",\n "America/Anchorage Time": "America/Anchorage",\n "America/Anguilla Time": "America/Anguilla",\n "America/Antigua Time": "America/Antigua",\n "America/Araguaina Time": "America/Araguaina",\n "America/Argentina/La_Rioja Time": "America/Argentina/La_Rioja",\n "America/Argentina/Rio_Gallegos Time": "America/Argentina/Rio_Gallegos",\n "America/Argentina/Salta Time": "America/Argentina/Salta",\n "America/Argentina/San_Juan Time": "America/Argentina/San_Juan",\n "America/Argentina/San_Luis Time": "America/Argentina/San_Luis",\n "America/Argentina/Tucuman Time": "America/Argentina/Tucuman",\n "America/Argentina/Ushuaia Time": "America/Argentina/Ushuaia",\n "America/Aruba Time": "America/Aruba",\n "America/Asuncion Time": "America/Asuncion",\n "America/Bahia Time": "America/Bahia",\n "America/Bahia_Banderas Time": "America/Bahia_Banderas",\n "America/Barbados Time": "America/Barbados",\n "America/Belem Time": "America/Belem",\n "America/Belize Time": "America/Belize",\n "America/Blanc-Sablon Time": "America/Blanc-Sablon",\n "America/Boa_Vista Time": "America/Boa_Vista",\n "America/Bogota Time": "America/Bogota",\n "America/Boise Time": "America/Boise",\n "America/Buenos_Aires Time": "America/Buenos_Aires",\n "America/Cambridge_Bay Time": "America/Cambridge_Bay",\n "America/Campo_Grande Time": "America/Campo_Grande",\n "America/Cancun Time": "America/Cancun",\n "America/Caracas Time": "America/Caracas",\n "America/Catamarca Time": "America/Catamarca",\n "America/Cayenne Time": "America/Cayenne",\n "America/Cayman Time": "America/Cayman",\n "America/Chicago Time": "America/Chicago",\n "America/Chihuahua Time": "America/Chihuahua",\n "America/Ciudad_Juarez Time": "America/Ciudad_Juarez",\n "America/Coral_Harbour Time": "America/Coral_Harbour",\n "America/Cordoba Time": "America/Cordoba",\n "America/Costa_Rica Time": "America/Costa_Rica",\n "America/Creston Time": "America/Creston",\n "America/Cuiaba Time": "America/Cuiaba",\n "America/Curacao Time": "America/Curacao",\n "America/Danmarkshavn Time": "America/Danmarkshavn",\n "America/Dawson Time": "America/Dawson",\n "America/Dawson_Creek Time": "America/Dawson_Creek",\n "America/Denver Time": "America/Denver",\n "America/Detroit Time": "America/Detroit",\n "America/Dominica Time": "America/Dominica",\n "America/Edmonton Time": "America/Edmonton",\n "America/Eirunepe Time": "America/Eirunepe",\n "America/El_Salvador Time": "America/El_Salvador",\n "America/Fort_Nelson Time": "America/Fort_Nelson",\n "America/Fortaleza Time": "America/Fortaleza",\n "America/Glace_Bay Time": "America/Glace_Bay",\n "America/Godthab Time": "America/Godthab",\n "America/Goose_Bay Time": "America/Goose_Bay",\n "America/Grand_Turk Time": "America/Grand_Turk",\n "America/Grenada Time": "America/Grenada",\n "America/Guadeloupe Time": "America/Guadeloupe",\n "America/Guatemala Time": "America/Guatemala",\n "America/Guayaquil Time": "America/Guayaquil",\n "America/Guyana Time": "America/Guyana",\n "America/Halifax Time": "America/Halifax",\n "America/Havana Time": "America/Havana",\n "America/Hermosillo Time": "America/Hermosillo",\n "America/Indiana/Knox Time": "America/Indiana/Knox",\n "America/Indiana/Marengo Time": "America/Indiana/Marengo",\n "America/Indiana/Petersburg Time": "America/Indiana/Petersburg",\n "America/Indiana/Tell_City Time": "America/Indiana/Tell_City",\n "America/Indiana/Vevay Time": "America/Indiana/Vevay",\n "America/Indiana/Vincennes Time": "America/Indiana/Vincennes",\n "America/Indiana/Winamac Time": "America/Indiana/Winamac",\n "America/Indianapolis Time": "America/Indianapolis",\n "America/Inuvik Time": "America/Inuvik",\n "America/Iqaluit Time": "America/Iqaluit",\n "America/Jamaica Time": "America/Jamaica",\n "America/Jujuy Time": "America/Jujuy",\n "America/Juneau Time": "America/Juneau",\n "America/Kentucky/Monticello Time": "America/Kentucky/Monticello",\n "America/Kralendijk Time": "America/Kralendijk",\n "America/La_Paz Time": "America/La_Paz",\n "America/Lima Time": "America/Lima",\n "America/Los_Angeles Time": "America/Los_Angeles",\n "America/Louisville Time": "America/Louisville",\n "America/Lower_Princes Time": "America/Lower_Princes",\n "America/Maceio Time": "America/Maceio",\n "America/Managua Time": "America/Managua",\n "America/Manaus Time": "America/Manaus",\n "America/Marigot Time": "America/Marigot",\n "America/Martinique Time": "America/Martinique",\n "America/Matamoros Time": "America/Matamoros",\n "America/Mazatlan Time": "America/Mazatlan",\n "America/Mendoza Time": "America/Mendoza",\n "America/Menominee Time": "America/Menominee",\n "America/Merida Time": "America/Merida",\n "America/Metlakatla Time": "America/Metlakatla",\n "America/Mexico_City Time": "America/Mexico_City",\n "America/Miquelon Time": "America/Miquelon",\n "America/Moncton Time": "America/Moncton",\n "America/Monterrey Time": "America/Monterrey",\n "America/Montevideo Time": "America/Montevideo",\n "America/Montserrat Time": "America/Montserrat",\n "America/Nassau Time": "America/Nassau",\n "America/New_York Time": "America/New_York",\n "America/Nipigon Time": "America/Nipigon",\n "America/Nome Time": "America/Nome",\n "America/Noronha Time": "America/Noronha",\n "America/North_Dakota/Beulah Time": "America/North_Dakota/Beulah",\n "America/North_Dakota/Center Time": "America/North_Dakota/Center",\n "America/North_Dakota/New_Salem Time": "America/North_Dakota/New_Salem",\n "America/Ojinaga Time": "America/Ojinaga",\n "America/Panama Time": "America/Panama",\n "America/Pangnirtung Time": "America/Pangnirtung",\n "America/Paramaribo Time": "America/Paramaribo",\n "America/Phoenix Time": "America/Phoenix",\n "America/Port-au-Prince Time": "America/Port-au-Prince",\n "America/Port_of_Spain Time": "America/Port_of_Spain",\n "America/Porto_Velho Time": "America/Porto_Velho",\n "America/Puerto_Rico Time": "America/Puerto_Rico",\n "America/Punta_Arenas Time": "America/Punta_Arenas",\n "America/Rainy_River Time": "America/Rainy_River",\n "America/Rankin_Inlet Time": "America/Rankin_Inlet",\n "America/Recife Time": "America/Recife",\n "America/Regina Time": "America/Regina",\n "America/Resolute Time": "America/Resolute",\n "America/Rio_Branco Time": "America/Rio_Branco",\n "America/Santa_Isabel Time": "America/Santa_Isabel",\n "America/Santarem Time": "America/Santarem",\n "America/Santiago Time": "America/Santiago",\n "America/Santo_Domingo Time": "America/Santo_Domingo",\n "America/Sao_Paulo Time": "America/Sao_Paulo",\n "America/Scoresbysund Time": "America/Scoresbysund",\n "America/Sitka Time": "America/Sitka",\n "America/St_Barthelemy Time": "America/St_Barthelemy",\n "America/St_Johns Time": "America/St_Johns",\n "America/St_Kitts Time": "America/St_Kitts",\n "America/St_Lucia Time": "America/St_Lucia",\n "America/St_Thomas Time": "America/St_Thomas",\n "America/St_Vincent Time": "America/St_Vincent",\n "America/Swift_Current Time": "America/Swift_Current",\n "America/Tegucigalpa Time": "America/Tegucigalpa",\n "America/Thule Time": "America/Thule",\n "America/Thunder_Bay Time": "America/Thunder_Bay",\n "America/Tijuana Time": "America/Tijuana",\n "America/Toronto Time": "America/Toronto",\n "America/Tortola Time": "America/Tortola",\n "America/Vancouver Time": "America/Vancouver",\n "America/Whitehorse Time": "America/Whitehorse",\n "America/Winnipeg Time": "America/Winnipeg",\n "America/Yakutat Time": "America/Yakutat",\n "America/Yellowknife Time": "America/Yellowknife",\n "Antarctica/Casey Time": "Antarctica/Casey",\n "Antarctica/Davis Time": "Antarctica/Davis",\n "Antarctica/DumontDUrville Time": "Antarctica/DumontDUrville",\n "Antarctica/Macquarie Time": "Antarctica/Macquarie",\n "Antarctica/Mawson Time": "Antarctica/Mawson",\n "Antarctica/McMurdo Time": "Antarctica/McMurdo",\n "Antarctica/Palmer Time": "Antarctica/Palmer",\n "Antarctica/Rothera Time": "Antarctica/Rothera",\n "Antarctica/Syowa Time": "Antarctica/Syowa",\n "Antarctica/Troll Time": "Antarctica/Troll",\n "Antarctica/Vostok Time": "Antarctica/Vostok",\n "Arctic/Longyearbyen Time": "Arctic/Longyearbyen",\n "Asia/Aden Time": "Asia/Aden",\n "Asia/Almaty Time": "Asia/Almaty",\n "Asia/Amman Time": "Asia/Amman",\n "Asia/Anadyr Time": "Asia/Anadyr",\n "Asia/Aqtau Time": "Asia/Aqtau",\n "Asia/Aqtobe Time": "Asia/Aqtobe",\n "Asia/Ashgabat Time": "Asia/Ashgabat",\n "Asia/Atyrau Time": "Asia/Atyrau",\n "Asia/Baghdad Time": "Asia/Baghdad",\n "Asia/Bahrain Time": "Asia/Bahrain",\n "Asia/Baku Time": "Asia/Baku",\n "Asia/Bangkok Time": "Asia/Bangkok",\n "Asia/Barnaul Time": "Asia/Barnaul",\n "Asia/Beirut Time": "Asia/Beirut",\n "Asia/Bishkek Time": "Asia/Bishkek",\n "Asia/Brunei Time": "Asia/Brunei",\n "Asia/Calcutta Time": "Asia/Calcutta",\n "Asia/Chita Time": "Asia/Chita",\n "Asia/Choibalsan Time": "Asia/Choibalsan",\n "Asia/Colombo Time": "Asia/Colombo",\n "Asia/Damascus Time": "Asia/Damascus",\n "Asia/Dhaka Time": "Asia/Dhaka",\n "Asia/Dili Time": "Asia/Dili",\n "Asia/Dubai Time": "Asia/Dubai",\n "Asia/Dushanbe Time": "Asia/Dushanbe",\n "Asia/Famagusta Time": "Asia/Famagusta",\n "Asia/Gaza Time": "Asia/Gaza",\n "Asia/Hebron Time": "Asia/Hebron",\n "Asia/Hong_Kong Time": "Asia/Hong_Kong",\n "Asia/Hovd Time": "Asia/Hovd",\n "Asia/Irkutsk Time": "Asia/Irkutsk",\n "Asia/Jakarta Time": "Asia/Jakarta",\n "Asia/Jayapura Time": "Asia/Jayapura",\n "Asia/Jerusalem Time": "Asia/Jerusalem",\n "Asia/Kabul Time": "Asia/Kabul",\n "Asia/Kamchatka Time": "Asia/Kamchatka",\n "Asia/Karachi Time": "Asia/Karachi",\n "Asia/Katmandu Time": "Asia/Katmandu",\n "Asia/Khandyga Time": "Asia/Khandyga",\n "Asia/Krasnoyarsk Time": "Asia/Krasnoyarsk",\n "Asia/Kuala_Lumpur Time": "Asia/Kuala_Lumpur",\n "Asia/Kuching Time": "Asia/Kuching",\n "Asia/Kuwait Time": "Asia/Kuwait",\n "Asia/Macau Time": "Asia/Macau",\n "Asia/Magadan Time": "Asia/Magadan",\n "Asia/Makassar Time": "Asia/Makassar",\n "Asia/Manila Time": "Asia/Manila",\n "Asia/Muscat Time": "Asia/Muscat",\n "Asia/Nicosia Time": "Asia/Nicosia",\n "Asia/Novokuznetsk Time": "Asia/Novokuznetsk",\n "Asia/Novosibirsk Time": "Asia/Novosibirsk",\n "Asia/Omsk Time": "Asia/Omsk",\n "Asia/Oral Time": "Asia/Oral",\n "Asia/Phnom_Penh Time": "Asia/Phnom_Penh",\n "Asia/Pontianak Time": "Asia/Pontianak",\n "Asia/Pyongyang Time": "Asia/Pyongyang",\n "Asia/Qatar Time": "Asia/Qatar",\n "Asia/Qostanay Time": "Asia/Qostanay",\n "Asia/Qyzylorda Time": "Asia/Qyzylorda",\n "Asia/Rangoon Time": "Asia/Rangoon",\n "Asia/Riyadh Time": "Asia/Riyadh",\n "Asia/Saigon Time": "Asia/Saigon",\n "Asia/Sakhalin Time": "Asia/Sakhalin",\n "Asia/Samarkand Time": "Asia/Samarkand",\n "Asia/Seoul Time": "Asia/Seoul",\n "Asia/Shanghai Time": "Asia/Shanghai",\n "Asia/Singapore Time": "Asia/Singapore",\n "Asia/Srednekolymsk Time": "Asia/Srednekolymsk",\n "Asia/Taipei Time": "Asia/Taipei",\n "Asia/Tashkent Time": "Asia/Tashkent",\n "Asia/Tbilisi Time": "Asia/Tbilisi",\n "Asia/Tehran Time": "Asia/Tehran",\n "Asia/Thimphu Time": "Asia/Thimphu",\n "Asia/Tokyo Time": "Asia/Tokyo",\n "Asia/Tomsk Time": "Asia/Tomsk",\n "Asia/Ulaanbaatar Time": "Asia/Ulaanbaatar",\n "Asia/Urumqi Time": "Asia/Urumqi",\n "Asia/Ust-Nera Time": "Asia/Ust-Nera",\n "Asia/Vientiane Time": "Asia/Vientiane",\n "Asia/Vladivostok Time": "Asia/Vladivostok",\n "Asia/Yakutsk Time": "Asia/Yakutsk",\n "Asia/Yekaterinburg Time": "Asia/Yekaterinburg",\n "Asia/Yerevan Time": "Asia/Yerevan",\n "Atlantic/Azores Time": "Atlantic/Azores",\n "Atlantic/Bermuda Time": "Atlantic/Bermuda",\n "Atlantic/Canary Time": "Atlantic/Canary",\n "Atlantic/Cape_Verde Time": "Atlantic/Cape_Verde",\n "Atlantic/Faeroe Time": "Atlantic/Faeroe",\n "Atlantic/Madeira Time": "Atlantic/Madeira",\n "Atlantic/Reykjavik Time": "Atlantic/Reykjavik",\n "Atlantic/South_Georgia Time": "Atlantic/South_Georgia",\n "Atlantic/St_Helena Time": "Atlantic/St_Helena",\n "Atlantic/Stanley Time": "Atlantic/Stanley",\n "Australia/Adelaide Time": "Australia/Adelaide",\n "Australia/Brisbane Time": "Australia/Brisbane",\n "Australia/Broken_Hill Time": "Australia/Broken_Hill",\n "Australia/Currie Time": "Australia/Currie",\n "Australia/Darwin Time": "Australia/Darwin",\n "Australia/Eucla Time": "Australia/Eucla",\n "Australia/Hobart Time": "Australia/Hobart",\n "Australia/Lindeman Time": "Australia/Lindeman",\n "Australia/Lord_Howe Time": "Australia/Lord_Howe",\n "Australia/Melbourne Time": "Australia/Melbourne",\n "Australia/Perth Time": "Australia/Perth",\n "Australia/Sydney Time": "Australia/Sydney",\n "Europe/Amsterdam Time": "Europe/Amsterdam",\n "Europe/Andorra Time": "Europe/Andorra",\n "Europe/Astrakhan Time": "Europe/Astrakhan",\n "Europe/Athens Time": "Europe/Athens",\n "Europe/Belgrade Time": "Europe/Belgrade",\n "Europe/Berlin Time": "Europe/Berlin",\n "Europe/Bratislava Time": "Europe/Bratislava",\n "Europe/Brussels Time": "Europe/Brussels",\n "Europe/Bucharest Time": "Europe/Bucharest",\n "Europe/Budapest Time": "Europe/Budapest",\n "Europe/Busingen Time": "Europe/Busingen",\n "Europe/Chisinau Time": "Europe/Chisinau",\n "Europe/Copenhagen Time": "Europe/Copenhagen",\n "Europe/Dublin Time": "Europe/Dublin",\n "Europe/Gibraltar Time": "Europe/Gibraltar",\n "Europe/Guernsey Time": "Europe/Guernsey",\n "Europe/Helsinki Time": "Europe/Helsinki",\n "Europe/Isle_of_Man Time": "Europe/Isle_of_Man",\n "Europe/Istanbul Time": "Europe/Istanbul",\n "Europe/Jersey Time": "Europe/Jersey",\n "Europe/Kaliningrad Time": "Europe/Kaliningrad",\n "Europe/Kiev Time": "Europe/Kiev",\n "Europe/Kirov Time": "Europe/Kirov",\n "Europe/Lisbon Time": "Europe/Lisbon",\n "Europe/Ljubljana Time": "Europe/Ljubljana",\n "Europe/London Time": "Europe/London",\n "Europe/Luxembourg Time": "Europe/Luxembourg",\n "Europe/Madrid Time": "Europe/Madrid",\n "Europe/Malta Time": "Europe/Malta",\n "Europe/Mariehamn Time": "Europe/Mariehamn",\n "Europe/Minsk Time": "Europe/Minsk",\n "Europe/Monaco Time": "Europe/Monaco",\n "Europe/Moscow Time": "Europe/Moscow",\n "Europe/Oslo Time": "Europe/Oslo",\n "Europe/Paris Time": "Europe/Paris",\n "Europe/Podgorica Time": "Europe/Podgorica",\n "Europe/Prague Time": "Europe/Prague",\n "Europe/Riga Time": "Europe/Riga",\n "Europe/Rome Time": "Europe/Rome",\n "Europe/Samara Time": "Europe/Samara",\n "Europe/San_Marino Time": "Europe/San_Marino",\n "Europe/Sarajevo Time": "Europe/Sarajevo",\n "Europe/Saratov Time": "Europe/Saratov",\n "Europe/Simferopol Time": "Europe/Simferopol",\n "Europe/Skopje Time": "Europe/Skopje",\n "Europe/Sofia Time": "Europe/Sofia",\n "Europe/Stockholm Time": "Europe/Stockholm",\n "Europe/Tallinn Time": "Europe/Tallinn",\n "Europe/Tirane Time": "Europe/Tirane",\n "Europe/Ulyanovsk Time": "Europe/Ulyanovsk",\n "Europe/Uzhgorod Time": "Europe/Uzhgorod",\n "Europe/Vaduz Time": "Europe/Vaduz",\n "Europe/Vatican Time": "Europe/Vatican",\n "Europe/Vienna Time": "Europe/Vienna",\n "Europe/Vilnius Time": "Europe/Vilnius",\n "Europe/Volgograd Time": "Europe/Volgograd",\n "Europe/Warsaw Time": "Europe/Warsaw",\n "Europe/Zagreb Time": "Europe/Zagreb",\n "Europe/Zaporozhye Time": "Europe/Zaporozhye",\n "Europe/Zurich Time": "Europe/Zurich",\n "Indian/Antananarivo Time": "Indian/Antananarivo",\n "Indian/Chagos Time": "Indian/Chagos",\n "Indian/Christmas Time": "Indian/Christmas",\n "Indian/Cocos Time": "Indian/Cocos",\n "Indian/Comoro Time": "Indian/Comoro",\n "Indian/Kerguelen Time": "Indian/Kerguelen",\n "Indian/Mahe Time": "Indian/Mahe",\n "Indian/Maldives Time": "Indian/Maldives",\n "Indian/Mauritius Time": "Indian/Mauritius",\n "Indian/Mayotte Time": "Indian/Mayotte",\n "Indian/Reunion Time": "Indian/Reunion",\n "Pacific/Apia Time": "Pacific/Apia",\n "Pacific/Auckland Time": "Pacific/Auckland",\n "Pacific/Bougainville Time": "Pacific/Bougainville",\n "Pacific/Chatham Time": "Pacific/Chatham",\n "Pacific/Easter Time": "Pacific/Easter",\n "Pacific/Efate Time": "Pacific/Efate",\n "Pacific/Enderbury Time": "Pacific/Enderbury",\n "Pacific/Fakaofo Time": "Pacific/Fakaofo",\n "Pacific/Fiji Time": "Pacific/Fiji",\n "Pacific/Funafuti Time": "Pacific/Funafuti",\n "Pacific/Galapagos Time": "Pacific/Galapagos",\n "Pacific/Gambier Time": "Pacific/Gambier",\n "Pacific/Guadalcanal Time": "Pacific/Guadalcanal",\n "Pacific/Guam Time": "Pacific/Guam",\n "Pacific/Honolulu Time": "Pacific/Honolulu",\n "Pacific/Johnston Time": "Pacific/Johnston",\n "Pacific/Kiritimati Time": "Pacific/Kiritimati",\n "Pacific/Kosrae Time": "Pacific/Kosrae",\n "Pacific/Kwajalein Time": "Pacific/Kwajalein",\n "Pacific/Majuro Time": "Pacific/Majuro",\n "Pacific/Marquesas Time": "Pacific/Marquesas",\n "Pacific/Midway Time": "Pacific/Midway",\n "Pacific/Nauru Time": "Pacific/Nauru",\n "Pacific/Niue Time": "Pacific/Niue",\n "Pacific/Norfolk Time": "Pacific/Norfolk",\n "Pacific/Noumea Time": "Pacific/Noumea",\n "Pacific/Pago_Pago Time": "Pacific/Pago_Pago",\n "Pacific/Palau Time": "Pacific/Palau",\n "Pacific/Pitcairn Time": "Pacific/Pitcairn",\n "Pacific/Ponape Time": "Pacific/Ponape",\n "Pacific/Port_Moresby Time": "Pacific/Port_Moresby",\n "Pacific/Rarotonga Time": "Pacific/Rarotonga",\n "Pacific/Saipan Time": "Pacific/Saipan",\n "Pacific/Tahiti Time": "Pacific/Tahiti",\n "Pacific/Tarawa Time": "Pacific/Tarawa",\n "Pacific/Tongatapu Time": "Pacific/Tongatapu",\n "Pacific/Truk Time": "Pacific/Truk",\n "Pacific/Wake Time": "Pacific/Wake",\n "Pacific/Wallis Time": "Pacific/Wallis"\n};\nstyled_components__WEBPACK_IMPORTED_MODULE_1___default().div(\n ({ theme: { typography: e, fontWeight: t, lineHeight: o } }) => (0,styled_components__WEBPACK_IMPORTED_MODULE_1__.css)`\n display: flex;\n align-items: center;\n font-size: ${e.t12};\n line-height: ${o.lh22};\n font-weight: ${t.light};\n `\n);\nconst lU = (styled_components__WEBPACK_IMPORTED_MODULE_1___default().label)`\n display: flex;\n align-items: center;\n`, pU = (styled_components__WEBPACK_IMPORTED_MODULE_1___default().span)`\n margin-left: 8px;\n`, jn = styled_components__WEBPACK_IMPORTED_MODULE_1___default().div(\n ({ theme: { colors: e, borderRadius: t } }) => (0,styled_components__WEBPACK_IMPORTED_MODULE_1__.css)`\n position: relative;\n width: 24px;\n height: 16px;\n background-color: ${e.toggleSwitch.toggleBgInactiveDefault};\n border-radius: 33px;\n cursor: pointer;\n transition: background-color 0.2s;\n\n &:after {\n content: \'\';\n position: absolute;\n top: calc(50% - 5px);\n left: 4px;\n width: 10px;\n height: 10px;\n background-color: ${e.backgrounds.bgPrimary};\n border-radius: ${t.circle};\n transition: transform 0.2s;\n }\n &:hover {\n background-color: ${e.backgrounds.bgDisabledPrimary};\n }\n &:focus-visible {\n border: 1px solid ${e.border.borderFocused};\n outline-color: ${e.border.borderFocused};\n }\n `\n), dU = styled_components__WEBPACK_IMPORTED_MODULE_1___default().input(\n ({ theme: { colors: e } }) => (0,styled_components__WEBPACK_IMPORTED_MODULE_1__.css)`\n display: none;\n\n &:disabled + ${jn} {\n background-color: ${e.backgrounds.bgDisabledSecondary}; //CBC9E0;\n &:after {\n background-color: ${e.backgrounds.bgDisabledPrimary}; \n }\n \n &:hover {\n background-color: ${e.backgrounds.bgDisabledSecondary} !important;\n }\n }\n\n &:checked:disabled + ${jn} {\n background-color: ${e.backgrounds.bgReadOnly};\n &:after {\n background-color: ${e.backgrounds.bgPrimary}; \n }\n &:hover {\n background-color: ${e.backgrounds.bgReadOnly} !important;\n }\n }\n\n &:checked + ${jn} {\n background-color: ${e.backgrounds.bgTertiary};\n &:after {\n background-color: ${e.backgrounds.bgPrimary}; \n }\n &:hover {\n background-color: ${e.backgrounds.bgPressed}!important;\n }\n &:after {\n transform: translateX(6px);\n }\n }\n `\n), xn = {\n on: "On",\n off: "Off"\n};\nfunction bU({ onChangeCallback: e, hasLabel: t, isDisabled: o, ...n }, r) {\n const [i, a] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(\n n.defaultChecked ? xn.on : xn.off\n );\n return (\n // \n /* @__PURE__ */ e1(lU, { children: [\n /* @__PURE__ */ c(\n dU,\n {\n type: "checkbox",\n onChange: (l) => {\n const p = l.currentTarget.checked;\n a(p ? xn.on : xn.off), e && e(p);\n },\n disabled: o,\n ...n\n }\n ),\n /* @__PURE__ */ c(jn, { tabIndex: 1 }),\n t && /* @__PURE__ */ c(pU, { children: i })\n ] })\n );\n}\nconst MU = (0,react__WEBPACK_IMPORTED_MODULE_0__.forwardRef)(bU);\nfunction Ca(e) {\n const {\n label: t,\n datePickerStateValue: o,\n getAllValue: n,\n $isTimeZone: r,\n isDate: i,\n preSelectedValue: a,\n calendarManualHandler: s,\n manulaStateInputValue: l,\n isDisabled: p,\n placeholder: d,\n isRequired: b,\n onChange: M,\n todayHandler: u,\n confirmHandler: A,\n getSelectedTime: z,\n getTimeZoneValue: f,\n preSelectedTime: O,\n setIsActiveTime: h,\n $isTime: g,\n value: v,\n handleClearButton: L,\n hideClearButton: y,\n ...B\n } = e, [X, F] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(""), [T, w] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(!1), [H, C] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)([]), [q, m] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)({}), [k, x] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(null), [N, V] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(null), [R, I] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(), [j, U] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(""), [_, r1] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)({}), [K, Q] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)({});\n let E = [];\n const [D, G] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)([]), [J, S] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)([]), W = [\n {\n icon: "",\n text: "AM",\n value: "AM"\n },\n {\n icon: "",\n text: "PM",\n value: "PM"\n }\n ];\n (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => {\n t1();\n }, []), (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => {\n j && d1(j) || ((k == null ? void 0 : k.label) || (_ == null ? void 0 : _.label)) != null && ((K == null ? void 0 : K.label) || (N == null ? void 0 : N.label)) != null && `${(k == null ? void 0 : k.label) == null ? _ == null ? void 0 : _.label : k == null ? void 0 : k.label}${(N == null ? void 0 : N.label) == null ? K == null ? void 0 : K.label : N == null ? void 0 : N.label}${X}`;\n }, []), (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => {\n i1(), n1();\n }, []), (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => {\n O != null && P(O);\n }, [O]);\n const P = (a1) => {\n const l1 = a1.slice(a1.indexOf(":") + 1), p1 = a1.substring(0, a1.indexOf(":"));\n let M1 = l1.indexOf("AM"), A1 = l1.indexOf("PM");\n const u1 = l1.trim().slice(0, 2);\n M1 > -1 ? F("AM") : A1 > -1 && F("PM");\n let h1 = p1.trim();\n r1({\n label: h1,\n value: h1\n }), Q({\n label: u1,\n value: u1\n });\n }, Y = (a1, l1) => {\n let p1 = [];\n a1 == null || a1.filter((M1, A1) => {\n var u1;\n (u1 = M1 == null ? void 0 : M1.timeZone) != null && u1.zone.includes(l1) && p1.push({\n group: M1.group,\n value: A1,\n timeZone: {\n zone: M1.timeZone.zone,\n time: M1.timeZone.time\n }\n });\n }), m(p1[0]);\n };\n (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => {\n const a1 = Intl.DateTimeFormat().resolvedOptions().timeZone;\n Y(E, a1);\n }, []);\n const Z = () => /* @__PURE__ */ c(\n cU,\n {\n data: W,\n defaultCheckedValue: X,\n hasClearButton: !1,\n isError: !1,\n isDisabled: !1,\n isReadOnly: !1,\n onChangeCallback: (a1) => {\n F(a1.target.value);\n },\n name: "toggleGroup"\n }\n ), t1 = () => {\n Object == null || Object.keys(mc).map(function(a1, l1) {\n let p1 = {\n timeZone: mc[a1],\n // year: \'numeric\',\n // month: \'numeric\',\n // day: \'numeric\',\n hour: "numeric",\n minute: "numeric"\n // second: \'numeric\',\n }, A1 = new Intl.DateTimeFormat([], p1).format(/* @__PURE__ */ new Date()), u1 = [\n "Pacific",\n "America",\n "GMT",\n "Europe",\n "Africa",\n "Atlantic",\n "Asia",\n "Australia"\n ];\n const h1 = A1.slice(A1.indexOf(",") + 1);\n for (let C1 = 0; C1 <= u1.length; C1++)\n a1.indexOf(u1[C1]) >= 0 && E.push({\n group: u1[C1],\n value: l1,\n timeZone: {\n zone: a1,\n time: h1\n }\n });\n }), C(E);\n }, i1 = () => {\n let a1 = [];\n for (let l1 = 1; l1 <= 12; l1++)\n a1 == null || a1.push({\n label: l1 > 9 ? `${l1}` : `0${l1}`,\n value: l1 > 9 ? `${l1}` : `0${l1}`\n });\n G(a1);\n }, n1 = () => {\n let a1 = [];\n for (let l1 = 0; l1 <= 60; l1++)\n a1 == null || a1.push({\n label: l1 > 9 ? `${l1}` : `0${l1}`,\n value: l1 > 9 ? `${l1}` : `0${l1}`\n });\n S(a1);\n }, s1 = (a1) => {\n I(a1), f && f(a1);\n }, d1 = (a1) => {\n let l1 = a1.replace(/[AP PM]/g, ""), p1 = /^([0-1]?[0-9]|2[0-4]):([0-5][0-9])(:[0-5][0-9])?$/.test(\n l1\n ), M1, A1 = a1.indexOf("AM"), u1 = a1.indexOf("PM");\n return p1 && (A1 > -1 || u1 > -1) ? M1 = !0 : M1 = !1, M1;\n }, b1 = (a1) => {\n x(a1), U("");\n }, c1 = (a1) => {\n V(a1), U("");\n };\n return (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => {\n let a1 = k == null ? void 0 : k.value, l1 = N == null ? void 0 : N.value, p1 = `${a1} : ${l1} ${X}`;\n a1 != null && l1 != null && X && z && z(p1), q && f && f(q), _ != null && _.value && w(!0);\n }, [k, N, X, q]), /* @__PURE__ */ e1(wp, { isDisabled: p, $isTime: T, children: [\n i && /* @__PURE__ */ e1(s0, { children: [\n /* @__PURE__ */ c(DW, { children: /* @__PURE__ */ c(P2, {}) }),\n /* @__PURE__ */ e1(FW, { $isTime: T, children: [\n /* @__PURE__ */ c(XW, { children: "Select Time" }),\n /* @__PURE__ */ c(\n MU,\n {\n defaultChecked: T,\n onChangeCallback: (a1) => {\n w(a1), h && h(a1);\n },\n hasLabel: !1\n }\n )\n ] })\n ] }),\n T && !g && /* @__PURE__ */ c(react__WEBPACK_IMPORTED_MODULE_0__.Fragment, { children: /* @__PURE__ */ e1(S7, { children: [\n /* @__PURE__ */ e1(x7, { children: [\n /* @__PURE__ */ c(\n tt,\n {\n data: D,\n placeholder: "hh",\n dropdownBodyWidth: "70px",\n position: "right",\n isSearchable: !1,\n isBodyGenerated: !1,\n defaultValues: _,\n selectedOptions: b1\n }\n ),\n /* @__PURE__ */ c(W7, { children: ":" }),\n /* @__PURE__ */ c(\n tt,\n {\n data: J,\n dropdownBodyWidth: "70px",\n placeholder: "mm",\n position: "right",\n isSearchable: !1,\n isBodyGenerated: !1,\n defaultValues: K,\n selectedOptions: c1\n }\n )\n ] }),\n /* @__PURE__ */ c(R7, { children: Z() })\n ] }) }),\n !i && g && /* @__PURE__ */ c(react__WEBPACK_IMPORTED_MODULE_0__.Fragment, { children: /* @__PURE__ */ e1(S7, { children: [\n /* @__PURE__ */ e1(x7, { children: [\n /* @__PURE__ */ c(\n tt,\n {\n data: D,\n placeholder: "hh",\n dropdownBodyWidth: "70px",\n position: "right",\n isSearchable: !1,\n isBodyGenerated: !1,\n defaultValues: _,\n selectedOptions: b1\n }\n ),\n /* @__PURE__ */ c(W7, { children: ":" }),\n /* @__PURE__ */ c(\n tt,\n {\n data: J,\n dropdownBodyWidth: "70px",\n placeholder: "mm",\n position: "right",\n isSearchable: !1,\n isBodyGenerated: !1,\n defaultValues: K,\n selectedOptions: c1\n }\n )\n ] }),\n /* @__PURE__ */ c(R7, { children: Z() })\n ] }) }),\n r || T && /* @__PURE__ */ c(B7, { children: /* @__PURE__ */ c(\n tt,\n {\n data: H,\n placeholder: "pick a timezone",\n dropdownBodyWidth: "300px",\n iconRight: "World",\n position: "center",\n isSearchable: !0,\n isBodyGenerated: !1,\n selectedOptions: s1,\n defaultValues: q,\n handleClearFn: L,\n isHideClearBtn: y\n }\n ) }),\n r && !i && /* @__PURE__ */ c(B7, { children: /* @__PURE__ */ c(\n tt,\n {\n data: H,\n placeholder: "pick a timezone",\n dropdownBodyWidth: "300px",\n iconRight: "World",\n label: g ? "" : "Time Zone Picker",\n position: "center",\n isSearchable: !0,\n isBodyGenerated: !1,\n selectedOptions: s1,\n defaultValues: q,\n isDisabled: p,\n handleClearFn: L,\n isHideClearBtn: y\n }\n ) }),\n i && /* @__PURE__ */ c(y7, { children: /* @__PURE__ */ c(P2, {}) }),\n !i && g && /* @__PURE__ */ c(y7, { children: /* @__PURE__ */ c(P2, {}) })\n ] });\n}\n//! moment.js\n//! version : 2.30.1\n//! authors : Tim Wood, Iskren Chernev, Moment.js contributors\n//! license : MIT\n//! momentjs.com\nvar Db;\nfunction $1() {\n return Db.apply(null, arguments);\n}\nfunction AU(e) {\n Db = e;\n}\nfunction qe(e) {\n return e instanceof Array || Object.prototype.toString.call(e) === "[object Array]";\n}\nfunction p3(e) {\n return e != null && Object.prototype.toString.call(e) === "[object Object]";\n}\nfunction k0(e, t) {\n return Object.prototype.hasOwnProperty.call(e, t);\n}\nfunction K6(e) {\n if (Object.getOwnPropertyNames)\n return Object.getOwnPropertyNames(e).length === 0;\n var t;\n for (t in e)\n if (k0(e, t))\n return !1;\n return !0;\n}\nfunction T2(e) {\n return e === void 0;\n}\nfunction Mt(e) {\n return typeof e == "number" || Object.prototype.toString.call(e) === "[object Number]";\n}\nfunction Ur(e) {\n return e instanceof Date || Object.prototype.toString.call(e) === "[object Date]";\n}\nfunction Hb(e, t) {\n var o = [], n, r = e.length;\n for (n = 0; n < r; ++n)\n o.push(t(e[n], n));\n return o;\n}\nfunction Wt(e, t) {\n for (var o in t)\n k0(t, o) && (e[o] = t[o]);\n return k0(t, "toString") && (e.toString = t.toString), k0(t, "valueOf") && (e.valueOf = t.valueOf), e;\n}\nfunction Qe(e, t, o, n) {\n return cM(e, t, o, n, !0).utc();\n}\nfunction uU() {\n return {\n empty: !1,\n unusedTokens: [],\n unusedInput: [],\n overflow: -2,\n charsLeftOver: 0,\n nullInput: !1,\n invalidEra: null,\n invalidMonth: null,\n invalidFormat: !1,\n userInvalidated: !1,\n iso: !1,\n parsedDateParts: [],\n era: null,\n meridiem: null,\n rfc2822: !1,\n weekdayMismatch: !1\n };\n}\nfunction C0(e) {\n return e._pf == null && (e._pf = uU()), e._pf;\n}\nvar v5;\nArray.prototype.some ? v5 = Array.prototype.some : v5 = function(e) {\n var t = Object(this), o = t.length >>> 0, n;\n for (n = 0; n < o; n++)\n if (n in t && e.call(this, t[n], n, t))\n return !0;\n return !1;\n};\nfunction J6(e) {\n var t = null, o = !1, n = e._d && !isNaN(e._d.getTime());\n if (n && (t = C0(e), o = v5.call(t.parsedDateParts, function(r) {\n return r != null;\n }), n = t.overflow < 0 && !t.empty && !t.invalidEra && !t.invalidMonth && !t.invalidWeekday && !t.weekdayMismatch && !t.nullInput && !t.invalidFormat && !t.userInvalidated && (!t.meridiem || t.meridiem && o), e._strict && (n = n && t.charsLeftOver === 0 && t.unusedTokens.length === 0 && t.bigHour === void 0)), Object.isFrozen == null || !Object.isFrozen(e))\n e._isValid = n;\n else\n return n;\n return e._isValid;\n}\nfunction ni(e) {\n var t = Qe(NaN);\n return e != null ? Wt(C0(t), e) : C0(t).userInvalidated = !0, t;\n}\nvar Lc = $1.momentProperties = [], ma = !1;\nfunction _6(e, t) {\n var o, n, r, i = Lc.length;\n if (T2(t._isAMomentObject) || (e._isAMomentObject = t._isAMomentObject), T2(t._i) || (e._i = t._i), T2(t._f) || (e._f = t._f), T2(t._l) || (e._l = t._l), T2(t._strict) || (e._strict = t._strict), T2(t._tzm) || (e._tzm = t._tzm), T2(t._isUTC) || (e._isUTC = t._isUTC), T2(t._offset) || (e._offset = t._offset), T2(t._pf) || (e._pf = C0(t)), T2(t._locale) || (e._locale = t._locale), i > 0)\n for (o = 0; o < i; o++)\n n = Lc[o], r = t[n], T2(r) || (e[n] = r);\n return e;\n}\nfunction Yr(e) {\n _6(this, e), this._d = new Date(e._d != null ? e._d.getTime() : NaN), this.isValid() || (this._d = /* @__PURE__ */ new Date(NaN)), ma === !1 && (ma = !0, $1.updateOffset(this), ma = !1);\n}\nfunction ye(e) {\n return e instanceof Yr || e != null && e._isAMomentObject != null;\n}\nfunction Vb(e) {\n $1.suppressDeprecationWarnings === !1 && typeof console < "u" && console.warn && console.warn("Deprecation warning: " + e);\n}\nfunction ue(e, t) {\n var o = !0;\n return Wt(function() {\n if ($1.deprecationHandler != null && $1.deprecationHandler(null, e), o) {\n var n = [], r, i, a, s = arguments.length;\n for (i = 0; i < s; i++) {\n if (r = "", typeof arguments[i] == "object") {\n r += `\n[` + i + "] ";\n for (a in arguments[0])\n k0(arguments[0], a) && (r += a + ": " + arguments[0][a] + ", ");\n r = r.slice(0, -2);\n } else\n r = arguments[i];\n n.push(r);\n }\n Vb(\n e + `\nArguments: ` + Array.prototype.slice.call(n).join("") + `\n` + new Error().stack\n ), o = !1;\n }\n return t.apply(this, arguments);\n }, t);\n}\nvar vc = {};\nfunction Pb(e, t) {\n $1.deprecationHandler != null && $1.deprecationHandler(e, t), vc[e] || (Vb(t), vc[e] = !0);\n}\n$1.suppressDeprecationWarnings = !1;\n$1.deprecationHandler = null;\nfunction Ze(e) {\n return typeof Function < "u" && e instanceof Function || Object.prototype.toString.call(e) === "[object Function]";\n}\nfunction zU(e) {\n var t, o;\n for (o in e)\n k0(e, o) && (t = e[o], Ze(t) ? this[o] = t : this["_" + o] = t);\n this._config = e, this._dayOfMonthOrdinalParseLenient = new RegExp(\n (this._dayOfMonthOrdinalParse.source || this._ordinalParse.source) + "|" + /\\d{1,2}/.source\n );\n}\nfunction q5(e, t) {\n var o = Wt({}, e), n;\n for (n in t)\n k0(t, n) && (p3(e[n]) && p3(t[n]) ? (o[n] = {}, Wt(o[n], e[n]), Wt(o[n], t[n])) : t[n] != null ? o[n] = t[n] : delete o[n]);\n for (n in e)\n k0(e, n) && !k0(t, n) && p3(e[n]) && (o[n] = Wt({}, o[n]));\n return o;\n}\nfunction $6(e) {\n e != null && this.set(e);\n}\nvar y5;\nObject.keys ? y5 = Object.keys : y5 = function(e) {\n var t, o = [];\n for (t in e)\n k0(e, t) && o.push(t);\n return o;\n};\nvar hU = {\n sameDay: "[Today at] LT",\n nextDay: "[Tomorrow at] LT",\n nextWeek: "dddd [at] LT",\n lastDay: "[Yesterday at] LT",\n lastWeek: "[Last] dddd [at] LT",\n sameElse: "L"\n};\nfunction OU(e, t, o) {\n var n = this._calendar[e] || this._calendar.sameElse;\n return Ze(n) ? n.call(t, o) : n;\n}\nfunction Ge(e, t, o) {\n var n = "" + Math.abs(e), r = t - n.length, i = e >= 0;\n return (i ? o ? "+" : "" : "-") + Math.pow(10, Math.max(0, r)).toString().substr(1) + n;\n}\nvar es = /(\\[[^\\[]*\\])|(\\\\)?([Hh]mm(ss)?|Mo|MM?M?M?|Do|DDDo|DD?D?D?|ddd?d?|do?|w[o|w]?|W[o|W]?|Qo?|N{1,5}|YYYYYY|YYYYY|YYYY|YY|y{2,4}|yo?|gg(ggg?)?|GG(GGG?)?|e|E|a|A|hh?|HH?|kk?|mm?|ss?|S{1,9}|x|X|zz?|ZZ?|.)/g, Wn = /(\\[[^\\[]*\\])|(\\\\)?(LTS|LT|LL?L?L?|l{1,4})/g, La = {}, P3 = {};\nfunction d0(e, t, o, n) {\n var r = n;\n typeof n == "string" && (r = function() {\n return this[n]();\n }), e && (P3[e] = r), t && (P3[t[0]] = function() {\n return Ge(r.apply(this, arguments), t[1], t[2]);\n }), o && (P3[o] = function() {\n return this.localeData().ordinal(\n r.apply(this, arguments),\n e\n );\n });\n}\nfunction fU(e) {\n return e.match(/\\[[\\s\\S]/) ? e.replace(/^\\[|\\]$/g, "") : e.replace(/\\\\/g, "");\n}\nfunction gU(e) {\n var t = e.match(es), o, n;\n for (o = 0, n = t.length; o < n; o++)\n P3[t[o]] ? t[o] = P3[t[o]] : t[o] = fU(t[o]);\n return function(r) {\n var i = "", a;\n for (a = 0; a < n; a++)\n i += Ze(t[a]) ? t[a].call(r, e) : t[a];\n return i;\n };\n}\nfunction Kn(e, t) {\n return e.isValid() ? (t = Fb(t, e.localeData()), La[t] = La[t] || gU(t), La[t](e)) : e.localeData().invalidDate();\n}\nfunction Fb(e, t) {\n var o = 5;\n function n(r) {\n return t.longDateFormat(r) || r;\n }\n for (Wn.lastIndex = 0; o >= 0 && Wn.test(e); )\n e = e.replace(\n Wn,\n n\n ), Wn.lastIndex = 0, o -= 1;\n return e;\n}\nvar CU = {\n LTS: "h:mm:ss A",\n LT: "h:mm A",\n L: "MM/DD/YYYY",\n LL: "MMMM D, YYYY",\n LLL: "MMMM D, YYYY h:mm A",\n LLLL: "dddd, MMMM D, YYYY h:mm A"\n};\nfunction mU(e) {\n var t = this._longDateFormat[e], o = this._longDateFormat[e.toUpperCase()];\n return t || !o ? t : (this._longDateFormat[e] = o.match(es).map(function(n) {\n return n === "MMMM" || n === "MM" || n === "DD" || n === "dddd" ? n.slice(1) : n;\n }).join(""), this._longDateFormat[e]);\n}\nvar LU = "Invalid date";\nfunction vU() {\n return this._invalidDate;\n}\nvar qU = "%d", yU = /\\d{1,2}/;\nfunction wU(e) {\n return this._ordinal.replace("%d", e);\n}\nvar xU = {\n future: "in %s",\n past: "%s ago",\n s: "a few seconds",\n ss: "%d seconds",\n m: "a minute",\n mm: "%d minutes",\n h: "an hour",\n hh: "%d hours",\n d: "a day",\n dd: "%d days",\n w: "a week",\n ww: "%d weeks",\n M: "a month",\n MM: "%d months",\n y: "a year",\n yy: "%d years"\n};\nfunction WU(e, t, o, n) {\n var r = this._relativeTime[o];\n return Ze(r) ? r(e, t, o, n) : r.replace(/%d/i, e);\n}\nfunction RU(e, t) {\n var o = this._relativeTime[e > 0 ? "future" : "past"];\n return Ze(o) ? o(t) : o.replace(/%s/i, t);\n}\nvar qc = {\n D: "date",\n dates: "date",\n date: "date",\n d: "day",\n days: "day",\n day: "day",\n e: "weekday",\n weekdays: "weekday",\n weekday: "weekday",\n E: "isoWeekday",\n isoweekdays: "isoWeekday",\n isoweekday: "isoWeekday",\n DDD: "dayOfYear",\n dayofyears: "dayOfYear",\n dayofyear: "dayOfYear",\n h: "hour",\n hours: "hour",\n hour: "hour",\n ms: "millisecond",\n milliseconds: "millisecond",\n millisecond: "millisecond",\n m: "minute",\n minutes: "minute",\n minute: "minute",\n M: "month",\n months: "month",\n month: "month",\n Q: "quarter",\n quarters: "quarter",\n quarter: "quarter",\n s: "second",\n seconds: "second",\n second: "second",\n gg: "weekYear",\n weekyears: "weekYear",\n weekyear: "weekYear",\n GG: "isoWeekYear",\n isoweekyears: "isoWeekYear",\n isoweekyear: "isoWeekYear",\n w: "week",\n weeks: "week",\n week: "week",\n W: "isoWeek",\n isoweeks: "isoWeek",\n isoweek: "isoWeek",\n y: "year",\n years: "year",\n year: "year"\n};\nfunction ze(e) {\n return typeof e == "string" ? qc[e] || qc[e.toLowerCase()] : void 0;\n}\nfunction ts(e) {\n var t = {}, o, n;\n for (n in e)\n k0(e, n) && (o = ze(n), o && (t[o] = e[n]));\n return t;\n}\nvar BU = {\n date: 9,\n day: 11,\n weekday: 11,\n isoWeekday: 11,\n dayOfYear: 4,\n hour: 13,\n millisecond: 16,\n minute: 14,\n month: 8,\n quarter: 7,\n second: 15,\n weekYear: 1,\n isoWeekYear: 1,\n week: 5,\n isoWeek: 5,\n year: 1\n};\nfunction SU(e) {\n var t = [], o;\n for (o in e)\n k0(e, o) && t.push({ unit: o, priority: BU[o] });\n return t.sort(function(n, r) {\n return n.priority - r.priority;\n }), t;\n}\nvar Xb = /\\d/, re = /\\d\\d/, Ub = /\\d{3}/, os = /\\d{4}/, ii = /[+-]?\\d{6}/, J0 = /\\d\\d?/, Yb = /\\d\\d\\d\\d?/, Gb = /\\d\\d\\d\\d\\d\\d?/, ai = /\\d{1,3}/, rs = /\\d{1,4}/, si = /[+-]?\\d{1,6}/, Mo = /\\d+/, ci = /[+-]?\\d+/, EU = /Z|[+-]\\d\\d:?\\d\\d/gi, li = /Z|[+-]\\d\\d(?::?\\d\\d)?/gi, kU = /[+-]?\\d+(\\.\\d{1,3})?/, Gr = /[0-9]{0,256}[\'a-z\\u00A0-\\u05FF\\u0700-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFF07\\uFF10-\\uFFEF]{1,256}|[\\u0600-\\u06FF\\/]{1,256}(\\s*?[\\u0600-\\u06FF]{1,256}){1,2}/i, Ao = /^[1-9]\\d?/, ns = /^([1-9]\\d|\\d)/, R4;\nR4 = {};\nfunction r0(e, t, o) {\n R4[e] = Ze(t) ? t : function(n, r) {\n return n && o ? o : t;\n };\n}\nfunction NU(e, t) {\n return k0(R4, e) ? R4[e](t._strict, t._locale) : new RegExp(TU(e));\n}\nfunction TU(e) {\n return ct(\n e.replace("\\\\", "").replace(\n /\\\\(\\[)|\\\\(\\])|\\[([^\\]\\[]*)\\]|\\\\(.)/g,\n function(t, o, n, r, i) {\n return o || n || r || i;\n }\n )\n );\n}\nfunction ct(e) {\n return e.replace(/[-\\/\\\\^$*+?.()|[\\]{}]/g, "\\\\$&");\n}\nfunction ae(e) {\n return e < 0 ? Math.ceil(e) || 0 : Math.floor(e);\n}\nfunction q0(e) {\n var t = +e, o = 0;\n return t !== 0 && isFinite(t) && (o = ae(t)), o;\n}\nvar w5 = {};\nfunction Y0(e, t) {\n var o, n = t, r;\n for (typeof e == "string" && (e = [e]), Mt(t) && (n = function(i, a) {\n a[t] = q0(i);\n }), r = e.length, o = 0; o < r; o++)\n w5[e[o]] = n;\n}\nfunction Qr(e, t) {\n Y0(e, function(o, n, r, i) {\n r._w = r._w || {}, t(o, r._w, r, i);\n });\n}\nfunction IU(e, t, o) {\n t != null && k0(w5, e) && w5[e](t, o._a, o, e);\n}\nfunction pi(e) {\n return e % 4 === 0 && e % 100 !== 0 || e % 400 === 0;\n}\nvar y2 = 0, at = 1, Te = 2, M2 = 3, me = 4, st = 5, a3 = 6, DU = 7, HU = 8;\nd0("Y", 0, 0, function() {\n var e = this.year();\n return e <= 9999 ? Ge(e, 4) : "+" + e;\n});\nd0(0, ["YY", 2], 0, function() {\n return this.year() % 100;\n});\nd0(0, ["YYYY", 4], 0, "year");\nd0(0, ["YYYYY", 5], 0, "year");\nd0(0, ["YYYYYY", 6, !0], 0, "year");\nr0("Y", ci);\nr0("YY", J0, re);\nr0("YYYY", rs, os);\nr0("YYYYY", si, ii);\nr0("YYYYYY", si, ii);\nY0(["YYYYY", "YYYYYY"], y2);\nY0("YYYY", function(e, t) {\n t[y2] = e.length === 2 ? $1.parseTwoDigitYear(e) : q0(e);\n});\nY0("YY", function(e, t) {\n t[y2] = $1.parseTwoDigitYear(e);\n});\nY0("Y", function(e, t) {\n t[y2] = parseInt(e, 10);\n});\nfunction er(e) {\n return pi(e) ? 366 : 365;\n}\n$1.parseTwoDigitYear = function(e) {\n return q0(e) + (q0(e) > 68 ? 1900 : 2e3);\n};\nvar Qb = uo("FullYear", !0);\nfunction VU() {\n return pi(this.year());\n}\nfunction uo(e, t) {\n return function(o) {\n return o != null ? (Zb(this, e, o), $1.updateOffset(this, t), this) : qr(this, e);\n };\n}\nfunction qr(e, t) {\n if (!e.isValid())\n return NaN;\n var o = e._d, n = e._isUTC;\n switch (t) {\n case "Milliseconds":\n return n ? o.getUTCMilliseconds() : o.getMilliseconds();\n case "Seconds":\n return n ? o.getUTCSeconds() : o.getSeconds();\n case "Minutes":\n return n ? o.getUTCMinutes() : o.getMinutes();\n case "Hours":\n return n ? o.getUTCHours() : o.getHours();\n case "Date":\n return n ? o.getUTCDate() : o.getDate();\n case "Day":\n return n ? o.getUTCDay() : o.getDay();\n case "Month":\n return n ? o.getUTCMonth() : o.getMonth();\n case "FullYear":\n return n ? o.getUTCFullYear() : o.getFullYear();\n default:\n return NaN;\n }\n}\nfunction Zb(e, t, o) {\n var n, r, i, a, s;\n if (!(!e.isValid() || isNaN(o))) {\n switch (n = e._d, r = e._isUTC, t) {\n case "Milliseconds":\n return void (r ? n.setUTCMilliseconds(o) : n.setMilliseconds(o));\n case "Seconds":\n return void (r ? n.setUTCSeconds(o) : n.setSeconds(o));\n case "Minutes":\n return void (r ? n.setUTCMinutes(o) : n.setMinutes(o));\n case "Hours":\n return void (r ? n.setUTCHours(o) : n.setHours(o));\n case "Date":\n return void (r ? n.setUTCDate(o) : n.setDate(o));\n case "FullYear":\n break;\n default:\n return;\n }\n i = o, a = e.month(), s = e.date(), s = s === 29 && a === 1 && !pi(i) ? 28 : s, r ? n.setUTCFullYear(i, a, s) : n.setFullYear(i, a, s);\n }\n}\nfunction PU(e) {\n return e = ze(e), Ze(this[e]) ? this[e]() : this;\n}\nfunction FU(e, t) {\n if (typeof e == "object") {\n e = ts(e);\n var o = SU(e), n, r = o.length;\n for (n = 0; n < r; n++)\n this[o[n].unit](e[o[n].unit]);\n } else if (e = ze(e), Ze(this[e]))\n return this[e](t);\n return this;\n}\nfunction XU(e, t) {\n return (e % t + t) % t;\n}\nvar s2;\nArray.prototype.indexOf ? s2 = Array.prototype.indexOf : s2 = function(e) {\n var t;\n for (t = 0; t < this.length; ++t)\n if (this[t] === e)\n return t;\n return -1;\n};\nfunction is(e, t) {\n if (isNaN(e) || isNaN(t))\n return NaN;\n var o = XU(t, 12);\n return e += (t - o) / 12, o === 1 ? pi(e) ? 29 : 28 : 31 - o % 7 % 2;\n}\nd0("M", ["MM", 2], "Mo", function() {\n return this.month() + 1;\n});\nd0("MMM", 0, 0, function(e) {\n return this.localeData().monthsShort(this, e);\n});\nd0("MMMM", 0, 0, function(e) {\n return this.localeData().months(this, e);\n});\nr0("M", J0, Ao);\nr0("MM", J0, re);\nr0("MMM", function(e, t) {\n return t.monthsShortRegex(e);\n});\nr0("MMMM", function(e, t) {\n return t.monthsRegex(e);\n});\nY0(["M", "MM"], function(e, t) {\n t[at] = q0(e) - 1;\n});\nY0(["MMM", "MMMM"], function(e, t, o, n) {\n var r = o._locale.monthsParse(e, n, o._strict);\n r != null ? t[at] = r : C0(o).invalidMonth = e;\n});\nvar UU = "January_February_March_April_May_June_July_August_September_October_November_December".split(\n "_"\n), jb = "Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec".split("_"), Kb = /D[oD]?(\\[[^\\[\\]]*\\]|\\s)+MMMM?/, YU = Gr, GU = Gr;\nfunction QU(e, t) {\n return e ? qe(this._months) ? this._months[e.month()] : this._months[(this._months.isFormat || Kb).test(t) ? "format" : "standalone"][e.month()] : qe(this._months) ? this._months : this._months.standalone;\n}\nfunction ZU(e, t) {\n return e ? qe(this._monthsShort) ? this._monthsShort[e.month()] : this._monthsShort[Kb.test(t) ? "format" : "standalone"][e.month()] : qe(this._monthsShort) ? this._monthsShort : this._monthsShort.standalone;\n}\nfunction jU(e, t, o) {\n var n, r, i, a = e.toLocaleLowerCase();\n if (!this._monthsParse)\n for (this._monthsParse = [], this._longMonthsParse = [], this._shortMonthsParse = [], n = 0; n < 12; ++n)\n i = Qe([2e3, n]), this._shortMonthsParse[n] = this.monthsShort(\n i,\n ""\n ).toLocaleLowerCase(), this._longMonthsParse[n] = this.months(i, "").toLocaleLowerCase();\n return o ? t === "MMM" ? (r = s2.call(this._shortMonthsParse, a), r !== -1 ? r : null) : (r = s2.call(this._longMonthsParse, a), r !== -1 ? r : null) : t === "MMM" ? (r = s2.call(this._shortMonthsParse, a), r !== -1 ? r : (r = s2.call(this._longMonthsParse, a), r !== -1 ? r : null)) : (r = s2.call(this._longMonthsParse, a), r !== -1 ? r : (r = s2.call(this._shortMonthsParse, a), r !== -1 ? r : null));\n}\nfunction KU(e, t, o) {\n var n, r, i;\n if (this._monthsParseExact)\n return jU.call(this, e, t, o);\n for (this._monthsParse || (this._monthsParse = [], this._longMonthsParse = [], this._shortMonthsParse = []), n = 0; n < 12; n++) {\n if (r = Qe([2e3, n]), o && !this._longMonthsParse[n] && (this._longMonthsParse[n] = new RegExp(\n "^" + this.months(r, "").replace(".", "") + "$",\n "i"\n ), this._shortMonthsParse[n] = new RegExp(\n "^" + this.monthsShort(r, "").replace(".", "") + "$",\n "i"\n )), !o && !this._monthsParse[n] && (i = "^" + this.months(r, "") + "|^" + this.monthsShort(r, ""), this._monthsParse[n] = new RegExp(i.replace(".", ""), "i")), o && t === "MMMM" && this._longMonthsParse[n].test(e))\n return n;\n if (o && t === "MMM" && this._shortMonthsParse[n].test(e))\n return n;\n if (!o && this._monthsParse[n].test(e))\n return n;\n }\n}\nfunction Jb(e, t) {\n if (!e.isValid())\n return e;\n if (typeof t == "string") {\n if (/^\\d+$/.test(t))\n t = q0(t);\n else if (t = e.localeData().monthsParse(t), !Mt(t))\n return e;\n }\n var o = t, n = e.date();\n return n = n < 29 ? n : Math.min(n, is(e.year(), o)), e._isUTC ? e._d.setUTCMonth(o, n) : e._d.setMonth(o, n), e;\n}\nfunction _b(e) {\n return e != null ? (Jb(this, e), $1.updateOffset(this, !0), this) : qr(this, "Month");\n}\nfunction JU() {\n return is(this.year(), this.month());\n}\nfunction _U(e) {\n return this._monthsParseExact ? (k0(this, "_monthsRegex") || $b.call(this), e ? this._monthsShortStrictRegex : this._monthsShortRegex) : (k0(this, "_monthsShortRegex") || (this._monthsShortRegex = YU), this._monthsShortStrictRegex && e ? this._monthsShortStrictRegex : this._monthsShortRegex);\n}\nfunction $U(e) {\n return this._monthsParseExact ? (k0(this, "_monthsRegex") || $b.call(this), e ? this._monthsStrictRegex : this._monthsRegex) : (k0(this, "_monthsRegex") || (this._monthsRegex = GU), this._monthsStrictRegex && e ? this._monthsStrictRegex : this._monthsRegex);\n}\nfunction $b() {\n function e(l, p) {\n return p.length - l.length;\n }\n var t = [], o = [], n = [], r, i, a, s;\n for (r = 0; r < 12; r++)\n i = Qe([2e3, r]), a = ct(this.monthsShort(i, "")), s = ct(this.months(i, "")), t.push(a), o.push(s), n.push(s), n.push(a);\n t.sort(e), o.sort(e), n.sort(e), this._monthsRegex = new RegExp("^(" + n.join("|") + ")", "i"), this._monthsShortRegex = this._monthsRegex, this._monthsStrictRegex = new RegExp(\n "^(" + o.join("|") + ")",\n "i"\n ), this._monthsShortStrictRegex = new RegExp(\n "^(" + t.join("|") + ")",\n "i"\n );\n}\nfunction eY(e, t, o, n, r, i, a) {\n var s;\n return e < 100 && e >= 0 ? (s = new Date(e + 400, t, o, n, r, i, a), isFinite(s.getFullYear()) && s.setFullYear(e)) : s = new Date(e, t, o, n, r, i, a), s;\n}\nfunction yr(e) {\n var t, o;\n return e < 100 && e >= 0 ? (o = Array.prototype.slice.call(arguments), o[0] = e + 400, t = new Date(Date.UTC.apply(null, o)), isFinite(t.getUTCFullYear()) && t.setUTCFullYear(e)) : t = new Date(Date.UTC.apply(null, arguments)), t;\n}\nfunction B4(e, t, o) {\n var n = 7 + t - o, r = (7 + yr(e, 0, n).getUTCDay() - t) % 7;\n return -r + n - 1;\n}\nfunction eM(e, t, o, n, r) {\n var i = (7 + o - n) % 7, a = B4(e, n, r), s = 1 + 7 * (t - 1) + i + a, l, p;\n return s <= 0 ? (l = e - 1, p = er(l) + s) : s > er(e) ? (l = e + 1, p = s - er(e)) : (l = e, p = s), {\n year: l,\n dayOfYear: p\n };\n}\nfunction wr(e, t, o) {\n var n = B4(e.year(), t, o), r = Math.floor((e.dayOfYear() - n - 1) / 7) + 1, i, a;\n return r < 1 ? (a = e.year() - 1, i = r + lt(a, t, o)) : r > lt(e.year(), t, o) ? (i = r - lt(e.year(), t, o), a = e.year() + 1) : (a = e.year(), i = r), {\n week: i,\n year: a\n };\n}\nfunction lt(e, t, o) {\n var n = B4(e, t, o), r = B4(e + 1, t, o);\n return (er(e) - n + r) / 7;\n}\nd0("w", ["ww", 2], "wo", "week");\nd0("W", ["WW", 2], "Wo", "isoWeek");\nr0("w", J0, Ao);\nr0("ww", J0, re);\nr0("W", J0, Ao);\nr0("WW", J0, re);\nQr(\n ["w", "ww", "W", "WW"],\n function(e, t, o, n) {\n t[n.substr(0, 1)] = q0(e);\n }\n);\nfunction tY(e) {\n return wr(e, this._week.dow, this._week.doy).week;\n}\nvar oY = {\n dow: 0,\n // Sunday is the first day of the week.\n doy: 6\n // The week that contains Jan 6th is the first week of the year.\n};\nfunction rY() {\n return this._week.dow;\n}\nfunction nY() {\n return this._week.doy;\n}\nfunction iY(e) {\n var t = this.localeData().week(this);\n return e == null ? t : this.add((e - t) * 7, "d");\n}\nfunction aY(e) {\n var t = wr(this, 1, 4).week;\n return e == null ? t : this.add((e - t) * 7, "d");\n}\nd0("d", 0, "do", "day");\nd0("dd", 0, 0, function(e) {\n return this.localeData().weekdaysMin(this, e);\n});\nd0("ddd", 0, 0, function(e) {\n return this.localeData().weekdaysShort(this, e);\n});\nd0("dddd", 0, 0, function(e) {\n return this.localeData().weekdays(this, e);\n});\nd0("e", 0, 0, "weekday");\nd0("E", 0, 0, "isoWeekday");\nr0("d", J0);\nr0("e", J0);\nr0("E", J0);\nr0("dd", function(e, t) {\n return t.weekdaysMinRegex(e);\n});\nr0("ddd", function(e, t) {\n return t.weekdaysShortRegex(e);\n});\nr0("dddd", function(e, t) {\n return t.weekdaysRegex(e);\n});\nQr(["dd", "ddd", "dddd"], function(e, t, o, n) {\n var r = o._locale.weekdaysParse(e, n, o._strict);\n r != null ? t.d = r : C0(o).invalidWeekday = e;\n});\nQr(["d", "e", "E"], function(e, t, o, n) {\n t[n] = q0(e);\n});\nfunction sY(e, t) {\n return typeof e != "string" ? e : isNaN(e) ? (e = t.weekdaysParse(e), typeof e == "number" ? e : null) : parseInt(e, 10);\n}\nfunction cY(e, t) {\n return typeof e == "string" ? t.weekdaysParse(e) % 7 || 7 : isNaN(e) ? null : e;\n}\nfunction as(e, t) {\n return e.slice(t, 7).concat(e.slice(0, t));\n}\nvar lY = "Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday".split("_"), tM = "Sun_Mon_Tue_Wed_Thu_Fri_Sat".split("_"), pY = "Su_Mo_Tu_We_Th_Fr_Sa".split("_"), dY = Gr, bY = Gr, MY = Gr;\nfunction AY(e, t) {\n var o = qe(this._weekdays) ? this._weekdays : this._weekdays[e && e !== !0 && this._weekdays.isFormat.test(t) ? "format" : "standalone"];\n return e === !0 ? as(o, this._week.dow) : e ? o[e.day()] : o;\n}\nfunction uY(e) {\n return e === !0 ? as(this._weekdaysShort, this._week.dow) : e ? this._weekdaysShort[e.day()] : this._weekdaysShort;\n}\nfunction zY(e) {\n return e === !0 ? as(this._weekdaysMin, this._week.dow) : e ? this._weekdaysMin[e.day()] : this._weekdaysMin;\n}\nfunction hY(e, t, o) {\n var n, r, i, a = e.toLocaleLowerCase();\n if (!this._weekdaysParse)\n for (this._weekdaysParse = [], this._shortWeekdaysParse = [], this._minWeekdaysParse = [], n = 0; n < 7; ++n)\n i = Qe([2e3, 1]).day(n), this._minWeekdaysParse[n] = this.weekdaysMin(\n i,\n ""\n ).toLocaleLowerCase(), this._shortWeekdaysParse[n] = this.weekdaysShort(\n i,\n ""\n ).toLocaleLowerCase(), this._weekdaysParse[n] = this.weekdays(i, "").toLocaleLowerCase();\n return o ? t === "dddd" ? (r = s2.call(this._weekdaysParse, a), r !== -1 ? r : null) : t === "ddd" ? (r = s2.call(this._shortWeekdaysParse, a), r !== -1 ? r : null) : (r = s2.call(this._minWeekdaysParse, a), r !== -1 ? r : null) : t === "dddd" ? (r = s2.call(this._weekdaysParse, a), r !== -1 || (r = s2.call(this._shortWeekdaysParse, a), r !== -1) ? r : (r = s2.call(this._minWeekdaysParse, a), r !== -1 ? r : null)) : t === "ddd" ? (r = s2.call(this._shortWeekdaysParse, a), r !== -1 || (r = s2.call(this._weekdaysParse, a), r !== -1) ? r : (r = s2.call(this._minWeekdaysParse, a), r !== -1 ? r : null)) : (r = s2.call(this._minWeekdaysParse, a), r !== -1 || (r = s2.call(this._weekdaysParse, a), r !== -1) ? r : (r = s2.call(this._shortWeekdaysParse, a), r !== -1 ? r : null));\n}\nfunction OY(e, t, o) {\n var n, r, i;\n if (this._weekdaysParseExact)\n return hY.call(this, e, t, o);\n for (this._weekdaysParse || (this._weekdaysParse = [], this._minWeekdaysParse = [], this._shortWeekdaysParse = [], this._fullWeekdaysParse = []), n = 0; n < 7; n++) {\n if (r = Qe([2e3, 1]).day(n), o && !this._fullWeekdaysParse[n] && (this._fullWeekdaysParse[n] = new RegExp(\n "^" + this.weekdays(r, "").replace(".", "\\\\.?") + "$",\n "i"\n ), this._shortWeekdaysParse[n] = new RegExp(\n "^" + this.weekdaysShort(r, "").replace(".", "\\\\.?") + "$",\n "i"\n ), this._minWeekdaysParse[n] = new RegExp(\n "^" + this.weekdaysMin(r, "").replace(".", "\\\\.?") + "$",\n "i"\n )), this._weekdaysParse[n] || (i = "^" + this.weekdays(r, "") + "|^" + this.weekdaysShort(r, "") + "|^" + this.weekdaysMin(r, ""), this._weekdaysParse[n] = new RegExp(i.replace(".", ""), "i")), o && t === "dddd" && this._fullWeekdaysParse[n].test(e))\n return n;\n if (o && t === "ddd" && this._shortWeekdaysParse[n].test(e))\n return n;\n if (o && t === "dd" && this._minWeekdaysParse[n].test(e))\n return n;\n if (!o && this._weekdaysParse[n].test(e))\n return n;\n }\n}\nfunction fY(e) {\n if (!this.isValid())\n return e != null ? this : NaN;\n var t = qr(this, "Day");\n return e != null ? (e = sY(e, this.localeData()), this.add(e - t, "d")) : t;\n}\nfunction gY(e) {\n if (!this.isValid())\n return e != null ? this : NaN;\n var t = (this.day() + 7 - this.localeData()._week.dow) % 7;\n return e == null ? t : this.add(e - t, "d");\n}\nfunction CY(e) {\n if (!this.isValid())\n return e != null ? this : NaN;\n if (e != null) {\n var t = cY(e, this.localeData());\n return this.day(this.day() % 7 ? t : t - 7);\n } else\n return this.day() || 7;\n}\nfunction mY(e) {\n return this._weekdaysParseExact ? (k0(this, "_weekdaysRegex") || ss.call(this), e ? this._weekdaysStrictRegex : this._weekdaysRegex) : (k0(this, "_weekdaysRegex") || (this._weekdaysRegex = dY), this._weekdaysStrictRegex && e ? this._weekdaysStrictRegex : this._weekdaysRegex);\n}\nfunction LY(e) {\n return this._weekdaysParseExact ? (k0(this, "_weekdaysRegex") || ss.call(this), e ? this._weekdaysShortStrictRegex : this._weekdaysShortRegex) : (k0(this, "_weekdaysShortRegex") || (this._weekdaysShortRegex = bY), this._weekdaysShortStrictRegex && e ? this._weekdaysShortStrictRegex : this._weekdaysShortRegex);\n}\nfunction vY(e) {\n return this._weekdaysParseExact ? (k0(this, "_weekdaysRegex") || ss.call(this), e ? this._weekdaysMinStrictRegex : this._weekdaysMinRegex) : (k0(this, "_weekdaysMinRegex") || (this._weekdaysMinRegex = MY), this._weekdaysMinStrictRegex && e ? this._weekdaysMinStrictRegex : this._weekdaysMinRegex);\n}\nfunction ss() {\n function e(d, b) {\n return b.length - d.length;\n }\n var t = [], o = [], n = [], r = [], i, a, s, l, p;\n for (i = 0; i < 7; i++)\n a = Qe([2e3, 1]).day(i), s = ct(this.weekdaysMin(a, "")), l = ct(this.weekdaysShort(a, "")), p = ct(this.weekdays(a, "")), t.push(s), o.push(l), n.push(p), r.push(s), r.push(l), r.push(p);\n t.sort(e), o.sort(e), n.sort(e), r.sort(e), this._weekdaysRegex = new RegExp("^(" + r.join("|") + ")", "i"), this._weekdaysShortRegex = this._weekdaysRegex, this._weekdaysMinRegex = this._weekdaysRegex, this._weekdaysStrictRegex = new RegExp(\n "^(" + n.join("|") + ")",\n "i"\n ), this._weekdaysShortStrictRegex = new RegExp(\n "^(" + o.join("|") + ")",\n "i"\n ), this._weekdaysMinStrictRegex = new RegExp(\n "^(" + t.join("|") + ")",\n "i"\n );\n}\nfunction cs() {\n return this.hours() % 12 || 12;\n}\nfunction qY() {\n return this.hours() || 24;\n}\nd0("H", ["HH", 2], 0, "hour");\nd0("h", ["hh", 2], 0, cs);\nd0("k", ["kk", 2], 0, qY);\nd0("hmm", 0, 0, function() {\n return "" + cs.apply(this) + Ge(this.minutes(), 2);\n});\nd0("hmmss", 0, 0, function() {\n return "" + cs.apply(this) + Ge(this.minutes(), 2) + Ge(this.seconds(), 2);\n});\nd0("Hmm", 0, 0, function() {\n return "" + this.hours() + Ge(this.minutes(), 2);\n});\nd0("Hmmss", 0, 0, function() {\n return "" + this.hours() + Ge(this.minutes(), 2) + Ge(this.seconds(), 2);\n});\nfunction oM(e, t) {\n d0(e, 0, 0, function() {\n return this.localeData().meridiem(\n this.hours(),\n this.minutes(),\n t\n );\n });\n}\noM("a", !0);\noM("A", !1);\nfunction rM(e, t) {\n return t._meridiemParse;\n}\nr0("a", rM);\nr0("A", rM);\nr0("H", J0, ns);\nr0("h", J0, Ao);\nr0("k", J0, Ao);\nr0("HH", J0, re);\nr0("hh", J0, re);\nr0("kk", J0, re);\nr0("hmm", Yb);\nr0("hmmss", Gb);\nr0("Hmm", Yb);\nr0("Hmmss", Gb);\nY0(["H", "HH"], M2);\nY0(["k", "kk"], function(e, t, o) {\n var n = q0(e);\n t[M2] = n === 24 ? 0 : n;\n});\nY0(["a", "A"], function(e, t, o) {\n o._isPm = o._locale.isPM(e), o._meridiem = e;\n});\nY0(["h", "hh"], function(e, t, o) {\n t[M2] = q0(e), C0(o).bigHour = !0;\n});\nY0("hmm", function(e, t, o) {\n var n = e.length - 2;\n t[M2] = q0(e.substr(0, n)), t[me] = q0(e.substr(n)), C0(o).bigHour = !0;\n});\nY0("hmmss", function(e, t, o) {\n var n = e.length - 4, r = e.length - 2;\n t[M2] = q0(e.substr(0, n)), t[me] = q0(e.substr(n, 2)), t[st] = q0(e.substr(r)), C0(o).bigHour = !0;\n});\nY0("Hmm", function(e, t, o) {\n var n = e.length - 2;\n t[M2] = q0(e.substr(0, n)), t[me] = q0(e.substr(n));\n});\nY0("Hmmss", function(e, t, o) {\n var n = e.length - 4, r = e.length - 2;\n t[M2] = q0(e.substr(0, n)), t[me] = q0(e.substr(n, 2)), t[st] = q0(e.substr(r));\n});\nfunction yY(e) {\n return (e + "").toLowerCase().charAt(0) === "p";\n}\nvar wY = /[ap]\\.?m?\\.?/i, xY = uo("Hours", !0);\nfunction WY(e, t, o) {\n return e > 11 ? o ? "pm" : "PM" : o ? "am" : "AM";\n}\nvar nM = {\n calendar: hU,\n longDateFormat: CU,\n invalidDate: LU,\n ordinal: qU,\n dayOfMonthOrdinalParse: yU,\n relativeTime: xU,\n months: UU,\n monthsShort: jb,\n week: oY,\n weekdays: lY,\n weekdaysMin: pY,\n weekdaysShort: tM,\n meridiemParse: wY\n}, _0 = {}, Do = {}, xr;\nfunction RY(e, t) {\n var o, n = Math.min(e.length, t.length);\n for (o = 0; o < n; o += 1)\n if (e[o] !== t[o])\n return o;\n return n;\n}\nfunction yc(e) {\n return e && e.toLowerCase().replace("_", "-");\n}\nfunction BY(e) {\n for (var t = 0, o, n, r, i; t < e.length; ) {\n for (i = yc(e[t]).split("-"), o = i.length, n = yc(e[t + 1]), n = n ? n.split("-") : null; o > 0; ) {\n if (r = di(i.slice(0, o).join("-")), r)\n return r;\n if (n && n.length >= o && RY(i, n) >= o - 1)\n break;\n o--;\n }\n t++;\n }\n return xr;\n}\nfunction SY(e) {\n return !!(e && e.match("^[^/\\\\\\\\]*$"));\n}\nfunction di(e) {\n var t = null, o;\n if (_0[e] === void 0 && "object" < "u" && module && module.exports && SY(e))\n try {\n t = xr._abbr, o = undefined, Object(function webpackMissingModule() { var e = new Error("Cannot find module \'undefined\'"); e.code = \'MODULE_NOT_FOUND\'; throw e; }()), Tt(t);\n } catch {\n _0[e] = null;\n }\n return _0[e];\n}\nfunction Tt(e, t) {\n var o;\n return e && (T2(t) ? o = zt(e) : o = ls(e, t), o ? xr = o : typeof console < "u" && console.warn && console.warn(\n "Locale " + e + " not found. Did you forget to load it?"\n )), xr._abbr;\n}\nfunction ls(e, t) {\n if (t !== null) {\n var o, n = nM;\n if (t.abbr = e, _0[e] != null)\n Pb(\n "defineLocaleOverride",\n "use moment.updateLocale(localeName, config) to change an existing locale. moment.defineLocale(localeName, config) should only be used for creating a new locale See http://momentjs.com/guides/#/warnings/define-locale/ for more info."\n ), n = _0[e]._config;\n else if (t.parentLocale != null)\n if (_0[t.parentLocale] != null)\n n = _0[t.parentLocale]._config;\n else if (o = di(t.parentLocale), o != null)\n n = o._config;\n else\n return Do[t.parentLocale] || (Do[t.parentLocale] = []), Do[t.parentLocale].push({\n name: e,\n config: t\n }), null;\n return _0[e] = new $6(q5(n, t)), Do[e] && Do[e].forEach(function(r) {\n ls(r.name, r.config);\n }), Tt(e), _0[e];\n } else\n return delete _0[e], null;\n}\nfunction EY(e, t) {\n if (t != null) {\n var o, n, r = nM;\n _0[e] != null && _0[e].parentLocale != null ? _0[e].set(q5(_0[e]._config, t)) : (n = di(e), n != null && (r = n._config), t = q5(r, t), n == null && (t.abbr = e), o = new $6(t), o.parentLocale = _0[e], _0[e] = o), Tt(e);\n } else\n _0[e] != null && (_0[e].parentLocale != null ? (_0[e] = _0[e].parentLocale, e === Tt() && Tt(e)) : _0[e] != null && delete _0[e]);\n return _0[e];\n}\nfunction zt(e) {\n var t;\n if (e && e._locale && e._locale._abbr && (e = e._locale._abbr), !e)\n return xr;\n if (!qe(e)) {\n if (t = di(e), t)\n return t;\n e = [e];\n }\n return BY(e);\n}\nfunction kY() {\n return y5(_0);\n}\nfunction ps(e) {\n var t, o = e._a;\n return o && C0(e).overflow === -2 && (t = o[at] < 0 || o[at] > 11 ? at : o[Te] < 1 || o[Te] > is(o[y2], o[at]) ? Te : o[M2] < 0 || o[M2] > 24 || o[M2] === 24 && (o[me] !== 0 || o[st] !== 0 || o[a3] !== 0) ? M2 : o[me] < 0 || o[me] > 59 ? me : o[st] < 0 || o[st] > 59 ? st : o[a3] < 0 || o[a3] > 999 ? a3 : -1, C0(e)._overflowDayOfYear && (t < y2 || t > Te) && (t = Te), C0(e)._overflowWeeks && t === -1 && (t = DU), C0(e)._overflowWeekday && t === -1 && (t = HU), C0(e).overflow = t), e;\n}\nvar NY = /^\\s*((?:[+-]\\d{6}|\\d{4})-(?:\\d\\d-\\d\\d|W\\d\\d-\\d|W\\d\\d|\\d\\d\\d|\\d\\d))(?:(T| )(\\d\\d(?::\\d\\d(?::\\d\\d(?:[.,]\\d+)?)?)?)([+-]\\d\\d(?::?\\d\\d)?|\\s*Z)?)?$/, TY = /^\\s*((?:[+-]\\d{6}|\\d{4})(?:\\d\\d\\d\\d|W\\d\\d\\d|W\\d\\d|\\d\\d\\d|\\d\\d|))(?:(T| )(\\d\\d(?:\\d\\d(?:\\d\\d(?:[.,]\\d+)?)?)?)([+-]\\d\\d(?::?\\d\\d)?|\\s*Z)?)?$/, IY = /Z|[+-]\\d\\d(?::?\\d\\d)?/, Rn = [\n ["YYYYYY-MM-DD", /[+-]\\d{6}-\\d\\d-\\d\\d/],\n ["YYYY-MM-DD", /\\d{4}-\\d\\d-\\d\\d/],\n ["GGGG-[W]WW-E", /\\d{4}-W\\d\\d-\\d/],\n ["GGGG-[W]WW", /\\d{4}-W\\d\\d/, !1],\n ["YYYY-DDD", /\\d{4}-\\d{3}/],\n ["YYYY-MM", /\\d{4}-\\d\\d/, !1],\n ["YYYYYYMMDD", /[+-]\\d{10}/],\n ["YYYYMMDD", /\\d{8}/],\n ["GGGG[W]WWE", /\\d{4}W\\d{3}/],\n ["GGGG[W]WW", /\\d{4}W\\d{2}/, !1],\n ["YYYYDDD", /\\d{7}/],\n ["YYYYMM", /\\d{6}/, !1],\n ["YYYY", /\\d{4}/, !1]\n], va = [\n ["HH:mm:ss.SSSS", /\\d\\d:\\d\\d:\\d\\d\\.\\d+/],\n ["HH:mm:ss,SSSS", /\\d\\d:\\d\\d:\\d\\d,\\d+/],\n ["HH:mm:ss", /\\d\\d:\\d\\d:\\d\\d/],\n ["HH:mm", /\\d\\d:\\d\\d/],\n ["HHmmss.SSSS", /\\d\\d\\d\\d\\d\\d\\.\\d+/],\n ["HHmmss,SSSS", /\\d\\d\\d\\d\\d\\d,\\d+/],\n ["HHmmss", /\\d\\d\\d\\d\\d\\d/],\n ["HHmm", /\\d\\d\\d\\d/],\n ["HH", /\\d\\d/]\n], DY = /^\\/?Date\\((-?\\d+)/i, HY = /^(?:(Mon|Tue|Wed|Thu|Fri|Sat|Sun),?\\s)?(\\d{1,2})\\s(Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)\\s(\\d{2,4})\\s(\\d\\d):(\\d\\d)(?::(\\d\\d))?\\s(?:(UT|GMT|[ECMP][SD]T)|([Zz])|([+-]\\d{4}))$/, VY = {\n UT: 0,\n GMT: 0,\n EDT: -4 * 60,\n EST: -5 * 60,\n CDT: -5 * 60,\n CST: -6 * 60,\n MDT: -6 * 60,\n MST: -7 * 60,\n PDT: -7 * 60,\n PST: -8 * 60\n};\nfunction iM(e) {\n var t, o, n = e._i, r = NY.exec(n) || TY.exec(n), i, a, s, l, p = Rn.length, d = va.length;\n if (r) {\n for (C0(e).iso = !0, t = 0, o = p; t < o; t++)\n if (Rn[t][1].exec(r[1])) {\n a = Rn[t][0], i = Rn[t][2] !== !1;\n break;\n }\n if (a == null) {\n e._isValid = !1;\n return;\n }\n if (r[3]) {\n for (t = 0, o = d; t < o; t++)\n if (va[t][1].exec(r[3])) {\n s = (r[2] || " ") + va[t][0];\n break;\n }\n if (s == null) {\n e._isValid = !1;\n return;\n }\n }\n if (!i && s != null) {\n e._isValid = !1;\n return;\n }\n if (r[4])\n if (IY.exec(r[4]))\n l = "Z";\n else {\n e._isValid = !1;\n return;\n }\n e._f = a + (s || "") + (l || ""), bs(e);\n } else\n e._isValid = !1;\n}\nfunction PY(e, t, o, n, r, i) {\n var a = [\n FY(e),\n jb.indexOf(t),\n parseInt(o, 10),\n parseInt(n, 10),\n parseInt(r, 10)\n ];\n return i && a.push(parseInt(i, 10)), a;\n}\nfunction FY(e) {\n var t = parseInt(e, 10);\n return t <= 49 ? 2e3 + t : t <= 999 ? 1900 + t : t;\n}\nfunction XY(e) {\n return e.replace(/\\([^()]*\\)|[\\n\\t]/g, " ").replace(/(\\s\\s+)/g, " ").replace(/^\\s\\s*/, "").replace(/\\s\\s*$/, "");\n}\nfunction UY(e, t, o) {\n if (e) {\n var n = tM.indexOf(e), r = new Date(\n t[0],\n t[1],\n t[2]\n ).getDay();\n if (n !== r)\n return C0(o).weekdayMismatch = !0, o._isValid = !1, !1;\n }\n return !0;\n}\nfunction YY(e, t, o) {\n if (e)\n return VY[e];\n if (t)\n return 0;\n var n = parseInt(o, 10), r = n % 100, i = (n - r) / 100;\n return i * 60 + r;\n}\nfunction aM(e) {\n var t = HY.exec(XY(e._i)), o;\n if (t) {\n if (o = PY(\n t[4],\n t[3],\n t[2],\n t[5],\n t[6],\n t[7]\n ), !UY(t[1], o, e))\n return;\n e._a = o, e._tzm = YY(t[8], t[9], t[10]), e._d = yr.apply(null, e._a), e._d.setUTCMinutes(e._d.getUTCMinutes() - e._tzm), C0(e).rfc2822 = !0;\n } else\n e._isValid = !1;\n}\nfunction GY(e) {\n var t = DY.exec(e._i);\n if (t !== null) {\n e._d = /* @__PURE__ */ new Date(+t[1]);\n return;\n }\n if (iM(e), e._isValid === !1)\n delete e._isValid;\n else\n return;\n if (aM(e), e._isValid === !1)\n delete e._isValid;\n else\n return;\n e._strict ? e._isValid = !1 : $1.createFromInputFallback(e);\n}\n$1.createFromInputFallback = ue(\n "value provided is not in a recognized RFC2822 or ISO format. moment construction falls back to js Date(), which is not reliable across all browsers and versions. Non RFC2822/ISO date formats are discouraged. Please refer to http://momentjs.com/guides/#/warnings/js-date/ for more info.",\n function(e) {\n e._d = /* @__PURE__ */ new Date(e._i + (e._useUTC ? " UTC" : ""));\n }\n);\nfunction B3(e, t, o) {\n return e ?? t ?? o;\n}\nfunction QY(e) {\n var t = new Date($1.now());\n return e._useUTC ? [\n t.getUTCFullYear(),\n t.getUTCMonth(),\n t.getUTCDate()\n ] : [t.getFullYear(), t.getMonth(), t.getDate()];\n}\nfunction ds(e) {\n var t, o, n = [], r, i, a;\n if (!e._d) {\n for (r = QY(e), e._w && e._a[Te] == null && e._a[at] == null && ZY(e), e._dayOfYear != null && (a = B3(e._a[y2], r[y2]), (e._dayOfYear > er(a) || e._dayOfYear === 0) && (C0(e)._overflowDayOfYear = !0), o = yr(a, 0, e._dayOfYear), e._a[at] = o.getUTCMonth(), e._a[Te] = o.getUTCDate()), t = 0; t < 3 && e._a[t] == null; ++t)\n e._a[t] = n[t] = r[t];\n for (; t < 7; t++)\n e._a[t] = n[t] = e._a[t] == null ? t === 2 ? 1 : 0 : e._a[t];\n e._a[M2] === 24 && e._a[me] === 0 && e._a[st] === 0 && e._a[a3] === 0 && (e._nextDay = !0, e._a[M2] = 0), e._d = (e._useUTC ? yr : eY).apply(\n null,\n n\n ), i = e._useUTC ? e._d.getUTCDay() : e._d.getDay(), e._tzm != null && e._d.setUTCMinutes(e._d.getUTCMinutes() - e._tzm), e._nextDay && (e._a[M2] = 24), e._w && typeof e._w.d < "u" && e._w.d !== i && (C0(e).weekdayMismatch = !0);\n }\n}\nfunction ZY(e) {\n var t, o, n, r, i, a, s, l, p;\n t = e._w, t.GG != null || t.W != null || t.E != null ? (i = 1, a = 4, o = B3(\n t.GG,\n e._a[y2],\n wr(K0(), 1, 4).year\n ), n = B3(t.W, 1), r = B3(t.E, 1), (r < 1 || r > 7) && (l = !0)) : (i = e._locale._week.dow, a = e._locale._week.doy, p = wr(K0(), i, a), o = B3(t.gg, e._a[y2], p.year), n = B3(t.w, p.week), t.d != null ? (r = t.d, (r < 0 || r > 6) && (l = !0)) : t.e != null ? (r = t.e + i, (t.e < 0 || t.e > 6) && (l = !0)) : r = i), n < 1 || n > lt(o, i, a) ? C0(e)._overflowWeeks = !0 : l != null ? C0(e)._overflowWeekday = !0 : (s = eM(o, n, r, i, a), e._a[y2] = s.year, e._dayOfYear = s.dayOfYear);\n}\n$1.ISO_8601 = function() {\n};\n$1.RFC_2822 = function() {\n};\nfunction bs(e) {\n if (e._f === $1.ISO_8601) {\n iM(e);\n return;\n }\n if (e._f === $1.RFC_2822) {\n aM(e);\n return;\n }\n e._a = [], C0(e).empty = !0;\n var t = "" + e._i, o, n, r, i, a, s = t.length, l = 0, p, d;\n for (r = Fb(e._f, e._locale).match(es) || [], d = r.length, o = 0; o < d; o++)\n i = r[o], n = (t.match(NU(i, e)) || [])[0], n && (a = t.substr(0, t.indexOf(n)), a.length > 0 && C0(e).unusedInput.push(a), t = t.slice(\n t.indexOf(n) + n.length\n ), l += n.length), P3[i] ? (n ? C0(e).empty = !1 : C0(e).unusedTokens.push(i), IU(i, n, e)) : e._strict && !n && C0(e).unusedTokens.push(i);\n C0(e).charsLeftOver = s - l, t.length > 0 && C0(e).unusedInput.push(t), e._a[M2] <= 12 && C0(e).bigHour === !0 && e._a[M2] > 0 && (C0(e).bigHour = void 0), C0(e).parsedDateParts = e._a.slice(0), C0(e).meridiem = e._meridiem, e._a[M2] = jY(\n e._locale,\n e._a[M2],\n e._meridiem\n ), p = C0(e).era, p !== null && (e._a[y2] = e._locale.erasConvertYear(p, e._a[y2])), ds(e), ps(e);\n}\nfunction jY(e, t, o) {\n var n;\n return o == null ? t : e.meridiemHour != null ? e.meridiemHour(t, o) : (e.isPM != null && (n = e.isPM(o), n && t < 12 && (t += 12), !n && t === 12 && (t = 0)), t);\n}\nfunction KY(e) {\n var t, o, n, r, i, a, s = !1, l = e._f.length;\n if (l === 0) {\n C0(e).invalidFormat = !0, e._d = /* @__PURE__ */ new Date(NaN);\n return;\n }\n for (r = 0; r < l; r++)\n i = 0, a = !1, t = _6({}, e), e._useUTC != null && (t._useUTC = e._useUTC), t._f = e._f[r], bs(t), J6(t) && (a = !0), i += C0(t).charsLeftOver, i += C0(t).unusedTokens.length * 10, C0(t).score = i, s ? i < n && (n = i, o = t) : (n == null || i < n || a) && (n = i, o = t, a && (s = !0));\n Wt(e, o || t);\n}\nfunction JY(e) {\n if (!e._d) {\n var t = ts(e._i), o = t.day === void 0 ? t.date : t.day;\n e._a = Hb(\n [t.year, t.month, o, t.hour, t.minute, t.second, t.millisecond],\n function(n) {\n return n && parseInt(n, 10);\n }\n ), ds(e);\n }\n}\nfunction _Y(e) {\n var t = new Yr(ps(sM(e)));\n return t._nextDay && (t.add(1, "d"), t._nextDay = void 0), t;\n}\nfunction sM(e) {\n var t = e._i, o = e._f;\n return e._locale = e._locale || zt(e._l), t === null || o === void 0 && t === "" ? ni({ nullInput: !0 }) : (typeof t == "string" && (e._i = t = e._locale.preparse(t)), ye(t) ? new Yr(ps(t)) : (Ur(t) ? e._d = t : qe(o) ? KY(e) : o ? bs(e) : $Y(e), J6(e) || (e._d = null), e));\n}\nfunction $Y(e) {\n var t = e._i;\n T2(t) ? e._d = new Date($1.now()) : Ur(t) ? e._d = new Date(t.valueOf()) : typeof t == "string" ? GY(e) : qe(t) ? (e._a = Hb(t.slice(0), function(o) {\n return parseInt(o, 10);\n }), ds(e)) : p3(t) ? JY(e) : Mt(t) ? e._d = new Date(t) : $1.createFromInputFallback(e);\n}\nfunction cM(e, t, o, n, r) {\n var i = {};\n return (t === !0 || t === !1) && (n = t, t = void 0), (o === !0 || o === !1) && (n = o, o = void 0), (p3(e) && K6(e) || qe(e) && e.length === 0) && (e = void 0), i._isAMomentObject = !0, i._useUTC = i._isUTC = r, i._l = o, i._i = e, i._f = t, i._strict = n, _Y(i);\n}\nfunction K0(e, t, o, n) {\n return cM(e, t, o, n, !1);\n}\nvar eG = ue(\n "moment().min is deprecated, use moment.max instead. http://momentjs.com/guides/#/warnings/min-max/",\n function() {\n var e = K0.apply(null, arguments);\n return this.isValid() && e.isValid() ? e < this ? this : e : ni();\n }\n), tG = ue(\n "moment().max is deprecated, use moment.min instead. http://momentjs.com/guides/#/warnings/min-max/",\n function() {\n var e = K0.apply(null, arguments);\n return this.isValid() && e.isValid() ? e > this ? this : e : ni();\n }\n);\nfunction lM(e, t) {\n var o, n;\n if (t.length === 1 && qe(t[0]) && (t = t[0]), !t.length)\n return K0();\n for (o = t[0], n = 1; n < t.length; ++n)\n (!t[n].isValid() || t[n][e](o)) && (o = t[n]);\n return o;\n}\nfunction oG() {\n var e = [].slice.call(arguments, 0);\n return lM("isBefore", e);\n}\nfunction rG() {\n var e = [].slice.call(arguments, 0);\n return lM("isAfter", e);\n}\nvar nG = function() {\n return Date.now ? Date.now() : +/* @__PURE__ */ new Date();\n}, Ho = [\n "year",\n "quarter",\n "month",\n "week",\n "day",\n "hour",\n "minute",\n "second",\n "millisecond"\n];\nfunction iG(e) {\n var t, o = !1, n, r = Ho.length;\n for (t in e)\n if (k0(e, t) && !(s2.call(Ho, t) !== -1 && (e[t] == null || !isNaN(e[t]))))\n return !1;\n for (n = 0; n < r; ++n)\n if (e[Ho[n]]) {\n if (o)\n return !1;\n parseFloat(e[Ho[n]]) !== q0(e[Ho[n]]) && (o = !0);\n }\n return !0;\n}\nfunction aG() {\n return this._isValid;\n}\nfunction sG() {\n return we(NaN);\n}\nfunction bi(e) {\n var t = ts(e), o = t.year || 0, n = t.quarter || 0, r = t.month || 0, i = t.week || t.isoWeek || 0, a = t.day || 0, s = t.hour || 0, l = t.minute || 0, p = t.second || 0, d = t.millisecond || 0;\n this._isValid = iG(t), this._milliseconds = +d + p * 1e3 + // 1000\n l * 6e4 + // 1000 * 60\n s * 1e3 * 60 * 60, this._days = +a + i * 7, this._months = +r + n * 3 + o * 12, this._data = {}, this._locale = zt(), this._bubble();\n}\nfunction Jn(e) {\n return e instanceof bi;\n}\nfunction x5(e) {\n return e < 0 ? Math.round(-1 * e) * -1 : Math.round(e);\n}\nfunction cG(e, t, o) {\n var n = Math.min(e.length, t.length), r = Math.abs(e.length - t.length), i = 0, a;\n for (a = 0; a < n; a++)\n (o && e[a] !== t[a] || !o && q0(e[a]) !== q0(t[a])) && i++;\n return i + r;\n}\nfunction pM(e, t) {\n d0(e, 0, 0, function() {\n var o = this.utcOffset(), n = "+";\n return o < 0 && (o = -o, n = "-"), n + Ge(~~(o / 60), 2) + t + Ge(~~o % 60, 2);\n });\n}\npM("Z", ":");\npM("ZZ", "");\nr0("Z", li);\nr0("ZZ", li);\nY0(["Z", "ZZ"], function(e, t, o) {\n o._useUTC = !0, o._tzm = Ms(li, e);\n});\nvar lG = /([\\+\\-]|\\d\\d)/gi;\nfunction Ms(e, t) {\n var o = (t || "").match(e), n, r, i;\n return o === null ? null : (n = o[o.length - 1] || [], r = (n + "").match(lG) || ["-", 0, 0], i = +(r[1] * 60) + q0(r[2]), i === 0 ? 0 : r[0] === "+" ? i : -i);\n}\nfunction As(e, t) {\n var o, n;\n return t._isUTC ? (o = t.clone(), n = (ye(e) || Ur(e) ? e.valueOf() : K0(e).valueOf()) - o.valueOf(), o._d.setTime(o._d.valueOf() + n), $1.updateOffset(o, !1), o) : K0(e).local();\n}\nfunction W5(e) {\n return -Math.round(e._d.getTimezoneOffset());\n}\n$1.updateOffset = function() {\n};\nfunction pG(e, t, o) {\n var n = this._offset || 0, r;\n if (!this.isValid())\n return e != null ? this : NaN;\n if (e != null) {\n if (typeof e == "string") {\n if (e = Ms(li, e), e === null)\n return this;\n } else\n Math.abs(e) < 16 && !o && (e = e * 60);\n return !this._isUTC && t && (r = W5(this)), this._offset = e, this._isUTC = !0, r != null && this.add(r, "m"), n !== e && (!t || this._changeInProgress ? MM(\n this,\n we(e - n, "m"),\n 1,\n !1\n ) : this._changeInProgress || (this._changeInProgress = !0, $1.updateOffset(this, !0), this._changeInProgress = null)), this;\n } else\n return this._isUTC ? n : W5(this);\n}\nfunction dG(e, t) {\n return e != null ? (typeof e != "string" && (e = -e), this.utcOffset(e, t), this) : -this.utcOffset();\n}\nfunction bG(e) {\n return this.utcOffset(0, e);\n}\nfunction MG(e) {\n return this._isUTC && (this.utcOffset(0, e), this._isUTC = !1, e && this.subtract(W5(this), "m")), this;\n}\nfunction AG() {\n if (this._tzm != null)\n this.utcOffset(this._tzm, !1, !0);\n else if (typeof this._i == "string") {\n var e = Ms(EU, this._i);\n e != null ? this.utcOffset(e) : this.utcOffset(0, !0);\n }\n return this;\n}\nfunction uG(e) {\n return this.isValid() ? (e = e ? K0(e).utcOffset() : 0, (this.utcOffset() - e) % 60 === 0) : !1;\n}\nfunction zG() {\n return this.utcOffset() > this.clone().month(0).utcOffset() || this.utcOffset() > this.clone().month(5).utcOffset();\n}\nfunction hG() {\n if (!T2(this._isDSTShifted))\n return this._isDSTShifted;\n var e = {}, t;\n return _6(e, this), e = sM(e), e._a ? (t = e._isUTC ? Qe(e._a) : K0(e._a), this._isDSTShifted = this.isValid() && cG(e._a, t.toArray()) > 0) : this._isDSTShifted = !1, this._isDSTShifted;\n}\nfunction OG() {\n return this.isValid() ? !this._isUTC : !1;\n}\nfunction fG() {\n return this.isValid() ? this._isUTC : !1;\n}\nfunction dM() {\n return this.isValid() ? this._isUTC && this._offset === 0 : !1;\n}\nvar gG = /^(-|\\+)?(?:(\\d*)[. ])?(\\d+):(\\d+)(?::(\\d+)(\\.\\d*)?)?$/, CG = /^(-|\\+)?P(?:([-+]?[0-9,.]*)Y)?(?:([-+]?[0-9,.]*)M)?(?:([-+]?[0-9,.]*)W)?(?:([-+]?[0-9,.]*)D)?(?:T(?:([-+]?[0-9,.]*)H)?(?:([-+]?[0-9,.]*)M)?(?:([-+]?[0-9,.]*)S)?)?$/;\nfunction we(e, t) {\n var o = e, n = null, r, i, a;\n return Jn(e) ? o = {\n ms: e._milliseconds,\n d: e._days,\n M: e._months\n } : Mt(e) || !isNaN(+e) ? (o = {}, t ? o[t] = +e : o.milliseconds = +e) : (n = gG.exec(e)) ? (r = n[1] === "-" ? -1 : 1, o = {\n y: 0,\n d: q0(n[Te]) * r,\n h: q0(n[M2]) * r,\n m: q0(n[me]) * r,\n s: q0(n[st]) * r,\n ms: q0(x5(n[a3] * 1e3)) * r\n // the millisecond decimal point is included in the match\n }) : (n = CG.exec(e)) ? (r = n[1] === "-" ? -1 : 1, o = {\n y: Kt(n[2], r),\n M: Kt(n[3], r),\n w: Kt(n[4], r),\n d: Kt(n[5], r),\n h: Kt(n[6], r),\n m: Kt(n[7], r),\n s: Kt(n[8], r)\n }) : o == null ? o = {} : typeof o == "object" && ("from" in o || "to" in o) && (a = mG(\n K0(o.from),\n K0(o.to)\n ), o = {}, o.ms = a.milliseconds, o.M = a.months), i = new bi(o), Jn(e) && k0(e, "_locale") && (i._locale = e._locale), Jn(e) && k0(e, "_isValid") && (i._isValid = e._isValid), i;\n}\nwe.fn = bi.prototype;\nwe.invalid = sG;\nfunction Kt(e, t) {\n var o = e && parseFloat(e.replace(",", "."));\n return (isNaN(o) ? 0 : o) * t;\n}\nfunction wc(e, t) {\n var o = {};\n return o.months = t.month() - e.month() + (t.year() - e.year()) * 12, e.clone().add(o.months, "M").isAfter(t) && --o.months, o.milliseconds = +t - +e.clone().add(o.months, "M"), o;\n}\nfunction mG(e, t) {\n var o;\n return e.isValid() && t.isValid() ? (t = As(t, e), e.isBefore(t) ? o = wc(e, t) : (o = wc(t, e), o.milliseconds = -o.milliseconds, o.months = -o.months), o) : { milliseconds: 0, months: 0 };\n}\nfunction bM(e, t) {\n return function(o, n) {\n var r, i;\n return n !== null && !isNaN(+n) && (Pb(\n t,\n "moment()." + t + "(period, number) is deprecated. Please use moment()." + t + "(number, period). See http://momentjs.com/guides/#/warnings/add-inverted-param/ for more info."\n ), i = o, o = n, n = i), r = we(o, n), MM(this, r, e), this;\n };\n}\nfunction MM(e, t, o, n) {\n var r = t._milliseconds, i = x5(t._days), a = x5(t._months);\n e.isValid() && (n = n ?? !0, a && Jb(e, qr(e, "Month") + a * o), i && Zb(e, "Date", qr(e, "Date") + i * o), r && e._d.setTime(e._d.valueOf() + r * o), n && $1.updateOffset(e, i || a));\n}\nvar LG = bM(1, "add"), vG = bM(-1, "subtract");\nfunction AM(e) {\n return typeof e == "string" || e instanceof String;\n}\nfunction qG(e) {\n return ye(e) || Ur(e) || AM(e) || Mt(e) || wG(e) || yG(e) || e === null || e === void 0;\n}\nfunction yG(e) {\n var t = p3(e) && !K6(e), o = !1, n = [\n "years",\n "year",\n "y",\n "months",\n "month",\n "M",\n "days",\n "day",\n "d",\n "dates",\n "date",\n "D",\n "hours",\n "hour",\n "h",\n "minutes",\n "minute",\n "m",\n "seconds",\n "second",\n "s",\n "milliseconds",\n "millisecond",\n "ms"\n ], r, i, a = n.length;\n for (r = 0; r < a; r += 1)\n i = n[r], o = o || k0(e, i);\n return t && o;\n}\nfunction wG(e) {\n var t = qe(e), o = !1;\n return t && (o = e.filter(function(n) {\n return !Mt(n) && AM(e);\n }).length === 0), t && o;\n}\nfunction xG(e) {\n var t = p3(e) && !K6(e), o = !1, n = [\n "sameDay",\n "nextDay",\n "lastDay",\n "nextWeek",\n "lastWeek",\n "sameElse"\n ], r, i;\n for (r = 0; r < n.length; r += 1)\n i = n[r], o = o || k0(e, i);\n return t && o;\n}\nfunction WG(e, t) {\n var o = e.diff(t, "days", !0);\n return o < -6 ? "sameElse" : o < -1 ? "lastWeek" : o < 0 ? "lastDay" : o < 1 ? "sameDay" : o < 2 ? "nextDay" : o < 7 ? "nextWeek" : "sameElse";\n}\nfunction RG(e, t) {\n arguments.length === 1 && (arguments[0] ? qG(arguments[0]) ? (e = arguments[0], t = void 0) : xG(arguments[0]) && (t = arguments[0], e = void 0) : (e = void 0, t = void 0));\n var o = e || K0(), n = As(o, this).startOf("day"), r = $1.calendarFormat(this, n) || "sameElse", i = t && (Ze(t[r]) ? t[r].call(this, o) : t[r]);\n return this.format(\n i || this.localeData().calendar(r, this, K0(o))\n );\n}\nfunction BG() {\n return new Yr(this);\n}\nfunction SG(e, t) {\n var o = ye(e) ? e : K0(e);\n return this.isValid() && o.isValid() ? (t = ze(t) || "millisecond", t === "millisecond" ? this.valueOf() > o.valueOf() : o.valueOf() < this.clone().startOf(t).valueOf()) : !1;\n}\nfunction EG(e, t) {\n var o = ye(e) ? e : K0(e);\n return this.isValid() && o.isValid() ? (t = ze(t) || "millisecond", t === "millisecond" ? this.valueOf() < o.valueOf() : this.clone().endOf(t).valueOf() < o.valueOf()) : !1;\n}\nfunction kG(e, t, o, n) {\n var r = ye(e) ? e : K0(e), i = ye(t) ? t : K0(t);\n return this.isValid() && r.isValid() && i.isValid() ? (n = n || "()", (n[0] === "(" ? this.isAfter(r, o) : !this.isBefore(r, o)) && (n[1] === ")" ? this.isBefore(i, o) : !this.isAfter(i, o))) : !1;\n}\nfunction NG(e, t) {\n var o = ye(e) ? e : K0(e), n;\n return this.isValid() && o.isValid() ? (t = ze(t) || "millisecond", t === "millisecond" ? this.valueOf() === o.valueOf() : (n = o.valueOf(), this.clone().startOf(t).valueOf() <= n && n <= this.clone().endOf(t).valueOf())) : !1;\n}\nfunction TG(e, t) {\n return this.isSame(e, t) || this.isAfter(e, t);\n}\nfunction IG(e, t) {\n return this.isSame(e, t) || this.isBefore(e, t);\n}\nfunction DG(e, t, o) {\n var n, r, i;\n if (!this.isValid())\n return NaN;\n if (n = As(e, this), !n.isValid())\n return NaN;\n switch (r = (n.utcOffset() - this.utcOffset()) * 6e4, t = ze(t), t) {\n case "year":\n i = _n(this, n) / 12;\n break;\n case "month":\n i = _n(this, n);\n break;\n case "quarter":\n i = _n(this, n) / 3;\n break;\n case "second":\n i = (this - n) / 1e3;\n break;\n case "minute":\n i = (this - n) / 6e4;\n break;\n case "hour":\n i = (this - n) / 36e5;\n break;\n case "day":\n i = (this - n - r) / 864e5;\n break;\n case "week":\n i = (this - n - r) / 6048e5;\n break;\n default:\n i = this - n;\n }\n return o ? i : ae(i);\n}\nfunction _n(e, t) {\n if (e.date() < t.date())\n return -_n(t, e);\n var o = (t.year() - e.year()) * 12 + (t.month() - e.month()), n = e.clone().add(o, "months"), r, i;\n return t - n < 0 ? (r = e.clone().add(o - 1, "months"), i = (t - n) / (n - r)) : (r = e.clone().add(o + 1, "months"), i = (t - n) / (r - n)), -(o + i) || 0;\n}\n$1.defaultFormat = "YYYY-MM-DDTHH:mm:ssZ";\n$1.defaultFormatUtc = "YYYY-MM-DDTHH:mm:ss[Z]";\nfunction HG() {\n return this.clone().locale("en").format("ddd MMM DD YYYY HH:mm:ss [GMT]ZZ");\n}\nfunction VG(e) {\n if (!this.isValid())\n return null;\n var t = e !== !0, o = t ? this.clone().utc() : this;\n return o.year() < 0 || o.year() > 9999 ? Kn(\n o,\n t ? "YYYYYY-MM-DD[T]HH:mm:ss.SSS[Z]" : "YYYYYY-MM-DD[T]HH:mm:ss.SSSZ"\n ) : Ze(Date.prototype.toISOString) ? t ? this.toDate().toISOString() : new Date(this.valueOf() + this.utcOffset() * 60 * 1e3).toISOString().replace("Z", Kn(o, "Z")) : Kn(\n o,\n t ? "YYYY-MM-DD[T]HH:mm:ss.SSS[Z]" : "YYYY-MM-DD[T]HH:mm:ss.SSSZ"\n );\n}\nfunction PG() {\n if (!this.isValid())\n return "moment.invalid(/* " + this._i + " */)";\n var e = "moment", t = "", o, n, r, i;\n return this.isLocal() || (e = this.utcOffset() === 0 ? "moment.utc" : "moment.parseZone", t = "Z"), o = "[" + e + \'("]\', n = 0 <= this.year() && this.year() <= 9999 ? "YYYY" : "YYYYYY", r = "-MM-DD[T]HH:mm:ss.SSS", i = t + \'[")]\', this.format(o + n + r + i);\n}\nfunction FG(e) {\n e || (e = this.isUtc() ? $1.defaultFormatUtc : $1.defaultFormat);\n var t = Kn(this, e);\n return this.localeData().postformat(t);\n}\nfunction XG(e, t) {\n return this.isValid() && (ye(e) && e.isValid() || K0(e).isValid()) ? we({ to: this, from: e }).locale(this.locale()).humanize(!t) : this.localeData().invalidDate();\n}\nfunction UG(e) {\n return this.from(K0(), e);\n}\nfunction YG(e, t) {\n return this.isValid() && (ye(e) && e.isValid() || K0(e).isValid()) ? we({ from: this, to: e }).locale(this.locale()).humanize(!t) : this.localeData().invalidDate();\n}\nfunction GG(e) {\n return this.to(K0(), e);\n}\nfunction uM(e) {\n var t;\n return e === void 0 ? this._locale._abbr : (t = zt(e), t != null && (this._locale = t), this);\n}\nvar zM = ue(\n "moment().lang() is deprecated. Instead, use moment().localeData() to get the language configuration. Use moment().locale() to change languages.",\n function(e) {\n return e === void 0 ? this.localeData() : this.locale(e);\n }\n);\nfunction hM() {\n return this._locale;\n}\nvar S4 = 1e3, F3 = 60 * S4, E4 = 60 * F3, OM = (365 * 400 + 97) * 24 * E4;\nfunction X3(e, t) {\n return (e % t + t) % t;\n}\nfunction fM(e, t, o) {\n return e < 100 && e >= 0 ? new Date(e + 400, t, o) - OM : new Date(e, t, o).valueOf();\n}\nfunction gM(e, t, o) {\n return e < 100 && e >= 0 ? Date.UTC(e + 400, t, o) - OM : Date.UTC(e, t, o);\n}\nfunction QG(e) {\n var t, o;\n if (e = ze(e), e === void 0 || e === "millisecond" || !this.isValid())\n return this;\n switch (o = this._isUTC ? gM : fM, e) {\n case "year":\n t = o(this.year(), 0, 1);\n break;\n case "quarter":\n t = o(\n this.year(),\n this.month() - this.month() % 3,\n 1\n );\n break;\n case "month":\n t = o(this.year(), this.month(), 1);\n break;\n case "week":\n t = o(\n this.year(),\n this.month(),\n this.date() - this.weekday()\n );\n break;\n case "isoWeek":\n t = o(\n this.year(),\n this.month(),\n this.date() - (this.isoWeekday() - 1)\n );\n break;\n case "day":\n case "date":\n t = o(this.year(), this.month(), this.date());\n break;\n case "hour":\n t = this._d.valueOf(), t -= X3(\n t + (this._isUTC ? 0 : this.utcOffset() * F3),\n E4\n );\n break;\n case "minute":\n t = this._d.valueOf(), t -= X3(t, F3);\n break;\n case "second":\n t = this._d.valueOf(), t -= X3(t, S4);\n break;\n }\n return this._d.setTime(t), $1.updateOffset(this, !0), this;\n}\nfunction ZG(e) {\n var t, o;\n if (e = ze(e), e === void 0 || e === "millisecond" || !this.isValid())\n return this;\n switch (o = this._isUTC ? gM : fM, e) {\n case "year":\n t = o(this.year() + 1, 0, 1) - 1;\n break;\n case "quarter":\n t = o(\n this.year(),\n this.month() - this.month() % 3 + 3,\n 1\n ) - 1;\n break;\n case "month":\n t = o(this.year(), this.month() + 1, 1) - 1;\n break;\n case "week":\n t = o(\n this.year(),\n this.month(),\n this.date() - this.weekday() + 7\n ) - 1;\n break;\n case "isoWeek":\n t = o(\n this.year(),\n this.month(),\n this.date() - (this.isoWeekday() - 1) + 7\n ) - 1;\n break;\n case "day":\n case "date":\n t = o(this.year(), this.month(), this.date() + 1) - 1;\n break;\n case "hour":\n t = this._d.valueOf(), t += E4 - X3(\n t + (this._isUTC ? 0 : this.utcOffset() * F3),\n E4\n ) - 1;\n break;\n case "minute":\n t = this._d.valueOf(), t += F3 - X3(t, F3) - 1;\n break;\n case "second":\n t = this._d.valueOf(), t += S4 - X3(t, S4) - 1;\n break;\n }\n return this._d.setTime(t), $1.updateOffset(this, !0), this;\n}\nfunction jG() {\n return this._d.valueOf() - (this._offset || 0) * 6e4;\n}\nfunction KG() {\n return Math.floor(this.valueOf() / 1e3);\n}\nfunction JG() {\n return new Date(this.valueOf());\n}\nfunction _G() {\n var e = this;\n return [\n e.year(),\n e.month(),\n e.date(),\n e.hour(),\n e.minute(),\n e.second(),\n e.millisecond()\n ];\n}\nfunction $G() {\n var e = this;\n return {\n years: e.year(),\n months: e.month(),\n date: e.date(),\n hours: e.hours(),\n minutes: e.minutes(),\n seconds: e.seconds(),\n milliseconds: e.milliseconds()\n };\n}\nfunction eQ() {\n return this.isValid() ? this.toISOString() : null;\n}\nfunction tQ() {\n return J6(this);\n}\nfunction oQ() {\n return Wt({}, C0(this));\n}\nfunction rQ() {\n return C0(this).overflow;\n}\nfunction nQ() {\n return {\n input: this._i,\n format: this._f,\n locale: this._locale,\n isUTC: this._isUTC,\n strict: this._strict\n };\n}\nd0("N", 0, 0, "eraAbbr");\nd0("NN", 0, 0, "eraAbbr");\nd0("NNN", 0, 0, "eraAbbr");\nd0("NNNN", 0, 0, "eraName");\nd0("NNNNN", 0, 0, "eraNarrow");\nd0("y", ["y", 1], "yo", "eraYear");\nd0("y", ["yy", 2], 0, "eraYear");\nd0("y", ["yyy", 3], 0, "eraYear");\nd0("y", ["yyyy", 4], 0, "eraYear");\nr0("N", us);\nr0("NN", us);\nr0("NNN", us);\nr0("NNNN", uQ);\nr0("NNNNN", zQ);\nY0(\n ["N", "NN", "NNN", "NNNN", "NNNNN"],\n function(e, t, o, n) {\n var r = o._locale.erasParse(e, n, o._strict);\n r ? C0(o).era = r : C0(o).invalidEra = e;\n }\n);\nr0("y", Mo);\nr0("yy", Mo);\nr0("yyy", Mo);\nr0("yyyy", Mo);\nr0("yo", hQ);\nY0(["y", "yy", "yyy", "yyyy"], y2);\nY0(["yo"], function(e, t, o, n) {\n var r;\n o._locale._eraYearOrdinalRegex && (r = e.match(o._locale._eraYearOrdinalRegex)), o._locale.eraYearOrdinalParse ? t[y2] = o._locale.eraYearOrdinalParse(e, r) : t[y2] = parseInt(e, 10);\n});\nfunction iQ(e, t) {\n var o, n, r, i = this._eras || zt("en")._eras;\n for (o = 0, n = i.length; o < n; ++o) {\n switch (typeof i[o].since) {\n case "string":\n r = $1(i[o].since).startOf("day"), i[o].since = r.valueOf();\n break;\n }\n switch (typeof i[o].until) {\n case "undefined":\n i[o].until = 1 / 0;\n break;\n case "string":\n r = $1(i[o].until).startOf("day").valueOf(), i[o].until = r.valueOf();\n break;\n }\n }\n return i;\n}\nfunction aQ(e, t, o) {\n var n, r, i = this.eras(), a, s, l;\n for (e = e.toUpperCase(), n = 0, r = i.length; n < r; ++n)\n if (a = i[n].name.toUpperCase(), s = i[n].abbr.toUpperCase(), l = i[n].narrow.toUpperCase(), o)\n switch (t) {\n case "N":\n case "NN":\n case "NNN":\n if (s === e)\n return i[n];\n break;\n case "NNNN":\n if (a === e)\n return i[n];\n break;\n case "NNNNN":\n if (l === e)\n return i[n];\n break;\n }\n else if ([a, s, l].indexOf(e) >= 0)\n return i[n];\n}\nfunction sQ(e, t) {\n var o = e.since <= e.until ? 1 : -1;\n return t === void 0 ? $1(e.since).year() : $1(e.since).year() + (t - e.offset) * o;\n}\nfunction cQ() {\n var e, t, o, n = this.localeData().eras();\n for (e = 0, t = n.length; e < t; ++e)\n if (o = this.clone().startOf("day").valueOf(), n[e].since <= o && o <= n[e].until || n[e].until <= o && o <= n[e].since)\n return n[e].name;\n return "";\n}\nfunction lQ() {\n var e, t, o, n = this.localeData().eras();\n for (e = 0, t = n.length; e < t; ++e)\n if (o = this.clone().startOf("day").valueOf(), n[e].since <= o && o <= n[e].until || n[e].until <= o && o <= n[e].since)\n return n[e].narrow;\n return "";\n}\nfunction pQ() {\n var e, t, o, n = this.localeData().eras();\n for (e = 0, t = n.length; e < t; ++e)\n if (o = this.clone().startOf("day").valueOf(), n[e].since <= o && o <= n[e].until || n[e].until <= o && o <= n[e].since)\n return n[e].abbr;\n return "";\n}\nfunction dQ() {\n var e, t, o, n, r = this.localeData().eras();\n for (e = 0, t = r.length; e < t; ++e)\n if (o = r[e].since <= r[e].until ? 1 : -1, n = this.clone().startOf("day").valueOf(), r[e].since <= n && n <= r[e].until || r[e].until <= n && n <= r[e].since)\n return (this.year() - $1(r[e].since).year()) * o + r[e].offset;\n return this.year();\n}\nfunction bQ(e) {\n return k0(this, "_erasNameRegex") || zs.call(this), e ? this._erasNameRegex : this._erasRegex;\n}\nfunction MQ(e) {\n return k0(this, "_erasAbbrRegex") || zs.call(this), e ? this._erasAbbrRegex : this._erasRegex;\n}\nfunction AQ(e) {\n return k0(this, "_erasNarrowRegex") || zs.call(this), e ? this._erasNarrowRegex : this._erasRegex;\n}\nfunction us(e, t) {\n return t.erasAbbrRegex(e);\n}\nfunction uQ(e, t) {\n return t.erasNameRegex(e);\n}\nfunction zQ(e, t) {\n return t.erasNarrowRegex(e);\n}\nfunction hQ(e, t) {\n return t._eraYearOrdinalRegex || Mo;\n}\nfunction zs() {\n var e = [], t = [], o = [], n = [], r, i, a, s, l, p = this.eras();\n for (r = 0, i = p.length; r < i; ++r)\n a = ct(p[r].name), s = ct(p[r].abbr), l = ct(p[r].narrow), t.push(a), e.push(s), o.push(l), n.push(a), n.push(s), n.push(l);\n this._erasRegex = new RegExp("^(" + n.join("|") + ")", "i"), this._erasNameRegex = new RegExp("^(" + t.join("|") + ")", "i"), this._erasAbbrRegex = new RegExp("^(" + e.join("|") + ")", "i"), this._erasNarrowRegex = new RegExp(\n "^(" + o.join("|") + ")",\n "i"\n );\n}\nd0(0, ["gg", 2], 0, function() {\n return this.weekYear() % 100;\n});\nd0(0, ["GG", 2], 0, function() {\n return this.isoWeekYear() % 100;\n});\nfunction Mi(e, t) {\n d0(0, [e, e.length], 0, t);\n}\nMi("gggg", "weekYear");\nMi("ggggg", "weekYear");\nMi("GGGG", "isoWeekYear");\nMi("GGGGG", "isoWeekYear");\nr0("G", ci);\nr0("g", ci);\nr0("GG", J0, re);\nr0("gg", J0, re);\nr0("GGGG", rs, os);\nr0("gggg", rs, os);\nr0("GGGGG", si, ii);\nr0("ggggg", si, ii);\nQr(\n ["gggg", "ggggg", "GGGG", "GGGGG"],\n function(e, t, o, n) {\n t[n.substr(0, 2)] = q0(e);\n }\n);\nQr(["gg", "GG"], function(e, t, o, n) {\n t[n] = $1.parseTwoDigitYear(e);\n});\nfunction OQ(e) {\n return CM.call(\n this,\n e,\n this.week(),\n this.weekday() + this.localeData()._week.dow,\n this.localeData()._week.dow,\n this.localeData()._week.doy\n );\n}\nfunction fQ(e) {\n return CM.call(\n this,\n e,\n this.isoWeek(),\n this.isoWeekday(),\n 1,\n 4\n );\n}\nfunction gQ() {\n return lt(this.year(), 1, 4);\n}\nfunction CQ() {\n return lt(this.isoWeekYear(), 1, 4);\n}\nfunction mQ() {\n var e = this.localeData()._week;\n return lt(this.year(), e.dow, e.doy);\n}\nfunction LQ() {\n var e = this.localeData()._week;\n return lt(this.weekYear(), e.dow, e.doy);\n}\nfunction CM(e, t, o, n, r) {\n var i;\n return e == null ? wr(this, n, r).year : (i = lt(e, n, r), t > i && (t = i), vQ.call(this, e, t, o, n, r));\n}\nfunction vQ(e, t, o, n, r) {\n var i = eM(e, t, o, n, r), a = yr(i.year, 0, i.dayOfYear);\n return this.year(a.getUTCFullYear()), this.month(a.getUTCMonth()), this.date(a.getUTCDate()), this;\n}\nd0("Q", 0, "Qo", "quarter");\nr0("Q", Xb);\nY0("Q", function(e, t) {\n t[at] = (q0(e) - 1) * 3;\n});\nfunction qQ(e) {\n return e == null ? Math.ceil((this.month() + 1) / 3) : this.month((e - 1) * 3 + this.month() % 3);\n}\nd0("D", ["DD", 2], "Do", "date");\nr0("D", J0, Ao);\nr0("DD", J0, re);\nr0("Do", function(e, t) {\n return e ? t._dayOfMonthOrdinalParse || t._ordinalParse : t._dayOfMonthOrdinalParseLenient;\n});\nY0(["D", "DD"], Te);\nY0("Do", function(e, t) {\n t[Te] = q0(e.match(J0)[0]);\n});\nvar mM = uo("Date", !0);\nd0("DDD", ["DDDD", 3], "DDDo", "dayOfYear");\nr0("DDD", ai);\nr0("DDDD", Ub);\nY0(["DDD", "DDDD"], function(e, t, o) {\n o._dayOfYear = q0(e);\n});\nfunction yQ(e) {\n var t = Math.round(\n (this.clone().startOf("day") - this.clone().startOf("year")) / 864e5\n ) + 1;\n return e == null ? t : this.add(e - t, "d");\n}\nd0("m", ["mm", 2], 0, "minute");\nr0("m", J0, ns);\nr0("mm", J0, re);\nY0(["m", "mm"], me);\nvar wQ = uo("Minutes", !1);\nd0("s", ["ss", 2], 0, "second");\nr0("s", J0, ns);\nr0("ss", J0, re);\nY0(["s", "ss"], st);\nvar xQ = uo("Seconds", !1);\nd0("S", 0, 0, function() {\n return ~~(this.millisecond() / 100);\n});\nd0(0, ["SS", 2], 0, function() {\n return ~~(this.millisecond() / 10);\n});\nd0(0, ["SSS", 3], 0, "millisecond");\nd0(0, ["SSSS", 4], 0, function() {\n return this.millisecond() * 10;\n});\nd0(0, ["SSSSS", 5], 0, function() {\n return this.millisecond() * 100;\n});\nd0(0, ["SSSSSS", 6], 0, function() {\n return this.millisecond() * 1e3;\n});\nd0(0, ["SSSSSSS", 7], 0, function() {\n return this.millisecond() * 1e4;\n});\nd0(0, ["SSSSSSSS", 8], 0, function() {\n return this.millisecond() * 1e5;\n});\nd0(0, ["SSSSSSSSS", 9], 0, function() {\n return this.millisecond() * 1e6;\n});\nr0("S", ai, Xb);\nr0("SS", ai, re);\nr0("SSS", ai, Ub);\nvar Rt, LM;\nfor (Rt = "SSSS"; Rt.length <= 9; Rt += "S")\n r0(Rt, Mo);\nfunction WQ(e, t) {\n t[a3] = q0(("0." + e) * 1e3);\n}\nfor (Rt = "S"; Rt.length <= 9; Rt += "S")\n Y0(Rt, WQ);\nLM = uo("Milliseconds", !1);\nd0("z", 0, 0, "zoneAbbr");\nd0("zz", 0, 0, "zoneName");\nfunction RQ() {\n return this._isUTC ? "UTC" : "";\n}\nfunction BQ() {\n return this._isUTC ? "Coordinated Universal Time" : "";\n}\nvar Y1 = Yr.prototype;\nY1.add = LG;\nY1.calendar = RG;\nY1.clone = BG;\nY1.diff = DG;\nY1.endOf = ZG;\nY1.format = FG;\nY1.from = XG;\nY1.fromNow = UG;\nY1.to = YG;\nY1.toNow = GG;\nY1.get = PU;\nY1.invalidAt = rQ;\nY1.isAfter = SG;\nY1.isBefore = EG;\nY1.isBetween = kG;\nY1.isSame = NG;\nY1.isSameOrAfter = TG;\nY1.isSameOrBefore = IG;\nY1.isValid = tQ;\nY1.lang = zM;\nY1.locale = uM;\nY1.localeData = hM;\nY1.max = tG;\nY1.min = eG;\nY1.parsingFlags = oQ;\nY1.set = FU;\nY1.startOf = QG;\nY1.subtract = vG;\nY1.toArray = _G;\nY1.toObject = $G;\nY1.toDate = JG;\nY1.toISOString = VG;\nY1.inspect = PG;\ntypeof Symbol < "u" && Symbol.for != null && (Y1[Symbol.for("nodejs.util.inspect.custom")] = function() {\n return "Moment<" + this.format() + ">";\n});\nY1.toJSON = eQ;\nY1.toString = HG;\nY1.unix = KG;\nY1.valueOf = jG;\nY1.creationData = nQ;\nY1.eraName = cQ;\nY1.eraNarrow = lQ;\nY1.eraAbbr = pQ;\nY1.eraYear = dQ;\nY1.year = Qb;\nY1.isLeapYear = VU;\nY1.weekYear = OQ;\nY1.isoWeekYear = fQ;\nY1.quarter = Y1.quarters = qQ;\nY1.month = _b;\nY1.daysInMonth = JU;\nY1.week = Y1.weeks = iY;\nY1.isoWeek = Y1.isoWeeks = aY;\nY1.weeksInYear = mQ;\nY1.weeksInWeekYear = LQ;\nY1.isoWeeksInYear = gQ;\nY1.isoWeeksInISOWeekYear = CQ;\nY1.date = mM;\nY1.day = Y1.days = fY;\nY1.weekday = gY;\nY1.isoWeekday = CY;\nY1.dayOfYear = yQ;\nY1.hour = Y1.hours = xY;\nY1.minute = Y1.minutes = wQ;\nY1.second = Y1.seconds = xQ;\nY1.millisecond = Y1.milliseconds = LM;\nY1.utcOffset = pG;\nY1.utc = bG;\nY1.local = MG;\nY1.parseZone = AG;\nY1.hasAlignedHourOffset = uG;\nY1.isDST = zG;\nY1.isLocal = OG;\nY1.isUtcOffset = fG;\nY1.isUtc = dM;\nY1.isUTC = dM;\nY1.zoneAbbr = RQ;\nY1.zoneName = BQ;\nY1.dates = ue(\n "dates accessor is deprecated. Use date instead.",\n mM\n);\nY1.months = ue(\n "months accessor is deprecated. Use month instead",\n _b\n);\nY1.years = ue(\n "years accessor is deprecated. Use year instead",\n Qb\n);\nY1.zone = ue(\n "moment().zone is deprecated, use moment().utcOffset instead. http://momentjs.com/guides/#/warnings/zone/",\n dG\n);\nY1.isDSTShifted = ue(\n "isDSTShifted is deprecated. See http://momentjs.com/guides/#/warnings/dst-shifted/ for more information",\n hG\n);\nfunction SQ(e) {\n return K0(e * 1e3);\n}\nfunction EQ() {\n return K0.apply(null, arguments).parseZone();\n}\nfunction vM(e) {\n return e;\n}\nvar N0 = $6.prototype;\nN0.calendar = OU;\nN0.longDateFormat = mU;\nN0.invalidDate = vU;\nN0.ordinal = wU;\nN0.preparse = vM;\nN0.postformat = vM;\nN0.relativeTime = WU;\nN0.pastFuture = RU;\nN0.set = zU;\nN0.eras = iQ;\nN0.erasParse = aQ;\nN0.erasConvertYear = sQ;\nN0.erasAbbrRegex = MQ;\nN0.erasNameRegex = bQ;\nN0.erasNarrowRegex = AQ;\nN0.months = QU;\nN0.monthsShort = ZU;\nN0.monthsParse = KU;\nN0.monthsRegex = $U;\nN0.monthsShortRegex = _U;\nN0.week = tY;\nN0.firstDayOfYear = nY;\nN0.firstDayOfWeek = rY;\nN0.weekdays = AY;\nN0.weekdaysMin = zY;\nN0.weekdaysShort = uY;\nN0.weekdaysParse = OY;\nN0.weekdaysRegex = mY;\nN0.weekdaysShortRegex = LY;\nN0.weekdaysMinRegex = vY;\nN0.isPM = yY;\nN0.meridiem = WY;\nfunction k4(e, t, o, n) {\n var r = zt(), i = Qe().set(n, t);\n return r[o](i, e);\n}\nfunction qM(e, t, o) {\n if (Mt(e) && (t = e, e = void 0), e = e || "", t != null)\n return k4(e, t, o, "month");\n var n, r = [];\n for (n = 0; n < 12; n++)\n r[n] = k4(e, n, o, "month");\n return r;\n}\nfunction hs(e, t, o, n) {\n typeof e == "boolean" ? (Mt(t) && (o = t, t = void 0), t = t || "") : (t = e, o = t, e = !1, Mt(t) && (o = t, t = void 0), t = t || "");\n var r = zt(), i = e ? r._week.dow : 0, a, s = [];\n if (o != null)\n return k4(t, (o + i) % 7, n, "day");\n for (a = 0; a < 7; a++)\n s[a] = k4(t, (a + i) % 7, n, "day");\n return s;\n}\nfunction kQ(e, t) {\n return qM(e, t, "months");\n}\nfunction NQ(e, t) {\n return qM(e, t, "monthsShort");\n}\nfunction TQ(e, t, o) {\n return hs(e, t, o, "weekdays");\n}\nfunction IQ(e, t, o) {\n return hs(e, t, o, "weekdaysShort");\n}\nfunction DQ(e, t, o) {\n return hs(e, t, o, "weekdaysMin");\n}\nTt("en", {\n eras: [\n {\n since: "0001-01-01",\n until: 1 / 0,\n offset: 1,\n name: "Anno Domini",\n narrow: "AD",\n abbr: "AD"\n },\n {\n since: "0000-12-31",\n until: -1 / 0,\n offset: 1,\n name: "Before Christ",\n narrow: "BC",\n abbr: "BC"\n }\n ],\n dayOfMonthOrdinalParse: /\\d{1,2}(th|st|nd|rd)/,\n ordinal: function(e) {\n var t = e % 10, o = q0(e % 100 / 10) === 1 ? "th" : t === 1 ? "st" : t === 2 ? "nd" : t === 3 ? "rd" : "th";\n return e + o;\n }\n});\n$1.lang = ue(\n "moment.lang is deprecated. Use moment.locale instead.",\n Tt\n);\n$1.langData = ue(\n "moment.langData is deprecated. Use moment.localeData instead.",\n zt\n);\nvar Ke = Math.abs;\nfunction HQ() {\n var e = this._data;\n return this._milliseconds = Ke(this._milliseconds), this._days = Ke(this._days), this._months = Ke(this._months), e.milliseconds = Ke(e.milliseconds), e.seconds = Ke(e.seconds), e.minutes = Ke(e.minutes), e.hours = Ke(e.hours), e.months = Ke(e.months), e.years = Ke(e.years), this;\n}\nfunction yM(e, t, o, n) {\n var r = we(t, o);\n return e._milliseconds += n * r._milliseconds, e._days += n * r._days, e._months += n * r._months, e._bubble();\n}\nfunction VQ(e, t) {\n return yM(this, e, t, 1);\n}\nfunction PQ(e, t) {\n return yM(this, e, t, -1);\n}\nfunction xc(e) {\n return e < 0 ? Math.floor(e) : Math.ceil(e);\n}\nfunction FQ() {\n var e = this._milliseconds, t = this._days, o = this._months, n = this._data, r, i, a, s, l;\n return e >= 0 && t >= 0 && o >= 0 || e <= 0 && t <= 0 && o <= 0 || (e += xc(R5(o) + t) * 864e5, t = 0, o = 0), n.milliseconds = e % 1e3, r = ae(e / 1e3), n.seconds = r % 60, i = ae(r / 60), n.minutes = i % 60, a = ae(i / 60), n.hours = a % 24, t += ae(a / 24), l = ae(wM(t)), o += l, t -= xc(R5(l)), s = ae(o / 12), o %= 12, n.days = t, n.months = o, n.years = s, this;\n}\nfunction wM(e) {\n return e * 4800 / 146097;\n}\nfunction R5(e) {\n return e * 146097 / 4800;\n}\nfunction XQ(e) {\n if (!this.isValid())\n return NaN;\n var t, o, n = this._milliseconds;\n if (e = ze(e), e === "month" || e === "quarter" || e === "year")\n switch (t = this._days + n / 864e5, o = this._months + wM(t), e) {\n case "month":\n return o;\n case "quarter":\n return o / 3;\n case "year":\n return o / 12;\n }\n else\n switch (t = this._days + Math.round(R5(this._months)), e) {\n case "week":\n return t / 7 + n / 6048e5;\n case "day":\n return t + n / 864e5;\n case "hour":\n return t * 24 + n / 36e5;\n case "minute":\n return t * 1440 + n / 6e4;\n case "second":\n return t * 86400 + n / 1e3;\n case "millisecond":\n return Math.floor(t * 864e5) + n;\n default:\n throw new Error("Unknown unit " + e);\n }\n}\nfunction ht(e) {\n return function() {\n return this.as(e);\n };\n}\nvar xM = ht("ms"), UQ = ht("s"), YQ = ht("m"), GQ = ht("h"), QQ = ht("d"), ZQ = ht("w"), jQ = ht("M"), KQ = ht("Q"), JQ = ht("y"), _Q = xM;\nfunction $Q() {\n return we(this);\n}\nfunction eZ(e) {\n return e = ze(e), this.isValid() ? this[e + "s"]() : NaN;\n}\nfunction O3(e) {\n return function() {\n return this.isValid() ? this._data[e] : NaN;\n };\n}\nvar tZ = O3("milliseconds"), oZ = O3("seconds"), rZ = O3("minutes"), nZ = O3("hours"), iZ = O3("days"), aZ = O3("months"), sZ = O3("years");\nfunction cZ() {\n return ae(this.days() / 7);\n}\nvar $e = Math.round, I3 = {\n ss: 44,\n // a few seconds to seconds\n s: 45,\n // seconds to minute\n m: 45,\n // minutes to hour\n h: 22,\n // hours to day\n d: 26,\n // days to month/week\n w: null,\n // weeks to month\n M: 11\n // months to year\n};\nfunction lZ(e, t, o, n, r) {\n return r.relativeTime(t || 1, !!o, e, n);\n}\nfunction pZ(e, t, o, n) {\n var r = we(e).abs(), i = $e(r.as("s")), a = $e(r.as("m")), s = $e(r.as("h")), l = $e(r.as("d")), p = $e(r.as("M")), d = $e(r.as("w")), b = $e(r.as("y")), M = i <= o.ss && ["s", i] || i < o.s && ["ss", i] || a <= 1 && ["m"] || a < o.m && ["mm", a] || s <= 1 && ["h"] || s < o.h && ["hh", s] || l <= 1 && ["d"] || l < o.d && ["dd", l];\n return o.w != null && (M = M || d <= 1 && ["w"] || d < o.w && ["ww", d]), M = M || p <= 1 && ["M"] || p < o.M && ["MM", p] || b <= 1 && ["y"] || ["yy", b], M[2] = t, M[3] = +e > 0, M[4] = n, lZ.apply(null, M);\n}\nfunction dZ(e) {\n return e === void 0 ? $e : typeof e == "function" ? ($e = e, !0) : !1;\n}\nfunction bZ(e, t) {\n return I3[e] === void 0 ? !1 : t === void 0 ? I3[e] : (I3[e] = t, e === "s" && (I3.ss = t - 1), !0);\n}\nfunction MZ(e, t) {\n if (!this.isValid())\n return this.localeData().invalidDate();\n var o = !1, n = I3, r, i;\n return typeof e == "object" && (t = e, e = !1), typeof e == "boolean" && (o = e), typeof t == "object" && (n = Object.assign({}, I3, t), t.s != null && t.ss == null && (n.ss = t.s - 1)), r = this.localeData(), i = pZ(this, !o, n, r), o && (i = r.pastFuture(+this, i)), r.postformat(i);\n}\nvar qa = Math.abs;\nfunction W3(e) {\n return (e > 0) - (e < 0) || +e;\n}\nfunction Ai() {\n if (!this.isValid())\n return this.localeData().invalidDate();\n var e = qa(this._milliseconds) / 1e3, t = qa(this._days), o = qa(this._months), n, r, i, a, s = this.asSeconds(), l, p, d, b;\n return s ? (n = ae(e / 60), r = ae(n / 60), e %= 60, n %= 60, i = ae(o / 12), o %= 12, a = e ? e.toFixed(3).replace(/\\.?0+$/, "") : "", l = s < 0 ? "-" : "", p = W3(this._months) !== W3(s) ? "-" : "", d = W3(this._days) !== W3(s) ? "-" : "", b = W3(this._milliseconds) !== W3(s) ? "-" : "", l + "P" + (i ? p + i + "Y" : "") + (o ? p + o + "M" : "") + (t ? d + t + "D" : "") + (r || n || e ? "T" : "") + (r ? b + r + "H" : "") + (n ? b + n + "M" : "") + (e ? b + a + "S" : "")) : "P0D";\n}\nvar x0 = bi.prototype;\nx0.isValid = aG;\nx0.abs = HQ;\nx0.add = VQ;\nx0.subtract = PQ;\nx0.as = XQ;\nx0.asMilliseconds = xM;\nx0.asSeconds = UQ;\nx0.asMinutes = YQ;\nx0.asHours = GQ;\nx0.asDays = QQ;\nx0.asWeeks = ZQ;\nx0.asMonths = jQ;\nx0.asQuarters = KQ;\nx0.asYears = JQ;\nx0.valueOf = _Q;\nx0._bubble = FQ;\nx0.clone = $Q;\nx0.get = eZ;\nx0.milliseconds = tZ;\nx0.seconds = oZ;\nx0.minutes = rZ;\nx0.hours = nZ;\nx0.days = iZ;\nx0.weeks = cZ;\nx0.months = aZ;\nx0.years = sZ;\nx0.humanize = MZ;\nx0.toISOString = Ai;\nx0.toString = Ai;\nx0.toJSON = Ai;\nx0.locale = uM;\nx0.localeData = hM;\nx0.toIsoString = ue(\n "toIsoString() is deprecated. Please use toISOString() instead (notice the capitals)",\n Ai\n);\nx0.lang = zM;\nd0("X", 0, 0, "unix");\nd0("x", 0, 0, "valueOf");\nr0("x", ci);\nr0("X", kU);\nY0("X", function(e, t, o) {\n o._d = new Date(parseFloat(e) * 1e3);\n});\nY0("x", function(e, t, o) {\n o._d = new Date(q0(e));\n});\n//! moment.js\n$1.version = "2.30.1";\nAU(K0);\n$1.fn = Y1;\n$1.min = oG;\n$1.max = rG;\n$1.now = nG;\n$1.utc = Qe;\n$1.unix = SQ;\n$1.months = kQ;\n$1.isDate = Ur;\n$1.locale = Tt;\n$1.invalid = ni;\n$1.duration = we;\n$1.isMoment = ye;\n$1.weekdays = TQ;\n$1.parseZone = EQ;\n$1.localeData = zt;\n$1.isDuration = Jn;\n$1.monthsShort = NQ;\n$1.weekdaysMin = DQ;\n$1.defineLocale = ls;\n$1.updateLocale = EY;\n$1.locales = kY;\n$1.weekdaysShort = IQ;\n$1.normalizeUnits = ze;\n$1.relativeTimeRounding = dZ;\n$1.relativeTimeThreshold = bZ;\n$1.calendarFormat = WG;\n$1.prototype = Y1;\n$1.HTML5_FMT = {\n DATETIME_LOCAL: "YYYY-MM-DDTHH:mm",\n // \n DATETIME_LOCAL_SECONDS: "YYYY-MM-DDTHH:mm:ss",\n // \n DATETIME_LOCAL_MS: "YYYY-MM-DDTHH:mm:ss.SSS",\n // \n DATE: "YYYY-MM-DD",\n // \n TIME: "HH:mm",\n // \n TIME_SECONDS: "HH:mm:ss",\n // \n TIME_MS: "HH:mm:ss.SSS",\n // \n WEEK: "GGGG-[W]WW",\n // \n MONTH: "YYYY-MM"\n // \n};\nconst AZ = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({\n __proto__: null,\n default: $1\n}, Symbol.toStringTag, { value: "Module" }));\nfunction J_(e) {\n const {\n label: t,\n getValue: o,\n isDisabled: n,\n placeholder: r,\n isRequired: i,\n isError: a,\n disableClear: s,\n handleClearButton: l,\n dateFormat: p,\n popperPlacement: d,\n minDate: b,\n maxDate: M,\n $isTimeZone: u,\n isDate: A,\n $isTime: z,\n defaultValue: f,\n hideClearButton: O,\n ...h\n } = e, [g, v] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(null), [L, y] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(!1), [B, X] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(!1), [F, T] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(!1), [w, H] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(!1), [C, q] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(""), [m, k] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(), [x, N] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(), V = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)(\n (t1) => /* @__PURE__ */ c(Ip, { ...t1 }),\n []\n ), R = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)(\n (t1) => t1.substr(0, 1),\n []\n ), I = (0,react__WEBPACK_IMPORTED_MODULE_0__.useRef)();\n (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => {\n const t1 = (i1) => {\n var n1;\n F && I.current && !((n1 = I == null ? void 0 : I.current) != null && n1.contains(i1.target)) && (T(!1), v(null));\n };\n return document.addEventListener("mousedown", t1), () => {\n document.removeEventListener("mousedown", t1);\n };\n }, [F]), (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => {\n const t1 = (i1) => {\n var n1;\n w && I.current && !((n1 = I == null ? void 0 : I.current) != null && n1.contains(i1.target)) && H(!1);\n };\n return document.addEventListener("mousedown", t1), () => {\n document.removeEventListener("mousedown", t1);\n };\n }, [w]);\n const j = (0,react__WEBPACK_IMPORTED_MODULE_0__.useRef)(), U = (0,react__WEBPACK_IMPORTED_MODULE_0__.useMemo)(\n () => /* @__PURE__ */ c(\n E7,\n {\n placeholder: r,\n iconRight: "Calendar",\n readOnly: !0,\n label: t,\n isRequired: i,\n isError: a,\n isDisabled: n,\n onInput: () => {\n T(!F);\n },\n handleClearFn: () => {\n l && l(), o && o(null), v(null), q(""), k(""), T(!1);\n },\n onIconRightClick: () => {\n T(!F);\n },\n hideClearButton: O\n }\n ),\n [n, a, O, j]\n ), _ = (0,react__WEBPACK_IMPORTED_MODULE_0__.useMemo)(\n () => /* @__PURE__ */ c(\n E7,\n {\n isDisabled: n,\n placeholder: r,\n iconRight: "Time",\n readOnly: !0,\n label: t,\n isRequired: i,\n isError: a,\n value: C,\n handleClearFn: () => {\n l && l(), o && o(null), q(""), H(!1);\n },\n onIconRightClick: () => {\n H(!w);\n },\n hideClearButton: O\n }\n ),\n [C, n, O, w]\n ), r1 = (t1, i1) => $1(t1, i1 == null ? void 0 : i1.toUpperCase(), !0).isValid(), K = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)(\n (t1) => {\n X(!1), v(t1), y(!1);\n },\n [y]\n ), Q = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)(() => {\n y(!0);\n }, [y]), E = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)(() => {\n y(!1);\n }, [y]), D = () => {\n if (b)\n return b;\n }, G = () => {\n if (M)\n return M;\n }, J = () => {\n !A && o && z && u && (q(""), H(!1), T(!1)), !A && o && z && !u && (q(""), H(!1), T(!1)), A && o && A && !z && !u && v(null), H(!w), T(!F);\n }, S = () => {\n let t1 = {};\n o && g != null && A && r1(j.current.input.value, p) && (t1.selectedDate = g, x && C && m && (C && (t1.selectedTime = C), m && (t1.selectedTimeZone = m), o(t1), T(!1)), !x && m && (C && (t1.selectedTime = C), m && (t1.selectedTimeZone = m), o(t1), T(!1)), X(!0)), !A && o && z && u && (C && (t1.selectedTime = C), m && (t1.selectedTimeZone = m), C && m && (o(t1), H(!1))), !A && o && z && !u && (C && (t1.selectedTime = C), C && (o(t1), H(!1)));\n };\n (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => {\n ((h == null ? void 0 : h.value) == null || (h == null ? void 0 : h.value) == "") && v(null);\n }, [h == null ? void 0 : h.value]);\n const W = () => /* @__PURE__ */ c(UW, { children: /* @__PURE__ */ c(\n B2,\n {\n buttonType: "link",\n children: "Today",\n isDisabled: !1,\n size: "sm"\n }\n ) }), P = (t1) => {\n q(t1);\n }, Y = (t1) => {\n k(t1), t1 != null && t1 != "" && !z && u && o && o(t1);\n }, Z = (t1) => {\n N(t1);\n };\n return /* @__PURE__ */ e1(wp, { isDisabled: n, ref: I, children: [\n !z && !u && /* @__PURE__ */ c(s0, { children: /* @__PURE__ */ e1(\n vp,\n {\n ...h,\n closeOnScroll: !0,\n disabledKeyboardNavigation: !0,\n renderCustomHeader: V,\n formatWeekDay: R,\n onChange: K,\n onFocus: Q,\n onBlur: E,\n customInput: U,\n placeholderText: r,\n ref: j,\n disabled: n,\n selected: g || f,\n popperPlacement: d || "top-start",\n dateFormat: p || "MMMM d, yyyy",\n minDate: D(),\n maxDate: G(),\n open: F,\n showTimeSelectOnly: !A,\n todayButton: W(),\n popperProps: { strategy: "fixed" },\n children: [\n /* @__PURE__ */ c(\n Ca,\n {\n $isTimeZone: u,\n getSelectedTime: P,\n getTimeZoneValue: Y,\n preSelectedTime: C,\n isDate: A,\n $isTime: z,\n setIsActiveTime: Z\n }\n ),\n /* @__PURE__ */ c(v7, { children: /* @__PURE__ */ c(L7, { children: /* @__PURE__ */ e1(q7, { children: [\n /* @__PURE__ */ c(\n B2,\n {\n buttonType: "secondary",\n children: "Cancel",\n isDisabled: !1,\n size: "sm",\n onClick: J\n }\n ),\n /* @__PURE__ */ c(\n B2,\n {\n buttonType: "primary",\n children: "Confirm",\n isDisabled: !1,\n size: "sm",\n onClick: S\n }\n )\n ] }) }) })\n ]\n }\n ) }),\n !A && z && /* @__PURE__ */ e1(s0, { children: [\n _,\n w && /* @__PURE__ */ e1(IW, { children: [\n /* @__PURE__ */ c(\n Ca,\n {\n $isTimeZone: u,\n getSelectedTime: P,\n getTimeZoneValue: Y,\n isDate: A,\n $isTime: z,\n preSelectedTime: C,\n setIsActiveTime: Z,\n handleClearButton: l,\n hideClearButton: O\n }\n ),\n /* @__PURE__ */ c(v7, { children: /* @__PURE__ */ c(L7, { children: /* @__PURE__ */ e1(q7, { children: [\n /* @__PURE__ */ c(\n B2,\n {\n buttonType: "secondary",\n children: "Cancel",\n isDisabled: !1,\n size: "sm",\n onClick: J\n }\n ),\n /* @__PURE__ */ c(\n B2,\n {\n buttonType: "primary",\n children: "Confirm",\n isDisabled: !1,\n size: "sm",\n onClick: S\n }\n )\n ] }) }) })\n ] })\n ] }),\n !A && !z && /* @__PURE__ */ c(\n Ca,\n {\n getSelectedTime: P,\n isDate: A,\n $isTime: z,\n $isTimeZone: u,\n getTimeZoneValue: Y,\n isDisabled: n,\n handleClearButton: l,\n hideClearButton: O\n }\n )\n ] });\n}\nvar uZ = function(e) {\n var t = {};\n function o(n) {\n if (t[n])\n return t[n].exports;\n var r = t[n] = { i: n, l: !1, exports: {} };\n return e[n].call(r.exports, r, r.exports, o), r.l = !0, r.exports;\n }\n return o.m = e, o.c = t, o.d = function(n, r, i) {\n o.o(n, r) || Object.defineProperty(n, r, { enumerable: !0, get: i });\n }, o.r = function(n) {\n typeof Symbol < "u" && Symbol.toStringTag && Object.defineProperty(n, Symbol.toStringTag, { value: "Module" }), Object.defineProperty(n, "__esModule", { value: !0 });\n }, o.t = function(n, r) {\n if (1 & r && (n = o(n)), 8 & r || 4 & r && typeof n == "object" && n && n.__esModule)\n return n;\n var i = /* @__PURE__ */ Object.create(null);\n if (o.r(i), Object.defineProperty(i, "default", { enumerable: !0, value: n }), 2 & r && typeof n != "string")\n for (var a in n)\n o.d(i, a, (function(s) {\n return n[s];\n }).bind(null, a));\n return i;\n }, o.n = function(n) {\n var r = n && n.__esModule ? function() {\n return n.default;\n } : function() {\n return n;\n };\n return o.d(r, "a", r), r;\n }, o.o = function(n, r) {\n return Object.prototype.hasOwnProperty.call(n, r);\n }, o.p = "", o(o.s = 32);\n}([function(e, t, o) {\n e.exports = o(27)();\n}, function(e, t, o) {\n e.exports = o(25);\n}, function(e, t, o) {\n e.exports = o(21);\n}, function(e, t, o) {\n var n = o(20);\n e.exports = function(r) {\n for (var i = 1; i < arguments.length; i++)\n if (i % 2) {\n var a = arguments[i] != null ? arguments[i] : {}, s = Object.keys(a);\n typeof Object.getOwnPropertySymbols == "function" && (s = s.concat(Object.getOwnPropertySymbols(a).filter(function(l) {\n return Object.getOwnPropertyDescriptor(a, l).enumerable;\n }))), s.forEach(function(l) {\n n(r, l, a[l]);\n });\n } else\n Object.defineProperties(r, Object.getOwnPropertyDescriptors(arguments[i]));\n return r;\n };\n}, function(e, t) {\n function o(n, r, i, a, s, l, p) {\n try {\n var d = n[l](p), b = d.value;\n } catch (M) {\n return void i(M);\n }\n d.done ? r(b) : Promise.resolve(b).then(a, s);\n }\n e.exports = function(n) {\n return function() {\n var r = this, i = arguments;\n return new Promise(function(a, s) {\n var l = n.apply(r, i);\n function p(b) {\n o(l, a, s, p, d, "next", b);\n }\n function d(b) {\n o(l, a, s, p, d, "throw", b);\n }\n p(void 0);\n });\n };\n };\n}, function(e, t) {\n function o(n) {\n return e.exports = o = Object.setPrototypeOf ? Object.getPrototypeOf : function(r) {\n return r.__proto__ || Object.getPrototypeOf(r);\n }, o(n);\n }\n e.exports = o;\n}, function(e, t) {\n e.exports = function(o, n) {\n if (!(o instanceof n))\n throw new TypeError("Cannot call a class as a function");\n };\n}, function(e, t) {\n function o(n, r) {\n for (var i = 0; i < r.length; i++) {\n var a = r[i];\n a.enumerable = a.enumerable || !1, a.configurable = !0, "value" in a && (a.writable = !0), Object.defineProperty(n, a.key, a);\n }\n }\n e.exports = function(n, r, i) {\n return r && o(n.prototype, r), i && o(n, i), n;\n };\n}, function(e, t, o) {\n var n = o(22), r = o(9);\n e.exports = function(i, a) {\n return !a || n(a) !== "object" && typeof a != "function" ? r(i) : a;\n };\n}, function(e, t) {\n e.exports = function(o) {\n if (o === void 0)\n throw new ReferenceError("this hasn\'t been initialised - super() hasn\'t been called");\n return o;\n };\n}, function(e, t, o) {\n var n = o(23);\n e.exports = function(r, i) {\n if (typeof i != "function" && i !== null)\n throw new TypeError("Super expression must either be null or a function");\n r.prototype = Object.create(i && i.prototype, { constructor: { value: r, writable: !0, configurable: !0 } }), i && n(r, i);\n };\n}, function(e, t, o) {\n var n = o(29), r = o(30), i = o(31);\n e.exports = function(a, s) {\n return n(a) || r(a, s) || i();\n };\n}, function(e, t, o) {\n var n = o(17), r = o(18), i = o(19);\n e.exports = function(a) {\n return n(a) || r(a) || i();\n };\n}, function(e, t, o) {\n o(5);\n var n = o(24);\n function r(i, a, s) {\n return typeof Reflect < "u" && Reflect.get ? e.exports = r = Reflect.get : e.exports = r = function(l, p, d) {\n var b = n(l, p);\n if (b) {\n var M = Object.getOwnPropertyDescriptor(b, p);\n return M.get ? M.get.call(d) : M.value;\n }\n }, r(i, a, s || i);\n }\n e.exports = r;\n}, function(e, t) {\n e.exports = "data:image/svg+xml;base64,PHN2ZyB2aWV3Qm94PSIwIDAgOCAxNCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48ZyBmaWxsPSIjMzMzMzMzIj48cGF0aCBkPSJNMSwxNCBDMC40LDE0IDAsMTMuNiAwLDEzIEwwLDEgQzAsMC40IDAuNCwwIDEsMCBDMS42LDAgMiwwLjQgMiwxIEwyLDEzIEMyLDEzLjYgMS42LDE0IDEsMTQgWiIgaWQ9IlBhdGgiPjwvcGF0aD48cGF0aCBkPSJNNywxNCBDNi40LDE0IDYsMTMuNiA2LDEzIEw2LDEgQzYsMC40IDYuNCwwIDcsMCBDNy42LDAgOCwwLjQgOCwxIEw4LDEzIEM4LDEzLjYgNy42LDE0IDcsMTQgWiIgaWQ9IlBhdGgiPjwvcGF0aD48L2c+PC9zdmc+Cg==";\n}, function(e, t) {\n e.exports = "data:image/svg+xml;base64,PHN2ZyB2aWV3Qm94PSIwIDAgMTQgMTQiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PGcgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoLTUuMCwgMC4wKSIgZmlsbD0iIzMzMzMzMyI+PGcgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoNC4wLCAwLjApIj48cG9seWdvbiBwb2ludHM9IjcuNzE5IDQuOTY0IDEyLjY5MiAwLjAxNyAxNC4zODkgMS43MTUgOS40MTIgNi42NjYgMTQuMzU0IDExLjYzNCAxMi42NTcgMTMuMzMxIDYuMDE3IDYuNjU3IDcuNzE1IDQuOTYwIj48L3BvbHlnb24+PHBvbHlnb24gcG9pbnRzPSI3LjYxMiA0Ljk2NCA3LjYxNiA0Ljk2MCA5LjMxMyA2LjY1NyAyLjY3NCAxMy4zMzEgMC45NzcgMTEuNjM0IDUuOTE5IDYuNjY2IDAuOTQyIDEuNzE1IDIuNjM5IDAuMDE3Ij48L3BvbHlnb24+PC9nPjwvZz48L3N2Zz4K";\n}, function(e, t) {\n e.exports = "data:image/svg+xml;base64,PHN2ZyB2aWV3Qm94PSIwIDAgMTEgMTUiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PGc+PHBhdGggZD0iTTAuNSwxNC45IEMwLjIsMTQuNyAwLDE0LjQgMCwxNCBMMCwyIEMwLDEuNiAwLjIsMS4zIDAuNSwxLjEgQzAuOCwwLjkgMS4yLDAuOSAxLjUsMS4xIEwxMC41LDcuMSBDMTAuOCw3LjMgMTAuOSw3LjYgMTAuOSw3LjkgQzEwLjksOC4yIDEwLjcsOC41IDEwLjUsOC43IEwxLjUsMTQuNyBDMS40LDE0LjkgMC44LDE1LjEgMC41LDE0LjkgWiBNMiwzLjkgTDIsMTIuMiBMOC4yLDguMSBMMiwzLjkgWiI+PC9wYXRoPjwvZz48L3N2Zz4K";\n}, function(e, t) {\n e.exports = function(o) {\n if (Array.isArray(o)) {\n for (var n = 0, r = new Array(o.length); n < o.length; n++)\n r[n] = o[n];\n return r;\n }\n };\n}, function(e, t) {\n e.exports = function(o) {\n if (Symbol.iterator in Object(o) || Object.prototype.toString.call(o) === "[object Arguments]")\n return Array.from(o);\n };\n}, function(e, t) {\n e.exports = function() {\n throw new TypeError("Invalid attempt to spread non-iterable instance");\n };\n}, function(e, t) {\n e.exports = function(o, n, r) {\n return n in o ? Object.defineProperty(o, n, { value: r, enumerable: !0, configurable: !0, writable: !0 }) : o[n] = r, o;\n };\n}, function(e, t, o) {\n var n = function(r) {\n var i, a = Object.prototype, s = a.hasOwnProperty, l = typeof Symbol == "function" ? Symbol : {}, p = l.iterator || "@@iterator", d = l.asyncIterator || "@@asyncIterator", b = l.toStringTag || "@@toStringTag";\n function M(N, V, R, I) {\n var j = V && V.prototype instanceof g ? V : g, U = Object.create(j.prototype), _ = new m(I || []);\n return U._invoke = function(r1, K, Q) {\n var E = A;\n return function(D, G) {\n if (E === f)\n throw new Error("Generator is already running");\n if (E === O) {\n if (D === "throw")\n throw G;\n return x();\n }\n for (Q.method = D, Q.arg = G; ; ) {\n var J = Q.delegate;\n if (J) {\n var S = H(J, Q);\n if (S) {\n if (S === h)\n continue;\n return S;\n }\n }\n if (Q.method === "next")\n Q.sent = Q._sent = Q.arg;\n else if (Q.method === "throw") {\n if (E === A)\n throw E = O, Q.arg;\n Q.dispatchException(Q.arg);\n } else\n Q.method === "return" && Q.abrupt("return", Q.arg);\n E = f;\n var W = u(r1, K, Q);\n if (W.type === "normal") {\n if (E = Q.done ? O : z, W.arg === h)\n continue;\n return { value: W.arg, done: Q.done };\n }\n W.type === "throw" && (E = O, Q.method = "throw", Q.arg = W.arg);\n }\n };\n }(N, R, _), U;\n }\n function u(N, V, R) {\n try {\n return { type: "normal", arg: N.call(V, R) };\n } catch (I) {\n return { type: "throw", arg: I };\n }\n }\n r.wrap = M;\n var A = "suspendedStart", z = "suspendedYield", f = "executing", O = "completed", h = {};\n function g() {\n }\n function v() {\n }\n function L() {\n }\n var y = {};\n y[p] = function() {\n return this;\n };\n var B = Object.getPrototypeOf, X = B && B(B(k([])));\n X && X !== a && s.call(X, p) && (y = X);\n var F = L.prototype = g.prototype = Object.create(y);\n function T(N) {\n ["next", "throw", "return"].forEach(function(V) {\n N[V] = function(R) {\n return this._invoke(V, R);\n };\n });\n }\n function w(N) {\n var V;\n this._invoke = function(R, I) {\n function j() {\n return new Promise(function(U, _) {\n (function r1(K, Q, E, D) {\n var G = u(N[K], N, Q);\n if (G.type !== "throw") {\n var J = G.arg, S = J.value;\n return S && typeof S == "object" && s.call(S, "__await") ? Promise.resolve(S.__await).then(function(W) {\n r1("next", W, E, D);\n }, function(W) {\n r1("throw", W, E, D);\n }) : Promise.resolve(S).then(function(W) {\n J.value = W, E(J);\n }, function(W) {\n return r1("throw", W, E, D);\n });\n }\n D(G.arg);\n })(R, I, U, _);\n });\n }\n return V = V ? V.then(j, j) : j();\n };\n }\n function H(N, V) {\n var R = N.iterator[V.method];\n if (R === i) {\n if (V.delegate = null, V.method === "throw") {\n if (N.iterator.return && (V.method = "return", V.arg = i, H(N, V), V.method === "throw"))\n return h;\n V.method = "throw", V.arg = new TypeError("The iterator does not provide a \'throw\' method");\n }\n return h;\n }\n var I = u(R, N.iterator, V.arg);\n if (I.type === "throw")\n return V.method = "throw", V.arg = I.arg, V.delegate = null, h;\n var j = I.arg;\n return j ? j.done ? (V[N.resultName] = j.value, V.next = N.nextLoc, V.method !== "return" && (V.method = "next", V.arg = i), V.delegate = null, h) : j : (V.method = "throw", V.arg = new TypeError("iterator result is not an object"), V.delegate = null, h);\n }\n function C(N) {\n var V = { tryLoc: N[0] };\n 1 in N && (V.catchLoc = N[1]), 2 in N && (V.finallyLoc = N[2], V.afterLoc = N[3]), this.tryEntries.push(V);\n }\n function q(N) {\n var V = N.completion || {};\n V.type = "normal", delete V.arg, N.completion = V;\n }\n function m(N) {\n this.tryEntries = [{ tryLoc: "root" }], N.forEach(C, this), this.reset(!0);\n }\n function k(N) {\n if (N) {\n var V = N[p];\n if (V)\n return V.call(N);\n if (typeof N.next == "function")\n return N;\n if (!isNaN(N.length)) {\n var R = -1, I = function j() {\n for (; ++R < N.length; )\n if (s.call(N, R))\n return j.value = N[R], j.done = !1, j;\n return j.value = i, j.done = !0, j;\n };\n return I.next = I;\n }\n }\n return { next: x };\n }\n function x() {\n return { value: i, done: !0 };\n }\n return v.prototype = F.constructor = L, L.constructor = v, L[b] = v.displayName = "GeneratorFunction", r.isGeneratorFunction = function(N) {\n var V = typeof N == "function" && N.constructor;\n return !!V && (V === v || (V.displayName || V.name) === "GeneratorFunction");\n }, r.mark = function(N) {\n return Object.setPrototypeOf ? Object.setPrototypeOf(N, L) : (N.__proto__ = L, b in N || (N[b] = "GeneratorFunction")), N.prototype = Object.create(F), N;\n }, r.awrap = function(N) {\n return { __await: N };\n }, T(w.prototype), w.prototype[d] = function() {\n return this;\n }, r.AsyncIterator = w, r.async = function(N, V, R, I) {\n var j = new w(M(N, V, R, I));\n return r.isGeneratorFunction(V) ? j : j.next().then(function(U) {\n return U.done ? U.value : j.next();\n });\n }, T(F), F[b] = "Generator", F[p] = function() {\n return this;\n }, F.toString = function() {\n return "[object Generator]";\n }, r.keys = function(N) {\n var V = [];\n for (var R in N)\n V.push(R);\n return V.reverse(), function I() {\n for (; V.length; ) {\n var j = V.pop();\n if (j in N)\n return I.value = j, I.done = !1, I;\n }\n return I.done = !0, I;\n };\n }, r.values = k, m.prototype = { constructor: m, reset: function(N) {\n if (this.prev = 0, this.next = 0, this.sent = this._sent = i, this.done = !1, this.delegate = null, this.method = "next", this.arg = i, this.tryEntries.forEach(q), !N)\n for (var V in this)\n V.charAt(0) === "t" && s.call(this, V) && !isNaN(+V.slice(1)) && (this[V] = i);\n }, stop: function() {\n this.done = !0;\n var N = this.tryEntries[0].completion;\n if (N.type === "throw")\n throw N.arg;\n return this.rval;\n }, dispatchException: function(N) {\n if (this.done)\n throw N;\n var V = this;\n function R(K, Q) {\n return U.type = "throw", U.arg = N, V.next = K, Q && (V.method = "next", V.arg = i), !!Q;\n }\n for (var I = this.tryEntries.length - 1; 0 <= I; --I) {\n var j = this.tryEntries[I], U = j.completion;\n if (j.tryLoc === "root")\n return R("end");\n if (j.tryLoc <= this.prev) {\n var _ = s.call(j, "catchLoc"), r1 = s.call(j, "finallyLoc");\n if (_ && r1) {\n if (this.prev < j.catchLoc)\n return R(j.catchLoc, !0);\n if (this.prev < j.finallyLoc)\n return R(j.finallyLoc);\n } else if (_) {\n if (this.prev < j.catchLoc)\n return R(j.catchLoc, !0);\n } else {\n if (!r1)\n throw new Error("try statement without catch or finally");\n if (this.prev < j.finallyLoc)\n return R(j.finallyLoc);\n }\n }\n }\n }, abrupt: function(N, V) {\n for (var R = this.tryEntries.length - 1; 0 <= R; --R) {\n var I = this.tryEntries[R];\n if (I.tryLoc <= this.prev && s.call(I, "finallyLoc") && this.prev < I.finallyLoc) {\n var j = I;\n break;\n }\n }\n j && (N === "break" || N === "continue") && j.tryLoc <= V && V <= j.finallyLoc && (j = null);\n var U = j ? j.completion : {};\n return U.type = N, U.arg = V, j ? (this.method = "next", this.next = j.finallyLoc, h) : this.complete(U);\n }, complete: function(N, V) {\n if (N.type === "throw")\n throw N.arg;\n return N.type === "break" || N.type === "continue" ? this.next = N.arg : N.type === "return" ? (this.rval = this.arg = N.arg, this.method = "return", this.next = "end") : N.type === "normal" && V && (this.next = V), h;\n }, finish: function(N) {\n for (var V = this.tryEntries.length - 1; 0 <= V; --V) {\n var R = this.tryEntries[V];\n if (R.finallyLoc === N)\n return this.complete(R.completion, R.afterLoc), q(R), h;\n }\n }, catch: function(N) {\n for (var V = this.tryEntries.length - 1; 0 <= V; --V) {\n var R = this.tryEntries[V];\n if (R.tryLoc === N) {\n var I = R.completion;\n if (I.type === "throw") {\n var j = I.arg;\n q(R);\n }\n return j;\n }\n }\n throw new Error("illegal catch attempt");\n }, delegateYield: function(N, V, R) {\n return this.delegate = { iterator: k(N), resultName: V, nextLoc: R }, this.method === "next" && (this.arg = i), h;\n } }, r;\n }(e.exports);\n try {\n regeneratorRuntime = n;\n } catch {\n Function("r", "regeneratorRuntime = r")(n);\n }\n}, function(e, t) {\n function o(r) {\n return (o = typeof Symbol == "function" && typeof Symbol.iterator == "symbol" ? function(i) {\n return typeof i;\n } : function(i) {\n return i && typeof Symbol == "function" && i.constructor === Symbol && i !== Symbol.prototype ? "symbol" : typeof i;\n })(r);\n }\n function n(r) {\n return typeof Symbol == "function" && o(Symbol.iterator) === "symbol" ? e.exports = n = function(i) {\n return o(i);\n } : e.exports = n = function(i) {\n return i && typeof Symbol == "function" && i.constructor === Symbol && i !== Symbol.prototype ? "symbol" : o(i);\n }, n(r);\n }\n e.exports = n;\n}, function(e, t) {\n function o(n, r) {\n return e.exports = o = Object.setPrototypeOf || function(i, a) {\n return i.__proto__ = a, i;\n }, o(n, r);\n }\n e.exports = o;\n}, function(e, t, o) {\n var n = o(5);\n e.exports = function(r, i) {\n for (; !Object.prototype.hasOwnProperty.call(r, i) && (r = n(r)) !== null; )\n ;\n return r;\n };\n}, function(e, t, o) {\n /** @license React v16.8.6\n * react.production.min.js\n *\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n var n = o(26), r = typeof Symbol == "function" && Symbol.for, i = r ? Symbol.for("react.element") : 60103, a = r ? Symbol.for("react.portal") : 60106, s = r ? Symbol.for("react.fragment") : 60107, l = r ? Symbol.for("react.strict_mode") : 60108, p = r ? Symbol.for("react.profiler") : 60114, d = r ? Symbol.for("react.provider") : 60109, b = r ? Symbol.for("react.context") : 60110, M = r ? Symbol.for("react.concurrent_mode") : 60111, u = r ? Symbol.for("react.forward_ref") : 60112, A = r ? Symbol.for("react.suspense") : 60113, z = r ? Symbol.for("react.memo") : 60115, f = r ? Symbol.for("react.lazy") : 60116, O = typeof Symbol == "function" && Symbol.iterator;\n function h(Q) {\n for (var E = arguments.length - 1, D = "https://reactjs.org/docs/error-decoder.html?invariant=" + Q, G = 0; G < E; G++)\n D += "&args[]=" + encodeURIComponent(arguments[G + 1]);\n (function(J, S, W, P, Y, Z, t1, i1) {\n if (!J) {\n if ((J = void 0) === S)\n J = Error("Minified exception occurred; use the non-minified dev environment for the full error message and additional helpful warnings.");\n else {\n var n1 = [W, P, Y, Z, t1, i1], s1 = 0;\n (J = Error(S.replace(/%s/g, function() {\n return n1[s1++];\n }))).name = "Invariant Violation";\n }\n throw J.framesToPop = 1, J;\n }\n })(!1, "Minified React error #" + Q + "; visit %s for the full message or use the non-minified dev environment for full errors and additional helpful warnings. ", D);\n }\n var g = { isMounted: function() {\n return !1;\n }, enqueueForceUpdate: function() {\n }, enqueueReplaceState: function() {\n }, enqueueSetState: function() {\n } }, v = {};\n function L(Q, E, D) {\n this.props = Q, this.context = E, this.refs = v, this.updater = D || g;\n }\n function y() {\n }\n function B(Q, E, D) {\n this.props = Q, this.context = E, this.refs = v, this.updater = D || g;\n }\n L.prototype.isReactComponent = {}, L.prototype.setState = function(Q, E) {\n typeof Q != "object" && typeof Q != "function" && Q != null && h("85"), this.updater.enqueueSetState(this, Q, E, "setState");\n }, L.prototype.forceUpdate = function(Q) {\n this.updater.enqueueForceUpdate(this, Q, "forceUpdate");\n }, y.prototype = L.prototype;\n var X = B.prototype = new y();\n X.constructor = B, n(X, L.prototype), X.isPureReactComponent = !0;\n var F = { current: null }, T = { current: null }, w = Object.prototype.hasOwnProperty, H = { key: !0, ref: !0, __self: !0, __source: !0 };\n function C(Q, E, D) {\n var G = void 0, J = {}, S = null, W = null;\n if (E != null)\n for (G in E.ref !== void 0 && (W = E.ref), E.key !== void 0 && (S = "" + E.key), E)\n w.call(E, G) && !H.hasOwnProperty(G) && (J[G] = E[G]);\n var P = arguments.length - 2;\n if (P === 1)\n J.children = D;\n else if (1 < P) {\n for (var Y = Array(P), Z = 0; Z < P; Z++)\n Y[Z] = arguments[Z + 2];\n J.children = Y;\n }\n if (Q && Q.defaultProps)\n for (G in P = Q.defaultProps)\n J[G] === void 0 && (J[G] = P[G]);\n return { $$typeof: i, type: Q, key: S, ref: W, props: J, _owner: T.current };\n }\n function q(Q) {\n return typeof Q == "object" && Q !== null && Q.$$typeof === i;\n }\n var m = /\\/+/g, k = [];\n function x(Q, E, D, G) {\n if (k.length) {\n var J = k.pop();\n return J.result = Q, J.keyPrefix = E, J.func = D, J.context = G, J.count = 0, J;\n }\n return { result: Q, keyPrefix: E, func: D, context: G, count: 0 };\n }\n function N(Q) {\n Q.result = null, Q.keyPrefix = null, Q.func = null, Q.context = null, Q.count = 0, k.length < 10 && k.push(Q);\n }\n function V(Q, E, D) {\n return Q == null ? 0 : function G(J, S, W, P) {\n var Y = typeof J;\n Y !== "undefined" && Y !== "boolean" || (J = null);\n var Z = !1;\n if (J === null)\n Z = !0;\n else\n switch (Y) {\n case "string":\n case "number":\n Z = !0;\n break;\n case "object":\n switch (J.$$typeof) {\n case i:\n case a:\n Z = !0;\n }\n }\n if (Z)\n return W(P, J, S === "" ? "." + R(J, 0) : S), 1;\n if (Z = 0, S = S === "" ? "." : S + ":", Array.isArray(J))\n for (var t1 = 0; t1 < J.length; t1++) {\n var i1 = S + R(Y = J[t1], t1);\n Z += G(Y, i1, W, P);\n }\n else if (typeof (i1 = J === null || typeof J != "object" ? null : typeof (i1 = O && J[O] || J["@@iterator"]) == "function" ? i1 : null) == "function")\n for (J = i1.call(J), t1 = 0; !(Y = J.next()).done; )\n Z += G(Y = Y.value, i1 = S + R(Y, t1++), W, P);\n else\n Y === "object" && h("31", (W = "" + J) == "[object Object]" ? "object with keys {" + Object.keys(J).join(", ") + "}" : W, "");\n return Z;\n }(Q, "", E, D);\n }\n function R(Q, E) {\n return typeof Q == "object" && Q !== null && Q.key != null ? function(D) {\n var G = { "=": "=0", ":": "=2" };\n return "$" + ("" + D).replace(/[=:]/g, function(J) {\n return G[J];\n });\n }(Q.key) : E.toString(36);\n }\n function I(Q, E) {\n Q.func.call(Q.context, E, Q.count++);\n }\n function j(Q, E, D) {\n var G = Q.result, J = Q.keyPrefix;\n Q = Q.func.call(Q.context, E, Q.count++), Array.isArray(Q) ? U(Q, G, D, function(S) {\n return S;\n }) : Q != null && (q(Q) && (Q = function(S, W) {\n return { $$typeof: i, type: S.type, key: W, ref: S.ref, props: S.props, _owner: S._owner };\n }(Q, J + (!Q.key || E && E.key === Q.key ? "" : ("" + Q.key).replace(m, "$&/") + "/") + D)), G.push(Q));\n }\n function U(Q, E, D, G, J) {\n var S = "";\n D != null && (S = ("" + D).replace(m, "$&/") + "/"), V(Q, j, E = x(E, S, G, J)), N(E);\n }\n function _() {\n var Q = F.current;\n return Q === null && h("321"), Q;\n }\n var r1 = { Children: { map: function(Q, E, D) {\n if (Q == null)\n return Q;\n var G = [];\n return U(Q, G, null, E, D), G;\n }, forEach: function(Q, E, D) {\n if (Q == null)\n return Q;\n V(Q, I, E = x(null, null, E, D)), N(E);\n }, count: function(Q) {\n return V(Q, function() {\n return null;\n }, null);\n }, toArray: function(Q) {\n var E = [];\n return U(Q, E, null, function(D) {\n return D;\n }), E;\n }, only: function(Q) {\n return q(Q) || h("143"), Q;\n } }, createRef: function() {\n return { current: null };\n }, Component: L, PureComponent: B, createContext: function(Q, E) {\n return E === void 0 && (E = null), (Q = { $$typeof: b, _calculateChangedBits: E, _currentValue: Q, _currentValue2: Q, _threadCount: 0, Provider: null, Consumer: null }).Provider = { $$typeof: d, _context: Q }, Q.Consumer = Q;\n }, forwardRef: function(Q) {\n return { $$typeof: u, render: Q };\n }, lazy: function(Q) {\n return { $$typeof: f, _ctor: Q, _status: -1, _result: null };\n }, memo: function(Q, E) {\n return { $$typeof: z, type: Q, compare: E === void 0 ? null : E };\n }, useCallback: function(Q, E) {\n return _().useCallback(Q, E);\n }, useContext: function(Q, E) {\n return _().useContext(Q, E);\n }, useEffect: function(Q, E) {\n return _().useEffect(Q, E);\n }, useImperativeHandle: function(Q, E, D) {\n return _().useImperativeHandle(Q, E, D);\n }, useDebugValue: function() {\n }, useLayoutEffect: function(Q, E) {\n return _().useLayoutEffect(Q, E);\n }, useMemo: function(Q, E) {\n return _().useMemo(Q, E);\n }, useReducer: function(Q, E, D) {\n return _().useReducer(Q, E, D);\n }, useRef: function(Q) {\n return _().useRef(Q);\n }, useState: function(Q) {\n return _().useState(Q);\n }, Fragment: s, StrictMode: l, Suspense: A, createElement: C, cloneElement: function(Q, E, D) {\n Q == null && h("267", Q);\n var G = void 0, J = n({}, Q.props), S = Q.key, W = Q.ref, P = Q._owner;\n if (E != null) {\n E.ref !== void 0 && (W = E.ref, P = T.current), E.key !== void 0 && (S = "" + E.key);\n var Y = void 0;\n for (G in Q.type && Q.type.defaultProps && (Y = Q.type.defaultProps), E)\n w.call(E, G) && !H.hasOwnProperty(G) && (J[G] = E[G] === void 0 && Y !== void 0 ? Y[G] : E[G]);\n }\n if ((G = arguments.length - 2) === 1)\n J.children = D;\n else if (1 < G) {\n Y = Array(G);\n for (var Z = 0; Z < G; Z++)\n Y[Z] = arguments[Z + 2];\n J.children = Y;\n }\n return { $$typeof: i, type: Q.type, key: S, ref: W, props: J, _owner: P };\n }, createFactory: function(Q) {\n var E = C.bind(null, Q);\n return E.type = Q, E;\n }, isValidElement: q, version: "16.8.6", unstable_ConcurrentMode: M, unstable_Profiler: p, __SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED: { ReactCurrentDispatcher: F, ReactCurrentOwner: T, assign: n } }, K = r1;\n e.exports = K.default || K;\n}, function(e, t, o) {\n /*\n object-assign\n (c) Sindre Sorhus\n @license MIT\n */\n var n = Object.getOwnPropertySymbols, r = Object.prototype.hasOwnProperty, i = Object.prototype.propertyIsEnumerable;\n e.exports = function() {\n try {\n if (!Object.assign)\n return !1;\n var a = new String("abc");\n if (a[5] = "de", Object.getOwnPropertyNames(a)[0] === "5")\n return !1;\n for (var s = {}, l = 0; l < 10; l++)\n s["_" + String.fromCharCode(l)] = l;\n if (Object.getOwnPropertyNames(s).map(function(d) {\n return s[d];\n }).join("") !== "0123456789")\n return !1;\n var p = {};\n return "abcdefghijklmnopqrst".split("").forEach(function(d) {\n p[d] = d;\n }), Object.keys(Object.assign({}, p)).join("") === "abcdefghijklmnopqrst";\n } catch {\n return !1;\n }\n }() ? Object.assign : function(a, s) {\n for (var l, p, d = function(A) {\n if (A == null)\n throw new TypeError("Object.assign cannot be called with null or undefined");\n return Object(A);\n }(a), b = 1; b < arguments.length; b++) {\n for (var M in l = Object(arguments[b]))\n r.call(l, M) && (d[M] = l[M]);\n if (n) {\n p = n(l);\n for (var u = 0; u < p.length; u++)\n i.call(l, p[u]) && (d[p[u]] = l[p[u]]);\n }\n }\n return d;\n };\n}, function(e, t, o) {\n var n = o(28);\n function r() {\n }\n function i() {\n }\n i.resetWarningCache = r, e.exports = function() {\n function a(p, d, b, M, u, A) {\n if (A !== n) {\n var z = new Error("Calling PropTypes validators directly is not supported by the `prop-types` package. Use PropTypes.checkPropTypes() to call them. Read more at http://fb.me/use-check-prop-types");\n throw z.name = "Invariant Violation", z;\n }\n }\n function s() {\n return a;\n }\n var l = { array: a.isRequired = a, bool: a, func: a, number: a, object: a, string: a, symbol: a, any: a, arrayOf: s, element: a, elementType: a, instanceOf: s, node: a, objectOf: s, oneOf: s, oneOfType: s, shape: s, exact: s, checkPropTypes: i, resetWarningCache: r };\n return l.PropTypes = l;\n };\n}, function(e, t, o) {\n e.exports = "SECRET_DO_NOT_PASS_THIS_OR_YOU_WILL_BE_FIRED";\n}, function(e, t) {\n e.exports = function(o) {\n if (Array.isArray(o))\n return o;\n };\n}, function(e, t) {\n e.exports = function(o, n) {\n var r = [], i = !0, a = !1, s = void 0;\n try {\n for (var l, p = o[Symbol.iterator](); !(i = (l = p.next()).done) && (r.push(l.value), !n || r.length !== n); i = !0)\n ;\n } catch (d) {\n a = !0, s = d;\n } finally {\n try {\n i || p.return == null || p.return();\n } finally {\n if (a)\n throw s;\n }\n }\n return r;\n };\n}, function(e, t) {\n e.exports = function() {\n throw new TypeError("Invalid attempt to destructure non-iterable instance");\n };\n}, function(e, t, o) {\n o.r(t);\n function n(t1) {\n var i1 = t1.input, n1 = t1.previews, s1 = t1.submitButton, d1 = t1.dropzoneProps, b1 = t1.files, c1 = t1.extra.maxFiles;\n return w.a.createElement("div", Object.assign({}, d1), n1, b1.length < c1 && i1, 0 < b1.length && s1);\n }\n var r = o(12), i = o.n(r), a = o(3), s = o.n(a), l = o(2), p = o.n(l), d = o(4), b = o.n(d), M = o(6), u = o.n(M), A = o(7), z = o.n(A), f = o(8), O = o.n(f), h = o(9), g = o.n(h), v = o(10), L = o.n(v), y = o(5), B = o.n(y), X = o(13), F = o.n(X), T = o(1), w = o.n(T), H = o(0), C = o.n(H);\n n.propTypes = { input: C.a.node, previews: C.a.arrayOf(C.a.node), submitButton: C.a.node, dropzoneProps: C.a.shape({ ref: C.a.any.isRequired, className: C.a.string.isRequired, style: C.a.object, onDragEnter: C.a.func.isRequired, onDragOver: C.a.func.isRequired, onDragLeave: C.a.func.isRequired, onDrop: C.a.func.isRequired }).isRequired, files: C.a.arrayOf(C.a.any).isRequired, extra: C.a.shape({ active: C.a.bool.isRequired, reject: C.a.bool.isRequired, dragged: C.a.arrayOf(C.a.any).isRequired, accept: C.a.string.isRequired, multiple: C.a.bool.isRequired, minSizeBytes: C.a.number.isRequired, maxSizeBytes: C.a.number.isRequired, maxFiles: C.a.number.isRequired, onFiles: C.a.func.isRequired, onCancelFile: C.a.func.isRequired, onRemoveFile: C.a.func.isRequired, onRestartFile: C.a.func.isRequired }).isRequired };\n function q(t1) {\n var i1, n1 = t1.className, s1 = t1.labelClassName, d1 = t1.labelWithFilesClassName, b1 = t1.style, c1 = t1.labelStyle, a1 = t1.labelWithFilesStyle, l1 = t1.getFilesFromEvent, p1 = t1.accept, M1 = t1.multiple, A1 = t1.disabled, u1 = t1.content, h1 = t1.withFilesContent, C1 = t1.onFiles, q1 = t1.files;\n return w.a.createElement("label", { className: 0 < q1.length ? d1 : s1, style: 0 < q1.length ? a1 : c1 }, 0 < q1.length ? h1 : u1, w.a.createElement("input", { className: n1, style: b1, type: "file", accept: p1, multiple: M1, disabled: A1, onChange: (i1 = b()(p.a.mark(function W1(R1) {\n var k1, N1;\n return p.a.wrap(function(v1) {\n for (; ; )\n switch (v1.prev = v1.next) {\n case 0:\n return k1 = R1.target, v1.next = 3, l1(R1);\n case 3:\n N1 = v1.sent, C1(N1), k1.value = null;\n case 6:\n case "end":\n return v1.stop();\n }\n }, W1);\n })), function(W1) {\n return i1.apply(this, arguments);\n }) }));\n }\n var m = n;\n q.propTypes = { className: C.a.string, labelClassName: C.a.string, labelWithFilesClassName: C.a.string, style: C.a.object, labelStyle: C.a.object, labelWithFilesStyle: C.a.object, getFilesFromEvent: C.a.func.isRequired, accept: C.a.string.isRequired, multiple: C.a.bool.isRequired, disabled: C.a.bool.isRequired, content: C.a.node, withFilesContent: C.a.node, onFiles: C.a.func.isRequired, files: C.a.arrayOf(C.a.any).isRequired, extra: C.a.shape({ active: C.a.bool.isRequired, reject: C.a.bool.isRequired, dragged: C.a.arrayOf(C.a.any).isRequired, accept: C.a.string.isRequired, multiple: C.a.bool.isRequired, minSizeBytes: C.a.number.isRequired, maxSizeBytes: C.a.number.isRequired, maxFiles: C.a.number.isRequired }).isRequired };\n function k(t1) {\n for (var i1 = 0, n1 = t1; 1024 <= n1; )\n n1 /= 1024, i1 += 1;\n return "".concat(n1.toFixed(10 <= n1 || i1 < 1 ? 0 : 1)).concat(["bytes", "kB", "MB", "GB", "TB", "PB", "EB", "ZB", "YB"][i1]);\n }\n function x(t1) {\n var i1 = /* @__PURE__ */ new Date(0);\n i1.setSeconds(t1);\n var n1 = i1.toISOString().slice(11, 19);\n return t1 < 3600 ? n1.slice(3) : n1;\n }\n function N(t1, i1) {\n if (!i1 || i1 === "*")\n return !0;\n var n1 = t1.type || "", s1 = n1.replace(/\\/.*$/, "");\n return i1.split(",").map(function(d1) {\n return d1.trim();\n }).some(function(d1) {\n return d1.charAt(0) === "." ? t1.name === void 0 || t1.name.toLowerCase().endsWith(d1.toLowerCase()) : d1.endsWith("/*") ? s1 === d1.replace(/\\/.*$/, "") : n1 === d1;\n });\n }\n function V(t1) {\n for (var i1 = arguments.length, n1 = new Array(1 < i1 ? i1 - 1 : 0), s1 = 1; s1 < i1; s1++)\n n1[s1 - 1] = arguments[s1];\n return typeof t1 == "function" ? t1.apply(void 0, n1) : t1;\n }\n function R(t1) {\n var i1 = null;\n if ("dataTransfer" in t1) {\n var n1 = t1.dataTransfer;\n "files" in n1 && n1.files.length ? i1 = n1.files : n1.items && n1.items.length && (i1 = n1.items);\n } else\n t1.target && t1.target.files && (i1 = t1.target.files);\n return Array.prototype.slice.call(i1);\n }\n var I = q, j = o(11), U = o.n(j), _ = { dropzone: "dzu-dropzone", dropzoneActive: "dzu-dropzoneActive", dropzoneReject: "dzu-dropzoneActive", dropzoneDisabled: "dzu-dropzoneDisabled", input: "dzu-input", inputLabel: "dzu-inputLabel", inputLabelWithFiles: "dzu-inputLabelWithFiles", preview: "dzu-previewContainer", previewImage: "dzu-previewImage", submitButtonContainer: "dzu-submitButtonContainer", submitButton: "dzu-submitButton" }, r1 = o(14), K = o.n(r1), Q = o(15), E = o.n(Q), D = o(16), G = o.n(D), J = { cancel: { backgroundImage: "url(".concat(K.a, ")") }, remove: { backgroundImage: "url(".concat(E.a, ")") }, restart: { backgroundImage: "url(".concat(G.a, ")") } }, S = function(t1) {\n function i1() {\n return u()(this, i1), O()(this, B()(i1).apply(this, arguments));\n }\n return L()(i1, t1), z()(i1, [{ key: "render", value: function() {\n var n1 = this.props, s1 = n1.className, d1 = n1.imageClassName, b1 = n1.style, c1 = n1.imageStyle, a1 = n1.fileWithMeta, l1 = a1.cancel, p1 = a1.remove, M1 = a1.restart, A1 = n1.meta, u1 = A1.name, h1 = u1 === void 0 ? "" : u1, C1 = A1.percent, q1 = C1 === void 0 ? 0 : C1, W1 = A1.size, R1 = W1 === void 0 ? 0 : W1, k1 = A1.previewUrl, N1 = A1.status, v1 = A1.duration, S1 = A1.validationError, D1 = n1.isUpload, F1 = n1.canCancel, U1 = n1.canRemove, h0 = n1.canRestart, O0 = n1.extra.minSizeBytes, w1 = "".concat(h1 || "?", ", ").concat(k(R1));\n return v1 && (w1 = "".concat(w1, ", ").concat(x(v1))), N1 === "error_file_size" || N1 === "error_validation" ? w.a.createElement("div", { className: s1, style: b1 }, w.a.createElement("span", { className: "dzu-previewFileNameError" }, w1), N1 === "error_file_size" && w.a.createElement("span", null, R1 < O0 ? "File too small" : "File too big"), N1 === "error_validation" && w.a.createElement("span", null, String(S1)), U1 && w.a.createElement("span", { className: "dzu-previewButton", style: J.remove, onClick: p1 })) : (N1 !== "error_upload_params" && N1 !== "exception_upload" && N1 !== "error_upload" || (w1 = "".concat(w1, " (upload failed)")), N1 === "aborted" && (w1 = "".concat(w1, " (cancelled)")), w.a.createElement("div", { className: s1, style: b1 }, k1 && w.a.createElement("img", { className: d1, style: c1, src: k1, alt: w1, title: w1 }), !k1 && w.a.createElement("span", { className: "dzu-previewFileName" }, w1), w.a.createElement("div", { className: "dzu-previewStatusContainer" }, D1 && w.a.createElement("progress", { max: 100, value: N1 === "done" || N1 === "headers_received" ? 100 : q1 }), N1 === "uploading" && F1 && w.a.createElement("span", { className: "dzu-previewButton", style: J.cancel, onClick: l1 }), N1 !== "preparing" && N1 !== "getting_upload_params" && N1 !== "uploading" && U1 && w.a.createElement("span", { className: "dzu-previewButton", style: J.remove, onClick: p1 }), ["error_upload_params", "exception_upload", "error_upload", "aborted", "ready"].includes(N1) && h0 && w.a.createElement("span", { className: "dzu-previewButton", style: J.restart, onClick: M1 }))));\n } }]), i1;\n }(w.a.PureComponent);\n S.propTypes = { className: C.a.string, imageClassName: C.a.string, style: C.a.object, imageStyle: C.a.object, fileWithMeta: C.a.shape({ file: C.a.any.isRequired, meta: C.a.object.isRequired, cancel: C.a.func.isRequired, restart: C.a.func.isRequired, remove: C.a.func.isRequired, xhr: C.a.any }).isRequired, meta: C.a.shape({ status: C.a.oneOf(["preparing", "error_file_size", "error_validation", "ready", "getting_upload_params", "error_upload_params", "uploading", "exception_upload", "aborted", "error_upload", "headers_received", "done"]).isRequired, type: C.a.string.isRequired, name: C.a.string, uploadedDate: C.a.string.isRequired, percent: C.a.number, size: C.a.number, lastModifiedDate: C.a.string, previewUrl: C.a.string, duration: C.a.number, width: C.a.number, height: C.a.number, videoWidth: C.a.number, videoHeight: C.a.number, validationError: C.a.any }).isRequired, isUpload: C.a.bool.isRequired, canCancel: C.a.bool.isRequired, canRemove: C.a.bool.isRequired, canRestart: C.a.bool.isRequired, files: C.a.arrayOf(C.a.any).isRequired, extra: C.a.shape({ active: C.a.bool.isRequired, reject: C.a.bool.isRequired, dragged: C.a.arrayOf(C.a.any).isRequired, accept: C.a.string.isRequired, multiple: C.a.bool.isRequired, minSizeBytes: C.a.number.isRequired, maxSizeBytes: C.a.number.isRequired, maxFiles: C.a.number.isRequired }).isRequired };\n function W(t1) {\n var i1 = t1.className, n1 = t1.buttonClassName, s1 = t1.style, d1 = t1.buttonStyle, b1 = t1.disabled, c1 = t1.content, a1 = t1.onSubmit, l1 = t1.files, p1 = l1.some(function(M1) {\n return ["preparing", "getting_upload_params", "uploading"].includes(M1.meta.status);\n }) || !l1.some(function(M1) {\n return ["headers_received", "done"].includes(M1.meta.status);\n });\n return w.a.createElement("div", { className: i1, style: s1 }, w.a.createElement("button", { className: n1, style: d1, onClick: function() {\n a1(l1.filter(function(M1) {\n return ["headers_received", "done"].includes(M1.meta.status);\n }));\n }, disabled: b1 || p1 }, c1));\n }\n var P = S;\n W.propTypes = { className: C.a.string, buttonClassName: C.a.string, style: C.a.object, buttonStyle: C.a.object, disabled: C.a.bool.isRequired, content: C.a.node, onSubmit: C.a.func.isRequired, files: C.a.arrayOf(C.a.object).isRequired, extra: C.a.shape({ active: C.a.bool.isRequired, reject: C.a.bool.isRequired, dragged: C.a.arrayOf(C.a.any).isRequired, accept: C.a.string.isRequired, multiple: C.a.bool.isRequired, minSizeBytes: C.a.number.isRequired, maxSizeBytes: C.a.number.isRequired, maxFiles: C.a.number.isRequired }).isRequired };\n var Y = W;\n o.d(t, "Layout", function() {\n return m;\n }), o.d(t, "Input", function() {\n return I;\n }), o.d(t, "Preview", function() {\n return P;\n }), o.d(t, "SubmitButton", function() {\n return Y;\n }), o.d(t, "formatBytes", function() {\n return k;\n }), o.d(t, "formatDuration", function() {\n return x;\n }), o.d(t, "accepts", function() {\n return N;\n }), o.d(t, "defaultClassNames", function() {\n return _;\n }), o.d(t, "getFilesFromEvent", function() {\n return R;\n });\n var Z = function(t1) {\n function i1(n1) {\n var s1;\n return u()(this, i1), (s1 = O()(this, B()(i1).call(this, n1))).forceUpdate = function() {\n s1.mounted && F()(B()(i1.prototype), "forceUpdate", g()(s1)).call(g()(s1));\n }, s1.getFilesFromEvent = function() {\n return s1.props.getFilesFromEvent || R;\n }, s1.getDataTransferItemsFromEvent = function() {\n return s1.props.getDataTransferItemsFromEvent || R;\n }, s1.handleDragEnter = function() {\n var d1 = b()(p.a.mark(function b1(c1) {\n var a1;\n return p.a.wrap(function(l1) {\n for (; ; )\n switch (l1.prev = l1.next) {\n case 0:\n return c1.preventDefault(), c1.stopPropagation(), l1.next = 4, s1.getDataTransferItemsFromEvent()(c1);\n case 4:\n a1 = l1.sent, s1.setState({ active: !0, dragged: a1 });\n case 6:\n case "end":\n return l1.stop();\n }\n }, b1);\n }));\n return function(b1) {\n return d1.apply(this, arguments);\n };\n }(), s1.handleDragOver = function() {\n var d1 = b()(p.a.mark(function b1(c1) {\n var a1;\n return p.a.wrap(function(l1) {\n for (; ; )\n switch (l1.prev = l1.next) {\n case 0:\n return c1.preventDefault(), c1.stopPropagation(), clearTimeout(s1.dragTimeoutId), l1.next = 5, s1.getDataTransferItemsFromEvent()(c1);\n case 5:\n a1 = l1.sent, s1.setState({ active: !0, dragged: a1 });\n case 7:\n case "end":\n return l1.stop();\n }\n }, b1);\n }));\n return function(b1) {\n return d1.apply(this, arguments);\n };\n }(), s1.handleDragLeave = function(d1) {\n d1.preventDefault(), d1.stopPropagation(), s1.dragTimeoutId = window.setTimeout(function() {\n return s1.setState({ active: !1, dragged: [] });\n }, 150);\n }, s1.handleDrop = function() {\n var d1 = b()(p.a.mark(function b1(c1) {\n var a1;\n return p.a.wrap(function(l1) {\n for (; ; )\n switch (l1.prev = l1.next) {\n case 0:\n return c1.preventDefault(), c1.stopPropagation(), s1.setState({ active: !1, dragged: [] }), l1.next = 5, s1.getFilesFromEvent()(c1);\n case 5:\n a1 = l1.sent, s1.handleFiles(a1);\n case 7:\n case "end":\n return l1.stop();\n }\n }, b1);\n }));\n return function(b1) {\n return d1.apply(this, arguments);\n };\n }(), s1.handleDropDisabled = function(d1) {\n d1.preventDefault(), d1.stopPropagation(), s1.setState({ active: !1, dragged: [] });\n }, s1.handleChangeStatus = function(d1) {\n if (s1.props.onChangeStatus) {\n var b1 = (s1.props.onChangeStatus(d1, d1.meta.status, s1.files) || {}).meta, c1 = b1 === void 0 ? {} : b1;\n c1 && (delete c1.status, d1.meta = s()({}, d1.meta, {}, c1), s1.forceUpdate());\n }\n }, s1.handleSubmit = function(d1) {\n s1.props.onSubmit && s1.props.onSubmit(d1, i()(s1.files));\n }, s1.handleCancel = function(d1) {\n d1.meta.status === "uploading" && (d1.meta.status = "aborted", d1.xhr && d1.xhr.abort(), s1.handleChangeStatus(d1), s1.forceUpdate());\n }, s1.handleRemove = function(d1) {\n var b1 = s1.files.findIndex(function(c1) {\n return c1 === d1;\n });\n b1 !== -1 && (URL.revokeObjectURL(d1.meta.previewUrl || ""), d1.meta.status = "removed", s1.handleChangeStatus(d1), s1.files.splice(b1, 1), s1.forceUpdate());\n }, s1.handleRestart = function(d1) {\n s1.props.getUploadParams && (d1.meta.status === "ready" ? d1.meta.status = "started" : d1.meta.status = "restarted", s1.handleChangeStatus(d1), d1.meta.status = "getting_upload_params", d1.meta.percent = 0, s1.handleChangeStatus(d1), s1.forceUpdate(), s1.uploadFile(d1));\n }, s1.handleFiles = function(d1) {\n d1.forEach(function(c1, a1) {\n return s1.handleFile(c1, "".concat((/* @__PURE__ */ new Date()).getTime(), "-").concat(a1));\n });\n var b1 = s1.dropzone.current;\n b1 && setTimeout(function() {\n return b1.scroll({ top: b1.scrollHeight, behavior: "smooth" });\n }, 150);\n }, s1.handleFile = function() {\n var d1 = b()(p.a.mark(function b1(c1, a1) {\n var l1, p1, M1, A1, u1, h1, C1, q1, W1, R1, k1, N1, v1, S1, D1, F1;\n return p.a.wrap(function(U1) {\n for (; ; )\n switch (U1.prev = U1.next) {\n case 0:\n if (l1 = c1.name, p1 = c1.size, M1 = c1.type, A1 = c1.lastModified, u1 = s1.props, h1 = u1.minSizeBytes, C1 = u1.maxSizeBytes, q1 = u1.maxFiles, W1 = u1.accept, R1 = u1.getUploadParams, k1 = u1.autoUpload, N1 = u1.validate, v1 = (/* @__PURE__ */ new Date()).toISOString(), S1 = A1 && new Date(A1).toISOString(), D1 = { file: c1, meta: { name: l1, size: p1, type: M1, lastModifiedDate: S1, uploadedDate: v1, percent: 0, id: a1 } }, c1.type === "application/x-moz-file" || N(c1, W1)) {\n U1.next = 9;\n break;\n }\n return D1.meta.status = "rejected_file_type", s1.handleChangeStatus(D1), U1.abrupt("return");\n case 9:\n if (s1.files.length >= q1)\n return D1.meta.status = "rejected_max_files", s1.handleChangeStatus(D1), U1.abrupt("return");\n U1.next = 13;\n break;\n case 13:\n if (D1.cancel = function() {\n return s1.handleCancel(D1);\n }, D1.remove = function() {\n return s1.handleRemove(D1);\n }, D1.restart = function() {\n return s1.handleRestart(D1);\n }, D1.meta.status = "preparing", s1.files.push(D1), s1.handleChangeStatus(D1), s1.forceUpdate(), p1 < h1 || C1 < p1)\n return D1.meta.status = "error_file_size", s1.handleChangeStatus(D1), s1.forceUpdate(), U1.abrupt("return");\n U1.next = 25;\n break;\n case 25:\n return U1.next = 27, s1.generatePreview(D1);\n case 27:\n if (!N1) {\n U1.next = 35;\n break;\n }\n if (F1 = N1(D1))\n return D1.meta.status = "error_validation", D1.meta.validationError = F1, s1.handleChangeStatus(D1), s1.forceUpdate(), U1.abrupt("return");\n U1.next = 35;\n break;\n case 35:\n R1 ? k1 ? (s1.uploadFile(D1), D1.meta.status = "getting_upload_params") : D1.meta.status = "ready" : D1.meta.status = "done", s1.handleChangeStatus(D1), s1.forceUpdate();\n case 38:\n case "end":\n return U1.stop();\n }\n }, b1);\n }));\n return function(b1, c1) {\n return d1.apply(this, arguments);\n };\n }(), s1.generatePreview = function() {\n var d1 = b()(p.a.mark(function b1(c1) {\n var a1, l1, p1, M1, A1, u1, h1, C1, q1, W1;\n return p.a.wrap(function(R1) {\n for (; ; )\n switch (R1.prev = R1.next) {\n case 0:\n if (a1 = c1.meta.type, l1 = c1.file, p1 = a1.startsWith("image/"), M1 = a1.startsWith("audio/"), A1 = a1.startsWith("video/"), p1 || M1 || A1) {\n R1.next = 6;\n break;\n }\n return R1.abrupt("return");\n case 6:\n if (u1 = URL.createObjectURL(l1), h1 = function(k1) {\n return Promise.race([new Promise(function(N1) {\n k1 instanceof HTMLImageElement ? k1.onload = N1 : k1.onloadedmetadata = N1;\n }), new Promise(function(N1, v1) {\n setTimeout(v1, 1e3);\n })]);\n }, R1.prev = 8, p1)\n return (C1 = new Image()).src = u1, c1.meta.previewUrl = u1, R1.next = 15, h1(C1);\n R1.next = 17;\n break;\n case 15:\n c1.meta.width = C1.width, c1.meta.height = C1.height;\n case 17:\n if (M1)\n return (q1 = new Audio()).src = u1, R1.next = 22, h1(q1);\n R1.next = 23;\n break;\n case 22:\n c1.meta.duration = q1.duration;\n case 23:\n if (A1)\n return (W1 = document.createElement("video")).src = u1, R1.next = 28, h1(W1);\n R1.next = 31;\n break;\n case 28:\n c1.meta.duration = W1.duration, c1.meta.videoWidth = W1.videoWidth, c1.meta.videoHeight = W1.videoHeight;\n case 31:\n p1 || URL.revokeObjectURL(u1), R1.next = 37;\n break;\n case 34:\n R1.prev = 34, R1.t0 = R1.catch(8), URL.revokeObjectURL(u1);\n case 37:\n s1.forceUpdate();\n case 38:\n case "end":\n return R1.stop();\n }\n }, b1, null, [[8, 34]]);\n }));\n return function(b1) {\n return d1.apply(this, arguments);\n };\n }(), s1.uploadFile = function() {\n var d1 = b()(p.a.mark(function b1(c1) {\n var a1, l1, p1, M1, A1, u1, h1, C1, q1, W1, R1, k1, N1, v1, S1, D1, F1, U1, h0, O0, w1;\n return p.a.wrap(function(g1) {\n for (; ; )\n switch (g1.prev = g1.next) {\n case 0:\n if (a1 = s1.props.getUploadParams) {\n g1.next = 3;\n break;\n }\n return g1.abrupt("return");\n case 3:\n return l1 = null, g1.prev = 4, g1.next = 7, a1(c1);\n case 7:\n l1 = g1.sent, g1.next = 13;\n break;\n case 10:\n g1.prev = 10, g1.t0 = g1.catch(4), console.error("Error Upload Params", g1.t0.stack);\n case 13:\n if (l1 === null)\n return g1.abrupt("return");\n g1.next = 15;\n break;\n case 15:\n if (M1 = (p1 = l1).url, A1 = p1.method, u1 = A1 === void 0 ? "POST" : A1, h1 = p1.body, C1 = p1.fields, q1 = C1 === void 0 ? {} : C1, W1 = p1.headers, R1 = W1 === void 0 ? {} : W1, k1 = p1.meta, delete (N1 = k1 === void 0 ? {} : k1).status, M1) {\n g1.next = 22;\n break;\n }\n return c1.meta.status = "error_upload_params", s1.handleChangeStatus(c1), s1.forceUpdate(), g1.abrupt("return");\n case 22:\n for (v1 = new XMLHttpRequest(), S1 = new FormData(), v1.open(u1, M1, !0), D1 = 0, F1 = Object.keys(q1); D1 < F1.length; D1++)\n U1 = F1[D1], S1.append(U1, q1[U1]);\n for (v1.setRequestHeader("X-Requested-With", "XMLHttpRequest"), h0 = 0, O0 = Object.keys(R1); h0 < O0.length; h0++)\n w1 = O0[h0], v1.setRequestHeader(w1, R1[w1]);\n c1.meta = s()({}, c1.meta, {}, N1), v1.upload.addEventListener("progress", function(E1) {\n c1.meta.percent = 100 * E1.loaded / E1.total || 100, s1.forceUpdate();\n }), v1.addEventListener("readystatechange", function() {\n v1.readyState !== 2 && v1.readyState !== 4 || (v1.status === 0 && c1.meta.status !== "aborted" && (c1.meta.status = "exception_upload", s1.handleChangeStatus(c1), s1.forceUpdate()), 0 < v1.status && v1.status < 400 && (c1.meta.percent = 100, v1.readyState === 2 && (c1.meta.status = "headers_received"), v1.readyState === 4 && (c1.meta.status = "done"), s1.handleChangeStatus(c1), s1.forceUpdate()), 400 <= v1.status && c1.meta.status !== "error_upload" && (c1.meta.status = "error_upload", s1.handleChangeStatus(c1), s1.forceUpdate()));\n }), S1.append("file", c1.file), s1.props.timeout && (v1.timeout = s1.props.timeout), v1.send(h1 || S1), c1.xhr = v1, c1.meta.status = "uploading", s1.handleChangeStatus(c1), s1.forceUpdate();\n case 38:\n case "end":\n return g1.stop();\n }\n }, b1, null, [[4, 10]]);\n }));\n return function(b1) {\n return d1.apply(this, arguments);\n };\n }(), s1.state = { active: !1, dragged: [] }, s1.files = [], s1.mounted = !0, s1.dropzone = w.a.createRef(), s1;\n }\n return L()(i1, t1), z()(i1, [{ key: "componentDidMount", value: function() {\n this.props.initialFiles && this.handleFiles(this.props.initialFiles);\n } }, { key: "componentDidUpdate", value: function(n1) {\n var s1 = this.props.initialFiles;\n n1.initialFiles !== s1 && s1 && this.handleFiles(s1);\n } }, { key: "componentWillUnmount", value: function() {\n var n1 = !(this.mounted = !1), s1 = !1, d1 = void 0;\n try {\n for (var b1, c1 = this.files[Symbol.iterator](); !(n1 = (b1 = c1.next()).done); n1 = !0) {\n var a1 = b1.value;\n this.handleCancel(a1);\n }\n } catch (l1) {\n s1 = !0, d1 = l1;\n } finally {\n try {\n n1 || c1.return == null || c1.return();\n } finally {\n if (s1)\n throw d1;\n }\n }\n } }, { key: "render", value: function() {\n var n1 = this.props, s1 = n1.accept, d1 = n1.multiple, b1 = n1.maxFiles, c1 = n1.minSizeBytes, a1 = n1.maxSizeBytes, l1 = n1.onSubmit, p1 = n1.getUploadParams, M1 = n1.disabled, A1 = n1.canCancel, u1 = n1.canRemove, h1 = n1.canRestart, C1 = n1.inputContent, q1 = n1.inputWithFilesContent, W1 = n1.submitButtonDisabled, R1 = n1.submitButtonContent, k1 = n1.classNames, N1 = n1.styles, v1 = n1.addClassNames, S1 = n1.InputComponent, D1 = n1.PreviewComponent, F1 = n1.SubmitButtonComponent, U1 = n1.LayoutComponent, h0 = this.state, O0 = h0.active, w1 = h0.dragged, g1 = w1.some(function(he) {\n return he.type !== "application/x-moz-file" && !N(he, s1);\n }), E1 = { active: O0, reject: g1, dragged: w1, accept: s1, multiple: d1, minSizeBytes: c1, maxSizeBytes: a1, maxFiles: b1 }, B1 = i()(this.files), K1 = V(M1, B1, E1), p0 = function(he, Oo, $r) {\n for (var Yt = s()({}, _), fo = s()({}, Oo), f3 = arguments.length, Gt = new Array(3 < f3 ? f3 - 3 : 0), Qt = 3; Qt < f3; Qt++)\n Gt[Qt - 3] = arguments[Qt];\n for (var g3 = 0, go = Object.entries(he); g3 < go.length; g3++) {\n var Co = U()(go[g3], 2), je = Co[0], gt = Co[1];\n Yt[je] = V.apply(void 0, [gt].concat(Gt));\n }\n for (var C3 = 0, mo = Object.entries($r); C3 < mo.length; C3++) {\n var Lo = U()(mo[C3], 2);\n je = Lo[0], gt = Lo[1], Yt[je] = "".concat(Yt[je], " ").concat(V.apply(void 0, [gt].concat(Gt)));\n }\n for (var m3 = 0, vo = Object.entries(Oo); m3 < vo.length; m3++) {\n var qo = U()(vo[m3], 2);\n je = qo[0], gt = qo[1], fo[je] = V.apply(void 0, [gt].concat(Gt));\n }\n return { classNames: Yt, styles: fo };\n }(k1, N1, v1, B1, E1), e0 = p0.classNames, H1 = e0.dropzone, x1 = e0.dropzoneActive, I1 = e0.dropzoneReject, X1 = e0.dropzoneDisabled, J1 = e0.input, f0 = e0.inputLabel, I0 = e0.inputLabelWithFiles, O1 = e0.preview, V1 = e0.previewImage, G1 = e0.submitButtonContainer, i0 = e0.submitButton, b0 = p0.styles, g0 = b0.dropzone, u0 = b0.dropzoneActive, z0 = b0.dropzoneReject, V0 = b0.dropzoneDisabled, W0 = b0.input, F0 = b0.inputLabel, b2 = b0.inputLabelWithFiles, Z2 = b0.preview, j0 = b0.previewImage, a2 = b0.submitButtonContainer, A2 = b0.submitButton, Ot = S1 || I, ft = D1 || P, jr = F1 || Y, Kr = U1 || m, ho = null;\n D1 !== null && (ho = B1.map(function(he) {\n return w.a.createElement(ft, { className: O1, imageClassName: V1, style: Z2, imageStyle: j0, key: he.meta.id, fileWithMeta: he, meta: s()({}, he.meta), isUpload: !!p1, canCancel: V(A1, B1, E1), canRemove: V(u1, B1, E1), canRestart: V(h1, B1, E1), files: B1, extra: E1 });\n }));\n var Jr = S1 !== null ? w.a.createElement(Ot, { className: J1, labelClassName: f0, labelWithFilesClassName: I0, style: W0, labelStyle: F0, labelWithFilesStyle: b2, getFilesFromEvent: this.getFilesFromEvent(), accept: s1, multiple: d1, disabled: K1, content: V(C1, B1, E1), withFilesContent: V(q1, B1, E1), onFiles: this.handleFiles, files: B1, extra: E1 }) : null, _r = l1 && F1 !== null ? w.a.createElement(jr, { className: G1, buttonClassName: i0, style: a2, buttonStyle: A2, disabled: V(W1, B1, E1), content: V(R1, B1, E1), onSubmit: this.handleSubmit, files: B1, extra: E1 }) : null, xe = H1, We = g0;\n return K1 ? (xe = "".concat(xe, " ").concat(X1), We = s()({}, We || {}, {}, V0 || {})) : g1 ? (xe = "".concat(xe, " ").concat(I1), We = s()({}, We || {}, {}, z0 || {})) : O0 && (xe = "".concat(xe, " ").concat(x1), We = s()({}, We || {}, {}, u0 || {})), w.a.createElement(Kr, { input: Jr, previews: ho, submitButton: _r, dropzoneProps: { ref: this.dropzone, className: xe, style: We, onDragEnter: this.handleDragEnter, onDragOver: this.handleDragOver, onDragLeave: this.handleDragLeave, onDrop: K1 ? this.handleDropDisabled : this.handleDrop }, files: B1, extra: s()({}, E1, { onFiles: this.handleFiles, onCancelFile: this.handleCancel, onRemoveFile: this.handleRemove, onRestartFile: this.handleRestart }) });\n } }]), i1;\n }(w.a.Component);\n Z.defaultProps = { accept: "*", multiple: !0, minSizeBytes: 0, maxSizeBytes: Number.MAX_SAFE_INTEGER, maxFiles: Number.MAX_SAFE_INTEGER, autoUpload: !0, disabled: !1, canCancel: !0, canRemove: !0, canRestart: !0, inputContent: "Drag Files or Click to Browse", inputWithFilesContent: "Add Files", submitButtonDisabled: !1, submitButtonContent: "Submit", classNames: {}, styles: {}, addClassNames: {} }, Z.propTypes = { onChangeStatus: C.a.func, getUploadParams: C.a.func, onSubmit: C.a.func, getFilesFromEvent: C.a.func, getDataTransferItemsFromEvent: C.a.func, accept: C.a.string, multiple: C.a.bool, minSizeBytes: C.a.number.isRequired, maxSizeBytes: C.a.number.isRequired, maxFiles: C.a.number.isRequired, validate: C.a.func, autoUpload: C.a.bool, timeout: C.a.number, initialFiles: C.a.arrayOf(C.a.any), disabled: C.a.oneOfType([C.a.bool, C.a.func]), canCancel: C.a.oneOfType([C.a.bool, C.a.func]), canRemove: C.a.oneOfType([C.a.bool, C.a.func]), canRestart: C.a.oneOfType([C.a.bool, C.a.func]), inputContent: C.a.oneOfType([C.a.node, C.a.func]), inputWithFilesContent: C.a.oneOfType([C.a.node, C.a.func]), submitButtonDisabled: C.a.oneOfType([C.a.bool, C.a.func]), submitButtonContent: C.a.oneOfType([C.a.node, C.a.func]), classNames: C.a.object.isRequired, styles: C.a.object.isRequired, addClassNames: C.a.object.isRequired, InputComponent: C.a.func, PreviewComponent: C.a.func, SubmitButtonComponent: C.a.func, LayoutComponent: C.a.func }, t.default = Z;\n}]);\nconst N4 = /* @__PURE__ */ Q2(uZ), B5 = styled_components__WEBPACK_IMPORTED_MODULE_1___default().div(\n ({\n theme: {\n colors: e,\n typography: t,\n spacings: o,\n borderRadius: n,\n GLOBAL_ITEM_HEIGHT_CONDENSED: r\n }\n }) => (0,styled_components__WEBPACK_IMPORTED_MODULE_1__.css)`\n display: flex;\n align-items: center;\n position: relative;\n font-size: ${t.t14};\n min-height: ${r};\n margin-top: ${o.sp8};\n background-color: ${e.backgrounds.bgPrimary};\n box-shadow: 0 0 0 1px ${e.border.borderPrimary} inset;\n box-sizing: border-box;\n border-radius: ${n.base};\n `\n), Wc = (styled_components__WEBPACK_IMPORTED_MODULE_1___default().div)`\n display: flex;\n align-items: center;\n justify-content: space-between;\n width: 100%;\n padding: 4px 12px;\n`, Rc = styled_components__WEBPACK_IMPORTED_MODULE_1___default().div(\n ({\n theme: { mixins: e, fontWeight: t, spacings: o, typography: n, colors: r },\n $uploadLabel: i\n }) => (0,styled_components__WEBPACK_IMPORTED_MODULE_1__.css)`\n padding-left: ${i ? o.sp8 : o.sp12};\n padding-right: ${o.sp8};\n font-weight: ${t.regular};\n font-size: ${n.t12};\n line-height: 16.8px;\n color: ${r.textIcon.textHighemphasis};\n ${e.ellipsis}\n `\n), zZ = styled_components__WEBPACK_IMPORTED_MODULE_1___default().div(\n ({ theme: { colors: e, typography: t, fontWeight: o } }) => (0,styled_components__WEBPACK_IMPORTED_MODULE_1__.css)`\n color: ${e.textIcon.textMediumemphasis};\n font-size: ${t.t12};\n font-weight: ${o.light};\n white-space: nowrap;\n `\n), Bc = styled_components__WEBPACK_IMPORTED_MODULE_1___default().div(\n ({ theme: { colors: e } }) => (0,styled_components__WEBPACK_IMPORTED_MODULE_1__.css)`\n display: flex;\n align-items: center;\n justify-content: flex-start;\n flex: 1;\n width: calc(100% - 48px);\n padding-right: ${({ theme: { spacings: t } }) => t.sp8};\n .icon-system {\n color: ${e.textIcon.textPrimary};\n }\n `\n), hZ = styled_components__WEBPACK_IMPORTED_MODULE_1___default()(B5)(\n ({ theme: { colors: e } }) => (0,styled_components__WEBPACK_IMPORTED_MODULE_1__.css)`\n border: 1px solid ${e.border.borderError};\n `\n), T4 = ({\n meta: e,\n fileWithMeta: t,\n maxSize: o\n}) => {\n const { name: n, percent: r, status: i, size: a } = e, s = o ? a >= o * 1e6 : !1, l = () => /* @__PURE__ */ e1(Wc, { children: [\n /* @__PURE__ */ e1(Bc, { children: [\n /* @__PURE__ */ c(Z1, { name: "Document", size: "xxs" }),\n /* @__PURE__ */ c(Rc, { children: n }),\n /* @__PURE__ */ e1(zZ, { children: [\n Math.round(a / 1e3),\n " KB"\n ] })\n ] }),\n /* @__PURE__ */ c(A3, { place: "bottom", text: "Delete", children: /* @__PURE__ */ c(\n G2,\n {\n name: "Bin",\n buttonType: "link",\n size: "sm",\n onClick: t.remove\n }\n ) })\n ] }), p = () => {\n switch (i) {\n case "uploading":\n return /* @__PURE__ */ c(B5, { children: /* @__PURE__ */ e1(Wc, { children: [\n /* @__PURE__ */ e1(Bc, { children: [\n /* @__PURE__ */ c(C4, { hasLabel: !0, progress: Math.round(r) }),\n /* @__PURE__ */ c(Rc, { $uploadLabel: !0, children: "Uploading file..." })\n ] }),\n /* @__PURE__ */ c(\n G2,\n {\n name: "Cross",\n buttonType: "link",\n size: "sm",\n onClick: t.cancel\n }\n )\n ] }) });\n case "done":\n case "headers_received":\n return /* @__PURE__ */ c(B5, { children: /* @__PURE__ */ c(l, {}) });\n case "aborted":\n return null;\n default:\n return null;\n }\n };\n return s ? /* @__PURE__ */ c(A3, { text: "Maximum file size was reached", place: "bottom", children: /* @__PURE__ */ c(hZ, { children: /* @__PURE__ */ c(l, {}) }) }) : p();\n}, OZ = styled_components__WEBPACK_IMPORTED_MODULE_1___default().div(\n ({ theme: { colors: e, borderRadius: t } }) => (0,styled_components__WEBPACK_IMPORTED_MODULE_1__.css)`\n /* base */\n\n .dzu-dropzone {\n display: flex;\n flex-direction: column;\n align-items: center;\n width: 100%;\n min-height: 120px;\n overflow: scroll;\n margin: 0 auto;\n position: relative;\n box-sizing: border-box;\n transition: all 0.15s linear;\n border: 2px solid #d9d9d9;\n border-radius: 4px;\n }\n\n .dzu-dropzoneActive {\n background-color: #deebff;\n border-color: #2484ff;\n }\n\n .dzu-dropzoneDisabled {\n opacity: 0.5;\n }\n\n .dzu-dropzoneDisabled *:hover {\n cursor: unset;\n }\n\n .dzu-input {\n display: none;\n }\n\n .dzu-inputLabel {\n display: flex;\n justify-content: center;\n align-items: center;\n position: absolute;\n top: 0;\n bottom: 0;\n left: 0;\n right: 0;\n font-family: \'Helvetica\', sans-serif;\n font-size: 20px;\n font-weight: 600;\n color: #2484ff;\n -moz-osx-font-smoothing: grayscale;\n -webkit-font-smoothing: antialiased;\n cursor: pointer;\n }\n\n .dzu-inputLabelWithFiles {\n display: flex;\n justify-content: center;\n align-items: center;\n align-self: flex-start;\n padding: 0 14px;\n min-height: 32px;\n background-color: #e6e6e6;\n color: #2484ff;\n border: none;\n font-family: \'Helvetica\', sans-serif;\n border-radius: 4px;\n font-size: 14px;\n font-weight: 600;\n margin-top: 20px;\n margin-left: 3%;\n -moz-osx-font-smoothing: grayscale;\n -webkit-font-smoothing: antialiased;\n cursor: pointer;\n }\n\n .dzu-previewContainer {\n padding: 40px 3%;\n display: flex;\n flex-direction: row;\n align-items: center;\n justify-content: space-between;\n position: relative;\n width: 100%;\n min-height: 60px;\n z-index: 1;\n border-bottom: 1px solid #ececec;\n box-sizing: border-box;\n }\n\n .dzu-previewStatusContainer {\n display: flex;\n align-items: center;\n }\n\n .dzu-previewFileName {\n font-family: \'Helvetica\', sans-serif;\n font-size: 14px;\n font-weight: 400;\n color: #333333;\n }\n\n .dzu-previewImage {\n width: auto;\n max-height: 40px;\n max-width: 140px;\n border-radius: 4px;\n }\n\n .dzu-previewButton {\n background-size: 14px 14px;\n background-position: center;\n background-repeat: no-repeat;\n width: 14px;\n height: 14px;\n cursor: pointer;\n opacity: 0.9;\n margin: 0 0 2px 10px;\n }\n\n .dzu-submitButtonContainer {\n margin: 24px 0;\n z-index: 1;\n }\n\n .dzu-submitButton {\n padding: 0 14px;\n min-height: 32px;\n background-color: #2484ff;\n border: none;\n border-radius: 4px;\n font-family: \'Helvetica\', sans-serif;\n font-size: 14px;\n font-weight: 600;\n color: #fff;\n -moz-osx-font-smoothing: grayscale;\n -webkit-font-smoothing: antialiased;\n cursor: pointer;\n }\n\n .dzu-submitButton:disabled {\n background-color: #e6e6e6;\n color: #333333;\n cursor: unset;\n }\n\n /* base end */\n\n .dzu-dropzone {\n overflow: auto;\n &Active {\n .dzu-inputLabel {\n background: ${e.backgrounds.ghostWhite};\n border-style: solid;\n }\n }\n &Disabled {\n opacity: 1;\n .dzu-inputLabel {\n background-color: ${e.backgrounds.bgDisabledPrimary};\n border-color: ${e.border.borderDisabledOnbg};\n\n &:hover,\n &:active {\n background: ${e.backgrounds.bgHoverPrimary};\n }\n }\n ${WM},\n ${RM}, \n svg {\n color: ${e.textIcon.textDisabledOnbg};\n }\n }\n }\n\n .dzu-inputLabel {\n background: ${e.backgrounds.bgPrimary};\n transition: background-color 0.2s;\n border: 1px dashed ${e.border.borderPrimary};\n border-radius: ${t.base};\n\n &:hover,\n &:active {\n background: ${e.backgrounds.bgHoverPrimary};\n }\n\n &:active {\n background-color: ${e.backgrounds.bgSelected};\n border: 1px dashed ${e.border.borderSecondary};\n }\n }\n `\n), fZ = styled_components__WEBPACK_IMPORTED_MODULE_1___default().div(\n ({ theme: { colors: e, fontWeight: t, borderRadius: o } }) => (0,styled_components__WEBPACK_IMPORTED_MODULE_1__.css)`\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n width: 100%;\n height: 100%;\n font-weight: ${t.light};\n color: ${e.textIcon.textPrimary};\n box-sizing: border-box;\n border-radius: ${o.base};\n pointer-events: none;\n `\n), WM = styled_components__WEBPACK_IMPORTED_MODULE_1___default().div(\n ({ theme: { colors: e, typography: t, fontWeight: o } }) => (0,styled_components__WEBPACK_IMPORTED_MODULE_1__.css)`\n font-size: ${t.t12};\n line-height: 16.8px;\n font-weight: ${o.regular};\n margin-top: 10px;\n color: ${e.textIcon.textHighemphasis};\n `\n), RM = styled_components__WEBPACK_IMPORTED_MODULE_1___default().div(\n ({ theme: { typography: e, colors: t, fontWeight: o } }) => (0,styled_components__WEBPACK_IMPORTED_MODULE_1__.css)`\n font-size: ${e.t12};\n line-height: 16.8px;\n color: ${t.textIcon.textMediumemphasis};\n font-weight: ${o.light};\n `\n), BM = styled_components__WEBPACK_IMPORTED_MODULE_1___default().div(({ theme: e }) => {\n const { colors: t, typography: o, lineHeight: n, spacings: r, fontWeight: i } = e;\n return (0,styled_components__WEBPACK_IMPORTED_MODULE_1__.css)`\n font-size: ${o.t10};\n font-weight: ${i.regular};\n line-height: ${n.lh14};\n color: ${t.textIcon.textPrimary};\n margin: 0 0 ${r.sp4};\n `;\n});\n(styled_components__WEBPACK_IMPORTED_MODULE_1___default().div)`\n width: 518px;\n max-width: 100%;\n`;\nconst Bn = ({ maxSize: e }) => /* @__PURE__ */ e1(fZ, { children: [\n /* @__PURE__ */ c(Z1, { name: "Folder" }),\n /* @__PURE__ */ c(WM, { children: "Drag and drop or click to upload" }),\n e && /* @__PURE__ */ e1(RM, { children: [\n "Only files with max ",\n e,\n "MB file size"\n ] })\n] }), Sc = ({\n input: e,\n previews: t,\n submitButton: o,\n dropzoneProps: n,\n files: r,\n extra: i\n}) => /* @__PURE__ */ e1(s0, { children: [\n /* @__PURE__ */ c("div", { ...n, children: r.length < i.maxFiles && e }),\n t,\n r.length > 0 && o\n] }), __ = (e) => {\n const {\n isDisabled: t,\n uploadLabel: o,\n multiple: n,\n maxSize: r,\n accept: i,\n url: a,\n formDataBody: s,\n headers: l,\n handleChangeStatus: p,\n showPreview: d,\n onFileUpload: b,\n ...M\n } = e;\n let u = (0,react__WEBPACK_IMPORTED_MODULE_0__.useRef)();\n const A = () => ({\n url: a,\n formDataBody: s,\n headers: l\n }), z = ({ file: f, meta: O }, h, g) => {\n console.log("dnd", h, f, O, g), p(u, h, f, O, g);\n };\n return /* @__PURE__ */ e1(OZ, { children: [\n o && /* @__PURE__ */ c(BM, { children: o }),\n a ? /* @__PURE__ */ c(\n N4,\n {\n ref: u,\n disabled: t,\n multiple: n,\n accept: i,\n getUploadParams: A,\n onChangeStatus: z,\n classNames: { inputLabelWithFiles: "dzu-inputLabel" },\n PreviewComponent: (f) => d == null || d ? /* @__PURE__ */ c(T4, { ...f, maxSize: r }) : null,\n LayoutComponent: Sc,\n inputContent: /* @__PURE__ */ c(Bn, { maxSize: r }, "dnd-input"),\n inputWithFilesContent: /* @__PURE__ */ c(Bn, { maxSize: r }, "dnd-input-with-files"),\n styles: {\n dropzone: {\n width: "100%",\n height: 128,\n maxWidth: "100%",\n border: 0\n }\n },\n ...M\n }\n ) : /* @__PURE__ */ c(\n N4,\n {\n ref: u,\n disabled: t,\n multiple: n,\n accept: i,\n onChangeStatus: z,\n classNames: { inputLabelWithFiles: "dzu-inputLabel" },\n PreviewComponent: (f) => d == null || d ? /* @__PURE__ */ c(T4, { ...f, maxSize: r }) : null,\n LayoutComponent: Sc,\n inputContent: /* @__PURE__ */ c(Bn, { maxSize: r }, "dnd-input"),\n inputWithFilesContent: /* @__PURE__ */ c(Bn, { maxSize: r }, "dnd-input-with-files"),\n styles: {\n dropzone: {\n width: "100%",\n height: 128,\n maxWidth: "100%",\n border: 0\n }\n },\n ...M\n }\n )\n ] });\n}, gZ = (e) => /* @__PURE__ */ c(\n db,\n {\n getSearchValue: e == null ? void 0 : e.getSearchValue,\n onRowClick: e == null ? void 0 : e.onSelectClick,\n selectedClient: e == null ? void 0 : e.selectedEntity,\n loadingProgress: e == null ? void 0 : e.loadingProgress,\n clientsData: e.entitiesData,\n defaultSearchValue: e == null ? void 0 : e.defaultSearchValue,\n isEnity: !0\n }\n);\n(styled_components__WEBPACK_IMPORTED_MODULE_1___default().div)`\n width: 1300px;\n`;\nconst CZ = styled_components__WEBPACK_IMPORTED_MODULE_1___default().div(\n ({ theme: { colors: e, spacings: t }, cscLogo: o }) => (0,styled_components__WEBPACK_IMPORTED_MODULE_1__.css)`\n background: ${e.topBar.topBarBgPrimary};\n padding: 8px ${t.sp12};\n display: flex;\n justify-content: space-between;\n align-items: center;\n max-height: 48px;\n min-height: 48px;\n box-sizing: border-box;\n ${!o && (0,styled_components__WEBPACK_IMPORTED_MODULE_1__.css)`\n .logo-svg {\n height: 20px;\n }\n `}\n `\n), mZ = styled_components__WEBPACK_IMPORTED_MODULE_1___default().div(\n ({ theme: { colors: e }, $mode: t }) => (0,styled_components__WEBPACK_IMPORTED_MODULE_1__.css)`\n display: flex;\n justify-content: flex-start;\n align-items: center;\n gap: 2px;\n ${t == "blueLight" && (0,styled_components__WEBPACK_IMPORTED_MODULE_1__.css)`\n border-right: 1px solid\n rgba(${q2(e.border.borderTransparent)}, 0.08);\n `}\n ${t == "blueDark" && (0,styled_components__WEBPACK_IMPORTED_MODULE_1__.css)`\n border-right: 1px solid ${e.border.borderTransparent};\n `}\n \n max-height: 24px;\n box-sizing: border-box;\n `\n), LZ = styled_components__WEBPACK_IMPORTED_MODULE_1___default().div(\n ({ theme: { colors: e, typography: t, spacings: o, fontWeight: n, lineHeight: r } }) => (0,styled_components__WEBPACK_IMPORTED_MODULE_1__.css)`\n font-size: ${t.t12};\n color: ${e.topBar.topBarTextPrimary};\n text-transform: uppercase;\n padding: 0 ${o.sp12} 0 ${o.sp4};\n font-weight: ${n.bold};\n line-height: ${r.lh20};\n `\n), vZ = styled_components__WEBPACK_IMPORTED_MODULE_1___default().div(({ theme: { colors: e, borderRadius: t }, $mode: o }) => (0,styled_components__WEBPACK_IMPORTED_MODULE_1__.css)`\n cursor: pointer;\n display: flex;\n justify-content: flex-start;\n align-items: center;\n gap: 8px;\n padding: 6px 8px;\n border-radius: ${t.base};\n /* max-width: 52px; */\n\n .icon-system {\n width: 16px;\n margin-left: 0;\n margin-right: -8px;\n }\n &:hover {\n ${o == "blueLight" && (0,styled_components__WEBPACK_IMPORTED_MODULE_1__.css)`\n background-color: rgba(\n ${q2(e.backgrounds.bgTransparencyHover)},\n 0.04\n );\n `}\n ${o == "blueDark" && (0,styled_components__WEBPACK_IMPORTED_MODULE_1__.css)`\n background-color: ${e.backgrounds.bgTransparencyHover};\n `}\n }\n\n ${(n) => n.$active && o == "blueLight" && (0,styled_components__WEBPACK_IMPORTED_MODULE_1__.css)`\n background-color: rgba(\n ${q2(e.backgrounds.bgTransparencyPressed)},\n 0.08\n );\n `}\n ${(n) => n.$active && o == "blueDark" && (0,styled_components__WEBPACK_IMPORTED_MODULE_1__.css)`\n background-color: ${e.backgrounds.bgTransparencyPressed};\n `}\n ${(n) => n.$disabled && (0,styled_components__WEBPACK_IMPORTED_MODULE_1__.css)`\n &:hover {\n background: transparent;\n }\n pointer-events: none;\n cursor: initial;\n `}\n `);\nstyled_components__WEBPACK_IMPORTED_MODULE_1___default().div(({ theme: { colors: e, spacings: t } }) => (0,styled_components__WEBPACK_IMPORTED_MODULE_1__.css)`\n background: ${e.paua};\n padding: ${t.sp12};\n `);\nconst qZ = styled_components__WEBPACK_IMPORTED_MODULE_1___default().div(({ theme: { spacings: e } }) => (0,styled_components__WEBPACK_IMPORTED_MODULE_1__.css)`\n padding-left: ${e.sp12};\n flex-grow: 1;\n `), yZ = (styled_components__WEBPACK_IMPORTED_MODULE_1___default().div)`\n display: flex;\n justify-content: flex-start;\n align-items: center;\n gap: 4px;\n #topbar-right-side-container {\n display: flex;\n justify-content: flex-start;\n align-items: center;\n gap: 4px;\n }\n`, SM = styled_components__WEBPACK_IMPORTED_MODULE_1___default().div(\n ({\n theme: { colors: e, spacings: t, borderRadius: o, transitions: n },\n $avatar: r,\n $isOpened: i,\n $mode: a\n }) => (0,styled_components__WEBPACK_IMPORTED_MODULE_1__.css)`\n padding: ${r ? t.sp4 : t.sp8};\n margin: -12px 0;\n border-radius: ${o.base};\n cursor: pointer;\n transition: ${n.base};\n .icon-system {\n height: 16px;\n }\n &:hover {\n ${a == "blueLight" && (0,styled_components__WEBPACK_IMPORTED_MODULE_1__.css)`\n background-color: rgba(\n ${q2(e.backgrounds.bgTransparencyHover)},\n 0.04\n );\n `}\n ${a == "blueDark" && (0,styled_components__WEBPACK_IMPORTED_MODULE_1__.css)`\n background-color: ${e.backgrounds.bgTransparencyHover};\n `}\n transition: ${n.base};\n ${!r && (0,styled_components__WEBPACK_IMPORTED_MODULE_1__.css)`\n .icon-system {\n color: ${e.topBar.topBarTextPrimary};\n transition: ${n.base};\n height: 16px;\n }\n `}\n }\n &:active {\n ${a == "blueLight" && (0,styled_components__WEBPACK_IMPORTED_MODULE_1__.css)`\n background-color: rgba(\n ${q2(e.backgrounds.bgTransparencyHover)},\n 0.08\n );\n `}\n ${a == "blueDark" && (0,styled_components__WEBPACK_IMPORTED_MODULE_1__.css)`\n background-color: ${e.backgrounds.bgTransparencyHover};\n `}\n \n transition: ${n.base};\n }\n ${i && a == "blueLight" && (0,styled_components__WEBPACK_IMPORTED_MODULE_1__.css)`\n background-color: rgba(\n ${q2(e.backgrounds.bgTransparencyHover)},\n 0.08\n );\n transition: ${n.base};\n `}\n ${i && a == "blueDark" && (0,styled_components__WEBPACK_IMPORTED_MODULE_1__.css)`\n background-color: ${e.backgrounds.bgTransparencyHover};\n transition: ${n.base};\n `}\n `\n), Ec = styled_components__WEBPACK_IMPORTED_MODULE_1___default().div(({ theme: { transitions: e, colors: t }, $isActive: o, $mode: n }) => (0,styled_components__WEBPACK_IMPORTED_MODULE_1__.css)`\n padding: 12px 0;\n\n ${o && (0,styled_components__WEBPACK_IMPORTED_MODULE_1__.css)`\n ${SM} {\n ${n == "blueLight" && (0,styled_components__WEBPACK_IMPORTED_MODULE_1__.css)`\n background-color: rgba(\n ${q2(t.backgrounds.bgTransparencyHover)},\n 0.08\n );\n `}\n ${n == "blueDark" && (0,styled_components__WEBPACK_IMPORTED_MODULE_1__.css)`\n background-color: ${t.backgrounds.bgTransparencyHover};\n `}\n \n \n transition: ${e.base};\n }\n `}\n `), wZ = styled_components__WEBPACK_IMPORTED_MODULE_1___default().div(({ theme: { colors: e } }) => (0,styled_components__WEBPACK_IMPORTED_MODULE_1__.css)`\n width: 1px;\n height: 24px;\n background-color: ${e.border.borderTransparent};\n opacity: 0.16;\n `), xZ = (styled_components__WEBPACK_IMPORTED_MODULE_1___default().div)`\n .icon-system {\n width: 12px;\n height: 12px;\n svg {\n width: 12px !important;\n height: 12px;\n }\n }\n`, WZ = (styled_components__WEBPACK_IMPORTED_MODULE_1___default().div)`\n > div {\n width: 57.78px !important;\n height: 16px !important;\n }\n svg {\n width: 57.78px !important;\n height: 16px !important;\n }\n`, RZ = (styled_components__WEBPACK_IMPORTED_MODULE_1___default().img)`\n height: 16px !important;\n`, Vo = ({\n onClick: e,\n iconName: t,\n count: o,\n $avatar: n,\n url: r,\n avatarName: i,\n $isOpened: a,\n $mode: s\n}) => {\n const l = (0,styled_components__WEBPACK_IMPORTED_MODULE_1__.useTheme)(), p = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)(() => n ? /* @__PURE__ */ c(xZ, { children: /* @__PURE__ */ c(zr, { size: "sm", url: r, name: i }) }) : /* @__PURE__ */ c(Ae, { count: o, children: t && /* @__PURE__ */ c(Z1, { name: t, size: "xs", color: l.colors.white }) }), [o, t, r, n]);\n return /* @__PURE__ */ c(\n SM,\n {\n $mode: s,\n onClick: e,\n $avatar: n,\n $isOpened: a,\n children: p()\n }\n );\n}, BZ = styled_components__WEBPACK_IMPORTED_MODULE_1___default().div(\n ({\n theme: { colors: e, borderRadius: t, spacings: o, GLOBAL_ITEM_HEIGHT_CONDENSED: n }\n }) => (0,styled_components__WEBPACK_IMPORTED_MODULE_1__.css)`\n /* base */\n\n .dzu-dropzone {\n display: flex;\n flex-direction: column;\n align-items: center;\n width: 100%;\n min-height: 120px;\n overflow: scroll;\n margin: 0 auto;\n position: relative;\n box-sizing: border-box;\n transition: all 0.15s linear;\n border: 2px solid #d9d9d9;\n border-radius: 4px;\n }\n\n .dzu-dropzoneActive {\n background-color: #deebff;\n border-color: #2484ff;\n }\n\n .dzu-dropzoneDisabled {\n opacity: 0.5;\n }\n\n .dzu-dropzoneDisabled *:hover {\n cursor: unset;\n }\n\n .dzu-input {\n display: none;\n }\n\n .dzu-inputLabel {\n display: flex;\n justify-content: center;\n align-items: center;\n position: absolute;\n top: 0;\n bottom: 0;\n left: 0;\n right: 0;\n font-family: \'Helvetica\', sans-serif;\n font-size: 20px;\n font-weight: 600;\n color: #2484ff;\n -moz-osx-font-smoothing: grayscale;\n -webkit-font-smoothing: antialiased;\n cursor: pointer;\n }\n\n .dzu-inputLabelWithFiles {\n display: flex;\n justify-content: center;\n align-items: center;\n align-self: flex-start;\n padding: 0 14px;\n min-height: 32px;\n background-color: #e6e6e6;\n color: #2484ff;\n border: none;\n font-family: \'Helvetica\', sans-serif;\n border-radius: 4px;\n font-size: 14px;\n font-weight: 600;\n margin-top: 20px;\n margin-left: 3%;\n -moz-osx-font-smoothing: grayscale;\n -webkit-font-smoothing: antialiased;\n cursor: pointer;\n }\n\n .dzu-previewContainer {\n padding: 40px 3%;\n display: flex;\n flex-direction: row;\n align-items: center;\n justify-content: space-between;\n position: relative;\n width: 100%;\n min-height: 60px;\n z-index: 1;\n border-bottom: 1px solid #ececec;\n box-sizing: border-box;\n }\n\n .dzu-previewStatusContainer {\n display: flex;\n align-items: center;\n }\n\n .dzu-previewFileName {\n font-family: \'Helvetica\', sans-serif;\n font-size: 14px;\n font-weight: 400;\n color: #333333;\n }\n\n .dzu-previewImage {\n width: auto;\n max-height: 40px;\n max-width: 140px;\n border-radius: 4px;\n }\n\n .dzu-previewButton {\n background-size: 14px 14px;\n background-position: center;\n background-repeat: no-repeat;\n width: 14px;\n height: 14px;\n cursor: pointer;\n opacity: 0.9;\n margin: 0 0 2px 10px;\n }\n\n .dzu-submitButtonContainer {\n margin: 24px 0;\n z-index: 1;\n }\n\n .dzu-submitButton {\n padding: 0 14px;\n min-height: 32px;\n background-color: #2484ff;\n border: none;\n border-radius: 4px;\n font-family: \'Helvetica\', sans-serif;\n font-size: 14px;\n font-weight: 600;\n color: #fff;\n -moz-osx-font-smoothing: grayscale;\n -webkit-font-smoothing: antialiased;\n cursor: pointer;\n }\n\n .dzu-submitButton:disabled {\n background-color: #e6e6e6;\n color: #333333;\n cursor: unset;\n }\n\n /* base end */\n\n .dzu-dropzone {\n display: block;\n position: relative;\n border: 0;\n border-radius: 0;\n min-height: auto;\n overflow: auto;\n\n &Disabled {\n opacity: 1;\n\n .dzu-inputLabel {\n background-color: ${e.backgrounds.bgDisabledPrimary};\n color: ${e.textIcon.textDisabledOnbg};\n border: 1px solid ${e.border.borderDisabledOnbg};\n }\n\n ${EM} {\n color: ${e.textIcon.textLowemphasis};\n }\n\n ${$n} {\n background-color: ${e.backgrounds.bgDisabledPrimary};\n color: ${e.textIcon.textDisabledOnbg};\n border: none;\n box-shadow: none;\n cursor: default;\n }\n }\n &:not(&Disabled) {\n .dzu-inputLabel {\n &:hover {\n border-color: ${e.pinkSwan};\n\n ${$n} {\n background-color: ${e.buttonBackgound.buttonBgPrimaryHover};\n color: ${e.buttonText.buttonTextPrimary};\n }\n }\n\n &:active {\n border-color: ${e.border.borderPrimary};\n color: ${e.textIcon.textHighemphasis};\n\n ${$n} {\n background-color: ${e.buttonBackgound.buttonBgPrimaryPressed};\n color: ${e.buttonText.buttonTextPrimaryPressed};\n }\n }\n }\n }\n }\n\n .dzu-inputLabel {\n position: relative;\n width: 100%;\n justify-content: flex-start;\n background-color: ${e.backgrounds.bgPrimary};\n border: 1px solid ${e.border.borderPrimary};\n transition: border-color 0.2s, color 0.2s;\n border-radius: ${t.base};\n min-height: ${n};\n color: ${e.textIcon.textHighemphasis};\n box-sizing: border-box;\n max-height: 40px;\n }\n `\n), SZ = styled_components__WEBPACK_IMPORTED_MODULE_1___default().div(\n ({ theme: { fontWeight: e, borderRadius: t } }) => (0,styled_components__WEBPACK_IMPORTED_MODULE_1__.css)`\n display: flex;\n align-items: center;\n justify-content: space-between;\n width: 100%;\n font-weight: ${e.light};\n box-sizing: border-box;\n border-radius: ${t.base};\n pointer-events: none;\n padding: 4px 4px 4px 12px;\n `\n), EZ = styled_components__WEBPACK_IMPORTED_MODULE_1___default().div(\n ({ theme: { typography: e, lineHeight: t, fontWeight: o } }) => (0,styled_components__WEBPACK_IMPORTED_MODULE_1__.css)`\n font-size: ${e.t12};\n font-weight: ${o.regular};\n line-height: 16.8px;\n margin-left: 8px;\n `\n);\nstyled_components__WEBPACK_IMPORTED_MODULE_1___default().div(\n ({ theme: { colors: e, typography: t, lineHeight: o } }) => (0,styled_components__WEBPACK_IMPORTED_MODULE_1__.css)`\n font-size: ${t.t12};\n line-height: ${o.lh20};\n color: ${e.grey};\n `\n);\nconst EM = styled_components__WEBPACK_IMPORTED_MODULE_1___default().div(\n ({ theme: { colors: e, typography: t, fontWeight: o, spacings: n } }) => (0,styled_components__WEBPACK_IMPORTED_MODULE_1__.css)`\n font-size: ${t.t10};\n line-height: 14x;\n color: ${e.textIcon.textLowemphasis};\n margin-top: ${n.sp4};\n font-weight: ${o.regular};\n margin-left: 8px;\n `\n), $n = styled_components__WEBPACK_IMPORTED_MODULE_1___default()(Pt)``, kZ = (styled_components__WEBPACK_IMPORTED_MODULE_1___default().div)`\n display: flex;\n align-items: center;\n justify-content: flex-start;\n`, NZ = styled_components__WEBPACK_IMPORTED_MODULE_1___default().div(\n ({ theme: { colors: e, typography: t, lineHeight: o } }) => (0,styled_components__WEBPACK_IMPORTED_MODULE_1__.css)`\n display: inline-block;\n vertical-align: top;\n margin: 4px 0 0;\n font-size: ${t.t12};\n line-height: ${o.lh20};\n color: ${e.textIcon.textError};\n `\n), Sn = () => /* @__PURE__ */ e1(SZ, { children: [\n /* @__PURE__ */ e1(kZ, { children: [\n /* @__PURE__ */ c(Z1, { name: "Upload", size: "xs" }),\n /* @__PURE__ */ c(EZ, { children: "Click to upload your file" })\n ] }),\n /* @__PURE__ */ c($n, { as: "div", size: "sm", children: "Upload" })\n] }), kc = ({\n input: e,\n previews: t,\n submitButton: o,\n dropzoneProps: n,\n files: r,\n maxSize: i,\n isError: a,\n errorText: s\n}) => /* @__PURE__ */ e1("div", { children: [\n /* @__PURE__ */ e1("div", { ...n, children: [\n e,\n i && /* @__PURE__ */ c(EM, { children: "Only files with max 20MB file size" })\n ] }),\n t,\n /* @__PURE__ */ c("div", { children: a === !0 && s !== "" && /* @__PURE__ */ c(NZ, { children: s }) }),\n r.length > 0 && o\n] }), $_ = (e) => {\n const {\n isDisabled: t,\n uploadLabel: o,\n multiple: n,\n maxSize: r,\n accept: i,\n url: a,\n formDataBody: s,\n headers: l,\n handleChangeStatus: p,\n isError: d,\n isClearField: b,\n errorText: M,\n ...u\n } = e;\n let A = (0,react__WEBPACK_IMPORTED_MODULE_0__.useRef)();\n const z = () => ({\n url: a,\n formDataBody: s,\n headers: l\n }), f = ({ file: O, meta: h }, g, v) => {\n console.log("uploader", g, O, h, v), p(A, g, O, h, v);\n };\n return /* @__PURE__ */ e1(BZ, { children: [\n o && /* @__PURE__ */ c(BM, { children: o }),\n a ? /* @__PURE__ */ c(\n N4,\n {\n ref: A,\n disabled: t,\n multiple: n,\n accept: i,\n getUploadParams: z,\n onChangeStatus: f,\n classNames: { inputLabelWithFiles: "dzu-inputLabel" },\n PreviewComponent: (O) => (b ? O.fileWithMeta.remove() : O.fileWithMeta, /* @__PURE__ */ c(T4, { ...O, maxSize: r })),\n LayoutComponent: (O) => /* @__PURE__ */ c(\n kc,\n {\n ...O,\n maxSize: r,\n isError: d,\n errorText: M\n }\n ),\n inputContent: /* @__PURE__ */ c(Sn, {}, "uploader-input"),\n inputWithFilesContent: /* @__PURE__ */ c(Sn, {}, "uploader-input-with-files"),\n ...u\n }\n ) : /* @__PURE__ */ c(\n N4,\n {\n ref: A,\n disabled: t,\n multiple: n,\n accept: i,\n onChangeStatus: f,\n classNames: { inputLabelWithFiles: "dzu-inputLabel" },\n PreviewComponent: (O) => (b ? O.fileWithMeta.remove() : O.fileWithMeta, /* @__PURE__ */ c(T4, { ...O, maxSize: r })),\n LayoutComponent: (O) => /* @__PURE__ */ c(\n kc,\n {\n ...O,\n maxSize: r,\n isError: d,\n errorText: M\n }\n ),\n inputContent: /* @__PURE__ */ c(Sn, {}, "uploader-input"),\n inputWithFilesContent: /* @__PURE__ */ c(Sn, {}, "uploader-input-with-files"),\n ...u\n }\n )\n ] });\n};\n(styled_components__WEBPACK_IMPORTED_MODULE_1___default().div)`\n width: 400px;\n`;\nconst kM = styled_components__WEBPACK_IMPORTED_MODULE_1___default().ul(\n ({ theme: e }) => (0,styled_components__WEBPACK_IMPORTED_MODULE_1__.css)`\n ${e.mixins.listReset};\n background-color: ${e.colors.white};\n `\n), NM = styled_components__WEBPACK_IMPORTED_MODULE_1___default().div(\n ({ theme: { borderRadius: e, spacings: t } }) => (0,styled_components__WEBPACK_IMPORTED_MODULE_1__.css)`\n border-radius: ${e.base};\n align-self: flex-start;\n padding: 5px;\n &:first-child {\n margin-right: ${t.sp8};\n }\n\n &:last-child {\n margin-left: ${t.sp8};\n }\n `\n);\nfunction S5({\n name: e,\n badge: t,\n size: o = "md",\n isDisabled: n = !1\n}) {\n return /* @__PURE__ */ c(NM, { children: Number(t) && !n ? /* @__PURE__ */ c(Ae, { count: t, children: /* @__PURE__ */ c(Z1, { size: o, name: e }) }) : /* @__PURE__ */ c(Z1, { size: o, name: e }) });\n}\nconst Os = ({\n children: e,\n customItem: t\n}) => t ? t(e) : /* @__PURE__ */ c(s0, { children: e }), fs = styled_components__WEBPACK_IMPORTED_MODULE_1___default().li(\n ({\n theme: {\n colors: e,\n typography: t,\n lineHeight: o,\n fontFamily: n,\n transitions: r,\n spacings: i,\n fontWeight: a\n },\n $iconLeft: s,\n $isDisabled: l,\n $isActive: p\n }) => {\n let d;\n p || (d = e.textIcon.textPrimary);\n const b = p && !l ? e.backgrounds.bgSelected : e.backgrounds.bgPrimary;\n return (0,styled_components__WEBPACK_IMPORTED_MODULE_1__.css)`\n font: ${t.t12} / ${o.lh20} ${n.base};\n font-weight: ${a.light};\n background: ${b};\n box-sizing: border-box;\n min-height: 24px;\n padding: ${i.sp2} ${i.sp8};\n\n &:last-child {\n margin-bottom: 0;\n }\n\n &,\n & > a {\n display: flex;\n width: 100%;\n align-items: center;\n color: ${d};\n transition: ${r.base};\n cursor: pointer;\n }\n\n a {\n padding: ${i.sp8} ${i.sp8} ${i.sp8} 72px;\n margin: -${i.sp8} -${i.sp8} -${i.sp8} -72px;\n text-decoration: none;\n }\n\n ${s && (0,styled_components__WEBPACK_IMPORTED_MODULE_1__.css)`\n a {\n padding-left: ${i.sp8};\n margin-left: -${i.sp8};\n }\n `}\n\n &:hover {\n background:${e.backgrounds.bgHoverPrimary};\n\n a {\n text-decoration: none;\n }\n }\n ${l && (0,styled_components__WEBPACK_IMPORTED_MODULE_1__.css)`\n pointer-events: none;\n color: ${e.textIcon.textDisabledOnbg} !important;\n `}\n\n ${p && (0,styled_components__WEBPACK_IMPORTED_MODULE_1__.css)`\n text-decoration: none;\n `}\n\n ${NM} {\n border-radius: 0px;\n align-self: center;\n padding: 0px;\n }\n `;\n }\n), ui = (styled_components__WEBPACK_IMPORTED_MODULE_1___default().span)`\n display: block;\n width: 100%;\n overflow: hidden;\n`;\nfunction TZ(e) {\n const {\n iconLeft: t,\n iconRight: o,\n children: n,\n onClick: r,\n isDisabled: i,\n badge: a,\n customItem: s\n } = e, l = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)(() => {\n !i && r && r();\n }, [i, r]);\n return /* @__PURE__ */ c(\n fs,\n {\n $iconLeft: e.iconLeft,\n $isDisabled: e.isDisabled,\n $isActive: e.$isActive,\n onClick: l,\n children: /* @__PURE__ */ e1(Os, { customItem: s, children: [\n t && /* @__PURE__ */ c(\n S5,\n {\n name: t,\n badge: a,\n isDisabled: i,\n size: "xxs"\n }\n ),\n n && /* @__PURE__ */ c(ui, { children: n }),\n o && /* @__PURE__ */ c(S5, { name: o, size: "xxxs" })\n ] })\n }\n );\n}\n(styled_components__WEBPACK_IMPORTED_MODULE_1___default().div)`\n width: 1000px;\n`;\nconst IZ = styled_components__WEBPACK_IMPORTED_MODULE_1___default().div(\n ({ theme: { colors: e }, $isOpen: t }) => (0,styled_components__WEBPACK_IMPORTED_MODULE_1__.css)`\n padding: 4px 12px;\n background-color: ${t ? "transparent" : e.backgrounds.bgSecondary};\n .collapse-wrapper {\n margin-bottom: 0;\n }\n `\n), DZ = (styled_components__WEBPACK_IMPORTED_MODULE_1___default().div)`\n display: flex;\n justify-content: flex-start;\n align-items: center;\n gap: 4px 24px;\n flex-wrap: wrap;\n`, HZ = (styled_components__WEBPACK_IMPORTED_MODULE_1___default().div)`\n display: flex;\n justify-content: space-between;\n align-items: center;\n flex-basis: calc(20% - 24px);\n box-sizing: border-box;\n`, VZ = styled_components__WEBPACK_IMPORTED_MODULE_1___default().div(\n ({ theme: { mixins: e, colors: t, fontWeight: o, lineHeight: n, typography: r } }) => (0,styled_components__WEBPACK_IMPORTED_MODULE_1__.css)`\n ${e.ellipsis};\n font-size: ${r.t10};\n font-weight: ${o.regular};\n line-height: ${n.lh20};\n color: ${t.textIcon.textLowemphasis};\n `\n), PZ = styled_components__WEBPACK_IMPORTED_MODULE_1___default().div(\n ({ theme: { mixins: e, colors: t, fontWeight: o, lineHeight: n, typography: r } }) => (0,styled_components__WEBPACK_IMPORTED_MODULE_1__.css)`\n ${e.ellipsis};\n font-size: ${r.t10};\n font-weight: ${o.regular};\n line-height: ${n.lh20};\n color: ${t.textIcon.textSecondary};\n max-width: 70px;\n text-overflow: ellipsis;\n `\n), FZ = styled_components__WEBPACK_IMPORTED_MODULE_1___default().div(\n ({ theme: { fontWeight: e, lineHeight: t, typography: o } }) => (0,styled_components__WEBPACK_IMPORTED_MODULE_1__.css)`\n button {\n font-size: ${o.t10};\n font-weight: ${e.regular};\n line-height: ${t.lh20};\n padding-left: 0;\n text-decoration: underline;\n .icon-system {\n margin: -5px 0;\n }\n span {\n padding-right: 0 !important;\n }\n }\n `\n), XZ = styled_components__WEBPACK_IMPORTED_MODULE_1___default().div(\n ({ theme: { colors: e, fontWeight: t, typography: o, borderRadius: n } }) => (0,styled_components__WEBPACK_IMPORTED_MODULE_1__.css)`\n font-size: ${o.t10};\n font-weight: ${t.regular};\n line-height: 9px;\n color: ${e.textIcon.textTertiary};\n background-color: ${e.backgrounds.bgTertiary};\n padding: 2.4px 4px;\n border-radius: ${n.lg};\n `\n), e$ = ({ data: e, onProofBalanceClick: t }) => /* @__PURE__ */ c(s0, { children: e == null ? void 0 : e.map((o, n) => /* @__PURE__ */ c(\n UZ,\n {\n title: o.title,\n values: o.values,\n onProofBalanceClick: t\n },\n n\n)) }), UZ = ({\n title: e,\n values: t,\n onProofBalanceClick: o\n}) => {\n const [n, r] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(!1);\n return /* @__PURE__ */ c(IZ, { $isOpen: n, className: "meta-wrapper", children: /* @__PURE__ */ c(h5, { title: e, openedState: r, children: /* @__PURE__ */ c(DZ, { children: t.map((i, a) => {\n const s = Object.keys(i)[0], l = i[s];\n return /* @__PURE__ */ e1(HZ, { children: [\n s === "Proof Balance" ? /* @__PURE__ */ c(FZ, { children: /* @__PURE__ */ c(\n X6,\n {\n buttonType: "link",\n $iconRight: "ExternalLink",\n size: "sm",\n onClick: o,\n children: s\n }\n ) }) : /* @__PURE__ */ c(VZ, { children: s }),\n s === "Proof Balance" ? /* @__PURE__ */ c(XZ, { children: l }) : /* @__PURE__ */ c(PZ, { children: l })\n ] }, a);\n }) }) }) });\n}, YZ = styled_components__WEBPACK_IMPORTED_MODULE_1___default().div(({ theme: {} }) => (0,styled_components__WEBPACK_IMPORTED_MODULE_1__.css)`\n .highcharts-crosshair {\n display: none;\n }\n `), TM = styled_components__WEBPACK_IMPORTED_MODULE_1___default().div(({ theme: { colors: e } }) => (0,styled_components__WEBPACK_IMPORTED_MODULE_1__.css)`\n width: 100%;\n padding: 24px;\n background: ${e.backgrounds.bgPrimary};\n `);\nstyled_components__WEBPACK_IMPORTED_MODULE_1___default().div(({ theme: {} }) => (0,styled_components__WEBPACK_IMPORTED_MODULE_1__.css)`\n width: 100%;\n `);\nconst gs = styled_components__WEBPACK_IMPORTED_MODULE_1___default().div(\n ({\n theme: { colors: e, typography: t, lineHeight: o, fontFamily: n, fontWeight: r, spacings: i }\n }) => (0,styled_components__WEBPACK_IMPORTED_MODULE_1__.css)`\n .highcharts-plot-background {\n outline: 1px solid ${e.border.borderTertiary};\n }\n .highcharts-axis-labels .highcharts-xaxis-labels {\n margin-top: -6px;\n }\n\n .dvtooltipHead {\n color: ${e.textIcon.textPrimary};\n line-height: ${o.lh14};\n font-weight: ${r.regular};\n font-size: ${t.t10};\n font-family: ${n.base};\n padding-left: ${i.sp4};\n }\n .dvSeriesName {\n color: ${e.textIcon.textLowemphasis};\n line-height: ${o.lh14};\n font-weight: ${r.regular};\n font-size: ${t.t10};\n font-family: ${n.base};\n }\n .dvtooltipyAxisValue {\n color: ${e.textIcon.textPrimary};\n line-height: ${o.lh14};\n font-weight: ${r.medium};\n font-size: ${t.t10};\n font-family: ${n.base};\n }\n .dvtooltipLegend {\n font-size: 18px;\n padding: 7px;\n display: inline-flex;\n box-sizing: border-box;\n min-width: 24px;\n max-width: 24px;\n max-height: 24px;\n align-items: center;\n }\n .dvtooltipContainer {\n padding: ${i.sp4} ${i.sp8} ${i.sp4} ${i.sp4} !important;\n line-height: 14px;\n }\n `\n), GZ = styled_components__WEBPACK_IMPORTED_MODULE_1___default().div(({ theme: { colors: e } }) => (0,styled_components__WEBPACK_IMPORTED_MODULE_1__.css)`\n .highcharts-crosshair {\n display: none;\n }\n .highcharts-tick {\n stroke: transparent !important;\n }\n ${IM} {\n position: relative;\n bottom: 115px;\n right: 10px;\n float: right;\n }\n .highcharts-reset-zoom .highcharts-button-box {\n fill: ${e.buttonBackgound.buttonBgTertiary} !important;\n }\n .highcharts-reset-zoom title {\n display: none !important;\n }\n .highcharts-reset-zoom {\n text {\n fill: ${e.textIcon.textLowemphasis} !important;\n }\n }\n `), QZ = styled_components__WEBPACK_IMPORTED_MODULE_1___default().div(\n ({ theme: { colors: e, fontFamily: t, fontWeight: o } }) => (0,styled_components__WEBPACK_IMPORTED_MODULE_1__.css)`\n .highcharts-crosshair {\n display: none;\n }\n .highcharts-plot-background text {\n color: ${e.textIcon.textPrimary};\n line-height: 31.92px;\n font-weight: ${o.regular};\n font-size: 22.8px;\n font-family: ${t.base};\n }\n `\n);\n(styled_components__WEBPACK_IMPORTED_MODULE_1___default().div)`\n max-width: 85vw;\n min-width: 85vw;\n`;\nconst IM = styled_components__WEBPACK_IMPORTED_MODULE_1___default().div(({ theme: {} }) => (0,styled_components__WEBPACK_IMPORTED_MODULE_1__.css)``), ZZ = styled_components__WEBPACK_IMPORTED_MODULE_1___default().div(({ theme: {} }) => (0,styled_components__WEBPACK_IMPORTED_MODULE_1__.css)`\n display: flex;\n flex-direction: column;\n width: fit-content;\n height: fit-content;\n `), Nc = styled_components__WEBPACK_IMPORTED_MODULE_1___default().div(\n ({ theme: {} }) => (0,styled_components__WEBPACK_IMPORTED_MODULE_1__.css)`\n display: flex;\n flex-direction: column;\n `\n), DM = styled_components__WEBPACK_IMPORTED_MODULE_1___default().div(\n ({ theme: { spacings: e, colors: t } }) => (0,styled_components__WEBPACK_IMPORTED_MODULE_1__.css)`\n padding: ${e.sp6};\n border-radius: ${e.sp4};\n background: ${t.backgrounds.bgSecondary};\n `\n), jZ = styled_components__WEBPACK_IMPORTED_MODULE_1___default().div(\n ({ theme: { spacings: e } }) => (0,styled_components__WEBPACK_IMPORTED_MODULE_1__.css)`\n display: flex;\n gap: ${e.sp4};\n align-items: baseline;\n `\n), KZ = styled_components__WEBPACK_IMPORTED_MODULE_1___default().div(\n ({ theme: { spacings: e } }) => (0,styled_components__WEBPACK_IMPORTED_MODULE_1__.css)`\n display: flex;\n gap: ${e.sp4};\n align-items: end;\n `\n), JZ = styled_components__WEBPACK_IMPORTED_MODULE_1___default().div(\n ({ theme: { spacings: e } }) => (0,styled_components__WEBPACK_IMPORTED_MODULE_1__.css)`\n display: flex;\n gap: ${e.sp4};\n align-items: center;\n padding-bottom: ${e.sp16};\n ${tr} {\n padding: 0px;\n }\n `\n), _Z = styled_components__WEBPACK_IMPORTED_MODULE_1___default().div(\n ({ theme: { spacings: e } }) => (0,styled_components__WEBPACK_IMPORTED_MODULE_1__.css)`\n display: flex;\n gap: ${e.sp4};\n align-items: baseline;\n padding-bottom: ${e.sp8};\n `\n), HM = styled_components__WEBPACK_IMPORTED_MODULE_1___default().div(\n ({ theme: { spacings: e } }) => (0,styled_components__WEBPACK_IMPORTED_MODULE_1__.css)`\n padding-bottom: ${e.sp8};\n `\n), ya = styled_components__WEBPACK_IMPORTED_MODULE_1___default().div(\n ({ theme: { spacings: e, colors: t, shadows: o }, $type: n }) => (0,styled_components__WEBPACK_IMPORTED_MODULE_1__.css)`\n border-radius: ${e.sp4};\n background: ${t.backgrounds.bgPrimary};\n box-shadow: ${o.sm};\n box-sizing: border-box;\n .highcharts-markers {\n display: none;\n }\n ${TM} {\n padding: 0;\n background: transparent;\n }\n ${n == "metricsNumberOnly" && (0,styled_components__WEBPACK_IMPORTED_MODULE_1__.css)`\n padding: ${e.sp12} ${e.sp16};\n width: 100%;\n display: flex;\n align-items: end;\n gap: ${e.sp16};\n `}\n ${n == "metrics" && (0,styled_components__WEBPACK_IMPORTED_MODULE_1__.css)`\n padding: ${e.sp16};\n min-width: 345px;\n max-width: 345px;\n display: flex;\n align-items: end;\n gap: ${e.sp16};\n `}\n ${n == "metricsSmall" && (0,styled_components__WEBPACK_IMPORTED_MODULE_1__.css)`\n padding: ${e.sp12} ${e.sp16} ${e.sp16}\n ${e.sp16};\n min-width: 205.6px;\n max-width: 205.6px;\n display: flex;\n flex-direction: column;\n align-items: start;\n gap: ${e.sp8};\n\n label {\n margin-bottom: ${e.sp4};\n }\n ${tr} {\n padding-bottom: 0px;\n }\n ${HM} {\n padding: 0px;\n }\n `}\n &:hover {\n background: ${t.dataVisualizationMetrics.metricsBgHover};\n ${DM} {\n background: ${t.backgrounds.bgPrimary};\n }\n .highcharts-background {\n fill: ${t.dataVisualizationMetrics.metricsBgHover};\n }\n }\n `\n), $Z = styled_components__WEBPACK_IMPORTED_MODULE_1___default().label(\n ({ theme: { fontWeight: e, typography: t, colors: o, lineHeight: n, spacings: r } }) => (0,styled_components__WEBPACK_IMPORTED_MODULE_1__.css)`\n font-weight: ${e.light};\n font-size: ${t.t12};\n color: ${o.textIcon.textLowemphasis};\n line-height: 16.8px;\n `\n), tr = styled_components__WEBPACK_IMPORTED_MODULE_1___default().label(\n ({ theme: { fontWeight: e, typography: t, colors: o, lineHeight: n, spacings: r } }) => (0,styled_components__WEBPACK_IMPORTED_MODULE_1__.css)`\n font-weight: ${e.regular};\n font-size: ${t.t14};\n color: ${o.textIcon.textLowemphasis};\n line-height: ${n.lh19};\n padding-bottom: ${r.sp16};\n `\n), Tc = styled_components__WEBPACK_IMPORTED_MODULE_1___default().div(\n ({ theme: {} }) => (0,styled_components__WEBPACK_IMPORTED_MODULE_1__.css)`\n width: 100%;\n /* .highcharts-root{\n width:100%;\n } */\n `\n), En = styled_components__WEBPACK_IMPORTED_MODULE_1___default().p(\n ({ theme: { fontWeight: e, typography: t, colors: o, lineHeight: n } }) => (0,styled_components__WEBPACK_IMPORTED_MODULE_1__.css)`\n font-weight: ${e.medium};\n font-size: ${t.t28};\n color: ${o.textIcon.textHighemphasis};\n line-height: ${n.lh39};\n padding: 0px;\n margin: 0px;\n `\n), Ic = styled_components__WEBPACK_IMPORTED_MODULE_1___default().div(\n ({ theme: { fontWeight: e, typography: t, colors: o, lineHeight: n } }) => (0,styled_components__WEBPACK_IMPORTED_MODULE_1__.css)`\n font-weight: ${e.regular};\n font-size: ${t.t10};\n color: ${o.textIcon.textLowemphasis};\n line-height: ${n.lh14};\n max-width: 105px;\n min-width: 105px;\n `\n), ej = styled_components__WEBPACK_IMPORTED_MODULE_1___default().span(\n ({ theme: { fontWeight: e, typography: t, colors: o, lineHeight: n } }) => (0,styled_components__WEBPACK_IMPORTED_MODULE_1__.css)`\n font-weight: ${e.regular};\n font-size: ${t.t18};\n color: ${o.textIcon.textHighemphasis};\n line-height: ${n.lh25};\n `\n), Dc = styled_components__WEBPACK_IMPORTED_MODULE_1___default().p(\n ({ theme: { fontWeight: e, typography: t, colors: o, spacings: n }, $status: r }) => (0,styled_components__WEBPACK_IMPORTED_MODULE_1__.css)`\n display: flex;\n align-items: baseline;\n gap: ${n.sp2};\n padding: ${n.sp4};\n font-weight: ${e.regular};\n font-size: ${t.t12};\n border-radius: ${n.sp4};\n line-height: 16.8px;\n margin: 0px;\n\n ${r == "up" && (0,styled_components__WEBPACK_IMPORTED_MODULE_1__.css)`\n background: ${o.backgrounds.bgSuccessSecondary};\n color: ${o.dataVisualizationMetrics.metricsBgUp};\n `}\n ${r == "down" && (0,styled_components__WEBPACK_IMPORTED_MODULE_1__.css)`\n background: ${o.backgrounds.bgErrorSecondary};\n color: ${o.dataVisualizationMetrics.metricsBgDown};\n `}\n `\n);\n(styled_components__WEBPACK_IMPORTED_MODULE_1___default().div)`\n width: 100%;\n`;\nvar VM = { exports: {} };\n(function(e, t) {\n (function(o, n) {\n e.exports = n((react__WEBPACK_IMPORTED_MODULE_0___default()));\n })(typeof self < "u" ? self : D5, function(o) {\n return function(n) {\n function r(a) {\n if (i[a])\n return i[a].exports;\n var s = i[a] = { i: a, l: !1, exports: {} };\n return n[a].call(s.exports, s, s.exports, r), s.l = !0, s.exports;\n }\n var i = {};\n return r.m = n, r.c = i, r.d = function(a, s, l) {\n r.o(a, s) || Object.defineProperty(a, s, { configurable: !1, enumerable: !0, get: l });\n }, r.n = function(a) {\n var s = a && a.__esModule ? function() {\n return a.default;\n } : function() {\n return a;\n };\n return r.d(s, "a", s), s;\n }, r.o = function(a, s) {\n return Object.prototype.hasOwnProperty.call(a, s);\n }, r.p = "", r(r.s = 0);\n }([function(n, r, i) {\n function a() {\n return a = Object.assign ? Object.assign.bind() : function(h) {\n for (var g = 1; g < arguments.length; g++) {\n var v = arguments[g];\n for (var L in v)\n Object.prototype.hasOwnProperty.call(v, L) && (h[L] = v[L]);\n }\n return h;\n }, a.apply(this, arguments);\n }\n function s(h) {\n return b(h) || d(h) || p(h) || l();\n }\n function l() {\n throw new TypeError(`Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.`);\n }\n function p(h, g) {\n if (h) {\n if (typeof h == "string")\n return M(h, g);\n var v = Object.prototype.toString.call(h).slice(8, -1);\n return v === "Object" && h.constructor && (v = h.constructor.name), v === "Map" || v === "Set" ? Array.from(h) : v === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(v) ? M(h, g) : void 0;\n }\n }\n function d(h) {\n if (typeof Symbol < "u" && h[Symbol.iterator] != null || h["@@iterator"] != null)\n return Array.from(h);\n }\n function b(h) {\n if (Array.isArray(h))\n return M(h);\n }\n function M(h, g) {\n (g == null || g > h.length) && (g = h.length);\n for (var v = 0, L = new Array(g); v < g; v++)\n L[v] = h[v];\n return L;\n }\n function u(h) {\n "@babel/helpers - typeof";\n return (u = typeof Symbol == "function" && typeof Symbol.iterator == "symbol" ? function(g) {\n return typeof g;\n } : function(g) {\n return g && typeof Symbol == "function" && g.constructor === Symbol && g !== Symbol.prototype ? "symbol" : typeof g;\n })(h);\n }\n Object.defineProperty(r, "__esModule", { value: !0 }), i.d(r, "HighchartsReact", function() {\n return O;\n });\n var A = i(1), z = i.n(A), f = typeof window < "u" ? A.useLayoutEffect : A.useEffect, O = Object(A.memo)(Object(A.forwardRef)(function(h, g) {\n var v = Object(A.useRef)(), L = Object(A.useRef)(), y = Object(A.useRef)(h.constructorType), B = Object(A.useRef)(h.highcharts);\n return f(function() {\n function X() {\n var T = h.highcharts || (typeof window > "u" ? "undefined" : u(window)) === "object" && window.Highcharts, w = h.constructorType || "chart";\n T ? T[w] ? h.options ? L.current = T[w](v.current, h.options, h.callback) : console.warn(\'The "options" property was not passed.\') : console.warn(\'The "constructorType" property is incorrect or some required module is not imported.\') : console.warn(\'The "highcharts" property was not passed.\');\n }\n if (L.current) {\n if (h.allowChartUpdate !== !1)\n if (h.constructorType !== y.current || h.highcharts !== B.current)\n y.current = h.constructorType, B.current = h.highcharts, X();\n else if (!h.immutable && L.current) {\n var F;\n (F = L.current).update.apply(F, [h.options].concat(s(h.updateArgs || [!0, !0])));\n } else\n X();\n } else\n X();\n }, [h.options, h.allowChartUpdate, h.updateArgs, h.containerProps, h.highcharts, h.constructorType]), f(function() {\n return function() {\n L.current && (L.current.destroy(), L.current = null);\n };\n }, []), Object(A.useImperativeHandle)(g, function() {\n return { get chart() {\n return L.current;\n }, container: v };\n }, []), z.a.createElement("div", a({}, h.containerProps, { ref: v }));\n }));\n r.default = O;\n }, function(n, r) {\n n.exports = o;\n }]);\n });\n})(VM);\nvar tj = VM.exports;\nconst zo = /* @__PURE__ */ Q2(tj), oj = ({\n xAxis: e = {},\n yAxis: t = {},\n chart: o,\n size: n = {},\n series: r\n}) => {\n const i = (0,react__WEBPACK_IMPORTED_MODULE_0__.useRef)(null), { Highcharts: a, isRenderChart: s, defaultSetting: l } = bo();\n let p = ro();\n const d = `${p.colors.dataVisualizationMetrics.metricsBgUp}`, b = `${p.colors.dataVisualizationMetrics.metricsBgDown}`, M = `${p.colors.backgrounds.bgSuccessSecondary}`, u = `${p.colors.backgrounds.bgErrorSecondary}`, A = (0,react__WEBPACK_IMPORTED_MODULE_0__.useMemo)(() => {\n let z = { ...l };\n return {\n ...z,\n exporting: {\n enabled: !1\n // hide exporting button\n },\n chart: {\n ...n,\n ...o,\n height: (o == null ? void 0 : o.type) == "metrics" ? 97 : (o == null ? void 0 : o.type) == "metricsSmall" ? 37 : o == null ? void 0 : o.height,\n type: "area",\n // zoomType: \'x\',\n spacingBottom: 0,\n spacingTop: 4,\n spacingLeft: 0,\n spacingRight: 0\n },\n title: {\n text: "",\n align: "left"\n },\n yAxis: {\n ...t,\n title: {\n text: ""\n },\n labels: {\n style: {\n fontFamily: "Ubuntu",\n fontStyle: "normal",\n fontWeight: 300,\n fontSize: "10px",\n lineHeight: "12px",\n color: "#7F7F7F",\n width: "85px",\n whiteSpace: "normal"\n },\n staggerLines: 1,\n width: 60,\n step: 0\n },\n useHTML: !0,\n formatter: function() {\n let f = this.value, O = !0;\n return this.value >= 1e3 ? (f = Intl.NumberFormat("en", { notation: "compact" }).format(this.value), O = !1) : this.value <= -1e3 && (f = Intl.NumberFormat("en", { notation: "compact" }).format(this.value), O = !1), `

${f}

`;\n }\n },\n xAxis: {\n ...e,\n crosshair: {\n color: "#312783",\n width: 1,\n dashStyle: "Dash"\n },\n showLastLabel: !0,\n startOnTick: !1,\n endOnTick: !1,\n useHTML: !0,\n labels: {\n style: {\n fontFamily: "Ubuntu",\n fontStyle: "normal",\n fontWeight: 300,\n fontSize: "10px",\n lineHeight: "12px",\n color: "#000000",\n textAlign: "center",\n width: "70px",\n whiteSpace: "break-spaces"\n },\n // useHTML: true,\n rotation: 0,\n staggerLines: 1,\n width: 90,\n useHTML: !0,\n step: 0,\n // reserveSpace: true,\n // formatter: function () {//use formatter to break word.\n // return \'
\' + this.value + \'
\';\n // }\n formatter: function() {\n return `

${this.value}

`;\n }\n }\n },\n legend: {\n enabled: !1\n },\n plotOptions: {\n area: {\n fillColor: {\n linearGradient: {\n x1: 0,\n y1: 0,\n x2: 0,\n y2: 1\n },\n stops: [\n [\n 0,\n `${r == null ? void 0 : r.map((f) => f != null && f.status ? (f == null ? void 0 : f.status) == "up" ? `${M}` : `${u}` : `${M}`)}`\n ],\n [\n 1,\n a.color(\n `${r == null ? void 0 : r.map((f) => f != null && f.status ? (f == null ? void 0 : f.status) == "up" ? `${M}` : `${u}` : `${M}`)}`\n ).setOpacity(0).get("rgba")\n ]\n ]\n },\n marker: {\n radius: 2,\n enabled: !1\n },\n lineWidth: 1,\n states: {\n hover: {\n lineWidth: 1\n }\n },\n threshold: null\n },\n series: {\n pointPlacement: "on",\n color: `${r == null ? void 0 : r.map((f) => f.color ? f == null ? void 0 : f.color : f != null && f.status ? (f == null ? void 0 : f.status) == "up" ? `${d}` : `${b}` : `${d}`)}`,\n point: {\n events: {\n mouseOver: function() {\n let f = this;\n z.options = f, this.series.chart.xAxis[0].removePlotBand("widget-plot-band"), this.series.chart.xAxis[0].addPlotBand({\n from: this.index - 0.5,\n to: this.index + 0.5,\n color: "#F7F9FF",\n id: "widget-plot-band"\n });\n },\n mouseOut: function() {\n z.options.series.chart.xAxis[0].removePlotBand(\n "widget-plot-band"\n );\n }\n }\n }\n },\n column: {\n groupPadding: 0,\n pointPadding: 0\n }\n },\n credits: {\n enabled: !1\n },\n // tooltip: {\n // crosshairs: false,\n // shared: false,\n // enabled: false,\n // },\n tooltip: {\n crosshairs: !1,\n enabled: !1,\n outside: !1,\n backgroundColor: "transparent",\n borderColor: "transparent",\n borderRadius: 2,\n shared: !1,\n useHTML: !1,\n snap: 0,\n shadow: !1,\n formatter() {\n let f = `${this.x}`;\n this.points.forEach(\n // ${point.series.name}:\n (h) => f += `
${h.y}`\n );\n let O = this == null ? void 0 : this.y;\n return this != null && this.y && (O = GD(this == null ? void 0 : this.y), O = QD(O)), `
\n \n \n

${this.x}

\n \n \n

${O}

`;\n }\n },\n series: r\n };\n }, [r]);\n return /* @__PURE__ */ c(s0, { children: A && s && /* @__PURE__ */ c(YZ, { children: /* @__PURE__ */ c(\n zo,\n {\n highcharts: a,\n containerProps: { style: { width: "100%", height: "100%" } },\n options: A,\n ref: i\n }\n ) }) });\n}, rj = ({\n xAxis: e = {},\n yAxis: t = {},\n chart: o,\n chartReConfigCallBack: n,\n size: r = {},\n minWidth: i,\n series: a\n}) => {\n const s = (0,react__WEBPACK_IMPORTED_MODULE_0__.useRef)(null), { Highcharts: l, isRenderChart: p, defaultSetting: d } = bo();\n let b = ro();\n (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => {\n a == null || a.map((u, A) => {\n switch (A + 1) {\n case 1:\n return u.color = b.colors.dataVisualizationLegend.legendBg1;\n case 2:\n return u.color = b.colors.dataVisualizationLegend.legendBg2;\n case 3:\n return u.color = b.colors.dataVisualizationLegend.legendBg3;\n case 4:\n return u.color = b.colors.dataVisualizationLegend.legendBg4;\n case 5:\n return u.color = b.colors.dataVisualizationLegend.legendBg5;\n case 6:\n return u.color = b.colors.dataVisualizationLegend.legendBg6;\n case 7:\n return u.color = b.colors.dataVisualizationLegend.legendBg7;\n case 8:\n return u.color = b.colors.dataVisualizationLegend.legendBg8;\n default:\n return null;\n }\n });\n }, [a]);\n const M = (0,react__WEBPACK_IMPORTED_MODULE_0__.useMemo)(() => {\n var z, f;\n const A = {\n ...{ ...d },\n exporting: {\n enabled: !1\n // hide exporting button\n },\n chart: {\n type: "column",\n width: i,\n ...r,\n ...o,\n spacingBottom: (a == null ? void 0 : a.length) == 1 ? 40 : 0,\n spacingTop: 4,\n spacingLeft: 4,\n spacingRight: 4,\n marginTop: 40,\n scrollablePlotArea: {\n minWidth: i,\n scrollPositionX: 1\n }\n },\n title: {\n text: ""\n },\n subtitle: {\n text: ""\n },\n xAxis: [\n {\n categories: e.categories,\n crosshair: {\n color: "#312783",\n width: 1,\n dashStyle: "Dash"\n },\n useHTML: !0,\n labels: {\n style: {\n fontFamily: "Ubuntu",\n fontStyle: "normal",\n fontWeight: 300,\n fontSize: "10px",\n lineHeight: "12px",\n color: "#000000",\n textAlign: "center",\n width: "70px",\n whiteSpace: "break-spaces"\n },\n // useHTML: true,\n rotation: 0,\n staggerLines: 1,\n width: 90,\n useHTML: !0,\n step: 0,\n formatter: function() {\n var v;\n let O = this.value, h = !0;\n const g = (v = this == null ? void 0 : this.axis) == null ? void 0 : v.userOptions.filterType;\n return this.value >= 1e3 && g != "string" ? (O = Intl.NumberFormat("en", {\n notation: "compact"\n }).format(this.value), h = !1) : this.value <= -1e3 && (O = Intl.NumberFormat("en", {\n notation: "compact"\n }).format(this.value), h = !1), `

${O}

`;\n }\n },\n title: {\n textAlign: "right",\n rotation: 0,\n x: -50,\n text: (z = e.title) == null ? void 0 : z.text,\n align: "high",\n y: -10,\n offset: -50,\n style: {\n color: `${b.colors.textIcon.textLowemphasis}`,\n fontFamily: "Ubuntu",\n fontStyle: "normal",\n fontWeight: "400",\n fontSize: "10px",\n lineHeight: "14px",\n marginBottom: "40px"\n }\n },\n gridLineWidth: 0,\n tickInterval: 0,\n lineWidth: 0,\n ...e\n }\n ],\n yAxis: [\n {\n ...t,\n categories: t.categories,\n lineWidth: 0,\n gridLineWidth: 1,\n useHTML: !0,\n labels: {\n enabled: !0,\n formatter: function() {\n let O = this.value, h = !0;\n return this.value >= 1e3 ? (O = Intl.NumberFormat("en", {\n notation: "compact"\n }).format(this.value), h = !1) : this.value <= -1e3 && (O = Intl.NumberFormat("en", {\n notation: "compact"\n }).format(this.value), h = !1), `

${O}

`;\n }\n },\n title: {\n textAlign: "right",\n rotation: 0,\n x: -50,\n text: (f = t.title) == null ? void 0 : f.text,\n align: "high",\n y: -10,\n offset: -50,\n style: {\n color: `${b.colors.textIcon.textLowemphasis}`,\n fontFamily: "Ubuntu",\n fontStyle: "normal",\n fontWeight: "400",\n fontSize: "10px",\n lineHeight: "14px",\n marginBottom: "40px"\n }\n }\n },\n {\n min: 0,\n labels: {\n enabled: !0\n },\n visible: !1,\n opposite: !0,\n useHTML: !0,\n title: {\n align: "high",\n text: "",\n // textAlign: "center",\n rotation: 0,\n y: -12,\n // x: 20,\n offset: 16,\n style: {\n color: "#7F7F7F",\n fontFamily: "Ubuntu",\n fontStyle: "normal",\n fontWeight: "400",\n fontSize: "10px",\n lineHeight: "12px"\n }\n }\n }\n ],\n tooltip: {\n useHTML: !0,\n backgroundColor: "transparent",\n borderColor: "transparent",\n shadow: !1,\n padding: 0,\n shared: !0,\n formatter: function() {\n const O = this.points;\n let h = "";\n return O.forEach(function(g) {\n var L, y;\n let v = g.point.plotX - 400 > ((y = (L = g.series) == null ? void 0 : L.chart) == null ? void 0 : y.plotLeft);\n h += `\n \n \n
\n
${g.x}
\n
\n ●\n \n ${g.series.name}\n ${g.y}\n \n \n \n
\n
`;\n }), `\n
\n ${h}\n
`;\n },\n positioner: function(O, h, g) {\n return console.log("tooltipPosition", O, h), g.plotX - 400 > this.chart.plotLeft ? { x: g.plotX - 155, y: g.plotY + 25 } : { x: g.plotX + 65, y: g.plotY + 25 };\n }\n },\n plotOptions: {\n column: {\n pointPadding: 0.05\n // borderWidth: 0\n },\n // series: {\n // borderRadiusTopLeft: 8,\n // borderRadiusTopRight: 8\n // }\n series: {\n // pointPadding: 0, // Adjust this value to add space between individual columns\n groupPadding: 0.29,\n // Adjust this value to add space between groups of columns\n // pointWidth: series?.length == 1 ? 32 : 24,\n // pointPadding: 0.1,\n // groupPadding: 0.2,\n borderWidth: 0,\n borderRadiusTopLeft: "10%",\n borderRadiusTopRight: "10%",\n marker: {\n lineColor: null,\n states: {\n hover: {\n radius: 8,\n radiusPlus: 16,\n lineColor: "#fff"\n // lineWidth: 4\n }\n }\n }\n }\n },\n legend: {\n itemDistance: 4,\n layout: "horizontal",\n align: "center",\n verticalAlign: "bottom",\n backgroundColor: "#FFFFFF",\n shadow: !1,\n floating: !1,\n useHTML: !0,\n symbolPadding: 0,\n symbolWidth: 0.1,\n symbolHeight: 0.1,\n symbolRadius: 0,\n maxHeight: 17,\n labelFormatter: function() {\n return `

${this.name}

`;\n },\n navigation: {\n enabled: !1\n },\n enabled: a.length > 1\n },\n series: a,\n credits: {\n enabled: !1\n }\n };\n return n ? n(A) : A;\n }, [a]);\n return /* @__PURE__ */ c(s0, { children: M && p && /* @__PURE__ */ c(gs, { children: /* @__PURE__ */ c(\n zo,\n {\n highcharts: l,\n containerProps: {\n style: {\n width: "100%",\n height: "100%"\n }\n },\n options: M,\n ref: s\n }\n ) }) });\n}, nj = ({\n xAxis: e = {},\n yAxis: t = {},\n chart: o,\n size: n = {},\n series: r\n}) => {\n const i = (0,react__WEBPACK_IMPORTED_MODULE_0__.useRef)(null), { Highcharts: a, isRenderChart: s, defaultSetting: l } = bo();\n let p = ro();\n (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => {\n r == null || r.map((u, A) => {\n switch (A + 1) {\n case 1:\n let z = {\n states: {\n hover: {\n fillColor: `${p.colors.dataVisualizationLegend.legendBg1}`\n }\n }\n };\n return u.color = p.colors.dataVisualizationLegend.legendBg1, u.marker = z;\n case 2:\n let f = {\n states: {\n hover: {\n fillColor: `${p.colors.dataVisualizationLegend.legendBg2}`\n }\n }\n };\n return u.color = p.colors.dataVisualizationLegend.legendBg2, u.marker = f;\n case 3:\n let O = {\n states: {\n hover: {\n fillColor: `${p.colors.dataVisualizationLegend.legendBg3}`\n }\n }\n };\n return u.color = p.colors.dataVisualizationLegend.legendBg3, u.marker = O;\n case 4:\n let h = {\n states: {\n hover: {\n fillColor: `${p.colors.dataVisualizationLegend.legendBg4}`\n }\n }\n };\n return u.color = p.colors.dataVisualizationLegend.legendBg4, u.marker = h;\n case 5:\n let g = {\n states: {\n hover: {\n fillColor: `${p.colors.dataVisualizationLegend.legendBg5}`\n }\n }\n };\n return u.color = p.colors.dataVisualizationLegend.legendBg5, u.marker = g;\n case 6:\n let v = {\n states: {\n hover: {\n fillColor: `${p.colors.dataVisualizationLegend.legendBg6}`\n }\n }\n };\n return u.color = p.colors.dataVisualizationLegend.legendBg6, u.marker = v;\n case 7:\n let L = {\n states: {\n hover: {\n fillColor: `${p.colors.dataVisualizationLegend.legendBg7}`\n }\n }\n };\n return u.color = p.colors.dataVisualizationLegend.legendBg7, u.marker = L;\n case 8:\n let y = {\n states: {\n hover: {\n fillColor: `${p.colors.dataVisualizationLegend.legendBg8}`\n }\n }\n };\n return u.color = p.colors.dataVisualizationLegend.legendBg8, u.marker = y;\n default:\n return null;\n }\n });\n }, [r]);\n const d = (0,react__WEBPACK_IMPORTED_MODULE_0__.useMemo)(() => {\n var z, f;\n return {\n ...{ ...l },\n exporting: {\n enabled: !1\n // hide exporting button\n },\n chart: {\n type: "bubble",\n // zoomType: \'xy\',\n panning: !0,\n panKey: "shift",\n // Pressing shift key enables panning\n ...n,\n ...o,\n spacingBottom: 0,\n spacingTop: 4,\n spacingLeft: 4,\n spacingRight: 4,\n marginTop: 40,\n scrollablePlotArea: {\n // minWidth: minWidth,\n scrollPositionX: 1\n }\n },\n title: {\n text: ""\n },\n subtitle: {\n text: ""\n },\n legend: {\n layout: "horizontal",\n align: "center",\n verticalAlign: "bottom",\n backgroundColor: "#FFFFFF",\n shadow: !1,\n floating: !1,\n useHTML: !0,\n symbolPadding: 0,\n symbolWidth: 0.1,\n symbolHeight: 0.1,\n symbolRadius: 0,\n maxHeight: 17,\n labelFormatter: function() {\n return `
\n

${this.name}

`;\n },\n navigation: {\n enabled: !1\n },\n // enabled: series.length > 1 ? true : false,\n enabled: !1\n },\n xAxis: [\n {\n ...e,\n min: 50,\n max: 400,\n lineWidth: 0,\n gridLineWidth: 1,\n useHTML: !0,\n labels: {\n style: {\n fontFamily: "Ubuntu",\n fontStyle: "normal",\n fontWeight: 300,\n fontSize: "10px",\n lineHeight: "12px",\n color: "#000000",\n textAlign: "center",\n width: "70px",\n whiteSpace: "break-spaces"\n },\n // useHTML: true,\n rotation: 0,\n staggerLines: 1,\n width: 90,\n useHTML: !0,\n step: 0,\n formatter: function() {\n var v;\n let O = this.value, h = !0;\n const g = (v = this == null ? void 0 : this.axis) == null ? void 0 : v.userOptions.filterType;\n return this.value >= 1e3 && g != "string" ? (O = Intl.NumberFormat("en", {\n notation: "compact"\n }).format(this.value), h = !1) : this.value <= -1e3 && (O = Intl.NumberFormat("en", {\n notation: "compact"\n }).format(this.value), h = !1), `

${O}

`;\n }\n },\n title: {\n text: (z = e.title) == null ? void 0 : z.text,\n style: {\n color: `${p.colors.textIcon.textLowemphasis}`,\n fontFamily: "Ubuntu",\n fontStyle: "normal",\n fontWeight: "400",\n fontSize: "10px",\n lineHeight: "14px",\n marginBottom: "40px"\n }\n }\n }\n ],\n yAxis: [\n {\n ...t,\n min: 50,\n max: 400,\n lineWidth: 0,\n gridLineWidth: 1,\n title: {\n textAlign: "right",\n rotation: 0,\n x: -50,\n text: (f = t.title) == null ? void 0 : f.text,\n align: "high",\n y: -10,\n offset: -50,\n style: {\n color: `${p.colors.textIcon.textLowemphasis}`,\n fontFamily: "Ubuntu",\n fontStyle: "normal",\n fontWeight: "400",\n fontSize: "10px",\n lineHeight: "14px",\n marginBottom: "40px"\n }\n }\n }\n ],\n series: r,\n // series.map(function (ele) {\n // if (ele?.color) {\n // return null;\n // } else {\n // return {\n // ...ele,\n // color: `${ThemeColors.colors.dataVisualizationChart.chartBubbleBgDefault}`,\n // marker: {\n // states: {\n // hover: {\n // fillColor: `${ThemeColors.colors.dataVisualizationChart.chartBg1Active}`,\n // },\n // },\n // },\n // };\n // }\n // }),\n plotOptions: {\n series: {\n point: {\n events: {\n mouseOver: function() {\n this.graphic.attr({\n "stroke-dasharray": "4"\n // Set dashed outline on hover\n });\n },\n mouseOut: function() {\n this.graphic.attr({\n "stroke-dasharray": "0"\n // Remove dashed outline on mouse out\n });\n }\n }\n }\n }\n },\n tooltip: {\n // outside: false,\n // backgroundColor: \'transparent\',\n // borderColor: \'transparent\',\n // borderRadius: 2,\n useHTML: !0,\n backgroundColor: "transparent",\n borderColor: "transparent",\n shadow: !1,\n padding: 0,\n shared: !0,\n // snap: 0,\n // shadow: false,\n // style: {\n // pointerEvents: \'auto\',\n // },\n // hideDelay: 500,\n formatter: function() {\n const O = [this.point];\n let h = "";\n return O.forEach(function(g) {\n var L, y;\n let v = g.plotX - 400 > ((y = (L = g.series) == null ? void 0 : L.chart) == null ? void 0 : y.plotLeft);\n h += `\n \n \n
\n
${g.x}
\n
\n ●\n \n ${g.series.name}\n ${g.y}\n \n \n \n
\n
`;\n }), `\n
\n ${h}\n
`;\n },\n positioner: function(O, h, g) {\n return console.log("tooltipPosition", O, h), g.plotX - 400 > this.chart.plotLeft ? { x: g.plotX - 155, y: g.plotY + 25 } : { x: g.plotX + 65, y: g.plotY + 25 };\n }\n },\n credits: {\n enabled: !1\n }\n };\n }, [r]);\n return /* @__PURE__ */ c(s0, { children: d && s && /* @__PURE__ */ e1(GZ, { children: [\n /* @__PURE__ */ c(\n zo,\n {\n highcharts: a,\n containerProps: {\n style: {\n width: "100%",\n height: "100%"\n }\n },\n options: d,\n ref: i\n }\n ),\n /* @__PURE__ */ c(IM, { children: /* @__PURE__ */ e1(ZZ, { children: [\n /* @__PURE__ */ c(\n G2,\n {\n buttonType: "tertiary",\n onClick: () => {\n const u = i.current.chart, A = u.xAxis[0], z = u.yAxis[0];\n A.setExtremes(A.min + 10, A.max - 10), z.setExtremes(z.min + 10, z.max - 10);\n },\n name: "Plus",\n size: "sm"\n }\n ),\n /* @__PURE__ */ c(\n G2,\n {\n buttonType: "tertiary",\n onClick: () => {\n const u = i.current.chart, A = u.xAxis[0], z = u.yAxis[0];\n A.setExtremes(A.min - 10, A.max + 10), z.setExtremes(z.min - 10, z.max + 10);\n },\n name: "Minus",\n size: "sm"\n }\n )\n ] }) })\n ] }) });\n}, ij = ({ size: e = {}, name: t = "", series: o }) => {\n const n = (0,react__WEBPACK_IMPORTED_MODULE_0__.useRef)(null), { Highcharts: r, isRenderChart: i, defaultSetting: a } = bo(), [s, l] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)("");\n let p = ro();\n (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => {\n var b, M;\n (M = (b = o[0]) == null ? void 0 : b.data) == null || M.map((u, A) => {\n switch (u.marker = {\n symbol: "circle",\n // Display points as circles\n radius: 5\n // Adjust the radius of the circles if needed\n }, A + 1) {\n case 1:\n return u.color = p.colors.dataVisualizationLegend.legendBg1;\n case 2:\n return u.color = p.colors.dataVisualizationLegend.legendBg2;\n case 3:\n return u.color = p.colors.dataVisualizationLegend.legendBg3;\n case 4:\n return u.color = p.colors.dataVisualizationLegend.legendBg4;\n case 5:\n return u.color = p.colors.dataVisualizationLegend.legendBg5;\n case 6:\n return u.color = p.colors.dataVisualizationLegend.legendBg6;\n case 7:\n return u.color = p.colors.dataVisualizationLegend.legendBg7;\n case 8:\n return u.color = p.colors.dataVisualizationLegend.legendBg8;\n default:\n return null;\n }\n });\n }, [o]);\n const d = (0,react__WEBPACK_IMPORTED_MODULE_0__.useMemo)(() => ({\n ...a,\n exporting: {\n enabled: !1\n // hide exporting button\n },\n chart: {\n type: "variablepie",\n height: 250,\n ...e,\n style: {\n padding: 0\n },\n spacingBottom: (o == null ? void 0 : o.length) == 1 ? 40 : 0,\n spacingTop: 2,\n spacingLeft: 0,\n spacingRight: -10,\n borderColor: "#FFFF",\n borderWidth: 0,\n events: {\n load: function() {\n var u, A;\n let b = [];\n (A = (u = this.legend) == null ? void 0 : u.allItems) == null || A.map((z) => {\n b.push(Number(Number(z.percentage ?? 0).toFixed(0)));\n });\n const M = b == null ? void 0 : b.reduce(\n (z, f) => z + f,\n 0\n );\n l(`${M}%`);\n },\n render() {\n var u;\n const b = (u = n == null ? void 0 : n.current) == null ? void 0 : u.chart;\n if (!b)\n return;\n b.centerTitle && b.centerTitle && b.centerTitle.destroy(), b.centerTitle = b.renderer.text(s, 0, 0).css({\n fontFamily: `${p.fontFamily.base}`,\n fontStyle: "normal",\n fontWeight: 400,\n fontSize: "22.8px",\n lineHeight: "31.92px",\n color: `${p.colors.textIcon.textPrimary}`\n }).add();\n const M = b.centerTitle.getBBox();\n b.centerTitle.translate(\n b.plotLeft + (b.plotWidth - M.width) / 2,\n b.plotTop + (b.plotHeight + M.height) / 2 - 12 + 8\n );\n }\n }\n },\n plotOptions: {\n series: {\n borderWidth: 1,\n // borderColor: \'rgba(255, 255, 255, 0.2)\',\n dataLabels: {\n enabled: !1\n }\n },\n point: {\n events: {}\n },\n plotBorderColor: "#fff",\n plotBorderWidth: 1,\n borderColor: "#FFFF",\n borderWidth: 1\n },\n legend: {\n align: "right",\n verticalAlign: "top",\n layout: "vertical",\n x: -2,\n y: 0,\n useHTML: !0,\n symbolPadding: 4,\n symbolWidth: 0.1,\n symbolHeight: 0.1,\n symbolRadius: 0,\n maxHeight: 100,\n labelFormatter: function() {\n let b = this == null ? void 0 : this.percentage;\n return b = Number(b ?? 0).toFixed(0) + "%", `
\n
\n
\n
\n
\n
\n

${this.name}

\n
\n

${b}

\n
`;\n },\n itemHoverStyle: {\n color: "#312783",\n cursor: "pointer"\n },\n navigation: {\n enabled: !1\n }\n },\n title: {\n text: ""\n },\n tooltip: {\n outside: !1,\n backgroundColor: "transparent",\n borderColor: "transparent",\n borderRadius: 2,\n shared: !0,\n useHTML: !0,\n snap: 0,\n shadow: !1,\n formatter: function() {\n const b = this.point;\n let M = this == null ? void 0 : this.percentage;\n return M = Number(M ?? 0).toFixed(0) + "%", l(M), `

${b == null ? void 0 : b.name}\n

`;\n }\n },\n credits: {\n enabled: !1\n },\n series: [\n {\n minPointSize: 10,\n innerSize: "65%",\n zMin: 0,\n name: t,\n showInLegend: !0,\n events: {},\n borderRadius: 0,\n // colors: series[0].color,\n data: o[0].data\n }\n ]\n }), [o[0].data, s]);\n return /* @__PURE__ */ c(s0, { children: d && i && /* @__PURE__ */ c(QZ, { children: /* @__PURE__ */ c(\n zo,\n {\n highcharts: r,\n containerProps: { style: { width: "100%", height: "100%" } },\n options: d,\n ref: n\n }\n ) }) });\n}, aj = ({\n xAxis: e = {},\n yAxis: t = {},\n chart: o,\n size: n = {},\n minWidth: r,\n series: i\n}) => {\n const a = (0,react__WEBPACK_IMPORTED_MODULE_0__.useRef)(null), { Highcharts: s, isRenderChart: l, defaultSetting: p } = bo();\n let d = ro();\n (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => {\n i == null || i.map((M, u) => {\n switch (u + 1) {\n case 1:\n let A = {\n states: {\n hover: {\n fillColor: `${d.colors.dataVisualizationLegend.legendBg1}`\n }\n }\n };\n return M.color = d.colors.dataVisualizationLegend.legendBg1, M.marker = A;\n case 2:\n let z = {\n states: {\n hover: {\n fillColor: `${d.colors.dataVisualizationLegend.legendBg2}`\n }\n }\n };\n return M.color = d.colors.dataVisualizationLegend.legendBg2, M.marker = z;\n case 3:\n let f = {\n states: {\n hover: {\n fillColor: `${d.colors.dataVisualizationLegend.legendBg3}`\n }\n }\n };\n return M.color = d.colors.dataVisualizationLegend.legendBg3, M.marker = f;\n case 4:\n let O = {\n states: {\n hover: {\n fillColor: `${d.colors.dataVisualizationLegend.legendBg4}`\n }\n }\n };\n return M.color = d.colors.dataVisualizationLegend.legendBg4, M.marker = O;\n case 5:\n let h = {\n states: {\n hover: {\n fillColor: `${d.colors.dataVisualizationLegend.legendBg5}`\n }\n }\n };\n return M.color = d.colors.dataVisualizationLegend.legendBg5, M.marker = h;\n case 6:\n let g = {\n states: {\n hover: {\n fillColor: `${d.colors.dataVisualizationLegend.legendBg6}`\n }\n }\n };\n return M.color = d.colors.dataVisualizationLegend.legendBg6, M.marker = g;\n case 7:\n let v = {\n states: {\n hover: {\n fillColor: `${d.colors.dataVisualizationLegend.legendBg7}`\n }\n }\n };\n return M.color = d.colors.dataVisualizationLegend.legendBg7, M.marker = v;\n case 8:\n let L = {\n states: {\n hover: {\n fillColor: `${d.colors.dataVisualizationLegend.legendBg8}`\n }\n }\n };\n return M.color = d.colors.dataVisualizationLegend.legendBg8, M.marker = L;\n default:\n return null;\n }\n });\n }, [i]);\n const b = (0,react__WEBPACK_IMPORTED_MODULE_0__.useMemo)(() => {\n var A, z;\n return {\n ...{ ...p },\n exporting: {\n enabled: !1\n // hide exporting button\n },\n chart: {\n type: "bar",\n width: r,\n ...n,\n ...o,\n spacingBottom: (i == null ? void 0 : i.length) == 1 ? 40 : 0,\n spacingTop: 4,\n spacingLeft: 4,\n spacingRight: 4,\n marginTop: 40,\n scrollablePlotArea: {\n minWidth: r,\n scrollPositionX: 1\n }\n },\n title: {\n text: ""\n },\n subtitle: {\n text: ""\n },\n xAxis: [\n {\n categories: e.categories,\n crosshair: {\n color: "#312783",\n width: 1,\n dashStyle: "Dash"\n },\n useHTML: !0,\n labels: {\n style: {\n fontFamily: "Ubuntu",\n fontStyle: "normal",\n fontWeight: 300,\n fontSize: "10px",\n lineHeight: "12px",\n color: "#000000",\n textAlign: "center",\n width: "70px",\n whiteSpace: "break-spaces"\n },\n // useHTML: true,\n rotation: 0,\n staggerLines: 1,\n width: 90,\n useHTML: !0,\n step: 0,\n formatter: function() {\n var h;\n let f = this.value;\n const O = (h = this == null ? void 0 : this.axis) == null ? void 0 : h.userOptions.filterType;\n return this.value >= 1e3 && O != "string" ? f = Intl.NumberFormat("en", {\n notation: "compact"\n }).format(this.value) : this.value <= -1e3 && (f = Intl.NumberFormat("en", {\n notation: "compact"\n }).format(this.value)), `

${f}

`;\n }\n },\n ...e,\n title: {\n // textAlign: \'right\',\n // rotation: 0,\n // x: -50,\n text: (A = e.title) == null ? void 0 : A.text,\n // align: \'high\',\n // y: -10,\n // offset: -50,\n style: {\n color: `${d.colors.textIcon.textLowemphasis}`,\n fontFamily: "Ubuntu",\n fontStyle: "normal",\n fontWeight: "400",\n fontSize: "10px",\n lineHeight: "14px"\n }\n },\n gridLineWidth: 0,\n tickInterval: 0,\n lineWidth: 0\n }\n ],\n yAxis: [\n {\n ...t,\n // min: 0,\n categories: t.categories,\n lineWidth: 0,\n gridLineWidth: 1,\n useHTML: !0,\n labels: {\n enabled: !0,\n formatter: function() {\n let f = this.value;\n return this.value >= 1e3 ? f = Intl.NumberFormat("en", {\n notation: "compact"\n }).format(this.value) : this.value <= -1e3 && (f = Intl.NumberFormat("en", {\n notation: "compact"\n }).format(this.value)), `

${f}

`;\n }\n },\n title: {\n text: (z = t.title) == null ? void 0 : z.text,\n style: {\n color: `${d.colors.textIcon.textLowemphasis}`,\n fontFamily: "Ubuntu",\n fontStyle: "normal",\n fontWeight: "400",\n fontSize: "10px",\n lineHeight: "14px"\n }\n }\n }\n ],\n tooltip: {\n // outside: false,\n // backgroundColor: \'transparent\',\n // borderColor: \'transparent\',\n // borderRadius: 2,\n useHTML: !0,\n backgroundColor: "transparent",\n borderColor: "transparent",\n shadow: !1,\n padding: 0,\n shared: !0,\n // snap: 0,\n // shadow: false,\n // style: {\n // pointerEvents: \'auto\',\n // },\n // hideDelay: 500,\n formatter: function() {\n const f = this.points;\n let O = "";\n return f.forEach(function(h, g) {\n var L, y;\n let v = h.point.plotX - 400 > ((y = (L = h.series) == null ? void 0 : L.chart) == null ? void 0 : y.plotLeft);\n O += `\n \n \n
\n
${h.x}
\n
\n ●\n \n ${h.series.name}\n ${h.y}\n \n \n \n
\n
`;\n }), `\n
\n ${O}\n
`;\n },\n positioner: function(f, O, h) {\n return console.log("tooltipPosition", f, O), h.plotX - 400 > this.chart.plotLeft ? { x: h.plotX - 155, y: h.plotY + 25 } : { x: h.plotX + 65, y: h.plotY + 25 };\n }\n },\n plotOptions: {\n bar: {\n borderRadius: "4px",\n dataLabels: {\n enabled: !0\n },\n groupPadding: 0.1\n }\n },\n legend: {\n layout: "horizontal",\n align: "center",\n verticalAlign: "bottom",\n backgroundColor: "#FFFFFF",\n shadow: !1,\n floating: !1,\n useHTML: !0,\n symbolPadding: 0,\n symbolWidth: 0.1,\n symbolHeight: 0.1,\n symbolRadius: 0,\n maxHeight: 17,\n labelFormatter: function() {\n return `
\n \n
\n
\n
\n
\n

${this.name}

\n
`;\n },\n navigation: {\n enabled: !1\n },\n enabled: i.length > 1\n },\n series: i,\n credits: {\n enabled: !1\n }\n };\n }, [i]);\n return /* @__PURE__ */ c(s0, { children: b && l && /* @__PURE__ */ c(gs, { children: /* @__PURE__ */ c(\n zo,\n {\n highcharts: s,\n containerProps: {\n style: {\n width: "100%",\n height: "100%"\n }\n },\n options: b,\n ref: a\n }\n ) }) });\n}, sj = ({\n xAxis: e = {},\n yAxis: t = {},\n chart: o,\n size: n = {},\n minWidth: r,\n series: i\n}) => {\n const a = (0,react__WEBPACK_IMPORTED_MODULE_0__.useRef)(null), { Highcharts: s, isRenderChart: l, defaultSetting: p } = bo();\n let d = ro();\n (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => {\n i == null || i.map((M, u) => {\n switch (u + 1) {\n case 1:\n return M.color = d.colors.dataVisualizationLegend.legendBg1;\n case 2:\n return M.color = d.colors.dataVisualizationLegend.legendBg2;\n case 3:\n return M.color = d.colors.dataVisualizationLegend.legendBg3;\n case 4:\n return M.color = d.colors.dataVisualizationLegend.legendBg4;\n case 5:\n return M.color = d.colors.dataVisualizationLegend.legendBg5;\n case 6:\n return M.color = d.colors.dataVisualizationLegend.legendBg6;\n case 7:\n return M.color = d.colors.dataVisualizationLegend.legendBg7;\n case 8:\n return M.color = d.colors.dataVisualizationLegend.legendBg8;\n default:\n return null;\n }\n });\n }, [i]);\n const b = (0,react__WEBPACK_IMPORTED_MODULE_0__.useMemo)(() => {\n var A, z;\n return {\n ...{ ...p },\n exporting: {\n enabled: !1\n // hide exporting button\n },\n chart: {\n // type: \'bar\',\n width: r,\n ...n,\n ...o,\n spacingBottom: (i == null ? void 0 : i.length) == 1 ? 40 : 0,\n spacingTop: 4,\n spacingLeft: 4,\n spacingRight: 4,\n marginTop: 40,\n scrollablePlotArea: {\n minWidth: r,\n scrollPositionX: 1\n }\n },\n title: {\n text: ""\n },\n subtitle: {\n text: ""\n },\n xAxis: [\n {\n categories: e.categories,\n crosshair: {\n color: "#312783",\n width: 1,\n dashStyle: "Dash"\n },\n useHTML: !0,\n labels: {\n style: {\n fontFamily: "Ubuntu",\n fontStyle: "normal",\n fontWeight: 300,\n fontSize: "10px",\n lineHeight: "12px",\n color: "#000000",\n textAlign: "center",\n width: "70px",\n whiteSpace: "break-spaces"\n },\n // useHTML: true,\n rotation: 0,\n staggerLines: 1,\n width: 90,\n useHTML: !0,\n step: 0,\n formatter: function() {\n var h;\n let f = this.value;\n const O = (h = this == null ? void 0 : this.axis) == null ? void 0 : h.userOptions.filterType;\n return this.value >= 1e3 && O != "string" ? f = Intl.NumberFormat("en", {\n notation: "compact"\n }).format(this.value) : this.value <= -1e3 && (f = Intl.NumberFormat("en", {\n notation: "compact"\n }).format(this.value)), `

${f}

`;\n }\n },\n ...e,\n title: {\n // textAlign: \'right\',\n // rotation: 0,\n // x: -50,\n text: (A = e.title) == null ? void 0 : A.text,\n // align: \'high\',\n // y: -10,\n // offset: -50,\n style: {\n color: `${d.colors.textIcon.textLowemphasis}`,\n fontFamily: "Ubuntu",\n fontStyle: "normal",\n fontWeight: "400",\n fontSize: "10px",\n lineHeight: "14px"\n }\n },\n gridLineWidth: 0,\n tickInterval: 0,\n lineWidth: 0\n }\n ],\n yAxis: [\n {\n ...t,\n // min: 0,\n categories: t.categories,\n lineWidth: 0,\n gridLineWidth: 1,\n useHTML: !0,\n labels: {\n enabled: !0,\n formatter: function() {\n let f = this.value;\n return this.value >= 1e3 ? f = Intl.NumberFormat("en", {\n notation: "compact"\n }).format(this.value) : this.value <= -1e3 && (f = Intl.NumberFormat("en", {\n notation: "compact"\n }).format(this.value)), `

${f}

`;\n }\n },\n title: {\n text: (z = t.title) == null ? void 0 : z.text,\n style: {\n color: `${d.colors.textIcon.textLowemphasis}`,\n fontFamily: "Ubuntu",\n fontStyle: "normal",\n fontWeight: "400",\n fontSize: "10px",\n lineHeight: "14px"\n }\n }\n }\n ],\n tooltip: {\n // outside: false,\n // backgroundColor: \'transparent\',\n // borderColor: \'transparent\',\n // borderRadius: 2,\n useHTML: !0,\n backgroundColor: "transparent",\n borderColor: "transparent",\n shadow: !1,\n padding: 0,\n shared: !0,\n // snap: 0,\n // shadow: false,\n // style: {\n // pointerEvents: \'auto\',\n // },\n // hideDelay: 500,\n formatter: function() {\n const f = this.points;\n let O = "";\n return f.forEach(function(h, g) {\n var L, y;\n let v = h.point.plotX - 400 > ((y = (L = h.series) == null ? void 0 : L.chart) == null ? void 0 : y.plotLeft);\n O += `\n \n \n
\n
${h.x}
\n
\n ●\n \n ${h.series.name}\n ${h.y}\n \n \n \n
\n
`;\n }), `\n
\n ${O}\n
`;\n },\n positioner: function(f, O, h) {\n return console.log("tooltipPosition", f, O), h.plotX - 400 > this.chart.plotLeft ? { x: h.plotX - 155, y: h.plotY + 25 } : { x: h.plotX + 65, y: h.plotY + 25 };\n }\n },\n plotOptions: {\n bar: {\n borderRadius: "50%",\n dataLabels: {\n enabled: !0\n },\n groupPadding: 0.1\n }\n },\n legend: {\n layout: "horizontal",\n align: "center",\n verticalAlign: "bottom",\n backgroundColor: "#FFFFFF",\n shadow: !1,\n floating: !1,\n useHTML: !0,\n symbolPadding: 0,\n symbolWidth: 0.1,\n symbolHeight: 0.1,\n symbolRadius: 0,\n maxHeight: 17,\n labelFormatter: function() {\n return `
\n \n
\n
\n
\n
\n

${this.name}

\n
`;\n },\n navigation: {\n enabled: !1\n },\n enabled: i.length > 1\n },\n series: i,\n credits: {\n enabled: !1\n }\n };\n }, [i]);\n return /* @__PURE__ */ c(s0, { children: b && l && /* @__PURE__ */ c(gs, { children: /* @__PURE__ */ c(\n zo,\n {\n highcharts: s,\n containerProps: {\n style: {\n width: "100%",\n height: "100%"\n }\n },\n options: b,\n ref: a\n }\n ) }) });\n}, Hc = ({ type: e, ...t }) => /* @__PURE__ */ c(YD, { children: /* @__PURE__ */ e1(TM, { children: [\n e == "metrics" && /* @__PURE__ */ c(oj, { ...t }),\n e == "column" && /* @__PURE__ */ c(rj, { ...t }),\n e == "bubble" && /* @__PURE__ */ c(nj, { ...t }),\n e == "pie" && /* @__PURE__ */ c(ij, { ...t }),\n e == "bar" && /* @__PURE__ */ c(aj, { ...t }),\n e == "line" && /* @__PURE__ */ c(sj, { ...t })\n] }) });\nfunction t$({\n title: e,\n iconName: t,\n subText: o,\n percentage: n,\n chartProps: r,\n isMulti: i,\n data: a,\n variant: s\n}) {\n const [l, p] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)("BarGraph");\n return (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => {\n t && p(t);\n }, [t]), /* @__PURE__ */ c("div", { children: ((b) => {\n var M, u, A, z;\n switch (b) {\n case "metrics":\n return /* @__PURE__ */ e1(ya, { $type: b, className: "metrics", children: [\n /* @__PURE__ */ e1(Nc, { children: [\n /* @__PURE__ */ c(tr, { children: e }),\n i ? /* @__PURE__ */ c(_Z, { children: a == null ? void 0 : a.map((f) => /* @__PURE__ */ e1(KZ, { children: [\n /* @__PURE__ */ c(En, { children: f.value }),\n /* @__PURE__ */ c($Z, { children: f.text })\n ] })) }) : /* @__PURE__ */ c(HM, { children: /* @__PURE__ */ e1(jZ, { children: [\n /* @__PURE__ */ c(En, { children: (M = a[0]) == null ? void 0 : M.value }),\n /* @__PURE__ */ c(ej, { children: (u = a[0]) == null ? void 0 : u.text })\n ] }) }),\n /* @__PURE__ */ c(Ic, { children: o })\n ] }),\n /* @__PURE__ */ e1(Dc, { $status: r.series[0].status, children: [\n /* @__PURE__ */ c(\n Z1,\n {\n name: `${r.series[0].status == "up" ? "Increase" : "Decrease"}`,\n size: "xxxxs"\n }\n ),\n n\n ] }),\n /* @__PURE__ */ c(Tc, { children: /* @__PURE__ */ c(Hc, { type: "metrics", ...r }) })\n ] });\n case "metricsNumberOnly":\n return /* @__PURE__ */ c("div", { children: /* @__PURE__ */ c(ya, { $type: b, className: "metricsNumberOnly", children: /* @__PURE__ */ e1(Nc, { children: [\n /* @__PURE__ */ e1(JZ, { children: [\n /* @__PURE__ */ c(DM, { children: /* @__PURE__ */ c(Z1, { name: l, size: "xxxs" }) }),\n /* @__PURE__ */ c(tr, { children: e })\n ] }),\n /* @__PURE__ */ c(En, { children: (A = a[0]) == null ? void 0 : A.value })\n ] }) }) });\n case "metricsSmall":\n return /* @__PURE__ */ e1(ya, { $type: b, className: "metricsSmall", children: [\n /* @__PURE__ */ c(tr, { children: e }),\n /* @__PURE__ */ c(En, { children: (z = a[0]) == null ? void 0 : z.value }),\n /* @__PURE__ */ e1(Dc, { $status: r.series[0].status, children: [\n /* @__PURE__ */ c(\n Z1,\n {\n name: `${r.series[0].status == "up" ? "Increase" : "Decrease"}`,\n size: "xxxxs"\n }\n ),\n n\n ] }),\n /* @__PURE__ */ c(Ic, { children: o }),\n /* @__PURE__ */ c(Tc, { children: /* @__PURE__ */ c(Hc, { type: "metrics", ...r }) })\n ] });\n default:\n return /* @__PURE__ */ c(s0, {});\n }\n })(s) });\n}\n(styled_components__WEBPACK_IMPORTED_MODULE_1___default().div)`\n width: 1000px;\n`;\n(styled_components__WEBPACK_IMPORTED_MODULE_1___default().div)`\n background-color: ${({ theme: e }) => e.colors.topBar.topBarBgPrimary};\n`;\nconst cj = (styled_components__WEBPACK_IMPORTED_MODULE_1___default().div)`\n .dropdown.dropdown-submenu {\n position: absolute;\n left: 100%;\n top: 0px;\n }\n`, lj = styled_components__WEBPACK_IMPORTED_MODULE_1___default().ul(() => (0,styled_components__WEBPACK_IMPORTED_MODULE_1__.css)`\n display: flex;\n gap: 8px;\n list-style: none;\n padding-left: 0;\n margin: 0;\n align-items: center;\n `), pj = styled_components__WEBPACK_IMPORTED_MODULE_1___default().li(\n ({ theme: { colors: e, transitions: t }, $isActive: o }) => (0,styled_components__WEBPACK_IMPORTED_MODULE_1__.css)`\n position: relative;\n &.inner {\n ${Wr} {\n border-radius: 0px;\n &:hover {\n background: ${e.backgrounds.bgHoverPrimary};\n transition: ${t.base};\n }\n }\n ${Cs} {\n border-radius: 0px;\n }\n ${o && (0,styled_components__WEBPACK_IMPORTED_MODULE_1__.css)`\n background: ${e.backgrounds.bgSelected};\n `}\n &:last-child {\n margin-bottom: 0;\n }\n }\n `\n), Cs = styled_components__WEBPACK_IMPORTED_MODULE_1___default().div(\n ({\n theme: {\n colors: e,\n typography: t,\n transitions: o,\n spacings: n,\n lineHeight: r,\n fontWeight: i\n },\n $isActive: a,\n $mode: s\n }) => (0,styled_components__WEBPACK_IMPORTED_MODULE_1__.css)`\n text-decoration: none;\n cursor: pointer;\n font-size: ${t.t12};\n color: ${e.topBar.topBarTextPrimary};\n font-weight: ${i.medium};\n padding: ${n.sp6} ${n.sp8};\n line-height: ${r.lh20};\n transition: ${o.base};\n ${a && s == "blueLight" && (0,styled_components__WEBPACK_IMPORTED_MODULE_1__.css)`\n background: rgba(\n ${q2(e.backgrounds.bgTransparencyPressed)},\n 0.08\n );\n `}\n ${a && s == "blueDark" && (0,styled_components__WEBPACK_IMPORTED_MODULE_1__.css)`\n background: ${e.backgrounds.bgTransparencyPressed};\n `}\n ${!a && (0,styled_components__WEBPACK_IMPORTED_MODULE_1__.css)`\n background: \'transparent\';\n `}\n border-radius: 4px;\n &:hover {\n ${s == "blueLight" && (0,styled_components__WEBPACK_IMPORTED_MODULE_1__.css)`\n background: rgba(\n ${q2(e.backgrounds.bgTransparencyHover)},\n 0.04\n );\n `}\n ${s == "blueDark" && (0,styled_components__WEBPACK_IMPORTED_MODULE_1__.css)`\n background: ${e.backgrounds.bgTransparencyHover};\n `} \n \n \n transition: ${o.base};\n }\n &:active {\n ${s == "blueLight" && (0,styled_components__WEBPACK_IMPORTED_MODULE_1__.css)`\n background: rgba(\n ${q2(e.backgrounds.bgTransparencyHover)},\n 0.08\n );\n `}\n ${s == "blueDark" && (0,styled_components__WEBPACK_IMPORTED_MODULE_1__.css)`\n background: ${e.backgrounds.bgTransparencyHover};\n `}\n }\n `\n), Wr = styled_components__WEBPACK_IMPORTED_MODULE_1___default().div(\n ({\n theme: {\n colors: e,\n typography: t,\n borderRadius: o,\n transitions: n,\n spacings: r,\n fontWeight: i,\n lineHeight: a\n },\n $mode: s\n }) => (0,styled_components__WEBPACK_IMPORTED_MODULE_1__.css)`\n text-decoration: none;\n font-size: ${t.t12};\n color: ${e.topBar.topBarTextPrimary};\n font-weight: ${i.medium};\n line-height: ${a.lh20};\n padding: ${r.sp6} ${r.sp8};\n cursor: pointer;\n display: flex;\n justify-content: space-between;\n align-items: center;\n border-radius: ${o.base};\n transition: ${n.base};\n &:hover {\n ${s == "blueLight" && (0,styled_components__WEBPACK_IMPORTED_MODULE_1__.css)`\n background: rgba(\n ${q2(e.backgrounds.bgTransparencyHover)},\n 0.04\n );\n `}\n ${s == "blueDark" && (0,styled_components__WEBPACK_IMPORTED_MODULE_1__.css)`\n background: ${e.backgrounds.bgTransparencyHover};\n `} \n transition: ${n.base};\n }\n &:active {\n ${s == "blueLight" && (0,styled_components__WEBPACK_IMPORTED_MODULE_1__.css)`\n background: rgba(\n ${q2(e.backgrounds.bgTransparencyPressed)},\n 0.08\n );\n `}\n ${s == "blueDark" && (0,styled_components__WEBPACK_IMPORTED_MODULE_1__.css)`\n background: ${e.backgrounds.bgTransparencyPressed};\n `}\n }\n &:not(:hover) {\n &[aria-expanded=\'true\'] {\n ${s == "blueLight" && (0,styled_components__WEBPACK_IMPORTED_MODULE_1__.css)`\n background: rgba(\n ${q2(e.backgrounds.bgTransparencyPressed)},\n 0.08\n );\n `}\n ${s == "blueDark" && (0,styled_components__WEBPACK_IMPORTED_MODULE_1__.css)`\n background: ${e.backgrounds.bgTransparencyPressed};\n `}\n }\n }\n `\n), I4 = styled_components__WEBPACK_IMPORTED_MODULE_1___default().div(\n ({ theme: { colors: e, typography: t, fontWeight: o } }) => (0,styled_components__WEBPACK_IMPORTED_MODULE_1__.css)`\n color: ${e.topBar.topBarTextPrimary};\n font-size: ${t.t12};\n font-weight: ${o.medium};\n margin-right: 8px;\n `\n), dj = styled_components__WEBPACK_IMPORTED_MODULE_1___default().ul(\n ({\n theme: {\n colors: e,\n typography: t,\n borderRadius: o,\n spacings: n,\n fontWeight: r,\n cubicBezier: i,\n animations: a,\n shadows: s,\n lineHeight: l,\n transitions: p\n }\n }) => (0,styled_components__WEBPACK_IMPORTED_MODULE_1__.css)`\n animation-duration: 0.3s;\n animation-timing-function: ${i};\n animation-fill-mode: forwards;\n animation-name: ${a.fadeIn};\n\n position: absolute;\n right: auto;\n left: 0;\n top: 36px;\n box-shadow: ${s.sm};\n z-index: 9999;\n min-width: 224px;\n padding: 8px;\n list-style: none;\n background-color: ${e.backgrounds.bgPrimary};\n border-radius: ${o.base};\n display: none;\n border: 1px solid ${e.border.borderTertiary};\n ${Cs} {\n font-size: ${t.t12};\n color: ${e.textIcon.textPrimary};\n font-weight: ${r.light};\n padding: ${n.sp2} ${n.sp8};\n line-height: ${l.lh20};\n &:hover {\n background: ${e.backgrounds.bgHoverPrimary};\n transition: ${p.base};\n }\n &:active {\n background: ${e.backgrounds.bgSelected};\n }\n }\n ${Wr} {\n .icon-system {\n color: ${e.textIcon.textPrimary};\n }\n font-size: ${t.t12};\n color: ${e.textIcon.textPrimary};\n font-weight: ${r.light};\n line-height: ${l.lh20};\n padding: ${n.sp2} ${n.sp8};\n }\n ${Wr} > div {\n color: ${e.textIcon.textPrimary};\n }\n ${I4} {\n font-size: ${t.t12};\n font-weight: ${r.light};\n color: ${e.grey};\n }\n\n &.show {\n display: block;\n }\n `\n);\nstyled_components__WEBPACK_IMPORTED_MODULE_1___default().div(({ theme: { colors: e, spacings: t } }) => (0,styled_components__WEBPACK_IMPORTED_MODULE_1__.css)`\n background: ${e.paua};\n padding: ${t.sp12};\n display: flex;\n justify-content: space-between;\n align-items: center;\n `);\nstyled_components__WEBPACK_IMPORTED_MODULE_1___default().div(\n ({ theme: { colors: e }, $mode: t }) => (0,styled_components__WEBPACK_IMPORTED_MODULE_1__.css)`\n display: flex;\n justify-content: flex-start;\n align-items: center;\n gap: 2px;\n ${t == "blueLight" && (0,styled_components__WEBPACK_IMPORTED_MODULE_1__.css)`\n border-right: 1px solid\n rgba(${q2(e.border.borderTransparent)}, 0.08);\n `}\n ${t == "blueDark" && (0,styled_components__WEBPACK_IMPORTED_MODULE_1__.css)`\n border-right: 1px solid ${e.border.borderTransparent};\n `}\n \n max-height: 24px;\n box-sizing: border-box;\n `\n);\nstyled_components__WEBPACK_IMPORTED_MODULE_1___default().div(\n ({ theme: { colors: e, typography: t, spacings: o } }) => (0,styled_components__WEBPACK_IMPORTED_MODULE_1__.css)`\n font-size: ${t.t12};\n color: ${e.white};\n text-transform: uppercase;\n padding: 0 ${o.sp12};\n `\n);\nconst PM = ({\n items: e,\n depthLevel: t,\n open: o,\n onNavMenuClick: n,\n inner: r,\n $mode: i\n}) => {\n const [a, s] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(o), [l, p] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(!1), d = (0,react__WEBPACK_IMPORTED_MODULE_0__.useRef)(null);\n return (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => {\n const A = (z) => {\n d.current && !d.current.contains(z.target) && (p(!1), s(!1));\n };\n return document.addEventListener("mousedown", A), () => {\n document.removeEventListener("mousedown", A);\n };\n }, []), /* @__PURE__ */ c(\n pj,\n {\n className: `menu-items ${l ? "hovered" : ""} ${r ? "inner" : ""}`,\n ref: d,\n onMouseEnter: () => {\n p(!0);\n },\n onMouseLeave: () => {\n p(!1);\n },\n onClick: () => {\n s((A) => !A);\n },\n $isActive: e.isActive,\n children: e.submenu ? /* @__PURE__ */ e1(s0, { children: [\n /* @__PURE__ */ e1(\n Wr,\n {\n "aria-haspopup": "menu",\n $mode: i,\n "aria-expanded": a || l || e.isActive ? "true" : "false",\n children: [\n /* @__PURE__ */ c(I4, { children: e.title }),\n t > 0 ? /* @__PURE__ */ c(Z1, { name: "ChevronRight", color: "#fff", size: "xxs" }) : /* @__PURE__ */ c(Z1, { name: "ChevronDownDropdown", color: "#fff", size: "xxxxs" })\n ]\n }\n ),\n /* @__PURE__ */ c(\n bj,\n {\n depthLevel: t,\n submenus: e.submenu,\n open: t > 0 ? l : a,\n onNavMenuClick: n,\n inner: !0\n }\n )\n ] }) : /* @__PURE__ */ c(\n Cs,\n {\n $isActive: e.isActive,\n onClick: () => n && e.link && n(e.link),\n $mode: i,\n children: e.title\n }\n )\n }\n );\n}, bj = ({\n submenus: e,\n depthLevel: t,\n open: o,\n inner: n,\n onNavMenuClick: r\n}) => {\n t = t + 1;\n const i = t > 1 ? "dropdown-submenu" : "";\n return /* @__PURE__ */ c(dj, { className: `dropdown ${i} ${o ? "show" : ""}`, children: e.map((a, s) => /* @__PURE__ */ c(\n PM,\n {\n items: a,\n depthLevel: t,\n open: o,\n onNavMenuClick: r,\n inner: n\n },\n s\n )) });\n}, Mj = ({ menus: e, onNavMenuClick: t, $mode: o }) => /* @__PURE__ */ c(cj, { children: /* @__PURE__ */ c(lj, { children: e.map((n, r) => /* @__PURE__ */ c(\n PM,\n {\n items: n,\n depthLevel: 0,\n open: !1,\n onNavMenuClick: t,\n $mode: o\n },\n r\n)) }) }), Aj = styled_components__WEBPACK_IMPORTED_MODULE_1___default().div(\n ({ theme: { colors: e, cubicBezier: t, transitions: o }, $isCollapsed: n }) => (0,styled_components__WEBPACK_IMPORTED_MODULE_1__.css)`\n max-width: ${n ? "245px" : "24px"};\n min-width: ${n ? "245px" : "24px"};\n height: calc(100% - 48px);\n background: ${e.backgrounds.bgPrimary};\n transition: max-width 0.3s ${t.base};\n transition: min-width 0.3s ${t.base};\n transition: ${o.base};\n overflow: hidden;\n position: absolute;\n right: 0px;\n bottom: 0;\n z-index: 9;\n border-left: 1px solid ${e.border.borderTertiary};\n box-sizing: border-box;\n box-shadow: 0px 16px 24px 0px rgba(49, 39, 131, 0.05);\n ${!n && (0,styled_components__WEBPACK_IMPORTED_MODULE_1__.css)`\n transition: ${o.base};\n &:hover {\n background: ${e.backgrounds.bgHoverPrimary};\n transition: ${o.base};\n }\n `}\n `\n), uj = styled_components__WEBPACK_IMPORTED_MODULE_1___default().h1(\n ({\n theme: { colors: e, cubicBezier: t, typography: o, fontWeight: n },\n $isCollapsed: r\n }) => (0,styled_components__WEBPACK_IMPORTED_MODULE_1__.css)`\n display: ${r ? "none" : "block"};\n white-space: nowrap;\n transform: rotate(90deg);\n cursor: pointer;\n margin-top: 20px;\n transition: transform 0.3s ${t.base};\n font-size: ${o.t12};\n font-weight: ${n.regular};\n color: ${e.textIcon.textPrimary};\n `\n), zj = styled_components__WEBPACK_IMPORTED_MODULE_1___default().h1(\n ({\n theme: { colors: e, cubicBezier: t, typography: o, fontWeight: n },\n $isCollapsed: r\n }) => (0,styled_components__WEBPACK_IMPORTED_MODULE_1__.css)`\n display: ${r ? "block" : "none"};\n transition: transform 0.3s ${t.base};\n font-size: ${o.t12};\n font-weight: ${n.regular};\n color: ${e.textIcon.textPrimary};\n white-space: nowrap;\n margin: 0;\n `\n), hj = styled_components__WEBPACK_IMPORTED_MODULE_1___default().div(\n ({ theme: { cubicBezier: e }, $isCollapsed: t }) => (0,styled_components__WEBPACK_IMPORTED_MODULE_1__.css)`\n padding-top: 14px;\n display: flex;\n justify-content: center;\n align-items: center;\n transition: transform 0.3s ${e.base};\n box-sizing: border-box;\n ${t && (0,styled_components__WEBPACK_IMPORTED_MODULE_1__.css)`\n padding: 14px 8px;\n justify-content: space-between;\n transition: transform 0.3s ${e.base};\n `}\n `\n), Oj = styled_components__WEBPACK_IMPORTED_MODULE_1___default().div(\n ({ theme: { colors: e, cubicBezier: t, spacings: o }, $isCollapsed: n }) => (0,styled_components__WEBPACK_IMPORTED_MODULE_1__.css)`\n transform-origin: center;\n transform: rotate(${n ? "180deg" : "0"});\n transition: transform 0.3s ${t.base};\n cursor: pointer;\n max-width: 18px;\n max-height: 18px;\n min-width: 18px;\n min-height: 18px;\n display: flex;\n justify-content: center;\n align-items: center;\n border: none;\n color: ${e.textIcon.textPrimary};\n ${n && (0,styled_components__WEBPACK_IMPORTED_MODULE_1__.css)`\n background: ${e.backgrounds.bgPrimary};\n border: 1px solid ${e.border.borderTertiary};\n border-radius: 50%;\n \n `}\n `\n);\n(styled_components__WEBPACK_IMPORTED_MODULE_1___default().div)`\n margin: 0 -10px;\n`;\nconst fj = styled_components__WEBPACK_IMPORTED_MODULE_1___default().div(\n ({ $isCollapsed: e }) => (0,styled_components__WEBPACK_IMPORTED_MODULE_1__.css)`\n display: block;\n height: 100%;\n ${!e && (0,styled_components__WEBPACK_IMPORTED_MODULE_1__.css)`\n display: none;\n `}\n `\n);\n(styled_components__WEBPACK_IMPORTED_MODULE_1___default().div)`\n width: ${(e) => (e.isExample, "96vw")};\n background-color: ${({ theme: { colors: e } }) => e.white};\n`;\nstyled_components__WEBPACK_IMPORTED_MODULE_1___default().div(\n ({ theme: { colors: e }, isExample: t }) => (0,styled_components__WEBPACK_IMPORTED_MODULE_1__.css)`\n display: flex;\n justify-content: flex-start;\n border: 1px solid ${e.border.borderPrimary};\n position: relative;\n height: ${t ? "auto" : "93vh"};\n max-width: 97vw;\n background: ${e.backgrounds.bgSecondary};\n .action-bar-container {\n padding: 0 8px;\n }\n `\n);\nstyled_components__WEBPACK_IMPORTED_MODULE_1___default().div(\n ({ theme: { colors: e } }) => (0,styled_components__WEBPACK_IMPORTED_MODULE_1__.css)`\n background-color: ${e.white};\n `\n);\n(styled_components__WEBPACK_IMPORTED_MODULE_1___default().div)`\n flex-grow: 1;\n height: 100%;\n overflow: hidden;\n margin-right: 24px;\n`;\nstyled_components__WEBPACK_IMPORTED_MODULE_1___default().div(\n ({ theme: { colors: e } }) => (0,styled_components__WEBPACK_IMPORTED_MODULE_1__.css)`\n padding: 0 10px;\n color:${e.textIcon.textPrimary};\n `\n);\nconst o$ = ({ children: e, title: t }) => {\n const [o, n] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(!1), r = () => {\n n(!o);\n };\n return /* @__PURE__ */ e1(Aj, { $isCollapsed: o, children: [\n /* @__PURE__ */ e1(hj, { $isCollapsed: o, children: [\n /* @__PURE__ */ c(zj, { $isCollapsed: o, children: t }),\n /* @__PURE__ */ c(Oj, { $isCollapsed: o, onClick: r, children: /* @__PURE__ */ c(Z1, { name: "ChevronLeftThick", size: "xxxxs" }) })\n ] }),\n /* @__PURE__ */ c(uj, { $isCollapsed: o, onClick: r, children: t }),\n /* @__PURE__ */ c(fj, { $isCollapsed: o, children: e })\n ] });\n};\n(styled_components__WEBPACK_IMPORTED_MODULE_1___default().div)`\n width: 1000px;\n`;\nconst gj = styled_components__WEBPACK_IMPORTED_MODULE_1___default().div(\n ({ theme: { colors: e, spacings: t }, hasTabs: o }) => (0,styled_components__WEBPACK_IMPORTED_MODULE_1__.css)`\n width: 100%;\n background-color: ${e.topBar.topBarBgSecondary};\n padding: ${o ? `${t.sp4} ${t.sp12} 0 ${t.sp12}` : `${t.sp4} ${t.sp12} ${t.sp6} ${t.sp12}`};\n .page-back {\n padding: 0;\n min-width: auto;\n outline: 2px solid transparent;\n &:hover {\n background-color: ${e.backgrounds.bgHoverPrimary};\n }\n &:focus {\n background-color: ${e.backgrounds.bgHoverPrimary};\n .icon-system svg path {\n fill: ${e.textIcon.textMediumemphasis};\n }\n }\n &:focus {\n box-shadow: none !important;\n }\n\n &:focus-visible {\n outline: 2px solid ${e.border.borderFocused};\n }\n }\n `\n), Cj = styled_components__WEBPACK_IMPORTED_MODULE_1___default().h1(\n ({ theme: { colors: e, typography: t, fontWeight: o, lineHeight: n, fontFamily: r } }) => (0,styled_components__WEBPACK_IMPORTED_MODULE_1__.css)`\n font-family: ${r.tertiary};\n font-size: ${t.t20};\n color: ${e.textIcon.textPrimary};\n font-weight: ${o.medium};\n line-height: ${n.lh28};\n margin: 0 0 4px 0;\n `\n), mj = styled_components__WEBPACK_IMPORTED_MODULE_1___default().h1(\n ({ theme: { colors: e, typography: t, fontWeight: o } }) => (0,styled_components__WEBPACK_IMPORTED_MODULE_1__.css)`\n font-size: ${t.t14};\n color: ${e.textIcon.textMediumemphasis};\n font-weight: ${o.regular};\n margin: 0;\n `\n), Lj = (styled_components__WEBPACK_IMPORTED_MODULE_1___default().div)`\n display: flex;\n justify-content: flex-start;\n align-items: center;\n gap: 8px;\n`, vj = styled_components__WEBPACK_IMPORTED_MODULE_1___default().div(({ theme: { colors: e } }) => (0,styled_components__WEBPACK_IMPORTED_MODULE_1__.css)`\n display: flex;\n justify-content: flex-start;\n align-items: baseline;\n gap: 4px;\n .icon-system {\n padding: 6px 5px !important;\n display: flex;\n svg {\n width: 12px;\n path {\n fill: ${e.textIcon.textMediumemphasis};\n }\n }\n }\n `), qj = (styled_components__WEBPACK_IMPORTED_MODULE_1___default().div)`\n display: flex;\n justify-content: space-between;\n align-items: flex-start;\n gap: 8px;\n margin-top: 8px;\n`, yj = (styled_components__WEBPACK_IMPORTED_MODULE_1___default().div)``, wj = (styled_components__WEBPACK_IMPORTED_MODULE_1___default().div)`\n display: flex;\n justify-content: flex-start;\n align-items: flex-start;\n gap: 8px;\n`, xj = (styled_components__WEBPACK_IMPORTED_MODULE_1___default().div)`\n margin-top: 6px;\n`, Wj = styled_components__WEBPACK_IMPORTED_MODULE_1___default().div(({ theme: { colors: e } }) => (0,styled_components__WEBPACK_IMPORTED_MODULE_1__.css)`\n width: 1px;\n height: 32px;\n background-color: ${e.border.borderTertiary};\n `), Rj = (styled_components__WEBPACK_IMPORTED_MODULE_1___default().div)``, FM = styled_components__WEBPACK_IMPORTED_MODULE_1___default().div(\n ({\n theme: {\n borderRadius: e,\n lineHeight: t,\n typography: o,\n colors: n,\n shadows: r,\n spacings: i,\n GLOBAL_ITEM_HEIGHT_CONDENSED: a\n }\n }) => (0,styled_components__WEBPACK_IMPORTED_MODULE_1__.css)`\n display: flex;\n\n padding: 0 ${i.sp4};\n border-radius: ${e.base};\n font-size: ${o.t14};\n line-height: ${t.lh22};\n overflow: hidden;\n box-sizing: border-box;\n height: ${a};\n ${V3} {\n &[aria-disabled=\'true\'] {\n color: ${n.textIcon.textDisabled} !important;\n }\n }\n ${V3} {\n color: ${n.textIcon.textPrimary};\n padding: 0;\n\n &:not(:disabled) {\n &:hover {\n background-color: ${n.backgrounds.bgHoverPrimary};\n }\n\n &:active {\n background-color: ${n.actionButton.actionButtonBgPressedButton};\n border: none;\n }\n }\n\n &:disabled {\n color: ${n.gainsboro};\n }\n }\n `\n), Bj = (e) => {\n const {\n onPrevClick: t,\n onNextClick: o,\n isDisabledPrev: n,\n isDisabledNext: r,\n ...i\n } = e, a = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)(() => {\n !n && t && t();\n }, [n, t]), s = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)(() => {\n !r && o && o();\n }, [r, o]);\n return /* @__PURE__ */ e1(FM, { ...i, children: [\n /* @__PURE__ */ c(\n G2,\n {\n buttonType: "link",\n isDisabled: n,\n size: "sm",\n name: "ChevronLeft",\n onClick: a\n }\n ),\n /* @__PURE__ */ c(\n G2,\n {\n buttonType: "link",\n isDisabled: r,\n size: "sm",\n name: "ChevronRight",\n onClick: s\n }\n )\n ] });\n}, Sj = (e) => {\n var o;\n const t = ((o = e[0]) == null ? void 0 : o.previousElementSibling) || null;\n return t instanceof HTMLElement, t;\n}, Ej = (e) => {\n var o;\n const t = ((o = e[e.length - 1]) == null ? void 0 : o.nextElementSibling) || null;\n return t instanceof HTMLElement ? t : null;\n}, kj = (e) => {\n const [t, o] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(null), [n, r] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(null);\n (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => {\n const l = e.current;\n if (!l)\n return;\n const p = () => {\n const d = l.getBoundingClientRect(), M = Array.from(l.children).filter((u) => {\n const A = u.getBoundingClientRect();\n return A.left >= d.left && Math.floor(A.right) <= Math.ceil(d.right);\n });\n M.length > 0 && (o(Sj(M)), r(Ej(M)));\n };\n return p(), l.addEventListener("scroll", p), () => {\n l.removeEventListener("scroll", p);\n };\n }, [e]);\n const i = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)(\n (l, p = !1) => {\n const d = e.current;\n if (!d || !l)\n return;\n const b = Number(d.clientWidth * 2 / 3), M = d.scrollLeft + (p ? -b : b);\n d.scroll({\n left: M,\n behavior: "smooth"\n });\n },\n [e]\n ), a = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)(\n () => i(t, !0),\n [i, t]\n ), s = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)(\n () => i(n),\n [i, n]\n );\n return {\n hasTabsOnLeft: t !== null,\n hasTabsOnRight: n !== null,\n scrollLeft: a,\n scrollRight: s\n };\n}, Nj = (styled_components__WEBPACK_IMPORTED_MODULE_1___default().div)`\n display: flex;\n\n ${FM} {\n flex: 0 0 auto;\n }\n`, Tj = (styled_components__WEBPACK_IMPORTED_MODULE_1___default().div)`\n display: flex;\n gap: ${(e) => e.isTableTab ? 0 : "0px"};\n align-items: center;\n overflow-x: scroll;\n scroll-snap-type: x mandatory;\n -ms-overflow-style: none;\n scrollbar-width: none;\n width: 100%;\n\n &::-webkit-scrollbar {\n display: none;\n }\n`, Vc = styled_components__WEBPACK_IMPORTED_MODULE_1___default().div(\n ({ theme: { colors: e } }) => (0,styled_components__WEBPACK_IMPORTED_MODULE_1__.css)`\n position: relative;\n\n &:after {\n content: \'\';\n position: absolute;\n bottom: 0;\n left: 0;\n width: 100%;\n height: 0.5px;\n background-color: ${e.tab.tabBorder};\n }\n `\n), Ij = (e, t) => {\n const {\n tabItems: o = [],\n activeTab: n = null,\n onChange: r,\n customTab: i,\n isZIndexReverse: a,\n isTableTab: s\n } = e, l = (0,react__WEBPACK_IMPORTED_MODULE_0__.useRef)(null), p = () => o.map((A, z) => {\n const f = () => r(A), O = (A == null ? void 0 : A.children) === (n == null ? void 0 : n.children);\n return a && (A.style = {\n ...A.style,\n zIndex: o.length - z\n }), i ? i({\n ...A,\n isActive: O,\n key: (A == null ? void 0 : A.children) + (O ? "-selected" : "-not-selected") || z,\n onClick: f\n }) : /* @__PURE__ */ c(Vc, { children: /* @__PURE__ */ (0,react__WEBPACK_IMPORTED_MODULE_0__.createElement)(\n M6,\n {\n ...A,\n isActive: O,\n key: (A == null ? void 0 : A.children) + (O ? "-selected" : "-not-selected") || z,\n onClick: f\n }\n ) });\n }), {\n hasTabsOnLeft: d,\n hasTabsOnRight: b,\n scrollRight: M,\n scrollLeft: u\n } = kj(l);\n return /* @__PURE__ */ c(Vc, { children: /* @__PURE__ */ e1(Nj, { ref: t, children: [\n /* @__PURE__ */ c(Tj, { ref: l, isTableTab: s, children: p() }),\n (d || b) && /* @__PURE__ */ c(\n Bj,\n {\n onPrevClick: u,\n onNextClick: M,\n isDisabledPrev: !d,\n isDisabledNext: !b\n }\n )\n ] }) });\n}, XM = (0,react__WEBPACK_IMPORTED_MODULE_0__.forwardRef)(Ij), r$ = ({\n breadcrumbData: e,\n pageTitle: t,\n pageSubTitle: o,\n actionData: n,\n handleBack: r,\n tabItemsData: i,\n activeTabItem: a,\n onTabsChange: s,\n riskIndicatorType: l,\n riskIndicatorChildren: p,\n riskIndicatorStyle: d,\n statusIndicatorType: b,\n statusIndicatorChildren: M,\n statusIndicatorStyle: u\n}) => /* @__PURE__ */ e1(\n gj,\n {\n hasTabs: !!(i && i.length > 0),\n children: [\n e && /* @__PURE__ */ c(aH, { itemsList: e }),\n /* @__PURE__ */ e1(qj, { children: [\n /* @__PURE__ */ c(yj, { children: /* @__PURE__ */ e1(vj, { children: [\n r && /* @__PURE__ */ c(\n G2,\n {\n className: "page-back",\n name: "ChevronLeft",\n size: "sm",\n buttonType: "link",\n onClick: r\n }\n ),\n /* @__PURE__ */ e1("div", { children: [\n /* @__PURE__ */ c(Cj, { children: t }),\n /* @__PURE__ */ e1(Lj, { children: [\n o && /* @__PURE__ */ c(mj, { children: o }),\n l && /* @__PURE__ */ c(\n o5,\n {\n type: l,\n children: p,\n style: d\n }\n ),\n b && /* @__PURE__ */ c(\n m4,\n {\n type: b,\n children: M,\n style: u\n }\n )\n ] })\n ] })\n ] }) }),\n /* @__PURE__ */ e1(wj, { children: [\n /* @__PURE__ */ c(Rj, { id: "right-side-action-controls" }),\n n && /* @__PURE__ */ c(s0, { children: n.map((A, z) => /* @__PURE__ */ e1((react__WEBPACK_IMPORTED_MODULE_0___default().Fragment), { children: [\n A.component === "ButtonIcon" ? /* @__PURE__ */ c(\n X6,\n {\n buttonType: A.buttonType,\n $iconLeft: A.iconLeft,\n children: A.text,\n onClick: A.handleClick,\n size: "sm",\n isDisabled: A.isDisabled\n }\n ) : /* @__PURE__ */ c(\n G2,\n {\n buttonType: A.buttonType,\n name: A.iconLeft,\n onClick: A.handleClick,\n size: "sm",\n isDisabled: A.isDisabled\n }\n ),\n A.hasDivider && /* @__PURE__ */ c(Wj, {})\n ] }, z)) })\n ] })\n ] }),\n i && /* @__PURE__ */ c(xj, { children: /* @__PURE__ */ c(\n XM,\n {\n tabItems: i,\n activeTab: a,\n onChange: s\n }\n ) })\n ]\n }\n);\nfunction j2() {\n return (j2 = Object.assign || function(e) {\n for (var t = 1; t < arguments.length; t++) {\n var o = arguments[t];\n for (var n in o)\n Object.prototype.hasOwnProperty.call(o, n) && (e[n] = o[n]);\n }\n return e;\n }).apply(this, arguments);\n}\nvar Dj = function() {\n};\nfunction UM(e, t) {\n return Math.random() * (t - e + 1) + e;\n}\nfunction Pc(e, t) {\n return Math.floor(UM(e, t));\n}\nvar Hj = (0,react__WEBPACK_IMPORTED_MODULE_0__.forwardRef)(function(e, t) {\n var o = e.progress, n = e.height, r = n === void 0 ? 2 : n, i = e.className, a = i === void 0 ? "" : i, s = e.color, l = s === void 0 ? "red" : s, p = e.background, d = p === void 0 ? "transparent" : p, b = e.onLoaderFinished, M = e.transitionTime, u = M === void 0 ? 300 : M, A = e.loaderSpeed, z = A === void 0 ? 500 : A, f = e.waitingTime, O = f === void 0 ? 1e3 : f, h = e.shadow, g = h === void 0 || h, v = e.containerStyle, L = v === void 0 ? {} : v, y = e.style, B = y === void 0 ? {} : y, X = e.shadowStyle, F = X === void 0 ? {} : X, T = e.containerClassName, w = T === void 0 ? "" : T, H = (0,react__WEBPACK_IMPORTED_MODULE_0__.useRef)(!1), C = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(0), q = C[0], m = C[1], k = (0,react__WEBPACK_IMPORTED_MODULE_0__.useRef)({ active: !1, refreshRate: 1e3 }), x = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(!1), N = x[0], V = x[1], R = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)({ active: !1, value: 20 }), I = R[0], j = R[1], U = { position: "fixed", top: 0, left: 0, height: r, background: d, zIndex: 99999999999, width: "100%" }, _ = { boxShadow: "0 0 10px " + l + ", 0 0 10px " + l, width: "5%", opacity: 1, position: "absolute", height: "100%", transition: "all " + z + "ms ease", transform: "rotate(3deg) translate(0px, -4px)", left: "-10rem" }, r1 = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)({ height: "100%", background: l, transition: "all " + z + "ms ease", width: "0%" }), K = r1[0], Q = r1[1], E = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(_), D = E[0], G = E[1];\n (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(function() {\n return H.current = !0, function() {\n H.current = !1;\n };\n }, []), (0,react__WEBPACK_IMPORTED_MODULE_0__.useImperativeHandle)(t, function() {\n return { continuousStart: function(Y, Z) {\n if (Z === void 0 && (Z = 1e3), !I.active)\n if (N)\n console.warn("react-top-loading-bar: You can\'t use both controlling by props and ref methods to control the bar!");\n else {\n var t1 = Y || Pc(10, 20);\n k.current = { active: !0, refreshRate: Z }, m(t1), P(t1);\n }\n }, staticStart: function(Y) {\n if (!k.current.active)\n if (N)\n console.warn("react-top-loading-bar: You can\'t use both controlling by props and ref methods to control the bar!");\n else {\n var Z = Y || Pc(30, 50);\n j({ active: !0, value: Z }), m(Z), P(Z);\n }\n }, complete: function() {\n N ? console.warn("react-top-loading-bar: You can\'t use both controlling by props and ref methods to control the bar!") : (m(100), P(100));\n } };\n }), (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(function() {\n Q(j2({}, K, { background: l })), G(j2({}, D, { boxShadow: "0 0 10px " + l + ", 0 0 5px " + l }));\n }, [l]), (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(function() {\n if (t) {\n if (t && o !== void 0)\n return void console.warn(`react-top-loading-bar: You can\'t use both controlling by props and ref methods to control the bar! Please use only props or only ref methods! Ref methods will override props if "ref" property is available.`);\n P(q), V(!1);\n } else\n o && P(o), V(!0);\n }, [o]);\n var J, S, W, P = function Y(Z) {\n Z >= 100 ? (Q(j2({}, K, { width: "100%" })), g && G(j2({}, D, { left: Z - 10 + "%" })), setTimeout(function() {\n H.current && (Q(j2({}, K, { opacity: 0, width: "100%", transition: "all " + u + "ms ease-out", color: l })), setTimeout(function() {\n H.current && (k.current.active && (k.current = j2({}, k.current, { active: !1 }), m(0), Y(0)), I.active && (j(j2({}, I, { active: !1 })), m(0), Y(0)), b && b(), m(0), Y(0));\n }, u));\n }, O)) : (Q(function(t1) {\n return j2({}, t1, { width: Z + "%", opacity: 1, transition: Z > 0 ? "all " + z + "ms ease" : "" });\n }), g && G(j2({}, D, { left: Z - 5.5 + "%", transition: Z > 0 ? "all " + z + "ms ease" : "" })));\n };\n return J = function() {\n var Y = UM(Math.min(10, (100 - q) / 5), Math.min(20, (100 - q) / 3));\n q + Y < 95 && (m(q + Y), P(q + Y));\n }, S = k.current.active ? k.current.refreshRate : null, W = (0,react__WEBPACK_IMPORTED_MODULE_0__.useRef)(Dj), (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(function() {\n W.current = J;\n }), (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(function() {\n }, [void 0]), (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(function() {\n if (S !== null && S !== !1) {\n var Y = setInterval(function() {\n return W.current();\n }, S);\n return function() {\n return clearInterval(Y);\n };\n }\n }, [S]), (0,react__WEBPACK_IMPORTED_MODULE_0__.createElement)("div", { className: w, style: j2({}, U, L) }, (0,react__WEBPACK_IMPORTED_MODULE_0__.createElement)("div", { className: a, style: j2({}, K, B) }, g ? (0,react__WEBPACK_IMPORTED_MODULE_0__.createElement)("div", { style: j2({}, D, F) }) : null));\n});\nfunction Vj({ theme: e, ...t }) {\n return /* @__PURE__ */ c(\n Hj,\n {\n ...t,\n color: e.colors.backgrounds.bgInformationalPrimary,\n height: 4,\n shadow: !1\n }\n );\n}\nconst n$ = (0,styled_components__WEBPACK_IMPORTED_MODULE_1__.withTheme)(Vj);\nvar YM = { exports: {} }, GM = { exports: {} };\nconst Pj = /* @__PURE__ */ zl(AZ);\n(function(e) {\n //! moment-timezone.js\n //! version : 0.5.46\n //! Copyright (c) JS Foundation and other contributors\n //! license : MIT\n //! github.com/moment/moment-timezone\n (function(t, o) {\n e.exports ? e.exports = o(Pj) : o(t.moment);\n })(D5, function(t) {\n t.version === void 0 && t.default && (t = t.default);\n var o = "0.5.46", n = {}, r = {}, i = {}, a = {}, s = {}, l;\n (!t || typeof t.version != "string") && K("Moment Timezone requires Moment.js. See https://momentjs.com/timezone/docs/#/use-it/browser/");\n var p = t.version.split("."), d = +p[0], b = +p[1];\n (d < 2 || d === 2 && b < 6) && K("Moment Timezone requires Moment.js >= 2.6.0. You are using Moment.js " + t.version + ". See momentjs.com");\n function M(W) {\n return W > 96 ? W - 87 : W > 64 ? W - 29 : W - 48;\n }\n function u(W) {\n var P = 0, Y = W.split("."), Z = Y[0], t1 = Y[1] || "", i1 = 1, n1, s1 = 0, d1 = 1;\n for (W.charCodeAt(0) === 45 && (P = 1, d1 = -1), P; P < Z.length; P++)\n n1 = M(Z.charCodeAt(P)), s1 = 60 * s1 + n1;\n for (P = 0; P < t1.length; P++)\n i1 = i1 / 60, n1 = M(t1.charCodeAt(P)), s1 += n1 * i1;\n return s1 * d1;\n }\n function A(W) {\n for (var P = 0; P < W.length; P++)\n W[P] = u(W[P]);\n }\n function z(W, P) {\n for (var Y = 0; Y < P; Y++)\n W[Y] = Math.round((W[Y - 1] || 0) + W[Y] * 6e4);\n W[P - 1] = 1 / 0;\n }\n function f(W, P) {\n var Y = [], Z;\n for (Z = 0; Z < P.length; Z++)\n Y[Z] = W[P[Z]];\n return Y;\n }\n function O(W) {\n var P = W.split("|"), Y = P[2].split(" "), Z = P[3].split(""), t1 = P[4].split(" ");\n return A(Y), A(Z), A(t1), z(t1, Z.length), {\n name: P[0],\n abbrs: f(P[1].split(" "), Z),\n offsets: f(Y, Z),\n untils: t1,\n population: P[5] | 0\n };\n }\n function h(W) {\n W && this._set(O(W));\n }\n function g(W, P) {\n var Y = P.length;\n if (W < P[0])\n return 0;\n if (Y > 1 && P[Y - 1] === 1 / 0 && W >= P[Y - 2])\n return Y - 1;\n if (W >= P[Y - 1])\n return -1;\n for (var Z, t1 = 0, i1 = Y - 1; i1 - t1 > 1; )\n Z = Math.floor((t1 + i1) / 2), P[Z] <= W ? t1 = Z : i1 = Z;\n return i1;\n }\n h.prototype = {\n _set: function(W) {\n this.name = W.name, this.abbrs = W.abbrs, this.untils = W.untils, this.offsets = W.offsets, this.population = W.population;\n },\n _index: function(W) {\n var P = +W, Y = this.untils, Z;\n if (Z = g(P, Y), Z >= 0)\n return Z;\n },\n countries: function() {\n var W = this.name;\n return Object.keys(i).filter(function(P) {\n return i[P].zones.indexOf(W) !== -1;\n });\n },\n parse: function(W) {\n var P = +W, Y = this.offsets, Z = this.untils, t1 = Z.length - 1, i1, n1, s1, d1;\n for (d1 = 0; d1 < t1; d1++)\n if (i1 = Y[d1], n1 = Y[d1 + 1], s1 = Y[d1 && d1 - 1], i1 < n1 && Q.moveAmbiguousForward ? i1 = n1 : i1 > s1 && Q.moveInvalidForward && (i1 = s1), P < Z[d1] - i1 * 6e4)\n return Y[d1];\n return Y[t1];\n },\n abbr: function(W) {\n return this.abbrs[this._index(W)];\n },\n offset: function(W) {\n return K("zone.offset has been deprecated in favor of zone.utcOffset"), this.offsets[this._index(W)];\n },\n utcOffset: function(W) {\n return this.offsets[this._index(W)];\n }\n };\n function v(W, P) {\n this.name = W, this.zones = P;\n }\n function L(W) {\n var P = W.toTimeString(), Y = P.match(/\\([a-z ]+\\)/i);\n Y && Y[0] ? (Y = Y[0].match(/[A-Z]/g), Y = Y ? Y.join("") : void 0) : (Y = P.match(/[A-Z]{3,5}/g), Y = Y ? Y[0] : void 0), Y === "GMT" && (Y = void 0), this.at = +W, this.abbr = Y, this.offset = W.getTimezoneOffset();\n }\n function y(W) {\n this.zone = W, this.offsetScore = 0, this.abbrScore = 0;\n }\n y.prototype.scoreOffsetAt = function(W) {\n this.offsetScore += Math.abs(this.zone.utcOffset(W.at) - W.offset), this.zone.abbr(W.at).replace(/[^A-Z]/g, "") !== W.abbr && this.abbrScore++;\n };\n function B(W, P) {\n for (var Y, Z; Z = ((P.at - W.at) / 12e4 | 0) * 6e4; )\n Y = new L(new Date(W.at + Z)), Y.offset === W.offset ? W = Y : P = Y;\n return W;\n }\n function X() {\n var W = (/* @__PURE__ */ new Date()).getFullYear() - 2, P = new L(new Date(W, 0, 1)), Y = P.offset, Z = [P], t1, i1, n1, s1;\n for (s1 = 1; s1 < 48; s1++)\n n1 = new Date(W, s1, 1).getTimezoneOffset(), n1 !== Y && (i1 = new L(new Date(W, s1, 1)), t1 = B(P, i1), Z.push(t1), Z.push(new L(new Date(t1.at + 6e4))), P = i1, Y = n1);\n for (s1 = 0; s1 < 4; s1++)\n Z.push(new L(new Date(W + s1, 0, 1))), Z.push(new L(new Date(W + s1, 6, 1)));\n return Z;\n }\n function F(W, P) {\n return W.offsetScore !== P.offsetScore ? W.offsetScore - P.offsetScore : W.abbrScore !== P.abbrScore ? W.abbrScore - P.abbrScore : W.zone.population !== P.zone.population ? P.zone.population - W.zone.population : P.zone.name.localeCompare(W.zone.name);\n }\n function T(W, P) {\n var Y, Z;\n for (A(P), Y = 0; Y < P.length; Y++)\n Z = P[Y], s[Z] = s[Z] || {}, s[Z][W] = !0;\n }\n function w(W) {\n var P = W.length, Y = {}, Z = [], t1 = {}, i1, n1, s1, d1;\n for (i1 = 0; i1 < P; i1++)\n if (s1 = W[i1].offset, !t1.hasOwnProperty(s1)) {\n d1 = s[s1] || {};\n for (n1 in d1)\n d1.hasOwnProperty(n1) && (Y[n1] = !0);\n t1[s1] = !0;\n }\n for (i1 in Y)\n Y.hasOwnProperty(i1) && Z.push(a[i1]);\n return Z;\n }\n function H() {\n try {\n var W = Intl.DateTimeFormat().resolvedOptions().timeZone;\n if (W && W.length > 3) {\n var P = a[q(W)];\n if (P)\n return P;\n K("Moment Timezone found " + W + " from the Intl api, but did not have that data loaded.");\n }\n } catch {\n }\n var Y = X(), Z = Y.length, t1 = w(Y), i1 = [], n1, s1, d1;\n for (s1 = 0; s1 < t1.length; s1++) {\n for (n1 = new y(k(t1[s1])), d1 = 0; d1 < Z; d1++)\n n1.scoreOffsetAt(Y[d1]);\n i1.push(n1);\n }\n return i1.sort(F), i1.length > 0 ? i1[0].zone.name : void 0;\n }\n function C(W) {\n return (!l || W) && (l = H()), l;\n }\n function q(W) {\n return (W || "").toLowerCase().replace(/\\//g, "_");\n }\n function m(W) {\n var P, Y, Z, t1;\n for (typeof W == "string" && (W = [W]), P = 0; P < W.length; P++)\n Z = W[P].split("|"), Y = Z[0], t1 = q(Y), n[t1] = W[P], a[t1] = Y, T(t1, Z[2].split(" "));\n }\n function k(W, P) {\n W = q(W);\n var Y = n[W], Z;\n return Y instanceof h ? Y : typeof Y == "string" ? (Y = new h(Y), n[W] = Y, Y) : r[W] && P !== k && (Z = k(r[W], k)) ? (Y = n[W] = new h(), Y._set(Z), Y.name = a[W], Y) : null;\n }\n function x() {\n var W, P = [];\n for (W in a)\n a.hasOwnProperty(W) && (n[W] || n[r[W]]) && a[W] && P.push(a[W]);\n return P.sort();\n }\n function N() {\n return Object.keys(i);\n }\n function V(W) {\n var P, Y, Z, t1;\n for (typeof W == "string" && (W = [W]), P = 0; P < W.length; P++)\n Y = W[P].split("|"), Z = q(Y[0]), t1 = q(Y[1]), r[Z] = t1, a[Z] = Y[0], r[t1] = Z, a[t1] = Y[1];\n }\n function R(W) {\n var P, Y, Z, t1;\n if (!(!W || !W.length))\n for (P = 0; P < W.length; P++)\n t1 = W[P].split("|"), Y = t1[0].toUpperCase(), Z = t1[1].split(" "), i[Y] = new v(\n Y,\n Z\n );\n }\n function I(W) {\n return W = W.toUpperCase(), i[W] || null;\n }\n function j(W, P) {\n if (W = I(W), !W)\n return null;\n var Y = W.zones.sort();\n return P ? Y.map(function(Z) {\n var t1 = k(Z);\n return {\n name: Z,\n offset: t1.utcOffset(/* @__PURE__ */ new Date())\n };\n }) : Y;\n }\n function U(W) {\n m(W.zones), V(W.links), R(W.countries), Q.dataVersion = W.version;\n }\n function _(W) {\n return _.didShowError || (_.didShowError = !0, K("moment.tz.zoneExists(\'" + W + "\') has been deprecated in favor of !moment.tz.zone(\'" + W + "\')")), !!k(W);\n }\n function r1(W) {\n var P = W._f === "X" || W._f === "x";\n return !!(W._a && W._tzm === void 0 && !P);\n }\n function K(W) {\n typeof console < "u" && typeof console.error == "function" && console.error(W);\n }\n function Q(W) {\n var P = Array.prototype.slice.call(arguments, 0, -1), Y = arguments[arguments.length - 1], Z = t.utc.apply(null, P), t1;\n return !t.isMoment(W) && r1(Z) && (t1 = k(Y)) && Z.add(t1.parse(Z), "minutes"), Z.tz(Y), Z;\n }\n Q.version = o, Q.dataVersion = "", Q._zones = n, Q._links = r, Q._names = a, Q._countries = i, Q.add = m, Q.link = V, Q.load = U, Q.zone = k, Q.zoneExists = _, Q.guess = C, Q.names = x, Q.Zone = h, Q.unpack = O, Q.unpackBase60 = u, Q.needsOffset = r1, Q.moveInvalidForward = !0, Q.moveAmbiguousForward = !1, Q.countries = N, Q.zonesForCountry = j;\n var E = t.fn;\n t.tz = Q, t.defaultZone = null, t.updateOffset = function(W, P) {\n var Y = t.defaultZone, Z;\n if (W._z === void 0 && (Y && r1(W) && !W._isUTC && W.isValid() && (W._d = t.utc(W._a)._d, W.utc().add(Y.parse(W), "minutes")), W._z = Y), W._z)\n if (Z = W._z.utcOffset(W), Math.abs(Z) < 16 && (Z = Z / 60), W.utcOffset !== void 0) {\n var t1 = W._z;\n W.utcOffset(-Z, P), W._z = t1;\n } else\n W.zone(Z, P);\n }, E.tz = function(W, P) {\n if (W) {\n if (typeof W != "string")\n throw new Error("Time zone name must be a string, got " + W + " [" + typeof W + "]");\n return this._z = k(W), this._z ? t.updateOffset(this, P) : K("Moment Timezone has no data for " + W + ". See http://momentjs.com/timezone/docs/#/data-loading/."), this;\n }\n if (this._z)\n return this._z.name;\n };\n function D(W) {\n return function() {\n return this._z ? this._z.abbr(this) : W.call(this);\n };\n }\n function G(W) {\n return function() {\n return this._z = null, W.apply(this, arguments);\n };\n }\n function J(W) {\n return function() {\n return arguments.length > 0 && (this._z = null), W.apply(this, arguments);\n };\n }\n E.zoneName = D(E.zoneName), E.zoneAbbr = D(E.zoneAbbr), E.utc = G(E.utc), E.local = G(E.local), E.utcOffset = J(E.utcOffset), t.tz.setDefault = function(W) {\n return (d < 2 || d === 2 && b < 9) && K("Moment Timezone setDefault() requires Moment.js >= 2.9.0. You are using Moment.js " + t.version + "."), t.defaultZone = W ? k(W) : null, t;\n };\n var S = t.momentProperties;\n return Object.prototype.toString.call(S) === "[object Array]" ? (S.push("_z"), S.push("_a")) : S && (S._z = null), t;\n });\n})(GM);\nvar Fj = GM.exports;\nconst Xj = "2024b", Uj = [\n "Africa/Abidjan|LMT GMT|g.8 0|01|-2ldXH.Q|48e5",\n "Africa/Nairobi|LMT +0230 EAT +0245|-2r.g -2u -30 -2J|012132|-2ua2r.g N6nV.g 3Fbu h1cu dzbJ|47e5",\n "Africa/Algiers|LMT PMT WET WEST CET CEST|-c.c -9.l 0 -10 -10 -20|01232323232323232454542423234542324|-3bQ0c.c MDA2.P cNb9.l HA0 19A0 1iM0 11c0 1oo0 Wo0 1rc0 QM0 1EM0 UM0 DA0 Imo0 rd0 De0 9Xz0 1fb0 1ap0 16K0 2yo0 mEp0 hwL0 jxA0 11A0 dDd0 17b0 11B0 1cN0 2Dy0 1cN0 1fB0 1cL0|26e5",\n "Africa/Lagos|LMT GMT +0030 WAT|-d.z 0 -u -10|01023|-2B40d.z 7iod.z dnXK.p dLzH.z|17e6",\n "Africa/Bissau|LMT -01 GMT|12.k 10 0|012|-2ldX0 2xoo0|39e4",\n "Africa/Maputo|LMT CAT|-2a.i -20|01|-2sw2a.i|26e5",\n "Africa/Cairo|LMT EET EEST|-25.9 -20 -30|01212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-2MBC5.9 1AQM5.9 vb0 1ip0 11z0 1iN0 1nz0 12p0 1pz0 10N0 1pz0 16p0 1jz0 s3d0 Vz0 1oN0 11b0 1oO0 10N0 1pz0 10N0 1pb0 10N0 1pb0 10N0 1pb0 10N0 1pz0 10N0 1pb0 10N0 1pb0 11d0 1oL0 11d0 1pb0 11d0 1oL0 11d0 1oL0 11d0 1oL0 11d0 1pb0 11d0 1oL0 11d0 1oL0 11d0 1oL0 11d0 1pb0 11d0 1oL0 11d0 1oL0 11d0 1oL0 11d0 1pb0 11d0 1oL0 11d0 1WL0 rd0 1Rz0 wp0 1pb0 11d0 1oL0 11d0 1oL0 11d0 1oL0 11d0 1pb0 11d0 1qL0 Xd0 1oL0 11d0 1oL0 11d0 1pb0 11d0 1oL0 11d0 1oL0 11d0 1ny0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 11z0 1o10 11z0 1o10 WL0 1qN0 Rb0 1wp0 On0 1zd0 Lz0 1EN0 Fb0 c10 8n0 8Nd0 gL0 e10 mn0 kSp0 1cL0 1cN0 1fz0 1a10 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1a10 1fz0|15e6",\n "Africa/Casablanca|LMT +00 +01|u.k 0 -10|01212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212|-2gMnt.E 130Lt.E rb0 Dd0 dVb0 b6p0 TX0 EoB0 LL0 gnd0 rz0 43d0 AL0 1Nd0 XX0 1Cp0 pz0 dEp0 4mn0 SyN0 AL0 1Nd0 wn0 1FB0 Db0 1zd0 Lz0 1Nf0 wM0 co0 go0 1o00 s00 dA0 vc0 11A0 A00 e00 y00 11A0 uM0 e00 Dc0 11A0 s00 e00 IM0 WM0 mo0 gM0 LA0 WM0 jA0 e00 28M0 e00 2600 gM0 2600 e00 2600 gM0 2600 e00 28M0 e00 2600 gM0 2600 e00 28M0 e00 2600 gM0 2600 e00 2600 gM0 2600 e00 28M0 e00 2600 gM0 2600 e00 2600 gM0 2600 gM0 2600 e00 2600 gM0 2600 e00 28M0 e00 2600 gM0 2600 e00 2600 gM0 2600 gM0 2600 e00 2600 gM0 2600 e00 28M0 e00 2600 gM0 2600 e00 2600 gM0 2600 gM0 2600 e00 2600 gM0 2600 e00 28M0 e00 2600 gM0 2600 e00 2600 gM0 2600 gM0 2600 e00 2600 gM0 2600 e00 28M0 e00 2600 gM0 2600 e00 2600 gM0 2600 gM0 2600 e00 2600 gM0 2600 e00 28M0 e00 2600 gM0 2600 e00 2600 gM0 2600 gM0 2600 e00 2600 gM0 2600 e00 28M0 e00 2600 gM0 2600 e00 2600 gM0 2600 e00 28M0 e00 2600 gM0 2600 e00 28M0 e00 2600 gM0|32e5",\n "Africa/Ceuta|LMT WET WEST CET CEST|l.g 0 -10 -10 -20|0121212121212121212121343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343|-2M0M0 GdX0 11z0 drd0 18p0 3HX0 17d0 1fz0 1a10 1io0 1a00 1y7o0 LL0 gnd0 rz0 43d0 AL0 1Nd0 XX0 1Cp0 pz0 dEp0 4VB0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00|85e3",\n "Africa/El_Aaiun|LMT -01 +00 +01|Q.M 10 0 -10|012323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323|-1rDz7.c 1GVA7.c 6L0 AL0 1Nd0 XX0 1Cp0 pz0 1cBB0 AL0 1Nd0 wn0 1FB0 Db0 1zd0 Lz0 1Nf0 wM0 co0 go0 1o00 s00 dA0 vc0 11A0 A00 e00 y00 11A0 uM0 e00 Dc0 11A0 s00 e00 IM0 WM0 mo0 gM0 LA0 WM0 jA0 e00 28M0 e00 2600 gM0 2600 e00 2600 gM0 2600 e00 28M0 e00 2600 gM0 2600 e00 28M0 e00 2600 gM0 2600 e00 2600 gM0 2600 e00 28M0 e00 2600 gM0 2600 e00 2600 gM0 2600 gM0 2600 e00 2600 gM0 2600 e00 28M0 e00 2600 gM0 2600 e00 2600 gM0 2600 gM0 2600 e00 2600 gM0 2600 e00 28M0 e00 2600 gM0 2600 e00 2600 gM0 2600 gM0 2600 e00 2600 gM0 2600 e00 28M0 e00 2600 gM0 2600 e00 2600 gM0 2600 gM0 2600 e00 2600 gM0 2600 e00 28M0 e00 2600 gM0 2600 e00 2600 gM0 2600 gM0 2600 e00 2600 gM0 2600 e00 28M0 e00 2600 gM0 2600 e00 2600 gM0 2600 gM0 2600 e00 2600 gM0 2600 e00 28M0 e00 2600 gM0 2600 e00 2600 gM0 2600 e00 28M0 e00 2600 gM0 2600 e00 28M0 e00 2600 gM0|20e4",\n "Africa/Johannesburg|LMT SAST SAST SAST|-1Q -1u -20 -30|0123232|-39EpQ qTcm 1Ajdu 1cL0 1cN0 1cL0|84e5",\n "Africa/Juba|LMT CAT CAST EAT|-26.s -20 -30 -30|012121212121212121212121212121212131|-1yW26.s 1zK06.s 16L0 1iN0 17b0 1jd0 17b0 1ip0 17z0 1i10 17X0 1hB0 18n0 1hd0 19b0 1gp0 19z0 1iN0 17b0 1ip0 17z0 1i10 18n0 1hd0 18L0 1gN0 19b0 1gp0 19z0 1iN0 17z0 1i10 17X0 yGd0 PeX0|",\n "Africa/Khartoum|LMT CAT CAST EAT|-2a.8 -20 -30 -30|012121212121212121212121212121212131|-1yW2a.8 1zK0a.8 16L0 1iN0 17b0 1jd0 17b0 1ip0 17z0 1i10 17X0 1hB0 18n0 1hd0 19b0 1gp0 19z0 1iN0 17b0 1ip0 17z0 1i10 18n0 1hd0 18L0 1gN0 19b0 1gp0 19z0 1iN0 17z0 1i10 17X0 yGd0 HjL0|51e5",\n "Africa/Monrovia|LMT MMT MMT GMT|H.8 H.8 I.u 0|0123|-3ygng.Q 1usM0 28G01.m|11e5",\n "Africa/Ndjamena|LMT WAT WAST|-10.c -10 -20|0121|-2le10.c 2J3c0.c Wn0|13e5",\n "Africa/Sao_Tome|LMT LMT GMT WAT|-q.U A.J 0 -10|01232|-3tooq.U 18aoq.U 4i6N0 2q00|",\n "Africa/Tripoli|LMT CET CEST EET|-Q.I -10 -20 -20|012121213121212121212121213123123|-21JcQ.I 1hnBQ.I vx0 4iP0 xx0 4eN0 Bb0 7ip0 U0n0 A10 1db0 1cN0 1db0 1dd0 1db0 1eN0 1bb0 1e10 1cL0 1c10 1db0 1dd0 1db0 1cN0 1db0 1q10 fAn0 1ep0 1db0 AKq0 TA0 1o00|11e5",\n "Africa/Tunis|LMT PMT CET CEST|-E.I -9.l -10 -20|01232323232323232323232323232323232|-3zO0E.I 1cBAv.n 18pa9.l 1qM0 DA0 3Tc0 11B0 1ze0 WM0 7z0 3d0 14L0 1cN0 1f90 1ar0 16J0 1gXB0 WM0 1rA0 11c0 nwo0 Ko0 1cM0 1cM0 1rA0 10M0 zuM0 10N0 1aN0 1qM0 WM0 1qM0 11A0 1o00|20e5",\n "Africa/Windhoek|LMT +0130 SAST SAST CAT WAT|-18.o -1u -20 -30 -20 -10|012324545454545454545454545454545454545454545454545454|-39Ep8.o qTbC.o 1Ajdu 1cL0 1SqL0 9Io0 16P0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0|32e4",\n "America/Adak|LMT LMT NST NWT NPT BST BDT AHST HST HDT|-cd.m bK.C b0 a0 a0 b0 a0 a0 a0 90|01234256565656565656565656565656565678989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898|-48Pzs.L 1jVzf.p 1EX1d.m 8wW0 iB0 Qlb0 52O0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 s10 1Vz0 LB0 1BX0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 cm0 10q0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|326",\n "America/Anchorage|LMT LMT AST AWT APT AHST AHDT YST AKST AKDT|-e0.o 9X.A a0 90 90 a0 90 90 90 80|01234256565656565656565656565656565678989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898|-48Pzs.L 1jVxs.n 1EX20.o 8wX0 iA0 Qlb0 52O0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 s10 1Vz0 LB0 1BX0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 cm0 10q0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|30e4",\n "America/Puerto_Rico|LMT AST AWT APT|4o.p 40 30 30|01231|-2Qi7z.z 1IUbz.z 7XT0 iu0|24e5",\n "America/Araguaina|LMT -03 -02|3c.M 30 20|0121212121212121212121212121212121212121212121212121|-2glwL.c HdKL.c 1cc0 1e10 1bX0 Ezd0 So0 1vA0 Mn0 1BB0 ML0 1BB0 zX0 qe10 xb0 2ep0 nz0 1C10 zX0 1C10 LX0 1C10 Mn0 H210 Rb0 1tB0 IL0 1Fd0 FX0 1EN0 FX0 1HB0 Lz0 dMN0 Lz0 1zd0 Rb0 1wN0 Wn0 1tB0 Rb0 1tB0 WL0 1tB0 Rb0 1zd0 On0 1HB0 FX0 ny10 Lz0|14e4",\n "America/Argentina/Buenos_Aires|LMT CMT -04 -03 -02|3R.M 4g.M 40 30 20|012323232323232323232323232323232323232323234343434343434343|-331U6.c 125cn pKnH.c Mn0 1iN0 Tb0 1C10 LX0 1C10 LX0 1C10 LX0 1C10 Mn0 1C10 LX0 1C10 LX0 1C10 LX0 1C10 Mn0 MN0 2jz0 MN0 4lX0 u10 5Lb0 1pB0 Fnz0 u10 uL0 1vd0 SL0 1vd0 SL0 1vd0 17z0 1cN0 1fz0 1cN0 1cL0 1cN0 asn0 Db0 zvd0 Bz0 1tB0 TX0 1wp0 Rb0 1wp0 Rb0 1wp0 TX0 A4p0 uL0 1qN0 WL0|",\n "America/Argentina/Catamarca|LMT CMT -04 -03 -02|4n.8 4g.M 40 30 20|012323232323232323232323232323232323232323234343434243432343|-331TA.Q 125bR.E pKnH.c Mn0 1iN0 Tb0 1C10 LX0 1C10 LX0 1C10 LX0 1C10 Mn0 1C10 LX0 1C10 LX0 1C10 LX0 1C10 Mn0 MN0 2jz0 MN0 4lX0 u10 5Lb0 1pB0 Fnz0 u10 uL0 1vd0 SL0 1vd0 SL0 1vd0 17z0 1cN0 1fz0 1cN0 1cL0 1cN0 asn0 Db0 zvd0 Bz0 1tB0 TX0 1wp0 Rb0 1wq0 Ra0 1wp0 TX0 rlB0 7B0 8zb0 uL0|",\n "America/Argentina/Cordoba|LMT CMT -04 -03 -02|4g.M 4g.M 40 30 20|012323232323232323232323232323232323232323234343434243434343|-331TH.c 125c0 pKnH.c Mn0 1iN0 Tb0 1C10 LX0 1C10 LX0 1C10 LX0 1C10 Mn0 1C10 LX0 1C10 LX0 1C10 LX0 1C10 Mn0 MN0 2jz0 MN0 4lX0 u10 5Lb0 1pB0 Fnz0 u10 uL0 1vd0 SL0 1vd0 SL0 1vd0 17z0 1cN0 1fz0 1cN0 1cL0 1cN0 asn0 Db0 zvd0 Bz0 1tB0 TX0 1wp0 Rb0 1wq0 Ra0 1wp0 TX0 A4p0 uL0 1qN0 WL0|",\n "America/Argentina/Jujuy|LMT CMT -04 -03 -02|4l.c 4g.M 40 30 20|0123232323232323232323232323232323232323232343434232434343|-331TC.M 125bT.A pKnH.c Mn0 1iN0 Tb0 1C10 LX0 1C10 LX0 1C10 LX0 1C10 Mn0 1C10 LX0 1C10 LX0 1C10 LX0 1C10 Mn0 MN0 2jz0 MN0 4lX0 u10 5Lb0 1pB0 Fnz0 u10 uL0 1vd0 SL0 1vd0 SL0 1vd0 17z0 1cN0 1fz0 1cN0 1cL0 1cN0 asn0 Db0 zvd0 Bz0 1tB0 TX0 1ze0 TX0 1ld0 WK0 1wp0 TX0 A4p0 uL0|",\n "America/Argentina/La_Rioja|LMT CMT -04 -03 -02|4r.o 4g.M 40 30 20|0123232323232323232323232323232323232323232343434342343432343|-331Tw.A 125bN.o pKnH.c Mn0 1iN0 Tb0 1C10 LX0 1C10 LX0 1C10 LX0 1C10 Mn0 1C10 LX0 1C10 LX0 1C10 LX0 1C10 Mn0 MN0 2jz0 MN0 4lX0 u10 5Lb0 1pB0 Fnz0 u10 uL0 1vd0 SL0 1vd0 SL0 1vd0 17z0 1cN0 1fz0 1cN0 1cL0 1cN0 asn0 Db0 zvd0 Bz0 1tB0 TX0 1wp0 Qn0 qO0 16n0 Rb0 1wp0 TX0 rlB0 7B0 8zb0 uL0|",\n "America/Argentina/Mendoza|LMT CMT -04 -03 -02|4z.g 4g.M 40 30 20|012323232323232323232323232323232323232323234343423232432343|-331To.I 125bF.w pKnH.c Mn0 1iN0 Tb0 1C10 LX0 1C10 LX0 1C10 LX0 1C10 Mn0 1C10 LX0 1C10 LX0 1C10 LX0 1C10 Mn0 MN0 2jz0 MN0 4lX0 u10 5Lb0 1pB0 Fnz0 u10 uL0 1vd0 SL0 1vd0 SL0 1vd0 17z0 1cN0 1fz0 1cN0 1cL0 1cN0 asn0 Db0 zvd0 Bz0 1tB0 TX0 1u20 SL0 1vd0 Tb0 1wp0 TW0 ri10 Op0 7TX0 uL0|",\n "America/Argentina/Rio_Gallegos|LMT CMT -04 -03 -02|4A.Q 4g.M 40 30 20|012323232323232323232323232323232323232323234343434343432343|-331Tn.8 125bD.U pKnH.c Mn0 1iN0 Tb0 1C10 LX0 1C10 LX0 1C10 LX0 1C10 Mn0 1C10 LX0 1C10 LX0 1C10 LX0 1C10 Mn0 MN0 2jz0 MN0 4lX0 u10 5Lb0 1pB0 Fnz0 u10 uL0 1vd0 SL0 1vd0 SL0 1vd0 17z0 1cN0 1fz0 1cN0 1cL0 1cN0 asn0 Db0 zvd0 Bz0 1tB0 TX0 1wp0 Rb0 1wp0 Rb0 1wp0 TX0 rlB0 7B0 8zb0 uL0|",\n "America/Argentina/Salta|LMT CMT -04 -03 -02|4l.E 4g.M 40 30 20|0123232323232323232323232323232323232323232343434342434343|-331TC.k 125bT.8 pKnH.c Mn0 1iN0 Tb0 1C10 LX0 1C10 LX0 1C10 LX0 1C10 Mn0 1C10 LX0 1C10 LX0 1C10 LX0 1C10 Mn0 MN0 2jz0 MN0 4lX0 u10 5Lb0 1pB0 Fnz0 u10 uL0 1vd0 SL0 1vd0 SL0 1vd0 17z0 1cN0 1fz0 1cN0 1cL0 1cN0 asn0 Db0 zvd0 Bz0 1tB0 TX0 1wp0 Rb0 1wq0 Ra0 1wp0 TX0 A4p0 uL0|",\n "America/Argentina/San_Juan|LMT CMT -04 -03 -02|4y.4 4g.M 40 30 20|0123232323232323232323232323232323232323232343434342343432343|-331Tp.U 125bG.I pKnH.c Mn0 1iN0 Tb0 1C10 LX0 1C10 LX0 1C10 LX0 1C10 Mn0 1C10 LX0 1C10 LX0 1C10 LX0 1C10 Mn0 MN0 2jz0 MN0 4lX0 u10 5Lb0 1pB0 Fnz0 u10 uL0 1vd0 SL0 1vd0 SL0 1vd0 17z0 1cN0 1fz0 1cN0 1cL0 1cN0 asn0 Db0 zvd0 Bz0 1tB0 TX0 1wp0 Qn0 qO0 16n0 Rb0 1wp0 TX0 rld0 m10 8lb0 uL0|",\n "America/Argentina/San_Luis|LMT CMT -04 -03 -02|4p.o 4g.M 40 30 20|0123232323232323232323232323232323232323232343434232323432323|-331Ty.A 125bP.o pKnH.c Mn0 1iN0 Tb0 1C10 LX0 1C10 LX0 1C10 LX0 1C10 Mn0 1C10 LX0 1C10 LX0 1C10 LX0 1C10 Mn0 MN0 2jz0 MN0 4lX0 u10 5Lb0 1pB0 Fnz0 u10 uL0 1vd0 SL0 1vd0 SL0 1vd0 17z0 1cN0 1fz0 1cN0 1cL0 1cN0 asn0 Db0 zvd0 Bz0 1tB0 XX0 1q20 SL0 AN0 vDb0 m10 8lb0 8L0 jd0 1qN0 WL0 1qN0|",\n "America/Argentina/Tucuman|LMT CMT -04 -03 -02|4k.Q 4g.M 40 30 20|01232323232323232323232323232323232323232323434343424343234343|-331TD.8 125bT.U pKnH.c Mn0 1iN0 Tb0 1C10 LX0 1C10 LX0 1C10 LX0 1C10 Mn0 1C10 LX0 1C10 LX0 1C10 LX0 1C10 Mn0 MN0 2jz0 MN0 4lX0 u10 5Lb0 1pB0 Fnz0 u10 uL0 1vd0 SL0 1vd0 SL0 1vd0 17z0 1cN0 1fz0 1cN0 1cL0 1cN0 asn0 Db0 zvd0 Bz0 1tB0 TX0 1wp0 Rb0 1wq0 Ra0 1wp0 TX0 rlB0 4N0 8BX0 uL0 1qN0 WL0|",\n "America/Argentina/Ushuaia|LMT CMT -04 -03 -02|4x.c 4g.M 40 30 20|012323232323232323232323232323232323232323234343434343432343|-331Tq.M 125bH.A pKnH.c Mn0 1iN0 Tb0 1C10 LX0 1C10 LX0 1C10 LX0 1C10 Mn0 1C10 LX0 1C10 LX0 1C10 LX0 1C10 Mn0 MN0 2jz0 MN0 4lX0 u10 5Lb0 1pB0 Fnz0 u10 uL0 1vd0 SL0 1vd0 SL0 1vd0 17z0 1cN0 1fz0 1cN0 1cL0 1cN0 asn0 Db0 zvd0 Bz0 1tB0 TX0 1wp0 Rb0 1wp0 Rb0 1wp0 TX0 rkN0 8p0 8zb0 uL0|",\n "America/Asuncion|LMT AMT -04 -03|3O.E 3O.E 40 30|0123232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323|-3eLw9.k 1FGo0 1DKM9.k 3CL0 3Dd0 10L0 1pB0 10n0 1pB0 10n0 1pB0 1cL0 1dd0 1db0 1dd0 1cL0 1dd0 1cL0 1dd0 1cL0 1dd0 1db0 1dd0 1cL0 1dd0 1cL0 1dd0 1cL0 1dd0 1db0 1dd0 1cL0 1lB0 14n0 1dd0 1cL0 1fd0 WL0 1rd0 1aL0 1dB0 Xz0 1qp0 Xb0 1qN0 10L0 1rB0 TX0 1tB0 WL0 1qN0 11z0 1o10 11z0 1o10 11z0 1qN0 1cL0 WN0 1qL0 11B0 1nX0 1ip0 WL0 1qN0 WL0 1qN0 WL0 1tB0 TX0 1tB0 TX0 1tB0 19X0 1a10 1fz0 1a10 1fz0 1cN0 17b0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1fB0 19X0 1fB0 19X0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1fB0 19X0 1fB0 19X0 1fB0 19X0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1fB0 19X0 1fB0 19X0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1fB0 19X0 1fB0 19X0 1fB0 19X0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1fB0 19X0 1fB0 19X0 1ip0 17b0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1fB0 19X0 1fB0 19X0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1fB0 19X0 1fB0 19X0 1fB0 19X0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1fB0 19X0 1fB0 19X0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1fB0 19X0 1fB0 19X0 1fB0 19X0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1fB0 19X0 1fB0 19X0 1ip0 17b0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1fB0 19X0 1fB0 19X0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1fB0 19X0 1fB0 19X0 1fB0 19X0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1fB0 19X0 1fB0 19X0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1fB0 19X0 1fB0 19X0 1fB0 19X0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1fB0 19X0 1fB0 19X0 1ip0 17b0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1fB0 19X0 1fB0 19X0 1fB0 19X0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1fB0 19X0 1fB0 19X0 1ip0 17b0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1fB0 19X0 1fB0 19X0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1fB0 19X0 1fB0 19X0 1fB0 19X0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1fB0 19X0 1fB0 19X0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1fB0 19X0 1fB0 19X0 1fB0 19X0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1fB0 19X0 1fB0 19X0 1ip0 17b0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1fB0 19X0 1fB0 19X0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1fB0 19X0 1fB0 19X0 1fB0 19X0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1fB0 19X0 1fB0 19X0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1fB0 19X0 1fB0 19X0 1fB0 19X0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1fB0 19X0 1fB0 19X0 1ip0 17b0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1fB0 19X0 1fB0 19X0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1fB0 19X0 1fB0 19X0 1fB0 19X0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1fB0 19X0 1fB0 19X0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1fB0 19X0 1fB0 19X0 1fB0 19X0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1fB0 19X0 1fB0 19X0 1ip0 17b0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1fB0 19X0 1fB0 19X0 1ip0 17b0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1fB0 19X0 1fB0 19X0 1ip0 17b0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1fB0 19X0 1fB0 19X0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1fB0 19X0 1fB0 19X0 1fB0 19X0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1fB0 19X0 1fB0 19X0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1fB0 19X0 1fB0 19X0 1fB0 19X0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1fB0 19X0 1fB0 19X0 1ip0 17b0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1fB0 19X0 1fB0 19X0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1fB0 19X0 1fB0 19X0 1fB0 19X0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1fB0 19X0 1fB0 19X0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1fB0 19X0 1fB0 19X0 1fB0 19X0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1fB0 19X0 1fB0 19X0 1ip0 17b0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1fB0 19X0 1fB0 19X0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1fB0 19X0 1fB0 19X0 1fB0 19X0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1fB0 19X0 1fB0 19X0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1fB0 19X0 1fB0 19X0 1fB0 19X0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1fB0 19X0 1fB0 19X0 1ip0 17b0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1fB0 19X0 1fB0 19X0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1fB0 19X0 1fB0 19X0 1fB0 19X0 1ip0 17b0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1fB0 19X0 1fB0 19X0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1fB0 19X0 1fB0 19X0 1fB0 19X0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1fB0 19X0 1fB0 19X0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1fB0 19X0 1fB0 19X0 1fB0 19X0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1fB0 19X0 1fB0 19X0 1ip0 17b0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1fB0 19X0 1fB0 19X0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1fB0 19X0 1fB0 19X0 1fB0 19X0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1fB0 19X0 1fB0 19X0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1fB0 19X0 1fB0 19X0 1fB0 19X0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1fB0 19X0 1fB0 19X0 1ip0 17b0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1fB0 19X0 1fB0 19X0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1fB0 19X0 1fB0 19X0 1fB0 19X0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1fB0 19X0 1fB0 19X0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1fB0 19X0 1fB0 19X0 1fB0 19X0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1fB0 19X0 1fB0 19X0 1ip0 17b0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1fB0 19X0 1fB0 19X0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1fB0 19X0 1fB0 19X0 1fB0 19X0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1fB0 19X0 1fB0 19X0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1fB0 19X0 1fB0 19X0 1fB0 19X0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1fB0 19X0 1fB0 19X0 1ip0 17b0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1fB0 19X0 1fB0 19X0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1fB0 19X0 1fB0 19X0 1fB0 19X0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1fB0 19X0 1fB0 19X0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1fB0 19X0 1fB0 19X0 1fB0 19X0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1fB0 19X0 1fB0 19X0 1ip0 17b0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1fB0 19X0 1fB0 19X0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1fB0 19X0 1fB0 19X0 1fB0 19X0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1fB0 19X0 1fB0 19X0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1fB0 19X0 1fB0 19X0 1fB0 19X0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1fB0 19X0 1fB0 19X0 1ip0 17b0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1fB0 19X0 1fB0 19X0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1fB0 19X0 1fB0 19X0 1fB0 19X0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1fB0 19X0 1fB0 19X0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1fB0 19X0 1fB0 19X0 1fB0 19X0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1fB0 19X0 1fB0 19X0 1ip0 17b0 1ip0 17b0 1ip0 17b0 1ip0|28e5",\n "America/Panama|LMT CMT EST|5i.8 5j.A 50|012|-3eLuF.Q Iy01.s|15e5",\n "America/Bahia_Banderas|LMT MST CST MDT CDT|71 70 60 60 50|01213121313131313131313131313131313142424242424242424242424242|-1UQF0 deo0 8lz0 16p0 11z0 1dd0 otX0 2bmP0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 1fB0 WL0 1fB0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nW0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0|84e3",\n "America/Bahia|LMT -03 -02|2y.4 30 20|01212121212121212121212121212121212121212121212121212121212121|-2glxp.U HdLp.U 1cc0 1e10 1bX0 Ezd0 So0 1vA0 Mn0 1BB0 ML0 1BB0 zX0 qe10 xb0 2ep0 nz0 1C10 zX0 1C10 LX0 1C10 Mn0 H210 Rb0 1tB0 IL0 1Fd0 FX0 1EN0 FX0 1HB0 Lz0 1EN0 Lz0 1C10 IL0 1HB0 Db0 1HB0 On0 1zd0 On0 1zd0 Lz0 1zd0 Rb0 1wN0 Wn0 1tB0 Rb0 1tB0 WL0 1tB0 Rb0 1zd0 On0 1HB0 FX0 l5B0 Rb0|27e5",\n "America/Barbados|LMT AST ADT -0330|3W.t 40 30 3u|0121213121212121|-2m4k1.v 1eAN1.v RB0 1Bz0 Op0 1rb0 11d0 1jJc0 IL0 1ip0 17b0 1ip0 17b0 1ld0 13b0|28e4",\n "America/Belem|LMT -03 -02|3d.U 30 20|012121212121212121212121212121|-2glwK.4 HdKK.4 1cc0 1e10 1bX0 Ezd0 So0 1vA0 Mn0 1BB0 ML0 1BB0 zX0 qe10 xb0 2ep0 nz0 1C10 zX0 1C10 LX0 1C10 Mn0 H210 Rb0 1tB0 IL0 1Fd0 FX0|20e5",\n "America/Belize|LMT CST -0530 CWT CPT CDT|5Q.M 60 5u 50 50 50|012121212121212121212121212121212121212121212121213412121212121212121212121212121212121212121215151|-2kBu7.c fPA7.c Onu 1zcu Rbu 1wou Rbu 1wou Rbu 1zcu Onu 1zcu Onu 1zcu Rbu 1wou Rbu 1wou Rbu 1wou Rbu 1zcu Onu 1zcu Onu 1zcu Rbu 1wou Rbu 1wou Rbu 1zcu Onu 1zcu Onu 1zcu Onu 1zcu Rbu 1wou Rbu 1wou Rbu 1zcu Onu 1zcu Onu 1zcu Rbu Rcu 7Bt0 Ni0 4nd0 Rbu 1wou Rbu 1wou Rbu 1zcu Onu 1zcu Onu 1zcu Rbu 1wou Rbu 1wou Rbu 1wou Rbu 1zcu Onu 1zcu Onu 1zcu Rbu 1wou Rbu 1wou Rbu 1zcu Onu 1zcu Onu 1zcu Onu 1zcu Rbu 1wou Rbu 1wou Rbu 1zcu Onu e9Au qn0 lxB0 mn0|57e3",\n "America/Boa_Vista|LMT -04 -03|42.E 40 30|0121212121212121212121212121212121|-2glvV.k HdKV.k 1cc0 1e10 1bX0 Ezd0 So0 1vA0 Mn0 1BB0 ML0 1BB0 zX0 qe10 xb0 2ep0 nz0 1C10 zX0 1C10 LX0 1C10 Mn0 H210 Rb0 1tB0 IL0 1Fd0 FX0 smp0 WL0 1tB0 2L0|62e2",\n "America/Bogota|LMT BMT -05 -04|4U.g 4U.g 50 40|01232|-3sTv3.I 1eIo0 38yo3.I 1PX0|90e5",\n "America/Boise|LMT PST PDT MST MWT MPT MDT|7I.N 80 70 70 60 60 60|01212134536363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363|-3tFE0 1nEe0 1nX0 11B0 1nX0 8C10 JCL0 8x20 ix0 QwN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 Dd0 1Kn0 LB0 1BX0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|21e4",\n "America/Cambridge_Bay|-00 MST MWT MPT MDT CST CDT EST|0 70 60 60 60 60 50 50|012314141414141414141414141414141414141414141414141414141414567541414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141|-21Jc0 RO90 8x20 ix0 14HB0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11A0 1nX0 2K0 WQ0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|15e2",\n "America/Campo_Grande|LMT -04 -03|3C.s 40 30|01212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-2glwl.w HdLl.w 1cc0 1e10 1bX0 Ezd0 So0 1vA0 Mn0 1BB0 ML0 1BB0 zX0 qe10 xb0 2ep0 nz0 1C10 zX0 1C10 LX0 1C10 Mn0 H210 Rb0 1tB0 IL0 1Fd0 FX0 1EN0 FX0 1HB0 Lz0 1EN0 Lz0 1C10 IL0 1HB0 Db0 1HB0 On0 1zd0 On0 1zd0 Lz0 1zd0 Rb0 1wN0 Wn0 1tB0 Rb0 1tB0 WL0 1tB0 Rb0 1zd0 On0 1HB0 FX0 1C10 Lz0 1Ip0 HX0 1zd0 On0 1HB0 IL0 1wp0 On0 1C10 Lz0 1C10 On0 1zd0 On0 1zd0 Rb0 1zd0 Lz0 1C10 Lz0 1C10 On0 1zd0 On0 1zd0 On0 1zd0 On0 1HB0 FX0|77e4",\n "America/Cancun|LMT CST EST CDT EDT|5L.4 60 50 50 40|01213132431313131313131313131313131313131312|-1UQG0 2q3C0 2tx0 wgP0 1lb0 14p0 1lb0 14o0 Lz0 xB0 14p0 1nX0 11B0 1nX0 1fB0 WL0 1fB0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 Dd0|63e4",\n "America/Caracas|LMT CMT -0430 -04|4r.I 4r.E 4u 40|012323|-3eLvw.g ROnX.U 28KM2.k 1IwOu kqo0|29e5",\n "America/Cayenne|LMT -04 -03|3t.k 40 30|012|-2mrwu.E 2gWou.E|58e3",\n "America/Chicago|LMT CST CDT EST CWT CPT|5O.A 60 50 50 50 50|012121212121212121212121212121212121213121212121214512121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-3tFG0 1nEe0 1nX0 11B0 1nX0 1wp0 TX0 WN0 1qL0 1cN0 WL0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 11z0 1o10 11z0 11B0 1Hz0 14p0 11z0 1o10 11z0 1qN0 WL0 1qN0 11z0 1o10 11z0 RB0 8x30 iw0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 s10 1Vz0 LB0 1BX0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|92e5",\n "America/Chihuahua|LMT MST CST MDT CDT|74.k 70 60 60 50|0121312424231313131313131313131313131313131313131313131313132|-1UQF0 deo0 8lz0 16p0 11z0 1dd0 2zQN0 1lb0 14p0 1lb0 14q0 1lb0 14p0 1nX0 11B0 1nX0 1fB0 WL0 1fB0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0|81e4",\n "America/Ciudad_Juarez|LMT MST CST MDT CDT|75.U 70 60 60 50|01213124242313131313131313131313131313131313131313131313131321313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131|-1UQF0 deo0 8lz0 16p0 11z0 1dd0 2zQN0 1lb0 14p0 1lb0 14q0 1lb0 14p0 1nX0 11B0 1nX0 1fB0 WL0 1fB0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 U10 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1wn0 cm0 EP0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|",\n "America/Costa_Rica|LMT SJMT CST CDT|5A.d 5A.d 60 50|01232323232|-3eLun.L 1fyo0 2lu0n.L Db0 1Kp0 Db0 pRB0 15b0 1kp0 mL0|12e5",\n "America/Phoenix|LMT MST MDT MWT|7s.i 70 60 60|012121313121|-3tFF0 1nEe0 1nX0 11B0 1nX0 SgN0 4Al1 Ap0 1db0 SWqX 1cL0|42e5",\n "America/Cuiaba|LMT -04 -03|3I.k 40 30|012121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-2glwf.E HdLf.E 1cc0 1e10 1bX0 Ezd0 So0 1vA0 Mn0 1BB0 ML0 1BB0 zX0 qe10 xb0 2ep0 nz0 1C10 zX0 1C10 LX0 1C10 Mn0 H210 Rb0 1tB0 IL0 1Fd0 FX0 1EN0 FX0 1HB0 Lz0 1EN0 Lz0 1C10 IL0 1HB0 Db0 1HB0 On0 1zd0 On0 1zd0 Lz0 1zd0 Rb0 1wN0 Wn0 1tB0 Rb0 1tB0 WL0 1tB0 Rb0 1zd0 On0 1HB0 FX0 4a10 HX0 1zd0 On0 1HB0 IL0 1wp0 On0 1C10 Lz0 1C10 On0 1zd0 On0 1zd0 Rb0 1zd0 Lz0 1C10 Lz0 1C10 On0 1zd0 On0 1zd0 On0 1zd0 On0 1HB0 FX0|54e4",\n "America/Danmarkshavn|LMT -03 -02 GMT|1e.E 30 20 0|01212121212121212121212121212121213|-2a5WJ.k 2z5fJ.k 19U0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 DC0|8",\n "America/Dawson_Creek|LMT PST PDT PWT PPT MST|80.U 80 70 70 70 70|01213412121212121212121212121212121212121212121212121212125|-3tofX.4 1nspX.4 1in0 UGp0 8x10 iy0 3NB0 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 ML0|12e3",\n "America/Dawson|LMT YST YDT YWT YPT YDDT PST PDT MST|9h.E 90 80 80 80 70 80 70 70|0121213415167676767676767676767676767676767676767676767676767676767676767676767676767676767678|-2MSeG.k GWpG.k 1in0 1o10 13V0 Ser0 8x00 iz0 LCL0 1fA0 jrA0 fNd0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1z90|13e2",\n "America/Denver|LMT MST MDT MWT MPT|6X.U 70 60 60 60|012121212134121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-3tFF0 1nEe0 1nX0 11B0 1nX0 11B0 1qL0 WN0 mn0 Ord0 8x20 ix0 LCN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 s10 1Vz0 LB0 1BX0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|26e5",\n "America/Detroit|LMT CST EST EWT EPT EDT|5w.b 60 50 40 40 40|0123425252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252|-2Cgir.N peqr.N 156L0 8x40 iv0 6fd0 11z0 JxX1 SMX 1cN0 1cL0 aW10 1cL0 s10 1Vz0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|37e5",\n "America/Edmonton|LMT MST MDT MWT MPT|7x.Q 70 60 60 60|0121212121212134121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-2yd4q.8 shdq.8 1in0 17d0 hz0 2dB0 1fz0 1a10 11z0 1qN0 WL0 1qN0 11z0 IGN0 8x20 ix0 3NB0 11z0 XQp0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|10e5",\n "America/Eirunepe|LMT -05 -04|4D.s 50 40|0121212121212121212121212121212121|-2glvk.w HdLk.w 1cc0 1e10 1bX0 Ezd0 So0 1vA0 Mn0 1BB0 ML0 1BB0 zX0 qe10 xb0 2ep0 nz0 1C10 zX0 1C10 LX0 1C10 Mn0 H210 Rb0 1tB0 IL0 1Fd0 FX0 dPB0 On0 yTd0 d5X0|31e3",\n "America/El_Salvador|LMT CST CDT|5U.M 60 50|012121|-1XiG3.c 2Fvc3.c WL0 1qN0 WL0|11e5",\n "America/Tijuana|LMT MST PST PDT PWT PPT|7M.4 70 80 70 70 70|012123245232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232|-1UQF0 4Q00 8mp0 8lz0 SN0 1cL0 pHB0 83r0 AU0 5MN0 1Rz0 38N0 Wn0 1qP0 11z0 1o10 11z0 3NA0 11A0 1o00 11A0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1o00 11A0 BUp0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 U10 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|20e5",\n "America/Fort_Nelson|LMT PST PDT PWT PPT MST|8a.L 80 70 70 70 70|012134121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121215|-3tofN.d 1nspN.d 1in0 UGp0 8x10 iy0 3NB0 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0|39e2",\n "America/Fort_Wayne|LMT CST CDT CWT CPT EST EDT|5I.C 60 50 50 50 50 40|0121212134121212121212121212151565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565|-3tFG0 1nEe0 1nX0 11B0 1nX0 QI10 Db0 RB0 8x30 iw0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 5Tz0 1o10 qLb0 1cL0 1cN0 1cL0 1qhd0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|",\n "America/Fortaleza|LMT -03 -02|2y 30 20|0121212121212121212121212121212121212121|-2glxq HdLq 1cc0 1e10 1bX0 Ezd0 So0 1vA0 Mn0 1BB0 ML0 1BB0 zX0 qe10 xb0 2ep0 nz0 1C10 zX0 1C10 LX0 1C10 Mn0 H210 Rb0 1tB0 IL0 1Fd0 FX0 1EN0 FX0 1HB0 Lz0 nsp0 WL0 1tB0 5z0 2mN0 On0|34e5",\n "America/Glace_Bay|LMT AST ADT AWT APT|3X.M 40 30 30 30|012134121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-2IsI0.c CwO0.c 1in0 UGp0 8x50 iu0 iq10 11z0 Jg10 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|19e3",\n "America/Godthab|LMT -03 -02 -01|3q.U 30 20 10|012121212121212121212121212121212121212121212121212121212121212121212121212121212121212123232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232|-2a5Ux.4 2z5dx.4 19U0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 2so0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00|17e3",\n "America/Goose_Bay|LMT NST NDT NST NDT NWT NPT AST ADT ADDT|41.E 3u.Q 2u.Q 3u 2u 2u 2u 40 30 20|0121343434343434356343434343434343434343434343434343434343437878787878787878787878787878787878787878787879787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787|-3tojW.k 1nspt.c 1in0 DXb0 2HbX.8 WL0 1qN0 WL0 1qN0 WL0 1tB0 TX0 1tB0 WL0 1qN0 WL0 1qN0 7UHu itu 1tB0 WL0 1qN0 WL0 1qN0 WL0 1qN0 WL0 1tB0 WL0 1ld0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 S10 g0u 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14n1 1lb0 14p0 1nW0 11C0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zcX Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|76e2",\n "America/Grand_Turk|LMT KMT EST EDT AST|4I.w 57.a 50 40 40|01232323232323232323232323232323232323232323232323232323232323232323232323243232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232|-3eLvf.s RK0m.C 2HHBQ.O 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 7jA0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|37e2",\n "America/Guatemala|LMT CST CDT|62.4 60 50|0121212121|-24KhV.U 2efXV.U An0 mtd0 Nz0 ifB0 17b0 zDB0 11z0|13e5",\n "America/Guayaquil|LMT QMT -05 -04|5j.k 5e 50 40|01232|-3eLuE.E 1DNzS.E 2uILK rz0|27e5",\n "America/Guyana|LMT -04 -0345 -03|3Q.D 40 3J 30|01231|-2mf87.l 8Hc7.l 2r7bJ Ey0f|80e4",\n "America/Halifax|LMT AST ADT AWT APT|4e.o 40 30 30 30|0121212121212121212121212121212121212121212121212134121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-2IsHJ.A xzzJ.A 1db0 3I30 1in0 3HX0 IL0 1E10 ML0 1yN0 Pb0 1Bd0 Mn0 1Bd0 Rz0 1w10 Xb0 1w10 LX0 1w10 Xb0 1w10 Lz0 1C10 Jz0 1E10 OL0 1yN0 Un0 1qp0 Xb0 1qp0 11X0 1w10 Lz0 1HB0 LX0 1C10 FX0 1w10 Xb0 1qp0 Xb0 1BB0 LX0 1td0 Xb0 1qp0 Xb0 Rf0 8x50 iu0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 3Qp0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 3Qp0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 6i10 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|39e4",\n "America/Havana|LMT HMT CST CDT|5t.s 5t.A 50 40|0123232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232|-3eLuu.w 1qx00.8 72zu.o ML0 sld0 An0 1Nd0 Db0 1Nd0 An0 6Ep0 An0 1Nd0 An0 JDd0 Mn0 1Ap0 On0 1fd0 11X0 1qN0 WL0 1wp0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 14n0 1ld0 14L0 1kN0 15b0 1kp0 1cL0 1cN0 1fz0 1a10 1fz0 1fB0 11z0 14p0 1nX0 11B0 1nX0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 14n0 1ld0 14n0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 1a10 1in0 1a10 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1cM0 1cM0 1fA0 17c0 1o00 11A0 1qM0 11A0 1o00 11A0 1o00 14o0 1lc0 14o0 1lc0 11A0 6i00 Rc0 1wo0 U00 1tA0 Rc0 1wo0 U00 1wo0 U00 1zc0 U00 1qM0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0|21e5",\n "America/Hermosillo|LMT MST CST MDT|7n.Q 70 60 60|01213121313131|-1UQF0 deo0 8lz0 16p0 11z0 1dd0 otX0 2bmP0 1lb0 14p0 1lb0 14p0 1lb0|64e4",\n "America/Indiana/Knox|LMT CST CDT CWT CPT EST|5K.u 60 50 50 50 50|01212134121212121212121212121212121212151212121212121212121212121212121212121212121212121252121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-3tFG0 1nEe0 1nX0 11B0 1nX0 SgN0 8x30 iw0 3NB0 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 1fz0 1cN0 1cL0 1cN0 11z0 1o10 11z0 1o10 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 3Cn0 8wp0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 s10 1Vz0 LB0 1BX0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 z8o0 1o00 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|",\n "America/Indiana/Marengo|LMT CST CDT CWT CPT EST EDT|5J.n 60 50 50 50 50 40|01212134121212121212121215656565656525656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565|-3tFG0 1nEe0 1nX0 11B0 1nX0 SgN0 8x30 iw0 dyN0 11z0 6fd0 11z0 1o10 11z0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 jrz0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 s10 1VA0 LA0 1BX0 1e6p0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|",\n "America/Indiana/Petersburg|LMT CST CDT CWT CPT EST EDT|5N.7 60 50 50 50 50 40|012121341212121212121212121215121212121212121212121252125656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565|-3tFG0 1nEe0 1nX0 11B0 1nX0 SgN0 8x30 iw0 njX0 WN0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 3Fb0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 s10 1Vz0 LB0 1BX0 1cN0 1fz0 1a10 1fz0 19co0 1o00 Rd0 1zb0 Oo0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|",\n "America/Indiana/Tell_City|LMT CST CDT CWT CPT EST EDT|5L.3 60 50 50 50 50 40|012121341212121212121212121512165652121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-3tFG0 1nEe0 1nX0 11B0 1nX0 SgN0 8x30 iw0 njX0 WN0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 8wn0 1cN0 1cL0 1cN0 1cK0 1cN0 1cL0 1qhd0 1o00 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|",\n "America/Indiana/Vevay|LMT CST CDT CWT CPT EST EDT|5E.g 60 50 50 50 50 40|0121213415656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565|-3tFG0 1nEe0 1nX0 11B0 1nX0 SgN0 8x30 iw0 kPB0 Awn0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1lnd0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|",\n "America/Indiana/Vincennes|LMT CST CDT CWT CPT EST EDT|5O.7 60 50 50 50 50 40|012121341212121212121212121212121565652125656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565|-3tFG0 1nEe0 1nX0 11B0 1nX0 SgN0 8x30 iw0 1o10 11z0 g0p0 11z0 1o10 11z0 1qL0 WN0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 1fz0 1cN0 WL0 1qN0 1cL0 1cN0 1cL0 1cN0 caL0 1cL0 1cN0 1cL0 1qhd0 1o00 Rd0 1zb0 Oo0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|",\n "America/Indiana/Winamac|LMT CST CDT CWT CPT EST EDT|5K.p 60 50 50 50 50 40|012121341212121212121212121212121212121565652165656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565|-3tFG0 1nEe0 1nX0 11B0 1nX0 SgN0 8x30 iw0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 1fz0 1cN0 1cL0 1cN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 jrz0 1cL0 1cN0 1cL0 1qhd0 1o00 Rd0 1za0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|",\n "America/Inuvik|-00 PST PDT MDT MST|0 80 70 60 70|01212121212121213434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434|-FnA0 L3K0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cK0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|35e2",\n "America/Iqaluit|-00 EWT EPT EST EDT CST CDT|0 40 40 50 40 60 50|0123434343434343434343434343434343434343434343434343434343456343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343|-16K00 7nX0 iv0 14HB0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11C0 1nX0 11A0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|67e2",\n "America/Jamaica|LMT KMT EST EDT|57.a 57.a 50 40|01232323232323232323232|-3eLuQ.O RK00 2uM1Q.O 1Vz0 LB0 1BX0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0|94e4",\n "America/Juneau|LMT LMT PST PWT PPT PDT YDT YST AKST AKDT|-f2.j 8V.F 80 70 70 70 80 90 90 80|0123425252525252525252525252625252578989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898|-48Pzs.L 1jVwq.s 1EX12.j 8x10 iy0 Vo10 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 s10 1Vz0 LB0 1BX0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cM0 1cM0 1cL0 1cN0 1fz0 1a10 1fz0 co0 10q0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|33e3",\n "America/Kentucky/Louisville|LMT CST CDT CWT CPT EST EDT|5H.2 60 50 50 50 50 40|01212121213412121212121212121212121212565656565656525656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565|-3tFG0 1nEe0 1nX0 11B0 1nX0 3Fd0 Nb0 LPd0 11z0 RB0 8x30 iw0 1nX1 e0X 9vd0 WL0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 xz0 gso0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 s10 1VA0 LA0 1BX0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|",\n "America/Kentucky/Monticello|LMT CST CDT CWT CPT EST EDT|5D.o 60 50 50 50 50 40|01212134121212121212121212121212121212121212121212121212121212121212121212565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565|-3tFG0 1nEe0 1nX0 11B0 1nX0 SgN0 8x30 iw0 SWp0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 s10 1Vz0 LB0 1BX0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11A0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|",\n "America/La_Paz|LMT CMT BST -04|4w.A 4w.A 3w.A 40|0123|-3eLvr.o 1FIo0 13b0|19e5",\n "America/Lima|LMT LMT -05 -04|58.c 58.A 50 40|01232323232323232|-3eLuP.M JcM0.o 1bDzP.o zX0 1aN0 1cL0 1cN0 1cL0 1PrB0 zX0 1O10 zX0 6Gp0 zX0 98p0 zX0|11e6",\n "America/Los_Angeles|LMT PST PDT PWT PPT|7Q.W 80 70 70 70|0121213412121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-3tFE0 1nEe0 1nX0 11B0 1nX0 SgN0 8x10 iy0 5Wp1 1VaX 3dA0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1a00 1fA0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 s10 1Vz0 LB0 1BX0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|15e6",\n "America/Maceio|LMT -03 -02|2m.Q 30 20|012121212121212121212121212121212121212121|-2glxB.8 HdLB.8 1cc0 1e10 1bX0 Ezd0 So0 1vA0 Mn0 1BB0 ML0 1BB0 zX0 qe10 xb0 2ep0 nz0 1C10 zX0 1C10 LX0 1C10 Mn0 H210 Rb0 1tB0 IL0 1Fd0 FX0 1EN0 FX0 1HB0 Lz0 dMN0 Lz0 8Q10 WL0 1tB0 5z0 2mN0 On0|93e4",\n "America/Managua|LMT MMT CST EST CDT|5J.8 5J.c 60 50 50|01232424232324242|-3eLue.Q 1Mhc0.4 1yAMe.M 4mn0 9Up0 Dz0 1K10 Dz0 s3F0 1KH0 DB0 9In0 k8p0 19X0 1o30 11y0|22e5",\n "America/Manaus|LMT -04 -03|40.4 40 30|01212121212121212121212121212121|-2glvX.U HdKX.U 1cc0 1e10 1bX0 Ezd0 So0 1vA0 Mn0 1BB0 ML0 1BB0 zX0 qe10 xb0 2ep0 nz0 1C10 zX0 1C10 LX0 1C10 Mn0 H210 Rb0 1tB0 IL0 1Fd0 FX0 dPB0 On0|19e5",\n "America/Martinique|LMT FFMT AST ADT|44.k 44.k 40 30|01232|-3eLvT.E PTA0 2LPbT.E 19X0|39e4",\n "America/Matamoros|LMT CST CDT|6u 60 50|0121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-1UQG0 2FjC0 1nX0 i6p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 1fB0 WL0 1fB0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 U10 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|45e4",\n "America/Mazatlan|LMT MST CST MDT|75.E 70 60 60|01213121313131313131313131313131313131313131313131313131313131|-1UQF0 deo0 8lz0 16p0 11z0 1dd0 otX0 2bmP0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 1fB0 WL0 1fB0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0|44e4",\n "America/Menominee|LMT CST CDT CWT CPT EST|5O.r 60 50 50 50 50|012121341212152121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-3pdG9.x 1jce9.x 1nX0 11B0 1nX0 SgN0 8x30 iw0 1o10 11z0 LCN0 1fz0 6410 9Jb0 1cM0 s10 1Vz0 LB0 1BX0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|85e2",\n "America/Merida|LMT CST EST CDT|5W.s 60 50 50|0121313131313131313131313131313131313131313131313131313131|-1UQG0 2q3C0 24n0 wG10 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 1fB0 WL0 1fB0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0|11e5",\n "America/Metlakatla|LMT LMT PST PWT PPT PDT AKST AKDT|-fd.G 8K.i 80 70 70 70 90 80|0123425252525252525252525252525252526767672676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676|-48Pzs.L 1jVwf.5 1EX1d.G 8x10 iy0 Vo10 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 s10 1Vz0 LB0 1BX0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1hU10 Rd0 1zb0 Op0 1zb0 Op0 1zb0 uM0 jB0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|14e2",\n "America/Mexico_City|LMT MST CST MDT CDT CWT|6A.A 70 60 60 50 50|012131242425242424242424242424242424242424242424242424242424242424242|-1UQF0 deo0 8lz0 16p0 11z0 1dd0 gEn0 TX0 3xd0 Jb0 6zB0 SL0 e5d0 17b0 1Pff0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 1fB0 WL0 1fB0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0|20e6",\n "America/Miquelon|LMT AST -03 -02|3I.E 40 30 20|012323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232|-2mxUf.k 2LHcf.k gQ10 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|61e2",\n "America/Moncton|LMT EST AST ADT AWT APT|4j.8 50 40 30 30 30|0123232323232323232323245232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232|-3txvE.Q J4ME.Q CwN0 1in0 zAo0 An0 1Nd0 An0 1Nd0 An0 1Nd0 An0 1Nd0 An0 1Nd0 An0 1K10 Lz0 1zB0 NX0 1u10 Wn0 S20 8x50 iu0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 11z0 1o10 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 3Cp0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14n1 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 ReX 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|64e3",\n "America/Monterrey|LMT MST CST MDT CDT|6F.g 70 60 60 50|012131242424242424242424242424242424242424242424242424242424242|-1UQG0 dep0 8lz0 16p0 11z0 1dd0 2gmp0 1nX0 i6p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 1fB0 WL0 1fB0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0|41e5",\n "America/Montevideo|LMT MMT -04 -03 -0330 -0230 -02 -0130|3I.P 3I.P 40 30 3u 2u 20 1u|012343434343434343434343435353636353636375363636363636363636363636363636363636363636363|-2tRUf.9 sVc0 8jcf.9 1db0 1dcu 1cLu 1dcu 1cLu ircu 11zu 1o0u 11zu 1o0u 11zu 1o0u 11zu 1qMu WLu 1qMu WLu 1fAu 1cLu 1o0u 11zu NAu 3jXu zXu Dq0u 19Xu pcu jz0 cm10 19X0 6tB0 1fbu 3o0u jX0 4vB0 xz0 3Cp0 mmu 1a10 IMu Db0 4c10 uL0 1Nd0 An0 1SN0 uL0 mp0 28L0 iPB0 un0 1SN0 xz0 1zd0 Lz0 1zd0 Rb0 1zd0 On0 1wp0 Rb0 s8p0 1fB0 1ip0 11z0 1ld0 14n0 1o10 11z0 1o10 11z0 1o10 14n0 1ld0 14n0 1ld0 14n0 1o10 11z0 1o10 11z0 1o10 11z0|17e5",\n "America/Toronto|LMT EST EDT EWT EPT|5h.w 50 40 40 40|012121212121212121212121212121212121212121212123412121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-32B6G.s UFdG.s 1in0 11Wu 1nzu 1fD0 WJ0 1wr0 Nb0 1Ap0 On0 1zd0 On0 1wp0 TX0 1tB0 TX0 1tB0 TX0 1tB0 WL0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 4kM0 8x40 iv0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 1qL0 11B0 1nX0 11B0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 11z0 1o10 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|65e5",\n "America/New_York|LMT EST EDT EWT EPT|4U.2 50 40 40 40|012121212121212121212121212121212121212121212121213412121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-3tFH0 1nEe0 1nX0 11B0 1nX0 11B0 1qL0 1a10 11z0 1qN0 WL0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 11z0 1o10 11z0 RB0 8x40 iv0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 s10 1Vz0 LB0 1BX0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|21e6",\n "America/Nome|LMT LMT NST NWT NPT BST BDT YST AKST AKDT|-cW.m b1.C b0 a0 a0 b0 a0 90 90 80|01234256565656565656565656565656565678989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898|-48Pzs.L 1jVyu.p 1EX1W.m 8wW0 iB0 Qlb0 52O0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 s10 1Vz0 LB0 1BX0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 cl0 10q0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|38e2",\n "America/Noronha|LMT -02 -01|29.E 20 10|0121212121212121212121212121212121212121|-2glxO.k HdKO.k 1cc0 1e10 1bX0 Ezd0 So0 1vA0 Mn0 1BB0 ML0 1BB0 zX0 qe10 xb0 2ep0 nz0 1C10 zX0 1C10 LX0 1C10 Mn0 H210 Rb0 1tB0 IL0 1Fd0 FX0 1EN0 FX0 1HB0 Lz0 nsp0 WL0 1tB0 2L0 2pB0 On0|30e2",\n "America/North_Dakota/Beulah|LMT MST MDT MWT MPT CST CDT|6L.7 70 60 60 60 60 50|0121213412121212121212121212121212121212121212121212121212121212121212121212121212121212121212125656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565|-3tFF0 1nEe0 1nX0 11B0 1nX0 SgN0 8x20 ix0 QwN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 s10 1Vz0 LB0 1BX0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Oo0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|",\n "America/North_Dakota/Center|LMT MST MDT MWT MPT CST CDT|6J.c 70 60 60 60 60 50|0121213412121212121212121212121212121212121212121212121212125656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565|-3tFF0 1nEe0 1nX0 11B0 1nX0 SgN0 8x20 ix0 QwN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 s10 1Vz0 LB0 1BX0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14o0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|",\n "America/North_Dakota/New_Salem|LMT MST MDT MWT MPT CST CDT|6J.D 70 60 60 60 60 50|0121213412121212121212121212121212121212121212121212121212121212121212121212121212565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565|-3tFF0 1nEe0 1nX0 11B0 1nX0 SgN0 8x20 ix0 QwN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 s10 1Vz0 LB0 1BX0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14o0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|",\n "America/Ojinaga|LMT MST CST MDT CDT|6V.E 70 60 60 50|0121312424231313131313131313131313131313131313131313131313132424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242|-1UQF0 deo0 8lz0 16p0 11z0 1dd0 2zQN0 1lb0 14p0 1lb0 14q0 1lb0 14p0 1nX0 11B0 1nX0 1fB0 WL0 1fB0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 U10 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1wn0 Rc0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|23e3",\n "America/Paramaribo|LMT PMT PMT -0330 -03|3E.E 3E.Q 3E.A 3u 30|01234|-2nDUj.k Wqo0.c qanX.I 1yVXN.o|24e4",\n "America/Port-au-Prince|LMT PPMT EST EDT|4N.k 4N 50 40|012323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232|-3eLva.E 15RLX.E 2FnMb 19X0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14q0 1o00 11A0 1o00 11A0 1o00 14o0 1lc0 14o0 1lc0 14o0 1o00 11A0 1o00 11A0 1o00 14o0 1lc0 14o0 1lc0 i6n0 1nX0 11B0 1nX0 d430 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 3iN0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|23e5",\n "America/Rio_Branco|LMT -05 -04|4v.c 50 40|01212121212121212121212121212121|-2glvs.M HdLs.M 1cc0 1e10 1bX0 Ezd0 So0 1vA0 Mn0 1BB0 ML0 1BB0 zX0 qe10 xb0 2ep0 nz0 1C10 zX0 1C10 LX0 1C10 Mn0 H210 Rb0 1tB0 IL0 1Fd0 FX0 NBd0 d5X0|31e4",\n "America/Porto_Velho|LMT -04 -03|4f.A 40 30|012121212121212121212121212121|-2glvI.o HdKI.o 1cc0 1e10 1bX0 Ezd0 So0 1vA0 Mn0 1BB0 ML0 1BB0 zX0 qe10 xb0 2ep0 nz0 1C10 zX0 1C10 LX0 1C10 Mn0 H210 Rb0 1tB0 IL0 1Fd0 FX0|37e4",\n "America/Punta_Arenas|LMT SMT -05 -04 -03|4H.E 4G.J 50 40 30|01213132323232323232343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434|-3eLvg.k MJbX.5 fJAh.f 5knG.J 1Vzh.f jRAG.J 1pbh.f 11d0 1oL0 11d0 1oL0 11d0 1oL0 11d0 1pb0 11d0 nHX0 op0 blz0 ko0 Qeo0 WL0 1zd0 On0 1ip0 11z0 1o10 11z0 1qN0 WL0 1ld0 14n0 1qN0 WL0 1qN0 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 WL0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 WL0 1qN0 1cL0 1cN0 11z0 1o10 11z0 1qN0 WL0 1fB0 19X0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 17b0 1ip0 11z0 1ip0 1fz0 1fB0 11z0 1qN0 WL0 1qN0 WL0 1qN0 WL0 1qN0 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 17b0 1ip0 11z0 1o10 19X0 1fB0 1nX0 G10 1EL0 Op0 1zb0 Rd0 1wn0 Rd0 46n0 Ap0|",\n "America/Winnipeg|LMT CST CDT CWT CPT|6s.A 60 50 50 50|0121212134121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-3kLtv.o 1a3bv.o WL0 3ND0 1in0 Jap0 Rb0 aCN0 8x30 iw0 1tB0 11z0 1ip0 11z0 1o10 11z0 1o10 11z0 1rd0 10L0 1op0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 1cL0 1cN0 11z0 6i10 WL0 6i10 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1a00 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1a00 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 14o0 1lc0 14o0 1o00 11A0 1o00 11A0 1o00 14o0 1lc0 14o0 1lc0 14o0 1o00 11A0 1o00 11A0 1o00 14o0 1lc0 14o0 1lc0 14o0 1lc0 14o0 1o00 11A0 1o00 11A0 1o00 14o0 1lc0 14o0 1lc0 14o0 1o00 11A0 1o00 11A0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|66e4",\n "America/Rankin_Inlet|-00 CST CDT EST|0 60 50 50|01212121212121212121212121212121212121212121212121212121212321212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-vDc0 Bjk0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|26e2",\n "America/Recife|LMT -03 -02|2j.A 30 20|0121212121212121212121212121212121212121|-2glxE.o HdLE.o 1cc0 1e10 1bX0 Ezd0 So0 1vA0 Mn0 1BB0 ML0 1BB0 zX0 qe10 xb0 2ep0 nz0 1C10 zX0 1C10 LX0 1C10 Mn0 H210 Rb0 1tB0 IL0 1Fd0 FX0 1EN0 FX0 1HB0 Lz0 nsp0 WL0 1tB0 2L0 2pB0 On0|33e5",\n "America/Regina|LMT MST MDT MWT MPT CST|6W.A 70 60 60 60 60|012121212121212121212121341212121212121212121212121215|-2AD51.o uHe1.o 1in0 s2L0 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 11z0 66N0 1cL0 1cN0 19X0 1fB0 1cL0 1fB0 1cL0 1cN0 1cL0 M30 8x20 ix0 1ip0 1cL0 1ip0 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 11z0 1o10 11z0 3NB0 1cL0 1cN0|19e4",\n "America/Resolute|-00 CST CDT EST|0 60 50 50|01212121212121212121212121212121212121212121212121212121212321212121212321212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-SnA0 103I0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|229",\n "America/Santarem|LMT -04 -03|3C.M 40 30|0121212121212121212121212121212|-2glwl.c HdLl.c 1cc0 1e10 1bX0 Ezd0 So0 1vA0 Mn0 1BB0 ML0 1BB0 zX0 qe10 xb0 2ep0 nz0 1C10 zX0 1C10 LX0 1C10 Mn0 H210 Rb0 1tB0 IL0 1Fd0 FX0 NBd0|21e4",\n "America/Santiago|LMT SMT -05 -04 -03|4G.J 4G.J 50 40 30|0121313232323232323432343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434|-3eLvh.f MJc0 fJAh.f 5knG.J 1Vzh.f jRAG.J 1pbh.f 11d0 1oL0 11d0 1oL0 11d0 1oL0 11d0 1pb0 11d0 nHX0 op0 9Bz0 hX0 1q10 ko0 Qeo0 WL0 1zd0 On0 1ip0 11z0 1o10 11z0 1qN0 WL0 1ld0 14n0 1qN0 WL0 1qN0 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 WL0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 WL0 1qN0 1cL0 1cN0 11z0 1o10 11z0 1qN0 WL0 1fB0 19X0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 17b0 1ip0 11z0 1ip0 1fz0 1fB0 11z0 1qN0 WL0 1qN0 WL0 1qN0 WL0 1qN0 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 17b0 1ip0 11z0 1o10 19X0 1fB0 1nX0 G10 1EL0 Op0 1zb0 Rd0 1wn0 Rd0 46n0 Ap0 1Nb0 Ap0 1Nb0 Ap0 1zb0 11B0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 11B0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0|62e5",\n "America/Santo_Domingo|LMT SDMT EST EDT -0430 AST|4D.A 4E 50 40 4u 40|012324242424242525|-3eLvk.o 1Jic0.o 1lJMk Mn0 6sp0 Lbu 1Cou yLu 1RAu wLu 1QMu xzu 1Q0u xXu 1PAu 13jB0 e00|29e5",\n "America/Sao_Paulo|LMT -03 -02|36.s 30 20|01212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-2glwR.w HdKR.w 1cc0 1e10 1bX0 Ezd0 So0 1vA0 Mn0 1BB0 ML0 1BB0 zX0 pTd0 PX0 2ep0 nz0 1C10 zX0 1C10 LX0 1C10 Mn0 H210 Rb0 1tB0 IL0 1Fd0 FX0 1EN0 FX0 1HB0 Lz0 1EN0 Lz0 1C10 IL0 1HB0 Db0 1HB0 On0 1zd0 On0 1zd0 Lz0 1zd0 Rb0 1wN0 Wn0 1tB0 Rb0 1tB0 WL0 1tB0 Rb0 1zd0 On0 1HB0 FX0 1C10 Lz0 1Ip0 HX0 1zd0 On0 1HB0 IL0 1wp0 On0 1C10 Lz0 1C10 On0 1zd0 On0 1zd0 Rb0 1zd0 Lz0 1C10 Lz0 1C10 On0 1zd0 On0 1zd0 On0 1zd0 On0 1HB0 FX0|20e6",\n "America/Scoresbysund|LMT -02 -01 +00|1r.Q 20 10 0|012132323232323232323232323232323232323232323232323232323232323232323232323232323232323232121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-2a5Ww.8 2z5ew.8 1a00 1cK0 1cL0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 2pA0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00|452",\n "America/Sitka|LMT LMT PST PWT PPT PDT YST AKST AKDT|-eW.L 91.d 80 70 70 70 90 90 80|0123425252525252525252525252525252567878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787|-48Pzs.L 1jVwu 1EX0W.L 8x10 iy0 Vo10 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 s10 1Vz0 LB0 1BX0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 co0 10q0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|90e2",\n "America/St_Johns|LMT NST NDT NST NDT NWT NPT NDDT|3u.Q 3u.Q 2u.Q 3u 2u 2u 2u 1u|012121212121212121212121212121212121213434343434343435634343434343434343434343434343434343434343434343434343434343434343434343434343434343437343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343|-3tokt.8 1l020 14L0 1nB0 1in0 1gm0 Dz0 1JB0 1cL0 1cN0 1cL0 1fB0 19X0 1fB0 19X0 1fB0 19X0 1fB0 19X0 1fB0 1cL0 1cN0 1cL0 1fB0 19X0 1fB0 19X0 1fB0 19X0 1fB0 19X0 1fB0 1cL0 1fB0 19X0 1fB0 19X0 10O0 eKX.8 19X0 1iq0 WL0 1qN0 WL0 1qN0 WL0 1tB0 TX0 1tB0 WL0 1qN0 WL0 1qN0 7UHu itu 1tB0 WL0 1qN0 WL0 1qN0 WL0 1qN0 WL0 1tB0 WL0 1ld0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14n1 1lb0 14p0 1nW0 11C0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zcX Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|11e4",\n "America/Swift_Current|LMT MST MDT MWT MPT CST|7b.k 70 60 60 60 60|012134121212121212121215|-2AD4M.E uHdM.E 1in0 UGp0 8x20 ix0 1o10 17b0 1ip0 11z0 1o10 11z0 1o10 11z0 isN0 1cL0 3Cp0 1cL0 1cN0 11z0 1qN0 WL0 pMp0|16e3",\n "America/Tegucigalpa|LMT CST CDT|5M.Q 60 50|01212121|-1WGGb.8 2ETcb.8 WL0 1qN0 WL0 GRd0 AL0|11e5",\n "America/Thule|LMT AST ADT|4z.8 40 30|012121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-2a5To.Q 31NBo.Q 1cL0 1cN0 1cL0 1fB0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|656",\n "America/Vancouver|LMT PST PDT PWT PPT|8c.s 80 70 70 70|01213412121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-3tofL.w 1nspL.w 1in0 UGp0 8x10 iy0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|23e5",\n "America/Whitehorse|LMT YST YDT YWT YPT YDDT PST PDT MST|90.c 90 80 80 80 70 80 70 70|0121213415167676767676767676767676767676767676767676767676767676767676767676767676767676767678|-2MSeX.M GWpX.M 1in0 1o10 13V0 Ser0 8x00 iz0 LCL0 1fA0 LA0 ytd0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1z90|23e3",\n "America/Yakutat|LMT LMT YST YWT YPT YDT AKST AKDT|-eF.5 9i.T 90 80 80 80 90 80|0123425252525252525252525252525252526767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676|-48Pzs.L 1jVwL.G 1EX1F.5 8x00 iz0 Vo10 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 s10 1Vz0 LB0 1BX0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 cn0 10q0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|642",\n "Antarctica/Casey|-00 +08 +11|0 -80 -b0|012121212121212121|-2q00 1DjS0 T90 40P0 KL0 blz0 3m10 1o30 14k0 1kr0 12l0 1o01 14kX 1lf1 14kX 1lf1 13bX|10",\n "Antarctica/Davis|-00 +07 +05|0 -70 -50|01012121|-vyo0 iXt0 alj0 1D7v0 VB0 3Wn0 KN0|70",\n "Pacific/Port_Moresby|LMT PMMT +10|-9M.E -9M.w -a0|012|-3D8VM.E AvA0.8|25e4",\n "Antarctica/Macquarie|-00 AEST AEDT|0 -a0 -b0|0121012121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212|-2OPc0 Fb40 1a00 4SK0 1ayy0 Lvs0 1cM0 1o00 Rc0 1wo0 Rc0 1wo0 U00 1wo0 LA0 1C00 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 11A0 1qM0 WM0 1qM0 Oo0 1zc0 Oo0 1zc0 Oo0 1wo0 WM0 1tA0 WM0 1tA0 U00 1tA0 U00 1tA0 11A0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 11A0 1o00 1io0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1cM0 1a00 1io0 1cM0 1cM0 1cM0 1cM0 3Co0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0|1",\n "Antarctica/Mawson|-00 +06 +05|0 -60 -50|012|-CEo0 2fyk0|60",\n "Pacific/Auckland|LMT NZMT NZST NZST NZDT|-bD.4 -bu -cu -c0 -d0|012131313131313131313131313134343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434|-46jLD.4 2nEO9.4 Lz0 1tB0 11zu 1o0u 11zu 1o0u 11zu 1o0u 14nu 1lcu 14nu 1lcu 1lbu 11Au 1nXu 11Au 1nXu 11Au 1nXu 11Au 1nXu 11Au 1qLu WMu 1qLu 11Au 1n1bu IM0 1C00 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1qM0 14o0 1lc0 14o0 1lc0 14o0 1lc0 17c0 1io0 17c0 1io0 17c0 1io0 17c0 1lc0 14o0 1lc0 14o0 1lc0 17c0 1io0 17c0 1io0 17c0 1lc0 14o0 1lc0 14o0 1lc0 17c0 1io0 17c0 1io0 17c0 1io0 17c0 1io0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1io0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1io0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1io0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1io0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1io0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1io0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1io0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1io0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1io0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1io0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1io0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1io0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1io0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1io0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1io0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1io0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00|14e5",\n "Antarctica/Palmer|-00 -03 -04 -02|0 30 40 20|0121212121213121212121212121212121212121212121212121212121212121212121212121212121|-cao0 nD0 1vd0 SL0 1vd0 17z0 1cN0 1fz0 1cN0 1cL0 1cN0 asn0 Db0 jsN0 14N0 11z0 1o10 11z0 1qN0 WL0 1qN0 WL0 1qN0 1cL0 1cN0 11z0 1o10 11z0 1qN0 WL0 1fB0 19X0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 17b0 1ip0 11z0 1ip0 1fz0 1fB0 11z0 1qN0 WL0 1qN0 WL0 1qN0 WL0 1qN0 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 17b0 1ip0 11z0 1o10 19X0 1fB0 1nX0 G10 1EL0 Op0 1zb0 Rd0 1wn0 Rd0 46n0 Ap0|40",\n "Antarctica/Rothera|-00 -03|0 30|01|gOo0|130",\n "Asia/Riyadh|LMT +03|-36.Q -30|01|-TvD6.Q|57e5",\n "Antarctica/Troll|-00 +00 +02|0 0 -20|01212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|1puo0 hd0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00|40",\n "Antarctica/Vostok|-00 +07 +05|0 -70 -50|01012|-tjA0 1rWh0 1Nj0 1aTv0|25",\n "Europe/Berlin|LMT CET CEST CEMT|-R.s -10 -20 -30|012121212121212321212321212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-36RcR.s UbWR.s 11d0 1iO0 11A0 1o00 11A0 Qrc0 6i00 WM0 1fA0 1cM0 1cM0 1cM0 kL0 Nc0 m10 WM0 1ao0 1cp0 dX0 jz0 Dd0 1io0 17c0 1fA0 1a00 1ehA0 1a00 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00|41e5",\n "Asia/Almaty|LMT +05 +06 +07|-57.M -50 -60 -70|0123232323232323232323212323232323232323232323232321|-1Pc57.M eUo7.M 23CL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 2pB0 IM0 rX0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 L4m0|15e5",\n "Asia/Amman|LMT EET EEST +03|-2n.I -20 -30 -30|0121212121212121212121212121212121212121212121212121212121212121212121212121212121212123|-1yW2n.I 1HiMn.I KL0 1oN0 11b0 1oN0 11b0 1pd0 1dz0 1cp0 11b0 1op0 11b0 fO10 1db0 1e10 1cL0 1cN0 1cL0 1cN0 1fz0 1pd0 10n0 1ld0 14n0 1hB0 15b0 1ip0 19X0 1cN0 1cL0 1cN0 17b0 1ld0 14o0 1lc0 17c0 1io0 17c0 1io0 17c0 1So0 y00 1fc0 1dc0 1co0 1dc0 1cM0 1cM0 1cM0 1o00 11A0 1lc0 17c0 1cM0 1cM0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 4bX0 Dd0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 LA0 1C00|25e5",\n "Asia/Anadyr|LMT +12 +13 +14 +11|-bN.U -c0 -d0 -e0 -b0|01232121212121212121214121212121212121212121212121212121212141|-1PcbN.U eUnN.U 23CL0 1db0 2q10 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 2pB0 IM0 rX0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 2sp0 WM0|13e3",\n "Asia/Aqtau|LMT +04 +05 +06|-3l.4 -40 -50 -60|012323232323232323232123232312121212121212121212|-1Pc3l.4 eUnl.4 24PX0 2pX0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 2pB0 IM0 rX0 1cM0 1cM0 1cM0 1cM0 1cM0 1cN0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0|15e4",\n "Asia/Aqtobe|LMT +04 +05 +06|-3M.E -40 -50 -60|0123232323232323232321232323232323232323232323232|-1Pc3M.E eUnM.E 23CL0 3Db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 2pB0 IM0 rX0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0|27e4",\n "Asia/Ashgabat|LMT +04 +05 +06|-3R.w -40 -50 -60|0123232323232323232323212|-1Pc3R.w eUnR.w 23CL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 2pB0 IM0|41e4",\n "Asia/Atyrau|LMT +03 +05 +06 +04|-3r.I -30 -50 -60 -40|01232323232323232323242323232323232324242424242|-1Pc3r.I eUor.I 24PW0 2pX0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 2pB0 IM0 rX0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 2sp0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0|",\n "Asia/Baghdad|LMT BMT +03 +04|-2V.E -2V.A -30 -40|0123232323232323232323232323232323232323232323232323232|-3eLCV.E 18ao0.4 2ACnV.A 11b0 1cp0 1dz0 1dd0 1db0 1cN0 1cp0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1de0 1dc0 1dc0 1dc0 1cM0 1dc0 1cM0 1dc0 1cM0 1dc0 1dc0 1dc0 1cM0 1dc0 1cM0 1dc0 1cM0 1dc0 1dc0 1dc0 1cM0 1dc0 1cM0 1dc0 1cM0 1dc0 1dc0 1dc0 1cM0 1dc0 1cM0 1dc0 1cM0 1dc0|66e5",\n "Asia/Qatar|LMT +04 +03|-3q.8 -40 -30|012|-21Jfq.8 27BXq.8|96e4",\n "Asia/Baku|LMT +03 +04 +05|-3j.o -30 -40 -50|01232323232323232323232123232323232323232323232323232323232323232|-1Pc3j.o 1jUoj.o WCL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 2pB0 1cM0 9Je0 1o00 11z0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00|27e5",\n "Asia/Bangkok|LMT BMT +07|-6G.4 -6G.4 -70|012|-3D8SG.4 1C000|15e6",\n "Asia/Barnaul|LMT +06 +07 +08|-5z -60 -70 -80|0123232323232323232323212323232321212121212121212121212121212121212|-21S5z pCnz 23CL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 2pB0 IM0 rX0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 p90 LE0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 8Hz0 3rd0|",\n "Asia/Beirut|LMT EET EEST|-2m -20 -30|0121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-3D8Om 1BWom 1on0 1410 1db0 19B0 1in0 1ip0 WL0 1lQp0 11b0 1oN0 11b0 1oN0 11b0 1pd0 11b0 1oN0 11b0 q6N0 En0 1oN0 11b0 1oN0 11b0 1oN0 11b0 1pd0 11b0 1oN0 11b0 1op0 11b0 dA10 17b0 1iN0 17b0 1iN0 17b0 1iN0 17b0 1vB0 SL0 1mp0 13z0 1iN0 17b0 1iN0 17b0 1jd0 12n0 1a10 1cL0 1cN0 1cL0 1cN0 1cL0 1fB0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0|22e5",\n "Asia/Bishkek|LMT +05 +06 +07|-4W.o -50 -60 -70|012323232323232323232321212121212121212121212121212|-1Pc4W.o eUnW.o 23CL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 2e00 1tX0 17b0 1ip0 17b0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1cPu 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0|87e4",\n "Asia/Brunei|LMT +0730 +08 +0820 +09|-7l.k -7u -80 -8k -90|0123232323232323242|-1KITl.k gDbP.k 6ynu AnE 1O0k AnE 1NAk AnE 1NAk AnE 1NAk AnE 1O0k AnE 1NAk AnE pAk 8Fz0|42e4",\n "Asia/Kolkata|LMT HMT MMT IST +0630|-5R.s -5R.k -5l.a -5u -6u|01234343|-4Fg5R.s BKo0.8 1rDcw.a 1r2LP.a 1un0 HB0 7zX0|15e6",\n "Asia/Chita|LMT +08 +09 +10|-7x.Q -80 -90 -a0|012323232323232323232321232323232323232323232323232323232323232312|-21Q7x.Q pAnx.Q 23CL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 2pB0 IM0 rX0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 8Hz0 3re0|33e4",\n "Asia/Ulaanbaatar|LMT +07 +08 +09|-77.w -70 -80 -90|012323232323232323232323232323232323232323232323232|-2APH7.w 2Uko7.w cKn0 1db0 1dd0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1fB0 1cL0 1cN0 1cL0 1cN0 1cL0 6hD0 11z0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 kEp0 1cJ0 1cP0 1cJ0|12e5",\n "Asia/Shanghai|LMT CST CDT|-85.H -80 -90|012121212121212121212121212121|-2M0U5.H Iuo5.H 18n0 OjB0 Rz0 11d0 1wL0 A10 8HX0 1G10 Tz0 1ip0 1jX0 1cN0 11b0 1oN0 aL0 1tU30 Rb0 1o10 11z0 1qN0 WL0 1qN0 11z0 1o10 11z0 1o10 11z0|23e6",\n "Asia/Colombo|LMT MMT +0530 +06 +0630|-5j.o -5j.w -5u -60 -6u|012342432|-3D8Rj.o 13inX.Q 1rFbN.w 1zzu 7Apu 23dz0 11zu n3cu|22e5",\n "Asia/Dhaka|LMT HMT +0630 +0530 +06 +07|-61.E -5R.k -6u -5u -60 -70|01232454|-3eLG1.E 26008.k 1unn.k HB0 m6n0 2kxbu 1i00|16e6",\n "Asia/Damascus|LMT EET EEST +03|-2p.c -20 -30 -30|01212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212123|-21Jep.c Hep.c 17b0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1xRB0 11X0 1oN0 10L0 1pB0 11b0 1oN0 10L0 1mp0 13X0 1oN0 11b0 1pd0 11b0 1oN0 11b0 1oN0 11b0 1oN0 11b0 1pd0 11b0 1oN0 11b0 1oN0 11b0 1oN0 11b0 1pd0 11b0 1oN0 Nb0 1AN0 Nb0 bcp0 19X0 1gp0 19X0 3ld0 1xX0 Vd0 1Bz0 Sp0 1vX0 10p0 1dz0 1cN0 1cL0 1db0 1db0 1g10 1an0 1ap0 1db0 1fd0 1db0 1cN0 1db0 1dd0 1db0 1cp0 1dz0 1c10 1dX0 1cN0 1db0 1dd0 1db0 1cN0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1db0 1cN0 1db0 1cN0 19z0 1fB0 1qL0 11B0 1on0 Wp0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0|26e5",\n "Asia/Dili|LMT +08 +09|-8m.k -80 -90|01212|-2le80 1dnX0 1nfA0 Xld0|19e4",\n "Asia/Dubai|LMT +04|-3F.c -40|01|-21JfF.c|39e5",\n "Asia/Dushanbe|LMT +05 +06 +07|-4z.c -50 -60 -70|012323232323232323232321|-1Pc4z.c eUnz.c 23CL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 2hB0|76e4",\n "Asia/Famagusta|LMT EET EEST +03|-2f.M -20 -30 -30|0121212121212121212121212121212121212121212121212121212121212121212121212121212121212312121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-1Vc2f.M 2a3cf.M 1cL0 1qp0 Xz0 19B0 19X0 1fB0 1db0 1cp0 1cL0 1fB0 19X0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1fB0 1cL0 1cN0 1cL0 1cN0 1o30 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 15U0 2Ks0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00|",\n "Asia/Gaza|LMT EET EEST IST IDT|-2h.Q -20 -30 -20 -30|0121212121212121212121212121212121234343434343434343434343434343431212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-2MBCh.Q 1Azeh.Q MM0 iM0 4JA0 10o0 1pA0 10M0 1pA0 16o0 1jA0 16o0 1jA0 pBa0 Vz0 1oN0 11b0 1oO0 10N0 1pz0 10N0 1pb0 10N0 1pb0 10N0 1pb0 10N0 1pz0 10N0 1pb0 10N0 1pb0 11d0 1oL0 dW0 hfB0 Db0 1fB0 Rb0 bXB0 gM0 8Q00 IM0 1wo0 TX0 1HB0 IL0 1s10 10n0 1o10 WL0 1zd0 On0 1ld0 11z0 1o10 14n0 1o10 14n0 1nd0 12n0 1nd0 Xz0 1q10 12n0 M10 C00 17c0 1io0 17c0 1io0 17c0 1o00 1cL0 1fB0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 17c0 1io0 18N0 1bz0 19z0 1gp0 1610 1iL0 11z0 1o10 14o0 1lA1 SKX 1xd1 MKX 1AN0 1a00 1fA0 1cL0 1cN0 1nX0 1210 1nA0 1210 1qL0 WN0 1qL0 WN0 1qL0 11c0 1on0 11B0 1o00 11A0 1qo0 XA0 1qp0 1cN0 1cL0 1a10 1fz0 17d0 1in0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1lb0 14p0 1in0 17d0 1cL0 1cN0 19X0 1fB0 14n0 jB0 2L0 11B0 WL0 gN0 8n0 11B0 TX0 gN0 bb0 11B0 On0 jB0 dX0 11B0 Lz0 gN0 mn0 WN0 IL0 gN0 pb0 WN0 Db0 jB0 rX0 11B0 xz0 gN0 xz0 11B0 rX0 jB0 An0 11B0 pb0 gN0 IL0 WN0 mn0 gN0 Lz0 WN0 gL0 jB0 On0 11B0 bb0 gN0 TX0 11B0 5z0 jB0 WL0 11B0 2L0 jB0 11z0 1ip0 19X0 1cN0 1cL0 17d0 1in0 14p0 1lb0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1nX0 14p0 1in0 17d0 1fz0 1a10 19X0 1fB0 17b0 gN0 2L0 WN0 14n0 gN0 5z0 WN0 WL0 jB0 8n0 11B0 Rb0 gN0 dX0 11B0 Lz0 jB0 gL0 11B0 IL0 jB0 mn0 WN0 FX0 gN0 rX0 WN0 An0 jB0 uL0 11B0 uL0 gN0 An0 11B0 rX0 gN0 Db0 11B0 mn0 jB0 FX0 11B0 jz0 gN0 On0 WN0 dX0 jB0 Rb0 WN0 bb0 jB0 TX0 11B0 5z0 gN0 11z0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0|18e5",\n "Asia/Hebron|LMT EET EEST IST IDT|-2k.n -20 -30 -20 -30|012121212121212121212121212121212123434343434343434343434343434343121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-2MBCk.n 1Azek.n MM0 iM0 4JA0 10o0 1pA0 10M0 1pA0 16o0 1jA0 16o0 1jA0 pBa0 Vz0 1oN0 11b0 1oO0 10N0 1pz0 10N0 1pb0 10N0 1pb0 10N0 1pb0 10N0 1pz0 10N0 1pb0 10N0 1pb0 11d0 1oL0 dW0 hfB0 Db0 1fB0 Rb0 bXB0 gM0 8Q00 IM0 1wo0 TX0 1HB0 IL0 1s10 10n0 1o10 WL0 1zd0 On0 1ld0 11z0 1o10 14n0 1o10 14n0 1nd0 12n0 1nd0 Xz0 1q10 12n0 M10 C00 17c0 1io0 17c0 1io0 17c0 1o00 1cL0 1fB0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 17c0 1io0 18N0 1bz0 19z0 1gp0 1610 1iL0 12L0 1mN0 14o0 1lc0 Tb0 1xd1 MKX bB0 cn0 1cN0 1a00 1fA0 1cL0 1cN0 1nX0 1210 1nA0 1210 1qL0 WN0 1qL0 WN0 1qL0 11c0 1on0 11B0 1o00 11A0 1qo0 XA0 1qp0 1cN0 1cL0 1a10 1fz0 17d0 1in0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1lb0 14p0 1in0 17d0 1cL0 1cN0 19X0 1fB0 14n0 jB0 2L0 11B0 WL0 gN0 8n0 11B0 TX0 gN0 bb0 11B0 On0 jB0 dX0 11B0 Lz0 gN0 mn0 WN0 IL0 gN0 pb0 WN0 Db0 jB0 rX0 11B0 xz0 gN0 xz0 11B0 rX0 jB0 An0 11B0 pb0 gN0 IL0 WN0 mn0 gN0 Lz0 WN0 gL0 jB0 On0 11B0 bb0 gN0 TX0 11B0 5z0 jB0 WL0 11B0 2L0 jB0 11z0 1ip0 19X0 1cN0 1cL0 17d0 1in0 14p0 1lb0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1nX0 14p0 1in0 17d0 1fz0 1a10 19X0 1fB0 17b0 gN0 2L0 WN0 14n0 gN0 5z0 WN0 WL0 jB0 8n0 11B0 Rb0 gN0 dX0 11B0 Lz0 jB0 gL0 11B0 IL0 jB0 mn0 WN0 FX0 gN0 rX0 WN0 An0 jB0 uL0 11B0 uL0 gN0 An0 11B0 rX0 gN0 Db0 11B0 mn0 jB0 FX0 11B0 jz0 gN0 On0 WN0 dX0 jB0 Rb0 WN0 bb0 jB0 TX0 11B0 5z0 gN0 11z0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0|25e4",\n "Asia/Ho_Chi_Minh|LMT PLMT +07 +08 +09|-76.u -76.u -70 -80 -90|0123423232|-2yC76.u bK00 1h7b6.u 5lz0 18o0 3Oq0 k5c0 aVX0 BAM0|90e5",\n "Asia/Hong_Kong|LMT HKT HKST HKWT JST|-7A.G -80 -90 -8u -90|0123412121212121212121212121212121212121212121212121212121212121212121|-2CFH0 1taO0 Hc0 xUu 9tBu 11z0 1tDu Rc0 1wo0 11A0 1cM0 11A0 1o00 11A0 1o00 11A0 1o00 14o0 1o00 11A0 1nX0 U10 1tz0 U10 1wn0 Rd0 1wn0 U10 1tz0 U10 1tz0 U10 1tz0 U10 1wn0 Rd0 1wn0 Rd0 1wn0 U10 1tz0 U10 1tz0 17d0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 s10 1Vz0 1cN0 1cL0 1cN0 1cL0 6fd0 14n0|73e5",\n "Asia/Hovd|LMT +06 +07 +08|-66.A -60 -70 -80|012323232323232323232323232323232323232323232323232|-2APG6.A 2Uko6.A cKn0 1db0 1dd0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1fB0 1cL0 1cN0 1cL0 1cN0 1cL0 6hD0 11z0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 kEp0 1cJ0 1cP0 1cJ0|81e3",\n "Asia/Irkutsk|LMT IMT +07 +08 +09|-6V.5 -6V.5 -70 -80 -90|012343434343434343434343234343434343434343434343434343434343434343|-3D8SV.5 1Bxc0 pjXV.5 23CL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 2pB0 IM0 rX0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 8Hz0|60e4",\n "Europe/Istanbul|LMT IMT EET EEST +03 +04|-1T.Q -1U.U -20 -30 -30 -40|01232323232323232323232323232323232323232323232345423232323232323232323232323232323232323232323232323232323232323234|-3D8NT.Q 1ePXW.U dzzU.U 11b0 8tB0 1on0 1410 1db0 19B0 1in0 3Rd0 Un0 1oN0 11b0 zSN0 CL0 mp0 1Vz0 1gN0 8yn0 1yp0 ML0 1kp0 17b0 1ip0 17b0 1fB0 19X0 1ip0 19X0 1ip0 17b0 qdB0 38L0 1jd0 Tz0 l6O0 11A0 WN0 1qL0 TB0 1tX0 U10 1tz0 11B0 1in0 17d0 z90 cne0 pb0 2Cp0 1800 14o0 1dc0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1a00 1fA0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WO0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 Xc0 1qo0 WM0 1qM0 11A0 1o00 1200 1nA0 11A0 1tA0 U00 15w0|13e6",\n "Asia/Jakarta|LMT BMT +0720 +0730 +09 +08 WIB|-77.c -77.c -7k -7u -90 -80 -70|012343536|-49jH7.c 2hiLL.c luM0 mPzO 8vWu 6kpu 4PXu xhcu|31e6",\n "Asia/Jayapura|LMT +09 +0930 WIT|-9m.M -90 -9u -90|0123|-1uu9m.M sMMm.M L4nu|26e4",\n "Asia/Jerusalem|LMT JMT IST IDT IDDT|-2k.S -2k.E -20 -30 -40|012323232323232432323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232|-3D8Ok.S 1wvA0.e SyOk.E MM0 iM0 4JA0 10o0 1pA0 10M0 1pA0 16o0 1jA0 16o0 1jA0 3LA0 Eo0 oo0 1co0 1dA0 16o0 10M0 1jc0 1tA0 14o0 1cM0 1a00 11A0 1Nc0 Ao0 1Nc0 Ao0 1Ko0 LA0 1o00 WM0 EQK0 Db0 1fB0 Rb0 bXB0 gM0 8Q00 IM0 1wo0 TX0 1HB0 IL0 1s10 10n0 1o10 WL0 1zd0 On0 1ld0 11z0 1o10 14n0 1o10 14n0 1nd0 12n0 1nd0 Xz0 1q10 12n0 1hB0 1dX0 1ep0 1aL0 1eN0 17X0 1nf0 11z0 1tB0 19W0 1e10 17b0 1ep0 1gL0 18N0 1fz0 1eN0 17b0 1gq0 1gn0 19d0 1dz0 1c10 17X0 1hB0 1gn0 19d0 1dz0 1c10 17X0 1kp0 1dz0 1c10 1aL0 1eN0 1oL0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1oL0|81e4",\n "Asia/Kabul|LMT +04 +0430|-4A.M -40 -4u|012|-3eLEA.M 2dTcA.M|46e5",\n "Asia/Kamchatka|LMT +11 +12 +13|-ay.A -b0 -c0 -d0|012323232323232323232321232323232323232323232323232323232323212|-1SLKy.A ivXy.A 23CL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 2pB0 IM0 rX0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 2sp0 WM0|18e4",\n "Asia/Karachi|LMT +0530 +0630 +05 PKT PKST|-4s.c -5u -6u -50 -50 -60|012134545454|-2xoss.c 1qOKW.c 7zX0 eup0 LqMu 1fy00 1cL0 dK10 11b0 1610 1jX0|24e6",\n "Asia/Urumqi|LMT +06|-5O.k -60|01|-1GgtO.k|32e5",\n "Asia/Kathmandu|LMT +0530 +0545|-5F.g -5u -5J|012|-21JhF.g 2EGMb.g|12e5",\n "Asia/Khandyga|LMT +08 +09 +10 +11|-92.d -80 -90 -a0 -b0|0123232323232323232323212323232323232323232323232343434343434343432|-21Q92.d pAp2.d 23CL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 2pB0 IM0 rX0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 qK0 yN0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 17V0 7zD0|66e2",\n "Asia/Krasnoyarsk|LMT +06 +07 +08|-6b.q -60 -70 -80|01232323232323232323232123232323232323232323232323232323232323232|-21Hib.q prAb.q 23CL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 2pB0 IM0 rX0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 8Hz0|10e5",\n "Asia/Kuala_Lumpur|LMT SMT +07 +0720 +0730 +09 +08|-6T.p -6T.p -70 -7k -7u -90 -80|01234546|-2M0ST.p aIM0 17anT.p l5XE 17bO 8Fyu 1so10|71e5",\n "Asia/Macau|LMT CST +09 +10 CDT|-7y.a -80 -90 -a0 -90|012323214141414141414141414141414141414141414141414141414141414141414141|-2CFHy.a 1uqKy.a PX0 1kn0 15B0 11b0 4Qq0 1oM0 11c0 1ko0 1u00 11A0 1cM0 11c0 1o00 11A0 1o00 11A0 1oo0 1400 1o00 11A0 1o00 U00 1tA0 U00 1wo0 Rc0 1wru U10 1tz0 U10 1tz0 U10 1tz0 U10 1wn0 Rd0 1wn0 Rd0 1wn0 U10 1tz0 U10 1tz0 17d0 1cK0 1cO0 1cK0 1cO0 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 s10 1Vz0 1cN0 1cL0 1cN0 1cL0 6fd0 14n0|57e4",\n "Asia/Magadan|LMT +10 +11 +12|-a3.c -a0 -b0 -c0|012323232323232323232321232323232323232323232323232323232323232312|-1Pca3.c eUo3.c 23CL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 2pB0 IM0 rX0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 8Hz0 3Cq0|95e3",\n "Asia/Makassar|LMT MMT +08 +09 WITA|-7V.A -7V.A -80 -90 -80|01234|-21JjV.A vfc0 myLV.A 8ML0|15e5",\n "Asia/Manila|LMT LMT PST PDT JST|fU -84 -80 -90 -90|01232423232|-54m84 2clc0 1vfc4 AL0 cK10 65X0 mXB0 vX0 VK10 1db0|24e6",\n "Asia/Nicosia|LMT EET EEST|-2d.s -20 -30|01212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-1Vc2d.s 2a3cd.s 1cL0 1qp0 Xz0 19B0 19X0 1fB0 1db0 1cp0 1cL0 1fB0 19X0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1fB0 1cL0 1cN0 1cL0 1cN0 1o30 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00|32e4",\n "Asia/Novokuznetsk|LMT +06 +07 +08|-5M.M -60 -70 -80|012323232323232323232321232323232323232323232323232323232323212|-1PctM.M eULM.M 23CL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 2pB0 IM0 rX0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 2sp0 WM0|55e4",\n "Asia/Novosibirsk|LMT +06 +07 +08|-5v.E -60 -70 -80|0123232323232323232323212323212121212121212121212121212121212121212|-21Qnv.E pAFv.E 23CL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 2pB0 IM0 rX0 1cM0 1cM0 ml0 Os0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 8Hz0 4eN0|15e5",\n "Asia/Omsk|LMT +05 +06 +07|-4R.u -50 -60 -70|01232323232323232323232123232323232323232323232323232323232323232|-224sR.u pMLR.u 23CL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 2pB0 IM0 rX0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 8Hz0|12e5",\n "Asia/Oral|LMT +03 +05 +06 +04|-3p.o -30 -50 -60 -40|01232323232323232424242424242424242424242424242|-1Pc3p.o eUop.o 23CK0 3Db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 2pB0 1cM0 1fA0 1cM0 1cM0 IM0 1EM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0|27e4",\n "Asia/Pontianak|LMT PMT +0730 +09 +08 WITA WIB|-7h.k -7h.k -7u -90 -80 -80 -70|012324256|-2ua7h.k XE00 munL.k 8Rau 6kpu 4PXu xhcu Wqnu|23e4",\n "Asia/Pyongyang|LMT KST JST KST|-8n -8u -90 -90|012313|-2um8n 97XR 1lTzu 2Onc0 6BA0|29e5",\n "Asia/Qostanay|LMT +04 +05 +06|-4e.s -40 -50 -60|0123232323232323232321232323232323232323232323232|-1Pc4e.s eUoe.s 23CL0 3Db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 2pB0 IM0 rX0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 Mv90|",\n "Asia/Qyzylorda|LMT +04 +05 +06|-4l.Q -40 -50 -60|01232323232323232323232323232323232323232323232|-1Pc4l.Q eUol.Q 23CL0 3Db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 3ao0 1EM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 zQl0|73e4",\n "Asia/Rangoon|LMT RMT +0630 +09|-6o.L -6o.L -6u -90|01232|-3D8So.L 1BnA0 SmnS.L 7j9u|48e5",\n "Asia/Sakhalin|LMT +09 +11 +12 +10|-9u.M -90 -b0 -c0 -a0|01232323232323232323232423232323232424242424242424242424242424242|-2AGVu.M 1BoMu.M 1qFa0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 2pB0 IM0 rX0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 2pB0 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 8Hz0 3rd0|58e4",\n "Asia/Samarkand|LMT +04 +05 +06|-4r.R -40 -50 -60|01232323232323232323232|-1Pc4r.R eUor.R 23CL0 3Db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0|36e4",\n "Asia/Seoul|LMT KST JST KST KDT KDT|-8r.Q -8u -90 -90 -a0 -9u|012343434343151515151515134343|-2um8r.Q 97XV.Q 1m1zu 6CM0 Fz0 1kN0 14n0 1kN0 14L0 1zd0 On0 69B0 2I0u OL0 1FB0 Rb0 1qN0 TX0 1tB0 TX0 1tB0 TX0 1tB0 TX0 2ap0 12FBu 11A0 1o00 11A0|23e6",\n "Asia/Srednekolymsk|LMT +10 +11 +12|-ae.Q -a0 -b0 -c0|01232323232323232323232123232323232323232323232323232323232323232|-1Pcae.Q eUoe.Q 23CL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 2pB0 IM0 rX0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 8Hz0|35e2",\n "Asia/Taipei|LMT CST JST CDT|-86 -80 -90 -90|012131313131313131313131313131313131313131|-30bk6 1FDc6 joM0 1yo0 Tz0 1ip0 1jX0 1cN0 11b0 1oN0 11b0 1oN0 11b0 1oN0 11b0 10N0 1BX0 10p0 1pz0 10p0 1pz0 10p0 1db0 1dd0 1db0 1cN0 1db0 1cN0 1db0 1cN0 1db0 1BB0 ML0 1Bd0 ML0 uq10 1db0 1cN0 1db0 97B0 AL0|74e5",\n "Asia/Tashkent|LMT +05 +06 +07|-4B.b -50 -60 -70|012323232323232323232321|-1Pc4B.b eUnB.b 23CL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 2pB0|23e5",\n "Asia/Tbilisi|LMT TBMT +03 +04 +05|-2X.b -2X.b -30 -40 -50|01234343434343434343434323232343434343434343434323|-3D8OX.b 1LUM0 1jUnX.b WCL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 2pB0 1cK0 1cL0 1cN0 1cL0 1cN0 2pz0 1cL0 1fB0 3Nz0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 An0 Os0 WM0|11e5",\n "Asia/Tehran|LMT TMT +0330 +0430 +04 +05|-3p.I -3p.I -3u -4u -40 -50|012345423232323232323232323232323232323232323232323232323232323232323232|-2btDp.I Llc0 1FHaT.I 1pc0 120u Rc0 XA0 Wou JX0 1dB0 1en0 pNB0 UL0 1cN0 1dz0 1cp0 1dz0 1cp0 1dz0 1cp0 1dz0 1cp0 1dz0 1cN0 1dz0 1cp0 1dz0 1cp0 1dz0 1cp0 1dz0 1cN0 1dz0 1cp0 1dz0 1cp0 1dz0 1cp0 1dz0 1cN0 1dz0 64p0 1dz0 1cN0 1dz0 1cp0 1dz0 1cp0 1dz0 1cp0 1dz0 1cN0 1dz0 1cp0 1dz0 1cp0 1dz0 1cp0 1dz0 1cN0 1dz0 1cp0 1dz0 1cp0 1dz0 1cp0 1dz0 1cN0 1dz0 1cp0 1dz0|14e6",\n "Asia/Thimphu|LMT +0530 +06|-5W.A -5u -60|012|-Su5W.A 1BGMs.A|79e3",\n "Asia/Tokyo|LMT JST JDT|-9i.X -90 -a0|0121212121|-3jE90 2qSo0 Rc0 1lc0 14o0 1zc0 Oo0 1zc0 Oo0|38e6",\n "Asia/Tomsk|LMT +06 +07 +08|-5D.P -60 -70 -80|0123232323232323232323212323232323232323232323212121212121212121212|-21NhD.P pxzD.P 23CL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 2pB0 IM0 rX0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 co0 1bB0 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 8Hz0 3Qp0|10e5",\n "Asia/Ust-Nera|LMT +08 +09 +12 +11 +10|-9w.S -80 -90 -c0 -b0 -a0|012343434343434343434345434343434343434343434343434343434343434345|-21Q9w.S pApw.S 23CL0 1d90 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 2pB0 IM0 rX0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 17V0 7zD0|65e2",\n "Asia/Vladivostok|LMT +09 +10 +11|-8L.v -90 -a0 -b0|01232323232323232323232123232323232323232323232323232323232323232|-1SJIL.v itXL.v 23CL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 2pB0 IM0 rX0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 8Hz0|60e4",\n "Asia/Yakutsk|LMT +08 +09 +10|-8C.W -80 -90 -a0|01232323232323232323232123232323232323232323232323232323232323232|-21Q8C.W pAoC.W 23CL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 2pB0 IM0 rX0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 8Hz0|28e4",\n "Asia/Yekaterinburg|LMT PMT +04 +05 +06|-42.x -3J.5 -40 -50 -60|012343434343434343434343234343434343434343434343434343434343434343|-2ag42.x 7mQh.s qBvJ.5 23CL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 2pB0 IM0 rX0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 8Hz0|14e5",\n "Asia/Yerevan|LMT +03 +04 +05|-2W -30 -40 -50|0123232323232323232323212121212323232323232323232323232323232|-1Pc2W 1jUnW WCL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 2pB0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 4RX0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0|13e5",\n "Atlantic/Azores|LMT HMT -02 -01 +00 WET WEST|1G.E 1S.w 20 10 0 0 -10|012323232323232323232323232323232323232323232343234323432343232323232323232323232323232323232323232323434343434343434343434356434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343|-3tomh.k 18aoh.k aPX0 Sp0 M00 1vb0 SN0 1vb0 SN0 1vb0 Td0 1vb0 SN0 1vb0 6600 18o0 3I00 17c0 1fA0 1a00 1io0 1a00 1io0 17c0 3I00 17c0 1cM0 1cM0 3Fc0 1cM0 1a00 1fA0 1io0 17c0 1cM0 1cM0 1a00 1fA0 1io0 1qM0 Dc0 1uo0 1c00 1dc0 1400 gL0 IM0 s10 U00 dX0 Rc0 pd0 Rc0 gL0 Oo0 pd0 Rc0 gL0 Oo0 pd0 14o0 1cM0 1cP0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 CT90 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 Ap0 An0 wo0 Eo0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00|25e4",\n "Atlantic/Bermuda|LMT BMT BST AST ADT|4j.i 4j.i 3j.i 40 30|0121213434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343|-3eLvE.G 16mo0 1bb0 1i10 11X0 ru30 thbE.G 1PX0 11B0 1tz0 Rd0 1zb0 Op0 1zb0 3I10 Lz0 1EN0 FX0 1HB0 FX0 1Kp0 Db0 1Kp0 Db0 1Kp0 FX0 93d0 11z0 GAp0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|65e3",\n "Atlantic/Canary|LMT -01 WET WEST|11.A 10 0 -10|01232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232|-1UtaW.o XPAW.o 1lAK0 1a10 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00|54e4",\n "Atlantic/Cape_Verde|LMT -02 -01|1y.4 20 10|01212|-2ldW0 1eEo0 7zX0 1djf0|50e4",\n "Atlantic/Faroe|LMT WET WEST|r.4 0 -10|01212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-2uSnw.U 2Wgow.U 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00|49e3",\n "Atlantic/Madeira|LMT FMT -01 +00 +01 WET WEST|17.A 17.A 10 0 -10 0 -10|01232323232323232323232323232323232323232323234323432343234323232323232323232323232323232323232323232356565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565|-3tomQ.o 18anQ.o aPX0 Sp0 M00 1vb0 SN0 1vb0 SN0 1vb0 Td0 1vb0 SN0 1vb0 6600 18o0 3I00 17c0 1fA0 1a00 1io0 1a00 1io0 17c0 3I00 17c0 1cM0 1cM0 3Fc0 1cM0 1a00 1fA0 1io0 17c0 1cM0 1cM0 1a00 1fA0 1io0 1qM0 Dc0 1uo0 1c00 1dc0 1400 gL0 IM0 s10 U00 dX0 Rc0 pd0 Rc0 gL0 Oo0 pd0 Rc0 gL0 Oo0 pd0 14o0 1cM0 1cP0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 BJ90 1a00 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cN0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00|27e4",\n "Atlantic/South_Georgia|LMT -02|2q.8 20|01|-3eLxx.Q|30",\n "Atlantic/Stanley|LMT SMT -04 -03 -02|3P.o 3P.o 40 30 20|0123232323232323434323232323232323232323232323232323232323232323232323|-3eLw8.A S200 12bA8.A 19X0 1fB0 19X0 1ip0 19X0 1fB0 19X0 1fB0 19X0 1fB0 Cn0 1Cc10 WL0 1qL0 U10 1tz0 2mN0 WN0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1tz0 U10 1tz0 WN0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1tz0 WN0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qN0 U10 1wn0 Rd0 1wn0 U10 1tz0 U10 1tz0 U10 1tz0 U10 1tz0 U10 1wn0 U10 1tz0 U10 1tz0 U10|21e2",\n "Australia/Sydney|LMT AEST AEDT|-a4.Q -a0 -b0|01212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212|-32oW4.Q RlC4.Q xc0 10jc0 yM0 1cM0 1cM0 1fA0 1a00 17c00 LA0 1C00 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 14o0 1o00 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 U00 1qM0 WM0 1tA0 WM0 1tA0 U00 1tA0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 11A0 1o00 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 11A0 1o00 WM0 1qM0 14o0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0|40e5",\n "Australia/Adelaide|LMT ACST ACST ACDT|-9e.k -90 -9u -au|012323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323|-32oVe.k ak0e.k H1Bu xc0 10jc0 yM0 1cM0 1cM0 1fA0 1a00 17c00 LA0 1C00 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 U00 1qM0 WM0 1tA0 WM0 1tA0 U00 1tA0 U00 1tA0 Oo0 1zc0 WM0 1qM0 Rc0 1zc0 U00 1tA0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 11A0 1o00 WM0 1qM0 14o0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0|11e5",\n "Australia/Brisbane|LMT AEST AEDT|-ac.8 -a0 -b0|012121212121212121|-32Bmc.8 Ry2c.8 xc0 10jc0 yM0 1cM0 1cM0 1fA0 1a00 17c00 LA0 H1A0 Oo0 1zc0 Oo0 1zc0 Oo0|20e5",\n "Australia/Broken_Hill|LMT AEST ACST ACST ACDT|-9p.M -a0 -90 -9u -au|0123434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434|-32oVp.M 3Lzp.M 6wp0 H1Bu xc0 10jc0 yM0 1cM0 1cM0 1fA0 1a00 17c00 LA0 1C00 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 14o0 1o00 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 U00 1qM0 WM0 1tA0 WM0 1tA0 U00 1tA0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 11A0 1o00 WM0 1qM0 14o0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0|18e3",\n "Australia/Hobart|LMT AEST AEDT|-9N.g -a0 -b0|01212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212|-3109N.g Pk1N.g 1a00 1qM0 Oo0 1zc0 Oo0 TAo0 yM0 1cM0 1cM0 1fA0 1a00 VfA0 1cM0 1o00 Rc0 1wo0 Rc0 1wo0 U00 1wo0 LA0 1C00 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 11A0 1qM0 WM0 1qM0 Oo0 1zc0 Oo0 1zc0 Oo0 1wo0 WM0 1tA0 WM0 1tA0 U00 1tA0 U00 1tA0 11A0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 11A0 1o00 1io0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1cM0 1a00 1io0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0|21e4",\n "Australia/Darwin|LMT ACST ACST ACDT|-8H.k -90 -9u -au|01232323232|-32oUH.k ajXH.k H1Bu xc0 10jc0 yM0 1cM0 1cM0 1fA0 1a00|12e4",\n "Australia/Eucla|LMT +0845 +0945|-8z.s -8J -9J|01212121212121212121|-30nIz.s PkpO.s xc0 10jc0 yM0 1cM0 1cM0 1gSo0 Oo0 l5A0 Oo0 iJA0 G00 zU00 IM0 1qM0 11A0 1o00 11A0|368",\n "Australia/Lord_Howe|LMT AEST +1030 +1130 +11|-aA.k -a0 -au -bu -b0|01232323232424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424|-32oWA.k 3tzAA.k 1zdu Rb0 1zd0 On0 1zd0 On0 1zd0 On0 1zd0 TXu 1qMu WLu 1tAu WLu 1tAu TXu 1tAu Onu 1zcu Onu 1zcu Onu 1zcu Rbu 1zcu Onu 1zcu Onu 1zcu 11zu 1o0u 11zu 1o0u 11zu 1o0u 11zu 1qMu WLu 11Au 1nXu 1qMu 11zu 1o0u 11zu 1o0u 11zu 1qMu WLu 1qMu 11zu 1o0u WLu 1qMu 14nu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1fzu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1fzu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1fzu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1fzu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1fzu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1fzu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1fzu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1fzu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1fzu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1fzu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1fzu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1fzu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1fzu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1fzu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1fzu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1fzu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu|347",\n "Australia/Lindeman|LMT AEST AEDT|-9T.U -a0 -b0|0121212121212121212121|-32BlT.U Ry1T.U xc0 10jc0 yM0 1cM0 1cM0 1fA0 1a00 17c00 LA0 H1A0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0|10",\n "Australia/Melbourne|LMT AEST AEDT|-9D.Q -a0 -b0|01212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212|-32oVD.Q RlBD.Q xc0 10jc0 yM0 1cM0 1cM0 1fA0 1a00 17c00 LA0 1C00 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 U00 1qM0 WM0 1qM0 11A0 1tA0 U00 1tA0 U00 1tA0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 11A0 1o00 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 11A0 1o00 WM0 1qM0 14o0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0|39e5",\n "Australia/Perth|LMT AWST AWDT|-7H.o -80 -90|01212121212121212121|-30nHH.o PkpH.o xc0 10jc0 yM0 1cM0 1cM0 1gSo0 Oo0 l5A0 Oo0 iJA0 G00 zU00 IM0 1qM0 11A0 1o00 11A0|18e5",\n "Europe/Brussels|LMT BMT WET CET CEST WEST|-h.u -h.u 0 -10 -20 -10|012343434325252525252525252525252525252525252525252525434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343|-3D8Mh.u u1Ah.u SO00 3zX0 11c0 1iO0 11A0 1o00 11A0 my0 Ic0 1qM0 Rc0 1EM0 UM0 1u00 10o0 1io0 1io0 17c0 1a00 1fA0 1cM0 1cM0 1io0 17c0 1fA0 1a00 1io0 1a30 1io0 17c0 1fA0 1a00 1io0 17c0 1cM0 1cM0 1a00 1io0 1cM0 1cM0 1a00 1fA0 1io0 17c0 1cM0 1cM0 1a00 1fA0 1io0 1qM0 Dc0 y00 5Wn0 WM0 1fA0 1cM0 16M0 1iM0 16M0 1C00 Uo0 1eeo0 1a00 1fA0 1cM0 1cM0 1cM0 1fA0 1a00 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00|21e5",\n "Pacific/Easter|LMT EMT -07 -06 -05|7h.s 7h.s 70 60 50|0123232323232323232323232323234343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434|-3eLsG.w 1HRc0 1s4IG.w WL0 1zd0 On0 1ip0 11z0 1o10 11z0 1qN0 WL0 1ld0 14n0 1qN0 WL0 1qN0 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 WL0 1qN0 11z0 1o10 2pA0 11z0 1o10 11z0 1qN0 WL0 1qN0 WL0 1qN0 1cL0 1cN0 11z0 1o10 11z0 1qN0 WL0 1fB0 19X0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 17b0 1ip0 11z0 1ip0 1fz0 1fB0 11z0 1qN0 WL0 1qN0 WL0 1qN0 WL0 1qN0 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 17b0 1ip0 11z0 1o10 19X0 1fB0 1nX0 G10 1EL0 Op0 1zb0 Rd0 1wn0 Rd0 46n0 Ap0 1Nb0 Ap0 1Nb0 Ap0 1zb0 11B0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 11B0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0|30e2",\n "Europe/Athens|LMT AMT EET EEST CEST CET|-1y.Q -1y.Q -20 -30 -20 -10|0123234545232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232|-30SNy.Q OMM1 CNbx.Q mn0 kU10 9b0 3Es0 Xa0 1fb0 1dd0 k3X0 Nz0 SCp0 1vc0 SO0 1cM0 1a00 1ao0 1fc0 1a10 1fG0 1cg0 1dX0 1bX0 1cQ0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00|35e5",\n "Europe/Dublin|LMT DMT IST GMT BST IST|p.l p.l -y.D 0 -10 -10|012343434343435353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353|-3BHby.D 1ra20 Rc0 1fzy.D 14M0 1fc0 1g00 1co0 1dc0 1co0 1oo0 1400 1dc0 19A0 1io0 1io0 WM0 1o00 14o0 1o00 17c0 1io0 17c0 1fA0 1a00 1lc0 17c0 1io0 17c0 1fA0 1a00 1io0 17c0 1io0 17c0 1fA0 1cM0 1io0 17c0 1fA0 1a00 1io0 17c0 1io0 17c0 1fA0 1a00 1io0 1qM0 Dc0 g600 14o0 1wo0 17c0 1io0 11A0 1o00 17c0 1fA0 1a00 1fA0 1cM0 1fA0 1a00 17c0 1fA0 1a00 1io0 17c0 1lc0 17c0 1fA0 1a00 1io0 17c0 1io0 17c0 1fA0 1a00 1a00 1qM0 WM0 1qM0 11A0 1o00 WM0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1tA0 IM0 90o0 U00 1tA0 U00 1tA0 U00 1tA0 U00 1tA0 WM0 1qM0 WM0 1qM0 WM0 1tA0 U00 1tA0 U00 1tA0 11z0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1o00 14o0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00|12e5",\n "Etc/GMT-0|GMT|0|0||",\n "Etc/GMT-1|+01|-10|0||",\n "Etc/GMT-10|+10|-a0|0||",\n "Etc/GMT-11|+11|-b0|0||",\n "Etc/GMT-12|+12|-c0|0||",\n "Etc/GMT-13|+13|-d0|0||",\n "Etc/GMT-14|+14|-e0|0||",\n "Etc/GMT-2|+02|-20|0||",\n "Etc/GMT-3|+03|-30|0||",\n "Etc/GMT-4|+04|-40|0||",\n "Etc/GMT-5|+05|-50|0||",\n "Etc/GMT-6|+06|-60|0||",\n "Etc/GMT-7|+07|-70|0||",\n "Etc/GMT-8|+08|-80|0||",\n "Etc/GMT-9|+09|-90|0||",\n "Etc/GMT+1|-01|10|0||",\n "Etc/GMT+10|-10|a0|0||",\n "Etc/GMT+11|-11|b0|0||",\n "Etc/GMT+12|-12|c0|0||",\n "Etc/GMT+2|-02|20|0||",\n "Etc/GMT+3|-03|30|0||",\n "Etc/GMT+4|-04|40|0||",\n "Etc/GMT+5|-05|50|0||",\n "Etc/GMT+6|-06|60|0||",\n "Etc/GMT+7|-07|70|0||",\n "Etc/GMT+8|-08|80|0||",\n "Etc/GMT+9|-09|90|0||",\n "Etc/UTC|UTC|0|0||",\n "Europe/Andorra|LMT WET CET CEST|-6.4 0 -10 -20|0123232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232|-2M0M6.4 1Pnc6.4 1xIN0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00|79e3",\n "Europe/Astrakhan|LMT +03 +04 +05|-3c.c -30 -40 -50|012323232323232323212121212121212121212121212121212121212121212|-1Pcrc.c eUMc.c 23CL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 2pB0 1cM0 1fA0 1cM0 3Co0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 8Hz0 3rd0|10e5",\n "Europe/London|LMT GMT BST BDST|1.f 0 -10 -20|01212121212121212121212121212121212121212121212121232323232321212321212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-4VgnW.J 2KHdW.J Rc0 1fA0 14M0 1fc0 1g00 1co0 1dc0 1co0 1oo0 1400 1dc0 19A0 1io0 1io0 WM0 1o00 14o0 1o00 17c0 1io0 17c0 1fA0 1a00 1lc0 17c0 1io0 17c0 1fA0 1a00 1io0 17c0 1io0 17c0 1fA0 1cM0 1io0 17c0 1fA0 1a00 1io0 17c0 1io0 17c0 1fA0 1a00 1io0 1qM0 Dc0 2Rz0 Dc0 1zc0 Oo0 1zc0 Rc0 1wo0 17c0 1iM0 FA0 xB0 1fA0 1a00 14o0 bb0 LA0 xB0 Rc0 1wo0 11A0 1o00 17c0 1fA0 1a00 1fA0 1cM0 1fA0 1a00 17c0 1fA0 1a00 1io0 17c0 1lc0 17c0 1fA0 1a00 1io0 17c0 1io0 17c0 1fA0 1a00 1a00 1qM0 WM0 1qM0 11A0 1o00 WM0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1tA0 IM0 90o0 U00 1tA0 U00 1tA0 U00 1tA0 U00 1tA0 WM0 1qM0 WM0 1qM0 WM0 1tA0 U00 1tA0 U00 1tA0 11z0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1o00 14o0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00|10e6",\n "Europe/Belgrade|LMT CET CEST|-1m -10 -20|012121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-3topm 2juLm 3IP0 WM0 1fA0 1cM0 1cM0 1rc0 Qo0 1vmo0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00|12e5",\n "Europe/Prague|LMT PMT CET CEST GMT|-V.I -V.I -10 -20 0|0123232323232323232423232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232|-4QbAV.I 1FDc0 XPaV.I 11d0 1iO0 11A0 1o00 11A0 Qrc0 6i00 WM0 1fA0 1cM0 1cM0 1cM0 1cM0 1qM0 11c0 mp0 xA0 mn0 17c0 1io0 17c0 1fc0 1ao0 1bNc0 1cM0 1fA0 1a00 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00|13e5",\n "Europe/Bucharest|LMT BMT EET EEST|-1I.o -1I.o -20 -30|01232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232|-3awpI.o 1AU00 20LI.o RA0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1Axc0 On0 1fA0 1a10 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cK0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cL0 1cN0 1cL0 1fB0 1nX0 11E0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00|19e5",\n "Europe/Budapest|LMT CET CEST|-1g.k -10 -20|01212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-3cK1g.k 124Lg.k 11d0 1iO0 11A0 1o00 11A0 1oo0 11c0 1lc0 17c0 O1V0 3Nf0 WM0 1fA0 1cM0 1cM0 1oJ0 1dd0 1020 1fX0 1cp0 1cM0 1cM0 1cM0 1fA0 1a00 bhy0 Rb0 1wr0 Rc0 1C00 LA0 1C00 LA0 SNW0 1a00 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cO0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00|17e5",\n "Europe/Zurich|LMT BMT CET CEST|-y.8 -t.K -10 -20|0123232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232|-4HyMy.8 1Dw04.m 1SfAt.K 11A0 1o00 11A0 1xG10 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00|38e4",\n "Europe/Chisinau|LMT CMT BMT EET EEST CEST CET MSK MSD|-1T.k -1T -1I.o -20 -30 -20 -10 -30 -40|0123434343434343434345656578787878787878787878434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343|-3D8NT.k 1wNA0.k wGMa.A 20LI.o RA0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 27A0 2en0 39g0 WM0 1fA0 1cM0 V90 1t7z0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 gL0 WO0 1cM0 1cM0 1cK0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1fB0 1nX0 11D0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00|67e4",\n "Europe/Gibraltar|LMT GMT BST BDST CET CEST|l.o 0 -10 -20 -10 -20|0121212121212121212121212121212121212121212121212123232323232121232121212121212121212145454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454|-3BHbC.A 1ra1C.A Rc0 1fA0 14M0 1fc0 1g00 1co0 1dc0 1co0 1oo0 1400 1dc0 19A0 1io0 1io0 WM0 1o00 14o0 1o00 17c0 1io0 17c0 1fA0 1a00 1lc0 17c0 1io0 17c0 1fA0 1a00 1io0 17c0 1io0 17c0 1fA0 1cM0 1io0 17c0 1fA0 1a00 1io0 17c0 1io0 17c0 1fA0 1a00 1io0 1qM0 Dc0 2Rz0 Dc0 1zc0 Oo0 1zc0 Rc0 1wo0 17c0 1iM0 FA0 xB0 1fA0 1a00 14o0 bb0 LA0 xB0 Rc0 1wo0 11A0 1o00 17c0 1fA0 1a00 1fA0 1cM0 1fA0 1a00 17c0 1fA0 1a00 1io0 17c0 1lc0 17c0 1fA0 10Jz0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00|30e3",\n "Europe/Helsinki|LMT HMT EET EEST|-1D.N -1D.N -20 -30|01232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232|-3H0ND.N 1Iu00 OULD.N 1dA0 1xGq0 1cM0 1cM0 1cM0 1cN0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00|12e5",\n "Europe/Kaliningrad|LMT CET CEST EET EEST MSK MSD +03|-1m -10 -20 -20 -30 -30 -40 -30|012121212121212343565656565656565654343434343434343434343434343434343434343434373|-36Rdm UbXm 11d0 1iO0 11A0 1o00 11A0 Qrc0 6i00 WM0 1fA0 1cM0 1cM0 1cM0 390 7A0 1en0 12N0 1pbb0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cN0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 8Hz0|44e4",\n "Europe/Kiev|LMT KMT EET MSK CEST CET MSD EEST|-22.4 -22.4 -20 -30 -20 -10 -40 -30|01234545363636363636363636367272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272|-3D8O2.4 1LUM0 eUo2.4 rnz0 2Hg0 WM0 1fA0 da0 1v4m0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 Db0 3220 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o10 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00|34e5",\n "Europe/Kirov|LMT +03 +04 +05 MSD MSK MSK|-3i.M -30 -40 -50 -40 -30 -40|0123232323232323232454524545454545454545454545454545454545454565|-22WM0 qH90 23CL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cN0 1cM0 1fA0 1cM0 2pz0 1cN0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 8Hz0|48e4",\n "Europe/Lisbon|LMT WET WEST WEMT CET CEST|A.J 0 -10 -20 -10 -20|012121212121212121212121212121212121212121212321232123212321212121212121212121212121212121212121212124121212121212121212121212121212124545454212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-2le00 aPX0 Sp0 M00 1vb0 SN0 1vb0 SN0 1vb0 Td0 1vb0 SN0 1vb0 6600 18o0 3I00 17c0 1fA0 1a00 1io0 1a00 1io0 17c0 3I00 17c0 1cM0 1cM0 3Fc0 1cM0 1a00 1fA0 1io0 17c0 1cM0 1cM0 1a00 1fA0 1io0 1qM0 Dc0 1uo0 1c00 1dc0 1400 gL0 IM0 s10 U00 dX0 Rc0 pd0 Rc0 gL0 Oo0 pd0 Rc0 gL0 Oo0 pd0 14o0 1cM0 1cP0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 oiK0 1cM0 1cM0 1fB0 1cM0 1cM0 1cM0 1fA0 1a00 1cL0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cN0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00|27e5",\n "Europe/Madrid|LMT WET WEST WEMT CET CEST|e.I 0 -10 -20 -10 -20|0121212121212121212321454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454|-2M0M0 G5z0 19B0 1cL0 1dd0 b1z0 18p0 3HX0 17d0 1fz0 1a10 1io0 1a00 1in0 17d0 iIn0 Hd0 1cL0 bb0 1200 2s20 14n0 5aL0 Mp0 1vz0 17d0 1in0 17d0 1in0 17d0 1in0 17d0 6hX0 11B0 XHX0 1a10 1fz0 1a10 19X0 1cN0 1fz0 1a10 1fC0 1cM0 1cM0 1cM0 1fA0 1a00 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00|62e5",\n "Europe/Malta|LMT CET CEST|-W.4 -10 -20|01212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-35rcW.4 SXzW.4 Lz0 1cN0 1db0 1410 1on0 Wp0 1qL0 17d0 1cL0 M3B0 5M20 WM0 1fA0 1co0 17c0 1iM0 16m0 1de0 1lc0 14m0 1lc0 WO0 1qM0 GTW0 On0 1C10 LA0 1C00 LA0 1EM0 LA0 1C00 LA0 1zc0 Oo0 1C00 Oo0 1co0 1cM0 1lA0 Xc0 1qq0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1iN0 19z0 1fB0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00|42e4",\n "Europe/Minsk|LMT MMT EET MSK CEST CET MSD EEST +03|-1O.g -1O -20 -30 -20 -10 -40 -30 -30|012345454363636363636363636372727272727272727272727272727272727272728|-3D8NO.g 1LUM0.g eUnO qNX0 3gQ0 WM0 1fA0 1cM0 Al0 1tsn0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 3Fc0 1cN0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0|19e5",\n "Europe/Paris|LMT PMT WET WEST CEST CET WEMT|-9.l -9.l 0 -10 -20 -10 -20|01232323232323232323232323232323232323232323232323234545463654545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545|-3bQ09.l MDA0 cNb9.l HA0 19A0 1iM0 11c0 1oo0 Wo0 1rc0 QM0 1EM0 UM0 1u00 10o0 1io0 1wo0 Rc0 1a00 1fA0 1cM0 1cM0 1io0 17c0 1fA0 1a00 1io0 1a00 1io0 17c0 1fA0 1a00 1io0 17c0 1cM0 1cM0 1a00 1io0 1cM0 1cM0 1a00 1fA0 1io0 17c0 1cM0 1cM0 1a00 1fA0 1io0 1qM0 Df0 Ik0 5M30 WM0 1fA0 1cM0 Vx0 hB0 1aq0 16M0 1ekn0 1cL0 1fC0 1a00 1fA0 1cM0 1cM0 1cM0 1fA0 1a00 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00|11e6",\n "Europe/Moscow|LMT MMT MMT MST MDST MSD MSK +05 EET EEST MSK|-2u.h -2u.h -2v.j -3v.j -4v.j -40 -30 -50 -20 -30 -40|01232434565756865656565656565656565698656565656565656565656565656565656565656a6|-3D8Ou.h 1sQM0 2pyW.W 1bA0 11X0 GN0 1Hb0 c4v.j ik0 3DA0 dz0 15A0 c10 2q10 iM10 23CL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cN0 IM0 rX0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 8Hz0|16e6",\n "Europe/Riga|LMT RMT LST EET MSK CEST CET MSD EEST|-1A.y -1A.y -2A.y -20 -30 -20 -10 -40 -30|0121213456565647474747474747474838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383|-3D8NA.y 1xde0 11A0 1iM0 ko0 gWm0 yDXA.y 2bX0 3fE0 WM0 1fA0 1cM0 1cM0 4m0 1sLy0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cN0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cN0 1o00 11A0 1o00 11A0 1qM0 3oo0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00|64e4",\n "Europe/Rome|LMT RMT CET CEST|-N.U -N.U -10 -20|012323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232|-4aU0N.U 15snN.U T000 Lz0 1cN0 1db0 1410 1on0 Wp0 1qL0 17d0 1cL0 M3B0 5M20 WM0 1fA0 1cM0 16M0 1iM0 16m0 1de0 1lc0 14m0 1lc0 WO0 1qM0 GTW0 On0 1C10 LA0 1C00 LA0 1EM0 LA0 1C00 LA0 1zc0 Oo0 1C00 Oo0 1C00 LA0 1zc0 Oo0 1C00 LA0 1C00 LA0 1zc0 Oo0 1C00 Oo0 1zc0 Oo0 1fC0 1a00 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00|39e5",\n "Europe/Samara|LMT +03 +04 +05|-3k.k -30 -40 -50|0123232323232323232121232323232323232323232323232323232323212|-22WM0 qH90 23CL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 2pB0 1cM0 1fA0 2y10 14m0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 2sp0 WM0|12e5",\n "Europe/Saratov|LMT +03 +04 +05|-34.i -30 -40 -50|012323232323232321212121212121212121212121212121212121212121212|-22WM0 qH90 23CL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 2pB0 1cM0 1cM0 1cM0 1fA0 1cM0 3Co0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 8Hz0 5810|",\n "Europe/Simferopol|LMT SMT EET MSK CEST CET MSD EEST MSK|-2g.o -2g -20 -30 -20 -10 -40 -30 -40|0123454543636363636363636363272727636363727272727272727272727272727272727283|-3D8Og.o 1LUM0.o eUog rEn0 2qs0 WM0 1fA0 1cM0 3V0 1u0L0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1Q00 4eN0 1cM0 1cM0 1cM0 1cM0 dV0 WO0 1cM0 1cM0 1fy0 1o30 11B0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11z0 1nW0|33e4",\n "Europe/Sofia|LMT IMT EET CET CEST EEST|-1x.g -1U.U -20 -10 -20 -30|0123434325252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252|-3D8Nx.g AiLA.k 1UFeU.U WM0 1fA0 1cM0 1cM0 1cN0 1mKH0 1dd0 1fb0 1ap0 1fb0 1a20 1fy0 1a30 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cK0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1fB0 1nX0 11E0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00|12e5",\n "Europe/Tallinn|LMT TMT CET CEST EET MSK MSD EEST|-1D -1D -10 -20 -20 -30 -40 -30|0123214532323565656565656565657474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474|-3D8ND 1wI00 teD 11A0 1Ta0 4rXl KSLD 2FX0 2Jg0 WM0 1fA0 1cM0 18J0 1sTX0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cN0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o10 11A0 1qM0 5QM0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00|41e4",\n "Europe/Tirane|LMT CET CEST|-1j.k -10 -20|01212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-2glBj.k 14pcj.k 5LC0 WM0 4M0 1fCK0 10n0 1op0 11z0 1pd0 11z0 1qN0 WL0 1qp0 Xb0 1qp0 Xb0 1qp0 11z0 1lB0 11z0 1qN0 11z0 1iN0 16n0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00|42e4",\n "Europe/Ulyanovsk|LMT +03 +04 +05 +02|-3d.A -30 -40 -50 -20|01232323232323232321214121212121212121212121212121212121212121212|-22WM0 qH90 23CL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 2pB0 1cM0 1fA0 2pB0 IM0 rX0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 8Hz0 3rd0|13e5",\n "Europe/Vienna|LMT CET CEST|-15.l -10 -20|01212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-36Rd5.l UbX5.l 11d0 1iO0 11A0 1o00 11A0 3KM0 14o0 LA00 6i00 WM0 1fA0 1cM0 1cM0 1cM0 400 2qM0 1ao0 1co0 1cM0 1io0 17c0 1gHa0 19X0 1cP0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00|18e5",\n "Europe/Vilnius|LMT WMT KMT CET EET MSK CEST MSD EEST|-1F.g -1o -1z.A -10 -20 -30 -20 -40 -30|0123435636365757575757575757584848484848484848463648484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484|-3D8NF.g 1u5Ah.g 6ILM.o 1Ooz.A zz0 Mfd0 29W0 3is0 WM0 1fA0 1cM0 LV0 1tgL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cN0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11B0 1o00 11A0 1qM0 8io0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00|54e4",\n "Europe/Volgograd|LMT +03 +04 +05 MSD MSK MSK|-2V.E -30 -40 -50 -40 -30 -40|012323232323232324545452454545454545454545454545454545454545456525|-21IqV.E psLV.E 23CL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cN0 1cM0 1cM0 1cM0 1fA0 1cM0 2pz0 1cN0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 8Hz0 9Jd0 5gn0|10e5",\n "Europe/Warsaw|LMT WMT CET CEST EET EEST|-1o -1o -10 -20 -20 -30|0123232345423232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232|-3D8No 1qDA0 1LXo 11d0 1iO0 11A0 1o00 11A0 1on0 11A0 6zy0 HWP0 5IM0 WM0 1fA0 1cM0 1dz0 1mL0 1en0 15B0 1aq0 1nA0 11A0 1io0 17c0 1fA0 1a00 iDX0 LA0 1cM0 1cM0 1C00 Oo0 1cM0 1cM0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1C00 LA0 uso0 1a00 1fA0 1cM0 1cM0 1cM0 1fA0 1a00 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cN0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00|17e5",\n "Pacific/Honolulu|LMT HST HDT HWT HPT HST|av.q au 9u 9u 9u a0|01213415|-3061s.y 1uMdW.y 8x0 lef0 8wWu iAu 46p0|37e4",\n "Indian/Chagos|LMT +05 +06|-4N.E -50 -60|012|-2xosN.E 3AGLN.E|30e2",\n "Indian/Maldives|LMT MMT +05|-4S -4S -50|012|-3D8QS 3eLA0|35e4",\n "Indian/Mauritius|LMT +04 +05|-3O -40 -50|012121|-2xorO 34unO 14L0 12kr0 11z0|15e4",\n "Pacific/Kwajalein|LMT +11 +10 +09 -12 +12|-b9.k -b0 -a0 -90 c0 -c0|0123145|-2M0X9.k 1rDA9.k akp0 6Up0 12ry0 Wan0|14e3",\n "Pacific/Chatham|LMT +1215 +1245 +1345|-cd.M -cf -cJ -dJ|0123232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323|-46jMd.M 37RbW.M 1adef IM0 1C00 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1qM0 14o0 1lc0 14o0 1lc0 14o0 1lc0 17c0 1io0 17c0 1io0 17c0 1io0 17c0 1lc0 14o0 1lc0 14o0 1lc0 17c0 1io0 17c0 1io0 17c0 1lc0 14o0 1lc0 14o0 1lc0 17c0 1io0 17c0 1io0 17c0 1io0 17c0 1io0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1io0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1io0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1io0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1io0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1io0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1io0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1io0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1io0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1io0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1io0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1io0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1io0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1io0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1io0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1io0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1io0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00|600",\n "Pacific/Apia|LMT LMT -1130 -11 -10 +14 +13|-cx.4 bq.U bu b0 a0 -e0 -d0|012343456565656565656565656|-38Fox.4 J1A0 1yW03.4 2rRbu 1ff0 1a00 CI0 AQ0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0|37e3",\n "Pacific/Bougainville|LMT PMMT +10 +09 +11|-am.g -9M.w -a0 -90 -b0|012324|-3D8Wm.g AvAx.I 1TCLM.w 7CN0 2MQp0|18e4",\n "Pacific/Efate|LMT +11 +12|-bd.g -b0 -c0|012121212121212121212121|-2l9nd.g 2uNXd.g Dc0 n610 1cL0 1cN0 1cL0 1fB0 19X0 1fB0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1fB0 Lz0 1Nd0 An0|66e3",\n "Pacific/Enderbury|-00 -12 -11 +13|0 c0 b0 -d0|0123|-1iIo0 1GsA0 B7X0|1",\n "Pacific/Fakaofo|LMT -11 +13|bo.U b0 -d0|012|-2M0Az.4 4ufXz.4|483",\n "Pacific/Fiji|LMT +12 +13|-bT.I -c0 -d0|012121212121212121212121212121|-2bUzT.I 3m8NT.I LA0 1EM0 IM0 nJc0 LA0 1o00 Rc0 1wo0 Ao0 1Nc0 Ao0 1Q00 xz0 1SN0 uM0 1SM0 uM0 1VA0 s00 1VA0 s00 1VA0 s00 20o0 pc0 2hc0 bc0|88e4",\n "Pacific/Tarawa|LMT +12|-bw.4 -c0|01|-2M0Xw.4|29e3",\n "Pacific/Galapagos|LMT -05 -06|5W.o 50 60|01212|-1yVS1.A 2dTz1.A gNd0 rz0|25e3",\n "Pacific/Gambier|LMT -09|8X.M 90|01|-2jof0.c|125",\n "Pacific/Guadalcanal|LMT +11|-aD.M -b0|01|-2joyD.M|11e4",\n "Pacific/Guam|LMT LMT GST +09 GDT ChST|el -9D -a0 -90 -b0 -a0|0123242424242424242425|-54m9D 2glc0 1DFbD 6pB0 AhB0 3QL0 g2p0 3p91 WOX rX0 1zd0 Rb0 1wp0 Rb0 5xd0 rX0 5sN0 zb1 1C0X On0 ULb0|17e4",\n "Pacific/Kiritimati|LMT -1040 -10 +14|at.k aE a0 -e0|0123|-2M0Bu.E 3bIMa.E B7Xk|51e2",\n "Pacific/Kosrae|LMT LMT +11 +09 +10 +12|d8.4 -aP.U -b0 -90 -a0 -c0|0123243252|-54maP.U 2glc0 xsnP.U axC0 HBy0 akp0 axd0 WOK0 1bdz0|66e2",\n "Pacific/Marquesas|LMT -0930|9i 9u|01|-2joeG|86e2",\n "Pacific/Pago_Pago|LMT LMT SST|-cB.c bm.M b0|012|-38FoB.c J1A0|37e2",\n "Pacific/Nauru|LMT +1130 +09 +12|-b7.E -bu -90 -c0|01213|-1Xdn7.E QCnB.E 7mqu 1lnbu|10e3",\n "Pacific/Niue|LMT -1120 -11|bj.E bk b0|012|-FScE.k suo0.k|12e2",\n "Pacific/Norfolk|LMT +1112 +1130 +1230 +11 +12|-bb.Q -bc -bu -cu -b0 -c0|0123245454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545|-2M0Xb.Q 21ILX.Q W01G Oo0 1COo0 9Jcu 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0|25e4",\n "Pacific/Noumea|LMT +11 +12|-b5.M -b0 -c0|01212121|-2l9n5.M 2EqM5.M xX0 1PB0 yn0 HeP0 Ao0|98e3",\n "Pacific/Palau|LMT LMT +09|f2.4 -8V.U -90|012|-54m8V.U 2glc0|21e3",\n "Pacific/Pitcairn|LMT -0830 -08|8E.k 8u 80|012|-2M0Dj.E 3UVXN.E|56",\n "Pacific/Rarotonga|LMT LMT -1030 -0930 -10|-dk.U aD.4 au 9u a0|01234343434343434343434343434|-2Otpk.U 28zc0 13tbO.U IL0 1zcu Onu 1zcu Onu 1zcu Rbu 1zcu Onu 1zcu Onu 1zcu Onu 1zcu Onu 1zcu Onu 1zcu Rbu 1zcu Onu 1zcu Onu 1zcu Onu|13e3",\n "Pacific/Tahiti|LMT -10|9W.g a0|01|-2joe1.I|18e4",\n "Pacific/Tongatapu|LMT +1220 +13 +14|-cj.c -ck -d0 -e0|01232323232|-XbMj.c BgLX.c 1yndk 15A0 1wo0 xz0 1Q10 xz0 zWN0 s00|75e3"\n], Yj = [\n "Africa/Abidjan|Africa/Accra",\n "Africa/Abidjan|Africa/Bamako",\n "Africa/Abidjan|Africa/Banjul",\n "Africa/Abidjan|Africa/Conakry",\n "Africa/Abidjan|Africa/Dakar",\n "Africa/Abidjan|Africa/Freetown",\n "Africa/Abidjan|Africa/Lome",\n "Africa/Abidjan|Africa/Nouakchott",\n "Africa/Abidjan|Africa/Ouagadougou",\n "Africa/Abidjan|Africa/Timbuktu",\n "Africa/Abidjan|Atlantic/Reykjavik",\n "Africa/Abidjan|Atlantic/St_Helena",\n "Africa/Abidjan|Iceland",\n "Africa/Cairo|Egypt",\n "Africa/Johannesburg|Africa/Maseru",\n "Africa/Johannesburg|Africa/Mbabane",\n "Africa/Lagos|Africa/Bangui",\n "Africa/Lagos|Africa/Brazzaville",\n "Africa/Lagos|Africa/Douala",\n "Africa/Lagos|Africa/Kinshasa",\n "Africa/Lagos|Africa/Libreville",\n "Africa/Lagos|Africa/Luanda",\n "Africa/Lagos|Africa/Malabo",\n "Africa/Lagos|Africa/Niamey",\n "Africa/Lagos|Africa/Porto-Novo",\n "Africa/Maputo|Africa/Blantyre",\n "Africa/Maputo|Africa/Bujumbura",\n "Africa/Maputo|Africa/Gaborone",\n "Africa/Maputo|Africa/Harare",\n "Africa/Maputo|Africa/Kigali",\n "Africa/Maputo|Africa/Lubumbashi",\n "Africa/Maputo|Africa/Lusaka",\n "Africa/Nairobi|Africa/Addis_Ababa",\n "Africa/Nairobi|Africa/Asmara",\n "Africa/Nairobi|Africa/Asmera",\n "Africa/Nairobi|Africa/Dar_es_Salaam",\n "Africa/Nairobi|Africa/Djibouti",\n "Africa/Nairobi|Africa/Kampala",\n "Africa/Nairobi|Africa/Mogadishu",\n "Africa/Nairobi|Indian/Antananarivo",\n "Africa/Nairobi|Indian/Comoro",\n "Africa/Nairobi|Indian/Mayotte",\n "Africa/Tripoli|Libya",\n "America/Adak|America/Atka",\n "America/Adak|US/Aleutian",\n "America/Anchorage|US/Alaska",\n "America/Argentina/Buenos_Aires|America/Buenos_Aires",\n "America/Argentina/Catamarca|America/Argentina/ComodRivadavia",\n "America/Argentina/Catamarca|America/Catamarca",\n "America/Argentina/Cordoba|America/Cordoba",\n "America/Argentina/Cordoba|America/Rosario",\n "America/Argentina/Jujuy|America/Jujuy",\n "America/Argentina/Mendoza|America/Mendoza",\n "America/Chicago|CST6CDT",\n "America/Chicago|US/Central",\n "America/Denver|America/Shiprock",\n "America/Denver|MST7MDT",\n "America/Denver|Navajo",\n "America/Denver|US/Mountain",\n "America/Detroit|US/Michigan",\n "America/Edmonton|America/Yellowknife",\n "America/Edmonton|Canada/Mountain",\n "America/Fort_Wayne|America/Indiana/Indianapolis",\n "America/Fort_Wayne|America/Indianapolis",\n "America/Fort_Wayne|US/East-Indiana",\n "America/Godthab|America/Nuuk",\n "America/Halifax|Canada/Atlantic",\n "America/Havana|Cuba",\n "America/Indiana/Knox|America/Knox_IN",\n "America/Indiana/Knox|US/Indiana-Starke",\n "America/Iqaluit|America/Pangnirtung",\n "America/Jamaica|Jamaica",\n "America/Kentucky/Louisville|America/Louisville",\n "America/Los_Angeles|PST8PDT",\n "America/Los_Angeles|US/Pacific",\n "America/Manaus|Brazil/West",\n "America/Mazatlan|Mexico/BajaSur",\n "America/Mexico_City|Mexico/General",\n "America/New_York|EST5EDT",\n "America/New_York|US/Eastern",\n "America/Noronha|Brazil/DeNoronha",\n "America/Panama|America/Atikokan",\n "America/Panama|America/Cayman",\n "America/Panama|America/Coral_Harbour",\n "America/Panama|EST",\n "America/Phoenix|America/Creston",\n "America/Phoenix|MST",\n "America/Phoenix|US/Arizona",\n "America/Puerto_Rico|America/Anguilla",\n "America/Puerto_Rico|America/Antigua",\n "America/Puerto_Rico|America/Aruba",\n "America/Puerto_Rico|America/Blanc-Sablon",\n "America/Puerto_Rico|America/Curacao",\n "America/Puerto_Rico|America/Dominica",\n "America/Puerto_Rico|America/Grenada",\n "America/Puerto_Rico|America/Guadeloupe",\n "America/Puerto_Rico|America/Kralendijk",\n "America/Puerto_Rico|America/Lower_Princes",\n "America/Puerto_Rico|America/Marigot",\n "America/Puerto_Rico|America/Montserrat",\n "America/Puerto_Rico|America/Port_of_Spain",\n "America/Puerto_Rico|America/St_Barthelemy",\n "America/Puerto_Rico|America/St_Kitts",\n "America/Puerto_Rico|America/St_Lucia",\n "America/Puerto_Rico|America/St_Thomas",\n "America/Puerto_Rico|America/St_Vincent",\n "America/Puerto_Rico|America/Tortola",\n "America/Puerto_Rico|America/Virgin",\n "America/Regina|Canada/Saskatchewan",\n "America/Rio_Branco|America/Porto_Acre",\n "America/Rio_Branco|Brazil/Acre",\n "America/Santiago|Chile/Continental",\n "America/Sao_Paulo|Brazil/East",\n "America/St_Johns|Canada/Newfoundland",\n "America/Tijuana|America/Ensenada",\n "America/Tijuana|America/Santa_Isabel",\n "America/Tijuana|Mexico/BajaNorte",\n "America/Toronto|America/Montreal",\n "America/Toronto|America/Nassau",\n "America/Toronto|America/Nipigon",\n "America/Toronto|America/Thunder_Bay",\n "America/Toronto|Canada/Eastern",\n "America/Vancouver|Canada/Pacific",\n "America/Whitehorse|Canada/Yukon",\n "America/Winnipeg|America/Rainy_River",\n "America/Winnipeg|Canada/Central",\n "Asia/Ashgabat|Asia/Ashkhabad",\n "Asia/Bangkok|Asia/Phnom_Penh",\n "Asia/Bangkok|Asia/Vientiane",\n "Asia/Bangkok|Indian/Christmas",\n "Asia/Brunei|Asia/Kuching",\n "Asia/Dhaka|Asia/Dacca",\n "Asia/Dubai|Asia/Muscat",\n "Asia/Dubai|Indian/Mahe",\n "Asia/Dubai|Indian/Reunion",\n "Asia/Ho_Chi_Minh|Asia/Saigon",\n "Asia/Hong_Kong|Hongkong",\n "Asia/Jerusalem|Asia/Tel_Aviv",\n "Asia/Jerusalem|Israel",\n "Asia/Kathmandu|Asia/Katmandu",\n "Asia/Kolkata|Asia/Calcutta",\n "Asia/Kuala_Lumpur|Asia/Singapore",\n "Asia/Kuala_Lumpur|Singapore",\n "Asia/Macau|Asia/Macao",\n "Asia/Makassar|Asia/Ujung_Pandang",\n "Asia/Nicosia|Europe/Nicosia",\n "Asia/Qatar|Asia/Bahrain",\n "Asia/Rangoon|Asia/Yangon",\n "Asia/Rangoon|Indian/Cocos",\n "Asia/Riyadh|Antarctica/Syowa",\n "Asia/Riyadh|Asia/Aden",\n "Asia/Riyadh|Asia/Kuwait",\n "Asia/Seoul|ROK",\n "Asia/Shanghai|Asia/Chongqing",\n "Asia/Shanghai|Asia/Chungking",\n "Asia/Shanghai|Asia/Harbin",\n "Asia/Shanghai|PRC",\n "Asia/Taipei|ROC",\n "Asia/Tehran|Iran",\n "Asia/Thimphu|Asia/Thimbu",\n "Asia/Tokyo|Japan",\n "Asia/Ulaanbaatar|Asia/Choibalsan",\n "Asia/Ulaanbaatar|Asia/Ulan_Bator",\n "Asia/Urumqi|Asia/Kashgar",\n "Atlantic/Faroe|Atlantic/Faeroe",\n "Australia/Adelaide|Australia/South",\n "Australia/Brisbane|Australia/Queensland",\n "Australia/Broken_Hill|Australia/Yancowinna",\n "Australia/Darwin|Australia/North",\n "Australia/Hobart|Australia/Currie",\n "Australia/Hobart|Australia/Tasmania",\n "Australia/Lord_Howe|Australia/LHI",\n "Australia/Melbourne|Australia/Victoria",\n "Australia/Perth|Australia/West",\n "Australia/Sydney|Australia/ACT",\n "Australia/Sydney|Australia/Canberra",\n "Australia/Sydney|Australia/NSW",\n "Etc/GMT-0|Etc/GMT",\n "Etc/GMT-0|Etc/GMT+0",\n "Etc/GMT-0|Etc/GMT0",\n "Etc/GMT-0|Etc/Greenwich",\n "Etc/GMT-0|GMT",\n "Etc/GMT-0|GMT+0",\n "Etc/GMT-0|GMT-0",\n "Etc/GMT-0|GMT0",\n "Etc/GMT-0|Greenwich",\n "Etc/UTC|Etc/UCT",\n "Etc/UTC|Etc/Universal",\n "Etc/UTC|Etc/Zulu",\n "Etc/UTC|UCT",\n "Etc/UTC|UTC",\n "Etc/UTC|Universal",\n "Etc/UTC|Zulu",\n "Europe/Athens|EET",\n "Europe/Belgrade|Europe/Ljubljana",\n "Europe/Belgrade|Europe/Podgorica",\n "Europe/Belgrade|Europe/Sarajevo",\n "Europe/Belgrade|Europe/Skopje",\n "Europe/Belgrade|Europe/Zagreb",\n "Europe/Berlin|Arctic/Longyearbyen",\n "Europe/Berlin|Atlantic/Jan_Mayen",\n "Europe/Berlin|Europe/Copenhagen",\n "Europe/Berlin|Europe/Oslo",\n "Europe/Berlin|Europe/Stockholm",\n "Europe/Brussels|CET",\n "Europe/Brussels|Europe/Amsterdam",\n "Europe/Brussels|Europe/Luxembourg",\n "Europe/Brussels|MET",\n "Europe/Chisinau|Europe/Tiraspol",\n "Europe/Dublin|Eire",\n "Europe/Helsinki|Europe/Mariehamn",\n "Europe/Istanbul|Asia/Istanbul",\n "Europe/Istanbul|Turkey",\n "Europe/Kiev|Europe/Kyiv",\n "Europe/Kiev|Europe/Uzhgorod",\n "Europe/Kiev|Europe/Zaporozhye",\n "Europe/Lisbon|Portugal",\n "Europe/Lisbon|WET",\n "Europe/London|Europe/Belfast",\n "Europe/London|Europe/Guernsey",\n "Europe/London|Europe/Isle_of_Man",\n "Europe/London|Europe/Jersey",\n "Europe/London|GB",\n "Europe/London|GB-Eire",\n "Europe/Moscow|W-SU",\n "Europe/Paris|Europe/Monaco",\n "Europe/Prague|Europe/Bratislava",\n "Europe/Rome|Europe/San_Marino",\n "Europe/Rome|Europe/Vatican",\n "Europe/Warsaw|Poland",\n "Europe/Zurich|Europe/Busingen",\n "Europe/Zurich|Europe/Vaduz",\n "Indian/Maldives|Indian/Kerguelen",\n "Pacific/Auckland|Antarctica/McMurdo",\n "Pacific/Auckland|Antarctica/South_Pole",\n "Pacific/Auckland|NZ",\n "Pacific/Chatham|NZ-CHAT",\n "Pacific/Easter|Chile/EasterIsland",\n "Pacific/Enderbury|Pacific/Kanton",\n "Pacific/Guadalcanal|Pacific/Pohnpei",\n "Pacific/Guadalcanal|Pacific/Ponape",\n "Pacific/Guam|Pacific/Saipan",\n "Pacific/Honolulu|HST",\n "Pacific/Honolulu|Pacific/Johnston",\n "Pacific/Honolulu|US/Hawaii",\n "Pacific/Kwajalein|Kwajalein",\n "Pacific/Pago_Pago|Pacific/Midway",\n "Pacific/Pago_Pago|Pacific/Samoa",\n "Pacific/Pago_Pago|US/Samoa",\n "Pacific/Port_Moresby|Antarctica/DumontDUrville",\n "Pacific/Port_Moresby|Pacific/Chuuk",\n "Pacific/Port_Moresby|Pacific/Truk",\n "Pacific/Port_Moresby|Pacific/Yap",\n "Pacific/Tarawa|Pacific/Funafuti",\n "Pacific/Tarawa|Pacific/Majuro",\n "Pacific/Tarawa|Pacific/Wake",\n "Pacific/Tarawa|Pacific/Wallis"\n], Gj = [\n "AD|Europe/Andorra",\n "AE|Asia/Dubai",\n "AF|Asia/Kabul",\n "AG|America/Puerto_Rico America/Antigua",\n "AI|America/Puerto_Rico America/Anguilla",\n "AL|Europe/Tirane",\n "AM|Asia/Yerevan",\n "AO|Africa/Lagos Africa/Luanda",\n "AQ|Antarctica/Casey Antarctica/Davis Antarctica/Mawson Antarctica/Palmer Antarctica/Rothera Antarctica/Troll Antarctica/Vostok Pacific/Auckland Pacific/Port_Moresby Asia/Riyadh Antarctica/McMurdo Antarctica/DumontDUrville Antarctica/Syowa",\n "AR|America/Argentina/Buenos_Aires America/Argentina/Cordoba America/Argentina/Salta America/Argentina/Jujuy America/Argentina/Tucuman America/Argentina/Catamarca America/Argentina/La_Rioja America/Argentina/San_Juan America/Argentina/Mendoza America/Argentina/San_Luis America/Argentina/Rio_Gallegos America/Argentina/Ushuaia",\n "AS|Pacific/Pago_Pago",\n "AT|Europe/Vienna",\n "AU|Australia/Lord_Howe Antarctica/Macquarie Australia/Hobart Australia/Melbourne Australia/Sydney Australia/Broken_Hill Australia/Brisbane Australia/Lindeman Australia/Adelaide Australia/Darwin Australia/Perth Australia/Eucla",\n "AW|America/Puerto_Rico America/Aruba",\n "AX|Europe/Helsinki Europe/Mariehamn",\n "AZ|Asia/Baku",\n "BA|Europe/Belgrade Europe/Sarajevo",\n "BB|America/Barbados",\n "BD|Asia/Dhaka",\n "BE|Europe/Brussels",\n "BF|Africa/Abidjan Africa/Ouagadougou",\n "BG|Europe/Sofia",\n "BH|Asia/Qatar Asia/Bahrain",\n "BI|Africa/Maputo Africa/Bujumbura",\n "BJ|Africa/Lagos Africa/Porto-Novo",\n "BL|America/Puerto_Rico America/St_Barthelemy",\n "BM|Atlantic/Bermuda",\n "BN|Asia/Kuching Asia/Brunei",\n "BO|America/La_Paz",\n "BQ|America/Puerto_Rico America/Kralendijk",\n "BR|America/Noronha America/Belem America/Fortaleza America/Recife America/Araguaina America/Maceio America/Bahia America/Sao_Paulo America/Campo_Grande America/Cuiaba America/Santarem America/Porto_Velho America/Boa_Vista America/Manaus America/Eirunepe America/Rio_Branco",\n "BS|America/Toronto America/Nassau",\n "BT|Asia/Thimphu",\n "BW|Africa/Maputo Africa/Gaborone",\n "BY|Europe/Minsk",\n "BZ|America/Belize",\n "CA|America/St_Johns America/Halifax America/Glace_Bay America/Moncton America/Goose_Bay America/Toronto America/Iqaluit America/Winnipeg America/Resolute America/Rankin_Inlet America/Regina America/Swift_Current America/Edmonton America/Cambridge_Bay America/Inuvik America/Dawson_Creek America/Fort_Nelson America/Whitehorse America/Dawson America/Vancouver America/Panama America/Puerto_Rico America/Phoenix America/Blanc-Sablon America/Atikokan America/Creston",\n "CC|Asia/Yangon Indian/Cocos",\n "CD|Africa/Maputo Africa/Lagos Africa/Kinshasa Africa/Lubumbashi",\n "CF|Africa/Lagos Africa/Bangui",\n "CG|Africa/Lagos Africa/Brazzaville",\n "CH|Europe/Zurich",\n "CI|Africa/Abidjan",\n "CK|Pacific/Rarotonga",\n "CL|America/Santiago America/Punta_Arenas Pacific/Easter",\n "CM|Africa/Lagos Africa/Douala",\n "CN|Asia/Shanghai Asia/Urumqi",\n "CO|America/Bogota",\n "CR|America/Costa_Rica",\n "CU|America/Havana",\n "CV|Atlantic/Cape_Verde",\n "CW|America/Puerto_Rico America/Curacao",\n "CX|Asia/Bangkok Indian/Christmas",\n "CY|Asia/Nicosia Asia/Famagusta",\n "CZ|Europe/Prague",\n "DE|Europe/Zurich Europe/Berlin Europe/Busingen",\n "DJ|Africa/Nairobi Africa/Djibouti",\n "DK|Europe/Berlin Europe/Copenhagen",\n "DM|America/Puerto_Rico America/Dominica",\n "DO|America/Santo_Domingo",\n "DZ|Africa/Algiers",\n "EC|America/Guayaquil Pacific/Galapagos",\n "EE|Europe/Tallinn",\n "EG|Africa/Cairo",\n "EH|Africa/El_Aaiun",\n "ER|Africa/Nairobi Africa/Asmara",\n "ES|Europe/Madrid Africa/Ceuta Atlantic/Canary",\n "ET|Africa/Nairobi Africa/Addis_Ababa",\n "FI|Europe/Helsinki",\n "FJ|Pacific/Fiji",\n "FK|Atlantic/Stanley",\n "FM|Pacific/Kosrae Pacific/Port_Moresby Pacific/Guadalcanal Pacific/Chuuk Pacific/Pohnpei",\n "FO|Atlantic/Faroe",\n "FR|Europe/Paris",\n "GA|Africa/Lagos Africa/Libreville",\n "GB|Europe/London",\n "GD|America/Puerto_Rico America/Grenada",\n "GE|Asia/Tbilisi",\n "GF|America/Cayenne",\n "GG|Europe/London Europe/Guernsey",\n "GH|Africa/Abidjan Africa/Accra",\n "GI|Europe/Gibraltar",\n "GL|America/Nuuk America/Danmarkshavn America/Scoresbysund America/Thule",\n "GM|Africa/Abidjan Africa/Banjul",\n "GN|Africa/Abidjan Africa/Conakry",\n "GP|America/Puerto_Rico America/Guadeloupe",\n "GQ|Africa/Lagos Africa/Malabo",\n "GR|Europe/Athens",\n "GS|Atlantic/South_Georgia",\n "GT|America/Guatemala",\n "GU|Pacific/Guam",\n "GW|Africa/Bissau",\n "GY|America/Guyana",\n "HK|Asia/Hong_Kong",\n "HN|America/Tegucigalpa",\n "HR|Europe/Belgrade Europe/Zagreb",\n "HT|America/Port-au-Prince",\n "HU|Europe/Budapest",\n "ID|Asia/Jakarta Asia/Pontianak Asia/Makassar Asia/Jayapura",\n "IE|Europe/Dublin",\n "IL|Asia/Jerusalem",\n "IM|Europe/London Europe/Isle_of_Man",\n "IN|Asia/Kolkata",\n "IO|Indian/Chagos",\n "IQ|Asia/Baghdad",\n "IR|Asia/Tehran",\n "IS|Africa/Abidjan Atlantic/Reykjavik",\n "IT|Europe/Rome",\n "JE|Europe/London Europe/Jersey",\n "JM|America/Jamaica",\n "JO|Asia/Amman",\n "JP|Asia/Tokyo",\n "KE|Africa/Nairobi",\n "KG|Asia/Bishkek",\n "KH|Asia/Bangkok Asia/Phnom_Penh",\n "KI|Pacific/Tarawa Pacific/Kanton Pacific/Kiritimati",\n "KM|Africa/Nairobi Indian/Comoro",\n "KN|America/Puerto_Rico America/St_Kitts",\n "KP|Asia/Pyongyang",\n "KR|Asia/Seoul",\n "KW|Asia/Riyadh Asia/Kuwait",\n "KY|America/Panama America/Cayman",\n "KZ|Asia/Almaty Asia/Qyzylorda Asia/Qostanay Asia/Aqtobe Asia/Aqtau Asia/Atyrau Asia/Oral",\n "LA|Asia/Bangkok Asia/Vientiane",\n "LB|Asia/Beirut",\n "LC|America/Puerto_Rico America/St_Lucia",\n "LI|Europe/Zurich Europe/Vaduz",\n "LK|Asia/Colombo",\n "LR|Africa/Monrovia",\n "LS|Africa/Johannesburg Africa/Maseru",\n "LT|Europe/Vilnius",\n "LU|Europe/Brussels Europe/Luxembourg",\n "LV|Europe/Riga",\n "LY|Africa/Tripoli",\n "MA|Africa/Casablanca",\n "MC|Europe/Paris Europe/Monaco",\n "MD|Europe/Chisinau",\n "ME|Europe/Belgrade Europe/Podgorica",\n "MF|America/Puerto_Rico America/Marigot",\n "MG|Africa/Nairobi Indian/Antananarivo",\n "MH|Pacific/Tarawa Pacific/Kwajalein Pacific/Majuro",\n "MK|Europe/Belgrade Europe/Skopje",\n "ML|Africa/Abidjan Africa/Bamako",\n "MM|Asia/Yangon",\n "MN|Asia/Ulaanbaatar Asia/Hovd",\n "MO|Asia/Macau",\n "MP|Pacific/Guam Pacific/Saipan",\n "MQ|America/Martinique",\n "MR|Africa/Abidjan Africa/Nouakchott",\n "MS|America/Puerto_Rico America/Montserrat",\n "MT|Europe/Malta",\n "MU|Indian/Mauritius",\n "MV|Indian/Maldives",\n "MW|Africa/Maputo Africa/Blantyre",\n "MX|America/Mexico_City America/Cancun America/Merida America/Monterrey America/Matamoros America/Chihuahua America/Ciudad_Juarez America/Ojinaga America/Mazatlan America/Bahia_Banderas America/Hermosillo America/Tijuana",\n "MY|Asia/Kuching Asia/Singapore Asia/Kuala_Lumpur",\n "MZ|Africa/Maputo",\n "NA|Africa/Windhoek",\n "NC|Pacific/Noumea",\n "NE|Africa/Lagos Africa/Niamey",\n "NF|Pacific/Norfolk",\n "NG|Africa/Lagos",\n "NI|America/Managua",\n "NL|Europe/Brussels Europe/Amsterdam",\n "NO|Europe/Berlin Europe/Oslo",\n "NP|Asia/Kathmandu",\n "NR|Pacific/Nauru",\n "NU|Pacific/Niue",\n "NZ|Pacific/Auckland Pacific/Chatham",\n "OM|Asia/Dubai Asia/Muscat",\n "PA|America/Panama",\n "PE|America/Lima",\n "PF|Pacific/Tahiti Pacific/Marquesas Pacific/Gambier",\n "PG|Pacific/Port_Moresby Pacific/Bougainville",\n "PH|Asia/Manila",\n "PK|Asia/Karachi",\n "PL|Europe/Warsaw",\n "PM|America/Miquelon",\n "PN|Pacific/Pitcairn",\n "PR|America/Puerto_Rico",\n "PS|Asia/Gaza Asia/Hebron",\n "PT|Europe/Lisbon Atlantic/Madeira Atlantic/Azores",\n "PW|Pacific/Palau",\n "PY|America/Asuncion",\n "QA|Asia/Qatar",\n "RE|Asia/Dubai Indian/Reunion",\n "RO|Europe/Bucharest",\n "RS|Europe/Belgrade",\n "RU|Europe/Kaliningrad Europe/Moscow Europe/Simferopol Europe/Kirov Europe/Volgograd Europe/Astrakhan Europe/Saratov Europe/Ulyanovsk Europe/Samara Asia/Yekaterinburg Asia/Omsk Asia/Novosibirsk Asia/Barnaul Asia/Tomsk Asia/Novokuznetsk Asia/Krasnoyarsk Asia/Irkutsk Asia/Chita Asia/Yakutsk Asia/Khandyga Asia/Vladivostok Asia/Ust-Nera Asia/Magadan Asia/Sakhalin Asia/Srednekolymsk Asia/Kamchatka Asia/Anadyr",\n "RW|Africa/Maputo Africa/Kigali",\n "SA|Asia/Riyadh",\n "SB|Pacific/Guadalcanal",\n "SC|Asia/Dubai Indian/Mahe",\n "SD|Africa/Khartoum",\n "SE|Europe/Berlin Europe/Stockholm",\n "SG|Asia/Singapore",\n "SH|Africa/Abidjan Atlantic/St_Helena",\n "SI|Europe/Belgrade Europe/Ljubljana",\n "SJ|Europe/Berlin Arctic/Longyearbyen",\n "SK|Europe/Prague Europe/Bratislava",\n "SL|Africa/Abidjan Africa/Freetown",\n "SM|Europe/Rome Europe/San_Marino",\n "SN|Africa/Abidjan Africa/Dakar",\n "SO|Africa/Nairobi Africa/Mogadishu",\n "SR|America/Paramaribo",\n "SS|Africa/Juba",\n "ST|Africa/Sao_Tome",\n "SV|America/El_Salvador",\n "SX|America/Puerto_Rico America/Lower_Princes",\n "SY|Asia/Damascus",\n "SZ|Africa/Johannesburg Africa/Mbabane",\n "TC|America/Grand_Turk",\n "TD|Africa/Ndjamena",\n "TF|Asia/Dubai Indian/Maldives Indian/Kerguelen",\n "TG|Africa/Abidjan Africa/Lome",\n "TH|Asia/Bangkok",\n "TJ|Asia/Dushanbe",\n "TK|Pacific/Fakaofo",\n "TL|Asia/Dili",\n "TM|Asia/Ashgabat",\n "TN|Africa/Tunis",\n "TO|Pacific/Tongatapu",\n "TR|Europe/Istanbul",\n "TT|America/Puerto_Rico America/Port_of_Spain",\n "TV|Pacific/Tarawa Pacific/Funafuti",\n "TW|Asia/Taipei",\n "TZ|Africa/Nairobi Africa/Dar_es_Salaam",\n "UA|Europe/Simferopol Europe/Kyiv",\n "UG|Africa/Nairobi Africa/Kampala",\n "UM|Pacific/Pago_Pago Pacific/Tarawa Pacific/Midway Pacific/Wake",\n "US|America/New_York America/Detroit America/Kentucky/Louisville America/Kentucky/Monticello America/Indiana/Indianapolis America/Indiana/Vincennes America/Indiana/Winamac America/Indiana/Marengo America/Indiana/Petersburg America/Indiana/Vevay America/Chicago America/Indiana/Tell_City America/Indiana/Knox America/Menominee America/North_Dakota/Center America/North_Dakota/New_Salem America/North_Dakota/Beulah America/Denver America/Boise America/Phoenix America/Los_Angeles America/Anchorage America/Juneau America/Sitka America/Metlakatla America/Yakutat America/Nome America/Adak Pacific/Honolulu",\n "UY|America/Montevideo",\n "UZ|Asia/Samarkand Asia/Tashkent",\n "VA|Europe/Rome Europe/Vatican",\n "VC|America/Puerto_Rico America/St_Vincent",\n "VE|America/Caracas",\n "VG|America/Puerto_Rico America/Tortola",\n "VI|America/Puerto_Rico America/St_Thomas",\n "VN|Asia/Bangkok Asia/Ho_Chi_Minh",\n "VU|Pacific/Efate",\n "WF|Pacific/Tarawa Pacific/Wallis",\n "WS|Pacific/Apia",\n "YE|Asia/Riyadh Asia/Aden",\n "YT|Africa/Nairobi Indian/Mayotte",\n "ZA|Africa/Johannesburg",\n "ZM|Africa/Maputo Africa/Lusaka",\n "ZW|Africa/Maputo Africa/Harare"\n], Qj = {\n version: Xj,\n zones: Uj,\n links: Yj,\n countries: Gj\n};\nvar Zj = YM.exports = Fj;\nZj.tz.load(Qj);\nvar jj = YM.exports;\nconst Kj = /* @__PURE__ */ Q2(jj);\nvar n3 = [\n ["Afghanistan (‫افغانستان‬‎)", "af", "93", "+..-..-...-...."],\n ["Åland Islands", "ax", "358", ""],\n ["Albania (Shqipëri)", "al", "355", "+...(...)...-..."],\n ["Algeria (‫الجزائر‬‎)", "dz", "213", "+...-..-...-...."],\n ["American Samoa", "as", "1684", "+.(...)...-...."],\n ["Andorra", "ad", "376", "+...-...-..."],\n ["Angola", "ao", "244", "+...(...)...-..."],\n ["Anguilla", "ai", "1264", "+.(...)...-...."],\n ["Antarctica", "aq", "672", ""],\n ["Antigua and Barbuda", "ag", "1268", "+.(...)...-...."],\n ["Argentina", "ar", "54", "+..(...)...-...."],\n ["Armenia (Հայաստան)", "am", "374", "+...-..-...-..."],\n ["Aruba", "aw", "297", "+...-...-...."],\n ["Australia", "au", "61", "+.. ... ... ..."],\n ["Austria (Österreich)", "at", "43", "+..(...)...-...."],\n ["Azerbaijan (Azərbaycan)", "az", "994", "+...-..-...-..-.."],\n ["Bahamas", "bs", "1242", "+.(...)...-...."],\n ["Bahrain (‫البحرين‬‎)", "bh", "973", "+...-....-...."],\n ["Bangladesh (বাংলাদেশ)", "bd", "880", "+...-..-...-..."],\n ["Barbados", "bb", "1246", "+.(...)...-...."],\n ["Belarus (Беларусь)", "by", "375", "+...(..)...-..-.."],\n ["Belgium (België)", "be", "32", "+.. ... .. .. .."],\n ["Belize", "bz", "501", "+...-...-...."],\n ["Benin (Bénin)", "bj", "229", "+...-..-..-...."],\n ["Bermuda", "bm", "1441", "+.(...)...-...."],\n ["Bhutan (འབྲུག)", "bt", "975", "+...-.-...-..."],\n ["Bolivia", "bo", "591", "+...-.-...-...."],\n ["Bosnia and Herzegovina (Босна и Херцеговина)", "ba", "387", "+...-..-...."],\n ["Botswana", "bw", "267", "+...-..-...-..."],\n ["Bouvet Island", "bv", "47", ""],\n ["Brazil (Brasil)", "br", "55", "+..-..-....-...."],\n ["British Indian Ocean Territory", "io", "246", "+...-...-...."],\n ["British Virgin Islands", "vg", "1284", "+.(...)...-...."],\n ["Brunei", "bn", "673", "+...-...-...."],\n ["Bulgaria (България)", "bg", "359", "+...(...)...-..."],\n ["Burkina Faso", "bf", "226", "+...-..-..-...."],\n ["Burundi (Uburundi)", "bi", "257", "+...-..-..-...."],\n ["Cambodia (កម្ពុជា)", "kh", "855", "+...-..-...-..."],\n ["Cameroon (Cameroun)", "cm", "237", "+...-....-...."],\n [\n "Canada",\n "ca",\n "1",\n "+. (...) ...-....",\n 1,\n [\n "204",\n "236",\n "249",\n "250",\n "289",\n "306",\n "343",\n "365",\n "387",\n "403",\n "416",\n "418",\n "431",\n "437",\n "438",\n "450",\n "506",\n "514",\n "519",\n "548",\n "579",\n "581",\n "587",\n "604",\n "613",\n "639",\n "647",\n "672",\n "705",\n "709",\n "742",\n "778",\n "780",\n "782",\n "807",\n "819",\n "825",\n "867",\n "873",\n "902",\n "905"\n ]\n ],\n ["Cape Verde (Kabu Verdi)", "cv", "238", "+...(...)..-.."],\n ["Caribbean Netherlands", "bq", "599", "+...-...-....", 1],\n ["Cayman Islands", "ky", "1345", "+.(...)...-...."],\n [\n "Central African Republic (République centrafricaine)",\n "cf",\n "236",\n "+...-..-..-...."\n ],\n ["Chad (Tchad)", "td", "235", "+...-..-..-..-.."],\n ["Chile", "cl", "56", "+..-.-....-...."],\n ["China (中国)", "cn", "86", "+.. ..-........"],\n ["Christmas Island", "cx", "61", ""],\n ["Cocos (Keeling) Islands", "cc", "61", ""],\n ["Colombia", "co", "57", "+..(...)...-...."],\n ["Comoros (‫جزر القمر‬‎)", "km", "269", "+...-..-....."],\n [\n "Congo (DRC) (Jamhuri ya Kidemokrasia ya Kongo)",\n "cd",\n "243",\n "+...(...)...-..."\n ],\n ["Congo (Republic) (Congo-Brazzaville)", "cg", "242", "+...-..-...-...."],\n ["Cook Islands", "ck", "682", "+...-..-..."],\n ["Costa Rica", "cr", "506", "+... ....-...."],\n ["Côte d’Ivoire", "ci", "225", "+...-..-...-..."],\n ["Croatia (Hrvatska)", "hr", "385", "+...-..-...-..."],\n ["Cuba", "cu", "53", "+..-.-...-...."],\n ["Curaçao", "cw", "599", "+...-...-....", 0],\n ["Cyprus (Κύπρος)", "cy", "357", "+...-..-...-..."],\n ["Czech Republic (Česká republika)", "cz", "420", "+...(...)...-..."],\n ["Denmark (Danmark)", "dk", "45", "+.. .. .. .. .."],\n ["Djibouti", "dj", "253", "+...-..-..-..-.."],\n ["Dominica", "dm", "1767", "+.(...)...-...."],\n [\n "Dominican Republic (República Dominicana)",\n "do",\n "1",\n "+.(...)...-....",\n 2,\n ["809", "829", "849"]\n ],\n ["Ecuador", "ec", "593", "+...-.-...-...."],\n ["Egypt (‫مصر‬‎)", "eg", "20", "+..(...)...-...."],\n ["El Salvador", "sv", "503", "+... ....-...."],\n ["Equatorial Guinea (Guinea Ecuatorial)", "gq", "240", "+...-..-...-...."],\n ["Eritrea", "er", "291", "+...-.-...-..."],\n ["Estonia (Eesti)", "ee", "372", "+...-...-...."],\n ["Ethiopia", "et", "251", "+...-..-...-...."],\n ["Falkland Islands (Islas Malvinas)", "fk", "500", "+...-....."],\n ["Faroe Islands (Føroyar)", "fo", "298", "+...-...-..."],\n ["Fiji", "fj", "679", "+...-..-....."],\n ["Finland (Suomi)", "fi", "358", "+... .. .... ...."],\n ["France", "fr", "33", "+.. . .. .. .. .."],\n ["French Guiana (Guyane française)", "gf", "594", "+...-.....-...."],\n ["French Polynesia (Polynésie française)", "pf", "689", "+...-..-..-.."],\n ["French Southern and Antarctic Lands", "tf", "262", ""],\n ["Gabon", "ga", "241", "+...-.-..-..-.."],\n ["Gambia", "gm", "220", "+...(...)..-.."],\n ["Georgia (საქართველო)", "ge", "995", "+...(...)...-..."],\n ["Germany (Deutschland)", "de", "49", "+.. ... ......."],\n ["Ghana (Gaana)", "gh", "233", "+...(...)...-..."],\n ["Gibraltar", "gi", "350", "+...-...-....."],\n ["Greece (Ελλάδα)", "gr", "30", "+..(...)...-...."],\n ["Greenland (Kalaallit Nunaat)", "gl", "299", "+...-..-..-.."],\n ["Grenada", "gd", "1473", "+.(...)...-...."],\n ["Guadeloupe", "gp", "590", "", 0],\n ["Guam", "gu", "1671", "+.(...)...-...."],\n ["Guatemala", "gt", "502", "+... ....-...."],\n ["Guernsey", "gg", "44", ""],\n ["Guinea (Guinée)", "gn", "224", "+...-..-...-..."],\n ["Guinea-Bissau (Guiné Bissau)", "gw", "245", "+...-.-......"],\n ["Guyana", "gy", "592", "+...-...-...."],\n ["Haiti", "ht", "509", "+... ....-...."],\n ["Heard Island and McDonald Islands", "hm", "672", ""],\n ["Honduras", "hn", "504", "+...-....-...."],\n ["Hong Kong (香港)", "hk", "852", "+... .... ...."],\n ["Hungary (Magyarország)", "hu", "36", "+..(...)...-..."],\n ["Iceland (Ísland)", "is", "354", "+... ... ...."],\n ["India (भारत)", "in", "91", "+.. .....-....."],\n ["Indonesia", "id", "62", "+..-..-...-.."],\n ["Iran (‫ایران‬‎)", "ir", "98", "+..(...)...-...."],\n ["Iraq (‫العراق‬‎)", "iq", "964", "+...(...)...-...."],\n ["Ireland", "ie", "353", "+... .. ......."],\n ["Isle of Man", "im", "44", ""],\n ["Israel (‫ישראל‬‎)", "il", "972", "+...-.-...-...."],\n ["Italy (Italia)", "it", "39", "+.. ... ......", 0],\n ["Jamaica", "jm", "1876", "+.(...)...-...."],\n ["Japan (日本)", "jp", "81", "+.. ... .. ...."],\n ["Jersey", "je", "44", ""],\n ["Jordan (‫الأردن‬‎)", "jo", "962", "+...-.-....-...."],\n ["Kazakhstan (Казахстан)", "kz", "7", "+. ... ...-..-..", 1],\n ["Kenya", "ke", "254", "+...-...-......"],\n ["Kiribati", "ki", "686", "+...-..-..."],\n ["Kosovo", "xk", "383", ""],\n ["Kuwait (‫الكويت‬‎)", "kw", "965", "+...-....-...."],\n ["Kyrgyzstan (Кыргызстан)", "kg", "996", "+...(...)...-..."],\n ["Laos (ລາວ)", "la", "856", "+...-..-...-..."],\n ["Latvia (Latvija)", "lv", "371", "+...-..-...-..."],\n ["Lebanon (‫لبنان‬‎)", "lb", "961", "+...-.-...-..."],\n ["Lesotho", "ls", "266", "+...-.-...-...."],\n ["Liberia", "lr", "231", "+...-..-...-..."],\n ["Libya (‫ليبيا‬‎)", "ly", "218", "+...-..-...-..."],\n ["Liechtenstein", "li", "423", "+...(...)...-...."],\n ["Lithuania (Lietuva)", "lt", "370", "+...(...)..-..."],\n ["Luxembourg", "lu", "352", "+...(...)...-..."],\n ["Macau (澳門)", "mo", "853", "+...-....-...."],\n ["Macedonia (FYROM) (Македонија)", "mk", "389", "+...-..-...-..."],\n ["Madagascar (Madagasikara)", "mg", "261", "+...-..-..-....."],\n ["Malawi", "mw", "265", "+...-.-....-...."],\n ["Malaysia", "my", "60", "+.. ..-....-...."],\n ["Maldives", "mv", "960", "+...-...-...."],\n ["Mali", "ml", "223", "+...-..-..-...."],\n ["Malta", "mt", "356", "+...-....-...."],\n ["Marshall Islands", "mh", "692", "+...-...-...."],\n ["Martinique", "mq", "596", "+...(...)..-..-.."],\n ["Mauritania (‫موريتانيا‬‎)", "mr", "222", "+...-..-..-...."],\n ["Mauritius (Moris)", "mu", "230", "+...-...-...."],\n ["Mayotte", "yt", "262", ""],\n ["Mexico (México)", "mx", "52", "+..-..-..-...."],\n ["Micronesia", "fm", "691", "+...-...-...."],\n ["Moldova (Republica Moldova)", "md", "373", "+...-....-...."],\n ["Monaco", "mc", "377", "+...-..-...-..."],\n ["Mongolia (Монгол)", "mn", "976", "+...-..-..-...."],\n ["Montenegro (Crna Gora)", "me", "382", "+...-..-...-..."],\n ["Montserrat", "ms", "1664", "+.(...)...-...."],\n ["Morocco (‫المغرب‬‎)", "ma", "212", "+...-..-....-..."],\n ["Mozambique (Moçambique)", "mz", "258", "+...-..-...-..."],\n ["Myanmar (Burma) (မြန်မာ)", "mm", "95", "+..-...-..."],\n ["Namibia (Namibië)", "na", "264", "+...-..-...-...."],\n ["Nauru", "nr", "674", "+...-...-...."],\n ["Nepal (नेपाल)", "np", "977", "+...-..-...-..."],\n ["Netherlands (Nederland)", "nl", "31", "+.. .. ........"],\n ["New Caledonia (Nouvelle-Calédonie)", "nc", "687", "+...-..-...."],\n ["New Zealand", "nz", "64", "+.. ...-...-...."],\n ["Nicaragua", "ni", "505", "+...-....-...."],\n ["Niger (Nijar)", "ne", "227", "+...-..-..-...."],\n ["Nigeria", "ng", "234", "+...-..-...-.."],\n ["Niue", "nu", "683", "+...-...."],\n ["Norfolk Island", "nf", "672", "+...-...-..."],\n ["North Korea (조선 민주주의 인민 공화국)", "kp", "850", "+...-...-..."],\n ["Northern Mariana Islands", "mp", "1670", "+.(...)...-...."],\n ["Norway (Norge)", "no", "47", "+.. ... .. ..."],\n ["Oman (‫عُمان‬‎)", "om", "968", "+...-..-...-..."],\n ["Pakistan (‫پاکستان‬‎)", "pk", "92", "+.. ...-......."],\n ["Palau", "pw", "680", "+...-...-...."],\n ["Palestine (‫فلسطين‬‎)", "ps", "970", "+...-..-...-...."],\n ["Panama (Panamá)", "pa", "507", "+...-...-...."],\n ["Papua New Guinea", "pg", "675", "+...(...)..-..."],\n ["Paraguay", "py", "595", "+...(...)...-..."],\n ["Peru (Perú)", "pe", "51", "+..(...)...-..."],\n ["Philippines", "ph", "63", "+.. ... ...."],\n ["Pitcairn Islands", "pn", "64", ""],\n ["Poland (Polska)", "pl", "48", "+.. ...-...-..."],\n ["Portugal", "pt", "351", "+...-..-...-...."],\n ["Puerto Rico", "pr", "1", "+. (...) ...-....", 3, ["787", "939"]],\n ["Qatar (‫قطر‬‎)", "qa", "974", "+...-....-...."],\n ["Réunion (La Réunion)", "re", "262", "+...-.....-...."],\n ["Romania (România)", "ro", "40", "+..-..-...-...."],\n ["Russia (Россия)", "ru", "7", "+. ... ...-..-..", 0],\n ["Rwanda", "rw", "250", "+...(...)...-..."],\n ["Saint Barthélemy (Saint-Barthélemy)", "bl", "590", "", 1],\n ["Saint Helena", "sh", "290"],\n ["Saint Kitts and Nevis", "kn", "1869", "+.(...)...-...."],\n ["Saint Lucia", "lc", "1758", "+.(...)...-...."],\n ["Saint Martin (Saint-Martin (partie française))", "mf", "590", "", 2],\n ["Saint Pierre and Miquelon (Saint-Pierre-et-Miquelon)", "pm", "508"],\n ["Saint Vincent and the Grenadines", "vc", "1784", "+.(...)...-...."],\n ["Samoa", "ws", "685", "+...-..-...."],\n ["San Marino", "sm", "378", "+...-....-......"],\n ["São Tomé and Príncipe (São Tomé e Príncipe)", "st", "239", "+...-..-....."],\n [\n "Saudi Arabia (‫المملكة العربية السعودية‬‎)",\n "sa",\n "966",\n "+...-..-...-...."\n ],\n ["Senegal (Sénégal)", "sn", "221", "+...-..-...-...."],\n ["Serbia (Србија)", "rs", "381", "+...-..-...-...."],\n ["Seychelles", "sc", "248", "+...-.-...-..."],\n ["Sierra Leone", "sl", "232", "+...-..-......"],\n ["Singapore", "sg", "65", "+.. ....-...."],\n ["Sint Maarten", "sx", "1721", "+.(...)...-...."],\n ["Slovakia (Slovensko)", "sk", "421", "+...(...)...-..."],\n ["Slovenia (Slovenija)", "si", "386", "+...-..-...-..."],\n ["Solomon Islands", "sb", "677", "+...-....."],\n ["Somalia (Soomaaliya)", "so", "252", "+...-.-...-..."],\n ["South Africa", "za", "27", "+..-..-...-...."],\n ["South Georgia and the South Sandwich Islands", "gs", "500", ""],\n ["South Korea (대한민국)", "kr", "82", "+..-..-...-...."],\n ["South Sudan (‫جنوب السودان‬‎)", "ss", "211", "+...-..-...-...."],\n ["Spain (España)", "es", "34", "+.. ... ... ..."],\n ["Sri Lanka (ශ්‍රී ලංකාව)", "lk", "94", "+..-..-...-...."],\n ["Sudan (‫السودان‬‎)", "sd", "249", "+...-..-...-...."],\n ["Suriname", "sr", "597", "+...-...-..."],\n ["Svalbard and Jan Mayen", "sj", "47", ""],\n ["Swaziland", "sz", "268", "+...-..-..-...."],\n ["Sweden (Sverige)", "se", "46", "+.. .. ... .. .."],\n ["Switzerland (Schweiz)", "ch", "41", "+.. .. ... .. .."],\n ["Syria (‫سوريا‬‎)", "sy", "963", "+...-..-....-..."],\n ["Taiwan (台灣)", "tw", "886", "+...-....-...."],\n ["Tajikistan", "tj", "992", "+...-..-...-...."],\n ["Tanzania", "tz", "255", "+...-..-...-...."],\n ["Thailand (ไทย)", "th", "66", "+..-..-...-..."],\n ["Timor-Leste", "tl", "670", "+...-...-...."],\n ["Togo", "tg", "228", "+...-..-...-..."],\n ["Tokelau", "tk", "690", "+...-...."],\n ["Tonga", "to", "676", "+...-....."],\n ["Trinidad and Tobago", "tt", "1868", "+.(...)...-...."],\n ["Tunisia (‫تونس‬‎)", "tn", "216", "+...-..-...-..."],\n ["Turkey (Türkiye)", "tr", "90", "+.. ... ... .. .."],\n ["Turkmenistan", "tm", "993", "+...-.-...-...."],\n ["Turks and Caicos Islands", "tc", "1649", "+.(...)...-...."],\n ["Tuvalu", "tv", "688", "+...-....."],\n ["U.S. Virgin Islands", "vi", "1340", "+.(...)...-...."],\n ["Uganda", "ug", "256", "+...(...)...-..."],\n ["Ukraine (Україна)", "ua", "380", "+...(..)...-..-.."],\n [\n "United Arab Emirates (‫الإمارات العربية المتحدة‬‎)",\n "ae",\n "971",\n "+...-.-...-...."\n ],\n ["United Kingdom", "gb", "44", "+.. .... ......"],\n ["United States", "us", "1", "+. (...) ...-....", 0],\n ["United States Minor Outlying Islands", "um", "1", "", 2],\n ["Uruguay", "uy", "598", "+...-.-...-..-.."],\n ["Uzbekistan (Oʻzbekiston)", "uz", "998", "+...-..-...-...."],\n ["Vanuatu", "vu", "678", "+...-....."],\n ["Vatican City (Città del Vaticano)", "va", "39", "+.. .. .... ....", 1],\n ["Venezuela", "ve", "58", "+..(...)...-...."],\n ["Vietnam (Việt Nam)", "vn", "84", "+..-..-....-..."],\n ["Wallis and Futuna", "wf", "681", "+...-..-...."],\n ["Western Sahara", "eh", "212", "+...-..-...."],\n ["Yemen (‫اليمن‬‎)", "ye", "967", "+...-.-...-..."],\n ["Zambia", "zm", "260", "+...-..-...-...."],\n ["Zimbabwe", "zw", "263", "+...-.-......"]\n], e4 = {}, QM = {}, Fc = function(e, t, o) {\n t in e4 || (e4[t] = []);\n var n = o || 0;\n e4[t][n] = e;\n};\nfor (var mt = 0; mt < n3.length; mt++) {\n var k2 = n3[mt];\n if (n3[mt] = {\n name: k2[0],\n iso2: k2[1],\n dialCode: k2[2],\n priority: k2[4] || 0\n }, k2[3] && (n3[mt].format = k2[3]), k2[5]) {\n n3[mt].hasAreaCodes = !0;\n for (var wa = 0; wa < k2[5].length; wa++) {\n var Jj = k2[2] + k2[5][wa];\n Fc(k2[1], Jj);\n }\n }\n QM[n3[mt].iso2] = mt, Fc(k2[1], k2[2], k2[4]);\n}\nvar _j = {\n allCountries: n3,\n iso2Lookup: QM,\n allCountryCodes: e4\n};\nconst kn = /* @__PURE__ */ Q2(_j);\nfunction Xc(e, t) {\n (t == null || t > e.length) && (t = e.length);\n for (var o = 0, n = Array(t); o < t; o++)\n n[o] = e[o];\n return n;\n}\nfunction $j(e) {\n if (Array.isArray(e))\n return e;\n}\nfunction eK(e, t) {\n var o = typeof Symbol < "u" && e[Symbol.iterator] || e["@@iterator"];\n if (!o) {\n if (Array.isArray(e) || (o = ZM(e)) || t && e && typeof e.length == "number") {\n o && (e = o);\n var n = 0, r = function() {\n };\n return {\n s: r,\n n: function() {\n return n >= e.length ? {\n done: !0\n } : {\n done: !1,\n value: e[n++]\n };\n },\n e: function(l) {\n throw l;\n },\n f: r\n };\n }\n throw new TypeError(`Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.`);\n }\n var i, a = !0, s = !1;\n return {\n s: function() {\n o = o.call(e);\n },\n n: function() {\n var l = o.next();\n return a = l.done, l;\n },\n e: function(l) {\n s = !0, i = l;\n },\n f: function() {\n try {\n a || o.return == null || o.return();\n } finally {\n if (s)\n throw i;\n }\n }\n };\n}\nfunction zi(e, t, o) {\n return (t = sK(t)) in e ? Object.defineProperty(e, t, {\n value: o,\n enumerable: !0,\n configurable: !0,\n writable: !0\n }) : e[t] = o, e;\n}\nfunction tK(e, t) {\n var o = e == null ? null : typeof Symbol < "u" && e[Symbol.iterator] || e["@@iterator"];\n if (o != null) {\n var n, r, i, a, s = [], l = !0, p = !1;\n try {\n if (i = (o = o.call(e)).next, t === 0) {\n if (Object(o) !== o)\n return;\n l = !1;\n } else\n for (; !(l = (n = i.call(o)).done) && (s.push(n.value), s.length !== t); l = !0)\n ;\n } catch (d) {\n p = !0, r = d;\n } finally {\n try {\n if (!l && o.return != null && (a = o.return(), Object(a) !== a))\n return;\n } finally {\n if (p)\n throw r;\n }\n }\n return s;\n }\n}\nfunction oK() {\n throw new TypeError(`Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.`);\n}\nfunction Uc(e, t) {\n var o = Object.keys(e);\n if (Object.getOwnPropertySymbols) {\n var n = Object.getOwnPropertySymbols(e);\n t && (n = n.filter(function(r) {\n return Object.getOwnPropertyDescriptor(e, r).enumerable;\n })), o.push.apply(o, n);\n }\n return o;\n}\nfunction Rr(e) {\n for (var t = 1; t < arguments.length; t++) {\n var o = arguments[t] != null ? arguments[t] : {};\n t % 2 ? Uc(Object(o), !0).forEach(function(n) {\n zi(e, n, o[n]);\n }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(o)) : Uc(Object(o)).forEach(function(n) {\n Object.defineProperty(e, n, Object.getOwnPropertyDescriptor(o, n));\n });\n }\n return e;\n}\nfunction rK(e, t) {\n if (e == null)\n return {};\n var o, n, r = nK(e, t);\n if (Object.getOwnPropertySymbols) {\n var i = Object.getOwnPropertySymbols(e);\n for (n = 0; n < i.length; n++)\n o = i[n], t.includes(o) || {}.propertyIsEnumerable.call(e, o) && (r[o] = e[o]);\n }\n return r;\n}\nfunction nK(e, t) {\n if (e == null)\n return {};\n var o = {};\n for (var n in e)\n if ({}.hasOwnProperty.call(e, n)) {\n if (t.includes(n))\n continue;\n o[n] = e[n];\n }\n return o;\n}\nfunction iK(e, t) {\n return $j(e) || tK(e, t) || ZM(e, t) || oK();\n}\nfunction aK(e, t) {\n if (typeof e != "object" || !e)\n return e;\n var o = e[Symbol.toPrimitive];\n if (o !== void 0) {\n var n = o.call(e, t || "default");\n if (typeof n != "object")\n return n;\n throw new TypeError("@@toPrimitive must return a primitive value.");\n }\n return (t === "string" ? String : Number)(e);\n}\nfunction sK(e) {\n var t = aK(e, "string");\n return typeof t == "symbol" ? t : t + "";\n}\nfunction ZM(e, t) {\n if (e) {\n if (typeof e == "string")\n return Xc(e, t);\n var o = {}.toString.call(e).slice(8, -1);\n return o === "Object" && e.constructor && (o = e.constructor.name), o === "Map" || o === "Set" ? Array.from(e) : o === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(o) ? Xc(e, t) : void 0;\n }\n}\nvar cK = {\n AD: "Andorra",\n AE: "United Arab Emirates",\n AF: "Afghanistan",\n AG: "Antigua and Barbuda",\n AI: "Anguilla",\n AL: "Albania",\n AM: "Armenia",\n AO: "Angola",\n AQ: "Antarctica",\n AR: "Argentina",\n AS: "American Samoa",\n AT: "Austria",\n AU: "Australia",\n AW: "Aruba",\n AX: "Åland Islands",\n AZ: "Azerbaijan",\n BA: "Bosnia and Herzegovina",\n BB: "Barbados",\n BD: "Bangladesh",\n BE: "Belgium",\n BF: "Burkina Faso",\n BG: "Bulgaria",\n BH: "Bahrain",\n BI: "Burundi",\n BJ: "Benin",\n BL: "Saint Barthélemy",\n BM: "Bermuda",\n BN: "Brunei",\n BO: "Bolivia",\n BQ: "Caribbean Netherlands",\n BR: "Brazil",\n BS: "Bahamas",\n BT: "Bhutan",\n BW: "Botswana",\n BY: "Belarus",\n BZ: "Belize",\n CA: "Canada",\n CC: "Cocos Islands",\n CD: "Democratic Republic of the Congo",\n CF: "Central African Republic",\n CG: "Republic of the Congo",\n CH: "Switzerland",\n CI: "Ivory Coast",\n CK: "Cook Islands",\n CL: "Chile",\n CM: "Cameroon",\n CN: "China",\n CO: "Colombia",\n CR: "Costa Rica",\n CU: "Cuba",\n CV: "Cabo Verde",\n CW: "Curaçao",\n CX: "Christmas Island",\n CY: "Cyprus",\n CZ: "Czechia",\n DE: "Germany",\n DJ: "Djibouti",\n DK: "Denmark",\n DM: "Dominica",\n DO: "Dominican Republic",\n DZ: "Algeria",\n EC: "Ecuador",\n EE: "Estonia",\n EG: "Egypt",\n EH: "Western Sahara",\n ER: "Eritrea",\n ES: "Spain",\n ET: "Ethiopia",\n FI: "Finland",\n FJ: "Fiji",\n FK: "Falkland Islands",\n FM: "Micronesia",\n FO: "Faroe Islands",\n FR: "France",\n GA: "Gabon",\n GB: "United Kingdom",\n GD: "Grenada",\n GE: "Georgia",\n GF: "French Guiana",\n GG: "Guernsey",\n GH: "Ghana",\n GI: "Gibraltar",\n GL: "Greenland",\n GM: "Gambia",\n GN: "Guinea",\n GP: "Guadeloupe",\n GQ: "Equatorial Guinea",\n GR: "Greece",\n GS: "South Georgia and the South Sandwich Islands",\n GT: "Guatemala",\n GU: "Guam",\n GW: "Guinea-Bissau",\n GY: "Guyana",\n HK: "Hong Kong",\n HN: "Honduras",\n HR: "Croatia",\n HT: "Haiti",\n HU: "Hungary",\n ID: "Indonesia",\n IE: "Ireland",\n IL: "Israel",\n IM: "Isle of Man",\n IN: "India",\n IO: "British Indian Ocean Territory",\n IQ: "Iraq",\n IR: "Iran",\n IS: "Iceland",\n IT: "Italy",\n JE: "Jersey",\n JM: "Jamaica",\n JO: "Jordan",\n JP: "Japan",\n KE: "Kenya",\n KG: "Kyrgyzstan",\n KH: "Cambodia",\n KI: "Kiribati",\n KM: "Comoros",\n KN: "Saint Kitts and Nevis",\n KP: "North Korea",\n KR: "South Korea",\n KW: "Kuwait",\n KY: "Cayman Islands",\n KZ: "Kazakhstan",\n LA: "Laos",\n LB: "Lebanon",\n LC: "Saint Lucia",\n LI: "Liechtenstein",\n LK: "Sri Lanka",\n LR: "Liberia",\n LS: "Lesotho",\n LT: "Lithuania",\n LU: "Luxembourg",\n LV: "Latvia",\n LY: "Libya",\n MA: "Morocco",\n MC: "Monaco",\n MD: "Moldova",\n ME: "Montenegro",\n MF: "Saint Martin",\n MG: "Madagascar",\n MH: "Marshall Islands",\n MK: "North Macedonia",\n ML: "Mali",\n MM: "Myanmar",\n MN: "Mongolia",\n MO: "Macao",\n MP: "Northern Mariana Islands",\n MQ: "Martinique",\n MR: "Mauritania",\n MS: "Montserrat",\n MT: "Malta",\n MU: "Mauritius",\n MV: "Maldives",\n MW: "Malawi",\n MX: "Mexico",\n MY: "Malaysia",\n MZ: "Mozambique",\n NA: "Namibia",\n NC: "New Caledonia",\n NE: "Niger",\n NF: "Norfolk Island",\n NG: "Nigeria",\n NI: "Nicaragua",\n NL: "Netherlands",\n NO: "Norway",\n NP: "Nepal",\n NR: "Nauru",\n NU: "Niue",\n NZ: "New Zealand",\n OM: "Oman",\n PA: "Panama",\n PE: "Peru",\n PF: "French Polynesia",\n PG: "Papua New Guinea",\n PH: "Philippines",\n PK: "Pakistan",\n PL: "Poland",\n PM: "Saint Pierre and Miquelon",\n PN: "Pitcairn",\n PR: "Puerto Rico",\n PS: "Palestine",\n PT: "Portugal",\n PW: "Palau",\n PY: "Paraguay",\n QA: "Qatar",\n RE: "Réunion",\n RO: "Romania",\n RS: "Serbia",\n RU: "Russia",\n RW: "Rwanda",\n SA: "Saudi Arabia",\n SB: "Solomon Islands",\n SC: "Seychelles",\n SD: "Sudan",\n SE: "Sweden",\n SG: "Singapore",\n SH: "Saint Helena, Ascension and Tristan da Cunha",\n SI: "Slovenia",\n SJ: "Svalbard and Jan Mayen",\n SK: "Slovakia",\n SL: "Sierra Leone",\n SM: "San Marino",\n SN: "Senegal",\n SO: "Somalia",\n SR: "Suriname",\n SS: "South Sudan",\n ST: "Sao Tome and Principe",\n SV: "El Salvador",\n SX: "Sint Maarten",\n SY: "Syria",\n SZ: "Eswatini",\n TC: "Turks and Caicos Islands",\n TD: "Chad",\n TF: "French Southern Territories",\n TG: "Togo",\n TH: "Thailand",\n TJ: "Tajikistan",\n TK: "Tokelau",\n TL: "Timor-Leste",\n TM: "Turkmenistan",\n TN: "Tunisia",\n TO: "Tonga",\n TR: "Türkiye",\n TT: "Trinidad and Tobago",\n TV: "Tuvalu",\n TW: "Taiwan",\n TZ: "Tanzania",\n UA: "Ukraine",\n UG: "Uganda",\n UM: "United States Minor Outlying Islands",\n US: "United States of America",\n UY: "Uruguay",\n UZ: "Uzbekistan",\n VA: "Holy See",\n VC: "Saint Vincent and the Grenadines",\n VE: "Venezuela",\n VG: "Virgin Islands (UK)",\n VI: "Virgin Islands (US)",\n VN: "Vietnam",\n VU: "Vanuatu",\n WF: "Wallis and Futuna",\n WS: "Samoa",\n YE: "Yemen",\n YT: "Mayotte",\n ZA: "South Africa",\n ZM: "Zambia",\n ZW: "Zimbabwe"\n}, lK = {\n "Africa/Abidjan": {\n u: 0,\n c: [\n "CI",\n "BF",\n "GH",\n "GM",\n "GN",\n "IS",\n "ML",\n "MR",\n "SH",\n "SL",\n "SN",\n "TG"\n ]\n },\n "Africa/Accra": {\n a: "Africa/Abidjan",\n c: [\n "GH"\n ],\n r: 1\n },\n "Africa/Addis_Ababa": {\n a: "Africa/Nairobi",\n c: [\n "ET"\n ],\n r: 1\n },\n "Africa/Algiers": {\n u: 60,\n c: [\n "DZ"\n ]\n },\n "Africa/Asmara": {\n a: "Africa/Nairobi",\n c: [\n "ER"\n ],\n r: 1\n },\n "Africa/Asmera": {\n a: "Africa/Nairobi",\n c: [\n "ER"\n ],\n r: 1\n },\n "Africa/Bamako": {\n a: "Africa/Abidjan",\n c: [\n "ML"\n ],\n r: 1\n },\n "Africa/Bangui": {\n a: "Africa/Lagos",\n c: [\n "CF"\n ],\n r: 1\n },\n "Africa/Banjul": {\n a: "Africa/Abidjan",\n c: [\n "GM"\n ],\n r: 1\n },\n "Africa/Bissau": {\n u: 0,\n c: [\n "GW"\n ]\n },\n "Africa/Blantyre": {\n a: "Africa/Maputo",\n c: [\n "MW"\n ],\n r: 1\n },\n "Africa/Brazzaville": {\n a: "Africa/Lagos",\n c: [\n "CG"\n ],\n r: 1\n },\n "Africa/Bujumbura": {\n a: "Africa/Maputo",\n c: [\n "BI"\n ],\n r: 1\n },\n "Africa/Cairo": {\n u: 120,\n d: 180,\n c: [\n "EG"\n ]\n },\n "Africa/Casablanca": {\n u: 60,\n d: 0,\n c: [\n "MA"\n ]\n },\n "Africa/Ceuta": {\n u: 60,\n d: 120,\n c: [\n "ES"\n ]\n },\n "Africa/Conakry": {\n a: "Africa/Abidjan",\n c: [\n "GN"\n ],\n r: 1\n },\n "Africa/Dakar": {\n a: "Africa/Abidjan",\n c: [\n "SN"\n ],\n r: 1\n },\n "Africa/Dar_es_Salaam": {\n a: "Africa/Nairobi",\n c: [\n "TZ"\n ],\n r: 1\n },\n "Africa/Djibouti": {\n a: "Africa/Nairobi",\n c: [\n "DJ"\n ],\n r: 1\n },\n "Africa/Douala": {\n a: "Africa/Lagos",\n c: [\n "CM"\n ],\n r: 1\n },\n "Africa/El_Aaiun": {\n u: 60,\n d: 0,\n c: [\n "EH"\n ]\n },\n "Africa/Freetown": {\n a: "Africa/Abidjan",\n c: [\n "SL"\n ],\n r: 1\n },\n "Africa/Gaborone": {\n a: "Africa/Maputo",\n c: [\n "BW"\n ],\n r: 1\n },\n "Africa/Harare": {\n a: "Africa/Maputo",\n c: [\n "ZW"\n ],\n r: 1\n },\n "Africa/Johannesburg": {\n u: 120,\n c: [\n "ZA",\n "LS",\n "SZ"\n ]\n },\n "Africa/Juba": {\n u: 120,\n c: [\n "SS"\n ]\n },\n "Africa/Kampala": {\n a: "Africa/Nairobi",\n c: [\n "UG"\n ],\n r: 1\n },\n "Africa/Khartoum": {\n u: 120,\n c: [\n "SD"\n ]\n },\n "Africa/Kigali": {\n a: "Africa/Maputo",\n c: [\n "RW"\n ],\n r: 1\n },\n "Africa/Kinshasa": {\n a: "Africa/Lagos",\n c: [\n "CD"\n ],\n r: 1\n },\n "Africa/Lagos": {\n u: 60,\n c: [\n "NG",\n "AO",\n "BJ",\n "CD",\n "CF",\n "CG",\n "CM",\n "GA",\n "GQ",\n "NE"\n ]\n },\n "Africa/Libreville": {\n a: "Africa/Lagos",\n c: [\n "GA"\n ],\n r: 1\n },\n "Africa/Lome": {\n a: "Africa/Abidjan",\n c: [\n "TG"\n ],\n r: 1\n },\n "Africa/Luanda": {\n a: "Africa/Lagos",\n c: [\n "AO"\n ],\n r: 1\n },\n "Africa/Lubumbashi": {\n a: "Africa/Maputo",\n c: [\n "CD"\n ],\n r: 1\n },\n "Africa/Lusaka": {\n a: "Africa/Maputo",\n c: [\n "ZM"\n ],\n r: 1\n },\n "Africa/Malabo": {\n a: "Africa/Lagos",\n c: [\n "GQ"\n ],\n r: 1\n },\n "Africa/Maputo": {\n u: 120,\n c: [\n "MZ",\n "BI",\n "BW",\n "CD",\n "MW",\n "RW",\n "ZM",\n "ZW"\n ]\n },\n "Africa/Maseru": {\n a: "Africa/Johannesburg",\n c: [\n "LS"\n ],\n r: 1\n },\n "Africa/Mbabane": {\n a: "Africa/Johannesburg",\n c: [\n "SZ"\n ],\n r: 1\n },\n "Africa/Mogadishu": {\n a: "Africa/Nairobi",\n c: [\n "SO"\n ],\n r: 1\n },\n "Africa/Monrovia": {\n u: 0,\n c: [\n "LR"\n ]\n },\n "Africa/Nairobi": {\n u: 180,\n c: [\n "KE",\n "DJ",\n "ER",\n "ET",\n "KM",\n "MG",\n "SO",\n "TZ",\n "UG",\n "YT"\n ]\n },\n "Africa/Ndjamena": {\n u: 60,\n c: [\n "TD"\n ]\n },\n "Africa/Niamey": {\n a: "Africa/Lagos",\n c: [\n "NE"\n ],\n r: 1\n },\n "Africa/Nouakchott": {\n a: "Africa/Abidjan",\n c: [\n "MR"\n ],\n r: 1\n },\n "Africa/Ouagadougou": {\n a: "Africa/Abidjan",\n c: [\n "BF"\n ],\n r: 1\n },\n "Africa/Porto-Novo": {\n a: "Africa/Lagos",\n c: [\n "BJ"\n ],\n r: 1\n },\n "Africa/Sao_Tome": {\n u: 0,\n c: [\n "ST"\n ]\n },\n "Africa/Timbuktu": {\n a: "Africa/Abidjan",\n c: [\n "ML"\n ],\n r: 1\n },\n "Africa/Tripoli": {\n u: 120,\n c: [\n "LY"\n ]\n },\n "Africa/Tunis": {\n u: 60,\n c: [\n "TN"\n ]\n },\n "Africa/Windhoek": {\n u: 120,\n c: [\n "NA"\n ]\n },\n "America/Adak": {\n u: -600,\n d: -540,\n c: [\n "US"\n ]\n },\n "America/Anchorage": {\n u: -540,\n d: -480,\n c: [\n "US"\n ]\n },\n "America/Anguilla": {\n a: "America/Puerto_Rico",\n c: [\n "AI"\n ],\n r: 1\n },\n "America/Antigua": {\n a: "America/Puerto_Rico",\n c: [\n "AG"\n ],\n r: 1\n },\n "America/Araguaina": {\n u: -180,\n c: [\n "BR"\n ]\n },\n "America/Argentina/Buenos_Aires": {\n u: -180,\n c: [\n "AR"\n ]\n },\n "America/Argentina/Catamarca": {\n u: -180,\n c: [\n "AR"\n ]\n },\n "America/Argentina/ComodRivadavia": {\n a: "America/Argentina/Catamarca",\n r: 1\n },\n "America/Argentina/Cordoba": {\n u: -180,\n c: [\n "AR"\n ]\n },\n "America/Argentina/Jujuy": {\n u: -180,\n c: [\n "AR"\n ]\n },\n "America/Argentina/La_Rioja": {\n u: -180,\n c: [\n "AR"\n ]\n },\n "America/Argentina/Mendoza": {\n u: -180,\n c: [\n "AR"\n ]\n },\n "America/Argentina/Rio_Gallegos": {\n u: -180,\n c: [\n "AR"\n ]\n },\n "America/Argentina/Salta": {\n u: -180,\n c: [\n "AR"\n ]\n },\n "America/Argentina/San_Juan": {\n u: -180,\n c: [\n "AR"\n ]\n },\n "America/Argentina/San_Luis": {\n u: -180,\n c: [\n "AR"\n ]\n },\n "America/Argentina/Tucuman": {\n u: -180,\n c: [\n "AR"\n ]\n },\n "America/Argentina/Ushuaia": {\n u: -180,\n c: [\n "AR"\n ]\n },\n "America/Aruba": {\n a: "America/Puerto_Rico",\n c: [\n "AW"\n ],\n r: 1\n },\n "America/Asuncion": {\n u: -240,\n d: -180,\n c: [\n "PY"\n ]\n },\n "America/Atikokan": {\n a: "America/Panama",\n c: [\n "CA"\n ],\n r: 1\n },\n "America/Atka": {\n a: "America/Adak",\n r: 1\n },\n "America/Bahia": {\n u: -180,\n c: [\n "BR"\n ]\n },\n "America/Bahia_Banderas": {\n u: -360,\n c: [\n "MX"\n ]\n },\n "America/Barbados": {\n u: -240,\n c: [\n "BB"\n ]\n },\n "America/Belem": {\n u: -180,\n c: [\n "BR"\n ]\n },\n "America/Belize": {\n u: -360,\n c: [\n "BZ"\n ]\n },\n "America/Blanc-Sablon": {\n a: "America/Puerto_Rico",\n c: [\n "CA"\n ],\n r: 1\n },\n "America/Boa_Vista": {\n u: -240,\n c: [\n "BR"\n ]\n },\n "America/Bogota": {\n u: -300,\n c: [\n "CO"\n ]\n },\n "America/Boise": {\n u: -420,\n d: -360,\n c: [\n "US"\n ]\n },\n "America/Buenos_Aires": {\n a: "America/Argentina/Buenos_Aires",\n r: 1\n },\n "America/Cambridge_Bay": {\n u: -420,\n d: -360,\n c: [\n "CA"\n ]\n },\n "America/Campo_Grande": {\n u: -240,\n c: [\n "BR"\n ]\n },\n "America/Cancun": {\n u: -300,\n c: [\n "MX"\n ]\n },\n "America/Caracas": {\n u: -240,\n c: [\n "VE"\n ]\n },\n "America/Catamarca": {\n a: "America/Argentina/Catamarca",\n r: 1\n },\n "America/Cayenne": {\n u: -180,\n c: [\n "GF"\n ]\n },\n "America/Cayman": {\n a: "America/Panama",\n c: [\n "KY"\n ],\n r: 1\n },\n "America/Chicago": {\n u: -360,\n d: -300,\n c: [\n "US"\n ]\n },\n "America/Chihuahua": {\n u: -360,\n c: [\n "MX"\n ]\n },\n "America/Ciudad_Juarez": {\n u: -420,\n d: -360,\n c: [\n "MX"\n ]\n },\n "America/Coral_Harbour": {\n a: "America/Panama",\n c: [\n "CA"\n ],\n r: 1\n },\n "America/Cordoba": {\n a: "America/Argentina/Cordoba",\n r: 1\n },\n "America/Costa_Rica": {\n u: -360,\n c: [\n "CR"\n ]\n },\n "America/Creston": {\n a: "America/Phoenix",\n c: [\n "CA"\n ],\n r: 1\n },\n "America/Cuiaba": {\n u: -240,\n c: [\n "BR"\n ]\n },\n "America/Curacao": {\n a: "America/Puerto_Rico",\n c: [\n "CW"\n ],\n r: 1\n },\n "America/Danmarkshavn": {\n u: 0,\n c: [\n "GL"\n ]\n },\n "America/Dawson": {\n u: -420,\n c: [\n "CA"\n ]\n },\n "America/Dawson_Creek": {\n u: -420,\n c: [\n "CA"\n ]\n },\n "America/Denver": {\n u: -420,\n d: -360,\n c: [\n "US"\n ]\n },\n "America/Detroit": {\n u: -300,\n d: -240,\n c: [\n "US"\n ]\n },\n "America/Dominica": {\n a: "America/Puerto_Rico",\n c: [\n "DM"\n ],\n r: 1\n },\n "America/Edmonton": {\n u: -420,\n d: -360,\n c: [\n "CA"\n ]\n },\n "America/Eirunepe": {\n u: -300,\n c: [\n "BR"\n ]\n },\n "America/El_Salvador": {\n u: -360,\n c: [\n "SV"\n ]\n },\n "America/Ensenada": {\n a: "America/Tijuana",\n r: 1\n },\n "America/Fort_Nelson": {\n u: -420,\n c: [\n "CA"\n ]\n },\n "America/Fort_Wayne": {\n a: "America/Indiana/Indianapolis",\n r: 1\n },\n "America/Fortaleza": {\n u: -180,\n c: [\n "BR"\n ]\n },\n "America/Glace_Bay": {\n u: -240,\n d: -180,\n c: [\n "CA"\n ]\n },\n "America/Godthab": {\n a: "America/Nuuk",\n r: 1\n },\n "America/Goose_Bay": {\n u: -240,\n d: -180,\n c: [\n "CA"\n ]\n },\n "America/Grand_Turk": {\n u: -300,\n d: -240,\n c: [\n "TC"\n ]\n },\n "America/Grenada": {\n a: "America/Puerto_Rico",\n c: [\n "GD"\n ],\n r: 1\n },\n "America/Guadeloupe": {\n a: "America/Puerto_Rico",\n c: [\n "GP"\n ],\n r: 1\n },\n "America/Guatemala": {\n u: -360,\n c: [\n "GT"\n ]\n },\n "America/Guayaquil": {\n u: -300,\n c: [\n "EC"\n ]\n },\n "America/Guyana": {\n u: -240,\n c: [\n "GY"\n ]\n },\n "America/Halifax": {\n u: -240,\n d: -180,\n c: [\n "CA"\n ]\n },\n "America/Havana": {\n u: -300,\n d: -240,\n c: [\n "CU"\n ]\n },\n "America/Hermosillo": {\n u: -420,\n c: [\n "MX"\n ]\n },\n "America/Indiana/Indianapolis": {\n u: -300,\n d: -240,\n c: [\n "US"\n ]\n },\n "America/Indiana/Knox": {\n u: -360,\n d: -300,\n c: [\n "US"\n ]\n },\n "America/Indiana/Marengo": {\n u: -300,\n d: -240,\n c: [\n "US"\n ]\n },\n "America/Indiana/Petersburg": {\n u: -300,\n d: -240,\n c: [\n "US"\n ]\n },\n "America/Indiana/Tell_City": {\n u: -360,\n d: -300,\n c: [\n "US"\n ]\n },\n "America/Indiana/Vevay": {\n u: -300,\n d: -240,\n c: [\n "US"\n ]\n },\n "America/Indiana/Vincennes": {\n u: -300,\n d: -240,\n c: [\n "US"\n ]\n },\n "America/Indiana/Winamac": {\n u: -300,\n d: -240,\n c: [\n "US"\n ]\n },\n "America/Indianapolis": {\n a: "America/Indiana/Indianapolis",\n r: 1\n },\n "America/Inuvik": {\n u: -420,\n d: -360,\n c: [\n "CA"\n ]\n },\n "America/Iqaluit": {\n u: -300,\n d: -240,\n c: [\n "CA"\n ]\n },\n "America/Jamaica": {\n u: -300,\n c: [\n "JM"\n ]\n },\n "America/Jujuy": {\n a: "America/Argentina/Jujuy",\n r: 1\n },\n "America/Juneau": {\n u: -540,\n d: -480,\n c: [\n "US"\n ]\n },\n "America/Kentucky/Louisville": {\n u: -300,\n d: -240,\n c: [\n "US"\n ]\n },\n "America/Kentucky/Monticello": {\n u: -300,\n d: -240,\n c: [\n "US"\n ]\n },\n "America/Knox_IN": {\n a: "America/Indiana/Knox",\n r: 1\n },\n "America/Kralendijk": {\n a: "America/Puerto_Rico",\n c: [\n "BQ"\n ],\n r: 1\n },\n "America/La_Paz": {\n u: -240,\n c: [\n "BO"\n ]\n },\n "America/Lima": {\n u: -300,\n c: [\n "PE"\n ]\n },\n "America/Los_Angeles": {\n u: -480,\n d: -420,\n c: [\n "US"\n ]\n },\n "America/Louisville": {\n a: "America/Kentucky/Louisville",\n r: 1\n },\n "America/Lower_Princes": {\n a: "America/Puerto_Rico",\n c: [\n "SX"\n ],\n r: 1\n },\n "America/Maceio": {\n u: -180,\n c: [\n "BR"\n ]\n },\n "America/Managua": {\n u: -360,\n c: [\n "NI"\n ]\n },\n "America/Manaus": {\n u: -240,\n c: [\n "BR"\n ]\n },\n "America/Marigot": {\n a: "America/Puerto_Rico",\n c: [\n "MF"\n ],\n r: 1\n },\n "America/Martinique": {\n u: -240,\n c: [\n "MQ"\n ]\n },\n "America/Matamoros": {\n u: -360,\n d: -300,\n c: [\n "MX"\n ]\n },\n "America/Mazatlan": {\n u: -420,\n c: [\n "MX"\n ]\n },\n "America/Mendoza": {\n a: "America/Argentina/Mendoza",\n r: 1\n },\n "America/Menominee": {\n u: -360,\n d: -300,\n c: [\n "US"\n ]\n },\n "America/Merida": {\n u: -360,\n c: [\n "MX"\n ]\n },\n "America/Metlakatla": {\n u: -540,\n d: -480,\n c: [\n "US"\n ]\n },\n "America/Mexico_City": {\n u: -360,\n c: [\n "MX"\n ]\n },\n "America/Miquelon": {\n u: -180,\n d: -120,\n c: [\n "PM"\n ]\n },\n "America/Moncton": {\n u: -240,\n d: -180,\n c: [\n "CA"\n ]\n },\n "America/Monterrey": {\n u: -360,\n c: [\n "MX"\n ]\n },\n "America/Montevideo": {\n u: -180,\n c: [\n "UY"\n ]\n },\n "America/Montreal": {\n a: "America/Toronto",\n c: [\n "CA"\n ],\n r: 1\n },\n "America/Montserrat": {\n a: "America/Puerto_Rico",\n c: [\n "MS"\n ],\n r: 1\n },\n "America/Nassau": {\n a: "America/Toronto",\n c: [\n "BS"\n ],\n r: 1\n },\n "America/New_York": {\n u: -300,\n d: -240,\n c: [\n "US"\n ]\n },\n "America/Nipigon": {\n a: "America/Toronto",\n c: [\n "CA"\n ],\n r: 1\n },\n "America/Nome": {\n u: -540,\n d: -480,\n c: [\n "US"\n ]\n },\n "America/Noronha": {\n u: -120,\n c: [\n "BR"\n ]\n },\n "America/North_Dakota/Beulah": {\n u: -360,\n d: -300,\n c: [\n "US"\n ]\n },\n "America/North_Dakota/Center": {\n u: -360,\n d: -300,\n c: [\n "US"\n ]\n },\n "America/North_Dakota/New_Salem": {\n u: -360,\n d: -300,\n c: [\n "US"\n ]\n },\n "America/Nuuk": {\n u: -120,\n d: -60,\n c: [\n "GL"\n ]\n },\n "America/Ojinaga": {\n u: -360,\n d: -300,\n c: [\n "MX"\n ]\n },\n "America/Panama": {\n u: -300,\n c: [\n "PA",\n "CA",\n "KY"\n ]\n },\n "America/Pangnirtung": {\n a: "America/Iqaluit",\n r: 1\n },\n "America/Paramaribo": {\n u: -180,\n c: [\n "SR"\n ]\n },\n "America/Phoenix": {\n u: -420,\n c: [\n "US",\n "CA"\n ]\n },\n "America/Port-au-Prince": {\n u: -300,\n d: -240,\n c: [\n "HT"\n ]\n },\n "America/Port_of_Spain": {\n a: "America/Puerto_Rico",\n c: [\n "TT"\n ],\n r: 1\n },\n "America/Porto_Acre": {\n a: "America/Rio_Branco",\n r: 1\n },\n "America/Porto_Velho": {\n u: -240,\n c: [\n "BR"\n ]\n },\n "America/Puerto_Rico": {\n u: -240,\n c: [\n "PR",\n "AG",\n "CA",\n "AI",\n "AW",\n "BL",\n "BQ",\n "CW",\n "DM",\n "GD",\n "GP",\n "KN",\n "LC",\n "MF",\n "MS",\n "SX",\n "TT",\n "VC",\n "VG",\n "VI"\n ]\n },\n "America/Punta_Arenas": {\n u: -180,\n c: [\n "CL"\n ]\n },\n "America/Rainy_River": {\n a: "America/Winnipeg",\n r: 1\n },\n "America/Rankin_Inlet": {\n u: -360,\n d: -300,\n c: [\n "CA"\n ]\n },\n "America/Recife": {\n u: -180,\n c: [\n "BR"\n ]\n },\n "America/Regina": {\n u: -360,\n c: [\n "CA"\n ]\n },\n "America/Resolute": {\n u: -360,\n d: -300,\n c: [\n "CA"\n ]\n },\n "America/Rio_Branco": {\n u: -300,\n c: [\n "BR"\n ]\n },\n "America/Rosario": {\n a: "America/Argentina/Cordoba",\n r: 1\n },\n "America/Santa_Isabel": {\n a: "America/Tijuana",\n r: 1\n },\n "America/Santarem": {\n u: -180,\n c: [\n "BR"\n ]\n },\n "America/Santiago": {\n u: -240,\n d: -180,\n c: [\n "CL"\n ]\n },\n "America/Santo_Domingo": {\n u: -240,\n c: [\n "DO"\n ]\n },\n "America/Sao_Paulo": {\n u: -180,\n c: [\n "BR"\n ]\n },\n "America/Scoresbysund": {\n u: -120,\n d: -60,\n c: [\n "GL"\n ]\n },\n "America/Shiprock": {\n a: "America/Denver",\n r: 1\n },\n "America/Sitka": {\n u: -540,\n d: -480,\n c: [\n "US"\n ]\n },\n "America/St_Barthelemy": {\n a: "America/Puerto_Rico",\n c: [\n "BL"\n ],\n r: 1\n },\n "America/St_Johns": {\n u: -210,\n d: -150,\n c: [\n "CA"\n ]\n },\n "America/St_Kitts": {\n a: "America/Puerto_Rico",\n c: [\n "KN"\n ],\n r: 1\n },\n "America/St_Lucia": {\n a: "America/Puerto_Rico",\n c: [\n "LC"\n ],\n r: 1\n },\n "America/St_Thomas": {\n a: "America/Puerto_Rico",\n c: [\n "VI"\n ],\n r: 1\n },\n "America/St_Vincent": {\n a: "America/Puerto_Rico",\n c: [\n "VC"\n ],\n r: 1\n },\n "America/Swift_Current": {\n u: -360,\n c: [\n "CA"\n ]\n },\n "America/Tegucigalpa": {\n u: -360,\n c: [\n "HN"\n ]\n },\n "America/Thule": {\n u: -240,\n d: -180,\n c: [\n "GL"\n ]\n },\n "America/Thunder_Bay": {\n a: "America/Toronto",\n c: [\n "CA"\n ],\n r: 1\n },\n "America/Tijuana": {\n u: -480,\n d: -420,\n c: [\n "MX"\n ]\n },\n "America/Toronto": {\n u: -300,\n d: -240,\n c: [\n "CA",\n "BS"\n ]\n },\n "America/Tortola": {\n a: "America/Puerto_Rico",\n c: [\n "VG"\n ],\n r: 1\n },\n "America/Vancouver": {\n u: -480,\n d: -420,\n c: [\n "CA"\n ]\n },\n "America/Virgin": {\n a: "America/Puerto_Rico",\n c: [\n "VI"\n ],\n r: 1\n },\n "America/Whitehorse": {\n u: -420,\n c: [\n "CA"\n ]\n },\n "America/Winnipeg": {\n u: -360,\n d: -300,\n c: [\n "CA"\n ]\n },\n "America/Yakutat": {\n u: -540,\n d: -480,\n c: [\n "US"\n ]\n },\n "America/Yellowknife": {\n a: "America/Edmonton",\n r: 1\n },\n "Antarctica/Casey": {\n u: 480,\n c: [\n "AQ"\n ]\n },\n "Antarctica/Davis": {\n u: 420,\n c: [\n "AQ"\n ]\n },\n "Antarctica/DumontDUrville": {\n a: "Pacific/Port_Moresby",\n c: [\n "AQ"\n ],\n r: 1\n },\n "Antarctica/Macquarie": {\n u: 600,\n d: 660,\n c: [\n "AU"\n ]\n },\n "Antarctica/Mawson": {\n u: 300,\n c: [\n "AQ"\n ]\n },\n "Antarctica/McMurdo": {\n a: "Pacific/Auckland",\n c: [\n "AQ"\n ],\n r: 1\n },\n "Antarctica/Palmer": {\n u: -180,\n c: [\n "AQ"\n ]\n },\n "Antarctica/Rothera": {\n u: -180,\n c: [\n "AQ"\n ]\n },\n "Antarctica/South_Pole": {\n a: "Pacific/Auckland",\n c: [\n "AQ"\n ],\n r: 1\n },\n "Antarctica/Syowa": {\n a: "Asia/Riyadh",\n c: [\n "AQ"\n ],\n r: 1\n },\n "Antarctica/Troll": {\n u: 0,\n d: 120,\n c: [\n "AQ"\n ]\n },\n "Antarctica/Vostok": {\n u: 300,\n c: [\n "AQ"\n ]\n },\n "Arctic/Longyearbyen": {\n a: "Europe/Berlin",\n c: [\n "SJ"\n ],\n r: 1\n },\n "Asia/Aden": {\n a: "Asia/Riyadh",\n c: [\n "YE"\n ],\n r: 1\n },\n "Asia/Almaty": {\n u: 300,\n c: [\n "KZ"\n ]\n },\n "Asia/Amman": {\n u: 180,\n c: [\n "JO"\n ]\n },\n "Asia/Anadyr": {\n u: 720,\n c: [\n "RU"\n ]\n },\n "Asia/Aqtau": {\n u: 300,\n c: [\n "KZ"\n ]\n },\n "Asia/Aqtobe": {\n u: 300,\n c: [\n "KZ"\n ]\n },\n "Asia/Ashgabat": {\n u: 300,\n c: [\n "TM"\n ]\n },\n "Asia/Ashkhabad": {\n a: "Asia/Ashgabat",\n r: 1\n },\n "Asia/Atyrau": {\n u: 300,\n c: [\n "KZ"\n ]\n },\n "Asia/Baghdad": {\n u: 180,\n c: [\n "IQ"\n ]\n },\n "Asia/Bahrain": {\n a: "Asia/Qatar",\n c: [\n "BH"\n ],\n r: 1\n },\n "Asia/Baku": {\n u: 240,\n c: [\n "AZ"\n ]\n },\n "Asia/Bangkok": {\n u: 420,\n c: [\n "TH",\n "CX",\n "KH",\n "LA",\n "VN"\n ]\n },\n "Asia/Barnaul": {\n u: 420,\n c: [\n "RU"\n ]\n },\n "Asia/Beirut": {\n u: 120,\n d: 180,\n c: [\n "LB"\n ]\n },\n "Asia/Bishkek": {\n u: 360,\n c: [\n "KG"\n ]\n },\n "Asia/Brunei": {\n a: "Asia/Kuching",\n c: [\n "BN"\n ],\n r: 1\n },\n "Asia/Calcutta": {\n a: "Asia/Kolkata",\n r: 1\n },\n "Asia/Chita": {\n u: 540,\n c: [\n "RU"\n ]\n },\n "Asia/Choibalsan": {\n a: "Asia/Ulaanbaatar",\n r: 1\n },\n "Asia/Chongqing": {\n a: "Asia/Shanghai",\n r: 1\n },\n "Asia/Chungking": {\n a: "Asia/Shanghai",\n r: 1\n },\n "Asia/Colombo": {\n u: 330,\n c: [\n "LK"\n ]\n },\n "Asia/Dacca": {\n a: "Asia/Dhaka",\n r: 1\n },\n "Asia/Damascus": {\n u: 180,\n c: [\n "SY"\n ]\n },\n "Asia/Dhaka": {\n u: 360,\n c: [\n "BD"\n ]\n },\n "Asia/Dili": {\n u: 540,\n c: [\n "TL"\n ]\n },\n "Asia/Dubai": {\n u: 240,\n c: [\n "AE",\n "OM",\n "RE",\n "SC",\n "TF"\n ]\n },\n "Asia/Dushanbe": {\n u: 300,\n c: [\n "TJ"\n ]\n },\n "Asia/Famagusta": {\n u: 120,\n d: 180,\n c: [\n "CY"\n ]\n },\n "Asia/Gaza": {\n u: 120,\n d: 180,\n c: [\n "PS"\n ]\n },\n "Asia/Harbin": {\n a: "Asia/Shanghai",\n r: 1\n },\n "Asia/Hebron": {\n u: 120,\n d: 180,\n c: [\n "PS"\n ]\n },\n "Asia/Ho_Chi_Minh": {\n u: 420,\n c: [\n "VN"\n ]\n },\n "Asia/Hong_Kong": {\n u: 480,\n c: [\n "HK"\n ]\n },\n "Asia/Hovd": {\n u: 420,\n c: [\n "MN"\n ]\n },\n "Asia/Irkutsk": {\n u: 480,\n c: [\n "RU"\n ]\n },\n "Asia/Istanbul": {\n a: "Europe/Istanbul",\n r: 1\n },\n "Asia/Jakarta": {\n u: 420,\n c: [\n "ID"\n ]\n },\n "Asia/Jayapura": {\n u: 540,\n c: [\n "ID"\n ]\n },\n "Asia/Jerusalem": {\n u: 120,\n d: 180,\n c: [\n "IL"\n ]\n },\n "Asia/Kabul": {\n u: 270,\n c: [\n "AF"\n ]\n },\n "Asia/Kamchatka": {\n u: 720,\n c: [\n "RU"\n ]\n },\n "Asia/Karachi": {\n u: 300,\n c: [\n "PK"\n ]\n },\n "Asia/Kashgar": {\n a: "Asia/Urumqi",\n r: 1\n },\n "Asia/Kathmandu": {\n u: 345,\n c: [\n "NP"\n ]\n },\n "Asia/Katmandu": {\n a: "Asia/Kathmandu",\n r: 1\n },\n "Asia/Khandyga": {\n u: 540,\n c: [\n "RU"\n ]\n },\n "Asia/Kolkata": {\n u: 330,\n c: [\n "IN"\n ]\n },\n "Asia/Krasnoyarsk": {\n u: 420,\n c: [\n "RU"\n ]\n },\n "Asia/Kuala_Lumpur": {\n a: "Asia/Singapore",\n c: [\n "MY"\n ],\n r: 1\n },\n "Asia/Kuching": {\n u: 480,\n c: [\n "MY",\n "BN"\n ]\n },\n "Asia/Kuwait": {\n a: "Asia/Riyadh",\n c: [\n "KW"\n ],\n r: 1\n },\n "Asia/Macao": {\n a: "Asia/Macau",\n r: 1\n },\n "Asia/Macau": {\n u: 480,\n c: [\n "MO"\n ]\n },\n "Asia/Magadan": {\n u: 660,\n c: [\n "RU"\n ]\n },\n "Asia/Makassar": {\n u: 480,\n c: [\n "ID"\n ]\n },\n "Asia/Manila": {\n u: 480,\n c: [\n "PH"\n ]\n },\n "Asia/Muscat": {\n a: "Asia/Dubai",\n c: [\n "OM"\n ],\n r: 1\n },\n "Asia/Nicosia": {\n u: 120,\n d: 180,\n c: [\n "CY"\n ]\n },\n "Asia/Novokuznetsk": {\n u: 420,\n c: [\n "RU"\n ]\n },\n "Asia/Novosibirsk": {\n u: 420,\n c: [\n "RU"\n ]\n },\n "Asia/Omsk": {\n u: 360,\n c: [\n "RU"\n ]\n },\n "Asia/Oral": {\n u: 300,\n c: [\n "KZ"\n ]\n },\n "Asia/Phnom_Penh": {\n a: "Asia/Bangkok",\n c: [\n "KH"\n ],\n r: 1\n },\n "Asia/Pontianak": {\n u: 420,\n c: [\n "ID"\n ]\n },\n "Asia/Pyongyang": {\n u: 540,\n c: [\n "KP"\n ]\n },\n "Asia/Qatar": {\n u: 180,\n c: [\n "QA",\n "BH"\n ]\n },\n "Asia/Qostanay": {\n u: 300,\n c: [\n "KZ"\n ]\n },\n "Asia/Qyzylorda": {\n u: 300,\n c: [\n "KZ"\n ]\n },\n "Asia/Rangoon": {\n a: "Asia/Yangon",\n c: [\n "MM"\n ],\n r: 1\n },\n "Asia/Riyadh": {\n u: 180,\n c: [\n "SA",\n "AQ",\n "KW",\n "YE"\n ]\n },\n "Asia/Saigon": {\n a: "Asia/Ho_Chi_Minh",\n r: 1\n },\n "Asia/Sakhalin": {\n u: 660,\n c: [\n "RU"\n ]\n },\n "Asia/Samarkand": {\n u: 300,\n c: [\n "UZ"\n ]\n },\n "Asia/Seoul": {\n u: 540,\n c: [\n "KR"\n ]\n },\n "Asia/Shanghai": {\n u: 480,\n c: [\n "CN"\n ]\n },\n "Asia/Singapore": {\n u: 480,\n c: [\n "SG",\n "MY"\n ]\n },\n "Asia/Srednekolymsk": {\n u: 660,\n c: [\n "RU"\n ]\n },\n "Asia/Taipei": {\n u: 480,\n c: [\n "TW"\n ]\n },\n "Asia/Tashkent": {\n u: 300,\n c: [\n "UZ"\n ]\n },\n "Asia/Tbilisi": {\n u: 240,\n c: [\n "GE"\n ]\n },\n "Asia/Tehran": {\n u: 210,\n c: [\n "IR"\n ]\n },\n "Asia/Tel_Aviv": {\n a: "Asia/Jerusalem",\n r: 1\n },\n "Asia/Thimbu": {\n a: "Asia/Thimphu",\n r: 1\n },\n "Asia/Thimphu": {\n u: 360,\n c: [\n "BT"\n ]\n },\n "Asia/Tokyo": {\n u: 540,\n c: [\n "JP"\n ]\n },\n "Asia/Tomsk": {\n u: 420,\n c: [\n "RU"\n ]\n },\n "Asia/Ujung_Pandang": {\n a: "Asia/Makassar",\n r: 1\n },\n "Asia/Ulaanbaatar": {\n u: 480,\n c: [\n "MN"\n ]\n },\n "Asia/Ulan_Bator": {\n a: "Asia/Ulaanbaatar",\n r: 1\n },\n "Asia/Urumqi": {\n u: 360,\n c: [\n "CN"\n ]\n },\n "Asia/Ust-Nera": {\n u: 600,\n c: [\n "RU"\n ]\n },\n "Asia/Vientiane": {\n a: "Asia/Bangkok",\n c: [\n "LA"\n ],\n r: 1\n },\n "Asia/Vladivostok": {\n u: 600,\n c: [\n "RU"\n ]\n },\n "Asia/Yakutsk": {\n u: 540,\n c: [\n "RU"\n ]\n },\n "Asia/Yangon": {\n u: 390,\n c: [\n "MM",\n "CC"\n ]\n },\n "Asia/Yekaterinburg": {\n u: 300,\n c: [\n "RU"\n ]\n },\n "Asia/Yerevan": {\n u: 240,\n c: [\n "AM"\n ]\n },\n "Atlantic/Azores": {\n u: -60,\n d: 0,\n c: [\n "PT"\n ]\n },\n "Atlantic/Bermuda": {\n u: -240,\n d: -180,\n c: [\n "BM"\n ]\n },\n "Atlantic/Canary": {\n u: 0,\n d: 60,\n c: [\n "ES"\n ]\n },\n "Atlantic/Cape_Verde": {\n u: -60,\n c: [\n "CV"\n ]\n },\n "Atlantic/Faeroe": {\n a: "Atlantic/Faroe",\n r: 1\n },\n "Atlantic/Faroe": {\n u: 0,\n d: 60,\n c: [\n "FO"\n ]\n },\n "Atlantic/Jan_Mayen": {\n a: "Europe/Berlin",\n c: [\n "SJ"\n ],\n r: 1\n },\n "Atlantic/Madeira": {\n u: 0,\n d: 60,\n c: [\n "PT"\n ]\n },\n "Atlantic/Reykjavik": {\n a: "Africa/Abidjan",\n c: [\n "IS"\n ],\n r: 1\n },\n "Atlantic/South_Georgia": {\n u: -120,\n c: [\n "GS"\n ]\n },\n "Atlantic/St_Helena": {\n a: "Africa/Abidjan",\n c: [\n "SH"\n ],\n r: 1\n },\n "Atlantic/Stanley": {\n u: -180,\n c: [\n "FK"\n ]\n },\n "Australia/ACT": {\n a: "Australia/Sydney",\n r: 1\n },\n "Australia/Adelaide": {\n u: 570,\n d: 630,\n c: [\n "AU"\n ]\n },\n "Australia/Brisbane": {\n u: 600,\n c: [\n "AU"\n ]\n },\n "Australia/Broken_Hill": {\n u: 570,\n d: 630,\n c: [\n "AU"\n ]\n },\n "Australia/Canberra": {\n a: "Australia/Sydney",\n r: 1\n },\n "Australia/Currie": {\n a: "Australia/Hobart",\n r: 1\n },\n "Australia/Darwin": {\n u: 570,\n c: [\n "AU"\n ]\n },\n "Australia/Eucla": {\n u: 525,\n c: [\n "AU"\n ]\n },\n "Australia/Hobart": {\n u: 600,\n d: 660,\n c: [\n "AU"\n ]\n },\n "Australia/LHI": {\n a: "Australia/Lord_Howe",\n r: 1\n },\n "Australia/Lindeman": {\n u: 600,\n c: [\n "AU"\n ]\n },\n "Australia/Lord_Howe": {\n u: 630,\n d: 660,\n c: [\n "AU"\n ]\n },\n "Australia/Melbourne": {\n u: 600,\n d: 660,\n c: [\n "AU"\n ]\n },\n "Australia/NSW": {\n a: "Australia/Sydney",\n r: 1\n },\n "Australia/North": {\n a: "Australia/Darwin",\n r: 1\n },\n "Australia/Perth": {\n u: 480,\n c: [\n "AU"\n ]\n },\n "Australia/Queensland": {\n a: "Australia/Brisbane",\n r: 1\n },\n "Australia/South": {\n a: "Australia/Adelaide",\n r: 1\n },\n "Australia/Sydney": {\n u: 600,\n d: 660,\n c: [\n "AU"\n ]\n },\n "Australia/Tasmania": {\n a: "Australia/Hobart",\n r: 1\n },\n "Australia/Victoria": {\n a: "Australia/Melbourne",\n r: 1\n },\n "Australia/West": {\n a: "Australia/Perth",\n r: 1\n },\n "Australia/Yancowinna": {\n a: "Australia/Broken_Hill",\n r: 1\n },\n "Brazil/Acre": {\n a: "America/Rio_Branco",\n r: 1\n },\n "Brazil/DeNoronha": {\n a: "America/Noronha",\n r: 1\n },\n "Brazil/East": {\n a: "America/Sao_Paulo",\n r: 1\n },\n "Brazil/West": {\n a: "America/Manaus",\n r: 1\n },\n CET: {\n a: "Europe/Brussels",\n r: 1\n },\n CST6CDT: {\n a: "America/Chicago",\n r: 1\n },\n "Canada/Atlantic": {\n a: "America/Halifax",\n r: 1\n },\n "Canada/Central": {\n a: "America/Winnipeg",\n r: 1\n },\n "Canada/Eastern": {\n a: "America/Toronto",\n c: [\n "CA"\n ],\n r: 1\n },\n "Canada/Mountain": {\n a: "America/Edmonton",\n r: 1\n },\n "Canada/Newfoundland": {\n a: "America/St_Johns",\n r: 1\n },\n "Canada/Pacific": {\n a: "America/Vancouver",\n r: 1\n },\n "Canada/Saskatchewan": {\n a: "America/Regina",\n r: 1\n },\n "Canada/Yukon": {\n a: "America/Whitehorse",\n r: 1\n },\n "Chile/Continental": {\n a: "America/Santiago",\n r: 1\n },\n "Chile/EasterIsland": {\n a: "Pacific/Easter",\n r: 1\n },\n Cuba: {\n a: "America/Havana",\n r: 1\n },\n EET: {\n a: "Europe/Athens",\n r: 1\n },\n EST: {\n a: "America/Panama",\n r: 1\n },\n EST5EDT: {\n a: "America/New_York",\n r: 1\n },\n Egypt: {\n a: "Africa/Cairo",\n r: 1\n },\n Eire: {\n a: "Europe/Dublin",\n r: 1\n },\n "Etc/GMT": {\n u: 0\n },\n "Etc/GMT+0": {\n a: "Etc/GMT",\n r: 1\n },\n "Etc/GMT+1": {\n u: -60\n },\n "Etc/GMT+10": {\n u: -600\n },\n "Etc/GMT+11": {\n u: -660\n },\n "Etc/GMT+12": {\n u: -720\n },\n "Etc/GMT+2": {\n u: -120\n },\n "Etc/GMT+3": {\n u: -180\n },\n "Etc/GMT+4": {\n u: -240\n },\n "Etc/GMT+5": {\n u: -300\n },\n "Etc/GMT+6": {\n u: -360\n },\n "Etc/GMT+7": {\n u: -420\n },\n "Etc/GMT+8": {\n u: -480\n },\n "Etc/GMT+9": {\n u: -540\n },\n "Etc/GMT-0": {\n a: "Etc/GMT",\n r: 1\n },\n "Etc/GMT-1": {\n u: 60\n },\n "Etc/GMT-10": {\n u: 600\n },\n "Etc/GMT-11": {\n u: 660\n },\n "Etc/GMT-12": {\n u: 720\n },\n "Etc/GMT-13": {\n u: 780\n },\n "Etc/GMT-14": {\n u: 840\n },\n "Etc/GMT-2": {\n u: 120\n },\n "Etc/GMT-3": {\n u: 180\n },\n "Etc/GMT-4": {\n u: 240\n },\n "Etc/GMT-5": {\n u: 300\n },\n "Etc/GMT-6": {\n u: 360\n },\n "Etc/GMT-7": {\n u: 420\n },\n "Etc/GMT-8": {\n u: 480\n },\n "Etc/GMT-9": {\n u: 540\n },\n "Etc/GMT0": {\n a: "Etc/GMT",\n r: 1\n },\n "Etc/Greenwich": {\n a: "Etc/GMT",\n r: 1\n },\n "Etc/UCT": {\n a: "Etc/UTC",\n r: 1\n },\n "Etc/UTC": {\n u: 0\n },\n "Etc/Universal": {\n a: "Etc/UTC",\n r: 1\n },\n "Etc/Zulu": {\n a: "Etc/UTC",\n r: 1\n },\n "Europe/Amsterdam": {\n a: "Europe/Brussels",\n c: [\n "NL"\n ],\n r: 1\n },\n "Europe/Andorra": {\n u: 60,\n d: 120,\n c: [\n "AD"\n ]\n },\n "Europe/Astrakhan": {\n u: 240,\n c: [\n "RU"\n ]\n },\n "Europe/Athens": {\n u: 120,\n d: 180,\n c: [\n "GR"\n ]\n },\n "Europe/Belfast": {\n a: "Europe/London",\n c: [\n "GB"\n ],\n r: 1\n },\n "Europe/Belgrade": {\n u: 60,\n d: 120,\n c: [\n "RS",\n "BA",\n "HR",\n "ME",\n "MK",\n "SI"\n ]\n },\n "Europe/Berlin": {\n u: 60,\n d: 120,\n c: [\n "DE",\n "DK",\n "NO",\n "SE",\n "SJ"\n ]\n },\n "Europe/Bratislava": {\n a: "Europe/Prague",\n c: [\n "SK"\n ],\n r: 1\n },\n "Europe/Brussels": {\n u: 60,\n d: 120,\n c: [\n "BE",\n "LU",\n "NL"\n ]\n },\n "Europe/Bucharest": {\n u: 120,\n d: 180,\n c: [\n "RO"\n ]\n },\n "Europe/Budapest": {\n u: 60,\n d: 120,\n c: [\n "HU"\n ]\n },\n "Europe/Busingen": {\n a: "Europe/Zurich",\n c: [\n "DE"\n ],\n r: 1\n },\n "Europe/Chisinau": {\n u: 120,\n d: 180,\n c: [\n "MD"\n ]\n },\n "Europe/Copenhagen": {\n a: "Europe/Berlin",\n c: [\n "DK"\n ],\n r: 1\n },\n "Europe/Dublin": {\n u: 0,\n d: 60,\n c: [\n "IE"\n ]\n },\n "Europe/Gibraltar": {\n u: 60,\n d: 120,\n c: [\n "GI"\n ]\n },\n "Europe/Guernsey": {\n a: "Europe/London",\n c: [\n "GG"\n ],\n r: 1\n },\n "Europe/Helsinki": {\n u: 120,\n d: 180,\n c: [\n "FI",\n "AX"\n ]\n },\n "Europe/Isle_of_Man": {\n a: "Europe/London",\n c: [\n "IM"\n ],\n r: 1\n },\n "Europe/Istanbul": {\n u: 180,\n c: [\n "TR"\n ]\n },\n "Europe/Jersey": {\n a: "Europe/London",\n c: [\n "JE"\n ],\n r: 1\n },\n "Europe/Kaliningrad": {\n u: 120,\n c: [\n "RU"\n ]\n },\n "Europe/Kiev": {\n a: "Europe/Kyiv",\n r: 1\n },\n "Europe/Kirov": {\n u: 180,\n c: [\n "RU"\n ]\n },\n "Europe/Kyiv": {\n u: 120,\n d: 180,\n c: [\n "UA"\n ]\n },\n "Europe/Lisbon": {\n u: 0,\n d: 60,\n c: [\n "PT"\n ]\n },\n "Europe/Ljubljana": {\n a: "Europe/Belgrade",\n c: [\n "SI"\n ],\n r: 1\n },\n "Europe/London": {\n u: 0,\n d: 60,\n c: [\n "GB",\n "GG",\n "IM",\n "JE"\n ]\n },\n "Europe/Luxembourg": {\n a: "Europe/Brussels",\n c: [\n "LU"\n ],\n r: 1\n },\n "Europe/Madrid": {\n u: 60,\n d: 120,\n c: [\n "ES"\n ]\n },\n "Europe/Malta": {\n u: 60,\n d: 120,\n c: [\n "MT"\n ]\n },\n "Europe/Mariehamn": {\n a: "Europe/Helsinki",\n c: [\n "AX"\n ],\n r: 1\n },\n "Europe/Minsk": {\n u: 180,\n c: [\n "BY"\n ]\n },\n "Europe/Monaco": {\n a: "Europe/Paris",\n c: [\n "MC"\n ],\n r: 1\n },\n "Europe/Moscow": {\n u: 180,\n c: [\n "RU"\n ]\n },\n "Europe/Nicosia": {\n a: "Asia/Nicosia",\n r: 1\n },\n "Europe/Oslo": {\n a: "Europe/Berlin",\n c: [\n "NO"\n ],\n r: 1\n },\n "Europe/Paris": {\n u: 60,\n d: 120,\n c: [\n "FR",\n "MC"\n ]\n },\n "Europe/Podgorica": {\n a: "Europe/Belgrade",\n c: [\n "ME"\n ],\n r: 1\n },\n "Europe/Prague": {\n u: 60,\n d: 120,\n c: [\n "CZ",\n "SK"\n ]\n },\n "Europe/Riga": {\n u: 120,\n d: 180,\n c: [\n "LV"\n ]\n },\n "Europe/Rome": {\n u: 60,\n d: 120,\n c: [\n "IT",\n "SM",\n "VA"\n ]\n },\n "Europe/Samara": {\n u: 240,\n c: [\n "RU"\n ]\n },\n "Europe/San_Marino": {\n a: "Europe/Rome",\n c: [\n "SM"\n ],\n r: 1\n },\n "Europe/Sarajevo": {\n a: "Europe/Belgrade",\n c: [\n "BA"\n ],\n r: 1\n },\n "Europe/Saratov": {\n u: 240,\n c: [\n "RU"\n ]\n },\n "Europe/Simferopol": {\n u: 180,\n c: [\n "RU",\n "UA"\n ]\n },\n "Europe/Skopje": {\n a: "Europe/Belgrade",\n c: [\n "MK"\n ],\n r: 1\n },\n "Europe/Sofia": {\n u: 120,\n d: 180,\n c: [\n "BG"\n ]\n },\n "Europe/Stockholm": {\n a: "Europe/Berlin",\n c: [\n "SE"\n ],\n r: 1\n },\n "Europe/Tallinn": {\n u: 120,\n d: 180,\n c: [\n "EE"\n ]\n },\n "Europe/Tirane": {\n u: 60,\n d: 120,\n c: [\n "AL"\n ]\n },\n "Europe/Tiraspol": {\n a: "Europe/Chisinau",\n r: 1\n },\n "Europe/Ulyanovsk": {\n u: 240,\n c: [\n "RU"\n ]\n },\n "Europe/Uzhgorod": {\n a: "Europe/Kyiv",\n r: 1\n },\n "Europe/Vaduz": {\n a: "Europe/Zurich",\n c: [\n "LI"\n ],\n r: 1\n },\n "Europe/Vatican": {\n a: "Europe/Rome",\n c: [\n "VA"\n ],\n r: 1\n },\n "Europe/Vienna": {\n u: 60,\n d: 120,\n c: [\n "AT"\n ]\n },\n "Europe/Vilnius": {\n u: 120,\n d: 180,\n c: [\n "LT"\n ]\n },\n "Europe/Volgograd": {\n u: 180,\n c: [\n "RU"\n ]\n },\n "Europe/Warsaw": {\n u: 60,\n d: 120,\n c: [\n "PL"\n ]\n },\n "Europe/Zagreb": {\n a: "Europe/Belgrade",\n c: [\n "HR"\n ],\n r: 1\n },\n "Europe/Zaporozhye": {\n a: "Europe/Kyiv",\n r: 1\n },\n "Europe/Zurich": {\n u: 60,\n d: 120,\n c: [\n "CH",\n "DE",\n "LI"\n ]\n },\n Factory: {\n u: 0\n },\n GB: {\n a: "Europe/London",\n c: [\n "GB"\n ],\n r: 1\n },\n "GB-Eire": {\n a: "Europe/London",\n c: [\n "GB"\n ],\n r: 1\n },\n GMT: {\n a: "Etc/GMT",\n r: 1\n },\n "GMT+0": {\n a: "Etc/GMT",\n r: 1\n },\n "GMT-0": {\n a: "Etc/GMT",\n r: 1\n },\n GMT0: {\n a: "Etc/GMT",\n r: 1\n },\n Greenwich: {\n a: "Etc/GMT",\n r: 1\n },\n HST: {\n a: "Pacific/Honolulu",\n r: 1\n },\n Hongkong: {\n a: "Asia/Hong_Kong",\n r: 1\n },\n Iceland: {\n a: "Africa/Abidjan",\n c: [\n "IS"\n ],\n r: 1\n },\n "Indian/Antananarivo": {\n a: "Africa/Nairobi",\n c: [\n "MG"\n ],\n r: 1\n },\n "Indian/Chagos": {\n u: 360,\n c: [\n "IO"\n ]\n },\n "Indian/Christmas": {\n a: "Asia/Bangkok",\n c: [\n "CX"\n ],\n r: 1\n },\n "Indian/Cocos": {\n a: "Asia/Yangon",\n c: [\n "CC"\n ],\n r: 1\n },\n "Indian/Comoro": {\n a: "Africa/Nairobi",\n c: [\n "KM"\n ],\n r: 1\n },\n "Indian/Kerguelen": {\n a: "Indian/Maldives",\n c: [\n "TF"\n ],\n r: 1\n },\n "Indian/Mahe": {\n a: "Asia/Dubai",\n c: [\n "SC"\n ],\n r: 1\n },\n "Indian/Maldives": {\n u: 300,\n c: [\n "MV",\n "TF"\n ]\n },\n "Indian/Mauritius": {\n u: 240,\n c: [\n "MU"\n ]\n },\n "Indian/Mayotte": {\n a: "Africa/Nairobi",\n c: [\n "YT"\n ],\n r: 1\n },\n "Indian/Reunion": {\n a: "Asia/Dubai",\n c: [\n "RE"\n ],\n r: 1\n },\n Iran: {\n a: "Asia/Tehran",\n r: 1\n },\n Israel: {\n a: "Asia/Jerusalem",\n r: 1\n },\n Jamaica: {\n a: "America/Jamaica",\n r: 1\n },\n Japan: {\n a: "Asia/Tokyo",\n r: 1\n },\n Kwajalein: {\n a: "Pacific/Kwajalein",\n r: 1\n },\n Libya: {\n a: "Africa/Tripoli",\n r: 1\n },\n MET: {\n a: "Europe/Brussels",\n r: 1\n },\n MST: {\n a: "America/Phoenix",\n r: 1\n },\n MST7MDT: {\n a: "America/Denver",\n r: 1\n },\n "Mexico/BajaNorte": {\n a: "America/Tijuana",\n r: 1\n },\n "Mexico/BajaSur": {\n a: "America/Mazatlan",\n r: 1\n },\n "Mexico/General": {\n a: "America/Mexico_City",\n r: 1\n },\n NZ: {\n a: "Pacific/Auckland",\n c: [\n "NZ"\n ],\n r: 1\n },\n "NZ-CHAT": {\n a: "Pacific/Chatham",\n r: 1\n },\n Navajo: {\n a: "America/Denver",\n r: 1\n },\n PRC: {\n a: "Asia/Shanghai",\n r: 1\n },\n PST8PDT: {\n a: "America/Los_Angeles",\n r: 1\n },\n "Pacific/Apia": {\n u: 780,\n c: [\n "WS"\n ]\n },\n "Pacific/Auckland": {\n u: 720,\n d: 780,\n c: [\n "NZ",\n "AQ"\n ]\n },\n "Pacific/Bougainville": {\n u: 660,\n c: [\n "PG"\n ]\n },\n "Pacific/Chatham": {\n u: 765,\n d: 825,\n c: [\n "NZ"\n ]\n },\n "Pacific/Chuuk": {\n a: "Pacific/Port_Moresby",\n c: [\n "FM"\n ],\n r: 1\n },\n "Pacific/Easter": {\n u: -360,\n d: -300,\n c: [\n "CL"\n ]\n },\n "Pacific/Efate": {\n u: 660,\n c: [\n "VU"\n ]\n },\n "Pacific/Enderbury": {\n a: "Pacific/Kanton",\n r: 1\n },\n "Pacific/Fakaofo": {\n u: 780,\n c: [\n "TK"\n ]\n },\n "Pacific/Fiji": {\n u: 720,\n c: [\n "FJ"\n ]\n },\n "Pacific/Funafuti": {\n a: "Pacific/Tarawa",\n c: [\n "TV"\n ],\n r: 1\n },\n "Pacific/Galapagos": {\n u: -360,\n c: [\n "EC"\n ]\n },\n "Pacific/Gambier": {\n u: -540,\n c: [\n "PF"\n ]\n },\n "Pacific/Guadalcanal": {\n u: 660,\n c: [\n "SB",\n "FM"\n ]\n },\n "Pacific/Guam": {\n u: 600,\n c: [\n "GU",\n "MP"\n ]\n },\n "Pacific/Honolulu": {\n u: -600,\n c: [\n "US"\n ]\n },\n "Pacific/Johnston": {\n a: "Pacific/Honolulu",\n c: [\n "UM"\n ],\n r: 1\n },\n "Pacific/Kanton": {\n u: 780,\n c: [\n "KI"\n ]\n },\n "Pacific/Kiritimati": {\n u: 840,\n c: [\n "KI"\n ]\n },\n "Pacific/Kosrae": {\n u: 660,\n c: [\n "FM"\n ]\n },\n "Pacific/Kwajalein": {\n u: 720,\n c: [\n "MH"\n ]\n },\n "Pacific/Majuro": {\n a: "Pacific/Tarawa",\n c: [\n "MH"\n ],\n r: 1\n },\n "Pacific/Marquesas": {\n u: -570,\n c: [\n "PF"\n ]\n },\n "Pacific/Midway": {\n a: "Pacific/Pago_Pago",\n c: [\n "UM"\n ],\n r: 1\n },\n "Pacific/Nauru": {\n u: 720,\n c: [\n "NR"\n ]\n },\n "Pacific/Niue": {\n u: -660,\n c: [\n "NU"\n ]\n },\n "Pacific/Norfolk": {\n u: 660,\n d: 720,\n c: [\n "NF"\n ]\n },\n "Pacific/Noumea": {\n u: 660,\n c: [\n "NC"\n ]\n },\n "Pacific/Pago_Pago": {\n u: -660,\n c: [\n "AS",\n "UM"\n ]\n },\n "Pacific/Palau": {\n u: 540,\n c: [\n "PW"\n ]\n },\n "Pacific/Pitcairn": {\n u: -480,\n c: [\n "PN"\n ]\n },\n "Pacific/Pohnpei": {\n a: "Pacific/Guadalcanal",\n c: [\n "FM"\n ],\n r: 1\n },\n "Pacific/Ponape": {\n a: "Pacific/Guadalcanal",\n c: [\n "FM"\n ],\n r: 1\n },\n "Pacific/Port_Moresby": {\n u: 600,\n c: [\n "PG",\n "AQ",\n "FM"\n ]\n },\n "Pacific/Rarotonga": {\n u: -600,\n c: [\n "CK"\n ]\n },\n "Pacific/Saipan": {\n a: "Pacific/Guam",\n c: [\n "MP"\n ],\n r: 1\n },\n "Pacific/Samoa": {\n a: "Pacific/Pago_Pago",\n c: [\n "AS"\n ],\n r: 1\n },\n "Pacific/Tahiti": {\n u: -600,\n c: [\n "PF"\n ]\n },\n "Pacific/Tarawa": {\n u: 720,\n c: [\n "KI",\n "MH",\n "TV",\n "UM",\n "WF"\n ]\n },\n "Pacific/Tongatapu": {\n u: 780,\n c: [\n "TO"\n ]\n },\n "Pacific/Truk": {\n a: "Pacific/Port_Moresby",\n c: [\n "FM"\n ],\n r: 1\n },\n "Pacific/Wake": {\n a: "Pacific/Tarawa",\n c: [\n "UM"\n ],\n r: 1\n },\n "Pacific/Wallis": {\n a: "Pacific/Tarawa",\n c: [\n "WF"\n ],\n r: 1\n },\n "Pacific/Yap": {\n a: "Pacific/Port_Moresby",\n c: [\n "FM"\n ],\n r: 1\n },\n Poland: {\n a: "Europe/Warsaw",\n r: 1\n },\n Portugal: {\n a: "Europe/Lisbon",\n r: 1\n },\n ROC: {\n a: "Asia/Taipei",\n r: 1\n },\n ROK: {\n a: "Asia/Seoul",\n r: 1\n },\n Singapore: {\n a: "Asia/Singapore",\n c: [\n "SG"\n ],\n r: 1\n },\n Turkey: {\n a: "Europe/Istanbul",\n r: 1\n },\n UCT: {\n a: "Etc/UTC",\n r: 1\n },\n "US/Alaska": {\n a: "America/Anchorage",\n r: 1\n },\n "US/Aleutian": {\n a: "America/Adak",\n r: 1\n },\n "US/Arizona": {\n a: "America/Phoenix",\n c: [\n "US"\n ],\n r: 1\n },\n "US/Central": {\n a: "America/Chicago",\n r: 1\n },\n "US/East-Indiana": {\n a: "America/Indiana/Indianapolis",\n r: 1\n },\n "US/Eastern": {\n a: "America/New_York",\n r: 1\n },\n "US/Hawaii": {\n a: "Pacific/Honolulu",\n r: 1\n },\n "US/Indiana-Starke": {\n a: "America/Indiana/Knox",\n r: 1\n },\n "US/Michigan": {\n a: "America/Detroit",\n r: 1\n },\n "US/Mountain": {\n a: "America/Denver",\n r: 1\n },\n "US/Pacific": {\n a: "America/Los_Angeles",\n r: 1\n },\n "US/Samoa": {\n a: "Pacific/Pago_Pago",\n c: [\n "AS"\n ],\n r: 1\n },\n UTC: {\n a: "Etc/UTC",\n r: 1\n },\n Universal: {\n a: "Etc/UTC",\n r: 1\n },\n "W-SU": {\n a: "Europe/Moscow",\n r: 1\n },\n WET: {\n a: "Europe/Lisbon",\n r: 1\n },\n Zulu: {\n a: "Etc/UTC",\n r: 1\n }\n}, Zr = {\n countries: cK,\n timezones: lK\n}, xa;\nfunction pK(e, t) {\n var o = e.countries[t];\n if (!o)\n return null;\n var n = dK(e)[t] || {};\n return {\n id: t,\n name: o,\n timezones: n.current || [],\n allTimezones: n.all || []\n };\n}\nfunction dK(e) {\n return xa || (xa = bK(e)), xa;\n}\nfunction bK(e) {\n return Object.keys(e.timezones).reduce(function(t, o) {\n var n = e.timezones[o], r = n.c, i = n.a, a = e.timezones[i] || {}, s = r || a.c;\n if (!s)\n return t;\n var l = eK(s), p;\n try {\n for (l.s(); !(p = l.n()).done; ) {\n var d = p.value;\n t[d] || Object.assign(t, zi({}, d, {\n current: [],\n all: []\n })), n.r === void 0 && t[d].current.push(o), t[d].all.push(o);\n }\n } catch (b) {\n l.e(b);\n } finally {\n l.f();\n }\n return t;\n }, {});\n}\nfunction MK(e, t) {\n var o = e.timezones[t];\n if (!o)\n return null;\n var n = o.a, r = n === void 0 ? null : n, i = r ? e.timezones[r] : {}, a = Rr(Rr({}, i), e.timezones[t]), s = a.c || [], l = a.u, p = Number.isInteger(a.d) ? a.d : l, d = {\n name: t,\n countries: s,\n utcOffset: l,\n utcOffsetStr: Yc(l),\n dstOffset: p,\n dstOffsetStr: Yc(p),\n aliasOf: r\n };\n return o.r && (d.deprecated = !0), d;\n}\nfunction Yc(e) {\n var t = Math.floor(Math.abs(e) / 60), o = e % 60, n = e < 0 ? "-" : "+";\n return "".concat(n).concat(Gc(t), ":").concat(Gc(o));\n}\nfunction Gc(e) {\n var t = Math.abs(e), o = t < 10 ? "0" : "";\n return "".concat(o).concat(t);\n}\nvar AK = ["allTimezones"], uK = Object.keys(Zr.timezones).length, E5 = {}, or = {}, jM = 0;\nfunction zK() {\n var e = arguments.length > 0 && arguments[0] !== void 0 ? arguments[0] : {};\n return Object.keys(Zr.countries).reduce(function(t, o) {\n return Object.assign(t, zi({}, o, hi(o, e)));\n }, {});\n}\nfunction hK() {\n var e = arguments.length > 0 && arguments[0] !== void 0 ? arguments[0] : {};\n if (uK !== jM)\n for (var t = 0, o = Object.keys(Zr.timezones); t < o.length; t++) {\n var n = o[t];\n Oi(n);\n }\n return mK(or, e);\n}\nfunction hi(e) {\n var t = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : {};\n return E5[e] || OK(pK(Zr, e)), LK(E5[e], t);\n}\nfunction OK(e) {\n e && (E5[e.id] = e);\n}\nfunction Oi(e) {\n return or[e] || fK(MK(Zr, e)), or[e] ? Rr({}, or[e]) : null;\n}\nfunction fK(e) {\n e && (or[e.name] = e, jM = Object.keys(e).length);\n}\nfunction KM(e) {\n var t = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : {}, o = Oi(e) || {}, n = o.countries || [];\n return n.map(function(r) {\n return hi(r, t);\n });\n}\nfunction gK(e) {\n var t = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : {}, o = KM(e, t), n = iK(o, 1), r = n[0];\n return r || null;\n}\nfunction CK(e) {\n var t = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : {}, o = hi(e, t);\n if (!o)\n return null;\n var n = o.timezones || [];\n return n.map(function(r) {\n return Oi(r);\n });\n}\nfunction mK(e, t) {\n var o = t || {}, n = o.deprecated;\n return n === !0 ? e : Object.keys(e).reduce(function(r, i) {\n return e[i].deprecated || Object.assign(r, zi({}, i, e[i])), r;\n }, {});\n}\nfunction LK(e, t) {\n if (!e)\n return null;\n var o = t || {}, n = o.deprecated;\n e.allTimezones;\n var r = rK(e, AK), i = n ? e.allTimezones : e.timezones;\n return Rr(Rr({}, r), {}, {\n timezones: i\n });\n}\nvar vK = {\n getCountry: hi,\n getTimezone: Oi,\n getAllCountries: zK,\n getAllTimezones: hK,\n getTimezonesForCountry: CK,\n getCountriesForTimezone: KM,\n getCountryForTimezone: gK\n};\nconst qK = styled_components__WEBPACK_IMPORTED_MODULE_1___default().div(\n ({\n theme: { colors: e, fontFamily: t, typography: o, fontWeight: n, spacings: r },\n padding: i\n }) => (0,styled_components__WEBPACK_IMPORTED_MODULE_1__.css)`\n font-family: ${t.base};\n font-size: ${o.t9};\n font-weight: ${n.regular};\n line-height: 12px;\n color: ${e.textIcon.textError};\n padding-left: ${i ? "83.2px" : r.sp8};\n width: 250px;\n `\n), yK = styled_components__WEBPACK_IMPORTED_MODULE_1___default().div(\n ({\n theme: { colors: e, fontFamily: t, typography: o, fontWeight: n, lineHeight: r }\n }) => (0,styled_components__WEBPACK_IMPORTED_MODULE_1__.css)`\n font-family: ${t.base};\n font-size: ${o.t10};\n font-weight: ${n.regular};\n line-height: ${r.lh14};\n color: ${e.textIcon.textPrimary};\n position: absolute;\n `\n), wK = styled_components__WEBPACK_IMPORTED_MODULE_1___default().div(\n ({ theme: { colors: e }, $isError: t }) => (0,styled_components__WEBPACK_IMPORTED_MODULE_1__.css)`\n ${t && (0,styled_components__WEBPACK_IMPORTED_MODULE_1__.css)`\n input {\n border: 1px solid ${e.border.borderError};\n }\n `}\n `\n), xK = (styled_components__WEBPACK_IMPORTED_MODULE_1___default().div)`\n display: flex;\n align-items: flex-end;\n gap: 8px;\n margin-bottom: 8px;\n`, WK = styled_components__WEBPACK_IMPORTED_MODULE_1___default().div(\n ({ $maxWidth: e }) => (0,styled_components__WEBPACK_IMPORTED_MODULE_1__.css)`\n flex-basis: 100px;\n min-width: 100px;\n ${e == "100px" && (0,styled_components__WEBPACK_IMPORTED_MODULE_1__.css)`\n .input__label {\n display: none;\n }\n `}\n ${e != "100px" && (0,styled_components__WEBPACK_IMPORTED_MODULE_1__.css)`\n .input__label {\n width: 200px;\n }\n `}\n\n input {\n padding: 0 10px 0 28px !important;\n }\n `\n), RK = (styled_components__WEBPACK_IMPORTED_MODULE_1___default().div)`\n flex-grow: 1;\n span {\n display: none;\n }\n`;\n(styled_components__WEBPACK_IMPORTED_MODULE_1___default().div)``;\n(styled_components__WEBPACK_IMPORTED_MODULE_1___default().div)``;\nconst Je = [\n { code: "AD", label: "Andorra", phone: "376", phoneLength: 6 },\n { code: "AE", label: "United Arab Emirates", phone: "971", phoneLength: 9 },\n { code: "AF", label: "Afghanistan", phone: "93", phoneLength: 9 },\n { code: "AG", label: "Antigua and Barbuda", phone: "1268", phoneLength: 10 },\n { code: "AI", label: "Anguilla", phone: "1264", phoneLength: 10 },\n { code: "AL", label: "Albania", phone: "355", phoneLength: 9 },\n { code: "AM", label: "Armenia", phone: "374", phoneLength: 6 },\n { code: "AO", label: "Angola", phone: "244", phoneLength: 9 },\n { code: "AQ", label: "Antarctica", phone: "672", phoneLength: 6 },\n { code: "AR", label: "Argentina", phone: "54", phoneLength: [6, 7, 8] },\n { code: "AS", label: "American Samoa", phone: "1684", phoneLength: 10 },\n { code: "AT", label: "Austria", phone: "43", phoneLength: [10, 11] },\n {\n code: "AU",\n label: "Australia",\n phone: "61",\n suggested: !0,\n phoneLength: 9\n },\n { code: "AW", label: "Aruba", phone: "297", phoneLength: 7 },\n { code: "AX", label: "Alland Islands", phone: "358", min: 7, max: 10 },\n { code: "AZ", label: "Azerbaijan", phone: "994", phoneLength: 9 },\n { code: "BA", label: "Bosnia and Herzegovina", phone: "387", phoneLength: 8 },\n { code: "BB", label: "Barbados", phone: "1246", phoneLength: 10 },\n { code: "BD", label: "Bangladesh", phone: "880", phoneLength: 10 },\n { code: "BE", label: "Belgium", phone: "32", phoneLength: 9 },\n { code: "BF", label: "Burkina Faso", phone: "226", phoneLength: 8 },\n { code: "BG", label: "Bulgaria", phone: "359", phoneLength: 9 },\n { code: "BH", label: "Bahrain", phone: "973", phoneLength: 8 },\n { code: "BI", label: "Burundi", phone: "257", phoneLength: 8 },\n { code: "BJ", label: "Benin", phone: "229", phoneLength: 8 },\n { code: "BL", label: "Saint Barthelemy", phone: "590", phoneLength: 9 },\n { code: "BM", label: "Bermuda", phone: "1441", phoneLength: 10 },\n { code: "BN", label: "Brunei Darussalam", phone: "673", phoneLength: 7 },\n { code: "BO", label: "Bolivia", phone: "591", phoneLength: 9 },\n { code: "BR", label: "Brazil", phone: "55", phoneLength: 11 },\n { code: "BS", label: "Bahamas", phone: "1242", phoneLength: 10 },\n { code: "BT", label: "Bhutan", phone: "975", phoneLength: 7 },\n { code: "BV", label: "Bouvet Island", phone: "47", phoneLength: 10 },\n { code: "BW", label: "Botswana", phone: "267", phoneLength: 7 },\n { code: "BY", label: "Belarus", phone: "375", phoneLength: 9 },\n { code: "BZ", label: "Belize", phone: "501", phoneLength: 7 },\n { code: "CA", label: "Canada", phone: "1", suggested: !0, phoneLength: 10 },\n {\n code: "CC",\n label: "Cocos (Keeling) Islands",\n phone: "61",\n phoneLength: 10\n },\n {\n code: "CD",\n label: "Congo, Democratic Republic of the",\n phone: "243",\n phoneLength: 7\n },\n {\n code: "CF",\n label: "Central African Republic",\n phone: "236",\n phoneLength: 8\n },\n { code: "CG", label: "Congo, Republic of the", phone: "242", phoneLength: 9 },\n { code: "CH", label: "Switzerland", phone: "41", phoneLength: 9 },\n { code: "CI", label: "Cote d\'Ivoire", phone: "225", phoneLength: 8 },\n { code: "CK", label: "Cook Islands", phone: "682", phoneLength: 5 },\n { code: "CL", label: "Chile", phone: "56", phoneLength: 9 },\n { code: "CM", label: "Cameroon", phone: "237", phoneLength: 9 },\n { code: "CN", label: "China", phone: "86", phoneLength: 11 },\n { code: "CO", label: "Colombia", phone: "57", phoneLength: 10 },\n { code: "CR", label: "Costa Rica", phone: "506", phoneLength: 8 },\n { code: "CU", label: "Cuba", phone: "53", phoneLength: 8 },\n { code: "CV", label: "Cape Verde", phone: "238", phoneLength: 7 },\n { code: "CW", label: "Curacao", phone: "599", phoneLength: 7 },\n { code: "CX", label: "Christmas Island", phone: "61", phoneLength: 9 },\n { code: "CY", label: "Cyprus", phone: "357", phoneLength: 8 },\n { code: "CZ", label: "Czech Republic", phone: "420", phoneLength: 9 },\n {\n code: "DE",\n label: "Germany",\n phone: "49",\n suggested: !0,\n phoneLength: 10\n },\n { code: "DJ", label: "Djibouti", phone: "253", phoneLength: 10 },\n { code: "DK", label: "Denmark", phone: "45", phoneLength: 8 },\n { code: "DM", label: "Dominica", phone: "1767", phoneLength: 10 },\n { code: "DO", label: "Dominican Republic", phone: "1809", phoneLength: 10 },\n { code: "DZ", label: "Algeria", phone: "213", phoneLength: 9 },\n { code: "EC", label: "Ecuador", phone: "593", phoneLength: 9 },\n { code: "EE", label: "Estonia", phone: "372", phoneLength: 8 },\n { code: "EG", label: "Egypt", phone: "20", phoneLength: 10 },\n { code: "EH", label: "Western Sahara", phone: "212", phoneLength: 9 },\n { code: "ER", label: "Eritrea", phone: "291", phoneLength: 7 },\n { code: "ES", label: "Spain", phone: "34", phoneLength: 9 },\n { code: "ET", label: "Ethiopia", phone: "251", phoneLength: 9 },\n { code: "FI", label: "Finland", phone: "358", min: 9, max: 11 },\n { code: "FJ", label: "Fiji", phone: "679", phoneLength: 7 },\n {\n code: "FK",\n label: "Falkland Islands (Malvinas)",\n phone: "500",\n phoneLength: 5\n },\n {\n code: "FM",\n label: "Micronesia, Federated States of",\n phone: "691",\n phoneLength: 7\n },\n { code: "FO", label: "Faroe Islands", phone: "298", phoneLength: 5 },\n { code: "FR", label: "France", phone: "33", suggested: !0, phoneLength: 9 },\n { code: "GA", label: "Gabon", phone: "241", phoneLength: 7 },\n { code: "GB", label: "United Kingdom", phone: "44", phoneLength: 10 },\n { code: "GD", label: "Grenada", phone: "1473", phoneLength: 10 },\n { code: "GE", label: "Georgia", phone: "995", phoneLength: 9 },\n { code: "GF", label: "French Guiana", phone: "594", phoneLength: 9 },\n { code: "GG", label: "Guernsey", phone: "44", phoneLength: 10 },\n { code: "GH", label: "Ghana", phone: "233", phoneLength: 9 },\n { code: "GI", label: "Gibraltar", phone: "350", phoneLength: 8 },\n { code: "GL", label: "Greenland", phone: "299", phoneLength: 6 },\n { code: "GM", label: "Gambia", phone: "220", phoneLength: 7 },\n { code: "GN", label: "Guinea", phone: "224", phoneLength: 9 },\n { code: "GP", label: "Guadeloupe", phone: "590", phoneLength: 9 },\n { code: "GQ", label: "Equatorial Guinea", phone: "240", phoneLength: 9 },\n { code: "GR", label: "Greece", phone: "30", phoneLength: 10 },\n {\n code: "GS",\n label: "South Georgia and the South Sandwich Islands",\n phone: "500",\n phoneLength: 5\n },\n { code: "GT", label: "Guatemala", phone: "502", phoneLength: 8 },\n { code: "GU", label: "Guam", phone: "1671", phoneLength: 10 },\n { code: "GW", label: "Guinea-Bissau", phone: "245", phoneLength: 9 },\n { code: "GY", label: "Guyana", phone: "592", phoneLength: 7 },\n { code: "HK", label: "Hong Kong", phone: "852", phoneLength: 8 },\n {\n code: "HM",\n label: "Heard Island and McDonald Islands",\n phone: "672",\n phoneLength: 10\n },\n { code: "HN", label: "Honduras", phone: "504", phoneLength: 8 },\n { code: "HR", label: "Croatia", phone: "385", phoneLength: 9 },\n { code: "HT", label: "Haiti", phone: "509", phoneLength: 8 },\n { code: "HU", label: "Hungary", phone: "36", phoneLength: 9 },\n { code: "ID", label: "Indonesia", phone: "62", phoneLength: 11 },\n { code: "IE", label: "Ireland", phone: "353", phoneLength: 9 },\n { code: "IL", label: "Israel", phone: "972", phoneLength: 9 },\n { code: "IM", label: "Isle of Man", phone: "44", phoneLength: 10 },\n { code: "IN", label: "India", phone: "91", phoneLength: 10 },\n {\n code: "IO",\n label: "British Indian Ocean Territory",\n phone: "246",\n phoneLength: 7\n },\n { code: "IQ", label: "Iraq", phone: "964", phoneLength: 10 },\n {\n code: "IR",\n label: "Iran, Islamic Republic of",\n phone: "98",\n phoneLength: 11\n },\n { code: "IS", label: "Iceland", phone: "354", phoneLength: 7 },\n { code: "IT", label: "Italy", phone: "39", phoneLength: 10 },\n { code: "JE", label: "Jersey", phone: "44", phoneLength: 10 },\n { code: "JM", label: "Jamaica", phone: "1876", phoneLength: 10 },\n { code: "JO", label: "Jordan", phone: "962", phoneLength: [8, 9] },\n { code: "JP", label: "Japan", phone: "81", suggested: !0 },\n { code: "KE", label: "Kenya", phone: "254", phoneLength: 10 },\n { code: "KG", label: "Kyrgyzstan", phone: "996", phoneLength: 9 },\n { code: "KH", label: "Cambodia", phone: "855", phoneLength: 9 },\n { code: "KI", label: "Kiribati", phone: "686", phoneLength: 8 },\n { code: "KM", label: "Comoros", phone: "269", phoneLength: 7 },\n {\n code: "KN",\n label: "Saint Kitts and Nevis",\n phone: "1869",\n phoneLength: 10\n },\n {\n code: "KP",\n label: "Korea, Democratic People\'s Republic of",\n phone: "850",\n phoneLength: [4, 6, 7, 13]\n },\n { code: "KR", label: "Korea, Republic of", phone: "82", phoneLength: [7, 8] },\n { code: "KW", label: "Kuwait", phone: "965", phoneLength: 8 },\n { code: "KY", label: "Cayman Islands", phone: "1345", phoneLength: 7 },\n { code: "KZ", label: "Kazakhstan", phone: "7", phoneLength: 10 },\n {\n code: "LA",\n label: "Lao People\'s Democratic Republic",\n phone: "856",\n phoneLength: [8, 9]\n },\n { code: "LB", label: "Lebanon", phone: "961", phoneLength: [7, 8] },\n { code: "LC", label: "Saint Lucia", phone: "1758", phoneLength: 7 },\n { code: "LI", label: "Liechtenstein", phone: "423", phoneLength: 7 },\n { code: "LK", label: "Sri Lanka", phone: "94", phoneLength: 7 },\n { code: "LR", label: "Liberia", phone: "231", phoneLength: [8, 9] },\n { code: "LS", label: "Lesotho", phone: "266", phoneLength: 8 },\n { code: "LT", label: "Lithuania", phone: "370", phoneLength: 8 },\n { code: "LU", label: "Luxembourg", phone: "352", phoneLength: 9 },\n { code: "LV", label: "Latvia", phone: "371", phoneLength: 8 },\n { code: "LY", label: "Libya", phone: "218", phoneLength: 10 },\n { code: "MA", label: "Morocco", phone: "212", phoneLength: 9 },\n { code: "MC", label: "Monaco", phone: "377", phoneLength: 8 },\n { code: "MD", label: "Moldova, Republic of", phone: "373", phoneLength: 8 },\n { code: "ME", label: "Montenegro", phone: "382", phoneLength: 8 },\n {\n code: "MF",\n label: "Saint Martin (French part)",\n phone: "590",\n phoneLength: 6\n },\n { code: "MG", label: "Madagascar", phone: "261", phoneLength: 7 },\n { code: "MH", label: "Marshall Islands", phone: "692", phoneLength: 7 },\n {\n code: "MK",\n label: "Macedonia, the Former Yugoslav Republic of",\n phone: "389",\n phoneLength: 8\n },\n { code: "ML", label: "Mali", phone: "223", phoneLength: 8 },\n { code: "MM", label: "Myanmar", phone: "95", min: 7, max: 10 },\n { code: "MN", label: "Mongolia", phone: "976", phoneLength: 8 },\n { code: "MO", label: "Macao", phone: "853", phoneLength: 8 },\n {\n code: "MP",\n label: "Northern Mariana Islands",\n phone: "1670",\n phoneLength: 7\n },\n { code: "MQ", label: "Martinique", phone: "596", phoneLength: 9 },\n { code: "MR", label: "Mauritania", phone: "222", phoneLength: 8 },\n { code: "MS", label: "Montserrat", phone: "1664", phoneLength: 10 },\n { code: "MT", label: "Malta", phone: "356", phoneLength: 8 },\n { code: "MU", label: "Mauritius", phone: "230", phoneLength: 8 },\n { code: "MV", label: "Maldives", phone: "960", phoneLength: 7 },\n { code: "MW", label: "Malawi", phone: "265", phoneLength: [7, 8, 9] },\n { code: "MX", label: "Mexico", phone: "52", phoneLength: 10 },\n { code: "MY", label: "Malaysia", phone: "60", phoneLength: 7 },\n { code: "MZ", label: "Mozambique", phone: "258", phoneLength: 12 },\n { code: "NA", label: "Namibia", phone: "264", phoneLength: 7 },\n { code: "NC", label: "New Caledonia", phone: "687", phoneLength: 6 },\n { code: "NE", label: "Niger", phone: "227", phoneLength: 8 },\n { code: "NF", label: "Norfolk Island", phone: "672", phoneLength: 6 },\n { code: "NG", label: "Nigeria", phone: "234", phoneLength: 8 },\n { code: "NI", label: "Nicaragua", phone: "505", phoneLength: 8 },\n { code: "NL", label: "Netherlands", phone: "31", phoneLength: 9 },\n { code: "NO", label: "Norway", phone: "47", phoneLength: 8 },\n { code: "NP", label: "Nepal", phone: "977", phoneLength: 10 },\n { code: "NR", label: "Nauru", phone: "674", phoneLength: 7 },\n { code: "NU", label: "Niue", phone: "683", phoneLength: 4 },\n { code: "NZ", label: "New Zealand", phone: "64", phoneLength: [8, 9] },\n { code: "OM", label: "Oman", phone: "968", phoneLength: 8 },\n { code: "PA", label: "Panama", phone: "507", phoneLength: 8 },\n { code: "PE", label: "Peru", phone: "51", phoneLength: 9 },\n { code: "PF", label: "French Polynesia", phone: "689", phoneLength: 8 },\n { code: "PG", label: "Papua New Guinea", phone: "675", phoneLength: 8 },\n { code: "PH", label: "Philippines", phone: "63", phoneLength: 10 },\n { code: "PK", label: "Pakistan", phone: "92", phoneLength: 10 },\n { code: "PL", label: "Poland", phone: "48", phoneLength: 9 },\n {\n code: "PM",\n label: "Saint Pierre and Miquelon",\n phone: "508",\n phoneLength: 6\n },\n { code: "PN", label: "Pitcairn", phone: "870", phoneLength: 9 },\n { code: "PR", label: "Puerto Rico", phone: "1", phoneLength: 10 },\n { code: "PS", label: "Palestine, State of", phone: "970", phoneLength: 9 },\n { code: "PT", label: "Portugal", phone: "351", phoneLength: 9 },\n { code: "PW", label: "Palau", phone: "680", phoneLength: 7 },\n { code: "PY", label: "Paraguay", phone: "595", phoneLength: 9 },\n { code: "QA", label: "Qatar", phone: "974", phoneLength: 8 },\n { code: "RE", label: "Reunion", phone: "262", phoneLength: 10 },\n { code: "RO", label: "Romania", phone: "40", phoneLength: 10 },\n { code: "RS", label: "Serbia", phone: "381", phoneLength: 9 },\n { code: "RU", label: "Russian Federation", phone: "7", phoneLength: 10 },\n { code: "RW", label: "Rwanda", phone: "250", phoneLength: 9 },\n { code: "SA", label: "Saudi Arabia", phone: "966", phoneLength: 9 },\n { code: "SB", label: "Solomon Islands", phone: "677", phoneLength: 7 },\n { code: "SC", label: "Seychelles", phone: "248", phoneLength: 7 },\n { code: "SD", label: "Sudan", phone: "249", phoneLength: 7 },\n { code: "SE", label: "Sweden", phone: "46", phoneLength: 7 },\n { code: "SG", label: "Singapore", phone: "65", phoneLength: 8 },\n { code: "SH", label: "Saint Helena", phone: "290", phoneLength: 4 },\n { code: "SI", label: "Slovenia", phone: "386", phoneLength: 9 },\n { code: "SJ", label: "Svalbard and Jan Mayen", phone: "47", phoneLength: 8 },\n { code: "SK", label: "Slovakia", phone: "421", phoneLength: 9 },\n { code: "SL", label: "Sierra Leone", phone: "232", phoneLength: 8 },\n { code: "SM", label: "San Marino", phone: "378", phoneLength: 10 },\n { code: "SN", label: "Senegal", phone: "221", phoneLength: 9 },\n { code: "SO", label: "Somalia", phone: "252", phoneLength: [8, 9] },\n { code: "SR", label: "Suriname", phone: "597", phoneLength: [6, 7] },\n { code: "SS", label: "South Sudan", phone: "211", phoneLength: 7 },\n { code: "ST", label: "Sao Tome and Principe", phone: "239", phoneLength: 7 },\n { code: "SV", label: "El Salvador", phone: "503", phoneLength: 8 },\n {\n code: "SX",\n label: "Sint Maarten (Dutch part)",\n phone: "1721",\n phoneLength: 10\n },\n { code: "SY", label: "Syrian Arab Republic", phone: "963", phoneLength: 7 },\n { code: "SZ", label: "Swaziland", phone: "268", phoneLength: 8 },\n {\n code: "TC",\n label: "Turks and Caicos Islands",\n phone: "1649",\n phoneLength: 10\n },\n { code: "TD", label: "Chad", phone: "235", phoneLength: 6 },\n {\n code: "TF",\n label: "French Southern Territories",\n phone: "262",\n phoneLength: 10\n },\n { code: "TG", label: "Togo", phone: "228", phoneLength: 8 },\n { code: "TH", label: "Thailand", phone: "66", phoneLength: 9 },\n { code: "TJ", label: "Tajikistan", phone: "992", phoneLength: 9 },\n { code: "TK", label: "Tokelau", phone: "690", phoneLength: 5 },\n { code: "TL", label: "Timor-Leste", phone: "670", phoneLength: 7 },\n { code: "TM", label: "Turkmenistan", phone: "993", phoneLength: 8 },\n { code: "TN", label: "Tunisia", phone: "216", phoneLength: 8 },\n { code: "TO", label: "Tonga", phone: "676", phoneLength: 5 },\n { code: "TR", label: "Turkey", phone: "90", phoneLength: 11 },\n { code: "TT", label: "Trinidad and Tobago", phone: "1868", phoneLength: 7 },\n { code: "TV", label: "Tuvalu", phone: "688", phoneLength: 5 },\n {\n code: "TW",\n label: "Taiwan, Province of China",\n phone: "886",\n phoneLength: 9\n },\n {\n code: "TZ",\n label: "United Republic of Tanzania",\n phone: "255",\n phoneLength: 7\n },\n { code: "UA", label: "Ukraine", phone: "380", phoneLength: 9 },\n { code: "UG", label: "Uganda", phone: "256", phoneLength: 7 },\n {\n code: "US",\n label: "United States",\n phone: "1",\n suggested: !0,\n phoneLength: 10\n },\n { code: "UY", label: "Uruguay", phone: "598", phoneLength: 8 },\n { code: "UZ", label: "Uzbekistan", phone: "998", phoneLength: 9 },\n {\n code: "VA",\n label: "Holy See (Vatican City State)",\n phone: "379",\n phoneLength: 10\n },\n {\n code: "VC",\n label: "Saint Vincent and the Grenadines",\n phone: "1784",\n phoneLength: 7\n },\n { code: "VE", label: "Venezuela", phone: "58", phoneLength: 7 },\n {\n code: "VG",\n label: "British Virgin Islands",\n phone: "1284",\n phoneLength: 7\n },\n { code: "VI", label: "US Virgin Islands", phone: "1340", phoneLength: 10 },\n { code: "VN", label: "Vietnam", phone: "84", phoneLength: 9 },\n { code: "VU", label: "Vanuatu", phone: "678", phoneLength: 5 },\n { code: "WF", label: "Wallis and Futuna", phone: "681", phoneLength: 6 },\n { code: "WS", label: "Samoa", phone: "685", phoneLength: [5, 6, 7] },\n { code: "XK", label: "Kosovo", phone: "383", phoneLength: 8 },\n { code: "YE", label: "Yemen", phone: "967", phoneLength: 9 },\n { code: "YT", label: "Mayotte", phone: "262", phoneLength: 9 },\n { code: "ZA", label: "South Africa", phone: "27", phoneLength: 9 },\n { code: "ZM", label: "Zambia", phone: "260", phoneLength: 9 },\n { code: "ZW", label: "Zimbabwe", phone: "263", phoneLength: 9 }\n], BK = (e) => {\n const {\n labelType: t,\n label: o,\n defaultCountryCode: n,\n onChange: r,\n isRequired: i,\n defaultValue: a,\n supportText: s,\n isError: l,\n placeholder: p\n } = e, [d, b] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(), [M, u] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(""), [A, z] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(!1), [f, O] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(""), [h, g] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(!1), [v, L] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(""), y = (0,react__WEBPACK_IMPORTED_MODULE_0__.useRef)(null), [B, X] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)({}), [F, T] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(), [w, H] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(), [C, q] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)();\n (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => {\n let R;\n Je == null || Je.map((U) => {\n var _;\n ((_ = F == null ? void 0 : F.countryList) == null ? void 0 : _.countryCode) == U.phone && (R = U.phoneLength);\n });\n let I, j;\n R && Array.isArray(R) ? (I = R[(R == null ? void 0 : R.length) - 1], j = R[0]) : (I = R, j = void 0), H(`${I}`), q(`${j}`);\n }, [F]);\n const m = (R) => {\n var K;\n var I = (K = y == null ? void 0 : y.current) == null ? void 0 : K.value.length;\n let j;\n Je == null || Je.map((Q) => {\n var E;\n ((E = F == null ? void 0 : F.countryList) == null ? void 0 : E.countryCode) == Q.phone && (j = Q.phoneLength);\n });\n let U, _;\n if (j && Array.isArray(j) ? (U = j[(j == null ? void 0 : j.length) - 1], _ = j[0]) : (U = j, _ = void 0), R || (I == U ? (z(!1), O("")) : _ == null && U && I < U ? (z(!0), O(`phone number must contain ${U} numbers`)) : _ && I < _ ? (z(!0), O(\n `phone number must be ${_} - ${U} numbers`\n )) : (z(!1), O(""))), U && I && I <= U)\n return !0;\n if (y != null && y.current) {\n var r1 = y == null ? void 0 : y.current.value;\n r1 = r1.substring(0, r1.length - 1), y.current.value = r1;\n }\n return !1;\n }, k = (R) => {\n const I = R.target.value;\n (F == null || JSON.stringify(F) == "{}") && !h ? (z(!0), O(\n "Please select the country code before enter phone number"\n )) : I ? (L(I), r && r(I)) : L("");\n }, x = (R) => {\n var I;\n (I = J2 == null ? void 0 : J2.Countries) == null || I.filter((j) => {\n if (j.CountryName == R) {\n let U = j.Flag;\n b(U);\n }\n });\n }, N = (R) => {\n var I;\n Je == null || Je.filter((j) => {\n var r1;\n if ((j == null ? void 0 : j.phone) == ((r1 = R == null ? void 0 : R.countryList) == null ? void 0 : r1.countryCode)) {\n var U = j == null ? void 0 : j.phoneLength, _ = U[U.length - 1];\n j != null && j.phoneLength && typeof (j == null ? void 0 : j.phoneLength) == "number" ? (R.min = U, R.max = U) : (R.min = U[0], R.max = _);\n }\n }), (I = R == null ? void 0 : R.leftIcon) != null && I.name ? (x(R == null ? void 0 : R.leftIcon.name), u(R == null ? void 0 : R.leftIcon.color), T(R), r && r(R)) : (b(void 0), u(""), T(R), r && r(R)), h || (L(""), O(""), z(!1));\n };\n (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => {\n l ? (z(l), O(s), g(!0), m(!0)) : (g(!1), m(!1));\n }, [l, s, v]), (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => {\n var R;\n a && L(a), n ? (R = Object.keys(B)) == null || R.map((I) => {\n let U = B[I];\n (n == null ? void 0 : n.countryList.countryCode) === (U == null ? void 0 : U.countryList.countryCode) && (T(U), x(U == null ? void 0 : U.leftIcon.name), u(U == null ? void 0 : U.leftIcon.color));\n }) : (z(!1), O(""));\n }, [n, a, B]), (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => {\n var r1, K, Q, E;\n const R = Kj.tz.guess(), I = vK.getCountriesForTimezone(R);\n let j = (r1 = kn.allCountries.find(\n (D) => {\n var G;\n return D.iso2 === ((G = I[0]) == null ? void 0 : G.id.toLowerCase());\n }\n )) == null ? void 0 : r1.dialCode, U = [], _ = [];\n if ((K = kn == null ? void 0 : kn.allCountries) == null || K.map((D, G) => {\n var W;\n let S = D.name.split("(")[0].trim();\n (W = J2 == null ? void 0 : J2.Countries) == null || W.filter((P) => {\n S == P.CountryName && _.push(D);\n });\n }), _ == null || _.map((D, G) => {\n let S = D.name.split("(")[0].trim();\n return U.push({\n value: G,\n countryList: {\n countryCode: D.dialCode,\n countryName: S\n },\n leftIcon: {\n name: S,\n color: "#D7373F"\n }\n });\n }), X(U), n && Object.keys(n).length == 0) {\n let D = U == null ? void 0 : U.filter((G) => {\n var J;\n if (((J = G == null ? void 0 : G.countryList) == null ? void 0 : J.countryCode) === j)\n return G;\n });\n T(D[0]), x((Q = D[0]) == null ? void 0 : Q.leftIcon.name), u((E = D[0]) == null ? void 0 : E.leftIcon.color);\n }\n }, [n]);\n const V = (0,react__WEBPACK_IMPORTED_MODULE_0__.useMemo)(() => /* @__PURE__ */ c(wK, { $isError: A, children: /* @__PURE__ */ c(\n Y2,\n {\n ref: y,\n label: t == "inside" ? o : "",\n labelType: t == "inside" ? t : "",\n placeholder: t != "inside" ? p : "",\n onInput: m,\n type: "tel",\n pattern: "^-?[0-9]\\\\d*\\\\.?\\\\d*$",\n value: v,\n isError: A,\n onChange: k,\n handleClearFn: () => {\n L(""), r && r("");\n },\n isRequired: !(i == null || !i),\n maxLength: w,\n supportText: f\n }\n ) }), [w, v, h, A]);\n return /* @__PURE__ */ e1(react__WEBPACK_IMPORTED_MODULE_0__.Fragment, { children: [\n t == "outside" && /* @__PURE__ */ e1(yK, { children: [\n o,\n " ",\n !i && /* @__PURE__ */ c(ir, { children: "Optional" })\n ] }),\n /* @__PURE__ */ e1(xK, { children: [\n /* @__PURE__ */ c(\n WK,\n {\n $maxWidth: t != "horizontal" ? "100px" : "225px",\n children: /* @__PURE__ */ c(\n tt,\n {\n ...e,\n label: t == "horizontal" ? o : "Code",\n isError: !1,\n supportText: "",\n data: B,\n selectedOptions: N,\n labelType: t,\n iconLeft: d,\n placeholder: "Code",\n colorIconLeft: M,\n dropdownBodyWidth: "352px",\n defaultValues: F,\n showSelectedList: !0,\n isSearchable: !0,\n handleClearFn: () => {\n e != null && e.handleClearFn && (e == null || e.handleClearFn()), L("");\n },\n isRequired: !(i == null || !i)\n }\n )\n }\n ),\n /* @__PURE__ */ c(RK, { children: V })\n ] }),\n /* @__PURE__ */ c(qK, { padding: t == "horizontal", children: f })\n ] });\n}, i$ = (e) => /* @__PURE__ */ c(react__WEBPACK_IMPORTED_MODULE_0__.Fragment, { children: /* @__PURE__ */ c(BK, { ...e }) }), SK = styled_components__WEBPACK_IMPORTED_MODULE_1___default().div(\n ({ theme: { colors: e, cubicBezier: t, transitions: o }, $isCollapsed: n }) => (0,styled_components__WEBPACK_IMPORTED_MODULE_1__.css)`\n max-width: ${n ? "152px" : "24px"};\n min-width: ${n ? "152px" : "24px"};\n\n background: ${e.backgrounds.bgPrimary};\n transition: max-width 0.3s ${t.base};\n transition: min-width 0.3s ${t.base};\n transition: ${o.base};\n overflow: hidden;\n border-right: 1px solid ${e.border.borderTertiary};\n box-sizing: border-box;\n ${!n && (0,styled_components__WEBPACK_IMPORTED_MODULE_1__.css)`\n transition: ${o.base};\n padding: 0;\n &:hover {\n background: ${e.backgrounds.bgHoverPrimary};\n transition: ${o.base};\n }\n `} \n `\n), EK = styled_components__WEBPACK_IMPORTED_MODULE_1___default().h1(\n ({\n theme: { colors: e, cubicBezier: t, typography: o, fontWeight: n },\n $isCollapsed: r\n }) => (0,styled_components__WEBPACK_IMPORTED_MODULE_1__.css)`\n display: ${r ? "none" : "block"};\n white-space: nowrap;\n transform: rotate(90deg);\n cursor: pointer;\n margin-top: 20px;\n transition: transform 0.3s ${t.base};\n font-size: ${o.t12};\n font-weight: ${n.regular};\n color: ${e.textIcon.textPrimary};\n `\n), kK = styled_components__WEBPACK_IMPORTED_MODULE_1___default().h1(\n ({\n theme: { colors: e, cubicBezier: t, typography: o, fontWeight: n },\n $isCollapsed: r\n }) => (0,styled_components__WEBPACK_IMPORTED_MODULE_1__.css)`\n display: ${r ? "block" : "none"};\n transition: transform 0.3s ${t.base};\n font-size: ${o.t12};\n font-weight: ${n.regular};\n color: ${e.textIcon.textPrimary};\n white-space: nowrap;\n margin: 0;\n `\n), NK = styled_components__WEBPACK_IMPORTED_MODULE_1___default().div(\n ({ theme: { cubicBezier: e }, $isCollapsed: t }) => (0,styled_components__WEBPACK_IMPORTED_MODULE_1__.css)`\n padding: 15px 0;\n display: flex;\n justify-content: center;\n align-items: center;\n transition: transform 0.3s ${e.base};\n box-sizing: border-box;\n ${t && (0,styled_components__WEBPACK_IMPORTED_MODULE_1__.css)`\n padding: 11px 8px;\n justify-content: space-between;\n transition: transform 0.3s ${e.base};\n `}\n `\n), TK = styled_components__WEBPACK_IMPORTED_MODULE_1___default().div(\n ({ theme: { colors: e, cubicBezier: t }, $isCollapsed: o }) => (0,styled_components__WEBPACK_IMPORTED_MODULE_1__.css)`\n transform-origin: center;\n transform: rotate(${o ? "180deg" : "0"});\n transition: transform 0.3s ${t.base};\n cursor: pointer;\n max-width: 18px;\n max-height: 18px;\n min-width: 18px;\n min-height: 18px;\n display: flex;\n justify-content: center;\n align-items: center;\n border-radius: 50%;\n box-sizing: border-box;\n border:none;\n color: ${e.textIcon.textPrimary};\n ${o && (0,styled_components__WEBPACK_IMPORTED_MODULE_1__.css)`\n border: 1px solid ${e.border.borderTertiary};\n border-radius: 50%;\n background: ${e.backgrounds.bgPrimary};\n `}\n `\n), IK = (styled_components__WEBPACK_IMPORTED_MODULE_1___default().div)`\n margin: 0 -10px;\n`, DK = styled_components__WEBPACK_IMPORTED_MODULE_1___default().div(\n ({ $isCollapsed: e }) => (0,styled_components__WEBPACK_IMPORTED_MODULE_1__.css)`\n display: block;\n height: 100%;\n ${!e && (0,styled_components__WEBPACK_IMPORTED_MODULE_1__.css)`\n display: none;\n `}\n `\n);\n(styled_components__WEBPACK_IMPORTED_MODULE_1___default().div)`\n width: 100%;\n background-color: ${({ theme: { colors: e } }) => e.white};\n`;\nstyled_components__WEBPACK_IMPORTED_MODULE_1___default().div(\n ({ theme: { colors: e }, $isTemplate: t }) => (0,styled_components__WEBPACK_IMPORTED_MODULE_1__.css)`\n background-color: ${e.white};\n min-width: ${t ? "97vw" : "100%"};\n `\n);\nstyled_components__WEBPACK_IMPORTED_MODULE_1___default().div(\n ({ theme: { colors: e }, isExample: t }) => (0,styled_components__WEBPACK_IMPORTED_MODULE_1__.css)`\n display: flex;\n justify-content: flex-start;\n border: 1px solid ${e.border.borderPrimary};\n background: ${e.backgrounds.bgSecondary};\n height: ${t ? "auto" : "93vh"};\n max-width: 97vw;\n .action-bar-container {\n padding: 0 8px;\n }\n `\n);\n(styled_components__WEBPACK_IMPORTED_MODULE_1___default().div)`\n flex-grow: 1;\n height: 100%;\n overflow: hidden;\n`;\n(styled_components__WEBPACK_IMPORTED_MODULE_1___default().div)`\n overflow: hidden;\n`;\nstyled_components__WEBPACK_IMPORTED_MODULE_1___default().div(\n ({ theme: { colors: e } }) => (0,styled_components__WEBPACK_IMPORTED_MODULE_1__.css)`\n padding: 0 10px;\n color:${e.textIcon.textPrimary};\n `\n);\nconst a$ = ({ title: e, children: t }) => {\n const [o, n] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(!1), r = () => {\n n(!o);\n };\n return /* @__PURE__ */ e1(SK, { $isCollapsed: o, children: [\n /* @__PURE__ */ e1(NK, { $isCollapsed: o, children: [\n /* @__PURE__ */ c(kK, { $isCollapsed: o, children: e }),\n /* @__PURE__ */ c(TK, { $isCollapsed: o, onClick: r, children: /* @__PURE__ */ c(Z1, { name: "ChevronRightThick", size: "xxxxs" }) })\n ] }),\n /* @__PURE__ */ c(IK, { children: /* @__PURE__ */ c(P2, { $default: !0 }) }),\n /* @__PURE__ */ c(EK, { $isCollapsed: o, onClick: r, children: e }),\n /* @__PURE__ */ c(DK, { $isCollapsed: o, children: t })\n ] });\n}, HK = () => /* @__PURE__ */ e1(\n "svg",\n {\n width: "260",\n height: "260",\n viewBox: "0 0 260 260",\n fill: "none",\n xmlns: "http://www.w3.org/2000/svg",\n children: [\n /* @__PURE__ */ c(\n "path",\n {\n style: { mixBlendMode: "multiply" },\n d: "M13.8739 177.315C16.0271 179.765 18.5271 181.794 21.0882 183.814C46.6351 203.842 89.3631 209.252 116.941 204.283C130.795 201.786 139.797 191.064 137.341 174.732C136.037 166.075 126.947 161.577 118.75 161.691C99.1135 161.968 76.2719 160.115 54.8705 155.487C39.2404 152.107 21.2963 142.723 15.0032 135.051C14.1514 133.988 8.04696 127.731 20.869 123.183C20.869 123.183 11.3073 125.914 8.49924 132.34C7.14518 135.434 6.23507 139.832 6.16847 143.242C6.08246 147.681 6.21287 152.149 6.56526 156.585C6.98979 161.971 7.78059 167.465 10.3389 172.218C11.3258 174.042 12.5113 175.752 13.8739 177.315Z",\n fill: "url(#paint0_linear)"\n }\n ),\n /* @__PURE__ */ c(\n "path",\n {\n style: { mixBlendMode: "multiply" },\n d: "M0.0335741 133.386L0.000277424 133.28C-0.00546692 133.03 0.0781566 132.786 0.236129 132.592C0.175085 132.861 0.105717 133.122 0.0335741 133.386Z",\n fill: "url(#paint1_linear)"\n }\n ),\n /* @__PURE__ */ c(\n "path",\n {\n style: { mixBlendMode: "multiply" },\n d: "M234.723 219.574C211.87 205.512 193.282 200.734 154.045 191.522C115.484 182.463 4.32883 159.085 13.8489 177.185C14.2096 177.87 11.31 174.008 10.3389 172.207C7.76949 167.454 6.98979 161.96 6.56526 156.588C6.21287 152.149 6.08246 147.695 6.16847 143.245C6.23507 139.843 7.14518 135.436 8.49924 132.343C11.1658 126.238 19.9172 123.483 20.7941 123.219C35.8331 120.012 60.3617 118.991 98.5086 126.382C153.975 137.118 225.372 158.808 246.998 174.951C271.091 192.937 258.605 234.256 234.723 219.574Z",\n fill: "url(#paint2_linear)"\n }\n ),\n /* @__PURE__ */ c(\n "path",\n {\n style: { mixBlendMode: "multiply" },\n d: "M217.889 148.672C217.209 131.41 199.853 120.267 186.653 112.267C148.509 89.1401 102.318 75.0584 57.4594 78.5434C46.7351 79.3758 36.2632 81.6594 26.0384 84.9586C-3.07129 94.351 -9.59467 60.3662 16.3241 47.7551C19.7148 46.1069 28.1194 43.0991 33.0973 41.9281C79.4768 30.9763 123.792 39.8221 168.254 53.3683C178.293 56.4205 194.459 63.0216 203.388 68.6793C204.382 69.2691 205.312 69.961 206.163 70.7437C208.03 72.5445 235.411 136.272 217.889 148.672Z",\n fill: "url(#paint3_linear)"\n }\n ),\n /* @__PURE__ */ c(\n "path",\n {\n style: { mixBlendMode: "multiply" },\n d: "M206.262 70.8491C208.796 74.3259 235.164 136.441 217.889 148.664C217.889 148.68 217.889 148.7 217.889 148.716C217.738 148.867 217.57 148.999 217.389 149.11C205.58 156.172 166.334 156.633 124.769 147.071C86.3775 138.256 70.7003 127.992 72.5289 110.25C74.2908 95.1113 93.8166 89.1623 125.981 88.674C156.337 88.205 208.105 91.6901 206.262 70.8491Z",\n fill: "url(#paint4_linear)"\n }\n ),\n /* @__PURE__ */ e1("defs", { children: [\n /* @__PURE__ */ e1(\n "linearGradient",\n {\n id: "paint0_linear",\n x1: "2.59091",\n y1: "153.493",\n x2: "136.794",\n y2: "187.227",\n gradientUnits: "userSpaceOnUse",\n children: [\n /* @__PURE__ */ c("stop", { stopColor: "#0056A4" }),\n /* @__PURE__ */ c("stop", { offset: "1", stopColor: "#007EB9" })\n ]\n }\n ),\n /* @__PURE__ */ e1(\n "linearGradient",\n {\n id: "paint1_linear",\n x1: "-0.859222",\n y1: "132.635",\n x2: "-0.729032",\n y2: "132.691",\n gradientUnits: "userSpaceOnUse",\n children: [\n /* @__PURE__ */ c("stop", { stopColor: "#FFD800" }),\n /* @__PURE__ */ c("stop", { offset: "0.51", stopColor: "#F49600" }),\n /* @__PURE__ */ c("stop", { offset: "0.62", stopColor: "#F38F01" }),\n /* @__PURE__ */ c("stop", { offset: "0.78", stopColor: "#EF7B06" }),\n /* @__PURE__ */ c("stop", { offset: "0.96", stopColor: "#EA5B0C" })\n ]\n }\n ),\n /* @__PURE__ */ e1(\n "linearGradient",\n {\n id: "paint2_linear",\n x1: "10.711",\n y1: "124.636",\n x2: "250.728",\n y2: "226.382",\n gradientUnits: "userSpaceOnUse",\n children: [\n /* @__PURE__ */ c("stop", { stopColor: "#0069B4" }),\n /* @__PURE__ */ c("stop", { offset: "0.84", stopColor: "#009BDB" })\n ]\n }\n ),\n /* @__PURE__ */ e1(\n "linearGradient",\n {\n id: "paint3_linear",\n x1: "2.61332",\n y1: "47.4113",\n x2: "233.218",\n y2: "112.269",\n gradientUnits: "userSpaceOnUse",\n children: [\n /* @__PURE__ */ c("stop", { offset: "0.05", stopColor: "#0BBBEF" }),\n /* @__PURE__ */ c("stop", { offset: "0.38", stopColor: "#089BD8" }),\n /* @__PURE__ */ c("stop", { offset: "1", stopColor: "#0056A4" })\n ]\n }\n ),\n /* @__PURE__ */ e1(\n "linearGradient",\n {\n id: "paint4_linear",\n x1: "79.1638",\n y1: "84.8541",\n x2: "226.189",\n y2: "126.205",\n gradientUnits: "userSpaceOnUse",\n children: [\n /* @__PURE__ */ c("stop", { stopColor: "#0080C9" }),\n /* @__PURE__ */ c("stop", { offset: "1", stopColor: "#1D3D91" })\n ]\n }\n )\n ] })\n ]\n }\n), VK = () => /* @__PURE__ */ e1(\n "svg",\n {\n width: "260",\n height: "260",\n viewBox: "0 0 260 260",\n fill: "none",\n xmlns: "http://www.w3.org/2000/svg",\n children: [\n /* @__PURE__ */ c(\n "path",\n {\n style: { mixBlendMode: "multiply" },\n d: "M87.5176 44.809C134.624 47.5707 159.566 59.4092 159.208 78.6669C158.684 95.105 137.839 105.975 103.299 109.399C63.0166 113.375 6.99126 113.523 20.3555 140.534C7.01263 119.08 -0.0399791 94.311 0.000170473 69.0461C0.000170473 67.1149 0.0613265 65.2094 0.141795 63.3103C0.425044 56.5124 8.58775 40.1966 87.5176 44.809Z",\n fill: "url(#paint0_linear)"\n }\n ),\n /* @__PURE__ */ c(\n "path",\n {\n style: { mixBlendMode: "multiply" },\n d: "M260 134.184C258.835 126.34 249.909 122.194 243.35 119.587C233.609 115.681 223.46 112.886 213.093 111.253C205.796 110.117 198.406 109.686 191.026 109.966C177.391 110.513 156.646 112.992 154.506 130.064C152.279 147.821 180.41 160.854 191.985 166.973C199.951 171.183 214.783 177.942 223.503 182.667C239.143 169.44 251.615 152.872 260 134.184Z",\n fill: "url(#paint1_linear)"\n }\n ),\n /* @__PURE__ */ c(\n "path",\n {\n style: { mixBlendMode: "multiply" },\n d: "M57.9182 188.046C59.2861 189.06 60.9341 190.257 62.5789 191.429C80.5499 203.804 101.281 211.584 122.956 214.089C122.956 214.089 140.501 210.133 137.907 201.829C135.432 193.914 121.35 189.131 97.8047 186.292C58.1564 181.499 56.6114 186.926 57.9182 188.046Z",\n fill: "url(#paint2_linear)"\n }\n ),\n /* @__PURE__ */ c(\n "path",\n {\n style: { mixBlendMode: "multiply" },\n d: "M258.671 137.058C242.728 164.987 191.013 155.608 155.427 150.522C33.4364 133.096 3.88843 101.414 3.88843 101.414C7.27775 115.241 12.8356 128.445 20.3555 140.534C30.1243 155.176 85.6636 177.872 168.562 184.795C196.485 187.132 211.008 187.18 218.507 186.697C235.618 173.545 249.379 156.537 258.671 137.058Z",\n fill: "url(#paint3_linear)"\n }\n ),\n /* @__PURE__ */ c(\n "path",\n {\n style: { mixBlendMode: "multiply" },\n d: "M218.575 186.62C218.575 186.569 218.559 186.562 218.546 186.62C218.546 186.62 218.546 186.598 218.546 186.601C210.473 191.216 193.311 196.173 177.394 199.476C128.55 209.644 70.278 193.939 57.9116 188.043C59.2796 189.057 60.9276 190.254 62.5723 191.426C84.9236 206.807 111.428 215.021 138.56 214.974C168.52 214.974 196.208 203.229 218.552 186.649L218.575 186.62Z",\n fill: "url(#paint4_linear)"\n }\n ),\n /* @__PURE__ */ e1("defs", { children: [\n /* @__PURE__ */ e1(\n "linearGradient",\n {\n id: "paint0_linear",\n x1: "159.649",\n y1: "92.2661",\n x2: "-4.34512",\n y2: "92.2661",\n gradientUnits: "userSpaceOnUse",\n children: [\n /* @__PURE__ */ c("stop", { stopColor: "#009FE3" }),\n /* @__PURE__ */ c("stop", { offset: "1", stopColor: "#1D3D91" })\n ]\n }\n ),\n /* @__PURE__ */ e1(\n "linearGradient",\n {\n id: "paint1_linear",\n x1: "159.727",\n y1: "156.56",\n x2: "265.449",\n y2: "131.641",\n gradientUnits: "userSpaceOnUse",\n children: [\n /* @__PURE__ */ c("stop", { stopColor: "#004899" }),\n /* @__PURE__ */ c("stop", { offset: "1", stopColor: "#009FE3" })\n ]\n }\n ),\n /* @__PURE__ */ e1(\n "linearGradient",\n {\n id: "paint2_linear",\n x1: "56.9912",\n y1: "199.221",\n x2: "138.158",\n y2: "199.221",\n gradientUnits: "userSpaceOnUse",\n children: [\n /* @__PURE__ */ c("stop", { stopColor: "#008DC1" }),\n /* @__PURE__ */ c("stop", { offset: "0.63", stopColor: "#006EA3" }),\n /* @__PURE__ */ c("stop", { offset: "1", stopColor: "#005990" })\n ]\n }\n ),\n /* @__PURE__ */ e1(\n "linearGradient",\n {\n id: "paint3_linear",\n x1: "3797.6",\n y1: "26448.1",\n x2: "211537",\n y2: "26448.1",\n gradientUnits: "userSpaceOnUse",\n children: [\n /* @__PURE__ */ c("stop", { stopColor: "#009FE3" }),\n /* @__PURE__ */ c("stop", { offset: "1", stopColor: "#1D3D91" })\n ]\n }\n ),\n /* @__PURE__ */ e1(\n "linearGradient",\n {\n id: "paint4_linear",\n x1: "55.3624",\n y1: "200.782",\n x2: "217.76",\n y2: "200.782",\n gradientUnits: "userSpaceOnUse",\n children: [\n /* @__PURE__ */ c("stop", { offset: "0.09", stopColor: "#009EE3" }),\n /* @__PURE__ */ c("stop", { offset: "1", stopColor: "#005AA7" })\n ]\n }\n )\n ] })\n ]\n }\n), PK = () => /* @__PURE__ */ e1(\n "svg",\n {\n width: "260",\n height: "260",\n viewBox: "0 0 260 260",\n fill: "none",\n xmlns: "http://www.w3.org/2000/svg",\n children: [\n /* @__PURE__ */ c(\n "path",\n {\n style: { mixBlendMode: "multiply" },\n d: "M201.892 168.482C218.332 144.454 0 109.132 0 109.132C0.960111 129.803 15.6018 159.611 15.6018 159.489C25.1805 168.799 138.256 165.999 175.796 197.539C189.171 186.123 201.892 168.482 201.892 168.482Z",\n fill: "url(#paint0_linear)"\n }\n ),\n /* @__PURE__ */ c(\n "path",\n {\n style: { mixBlendMode: "multiply" },\n d: "M201.402 169.151C185.826 189.374 111.318 190.274 65.2619 190.014C53.1453 189.944 46.4053 194.767 47.5991 203.744C48.7928 212.721 59.5845 219.589 77.769 222.946C112.298 229.312 145.028 220.725 171.985 200.585C185.106 190.783 198.689 172.825 201.402 169.158V169.151Z",\n fill: "url(#paint1_linear)"\n }\n ),\n /* @__PURE__ */ c(\n "path",\n {\n style: { mixBlendMode: "multiply" },\n d: "M257.354 58.4697C240.501 110.517 11.5533 69.7382 0.0159302 108.792C0.0159302 109.01 0.0159302 109.132 0.0159302 109.132C0.940837 128.974 14.4688 157.236 15.5505 159.377C15.5862 159.344 15.6194 159.307 15.6497 159.269C40.1198 119.45 202.391 143.574 224.346 131.745C226.685 130.491 271.138 75.4765 257.354 58.4697Z",\n fill: "url(#paint2_linear)"\n }\n ),\n /* @__PURE__ */ c(\n "path",\n {\n style: { mixBlendMode: "multiply" },\n d: "M224.484 131.659C227.93 128.945 270.943 75.2365 257.355 58.4697C257.353 58.4538 257.353 58.4377 257.355 58.4217C257.249 58.2315 257.12 58.0552 256.97 57.8969C247.328 47.7005 208.933 36.4288 165.482 34.3517C125.374 32.4315 107.152 38.1922 104.034 56.1143C101.589 71.476 119.118 82.6933 150.561 92.0352C180.251 100.862 232.027 111.717 224.484 131.659Z",\n fill: "url(#paint3_linear)"\n }\n ),\n /* @__PURE__ */ e1("defs", { children: [\n /* @__PURE__ */ e1(\n "linearGradient",\n {\n id: "paint0_linear",\n x1: "225.658",\n y1: "153.325",\n x2: "87.3669",\n y2: "153.325",\n gradientUnits: "userSpaceOnUse",\n children: [\n /* @__PURE__ */ c("stop", { stopColor: "#312783" }),\n /* @__PURE__ */ c("stop", { offset: "1", stopColor: "#008BD2" })\n ]\n }\n ),\n /* @__PURE__ */ e1(\n "linearGradient",\n {\n id: "paint1_linear",\n x1: "201.402",\n y1: "197.078",\n x2: "47.4647",\n y2: "197.078",\n gradientUnits: "userSpaceOnUse",\n children: [\n /* @__PURE__ */ c("stop", { stopColor: "#0052A1" }),\n /* @__PURE__ */ c("stop", { offset: "0.2", stopColor: "#006BB5" }),\n /* @__PURE__ */ c("stop", { offset: "0.55", stopColor: "#0092D3" }),\n /* @__PURE__ */ c("stop", { offset: "0.83", stopColor: "#00AAE5" }),\n /* @__PURE__ */ c("stop", { offset: "1", stopColor: "#00B3EC" })\n ]\n }\n ),\n /* @__PURE__ */ e1(\n "linearGradient",\n {\n id: "paint2_linear",\n x1: "-3.40846",\n y1: "108.917",\n x2: "263.333",\n y2: "108.917",\n gradientUnits: "userSpaceOnUse",\n children: [\n /* @__PURE__ */ c("stop", { stopColor: "#00719D" }),\n /* @__PURE__ */ c("stop", { offset: "0.88", stopColor: "#009FE3" })\n ]\n }\n ),\n /* @__PURE__ */ e1(\n "linearGradient",\n {\n id: "paint3_linear",\n x1: "103.826",\n y1: "82.8277",\n x2: "260.001",\n y2: "82.8277",\n gradientUnits: "userSpaceOnUse",\n children: [\n /* @__PURE__ */ c("stop", { stopColor: "#0093D9" }),\n /* @__PURE__ */ c("stop", { offset: "0.64", stopColor: "#312783" })\n ]\n }\n )\n ] })\n ]\n }\n), FK = () => /* @__PURE__ */ e1(\n "svg",\n {\n width: "260",\n height: "260",\n viewBox: "0 0 260 260",\n fill: "none",\n xmlns: "http://www.w3.org/2000/svg",\n children: [\n /* @__PURE__ */ c(\n "path",\n {\n style: { mixBlendMode: "multiply" },\n d: "M223.503 150.828C214.863 161.68 204.897 171.407 193.836 179.779C184.527 172.708 172.931 168.508 161.943 164.807C146.384 159.556 130.385 155.606 114.337 152.135C96.4633 148.27 78.4386 145.088 60.3524 142.389C42.8903 139.782 12.7497 136.677 9.56161 134.021C4.81794 130.067 -1.35837 74.7941 0.264874 76.3804C12.2178 88.0659 237.741 134.553 223.503 150.828Z",\n fill: "url(#paint0_linear)"\n }\n ),\n /* @__PURE__ */ c(\n "path",\n {\n style: { mixBlendMode: "multiply" },\n d: "M142.034 206.154C174.183 196.416 202.602 177.113 223.503 150.816C202.878 172.222 121.092 172.514 98.0189 172.271C70.7897 172.007 51.649 169.133 49.6446 182.967C46.9453 201.653 114.673 212.68 142.034 206.154Z",\n fill: "url(#paint1_linear)"\n }\n ),\n /* @__PURE__ */ c(\n "path",\n {\n style: { mixBlendMode: "multiply" },\n d: "M259.996 76.2329C259.75 61.4393 246.93 52.0718 223.248 52.0011C174.182 51.8597 17.1306 65.0393 0.231053 76.4112C0.206459 76.4297 0.172641 76.4112 0.132675 76.4112C-0.921816 78.2681 4.59044 126.861 9.10968 133.495L9.56161 133.846C6.37354 128.708 144.269 119.464 221.145 106.066C250.865 100.883 260.235 90.5285 259.996 76.2329Z",\n fill: "url(#paint2_linear)"\n }\n ),\n /* @__PURE__ */ e1("defs", { children: [\n /* @__PURE__ */ e1(\n "linearGradient",\n {\n id: "paint0_linear",\n x1: "0.000482516",\n y1: "128.063",\n x2: "224.155",\n y2: "128.063",\n gradientUnits: "userSpaceOnUse",\n children: [\n /* @__PURE__ */ c("stop", { offset: "0.4", stopColor: "#094985" }),\n /* @__PURE__ */ c("stop", { offset: "0.9", stopColor: "#009EDF" })\n ]\n }\n ),\n /* @__PURE__ */ e1(\n "linearGradient",\n {\n id: "paint1_linear",\n x1: "49.5677",\n y1: "179.435",\n x2: "223.51",\n y2: "179.435",\n gradientUnits: "userSpaceOnUse",\n children: [\n /* @__PURE__ */ c("stop", { stopColor: "#32BEF0" }),\n /* @__PURE__ */ c("stop", { offset: "1", stopColor: "#004F9F" })\n ]\n }\n ),\n /* @__PURE__ */ e1(\n "linearGradient",\n {\n id: "paint2_linear",\n x1: "75.0046",\n y1: "93.3753",\n x2: "194.279",\n y2: "92.0287",\n gradientUnits: "userSpaceOnUse",\n children: [\n /* @__PURE__ */ c("stop", { stopColor: "#312783" }),\n /* @__PURE__ */ c("stop", { offset: "0.35", stopColor: "#21479C" }),\n /* @__PURE__ */ c("stop", { offset: "1", stopColor: "#008AD1" })\n ]\n }\n )\n ] })\n ]\n }\n), XK = () => /* @__PURE__ */ e1(\n "svg",\n {\n width: "260",\n height: "260",\n viewBox: "0 0 260 260",\n fill: "none",\n xmlns: "http://www.w3.org/2000/svg",\n children: [\n /* @__PURE__ */ c(\n "path",\n {\n style: { mixBlendMode: "multiply" },\n d: "M223.528 228.464C201.068 224.478 165.417 216.509 168.896 191.07C171.574 171.485 203.979 165.775 217.52 162.618C228.271 160.118 256.944 156.663 259.859 152.097C259.859 152.097 259.859 152.097 259.859 152.121C259.908 153.246 259.944 154.376 259.968 155.512V155.713C259.992 156.78 260 157.851 260 158.934C260 183.415 254.496 206.338 244.901 226.008C244.776 226.253 244.651 226.503 244.522 226.749C243.363 228.987 235.595 230.606 223.528 228.464Z",\n fill: "url(#paint0_linear)"\n }\n ),\n /* @__PURE__ */ c(\n "path",\n {\n style: { mixBlendMode: "multiply" },\n d: "M259.968 155.713V155.512C259.968 154.734 259.927 153.957 259.899 153.184C259.93 152.839 259.918 152.492 259.863 152.149C255.539 138.173 190.341 121.548 146.545 113.265C91.1723 102.813 7.73885 91.8 11.6768 70.2622C8.58844 75.2148 4.38073 84.7577 3.30968 90.5599C-2.56903 122.53 3.358 130.539 7.8234 134.155L8.06097 134.348C56.2624 156.635 273.408 161.729 244.321 226.958L244.297 227.014C244.381 226.925 244.456 226.827 244.518 226.72L244.897 225.98C254.492 206.31 259.996 183.387 259.996 158.906C260 157.835 259.992 156.78 259.968 155.713Z",\n fill: "url(#paint1_linear)"\n }\n ),\n /* @__PURE__ */ c(\n "path",\n {\n style: { mixBlendMode: "multiply" },\n d: "M256.251 64.2587C252.132 44.7744 222.046 36.979 186.895 33.4639C87.6813 23.5425 34.036 45.2656 12.764 68.6033C9.10386 73.9706 5.06124 83.5859 3.31373 90.5599C-4.39705 121.363 3.18891 129.967 7.51741 133.889C5.47597 131.183 5.17801 128.961 4.94044 126.432C2.27086 98.4357 104.605 81.9955 213.143 102.957C252.962 110.652 260.374 83.747 256.251 64.2587Z",\n fill: "url(#paint2_linear)"\n }\n ),\n /* @__PURE__ */ e1("defs", { children: [\n /* @__PURE__ */ e1(\n "linearGradient",\n {\n id: "paint0_linear",\n x1: "168.659",\n y1: "190.78",\n x2: "265.198",\n y2: "190.78",\n gradientUnits: "userSpaceOnUse",\n children: [\n /* @__PURE__ */ c("stop", { stopColor: "#0085CC" }),\n /* @__PURE__ */ c("stop", { offset: "1", stopColor: "#312783" })\n ]\n }\n ),\n /* @__PURE__ */ e1(\n "linearGradient",\n {\n id: "paint1_linear",\n x1: "20.817",\n y1: "148.646",\n x2: "217.464",\n y2: "148.646",\n gradientUnits: "userSpaceOnUse",\n children: [\n /* @__PURE__ */ c("stop", { stopColor: "#009FE3" }),\n /* @__PURE__ */ c("stop", { offset: "0.19", stopColor: "#008ED5" }),\n /* @__PURE__ */ c("stop", { offset: "0.73", stopColor: "#0061AF" }),\n /* @__PURE__ */ c("stop", { offset: "1", stopColor: "#0050A0" })\n ]\n }\n ),\n /* @__PURE__ */ e1(\n "linearGradient",\n {\n id: "paint2_linear",\n x1: "8.16568",\n y1: "82.4424",\n x2: "264.441",\n y2: "82.4424",\n gradientUnits: "userSpaceOnUse",\n children: [\n /* @__PURE__ */ c("stop", { offset: "0.06", stopColor: "#00508C" }),\n /* @__PURE__ */ c("stop", { offset: "0.34", stopColor: "#0076B5" }),\n /* @__PURE__ */ c("stop", { offset: "0.6", stopColor: "#0094D6" }),\n /* @__PURE__ */ c("stop", { offset: "0.74", stopColor: "#009FE3" })\n ]\n }\n )\n ] })\n ]\n }\n), UK = () => /* @__PURE__ */ e1(\n "svg",\n {\n width: "260",\n height: "260",\n viewBox: "0 0 260 260",\n fill: "none",\n xmlns: "http://www.w3.org/2000/svg",\n children: [\n /* @__PURE__ */ c(\n "path",\n {\n style: { mixBlendMode: "multiply" },\n d: "M97.6669 80.9939C102.708 97.0342 124.121 95.2662 147.02 93.3897C175.022 91.0894 238.996 91.0072 258.599 114.422L257.82 113.344C239.924 88.8479 216.015 69.38 188.401 56.8202C167.448 48.3975 144.953 50.4645 130.033 54.5954C115.114 58.7262 92.616 64.9241 97.6669 80.9939Z",\n fill: "url(#paint0_linear)"\n }\n ),\n /* @__PURE__ */ c(\n "path",\n {\n style: { mixBlendMode: "multiply" },\n d: "M11.8298 130.617C7.64306 131.445 -2.80727 173.907 0.712319 178.126C0.712319 178.126 18.2215 180.019 51.9781 177.255C163.728 168.103 273.666 140.121 258.612 114.428C258.356 114.074 258.099 113.715 257.836 113.357C250.182 102.885 241.399 93.2874 231.645 84.7371C211.306 133.344 16.8117 130.617 11.8298 130.617Z",\n fill: "url(#paint1_linear)"\n }\n ),\n /* @__PURE__ */ c(\n "path",\n {\n style: { mixBlendMode: "multiply" },\n d: "M207.836 171.317C205.138 148.159 172.492 151.001 127.247 146.611C102.271 144.186 34.1271 138.77 11.626 130.689C7.47548 132.713 -1.99883 170.91 0.37714 177.499L0.676191 178.077L0.71234 178.126V178.146L0.748488 178.218C13.6537 202.826 124.667 214.63 165.643 206.884C194.043 201.511 209.548 186.026 207.836 171.317Z",\n fill: "url(#paint2_linear)"\n }\n ),\n /* @__PURE__ */ e1("defs", { children: [\n /* @__PURE__ */ e1(\n "linearGradient",\n {\n id: "paint0_linear",\n x1: "96.9407",\n y1: "82.7127",\n x2: "258.599",\n y2: "82.7127",\n gradientUnits: "userSpaceOnUse",\n children: [\n /* @__PURE__ */ c("stop", { offset: "0.06", stopColor: "#00508C" }),\n /* @__PURE__ */ c("stop", { offset: "0.34", stopColor: "#0076B5" }),\n /* @__PURE__ */ c("stop", { offset: "0.6", stopColor: "#0094D6" }),\n /* @__PURE__ */ c("stop", { offset: "0.74", stopColor: "#009FE3" })\n ]\n }\n ),\n /* @__PURE__ */ e1(\n "linearGradient",\n {\n id: "paint1_linear",\n x1: "-0.000800403",\n y1: "131.747",\n x2: "259.989",\n y2: "131.747",\n gradientUnits: "userSpaceOnUse",\n children: [\n /* @__PURE__ */ c("stop", { stopColor: "#0087CE" }),\n /* @__PURE__ */ c("stop", { offset: "0.53", stopColor: "#008CD3" }),\n /* @__PURE__ */ c("stop", { offset: "0.65", stopColor: "#0976B9" }),\n /* @__PURE__ */ c("stop", { offset: "0.88", stopColor: "#17518C" }),\n /* @__PURE__ */ c("stop", { offset: "1", stopColor: "#1D427B" })\n ]\n }\n ),\n /* @__PURE__ */ e1(\n "linearGradient",\n {\n id: "paint2_linear",\n x1: "17.0418",\n y1: "208.945",\n x2: "182.798",\n y2: "121.04",\n gradientUnits: "userSpaceOnUse",\n children: [\n /* @__PURE__ */ c("stop", { offset: "0.61", stopColor: "#312783" }),\n /* @__PURE__ */ c("stop", { offset: "1", stopColor: "#009FE3" })\n ]\n }\n )\n ] })\n ]\n }\n), YK = () => /* @__PURE__ */ e1(\n "svg",\n {\n width: "260",\n height: "260",\n viewBox: "0 0 260 260",\n fill: "none",\n xmlns: "http://www.w3.org/2000/svg",\n children: [\n /* @__PURE__ */ c(\n "path",\n {\n style: { mixBlendMode: "multiply" },\n d: "M259.3 126.981C254.276 138.061 247.883 148.468 240.272 157.96C197.754 139.811 34.1013 178.407 26.727 173.18C24.3977 170.615 21.2543 167.256 19.0516 164.592C11.431 154.331 11.2873 154.129 8.01056 148.222C2.29166 136.705 2.17879 136.486 0 130.035C0 130.035 33.9645 121.355 64.0606 116.275C196.645 93.8956 267.916 110.091 259.3 126.981Z",\n fill: "url(#paint0_linear)"\n }\n ),\n /* @__PURE__ */ c(\n "path",\n {\n style: { mixBlendMode: "multiply" },\n d: "M201.855 191.49C227.12 176.327 247.164 153.824 259.317 126.981C246.354 149.597 176.855 167.342 157.181 172.103C133.97 177.712 117.07 179.358 118.335 191.572C120.022 208.034 179.995 202.9 201.855 191.49Z",\n fill: "url(#paint1_linear)"\n }\n ),\n /* @__PURE__ */ c(\n "path",\n {\n style: { mixBlendMode: "multiply" },\n d: "M237.68 90.1332C229.731 96.5123 216.86 97.3708 207.115 99.5119C174.225 106.729 141.444 113.231 109.117 122.866C44.2838 142.198 23.2587 165.29 26.727 173.18C24.3977 170.615 21.2543 167.256 19.0516 164.592C11.431 154.331 11.2873 154.129 8.01056 148.222C2.29166 136.705 2.17879 136.486 0 130.036C0 130.036 12.2621 113.084 52.7288 92.3633C98.9144 68.7147 150.798 58.6827 202.416 59.0076C211.404 59.0658 221.361 59.4215 229.741 62.9821C240.355 67.4936 248.786 81.2128 237.68 90.1332Z",\n fill: "url(#paint2_linear)"\n }\n ),\n /* @__PURE__ */ e1("defs", { children: [\n /* @__PURE__ */ e1(\n "linearGradient",\n {\n id: "paint0_linear",\n x1: "10.4799",\n y1: "171.621",\n x2: "256.491",\n y2: "109.645",\n gradientUnits: "userSpaceOnUse",\n children: [\n /* @__PURE__ */ c("stop", { stopColor: "#312783" }),\n /* @__PURE__ */ c("stop", { offset: "1", stopColor: "#008DD4" })\n ]\n }\n ),\n /* @__PURE__ */ e1(\n "linearGradient",\n {\n id: "paint1_linear",\n x1: "117.497",\n y1: "188.576",\n x2: "265.431",\n y2: "151.307",\n gradientUnits: "userSpaceOnUse",\n children: [\n /* @__PURE__ */ c("stop", { stopColor: "#00B8EE" }),\n /* @__PURE__ */ c("stop", { offset: "1", stopColor: "#194093" })\n ]\n }\n ),\n /* @__PURE__ */ e1(\n "linearGradient",\n {\n id: "paint2_linear",\n x1: "2.13082",\n y1: "138.48",\n x2: "242.752",\n y2: "77.8619",\n gradientUnits: "userSpaceOnUse",\n children: [\n /* @__PURE__ */ c("stop", { offset: "0.06", stopColor: "#005A9E" }),\n /* @__PURE__ */ c("stop", { offset: "0.17", stopColor: "#0065AA" }),\n /* @__PURE__ */ c("stop", { offset: "0.54", stopColor: "#0084CB" }),\n /* @__PURE__ */ c("stop", { offset: "0.74", stopColor: "#0090D7" })\n ]\n }\n )\n ] })\n ]\n }\n), GK = () => /* @__PURE__ */ e1(\n "svg",\n {\n width: "260",\n height: "260",\n viewBox: "0 0 260 260",\n fill: "none",\n xmlns: "http://www.w3.org/2000/svg",\n children: [\n /* @__PURE__ */ c(\n "path",\n {\n style: { mixBlendMode: "multiply" },\n d: "M13.8739 176.315C16.0271 178.765 18.5271 180.794 21.0882 182.814C46.6351 202.842 89.3631 208.252 116.941 203.283C130.795 200.786 139.797 190.064 137.341 173.732C136.037 165.075 126.947 160.577 118.75 160.691C99.1135 160.968 76.2719 159.115 54.8705 154.486C39.2404 151.107 21.2963 141.723 15.0032 134.051C14.1514 132.988 8.04696 126.731 20.869 122.183C20.869 122.183 11.3073 124.913 8.49924 131.34C7.14518 134.434 6.23507 138.831 6.16847 142.242C6.08246 146.681 6.21287 151.148 6.56526 155.585C6.98979 160.971 7.78059 166.465 10.3389 171.218C11.3258 173.042 12.5113 174.752 13.8739 176.315Z",\n fill: "url(#paint0_linear)"\n }\n ),\n /* @__PURE__ */ c(\n "path",\n {\n style: { mixBlendMode: "multiply" },\n d: "M0.0335741 132.386L0.000277424 132.28C-0.00546692 132.03 0.0781566 131.786 0.236129 131.592C0.175085 131.861 0.105717 132.122 0.0335741 132.386Z",\n fill: "url(#paint1_linear)"\n }\n ),\n /* @__PURE__ */ c(\n "path",\n {\n style: { mixBlendMode: "multiply" },\n d: "M234.723 218.574C211.87 204.512 193.282 199.734 154.045 190.522C115.484 181.463 4.32883 158.085 13.8489 176.185C14.2096 176.87 11.31 173.008 10.3389 171.207C7.76949 166.454 6.98979 160.96 6.56526 155.588C6.21287 151.149 6.08246 146.695 6.16847 142.245C6.23507 138.843 7.14518 134.436 8.49924 131.343C11.1658 125.238 19.9172 122.483 20.7941 122.219C35.8331 119.012 60.3617 117.991 98.5086 125.382C153.975 136.118 225.372 157.808 246.998 173.951C271.091 191.937 258.605 233.256 234.723 218.574Z",\n fill: "url(#paint2_linear)"\n }\n ),\n /* @__PURE__ */ c(\n "path",\n {\n style: { mixBlendMode: "multiply" },\n d: "M217.889 147.672C217.209 130.41 199.853 119.267 186.653 111.267C148.509 88.1401 102.318 74.0584 57.4594 77.5434C46.7351 78.3758 36.2632 80.6594 26.0384 83.9586C-3.07129 93.351 -9.59467 59.3662 16.3241 46.7551C19.7148 45.1069 28.1194 42.0991 33.0973 40.9281C79.4768 29.9763 123.792 38.8221 168.254 52.3683C178.293 55.4205 194.459 62.0216 203.388 67.6793C204.382 68.2691 205.312 68.961 206.163 69.7437C208.03 71.5445 235.411 135.272 217.889 147.672Z",\n fill: "url(#paint3_linear)"\n }\n ),\n /* @__PURE__ */ c(\n "path",\n {\n style: { mixBlendMode: "multiply" },\n d: "M206.262 69.8491C208.796 73.3259 235.164 135.441 217.889 147.664C217.889 147.68 217.889 147.7 217.889 147.716C217.738 147.867 217.57 147.999 217.389 148.11C205.58 155.172 166.334 155.633 124.769 146.071C86.3775 137.256 70.7003 126.992 72.5289 109.25C74.2908 94.1113 93.8166 88.1623 125.981 87.674C156.337 87.205 208.105 90.6901 206.262 69.8491Z",\n fill: "url(#paint4_linear)"\n }\n ),\n /* @__PURE__ */ e1("defs", { children: [\n /* @__PURE__ */ e1(\n "linearGradient",\n {\n id: "paint0_linear",\n x1: "2.97432",\n y1: "153.628",\n x2: "137.174",\n y2: "187.361",\n gradientUnits: "userSpaceOnUse",\n children: [\n /* @__PURE__ */ c("stop", { offset: "0.31", stopColor: "#312A70" }),\n /* @__PURE__ */ c("stop", { offset: "1", stopColor: "#009FE3", stopOpacity: "0.9" })\n ]\n }\n ),\n /* @__PURE__ */ e1(\n "linearGradient",\n {\n id: "paint1_linear",\n x1: "-5.46241",\n y1: "129.598",\n x2: "-5.33222",\n y2: "129.653",\n gradientUnits: "userSpaceOnUse",\n children: [\n /* @__PURE__ */ c("stop", { stopColor: "#FFD800" }),\n /* @__PURE__ */ c("stop", { offset: "0.51", stopColor: "#F49600" }),\n /* @__PURE__ */ c("stop", { offset: "0.62", stopColor: "#F38F01" }),\n /* @__PURE__ */ c("stop", { offset: "0.78", stopColor: "#EF7B06" }),\n /* @__PURE__ */ c("stop", { offset: "0.96", stopColor: "#EA5B0C" })\n ]\n }\n ),\n /* @__PURE__ */ e1(\n "linearGradient",\n {\n id: "paint2_linear",\n x1: "6.1435",\n y1: "170.719",\n x2: "259.995",\n y2: "170.719",\n gradientUnits: "userSpaceOnUse",\n children: [\n /* @__PURE__ */ c("stop", { stopColor: "#0092D8" }),\n /* @__PURE__ */ c("stop", { offset: "1", stopColor: "#7965AA" })\n ]\n }\n ),\n /* @__PURE__ */ e1(\n "linearGradient",\n {\n id: "paint3_linear",\n x1: "2.6739",\n y1: "42.3755",\n x2: "233.279",\n y2: "107.233",\n gradientUnits: "userSpaceOnUse",\n children: [\n /* @__PURE__ */ c("stop", { stopColor: "#971B81" }),\n /* @__PURE__ */ c("stop", { offset: "1", stopColor: "#F195BF" })\n ]\n }\n ),\n /* @__PURE__ */ e1(\n "linearGradient",\n {\n id: "paint4_linear",\n x1: "79.2217",\n y1: "79.8175",\n x2: "226.249",\n y2: "121.169",\n gradientUnits: "userSpaceOnUse",\n children: [\n /* @__PURE__ */ c("stop", { stopColor: "#F49600" }),\n /* @__PURE__ */ c("stop", { offset: "1", stopColor: "#E30613" })\n ]\n }\n )\n ] })\n ]\n }\n), QK = () => /* @__PURE__ */ e1(\n "svg",\n {\n width: "260",\n height: "260",\n viewBox: "0 0 260 260",\n fill: "none",\n xmlns: "http://www.w3.org/2000/svg",\n children: [\n /* @__PURE__ */ c(\n "path",\n {\n style: { mixBlendMode: "multiply" },\n d: "M87.5176 44.8117C134.624 47.5734 159.566 59.4119 159.209 78.6696C158.687 95.1077 137.839 105.977 103.299 109.392C63.0166 113.377 6.99127 113.525 20.3555 140.537C7.01215 119.083 -0.0404927 94.3138 0.000174886 69.0488C0.000174886 67.1176 0.0613309 65.2121 0.141799 63.313C0.425048 56.5151 8.58776 40.1896 87.5176 44.8117Z",\n fill: "url(#paint0_linear)"\n }\n ),\n /* @__PURE__ */ c(\n "path",\n {\n style: { mixBlendMode: "multiply" },\n d: "M260 134.186C258.835 126.342 249.909 122.197 243.35 119.589C233.609 115.684 223.46 112.889 213.093 111.256C205.796 110.122 198.406 109.69 191.026 109.969C177.391 110.516 156.646 112.994 154.506 130.066C152.288 147.814 180.42 160.841 191.995 166.956C199.961 171.166 214.793 177.926 223.512 182.651C239.147 169.429 251.616 152.867 260 134.186Z",\n fill: "url(#paint1_linear)"\n }\n ),\n /* @__PURE__ */ c(\n "path",\n {\n style: { mixBlendMode: "multiply" },\n d: "M57.9182 188.049C59.2861 189.066 60.9341 190.26 62.5789 191.432C80.5499 203.806 101.281 211.587 122.956 214.091C122.956 214.091 140.501 210.139 137.907 201.835C135.432 193.92 121.35 189.133 97.8047 186.294C58.1564 181.515 56.6114 186.932 57.9182 188.049Z",\n fill: "url(#paint2_linear)"\n }\n ),\n /* @__PURE__ */ c(\n "path",\n {\n style: { mixBlendMode: "multiply" },\n d: "M258.671 137.061C242.728 164.99 191.013 155.61 155.427 150.525C33.4364 133.099 3.88843 101.417 3.88843 101.417C7.27775 115.244 12.8356 128.448 20.3555 140.537C30.1243 155.182 85.6636 177.874 168.562 184.798C196.485 187.135 211.008 187.183 218.507 186.7C235.618 173.548 249.38 156.54 258.671 137.061Z",\n fill: "url(#paint3_linear)"\n }\n ),\n /* @__PURE__ */ c(\n "path",\n {\n style: { mixBlendMode: "multiply" },\n d: "M218.575 186.623C218.575 186.575 218.559 186.568 218.546 186.623C218.546 186.623 218.546 186.6 218.546 186.604C210.473 191.219 193.311 196.176 177.394 199.479C128.55 209.647 70.278 193.942 57.9116 188.046C59.2796 189.063 60.9276 190.257 62.5723 191.428C84.9197 206.815 111.422 215.033 138.554 214.99C168.514 214.99 196.201 203.228 218.536 186.639L218.575 186.623Z",\n fill: "url(#paint4_linear)"\n }\n ),\n /* @__PURE__ */ e1("defs", { children: [\n /* @__PURE__ */ e1(\n "linearGradient",\n {\n id: "paint0_linear",\n x1: "159.649",\n y1: "92.2688",\n x2: "-4.34512",\n y2: "92.2688",\n gradientUnits: "userSpaceOnUse",\n children: [\n /* @__PURE__ */ c("stop", { stopColor: "#ED6EA7" }),\n /* @__PURE__ */ c("stop", { offset: "1", stopColor: "#831F82" })\n ]\n }\n ),\n /* @__PURE__ */ e1(\n "linearGradient",\n {\n id: "paint1_linear",\n x1: "159.727",\n y1: "156.563",\n x2: "265.453",\n y2: "131.644",\n gradientUnits: "userSpaceOnUse",\n children: [\n /* @__PURE__ */ c("stop", { stopColor: "#004899" }),\n /* @__PURE__ */ c("stop", { offset: "1", stopColor: "#0080C9", stopOpacity: "0.9" })\n ]\n }\n ),\n /* @__PURE__ */ e1(\n "linearGradient",\n {\n id: "paint2_linear",\n x1: "56.9912",\n y1: "199.224",\n x2: "138.158",\n y2: "199.224",\n gradientUnits: "userSpaceOnUse",\n children: [\n /* @__PURE__ */ c("stop", { stopColor: "#8FBF21" }),\n /* @__PURE__ */ c("stop", { offset: "0.25", stopColor: "#6FB227" }),\n /* @__PURE__ */ c("stop", { offset: "0.8", stopColor: "#209338" }),\n /* @__PURE__ */ c("stop", { offset: "1", stopColor: "#00863E" })\n ]\n }\n ),\n /* @__PURE__ */ e1(\n "linearGradient",\n {\n id: "paint3_linear",\n x1: "3.18352",\n y1: "144.181",\n x2: "265.626",\n y2: "144.181",\n gradientUnits: "userSpaceOnUse",\n children: [\n /* @__PURE__ */ c("stop", { stopColor: "#794897" }),\n /* @__PURE__ */ c("stop", { offset: "1", stopColor: "#009FE3" })\n ]\n }\n ),\n /* @__PURE__ */ e1(\n "linearGradient",\n {\n id: "paint4_linear",\n x1: "55.3624",\n y1: "200.785",\n x2: "217.76",\n y2: "200.785",\n gradientUnits: "userSpaceOnUse",\n children: [\n /* @__PURE__ */ c("stop", { offset: "0.35", stopColor: "#00B9EE" }),\n /* @__PURE__ */ c("stop", { offset: "0.37", stopColor: "#00B5E8" }),\n /* @__PURE__ */ c("stop", { offset: "0.71", stopColor: "#0089A1" }),\n /* @__PURE__ */ c("stop", { offset: "0.86", stopColor: "#007785" })\n ]\n }\n )\n ] })\n ]\n }\n), ZK = () => /* @__PURE__ */ e1(\n "svg",\n {\n width: "260",\n height: "260",\n viewBox: "0 0 260 260",\n fill: "none",\n xmlns: "http://www.w3.org/2000/svg",\n children: [\n /* @__PURE__ */ c(\n "path",\n {\n style: { mixBlendMode: "multiply" },\n d: "M201.892 168.482C218.332 144.454 0 109.132 0 109.132C0.960111 129.803 15.6018 159.611 15.6018 159.489C25.1805 168.799 138.256 165.999 175.796 197.539C189.171 186.123 201.892 168.482 201.892 168.482Z",\n fill: "url(#paint0_linear)"\n }\n ),\n /* @__PURE__ */ c(\n "path",\n {\n style: { mixBlendMode: "multiply" },\n d: "M201.402 169.151C185.826 189.374 111.318 190.274 65.2619 190.014C53.1453 189.944 46.4053 194.767 47.5991 203.744C48.7928 212.721 59.5845 219.589 77.769 222.946C112.298 229.312 145.028 220.725 171.985 200.585C185.106 190.782 198.689 172.825 201.402 169.158V169.151Z",\n fill: "url(#paint1_linear)"\n }\n ),\n /* @__PURE__ */ c(\n "path",\n {\n style: { mixBlendMode: "multiply" },\n d: "M257.354 58.4697C240.501 110.517 11.5533 69.7382 0.0159302 108.792C0.0159302 109.01 0.0159302 109.132 0.0159302 109.132C0.940837 128.974 14.4688 157.236 15.5505 159.377C15.5862 159.344 15.6194 159.307 15.6497 159.269C40.1198 119.45 202.391 143.574 224.346 131.745C226.685 130.491 271.138 75.4765 257.354 58.4697Z",\n fill: "url(#paint2_linear)"\n }\n ),\n /* @__PURE__ */ c(\n "path",\n {\n style: { mixBlendMode: "multiply" },\n d: "M224.484 131.659C227.93 128.945 270.943 75.2365 257.355 58.4697C257.353 58.4538 257.353 58.4377 257.355 58.4217C257.249 58.2315 257.12 58.0552 256.97 57.8969C247.328 47.7005 208.933 36.4288 165.482 34.3517C125.374 32.4315 107.152 38.1922 104.034 56.1143C101.589 71.476 119.118 82.6933 150.561 92.0352C180.251 100.862 232.027 111.717 224.484 131.659Z",\n fill: "url(#paint3_linear)"\n }\n ),\n /* @__PURE__ */ e1("defs", { children: [\n /* @__PURE__ */ e1(\n "linearGradient",\n {\n id: "paint0_linear",\n x1: "225.658",\n y1: "153.325",\n x2: "87.3669",\n y2: "153.325",\n gradientUnits: "userSpaceOnUse",\n children: [\n /* @__PURE__ */ c("stop", { offset: "0.1", stopColor: "#4CC2F1" }),\n /* @__PURE__ */ c("stop", { offset: "0.94", stopColor: "#0059A6" })\n ]\n }\n ),\n /* @__PURE__ */ e1(\n "linearGradient",\n {\n id: "paint1_linear",\n x1: "201.402",\n y1: "197.078",\n x2: "47.4647",\n y2: "197.078",\n gradientUnits: "userSpaceOnUse",\n children: [\n /* @__PURE__ */ c("stop", { offset: "0.19", stopColor: "#006B7F" }),\n /* @__PURE__ */ c("stop", { offset: "0.73", stopColor: "#72B52B" })\n ]\n }\n ),\n /* @__PURE__ */ e1(\n "linearGradient",\n {\n id: "paint2_linear",\n x1: "-3.40846",\n y1: "108.917",\n x2: "263.333",\n y2: "108.917",\n gradientUnits: "userSpaceOnUse",\n children: [\n /* @__PURE__ */ c("stop", { offset: "0.33", stopColor: "#921C81" }),\n /* @__PURE__ */ c("stop", { offset: "1", stopColor: "#F5B3D1" })\n ]\n }\n ),\n /* @__PURE__ */ e1(\n "linearGradient",\n {\n id: "paint3_linear",\n x1: "103.826",\n y1: "82.8277",\n x2: "260.001",\n y2: "82.8277",\n gradientUnits: "userSpaceOnUse",\n children: [\n /* @__PURE__ */ c("stop", { stopColor: "#F59C00" }),\n /* @__PURE__ */ c("stop", { offset: "0.55", stopColor: "#DC0D15" })\n ]\n }\n )\n ] })\n ]\n }\n), jK = () => /* @__PURE__ */ e1(\n "svg",\n {\n width: "260",\n height: "260",\n viewBox: "0 0 260 260",\n fill: "none",\n xmlns: "http://www.w3.org/2000/svg",\n children: [\n /* @__PURE__ */ c(\n "path",\n {\n style: { mixBlendMode: "multiply" },\n d: "M223.503 149.828C214.863 160.68 204.897 170.407 193.836 178.779C184.527 171.708 172.931 167.508 161.943 163.807C146.384 158.556 130.385 154.606 114.337 151.135C96.4633 147.27 78.4386 144.088 60.3524 141.389C42.8903 138.782 12.7497 135.677 9.56161 133.021C4.81794 129.067 -1.35837 73.7941 0.264874 75.3804C12.2178 87.0659 237.741 133.553 223.503 149.828Z",\n fill: "url(#paint0_linear)"\n }\n ),\n /* @__PURE__ */ c(\n "path",\n {\n style: { mixBlendMode: "multiply" },\n d: "M142.034 205.154C174.183 195.416 202.602 176.113 223.503 149.816C202.878 171.222 121.092 171.514 98.0189 171.272C70.7897 171.007 51.649 168.133 49.6446 181.967C46.9453 200.653 114.673 211.68 142.034 205.154Z",\n fill: "url(#paint1_linear)"\n }\n ),\n /* @__PURE__ */ c(\n "path",\n {\n style: { mixBlendMode: "multiply" },\n d: "M259.996 75.2329C259.75 60.4393 246.93 51.0718 223.248 51.0011C174.182 50.8597 17.1306 64.0393 0.231053 75.4112C0.206459 75.4297 0.172641 75.4112 0.132675 75.4112C-0.921816 77.2681 4.59044 125.861 9.10968 132.495L9.56161 132.846C6.37354 127.708 144.269 118.464 221.145 105.066C250.865 99.8828 260.235 89.5285 259.996 75.2329Z",\n fill: "url(#paint2_linear)"\n }\n ),\n /* @__PURE__ */ e1("defs", { children: [\n /* @__PURE__ */ e1(\n "linearGradient",\n {\n id: "paint0_linear",\n x1: "0.000482516",\n y1: "127.063",\n x2: "224.155",\n y2: "127.063",\n gradientUnits: "userSpaceOnUse",\n children: [\n /* @__PURE__ */ c("stop", { offset: "0.19", stopColor: "#831F82" }),\n /* @__PURE__ */ c("stop", { offset: "0.32", stopColor: "#8A2484" }),\n /* @__PURE__ */ c("stop", { offset: "0.51", stopColor: "#9E338B" }),\n /* @__PURE__ */ c("stop", { offset: "0.73", stopColor: "#BE4B96" }),\n /* @__PURE__ */ c("stop", { offset: "0.98", stopColor: "#EA6BA6" }),\n /* @__PURE__ */ c("stop", { offset: "1", stopColor: "#ED6EA7" })\n ]\n }\n ),\n /* @__PURE__ */ e1(\n "linearGradient",\n {\n id: "paint1_linear",\n x1: "49.5677",\n y1: "178.435",\n x2: "223.51",\n y2: "178.435",\n gradientUnits: "userSpaceOnUse",\n children: [\n /* @__PURE__ */ c("stop", { stopColor: "#009FE3", stopOpacity: "0.9" }),\n /* @__PURE__ */ c("stop", { offset: "1", stopColor: "#004A9B" })\n ]\n }\n ),\n /* @__PURE__ */ e1(\n "linearGradient",\n {\n id: "paint2_linear",\n x1: "75.0046",\n y1: "92.3753",\n x2: "194.279",\n y2: "91.0287",\n gradientUnits: "userSpaceOnUse",\n children: [\n /* @__PURE__ */ c("stop", { stopColor: "#E74011" }),\n /* @__PURE__ */ c("stop", { offset: "1", stopColor: "#F9B000" })\n ]\n }\n )\n ] })\n ]\n }\n), KK = () => /* @__PURE__ */ e1(\n "svg",\n {\n width: "260",\n height: "260",\n viewBox: "0 0 260 260",\n fill: "none",\n xmlns: "http://www.w3.org/2000/svg",\n children: [\n /* @__PURE__ */ c(\n "path",\n {\n style: { mixBlendMode: "multiply" },\n d: "M223.528 228.464C201.068 224.478 165.417 216.509 168.896 191.07C171.574 171.485 203.979 165.775 217.52 162.618C228.271 160.118 256.944 156.663 259.859 152.097C259.859 152.097 259.859 152.097 259.859 152.121C259.908 153.246 259.944 154.376 259.968 155.512V155.713C259.992 156.78 260 157.851 260 158.934C260 183.415 254.496 206.338 244.901 226.008C244.776 226.253 244.651 226.503 244.522 226.749C243.363 228.987 235.595 230.606 223.528 228.464Z",\n fill: "url(#paint0_linear)"\n }\n ),\n /* @__PURE__ */ c(\n "path",\n {\n style: { mixBlendMode: "multiply" },\n d: "M259.968 155.713V155.512C259.968 154.734 259.927 153.957 259.899 153.184C259.93 152.839 259.918 152.492 259.863 152.149C255.539 138.173 190.341 121.548 146.545 113.265C91.1723 102.813 7.73885 91.8 11.6768 70.2622C8.58844 75.2148 4.38073 84.7577 3.30968 90.5599C-2.56903 122.53 3.358 130.539 7.8234 134.155L8.06097 134.348C56.2624 156.635 273.408 161.729 244.321 226.958L244.297 227.014C244.381 226.925 244.456 226.827 244.518 226.72L244.897 225.98C254.492 206.31 259.996 183.387 259.996 158.906C260 157.835 259.992 156.78 259.968 155.713Z",\n fill: "url(#paint1_linear)"\n }\n ),\n /* @__PURE__ */ c(\n "path",\n {\n style: { mixBlendMode: "multiply" },\n d: "M256.251 64.2587C252.132 44.7744 222.046 36.979 186.895 33.4639C87.6813 23.5425 34.036 45.2656 12.764 68.6033C9.10386 73.9706 5.06124 83.5859 3.31373 90.5599C-4.39705 121.363 3.18891 129.967 7.51741 133.889C5.47597 131.183 5.17801 128.961 4.94044 126.432C2.27086 98.4357 104.605 81.9955 213.143 102.957C252.962 110.652 260.374 83.747 256.251 64.2587Z",\n fill: "url(#paint2_linear)"\n }\n ),\n /* @__PURE__ */ e1("defs", { children: [\n /* @__PURE__ */ e1(\n "linearGradient",\n {\n id: "paint0_linear",\n x1: "168.659",\n y1: "190.78",\n x2: "265.198",\n y2: "190.78",\n gradientUnits: "userSpaceOnUse",\n children: [\n /* @__PURE__ */ c("stop", { stopColor: "#BCCF00", stopOpacity: "0.9" }),\n /* @__PURE__ */ c("stop", { offset: "1", stopColor: "#007638" })\n ]\n }\n ),\n /* @__PURE__ */ e1(\n "linearGradient",\n {\n id: "paint1_linear",\n x1: "20.817",\n y1: "148.646",\n x2: "217.464",\n y2: "148.646",\n gradientUnits: "userSpaceOnUse",\n children: [\n /* @__PURE__ */ c("stop", { stopColor: "#812182" }),\n /* @__PURE__ */ c("stop", { offset: "0.59", stopColor: "#E4328A" })\n ]\n }\n ),\n /* @__PURE__ */ e1(\n "linearGradient",\n {\n id: "paint2_linear",\n x1: "8.16568",\n y1: "82.4424",\n x2: "264.441",\n y2: "82.4424",\n gradientUnits: "userSpaceOnUse",\n children: [\n /* @__PURE__ */ c("stop", { stopColor: "#312783" }),\n /* @__PURE__ */ c("stop", { offset: "0.15", stopColor: "#2E2E89" }),\n /* @__PURE__ */ c("stop", { offset: "0.36", stopColor: "#264298" }),\n /* @__PURE__ */ c("stop", { offset: "0.62", stopColor: "#1962B2" }),\n /* @__PURE__ */ c("stop", { offset: "0.9", stopColor: "#078ED5" }),\n /* @__PURE__ */ c("stop", { offset: "1", stopColor: "#009FE3" })\n ]\n }\n )\n ] })\n ]\n }\n), JK = () => /* @__PURE__ */ e1(\n "svg",\n {\n width: "260",\n height: "260",\n viewBox: "0 0 260 260",\n fill: "none",\n xmlns: "http://www.w3.org/2000/svg",\n children: [\n /* @__PURE__ */ c(\n "path",\n {\n style: { mixBlendMode: "multiply" },\n d: "M97.6669 80.9939C102.708 97.0342 124.121 95.2662 147.02 93.3897C175.022 91.0894 238.996 91.0072 258.599 114.422L257.82 113.344C239.924 88.8479 216.015 69.38 188.401 56.8202C167.448 48.3975 144.953 50.4645 130.033 54.5954C115.114 58.7262 92.616 64.9241 97.6669 80.9939Z",\n fill: "url(#paint0_linear)"\n }\n ),\n /* @__PURE__ */ c(\n "path",\n {\n style: { mixBlendMode: "multiply" },\n d: "M11.8298 130.617C7.64306 131.445 -2.80727 173.907 0.712319 178.126C0.712319 178.126 18.2215 180.019 51.9781 177.256C163.728 168.103 273.666 140.121 258.612 114.429C258.356 114.074 258.099 113.716 257.836 113.357C250.182 102.885 241.399 93.2877 231.645 84.7373C211.306 133.344 16.8117 130.617 11.8298 130.617Z",\n fill: "url(#paint1_linear)"\n }\n ),\n /* @__PURE__ */ c(\n "path",\n {\n style: { mixBlendMode: "multiply" },\n d: "M207.836 171.317C205.138 148.159 172.492 151.001 127.247 146.611C102.271 144.186 34.1271 138.77 11.626 130.689C7.47548 132.713 -1.99883 170.91 0.37714 177.499L0.676191 178.077L0.71234 178.126V178.146L0.748488 178.218C13.6537 202.826 124.667 214.63 165.643 206.884C194.043 201.511 209.548 186.026 207.836 171.317Z",\n fill: "url(#paint2_linear)"\n }\n ),\n /* @__PURE__ */ e1("defs", { children: [\n /* @__PURE__ */ e1(\n "linearGradient",\n {\n id: "paint0_linear",\n x1: "96.9407",\n y1: "82.7127",\n x2: "258.599",\n y2: "82.7127",\n gradientUnits: "userSpaceOnUse",\n children: [\n /* @__PURE__ */ c("stop", { stopColor: "#F3A3C7" }),\n /* @__PURE__ */ c("stop", { offset: "1", stopColor: "#871F82" })\n ]\n }\n ),\n /* @__PURE__ */ e1(\n "linearGradient",\n {\n id: "paint1_linear",\n x1: "-0.000800403",\n y1: "131.747",\n x2: "259.989",\n y2: "131.747",\n gradientUnits: "userSpaceOnUse",\n children: [\n /* @__PURE__ */ c("stop", { offset: "0.27", stopColor: "#1C4180" }),\n /* @__PURE__ */ c("stop", { offset: "1", stopColor: "#00A7E7" })\n ]\n }\n ),\n /* @__PURE__ */ e1(\n "linearGradient",\n {\n id: "paint2_linear",\n x1: "17.0418",\n y1: "208.945",\n x2: "182.798",\n y2: "121.04",\n gradientUnits: "userSpaceOnUse",\n children: [\n /* @__PURE__ */ c("stop", { offset: "0.4", stopColor: "#00693A" }),\n /* @__PURE__ */ c("stop", { offset: "0.52", stopColor: "#1F7C34" }),\n /* @__PURE__ */ c("stop", { offset: "0.85", stopColor: "#74AD25" }),\n /* @__PURE__ */ c("stop", { offset: "1", stopColor: "#95C11F" })\n ]\n }\n )\n ] })\n ]\n }\n), _K = () => /* @__PURE__ */ e1(\n "svg",\n {\n width: "260",\n height: "260",\n viewBox: "0 0 260 260",\n fill: "none",\n xmlns: "http://www.w3.org/2000/svg",\n children: [\n /* @__PURE__ */ c(\n "path",\n {\n style: { mixBlendMode: "multiply" },\n d: "M259.3 126.981C254.276 138.061 247.883 148.468 240.272 157.96C197.754 139.811 34.1013 178.407 26.727 173.181C24.3977 170.615 21.2543 167.256 19.0516 164.592C11.431 154.331 11.2873 154.129 8.01056 148.222C2.29166 136.706 2.17879 136.487 0 130.036C0 130.036 33.9645 121.355 64.0606 116.275C196.645 93.8958 267.916 110.091 259.3 126.981Z",\n fill: "url(#paint0_linear)"\n }\n ),\n /* @__PURE__ */ c(\n "path",\n {\n style: { mixBlendMode: "multiply" },\n d: "M201.855 191.49C227.12 176.326 247.164 153.824 259.317 126.981C246.354 149.597 176.855 167.342 157.181 172.103C133.97 177.712 117.07 179.357 118.335 191.572C120.022 208.034 179.995 202.9 201.855 191.49Z",\n fill: "url(#paint1_linear)"\n }\n ),\n /* @__PURE__ */ c(\n "path",\n {\n style: { mixBlendMode: "multiply" },\n d: "M237.68 90.1332C229.731 96.5123 216.86 97.3708 207.115 99.5119C174.225 106.729 141.444 113.231 109.117 122.866C44.2838 142.198 23.2587 165.29 26.727 173.18C24.3977 170.615 21.2543 167.256 19.0516 164.592C11.431 154.331 11.2873 154.129 8.01056 148.222C2.29166 136.705 2.17879 136.486 0 130.036C0 130.036 12.2621 113.084 52.7288 92.3633C98.9144 68.7147 150.798 58.6827 202.416 59.0076C211.404 59.0658 221.361 59.4215 229.741 62.9821C240.355 67.4936 248.786 81.2128 237.68 90.1332Z",\n fill: "url(#paint2_linear)"\n }\n ),\n /* @__PURE__ */ e1("defs", { children: [\n /* @__PURE__ */ e1(\n "linearGradient",\n {\n id: "paint0_linear",\n x1: "10.4801",\n y1: "171.623",\n x2: "256.494",\n y2: "109.646",\n gradientUnits: "userSpaceOnUse",\n children: [\n /* @__PURE__ */ c("stop", { stopColor: "#76B82A" }),\n /* @__PURE__ */ c("stop", { offset: "0.21", stopColor: "#9BC413" }),\n /* @__PURE__ */ c("stop", { offset: "0.38", stopColor: "#B6CD03" }),\n /* @__PURE__ */ c("stop", { offset: "0.48", stopColor: "#9FC513" }),\n /* @__PURE__ */ c("stop", { offset: "0.6", stopColor: "#83BB26" }),\n /* @__PURE__ */ c("stop", { offset: "0.73", stopColor: "#4FAC30" }),\n /* @__PURE__ */ c("stop", { offset: "0.85", stopColor: "#24A039" }),\n /* @__PURE__ */ c("stop", { offset: "0.94", stopColor: "#0A993E" }),\n /* @__PURE__ */ c("stop", { offset: "1", stopColor: "#009640" })\n ]\n }\n ),\n /* @__PURE__ */ e1(\n "linearGradient",\n {\n id: "paint1_linear",\n x1: "117.497",\n y1: "188.577",\n x2: "265.431",\n y2: "151.309",\n gradientUnits: "userSpaceOnUse",\n children: [\n /* @__PURE__ */ c("stop", { stopColor: "#FFCA00" }),\n /* @__PURE__ */ c("stop", { offset: "1", stopColor: "#F18500" })\n ]\n }\n ),\n /* @__PURE__ */ e1(\n "linearGradient",\n {\n id: "paint2_linear",\n x1: "2.131",\n y1: "138.482",\n x2: "242.752",\n y2: "77.8633",\n gradientUnits: "userSpaceOnUse",\n children: [\n /* @__PURE__ */ c("stop", { stopColor: "#008CCE", stopOpacity: "0.9" }),\n /* @__PURE__ */ c("stop", { offset: "1", stopColor: "#004A9B" })\n ]\n }\n )\n ] })\n ]\n }\n), $K = () => /* @__PURE__ */ e1(\n "svg",\n {\n width: "260",\n height: "260",\n viewBox: "0 0 260 260",\n fill: "none",\n xmlns: "http://www.w3.org/2000/svg",\n children: [\n /* @__PURE__ */ c(\n "path",\n {\n style: { mixBlendMode: "multiply" },\n d: "M259.278 30.7174C236.199 22.9685 212.832 40.2526 195.686 53.6367C146.119 92.283 104.438 146.063 86.561 206.898C82.2901 221.45 80.6166 236.416 79.2851 251.492C78.783 257.149 26.1414 253.096 25.4429 245.671C24.9299 240.382 25.2137 227.802 26.1705 220.66C34.9235 154.067 68.7859 100.137 108.876 48.3543C117.931 36.6619 134.732 18.6793 146.65 9.76988C147.926 8.74968 149.305 7.86456 150.764 7.1287C154.071 5.57528 251.722 1.42798 259.278 30.7174Z",\n fill: "url(#paint0_linear)"\n }\n ),\n /* @__PURE__ */ c(\n "path",\n {\n style: { mixBlendMode: "multiply" },\n d: "M150.975 7.05962C156.796 5.46254 251.827 1.84275 259.278 30.7174L259.343 30.7465V30.7684C259.467 31.0414 259.558 31.3285 259.613 31.6233C263 50.7118 243.969 102.622 210.54 152.59C179.693 198.716 158.324 214.225 135.852 202.921C116.778 193.019 118.732 164.319 134.204 121.714C148.792 81.5037 179.326 15.0632 150.975 7.05962Z",\n fill: "url(#paint1_linear)"\n }\n ),\n /* @__PURE__ */ c(\n "path",\n {\n style: { mixBlendMode: "multiply" },\n d: "M111.423 57.2237C120.216 64.998 65.4463 147.719 74.2429 228.362C76.3929 248.065 79.1105 249.142 79.2742 251.492C78.7722 257.149 26.4361 253.06 25.4321 245.671C18.7564 197.344 25.4321 90.7586 60.1784 47.8959C62.936 44.4434 108.498 54.6407 111.423 57.2237Z",\n fill: "url(#paint2_linear)"\n }\n ),\n /* @__PURE__ */ c(\n "path",\n {\n style: { mixBlendMode: "multiply" },\n d: "M111.423 57.2238C88.5037 53.6258 47.2999 164.402 41.9048 176.764C35.5965 191.316 -2.23855 185.466 0.104313 169.852C10.4871 100.625 29.0699 70.9753 60.1602 47.8814C60.4261 47.6643 60.7347 47.5057 61.066 47.4158C67.6144 45.735 103.03 53.5312 110.273 56.6053C110.834 56.8418 111.685 57.2638 111.423 57.2238Z",\n fill: "url(#paint3_linear)"\n }\n ),\n /* @__PURE__ */ e1("defs", { children: [\n /* @__PURE__ */ e1(\n "linearGradient",\n {\n id: "paint0_linear",\n x1: "23.6757",\n y1: "228.615",\n x2: "215.116",\n y2: "-30.965",\n gradientUnits: "userSpaceOnUse",\n children: [\n /* @__PURE__ */ c("stop", { stopColor: "#F3A6C9" }),\n /* @__PURE__ */ c("stop", { offset: "1", stopColor: "#991A81" })\n ]\n }\n ),\n /* @__PURE__ */ e1(\n "linearGradient",\n {\n id: "paint1_linear",\n x1: "102.715",\n y1: "157.695",\n x2: "230.042",\n y2: "-14.9516",\n gradientUnits: "userSpaceOnUse",\n children: [\n /* @__PURE__ */ c("stop", { stopColor: "#FFCA00" }),\n /* @__PURE__ */ c("stop", { offset: "1", stopColor: "#F18500" })\n ]\n }\n ),\n /* @__PURE__ */ e1(\n "linearGradient",\n {\n id: "paint2_linear",\n x1: "3.58178",\n y1: "211.909",\n x2: "126.644",\n y2: "45.0446",\n gradientUnits: "userSpaceOnUse",\n children: [\n /* @__PURE__ */ c("stop", { stopColor: "#004899" }),\n /* @__PURE__ */ c("stop", { offset: "0.02", stopColor: "#004B9C" }),\n /* @__PURE__ */ c("stop", { offset: "1", stopColor: "#00B3EC" })\n ]\n }\n ),\n /* @__PURE__ */ e1(\n "linearGradient",\n {\n id: "paint3_linear",\n x1: "-593973",\n y1: "-1.22878e+06",\n x2: "-543098",\n y2: "-1.22878e+06",\n gradientUnits: "userSpaceOnUse",\n children: [\n /* @__PURE__ */ c("stop", { stopColor: "#004899" }),\n /* @__PURE__ */ c("stop", { offset: "0.02", stopColor: "#004B9C" }),\n /* @__PURE__ */ c("stop", { offset: "1", stopColor: "#00B3EC" })\n ]\n }\n )\n ] })\n ]\n }\n), eJ = () => /* @__PURE__ */ e1(\n "svg",\n {\n width: "260",\n height: "260",\n viewBox: "0 0 260 260",\n fill: "none",\n xmlns: "http://www.w3.org/2000/svg",\n children: [\n /* @__PURE__ */ c(\n "path",\n {\n style: { mixBlendMode: "multiply" },\n d: "M13.8739 177.315C16.0271 179.765 18.5271 181.794 21.0882 183.814C46.6351 203.842 89.3631 209.252 116.941 204.283C130.795 201.786 139.797 191.064 137.341 174.732C136.037 166.075 126.947 161.577 118.75 161.691C99.1135 161.968 76.2719 160.115 54.8705 155.486C39.2404 152.107 21.2963 142.723 15.0032 135.051C14.1514 133.988 8.04696 127.731 20.869 123.183C20.869 123.183 11.3073 125.913 8.49924 132.34C7.14518 135.434 6.23507 139.831 6.16847 143.242C6.08246 147.681 6.21287 152.148 6.56526 156.585C6.98979 161.971 7.78059 167.465 10.3389 172.218C11.3258 174.042 12.5113 175.752 13.8739 177.315Z",\n fill: "url(#paint0_linear)"\n }\n ),\n /* @__PURE__ */ c(\n "path",\n {\n style: { mixBlendMode: "multiply" },\n d: "M0.0335741 133.386L0.000277424 133.28C-0.00546692 133.03 0.0781566 132.786 0.236129 132.592C0.175085 132.861 0.105717 133.122 0.0335741 133.386Z",\n fill: "url(#paint1_linear)"\n }\n ),\n /* @__PURE__ */ c(\n "path",\n {\n style: { mixBlendMode: "multiply" },\n d: "M234.723 219.574C211.87 205.512 193.282 200.734 154.045 191.522C115.484 182.463 4.32883 159.085 13.8489 177.185C14.2096 177.87 11.31 174.008 10.3389 172.207C7.76949 167.454 6.98979 161.96 6.56526 156.588C6.21287 152.149 6.08246 147.695 6.16847 143.245C6.23507 139.843 7.14518 135.436 8.49924 132.343C11.1658 126.238 19.9172 123.483 20.7941 123.219C35.8331 120.012 60.3617 118.991 98.5086 126.382C153.975 137.118 225.372 158.808 246.998 174.951C271.091 192.937 258.605 234.256 234.723 219.574Z",\n fill: "url(#paint2_linear)"\n }\n ),\n /* @__PURE__ */ c(\n "path",\n {\n style: { mixBlendMode: "multiply" },\n d: "M217.888 148.672C217.209 131.41 199.853 120.267 186.653 112.267C148.509 89.1401 102.318 75.0584 57.4593 78.5434C46.735 79.3758 36.2632 81.6594 26.0383 84.9586C-3.07136 94.351 -9.59474 60.3662 16.324 47.7551C19.7147 46.1069 28.1194 43.0991 33.0972 41.9281C79.4768 30.9763 123.792 39.8221 168.254 53.3683C178.293 56.4205 194.459 63.0216 203.388 68.6793C204.382 69.2691 205.312 69.961 206.162 70.7437C208.03 72.5445 235.411 136.272 217.888 148.672Z",\n fill: "url(#paint3_linear)"\n }\n ),\n /* @__PURE__ */ c(\n "path",\n {\n style: { mixBlendMode: "multiply" },\n d: "M206.262 70.8491C208.796 74.3259 235.164 136.441 217.889 148.664C217.889 148.68 217.889 148.7 217.889 148.716C217.738 148.867 217.57 148.999 217.389 149.11C205.58 156.172 166.334 156.633 124.769 147.071C86.3775 138.256 70.7003 127.992 72.5289 110.25C74.2908 95.1113 93.8166 89.1623 125.981 88.674C156.337 88.205 208.105 91.6901 206.262 70.8491Z",\n fill: "url(#paint4_linear)"\n }\n ),\n /* @__PURE__ */ e1("defs", { children: [\n /* @__PURE__ */ e1(\n "linearGradient",\n {\n id: "paint0_linear",\n x1: "2.84424",\n y1: "154.25",\n x2: "137.044",\n y2: "187.983",\n gradientUnits: "userSpaceOnUse",\n children: [\n /* @__PURE__ */ c("stop", { offset: "0.39", stopColor: "#007372" }),\n /* @__PURE__ */ c("stop", { offset: "0.68", stopColor: "#008E98" }),\n /* @__PURE__ */ c("stop", { offset: "1", stopColor: "#00AABE" })\n ]\n }\n ),\n /* @__PURE__ */ e1(\n "linearGradient",\n {\n id: "paint1_linear",\n x1: "-3.92801",\n y1: "131.277",\n x2: "-3.79782",\n y2: "131.332",\n gradientUnits: "userSpaceOnUse",\n children: [\n /* @__PURE__ */ c("stop", { stopColor: "#FFD800" }),\n /* @__PURE__ */ c("stop", { offset: "0.51", stopColor: "#F49600" }),\n /* @__PURE__ */ c("stop", { offset: "0.62", stopColor: "#F38F01" }),\n /* @__PURE__ */ c("stop", { offset: "0.78", stopColor: "#EF7B06" }),\n /* @__PURE__ */ c("stop", { offset: "0.96", stopColor: "#EA5B0C" })\n ]\n }\n ),\n /* @__PURE__ */ e1(\n "linearGradient",\n {\n id: "paint2_linear",\n x1: "7.64222",\n y1: "123.278",\n x2: "247.659",\n y2: "225.024",\n gradientUnits: "userSpaceOnUse",\n children: [\n /* @__PURE__ */ c("stop", { offset: "0.22", stopColor: "#58BBAF" }),\n /* @__PURE__ */ c("stop", { offset: "1", stopColor: "#00863E" })\n ]\n }\n ),\n /* @__PURE__ */ e1(\n "linearGradient",\n {\n id: "paint3_linear",\n x1: "2.65183",\n y1: "44.7205",\n x2: "233.257",\n y2: "109.578",\n gradientUnits: "userSpaceOnUse",\n children: [\n /* @__PURE__ */ c("stop", { stopColor: "#E0DD00" }),\n /* @__PURE__ */ c("stop", { offset: "1", stopColor: "#00803D" })\n ]\n }\n ),\n /* @__PURE__ */ e1(\n "linearGradient",\n {\n id: "paint4_linear",\n x1: "79.2024",\n y1: "82.1633",\n x2: "226.227",\n y2: "123.514",\n gradientUnits: "userSpaceOnUse",\n children: [\n /* @__PURE__ */ c("stop", { stopColor: "#95C11F" }),\n /* @__PURE__ */ c("stop", { offset: "1", stopColor: "#00803D" })\n ]\n }\n )\n ] })\n ]\n }\n), tJ = () => /* @__PURE__ */ e1(\n "svg",\n {\n width: "260",\n height: "260",\n viewBox: "0 0 260 260",\n fill: "none",\n xmlns: "http://www.w3.org/2000/svg",\n children: [\n /* @__PURE__ */ c(\n "path",\n {\n style: { mixBlendMode: "multiply" },\n d: "M87.5176 44.809C134.624 47.5707 159.566 59.4092 159.208 78.6669C158.684 95.105 137.839 105.975 103.299 109.399C63.0166 113.375 6.99126 113.523 20.3555 140.534C7.01263 119.08 -0.0399791 94.311 0.000170473 69.0461C0.000170473 67.1149 0.0613265 65.2094 0.141795 63.3103C0.425044 56.5124 8.58775 40.1966 87.5176 44.809Z",\n fill: "url(#paint0_linear)"\n }\n ),\n /* @__PURE__ */ c(\n "path",\n {\n style: { mixBlendMode: "multiply" },\n d: "M260 134.184C258.835 126.34 249.909 122.194 243.35 119.587C233.609 115.681 223.46 112.886 213.093 111.253C205.796 110.117 198.406 109.686 191.026 109.966C177.391 110.513 156.646 112.992 154.506 130.064C152.279 147.821 180.41 160.854 191.985 166.973C199.951 171.183 214.783 177.942 223.503 182.667C239.143 169.44 251.615 152.872 260 134.184Z",\n fill: "url(#paint1_linear)"\n }\n ),\n /* @__PURE__ */ c(\n "path",\n {\n style: { mixBlendMode: "multiply" },\n d: "M57.9182 188.046C59.2861 189.06 60.9341 190.257 62.5789 191.429C80.5499 203.804 101.281 211.584 122.956 214.089C122.956 214.089 140.501 210.133 137.907 201.829C135.432 193.914 121.35 189.131 97.8047 186.292C58.1564 181.499 56.6114 186.926 57.9182 188.046Z",\n fill: "url(#paint2_linear)"\n }\n ),\n /* @__PURE__ */ c(\n "path",\n {\n style: { mixBlendMode: "multiply" },\n d: "M258.671 137.058C242.728 164.987 191.013 155.608 155.427 150.522C33.4364 133.096 3.88843 101.414 3.88843 101.414C7.27775 115.242 12.8356 128.445 20.3555 140.534C30.1243 155.176 85.6636 177.872 168.562 184.795C196.485 187.132 211.008 187.18 218.507 186.697C235.618 173.545 249.379 156.537 258.671 137.058Z",\n fill: "url(#paint3_linear)"\n }\n ),\n /* @__PURE__ */ c(\n "path",\n {\n style: { mixBlendMode: "multiply" },\n d: "M218.575 186.62C218.575 186.569 218.559 186.562 218.546 186.62C218.546 186.62 218.546 186.598 218.546 186.601C210.473 191.217 193.311 196.173 177.394 199.476C128.55 209.644 70.278 193.94 57.9116 188.043C59.2796 189.057 60.9276 190.254 62.5723 191.426C84.9236 206.808 111.428 215.021 138.56 214.974C168.52 214.974 196.208 203.229 218.552 186.649L218.575 186.62Z",\n fill: "url(#paint4_linear)"\n }\n ),\n /* @__PURE__ */ e1("defs", { children: [\n /* @__PURE__ */ e1(\n "linearGradient",\n {\n id: "paint0_linear",\n x1: "159.649",\n y1: "92.2661",\n x2: "-4.34512",\n y2: "92.2661",\n gradientUnits: "userSpaceOnUse",\n children: [\n /* @__PURE__ */ c("stop", { stopColor: "#C5D300" }),\n /* @__PURE__ */ c("stop", { offset: "0.83", stopColor: "#009140" })\n ]\n }\n ),\n /* @__PURE__ */ e1(\n "linearGradient",\n {\n id: "paint1_linear",\n x1: "159.727",\n y1: "156.56",\n x2: "265.453",\n y2: "131.641",\n gradientUnits: "userSpaceOnUse",\n children: [\n /* @__PURE__ */ c("stop", { stopColor: "#007B3D" }),\n /* @__PURE__ */ c("stop", { offset: "1", stopColor: "#C3D200" })\n ]\n }\n ),\n /* @__PURE__ */ e1(\n "linearGradient",\n {\n id: "paint2_linear",\n x1: "57.6285",\n y1: "199.221",\n x2: "138.158",\n y2: "199.221",\n gradientUnits: "userSpaceOnUse",\n children: [\n /* @__PURE__ */ c("stop", { stopColor: "#95C11F" }),\n /* @__PURE__ */ c("stop", { offset: "0.04", stopColor: "#8DBE25" }),\n /* @__PURE__ */ c("stop", { offset: "0.31", stopColor: "#68AF2C" }),\n /* @__PURE__ */ c("stop", { offset: "0.93", stopColor: "#0B8A3C" }),\n /* @__PURE__ */ c("stop", { offset: "1", stopColor: "#00863E" })\n ]\n }\n ),\n /* @__PURE__ */ e1(\n "linearGradient",\n {\n id: "paint3_linear",\n x1: "3.18352",\n y1: "144.178",\n x2: "265.626",\n y2: "144.178",\n gradientUnits: "userSpaceOnUse",\n children: [\n /* @__PURE__ */ c("stop", { stopColor: "#008460" }),\n /* @__PURE__ */ c("stop", { offset: "0.68", stopColor: "#21A0B1" }),\n /* @__PURE__ */ c("stop", { offset: "1", stopColor: "#26A1B4" })\n ]\n }\n ),\n /* @__PURE__ */ e1(\n "linearGradient",\n {\n id: "paint4_linear",\n x1: "55.3624",\n y1: "200.783",\n x2: "217.76",\n y2: "200.783",\n gradientUnits: "userSpaceOnUse",\n children: [\n /* @__PURE__ */ c("stop", { stopColor: "#FFED00" }),\n /* @__PURE__ */ c("stop", { offset: "0.63", stopColor: "#5BAB28" }),\n /* @__PURE__ */ c("stop", { offset: "1", stopColor: "#00863E" })\n ]\n }\n )\n ] })\n ]\n }\n), oJ = () => /* @__PURE__ */ e1(\n "svg",\n {\n width: "260",\n height: "260",\n viewBox: "0 0 260 260",\n fill: "none",\n xmlns: "http://www.w3.org/2000/svg",\n children: [\n /* @__PURE__ */ c(\n "path",\n {\n style: { mixBlendMode: "multiply" },\n d: "M201.892 168.482C218.332 144.454 0 109.132 0 109.132C0.960111 129.803 15.6018 159.611 15.6018 159.489C25.1805 168.799 138.256 165.999 175.796 197.539C189.171 186.123 201.892 168.482 201.892 168.482Z",\n fill: "url(#paint0_linear)"\n }\n ),\n /* @__PURE__ */ c(\n "path",\n {\n style: { mixBlendMode: "multiply" },\n d: "M201.402 169.151C185.826 189.375 111.318 190.274 65.2619 190.015C53.1453 189.944 46.4053 194.767 47.5991 203.744C48.7928 212.721 59.5845 219.589 77.769 222.946C112.298 229.312 145.028 220.725 171.985 200.585C185.106 190.783 198.689 172.825 201.402 169.158V169.151Z",\n fill: "url(#paint1_linear)"\n }\n ),\n /* @__PURE__ */ c(\n "path",\n {\n style: { mixBlendMode: "multiply" },\n d: "M257.354 58.4697C240.501 110.517 11.5533 69.7382 0.0159302 108.792C0.0159302 109.01 0.0159302 109.132 0.0159302 109.132C0.940837 128.974 14.4688 157.236 15.5505 159.377C15.5862 159.344 15.6194 159.307 15.6497 159.269C40.1198 119.45 202.391 143.574 224.346 131.745C226.685 130.491 271.138 75.4765 257.354 58.4697Z",\n fill: "url(#paint2_linear)"\n }\n ),\n /* @__PURE__ */ c(\n "path",\n {\n style: { mixBlendMode: "multiply" },\n d: "M224.484 131.659C227.93 128.945 270.943 75.2365 257.355 58.4697C257.353 58.4538 257.353 58.4377 257.355 58.4217C257.249 58.2315 257.12 58.0552 256.97 57.8969C247.328 47.7005 208.933 36.4288 165.482 34.3517C125.374 32.4315 107.152 38.1922 104.034 56.1143C101.589 71.476 119.118 82.6933 150.561 92.0352C180.251 100.862 232.027 111.717 224.484 131.659Z",\n fill: "url(#paint3_linear)"\n }\n ),\n /* @__PURE__ */ e1("defs", { children: [\n /* @__PURE__ */ e1(\n "linearGradient",\n {\n id: "paint0_linear",\n x1: "225.658",\n y1: "153.325",\n x2: "87.3669",\n y2: "153.325",\n gradientUnits: "userSpaceOnUse",\n children: [\n /* @__PURE__ */ c("stop", { offset: "0.06", stopColor: "#008355" }),\n /* @__PURE__ */ c("stop", { offset: "0.68", stopColor: "#1FA4A3" })\n ]\n }\n ),\n /* @__PURE__ */ e1(\n "linearGradient",\n {\n id: "paint1_linear",\n x1: "201.402",\n y1: "197.078",\n x2: "47.4647",\n y2: "197.078",\n gradientUnits: "userSpaceOnUse",\n children: [\n /* @__PURE__ */ c("stop", { stopColor: "#009640" }),\n /* @__PURE__ */ c("stop", { offset: "1", stopColor: "#D8DA00" })\n ]\n }\n ),\n /* @__PURE__ */ e1(\n "linearGradient",\n {\n id: "paint2_linear",\n x1: "-3.40846",\n y1: "108.917",\n x2: "263.333",\n y2: "108.917",\n gradientUnits: "userSpaceOnUse",\n children: [\n /* @__PURE__ */ c("stop", { stopColor: "#00875C" }),\n /* @__PURE__ */ c("stop", { offset: "0.83", stopColor: "#86BC25" })\n ]\n }\n ),\n /* @__PURE__ */ e1(\n "linearGradient",\n {\n id: "paint3_linear",\n x1: "103.826",\n y1: "82.8277",\n x2: "260.001",\n y2: "82.8277",\n gradientUnits: "userSpaceOnUse",\n children: [\n /* @__PURE__ */ c("stop", { stopColor: "#B9CE00" }),\n /* @__PURE__ */ c("stop", { offset: "0.71", stopColor: "#007B3D" })\n ]\n }\n )\n ] })\n ]\n }\n), rJ = () => /* @__PURE__ */ e1(\n "svg",\n {\n width: "260",\n height: "260",\n viewBox: "0 0 260 260",\n fill: "none",\n xmlns: "http://www.w3.org/2000/svg",\n children: [\n /* @__PURE__ */ c(\n "path",\n {\n style: { mixBlendMode: "multiply" },\n d: "M223.503 150.828C214.863 161.68 204.897 171.407 193.836 179.779C184.527 172.708 172.931 168.508 161.943 164.807C146.384 159.556 130.385 155.606 114.337 152.135C96.4633 148.27 78.4386 145.088 60.3524 142.389C42.8903 139.782 12.7497 136.677 9.56161 134.021C4.81794 130.067 -1.35837 74.7941 0.264874 76.3804C12.2178 88.0659 237.741 134.553 223.503 150.828Z",\n fill: "url(#paint0_linear)"\n }\n ),\n /* @__PURE__ */ c(\n "path",\n {\n style: { mixBlendMode: "multiply" },\n d: "M142.034 206.154C174.183 196.416 202.602 177.113 223.503 150.816C202.878 172.222 121.092 172.514 98.0189 172.272C70.7897 172.007 51.649 169.133 49.6446 182.967C46.9453 201.653 114.673 212.68 142.034 206.154Z",\n fill: "url(#paint1_linear)"\n }\n ),\n /* @__PURE__ */ c(\n "path",\n {\n style: { mixBlendMode: "multiply" },\n d: "M259.996 76.2329C259.75 61.4393 246.93 52.0718 223.248 52.0011C174.182 51.8597 17.1306 65.0393 0.231053 76.4112C0.206459 76.4297 0.172641 76.4112 0.132675 76.4112C-0.921816 78.2681 4.59044 126.861 9.10968 133.495L9.56161 133.846C6.37354 128.708 144.269 119.464 221.145 106.066C250.865 100.883 260.235 90.5285 259.996 76.2329Z",\n fill: "url(#paint2_linear)"\n }\n ),\n /* @__PURE__ */ e1("defs", { children: [\n /* @__PURE__ */ e1(\n "linearGradient",\n {\n id: "paint0_linear",\n x1: "0.000482516",\n y1: "128.063",\n x2: "224.155",\n y2: "128.063",\n gradientUnits: "userSpaceOnUse",\n children: [\n /* @__PURE__ */ c("stop", { offset: "0.18", stopColor: "#007164" }),\n /* @__PURE__ */ c("stop", { offset: "1", stopColor: "#00ACA1" })\n ]\n }\n ),\n /* @__PURE__ */ e1(\n "linearGradient",\n {\n id: "paint1_linear",\n x1: "49.5677",\n y1: "179.435",\n x2: "223.51",\n y2: "179.435",\n gradientUnits: "userSpaceOnUse",\n children: [\n /* @__PURE__ */ c("stop", { stopColor: "#CFD600" }),\n /* @__PURE__ */ c("stop", { offset: "1", stopColor: "#009640" })\n ]\n }\n ),\n /* @__PURE__ */ e1(\n "linearGradient",\n {\n id: "paint2_linear",\n x1: "75.0046",\n y1: "93.3753",\n x2: "194.279",\n y2: "92.0287",\n gradientUnits: "userSpaceOnUse",\n children: [\n /* @__PURE__ */ c("stop", { stopColor: "#00833E" }),\n /* @__PURE__ */ c("stop", { offset: "0.25", stopColor: "#209038" }),\n /* @__PURE__ */ c("stop", { offset: "0.78", stopColor: "#71B228" }),\n /* @__PURE__ */ c("stop", { offset: "0.97", stopColor: "#8EBE22" }),\n /* @__PURE__ */ c("stop", { offset: "1", stopColor: "#92C020" })\n ]\n }\n )\n ] })\n ]\n }\n), nJ = () => /* @__PURE__ */ e1(\n "svg",\n {\n width: "260",\n height: "260",\n viewBox: "0 0 260 260",\n fill: "none",\n xmlns: "http://www.w3.org/2000/svg",\n children: [\n /* @__PURE__ */ c(\n "path",\n {\n style: { mixBlendMode: "multiply" },\n d: "M223.528 227.464C201.068 223.478 165.417 215.509 168.896 190.07C171.574 170.485 203.979 164.775 217.52 161.618C228.271 159.118 256.944 155.663 259.859 151.097C259.859 151.097 259.859 151.097 259.859 151.121C259.908 152.246 259.944 153.376 259.968 154.512V154.713C259.992 155.78 260 156.851 260 157.934C260 182.415 254.496 205.338 244.901 225.008C244.776 225.253 244.651 225.503 244.522 225.749C243.363 227.987 235.595 229.606 223.528 227.464Z",\n fill: "url(#paint0_linear)"\n }\n ),\n /* @__PURE__ */ c(\n "path",\n {\n style: { mixBlendMode: "multiply" },\n d: "M259.968 154.713V154.512C259.968 153.734 259.927 152.957 259.899 152.184C259.93 151.839 259.918 151.492 259.863 151.149C255.539 137.173 190.341 120.548 146.545 112.265C91.1723 101.813 7.73885 90.8 11.6768 69.2622C8.58844 74.2148 4.38073 83.7577 3.30968 89.5599C-2.56903 121.53 3.358 129.539 7.8234 133.155L8.06097 133.348C56.2624 155.635 273.408 160.729 244.321 225.958L244.297 226.014C244.381 225.925 244.456 225.827 244.518 225.72L244.897 224.98C254.492 205.31 259.996 182.387 259.996 157.906C260 156.835 259.992 155.78 259.968 154.713Z",\n fill: "url(#paint1_linear)"\n }\n ),\n /* @__PURE__ */ c(\n "path",\n {\n style: { mixBlendMode: "multiply" },\n d: "M256.251 63.2587C252.132 43.7744 222.046 35.979 186.895 32.4639C87.6813 22.5425 34.036 44.2656 12.764 67.6033C9.10386 72.9706 5.06124 82.5859 3.31373 89.5599C-4.39705 120.363 3.18891 128.967 7.51741 132.889C5.47597 130.183 5.17801 127.961 4.94044 125.432C2.27086 97.4357 104.605 80.9955 213.143 101.957C252.962 109.652 260.374 82.747 256.251 63.2587Z",\n fill: "url(#paint2_linear)"\n }\n ),\n /* @__PURE__ */ e1("defs", { children: [\n /* @__PURE__ */ e1(\n "linearGradient",\n {\n id: "paint0_linear",\n x1: "168.659",\n y1: "189.784",\n x2: "265.198",\n y2: "189.784",\n gradientUnits: "userSpaceOnUse",\n children: [\n /* @__PURE__ */ c("stop", { stopColor: "#009640" }),\n /* @__PURE__ */ c("stop", { offset: "0.76", stopColor: "#00703B" })\n ]\n }\n ),\n /* @__PURE__ */ e1(\n "linearGradient",\n {\n id: "paint1_linear",\n x1: "20.817",\n y1: "147.646",\n x2: "217.464",\n y2: "147.646",\n gradientUnits: "userSpaceOnUse",\n children: [\n /* @__PURE__ */ c("stop", { stopColor: "#CFD600" }),\n /* @__PURE__ */ c("stop", { offset: "1", stopColor: "#00833E" })\n ]\n }\n ),\n /* @__PURE__ */ e1(\n "linearGradient",\n {\n id: "paint2_linear",\n x1: "8.16568",\n y1: "81.4424",\n x2: "264.441",\n y2: "81.4424",\n gradientUnits: "userSpaceOnUse",\n children: [\n /* @__PURE__ */ c("stop", { stopColor: "#00833E" }),\n /* @__PURE__ */ c("stop", { offset: "0.21", stopColor: "#209038" }),\n /* @__PURE__ */ c("stop", { offset: "0.68", stopColor: "#71B228" }),\n /* @__PURE__ */ c("stop", { offset: "0.84", stopColor: "#8EBE22" })\n ]\n }\n )\n ] })\n ]\n }\n), iJ = () => /* @__PURE__ */ e1(\n "svg",\n {\n width: "260",\n height: "260",\n viewBox: "0 0 260 260",\n fill: "none",\n xmlns: "http://www.w3.org/2000/svg",\n children: [\n /* @__PURE__ */ c(\n "path",\n {\n d: "M97.6669 79.9939C102.708 96.0342 124.121 94.2662 147.02 92.3897C175.022 90.0894 238.996 90.0072 258.599 113.422L257.82 112.344C239.924 87.8479 216.015 68.38 188.401 55.8202C167.448 47.3975 144.953 49.4645 130.033 53.5954C115.114 57.7262 92.616 63.9241 97.6669 79.9939Z",\n fill: "url(#paint0_linear)"\n }\n ),\n /* @__PURE__ */ c(\n "path",\n {\n style: { mixBlendMode: "multiply" },\n d: "M11.8298 129.617C7.64306 130.445 -2.80727 172.907 0.712319 177.126C0.712319 177.126 18.2215 179.019 51.9781 176.255C163.728 167.103 273.666 139.121 258.612 113.428C258.356 113.074 258.099 112.715 257.836 112.357C250.182 101.885 241.399 92.2874 231.645 83.7371C211.306 132.344 16.8117 129.617 11.8298 129.617Z",\n fill: "url(#paint1_linear)"\n }\n ),\n /* @__PURE__ */ c(\n "path",\n {\n style: { mixBlendMode: "multiply" },\n d: "M207.836 170.317C205.138 147.159 172.492 150.001 127.247 145.611C102.271 143.186 34.1271 137.77 11.626 129.689C7.47548 131.713 -1.99883 169.91 0.37714 176.499L0.676191 177.077L0.71234 177.126V177.146L0.748488 177.218C13.6537 201.826 124.667 213.63 165.643 205.884C194.043 200.511 209.548 185.026 207.836 170.317Z",\n fill: "url(#paint2_linear)"\n }\n ),\n /* @__PURE__ */ e1("defs", { children: [\n /* @__PURE__ */ e1(\n "linearGradient",\n {\n id: "paint0_linear",\n x1: "96.9407",\n y1: "81.7127",\n x2: "258.599",\n y2: "81.7127",\n gradientUnits: "userSpaceOnUse",\n children: [\n /* @__PURE__ */ c("stop", { stopColor: "#13A538" }),\n /* @__PURE__ */ c("stop", { offset: "1", stopColor: "#ADC90E" })\n ]\n }\n ),\n /* @__PURE__ */ e1(\n "linearGradient",\n {\n id: "paint1_linear",\n x1: "-0.000800403",\n y1: "130.747",\n x2: "259.989",\n y2: "130.747",\n gradientUnits: "userSpaceOnUse",\n children: [\n /* @__PURE__ */ c("stop", { offset: "0.25", stopColor: "#009BAC" }),\n /* @__PURE__ */ c("stop", { offset: "0.63", stopColor: "#009996" }),\n /* @__PURE__ */ c("stop", { offset: "1", stopColor: "#007F59" })\n ]\n }\n ),\n /* @__PURE__ */ e1(\n "linearGradient",\n {\n id: "paint2_linear",\n x1: "17.0418",\n y1: "207.945",\n x2: "182.798",\n y2: "120.04",\n gradientUnits: "userSpaceOnUse",\n children: [\n /* @__PURE__ */ c("stop", { offset: "0.58", stopColor: "#007431" }),\n /* @__PURE__ */ c("stop", { offset: "1", stopColor: "#A5C715" })\n ]\n }\n )\n ] })\n ]\n }\n), aJ = () => /* @__PURE__ */ e1(\n "svg",\n {\n width: "260",\n height: "260",\n viewBox: "0 0 260 260",\n fill: "none",\n xmlns: "http://www.w3.org/2000/svg",\n children: [\n /* @__PURE__ */ c(\n "path",\n {\n style: { mixBlendMode: "multiply" },\n d: "M259.3 125.981C254.276 137.061 247.883 147.468 240.272 156.96C197.754 138.811 34.1013 177.407 26.727 172.18C24.3977 169.615 21.2543 166.256 19.0516 163.592C11.431 153.331 11.2873 153.129 8.01056 147.222C2.29166 135.705 2.17879 135.486 0 129.035C0 129.035 33.9645 120.355 64.0606 115.275C196.645 92.8956 267.916 109.091 259.3 125.981Z",\n fill: "url(#paint0_linear)"\n }\n ),\n /* @__PURE__ */ c(\n "path",\n {\n style: { mixBlendMode: "multiply" },\n d: "M201.855 190.49C227.12 175.327 247.164 152.824 259.317 125.981C246.354 148.597 176.855 166.342 157.181 171.103C133.97 176.712 117.07 178.358 118.335 190.572C120.022 207.034 179.995 201.9 201.855 190.49Z",\n fill: "url(#paint1_linear)"\n }\n ),\n /* @__PURE__ */ c(\n "path",\n {\n style: { mixBlendMode: "multiply" },\n d: "M237.68 89.1332C229.731 95.5123 216.86 96.3708 207.115 98.5119C174.225 105.729 141.444 112.231 109.117 121.866C44.2838 141.198 23.2587 164.29 26.727 172.18C24.3977 169.615 21.2543 166.256 19.0516 163.592C11.431 153.331 11.2873 153.129 8.01056 147.222C2.29166 135.705 2.17879 135.486 0 129.036C0 129.036 12.2621 112.084 52.7288 91.3633C98.9144 67.7147 150.798 57.6827 202.416 58.0076C211.404 58.0658 221.361 58.4215 229.741 61.9821C240.355 66.4936 248.786 80.2128 237.68 89.1332Z",\n fill: "url(#paint2_linear)"\n }\n ),\n /* @__PURE__ */ e1("defs", { children: [\n /* @__PURE__ */ e1(\n "linearGradient",\n {\n id: "paint0_linear",\n x1: "10.4798",\n y1: "170.624",\n x2: "256.494",\n y2: "108.647",\n gradientUnits: "userSpaceOnUse",\n children: [\n /* @__PURE__ */ c("stop", { stopColor: "#00783D" }),\n /* @__PURE__ */ c("stop", { offset: "0.12", stopColor: "#077B3C" }),\n /* @__PURE__ */ c("stop", { offset: "0.3", stopColor: "#1A8537" }),\n /* @__PURE__ */ c("stop", { offset: "0.51", stopColor: "#399431" }),\n /* @__PURE__ */ c("stop", { offset: "0.75", stopColor: "#64A928" }),\n /* @__PURE__ */ c("stop", { offset: "1", stopColor: "#9AC31C" })\n ]\n }\n ),\n /* @__PURE__ */ e1(\n "linearGradient",\n {\n id: "paint1_linear",\n x1: "117.5",\n y1: "187.577",\n x2: "265.434",\n y2: "150.309",\n gradientUnits: "userSpaceOnUse",\n children: [\n /* @__PURE__ */ c("stop", { stopColor: "#00853E" }),\n /* @__PURE__ */ c("stop", { offset: "1", stopColor: "#D1D700" })\n ]\n }\n ),\n /* @__PURE__ */ e1(\n "linearGradient",\n {\n id: "paint2_linear",\n x1: "2.1307",\n y1: "137.483",\n x2: "242.752",\n y2: "76.8643",\n gradientUnits: "userSpaceOnUse",\n children: [\n /* @__PURE__ */ c("stop", { stopColor: "#318439" }),\n /* @__PURE__ */ c("stop", { offset: "0.4", stopColor: "#2C9867" }),\n /* @__PURE__ */ c("stop", { offset: "1", stopColor: "#25B3A7" })\n ]\n }\n )\n ] })\n ]\n }\n), sJ = () => /* @__PURE__ */ e1(\n "svg",\n {\n width: "260",\n height: "260",\n viewBox: "0 0 260 260",\n fill: "none",\n xmlns: "http://www.w3.org/2000/svg",\n children: [\n /* @__PURE__ */ c(\n "path",\n {\n style: { mixBlendMode: "multiply" },\n d: "M259.278 30.7174C236.199 22.9685 212.832 40.2526 195.686 53.6367C146.119 92.283 104.438 146.063 86.561 206.898C82.2901 221.45 80.6166 236.416 79.2851 251.492C78.783 257.149 26.1414 253.096 25.4429 245.671C24.9299 240.382 25.2137 227.802 26.1705 220.66C34.9235 154.067 68.7859 100.137 108.876 48.3543C117.931 36.6619 134.732 18.6793 146.65 9.76988C147.926 8.74968 149.305 7.86456 150.764 7.1287C154.071 5.57528 251.722 1.42798 259.278 30.7174Z",\n fill: "url(#paint0_linear)"\n }\n ),\n /* @__PURE__ */ c(\n "path",\n {\n style: { mixBlendMode: "multiply" },\n d: "M150.975 7.05962C156.796 5.46254 251.827 1.84275 259.278 30.7174L259.343 30.7465V30.7684C259.467 31.0414 259.558 31.3285 259.613 31.6233C263 50.7118 243.969 102.622 210.54 152.59C179.693 198.716 158.324 214.225 135.852 202.921C116.778 193.019 118.732 164.319 134.204 121.714C148.792 81.5037 179.326 15.0632 150.975 7.05962Z",\n fill: "url(#paint1_linear)"\n }\n ),\n /* @__PURE__ */ c(\n "path",\n {\n style: { mixBlendMode: "multiply" },\n d: "M111.423 57.2237C120.216 64.998 65.4463 147.719 74.2429 228.362C76.3929 248.065 79.1105 249.142 79.2742 251.492C78.7722 257.149 26.4361 253.06 25.4321 245.671C18.7564 197.344 25.4321 90.7586 60.1784 47.8959C62.936 44.4434 108.498 54.6407 111.423 57.2237Z",\n fill: "url(#paint2_linear)"\n }\n ),\n /* @__PURE__ */ c(\n "path",\n {\n style: { mixBlendMode: "multiply" },\n d: "M111.423 57.2238C88.5037 53.6258 47.2999 164.402 41.9048 176.764C35.5965 191.316 -2.23855 185.466 0.104313 169.852C10.4871 100.625 29.0699 70.9753 60.1602 47.8814C60.4261 47.6643 60.7347 47.5057 61.066 47.4158C67.6144 45.735 103.03 53.5312 110.273 56.6053C110.834 56.8418 111.685 57.2638 111.423 57.2238Z",\n fill: "url(#paint3_linear)"\n }\n ),\n /* @__PURE__ */ e1("defs", { children: [\n /* @__PURE__ */ e1(\n "linearGradient",\n {\n id: "paint0_linear",\n x1: "24.3356",\n y1: "232.114",\n x2: "215.776",\n y2: "-27.4664",\n gradientUnits: "userSpaceOnUse",\n children: [\n /* @__PURE__ */ c("stop", { stopColor: "#00853E" }),\n /* @__PURE__ */ c("stop", { offset: "1", stopColor: "#C8D400" })\n ]\n }\n ),\n /* @__PURE__ */ e1(\n "linearGradient",\n {\n id: "paint1_linear",\n x1: "103.372",\n y1: "161.197",\n x2: "230.7",\n y2: "-11.4501",\n gradientUnits: "userSpaceOnUse",\n children: [\n /* @__PURE__ */ c("stop", { stopColor: "#007D71" }),\n /* @__PURE__ */ c("stop", { offset: "0.16", stopColor: "#0F877A" }),\n /* @__PURE__ */ c("stop", { offset: "1", stopColor: "#59BAAB" })\n ]\n }\n ),\n /* @__PURE__ */ e1(\n "linearGradient",\n {\n id: "paint2_linear",\n x1: "-422633",\n y1: "-1.57532e+06",\n x2: "-371456",\n y2: "-1.57532e+06",\n gradientUnits: "userSpaceOnUse",\n children: [\n /* @__PURE__ */ c("stop", { stopColor: "#00853E" }),\n /* @__PURE__ */ c("stop", { offset: "1", stopColor: "#C8D400" })\n ]\n }\n ),\n /* @__PURE__ */ e1(\n "linearGradient",\n {\n id: "paint3_linear",\n x1: "-3.06925",\n y1: "158.081",\n x2: "94.893",\n y2: "25.2513",\n gradientUnits: "userSpaceOnUse",\n children: [\n /* @__PURE__ */ c("stop", { offset: "0.26", stopColor: "#00783D" }),\n /* @__PURE__ */ c("stop", { offset: "0.37", stopColor: "#077C3C" }),\n /* @__PURE__ */ c("stop", { offset: "0.52", stopColor: "#1A8539" }),\n /* @__PURE__ */ c("stop", { offset: "0.7", stopColor: "#399633" }),\n /* @__PURE__ */ c("stop", { offset: "0.9", stopColor: "#64AC2C" }),\n /* @__PURE__ */ c("stop", { offset: "1", stopColor: "#7DB928" })\n ]\n }\n )\n ] })\n ]\n }\n), cJ = () => /* @__PURE__ */ e1(\n "svg",\n {\n width: "260",\n height: "260",\n viewBox: "0 0 260 260",\n fill: "none",\n xmlns: "http://www.w3.org/2000/svg",\n children: [\n /* @__PURE__ */ c(\n "path",\n {\n style: { mixBlendMode: "multiply" },\n d: "M13.8739 176.315C16.0271 178.765 18.5271 180.794 21.0882 182.814C46.6351 202.842 89.3631 208.252 116.941 203.283C130.795 200.786 139.797 190.064 137.341 173.732C136.037 165.075 126.947 160.577 118.75 160.691C99.1135 160.968 76.2719 159.115 54.8705 154.486C39.2404 151.107 21.2963 141.723 15.0032 134.051C14.1514 132.988 8.04696 126.731 20.869 122.183C20.869 122.183 11.3073 124.913 8.49924 131.34C7.14518 134.434 6.23507 138.831 6.16847 142.242C6.08246 146.681 6.21287 151.148 6.56526 155.585C6.98979 160.971 7.78059 166.465 10.3389 171.218C11.3258 173.042 12.5113 174.752 13.8739 176.315Z",\n fill: "url(#paint0_linear)"\n }\n ),\n /* @__PURE__ */ c(\n "path",\n {\n style: { mixBlendMode: "multiply" },\n d: "M0.0335741 132.386L0.000277424 132.28C-0.00546692 132.03 0.0781566 131.786 0.236129 131.592C0.175085 131.861 0.105717 132.122 0.0335741 132.386Z",\n fill: "url(#paint1_linear)"\n }\n ),\n /* @__PURE__ */ c(\n "path",\n {\n style: { mixBlendMode: "multiply" },\n d: "M234.723 218.574C211.87 204.512 193.282 199.734 154.045 190.522C115.484 181.463 4.32883 158.085 13.8489 176.185C14.2096 176.87 11.31 173.008 10.3389 171.207C7.76949 166.454 6.98979 160.96 6.56526 155.588C6.21287 151.149 6.08246 146.695 6.16847 142.245C6.23507 138.843 7.14518 134.436 8.49924 131.343C11.1658 125.238 19.9172 122.483 20.7941 122.219C35.8331 119.012 60.3617 117.991 98.5086 125.382C153.975 136.118 225.372 157.808 246.998 173.951C271.091 191.937 258.605 233.256 234.723 218.574Z",\n fill: "url(#paint2_linear)"\n }\n ),\n /* @__PURE__ */ c(\n "path",\n {\n style: { mixBlendMode: "multiply" },\n d: "M217.888 147.672C217.209 130.41 199.853 119.267 186.653 111.267C148.509 88.1401 102.318 74.0584 57.4593 77.5434C46.735 78.3758 36.2632 80.6594 26.0383 83.9586C-3.07136 93.351 -9.59474 59.3662 16.324 46.7551C19.7147 45.1069 28.1194 42.0991 33.0972 40.9281C79.4768 29.9763 123.792 38.8221 168.254 52.3683C178.293 55.4205 194.459 62.0216 203.388 67.6793C204.382 68.2691 205.312 68.961 206.162 69.7437C208.03 71.5445 235.411 135.272 217.888 147.672Z",\n fill: "url(#paint3_linear)"\n }\n ),\n /* @__PURE__ */ c(\n "path",\n {\n style: { mixBlendMode: "multiply" },\n d: "M206.262 69.8491C208.796 73.3259 235.164 135.441 217.889 147.664C217.889 147.68 217.889 147.7 217.889 147.716C217.738 147.867 217.57 147.999 217.389 148.11C205.58 155.172 166.334 155.633 124.769 146.071C86.3775 137.256 70.7003 126.992 72.5289 109.25C74.2908 94.1113 93.8166 88.1623 125.981 87.674C156.337 87.205 208.105 90.6901 206.262 69.8491Z",\n fill: "url(#paint4_linear)"\n }\n ),\n /* @__PURE__ */ e1("defs", { children: [\n /* @__PURE__ */ e1(\n "linearGradient",\n {\n id: "paint0_linear",\n x1: "2.71821",\n y1: "152.872",\n x2: "136.921",\n y2: "186.606",\n gradientUnits: "userSpaceOnUse",\n children: [\n /* @__PURE__ */ c("stop", { stopColor: "#582582" }),\n /* @__PURE__ */ c("stop", { offset: "0.01", stopColor: "#5D2582" }),\n /* @__PURE__ */ c("stop", { offset: "0.03", stopColor: "#6E2381" }),\n /* @__PURE__ */ c("stop", { offset: "0.19", stopColor: "#742682" }),\n /* @__PURE__ */ c("stop", { offset: "0.4", stopColor: "#842D86" }),\n /* @__PURE__ */ c("stop", { offset: "0.64", stopColor: "#A0398C" }),\n /* @__PURE__ */ c("stop", { offset: "0.9", stopColor: "#C64A94" }),\n /* @__PURE__ */ c("stop", { offset: "1", stopColor: "#D65198" })\n ]\n }\n ),\n /* @__PURE__ */ e1(\n "linearGradient",\n {\n id: "paint1_linear",\n x1: "-2.39362",\n y1: "130.956",\n x2: "-2.26343",\n y2: "131.011",\n gradientUnits: "userSpaceOnUse",\n children: [\n /* @__PURE__ */ c("stop", { stopColor: "#FFD800" }),\n /* @__PURE__ */ c("stop", { offset: "0.51", stopColor: "#F49600" }),\n /* @__PURE__ */ c("stop", { offset: "0.62", stopColor: "#F38F01" }),\n /* @__PURE__ */ c("stop", { offset: "0.78", stopColor: "#EF7B06" }),\n /* @__PURE__ */ c("stop", { offset: "0.96", stopColor: "#EA5B0C" })\n ]\n }\n ),\n /* @__PURE__ */ e1(\n "linearGradient",\n {\n id: "paint2_linear",\n x1: "9.17661",\n y1: "122.957",\n x2: "249.194",\n y2: "224.703",\n gradientUnits: "userSpaceOnUse",\n children: [\n /* @__PURE__ */ c("stop", { stopColor: "#CC8ABB" }),\n /* @__PURE__ */ c("stop", { offset: "1", stopColor: "#7E559E" })\n ]\n }\n ),\n /* @__PURE__ */ e1(\n "linearGradient",\n {\n id: "paint3_linear",\n x1: "2.63526",\n y1: "45.0663",\n x2: "233.24",\n y2: "109.924",\n gradientUnits: "userSpaceOnUse",\n children: [\n /* @__PURE__ */ c("stop", { offset: "0.15", stopColor: "#EE7BAE" }),\n /* @__PURE__ */ c("stop", { offset: "1", stopColor: "#941C81" })\n ]\n }\n ),\n /* @__PURE__ */ e1(\n "linearGradient",\n {\n id: "paint4_linear",\n x1: "79.1831",\n y1: "82.5083",\n x2: "226.211",\n y2: "123.86",\n gradientUnits: "userSpaceOnUse",\n children: [\n /* @__PURE__ */ c("stop", { stopColor: "#EC619F" }),\n /* @__PURE__ */ c("stop", { offset: "1", stopColor: "#7A2182" })\n ]\n }\n )\n ] })\n ]\n }\n), lJ = () => /* @__PURE__ */ e1(\n "svg",\n {\n width: "260",\n height: "260",\n viewBox: "0 0 260 260",\n fill: "none",\n xmlns: "http://www.w3.org/2000/svg",\n children: [\n /* @__PURE__ */ c(\n "path",\n {\n style: { mixBlendMode: "multiply" },\n d: "M87.5176 44.8117C134.624 47.5734 159.566 59.4119 159.209 78.6696C158.687 95.1077 137.839 105.977 103.299 109.392C63.0166 113.377 6.99127 113.525 20.3555 140.537C7.01215 119.083 -0.0404927 94.3138 0.000174886 69.0488C0.000174886 67.1176 0.0613309 65.2121 0.141799 63.313C0.425048 56.5151 8.58776 40.1896 87.5176 44.8117Z",\n fill: "url(#paint0_linear)"\n }\n ),\n /* @__PURE__ */ c(\n "path",\n {\n style: { mixBlendMode: "multiply" },\n d: "M260 134.186C258.835 126.342 249.909 122.197 243.35 119.589C233.609 115.684 223.46 112.889 213.093 111.256C205.796 110.122 198.406 109.69 191.026 109.969C177.391 110.516 156.646 112.994 154.506 130.066C152.288 147.814 180.42 160.841 191.995 166.956C199.961 171.166 214.793 177.926 223.512 182.651C239.147 169.429 251.616 152.867 260 134.186Z",\n fill: "url(#paint1_linear)"\n }\n ),\n /* @__PURE__ */ c(\n "path",\n {\n style: { mixBlendMode: "multiply" },\n d: "M57.9182 188.049C59.2861 189.066 60.9341 190.26 62.5789 191.432C80.5499 203.806 101.281 211.587 122.956 214.091C122.956 214.091 140.501 210.139 137.907 201.835C135.432 193.92 121.35 189.133 97.8047 186.294C58.1564 181.515 56.6114 186.932 57.9182 188.049Z",\n fill: "url(#paint2_linear)"\n }\n ),\n /* @__PURE__ */ c(\n "path",\n {\n style: { mixBlendMode: "multiply" },\n d: "M258.671 137.061C242.728 164.99 191.013 155.61 155.427 150.525C33.4364 133.099 3.88843 101.417 3.88843 101.417C7.27775 115.244 12.8356 128.448 20.3555 140.537C30.1243 155.182 85.6636 177.874 168.562 184.798C196.485 187.135 211.008 187.183 218.507 186.7C235.618 173.548 249.38 156.54 258.671 137.061Z",\n fill: "url(#paint3_linear)"\n }\n ),\n /* @__PURE__ */ c(\n "path",\n {\n style: { mixBlendMode: "multiply" },\n d: "M218.575 186.623C218.575 186.575 218.559 186.568 218.546 186.623C218.546 186.623 218.546 186.6 218.546 186.604C210.473 191.219 193.311 196.176 177.394 199.479C128.55 209.647 70.278 193.942 57.9116 188.046C59.2796 189.063 60.9276 190.257 62.5723 191.428C84.9197 206.815 111.422 215.033 138.554 214.99C168.514 214.99 196.201 203.228 218.536 186.639L218.575 186.623Z",\n fill: "url(#paint4_linear)"\n }\n ),\n /* @__PURE__ */ e1("defs", { children: [\n /* @__PURE__ */ e1(\n "linearGradient",\n {\n id: "paint0_linear",\n x1: "159.649",\n y1: "92.2688",\n x2: "-4.34512",\n y2: "92.2688",\n gradientUnits: "userSpaceOnUse",\n children: [\n /* @__PURE__ */ c("stop", { stopColor: "#EC619F" }),\n /* @__PURE__ */ c("stop", { offset: "1", stopColor: "#971B81" })\n ]\n }\n ),\n /* @__PURE__ */ e1(\n "linearGradient",\n {\n id: "paint1_linear",\n x1: "159.727",\n y1: "156.563",\n x2: "265.453",\n y2: "131.644",\n gradientUnits: "userSpaceOnUse",\n children: [\n /* @__PURE__ */ c("stop", { stopColor: "#6C2383" }),\n /* @__PURE__ */ c("stop", { offset: "1", stopColor: "#EC619F" })\n ]\n }\n ),\n /* @__PURE__ */ e1(\n "linearGradient",\n {\n id: "paint2_linear",\n x1: "57.6285",\n y1: "199.224",\n x2: "138.158",\n y2: "199.224",\n gradientUnits: "userSpaceOnUse",\n children: [\n /* @__PURE__ */ c("stop", { stopColor: "#F088B6" }),\n /* @__PURE__ */ c("stop", { offset: "0.87", stopColor: "#871F82" })\n ]\n }\n ),\n /* @__PURE__ */ e1(\n "linearGradient",\n {\n id: "paint3_linear",\n x1: "3.18352",\n y1: "144.181",\n x2: "265.626",\n y2: "144.181",\n gradientUnits: "userSpaceOnUse",\n children: [\n /* @__PURE__ */ c("stop", { offset: "0.2", stopColor: "#99569E" }),\n /* @__PURE__ */ c("stop", { offset: "0.82", stopColor: "#DC70A9" })\n ]\n }\n ),\n /* @__PURE__ */ e1(\n "linearGradient",\n {\n id: "paint4_linear",\n x1: "55.3624",\n y1: "200.785",\n x2: "217.76",\n y2: "200.785",\n gradientUnits: "userSpaceOnUse",\n children: [\n /* @__PURE__ */ c("stop", { stopColor: "#E6007E" }),\n /* @__PURE__ */ c("stop", { offset: "0.13", stopColor: "#E60580" }),\n /* @__PURE__ */ c("stop", { offset: "0.3", stopColor: "#E81587" }),\n /* @__PURE__ */ c("stop", { offset: "0.49", stopColor: "#EA2F93" }),\n /* @__PURE__ */ c("stop", { offset: "0.69", stopColor: "#EC53A3" }),\n /* @__PURE__ */ c("stop", { offset: "0.9", stopColor: "#F081B7" }),\n /* @__PURE__ */ c("stop", { offset: "1", stopColor: "#F29AC2" })\n ]\n }\n )\n ] })\n ]\n }\n), pJ = () => /* @__PURE__ */ e1(\n "svg",\n {\n width: "260",\n height: "260",\n viewBox: "0 0 260 260",\n fill: "none",\n xmlns: "http://www.w3.org/2000/svg",\n children: [\n /* @__PURE__ */ c(\n "path",\n {\n style: { mixBlendMode: "multiply" },\n d: "M201.892 168.482C218.332 144.454 0 109.132 0 109.132C0.960111 129.803 15.6018 159.611 15.6018 159.489C25.1805 168.799 138.256 165.999 175.796 197.539C189.171 186.123 201.892 168.482 201.892 168.482Z",\n fill: "url(#paint0_linear)"\n }\n ),\n /* @__PURE__ */ c(\n "path",\n {\n style: { mixBlendMode: "multiply" },\n d: "M201.402 169.151C185.826 189.375 111.318 190.274 65.2619 190.015C53.1453 189.944 46.4053 194.767 47.5991 203.744C48.7928 212.721 59.5845 219.589 77.769 222.946C112.298 229.312 145.028 220.725 171.985 200.585C185.106 190.783 198.689 172.825 201.402 169.158V169.151Z",\n fill: "url(#paint1_linear)"\n }\n ),\n /* @__PURE__ */ c(\n "path",\n {\n style: { mixBlendMode: "multiply" },\n d: "M257.354 58.4697C240.501 110.517 11.5533 69.7382 0.0159302 108.792C0.0159302 109.01 0.0159302 109.132 0.0159302 109.132C0.940837 128.974 14.4688 157.236 15.5505 159.377C15.5862 159.344 15.6194 159.307 15.6497 159.269C40.1198 119.45 202.391 143.574 224.346 131.745C226.685 130.491 271.138 75.4765 257.354 58.4697Z",\n fill: "url(#paint2_linear)"\n }\n ),\n /* @__PURE__ */ c(\n "path",\n {\n style: { mixBlendMode: "multiply" },\n d: "M224.484 131.659C227.93 128.945 270.943 75.2365 257.355 58.4697C257.353 58.4538 257.353 58.4377 257.355 58.4217C257.249 58.2315 257.12 58.0552 256.97 57.8969C247.328 47.7005 208.933 36.4288 165.482 34.3517C125.374 32.4315 107.152 38.1922 104.034 56.1143C101.589 71.476 119.118 82.6933 150.561 92.0352C180.251 100.862 232.027 111.717 224.484 131.659Z",\n fill: "url(#paint3_linear)"\n }\n ),\n /* @__PURE__ */ e1("defs", { children: [\n /* @__PURE__ */ e1(\n "linearGradient",\n {\n id: "paint0_linear",\n x1: "225.658",\n y1: "153.325",\n x2: "87.3669",\n y2: "153.325",\n gradientUnits: "userSpaceOnUse",\n children: [\n /* @__PURE__ */ c("stop", { stopColor: "#922269" }),\n /* @__PURE__ */ c("stop", { offset: "0.17", stopColor: "#B90D80" }),\n /* @__PURE__ */ c("stop", { offset: "0.71", stopColor: "#E93E8F" })\n ]\n }\n ),\n /* @__PURE__ */ e1(\n "linearGradient",\n {\n id: "paint1_linear",\n x1: "201.402",\n y1: "197.078",\n x2: "47.4647",\n y2: "197.078",\n gradientUnits: "userSpaceOnUse",\n children: [\n /* @__PURE__ */ c("stop", { offset: "0.19", stopColor: "#951B81" }),\n /* @__PURE__ */ c("stop", { offset: "0.21", stopColor: "#991E82" }),\n /* @__PURE__ */ c("stop", { offset: "0.44", stopColor: "#BD3C90" }),\n /* @__PURE__ */ c("stop", { offset: "0.66", stopColor: "#D75299" }),\n /* @__PURE__ */ c("stop", { offset: "0.85", stopColor: "#E65F9F" }),\n /* @__PURE__ */ c("stop", { offset: "1", stopColor: "#EC64A1" })\n ]\n }\n ),\n /* @__PURE__ */ e1(\n "linearGradient",\n {\n id: "paint2_linear",\n x1: "-3.40846",\n y1: "108.917",\n x2: "263.333",\n y2: "108.917",\n gradientUnits: "userSpaceOnUse",\n children: [\n /* @__PURE__ */ c("stop", { offset: "0.25", stopColor: "#B84E97" }),\n /* @__PURE__ */ c("stop", { offset: "0.4", stopColor: "#BC539A" }),\n /* @__PURE__ */ c("stop", { offset: "0.6", stopColor: "#C863A3" }),\n /* @__PURE__ */ c("stop", { offset: "0.81", stopColor: "#DC7DB1" }),\n /* @__PURE__ */ c("stop", { offset: "1", stopColor: "#F29AC2" })\n ]\n }\n ),\n /* @__PURE__ */ e1(\n "linearGradient",\n {\n id: "paint3_linear",\n x1: "103.826",\n y1: "82.8277",\n x2: "260.001",\n y2: "82.8277",\n gradientUnits: "userSpaceOnUse",\n children: [\n /* @__PURE__ */ c("stop", { stopColor: "#F08CB9" }),\n /* @__PURE__ */ c("stop", { offset: "0.58", stopColor: "#831F82" })\n ]\n }\n )\n ] })\n ]\n }\n), dJ = () => /* @__PURE__ */ e1(\n "svg",\n {\n width: "260",\n height: "260",\n viewBox: "0 0 260 260",\n fill: "none",\n xmlns: "http://www.w3.org/2000/svg",\n children: [\n /* @__PURE__ */ c(\n "path",\n {\n style: { mixBlendMode: "multiply" },\n d: "M223.503 149.828C214.864 160.681 204.897 170.407 193.836 178.779C184.527 171.708 172.931 167.508 161.943 163.807C146.384 158.556 130.385 154.606 114.337 151.135C96.4633 147.27 78.4386 144.088 60.3524 141.389C42.8903 138.782 12.7497 135.677 9.56161 133.021C4.81794 129.067 -1.35837 73.7941 0.264874 75.3804C12.2178 87.0659 237.741 133.553 223.503 149.828Z",\n fill: "url(#paint0_linear)"\n }\n ),\n /* @__PURE__ */ c(\n "path",\n {\n style: { mixBlendMode: "multiply" },\n d: "M142.034 205.154C174.183 195.416 202.602 176.113 223.503 149.816C202.872 171.213 121.086 171.487 98.0128 171.259C70.7897 171.007 51.649 168.133 49.6446 181.967C46.9453 200.653 114.673 211.68 142.034 205.154Z",\n fill: "url(#paint1_linear)"\n }\n ),\n /* @__PURE__ */ c(\n "path",\n {\n style: { mixBlendMode: "multiply" },\n d: "M259.996 75.2329C259.75 60.4393 246.93 51.0718 223.248 51.0011C174.182 50.8597 17.1306 64.0393 0.231053 75.4112C0.206459 75.4297 0.172641 75.4112 0.132675 75.4112C-0.921816 77.2681 4.59044 125.861 9.10968 132.495L9.56161 132.846C6.37354 127.708 144.269 118.464 221.145 105.066C250.865 99.8828 260.235 89.5285 259.996 75.2329Z",\n fill: "url(#paint2_linear)"\n }\n ),\n /* @__PURE__ */ e1("defs", { children: [\n /* @__PURE__ */ e1(\n "linearGradient",\n {\n id: "paint0_linear",\n x1: "0.000482516",\n y1: "127.063",\n x2: "224.155",\n y2: "127.063",\n gradientUnits: "userSpaceOnUse",\n children: [\n /* @__PURE__ */ c("stop", { offset: "0.18", stopColor: "#004899" }),\n /* @__PURE__ */ c("stop", { offset: "1", stopColor: "#DC64A2" })\n ]\n }\n ),\n /* @__PURE__ */ e1(\n "linearGradient",\n {\n id: "paint1_linear",\n x1: "49.5677",\n y1: "178.435",\n x2: "223.51",\n y2: "178.435",\n gradientUnits: "userSpaceOnUse",\n children: [\n /* @__PURE__ */ c("stop", { stopColor: "#F08CB9" }),\n /* @__PURE__ */ c("stop", { offset: "1", stopColor: "#851F82" })\n ]\n }\n ),\n /* @__PURE__ */ e1(\n "linearGradient",\n {\n id: "paint2_linear",\n x1: "75.0046",\n y1: "92.3753",\n x2: "194.279",\n y2: "91.0287",\n gradientUnits: "userSpaceOnUse",\n children: [\n /* @__PURE__ */ c("stop", { offset: "0.12", stopColor: "#7F2082" }),\n /* @__PURE__ */ c("stop", { offset: "0.41", stopColor: "#9F2584" }),\n /* @__PURE__ */ c("stop", { offset: "1", stopColor: "#E8308A" })\n ]\n }\n )\n ] })\n ]\n }\n), bJ = () => /* @__PURE__ */ e1(\n "svg",\n {\n width: "260",\n height: "260",\n viewBox: "0 0 260 260",\n fill: "none",\n xmlns: "http://www.w3.org/2000/svg",\n children: [\n /* @__PURE__ */ c(\n "path",\n {\n style: { mixBlendMode: "multiply" },\n d: "M223.528 228.464C201.068 224.478 165.417 216.509 168.896 191.07C171.574 171.485 203.979 165.775 217.52 162.618C228.271 160.118 256.944 156.663 259.859 152.097C259.859 152.097 259.859 152.097 259.859 152.121C259.908 153.246 259.944 154.376 259.968 155.512V155.713C259.992 156.78 260 157.851 260 158.934C260 183.415 254.496 206.338 244.901 226.008C244.776 226.253 244.651 226.503 244.522 226.749C243.363 228.987 235.595 230.606 223.528 228.464Z",\n fill: "url(#paint0_linear)"\n }\n ),\n /* @__PURE__ */ c(\n "path",\n {\n style: { mixBlendMode: "multiply" },\n d: "M259.968 155.713V155.512C259.968 154.734 259.927 153.957 259.899 153.184C259.93 152.839 259.918 152.492 259.863 152.149C255.539 138.173 190.341 121.548 146.545 113.265C91.1723 102.813 7.73885 91.8 11.6768 70.2622C8.58844 75.2148 4.38073 84.7577 3.30968 90.5599C-2.56903 122.53 3.358 130.539 7.8234 134.155L8.06097 134.348C56.2624 156.635 273.408 161.729 244.321 226.958L244.297 227.014C244.381 226.925 244.456 226.827 244.518 226.72L244.897 225.98C254.492 206.31 259.996 183.387 259.996 158.906C260 157.835 259.992 156.78 259.968 155.713Z",\n fill: "url(#paint1_linear)"\n }\n ),\n /* @__PURE__ */ c(\n "path",\n {\n style: { mixBlendMode: "multiply" },\n d: "M256.251 64.2587C252.132 44.7744 222.046 36.979 186.895 33.4639C87.6813 23.5425 34.036 45.2656 12.764 68.6033C9.10386 73.9706 5.06124 83.5859 3.31373 90.5599C-4.39705 121.363 3.18891 129.967 7.51741 133.889C5.47597 131.183 5.17801 128.961 4.94044 126.432C2.27086 98.4357 104.605 81.9955 213.143 102.957C252.962 110.652 260.374 83.747 256.251 64.2587Z",\n fill: "url(#paint2_linear)"\n }\n ),\n /* @__PURE__ */ e1("defs", { children: [\n /* @__PURE__ */ e1(\n "linearGradient",\n {\n id: "paint0_linear",\n x1: "168.659",\n y1: "190.784",\n x2: "265.198",\n y2: "190.784",\n gradientUnits: "userSpaceOnUse",\n children: [\n /* @__PURE__ */ c("stop", { stopColor: "#CBAFD4" }),\n /* @__PURE__ */ c("stop", { offset: "0.66", stopColor: "#935AA0" })\n ]\n }\n ),\n /* @__PURE__ */ e1(\n "linearGradient",\n {\n id: "paint1_linear",\n x1: "20.817",\n y1: "148.646",\n x2: "217.464",\n y2: "148.646",\n gradientUnits: "userSpaceOnUse",\n children: [\n /* @__PURE__ */ c("stop", { stopColor: "#F29AC2" }),\n /* @__PURE__ */ c("stop", { offset: "1", stopColor: "#B84E97" })\n ]\n }\n ),\n /* @__PURE__ */ e1(\n "linearGradient",\n {\n id: "paint2_linear",\n x1: "8.16568",\n y1: "82.4424",\n x2: "264.441",\n y2: "82.4424",\n gradientUnits: "userSpaceOnUse",\n children: [\n /* @__PURE__ */ c("stop", { offset: "0.06", stopColor: "#831F82" }),\n /* @__PURE__ */ c("stop", { offset: "0.21", stopColor: "#882485" }),\n /* @__PURE__ */ c("stop", { offset: "0.41", stopColor: "#98348D" }),\n /* @__PURE__ */ c("stop", { offset: "0.62", stopColor: "#B24E9A" }),\n /* @__PURE__ */ c("stop", { offset: "0.85", stopColor: "#D672AC" }),\n /* @__PURE__ */ c("stop", { offset: "1", stopColor: "#F08CB9" })\n ]\n }\n )\n ] })\n ]\n }\n), MJ = () => /* @__PURE__ */ e1(\n "svg",\n {\n width: "260",\n height: "260",\n viewBox: "0 0 260 260",\n fill: "none",\n xmlns: "http://www.w3.org/2000/svg",\n children: [\n /* @__PURE__ */ c(\n "path",\n {\n style: { mixBlendMode: "multiply" },\n d: "M97.6669 80.9939C102.708 97.0342 124.121 95.2662 147.02 93.3897C175.022 91.0894 238.996 91.0072 258.599 114.422L257.82 113.344C239.924 88.8479 216.015 69.38 188.401 56.8202C167.448 48.3975 144.953 50.4645 130.033 54.5954C115.114 58.7262 92.616 64.9241 97.6669 80.9939Z",\n fill: "url(#paint0_linear)"\n }\n ),\n /* @__PURE__ */ c(\n "path",\n {\n style: { mixBlendMode: "multiply" },\n d: "M11.8298 130.617C7.64306 131.445 -2.80727 173.907 0.712319 178.126C0.712319 178.126 18.2215 180.019 51.9781 177.255C163.728 168.103 273.666 140.121 258.612 114.428C258.356 114.074 258.099 113.715 257.836 113.357C250.182 102.885 241.399 93.2874 231.645 84.7371C211.306 133.344 16.8117 130.617 11.8298 130.617Z",\n fill: "url(#paint1_linear)"\n }\n ),\n /* @__PURE__ */ c(\n "path",\n {\n style: { mixBlendMode: "multiply" },\n d: "M207.836 171.317C205.138 148.159 172.492 151.001 127.247 146.611C102.271 144.186 34.1271 138.77 11.626 130.689C7.47548 132.713 -1.99883 170.91 0.37714 177.499L0.676191 178.077L0.71234 178.126V178.146L0.748488 178.218C13.6537 202.826 124.667 214.63 165.643 206.884C194.043 201.511 209.548 186.026 207.836 171.317Z",\n fill: "url(#paint2_linear)"\n }\n ),\n /* @__PURE__ */ e1("defs", { children: [\n /* @__PURE__ */ e1(\n "linearGradient",\n {\n id: "paint0_linear",\n x1: "96.9407",\n y1: "82.7127",\n x2: "258.599",\n y2: "82.7127",\n gradientUnits: "userSpaceOnUse",\n children: [\n /* @__PURE__ */ c("stop", { offset: "0.12", stopColor: "#F08CB9" }),\n /* @__PURE__ */ c("stop", { offset: "1", stopColor: "#851F82" })\n ]\n }\n ),\n /* @__PURE__ */ e1(\n "linearGradient",\n {\n id: "paint1_linear",\n x1: "-0.000800403",\n y1: "131.747",\n x2: "259.989",\n y2: "131.747",\n gradientUnits: "userSpaceOnUse",\n children: [\n /* @__PURE__ */ c("stop", { offset: "0.18", stopColor: "#86328A" }),\n /* @__PURE__ */ c("stop", { offset: "1", stopColor: "#CE82B6" })\n ]\n }\n ),\n /* @__PURE__ */ e1(\n "linearGradient",\n {\n id: "paint2_linear",\n x1: "17.0418",\n y1: "208.945",\n x2: "182.798",\n y2: "121.04",\n gradientUnits: "userSpaceOnUse",\n children: [\n /* @__PURE__ */ c("stop", { offset: "0.28", stopColor: "#7F2082" }),\n /* @__PURE__ */ c("stop", { offset: "0.52", stopColor: "#9F2584" }),\n /* @__PURE__ */ c("stop", { offset: "1", stopColor: "#E8308A" })\n ]\n }\n )\n ] })\n ]\n }\n), AJ = () => /* @__PURE__ */ e1(\n "svg",\n {\n width: "260",\n height: "260",\n viewBox: "0 0 260 260",\n fill: "none",\n xmlns: "http://www.w3.org/2000/svg",\n children: [\n /* @__PURE__ */ c(\n "path",\n {\n style: { mixBlendMode: "multiply" },\n d: "M259.3 126.981C254.276 138.061 247.883 148.468 240.272 157.96C197.754 139.811 34.1013 178.407 26.727 173.18C24.3977 170.615 21.2543 167.256 19.0516 164.592C11.431 154.331 11.2873 154.129 8.01056 148.222C2.29166 136.705 2.17879 136.486 0 130.035C0 130.035 33.9645 121.355 64.0606 116.275C196.645 93.8956 267.916 110.091 259.3 126.981Z",\n fill: "url(#paint0_linear)"\n }\n ),\n /* @__PURE__ */ c(\n "path",\n {\n style: { mixBlendMode: "multiply" },\n d: "M201.855 191.49C227.12 176.327 247.164 153.824 259.317 126.981C246.354 149.597 176.855 167.342 157.181 172.103C133.97 177.712 117.07 179.358 118.335 191.572C120.022 208.034 179.995 202.9 201.855 191.49Z",\n fill: "url(#paint1_linear)"\n }\n ),\n /* @__PURE__ */ c(\n "path",\n {\n style: { mixBlendMode: "multiply" },\n d: "M237.68 90.1332C229.731 96.5123 216.86 97.3708 207.115 99.5119C174.225 106.729 141.444 113.231 109.117 122.866C44.2838 142.198 23.2587 165.29 26.727 173.18C24.3977 170.615 21.2543 167.256 19.0516 164.592C11.431 154.331 11.2873 154.129 8.01056 148.222C2.29166 136.705 2.17879 136.486 0 130.036C0 130.036 12.2621 113.084 52.7288 92.3633C98.9144 68.7147 150.798 58.6827 202.416 59.0076C211.404 59.0658 221.361 59.4215 229.741 62.9821C240.355 67.4936 248.786 81.2128 237.68 90.1332Z",\n fill: "url(#paint2_linear)"\n }\n ),\n /* @__PURE__ */ e1("defs", { children: [\n /* @__PURE__ */ e1(\n "linearGradient",\n {\n id: "paint0_linear",\n x1: "10.4795",\n y1: "171.621",\n x2: "256.494",\n y2: "109.644",\n gradientUnits: "userSpaceOnUse",\n children: [\n /* @__PURE__ */ c("stop", { offset: "0.28", stopColor: "#7F2082" }),\n /* @__PURE__ */ c("stop", { offset: "0.52", stopColor: "#9F2584" }),\n /* @__PURE__ */ c("stop", { offset: "1", stopColor: "#E8308A" })\n ]\n }\n ),\n /* @__PURE__ */ e1(\n "linearGradient",\n {\n id: "paint1_linear",\n x1: "117.5",\n y1: "188.575",\n x2: "265.434",\n y2: "151.307",\n gradientUnits: "userSpaceOnUse",\n children: [\n /* @__PURE__ */ c("stop", { offset: "0.12", stopColor: "#F08CB9" }),\n /* @__PURE__ */ c("stop", { offset: "1", stopColor: "#851F82" })\n ]\n }\n ),\n /* @__PURE__ */ e1(\n "linearGradient",\n {\n id: "paint2_linear",\n x1: "2.13039",\n y1: "138.48",\n x2: "242.752",\n y2: "77.8618",\n gradientUnits: "userSpaceOnUse",\n children: [\n /* @__PURE__ */ c("stop", { offset: "0.18", stopColor: "#86328A" }),\n /* @__PURE__ */ c("stop", { offset: "1", stopColor: "#CE82B6" })\n ]\n }\n )\n ] })\n ]\n }\n), uJ = () => /* @__PURE__ */ e1(\n "svg",\n {\n width: "260",\n height: "260",\n viewBox: "0 0 260 260",\n fill: "none",\n xmlns: "http://www.w3.org/2000/svg",\n children: [\n /* @__PURE__ */ c(\n "path",\n {\n style: { mixBlendMode: "multiply" },\n d: "M259.278 30.7174C236.199 22.9685 212.832 40.2526 195.686 53.6367C146.119 92.283 104.438 146.063 86.561 206.898C82.2901 221.45 80.6166 236.416 79.2851 251.492C78.783 257.149 26.1414 253.096 25.4429 245.671C24.9299 240.382 25.2137 227.802 26.1705 220.66C34.9235 154.067 68.7859 100.137 108.876 48.3543C117.931 36.6619 134.732 18.6793 146.65 9.76988C147.926 8.74968 149.305 7.86456 150.764 7.1287C154.071 5.57528 251.722 1.42798 259.278 30.7174Z",\n fill: "url(#paint0_linear)"\n }\n ),\n /* @__PURE__ */ c(\n "path",\n {\n style: { mixBlendMode: "multiply" },\n d: "M150.975 7.05962C156.796 5.46254 251.827 1.84275 259.278 30.7174L259.343 30.7465V30.7684C259.467 31.0414 259.558 31.3285 259.613 31.6233C263 50.7118 243.969 102.622 210.54 152.59C179.693 198.716 158.324 214.225 135.852 202.921C116.778 193.019 118.732 164.319 134.204 121.714C148.792 81.5037 179.326 15.0632 150.975 7.05962Z",\n fill: "url(#paint1_linear)"\n }\n ),\n /* @__PURE__ */ c(\n "path",\n {\n style: { mixBlendMode: "multiply" },\n d: "M111.423 57.2239C120.216 64.9983 65.4463 147.719 74.2429 228.362C76.3929 248.065 79.1105 249.142 79.2742 251.492C78.7722 257.149 26.4361 253.06 25.4321 245.672C18.7564 197.345 25.4321 90.7589 60.1784 47.8961C62.936 44.4437 108.498 54.6409 111.423 57.2239Z",\n fill: "url(#paint2_linear)"\n }\n ),\n /* @__PURE__ */ c(\n "path",\n {\n style: { mixBlendMode: "multiply" },\n d: "M111.423 57.2238C88.5037 53.6258 47.2999 164.402 41.9048 176.764C35.5965 191.316 -2.23855 185.466 0.104313 169.852C10.4871 100.625 29.0699 70.9753 60.1602 47.8814C60.4261 47.6643 60.7347 47.5057 61.066 47.4158C67.6144 45.735 103.03 53.5312 110.273 56.6053C110.834 56.8418 111.685 57.2638 111.423 57.2238Z",\n fill: "url(#paint3_linear)"\n }\n ),\n /* @__PURE__ */ e1("defs", { children: [\n /* @__PURE__ */ e1(\n "linearGradient",\n {\n id: "paint0_linear",\n x1: "24.9955",\n y1: "235.616",\n x2: "216.434",\n y2: "-23.9612",\n gradientUnits: "userSpaceOnUse",\n children: [\n /* @__PURE__ */ c("stop", { offset: "0.28", stopColor: "#7F2082" }),\n /* @__PURE__ */ c("stop", { offset: "0.52", stopColor: "#9F2584" }),\n /* @__PURE__ */ c("stop", { offset: "1", stopColor: "#E8308A" })\n ]\n }\n ),\n /* @__PURE__ */ e1(\n "linearGradient",\n {\n id: "paint1_linear",\n x1: "104.032",\n y1: "164.699",\n x2: "231.36",\n y2: "-7.94787",\n gradientUnits: "userSpaceOnUse",\n children: [\n /* @__PURE__ */ c("stop", { offset: "0.12", stopColor: "#F08CB9" }),\n /* @__PURE__ */ c("stop", { offset: "1", stopColor: "#851F82" })\n ]\n }\n ),\n /* @__PURE__ */ e1(\n "linearGradient",\n {\n id: "paint2_linear",\n x1: "-359347",\n y1: "-1.28416e+06",\n x2: "-308170",\n y2: "-1.28416e+06",\n gradientUnits: "userSpaceOnUse",\n children: [\n /* @__PURE__ */ c("stop", { offset: "0.28", stopColor: "#7F2082" }),\n /* @__PURE__ */ c("stop", { offset: "0.52", stopColor: "#9F2584" }),\n /* @__PURE__ */ c("stop", { offset: "1", stopColor: "#E8308A" })\n ]\n }\n ),\n /* @__PURE__ */ e1(\n "linearGradient",\n {\n id: "paint3_linear",\n x1: "-2.40935",\n y1: "161.584",\n x2: "95.5507",\n y2: "28.7565",\n gradientUnits: "userSpaceOnUse",\n children: [\n /* @__PURE__ */ c("stop", { offset: "0.18", stopColor: "#86328A" }),\n /* @__PURE__ */ c("stop", { offset: "1", stopColor: "#CE82B6" })\n ]\n }\n )\n ] })\n ]\n }\n), zJ = () => /* @__PURE__ */ e1(\n "svg",\n {\n width: "260",\n height: "260",\n viewBox: "0 0 260 260",\n fill: "none",\n xmlns: "http://www.w3.org/2000/svg",\n children: [\n /* @__PURE__ */ c(\n "path",\n {\n style: { mixBlendMode: "multiply" },\n d: "M13.8739 177.315C16.0271 179.768 18.5271 181.794 21.0882 183.814C46.6351 203.842 89.3631 209.252 116.941 204.283C130.795 201.786 139.797 191.064 137.341 174.732C136.037 166.075 126.947 161.577 118.75 161.691C99.1135 161.968 76.272 160.115 54.8705 155.487C39.2404 152.107 21.2963 142.723 15.0032 135.054C14.1514 133.988 8.04697 127.731 20.869 123.183C20.869 123.183 11.3073 125.914 8.49925 132.34C7.14518 135.434 6.23507 139.832 6.16848 143.242C6.08246 147.681 6.21288 152.149 6.56527 156.585C6.9898 161.971 7.7806 167.465 10.3389 172.218C11.3258 174.042 12.5114 175.752 13.8739 177.315Z",\n fill: "url(#paint0_linear)"\n }\n ),\n /* @__PURE__ */ c(\n "path",\n {\n style: { mixBlendMode: "multiply" },\n d: "M0.0335741 133.386L0.000277424 133.28C-0.00546692 133.03 0.0781566 132.786 0.236129 132.592C0.175085 132.861 0.105717 133.122 0.0335741 133.386Z",\n fill: "url(#paint1_linear)"\n }\n ),\n /* @__PURE__ */ c(\n "path",\n {\n style: { mixBlendMode: "multiply" },\n d: "M234.723 219.574C211.87 205.512 193.282 200.734 154.045 191.522C115.484 182.462 4.32884 159.085 13.8489 177.185C14.2096 177.87 11.31 174.008 10.3389 172.207C7.7695 167.454 6.9898 161.96 6.56527 156.588C6.21288 152.149 6.08246 147.695 6.16848 143.244C6.23507 139.843 7.14518 135.436 8.49925 132.343C11.1658 126.238 19.9173 123.483 20.7941 123.219C35.8331 120.012 60.3617 118.991 98.5086 126.382C153.975 137.118 225.372 158.808 246.998 174.951C271.091 192.937 258.605 234.256 234.723 219.574Z",\n fill: "url(#paint2_linear)"\n }\n ),\n /* @__PURE__ */ c(\n "path",\n {\n style: { mixBlendMode: "multiply" },\n d: "M217.889 148.672C217.209 131.41 199.853 120.27 186.653 112.267C148.509 89.1401 102.318 75.0584 57.4594 78.5434C46.735 79.3758 36.2632 81.6594 26.0384 84.9586C-3.07131 94.351 -9.59469 60.3662 16.324 47.7551C19.7148 46.1069 28.1194 43.0991 33.0973 41.9281C79.4768 30.9763 123.792 39.8221 168.254 53.3683C178.293 56.4205 194.459 63.0216 203.388 68.6793C204.382 69.2691 205.312 69.961 206.163 70.7437C208.03 72.5445 235.411 136.272 217.889 148.672Z",\n fill: "url(#paint3_linear)"\n }\n ),\n /* @__PURE__ */ c(\n "path",\n {\n style: { mixBlendMode: "multiply" },\n d: "M206.26 70.8491C208.796 74.3259 235.164 136.441 217.889 148.664C217.889 148.68 217.889 148.7 217.889 148.716C217.738 148.867 217.57 148.999 217.389 149.11C205.58 156.172 166.334 156.633 124.769 147.071C86.3776 138.256 70.7004 127.992 72.5289 110.25C74.2909 95.1113 93.8194 89.1623 125.981 88.674C156.337 88.205 208.105 91.6901 206.26 70.8491Z",\n fill: "url(#paint4_linear)"\n }\n ),\n /* @__PURE__ */ e1("defs", { children: [\n /* @__PURE__ */ e1(\n "linearGradient",\n {\n id: "paint0_linear",\n x1: "2.46458",\n y1: "153.116",\n x2: "136.665",\n y2: "186.849",\n gradientUnits: "userSpaceOnUse",\n children: [\n /* @__PURE__ */ c("stop", { offset: "0.36", stopColor: "#CE1E13" }),\n /* @__PURE__ */ c("stop", { offset: "1", stopColor: "#FCBF00" })\n ]\n }\n ),\n /* @__PURE__ */ e1(\n "linearGradient",\n {\n id: "paint1_linear",\n x1: "0.675174",\n y1: "133.315",\n x2: "0.805365",\n y2: "133.37",\n gradientUnits: "userSpaceOnUse",\n children: [\n /* @__PURE__ */ c("stop", { stopColor: "#FFD800" }),\n /* @__PURE__ */ c("stop", { offset: "0.51", stopColor: "#F49600" }),\n /* @__PURE__ */ c("stop", { offset: "0.62", stopColor: "#F38F01" }),\n /* @__PURE__ */ c("stop", { offset: "0.78", stopColor: "#EF7B06" }),\n /* @__PURE__ */ c("stop", { offset: "0.96", stopColor: "#EA5B0C" })\n ]\n }\n ),\n /* @__PURE__ */ e1(\n "linearGradient",\n {\n id: "paint2_linear",\n x1: "-10907.2",\n y1: "78940.8",\n x2: "227777",\n y2: "78940.8",\n gradientUnits: "userSpaceOnUse",\n children: [\n /* @__PURE__ */ c("stop", { stopColor: "#FFD800" }),\n /* @__PURE__ */ c("stop", { offset: "0.51", stopColor: "#F49600" }),\n /* @__PURE__ */ c("stop", { offset: "0.62", stopColor: "#F38F01" }),\n /* @__PURE__ */ c("stop", { offset: "0.78", stopColor: "#EF7B06" }),\n /* @__PURE__ */ c("stop", { offset: "0.96", stopColor: "#EA5B0C" })\n ]\n }\n ),\n /* @__PURE__ */ e1(\n "linearGradient",\n {\n id: "paint3_linear",\n x1: "2.59482",\n y1: "48.7564",\n x2: "233.203",\n y2: "113.615",\n gradientUnits: "userSpaceOnUse",\n children: [\n /* @__PURE__ */ c("stop", { stopColor: "#FDC500" }),\n /* @__PURE__ */ c("stop", { offset: "0.12", stopColor: "#FCC100" }),\n /* @__PURE__ */ c("stop", { offset: "0.25", stopColor: "#FAB400" }),\n /* @__PURE__ */ c("stop", { offset: "0.33", stopColor: "#F8A800" }),\n /* @__PURE__ */ c("stop", { offset: "0.43", stopColor: "#F59B01" }),\n /* @__PURE__ */ c("stop", { offset: "0.6", stopColor: "#EF7805" }),\n /* @__PURE__ */ c("stop", { offset: "0.67", stopColor: "#EC6907" })\n ]\n }\n ),\n /* @__PURE__ */ e1(\n "linearGradient",\n {\n id: "paint4_linear",\n x1: "79.1446",\n y1: "86.2019",\n x2: "226.172",\n y2: "127.553",\n gradientUnits: "userSpaceOnUse",\n children: [\n /* @__PURE__ */ c("stop", { stopColor: "#F39200" }),\n /* @__PURE__ */ c("stop", { offset: "0.97", stopColor: "#CD1014" })\n ]\n }\n )\n ] })\n ]\n }\n), hJ = () => /* @__PURE__ */ e1(\n "svg",\n {\n width: "260",\n height: "260",\n viewBox: "0 0 260 260",\n fill: "none",\n xmlns: "http://www.w3.org/2000/svg",\n children: [\n /* @__PURE__ */ c(\n "path",\n {\n style: { mixBlendMode: "multiply" },\n d: "M87.5176 44.8117C134.624 47.5734 159.566 59.4119 159.209 78.6696C158.687 95.1077 137.839 105.977 103.299 109.392C63.0166 113.377 6.99127 113.525 20.3555 140.537C7.01216 119.083 -0.0404927 94.3138 0.000174886 69.0488C0.000174886 67.1111 0.0613309 65.2121 0.141799 63.313C0.425048 56.5151 8.58776 40.1896 87.5176 44.8117Z",\n fill: "url(#paint0_linear)"\n }\n ),\n /* @__PURE__ */ c(\n "path",\n {\n style: { mixBlendMode: "multiply" },\n d: "M260 134.186C258.835 126.342 249.909 122.197 243.349 119.589C233.609 115.684 223.46 112.889 213.093 111.256C205.796 110.122 198.406 109.69 191.026 109.969C177.391 110.516 156.646 112.994 154.506 130.066C152.288 147.814 180.42 160.841 191.995 166.956C199.961 171.166 214.793 177.926 223.512 182.651C239.147 169.429 251.616 152.867 260 134.186Z",\n fill: "url(#paint1_linear)"\n }\n ),\n /* @__PURE__ */ c(\n "path",\n {\n style: { mixBlendMode: "multiply" },\n d: "M57.9181 188.049C59.286 189.066 60.934 190.26 62.5788 191.432C80.5498 203.806 101.281 211.587 122.956 214.091C122.956 214.091 140.501 210.139 137.907 201.835C135.432 193.92 121.35 189.133 97.8047 186.294C58.1563 181.515 56.6113 186.932 57.9181 188.049Z",\n fill: "url(#paint2_linear)"\n }\n ),\n /* @__PURE__ */ c(\n "path",\n {\n style: { mixBlendMode: "multiply" },\n d: "M258.671 137.061C242.728 164.99 191.013 155.61 155.427 150.525C33.4364 133.098 3.88843 101.416 3.88843 101.416C7.27775 115.244 12.8356 128.448 20.3555 140.537C30.1243 155.182 85.6636 177.874 168.562 184.798C196.485 187.135 211.008 187.183 218.507 186.7C235.618 173.548 249.38 156.54 258.671 137.061Z",\n fill: "url(#paint3_linear)"\n }\n ),\n /* @__PURE__ */ c(\n "path",\n {\n style: { mixBlendMode: "multiply" },\n d: "M218.575 186.623C218.575 186.574 218.559 186.568 218.546 186.623C218.546 186.623 218.546 186.6 218.546 186.603C210.473 191.219 193.311 196.176 177.394 199.478C128.55 209.646 70.278 193.942 57.9117 188.045C59.2796 189.063 60.9276 190.257 62.5724 191.428C84.9197 206.815 111.422 215.033 138.554 214.989C168.514 214.989 196.201 203.228 218.536 186.639L218.575 186.623Z",\n fill: "url(#paint4_linear)"\n }\n ),\n /* @__PURE__ */ c("g", { style: { mixBlendMode: "multiply" }, children: /* @__PURE__ */ c(\n "path",\n {\n d: "M32.6704 118.878C11.3784 109.222 4.13949 101.68 3.89487 101.426L3.99143 101.815C4.12018 102.34 4.25537 102.858 4.39055 103.38C4.4678 103.682 4.54505 103.985 4.62874 104.287C4.78646 104.883 4.95061 105.475 5.12121 106.064C5.18236 106.286 5.24352 106.512 5.30789 106.734C5.53964 107.545 5.78105 108.343 6.03211 109.154C6.08361 109.322 6.13833 109.476 6.18983 109.656C6.38939 110.3 6.59324 110.935 6.80138 111.562C6.89473 111.845 6.99129 112.125 7.08785 112.408C7.26166 112.923 7.43548 113.438 7.61573 113.953L7.9376 114.884C8.11141 115.369 8.28844 115.852 8.46869 116.335C8.58456 116.651 8.70366 116.966 8.82597 117.282C9.00622 117.761 9.19291 118.247 9.38281 118.717C9.5019 119.039 9.621 119.329 9.74331 119.634C9.94609 120.137 10.1553 120.639 10.3613 121.138C10.4772 121.408 10.5866 121.682 10.7025 121.952C10.9664 122.574 11.2347 123.192 11.5072 123.806L11.6971 124.247C12.0383 125.006 12.3827 125.763 12.7367 126.516C12.8365 126.729 12.9395 126.938 13.0393 127.16C13.2968 127.701 13.5543 128.238 13.8182 128.769C13.9534 129.049 14.095 129.326 14.2334 129.603C14.4652 130.07 14.7034 130.539 14.9416 131.003C15.0928 131.296 15.2441 131.589 15.3986 131.882C15.6347 132.332 15.8718 132.78 16.11 133.224L16.5863 134.103C16.8331 134.553 17.0831 135.002 17.3363 135.448C17.494 135.728 17.6582 136.005 17.8062 136.278C18.0831 136.765 18.3663 137.244 18.6496 137.73C18.7847 137.962 18.9199 138.194 19.0583 138.425C19.4875 139.138 19.9167 139.844 20.3458 140.543C14.9319 129.58 20.922 123.043 32.6704 118.878Z",\n fill: "#B90E0C"\n }\n ) }),\n /* @__PURE__ */ e1("defs", { children: [\n /* @__PURE__ */ e1(\n "linearGradient",\n {\n id: "paint0_linear",\n x1: "159.649",\n y1: "92.2688",\n x2: "-4.34512",\n y2: "92.2688",\n gradientUnits: "userSpaceOnUse",\n children: [\n /* @__PURE__ */ c("stop", { stopColor: "#FCBC00" }),\n /* @__PURE__ */ c("stop", { offset: "0.28", stopColor: "#F79F03" }),\n /* @__PURE__ */ c("stop", { offset: "0.8", stopColor: "#EB600A" })\n ]\n }\n ),\n /* @__PURE__ */ e1(\n "linearGradient",\n {\n id: "paint1_linear",\n x1: "159.727",\n y1: "156.563",\n x2: "265.449",\n y2: "131.644",\n gradientUnits: "userSpaceOnUse",\n children: [\n /* @__PURE__ */ c("stop", { stopColor: "#CE2E14" }),\n /* @__PURE__ */ c("stop", { offset: "0.6", stopColor: "#FEC800" })\n ]\n }\n ),\n /* @__PURE__ */ e1(\n "linearGradient",\n {\n id: "paint2_linear",\n x1: "56.9911",\n y1: "199.224",\n x2: "138.158",\n y2: "199.224",\n gradientUnits: "userSpaceOnUse",\n children: [\n /* @__PURE__ */ c("stop", { stopColor: "#F9B000" }),\n /* @__PURE__ */ c("stop", { offset: "1", stopColor: "#E74011" })\n ]\n }\n ),\n /* @__PURE__ */ e1(\n "linearGradient",\n {\n id: "paint3_linear",\n x1: "3.18352",\n y1: "144.181",\n x2: "265.626",\n y2: "144.181",\n gradientUnits: "userSpaceOnUse",\n children: [\n /* @__PURE__ */ c("stop", { offset: "0.08", stopColor: "#E30613" }),\n /* @__PURE__ */ c("stop", { offset: "0.11", stopColor: "#E30613" }),\n /* @__PURE__ */ c("stop", { offset: "0.72", stopColor: "#FEC700" })\n ]\n }\n ),\n /* @__PURE__ */ e1(\n "linearGradient",\n {\n id: "paint4_linear",\n x1: "55.3624",\n y1: "200.785",\n x2: "217.761",\n y2: "200.785",\n gradientUnits: "userSpaceOnUse",\n children: [\n /* @__PURE__ */ c("stop", { stopColor: "#FFF596", stopOpacity: "0.3" }),\n /* @__PURE__ */ c("stop", { offset: "0.35", stopColor: "#F6C700" }),\n /* @__PURE__ */ c("stop", { offset: "0.65", stopColor: "#FDC300" }),\n /* @__PURE__ */ c("stop", { offset: "0.95", stopColor: "#F59A00" }),\n /* @__PURE__ */ c("stop", { offset: "1", stopColor: "#F18500" })\n ]\n }\n )\n ] })\n ]\n }\n), OJ = () => /* @__PURE__ */ e1(\n "svg",\n {\n width: "260",\n height: "260",\n viewBox: "0 0 260 260",\n fill: "none",\n xmlns: "http://www.w3.org/2000/svg",\n children: [\n /* @__PURE__ */ c(\n "path",\n {\n style: { mixBlendMode: "multiply" },\n d: "M201.892 168.482C218.332 144.454 0 109.132 0 109.132C0.960111 129.803 15.6018 159.611 15.6018 159.489C25.1805 168.799 138.256 165.999 175.796 197.539C189.171 186.123 201.892 168.482 201.892 168.482Z",\n fill: "url(#paint0_linear)"\n }\n ),\n /* @__PURE__ */ c(\n "path",\n {\n style: { mixBlendMode: "multiply" },\n d: "M201.402 169.151C185.826 189.374 111.318 190.274 65.2619 190.014C53.1453 189.944 46.4053 194.767 47.5991 203.744C48.7928 212.721 59.5845 219.589 77.769 222.946C112.298 229.312 145.028 220.725 171.985 200.585C185.106 190.783 198.689 172.825 201.402 169.158V169.151Z",\n fill: "url(#paint1_linear)"\n }\n ),\n /* @__PURE__ */ c(\n "path",\n {\n style: { mixBlendMode: "multiply" },\n d: "M257.355 58.4697C240.501 110.517 11.5533 69.7382 0.0159912 108.792C0.0159912 109.01 0.0159912 109.132 0.0159912 109.132C0.940898 128.974 14.4689 157.236 15.5506 159.377C15.5863 159.344 15.6195 159.307 15.6498 159.269C40.1198 119.45 202.391 143.574 224.346 131.745C226.685 130.491 271.138 75.4765 257.355 58.4697Z",\n fill: "url(#paint2_linear)"\n }\n ),\n /* @__PURE__ */ c(\n "path",\n {\n style: { mixBlendMode: "multiply" },\n d: "M224.484 131.659C227.93 128.945 270.943 75.2365 257.355 58.4697C257.353 58.4538 257.353 58.4377 257.355 58.4217C257.249 58.2315 257.12 58.0552 256.97 57.8969C247.328 47.7005 208.933 36.4288 165.482 34.3517C125.374 32.4315 107.152 38.1922 104.034 56.1143C101.589 71.476 119.118 82.6933 150.561 92.0352C180.251 100.862 232.027 111.717 224.484 131.659Z",\n fill: "url(#paint3_linear)"\n }\n ),\n /* @__PURE__ */ e1("defs", { children: [\n /* @__PURE__ */ e1(\n "linearGradient",\n {\n id: "paint0_linear",\n x1: "225.658",\n y1: "153.325",\n x2: "87.3669",\n y2: "153.325",\n gradientUnits: "userSpaceOnUse",\n children: [\n /* @__PURE__ */ c("stop", { offset: "0.17", stopColor: "#E9500E" }),\n /* @__PURE__ */ c("stop", { offset: "1", stopColor: "#FDC500" })\n ]\n }\n ),\n /* @__PURE__ */ e1(\n "linearGradient",\n {\n id: "paint1_linear",\n x1: "201.402",\n y1: "197.078",\n x2: "47.4647",\n y2: "197.078",\n gradientUnits: "userSpaceOnUse",\n children: [\n /* @__PURE__ */ c("stop", { offset: "0.01", stopColor: "#D8540F" }),\n /* @__PURE__ */ c("stop", { offset: "1", stopColor: "#FFD600" })\n ]\n }\n ),\n /* @__PURE__ */ e1(\n "linearGradient",\n {\n id: "paint2_linear",\n x1: "-3.4084",\n y1: "108.917",\n x2: "263.333",\n y2: "108.917",\n gradientUnits: "userSpaceOnUse",\n children: [\n /* @__PURE__ */ c("stop", { offset: "0.08", stopColor: "#E30613" }),\n /* @__PURE__ */ c("stop", { offset: "0.72", stopColor: "#FCBE00" })\n ]\n }\n ),\n /* @__PURE__ */ e1(\n "linearGradient",\n {\n id: "paint3_linear",\n x1: "103.826",\n y1: "82.8309",\n x2: "260.001",\n y2: "82.8309",\n gradientUnits: "userSpaceOnUse",\n children: [\n /* @__PURE__ */ c("stop", { stopColor: "#FBB800" }),\n /* @__PURE__ */ c("stop", { offset: "0.47", stopColor: "#EA5B0C" }),\n /* @__PURE__ */ c("stop", { offset: "0.51", stopColor: "#EA5B0C" })\n ]\n }\n )\n ] })\n ]\n }\n), fJ = () => /* @__PURE__ */ e1(\n "svg",\n {\n width: "260",\n height: "260",\n viewBox: "0 0 260 260",\n fill: "none",\n xmlns: "http://www.w3.org/2000/svg",\n children: [\n /* @__PURE__ */ c(\n "path",\n {\n style: { mixBlendMode: "multiply" },\n d: "M223.503 149.828C214.864 160.681 204.897 170.407 193.836 178.779C184.527 171.708 172.931 167.508 161.943 163.807C146.384 158.556 130.385 154.606 114.337 151.135C96.4633 147.27 78.4386 144.088 60.3524 141.389C42.8903 138.782 12.7497 135.677 9.56161 133.021C4.81794 129.067 -1.35837 73.7941 0.264874 75.3804C12.2178 87.0659 237.741 133.553 223.503 149.828Z",\n fill: "url(#paint0_linear)"\n }\n ),\n /* @__PURE__ */ c(\n "path",\n {\n style: { mixBlendMode: "multiply" },\n d: "M142.034 205.154C174.183 195.416 202.602 176.113 223.503 149.816C202.872 171.213 121.086 171.487 98.0128 171.259C70.7897 171.007 51.649 168.133 49.6446 181.967C46.9453 200.653 114.673 211.68 142.034 205.154Z",\n fill: "url(#paint1_linear)"\n }\n ),\n /* @__PURE__ */ c(\n "path",\n {\n style: { mixBlendMode: "multiply" },\n d: "M259.996 75.2329C259.75 60.4393 246.93 51.0718 223.248 51.0011C174.182 50.8597 17.1306 64.0393 0.231053 75.4112C0.206459 75.4297 0.172641 75.4112 0.132675 75.4112C-0.921816 77.2681 4.59044 125.861 9.10968 132.495L9.56161 132.846C6.37354 127.708 144.269 118.464 221.145 105.066C250.865 99.8828 260.235 89.5285 259.996 75.2329Z",\n fill: "url(#paint2_linear)"\n }\n ),\n /* @__PURE__ */ e1("defs", { children: [\n /* @__PURE__ */ e1(\n "linearGradient",\n {\n id: "paint0_linear",\n x1: "0.000482516",\n y1: "127.063",\n x2: "224.155",\n y2: "127.063",\n gradientUnits: "userSpaceOnUse",\n children: [\n /* @__PURE__ */ c("stop", { offset: "0.18", stopColor: "#D1142F" }),\n /* @__PURE__ */ c("stop", { offset: "1", stopColor: "#FCBE00" })\n ]\n }\n ),\n /* @__PURE__ */ e1(\n "linearGradient",\n {\n id: "paint1_linear",\n x1: "49.5677",\n y1: "178.435",\n x2: "223.51",\n y2: "178.435",\n gradientUnits: "userSpaceOnUse",\n children: [\n /* @__PURE__ */ c("stop", { stopColor: "#FFD300" }),\n /* @__PURE__ */ c("stop", { offset: "1", stopColor: "#EA560D" })\n ]\n }\n ),\n /* @__PURE__ */ e1(\n "linearGradient",\n {\n id: "paint2_linear",\n x1: "75.0046",\n y1: "92.3753",\n x2: "194.279",\n y2: "91.0287",\n gradientUnits: "userSpaceOnUse",\n children: [\n /* @__PURE__ */ c("stop", { stopColor: "#D30A11" }),\n /* @__PURE__ */ c("stop", { offset: "0.28", stopColor: "#DB2A0D" }),\n /* @__PURE__ */ c("stop", { offset: "0.88", stopColor: "#EE7B02" }),\n /* @__PURE__ */ c("stop", { offset: "1", stopColor: "#F28C00" })\n ]\n }\n )\n ] })\n ]\n }\n), gJ = () => /* @__PURE__ */ e1(\n "svg",\n {\n width: "260",\n height: "260",\n viewBox: "0 0 260 260",\n fill: "none",\n xmlns: "http://www.w3.org/2000/svg",\n children: [\n /* @__PURE__ */ c(\n "path",\n {\n style: { mixBlendMode: "multiply" },\n d: "M223.528 228.464C201.068 224.478 165.417 216.509 168.896 191.07C171.574 171.485 203.979 165.775 217.52 162.618C228.271 160.118 256.944 156.663 259.859 152.097C259.859 152.097 259.859 152.097 259.859 152.121C259.907 153.246 259.944 154.376 259.968 155.512V155.713C259.992 156.78 260 157.851 260 158.934C260 183.415 254.496 206.338 244.901 226.008C244.776 226.253 244.651 226.503 244.522 226.749C243.362 228.987 235.595 230.606 223.528 228.464Z",\n fill: "url(#paint0_linear)"\n }\n ),\n /* @__PURE__ */ c(\n "path",\n {\n style: { mixBlendMode: "multiply" },\n d: "M259.968 155.713V155.512C259.968 154.734 259.927 153.957 259.899 153.184C259.93 152.839 259.918 152.492 259.863 152.149C255.539 138.173 190.341 121.548 146.545 113.265C91.1723 102.813 7.73885 91.8 11.6768 70.2622C8.58844 75.2148 4.38073 84.7577 3.30968 90.5599C-2.56903 122.53 3.358 130.539 7.8234 134.155L8.06097 134.348C56.2624 156.635 273.408 161.729 244.321 226.958L244.297 227.014C244.381 226.925 244.456 226.827 244.518 226.72L244.897 225.98C254.492 206.31 259.996 183.387 259.996 158.906C260 157.835 259.992 156.78 259.968 155.713Z",\n fill: "url(#paint1_linear)"\n }\n ),\n /* @__PURE__ */ c(\n "path",\n {\n style: { mixBlendMode: "multiply" },\n d: "M256.251 64.2587C252.132 44.7744 222.046 36.979 186.895 33.4639C87.6813 23.5425 34.036 45.2656 12.764 68.6033C9.10386 73.9706 5.06124 83.5859 3.31373 90.5599C-4.39705 121.363 3.18891 129.967 7.51741 133.889C5.47597 131.183 5.17801 128.961 4.94044 126.432C2.27086 98.4357 104.605 81.9955 213.143 102.957C252.962 110.652 260.374 83.747 256.251 64.2587Z",\n fill: "url(#paint2_linear)"\n }\n ),\n /* @__PURE__ */ e1("defs", { children: [\n /* @__PURE__ */ e1(\n "linearGradient",\n {\n id: "paint0_linear",\n x1: "168.658",\n y1: "190.784",\n x2: "265.198",\n y2: "190.784",\n gradientUnits: "userSpaceOnUse",\n children: [\n /* @__PURE__ */ c("stop", { offset: "0.11", stopColor: "#F8A800" }),\n /* @__PURE__ */ c("stop", { offset: "1", stopColor: "#D41411" })\n ]\n }\n ),\n /* @__PURE__ */ e1(\n "linearGradient",\n {\n id: "paint1_linear",\n x1: "20.817",\n y1: "148.646",\n x2: "217.464",\n y2: "148.646",\n gradientUnits: "userSpaceOnUse",\n children: [\n /* @__PURE__ */ c("stop", { stopColor: "#FCBE00" }),\n /* @__PURE__ */ c("stop", { offset: "1", stopColor: "#EA560D" })\n ]\n }\n ),\n /* @__PURE__ */ e1(\n "linearGradient",\n {\n id: "paint2_linear",\n x1: "8.16568",\n y1: "82.4424",\n x2: "264.441",\n y2: "82.4424",\n gradientUnits: "userSpaceOnUse",\n children: [\n /* @__PURE__ */ c("stop", { stopColor: "#D30A11" }),\n /* @__PURE__ */ c("stop", { offset: "0.2", stopColor: "#DA2A0E" }),\n /* @__PURE__ */ c("stop", { offset: "0.63", stopColor: "#ED7B07" }),\n /* @__PURE__ */ c("stop", { offset: "1", stopColor: "#FDC300" })\n ]\n }\n )\n ] })\n ]\n }\n), CJ = () => /* @__PURE__ */ e1(\n "svg",\n {\n width: "260",\n height: "260",\n viewBox: "0 0 260 260",\n fill: "none",\n xmlns: "http://www.w3.org/2000/svg",\n children: [\n /* @__PURE__ */ c(\n "path",\n {\n style: { mixBlendMode: "multiply" },\n d: "M97.6671 80.9939C102.708 97.0342 124.122 95.2662 147.02 93.3897C175.022 91.0894 238.996 91.0072 258.599 114.422L257.82 113.344C239.925 88.8479 216.015 69.38 188.401 56.8202C167.448 48.3975 144.953 50.4645 130.034 54.5954C115.114 58.7262 92.6161 64.9241 97.6671 80.9939Z",\n fill: "url(#paint0_linear)"\n }\n ),\n /* @__PURE__ */ c(\n "path",\n {\n style: { mixBlendMode: "multiply" },\n d: "M11.8298 130.617C7.64306 131.445 -2.80727 173.907 0.712319 178.126C0.712319 178.126 18.2215 180.019 51.9781 177.255C163.728 168.103 273.666 140.121 258.612 114.428C258.356 114.074 258.099 113.715 257.836 113.357C250.182 102.885 241.399 93.2874 231.645 84.7371C211.306 133.344 16.8117 130.617 11.8298 130.617Z",\n fill: "url(#paint1_linear)"\n }\n ),\n /* @__PURE__ */ c(\n "path",\n {\n style: { mixBlendMode: "multiply" },\n d: "M207.836 171.317C205.138 148.159 172.492 151.001 127.247 146.611C102.271 144.186 34.1271 138.77 11.626 130.689C7.47548 132.713 -1.99883 170.909 0.37714 177.498L0.676191 178.077L0.71234 178.126V178.146L0.748488 178.218C13.6537 202.826 124.667 214.63 165.643 206.884C194.043 201.511 209.548 186.026 207.836 171.317Z",\n fill: "url(#paint2_linear)"\n }\n ),\n /* @__PURE__ */ e1("defs", { children: [\n /* @__PURE__ */ e1(\n "linearGradient",\n {\n id: "paint0_linear",\n x1: "96.9408",\n y1: "82.7127",\n x2: "258.599",\n y2: "82.7127",\n gradientUnits: "userSpaceOnUse",\n children: [\n /* @__PURE__ */ c("stop", { stopColor: "#FFD300" }),\n /* @__PURE__ */ c("stop", { offset: "1", stopColor: "#EA560D" })\n ]\n }\n ),\n /* @__PURE__ */ e1(\n "linearGradient",\n {\n id: "paint1_linear",\n x1: "-0.000800403",\n y1: "131.747",\n x2: "259.989",\n y2: "131.747",\n gradientUnits: "userSpaceOnUse",\n children: [\n /* @__PURE__ */ c("stop", { stopColor: "#FEC700" }),\n /* @__PURE__ */ c("stop", { offset: "1", stopColor: "#D55217" })\n ]\n }\n ),\n /* @__PURE__ */ e1(\n "linearGradient",\n {\n id: "paint2_linear",\n x1: "17.0418",\n y1: "208.945",\n x2: "182.798",\n y2: "121.04",\n gradientUnits: "userSpaceOnUse",\n children: [\n /* @__PURE__ */ c("stop", { offset: "0.33", stopColor: "#D30A11" }),\n /* @__PURE__ */ c("stop", { offset: "0.5", stopColor: "#DA2A0D" }),\n /* @__PURE__ */ c("stop", { offset: "0.89", stopColor: "#ED7B03" }),\n /* @__PURE__ */ c("stop", { offset: "1", stopColor: "#F39400" })\n ]\n }\n )\n ] })\n ]\n }\n), mJ = () => /* @__PURE__ */ e1(\n "svg",\n {\n width: "260",\n height: "260",\n viewBox: "0 0 260 260",\n fill: "none",\n xmlns: "http://www.w3.org/2000/svg",\n children: [\n /* @__PURE__ */ c(\n "path",\n {\n style: { mixBlendMode: "multiply" },\n d: "M259.3 126.981C254.276 138.061 247.883 148.468 240.272 157.96C197.754 139.811 34.1013 178.407 26.727 173.18C24.3977 170.615 21.2543 167.256 19.0516 164.592C11.431 154.331 11.2873 154.129 8.01056 148.222C2.29166 136.705 2.17879 136.486 0 130.035C0 130.035 33.9645 121.355 64.0606 116.275C196.645 93.8956 267.916 110.091 259.3 126.981Z",\n fill: "url(#paint0_linear)"\n }\n ),\n /* @__PURE__ */ c(\n "path",\n {\n style: { mixBlendMode: "multiply" },\n d: "M201.855 191.49C227.12 176.327 247.164 153.824 259.317 126.981C246.354 149.597 176.855 167.342 157.181 172.103C133.97 177.712 117.07 179.358 118.335 191.572C120.022 208.034 179.995 202.9 201.855 191.49Z",\n fill: "url(#paint1_linear)"\n }\n ),\n /* @__PURE__ */ c(\n "path",\n {\n style: { mixBlendMode: "multiply" },\n d: "M237.68 90.1332C229.731 96.5123 216.86 97.3708 207.115 99.5119C174.225 106.729 141.444 113.231 109.117 122.866C44.2838 142.198 23.2587 165.29 26.727 173.18C24.3977 170.615 21.2543 167.256 19.0516 164.592C11.431 154.331 11.2873 154.129 8.01056 148.222C2.29166 136.705 2.17879 136.486 0 130.036C0 130.036 12.2621 113.084 52.7288 92.3633C98.9144 68.7147 150.798 58.6827 202.416 59.0076C211.404 59.0658 221.361 59.4215 229.741 62.9821C240.355 67.4936 248.786 81.2128 237.68 90.1332Z",\n fill: "url(#paint2_linear)"\n }\n ),\n /* @__PURE__ */ e1("defs", { children: [\n /* @__PURE__ */ e1(\n "linearGradient",\n {\n id: "paint0_linear",\n x1: "10.4796",\n y1: "171.619",\n x2: "256.494",\n y2: "109.642",\n gradientUnits: "userSpaceOnUse",\n children: [\n /* @__PURE__ */ c("stop", { offset: "0.33", stopColor: "#D30A11" }),\n /* @__PURE__ */ c("stop", { offset: "0.5", stopColor: "#DA2A0D" }),\n /* @__PURE__ */ c("stop", { offset: "0.89", stopColor: "#ED7B03" }),\n /* @__PURE__ */ c("stop", { offset: "1", stopColor: "#F39400" })\n ]\n }\n ),\n /* @__PURE__ */ e1(\n "linearGradient",\n {\n id: "paint1_linear",\n x1: "117.497",\n y1: "188.573",\n x2: "265.431",\n y2: "151.305",\n gradientUnits: "userSpaceOnUse",\n children: [\n /* @__PURE__ */ c("stop", { stopColor: "#FFD300" }),\n /* @__PURE__ */ c("stop", { offset: "1", stopColor: "#EA560D" })\n ]\n }\n ),\n /* @__PURE__ */ e1(\n "linearGradient",\n {\n id: "paint2_linear",\n x1: "2.13052",\n y1: "138.478",\n x2: "242.752",\n y2: "77.8594",\n gradientUnits: "userSpaceOnUse",\n children: [\n /* @__PURE__ */ c("stop", { stopColor: "#FEC700" }),\n /* @__PURE__ */ c("stop", { offset: "1", stopColor: "#D55217" })\n ]\n }\n )\n ] })\n ]\n }\n), LJ = () => /* @__PURE__ */ e1(\n "svg",\n {\n width: "260",\n height: "260",\n viewBox: "0 0 260 260",\n fill: "none",\n xmlns: "http://www.w3.org/2000/svg",\n children: [\n /* @__PURE__ */ c(\n "path",\n {\n style: { mixBlendMode: "multiply" },\n d: "M259.278 30.7174C236.199 22.9685 212.832 40.2526 195.686 53.6367C146.119 92.283 104.438 146.063 86.561 206.898C82.2901 221.45 80.6166 236.416 79.2851 251.492C78.783 257.149 26.1414 253.096 25.4429 245.671C24.9299 240.382 25.2137 227.802 26.1705 220.66C34.9235 154.067 68.7859 100.137 108.876 48.3543C117.931 36.6619 134.732 18.6793 146.65 9.76988C147.926 8.74968 149.305 7.86456 150.764 7.1287C154.071 5.57528 251.722 1.42798 259.278 30.7174Z",\n fill: "url(#paint0_linear)"\n }\n ),\n /* @__PURE__ */ c(\n "path",\n {\n style: { mixBlendMode: "multiply" },\n d: "M150.975 7.05962C156.796 5.46254 251.827 1.84275 259.278 30.7174L259.343 30.7465V30.7684C259.467 31.0414 259.558 31.3285 259.613 31.6233C263 50.7118 243.969 102.622 210.54 152.59C179.693 198.716 158.324 214.225 135.852 202.921C116.778 193.019 118.732 164.319 134.204 121.714C148.792 81.5037 179.326 15.0632 150.975 7.05962Z",\n fill: "url(#paint1_linear)"\n }\n ),\n /* @__PURE__ */ c(\n "path",\n {\n style: { mixBlendMode: "multiply" },\n d: "M111.423 57.2238C120.216 64.9982 65.4463 147.719 74.2429 228.362C76.3929 248.065 79.1105 249.142 79.2742 251.492C78.7722 257.149 26.4361 253.06 25.4321 245.671C18.7564 197.344 25.4321 90.7587 60.1784 47.896C62.936 44.4435 108.498 54.6408 111.423 57.2238Z",\n fill: "url(#paint2_linear)"\n }\n ),\n /* @__PURE__ */ c(\n "path",\n {\n style: { mixBlendMode: "multiply" },\n d: "M111.423 57.2238C88.5037 53.6258 47.2999 164.402 41.9048 176.764C35.5965 191.316 -2.23855 185.466 0.104313 169.852C10.4871 100.625 29.0699 70.9753 60.1602 47.8814C60.4261 47.6643 60.7347 47.5057 61.066 47.4158C67.6144 45.735 103.03 53.5312 110.273 56.6053C110.834 56.8418 111.685 57.2638 111.423 57.2238Z",\n fill: "url(#paint3_linear)"\n }\n ),\n /* @__PURE__ */ e1("defs", { children: [\n /* @__PURE__ */ e1(\n "linearGradient",\n {\n id: "paint0_linear",\n x1: "26.3095",\n y1: "242.616",\n x2: "217.75",\n y2: "-16.964",\n gradientUnits: "userSpaceOnUse",\n children: [\n /* @__PURE__ */ c("stop", { stopColor: "#FFD300" }),\n /* @__PURE__ */ c("stop", { offset: "1", stopColor: "#EA560D" })\n ]\n }\n ),\n /* @__PURE__ */ e1(\n "linearGradient",\n {\n id: "paint1_linear",\n x1: "-320513",\n y1: "-706264",\n x2: "-238693",\n y2: "-706264",\n gradientUnits: "userSpaceOnUse",\n children: [\n /* @__PURE__ */ c("stop", { stopColor: "#FFD300" }),\n /* @__PURE__ */ c("stop", { offset: "1", stopColor: "#EA560D" })\n ]\n }\n ),\n /* @__PURE__ */ e1(\n "linearGradient",\n {\n id: "paint2_linear",\n x1: "6.21052",\n y1: "225.911",\n x2: "129.273",\n y2: "59.0465",\n gradientUnits: "userSpaceOnUse",\n children: [\n /* @__PURE__ */ c("stop", { stopColor: "#FEC700" }),\n /* @__PURE__ */ c("stop", { offset: "1", stopColor: "#D55217" })\n ]\n }\n ),\n /* @__PURE__ */ e1(\n "linearGradient",\n {\n id: "paint3_linear",\n x1: "-1.09826",\n y1: "168.582",\n x2: "96.8639",\n y2: "35.7516",\n gradientUnits: "userSpaceOnUse",\n children: [\n /* @__PURE__ */ c("stop", { offset: "0.33", stopColor: "#D30A11" }),\n /* @__PURE__ */ c("stop", { offset: "0.5", stopColor: "#DA2A0D" }),\n /* @__PURE__ */ c("stop", { offset: "0.89", stopColor: "#ED7B03" }),\n /* @__PURE__ */ c("stop", { offset: "1", stopColor: "#F39400" })\n ]\n }\n )\n ] })\n ]\n }\n), vJ = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({\n __proto__: null,\n RibbonBlue1: HK,\n RibbonBlue2: VK,\n RibbonBlue3: PK,\n RibbonBlue4: FK,\n RibbonBlue5: XK,\n RibbonBlue6: UK,\n RibbonBlue7: YK,\n RibbonBrand1: GK,\n RibbonBrand2: QK,\n RibbonBrand3: ZK,\n RibbonBrand4: jK,\n RibbonBrand5: KK,\n RibbonBrand6: JK,\n RibbonBrand7: _K,\n RibbonBrand8: $K,\n RibbonGreen1: eJ,\n RibbonGreen2: tJ,\n RibbonGreen3: oJ,\n RibbonGreen4: rJ,\n RibbonGreen5: nJ,\n RibbonGreen6: iJ,\n RibbonGreen7: aJ,\n RibbonGreen8: sJ,\n RibbonMagenta1: cJ,\n RibbonMagenta2: lJ,\n RibbonMagenta3: pJ,\n RibbonMagenta4: dJ,\n RibbonMagenta5: bJ,\n RibbonMagenta6: MJ,\n RibbonMagenta7: AJ,\n RibbonMagenta8: uJ,\n RibbonOrange1: zJ,\n RibbonOrange2: hJ,\n RibbonOrange3: OJ,\n RibbonOrange4: fJ,\n RibbonOrange5: gJ,\n RibbonOrange6: CJ,\n RibbonOrange7: mJ,\n RibbonOrange8: LJ\n}, Symbol.toStringTag, { value: "Module" }));\nfunction qJ(e) {\n return /* @__PURE__ */ c(Cl, { className: "ribbon-svg", ...e });\n}\nconst s$ = Sr(vJ)(qJ), yJ = styled_components__WEBPACK_IMPORTED_MODULE_1___default().div(\n ({ theme: { colors: e, typography: t, lineHeight: o } }) => (0,styled_components__WEBPACK_IMPORTED_MODULE_1__.css)`\n display: flex;\n color: ${e.textIcon.textPrimary};\n justify-content: space-between;\n font-size: ${t.t12};\n line-height: ${o.lh24};\n padding: 0 8px;\n\n label {\n width: auto;\n }\n &:hover {\n background-color: ${e.backgrounds.bgHoverPrimary};\n cursor: pointer;\n }\n &:active {\n background-color: ${e.backgrounds.bgSelected};\n cursor: pointer;\n }\n `\n), wJ = (styled_components__WEBPACK_IMPORTED_MODULE_1___default().div)`\n display: flex;\n align-items: baseline;\n`, xJ = styled_components__WEBPACK_IMPORTED_MODULE_1___default().div(\n ({ theme: { mixins: e }, isMulti: t }) => (0,styled_components__WEBPACK_IMPORTED_MODULE_1__.css)`\n ${e.ellipsis};\n\n ${t && (0,styled_components__WEBPACK_IMPORTED_MODULE_1__.css)`\n padding-left: 8px;\n `}\n &:not(:last-child) {\n max-width: 70%;\n }\n `\n), WJ = styled_components__WEBPACK_IMPORTED_MODULE_1___default().span(\n ({ theme: { colors: e, spacings: t } }) => (0,styled_components__WEBPACK_IMPORTED_MODULE_1__.css)`\n color: ${e.textIcon.textLowemphasis};\n text-align: right;\n padding-left: ${t.sp8};\n `\n), RJ = (styled_components__WEBPACK_IMPORTED_MODULE_1___default().div)`\n display: flex;\n justify-content: space-between;\n`, BJ = ({\n item: e,\n highlightText: t,\n onItemClick: o,\n isFocused: n,\n index: r,\n isMulti: i,\n setFocus: a,\n onOptionClick: s,\n selectedOptions: l\n}) => {\n const p = (0,react__WEBPACK_IMPORTED_MODULE_0__.useRef)(null);\n (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => {\n n && p.current && p.current.focus();\n }, [n]);\n const d = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)(\n (M) => {\n i ? o(M, l) : o(M, e), a(r);\n },\n [e, r, a, o, l, s]\n ), b = e.text;\n return /* @__PURE__ */ c("label", { htmlFor: "checkbox", onClick: i ? s(e) : null, children: /* @__PURE__ */ e1(\n yJ,\n {\n tabIndex: n ? 1 : -1,\n ref: p,\n onClick: d,\n onKeyPress: d,\n children: [\n /* @__PURE__ */ e1(wJ, { children: [\n i && /* @__PURE__ */ c(\n yt,\n {\n checked: l.has(e),\n onChange: s(e),\n isRequired: !0,\n isRtl: !0,\n id: "checkbox"\n }\n ),\n /* @__PURE__ */ c(xJ, { isMulti: i, children: b })\n ] }),\n /* @__PURE__ */ c(RJ, { children: /* @__PURE__ */ c(WJ, { children: e == null ? void 0 : e.category }) })\n ]\n }\n ) });\n}, SJ = styled_components__WEBPACK_IMPORTED_MODULE_1___default().ul(\n ({ theme: e }) => (0,styled_components__WEBPACK_IMPORTED_MODULE_1__.css)`\n ${e.mixins.listReset}\n .scrollbar-container {\n label {\n &:first-child {\n padding-bottom: 0px;\n }\n &:last-child {\n padding-bottom: 0px;\n }\n padding-bottom: 4px;\n }\n }\n `\n), Qc = ({\n listData: e,\n isMulti: t,\n ...o\n}) => {\n const [n, r] = av(e.length + 1), [i, a] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(\n new Set("")\n ), s = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)(\n (l) => () => {\n i.has(l) ? i.delete(l) : i.add(l);\n const p = new Set(i);\n a(p);\n },\n [i]\n );\n return /* @__PURE__ */ c(SJ, { children: /* @__PURE__ */ c(j4, { children: e.map((l, p) => /* @__PURE__ */ c(\n BJ,\n {\n setFocus: r,\n index: p,\n isFocused: n === p + 1,\n item: l,\n ...o,\n isMulti: t,\n onOptionClick: s,\n selectedOptions: i\n },\n `${l.text}-${p}`\n )) }) });\n};\nfunction EJ({\n autocompleteListData: e,\n recentlyListData: t,\n isLoading: o,\n isDisabled: n,\n getValue: r,\n onSearchResultRowClick: i,\n isMulti: a,\n charCount: s,\n isBodyGenerated: l,\n dropdownBodyWidth: p,\n ...d\n}, b) {\n const [M, u] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(""), [A, z] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(!1), [f, O] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(null), [h, g] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)([]), [v, L] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(), y = () => {\n !M && !n && (F(), z(!0));\n }, B = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)(\n (m, k) => {\n a && (g([...k]), i && i(m, k), z(!0)), i ? (i(m, k), a && z(!0)) : (u(k), z(!1));\n },\n [i]\n ), X = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)(() => {\n if (o)\n return O(\n /* @__PURE__ */ e1(i5, { children: [\n /* @__PURE__ */ c(Tp, { type: "circle", progress: 50 }),\n " Loading"\n ] })\n ), null;\n let m = [];\n if ((e && h || M) && (m = e.filter(\n (k) => {\n var x;\n return a && !Array.isArray(h) ? k.text.toLowerCase().includes(h == null ? void 0 : h.toLowerCase()) : a ? (x = Array.from(M)) == null ? void 0 : x.map((N) => {\n var V;\n N.toLowerCase().includes((V = k.text) == null ? void 0 : V.toLowerCase());\n }) : M ? k.text.toLowerCase().includes(M == null ? void 0 : M.toLowerCase()) && k : k.text.toLowerCase().includes(h == null ? void 0 : h.toLowerCase());\n }\n )), L(e.length), m.length === 0)\n return O(\n /* @__PURE__ */ e1(i5, { children: [\n /* @__PURE__ */ c(Z1, { name: "Disabled", size: "xs" }),\n " No results found"\n ] })\n ), null;\n O(\n /* @__PURE__ */ c(\n Qc,\n {\n listData: m,\n onItemClick: B,\n highlightText: a ? h : M,\n isMulti: a\n }\n )\n );\n }, [\n e,\n o,\n M,\n h,\n B,\n a\n ]), F = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)(() => {\n t != null && t.length && !n && O(\n /* @__PURE__ */ e1(s0, { children: [\n /* @__PURE__ */ c(ZB, { children: "Recently searched" }),\n /* @__PURE__ */ c(\n Qc,\n {\n listData: t,\n onItemClick: B,\n isMulti: a\n }\n )\n ] })\n );\n }, [n, t, B]);\n (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => {\n !n && M !== void 0 && ((a ? h !== null && typeof h == "string" && s && h.length >= s : s && M.length >= s || o) ? X() : M.length === 0 && F());\n }, [\n o,\n M,\n X,\n F,\n n,\n A,\n h,\n v\n ]);\n const T = (m) => z(m), w = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)(\n (m) => {\n const { value: k } = m.currentTarget;\n a ? g(k || "") : u(k || "");\n let x = s || 3;\n (k == null ? void 0 : k.length) >= x || (k == null ? void 0 : k.length) === 0 ? !A && z(!0) : A && z(!1);\n },\n [A, v]\n );\n (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => {\n r && a && h.length > 0 && r(h);\n }, [h.toString()]), (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => {\n r && !a && M && r(M);\n }, [M]), (0,react__WEBPACK_IMPORTED_MODULE_0__.useImperativeHandle)(b, () => ({\n handleDropdownState(m) {\n T(m);\n },\n setInputValue(m) {\n u(m);\n },\n setSelectedValue(m) {\n g(m);\n }\n }));\n const H = () => {\n let m = [];\n if (Array.isArray(h))\n return h == null || h.map((k) => {\n m.push(k.text);\n }), m == null ? void 0 : m.toString().replace(/,/g, ", ");\n }, C = () => {\n let m = M;\n if (m != null)\n return m == null ? void 0 : m.text;\n }, q = (m) => {\n r && a && m == "" && (g([]), r([])), r && !a && m == "" && (u(m), r(m));\n };\n return /* @__PURE__ */ c(QB, { onClick: y, children: /* @__PURE__ */ c(\n it,\n {\n body: f,\n onChange: T,\n isShowed: A,\n isDisabled: n,\n isBodyGenerated: l,\n dropdownBodyWidth: p || "100%",\n children: /* @__PURE__ */ c(\n G4,\n {\n onChange: w,\n value: a ? H : C(),\n getValue: q,\n isDisabled: n,\n ...d\n }\n )\n }\n ) });\n}\nconst c$ = (0,react__WEBPACK_IMPORTED_MODULE_0__.forwardRef)(EJ), kJ = "data:image/gif;base64,R0lGODlh8ACCAPf/AL7r6bbp5hK3rxy6so7c2On497fp5mbQy3zX0h66shC2rlrNx0jHwfH6+tjy8Sm+tsrv7TLAuS2/uDbCu6zm44ba1u/6+Zrg3MTt6krIweL29aDi38Ps6jrDvLDn5FTLxe75+WDOyev4+Ijb1uD19Mzv7YDY1EzIwl7OyBe4sE7JwwKyqc/w7ur49zTBuuX29tnz8ozc2CO8tAi0q6bk4cDs6TDAuT3EvXPUz4Ta1VfMxgOyqpLe2rrq5/b8/Cu+t5Dd2drz8tLx7/X8+ya9tXbV0BS4r6Tj4GzSzUbHwH/Y0w62rWTQypbf22vSzLLn5VHKxKnl4sfu7FPKxHjW0arl4hq5sZvg3dPx8ELFv9719HTV0Irb18bt60DFvtTx8DnCvN7087To5Si+tnDTzqjk4a7m5Nr08lbLxa7m41zNyGnRzB+7s+j3983v7mPPynrW0vD6+aHi30/Jw0PGv8bu6z/Evqzl4xm5sQGyqeb39vr9/TPBuv3+/u35+AWzqvP7+m7Tzg21rfz+/gq0rPb8+wu1rP7+/g+2rhW4sEXGwNby8Qazq7zq6Pj8/Pv9/dfy8fn9/Oz5+Mnu7PT7+93089Xy8PL7+gy1rZ7h3oPZ1SW8taPj4PX7+wm0rILZ1G/Tzpng3Mju7Ae0q7Xo5jjCuxu6snHUzwazqp/i3tHx74TZ1SW9tV3OyGLPydDw7yi9tgezqye9tQSzqg61rf7//2jRyyS8tS/AuOf39gSyqvn9/ZTe2vf8/Pz+/fv+/b3r6Nz085jf3CG7tNDw7hO3r5Xf29Ty8Bi5sfv+/vT7+gy1rLvq5/r9/Nby8Ivc15zh3T7Eve35+c7v7mrRzFvNx/P7+9Hw74Xa1ez4+PL6+gu0rBi5sCS8tETGv8Hs6ZXe2/j9/Of495ff25Hd2WTPytTy8bPo5Ri4sNz08vn8/JTe2+T29f3//rnq59bz8dXy8d3184vc2JLd2uf397/r6b3q6OH29bnp54zc1zzDveL19dfz8XnW0QCyqdPT0yH/C05FVFNDQVBFMi4wAwEAAAAh/wtYTVAgRGF0YVhNUDw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuNi1jMTQwIDc5LjE2MDQ1MSwgMjAxNy8wNS8wNi0wMTowODoyMSAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENDIChNYWNpbnRvc2gpIiB4bXBNTTpJbnN0YW5jZUlEPSJ4bXAuaWlkOkYxRDhDRjRDQ0NCRDExRTg4Qzc3RDY1N0Y5QjUwMEUxIiB4bXBNTTpEb2N1bWVudElEPSJ4bXAuZGlkOkYxRDhDRjREQ0NCRDExRTg4Qzc3RDY1N0Y5QjUwMEUxIj4gPHhtcE1NOkRlcml2ZWRGcm9tIHN0UmVmOmluc3RhbmNlSUQ9InhtcC5paWQ6RjFEOENGNEFDQ0JEMTFFODhDNzdENjU3RjlCNTAwRTEiIHN0UmVmOmRvY3VtZW50SUQ9InhtcC5kaWQ6RjFEOENGNEJDQ0JEMTFFODhDNzdENjU3RjlCNTAwRTEiLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/eHBhY2tldCBlbmQ9InIiPz4B//79/Pv6+fj39vX08/Lx8O/u7ezr6uno5+bl5OPi4eDf3t3c29rZ2NfW1dTT0tHQz87NzMvKycjHxsXEw8LBwL++vby7urm4t7a1tLOysbCvrq2sq6qpqKempaSjoqGgn56dnJuamZiXlpWUk5KRkI+OjYyLiomIh4aFhIOCgYB/fn18e3p5eHd2dXRzcnFwb25tbGtqaWhnZmVkY2JhYF9eXVxbWllYV1ZVVFNSUVBPTk1MS0pJSEdGRURDQkFAPz49PDs6OTg3NjU0MzIxMC8uLSwrKikoJyYlJCMiISAfHh0cGxoZGBcWFRQTEhEQDw4NDAsKCQgHBgUEAwIBAAAh+QQJBAD/ACwAAAAA8ACCAAAI/wD/CRxIsKDBgwgTKlzIsKHDhxAjSpxIsaLFixgzatzIsaPHjyBDihxJsqTJkyhTqlzJsqXLlzBjypxJs6bNmzhz6tzJs6fPn0CDCh1KtKjRo0iTKl3KtKnTp1CjSp1KtarVq1izat3KtavXr2DDih1LtqzZs2jTql3Ltq3bt3Djyp1Lt67du3jz6t3Lt6/fv4ADCx5MuLDhw4gTK17MuLHjx5AjS55MubLly5gza97MubPnz6BDix5NurTp06hTq17NurXr17Bjy55Nu7bt27hz697Nu7fv38CDCx9OvLjx48iTK1/OvLnz59CjS59Ovbr169iza9/Ovbv37+DDix0fT768+fPo06tfz769+/fw48ufT7++/fv48y8NCAAh+QQJBAD/ACwAAAAA8ACCAAAI/wD/CRxIsKDBgwgTKlzIsKHDhxAjSpxIsaLFixgzatzIsaPHjyBDihxJsqTJkyhTqlzJsqXLlzBjypxJs6bNmzhz6tzJs6fPn0CDCh1KtKjRo0iTKl3KtKnTp1CjSp1KtarVq1izaoV6B9zWrzfR+VsFtmzMVf7S4jDLluWPtGkVtZ1r8g5cuHLp6gWp6C7evYA3OsjjF+7awIgrTil8l2zixw+zbWPcGLLlhWgpw81j77Jng2I1w02Q7bNpcKL9gjH9+W3qu15ZQ3bw2u8d2Zb71vb3A/dl3anzOPB9GczrcsQvZ0sgelvp5JYdTKbsGLplu4wTWP9cjvHt7Z5dw6hdDd6zven+hJfnDhf5+s9i0T1/f3lVnur08+vfz7+///8ABijggAQWaOCBCCao4IIMNujggxBGKOGEFFZo4YUYZqjhhhx26OGHIIYo4ogklmjiiSimqOKKLLbo4oswxijjjDTWaOONOOao44489ujjj0AGKeSQRBZp5JFIJqnkkkw26eSTUEYp5ZRUVmnllVhmqeWWXHbp5ZdghinmmGSWaeaZaKbZZEAAIfkECQQA/wAsAAAAAPAAggAACP8A/wkcSLCgwYMIEypcyLChw4cQI0qcSLGixYsYM2rcyLGjx48gQ4ocSbKkyZMoU6pcydKjvZYwY8qcOdCevzw4c6Ird8cBzZ9Ag1q846+o0aM3f0zhKbSp06f/HCCdejTPNjCroGrdyjIP1a9F8yRYlY2r2bMgvYJdm0fRHbRw41ZUu7YuOhxy8+pVSLeuXXB7Awf+4bdw0R8vBStGS9iw4XJlF0uG2thxYXSJJ2sGWtly4XKbQ89U5NnyD5+iU6ssV9rytsyqY4/E0dpzVtm4Q97ZvXtVgtprp+QeTtLBKkXogE9VRLz5SHurkisvyty5dZB3wPRtXf26d44OcEj/r433u/mN5bYBv32+vUUHYNa7n18RnPrSeWDT398wW/zSCUTG34AM4bBdYWAQqOBC9txnGWALRmhQNr9Z9paEGA5EoWM/ZOihQBv6lQdqH2YY4lqglfihAw5StY2AKmbYIFjsxeghOF8lYGOMrE114Y4lVmhUgkCqaA9dIxbJo1EpKqlicujA6KSHq+RR45RYZqnlllx26eWXYIYp5phklmnmmWimqeaabLbp5ptwxinnnHTWaeedeOap55589unnn4AGKuighBZq6KGIJqrooow26uijkEYq6aSUVmrppZhmqummnHbq6aeghirqqKSWauqpqKaq6qqsturqq7DGIyrrrLTWauutuOaq66689urrr8AGK+ywxBZr7LHIJquspwEBACH5BAkEAP8ALAAAAADwAIIAAAj/AP8JHEiwoMGDCBMqXMiwocOHECNKnEixosWLGDNq3Mixo8ePIEOKHEmypMmTKFOqXMmypcuXMGNizHYHh6IfOBPk2cmzJ7pydxzIHEq06EEH4MqBQZfHn9OnUKNKzfNjClCjWLOitDeFqdSvYMPm2QZmldazaDM6wIEurNu3X/MkWJUtrd27C+8ogsu3L9Q8iu7gHYwX3A+/iBOjw0G4MdY7hxNLRowOnOPLLx2Amcw58Q97mEOjLLets2nE5eqKXv3RXuTTsPmiA826dkYcpWPr5lvOtu+J2TbvHg73h9DfyBfaS0C8+dtttJNLJwgut/PrYM1On45jNzow5YDe/xlPnnz4clOYE5+yPXn303KBHofoYJWitroVtfdd7nRZ1RjZswp+p+m332qrdJbHFNF1dAcYTZlm4IGXJTjZggCGtBaBkzFGYWPgcKZIhiWR1pl2H95lj3V+/SDYSpqdmKJdK0rmoUvVXdjgjFhxKNuLMAU3WQIk8khUjn39UORLOESIGBhGauWAem+NiFWNiVkWJVbZ7OUWilxS2ReQWxq1ipNQbQNmVtmI+dYPZZ5lj4/Q3dUmX3nMFyeXwjlFZlp3vtXbnmi9t6ZdDrAo1TZLElrUHYeqqChUkTpqaUYhfpXApZx61J9Uf3YqqkVuQjnqqRfZ42SeqLZa0af+DKjq6qwRtYVOo7TmetCZlerq66/ABivssMQWa+yxyCar7LLMNuvss9BGK+201FZr7bXYZqvtttx26+234IYr7rjklmvuueimq+667Lbr7rvwxivvvPTWa++9+Oar77789uvvvwAHLPDABBds8MEIJ6zwwgw37PDDEEcs8cQUV2zxxRhnrPHGHHfs8ccghyzyyCSXbPLJKKes8sost+zyyzDHLPPMNNdMcUAAIfkECQQA/wAsAAAAAPAAggAACP8A/wkcSLCgwYMIEypcyLChw4cQI0qcSLGixYsYM2rcyLGjx48gQ4ocSbKkyZMoU6pcybKly5cwY2LMdgeHoh84E+TZybMnunJ3HMgcSrToQQfgyoFBl8ef06dQo0rN82MKUKNYs6K0N4Wp1K9gw+bZBmaV1rNoMzrAgS6s27df8yRYlS2t3bsL7yiCy7cv1DyK7uAdjBfcD7+IE6PDQbgx1juHE0tGjA6c48svHYCZzDnxD3uYQ6Mst62zacTl6ope/dFe5NOw+aIDzbp2RhylY+vmW86274nZNu8eDveH0N/IF9pLQLz52220k0snCC638+tgzU6fjmM3OjDlgN7/GU+efPhyU5gTn7I9effTcoEeh+hglaK2uhW1913udFnVGNmzCn6n6bffaqt0lscU0XV0BxhNmWbggZclONmCAIa0FoGTMUZhYxZKpkiGJZHWmXYf3mWPdX79INhKmp2Yol3ZsNiXhy5Vd2GDM2Klnl/ovAhTcJMlQGKPQ03h2ZEv4RAhYmAgaRQ4iYHBJEwrSmaZlDI5YONbvWmVzY99CcnlS6/xhaKYZL71w5kxhajmXWPylcd8cLLkpV9rplUnmHm+tFdffdq1Z1jbXBloSXf4xZ5jWWa3aEtpuvUmZlR+lcCkLDUqm6J39SeVmZyeVGlYpF7WZpSlpuQpXGGu/2bPk3e2mpJwb6HD31Ox2lqSA31taVtb6IDqa0dKFofcKnkUemxIHKL67LR58XUptdgaNOhbqWaL7ZdS6ertuP/YwxeO5GIr6lt4pjvtqVJt6m62586Lrblw8WivrXKCJe6+z24bFqsAHwtvVL0W3Cq4UTmr8KJ8dftwnq+6ZezESFYMVh4Yt5qppR2Xum5YE4Yc6MhgJWzymSh/JezKcGZz3sw0XwzzzTjnrPPOPPfs889ABy300EQXbfTRSCet9NJMN+3001BHLfXUVFdt9dVYZ6311lx37fXXYIct9thkl2322WinrfbabLft9ttwxy333HTXbffdeOet99589xvt99+ABy744IQXbvjhiCeu+OKMN+7445BDHhAAIfkECQQA/wAsAAAAAPAAggAACP8A/wkcSLCgwYMIEypcyLChw4cQI0qcSLGixYsYM2rcyLGjx48gQ4ocSbKkyZMoU6pcybKly5cwY2LMdgeHoh84E+TZybMnunJ3HMgcSrToQQfgyoFBl8ef06dQo0rN82MKUKNYs6K0N4Wp1K9gw+bZBmaV1rNoMzrAgS6s27df8yRYlS2t3bsL7yiCy7cv1DyK7uAdjBfcD7+IE6PDQbgx1juHE0tGjA6c48svHYCZzDnxD3uYQ6Mst62zacTl6ope/dFe5NOw+aIDzbp2RhylY+vmW86274nZNu8eDveH0N/IF9pLQLz52220k0snCC638+tgzU6fjmM3OjDlgN7/GU+efPhyU5gTn7I9effTcoEeh+hglaK2uhW1913udFnVGNmzCn6n6bffaqt0lscU0XV0BxhNmWbggZclONmCAIa0FoGTMUZhY+BwpkiGJZHWmXYf3mWPdX79INhKmp2Yol0OcNiXhy5Vd2GDM2Klnl/ovAhTcJMlQGKPQ03h2ZEv4RAhYmAgaVSIUDIJ04qSWSalTA6wCFdvWmXzY19CbvnSa3yhGOaYb/1gZkwW9qXmWWLylcd8b7KUjZduzYlWnW+BmWdLSsrZWJdubWPloCU54Bd7jmGZHaMtCVdcaFRKlQClLN3RFzqL3tWfVGVyehKabpV6GZtRmpqSo7zV/2bPk3e6mtJecKHD31OC2lrSnnxpaVtboPp60nttIrdKHn4aGxKbYKnq7LQF2cOXm9RmexCyqWrrLUHQSqXrt9/C+haO5GYbp1t4pjutpWFt6q62Nn6F7rzGmusWj/jammlY4/br7KhutSqwsfCC1evBroYblbAMu8pXqBFvmQ1c21Rsq6fJamwqx25N6DGj3Co8MqcEh3XvyWamHC3LjLr8lbQw9ygzqTXneXNUNOf84c5Q9ezzgUA/JfTQ7ZU8M9JSgqwy00g6bTLUM1r7lshUU3hp1inyGVUeXKeI6lf8hi0drn2afaDSUmGtdnJSfxXw29PxVTbdtjkMFaR4J8pXqFtz9+1b3F9BLLhtfLl9+GoJx9Xu4qKtGxbfkK8G7HOPV34Z2iFrzhrhU2XuOWH1foXt6JhJHpbhqA+WTelSbSN662kVDZXBtLvutb25N8Y2WHf3rhXssVMsPFGgf2Xk8Xc1HhbuzGuFKJnRp/W7VCtXj9XYUW1ztPYyXa787OAXBfqI5eMlc/bpn4W29+0TVmcC5MefVTY4GG///vz37///AAygAAdIwAIa8IAITKACF8jABjrwgRCMoAQnSMEKWvCCGMzgPwICACH5BAkEAP8ALAAAAADwAIIAAAj/AP8JHEiwoMGDCBMqXMiwocOHECNKnEixosWLGDNq3Mixo8ePIEOKHEmypMmTKFOqXMmypcuXMGNizHYHh6IfOBPk2cmzJ7pydxzIHEq06EEH4MqBQZfHn9OnUKNKzfNjClCjWLOitDeFqdSvYMPm2QZmldazaDM6wIEurNu3X/MkWJUtrd27C+8ogsu3L9Q8iu7gHYwX3A+/iBOjw0G4MdY7hxNLRowOnOPLLx2Amcw58Q97mEOjLLets2nE5eqKXv3RXuTTsPmiA826dkYcpWPr5lvOtu+J2TbvHg73h9DfyBfaS0C8+dtttJNLJwgut/PrYM1On45jNzow5YDe/xlPnnz4clOYE5+yPXn303KBHofoYJWitroVtfdd7nRZ1RjZswp+p+m332qrdJbHFNF1dAcYTZlm4IGXJTjZggCGtBaBkzFGYWPgcKZIhiWR1pl2H95lj3V+/SDYSpqdmKJdDnDYl4cuVXdhgzNipZ5f6LwIU3CTJUBij0NN4dmRL+EQIWJgIGlUiFAyCdOKklkmpUwOsAhXb1pl82NfQm750mt8oRjmmG/9YGZMFval5lli8pXHfG+ylI2Xbs2JVp1vgZlnS0rK2ViXbm1j5aAlOeAXe45hmR2jLQlXXGhUSpUApSzd0Rc6i97Vn1RlcnoSmm6VehmbUZqakqO81f9mz5N3uprSXnChw99Tgtpa0p58aWlbW6D6etJ7bSK3Sh5+GhsSm2Cp6uy0BdnDl5vUZnsQsqlq6y1B0Eql67ffwvoWjuRmG6dbeKY7raVhbequtjZ+he68xprrFo/42pppWOP26+yobrUqsLHwgtXrwa6GG5WwDLvKV6gRb5kNXNtUbKunyWpsKsduTegxo9wqPDKnBId178lmphwty4y6/JW0MPcoM6k153lzVDTn/OHOUPXs84FAPyX00O2VPDPSUoKsMtNIOm0y1DPqC5bIVFN4adYp8hlVHlyniOpX/IYtXaF9mn2g0lJhrXZyUn8V8NvT8VU23baNLRWkeCf/V7RTc/ftW9xfQSy4bV5H5fbhq+HqVq2M2/ZvWHxHvhqwz7VrOWaOh7w5a4RPpfnnjTkcFbakY7Zu2qljVu9X24zeul1/P4X67INl87q9uDe2eljbHN27UaZHVezwd4X+lZHI35VwwRQ3HxOifRksvVaTvwVG9Ne79LxbP3Df/Uq6I5bA3eO/JGlfwadv1O9ful9U530lILz8p042Iv5DFg98avxzSTb0JhsABpB8BLRTYA6oEkB1ZhtTuB8DNUIk2GzjB+KR3QQ1Qr/YXBAnIMQJU3YSuA0+pHbNAZsJJ6Ij7ExlhRRxgP+Go0IYTgSFsamhDSVij93RcIcWwY0LU3UIRIlkA4cXKuJFHNDBHCoRI0xMHGeI+ESKZGMVCUwMFatYkbXM8C1b5KJF6nOfJIrxI9lIChh+sI0nAeyMJrFHeeY4HvHB8Y54zKMe98hHhAQEACH5BAkEAP8ALAAAAADwAIIAAAj/AP8JHEiwoMGDCBMqXMiwocOHECNKnEixosWLGDNq3Mixo8ePIEOKHEmypMmTKFOqXMmypcuXMGNizHYHh6IfOBPk2cmzJ7pydxzIHEq06EEH4MqBQZfHn9OnUKNKzfNjClCjWLOitDeFqdSvYMPm2QZmldazaDM6wIEurNu3X/MkWJUtrd27C+8ogsu3L9Q8iu7gHYwX3A+/iBOjw0G4MdY7hxNLRowOnOPLLx2Amcw58Q97mEOjLLets2nE5eqKXv3RXuTTsPmiA826dkYcpWPr5lvOtu+J2TbvHg73h9DfyBfaS0C8+dtttJNLJwgut/PrYM1On45jNzow5YDe/xlPnnz4clOYE5+yPXn303KBHofoYJWitroVtfdd7nRZ1RjZswp+p+m332qrdJbHFNF1dAcYTZlm4IGXJTjZggCGtBaBkzFGYWPgcKZIhiWR1pl2H95lj3V+/SDYSpqdmKJdDnDYl4cuVXdhgzNipZ5f6LwIU3CTJUBij0NN4dmRL+EQIWJgIGlUiFAyCdOKklkmpUwOsAhXb1pl82NfQm750mt8oRjmmG/9YGZMFval5lli8pXHfG+ylI2Xbs2JVp1vgZlnS0rK2ViXbm1j5aAlOeAXe45hmR2jLQlXXGhUSpUApSzd0Rc6i97Vn1RlcnoSmm6VehmbUZqakqO81f9mz5N3uprSXnChw99Tgtpa0p58aWlbW6D6etJ7bSK3Sh5+GhsSm2Cp6uy0BdnDl5vUZnsQsqlq6y1B0Eql67ffwvoWjuRmG6dbeKY7raVhbequtjZ+he68xprrFo/42pppWOP26+yobrUqsLHwgtXrwa6GG5WwDLvKV6gRb5kNXNtUbKunyWpsKsduTegxo9wqPDKnBId178lmphwty4y6/JW0MPcoM6k153lzVDTn/OHOUPXs84FAPyX00O2VPDPSUoKsMtNIOm0y1DPqC5bIVFN4adYp8hlVHlyniOpX/IYtXaF9mn2g0lJhrXZyUn8V8NvT8VU23baNLRWkeCf/V7RTc/ftW9xfQSy4bV5H5fbhq+HqVq2M2/ZvWHxHvhqwz7VrOWaOh7w5a4RPpfnnjTkcFbakY7Zu2qljVu9X24ze2CpgyB7230+hjtms/kAneDav2xsaoP4wK/jqYW1z9FkJ+1P526ZHVWxjbPsDBsVIh/6VkYRZG6/tUDcf1vV4SZr83VAj2pfBaJn/eLNUT/4W+WfdkThYz3Mtflg/YN/SKvcDC+TMBjzEJAB9LsHdV/LHNfdhbHkoyYbe4MK+tyHvSzLRkWS4J7jO9SUBEAyJBDkTu8hN8C0jWomJJuO7yBEPMdtIjUmywZbObMNwhxvhZH7iv4pkY4UyIp0Ozy8UGI+Aw4OcgR/jXsjCKYQwIdmgXQARs7LPEQk22/iBeMA3EHsk5QdPio0SP4dELOLkjGjcxk6ug8PWCUSB2NFNC914EA3GETvGoaNCHBC9O5pmCj10Ixz92JdtjFGP1QoeIRHTP0RGBDeL3GEbHcmQH0bSLzGkpEUcUMZLPiWGgdRkQjg5xTjyUJQbieIJrwOGSaISI2vpI2wSgINQvpIi9bmPd8rCxVt+JBtJAcMP1GinPHynHODopS+3Up5mjkeZy4ymNKdJzWpas3UBAQAh+QQJBAD/ACwAAAAA8ACCAAAI/wD/CRxIsKDBgwgTKlzIsKHDhxAjSpxIsaLFixgzatzIsaPHjyBDihxJsqTJkyhTqlzJsqXLlzBjYsx2B4eiHzgT5NnJsye6cnccyBxKtOhBB+DKgUGXx5/Tp1CjSs3zYwpQo1izorQ3hanUr2DD5tkGZpXWs2gzOsCBLqzbt1/zJFiVLa3duwvvKILLty/UPIru4B2MF9wPv4gTo8NBuDHWO4cTS0aMDpzjyy8dgJnMOfEPe5hDoyy3rbNpxOXqil790V7k07D5ogPNunZGHKVj6+Zbzrbvidk27x4O94fQ38gX2ktAvPnbbbSTSycILrfz62DNTp+OYzc6MOWA3v8ZT558+HJTmBOfsj1599NygR6H6GCVora6FbX3Xe50WdUY2bMKfqfpt99qq3SWxxTRdXQHGE2ZZuCBlyU42YIAhrQWgZMxRmFj4HCmSIYlkdaZdh/eZY91fv0g2EqanZiiXQ5w2JeHLlV3YYMzYqWeX+i8CFNwkyVAYo9DTeHZkS/hECFiYCBpVIhQMgnTipJZJqVMDrAIV29aZfNjX0Ju+dJrfKEY5phv/WBmTBb2peZZYvKVx3xvspSNl27NiVadb4GZZ0tKytlYl25tY+WgJTngF3uOYZkdoy0JV1xoVEqVAKUs3dEXOove1Z9UZXJ6EppulXoZm1GampKjvNX/Zs+Td7qa0l5wocPfU4LaWtKefGlpW1ug+nrSe20it0oefhobEptgqerstAXZw5eb1GZ7ELKpaustQdBKpeu338L6Fo7kZhunW3imO62lYW3qrrY2foXuvMaa6xaP+NqaaVjj9uvsqG61KrCx8ILV68GuhhuVsAy7yleoEW+ZDVzbVGyrp8lyqpS07nLs1oSDOhChIu26y63CnMKLYb8Eh3WvmSJDtU1q88YcLaUO+4NOs9Tq/BXIPa4LVpDkCk3qoNnUC5bB2SodFdEpSv0Vttpa/RTVFAJrJ78Dw8X1gbjyRXK2Kw/9Zs3PUewq2/a+2bNUM1MLt1QLz2i0W/KS/6svWGen6DVfY/t6qZRaRwU1uXxGlYeUJve1TcreovoV2PtZHlbe3xbaZ9FACpy2VIG3N7jYAt8dVcAUJg4V1v3yhXlydzz5Vq0Hax4VpAfOHRXn7rrO+najH+22tqo/vN/pbwE9b+NRlf6b7ldr/E/ZYlFuW/FxzT7vv2HxjhyifYkfMfNfTS5dwokeny72YUkv2t6fWy9Q8n9pjxn5fPVt/z++cwrsWEM9tf1PIPT7ivMaw72vyK9iTpOK+laDPwm6D2Z9GaBjmoaaAxaEg3yp22DY55bhefAfCZRg4bLiuqmd0CABdEqxGpNCwL3QIBWEipEII6lPXbBiJHzaD/9f0kMy3fAo0PvK4rRSRLMdESHgewsYhqiSOyQRLDt84kGCCJYfUPEkq7hi+rx3RBD2JQFkZEkLpbJALTbxOSs0STYKGD4tMqSGLIuJjiSzRDseBH79i+NH5siZGfpxIXQE3BcxYqLJQOeQDQFUYm62SIlkgy2d2QbEIKkQQk7mJ5WMZCNlxEmHePJCgfEIOAA5mTaW8oMxTNQUBHmQbKwCDGL0iwhfmRAiwWYbPxCP/ghij6T8wHawcSUv/9gcYOLkmc/cxk6us8llPmSN2InNI61JkT1mEzvG4aZFHBDLb0pmCqEUp0CwaU6+bEOZ6myIPSLYTsR4MZ4cwU09P1liTXzOhJ31vJk/NcTKfdoMZwMViQMUkUvsgDKhclxFIokDhn5ClCRrKSdnEoCDdF4UI/W5j3fKMsyPriQbSQHDD6Rppzx8pxzgKKlJiWKP8th0PDKdqU53ytOe+vSnQMVMQAAAIfkECQQA/wAsAAAAAPAAggAACP8A/wkcSLCgwYMIEypcyLChw4cQI0qcSLGixYsYM2rcyLGjx48gQ4ocSbKkyZMoU6pcybKly5cwY2LMdgeHoh84E+TZybMnunJ3HMgcSrToQQfgyoFBl8ef06dQo0rN82MKUKNYs6K0N4Wp1K9gw+bZBmaV1rNoMzrAgS6s27df8yRYlS2t3bsL7yiCy7cv1DyK7uAdjBfcD7+IE6PDQbgx1juHE0tGjA6c48svHYCZzDnxD3uYQ6Mst62zacTl6ope/dFe5NOw+aIDzbp2RhylY+vmW86274nZNu8eDveH0N/IF9pLQLz52220k0snCC638+tgza50oHq6SBy70YH/KQf0jvnz58mXm8Kc+BSVq/KA8f4dtlygxyE6WKWorW5Foz3FGH0elXNaWd1dZM8q/p0GYEkGPgUdgRyt0lkeU0TX0R1gNGXagyLFF1UCFGpk4WQYJgjSWg1ONiBI9ngY1XslWgQOZ4qoSBJpnWnnUTbWSSVYjRPZE2RfPwypkmY9fvTaV+joSORCDrTY14stVYeihhnt9dZ8Uz7Unl/oKPlScJMlICVFU/TlY5gKtYnYD2u2hIOMfoGJ0Y19bZMfnAfxmWedLhkpmWUKHvkWiYAepahbvWmVzZh9mUkRpXzl8WejAj0J15tZTerXDxhF6Nc2iHI60Ilu3iUqXJpe/3QHnnBNqOpAQPoFKlqvQooRps9xqaqcfO2algOPSkhoQ6z2leqt/zjgF42NGZrdRbnqCi1BwhUXmqAjYuRlX9Rue0dfUYpmKlSWSpQNrW6pue1AnobVrmOY6llRvW7dy6m0vNUW41OxWnSuX5HO+8+4bqHjm6kJ70vmsmFm+9azrLWVrkXNfqqwQOB5+1t8xkZkpVukfvwPsF/5e+u6z20KrT18payyxXBFPG/Ib7msKszxqiwQy1E5LLQD8Np7NF9YKszwl0L/0zFYMs+c9Fd+Rt1tWIyqzC9YTSt8slRhQ3uwbFFHy5ew0BL9FcYKgwuW0R9PHZbNQgMtlb7bZv8zdlxsz7s1WDpDqzdYIEbt9lNwq4qzW1mn/Q9fFE9JbM6S/5NNrR8j3WflnJ5998dP+5q56IgrjHrDmYOM+bxff1Xyx4dDVTagq3PdukC1P+XzlH/Lvvs/vTv1e412g4V35sX7czyFj/c7PPFwPU9g808tz3z1t0YPVsHDN2+9d6WHVe7uPCsd+qmgz5t7VLfXuHhUs6f9PlSFE5n8V9rvDrBbiZuS98Ayvo+JDE7Yc0oAp/ePZBEMUJ7jyzba5zW4BI4+sSMbAw1yuWtNaX9SodsGB5K+1BFpgC0bYUHu9xQRUiiB/uCbCidnwRrNqi/gm2Gn4HI+78wPfzosSPP/XDidEjaMgpJjIeMIhEKpNE6HDnzKApGTwaj0L4jli0oOkWNEsVxwhnIDSw9tg6xpBREhTXRK5JAzOMghcXhZjMoUVwNCqdQviEp0yhZXU8a+dO2MCPmhP66ImSpGpYAjrONT7jiYLoZljoAkSPCgssbQ5JGSbxxhAgmJF7+hJpIM8STTRNNG1oGSIYpUIyKJAkPjnbIhgvTHxgiTSqhA8pUEuaRT5DUYa6Erk2csJVjAAMyV+LJSuHRIH/kiw6wcky+3TGZBwugWYqLlDlH8Ci+l2RBhKq+YJFlFNqViK242RJR+/GJLWrlIc0Lkmc9ZpUiyYcivjNGdCqklEGOi/yXJNBOfC4kj1+S5EXpyZpYAfUg9pZKjlfBoMuVM6EN6hZhtpMYk2WBLZ1AlUeAsNIQXDUk2Htqkjnr0QoHxCDgEqi2TUoSiEJ0CQXG1CjCM80outQiaYLONH5SnagaxR1J+cDXOMDKnDGEpRHHC1KZuYyfXeSJSI8JO7JgmolO10U2tahrjZHUjDoglVyUzBXB+9SBVHSvkjnpWidhjkmpFklnbqhDcxHUylaHrSEZ611PlT68fcYBS42rRuQJWP4rYqnN+YtjDumsVH9UNGKTq2JOsRaycSQAOGltZjeynP+EpC1A7K5NsJAUMP3hqpvIgnnKAY7SkRYs90ENb8xDANra4za1ud8vb3vp2egEBACH5BAkEAP8ALAAAAADwAIIAAAj/AP8JHEiwoMGDCBMqXMiwocOHECNKnEixosWLGDNq3Mixo8ePIEOKHEmypMmTKFOqXMmypcuXMGNizHYHh6IfOBPk2cmzJ7pydxzIjHln1RScP3oq5VkO6J1sQ1E6AFcODLo8/rJq3cq1a54fU4BGLWkPh1WsXdOm3flz1ViQ9qZcVUu3rtY828C4fbsx2yow2+wKVvt1lVC+Fh3gQDe4cd08CVZBRUwRnKLAjjNz/YpjMmWHdxRpHk1Y0Z3PDuMyJs36riJ7qBWC+9G6Nld0OGIjnI3Wdu08YGDrHniHtu/jWdGBGy4QXALkyIF7/uwADPTr/n4Ip24c+/G9n8th//YOvdz0qNnK9SZfe9v5sfa6s4eObvtQe8/n+wbPF8d4/deVExUOAPqWAGXZWFcgeT8c5lKCC9p2Gl/4RcjeNvap5EB+FpKmCGLg/NchdvyhZI+IIzbmXn/0gdHUHTDGKGNT5UzBIXRTqHQidpD94GI5q8g4YzmKrGZXbm8RaBtkQDn4kAOrFAndhyfdgSJr2ygSpEQO3FGOTmod+FY5tun1HkX2rGJkbVSSZKVvwJVYkV8KbjVhVKu0lscUGW50BxjreUjSjrXh5uRGcaEFxlt5krbnmR0ptuZoSMJ1pWM/LDdSNjiUcyhM4LCmCKQhideanBplc6lgeZjG3EeEZv/2w50pVXfqR/JlBsanr2bkwKSDVdpSiI72eZFoo6FDa68c3TiYsjJBOFoCpEo0BWlgVMtsRdfKqq1KOAQ62KIZhapZHqhui5G5jmVL4ap0aWpRrCoaq+5FDsDblYAIOivYshP5a1d993qUq13poiewWj9gRGZm1BbcUaONJTxWNgtvxitEd4hbFzrfSgyRqo5Z/BbGgvFrUcZpYSgyR90OZjJf+da1okUUN2bvyxM54FiO29LL1cwLkVwyzxvVaVfD97LLlZgWIdtYm0hfdEdjIEv8MFcAR5SNx2GGXDVDB6vVNbPOkmtR2YTtPPaTjakssT295bHxQ1c7JvfbFEn//XHVW+89EdtpocP3RUbbJS/PjGWNc2ZEH56Qkku/vQq6GAFLF9OSU8SyVmd37tDWgm1zt+gK2TMY56h7re9WgrfOEOV1hS57QqTbBfXtDn3uj+G8Pwl2WrYHT5DPgglrvEJ+26X28grlTNfp0P9Dt4rUV690mNUvRHhXyndvkOZchS++QHk/e35CyNvldvW+a7X4+gQ5rRbw9A8kfV2s5z9Q7ml5Hv2yQT6vvE9820tL7MQHQLpQzX8D8d38zpc4u5gOggYZjNhuF7OUYbAg2SgdBB0wPK7c7IPoE0z/zte8uizQf+lzIAwdgz8UCoR2annh8r43NBsSpIHly18M/3Xnwx/+K38F7ErkzgdEO9Fvf5srohHtUjzZVZCKUvzfEZmIqSxqEYviuyJd7OZFgTQRdCz8WRlvuMXqDdFmG6TfG8EnvvhlZYlC9GD1oMiwNQ6kfTKEnhjpUkUUqrB6Z+TKA9eorzxAj4QqiiMEeeiPA/KNkloxXxk7qBY88oyPhfOjQXCYlkWKbpBmE2VB5nib4CVyKwJU5T8GY0medawxZJQlQSgJtNbZ0R86XOMra9g5UtLFcbokzmAm+DZUpoWZunydKceGyaysMJn/aKFXslcwY7YNmwaxn1p6+baaNYac4BSIM7VyQb4lkC4nTOdAtNmVaUoMlGnxZBlZqf+xsZlzMLuTJ0Hid82CVTMrhdQlPreiT8p4Uy32FGgS2cnN2PCzZZJU5SutKTICZiaY8vRosCT2zmMKlCELZWdC+bJRJ550IXZE5qtSqsiXMuSiT8voS4Q2MJ1is6QB9OlKeApGmy7kn4KJJWKIWpeIGrV+uhKqSd4EMamCE6hp+YFVRbKK15mwlk/9h0gbkwCwoqSlPQzrQ5iqlm2stCTZOOhW0KlWlI4GpCYh1miUWteF0LMuCXirR+LKGpn21SFy1cqoVmIq0rjssF775Va2YR6TcGqiNoMmZIuWWK38ZKsKSY9X69LQzYq1s64RbEMs8x3TzkmyLZuCakH4l9G1Js+1FpGWbbbxA6dw0x5UScp1Sotbgvy1NbxFinJ/sI2dsEezxYUIWlPkmMdGd122pe7SKnrdhmxIu7aZAmi7O0XwamYbxCVv6jBrXq1oVb0h8U97PwZd+GYkPfPtCmXtaxIHHLdDlB0vfx3i3+xi57MDXolfUFsbMNQ3wSVRDGyn1RkIRwVKUkIOOvTCXQsrmCpgYG4J75KHDZcDHB32cFTsIaQWp1jFMI6xjGdM4xrbGIUBAQAh+QQJBAD/ACwAAAAA8ACCAAAI/wD/CRxIsKDBgwgTKlzIsKHDhxAjSpxIsaLFixgzatzIsaPHjyBDihxJsqTJkyhTqlzJsqXLlzBjYsx2B4eiHzgT5NnJsye6cnccyIx5Z9UUnD96KuVZDuidbENROgBXDgy6PP6yat3KtWueH1OARi1pD4dVrF3Tpt35c9VYkPamXFVLt67WPNvAuH27MdsqMNvsClabRy9UvhYd4EA3uHHdPAlWHUY8EZyiwI4zc82jCBzliHcUaR5NWNGdzw7jMibNWis6HJNRHwT3o7Vtrq9lI6SN9rbtbVNi675T27fxrOg86xYILsHx49vKCUfsAMzz6/5+2JPtoDh249v2Uv8uh/n7c+mIs5Xrbd64dr72vLd/jm77WHvO51+PPhZHef3XlRMVDgCa94NQMGVjXYEGIuiSggyat41yLeEXYXvb2MeSA/ld+J2ALIHzn4fYiZeSPSOS+BwY05FE4HHogNHUHTTWaGNT5UzR4XNTqIQidpD9IGM5q9h4YzmKrGZcAg6W9KJtkAHVpEMOrJLkc4qgdEeKrG2jSJESOXBHOTr5xqRJ5dxmmEb2rKKkbVmWtKVvhZlokV8LtrZNix2t0loeU2jY0R1gsEdanCL9aNtrU7I5haGZJcCnRn6SBuikGyn25mg4JMqlYz9QGFI2j7ImKUjgsKYIph+R15qdfX3/Khhnp51EKqSDJfCRopn9UKtK1b36kXyZgdGoSQ6INhqiGjmw6WCdviSipYJmpKxm6Pza0pyagajRjoNlKxOEo52q0RSksShTd6OJahG6vbKqEg642gWGRqlqlgesMMHr2DbHRpSvY+q+xatj7k508GAZIpZmpBc5IGta3vKVDbiCaUsRxnbV99m0jvVYEbF28TvWxaBi9LBj5n62sF0aP1RpYya/hfKsAT90R71qoSOvTC/T1fJD2UzMVc0Wc8xVxRtn1vBy/wStFtMN+SsY0tRNvOdFMzdWrW5SdwUwRA6EDHVBYWPNUNGZqY3YwIIxy1Cedv1wtkFwb6XrRdcO/yb33SsL9jVCdzTm890GBa5VzBFlw3NXQyP+D9112d0QyWoxjji4916EOWGD3832YJoTVPZgVEsedW955OxQ4Y6lLjnscTPUN13oqI7QyrJD9Hlauetu0O10uT66XQkL/w9jh1vU9dXKF+Q46go9WXn0Bq2yL0bP0mU59gMprtY2CinNVengVyQ+XWOnL9DxdSUf9WDfu58R/Hb1rvz6XXVukPV0QZ/9IsK/tOxtgP/AX1rIdxDzuQaBGXHA484HQYEQLy0JO51dolXBilxQLf6DoD38lr3BuK6DC7HHBLXSvg52DzcGoZwBUTgyx3Cwg1ajS7VeuJUb0lBnjgkeDf9HCL2BaLAuofth+RCmxH8YzR/MyhvwmgiR512viR/UG0EKqJUQUlEh2eDhZpKIQACqhSAy7Ir+vhg+x/wNhbRD4kAcmBX5sXEgChzfCQc4PeQNZDA/o2IO67JGCNLRHyDKhmAYeEeESLAxW2NjFrUisjiqpX6NLMgkl9ZILmbFcpZMyxszGUrckVIwljOjGjN5kN91xW0QLCVXGOhJf/iQlbKcISsnmAeB1FKAVBTj0Vj5D176MmPEHIgVvZdMY/7jl8lM4BMX18ylKMVy0ExmLbWCyWgqJJuszONa9ujNY8IsmZvcisjKyRBVUhCX/wpkOXOplVt+8ZBagSU76Zn/lUJ2cJmXZOdDjqiWUf5QnGkBpkD/WLdMbjMrBl2oQYzWyzs+kmHyXKgrs0LGCm60hxJ9yCBfyUaATjGkDnHnViKKQIR2RaEo/Qc//SFEJT7UH16MqUIG01H37awxrdOpQz66Thris59CdUgta9pBlXaleUldyEz9Ycf0uZQrVY0qQZ7IUux9lJtadUg6g1pBp44xrA2RYlqKaj+JmQ2ta3tiC+2XxvFlVKvphCICTZoWfaJ1qmRNn1sbc0C4NgSf3VTeV6lpWIfwdSt+RY1ZudLVxhJEmFmZq+6mysK7GvahiRUdZrfiT8vicbS2VF5de2baiDyWhTDly02zEtvW/wrkqFA922spa1vQsMyzLwkb8IDb2tX2j7grEW5CexumaWYlp4hRblcqy1y8FQu5JuHWb6s7EeN25QfYHckqnMvCnnL3IGGMlHlVMtt8npci0t3KNmpLkmwslitsfW8VR1NakoBMM9DV70PyypUE0Lcj9mVNbgUskfuuNLwUcRVpnsZgitxMM9GBsEOysRg9ZbXCa3PwVn6i4YSoh7xqiSyI0SvirdDKI5YxjopXjN6jsm8KB5beX1BcF3vSeCLkus02fuAUctqDKkm5zox/nBACOw0pUMbJNnbSng8zmYAq+g6Fr7yR/2b5Ngfi8kc49OXbBEfMIWlvmTO7ZDQ/xGceqF1zdkrs5oX4R851SU6dbaXmAvFnzylJFp4zix5AryRZPL4OiQ39Er+0WE1WZvRJFGNjU8FG0tSxUpwFE6NVkBPTMckGVcDwgykPhi0yAsenQe0yI7l61ayOtaxnTeta2/rWYg4IACH5BAkEAP8ALAAAAADwAIIAAAj/AP8JHEiwoMGDCBMqXMiwocOHECNKnEixosWLGDNq3Mixo8ePIEOKHEmypMmTKFOqXMmypcuXMGNizHYHh6IfOBPk2cmzJ7pydxzIjHln1RScP3oq5VkO6J1sQ1E6AFcODLo8/rJq3cq1a54fU4BGLWkPh1WsXdOm3flz1ViQ9qZcVUu3rtY828C4fbsx2yow2+wKVptHL1S+Fh3gQDe4cd08CVYdRjwRnKLAjjNzzaMIHOWIdxRpHk1Y0Z3PDuMyJs1aKzock1EfBPejtW2ur2UjpI32tu1tU2LrvlPbt/Gs6DzrFgguwfHj28oJR+wAzPPr/n7Yk+2gOHbj2/ZS/y6H+ftz6Yizlett3rh2vva8t3+ObvtYe87nX48+Fkd5/deVExUOAJr3g1AwZWNdgQYi6JKCDJq3jXIt4Rdhe9vYx5ID+V34nYAsgfOfh9iJl5I9I5L4HBjTkUTgceiA0dQdNNZoY1PlTNHhc1OohCJ2kP0gYzmr2HhjOYqsZlwCDpb0om2QAdWkQw6skuRziqB0R4qsbaNIkRI5cEc5OvnGpEnl3GaYRvasoqRtWZa0pW+FmWiRXwu2tk2LHa3SWh5TaNjRHWCwR1qcIv1o22tTsjmFoZklwKdGfpIG6KQbKfbmaDgkyqVjP1AYUjaPsiYpSOCwpgimH5HXmp19ff8qGGennUQqpIMl8JGimf1Qq0rVvfqRfJmB0ahJDog2GqIaObDpYJ2+JKKlgmakrGbo/NrSnJqBqNGOg2UrE4SjnarRFKSxKFN3o4lqEbq9sqoSDrjaBYZGqWqWB6wwwevYNsdGlK9j6r7Fq2PuTnTwYBkilmakFzkga1re8pUNuIJpSxHGdtX32bSO9VgRsXbxO9bFoGL0sGPmfrawXRo/VGljJr+F8qwBP3RHvWqhI69ML9PV8kPZTMxVzRZzzFXFG2fW8HL/BK0W0w35KxjS1E2850UzN1atblJ3BTBEDoQMdUFhY81Q0ZmpjdjAgjHLUJ52/XC2QXBvpetF1w7/JvfdKwv2NUJ3NObz3QYFrlXMEWXDc1dDI/4P3XXZ3RDJajGOOLj3XoQ5YYPfzfZgmhNU9mBUSx51b3nk7FDhjqUuOexxM9Q3XeiojtDKskP0eVq5627Q7XS5PrpdCQv/D2OHW9T11coX5DjqCj1ZefQGrbIvRs/SZTn2Aymu1jYKKc1V6eBXJD5dY6cv0PF1JR/1YN+7nxH8dvWu/PpddW6Q9XRBn/0iwr+07G2A/8BfWsh3EPO5BoEZccDjzgdBgRAvLQk7nV2iVcGKXFAt/oOgPfyWvcG4roMLsccEtdK+DnYPNwahnAFRODLHcLCDVqNLtV64lRvSUGeOCR4N/0cIvYFosC6h+2H5EKbEfxjNH8zKG/CaCJHnXa+JH9QbQQqolRBSUSHZ4OFmkohAAKqFIDLsiv6+GD7H/A2FtEPiQByYFfmxcSAKHN8JB5iNwVBoMD+jYg7rskYI0tEfIOqjXRh4R4RIsDFbY2MauSKyOKqlfo0sSBbV2EguZsVylkzLGzMZStxl0opdsZwZOZlJg/yuK26DYCm5wkBP+sOHrZzlDDNJxMcIxJYCpKIYj9bKf0wwD7/MWDEHgspLLvOYyYTZMhP4xMU90y7I/Acwp2lLrWCykdDUpjKLmce17PGH4dxmMTdJyWkaE5sCWSUFc/mvQKJwenVhoC61gv/LLx5SK7Gk4T4/KZCBIrKVzUzLN0kpGMsdUS2j/GE50xLMJtoSUQ3NZDezEtE7DpKVToTnHR/JMHv+8JVZ4SBK/UHGCq6Un+4cyAp/9VFifjGhXRGiOw3qj8nIcysdReBEu1JRKtqSkf8wqE5/uFF/eHGaK8XkYFrqvp01pnUxFQhJCVmQlYrsh//MSiHZ+NOtaMyWS61gWXFjUiX+0yA8tWP6hsoVuTZyq947yBODir2XEjSrFoTWQdjpD6yq1TF5oCob8WmXY0kxLV8doMTMBlhxCuaA0ntiC+03yQW2VaLV7B1hoYhAnMKyspYVTM54atj0TbYxmI3pa+u2kH//LlR4fs1KUb/Y2bouxLQATd9aucLXOz52igwZZlY2qzuesvCzNKRrcBmy0dueLYyZGaskIfkz7ApWeL3NKWqHC1OHAHe5u31LU3Vb2bDBECJhbd7dzgvUynrXj6BhGXRd4t6c7reDubWuQsK7lYKBrZpmrWxN1aJYg8xWME9FTH+7Utwvrle7synWf03CLf0Clr5Zia1ECLyVH2x4JKtAMAsbTEUVs/Qi980Vi1Gy3ukCdsIpzQiOWZhekmQjt1uJLGBvVpcKNwTEWsHwSECmmQhnlcgGPLEmy9XjjvyYNfJF7fuU9jSOAFkrq1qJq0jTZS0T5IJVbgiU/4WekmRj6jF6smtlbxdQiVyZND+RMhjHLCwzJ8RfdZ7InS1lGo9YxjiBzqqfEi3osLJvCmkmCJ5cXJd++vlBJBbMNn7glHPagypJuQ6jL02S0Wpm00hJ9Q+2sZP2yJnULKmxihg2Y1inhMmzvs2BbP0ZDuX6NsHhtWxk/Wt/hEfYy7GHcovtTT0j+yT+YXZdkvNsxKlH2mJTcrXHkixsG7vN29Zdsih9nTyHG3x++bJvwPDqcyNOMY42FWzcjcIqXQlGejknvd2XDaqAYdUrLGweYlQOcOh73z+0h5EWfnCEO/zhEI+4xCdO8YpbPJMBAQAh+QQJBAD/ACwAAAAA8ACCAAAI/wD/CRxIsKDBgwgTKlzIsKHDhxAjSpxIsaLFixgzatzIsaPHjyBDihxJsqTJkyhTqlzJsqXLlzBjYsx2B4eiHzgT5NnJsye6cnccyIx5Z9UUnD96KuVZDuidbENROgBXDgy6PP6yat3KtWueH1OARi1pD4dVrF3Tpt35c9VYkPamXFVLt67WPNvAuH27MdsqMNvsClabRy9UvhYd4EA3uHHdPAlWHUY8EZyiwI4zc82jCBzliHcUaR5NWNGdzw7jMibNWis6HJNRHwT3o7Vtrq9lI6SN9rbtbVNi675T27fxrOg86xYILsHx49vKCUfsAMzz6/5+2JPtoDh249v2Uv8uh/n7c+mIs5Xrbd64dr72vLd/jm77WHvO51+PPhZHef3XlRMVDgCa94NQMGVjXYEGIuiSggyat41yLeEXYXvb2MeSA/ld+J2ALIHzn4fYiZeSPSOS+BwY05FE4HHogNHUHTTWaGNT5UzR4XNTqIQidpD9IGM5q9h4YzmKrGZcAg6W9KJtkAHVpEMOrJLkc4qgdEeKrG2jSJESOXBHOTr5xqRJ5dxmmEb2rKKkbVmWtKVvhZlokV8LtrZNix2t0loeU2jY0R1gsEdanCL9aNtrU7I5haGZJcCnRn6SBuikGyn25mg4JMqlYz9QGFI2j7ImKUjgsKYIph+R15qdfX3/Khhnp51EKqSDJfCRopn9UKtK1b36kXyZgdGoSQ6INhqiGjmw6WCdviSipYJmpKxm6Pza0pyagajRjoNlKxOEo52q0RSksShTd6OJahG6vbKqEg642gWGRqlqlgesMMHr2DbHRpSvY+q+xatj7k508GAZIpZmpBc5IGta3vKVDbiCaUsRxnbV99m0jvVYEbF28TvWxaBi9LBj5n62sF0aP1RpYya/hfKsAT90R71qoSOvTC/T1fJD2UzMVc0Wc8xVxRtn1vBy/wStFtMN+SsY0tRNvOdFMzdWrW5SdwUwRA6EDHVBYWPNUNGZqY3YwIIxy1Cedv1wtkFwb6XrRdcO/yb33SsL9jVCdzTm890GBa5VzBFlw3NXQyP+D9112d0QyWoxjji4916EOWGD3832YJoTVPZgVEsedW955OxQ4Y6lLjnscTPUN13oqI7QyrJD9Hlauetu0O10uT66XQkL/w9jh1vU9dXKF+Q46go9WXn0Bq2yL0bP0mU59gMprtY2CinNVengVyQ+XWOnL9DxdSUf9WDfu58R/Hb1rvz6XXVukPV0QZ/9IsK/tOxtgP/AX1rIdxDzuQaBGXHA484HQYEQLy0JO51dolXBilxQLf6DoD38lr3BuK6DC7HHBLXSvg52DzcGoZwBUTgyx3Cwg1ajS7VeuJUb0lBnjgkeDf9HCL2BaLAuofth+RCmxH8YzR/MyhvwmgiR512viR/UG0EKqJUQUlEh2eDhZpKIQACqhSAy7Ir+vhg+x/wNhbRD4kAcmBX5sXEgChzfCQeYjcFQaDA/o2IO67JGCNLRHyDqo10YeEeESLAxW2NjGrkisjiqpX6NLEgW1dhILmbFcpZMyxszGUrcZdKKXbGcGTmZSYP8ritug2ApucJAT/rDh62c5QwzScTHCMSWAqSiGI/Wyn9MMA+/zFgxB4LKSy7zmMmE2TIT+MTFPdMuyPwHMKdpS61gspHQ1KYyi5nHtezxh+HcZjE3SclpGhObAlklBXP5r0CicHp1YaAutYL/yy8eUiuxpOE+PymQgSKylc1MyzdJKRjLHVEto/xhOdMSzCbaElENzWQ3sxLROw6SlU6E5x0fyTB7/vCVWeEgSv1BxgqulJ/uHMgKf/VRYn4xoV0RojsN6o/JyHMrHUXgRLtSUSrakpH/MKhOf7hRf3hxmivF5GBa6r6dNaZ1MRUISQlZkJWK7If/zEoh2fjTrWjMlkutYFlxY1Il/tMgPLVj+obKFbk2cqveO8gTg4q9lxI0qxaE1kHY6Q+sqtUxeaAqG/Fpl2NJMS1fHaDEzAZYcQrmgNJ7YgvtN8kFtlWi1ewdYaGIQJzCsrKWFUzOeGrY9E22MZiN6WvrtpB//y5UeH7NSlG/2Nm6LsS0AE3fWrnC1zs+dooMGWZWNqs7nrLwszSka3AZstHbni2MmRkrG/0ayYVgV7DC621OUTtcmDoEuMvd7VuaqtvKhg2GEAlr8+6GXqBW9rt+BA3LoOuS9+aUvx3MrXUVIt6tFAxs1TRrZUerFcUaZLaCeSpi/NuV4n6RwWKtyHFBCGCTcGu/gMWwP2IrkQJv5QcdHskqEsxCB2NRMy5GCH5zFeOTsHe67sxGblOaEQpvZRvqJYmOSRPZZdpDucTdSH23ol2SgEwzEs6kfzQTOb6VK8gdGTJp5ltMe5iYljW+3KFSTBFXkeZp5LyxNT1yM81Eh//MDsnGYvRkVyXOmTQBlYiWR/MTOCdEPSxWS56FemfS1Pkiex4NrTxiGeMM2n72UMQK41eSNndpCliW3l8CXZd+/vAOcvHNoytCrtts4wdOOac9qJKU64x6KFUBh2LFNKYfcDqAKhExJJHCa5xsYyftOfRnvMOTXvMayW4Os0bUrCLBoFl3k25PApS9kSc3+zYHwl60vzPgk3Do2rcJDvYUqSJPs4TZ4A5P+px7nWkbDNng/qSfZcLu4xS5P7e+UHIGWN7jZBs16on3+JoMOAYlINMtSZbAWYgeCKI7iK+GSbLyDaOGu3Q+kYmeX3ZsHDAIO3ocD5ciqE0ZxYS1NQlMgA0VT+7szqCwSleCkV7OOcBte08sX8wGVcBg60mzRUbgoHkFjzKXwQRpCjgguQiNxHSh35EmTDfSvFFL9apb/epYz7rWt871rpskIAAh+QQJBAD/ACwAAAAA8ACCAAAI/wD/CRxIsKDBgwgTKlzIsKHDhxAjSpxIsaLFixgzatzIsaPHjyBDihxJsqTJkyhTqlzJsqXLlzBjYsx2B4eiHzgT5NnJsye6cnccyIx5Z9UUnD96KuVZDuidbENROgBXDgy6PP6yat3KtWueH1OARi1pD4dVrF3Tpt35c9VYkPamXFVLt67WPNvAuH27MdsqMNvsClabRy9UvhYd4EA3uHHdPAlWHUY8EZyiwI4zc82jCBzliHcUaR5NWNGdzw7jMibNWis6HJNRHwT3o7Vtrq9lI6SN9rbtbVNi675T27fxrOg86xYILsHx49vKCUfsAMzz6/5+2JPtoDh249v2Uv8uh/n7c+mIs5Xrbd64dr72vLd/jm77WHvO51+PPhZHef3XlRMVDgCa94NQMGVjXYEGIuiSggyat41yLeEXYXvb2MeSA/ld+J2ALIHzn4fYiZeSPSOS+BwY05FE4HHogNHUHTTWaGNT5UzR4XNTqIQidpD9IGM5q9h4YzmKrGZcAg6W9KJtkAHVpEMOrJLkc4qgdEeKrG2jSJESOXBHOTr5xqRJ5dxmmEb2rKKkbVmWtKVvhZlokV8LtrZNix2t0loeU2jY0R1gsEdanCL9aNtrU7I5haGZJcCnRn6SBuikGyn25mg4JMqlYz9QGFI2j7ImKUjgsKYIph+R15qdfX3/Khhnp51EKqSDJfCRopn9UKtK1b36kXyZgdGoSQ6INhqiGjmw6WCdviSipYJmpKxm6Pza0pyagajRjoNlKxOEo52q0RSksShTd6OJahG6vbKqEg642gWGRqlqlgesMMHr2DbHRpSvY+q+xatj7k508GAZIpZmpBc5IGta3vKVDbiCaUsRxnbV99m0jvVYEbF28TvWxaBi9LBj5n62sF0aP1RpYya/hfKsAT90R71qoSOvTC/T1fJD2UzMVc0Wc8xVxRtn1vBy/wStFtMN+SsY0tRNvOdFMzdWrW5SdwUwRA6EDHVBYWPNUNGZqY3YwIIxy1Cedv1wtkFwb6XrRdcO/yb33SsL9jVCdzTm890GBa5VzBFlw3NXQyP+D9112d0QyWoxjji4916EOWGD3832YJoTVPZgVEsedW955OxQ4Y6lLjnscTPUN13oqI7QyrJD9Hlauetu0O10uT66XQkL/w9jh1vU9dXKF+Q46go9WXn0Bq2yL0bP0mU59gMprtY2CinNVengVyQ+XWOnL9DxdSUf9WDfu58R/Hb1rvz6XXVukPV0QZ/9IsK/tOxtgP/AX1rIdxDzuQaBGXHA484HQYEQLy0JO51dolXBilxQLf6DoD38lr3BuK6DC7HHBLXSvg52DzcGoZwBUTgyx3Cwg1ajS7VeuJUb0lBnjgkeDf9HCL2BaLAuofth+RCmxH8YzR/MyhvwmgiR512viR/UG0EKqJUQUlEh2eDhZpKIQACqhSAy7Ir+vhg+x/wNhbRD4kAcmBX5sXEgChzfCQeYjcFQaDA/o2IO67JGCNLRHyDqo10YeEeESLAxW2NjGrkisjiqpX6NLEgW1dhILmbFcpZMyxszGUrcZdKKXbGcGTmZSYP8ritug2ApucJAT/rDh62c5QwzScTHCMSWAqSiGI/Wyn9MMA+/zFgxB4LKSy7zmMmE2TIT+MTFPdMuyPwHMKdpS61gspHQ1KYyi5nHtezxh+HcZjE3SclpGhObAlklBXP5r0CicHp1YaAutYL/yy8eUiuxpOE+PymQgSKylc1MyzdJKRjLHVEto/xhOdMSzCbaElENzWQ3sxLROw6SlU6E5x0fyTB7/vCVWeEgSv1BxgqulJ/uHMgKf/VRYn4xoV0RojsN6o/JyHMrHUXgRLtSUSrakpH/MKhOf7hRf3hxmivF5GBa6r6dNaZ1MRUISQlZkJWK7If/zEoh2fjTrWjMlkutYFlxY1Il/tMgPLVj+obKFbk2cqveO8gTg4q9lxI0qxaE1kHY6Q+sqtUxeaAqG/Fpl2NJMS1fHaDEzAZYcQrmgNJ7YgvtN8kFtlWi1ewdYaGIQJzCsrKWFUzOeGrY9E22MZiN6WvrtpB//y5UeH7NSlG/2Nm6LsS0AE3fWrnC1zs+dooMGWZWNqs7nrLwszSka3AZstHbni2MmRkrG/0ayYVgV7DC621OUTtcmDoEuMvd7VuaqttdFQxxYYMhRMLavLuhF6i7CsxTdfNdP4KGZdB1SXxzGmCF8Cqyy8mtdRUi3q28VzYDJqpHFlbcoYxWK4o1yGwFs1/4VBO/HQkagilzYbFW5LggLLBJuAXgEMtKuy4psT9iK5EGb+UHKh7JKj7Mwgw/ZMAVZomMWXqR/ubKxyhh73Q3EuHs5Pgj2chtSjPSZBaqlyRRJs2IL1Jlf3hsKPZQLnE3ct+twHgkINNMhyvSZfPCxP8/mokc38p15Y5kmTT1pZSpzhkSe9iYlkh2iJS1sqqVuIo0T+vIkM38ZImohzV1bsjNNBOdRkt6MXqya0XIhWjYnATTpAmoowftGvSM6tDCGlVYxzcFPlMkG6AmjaaLTOq7mMYjljGOqF8tZnvNOiL2UMQK41eSSXdpCpEmCJ54vEGTGFlPa7LIHeTim13f6c+L/IFTzmkPqiTlOta+06pnpW1wKFZMY/oBs+uSbIssWjDbQIq8cbKNnbTn1xy5M5B2Mm9599ppgd6IklXEsIBv5N0Er0sCDL6RNCfcNgd6SXkfnlGYcIjirQkOUf6Nca70syUDp3h4osKujrOM4Ymt4vjDccyXHZtcMFseCpxfnlN8r4TTNL+xq1vy6Jz7gz/DqTWAEtDulSTr5ZW+2x3GrR90hDsmyVr3dX5i6ZWsgunYiUz0/CL01oDB5i67jIfQoQiUUwcHWI+zpwf4l2HrqTMorNKVYKSXnauOJjpyO/3E8sVsUAUM6h42W2QEDrvPtSY3sfdggjQFHJgdgfYwkuQNT0WaSN5IVUet5jfP+c57/vOgD73oR2+SgAAAIfkECQQA/wAsAAAAAPAAggAACP8A/wkcSLCgwYMIEypcyLChw4cQI0qcSLGixYsYM2rcyLGjx48gQ4ocSbKkyZMoU6pcybKly5cwY2LMdgeHoh84E+TZybMnunJ3HMiMeWfVFJw/eirlWQ7onWxDUToAVw4Mujz+smrdyrVrnh9TgEYtaQ+HVaxd06bd+XPVWJD2plxVS7eu1jzbwLh9uzHbKjDb7ApWm0cvVL4WHeBAN7hx3TwJVh1GPBGcosCOM3PNowgc5Yh3FGkeTVjRnc8O4zImzVorOhyTUR8E96O1ba6vZSOkjfa27W1TYuu+U9u38azoPOsWCC7B8ePbyglH7ADM8+v+ftiT7aA4duPb9lL/Lof5+3PpiLOV623euHa+9ry3f45u+1h7zudfjz4WR3n915UTFQ4AmveDUDBlY12BBiLokoIMmreNci3hF2F729jHkgP5XfidgCyB85+H2ImXkj0jkvgcGNORROBx6IDR1B001mhjU+VM0eFzU6iEInaQ/SBjOavYeGM5iqxmXAIOlvSibZAB1aRDDqyS5HOKoHRHiqxto0iREjlwRzk6+cakSeXcZphG9qyipG1ZlrSlb4WZaJFfC7a2TYsdrdJaHlNo2NEdYLBHWpwi/Wjba1OyOYWhmSXAp0Z+kgbopBsp9uZoOCTKpWM/UBhSNo+yJilI4LCmCKYfkdeanX19/yoYZ6edRCqkgyXwkaKZ/VCrStW9+pF8mYHRqEkOiDYaoho5sOlgnb4koqWCZqSsZuj82tKcmoGo0Y6DZSsThKOdqtEUpLEoU3ejiWoRur2yqhIOuNoFhkapapYHrDDB69g2x0aUr2PqvsWrY+5OdPBgGSKWZqQXOSBrWt7ylQ24gmlLEcZ21ffZtI71WBGxdvE71sWgYvSwY+Z+trBdGj9UaWMmv4XyrAE/dEe9aqEjr0wv09XyQ9lMzFXNFnPMVcUbZ9bwcv8ErRbTDfkrGNLUTbznRTM3Vq1uUncFMEQOhAx1QWFjzVDRmamN2MCCMctQnnb9cLZBcG+l60XXDv8m990rC/Y1Qnc05vPdBgWuVcwRZcNzV0Mj/g/dddndEMlqMY44uPdehDlhg9/N9mCaE1T2YFRLHnVveeTsUOGOpS457HEz1Ddd6KiO0MqyQ/R5WrnrbtDtdLk+ul0JC/8PY4db1PXVyhfkOOoKPVl59Aatsi9Gz9JlOfYDKa7WNgopzVXp4FckPl1jpy/Q8XUlH/Vg37ufEfx29a78+l11bpD1dEGf/SLCv7TsbYD/wF9ayHcQ87kGgRlxwOPOB0GBEC8tCTudXaJVwYpcUC3+g6A9/Ja9wbiugwuxxwS10r4Odg83BqGcAVE4MsdwsINWo0u1XriVG9JQZ44JHg3/Rwi9gWiwLqH7YfkQpsR/GM0fzMob8JoIkeddr4kf1BtBCqiVEFJRIdng4WaSiEAAqoUgMuyK/r4YPsf8DYW0Q+JAHJgV+bFxIAoc3wkHmI3BUGgwP6NiDuuyRgjS0R8g6qNdGHhHhEiwMVtjYxq5IrI4qqV+jSxIFtXYSC5mxXKWTMsbMxlK3GXSil2xnBk5mUmD/K4rboNgKbnCQE/6w4etnOUMM0nExwjElgKkohiP1sp/TDAPv8xYMQeCyksu85jJhNkyE/jExT3TLsj8BzCnaUutYLKR0NSmMouZx7Xs8Yfh3GYxN0nJaRoTmwJZJQVz+a9AonB6dWGgLrWC/8svHlIrsaThPj8pkIEispXNTMs3SSkYyx1RLaP8YTnTEswm2hJRDc1kN7MS0TsOkpVOhOcdH8kwe/7wlVnhIEr9QcYKrpSf7hzICn/1UWJ+MaFdEaI7DeqPychzKx1F4ES7UlEq2pKR/zCoTn+4UX94cZorxeRgWuq+nTWmdTEVCEkJWZCViuyH/8xKIdn4061ozJZLrWBZcWNSJf7TIDy1Y/qGyhW5NnKr3jvIE4OKvZcSNKsWhNZB2OkPrKrVMXmgKhvxaZdjSTEtXx2gxMwGWHEK5oDSe2IL7TfJBbaVINlQLOLoKtaEEBaKCMQpLC2iiDwU9WwbzRlPDZu+yf82BrMSUaE/cBs929ZtIf9cqPD8mpXXHsQ7/dRdZ+u6ENUCNH1r5QpfFRLHxILvsVNkyDCzslnd8ZSFnyXIpngrOdJmxW0bFe7ZwpiZsSZklZFVnV8juRD2ClZ4y83pnT5l3LdEF6YOcS53+xuVphb3Xew7J3yq6Y+0Atdw4YWJgIGamMdFTjf29SNoWBbhCjEYOR3+x0qnOxbiqlch+d1KwcD24QNX5LsklslptSLagvhWME9FTNggepGw+iO+lJlxaSmCXRCGWE4t3m2IJ6wV97pEyLu9SIq38oMji2QVSX5aRaYs3c9AmaUXyXCuaowSAz83YknOjpU9kg3ipjT/IzsWG4FF0mbSAJkiusUWmUlij+12mVKjcfJIQKaZHFeEyVxJ7rySfGHWlmvOfXHzVpq3kZpeVsFw4fJWtLwRSXN0zRJxFWk4vZEvbwU9KVEPayBdXx9vGtUkycZi9GTXipBr1LA5yaxJE1CJ1Jk0PwE1QtSTZpuC5GZdmgKmJyJrP6ul1mH29F1M4xHLGKfXFBEza8AA7YjYo7W26XaYXb3AKbD6fX8pdloU3RFtd2lNFrmDXHyD7TtpOp8/cMo57UGVpFyn3nci92PyDQ7FimlMP1A3UVViasFsAykQx8k2dtIecUfaPDyJOMSd7bQ9b8TMKmKYx0sdcuwkYOQbzCF0yW1zoJf8d+UZhQmHYN6a4BCF4zRPdIFz7jSAh4RdPL8tyhOF85VXmS9YDrpd7jwU/yg9pxZXya2f7s1ls0TVVOfPcKQNoAScG1gNlxCsl3MHgbcHHT6X+WVWHmzdrcLsz4lM9PzC9dZwG3zfVjiwFTF06uAA7izL9QD/ssLfdAaFVboSjPRi9fLKu0zHyffXy0sVMCS88GyRETgaDz6a2CQphS9sAsCCg74j0B5GSj3nm0iT1BtJ2JWNvexnT/va2/72uM+97mMSEAAh+QQJBAD/ACwAAAAA8ACCAAAI/wD/CRxIsKDBgwgTKlzIsKHDhxAjSpxIsaLFixgzatzIsaPHjyBDihxJsqTJkyhTqlzJsqXLlzBjYsx2B4eiHzgT5NnJsye6cnccyIx5Z9UUnD96KuVZDuidbENROgBXDgy6PP6yat3KtWueH1OARi1pD4dVrF3Tpt35c9VYkPamXFVLt67WPNvAuH27MdsqMNvsClabRy9UvhYd4EA3uHHdPAlWHUY8EZyiwI4zc82jCBzliHcUaR5NWNGdzw7jMibNWis6HJNRHwT3o7Vtrugky56d9LbvbVNi775T27fxrLl3DwSX4PjxbeWEI3YAxrl1fwlOo3ZQ/LrxbXspl//D7N05GOkys5VDW/74D3t87XVv73yb9qj2mtO3Dn0sDvL7WRfcUDgEWN4PQsGUTXUGlpcAfC8t2GB523jmUn4TtrdNgiw5oF+G3pXTEjgAgmgdDi3ZU6KJ5qE3UoHHoQNGU3fUaOONTZUzxYe/uUiSitdB9sOM5axyI47lKLKacQlwWBKMtkEGlJMOObCKkreJuNIdK7K2jSJGSuTAHeXo5FuTJpVzm2Ea2bPKkplt46NIXPpWWHgX+cVga3KStEpreUwBoUd3gMHeYFqmBKRtr1HZ5hSHapbAnBj9SVqglGakGJx09alol479YKFI2UDK2qQggcOaIpl2NJ5dU6j/lA2ognF2X0mlRtpYAh8tmtkPt0q1p1eOkjRfZmAUW5IDoo2mSEcOcDoYii+RmNazKTWrGTrBbkkrXYlmxONg3MpE3WbKhjQFaeeZe+xgo1607q+tomRpVtiepKpmeeAp07yObYjRvo61+1adeaTb67dpbTPoWGpmxmtiDHMV7lvZJJCvSeMKhs7Db1nrWKwVvVuXv8qNFLFjqKLm62DdOnTvYCinHNIdutaFTr0wvWxXyxDN6ljNNoPUcV0O2+xzXRc3BLBgRBft0cyDgbzb0moJ/JADI0uNa8VbRY0awYJtzNCwdf3gdUnaDmZ20SsLZjVCdzS289ojZZOzWkCv/402XWo3ZHJaMePN0eBrzV200DAzxDWihtOZWdNr1+02Q23ThU7kIiHe1eacD5Q5XQozble8oW9EtV1iS6035AlBmXbqH0kLOO0Dxd2pQkd3VTjuFOmOtMJrm14X6gPZM1jgwGdkvF2Uhy58WmAgJDtdvzcf0fR8ay/Q8w0j1PtWoHuf2N6Em//P6Gkh/7hd1KpPEftqVa++8mUbtHpaxMufkD3o44rW1Gc73Bjkb12ZmP8k4jmuxE99T6MLyAq4lQcu0CGWI9cF8cc6gryvLoq7YELG1xXkma9iGyObWsonwobsTy3MWyD9tqLAf3BvK/ZrIUOyQcHNhFB711MLQf8QaDEdNuSGXXmb/DIIwoGQMCsmNCJBwJe1/gEvG/AayGB4dsEIMk2KT/SHlrBol21IUSEOCOBWPKVDIm6FZEyE4RkTMsOuRM9/SMxK4OJ4rTkehI+am+MLtxK4INrRjwZpYNjmCEgBCiSP/rCgHxuZlhoakYN0ycMjBZM9HfaQK63znxo1aUNOInIgg+xKDM84yk3apZMXpKJaYClKu5ASkrTEY6hO+Y9WlvKVp5QlsXjpS1yeso5cIdkpfWlIruTSfJTsChv9+DqkCSSaWZGkDsOolVBeEJv+2KNg7rjAVHJllZMUTOA+qBYlxhJsWXmmLu2SL3XOEZJacecZvXj/SIEwjJRGTGNjpnlKRcZPkT80nyK1ok0/qtEf9+EnKI1oTvLxkiDg9MdkmrkVfXpPmL67aO4EY8aBgJOFC8RnVnIoUkWusmoixFljEiZSgQgUegVRpDL9x82skPOMHN1KsCCJUvMFFTdcvCA3DZLRKOIOpFxx6hxvOjuDoNB/C9VjTUU3rYMg0x80Napj8pBQKVbTLsVSoVp2CjwHwNMfbL0oPi05EKj6Y4DAc6M0kzrFsnrNrmKk4+WaV9FFVkQReZCnclSaroyGlXZuZZlFAIidtoINnQXhJmYNl9V4WqQ7DfVbY6T6j8L6w5vKOSpXPMoQJpI1dWpdYUM+mRW8/+Ito1ohaEQ4Rde/wtObKt2szXg4OYsYMq5Sy6puD0LcrhpOr5+ziCwV6x/HhFZ/A6XuUFSqFe0ORKJ3tWJ84FnUhfT0blIzbT7PV5e+Kae5WYQIbrHD15dgTXP1HYgiWcuXzgpXIdDFYX5Xcl/sWQS3/I3KV7fiV4NEtjEs/UyB23mRnsJVOQvWyk8VElu6GIwydZLYgEurmQ3DJMNZ6S1EAkzIEY9kFW+tbYMTwuLVfgbFWZkxQuA7mAfxhbuGpdhofuDij2Sjs9nMyISl6V2QHJk0yJ0IZbel4x/R1sYaUa+GZSIyzUT4IlquoEz+I6kiEwTHKW6y85BMPjMTBP+8PxMvXGq8xioLjjSsWsmrSJM0j6B5K9GRFZCFamQLrzHQuFoMn0hbEQl5CTYnUTRpUDuRJ5PmJ27e8Z5bQ+lKG1qaU5BzpSVNGkbnic1bsZVHLGOcTlOEx6wBg6kjYg/E2mbWefo0qNX8Dz3FuC7X5QisvcSmA8vFN66WLp2R9gOnWNEeVOmNc5ItXV1nstng8OuYyPSDXxs4W97ZBlLGjZNt7KQ9uO4LqgfDE3KP+8qa6bNKBs2iwchbJX+u98/szJEu69s2CHqJav+9vJh4iOCtGRBM7gBvhHcl2CmhN8HBExXuOFxi/B6JPRpOcCLzBcYXF0yUx+ztDKEj3bKXWjaLAo4a9YT80Mohzsu1kh2bMSvk0Mm0Se5g7fIkx2vMKnmMEO21VfT8OJHhnF/WbRtZp67WQmcNOhSRccoo5ui7gjRhDbWfL6FcalbCUoz0Iuri3WFHDw2VWHSYDaqAodtpZ8uMwFF22tHEJklJO1gTABYcVN179jiS4OveQpoI/kg636riF8/4xjv+8ZCPvOQnj5qAAAAh+QQJBAD/ACwAAAAA8ACCAAAI/wD/CRxIsKDBgwgTKlzIsKHDhxAjSpxIsaLFixgzatzIsaPHjyBDihxJsqTJkyhTqlzJsqXLlzBjYsx2B4eiHzjR5dmZx57MnwfvrJqC8wfPo0jLlbtzJxvQkw7AlQOj05/Vq1j93Xkq0x4Oqnmyih17dSe6cqu4frQ3pSrZsWnVrsy2Csy2t3jz+ssDZpVTuRUd4ECnl2w5wCjBKbpbuPHbPIrAIYZ4R5Fjw5NHsiV8ufNbdDj+Zj4I7ofnsYdHeywd9rTrsdumiFZ9x/TrrKlVawSX4LZv2OVmA3YA5nfWH7ozOrBtvPnVbXEBl2Ps3B/y5BWzlWtdvfsPn1ztMf/3jp2ivd7d01vdllsmDurpr5eHiEO9/as/HMTMVvy+P3TzPcSff/5tI5lL5xG4V4ANOYCegve1lxI48NmXxzYMLmRPhRCqB4ZwJdXXHDpgKMXUiU1lqCGHvuWRwA8looUiikopwplxCeh3koi3ubiUjipGdAeLp22jyCpbReTAHeUkwN1rOZpUjm99gRjkQ0P+xld0F9HV32vbWNnRKq/lMQV4V5pHpGOgAckRW092loCYGpF5mpl0ptnQhrf9cKBI2UwRp2NzggSOa4rkqSdD2ayZF2RJmhTooIUlsJajZP0Q6aIUjXcZGG6i5IBlninSkQM3OoYDpxeR2hk6m7L/lGVnEl70YGOwsmrRFKd9KNNynv15Ea+X/aCorgod2lkeXMpErGPbhDqRso75iuxEfF62DZpPTXmZpRY5gClu11Z0a2HocMsVhZdNYZGneTVb7kPeEnosTNk2FutDdjYm77wN3UHpZ/fGlK9ehUbUqGP/AszQuXltm9zBedXK0LN6NeywQv02pu5oFL8VLUQOOObuxhAtzHCA1Opl6kNf5iUfyg65WtjLAdar18cI3YFrwTT/k83AYyXMYMx4zawQvGTtG3RCTJPVU5Aq6+V0QSUXZvHTQV22dXk+38yQzZ9x7VDUYwGoJ9lvSUtQ1XgJazZCHWe86NBaK8Rj0nMz/5SqzKzqLLJCEI91dd8CCY7XyJzC/ZbcA9lTmNKIvz3uVV+rqPhYYCC091uHI745WeDq6jhsCBWeldqVG+QA0WKFHiTbY0GedV6rtm4Q7WR1Xq7kLhtUN1luV24P7FgxXu7faRuEdNG6G4S2WLnPi/Fb6jJPffQEhY3uxsDHS9DtePFcueq1ozwuzv+0TBbr3A//FuXl8o5V6f+MjpXv3Gej/VhTQ9nnyEKQ54klc2bTn1jY5zDvlW8g6LsK5BB3OrIob2PZKMyfCgO0jV0PLwhEVgStkpoMRox7/3hdY8LENQNm5WQOzBQK7XfABOrlOjEcCwMRl8OymU1+xxHIAP9rGL3pZUVjAOthVjCUP71Ur3JKhN7cwveYxFktev+DC+KQlwcr5kV2KAPiWOgXNC56ES9gdFgFm1Y5Mzbxi61TYBDb+Kgzgq5yaxRLHopXxjq+EY2Vo+ELdefGIWYljeWKolhYiEfkMVGRVnki10aIFSTSDJLWEQgmQ1guMYqFjFzD5HXIR5YdoiyPsYueHP2BsxvObZVXMeXcPkjEf2Cqi1xTYWEYqTsj+qN6vjTfvHx5FUnSEY4CoeURn+bJ1aEQk/4QjSGxIstrofKQKFwlEzWpF/g5DJZW4V8RXUmQwgiTVQJrzB5RqEsQFsSXJ3MYJTGHwn9MEyuxWqU3r3X/z9V1cGPzNAg0J9i4y1mFoH1r5/wOsj6AEdMqoOybICN5kImuk5+OCWD/kGcVt7mPLPFklbhMVs8/4gV/ltPLBRflQtj8823nZNA1SZiQibJSV81cZkUUkQdEJgecfITmRfU00sagNCLH88dRVVRUwBFucpx6qFV8ehDmGDNDLc0KQgWSU6tYMjn9zEo1A4YVjaroo+9rSBaTx8fkQPM5LyXI35Zanpl6tSHgjKhq/Oc1iwwxpAF6KC8VwtfCXDU5WRXLPlNGJKpyJazF5NcKHQsUcF6FsgRRpj9WqpuQpRUi8/xPXGHSVWqGC3ZG001hNSgke2HHswR7V/CwI1W9/yIksfsb7Upge8eKvHWsXLHpVWKKkKbqRZyI4W0pbUXS0QiXphRB61usBZhZubYipaXnZJ6r1IvgFivGAswqDPoc4i7ku2JFDHf9YV7CrlUsCWhvSixbSYwYtzHhfUo2pEpRjCh3kZgNyX5PA9iKJPVV8i2JPd67wI1kV7swYZdnkHuRB2PlsCp5j5x0W1HPJCDAGhnwadDB4YNoNi9Raok90Ju8BJ/tNIlayXRcIzGPrBcrwVGJdlwDYsKGdok5Lkk2BgOmrVpkQDQOzY4YTJavZoe/WDlLiReiHfI2GVA/hs0U2joTIrvGyDOBclkV0WOEKMY4Tu4Sk/MCBjBLxP8ePL2Nm2eSZS2X2UtWxguGO7La22yjShe5Q1t+k+aMINk32/jBUu7AZYHYQypGqU6hDV1nvORB0eAw75KY9IM89xYlN1ZpUUaNk23sxD5z5oiIu8MTUo96zdpy8Ubo2yHP1Hgloa61UWXNEQnr2jn5eQlkf12smDiI2MaRTUzuAGtkv2XPKqG1s58zaZIAa9oe5rVmmj3t/D5lvNhurlw0HO7PpHouLEZ2sCez43IDmTZiVtCHkzMqd282yLq5Q6Xtg45q/2RUnnaOlBm0in07JwH+5gpd4n2bNqcJzgF/DToUoe3h4MDghFIyq+rCUT9HZl4OWIWNBN6XRlNN0E4/AvZSnpYNqYCh0x03S4nAYXLT1eQmpy6Mi34wBRxUHFn2mJHQa242mgh9RlMuqdKXzvSmO/3pUI+61KeekoAAACH5BAkEAP8ALAAAAADwAIIAAAj/AP8JHEiwoMGDCBMqXMiwocOHECNKnEixosWLGDNq3Mixo8ePIEOKHEmypMmTKFOqXMmypcuXMGPKnMnyzqopP3Lm2cmz585y5e7cyUazqNGi9nCAQZfHn9OnUKNK3Ymu3KqjWLOWzLYKzDapYMOK9ZcHzCqiWtOqrQhO0dexcOM+zaMI3Nq7eBHam4JOrt+//tDhQJu3sFZwP5oCXix32xTChiPHBJeAseW/28pBlswZpYMfl0Njvtq5NMls5RSLXh33hz3TsD3aq8y6dtzMsXNjxGG7t9wfDnQLh5gNjO/jcLfZHc48oQPayKOHLde8OkF7b6Vrlwpms/Xc2I/n/0nwAwzQVULTpweqqK/tBMG/676TffU2ReglOrhTLoHq0PDJFxt9rJVFGkZcGSfaNt4JWFh4ogkWX0d7/bdYAg06uBaEl/2wnEjZTGHhXxhqWFg29QFG1x0ohTiiXAmYmBdoloExYUoOKGKZIjKupSNj6LD4EoGLUddjVlPUmKFKnzH24UVTKLLkkRGBw1geB86UJGDb3EgRb/4oR+VFHPq1zWtHlXMhmf91NyZF0PmFDppYgZMiXFNYFKdTYr4JkZqAlZhWmXEJKRGgYLnpJ0N3vCgWOlPSROhYgkJkj6N8PrnoQXsmR+eGd4plJEQ0wqXopgWtstind00aVpcQWf8pF5aoFoQiYFnmJatcPD7kXlwx1krQj371KhmicbGakKqNeYlqNphKValkCrbm0K9waVprqXHloaxht8pl6LLFCkvQHYCNWhq6vDLErVgMmjvQu2OhoxuxcDl7rl+51sosv7pBK5e6BuH7qLwDYQvXD8MhC29C4WaL8D8OjwWrcBGPpa1A/1I6ccZwEZxbxYkiVO1Y/aJKcljBMgcyWNsgFC2fEzswM1TjDmdwWNruOlaeCO8sFhjf2dNuQVvmi/ClZuornMJg2VtQp1JJLS+9YuEgYNJjfSpwyAizK5fVRcuVpdhdI0w1zxqGGpWxFN+GcMcLmyh0VC3/c3JYRJv/mw3UYXlrIphwEYR1VCIvujJYcAuItlh03rzxmy+/6nR12ci13NdjRdoj12D3uDZURj4Os7k2m+k5c3uDBbTpUjEs7N1gJS7g4k/J7nNYjfsJe1hky0g3WLLj7pTtVB4OVsoO/g5VzHHDpTWqzkv7ptFw5SGQ8f7k/CbgYTGv4czaRz+W91QOL5bsb5K/faGbVh4W+jK6b75Y9MvIfe6b2s99/hqS31QuZyL/wc9PtJMK0BZlP8Lhz3eYWZ18OPcqgVTPKdMb0+ikIj4ZXdAfsvsg8gSkvrCwb1EflJ0D4tK7ALoNLADUHwsHYi0q7c8pLRwT6Go3kBc6pXw9Sl1j/yToIOU9JYNGdMq35JNEqGQQVTcz1A452KMSRs1cH/QHYRzIOxkJUCox7BH3oGfBuARPPjf0R9+E1cQT/kMuS2ROo/ySBwIeSYhjIVgTFyifDSJOXlycX0G4d8bmBPJRRNSQH51ikCxOLmA+jMojx4TH9R0kkv7IoW6ayD95JfCIB/kkWexYmkMGLo5joqBY9LW7sPBROA7A5FNeqTIYIeSLfCIltSJYkWygkjO4PF5CRJlJ5lhxeRZRRB7CaJgbXi6LdYSlLJ2SN4kwrZqmieVvFrJIEAqHk09hZkJK9UTTtI5tCjkmVDpYGFN2sSJoExxsWgm8hoAvKhdbF5cSaf8QhWEzMsF0Cjvft83S/C1dFjkkLQ0Dzngx5KByKadhznmwXrpNnFhxp1QkSq7GYNQoaXTKRw0yxVxKxlVXhEg3A8NPmahTKppsSCWl1VKYQFRzEckiNWvqEpQCj6cCaWJMsQJOb0qEookCqkp8Kkh4lgsvxHzKLxGiTb+scVDTfMpQGbJSfyz0KFEVJkXoOTSlloRIJFLqS/+YlrD6458QQSrxzCqSVWSVT1NdiFzfiRW3+iOvCrkpjACbkpA+ZaAMqSpgfkBXj2SjqBjMCFOlso2RjuSxlvmqNW9WNcKWxB735CtG1spWmNipRhwh7UZlgoO7vrWxA/HrWy3LEcz/WgZSHSkpsHQZEnvsFWaedQhktQrbiJTDtU8500dk+xTNqAQ1l6HtQ7v6POduBQehTc4kLVKc0GxjMCfB7mUQSxHbAsm6IEENcqNC3vJSl7JT4G15xXuZ7SJouFBZkUfaUpv29jK7cgGDfa2pTNEMGEHvha90B5Kg9YKFox8RrHfNYtY78IU1/r1Id1mzjR8E5Q66tAc4ypEY32RYwwkWSx48DI687oc/P3AwGFXC3OTk5MY43sZOpHPg2uJ3VjvBsZABzBjlrsSw2/FucDlS4yRfaMkcOa2TpQOcl2h0yqtxI0ueg+XjPCYmdyByl/8CYZYgecyUPbFImoRm0SQAvMojAW2bLcPYo9h1zozRbExai+ex9XglG+7zwuTbEugKGmYjpMkdfpzkBCx4JTk6dHLRe5c7pDg66FBzTHIkY9ZUpbgqWcWl36NpmnCF0aERcGzs4ZYxo0MRcM6KA3Awar8kALzD6QpnvVuX7zhgFe3pDTrMQmjJZMPC/umNhx9t7BGDIcacpYp5wFHs3BwbB4pIzK7H84Mp4CDWzbGHesYtlGqb6NjkHjeoJ8budrv73fCOt7znTe96ayQgACH5BAkEAP8ALAAAAADwAIIAAAj/AP8JHEiwoMGDCBMqXMiwocOHECNKnEixosWLGDNq3Mixo8ePIEOKHEmypMmTKFOqXMmypcuXMGPKnMnyzqopP3Lm2cmz585y5e7cyUazqNGi9nCAQZfHn9OnUKNK3Ymu3KqjWLOWzLYKzDapYMOK9ZcHzCqiWtOqrQhO0dexcOM+zaMI3Nq7eBHam4JOrt+//tDhQJu3sFZwP5oCXix32xTChiPHBJeAseW/28pBlswZpYMfl0Njvtq5NMls5RSLXh33hz3TsD3aq8y6dtzMsXNjxGG7t9wfDnQLh5gNjO/jcLfZHc48oQPayKOHLde8OkF7b6Vrlwpms/Xc2I/n/0nwAwzQVULTpweqqK/tBMG/676TffU2ReglOrhTLoHq0PDJFxt9rJVFGkZcGSfaNt4JWFh4ogkWX0d7/bdYAg06uBaEl/2wnEjZTGHhXxhqWFg29QFG1x0ohTiiXAmYmBdoloExYUoOKGKZIjKupSNj6LD4EoGLUddjVlPUmKFKnzH24ZE0gcNYHgfOlCRg29wIJUwc+rXNa0eVc+GWM0HnFzpgYgVOinBNQSZMYgJWYlpdxiXkmyvd8aJY6CyJFJtizYlnSmbeluaGgE43aEqrLHboXXWKleWiJqEIWJV5SekXj5SS9OOmncUp16OddpTNnmAJKpmCrZUaEo1y5f9BqmGWynWnqxvdAZiRpukqF6e4bgRrXOjo9ilcWgZbUaN/YVraqXLxqqxF7v02nKhjbTPtRdgml6xptcL15LbEJQqWtLp1GxYY5E6kbqDVhStpuxE5gKpUtw53rFjj0qvQvmOxa509v/rbkD33QjXpd9XyaTBDw8KFg4BXwjXrwwL5KlexAhIcl7MYC1ToWP1WZ+5TwIY8ELPWagiwVDGqPFA2DY8lq4m8xSXzQO+GlbKAGo91Mb3yZvutddnIVbK/FceFroMjS/W0v/Z66Wd1rIrlpsovK3pkz1D9oHLQcHF8JMtiiR1yxGOB7CDZYGmLMdzwbumxzQLZA9TefAP/NTGlNbf9ZsJ5CAT2U/luiTZcapNJuOF2Dlr0WIn3+Pg/hztVeY+Zhz3o5Z1vbuLkYeVxtIygR/5m12BtjeflOVP+Jt1hMSh5wnLTDpXbGkYdFu8y6v6U2sI7NbWGi4/VOJ7F+6O2A3G53iPpYYnOeVzAtgpl5yh32rTX/5zsj9w9Vt3Y1TKyLdXf/6gf1enWuQ8W+4sm7M+d34MFfHPJO9xp8/4gTOzE8jP5UA8s1vvabQjSPLM5iHtOEVin5De8goxKQ3ryi+lKZb6xoIuCTpHed3x3LlcNUCz56pwDrXPCsfTJVSSEikEAmEDYHFAqSyNTB9N2EPH5o4DDAaHn/1zFOqjQbyBFdMoGq9NCsdysVNCKy7c0BRcgxsYBPnyKCBfFvZgZ5IZOsR1zspYc9CUkG0PrDBiNl5AksnE4/RPL/haiiDzU0DAQPB0Al5gbLJLIIgjzhxevmMXlHSSGFdSNEKFyx4TA6oilISO/FhJHqcwRL00koEWC9kTTULFsDQlc3OCHFwA+RYwUqdkgObNGp1wSgoaMDM12ZZEmbtEwixyfGWcpF0gWRpIutAj1GomVTM7vIZWMyjaIaRQIIs4i+TslKbMSqbCskCGIfMoLDZNMsFjRITuEmRmLwkulRcSUghznTKrJJ3UeRIjfzEounTcRYK7LnS9hJwo3Cf8qvLgRKml0ThYjCKmBds8i2dTiXf75lOM15JNx6U5aiEQifBakm1JTC0OdskqJ2DMsP7DoSVZh0DAGlCEf1WRWNuqUky6knDByqUqcuTuM+HExITVKNubpFF9KRJ9xY+ZpeKrQjARyMWiiiT1EOZZ4RgSjGZ1MSZ8iwYxA9ZgxwcFUVYURlnJUqKYiqjZFqpBowmiaIrFHSmsnU4iI9Ydk5dZUT9lWiHgVKppRCWouA9aGZCOhUslMXCOSDRwwtTE5vEhxQrONwZzEsJe5JEV2epmqDJYhqJlrVCQ7WcDWbgporUhhDxuXxGaEspdZkUfaUhvOipa0fgGDaSdijzr/ima2p/XsZ/tKkARpFqunga2XzHLZO/CFNa5V7Fq99IOg3AGt9gBHORLjm+QqVrdwyUNzweHS/fDnB7/Fl0ruepucmPe829iJdHAb1ujw5LzwFS5jvsQSmm5nQXXtCHnvy5gE5Lcja+KvdoDzEmMKmDWxXMlzDnycx8TkDvJl8F98Wl8Js2Yb1hVJkywsGv8aZakctkxOjULSEDPmljPRqok3xl6WLHbFrQmtS/YK47g5tCh3eOt9E8BbluSoxqfMa17ugF3toCPDMclReFljWc6sosi+SQCSacIVHYdGtrGp7ZKBpIj/psUBOICynBwLRzDYb0F1+Y4DVtGe3qDDRiwyZqVx/dOb5vaYldIFA3jPTBXzgCPOusnGHXCgiMScmSzkmQIOvDww9ThaKICWkaAf7ejL7uzSmM60pjfN6U57+tMFCQgAIfkECQQA/wAsAAAAAPAAggAACP8A/wkcSLCgwYMIEypcyLChw4cQI0qcSLGixYsYM2rcyLGjx48gQ4ocSbKkyZMoU6pcybKly5cwY8qcyfLOqik/cubZybPnznLl7tzJRrOo0aL2cIBBl8ef06dQo0rdia7cqqNYs5bMtgrMNqlgw4r1lwfMKqJa06qtCE7R17Fw4z7Nowjc2rt4Edqbgk6u37/+0OFAm7ewVnA/mgJeLHfbFMKGI8cEl4Cx5b/bykGWzBmlgx+XQ2O+2rk0yWzlFIteHfeHPdOwPdqrzLp23Myxc2PEYbu33B8OdAuHmA2M7+Nwt9kdzjyhA9rIo4ct17w6QXtvpWuXCmaz9dzYj+f/SfADDNBVQtOnB6qor+0Ewb/rvpN99TZF6CU6uFMugerQ8MkXG32slUUaRlwZJ9o23glYWHiiCRZfR3v9t1gCDTq4FoSX/bCcSNlMYeFfGGpYWDb1AUbXHSiFOKJcCZiYF2iWgTFhSg4oYpkiMq6lI2PosPgSgYtR12NWU9SYoUqfMfbhkTSBw1geB86UJGDb3AglTBz6tc1rR5Vz4ZYzQecXOmBiBU6KcE1BJkxiAlZiWl3GJeSbK93xoljoLIkUm2LNiWdKZt6W5oaATjdoSqssduhddYqV5aImoQhYlXlJ6RePlJL046adxSnXo512lM2eYAkqmYKtlRoSjXLl/0GqYZbKdaerG90BmJGm6SoXp7huBGtc6Oj2KVxaBltRo39hWtqpcvGqrEXu/TacqGNtM+1F2CaXrGm1wvXktsQlCpa0unUbFhjkTqRuoNWFK2m7ETmAqlS3DnesWOPSq9C+Y7FrnT2/+tuQPfdCNel31fJpMEPDwoWDgFfCNevDAvkqV7ECEhyXsxgLVOhY/VZn7lPAhjwQs9ZqCLBUMao8UDYNjyWribzFJfNA74aVsoAaj3UxvfJm+6112chVsr8Vx4WugyNL9bS/9nrpZ3WsiuWmyi8remTPUP2gctBwcXwky2KJHXLEY4HsINlgaYsx3PBu6bHNIdfc9psJ5/+BMdpwqU1m3w8XPVa+RxJuMNhSCT44XH77a3hYeRwto+L0dg3W1nhiTi7dYTE4KLTZ+ht1WG73CHrY9AI+luNvrv4U7MFOHhbiWzLu1M/B6g4V72Q27fW0VTd2tYxsSzXxtsmHtTylCfuDe6euO9yp7E8dT6btYE2f+23b+v6UwJ02z7qyevpVeanFjzU1paef62rOcHmPJ/3Eai9j/FApy71USyNT+9KmLPM1Dleag8rzSoU/yA1tS6RDFq4ccLKocK5T4ouZq7KWHP0dJBsP5Mz/nvK+N1VPLKlriCLyYD/JiM8fltsSBUlkEYT5Q4OxmWGrXGVAfFkEVgs0DQf/+TU/wADvIUG7GWw0RSxXYS8qoqtIzXAowgo+JYVHotmuLNJAp1xQMj18ShQpNcSxmG0itmthWrooliDi6YVPUaNChKewGGolUmE546BOKJYjOmSAMPPgTLTolwAeCY98EqRBwujHrIRxdp1CpFjkmJAn7i4vCZRKCDNix5lI0mcX4Z8F75LJqJRwI9j5gSJVQiQSrZIgfBxeVkoJFSp+BEKqzMoqrAjFTS6kjHBpJExoCRVf1rA+aAqTZbDYEB0CJpdFycYjFTiSSG2DmS2a5igzYsPFJNOTegvmSLiniFd6ZE014kgsx+JGluCAl7U0p0OyIcoguUSal+lTR+jo/5cAtcQewMyWMSlCT7/YaCXlgKdUvvQRYp5LnhVBzWUoSVBRQlEzlcJBOL1kSIsUJzTbGMxJNHoZbEbUoj7rpEcTuhqTVnRBU1BpREl6mY5i5Dmiqcs5Hbq3cW4UMGCwqUTssULRCBUjs1kNOqZAUYQkSKESq9RPsWQWiP7jDnxhjUtvitK45OEHQbmDSu0BjnIkxjdbRVBXYwVWcPhyP/z5AVQPl5KPHmcbOcmrXrexE+kclSP4RA5P9ErYqV6GoSvh53aig9iV8HSxABroR9YJ2dUA5yVsrKxtaLeSpGrWN4+JyR0M+9nFtLMljy1t3NI6kiapVjQJkKxJRvtay7FAsyi7rC1jvlgUluqWWH9diV1/GziZ3lOxxMXNWu6gzc8moKkwyRFxFYbRvNxhrYtFB2tl4oApzNU3VbGqS1aBXeQkYLvRRIxqgxobon43QoqQrVocgIPmWiYBIh1OV6K3IJ0irS3lNaNZjCtCrPqnN2CFLmyywR8wyJW/VDEPOAisGwbjQBGJ4S9ZyDMFHMj3O/ZQj4iFQmEZMXjEIhbvzlbM4ha7+MUwjrGMZ0yQgAAAIfkECQQA/wAsAAAAAPAAggAACP8A/wkcSLCgwYMIEypcyLChw4cQI0qcSLGixYsYM2rcyLGjx48gQ4ocSbKkyZMoU6pcybKly5cwY8qcyfLOqik/cubZybPnznLl7tzJRrOo0aL2cIBBl8ef06dQo0rdia7cqqNYs5bMtgrMNqlgw4r1lwfMKqJa06qtCE7R17Fw4z7Nowjc2rt4Edqbgk6u37/+0OFAm7ewVnA/mgJeLHfbFMKGI8cEl4Cx5b/bykGWzBmlgx+XQ2O+2rk0yWzlFIteHfeHPdOwPdqrzLp23Myxc2PEYbu33B8OdAuHmA2M7+Nwt9kdzjyhA9rIo4ct17w6QXtvpWuXCmaz9dzYj+f/SfADDNBVQtOnB6qor+0Ewb/rvpN99TZF6CU6uFMugerQ8MkXG32slUUaRlwZJ9o23glYWHiiCRZfR3v9t1gCDTq4FoSX/bCcSNlMYeFfGGpYWDb1AUbXHSiFOKJcCZiYF2iWgTFhSg4oYpkiMq6lI2PosPgSgYtR12NWU9SYoUqfMfbhkTSBw1geB86UJGDb3AglTBz6tc1rR5Vz4ZYzQecXOmBiBU6KcE1BJkxiAlZiWl3GJeSbK93xoljoLIkUm2LNiWdKZt6W5oaATjdoSqssduhddYqV5aImoQhYlXlJ6RePlJL046adxSnXo512lM2eYAkqmYKtlRoSjXLl/0GqYZbKdaerG90BmJGm6SoXp7huBGtc6Oj2KVxaBltRo39hWtqpcvGqrEXu/TacqGNtM+1F2CaXrGm1wvXktsQlCpa0unUbFhjkTqRuoNWFK2m7ETmAqlS3DnesWOPSq9C+Y7FrnT2/+tuQPfdCNel31fJpMEPDwoWDgFfCNevDAvkqV7ECEhyXsxgLVOhY/VZn7lPAhjwQs9ZqCLBUMao8UDYNjyWribzFJfNA74aVsoAaj3UxvfJm+6112chVsr8Vx4WugyNL9bS/9nrpZ3WsiuWmyi8remTPUP2gctBwcXwky2KJHXLEY4HsINlgaYsx3PBu6bHNIdfc9psJ5/+BMdpwqU1m3w8XPVa+RxJuMNhSCT44XH77a3hYeRwto+L0dg3W1nhiTi7dYTE4KLTZ+ht1WG73CHrY9AI+luNvrv4U7MFOHhbiWzLu1M/B6g4V72Q27fW0VTd2tYxsSzXxtsmHtTylCfuDe6euO9yp7E8dT6btYE2f+23b+v6UwJ02z7qyevpVeanFjzU1paef62rOcHmPJ/3Eai9j/FApy71USyNT+9KmLPM1Dleag8rzSoU/yA1tS6RDFq4ccLKocK5T4ouZq7KWHP0dJBsP5Mz/nvK+N1VPLKlriCLyYD/JiM8fltsSBUlkEYT5Q4OxmWGrXGVAfFkEVgs0DQf/+TU/wADvIUG7GWw0RSxXYS8qoqtIzXAowgo+JYVHotmuLNJAp1xQMj18ShQpNcSxmG0itmthWrooliDi6YVPUaNChKewGGolUmE546BOKJYjOmSAMPPgTLTolwAeCY98EqRBwujHrIRxdp1CpFjkmJAn7i4vCZRKCE0kSZ9dhH8WvEsmo1JC1VkxKqqSCB+Hl5VRQoWKZFrFKRW2yYWUES6NhIkroVJLAcERKlhsiA4B8wNFbuWRChwdMkOZERsuBk00sYfecDmoNdWII6scixtZgoNZPiWVPcrGMqPSp47Q0S8Baok9bpmtXlanHN6EojshsstzGRNBv4QKJZmT/w0cTNNLhrRIcUKzjcGcxJ+XCWZzUBNPsCi0ItkAZXKmYMeL9POfSjtSW2rzUIFi9C9gCOhE7LFC0YhUNwlqaBsr9VHMmOWeBLkDX1jTURHeARzlSIxvaoogif4lDz8oBzhquR/+/ECltxNQS0NzUlON86c7yYlUp7pUxnzJQdGz6jw7Us/trCYBW+1MVolZ0ZGw0au+od13xuqXx8TkDlVFK2O2uVbbbIOnI2mSXN8TVtiw9XUwHYks97qaL5ror2BBR1NZMlDCMgY4j7sMbtZyh6fKNQH7rA5inZKZwNbEp3JFB16bg9iqePYlqwCtdBIwWs2CdLF0cotj0aGIvkzWFS4JMOhwurJZLNVFWXtCh1nK+iyZ+qc3Qc0slJhCFfOAg7jDycYdcKCIxIx1PD+YAg5suzOkqee76Tltd8dL3vKa97zoTa96zRsQACH5BAkEAP8ALAAAAADwAIIAAAj/AP8JHEiwoMGDCBMqXMiwocOHECNKnEixosWLGDNq3Mixo8ePIEOKHEmypMmTKFOqXMmypcuXMGPKnMnyzqopP3Lm2cmz585y5e7cyUazqNGi9nCAQZfHn9OnUKNK3Ymu3KqjWLOWzLYKzDapYMOK9ZcHzCqiWtOqrQhO0dexcOM+zaMI3Nq7eBHam4JOrt+//tDhQJu3sFZwP5oCXix32xTChiPHBJeAseW/28pBlswZpYMfl0Njvtq5NMls5RSLXh33hz3TsD3aq8y6dtzMsXNjxGG7t9wfDnQLh5gNjO/jcLfZHc48oQPayKOHLde8OkF7b6Vrlwpms/Xc2I/n/0nwAwzQVULTpweqqK/tBMG/676TffU2ReglOrhTLoHq0PDJFxt9rJVFGkZcGSfaNt4JWFh4ogkWX0d7/bdYAg06uBaEl/2wnEjZTGHhXxhqWFg29QFG1x0ohTiiXAmYmBdoloExYUoOKGKZIjKupSNj6LD4EoGLUddjVlPUmKFKnzH24ZE0gcNYHgfOlCRg29wIJUwc+rXNa0eVc+GWM0HnFzpgYgVOinBNQSZMYgJWYlpdxiXkmyvd8aJY6CyJFJtizYlnSmbeluaGgE43aEqrLHboXXWKleWiJqEIWJV5SekXj5SS9OOmncUp16OddpTNnmAJKpmCrZUaEo1y5f9BqmGWynWnqxvdAZiRpukqF6e4bgRrXOjo9ilcWgZbUaN/YVraqXLxqqxF7v02nKhjbTPtRdgml6xptcL15LbEJQqWtLp1GxYY5E6kbqDVhStpuxE5gKpUtw53rFjj0qvQvmOxa509v/rbkD33QjXpd9XyaTBDw8KFg4BXwjXrwwL5KlexAhIcl7MYC1ToWP1WZ+5TwIY8ELPWagiwVDGqPFA2DY8lq4m8xSXzQO+GlbKAGo91Mb3yZvutddnIVbK/FceFroMjS/W0v/Z66Wd1rIrlpsovK3pkz1D9oHLQcHF8JMtiiR1yxGOB7CDZYGmLMdzwbumxzSHX3PabCef/gTHacKlNZt8PFz1WvkcSbjDYUgk+OFx++2t4WHkcLaPi9HYN1tZ4Yk4u3WExOCi02frLtlhu9wh62PQCPpbjb67+FOzB0vwX4lsy7tTPwTYNF+9k+n4uuQhb3enpUU28LfJgKU9pwv7g3qnrDncq+1NXvzl5WNLnftu2wosl8PGtKlt8rJZDWTVcU1Matded5gxX93jqDlWfrr4flbIOnBzV0mRa3+uUxbzG4UpzUHFeqeQXl5uVinTIwlX//sK5TtnPHzFzVQGjIjqKZGNondleVNr3JgZ+zCKKyAP9JHNBf6RPff6DSgYnUrwZwmaC5SuV/sCywoXASoGmyRrJ/1wVPrEA7yFBc6BpNEUsXOlNUtlTSM1sKBkRRiV1ZJqNX0jYEBM6pYKS2eBTOuiqbOzQKWabyPZ6qBUvigWIrkJg9CxSRH8szDCRCksalQU2LjJEgKmKYlFs5xcAlmoVI8JfRcR4RK2IcXYGqxMbE3I9lOVFjlEBIa60+MWLnBEqYMwKJqHix9pVRlUSod5YSgmTUT6FigbDgSYZIsSCidJRO8sIDgHzA0G26JEJzKVGzgcYNNHEHk8cSyOFmcrLwJElOIhhVFDJTDpeJkAtsUctDVVNjrjyXL7cCGouM8luOqQ4odnGYE6Cg2Se0JwcMeOCpvDCi2SjnaExJDw96NXOv4BBnzRMoWgAuk819hMzZgnnQe7AF9ZgsaAWkadt8vCDcoBjlv/YD39+IE1bQTQk2QDmYniSk5Ka9KCW+dJHR/LN7awmARhd6UXc6FLf0E6mILkDSmtqmWfiFCRN4ul7YvrTjayio0LVWlFXgs6kMgY4S23JHUSa1ASUM6ohucMnhYqOh2IVJavYqnYS4NWvqsQebnEqOhRBVLOupCvQW1Bd3HqXbDDUP72p6FXpShO74kARiYkrWcgzBVnydTh2VY9ihaLQwzr2sZCNrGQnS9m8BAQAIfkECQQA/wAsAAAAAPAAggAACP8A/wkcSLCgwYMIEypcyLChw4cQI0qcSLGixYsYM2rcyLGjx48gQ4ocSbKkyZMoU6pcybKly5cwY8qcyfLOqik/cubZybPnznLl7tzJRrOo0aL2cIBBl8ef06dQo0rdia7cqqNYs5bMtgrMNqlgw4r1lwfMKqJa06qtCE7R17Fw4z7Nowjc2rt4Edqbgk6u37/+0OFAm7ewVnA/mgJeLHfbFMKGI8cEl4Cx5b/bykGWzBmlgx+XQ2O+2rk0yWzlFIteHfeHPdOwPdqrzLp23Myxc2PEYbu33B8OdAuHmA2M7+Nwt9kdzjyhA9rIo4ct17w6QXtvpWuXCmaz9dzYj+f/SfADDNBVQtOnB6qor+0Ewb/rvpN99TZF6CU6uFMugerQ8MkXG32slUUaRlwZJ9o23glYWHiiCRZfR3v9t1gCDTq4FoSX/bCcSNlMYeFfGGpYWDb1AUbXHSiFOKJcCZiYF2iWgTFhSg4oYpkiMq6lI2PosPgSgYtR12NWU9SYoUqfMfbhkTSBw1geB86UJGDb3AglTBz6tc1rR5Vz4ZYzQecXOmBiBU6KcE1BJkxiAlZiWl3GJeSbK93xoljoLIkUm2LNiWdKZt6W5oaATjdoSqssduhddYqV5aImoQhYlXlJ6RePlJL046adxSnXo512lM2eYAkqmYKtlRoSjXLl/0GqYZbKdaerG90BmJGm6SoXp7huBGtc6Oj2KVxaBltRo39hWtqpcvGqrEXu/TacqGNtM+1F2CaXrGm1wvXktsQlCpa0unUbFhjkTqRuoNWFK2m7ETmAqlS3DnesWOPSq9C+Y7FrnT2/+tuQPfdCNel31fJpMEPDwoWDgFfCNevDAvkqV7ECEhyXsxgL1LC4Gpr7FLAhD8SstRoCLFWMKQ+UzchiyWoib3HFPNC7YaEsoMZjXUyvvNl+a102cvVrsMuK9ljouTHb66Wf1bEqlpspMw31kTxD9UPMd9AMFsdHrizW1zqvIjZUIDsIdFja6iyQ2mHBDKXHY+UhN0E4sP/ZtoYJ6723zOVkhzaZgQ9eEGrb2Pxm4oovbrSMkEfuauWWd4p55oNCmy3nnb4N1uGg4ym6VKSXTmbXJ6s+aMVioev6kRGDNfHsiNuJ+5anS0X17tWx7lTcwPdYO+rF9yg1XLIn/x3OcOXr/HdPgzW9hsuPlfr11WkN1e3cH52wU5OHH5vwTtnNfTZCd0Z00+Erkof0pqFPvvkI+6M+bA6Y/NT2zoMV+GBjtbEorXhAc5xpNEUs8/1jZPuTzPvC8rfdQQ8qWOvM8cDCoPBN0B/0w8sFJWY+2EVlYYaJVFjIdr3spep3RpnZXw4IvA1CxWdrsSHywtc7qeBQK96TSvv/cFe9sGQwLUGMSvOKZ7ZoqSWJUImg8wpYsKxAESpDxF3/GPMDGKYkGzq0nQMFkr/FoIkm9libWH7IvSb+ZYAu6duFvAg8E5KofCSxBxUNNUaDXPFcdNwIai4TQgcWJzTbGMxJcKBGuFTQkEX00hTweJFsMDI0NOzjP2S4GjBkkiL2kJ9oPqlJTtrHLIE8yB34wppHalIg2YjklH5QDnBk8R/74c8P/PeXQr5ycWG8DE9yQsxiNvIyX/olRP64ndUk4JbK5FszmwnAaDIkbNOMDhyt+ZAmZfM90OQmQlbBy2+2SZwI2qM5W0NJdDrkDsFcZ/p86c6J3EGW60SHK+tJTJFV4LOZCdgnPy0SynL2Bh2KCOdAMdKV8S2oLgtdSTZW6Z/e0JKeEa3UHXCgiMQ4lCzkmQIOFJpRiarnpOlJZUlXytKWuvSlMK1OQAAAIfkECQQA/wAsAAAAAPAAggAACP8A/wkcSLCgwYMIEypcyLChw4cQI0qcSLGixYsYM2rcyLGjx48gQ4ocSbKkyZMoU6pcybKly5cwY8qcyfLOqik/cubZybPnznLl7tzJRrOo0aL2cIBBl8ef06dQo0rdia7cqqNYs5bMtgrMNqlgw4r1lwfMKqJa06qtCE7R17Fw4z7Nowjc2rt4Edqbgk6u37/+0OFAm7ewVnA/ACv+u20KYcOQY95JsLgy43KPI2tG6SCx5c9+t13dTLpkubegU8f9Ya+0a4/2KKueHXdbude4MYKjzVvuDwe5g0dU1Ls43G12hStPmE228edhby+fPjBbX+jYwYLJTD33quJ5Evz/AAN0ldDz54Equj47AfDuysGo3qbIvEQHd8olaJraPXzh1llW1mgYcSUfaNtw9x9p9vD3l2DvdbSXg4sloOCCmuHw1w/JiZTNFBQCZiGGuB0oFl13oPRhiH4lQOJrAYalSIQpOUDcYoq86FqDUqGT4kt3oPaXdDpupiFURMLU2WIdFhnZgcgZNYVi29DoZGHW+XdUOYq5eOWXIoEjZFxTgGnmR/aMCdePZ7aZUZp/jejmnBbB6VeSdOYJkZ21Wannnwvt5leOgBbKEJd+tWboogiZCNcPjEZaUDZqhsWmpJHeMSimnN4Yl5+cApoNi2DhGWqhiB53aqSUytXkqoCm/zoWGLAu2qqqtRrq6Viv5kqnPXIR6uuf7ImFzrCAThmXosj+KheBzc5ZaVTCRuvmrmF5aa2bR8K17ZyaLvttm9m4Om6bzoll6rlFOhpWmeyCKWtYkMb75XeP2vtluGNto++VwMKVx79XkgrVwAQXafBcCSsscMM6LuwUwhBjKDFZFZN4McUZdzcqrh13x69Y9YZM3cj0mtzdvGBVq7Jwyo617suveTYWDjQvd7E/l+b8GsphXeizZixL5e/QudlMMtK4ObDzzEwb1u1YPUcdWbpiWV2a06tpTRq2YeHsdWQffzp2ZEVLpW3G2TCb261wQf2vInlUXVraUoFKMI9ru//mwLRRlZyxzWK/5q5YvSY8ch5ubyZoXMeGXKw/fZMNeFTQQjz1U/BupnS/QtsLd1R247X5zSHHbLTeavEJV+QZcy2WnHnFaG7Hn7dsWO5Ldwy0jHmBPVbjDWM9VudpCa9uyPgOqZby2Zp8eFwuFwV9WMQ3/PdiP4TOUja8o64yj4qhk31L9kxOfc7NK1b4SzhcDhbtL6suIusl2TP9ceeHfH3c3vtINvC2JqZlY39y2cZgToID9fklcz5rDoKmgL8CNfAziYugAxUDhgzWiW6g8aAGZ7MNswRwIXfgi2ogaDUJ0iYPPygHOPpHEPzk5wfy+0vpWhi+1PAkJ0AM4gaZEURDrf0vO7xJQBG9djokFkdwZ0PIHYboRNC8L4oJWVIVaaNELD5kFTncIlyQ58WGHFCMlflNGSdyhx6iMSoJ2OEaGzKZNxqLhXOUyCqMh8YE4DGPFLGHW9CIDkUsEZAU6crOEFQXRJIkGyncD29iKEdHggSSOFDED3bil/D8YAo4OKQlTwJJ9JhSKCccpSpXycpWuvKVJAkIACH5BAkEAP8ALAAAAADwAIIAAAj/AP8JHEiwoMGDCBMqXMiwocOHECNKnEixosWLGDNq3Mixo8ePIEOKHEmypMmTKFOqXMmypcuXMGPKnEmzps2bOHPq3Mmzp8+fQIMKHUq0qNGjSJMqXcq0qdODDuw9neo0G7o8irJR3Yp0ir+v28BxHSv0ztez/sBoJctWp1W0Z9FJbUu3ple4Z7etqssXplm8cBX1HazyLWC4agkrJnn3MNwEaxdL5vjXMV50kSdrrmjYMl7Im0NPXOXZMWjRqBtmK7etNOAEqWMzdPDDNV7BsnMjBNfa9tlyuoMXdJDA91mxwpP/U2Tc3zYHypOXaw47unDexqdYF26vt+0724N3//d9Orzs8baBm8+NvvTz9bnB+cYNP/Z023PrpwZj+4f+2Nl45xl4/6FWmWf0FRgac65Bp2Bo2eThmnoPbnafZ9tUCKGAjiGn4WQXWgbGh5oF6B6JmjHomYcoEmaPawm2OBg6paEj42KNWZbfjXy9WNpePA7GIWAxBtmWiqYZ2RcOrinJ14GO7ejkWNm4xuKUYxXnGYVYjsWfZ9p1SVaIh/kn5likeWbmmVtBCViGbG7lo2V5xMmVhHTauRWejtWp51R8Hubnn04FCtighDJlKF6IJqrUonA16uhREWI46VJu4rXmpUdlCtemnBZFJpGhdlUal6UOVZtnOKRqFKRwEf/oalmuZTbrT6PiBeetQa1qGai88uQArGihGuxOTJYm67E8aekZsz4NWxqw0N6EpGOtVusWsWg5qC1OuX7GZjZSKmXiqWwqkseySoWLl7dY2iNhdUs5MCRg1Crpa7ZKfVnalU4emEe5RMnnmo1n0ogWvUad++OZycIVplG+Ymirkg7HalTEpfGLZY5wvTdUe54h3KW0pl3MU2f/nlnxYUXy9PKvZ3p6G1DXekawkc6WNvFOOVtmrJJp+jZ0TUEneaa/8+mUdJRs2tucPz+o/FI2M7Nqp7xTy0WTPQo3rWfRzXnsEg73WlaenSCTB69K9jBt2zY7n/n0qVaLtNrUX7H/q2c2chu3DQ55e4RD2M0BOWk2PU+9zRRvd5TN4Xx/BXCiLFcOxuUX2aNu5Za7mnnl24CxSuEN3TEF4pUrnirjoDP6Qzng1E2QA3fcUc4PaU/td6lYx95nHnn8YPzxx7MuPFi2h3r38tC7lkDzpXIc/fWu5RvsHcpj7z1aZmtL2/fknzX9twet0nv5lf+MfkGAsw/9D5G/X9AdWcsv/e/2H3RH4/qzDDpc17+GrAKAAVwYAQv4EM+t73voUAT1GMiQVYCBW8vbhiI4R0GKZEN1CcCgcWbHvw5q5IM4UMQPiGebPCTgB1PAwQRN+JEP5u6GOMwd6mjIwx768IdArFZAAQAAIfkECQQA/wAsAAAAAPAAggAACP8A/wkcSLCgwYMIEypcyLChw4cQI0qcSLGixYsYM2rcyLGjx48gQ4ocSbKkyZMoU6pcybKly5cwY8qcSbOmzZs4c+rcybOnz59AgwodSrSo0aNIkypdyrSp06dQo0qdSrWq1atYs2rdyrWr169gw4odS7as2bNo06pdy7at27dw48qdS7eu3bt48+rdy7ev37+AAwseTLiw4cOIEytezLix48eQI0ueTLmy5cuYM2vezLmz58+gQ4seTbq06dOoU6tezbq167w/8sieTTvPj9c08/jbzbu3vzy4Z+r27Rt48JjDifM2fvxlcuW/m8N8rpy59JX2oPe+fZ3lHe28uXf/V4kD/G4w41dOMe+vXHqVP9jjeJ+SuvI79E9mZ58tv8ny5m3jn0lgsCfegCFlYx9x7iEo0irs+YOfgyElEGF/FH7kQIQJZAiSIhE26CFH2WwToT0jdlROhOg8lg2KTpUY4mOK5DEhU+tF6IBj9ujWIVMOLEjcgYvFt9t8SxUY4SqOfbccjEiBE6E/LTqGjm8/HiXjjI0B6NsUSBnJnoCNbUncjUN5yZ6Ii+Wo3DY7DmWPiRFug+FiQYKXwJ0/ZXPllEw2JqZ2igg1qHlZLuYke4X+BOKU/kC5mIVTgtnTo1OyqRiEkLbHE6Yc8qmYkp02ihOoJz7mAJ2d/iBqTNkc/7pmZD12uhs6ksJkz5+QEukYp7b6gyRMOLA65Z6UuWlrAnGyZA+pkG6Ta2SodlrOqyRls2KwEl6WDbS2boMDtiDhwKutgXpLKbf+bDNFsx9lYy67/oCzmZ/08gaGvR3ZU2O+/N57Lr3bgLEKuQ/dMcXA3KbLWTbr5rubbeWAM+1BDtxxRzk/GJsvmp3FKjF0s/1g8sknMzyytKRVO/LLy178mZow1xyhr6PdobLNPPM2LGoOyNqzzQnIbNoqHg/9sqWvfas0zD/Ai9sdQj99LMjN3RGx1eyh43B6q2zNNXEJfJ2fv0lbjY4iRvu3ChhCwryNIgGnOFA2CicQd7A/lCiDtd0G4Y2DIrHt3VseCfwwBQ5tA84Q3hpHLrnGCDtu+eWYZ675SAEBACH5BAkEAP8ALAAAAADwAIIAAAj/AP8JHEiwoMGDCBMqXMiwocOHECNKnEixosWLGDNq3Mixo8ePIEOKHEmypMmTKFOqXMmypcuXMGPKnEmzps2bOHPq3Mmzp8+fQIMKHUq0qNGjSJMqXcq0qdOnUKNKnUq1qtWrWLNq3cq1q9evYMOKHUu2rNmzaNOqXcu2rdu3cOPKnUu3rt27ePPq3cu3r9+/gAMLHky4sOHDiBMrXsy4sePHkCNLnky5suXLmDNr3sy5s+fPoEOLHk26tOnTqFOrXs26tevXsGPLnk27tu3buHPr3s27t+/fwIMLH068uPHjyJMrJ5nN3vKRivLceQ7SXh5/Cah//OGvOw7tHO90/++exzn4jOjGd89+/iIO9eOntK+YbRv88dPnS5xyf/w2B/pB5MB1/a2XTYAOcVfgeIogyJB4C6rXoIMJJRAhfPJRaNAqF95XjoYFgdHhfROC+I8D9o2o3g8H1pRNAtuY95l1KqqHjowx2ZNiAi1+xmGN6n0HUzblENjdD6LxB+R4CQDYkj0WkiiaIkuqV06PJzlA5YKrhJaNiFV2tw0OWIpEZIoRguNllGH6s80UToLkwBRoXhijl+m1OR4Yana0ypZAolMmZ9nkqaeYYKwyaER3KFLnkuyB9uKh8OXxQzng4JiQA3fcUc4PRh76oZcKUnpfHqj+oOqqqxpqKpNxhooG6Ku0VgnGop+9V+uuKiqCK2h3uMrrsP51qZoDpRI7bJOurfKosqaO+tqX0L76g6av3ZFstUAm0Kdtd7DJbYfoGKvbKuKOe98P+flmj6Pq+qcItr+tAkaow27Dp3LZ3DFFAvjqmUcC5bSrXb84KAJqwAUO/IMiOBisYb+dVmxxp7+aqPHGHHcMWUAAIfkECQQA/wAsAAAAAPAAggAACP8A/wkcSLCgwYMIEypcyLChw4cQI0qcSLGixYsYM2rcyLGjx48gQ4ocSbKkyZMoU6pcybKly5cwY8qcSbOmzZs4c+rcybOnz59AgwodSrSo0aNIkypdyrSp06dQo0qdSrWq1atYs2rdyrWr169gw4odS7as2bNo06pdy7at27dw48qdS7eu3bt48+rdy7ev37+AAwseTLiw4cOIEytezLix48eQI0ueTLmy5cuYM2vezLmz58+gQ4seTbq06dOoU6tezbq169ewY8ueTbu27du4c+vezbu379/AgwsfTry48ePIkysnmc3e8pGK8tx5DtJeHn8JqH/84a87Du0c73T/757HOfiM6MZ3z37+Ig7146e0r5htG/zx0+dLnHJ//DYH+kHkwHX9rZdNgA5xV+B4iiDIkHgLqiefgwklECF8E1JY0CoX3teghgSB0aGHIA7kgH0jqgfGgSVal6J6CZgHIocv+ldOif/wV+N4CQAIoog7jlcOixQqGKQ/eQxJYTYWHkmeIj4GyKST6v2wCpHtZZMelSquIiN4U3IJ339ZNikmfvNlo8iZ5CH43pl5OHgHilRus6SRR/4wI5076gmimkdmCOIdeI54I44CrbKloYgStEqhBebX6EB3KMLnfZJO6igYBML3paYFgTOFmXGCulA2d5Tznamsturqq7BCAhYQACH5BAkEAP8ALAAAAADwAIIAAAj/AP8JHEiwoMGDCBMqXMiwocOHECNKnEixosWLGDNq3Mixo8ePIEOKHEmypMmTKFOqXMmypcuXMGPKnEmzps2bOHPq3Mmzp8+fQIMKHUq0qNGjSJMqXcq0qdOnUKNKnUq1qtWrWLNq3cq1q9evYMOKHUu2rNmzaNOqXcu2rdu3cOPKnUu3rt27ePPq3cu3r9+/gAMLHky4sOHDiBMrXsy4sePHkCNLnky5suXLmDNr3sy5s+fPoEOLHk26tOnTqFOrXs26tevXsGPLnk27tu3buHPr3s27t+/fwIMLH068uPHjyJMrJ5nN3vKRivI4f/7RXh5/P6h//OGvezntHO90iO+exwF4jejGd89+/iIO9eO/t6eYbRv88XfmT5xyf/y2bPpB5MB1/fmTQIAQcVdgAgAi2JB4Bf7QoIMMJVCgIhQ6tMqFGToERn8YdtiQA/apF6KIDYGjHg4oQrShP6u0GBE44Mho44045qjjjjz26OOPQAYp5JBEFmnkkUgmqeSSTDbp5JMZBQQAOw==", Zc = "data:image/gif;base64,R0lGODlhoABWAPf/AL7r6bbp5hK3rxy6so7c2On497fp5mbQy3zX0h66shC2rlrNx0jHwfH6+tjy8Sm+tsrv7TLAuS2/uDbCu6zm44ba1u/6+Zrg3MTt6krIweL29aDi38Ps6jrDvLDn5FTLxe75+WDOyev4+Ijb1uD19Mzv7YDY1EzIwl7OyBe4sE7JwwKyqc/w7ur49zTBuuX29tnz8ozc2CO8tAi0q6bk4cDs6TDAuT3EvXPUz4Ta1VfMxgOyqpLe2rrq5/b8/Cu+t5Dd2drz8tLx7/X8+ya9tXbV0BS4r6Tj4GzSzUbHwH/Y0w62rWTQypbf22vSzLLn5VHKxKnl4sfu7FPKxHjW0arl4hq5sZvg3dPx8ELFv9719HTV0Irb18bt60DFvtTx8DnCvN7087To5Si+tnDTzqjk4a7m5Nr08lbLxa7m41zNyGnRzB+7s+j3983v7mPPynrW0vD6+aHi30/Jw0PGv8bu6z/Evqzl4xm5sQGyqeb39vr9/TPBuv3+/u35+AWzqvP7+m7Tzg21rfz+/gq0rPb8+wu1rP7+/g+2rhW4sEXGwNby8Qazq7zq6Pj8/Pv9/dfy8fn9/Oz5+Mnu7PT7+93089Xy8PL7+gy1rZ7h3oPZ1SW8taPj4PX7+wm0rILZ1G/Tzpng3Mju7Ae0q7Xo5jjCuxu6snHUzwazqp/i3tHx74TZ1SW9tV3OyGLPydDw7yi9tgezqye9tQSzqg61rf7//2jRyyS8tS/AuOf39gSyqvn9/ZTe2vf8/Pz+/fv+/b3r6Nz085jf3CG7tNDw7hO3r5Xf29Ty8Bi5sfv+/vT7+gy1rLvq5/r9/Nby8Ivc15zh3T7Eve35+c7v7mrRzFvNx/P7+9Hw74Xa1ez4+PL6+gu0rBi5sCS8tETGv8Hs6ZXe2/j9/Of495ff25Hd2WTPytTy8bPo5Ri4sNz08vn8/JTe2+T29f3//rnq59bz8dXy8d3184vc2JLd2uf397/r6b3q6OH29bnp54zc1zzDveL19dfz8XnW0QCyqdPT0yH/C05FVFNDQVBFMi4wAwEAAAAh/wtYTVAgRGF0YVhNUDw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuNi1jMTQwIDc5LjE2MDQ1MSwgMjAxNy8wNS8wNi0wMTowODoyMSAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENDIChNYWNpbnRvc2gpIiB4bXBNTTpJbnN0YW5jZUlEPSJ4bXAuaWlkOkYxRDhDRjQ4Q0NCRDExRTg4Qzc3RDY1N0Y5QjUwMEUxIiB4bXBNTTpEb2N1bWVudElEPSJ4bXAuZGlkOkYxRDhDRjQ5Q0NCRDExRTg4Qzc3RDY1N0Y5QjUwMEUxIj4gPHhtcE1NOkRlcml2ZWRGcm9tIHN0UmVmOmluc3RhbmNlSUQ9InhtcC5paWQ6RjFEOENGNDZDQ0JEMTFFODhDNzdENjU3RjlCNTAwRTEiIHN0UmVmOmRvY3VtZW50SUQ9InhtcC5kaWQ6RjFEOENGNDdDQ0JEMTFFODhDNzdENjU3RjlCNTAwRTEiLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/eHBhY2tldCBlbmQ9InIiPz4B//79/Pv6+fj39vX08/Lx8O/u7ezr6uno5+bl5OPi4eDf3t3c29rZ2NfW1dTT0tHQz87NzMvKycjHxsXEw8LBwL++vby7urm4t7a1tLOysbCvrq2sq6qpqKempaSjoqGgn56dnJuamZiXlpWUk5KRkI+OjYyLiomIh4aFhIOCgYB/fn18e3p5eHd2dXRzcnFwb25tbGtqaWhnZmVkY2JhYF9eXVxbWllYV1ZVVFNSUVBPTk1MS0pJSEdGRURDQkFAPz49PDs6OTg3NjU0MzIxMC8uLSwrKikoJyYlJCMiISAfHh0cGxoZGBcWFRQTEhEQDw4NDAsKCQgHBgUEAwIBAAAh+QQJBAD/ACwAAAAAoABWAAAIvQD/CRxIsKDBgwgTKlzIsKHDhxAjSpxIsaLFixgzatzIsaPHjyBDihxJsqTJkyhTqlzJsqXLlzBjypxJs6bNmzhz6tzJs6fPn0CDCh1KtKjRo0iTKl3KtKnTp1CjSp1KtarVq1izat3KtavXr2DDih1LtqzZs2jTql3Ltq3bt3Djyp1Lt67du3jz6t3Lt6/fv4ADCx5MuLDhw4gTK17MuLHjx5AjS55MubLly5gza97MubPnz6BDix5NunTQgAAh+QQJBAD/ACwAAAAAoABWAAAI/wD/CRxIsKDBgwgTKlzIsKHDhxAjSpxIsaLFixgzatzIsaPHjyBDihxJsqTJkyhTqlzJsqXLlzBjypxJs6bNmzhz6txZk8AqnkBJEsjS7WfQox4JxPKHjhrSpxrJ+JtKyynUqxPLoJs6tZhRrGAZzlvFlesmAmHTJhQWoSzXBHfUyh1IAE4et1ynCJsrFxwYvGWt8g1bhhZgroIHYyWA5rC/BHsVpy13GBxayWHvUMOrLy7mtGXactV1+XPaVUunTiltOuyqFf62yWktl8Amf19pp8URoQxr3cCDCx9OvLjx48iTK1/OvLnz59CjS59Ovbr169iza9/Ovbv37+DDizAfT768+fPo06tfz769+/fw48ufT7++/fv48+vfz7+///8ABijggAQWaOCBCCb4XkAAIfkECQQA/wAsAAAAAKAAVgAACP8A/wkcSLCgwYMIEypcyLChw4cQI0qcSLGixYsYM2pEWAYOmY9kVl3ZSLKkyZMH5YCJwPJHOXxwVhFASbOmzYfg/OnUiUoBqk0h0IS8SbSoTXDFdirdiS6ByJlGo0q1uGrb0qv+aKFDU2Sq168NyVjFilWBIjJQwapVC2cT2bfb0AhLu7au0bZv80YoQ9euX5p488JVBO6vYZSrwAgWPCfT4ccbCVBjGaHbYqw/4EDefJFApisdy5WjheryzmLUOKvuTADOvBOWTdNKvbo2VTInTBdbZbv3RAIE0Ni5vKmv7+MMhZ1AtzjBHeTQGxIoMzbvFGHRsytcFWIxbe3gC3alFPw9vPl/d+C8TYD9vPs75ciCM+5eexk0V/U9r18/UwSlutDHH3ir6LLTFAIOqN0qK/izjRwKDkiAW7xFOCAOeyVo4YYcdujhhyCGKOKIJJZo4okopqjiiiy26OKLMMYo44w01mjjjTjmqOOOPPbo449ABinkkEQWaeSRSCap5JJMNunkk1BGKeWUVFZp5ZVYZqnlllx26eWXYIYp5phklmmmjwEBACH5BAkEAP8ALAAAAACgAFYAAAj/AP8JHEiwoMGDCBMqXMiwocOHECNKnEixosWLGDNq3Mixo8ePDQnMg4PjDpoIKNGpXInuRBlqOAgQAEmzpk2BBOBQgxOBloBYuoL6G0rUHyoFqDaFQENm1c2nUCmKJANrU9GrWLOiS7DqysyoYMMaXIUGHa2saNMOpYUOTRGxcKHmLKu2bl0Fish8jcuX46pVZ+0KVrsNjbC9fRNPFIlusOO6EcogVkyZobATCR5rTrtNEbjKoBWWQbO5dNo5mUKrJkgggmZdCX6gnB0hQYLGm3/AWa0aTmbBo3RFWIUDxzw5V5JnuvKXWrlytFA9LkaNd+VVuOtu+7GKwKp5DGXC/5l3optjWtWt9yXwW60uNPMmQ1xF5sTgYk7Vwy1jVW0sWCJhJBMadgi2iXz62XRFKXWhQ01+G12WXVoJ3JFgVD/UBQZ4HxFQxjZ2TSHMhU+BU05aJ3Bg0yoh2JUeiTbdAYcuWE2BoEdlwFHXizCu6NpQsXQXlYwUjtjjU/jY54+QYN1xYlbg3HikR6s8J2VNo2Glj4VTynWlTZn8OJQuX3ZpZkKr0DiUjWe2GdEqK/izjRxu1ukQAVZBaOeeCeEQWZl8BirooIQWauihiCaq6KKMNuroo5BGKumklFZq6aWYZqrpppx26umnoIYq6qiklmrqqaimquqqrLbq6quwxikq66y01mrrrbjmquuuvPbq66/ABivssMQWa+yxyCar7LLMNuvss60GBAAh+QQJBAD/ACwAAAAAoABWAAAI/wD/CRxIsKDBgwgTKlzIsKHDhxAjSpxIsaLFixgzatzIsaPHjw0JzIOD4w6aCCjRqVyJ7kQZajgIEABJs6ZNgQTgUIMTgZaAWLqC+htK1B8qBag2hUBDZtXNp1ApiiQDa1PRq1izokuw6srMqGDDGlyFBh2trGjTDqWFDk0RsXCh5iyrtm5dBYrIfI3Ll+OqVWftCla7DY2wvX0TTxSJbrDjuhHKIFZMmaGwEwkea067TRG4yqAVlkGzuXTaOZlCqyZIIIJmXQl+oJwdIUGCxpt/wFmtGk5mwaN0RViFA8c8OVeSZ7ryl1q5crRQPS5GjXdlArjrbvuxisCqeQxlwv+Zd6KbY1rVrfddZb6uLjTzJkNcRebE4GJO1cMtkx1tLFgiYSQTGnYItol8+tl0hz51oUNNfhtd1h9aCdyRYFQFqgUGeB8RUMY2dk0hzIU25VRXFhzYtEoIdqVHIkiZFKOWHQh6VAYcdbn4YkfgWJVWU1HdgSOFI+7oEQFpzVJOjTTdUQ5a4DBpJEXzBJbVCVLSNBpW+lg45UYEPIlWBFnWlIlrROlS5pcQVYkWOvYktoouRE2xJpsOUZMWDpStsoI/28iBp0b8oaXPdVZBOOhFemYVi0yVFQGGZIteNE8WaNlZ6aYFrSIjVrpwyCmn3o1556gXrqIIWvGhSuqEa52g6qp6wtzhyZWpzbroKtTEgtUKaOhaKQ767IBVLOUIuyumWG0jqrJfCrMqVkukCC2bq6B5VQKyXgtaOe1dNZy3X04Bqz+akmvkjVOg4a67U9zRrbr01mvvvfjmq+++/Pbr778AByzwwAQXbPDBCCes8MIMN+zwwxBHLPHEFFds8cUYZ6zxxhx37PHHIIcs8sgkl2zyySinrPLKLLfsMssBAQAh+QQJBAD/ACwAAAAAoABWAAAI/wD/CRxIsKDBgwgTKlzIsKHDhxAjSpxIsaLFixgzatzIsaPHjw0JzIOD4w6aCCjRqVyJ7kQZajgIEABJs6ZNgQTgUIMTgZaAWLqC+htK1B8qBag2hUBDZtXNp1ApiiQDa1PRq1izokuw6srMqGDDGlyFBh2trGjTDqWFDk0RsXCh5iyrtm5dBYrIfI3Ll+OqVWftCla7DY2wvX0TTxSJbrDjuhHKIFZMmaGwEwkea067TRG4yqAVlkGzuXTaOZlCqyZIIIJmXQl+oJwdIUGCxpt/wFmtGk5mwaN0RViFA8c8OVeSZ7ryl1q5crRQPS5GjXflVbjrbvuxisCqeQxlwv+Zd6KbY1rVrfcl8FutLjTzJkNcRebE4GJO1cMtY15tLFgiYSQTGnYItol8+tl0hz51oUNNfhtdll1aCdyRYFQMqgUGeB8RUMY2dk0hzIU25VRXFhzYtEoIdqVHIkiZFKOWHQh6VAYcdbn4YkdXtJdVU1HdgSNaCYy4o0fCpDVLOTXSdEc5aIHT5JEUlTHhVSdMSdNoWOljIZUbEUBNWhFoWVMmrhGli5lgQiRMLGihY09iq+hC1BRstunQKmnhQNkqK/izjRx6avSEj0XpUxkBVkFY6EVwBIpVLDJVVgQYkj16ETj2ZYWnpqAWxF5WunAYaqgioVXmqacSQFpW8bH/iiqia+Upq37C4BMYlqnd+mhOcF61Ahq+alrECXZeFUs5xT66yhR5YGXInM3qic8UWplaLZUEgJHVD9vqSQ0sWWVha7igoUGrP0yiS6W6WcFxrruKwYtVEfPS25e9V+Gr74vl9Ndvvv/CtUqaV6FBcMFhZZJFVvo4yjBvq3R61SYTJwiHPpIWRcsVGatHVrJFESJxyKDNM48nWA2LMm8y7VqUIiC/vJpVWG1zss2JEVAEWmTw3BvJRW1CqNCLkptVpUgrlgmUWRndNGXgdHzVzlOHRcAPaG3zWdZ8EZAkWlN8DTZcd+D849lxxRdtVrR8ybbWSmcFS4pzhyUM0VdFTWB23k+BA3VWxWgL+E3zXDmUPgsfXtETwRJVjtyOR1VOHrMIKmLlYhGALTpGci6WPSWJbvrpqKeu+uqst+7667DHLvvstNdu++248xwQACH5BAkEAP8ALAAAAACgAFYAAAj/AP8JHEiwoMGDCBMqXMiwocOHECNKnEixosWLGDNq3Mixo8ePDQnMg4PjDpoIKNGpXInuRBlqOAgQAEmzpk2BBOBQgxOBloBYuoL6G0rUHyoFqDaFQENm1c2nUCmKJANrU9GrWLOiS7DqysyoYMMaXIUGHa2saNMOpYUOTRGxcKHmLKu2bl0Fish8jcuX46pVZ+0KVrsNjbC9fRNPFIlusOO6EcogVkyZobATCR5rTrtNEbjKoBWWQbO5dNo5mUKrJkgggmZdCX6gnB0hQYLGm3/AWa0aTmbBo3RFWIUDxzw5V5JnuvKXWrlytFA9LkaNd+VVuOtu+7GKwKp5DGXC/5l3optjWtWt9yXwW60uNPMmQ1xF5sTgYk7Vwy1jXm0sWCJhJBMadgi2iXz62XSHPnWhQ01+G12WXVoJ3JFgVAyqBQZ4HxFQxjZ2TSHMhTblVFcWHNi0Sgh2pUciSJkUo5YdCHpUBhx1ufhiR1e0l1VTUd2BI1oJjLijR8KkNUs5NdJ0RzlogdPkkRSVMeFVJ0xJ02hY6WMhlRsRQE1aEWhZUyauEaWLmWBCJEwsaKFjT2Kr6ELUFGy26dAqaeFA2Sor+LONHHpq9ISPRelTGQFWQVjoRXAEilUsMlVWBBiSPXoROPZlhaemoBbEXla6cBhqqCKhVeappxJAWlbxsf+KKqJr5SmrfsLgExiWqd36aE5wXrUCGr5qWsQJdl4VSznFPrrKFHlgZciczeqJzxRamVotlQSAkdUP2+pJDSxZZWFruKChQas/TKJLpbpZwXGuu4rBi1UR89Lbl71X4avvi+X012++/8K1SppXoUFwwWGVoUhW+jjKMG8EdHrVJhMnCIc+khZFyxUZq7dKOdJdRYjEIYM2zzwzYDVsyhQTsGtRioAM82o/ZLUNyjcnZuKPPfeW7MWEBl3ZPAhfVanRimUCZVabFM10YuAMfRXPU4fVLVrbaJs1XGSkNcVnX8eFdFo6lg3WytFmRUsZasPVWlo/pBh3WOB0jJUdT9zJDRY4Y6aFDtx+QzXPukSdQG3hN9kDIpmEM66i1VglUA7Wkm+UoVr6xJr5R+BgW1cCOEj5eUcE2CP66HphfvpEqg+WwCbFdef16xLhY7FdQCnFBRrPPeccGmikjXtCaFA+GC20bLMNLcFifHx4BAhsGlERTL/nJqNcj732e5KhvGbZg78nDo+XVr75IRGQhYybrc9+SCOho8Bj8s8fUndg2HElWuDSn0QIkAmY8AQdz2OeAplXCgFWRCQkoYZMJjjByDnwghgETUAAACH5BAkEAP8ALAAAAACgAFYAAAj/AP8JHEiwoMGDCBMqXMiwocOHECNKnEixosWLGDNq3Mixo8ePDQmAW4XjDpoIKNGpXInuxB1qqwgQAEmzpk2BBOBQKxKh2JJYunSt8Ee0qD9UiLZtQoMGx6qbUKNWnEcmQgKjWLNqLbYJzhWpYMMeJLAKDbpZWtOqJfoHXdOnYuNChTMF3dq7d2llwSG378dVq7bhHXxXF5or8/wqtkhgXoI8hCOv/SFn5uLLDhufsCu5c1q98yxjHn2wDBrPqNWeyES6NUECETpvS/ADpW2rCdAN7fwDjuvWcLpF1hVhFRk48+RcWZ7pCmAc1NDQygOZMDpqvzGv4py3uMzQC2Ui/9+8Gy8tMtkVExCOdwr4iWTJZKl+txjc9GLLXF0740djjDKhoc9gCYiGX1R32HHXdfdlJNIJCuC1yR0HSqXIXRGAAxIBZXCnFhplVHgTHHdl0YVNcISAFzUGithRJh5i9UcWMt1URhF3UZOYix6Bs19aLEp1B45pbfIVjx2JtFaQYL2UloZIdtShai0ieBpWdlAYJUdkqAVGlVJdEVtRuoC5ZUXg0PKZPYoFVhQaZp4pEVlq8aXeKkTREqKcGd3xI1Y0XkYALP6ssiOfF62ii1axxCkWDgnsiahF81yo1RSOTnomAX8WFcuhmob6zzxp6ZOpqDwSoKJW76E6Kada0f9yqqsVCmOPmlkxcCStfOY0w6W8TlrECYRktU05wSK6yhRaLcFmsnLiw2xW6IAKLZIEgKHVDw1eyyM1hGYVqLdRotEpUeXMSi5p5moFh7rrYtZuVkXAG+9i82JV770ulsOevvby29cqY2IFp8AVlmEpVvp0i7BrBJygVQIOP0waDmDskJUgu1rs2irloJIVLRV7fNk88wiWFRomZ0eAyoB23LJ2BRu1Tckz95VTWmQEnDOKacEi6c+LzVNKWj4TDRI45RQ5tNJ9gbOoVjFBrV4WaW1jrdVidZnWFMIoNk8I/80MTs1YYdfXPFcQZQLO/BKglp5r46rLl0m7SsCAaf3/wEFcmfzA8LMmS61WFviEJce0WP0gM8LgeF3kFXlLJMyqW9npMTiCq6UI4TXBsXBakbaMTyyTPZ0kAbiudcLWCOO51ibpVo6QTOXEqBUarOWs4F1goMzRKhLjBcYTRF9x5VrokAFOjVMJo8/Ud22iesv2MM48i3AnFJMa5d3Vje3QZk9YArDggMN3YDZGVhlgdNM6XuiQf+0do9+Vhy60c4EGNeUIYADRMAUybMYf9BkMLOxHLjTALDIroAUttrGNCVLPM6V4HNdkcq7UoCYEyOPaWFaxCQ96EB0heJ4IvUeNC5oQL0qh3AoZYhzUvfAusChH92Y4EJlkIUI3xMoKW7jVOx4+pDFFSMAowoeaFWwjC2SDnRHD84+Y2AEM8yPMChIAhilkgoFGXIUcyIADOEQAHdsQhATXSAsFTBAddgCZV8A4xR6CAw46kYkeZSIHPDrFOXUMpCBzFhAAIfkECQQA/wAsAAAAAKAAVgAACP8A/wkcSLCgwYMIEypcyLChw4cQI0qcSLGixYsYM2rcyLGjx48NCcyDg+MOmggo0alcie5EGWo4CBAASbOmTYEE4FCDE4GWgFi6gvobStQfKgWoNoVAQ2bVzadQKYokA2tT0atYs6JLsOrKzKhgwxpchQYdraxo0w6lhQ5NEbFwoeYsq7ZuXQWKyHyNy5fjqlVn7QpWuw2NsL19E08UiW6w47oRyiBWTJmhsBMJHmtOu00RuMqgFZZBs7l02jmZQqsmSCCCZl0JfqCcHSFBgsabf8BZrRpOZsGjdEVYhQPHPDlXkme68pdauXK0UD0uRo135VW46277sYrAqnkMZcL/mXeim2Na1a33JfBbrS408yZDXEXmxOBiTtXDLWNebSxYImEkExp2CLaJfPrZdIc+daFDTX4bXZZdWgnckWBUDKoFBngfEVDGNnZNIcyFNuVUVxYc2LRKCHZRgyCJGmVSjFp2vNhRGXDU5SKMH13RXlZNRXVHjmglMCKPHgmT1izl2AjSHeWgBY6TSE5UxoRXnUAlSKNhpY+FVW5EADVpRbAlTZm4RpQuZ4b5kDCxoIWOPYmtogtRU7TpZkOrpIUDZaus4M82cuyp0RM/FqVPZQRYBaGhF8EhKFaxyFRZEWBIBulF4NiXVZ6bhloQe1npwqGoooqElpmookoAaVnF/9dqqomupees6gmDT2BZpoYrpDnFedUKaPy6aREn3HlVLOUYC+kqU+SBlSF0OrsnPlNodSqP3llLABhZ/RDmPOXAEpOx1MCSVRa3UganP7rAssqRraJRqz9NVgluUSfsVu+9cLS73jzSDouGv6Ham1URAvN1h5paoaowVgzzOI9a6YVaTn9XVUziPFgWBUsZqK4CcVFoNAxXtmjlEaCoZSiSlT6PqoePsllFMCsBnl61CYlX9EwpvaLCoc+kRdFyxYV9plXOZ62uUo50VxFSs2oe8ooVLSqrN888M2BFrH4mpnV1qDJpTZQiS1tHAIholUL0rD9ktc3ZlM2jLlq6kP9sbNlYkWGdMAV/6quxcOBc1CaFYq34VbRs++s8JxdlKWidqmWC5LhmEmVWjIdG5KpPWDsQOI8Thfd+96pu+kDforUN53C1ppYiXVdJRlpTQM0XOHAUjhU6YL4uEOVpZRzXu2mFkHuVXwuftN9wAaZWAs+HaTtaP6QoViYFppWH78YTBA7SWNlROlhlsOz04eWfTmZa6FB/kzAsXt94/AXN0/pQJ6iWTeDAAO3cgXb8swfcVmU/j8gkZFhRHv/GkrqiJKAcq7MIAcrxP6KcYIILyZBa9CGrjUBLMOoDoULA4T4K4WBKF5mHMLJQQaxsooEqHJU9WkghvWQwId0pRw3TsYK9HDJkh4NJwCaK0x0E/sM7q5ADGBIgLMEU0YgMwYfQ6gIUpXABDc8JYznQMIX6FOMPQwRd9oyHhjSmhRa02MY24uhGGrUNiw6RCcdMw0d8rQ+P89nEKPpYmgSg4Y6AnA8Z6khIomxjE15JZEWIs8BGrgqDkryITLIwI0tepRSrgF8mNTgSdCigkSugxQngM8qOeOdbdoCgXRKgjylkYo2tRAgBMgETnqBjjnAMJhzliA47cKEcOJhbLmkiEpK4SCbQ3CUcyICDeS3zmtjMZkQCAgAh+QQJBAD/ACwAAAAAoABWAAAI/wD/CRxIsKDBgwgTKlzIsKHDhxAjSpxIsaLFixgzatzIsaPHjw0JgFuF4w6aCCjRqVyJ7sQdaqsIEABJs6ZNgQTgUCsSodiSWLp0rfBHtKg/VIi2bUKDBseqm1CjVpxHJkICo1izai22Cc4VqWDDHiSwCg26WVrTqiX6B13Tp2LjQoUzBd3au3dpZcEht+/HVau24R18VxeaK/P8KrZIYF6CPIQjr/0hZ+biyw4bn7AruXNavfMsYx59sAwaz6jVnsjUUSZpjQQidN6W4AfK21YToBva+QccjgSeiH5NEU63yLoirCIDZ56cK9AzXQGMgxoaWnkgE0ZHTSOcq3CJT/9cxTmvcpmhF8psvpk3XlpkMK6iRRRMYvERCRzHOyX9RLJkZKHdXcWEN1EZ+xF1An4QlXHVWjP80BhGMqGhz2AJDAfRFSdgtQJrDDJ0hx13cWcgheCcoABem9wxERhaJSBMiAspclcE4IBEQBnlqYVGGRFRo9pXNB4Ex11ZdGETHCHgRY2GCgmjy1pwzFgkQZn0iNUfWbhmUxlF3PVkZlpmNYUcVw4EzoNpjRnVHWGmtQmRDM0zxV1TWJmmSGu5KdVLaeXo0Cp3nUBnmjyqBiVUJmVlh4sN4SObWrAImqZAZKgFxqJRXTEpUbpwehChaqFz36X/gEOfVrTYo1hgRaH/IWpBV7Cp1Tyn7kmqVnwpRhZRtAAZUjlrTWHppXfYalSXlxEAiz+r5KrQfGrp8gSqA60yZVaxzBoWDgkI2xCJanWH7T/z2KjVFN4yeMdaEYiLKgHKEhWLtJdyqFYsJ146T1r6tIvfvz4KTBwBTd5q8GvC/KBWuOfiVK8/tCz82q5axRexMPasihUDh/o7MVGbWExaTjOsGzE4JqiVR7+XFnECIVltU07Ed3iclSLHYrvKnVkt4Sq2VLmMZsQC4QM0VqaeW0YsPsp7LgEwZvUDzCESsLRWJhNHzbNZMYvqPNtqJSvSA6ExcTld+0VAFmrRgjWqamsFR9t9EZzWzWin/z1xEXjHdYfDaTXdt0B1ZwX4nnrbHThp5SRo1OJXrqnWD1KjvcqnRp195Wlq4Yt2Gepipc/cpD3hXtiPv0ZAh1klgDpmwmyN1TZ6Hi4QDmDskJUgIYu3yupYFdHz4auUg0pWctNYhmCFt04crtBjhUbWR6o1O9IEVL9s8KN1ryn4um+u1TbbyzUP4VqtkLnuOGWfFRnSe0SAMGuFQD788mMFy/u+KltWDAe/g8yjFGmpH0euYDuspK9v4CCWVjYBQLn0LysRwEcBFQIOARolJphB0FoeeLi3pWUbohML1daiiBRucCCZSkueFDOPCzINUi9MCDg4hxVz9UUYOstKCP9yyBACxK2CN9HWWjJERPVcKC0/4EBc5EAutRyviQbpoFqyoEGwyKGBWCkHiLCowxjK6QoKZIgwEvawMZJRh+zTiiKGtqTSnRCHb1QIPqB2OSRSiABB1IoP87gQjE2QbWnECQHKUSYzEfIhVdQUrjiyCtghqYuPZMgVQLcWdJABHF6iyDyEoQ8PysmPmSSIPcA4wCeRkCAxUQPx1NKNRG5wlYRJACxwgAP0LKoxZCkDGLoRyFLZ8oV3sONd8qCLTZSDC2igRjmmOU00TIEMm/HHgAYDi2MSEQ3eI8wKaEGLbWyjnKaMTCn2l8qQ0Cs18DRKCK7VTsasYhPxTA06QgB9ynrKhxrpzOcJ5+TNTC6HjwKlVDle6c/MvG1FCTXKCq7mxoa2Zh5FSMAoZtmZFWwjCyGYkEVpMpOY2AEMxbzLChIAhilkoqAjRcgq5EAGHMAhAujYhiDIyVNaKKCc6LBD8rwC05iqBxxw0IlMlioTOSTVKdMxqlSnSlW5BAQAIfkECQQA/wAsAAAAAKAAVgAACP8A/wkcSLCgwYMIEypcyLChw4cQI0qcSLGixYsYM2rcyLGjx48NCcyDg+MOmggo0alcie5EGWo4CBAAuXHeKjJk4IABs8kKS5V2yJQxsWoVzYsE4FCDE4GWgFi6ovqbStUfKgWoNoVAQ8bo0YnzCJQjA4aWp21RV1Slqmubgm2KppS7MvOrQ5FkYG1ay7dvVXQJVtG1y5DAKhxzIqj1y5jqNn125s0jrHAVGnS0GmteSwsdmiKUEa4qlyDz5tP+iumj5jX0v6SXUcumqkARmbqUCZCZkmC2b1hw5IQuatq3721ohOGmSeBKuW3Gjf9YznweuujY/UUoQ70jgTI/ss//zrPqjl1hJ3qLjw4XHEj00NejTtDdYxk08sXPyeTRZH7UK0z2FQER+KZLAj+gpGAECSRwnXRwcHQHGOxtA9iCEfyQQCyMhSDMV3Cot9koukRwGA7zyHHFiplcURQ15ZRDCyqzFUONRlcUKBsqtGyFRjlwrCJMi1fIMU8RQUagyyhV6SIgTas8qNk2P6xi2JMJyQTHPCd0IxstN15Uho6ndQMGkDIxZJNhP8QXJnMiMqYLGmFVdNMJqBXTmkQE3EGmZpucsAqWEIlUzgkf0lSGl43FAotIGMmEhh2nbVJfQ+AwcBosXV1aaJog3aGPZuiw1hF6UjKWgHkSUahZAlN4/+qaQ6M2BgahG30XX2NTJPoQNYsxRgt3s1aUlGZZcPDVKiFsRo2sBQnDYWPl7FmsRJkU05gd0GpUBhyaPXtXcX6VU8a1FV0RJ19dhXYHuH4l4OtCXGoGx7noUiQMY7OU021Hd5TjFzj//rOKZiewmq9EZaS61gkFd3QfX/oovNAT4TEWwRULT0QANRpH7FEmf+pSsE2N0eJexxJJ6xc69nS8ii5UxerQFdr6tcIVuLLM0MF+4eDzKmptI5xDzTKmSM8+K/TEulTp0zQBe1lb2a58xWJ10wvBEWxVsYDKchFgENuQq36Jy7VD4ODZl81rP/TE12vBgm/chUHtj5N43/+siJxb912QSH5FIPLa8/B6+NT49VWn4AqB8+da6NwNOUIE6E3L4k0DnfblCgmDD7lUncAf6AcR4HBVlqKOORzTVrUCGq4bBA68fgXuehEn0LxWLOXUXtATWK+lz8rCE7TKFHnwZUjMyb8Gss6WR/8PPlP0hQ7Tl8vhe19ocGz9QASgXdUP1hPgtl+cr00NLH1l0X6+89Bd1RTjF4SG3v5Gb/5a25gf1/bXFzgIcFYiaV65DugzAvKlCAx0V8b6QgvuJc+Ba4Gg8BLHGBPkzyDlYFQGI0gY6zDGbh8syComNxU0kNAu2fNLHiSTQoKU4W8U093a8PE9voChhoNbH+v/XHcFIQJwXkCEgz7sRwvxXc5zfcEB8oBosHLQaC2E0CHLvkO6qmyOigSRzAz4MrvLHYsxWhyfTLroD0U4EW8EKF5VwIBEMP5jglXZRhrRNQ/4+UUX1bPjGdklOGEosC8hOJ0dCQKHHlJlE0dbGwEc6cUpLlIg82DhVMTms7Y1xgQv7FsmBNYXSK4Nd32JwBMueRBwUHIqe6RMGfRGlVjWsHx+2YYFQ0OgxigilJcjA2OmYMli3e6QfEGHxVhZkEwy5k3oclmHgHk5ySDTi4EcDhupQh9mKqSXfvmBsoqVCUoxJg/F9GZBwGE/qthhla4pQwwZUw5FqrOV03tZNt+T/zRVRfKeCJkHLadyAuiBSFON2cYddglQe8ixKts5ikxWxxdoArQyr+RmtT4iloGW7qIPqVVj9PE4jSzvNO8EKdvmqSopHnAewshCRteyiX2q1CAEsAdLVXUbWypPLDNdSzdv+hCdzmcTOMCBlbhnmFXIAQwbks1QifoQfBixUbrQChd+FKOuomEKZDhBMf4QVL60jqoSQUNZ/UILWmxjG25dK2Ps8Ea0PkQmIvzPbMoBT7tOZBWbYJJeT5OA8PnVIjeRa362sYnBHPYih3noYCOw0cdmRCZZyNlg/VGKVdjTspcdCToUIJ8V0OIEdAItSAxTPjtQdDMJ0McUMkFN1THiNBMwYQo64NrW3rb1reiwAxfKgYM62nZAI8HBs2TCXAJkAg5kUKpxj0vd6lrXIgEBACH5BAkEAP8ALAAAAACgAFYAAAj/AP8JHEiwoMGDCBMqXMiwocOHECNKnEixosWLGDNq3Mixo8ePDQnMg4PjDpoIKNGpXInuRBlqOAgQALlx3ioyZOCAAbPJCkuVdsiUMbFqFc2LBOBQgxOBloBYuqL6m0rVHyoFqDaFQEPG6NGJ8wiUIwOGlqdtUVdUpaprm4JtiqaUyzTzq0ORZGBtWsu3b1V0CVZdqWtXIYFVOOZEUOu3MdVtdqiRIVz44Co06Gg53ryWFjo0RSojXFUugWbOqP1tm7JqnuiBSTGnnk1VgaLJrwmQmZKAtm99wlxXLnrat+9taIRRBkngSrltxo3HAiPzq0h00bP7i1BmeUcCZX5o/4++CY33jcJO9B4fHS44kOmhs48+JdPHMmjmj59jv6NJ/dptQs15FREQgW+6JPADSgxGkEAC2Bn3Axwc3QFGe9sA1mAEPyQQi28rzHOFRnCsx9koukSAGA7zyHHFi5lcURQ15ZRDCyq0FUONRlccOBsqtGyFRjlwrCJMjFfIMU8RRUagyyizwdGfRatEuNk2P6xymHCGJTXPCd3MRsuOF5XhI2rdgEFkdQvZdNgP8nHWnEUEmNiYLmiEVdFNJ6RWjFcTEXDHmZttckJrFImEhi6oEfDeRGWE6VgssIiEkUxo2IHaJgQyBA4DqMHSVacPhQVGnI2RGdEd+myGDjWAav+UnpWNJXDHRBdulsAUpAa6iniO6UJhRK06BgaX35WBql9TCBMRNYw1Rkt3IJVRbK233gXHZllw8NUqIXA24EPCfOhYObF+tMoUm+nT60CZFOOYHe9mVMa2jo0bUnF+lVNGYUlFy1ce5TR0hZ18dSXaHfj2lYCzDX25GRz/VuaowGttYw9DwjQ2Szn1VliOX+CEvMpmJ2QrWlgYV5XFlAeVQetaJ4TcEX586aPyQk8A61cEI74m0GGOIVsQAdQ0FoHNHmVCqC4h2+QYLY8KPXSuff1QdUHl+oXOxlYTtAqjU/Hq0BXy+rXCFUYLDQ6ha6U70Ml+4RC2QauotY0cD4X/25gibQvdXMtTAW3QEwhTpc/dBhGwl9wJrbJsVbFAHjYZfuXhHRyEx8Im4wMVAQa1DWHdl76g/0PAE/xWVTNB4PTZl9mpU/QE4VPBUnHt/yzpV2AE1dmXLoHzztAVitxpOeOs112XSD8zbbxA8zhG+/RI+3UCbPn1pef0D73dGDq7Y593X+hUJzxftEg/Pd1+qQp+73BPNcMV4AiDT+tTnQDz/IaZWVU4BcChTSEPfNHFFOCQFHNVZQVoKKCnGtaX5fGuHA6kSh4OVYQTkI1yBZOgQp4wOcVtDYBymEFfGCCHdSFwLYYAmwgPkj21la+AdxCgP2BBDXywiy/oKN4M/+XwQb6gIWgzrJ8/WkIA01HlBzNECAFk5xf3WY0AfutMBKgBi75kwYqgmwfu/DGFKA6NAMMrT+L8ATIzFsSJVdkGGK2Gub5YAQ1rZKAbhzaPF/aljW7s3lp0QQs89qUIc7TaHXzGPiECEAeKiKQkFXGCchiSL4jcY+8cYwJNLqQcklpLJt04Dx3m7oaeLMgqlGiePf6wL3mYhyM9WYbk5cyC08NHEdcChlQuZIp92YQbr0BFvmwDYr5ECBz00TJaIFGE8OsLDk6YTLGVA0drIQQuUwce/lGlfdVMiCxVuBYIzjApjtmmL2XiTUU8c34EKOFUwIDMcCKEkY9RZ9jm0f9Fv+gClfYMHgWrQgYJCsOPfAnB/wJaEDjsciqb4Bs8H/pNajKUIPNQoj8+x7vYcTKRZszEyIIpUeMNdC0ReMJFFwIOivpDn4UpwxqpAlN7NtEv25ilxTQ6FUWAVJN1nJ1FXwMOOCB0LejY2UrFyVP5ha1rjQnBTzUpy6N+E6DD8SZVEjBVTxqoMT/wltUyoanG5GGoS0UIOMZoB5W+pgyv7NdC05oQcCRtfFj9iDCy+LuS0jViM+2fDI8CB1A5Zht30OlfCWIPeRYurxmRiSmr4tTFNmRsjkkAuj4ilsBSZXuWlci1GqOP72lkXahpa2glAo64/m6aIJ2HMLLg0rXfbAKyq5WiPVz7u8nUdG5iqe1auJpbiuw2NQnYBA5woCUhHmYVcgCDh2ZD3OJSBB/F3AxUtMKFIdXou2iYAhlOUIw/CJcvBLSuRRYVHVrQYhvbeO955/VO9UpEJqEEEG3K4Vb7XmQVm4CSflGTgCP697RkmC+AtrGJwRyYI4hxLIAisNkHf4cAWUjbgP1RilXM1cIaEQkc0KGA+ayAFifIE4jtcpgm2mGymdVHfbq64rtkAiZMQUd83ctj98IXHXbgQjlwUM8aC24kOBiQTJZMgEzAgQzMLbKRp0zlKr8mIAAh+QQJBAD/ACwAAAAAoABWAAAI/wD/CRxIsKDBgwgTKlzIsKHDhxAjSpxIsaLFixgzatzIsaPHjw0JzIOD4w6aCCjRqVyJ7kQZajgIEAC5cd4qMmTggAGzyQpLlXbIlDGxahXNiwTgUIMTgZaAWLqi+ptK1R8qBag2hUBDxujRifMIlCMDhpanbVFXVKWqa5uCbYqmlMs086tDkWRgbVrLt29VdAlWXalrVyGBVTjmRFDrtzHVbXaokSFc+OAqNOhoOd68lhY6NEUqI1xVLoFmzqj9bZuyap7ogUkxp55NVYGiya8JkJmSgLZvfcJcVy562rfvbWiEUQZJ4Eq5bcaNxwIj86tIdNGz+4tQZnlHAmV+aP+PvgmN943CTvQeHx0uOJDpobOPPiXTxzJo5o+fY7+jSf3abULNeRUREIFvuiTwA0oMRpBAAtgZ9wMcHN0BRnvbANZgBD8kEItvK8xzhUZwrMfZKLpEgBgO88hxxYuZXFEUNeWUQwsqtBVDjUZXHDgbKrRshUY5cKwiTIxXyDFPEUVGoMsos8HRn0WrRLjZNj+scphwhiU1zwndzEbLjheV4SNq3YBBZHUL2XTYD/Jx1pxFBJjYmC5ohFXRTSekVoxXExFwx5mbbXJCaxSJhIYuqBHw3kRlhOlYLLCIhJFMaNiB2iYEMgQOA6jB0lWnD4UFRpyNkRnRHfpshg41gGr/lJ6VjSVwx0QXbpbAFKQGuop4julCYUStOgYGl9+VgapfUwgTETWMNUZLdyCVUWytt94Fx2ZZcPDVKiFwNuBDwnzoWDmxfrTKFJvp0+tAmRTjmB3vZlTGto6NG1JxfpVTRmFJRctXHuU0dIWdfHUl2h349pWAsw19uRkc/1bmqMBrbWMPQ8I0Nks59VZYjl/ghLzKZidkK1pYGFeVxZQHlUHrWieE3BF+fOmj8kJPAOtXBCO+JtBhjiFbEAHUNBaBzR5lQqguIdvkGC2PCj10rn39UHVB5fqFzsZWE7QKo1Px6tAV8vq1whVGCw0OoWulO9DJfuEQtkGrqLWNHA+F/9uYIm0L3VzLUwFt0BMIU6XP3QYRsJfcCa2ybFWxQB42GX7l4R0chMfCJuMDFQEGtQ1h3Ze+oP9DwBP8VlUzQeD02ZfZqVP0BOFTwVJx7f8s6VdgBNXZly6B887QFYrcaTnjrNddl0g/M228QPM4Rvv0SPt1Amz59aXn9A+93Rg6u2Ofd1/oVCc8X7RIPz3dfqkKfu9wTzXDFeAIg0/rU50A8/yGmVlVOAXAoU0hD3zRxRTgkBRzVWUFaCigpxrWl+XxrhwOpEoeDlWEE5CNcgWToEKeMDnFbQ2AcphBXxggh3UhcC2GAJsID5I9tZWvgHcQoD9gQQ18sIsv6CjeDP/l8EG+oCFoM6yfP1pCANNR5QczRAgBZOcX91mNAD/sTASoAYu+ZMGKoJsH7vwxhSgOrQjDK0/i/AEyMxbEiVXZBhgFRwCvoWGNDHTj0Obxwr600Y2YQ98d+1KEOVrtDj5jnxAB2D0gDpIvhdRj7xxjAkn+I5BALIek1hJJN85Dh7m74QwJkIm+rCAwSjSPHrM4sHkscn5E48s2uJO8nFlwevgo4lrAYEnV+a0z7qLiAN14BWFmDGKSXAUc/ZEANMBBHy2jBRJFCL++4OCEZiSADiNQBNLgaC2EuGXqwMM/qrSvl/8QhiH6ggZ7uFKFa4HgKCnIF3EWEFoDY41Myqn/iGnCsoRTAQMyJVkGVlIlFugSSCIfY8+wzaOLftGFKN1IgBJuAxyuSYpfyCBBYfSRLyH4nx7r6DCCwEGXU9kE32CJUnNi041l2EtfcEM9Jfrjc7yLHSUNeTcCdMyUn8vEyPqiUvDRcy0ReAI6/xEev2itIOBoqT8aWpgyrJEqVIVlqozWRL9s45UWs+lUFMHTuwkDoJ47CCb5MoWXvgYccPjoWtCxM0kKQw2NmQNC5iFW+YWta40JQVkv15gVPOE8rpSrOSc6nHJSJQGDFdwdHOsPOxhGrD/wltUyoanG5MGtUQRHKRqTVoWAY4x2UOprCrqZuaBzFWL1R2gWAo6k/42PsR8Rxi9/t1JLEqCR6ANr767aPxkeBQ6gcsw27iDc+a1VkQ+xB0ALh9uMyASUVfGrJH3XL6aNzTEJSKhHxEJcqmxvqQJ5EUqbJZFrNUYf39PIulCTWvTCiwxF/EFdHQIOgzrsmjydhzCyINW1bKK6lixHhBIA2oUQwB7+ddhksjo3sRR4LZC1r1ofRGGDQDg1CdgEDnCgJSEeZhVyAIOHZpNhDR8EDsO6CD6MOSldaIULQ6qRjtEwBTKcoBh/uDBfCOhiuywqOrSgxTa2oWQhz8ufRWYOATYJINqUQ7VRLswqNgGlKqOmmVDO8lFu4mQAbWMTgxGz1RAzXQBFQFy8ar4iAbKQNi/7oxSrEGmcBTcSdChgPiugxQnytGfjHaaJdsAuePVRn8gWmiOkhAlT0MHkJFs6yUtGhx24UA4cDPTRBRQJSQYkk1KTEg5kIPGnQc3qVrv61QsJCAAh+QQJBAD/ACwAAAAAoABWAAAI/wD/CRxIsKDBgwgTKlzIsKHDhxAjSpxIsaLFixgzatzIsaPHjw0JzIOD4w6aCCjRqVyJ7kQZajgIEAC5cd4qMmTggAGzyQpLlXbIlDGxahXNiwTgUIMTgZaAWLqi+ptK1R8qBag2hUBDxujRifMIlCMDhpanbVFXVKWqa5uCbYqmlMs086tDkWRgbVrLt29VdAlWXalrVyGBVTjmRFDrtzHVbXaokSFc+OAqNOhoOd68lhY6NEUqI1xVLoFmzqj9bZuyap7ogUkxp55NVYGiya8JkJmSgLZvfcJcVy562rfvbWiEUQZJ4Eq5bcaNxwIj86tIdNGz+4tQZnlHAmV+aP+PvgmN943CTvQeHx0uOJDpobOPPiXTxzJo5o+fY7+jSf3abULNeRUREIFvuiTwA0oMRpBAAtgZ9wMcHN0BRnvbANZgBD8kEItvK8xzhUZwrMfZKLpEgBgO88hxxYuZXFEUNeWUQwsqtBVDjUZXHDgbKrRshUY5cKwiTIxXyDFPEUVGoMsos8HRn0WrRLjZNj+scphwhiU1zwndzEbLjheV4SNq3YBBZHUL2XTYD/Jx1pxFBJjYmC5ohFXRTSekVoxXExFwx5mbbXJCaxSJhIYuqBHw3kRlhOlYLLCIhJFMaNiB2iYEMgQOA6jB0lWnD4UFRpyNkRnRHfpshg41gGr/lJ6VjSVwx0QXbpbAFKQGuop4julCYUStOgYGl9+VgapfUwgTETWMNUZLdyCVUWytt94Fx2ZZcPDVKiFwNuBDwnzoWDmxfrTKFJvp0+tAmRTjmB3vZlTGto6NG1JxfpVTRmFJRctXHuU0dIWdfHUl2h349pWAsw19uRkc/1bmqMBrbWMPQ8I0Nks59VZYjl/ghLzKZidkK1pYGFeVxZQHlUHrWieE3BF+fOmj8kJPAOtXBCO+JtBhjiFbEAHUNBaBzR5lQqguIdvkGC2PCj10rn39UHVB5fqFzsZWE7QKo1Px6tAV8vq1whVGCw0OoWulO9DJfuEQtkGrqLWNHA+F/9uYIm0L3VzLUwFt0BMIU6XP3QYRsJfcCa2ybFWxQB42GX7l4R0chMfCJuMDFQEGtQ1h3Ze+oP9DwBP8VlUzQeD02ZfZqVP0BOFTwVJx7f8s6VdgBNXZly6B887QFYrcaTnjrNddl0g/M228QPM4Rvv0SPt1Amz59aXn9A+93Rg6u2Ofd1/oVCc8X7RIPz3dfqkKfu9wTzXDFeAIg0/rU50A8/yGmVlVOAXAoU0hD3zRxRTgkBRzVWUFaCigpxrWl+XxrhwOpEoeDlWEE5CNcgWToEKeMDnFbQ2AcphBXxggh3UhcC2GAJsID5I9tZWvgHcQoD9gQQ18sIsv6CjeDP/l8EG+oCFoM6yfP1pCANNR5QczRAgBZOcX91mNAD/sTASoAYu+ZMGKoJsH7vwxhSgOrQjDK0/i/AEyMxbEiVXZBhgFRwCvoWGNDHTj0Obxwr600Y2YQ98d+1KEOVrtDj5jnxAB2D0gDpIvhdRj7xxjAkn+I5BALIek1hJJN85Dh7m74QwJkIm+rCAwSjSPHrM4sHkscn5E48s2uJO8nFlwevgo4lrAYEnV+a0z7qLiAN14BWFmDGKSXAUc/ZEANMBBHy2jBRJFCL++4OCEZiSADiNQBNLgaC2EuGXqwMM/qrSvl/8QhiH6ggZ7uFKFa4HgKCnIF3EWEFoDY41Myqn/iGnCsoRTAQMyJVkGVlIlFugSSCIfY8+wzaOLftGFKN1IgBJuAxyuSYpfyCBBYfSRLyH4nx7r6DCCwEGXU9kE32CJUnNi041l2EtfcEM9Jfrjc7yLHSUNeTcCdMyUn8vEyPqiUvDRcy0ReAI6/xEev2itIOBoqT8aWpgyrJEqVIVlqozWRL9s45UWs+lUFMHTuwkDoJ47CCb5MoWXvgYccPjoWtCxM0kKo5F8mQNC5iFW+YWta40JQVkv15gVPOE8rpSrOSc6nHJSJQGDFdwdHOsPOxhGrD/wltUyoanG5MGtUZxHKRqTVoWAY4x2UOprCrqZuaDzV44JzULAkbTx/zH2I8L45e9WaslVZMExQYzYVfsnw6PAAVSO2cYdwApLiPqFFswViD0AWrjbZkQmoKyKX934hN+ei2ljc0wCEuoRsQyXKtuzJNJk2phmSeRajdHH9zSyLtSkVpKknMIYp/KDujoEHAZ12DV5Og9hZEGqa9mEdcE3knKwt1agXQgB7BFgh00mq3MTC4LXAlk3toYM56VKpS5C4dQkYBM4wIGWhHiYVcgBDB6aTYfvVhQhhgUxRehQajYR3YXgw5iT0oVWuDCkGhkZDVMgwwmK8YcN84WAjEODPnYzJBoZuRxcCMEmdJHBzUQgwhJZVHRoQYttbKPMTp6XP62GtRWc2djMZM5OFvyLFAJsEkC0KYdqGQcOvM4HFSoCySo2ASU8o6aZaz6kd/UDZZrcJM0A2sYmBsM7vuqHFgscDg6oC6AIkJd3q7hzdFBhBy3lhgBZSJuh/VGKVYg0dXDILmdisYk/XnEk6FDAfFZAixPk6Z6cfm4snInhjxymiXaQda30UZ/IfmSoqZnlD6jRSexlAiZMQceZycxtMpsZHXbgQjlwMFAJkuEHtDCEArpNZgUYohg/MPJ8JSgSkgxIJvgmJRzIoOJyz7Mr3ck3eG7CQGcv9eAIT7jxAgIAIfkECQQA/wAsAAAAAKAAVgAACP8A/wkcSLCgwYMIEypcyLChw4cQI0qcSLGixYsYM2rcyLGjx48NCcyDg+MOmggo0alcie5EGWo4CBAAuXHeKjJk4IABs8kKS5V2yJQxsWoVzYsE4FCDE4GWgFi6ovqbStUfKgWoNoVAQ8bo0YnzCJQjA4aWp21RV1Slqmubgm2KppTLNPOrQ5FkYG1ay7dvVXQJVl2pa1chgVU45kRQ67cx1W12qJEhXPjgKjToaDnevJYWOjRFKiNcVS6BZs6o/W2bsmqe6IFJMaeeTVWBosmvCZCZkoC2b33CXFcuetq3721ohFEGSeBKuW3GjccCI/OrSHTRs/uLUGZ5RwJlfmj/j74JjfeNwk70Hh8dLjiQ6aGzjz4l08cyaOaPn2O/o0n92m1CzXkVERCBb7ok8ANKDEaQQALYGfcDHBzdAUZ72wDWYAQ/JBCLbyvMc4VGcKzH2Si6RIAYDvPIccWLmVxRFDXllEMLKrQVQ41GVxw4Gyq0bIVGOXCsIkyMV8gxTxFFRqDLKLPB0Z9Fq0S42TY/rHKYcIYlNc8J3cxGy44XleEjat2AQWR1C9l02A/ycdacRQSY2JguaIRV0U0npFaMVxMRcMeZm21yQmsUiYSGLqgR8N5EZYTpWCywiISRTGjYgdomBDIEDgOowdJVpw+FBUacjZEZ0R36bIYONYBq/5SelY0lcMdEF26WwBSkBrqKeI7pQmFErToGBpfflYGqX1MIExE1jDVGS3cglVFsrbfeBcdmWXDw1SohcDbgQ8J86Fg5sX60yhSb6dPrQJkU45gd72ZUxraOjRtScX6VU0ZhSUXLVx7lNHSFnXx1Jdod+PaVgLMNfbkZHP9W5qjAa21jD0PCNDZLOfVWWI5f4IS8ymYnZCtaWBhXlcWUB5VB61onhNwRfnzpo/JCTwDrVwQjvibQYY4hWxAB1DQWgc0eZUKoLiHb5Bgtjwo9dK59/VB1QeX6hc7GVhO0CqNT8erQFfL6tcIVRgsNDqFrpTvQyX7hELZBq6i1jRwPhf/bmCJtC91cy1MBbdATCFOlz90GEbCX3AmtsmxVsUAeNhl+5eEdHITHwibjAxUBBrUNYd2XvqD/Q8AT/FZVM0Hg9NmX2alT9AThU8FSce3/LOlXYATV2ZcugfPO0BWK3Gk546zXXZdIPzNtvEDzOEb79Ej7dQJs+fWl5/QPvd0YOrtjn3df6FQnPF+0SD893X6pCn7vcE81wxXgCINP61OdAPP8hplZVTgFwKFNIQ980cUU4JAUc1VlBWgooKca1pfl8a4cDqRKHg5VhBOQjXIFk6BCnjA5xW0NgHKYQV8YIId1IXAthgCbCA+SPbWVr4B3EKA/YEENfLCLL+go3gz/5fBBvqAhaDOsnz9aQgDTUeUHM0QIAWTnF/dZjQA/7EwEqAGLvmTBiqCbB+78MYUoDq0IwytP4vwBMjMWxIlV2QYYBUcAr6FhjQx049Dm8cK+tNGNmEPfHftShDla7Q4+Y58QAdg9IA6SL4XUY+8cYwJJ/iOQQCyHpNYSSTfOQ4e5u+EMCZCJvqwgMEo0jx6zOLB5LHJ+ROPLNriTvJxZcHr4KOJawGBJ1fmtM+6i4gDdeAVhZgxiklwFHP2RADTAQR8towUSRQi/vuDghGYkgA4jUATS4GgthLhl6sDDP6q0r5f/EIYh+oIGe7hShWuB4CgpyBdxFhBaA2ONTMqp/4hpwrKEUwEDMiVZBlZSJRboEkgiH2PPsM2ji37RhSjdSIASbgMcrkmKX8ggQWH0kS8h+J8e6+gwgsBBl1PZBN9giVJzYtONZdhLX3BDPSX643O8ix0lDXk3AnTMlJ/LxMj6olLw0XMtEXgCOv8RHr9orSDgaKk/GlqYMqyRKlSFZaqM1kS/bOOVFrPpVBTB07sJA6CeOwgm+TKFl74GHHD46FrQsTNJCqORfJkDQuYhVvmFrWuNCUFZL9eYFTzhPK6UqzknOpxyUiUBVpxHTHp6B8f6ww6GEesPvGW1TGiqMXlw60Jkogt0DEto8yhFY9KqEHCM0Q5KfU1BNzMXif+E5YWmFdqvHBOahYAjaeNj7EeE8cvfrRQiIhHYhESziiw4JogRu2r/ZHgUOIDKMdu4A1iPxke+JKCTRyEARP1Ci+0KxB4ALZxwMyITUFbFryER4+/uMNiEPMG552La2ByTgIR6RCzSpcr2IgK9YB3qI0iTaWOaJZFrNUYf39PIulADW4kQAK+NsQM4RGvhTExhjFP5QV0dAg6DOuyaPJ2HMLIg1bVsYr0KEcZQr3QCjF5kJOVQcK04bBh7mNhhk8nq3MTS4rVAtkD2MOad0FCUibSGDAGmSqUu4uPUJGATOMCBloR4mFXIAQwems2RqVxL1MQiAWBooZYSEhbEFKH/Q6nZhHkXgg8lr1YXWuHCkGrEZzRMgQwnKMYfiswXAmbEHhjejC7+UIwT7GZINOJzObgQgk3oIoObiQCPI7Ko6NCCFtvYBqgJPS9/XkQYYCC12kQd6k9nJwsjRgoBNgkg2pQjthwhAA4sW2u/oEJFIFnFJqDUa84009QbKcN4i+0YQ9PkJqrWzzY2MZhvUYPXvabFAoeDg/QCKAL+tYtNFOHt+aDCDmsWjUyykLZil2IVIrWLbjbxzV7HYhN/vOJI0KGA+ayAFifIE+hWAYdFRXtqsXCmkBGsJTDYwb381Ud96nspMlBDEQtNzSx/QA3wGo+UMGEKOkT96ZJ/OtToRLADF8qBg4GCrwyroEbsNrENQyjA5J9WgCGK8QM+R1iCIiHJgGRCdFLCgQxadrkIZXT0VXSn6OC5CQMpvtSqW/3qxgsIACH5BAkEAP8ALAAAAACgAFYAAAj/AP8JHEiwoMGDCBMqXMiwocOHECNKnEixosWLGDNq3Mixo8ePDQnMg4PjDpoIKNGpXInuRBlqOAgQALlx3ioyZOCAAbPJCkuVdsiUMbFqFc2LBOBQgxOBloBYuqL6m0rVHyoFqDaFQEPG6NGJ8wiUIwOGlqdtUVdUpaprm4JtiqaUyzTzq0ORZGBtWsu3b1V0CVZdqWtXIYFVOOZEUOu3MdVtdqiRIVz44Co06Gg53ryWFjo0RSojXFUugWbOqP1tm7JqnuiBSTGnnk1VgaLJrwmQmZKAtm99wlxXLnrat+9taIRRBkngSrltxo3HAiPzq0h00bP7i1BmeUcCZX5o/4++CY33jcJO9B4fHS44kOmhs48+JdPHMmjmj59jv6NJ/dptQs15FREQgW+6JPADSgxGkEAC2Bn3Axwc3QFGe9sA1mAEPyQQi28rzHOFRnCsx9koukSAGA7zyHHFi5lcURQ15ZRDCyq0FUONRlccOBsqtGyFRjlwrCJMjFfIMU8RRUagyyizwdGfRatEuNk2P6xymHCGJTXPCd3MRsuOF5XhI2rdgEFkdQvZdNgP8nHWnEUEmNiYLmiEVdFNJ6RWjFcTEXDHmZttckJrFImEhi6oEfDeRGWE6VgssIiEkUxo2IHaJgQyBA4DqMHSVacPhQVGnI2RGdEd+myGDjWAav+UnpWNJXDHRBdulsAUpAa6iniO6UJhRK06BgaX35WBql9TCBMRNYw1Rkt3IJVRbK233gXHZllw8NUqIXA24EPCfOhYObF+tMoUm+nT60CZFOOYHe9mVMa2jo0bUnF+lVNGYUlFy1ce5TR0hZ18dSXaHfj2lYCzDX25GRz/VuaowGttYw9DwjQ2Szn1VliOX+CEvMpmJ2QrWlgYV5XFlAeVQetaJ4TcEX586aPyQk8A61cEI74m0GGOIVsQAdQ0FoHNHmVCqC4h2+QYLY8KPXSuff1QdUHl+oXOxlYTtAqjU/Hq0BXy+rXCFUYLDQ6ha6U70Ml+4RC2QauotY0cD4X/25gibQvdXMtTAW3QEwhTpc/dBhGwl9wJrbJsVbFAHjYZfuXhHRyEx8Im4wMVAQa1DWHdl76g/0PAE/xWVTNB4PTZl9mpU/QE4VPBUnHt/yzpV2AE1dmXLoHzztAVitxpOeOs112XSD8zbbxA8zhG+/RI+3UCbPn1pef0D73dGDq7Y593X+hUJzxftEg/Pd1+qQp+73BPNcMV4AiDT+tTnQDz/IaZWVU4BcChTSEPfNHFFOCQFHNVZQVoKKCnGtaX5fGuHA6kSh4OVYQTkI1yBZOgQp4wOcVtDYBymEFfGCCHdSFwLYYAmwgPkj21la+AdxCgP2BBDXywiy/oKN4M/+XwQb6gIWgzrJ8/WkIA01HlBzNECAFk5xf3WY0AP+xMBKgBi75kwYqgmwfu/DGFKA6tCMMrT+L8ATIzFsSJVdkGGAVHAK+hYY0MdOPQ5vHCvrTRjZhD3x37UoQ5Wu0OPmOfEAHYPSAOki+F1GPvHGMCSf4jkEAsh6TWEkk3zkOHubvhDAmQib6sIDBKNI8esziweSxyfkTjyza4k7ycWXB6+CjiWsBgSdX5rTPuouIA3XgFYWYMYpJcBRz9kQA0wEEfLaMFEkUIv77g4IRmJIAOI1AE0uBoLYS4ZerAwz+qtK+X/xCGIfqCBnu4UoVrgeAoKcgXcRYQWgNjjUzKqf+IacKyhFMBAzIlWQZWUiUW6BJIIh9jz7DNo4t+0YUo3UiAEm4DHK5Jil/IIEFh9JEvIfifHuvoMILAQZdT2QTfYIlSc2LTjWXYS19wQz0l+uNzvIsdJd81j5cyjgAdM+XnMjGyvqgUfPRcSwSe0JBMwOGVrwmPX7RWEHC01B8NLUwZ1kiVhuKAjNhLldGa6JdtQBVgNp2KIuoFDuzowp93EwZAPXcQTPJlCj4VDTjg8NG1oGNnCqFiAgyZEWE0ki9zQMg80iq/sHWtMSGo1+2qMoWz0sSu8XzCeVzZV3NOdDjlpMpgG5KeeAojr0cRVGj9YQfDpPUH3rJaJjTVmDz/oJYg1WMfXAszj1I0hq4KAccY7cDUqBqUL3OJ2EIfY7fX/MoxoVkIOJI2vs9+RBi//N1KF6Ibx0xINKvIgmOCGDGu9k+GR4EDqByzjTucdRVpnUoCOplaiPqFFpb9hz0AWjjrZkQmoKxKYw2jLF3dgbA8E++5mDY2xyQgoR4Ri3mpsr2InC9Yh/oI0mTamGZJ5FqN0cf3NLIu1BB3Isb0ix3AcVuIkHIKY5zKDwDrEHAcly8JuCZh5yGMLFx1LZvwr0KEUdQrnQCjFxlJOThcqxZL0R43xvFksio2sfx4LaNNlD1SHFE0FGUirSHDhKlSqYtAOTUJ2AQOcKAlIR5m/xVyAIOHZpNli9ijlqiJRQLA0EItJSQsiClCh1KzifwqBB9c9gtUtMKFIdXo0WiYAhlOUIw/XJkvBMyIPQ7LGV38oRgn2M2QaPTocnAhBJvQRQY3EwEnP2RR0aEFLbaxjVlfel67rYgwwHBrtdWa1rLOThZojBQCbBJAtClHcTlCABysFtl+QYWKQLKKTUAJ2pxpZq7tZV9sOybTNLlJr/WzjU0M5lvUeDa0abHA4eCAvwCKAITtYhNFwHs+qLCDn0UjkyykDdulWIVI7aKbTXwT2rHYxB+vOBJ0KGA+K6DFCfIEulXAYVHjnlosnEll5mgJDHYIsIP1UR8Ea0Q31F1QxHJRM8sfUIO+xiMlTJiCjlrL+uaypjU67MCFcuBgoOArwyqoEbtNbMMQCsC5rBVgiGL84NEjlqBISDIgmVidlHAgA5uBLkIZZX0V3bk6eG7CQJOj8+xoT7sEAwIAIfkECQQA/wAsAAAAAKAAVgAACP8A/wkcSLCgwYMIEypcyLChw4cQI0qcSLGixYsYM2rcyLGjx48NCcyDg+MOmggo0alcie5EGWo4CBAAuXHeKjJk4IABs8kKS5V2yJQxsWoVzYsE4FCDE4GWgFi6ovqbStUfKgWoNoVAQ8bo0YnzCJQjA4aWp21RV1Slqmubgm2KppTLNPOrQ5FkYG1ay7dvVXQJVl2pa1chgVU45kRQ67cx1W12qJEhXPjgKjToaDnevJYWOq5lKlsul0Az59P+tk1ZNU/0wKSYUcumSmssZbsEyExJMLu3PmGtKxc13bu3rhNhcV8pt6148VhgZH4Vic65dX+wVt3uSKDMj+vON6H/2b5R2Ane4K2XewLSfPP0zqdk+lgGDXzwEUJ3NHn/+iZq5FVEQATGJfADSghGkEAC1RUXYEV3gOHcNtsAlmAEPyQQS28rzHOFRnCgx9koukSAGA7zyHHFiplcURQ15ZRDCyqo5cfRFQTKhgotW6FRDhyrCNPiFXLMUwSQEegyimxwzHfRKg1uts0P2rHGkExwzHNCN5w5qVEZOZ7WDRg/SreQTYf98B5nBHwooIiN6YJGchTddEJjNmZEwB1hbrbJCVZOJBIaupxGADgUlcGlY7HAIhJGMqFhR190YgQOA6fB0tWDD4UFxpqNUTPRHfpshg41XpV3QpTYeYmRhJsl/zAFp4Ku8p1jusAhUamOgRGcR20SRytE1DDWGC1lDJsor40lcMdDSW2WBQdfXZbHD65aJMyGjpWTKkirTLGZPsr+k0kxjtlR7kVlhDCZnsT5VY5+08FhLF95lNPQFXDy1ZVrGmm5GRz04gbOvWttYw9DwjQ2SznrArzQKpud8KxrYSFcVRbZFlQGq2udELHECT1xq18RuAnwYY79ahAB1OA5MskH2eQYLYjSTACsff2Qs0Hb+oXOwjRfdAW6fq1whcsSg9PnWt8SRLFfOBSNUQiOKcK0xG1qPFXKBj3RL1X6WP0kqGvFEnXRZPiVx3b29hWLmWZPxHNfANb9DwFPxP9blcgEgXNnX7PqPdETXk8FS8FmG+lXYAQRMLY/umxtOENXKBLn2mb3TXVdIqE8s+HzOFb45XvH3NcJr9lH6eh1O90YOozrfZjX6EgneV+0wF731H6JivpA8zw91QxXgCMMPn5PdULHwyNEAMhVbeL7dFPkwZcuU8CRFLdVrYBG9A2BA4djnF9eDvhU5QFoEScUmra+5C/0BNpV6fMz+XLM0BcDcgiX9tZiCKLVT3qq68sKaje8O1APO9TAh7j4gg7LHVAgcpBfX9CgsgMazx8t2VnPLii9wfnlepUhwAQ7EwFqwKIvWUChxOaROH9MgYQCIUAR+qIL8UwOYjgsyN3/EibDwshEaGiYnPeCmMN5DLAvQAxi2/rymckVoYiVucPJ+EILC5LPdRRMYl+uyMR/lK4xJijjP6ZIwXIsai1kDOI8Hqg4BtaPAJlQYGA+OB4mrhBf8/Bi9FjGl23kR3N80Uf6hocPDfIFDGrcG9a4SC4TVi+IV7BkwoQRyVUMcSoJQAMc9KExWnSwfsDrCw72F8Tp9SUCRVhFOWi0FkIs0nZlaB5tsOgaYRhig/YIpP/WIr4LRqsxtzxgsfC1GpnoUhGnRB0B8EcVMHAykmX4I1Vi4S2BbPExySzaPF7oF13YkYTT7Ms2wNGaY/qrfsJ4Il9CAD0cEuBxBIGDI6my/wk5DHKfVcFZJAVShr305V0CKd4JeZkRwTnGBMOaByvNRoCGKZBumSiHX/qJuvPhiT0MyUSWLucdv/isIOAA6FTCKZoyTI4qLP0HDmx4uXsGj2kiVKcgRTOgrCkLHNXRRTRJJgxq+mNuB2EjX6YwUYCZT55rQcfFGGLCBDB0IsIAI1/mgBCFBs9sQWtMCJSFuKpMYadfUSoxn0CeQEKVNue0yyp0SRWrNsQ8xBRGU3FzB7r6ww6G+eBUfkAtiWViUo3Jw14NcsbODNUu8yhFY5CqkIM1xg4gbak2+TKXhszjm4+pmmts5ZgiMAQcCaRiXDsijEk2y59XUutafqAr4f9kwTEV9OxLnWfAo8ABU47Zxh3Q+o9VCLaucTwKAcjply4+xB5G/dpqkeLKzQgvJGWILijvcNWCPOG23YrYKlRa124CizScYV1EVlHDqRwnphGBmUEbM4VrQoRZjdFHpTISrtNgdiKa9IsdwLFYieBxCu31xw+mChFwbJYvCVglCuchjCyQdy2bmC5ChKFRzmzjBOy8yEjKMd9mFdgw9ngwhCcDX6mJ5cJrsStFCGCPAJcTDUWZCGvIsNuqOOoiKUZNAjaBAxxox4uHWYUcwKAh2cjYIvZA5GlikQAwBFA7CQkLYoqQIdRsgrgMwYeN/QIVrXDBRzFKMxqmQIYTFOP/DzDmi/U0Yg+tckYXfyjGCXTjIxiluRxcCMEmdMG+zUTgxBEhlHNoQQsKNTrO6XosRYQBBkgnbRuNxrRfpcVgPRHgjf2ZzXqAhYNNh7ovqDARuDaxpFNzJpSSxkgZmOtqx8z5KDex9H22sYnBVIsapg41LbonHBxo9z4RMC9kV6GIY6cHFXbAMk8JkAWkuboUq6incsmwCVqeOhabiCLXRoIOBcBnBbQ4wZystgo4EErXN4uFKFsMksPszA50jJU+5NPdGZOBGooA7WkM+QNqJNdweIQJU9ChaUY7PNPosAMXyoED+w6vDKughuA2sQ1DKODhjFaAIYrxgzTvl3wiIyEJgGTCcjzCgQxGtvgFXfTyVSSr5d25iff6PdCe+/znhgsIACH5BAkEAP8ALAAAAACgAFYAAAj/AP8JHEiwoMGDCBMqXMiwocOHECNKnEixosWLGDNq3Mixo8ePDQnMg4PjDpoIEX6gQ3ciE8iXA+etIkMGDhgwm6ys3InODpkyJlatgmmRABxqcCLQEhBLl64V/vyVukLU4zwC5ciAoeVpm1OoUcP607VNwTZFU8plIlDVoUgysDaJnRt109C2GAmswjEnAli6gOlus0ONDFu8CFehQUcr8NwEdxFTXFUuQWPHmAFvm7JqnmSBRhdnfhz5s1syUxKMXh1YnzDPeIVeZh2VFjXTbq+U20a799xYYAgcfikSne+wtnEzJFDmx/HnYTehGe5R2AnV0LfdVp7QOm/o4P1N/3HpsQya8FHRcEdoEj36TdSo543gW1eCHygjgPmxfT3BO2A8t8026CSQH0o/JBCLbyvMQ1VGcGA32ii6RLAXDvPIcUUmZfhn0BX00YYKLSGggUY5cKwiTCZXXCHHPEWkGIEuo9AGB3kWrWLcaNv8sIpesHmYUBkhrtYNGCgKx5BMev3w3WgEPEgRARI6pgsaVwm53B1FZrbJCZ1NOQ8auqxGADgUldFNZrHAIpKWDYHDwGqwkPEjRleB8aRj/UF0hz6ZoUNNaXAqFGBmCUwhX16rOIeZLnBIBChmYARZ6ELU/BUYLWUsqlEZkzqWwB0PGZVZFhxc2pAwC2JWDqEerf8yRWb6eHpQJsVgZoetqhJEwGyBldNhVUZpOlce5TR0RZV02dnrQvOckBkcw7Z1prFibWMPQ8I4Nks5vD4r0CqZnUCqZFdhG1YWOB5Uxo6AnRCuuE84GlgEUkqmF2aWFkQANY5FMO+zMmFGC5rKEXAoYD8gbBCrgaGzrbgKXZFrYCtc0e9n4HQ5F6zjOoYDxQuFgJkiG38Wpbr+4GvQE8yGpQ/JCq2y528g40ZGYHksCoe6sShJ80ELAxafkAQ8AaxY8hIEjrSAKTr0QU+w7A8s1XoIY2CQ+RrzWCkPfYUiVubMndKB4XCYSPcOTDBmUhf6b2AnDETAeYBlObXTHov/hU7WWuqlLjpKUgkYLW73Si6fBPftzwxXgCMMPktH1dLevsJL1yaJm0bAFHnQpcsUcBjVqlgrqIe5QODAgZnZQpZzelh5gFnECWX+luzq/zxxs1j6ONyrHDMAxoAcsoY+lyETYz43xoCreofmYcFCDT6z0oVO2BTLkTtgaOT7rOMsKcww7wRAHVjn3H1+eATUwAJYFuwLOY/VUwxNQBGA6SLd1+BaXdHmso36JYwAEUPD10q3N5EoDzABHNrOAIMOBQKmCAbkzh3sRRdacE9VeNOeBemCwb3NAzMmwNwEtVeONZEwg7iZB/XEgrUGZgIwK4CM46YztewBJg/z+OCl//YlmAiUgWx00Qfs4ISP79EFDKsjgMk6WCv1iWUTYrMiAYWxulUMMCoJQAMc9IEtWohPcZjBgfD0N8OWFYEyqKALIZboH+ZUDjkwXI8wDAE+ewSxeHNJHcVM5Rg69ipTdMkDZ4RzR0WcEU4E+F1YwMDF1ZXBh2KJxasEwsGwbMOQMZRfYHQRPf1Jchvg8Awhm/UsYTyQLiFoVwO5RhA4ODE6clAVAW4ploPx7h9lkAtgDBMTx/lDaFp6GgoHNo811rFbOERmJsoRmE3kEk6uC9gTGpIJOAhRMs0JTMMKAg5eRgWUbSnD18ICShyIB5J86pf5NPNNaxkzKopwGziMo/+LR5pGGJL0R9AOskK6TMGZHIPDK+eCjnMxRH0JyKNGhBFCuswBIfO4Z59wAzHHhMBtVRPLFOr5koIG8gmeCuJCkVPK2NwxLBFdlRZXIAyEEusOL/WHHRRCgHv+IFWmyYQdMJMHmxrkhB30J1HmUQrHDFQh4LCaHbYJTkxCUJYY7aQnRyaZRmGmCAwBB8Ac8zfECGOKorrmQghg0rn8IFKxyQJmtteQeazTcs2DCRzmhJlt3KGeq7gnGEtIFAKIclMk/Yc9AhoVI8JEOG2cy0Z5WgbGgvEOEmXIE+TqKvatwpww3aRHsHLXsNQtIquwWlR0AaaP/EuYjplCJSESKsf/6ENvGpHVaqY6ES0Gxg7gMKpECJCJKajWHz9wKETAYVXAJECNmZ2HMLIA2rlsoqXcoiaPTpDKi4ykHLAVlXB5ao/mOtcw6CTIj8pR3cfkkQD28O0o0SCUiXSGDKWtXmbLy5oEbAIHOPgR9/SyCjmAQUG0ielF7IHE1cQiAWBA3p0wqhccFCFBrNlEYhWCD/kGpimbCAEXTlSOEpcYDVMgwwmK8Yf2bi6zA7FHRUejiz8U4wSoORE1TFxiLoRgE7qYXWYiMN6IkOk5tKDFgJTsYl0pdSLCAEOTMbYNJVc5p6dSbkaE40L3PKccVOUIAXCAZS87BhUWAskqNlEjM/c3ynwvKcNh3TwazhFlJlP28jY2cQUYL2QV1Cizm2lButjgwLJejoBoqyITRSAaPaiww4TxIpwsXIzOUlkFVolFhk3EEdOx2EQEPTcSdCjAPSugxQmwtJ5VwIFMeTZYLMSYXpDoRWF2iCyi9DEeP2+ZDNRQhFZXs42UUIOwkMwENXCQFHRcOcnQtnJPuFAOHMz2UmUA9NM2sQ1DKCDaSVaAIYrxAxPj9lkiIUl8hMNu4sKBDAG+NsWu4Go7dardzJlJ6Xz9y377+99wCggAIfkECQQA/wAsAAAAAKAAVgAACP8A/wkcSLCgwYMIEypcyLChw4cQI0qcSLGixYsYM2rcyLGjx48gQ3act4oMGThgwGyygq6lSztkyphYtUqkzZsf5xEoRwYMLU/bdOla4a+oUX+6tinYpmhKuUwEcEqdCpHAKhxzIhA9yrUr1212qJGJSrWs2YGryiWg5bWtW6Pbpqyad7auTQJkpiR4y7evPmF07QrWSOBKuW19E/ONBYYA2cGQJRIo80OxZb6b0DyOzHmhsBOIL4t2OyVT59MI76AZzdrtJmqbUXe+A4b1tm3oEkTYvftHgliiV8y7Ivv0lQiXUdEKgQZNOTirhGW6ckXOvCLQI+gaZRmO6eKQyyD/V9wNzHPHDEla/RG6b2HwdgncGd9304m5FAnMQ6MrMQFw8J0FDgOJwULGKrFNpBMY7blFTYBm1cZXAlMkeNF6fOkCh0T4QSgRNVu5RUsZFmZUhj4T3vEQAdQkgENNHj4kDHBvlQNjSKtMwZc+JRo0D1v+gFFGjA0RAKRb5Qx5EwFwhNhVHuU0NA86R22TJJEJzXMCX3AoidN/Tn5lD0NFeJUFHMJgadAqfJ2gIlU6hXlUFt8hRACNXcWSppoDPVGZWxEQZ5ZVbwV2EAE6trVJjwGS9BYtANZFgIRe/RDpmg0epcubfP5zRTFurXCFoQLS19WNBSXqVRGdDhTCW4qQ/3pWYXIWFahB4BzJlT6c8rlKpkfFgqpgZLSVR2zzwNGWLsOqSalXsEVGwBO6HnXCZpk8e5QijAb4RK1FweIlZNe1lQCqcADrzwrNEnmFIm4xixq1beFAFl6KdgvfPG9ViBqLbZ1AEIpeodcpOKZyhc64nFlVKzqOgXMHlV3Roi94bDoI3jwJFzXDFeCAc8UMXjEgKJ8EUOzVouAhmkdXukwBBxxToNLVClO0Co6ybrXbWTl4GpXHfTnKGUuUnT6hblH6XFqcHCR3xYAcqnllyJgoUxMqw7JN7BUs1IBDsMKyxihHf22hcTJ8HfuDzn1t/9ApAVu6dfFgiHpFSwTlbP9i5t2dzQOuPzl7SECZMGe2V1flAM6ZtlU6Hh8BbaGDxuJcwSG5YPq93FbjRBbrleWYH1XE5nbd8afeZcO32uiXr4p6Xfy6ZYKaoneFTjndyE7klG6JiyUBmXi1wrlta0akqk/O03rLGX8VQRnwdqWPz6jhg7ZXYKD8asU81s3VJjFeIX5X2+yJ5SqQ+5MAGnDoIycta2P8Fg5Ox5iyVxEUkZbNXCEE9qRVhmodxWKdEoYhvIIGezgvakdZARoCxKS3DBA+IHqSXBxjQH8oon6nIcDSgqQ+LJWBeUY5GoxWV6UL2mUesIgX1/Snrm2Agy4V9AoZwCMMz3klBHVSE+X/vJIAgsBhe0fZhBxkQwAkcgVSrSqD33T4GI61xWCcAcf5umICfc0jf3gTRltWgMVMlENRS+wMz9oSgSc0JBNweN5ZKNMWSxUEHE40igunUobSncohOCBcZ4YILVlNqi3bkCNVCNA2o3CrIeCgki5AeBZhLC0WFspdV6YAxrLszIe665VCxJeA2W1EGK/zyhwQYsW2PEgwM3pLCC72raNMQZE30SRXVvAECzkPlAecoVRW0UGjlLIhn9mlMDq5pDsU0x92UAgj3fIDDpwlE3Z4Sx6Y6SO9UfIm8yiFWzC5EHAMzg5upMoJ+fIUKbGwSjgoyyreyRVWlVNrblnYVITx/z23JCCNC8EXNTc0zCy8BR24FMg8/MiVE2DNJnAg0Fu2cYeE/mMVjTTm6ZYUQxFZVCD2GKE/picSx6hMYw6ZjEjddwdTNuQJBq2R41aRx6MkwEYf2QlDuyKwiKxicEXRxX1ySo0pkqaEDhmbW/ShE47kKDHonMgW22KHkG2EeFMAqj9+IEqHgAOFRMSfS/8xD2FkoaZd2YQwGSKMM/ZlGye44UWS1be+JICbAbUHWIk4lj2uaSdo7cox82OPqS4LDTSZyFzIsNOuwGKselVMAjaBgxfpJyFWWYUcwPAbywzWIvaoXmJikQAwyIEmPdLJVYrgG8Vs4qMLwYdh2xILXf9sIgRccE45drtbNEyBDCcoxh8Cu7KxDsQeqUyMLv5QjBPkxTnU4O1uuRCCTegiaHyJAF4lwh/W0IIWtwEvcflih29SRBhgGG+otgFe9j6TL1no6oUI0LvW2Nco5UgnRwiAg/fety+oiIBfObQJ7vxXNO8zL0bK0NEDX4ZlIimJeh3sj21s4grGXcgqqOFfCvuDFjIbJg5WemC+DXiuq1AEie+LCjsgaJEEyAKoPGyUUqwiiFLByyYASONYbAJ0s0oWOhRw4BXQ4gRogO1HVgEH/kyYL7SIBfxODBKrTMoOJ/WsPkqT4YzghRqKoGdithGBH1BjoyHMBDVwAIcIoMNJvd+Nc3vRYQculAMHSO1MGTasxU1swxAKkPN3FWCIYvyAt02lYLJwABvHOJp4cCDDi/IMnisw+UAkevRkSqK5Lrfq06AOdWcCAgAh+QQJBAD/ACwAAAAAoABWAAAI/wD/CRxIsKDBgwgTKlzIsKHDhxAjSpxIsaLFixgzatzIsaPHjyBDdpy3igwZOGDAbLKCrqVLO2TKmFi1SqTNmx/nEShHBgwtT9t06Vrhr6hRf7q2KdimaEq5TARwSp0KkcAqHHMiED3KtSvXbXaokYlKtazZgavKJaDlta1bo9umrJp3tq5NAmSmJHjLt68+YXTtCtZI4Eq5bX0T840FhgDZwZAlEijzQ7FlvpvQPI7MeaGwE4gvi3Y7JVPn0wjvoBnN2u0maptRd74DhvW2begSRNi9+0eCWKJXzLsi+/SVCJdR0QqBBk05OKuEZbpyRc68ItAj6BplGY7p4pDLIP9X3A3Mc8cMSVr9EbpvYfB2CdwZ33fTibkUCcxDoysxAXDwnQUOA4nBQsYqsU2kExjtuUVNgGbVxlcCUyR40Xp86QIHhFNRs5VbtJRhYUZl6DPhHRzeJAxwb5VTk0irTMGXPiOmmBEBbLVYBk4EwPFhV3mUY2NOJ/AFx45S/ffjV/YM2dEqfJ2AIlU6LXlUFt85idETlbkVAXFmWfVWYFpaRNJbtABYFwESevWDmmVSdEUxbq1wBZkC0tfVi3FOFMJbiuB5VmFWFvVlnxKt0iBXsfA5GBlt5VEjogi16RVskRHwRI5dnTAppQQ9UWhRsCAZ2XVtJeAoqAhdoYhbuqz/CtmmbeHwKajzvFUhagRQ09YJrCoEjp5coWNqZ1YVig56wRoEpYPgzUNsUTNcAWezAhGAjmu3rjlFHl3pMsWG2AoEDhxvyXpaOSwelcd95Qr0xKJH6XOtbHLM4BUDcsTba53HFnfHtl3B8mC5cvTXFhpgBjitP+gAiy0BRbrV7WAEyNgVLRGUO8+o/kyRIgFFeKXLJsKUBMfKcBRRxMWnWfoVzII51hY65URASzE880wLHDRjPA+4bZUTtF2QeoXOFARzNdaQd3TpFS2CBria0mjs1dXLQ+bqlglOJt0Vzt14BbSN8zRdcMABEpCJVyuo+rDRNmrsVR7zVA2fmF1t/xNBGa92ZYe6suGjsFdgaEnAnxvTWDFXsKR4xeN9C6PlKjIXlQAacOhjpQJsy/ZsrfdyqK1XERSRFipdeUI4Z5NxuvHRkAljiFdo2JO3vlytgEbb6Lr1eoAeAimXY7IbpUjDshFAr1FgWK5lGXYfFYuLAkl91DbDCzYPLLCGbvrz24BDV49tkSubMER7FUKWThKQKkFwHH7UJv3yaj9XacZZxiZteZpApNUWZnEGHJTrigluNY/S1UwYbVmBATNRjrb8QHx1CV5bIvCEhmQCDnqrC2UseC9w7M8o3aNKGbTWlhQKBAchQ5aDBMWmtugihGUhwMOU1y1wbEsXzLOLMP+e549YWEhsXZmCA6lyrvaNbUoMeVwCaMcRYVzNK3NACAHbcjAhtst93RLVUaaAQ5wgsXdPsFDenHiUENllFcnjyhQb8pneCWOJd7lDHI1iB4Xo0C0/4MBZMmGHt+QBjwXxGv+CKJV5lMItRlwIOEBmhw6qsHpeeUpD5qG97eGgLKvoJFeKwBBw+MotxpqKMBjnlgTkbyF4ecsP1HeTVWThLego40DmwUKvnKBJN4EDgd6yjTvoUiCr2KFREsC1u4APRMcciD2IaCgM3uh0fOkiQyZDTc3dgYoOecItW0SzVZzwKAnAnkd20stfJQpkRdEFvNZJDQDqSnoQMdGMdML/kRglppITSWBb7AAOREbEbVOApz9+AEWIgAOTXkkADsABzgEKIwvn7MomrKkQYVSwL9s4gfkuMg84lMOeb0mAQRNCAHtANKJjcaGzdpLRrswxP/YQqA3RQJOJzIUM7WwLLCr6D5cqJgGbwAEOEIRDq6xCDmD4jWVuahF7BC4xsUgAGORAkxrp5CpF8I1iNhFNhuBDp22JxclCwAXnlOOtb0XDFMhwgmL8oaZe2QRRpXnFxOjiD8U4QV6cQw24vpULIdiELr7IlwisFCL8YQ0taHEbyuKVL3ZgpEWEAYbL1mkblAXtHhOThYZes2ytSa1RymFJjhAAB6NVrWJQEQGZ2yZqE9yRrWg2p1mNlOGZur2MXm1SEs8G1x/b2MQV9rqQVVAjtsc1Ci3GJZWrdDO4EVDnTUiiiOvKFhWDY+5DHJMFOkXXKKVYBfySRIZNsO68RdwE3QZVUnQoQLcroMUJ0FBWkKwCDvwxLl9oEQvO2TYkVmGTHdQ2VX2URrwYwQs1FCHKxPjtB9RoJrIyQQ0cwCEC6BDtZEccWnTYgQvlwAE+UVMG5yJwE9swhAJIPFkFGKIYP4ArP9tWUhzAxjFAdhscyLDUFQfoCv89kIiCPBmVGTBeUI6ylEUSEAAh+QQJBAD/ACwAAAAAoABWAAAI/wD/CRxIsKDBgwgTKlzIsKHDhxAjSpxIsaLFixgzatzIsaPHjyBDdpy3igwZOGDAbLKCrqVLO2TKmFi1SqTNmx/nEShHBgwtT9t06Vrhr6hRf7q2KdimaEq5TARwSp0KkcAqHHMiED3KtSvXbXaokYlKtazZgavKJaDlta1bo9umrJp3tq5NAmSmJHjLt68+YXTtCtZI4Eq5bX0T840FhgDZwZAlEijzQ7FlvpvQPI7MeaGwE4gvi3Y7JVPn0wjvoBnN2u0maptRd74DhvW2begSRNi9+0eCWKJXzLsi+/SVCJdR0QqBBk05OKuEZbpyRc68ItAj6BplGY7p4pDLIP9X3A3Mc8cMSVr9EbpvYfB2CdwZ33fTibkUCcxDoysxAXDwnQUOA4nBQsYqsU2kExjtuUVNgGbVxlcCUyR40Xp86QIHhFNRs5VbtJRhYUZl6DPhHRzeJAxwb5VTk0irTMGXPiOmmBEBbLVYBk4EwPFhV3mUY2NOJ/AFx45S/ffjV/YM2dEqfJ2AIlU6LXlUFt85idETlbkVAXFmWfVWYFpaRNJbtABYFwESevWDmmVSdEUxbq1wBZkC0tfVi3FOFMJbiuB5VmFWFvVlnxKt0iBXsfA5GBlt5VEjogi16RVskRHwRI5dnTAppQQ9UWhRsCAZ2XVtJeAoqAhdoYhbuqz/CtmmbeHwKajzvFUhagRQ09YJrCoEjp5coWNqZ1YVig56wRoEpYPgzUNsUTNcAWezAhGAjmu3rjlFHl3pMsWG2AoEDhxvyXpaOSwelcd95Qr0xKJH6XOtbHLM4BUDcsTba53HFnfHtl3B8mC5cvTXFhpgBjitP+gAiy0BRbrV7WAEyNgVLRGUO8+o/kyRIgFFeKXLJuVa+tXFGBPQFjrN6gduW+Ww/OjLzd7RpVe0CBrgal7BHGyubpngJKRBD02wV6UOSUAmXq2QQLAae5XHPD7DJ2ZX23QMKj4KewWGlgT8ubE+oF5RsVfbCKPlKioXlQAaoD5b670cautVBEUg/zoZpxvbzJkwhniFRpN99phunB4CKZff9BoFhttallH1UbG42Oc8sMAasI0ERL4NOFmnKMzMXoWQpZMuezV14mFvjHeKZWzS1lhxgrO2VybcOs/s8QnT1grMaomul080lAkcpZ9FWVtvxlnGXm6pexAOISPrYPNaP2yUIt2Cs60uDQsmTOT+xCJ4ZOei3hU6UzK0dgLrdyQM0F7NEeeKb4XQrahHmQL3boK0qD2hfoJZBeC6Qr+GfIYrKxAG8O5yhwUexQ5lyoQd3pKHCRaEaFyhRfmmMo9SuEV9FyqL5fjylIbMY2dfwUFZVgHDrvTNImUIAeVwIgyzuSUB/WIIXv/e8gNy4WQVWXgLOga4kEzI6ASIswkcCPSWbdyBif9YhfeMkoAiILAqnQMRFhNSBvxFwHqE0RtfDtaQyaCPi3f4YkOekMQWffEOPixKrHbIkZ1Q7y0Sg8gqQKZHeHmkV7bTFR8jUobjdaUxcnTW5dxih+RJZHeUBIcHI/K0KRDSHz+In0TugD23oKMIOrnIPISRhdi55nMOEUY5ErONE5BOlXAoRyLfkoBNLkQOiaFFzdCoEASVw5U//CIB7IFJWKGBJhOZCxn++BZYRLJEikEHLIpwIP0kxCqrkAMYfmOZBl7EHq9STCwSAAY50KRGOrlKEXyjmE2McSF3UINlYiH/tRBwwTnlCGhA0TAFMpygGH9A5ls2EcmB2AN/idHFH4pxgrw4hxoCDSgXQrAJXbSrLxHw5UNYqdC+0IIWt0FpSRNjhxFeRBhgWClfVrANlNbUgorJgihvBIdhtOanRymHJfuIA5wC1TKoOCNIVoEO7hxVNHNz6UbKEManXoahNlkFNWRqVbhs4goNXYhWjdrVo9BiXFIpyRu7GgHN4YQkiljrU1FhBwRRxSpZWFpZ/VGKVawuSWTYBCr2WpRYbKJmawIHU+l01BXQ4gRouOdHVgEH/nA1mLFAA3QgYxUCZEERei2nPkoT1huRgRqKqKFiuvYDaniRV2WgRnbQcdOTSNrWpuiwAxfKgYNFdqYMWtXdJrZhCAXc9qQKMEQxfiDQVAboP3DAAWwcQ92nwYEMOIiOja5A2QOJqLqTKQkcihev8pr3vCIJCAAh+QQJBAD/ACwAAAAAoABWAAAI/wD/CRxIsKDBgwgTKlzIsKHDhxAjSpxIsaLFixgzatzIsaPHjyBDdpy3igwZOGDAbLKCrqVLO2TKmFi1SqTNmx/nEShHBgwtT9t06Vrhr6hRf7q2KdimaEq5TARwSp0KkcAqHHMiED3KtSvXbXaokYlKtazZgavKJaDlta1bo9umrJp3tq5NAmSmJHjLt68+YXTtCtZI4Eq5bX0T840FhgDZwZAlEijzQ7FlvpvQPI7MeaGwE4gvi3Y7JVPn0wjvoBnN2u0maptRd74DhvW2begSRNi9+0eCWKJXzLsi+/SVCJdR0QqBBk05OKuEZbpyRc68ItAj6BplGY7p4pDLIP9X3A3Mc8cMSVr9EbpvYfB2CdwZ33fTibkUCcxDoysxAXDwnQUOA4nBQsYqsU2kExjtuUVNgGbVxlcCUyR40Xp86QIHhFNRs5VbtJRhYUZl6DPhHRzeJAxwb5VTk0irTMGXPiOmmBEBbLVYBk4EwPFhV3mUY2NOJ/AFx45S/ffjV/YM2dEqfJ2AIlU6LXlUFt85idETlbkVAXFmWfVWYFpaRNJbtABYFwESevWDmmVSdEUxbq1wBZkC0tfVi3FOFMJbiuB5VmFWFvVlnxKt0iBXsfA5GBlt5VEjogi16RVskRHwRI5dnTAppQQ9UWhRsCAZ2XVtJeAoqAhdoYhbuqz/CtmmbeHwKajzvFUhagRQ09YJrCoEjp5coWNqZ1YVig56wRoEpYPgzUNsUTNcAWezAhGAjmu3rjlFHl3pMsWG2AoEDhxvyXpaOSwelcd95Qr0xKJH6XOtbHLM4BUDcsTba53HFnfHtl3B8mC5cvTXFhpgBjitP+gAiy0BRbrV7WAEyNgVLRGUO8+o/kyRIgFFeKXLJuVa+tXFGBPQFjrN6gduW+Ww/OjLzd7RpVe0CBrgal7BHGyubpngJKRBD02wV6UOSUAmXq2QQLAae5XHPD7DJ2ZX23QMKj4KewWGlgT8ubE+oF5RsVfbCKPlKioXlQAaoD5b670cautVBEUg/zoZpxvbzJkwhniFRpN99phunB4CKZff9BoFhttallH1UbG42Oc8sMAasI0ERL4NOFmnKMzMXoWQpZMuezV14mFvjHeKZWzS1lhxgrO2VybcOs/s8QnT1grMaomul080lAkcpZ9FWVtvxlnGXm6pexAOISPrYPNaP2yUIt2Cs60uDQsmTOT+xCJ4ZOei3hU6UzK0dgLrdyQM0F7NEeeKb4XQrahHmQL3boK0qD2hfoJZBeC6Qr+GfIYrKxAG8O5yhwUexQ5lyoQd3pKHCRaEaFyhRfmmMo9SuEV9lbucV57SkHns7Cs4KMsqXtiVvjlJGGZzSwL6xRC8vOUH5MLJKv+y8BZ0DBA1cCDQW7ZxhyP+YxXeM0oCioDAqnQORE7kjGOWBi2HTAZ9UrxDFRvyBCK2aIxU2Qn13iIxiKwCZEXRBbw80ivb6YpyHIpRYuyQPInszi12AIcHI/K0KcDRHz+IH3zmIYwsxM41n3OIMMqRmG2cgHQXmQccymHHtyRgkJBBUDkeqcMqEsAef4QVGmgykbmQYY1vgQUac0KSVcgBDL+xTAMvYo9XKSYWCQCDHGhSI51cpQi+UcwmsliWeZDhBMX4AynfsolZCsQe+EuMLv5QjBPkxTnUKIc4xcmFEGxCF+3qSwRAWRcLKsYOI7yIMMAwzcSsYBu0uA0t3JnNmCwoEjVctEw5+sgRAuCAn61JTgSsx5mA9mVu8dxIGa6YUNZUk0MOdcs2NnEFaypkFdRAaEV5Nq4UZXRvmsMJSRQBxpEWBRV2QJCNTnqUUqxidUkiwyZQ4dKuxGITNXPSSVdAixOggZkfWQUc+FPPy9AiFmiATpkcmgB9lMajGMELNRRBQ8V07QfUoGKfYHEbdNiBC+XAAR5RUwaQ6m4T2zCEAvZJV1oowBDF+ME4dQKqIpgEB9Gx0RWUeiAROeawbT1J8eLF2MY6ViQBAQAh+QQJBAD/ACwAAAAAoABWAAAI/wD/CRxIsKDBgwgTKlzIsKHDhxAjSpxIsaLFixgzatzIsaPHjyBDciQwbxUcMnDARNiErqVLdHbI3FlFU6TNmx/nEShHBgwtQ9t06Vrhr6hRf7q2Ldlm5wQZOQRwSp0KkcAqHFN+6DrKtWvXbWCokfkXlarZs/9olksQK4/Xt3CR6jqxSifauzZxnEAXt2/fFWCuzMNLeOO8K+W2+l0cFxUYAmULS5ZIoEwExpj7dkMTebJnhSRP0MpMGm6eE5k+q0Z4B03p13B/UFtNW+Cdy6Vj0UKXIIJv3z8SbCO9Yp6c2p+v4MZMCw2acuXgrBKW6coVOfPgSI+gmDGcK8gll//5gdkKmOiQF5KEvCrC6MUEjoe/e5txN0WrwFEkOYUxAWHznXXFCYttQs0qGekExnBx6TJbgFSB4Rc6U6S3kVXd9KULHBBKRc2EZXTGkWV9JXBHhzYJ091bISAo0ioExqWIiCheyFdcIchnEwFwoBJXOTV6NE9/ccFxolQEgOPWW9vYEyRHq/R1wpFTzTPPkl6h9mRG+CznVQTgnWVVXINteVGUcNGi310E6BMbgGZSdEUCcQlGmHJwcRgnZeXEdUKZd8IFBpx7PrTKe17R4mJh8+DAJI2FKmRHXGN5dseNXSkSqUN3xBVBGZ9l91Y3i26K0IBwxVLqZPYgyhUOpir/NE9cnK02DxlvVRjrQcKQ91YCoNKGZlfoQBrrsF5VShs4pXi1zRVr7irQPHS+tYmxkxHJVSxT6CktOCaYtupq5cSS5bib3uEqV4pEW5scy3ilSLC73mqajshd6hUsD+5ahrlvoUEvcu15hc4J0hKgrVfYfqZwohFIO8+KXNUaIAFFeKXLJrsSkEWa6NZGwFvo1PtjjX0aHOsdvhoMKISuqbwpSUU2TC7JpoJTrVc/DAzhFV6tkICpIZAZ5JhfRRzpExQflYXNqxFQdFe06BOpMDE6SyiKq0jYVQJoRLoKll0V4W6Hq2B6VATemlkGgwZDTZswCng1hZNxigpXyAHi/2o33xDOA7BXgW2ZSdZHbVMO4PMRsAlcK/iMIgHrFrUNOHLTBhmOYR49slcJMB4eAYMT+3KNd8DyVhGZr3bFwl2JTpYwreMkDFy1q+YoXBHg01AZcJxOWH1fnt3hPGXs7JXsBDgagmdIJ2smNV5mKvxBOvuzQueECVN5UbHk7pk+3xeFDpULxezPD+J3lMnUXln8ZBmrlH7U8w3dQZRRU1w/ld9vQd/R5kGNyl2rIcJQn1GE4b+b6OstCItUEVqmPe4pBBz7Owo6LCgVYXjNWe1b1qRm4Y9ypIYh86DgUXRRBLOsQoVcYd3K+gMshwBwX22zySomBRd0NHBLkAGD7/8a4rES5fAjkIkA2biigB/GyUINkQPc3qKAJ4TQIfhw08mkRRFkvSUWdLkiQiBDDRhWTHJcfAjieAcOJ1ZFDidoGlciIMA0QiQTKesLLU7QRouwJwSqK5Hx7AgRe6wRclOoiUTqQg21xUaMhPyHPRTBnGGAgX7rOch6CEAGHERAeXFJgBsjyRB7wK4vbjkYGabwHOhAhxqLK8cmdDGLJcKlFIMkZURIsiDY5GEbtNiGMGkhR1TSUZcaad4UYQMbWjwGmRdKHjOZWSxIQtMgq6DGMqepxxMc8ZoJ6loGufmWPIBhFdYEZ0I4uYltknMbmyhHOtW5kFUUYQpBIScjtjFMhSLIjp4ZiQoOqKEIWBQzLtvwDTVaOE+APqQy2QTHCdq5BAXQ4qIYVYAh0PGDcoSAGiVxaGEIkAmTSCdEkElpGUygHSiK9KUw3VNAAAAh+QQJBAD/ACwAAAAAoABWAAAI/wD/CRxIsKDBgwgTKlzIsKHDhxAjSpxIsaLFixgzatzIsaPHjyBDdpy3igwZOGDAbLKCrqVLO2TKmFi1SqTNmx/nEShHBgwtT9t06Vrhr6hRf7q2KdimaEq5TARwSp0KkcAqHHMiED3KtSvXbXaokYlKtazZgavKJaDlta1bo9umrJp3tq5NAmSmJHjLt68+YXTtCtZI4Eq5bX0T840FhgDZwZAlEijzQ7FlvpvQPI7MeaGwE4gvi3Y7JVPn0wjvoBnN2u0maptRd74DhvW2begSRNi9+0eCWKJXzLsi+/SVCJdR0QqBBk05OKuEZbpyRc68ItAj6BplGY7p4pDLIP9X3A3Mc8cMSVr9EbpvYfB2CdwZ33fTibkUCcxDoysxAXDwnQUOA4nBQsYqsU2kExjtuUVNgGbVxlcCUyR40Xp86QIHhFNRs5VbtJRhYUZl6DPhHRzeJAxwb5VTk0irTMGXPiOmmBEBbLVYBk4EwPFhV3mUY2NOJ/AFx45S/ffjV/YM2dEqfJ2AIlU6LXlUFt85idETlbkVAXFmWfVWYFpaRNJbtABYFwESevWDmmVSdEUxbq1wBZkC0tfVi3FOFMJbiuB5VmFWFvVlnxKt0iBXsfA5GBlt5VEjogi16RVskRHwRI5dnTAppQQ9UWhRsCAZ2XVtJeAoqAhdoYhbuqz/CtmmbeHwKajzvFUhagRQ09YJrCoEjp5coWNqZ1YVig56wRoEpYPgzUNsUTNcAWezAuHo2q1rTpFHV7pMsSG2AoEDx1uynlYOi0flcR+5/2i66FH6XCubHDN4xYAc8ApTTp3HFncHOl7B8iC5q4zqDxpgBjitP+gAS+66bnE7GAEydkVLBPDidQKnRk2RIgFFeKXLJvAORE0E7G6TrmyOtYVOymiVAUZ/5VgMGaRezUzzQOBc1TCHq/X8c0FZpshzVz4fXSYBmXi1QgJOxylmV9twXLWWBPypsT5ba7mKpUYlgEbYThJAcFcRFIH2kMIY4hUaTb6doodAymU3h2Vk/8yoi3tDSMC8/mwDjqCB85pq4gGWsUlbYzH+zzz2XixMWyswm3gmcCBuF2VtvSn5Pzj4IzJnBDjoOdrgEKzL0HYJQ7g/sehMc5FFJWD7R8IU7dUco4t61BSrS7V0Vys8sTu2n3G1gjCV83gHyFzZMXquGsMu1TyluFW75PN0iTUOZa0ivlduM47XWz+Mi9MqWbyFTvFbr/LwUQkUsbxksKBJ/9aTmV3Z7rC/hzwhfi0qIMIUVhRdvMsjvXqcroQxOoLgji92AEf08pOJKTDQHz+YUgUF4q/EbOMEh7vIPOBQDgm+JQEbVJ89LpghNNBkInMhw176AgsFOs0er1JMLM0SAAY50KRGOrlKEXyjmE38b3T28F1idPGHYpwgL86hRjm2uEUuhGATumBXXyIQwxGS8GatWcE2aHEbWlDPMlkQoRkTQgAcvLE1o0FFBF42R4OUoX94bM0mfCi5VVDjjoEEkbj6KBGSKEKAiSwKKuyAIEbmhwybQEUkuxKLTeTMkhdZBRz4059E0iIWaIAOKAlDBmoo4nyWydoPqKG/VXqkDIYExwk2sQ1DKMCNwKSFAgxRjB9wUSe2tMkVRHkgETnmmbg8ieaSSc1qeiQgACH5BAkEAP8ALAAAAACgAFYAAAj/AP8JHEiwoMGDCBMqXMiwocOHECNKnEixosWLGDNq3Mixo8ePIEN2nLeKDBk4YMBssoKupUs7ZMqYWLVKpM2bH+cRKEcGDC1P23TpWuGvqFF/urYp2KZoSrlMBHBKnQqRwCoccyIQPcq1K9dtdqiRiUq1rNmBq8oloOW1rVuj26asmne2rk0CRaYkeMu3rz5hdO0K3rgKzra+iPnGAkOA7ODHEgnMY5u48ttNaBxD3sxQreXPb6dk4kz6IIE7dkCrdruJmubSnMtMUb1tG7oEEXLn/pEg1ucV867ALk1AX2VUtEKgQVMOziphma5ckTOviPMIukZVhjN6OOcnP/p2/wPTvDFDklZ/HEZMQLj3zcK2et10Yi5FyWh0sQf3fjM1r7CQscprE+kExnpvUdMfZGWEcBQ6aAS2UXp86QLHgo+BQ1kERRCoURnGvZXAHRgOJsw25UgI0iqzvaWPhyVKNQ8cMHZEABzydZVHOTH2aBEB4OT4lT0+FimRTkIelUV3RjbJkFVvqejklKaB4dYP/FGppUHgROBWTVuGKVB7SRYVgXtihklGW3nUmKaPBDxBWVcnuPlmjNW1lQCYd1IpZ1s42NnnggT859UJg1JpVZnomJdok/N42dUMV2T5aJEETJFHV7pMceGlRpbjG1d51AeqkXLM4BUDcpxa5B3oAP+ooKs+SsoVOojSGmOmXtESga67FuGVLpsAW2JjbaFjbIlreqXssguikSy0Czbb1bPUDkdAJl6tkEC23kHZ1Ta/ggsbAQ52RYs+5sK2ipVdJYBGu8TF2hWH9JImjCFeoUFkvv4lmYdcADPYIlexlMNnwXYRgOBR24AjJcNmEaAnxYOVsUlbY2U7j6WQESBMWys4Cm0mcExsVxnheYUluDj4MwVnFrdFjcq0ghOrLmgKdmJbsQh66QlGJSC0SMJI29Yc4D6R4xQ4S2VtVys8cXSfwhB91ArCgDzVaXN2ZQe48/Ta81TzlOJW0B63PC4OZa3itldFgDt1Vz98itMqWbz/hU7UrtqqZ4c3EQDLW7QA7moZD3s14tUTPdH3W+VAnugqZR6li6keFbpxaMLkqzVfdoDj9Y+ZTJG5UT+QmK8w5SC2zQkSXzRjOZ+LeDq4BNgzeoVo0DTRXGTs1RcsltNqjyKVxZIAGHLQVKNOVxXBW2KbKA6uPUonpssfxZxAxhTMUVPO+edzEcImuoyKWAS7FywMGPqptsI2tNRGS9iWZeE6xgQhAA74txrVoCICCwMgQcpwuAKuZhPJo9cqqEFAByLOUwo8zyoU0TgLdgUVdhhQBh1CADJsAhUe7EosNlG5EUakMPmpnwNpEQs0OMeF9yEDNRQxt8qQ6wfUIBwOMS9ShgmC4wSb2IYhFLC/JtJCAYYoxg/Qp5MhduQKhRFQGRrDRQIU8SQms6IYx8iQgAAAIfkECQQA/wAsAAAAAKAAVgAACP8A/wkcSLCgwYMIEypcyLChw4cQI0qcSLGixYsYM2rcyLGjx48gQ4ocSbKkyZMoU6pcybKly5cwY8qcSROlPWoECNTcCXNeCH8/cOjkSTQlAWH+kuaZgq+o05JyEiSdCmbV06sf5fycOnUbtXlYw2acx7WsLgJXxKqdeIdW2bfz5Kyd25AAjrd4j9Ldi5CAHDCx8HLVRY2vYYN2pQpOqgvO4ccD5URYnDTBHciQV51YQVnRUMyGV8FBRbkc6McEwOVZvM3e6cPz5q0WfCLTa8MEVlEGe5svAX2LfwjrzffKZMGOie+9shjMcOVz593Fu+0zdLV30AlWdD06HMHdrHb/V2vPLV4c49XOIyN4ivX0T3XjRfceflFwpahfAWcf6xS8sUyRXH9OlRPYWyeIR2BRciyDlyJlLOhUdnjBUpiERK1yXFnonIAhUQT89xYtEXzIEwFF4KXLJiaeKBg6Le5Uzosx1oQGjTXONON8Oc7E3FsrJNBjTLlRV+KQLxGwVVm06IPkS6uAgVcCaDzp0iravRXBgFaqJIwCeE3hWpcrsRemgmSelMkJ1JWDZpolEWBeWduAUx+cIeUkWAJv4inSHbAIVsSd6R1FKEtICXboeGXAwVtMd2xYVgT8SWiXPyHIVKRgZHwIjlQrpAWTMHOWFcui3d2Y1A+okpTJkm+h/9GqcndwNtUUj5ZJ2WUSCqMqV8LkihKFtHlqK1foiJqSMFIKVh2G8/wgmC5FpLSKtIsNiqGZgsHC5Uir2EEZOsL2lwVl/iTw7Uc5RTAbXgqU258c26CrwBOzVoQPcKXFKB9lsSSY70M5UYPtYmhEGCOb6PpDqbwU+XWCLuhGwGuMmeyILi0ngAOxQzmtEkKg6CZQaY72MNzwClOs0mdDq8xDTZbosvqkPYo0PBUtw4BRxioEzHNn0DmRgUMEijWcwMct2iOizv6s1iEZU6BRztVXU+NmOZvoMsu76JZy8pNBg1Ev1GXlsQ0t27RNC8VoK2UxnnadHffdi9ECxsAtEn9QRtJ4B54UfXzXuAo1dguONsfr+vnPPFEeqzhleVRVONlkbJL45Fxts0k5l5O5ShFTbAP35IxsM0URLzuekE44UKMILKejvU0EEVBTbeiu+304OCdovoQCtBRvvAKGoPNDOSF81brrEhGQiWhwrFJGTtj7bQIccOQE/ffgJxQQACH5BAkEAP8ALAAAAACgAFYAAAj/AP8JHEiwoMGDCBMqXMiwocOHECNKnEixosWLGDNq3Mixo8ePIEOKHEmypMmTKFOqXMmypcuXMGPKnEmzps2bOHPq3Mmzp8+fQIMKHUq0qNGjSJMqXcq0qdOnUKNKnUq1qtWrWLNq3cq1q9evYMOKHUu2rNmzaNOqXcu2rdu3cOPKnUuXKplu6PLq7Wanbkg0/gILDkzLL8gQgwejM/wRR2LBixlzJADusb9tESRPLmeZFhjNG1eBsZxgCmiNBNBZjlDkdMYymCyjsecaY5EVj/NMWVXbYhnAj2OV492b4jxalmfYu1KcIgHL/hKAI9Bc4p1N0Mt5nQeOJgFh0Fes/6LONROceTPLwIL+o3tXx6ZlroLujxp6ruBU62IOU9g26NsQx9UJgiVAXkvCAGdZX109gZtgU9zHEhn06dIaV8IQONgKwriXEgF3IAfdFJl0NU9n/KU0Tyn0+SOhVvP8ACAOKa0iI33adUUhfT/AcdIqWbS4SRleRdBidEUcGBIB69EXSxkvalXGfy0mcIeSHj0RZIvxfbXKgxWeIOBk1GDX4hzCiKXhkXaA4yFGBGQyBZjs3TGWMJwdedkJ4EQp0TxwlGNmlW+CRYA9ax6pCxqrjPnQKvOQkYCe/sCCpVj2KEJpYLEkAIYcjV460DwErIJDET9MSukmfo5lj4KU6rLyRzEnkDEFGuVQU86uu3IRwia6xLKpPxEUapYwYOgybGIrbEPLNs6KuGxgWdjJFgE4SDvtto+hEoGja6nH7biCbSIqW6tQoy25lNIyhY90zbOKIlSy2yIqdozHGAFkbIKKvZbFskk559K1Chxo6KKsvbTEggYc4GrGLzWK3DgtZj9Qk2R1A5WRLjgnbLKNIQrQYvLJChhSzA+8ksoxQlccTMYqZRBg880ekwGHzS/3bFVAACH5BAkEAP8ALAAAAACgAFYAAAj/AP8JHEiwoMGDCBMqXMiwocOHECNKnEixosWLGDNq3Mixo8ePIEOKHEmypMmTKFOqXMmypcuXMGPKnEmzps2bOHPq3Mmzp8+fQIMKHUq0qNGjSJMqXcq0qdOnUKNKnUq1qtWrWLNq3cq1q9evYMOKHUu2rNmzaNOqXcu2rdu3cOPKnUu3rt27ePPq3cu3r9+/gAMLHky4sOGDV8rMO2wxE5zFjCni8Dcl8kRw6PzpumI54gl/oBMQ6OzwyQrQoKdAJp1Q2GfU/lYIA8c64TzYqGlxrm1w3g/cqLfh4F2QDHDYP+AQHxjhOOwERUaPXLVqbZltzlEnuCMdpJwItOyt/111OrvmE9U9ZiKA3V+E7mhfm/dnBxxtjQTmKcKdBb5ZYeXMB9o2J4CzGkUEgINDZrjpQoZ/ZBFgj3zz6YIGdRNRVw6Dx60gx4Fm2bOfgKDFkgAYclAH4UDzELAKGWQkwGF226SXlj1okIiaLn8UcwIZU6BRDjXlFFkkFyEksAIqJM7ijyJsCQOGLjoCt8I2tGyDJS1V4haCeGwRgAOXXZZpnoVgulUGLGa2idsmILq1CjVkutnlNlMoR9c8qyjSnp3zxaIPHCvGRQAZmzAJ6HHb/FCOjXmtAgcaulC5KC0WYvjXodQo8puZ20QACzU4FNpXGXOCc8Im2xiiAC2wxiCqgCHowBJCCOW02NkVkpKxShkEBCssqmQQaupyyM4UEAAh+QQJBAD/ACwAAAAAoABWAAAI/wD/CRxIsKDBgwgTKlzIsKHDhxAjSpxIsaLFixgzatzIsaPHjyBDihxJsqTJkyhTqlzJsqXLlzBjypxJs6bNmzhz6tzJs6fPn0CDCh1KtKjRo0iTKl3KtKnTp1CjSp1KtarVq1izat3KtavXr2DDih1LtqzZs2jTql3Ltq3bt3Djyp1Lt67du3jz6t3Lt6/fv4ADCx5MuLDhg1fKzDtsMROcxYwp4vA3JfJEcOj86bpiOeIJf6ATEOjs8MkK0KCnQCadUNhn1P5WCAPHOuE82Ki3Zap9cN4P3KjR4eBdkAxw2JuKEB8Y4ThsdHBGEy+zzTnqBE+k816lyzpoXSdWLYV/7d2fPnC0eesrD5qWIgLaOz8hX17XlHJX4jO2p4g9bDBZEBCdZfbQ518sxZTRmT1o+AfbDOJ1RkA51Tm4DRy1lfGbf8JtRw0t7EWAIW/zrKIIKt7ZESFxE25SIXBo6LcdHFPo8iJocAizXEEE4FAOLM2BtspqOxJEwCrUzBNekUw2KVVAACH5BAkEAP8ALAAAAACgAFYAAAj/AP8JHEiwoMGDCBMqXMiwocOHECNKnEixosWLGDNq3Mixo8ePIEOKHEmypMmTKFOqXMmypcuXMGPKnEmzps2bOHPq3Mmzp8+fQIMKHUq0qNGjSJMqXcq0qdOnUKNKnUq1qtWrWLNq3cq1q9evYMOKHUu2rNmzaNOqXcu2rdu3cOPKnUu3rt27ePPq3cu3r9+/gAMLHky4sOGDV8rMO2wxExxhjCvi8Dcl8kRw6PytKGM54gl/oGER6OzwyQrQoKeAI71Q2GfUoOWwVjgPNmhanGcfnPfD9iZ7i3UbJGMbFhzhCCPAjrAKOcJMukCDae4cYREFU6hXP0gAzujt4MOLER9Pvrz58+jTq1/Pvr37zgEBADs=", NJ = "data:image/gif;base64,R0lGODlhlAJmAcQRAASgmEFCQiNPTAGyqTQ/PhF1cBpfWytEQwmQiTg+Pj0/Pw2CfDBBQB5WVCdIRxZpZQCyqUVFRQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH/C05FVFNDQVBFMi4wAwEAAAAh+QQJBAARACwAAAAAlAJmAQAF/2AkjmRpnmiqrmzrvnAsz3Rt33iu73zv/8CgcEgsGo/IpHLJbDqf0Kh0Sq1ar9isdsvter/gsHhMLpvP6LR6zW673/C4fE6v2+/4vH7P7/v/gIGCg4SFhoeIiYqLjI2Oj5CRkpOUlZaXmJmam5ydnp+goaKjpKWmp6ipqqusra6vsLGys7S1tre4ubq7vL2+v8DBwsPExcbHyMnKy8zNzs/Q0dLT1NXW19jZ2tvc3d7f4OHi4+Tl5ufo6err7O3u7/Dx8vP09fb3+Pn6+/z9/v8AAwocSLCgwYMIEypcyLChw4cQI0qcSLGixYsYM2rcyLGjx48gQ4ocSbKkyZMoU/+qXMmypcuXMGPKnEmzps2bOHPq3Mmzp8+fQIMKHUq0qNGjSJMqXcq0qdOnUKNKnUq1qtWrWLNq3cq1q9evYMOKHUu2rNmzaNOqXcu2rdu3cOPKnUu3rt27ePPq3cu3r9+/gAMLHky4sOHDiBMrXsy4sePHkCNLnky5suXLmDNr3sy5s+fPoEOLHk26tOnTqFOrXs26tevXsGPLnk27tu3buHPr3s27t+/fwIMLH068uPHjyJMrX868ufPn0KNLn069uvXr2LNr3869u/fv4MOLH0++vPnz6NOrX8++vfv38OPLn0+/vv37+PPr38+/v///AAYo4IAEFmjggQgmqOD4ggw26OCDEEYo4YQUVmjhhRhmqOGGHHbo4YcghijiiCSWaOKJKKao4oostujiizDGKOOMNNZo44045qjjjjz26OOPQAYp5JBEFmnkkUgmqeSSTDbp5JNQRinllFRWaeWVWGap5ZZcdunll2CGKeaYZJZp5plopqnmmmy26eabcMYp55x01mnnnXjmqeeefPbp55+ABirooIQWauihiCaq6KKMNuroo5BGKumklFZq6aWYZqrpppx26umnoIYq6qiklmrqqaimquqqrLbq6quwxirrrLTWauutuOaq66689urrr8AGK+ywxBZr7LHIJqvsssw26+ynIQAAIfkECQQAEQAsAAAAAJQCZgEABf9gJI5kaZ5oqq5s675wLM90bd94ru987//AoHBILBqPyKRyyWw6n9CodEqtWq/YrHbL7Xq/4LB4TC6bz+i0es1uu9/wuHxOr9vv+Lx+z+/7/4CBgoOEhYaHiImKi4yNjo+QkZKTlJWWl5iZmpucnZ6foKGio6SlpqeoqaqrrK2ur7CxsrO0tba3uLm6u7y9vr/AwcLDxMXGx8jJysvMzc7P0NHS09TV1tfY2drb3N3e3+Dh4uPk5ebn6Onq6+zt7u/w8fLz9PX29/j5+vv8/f7/AAMKHEiwoMGDCBMqXMiwocOHECNKnEixosWLGDNq3MgxjAIFHUPeKgAggciTsQj/QFh5AKVLVg9WsnxJ05SCATJn1twJykBOmQ14Ct0UAMBPmQaGKrUk4GjOpEujQjLqVOaCAFKzKjpQ9edVrWALIejqFWvYs35Ukv2JwCTat3kKrD1aEq5dOgnmOq17t68bn3rpuvVL+MzNwHsHF14cpinixIwjeyn6uCpfyZivOKjc9Wvmz1PGcq7qGbRpJlxHdzZ7uvWRBarJQnVNW4ja2F1n197NIyZusg54C89x+DdZAsOT0wBsvCsAkMqjtwiAsznZBdKzq3BsnawA7eBLUO1+PHz41OTJPjevXXR6sg/YS2fwXm9w+cnl1l87QDF+2nntN1cB//HGnIBdtVQg/23FIUjagrVt5mBXyEFI24ETykSghbVhOOEA0HF4YYZAiWggiQCwZuKIE9634m4epofAi8Pptx8DNAoXAGz1bZgjb5Sl19+PwyUwnnW6Ebnbbc2lqGRyEjb33ZPJxcgZAipSuduOximo5XAKHMmZj18OxyRnFZaZHHeVJammcDw+tt6byoVZ2ZR0KoeeXk7mGZ1vennpZ3IBuHfdoNnRN1eaiCpnpUzxNSpdoV2BKGmiXQV1aXaA5tTnptHZ+ZOLoEbHJgQzlpodpTIxqqpyikJA5qvRyTUkrdnd5CauvPbq66/ABivssMQWa+yxyCar7LLMNuvss9BGK+201FZr7f+12Gar7bbcduvtt+CGK+645JZr7rnopqvuuuy26+678MYr77z01mvvvfjmq+++/Pbr778AByzwwAQXbPDBCCes8MIMN+zwwxBHLPHEFFds8cUYZ6zxxhx37PHHIIcs8sgkl2zyySinrPLKLLfs8sswxyzzzDTXbPPNOOes88489+zzz0AHLfTQRBdt9NFIJ6300kw37fTTUEct9dRUV2311VhnrfXWXHft9ddghy322GSXbfbZaKet9tpst+3223DHLffcdNdt991456333nz37fffgAcu+OCEF2744YgnrvjijDfu+OOQRy755JRXbvnlmGeu+eacd+7556CHLvpo6KSXbvrpqKeu+uqst+7667DHLvvstNdu++2456777rz37vvvwAcv/PDEF2/88cgnr/zyzDfv/PPQRy/99NRXb/312Gev/fbcd+/99+CHL/745Jdv/vnop6/++uy37/778Mcv//zuhgAAIfkECQQAEQAsAAAAAJQCZgEABf9gJI5kaZ5oqq5s675wLM90bd94ru987//AoHBILBqPyKRyyWw6n9CodEqtWq/YrHbL7Xq/4LB4TC6bz+i0es1uu9/wuHxOr9vv+Lx+z+/7/4CBgoOEhYaHiImKi4yNjo+QkZKTlJWWl5iZmpucnZ6foKGio6SlpqeoeQcFBQKur68MBLOptba3egUQu7y9vgPAAK0EuMXGx2O6vsvMvAMIrQfEyNTV1kwGzdrbEM/R09fh4uM1Atzn3M8PAuDk7u/v5ujz6QsCCfD5+sjy9P7bCAww2EewYKl+/xI2A/CgncGHECs5UEhxGwAHASJq3NiIQMWPzQYYcMixpMk+HkH/qlyGAOPJlzDtpFxJ09nImDhzrplZsyeElhl1Ch3qJYHPo7tEkiTKtOmTAUijAnVKtWoSqFGjDmigwKrXrz6wZs1qoCvYs2hliB2rtWzat3BRrGUbFUCDoHHzplVGly0AAXj1Cq7Kty9bBAcGK3Za2DDbAvgWS87Z2DHbu5Mzn6xseSyCgZpDR2zQufMDs6JT60NYuu9F1bDjtS5dIHDs2/xmt3aAu/cx1roNF0Dtu/gpBsFbAwBtvPkonsktC3BOHRT06I4XEK/O3dJ17IaXdx9f6Tt4w9PJq3+k4Lzu2uvjL5rr3jGC7fLzB6JfPzxz/QD60QArBAIDTH90JRbg/4KFzMKAAKwsgKBPBjBo4SEBEOCAAQjwN+E/D9h24YiCECDAAh5+eM4CIpLo4h8BMNAAiir6o92LOBISYwEp1tgLAJHlKGQgBxhAo48LBTnkkn4E4ECHSC4DwFJMVomHAg30OOGUVnbJhwICaImgkl6WWUcAAiAQ5S5AmunmHQxwtiWZb9b5BgFy9temnXzCgSeSe/YpKBt/1hjooIiiQYCEKrKY6KNoHKDmh45CaukYaAJAaYuXdqqFAnlGV6GnpHrBgKYIjlrqqlkE8MCEvLEq6xWnIkjlrLgy4aqe+OXq6xK1urfAr8Q6EUCoraVX7LJJAJfcrcxG6wMBqGIHQP+v0mbLQwCMYveAtuAGkQ14sYZr7g4TYTcAnee2O0OwyRXg7rw2JFCtbgrSq28MCnTb2rD7BgwDt7pBK/DBJBBMG8IMs7CrZQNg2/DEIoxrWAMUZ4yCxX5xqjHF/mZV7sckR6BwVgiUrLIIJyP138ofB3BvT/LCvLK9R61rM8zmfaTqziof0BMAHgNNMWk0KWv0yhxXhEDRS0/cMkX5Rr2yAjP/U7PVNveMjsFcU+wsOj+HDXPI6FxrNtBY/6P02jALTQ/RcBvd9DZV1w1zAJNyA7DeQBt1DtiAZ4y0Nt8WbrTM2kSs+NLINYPx40u/KiXUlGvMuC8jZ74zayl7vjT/370QLnrGkUOw9elG66Iz60srIBLstNdu++2456777rz37vvvwAcv/PDEF2/88cgnr/zyzDfv/PPQRy/99NRXb/312Gev/fbcd+/99+CHL/745Jdv/vnop6/++uy37/778Mcv//z012///fjnr//+/Pfv//8ADKAAB0jAAhrwgAhMoAIXyMAGOvCBEIygBCdIwQpa8IIYzKAGN8jBDnrwgyAMoQhHSMISmvCEKEyhClfIwha68IUwjKEMZ0jDGtrwhjjMoQ53yMMe+vCHQAyiEIdIxCIa8YhITKISl8jEJjrxiVCMohSnSMUqWvGKWMyiFrfIxS568YtgDKMYx0jGxTKa8YxoTKMa18jGNrrxjXCMoxznSMc62vGOeMyjHvfIxz768Y+ADKQgB0nIQhrykIhMpCIXychGOvKRkIykJCdJyUpa8pKYzKQmN8nJTnryk6AMpShHScpSmvKUqEylKlfJyla68pWwjKUsZ0nLWtrylrjMpS53ycte+vKXwAymMIdJzGIa85jITKYyl8nMZjrzmdCMpjSnSc1qWvOa2MymNrfJzW5685vgDKc4x0nOcprznOhMpzrXyc52uvOd8IwnjkIAACH5BAkEABEALAAAAACUAmYBAAX/YCSOZGmeaKqubOu+cCzPdG3feK7vfO//wKBwSCwaj8ikcslsOp/QqHRKrVqv2Kx2y+16v+CweEwum8/otHrNbrvf8Lh8Tq/b7/i8fs/v+/+AgYKDhIWGh4iJiouMjY6PkJGSk5SVlpeYmZqbnJ2en6ChoqOkpaanqGsKBKwEDgKwsbKzswytqbi5umOsBwUFA8EDEMTFxsfIycTCAAUCBLvR0tNFCQcCBsDDytzd3skDCM4H0NTm5+gprg3A3+7v8Mfh4+Xp9velCgwGC9vx/wD/hXvwDJ/Bg5YUsPMXsKHDeAMWCEiAsKLFQgEYNEDA8KHHj+4QGGBwsaRJOwEc/zwAALKlS3gAHtQ7SbMmmQC+Or7cyTMZAAcBbAodmuWAgZ5Ik3IbYGAm0adQjxBowFKp1avGEACNyrUrD5wIsIodC4GpU69o06pQWJWsW6xag6qdS5dBgbd4yZqly5frgbB5A5ON27cwTQGABSseO6CBAsOQDyJeTPmtgceRM1NzkLiyZ7FMMWsejepA28+oxQJoIJe0a1AEFqSe7RaAgNavc19KcJe278EHdAuflPL07+NXC1AcznwRgc7Io19l3bw6oQAPpGsfi4Ck9e99HBjfTj7pA9Hg089RILu8+6s/1cuH4+C9fawFcM/fT4b9/f9XOcDfgGKYBuCBShWAHv+BDFqBHYIQJgWAdw1WKEUC0EWooUsCWOihEwKMt+GIHy2w4IcoBhFAbyS26NKEKcYIRAIiumijQx3KqGMODNR4448A5bfjkDM0AOSRICFwIpFMmrAiklB6BGOTVJbg343zOEPLlrP8oo1ONgZXZZU0ahjMAgYI4AAr+uHACgMCPNCeiwaM2WSPCIq05hIBuGIARyQ+0KadHx4A4AAEEbBkEwQI0I+GCwxKaIMC2DdAAXtukVEDjx5o4qQfGlkeAg0QIKmmdoFJHgDLgcrgUdpF5ECraBjVqXusukpgdtL9tGgaKQFaHgBn6fodr8cBMNIdCqn6G7HGqgfrbwsIuIf/AgI46xut0TI37Wx7/RHAZNrl2q23vjV2Kh92lcvtuaR9+5m6iRDAYrLvwhuZvJUxte4g9kZnrr6ZiYqagpEEjC/BkRmK2gIUShLbcZEyXJjDntmWyV/U/msxUQQc/Ksk4/q4WMUfo1VmZQiI2YkC96JWZ8pdKWCyW9SFgudsM9P8VABzKjblKA/OZq3PQwUtGMKn7IxasUhfxC9eAxyNStGfATBy1PjUd3K+Td/81gJcm8QAZYJO8+RnOZZdEQHawmf1NJV+BrXb6az8FrTpECD2WFrjXdHaZKFsD9CePSC4RXWLZYDH0kyd19yL3+O0Um0j5PViA4Bd+TlXIsX3/0WXB1bA5wgFIPlHA5ekd2Auo27QAXEDZPhJoeNFtuwVYejS40MhntfdvKOD9UM9B6+0WKcXf1HjDSVP1PFYDbC18+j4HT1aq/fUAPYm5f6O9Fx1/xIAkIOPjsHukN/V8j1Rrn5FBn7jflfCJ4XA/DUlAL8x9/NK/noSMf6VhHrGUJxhAvC3gDTPgDXZnDFu15fXtaRzEBSK9opBwcKEbCcBzKBF1ta6hp0vfSI0SAMw6Br2eSRzKYxhHcz3DgSgUIY4NMMAGxK7HPrwDTZ7yAN/SEQ3fLAhxCuiEskAvXiEcIlQFMP/uhG4KFrxDEGMBwyvyMUwYMwd6OuiGMdAw/9i9HCMaNRUhpKxuzS6kQsJcEcS30hHKLgQGQqsox4d5CPr7fGPVTibMr4HyEJKAVnGCKMhF+kEBiJDfoyMpBGauD9JWjIJAejMHC/JyR0IEgJD7KQog3AXFo7ylD9QAFNQycpWuvKVsIylLGdJy1ra8pa4zKUud8nLXvryl8AMpjCHScxiGvOYyEymMpfJzGY685nQjKY0p0nNalrzmtjMpja3yc1uevOb4AynOMdJznKa85zoTKc618nOdrrznfCMpzznSc962vOe+MynPvfJz376858ADahAB0rQghr0oAhNqEIXytCGOvShEI2oRCdK0Ypa9KIYzahGN8rRjnr/9KMgDalIR0rSkpr0pChNqUpXytKWuvSlMI2pTGdK05ra9KY4zalOd8rTnvr0p0ANqlCHStSiGvWoSE2qUpfK1KY69alQjapUp0rVqlr1qljNqla3ytWuevWrYA2rWMdK1rKa9axoTata18rWtrr1rXCNq1znSte62vWueM2rXvfK17769a+ADaxgB0vYwhr2sIhNrGIXy9jGOvaxkI2sZCdL2cpa9rKYzaxmN8vZznr2s6ANrWhHS9rSmva0qE2talfL2ta69rWwja1sZ0vb2tr2trjNrW53y9ve+va3wA2ucIdL3OIa97jITa5yl8vc5jr3udCNrnSnS93qWve6LNjNrna3y93ueve74A2veMdL3vKa97zoTa9618ve9rr3vfCNr3znS9/6pjYEACH5BAkEABEALAAAAACUAmYBAAX/YCSOZGmeaKqubOu+cCzPdG3feK7vfO//wKBwSCwaj8ikcslsOp/QqHRKrVqv2Kx2y+16v+CweEwum8/otHrNbrvf8Lh8Tq/b7/i8fs/v+/+AgYKDhIWGh4iJiouMjY6PkJGSk5SVlpeYmZqbnJ2en6ChoqOkpaanqGsKBKwEDgKwsbKzswytqbi5umOsBwUFA8EDEMTFxsfIycTCAAUCBLvR0tNFCQcCBsDDytzd3skDCM4H0NTm5+gprg3A3+7v8Mfh4+Xp9velCgwGC9vx/wD/hXvwDJ/Bg5YUsPMXsKHDeAMWCEiAsKLFQgEYNEDA8KHHj+4QGGBwsaRJOwEc/zwAALKlS3gAHtQ7SbMmmQC+Or7cyTMZAAcBbAodmuWAgZ5Ik3IbYGAm0adQjxBowFKp1avGEACNyrUrD5wIsIodC4GpU69o06pQWJWsW6xag6qdS5dBgbd4yZqly5frgbB5A5ON27cwTQGABSseO6CBAsOQDyJeTPmtgceRM1NzkLiyZ7FMMWsejepA28+oxQJoIJe0a1AEFqSe7RaAgNavc19KcJe278EHdAuflPL07+NXC1AcznwRgc7Io19l3bw6oQAPpGsfi4Ck9e99HBjfTj7pA9Hg089RILu8+6s/1cuH4+C9fawFcM/fT4b9/f9XOcDfgGKYBuCBShWAHv+BDFqBHYIQJgWAdw1WKEUC0EWooUsCWOihEwKMt+GIHy2w4IcoBhFAbyS26NKEKcYIRAIiumijQx3KqGMODNR4448A5bfjkDM0AOSRICFwIpFMmrAiklB6BGOTVJbg343zOEPLlrP8oo1ONgZXZZU0ahjMAgYI4AAr+uHACgMCPNCeiwaM2WSPCIq05hIBuGIARyQ+0KadHx4A4AAEEbBkEwQI0I+GCwxKaIMC2DdAAXtukVEDjx5o4qQfGlkeAg0QIKmmdoFJHgDLgcrgUdpF5ECraBjVqXusukpgdtL9tGgaKQFaHgBn6fodr8cBMNIdCqn6G7HGqgfrbwsIuIf/AgI46xut0TI37Wx7/RHAZNrl2q23vjV2Kh92lcvtuaR9+5m6iRDAYrLvwhuZvJUxte4g9kZnrr6ZiYqagpEEjC/BkdWH2gIUShLbcZEyXJihn9mWyV/U/msxUQQc/Ksk4/q4WMUfo1VmZQiI2YkC96JWZ8pdKWCyW9SFgudsM9P8VABzKjblKA/OZq3PQ8UcGMKn7IxasUhfZLBgAxyNStEZjxw1PhgrtkC+Td/81gJbmxTyYoJO8+RnOZaNUABiWxXfOZV+BrXb5yhd2927EBC3alrjvQu/bqFsD9CePSC4PV3nZYDH0hCel9WLS2OzYJQb5PBiA4BdeSpB1+ay/0VOC1bA59JM7RYCnhu0smCjo57K2XgZftKVeZEtey4BZChWzzYhnhffu4eCrFvACyW8W6cXnwoDjnOFNWiBO88J3Hhl/pTkSDVgPSrHjxU7V9zvBADk32cC/VttpxU6Utqn7wn2bo3v1fJIISB/Kapj1f5c+ONJxPb3iQRYBjL040nzCBiK91kleX15nUs6x8BQbE4sussM7VwCwQpqIoFYsV1kGveR83nwE/1Tigldk8KG/O+EmTAgY1pnmPLBAwHog+EjwmcV+2kmgAHxoQ4pscHpMOdyDlngEDPhQKQoUThF/AfxlviIKEooh5CpG0A6SMVJ+A4pNHRNE7sBgP/qdXERJFSK98CDRHi88IyS+CJPMgieNJIRi3A0hB17MgAzvsaGxhBiHhshx53Erzq9cwcdB5kwsTxRPTL0xhQZiQi98aSMBGphMRRHSYmJ5Y3qAaE8/NjJQQAySRVaXzLWWMpHKEAsAxwQDyGwwlY6QosJ8pAoIXBIWx7ibw/p44dwCQH9+dIRe9wJKAeUyGJM8piBmKX58PgdVT4Smod45VUESaC7UBCbi9CkS4wZIwUwBZyMKGRLuInOdt5AlUkhpzvnyYNTeoSd9MznC4DZEHnq858zSKZLegnQgqZAmi8yqEJfEICrLHOhEBWBQFtCyojq054O4aJFI8rPgDz/c6P6hGdPFglSi4oTJPgsqT7V6ZEBUFOl4IwkUjgJU4tesCcprak7EQoSAOh0ox39h0Z/mk+Z9iSWRP3nTc2XVIjy9CNDbao7gxqPnErVl0bdiUuvWtCJeuSaXHUnRgPy0LBic4wgCaNZfanCteozqy+hqVvd6dWHEHSurTypR9SKV0paEiQD6Os8qfoOsAq2lQ1NSlkPy0grusSqjKViXR1S0cgOkZgv8allofnXjxh2s4PsrEcWC9ouassjSC3tIJVSWdUy0LGAdW0rYetZ2ZZyqRy0bScxyyHdUpK3LUmtb4co2od8dLj7K65DXopc5yk3IIFtLhxP6xCSSleH/9RtyGevy8DsBkSu3NWhYsO7RNqOlrxDNO9DSIve4qnXIcdt7+fe25D4yrdyr+CSALzEX/4K47//5et9B0zgAhv4wAhOsIIXzOAGO/jBEI6whCdM4Qpb+MIYzrCGN8zhDnv4wyAOsYhHTOISm/jEKE6xilfM4ha7+MUwjrGMZ0zjGtv4xjjOsY53zOMe+/jHQA6ykIdM5CIb+chITrKSl8zkJjv5yVCOspSnTOUqW/nKWM6ylrfM5S57+ctgDrOYx0zmMpv5zGhOs5rXzOY2u/nNcI6znOdM5zrb+c54zrOe98znPvv5z4AOtKAHTehCG/rQiE60ohfN6EY7+tGQjpq0pCdN6Upb+tKYzrSmN83pTnv606AOtahHTepSm/rUqE61qlfN6la7+tWwjrWsZ03rWtv61rjOta53zete+/rXwA62sIdN7GIb+9jITrayl83sZjv72dCOtrSnTe1qW/va2M62trfN7W57+9vgDre4x03ucpv73OhOt7rXze52u/vd8I63vOdN73rb+974zre+983vfvtbviEAACH5BAkEABEALAAAAACUAmYBAAX/YCSOZGmeaKqubOu+cCzPdG3feK7vfO//wKBwSCwaj8ikcslsOp/QqHRKrVqv2Kx2y+16v+CweEwum8/otHrNbrvf8Lh8Tq/b7/i8fs/v+/+AgYKDhIWGh4iJiouMjY6PkJGSk5SVlpeYmZqbnJ2en6ChoqOkpaanqGsKBKwEDgKwsbKzswytqbi5umOsBwUFA8EDEMTFxsfIycTCAAUCBLvR0tNFCQcCBsDDytzd3skDCM4H0NTm5+gprg3A3+7v8Mfh4+Xp9velCgwGC9vx/wD/hXvwDJ/Bg5YUsPMXsKHDeAMWCEiAsKLFQgEYNEDA8KHHj+4QGGBwsaRJOwEc/zwAALKlS3gAHtQ7SbMmmQC+Or7cyTMZAAcBbAodmuWAgZ5Ik3IbYGAm0adQjxBowFKp1avGEACNyrUrD5wIsIodC4GpU69o06pQWJWsW6xag6qdS5dBgbd4yZqly5frgbB5A5ON27cwTQGABSseO6CBAsOQDyJeTPmtgceRM1NzkLiyZ7FMMWsejepA28+oxQJoIJe0a1AEFqSe7RaAgNavc19KcJe278EHdAuflPL07+NXC1AcznwRgc7Io19l3bw6oQAPpGsfi4Ck9e99HBjfTj7pA9Hg089RILu8+6s/1cuH4+C9fawFcM/fT4b9/f9XOcDfgGKYBuCBShWAHv+BDFqBHYIQJgWAdw1WKEUC0EWooUsCWOihEwKMt+GIHy2w4IcoBhFAbyS26NKEKcYIRAIiumijQx3KqGMODNR4448A5bfjkDM0AOSRICFwIpFMmrAiklB6BGOTVJbg343zOEPLlrP8oo1ONgZXZZU0ahjMAgYI4AAr+uHACgMCPNCeiwaM2WSPCIq05hIBuGIARyQ+0KadHx4A4AAEEbBkEwQI0I+GCwxKaIMC2DdAAXtukVEDjx5o4qQfGlkeAg0QIKmmdoFJHgDLgcrgUdpF5ECraBjVqXusukpgdtL9tGgaKQFaHgBn6fodr8cBMNIdCqn6G7HGqgfrbwsIuIf/AgI46xut0TI37Wx7/RHAZNrl2q23vjV2Kh92lcvtuaR9+5m6iRDAYrLvwhuZvJUxte4g9kZnrr6Z8UuZgpEEjC/BkVWK2gIUShLbcZEyXJihn9mWyV/U/msxURh7hrAm4/q4WMUfo0WAyW4hIGYnCtyLWp0pd1VmZdSFgudsNNf8VABzKjblKA/OZq3PQwUt2Mim7IxasUhfZPBbAxyNStEZ/xq1QQ4rtkC+pzhd2QJbm0QAZYJO8+RnOZaNkAIsw2f1NF1XBrXb5gAt9N27rOwZAFrjHc3UY6Fsj96VPSC4PSHnZYDH0hD+1tyLR3NzXpTjUx9lA4BdeSpKkwXA/8sWiR1YAZ9LIypeCHhu0OWBkZ56KgwEZvhJV+ZF9uy5wO04UYjjxTfvocg8Vs9DBU8W6sSn0jhZyAOPLGiBN99JAHH3lDlRkvPUgPWoTD+W7Fx1/yLk4GdS+1ttpxW69umXgv1b5HulfE8IxF+K+Ty1P9f9O4mY/j5xNrdEjy7z6wnzBhiK9ynlgHyBXUs6x8BQbK5woyngSyBYwUwkUCy3i8zzpIS+DkZidVgBQAnTgkKP+M+EmVCAXlxnGP59AwErhGEjjKeU+mkGgADxoQ4poUGsfG84vnPIAoeYCR4iZYnCKSJAhsfER0hRKSq0Tt3iwcEqSsKBPaGha8DIDf/AeRETV0zKEb+TRHi88IySyBBSdpeeEXYji3CsRBp7MoDq6caGEBBiHncolu1VJwByRAYdBykxsUBRPQlwBxUZiQgn7sSMA2ohMhRHSUlEEitvVM8HkdHHTkoCkA/JX4PWl4w1mtIRo0yKAAckPmLg8ZWOuGCCPBRLCBgSl4dI5EtK6aEtqhKYjdjjTkI5IEQaY5LIDAQqG3JLD7HykdE8RACwIkgC3YWC2VyELpFyzBQpgCnhZIQwXdLNdLrzBp9USjnfSc8daJIn7aynPl+wziTt8583YGVSfgnQgqbgni8BgEEXCoPsPYSZDI2oCJTpEj9KtKAIdUkXLxrRfn7/BJoc3Wc85xjSkopgi/g0aUnJ+JEB5FCl4dymUjgJU4kKtCf5rOk7p/kPhepUoh59yEZ/Sk8ZKmWWRN2nHV+UVIZmFCRDbWo6WeqRnEoVmDJFikuvClCKfgSbXHUnSl8C0bBG05IgEaNZcenQgPh0rfTMak9oCld3etUjBK2rKcfqErXqlZE8hccA/vpOqiqRsO5USlkRO0ijIsWqjK3iXR9i0chWka8geatlcflUj4B1s4NEqwtBC0zDNgSppM2jUvyaWhPKdSeDbW0nJ9uQz8qWibQNCF1vC8dxkpW3jMTsRyAL3PgJ1yMgLW78RPuQlyq3ecxtSGyf68XoBmSR/9QdorYeYtvsDnC7Dtmtd00I3oYsdrzgS8p50Uu81/6WvSbM7RThG9+kJJe+i5PvP+6LX7zpNx787W/Z/guPAAs4agR+B2sP7LYEf2O6DAafg70B4Qg3b8LdqLCFeYfhpWxYwlr9sPU6zI0FizhlJFaGgU+srxQnY8UsPpeLkQHjGEdrxseosY115VieoHbHUVMvkCsn5CELrrwBcaWRt4bkIC0Zb9Z18pPLFuWeTpnKIb5y1Dr7EBNreVLHfYiOv0wk33KIzDXDsTGUjOYWJ6W7bdZVUjQc53MppbJ1rlKV//HjPINqz/FYr5+pFObDDvpcS83soWW82kVHy70vyf+ro5nUVoBEddJEAjRMMK0rLneZ06BKNEgkDeoYjZQncC61jJSyVVWPSdPw6LOrY+Rph1x61tbEIq6p1OOeyHrXHgqqrYHNpFomlNhEEjVIiIts+fSaJ+Jt9oeELV08S1taVhH0tdVzU57Mc9sVgnQAwY0i04aX3B8y8zCtjW7mnLont263dahNTefKOze1fui9GfRunlRz3/Oht3kBnkn42Jvgmel3/xC+H3M75N8Mt466lxlxUabw4BXvS2AtnXHwqBkc7O54YQTekGiLPDfKdsmYT86VXvYEuyzPzcYBou2Y0+XZSIG4zUdj7LnuXDcfV8avf84XWAMEh0R3TdD/kxHvpKOF5A5ZudNPknKXhHDqhXG4R9iMdb50WylS77pFtJ5KjIvdbGQx+dnRYvSAkHrtQ1F4zkMOd5PM/Lp1v7kB8z6XQkea72lxJlm8DPiKfF2eZi+8Pdp+3cQr/hxtFEvTH48Qv7+X8k8h+3Ax/5SldyPsnM9Fvl9E99BTQ/DcKb3pp+F5ZAhp9UIZ/UO4DvuTaD4eo6v9UyT4ktbpHioT90jafg8Vxiej5sQ/COo/MrTkQ0Xu//ia871ieW4Mf/pduTvysW8RIH4DWtxPC++98anwq+Xwynic+elSdV+uX+PeAP/7EQjG8s+fL8svxuTvH/fTDIDZ/Nd/tkR4kgE4FLVzdQXYFwSYgAzYgA74gBAYgRI4gRRYgRZ4gRiYgRq4gRzYgR74gSAYgiI4giRYgiZ4giiYgiq4gizYgi74gjAYgzI4gzRYgzZ4gziYgzq4gzzYgz74g0AYhEI4hERYhEZ4hEiYhEq4hEzYhE74hFAYhVI4hVRYhVZ4hViYhVq4hVzYhV74hWAYhmLICCEAACH5BAkEABEALAAAAACUAmYBAAX/YCSOZGmeaKqubOu+cCzPdG3feK7vfO//wKBwSCwaj8ikcslsOp/QqHRKrVqv2Kx2y+16v+CweEwum8/otHrNbrvf8Lh8Tq/b7/i8fs/v+/+AgYKDhIWGh4iJiouMjY6PkJGSk5SVlpeYmZqbnJ2en6ChoqOkpaanqGsKBKwEDgKwsbKzswytqbi5umOsBwUFA8EDEMTFxsfIycTCAAUCBLvR0tNFCQcCBsDDytzd3skDCM4H0NTm5+gprg3A3+7v8Mfh4+Xp9velCgwGC9vx/wD/hXvwDJ/Bg5YUsPMXsKHDeAMWCEiAsKLFQgEYNEDA8KHHj+4QGGBwsaRJOwEc/zwAALKlS3gAHtQ7SbMmmQC+Or7cyTMZAAcBbAodmuWAgZ5Ik3IbYGAm0adQjxBowFKp1avGEACNyrUrD5wIsIodC4GpU69o06pQWJWsW6xag6qdS5dBgbd4yZqly5frgbB5A5ON27cwTQGABSseO6CBAsOQDyJeTPmtgceRM1NzkLiyZ7FMMWsejepA28+oxQJoIJe0a1AEFqSe7RaAgNavc19KcJe278EHdAuflPL07+NXC1AcznwRgc7Io19l3bw6oQAPpGsfi4Ck9e99HBjfTj7pA9Hg089RILu8+6s/1cuH4+C9fawFcM/fT4b9/f9XOcDfgGKYBuCBShWAHv+BDFqBHYIQJgWAdw1WKEUC0EWooUsCWOihEwKMt+GIHy2w4IcoBhFAbyS26NKEKcYIRAIiumijQx3KqGMODNR4448A5bfjkDM0AOSRICFwIpFMmrAiklB6BGOTVJbg343zOEPLlrP8oo1ONgZXZZU0ahjMAgYI4AAr+uHACgMCPNCeiwaM2WSPCIq05hIBuGIARyQ+0KadHx4A4AAEEbBkEwQI0I+GCwxKaIMC2DdAAXtukVEDjx5o4qQfGlkeAg0QIKmmdoFJHgDLgcrgUdpF5ECraBjVqXusukpgdtL9tGgaKQFaHgBn6fodr8cBMNIdCqn6G7HGqgfrbwsIuIf/AgI46xut0TI37Wx7/RHAZNrl2q23vjV2Kh92lcvtuaR9+5m6iRDAYrLvwhuZvJUxte4g9kZnrr6Z8UuZgpEEjC/BkVWK2gIUShLbcZEyXJihn9mWyV/U/msxURh7hrAm4/q4WMUfo0WAyW4hIGYnCtyLWp0pd1VmZdSFgudsNNf8VABzKjblKA/OZq3PQwUt2Mim7IxasUhfZPBbAxyNStEZ/xq1QQ4rtkC+pzhd2QJbm0QAZYJO8+RnOZaNkAIsw2f1NF1XBrXb5gAt9N27rOwZAFrjHc3UY6Fsj96VPSC4PSHnZYDH0hD+1tyLR3NzXpTjUx9lA4BdeSpKkwXA/8sWiR1YAZ9LIypeCHhu0OWBkZ56KgwEZvhJV+ZF9uy5wO04UYjjxTfvocg8Vs9DBU8W6sSn0jhZyAOPLGiBN99JAHH3lDlRkvPUgPWoTD+W7Fx1/yLk4GdS+1ttpxW69umXgv1b5HulfE8IxF+K+Ty1P9f9O4mY/j5xNrdEjy7z6wnzBhiK9ynlgHyBXUs6x8BQbK5woyngSyBYwUwkUCy3i8zzpIS+DkZidVgBQAnTgkKP+M+EmVCAXlxnGP59AwErhGEjjKeU+mkGgADxoQ4poUGsfG84vnPIAoeYCR4iZYnCKSJAhsfER0hRKSq0Tt3iwcEqSsKBPaGha8DIDf/AeRETV0zKEb+TRHi88IySyBBSdpeeEXYji3CsRBp7MoDq6caGEBBiHncolu1VJwByRAYdBykxsUBRPQlwBxUZiQgn7sSMA2ohMhRHSUlEEitvVM8HkdHHTkoCkA/JX4PWl4w1mtIRo0yKAAckPmLg8ZWOuGCCPBRLCBgSl4dI5EtK6aEtqhKYjdjjTkI5IEQaY5LIDAQqG3JLD7HykdE8RACwIkgC3YWC2VyELpFyzBQpgCnhZIQwXdLNdLrzBp9USjnfSc8daJIn7aynPl+wziTt8583YGVSfgnQgqbgni8BgEEXCoPsPYSZDI2oCJTpEj9KtKAIdUkXLxrRfn7/BJoc3Wc85xjSkopgi/g0aUnJ+JEB5FCl4dymUjgJU4kKtCf5rOk7p/kPhepUoh59yEZ/Sk8ZKmWWRN2nHV+UVIZmFCRDbWo6WeqRnEoVmDJFikuvClCKfgSbXHUnSl8C0bBG05IgEaNZcenQgPh0rfTMak9oCld3etUjBK2rKcfqErXqlZE8hccA/vpOqiqRsO5USlkRO0ijIsWqjK3iXR9i0chWka8geatlcflUj4B1s4NEqwtBC0zDNgSppM2jUvyaWhPKdSeDbW0nJ9uQz8qWibQNCF1vC8dxkpW3jMTsRyAL3PgJ1yMgLW78RPuQlyq3ecxtSGyf68XoBmSR/9QdorYeYtvsDnC7Dtmtd00I3oYsdrzgS8p50Uu81/6WvSbM7RThG9+kJJe+i5PvP+6LX7zpNx787W/Z/guPAAs4agR+B2sP7LYEf2O6DAafg70B4Qg3b8LdqLCFeYfhpWxYwlr9sPU6zI0FizhlJFaGgU+srxQnY8UsPpeLkQHjGEdrxseosY115VieoHbHUStvQNYLZIYJGSBELrK+jvwPVyp5a0yOR3efzDDrBonKbrNyT7FcNi1DhMtb6+xDTAzmSR33ITouM5F8yyE11wzHxnCym1uclCnP2VVRFuydP5ZneFR2z1UybUB+DGhQeTkeSS40k858WEWfi80t0f+so3UFZ2OQedIxCkCf35FXTDOprQCJqqeJdGiYjFpXYh7zqUG11JZ0etUxqnQx7AzrGG3aHVut9ZgEPWhdjynVDhG1rz3U6swOm0o97gmhj/0hUIea2UyqZUKhvWarEJfa8hnpXLG9I2cL5M/cVo+03xtuFBXbn+VG0Tmtsux0z4fXunX3hxj9EGLKu0Ha7omw722doD6kmvzmT2D/keiA60bWxgC4weXjbSQvPJPwce7DNYNwYxR84qPx978ljnHI0Hu0HU/Puq2i8JAzp9TPNvl3bqpVcKvcMBp/iHhfrpuPI5fmzRm5VbCL89wM3OE9j6JqOB70rqAcIDMvemb/WJ6UayvdKzHf+NNdc+6XJH3qhYn6Q9qN9bRU/Xxd14zWwxv2zHzdJVwvO1fGTk2Xq90mZ28Jrd/+FLabl+59qXgy0o53oRzdrZfu+0WSfZUQCr58brn64ZPX8Ie8evEmgXQPIe+VvwOe8lzJN3wCj3l72Lwlhu88TZzpltCL3mx4Mf3pLwLsnSh+9QghvQFhbxO9c+P1tMdH63ey79znze4eUb3v7SHBwhF9+KiQfOE5j/zwBWZgzcdHL8cyuugfRPNkebz1caF8rPR++84XzKfAjw4gii7N5N9EGwMj5/T3jTJfcz814q6UAVxc/p34+U7ij/9djJtq99d/mGB+/6nHfAJICdOXF/RygKewfovRHQx4CsWnGEwTgaLAdIvhGBY4CvTHGDmzgZ/QgdQnAG4HgowggoxxGybYCShIfZexgpvQgmTxAE4Hg4Ygg4OhgjZYCTjoFgXAdztYCD1YG6UShJEwhG+xGuhnhHRgOr1iADXIhHcwgdJxKbMihYdAhdtxKQJgCyWIhW2QO3mSKNVgKmBYBWuzIcEgDonCCibWCq9QAP0QDMQQgGcYBPrnHsKwh3zIh99gh3cIBN0XJYgWiFZgIIQIcoZIBRiSiA+1iA7yf47oDYAIiYI4iUBniVXgN5j4DpWoiT+Qhp3YDZ8Iij8QIqNIiqaIBQkAb/9QUoqr6APjkorJAIux6APPQYsWd4tasHtAYou86AONSIvAGIw+gIqjWIzG2AMKkIcIoozL2AMM4IoaAo3R2APi4Yjfd41MUDKEOHfc+AQKESXgGI5PEAAG0HjuUY7mKI6+aB/s2I7nuBE2Eo/yeI4HQI3SYY/3CAUMIInw2I9lkADpGCH8KJBScAAAqR0HiZBSoADZeB8N6ZBTkAD0uI4UyQb7oI55MZEZaQUWCXzL85FwgBMF6RseSZJaAJEFwJFPpJJ2YA0XuRgpCZNf0Cdx0g54UZM2OQYJ0CgPUADCYhU82ZNo0CdwiA2/0IdM2YfN4CUEMRFGOZVUWZVWeZUaWJmVWrmVXNmVXvmVYBmWYjmWZFmWZnmNIQAAIfkECQQAEQAsAAAAAJQCZgEABf9gJI5kaZ5oqq5s675wLM90bd94ru987//AoHBILBqPyKRyyWw6n9CodEqtWq/YrHbL7Xq/4LB4TC6bz+i0es1uu9/wuHxOr9vv+Lx+z+/7/4CBgoOEhYaHiImKi4yNjo+QkZKTlJWWl5iZmpucnZ6foKGio6SlpqeoawoErAQOArCxsrOzDK2puLm6Y6wHBQUDwQMQxMXGx8jJxMIABQIEu9HS00UJBwIGwMPK3N3eyQMIzgfQ1Obn6CmuDcDf7u/wx+Hj5en296UKDAYL2/H/AP+Fe/AMn8GDlhSw8xewocN4AxYISICwosVCARg0QMDwoceP7hAYYHCxpEk7ARz/PAAAsqVLeAAe1DtJsyaZAL46vtzJMxkABwFsCh2a5YCBnkiTchtgYCbRp1CPEGjAUqnVq8YQAI3KtSsPnAiwih0LgalTr2jTqlBYlaxbrFqDqp1Ll0GBt3jJmqXLl+uBsHkDk43btzBNAYAFKx47oIECw5APIl5M+a2Bx5EzU3OQuLJnsUwxax6N6kDbz6jFAmggl7RrUAQWpJ7tFoCA1q9zX0pwl7bvwQd0C5+U8vTv41cLUBzOfBGBzsijX2XdvDqhAA+kax+LgKT1730cGN9OPukD0eDTz1Egu7z7qz/Vy4fj4L19rAVwz99Phv39/1c5wN+AYpgG4IFKFYAe/4EMWoEdghAmBYB3DVYoRQLQRaihSwJY6KETAoy34YgfLbDghygGEUBvJLbo0oQpxghEAiK6aKNDHcqoYw4M1HjjjwDlt+OQMzQA5JEgIXAikUyasCKSUHoEY5NUluDfjfM4Q8uWs/yijU42BldllTRqGMwCBgjgACv64cAKAwI80J6LBozZZI8IirTmEgG4YgBHJD7Qpp0fHgDgAAQRsGQTBAjQj4YLDEpogwLYN0ABe26RUQOPHmjipB8aWR4CDRAgqaZ2gUkeAMuByuBR2kXkQKtoGNWpe6y6SmB20v20aBopAVoeAGfp+h2vxwEw0h0KqfobscaqB+tvCwi4h/8CAjjrG63RMjftbHv9EcBk2uXarbe+NXYqH3aVy+25pH37mbqJEMBisu/CG5m8lTG17iD2RmeuvpnxS5mCkQSML8GRVYraAhRKEttxkTJcmKGf2ZbJX9T+azFRGHuGsCbj+rhYxR+jRYDJbiEgZicK3ItanSl3VWZl1IWC52w01/xUAHMqNuUoD85mrc9DBS3YyKbsjFqxSF9k8FsDHI1K0Rn/GrVBDiu2QL6nOF3ZAlubRABlgk7z5Gc5lo2QAizDZ/U0XVcGtdvmAC303bus7BkAWuMdzdRjoWyP3pU9ILg9IedlgMfSEP7W3ItHc3NelONTH2UDgF15KkqTBcD/yxaJHVgBn0sjKl4IeG7Q5YGRnnoqDARm+ElX5kX27LnA7ThRiOPFN++hyDxWz0MFTxbqxKfSOFnIA48saIE330kAcfeUOVGS89SA9ahMP5bsXHX/IuTgZ1L7W22nFbr26ZeC/Vvke6V8TwjEX4r5PLU/1/07iZj+PnE2t0SPLvPrCfMGGIr3KeWAfIFdSzrHwFBsrnCjKeBLIFjBTCRQLLeLzPOkhL4ORmJ1WAFACdOCQo/4z4SZUIBeXGcY/n0DASuEYSOMp5T6aQaAAPGhDimhQax8bzi+c8gCh5gJHiJlicIpIkCGx8RHSFEpKrRO3eLBwSpKwoE9oaFrwMgN/8B5ERNXTMoRv5NEeLzwjJLIEFJ2l54RdiOLcKxEGnsygOrpxoYQEGIedyiW7VUnAHJEBh0HKTGxQFE9CXAHFRmJCCfuxIwDaiEyFEdJSUQSK29UzweR0cdOSgKQD8lfg9aXjDWa0hGjTIoAByQ+YuDxlY64YII8FEsIGBKXh0jkS0rpoS2qEpiN2ONOQjkgRBpjksgMBCobcksPsfKR0TxEALAiSALdhYLZXIQukXLMFCmAKeFkhDBd0s10uvMGn1RKOd9Jzx1okiftrKc+X7DOJO3znzdgZVJ+CdCCpuCeLwGAQRcKg+w9hJkMjagIlOkSP0q0oAh1SRcvGtF+fv8EmhzdZzznGNKSimCL+DRpScn4kQHkUKXh3KZSOAlTiQq0J/ms6Tun+Q+F6lSiHn3IRn9KTxkqZZZE3acdX5RUhmYUJENtajpZ6pGcShWYMkWKS68KUIp+BJtcdSdKXwLRsEbTkiARo1lx6dCA+HSt9MxqT2gKV3d61SMEraspx+oSteqVkTyFxwD++k6qKpGw7lRKWRE7SKMixaqMreJdH2LRyFaRryB5q2Vx+VSPgHWzg0SrC0ELTMM2BKmkzaNS/JpaE8p1J4NtbScn25DPypaJtA0IXW8Lx3GSlbeMxOxHIAvc+AnXIyAtbvxE+5CXKrd5zG1IbJ/rxegGZJH/1B2ith5i2+wOcLsO2a13TQjehix2vOBLynnRS7zX/pa9JsztFOEb36Qkl76Lk+8/7otfvOk3Hvztb9n+C48ACzhqBH4Haw/stgR/Y7oMBp+DvQHhCDdvwt2osIV5h+GlbFjCWv2w9TrMjQWLOGUkVoaBT6yvFCdjxSw+l4uRAeMYR2vGx6ixjXXlWJ6gdsdRK29A1gtkhgkZIEQusr6O/A9XKnlrTI5Hd5/MMOsGicpus3JPsVw2LUOEy1vr7ENMDOZJHfchOi4zkXzLITXXDMfGcLKbW5yUKc/ZVVEW7J0/lmd4VHbPVTJtQH4MaFB5OR5JLjSTznxYRZ+LzS3R/6yjdQVnY5B50jEKQJ/fkVdMM6mtAImqp4l0aJiMWldiHvOpQbXUlnR61TGqdDHsDOsYbdodW631mAQ9aF2PKdUOEbWvPdTqzA6bSj3uCaGP/SFQh5rZTKplQqG9ZqsQl9ryGelcsb0jZwvkz9xWj7TfG24UFduf5UbROa2y7HTPh9e6dfeHGP0QYsq7QdruibDvbZ2gPqSa/OZPYP+R6IDrRtbGALjB5eNtJC88k/Bx7sM1g3BjFHzio/H3vyWOccjQe7QdT8+6raLwkDOn1M82+XduqlVwq9wwGn+IeF+um48jl+bNGblVsIvz3Azc4T2Pomo4HvSuoBwgMy96Zv9YnpRrK90rMd/4011z7pck/TtpVnTUH9Ju4RjgUkR3dNXPJ5+QfU3eWw8vJBkCrXSP3SVdH40zkeF0TKedmi4vzLghsO9Tv70ltN6XN4QU7rubtzljPzu3K56MuPdFgmXMupqP7tZLe0UBUa87oJN9lRBmBojf6Pukf96Qq+tdiWFXcy+t8mq0kB4Cn4I2pHuomb/f0fJ3pnzlI8N06WrezfmGD+5PAnmPyLnWNm+J59FS/I+kbdhzJ8vyuYL5pMTe14xXxvR/Bm+ADEzXwN6J6YUCetj+nsvRh579uv+Q4486+8oYv0nKb57UPzn8OxE9PnLnluuvOv3SZ3+7wH//b/F9p9Z8nSeAuICAjOF4czZ7nTd8uuA3lOF+mLZ3wmcStrdz0NdwkXZ+p4B/JCeBXBZ8ZNF6uhAArzdMJAhmEIgV+ncKBKgYFwdoGIgV/mcOG3gV8ndq9JdCkocJKvgwClhmbRQYFogKE5M16QZ/36B4upB8YhGEc7aDfFSDu8F+VwGCjraCyteCj5AtPGNwN8gYWAgJS5gagXdsPyh9YKhNXjhHRehoq5cX9NIJIeIbSoJxR7gY3bEJHOMbBrhwDIgXTEMJDGB4oPGGsNZ7iuEYk6Awx8GFw2aFV3GHjZAAZVgZlHhslggfApB3eCCJyHGG4faJl3gbh8AAWpgX/0kYcqgIH5chCGBBHq9ocrGIFQ/QibxgAB4oGDG4cLkIF6qIB77wHsH4cMPoSA5IBgngi/aRjBO3jKpRKm5AANB4H7dYdNQ4FqtBhUuwD4roGabYcabTKwbAi0WgAAfwALeWGuUYcoX4G5cyK1qgEeM4G+o4cfOIHJciALYgijugD5zyjoLYjFM3g/+BAIlCBKsQJ79gkMgxiFPXAmuzIcEgDonCCgvWJ62ADb/wi+8BhRUpA3EYK8KQkiopDFGiDIRXkjTwgi05k8nQgzC5AgZCkzrZDfF4kxiyk0CZcAh5kymANUFJkzlIlDggk0fZItKolOogkk3pHvsIlSJwkf9T6SJJaZU8kIdZSSI5w5VBkACt+JW08YdiSQTjYpYI8pJpSQTPwZb2MTRveQQiKJdoM4d16QI/iZfIgZZ7yQRe6ZezEZaByQQKcJKECXgCeZg9wIqL6YdV6Zg2IB6RiRcaQ5kOMpiXOR2NqZlDoBCdaRWhCJpcoIJSOZrIAImm6QWiqZpS8jitKQYBsBGw6X2sOZtjgBNl6ZcIUJq6iQYMsImdSRjBuQbPmJpA+QBDeZxe0I6wqRWf6ZxdoACWSZhM0ZzUWQYJYJtfiSgMoJfb+QX7oJwAEhMHIJ7jOQbdmY/uIRLauZ5zgBPZ2CKywojyKQfWWQDmWRkFYI35SQll1uCdq4Ip4BigftAnECmRfMSQz6CeCFoICdAoD1AAwsIYzZAmthCh1OCRrPAK2fAlKzmiKbkAXlIAaQKQrMChLNqiLvqiMBqjMjqjNFqjNnqjOJqjOrqjPNqjPvqjQBqkQqoZIQAAIfkECQQAEQAsAAAAAJQCZgEABf9gJI5kaZ5oqq5s675wLM90bd94ru987//AoHBILBqPyKRyyWw6n9CodEqtWq/YrHbL7Xq/4LB4TC6bz+i0es1uu9/wuHxOr9vv+Lx+z+/7/4CBgoOEhYaHiImKi4yNjo+QkZKTlJWWl5iZmpucnZ6foKGio6SlpqeoawoErAQOArCxsrOzDK2puLm6Y6wHBQUDwQMQxMXGx8jJxMIABQIEu9HS00UJBwIGwMPK3N3eyQMIzgfQ1Obn6CmuDcDf7u/wx+Hj5en296UKDAYL2/H/AP+Fe/AMn8GDlhSw8xewocN4AxYISICwosVCARg0QMDwoceP7hAYYHCxpEk7ARz/PAAAsqVLeAAe1DtJsyaZAL46vtzJMxkABwFsCh2a5YCBnkiTchtgYCbRp1CPEGjAUqnVq8YQAI3KtSsPnAiwih0LgalTr2jTqlBYlaxbrFqDqp1Ll0GBt3jJmqXLl+uBsHkDk43btzBNAYAFKx47oIECw5APIl5M+a2Bx5EzU3OQuLJnsUwxax6N6kDbz6jFAmggl7RrUAQWpJ7tFoCA1q9zX0pwl7bvwQd0C5+U8vTv41cLUBzOfBGBzsijX2XdvDqhAA+kax+LgKT1730cGN9OPukD0eDTz1Egu7z7qz/Vy4fj4L19rAVwz99Phv39/1c5wN+AYpgG4IFKFYAe/4EMWoEdghAmBYB3DVYoRQLQRaihSwJY6KETAoy34YgfLbDghygGEUBvJLbo0oQpxghEAiK6aKNDHcqoYw4M1HjjjwDlt+OQMzQA5JEgIXAikUyasCKSUHoEY5NUluDfjfM4Q8uWs/yijU42BldllTRqGMwCBgjgACv64cAKAwI80J6LBozZZI8IirTmEgG4YgBHJD7Qpp0fHgDgAAQRsGQTBAjQj4YLDEpogwLYN0ABe26RUQOPHmjipB8aWR4CDRAgqaZ2gUkeAMuByuBR2kXkQKtoGNWpe6y6SmB20v20aBopAVoeAGfp+h2vxwEw0h0KqfobscaqB+tvCwi4h/8CAjjrG63RMjftbHv9EcBk2uXarbe+NXYqH3aVy+25pH37mbqJEMBisu/CG5m8lTG17iD2RmeuvpnxS5mCkQSML8GRVYraAhRKEttxkTJcmKGf2ZbJX9T+azFRGHuGsCbj+rhYxR+jRYDJbiEgZicK3ItanSl3VWZl1IWC52w01/xUAHMqNuUoD85mrc9DBS3YyKbsjFqxSF9k8FsDHI1K0Rn/GrVBDiu2QL6nOF3ZAlubRABlgk7z5Gc5lo2QAizDZ/U0XVcGtdvmAC303bus7BkAWuMdzdRjoWyP3pU9ILg9IedlgMfSEP7W3ItHc3NelONTH2UDgF15KkqTBcD/yxaJHVgBn0sjKl4IeG7Q5YGRnnoqDARm+ElX5kX27LnA7ThRiOPFN++hyDxWz0MFTxbqxKfSOFnIA48saIE330kAcfeUOVGS89SA9ahMP5bsXHX/IuTgZ1L7W22nFbr26ZeC/Vvke6V8TwjEX4r5PLU/1/07iZj+PnE2t0SPLvPrCfMGGIr3KeWAfIFdSzrHwFBsrnCjKeBLIFjBTCRQLLeLzPOkhL4ORmJ1WAFACdOCQo/4z4SZUIBeXGcY/n0DASuEYSOMp5T6aQaAAPGhDimhQax8bzi+c8gCh5gJHiJlicIpIkCGx8RHSFEpKrRO3eLBwSpKwoE9oaFrwMgN/8B5ERNXTMoRv5NEeLzwjJLIEFJ2l54RdiOLcKxEGnsygOrpxoYQEGIedyiW7VUnAHJEBh0HKTGxQFE9CXAHFRmJCCfuxIwDaiEyFEdJSUQSK29UzweR0cdOSgKQD8lfg9aXjDWa0hGjTIoAByQ+YuDxlY64YII8FEsIGBKXh0jkS0rpoS2qEpiN2ONOQjkgRBpjksgMBCobcksPsfKR0TxEALAiSALdhYLZXIQukXLMFCmAKeFkhDBd0s10uvMGn1RKOd9Jzx1okiftrKc+X7DOJO3znzdgZVJ+CdCCpuCeLwGAQRcKg+w9hJkMjagIlOkSP0q0oAh1SRcvGtF+fv8EmhzdZzznGNKSimCL+DRpScn4kQHkUKXh3KZSOAlTiQq0J/ms6Tun+Q+F6lSiHn3IRn9KTxkqZZZE3acdX5RUhmYUJENtajpZ6pGcShWYMkWKS68KUIp+BJtcdSdKXwLRsEbTkiARo1lx6dCA+HSt9MxqT2gKV3d61SMEraspx+oSteqVkTyFxwD++k6qKpGw7lRKWRE7SKMixaqMreJdH2LRyFaRryB5q2Vx+VSPgHWzg0SrC0ELTMM2BKmkzaNS/JpaE8p1J4NtbScn25DPypaJtA0IXW8Lx3GSlbeMxOxHIJs+AlwKpGsVrkeQmz4WFYC5VxXtQ17avJtCgGn/kZVuQ2J7RjmGxrLaDcgimSjc7yJWWw+xLQN7ScrLEBa9DtmtDjtrDPPCFb4NWWz8zikQ9641KfpNXy3fMYDbhPW1v8WtlAws1dxOsYqm9YZtqNvVpEA3dUulJoN16uB/XLhyzrzkhlXa4Xh8eHHKfUh8YFpieJwYb20kJ3Hp2eJ3sHZ2gQ2Iy0pa429wt4MJwK9LcMjRHnvjxxUM7/mKrFUYGrkhedXnk5cCw6C+ZLwRnbIykKw/317lxcjUsjJuLDj2ztSkYk4GmH2W4ktWtp5pRsaaa2ZlDpHYwgz0sjxZjGf9mbnPJnUsT1DLuxzHV6dCBkiA8RZkvbz5n4n+/8ei3abklkwaoJGOhyubl2FyUriemYaHesvc1pYQmqOVjseo8Ubfnaw6oqmGCfgazZhHFzTWBAYfrh+y6Zq2uiFkTlmne1JNnba5IXOOVojHJ1U9g+TSHzu2S1590Tgfo9eCozVogr1QaxuD2inbtUOw/dNQ5zp11rVKsZNq7nfYGl5/RkqUTRphgJzaZ792CZabKu5vQPtc2hZLsv8p7SBVrt5QhauzP6LZsg2bJ+tu8GrxFm/4wTUA7XbHvOFl6IbM06yl/kdU9WVctwzcoP2WsNvq3BL5mjXfAeH2pAqe2Xeb9OEP2biu+EuWf985KeB2VcoB8vG6ZtzHn6ZSuv+tcvKIIvwf9zZWxXkSdKLCHCAjd1XHA0JMxuLcIQ0nOfs2K+ieRH1SQJRn0msacpFbjOYgObtZB8xUggUcP6ldOEhmTKShC0TmSR3pXPUF94+Qm7Fth4jNYxTjFK6dqHS3c7f8/g++c/XrDik6ofSuQN7yXJbGavxVwHnbp//D5WOKfFKyTtjCK95VS8fi46Uq+J6wPkVT54nOCctyt85+P6onKXBHsHV3+JxBsVdK05PqbWREfEeiv8rtI5t4SY+J8vF4/m2v7nsqcb4nx/9r85ERfvVE3yqaH37vu08k0390+ChwvfWHJP+HoB7+n5fQ74dT+xQuPrtYMX3y4X7/owV/KZB8LtF1KFJ/mWeAK7B+uhUj4/cNcgdcDOhiKLJsy+OAK5B/SbFvBFJ8XPd/pCWCxmdNeVF+pDWBx6B95ld9HkFkHMgC2OcN96ceBFhVM9gCCPgSlucaF1hbO+gCEMh++8GC3UB6Q6gCmPcRN9gcudcTh7eEJVCEAVGBr1GD2bd/rdWEJCQfQdgQP+iAVggQT5gbSNgNVTeEXugRWBgZClCGy0WFMSCH2UeCaqGFXESHMdCG6WUd3LdkfAgDdhgPKtgVfugSuzeIaXgMbzgXErSBgygDenhHgMcVaYcVSjiJLlB2VxFCmhF8VnGIS2iC8HCGdBGIQ8aFMxiF/4pIGonoEss3g9+3E2NoE/1HFqjIiSpQiZYIhzCYWay4hLmIRZdoEhiiGLfIixEQhvEAimgRiW6xhsxYAhoIQsOIDnEoNNlIh42oSN2oNjnYEstYjSKgih6xiyeRiWOhjua4AtcoFgKIEOyoGnj4jhOVF+5Ij+NoavhoT7/zFLkjGPP4jygQj9g4FAMZGDJokDkgjVgBjRYBkW6xiQ55A7XYE19DE35DGaR4kSMgihJyjM4jMiDZA64IceVYCujIEw15kjpQjIVEj6YIErN4khmJFAWZD/34EosIky4gkkrxKekQi0ixj0D5AvUIHzdJHDUJEhKZlDhwfmQxhacwMf8ZQ5JSqQ6UsZG74Iwv8YhbCQNGmYAfCQkJ0JO6N5ZD8JQO4ZWmkC08w5ZEIJSjd5b1opZUF450KQJLWThaiQgB4Jb6xpd96ZfBCFs5wwkh4htKcphFQJWsI5aIwDG+MTCQOQQUmRfYNQkMUIhKYZGZGQQ9iBeOMQkKcxwrOZouUJZatZiMkAB2qYysmQSuiRS2cY9ykJrIgZe12QK3qVUjNggMoJdG9JtLEJy46V+AABbkYZXIGQTKaR6ryQsGkJh4sZPRiQPTmRQIMJx04AvvoZ3byZ3aUQCUCQYJcJ32QZ7laZ7lUipuQADseR/Q+Z5E0J0pJJ9nsA+gqRi+iZ//M2A6vWIA1RmZB/AAR4caASqgM7CZx3Eps6IFGvGfnnGgDmoDEBodlyIAtqCbNaAPnLKgtDE0GRoFCwkgCJAoRLAKcfILJLowJ0oFa7MhwSAOicIKN9YnrYANv4Cd5AGXM0oFhPkbwnCkSHqkUaIMQjKkV5CTSxqlxICUTooEBiKlWNoNDVqlO5CMWfqlxWCiXIoFWAOmUkqUY8oFUGqmEeKeaYoEHcmmR4KhbzoENSqnLoKmdQoGjYmnJAKbe6qexumnlNEdgWoG40KoCNKkh2oGz6Go9iGmjWoGLQmp+miYk5oEXmqpx2GomeoGfcqpswGon6oKRSqqSgSipYoF/8WJqouxY6taB+LhqnihMbF6ByVDq2NxmreaBwqhq6Ooqr0aBoMJpMBqDLw6rH7wq8cqJY+jrIMQABvRrACxGsIKrcByAIMqp995rdjKBgwwm6hKGN8am/VJrVOanuXaBwnarFrhretqBwowq6LKFOoar4SQANPqp4jCAJiKr3qwD8b6HzFxAP8KsH6grxaqHSJxrwgrCThxriQiK4H5sJUwrwUwsAfDnxaLDtawr6uCKU3ZsZzQJy8aozwxEM9wsCQLCgnQKA9QAMLCGM2QJrbQsgjUCq7go1+SpD57pAvgJQWQJh7KCjh7tEibtEq7tEzbtE77tFAbtVI7tVRbtRJWe7VYm7Vau7Vc27Ve+7VbEAIAIfkECQQAEQAsAAAAAJQCZgEABf9gJI5kaZ5oqq5s675wLM90bd94ru987//AoHBILBqPyKRyyWw6n9CodEqtWq/YrHbL7Xq/4LB4TC6bz+i0es1uu9/wuHxOr9vv+Lx+z+/7/4CBgoOEhYaHiImKi4yNjo+QkZKTlJWWl5iZmpucnZ6foKGio6SlpqeoawoErAQOArCxsrOzDK2puLm6Y6wHBQUDwQMQxMXGx8jJxMIABQIEu9HS00UJBwIGwMPK3N3eyQMIzgfQ1Obn6CmuDcDf7u/wx+Hj5en296UKDAYL2/H/AP+Fe/AMn8GDlhSw8xewocN4AxYISICwosVCARg0QMDwoceP7hAYYHCxpEk7ARz/PAAAsqVLeAAe1DtJsyaZAL46vtzJMxkABwFsCh2a5YCBnkiTchtgYCbRp1CPEGjAUqnVq8YQAI3KtSsPnAiwih0LgalTr2jTqlBYlaxbrFqDqp1Ll0GBt3jJmqXLl+uBsHkDk43btzBNAYAFKx47oIECw5APIl5M+a2Bx5EzU3OQuLJnsUwxax6N6kDbz6jFAmggl7RrUAQWpJ7tFoCA1q9zX0pwl7bvwQd0C5+U8vTv41cLUBzOfBGBzsijX2XdvDqhAA+kax+LgKT1730cGN9OPukD0eDTz1Egu7z7qz/Vy4fj4L19rAVwz99Phv39/1c5wN+AYpgG4IFKFYAe/4EMWoEdghAmBYB3DVYoRQLQRaihSwJY6KETAoy34YgfLbDghygGEUBvJLbo0oQpxghEAiK6aKNDHcqoYw4M1HjjjwDlt+OQMzQA5JEgIXAikUyasCKSUHoEY5NUluDfjfM4Q8uWs/yijU42BldllTRqGMwCBgjgACv64cAKAwI80J6LBmiCHYVjAtIjgiKtuUQArhjAEYkPtBlJALIBsGSeeRwA4AAEEbAoEwQI0I+GCxjqCKLFFMCoHwLYN0ABfm6RUQOXHmgicXMSk+OneRhZHgINEKCpqXaBSR4Ayz3CqTy9wlrHUdpF5ECwZxiVqnu8+tpqVrcKy0Z20v00Kf8aKQ1aHgBnHfKrMnVKKwe1xwEw0h0K6fobt4t8yw2e4rJB7G8LCLiHAgKo6xuy1z2rjKLxtjHvbHv9EcBk2jVriLveeBqwGgOj1li0e9iVML8G++vNqw+XEbFnEydCAIvlYswHw+4MYHLHXXxMGVMUCzJydApn3BACMbNshcuLKRjJzCXb7FC4OnsRKmoLwAtJbMdl6gfP8Shd9BWOfmZbJn/Rm/MbUMcDwNZTM1G1Zz7bGaJvTufR9T8Oh20FAT6+hYCYnShAMmpE2zF2S/a6PUWZlVEXyp6z5T3H3i2p7LcUKOc15SgPzta3HAQglfbiTmiMV9mmEI5at2woELf/Rw1g7sTaoE1+SuRWX3tG4y9JbToRRyu2wMqleF7ZAnGQKyHYs+dQ+WKFTvPkZxyvUR9+wRshumLxnVN7ZaCXkYC+O6nevA+wj8VuOnB7BrAaAWSolOLbA4G6VZen0/1bD6zhu1jtp68D4pYBn8v6Ymk/Bv5iKZ39dgC4vPjvHstbDPrK8Ly8yG6AMtAcVgBAN4voLjBtI8PdaqM/CJpAVnhBAO7wUcDAVFAMCcSgB2vAgMDUryRXygvvGDg6rBhuhS5ooGWI8j6rVK8LEhxL8nDogg2K5YY16SFSMiiG6eXlhERsAQBtyBXWgcZ1WrieYqAYxRUEoIY9OeBQ+NcS/wGSYX5v4WIXVYBGrKjxKWSUUgen0ELBvHGNJ6ijW4bYlSC6RIxc+KJgzIhHFgjSLXeEihI9ggAzgBAvSCwkCuLYEj6iZZEOeSAXhpeXSErSBJwciycvCcaAMDEMflTKDD/JglTuZJRpKWHiRqiFFLrlhaw0gS2vssrIhLIlsNTCId/ytVx6sZQtwWVhptiQYp4xMLTM5SPhM0euTPMhluzCL8mSSGMqQC/R5AsllYGzMriyJ4Q0JgqMmJRuFgaT3XAnFphplVOqswTbVEo6X6NDU5ZhmIOpZhfZ2RN7viaf8PjhFpw4lnCyEqE9cWZzGPqOYGYBoEK85wrOCRKHZv+Go8UY3xjamByNqgCiPNknc/rpjmxuEi8SNakJzNeTXn6HnsiIaRhIahVNahSlLxkAFnVDRnleAahIsag6CZq9/ZTPHTYNA02VUk6ZngCpLTHodxLgDoXWEi9evSdTXzRU5lzzGPG7CTJdolRjchUrLv0ORo0h1DJQ1CpVtaoJxhmQRjZIj8hQqRcUgL2e+FSjczWshdqoUzDw1SNtNeYuC+qhuQJyC1jdiUj1WoKpuqSuHnKiXzX4lriaNLMeMa18nlqMsGIBsPTj7CSpmSI9arULnkWKa9UZADfK6C4LLNBbBMvZye5ktCkibGSrkFiqCrSQuQWJUa16V6Uc1qT/b6WqbFnA0pJu94NXma5MH+sQ0H6XBNFl5HlToEWyqNaksA3jetfplrzO96wvAcB8r/qW3Wp0rQF5r17T+5K07jcCqHVIWa2KU5409rz4ZeuBSdDcpAjYpAR2iH9NWl2k2He+2bXchEfQXR+OOAIdlu6JI0Dehhh4wiAFyACe+8n2qmbBJu2tUl584LHy5MLwtYp475ngJNH4ky3+hn5PnOGWDFmjTQbIcu/Z4J3c9rvftO6IWTuWDZu0yg5Z8oRTzJMpmzTCIDFzLisc0SOzMsb/eHIukwwQIMtUx0iZ8YQJG9AVi6DIbBuxj3ciZ42SGZsTBrRHrrzeQTvEo+qE/7NHvGxVAHttwmCWsJ9FgOee8Pi7XJ4gjjmraHhcVqaHfomd9ZrqhkCalWx2sJuNSeelHLjW8Tj1fCX9DkZrlM/c2XQJlLJqSTraJdddb5aRUug1ltohvp7vs90x6k/yWsPCJkGrASLm72YamNkmAZoXvd5QX8W84T52nde77TSHmwTX/kayYW3phzx400p5NR7H/eN3j6DTOxnAeYGtmln/NCnRZiVPkaLrRJvnu9Puq79JYFyQFDuK6lbxxEXQ7ng0e4XfBklU393xhG43yh+Z94QzHg+Db6/kD0m4oPMs21jzhNLzZfk7Rn5Pfr9y4yUobENk3kWCYwXdQBd6QP8+fc+F90TN+1X6uq0acRm7XK8W1qvOH0LcdwNc1QzmINDxmRScQxDlqR072XWLarGrfQRV54bZ02fzpr4d7mXncG3uToK4K2PuzTM6Vhqebb8nQ9/2wzU8kMt3w8vj4Ijke99pLla3EF3YjqfrPeN7FcA7vCcCVyfaHwL1FWe+GKHPZcWRcu+3n74YiJ9d3V9CeH+/nhie9xvMHcJ4yf8576wcPbZ9v/ae5D5sq/c08UEJ/ELOviWbXX4Els0TlTdP8e+4eLil/g/tu83GcJH+CbgfD++HbeuZFL8JyA+Prg8w5B+5fNKXiMfngwTp6o8A+hu27z3m3wT71w3dhkP/4Edb/0cCAWhrAxV5ByhuSRF7OgN/5NaA2tZ8HmRuVhFcFJh8iIZDu9cQpQd0twcB7mc6BWgVrZd/Iyh/OpOA/1B7xMd+75B6A8R5qkSBKCCD71BtHWN/IHF8Gxdv3mB9LONzLxGCb+eCymB+sHKCShF9ODgCH8h/9iOEUxeFuiQh9iOBD9F7WPh7D7g9PvgRQDh2AaCD7gCD8YJ97sCC0ldvFdU8BICGAYF/XzgCSugTzSN8DcGEkmeErjY7UwgQH3aHJMCF76CGnyJ44WWI6pAgppOHveaIKkCH3qBnfmODSaGBlAhvWuY2Y0g6nZgCgBgQSDgkbKhkVyd5iOgO/wPIMiPIDR+Xf9SnWEUDT8k0iisAh3FYNIMIEGUofU4nJUXjhEpxiv/HgR4xiykiia64issXYsrXMb/YfbrYAryYMjwoIyWmXdfIAsOYdgHjjF31jSzQiiERMMq4E0xnjlZiifImLt24idvoiFboDe1YJeG4E34YhdW4FPVYIZqYFIXojicgjU8HK6HoEUR4jXz4jJ+yjy/hhqOYisjQj+oxkHkGgZ0Yi8SQgjEyj0lRggZZAtmYfWNCjqpYkjBQis0EjcOxjoTGkjDgka7SJCJJfzQJAw8JkURyj8C4kzDwj92AkcNBlPCAjLrIiLK2Iwg5QTBpiCqJDEopHED5gv9CKQMamTgBOVEhlJUz0JPukI8EYpN/B5YygJRyhyIYiBVkiZYowJQ8wXMDYpFK1pU7aZcX6SFbiRRG6Y5mCQEgCR456WFReY1TiQxvCR5X+Q8NCZci0JdOxiBqOYmQWQNi6ZP7EZjIYIeX6QLoGA+LORwL+RF/uZOZ6Q6PmRmJ6Q2D+ZkqEJowcZhQUZnvwIyXmZrfMJquwZnIQJGwKQKyCQ+ryRcKoJsQwZHBGQHIKYB4mRat6Q1VeZnDaZnN4ZL5RZtC2ZxF2RzVGRCKuJz8RRbF2RWyRBbAKZ4ISBY14xq4GHDKqZ4iUIu8pJ0IIZE9cZrBqZfKwJtqgZ0vUZD/8kkDpdkQ4fkU3xkQwSifMukSuGkST0kW/jmgLxCdORWfMHSSckShPRChT4ihFYEhW8ShPmCb3aBM5qmhE0iiX8Gd3oCiUHGc0GOf4umbxQCjQ/GePfGgLFoCAPoRE1oSOsoTQdqjL9CWVzGdxtOYzfScRjqe8FNFTNoQ5fmkKvCjH6GkuRBDgqGlVsppLvoNOIoQXBoYAvqlOXCe9EOjnqCmb8GJaMoDDboTt0MT4UMZ+hmnI4CfmgWipZCgMaenQ1CgUsKjooClPHGmgqoDHto/CBEA/BmUizoEc1pmBlGminGgkwoDfDqXTsoJgOoRRbqpMzCk+bWglQCpSMOm/5NamNNBDUxjNX5Kqitgo8pQp7tgog9RpbQKA6EqY3mqCAkwpSChqb06A5EKD7hqCvlSOMeqBJ2aZ8E6CLGaGkLyrEhgqjU1q9eRrA4xptjKPSqaOILDCWdDG0oSrkvgqtzBq4KQNb7RnuqKBG6KQZ/KBwwQprM0r00gmW7hGJMANMdhqPwaA7/qESHjCAkQrXhBsAVrsLRhG/f6BgKLHNP6sFLkGwNwG4fAAMQ6khgbBQcLEuYysf8Er9pBkiFbBCPbEg/gsF9AAAYwrmThpSs7Ay3bEgjAsXjgC+9hszeLs9pRAO6aRTNrH0AbtEKbMLXiBjJLs3mhskqLBDnrYP9Newb7oK8ZNbVWcEHVYgAwGwQKcAAPAI+ecbFcSwP1ihyjcixaoBFa27BpmwVrKx2jIgC2YLIxoA+oYrap8ThzewWY+h8IEClEsApx8gt+G6/cGrg9cDwbEgziECms4FGA0grY8AtQGx3L6rha4K2fIQyiO7qiGyXKcK2eywWVarqsO6qp2wQGwrqy+w1o+7o8IKKzm7vHALi26wVWpLuyuyq9OwarC7wQkrTDOwR3arxIErbJawSQy7w2IrzPewbnKr0kUq7VewbDir0b0h3bywYH470QgrrhuwbPQb73wbvnywaIqr6BUTztGwe4C7/IAb7zSwfXa7+zob35Kwf/CgC6/BsPnPO/duCxA0wZc2PAfCAeCew4tcvAWHAwm/vA3gCwEvwHCmHBVyEAepvBN3G0HLwTGAzChLDBI/wR5sKqJhwGAbARKRwQq/HBLSy+B/CxwLuzNFzDb8AADAu/hMHDkpAAIhzDxfAARSvEfUC2MawVO6zEeaAADjzATJHEUEwICQDD3gspDMDCV1wxRTy7MXEAXvzFf5DFcTsbImHFZiwJOBHGI2IsjdvGCeEABVDBglEAV0vHB2ENWrwrpIKqfEwKgJK4ixtUhfsMZTzIoZAAlfIABaAtjNEMaWILjBwZl8sKr5ANX0K6niy6C+AlBZAmeMsKl3zKqJzKJKq8yqzcyq78yrAcy7I8y7Rcy7Z8y7icy7q8y7zcy778yygSAgAh+QQJBAARACwAAAAAlAJmAQAF/2AkjmRpnmiqrmzrvnAsz3Rt33iu73zv/8CgcEgsGo/IpHLJbDqf0Kh0Sq1ar9isdsvter/gsHhMLpvP6LR6zW673/C4fE6v2+/4vH7P7/v/gIGCg4SFhoeIiYqLjI2Oj5CRkpOUlZaXmJmam5ydnp+goaKjpKWmp6hrCgSsBA4CsLGys7MMram4OAmttL2+tqwJucMtrAcFBQPKAxDNzs/Q0dLNywAFAgTE2iIJxwjL0+HizssDCAUGrArbpN0CBsnM4/P04ebXB9nsoAkMAg8L5NUbSHDAggcCHOjbV8lVg2QEI0qcdk9APoaT+v0LOLFjR4MGFGJcpICBAY4eU/+qJIcA4cKRhQg0QLmy5kRzDxisgwlIwUOBNoOqNChAGM8+Cg48ACC0qUeQL4/SCcCgwTenWGsiMMBAqp2qCLKK9QjggYMAXt8EcLB0rNuVZaOmTaP0rd2PC4rOPRPgGNC7gCUCOLvXjEmmgRNHRKC38JcDBhRL/pjO8ZcEVidrJph3p2UrMhFvHj0QAeHPVhQ4CEu69bwBOdGiftKXtevbryvPpu0Xt29xA3TvRuJT9O/j00zLHn6EwYO/yKM7W9CV+RAGBaRrpyjc+o/i28NDU+69xwHb4tM3I19eB4Hn6uNDGCDAc3saAtDLVz+ggf37MWC334Cw/QcgC/kNqGD/MwYYeGAKBCywoILBOfggCatNOGGFF0KYnYYLctghCQcYB6KCADSw3IgJfHjihvWNGOGLLwIgwIoAKhAZjScCgGN5LfLIIwIHHBiAAELW+CNza5mYJIgFGOUdA/o9qaAAABJQpZUnqsicAhJyqSEC9wXwgJhWIlAdag2gCaJcuzngpJs0PmDhUQTMSad6BZQH5p5iDrZXAG0CSuGdjjlgqJsFLMkQA3ouGl4D1v0pqZsO8ETopQP6yFyJnNJZAKKpJBBmqPEVuZuZqO4JwJraKNpqfAsMl8CWs1qJJTEBuJireHDuJUCkvya5AKmg5Flseg/M1uuyhr6aiqzQbgcA/7IwJUBstU/uSgqr3G7nrWOQhrtoo6NYam50CDgqVaHrGooAtpRoG690qhb27L2LSuvJAfxG16dj6nJ5zzW+JCwAMvFAJ2a+msALqDILoKNwLw/F41qwPNlLI8UGJMSKuzSw4g9AaBqwyZloDoBMA/lIicMq/vwDgMNjqVxYuSBuJZISAbhiwFVJPkByIwGcmqQ5BshsREkLv+XpXgBv6BK9RhAgAE0nLnC0IkkLCdLPUBAA2bYejesVkgQWQHYWVM2Es3zHZoTrfi29fUVSD9wtEZl7SZweAg0Q8PUVVEE0IQBOM+LxggAYcADWVCTggNIdwSrVjuIZ5EDjZUDGdf98jD/yON5cqVGSAWhLM3BaLIc3GOVhrEU06RwTcrp6NtL+RV++vuZ7KrFLF7nmcvg0d3QA5B7I7rKnXodqmE9DaVqcR7dApnsoIMDyyIEuCPTaEckHAayHM/Xm0gXnfB1H+v1b6YaQjxxs79Oh2pbcs3+/l4QQkHjoNwj7zS9GhDiA0mrllezhpj+HO1/wmCe+PRgQNzaK4B601Iz8DcOBrgmOBv1AgAkeh4B+CJt2MtiIA/SPJyBszagiUUJrVdAOKmTejUaUB7bhhjoNqZ5vvOaHGN6GPiPkIV18Y6NMnEc6RNyDEV3TICXmoWq3maEmjtS6yUQRD1MkTQE8aMX/NSjLNebzhAJMSMUrIkdQZcTDBRMDQFDw7Dc6qwMWfWO0OOIhh6Px1yjA9ZsXxoEAJ0SeH+cgRMlo0RR3xA0ZyaCALgamj4u8QxgBMwBDmoKQt7lWHADZGkFmsg4+3MwCbkiKSLaGgW8oXmsweco6IJI0tOQVGzWjNjVQq5QQq+UcKhlIT2ojla2ZZBcSAL7ArFKYOGwkYJrHkzOWcnhYCID8AmOAJEKzDJt8yxdhQsrNNEsNstyMMb/5hj1KpptzCSdg1hkGd2rGlOyMwxzdQk+Y/HIzA2AlF4hJGgQINJ9pkKbUgjkXV07mdWTYpTO9iVAxCC4wBp3NPt/CUDD8/3MyuazoGxigmXF+pmCKgeUYCLqZPIoUDixNjEtXpVC3KLMKNbXLTF/qBonmrD3ltAtExYDMd/JUDva8y06ZlE63DACbUWDmaDp6VDUEwJJC6edw5BmU65GhqYGhalXTAFa3iNU7XIULRaVA0s2cdayGkUwvD5TTmmhVC1fdjFfhyoa8Juat5QmqUABHhotyk69vSGtQ5nohwdpEkV645WSWitgzSBYwlO2QX50y1DDUNSvnrCwbPhuUzLIIq/UIaBk+ChiTivYMrB2LShd5WZuYdgubTUy7XruG3IpzreVJKlmAC4WyugWFvD2DYcWyPmEudyKM7UJtA3PT5GJBAf+BUW0+FRuO3ZKBtE25q3W94NOmADaOjh3IebEg3LfcdryRDcxe8xlTiXT2d6i1iWvhK4byBuW+7JwuQaorhaLaRZT8NYOAs9JckRqYHu+FW35rAtkEfwG8KjmoMDEMAQSPwbhima+Fw7BgrIj4pfWdR3S5UGLZjtgM29RvZdsrjQaDAcRY0e6LxdBioTxVtGld7xV6nJUV71gL/rXra7VJj9mGIcZNcfKRpXsXAI81AfQgcBRiOxYdT/kLSVaJh1/73GaEVgy+tcuJv6wFLNvFyFVNMzmgCoUHj8W7bPYCdztCWOu2VRpr7oICmukULecZaBOWSIUr21Qbf2HPK4n/8KGlwGWhWFm0aRYvFojsFEdP+gpQTsmPLYzMPvdXMXD+dBQ4vZJUI5bJzjD0E/7cWlV3AdIR8bSfnXFpLoQ6KLK2NRECYBchVzY7Xq6nYgItbEq/xdQjHrSkEZdoj+C52aDmKLa9YGexLHrbTnDzncE90Gp3pNfkZkKZbWLsdCsB10+hs7t/8OuJQHveUpBqYFyN7yLQOiua7jcSwmyTawu8CeuGy8GpwGqhBHvhODA3PfgN8SHUeyVnrrgSGu4ReWscBzTGiq4/PoSEq2TaJPeBnMdC8ZTv4OIRebjLZdBtrBh85kMQd1akjHMhpNimPT9CzVfS7qDbAN4dybjR/4PA4YIQd+ku0Pddxgz1HxB7LEqveg8IXpOWaz1AZv06EDiulaeLPQVInwcAzk7vv7K97WJB+dtZEHLOzr0H2B3Lt+/uAlgDRuZ8j0DdU7L2wN9g6E2Ru+FTYHKPKH7xI1g5g80O+aarF/I0SLtEvI75Elw9KwOg/NwHjVHRG57sEUF3503AdaKv3gaIT9vrX4B6lah+9ihoPUE0PHvLewTwi5e4OAqP+xUMXiiPL/7nsZL14pPA7wf2eOdrP5CArz72i3X+DLA/Ed53XvIiNz3kNW8P7aM9MdY3vwh8P4/br570gLm3+lfA8vmXQPcp2bv9R5D3rBT99InhfvtHff/1IH1nx34TAXyYx325tn8icHyl5YAv0HgTIYCLB31vMWoSyAL4N3EOyICRtoEugIDioH+YB36dJn6rNxbeZ3gUaBOcN3/L1xQDsH/wN3UqOH1iYYGBh2PhJYIuQIDz0HyzJ4T2BoQuUGkqEYNv14Ed8X/7B4KXp34QKGNI2AJSWA8KGHQwl39X2AJOOA45iHNZ6BE8uIFhWH7mh4KF9oVguHPq94I1kXwSSGgVaH43aBca6IYqYIcSQYSY54PIx4ct4IcRwYRaZ4QSEXqEyAJigYhVl4YRwWyNGAEzKBSQuHRVWBMjV4mKGA5bmHJdKHuVqAKfOA2h+HFl2BGd6In/YpGKFceGP1iKpviKuLeKE0F8tIgCpygNsLhweWgX6eeGvRgNLah15EcQ8reLI1CMz1CDr+eM9ACFVyiN1DB7kkgQZ0iMoPd6/2YXv+h81jgfrzeKHUGHXziO0Ih5SpiCzMgC4wgBxxh0sphV7wiPtgh5uPg394iPWRGO7maOCdiPKxCPAElu7dgUgEiQEWCQFyh8BEF1DFkC/ecUJrh0yTgQmciHhkgQGwlxUmcXyziRI9CRGml42TgQF9mPJlkPlAh1m7gS27iLLUkPM6lx9WgTe0iSuZcVN1lxcthqPMmBDHZ3ISk1Y4iEKQkN68h2SzmNQ8kCQTkQ81hxMWl7/1GJIPkodhjoVFV5jwnZER/pbvsYEej4jvH4ki53lMeVlOm4g2f3lPMwjCRZk68hdt/oFjyXlSdgl/NggNuWkzZxkEhIguGwkgs3lSlxlgQpl84wls3GlmMhkXyZAmU5DT9JbobpkZX5AmGZizCpW51JeyxodIJZE4T5hQHgl+NAl+mWkfWQmSQJkdPAmMJGAKwZETs5mivgmM2giy4nkJvHmzCgmPXwlc12maXhlrt4ldU3c8GobcRJmnDpcr4ZDrIZlblpD8yZYHnZZchZmZs5DYjZbKe5Emo5nSVgnBBGcrBJD62oniXgnPUAnAcXj+FAjbxZkVhRnp+WXlixl//yqQK0WZsVp5wDkZrMKIisCJLbSRC2OZqf+YQLd53TEJ8DagI6x3wHh6D1AJmdWaDSsJvg9nPjlqE0wKBi2W8WioooSgP0WQ8jaWsTahML+aIpEJ1N4Z8vZqJiQaI42gLjOQ03emgqCoNBih9OBZiv9Z131p1ZuaFYEaFLJqL1wKNJGgHCOQ4YumNHWhPZiaLvKQ0gCldO+qPhGaT4+ZtQSl9WSg/pmaUp8KbRUKZH1aI11qadyZ71qafCVKPsJqc3sKbNYKcV5aPVKag2sKVc6qeZNKQJqqiH92aH5qH1QKVZqqNN0aWvJaUH5qi8iacQgKkIBan14JqSWgJnGhT/QApflkoPM5qqL8Co41CkokWoLiqrOPCqvvhiXWkXtqqrK6CpUfZiYwqfTJqqx0qmFraqjyis7oGD/IWoYnFz0EoDogoBwcpTpnql16oDzhoU+ilMvNp+3/py0spbuDqiyQqtMRoR28pO54mk54qud4GlmZSt0cCp9Wp80wSqs1Gu8zCu/VoCtDqEiLWurlOwPPCuEYGvSqQAB1sQacqwJDCxw9eu7aGv0UCqDOuw2lhVfEp4ACupGCsOhjocIOsRqGqxEJIYEAsgG+WTLvsDHItcwgSg4FmzPsCfv5VPX4qJPPsDyxoO8fogI5sS1jq0NzCvKdGy1rGyv8e0PwCo/653Sp56SVQLBBzbYRVrGdTallv7A1k7mV+7F7cyVWMLBAI7Dfv1IDObqGvbA7+qlyV7ChIbSHdbsAr7DG8bWN0aEQQ7tyqQtH+oWYFLEEdLuDBQt27hsdugs1KjsYzbjCAFIJL7FjFbuStguBIBubiAUpPFuUPguHZbKYmrjHvLtHEbZatrCa2LpqRbBFarX2d7CtY0Gik7uyUQtDaBs2khtTLJu0bgtJw4uKXguSuxtMTrA2V7F1D7LUU7kM1rBLUbgVIhuupUvUjgu0FRNzAhvDWxuNxbA5nLXAq6CAEwvRPxt+X7HXQ6ifswIxh0u+9bDK9kv5HQtplzv0ogvv8fsbuJYCrHEb3+OwPsOxDPdArfcxyge8As4L00KMCCQL+/gS4QDDSpGxEL/Anrqz2v67/G6xQQ5AnDwi6Um8EuELYYtbmC8EQUpMJPELtv8UiUQCXakWwyvAThumwpLAc1tB3Iu8M3AMA1UcKOkAASHFZELAVGzIkIlAhBHB4U3MQv8MRHvEOGwAAb3BRxasVFgMWcWEWBUBvx8cVgHMbb8QBDPAboE78/lcZVIMZBwRghnATHMCAPLMc2QMeW5sJtlj56zMfsxTuF4wZvPCFoTMhI4MeddshnYBIni2qMrAUOFT1tXAR886CtUcWVbAM0fERuo788ABZCksmfTLb/cMxJ12ALP9wCJSE3SYJPqXxdXaxbLkEEq/APyMDJb0TKtWx1XctJ9+ASwdC4raA18FAAq3wcHRzMt2Yo5TDN1OzLC4LB0PwF1xswCkK+2fwEoMLNbuLJ3+y8kyzOrkHL5fw7S4zOyAG+67xa7kwjexzPR5C78zwgqGzPTLAv+Uw3r8zPSXDC/5wedSTQakDABV0+gIzQVHAkCy0wd+zQY3fOEZ2LDU3RWKC8F+0RIaXRcJC2HS0ZagLSeEDQI30XB23S05PAKW3DLI0HXJzSWZFGMd0HckLTQdFENw0IXKTTKuEfPT0IPgHU0BXQQ41mgmzU4yDUSY0IRc3UNQZPzE+tvpkh1R3m1FWNNApk1IyB1FvtBs6R0uwR1vWy1PmcE2a9CXWBzqYB1muNB6rRzCcSHBkd1/Vz1csCGwww0XhdB4cxK2VxAH7913mAGRbNLtJj2OzQF2i9NNsDzIyNCarBzDRSAJA82YXRDXrNO26TvprdCUHDy9asky2BDYUd2puwC7x8O3cxANYQMrag2jmbzK+wzNWc29NcMQwTMgIADLQd3MI93MRd3MZ93Mid3Mq93Mzd3M793NAd3dI93dRd3dZ93did3YQYAgAh+QQJBAARACwAAAAAlAJmAQAF/2AkjmRpnmiqrmzrvnAsz3Rt33iu73zv/8CgcEgsGo/IpHLJbDqf0Kh0Sq1ar9isdsvter/gsHhMLpvP6LR6zW673/C4fE6v2+/4vH7P7/v/gIGCg4SFhoeIiYqLjI2Oj5CRkpOUlZaXmJmam5ydnp+goaKjpKWmp6hrCgSsBA4CsLGys7MMram4OAmttL2+tqwJucMtrAcFBQPKAxDNzs/Q0dLNywAFAgTE2iIJxwjL0+HizssDCAUGrArbpN0CBsnM4/P04ebXB9nsoAkMAg8L5NUbSHDAggcCHOjbV8lVg2QEI0qcdk9APoaT+v0LOLFjR4MGFGJcpICBAY4eU/+qJIcA4cKRhQg0QLmy5kRzDxisgwlIwUOBNoOqNChAGM8+Cg48ACC0qUeQL4/SCcCgwTenWGsiMMBAqp2qCLKK9QjAwIGdXtsEcLB0rNuVAB5ETZtG6du7H6+hpUsmwDGgeANLBOAgAF8zJpkKXhwRgYO9h7kcMMC48sd0kb8ksGq5M8EChTNjkanYs+mBjg2LtqLAQdjTsOmZXR3F7+vYuOcNwEz7iV+IuYOHAyAAcu8iPksLXz4t9fEkDB4AZk7dGe/nQhgUqM6d4nXsP5J3Hw8NwQHV4HccuE2+fTPn6XUQkO6+PgTi6OPTEMDevvsBDRin3wva+WdgWfkN2AL/fwY22IwBAiqIAgELONggghKu4JqFFu4WYYYRELAdhw4C0ECCIB6gHIkXnggiCQmMyCKHAqCoH4UzzogfiApQliOLjkkY448/mqdgAAIQWWRX6a21opIkFmAUeAz0ByWJAWJHgJVXsujicQpU2CWRhPUWwANjXokAk6s1kOaVC8yVlgNPvpnjAx/yRECdds74ZVph9jlmmXQF4KagXQIgJ0YOIPpmATYyxACfjuZoQKTaBFrpmw7wZOimbyo6koqg2llAnqkkIGapadbIzpms9gkAm9o0GqudC0yZSwJc3nqlANoEIKOvaQJwwDACUEqskgugCsqeywoKKSrCRovo/6yp2GqtrIt6koCy20IJbCmwhovosaNMaq6j04qi6bqCNiDKofAiioCzlXxbr6MLYFpJtfs6iq0nBwRcKQC6YvJul/dc48vDAiATz3RjorsJvYIqswA6EPfyUDyhWnyJvjlqbEBCrPg7Ayv+AJSmAZugmeYAyDSQT8I2rOLPPwBQTCMm6pK4lUhKBOCKAVcp+YDKjASwqpLmGIAzESVFbKklBXfoEr5HECAATSz2++/TLIJENBQETAYuee1GkqSBNJ+dBVUz+Wxfsxn16l9Lcl+R1AN6j4c3JBi3h0ADBDB9BVXAlTi1IiSXaBbXVSTgANnt5fqIj+QZ5MDjY0wGdv99CD8S+d5cqVGSAWsHVzojMo9HGOVirJU06d0Scrp7xNEOxm+8gy5I7NWVRescPtlNnaiQt+566nW0hjlzzB/COXULdLqHAgIoz5zwf+zenZF7EMB6d68Xcr1wu+VuB5KBC5e+7s7DNoBcPW1YPPh6rJ8bgIrDQ4HIM79AiI96xSnEAaaHmwL6wX+xAWAiRERA/t3hgPJzFSK2tDwL0gGCp9lNAP9AQfR5cA5OQ58GF1El6p0QDiA0zakiUcL9/SGFxVuhI/QXnHv14W25WcDxIIGj6oitDzG0nw4hgaT6BeaIechaA8d1ifUYcYRtSOJpIKQw4sUGinaQYmxmqIn/JmIPi2rQomcK4L5IBA03C8ADtGJDvk4oYFjBgRkexJgbQnXCUN5bjB7pgMHK/OkTb8zjHfiIm6WJQlW5kRcKGciYgY2iXMLR3hwIsBxLjkKNghHZGyi5GDKaIpG4aeMZFOBEvDjyFKjsjAPXAMq3DECT1PIibADgu9+RsjKePAUmTcPLNwDRM5ojRixNE0c46NI0rxwGnWDTTDZw8jTRJAbAcENFNmhrl6IcBge3yAZWEhOX7DgmbFQJhgQE8okvHMUdYYPOMuBQluxExRx32cu5xU8wl+JJLd0STywMNCtgHMk9sbmGZ1qmnhhhJGMQgEYrSBSgFU3FQd0CUTFc/7SSQ4TJPi1TADMU8i4d5ck3PTOAglbBnKdBgEtxsbDKdDMMvxyLsUSzTMaU1Ax4tExC07JNy+STCoUTjExpc1K8hBMMK7VMNiOTVKVm1AkM6MxQI1PTxVRzDDD1zCBp89G7jJULYRUkeBa6mKNaIadvOStTWymUkGIhqHiRq5ng6pSfkkGdldHrXC0DgKsmoaxjEayZHCqWAfRTCu40zVOP01SxPIALAaBrTVL6nI2qRJJkYKxTJdRVvNh1CqIVy2TT49mOFLYMWfXMarGTWWAalgixXcxNJcRXlXB2C7XtDGgzxKvKXHZxmlXJbOPDVqcgwAxVDYxi9ROAf2LFrf9GaK1Kdgui5ta1DNe0zHQHVFmnfFUK4ZXui04Q3L6aobdOOe56YZTclHDXCfCtyXiJW197zDQKUX3ibZlaycf+IMBjOe98SZBem+x3bv1NCUUXfALEYkW+volwRLZK4QhYmCCvDS1h/wseBI8Fuz+IblZC3OETqFgi9+1CgwWD4gFp1yMKVoICBNPSFqvgxs+YMBnyG5TfdhivY1kuEZCcFSV32LsRcTIWPoyVB1O4vXd5bhNmPJbh+hgFaZWIX2un4Ylw+MvcKPNAYrzkwIwZzRNKSY2jANi7FBPOKTAxVliMBC6veMAgqrNs7KnmiJwWzyIAMoyXQGSPkHi+RL7/8xhSmxUvI9oE1Q0Mn4vgZ6xY+tImCPM82LyFTicY1CuILF5I7QPr1iTHqC4BlZuxaTBQ2ik9jnUKBL1nQL/A1EJxrK5XMFApXwHYWWF1rJnsFGXrgNlCMbKuMz0PWHvB1UKx9rDTjBcAGAHZNnnztk+QAHrMGQp6zkqux40CXjvF2DaAtk0kzW4UvBgCGA4DlvHy6XqPoNET0bIQyn0XZ297388Q9l8n6msfg9sm8J6BoushcH+nILfR6HcXFPDOppwb0ROvh7h5gHCsHNriInhmrb8Q8ohYmd2izoqBWZDucKOcBQiX9mgq2XA4u1soL5cBtp8y81irs+JikHez/2/OgqGTpecMLjjTcc6ej2OVMdqeeohG64OWi2PlWidBbkf+BafXxOrLzrIPAnCXiKN8O+v2KGM0HnYR7PguaCdBzVeC9LqfgONBr0LJxyJkv6PA6+IIfNPf4nbDg+HnJnd8Cjj+FrDPgOCElzwcYj4Wsms+AogPR+PtzfjPuyH0uil6vSnvlnzbwOyNMX0bVB0Yg/sd9dLwNcazonPZe0HpQim870lwd7eMvgT3hsvw1fBwoeTd37iHRtZdUOhp2H75WYB9SlyP/a2/pejN94jqu++EWc8b6v4GOEF6T/rEkp/Qun2/CczfEc+7QPsDeb78kQD5pgh//xGAfwNhWP+Yh1AAGAacJxb6d3P9p1w10IAecXwHuATRFw7ct3/FJxaK929jMQDoN4FBQHt2Nn51d2sp4W0zwHZjcYEgaAXAFxTX53v0NxEotnvv1oJcEH5a8YFMN3gwKHE6hYNcIIATIYGfV4HNMH0nQITjsIFCeAQzqBL2d4A26BRolIGR94SLw4QRsYB+V33ScHLzF4RaeAUQ6GBlSALJ91kxsIYe4YRpGAQ+2GtxKAJVmG0xoH70YIR1yANIKA0x+H5gGA0woILqxoN9KAOshxf/l4Ym6BH5pIMRMYWJaAQvCHGV6GFuYXBnuGiZuGWl9ImGmBUsaAKXKBGP9ok2oIc0qIr/rDgOKNgCg+gMsaiKh6VWqtiJEoEvoxhftlg0XDgQ9FaJkmhoxTAW7PeLOaCL26WMHdcRysaMA5GKyvgCc+gUlleHpxgRpTgCFTgA1XgEfxgNyYiD0khxLfCK4UCJ4ZgDi6h21ViMBNECYxGI7RgD26gSYhiHvegU7oOFTcGH96gC8ugR7FiHwTgNy1WQ9ECCA3kC6kgQXth9SEhq5zgPtfiQPBCFKQGHOLh3HtGNbjgRB6mRhZiQ9KBw7ciQ8zCF+VgP9miSu4aLA/mMEgGOKhCRYSiTO3CNTZGNrjgWKzAW1MiTETCSNhGTWviIrYgC/RgUOGmUN/COlYeI73eR//PQLSwpDiUplSnAlJslk1spDjE2ltPQjV65AmaJGjxZgEuHAiA5EUrplS8ZgUZpk9w4k02WljTAkTgmlToZDZ6HleIwke2IkvSwj79Yly2ZAow5DlapjIQ5iV6JlBERlaaobnwpAz7pcV45mRThmAa4mTBgmSvhkX24ltKQAng5EF25mVTpFipplKoZDY/TmvWAlqQ5AmB5mnz5lEGxKLhJD3NpkrWpG5EJgsNpbiggFsWpkY8pEXSnkcuZlezlnLvJAn7pWskJgtEZDiF1nM5gmLaImKO2m99pfScgns1Anp8ImsLYnd6JnSbAnhDgnpXYmdGWnRXIXfaJn4kIn//1kJF8KaDQ4J8KmJ1gVp0TUY7haKDPgKBZUZTVOI7loaAeVg4auqEc2qHL8FTsiZkYKgL2KXojmgQheqIkkJ6uqaJ9ppkueocn5qJdA6Mqap5NSKM1ihUiqqBxeX46+m1iQaGiOIvi4KBBujIJOqIQOg59l6RA8J8niqOFCaWctqQ+uhi6aaU4IKUKqp/z5pBcOnlioZgaaaEROqZFwKDh8JyZKIJv8aRq6gNsqp7ZyaL1YKZzWgN1Kg3TaZLbSZJ7SgR9Kpi7CaY1MZuD+gN4+gyvWY2m2YyLKgSNSoukCaduAZSTegOVSg2k2aniIJCbmgKRWg9EqoWBKmajKgT/TdqeaUlteBF3q9oDPxoRblqGrRoOqDmrBCkWf1qNmKpT8jmp9vmomQiq4YCkvOoChQoNPfqQMjqaywoEzQoNYgqCiHp20xoEgQkNelqJpfqG2xoEyHqrIBisYjGM47oDuWqscdit57muB5augLoYciqvXUqUD5mtKwGg0xoA1foMyiqEaOoM7oqvsqiBA0kAASsOioqwO4CsBPqLVNqmEAsE4UoPp9p9udocw7qtqXqk4RibxnexUdp54Yis03CwJssCDUsNH1t30cqjG9uyIgCvz/Ct2Gqk4fCrNjsDGTsPu0p+BUtrMbuuITsctliiCvmzQACQTaGz+wdlYqGE/05LAzwLAUM7fB07Df5qsr0JYm/6srp6tUFQqxIhqqanstKgqWZLA27pi33YtYD4tkGQtQ8rhAmYFfdqtzgQtgRhrobHttLwtT+btOHQtweItiuxpX47AyT7XVq4tzx6rY9LAjj7DI6LfYBrX5cbBF2btwA4s1jRiJ+rA3HrFFurdfy6ElJ7uveXqUd7aZ1rkLAbBOMouBZHurhWs7frfcI6gZTrab97t2+hu+xGuNHgtsULtFUJgIy7EmrbvCXAtM2AvLo2vO5FvUBQsbQ4ux2WueNguKdLtxCAvaBmvtGwutwbamT7vd2Xus/bvkCgvOwba+IrsvQLBLy7EqLreP/qe6H7GwTe6wybi3LW67UDDLp4Qb7dVcBnucBBELlNYbUoV7S0aLkS7I2r9nn9+5Yb/AMJfB/gmx7a61wlXLzKi2+Sl7/i8Loh7AIfLL2GF8DQwLIx3AIQbLR1N8LR8L85nAOIOw8HfGmtWxPoG8QisMPNAMNftsLLm8LtO8SwKMWHYcPQML1KjAJMzMII3Bk4vMUtQMXj4MTzpQBd7Ky+K8Yk0MXqqmtQvL5sTARkzJX1FrQnaMULnMZJTFaeMbBz/GuLYcbklbXjEMaB7AJxPEtoRrW2tMaJTHxepcfbULsr0ceRzMGCUcQKgscSRskhfMQeAcjPUccSmclHEL3/KaHFhyG/gcHJqFwDcXwfkMwTJ/xnsXwErpyutYwRxSVbucx/WAfKj2TIjRnMRwCrAnbGady2xCzGPvwMZ7ZWLryHyKwEniwRsFwo1UzE1wyMgSUhjtxtGvzNailVAzLOpmXOS5DNEnG/w1BajAHP7NwCyiwY08wX8myvz4zK5YUV+ewV/yybvVzPeaZVBd0JI+UZmGzQKmDJJ5jQmmDKgurQTSDKcMHKoODOfNfP17zLKFUoGDy+Fo1upkHPmrDPlUHKJZ0DEK0SgzMqwbHNLU1y3fx1DqwIATDS4xDQNY0cxjwPPjsKRdRAEv3T53wayYQsy0HISK0eSrQrNx0R/yz91DvA09Kw1KXQPcuB0lZdAy+dqA0NCEUdHG3z1bUx1dV21Hmw02eE1oIX1PUgQZ2QLNThQ3D9UnJNcU4tCFbUQXl9BQONF6ZECS1UHbIa2FMww4GRJZJQQ9Wh0YqtAxSdEnTdCAkQ1qU32VlQ2SeYQIoA2dwx1pxdA55t2UskCAyg1isx1KXdBKd9glwUCLZRH6792rDdHQ8g2V5gPnsdFF6N2z0Q23yX2nNwDAYS3MI93O1RAH2tBQlwPsm93GBA3POGOG7g2xZy29QNBdYdFCaS0z5gEs2cbN0tBj3FHWXB20+rFO8bf+ctBoMdHHHD1jEAFkTC3vE9cL+tbv/XYAvl/AIlUTdKEkz7DQYqvTcuQTVe8wDI8N6nwcgH7gVFVTL34BLBUIit4DXwUAD9rdT2PeFdhygeyqG+ctYiXgaqbDANQtMpXgWkwuJvQtovXgS/LONQYuA1fgbDhOMzEtM77k0+fjVBDgcLPeT+od9F7huzjORBAeRLDgd27eTtcUhRHgeQROXcsSZXfgdIouXUgeJdTgfjBOaxoeNjXgccbeYh6dFprsvlzebv8dxvXgZTLuf85uZ1rmNYjeSFveeAsNp4zrdKDuhjME2DPm80buj6dueJ3hGOzeiJ4BOPLpcBLulqId2VPg6RjumOQOmb3rYB5emTYChxLjDAnU7qpb5AlY4AoK3qmRAdeA4fsM4J0f3hRJITtT4KdoHjjnHpu04IrYHr9rEbdB7spsMZ1nI/DKDnyH4HiXErcXEezz4Sm3HqprEVx17tf6Q2Y+I5Ic7tldAaHp4jBYDd4o4d3aDspAMa4p3ul9TgjfM/LYENzg7v3iLvtxOr1nAytoDvB7fhr9DhJV7iGyMxJyMAwADwDN/wDv/wEB/xEj/xFF/xFn/xGJ/xGr/xHN/xHv/xIB/yIj/yJF/yWRACACH5BAkEABEALAAAAACUAmYBAAX/YCSOZGmeaKqubOu+cCzPdG3feK7vfO//wKBwSCwaj8ikcslsOp/QqHRKrVqv2Kx2y+16v+CweEwum8/otHrNbrvf8Lh8Tq/b7/i8fs/v+/+AgYKDhIWGh4iJiouMjY6PkJGSk5SVlpeYmZqbnJ2en6ChoqOkpaanqGsKBKwEDgKwsbKzswytqbg4Ca20vb62rAm5wy2sBwUFA8oDEM3Oz9DR0s3LAAUCBMTaIgnHCMvT4eLOywMIBQasCtuk3QIGyczj8/Th5tcH2eygCQwCDwvk1RtIcMCCBwIc6NtXyVWDZAQjSpx2T0A+hpP6/Qs4sWNHgwYUYlykgIEBjh5T/6okhwDhwpGFCDRAubLmRHMPGKyDCUjBQ4E2g6o0KEAYzz4KDjwAILSpR5Avj9IJwKDBN6dYayIwwECqnaoIsor1CMDAgZ1e2wRwsHSs25UAHkRNm0bp27sfr6GlSybAMaB4A0sE4CAAXzMmmQpeHBGBg72HuRwwwLjyx3SRvySwarkzwQKFM2ORqdiz6YGODYu2osBB2NOw6ZldHcXv69i45w3ATPuJX4i5g4cDIABy7yI+SwtfPi318SQMHgBmTt0Z7+dCGBSozp3idew/kncfDw3BAdXgdxy4Tb59M+fpdRCQ7r4+BOLo49MQwN6++wENGKffC9r5Z2BZ+Q3YAv9/BjbYjAECKogCAQs42CCCEq7gmoUW7hZhhhEQsB2HDgLQQIIgHqAciReeCCIJCYzIIocCoKgfhTPOiB+IClCWI4uOSRjjjz+ap2AAAhBZZFfprbWikiQWYBR4DPQHJYkBYkeAlVey6OJxClTYJZGE9RbAA2NeiQCTqzWQ5pULzJWWA0++meMDH/JEQJ12zvhlWmH2OWaZdAXgpqBdAiAnRg4g+mYBNjLEAJ+O5mhApNoEWumbDvBk6KZvKjqSiqDaWUCeqSQgZqlp1sjOmaz2CQCb2jQaq50LTJlLAlzeeqUA2gQgo69pAnDAMAJQSqySC6AKyp7LCgopKsJGi+j/rKnYaq2si3qSgLLbQglsKbCGi+ixo0xqrqPTiqLpuoI2IMqh8CKKgLOVfFuvowtgWkm1+zqKrScHBFwpALpi8m6X91zjy8MCIBPPdGOiuwm9giqzADoQ9/JQPKFafIm+OWpsQEKs+DsDK/4AlKYBm6CZ5gDINJBPwjas4s8/AFBMIybqkriVSEoE4IoBVyn5gMqMBLCqkuYYgDMRJUVsqSUFd+gSvkcQIABNLPb779MsgkQ0FARMBi557UaSpIE0n50FVTP5bF+zGfXqX0tyX5HUA3qPhzckGLeHQAMEMH0FVcCVOLUiJJdoFtdVJOAA2e3l+oiP5BnkwONjTAZ2/30IPxL53lypUZIBawdXOiMyj0cY5WKslTTp3RJyunvE0Q7Gb7yDLkjs1ZVF6xw+2U2dqJC37nrqdbSGOXPMH8I5dQt0uocCAijPnPB/7N6dkXsQwHp3rxdyvXC75W4HkoELl77uzsM2gFw9bVg8+HqsnxuAisNDgcgzv0CIj3rFKcQBpoebAvrBf7EBYCJERED+3eGA8nMVIra0PAvSAYKn2U0A/0BB9HlwDk5DnwYXUSXqnRAOIDTNqSJRwv39IYXFW6Ej9Bece/XhbblZwPEggaPqiK0PMbSfDiGBpPoF5oh5yFoDx3WJ9RhxhG1I4mkgpDDixQaKdpBibGaoif8mYg+LatCiZwrgvkgEDTcLwAO0YkO+TihgWMGBGR7EmBtCdcJQ3luMHumAwcr86RNvzOMd+IibpYlCVbmRFwoZyJiBjaJcwtHeHAiwHEuOQo2CEdkbKLkYMpoikbhp4xkU4ES8OPIUqOyMA9cAyrcMQJPU8iJsAOC735GyMp48BSZNw8s3ANEzmiNGLE0TRzjo0jSvHAadYNNMNnDyNNEkBsBwQ0U2aGuXohwGB7fIBlYSE5fsOCZsVAmGBATyiS8cxR1hg84y4FCW7ETFHHfZy7nFTzCX4kkt3RJPLAw0K2AcyT2xuYZnWqaeGGEkYxCARitIFKAVTcVB3QJRMVz/tJJDhMk+LVMAMxTyLh3lyTc9M4CCVsGcp0GAS3GxsMp0Mwy/HIuxRLNMxpTUDHi0TELTsk3L5JMKhROMTGlzUryEEwwrtUw2I5NUpWbUCQzozFAjU9PFVHMMMPXMIGnz0buMlQthFSR4FrqYo1ohp285K1NbKZSQYiGoeJGrmeDqlJ+SQZ2V0etcLQOAqyahrGMRrJkcKpYB9FMK7jTNU4/TVLE8gAsBoGtNUvqcjapEkmRgrFMl1FW82HUKohXLZNPj2Y4UtgxZ9cxqsZNZYBqWCLFdzE0lxFeVcHYLte0MaDPEq8pcdnGaVcls48NWpyDADFUNjGL1E4B/YsWt/0ZorUp2C6Lm1rUM17TMdAdUWad8VQrhle6LThDcvpqht0457nphlNyUcNcJ8K3JeIlbX3vMNApRfeJtmVrJx/4gwGM573xJkF6b7Hdu/U0JRRd8AsRiRb6+iXBEtkrhCFiYIK8NLWH/Cx4EjwW7P4huVkLc4ROoWCL37UKDBYPiAWnXIwpWggIE09IWq+DGz5gwGfIblN92GK9jWS4RkJwVJXfYuxFxMhY+jJUHU7i9d3luE2Y8luH6GAVplYhfa6fhiXD4y9wo80BivOTAjBnNE0pJjaMA2LsUE84pMDFWWIwELq94wCCqs2zsqeaInBbPIgAyjJdAZI+QeL5Evv/zGFKbFS8j2gTVDQyfi+BnrFj60iYI8zzYvIVOJxjUK4gsXkjtA+vWJMeoLgGVm7FpMFDaKT2OdQoEvWdAv8DUQnGsrlcwUClfAdhZYXWsmewUZeuA2UIxsq4zPQ9Ye8HVQrH2sNOMFwAYAdk2efO2T5AAeswZCnrOSq7HjQJeO8XYNoC2TSTNbhS8GAIYDgOW8fLpeo+g0RPRshDKfRdnb3vfzxD2Xyfqax+D2ybwnoGi6yFwf6cgt9HodxcU8M6mnBvRE6+HuHmAcKwc2uIieGatvxDyiFiZ3aLOioFZkO5wo5wFCJf2aCrZcDi7WygvlwG2nzLzWKuz4mKQd7P/b86CoZOl5wwuONNxzp6PY5Ux2p56iEbrg5aLY+VaJ0FuR/4Fp9fE6svOsg8CcJeIo3w76/YoYzQedhHs+C5oJ0HNV4L0up+A40GvQsnHImS/o8Dr4gh809/idsOD4ecmd3wKOP4WsM+A4ISXPBxiPhayaz4CiA9H4+3N+M+7IfS6KXq9Ke+WfNvA7I0xfRtUHRiD+x310vA1xrOic9l7QelCKbzvSXB3t4y+BPeGy/DV8HCh5N3fuIdG1l1Q6GnYfvlZgH1KXI/9rb+l6M33iOq774RZzxvq/gY4QXpP+sSSn9C6fb8JzN8Rz7tA+wN5vvyRAPmmCH//EYB/A2FY/5iHUAAYBpwnFvp3c/2nXDXQgB5xfAe4BNEXDty3f8UnFor3b2MxAOg3gUFAe3Y2fnV3aynhbTPAdmNxgSBoBcAXFNfne/Q3ESi2e+/WglwQflrxgUw3eDAocTqFg1wggBMhgZ9Xgc0wfSdAhOOwgUJ4BDOoEvZ3gDboFGiUgZH3hIvDhBGxgH5XfdJwcvMXhFp4BRDoYGVIAsn3WTGwhh7hhGkYBD7Ya3EoAlWYbTGgfvRghHXIA0goDTH4fmAYDTCggurGg30oA6yHF/+XhiboEfmkgxExhYloBC8IcZXoYW5hcGe4aJm4ZaX0iYaYFSxoApcoEY/2iTaghzSoiv+sOA4o2AKD6AyxqIqHpVaq2IkSgS+jGF+2WDRcOBD0VomSaGjFMBbs94s5oIvbpYwd1xHKxowDkYrK+AJz6BSWV4enGBGlOAIVOADVeAR/GA3JiIPSSHEt8IrhQInhmAOLqHbVWIwE0QJjEYjtGAPbqBJiGIe96BTug4VNwYf3qALy6BHsWIfBOA3LVZD0QIIDeQLqSBBe2H1ISGrnOA+1+JA8EIUpAYc4uHce0Y1uOBEHqZGFmJD0oHDtyJDzMIX5WA/2aJK7hosD+YwSAY4qEJFhKJM7cI1NkY2uOBYrMBbUyJMRMJI2EZNa+IitiAL9GBQ4aZQ38I6Vh4jvd5H/89AtLCkOJSmVKcCUmyWTd5iUKbCVFuiVNmCWBNF391iAS4cCIDkRSumVLxmBRmmT3DiTTYaWNMCROCaVKAkNnoeV4jCR7RiY87CPv1iXLZkCjDkOVqmMhDmJXvmNjqlufCkDPulxXjmZFHGZWKGEmamGNGmUfkkPKYCXA9GVmUmVbqGSRqmW0/A4qlkP3TiaJACWK+GRiSib0rAotUkPc2mSvpmSkTmBTxkUiyIWw6mRjykRdKeRwWlu7MWcuMkCpzkRQPmQ05mYJ1Ccz2CYtoiY49CciTiLzcBd4OkM4vmJnimMx9mCzxkO6qmA15kCmxlt1zmf1ved9nmfJ/Ce//WQkXzJn4Don1nRnonomhx1nwYaDfWZFUVZjeNYHgD6oNAQobgGoCawnuMgkJ+Ioc+goU0RlRwqAiI6Dqw5kCmangi6oSdqh4yhoFrYohBAosEWoyJAnol3ojaKo1Cpo3F5fj5qnR0qFhMqiugZDuX4kD/6ov54ogJKD2yJm096pAl6ojwaDjSahldaAh4KAV0qhENaE7eJllv6VGE6pi2Yn/PmkL/YneMgJwAZFIqpkRU6ojoqAnJamCjQp/15nSL4FlV6n4A6DcCZbA66GHcqlWEqpn9aadeZnWK2pyLwqJFyqNGwosropjUBmzFKqfYAmu41mkhZE+bZjlOacP+k+pOjOahusZ2mKhaF2qImSpeLAaL3aKOed6oEkaRaKKqfYakksKWD+Z9SSW14EXeWqqkZl2dGKpWr2oTEOgJu2RQxFqbRGY6wqlPxmYljWROrFaacWok2Og1N2pknpgLOyqpGGa6hWa0kcK550q7PAKcg6KlnJ68jsKW3agI6GQ2NWom+qhK8yZMBYK/OUKgoGq0P2a1iMYzE+qhTOK3NUK5pGLDCya8jYLHNEJ1lCmImKayowbEjoJvrtwKPCqzyp68rwaafuKSQqgIJKxbp+oR56gwYi5bX2hRMs6QHO4EEoLD2gK8PSbLSQKAnYKNKO57xZ7KJ1nktULDTqKr/i9GI8iqz26qJNhuODJpkUMsNxneMYrGzB3iu0mC2aBmyEeFBRAsBHqiM8IprLKuRGgsN/5oCd/sMA5uvMisNWxujNVu2L0C19RC0FLkYshqqm/gCSBsNTRuHj6qQYXuybnGndfpdmQhlYiGaOvq3WCSziOt7HsullSsCjxsNnptyZJiIEKuBp8u6XRYDbEsQuvp5aAu531qNgysWA9uzQnGmB1i6gXq6qRsNFSWzoPqECZgVDCuve/sMq2u59aiNMxq7EfC1QRG4suYWzwuAtbt92HuUb4Fi2msTfet7zYsVywu1fxu5LBC9ziC83YeyzYi9xwsNcEi87QuAc+tc/7sbjvLrDMcHvEAnhC67EukLoJPbDLe1pbQWwKhmvymhtqM5jvR7eG+Rqjf3vyVatzJ5vpiYllU5gevraeMLencBaH97oxOYu7o7viJspjlguPAJvpVxu5XZdjnQwC4sfydcqtibwBGxuIsXqxLsYwNsuuNLvA+yA078w90XxdEwumhJxMaoAzMMF0m8YAbsrSlcod+Lj2bVfUuMrim8xSvBwRHgwUNhtIhGxRaawhQcER8IwfM7fD78mym8xxn8AlQMs92Fx9PwxzoKwxCwwCugxioxvfWWs88gsWGbv9EwxjSQp2z8ZW6MrSmMxRGRySOwx0Y8bkEMwClsw3YsBP+IbMi6dsbToMj3+bpNYcUnsMkO6HdyLJgpHAGu3AxwXAKEHMF1t8fR0L8mK8cWjJ2Bwcp45sn2lcZvGw1jGszNAMs+hsgxPL69DAHJ3AKUnM0ol8vQoMNSGb5NaQTUjG83R8ybmsLlZXNI8M0Ca3EKkM54C8Iyic0ziwTpLMlpJ14pnMvdDAPyrMvshson2MW2+MXXxQT2DMrPUdDicLPXqax3MdAxwM6JPGzvjBUYLZX6DAH43AL6PEtoxrm2NNIPac4TQcuK6FUKPRJ1vMbjy9DY+MswAMnqfGkILWExvbktnKG1EdTPQNHYIdF+ir3bLMwAxhjkzBc23Xrjq9P/EPDUNRDSJv0ipfxn2MvSJFk5laTSGFFcsoW/lSHWMiDOEHBm5EXU64i9Uf2WgmfPSfjTpVDPxGTXfbjVQYG1UaDRdf0iKM11levMHSHIbWhc3bXUhRy7g50VLt0DFq1eR8LYSYvT9/jYdFhqUjUgmv0W1nzFll3NXtDTLR0fpcUYkf2Qn+2LXjDZAoYdqX21ep2Grf2TtQ0DHd0UbJ0Wu91YaP2Lt90Uwc0DXo1jxb0JI+UZED2QfC0UzT0EM32CyY0JSE0PHy2Tv/1q8EdYVu0Jpr2D4zvcKuHPXhDXXUtUVJ3U473NoY1uprHamTDblWHUAEreE8G9WzDdjYzZ/5Rw3ba5yyQwTPGqBvgtFNXzKustDr19uhXo12Tw3CjMDkXUQNUtk9F34UQA2NKQTMiyHO9tqeFNwHAA4PYQ3YkASZkk4CuAtPotBguuuhr+Q9H8hiyuzDWR3VXA35+K4oJQ4cHRNjeeApTa4Ghw4KE543UQADFebbnNk9tNi0qeBIYNlYekCclCHT405C4Q5SKNBxJOeCEeCFbUQVyu23Q15prh1iLn33TQQtXBrGfOAipeD9+9BbbMb27+BjVUHXdusp/t41pg4vUgQY6QADxeenOegjkl319A6AOaQIrQ59wh6FBbVFUsCJBe6EskCAww2h7x4ot+AiDk6HK3PP9cFAi2UR+iPuqknukK1B0P8Oeldj71YeoCfj1Grgeb3hidPgfHYCC4zuK2sut70OtipuZYkAC27h/DfuNK8eRZgOyDgThuYD5sPuGuPgzUrp3WfgYmQdeKuu3a0FPcURa03gN/U+OCYenk3jwNEjdTzgJgQSTp/u6M4OX/cw22sOcqUBJ1oyTBhO/EQN974xJU4zUPgAzsTkzzTvCEgOkzogzn4BLBUIit4DXwUADZfhoeDvEM0eSVUQ4kX/INPx5CDvIMcdwGUx/MrPKkQCot/ybuDvOSQNYzDyUDb/MKleg5H0T+zvOWwPI/HxvPLvSYsNxF7x/3jvSZIPFLTx7/g+P0mZHlUd8eV071h1HnV6/lyq71wqTWXb+a0g72kzBOYx8bO2/2tDHiaR+SZc/2loDzb3+1Xy/322D1dc9vcY/38y3yOW9Kfp8hn773ztv0g08M02T481bziR8ses/4HZElj+9jPiH5chn0la9QzY754kD5m49ol+/5SRtQoR9rhiLuBwP6pz9tC4T5CCDprV9v0bH38DH7KMfsHU8kOYH7fmcXOe8Ymu/7A9Iau28fu3H3xI9mm6H63XE/DND3y48diXErcXEe0w+AzV8pW6H82e9vftH5UJM9D//9l9YaHJ8jBfDt5v+J3cAZ9mENfdP+narwjfM/LYEN0k//v1oHAgkhPAUyQKm6sq37sgNQGAJDRLm+873/A4PCIbFoPCKTyiWz6XxCo9IptWq9YrPIAKFLcAgMhcKgbD6j0YvxuGbrauPyOb1uv+Pz+j2/7/8DBgoOEhYaHiImKi4yNjo+QkZKTlJWWl5iZmpucnZ6foKGio6SlpqeoqaqrrK2ur7CxsrO0tba3uLm6u7y9vr+AgcLDxMXGx8jJysvMzc7P0NHS09TV1tfY2drb3N3e3+Dh4uPk5ebn6On44UAACH5BAkEABEALAAAAACUAmYBAAX/YCSOZGmeaKqubOu+cCzPdG3feK7vfO//wKBwSCwaj8ikcslsOp/QqHRKrVqv2Kx2y+16v+CweEwum8/otHrNbrvf8Lh8Tq/b7/i8fs/v+/+AgYKDhIWGh4iJiouMjY6PkJGSk5SVlpeYmZqbnJ2en6ChoqOkpaanqGsKBKwEDgKwsbKzswytqbg4Ca20vb62rAm5wy2sBwUFA8oDEM3Oz9DR0s3LAAUCBMTaIgnHCMvT4eLOywMIBQasCtuk3QIGyczj8/Th5tcH2eygCQwCDwvk1RtIcMCCBwIc6NtXyVWDZAQjSpx2T0A+hpP6/Qs4sWNHgwYUYlykgIEBjh5T/6okhwDhwpGFCDRAubLmRHMPGKyDCUjBQ4E2g6o0KEAYzz4KDjwAILSpR5Avj9IJwKDBN6dYayIwwECqnaoIsor1CMDAgZ1e2wRwsHSs25UAHkRNm0bp27sfr6GlSybAMaB4A0sE4CAAXzMmmQpeHBGBg72HuRwwwLjyx3SRvySwarkzwQKFM2ORqdiz6YGODYu2osBB2NOw6ZldHcXv69i45w3ATPuJX4i5g4cDIABy7yI+SwtfPi318SQMHgBmTt0Z7+dCGBSozp3idew/kncfDw3BAdXgdxy4Tb59M+fpdRCQ7r4+BOLo49MQwN6++wENGKffC9r5Z2BZ+Q3YAv9/BjbYjAECKogCAQs42CCCEq7gmoUW7hZhhhEQsB2HDgLQQIIgHqAciReeCCIJCYzIIocCoKgfhTPOiB+IClCWI4uOSRjjjz+ap2AAAhBZZFfprbWikiQWYBR4DPQHJYkBYkeAlVey6OJxClTYJZGE9RbAA2NeiQCTqzWQ5pULzJWWA0++meMDH/JEQJ12zvhlWmH2OWaZdAXgpqBdAiAnRg4g+mYBNjLEAJ+O5mhApNoEWumbDvBk6KZvKjqSiqDaWUCeqSQgZqlp1sjOmaz2CQCb2jQaq50LTJlLAlzeeqUA2gQgo69pAnDAMAJQSqySC6AKyp7LCgopKsJGi+j/rKnYaq2si3qSgLLbQglsKbCGi+ixo0xqrqPTiqLpuoI2IMqh8CKKgLOVfFuvowtgWkm1+zqKrScHBFwpALpi8m6X91zjy8MCIBPPdGOiuwm9giqzADoQ9/JQPKFafIm+OWpsQEKs+DsDK/4AlKYBm6CZ5gDINJBPwjas4s8/AFBMIybqkriVSEoE4IoBVyn5gMqMBLCqkuYYgDMRJUVsqSUFd+gSvkcQIABNLPb779MsgkQ0FARMBi557UaSpIE0n50FVTP5bF+zGfXqX0tyX5HUA3qPhzckGLeHQAMEMH0FVcCVOLUiJJdoFtdVJOAA2e3l+oiP5BnkwONjTAZ2/30IPxL53lypUZIBawdXOiMyj0cY5WKslTTp3RJyunvE0Q7Gb7yDLkjs1ZVF6xw+2U2dqJC37nrqdbSGOXPMH8I5dQt0uocCAijPnPB/7N6dkXsQwHp3rxdyvXC75W4HkoELl77uzsM2gFw9bVg8+HqsnxuAisNDgcgzv0CIj3rFKcQBpoebAvrBf7EBYCJERED+3eGA8nMVIra0PAvSAYKn2U0A/0BB9HlwDk5DnwYXUSXqnRAOIDTNqSJRwv39IYXFW6Ej9Bece/XhbblZwPEggaPqiK0PMbSfDiGBpPoF5oh5yFoDx3WJ9RhxhG1I4mkgpDDixQaKdpBibGaoif8mYg+LatCiZwrgvkgEDTcLwAO0YkO+TihgWMGBGR7EmBtCdcJQ3luMHumAwcr86RNvzOMd+IibpYlCVbmRFwoZyJiBjaJcwtHeHAiwHEuOQo2CEdkbKLkYMpoikbhp4xkU4ES8OPIUqOyMA9cAyrcMQJPU8iJsAOC735GyMp48BSZNw8s3ANEzmiNGLE0TRzjo0jSvHAadYNNMNnDyNNEkBsBwQ0U2aGuXohwGB7fIBlYSE5fsOCZsVAmGBATyiS8cxR1hg84y4FCW7ETFHHfZy7nFTzCX4kkt3RJPLAw0K2AcyT2xuYZnWqaeGGEkYxCARitIFKAVTcVB3QJRMVz/tJJDhMk+LVMAMxTyLh3lyTc9M4CCVsGcp0GAS3GxsMp0Mwy/HIuxRLNMxpTUDHi0TELTsk3L5JMKhROMTGlzUryEEwwrtUw2I5NUpWbUCQzozFAjU9PFVHMMMPXMIGnz0buMlQthFSR4FrqYo1ohp285K1NbKZSQYiGoeJGrmeDqlJ+SQZ2V0etcLQOAqyahrGMRrJkcKpYB9FMK7jTNU4/TVLE8gAsBoGtNUvqcjapEkmRgrFMl1FW82HUKohXLZNPj2Y4UtgxZ9cxqsZNZYBqWCLFdzE0lxFeVcHYLte0MaDPEq8pcdnGaVcls48NWpyDADFUNjGL1E4B/YsWt/0ZorUp2C6Lm1rUM17TMdAdUWad8VQrhle6LThDcvpqht0457nphlNyUcNcJ8K3JeIlbX3vMNApRfeJtmVrJx/4gwGM573xJkF6b7Hdu/U0JRRd8AsRiRb6+iXBEtkrhCFiYIK8NLWH/Cx4EjwW7P4huVkLc4ROoWCL37UKDBYPiAWnXIwpWggIE09IWq+DGz5gwGfIblN92GK9jWS4RkJwVJXfYuxFxMhY+jJUHU7i9d3luE2Y8luH6GAVplYhfa6fhiXD4y9wo80BivOTAjBnNE0pJjaMA2LsUE84pMDFWWIwELq94wCCqs2zsqeaInBbPIgAyjJdAZI+QeL5Evv/zGFKbFS8j2gTVDQyfi+BnrFj60iYI8zzYvIVOJxjUK4gsXkjtA+vWJMeoLgGVm7FpMFDaKT2OdQoEvWdAv8DUQnGsrlcwUClfAdhZYXWsmewUZeuA2UIxsq4zPQ9Ye8HVQrH2sNOMFwAYAdk2efO2T5AAeswZCnrOSq7HjQJeO8XYNoC2TSTNbhS8GAIYDgOW8fLpeo+g0RPRshDKfRdnb3vfzxD2Xyfqax+D2ybwnoGi6yFwf6cgt9HodxcU8M6mnBvRE6+HuHmAcKwc2uIieGatvxDyiFiZ3aLOioFZkO5wo5wFCJf2aCrZcDi7WygvlwG2nzLzWKuz4mKQd7P/b86CoZOl5wwuONNxzp6PY5Ux2p56iEbrg5aLY+VaJ0FuR/4Fp9fE6svOsg8CcJeIo3w76/YoYzQedhHs+C5oJ0HNV4L0up+A40GvQsnHImS/o8Dr4gh809/idsOD4ecmd3wKOP4WsM+A4ISXPBxiPhayaz4CiA9H4+3N+M+7IfS6KXq9Ke+WfNvA7I0xfRtUHRiD+x310vA1xrOic9l7QelCKbzvSXB3t4y+BPeGy/DV8HCh5N3fuIdG1l1Q6GnYfvlZgH1KXI/9rb+l6M33iOq774RZzxvq/gY4QXpP+sSSn9C6fb8JzN8Rz7tA+wN5vvyRAPmmCH//EYB/A2FY/5iHUAAYBpwnFvp3c/2nXDXQgB5xfAe4BNEXDty3f8UnFor3b2MxAOg3gUFAe3Y2fnV3aynhbTPAdmNxgSBoBcAXFNfne/Q3ESi2e+/WglwQflrxgUw3eDAocTqFg1wggBMhgZ9Xgc0wfSdAhOOwgUJ4BDOoEvZ3gDboFGiUgZH3hIvDhBGxgH5XfdJwcvMXhFp4BRDoYGVIAsn3WTGwhh7hhGkYBD7Ya3EoAlWYbTGgfvRghHXIA0goDTH4fmAYDTCggurGg30oA6yHF/+XhiboEfmkgxExhYloBC8IcZXoYW5hcGe4aJm4ZaX0iYaYFSxoApcoEY/2iTaghzSoiv+sOA4o2AKD6AyxqIqHpVaq2IkSgS+jGF+2WDRcOBD0VomSaGjFMBbs94s5oIvbpYwd1xHKxowDkYrK+AJz6BSWV4enGBGlOAIVOADVeAR/GA3JiIPSSHEt8IrhQInhmAOLqHbVWIwE0QJjEYjtGAPbqBJiGIe96BTug4VNwYf3qALy6BHsWIfBOA3LVZD0QIIDeQLqSBBe2H1ISGrnOA+1+JA8EIUpAYc4uHce0Y1uOBEHqZGFmJD0oHDtyJDzMIX5WA/2aJK7hosD+YwSAY4qEJFhKJM7cI1NkY2uOBYrMBbUyJMRMJI2EZNa+IitiAL9GBQ4aZQ38I6Vh4jvd5H/89AtLCkOJSmVKcCUmyWTd5iUKbCVFuiVNmCWBNF391iAS4cCIDkRSumVLxmBRmmT3DiTTYaWNMCROCaVKAkNnoeV4jCR7RiY87CPv1iXLZkCjDkOVqmMhDmJXvmNjqlufCkDPulxXjmZFHGZWKGEmamGNGmUfkkPKYCXA9GVmUmVbqGSRqmW0/A4qlkP3TiaJACWK+GRiSib0rAotUkPc2mSvpmSkTmBTxkUiyIWw6mRjykRdKeRwWlu7MWcuMkCpzkRQPmQ05mYJ1Ccz2CYtoiY49CciTiLzcBd4OkM4vmJnimMx9mCzxkO6qmA15kCmxlt1zmf1ved9nmfJ/Ce//WQkXzJn4Don1nRnonomhx1nwYaDfWZFUVZjeNYHgD6oNAQobgGoCawnuMgkJ+Ioc+goU0RlRwqAiI6Dqw5kCmangi6oSdqh4yhoFrYohBAosEWoyJAnol3ojaKo1Cpo3F5fj5qnR0qFhMqiugZDuX4kD/6ov54ogJKD2yJm096pAl6ojwaDjSahldaAh4KAV0qhENaE7eJllv6VGE6pi2Yn/PmkL/YneMgJwAZFIqpkRU6ojoqAnJamCjQp/15nSL4FlV6n4A6DcCZbA66GHcqlWEqpn9aadeZnWK2pyLwqJFyqNGwosropjUBmzFKqfYAmu41mkhZE+bZjlOacP+k+pOjOahusZ2mKhaF2qImSpeLAaL3aKOed6oEkaRaKKqfYakksKWD+Z9SSW14EXeWqqkZl2dGKpWr2oTEOgJu2RQxFqbRGY6wqlPxmYljWROrFaacWok2Og1N2pknpgLOyqpGGa6hWa0kcK550q7PAKcg6KlnJ68jsKW3agI6GQ2NWom+qhK8yZMBYK/OUKgoGq0P2a1iMYzE+qhTOK3NUK5pGLDCya8jYLHNEJ1lCmImKayowbEjoJvrtwKPCqzyp68rwaafuKSQqgIJKxbp+oR56gwYi5bX2hRMs6QHO4EEoLD2gK8PSbLSQKAnYKNKO57xZ7KJ1nktULDTqKr/i9GI8iqz26qJNhuODJpkUMsNxneMYrGzB3iu0mC2aBmyEeFBRAsBHqiM8IprLKuRGgsN/5oCd/sMA5uvMisNWxujNVu2L0C19RC0FLkYshqqm/gCSBsNTRuHj6qQYXuybnGndfpdmQhlYiGaOvq3WCSziOt7HsullSsCjxsNnptyZJiIEKuBp8u6XRYDbEsQuvp5aAu531qNgysWA9uzQnGmB1i6gXq6qRsNFSWzoPqECZgVDCuve/sMq2u59aiNMxq7EfC1QRG4suYWzwuAtbt92HuUb4Fi2msTfet7zYsVywu1fxu5LBC9ziC83YeyzYi9xwsNcEi87QuAc+tc/7sbjvLrDMcHvEAnhC67EukLoJPbDLe1pbQWwKhmvymhtqM5jvR7eG+Rqjf3vyVatzJ5vpiYllU5gevraeMLencBaH97oxOYu7o7viJspjlguPAJvpVxu5XZdjnQwC4sfydcqtibwBGxuIsXqxLsYwNsuuNLvA+yA078w90XxdEwumhJxMaoAzMMF0m8YAbsrSlcod+Lj2bVfUuMrim8xSvBwRHgwUNhtIhGxRaawhQcER8IwfM7fD78mym8xxn8AlQMs92Fx9PwxzoKwxCwwCugxioxvfWWs88gsWGbv9EwxjSQp2z8ZW6MrSmMxRGRySOwx0Y8bkEMwClsw3YsBP+IbMi6dsbToMj3+bpNYcUnsMkO6HdyLJgpHICBAcclQMgRXHd7HA39a7JybMHYGRisjGeebF8pLMucWQTA3Ayw7GOIHMPj68oXC4Wa1sWrkcvQoMPSSmNIMM34dnPDvKnP/LbqjASUvJP+pgDmjLcgbJKce11KYM6SnHbidcqCgcwx8M7tPG6ofILerIrpPLP5LBig/BwCPQ43e53NTJlMkNDVTF4tvI4prM3OUM8tcM334dGRcc+vKdIDCckQQMuK6FUHjRF1vMbjG76u5cswgNLLrB8FLWEtXYlfrKhQMNEREdHY8dBzOsQZHck7rXeMIc580dNvcdO4SdJYwdT/NQDSIf1lpfxn2IvSEADQOuDU2GjSDFFcsrXVlSHWMQDOEHBmGC1D2KvWUkwFyipg8yXPxJTUdUjUlYzXcYZ1fP0JUl16xmtUWpDTEgHVXhHYrRe7el3FwDXP1iEhiq1TNH2PthwUo1zRUjUgkz0WF+2VjS2wXmDYEqHSuVBajGHaR9sZiI0Ecy0YbM0XqH21f/2EoQ0Nmf0E5RWatR0Ju13SlQvXHS0GMt3IaM0JI+UZDX2PXK2nkyZLx50Jt82VYTtMWAd/hEXVnkDafNfb+crRSVvZRADWyFgozc3EHEvWnfHZT1Dcu+kVs10ZQm2a7EwP3LsFL70SgzMqwdHa/zx53tK7Bp29Z4KsCAEA4NMQ2wAa34zo3VN51OJw36FQRA0U3X3YU4th4ZxGTRpOCMI9Duw9kNbdGdr9BNMtDQOw3JAD3gMx3xqJ4Ysh4WGA4NLb4T9U3x2h2rY44p3h1ViQ3zaR4qVA4cHRNnsK4yw9FSwuDskE2DTO5A7efTwO3e8D4bpxSJqQLNThQ5Y6Tblh40yQ1VkW4oBgRR1kqUMSHGTuBb+NF6ZECS1UHcwKoIAkHCWuBZd9F1kiCTVUHXdeh14eHCouGcshQY6QAEDOwzEa6Ir0BydOD72zCH3OHYOehma+HDoeBo+ekkskCAyw5Ckh4wNJKtSR6XK3PP9cFAi2UR+iHo62wx2mHjrd8QB/rgXmY+VoeJ2k0R2xTgabvpadPgfHYCC9DoLDPh7F7uvtUQBrfgUJcD7EPpo9gusdyQi/PhiI4wa3biGtnomtAdnv3QjXrp3ZfgYmAe5YUelAfDn+oe5rgOTUMxtg8Dc4XntGuRmgPsKQ0ObBETdg3gJgQSS1Pnx+gTQWMvBuwO+Ffg22IN4sUBJ1oyTBFGtLcQ0FbgK7MBnojo0Xrwr5TqsuQTVe8wDIUO+eMUuo9jQNYzM0CvGNwyIoz0RWHRjKcA4uEQyF2ApeAw8FQO3M9O9e4T0GgQwW0Qrx1AoH8DE9AycOfwdPvhjlEPX/Um/y3WHk4zadU5/1yoAoVo8J7m0w9uHfL0LeYA8B3b4IpF72Y+Lux5HQb4Lwe6Deak8mzS4hbp8oQF8HUz73DrLfKPfhRNL1ofD1fB8byQ4egJ8jbD8IyV349gH34PH0FlI9qVBUjp85TT8gM/8jgo8KWn755IHlU7f5ML/4Kw763LEmkufzJNLk+4AkqM8cnT91VK/4UQ4I4xT7u1T3LZac64IAHf8I3K37HTFVhnf3DiL6RyH3xB8Yqi97yL83ee82rA/6yu944y47pr8JPdL8b/Hmspf4yJ75ofDp3o8VdbR84m9EvJ8LjH7+J7j9RxYufsTZnw//HbHn70f6/zkEAkE0kqV5oqm6sq37wrE8n0oD4bm+873/A4PCIbFoDAoUtCWz6XxCo1La4mi9YrO8hnLq/YLD34ABoD2j02otV+x+w+Ny2GBtvxMBBtG87/832eANEhYK6fEBKi4yNpLUGUautTlWWvoFNCBIcnZqAVBeio6S0iR4ohqBJpa2ujYFHFSl0tbiICS96u62Etj+6iA4sPIWG6cwPAAvEwoTH0NHv/ky0y4wSGdnJ5RVe2c9YGuPk0sJfHPqJZSzGx8oo8f/CHe129+7nMsPLjjg/79S4MDMvngDDIgDqHBhBAMF14Bax3CiqASaHgIbEO4ZxY7jCmD8hNAjyUsMuv+FTPfgAMeSLo+BTKlqZcuXNvtY3CTzDoKRN39GI7gTiJ6EQI8qioVyqJUB/SQijboLEtMdK+tJzQpIYAGhVX0UaEBAK1lXAb7iKCAAatm2gBIcuPgVQAEHY93iFUVNph67ef8yCkBAwIMCVNENQPBAAIGagB/3CVD4sDenahlghaxZUYLBhRFQljSArgEBDO5uTl1JAQEHAgosCG1odIHLqFXjtiSYAG/XBmoPCC58OHHiC2rXLm2ad+7mrjoLENAAOfDi1osjKLCYMW8CmZ2DDy9+PPny5s+jT69+Pfv27t/Djy9/Pv369u/jz69/P//+/v8DGKCAAxJYoIEHIpgpoIILMtiggw9CGKGEE1JYoYUXYpihhhty2KGHH4IYoogjkliiiSc2FwIAIfkECQQAEQAsAAAAAJQCZgEABf9gJI5kaZ5oqq5s675wLM90bd94ru987//AoHBILBqPyKRyyWw6n9CodEqtWq/YrHbL7Xq/4LB4TC6bz+i0es1uu9/wuHxOr9vv+Lx+z+/7/4CBgoOEhYaHiImKi4yNjo+QkZKTlJWWl5iZmpucnZ6foKGio6SlpqeoawoErAQOArCxsrOzDK2puDgJrbS9vrasCbnDLawHBQUDygMQzc7P0NHSzcsABQIExNoiCccIy9Ph4s7LAwgFBqwK26TdAgbJzOPz9OHm1wfZ7KAJDAIPC+TVG0hwwIIHAhzo21fJVYNkBCNKnHZPQD6Gk/r9CzixY0eDBhRiXKSAgQGOHlP/qiSHAOHCkYUINEC5suZEcw8YrIMJSMFDgTaDqjQoQBjPPgoOPAAgtKlHkC+P0gnAoME3p1hrIjDAQKqdqgiyivUIwMCBnV7bBHCwdKzblQAeRE2bRunbux+voaVLJsAxoHgDSwTgIABfMyaZCl4cEYGDvYe5HDDAuPLHdJG/JLBquTPBAoUzY5Gp2LPpgY4Ni7aiwEHY07DpmV0dxe/r2LjnDcBM+4lfiLmDhwMgAHLvIj5LC18+LfXxJAweAGZO3Rnv50IYFKjOneJ17D+Sdx8PDcEB1eB3HLhNvn0z5+l1EJDuvj4E4ujj0xDA3r77AQ0Yp98L2vlnYFn5DdgC/38GNtiMAQIqiAIBCzjYIIISruCahRbuFmGGERCwHYcOAtBAgiAeoByJF54IIgkJjMgihwKgqB+FM86IH4gKUJYji45JGOOPP5qnYAACEFlkV+mttaKSJBZgFHgM9AcliQFiR4CVV7Lo4nEKVNglkYT1FsADY16JAJOrNZDmlQvMlZYDT76Z4wMf8kRAnXbO+GVaYfY5Zpl0BeCmoF0CICdGDiD6ZgE2MsQAn47maECk2gRa6ZsO8GTopm8qOpKKoNpZQJ6pJCBmqWnWyM6ZrPYJAJvaNBqrnQtMmUsCXN56pQDaBCCjr2kCcMAwAlBKrJILoArKnssKCikqwkaL6P+sqdhqrayLepKAsttCCWwpsIaL6LGjTGquo9OKoum6gjYgyqHwIoqAs5V8W6+jC2BaSbX7OoqtJwcEXCkAumLybpf3XOPLwwIgE890Y6K7Cb2CKrMAOhD38lA8oVp8ib45amxAQqz4OwMr/gCUpgGboJnmAMg0kE/CNqzizz8AUEwjJuqSuJVISgTgigFXKfmAyowEsKqS5hiAMxElRWypJQV36BK+RxAgAE0s9vvv0yyCRDQUBEwGLnntRpKkgTSfnQVVM/lsX7MZ9epfS3JfkdQDeo+HNyQYt4dAAwQwfQVVwJU4tSIkl2gW11Uk4ADZ7eX6iI/kGeTA42NMBnb/fQg/EvneXKlRkgFrB1c6IzKPRxjlYqyVNOndEnK6e8TRDsZvvIMuSOzVlUXrHD7ZTZ2okLfueup1tIY5c8wfwjl1C3S6hwICKM+c8H/s3p2RexDAenevF3K9cLvlbgeSgQuXvu7OwzaAXD1tWDz4eqyfG4CKw0OByDO/QIiPesUpxAGmh5sC+sF/sQFgIkREQP7d4YDycxUitrQ8C9IBgqfZTQD/QEH0eXAOTkOfBhdRJeqdEA4gNM2pIlHC/f0hhcVboSP0F5x79eFtuVnA8SCBo+qIrQ8xtJ8OIYGk+gXmiHnIWgPHdYn1GHGEbUjiaSCkMOLFBop2kGJsZqiJ/yZiD4tq0KJnCuC+SAQNNwvAA7RiQ75OKGBYwYEZHsSYG0J1wlDeW4we6YDByvzpE2/M4x34iJuliUJVuZEXChnImIGNolzC0d4cCLAcS45CjYIR2RsouRgymiKRuGnjGRTgRLw48hSo7IwD1wDKtwxAk9TyImwA4LvfkbIynjwFJk3DyzcA0TOaI0YsTRNHOOjSNK8cBp1g00w2cPI00SQGwHBDRTZoa5eiHAYHt8gGVhITl+w4JmxUCYYEBPKJLxzFHWGDzjLgUJbsRMUcd9nLucVPMJfiSS3dEk8sDDQrYBzJPbG5hmdapp4YYSRjEIBGK0gUoBVNxUHdAlExXP+0kkOEyT4tUwAzFPIuHeXJNz0zgIJWwZynQYBLcbGwynQzDL8ci7FEs0zGlNQMeLRMQtOyTcvkkwqFE4xMaXNSvIQTDCu1TDYjk1SlZtQJDOjMUCNT08VUcwww9cwgafPRu4yVC2EVJHgWupijWiGnbzkrU1splJBiIah4kauZ4OqUn5JBnZXR61wtA4CrJqGsYxGsmRwqlgH0UwruNM1Tj9NUsTyACwGga01S+pyNqkSSZGCsUyXUVbzYdQqiFctk0+PZjhS2DFn1zGqxk1lgGpYIsV3MTSXEV5Vwdgu17QxoM8Srylx2cZpVyWzjw1anIMAMVQ2MYvUTgH9ixa3/RmitSnYLoubWtQzXtMx0B1RZp3xVCuGV7otOENy+mqG3TjnuemGU3JRw1wnwrcl4iVtfe8w0ClF94m2ZWsnH/iDAYznvfEmQXpvsd279TQlFF3wCxGJFvr6JcES2SuEIWJggrw0tYf8LHgSPBbs/iG5WQtzhE6hYIvftQoMFg+IBadcjClaCAgTT0har4MbPmDAZ8huU33YYr2NZLhGQnBUld9i7EXEyFj6MlQdTuL13eW4TZjyW4foYBWmViF9rp+GJcPjL3CjzQGK85MCMGc0TSkmNowDYuxQTzikwMVZYjAQur3jAIKqzbOyp5oicFs8iADKMl0Bkj5B4vkS+//MYUpsVLyPaBNUNDJ+L4GesWPrSJgjzPNi8hU4nGNQriCxeSO0D69Ykx6guAZWbsWkwUNopPY51CgS9Z0C/wNRCcayuVzBQKV8B2FlhdayZ7BRl64DZQjGyrjM9D1h7wdVCsfaw04wXABgB2TZ587ZPkAB6zBkKes5KrseNAl47xdg2gLZNJM1uFLwYAhgOA5bx8ul6j6DRE9GyEMp9F2dve9/PEPZfJ+prH4PbJvCegaLrIXB/pyC30eh3FxTwzqacG9ETr4e4eYBwrBza4iJ4Zq2/EPKIWJndos6KgVmQ7nCjnAUIl/ZoKtlwOLtbKC+XAbafMvNYq7PiYpB3s/9vzoKhk6XnDC4403HOno9jlTHannqIRuuDlotj5VonQW5H/gWn18Tqy86yDwJwl4ijfDvr9ihjNB52Eez4LmgnQc1XgvS6n4DjQa9CycciZL+jwOviCHzT3+J2w4Ph5yZ3fAo4/hawz4DghJc8HGI+FrJrPgKID0fj7c34z7sh9Loper0p75Z828DsjTF9G1QdGIP7HfXS8DXGs6Jz2XtB6UIpvO9JcHe3jL4E94bL8NXwcKHk3d+4h0bWXVDoadh++VmAfUpcj/2tv6XozfeI6rvvhFnPG+r+BjhBek/6xJKf0Lp9vwnM3xHPu0D7A3m+/JEA+aYIf/8RgH8DYVj/mIdQABgGnCcW+ndz/adcNdCAHnF8B7gE0RcO3Ld/xScWivdvYzEA6DeBQUB7djZ+dXdrKeFtM8B2Y3GBIGgFwBcU1+d79DcRKLZ779aCXBB+WvGBTDd4MChxOoWDXCCAEyGBn1eBzTB9J0CE47CBQngEM6gS9neANugUaJSBkfeEi8OEEbGAfld90nBy8xeEWngFEOhgZUgCyfdZMbCGHuGEaRgEPthrcSgCVZhtMaB+9GCEdcgDSCgNMfh+YBgNMKCC6saDfSgDrIcX/5eGJugR+aSDETGFiWgELwhxlehhbmFwZ7hombhlpfSJhpgVLGgClygRj/aJNqCHNKiK/6w4DijYAoPoDLGoioelVqrYiRKBL6MYX7ZYNFw4EPRWiZJoaMUwFuz3izmgi9uljB3XEcrGjAORisr4AnPoFJZXh6cYEaU4AhU4ANV4BH8YDcmIg9JIcS3wiuFAieGYA4uodtVYjATRAmMRiO0YA9uoEmIYh73oFO6DhU3Bh/eoAvLoEexYh8E4DctVkPRAggN5AupIEF7YfUhIauc4D7X4kDwQhSkBhzi4dx7RjW44EQepkYWYkPSgcO3IkPMwhflYD/ZokruGiwP5jBIBjioQkWEokztwjU2Rja44FiswFtTIkxEwkjYRk1r4iK2IAv0YFDhplDfwjpWHiO93kf/z0C0sKQ4lKZUpwJSbJZN3mJQpsJUW6JU2YJYE0Xf3WIBLhwIgORFK6ZUvGYFGaZPcOJNNhpY0wJE4JpUoCQ2eh5XiMJHtGJjzsI+/WJctmQKMOQ5WqYyEOYle+Y2OqW58KQM+6XFeOZkUcZlYoYSZqYY0aZR+SQ8pgJcD0ZWZSZVuoZJGqZbT8DiqWQ/dOJokAJYr4ZGJKJvSsCi1SQ9zaZK+mZKROYFPGRSLIhbDqZGPKRF0p5HBaW7sxZy4yQKnORFA+ZDTmZgnUJzPYJi2iJjj0JyJOIvNwF3g6Qzi+YmeKYzH2YLPGQ7qqYDXmQKbGW3XOZ/W9532eZ8n8J7/9ZCRfMmfgOifWdGeieiaHHWfBhoN9ZkVRVmN41geAPqg0BChuAagJrCe4yCQn4ihz6ChTRGVHCoCIjoOrDmQKZqeCLqhJ2qHjKGgWtiiEECiwRajIkCeiXeiNoqjUKmjcXl+PmqdHSoWEyqK6BkO5fiQP/qi/niiAkoPbImbT3qkCXqiPBoONJqGV1oCHgoBXSqEQ1oTt4mWW/pUYTqmLZif8+aQv9id4yAnABkUiqmRFTqiOioCclqYKNCn/XmdIvgWVXqfgDoNwJlsDroYdyqVYSqmf1pp15mdYranIvCokXKo0bCiyuimNQGbMUqp9gCa7jWaSFkT5tmOU5pw/6T6k6M5qG6xnaYqFoXaoiZKl4sBovdoo553qgSRpFooqp9hqSSwpYP5n1JJbXgRd5aqqRmXZ0YqlavahMQ6Am7ZFDEWptEZjrCqU/GZiWNZE6sVppxaiTY6DU3amSemAs7KqkYZrqFZrSRwrnnSrs8ApyDoqWcnryOwpbdqAjoZDY1aib6qErzJkwFgr85QqCgarQ/ZrWIxjMT6qFM4rc1QrmkYsMLJryNgsc0QnWUKYiYprKjBsSOgm+u3Ao8KrPKnryvBpp+4pJCqAgkrFun6hHnqDBiLltfaFEyzpAc7gQSgsPaArw9JstJAoCdgo0o7nvFnsonWeS1QsNOoqv+L0YjyKrPbqok2G44MmmRQyw3Gd4xisbMHeK7SYLZoGbIR4UFECwEeqIzwimssq5EaCw3/mgJ3+wwDm68yKw1bG6M1W7YvQLX1ELQUuRiyGqqb+AJIGw1NG4ePqpBhe7Jucad1+l2ZCGViIZo6+rdYJLOI63sey6WVKwKPGw2em3JkmIgQq4Gny7pdFgNsSxC6+nloC7nfWo2DKxYD27NCcaYHWLqBerqpGw0VJbOg+oQJmBUMK697+wyra7n1qI0zGrsR8LVBEbiy5hbPC4C1u33Ye5RvgWLaaxN963vNixXLC7V/G7ksEL3OILzdh7LNiL3HCw1wSLztC4Bz61z/uxuO8usMxwe8QCeELrsS6Qugk9sMt7WltBbAqGa/KaG2ozmO9Ht4b5GqN/e/JVq3Mnm+mJiWVTmB6+tp4wt6dwFof3ujE5i7uju+ImymOWC48Am+lXG7ldl2OdDALix/J1yq2JvAEbG4ixerEuxjA2y640u8D7IDTvzD3RfF0TC6aEnExqgDMwwXSbxgBuytKVyh34uPZtV9S4yuKbzFK8HBEeDBQ2G0iEbFFprCFBwRHwjB8zt8PvybKbzHGfwCVAyz3YXH0/DHOgrDELDAK6DGKjG99ZazzyCxYZu/0TDGNJCnbPxlboytKYzFEZHJI7DHRjxuQQzAKWzDdiwE/4hsyLp2xtOgyPf5uk1hxSewyQ7od3IsmCkcgIEBxyVAyBFcd3scDf1rsnJswdgZGKyMZ55sXyksy5xZBMDcDLDsY4gcw+PryhcLhZrWxauRy9Cgw9JKY0gwzfh2c8O8qc/8tuqMBJS8k/6mAOaMtyBskpx7XUpgzpKcduJ1yoKBzDHwzu08bqh8gt6siuk8s/ksGKD8HAI9Djd7nc1MmUyQ0NVMXi28jimszc5Qzy1wzffh0ZFxz68p0ouzAA29GpAMAbSsiF510BhRx2usBzgkyCqluL4MAyu9zPpR0BIG00xwT/vcYV+sqFAw0RER0djx0HOaB2zlyNSV0ZEM1P96xxjizBdF/RY83RfT09J8QdJYcdU1ANIh/WWl/Gd4wLlKTRsrDQEArQNZjY0mzRDFJVt4UFrPwL2sVRlzHQPgDAFnhtEyhAfl5dU88ddSTAXKKmDzJc/ERNVIUF4uOl9MXcmQHWdYd9mfANalZweSTcDrVdnRYNMw4NMSsdVewdmtd0GaJdbbINr6C1zzbB0Soto6ldOVU1+uPQy2HBSjXNFSNSC2PRYX7QWfTbn6AdvQUNxFYNoSYdipgNelKQfHLXrxodzPgNpIsNiCEdh8Id1WVQfVLQ5r/dqypNkuMN424d1eod50K95gqNcwgdgdLQbhuxLJJBoj5RkpTQX/7k2tbM3fIjZiooHdGk1IS8reGDFMWAd/hLXbnODcfIfeIfi3PvTVHJ20uE0EcY2MhdLWfjoHPfWTfZ0vsy2waHDf+uUV4M0Y5b0FsD0AEI417EwP8p0FMo3fGz4JBi4O2i0ZldE2GAHi0rcGw71npI0IAUDk4aDgZtDjELBUDNHiWUbhOHDWYnHjn1BEDVTiTADl1NDfjzDiguHl30ZNZl4I9D0OzJ0FYP4MQp4KDN4ZM/7lSrQrGT4QL+7mfVTnhkDmgqHlLPdFae4H3bMc0C0FvYsbcS4Kc94Zb40FOW4TAyDmgsDlwdHobvDm0+BHogDo3W3lP3DkCVbo78Pk/9Um6kCA6uIg5Zs96b5t6kUj1Sl5SJqQLNRx4XZA1gMhQp4wTbkh60uA5YTa5oBgRR3k1HkOYkuUL7zunXnw31lhSpTQQtXBrHbg2MvT7EzUADVehHzQ23eRJZJQQ9Xh51cg7Vm253kA7MFh6VrA6dIgQY6QALDe2X0AzbARJI/g7or0B/KetAmkCObOHfDOBQzw7VoRGoqA7IguCAE/79wOCAyw7Ckh6G8Q8RjJ8ApE6xOR6HK3PFwUCLZRHxgPBxqvG+QOCLbDHSAfOt3xAOh+bOdTHy8/BirOGAZxHn1AGt1x8zA/PhMfB8dgIECP83uz8mH07B/f8O1RAMaOBf8JUPP+cfRkkPK9vgA8Lwc94vEGywhY/3WI4wbm4/VOcfKL5CA7r+o5w0PkYfVPbh8mkuQ8YBInjhUHXxccEjc7PgTS4x95nwag3kmzAQZ/o/CrFglh3xGHQ/c0sBkWP8KQoO4sBRrCzgJgQSQzvwYJXzIP8BhzMxl3LxSbvwaUH0LXYAt9rwIlUTdKEkyTb/Z29vmOzw1pgzQkUj2TQOX10RLYQDVe8wDIgPiydPlocPrU0TA2Q6Ot3zgsMkuRUFQlcw8uEQyF2ApeAw8FIPvIZPxpQOpqvzH40Arx1AoH8DE9AyerXwesrvPl8P7w7yuaTglLfivwf//lgCjzXwn/OQ8CkDiSpXmiqbqyrfvCsWw+kX3jub7zvf8Dg8LhzjA7IpPKJbOJbBCj0im1Gj0AnNott+tFCqziMbncc3zT6jV7eTDD43JiAtG+4/NsAGPu/wNGEGTpFRoeHgEkBDI2jgU8IEpOUo4sKDhmahIpFFR+guIVBGyWmp6FpqpuGZy6vto0rM7SHoXB4pYO1vL2orzlBmdi+Rb7AhAIKzcGeBo/q14uTwMqLEBjg45Sc/sJEGaHFzaQdpubBciKr+MB3J7DkyVcs9d/IfTF64sx2Nn/b1mwaB9BKgEEAEy4ZFvBhlEgKYxoq5zDikII+JOoUQUfix6FMAC3cWQJBMk+/6L8oY4kywcUU8LMEcAIS5bkYuLUUaemRnw5f+Lox1MigoFAj34bCvDm0aPplP5z13RqBAU0oYYrgIlq005YxRnYyrUpA3pfiyEANnbqgYxney3It5aqA5FvVUmdOzbp3VkAHOhde9BuX0oNxAamqmBl4UruXiZWzLjxIQGII3NVgJCypMOYA88kzHmN58+BF4/OA8AAZNNrUadWs7q1a8EGRMfWUrp25HRuczMBsJt35MW4gSdiSvxzgANmkR9BYHl5bc2/ocdA4IA29cgMImGHoZ1798gOrodXEbd89wS306t4IJf9cgLg4Z9YbZR+9wP38Wt3GX/LKeDAc/AtAP/YgAMWeBxnAxgw34L0MdDAAOEJt9+EAybQAHp9DSAfeRt2FwADBlyY2moSkrjhiQ7yBMADB4zYIn3NPQBjTTLSaKOPOHT44UgIRPijkUF5iNWKRzJ5Q3PvbTRAgho2eWQCDhSQ4kYzClhlkwUWoKMxBTRwkpdnAtlAmAAVIACVaMKZwAFJQgNAAQ6YCaeeORDgwANC0rIannsSykMABAjwQJaqDIDAAwIQUGOhex4qgAELaAmKlG0y0OWkn+aQAKKKIpApGwPYaYAADOQJqqs+EMCAAGqWmgeqBXDa6qu7AnEoAb86YCmuAxBbrLHHHrsArriquuqvvEJLhaiIzrpl7LDIYossAgU8CumvBHgarbjjkluuueeim66667LbrrvvwhuvvPPSW6+99+Kbr7778tuvv/8CHLDAAxNcsMEHI5ywwgsz3LDDD0McscQTU1yxxRdjnLHGG3PcsccfgxyyyCP/EQIAIfkECQQAEQAsAAAAAJQCZgEABf9gJI5kaZ5oqq5s675wLM90bd94ru987//AoHBILBqPyKRyyWw6n9CodEqtWq/YrHbL7Xq/4LB4TC6bz+i0es1uu9/wuHxOr9vv+Lx+z+/7/4CBgoOEhYaHiImKi4yNjo+QkZKTlJWWl5iZmpucnZ6foKGio6SlpqeoqaqrrK1BCgICBgW0tAAQuLm6u7y6CLUFDQIErsUisALAC73MzbjAtLEHxqgBBLEFy87b3M4AwQfE1KMJDMkI3enquL8GAgwK45oJBw0F6Ov5+roLD8Px8ipZczBrn8F83ww4EBewEQGCByNKhPCtwYEEDRUpMHdvokd9BYYFyEjoWoGPKCf/+mNIsk85A/hSysyH4N3IlnkCMGhwa6bPgwAMHLiJs06CBjF/Kl0nFGBROLBOLp168IEDp0/ZwEpKtWu3BQ1YZjVDAKbXs/sAPGAwFk2AA1LRyu2mlgHRtl4I8JzLl6aDu3i7MHjQt3A6oYG1KEBquLG6tYm1JDDQ07FlZkHFRm7yNu7lz80QNMC62clirqBT50JwtfSSyapjO1sw1LUSBQ60yd6tqwBb20QY6OZNXJcBzcB7vCVcvDk7Acl9vEXtvHhN0tFvwKpc3TkAAdizxwjggHv38w8wiq9R9rz7XKPXj2/wvn6uAsjlpyDg2f75AuHpRwIs/hUIAX4CqsCf/4H+pZdgCQHsxWCBDj44AgHDTVifAeoJSJ55GtpnQIDRJdBfiPbFJx8D1KFonwCAJacAcy4yCMBf2QVAY40TAjBNdBGCyKN/C3TomgBD1liAkZsdIGSSFMbYFgEtQmkgjJspcKKVNjqQWAAGcDkkAvnhhKSYPBbZlpNoJvmAlBlR2WaSDTwVwJZzhgjAby1FmCeUCDApD5t/QvkmSRgWamWdAYGpKJd7Nkrfo1YuQGIqBDxJqYsGwJlKAhluOqSXxZwpKpeWFnPAqWgeusqMrKLpIyt+xiomAnyewoCmttb4gCqg9tomo6ZMKiyaqZqS6bFtLuDpJo4y22akpBgrrf+YaoYS7LVzkgqKjtzOOesnu4ab56+fKBCquYt6siqP3wQjQDhlKkjANdhkg+qzkyRQpYvyLkTApShYg+8s62roaiZh9hjSOwTvQI++PAa6SbljilREAg7IknB9yVoCroEhRUzEQB3pWe8j76KIwEomC8Hfv9UBICgkd9q3gEI3S6HAAWZN+GMlphqolsZW6JSMf9RKoq57Lx8Q8xQ/72ift5I0XOACrX1hTQMfEzf0I/52B1bPYOj0AK/FEQuJ1vVddwZuBbCtGnRk230Z11N7fQ3NuxkQCdzniYZ2GQxQVp3gDundmGh9l6GX46Ax3ojVzhlOR27OWZ7IsrxBpof/AICnVgAj0dZsQK51LEZ5YegiksDrczXA7+ZhqxY7IpjztvofB+TumOeEzC4bbbffAVvnifQeGwJSD5KA85cRH4jxqrGGyHbNWR8I4bJBLzv4n3nvEu1d3Zg88KU3Zn4f5Kc2IiMEUO++INh/9t36grBI3Pt6cABxlgSJBakGgHbIX/UiN4gDtK8vbusDA3y3skQI54B+UAD6loKgSwhgg14Z2x4UCBoCXqI8qRHhHQLwQKpoTxOpUw3r8KDB581QIPErjArpEADhncV2nthWamy2hx7GBm+dEKJlbigHPM2FTKJA4RAZiAYfysWEoChaY4hohxzKBYij0JJqnIUH/y/y5UalUKJhLEYHLfYFiqcQoOnuYC3LZMsUbuwLGeXQMsN0ClhW/GEd+mgZJKKibI45XRwS4JimraKOjtkhGxj5GTauolaNieAaAgBClADIGKCzDBffwMny8S8UUjSMJM1gRMNoshU521sc7IeWcVFDjXMBQAXDYMapOHIceYTgG4I5lzuOY2SFAcAptyBHPR7OFaFszCrJQIDqLTOOjVEkGijZl4WR5GmNvGYWWGgZrJEEY30xJBlK2Rdz9qmXXdEmGmiZPiY2BJdosacXnOjLaWYEknxRJxmamcxnNiqQMwEAFaVATF8aNCOE7MtCqdbJj4SsLTG8Ihm4KRdjBv8mmnORJxkQ6pM9RqahUxEoF8gZUnHKg4RoeagWUEoVkzapMDKdAjxngsC2wLQrPd0CR/nyR+BE1Cs23cIE5xJUn5J0Iso8w1NT0tSxoBMtr7wCO9FSVYxO9SAqBQNNl9LVsfyUKruEAj1nElbgtNKFZxiqXMrq04oaBAEuPcJS0eJP27B0Kvrswlc9sjv5nHUpWZXCVkNooQgc9iMiFQNBO5pXs9p1H2ldwlqp2lgRPHYiOb1CDfmSVAF9diYLwEI1udrZEZzWIHStwmZRW9nAXLUr7oxCCycSW9vsNSUKJUtfgttaEaz2LFGlwlhR0lujsvUMu/3IKIsbgaMupbD/T1AAWlJL3RIA9CB4NcNyZxLYB433I5klwmyhWlvg7LQbfVXMZfeRW+qudyLchcJxqTLd7o7grRGJLC+J6l8TAJgq8SXCYPVR3tYu1iDptcJ+z5LfApPgwUtJbhOs65MEt/a1zWiuFBZsEOJauAQg9khbi/DXqWD3xCPgMDdMPIbJeiXCjbWxUjSshPNGpLQwHsF7d7Hilc43H0W28JAlktghYPgnoe3uU8NbBh97RMBBHkF0DzJRG1jZIB4u8GjVEWYraFcuNM4yio/MDRHT4MkzebGaSfBbbmD5C/z8SYNhrOOfdHkGX9YHleecgtnimAoT7oqcCS2C+x7EzeNh/7Mz9pzlFof4DI6WCI8ZDSFJO+PPMAh0PprM6QgkmhdpDsOpAVvqFNRZKaTeAZxTMuhWn8CMSd5CnuNs60Knr70tEPU6Dh3kWW86DDL2ybF7LYJZpyTXOPB0LxbN7Ai8OhdltsKWI1LfavdZJgAgQrI/AuoT967CYxD2Pu5c7QhsOx/ZjsGuJwJtW2OY2IqV9jaizOhVy4TdOJDrTGrd7hMQktpd+K5SIB3kTOuD3y9Y8j4ozezhlLsJZ0buxU885oUDwdlXLngLjltvLDj8IN0WuQjUTRdgm+DbKMF3qemz7C/4+ycAVznIPZLyGrw7HTlXeQQ4GW8qzBsl/RW6Cf9Yzg0E+EDgMtn4nGUehWsvpeQF/3k6IK4CiecD4UpXg9bzge6wG5wqDCeBvnUhdbNbAeY+obqtx76NcO/A6p50exx2zlm9qwDuHqH4Crw+bL8PEy0EN/yF156LtPP9IEFXPBgyzljJo4Dp3gD2uCUieMtrgfAGibzeH3+QopcA9N1wuufTcHOftL3VqO8G2FuQ0tWn4egfwbrboZ6S2uL9Iy63fRN+P/DgVxv3Bun86ckqfOiiRe4qJz5vb8B4CHC9+VEAfEpEb3m6N8PuNOC9R8qOfS+Q3iOvrzbmm3H99fei5+XHgvu5oXvFi98jsU4BibeR/vgLgfIuZHwqt3//s/FmS0F+/vd5+ZSAKKB9ESFO0hcRpseASdB6/0aBJxAAUxFvCucRAoiBP4B8E9F/Indy3RBb3jdtILgFFth3K0gCmwdeMqCBSgF/L9gEKThjH6h0NKgUkROBXHaDVxCDHzGBnmeC3FBmHSgRCCiETnB+EqF6TjgCDmgQ+UcCIrgO9TeFQTB/2wB9kgeAMtGEKLAU18eFPdBxU8F9CUiAzQAD9xcR4IeGTxB7+UCCZreEEpFZRKgPs0eHQxCHKXGFGAiEBlFveohygPgEWQgUO2h41/UCjbh1i9gELYgSNviCk5h6L7BjlYiDZyGFn+iFuuACgmgQf/iJPdCHE6F8/wx4iRDWAoaoD1uoijUAhQFmiyOwFDZIirgAhroYbM8XjBGwidyQf0joDMRYBGrIfMSYiKHXAsboDKK4jEBgh+uAh5LHiuswhyngcdYYBKeYe9YohinBAj04E5kYjjMwjd34iLbHeCsDi/oAjOxIAvQ4EevIhe7YDIE1i/lwjz+Qg9uQeLroixBQZL5IhgI5A9wogfcIkOtAatDohw0pawRJjQI5jiCxAv3YC7V4kSWAkL1gjwyoFAz5kbxgkuyIi5B3kW7YCyugFGcokiKAjepQkzeYjG+oAkphk9qBFqlYiQhZJulIa0BpAyrZDdqIfQ+ZDmWSj+rAhkl5Iawlkv9SqQ72lJXdQIhVSQIx2Q3w6H/mSI4owJX095Ux8JSHmJRK0Va+6Io2aWkZNpYJmJG4AJc/wZLESJK8EJJ0uJS9kQK+qJP36JJ3ZZcJKJj3QZg/oZYRhxb7qIsVmQ93hpO8AJktUJY/UY026Yt3xpi4oJksIJrNYISA6IueOQKiSZU2iZb7sJoiWYX6kAKtSZoqEJZJCJmwuQ226ROueZFsuW6a2ZvKiAK3iZsngJenWZw/iZzAqZxLhxbBqYvG2ZMnIJpDKZKIGYvO+ZjQ+VzSOQKVORHVaZ3PmZ0+AZjLyJl+hpvXyQy/KZ7jyZPq4JXsGJ8yGZ4ywZ7BqJ8tp5z/ALoL89mf41mMfCWdA1qK/JkS23mPw9mRCpqeJpCcysmczMCXdLiguVCg2yedEZoPaWeLHDqaDZp3uEmXO6aYThiizNCEFqqZfrkLk9mQoJkC5ZkODHmR7olaB7pyOOeYPoGb9gmVPxoBN3p54MmbQnmkCBqdSuoTLEqBptkLqaacptlWLlqSkLml6eCf1sicbVWiGrqC3SloTioCb7kfP1GjtpijESGXAnmUKWFPHKmFX1mizHCeAqmn9fITD6qKVdoLTQmIXrqSPgmlQCmREQGm4YiQK8CcSXmmCDGldFikmakCpmmpwgenpZemI6Cbq7ECmKoLZUqW1Amquxik/yrgi466goPKC4Z5j3qKQLTJFCJ5qMeoqiKgq7pQZCW6o6qooj9Rcwfqqd0QWD0aEReJrPTFqyJQpRWkFKcqfHraC8KqnEvRAqKKC27qhLG6C9Vqi3fajdIIqBB6ldB6q+sQdL7ojcFIqd1YqKpYqrqQf76aC7Pqf5jZDa8qkIxng+WqDt8KgtfKC7LppAOrDmmlFIG6ghjKpdDaq9vqAqYJr6OYqhPbaCgZmVAWjMsadRsrAoyXiux6n8EYrr86sqbGiy+gp9n6gvkaGpz6ic7KDem1FPQqdPK6DnL6lRErbzWoiv1qZyzrWAcYAzdbgJXIqBGxryK5tM6An06bDv87227E+hP4eaFLIXh0mhIF26m1VLOfuLDqcE3dyg6AaLZgdrQRILXNELMkALfMALV6F7G8ILfjGbFba22IhYYzKq5ue7CumGFcyLb7MKJAWbS84FKDipp+l7aYQbaf2LPNUJ0nqw56u3qBu7Jum7kEWwOIyw12K3KjSxNuKwJ4e4YRq7gDKBfjao1Vmw4J6wJ0ywyUC2OdmwsPS6RT0bf4WHsYeLp3mLohu4fRZrgYKLnM8K82ybi7gLEyAL26ALkFd7upl7uV+LUywXCzy4kJeLC98LOQOaPkS7Ib6H9Zy6pua7nftwPYi7D+F7/ccLXBOKPAewLE6wzW22rfuw//+Uua7st+PMC8EFC7fjfAATp5zTejm7sCoKsOzqtm9rqbaXOlCVx93qocGmysbve/EgoG9MGnpTajHkwD1Ou5lqfA3RC7PJBx5ztnxysRrutZ/KW98mHAvVDD6pULJ6xyKWyqQKDDvctpEVxiODwDE8bD/rW/GgkEMyu4hpdimCgGoRLDMKay/WtgGgwBD8xo69uZYnBUBqlyUawLP+xluOV3QdwMLixrT8LEnRXGHxHALcC94JbEpQHCFhkGDfXG69G5TdnGz2B2zchf9osDh+zDepwY4osLcjwgXoHFxaXDICkGvVTEFoa3ueDChEwRjdwW9Nt0YnCJlNxYnUvC/y/gxM6gydTFxwwmBkeHwaXGys4AyBUssdW2yGs4xu1acAemFKoMAzOsaaGME5ZMqGKwWxO8HqOsy0eQy7zgyhbyyZfsx5jFbI+MC18clJXXameceWHgkmVcaV3cyUxgzUmnZlScEltsBKBHzfohzbwwzDPAyzJRzhZGx+z7BYjbzK5xxPlQujDwzLwQyZGhssyQyDjgjqdsG7bsDPb8ZueMC+/sGtZ8zWAAwrTcXSz8aVAg0Oqwzv4Vzk8cBt4HZB6dzLhgxzvA0vrcWSA1jGEg0o2XZRkNylKwzdx8zKmAz1OB0D+gwC4d0HIRtj6Q00JNEsGMXD5tux1mYTzNzf9V8NHNgNSbwdK9cNFEUMz5AMi3VNHoXAW7a9HdldPTPAZVStKmJdaQjAWcLMWdhdbRy9A3cLBsvR5NXZeqhWYE3RAmvQ1crWA19dSfoNUbnAUGbaWGzQmB3cpj8NgqnR10PdFDjdgeJR6wjMRiYNW9UACNzTC59Nc8ENF1F9qWMNXMMNhDUNYHIiB0DQFYbQSu7cWoPQmbjYpj4NUWJR+xbdlDgNheTNqpQCiFEdNYENsHcttvc0Z2HX7OnRzGXRhgrQOqvQugnRzKPdtJUNsHTNyk8NjbANBDoNBxy9yKEEtzIc9KINwUAd6oZEdV5hgXhRd7fcPr5NY+/NCkoNz/dW0G9JwOeU0S+HRjwtUXrO0J9w27Z+DZ65DgSaTfKlwGiz21Y7HgWMV6lwHhmjDdHaUG7t3TRdHOwrwGNj19ReHfFPHcHFwYmQ1M+oPeMGDe2/DixoBMfVHdMiNNDaHelgHfScDP6cPhkYBIhUHeTCDezFBUxmDklkHktyHhzVDUmnDijwYHKj7cxuDdzrDUTHDdswHk6R3gXyHjM4DhXYHkimAicyQHXI4Zam5BUh69Ys4EQn6AdT4IH5QayI0GWV7PeR4IOG4Ygf4ac47G3N0IbD5FdhDi3xfngiAnT24HuQ15hZ4Tb+4Nl27njh63Oo4HGeVKeKDk4x0KFxQb/1A+BSTeFWDkCbflR3pQ4erwQpswPbuR6GBg2lCF64EgRp/RzWfw572x6W2gAMLeDJB+BWBOu6kuB0ECGpNNB2Q+aiw+N7IeEV6eBaROE/x9B6m0N9X+BGheO2Y+BQGw56ETCFYOnJ9OFnGNEMRu7p2OGa2uEZmuuYNw7T/W7W7gP6ox4Cs073Ae7uOkOMUR7Xpw7DXO72kAF7IB8KAu8CEW71dg686B8Hug8AWZ7ObnAO+eFhSvVRJ/uQxvfsFjNuWeBBpfdxwCCK7DGxBfRCMfGl2TBy+P8oqw8tywACWfBYlTHDHPB+PuGKLDQw7vHhgPCDo/Yw0Q8kaQAKTTHP9B3wdD30hhAQdvsfQ6mvJOoPVNJwBOP9QOQONRGPYrNfN0cfVpsBHTfoBcX4f+URPtrhxjXzgE7zVtD1y/s9sCkPcc9PZQ4PWzbhFkgBtor7mAH/j2ERJmnwJZf/jYnvgh7TBgv1JA8/Ezkd2UcO9QtRLHbA0CAPkoXgnr3khC0fg/AzYGku1xUPprpBBvbDDXYACi/xG8zgevbiMhQS91rjR1EyJUDgi5TzIF4A4LkQP3cg32cOhz0exzsOrv0Q/zci+gthGx8AAp4yLO//y1r2zQ8P3gTym6lETd3xW/AP7oTwvT0vhqAE7sgi133waD/v5JYuOiTf+GIvkJh///UAICRhCRpXmiqbqyrfvCcXsAkH3jub7zvf8Dg8IhsWg84gSyJbPpfEJpyCm1ar1iszoHtOv9gmGEmrZsPqPTOwAj7H7DnwmEum6/43/sOL/vRwUU5A0SFmYVJPwpLr4FGj5CRv4sKDBaXkI1SG5yGjZggobGOHSWmqp9iqquosydvsJO7bHSshIsxObqAiEk1v6KBjzsEhdDFIwAK2MGGBg/xz4kL1MzMpBBZ0cCcFV7L0ppixsCHHyf/zmOr98hor/zqbPPoxVUwuO/hdPzWwEo5QsYZl+/gkfKCUz4pZnBhkTsKYwIRYEzhxZ/iJCo0QkDXBc/3kC4ceSSayBP/y5oQ3IljAACTl7MyHJmC5cwLQqYRnNnCgXDbvJzx3NoigSCgNJ7cI8oUxO3kI5DQKApVad0oGpbMLUq1wgEser613WsAGxgw5obS9bsWVMIcqpVK+Bq21Ni46oN4IBtXUgIuuGN64Bu320OdAbuqpdvYTzcECdWPLgxucORI0+mfKcc5MtjA3zVjOavZ8+gPYo2Q7p06QOoU2tZcKAza7wMfsK28kBlbdYEcOemsrs38QQGGAfX08AX8d4K5iYvAsAA8+a9T0cHIpu2ddMMjmbvIXtpd+vGkQcHsLw8exIJyobHMb16+/IHgAcfXn9/hPPZH6TF337YpWYAA9wJ2P8dA5qktl2CD0agwH19TTcbhBdGwIABhIH1gAPkYZggaA28dlIBDWwVoooJOFAAeg0h0ICFKtIYoQPHWXQibzXy2F8DLjo0nQP09Vgjiw9wmA0ABQhwYJFPnsCAAEiys6QDKUKZZQQjgrfLiQdgqaWY7kkJJDFfgjimmgkQMGWXkCxpwJVpqlmnCQEQcMCPSRqyAJMMEGmnoCaweYAAPxaQ6ItI+NmAAAIQEOigk66gAAEOPJroGYkmaoAAV4ZJqagwWNrmo6eimmqqDBCA4KivNkGAqarSmiqYksKaq6678tqrr78CG6ywwxJbrLHHIpussssy26yzz0IbrbTTUlsvrbXXYputttty262334Ibrrjjkluuueeim66667LbrrvvwhuvvPPSW6+99+I7bggAIfkECQQAEQAsAAAAAJQCZgEABf9gJI5kaZ5oqq5s675wLM90bd94ru987//AoHBILBqPyKRyyWw6n9CodEqtWq/YrHbL7Xq/4LB4TC6bz+i0es1uu9/wuHxOr9vv+Lx+z+/7/4CBgoOEhYaHiImKi4yNjo+QkZKTlJWWl5iZmpucnZ6foKGio6SlpqeoawoErAQOArCxsrOzDK2puDgJrbS9vrasCbnDLawHBQUDygMQzc7P0NHSzcsABQIExNoiCccIy9Ph4s7LAwgFBqwK26TdAgbJzOPz9OHm1wfZ7KAJDAIPC+TVG0hwwIIHAhzo21fJVYNkBCNKnHZPQD6Gk/r9CzixY0eDBhRiXKSAgQGOHlP/qiSHAOHCkYUINEC5suZEcw8YrIMJSMFDgTaDqjQoQBjPPgoOPAAgtKlHkC+P0gnAoME3p1hrIjDAQKqdqgiyivUIwMCBnV7bBHCwdKzblQAeRE2bRunbux+voaVLJsAxoHgDSwTgIABfMyaZCl4cEYGDvYe5HDDAuPLHdJG/JLBquTPBAoUzY5Gp2LPpgY4Ni7aiwEHY07DpmV0dxe/r2LjnDcBM+4lfiLmDhwMgAHLvIj5LC18+LfXxJAweAGZO3Rnv50IYFKjOneJ17D+Sdx8PDcEB1eB3HLhNvn0zx8bT1yAg3b19CMTRy6chgP1997vFt58L2v1nYFn6DdhC/38GNgjBAHIp+AIBCzjYIIISruCahRxGmCEKBGzHoYMANJDghwcoN6KDBcwlYQIirsihACfuR6GMOBogIHgKUIbjio69GOOPKw5g4oABCEDkjwh0ld5aKi45InHyMeCflCM2sONhBFyJ5YoLuBiZAhV+SSRhvQXwgJlfGlAjXQ2wiWWYojkQpZw4AnBAZgTciaeMR9JF5p9sFrDlPgHESeiXAIjJkAOLyjnAnlIx4GekOb6pzaCYymkoTIl2KmejI6UoKp4AOLlPAmWeyiaN7KjpKqFusgPprHguYNQwCXiJ65y74hLAkL+aqecwAlxa7JIDOJBLn8sSWoCmnwwbbf+kgZpy67V/klpKAspyK6Wupcgq7qKUimLpuZECEOwnnLJLaAOiKCrvog+IAu69kS5ALSXW8otuKAcIjKm7nMT75T3X+OKwAMjEM92SCIRiL6HKLIDOw708FM+o6V6yL44ZG5AQK//KwIo/AC0ZMidrsjkAMg3k864Nq/jzDwATz4jJuiNuJZISAbhiwFUcVuxJAK0yu9XNRJQEcY6WFGwhhNgcmgQBAtB0nwBLN13kAiE5uvVk4ZI37SRKGjjz0FpQNVPPzAGQciS9ytgS3Fgk9YCv5C2gdSEXt4dAAwTcbQVVwHEHNicjk2jW4FYk4IDY7ZHriI/kGeQA1GRM5nX/bnZDnnZ1W6l6RkkGnE466IXEPB5hlI+xFtK40btJ5PYRV3sYv7mHsCKyV1eW6nP4RPdiA/y+CO/kHW9Ha5jXbfYfnFO3gLN7KCDA8ngZsLvruJnHBwGtdzd8IdkLt9v1dSQJ+FvNawJ9dRDCT0dr88O2viDty42RFHeHAjFGfJm4X92KU4gDVA83/8MecwaYiBAtRn+MUKBw8lPB/nkmgnwIIGx2Q0A/WPAuBcgE09QHK0ZYqW6ws4MIT/MpSJxwLBhUxAqN18JHbEg4CHAeG9qWmwUgz4YPrEkKMTHD2Aygh5FIEvkC4689WA2Cj7vEerDyskk0ETY6woQCiheb/yri4YqxqaEKvycUpVnii6ZpESeAhpsF4AFasTGfJxRArJR0MRJoJB33OpEo8C0GgXTQYGWy9QlTqcSNlAgkbh5QQkmwKje6k8MOT5OqcsFxHoOcBAGW08lSfFIwf2RDEhejxlLgcTCVJIQCpogXSqKCjqYB4RpOSb9QnsJcEcmiJDYZm1KmApi5FGIXiOgZzQ3DkfUoHSXIeBpbEsNOsLFjG0ZZzVgujZrhyKQktuW/VKaiS2Bkwyxz6cttkNMeygxEAgxJxRimgo+waWdfVnkXb40El9JAZBQ9GJhawYSXbrGnFxCaFTPyJGDSqN8kwGkZfTJEkoxBgDepgFHBGP/UK8x8hkAh0VHGGFMqr7TMEsmgyLtYlCfQdIZCD7HO0yBgpuxQWGWEGQZ+juVYmbmkM1YaiT5WxqF8gahlckiFwgnmprSJF1MH8U7LWFM0Tn3qRpvAgM4gdTWUIeojauqZkYqmpHcxqxbIesj0fG4SPn2LWkXTUrccMQtGTeuHHBHSysx1NXUVizS3gNax/HWvhJinacxJm8BmJV9bCAAtbfJSxBKCooFhbG90Gpi7UgGzY9GsZQPRVc+INk2TrclgrVDaxfB0tIaQrGfE+SKCOgWyi0utSk4LWz9ktaCjDYBtmzJVIzDUJq/tLSG4aZnDDsixTdEmFZgLXOUmIq7/j7UudIWSXCdgNyjOta4fqkrFrfYmASaN5w/IOxbpircQsq2MRt8bgcJiBbe+0W1HvkrfQID2pzjNEHtxGIXfZmW1/Q0EdS+YYBEcdyXuZYICBDOAADe4Dt9tSmWVm1ex8DYIHebihQdh36yEt7fxxQsklbBgt9B2xH1IsWD4m+Dt1qS7RQhxU8QK4z70tZ/q/dCAsYJgI7RYsObtsRpk3Fklk+DBKcGxEDKsEgs7+Q3/zcqLeyzcwBR5CEfW8pVNeNQxk0CxeJHyD4arkgibGQ9ZdkqF3zyCHx84yTAIs5yDTGcy6Hksau6xjrl7hEFTts96YLNN3PxmG6cEAEbG/wuPET2HIWdlzpQWgZ1FTARDw4XPmf4Ck++y5T5T2SMr/gF67xLoUKth02KZr6sj8OemfJgGUJZIqmftBgXQk7i8drCkhTBqrHg22GrIdUpObGa2jgXUKbC0TSaNbDXUmsh4TjCshcLsGSj6JtCu9hU8TWhxR+DbE/kyDq59Y3O7obVUdDet8XLrFyh7IOqWNxnQrZLimpncKdn1DQJwl3rrWwslbkqpgz3hu/hbBdJeicAPLoZij0XW+r73QLrtAn4TxOAUv8K2jR1yX78l3zJY9cVDjgZnv4Xa5tZ4PUCOAgMHheYsn4LMIyLRkv86Jfi9gcfrMfGcdwHNgWk1sv93Po9swzsrGza6FgCulWw3u+A5sLlqpe5nxjw81EwXB6NloN96KJ3rVRj6RIKec3avhM9uT0m40X6EhAcF5Qc/tUSivgKtr4TjdIeCxcVydnPb3SMw77hbvh54JYy8KRinu9rpsVWVN7TxXnD54jEfgcfvtgae9wjOOX+EsNeD7WhvuGFroPeBDMDqpAcC0oEc+zg/mgYEHwvqYz8Fqq+k8Ac/fEf8/XSnjJ73Qoi7TSKP+cEjdwamjwakkX+FyUfk+OKOfjTGvgLrhwPw1C+C8FeSeLoX3ymVVH1Wjh3+JXRZMIyXd9npwf4TjJ8g02+/FEJvE/Cz3O8qsXA1t3r/+lcb8xcReBd45ycU3IcCrTdzBRgF2jcOwCd1BzgOMJB7lwZ7EUgDJhcYzEd9tucROaR8ElF+Hdhpi4F9wecWZ8d/ElGBKbgDJkh+KaiB2eUCvkcQVjaDO/CAwzeDQDgP+ccCFzgNReiDdddWMwiDEjE4OHhbSpgE74cXADB3B1eDEVF/IqCFA8F3U7gDTqgSMhh4PzcRrTaGA9GDYYh7RxhNHEhxOzgQu1cCE0gNbWhciwGGvKeGRNcCQygOKJiHOPCBKtaGXjgQLQBohDgEc+gRXBh+UegU16N+xteIQZCIHTGI7ed906BZmjgPWIiJJBCIERF/gXeHzaBmfkiE/6T4A/e3bI0YcR5RhyIAgJv4ij1QhXfRc4g4FuX3iPNQhrqIAq04Ef6HfGfIcytgitMQicXYAs7nFAnYgc44DSswFmwYjSaAi0FBjLw3ghPhKJMYFAPAjYW4jCpRjR14jOPgKKEoiOh4A+JYE3wYgQv4fCAiFrY4jysQj41RjJbnFDhGi2jojzQgjBPBgrGnjnSYAu4YDgz5irHoEQ3Yhp4YDTAXkdOAisWYkfTHjQopjygwkuEQh4TIkQPBiUqoiudYkpeGkDEwjZSIjioZDS95AiYpDRcpkyXgjf03jxVJDyngkPTAkjJpiL04iqQHkOEAOkY5D/3okyNQj3/nj/9O2ZEoEJUUSJUskJX18Hr+WI5BISaE55UrsJMDIYCkyJXveAJk2W5oiQJDmW4oyXtuKQ53BZbQ4JGNCJLD6JNvGA3JxZfP4Jd5eJP0wI6EqJaEeQKG6QyIGYY0qWFU6ZjQUJhiMZlTqJiueJlnaQKR2Qyc6YNK6VJeiZnPoJlZsY2kqIrNgZaq6QysKWdzWQKjKQ4TGYGzuYqQGZO3OQK9GQ5IiYnDWZtNkZO3mY+bOZfH+ZtYoZxzCZjjkIx5+JyiCZy3aZA2wZiviJ24KRau2YaVKRT3+J2hGZ5ZUZoF6JnjUHT+CJ4kkJvsqX/UKQ71WYDyOQL0OZfcWRNTOY//9wkBf9SfXlme3cmUKZiX4eAiligU0PiarhWcI8CgWnkCFvqYVDl7bwGfMpmh0SAmILqaqbkYEcqNuQkBIipmPlmXJ0ih/DkWbzKiQ+WTCFoTvhicLmoPKdCbxRmGQCmXMNp5YiGdJNCbSciNHOoW3omOQUoQE9ebRhqNw/mJQyqcYgFzT7qG/rijn3GlIzCgG9mc6MiL9DOeukijzrBw/0kQ4Kh/7ikO1imQjLiPLBqNS/pTdzmFzLkS5pSbP9qBVSoN5+mPcUqaKqCmD8KNfeoUPSmbz5aoYqGgaHejNZGfUzigU1qKYnGiEbilsgimIxAAigoB8LmfhJingkWp/2GYouV3qIEaftdodqJKAocKAWzZpvhGkYvhobdplQSxYSmKps03mPSAqWForH25AqQqFoWKfLApDbHqjwOJfkYoFnOKeQRQqhHFqm3opUjYAsOZpEo4oNPwpugIm4MIqvVArGh3q9IQgqKqrM/AliIAroTahqf5Frv5itVqa8UAjG04qBpZqyagqzzoAqUqlkrYqMnprtw4qzj5AhILDZ7aeJa6EvZKoc2apS/ArrLRkovRpF6Jr9JwdiYLDeTafilqpQZbAsBKEBH6oE1xsVxHTHfxqDBKr89QQjzbDNkacvAqDciahykLDTpblT/VgaqKrS9rAjG7ljGAsAPRr//VRrAqu6eY2LGdGgP/KhQBSndDq6FPOwJHCw2x9LMP4q2UpnkrV7ac2l4zELW0Gn5Yu6xwKwL7qnAzcLbO4KtSR7W1mLcjALL14G97C6HI57ZFyraNqLb4wXpuEbYsR7cdga4I6bfWAXpukaMKmFFaS4oVGw0497XcRnoZuxI2i5Yt2wzmZa74EbpXZrkTMa1eGa0QQLkogLuYm2kO+7CEq7fc2gzH17oky3CQKw0be6W4CwF4lry922d3+wzHi5aJC7ZZd3Kye2GCK3rBK2z8mgOtCwHRO2aM67Hfm7oIaHWwG7tSN7rzULSNOLZBW2esZnRjGw31ewRJsr3ipb7/W7gD13t3/qtdlVG9TPA9+6tkzQu4L4C1C9xj8DsOz9oENSW/vTXA39gDvzsUjqtc+VseYcA5SUtptFsPKNm+uZuFSwUGC1a+CTa+K+wD+YvBiGWmtRQGxKJLvHa3q7sCGrxo8ta80vfB6sGT7qa5z+DAMkDEMCxeHdwUT0xsvlLBMAbAwZSJVljAEnK+scbFObBpV1hthksQoXu3uutkEzwOP+x+ymK7NTa8m5sdmRVsIQwNcKwEnzTFlqXCzeC4fozA9CXDOGnEOtC0zsDDbxbCedwCSvwMadxgWBxlOlwPjdxbiAxsReDHENDG1jW9WQsGUczHErLGeLyEW0xp/3cMDVY7BIpmw8dxx7DMyZEsXoRcsGDghPKqZJksFJf8Ao/8DJ6MWArAydCAaV6QurWMYqaMt0jAyWP8b50RwUWgbK2cHmX8pUoQzDU6ZtncEYKsBL08HBA7ILesokxgzKTcG9w8DVbMBApJYwk2yRHxyypjorycvMQZBlH8fWq8GOU8A6CsyNaFsxQW0JtsE9cMVkxowYshz9Z1wh6xzj9wkwhNG907GIacAkTsDMu8H9/cEbuMBfRMvWAME6abnk5Q0sGaYO18oV+gfRBtWSyNbycdbYyx0F6R0nfx0UwwzhJBzYdh0OHbeyN70WnhxUx60zeAqqPV0d08BTxNZP9IfRR5Y1r87GLWBdUyZQWrDAEzvR+O5hT2bATtK9RH8dXkewU4/BZhzSPGLA3hrAQZXbeI9dJ/y9QByxhvfRxEvYLAo8/Ee9ctnAUhTRA+7RV/LRiJvQSHTQ86TQx4PcdZ0NZyJSGL7WUbnQNBfIkK0s8EzAXn7NFI0swhWcmVEdmoMNnOMMxG8NgbJx+c5VdiMNrPoNqlwNrN0Nj8G9fO0NdeMdugKwa+DQ3vvA+67b6aIdjbp9eYMNbRWdVCkNz1+hxq3dVhUNf7Jd2hkFKeQdGyJ8chSxtcnZlkINHpxt2eQN2nHDpl5NzDhN4TUcJVUNODgduZANuoBt84IN//AbfZAGPawwHgPDDVbnHcpBAA5Y2fZ2DZJqXez13cwowG2u0RaK0Jwl1RaQDd0Ynfk3AA4i0Oy8sF/i0RggNTwcHbUlDhSsTfh7DgSLsGmd1PsLwICh4cwL1QuQFVDJHhIOjiPKDUbzHionAjr6MWoKwb4N0IAGUZEM5i2fTkiXDdbPwGDq5SQM4HyITVb8De1LDkhiBUwYHgWQDUXubhhNDklkHkYgDj2yflgsBGwnHhU+Dl0prl8VPiiEcHen4TYP4HRi4cazMHVC4OaEIKam4ZOV4GMz5jcK4HN84ci24Gbv6ej54HW55Ll94E9j0UjKQJyUIdQYQHSe56H7UJ/9iUG5vuBEIOgq4tCFtEHQRt5QKeblBkCTAiHK8OBhyepQTOBi+EP6sOBcXMQ3huOw0Q4h/HB6BNar9+BjdUHWheBb2uYmS+B6keHH9+BXaOk5+uCAnQ557dB2beGUHiQ8wdEXT+Bd0ufQykCNHuOKSl7AEXGooQ68ux7mDQ7jh564LAALVeE2wuB/w+DoRx7HWe7kFNCAWvsmEUCLZhHwM/Bw0vDkby7PX9Q9Sh72NQ8dDwANNeBeij8DXB8WPA4r24AOfRB6TRHSbf8eOBAP5O8aUelIiA8iqmJXlwDOTx8u6tNrte5uljID7/8/dhECsvBz1C8hbOCB6PhIjjBv8jbyETrwdPTw9Ij/CFqPE97whXD/U1/gMmIeFS/Ahfj/WggfGcfTn/se1okOjcURYhfwN+Q+8uCEh6E/W8PhMNMvdnUO2m8TbDTiCc8SN+fwYMYPed+wCPUdmTQfYKTQmAP0LXYAtqXxJzsyQnhTdMf3KMH/YmsAuPPyWgrwoBfxctgQ1RwzUPgAyKf9Qi0/l4wTA1U7SY3zgrMuuNoFQkcw8uEQwZ2ApcAw8FIPuKPvhs0OgkozH40ApW1goH4DE8MydqzwaVXhnlkP3a//rLMegqdP1OtP3iz/2d4f2agPMG0x0qzj7pvyhV7/TG3/5JFwroL//Ccfh1cNX2fyb/QQ8CkTiSpXmiqbqyLUsAkDzTtX3jub7zvf8Dg8JhDZBwIZPKJbPZCjyI0im1ar1iawuFs+v9gpeKQrZsPqPTukIg7H7DwQ41vW6/7wzxPb+/auAFCg6WCfgdIvbBEDI2OuocJEpOgh3EPGJmDgIQUHp+KgWQaZKWnm2BpqqmKCyYvsJSsa3S1ooIXMbq7uY0tNkCgwYA8hYbQwAYBi9/JrgeQ5siMDBXUzIgRGtrLhxZfyMGCGyTM86Co/dBlbMHCvymx8cRZLfbnwFQy+/DMeTeA7SCoBO/gm6IBUxI5AE8gw6dBDCgcKIQXw8vdklQjyJHHNMwgmyCrSNJGwi8/4VMmQRXyZIWVcJ8grAlxWQxb7ZQIJGmwgJccAJlNYpnQAM/gyI1weAZUXYIIiWNWuLAxqbkFuiTqlWEg39WjdncKjYCy6/QADgYO1acV7OwGhxVq1XBTLewkjWUO7euXU0C4urdqmBcX1NwA+uN2LbwoMOI9dJl/AiAgbyPx0aWLIiy5ctrDSzWrMaxZ8TDqorGR7o0YrqhU18B8JL15QAHmMK+guAvbdaDUeemgsBB596IGUQJPmV4ceOIHQBXDgSr8+oJQEsH8iBrdeMEkmfvQRll9+oHwIc36QBweeMKHOBOT2NB2vb2I7x/DXuAAe73yzPQwADyIdMAef/Zl/9AA9FJNsB2zSHoXAAMGDBgcJT5FyGCFOrXFAAPHAChhuXZ9kCHRH0Y4ogrkqAggy0h0B+LM5IQ4IslYUijjiPYhl1JA9B34I40JuBAARaWBCJ7Q+74XgEnRlNAAwQxWWWLDTzZkwBCWtllAgcsSA4ABThAZZdnlkCAAw/cqAtlZaIZJwoBECDAA0fCMgACDwhAgIhyokmnAAYsgGQpQBYgAANLAtpoCQnUeScChtoxwJgGKGqmo5uqQAADAmA5qSCWFpAoA5pymioLdBLQqgODljqArLPSWmutC5RaKqaZoqqqry5AWieoucZqq7G2IlAAn322SgCjv0IbrbTTUltPrbXXYputttty262334Ibrrjjkluuueeim66667LbrrvvwhuvvPPSW6+99+Kbr7778tuvv/8CHLDAAxNcsMEHI5ywwgsz3LDDD0MccR8hAAAh+QQJBAARACwAAAAAlAJmAQAF/2AkjmRpnmiqrmzrvnAsz3Rt33iu73zv/8CgcEgsGo/IpHLJbDqf0Kh0Sq1ar9isdsvter/gsHhMLpvP6LR6zW673/C4fE6v2+/4vH7P7/v/gIGCg4SFhoeIiYqLjI2Oj5CRkpOUlZaXmJmam5ydnp+goaKjpKWmp6hrCQSsDAKvsLECCam1Raussrq7sAysBLS2wiysBwULA8kDEMzNzs8QAsPTNgnGCMrQ2tvcygMIBQasCtSk1gIGBcnc7NDS5fApCa4PyO33+O0DCw8CDgTxLBFw0EBdvoPNCgSMN09AvWUII0rUts/Av4WKFDAwYG9iRIUYbRFo0NGjyZPPvv89YEAu5B8FBSGiRAjSJSkFBx4AmMmzZ7OKAG3aCcCgATafH4WGKooAqVOnAAwcaKmUTQAHOp9KHFCVU06tYJ8OKCCAatcxAYzJDHuQ61lLG3eynesUgQOzb7ccMEB3otu8kBIY7Uv4aQEHAQBfGSm3MMK/ijM6aOq4slOpkaGkpWw5YtDMhdIa7EzaJ4CyoJPAbFz64OfUgBg8WNu69kxxsIcwKGBb4uvcelb3Hu4TwYHEwHcc4Ew83+/kdQjMbk6d52nk0GkIYF793rvsdHZ3Hz8zKnbwLbaTP/gd/RsCC9bLP2nevYrJ8/O1t6+GAO/8AE4EQAPn8XcAawFysx//f2Yk8F+CEEYkQIHZwRfhPTUxWIYCfF3o4UF2oefgh+1kqGEYAQhA4or5IMBAclchyKIzJp7oBQPczagjNA3gpRgBOe7ITI02aqFAfEImqQ0ADmQWwANKUlSkFw1EaSU0CzynlAMyWgnZlIt1eaWVBHZ15JjQfAnmFAFUieabzQCgZUAOwJnSmlYwIKadVhpAYTln8unMnHgq0aagiMq50IGIDlooFAkg2aigE5bz5KSOPtpEnZg2ukAwwiQQJKKEaipEAA92mugBwgiwJ6WmJkHAq6q+WcCfoaBaqzMLxhoEp7t2qmgpCdCKaK++9nBpsLuyOoqezDaDbLI6BBpt/60NiOLmtRAQSW0OxXIb7AK4WqKruN1+68MB6DILAKiZWDvmNwWQxcsuL6q7w7aCJrNAOPfyUpA6tFkJgLOYhCukvwb4w0q5+hoB5ZtjFdDAAcDsoAABrjgEQMEzTvsItDMiYFGpES8RgKRRfmMAvEZoJECqLBpgCbsrDtAPAT6mrBnLOlZ0URQE7GVsfrdOoqKHYw3t8xWi7ojAA05jgdMDowK4QM+K8BsgAg0QAPHTkB4tX1RTjZGAA0AH+OkjHQK4jwMwkw212eOZnC8aGhmA93DvNjJxfkxybXcVCkd4muFniJZg4IoMvl5Uex++ReIBUm6HAmwDOOwhcZO3QP+TlnuBeX7G8UGA3/NBXkjo1Q2AW+mm/12bzijXwXnWgNf9B+zNDVAm7bV7jhohB7TdnOuAAD+c8GMTT8Xp412XCJDkMd+H87bJHr30bCpPnfWM4Fi973hwX1sBjINfxcpnVwoJftUh0L4cSze3QOXuc6F+bwOQnyRSZLu+kGsPOCPOafoHhv/ZxgD3Y4QCJDecA+IhgcNhHwO/4MDWFCB3kCAZcRaAh1kRJ3Ub9AIGl0e6TrQJZKWxWR2oV5rhpZALKyTOA75XiUg1J1tzgF9vAMC/G2aBAN0hoik66BiEwUF8ltGgEbmggALSZYeoEGFttMcGJtJlAC2cohaEqMD/IpZiWbYBQATFkL/WvE2MXKCgbbA4DC71hoRtQOIceQhHJwBriE4cBvYeyIYqbjGMfcRCAmDYmTfCQwE0Iw0iy0BG0nwukVgIAO8q46eQeHEu6AvDJ8FiQUxmQY6lmWRAcmgZBPARC6x0TCdNmYVYWkaJSjGhBxtkRZ+okpZTMKRtEBDKhcirMyLbAhTpcjBgaiGSjXwlNc5VGhBawWuOIaYzs/DH0tARMNjMpjShwIDSlHKbVRBma2SYGVv2hZ1dUCcn0ZmFZRIGnpmhIWHMiAVovpOeWGgjafAJGn0yc5xLcCdbCArQKCyyNoGEjUHn8gAuBKCXKPllQ5+Ayiai/+eYheHnFDo6l4hulJwQtc9FOwMAhBqhnJZJ5kkNhVGeANE+UbNMRa+w0sqYdKZOCGdhGAoeTXbGmkkYZU9kClQk6HGgRZooKa3w1KE2lQr2ZMtOo1pTjzAVCVm9zFWn0E3HnNNGCbjlGotQ1rngcaya6apJXFkohWplq0/oKWHOClcmkHQuXJxSW+eCVCEIFSwt7SsUqlqZwrpHqTN5axMU4JgBFFOxRgirVjQKJn+G5adH8KxWQItZI9gVLETFk177ggAnMHYuNy2tyuQ6Eb5qSqpO+eoPROsUb8nWCAIljBr1NVjEuvQGrw1LYn87286I1FSQPYlueaBZnlyWuf9B+GtYYqsuowr3uDRILli4i10jiNetZHsoYaabg036RLLlPYJ2tWJZuwVXueCNwXmdMoC1xlcH+w0Lex/FW6QMuAYF7gln//sD9z4Fvk/DbU8AYF7C+JbBPyhuWOpbuvuChbQ7SHB5/IthG6yWMOS1W3VR0tohpLUvBy7xDDzMFroSL8BIATEOoiuRFst4CApgZFgcSy0eS+TCODgxWJ77Yx0Y2SSptZs82UJiGGjYJ0huMg5w/JTluo/GYgWCg1HSXy0LQcQGTuGYUeJlHnB5JjE2cwtgatYbvnkmOp7Bk/PRZjnzYM0+IXLK0HwSH+8gAH3Js59lcFqnpNh9lO3/i6DvQxdDL1oHSp6LjY2453xEeQaA9oiiL/0CMC8ZjkE+6A5eXGNS82DKdMky+DqNj1Gz4LA+sbWrV0Drx1T5cKmm6A5C3eNd60C9hYmz3XrdjvyKgM5hWbCxXUBonmy6j5EuaQ5wbZ1pb9kyky4ds7kB4RnQlh3K9nYEiI0SvGLyzif5NQng7RF5qzsCjTaNsw+3Yo9IewXcvs29aZBptqS7dPk2iaxVwG6EhFvdpn7KtYHZcIQcl9VTHbgMYE1YgEYczzX4+El0rfEIjBsf7nZmtsPyaRX0OyID2Lerkd2X4TZ0vmwmuLBLDoNqw/mkCfeIoKE9Wp6/gN4zmTg6/wvukwOf/BkUNroLKi5qoD79GeVmAdXv0XKp47syC8ck0bUizZVrhcle925hHn7Dc3MD7SUIekSi7nUViNwnXQdmwFHy6BTsHcp1VwHTtdLnk47dKVlPwcsRQvJ7Xx3dfXX7NmCA6A3LfNHBJozSZ4rzkyAV6TQJfAp8jpLGY1LuEiq1wUV/AtCfJOzbrHxYUj56tlzX6Iv3fGlzz+cXSB7qrDcB6k+Sd4/PJYKyv2vwSaD2mtvblK4/CNyjj49/l/zuS2WukH/OAuxL5PYaH3yXLw9H0h+E9iZ4PATUJHr1b8P6J/V+RCyNAt5jaPkiyDxry0t9fLRg9fhnfiYBd/9AlXxagTJm5xSm52r9d2T/tXXtAGINyA7Pd2n2NxFst03ul0zydxB0x3rDB3j/dWXtBnBhAXvT1nxfVIHoNIHcgGQC6B3L14HEV2LbdxLsRwIXyA4E6G3iBxXkB0w7yA4rYHvB93dNJ2OdJ3QpYIBIkYM8p3+qVmI06Bwp4ILagIK7toQK9mOHl4QogIXQgH4lJ4b4QH//hXFPMS0kaBIHp2UxOBEL2FQ3aBJkWIX3MIdmFoIekXjxBYEvmAJ42A4Z2GSAiBA9WFpxyA6+tYjcEIT/NYgOaGbqB4WOKCV194NOUYgzJYndUHta4YfqhoQ9UXy/xYf3kAJ1OBFa6Gf/UjgXZSZnZvgM6LOKEkGG6saFPGGKvzWLmWICtph6UueL7BBzi+aESDEnAuZ1l3gQfSdjwegZJ4CM2Wd0qCgRhadl0YiIrTdkUneI7OFqv8cr3QgWnBhfnogQ2QiHy2gCxAgB54hdmogU8PdfzegO5XiAPJeOHmhs9/gMvfKO8fhbrzgX9WiP7VgC7wh+cuZ+2oCGfvaP5OiOYAGFDGgZeihbEikt+chfJbeRjOhtIBkNHfmEGveFbDGQcDWSAVmRGgeOnqZuLFmSPmGRi9aGSLGOizaTFAkWDClj8+hL98aTCumN3saPLTJwRDlvRjltMIkPKqlYSzkCAultOOkT/7h4aU/pDCZVlcYWlNbBguW1ja5xAgnoE4nIYA6JjxpHllZ4Am4pg7tGc5XGc3F5D3Nyl5C3ayO5DWnZZO8Ijyigl9zwjD92jUlRhmyBK4S5Da34W2A5E7GocYi5DZYIFo8pW6TIE28YiRsGil1GanQJWJD4W5uJEBAZASBpkxjWl9qQka15gn4XFj95imDndVuZEILYlFqmgrBYm37WmNvQd1cpEZ3ZifMkdWqYW1e4XXI2mmyhk96GkjwBWu+YmWPlmtBwkIuGlNBQKsKZJmZGnaEYeH3JOOEJDWLZUJE5E1FZXrnJDDY5hH7ZZKeJErx4aQGQns+QmiIwlWnIn//tYHNeF5hI5p008mP0GY6Bh6DOYJjFOXcyVpkgwnq6GBELFpjAOVPtiRLvGV/j+IsosJ/RhmFr+QzY+ZxzET0hygz5eVIEIKDFuJ6HGZ0tMJIfiF3xqSDB536ydp8HsaHGJ07B16LMYJgiQKHawJ0AVZBsAZtatpwK2AIGWl7aiaLLF6Hf5wIyKp+leUPkKRZCSmoLioktUKbQ8JexZ6TDuXwkKpsuAKQxKVsn6gzSWXJKqg26lafAV1qBuQ1QamYXGhE9eJZIoaamVEkGhH8RwKYQ8Eps+qKm5KCEiH98inUxMKj92FfQuVCMqqnOGANaGhGBukFXaqdfimFvGhb/aSmlSJGV6ESpe7l8l/oM48SmkzlTHNdqjIqmWDIDoKofV3WqIsp6TuoTSHoCtdoM/ulMo1qCjCqnZblxXdoMiJpCu7phNCpnjpqjMOCrzwCrmBSsXsWoXzcXkhoBsiqf22o5YSpxqVpi4PoMC+iqSJGu7tOhKHGtu/anzABeO8oMdwpH5MqK5mpyV3QDa3mcdvOu/DWmu3asuYZcUwhM2eqc5nqizuaoJOlMxBon8YphEtsT4nprFYtJz1p6B3uisOmvHYtJF4uZB6uv6ihzASuwIasp81qp5rquzYCvJeCzzMCw3yK02gC0SZAiObsmNMuN1VKtINtH9hqdS7sD/wIgO310os0qA1eKtPqys+zApJMlFx+KJyNbjTvgsGTWrqZitNCwtVUQN6JIPAWbD5B4s8xQsofjstpQtj7AWET7KHyrtzDgtn5rI77ZF4QbBTQTWNJzqvyaAmfLE3N7OHUKdWwrBKxUuWSzrP0ZBHUauGCitsz5BYkLAWKbLE2LEKIrAnw7sD4Ts2CxeVlAYwQqPdIaEfF6qov7LWDLg2AweCn6KJ36FF6rAqSrstLjttAwvEkll8SDt82QuSUgvRAAu9/Ct2lCvUBQvHECsXjCvM7LAp4brrSzum4YBiI2vmgFtc9wuCJgvRAQuVPysagKBqTbuujxuwlqWoWBvf9tWxqlWgShBr+wwbyCeQTy27tror3NGwbyR7vU4r29lQTl+wz0yx8KIL8pAb5Ja0UMXCSK2nFJIL+3qy726wzHewRGNsDQkbuJacGOwb7ZAcMmAcAOFZeOayoOnMBKwMH6206tkbpMEIe2pSnoG3pM0MMZnBwSJrP4u4vqwr+06AQfu8NgMsKFwWFfcIgunBmX66JPYKhhccRgUrfpCwZI6cG5kbIeccJLEMYQEMIv3BoSzFOSh8MiElNRkMQIQcSwccE8y0EPVrUY4cceaMgr4MZVhydTq7hhQMEescJ5ocXaNgX2i8XuIbtUq74JOSVynC7Tc0tsfBY5JcBhkLz/EpGs0BHKEFDKPIDAzGDG2fHEcAoGeEvJQiHLQ8tTHDzLilwLG7xFwYwDjMygDCLIb1vMLtDDwMwfluxRwcuxzfDF8aDM36kFNnyLKkXF7UDHTbDNB2HN1IDNz6DLPnC66Ioe0fy/3AsEkzul4KHKE8bM+kUa4HzI3twOTYwEKcwM5FwL5ozBVAJVwAFSnYHORODMXJkcA+0M+YwE6uxW9qwJCN1KFV0Dv7ydufHQUfsFtox4GW0JIb1hsHwEHs0jqcHLznDSRnDMJuFIeaFLthHEQSDJ/xQZrsyRY4DGAuLSo5DSWVgGQo11Iw0JaNRIlETN29BMZyHOSXfUNuDT/yz2zpvQzsxk1S5WG4BMCgGw09tgwEEw0Y6hyeVwyqTRz5tSGwpt0ftcfWlQ0hsW0JdwAO57D6wcR7WxNSFR1NoQ0WTVHEmDEWDdDJzbBVjNTGLNCF9NHbQsBoX9tkBdCRdNpGvAybAFDxayPJPtBNQEQDbtCFpUGp3tWndU2o3A0veg1myy0SUi1XyQ1K1B103g1/IZ2ofgQ9XR1VmA02VN24cw2jUkB5Ft2KhtCFfbHW09BbadhbBdB7K9S3NA1TiI24Cw2dUx2PiTRLxdPkyND4+dBoldGDLtQsVNbs89BOf9kMftB9HdGmatBogsmTa0Ca5CHvaDB/+MD97jCf921BztTQWYrXms7QfLMTkBTgXjbUkCdAkjQh0FzgVyPRdSVAnmsx5cjAfDnD0NPkANcNcSAdxXQM900SOT4B/5IeJ3Ix8hMgn/TR3WDUvdAT2PkADU/Vl/4Nt23N128OLUsdxf0NxLcjzXs98TEeNawAAgnnSIsQgHPh5ADgZCThEdLggM8NYzkdd0MOX3wCTpzdzfPRFRHgZcDg1RodVesBkQouV1UOb6YOKBcBWujRBjLgZuPoYqvhisAyF1LgYwXVkLcBx9wBjz0ed2jjpVPgfG4CGG7ucXAjZoTgWLnh+NfugAUgARjjh7fiGVbukRsg+CLgccEub4yQh3zg3/A7LY5rXpHsLmfHDq+QDqX44Du8PnjgDrqB42aLARc166jYDrsX4YkR4EnIPlaNsIwk04mAEGV7PkMBYJwI6aug4GgmHsExsJE/48h5HgNMAUSpLna6DkC0M1wy4DaWEAvd4T4K4KpE5fZOEL5W6WRVESQoJLk5DtZ0M1qn4Cq7AX6W4a+15I1l5jO0MEG+MQ9eLslsTtcIDv+UEvFoMxBl8Uo7Ej8b0In70w9LIzrPCTAfALBIAO9dLue83wcbDgQfMvZIExHa9fxTAwH3MlfK0J673F3nDzOM8s2o0Jjb0rOP/z3oAoO58Jf94uKwLYhlDzRj/cn8AoSz8pSJ4H/0X/9BCy7niA1lSPJvYOCjSd9Vpv8nvw3l4vJDM/CpA09mMy9KIw9WhPHJ3+B1Dd9sMR9YHQ9XJPIlYPCE5/9yRySaiQ8XyfIGUvzAMf+DOh9qlw34YfIPVtC4ey+MbDEIUP+S2S6ZNw4ZQ/HuU9Taqd+a99yDfu+XA263X/76IvsJaPCcl++pWBAAEPCXHP+gjxTTbR87JvGY1vE1h/+zWW+p2A+byvaWB/CYof/ONF+orw+MZPeHRv0Uqf9RUeGWe//Pca755w5dSfdHnfCU+e/THt+6jg497PZ80vCsU//nzG4wFBQOiPD3D+UbEP+eRjHzDR/gpi/amgAJ0vLv/vDwKROJKleaKpurKt+8KxfAYGAOG5vvO9/wODwiGxaOQ1FLMls+l8QqMjReNovWKz2i0OYAhIw+IxuYyictPqNdvnBZvj8jl9Vbu18/p9MVn/AwaSBTQg8B0i6gH4CTY6PsJQ4SVSVmItwkFqbnJGBBwsWIqO/iAIKHWmqgYqCBiSwsIiOGSu2t6aMTzE8ibO1uIGC0M5vPYe5y0wDDM3OyXYIEtvPSw7X2O/EOxOd1t5JWSLj6sccHuj+8yikre7KziEps/vLDi44+fDT9JPDxhYyyeQHIMGA/p5WxRuIENyCQoh5DWgGrCGFpsFYGDgYERYXgJeDIlNI7+OfAD/PDhQUSRLYZ8elDSpKOXKljaDPTQmUw0CgDd/joS4c81HoEavfYo21MoAewuPQmWWwEEBjkuPpGQXdesweAViXtVRoAEBrmadPfwa9kcBAU/Pwh2W4IDQpQAKOCgbd28zAg4e6NzpJS/fws4CEBDwoOq8AQgeCCBQ0zBlW4gFGFhg1VvTtgy0Vg4tNfFiBJspDbhrQAADvaJfYyPAQECDAqZHpS7g2TXs3uIQEwjuALPuAcaPI0+efIFu3atZB/ctPV+C4AJoNy+ufLtyBAUgRw5OAPT08ubPo0+vfj379u7fw48vfz79+vbv48+vfz///v7/AxiggAMSWKCBByKYM6CCCzLYoIMPQhihhBNSWKGFF2KYoYYbctihhx+CGKKII5JYooknopiiiiuy2KKLLy4YAgAh+QQJBAARACwAAAAAlAJmAQAF/2AkjmRpnmiqrmzrvnAsz3Rt33iu73zv/8CgcEgsGo/IpHLJbDqf0Kh0Sq1ar9isdsvter/gsHhMLpvP6LR6zW673/C4fE6v2+/4vH7P7/v/gIGCg4SFhoeIiYqLjI2Oj5CRkpOUlZaXmJmam5ydnp+goaKjpKWmp6ipqqEJBK4CsLGys7QMrgQJq7q7vF0JBwUIA8MQxcbHyMnKxcPDCAUGrgq91NXWPQkMAg8LA8vf4OHfAwsPAg4E1+rr7BHZ293i8vP0yOQG6O36+6IEDfH1AgoUOADBAwbT+Clc+EjBgQcABkqcSHBBNIYYMwZi0AABxY8gAwIwcCChxpMo3/88DMmyJb0BBQSYTEmz5hcGBiK63MkzHAIHM20KHfokQceeSJN+K+AgANGnUIkocOBRqdWryEhG3crVRgBg3rCKHQtAZtezaFEweBB2rFu3F9PK3aqggc63eN8iOOB0rl+aBNjmHZy3bN+/iBUyKEC48eCRhxNLtkZggePLjw1Ensw5FQHGmEMXbrC5s2lQCUCLXp1XQOnTsC8pMMC69uCfsXNbCiDAtu/bDHQLf8Sg6u/jbxsEHc5ckALLyKO/BeCgufVADaRrx7sg3fXveAjc3U5eLGnw6OMEyF6+PVnv6eOnYTDevX2rmuXrH7P+vn+xAMC334BaJADdfwha5Rr/gQxa4UCCEF61QC4NVuhEAKpFqGFPABxg4YdJiLfhiEkV8BqIKO7wIIkscihgijDeEMADLdbYk4cx5kjDczb2uFMDOgb5QgL1+WgkRQucKOSSBxzpJEsAULjklCKw9+QwC0BDy5ayNFBAAcT02CGVU9LYI0wFNHAALjsoQIA22wDQloYCkKljAAeSWJABUh6hgDYZImiAnTDiOeI9+URBwAE5JWgioR8mYByCBiWahUMPTNreAstBKh+RCI5U0hgJOJAneRN6OiCo9yFgQHBp/NkoeVGq+mmR2pXVaRpfBYpcrbaCxyqtr9ox1am/BRjsdcNqtxcfBMx6HLDLCtcs/3IDPPDiHlNpWhu11cJ2bbJmEXIAsquBGy5n49pmWCIEeCuauusiZuivCzJSnG/01ivXveQqiQhVtiGwq79d0fbbAPlKwhuujiWJ8FwK+2bAwQ2ZuZrEE59VcW0FbGsJfawt0HFXTbpbnSfrzXnZoCdDlXJtDwiMiYGrARnzUAS4CyspH1+G4840KQBxYzWjQjJm/RK9EMChAfAzKjNGjbHT7WgcWtK7OHC0WyZjjdGKUQ/NS7yYwSw2Pwm43Fiq1ijga14roxFAn2vzKu9g+a0T9GB4kwEm13mjobVjdbMzM2EI2MyFlcoWbsbijUmtkIiNFWBGz8icJ7kYRmOGQP/g7fDYWJ384Qr351/MzZ3j12DomMhcuA4Bw6x7QTbSsK9jZV6Nh9FbOAVcnfsToTumNkqUv7U8Fwq4rcyYx1+BrvNCtSvW1Ftcvwzh1UcxfGPP06T9VQD0/sT49EQeflHSu2V29l8r9QAXbUvk+ftMHI7X/EMxHV64ZwXvyWN1/EMCAxwDQKIEoH5ISV8W2CcR3CXwCA9sjM66Iqm83O8KyQNJ8S5YhN/hpXxbCcDerEK7J9huINQjIRA4xze/nC8pYaNC80ICPhnuwIBW+aANIcgT1Ekhgy7yIQ929xaO/SUBeAGA8Y5AQZ7sT4k1QCJegieZHQZRCtGTEOmw+AL//wFojHNhIlZaiAQz9sSCZIwBDfHCRoo1EQpzvMoAphhHEgAxKYnrzAtv9IQV9sSIfWyBF6+CwsloESsIcMIieyLERLLgkWNxoriI2BJEJsGQO+GiJVlQRaxIcThqVIoElTDJnQwAjaMkASa315y/KcWTRgClSwIZSxS40SobHI4KyaI+HbTSJZXsJQryKJYcNid/YsHlEHTJElEq05d4eSV4ShnBYt7gmC2pozKZiRVpMmeQLjHnD6gZkmBe8wTsdIkzv3NDlwDACOAMiTXfWYJUWkWb8eEmIYnwR5aIs5ezvIo70VNQfRKBnD1ZKD9HINCk7BM9EB1oENAZklVO/7QEYXzLQZljy55oLghQxAovPxqBkiqlkegJoVX4OAOXuuSkLCVBRpPi0QFV1CUwlREnPwLLd3J0J+qMTzwp0lMVYSWo71zgHS20U5c0EAcNZSpNR7lUg4LoqB+JZA+qypKkvjOfLpEogRQglpG+wKZQ8mYfE6qUizYIriyBagzoms6cluCnPSFghUKqSrmmAK0TaSpLZYoVnKYIryG56gx+2Um/kgCyLtljjgiblGRmMX4tUexHoTkWs94VK4Y1gT/7alkRgLWaqY0pViQLA8p2NLZKJCtP3EogzCIJBwEAbV5bK4KugsSzMdItSLZ6AsRKhLl9dC5IRBujrE5kpf+1/WJr+YoU04JIugJx7AyEG1niAjaUuNWPcQUSW6lalLiMvQpvLXTej9B2Bb6ViHdjmV8eQoqt+KnBel8CXTKS1pQFrpBtp0uDlJaIuK8NyX5hBN6AzFcEq2XJfXup3JbYdUrclfBklTIA4g54IhsOUn8FMk8XkPcjeo1lhSciXki5Nyne7LBEBPvOYbrlwjAa6o5jkOHppveC9W1JjJdkQivGIMIBQW6PhWzkcN24Jy1eAZUDkmJLrvgjE17SlgMCAwe/8cj84+xVPuypBX/ErTOWR435CWX7+ivO8pjwl+kRZjLqOCRzDlYAtNsC6wqkqKM0NEiALCRF1+OeLub/qV/xLJAlEyrJz23Bn6OcUx8DKMFC2nRAeFwCSoMDu73EtIhP9mKKeLfJLmH0BUO8E+qGq870kHIJcC0PSH90z9fdmaoDIlYtP/ijarZKsU8m6npcstX6ZSmvh7yzQSuljs2eR5exmG2JBBphJ5bHfU39DVDzz9EUkbWdgJ3nFQy7fR8lNz0svawif0TXInCztyfqaaxoFmvdFse3XZuUPpPw3RShd7WgPZASq2DM8yD1XCEuEVt3DN3zWAHDD81PWN+ycPqWSAvN7Ep+JruwhUP4PFoYcHAMPI4hZwmqY3ZlpB62s+9sObE/R3Kbo0Dl4jA4/6Y9kG0jbOOc/nlS/4yeQHnPI8tiCzfxUhBzC19T6gKRONGI7vIUcP0baE75W15ONHaHw+En+Loy0D5KWu9E3dUC+tlTgPFwQJ2MHk+Kwifm9GSkAOn0IDsJT56Uf+dO598YI+DngW8fVh0ke58Y4pdBu8W3e5STn8cAwi7oa6PA8kGPpdrpoVbJgV4cIut5ZS3Zd3FYPG+nD4dgM48MuOcN6wER+skoHnoT0P4Ytheb3AXy+ryNPhnS/L0xgu80t+/ygsdHRvKTwnyiDV8kJIz+MaaPlOrHjPCAzH7BT6D8YiA6fGYXyLKHPn7fI4Xtuf2fDLVvDO7zBP4+pH/X59/+EpQf/yRUc/KVf//9p1PvF0e4Vw+RhzX6BwH2V3JYZG+1xnkI04APuBPn9znO1xIzVz0WSH7Up0TXVw/rJ37dBYLdp0QJSA/eNzEf6H4pKEMSiEwIuHQo2BMtGC4b2FHmhjWxBw4iA2CBJUPpl3t99IPfUHkneEEHtmaJhISU93lLmEANuAxa9z7lVwxKGFEX1HpT10dZCAEnAoXJIHhis4MgYXhk5IXM4HVIYYZYk3dTGEcjuHZuyCH804RWUXz8I4dhdYf3x37yM0oN+G1+SBEZuDNsuBSxtIJlmAJ1mAw5SCj9pkeJ+D5kmAylN4MDoXv1EonysICso3qrd4NOljt6iHKjJIAtIVn/WQiHHVOFytCBMgSKtacCmXgMACg2rIhDylSFGJOLx9CDqoKGi6ZMjmgPK1B3svc5h7gTopg7wfVeKvCCeZOKPEWMkhOGL2eLxgCL68KMAuGJx+ONxlB6GCZpebOIy1CClvR49dCBYXiJy2KMb/ZOvId6KzCNSEGL9VKE9QCOCUSKLeE4+QgO0WgnBCCM4KCGMqZKLdCAvkY0ydh71wSQyyB4zzgR9Ogp5vgNbNZHBwkO6DgC7OiPwQJ+SMF0TGgVKcaNWzd2E8WJEpGBDMkMFJgivfh+HXlB4tiQL/CT33CFxTiS9VCSccSPb/gCGykRCakjGDkPfIhF7OiAL8CO/xNZL2G4DCxJQvBYD0QpAkKIFGFJJlCDFXc3SkYJdjCwlsrwlCnykUkYb1aRlifwlVLpL9iodyyFl/OAlP3kkvUii8kwlViklGQZAwTJEo1HJnK5DOTIP1UphjLglsngkJ4SX8qWU0L5DXaJTR+3LIQpiYt1k+c4A1XpjnZCk4yZU005EUCmkiFRljCimSSmjeFjmYVZA535Pbbil9HGUpMpio+JmVOyk0gRkol2FV0pAos5XJSom+JAm9yGWjZQkchgmB8CnAMhkEoUlb5pA+CpDJEpH8j5Rj0pQ7JZXjawlRCgnQxim0oBmIk0nspwZNIpfVQymtmZk6yznseVA/+vWXH+KRysqWF+ZZ/J0Jz+V05CIp/HxlL2KBJhh539GSS9yYJ+9ZjFAJciwKFWmSMgmgweagS8UaCmMaGj1iamaQzwiR7P2U1gIAADUKK5oaDIoJo1MJo2GhsZOg8oCUY6MYmcAaAgUZ4lcJ4hYZwMMqI5GgYV85nywZ3z4J8WigyNGR/uGYVfkEdIChtbCgFZKgMjSqT2cqXgMKZTEChNox/8SZ0uYKQfIaXggaPgcEpfsEN0eh2TWQw6igN2un0VoqSHBAaVaAxByhwqaoQzBCAoKhcQalGP+gMChacDMqAUMan8qabD8aMRZ6hf453i0qLH0KMmQKjsqR9Oigz/otoEePWliIGmyICbKiCrLjqpWxGml0mrRbCXLpqenOGkrQoDfVoMnHoai+pqYXBUw5oYvvp2uTQWcMoZ/FmYuNoDqBqiDDUWzUqsxIQeq4oMDMoEXWWmT7Gq5moCtmoMxyoZuvqIM6p+11oTz3pTSVCsxTCtfqEA67p2wLoE9tiuf3GWLKQE/fqevAoV1UqiUIpi1oGpFNGtqOkWErsVEBtXYFCv39CmnfGuEJCuKXCw2pob+DqLyzqn84oRyRoQFTsDHquvXFFPStGyRpCt32CqNeGp4PCvOLCwHDuwOisPAPUFCTiuUBGoDOsEY4mWKbsPVDoRsGoEkcizQ3Gg/x9hqa76FgILFRcLW6BqT03LDjFaRFGwsgGRqFFRssoAsj0wnppkL/m5sWGrAlZrZ5IxtvYTBhpbaY4UtN9gtD2wsO9JtRoRqXs4tz1bgH6BtPA6BXhrT4TLEB3UGICbBDYrEPRJFIybDJHLA+EKAW/LQXE7DzQbrQE2F587slNwqBKCuKjAr47xok9Qt+MoF2rrp66raXkRuk9BsPL3tWJRufpwu1qoBV1LEVurEL6rtWJwvEWHMjWkBazLSCnkt1KZsFJBqsogvNdwuRi7BR7LrlCxvG8Bs00guMbAvdRAvPnqBc47ETirCgJEPmIQvsegvrvAvmL6BdPbujYxv/+Mk7vXiThCob+y2wQyixS8K7mj+xKdewT6ewyZyw6pawwPbAS0CxIIhBGYcxlRewR7e7onsbmQSQZPC0MXPAoRzKplsMLGsMDtUDWEsadWYLYVh7+h8L4eJsA5cMJhhb2fQL4IZgaP24/KS8LywLZC0L/TkcKdMLmEYb5SkMEhEb+ZAMAEjAYJ7G84vAkHoL3hMMFa4MMDwSmKwxrJ6yCr8Sh+cxk0vAVCbEpK3AgBgMQHxMM+YMc+4cSUgMVbhMc9YLgKVQ2VwRo/KwayIxpwxAtL4xh87AT2mwwbnAoV3IxuwMR5wcarIMNCAwcufDsf7Ag4Uxtom7Fg/GhdrC//DUx6cqDHyzDJokCjtmHFUvDJZQjId8DJl1G6V0DGE7HIoVDItqHJcVDJd1rKk9DIbozLQxDHYPPIgFDHvwHDbeDK8jA6oaDLl3HIamDDS3pFmiAAqzwRBoMH6Kt5fcMJXsMa0GwFgjwWCCDF5iKyxNfONWy9TNUwl5AatSHPYrDF3ArEeLAvxzG0eAC7AbMbDXDK9ZDKXOC9CiXQc/AZ0uHQ+DPOFIEbk7DOtRHKYGDL9gDOipAAvrySfxDCjIPMfcDRtUHLXgDS2Vku8HLOwfkHDMDQGd0Ui3AA9KyAggDT9qDPg8AA+JxWgwDUx8zMVXAAGO2U5jItFyMIX9HT/x8hxnSA1A2pHFJNMMfh0mOA1Vhq0VwQLU2tZIdAxdm0AHzRB/5Q1k59CGCdo0J91TQNeYmA1sCj1XgADNrh1ZOzHQXgz1uQANLSHn791+5BDmstB7Ph1gnHCHE9PQ0wx0dA1v9h1XsQ2eKg2EqtA91SHoeNBpot2ZQNBDhB1WTrCKO92Uwh0UZwLO7h0XGgzNshKmGAKTitIJGw2vOAAJOtt/9wH2L9BgBdGzDhAPZsAxyB2kox3G9w0xqSLUCRBV9hAMyNoJNQ3L4BEwJgC67dAn/yD7kNIIK9B9qdKw9gKQi8KNadIO4zCX7sHwYhACDrJtvwJePdxPvs2G5REP9foib1zRFgsiHcvAiJfCj+bQ63cIkBcAsEIAAG8CX8/TbJTQfOHN1ZEhNr4gr0eAsH4CUFICctYsaaYM2E0QwonuIo/iRL0dlnIM0sfpkqPuPN8CTEnAl4HeM+ksaJYOI6Th6Y3QhM/eNEHg6yHQg5XuQj4tx9AMVKruSW0w8T/uTfUuF+oM1UzuIkPgpyk+VEfuOikOReTh6hLQg6POblceTwMuVo/hZMXghD3uY28t5UU9dyLiHfrQjxfecIAuaUzOZ8bkUurgf9EegQUhbWMMqG3irljQkEvej2Acu7wBuQ7h5+zgtYXunRMdeEfN2a3j6N3gm0/ekFU9qScOb/pE5Jg14IMJ7qtSHS7eDkru4Y8ZwRjz7rtG7l4Qzosw7r/FDouP4Yai4KsxHseDFCRWPnqR7VNkHUxg5Jby4KPP3sEhLqvMDS1G5Pw64K4pztPEEdXPEw3s4Sek0XqJ7t73IWdTHurpbnvaAAxjzm5Z4WdczrRD7vkHrupA4ZkrHu7B4O/O5Ihf3vyoDvibEenm4kAGDw/W4XBJ+dvi4ZX1HUOo4AMh0b8J7wLfITq94LazHuHH8dXJ3tC2DtW0HY9v4fB6GlJf0kI6HrQ7ESpP4T7h4VsE3qC6DSuTEVKY8txWIhHJHf7bHwMI8WRqHxxn0QHZ8SAYATQv8rP68j7TjR85XzAIsdJF8BEU8OAFa/9FFx9DHuKiYPHssd4yMx9ulR3VT/Rjlf9MxRKgNuI1Zf8/ExFSGuIWli6vFhFHcfITHh9vvxC0cx9Eyh9w1CAA6QKe4xEuotOQ1+30/fkPNNAF4fH49vAADBGuQQEwihRK1w38LwFgMAAFpiC5b0JgLgJaHf36TP+Yavgw7uABCO3zRe+1jyJV9iALBgC6/fMa3w4KmP+7Rv+zT+DOZA37dA98S1/Mzf/M7//NAf/dI//dRf/dZ//dif/dq//dzf/d7//eAf/uI//uRf/uZ//uif/uq//uzf/pITAgAh+QQJBAARACwAAAAAlAJmAQAF/2AkjmRpnmiqrmzrvnAsz3Rt33iu73zv/8CgcEgsGo/IpHLJbDqf0Kh0Sq1ar9isdsvter/gsHhMLpvP6LR6zW673/C4fE6v2+/4vH7P7/v/gIGCg4SFhoeIiYqLjI2Oj5CRkpOUlZaXmJmam5ydnp+goaKjpKWmp6ipqqEJBK4CsLGys7QMrgQJq7q7vF0JBwUIA8MQxcbHyMnKxcPDCAUGrgq91NXWPQkMAg8LA8vf4OHfAwsPAg4E1+rr7BHZ293i8vP0yOQG6O36+6IEDfH1AgoUOADBAwbT+Clc+EjBgQcABkqcSHBBNIYYMwZi0AABxY8gAwIwcCChxpMo3/88DMmyJb0BBQSYTEmz5hcGBiK63MkzHAIHM20KHfokQceeSJN+K+AgANGnUIkocOBRqdWryEhG3crVRgBg3rCKHQtAZtezaFEweBB2rFu3F9PK3aqggc63eN8iOOB0rl+aBNjmHZy3bN+/iBUyKEC48eCRhxNLtkZggePLjw1Ensw5FQHGmEMXbrC5s2lQCUCLXp1XQOnTsC8pMMC69uCfsXNbCiDAtu/bDHQLf8Sg6u/jbxsEHc5ckALLyKO/BeCgufVADaRrx7sg3fXveAjc3U5eLGnw6OMEyF6+PVnv6eOnYTDevX2rmuXrH7P+vn+xAMC334BaJADdfwha5Rr/gQxa4UCCEF61QC4NVuhEAKpFqGFPABxg4YdJiLfhiEkV8BqIKO7wIIkscihgijDeEMADLdbYk4cx5kjDczb2uFMDOgb5QgL1+WgkRQucKOSSBxzpJEsAULjklCKw9+QwC0BDy5ayNFBAAcT02CGVU9LYI0wFNHAALjsoQIA22wDQloYCkKljAAeSWJABUh6hgDYZImiAnTDiOeI9+URBwAE5JWgioR8mYByCBiWahUMPTNreAstBKh+RCI5U0hgJOJAneRN6OiCo9yFgQHBp/NkoeVGq+mmR2pXVaRpfBYpcrbaCxyqtr9ox1am/BRjsdcNqtxcfBMx6HLDLCtcs/3IDPPDiHlNpWhu11cJ2bbJmEXIAsquBGy5n49pmWCIEeCuauusiZuivCzJSnG/01ivXveQqiQhVtiGwq79d0fbbAPlKwhuujiWJ8FwK+2bAwQ2ZuZrEE59VcW0FbGsJfawt0HFXTbpbnSfrzXnZoCdDlXJtDwiMiYGrARnzUAS4CyspH1+G4840KQBxYzWjQjJm/RK9EMChAfAzKjNGjbHT7WgcWtK7OHC0WyZjjdGKUQ/NS7yYwSw2Pwm43Fiq1ijga14rr91OAPIOlt86QQ/Wp93XaO1Y3ezMTBgCNgOeiuGNSa2QiI0VoHjcX4+FwN/68NhYnZP3Mjd3iV+Dof9jInduCtlIh76OlXkhbroqRr9cE+Nvqf26KejWLlS7Yk19uyi9OWZ7TbxfBYDqv1fStmNm7155Ug8kL4rgeDU/lOZ4+S69Jgww31UAz3OI/PaNgN+Yzl1Jmlf05GvCOl7Dc4V3XqW3D0nPhMWffvg7hW1/JbnDCvv8UrykcO5/kkDdWzj2lwTgBQBXQ6AhzNe68T2FdlcZoAQbQT0AYe4vCsRK/TZICPzR7zR9s4r/SJiIAFqFcJ35XFKsx8JBYBAr+psMBcWCgBoeYodgsyBaCsiTA/pQEMGbTgQTE0KlHO+IggDiWLQXmxQaEIqB6OBV0Dec+QFIiFhkgwnB9p3/5YnFiGHMgxaVMoAPCieJxgNjGs8wxrGg0ToyLOIc85A3paywjPwDCQD2eIcmWqWN8oGjVWhIyDZIEStcTI8LXdLDRspBkVhxnX7qqBRGWhINCnDbVUZ4HSvyRHKfdIMpk5JD9MQOK0tM5Rc4GccGYRIprZSlGPKIlDvup48ueaIuz9C9BX6Iljca5hmAiRRSxoeXLKmkMsdwQ6VEskEKEIszp2mFR1pFkyBaZUtyyc0r3NIqVMSmKHcizHJy4ZVjQSWMxMkST7qTCvTcyQBiqZ9QZvCeWzCjHYOUT5DIEaBFgOZOwBmjbF7FnghtAjKVss0GFRRJEbUCM3miQR1N/9Ql/MwoEaqJlHYKaZIhgaFImeBNpfgyRyRliTxX2oRzJoWhS9qoQWnaBHhqk1A2bQlEeRqEi7Kko1NyqFLISdQfCBQrEPTUGqHU1CQo1CUvZdIoq2qEj/YEp2RqaUuyylUe6NQlQyWoCss6hJieclnFVMpB2boCL46lokEKpETSSdcbBLUnTJ3S+3hyzb7KSK+CnCuI4oqUPxr2BkYNCVkJhViBPFYH/rScYlE01ZDg9bIpuKpQ/eXWj0wWtCvw6lv9FQCrIBW1L0DpTj5LJdlOZJCwlUFpXRJYSP0VJCHNrV2hGlwqqfYjfM3tCX67k9Paap0sca5yIyBW8cVMtP8Dee10TRBZkKjUX8ydiDS3i4LM8pBox6UIeVWA3ZAkN1ytpeh6T5Delsw0ZmeVSFpha9uW0FZV3a2HdEG723GKzZBHnS8JhnuVfYqtvgO573rDa+C1QRckA1CwCKrLE5M6rb8D0XAEBqsgwHX2I//lqnmhulmgyne+J97Jd4nGWD2uF8IhGe/aHHjF9bYXJPud2IU/ol0CG7Nz+RWIhGGbZPea7sf0WDJoKSzT1wV4HhmeLod5kuJ6UTkgWVYuiZd6uwKHWLkrbnBxEYbjgLixrzHm7e/aXI8uR5TOFBlAi5cV32bmFsoUKezkhkwROwPUzCHxsOkIPZH3VrXJIBn/sNMqSw9ftq0ZmG7GlzbN6S9xCRYz/t+XE7s9QMvDl3iWh6HXtmUZk8/U4kB1UlYttlF/BLel7nEJUi0OWjstzVcJdedgHQ5ZI6WGVxav/YgNDmPzJMwS5LV+l61rEkh7HCxkdkCkfDttL8PZ+iRhjUX4P28rA9wugfb/IP2R3irO3MlAd0vU3T4El3TPE4M3MuTNEnpvr9UuEXa3qz2Ca3/jzbezNUV03D59H4PfLPF1x9hd6A063BgQ9+z/7N2TIkuP4vKgocGXIXHWUvq2a7YboyUiMqVy2X7JloikO7fygZSu5gERuOKeehWG/w/nAbl5Lxv+FkfP+cUmAHql/8mHaJBwm3wjX8aJlD4PjwMO4P1OOeCa/pLQIuXpgBszwSWocHn4WwQXh4DPJ8dzqygagWIHydojkPazv/stQf5d2iHA7bjnWev14jpFwN4+kIuD22Xv9e0YfEiE24/q8xB0BDhOEZ0TLfEDcXfyeDx0FEQ93q9ruxPxjbVxozUFn0cG4Xe292VYnnyYD8cIIS+OuTvN9H4MY+sxRvtw6HlyWI94GA3v+xWAOOiT8ztPNC+9APTeJyvY++v9JfqkRBWLqVf9CmL/DeaH6/iRTiP3vyF5EVBe2XYTPPrDGGeJCDz7xnCw2IKv8TSefB6kdH5SjL6umEd4jpyHFIlzf//iUH7+QgDPB2aA9zrqJw+4xl5J4VgnQ3wCMXPk43/hsHrKNxHytzPjRw9gdUQEWIAt0IDikHeeAmyLtEcBmEwsAH/GYHXV0nrKsHoSdH4U4XgjkIDYFjO4lxSItEfgVw92ZwJDSA/8Byn0BxIGSEL6VyIvsIET4X1UgoEiQXqKY4Kx9gJaCA4PWC8wCA4oaD/tt1cv4HI9kYRUAjVYIYFYNILiMD5wCA5UGCQfSA8l1zldCA5umAJlKBBvpyrVx0qW9IcC0YQlgIMTMYY6QoPJEIhH9IT7FwMtuFrVcofzYIH2s4fgIERzOA4LaCE+lUmfdIT00IcqYIgBgYhC4oj/yZCHnaOCLsGKJcCJy/CFkKKILSGDNSSFFScDsjhaqjKKavZJn/gNuBhbVmGDMaKKpvVJtrgMdRgBmJgMHWgnP3hTWNg5pkgPjCgClbh8SniMSPhJYXgMc0WBvreN1+GMg5dKVhgOvKgC8QgOtGgh2YgUQdhIwSiMNXCOxQCJKUKMWwSPWLFZ5PhtVOKKyCCQR9SPCYYDvnhb7KgbuuiPjVSPYpgDAFkMmhgfBLmMqbSEgLhn6hgODtkg3TgRsGg61agM02gCLwl6OTKT4RCTSsAbFdkZJCkQargCEJloO8kuhTGUPiAAA4CTzKGR32B7M+CKSjkcK+l+YPBKLdkZ/0EpWT2Qj1mXIjYJDk5pBRWDivvhjgGxjScpjyjSkSQHBnX0kcPBlhAwjzHwlcfwk83BeAIUBoHSNPrBkHjZAlkpdx/ClPNwfV6AQWSJHtHYlEV1RhXClZ3nBXoJAdPHHD1ZgUEgl4i5HyH5TUbZAzbVmfoxkR8xlAxJl1I5GIHZBNXFjNbCg/IQlSogmfU0IHa5FGFAT3DZGWkpDqHIAr/phaEJFXJpjcF5BINoDH7ZHLlpDLBZA435Dap5Gpn5jGBwVdFpGss5W0YwnODQmpLBkI9YnDtgmx4ZH1MZZUcwnbdonjXxnMvwjU3QZFcZFfJZDPeJAuBJneBxnMmwnf9PMGohqBvd6RICagPuuQziKRcK0J9mp4NUQJLVaS/riYdKAKHKQJq6QZ7JQJtHkGz0mRam+REJegMLWoPNUaItkZJUcKDIKKGJAaAQsJ8roKHnNhwpKg6XGQXExkCxcZ1KJlFFZ6AJWQ8nygToSYfCcaH0IKNA4KHN+Rds6Bb76AUnOaJQYZg3+QRoKCHwqQ9mGX5gcIdQehYXKUjJaQNcCg4VGhUs2hIFigVC2pBhug7hWGJQUKc51xk7qnhgYJhAai9HipJ3mgJpCmSTkadj8aZOAKMCAaIZUaUPRQUeCgFTSheFSg8uaqljJxdtCg5J6lQPdKY2oT6NoaVKsKT/A3GPQhGq4GCqRZCfxjCo++MYo7oEOFoMkroPtIpxV1CZfnSoqPCgjtGpU5CoA9GbDPGnyjCnT0CjxWCrT0GpeBcGfDoPqroPzqoMNiqR6/M9TjoRjuoEcbqIKKM3WyCsZBYV1uoWHLoFg3l6UcGqLUqsMSCtxVCu7PCubtGgTHCpxrCt1tCtygCwR3Cu7UYU2NMYvVoE+jqwRGGwycCvScCuw2oTDXs4+GoDu8qjQkGxdgoGRBSBHXsJJYsVV5qYmOGq6vCryCCrUKCsIQE3GgE5l8GsTACp+JESsLqFYzCmFJGp6iCyoloGRrsM1KoPVUMYi5kF2ToQY8IQCrtQ/yeLA0IbTWsqCv5qPFurBIwqFj2qCgHws8hnBhhLFjKLCqhKGAg7s8KzDxs7OGmQsipLsJ9wALI5ES6LBVmLJF+bCUnrpmtAsz3xKHxzGU9LmeMqtd8KCWVbMlfbA2ZbD5dzDXOLF9AqBp85Fn3rCZXBGkQLBqMjGgxTDUvjGGurBRGLDDa7CjArD2/bTR+7bZPbB00rNHAwuPags5OAM7Uxtl/AswCCt5CQuo7xuV5QufLwuqSAlLbxsFXAu6J6u3aQu5eRq1zwtxjmu4wQuraBuJekMqWAvBFjvULQtWCzuowQub6xtKrkG5cLCth7GaOLBlGLYefRCQKwqTkWuP9aILBYtjec4DWswb6c678DgQCzGwgHULu3hcBioL6E8S6ZkBq10cDDq8ARBsB4sC/HsbLGAsESYcGU0DK1YbxgYK+Q5MFz8BnSocIky8FyJ7yBYMC14b1kQL3jsL+NkADcu4J+QLy3YcN8gMO1Ib1hwMPIWC7wIsAytxF7qxQ/gb5Y8MC/ocRiwMTj0DCEwACNaxXK6wZcfJhNcQgHQMMUocXUNC0XE0VYTB5jrBLkMQDKEUUEcxxsvMPR8QAy7JbSsh17TAaGmxfkwBd94A9qvLBoLB0I4MV1AAz2MchlUMi3ccd4IMnSQclIux0FoMFYkACBXB6c3MnucchW/AP/s7HIIVHKppwrDfC4ShAtrIwUc2wHZSwRqNwG3ULKjpDLnBrLaIATJOxSjwDMuswULmwEx+IeOlwH5psrWlGVDzHFjvHMkRwhCCDMJPsP9/HHc2C3tgETDiDBQsARxSwW4DwHDGDNjpEtQAG1jJLOPLHO4VzL+hgTtrDMgskRALEhjkMJ4kwrD2ApTdAK85wgylIJmesfBiEAj+sm2/Al7iy65jzE+PwWBfElahLRHAEmAH3RflC6h7LR5nALZxoAt0AAAmAAX5LRESPSIx3GIZwlMbEmrmCqt3AAXlIActIinLIJzGu6mVbUmPYkS5HKaDvUIWzUTl3RxyG+mmDJ/0h9JBaLCExd1f5xy4iQxlr91acWClQN1ixiz4DQtmSd1pgKyoaAs2pN1vdbCfX71kgd1KQgN3QN1lI9CmOd176MClXr186sCm4t2DVi1l0N04Y9HbL8Q1C82G3Iz4rQ0JCNIHutCv1b2Rriw7rQH5oNIWVhDcD72a3C1pUAwqRtH87bC7yR2u5x2awdxK59RkodCGgz29ER0O0QzbhdGwjQ2JUQ2L0NPbVNCO473LXB2fuA1sjtGAycEajd3M4t06WQ2dJNGMr9NMJ93SWMzacwG9z9FgUg2aGA1+E9Fm9sE2B83t+E2KUQx+zdWKatC0gc31Di3b1g3fYNJUa8D/8Ps99MSN6ws93xbcJcURcALnMCvgsKELuLjcn/MsoJTn4LTg0IPuHiABmSceEY/ogEnBhlq9hgDeE6dBQdjqkkzhl1IeJOAgDZzRlfQdNv/cgVrhANTs9HUsXNsRb2rePWkcfsvQDzDRWizOIQchDxERjcPRLULRcr0ds/UePXYyrDvQD9DRtTYeTakZRD/hccAdUA3QBN3hlGgePRkS0MUNwpEQA4Aeb+MRJdfho4oeVM48dqPhRfARFqDQB2bidlXtWuEuc7buJPAud8xih0zkZWPub7USogbSN+LOXfMRU+rSFpAtyN7iWJLlMCwOgw8guETitMgenH5ACZ4h6NI2HQiqPSE+3mHPjQBHDn8cHqBvDPq0EO+izpU9IKEy0MGg0AWmILPvQmAuAlvm6lwK7PpM5aK+0ALU3RTx3tNv0lBgALtrDsO9MKLF3snRbt0f4M5gDRt6DrIlbu5n7u6J7u6r7u7N7u7v7u8B7v8j7v9F7v9n7v+J7v+r7v/N7v/v7vAB/wAj/wIhYCACH5BAkEABEALAAAAACUAmYBAAX/YCSOZGmeaKqubOu+cCzPdG3feK7vfO//wKBwSCwaj8ikcslsOp/QqHRKrVqv2Kx2y+16v+CweEwum8/otHrNbrvf8Lh8Tq/b7/i8fs/v+/+AgYKDhIWGh4iJiouMjY6PkJGSk5SVlpeYmZqbnJ2en6ChoqOkpaanqKmqoQkErgKwsbKztAyuBAmruru8XQkHBQgDwxDFxsfIycrFw8MIBQauCr3U1dY9CQwCDwsDy9/g4d8DCw8CDgTX6uvsEdnb3eLy8/TI5Abo7fr7ogQN8fUCChQ4AMEDBtP4KVz4SMGBBwAGSpxIcEE0hhgzBmLQAAHFjyADAjBwIKHGkyjf/zwMybIlvQEFBJhMSbPmFwYGIrrcyTMcAgczbQod+iRBx55Ik34r4CAA0adQiShw4FGp1avISEbdytVGAGDesIodC0Bm17NoUTB4EHasW7cX08rdqqCBzrd43yI44HSuX5oE2OYdnLds37+IFTIoQLjx4JGHE0u2RmCB48uPDUSezDkVAcaYQxdusLmzaVAJQItenVdA6dOwLykwwLr24J+xc1sKIMC279sMdAt/xKDq7+NvGwQdzlyQAsvIo78F4KC59UANpGvHuyDd9e94CNzdTl4safDo4wTIXr49We/p46dhMN69faua5esfs/6+f7EAwLffgFokAN1/CFrlGv+BDFrhQIIQXrVALg1W6EQAqkWoYU8AHGDhh0mIt+GISRXwGogo7vAgiSxyKGCKMN4QwAMt1tiThzHmSMNzNva4UwM6BvlCAvX5aCRFC5wo5JIHHOkkSwBQuOSUIrD35DALQEPLlrI0UEABxPTYIZVT0tgjTAU0cAAuOyhAgDbbANCWhgKQqWMAB5JYkAFSHqGANhkiaICdMOI54j35REHAATklaCKhHyZgHIIGJZqFQw9M2t4Cy0EqH5EIjlTSGAk4kCd5E3o6IKj3IWBAcGn82Sh5Uar6aZHaldVpGl8FilyttoLHKq2v2jHVqb8FGOx1w2q3Fx8EzHocsMsK1yz/cgM88OIeU2laG7XVwnZtsmYRcgCyq4EbLmfj2mZYIgR4K5q66yJm6K8LMlKcb/TWK9e95CqJCFW2IbCrv13R9tsA+UrCG66OJYnwXAr7ZsDBDZm5msQTn1VxbQVsawl9rC3QcVdNuludJ+vNedmgJ0OVcm0PCIyJgasBGfNQBLgLKykfX4bjzjQpAHFjNaNCMmb9Er0QwKEB8DMqM0aNsdPtaBxa0rs4cLRbJmON0YpRD81LvJjBLDY/CbjcWKrWKOBrXiuv3U4A8g6W3zpBD9an3ddo7Vjd7MxMGAI2A56K4Y1JrZCIjRWgeNxfj4XA3/rw2Fidk/cyN3eJX4Oh/2Mid24K2UiHvo6VeSFuuipGv1wT42+p/bop6NYuVLtiTX27KL05ZntNvF8FgOq/V9K2Y2bvXnlSDyQviuB4NT+U5nj5Lr0mDDDfVQDPc4j89o2A35jOXUmaV/Tka8I6XsNzhXdepbcPSc+ExZ9++DuFbX8lucMK+/xSvKRw7n+SQN1bOPaXBOAFAFdDoCHM17rxPYV2VxmgBBtBPQBh7i8KxEr9NkgI/NHvNH2ziv9ImIgAWoVwnflcUqzHwkFgECv6mwwFxYKAGh5ih2CzIFoKyJMD+lAQwZtOBBMTQqUc74iCAOJYtBebFBoQioHo4FXQN5z5AUiIWGSDCcH2nf/licWIYcyDFpUygA8KJ4nGA2MazzDGsaDROjIs4hzzkDelrLCM/AMJAPZ4hyZapY3ygaNVaEjINkgRK1xMjwtd0sNGykGRWHGdfuqoFEZaEg0KcNtVRngdK/JEcp90gymTkkP0xA4rS0zlFzgZxwZhEimtlKUY8oiUO+6njy55oi7P0L0FfoiWNxrmGYCJFFLGh5csqaQyx3BDpUSyQQoQizOnaYVHWkWTIFplS3LJzSvc0ipUxKYodyLMcnLhlWNBJYzEyRJPupMK9NzJAGKpn1Bm8J5bMKMdg5RPkMgRoEWA5k7AGaNsXsWeCG0CMpWyzQYVFEkRtQIzeaJBHU3/1CX8zCgRqomUdgppkiGBoUiZ4E2l+DJHJGWJPFfahHMmhaFL2qhBadoEeGqTUDZtCUR5GoSLsqSjU3KoUshJ1B8IFCsQ9NQaodTUJCjUJS9l0iiraoSP9gSnZGppS7LKVR7o1CVDJagKyzqEmJ5yWcVUykHZugIvjqWiQQqkRNJJ1xsEtSdMndL7eHLNvspIr4KcK4jiipQ/GvYGRg0JWQmFWIE8Vgf+tJxiUTTVkOD1sim4qlD95daPTBa0K/DqW/0VAKsgFbUvQOlOPksl2U5kkLCVQWldElhI/RUkIc2tXaEaXCqp9iN8ze0JfruT09pqnSxxrnIjIFbxxUy0/wN57XRNEFmQqNRfzJ2INLeLgszykGjHpQh5VYDdkCQ3XK2l6HpPkN6WzDRmZ5VIWmFr25bQVlXdrYd0QbvbcYrNkEedLwmGe5V9iq2+A7nvesNr4LVBFyQDULAIqssTkzqtvwPRcAQGqyDAdfYj/+WqeaG6WaDKd74n3sl3icZYPa4XwiEZ79oceMX1thck+53YhT+iXQIbs3P5FYiEYZtk95rux/RYMmgpLNPXBXgeGZ4uh3mS4npROSBZVi6Jl3q7AodYuStucHERhuOAuLGvMebt79pcjy5HlM4UGUCLlxXfZuYWyhQp7OSGTBE7A9TMIfGw6Qg9kfdWtckgGf+w0ypLD0mL9MuJ3R6g5WHpiG5ZxuTbtDg6jVBMfwS3mu6xYdN8lRk/WdV9vbJ47SfqcJDanXimSJDXVmtw3LqcvQ6IlG8X7GX8epo1FuH/iq2MYysT0h/preKYnQxn6xLBJd3zxKiNDGun8tMucfXvuH0Mb3/S1BTRcfvIbQxzWxLahd4gu4vhbkJiuydFlh685bFrboIbSmu2G6MlYuhUyloi9T7ZwAdScEs+9Srq/t/CBdLwRs77G46e84uJimiQDJt8uZaHtsP475A4mIUdf0lVxwzrDaJbHmGm6cOtomgEshwkEY/oxZfR79dd/OPuTDlFgN6+fYuD6NNk8CH/3yzxpAj6ni+XiLSTx+NeynzimT5istFK050rQ9z/i7o4Kg7FrfsxjDsP+BxL7tkwGj0cMUfozQFLcqzXI+fcnLkT1W66kB9dpCCWbBrFHo6nK1Pos05jnCUCdlmyHSRkVxyl6RF5Eh48wnOsOlJGLkEC2D3PfH8d4uWB6nu+XSAJt9vlw4F0SxI+IGA94uTnYfhUsnqRe9R8Mu/p9WS0HoH3BgnTP2n2pCByj4EH8z0f/5HakzAAn4/yPVcvEs4DbvScxnX1Grn4vZYTalhxbBhnPw/rb+/1Aan85LAvDvGnUu9k5r5VnL/H3iOj5lCEPjq5iX4BW5L94mB+v+NT/5n0SckXEO5nSfaHDOo3ObfnEvQXRsHHUZ80d203TASoZp9EfqQ3Td0XXZ8EgOEwdT5UfDclgIBzgAHRc8/HgQORcSzkd+U3TB8YEr9nef+kSyaIFMfXSA/IdbKUgVtkcFiBgpOzgMeAf1j0gy2RbxKYFyz4P9QnDlH4P0JoFTe4QcxXfbKkgiiWSv0HDiTocnkxhhfSMCiyhQEBgyyke18EBgIwAGb4HVPoE11IN2DwSg3YGUw4VmDYOmFQMQk4IDUoEUa4NjJIcGBQR6k3GYkoD07oQ0onQGEQKE2jHwvIhhtUh/UQVV+AQYOYHiIoDnhXdoPRiEEwiRDQeNehhv8BgYp2c4XfdIg9YFOeOCAW2BK0+GGDoYlQUF1ZmBvwxxNzSD5hWA/B+AT0BItncXr0EHoalxcn5wXDaAyX2BzHCA7JSD6uSBHM+ANXtY2TUY2zZXGPsYs7sIPdFh9eqGSNlI30UIVM0GR7GBXw+A31+GCEIY5MgGmxpxvk6BL8OIDOOBA92AXMF4mdAX5WkY9Yg4TJUIxMIGvyiBa5aF+EdJHW9QUB+Q3XyBmPSHl7NIoDwYpUUGsMFBvdKGy554ITMZBKoI7yIJFb0Y4DMXwSxJBjcZBdUJAV+RScOJN7VIh+CIcugZNyMYHBBI2do5FfhY46sJJJCJXs4IZX8Y3/MUOSDBeIPJGS9uKSnUiV9WKVbqGQVNCRAkGTKaGTuBdGsshildhyFIMXMDk56tMYP5kEMhloiBGU84CU7UNEV1GXSVCQYugX92hrbmmYEqGEWKCUkSYXWjkP/5iTNhkSeYkEUjkPmdkOkzkPDtkxbFmWYuCUmIkyeoNFo0kWTIkEfbh7ULGXHSaWX/AVULGaU7RLg9GZ1PCZ8+CLd2AoWFkK2NMYaqkEITkQvLkLvgmJiAAwEbgPxXk4tIkDjFmSQtGc4uCYfQB+x6kLgokVPNkF2kkP0ckOiSkPgJkHOsk1GgE5lzGcPoCW+JESful/ExRAXqkQ5YmMZdCf87Cf//tQNYQRin0wSQaDEaapFJXZBUTJEwn6NJdJEbdICPmkLPwQAPc5EaFJBKr4QOsJntcpEMBZB0ZlkqswnYOTBuEpnsvJCQcQfS1xnnfQXe55DQBaD2bZBZCJFY/CN5dhoHtwZXBTDRpaMtVZVKtxOdegonjRoHxwcNRRDZXBGh8pBqMjGgxTDUvjGCFqB9S3N7qQno32Bh86GD+6CgQqNIZQhwjQoYeAM7WBomJAnwDyoo3QpY5BoyZKWEnKB3FoG9+ZBTkqbH+qB2t6GYTJBhvaHaVQpbaRpnFApo1Jp5WgpxFzqFewocYgpizDqSAhoG8Aqun2pZCQqJdxpXlAqv/F4DieIABg+VWt6QUQWQ9yqKlv4DWsYapzsKBDx6uIcAAjGkzAWga42ThoaAmpURslKgeFegwXcwn7chzjWQcKMKwt8S6V0DK1gadm8Kz3l6yO8BnS4a2+EKtIgRuToKu1IZ+fmKruyqIP+hbmSo0yajmW+gfsWhuDqgbgCg57gatbQK7aEa9ZwAD3iq8CqwXC+hv9mgb/up3iuhETOhZ8GgcRW6kLWwUHgK7EWAgZOw/lAghfga1OB7LkMQDKEUUEcxwPmwa+WjtwmgXR4rE4dAg9ihnkwBd94A82+7GHELN60RR5AAz28bJrkLOhgQAriwdGKx1IuwZC+xZy2Kz/YJAA0tIeUbsGIfsRO7uxQDAbP4tLjECplNQAxUqzWeseF6sHXYthC8CzbNAt5bG1bfC2A8G0VjsFOGGybmGw34ogMAEUZ3As7gG4geseI7G3S4ApCbsaiJu4CcK0M7sDRlGxUCgJsmkbMCEAaUsEHOG3uzkJCKsh2UK4WPAVBiC6D0UJ8HkfnWsLs7ojHAEQG+Kqk9Ci5QEAD2ApTdAKjMK6UFW5b3CXEWIQAtChbrINX/K4v/K5gKC77lEQX6ImyssRYHK70EuymMsazlAA5nALIRoAt0AAAmAAXzK2v1Gku9G90UEOXyIAa+IKX3oLB+AlBSAnLcIpmoCqZ9IM/wAcwM3wJEsBtmdwpAScDAK8wAD8JJKaCVObwE6yo5DAqhKcIG3LCHh7wccRuXWgtBx8JPUavcIbwtuBu6DwuiYcwqp6Cce6wj3Cv6QgNzAcwg8sChFcw/dht0GrwwnswX2AqT5cIyMcrOo7xOlCvISQpUjMIjKcou7bxKtxw6lgtlKcHAaMqDl8xekCxIRgvFzcKozLCdMaxvfBvtTAG2ZsH1TMC/67xtIxsdSANnAsHSi8DkJcxwWjxJGgxnr8Gzd6Nxb8xxJxHguxrIQsGggwxqdQxol8GUyqEfv6yINhyBnRH5RMGGVRNIOcycdQALObCjTsyXARyqqAyKTMoP9FXAoNm8p+xMjW0MquHExe/KpHnMlTyhWTPMuBZsrVUBe8nGhyTBQPE8wI58vqoABWbMZN+y8CUMJN3MxzAczGPA+QMRmOXM3356n2srbafAzSjM1RjMQAEM6TURe3DMPlnMW6sBbajAAjGxvKDM0E/BPs3AvoPMv2fB0t68oLAMto8RXj/CQHER+B4ckjsb2IwRGE/BPIjBaG+8cLkK/CIdBmXLUfwhHOKyZomyJ0O8TZwgD3vJY4sdG3WyxBEtEs/AByGyRfARErzLstPSUvnc614SoALR+hm8CLWy04MdBaOtEKXSGlkr02wtIPTSAvTc+D2QB8HB9Gkb8aEhOkQy0kfyIAQO1ETPHUDUIADpApiosPXA0ii+IlJu0SBRG+Iy0f5Hu+trsa8CsACIFAbe0lwkC1AKAltuBDbyIAdn3WMJfXMbHXa1e+DnC+zcvAio0lX/IlBgALtjDWHdMK5uvXjZ3Yi83Az2AOyXsLSS1ioB3aoj3apF3apn3aqJ3aqr3arN3arv3asB3bsj3btF3btn3buJ3bur3bvN3bvp3aIQAAIfkECQQAEQAsAAAAAJQCZgEABf9gJI5kaZ5oqq5s675wLM90bd94ru987//AoHBILBqPyKRyyWw6n9CodEqtWq/YrHbL7Xq/4LB4TC6bz+i0es1uu9/wuHxOr9vv+Lx+z+/7/4CBgoOEhYaHiImKi4yNjo+QkZKTlJWWl5iZmpucnZ6foKGio6SlpqeoqaqhCQSuArCxsrO0DK4ECau6u7xdCQcFCAPDEMXGx8jJysXDwwgFBq4KvdTV1j0JDAIPCwPL3+Dh3wMLDwIOBNfq6+wR2dvd4vLz9MjkBujt+vuiBA3x9QIKFDgAwQMG0/gpXPhIwYEHAAZKnEhwQTSGGDMGYtAAAcWPIAMCMHAgocaTKN//PAzJsiW9AQUEmExJs+YXBgYiutzJMxwCBzNtCh36JEHHnkiTfivgIADRp1CJKHDgUanVq8hIRt3K1UYAYN6wih0LQGbXs2hRMHgQdqxbtxfTyt2qoIHOt3jfIjjgdK5fmgTY5h2ct2zfv4gVMihAuPHgkYcTS7ZGYIHjy48NRJ7MORUBxphDF26wubNpUAlAi16dV0Dp07AvKTDAuvbgn7FzWwogwLbv2wx0C3/EoOrv428bBB3OXJACy8ijvwXgoLn1QA2ka8e7IN3173gI3N1OXixp8OjjBMhevj1Z7+njp2Ew3r19q5rl6x+z/r5/sQDAt9+AWiQA3X8IWuUa/4EMWuFAghBetUAuDVboRACqRahhTwAcYOGHSYi34YhJFfAaiCju8CCJLHIoYIow3hDAAy3W2JOHMeZIw3M29rhTAzoG+UIC9floJEULnCjkkgcc6SRLAFC45JQisPfkMAtAQ8uWsjRQQAHE9NghlVPS2CNMBTRwAC47KECANtsA0JaGApCpYwAHkliQAVIeoYA2GSJogJ0w4jniPflEQcABOSVoIqEfJmAcggYlmoVDD0za3gLLQSofkQiOVNIYCTiQJ3kTejogqPchYEBwafzZKHlRqvppkdqV1WkaXwWKXK22gscqra/aMdWpvwUY7HXDarcXHwTMehywywrXLP9yAzzw4h5TaVobtdXCdm2yZhFyALKrgRsuZ+PaZlgiBHgrmrrrImborwsyUpxv9NYr173kKokIVbYhsKu/XdH22wD5SsIbro4lifBcCvtmwMENmbmaxBOfVXFtBWxrCX2sLdBxV026W50n68152aAnQ5VybQ8IjImBqwEZ81AEuAsrKR9fhuPONCkAcWM1o0IyZv0SvRDAoQHwMyozRo2x0+1oHFrSuzhwtFsmY43RilEPzUu8mMEsNj8JuNxYqtYo4GteK6/dTgDyDpbfOkEP1qfd12jtWN3szEwYAjYDnorhjUmtkIiNFaB43F+PhcDf+vDYWJ2T9zI3d4lfg6H/YyJ3bgrZSIe+jpV5IW66Kka/XBPjb6n9uino1i5Uu2JNfbsovTlme028XwWA6r9X0rZjZu9eeVIPJC+K4Hg1P5TmePkuvSYMMN9VAM9ziPz2jYDfmM5dSZpX9ORrwjpew3OFd16ltw9Jz4TFn374O4VtfyW5wwr7/FK8pHDuf5JA3Vs49pcE4AUAV0OgIczXuvE9hXZXGaAEG0E9AGHuLwrESv02SAj80e80fbOK/0iYiABahXCd+VxSrMfCQWAQK/qbDAXFgoAaHmKHYLMgWgrIkwP6UBDBm04EExNCpRzviIIA4li0F5sUGhCKgejgVdA3nPkBSIhYZIMJwfad/+WJxYhhzIMWlTKADwonicYDYxrPMMaxoNE6MiziHPOQN6WssIz8AwkA9niHJlqljfKBo1VoSMg2SBErXEyPC13Sw0bKQZFYcZ1+6qgURloSDQpw21VGeB0r8kRyn3SDKZOSQ/TEDitLTOUXOBnHBmESKa2UpRjyiJQ77qePLnmiLs/QvQV+iJY3GuYZgIkUUsaHlyyppDLHcEOlRLJBChCLM6dphUdaRZMgWmVLcsnNK9zSKlTEpih3IsxycuGVY0EljMTJEk+6kwr03MkAYqmfUGbwnlswox2DlE+QyBGgRYDmTsAZo2xexZ4IbQIylbLNBhUUSRG1AjN5okEdTf/UJfzMKBGqiZR2CmmSIYGhSJngTaX4MkckZYk8V9qEcyaFoUvaqEFp2gR4apNQNm0JRHkahIuypKNTcqhSyEnUHwgUKxD01Bqh1NQkKNQlL2XSKKtqhI/2BKdkamlLsspVHujUJUMlqArLOoSYnnJZxVTKQdm6Ai+OpaJBCqRE0knXGwS1J0yd0vt4cs2+ykivgpwriOKKlD8a9gZGDQlZCYVYgTxWB/60nGJRNNWQ4PWyKbiqUP3l1o9MFrQr8Opb/RUAqyAVtS9A6U4+SyXZTmSQsJVBaV0SWEj9FSQhza1doRpcKqn2I3zN7Ql+u5PT2mqdLHGuciMgVvHFTLT/A3ntdE0QWZCo1F/MnYg0t4uCzPKQaMelCHlVgN2QJDdcraXoek+Q3pbMNGZnlUhaYWvbltBWVd2th3RBu9txis2QR50vCYZ7lX2Krb4Due96w2vgtUEXJANQsAiqyxOTOq2/A9FwBAarIMB19iP/5ap5obpZoMp3vifeyXeJxlg9rhfCIRnv2hx4xfW2FyT7ndiFP6JdAhuzc/kViIRhm2T3mu7H9FgyaCks09cFeB4Zni6HeZLielE5IFlWLomXersCh1i5K25wcRGG44C4sa8x5u3v2lyPLkeUzhQZQIuXFd9m5hbKFCns5IZMETsD1Mwh8bDpCD2R91a1ySAZ/7DTKksPSYv0y4ndHqDlYemIblnG5Nu0ODqNUEx/BLea7rFh03yVGT9Z1X29snjtJ+pwkNqdeKZIkNdWa3Dcupy9DoiUbxfsZfx6mjUW4f+KrYxjKxPSH+mt4pidDGfrEsEl3fPEqI0Ma6fy0y5x9e+4fQxvf9LUFNFx+8htDHNbEtqF3iC7i+FuQmK7J0WWHrzlsWtughtKa7YboyVi6FTKWiL1PtnAB1JwSz71Kur+38IF0vBGzvsbjp7zi4mKaJAMm3y5loe2w/jvkDiYhR1/SVXHDOsNolseYabpw62iaASyHCQRj+jFl9Hv11384+5MOUWA3r59i4Po02TwIf/fLPGkCPqeL5eItJPH417KfOKZPmKy0UrTnStD3P+LujgqDsWt+zGMOw/4HEvu2TAaPRwxR+jNAUtyrNcj59ycuRPVbrqQH12kIJZsGsUejqcrU+izTmOcJQJ2WbIdJGRXHKXpEXkSHjzCc6w6UkYuQQLYPc98fx3i5YHqe75dIAm32+XDgXRLEj4gYD3i5Odh+FSyepF71Hwy7+n1ZLQegfcGCdM/afakIHKPgQfzPR//kdqTMACfj/I9Vy8SzgNu9JzGdfUaufi9lhNqWHFsGGc/D+tv7/UBqfzksC8O8adS72TmvlWcv8feI6PmUIQ+OrmJfgFbkv3iYH6/41P/mfRJyRcQ7mdJ9ocM6jc5t+cS9BdGwcdRnzR3bTdMBKhmn0R+pDdN3RddnwSA4TB1PlR8NyWAgHOAAdFzz8eBA5FxLOR35TdMHxgSv2d5/6RLJogUx9dID8h1spSBW2RwWIGCk7OAx4B/WPSDLZFvEpgXLPg/1CcOUfg/QmgVN7hBzFd9sqSCKJZK/QcOJOhyeTGGF9IwKLKFAQGDLKR7XwQGAjAAZvgdU+gTXUg3YPBKDdgZTDhWYNg6YVAxCTggNSgRRrg2MkhwYFBHqTcZiSgPTuhDSidAYRAoTaMfC8iGG1SH9RBVX4BBg5geIigOeFd2g9GIQTCJENB416GG/wGBinZzhd90iD1gU544IBbYErT4YYOhiVBQXVmYG/DHE3NIPmFYD8H4BPQEi2dxevQQehqXFyfnBcNoDJfYHMcIDslIPq5IEcz4A1e1jZNRjbNlcY+xizuwg90WH16oZI2UjfRQhUzQZHsYFfD4DfX4YIQhjkyAabGnG+ToEvw4gM44ED3YBcwXiZ0BflaRj1iDhMlQjEwga/KIFrloX4R0kdb1BQH5DdfIGY9IeXs0igPBilRQawwUG90obLnnghMxkEqgjvIgkVvRjgMxfBLEkGNxkF1QkBX5FJw4k3tUiH4Ihy6Bk3IxgcEEjZ2jkV+FjjqwkkkIlezghlfxjf8xQ5IMF4g8kZL24pKdSJX1YpVuoZBU0JECQZMpoZO4F0ayyGKV2HIUgxcwOTnq0xg/mQQyGWiIEZTzgJTtQ0RXUZdJUJBi6Bf3aGtuaZgSoYRYoJSRJhdaOQ//mJM2GRJ5iQRSOQ+Z2Q6TOQ8O2TFsWZZi4JSYiTJ6g0WjSRZMiQR9uHtQsZcdJpZ8dplOFpdQKDOE4Yu3gz2NoZZKEJID0Zm88JnzYJbS45uHQ5s4wJglKRTGSXrMqSqCiRU82QXRWQ8R2A6JKQ+AmTyQcxlY6VTRtxPAqQp+6X8+lJ0sSQbsSQ9eyQ9VQxihSD6mqRSV2QVEyRMGwxCraTytSTT/AZCeExGaRKCKD/SdunCXu1lDyjk4aVCd1kmcnXAA5ckS2yl6rIGcXACZWPEofHMZ9fk7A1oy0wkEBCoRl3MND4oX+QmethlMCoqQECkODFMNS+MYM6o43dlob4CggwGiqzCfQrNBOFMbJkkqF8ohFOoIOeoYGcqjS4pLc/CeEXaiekCkl0GYHVMZviGkcdCjjZmkIwOWIRGfyVOivoGmb5CiH7GioKCll/GRnSMAZsqfAdoFNfoSe8MJXsMaO+o0B+Cc7BSoZvCfjYOGlpAatcGbNEao+mSoZ6AAkNoS71IJLVMbTRosnyEdm0qNd/pVZEoIf1ob40klCbCfb/Gp/xw5pRA3qn9QqrVxntXSqdpxqlvAAK76qliKnZUaErQaLAwQo+ZhQ9tBHb2KBQcQquZ5O1/xq0gRpXRgpS0xAMoRRQRzHMEKKdHCrFexrWrgoZhBDnzRB/7grc3aOcBgH+C6BuIaGghwrXiwrtLRrkuSANLSHva6BtTKE+SarEMwG+hKd3bTrf8hrXvQrz3xr23QLeWxrzCCE9A6UI6gsDzIFHm6BMfiHrhKIJiyq5jRsWlgsfjZAAaKDf9wH6xqIRwxsbkpCbqqIdkCFFnwFQbgsm3pL3/yDyCbLo4qCBJaHgDwAJbSBK3AKDhrPCcLHoviJT3rLpIKtAM7rs+QJv9rIhUcASYbQqdk8rS/ATeXgKgymyUxsSauMKO3cABeUgBy0iKc4i9eaxtgGrZuuh3NcLd4i7dPMrfVErcb+gl1+yQbgrBL4reiIbJ48K6Cu7gryyCGO6c/+wjhubiU65FRKySP+zYZiwhyU7me63sA2xyZm5qocJ+fOyKIqx+ju32qsKynu7jK4jSrOxZvqwst+rotwrcKFyHnwQv9gbs2UhYClyAIELmesC/ASyJgKzazqxS667uqmry2oahY07wcYryj8KTSax8IsLQwYr07wTX7oKbb6x69O2juUbwZgbzl6yyX27ftcb4Y8bvtOy2p+73kUQCbewqdW7+2cTH/0gO+4tW4pjCo/isaC4C9CCPAAiG89ji1BywO1GE/DKyd+0sNdRHBD0S9yVPBnHbBLCqmGlwM8tp0tVHCc5HBI8whfYpAHqwMkMEZAwrB5YvCEvTCSWjDk1EXNPy6ACC/JITDEIAA5ZIbCiAASbu4PxG6XdsYS3wd2brC7afAnVPBBxEfgSHFyzAS7/s64PsTIHwWG6vFELAAsGrCDVYsLNsAQiwdP9zFAXxIB8HEQxEAONHG36LGuuS3Q1uuQvIVEOHDD+DHyvS0rkLF+9GysKvH5eSq5OAAcFwhpaK1NjLIYdw+F5om3rsfRsG2GhITkQxFWAcATLHJx+QAmeIehCNRtDw1ZAVhDgRAxwwSAAQgAAYAEKxBDjGBEH01JwNAygYgALbgQ28iAF4iDG/xy18izKYMRbBgC828M61Qy8b8Jdact9iMzc9gDgJwCwRwySIWzuI8zuRczuZ8zuiczuq8zuzczu78zvAcz/I8z/Rcz/Z8z/icz/q8z/zcz/78z+kcAgAh+QQJBAARACwAAAAAlAJmAQAF/2AkjmRpnmiqrmzrvnAsz3Rt33iu73zv/8CgcEgsGo/IpHLJbDqf0Kh0Sq1ar9isdsvter/gsHhMLpvP6LR6zW673/C4fE6v2+/4vH7P7/v/gIGCg4SFhoeIiYqLjI2Oj5CRkpOUlZaXmJmam5ydnp+goaKjpKWmp6ipqqEJBK4CsLGys7QMrgQJq7q7vF0JBwUIA8MQxcbHyMnKxcPDCAUGrgq91NXWPQkMAg8LA8vf4OHfAwsPAg4E1+rr7BHZ293i8vP0yOQG6O36+6IEDfH1AgoUOADBAwbT+Clc+EjBgQcABkqcSHBBNIYYMwZi0AABxY8gAwIwcCChxpMo3/88DMmyJb0BBQSYTEmz5hcGBiK63MkzHAIHM20KHfokQceeSJN+K+AgANGnUIkocOBRqdWryEhG3crVRgBg3rCKHQtAZtezaFEweBB2rFu3F9PK3aqggc63eN8iOOB0rl+aBNjmHZy3bN+/iBUyKEC48eCRhxNLtkZggePLjw1Ensw5FQHGmEMXbrC5s2lQCUCLXp1XQOnTsC8pMMC69uCfsXNbCiDAtu/bDHQLf8Sg6u/jbxsEHc5ckALLyKO/BeCgufVADaRrx7sg3fXveAjc3U5eLGnw6OMEyF6+PVnv6eOnYTDevX2rmuXrH7P+vn+xAMC334BaJADdfwha5Rr/gQxa4UCCEF61QC4NVuhEAKpFqGFPABxg4YdJiLfhiEkV8BqIKO7wIIkscihgijDeEMADLdbYk4cx5kjDczb2uFMDOgb5QgL1+WgkRQucKOSSBxzpJEsAULjklCKw9+QwC0BDy5ayNFBAAcT02CGVU9LYI0wFNHAALjsoQIA22wDQloYCkKljAAeSWJABUh6hgDYZImiAnTDiOeI9+URBwAE5JWgioR8mYByCBiWahUMPTNreAstBKh+RCI5U0hgJOJAneRN6OiCo9yFgQHBp/NkoeVGq+mmR2pXVaRpfBYpcrbaCxyqtr9ox1am/BRjsdcNqtxcfBMx6HLDLCtcs/3IDPPDiHlNpWhu11cJ2bbJmEXIAsquBGy5n49pmWCIEeCuauusiZuivCzJSnG/01ivXveQqiQhVtiGwq79d0fbbAPlKwhuujiWJ8FwK+2bAwQ2ZuZrEE59VcW0FbGsJfawt0HFXTbpbnSfrzXnZoCdDlXJtDwiMiYGrARnzUAS4CyspH1+G4840KQBxYzWjQjJm/RK9EMChAfAzKjNGjbHT7WgcWtK7OHC0WyZjjdGKUQ/NS7yYwSw2Pwm43Fiq1ijga14rr91OAPIOlt86QQ/Wp93XaO1Y3ezMTBgCNgOeiuGNSa2QiI0VoHjcX4+FwN/68NhYnZP3Mjd3iV+Dof9jInduCtlIh76OlXkhbroqRr9cE+Nvqf26KejWLlS7Yk19uyi9OWZ7TbxfBYDqv1fStmNm7155Ug8kL4rgeDU/lOZ4+S69Jgww31UAz3OI/PaNgN+Yzl1Jmlf05GvCOl7Dc4V3XqW3D0nPhMWffvg7hW1/JbnDCvv8UrykcO5/kkDdWzj2lwTgBQBXQ6AhzNe68T2FdlcZoAQbQT0AYe4vCsRK/TZICPzR7zR9s4r/SJiIAFqFcJ35XFKsx8JBYBAr+psMBcWCgBoeYodgsyBaCsiTA/pQEMGbTgQTE0KlHO+IggDiWLQXmxQaEIqB6OBV0Dec+QFIiFhkgwnB9p3/5YnFiGHMgxaVMoAPCieJxgNjGs8wxrGg0ToyLOIc85A3paywjPwDCQD2eIcmWqWN8oGjVWhIyDZIEStcTI8LXdLDRspBkVhxnX7qqBRGWhINCnDbVUZ4HSvyRHKfdIMpk5JD9MQOK0tM5Rc4GccGYRIprZSlGPKIlDvup48ueaIuz9C9BX6Iljca5hmAiRRSxoeXLKmkMsdwQ6VEskEKEIszp2mFR1pFkyBaZUtyyc0r3NIqVMSmKHcizHJy4ZVjQSWMxMkST7qTCvTcyQBiqZ9QZvCeWzCjHYOUT5DIEaBFgOZOwBmjbF7FnghtAjKVss0GFRRJEbUCM3miQR1N/9Ql/MwoEaqJlHYKaZIhgaFImeBNpfgyRyRliTxX2oRzJoWhS9qoQWnaBHhqk1A2bQlEeRqEi7Kko1NyqFLISdQfCBQrEPTUGqHU1CQo1CUvZdIoq2qEj/YEp2RqaUuyylUe6NQlQyWoCss6hJieclnFVMpB2boCL46lokEKpETSSdcbBLUnTJ3S+3hyzb7KSK+CnCuI4oqUPxr2BkYNCVkJhViBPFYH/rScYlE01ZDg9bIpuKpQ/eXWj0wWtCvw6lv9FQCrIBW1L0DpTj5LJdlOZJCwlUFpXRJYSP0VJCHNrV2hGlwqqfYjfM3tCX67k9Paap0sca5yIyBW8cVMtP8Dee10TRBZkKjUX8ydiDS3i4LM8pBox6UIeVWA3ZAkN1ytpeh6T5Delsw0ZmeVSFpha9uW0FZV3a2HdEG723GKzZBHnS8JhnuVfYqtvgO573rDa+C1QRckA1CwCKrLE5M6rb8D0XAEBqsgwHX2I//lqnmhulmgyne+J97Jd4nGWD2uF8IhGe/aHHjF9bYXJPud2IU/ol0CG7Nz+RWIhGGbZPea7sf0WDJoKSzT1wV4HhmeLod5kuJ6UTkgWVYuiZd6uwKHWLkrbnBxEYbjgLixrzHm7e/aXI8uR5TOFBlAi5cV32bmFsoUKezkhkwROwPUzCHxsOkIPZH3VrXJIBn/sNMqSw9Ji/TLid0eoOVh6YhuWcbk27Q4Oo1QTH8Et5rusWHTfJUZP1nVfb2yeO0n6nCQ2p14pkiQ11ZrcNy6nL0OiJRvF+xl/HqaNRbh/4qtjGMrE9If6a3imJ0MZ+sSwSXd88SojQxrp/LTLnH177h9DG9/0tQU0XH7yG0Mc1sS2oXeILuL4W5ConsiRZYevOWxa26CG0prthujJWLoVI4Z1ggc+EAKbsmnXkXd/1O4QBjeSBA7mYS5lgfF94hokAybfBkXh7bDyOBDBhxwHX9JVQ/eSx/eWxxhpimrnTjynbH8IxCPaJxH68N5Q+Dj7ky2VYDevn2Lg+jcNDpB/94c8aQI+p4vH4i0k8fjlq905klR9AaFznOR+nwZ4v5f1MOx8SOGXCCOZeHXTz5HpU88jG4fx0rHHpCpSy8AEg9IzrmJ9ZKyvXNnBwfSZfn1ZqeR7t94ujK5ftM57nwgYZdlya1SdsBRmh6V3yDiozzHqiOl5gh0uMnnmHJ6oPqeha/2HmUtj8E3svTiBf3aLj8PxX+b9vrdo+eTeU/WR5iQ2A4J0z8Z+Hogco8WB/M9J29NQuJdKa6f4+bnofUjwn4e9bafT7HSb/s9fiCOJmTqkZF2LOJeHrKXXvB7knnFXV8e5f/kv1li9/99XyC2J+T9T53+tT1fKeGXRoyHcP9p9H7oN03M13iWlHwBEX+NdHPsZ0l9xxL5l0bFVw/5dkQQCBLt9zsJiBQOZknnJw6nJ0vTh32fZIDiUH8sdIH0AFZpxIAB0X0sFHcBEYAYhxX91zkbuBPRt0G+Jw8ZGEaid0jD50MTWE/DJIOBlkpBeIAm+EA7uDZJGBJDCEUuSA80+D9PKA5biEA2WA8/KEHzJxHVl0Y9OFupdILLwIIIlIXz4IYs1TAoUoZ79W1haHpT2AMCMAByaB1d6BOyFIj1EHlU8EodyBlVKFmpNIAK+AUV44D7sX8DsYdYY4eeBQZ1lH2cAYfLcIU1NH7JAIpTEChNox+iiIMbtH4c8nf/SYBBkogeKigPewdFRXgVnCgEzGeI1oGJA5GLisOE6WaJO2BTUUUgabhTjUSI9aCKUFBdYxgbt8gTfyg9jlgiYUBPwIgWeRgOrng72ycWIegF02gMp9gcbLgUljSLArGNQHBV0cgueRdvlpSO4XCGV3CN5RYfwihssnQA86hrYdBkiQgV9rgMBTk5RGRfYYBpMKgb5eiDyoQzRggGmEiKkgE1W6VMo0NmYCBrX5gWyehx7sSMx4CPVhCR4HCOnfgWCZk8rAh5YVBrDBQbvigR8YhFBzCCyJCTTKCPKygc/SgQR5hKC/kSRUkFNhiSUGGS4VCNWIQ9H1GBVDB9SYkW/zHZEseYUVXzEbFYBTepDCiZFruHFe4IhCiWjTxRk/bCk/UwluUEe1Q5BSopdTo0lALBlJa0NPXwkFngc2fJDk4ZDj4pS+pTZ2EAlBMxl0MxmOFwlcvXXxgpBd2oDFDJEAfpa4YVAPm0lV6QlaYlF+zYl8QIRRDojM/olvyGFqOJmEb2DZMZBSMJZCijN7kFOcgAl4cYkB+hl+ugmOxUmp2HLKgJBaKYDL5pDa3ZjNsFNZcZIo2RnL2wnPQQm1WlMH6ZBZUZELy4D9RJfcJ5bgPwkj/wnQHBmOuQmeIAmSJGBXV5Fc+ZCo7Jae1ZBubZgOG5G5TIEl9Zn1mwnwv1jf+koJFK5J9l8IFuwZLUcJiEUZwGSpeq+REDIJ2eAJCOgZ4P6iCr8Sh8cxn9maFaMJ8CcTnXIJW3kZ8g2gMdGRoMUw182RjsmaJXgKB4waGr0JVCI6Np8J5kQaHEEaFNqKNpcJ8TYaMDCqASKaRqoJ5m2J0jA6RIgqJKCgQiKl4x+gg4yjRXOqV/6Rt+KKVy4DWssaVcigUEOi90aAmpURsOWqaXsp1amaaR0DK14aNuGgVH2Ri4MQliWhuBeadLwKOH46SA0Ke1EZ+AWgUMwJt60RSLcABwGhKImqhVQKTB5KiGsJPHMamUWqnkMQDKEUUEs6mdOgegiRnkwBd94A//UEqNpUoHpxoaCBCqeAAM2sGpr3oFlgqCC6CqcjAbrYpLuWoHu5oUqQqmQNAt5YGrw4oFxcpGTCGgPWUq7vGnzToFz/pwDUCe2PAP92Gn17oFi6oh2QIUWfAVBhCpYgGu4RpQweoYAPAAltIErcAo6voe7boHeWofBfElakKef+IljMovZJqvZ3CmLUIOXyIAa+IK7HkLB+AlBSAnLcIpBtsHnPkky9AMHNuxHfskRnqxe1ClGhshGCqybxCrJaux7IqyYoCbKxuzYlmwLtsGciOzOHsMIVuzgDCbObsh1sqzYaCpP/skyiK0h2CiRVsjO4u0g9AfS1sjZeG0+nKv/1E7GHBDtYuQpVeLIHKqtYnwol3rHgjArWDLBhk7tu5xHmcrCfuits5Cs23rB1ALt+Qyt5hws3Z7qNKKt38AqXsbGgvQpn6LCALwroFLgoRauI5QF4k7HV/LuJqgAEz6uBBAq5IrCo5ruR22N5lbCpyJuGqLuZ97CnUhukULAGxbuqtAuVYbsz+BrKw7CKPKueEwuLO7DoFhu2LJJ7mbOdTKuwuwuL+7ChwxsEeiunJbvFSDE8jLIiNBuMzbC18BET8br746vUPBEa/7LcWivenjAGDSIw8wKuBLQF6Cum4RE8t7voDhAJniHiMxr+5rkwQgAAYAEKyhsAKAEPUbH1FvIgBeIgxvMQAAsLC28L8o0gr3K8Bf8sAeG8ER/AzmIAC3QAB9q8AavMEc3MEe/MEgHMIiPMIkXMImfMIonMIqvMIs3MIu/MIwHMMyPMPcFAIAIfkECQQAEQAsAAAAAJQCZgEABf9gJI5kaZ5oqq5s675wLM90bd94ru987//AoHBILBqPyKRyyWw6n9CodEqtWq/YrHbL7Xq/4LB4TC6bz+i0es1uu9/wuHxOr9vv+Lx+z+/7/4CBgoOEhYaHiImKi4yNjo+QkZKTlJWWl5iZmpucnZ6foKGio6SlpqeoqaqhCQSuArCxsrO0DK4ECau6u7xdCQcFCAPDEMXGx8jJysXDwwgFBq4KvdTV1j0JDAIPCwPL3+Dh3wMLDwIOBNfq6+wR2dvd4vLz9MjkBujt+vuiBA3x9QIKFDgAwQMG0/gpXPhIwYEHAAZKnEhwQTSGGDMGYtAAAcWPIAMCMHAgocaTKN//PAzJsiW9AQUEmExJs+YXBgYiutzJMxwCBzNtCh36JEHHnkiTfivgIADRp1CJKHDgUanVq8hIRt3K1UYAYN6wih0LQGbXs2hRMHgQdqxbtxfTyt2qoIHOt3jfIjjgdK5fmgTY5h2ct2zfv4gVMihAuPHgkYcTS7ZGYIHjy48NRJ7MORUBxphDF26wubNpUAlAi16dV0Dp07AvKTDAuvbgn7FzWwogwLbv2wx0C3/EoOrv428bBB3OXJACy8ijvwXgoLn1QA2ka8e7IN3173gI3N1OXixp8OjjBMhevj1Z7+njp2Ew3r19q5rl6x+z/r5/sQDAt9+AWiQA3X8IWuUa/4EMWuFAghBetUAuDVboRACqRahhTwAcYOGHSYi34YhJFfAaiCju8CCJLHIoYIow3hDAAy3W2JOHMeZIw3M29rhTAzoG+UIC9floJEULnCjkkgcc6SRLAFC45JQisPfkMAtAQ8uWsjRQQAHE9NghlVPS2CNMBTRwAC47KECANtsA0JaGApCpYwAHkliQAVIeoYA2GSJogJ0w4jniPflEQcABOSVoIqEfJmAcggYlmoVDD0za3gLLQSofkQiOVNIYCTiQJ3kTejogqPchYEBwafzZKHlRqvppkdqV1WkaXwWKXK22gscqra/aMdWpvwUY7HXDarcXHwTMehywywrXLP9yAzzw4h5TaVobtdXCdm2yZhFyALKrgRsuZ+PaZlgiBHgrmrrrImborwsyUpxv9NYr173kKokIVbYhsKu/XdH22wD5SsIbro4lifBcCvtmwMENmbmaxBOfVXFtBWxrCX2sLdBxV026W50n68152aAnQ5VybQ8IjImBqwEZ81AEuAsrKR9fhuPONCkAcWM1o0IyZv0SvRDAoQHwMyozRo2x0+1oHFrSuzhwtFsmY43RilEPzUu8mMEsNj8JuNxYqtYo4GteK6/dTgDyDpbfOkEP1qfd12jtWN3szEwYAjYDnorhjUmtkIiNFaB43F+PhcDf+vDYWJ2T9zI3d4lfg6H/YyJ3bgrZSIe+jpV5IW66Kka/XBPjb6n9uino1i5Uu2JNfbsovTlme028XwWA6r9X0rZjZu9eeVIPJC+K4Hg1P5TmePkuvSYMMN9VAM9ziPz2jYDfmM5dSZpX9ORrwjpew3OFd16ltw9Jz4TFn374O4VtfyW5wwr7/FK8pHDuf5JA3Vs49pcE4AUAV0OgIczXuvE9hXZXGaAEG0E9AGHuLwrESv02SAj80e80fbOK/0iYiABahXCd+VxSrMfCQWAQK/qbDAXFgoAaHmKHYLMgWgrIkwP6UBDBm04EExNCpRzviIIA4li0F5sUGhCKgejgVdA3nPkBSIhYZIMJwfad/+WJxYhhzIMWlTKADwonicYDYxrPMMaxoNE6MiziHPOQN6WssIz8AwkA9niHJlqljfKBo1VoSMg2SBErXEyPC13Sw0bKQZFYcZ1+6qgURloSDbF7ywivY0WeSO6TbihlUnKInlBeZYmo/IIZySLH2GASKayMpRjyiJQ77qePLnmiLunInQ9xEimeHKYXJtmTUcaHlyyppDLHcEOlRLJBChCLM6dpBS9arpbMUWVLcsnNK9zSKlTEptt4IsxycuGRVjkljMTJkmS6cwr03MkAYKkfBaxzJxq85xX8+RZfgiifIAGnQIewRqRoMkfZvIo9F8qEY1plmw1CKJIoagVoAv90ShbdCT85SoRqIqWdQmImSGBI0iYAsycGjZFJWSLPljbBkEl56JReGhKF2tQrgWQJRkF0TpdM9KdAKCpSAjqliCqFnEj9AUHJMlIQNTQkg4wqEjTKkpgKaaYhGapWbxBSh/p0QPB0iVfHugOPGjVYXB3IH9nqg7L2pKae6p5VzkpXFPB0J2LNUVAHks6+3gCsO4HqlN7Hk2saVkaD/QhKbaXXpMz1sTZQKkzrFdmAYFYHrswkXy10VZAE9rMniCtIjkomxFJkrahdwVTFgtdqBcAqTI3tC9zaktMuSaUTyapuY2BXnigWUpoFSVWHC1woLRek6BwuDFzbEtja6p//XZXuC/7aksn6i7cDya12TZDcnbDUX+WdiDTHi4K0OpRoxf0Ie1XA2Oju7LZK8a1hZ4uV2naMuxJhbWxLC1isqbYe1o1tfF1y3GrhNCTiHS94QbJPsS1YIv4db2XF0uBwYZfC8y0BgLE62ik1dyAhHsGDN2s3Ak9Ev1F1r/gAl16JwBipNWbJeYm2YT3ON7RXWe/aHHjF+R6YIgJG2Ic/EuHP8ldCphtxQDIcWwMs2SWFddqE60Hl2M7myiDpstOOLI8BpFgEX87v63IcEDOfGc1W7kmHO0ZdFL95BGluSYVfd+GBuDHEeQbJnDvWZ4Hc+LGBlsgASqwq/CLl0JhN/3RAHDs5MNv4ziqQtDy82zlLExbTso0zPRKMtc7Og9Rv1rQyON25LY8a1C5Q9TF23Ooiw7oFshau9Fx96lvDQNO0rnUvfR2DQAs5ebyWB6qJDWdvUPp1yRbHspmN5nKRL9rhmDa1JYhtcGh72//r9je+De72iXsZ5C739s6tjHSrG9m2fnca2Z0Md8v7dVKuR5LvTT5PG5rfafR3QCANcMUJvB4EL/jaCj1whR+R4fVgtMNjVuc2T9yHbK6Hmy9OwvpGk+MspDcyxAzy3+WbHiQv+esOTo9nq/x2RB72y+3X453se+ZYyzjCcW5upTyX5zE7+Tw2DvTfBYDl8zh20f87B3GULz15Om/503/nYokEe+qlVjPWOxdzpEh861SquEjA3jkyyyPlZJ+Yqefh8rR3rOs3crvdVgySP8t9YicmyN3FdnSloH3vyxJ7QOwN+CVVXSJZLny41j6Pryv+Q4Kvx2Ufv67DD6TtlG800umR+Mx7KvIR9zzC8i6QyYteVU9u7Onr5XGXJHz1FWL8pmEfLtDTY9C0hxHpBXLz3KOo6QFxvO/BY/Z5NHn4QUo9T3qP/AoVv/HNJ5TyPxp9Oz1fHsyv/n5kDCXha183UQ8I7inPG+/rUPbz6DztBTCA8ZMyk9/Hs05eD5vp74Twd6+Y6Qdk+YmYv+h1hH+nAXz/AXF8uRcoTaMfIvcN6rd6GLR/6WF79aB0yOdNyHB138F91RV/EVBUEMQgrccT/8dzMvZ31rJ54seB9CSAfyF0A/FzhTdL35CAzRF+AmGCnudWOGgaMnhR8Vdz3hYfu4dhHChl9NcVNvhv35dxOsUcPeh38aeBymCAnQE1V3GEW0dm2ZcWIWhK8feE9ECDnEGAA4GFWIdtDBQbUtgSO/h4QCgQ7scVQzgRdkd7LogMWwgV11cPcbh3SYgMdTgXdLcTH6h9azgPrEZAeMGCYLeHx5CG9oJ+IjGCMweGgqZDczgReXh3C2gMjLgQjuh03/eGLYF5epgXgbh6dzgPfYgR/384EJ+IdYMYErGoDhIoEU1YgZI4D5u4D7d4ad/XhcuHMnoTf/Y3Q1tBilaRiAc4GL1oDb+IePFHhh/xjL0QjeFVhIMjFNgoEMxIe904EaaoD69IhxxoibqDEqEoELW4deE4EZDID1VDGBCIfP3nUDBINZkoSPlIfqvYXanIC+rTGA04fEQ0FgNgjZ5wACgYEuPYfLNIW5QICesoVxyoAhVJEZdzDdhzOBMJdqMjGgxTDUvjGAH5fRaIGY+iC/MoNBfZAuj4GApJHLsIEg95ke8YEitZCi15GW0Yf+VIiBiYCSV5GfH4kiuQkSGxkaDQk5chhkh5Ap0YEu33kXbgNf+scZJROQJWmC4NcwmpURsFuZUkoAD/6ERf6TAN0JBxR5YzcJCOgRuTgJW10Y7RF5OhIZeOQJe10YpkyQBsmUlNsQgHcJa45JY5kJMnNZiGcAA1KWeIqQOKiRQDoBxRRDDH4ZeRKQIRGRrkwBd94A+PeZibqSLugQCWiQfAoB2aWZojMJmHtACgKQezMZpP5Zo+AJtX8ZlWKRWYuR2tiZskoJtYARNAcQbH4h526ZrEaTkNYIZCYBT72BgzKZwlAJgaki3HiQVfYQCGSRjVaZ0lAJftAQAPYClN0AqM8p2NA53iSQLkaR8F8SVq4p54xhFgsiFQ+Z450JU1Qg5fIgD/a+IKWhkBt3AAXlIActIinMKfRhAASlkezTChFEqhT7KTDloEEfokJHKTGaoDncmhIloM4fmhLAA5I5qiy7CfJipVU6mi7oGhLaoEwgijPbKcM9oCjmmjIqosOQoFHcmjPSKjP9oE/SGkNlIWRVoF+4KkJAI3S0oFTumkCJKWUToFRUml9oEA9nmlOAChWnof5+GlW9CkYeosBUqmRlqjZ+oYSqqmYCA3bWox/QinTFCYcyoaCzCWdmoFAmCbeVoP1NGnoMSmgRpMVkqoZKAAQXmo4ZCairoGdeGoJ7U3keoGEAqoeQqplwoHdaGpVAoAY9qpdMCo7EmlP9GbpAoFw79JqeGwp6vqB4HhqivKJ7EaCMlJqxCwAEN5q3nAEYEpJg2Qpr56BwGAE8Gqn8VSrOXzEKBKKw8wm8waCRxxqrmyrNMKlg6QnzYSrXWarYdgFAqqITFBrOA6CQTgAJniHiOBnueaCgFAAAJgAADBGgAqAAjxruzwJgLgJcLwFgMAAAFqC/qKEq0gr/36JQpboQzLsM9gDgJwCwTwrQVbsRZ7sRibsRq7sRzbsR77sSAbsiI7siRbsiZ7siibsiq7susSAgAh+QQJBAARACwAAAAAlAJmAQAF/2AkjmRpnmiqrmzrvnAsz3Rt33iu73zv/8CgcEgsGo/IpHLJbDqf0Kh0Sq1ar9isdsvter/gsHhMLpvP6LR6zW673/C4fE6v2+/4vH7P7/v/gIGCg4SFhoeIiYqLjI2Oj5CRkpOUlZaXmJmam5ydnp+goaKjpKWmp6ipqqEJBK4CsLGys7QMrgQJq7q7vF0JBwUIA8MQxcbHyMnKxcPDCAUGrgq91NXWPQkMAg8LA8vf4OHfAwsPAg4E1+rr7BHZ293i8vP0yOQG6O36+6IEDfH1AgoUOADBAwbT+Clc+EjBgQcABkqcSHBBNIYYMwZi0AABxY8gAwIwcCChxpMo3/88DMmyJb0BBQSYTEmz5hcGBiK63MkzHAIHM20KHfokQceeSJN+K+AgANGnUIkocOBRqdWryEhG3crVRgBg3rCKHQtAZtezaFEweBB2rFu3F9PK3Zog59u7eBEccDq3L00GBfAKFlyWr9/DCg9UHcz47kjDiCNbo9q4MmEDkCVrTkXZsme8ABpk3kwalOLPqAcLGF269SUGi1PLfvvTtW1LCQLP3p2Xwe3fjgIYaMu7uNsGQYErF+RAp/HnbgE4WE4dUIIF0LPfXZCuuvc7ARoQ104eq+jv6OMQiF2+/VUA3dPLT/PAvX24rOfr57L+vn+x8O0nYBcC/GegWKsNqGD/Fdcd6OBVC+Sy4IROHODcgxj2BMABFHaYRAMZhqhUAfl5aGIOAWAn4ooaxnfiizgQcCGLNLbEIYw40mBhjTzu1ECOQL5gQI9EurRAiUECGYBuRTYJEgASJillBAGwR+QwC0BDy5ayNFBAAcTwuOGUUh7QI0wFNHAALjsoQIA22wAwnoMCkBlkiisWZECURyigDZMHGmAnkAnMeN89+URBwAF2GUjioDiaeZ9BiWbh0ANWkrdAcpBSOCR5I5U0RgIOqNhehJ2eiOdzCBjgWxp+NqodlKmaWChvZXGaxleAPkdrrR1KitpIr9IxlanGBQisp5/pxQcBsuLK57ICrjrY/wAPuMjHVJkOOy21+t0KmlmEHICsbL+CK6CwZCWISH+7pauufp9iVVgjsMX77bzfWZvUvZB0lhoCuvJLnbg9DeCuJAEIYGhlRxo8H7suGVBwQ/WlFrHE6dXLEnecMPAwYwtwnJ6/FAFQLCfhzcmYoCZ/h7BEA5zHyrmN/RizdxQHhIC2oXhc2Y07Uyf0PANMh4rInslb9G8oi4OqKgFkXBkAFz+92czh1MlLc5aVrLVyPSvzczXwNgbz2L8djcwDSKaiQK+CKc22bVEbQ7Q6bt+1792acQ2Bsu2UTVvcgPtF8aP8yNhYAYnbVq/OCymA81teR04annYztGRjQGuOmP8CfysE4mAIIC766nMYLtbarMeeh+BjrSz77XTQbq/quPd+hu5XPeD78HFYLpjtxCePRgAjWwUA78pHv0UC3VolvPTYl1ElXqFn7/30zScl9vfk+xI+UpmXrz4WCTiW9frwM+F6UtfHb78UDtzV/f38I9G3+P0LYBPoZpW9CfCARGCeWxCAwAYWAXg9SZ8DJ9iD/JEFehTMoAv+F0ENehBF1ePJ8z5IwhokwGXoK6EKZVAgAGFwhSokYAphSMMVQNAlAKihDlPQQqwYcIdAvFxPGAjEIoqAAGP5oRFpyEGXQG6JQFTA+VryPihqsIdWgZ0VaRjCloxwizVEog/BqEP/Ge6EiGSEoQLEsr80ZrCJLNGiGz+oABTi8IVz5B8cQ6LEPFKwjsHzowr3CBI8ChJ+a7xKHw/ZQEJSZHyMzKAYrVLFSN5PiC7pnCUdOD+WPHGTFOxiSAwJSu9hESmLLOX9EqkUOaoygFZDSg5f2cBOhqSNtFyfApUiwVzq0SqQ9CX/GHAVUgqTeFP8CPKOCb/TJYVyzLQfMZUSzGjCL5kUsSb/YtkTXGpTerb8SC+/+b0AWI+c8cNkSGaJTvWdkieVbGfvJomUZcpTenYMyTjvGT0zhqR+/MzeO12CxoBij549Maj3zKkUbypUdqKkSCofejtHDmSfFMWdBZEC0IwO/w+hO/mkR4mXz48MYKTKUydIUJo8bu7EoSwF3EBbAtOYsm2aM7Tp7dqXFIzqNHIlpUhHf7q6iEpEpERdnT8/gtSkas6iATmpU1k305BIdaqiC+dEsLo6kLqkdFwtmldpGtbIMRQpNS0rv4I6kbSqVV1slYg93xozbF6UrndbKkV8ileD6XUifO3rvP4qkcAKFlyEvethi5ZYgRh2scBqbEAeC9lUSbYelK0spC5Lj8xq1k6cnYdnPzul0MpjtKRNkmnFgdrUAmm1XXMtv2ALjtbKFkZGHchEb0umuA7ErbzFkW8FAtzgvmi4ASmucT00VpYod7kUau4ooZsqrQ7kqv/UHVRVQYLd7JLJmTwpqHdLm5SmjjdIuRWIec+bI+TWA5rsJRQv4yslnPZkt/Sd0HZB8tz8ooe24Iinf/eT3qgOOEcBcC89xHtg5o6owTDa70fgC2EKuTSTFT6RXX+bYQ/xNCnG7PBtrDsQdop4QVANyHpPPJ8NC4TCLJ7Ph1EZYwVtFClgrXF1VGpSHVdLwfRYsY+pQ2LFDlk+F3bJXI+sHBcLJMRMVhwwo5yeJLcExlSGGpDpseQst6bIA4Gyl9HC449Uc8y2AaRSsIzm0oAXrW1usvPiDBwwC8SVdN5MmT+C3zzPRbotEbOfh5JigQx10JFRs1L6jOizFPrJjd7/jKLpF+nNPDogjK40VHaplC9q+jASDgmejdswQUPNyQPp8m0FMIBRK+jS9WAwdKVYjP4CZ9I9ZW+9zqwgK+/E1GpFqG1/A+iWHHq5vXLagAAsD1W7tmy8nphYZE3qbmlSP5y2yrD7WlWsKejNSgF2WLOdDCFX54SvOy8cty2ZAlNEwJVFdziU7Z1Qe/K8hDX3b+SNFVvT1b6slc+eQ6Jv1xbY33Kxt3PHq3BjpM47/L5KwUlL7nkc2zV5SwrC1XrpTB8G3A/2bsRFkmPJFPul44XtxvCG6olM/LMAl4irIzNwlpQ8te5ehscd/ZaZu7bh4rh5Wm5sL3gvtuIpE/dJ/2aMoPHCehkrRwzSO630qY48jpLJ+KJTnmvEPH0gL9dszH10mK8PROifzXlAfE4UoLOE3W8letfRYmeQPDy7U78v3QWz8bKCfOtcqTtI2E5aXI8xKmPfHdfxsvN9CB4kzibtyZPSeHY8/iMX563aW3Ltk1w+6eP9fEjYvBC3f/W8V8cL4ddhdsDGV/QhibpCqkay/Pp6gUZfhdaLnt/tWYbe6qBeYyIf3BuOZQCVL8UBtswS0ntX7oxhHN8gVuHWswQBaCeF8Rpz9wZ/7jMKqwbTKpN96vr+M9Kn2u2TeOLUM2ZMqhh/ZZzvX9iHtOqJoL1nwh5f07+n854gfxCDf/+uZX1nVH6QoH9Ng4D0xWw80WoE6AdggxoMSF+71xgAgwm5IRvEB2EKsHn2sjCT0DKykXz+ZXzcB4CMMIGpAXf05X6oURuPwIKpsXosxgDMNxY/EYFqcBq7YYMxZn//x4NlsCO8AYQ1JoRXUTO59wYBIDA/2GjQVxzksBd94A8tBxeVNoXGgQDIkQfAkB1IyGRKeHwLYIVyoADRYhxjGGVl6BZVSIRKwC3l0YZU9oZvARNAcQbH4h4uOGR4mBcN0HdGYBQ1lxom6GU4iCHYsodY8BUGAIKWkYhjhoLtAQAPUClN0AqMIolNQ4hUZon2URBfoiageAJ+4iU5iC4VOGj/F5gh5PAlArAmrlB+t3AAXlIAcsIim/JpMCAcTrIMzTCMxEiMTpJ+vrhBwbiMEkF/yYgCXMiM0ogMlPhpjjON2IgMwPeMLzA32fiNyMiNNPB330gkfyiORliORUI44qgD26eOPBKO7YgD4QGPNFIW8xgE+WKPGTI1+QgECsiPBiKC/wgEAiiQ7XE2BVkEwIiQ7WEzC2kE++iQrNKKEVkD9UiRuHKOFxkD3qiRNdiEHbkDPgiSjbEAHTiSQuAwJkkYKqiSS6AA5NiSGkKQMBkFCuB/NPleInmTUjGTOykRj+GTXCAcWRiUx/CFROkFMnmUNBkacriUPpCTnuiQOyiVwmYAhUipDCiJlWpAAOsHkiNhkV55BX2IlAvwkmWJBhyxij0SGmS5ll4QADjhliFCLHKpB18BEd+IiWiYl33AEVV5ia4CmIVAKmDCIw8gKoapCEahixgSE3HZmHpAAA6AKe4xEppImZUQAAQgAAYAEKkRiwKAEJzZD9rgJcKQhwAgi7ZwmrzQCp8pALn4JWBSjLhZjM9gDgJwCwTQk7AZnMI5nMRZnMZ5nMiZnMq5nMzZnM75nNAZndI5ndRZndYZOSEAACH5BAkEABEALAAAAACUAmYBAAX/YCSOZGmeaKqubOu+cCzPdG3feK7vfO//wKBwSCwaj8ikcslsOp/QqHRKrVqv2Kx2y+16v+CweEwum8/otHrNbrvf8Lh8Tq/b7/i8fs/v+/+AgYKDhIWGh4iJiouMjY6PkJGSk5SVlpeYmZqbnJ2en6ChoqOkpaanqKmqq6ytrq+wsbKztLW2t7i5uru8vb6/wMHCw8TFxsfIycrLzM3Oz9DR0tPU1dbX2Nna29zd3t/g4eLj5OXm5+jp6uvs7e7v8PHy8/T19vf4+TUPDQr6//8EQIAAwAHAg/USDBg4cEEChBDfLWBIUUCAiBjRCaRIcQGBjCDFKVjIkaPFkCi5/xUoydJhypfWHLCcCUAAzJvQFACYybPARZxAk63kyRPAx6BIh8kkyrTBz6RQd+lkStVl1Ku3hlJlahSrV1lLt241+LXsqqlixT54arbtqAdp41p1S9cTg7h4ATysyzdTgJ148R7oS7gS3MCBGxRe/OguYsQGGEtO9Pfx4wVsJ2v+c9gyYsybQ/dx7PkxAH+iU9upXNqyXtWw5RhoXbpr7NtrCNBu/Rq37zIBEOzmvfe38S8NhtPufbx5Ft3Klxd3Tn2K8OjSq2uP4gAw9tIIUG8fvyRAA5LfLYMmzz6JAq3pP2duT18IA+/x8S6oz5+I+fyQ9SdgEARcB2Baig2oIP8P/x2Y1mALRpgDAfg5WNR0EmYoQwCdWViUeBqGCIMA6HnYkogowpBAhSZSFFmKMK4QAHwtUkRWjDiekFyNJWGY448H8MgRAvP9iCOFQjJUgJFMiqDARElCYFOTRs4YJQRHUfnjjkISqaWRQSb54pc5rpgkA2T+aCaPABSZZohr1vjAmzk+KSSadMbIWott5hljAgaaOKefMAbHY5aEihinh/slmuKiFk7pqKI1njYpimEKeimKYXmI6KYSzmZio6BqSOOBEJYq4Z4OIqCqhpACKOmrC3Z6YJ+0RihqpLlGaKiFuPY6oEIezipsfxs5GOyx/Z0an7HM0hdregBEO2D/sqhaKyCUB7qqLX/QOZjqt+3tCuCS5NKH1oEgpjsetvmN6S55gca37LzahQvguPhq5yx23va7nQIWfiqwc+bGJ+/Bzo10q5sM+5ZwevxGbJzDAA5qMcIOQrwxbARn+3FzE2NH6si/6Rtfuyjfxm18N7aMW6bxoSuzb/V+5/HNmsH7XcU8ixZyvEHj1uF31RYdG83pGay0Zqx+B+3TmpWs3MlUb0ZafDtn3ReL0eHp9WZcppfg2Jpt/R3WaDMGtnJtb3Y0dk7HzRfT2E1td10BZLy3ZC9jl/TfhfkcHcuEu6UydmInzleJeTtO2L+7aSw5XYYPF/DligPIOd8A1v35/1U5Kwf06FdZvZveqENla3SWt47V4srZLLtXkCs3wO1lBR4d71/NrZzowN+U+W7EF/+S2tGxrvxLCeTn/PMp5T5c7NTjVPputmePE+Wtde89TKq3tvv4QB1vPvpA4Q03+zfRPpyP8GckP/L1v9R3fMnnD5D1+PMfSgBIm8YJECNvo830DpgP8JVmgQy8hwM9A8EI1mOClqmgBeeBwcdocIPx6CBiPgjCd4gwMCQsYTtOiJcUqnAdLIyLC1+YjhimZYY0PIcNxYLDHJZjh1vpoQ/HAUSqCHGI4SgiU46IxG9sjzana6I7CNia/kkxHVQsjRWveI4semaLXCTH/WgDxv8wimOMremaGcnhvt2cb43uUF9p3ghHdpQtOpurozqUSBTx6fEcTwzfH9nhRcucbZDniN6zEJkO5pmOkRrJTxkheQ0+EgVxlHRifOiYyXAEoJCPyWMnv4HG0vhxlNyQY2kOiUpvCG84MWtlNxJIRll+Q5Fcs6U32ribwelyG+UT5C+5QcvWsHKY1sAlxZCpjddFh37MlIbvdBdNbHwyP6es5jN4uTptWuOVwzGgN6FRzDSOcxrcpA3bztkMcO7mmOxcxjXzI854KiOdtFGjPYUxzavt0xkYiw88/2mMO35nkgTdRTlrk9Bl4LM1C2toMfr5SIkeo5T5tOgxgkkb7Gn/FBgBjU8UP8oLjmaUpMIIaXo8itKSiqulwYga0vQJU1mokjYRZV8ATvIPmX6nnugjUU7rYdLWiJJ9aEEoOlSaHiZKblfrnIc7lUNT3qnMqd7AaEcPSCPm0MOSWwGq99wXVXc8lDZHHd+vShLLd/hUagI8nqXkYdBc5u+tA8lmOojloKF6j6NYtUYgD+c/vhLFq+u4KfcE2EG9ksOwB1Lq6BzJk8BGg6LYcezzBlsSyV5DsQGsH2gZ4iV0QPZc/sMrUVgKjgBglm7+KypLRtqNutassKBkCWLBodXheJZzSlyPJxc6HM0Wj7J48as2XosdaGaPs2KhrTVkuxvlPm+0/1Rxbkz4hEnqqTYw98KGMnmVP+qKRbjWJO5wwuu901ZXG66tkXSLB1aWWNalLTIu8JD7zmuYdzfa3eyBrKsM7HYzf86EqzTOiseqtu67Fd2mkH57OduKVMI8InDxmCqyZfA3P+z1Xn0F49Az+a+3P0sGg7HD2udeqa3BWHF0Qpw9GZutGAZWToCf594MD+O/yrnv32ycHvTugkNRKiv7puqh8PQivkmaKwPXeqXd1gJQVxJr/abFowHMlxUHyO2NS5hgIfnEFkCOjpIFmOb0IGDHp7DTlUqrQitdiSIDELIk7nNnCMA5tdA10ZlZgeQ+f1mAPY4SAA7NCT73eaAqJP/ygQZdikL3Wb8WzPGtYGwX9R7IyEhsM4DeHApL99nKSByx7gzg4EZ0p88U+XOdmRtlnmIiAaouoB4VEGgh1aTVhDCPmC3EaBpyGdYQQACnGfFqZDNEz/BLtLOVDYlmO3sgGr4iA4bdJQcAGw8H6HWNss1FSbPJ24c4gKfHjUpzd7kfggiAA8Tt41aW+doMGcACDvDtNBCgAeuutyzvjW/SwhvcuU4Puf/o7ijpm99zUIABAi4mZjb8Sg/vNxYUMO+CE2XhjLz4nQdQAAd01wscpzW+oT1EkcMaAQ2gsBIS0ACVF7zYmdy2xx8zgAeYPAsBOIAB6I1vnHfy2DvfCgD/fC5zHCSAAEInesFtE0+kJ10sA0BAAQrQgAM0fQUKYEADCsDtq6Pam1C++nD0vXUBeJ0ABJC1COAO9bEXAABlV3tDTo52Uesd6wMIvOAHT/i8/50llG6o3w/PeGRD+p8Eb7zkd250bSJp8pg3u9zj+Z7Mex7fia+phT9P+mLV9ATqLr3qTUT105dAzquPfXpC73oSNEj2uF8Oy73JAKnn/vcQmEvtZcRk4Bt/ILYefgscffzmUwQBX0dpABbv/L87Rfk16H31gU9q7Nvg9ttXfU28r4POh5/0BuA7+WMQ7vNjfgFaXn8NBEBx9/t62fLHgQJGb/9TJz//P6AAmtZ//wBycABIBPtHgKfGageYBNNXfwpoTOrXgECwfxAYgXlxfRToBALoexi4FcqmcRvYAx33gcMBfyN4BQRQfCZYFAaweSnoHg5gcy0YfPgXg1UgdoYXfgDQADCIg1AQAAxgADsIfABgAPEHhFwQdA9wgau3dBCnhGsgdh7oeUeYhFJoBgngAGTXfA9wABOYhWtAc3cXewUgAD8ohmxAAA7wAFUYZQbgANGnhmsQAAQgAAawAEWYHmwnAAwQhnQYCATAAAIwdgiwh3gxAADQdgwwh4H4B093h4W4dZRYeJZoiVr3AAIgAHRHAID4iKAYiqI4iqRYiqZ4iqiYiqq4iqzYig6u+IqwGIuyOIu06C4hAAAh+QQJBAARACwAAAAAlAJmAQAF/2AkjmRpnmiqrmzrvnAsz3Rt33iu73zv/8CgcEgsGo/IpHLJbDqf0Kh0Sq1ar9isdsvter/gsHhMLpvP6LR6zW673/C4fE6v2+/4vH7P7/v/gIGCg4SFhoeIiYqLjI2Oj5CRkpOUlZaXmJmam5ydnp+goaKjpKWmp6ipqqusra6vsLGys7S1tre4ubq7vL2+v8DBwsPExcbHyMnKy8zNzs/Q0dLT1NXW19jZ2tvc3d7f4OHi4+Tl5ufo6err7O3u7/Dx8vP09fb3+Pn6+/z9/v8AAwocSLCgwYMIEypcyLChw4cQI0qcSLGixYsYM2rcyLGjx48gQ4ocSbKkyZMoU/+qXMmypcuXMGPKnEmzps2bOHPq3Mmzp8+fQIMKHUq0qNGjSJMqXcq0qdOnUKNKnUq1qtWrWLNq3cq1q9evYMOKHUu2rNmzaNOqXcu2rdu3cOPKnUu3rt27ePPq3cu3r9+/gAMLHky4sOHDiBMrXsy4sePHkCNLnky5suXLmDNr3sy5s+fPoEOLHk26tOnTqFOrXs26tevXsGPLnk27tu3buHPr3s27t+/fwIMLH068uPHjyJMrX868ufPn0KNLn069uvXr2LNr3869u/fv4MOLH0++vPnz6NOrX8++vfv38OPLn0+/vv37+PPr38+/v///AAaYDgMDFGjggQgmqCD/ggwI+IoAEEQo4YQUVmghhQI46AqEF3boIYYatsLhhyRemGGIq4xY4ooSnohiKiqyuKKLL54So4wk0lhjKTfi6KGOO47So48mBmkjkSs2aGQpBiBZIgFLllKAkyRCGeUoU1LpoZVXhpKllhdy2eUnA4DZ4ZiilGmmhWiCosCaFg7Q5icEwFkhAnN6woCdFBaQZydDmunnn5s0yaeEDRC6yZeHAqkoJQAcKuEBj2ISgJqSilnpJHVKGqECm1rigKcRhmqJoZLiaSolC5A66KqSYHpoorBG0qmnjtaqSKBmaqrrIoweCuqvjkRKKrGOJEAqBK8iq8iopNLqrCLB8unA/7SKXLqsr9gOsuey3SaCqqQLhIuIsZ5Ka663y0Kg5LqDjCvpsPAKgm6q9bK7rAH5CiLvoZT2+0cA984r8B8HtKvqwX1Uyye/DPPxZrvvRpxHA+1CEIDFexR8aLMc25Fwu9eGjEer7dJrMh23klruynY8kHGuMLcxcbsJ1EzHv4e+rHMcCsiK689y8Cws0XAEnTHISK9hNJ8BrxaAABvvo3TGVa8mwAAQ6/O0nV2rpoCx3M6TgNCell0aqj7f43DPrbUMAc3vyE1qyasFC0DO9iCQcYRZpzYyhW3LM3i7YaMWgN8W4h0PwX9DoPZogQKg8jsY/134aZB3yDQ7Z0cedf9qX0dI9zmMZ7xwaqF/uPc7vPJ5emhvV/j5Oa1nDEDgp307Yzso/z07aKmvOHk4sdu5u9Y+IsA7OblnrC7nHpf4ADoBBK/75aaV7uHo42Qe+fCeRY/j6+TYvezyqtW+4gLPd9P5+Kv5TmXi3mive/ykFU8l+NzwHtSYBye+dQNakYPA6qinPP5VQ1kJjFDFTiNAHMFvG/OL3O1GY7414Y8a2YtghAyIGvdpiXzLqKCdpmca+0mKhdFQIZzYlxr/SeqDzkiepCZoGgS2C4XEOFwCNyiaDLYLgMsQYuQstxrxie4ZSoyc405ztQgi0RguTODmTGNCUl1xGFGMHAlPo77/BH4RGGEUHmtsKMIpCiONGdtiaeCYQBj6QoeeYuJqOijCCOFwFzI8FA9RQ0ctOtAWAZBZHyV0vdcocpEUQgD3bhFCSCrwkKZZnCUphL5cJICNCezkaxJQvUUO4IyvOADa2kgbH24yQgXA5CoCKalG0oaWy0LAGF2hAP0t8oK1CUAXIzgAIIaCAaWMoChpo8lX9kmWoUikMyOEylGucpMAqOYnkDnNufGmkIuM5Smk2c0/1gaPIgSAG7eZzD4Csze4/Jsuo/nIaUoyOMM0pQGgGQkHtLOPy+xNJbvJSappIgH5jODxcqMAUHYTAAatRAAacM1NajM3pCTohRCwzkb4/1OjLUIOH0HKUUh8FKQRsqNwCIRSC3GUn304gEOdaU7hgPOhDoApHg7wz1fWdDg37eYAGjDJPQTAATOd5k+J48qWUmgACziATttAgAb0lKbSaapTI0nUPBwgoT6lTlBBClWpzkEBBrhqOa0zVpSWdapcUABSt3qhpS6nrS0dQAEcUNQvyNWXdA1pdvC6VQQ0YKFVSEADABvYSXGHpY1l0QAewNcsBOAABkhqYy8KnYxG9nyURewQEkAAzGo2sgAQrXQ8+1kfDQABBShAAw6g2hoogAENKEBFW8vJXXJnoLx1ElRjKwDaEoAAvlXBcUub2wIAYLfBrdAC+rqdAMQzuv8fWpB2sUslcZrnutwN7yJVGh6tive8BOVsdwigVvS6V3fJNY8CwPre+trJu+9xon33uyxjjoen/A3woVJrn14K+MBgwm99JorgBp/Pv+phwGkdjOAFxHfB9aSwhk0H1/dwc8MURkBt6WNdEDe4AR2mj4RNzN957ojBLHYvRK803xiL1wDUfZFMbRzcBQzySgJoL48tqc5HKUC/QyYoRFP8IgWgM8l/6yqsjgxlbO4TWdYVcpXNJOVpHVnLW/YRAFAMLydPOMwyeunB5opmMPk4ZATIcJtXBAADXFhgf51ziRbQ0ZXhFrpbHvOdYRYABhgA0DGu84+bNoLLPgDMAQaLwAPMyugX4PbM9lV0pW2QAAfo1sGTzvGmY6BY59q3AAIY9KhvQAAHPADTSjaAA0a86hwEgAACMMACEN3H4QqAAaKu9REIwAAB5BYBvIbTAABAXAbQWthNIC2ujR3bamv32q8twAMEIIDlEiDY0A63uMdN7nKb+9zoTre6183udrv73fCOt7znHYwQAAAh+QQJBAARACwAAAAAlAJmAQAF/2AkjmRpnmiqrmzrvnAsz3Rt33iu73zv/8CgcEgsGo/IpHLJbDqf0Kh0Sq1ar9isdsvter/gsHhMLpvP6LR6zW673/C4fE6v2+/4vH7P7/v/gIGCg4SFhoeIiYqLjI2Oj5CRkpOUlZaXmJmam5ydnp+goaKjpKWmp6ipqqusra6vsLGys7S1tre4ubq7vL2+v8DBwsPExcbHyMnKy8zNzs/Q0dLT1NXW19jZ2tvc3d7f4OHi4+Tl5ufo6err7O3u7/Dx8vP09fb3+Pn6+/z9/v8AAwocSLCgwYMIEypcyLChw4cQI0qcSLGixYsYM2rcyLGjx48gQ4ocSbKkyZMoU/+qXMmypcuXMGPKnEmzps2bOHPq3Mmzp8+fQIMKHUq0qNGjSJMqXcq0qdOnUKNKnUq1qtWrWLNq3cq1q9evYMOKHUu2rNmzaNOqXcu2rdu3cOPKnUu3rt27ePPq3cu3r9+/gAMLHky4sOHDiBMrXsy4sePHkCNLnky5suXLmDNr3sy5s+fPoEOLHk26tOnTqFOrXs26tevXsGPLnk27tu3buHPr3s27t+/fwIMLH068uPHjyJMrX868ufPn0KNLn069uvXr2LNr3869u/fv4MOLH0++vPnz6NOrX8++vfv38OPLn0+/vv37+PPr38+/v///AAYo4IAEFmjggQgmqOD/ggw26OCDEEYo4YQUVmjhhRhmqOGGHHbo4YcghijiiCSWaOKJKKao4oostujiizDGKOOMNNZo44045qjjjjz26OOPQAYp5JBEFmnkkUgmqeSSTDbp5DUBCBDAk4IIMIABVAKiAAAQQEBAln4Y0CUEC4DJBwFjdimAmXoUkCYEACTA5h0HvNllmXPSEQACdnbpQJ5zCNBnlwAoACgcAXA5KAQFHPqGmIuq6SgbCQwQKaFyTpqGm5d22aimZzDQaZprgloGn6OO+aWpYgia6pgITMnqF4m+muYDs34Bqa1jHpArF5Xymmacv2rBqbBjLiBrsVWIiuybWDJbBarPpumr/7RSuFrtm5li60St274JwLLeLrFruGkqW+4SwaJrZ7TrInGsu2+WGm8RztLbZwP3FkGtvu/2K4QDAEdqr8A8gFvwoNcivEMDC1/asMM3KGBpxJFOTDEN82LM8MY1oOlxpxqD7MK/Iy/6p8kv1JnyqPyy3EK7L18Kr8wquFzzperirMIDO3eKgKG8BPBAzN3tGfSlxOqiwAJ+fpeAoksPOkDJszBANQRYY0dw1ZEWQK4sDmwNZ7fcnQu2nQig/UoAao9ZqHcBdLx2mgMc3EoCKL/ZM3dK3z2o2K6U3emn3dEsuLhdj2L0qzdvp/PidhJ+ygFmd7pyd9pSLu7mosD9bP/j1sXteZdti2L4s013Z/fpEFw5diYKvM7r3ElDDbudAEipSQANXIzu39sp0PfucPpuiQCZh4s4d1Mj3ycCoENCgO3oRq6d4tLDWv0i16f8fXYMCN99mtTPXkj4NZNe3eTnD+uA+oCwv3Pr3MEf/5gDNEB0IAfA3shw152v7c9OA1jAAehXBwU0oHlBI952DHhAtvkvDwQw3dqel78KLiqBC5yDA4+3OO1pR38exJsCGUgGBQRwf+PLDgpTiLcCOOB/LTwA0DzovvfRcFQIaMCqvpAAAeiOhvjjTvl+OKoBPOCGWVAAAwxAQg8SMHEQZGKfAPDEITYhAQQ4gAGOqEX/v4UnemV81QAQUIACNOAAXgSCFBtQAPOlkXcMEE8AyHhHWyWwjQKAIwEI4DYWDDKMdCwAAOzYx+kVkm4abCSyBkDJSlrykpSUpLAWgMPxRFKToKTcA1j4HQqG8pSL09t5CJBFVLpyZHlsT+1eScuXLeCR6oFYLXdZsFHOB3O8DOa2ABBD9zxNmMi0FQLiOB/gJfOZkTIAKeHDgCpCk5cAiCV/HnfNZ/oSQFrrZjCJSSDRiZOWBeikgKp5zlMioIf+cWY7JdmAaQZolvMsYwFwmaADWDOfyMtmhZgH0P31DkMOLKj0AFDPDSmgcwoVnAHUmaGERnRtEx0R3Fp5UYBlytREDuRoR7fVUBU99J8jtdUKYeQAlKY0Ug/QpowIsMOXpqp39mSRAhzAR5u+6QEh7BEDgudTuSkvSAGYIiMLCgAD8BNIAdChSJHZ1KcaaagufeUCBGDVJSXAAXUcpwGCqqkE0HGqSDQAV7FFAAc8IKvSW8BYu/qrABBAAGNcqucSqFYC5DReBGCAAOiIAL16bAAAKMADAklXn0UAjHcdbBsni8nKVpaNixXAIQlAUcd69rOgDa1oR0va0pr2tKhNrWpXy9rWutY4IQAAIfkECQQAEQAsAAAAAJQCZgEABf9gJI5kaZ5oqq5s675wLM90bd94ru987//AoHBILBqPyKRyyWw6n9CodEqtWq/YrHbL7Xq/4LB4TC6bz+i0es1uu9/wuHxOr9vv+Lx+z+/7/4CBgoOEhYaHiImKi4yNjo+QkZKTlJWWl5iZmpucnZ6foKGio6SlpqeoqaqrrK2ur7CxsrO0tba3uLm6u7y9vr/AwcLDxMXGx8jJysvMzc7P0NHS09TV1tfY2drb3N3e3+Dh4uPk5ebn6Onq6+zt7u/w8fLz9PX29/j5+vv8/f7/AAMKHEiwoMGDCBMqXMiwocOHECNKnEixosWLGDNq3Mixo8ePIEOKHEmypMmTKFP/qlzJsqXLlzBjypxJs6bNmzhz6tzJs6fPn0CDCh1KtKjRo0iTKl3KtKnTp1CjSp1KtarVq1izat3KtavXr2DDih1LtqzZs2jTql3Ltq3bt3Djyp1Lt67du3jz6t3Lt6/fv4ADCx5MuLDhw4gTK17MuLHjx5AjS55MubLly5gza97MubPnz6BDix5NurTp06hTq17NurXr17Bjy55Nu7bt27hz697Nu7fv38CDCx9OvLjx48iTK1/OvLnz59CjS59Ovbr169iza9/Ovbv37+DDix9Pvrz58+jTq1/Pvr379/Djy59Pv779+/jz69/Pv7///wAGKOCABBZo4IEIJqjg/4IMNujggxBGKOGEFFZo4YUYZqjhhhx26OGHIIYo4ogklmjiiSimqOKKLLbo4oswxijjjDTWaOONOOao44489ujjj0AGKeSQRBZp5JFIJqnkkkw26eQ1AQgQwJOCCDCAAVQCogAAEEBAQJZ+GNAlBAuAyQcBY3YpgJl6FJAmBAAkwOYdB7zZZZlz0hEAAnZ26UCecwjQZ5cAKAAoHAFwOSgEBRz6hpiLqukoGwkMECmhck6ahpuXdtmopmcw0Gmaa4JaBp+jjvmlqWIImuqYCEzJ6heJvprmA7N+AamtYx6QKxeV8ppmnL9qwamwYy4ga7FViIrsm1gyWwWqz6bpq/+0Urha7ZuZYutErdu+CcCy3i6xa7hpKlvuEsGia2e06yJxrLtvlhpvEc7S22cD9xZBrb7v9iuEAwBHeq3APYBb8KAHI6xDAwtf2rDDNihgacQGU4zDvBgzrHENaHbc6cQfu/CvyIv+WfILdaI8qsors9Cuy5fCG7MKLdN8qbo3q/CAzp3y3PMJewJ9KbFDn5CAokYPCoC9SZNAcNORPkBu1BGcS7WdC3SLdQAcb/0mzF+fLHaaBRiKdQQzny0uA2tHkLPbdqa9trZ0vzkA2UNrnXeyXvcc9t8QDPCA2j0HsADhfQ7QwNUlK8x4mghAvfLSk/eJAN8ft505rCRTPPf/5+keADnCo5MOqwOn95u66oQa0Hq8U8Nu55WrOly77XZuHni8ePPOtekC7y787QUQT/vxlw6QPOLYvs481w3kzqz009/+gAO/m0rAxdmP2j2omIff6fjkL27+ogN4q/j6g7Zfrt/w41mu8fB/ui4DTOffrwLqg5/lyhUA+jFvgOvCH/NCt64EBHB61hNYAcMXQYTxb3qzu5cCBvc5+cXsAP0jHQCGtkHb6a9nFyTdCRNnQLrZLGkE4ODZEDg0BjyQbjRMmgPMtrUKri1KefNh3CZ4NvTFTQEtFJkH45YCJDZtiUxsYgNC2DH7RXEFCnAAFRe2wiuu4AA3LFgXvbiCeQQ0AHwAyyEZUxAAB4QxXGpcowoU0AAeIouBcnRBAgywRVsJMY8wYEAdn/VHQMYgAQJ4Y6QyaEgZBOAAfOwUFBu5AwVAso8jpKQQFEAAARQAfGPUJBASwAABwE2UqEylKlfJyla68pWwjKUsZ0nLWtrylrjMpS6tEQIAIfkECQQAEQAsAAAAAJQCZgEABf9gJI5kaZ5oqq5s675wLM90bd94ru987//AoHBILBqPyKRyyWw6n9CodEqtWq/YrHbL7Xq/4LB4TC6bz+i0es1uu9/wuHxOr9vv+Lx+z+/7/4CBgoOEhYaHiImKi4yNjo+QkZKTlJWWl5iZmpucnZ6foKGio6SlpqeoqaqrrK2ur7CxsrO0tba3uLm6u7y9vr/AwcLDxMXGx8jJysvMzc7P0NHS09TV1tfY2drb3N3e3+Dh4uPk5ebn6Onq6+zt7u/w8fLz9PX29/j5+vv8/f7/AAMKHEiwoMGDCBMqXMiwocOHECNKnEixosWLGDNq3Mixo8ePIEOKHEmypMmTKFP/qlzJsqXLlzBjypxJs6bNmzhz6tzJs6fPn0CDCh1KtKjRo0iTKl3KtKnTp1CjSp1KtarVq1izat3KtavXr2DDih1LtqzZs2jTql3Ltq3bt3Djyp1Lt67du3jz6t3Lt6/fv4ADCx5MuLDhw4gTK17MuLHjx5AjS55MubLly5gza97MubPnz6BDix5NurTp06hTq17NurXr17Bjy55Nu7bt27hz697Nu7fv38CDCx9OvLjx48iTK1/OvLnz59CjS59Ovbr169iza9/Ovbv37+DDix9Pvrz58+jTq1/Pvr379/Djy59Pv779+/jz69/Pv7///wAGKOCABBZo4IEIJqjg/4IMNujggxBGKOGEFFZo4YUYZqjhhhx26OGHIIYo4ogklmjiiSimqOKKLLbo4oswxijjjDTWaOONOOao44489ujjj0AGKeSQRBZp5JFIJqnkkkw26eQ1AQgQwJOCCDBAA1QCogAAEEBAQJZ+GNAlBAuAyQcBY3YpgJl6FJAmBAAkwOYdB7zZZQFz1hEAAnaqmeccAvTZJQAK/AlHAFwKSqahb4ipqJ+MrpHAAI92OUChkabhZqVdlpnpGQxwmiaWn5bBp6hjflmqGIGiOiYAU676BaKupvmArF84WuuYDuDKxaS7pjmAnL5msWmwr8ZabBWhIvsmnstWcaqzo0Y7Rf+r1KbpqbVP0JrtmAsoy20Tun4b7rhPAPstBAWIi+4Sx2ZrwLtPNPvtvPQ6MS21+ObLhAPr9uuvEt7yO3ATDdx7MBMKUEptrwvDm+0BES+BJrUUV6zEvrtmrDESdTrr8cdHqNsxyUuE7CoAI6OMxAMrE+sywRwLGufMTSSQqKI349yEyn327DPCNss8dBML2Cn00U1sqS2mTKfr8LlRRwEw1VVHQYC7WXft9ddghy322GSXbfbZaKet9tpst+3223DHLffcdNdt991456333nz37fffgAcu+OCEF2744YgnrvjijDfu+OOQRy755JRXbvnlmGeu+eacd+7556CHLvoI6KSXbjowIQAAOw==", l$ = ({ size: e }) => {\n const t = () => {\n switch (e) {\n case "sm":\n return Zc;\n case "lg":\n return kJ;\n case "xl":\n return NJ;\n default:\n return Zc;\n }\n };\n return /* @__PURE__ */ c("div", { className: `spinner spinner-${e}`, children: /* @__PURE__ */ c("img", { src: t(), alt: `${e} spinner` }) });\n}, k5 = styled_components__WEBPACK_IMPORTED_MODULE_1___default().div(\n ({ theme: e, isDone: t, isActive: o, isError: n, isWarning: r }) => {\n const {\n colors: i,\n borderRadius: a,\n typography: s,\n lineHeight: l,\n transitions: p,\n itemSize: d\n } = e;\n return (0,styled_components__WEBPACK_IMPORTED_MODULE_1__.css)`\n display: flex;\n align-items: center;\n justify-content: center;\n min-width: ${d.sm};\n width: ${d.sm};\n height: ${d.sm};\n border-radius: ${a.circle};\n background: ${i.backgrounds.bgPrimary};\n border: 1px solid ${i.border.borderPrimary};\n font-size: ${s.t14};\n line-height: ${l.lh24};\n color: ${i.textIcon.textPrimary};\n text-align: left;\n overflow: hidden;\n\n ${t && (0,styled_components__WEBPACK_IMPORTED_MODULE_1__.css)`\n background-color: ${i.backgrounds.bgSuccessPrimary};\n border: 1px solid transparent;\n transition: ${p.base};\n color: ${i.textIcon.textTertiary};\n `};\n\n ${o && (0,styled_components__WEBPACK_IMPORTED_MODULE_1__.css)`\n background-color: ${i.backgrounds.bgTertiary};\n border: 1px solid transparent;\n transition: ${p.base};\n color: ${i.textIcon.textTertiary};\n `};\n ${n && (0,styled_components__WEBPACK_IMPORTED_MODULE_1__.css)`\n background-color: ${i.backgrounds.bgErrorPrimary};\n border: 1px solid transparent;\n transition: ${p.base};\n color: ${i.textIcon.textTertiary};\n `};\n ${r && (0,styled_components__WEBPACK_IMPORTED_MODULE_1__.css)`\n background-color: ${i.backgrounds.bgWarningPrimary};\n border: 1px solid transparent;\n transition: ${p.base};\n color: ${i.textIcon.textTertiary};\n `};\n `;\n }\n), ms = styled_components__WEBPACK_IMPORTED_MODULE_1___default()(d6)(\n ({\n theme: { colors: e, transitions: t },\n isActive: o,\n isDone: n,\n isClickable: r,\n orientation: i,\n isError: a\n }) => {\n const s = (0,styled_components__WEBPACK_IMPORTED_MODULE_1__.css)`\n ${k5} {\n background-color: ${e.backgrounds.bgTertiary};\n transition: ${t.base};\n color: ${e.textIcon.textTertiary};\n }\n `;\n return (0,styled_components__WEBPACK_IMPORTED_MODULE_1__.css)`\n display: flex;\n align-items: center;\n justify-content: ${(() => (i === H2.VERTICAL, "space-between"))()};\n width: 100%;\n min-width: auto;\n gap: 8px;\n\n ${D4} {\n flex-grow: 1;\n ${o && (0,styled_components__WEBPACK_IMPORTED_MODULE_1__.css)`\n color: ${e.textIcon.textSecondary};\n `}\n }\n\n /* ${V2} {\n background-color: ${e.blue};\n } */\n\n ${!r && (0,styled_components__WEBPACK_IMPORTED_MODULE_1__.css)`\n cursor: default;\n `}\n\n &:active {\n ${s};\n }\n ${o && s}\n\n &:disabled {\n ${k5} {\n background-color: ${e.backgrounds.bgDisabledPrimary};\n border: 1px solid ${e.backgrounds.bgDisabledPrimary};\n color: ${e.textIcon.textTertiary};\n }\n ${D4} {\n color: ${e.textIcon.textDisabledNobg};\n }\n }\n\n ${!o && !n && (0,styled_components__WEBPACK_IMPORTED_MODULE_1__.css)`\n &:not(:disabled) {\n &:hover {\n background: ${e.backgrounds.bgHoverPrimary} !important;\n }\n }\n `}\n ${a && (0,styled_components__WEBPACK_IMPORTED_MODULE_1__.css)`\n color: ${e.textIcon.textError};\n `};\n\n ${n && !r && (0,styled_components__WEBPACK_IMPORTED_MODULE_1__.css)`\n pointer-events: none;\n color: ${e.textIcon.textPrimary};\n `}\n\n &:after {\n display: none !important;\n }\n\n ${o && (0,styled_components__WEBPACK_IMPORTED_MODULE_1__.css)`\n &::after {\n display: none;\n }\n `}\n `;\n }\n), D4 = styled_components__WEBPACK_IMPORTED_MODULE_1___default().span(\n ({ theme: { colors: e }, isDone: t, isActive: o, isError: n, isWarning: r }) => (0,styled_components__WEBPACK_IMPORTED_MODULE_1__.css)`\n ${t && (0,styled_components__WEBPACK_IMPORTED_MODULE_1__.css)`\n color: ${e.textIcon.textPrimary};\n `};\n ${o && (0,styled_components__WEBPACK_IMPORTED_MODULE_1__.css)`\n color: ${e.backgrounds.bgTertiary};\n `};\n ${n && (0,styled_components__WEBPACK_IMPORTED_MODULE_1__.css)`\n color: ${e.backgrounds.bgErrorPrimary};\n `};\n ${r && (0,styled_components__WEBPACK_IMPORTED_MODULE_1__.css)`\n color: ${e.backgrounds.bgWarningPrimary};\n `};\n `\n), Ls = (styled_components__WEBPACK_IMPORTED_MODULE_1___default().div)`\n ${(e) => e.orientation === "horizontal" && (0,styled_components__WEBPACK_IMPORTED_MODULE_1__.css)`\n height: 1px;\n width: 100%;\n background: #e9e9ea;\n `}\n ${(e) => e.orientation === "vertical" && (0,styled_components__WEBPACK_IMPORTED_MODULE_1__.css)`\n width: 1px;\n height: 12px;\n background: #e9e9ea;\n position: absolute;\n margin-top: -18px;\n margin-left: 24px;\n `}\n`;\nfunction TJ(e, t) {\n const {\n isDisabled: o,\n isDone: n,\n title: r,\n number: i,\n onClick: a,\n badgeCount: s,\n isActive: l,\n isError: p,\n isWarning: d,\n ...b\n } = e;\n return /* @__PURE__ */ e1(s0, { children: [\n /* @__PURE__ */ e1(\n ms,\n {\n isDone: n,\n disabled: o,\n isClickable: !!a,\n onClick: a,\n ref: t,\n isActive: l,\n isError: p,\n ...b,\n children: [\n /* @__PURE__ */ c(\n k5,\n {\n isDone: n,\n isActive: l,\n isError: p,\n isWarning: d,\n children: n ? /* @__PURE__ */ c(Z1, { name: "CheckMark", size: "xxxxs" }) : i\n }\n ),\n /* @__PURE__ */ c(\n D4,\n {\n isDone: n,\n isActive: l,\n isError: p,\n isWarning: d,\n children: r\n }\n ),\n s && /* @__PURE__ */ c(Ae, { count: s })\n ]\n }\n ),\n /* @__PURE__ */ c(Ls, { orientation: e.orientation })\n ] });\n}\nconst IJ = (0,react__WEBPACK_IMPORTED_MODULE_0__.forwardRef)(TJ), H4 = {\n ORDERED: "ordered",\n UNORDERED: "unordered"\n};\nfunction JM(e) {\n const {\n steps: t,\n currentStep: o = 0,\n orientation: n,\n type: r = H4.ORDERED,\n completedSteps: i = []\n } = e, [a, s] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(o);\n return /* @__PURE__ */ c(s0, { children: (() => t.map((p, d) => {\n const { title: b, isDisabled: M, badgeCount: u, isWarning: A, isError: z } = p, f = {\n isDisabled: M,\n isActive: a === d,\n isDone: i.includes(d),\n isWarning: A,\n isError: z,\n title: b,\n number: d + 1,\n orientation: n,\n badgeCount: u\n };\n if (r === H4.ORDERED) {\n const O = o === d, h = o > d;\n f.isDone = h, f.isActive = O, f.isDisabled = !O && !h;\n } else\n f.onClick = () => s(d);\n return /* @__PURE__ */ (0,react__WEBPACK_IMPORTED_MODULE_0__.createElement)(IJ, { ...f, key: b, badgeCount: u });\n }))() });\n}\nconst DJ = styled_components__WEBPACK_IMPORTED_MODULE_1___default().div(\n ({ theme: { colors: e, borderRadius: t, spacings: o, mixins: n } }) => (0,styled_components__WEBPACK_IMPORTED_MODULE_1__.css)`\n width: 294px;\n max-width: 100%;\n padding: 0 ${o.sp4} 0 ${o.sp4};\n border: ${o.sp24} solid ${e.backgrounds.bgPrimary};\n border-width: ${o.sp24} 0;\n background-color: ${e.backgrounds.bgPrimary};\n border-radius: ${t.base};\n position: relative;\n ${ms} {\n margin-bottom: 22px;\n\n &:last-child {\n margin-bottom: 0;\n }\n }\n\n ${D4} {\n ${n.ellipsis}\n text-align: left;\n }\n ${Ls} {\n &:last-child {\n display: none;\n }\n }\n `\n);\nfunction HJ(e, t) {\n const {\n type: o = H4.ORDERED,\n orientation: n = H2.VERTICAL,\n ...r\n } = e;\n return /* @__PURE__ */ c(DJ, { ref: t, ...r, children: /* @__PURE__ */ c(JM, { type: o, orientation: n, ...r }) });\n}\nconst VJ = (0,react__WEBPACK_IMPORTED_MODULE_0__.forwardRef)(HJ);\n(styled_components__WEBPACK_IMPORTED_MODULE_1___default().div)`\n width: 100%;\n height: 100%;\n`;\nconst PJ = styled_components__WEBPACK_IMPORTED_MODULE_1___default().div(\n ({ theme: { colors: e, borderRadius: t, spacings: o } }) => (0,styled_components__WEBPACK_IMPORTED_MODULE_1__.css)`\n padding: ${o.sp16};\n background-color: ${e.backgrounds.bgPrimary};\n border-radius: ${t.base};\n width: 100%;\n\n .scrollbar-container {\n margin-bottom: -${o.sp16};\n padding-bottom: ${o.sp16};\n }\n `\n), FJ = (styled_components__WEBPACK_IMPORTED_MODULE_1___default().div)`\n display: flex;\n justify-content: flex-start;\n align-items: center;\n width: 100%;\n\n ${ms} {\n &:last-child {\n margin-right: 0;\n }\n }\n ${Ls} {\n &:last-child {\n display: none;\n }\n }\n`;\nfunction XJ(e, t) {\n const {\n orientation: o = H2.HORIZONTAL,\n type: n = H4.ORDERED,\n ...r\n } = e;\n return /* @__PURE__ */ c(PJ, { children: /* @__PURE__ */ c(FJ, { ref: t, ...r, children: /* @__PURE__ */ c(JM, { type: n, orientation: o, ...r }) }) });\n}\nconst UJ = (0,react__WEBPACK_IMPORTED_MODULE_0__.forwardRef)(XJ);\nfunction YJ(e, t) {\n const { orientation: o = H2.HORIZONTAL, ...n } = e;\n return o === H2.VERTICAL ? /* @__PURE__ */ c(VJ, { ref: t, ...n }) : /* @__PURE__ */ c(UJ, { ref: t, ...n });\n}\nconst p$ = (0,react__WEBPACK_IMPORTED_MODULE_0__.forwardRef)(YJ), GJ = (e) => {\n const { orientation: t = H2.HORIZONTAL } = e;\n return t === H2.VERTICAL ? /* @__PURE__ */ c(Up, { ...e }) : /* @__PURE__ */ c(XM, { ...e });\n}, N5 = styled_components__WEBPACK_IMPORTED_MODULE_1___default().div(\n ({\n theme: { colors: e, transitions: t, shadows: o, spacings: n },\n isActive: r,\n isDisabled: i\n }) => {\n const a = e.white;\n return (0,styled_components__WEBPACK_IMPORTED_MODULE_1__.css)`\n position: relative;\n\n ${T3} {\n padding-right: ${n.sp8};\n border-bottom-left-radius: 0;\n background: ${r ? a : e.whisper};\n box-shadow: ${o.md};\n z-index: 1;\n\n &:after {\n display: none;\n }\n }\n\n ${Yo} {\n transition: ${t.base};\n fill: ${r ? a : e.whisper};\n }\n\n &:hover {\n ${T3} {\n background: ${r ? a : e.backgrounds.ghostWhite};\n }\n\n ${Yo} {\n fill: ${r ? a : e.backgrounds.ghostWhite};\n transition: ${t.base};\n }\n }\n\n &:active {\n ${T3} {\n background: ${a};\n }\n\n ${Yo} {\n fill: ${a};\n }\n }\n\n ${i && (0,styled_components__WEBPACK_IMPORTED_MODULE_1__.css)`\n &,\n &:hover {\n ${T3} {\n background: ${e.whisper};\n }\n\n ${Yo} {\n fill: ${e.whisper};\n }\n }\n `}\n\n ${r && (0,styled_components__WEBPACK_IMPORTED_MODULE_1__.css)`\n & {\n z-index: 999 !important;\n }\n `}\n `;\n }\n), QJ = (styled_components__WEBPACK_IMPORTED_MODULE_1___default().svg)`\n position: absolute;\n top: 0;\n width: 24px;\n height: ${({ theme: e }) => e.GLOBAL_ITEM_HEIGHT_CONDENSED};\n right: -20px;\n z-index: 2;\n pointer-events: none;\n`, Yo = (styled_components__WEBPACK_IMPORTED_MODULE_1___default().path)`\n fill: transparent;\n`, ZJ = (e) => {\n const { isDisabled: t, isActive: o, style: n, ...r } = e;\n return /* @__PURE__ */ e1(N5, { isDisabled: t, isActive: o, style: n, children: [\n /* @__PURE__ */ c(M6, { isDisabled: t, isActive: o, ...r }),\n /* @__PURE__ */ c(QJ, { children: /* @__PURE__ */ c(Yo, { d: "M0 40H24C24 40 16.6765 39.7426 12 30C6.09565 17.6993 4.54897 9.02928 4.14381 3.99149C3.96671 1.78947 2.20913 1.32723e-05 0 0V40Z" }) })\n ] });\n}, jJ = (styled_components__WEBPACK_IMPORTED_MODULE_1___default().div)`\n padding: 0 2rem 0 0;\n\n ${N5} {\n & + ${N5} {\n margin-left: 0.125rem;\n }\n }\n`, d$ = (e) => /* @__PURE__ */ c(jJ, { children: /* @__PURE__ */ c(\n GJ,\n {\n ...e,\n orientation: "horizontal",\n isZIndexReverse: !0,\n isTableTab: !0,\n customTab: (t) => /* @__PURE__ */ c(ZJ, { ...t })\n }\n) });\nvar Ie = /* @__PURE__ */ ((e) => (e.INFO = "info", e.SUCCESS = "success", e.ERROR = "error", e.WARNING = "warning", e))(Ie || {}), t4 = /* @__PURE__ */ ((e) => (e.CROSS = "cross", e.ARROW = "arrow", e.TEXT = "text", e))(t4 || {});\nconst KJ = styled_components__WEBPACK_IMPORTED_MODULE_1___default().div(\n ({\n theme: { colors: e, typography: t, lineHeight: o, borderRadius: n, mixins: r, spacings: i },\n type: a\n }) => {\n let s, l, p;\n switch (a) {\n case Ie.SUCCESS:\n s = e.textIcon.textTertiary, l = e.backgrounds.bgSuccessPrimary, p = e.textIcon.textTertiary;\n break;\n case Ie.WARNING:\n s = e.textIcon.textAlertTertiary, l = e.backgrounds.bgWarningPrimary, p = e.textIcon.textAlertTertiary;\n break;\n case Ie.ERROR:\n s = e.textIcon.textTertiary, l = e.backgrounds.bgErrorPrimary, p = e.textIcon.textTertiary;\n break;\n case Ie.INFO:\n default:\n s = e.textIcon.textTertiary, l = e.backgrounds.bgInformationalPrimary, p = e.textIcon.textTertiary;\n }\n return (0,styled_components__WEBPACK_IMPORTED_MODULE_1__.css)`\n display: flex;\n align-items: center;\n justify-content: space-between;\n width: 536px;\n max-width: 100%;\n padding: ${i.sp4} ${i.sp8};\n margin-bottom: ${i.sp16};\n background-color: ${l};\n border-radius: ${n.base};\n color: ${s};\n font-size: ${t.t12};\n line-height: ${o.lh22};\n\n button {\n max-width: 10rem;\n font-size: ${t.t12};\n color: ${p};\n ${r.ellipsis}\n &:not(:disabled) {\n background-color: transparent;\n box-shadow: none;\n &:hover,\n &:active,\n &:focus {\n background-color: ${e.actionButton.actionButtonBgHoverButton};\n color: ${e.textIcon.textPrimary};\n box-shadow: none;\n }\n }\n }\n `;\n }\n), JJ = styled_components__WEBPACK_IMPORTED_MODULE_1___default().div(\n ({ theme: { spacings: e } }) => (0,styled_components__WEBPACK_IMPORTED_MODULE_1__.css)`\n display: flex;\n align-items: center;\n flex: 1;\n padding-right: ${e.sp4};\n\n ${no} {\n margin-right: ${e.sp8};\n }\n `\n);\nfunction b$(e) {\n const {\n type: t = Ie.INFO,\n text: o,\n buttonType: n,\n buttonText: r,\n onButtonClick: i\n } = e, a = () => {\n switch (n) {\n case t4.ARROW:\n return /* @__PURE__ */ c(G2, { name: "ArrowRight", onClick: i, size: "sm" });\n case t4.TEXT:\n return /* @__PURE__ */ c(B2, { onClick: i, size: "sm", children: r });\n case t4.CROSS:\n default:\n return /* @__PURE__ */ c(G2, { name: "Cross", onClick: i, size: "sm" });\n }\n };\n return /* @__PURE__ */ e1(KJ, { type: t, children: [\n /* @__PURE__ */ e1(JJ, { children: [\n /* @__PURE__ */ c(Z1, { name: (() => {\n switch (t) {\n case Ie.SUCCESS:\n return "Success";\n case Ie.ERROR:\n return "Error";\n case Ie.WARNING:\n return "Alert";\n case Ie.INFO:\n default:\n return "Info";\n }\n })(), size: "xs" }),\n o\n ] }),\n a()\n ] });\n}\nconst _J = (styled_components__WEBPACK_IMPORTED_MODULE_1___default().li)``, $J = styled_components__WEBPACK_IMPORTED_MODULE_1___default()(fs).attrs({\n as: "div"\n})(\n ({ theme: e }) => (0,styled_components__WEBPACK_IMPORTED_MODULE_1__.css)`\n padding-left: ${e.spacings.sp8};\n cursor: pointer;\n\n & > a {\n padding-left: ${e.spacings.sp8};\n margin-left: -${e.spacings.sp8};\n }\n `\n), e_ = styled_components__WEBPACK_IMPORTED_MODULE_1___default().div(\n ({ theme: e, height: t }) => (0,styled_components__WEBPACK_IMPORTED_MODULE_1__.css)`\n height: ${t}px;\n transition: ${e.transitions.base};\n overflow: hidden;\n `\n);\nfunction t_({\n iconLeft: e,\n badge: t,\n isOpen: o = !1,\n isDisabled: n = !1,\n title: r,\n children: i,\n onClick: a,\n ...s\n}) {\n const [l, p] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(0), [d, b] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(o), M = (0,react__WEBPACK_IMPORTED_MODULE_0__.useRef)(null), u = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)(\n (f) => {\n const O = f && f.offsetHeight;\n p(d ? O : 0);\n },\n [p, d]\n ), A = () => {\n a ? a() : (b((f) => !f), M != null && M.current && u(M.current));\n };\n return (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => {\n M != null && M.current && u(M.current);\n }, [M, u]), /* @__PURE__ */ e1(_J, { children: [\n /* @__PURE__ */ c(\n $J,\n {\n onClick: A,\n $isActive: d,\n ...s,\n children: /* @__PURE__ */ e1(Os, { children: [\n e && /* @__PURE__ */ c(\n S5,\n {\n name: e,\n badge: t,\n isDisabled: n,\n size: "xxs"\n }\n ),\n r && /* @__PURE__ */ c(ui, { children: r }),\n /* @__PURE__ */ c(Z1, { name: d ? "ChevronDown" : "ChevronRight", size: "xxs" })\n ] })\n }\n ),\n /* @__PURE__ */ c(e_, { height: l, children: /* @__PURE__ */ c(kM, { ref: M, children: i }) })\n ] });\n}\n(styled_components__WEBPACK_IMPORTED_MODULE_1___default().div)`\n width: 400px;\n`;\nconst o_ = styled_components__WEBPACK_IMPORTED_MODULE_1___default()(fs)(\n ({ theme: { spacings: e } }) => (0,styled_components__WEBPACK_IMPORTED_MODULE_1__.css)`\n padding: 0 ${e.sp16} 0 72px;\n\n ${ui} {\n padding: ${e.sp4} 0;\n }\n\n > span + div {\n margin-left: ${e.sp16};\n }\n `\n);\nfunction r_(e) {\n const { children: t, onClick: o, isDisabled: n, badge: r, customItem: i } = e, a = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)(() => {\n !n && o && o();\n }, [n, o]);\n return /* @__PURE__ */ c(o_, { ...e, onClick: a, children: /* @__PURE__ */ e1(Os, { customItem: i, children: [\n /* @__PURE__ */ c(ui, { children: t }),\n !!r && !n && /* @__PURE__ */ c(Ae, { count: r })\n ] }) });\n}\nconst n_ = (e, t) => e.length <= t ? e : e.slice(0, t) + "...", M$ = ({\n sideMenu: e,\n navMenu: t,\n onNavMenuClick: o,\n onSideMenuClick: n,\n notificationBellCount: r,\n promoGridCount: i,\n handleGridClick: a,\n handleNotificationClick: s,\n profileSectionOptions: l,\n headerTitle: p,\n avatarImgPath: d,\n isClientPickerAvailable: b,\n clientSelectOptions: M,\n rightSideIconsContainer: u,\n entitySelectOptions: A,\n isEntityAvailable: z,\n avatarName: f,\n isNotificationEnabled: O = !0,\n isPromoActionbtnEnabled: h = !0,\n clientPickerLabelLength: g,\n cscLogo: v,\n themeHandler: L,\n themeMode: y,\n enableThemeToggle: B,\n clientName: X,\n customLogo: F\n}) => {\n var J, S, W;\n const T = (0,styled_components__WEBPACK_IMPORTED_MODULE_1__.useTheme)(), [w, H] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(!1), [C, q] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(!1), [m, k] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(!1), { themeValue: x, setThemeValue: N } = (0,react__WEBPACK_IMPORTED_MODULE_0__.useContext)(j6), [V, R] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(!1), [I, j] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)([]), U = (0,react__WEBPACK_IMPORTED_MODULE_0__.useRef)(null);\n (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => {\n y && N(y);\n }, [y]);\n const _ = () => {\n H(!w);\n }, r1 = () => {\n H((P) => !P);\n }, K = () => {\n q((P) => !P);\n }, Q = () => {\n k((P) => !P);\n }, E = (P) => {\n b && (M != null && M.onSubmit) && (M == null || M.onSubmit(P), K());\n }, D = (P) => {\n l != null && l.selectedOptions && (l == null || l.selectedOptions(P), j(P));\n }, G = (P) => {\n b && (A != null && A.onSelectClick) && (A == null || A.onSelectClick(P), Q());\n };\n return /* @__PURE__ */ e1(CZ, { ref: U, cscLogo: v, children: [\n /* @__PURE__ */ e1(\n mZ,\n {\n $mode: x == "cscBlueLight" ? "blueLight" : "blueDark",\n children: [\n /* @__PURE__ */ c(\n it,\n {\n isBodyGenerated: !0,\n dropdownBodyWidth: "160px",\n isShowed: w,\n onChange: r1,\n bodyPadding: "8px",\n body: /* @__PURE__ */ c(kM, { children: e.map((P, Y) => /* @__PURE__ */ c((react__WEBPACK_IMPORTED_MODULE_0___default().Fragment), { children: P.children ? /* @__PURE__ */ c(\n t_,\n {\n iconLeft: P.iconLeft,\n title: P.title,\n badge: P.badge,\n $isActive: P.isActive,\n isDisabled: P.isDisabled,\n children: P.children.map((Z, t1) => /* @__PURE__ */ c(r_, { children: Z }, t1))\n }\n ) : /* @__PURE__ */ c(\n TZ,\n {\n iconLeft: P.iconLeft,\n badge: P.badge,\n $isActive: P.isActive,\n isDisabled: P.isDisabled,\n onClick: () => {\n n && P.link && n(P.link);\n },\n children: P.title\n }\n ) }, Y)) }),\n children: /* @__PURE__ */ e1(\n vZ,\n {\n onClick: _,\n $active: w,\n $disabled: e.length <= 0,\n $mode: x == "cscBlueLight" ? "blueLight" : "blueDark",\n children: [\n v ? /* @__PURE__ */ c(WZ, { children: /* @__PURE__ */ c(ur, { name: "CSCHorizontaWhite" }) }) : F ? /* @__PURE__ */ c(RZ, { src: F, alt: F }) : /* @__PURE__ */ c(ur, { name: "FilledWhite", size: "20px" }),\n e.length > 0 && /* @__PURE__ */ c(\n Z1,\n {\n name: "ChevronDownDropdown",\n color: T.colors.white,\n size: "xxxxs"\n }\n )\n ]\n }\n )\n }\n ),\n /* @__PURE__ */ c(LZ, { children: p })\n ]\n },\n "logo-container"\n ),\n /* @__PURE__ */ c(qZ, { children: /* @__PURE__ */ c(\n Mj,\n {\n $mode: x == "cscBlueLight" ? "blueLight" : "blueDark",\n menus: t,\n onNavMenuClick: o\n }\n ) }),\n /* @__PURE__ */ e1(yZ, { children: [\n /* @__PURE__ */ c("div", { id: "topbar-right-side-container" }),\n /* @__PURE__ */ c(s0, { children: X === void 0 ? /* @__PURE__ */ c(s0, { children: b && M && /* @__PURE__ */ c((react__WEBPACK_IMPORTED_MODULE_0___default().Fragment), { children: /* @__PURE__ */ c(\n it,\n {\n isBodyGenerated: !0,\n dropdownBodyWidth: "340px",\n isShowed: C,\n position: "right",\n onChange: K,\n body: /* @__PURE__ */ c(\n db,\n {\n ...M,\n onSubmit: E,\n onRowClick: (P) => {\n K(), M != null && M.onRowClick && (M == null || M.onRowClick(P));\n }\n }\n ),\n children: /* @__PURE__ */ e1(\n Wr,\n {\n "aria-haspopup": "menu",\n "aria-expanded": C || (J = M == null ? void 0 : M.selectedClient) != null && J.clientName ? "true" : "false",\n onClick: K,\n children: [\n /* @__PURE__ */ c(I4, { children: (S = M == null ? void 0 : M.selectedClient) != null && S.clientName ? n_(\n (W = M == null ? void 0 : M.selectedClient) == null ? void 0 : W.clientName,\n g || 28\n ) : "Client" }),\n /* @__PURE__ */ c(\n Z1,\n {\n name: "ChevronDownDropdown",\n color: "#fff",\n size: "xxxxs"\n }\n )\n ]\n },\n "isClientPickerAvailable"\n )\n }\n ) }, "isClientPickerAvailable") }) : /* @__PURE__ */ c(I4, { children: X }) }),\n A && z && /* @__PURE__ */ e1(s0, { children: [\n /* @__PURE__ */ c((react__WEBPACK_IMPORTED_MODULE_0___default().Fragment), { children: /* @__PURE__ */ c(\n it,\n {\n isBodyGenerated: !0,\n dropdownBodyWidth: "340px",\n isShowed: m,\n position: "right",\n onChange: Q,\n body: /* @__PURE__ */ c(\n gZ,\n {\n ...A,\n onSelectClick: G\n }\n ),\n children: /* @__PURE__ */ c(Ec, { children: /* @__PURE__ */ c(\n Vo,\n {\n onClick: Q,\n iconName: "Search",\n $isOpened: m,\n $mode: x == "cscBlueLight" ? "blueLight" : "blueDark"\n },\n "entitySelectOptions"\n ) })\n },\n "entitySelectOptions"\n ) }, "entitySelectOptions"),\n /* @__PURE__ */ c(wZ, {})\n ] }),\n u && u,\n B && /* @__PURE__ */ c(\n Vo,\n {\n onClick: () => L && L(x),\n iconName: x != "cscBlueLight" ? "LightModeSwitcherFilled" : "DarkModeSwitcherFilled",\n $mode: x == "cscBlueLight" ? "blueLight" : "blueDark"\n }\n ),\n h && /* @__PURE__ */ c(\n Vo,\n {\n onClick: a,\n iconName: "ListFilled",\n count: i,\n $mode: x == "cscBlueLight" ? "blueLight" : "blueDark"\n }\n ),\n O && /* @__PURE__ */ c(\n Vo,\n {\n onClick: s,\n iconName: "BellFilled",\n count: r,\n $mode: x == "cscBlueLight" ? "blueLight" : "blueDark"\n }\n ),\n l && /* @__PURE__ */ c(\n it,\n {\n isBodyGenerated: !0,\n onChange: () => {\n R(!V);\n },\n dropdownBodyWidth: "224px",\n position: "right",\n body: /* @__PURE__ */ c(\n dt,\n {\n ...l,\n groupByDivider: !0,\n selectedOptions: D,\n defaultValues: l != null && l.defaultValues ? l == null ? void 0 : l.defaultValues : I\n }\n ),\n bodyPadding: "8px",\n children: /* @__PURE__ */ c(\n Ec,\n {\n $isActive: V != null && V,\n children: /* @__PURE__ */ c(\n Vo,\n {\n $mode: x == "cscBlueLight" ? "blueLight" : "blueDark",\n $avatar: !0,\n avatarName: f,\n url: d\n }\n )\n }\n )\n }\n )\n ] })\n ] });\n}, i_ = styled_components__WEBPACK_IMPORTED_MODULE_1___default().ul(\n ({ theme: { mixins: e, colors: t } }) => (0,styled_components__WEBPACK_IMPORTED_MODULE_1__.css)`\n ${e.listReset}\n display: flex;\n flex-direction: column;\n background: ${t.backgrounds.bgPrimary};\n `\n), a_ = styled_components__WEBPACK_IMPORTED_MODULE_1___default().a(\n ({ theme: { colors: e }, $isTextLink: t }) => (0,styled_components__WEBPACK_IMPORTED_MODULE_1__.css)`\n ${t && (0,styled_components__WEBPACK_IMPORTED_MODULE_1__.css)`\n ${U6} {\n color: ${e.textIcon.textSecondary} !important;\n cursor: pointer;\n }\n `}\n `\n), s_ = styled_components__WEBPACK_IMPORTED_MODULE_1___default().div(\n ({ theme: { colors: e, typography: t, lineHeight: o, fontWeight: n } }) => (0,styled_components__WEBPACK_IMPORTED_MODULE_1__.css)`\n font-size: ${t.t18};\n font-weight: ${n.medium};\n line-height: ${o.lh26};\n color: ${e.textIcon.textPrimary};\n `\n), c_ = styled_components__WEBPACK_IMPORTED_MODULE_1___default().div(\n ({ theme: {} }) => (0,styled_components__WEBPACK_IMPORTED_MODULE_1__.css)`\n display: flex;\n align-items: center;\n `\n), jc = styled_components__WEBPACK_IMPORTED_MODULE_1___default().div(\n ({ theme: { colors: e } }) => (0,styled_components__WEBPACK_IMPORTED_MODULE_1__.css)`\n height: 13px;\n width: 1px;\n margin: 0 6px;\n border-right: 1.5px solid ${e.border.borderTertiary};\n `\n), l_ = styled_components__WEBPACK_IMPORTED_MODULE_1___default().div(\n ({ theme: { mixins: e, colors: t, typography: o, lineHeight: n, fontWeight: r } }) => (0,styled_components__WEBPACK_IMPORTED_MODULE_1__.css)`\n ${e.listReset}\n ${U6} {\n font-size: ${o.t14};\n font-weight: ${r.light};\n line-height: ${n.lh22};\n color: ${t.textIcon.textPrimary};\n }\n `\n), p_ = styled_components__WEBPACK_IMPORTED_MODULE_1___default().div(\n ({ theme: { colors: e }, $status: t }) => (0,styled_components__WEBPACK_IMPORTED_MODULE_1__.css)`\n ${t && (0,styled_components__WEBPACK_IMPORTED_MODULE_1__.css)`\n ${Ep} {\n background-color: ${e.border.borderPrimary};\n }\n `}\n `\n), d_ = styled_components__WEBPACK_IMPORTED_MODULE_1___default().ul(\n ({ theme: { mixins: e, colors: t, typography: o, lineHeight: n, fontWeight: r } }) => (0,styled_components__WEBPACK_IMPORTED_MODULE_1__.css)`\n ${e.listReset}\n font-size: ${o.t12};\n font-weight: ${r.light};\n line-height: ${n.lh20};\n color: ${t.textIcon.textLowemphasis};\n display: flex;\n align-items: center;\n flex-wrap: wrap;\n `\n), b_ = styled_components__WEBPACK_IMPORTED_MODULE_1___default().li(({ theme: { colors: e, spacings: t } }) => (0,styled_components__WEBPACK_IMPORTED_MODULE_1__.css)`\n position: relative;\n display: flex;\n gap: 8px;\n align-items: flex-start;\n padding: 4px 4px 0 4px;\n ${Q4} {\n width: ${t.sp8};\n height: ${t.sp8};\n margin-top: ${t.sp6};\n }\n .collapse-wrapper {\n margin: 0;\n }\n &:last-child {\n padding-bottom: 0;\n }\n &:not(:last-child, :only-child) {\n &:after {\n content: \'\';\n position: absolute;\n top: ${0.5 * 44}px;\n bottom: -0rem;\n left: ${0.5 * 15}px;\n width: 1px;\n background-color: ${e.border.borderPrimary};\n }\n }\n `);\n(styled_components__WEBPACK_IMPORTED_MODULE_1___default().div)`\n width: 300px;\n padding: ${({ theme: { spacings: e } }) => e.sp16};\n background-color: ${({ theme: { colors: e } }) => e.white};\n\n ${bb} {\n padding: 0;\n }\n`;\nstyled_components__WEBPACK_IMPORTED_MODULE_1___default().ul(\n ({ theme: { typography: e, fontWeight: t, mixins: o } }) => (0,styled_components__WEBPACK_IMPORTED_MODULE_1__.css)`\n ${o.listReset}\n margin: 1rem 0 0;\n font-size: ${e.t14};\n font-weight: ${t.light};\n `\n);\nstyled_components__WEBPACK_IMPORTED_MODULE_1___default().li(\n ({ theme: { spacings: e } }) => (0,styled_components__WEBPACK_IMPORTED_MODULE_1__.css)`\n display: flex;\n align-items: center;\n justify-content: space-between;\n padding-bottom: ${e.sp24};\n\n &:last-child {\n padding-bottom: 0;\n }\n `\n);\nstyled_components__WEBPACK_IMPORTED_MODULE_1___default().li(\n ({ theme: { spacings: e } }) => (0,styled_components__WEBPACK_IMPORTED_MODULE_1__.css)`\n display: flex;\n align-items: center;\n justify-content: space-between;\n padding-bottom: ${e.sp8};\n\n &:last-child {\n padding-bottom: 0;\n }\n `\n);\nfunction A$(e) {\n const { title: t, data: o, onClick: n } = e, r = (a, s) => i(a, s), i = (a, s) => {\n var l, p, d, b, M, u;\n return /* @__PURE__ */ e1(l_, { id: s, children: [\n ((l = a == null ? void 0 : a.status) == null ? void 0 : l.toLowerCase()) == "pending" && (a == null ? void 0 : a.doneDate) == null ? /* @__PURE__ */ c(\n a_,\n {\n $isTextLink: ((p = a == null ? void 0 : a.status) == null ? void 0 : p.toLowerCase()) == "pending",\n onClick: () => n && n(a),\n id: s,\n children: /* @__PURE__ */ c(\n h5,\n {\n title: a == null ? void 0 : a.designation,\n expandWithTitle: !0,\n isExpandEnable: !!(a != null && a.subData),\n children: a != null && a.subData ? (d = a == null ? void 0 : a.subData) == null ? void 0 : d.map(\n (A, z) => r(A, z)\n ) : ""\n }\n )\n }\n ) : /* @__PURE__ */ c(\n h5,\n {\n title: a == null ? void 0 : a.designation,\n expandWithTitle: !0,\n isExpandEnable: !!(a != null && a.subData),\n children: a != null && a.subData ? (b = a == null ? void 0 : a.subData) == null ? void 0 : b.map(\n (A, z) => r(A, z)\n ) : ""\n }\n ),\n /* @__PURE__ */ e1(d_, { children: [\n (a == null ? void 0 : a.name) && (a == null ? void 0 : a.status) == null && (a == null ? void 0 : a.name),\n /* @__PURE__ */ e1(c_, { children: [\n a != null && a.actionType || a != null && a.doneDate ? a.name && /* @__PURE__ */ c(jc, {}) : null,\n a != null && a.actionType ? a == null ? void 0 : a.actionType : null,\n a != null && a.doneDate || ((M = a == null ? void 0 : a.status) == null ? void 0 : M.toLowerCase()) == "pending" ? /* @__PURE__ */ c(jc, {}) : null,\n a != null && a.doneDate && (a == null ? void 0 : a.status) == null ? a == null ? void 0 : a.doneDate : ((u = a == null ? void 0 : a.status) == null ? void 0 : u.toLowerCase()) == "pending" && (a == null ? void 0 : a.doneDate) == null ? a == null ? void 0 : a.status : null\n ] })\n ] })\n ] });\n };\n return /* @__PURE__ */ e1(i_, { children: [\n /* @__PURE__ */ c(s_, { children: t }),\n o == null ? void 0 : o.map((a, s) => {\n var l, p, d, b, M, u;\n return /* @__PURE__ */ e1(b_, { id: s, children: [\n /* @__PURE__ */ c(\n p_,\n {\n $status: a.name == null,\n children: /* @__PURE__ */ c(\n m4,\n {\n type: (a == null ? void 0 : a.doneDate) != null && (((l = a == null ? void 0 : a.actionType) == null ? void 0 : l.toLowerCase()) == "maker" || ((p = a == null ? void 0 : a.actionType) == null ? void 0 : p.toLowerCase()) == "approver") && (a == null ? void 0 : a.actionTaken) == null || ((d = a == null ? void 0 : a.actionTaken) == null ? void 0 : d.toLowerCase()) == "done" ? "active" : ((b = a == null ? void 0 : a.status) == null ? void 0 : b.toLowerCase()) == "pending" ? "pending" : (((M = a == null ? void 0 : a.actionTaken) == null ? void 0 : M.toLowerCase()) == "returned" || ((u = a == null ? void 0 : a.actionTaken) == null ? void 0 : u.toLowerCase()) == "rejected", "Inactive"),\n hasLabel: !1\n }\n )\n }\n ),\n i(a, s)\n ] });\n })\n ] });\n}\n(styled_components__WEBPACK_IMPORTED_MODULE_1___default().div)`\n padding: 32px;\n`;\nconst M_ = (styled_components__WEBPACK_IMPORTED_MODULE_1___default().div)`\n padding: 16px 12px;\n border: 1px solid #d2d2d5;\n border-top: ${(e) => e.cardType === "PendingProfile" ? "4px solid #F2A900" : "4px solid #509E2F"};\n border-radius: 8px;\n background-color: #fff;\n width: 380px;\n max-height: ${(e) => e.isExpanded ? "auto" : "85px"};\n transition: max-height 0.3s ease-in-out;\n box-sizing: border-box;\n`, A_ = (styled_components__WEBPACK_IMPORTED_MODULE_1___default().div)`\n display: flex;\n justify-content: flex-start;\n align-items: flex-start;\n gap: 8px;\n`, u_ = (styled_components__WEBPACK_IMPORTED_MODULE_1___default().div)`\n flex-grow: 1;\n`, z_ = (styled_components__WEBPACK_IMPORTED_MODULE_1___default().h1)`\n font-size: 16px;\n font-weight: 500;\n line-height: 16px;\n color: #20202c;\n margin: 0 0 10px 0;\n`, h_ = (styled_components__WEBPACK_IMPORTED_MODULE_1___default().p)`\n font-size: 12px;\n font-weight: 400;\n line-height: 14px;\n color: #63636b;\n margin: 0;\n`, O_ = (styled_components__WEBPACK_IMPORTED_MODULE_1___default().div)`\n display: flex;\n flex-direction: column;\n gap: 8px;\n`, f_ = (styled_components__WEBPACK_IMPORTED_MODULE_1___default().div)`\n padding-left: 6px;\n border-left: 1px solid #d2d2d5;\n display: flex;\n justify-content: flex-start;\n align-items: center;\n gap: 8px;\n`, g_ = (styled_components__WEBPACK_IMPORTED_MODULE_1___default().div)`\n transition: transform 0.1s ease-in-out;\n transform: rotate(${(e) => e.isExpanded ? "180deg" : "0deg"});\n cursor: pointer;\n`, C_ = (styled_components__WEBPACK_IMPORTED_MODULE_1___default().div)`\n padding: 8px 0 0 0;\n margin-top: 16px;\n border-top: 1px solid #e9e9ea;\n`, m_ = (styled_components__WEBPACK_IMPORTED_MODULE_1___default().div)`\n opacity: ${(e) => e.isExpanded ? "1" : "0"};\n transition: 0.3s all ease-in-out;\n`, L_ = (styled_components__WEBPACK_IMPORTED_MODULE_1___default().div)``, v_ = (styled_components__WEBPACK_IMPORTED_MODULE_1___default().div)`\n display: flex;\n justify-content: space-between;\n align-items: center;\n margin-bottom: 10px;\n`, q_ = (styled_components__WEBPACK_IMPORTED_MODULE_1___default().h2)`\n margin: 0;\n font-size: 12px;\n font-weight: 400;\n line-height: 20px;\n color: #312783;\n &::after {\n content: \'\';\n height: 1px;\n width: 100%;\n background-color: #312783;\n display: block;\n }\n`, Kc = (styled_components__WEBPACK_IMPORTED_MODULE_1___default().p)`\n margin: 0;\n font-size: 12px;\n font-weight: 300;\n line-height: 18px;\n color: #2b2b37;\n`;\n(styled_components__WEBPACK_IMPORTED_MODULE_1___default().div)`\n display: flex;\n justify-content: flex-start;\n align-items: center;\n gap: 4px;\n`;\nconst y_ = (styled_components__WEBPACK_IMPORTED_MODULE_1___default().div)`\n margin-bottom: 0;\n`;\n(styled_components__WEBPACK_IMPORTED_MODULE_1___default().div)``;\n(styled_components__WEBPACK_IMPORTED_MODULE_1___default().h2)`\n margin: 0;\n font-size: 10px;\n font-weight: 400;\n line-height: 18px;\n color: #20202c;\n`;\n(styled_components__WEBPACK_IMPORTED_MODULE_1___default().ul)`\n list-style: none;\n padding-left: 0;\n margin-top: 5px;\n`;\n(styled_components__WEBPACK_IMPORTED_MODULE_1___default().li)`\n display: flex;\n justify-content: flex-start;\n align-items: center;\n gap: 8px;\n`;\n(styled_components__WEBPACK_IMPORTED_MODULE_1___default().h4)`\n margin: 0;\n font-size: 10px;\n font-weight: 300;\n line-height: 18px;\n color: #20202c;\n flex-grow: 1;\n text-overflow: ellipsis;\n white-space: nowrap;\n width: 150px;\n overflow: hidden;\n`;\n(styled_components__WEBPACK_IMPORTED_MODULE_1___default().div)`\n padding: 5px;\n cursor: pointer;\n`;\nconst w_ = (styled_components__WEBPACK_IMPORTED_MODULE_1___default().div)`\n width: 51px;\n > div {\n justify-content: flex-start;\n }\n`;\n(styled_components__WEBPACK_IMPORTED_MODULE_1___default().div)`\n width: 60px;\n > div {\n justify-content: flex-start;\n }\n`;\nconst Jc = (styled_components__WEBPACK_IMPORTED_MODULE_1___default().div)`\n display: flex;\n justify-content: space-between;\n align-items: center;\n margin-bottom: 8px;\n &:last-child {\n margin-bottom: 0;\n }\n`, _c = (styled_components__WEBPACK_IMPORTED_MODULE_1___default().h4)`\n margin: 0;\n font-size: 12px;\n font-weight: 400;\n line-height: 18px;\n color: #20202c;\n`;\n(styled_components__WEBPACK_IMPORTED_MODULE_1___default().div)`\n .input-wrapper {\n .datepicker-input {\n background-color: transparent;\n width: 66px;\n height: auto;\n padding: 2px 0 2px 2px !important;\n text-decoration: underline;\n color: #312783;\n font-weight: 400;\n &::placeholder {\n color: #312783 !important;\n }\n &:hover {\n background-color: transparent;\n }\n }\n .icon-system {\n display: none;\n }\n }\n`;\nconst fi = styled_components__WEBPACK_IMPORTED_MODULE_1___default().div(\n () => (0,styled_components__WEBPACK_IMPORTED_MODULE_1__.css)`\n display: inline-flex;\n justify-content: center;\n align-items: center;\n padding: 4px 6px;\n border-radius: 56px;\n font-size: 10px;\n font-weight: 500;\n height: 16px;\n box-sizing: border-box;\n border: 1px solid transparent;\n `\n), x_ = styled_components__WEBPACK_IMPORTED_MODULE_1___default()(fi)(\n () => (0,styled_components__WEBPACK_IMPORTED_MODULE_1__.css)`\n background-color: #509e2f;\n border-color: #509e2f;\n color: #ffffff;\n `\n), W_ = styled_components__WEBPACK_IMPORTED_MODULE_1___default()(fi)(\n () => (0,styled_components__WEBPACK_IMPORTED_MODULE_1__.css)`\n background-color: #f2a900;\n border-color: #f2a900;\n color: #ffffff;\n `\n), R_ = styled_components__WEBPACK_IMPORTED_MODULE_1___default()(fi)(\n () => (0,styled_components__WEBPACK_IMPORTED_MODULE_1__.css)`\n background-color: #d1344f;\n border-color: #d1344f;\n color: #ffffff;\n `\n), B_ = styled_components__WEBPACK_IMPORTED_MODULE_1___default()(fi)(\n () => (0,styled_components__WEBPACK_IMPORTED_MODULE_1__.css)`\n background-color: #fff2f2;\n border-color: #d1344f;\n color: #d1344f;\n `\n), Wa = {\n LOW: "low",\n MEDIUM: "medium",\n HIGH: "high",\n NO_GO: "no_go"\n}, $c = ({\n type: e,\n children: t,\n ...o\n}) => {\n switch (e) {\n case Wa.LOW:\n return /* @__PURE__ */ c(x_, { ...o, children: t || "Low" });\n case Wa.MEDIUM:\n return /* @__PURE__ */ c(W_, { ...o, children: t || "Medium" });\n case Wa.HIGH:\n return /* @__PURE__ */ c(R_, { ...o, children: t || "High" });\n default:\n return /* @__PURE__ */ c(B_, { ...o, children: t || "No Go" });\n }\n}, vs = styled_components__WEBPACK_IMPORTED_MODULE_1___default().div(\n () => (0,styled_components__WEBPACK_IMPORTED_MODULE_1__.css)`\n display: inline-block;\n width: 6px;\n height: 6px;\n border-radius: 50%;\n `\n), S_ = styled_components__WEBPACK_IMPORTED_MODULE_1___default()(vs)(\n () => (0,styled_components__WEBPACK_IMPORTED_MODULE_1__.css)`\n background-color: #12805c;\n `\n), E_ = styled_components__WEBPACK_IMPORTED_MODULE_1___default()(vs)(\n () => (0,styled_components__WEBPACK_IMPORTED_MODULE_1__.css)`\n background-color: #b85c00;\n `\n), k_ = styled_components__WEBPACK_IMPORTED_MODULE_1___default()(vs)(\n () => (0,styled_components__WEBPACK_IMPORTED_MODULE_1__.css)`\n background-color: #d7373f;\n `\n), U3 = {\n ACTIVE: "active",\n PENDING: "pending",\n INACTIVE: "inactive"\n}, el = ({\n type: e,\n ...t\n}) => {\n switch (e) {\n case U3.ACTIVE:\n return /* @__PURE__ */ c(S_, { ...t });\n case U3.PENDING:\n return /* @__PURE__ */ c(E_, { ...t });\n case U3.INACTIVE:\n default:\n return /* @__PURE__ */ c(k_, { ...t });\n }\n}, N_ = styled_components__WEBPACK_IMPORTED_MODULE_1___default().div(\n () => (0,styled_components__WEBPACK_IMPORTED_MODULE_1__.css)`\n display: flex;\n justify-content: center;\n align-items: center;\n font-size: 10px;\n line-height: 20px;\n color: #000000;\n font-weight: 300;\n\n & > div:first-child {\n margin-right: 8px;\n }\n `\n), tl = ({\n type: e,\n hasLabel: t = !0,\n children: o,\n iconStyle: n,\n ...r\n}) => {\n if (!t)\n return /* @__PURE__ */ c(el, { type: e });\n let i;\n switch (e) {\n case U3.ACTIVE:\n i = "Active";\n break;\n case U3.PENDING:\n i = "Pending";\n break;\n case U3.INACTIVE:\n default:\n i = "Inactive";\n }\n return /* @__PURE__ */ e1(N_, { ...r, children: [\n /* @__PURE__ */ c(el, { type: e, style: n }),\n o || i\n ] });\n};\n(styled_components__WEBPACK_IMPORTED_MODULE_1___default().div)`\n width: 100%;\n min-width: 100vw;\n`;\nconst T_ = styled_components__WEBPACK_IMPORTED_MODULE_1___default().div(\n ({ color: e = "inherit" }) => (0,styled_components__WEBPACK_IMPORTED_MODULE_1__.css)`\n line-height: 0;\n color: ${e};\n\n > svg {\n path: {\n fill: currentColor;\n }\n }\n `\n), _M = styled_components__WEBPACK_IMPORTED_MODULE_1___default()(\n T_\n)(({ size: e }) => {\n let t;\n switch (e) {\n case "xxxxs":\n t = "8px";\n break;\n case "xxxs":\n t = "12px";\n break;\n case "xxs":\n t = "14px";\n break;\n case "xs":\n t = "16px";\n break;\n case "sm":\n t = "24px";\n break;\n case "lg":\n t = "40px";\n break;\n case "xl":\n t = "48px";\n break;\n case "md":\n default:\n t = "32px";\n }\n return (0,styled_components__WEBPACK_IMPORTED_MODULE_1__.css)`\n width: ${t};\n\n > svg {\n width: ${t};\n }\n `;\n});\nstyled_components__WEBPACK_IMPORTED_MODULE_1___default()(_M)``;\n(styled_components__WEBPACK_IMPORTED_MODULE_1___default().div)`\n display: inline-flex;\n height: 100vh;\n flex-direction: column;\n flex-wrap: wrap;\n`;\n(styled_components__WEBPACK_IMPORTED_MODULE_1___default().div)`\n min-width: 250px;\n display: flex;\n align-items: center;\n margin-bottom: 10px;\n .icon-system {\n margin-right: 8px;\n }\n`;\n(styled_components__WEBPACK_IMPORTED_MODULE_1___default().span)`\n font-size: 14px;\n`;\nfunction I_(e) {\n var t, o, n, r, i, a;\n return /* @__PURE__ */ c(\n _M,\n {\n role: "img",\n "aria-label": (n = (o = (t = e == null ? void 0 : e.children) == null ? void 0 : t._owner) == null ? void 0 : o.memoizedProps) != null && n.name ? (a = (i = (r = e == null ? void 0 : e.children) == null ? void 0 : r._owner) == null ? void 0 : i.memoizedProps) == null ? void 0 : a.name : "",\n className: "icon-system",\n ...e\n }\n );\n}\nconst D_ = Sr(hl)(I_), u$ = ({\n nodeHeaderData: e,\n nodeContentData: t\n}) => {\n const [o, n] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(!1), r = e.status === "Pending Profile" ? "PendingProfile" : "CheckerDone", i = () => {\n n(!o);\n }, a = (s, l) => {\n const p = l.find((d) => d.title === s);\n if (p && p.subItems) {\n const { subItems: d } = p;\n switch (s) {\n case "File review":\n return /* @__PURE__ */ e1("div", { children: [\n /* @__PURE__ */ e1(Jc, { children: [\n /* @__PURE__ */ c(Kc, { children: "Last review date " }),\n /* @__PURE__ */ c(_c, { children: d.lastReviewDate })\n ] }),\n /* @__PURE__ */ e1(Jc, { children: [\n /* @__PURE__ */ c(Kc, { children: "Next review date " }),\n /* @__PURE__ */ c(_c, { children: d.nextReviewDate })\n ] })\n ] });\n default:\n return /* @__PURE__ */ c(s0, {});\n }\n }\n return /* @__PURE__ */ c(s0, {});\n };\n return /* @__PURE__ */ e1(M_, { cardType: r, isExpanded: o, children: [\n /* @__PURE__ */ e1(A_, { children: [\n /* @__PURE__ */ e1(u_, { children: [\n /* @__PURE__ */ c(z_, { children: "File review status" }),\n /* @__PURE__ */ e1(h_, { children: [\n "Pending profiles",\n " ",\n /* @__PURE__ */ c(\n $c,\n {\n type: e.pendingProfileCount < 1 ? "low" : "medium",\n children: e.pendingProfileCount.toString()\n }\n )\n ] })\n ] }),\n /* @__PURE__ */ e1(O_, { children: [\n /* @__PURE__ */ c(\n $c,\n {\n type: e.status === "Checker Done" ? "low" : "medium",\n children: e.status\n }\n ),\n /* @__PURE__ */ c(\n tl,\n {\n type: e.progress.toLowerCase(),\n children: e.progress\n }\n )\n ] }),\n /* @__PURE__ */ c(f_, { children: /* @__PURE__ */ c(g_, { onClick: i, isExpanded: o, children: /* @__PURE__ */ c(D_, { name: "ChevronDown", size: "xs" }) }) })\n ] }),\n /* @__PURE__ */ c(m_, { isExpanded: o, children: o && /* @__PURE__ */ c(C_, { children: /* @__PURE__ */ c(s0, { children: t.map((s, l) => /* @__PURE__ */ c("div", { children: /* @__PURE__ */ e1(L_, { children: [\n /* @__PURE__ */ e1(v_, { children: [\n /* @__PURE__ */ c(q_, { children: s.title }),\n /* @__PURE__ */ c(w_, { children: /* @__PURE__ */ c(\n tl,\n {\n type: s.status === "Due" ? "pending" : "active",\n children: s.status\n }\n ) })\n ] }),\n Object.keys(s.subItems).length !== 0 && /* @__PURE__ */ c(y_, { children: a(s.title, t) })\n ] }) }, l)) }) }) })\n ] });\n}, H_ = styled_components__WEBPACK_IMPORTED_MODULE_1___default().a(\n ({ theme: e, $isDisabled: t }) => {\n const { colors: o, fontWeight: n, typography: r, lineHeight: i } = e;\n return (0,styled_components__WEBPACK_IMPORTED_MODULE_1__.css)`\n font-size: ${r.t12};\n font-weight: ${n.regular};\n line-height: ${i.lh24};\n color: ${o.textIcon.textHyperlink};\n padding: 0 0.75rem;\n text-decoration: none;\n\n &:active {\n color: ${o.buttonText.buttonTextlinkPressed} !important;\n }\n &:hover {\n color: ${o.textIcon.textHover};\n }\n &:focus-visible {\n color: ${o.textIcon.textHover};\n outline: none;\n }\n ${t && (0,styled_components__WEBPACK_IMPORTED_MODULE_1__.css)`\n pointer-events: none;\n color: ${o.textIcon.textDisabledNobg};\n `}\n `;\n }\n);\n(styled_components__WEBPACK_IMPORTED_MODULE_1___default().div)`\n padding: 32px;\n`;\nconst z$ = ({\n text: e,\n isDisabled: t,\n ...o\n}) => /* @__PURE__ */ c(H_, { $isDisabled: t, ...o, children: e }), V_ = styled_components__WEBPACK_IMPORTED_MODULE_1___default().div(\n ({ theme: {}, mode: e }) => (0,styled_components__WEBPACK_IMPORTED_MODULE_1__.css)`\n ${e == "cscBlueDark" && (0,styled_components__WEBPACK_IMPORTED_MODULE_1__.css)`\n background: ${Ib.backgrounds.bgPrimary};\n `}\n `\n), h$ = ({\n children: e,\n initial: t = "cscBlueLight",\n genericThemeCallback: o\n}) => {\n const [n, r] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(t);\n (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => {\n let a = localStorage.getItem("UIKit:ThemeValue");\n a && r(a);\n }, []);\n const i = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)(() => {\n let a = {\n colors: {\n ...v2,\n ...rr,\n backgrounds: {\n ...v2.backgrounds,\n ...rr.backgrounds\n }\n }\n }, s = {\n colors: {\n ...v2,\n ...o4,\n backgrounds: {\n ...v2.backgrounds,\n ...o4.backgrounds\n }\n }\n }, l = a;\n n == "cscBlueLight" ? l = a : n == "cscBlueDark" && (l = s);\n let p = {\n ...Tn,\n ...l\n };\n return p && o ? o(p) : p;\n }, [n]);\n return /* @__PURE__ */ c(j6.Provider, { value: { themeValue: n, setThemeValue: r }, children: /* @__PURE__ */ c(V_, { mode: n, children: /* @__PURE__ */ c(styled_components__WEBPACK_IMPORTED_MODULE_1__.ThemeProvider, { theme: i(), children: e }) }) });\n};\n\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNzE3OTMuanMiLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBdWxCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQWdGQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBV0E7QUFDQTtBQTBCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQVFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBT0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBSUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUE0QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFTQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQW1GQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBU0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBSUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFPQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBSUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFJQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBTUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBS0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQVVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFNQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFLQTtBQUNBO0FBQ0E7QUFVQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQW1CQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBVUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBT0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBTUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQU9BO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQWlHQSIsInNvdXJjZXMiOlsid2VicGFjazovL2l0Zy1uZXh0Z2VuLWZyb250ZW5kLy4vbm9kZV9tb2R1bGVzL0BpbnRlcnRydXN0L2NvbmRlbnNlZC11aWtpdC9kaXN0L2J1bmRsZS5lcy5qcz8xNTQ5Il0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCAqIGFzIGMwIGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IG0xLCB7IHVzZVN0YXRlIGFzIFQxLCB1c2VFZmZlY3QgYXMgUDEsIHVzZUNhbGxiYWNrIGFzIF8xLCB1c2VSZWYgYXMgbjAsIGZvcndhcmRSZWYgYXMgQjAsIHVzZUxheW91dEVmZmVjdCBhcyBUNSwgdXNlTWVtbyBhcyBtMCwgRnJhZ21lbnQgYXMgVTIsIGNyZWF0ZUVsZW1lbnQgYXMgY2UsIHVzZUltcGVyYXRpdmVIYW5kbGUgYXMgQnIsIENvbXBvbmVudCBhcyAkTSwgY3JlYXRlUmVmIGFzIGVBLCBQdXJlQ29tcG9uZW50IGFzIG9sLCB1c2VDb250ZXh0IGFzIEF0LCB1c2VSZWR1Y2VyIGFzIHRBLCBjcmVhdGVDb250ZXh0IGFzIEk1LCBtZW1vIGFzIG9BIH0gZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgJCwgeyBrZXlmcmFtZXMgYXMgdXQsIGNzcyBhcyBvMSwgdXNlVGhlbWUgYXMgcmwsIHdpdGhUaGVtZSBhcyByQSwgVGhlbWVQcm92aWRlciBhcyBuQSB9IGZyb20gXCJzdHlsZWQtY29tcG9uZW50c1wiO1xuaW1wb3J0ICogYXMgaUEgZnJvbSBcInJlYWN0LWRvbVwiO1xuaW1wb3J0IG5sLCB7IGNyZWF0ZVBvcnRhbCBhcyBpbCwgZmluZERPTU5vZGUgYXMgYUEsIHVuc3RhYmxlX2JhdGNoZWRVcGRhdGVzIGFzIHNBLCBmbHVzaFN5bmMgYXMgY0EgfSBmcm9tIFwicmVhY3QtZG9tXCI7XG5jb25zdCBSMiA9IHtcbiAgd2hpdGU6IFwiI0ZGRkZGRlwiLFxuICBibGFjazogXCIjMDAwMDAwXCIsXG4gIHJlZDogXCIjRkYwMDAwXCIsXG4gIHB1cnBsZTogXCIjODMxRjgyXCIsXG4gIGJsdWU6IFwiIzMxMjc4M1wiLFxuICBncmVlbjogXCIjMDA5NjQwXCIsXG4gIG9yYW5nZTogXCIjRjM5MjAwXCIsXG4gIHBpbms6IFwiI0VDNjE5RlwiLFxuICBjeWFuOiBcIiMwMDlGRTNcIixcbiAgbGltZTogXCIjQkNDRjAwXCIsXG4gIGNzY0JsdWU6IFwiIzAwM0E1Q1wiLFxuICBjc2NCbHVlRGFyazogXCIjMDAyOTQwXCIsXG4gIGNzY0h5cGVyTGlua0JsdWU6IFwiIzA3NUE5MlwiLFxuICAvL25ld1xuICBkYXJrOiBcIiMyMDIwMkNcIixcbiAgdGFibGVUZXh0OiBcIiMzNjM2NDFcIlxufSwgbEEgPSB7XG4gIGNzY0JsYWNrOiBcIiMyMjIyMjJcIlxufSwgTm4gPSB7XG4gIHNjYW1waTogXCIjQzFCRURBXCIsXG4gIC8vIGJsdWU3NVxuICBibHVlQmVsbDogXCIjQzFCRURBXCIsXG4gIGxhdmVuZGVyR3JleTogXCIjQzFCRURBXCIsXG4gIGxhdmVuZGVyOiBcIiNDMUJFREFcIixcbiAgc2Vjb25kYXJ5Q3NjQmx1ZTogXCIjMUU1ODc5XCIsXG4gIC8vIE5ld1xuICBmaWVsZEJsdWU6IFwiI0YwRjRGN1wiLFxuICBmaWVsZEhvdmVyQmx1ZTogXCIjRUJFRUY1XCIsXG4gIGZpZWxkQm9yZGVyOiBcIiNlMGUxZTJcIixcbiAgdGV4dEdyZXk6IFwiIzdGN0Y3RlwiLFxuICBwbGFjZWhvbGVyR3JleTogXCIjOEY4Rjk1XCIsXG4gIExhdmVuZGVyTWlzdDogXCIjRTlFOUVBXCJcbn0sIFJhID0ge1xuICBpbmZvOiBcIiMxNDczRTZcIixcbiAgc3VjY2VzczogXCIjMTI4MDVDXCIsXG4gIHdhcm5pbmc6IFwiI0I4NUMwMFwiLFxuICBlcnJvcjogXCIjRDczNzNGXCJcbn0sIGFsID0ge1xuICBwYXVhOiBcIiMxRDE3NEZcIixcbiAgLy8gZGFya0JsdWU0MFxuICBwYXJpc006IFwiIzQ1MzZCNVwiXG4gIC8vIGRhcmtCbHVlMjBcbn0sIHNsID0ge1xuICBlY2xpcHNlOiBcIiM3Njc2NzZcIixcbiAgLy9cbiAgZ3JleTogXCIjNzY3Njc2XCIsXG4gIGRhcmtHcmF5OiBcIiM3Njc2NzZcIixcbiAgLy8gYmxhY2szNVxuICBwaW5rU3dhbjogXCIjQjJCMkIyXCIsXG4gIC8vIGJsYWNrMzBcbiAgc2lsdmVyOiBcIiNDQ0NDQ0NcIixcbiAgLy8gYmxhY2syNVxuICB2ZXJ5TGlnaHRHcmV5OiBcIiNDQ0NDQ0NcIixcbiAgLy8gYmxhY2syMFxuICBnYWluc2Jvcm86IFwiI0MxQkVEQVwiLFxuICAvLyBibGFjazE1IEQ5RDlEOVxuICB3aGlzcGVyOiBcIiNFNUU1RTVcIixcbiAgLy8gYmxhY2sxMFxuICBjc2NHcmV5MTAwOiBcIiNFQUVCRUJcIixcbiAgY3NjR3JleTIwMDogXCIjRDFEM0Q0XCIsXG4gIGNzY0dyZXk1MDA6IFwiIzk3OTk5QlwiLFxuICBjc2NHcmV5NzAwOiBcIiM1NDU4NUFcIixcbiAgY3NjR3JleTYwMDogXCIjNkU3MTczXCIsXG4gIC8vbmV3XG4gIGFjdGl2ZUdyZXk6IFwiI0MwQzhEOVwiXG59LCBCYSA9IHtcbiAgZ2hvc3RXaGl0ZTogXCIjRjdGOUZGXCIsXG4gIC8vIGJsdWU1XG4gIGN5YW5CZzogXCIjRjJGQUZFXCIsXG4gIHNlbGFnbzogXCIjRjlGNEY5XCIsXG4gIC8vIHB1cnBsZTVcbiAgcGlua0JnOiBcIiNGRUY3RkFcIixcbiAgbWludENyZWFtOiBcIiNGMkZBRjVcIixcbiAgLy8gZ3JlZW41XG4gIGxpbWVCZzogXCIjRkNGREYyXCIsXG4gIHdoaXRlU21va2U6IFwiI0YyRjJGMlwiLFxuICAvLyBibGFjazUgLS0tLS0tR1JFWSBDT0xPUlxuICBzbm93OiBcIiNGMkYyRjJcIixcbiAgLy9cbiAgZmxvcmFsV2hpdGU6IFwiI0ZGRkJGM1wiLFxuICAvLyBvcmFuZ2V6XG4gIGNoYWJsaXM6IFwiI0ZGRjJGMlwiLFxuICAvL3JlZFxuICBjc2NCbHVlOiBcIiNGN0Y5RkZcIixcbiAgY3NjQmx1ZUxpZ2h0ZXI6IFwiI0YwRjRGN1wiLFxuICBpbnRlcnRydXN0T3JhbmdlOiBcIiNGOUM4N0ZcIixcbiAgLy9uZXdcbiAgY3VsdHVyZWQ6IFwiI0Y0RjRGNFwiLFxuICBhbGFiYXN0ZXI6IFwiI0ZBRkFGQVwiLFxuICBncmV5R29vc2U6IFwiI0QyRDJENVwiXG59LCBwQSA9IHtcbiAgcmVkT3JhbmdlOiAoZSkgPT4gYGxpbmVhci1ncmFkaWVudCh0byAke2V9LCAke1IyLnJlZH0gMCUsICR7UjIub3JhbmdlfSAxMDAlKWAsXG4gIHB1cnBsZVBpbms6IChlKSA9PiBgbGluZWFyLWdyYWRpZW50KHRvICR7ZX0sICR7UjIucHVycGxlfSAwJSwgI0I1MkJCMyAxMDAlKWAsXG4gIGJsdWVDeWFuOiAoZSkgPT4gYGxpbmVhci1ncmFkaWVudCh0byAke2V9LCAke1IyLmJsdWV9IDAlLCAke2FsLnBhcmlzTX0gMTAwJSlgLFxuICBncmVlbkxpbWU6IChlKSA9PiBgbGluZWFyLWdyYWRpZW50KHRvICR7ZX0sICR7UmEuc3VjY2Vzc30gMCUsICAjMTlCMzdGIDEwMCUpYCxcbiAgb3JhbmdlQ2hlcm9rZWU6IChlKSA9PiBgbGluZWFyLWdyYWRpZW50KHRvICR7ZX0sICR7UjIub3JhbmdlfSAwJSwgJHtSYS53YXJuaW5nfSAxMDAlKWAsXG4gIHBpbmtMYXZlbmRlclBpbms6IChlKSA9PiBgbGluZWFyLWdyYWRpZW50KHRvICR7ZX0sICR7UjIucGlua30gMCUsICR7UjIucGlua30gMTAwJSlgXG59LCBkQSA9IHtcbiAgcHJpbWFyeToge1xuICAgIGRlZmF1bHQ6IFIyLmNzY0JsdWUsXG4gICAgaG92ZXI6IE5uLnNlY29uZGFyeUNzY0JsdWUsXG4gICAgcHJlc3NlZDogUjIuY3NjQmx1ZURhcmssXG4gICAgZm9jdXNlZDogTm4uc2Vjb25kYXJ5Q3NjQmx1ZSxcbiAgICBkaXNhYmxlZDogc2wuY3NjR3JleTEwMFxuICB9LFxuICBzZWNvbmRhcnk6IHtcbiAgICBkZWZhdWx0OiBcInRyYW5zcGFyZW50XCJcbiAgfSxcbiAgdGVydGlhcnk6IHtcbiAgICBkZWZhdWx0OiBSMi53aGl0ZSxcbiAgICBob3ZlcjogUjIud2hpdGUsXG4gICAgcHJlc3NlZDogUjIud2hpdGUsXG4gICAgZm9jdXNlZDogUjIud2hpdGVcbiAgfSxcbiAgbGluazoge1xuICAgIGRlZmF1bHQ6IFwidHJhbnNwYXJlbnRcIixcbiAgICBob3ZlcjogQmEuY3NjQmx1ZSxcbiAgICBwcmVzc2VkOiBcInRyYW5zcGFyZW50XCIsXG4gICAgZm9jdXNlZDogXCJ0cmFuc3BhcmVudFwiLFxuICAgIGRpc2FibGVkOiBcInRyYW5zcGFyZW50XCJcbiAgfSxcbiAgZmxvYXRpbmc6IHtcbiAgICBkZWZhdWx0OiBSMi53aGl0ZSxcbiAgICBob3ZlcjogQmEuZ2hvc3RXaGl0ZSxcbiAgICBwcmVzc2VkOiBObi5zZWNvbmRhcnlDc2NCbHVlXG4gIH1cbn0sIGNsID0ge1xuICBiYXNlOiBcIlVidW50dSwgSGVsdmV0aWNhLCBBcmlhbFwiLFxuICBzZWNvbmRhcnk6IFwiQXZlbmlyIEhlYXZ5XCIsXG4gIHRlcnRpYXJ5OiBcIkF2ZW5pciBIZWF2eVwiXG59LCBiQSA9IHtcbiAgdDQ4OiBcIjQ4cHhcIixcbiAgLy8gM3JlbVxuICB0NDA6IFwiNDBweFwiLFxuICAvLyAyLjVyZW1cbiAgdDMyOiBcIjMycHhcIixcbiAgLy8gMnJlbVxuICB0Mjg6IFwiMjhweFwiLFxuICAvLyAxLjc1cmVtXG4gIHQyNDogXCIyNHB4XCIsXG4gIC8vIDEuNXJlbVxuICB0MjA6IFwiMjBweFwiLFxuICAvLyAxLjI1cmVtXG4gIHQxODogXCIxOHB4XCIsXG4gIC8vIDEuMTI1cmVtXG4gIHQxNjogXCIxNnB4XCIsXG4gIC8vIDFyZW1cbiAgdDE0OiBcIjE0cHhcIixcbiAgLy8gMC44NzVyZW1cbiAgdDEyOiBcIjEycHhcIixcbiAgLy8gMC43NXJlbVxuICB0MTA6IFwiMTBweFwiLFxuICAvLyAwLjYyNXJlbVxuICB0OTogXCI5cHhcIixcbiAgLy8gMC41NjI1cmVtXG4gIHQ4OiBcIjhweFwiLFxuICAvLyAwLjVyZW1cbiAgdDc6IFwiN3B4XCIsXG4gIC8vIDAuNDM3NXJlbVxuICB0NjogXCI2cHhcIlxuICAvLyAwLjM3NXJlbVxufSwgTUEgPSB7XG4gIGxoNTY6IFwiNTZweFwiLFxuICAvLyAzLjVyZW1cbiAgbGg0ODogXCI0OHB4XCIsXG4gIC8vIDNyZW1cbiAgbGg0MDogXCI0MHB4XCIsXG4gIC8vIDIuNXJlbVxuICBsaDM5OiBcIjM5LjJweFwiLFxuICAvLyAyLjQ1cmVtXG4gIGxoMzY6IFwiMzZweFwiLFxuICAvLyAyLjI1cmVtXG4gIGxoMzI6IFwiMzJweFwiLFxuICAvLyAycmVtXG4gIGxoMjg6IFwiMjhweFwiLFxuICAvLyAxLjc1cmVtXG4gIGxoMjY6IFwiMjZweFwiLFxuICAvLyAxLjYyNXJlbVxuICBsaDI1OiBcIjI1LjJweFwiLFxuICAvLzEuNTc1cmVtXG4gIGxoMjQ6IFwiMjRweFwiLFxuICAvLyAxLjVyZW1cbiAgbGgyMjogXCIyMnB4XCIsXG4gIC8vIDEuMzc1cmVtXG4gIGxoMjA6IFwiMjBweFwiLFxuICAvLyAxLjI1cmVtXG4gIGxoMTk6IFwiMTkuNnB4XCIsXG4gIC8vMS4yMjVyZW1cbiAgbGgxODogXCIxOHB4XCIsXG4gIC8vIDEuMTI1cmVtXG4gIGxoMTc6IFwiMTdweFwiLFxuICAvLyAxLjA2MjVyZW1cbiAgbGgxNjogXCIxNnB4XCIsXG4gIC8vIDFyZW1cbiAgbGgxNTogXCIxNXB4XCIsXG4gIC8vIDAuOTM3NXJlbVxuICBsaDE0OiBcIjE0cHhcIixcbiAgLy8gMC45Mzc1cmVtXG4gIGxoMTI6IFwiMTJweFwiXG4gIC8vMC43NXJlbVxufSwgbGwgPSB7XG4gIGJvbGQ6IDcwMCxcbiAgbWVkaXVtOiA1MDAsXG4gIHJlZ3VsYXI6IDQwMCxcbiAgbGlnaHQ6IDMwMFxufSwgQUEgPSB7XG4gIGNpcmNsZTogXCI1MCVcIixcbiAgeHhsOiBcIjEycHhcIixcbiAgLy8gMC43NXJlbVxuICB4bDogXCIxMHB4XCIsXG4gIC8vIDAuNjI1cmVtXG4gIGxnOiBcIjhweFwiLFxuICAvLyAwLjVyZW1cbiAgYmFzZTogXCI0cHhcIixcbiAgLy8gMC4yNXJlbVxuICBzbTogXCIycHhcIlxuICAvLyAwLjEyNXJlbVxufSwgZW4gPSBcInJnYmEoNDksIDM5LCAxMzEsIDAuMDUpXCIsIHVBID0ge1xuICBzbTogYDAgMC4yNXJlbSAwLjVyZW0gJHtlbn1gLFxuICBtZDogYDAgMC41cmVtIDFyZW0gJHtlbn1gLFxuICBsZzogYDAgMXJlbSAxLjVyZW0gJHtlbn1gLFxuICB4bDogYDAgMnJlbSA0cmVtICR7ZW59YFxufSwgcGwgPSB7XG4gIGJhc2U6IFwiY3ViaWMtYmV6aWVyKDAuMjksLjQsLjE3LC45OSlcIlxufSwgZGwgPSB7XG4gIGJhc2U6IGBhbGwgMC4ycyAke3BsLmJhc2V9YFxufSwgYmwgPSB7XG4gIHRleHRPdmVyZmxvdzogXCJlbGxpcHNpc1wiLFxuICBvdmVyZmxvdzogXCJoaWRkZW5cIixcbiAgd2hpdGVTcGFjZTogXCJub3dyYXBcIlxufSwgTWwgPSB7XG4gIGJhY2tncm91bmQ6IFwidHJhbnNwYXJlbnRcIixcbiAgZm9udEZhbWlseTogY2wuYmFzZSxcbiAgZm9udFdlaWdodDogbGwucmVndWxhcixcbiAgdHJhbnNpdGlvbjogZGwuYmFzZSxcbiAgYm9yZGVyOiAwLFxuICBvdXRsaW5lOiBcIm5vbmVcIixcbiAgY3Vyc29yOiBcInBvaW50ZXJcIixcbiAgdXNlclNlbGVjdDogXCJub25lXCJcbn0sIEFsID0ge1xuICBtYXJnaW46IDAsXG4gIHBhZGRpbmc6IDAsXG4gIGxpc3RTdHlsZTogXCJub25lXCJcbn0sIHpBID0ge1xuICBlbGxpcHNpczogYmwsXG4gIGJ1dHRvblJlc2V0OiBNbCxcbiAgbGlzdFJlc2V0OiBBbFxufSwgaEEgPSB7XG4gIGJ1dHRvblRleHRQcmltYXJ5OiBcIiNGRkZGRkZcIixcbiAgYnV0dG9uVGV4dFByaW1hcnlQcmVzc2VkOiBcIiNGRkZGRkZcIixcbiAgYnV0dG9uVGV4dFNlY29uZGFyeURlZmF1bHQ6IFwiIzMxMjc4M1wiLFxuICBidXR0b25UZXh0U2Vjb25kYXJ5SG92ZXI6IFwiI0ZGRkZGRlwiLFxuICBidXR0b25UZXh0U2Vjb25kYXJ5UHJlc3NlZDogXCIjRkZGRkZGXCIsXG4gIGJ1dHRvblRleHRTZWNvbmRhcnlGb2N1c2VkOiBcIiNGRkZGRkZcIixcbiAgYnV0dG9uVGV4dFRlcnRpYXJ5OiBcIiMyMDIwMkNcIixcbiAgYnV0dG9uVGV4dGxpbmtEZWZhdWx0OiBcIiMzMTI3ODNcIixcbiAgYnV0dG9uVGV4dGxpbmtIb3ZlcjogXCIjNDUzNkI1XCIsXG4gIGJ1dHRvblRleHRsaW5rUHJlc3NlZDogXCIjMUQxNzRGXCJcbn0sIHYyID0ge1xuICAuLi5SMixcbiAgLi4uTm4sXG4gIC4uLmFsLFxuICAuLi5zbCxcbiAgLi4ubEEsXG4gIC4uLlJhLFxuICAuLi5oQSxcbiAgZ3JhZGllbnRzOiBwQSxcbiAgYmFja2dyb3VuZHM6IEJhLFxuICBidXR0b25zOiBkQVxufSwgRDMgPSB7XG4gIHNwNDg6IFwiNDhweFwiLFxuICAvLyAzcmVtXG4gIHNwNDA6IFwiNDBweFwiLFxuICAvLyAyLjVyZW1cbiAgc3AzMjogXCIzMnB4XCIsXG4gIC8vIDJyZW1cbiAgc3AyNDogXCIyNHB4XCIsXG4gIC8vIDEuNXJlbVxuICBzcDE2OiBcIjE2cHhcIixcbiAgLy8gMXJlbVxuICBzcDEyOiBcIjEycHhcIixcbiAgLy8gMC43NXJlbVxuICBzcDg6IFwiOHB4XCIsXG4gIC8vIDAuNXJlbVxuICBzcDY6IFwiNnB4XCIsXG4gIC8vIDAuMzc1cmVtXG4gIHNwNDogXCI0cHhcIixcbiAgLy8gMC4yNXJlbVxuICBzcDI6IFwiMnB4XCJcbiAgLy8gMC4xMjVyZW1cbn0sIE9BID0ge1xuICB4eHh4czogXCI4cHhcIixcbiAgLy8gMC41cmVtXG4gIHh4eHM6IFwiMTJweFwiLFxuICAvLzAuODc1cmVtXG4gIHh4czogXCIxNHB4XCIsXG4gIC8vMC44NzVyZW1cbiAgeHM6IFwiMTZweFwiLFxuICAvLzFyZW1cbiAgc206IFwiMjRweFwiLFxuICAvLzEuNXJlbVxuICBtZDogXCIzMnB4XCIsXG4gIC8vMnJlbVxuICBsZzogXCI0MHB4XCIsXG4gIC8vMi41cmVtXG4gIHhsOiBcIjQ4cHhcIlxuICAvLzNyZW1cbn0sIGZBID0gXCIyLjVyZW1cIiwgZ0EgPSBcIjMycHhcIiwgSzIgPSBcIjE2cHhcIiwgdWwgPSB1dGBcbiAgMCUgeyBvcGFjaXR5OiAwOyB9XG4gIDEwMCUgeyBvcGFjaXR5OiAxOyB9XG5gLCBDQSA9IHtcbiAgZmFkZUluOiB1bFxufSwgVG4gPSAvKiBAX19QVVJFX18gKi8gT2JqZWN0LmZyZWV6ZSgvKiBAX19QVVJFX18gKi8gT2JqZWN0LmRlZmluZVByb3BlcnR5KHtcbiAgX19wcm90b19fOiBudWxsLFxuICBHTE9CQUxfSVRFTV9IRUlHSFQ6IGZBLFxuICBHTE9CQUxfSVRFTV9IRUlHSFRfQ09OREVOU0VEOiBnQSxcbiAgR0xPQkFMX1NLRUxFVE9OX0hFSUdIVDogSzIsXG4gIGFuaW1hdGlvbnM6IENBLFxuICBib3JkZXJSYWRpdXM6IEFBLFxuICBidXR0b25SZXNldDogTWwsXG4gIGNvbG9yczogdjIsXG4gIGN1YmljQmV6aWVyOiBwbCxcbiAgZWxsaXBzaXM6IGJsLFxuICBmYWRlSW46IHVsLFxuICBmb250RmFtaWx5OiBjbCxcbiAgZm9udFdlaWdodDogbGwsXG4gIGl0ZW1TaXplOiBPQSxcbiAgbGluZUhlaWdodDogTUEsXG4gIGxpc3RSZXNldDogQWwsXG4gIG1peGluczogekEsXG4gIHNoYWRvd3M6IHVBLFxuICBzcGFjaW5nczogRDMsXG4gIHRyYW5zaXRpb25zOiBkbCxcbiAgdHlwb2dyYXBoeTogYkFcbn0sIFN5bWJvbC50b1N0cmluZ1RhZywgeyB2YWx1ZTogXCJNb2R1bGVcIiB9KSksIFBvID0ge1xuICBiZ1ByaW1hcnk6IFwiI0ZGRkZGRlwiLFxuICBiZ1NlY29uZGFyeTogXCIjRjVGNUY1XCIsXG4gIC8vbmV3XG4gIGJnU2Vjb25kYXJ5QWx0OiBcIiNGNUY3RjlcIixcbiAgLy9uZXdcbiAgYmdUZXJ0aWFyeTogXCIjMDAzQTVDXCIsXG4gIGJnUHJlc3NlZDogXCIjMDAyOTQwXCIsXG4gIGJnUmVhZE9ubHk6IFwiI0JGQ0VENlwiLFxuICBiZ1NlbGVjdGVkOiBcIiNDMERCRTVcIixcbiAgYmdIb3ZlclByaW1hcnk6IFwiI0VCRjZGRFwiLFxuICBiZ0hvdmVyU2Vjb25kYXJ5OiBcIiMxRTU4NzlcIixcbiAgYmdEaXNhYmxlZFByaW1hcnk6IFwiI0VBRUJFQlwiLFxuICBiZ0Rpc2FibGVkU2Vjb25kYXJ5OiBcIiNBN0E3QTdcIixcbiAgYmdJbmZvcm1hdGlvbmFsUHJpbWFyeTogXCIjNDI3ODhGXCIsXG4gIGJnSW5mb3JtYXRpb25hbFNlY29uZGFyeTogXCIjRTJFRkYyXCIsXG4gIGJnU3VjY2Vzc1ByaW1hcnk6IFwiIzUwOUUyRlwiLFxuICBiZ1N1Y2Nlc3NTZWNvbmRhcnk6IFwiI0RERUNEN1wiLFxuICBiZ1dhcm5pbmdQcmltYXJ5OiBcIiNGMkE5MDBcIixcbiAgYmdXYXJuaW5nU2Vjb25kYXJ5OiBcIiNGOEVFRDdcIixcbiAgYmdFcnJvclByaW1hcnk6IFwiI0QxMzQ0RlwiLFxuICBiZ0Vycm9yU2Vjb25kYXJ5OiBcIiNGOEUxRTVcIixcbiAgYmdUcmFuc3BhcmVuY3lQcmltYXJ5OiBcIiMyMjIyMjJcIixcbiAgYmdUcmFuc3BhcmVuY3lIb3ZlcjogXCIjRkZGRkZGXCIsXG4gIGJnVHJhbnNwYXJlbmN5UHJlc3NlZDogXCIjRkZGRkZGXCIsXG4gIGJsYWNrT3ZlcmxheTogXCIjMjIyMjIyXCJcbn0sIG1BID0ge1xuICBib3JkZXJQcmltYXJ5OiBcIiNEMUQzRDRcIixcbiAgYm9yZGVyU2Vjb25kYXJ5OiBcIiMwMDNBNUNcIixcbiAgYm9yZGVyUHJlc3NlZDogXCIjMDAyOTQwXCIsXG4gIGJvcmRlclRlcnRpYXJ5OiBcIiNFQUVCRUJcIixcbiAgYm9yZGVyQWx0ZXJuYXRpdmU6IFwiI0Y1RjVGNVwiLFxuICBib3JkZXJFcnJvcjogXCIjRDEzNDRGXCIsXG4gIGJvcmRlckZvY3VzZWQ6IFwiIzQyNzg4RlwiLFxuICBib3JkZXJIb3ZlcjogXCIjMUU1ODc5XCIsXG4gIGJvcmRlckRpc2FibGVkT25iZzogXCIjQTdBN0E3XCIsXG4gIGJvcmRlclJlYWRvbmx5OiBcIiNCRkNFRDZcIixcbiAgYm9yZGVyVHJhbnNwYXJlbnQ6IFwiI0ZGRkZGRlwiXG59LCBMQSA9IHtcbiAgdGV4dFByaW1hcnk6IFwiIzIyMjIyMlwiLFxuICB0ZXh0U2Vjb25kYXJ5OiBcIiMwMDNBNUNcIixcbiAgdGV4dFRlcnRpYXJ5OiBcIiNGRkZGRkZcIixcbiAgLy9uZXdcbiAgdGV4dEFsZXJ0VGVydGlhcnk6IFwiIzIyMjIyMlwiLFxuICAvL25ld1xuICB0ZXh0SG92ZXI6IFwiIzIxN0NCOFwiLFxuICB0ZXh0UHJlc3NlZDogXCIjMDAyOTQwXCIsXG4gIHRleHRIaWdoZW1waGFzaXM6IFwiIzJEMkQyRFwiLFxuICB0ZXh0Qm9keTogXCIjMzkzOTM5XCIsXG4gIHRleHRNZWRpdW1lbXBoYXNpczogXCIjNTQ1ODVBXCIsXG4gIHRleHRMb3dlbXBoYXNpczogXCIjNkU3MTczXCIsXG4gIHRleHREaXNhYmxlZE9uYmc6IFwiIzk3OTk5QlwiLFxuICB0ZXh0RGlzYWJsZWROb2JnOiBcIiNEMUQzRDRcIixcbiAgdGV4dEVycm9yOiBcIiNEMTM0NEZcIixcbiAgdGV4dFN1Y2Nlc3M6IFwiIzUwOUUyRlwiLFxuICB0ZXh0V2FybmluZzogXCIjRjJBOTAwXCIsXG4gIHRleHRJbmZvcm1hdGlvbmFsOiBcIiM0Mjc4OEZcIixcbiAgdGV4dEh5cGVybGluazogXCIjMDc1QTkyXCIsXG4gIC8vbmV3XG4gIHRleHRBbGVydEVycm9yOiBcIiMyMjIyMjJcIixcbiAgdGV4dEFsZXJ0U3VjY2VzczogXCIjMjIyMjIyXCIsXG4gIHRleHRBbGVydFdhcm5pbmc6IFwiIzIyMjIyMlwiLFxuICB0ZXh0QWxlcnRJbmZvcm1hdGlvbmFsOiBcIiMyMjIyMjJcIixcbiAgLy9uZXdcbiAgdGV4dFJlYWRvbmx5OiBcIiNCRkNFRDZcIixcbiAgdGV4dERpc2FibGVkOiBcIiNBN0E3QTdcIlxufSwgdkEgPSB7XG4gIC8vIGxlZ2VuZEJnQ3lhbjogJyMwMDlGRTMnLFxuICAvLyBsZWdlbmRCZ1B1cnBsZTogJyM4MzFGODInLFxuICAvLyBsZWdlbmRCZ1Bpbms6ICcjRUM2MTlGJyxcbiAgLy8gbGVnZW5kQmdSZWQ6ICcjRkYwMDAwJyxcbiAgLy8gbGVnZW5kQmdPcmFuZ2U6ICcjRjM5MjAwJyxcbiAgLy8gbmV3XG4gIGxlZ2VuZEJnMTogXCIjMDAzQTVDXCIsXG4gIGxlZ2VuZEJnMjogXCIjMDBCMkE5XCIsXG4gIGxlZ2VuZEJnMzogXCIjRjJBOTAwXCIsXG4gIGxlZ2VuZEJnNDogXCIjOTc5OTlCXCIsXG4gIGxlZ2VuZEJnNTogXCIjNDI3ODhGXCIsXG4gIGxlZ2VuZEJnNjogXCIjRjY4RDJFXCIsXG4gIGxlZ2VuZEJnNzogXCIjNTA5RTJGXCIsXG4gIGxlZ2VuZEJnODogXCIjRDEzNDRGXCIsXG4gIGxlZ2VuZEJvcmRlcjogXCIjRkZGRkZGXCJcbn0sIHFBID0ge1xuICBtZXRyaWNzQmdIb3ZlcjogXCIjRjVGN0Y5XCIsXG4gIG1ldHJpY3NCZ1VwOiBcIiM1MDlFMkZcIixcbiAgbWV0cmljc0JnRG93bjogXCIjRDEzNDRGXCJcbn0sIEp0ID0ge1xuICBjaGFydEJ1YmJsZUJnRGVmYXVsdDogXCIjRjJGNUY3XCIsXG4gIC8vIGNoYXJ0QmdCbHVlQWN0aXZlOiAnIzMxMjc4MycsXG4gIC8vIGNoYXJ0QmdCbHVlSW5hY3RpdmU6ICcjQ0JDOUUwJyxcbiAgLy8gY2hhcnRQaWVCZ0N5YW5BY3RpdmU6ICcjMDA5RkUzJyxcbiAgLy8gY2hhcnRQaWVCZ0N5YW5JbmFjdGl2ZTogJyNCRkU3RjgnLFxuICAvLyBjaGFydFBpZUJnUHVycGxlQWN0aXZlOiAnIzgzMUY4MicsXG4gIC8vIGNoYXJ0UGllQmdQdXJwbGVJbmFjdGl2ZTogJyNFMEM3RTAnLFxuICAvLyBjaGFydFBpZUJnUGlua0FjdGl2ZTogJyNFQzYxOUYnLFxuICAvLyBjaGFydFBpZUJnUGlua0luYWN0aXZlOiAnI0ZBRDdFNycsXG4gIC8vIGNoYXJ0UGllQmdHcmVlbkFjdGl2ZTogJyMwMDk2NDAnLFxuICAvLyBjaGFydFBpZUJnR3JlZW5JbmFjdGl2ZTogJyNCRkU1Q0YnLFxuICAvLyBjaGFydFBpZUJnT3JhbmdlQWN0aXZlOiAnI0YzOTIwMCcsXG4gIC8vIGNoYXJ0UGllQmdPcmFuZ2VJbmFjdGl2ZTogJyNGQ0U0QkYnLFxuICAvLyBjaGFydFBpZUJnUmVkQWN0aXZlOiAnI0ZGMDAwMCcsXG4gIC8vIGNoYXJ0UGllQmdSZWRJbmFjdGl2ZTogJyNGRkJGQkYnLFxuICAvL25ld1xuICBjaGFydEJnSG92ZXI6IFwiI0Y1RjdGOVwiLFxuICBjaGFydEJnMUFjdGl2ZTogXCIjMDAzQTVDXCIsXG4gIGNoYXJ0QmcxSW5BY3RpdmU6IFwiI0JGQ0VENlwiLFxuICBjaGFydFBpZUJnMkFjdGl2ZTogXCIjMDBCMkE5XCIsXG4gIGNoYXJ0UGllQmcySW5BY3RpdmU6IFwiI0JGRUNFOVwiLFxuICBjaGFydFBpZUJnM0FjdGl2ZTogXCIjRjJBOTAwXCIsXG4gIGNoYXJ0UGllQmczSW5BY3RpdmU6IFwiI0ZDRTlCRlwiLFxuICBjaGFydFBpZUJnNEFjdGl2ZTogXCIjOTc5OTlCXCIsXG4gIGNoYXJ0UGllQmc0SW5BY3RpdmU6IFwiI0U1RTVFNlwiLFxuICBjaGFydFBpZUJnNUFjdGl2ZTogXCIjNDI3ODhGXCIsXG4gIGNoYXJ0UGllQmc1SW5BY3RpdmU6IFwiI0VERjVGN1wiLFxuICBjaGFydFBpZUJnNkFjdGl2ZTogXCIjRjY4RDJFXCIsXG4gIGNoYXJ0UGllQmc2SW5BY3RpdmU6IFwiI0ZERTJDQlwiLFxuICBjaGFydFBpZUJnN0FjdGl2ZTogXCIjNTA5RTJGXCIsXG4gIGNoYXJ0UGllQmc3SW5BY3RpdmU6IFwiI0QzRTdDQlwiLFxuICBjaGFydFBpZUJnOEFjdGl2ZTogXCIjRDEzNDRGXCIsXG4gIGNoYXJ0UGllQmc4SW5BY3RpdmU6IFwiI0YzQ0NEM1wiXG59LCB5QSA9IHtcbiAgYnV0dG9uQmdQcmltYXJ5RGVmYXVsdDogXCIjMDAzQTVDXCIsXG4gIGJ1dHRvbkJnUHJpbWFyeUhvdmVyOiBcIiMxRTU4NzlcIixcbiAgYnV0dG9uQmdQcmltYXJ5UHJlc3NlZDogXCIjMDAyOTQwXCIsXG4gIGJ1dHRvbkJnU2Vjb25kYXJ5RGVmYXVsdDogXCIjRkZGRkZGXCIsXG4gIGJ1dHRvbkJnU2Vjb25kYXJ5SG92ZXI6IFwiIzFFNTg3OVwiLFxuICBidXR0b25CZ1NlY29uZGFyeVByZXNzZWQ6IFwiIzAwMjk0MFwiLFxuICBidXR0b25CZ1RlcnRpYXJ5OiBcIiNGRkZGRkZcIixcbiAgYnV0dG9uQmdUZXJ0aWFyeUhvdmVyOiBcIiM2RTcxNzNcIixcbiAgYnV0dG9uQmdUZXJ0aWFyeVByZXNzZWQ6IFwiIzIyMjIyMlwiLFxuICBidXR0b25CZ1RleHRsaW5rSG92ZXI6IFwiI0VCRjZGRFwiXG59LCB3QSA9IHtcbiAgYnV0dG9uQm9yZGVyU2Vjb25kYXJ5RGVmYXVsdDogXCIjMDAzQTVDXCIsXG4gIGJ1dHRvbkJvcmRlclRlcnRpYXJ5RGVmYXVsdDogXCIjRDFEM0Q0XCIsXG4gIGJ1dHRvbkJvcmRlclRlcnRpYXJ5SG92ZXI6IFwiI0E3QTdBN1wiLFxuICBidXR0b25Cb3JkZXJUZXJ0aWFyeVByZXNzZWQ6IFwiIzAwMzQ1M1wiXG59LCB4QSA9IHtcbiAgYnV0dG9uVGV4dFByaW1hcnk6IFwiI0ZGRkZGRlwiLFxuICBidXR0b25UZXh0UHJpbWFyeVByZXNzZWQ6IFwiI0ZGRkZGRlwiLFxuICBidXR0b25UZXh0U2Vjb25kYXJ5RGVmYXVsdDogXCIjMDAzQTVDXCIsXG4gIGJ1dHRvblRleHRTZWNvbmRhcnlIb3ZlcjogXCIjRkZGRkZGXCIsXG4gIGJ1dHRvblRleHRTZWNvbmRhcnlQcmVzc2VkOiBcIiNGRkZGRkZcIixcbiAgYnV0dG9uVGV4dFNlY29uZGFyeUZvY3VzZWQ6IFwiI0ZGRkZGRlwiLFxuICBidXR0b25UZXh0VGVydGlhcnk6IFwiIzIyMjIyMlwiLFxuICBidXR0b25UZXh0bGlua0RlZmF1bHQ6IFwiIzAwM0E1Q1wiLFxuICBidXR0b25UZXh0bGlua0hvdmVyOiBcIiMxRTU4NzlcIixcbiAgYnV0dG9uVGV4dGxpbmtQcmVzc2VkOiBcIiMwMDI5NDBcIlxufSwgV0EgPSB7XG4gIHRvcEJhckJnUHJpbWFyeTogXCIjMDAzQTVDXCIsXG4gIHRvcEJhckJnU2Vjb25kYXJ5OiBcIiNGRkZGRkZcIixcbiAgdG9wQmFyQmdUZXJ0aWFyeTogXCIjRkZGRkZGXCIsXG4gIHRvcEJhclRleHRQcmltYXJ5OiBcIiNGRkZGRkZcIixcbiAgdG9wQmFyVGV4dFNlY29uZGFyeTogXCIjMDAzQTVDXCJcbn0sIFJBID0ge1xuICBmaWVsZEJnRGVmYXVsdDogXCIjRjVGN0Y5XCIsXG4gIGZpZWxkQmdIb3ZlcjogXCIjRUJGNkZEXCIsXG4gIGZpZWxkVGV4dFBsYWNlaG9sZGVyOiBcIiM5Nzk5OUJcIixcbiAgZmllbGRUZXh0U3VwcG9ydDogXCIjQkRCREJEXCIsXG4gIGZpZWxkQm9yZGVyQWN0aXZlOiBcIiNEMUQzRDRcIlxufSwgQkEgPSB7XG4gIHRhYkluZGljYXRvcjogXCIjMDBCMkE5XCIsXG4gIC8vbmV3XG4gIHRhYkJvcmRlcjogXCIjRjVGNUY1XCJcbn0sIFNBID0ge1xuICBhY3Rpb25CdXR0b25CZ0hvdmVyRHJvcGRvd246IFwiI0ZCRkJGQlwiLFxuICBhY3Rpb25CdXR0b25CZ1ByZXNzZWREcm9wZG93bjogXCIjQzBEQkU1XCIsXG4gIGFjdGlvbkJ1dHRvbkJnUHJlc3NlZEJ1dHRvbjogXCIjQzBEQkU1XCIsXG4gIGFjdGlvbkJ1dHRvbkJnSG92ZXJCdXR0b246IFwiI0VCRjZGRFwiXG59LCBFQSA9IHtcbiAgZmlsdGVyYm94QnV0dG9uQm9yZGVySG92ZXI6IFwiI0JEQkRCRFwiLFxuICBmaWx0ZXJib3hCdXR0b25Cb3JkZXJEZWZhdWx0OiBcIiNFQUVCRUJcIlxufSwga0EgPSB7XG4gIGZpbHRlcmJveEJ1dHRvbkJnOiBcIiNGRkZGRkZcIixcbiAgZmlsdGVyYm94Qmc6IFwiI0ZGRkZGRlwiXG59LCBOQSA9IHtcbiAgdG9nZ2xlQmdJbmFjdGl2ZURlZmF1bHQ6IFwiI0VBRUJFQlwiLFxuICBzd2l0Y2hUZXh0UmVhZG9ubHlBY3RpdmU6IFwiI0ZGRkZGRlwiXG59LCBUQSA9IHtcbiAgZGF0YVRhYmxlQmdQcmltYXJ5OiBcIiNGRkZGRkZcIixcbiAgZGF0YVRhYmxlQmdIZWFkZXI6IFwiI0Y1RjdGOVwiLFxuICBkYXRhVGFibGVCZ0ZpbHRlcjogXCIjRkZGRkZGXCIsXG4gIGRhdGFUYWJsZUJnU2Vjb25kYXJ5OiBcIiNGOEUxRTVcIixcbiAgZGF0YVRhYmxlQmdUZXJ0aWFyeTogXCIjRjhFRUQ3XCIsXG4gIGRhdGFUYWJsZUJnVG90YWw6IFwiI0ZCRkJGQlwiLFxuICBkYXRhVGFibGVCb3JkZXJIZWFkZXI6IFwiI0QxRDNENFwiLFxuICBkYXRhVGFibGVCb3JkZXJDZWxsOiBcIiNGNUY1RjVcIixcbiAgZGF0YVRhYmxlU2Nyb2xsQXJyb3c6IFwiIzk3OTk5QlwiLFxuICBkYXRhVGFibGVTY3JvbGxCZ1ByZXNzZWRBcnJvdzogXCIjRUFFQkVCXCIsXG4gIGRhdGFUYWJsZUxvYWRlckJnOiBcIiNFREYzRjdcIixcbiAgZGF0YVRhYmxlTG9hZGVyR3JhZGllbnQ6IFwiI0ZDRkRGRlwiXG59LCBJQSA9IHtcbiAgc2Nyb2xsQmdEZWZhdWx0OiBcIiNEMUQzRDRcIixcbiAgc2Nyb2xsQmdIb3ZlcjogXCIjQTdBN0E3XCIsXG4gIHNjcm9sbEJnUHJlc3NlZDogXCIjNkU3MTczXCIsXG4gIHNjcm9sbEJnUHJpbWFyeTogXCIjRjVGNUY1XCJcbn0sIERBID0ge1xuICBzbGlkZXJCZ0RlZmF1bHQ6IFwiI0VBRUJFQlwiXG59LCBIQSA9IHtcbiAgbGlzdFRleHRMb3dlbXBoYXNpczogXCIjNkU3MTczXCJcbn0sIFZBID0ge1xuICBjYWxlbmRhckJsb2NrQmdEaXNhYmxlZDogXCIjRkJGQkZCXCJcbn0sIFBBID0ge1xuICByZWRPcmFuZ2U6IChlKSA9PiBgbGluZWFyLWdyYWRpZW50KHRvICR7ZX0sICR7SnQuY2hhcnRQaWVCZzdBY3RpdmV9IDAlLCAke0p0LmNoYXJ0UGllQmc2QWN0aXZlfSAxMDAlKWAsXG4gIHB1cnBsZVBpbms6IChlKSA9PiBgbGluZWFyLWdyYWRpZW50KHRvICR7ZX0sICR7SnQuY2hhcnRQaWVCZzNBY3RpdmV9IDAlLCAjQjUyQkIzIDEwMCUpYCxcbiAgYmx1ZUN5YW46IChlKSA9PiBgbGluZWFyLWdyYWRpZW50KHRvICR7ZX0sICR7UG8uYmdUZXJ0aWFyeX0gMCUsICR7UG8uYmdIb3ZlclNlY29uZGFyeX0gMTAwJSlgLFxuICBncmVlbkxpbWU6IChlKSA9PiBgbGluZWFyLWdyYWRpZW50KHRvICR7ZX0sICR7UG8uYmdTdWNjZXNzUHJpbWFyeX0gMCUsICAjMTlCMzdGIDEwMCUpYCxcbiAgb3JhbmdlQ2hlcm9rZWU6IChlKSA9PiBgbGluZWFyLWdyYWRpZW50KHRvICR7ZX0sICR7SnQuY2hhcnRQaWVCZzZBY3RpdmV9IDAlLCAke1BvLmJnV2FybmluZ1ByaW1hcnl9IDEwMCUpYCxcbiAgcGlua0xhdmVuZGVyUGluazogKGUpID0+IGBsaW5lYXItZ3JhZGllbnQodG8gJHtlfSwgJHtKdC5jaGFydFBpZUJnNEFjdGl2ZX0gMCUsICR7SnQuY2hhcnRQaWVCZzRBY3RpdmV9IDEwMCUpYFxufSwgcnIgPSB7XG4gIGJvcmRlcjogbUEsXG4gIHRleHRJY29uOiBMQSxcbiAgbGlzdDogSEEsXG4gIGJ1dHRvbkJhY2tnb3VuZDogeUEsXG4gIGJ1dHRvbkJvcmRlcjogd0EsXG4gIHRvcEJhcjogV0EsXG4gIGZpZWxkOiBSQSxcbiAgdGFiOiBCQSxcbiAgYWN0aW9uQnV0dG9uOiBTQSxcbiAgZmlsdGVyYm94Qm9yZGVyOiBFQSxcbiAgZmlsdGVyYm94QmFja2dyb3VuZDoga0EsXG4gIHRvZ2dsZVN3aXRjaDogTkEsXG4gIGRhdGFUYWJsZTogVEEsXG4gIHNjcm9sbDogSUEsXG4gIHNsaWRlcjogREEsXG4gIGRhdGFWaXN1YWxpemF0aW9uTGVnZW5kOiB2QSxcbiAgZGF0YVZpc3VhbGl6YXRpb25NZXRyaWNzOiBxQSxcbiAgZGF0YVZpc3VhbGl6YXRpb25DaGFydDogSnQsXG4gIGNhbGVuZGFyOiBWQSxcbiAgZ3JhZGllbnRzOiBQQSxcbiAgYmFja2dyb3VuZHM6IFBvLFxuICBidXR0b25UZXh0OiB4QVxufTtcbnV0YFxuICAwJSB7IG9wYWNpdHk6IDA7IH1cbiAgMTAwJSB7IG9wYWNpdHk6IDE7IH1cbmA7XG5jb25zdCBGbyA9IHtcbiAgYmdQcmltYXJ5OiBcIiMyNzI3MzNcIixcbiAgYmdTZWNvbmRhcnk6IFwiIzIxMjAyQlwiLFxuICBiZ1RlcnRpYXJ5OiBcIiM2OEEzQkJcIixcbiAgYmdQcmVzc2VkOiBcIiM2OEEzQkJcIixcbiAgYmdSZWFkT25seTogXCIjMUExQTM5XCIsXG4gIGJnU2VsZWN0ZWQ6IFwiIzQxM0U1Q1wiLFxuICBiZ0hvdmVyUHJpbWFyeTogXCIjMzAzMDNEXCIsXG4gIGJnSG92ZXJTZWNvbmRhcnk6IFwiIzY4QTNCQlwiLFxuICBiZ0Rpc2FibGVkUHJpbWFyeTogXCIjNEI0QjVDXCIsXG4gIGJnRGlzYWJsZWRTZWNvbmRhcnk6IFwiIzYyNjI3NVwiLFxuICBiZ0luZm9ybWF0aW9uYWxQcmltYXJ5OiBcIiM1QkI1RkZcIixcbiAgYmdJbmZvcm1hdGlvbmFsU2Vjb25kYXJ5OiBcIiMxODIyMjZcIixcbiAgYmdTdWNjZXNzUHJpbWFyeTogXCIjMkZDMjk0XCIsXG4gIGJnU3VjY2Vzc1NlY29uZGFyeTogXCIjMUEyNDFGXCIsXG4gIGJnV2FybmluZ1ByaW1hcnk6IFwiI0UwOEI0RlwiLFxuICBiZ1dhcm5pbmdTZWNvbmRhcnk6IFwiIzI2MjIxQ1wiLFxuICBiZ0Vycm9yUHJpbWFyeTogXCIjRkI2NjZEXCIsXG4gIGJnRXJyb3JTZWNvbmRhcnk6IFwiIzI5MTgxQVwiLFxuICBiZ1RyYW5zcGFyZW5jeVByaW1hcnk6IFwiIzc2NzY4QVwiLFxuICBiZ1RyYW5zcGFyZW5jeUhvdmVyOiBcIiMyNzI3MzNcIixcbiAgYmdUcmFuc3BhcmVuY3lQcmVzc2VkOiBcIiMzOTM5NDdcIixcbiAgYmxhY2tPdmVybGF5OiBcIiMyMDIwMkNcIlxufSwgRkEgPSB7XG4gIGJvcmRlclByaW1hcnk6IFwiIzM5Mzk0N1wiLFxuICBib3JkZXJTZWNvbmRhcnk6IFwiIzY4QTNCQlwiLFxuICBib3JkZXJQcmVzc2VkOiBcIiM2OEEzQkJcIixcbiAgYm9yZGVyVGVydGlhcnk6IFwiIzM5Mzk0N1wiLFxuICBib3JkZXJBbHRlcm5hdGl2ZTogXCIjMjcyNzMzXCIsXG4gIGJvcmRlckVycm9yOiBcIiNGQjY2NkRcIixcbiAgYm9yZGVyRm9jdXNlZDogXCIjNUJCNUZGXCIsXG4gIGJvcmRlckhvdmVyOiBcIiM2OEEzQkJcIixcbiAgYm9yZGVyRGlzYWJsZWRPbmJnOiBcIiM3Njc2OEFcIixcbiAgYm9yZGVyUmVhZG9ubHk6IFwiIzFBMUEzOVwiLFxuICBib3JkZXJUcmFuc3BhcmVudDogXCIjRkZGRkZGXCJcbn0sIFhBID0ge1xuICB0ZXh0UHJpbWFyeTogXCIjRkZGRkZGXCIsXG4gIHRleHRTZWNvbmRhcnk6IFwiIzY4QTNCQlwiLFxuICB0ZXh0VGVydGlhcnk6IFwiIzIwMjAyQ1wiLFxuICB0ZXh0SG92ZXI6IFwiIzY4QTNCQlwiLFxuICB0ZXh0UHJlc3NlZDogXCIjNjhBM0JCXCIsXG4gIHRleHRIaWdoZW1waGFzaXM6IFwiI0YwRjBGNVwiLFxuICB0ZXh0Qm9keTogXCIjRDhEOEU1XCIsXG4gIHRleHRNZWRpdW1lbXBoYXNpczogXCIjRDhEOEU1XCIsXG4gIHRleHRMb3dlbXBoYXNpczogXCIjQkNCQ0NDXCIsXG4gIHRleHREaXNhYmxlZE9uYmc6IFwiIzc2NzY4QVwiLFxuICB0ZXh0RGlzYWJsZWROb2JnOiBcIiM2MjYyNzVcIixcbiAgdGV4dEVycm9yOiBcIiNGQjY2NkRcIixcbiAgdGV4dFN1Y2Nlc3M6IFwiIzJGQzI5NFwiLFxuICB0ZXh0V2FybmluZzogXCIjRTA4QjRGXCIsXG4gIHRleHRJbmZvcm1hdGlvbmFsOiBcIiM1QkI1RkZcIixcbiAgdGV4dFJlYWRvbmx5OiBcIiMxQTFBMzlcIixcbiAgdGV4dERpc2FibGVkOiBcIiNBNkE2QUJcIlxufSwgVUEgPSB7XG4gIC8vIGxlZ2VuZEJnQ3lhbjogJyMwMDlGRTMnLFxuICAvLyBsZWdlbmRCZ1B1cnBsZTogJyM4MzFGODInLFxuICAvLyBsZWdlbmRCZ1Bpbms6ICcjRUM2MTlGJyxcbiAgLy8gbGVnZW5kQmdSZWQ6ICcjRkYwMDAwJyxcbiAgLy8gbGVnZW5kQmdPcmFuZ2U6ICcjRjM5MjAwJyxcbiAgLy8gbmV3XG4gIGxlZ2VuZEJnMTogXCIjNjhBM0JCXCIsXG4gIGxlZ2VuZEJnMjogXCIjQjNFOEU1XCIsXG4gIGxlZ2VuZEJnMzogXCIjRjhEQTdGXCIsXG4gIGxlZ2VuZEJnNDogXCIjNzVEOThGXCIsXG4gIGxlZ2VuZEJnNTogXCIjRkRDQzhBXCIsXG4gIGxlZ2VuZEJnNjogXCIjRjQ5MkE0XCIsXG4gIGxlZ2VuZEJnODogXCIjNzVEOThGXCIsXG4gIGxlZ2VuZEJvcmRlcjogXCIjRjBGMEY1XCJcbn0sIFlBID0ge1xuICBtZXRyaWNzQmdIb3ZlcjogXCIjMzIzMDQ1XCIsXG4gIG1ldHJpY3NCZ1VwOiBcIiM3NUQ5OEZcIixcbiAgbWV0cmljc0JnRG93bjogXCIjRjQ5MkE0XCJcbn0sIF90ID0ge1xuICBjaGFydEJ1YmJsZUJnRGVmYXVsdDogXCIjMjEyMDJCXCIsXG4gIC8vIGNoYXJ0QmdCbHVlQWN0aXZlOiAnIzMxMjc4MycsXG4gIC8vIGNoYXJ0QmdCbHVlSW5hY3RpdmU6ICcjQ0JDOUUwJyxcbiAgLy8gY2hhcnRQaWVCZ0N5YW5BY3RpdmU6ICcjMDA5RkUzJyxcbiAgLy8gY2hhcnRQaWVCZ0N5YW5JbmFjdGl2ZTogJyNCRkU3RjgnLFxuICAvLyBjaGFydFBpZUJnUHVycGxlQWN0aXZlOiAnIzgzMUY4MicsXG4gIC8vIGNoYXJ0UGllQmdQdXJwbGVJbmFjdGl2ZTogJyNFMEM3RTAnLFxuICAvLyBjaGFydFBpZUJnUGlua0FjdGl2ZTogJyNFQzYxOUYnLFxuICAvLyBjaGFydFBpZUJnUGlua0luYWN0aXZlOiAnI0ZBRDdFNycsXG4gIC8vIGNoYXJ0UGllQmdHcmVlbkFjdGl2ZTogJyMwMDk2NDAnLFxuICAvLyBjaGFydFBpZUJnR3JlZW5JbmFjdGl2ZTogJyNCRkU1Q0YnLFxuICAvLyBjaGFydFBpZUJnT3JhbmdlQWN0aXZlOiAnI0YzOTIwMCcsXG4gIC8vIGNoYXJ0UGllQmdPcmFuZ2VJbmFjdGl2ZTogJyNGQ0U0QkYnLFxuICAvLyBjaGFydFBpZUJnUmVkQWN0aXZlOiAnI0ZGMDAwMCcsXG4gIC8vIGNoYXJ0UGllQmdSZWRJbmFjdGl2ZTogJyNGRkJGQkYnLFxuICAvL25ld1xuICBjaGFydEJnSG92ZXI6IFwiIzIxMjAyQlwiLFxuICBjaGFydEJnMUFjdGl2ZTogXCIjNjhBM0JCXCIsXG4gIGNoYXJ0QmcxSW5BY3RpdmU6IFwiIzAwMzQ1M1wiLFxuICBjaGFydFBpZUJnMkFjdGl2ZTogXCIjQjNFOEU1XCIsXG4gIGNoYXJ0UGllQmcySW5BY3RpdmU6IFwiIzAwNDc0NFwiLFxuICBjaGFydFBpZUJnM0FjdGl2ZTogXCIjRjhEQTdGXCIsXG4gIGNoYXJ0UGllQmczSW5BY3RpdmU6IFwiIzQ5MzMwMFwiLFxuICBjaGFydFBpZUJnNEFjdGl2ZTogXCIjNzVEOThGXCIsXG4gIGNoYXJ0UGllQmc0SW5BY3RpdmU6IFwiIzIzNDYyRFwiLFxuICBjaGFydFBpZUJnNUFjdGl2ZTogXCIjRkRDQzhBXCIsXG4gIGNoYXJ0UGllQmc1SW5BY3RpdmU6IFwiIzU5NDExQ1wiLFxuICBjaGFydFBpZUJnNkFjdGl2ZTogXCIjRjQ5MkE0XCIsXG4gIGNoYXJ0UGllQmc2SW5BY3RpdmU6IFwiIzU2MUMxQlwiLFxuICBjaGFydFBpZUJnN0FjdGl2ZTogXCIjRTVGQTZGXCIsXG4gIGNoYXJ0UGllQmc3SW5BY3RpdmU6IFwiIzQ2NEQyNlwiXG59LCBHQSA9IHtcbiAgYnV0dG9uQmdQcmltYXJ5RGVmYXVsdDogXCIjNjhBM0JCXCIsXG4gIGJ1dHRvbkJnUHJpbWFyeUhvdmVyOiBcIiM4QkQzRTJcIixcbiAgYnV0dG9uQmdQcmltYXJ5UHJlc3NlZDogXCIjNzY5QUJCXCIsXG4gIGJ1dHRvbkJnU2Vjb25kYXJ5RGVmYXVsdDogXCIjMzIzMDQ1XCIsXG4gIGJ1dHRvbkJnU2Vjb25kYXJ5SG92ZXI6IFwiIzhCRDNFMlwiLFxuICBidXR0b25CZ1NlY29uZGFyeVByZXNzZWQ6IFwiIzc2OUFCQlwiLFxuICBidXR0b25CZ1RlcnRpYXJ5OiBcIiMzMjMwNDVcIixcbiAgLy9uZXdcbiAgYnV0dG9uQmdUZXJ0aWFyeUhvdmVyOiBcIiMzMjMwNDVcIixcbiAgYnV0dG9uQmdUZXJ0aWFyeVByZXNzZWQ6IFwiIzMyMzA0NVwiLFxuICAvL25ld1xuICBidXR0b25CZ1RleHRsaW5rSG92ZXI6IFwiIzQxM0U1Q1wiXG59LCBRQSA9IHtcbiAgYnV0dG9uQm9yZGVyU2Vjb25kYXJ5RGVmYXVsdDogXCIjNjhBM0JCXCIsXG4gIGJ1dHRvbkJvcmRlclRlcnRpYXJ5RGVmYXVsdDogXCIjNzY3NjhBXCIsXG4gIGJ1dHRvbkJvcmRlclRlcnRpYXJ5SG92ZXI6IFwiI0JDQkNDQ1wiLFxuICBidXR0b25Cb3JkZXJUZXJ0aWFyeVByZXNzZWQ6IFwiIzc2OUFCQlwiXG59LCBaQSA9IHtcbiAgYnV0dG9uVGV4dFByaW1hcnk6IFwiIzIwMjAyQ1wiLFxuICBidXR0b25UZXh0UHJpbWFyeVByZXNzZWQ6IFwiIzIwMjAyQ1wiLFxuICBidXR0b25UZXh0U2Vjb25kYXJ5RGVmYXVsdDogXCIjNjhBM0JCXCIsXG4gIGJ1dHRvblRleHRTZWNvbmRhcnlIb3ZlcjogXCIjMjAyMDJDXCIsXG4gIGJ1dHRvblRleHRTZWNvbmRhcnlQcmVzc2VkOiBcIiMyMDIwMkNcIixcbiAgYnV0dG9uVGV4dFNlY29uZGFyeUZvY3VzZWQ6IFwiIzIwMjAyQ1wiLFxuICBidXR0b25UZXh0VGVydGlhcnk6IFwiI0ZGRkZGRlwiLFxuICBidXR0b25UZXh0bGlua0RlZmF1bHQ6IFwiIzY4QTNCQlwiLFxuICBidXR0b25UZXh0bGlua0hvdmVyOiBcIiM4QkQzRTJcIixcbiAgYnV0dG9uVGV4dGxpbmtQcmVzc2VkOiBcIiM3NjlBQkJcIlxufSwgakEgPSB7XG4gIHRvcEJhckJnUHJpbWFyeTogXCIjMzAzMDNEXCIsXG4gIHRvcEJhckJnU2Vjb25kYXJ5OiBcIiMyNzI3MzNcIixcbiAgdG9wQmFyQmdUZXJ0aWFyeTogXCIjRkZGRkZGXCIsXG4gIHRvcEJhclRleHRQcmltYXJ5OiBcIiNGRkZGRkZcIixcbiAgdG9wQmFyVGV4dFNlY29uZGFyeTogXCIjMzAzMDNEXCJcbn0sIEtBID0ge1xuICBmaWVsZEJnRGVmYXVsdDogXCIjMzIzMDQ1XCIsXG4gIGZpZWxkQmdIb3ZlcjogXCIjNDEzRTVDXCIsXG4gIGZpZWxkVGV4dFBsYWNlaG9sZGVyOiBcIiM3Njc2OEFcIixcbiAgZmllbGRUZXh0U3VwcG9ydDogXCIjNEI0QjVDXCIsXG4gIGZpZWxkQm9yZGVyQWN0aXZlOiBcIiMzOTM5NDdcIlxufSwgSkEgPSB7XG4gIHRhYkluZGljYXRvcjogXCIjQjNFOEU1XCIsXG4gIC8vbmV3XG4gIHRhYkJvcmRlcjogXCIjMzAzMDNEXCJcbn0sIF9BID0ge1xuICBhY3Rpb25CdXR0b25CZ0hvdmVyRHJvcGRvd246IFwiIzFGMUYyOVwiLFxuICBhY3Rpb25CdXR0b25CZ1ByZXNzZWREcm9wZG93bjogXCIjNjI2Mjc1XCIsXG4gIGFjdGlvbkJ1dHRvbkJnUHJlc3NlZEJ1dHRvbjogXCIjNjI2Mjc1XCIsXG4gIGFjdGlvbkJ1dHRvbkJnSG92ZXJCdXR0b246IFwiIzM5Mzk0N1wiXG59LCAkQSA9IHtcbiAgZmlsdGVyYm94QnV0dG9uQm9yZGVySG92ZXI6IFwiIzRCNEI1Q1wiLFxuICBmaWx0ZXJib3hCdXR0b25Cb3JkZXJEZWZhdWx0OiBcIiMzOTM5NDdcIlxufSwgZXUgPSB7XG4gIGZpbHRlcmJveEJ1dHRvbkJnOiBcIiMzMjMwNDVcIixcbiAgZmlsdGVyYm94Qmc6IFwiIzI3MjczM1wiXG59LCB0dSA9IHtcbiAgdG9nZ2xlQmdJbmFjdGl2ZURlZmF1bHQ6IFwiIzFGMUYyOVwiLFxuICBzd2l0Y2hUZXh0UmVhZG9ubHlBY3RpdmU6IFwiI0JDQkNDQ1wiXG59LCBvdSA9IHtcbiAgZGF0YVRhYmxlQmdQcmltYXJ5OiBcIiMyNzI3MzNcIixcbiAgZGF0YVRhYmxlQmdIZWFkZXI6IFwiIzMyMzA0NVwiLFxuICBkYXRhVGFibGVCZ0ZpbHRlcjogXCIjMjcyNzMzXCIsXG4gIGRhdGFUYWJsZUJnU2Vjb25kYXJ5OiBcIiM3NTFEMUNcIixcbiAgZGF0YVRhYmxlQmdUZXJ0aWFyeTogXCIjNzk1NTFEXCIsXG4gIGRhdGFUYWJsZUJnVG90YWw6IFwiIzFGMUYyOVwiLFxuICBkYXRhVGFibGVCb3JkZXJIZWFkZXI6IFwiIzM5Mzk0N1wiLFxuICBkYXRhVGFibGVCb3JkZXJDZWxsOiBcIiMzOTM5NDdcIixcbiAgZGF0YVRhYmxlU2Nyb2xsQXJyb3c6IFwiIzhCOEI5RVwiLFxuICBkYXRhVGFibGVTY3JvbGxCZ1ByZXNzZWRBcnJvdzogXCIjNzY3NjhBXCIsXG4gIGRhdGFUYWJsZUxvYWRlckJnOiBcIiMzMjMwNDVcIixcbiAgZGF0YVRhYmxlTG9hZGVyR3JhZGllbnQ6IFwiIzQxM0U1Q1wiXG59LCBydSA9IHtcbiAgc2Nyb2xsQmdEZWZhdWx0OiBcIiMzOTM5NDdcIixcbiAgc2Nyb2xsQmdIb3ZlcjogXCIjNjI2Mjc1XCIsXG4gIHNjcm9sbEJnUHJlc3NlZDogXCIjOEI4QjlFXCIsXG4gIHNjcm9sbEJnUHJpbWFyeTogXCIjMUYxRjI5XCJcbn0sIG51ID0ge1xuICBzbGlkZXJCZ0RlZmF1bHQ6IFwiIzMwMzAzRFwiXG59LCBpdSA9IHtcbiAgbGlzdFRleHRMb3dlbXBoYXNpczogXCIjRDhEOEU1XCJcbn0sIGF1ID0ge1xuICBjYWxlbmRhckJsb2NrQmdEaXNhYmxlZDogXCIjMjcyNzMzXCJcbn0sIHN1ID0ge1xuICByZWRPcmFuZ2U6IChlKSA9PiBgbGluZWFyLWdyYWRpZW50KHRvICR7ZX0sICR7X3QuY2hhcnRQaWVCZzdBY3RpdmV9IDAlLCAke190LmNoYXJ0UGllQmc2QWN0aXZlfSAxMDAlKWAsXG4gIHB1cnBsZVBpbms6IChlKSA9PiBgbGluZWFyLWdyYWRpZW50KHRvICR7ZX0sICR7X3QuY2hhcnRQaWVCZzNBY3RpdmV9IDAlLCAjQjUyQkIzIDEwMCUpYCxcbiAgYmx1ZUN5YW46IChlKSA9PiBgbGluZWFyLWdyYWRpZW50KHRvICR7ZX0sICR7Rm8uYmdUZXJ0aWFyeX0gMCUsICR7Rm8uYmdIb3ZlclNlY29uZGFyeX0gMTAwJSlgLFxuICBncmVlbkxpbWU6IChlKSA9PiBgbGluZWFyLWdyYWRpZW50KHRvICR7ZX0sICR7Rm8uYmdTdWNjZXNzUHJpbWFyeX0gMCUsICAjMTlCMzdGIDEwMCUpYCxcbiAgb3JhbmdlQ2hlcm9rZWU6IChlKSA9PiBgbGluZWFyLWdyYWRpZW50KHRvICR7ZX0sICR7X3QuY2hhcnRQaWVCZzZBY3RpdmV9IDAlLCAke0ZvLmJnV2FybmluZ1ByaW1hcnl9IDEwMCUpYCxcbiAgcGlua0xhdmVuZGVyUGluazogKGUpID0+IGBsaW5lYXItZ3JhZGllbnQodG8gJHtlfSwgJHtfdC5jaGFydFBpZUJnNEFjdGl2ZX0gMCUsICR7X3QuY2hhcnRQaWVCZzRBY3RpdmV9IDEwMCUpYFxufSwgbzQgPSB7XG4gIGJvcmRlcjogRkEsXG4gIHRleHRJY29uOiBYQSxcbiAgYnV0dG9uQmFja2dvdW5kOiBHQSxcbiAgYnV0dG9uQm9yZGVyOiBRQSxcbiAgdG9wQmFyOiBqQSxcbiAgZmllbGQ6IEtBLFxuICB0YWI6IEpBLFxuICBhY3Rpb25CdXR0b246IF9BLFxuICBmaWx0ZXJib3hCb3JkZXI6ICRBLFxuICBmaWx0ZXJib3hCYWNrZ3JvdW5kOiBldSxcbiAgdG9nZ2xlU3dpdGNoOiB0dSxcbiAgZGF0YVRhYmxlOiBvdSxcbiAgc2Nyb2xsOiBydSxcbiAgc2xpZGVyOiBudSxcbiAgZGF0YVZpc3VhbGl6YXRpb25MZWdlbmQ6IFVBLFxuICBkYXRhVmlzdWFsaXphdGlvbk1ldHJpY3M6IFlBLFxuICBkYXRhVmlzdWFsaXphdGlvbkNoYXJ0OiBfdCxcbiAgbGlzdDogaXUsXG4gIGNhbGVuZGFyOiBhdSxcbiAgZ3JhZGllbnRzOiBzdSxcbiAgYmFja2dyb3VuZHM6IEZvLFxuICBidXR0b25UZXh0OiBaQVxufTtcbnV0YFxuICAwJSB7IG9wYWNpdHk6IDA7IH1cbiAgMTAwJSB7IG9wYWNpdHk6IDE7IH1cbmA7XG5jb25zdCBybyA9ICgpID0+IHtcbiAgY29uc3QgW2UsIHRdID0gVDEoXCJjc2NCbHVlTGlnaHRcIik7XG4gIHJldHVybiBQMSgoKSA9PiB7XG4gICAgbGV0IG4gPSBsb2NhbFN0b3JhZ2UuZ2V0SXRlbShcIlVJS2l0OlRoZW1lVmFsdWVcIik7XG4gICAgbiAmJiB0KG4pO1xuICB9LCBbbG9jYWxTdG9yYWdlLmdldEl0ZW0oXCJVSUtpdDpUaGVtZVZhbHVlXCIpXSksIF8xKCgpID0+IHtcbiAgICBsZXQgbiA9IHtcbiAgICAgIC4uLlRuLFxuICAgICAgY29sb3JzOiB7XG4gICAgICAgIC4uLnYyLFxuICAgICAgICAuLi5ycixcbiAgICAgICAgYmFja2dyb3VuZHM6IHtcbiAgICAgICAgICAuLi52Mi5iYWNrZ3JvdW5kcyxcbiAgICAgICAgICAuLi5yci5iYWNrZ3JvdW5kc1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSwgciA9IHtcbiAgICAgIC4uLlRuLFxuICAgICAgY29sb3JzOiB7XG4gICAgICAgIC4uLnYyLFxuICAgICAgICAuLi5vNCxcbiAgICAgICAgYmFja2dyb3VuZHM6IHtcbiAgICAgICAgICAuLi52Mi5iYWNrZ3JvdW5kcyxcbiAgICAgICAgICAuLi5vNC5iYWNrZ3JvdW5kc1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSwgaSA9IG47XG4gICAgcmV0dXJuIGUgPT0gXCJjc2NCbHVlTGlnaHRcIiA/IGkgPSBuIDogZSA9PSBcImNzY0JsdWVEYXJrXCIgPyBpID0gciA6IHtcbiAgICAgIC4uLlRuLFxuICAgICAgLi4uaVxuICAgIH07XG4gIH0sIFtlXSkoKTtcbn07XG52YXIgRDUgPSB0eXBlb2YgZ2xvYmFsVGhpcyA8IFwidVwiID8gZ2xvYmFsVGhpcyA6IHR5cGVvZiB3aW5kb3cgPCBcInVcIiA/IHdpbmRvdyA6IHR5cGVvZiBnbG9iYWwgPCBcInVcIiA/IGdsb2JhbCA6IHR5cGVvZiBzZWxmIDwgXCJ1XCIgPyBzZWxmIDoge307XG5mdW5jdGlvbiBRMihlKSB7XG4gIHJldHVybiBlICYmIGUuX19lc01vZHVsZSAmJiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoZSwgXCJkZWZhdWx0XCIpID8gZS5kZWZhdWx0IDogZTtcbn1cbmZ1bmN0aW9uIHpsKGUpIHtcbiAgaWYgKGUuX19lc01vZHVsZSlcbiAgICByZXR1cm4gZTtcbiAgdmFyIHQgPSBlLmRlZmF1bHQ7XG4gIGlmICh0eXBlb2YgdCA9PSBcImZ1bmN0aW9uXCIpIHtcbiAgICB2YXIgbyA9IGZ1bmN0aW9uIG4oKSB7XG4gICAgICByZXR1cm4gdGhpcyBpbnN0YW5jZW9mIG4gPyBSZWZsZWN0LmNvbnN0cnVjdCh0LCBhcmd1bWVudHMsIHRoaXMuY29uc3RydWN0b3IpIDogdC5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICAgIH07XG4gICAgby5wcm90b3R5cGUgPSB0LnByb3RvdHlwZTtcbiAgfSBlbHNlXG4gICAgbyA9IHt9O1xuICByZXR1cm4gT2JqZWN0LmRlZmluZVByb3BlcnR5KG8sIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiAhMCB9KSwgT2JqZWN0LmtleXMoZSkuZm9yRWFjaChmdW5jdGlvbihuKSB7XG4gICAgdmFyIHIgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGUsIG4pO1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvLCBuLCByLmdldCA/IHIgOiB7XG4gICAgICBlbnVtZXJhYmxlOiAhMCxcbiAgICAgIGdldDogZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiBlW25dO1xuICAgICAgfVxuICAgIH0pO1xuICB9KSwgbztcbn1cbnZhciBTYSA9IHsgZXhwb3J0czoge30gfSwgd28gPSB7fTtcbi8qKlxuICogQGxpY2Vuc2UgUmVhY3RcbiAqIHJlYWN0LWpzeC1ydW50aW1lLnByb2R1Y3Rpb24ubWluLmpzXG4gKlxuICogQ29weXJpZ2h0IChjKSBGYWNlYm9vaywgSW5jLiBhbmQgaXRzIGFmZmlsaWF0ZXMuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuXG4gKi9cbnZhciBsODtcbmZ1bmN0aW9uIGN1KCkge1xuICBpZiAobDgpXG4gICAgcmV0dXJuIHdvO1xuICBsOCA9IDE7XG4gIHZhciBlID0gbTEsIHQgPSBTeW1ib2wuZm9yKFwicmVhY3QuZWxlbWVudFwiKSwgbyA9IFN5bWJvbC5mb3IoXCJyZWFjdC5mcmFnbWVudFwiKSwgbiA9IE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHksIHIgPSBlLl9fU0VDUkVUX0lOVEVSTkFMU19ET19OT1RfVVNFX09SX1lPVV9XSUxMX0JFX0ZJUkVELlJlYWN0Q3VycmVudE93bmVyLCBpID0geyBrZXk6ICEwLCByZWY6ICEwLCBfX3NlbGY6ICEwLCBfX3NvdXJjZTogITAgfTtcbiAgZnVuY3Rpb24gYShzLCBsLCBwKSB7XG4gICAgdmFyIGQsIGIgPSB7fSwgTSA9IG51bGwsIHUgPSBudWxsO1xuICAgIHAgIT09IHZvaWQgMCAmJiAoTSA9IFwiXCIgKyBwKSwgbC5rZXkgIT09IHZvaWQgMCAmJiAoTSA9IFwiXCIgKyBsLmtleSksIGwucmVmICE9PSB2b2lkIDAgJiYgKHUgPSBsLnJlZik7XG4gICAgZm9yIChkIGluIGwpXG4gICAgICBuLmNhbGwobCwgZCkgJiYgIWkuaGFzT3duUHJvcGVydHkoZCkgJiYgKGJbZF0gPSBsW2RdKTtcbiAgICBpZiAocyAmJiBzLmRlZmF1bHRQcm9wcylcbiAgICAgIGZvciAoZCBpbiBsID0gcy5kZWZhdWx0UHJvcHMsIGwpXG4gICAgICAgIGJbZF0gPT09IHZvaWQgMCAmJiAoYltkXSA9IGxbZF0pO1xuICAgIHJldHVybiB7ICQkdHlwZW9mOiB0LCB0eXBlOiBzLCBrZXk6IE0sIHJlZjogdSwgcHJvcHM6IGIsIF9vd25lcjogci5jdXJyZW50IH07XG4gIH1cbiAgcmV0dXJuIHdvLkZyYWdtZW50ID0gbywgd28uanN4ID0gYSwgd28uanN4cyA9IGEsIHdvO1xufVxudmFyIHhvID0ge307XG4vKipcbiAqIEBsaWNlbnNlIFJlYWN0XG4gKiByZWFjdC1qc3gtcnVudGltZS5kZXZlbG9wbWVudC5qc1xuICpcbiAqIENvcHlyaWdodCAoYykgRmFjZWJvb2ssIEluYy4gYW5kIGl0cyBhZmZpbGlhdGVzLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLlxuICovXG52YXIgcDg7XG5mdW5jdGlvbiBsdSgpIHtcbiAgcmV0dXJuIHA4IHx8IChwOCA9IDEsIHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIiAmJiBmdW5jdGlvbigpIHtcbiAgICB2YXIgZSA9IG0xLCB0ID0gU3ltYm9sLmZvcihcInJlYWN0LmVsZW1lbnRcIiksIG8gPSBTeW1ib2wuZm9yKFwicmVhY3QucG9ydGFsXCIpLCBuID0gU3ltYm9sLmZvcihcInJlYWN0LmZyYWdtZW50XCIpLCByID0gU3ltYm9sLmZvcihcInJlYWN0LnN0cmljdF9tb2RlXCIpLCBpID0gU3ltYm9sLmZvcihcInJlYWN0LnByb2ZpbGVyXCIpLCBhID0gU3ltYm9sLmZvcihcInJlYWN0LnByb3ZpZGVyXCIpLCBzID0gU3ltYm9sLmZvcihcInJlYWN0LmNvbnRleHRcIiksIGwgPSBTeW1ib2wuZm9yKFwicmVhY3QuZm9yd2FyZF9yZWZcIiksIHAgPSBTeW1ib2wuZm9yKFwicmVhY3Quc3VzcGVuc2VcIiksIGQgPSBTeW1ib2wuZm9yKFwicmVhY3Quc3VzcGVuc2VfbGlzdFwiKSwgYiA9IFN5bWJvbC5mb3IoXCJyZWFjdC5tZW1vXCIpLCBNID0gU3ltYm9sLmZvcihcInJlYWN0LmxhenlcIiksIHUgPSBTeW1ib2wuZm9yKFwicmVhY3Qub2Zmc2NyZWVuXCIpLCBBID0gU3ltYm9sLml0ZXJhdG9yLCB6ID0gXCJAQGl0ZXJhdG9yXCI7XG4gICAgZnVuY3Rpb24gZihPMSkge1xuICAgICAgaWYgKE8xID09PSBudWxsIHx8IHR5cGVvZiBPMSAhPSBcIm9iamVjdFwiKVxuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIHZhciBWMSA9IEEgJiYgTzFbQV0gfHwgTzFbel07XG4gICAgICByZXR1cm4gdHlwZW9mIFYxID09IFwiZnVuY3Rpb25cIiA/IFYxIDogbnVsbDtcbiAgICB9XG4gICAgdmFyIE8gPSBlLl9fU0VDUkVUX0lOVEVSTkFMU19ET19OT1RfVVNFX09SX1lPVV9XSUxMX0JFX0ZJUkVEO1xuICAgIGZ1bmN0aW9uIGgoTzEpIHtcbiAgICAgIHtcbiAgICAgICAgZm9yICh2YXIgVjEgPSBhcmd1bWVudHMubGVuZ3RoLCBHMSA9IG5ldyBBcnJheShWMSA+IDEgPyBWMSAtIDEgOiAwKSwgaTAgPSAxOyBpMCA8IFYxOyBpMCsrKVxuICAgICAgICAgIEcxW2kwIC0gMV0gPSBhcmd1bWVudHNbaTBdO1xuICAgICAgICBnKFwiZXJyb3JcIiwgTzEsIEcxKTtcbiAgICAgIH1cbiAgICB9XG4gICAgZnVuY3Rpb24gZyhPMSwgVjEsIEcxKSB7XG4gICAgICB7XG4gICAgICAgIHZhciBpMCA9IE8uUmVhY3REZWJ1Z0N1cnJlbnRGcmFtZSwgYjAgPSBpMC5nZXRTdGFja0FkZGVuZHVtKCk7XG4gICAgICAgIGIwICE9PSBcIlwiICYmIChWMSArPSBcIiVzXCIsIEcxID0gRzEuY29uY2F0KFtiMF0pKTtcbiAgICAgICAgdmFyIGcwID0gRzEubWFwKGZ1bmN0aW9uKHUwKSB7XG4gICAgICAgICAgcmV0dXJuIFN0cmluZyh1MCk7XG4gICAgICAgIH0pO1xuICAgICAgICBnMC51bnNoaWZ0KFwiV2FybmluZzogXCIgKyBWMSksIEZ1bmN0aW9uLnByb3RvdHlwZS5hcHBseS5jYWxsKGNvbnNvbGVbTzFdLCBjb25zb2xlLCBnMCk7XG4gICAgICB9XG4gICAgfVxuICAgIHZhciB2ID0gITEsIEwgPSAhMSwgeSA9ICExLCBCID0gITEsIFggPSAhMSwgRjtcbiAgICBGID0gU3ltYm9sLmZvcihcInJlYWN0Lm1vZHVsZS5yZWZlcmVuY2VcIik7XG4gICAgZnVuY3Rpb24gVChPMSkge1xuICAgICAgcmV0dXJuICEhKHR5cGVvZiBPMSA9PSBcInN0cmluZ1wiIHx8IHR5cGVvZiBPMSA9PSBcImZ1bmN0aW9uXCIgfHwgTzEgPT09IG4gfHwgTzEgPT09IGkgfHwgWCB8fCBPMSA9PT0gciB8fCBPMSA9PT0gcCB8fCBPMSA9PT0gZCB8fCBCIHx8IE8xID09PSB1IHx8IHYgfHwgTCB8fCB5IHx8IHR5cGVvZiBPMSA9PSBcIm9iamVjdFwiICYmIE8xICE9PSBudWxsICYmIChPMS4kJHR5cGVvZiA9PT0gTSB8fCBPMS4kJHR5cGVvZiA9PT0gYiB8fCBPMS4kJHR5cGVvZiA9PT0gYSB8fCBPMS4kJHR5cGVvZiA9PT0gcyB8fCBPMS4kJHR5cGVvZiA9PT0gbCB8fCAvLyBUaGlzIG5lZWRzIHRvIGluY2x1ZGUgYWxsIHBvc3NpYmxlIG1vZHVsZSByZWZlcmVuY2Ugb2JqZWN0XG4gICAgICAvLyB0eXBlcyBzdXBwb3J0ZWQgYnkgYW55IEZsaWdodCBjb25maWd1cmF0aW9uIGFueXdoZXJlIHNpbmNlXG4gICAgICAvLyB3ZSBkb24ndCBrbm93IHdoaWNoIEZsaWdodCBidWlsZCB0aGlzIHdpbGwgZW5kIHVwIGJlaW5nIHVzZWRcbiAgICAgIC8vIHdpdGguXG4gICAgICBPMS4kJHR5cGVvZiA9PT0gRiB8fCBPMS5nZXRNb2R1bGVJZCAhPT0gdm9pZCAwKSk7XG4gICAgfVxuICAgIGZ1bmN0aW9uIHcoTzEsIFYxLCBHMSkge1xuICAgICAgdmFyIGkwID0gTzEuZGlzcGxheU5hbWU7XG4gICAgICBpZiAoaTApXG4gICAgICAgIHJldHVybiBpMDtcbiAgICAgIHZhciBiMCA9IFYxLmRpc3BsYXlOYW1lIHx8IFYxLm5hbWUgfHwgXCJcIjtcbiAgICAgIHJldHVybiBiMCAhPT0gXCJcIiA/IEcxICsgXCIoXCIgKyBiMCArIFwiKVwiIDogRzE7XG4gICAgfVxuICAgIGZ1bmN0aW9uIEgoTzEpIHtcbiAgICAgIHJldHVybiBPMS5kaXNwbGF5TmFtZSB8fCBcIkNvbnRleHRcIjtcbiAgICB9XG4gICAgZnVuY3Rpb24gQyhPMSkge1xuICAgICAgaWYgKE8xID09IG51bGwpXG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgaWYgKHR5cGVvZiBPMS50YWcgPT0gXCJudW1iZXJcIiAmJiBoKFwiUmVjZWl2ZWQgYW4gdW5leHBlY3RlZCBvYmplY3QgaW4gZ2V0Q29tcG9uZW50TmFtZUZyb21UeXBlKCkuIFRoaXMgaXMgbGlrZWx5IGEgYnVnIGluIFJlYWN0LiBQbGVhc2UgZmlsZSBhbiBpc3N1ZS5cIiksIHR5cGVvZiBPMSA9PSBcImZ1bmN0aW9uXCIpXG4gICAgICAgIHJldHVybiBPMS5kaXNwbGF5TmFtZSB8fCBPMS5uYW1lIHx8IG51bGw7XG4gICAgICBpZiAodHlwZW9mIE8xID09IFwic3RyaW5nXCIpXG4gICAgICAgIHJldHVybiBPMTtcbiAgICAgIHN3aXRjaCAoTzEpIHtcbiAgICAgICAgY2FzZSBuOlxuICAgICAgICAgIHJldHVybiBcIkZyYWdtZW50XCI7XG4gICAgICAgIGNhc2UgbzpcbiAgICAgICAgICByZXR1cm4gXCJQb3J0YWxcIjtcbiAgICAgICAgY2FzZSBpOlxuICAgICAgICAgIHJldHVybiBcIlByb2ZpbGVyXCI7XG4gICAgICAgIGNhc2UgcjpcbiAgICAgICAgICByZXR1cm4gXCJTdHJpY3RNb2RlXCI7XG4gICAgICAgIGNhc2UgcDpcbiAgICAgICAgICByZXR1cm4gXCJTdXNwZW5zZVwiO1xuICAgICAgICBjYXNlIGQ6XG4gICAgICAgICAgcmV0dXJuIFwiU3VzcGVuc2VMaXN0XCI7XG4gICAgICB9XG4gICAgICBpZiAodHlwZW9mIE8xID09IFwib2JqZWN0XCIpXG4gICAgICAgIHN3aXRjaCAoTzEuJCR0eXBlb2YpIHtcbiAgICAgICAgICBjYXNlIHM6XG4gICAgICAgICAgICB2YXIgVjEgPSBPMTtcbiAgICAgICAgICAgIHJldHVybiBIKFYxKSArIFwiLkNvbnN1bWVyXCI7XG4gICAgICAgICAgY2FzZSBhOlxuICAgICAgICAgICAgdmFyIEcxID0gTzE7XG4gICAgICAgICAgICByZXR1cm4gSChHMS5fY29udGV4dCkgKyBcIi5Qcm92aWRlclwiO1xuICAgICAgICAgIGNhc2UgbDpcbiAgICAgICAgICAgIHJldHVybiB3KE8xLCBPMS5yZW5kZXIsIFwiRm9yd2FyZFJlZlwiKTtcbiAgICAgICAgICBjYXNlIGI6XG4gICAgICAgICAgICB2YXIgaTAgPSBPMS5kaXNwbGF5TmFtZSB8fCBudWxsO1xuICAgICAgICAgICAgcmV0dXJuIGkwICE9PSBudWxsID8gaTAgOiBDKE8xLnR5cGUpIHx8IFwiTWVtb1wiO1xuICAgICAgICAgIGNhc2UgTToge1xuICAgICAgICAgICAgdmFyIGIwID0gTzEsIGcwID0gYjAuX3BheWxvYWQsIHUwID0gYjAuX2luaXQ7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICByZXR1cm4gQyh1MChnMCkpO1xuICAgICAgICAgICAgfSBjYXRjaCB7XG4gICAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIHZhciBxID0gT2JqZWN0LmFzc2lnbiwgbSA9IDAsIGssIHgsIE4sIFYsIFIsIEksIGo7XG4gICAgZnVuY3Rpb24gVSgpIHtcbiAgICB9XG4gICAgVS5fX3JlYWN0RGlzYWJsZWRMb2cgPSAhMDtcbiAgICBmdW5jdGlvbiBfKCkge1xuICAgICAge1xuICAgICAgICBpZiAobSA9PT0gMCkge1xuICAgICAgICAgIGsgPSBjb25zb2xlLmxvZywgeCA9IGNvbnNvbGUuaW5mbywgTiA9IGNvbnNvbGUud2FybiwgViA9IGNvbnNvbGUuZXJyb3IsIFIgPSBjb25zb2xlLmdyb3VwLCBJID0gY29uc29sZS5ncm91cENvbGxhcHNlZCwgaiA9IGNvbnNvbGUuZ3JvdXBFbmQ7XG4gICAgICAgICAgdmFyIE8xID0ge1xuICAgICAgICAgICAgY29uZmlndXJhYmxlOiAhMCxcbiAgICAgICAgICAgIGVudW1lcmFibGU6ICEwLFxuICAgICAgICAgICAgdmFsdWU6IFUsXG4gICAgICAgICAgICB3cml0YWJsZTogITBcbiAgICAgICAgICB9O1xuICAgICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKGNvbnNvbGUsIHtcbiAgICAgICAgICAgIGluZm86IE8xLFxuICAgICAgICAgICAgbG9nOiBPMSxcbiAgICAgICAgICAgIHdhcm46IE8xLFxuICAgICAgICAgICAgZXJyb3I6IE8xLFxuICAgICAgICAgICAgZ3JvdXA6IE8xLFxuICAgICAgICAgICAgZ3JvdXBDb2xsYXBzZWQ6IE8xLFxuICAgICAgICAgICAgZ3JvdXBFbmQ6IE8xXG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgbSsrO1xuICAgICAgfVxuICAgIH1cbiAgICBmdW5jdGlvbiByMSgpIHtcbiAgICAgIHtcbiAgICAgICAgaWYgKG0tLSwgbSA9PT0gMCkge1xuICAgICAgICAgIHZhciBPMSA9IHtcbiAgICAgICAgICAgIGNvbmZpZ3VyYWJsZTogITAsXG4gICAgICAgICAgICBlbnVtZXJhYmxlOiAhMCxcbiAgICAgICAgICAgIHdyaXRhYmxlOiAhMFxuICAgICAgICAgIH07XG4gICAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoY29uc29sZSwge1xuICAgICAgICAgICAgbG9nOiBxKHt9LCBPMSwge1xuICAgICAgICAgICAgICB2YWx1ZToga1xuICAgICAgICAgICAgfSksXG4gICAgICAgICAgICBpbmZvOiBxKHt9LCBPMSwge1xuICAgICAgICAgICAgICB2YWx1ZTogeFxuICAgICAgICAgICAgfSksXG4gICAgICAgICAgICB3YXJuOiBxKHt9LCBPMSwge1xuICAgICAgICAgICAgICB2YWx1ZTogTlxuICAgICAgICAgICAgfSksXG4gICAgICAgICAgICBlcnJvcjogcSh7fSwgTzEsIHtcbiAgICAgICAgICAgICAgdmFsdWU6IFZcbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgZ3JvdXA6IHEoe30sIE8xLCB7XG4gICAgICAgICAgICAgIHZhbHVlOiBSXG4gICAgICAgICAgICB9KSxcbiAgICAgICAgICAgIGdyb3VwQ29sbGFwc2VkOiBxKHt9LCBPMSwge1xuICAgICAgICAgICAgICB2YWx1ZTogSVxuICAgICAgICAgICAgfSksXG4gICAgICAgICAgICBncm91cEVuZDogcSh7fSwgTzEsIHtcbiAgICAgICAgICAgICAgdmFsdWU6IGpcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgbSA8IDAgJiYgaChcImRpc2FibGVkRGVwdGggZmVsbCBiZWxvdyB6ZXJvLiBUaGlzIGlzIGEgYnVnIGluIFJlYWN0LiBQbGVhc2UgZmlsZSBhbiBpc3N1ZS5cIik7XG4gICAgICB9XG4gICAgfVxuICAgIHZhciBLID0gTy5SZWFjdEN1cnJlbnREaXNwYXRjaGVyLCBRO1xuICAgIGZ1bmN0aW9uIEUoTzEsIFYxLCBHMSkge1xuICAgICAge1xuICAgICAgICBpZiAoUSA9PT0gdm9pZCAwKVxuICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICB0aHJvdyBFcnJvcigpO1xuICAgICAgICAgIH0gY2F0Y2ggKGIwKSB7XG4gICAgICAgICAgICB2YXIgaTAgPSBiMC5zdGFjay50cmltKCkubWF0Y2goL1xcbiggKihhdCApPykvKTtcbiAgICAgICAgICAgIFEgPSBpMCAmJiBpMFsxXSB8fCBcIlwiO1xuICAgICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGBcbmAgKyBRICsgTzE7XG4gICAgICB9XG4gICAgfVxuICAgIHZhciBEID0gITEsIEc7XG4gICAge1xuICAgICAgdmFyIEogPSB0eXBlb2YgV2Vha01hcCA9PSBcImZ1bmN0aW9uXCIgPyBXZWFrTWFwIDogTWFwO1xuICAgICAgRyA9IG5ldyBKKCk7XG4gICAgfVxuICAgIGZ1bmN0aW9uIFMoTzEsIFYxKSB7XG4gICAgICBpZiAoIU8xIHx8IEQpXG4gICAgICAgIHJldHVybiBcIlwiO1xuICAgICAge1xuICAgICAgICB2YXIgRzEgPSBHLmdldChPMSk7XG4gICAgICAgIGlmIChHMSAhPT0gdm9pZCAwKVxuICAgICAgICAgIHJldHVybiBHMTtcbiAgICAgIH1cbiAgICAgIHZhciBpMDtcbiAgICAgIEQgPSAhMDtcbiAgICAgIHZhciBiMCA9IEVycm9yLnByZXBhcmVTdGFja1RyYWNlO1xuICAgICAgRXJyb3IucHJlcGFyZVN0YWNrVHJhY2UgPSB2b2lkIDA7XG4gICAgICB2YXIgZzA7XG4gICAgICBnMCA9IEsuY3VycmVudCwgSy5jdXJyZW50ID0gbnVsbCwgXygpO1xuICAgICAgdHJ5IHtcbiAgICAgICAgaWYgKFYxKSB7XG4gICAgICAgICAgdmFyIHUwID0gZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICB0aHJvdyBFcnJvcigpO1xuICAgICAgICAgIH07XG4gICAgICAgICAgaWYgKE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh1MC5wcm90b3R5cGUsIFwicHJvcHNcIiwge1xuICAgICAgICAgICAgc2V0OiBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgdGhyb3cgRXJyb3IoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KSwgdHlwZW9mIFJlZmxlY3QgPT0gXCJvYmplY3RcIiAmJiBSZWZsZWN0LmNvbnN0cnVjdCkge1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgUmVmbGVjdC5jb25zdHJ1Y3QodTAsIFtdKTtcbiAgICAgICAgICAgIH0gY2F0Y2ggKGEyKSB7XG4gICAgICAgICAgICAgIGkwID0gYTI7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBSZWZsZWN0LmNvbnN0cnVjdChPMSwgW10sIHUwKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgdTAuY2FsbCgpO1xuICAgICAgICAgICAgfSBjYXRjaCAoYTIpIHtcbiAgICAgICAgICAgICAgaTAgPSBhMjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIE8xLmNhbGwodTAucHJvdG90eXBlKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIHRocm93IEVycm9yKCk7XG4gICAgICAgICAgfSBjYXRjaCAoYTIpIHtcbiAgICAgICAgICAgIGkwID0gYTI7XG4gICAgICAgICAgfVxuICAgICAgICAgIE8xKCk7XG4gICAgICAgIH1cbiAgICAgIH0gY2F0Y2ggKGEyKSB7XG4gICAgICAgIGlmIChhMiAmJiBpMCAmJiB0eXBlb2YgYTIuc3RhY2sgPT0gXCJzdHJpbmdcIikge1xuICAgICAgICAgIGZvciAodmFyIHowID0gYTIuc3RhY2suc3BsaXQoYFxuYCksIFYwID0gaTAuc3RhY2suc3BsaXQoYFxuYCksIFcwID0gejAubGVuZ3RoIC0gMSwgRjAgPSBWMC5sZW5ndGggLSAxOyBXMCA+PSAxICYmIEYwID49IDAgJiYgejBbVzBdICE9PSBWMFtGMF07IClcbiAgICAgICAgICAgIEYwLS07XG4gICAgICAgICAgZm9yICg7IFcwID49IDEgJiYgRjAgPj0gMDsgVzAtLSwgRjAtLSlcbiAgICAgICAgICAgIGlmICh6MFtXMF0gIT09IFYwW0YwXSkge1xuICAgICAgICAgICAgICBpZiAoVzAgIT09IDEgfHwgRjAgIT09IDEpXG4gICAgICAgICAgICAgICAgZG9cbiAgICAgICAgICAgICAgICAgIGlmIChXMC0tLCBGMC0tLCBGMCA8IDAgfHwgejBbVzBdICE9PSBWMFtGMF0pIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIGIyID0gYFxuYCArIHowW1cwXS5yZXBsYWNlKFwiIGF0IG5ldyBcIiwgXCIgYXQgXCIpO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gTzEuZGlzcGxheU5hbWUgJiYgYjIuaW5jbHVkZXMoXCI8YW5vbnltb3VzPlwiKSAmJiAoYjIgPSBiMi5yZXBsYWNlKFwiPGFub255bW91cz5cIiwgTzEuZGlzcGxheU5hbWUpKSwgdHlwZW9mIE8xID09IFwiZnVuY3Rpb25cIiAmJiBHLnNldChPMSwgYjIpLCBiMjtcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB3aGlsZSAoVzAgPj0gMSAmJiBGMCA+PSAwKTtcbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0gZmluYWxseSB7XG4gICAgICAgIEQgPSAhMSwgSy5jdXJyZW50ID0gZzAsIHIxKCksIEVycm9yLnByZXBhcmVTdGFja1RyYWNlID0gYjA7XG4gICAgICB9XG4gICAgICB2YXIgWjIgPSBPMSA/IE8xLmRpc3BsYXlOYW1lIHx8IE8xLm5hbWUgOiBcIlwiLCBqMCA9IFoyID8gRShaMikgOiBcIlwiO1xuICAgICAgcmV0dXJuIHR5cGVvZiBPMSA9PSBcImZ1bmN0aW9uXCIgJiYgRy5zZXQoTzEsIGowKSwgajA7XG4gICAgfVxuICAgIGZ1bmN0aW9uIFcoTzEsIFYxLCBHMSkge1xuICAgICAgcmV0dXJuIFMoTzEsICExKTtcbiAgICB9XG4gICAgZnVuY3Rpb24gUChPMSkge1xuICAgICAgdmFyIFYxID0gTzEucHJvdG90eXBlO1xuICAgICAgcmV0dXJuICEhKFYxICYmIFYxLmlzUmVhY3RDb21wb25lbnQpO1xuICAgIH1cbiAgICBmdW5jdGlvbiBZKE8xLCBWMSwgRzEpIHtcbiAgICAgIGlmIChPMSA9PSBudWxsKVxuICAgICAgICByZXR1cm4gXCJcIjtcbiAgICAgIGlmICh0eXBlb2YgTzEgPT0gXCJmdW5jdGlvblwiKVxuICAgICAgICByZXR1cm4gUyhPMSwgUChPMSkpO1xuICAgICAgaWYgKHR5cGVvZiBPMSA9PSBcInN0cmluZ1wiKVxuICAgICAgICByZXR1cm4gRShPMSk7XG4gICAgICBzd2l0Y2ggKE8xKSB7XG4gICAgICAgIGNhc2UgcDpcbiAgICAgICAgICByZXR1cm4gRShcIlN1c3BlbnNlXCIpO1xuICAgICAgICBjYXNlIGQ6XG4gICAgICAgICAgcmV0dXJuIEUoXCJTdXNwZW5zZUxpc3RcIik7XG4gICAgICB9XG4gICAgICBpZiAodHlwZW9mIE8xID09IFwib2JqZWN0XCIpXG4gICAgICAgIHN3aXRjaCAoTzEuJCR0eXBlb2YpIHtcbiAgICAgICAgICBjYXNlIGw6XG4gICAgICAgICAgICByZXR1cm4gVyhPMS5yZW5kZXIpO1xuICAgICAgICAgIGNhc2UgYjpcbiAgICAgICAgICAgIHJldHVybiBZKE8xLnR5cGUsIFYxLCBHMSk7XG4gICAgICAgICAgY2FzZSBNOiB7XG4gICAgICAgICAgICB2YXIgaTAgPSBPMSwgYjAgPSBpMC5fcGF5bG9hZCwgZzAgPSBpMC5faW5pdDtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgIHJldHVybiBZKGcwKGIwKSwgVjEsIEcxKTtcbiAgICAgICAgICAgIH0gY2F0Y2gge1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgcmV0dXJuIFwiXCI7XG4gICAgfVxuICAgIHZhciBaID0gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eSwgdDEgPSB7fSwgaTEgPSBPLlJlYWN0RGVidWdDdXJyZW50RnJhbWU7XG4gICAgZnVuY3Rpb24gbjEoTzEpIHtcbiAgICAgIGlmIChPMSkge1xuICAgICAgICB2YXIgVjEgPSBPMS5fb3duZXIsIEcxID0gWShPMS50eXBlLCBPMS5fc291cmNlLCBWMSA/IFYxLnR5cGUgOiBudWxsKTtcbiAgICAgICAgaTEuc2V0RXh0cmFTdGFja0ZyYW1lKEcxKTtcbiAgICAgIH0gZWxzZVxuICAgICAgICBpMS5zZXRFeHRyYVN0YWNrRnJhbWUobnVsbCk7XG4gICAgfVxuICAgIGZ1bmN0aW9uIHMxKE8xLCBWMSwgRzEsIGkwLCBiMCkge1xuICAgICAge1xuICAgICAgICB2YXIgZzAgPSBGdW5jdGlvbi5jYWxsLmJpbmQoWik7XG4gICAgICAgIGZvciAodmFyIHUwIGluIE8xKVxuICAgICAgICAgIGlmIChnMChPMSwgdTApKSB7XG4gICAgICAgICAgICB2YXIgejAgPSB2b2lkIDA7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICBpZiAodHlwZW9mIE8xW3UwXSAhPSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgICAgICAgICAgICB2YXIgVjAgPSBFcnJvcigoaTAgfHwgXCJSZWFjdCBjbGFzc1wiKSArIFwiOiBcIiArIEcxICsgXCIgdHlwZSBgXCIgKyB1MCArIFwiYCBpcyBpbnZhbGlkOyBpdCBtdXN0IGJlIGEgZnVuY3Rpb24sIHVzdWFsbHkgZnJvbSB0aGUgYHByb3AtdHlwZXNgIHBhY2thZ2UsIGJ1dCByZWNlaXZlZCBgXCIgKyB0eXBlb2YgTzFbdTBdICsgXCJgLlRoaXMgb2Z0ZW4gaGFwcGVucyBiZWNhdXNlIG9mIHR5cG9zIHN1Y2ggYXMgYFByb3BUeXBlcy5mdW5jdGlvbmAgaW5zdGVhZCBvZiBgUHJvcFR5cGVzLmZ1bmNgLlwiKTtcbiAgICAgICAgICAgICAgICB0aHJvdyBWMC5uYW1lID0gXCJJbnZhcmlhbnQgVmlvbGF0aW9uXCIsIFYwO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIHowID0gTzFbdTBdKFYxLCB1MCwgaTAsIEcxLCBudWxsLCBcIlNFQ1JFVF9ET19OT1RfUEFTU19USElTX09SX1lPVV9XSUxMX0JFX0ZJUkVEXCIpO1xuICAgICAgICAgICAgfSBjYXRjaCAoVzApIHtcbiAgICAgICAgICAgICAgejAgPSBXMDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHowICYmICEoejAgaW5zdGFuY2VvZiBFcnJvcikgJiYgKG4xKGIwKSwgaChcIiVzOiB0eXBlIHNwZWNpZmljYXRpb24gb2YgJXMgYCVzYCBpcyBpbnZhbGlkOyB0aGUgdHlwZSBjaGVja2VyIGZ1bmN0aW9uIG11c3QgcmV0dXJuIGBudWxsYCBvciBhbiBgRXJyb3JgIGJ1dCByZXR1cm5lZCBhICVzLiBZb3UgbWF5IGhhdmUgZm9yZ290dGVuIHRvIHBhc3MgYW4gYXJndW1lbnQgdG8gdGhlIHR5cGUgY2hlY2tlciBjcmVhdG9yIChhcnJheU9mLCBpbnN0YW5jZU9mLCBvYmplY3RPZiwgb25lT2YsIG9uZU9mVHlwZSwgYW5kIHNoYXBlIGFsbCByZXF1aXJlIGFuIGFyZ3VtZW50KS5cIiwgaTAgfHwgXCJSZWFjdCBjbGFzc1wiLCBHMSwgdTAsIHR5cGVvZiB6MCksIG4xKG51bGwpKSwgejAgaW5zdGFuY2VvZiBFcnJvciAmJiAhKHowLm1lc3NhZ2UgaW4gdDEpICYmICh0MVt6MC5tZXNzYWdlXSA9ICEwLCBuMShiMCksIGgoXCJGYWlsZWQgJXMgdHlwZTogJXNcIiwgRzEsIHowLm1lc3NhZ2UpLCBuMShudWxsKSk7XG4gICAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICB2YXIgZDEgPSBBcnJheS5pc0FycmF5O1xuICAgIGZ1bmN0aW9uIGIxKE8xKSB7XG4gICAgICByZXR1cm4gZDEoTzEpO1xuICAgIH1cbiAgICBmdW5jdGlvbiBjMShPMSkge1xuICAgICAge1xuICAgICAgICB2YXIgVjEgPSB0eXBlb2YgU3ltYm9sID09IFwiZnVuY3Rpb25cIiAmJiBTeW1ib2wudG9TdHJpbmdUYWcsIEcxID0gVjEgJiYgTzFbU3ltYm9sLnRvU3RyaW5nVGFnXSB8fCBPMS5jb25zdHJ1Y3Rvci5uYW1lIHx8IFwiT2JqZWN0XCI7XG4gICAgICAgIHJldHVybiBHMTtcbiAgICAgIH1cbiAgICB9XG4gICAgZnVuY3Rpb24gYTEoTzEpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIHJldHVybiBsMShPMSksICExO1xuICAgICAgfSBjYXRjaCB7XG4gICAgICAgIHJldHVybiAhMDtcbiAgICAgIH1cbiAgICB9XG4gICAgZnVuY3Rpb24gbDEoTzEpIHtcbiAgICAgIHJldHVybiBcIlwiICsgTzE7XG4gICAgfVxuICAgIGZ1bmN0aW9uIHAxKE8xKSB7XG4gICAgICBpZiAoYTEoTzEpKVxuICAgICAgICByZXR1cm4gaChcIlRoZSBwcm92aWRlZCBrZXkgaXMgYW4gdW5zdXBwb3J0ZWQgdHlwZSAlcy4gVGhpcyB2YWx1ZSBtdXN0IGJlIGNvZXJjZWQgdG8gYSBzdHJpbmcgYmVmb3JlIGJlZm9yZSB1c2luZyBpdCBoZXJlLlwiLCBjMShPMSkpLCBsMShPMSk7XG4gICAgfVxuICAgIHZhciBNMSA9IE8uUmVhY3RDdXJyZW50T3duZXIsIEExID0ge1xuICAgICAga2V5OiAhMCxcbiAgICAgIHJlZjogITAsXG4gICAgICBfX3NlbGY6ICEwLFxuICAgICAgX19zb3VyY2U6ICEwXG4gICAgfSwgdTEsIGgxLCBDMTtcbiAgICBDMSA9IHt9O1xuICAgIGZ1bmN0aW9uIHExKE8xKSB7XG4gICAgICBpZiAoWi5jYWxsKE8xLCBcInJlZlwiKSkge1xuICAgICAgICB2YXIgVjEgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKE8xLCBcInJlZlwiKS5nZXQ7XG4gICAgICAgIGlmIChWMSAmJiBWMS5pc1JlYWN0V2FybmluZylcbiAgICAgICAgICByZXR1cm4gITE7XG4gICAgICB9XG4gICAgICByZXR1cm4gTzEucmVmICE9PSB2b2lkIDA7XG4gICAgfVxuICAgIGZ1bmN0aW9uIFcxKE8xKSB7XG4gICAgICBpZiAoWi5jYWxsKE8xLCBcImtleVwiKSkge1xuICAgICAgICB2YXIgVjEgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKE8xLCBcImtleVwiKS5nZXQ7XG4gICAgICAgIGlmIChWMSAmJiBWMS5pc1JlYWN0V2FybmluZylcbiAgICAgICAgICByZXR1cm4gITE7XG4gICAgICB9XG4gICAgICByZXR1cm4gTzEua2V5ICE9PSB2b2lkIDA7XG4gICAgfVxuICAgIGZ1bmN0aW9uIFIxKE8xLCBWMSkge1xuICAgICAgaWYgKHR5cGVvZiBPMS5yZWYgPT0gXCJzdHJpbmdcIiAmJiBNMS5jdXJyZW50ICYmIFYxICYmIE0xLmN1cnJlbnQuc3RhdGVOb2RlICE9PSBWMSkge1xuICAgICAgICB2YXIgRzEgPSBDKE0xLmN1cnJlbnQudHlwZSk7XG4gICAgICAgIEMxW0cxXSB8fCAoaCgnQ29tcG9uZW50IFwiJXNcIiBjb250YWlucyB0aGUgc3RyaW5nIHJlZiBcIiVzXCIuIFN1cHBvcnQgZm9yIHN0cmluZyByZWZzIHdpbGwgYmUgcmVtb3ZlZCBpbiBhIGZ1dHVyZSBtYWpvciByZWxlYXNlLiBUaGlzIGNhc2UgY2Fubm90IGJlIGF1dG9tYXRpY2FsbHkgY29udmVydGVkIHRvIGFuIGFycm93IGZ1bmN0aW9uLiBXZSBhc2sgeW91IHRvIG1hbnVhbGx5IGZpeCB0aGlzIGNhc2UgYnkgdXNpbmcgdXNlUmVmKCkgb3IgY3JlYXRlUmVmKCkgaW5zdGVhZC4gTGVhcm4gbW9yZSBhYm91dCB1c2luZyByZWZzIHNhZmVseSBoZXJlOiBodHRwczovL3JlYWN0anMub3JnL2xpbmsvc3RyaWN0LW1vZGUtc3RyaW5nLXJlZicsIEMoTTEuY3VycmVudC50eXBlKSwgTzEucmVmKSwgQzFbRzFdID0gITApO1xuICAgICAgfVxuICAgIH1cbiAgICBmdW5jdGlvbiBrMShPMSwgVjEpIHtcbiAgICAgIHtcbiAgICAgICAgdmFyIEcxID0gZnVuY3Rpb24oKSB7XG4gICAgICAgICAgdTEgfHwgKHUxID0gITAsIGgoXCIlczogYGtleWAgaXMgbm90IGEgcHJvcC4gVHJ5aW5nIHRvIGFjY2VzcyBpdCB3aWxsIHJlc3VsdCBpbiBgdW5kZWZpbmVkYCBiZWluZyByZXR1cm5lZC4gSWYgeW91IG5lZWQgdG8gYWNjZXNzIHRoZSBzYW1lIHZhbHVlIHdpdGhpbiB0aGUgY2hpbGQgY29tcG9uZW50LCB5b3Ugc2hvdWxkIHBhc3MgaXQgYXMgYSBkaWZmZXJlbnQgcHJvcC4gKGh0dHBzOi8vcmVhY3Rqcy5vcmcvbGluay9zcGVjaWFsLXByb3BzKVwiLCBWMSkpO1xuICAgICAgICB9O1xuICAgICAgICBHMS5pc1JlYWN0V2FybmluZyA9ICEwLCBPYmplY3QuZGVmaW5lUHJvcGVydHkoTzEsIFwia2V5XCIsIHtcbiAgICAgICAgICBnZXQ6IEcxLFxuICAgICAgICAgIGNvbmZpZ3VyYWJsZTogITBcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfVxuICAgIGZ1bmN0aW9uIE4xKE8xLCBWMSkge1xuICAgICAge1xuICAgICAgICB2YXIgRzEgPSBmdW5jdGlvbigpIHtcbiAgICAgICAgICBoMSB8fCAoaDEgPSAhMCwgaChcIiVzOiBgcmVmYCBpcyBub3QgYSBwcm9wLiBUcnlpbmcgdG8gYWNjZXNzIGl0IHdpbGwgcmVzdWx0IGluIGB1bmRlZmluZWRgIGJlaW5nIHJldHVybmVkLiBJZiB5b3UgbmVlZCB0byBhY2Nlc3MgdGhlIHNhbWUgdmFsdWUgd2l0aGluIHRoZSBjaGlsZCBjb21wb25lbnQsIHlvdSBzaG91bGQgcGFzcyBpdCBhcyBhIGRpZmZlcmVudCBwcm9wLiAoaHR0cHM6Ly9yZWFjdGpzLm9yZy9saW5rL3NwZWNpYWwtcHJvcHMpXCIsIFYxKSk7XG4gICAgICAgIH07XG4gICAgICAgIEcxLmlzUmVhY3RXYXJuaW5nID0gITAsIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShPMSwgXCJyZWZcIiwge1xuICAgICAgICAgIGdldDogRzEsXG4gICAgICAgICAgY29uZmlndXJhYmxlOiAhMFxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9XG4gICAgdmFyIHYxID0gZnVuY3Rpb24oTzEsIFYxLCBHMSwgaTAsIGIwLCBnMCwgdTApIHtcbiAgICAgIHZhciB6MCA9IHtcbiAgICAgICAgLy8gVGhpcyB0YWcgYWxsb3dzIHVzIHRvIHVuaXF1ZWx5IGlkZW50aWZ5IHRoaXMgYXMgYSBSZWFjdCBFbGVtZW50XG4gICAgICAgICQkdHlwZW9mOiB0LFxuICAgICAgICAvLyBCdWlsdC1pbiBwcm9wZXJ0aWVzIHRoYXQgYmVsb25nIG9uIHRoZSBlbGVtZW50XG4gICAgICAgIHR5cGU6IE8xLFxuICAgICAgICBrZXk6IFYxLFxuICAgICAgICByZWY6IEcxLFxuICAgICAgICBwcm9wczogdTAsXG4gICAgICAgIC8vIFJlY29yZCB0aGUgY29tcG9uZW50IHJlc3BvbnNpYmxlIGZvciBjcmVhdGluZyB0aGlzIGVsZW1lbnQuXG4gICAgICAgIF9vd25lcjogZzBcbiAgICAgIH07XG4gICAgICByZXR1cm4gejAuX3N0b3JlID0ge30sIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh6MC5fc3RvcmUsIFwidmFsaWRhdGVkXCIsIHtcbiAgICAgICAgY29uZmlndXJhYmxlOiAhMSxcbiAgICAgICAgZW51bWVyYWJsZTogITEsXG4gICAgICAgIHdyaXRhYmxlOiAhMCxcbiAgICAgICAgdmFsdWU6ICExXG4gICAgICB9KSwgT2JqZWN0LmRlZmluZVByb3BlcnR5KHowLCBcIl9zZWxmXCIsIHtcbiAgICAgICAgY29uZmlndXJhYmxlOiAhMSxcbiAgICAgICAgZW51bWVyYWJsZTogITEsXG4gICAgICAgIHdyaXRhYmxlOiAhMSxcbiAgICAgICAgdmFsdWU6IGkwXG4gICAgICB9KSwgT2JqZWN0LmRlZmluZVByb3BlcnR5KHowLCBcIl9zb3VyY2VcIiwge1xuICAgICAgICBjb25maWd1cmFibGU6ICExLFxuICAgICAgICBlbnVtZXJhYmxlOiAhMSxcbiAgICAgICAgd3JpdGFibGU6ICExLFxuICAgICAgICB2YWx1ZTogYjBcbiAgICAgIH0pLCBPYmplY3QuZnJlZXplICYmIChPYmplY3QuZnJlZXplKHowLnByb3BzKSwgT2JqZWN0LmZyZWV6ZSh6MCkpLCB6MDtcbiAgICB9O1xuICAgIGZ1bmN0aW9uIFMxKE8xLCBWMSwgRzEsIGkwLCBiMCkge1xuICAgICAge1xuICAgICAgICB2YXIgZzAsIHUwID0ge30sIHowID0gbnVsbCwgVjAgPSBudWxsO1xuICAgICAgICBHMSAhPT0gdm9pZCAwICYmIChwMShHMSksIHowID0gXCJcIiArIEcxKSwgVzEoVjEpICYmIChwMShWMS5rZXkpLCB6MCA9IFwiXCIgKyBWMS5rZXkpLCBxMShWMSkgJiYgKFYwID0gVjEucmVmLCBSMShWMSwgYjApKTtcbiAgICAgICAgZm9yIChnMCBpbiBWMSlcbiAgICAgICAgICBaLmNhbGwoVjEsIGcwKSAmJiAhQTEuaGFzT3duUHJvcGVydHkoZzApICYmICh1MFtnMF0gPSBWMVtnMF0pO1xuICAgICAgICBpZiAoTzEgJiYgTzEuZGVmYXVsdFByb3BzKSB7XG4gICAgICAgICAgdmFyIFcwID0gTzEuZGVmYXVsdFByb3BzO1xuICAgICAgICAgIGZvciAoZzAgaW4gVzApXG4gICAgICAgICAgICB1MFtnMF0gPT09IHZvaWQgMCAmJiAodTBbZzBdID0gVzBbZzBdKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoejAgfHwgVjApIHtcbiAgICAgICAgICB2YXIgRjAgPSB0eXBlb2YgTzEgPT0gXCJmdW5jdGlvblwiID8gTzEuZGlzcGxheU5hbWUgfHwgTzEubmFtZSB8fCBcIlVua25vd25cIiA6IE8xO1xuICAgICAgICAgIHowICYmIGsxKHUwLCBGMCksIFYwICYmIE4xKHUwLCBGMCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHYxKE8xLCB6MCwgVjAsIGIwLCBpMCwgTTEuY3VycmVudCwgdTApO1xuICAgICAgfVxuICAgIH1cbiAgICB2YXIgRDEgPSBPLlJlYWN0Q3VycmVudE93bmVyLCBGMSA9IE8uUmVhY3REZWJ1Z0N1cnJlbnRGcmFtZTtcbiAgICBmdW5jdGlvbiBVMShPMSkge1xuICAgICAgaWYgKE8xKSB7XG4gICAgICAgIHZhciBWMSA9IE8xLl9vd25lciwgRzEgPSBZKE8xLnR5cGUsIE8xLl9zb3VyY2UsIFYxID8gVjEudHlwZSA6IG51bGwpO1xuICAgICAgICBGMS5zZXRFeHRyYVN0YWNrRnJhbWUoRzEpO1xuICAgICAgfSBlbHNlXG4gICAgICAgIEYxLnNldEV4dHJhU3RhY2tGcmFtZShudWxsKTtcbiAgICB9XG4gICAgdmFyIGgwO1xuICAgIGgwID0gITE7XG4gICAgZnVuY3Rpb24gTzAoTzEpIHtcbiAgICAgIHJldHVybiB0eXBlb2YgTzEgPT0gXCJvYmplY3RcIiAmJiBPMSAhPT0gbnVsbCAmJiBPMS4kJHR5cGVvZiA9PT0gdDtcbiAgICB9XG4gICAgZnVuY3Rpb24gdzEoKSB7XG4gICAgICB7XG4gICAgICAgIGlmIChEMS5jdXJyZW50KSB7XG4gICAgICAgICAgdmFyIE8xID0gQyhEMS5jdXJyZW50LnR5cGUpO1xuICAgICAgICAgIGlmIChPMSlcbiAgICAgICAgICAgIHJldHVybiBgXG5cbkNoZWNrIHRoZSByZW5kZXIgbWV0aG9kIG9mIFxcYGAgKyBPMSArIFwiYC5cIjtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gXCJcIjtcbiAgICAgIH1cbiAgICB9XG4gICAgZnVuY3Rpb24gZzEoTzEpIHtcbiAgICAgIHtcbiAgICAgICAgaWYgKE8xICE9PSB2b2lkIDApIHtcbiAgICAgICAgICB2YXIgVjEgPSBPMS5maWxlTmFtZS5yZXBsYWNlKC9eLipbXFxcXFxcL10vLCBcIlwiKSwgRzEgPSBPMS5saW5lTnVtYmVyO1xuICAgICAgICAgIHJldHVybiBgXG5cbkNoZWNrIHlvdXIgY29kZSBhdCBgICsgVjEgKyBcIjpcIiArIEcxICsgXCIuXCI7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIFwiXCI7XG4gICAgICB9XG4gICAgfVxuICAgIHZhciBFMSA9IHt9O1xuICAgIGZ1bmN0aW9uIEIxKE8xKSB7XG4gICAgICB7XG4gICAgICAgIHZhciBWMSA9IHcxKCk7XG4gICAgICAgIGlmICghVjEpIHtcbiAgICAgICAgICB2YXIgRzEgPSB0eXBlb2YgTzEgPT0gXCJzdHJpbmdcIiA/IE8xIDogTzEuZGlzcGxheU5hbWUgfHwgTzEubmFtZTtcbiAgICAgICAgICBHMSAmJiAoVjEgPSBgXG5cbkNoZWNrIHRoZSB0b3AtbGV2ZWwgcmVuZGVyIGNhbGwgdXNpbmcgPGAgKyBHMSArIFwiPi5cIik7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIFYxO1xuICAgICAgfVxuICAgIH1cbiAgICBmdW5jdGlvbiBLMShPMSwgVjEpIHtcbiAgICAgIHtcbiAgICAgICAgaWYgKCFPMS5fc3RvcmUgfHwgTzEuX3N0b3JlLnZhbGlkYXRlZCB8fCBPMS5rZXkgIT0gbnVsbClcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIE8xLl9zdG9yZS52YWxpZGF0ZWQgPSAhMDtcbiAgICAgICAgdmFyIEcxID0gQjEoVjEpO1xuICAgICAgICBpZiAoRTFbRzFdKVxuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgRTFbRzFdID0gITA7XG4gICAgICAgIHZhciBpMCA9IFwiXCI7XG4gICAgICAgIE8xICYmIE8xLl9vd25lciAmJiBPMS5fb3duZXIgIT09IEQxLmN1cnJlbnQgJiYgKGkwID0gXCIgSXQgd2FzIHBhc3NlZCBhIGNoaWxkIGZyb20gXCIgKyBDKE8xLl9vd25lci50eXBlKSArIFwiLlwiKSwgVTEoTzEpLCBoKCdFYWNoIGNoaWxkIGluIGEgbGlzdCBzaG91bGQgaGF2ZSBhIHVuaXF1ZSBcImtleVwiIHByb3AuJXMlcyBTZWUgaHR0cHM6Ly9yZWFjdGpzLm9yZy9saW5rL3dhcm5pbmcta2V5cyBmb3IgbW9yZSBpbmZvcm1hdGlvbi4nLCBHMSwgaTApLCBVMShudWxsKTtcbiAgICAgIH1cbiAgICB9XG4gICAgZnVuY3Rpb24gcDAoTzEsIFYxKSB7XG4gICAgICB7XG4gICAgICAgIGlmICh0eXBlb2YgTzEgIT0gXCJvYmplY3RcIilcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIGlmIChiMShPMSkpXG4gICAgICAgICAgZm9yICh2YXIgRzEgPSAwOyBHMSA8IE8xLmxlbmd0aDsgRzErKykge1xuICAgICAgICAgICAgdmFyIGkwID0gTzFbRzFdO1xuICAgICAgICAgICAgTzAoaTApICYmIEsxKGkwLCBWMSk7XG4gICAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChPMChPMSkpXG4gICAgICAgICAgTzEuX3N0b3JlICYmIChPMS5fc3RvcmUudmFsaWRhdGVkID0gITApO1xuICAgICAgICBlbHNlIGlmIChPMSkge1xuICAgICAgICAgIHZhciBiMCA9IGYoTzEpO1xuICAgICAgICAgIGlmICh0eXBlb2YgYjAgPT0gXCJmdW5jdGlvblwiICYmIGIwICE9PSBPMS5lbnRyaWVzKVxuICAgICAgICAgICAgZm9yICh2YXIgZzAgPSBiMC5jYWxsKE8xKSwgdTA7ICEodTAgPSBnMC5uZXh0KCkpLmRvbmU7IClcbiAgICAgICAgICAgICAgTzAodTAudmFsdWUpICYmIEsxKHUwLnZhbHVlLCBWMSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgZnVuY3Rpb24gZTAoTzEpIHtcbiAgICAgIHtcbiAgICAgICAgdmFyIFYxID0gTzEudHlwZTtcbiAgICAgICAgaWYgKFYxID09IG51bGwgfHwgdHlwZW9mIFYxID09IFwic3RyaW5nXCIpXG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB2YXIgRzE7XG4gICAgICAgIGlmICh0eXBlb2YgVjEgPT0gXCJmdW5jdGlvblwiKVxuICAgICAgICAgIEcxID0gVjEucHJvcFR5cGVzO1xuICAgICAgICBlbHNlIGlmICh0eXBlb2YgVjEgPT0gXCJvYmplY3RcIiAmJiAoVjEuJCR0eXBlb2YgPT09IGwgfHwgLy8gTm90ZTogTWVtbyBvbmx5IGNoZWNrcyBvdXRlciBwcm9wcyBoZXJlLlxuICAgICAgICAvLyBJbm5lciBwcm9wcyBhcmUgY2hlY2tlZCBpbiB0aGUgcmVjb25jaWxlci5cbiAgICAgICAgVjEuJCR0eXBlb2YgPT09IGIpKVxuICAgICAgICAgIEcxID0gVjEucHJvcFR5cGVzO1xuICAgICAgICBlbHNlXG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICBpZiAoRzEpIHtcbiAgICAgICAgICB2YXIgaTAgPSBDKFYxKTtcbiAgICAgICAgICBzMShHMSwgTzEucHJvcHMsIFwicHJvcFwiLCBpMCwgTzEpO1xuICAgICAgICB9IGVsc2UgaWYgKFYxLlByb3BUeXBlcyAhPT0gdm9pZCAwICYmICFoMCkge1xuICAgICAgICAgIGgwID0gITA7XG4gICAgICAgICAgdmFyIGIwID0gQyhWMSk7XG4gICAgICAgICAgaChcIkNvbXBvbmVudCAlcyBkZWNsYXJlZCBgUHJvcFR5cGVzYCBpbnN0ZWFkIG9mIGBwcm9wVHlwZXNgLiBEaWQgeW91IG1pc3NwZWxsIHRoZSBwcm9wZXJ0eSBhc3NpZ25tZW50P1wiLCBiMCB8fCBcIlVua25vd25cIik7XG4gICAgICAgIH1cbiAgICAgICAgdHlwZW9mIFYxLmdldERlZmF1bHRQcm9wcyA9PSBcImZ1bmN0aW9uXCIgJiYgIVYxLmdldERlZmF1bHRQcm9wcy5pc1JlYWN0Q2xhc3NBcHByb3ZlZCAmJiBoKFwiZ2V0RGVmYXVsdFByb3BzIGlzIG9ubHkgdXNlZCBvbiBjbGFzc2ljIFJlYWN0LmNyZWF0ZUNsYXNzIGRlZmluaXRpb25zLiBVc2UgYSBzdGF0aWMgcHJvcGVydHkgbmFtZWQgYGRlZmF1bHRQcm9wc2AgaW5zdGVhZC5cIik7XG4gICAgICB9XG4gICAgfVxuICAgIGZ1bmN0aW9uIEgxKE8xKSB7XG4gICAgICB7XG4gICAgICAgIGZvciAodmFyIFYxID0gT2JqZWN0LmtleXMoTzEucHJvcHMpLCBHMSA9IDA7IEcxIDwgVjEubGVuZ3RoOyBHMSsrKSB7XG4gICAgICAgICAgdmFyIGkwID0gVjFbRzFdO1xuICAgICAgICAgIGlmIChpMCAhPT0gXCJjaGlsZHJlblwiICYmIGkwICE9PSBcImtleVwiKSB7XG4gICAgICAgICAgICBVMShPMSksIGgoXCJJbnZhbGlkIHByb3AgYCVzYCBzdXBwbGllZCB0byBgUmVhY3QuRnJhZ21lbnRgLiBSZWFjdC5GcmFnbWVudCBjYW4gb25seSBoYXZlIGBrZXlgIGFuZCBgY2hpbGRyZW5gIHByb3BzLlwiLCBpMCksIFUxKG51bGwpO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIE8xLnJlZiAhPT0gbnVsbCAmJiAoVTEoTzEpLCBoKFwiSW52YWxpZCBhdHRyaWJ1dGUgYHJlZmAgc3VwcGxpZWQgdG8gYFJlYWN0LkZyYWdtZW50YC5cIiksIFUxKG51bGwpKTtcbiAgICAgIH1cbiAgICB9XG4gICAgdmFyIHgxID0ge307XG4gICAgZnVuY3Rpb24gSTEoTzEsIFYxLCBHMSwgaTAsIGIwLCBnMCkge1xuICAgICAge1xuICAgICAgICB2YXIgdTAgPSBUKE8xKTtcbiAgICAgICAgaWYgKCF1MCkge1xuICAgICAgICAgIHZhciB6MCA9IFwiXCI7XG4gICAgICAgICAgKE8xID09PSB2b2lkIDAgfHwgdHlwZW9mIE8xID09IFwib2JqZWN0XCIgJiYgTzEgIT09IG51bGwgJiYgT2JqZWN0LmtleXMoTzEpLmxlbmd0aCA9PT0gMCkgJiYgKHowICs9IFwiIFlvdSBsaWtlbHkgZm9yZ290IHRvIGV4cG9ydCB5b3VyIGNvbXBvbmVudCBmcm9tIHRoZSBmaWxlIGl0J3MgZGVmaW5lZCBpbiwgb3IgeW91IG1pZ2h0IGhhdmUgbWl4ZWQgdXAgZGVmYXVsdCBhbmQgbmFtZWQgaW1wb3J0cy5cIik7XG4gICAgICAgICAgdmFyIFYwID0gZzEoYjApO1xuICAgICAgICAgIFYwID8gejAgKz0gVjAgOiB6MCArPSB3MSgpO1xuICAgICAgICAgIHZhciBXMDtcbiAgICAgICAgICBPMSA9PT0gbnVsbCA/IFcwID0gXCJudWxsXCIgOiBiMShPMSkgPyBXMCA9IFwiYXJyYXlcIiA6IE8xICE9PSB2b2lkIDAgJiYgTzEuJCR0eXBlb2YgPT09IHQgPyAoVzAgPSBcIjxcIiArIChDKE8xLnR5cGUpIHx8IFwiVW5rbm93blwiKSArIFwiIC8+XCIsIHowID0gXCIgRGlkIHlvdSBhY2NpZGVudGFsbHkgZXhwb3J0IGEgSlNYIGxpdGVyYWwgaW5zdGVhZCBvZiBhIGNvbXBvbmVudD9cIikgOiBXMCA9IHR5cGVvZiBPMSwgaChcIlJlYWN0LmpzeDogdHlwZSBpcyBpbnZhbGlkIC0tIGV4cGVjdGVkIGEgc3RyaW5nIChmb3IgYnVpbHQtaW4gY29tcG9uZW50cykgb3IgYSBjbGFzcy9mdW5jdGlvbiAoZm9yIGNvbXBvc2l0ZSBjb21wb25lbnRzKSBidXQgZ290OiAlcy4lc1wiLCBXMCwgejApO1xuICAgICAgICB9XG4gICAgICAgIHZhciBGMCA9IFMxKE8xLCBWMSwgRzEsIGIwLCBnMCk7XG4gICAgICAgIGlmIChGMCA9PSBudWxsKVxuICAgICAgICAgIHJldHVybiBGMDtcbiAgICAgICAgaWYgKHUwKSB7XG4gICAgICAgICAgdmFyIGIyID0gVjEuY2hpbGRyZW47XG4gICAgICAgICAgaWYgKGIyICE9PSB2b2lkIDApXG4gICAgICAgICAgICBpZiAoaTApXG4gICAgICAgICAgICAgIGlmIChiMShiMikpIHtcbiAgICAgICAgICAgICAgICBmb3IgKHZhciBaMiA9IDA7IFoyIDwgYjIubGVuZ3RoOyBaMisrKVxuICAgICAgICAgICAgICAgICAgcDAoYjJbWjJdLCBPMSk7XG4gICAgICAgICAgICAgICAgT2JqZWN0LmZyZWV6ZSAmJiBPYmplY3QuZnJlZXplKGIyKTtcbiAgICAgICAgICAgICAgfSBlbHNlXG4gICAgICAgICAgICAgICAgaChcIlJlYWN0LmpzeDogU3RhdGljIGNoaWxkcmVuIHNob3VsZCBhbHdheXMgYmUgYW4gYXJyYXkuIFlvdSBhcmUgbGlrZWx5IGV4cGxpY2l0bHkgY2FsbGluZyBSZWFjdC5qc3hzIG9yIFJlYWN0LmpzeERFVi4gVXNlIHRoZSBCYWJlbCB0cmFuc2Zvcm0gaW5zdGVhZC5cIik7XG4gICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgIHAwKGIyLCBPMSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKFouY2FsbChWMSwgXCJrZXlcIikpIHtcbiAgICAgICAgICB2YXIgajAgPSBDKE8xKSwgYTIgPSBPYmplY3Qua2V5cyhWMSkuZmlsdGVyKGZ1bmN0aW9uKGZ0KSB7XG4gICAgICAgICAgICByZXR1cm4gZnQgIT09IFwia2V5XCI7XG4gICAgICAgICAgfSksIEEyID0gYTIubGVuZ3RoID4gMCA/IFwie2tleTogc29tZUtleSwgXCIgKyBhMi5qb2luKFwiOiAuLi4sIFwiKSArIFwiOiAuLi59XCIgOiBcIntrZXk6IHNvbWVLZXl9XCI7XG4gICAgICAgICAgaWYgKCF4MVtqMCArIEEyXSkge1xuICAgICAgICAgICAgdmFyIE90ID0gYTIubGVuZ3RoID4gMCA/IFwie1wiICsgYTIuam9pbihcIjogLi4uLCBcIikgKyBcIjogLi4ufVwiIDogXCJ7fVwiO1xuICAgICAgICAgICAgaChgQSBwcm9wcyBvYmplY3QgY29udGFpbmluZyBhIFwia2V5XCIgcHJvcCBpcyBiZWluZyBzcHJlYWQgaW50byBKU1g6XG4gIGxldCBwcm9wcyA9ICVzO1xuICA8JXMgey4uLnByb3BzfSAvPlxuUmVhY3Qga2V5cyBtdXN0IGJlIHBhc3NlZCBkaXJlY3RseSB0byBKU1ggd2l0aG91dCB1c2luZyBzcHJlYWQ6XG4gIGxldCBwcm9wcyA9ICVzO1xuICA8JXMga2V5PXtzb21lS2V5fSB7Li4ucHJvcHN9IC8+YCwgQTIsIGowLCBPdCwgajApLCB4MVtqMCArIEEyXSA9ICEwO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gTzEgPT09IG4gPyBIMShGMCkgOiBlMChGMCksIEYwO1xuICAgICAgfVxuICAgIH1cbiAgICBmdW5jdGlvbiBYMShPMSwgVjEsIEcxKSB7XG4gICAgICByZXR1cm4gSTEoTzEsIFYxLCBHMSwgITApO1xuICAgIH1cbiAgICBmdW5jdGlvbiBKMShPMSwgVjEsIEcxKSB7XG4gICAgICByZXR1cm4gSTEoTzEsIFYxLCBHMSwgITEpO1xuICAgIH1cbiAgICB2YXIgZjAgPSBKMSwgSTAgPSBYMTtcbiAgICB4by5GcmFnbWVudCA9IG4sIHhvLmpzeCA9IGYwLCB4by5qc3hzID0gSTA7XG4gIH0oKSksIHhvO1xufVxucHJvY2Vzcy5lbnYuTk9ERV9FTlYgPT09IFwicHJvZHVjdGlvblwiID8gU2EuZXhwb3J0cyA9IGN1KCkgOiBTYS5leHBvcnRzID0gbHUoKTtcbnZhciBINSA9IFNhLmV4cG9ydHM7XG5jb25zdCBzMCA9IEg1LkZyYWdtZW50LCBjID0gSDUuanN4LCBlMSA9IEg1LmpzeHMsIHB1ID0gKCkgPT4gLyogQF9fUFVSRV9fICovIGUxKFwic3ZnXCIsIHsgdmlld0JveDogXCIwIDAgMjQgMjRcIiwgZmlsbDogXCJub25lXCIsIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsIGNoaWxkcmVuOiBbXG4gIC8qIEBfX1BVUkVfXyAqLyBjKFxuICAgIFwiY2lyY2xlXCIsXG4gICAge1xuICAgICAgY3g6IFwiMTJcIixcbiAgICAgIGN5OiBcIjEyXCIsXG4gICAgICByOiBcIjExLjNcIixcbiAgICAgIHN0cm9rZTogXCJjdXJyZW50Q29sb3JcIixcbiAgICAgIHN0cm9rZVdpZHRoOiBcIjEuNFwiXG4gICAgfVxuICApLFxuICAvKiBAX19QVVJFX18gKi8gYyhcbiAgICBcInBhdGhcIixcbiAgICB7XG4gICAgICBkOiBcIk0xMi4wMDAxIDEzLjk4OTRDMTIuNDM0OSAxMy45ODk0IDEyLjc4NzQgMTMuNjIyNyAxMi43ODc0IDEzLjE3MDJMMTIuNzg3NCA3LjMxOTE1QzEyLjc4NzQgNi44NjY3NSAxMi40MzQ5IDYuNSAxMi4wMDAxIDYuNUMxMS41NjUzIDYuNSAxMS4yMTI5IDYuODY2NzUgMTEuMjEyOSA3LjMxOTE1TDExLjIxMjkgMTMuMTcwMkMxMS4yMTI5IDEzLjYyMjcgMTEuNTY1MyAxMy45ODk0IDEyLjAwMDEgMTMuOTg5NFpcIixcbiAgICAgIGZpbGw6IFwiY3VycmVudENvbG9yXCJcbiAgICB9XG4gICksXG4gIC8qIEBfX1BVUkVfXyAqLyBjKFxuICAgIFwicGF0aFwiLFxuICAgIHtcbiAgICAgIGQ6IFwiTTEyLjAwMDEgMTcuNUMxMi40MzQ5IDE3LjUgMTIuNzg3NCAxNy4xMzMzIDEyLjc4NzQgMTYuNjgwOEMxMi43ODc0IDE2LjIyODQgMTIuNDM0OSAxNS44NjE3IDEyLjAwMDEgMTUuODYxN0MxMS41NjUzIDE1Ljg2MTcgMTEuMjEyOSAxNi4yMjg0IDExLjIxMjkgMTYuNjgwOEMxMS4yMTI5IDE3LjEzMzMgMTEuNTY1MyAxNy41IDEyLjAwMDEgMTcuNVpcIixcbiAgICAgIGZpbGw6IFwiY3VycmVudENvbG9yXCJcbiAgICB9XG4gIClcbl0gfSksIGR1ID0gKCkgPT4gLyogQF9fUFVSRV9fICovIGUxKFwic3ZnXCIsIHsgdmlld0JveDogXCIwIDAgMjQgMjRcIiwgZmlsbDogXCJub25lXCIsIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsIGNoaWxkcmVuOiBbXG4gIC8qIEBfX1BVUkVfXyAqLyBjKFwiZ1wiLCB7IGNsaXBQYXRoOiBcInVybCgjY2xpcDBfMjQ5N18xMzU5OTApXCIsIGNoaWxkcmVuOiAvKiBAX19QVVJFX18gKi8gYyhcbiAgICBcInBhdGhcIixcbiAgICB7XG4gICAgICBmaWxsUnVsZTogXCJldmVub2RkXCIsXG4gICAgICBjbGlwUnVsZTogXCJldmVub2RkXCIsXG4gICAgICBkOiBcIk0xMiAyNEMxOC42Mjc0IDI0IDI0IDE4LjYyNzQgMjQgMTJDMjQgNS4zNzI1OCAxOC42Mjc0IDAgMTIgMEM1LjM3MjU4IDAgMCA1LjM3MjU4IDAgMTJDMCAxOC42Mjc0IDUuMzcyNTggMjQgMTIgMjRaTTEyIDZDMTIuNTUyMyA2IDEzIDYuNDQ3NzIgMTMgN1YxM0MxMyAxMy41NTIzIDEyLjU1MjMgMTQgMTIgMTRDMTEuNDQ3NyAxNCAxMSAxMy41NTIzIDExIDEzVjdDMTEgNi40NDc3MiAxMS40NDc3IDYgMTIgNlpNMTMgMTdDMTMgMTcuNTUyMyAxMi41NTIzIDE4IDEyIDE4QzExLjQ0NzcgMTggMTEgMTcuNTUyMyAxMSAxN0MxMSAxNi40NDc3IDExLjQ0NzcgMTYgMTIgMTZDMTIuNTUyMyAxNiAxMyAxNi40NDc3IDEzIDE3WlwiLFxuICAgICAgZmlsbDogXCJjdXJyZW50Q29sb3JcIlxuICAgIH1cbiAgKSB9KSxcbiAgLyogQF9fUFVSRV9fICovIGMoXCJkZWZzXCIsIHsgY2hpbGRyZW46IC8qIEBfX1BVUkVfXyAqLyBjKFwiY2xpcFBhdGhcIiwgeyBpZDogXCJjbGlwMF8yNDk3XzEzNTk5MFwiLCBjaGlsZHJlbjogLyogQF9fUFVSRV9fICovIGMoXCJyZWN0XCIsIHsgd2lkdGg6IFwiMjRcIiwgaGVpZ2h0OiBcIjI0XCIsIGZpbGw6IFwid2hpdGVcIiB9KSB9KSB9KVxuXSB9KSwgYnUgPSAoKSA9PiAvKiBAX19QVVJFX18gKi8gYyhcInN2Z1wiLCB7IHZpZXdCb3g6IFwiMCAwIDI0IDI0XCIsIGZpbGw6IFwibm9uZVwiLCB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLCBjaGlsZHJlbjogLyogQF9fUFVSRV9fICovIGMoXG4gIFwicGF0aFwiLFxuICB7XG4gICAgZmlsbFJ1bGU6IFwiZXZlbm9kZFwiLFxuICAgIGNsaXBSdWxlOiBcImV2ZW5vZGRcIixcbiAgICBkOiBcIk0xMS4zOTE3IDIzLjcxNzlMNS41MTk4NiAxNS4xNzQ2TDUuNTE2MTQgMTUuMTY3NEM1LjM2Njk5IDE0Ljg3OCA1LjQzOSAxNC40NTIyIDUuNzM3OTUgMTQuMjM0OEw1Ljc0NzIgMTQuMjI4TDUuNzU3NDggMTQuMjIzQzUuOTA4NDQgMTQuMTQ5OCA2LjA5MDM4IDE0LjEzMzkgNi4yNTkwMSAxNC4xNjgzQzYuNDI4MTcgMTQuMjAyOSA2LjU5NTA2IDE0LjI5MDUgNi43MDg5MSAxNC40Mzc3TDYuNzEzMTcgMTQuNDQzMkwxMS4zMDA4IDIxLjA5MDNWMC42NjE0ODdDMTEuMzAwOCAwLjI5MDc0MyAxMS42MDYzIDAgMTEuOTc4OCAwQzEyLjM1MTMgMCAxMi42NTY4IDAuMjkwNzQzIDEyLjY1NjggMC42NjE0ODdWMjEuMTQ5NUwxNy4yNDI4IDE0LjUwNTFDMTcuNDYzNyAxNC4xNTE1IDE3LjkwOSAxNC4wNzI3IDE4LjIxNDIgMTQuMjkwMUMxOC41NzYgMTQuNTA0NiAxOC42NjExIDE0Ljk0MjUgMTguNDMxIDE1LjI0MzVMMTIuNTY1NyAyMy43MTgxQzEyLjI1MTMgMjQuMDMyNSAxMS43MDk5IDI0LjAzNjEgMTEuMzkxNyAyMy43MTc5WlwiLFxuICAgIGZpbGw6IFwiY3VycmVudENvbG9yXCJcbiAgfVxuKSB9KSwgTXUgPSAoKSA9PiAvKiBAX19QVVJFX18gKi8gYyhcInN2Z1wiLCB7IHZpZXdCb3g6IFwiMCAwIDI0IDI0XCIsIGZpbGw6IFwibm9uZVwiLCB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLCBjaGlsZHJlbjogLyogQF9fUFVSRV9fICovIGMoXG4gIFwicGF0aFwiLFxuICB7XG4gICAgZmlsbFJ1bGU6IFwiZXZlbm9kZFwiLFxuICAgIGNsaXBSdWxlOiBcImV2ZW5vZGRcIixcbiAgICBkOiBcIk0wLjI3Mjk1NCAxMS40MDQ3TDguODAwNjMgNS41MjYwOEM5LjA3MDUxIDUuMzg3NTIgOS41MTcgNS40NDM1NSA5LjcwOTAyIDUuNzU0OTRDOS45MDI0MyA2LjA2ODU5IDkuNzY5MzUgNi40NjUyNCA5LjQ5NzYxIDYuNjc0NTNMMi43MzkxOSAxMS4zMjA2SDIzLjM2NTNDMjMuNzMzNiAxMS4zMjA2IDI0IDExLjY3NTUgMjQgMTIuMDMwOEMyNCAxMi4zODg2IDIzLjcyMDEgMTIuNjc5OSAyMy4zNjUzIDEyLjY3OTlIMi43MzkxOUw5LjQ5NTU1IDE3LjMyNDdDOS44MzgyIDE3LjUzNzQgOS45MTI2OSAxNy45NjY2IDkuNzAxNTUgMTguMjU4NEM5LjQ4NjcgMTguNTg2NiA5LjEwNTA3IDE4LjU2ODYgOC43ODk1NSAxOC40MDY2TDAuMjcyOTU0IDEyLjUzNDZDLTAuMDc4NjY2OCAxMi4yMzg5IC0wLjA4MzExMzMgMTEuNjkyIDAuMjcyOTU0IDExLjQwNDdaXCIsXG4gICAgZmlsbDogXCJjdXJyZW50Q29sb3JcIlxuICB9XG4pIH0pLCBBdSA9ICgpID0+IC8qIEBfX1BVUkVfXyAqLyBjKFwic3ZnXCIsIHsgdmlld0JveDogXCIwIDAgMjUgMjRcIiwgZmlsbDogXCJub25lXCIsIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsIGNoaWxkcmVuOiAvKiBAX19QVVJFX18gKi8gYyhcbiAgXCJwYXRoXCIsXG4gIHtcbiAgICBmaWxsUnVsZTogXCJldmVub2RkXCIsXG4gICAgY2xpcFJ1bGU6IFwiZXZlbm9kZFwiLFxuICAgIGQ6IFwiTTE1LjIxNzIgMTguNDAxMkMxNS4xMDE2IDE4LjQ3MjcgMTQuOTgxMSAxOC41MTYxIDE0LjgyMDMgMTguNTExN0MxNC41NzY4IDE4LjUwNTEgMTQuMzc4OSAxOC4zODY3IDE0LjI2OTUgMTguMjE4OEMxNC4xNjAyIDE4LjA1MDggMTQuMTc3NCAxNy45MDkxIDE0LjIxMDkgMTcuNzQ2MUMxNC4yNDQ2IDE3LjU4MjYgMTQuMzU3IDE3LjQ0MDggMTQuNDk4MyAxNy4zMzIzTDE0LjUwMjUgMTcuMzI5MUwyMS4yNiAxMi42OTg4SDAuNjM0NzI1QzAuMjY2NzUzIDEyLjY5ODggMCAxMi4zODU3IDAgMTIuMDMxMkMwIDExLjY3NDEgMC4yODAyNzUgMTEuMzQzMiAwLjYzNDcyNSAxMS4zNDMySDIxLjI2TDE0LjUwNDYgNi43MTQxOEMxNC4xNjI3IDYuNTAyNTkgMTQuMDg3NSA2LjA3NTg3IDE0LjI5NzIgNS43ODQ3OUMxNC41MDQzIDUuNDM2NzEgMTQuOTI0OCA1LjM1NzgzIDE1LjIxMTkgNS41NzYyNEwyMy43MjY5IDExLjQyNzFDMjQuMDkxIDExLjc5MTIgMjQuMDk2NCAxMi4xODQ2IDIzLjcyNjkgMTIuNTU0TDE1LjIxNzIgMTguNDAxMlpcIixcbiAgICBmaWxsOiBcImN1cnJlbnRDb2xvclwiXG4gIH1cbikgfSksIHV1ID0gKCkgPT4gLyogQF9fUFVSRV9fICovIGMoXCJzdmdcIiwgeyB2aWV3Qm94OiBcIjAgMCAyNCAyNFwiLCBmaWxsOiBcIm5vbmVcIiwgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiwgY2hpbGRyZW46IC8qIEBfX1BVUkVfXyAqLyBjKFxuICBcInBhdGhcIixcbiAge1xuICAgIGZpbGxSdWxlOiBcImV2ZW5vZGRcIixcbiAgICBjbGlwUnVsZTogXCJldmVub2RkXCIsXG4gICAgZDogXCJNMTEuMzkyIDAuMjgyMDU3TDUuNTIwMTEgOC44MjUzOUw1LjUxNjM4IDguODMyNjFDNS4zNjcyMyA5LjEyMTk2IDUuNDM5MjUgOS41NDc3NyA1LjczODE5IDkuNzY1MjVMNS43NDc0NCA5Ljc3MTk4TDUuNzU3NzMgOS43NzY5N0M1LjkwODY5IDkuODUwMTggNi4wOTA2MiA5Ljg2NjEgNi4yNTkyNSA5LjgzMTY2QzYuNDI4NDIgOS43OTcxMiA2LjU5NTMxIDkuNzA5NTMgNi43MDkxNiA5LjU2MjI5TDYuNzEzNDIgOS41NTY3OEwxMS4zMDEgMi45MDk3MVYyMy4zMzg1QzExLjMwMSAyMy43MDkzIDExLjYwNjUgMjQgMTEuOTc5IDI0QzEyLjM1MTUgMjQgMTIuNjU3IDIzLjcwOTMgMTIuNjU3IDIzLjMzODVWMi44NTA0OUwxNy4yNDMxIDkuNDk0OTNDMTcuNDYzOSA5Ljg0ODQ3IDE3LjkwOTIgOS45MjcyOCAxOC4yMTQ1IDkuNzA5OTFDMTguNTc2MiA5LjQ5NTQyIDE4LjY2MTMgOS4wNTc0NyAxOC40MzEzIDguNzU2NDlMMTIuNTY2IDAuMjgxOTFDMTIuMTg4OSAtMC4wOTUxNTE5IDExLjc2ODcgLTAuMDk0NjE1OSAxMS4zOTIgMC4yODIwNTdaXCIsXG4gICAgZmlsbDogXCJjdXJyZW50Q29sb3JcIlxuICB9XG4pIH0pLCB6dSA9ICgpID0+IC8qIEBfX1BVUkVfXyAqLyBjKFwic3ZnXCIsIHsgdmlld0JveDogXCIwIDAgMjQgMjRcIiwgZmlsbDogXCJub25lXCIsIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsIGNoaWxkcmVuOiAvKiBAX19QVVJFX18gKi8gYyhcbiAgXCJwYXRoXCIsXG4gIHtcbiAgICBmaWxsUnVsZTogXCJldmVub2RkXCIsXG4gICAgY2xpcFJ1bGU6IFwiZXZlbm9kZFwiLFxuICAgIGQ6IFwiTTcuOTYzMjMgMy4xNzYzN0M3LjI5OTM3IDQuMzAxMjQgNy4xODAzMyA1LjYxMzg0IDcuMTgwMzMgNi4yODU3MVYxNy43MTQzQzcuMTgwMzMgMTguMDI5OSA2LjkxNjEgMTguMjg1NyA2LjU5MDE2IDE4LjI4NTdDNi4yNjQyMyAxOC4yODU3IDYgMTguMDI5OSA2IDE3LjcxNDNWNi4yODU3MUM2IDUuNTI5MDIgNi4xMjY4NiAzLjk4NDQ3IDYuOTM4NDEgMi42MDkzNUM3Ljc3NjY1IDEuMTg5MDEgOS4zMjAxOSAwIDEyIDBDMTQuNjc5OCAwIDE2LjIyMzQgMS4xODkwMSAxNy4wNjE2IDIuNjA5MzVDMTcuODczMSAzLjk4NDQ3IDE4IDUuNTI5MDIgMTggNi4yODU3MVYxOS42MTlDMTggMjAuMjM0NyAxNy44NjczIDIxLjMxMjYgMTcuMjI2NSAyMi4yNTQ4QzE2LjU1OTQgMjMuMjM1NiAxNS4zODY2IDI0IDEzLjQ3NTQgMjRDMTEuNTY0MiAyNCAxMC4zOTE0IDIzLjIzNTYgOS43MjQzMyAyMi4yNTQ4QzkuMDgzNTUgMjEuMzEyNiA4Ljk1MDgyIDIwLjIzNDcgOC45NTA4MiAxOS42MTlWOS4xNDI4NkM4Ljk1MDgyIDkuMTM1MTIgOC45NTA4MiA5LjEyNzE5IDguOTUwODEgOS4xMTkwOEM4Ljk1MDY1IDguNzI1NCA4Ljk1MDMxIDcuOTAxNzggOS4zMTcxMiA3LjE2Nzc3QzkuNTExMSA2Ljc3OTYxIDkuODExNjYgNi40MDYxOCAxMC4yNjkzIDYuMTMzNzVDMTAuNzI1NiA1Ljg2MjA5IDExLjI5ODggNS43MTQyOSAxMiA1LjcxNDI5QzEyLjcwMTIgNS43MTQyOSAxMy4yNzQ0IDUuODYyMDkgMTMuNzMwNyA2LjEzMzc1QzE0LjE4ODMgNi40MDYxOCAxNC40ODg5IDYuNzc5NjEgMTQuNjgyOSA3LjE2Nzc3QzE1LjA0OTcgNy45MDE3OCAxNS4wNDk0IDguNzI1NCAxNS4wNDkyIDkuMTE5MDhDMTUuMDQ5MiA5LjEyNzE5IDE1LjA0OTIgOS4xMzUxMiAxNS4wNDkyIDkuMTQyODZWMTcuNzE0M0MxNS4wNDkyIDE4LjAyOTkgMTQuNzg1IDE4LjI4NTcgMTQuNDU5IDE4LjI4NTdDMTQuMTMzMSAxOC4yODU3IDEzLjg2ODkgMTguMDI5OSAxMy44Njg5IDE3LjcxNDNWOS4xNDI4NkMxMy44Njg5IDguNzMyNjkgMTMuODYwOCA4LjE0NjU5IDEzLjYyMDQgNy42NjU1NkMxMy41MDcgNy40Mzg2NCAxMy4zNDY1IDcuMjQ2NiAxMy4xMTI1IDcuMTA3MzJDMTIuODc3MyA2Ljk2NzI4IDEyLjUyODMgNi44NTcxNCAxMiA2Ljg1NzE0QzExLjQ3MTcgNi44NTcxNCAxMS4xMjI3IDYuOTY3MjggMTAuODg3NSA3LjEwNzMyQzEwLjY1MzUgNy4yNDY2IDEwLjQ5MyA3LjQzODY0IDEwLjM3OTYgNy42NjU1NkMxMC4xMzkyIDguMTQ2NTkgMTAuMTMxMSA4LjczMjY5IDEwLjEzMTEgOS4xNDI4NlYxOS42MTlDMTAuMTMxMSAyMC4xMTQ1IDEwLjI0NDMgMjAuOTQxNCAxMC43MTAxIDIxLjYyNjJDMTEuMTQ5NiAyMi4yNzIzIDExLjk0NCAyMi44NTcxIDEzLjQ3NTQgMjIuODU3MUMxNS4wMDY4IDIyLjg1NzEgMTUuODAxMyAyMi4yNzIzIDE2LjI0MDcgMjEuNjI2MkMxNi43MDY1IDIwLjk0MTQgMTYuODE5NyAyMC4xMTQ1IDE2LjgxOTcgMTkuNjE5VjYuMjg1NzFDMTYuODE5NyA1LjYxMzg0IDE2LjcwMDYgNC4zMDEyNCAxNi4wMzY4IDMuMTc2MzdDMTUuMzk5NiAyLjA5NjcgMTQuMjM4MiAxLjE0Mjg2IDEyIDEuMTQyODZDOS43NjE3NyAxLjE0Mjg2IDguNjAwNCAyLjA5NjcgNy45NjMyMyAzLjE3NjM3WlwiLFxuICAgIGZpbGw6IFwiY3VycmVudENvbG9yXCJcbiAgfVxuKSB9KSwgaHUgPSAoKSA9PiAvKiBAX19QVVJFX18gKi8gYyhcInN2Z1wiLCB7IHZpZXdCb3g6IFwiMCAwIDI0IDI0XCIsIGZpbGw6IFwibm9uZVwiLCB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLCBjaGlsZHJlbjogLyogQF9fUFVSRV9fICovIGMoXG4gIFwicGF0aFwiLFxuICB7XG4gICAgZmlsbFJ1bGU6IFwiZXZlbm9kZFwiLFxuICAgIGNsaXBSdWxlOiBcImV2ZW5vZGRcIixcbiAgICBkOiBcIk0xMy42IDIyLjZWMS40SDEwLjRWMjIuNkgxMy42Wk05IDBIMTVWMjRIOVYwWk00LjYgOS40VjIyLjZIMS40VjkuNEg0LjZaTTYgOEgwVjI0SDZWOFpNMjIuNiAxNy40VjIyLjZIMTkuNFYxNy40SDIyLjZaTTI0IDE2SDE4VjI0SDI0VjE2WlwiLFxuICAgIGZpbGw6IFwiY3VycmVudGNvbG9yXCJcbiAgfVxuKSB9KSwgT3UgPSAoKSA9PiAvKiBAX19QVVJFX18gKi8gZTEoXCJzdmdcIiwgeyB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLCB2aWV3Qm94OiBcIjAgMCAyNCAyNFwiLCBmaWxsOiBcIm5vbmVcIiwgY2hpbGRyZW46IFtcbiAgLyogQF9fUFVSRV9fICovIGMoXG4gICAgXCJwYXRoXCIsXG4gICAge1xuICAgICAgZmlsbFJ1bGU6IFwiZXZlbm9kZFwiLFxuICAgICAgY2xpcFJ1bGU6IFwiZXZlbm9kZFwiLFxuICAgICAgZDogXCJNOSAwSDE1VjI0SDlWMFpcIixcbiAgICAgIGZpbGw6IFwiY3VycmVudGNvbG9yXCJcbiAgICB9XG4gICksXG4gIC8qIEBfX1BVUkVfXyAqLyBjKFxuICAgIFwicGF0aFwiLFxuICAgIHtcbiAgICAgIGZpbGxSdWxlOiBcImV2ZW5vZGRcIixcbiAgICAgIGNsaXBSdWxlOiBcImV2ZW5vZGRcIixcbiAgICAgIGQ6IFwiTTYgOEgwVjI0SDZWOFpcIixcbiAgICAgIGZpbGw6IFwiY3VycmVudGNvbG9yXCJcbiAgICB9XG4gICksXG4gIC8qIEBfX1BVUkVfXyAqLyBjKFxuICAgIFwicGF0aFwiLFxuICAgIHtcbiAgICAgIGZpbGxSdWxlOiBcImV2ZW5vZGRcIixcbiAgICAgIGNsaXBSdWxlOiBcImV2ZW5vZGRcIixcbiAgICAgIGQ6IFwiTTI0IDE2SDE4VjI0SDI0VjE2WlwiLFxuICAgICAgZmlsbDogXCJjdXJyZW50Y29sb3JcIlxuICAgIH1cbiAgKVxuXSB9KSwgZnUgPSAoKSA9PiAvKiBAX19QVVJFX18gKi8gYyhcInN2Z1wiLCB7IHZpZXdCb3g6IFwiMCAwIDI0IDI0XCIsIGZpbGw6IFwibm9uZVwiLCB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLCBjaGlsZHJlbjogLyogQF9fUFVSRV9fICovIGMoXG4gIFwicGF0aFwiLFxuICB7XG4gICAgZmlsbFJ1bGU6IFwiZXZlbm9kZFwiLFxuICAgIGNsaXBSdWxlOiBcImV2ZW5vZGRcIixcbiAgICBkOiBcIk0yMS4xNDM4IDguNzA1MTlIMjEuNzg4M0MyMy4wMTE0IDguNzA1MTkgMjQgOS42NDQ1MiAyNCAxMC43MTU2VjEzLjE3MDJDMjQgMTQuMzUzIDIzLjAxNDEgMTUuMjk0OCAyMS43ODgzIDE1LjI5NDhIMjEuMTQzOFYxNy40NTE1QzIxLjE0MzggMTcuNzc4IDIwLjg3MTkgMTguMDM0OCAyMC41Mzg3IDE4LjAzNDhIMC42MDUxMDJDMC4yNzE4OTggMTguMDM0OCAwIDE3Ljc3OCAwIDE3LjQ1MTVWNi41NDg1NEMwIDYuMjIyIDAuMjcxODk4IDUuOTY1MiAwLjYwNTEwMiA1Ljk2NTJIMjAuNTM4N0MyMC44NzE5IDUuOTY1MiAyMS4xNDM4IDYuMjIxOTkgMjEuMTQzOCA2LjU0ODU0VjguNzA1MTlaTTEuMjY5NzMgMTYuODY4MUgxOS45MzM2VjcuMTMxODhIMS4yNjk3M1YxNi44NjgxWk0yMS44NDc4IDE0LjEyODFDMjIuMzQ3NiAxNC4xMjgxIDIyLjc4OTggMTMuNjk5OSAyMi43ODk4IDEzLjIyNzNWMTAuNzcyN0MyMi43ODk4IDEwLjMwMDEgMjIuMzQ3NiA5Ljg3MTg5IDIxLjg0NzggOS44NzE4OUgyMS4yMDMzVjE0LjEyODFIMjEuODQ3OFpcIixcbiAgICBmaWxsOiBcImN1cnJlbnRDb2xvclwiXG4gIH1cbikgfSksIGd1ID0gKCkgPT4gLyogQF9fUFVSRV9fICovIGMoXCJzdmdcIiwgeyB2aWV3Qm94OiBcIjAgMCAyNCAyNFwiLCBmaWxsOiBcIm5vbmVcIiwgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiwgY2hpbGRyZW46IC8qIEBfX1BVUkVfXyAqLyBjKFxuICBcInBhdGhcIixcbiAge1xuICAgIGZpbGxSdWxlOiBcImV2ZW5vZGRcIixcbiAgICBjbGlwUnVsZTogXCJldmVub2RkXCIsXG4gICAgZDogXCJNMjEuMTQzOCA4LjcwNTE5SDIxLjc4ODNDMjMuMDExNCA4LjcwNTE5IDI0IDkuNjQ0NTIgMjQgMTAuNzE1NlYxMy4xNzAyQzI0IDE0LjM1MyAyMy4wMTQxIDE1LjI5NDggMjEuNzg4MyAxNS4yOTQ4SDIxLjE0MzhWMTcuNDUxNUMyMS4xNDM4IDE3Ljc3OCAyMC44NzE5IDE4LjAzNDggMjAuNTM4NyAxOC4wMzQ4SDAuNjA1MTAyQzAuNDM3MDg1IDE4LjAzNDggMC4yODU1NjUgMTcuOTc4MSAwLjE3NTQ3MiAxNy44NzQ4QzAuMDY0OTQzMiAxNy43NzEyIDAgMTcuNjI0IDAgMTcuNDUxNVY2LjU0ODU0QzAgNi4yMjIgMC4yNzE4OTggNS45NjUyIDAuNjA1MTAyIDUuOTY1MkgyMC41Mzg3QzIwLjg3MTkgNS45NjUyIDIxLjE0MzggNi4yMjE5OSAyMS4xNDM4IDYuNTQ4NTRWOC43MDUxOVpNOS45MTgwNCAxNi44NjgxTDEyLjQ0MDYgNy4xMzE4OEgxNC4wMjI0TDExLjQ5OTkgMTYuODY4MUg5LjkxODA0Wk03LjEyMTQxIDE2Ljg2ODFMOS42NDM5OCA3LjEzMTg4SDExLjIyNThMOC43MDMyIDE2Ljg2ODFINy4xMjE0MVpNNC4yNjUyMiAxNi44NjgxTDYuNzg3ODMgNy4xMzE4OEg4LjM2OTYyTDUuODQ3MDUgMTYuODY4MUg0LjI2NTIyWk0xLjQwOTA3IDE2Ljg2ODFMMy45MzE2NCA3LjEzMTg4SDUuNTEzNDdMMi45OTA5IDE2Ljg2ODFIMS40MDkwN1pNMi42NTY5OCA3LjEzMTg4TDEuMjEwMjQgMTIuNjMyVjcuMTMxODhIMi42NTY5OFpNMTIuODMzNyAxNi44NjgxSDE5LjkzMzZWNy4xMzE4OEgxNS4zNTYzTDEyLjgzMzcgMTYuODY4MVpNMjEuNzg4MyAxNC4xMjgxQzIyLjI4ODEgMTQuMTI4MSAyMi43MzAzIDEzLjY5OTkgMjIuNzMwMyAxMy4yMjczVjEwLjc3MjdDMjIuNzMwMyAxMC4zMDAxIDIyLjI4ODEgOS44NzE4OSAyMS43ODgzIDkuODcxODlIMjEuMTQzOFYxNC4xMjgxSDIxLjc4ODNaXCIsXG4gICAgZmlsbDogXCJjdXJyZW50Q29sb3JcIlxuICB9XG4pIH0pLCBDdSA9ICgpID0+IC8qIEBfX1BVUkVfXyAqLyBjKFwic3ZnXCIsIHsgdmlld0JveDogXCIwIDAgMjQgMjRcIiwgZmlsbDogXCJub25lXCIsIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsIGNoaWxkcmVuOiAvKiBAX19QVVJFX18gKi8gYyhcbiAgXCJwYXRoXCIsXG4gIHtcbiAgICBmaWxsUnVsZTogXCJldmVub2RkXCIsXG4gICAgY2xpcFJ1bGU6IFwiZXZlbm9kZFwiLFxuICAgIGQ6IFwiTTEzLjA3NzEgMC45MDAwNzJWMi43ODI5OEMxNC4yNTA0IDIuOTQ1NTkgMTUuMTY0NyAzLjMwMTYyIDE1Ljg4NDMgMy44MDg5OEMxNi42MzU2IDQuMzM4NzggMTcuMTY0OSA1LjAyNjY4IDE3LjU1NTggNS44MDk5NkMxOC4zMzEzIDcuMzYzODcgMTguNTcyMyA5LjMyMzM3IDE4LjkyMDcgMTEuMTkzNUMxOS4yNzA0IDEzLjA3MDYgMTkuOTQ0NCAxNS4zMTggMjAuNTMyOSAxNy4xMDA0QzIwLjg3NTIgMTguMTM3MiAyMS4yMzAzIDE5LjE3MDQgMjEuNjIwOCAyMC4xOTAyQzIxLjcyNDYgMjAuNDY4MyAyMS42ODg5IDIwLjc5MDYgMjEuNTIxMyAyMS4wNDQ1QzIxLjM1IDIxLjMwMzggMjEuMDQ4MyAyMS40ODE1IDIwLjY0NDIgMjEuNDgxNUgxNS41NTkxQzE0LjQ3MDMgMjQuODM5NSA5LjUyODEzIDI0LjgzOTUgOC40MzkyNSAyMS40ODE1SDMuMzU0MjdDMi45NTAxNyAyMS40ODE1IDIuNjQ4NDQgMjEuMzAzOCAyLjQ3NzE3IDIxLjA0NDVDMi4zMDc4MyAyMC43ODgxIDIuMjc0OTYgMjAuNDYwMiAyLjM4Mzc5IDIwLjE3NDFDMi43NjgxNyAxOS4xNTgzIDMuMTI1MSAxOC4xMzE2IDMuNDY1NTYgMTcuMTAwNEM0LjA1NDAxIDE1LjMxOCA0LjcyOCAxMy4wNzA2IDUuMDc3NyAxMS4xOTM1QzUuNDI2MSA5LjMyMzMyIDUuNjY3MTYgNy4zNjM4MSA2LjQ0MjU5IDUuODA5OTJDNi44MzM0NyA1LjAyNjY0IDcuMzYyNzQgNC4zMzg3NiA4LjExNDEzIDMuODA4OTZDOC44MzM3IDMuMzAxNjEgOS43NDc5NiAyLjk0NTYgMTAuOTIxNCAyLjc4Mjk4VjAuOTAwMDcyTDEwLjkyNjkgMC44NzgzNjlDMTEuMDM2IDAuNDUzODcgMTEuNDQzNyAwIDExLjk5OTIgMEMxMi41NTQ4IDAgMTIuOTYyNSAwLjQ1Mzg2OSAxMy4wNzE1IDAuODc4MzY5TDEzLjA3NzEgMC45MDAwNzJaTTkuOTEzNTcgMjEuNDkxSDE0LjA4NDhDMTMuMTk2NiAyMy4wNzEyIDEwLjgwMTggMjMuMDcxMiA5LjkxMzU3IDIxLjQ5MVpNMy44NDI5NCAyMC4xMjk2SDIwLjE1NTVDMTkuMTE1IDE3LjMxMDkgMTguMTQ0NiAxNC40MDg0IDE3LjU5MTggMTEuNDQxMUMxNy4yNTUzIDkuNjM1MDQgMTcuMTI5NCA3LjcyMTg4IDE2LjE3OTEgNi4xMDQ3N0MxNS4zNzkzIDQuNzQzNzUgMTMuNzA0NiA0LjA0NDA0IDExLjk5ODcgNC4wNDQzNEMxMC4yOTI4IDQuMDQ0NjUgOC42MTg0NSA0Ljc0NDk5IDcuODE5MzUgNi4xMDQ3N0M2Ljg2OTAyIDcuNzIxODcgNi43NDMxMyA5LjYzNTA0IDYuNDA2NjggMTEuNDQxMUM1Ljg1Mzg4IDE0LjQwODQgNC44ODM0MyAxNy4zMTA5IDMuODQyOTQgMjAuMTI5NlpcIixcbiAgICBmaWxsOiBcImN1cnJlbnRjb2xvclwiXG4gIH1cbikgfSksIG11ID0gKCkgPT4gLyogQF9fUFVSRV9fICovIGUxKFwic3ZnXCIsIHsgdmlld0JveDogXCIwIDAgMTMgMTZcIiwgZmlsbDogXCJub25lXCIsIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsIGNoaWxkcmVuOiBbXG4gIC8qIEBfX1BVUkVfXyAqLyBjKFxuICAgIFwicGF0aFwiLFxuICAgIHtcbiAgICAgIGQ6IFwiTTguOSAxNC4xQzguOSAxNC4yIDguOSAxNC4yIDguOCAxNC4zQzguNSAxNS4zIDcuNSAxNiA2LjQgMTZDNS4zIDE2IDQuMyAxNS4zIDQgMTQuM0M0IDE0LjIgNCAxNC4yIDMuOSAxNC4xSDguOVpcIixcbiAgICAgIGZpbGw6IFwiY3VycmVudENvbG9yXCJcbiAgICB9XG4gICksXG4gIC8qIEBfX1BVUkVfXyAqLyBjKFxuICAgIFwicGF0aFwiLFxuICAgIHtcbiAgICAgIGQ6IFwiTTEyLjggMTEuOUMxMi44IDEyLjEgMTIuOCAxMi4yIDEyLjcgMTIuM0MxMi42IDEyLjUgMTIuNSAxMi41IDEyLjMgMTIuNUgwLjZDMC40IDEyLjUgMC4zIDEyLjQgMC4yIDEyLjNDMCAxMi4zIDAgMTIuMSAwIDExLjlMMS42IDYuMkMxLjcgNS43IDEuOSA1LjEgMiA0LjVWNC4zQzIuNCAyLjYgMy44IDEuMiA1LjcgMVYwLjVDNS43IDAuMiA2LjIgMCA2LjUgMEM2LjggMCA3LjIgMC4yIDcuMyAwLjRWMUM5LjMgMS4yIDEwLjYgMi43IDEwLjkgNC41QzExIDUgMTEgNS42IDExLjIgNi4yTDEyLjggMTEuOVpcIixcbiAgICAgIGZpbGw6IFwiY3VycmVudENvbG9yXCJcbiAgICB9XG4gIClcbl0gfSksIEx1ID0gKCkgPT4gLyogQF9fUFVSRV9fICovIGMoXCJzdmdcIiwgeyB2aWV3Qm94OiBcIjAgMCAyNCAyNFwiLCBmaWxsOiBcIm5vbmVcIiwgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiwgY2hpbGRyZW46IC8qIEBfX1BVUkVfXyAqLyBjKFxuICBcInBhdGhcIixcbiAge1xuICAgIGZpbGxSdWxlOiBcImV2ZW5vZGRcIixcbiAgICBjbGlwUnVsZTogXCJldmVub2RkXCIsXG4gICAgZDogXCJNMTMuMDc3MSAwLjkwMDA3MlYyLjc4Mjk4QzE0LjI1MDQgMi45NDU1OSAxNS4xNjQ3IDMuMzAxNjIgMTUuODg0MyAzLjgwODk4QzE2LjYzNTYgNC4zMzg3OCAxNy4xNjQ5IDUuMDI2NjggMTcuNTU1OCA1LjgwOTk2QzE4LjMzMTMgNy4zNjM4NyAxOC41NzIzIDkuMzIzMzcgMTguOTIwNyAxMS4xOTM1QzE5LjI3MDQgMTMuMDcwNiAxOS45NDQ0IDE1LjMxOCAyMC41MzI5IDE3LjEwMDRDMjAuODc1MiAxOC4xMzcyIDIxLjIzMDMgMTkuMTcwNCAyMS42MjA4IDIwLjE5MDJDMjEuNzI0NiAyMC40NjgzIDIxLjY4ODkgMjAuNzkwNiAyMS41MjEzIDIxLjA0NDVDMjEuMzUgMjEuMzAzOCAyMS4wNDgzIDIxLjQ4MTUgMjAuNjQ0MiAyMS40ODE1SDE1LjU1OTFDMTQuNDcwMyAyNC44Mzk1IDkuNTI4MTMgMjQuODM5NSA4LjQzOTI1IDIxLjQ4MTVIMy4zNTQyN0MyLjk1MDE3IDIxLjQ4MTUgMi42NDg0NCAyMS4zMDM4IDIuNDc3MTcgMjEuMDQ0NUMyLjMwNzgzIDIwLjc4ODEgMi4yNzQ5NiAyMC40NjAyIDIuMzgzNzkgMjAuMTc0MUMyLjc2ODE3IDE5LjE1ODMgMy4xMjUxIDE4LjEzMTYgMy40NjU1NiAxNy4xMDA0QzQuMDU0MDEgMTUuMzE4IDQuNzI4IDEzLjA3MDYgNS4wNzc3IDExLjE5MzVDNS40MjYxIDkuMzIzMzIgNS42NjcxNiA3LjM2MzgxIDYuNDQyNTkgNS44MDk5MkM2LjgzMzQ3IDUuMDI2NjQgNy4zNjI3NCA0LjMzODc2IDguMTE0MTMgMy44MDg5NkM4LjgzMzcgMy4zMDE2MSA5Ljc0Nzk2IDIuOTQ1NiAxMC45MjE0IDIuNzgyOThWMC45MDAwNzJMMTAuOTI2OSAwLjg3ODM2OUMxMS4wMzYgMC40NTM4NyAxMS40NDM3IDAgMTEuOTk5MiAwQzEyLjU1NDggMCAxMi45NjI1IDAuNDUzODY5IDEzLjA3MTUgMC44NzgzNjlMMTMuMDc3MSAwLjkwMDA3MlpNOS45MTM1NyAyMS40OTFIMTQuMDg0OEMxMy4xOTY2IDIzLjA3MTIgMTAuODAxOCAyMy4wNzEyIDkuOTEzNTcgMjEuNDkxWk0zLjg0Mjk0IDIwLjEyOTZIMjAuMTU1NUMxOS4xMTUgMTcuMzEwOSAxOC4xNDQ2IDE0LjQwODQgMTcuNTkxOCAxMS40NDExQzE3LjI1NTMgOS42MzUwNCAxNy4xMjk0IDcuNzIxODggMTYuMTc5MSA2LjEwNDc3QzE1LjM3OTMgNC43NDM3NSAxMy43MDQ2IDQuMDQ0MDQgMTEuOTk4NyA0LjA0NDM0QzEwLjI5MjggNC4wNDQ2NSA4LjYxODQ1IDQuNzQ0OTkgNy44MTkzNSA2LjEwNDc3QzYuODY5MDIgNy43MjE4NyA2Ljc0MzEzIDkuNjM1MDQgNi40MDY2OCAxMS40NDExQzUuODUzODggMTQuNDA4NCA0Ljg4MzQzIDE3LjMxMDkgMy44NDI5NCAyMC4xMjk2WlwiLFxuICAgIGZpbGw6IFwiY3VycmVudGNvbG9yXCJcbiAgfVxuKSB9KSwgdnUgPSAoKSA9PiAvKiBAX19QVVJFX18gKi8gYyhcInN2Z1wiLCB7IHZpZXdCb3g6IFwiMCAwIDI0IDI0XCIsIGZpbGw6IFwibm9uZVwiLCB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLCBjaGlsZHJlbjogLyogQF9fUFVSRV9fICovIGMoXG4gIFwicGF0aFwiLFxuICB7XG4gICAgZmlsbFJ1bGU6IFwiZXZlbm9kZFwiLFxuICAgIGNsaXBSdWxlOiBcImV2ZW5vZGRcIixcbiAgICBkOiBcIk00Ljg5NDc0IDI0SDE5LjA0NjFDMTkuMzQyMSAyNCAxOS41Nzg5IDIzLjc2MDYgMTkuNTc4OSAyMy40NjEzVjYuODIyOTNIMjAuNDY3MUMyMC43NjMyIDYuODIyOTMgMjEgNi41ODM1NCAyMSA2LjI4NDI4VjMuNDExNDdDMjEgMy4xMTIyMiAyMC43NjMyIDIuODcyODIgMjAuNDY3MSAyLjg3MjgySDE2LjczNjhDMTYuNSAxLjI1Njg2IDE1LjA3OSAwIDEzLjQyMTEgMEgxMC41NzlDOC45MjEwOCAwIDcuNTAwMDEgMS4yNTY4NiA3LjI2MzE2IDIuODcyODJIMy41MzI5MUMzLjIzNjg2IDIuODcyODIgMyAzLjExMjIyIDMgMy40MTE0N1Y2LjI4NDI4QzMgNi41ODM1NCAzLjIzNjg2IDYuODIyOTMgMy41MzI5MSA2LjgyMjkzSDQuNDIxMDdWMjMuNDYxM0M0LjM2MTg2IDIzLjc2MDYgNC41OTg2OSAyNCA0Ljg5NDc0IDI0Wk0xOC41MTMyIDIyLjg2MjhINS40Mjc2NVY2LjgyMjkzSDE4LjUxMzJWMjIuODYyOFpNMTAuNTc5IDEuMDc3MzFIMTMuNDIxMUMxNC40ODY5IDEuMDc3MzEgMTUuMzc1IDEuNzk1NTEgMTUuNjExOSAyLjgxMjk2SDguMzI4OTVDOC42MjUgMS44NTUzNiA5LjUxMzE5IDEuMDc3MzEgMTAuNTc5IDEuMDc3MzFaTTQuMDY1ODIgMy45NTAxM0g3LjczNjg0SDE2LjIwNEgxOS44NzVWNS42ODU3OEgxOC45ODY4SDQuODM1NTVIMy45NDczOVYzLjk1MDEzSDQuMDY1ODJaTTkuNjMxNTEgMjEuNTQ1OEM5LjkyNzU2IDIxLjU0NTggMTAuMTY0NCAyMS4zMDY0IDEwLjE2NDQgMjEuMDA3MlY5LjE1NzE3QzEwLjE2NDQgOC44NTc5MyA5LjkyNzU2IDguNjE4NTMgOS42MzE1MSA4LjYxODUzQzkuMzM1NDUgOC42MTg1MyA5LjA5ODYzIDguODU3OTMgOS4wOTg2MyA5LjE1NzE3VjIxLjAwNzJDOS4wOTg2MyAyMS4zMDY0IDkuMzM1NDUgMjEuNTQ1OCA5LjYzMTUxIDIxLjU0NThaTTE0LjkwMTIgMjEuMDA3MkMxNC45MDEyIDIxLjMwNjQgMTQuNjY0NCAyMS41NDU4IDE0LjM2ODMgMjEuNTQ1OEMxNC4wNzIzIDIxLjU0NTggMTMuODM1NCAyMS4zMDY0IDEzLjgzNTQgMjEuMDA3MlY5LjE1NzE3QzEzLjgzNTQgOC44NTc5MyAxNC4wNzIzIDguNjE4NTMgMTQuMzY4MyA4LjYxODUzQzE0LjY2NDQgOC42MTg1MyAxNC45MDEyIDguODU3OTMgMTQuOTAxMiA5LjE1NzE3VjIxLjAwNzJaXCIsXG4gICAgZmlsbDogXCJjdXJyZW50Q29sb3JcIlxuICB9XG4pIH0pLCBxdSA9ICgpID0+IC8qIEBfX1BVUkVfXyAqLyBlMShcInN2Z1wiLCB7IHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsIHZpZXdCb3g6IFwiMCAwIDI0IDI0XCIsIGZpbGw6IFwibm9uZVwiLCBjaGlsZHJlbjogW1xuICAvKiBAX19QVVJFX18gKi8gYyhcbiAgICBcInBhdGhcIixcbiAgICB7XG4gICAgICBmaWxsUnVsZTogXCJldmVub2RkXCIsXG4gICAgICBjbGlwUnVsZTogXCJldmVub2RkXCIsXG4gICAgICBkOiBcIk0xOS42IDguNFYyMy40QzE5LjYgMjMuNyAxOS40IDIzLjkgMTkuMSAyMy45SDQuOUM0LjYgMjMuOSA0LjQgMjMuNyA0LjQgMjMuNFY4LjRIMTkuNlpcIixcbiAgICAgIGZpbGw6IFwiY3VycmVudENvbG9yXCJcbiAgICB9XG4gICksXG4gIC8qIEBfX1BVUkVfXyAqLyBjKFxuICAgIFwicGF0aFwiLFxuICAgIHtcbiAgICAgIGZpbGxSdWxlOiBcImV2ZW5vZGRcIixcbiAgICAgIGNsaXBSdWxlOiBcImV2ZW5vZGRcIixcbiAgICAgIGQ6IFwiTTIwLjUgMi45SDE2LjhDMTYuNSAxLjMgMTUuMSAwIDEzLjQgMEgxMC42QzguOSAwIDcuNSAxLjMgNy4zIDIuOUgzLjVDMy4yIDIuOSAzIDMuMSAzIDMuNFY2LjNDMyA2LjYgMy4yIDYuOCAzLjUgNi44SDIwLjRDMjAuNyA2LjggMjAuOSA2LjYgMjAuOSA2LjNWMy40QzIxIDMuMSAyMC44IDIuOSAyMC41IDIuOVpNOSAyLjhDOS4zIDEuOCAxMC4yIDEuNiAxMS4yIDEuNkgxMi42QzEzLjcgMS42IDE0LjYgMS44IDE0LjggMi44SDlaXCIsXG4gICAgICBmaWxsOiBcImN1cnJlbnRDb2xvclwiXG4gICAgfVxuICApXG5dIH0pLCB5dSA9ICgpID0+IC8qIEBfX1BVUkVfXyAqLyBjKFwic3ZnXCIsIHsgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiwgdmlld0JveDogXCIwIDAgNDggNDhcIiwgZmlsbDogXCJub25lXCIsIGNoaWxkcmVuOiAvKiBAX19QVVJFX18gKi8gYyhcbiAgXCJwYXRoXCIsXG4gIHtcbiAgICBmaWxsUnVsZTogXCJldmVub2RkXCIsXG4gICAgY2xpcFJ1bGU6IFwiZXZlbm9kZFwiLFxuICAgIGQ6IFwiTTEzLjQgMTMuNFYyMS42SDE4LjZWMTMuNEgxMy40Wk0xMyAxMkMxMi40NDc3IDEyIDEyIDEyLjQ0NzcgMTIgMTNWMjJDMTIgMjIuNTUyMyAxMi40NDc3IDIzIDEzIDIzSDE5QzE5LjU1MjMgMjMgMjAgMjIuNTUyMyAyMCAyMlYxM0MyMCAxMi40NDc3IDE5LjU1MjMgMTIgMTkgMTJIMTNaTTEzLjQgMzQuNlYyNi40SDI0LjZWMzQuNkgxMy40Wk0xMiAyNkMxMiAyNS40NDc3IDEyLjQ0NzcgMjUgMTMgMjVIMjVDMjUuNTUyMyAyNSAyNiAyNS40NDc3IDI2IDI2VjM1QzI2IDM1LjU1MjMgMjUuNTUyMyAzNiAyNSAzNkgxM0MxMi40NDc3IDM2IDEyIDM1LjU1MjMgMTIgMzVWMjZaTTI5LjQgMzQuNlYyNi40SDM0LjZWMzQuNkgyOS40Wk0yOCAyNkMyOCAyNS40NDc3IDI4LjQ0NzcgMjUgMjkgMjVIMzVDMzUuNTUyMyAyNSAzNiAyNS40NDc3IDM2IDI2VjM1QzM2IDM1LjU1MjMgMzUuNTUyMyAzNiAzNSAzNkgyOUMyOC40NDc3IDM2IDI4IDM1LjU1MjMgMjggMzVWMjZaTTIzLjQgMjEuNlYxMy40SDM0LjZWMjEuNkgyMy40Wk0yMiAxM0MyMiAxMi40NDc3IDIyLjQ0NzcgMTIgMjMgMTJIMzVDMzUuNTUyMyAxMiAzNiAxMi40NDc3IDM2IDEzVjIyQzM2IDIyLjU1MjMgMzUuNTUyMyAyMyAzNSAyM0gyM0MyMi40NDc3IDIzIDIyIDIyLjU1MjMgMjIgMjJWMTNaXCIsXG4gICAgZmlsbDogXCJjdXJyZW50Q29sb3JcIlxuICB9XG4pIH0pLCB3dSA9ICgpID0+IC8qIEBfX1BVUkVfXyAqLyBjKFwic3ZnXCIsIHsgdmlld0JveDogXCIwIDAgMjQgMjRcIiwgZmlsbDogXCJub25lXCIsIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsIGNoaWxkcmVuOiAvKiBAX19QVVJFX18gKi8gYyhcbiAgXCJwYXRoXCIsXG4gIHtcbiAgICBmaWxsUnVsZTogXCJldmVub2RkXCIsXG4gICAgY2xpcFJ1bGU6IFwiZXZlbm9kZFwiLFxuICAgIGQ6IFwiTTE2LjQ1NzEgMy4xNzY0M0MxNS44ODYyIDMuMTc2MzkgMTUuNDk1OCAzLjM0MzQzIDE1LjIxNjQgMy41Njg5QzE0LjkyODggMy44MDA5MSAxNC43MjI3IDQuMTI0NDYgMTQuNTc3NSA0LjQ4NjU0QzE0LjI4MjUgNS4yMjE5NyAxNC4yODM3IDYuMDAwOTMgMTQuMjg1MyA2LjA5MzczVjYuMDkzNzRMMTQuMjg1NSA2LjA5Nzk4TDE0LjY5MDUgMTMuNjAyMkMxNS42MjUgMTIuMjc1MiAxNy4xNDMyIDExLjQxMjEgMTguODU3MSAxMS40MTIxQzE5Ljg0NzggMTEuNDEyMSAyMC43NzMgMTEuNzAwNSAyMS41NTggMTIuMkwxOS40NzM1IDUuNzYyNDFDMTkuNDU4NCA1LjcxNTg4IDE5LjQ0NjcgNS42NzM0MSAxOS40Mzc2IDUuNjQwMDRDMTkuMzk2MSA1LjQ4NzczIDE5LjIwMTMgNC44NTI4NiAxOC43MzM0IDQuMjY2NDlDMTguMjc4OCAzLjY5NjkyIDE3LjU3MzUgMy4xNzY1IDE2LjQ1NzEgMy4xNzY0M1pNMjMuNDIyNSAxNC4yNjY0QzIzLjQxNzcgMTQuMjMyOSAyMy40MSAxNC4xOTkzIDIzLjM5OTIgMTQuMTY2TDIwLjU1NzcgNS4zOTA0MkMyMC41NTIgNS4zNzI4NCAyMC41NDY2IDUuMzUzODYgMjAuNTM4IDUuMzIyMTdDMjAuNDc2NSA1LjA5Njg5IDIwLjIyNzQgNC4yODU0IDE5LjYxNjUgMy41MTk3NkMxOC45OTIxIDIuNzM3MzMgMTcuOTgzNiAyLjAwMDEgMTYuNDU3MiAyQzE1LjY0ODQgMS45OTk5NSAxNS4wMDU2IDIuMjQ0MjggMTQuNTExNCAyLjY0Mjk3QzE0LjAyNTMgMy4wMzUxMyAxMy43MTczIDMuNTQ4NTQgMTMuNTIxMSA0LjAzNzU1QzEzLjM1NzYgNC40NDUyMyAxMy4yNjQzIDQuODU1MTcgMTMuMjExMiA1LjIwMjk4QzEyLjg1MjYgNS4wMzMxOCAxMi40MzQ0IDQuOTQxNzYgMTIgNC45NDE3NkMxMS41NjU2IDQuOTQxNzYgMTEuMTQ3NCA1LjAzMzE4IDEwLjc4ODggNS4yMDI5OEMxMC43MzU3IDQuODU1MTcgMTAuNjQyNCA0LjQ0NTIzIDEwLjQ3ODkgNC4wMzc1NUMxMC4yODI3IDMuNTQ4NTQgOS45NzQ3IDMuMDM1MTMgOS40ODg2MiAyLjY0Mjk3QzguOTk0NDQgMi4yNDQyOCA4LjM1MTYgMS45OTk5NSA3LjU0MjgzIDJDNi4wMTY0MyAyLjAwMDEgNS4wMDc5IDIuNzM3MzMgNC4zODM1MyAzLjUxOTc2QzMuNzcyNTYgNC4yODU0IDMuNTIzNDYgNS4wOTY4OSAzLjQ2MjA0IDUuMzIyMTdDMy40NTM0IDUuMzUzODYgMy40NDggNS4zNzI4NCAzLjQ0MjMxIDUuMzkwNDJMMC42MDA3OTkgMTQuMTY2QzAuNTkwMDIxIDE0LjE5OTMgMC41ODIyOTUgMTQuMjMyOSAwLjU3NzQ2NCAxNC4yNjY0QzAuMjA4NTE5IDE0Ljk5NjUgMCAxNS44MjYyIDAgMTYuNzA2MUMwIDE5LjYyOTggMi4zMDI1NCAyMiA1LjE0Mjg2IDIyQzcuOTc3NjYgMjIgMTAuMjc2OCAxOS42MzkgMTAuMjg1NyAxNi43MjMxTDEwLjQzNCAxMy45NzQ2QzEwLjUwODQgMTMuNzM2NCAxMC42MTA0IDEzLjUwOTYgMTAuNzM5NiAxMy4zMTE4QzExLjAyODQgMTIuODY5NyAxMS40MzU3IDEyLjU4ODYgMTIgMTIuNTg4NkMxMi41NjQzIDEyLjU4ODYgMTIuOTcxNiAxMi44Njk3IDEzLjI2MDQgMTMuMzExOEMxMy4zODk2IDEzLjUwOTYgMTMuNDkxNiAxMy43MzY0IDEzLjU2NiAxMy45NzQ2TDEzLjcxNDMgMTYuNzIzMUMxMy43MjMyIDE5LjYzOSAxNi4wMjIzIDIyIDE4Ljg1NzEgMjJDMjEuNjk3NSAyMiAyNCAxOS42Mjk4IDI0IDE2LjcwNjFDMjQgMTUuODI2MiAyMy43OTE1IDE0Ljk5NjUgMjMuNDIyNSAxNC4yNjY0Wk0xMy40NTE5IDExLjg2MUwxMy4xODU4IDYuOTMwNjFDMTMuMTU4MSA2Ljg2MTUxIDEzLjE0MjkgNi43ODU4IDEzLjE0MjkgNi43MDY0MUMxMy4xNDI5IDYuNjM5NDEgMTMuMTAzMyA2LjUwNjc1IDEyLjg5NTIgNi4zNjM5N0MxMi42OTExIDYuMjIzOTMgMTIuMzc2MyA2LjExODE5IDEyIDYuMTE4MTlDMTEuNjIzNyA2LjExODE5IDExLjMwODkgNi4yMjM5MyAxMS4xMDQ4IDYuMzYzOTdDMTAuODk2NyA2LjUwNjc1IDEwLjg1NzEgNi42Mzk0MSAxMC44NTcxIDYuNzA2NDFDMTAuODU3MSA2Ljc4NTggMTAuODQxOSA2Ljg2MTUxIDEwLjgxNDIgNi45MzA2MUwxMC41NDgxIDExLjg2MUMxMC45NDM2IDExLjU4NDMgMTEuNDI3NCAxMS40MTIxIDEyIDExLjQxMjFDMTIuNTcyNiAxMS40MTIxIDEzLjA1NjQgMTEuNTg0MyAxMy40NTE5IDExLjg2MVpNNy41NDI5IDMuMTc2NDNDOC4xMTM3NiAzLjE3NjM5IDguNTA0MTUgMy4zNDM0MyA4Ljc4MzYzIDMuNTY4OUM5LjA3MTIgMy44MDA5MSA5LjI3NzI4IDQuMTI0NDYgOS40MjI1MiA0LjQ4NjU0QzkuNzE3NTIgNS4yMjE5NyA5LjcxNjMgNi4wMDA5MyA5LjcxNDcgNi4wOTM3M1Y2LjA5Mzc0TDkuNzE0NDkgNi4wOTc5OEw5LjMwOTUgMTMuNjAyMkM4LjM3NDk3IDEyLjI3NTIgNi44NTY4MyAxMS40MTIxIDUuMTQyODYgMTEuNDEyMUM0LjE1MjIgMTEuNDEyMSAzLjIyNjk3IDExLjcwMDUgMi40NDIwNCAxMi4yTDQuNTI2NTMgNS43NjI0MUM0LjU0MTU5IDUuNzE1ODggNC41NTMyOSA1LjY3MzQxIDQuNTYyMzkgNS42NDAwNEM0LjYwMzkxIDUuNDg3NzMgNC43OTg3MyA0Ljg1Mjg2IDUuMjY2NjQgNC4yNjY0OUM1LjcyMTE2IDMuNjk2OTIgNi40MjY0OSAzLjE3NjUgNy41NDI5IDMuMTc2NDNaTTkuMTQyODYgMTYuNzA2MUM5LjE0Mjg2IDE4Ljk4MDEgNy4zNTIgMjAuODIzNiA1LjE0Mjg2IDIwLjgyMzZDMi45MzM3MiAyMC44MjM2IDEuMTQyODYgMTguOTgwMSAxLjE0Mjg2IDE2LjcwNjFDMS4xNDI4NiAxNC40MzIgMi45MzM3MiAxMi41ODg2IDUuMTQyODYgMTIuNTg4NkM3LjM1MiAxMi41ODg2IDkuMTQyODYgMTQuNDMyIDkuMTQyODYgMTYuNzA2MVpNMTguODU3MSAyMC44MjM2QzE2LjY0OCAyMC44MjM2IDE0Ljg1NzEgMTguOTgwMSAxNC44NTcxIDE2LjcwNjFDMTQuODU3MSAxNC40MzIgMTYuNjQ4IDEyLjU4ODYgMTguODU3MSAxMi41ODg2QzIxLjA2NjMgMTIuNTg4NiAyMi44NTcxIDE0LjQzMiAyMi44NTcxIDE2LjcwNjFDMjIuODU3MSAxOC45ODAxIDIxLjA2NjMgMjAuODIzNiAxOC44NTcxIDIwLjgyMzZaXCIsXG4gICAgZmlsbDogXCJjdXJyZW50Q29sb3JcIlxuICB9XG4pIH0pLCB4dSA9ICgpID0+IC8qIEBfX1BVUkVfXyAqLyBjKFwic3ZnXCIsIHsgdmlld0JveDogXCIwIDAgMjUgMjRcIiwgZmlsbDogXCJub25lXCIsIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsIGNoaWxkcmVuOiAvKiBAX19QVVJFX18gKi8gYyhcbiAgXCJwYXRoXCIsXG4gIHtcbiAgICBmaWxsUnVsZTogXCJldmVub2RkXCIsXG4gICAgY2xpcFJ1bGU6IFwiZXZlbm9kZFwiLFxuICAgIGQ6IFwiTTEuMTg5NDIgMTEuNzEzOUwxLjE5MTIyIDExLjcxMThMNC4wNTUzNCA4LjY5NTQyQzQuMTExMjYgOC42MjU3NSA0LjE4MDQgOC41Njg2NCA0LjI1ODY1IDguNTI3ODZDNC4zMzc5NyA4LjQ4NjUxIDQuNDI0OCA4LjQ2MjkyIDQuNTEzNTggOC40NTg3NUM0LjYwMjM3IDguNDU0NTkgNC42OTA5MSA4LjQ2OTk0IDQuNzczNTMgOC41MDM3M0M0Ljg1NjEzIDguNTM3NTIgNC45MzA4NCA4LjU4ODkyIDQuOTkzMDMgOC42NTQ0MkM1LjA1NTIxIDguNzE5OTEgNS4xMDM1NCA4Ljc5ODA3IDUuMTM1MTYgOC44ODM4MkM1LjE2Njc3IDguOTY5NTcgNS4xODEwNSA5LjA2MTE3IDUuMTc3MTcgOS4xNTI4NkM1LjE3MzI5IDkuMjQ0NTQgNS4xNTEzMiA5LjMzNDUgNS4xMTI1NCA5LjQxNzA0QzUuMDc0MjggOS40OTg0NyA1LjAyMDQyIDkuNTcxMDMgNC45NTQwOSA5LjYzMDExTDMuMTY4NDUgMTEuNTEwN0g5LjYzMzgyQzEwLjAwMTMgMTEuNTEwNyAxMC4yOTkxIDExLjgwODYgMTAuMjk5MSAxMi4xNzZDMTAuMjk5MSAxMi41NDM1IDEwLjAwMTMgMTIuODQxNCA5LjYzMzgyIDEyLjg0MTRIMy4xNjg0NUw0Ljk1NDA5IDE0LjcyMkM1LjAyMDQyIDE0Ljc4MTEgNS4wNzQyOCAxNC44NTM2IDUuMTEyNTQgMTQuOTM1QzUuMTUxMzIgMTUuMDE3NiA1LjE3MzI5IDE1LjEwNzUgNS4xNzcxNyAxNS4xOTkyQzUuMTgxMDUgMTUuMjkwOSA1LjE2Njc3IDE1LjM4MjUgNS4xMzUxNiAxNS40NjgzQzUuMTAzNTQgMTUuNTU0IDUuMDU1MjEgMTUuNjMyMiA0Ljk5MzAzIDE1LjY5NzdDNC45MzA4NCAxNS43NjMyIDQuODU2MTMgMTUuODE0NiA0Ljc3MzUzIDE1Ljg0ODRDNC42OTA5MSAxNS44ODIxIDQuNjAyMzcgMTUuODk3NSA0LjUxMzU4IDE1Ljg5MzNDNC40MjQ4IDE1Ljg4OTIgNC4zMzc5NyAxNS44NjU2IDQuMjU4NjUgMTUuODI0MkM0LjE4MDM3IDE1Ljc4MzQgNC4xMTEyIDE1LjcyNjMgNC4wNTUyNiAxNS42NTY2TDEuMTc5MTIgMTIuNjA4NUMwLjg5MzYxMyAxMi4zMDQgMC45MjcxMjQgMTIuMDA5OCAxLjE4OTQyIDExLjcxMzlaTTI0LjgxMDQgMTIuNjM4M0wyNC44MDg2IDEyLjY0MDNMMjEuOTQ0NSAxNS42NTY3QzIxLjg4ODYgMTUuNzI2NCAyMS44MTk0IDE1Ljc4MzUgMjEuNzQxMiAxNS44MjQzQzIxLjY2MTkgMTUuODY1NiAyMS41NzUxIDE1Ljg4OTIgMjEuNDg2MyAxNS44OTM0QzIxLjM5NzUgMTUuODk3NiAyMS4zMDg5IDE1Ljg4MjIgMjEuMjI2MyAxNS44NDg0QzIxLjE0MzcgMTUuODE0NiAyMS4wNjkgMTUuNzYzMiAyMS4wMDY4IDE1LjY5NzdDMjAuOTQ0NiAxNS42MzIyIDIwLjg5NjMgMTUuNTU0MSAyMC44NjQ3IDE1LjQ2ODNDMjAuODMzMSAxNS4zODI2IDIwLjgxODggMTUuMjkxIDIwLjgyMjcgMTUuMTk5M0MyMC44MjY2IDE1LjEwNzYgMjAuODQ4NSAxNS4wMTc2IDIwLjg4NzMgMTQuOTM1MUMyMC45MjU2IDE0Ljg1MzcgMjAuOTc5NCAxNC43ODExIDIxLjA0NTggMTQuNzIyTDIyLjgzMTQgMTIuODQxNEgxNi4zNjZDMTUuOTk4NiAxMi44NDE0IDE1LjcwMDcgMTIuNTQzNSAxNS43MDA3IDEyLjE3NjFDMTUuNzAwNyAxMS44MDg3IDE1Ljk5ODYgMTEuNTEwOCAxNi4zNjYgMTEuNTEwOEgyMi44MzE0TDIxLjA0NTggOS42MzAxNkMyMC45Nzk0IDkuNTcxMDggMjAuOTI1NiA5LjQ5ODUyIDIwLjg4NzMgOS40MTcwOUMyMC44NDg1IDkuMzM0NTYgMjAuODI2NiA5LjI0NDU5IDIwLjgyMjcgOS4xNTI5MUMyMC44MTg4IDkuMDYxMjIgMjAuODMzMSA4Ljk2OTYyIDIwLjg2NDcgOC44ODM4N0MyMC44OTYzIDguNzk4MTIgMjAuOTQ0NiA4LjcxOTk2IDIxLjAwNjggOC42NTQ0N0MyMS4wNjkgOC41ODg5NyAyMS4xNDM3IDguNTM3NTcgMjEuMjI2MyA4LjUwMzc4QzIxLjMwODkgOC40Njk5OSAyMS4zOTc1IDguNDU0NjQgMjEuNDg2MyA4LjQ1ODgxQzIxLjU3NTEgOC40NjI5NyAyMS42NjE5IDguNDg2NTcgMjEuNzQxMiA4LjUyNzkxQzIxLjgxOTUgOC41Njg3MSAyMS44ODg3IDguNjI1ODUgMjEuOTQ0NiA4LjY5NTU2TDI0LjgyMDcgMTEuNzQzNkMyNS4wMzg5IDExLjk3NjQgMjUuMDE1NCAxMi40MDcgMjQuODEwNCAxMi42MzgzWk0xMi45NDkgMjEuMzUyM0MxMi41NTM2IDIxLjM1MjMgMTIuMjMzMSAyMS4wMzE3IDEyLjIzMzEgMjAuNjM2M1YzLjcxNTk3QzEyLjIzMzEgMy4zMjA1NSAxMi41NTM2IDMgMTIuOTQ5IDNDMTMuMzQ0NSAzIDEzLjY2NSAzLjMyMDU1IDEzLjY2NSAzLjcxNTk3VjIwLjYzNjNDMTMuNjY1IDIxLjAzMTcgMTMuMzQ0NSAyMS4zNTIzIDEyLjk0OSAyMS4zNTIzWlwiLFxuICAgIGZpbGw6IFwiY3VycmVudENvbG9yXCJcbiAgfVxuKSB9KSwgV3UgPSAoKSA9PiAvKiBAX19QVVJFX18gKi8gYyhcInN2Z1wiLCB7IHZpZXdCb3g6IFwiMCAwIDI0IDI0XCIsIGZpbGw6IFwibm9uZVwiLCB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLCBjaGlsZHJlbjogLyogQF9fUFVSRV9fICovIGMoXG4gIFwicGF0aFwiLFxuICB7XG4gICAgZDogXCJNMjMuNDYxMyA1LjgzMjc4SDE1LjQ0MTRWMy41MzExNEMxNS40NDE0IDMuMjM2MDYgMTUuMjAyIDMgMTQuOTAyNyAzSDkuMTU3MTFDOC44NTc4NiAzIDguNjE4NDUgMy4yMzYwNiA4LjYxODQ1IDMuNTMxMTRWNS44MzI3OEgwLjUzODY1M0MwLjIzOTQwMSA1LjgzMjc4IDAgNi4wNjg4NCAwIDYuMzYzOTJWMjAuNDY4OEMwIDIwLjc2MzkgMC4yMzk0MDEgMjEgMC41Mzg2NTMgMjFIMjMuNDYxM0MyMy43NjA2IDIxIDI0IDIwLjc2MzkgMjQgMjAuNDY4OFY2LjM2MzkyQzI0IDYuMDY4ODQgMjMuNzYwNiA1LjgzMjc4IDIzLjQ2MTMgNS44MzI3OFpNOS4xNTcxMSA2Ljg5NTA3SDE0LjkwMjdIMjAuMDQ5OVYxOS45Mzc3SDMuOTUwMTJWNi44OTUwN0g5LjE1NzExWk05LjY5NTc2IDQuMTIxMzFIMTQuMzA0MlY1LjgzMjc4SDkuNjk1NzZWNC4xMjEzMVpNMS4xMzcxNiA2Ljg5NTA3SDIuODcyODJWMTkuOTM3N0gxLjEzNzE2VjYuODk1MDdaTTIyLjkyMjcgMTkuOTM3N0gyMS4xODdWNi44OTUwN0gyMi45MjI3VjE5LjkzNzdaXCIsXG4gICAgZmlsbDogXCJjdXJyZW50Q29sb3JcIlxuICB9XG4pIH0pLCBSdSA9ICgpID0+IC8qIEBfX1BVUkVfXyAqLyBjKFwic3ZnXCIsIHsgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiwgdmlld0JveDogXCIwIDAgMjQgMjRcIiwgZmlsbDogXCJub25lXCIsIGNoaWxkcmVuOiAvKiBAX19QVVJFX18gKi8gYyhcbiAgXCJwYXRoXCIsXG4gIHtcbiAgICBkOiBcIk0yMy41IDYuNUgxNi4xVjQuM0MxNi4xIDMuNiAxNS41IDMgMTQuOCAzSDkuMkM4LjUgMyA3LjkgMy42IDcuOSA0LjNWNi42SDAuNUMwLjIgNi41IDAgNi44IDAgNy4xVjIxLjJDMCAyMS41IDAuMiAyMS43IDAuNSAyMS43SDIzLjRDMjMuNyAyMS43IDIzLjkgMjEuNSAyMy45IDIxLjJWNy4xQzI0IDYuOCAyMy44IDYuNSAyMy41IDYuNVpNOS43IDQuOEgxNC4zVjYuNUg5LjdWNC44WlwiLFxuICAgIGZpbGw6IFwiY3VycmVudENvbG9yXCJcbiAgfVxuKSB9KSwgQnUgPSAoKSA9PiAvKiBAX19QVVJFX18gKi8gYyhcInN2Z1wiLCB7IHZpZXdCb3g6IFwiMCAwIDI0IDI0XCIsIGZpbGw6IFwibm9uZVwiLCB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLCBjaGlsZHJlbjogLyogQF9fUFVSRV9fICovIGMoXG4gIFwicGF0aFwiLFxuICB7XG4gICAgZDogXCJNMjMuNDYgNS44MzI3OEgxNS40MlYzLjUzMTE0QzE1LjQyIDMuMjM2MDYgMTUuMTggMyAxNC44OCAzSDkuMTJDOC44MiAzIDguNTggMy4yMzYwNiA4LjU4IDMuNTMxMTRWNS44MzI3OEgwLjU0MDAwMUMwLjI0MDAwMSA1LjgzMjc4IDAgNi4wNjg4NCAwIDYuMzYzOTJWMjAuNDY4OEMwIDIwLjc2MzkgMC4yNDAwMDEgMjEgMC41NDAwMDEgMjFIMjMuNDZDMjMuNzYgMjEgMjQgMjAuNzYzOSAyNCAyMC40Njg4VjYuMzYzOTJDMjQgNi4wNjg4NCAyMy43NiA1LjgzMjc4IDIzLjQ2IDUuODMyNzhaTTkuNjYgNC4xMjEzMUgxNC4yOFY1LjgzMjc4SDkuNjZWNC4xMjEzMVpNOS4xMiA2Ljg5NTA3SDE0Ljg4SDIyLjg2VjExLjQzOTNIMTQuODJIOS4wNkgxLjAyVjYuODk1MDdIOS4xMlpNMTQuMjIgMTIuNTYwNkMxMy45OCAxMy41NjM5IDEzLjA4IDE0LjI3MjEgMTIgMTQuMjcyMUMxMC45MiAxNC4yNzIxIDEwLjAyIDEzLjU2MzkgOS43OCAxMi41NjA2SDE0LjIyWk0xLjAyIDE5LjkzNzdWMTIuNTYwNkg4LjU4QzguODIgMTQuMTU0MSAxMC4yNiAxNS4zOTM0IDExLjk0IDE1LjM5MzRDMTMuNjIgMTUuMzkzNCAxNS4wNiAxNC4xNTQxIDE1LjMgMTIuNTYwNkgyMi44NlYxOS45Mzc3SDEuMDJaXCIsXG4gICAgZmlsbDogXCJjdXJyZW50Q29sb3JcIlxuICB9XG4pIH0pLCBTdSA9ICgpID0+IC8qIEBfX1BVUkVfXyAqLyBjKFwic3ZnXCIsIHsgdmlld0JveDogXCIwIDAgMjQgMjRcIiwgZmlsbDogXCJub25lXCIsIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsIGNoaWxkcmVuOiAvKiBAX19QVVJFX18gKi8gYyhcbiAgXCJwYXRoXCIsXG4gIHtcbiAgICBmaWxsUnVsZTogXCJldmVub2RkXCIsXG4gICAgY2xpcFJ1bGU6IFwiZXZlbm9kZFwiLFxuICAgIGQ6IFwiTTIyLjkzMDQgMjAuMjI5NkMyMi45OTcyIDIwLjI5NjMgMjMuMTMwOSAyMC4yOTYzIDIzLjE5NzggMjAuMjk2M0MyMy4zMzE1IDIwLjI5NjMgMjMuNTMyIDIwLjIyOTYgMjMuNjY1NyAyMC4wOTYxQzIzLjg2NjMgMTkuOTYyNiAyNCAxOS42OTU2IDI0IDE5LjQyODZWMS4zNDA4M0MyNCAxLjA3Mzg1IDIzLjg2NjMgMC44MDY4NzMgMjMuNjY1NyAwLjY3MzM4NEMyMy40NjUyIDAuNDczMTUgMjMuMTk3OCAwLjQ3MzE2MiAyMi45MzA0IDAuNTM5OTA3TDEwLjQ3ODIgNC44MTE0SDEuOTM4NzNDMC44NjkwODQgNC44MTE0IDAgNS42NzkwNyAwIDYuNzQ2OTlWMTQuMDIyMkMwIDE1LjA5MDEgMC44NjkwODQgMTUuOTU3OCAxLjkzODczIDE1Ljk1NzhIMi4zMzk2OVYyMS40OTc2QzIuMzM5NjkgMjIuNTY1NiAzLjIwODc4IDIzLjUgNC4zNDUyOCAyMy41SDcuMDE5NFYxOS4wMjgzSDguNjI0MDdMOS44ODIyNCAxNS45NTc4SDEwLjQ3NzNMMjIuOTMwNCAyMC4yMjk2Wk01LjY4MjU1IDE2LjAyNDZIMy42NzY3NVYyMS40OTc2QzMuNjc2NzUgMjEuODk4MSA0LjAxMTAyIDIyLjIzMTggNC40MTIxNCAyMi4yMzE4SDUuNzQ5MTlWMTkuMDI4M0g1LjY4MjU1VjE2LjAyNDZaTTExLjE2NDQgMTQuODIzM0wyMi42NjI5IDE4Ljc2MTJWMi4wMDgyOEwxMS4xNjQ0IDUuOTQ2MTdWMTQuODIzM1pNMS4zMzcwNiA2Ljc0Njk5QzEuMzM3MDYgNi40MTMyNiAxLjYwNDQ3IDYuMTQ2MjkgMS45Mzg3MyA2LjE0NjI5SDkuODI3MzdWMTQuNjIyOUgxLjkzODczQzEuNjA0NDcgMTQuNjIyOSAxLjMzNzA2IDE0LjM1NTkgMS4zMzcwNiAxNC4wMjIyVjYuNzQ2OTlaTTcuNzU0OTkgMTcuNjkzNEg3LjAxOTZWMTUuOTU4MUg4LjQ5MDM3TDcuNzU0OTkgMTcuNjkzNFpcIixcbiAgICBmaWxsOiBcImN1cnJlbnRDb2xvclwiXG4gIH1cbikgfSksIEV1ID0gKCkgPT4gLyogQF9fUFVSRV9fICovIGMoXCJzdmdcIiwgeyB2aWV3Qm94OiBcIjAgMCAyNCAyNFwiLCBmaWxsOiBcIm5vbmVcIiwgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiwgY2hpbGRyZW46IC8qIEBfX1BVUkVfXyAqLyBjKFxuICBcInBhdGhcIixcbiAge1xuICAgIGZpbGxSdWxlOiBcImV2ZW5vZGRcIixcbiAgICBjbGlwUnVsZTogXCJldmVub2RkXCIsXG4gICAgZDogXCJNNiAxMC42QzguNTQwNTEgMTAuNiAxMC42IDguNTQwNTEgMTAuNiA2QzEwLjYgMy40NTk0OSA4LjU0MDUxIDEuNCA2IDEuNEMzLjQ1OTQ5IDEuNCAxLjQgMy40NTk0OSAxLjQgNkMxLjQgOC41NDA1MSAzLjQ1OTQ5IDEwLjYgNiAxMC42Wk0yMCAxNS42QzIxLjQzNTkgMTUuNiAyMi42IDE0LjQzNTkgMjIuNiAxM0MyMi42IDExLjU2NDEgMjEuNDM1OSAxMC40IDIwIDEwLjRDMTguNTY0MSAxMC40IDE3LjQgMTEuNTY0MSAxNy40IDEzQzE3LjQgMTQuNDM1OSAxOC41NjQxIDE1LjYgMjAgMTUuNlpNMTEgMjIuNkMxMS44ODM3IDIyLjYgMTIuNiAyMS44ODM3IDEyLjYgMjFDMTIuNiAyMC4xMTYzIDExLjg4MzcgMTkuNCAxMSAxOS40QzEwLjExNjMgMTkuNCA5LjQgMjAuMTE2MyA5LjQgMjFDOS40IDIxLjg4MzcgMTAuMTE2MyAyMi42IDExIDIyLjZaTTEyIDZDMTIgOS4zMTM3MSA5LjMxMzcxIDEyIDYgMTJDMi42ODYyOSAxMiAwIDkuMzEzNzEgMCA2QzAgMi42ODYyOSAyLjY4NjI5IDAgNiAwQzkuMzEzNzEgMCAxMiAyLjY4NjI5IDEyIDZaTTI0IDEzQzI0IDE1LjIwOTEgMjIuMjA5MSAxNyAyMCAxN0MxNy43OTA5IDE3IDE2IDE1LjIwOTEgMTYgMTNDMTYgMTAuNzkwOSAxNy43OTA5IDkgMjAgOUMyMi4yMDkxIDkgMjQgMTAuNzkwOSAyNCAxM1pNMTEgMjRDMTIuNjU2OSAyNCAxNCAyMi42NTY5IDE0IDIxQzE0IDE5LjM0MzEgMTIuNjU2OSAxOCAxMSAxOEM5LjM0MzE1IDE4IDggMTkuMzQzMSA4IDIxQzggMjIuNjU2OSA5LjM0MzE1IDI0IDExIDI0WlwiLFxuICAgIGZpbGw6IFwiY3VycmVudGNvbG9yXCJcbiAgfVxuKSB9KSwga3UgPSAoKSA9PiAvKiBAX19QVVJFX18gKi8gZTEoXCJzdmdcIiwgeyB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLCB2aWV3Qm94OiBcIjAgMCAyNCAyNFwiLCBmaWxsOiBcIm5vbmVcIiwgY2hpbGRyZW46IFtcbiAgLyogQF9fUFVSRV9fICovIGMoXG4gICAgXCJwYXRoXCIsXG4gICAge1xuICAgICAgZDogXCJNMTEgMjRDMTIuNjU2OSAyNCAxNCAyMi42NTY5IDE0IDIxQzE0IDE5LjM0MzEgMTIuNjU2OSAxOCAxMSAxOEM5LjM0MzE1IDE4IDggMTkuMzQzMSA4IDIxQzggMjIuNjU2OSA5LjM0MzE1IDI0IDExIDI0WlwiLFxuICAgICAgZmlsbDogXCJjdXJyZW50Y29sb3JcIlxuICAgIH1cbiAgKSxcbiAgLyogQF9fUFVSRV9fICovIGMoXG4gICAgXCJwYXRoXCIsXG4gICAge1xuICAgICAgZDogXCJNMjAgMTdDMjIuMjA5MSAxNyAyNCAxNS4yMDkxIDI0IDEzQzI0IDEwLjc5MDkgMjIuMjA5MSA5IDIwIDlDMTcuNzkwOSA5IDE2IDEwLjc5MDkgMTYgMTNDMTYgMTUuMjA5MSAxNy43OTA5IDE3IDIwIDE3WlwiLFxuICAgICAgZmlsbDogXCJjdXJyZW50Y29sb3JcIlxuICAgIH1cbiAgKSxcbiAgLyogQF9fUFVSRV9fICovIGMoXG4gICAgXCJwYXRoXCIsXG4gICAge1xuICAgICAgZDogXCJNNiAxMkM5LjMxMzcxIDEyIDEyIDkuMzEzNzEgMTIgNkMxMiAyLjY4NjI5IDkuMzEzNzEgMCA2IDBDMi42ODYyOSAwIDAgMi42ODYyOSAwIDZDMCA5LjMxMzcxIDIuNjg2MjkgMTIgNiAxMlpcIixcbiAgICAgIGZpbGw6IFwiY3VycmVudGNvbG9yXCJcbiAgICB9XG4gIClcbl0gfSksIE51ID0gKCkgPT4gLyogQF9fUFVSRV9fICovIGMoXCJzdmdcIiwgeyB2aWV3Qm94OiBcIjAgMCAyNCAyNFwiLCBmaWxsOiBcIm5vbmVcIiwgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiwgY2hpbGRyZW46IC8qIEBfX1BVUkVfXyAqLyBjKFxuICBcInBhdGhcIixcbiAge1xuICAgIGZpbGxSdWxlOiBcImV2ZW5vZGRcIixcbiAgICBjbGlwUnVsZTogXCJldmVub2RkXCIsXG4gICAgZDogXCJNMTkuMTk1MSAzLjI2MzQ1SDIxLjg4MDNDMjIuMjI0NiAzLjI2MzQ1IDIyLjUgMy41MzU0IDIyLjUgMy44NzUzNFYxMC40MDIzVjIzLjM4ODFDMjIuNSAyMy43MjggMjIuMjI0NiAyNCAyMS44ODAzIDI0SDIuMTE5NjlDMS43NzU0MyAyNCAxLjUgMjMuNzI4IDEuNSAyMy4zODgxVjEwLjQwMjNWMy44NzUzNEMxLjUgMy41MzU0IDEuNzc1NDMgMy4yNjM0NSAyLjExOTY5IDMuMjYzNDVINC44MDQ5MVYwLjYxMTg5NEM0LjgwNDkxIDAuMjcxOTUgNS4wODAzNCAwIDUuNDI0NiAwQzUuNzY4ODYgMCA2LjA0NDI1IDAuMjcxOTUgNi4wNDQyNSAwLjYxMTg5NFYzLjI2MzQ1SDE3Ljk1NThWMC42MTE4OTRDMTcuOTU1OCAwLjI3MTk1IDE4LjIzMTEgMCAxOC41NzU0IDBDMTguOTE5NyAwIDE5LjE5NTEgMC4yNzE5NSAxOS4xOTUxIDAuNjExODk0VjMuMjYzNDVaTTQuNzM2MDcgNC40ODcyM0gyLjczOTM0SDIuNjcwNVY5LjcyMjM3SDIxLjEyM1Y0LjQ4NzIzSDE5LjEyNjJWNy4xMzg4MUMxOS4xMjYyIDcuNDc4NzUgMTguODUwOCA3Ljc1MDcgMTguNTA2NiA3Ljc1MDdDMTguMTYyMyA3Ljc1MDcgMTcuODg2OSA3LjQ3ODc1IDE3Ljg4NjkgNy4xMzg4MVY0LjQ4NzIzSDUuOTc1NDFWNy4xMzg4MUM1Ljk3NTQxIDcuNDc4NzUgNS42OTk5OCA3Ljc1MDcgNS4zNTU3MiA3Ljc1MDdDNS4wMTE0NiA3Ljc1MDcgNC43MzYwNyA3LjQ3ODc1IDQuNzM2MDcgNy4xMzg4MVY0LjQ4NzIzWk0yLjgwODIxIDIyLjc3NjJIMjEuMjYwN1YxMS4wMTQxSDIuODA4MjFWMjIuNzc2MlpNMTEuMzQ1OCAxNC44MjE1TDEwLjAzNzYgMTUuNzA1M0M5Ljc2MjI0IDE1LjkwOTMgOS4zNDkxMSAxNS44NDEzIDkuMTQyNTYgMTUuNTY5NEM4LjkzNjAxIDE1LjI5NzQgOS4wMDQ4NiAxNC44ODk1IDkuMjgwMjcgMTQuNjg1NUwxMS41NTIzIDEzLjEyMThDMTEuNzU4OSAxMi45ODU5IDEyLjAzNDMgMTIuOTE3OSAxMi4yNDA4IDEzLjA1MzlDMTIuNDQ3NCAxMy4xMjE4IDEyLjU4NTEgMTMuMzkzOCAxMi41ODUxIDEzLjU5NzhWMjAuMTI0NUMxMi41ODUxIDIwLjQ2NDQgMTIuMzA5NyAyMC43MzY0IDExLjk2NTQgMjAuNzM2NEMxMS42MjEyIDIwLjczNjQgMTEuMzQ1OCAyMC40NjQ0IDExLjM0NTggMjAuMTI0NVYxNC44MjE1WlwiLFxuICAgIGZpbGw6IFwiY3VycmVudENvbG9yXCJcbiAgfVxuKSB9KSwgVHUgPSAoKSA9PiAvKiBAX19QVVJFX18gKi8gYyhcInN2Z1wiLCB7IHZpZXdCb3g6IFwiMCAwIDI0IDI0XCIsIGZpbGw6IFwibm9uZVwiLCB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLCBjaGlsZHJlbjogLyogQF9fUFVSRV9fICovIGMoXG4gIFwicGF0aFwiLFxuICB7XG4gICAgZmlsbFJ1bGU6IFwiZXZlbm9kZFwiLFxuICAgIGNsaXBSdWxlOiBcImV2ZW5vZGRcIixcbiAgICBkOiBcIk0xNy4xMzY4IDE0LjgzOTJMMTcuMTM2OCAxNC44Mzc3QzE3LjEzNjggMTIuMTI3MyAxNC44NDg1IDkuODc1NjEgMTIuMDg5MyA5Ljg3NTYxQzkuMzI5NDcgOS44NzU2MSA3LjA0MTcgMTIuMDY5NCA3LjA0MTcgMTQuODM3N0M3LjA0MTcgMTcuNTQ4NSA5LjI3MTAzIDE5Ljc5OTcgMTIuMDg5MyAxOS43OTk3QzE0LjkwODkgMTkuNzk5NyAxNy4xOTU0IDE3LjU0NzUgMTcuMTM2OCAxNC44MzkyWk0xOC4wMDg2IDUuODE2MTVIMjMuNDU0M0MyMy44MTE3IDUuODE2MTUgMjQgNi4wODQgMjQgNi40MjU1NlYyMC4zOTZDMjQgMjAuNzI4MSAyMy43Mjk3IDIwLjk5MjMgMjMuMzk0OCAyMC45OTIzSDAuNjA1MjE1QzAuMjcwMzI1IDIwLjk5MjMgMCAyMC43MjgxIDAgMjAuMzk2VjYuNDEyNDFDMCA2LjA4MDI4IDAuMjcwMzI4IDUuODE2MTUgMC42MDUyMTUgNS44MTYxNUg2LjA1MDk1TDguNzA4MjQgMy4yMDMyNkM4Ljg0MTI1IDMuMDcyNDcgOS4wMzc3NCAzLjAwNzc0IDkuMTczNjIgMy4wMDc3NEgxNC44ODU5QzE1LjA4NSAzLjAwNzc0IDE1LjIyMSAzLjA3NTEzIDE1LjM1MTMgMy4yMDMyNkwxOC4wMDg2IDUuODE2MTVaTTkuNDk4OTcgNC4yNTg3N0w3Ljg2MDUgNS44MTYxNUgxNi4yNjI3TDE0LjY3ODkgNC4yNTg3N0g5LjQ5ODk3Wk0yMi43ODk2IDcuMDA4NjdIMS4zMjk0MlYxOS43OTk3SDguMzU1NDRDNi43NzcxNyAxOC42Njc2IDUuNzcxNzggMTYuODkwMSA1Ljc3MTc4IDE0LjgzNzdDNS43NzE3OCAxMS40MDQ2IDguNjAwNzIgOC42MjQ1NiAxMi4wODkzIDguNjI0NTZDMTUuNTc3OCA4LjYyNDU2IDE4LjQwNjcgMTEuNDA0NiAxOC40MDY3IDE0LjgzNzdDMTguNDA2NyAxNi44MzQ5IDE3LjM0NTEgMTguNjY0MyAxNS44MTY2IDE5Ljc5OTdIMjIuNzg5NlY3LjAwODY3Wk04LjYyNzg4IDE0LjgzNzZDOC42Mjc4OCAxMi45ODQzIDEwLjIwNzIgMTEuNDMzIDEyLjA4OTEgMTEuNDMzQzE0LjAzMDUgMTEuNDMzIDE1LjU1MDQgMTIuOTI1OCAxNS41NTA0IDE0LjgzNzZDMTUuNTUwNCAxNi42OTA5IDEzLjk3MSAxOC4yNDIxIDEyLjA4OTEgMTguMjQyMUMxMC4yMDcyIDE4LjI0MjEgOC42Mjc4OCAxNi42OTA5IDguNjI3ODggMTQuODM3NlpNOS44MzgyNyAxNC43NzkxQzkuODM4MjcgMTYuMDI1NSAxMC44NzU4IDE2Ljk5MTIgMTIuMDg5MSAxNi45OTEyQzEzLjMwMjUgMTYuOTkxMiAxNC4zNCAxNi4wMjU1IDE0LjM0IDE0Ljc3OTFDMTQuMzQgMTMuNTMyNyAxMy4zMDI1IDEyLjU2NyAxMi4wODkxIDEyLjU2N0MxMC44MTg3IDEyLjU2NyA5LjgzODI3IDEzLjU4ODkgOS44MzgyNyAxNC43NzkxWlwiLFxuICAgIGZpbGw6IFwiY3VycmVudENvbG9yXCJcbiAgfVxuKSB9KSwgSXUgPSAoKSA9PiAvKiBAX19QVVJFX18gKi8gZTEoXCJzdmdcIiwgeyB2aWV3Qm94OiBcIjAgMCAyNCAyNFwiLCBmaWxsOiBcIm5vbmVcIiwgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiwgY2hpbGRyZW46IFtcbiAgLyogQF9fUFVSRV9fICovIGMoXG4gICAgXCJwYXRoXCIsXG4gICAge1xuICAgICAgZmlsbFJ1bGU6IFwiZXZlbm9kZFwiLFxuICAgICAgY2xpcFJ1bGU6IFwiZXZlbm9kZFwiLFxuICAgICAgZDogXCJNMi4zNjU4IDYuNzkzNDFIMC42NTc2NDJDMC4yOTE2MDggNi43OTM0MSAwLjA0NzU4NDggNi40ODM0OSAwLjEwODU5MSA2LjIzNTU2VjEuNjQ4OEMwLjEwODU5MSAxLjMzODg4IDAuMzUyNjEzIDEuMDkwOTUgMC42NTc2NDIgMS4wOTA5NUgyMy4zNTE4QzIzLjY1NjggMS4wOTA5NSAyMy45MDA4IDEuMzM4ODggMjMuOTAwOCAxLjY0ODhWNi4yMzU1NkMyMy45MDA4IDYuNTQ1NDcgMjMuNjU2OCA2Ljc5MzQxIDIzLjM1MTggNi43OTM0MUgyMS42NDM2VjIyLjM1MTJDMjEuNjQzNiAyMi42NjExIDIxLjM5OTYgMjIuOTA5MSAyMS4wOTQ2IDIyLjkwOTFIMi45MTQ4NUMyLjYwOTgyIDIyLjkwOTEgMi4zNjU4IDIyLjY2MTEgMi4zNjU4IDIyLjM1MTJWNi43OTM0MVpNMy40NjM5MSAyMS43MzE0SDIwLjQ4NDVWNi43OTM0MUgzLjQ2MzkxVjIxLjczMTRaTTIyLjc0MTcgMi4xNDQ2NkgxLjIwNjY5VjUuNjE1NzNIMjIuNzQxN1YyLjE0NDY2Wk0xNi41MTg3IDEzLjY3MzVINy40MjkxNkM3LjEyNDE0IDEzLjY3MzUgNi44ODAxMiAxMy40MjU2IDYuODgwMTIgMTMuMTE1N1YxMC44MjIzQzYuODgwMTIgMTAuNTEyNCA3LjEyNDE0IDEwLjI2NDUgNy40MjkxNiAxMC4yNjQ1SDE2LjUxODdDMTYuODIzOCAxMC4yNjQ1IDE3LjA2NzggMTAuNTEyNCAxNy4wNjc4IDEwLjgyMjNWMTMuMTE1N0MxNy4wNjc4IDEzLjQyNTYgMTYuODIzOCAxMy42NzM1IDE2LjUxODcgMTMuNjczNVpNMTUuOTA4NyAxMS4zODAySDcuOTc4MTlWMTIuNTU3OEgxNS45MDg3VjExLjM4MDJaXCIsXG4gICAgICBmaWxsOiBcImN1cnJlbnRDb2xvclwiXG4gICAgfVxuICApLFxuICAvKiBAX19QVVJFX18gKi8gYyhcbiAgICBcInBhdGhcIixcbiAgICB7XG4gICAgICBmaWxsUnVsZTogXCJldmVub2RkXCIsXG4gICAgICBjbGlwUnVsZTogXCJldmVub2RkXCIsXG4gICAgICBkOiBcIk0yLjI2NjYyIDYuODkyNThIMC42NTc2MzZDMC40NDU4MyA2Ljg5MjU4IDAuMjY3MDQ0IDYuODAyNjkgMC4xNDk3NjUgNi42NzQzNkMwLjAzNjk1MjIgNi41NTA5MyAtMC4wMjQ3NzkyIDYuMzg0MTcgMC4wMDk0MTEzOCA2LjIyNDM1VjEuNjQ4OEMwLjAwOTQxMTM4IDEuMjg1NiAwLjI5NjM1NSAwLjk5MTc3NiAwLjY1NzYzNiAwLjk5MTc3NkgyMy4zNTE4QzIzLjcxMzEgMC45OTE3NzYgMjQgMS4yODU2IDI0IDEuNjQ4OFY2LjIzNTU2QzI0IDYuNTk4NzUgMjMuNzEzMSA2Ljg5MjU4IDIzLjM1MTggNi44OTI1OEgyMS43NDI4VjIyLjM1MTJDMjEuNzQyOCAyMi43MTQ0IDIxLjQ1NTggMjMuMDA4MiAyMS4wOTQ2IDIzLjAwODJIMi45MTQ4NUMyLjU1MzU3IDIzLjAwODIgMi4yNjY2MiAyMi43MTQ0IDIuMjY2NjIgMjIuMzUxMlY2Ljg5MjU4Wk0wLjEwODU5MSA2LjIzNTU2QzAuMDQ3NTg0OCA2LjQ4MzQ5IDAuMjkxNjA4IDYuNzkzNDEgMC42NTc2NDIgNi43OTM0MUgyLjM2NThWMjIuMzUxMkMyLjM2NTggMjIuNjYxMSAyLjYwOTgyIDIyLjkwOTEgMi45MTQ4NSAyMi45MDkxSDIxLjA5NDZDMjEuMzk5NiAyMi45MDkxIDIxLjY0MzYgMjIuNjYxMSAyMS42NDM2IDIyLjM1MTJWNi43OTM0MUgyMy4zNTE4QzIzLjY1NjggNi43OTM0MSAyMy45MDA4IDYuNTQ1NDcgMjMuOTAwOCA2LjIzNTU2VjEuNjQ4OEMyMy45MDA4IDEuMzM4ODggMjMuNjU2OCAxLjA5MDk1IDIzLjM1MTggMS4wOTA5NUgwLjY1NzY0MkMwLjM1MjYxMyAxLjA5MDk1IDAuMTA4NTkxIDEuMzM4ODggMC4xMDg1OTEgMS42NDg4VjYuMjM1NTZaTTMuNTYzMDcgMjEuNjMyMkgyMC4zODUzVjYuODkyNThIMy41NjMwN1YyMS42MzIyWk0yMi42NDI1IDIuMjQzODRIMS4zMDU4NlY1LjUxNjU1SDIyLjY0MjVWMi4yNDM4NFpNMTYuNTE4NyAxMy43NzI3SDcuNDI5MTZDNy4wNjc4OCAxMy43NzI3IDYuNzgwOTUgMTMuNDc4OCA2Ljc4MDk1IDEzLjExNTdWMTAuODIyM0M2Ljc4MDk1IDEwLjQ1OTIgNy4wNjc4OCAxMC4xNjUzIDcuNDI5MTYgMTAuMTY1M0gxNi41MTg3QzE2Ljg4IDEwLjE2NTMgMTcuMTY3IDEwLjQ1OTIgMTcuMTY3IDEwLjgyMjNWMTMuMTE1N0MxNy4xNjcgMTMuNDc4OCAxNi44OCAxMy43NzI3IDE2LjUxODcgMTMuNzcyN1pNMTUuODA5NSAxMS40NzkzSDguMDc3MzdWMTIuNDU4NkgxNS44MDk1VjExLjQ3OTNaTTMuNDYzOTEgMjEuNzMxNFY2Ljc5MzQxSDIwLjQ4NDVWMjEuNzMxNEgzLjQ2MzkxWk0yMi43NDE3IDIuMTQ0NjZWNS42MTU3M0gxLjIwNjY5VjIuMTQ0NjZIMjIuNzQxN1pNNy40MjkxNiAxMy42NzM1SDE2LjUxODdDMTYuODIzOCAxMy42NzM1IDE3LjA2NzggMTMuNDI1NiAxNy4wNjc4IDEzLjExNTdWMTAuODIyM0MxNy4wNjc4IDEwLjUxMjQgMTYuODIzOCAxMC4yNjQ1IDE2LjUxODcgMTAuMjY0NUg3LjQyOTE2QzcuMTI0MTQgMTAuMjY0NSA2Ljg4MDEyIDEwLjUxMjQgNi44ODAxMiAxMC44MjIzVjEzLjExNTdDNi44ODAxMiAxMy40MjU2IDcuMTI0MTQgMTMuNjczNSA3LjQyOTE2IDEzLjY3MzVaTTE1LjkwODcgMTEuMzgwMlYxMi41NTc4SDcuOTc4MTlWMTEuMzgwMkgxNS45MDg3WlwiLFxuICAgICAgZmlsbDogXCJjdXJyZW50Q29sb3JcIlxuICAgIH1cbiAgKVxuXSB9KSwgRHUgPSAoKSA9PiAvKiBAX19QVVJFX18gKi8gYyhcInN2Z1wiLCB7IHZpZXdCb3g6IFwiMCAwIDI0IDI0XCIsIGZpbGw6IFwibm9uZVwiLCB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLCBjaGlsZHJlbjogLyogQF9fUFVSRV9fICovIGMoXG4gIFwicGF0aFwiLFxuICB7XG4gICAgZmlsbFJ1bGU6IFwiZXZlbm9kZFwiLFxuICAgIGNsaXBSdWxlOiBcImV2ZW5vZGRcIixcbiAgICBkOiBcIk0wLjYwMTM0MSAyMy4wMDQySDYuNzkwOThDNy4xMjU0OSAyMy4wMDQyIDcuMzkyMzIgMjIuNzMzMSA3LjM5MjMyIDIyLjM5NThWMS42MDQxNUM3LjM5MjMyIDEuMjY2OTIgNy4xMjU0OSAwLjk5NTc3MyA2Ljc5MDk4IDAuOTk1NzczSDAuNjAxMzQxQzAuMjY2ODMxIDAuOTk1NzczIDAgMS4yNjY5MiAwIDEuNjA0MTVWMjIuMzk1OEMwIDIyLjczMzEgMC4yNjY4MyAyMy4wMDQyIDAuNjAxMzQxIDIzLjAwNDJaTTEuMjYzOTcgMi4yMTI1Mkg2LjI1MDkyVjIxLjcyNTRIMS4yNjM5N1YyLjIxMjUyWk0zLjcyNyAxNS4zOTQ4QzMuMzkyNSAxNS4zOTQ4IDMuMTI1NjcgMTUuNjY1OSAzLjEyNTY3IDE2LjAwMzFWMjAuMjg1NUMzLjEyNTY3IDIwLjYyMjcgMy4zOTI1IDIwLjg5MzggMy43MjcgMjAuODkzOEM0LjA2MTUgMjAuODkzOCA0LjMyODMzIDIwLjYyMjcgNC4zMjgzMyAyMC4yODU1VjE2LjAwMzFDNC4zMjgzMyAxNS42NjU5IDQuMDYxNSAxNS4zOTQ4IDMuNzI3IDE1LjM5NDhaTTE1LjEyNTQgMjMuMDA0MkMxNS40NiAyMy4wMDQyIDE1LjcyNjggMjIuNzMzMSAxNS43MjY4IDIyLjM5NThWMS42MDQxNUMxNS43MjY4IDEuMjY2OTIgMTUuNDYgMC45OTU3NzMgMTUuMTI1NCAwLjk5NTc3M0g4LjkzNTgyQzguNjAxMzEgMC45OTU3NzMgOC4zMzQ0NyAxLjI2NjkyIDguMzM0NDcgMS42MDQxNVYyMi4zOTU4QzguMzM0NDcgMjIuNzMzMSA4LjYwMTMxIDIzLjAwNDIgOC45MzU4MiAyMy4wMDQySDE1LjEyNTRaTTE2LjYwNzcgMS42MDQxNVYyMi4zOTU4QzE2LjYwNzcgMjIuNzMzMSAxNi44NzQ1IDIzLjAwNDIgMTcuMjA5IDIzLjAwNDJIMjMuMzk4N0MyMy43MzMyIDIzLjAwNDIgMjQgMjIuNzMzMSAyNCAyMi4zOTU4VjEuNjA0MTVDMjQgMS4yNjY5MiAyMy43MzMyIDAuOTk1NzczIDIzLjM5ODcgMC45OTU3NzNIMTcuMjA5QzE2Ljg3NDUgMC45OTU3NzMgMTYuNjA3NyAxLjI2NjkyIDE2LjYwNzcgMS42MDQxNVpNMjIuNzk3MyAyMS43MjU0SDE3LjgxMDRWMi4yMTI1MkgyMi43OTczVjIxLjcyNTRaTTIwLjMzNDcgMTUuMzk0OEMyMC4wMDAyIDE1LjM5NDggMTkuNzMzMyAxNS42NjU5IDE5LjczMzMgMTYuMDAzMVYyMC4yODU1QzE5LjczMzMgMjAuNjIyNyAyMC4wMDAyIDIwLjg5MzggMjAuMzM0NyAyMC44OTM4QzIwLjY2OTIgMjAuODkzOCAyMC45MzYgMjAuNjIyNyAyMC45MzYgMjAuMjg1NVYxNi4wMDMxQzIwLjkzNiAxNS42NjU5IDIwLjY2OTIgMTUuMzk0OCAyMC4zMzQ3IDE1LjM5NDhaTTkuNTM3MTYgMjEuNzI1NEgxNC41MjQxVjIuMjEyNTJIOS41MzcxNlYyMS43MjU0Wk0xMi4wMDAyIDE1LjM5NDhDMTEuNjY1NyAxNS4zOTQ4IDExLjM5ODkgMTUuNjY1OSAxMS4zOTg5IDE2LjAwMzFWMjAuMjg1NUMxMS4zOTg5IDIwLjYyMjcgMTEuNjY1NyAyMC44OTM4IDEyLjAwMDIgMjAuODkzOEMxMi4zMzQ3IDIwLjg5MzggMTIuNjAxNSAyMC42MjI3IDEyLjYwMTUgMjAuMjg1NVYxNi4wMDc5QzEyLjYwMTUgMTUuNjQ1IDEyLjMzMTQgMTUuMzk0OCAxMi4wMDAyIDE1LjM5NDhaXCIsXG4gICAgZmlsbDogXCJjdXJyZW50Q29sb3JcIlxuICB9XG4pIH0pLCBIdSA9ICgpID0+IC8qIEBfX1BVUkVfXyAqLyBjKFwic3ZnXCIsIHsgdmlld0JveDogXCIwIDAgMjQgMjRcIiwgZmlsbDogXCJub25lXCIsIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsIGNoaWxkcmVuOiAvKiBAX19QVVJFX18gKi8gYyhcbiAgXCJwYXRoXCIsXG4gIHtcbiAgICBmaWxsUnVsZTogXCJldmVub2RkXCIsXG4gICAgY2xpcFJ1bGU6IFwiZXZlbm9kZFwiLFxuICAgIGQ6IFwiTTE4LjQ3NjkgMTAuMTQ2N0MxOC4yMDI3IDkuODc3MTggMTguMjAyNyA5LjU0MDIyIDE4LjQ3NjkgOS4yNzA2NkwyMS4xNDk3IDYuNzA5ODRDMjIuMDQwNyA1LjgzMzc2IDIyLjA0MDcgNC40MTg1NiAyMS4xNDk3IDMuNTQyNDhMMjAuNjAxNSAzLjAwMzM3QzE5LjcxMDUgMi4xMjcyOSAxOC4yNzEzIDIuMTI3MjkgMTcuMzgwMyAzLjAwMzM3TDkuOTA5OTcgMTAuMzQ4OUM5LjAxOTAxIDExLjIyNSA5LjAxOTAxIDEyLjY0MDIgOS45MDk5NyAxMy41MTYzQzEwLjE4NDEgMTMuNzg1OCAxMC4xODQxIDE0LjEyMjggOS45MDk5NyAxNC4zOTIzQzkuNzcyODkgMTQuNTI3MSA5LjU2NzI5IDE0LjU5NDUgOS40MzAyMiAxNC41OTQ1QzkuMjI0NjEgMTQuNTk0NSA5LjA4NzU0IDE0LjUyNzEgOC45NTA0NyAxNC4zOTIzQzcuNTc5NzcgMTMuMDQ0NSA3LjU3OTc3IDEwLjgyMDcgOC45NTA0NyA5LjQ3Mjg0TDE2LjQyMDggMi4xMjcyOEMxNy43OTE1IDAuNzc5NDczIDIwLjA1MzIgMC43Nzk0NzMgMjEuNDIzOSAyLjEyNzI4TDIxLjk3MjIgMi42NjY0MUMyMy4zNDI5IDQuMDE0MjIgMjMuMzQyOSA2LjIzODA5IDIxLjk3MjIgNy41ODU5TDE5LjM2NzggMTAuMTQ2N0MxOS4wOTM3IDEwLjQxNjMgMTguNzUxIDEwLjQxNjMgMTguNDc2OSAxMC4xNDY3Wk01LjUyMzMyIDEzLjg1MzNDNS43OTc0NiAxNC4xMjI5IDUuNzk3NDYgMTQuNDU5OCA1LjUyMzMyIDE0LjcyOTRMMi45MTg5OCAxNy4yOTAyQzIuMDI4MDMgMTguMTY2MiAyLjAyODAzIDE5LjU4MTQgMi45MTg5OCAyMC40NTc1TDMuNTM1OCAyMC45OTY2QzQuNDI2NzYgMjEuODcyNyA1Ljg2NiAyMS44NzI3IDYuNzU2OTUgMjAuOTk2NkwxNC4yMjczIDEzLjY1MTFDMTUuMTE4MiAxMi43NzUgMTUuMTE4MiAxMS4zNTk5IDE0LjIyNzMgMTAuNDgzOEMxMy45NTMxIDEwLjIxNDIgMTMuOTUzMSA5Ljg3NzI2IDE0LjIyNzMgOS42MDc3QzE0LjUwMTQgOS4zMzgxNCAxNC44NDQxIDkuMzM4MTQgMTUuMTE4MiA5LjYwNzdDMTYuNDg4OSAxMC45NTU1IDE2LjQ4ODkgMTMuMTc5NCAxNS4xMTgyIDE0LjUyNzJMNy42NDc5MSAyMS44NzI3QzYuOTYyNTYgMjIuNTQ2NiA2LjAwMzA3IDIyLjg4MzYgNS4xMTIxMSAyMi44ODM2QzQuMTUyNjIgMjIuODgzNiAzLjI2MTY2IDIyLjU0NjYgMi41NzYzMSAyMS44NzI3TDIuMDI4MDMgMjEuMzMzNkMwLjY1NzMyNCAxOS45ODU4IDAuNjU3MzI0IDE3Ljc2MTkgMi4wMjgwMyAxNi40MTQxTDQuNjMyMzYgMTMuODUzM0M0LjkwNjUgMTMuNTgzNyA1LjI0OTE4IDEzLjU4MzcgNS41MjMzMiAxMy44NTMzWlwiLFxuICAgIGZpbGw6IFwiY3VycmVudENvbG9yXCJcbiAgfVxuKSB9KSwgVnUgPSAoKSA9PiAvKiBAX19QVVJFX18gKi8gYyhcInN2Z1wiLCB7IHZpZXdCb3g6IFwiMCAwIDI1IDI0XCIsIGZpbGw6IFwibm9uZVwiLCB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLCBjaGlsZHJlbjogLyogQF9fUFVSRV9fICovIGMoXG4gIFwicGF0aFwiLFxuICB7XG4gICAgZDogXCJNMS4xNzk3OSAyMS44NDQ0TDIzLjc1MzIgMy4yNTUyNEMyNC40OTE2IDIuNzA3NiAyMy41NTgyIDEuNjEwOTQgMjIuODA5MyAyLjE2NjMzTDEuNDE1NzQgMTkuNzQ0NFY2LjQ0NDE5QzEuNDE1NzQgNS41MzkzNCAwIDUuNTM5MzYgMCA2LjQ0NDE5VjIxLjNDMCAyMS45OTM0IDAuNjg4ODU0IDIyLjA4NzIgMS4xNzk3OSAyMS44NDQ0WlwiLFxuICAgIGZpbGw6IFwiY3VycmVudENvbG9yXCJcbiAgfVxuKSB9KSwgUHUgPSAoKSA9PiAvKiBAX19QVVJFX18gKi8gYyhcInN2Z1wiLCB7IHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsIHZpZXdCb3g6IFwiMCAwIDI0IDI0XCIsIGZpbGw6IFwibm9uZVwiLCBjaGlsZHJlbjogLyogQF9fUFVSRV9fICovIGMoXG4gIFwicGF0aFwiLFxuICB7XG4gICAgZmlsbFJ1bGU6IFwiZXZlbm9kZFwiLFxuICAgIGNsaXBSdWxlOiBcImV2ZW5vZGRcIixcbiAgICBkOiBcIk0yMy45IDMuNEMyMy45IDMuNyAyMy43IDQuMSAyMy41IDQuM0wyLjEgMjEuOUgyQzEuOCAyMiAxLjUgMjIuMSAxLjMgMjIuMUMxLjEgMjIuMSAxIDIyLjEgMC44IDIyQzAuMyAyMS45IDAgMjEuNCAwIDIwLjlWNi44QzAgNi40IDAuMiA2LjEgMC40IDUuOEMwLjcgNS43IDEgNS41IDEuMyA1LjVDMS42IDUuNSAxLjkgNS42IDIuMiA1LjhDMi41IDYgMi42IDYuNCAyLjYgNi44VjE4LjFMMjEuOCAyLjNDMjIuMSAyLjEgMjIuMyAyIDIyLjYgMkMyMyAyIDIzLjQgMi4yIDIzLjYgMi41QzIzLjkgMi43IDI0IDMuMSAyMy45IDMuNFpcIixcbiAgICBmaWxsOiBcImN1cnJlbnRDb2xvclwiXG4gIH1cbikgfSksIEZ1ID0gKCkgPT4gLyogQF9fUFVSRV9fICovIGMoXCJzdmdcIiwgeyB2aWV3Qm94OiBcIjAgMCAyNCAyNFwiLCBmaWxsOiBcIm5vbmVcIiwgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiwgY2hpbGRyZW46IC8qIEBfX1BVUkVfXyAqLyBjKFxuICBcInBhdGhcIixcbiAge1xuICAgIGQ6IFwiTTIzLjc2NDcgNi44NjQyMkMyMy45MjE2IDYuNzAzNzIgMjQgNi41NDMyMiAyNCA2LjMwMjQ4QzI0IDYuMTQxOTkgMjMuOTIxNiA1LjkwMTI0IDIzLjc2NDcgNS43NDA3NEMyMy40NTEgNS40MTk3NSAyMy4wNTg4IDUuNDE5NzUgMjIuNzQ1MSA1Ljc0MDc0TDEyIDE2LjczNDZMMS4yNTQ5IDUuNzQwNzRDMC45NDExNzcgNS40MTk3NSAwLjU0OTAyIDUuNDE5NzUgMC4yMzUyOTQgNS43NDA3NEMtMC4wNzg0MzE0IDYuMDYxNzMgLTAuMDc4NDMxNCA2LjQ2Mjk1IDAuMjM1Mjk0IDYuNzgzOTRMMTEuNDUxIDE4LjI1OTNDMTEuNzY0NyAxOC41ODAyIDEyLjE1NjkgMTguNTgwMiAxMi40NzA2IDE4LjI1OTNMMjMuNzY0NyA2Ljg2NDIyWlwiLFxuICAgIGZpbGw6IFwiY3VycmVudENvbG9yXCJcbiAgfVxuKSB9KSwgWHUgPSAoKSA9PiAvKiBAX19QVVJFX18gKi8gYyhcInN2Z1wiLCB7IHZpZXdCb3g6IFwiMCAwIDI0IDI0XCIsIGZpbGw6IFwibm9uZVwiLCB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLCBjaGlsZHJlbjogLyogQF9fUFVSRV9fICovIGMoXG4gIFwicGF0aFwiLFxuICB7XG4gICAgZDogXCJNMTIuOTQ3NyAxOC4yMDhMMjMuNTc0IDcuNDg2NzZMMjMuNTc3NSA3LjQ4MzI0QzIzLjgzNzQgNy4yMTczNSAyNCA2Ljg5NDY5IDI0IDYuNDYxMTZDMjQgNi4xNDA0OCAyMy44NjQgNS43MzIyMiAyMy41Nzc1IDUuNDM5MDdDMjMuMzI2MiA1LjE4MTk5IDIyLjk4NyA1IDIyLjU5MjggNUMyMi4xOTg3IDUgMjEuODU5NSA1LjE4MTk5IDIxLjYwODIgNS40MzkwN0wxMiAxNS4yNjk3TDIuMzkxNzggNS40MzkwN0MyLjE0MDUxIDUuMTgxOTkgMS44MDEyOSA1IDEuNDA3MTUgNUMxLjAxMzAxIDUgMC42NzM3OTMgNS4xODE5OSAwLjQyMjUyMyA1LjQzOTA3QzAuMTcwNTQgNS42OTY4OSAwIDYuMDM2NjYgMCA2LjQyMzM4QzAgNi44MTAxIDAuMTcwNTQgNy4xNDk4NyAwLjQyMjUyMyA3LjQwNzY5TDEwLjk3ODUgMTguMjA4QzExLjIyOTcgMTguNDY1MSAxMS41Njg5IDE4LjY0NzEgMTEuOTYzMSAxOC42NDcxQzEyLjM1NjIgMTguNjQ3MSAxMi42OTQ3IDE4LjQ2NiAxMi45NDU3IDE4LjIxTDEyLjk0NzcgMTguMjA4WlwiLFxuICAgIGZpbGw6IFwiY3VycmVudENvbG9yXCJcbiAgfVxuKSB9KSwgVXUgPSAoKSA9PiAvKiBAX19QVVJFX18gKi8gYyhcInN2Z1wiLCB7IHZpZXdCb3g6IFwiMCAwIDI0IDI0XCIsIGZpbGw6IFwibm9uZVwiLCB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLCBjaGlsZHJlbjogLyogQF9fUFVSRV9fICovIGMoXG4gIFwicGF0aFwiLFxuICB7XG4gICAgZDogXCJNMTEuMDUyMyA1LjQzOTA3TDAuNDI1OTg4IDE2LjE2MDNMMC40MjI1MjUgMTYuMTYzOEMwLjE2MjY0OCAxNi40Mjk3IDAgMTYuNzUyNCAwIDE3LjE4NTlDMCAxNy41MDY2IDAuMTM2MDA4IDE3LjkxNDggMC40MjI1MjUgMTguMjA4QzAuNjczNzk0IDE4LjQ2NTEgMS4wMTMwMSAxOC42NDcxIDEuNDA3MTUgMTguNjQ3MUMxLjgwMTMgMTguNjQ3MSAyLjE0MDUxIDE4LjQ2NTEgMi4zOTE3OCAxOC4yMDhMMTIgOC4zNzczM0wyMS42MDgyIDE4LjIwOEMyMS44NTk1IDE4LjQ2NTEgMjIuMTk4NyAxOC42NDcxIDIyLjU5MjggMTguNjQ3MUMyMi45ODcgMTguNjQ3MSAyMy4zMjYyIDE4LjQ2NTEgMjMuNTc3NSAxOC4yMDhDMjMuODI5NSAxNy45NTAyIDI0IDE3LjYxMDQgMjQgMTcuMjIzN0MyNCAxNi44MzcgMjMuODI5NSAxNi40OTcyIDIzLjU3NzUgMTYuMjM5NEwxMy4wMjE1IDUuNDM5MDdDMTIuNzcwMyA1LjE4MTk4IDEyLjQzMTEgNSAxMi4wMzY5IDVDMTEuNjQzOCA1IDExLjMwNTMgNS4xODEwMyAxMS4wNTQzIDUuNDM3MDVMMTEuMDUyMyA1LjQzOTA3WlwiLFxuICAgIGZpbGw6IFwiY3VycmVudENvbG9yXCJcbiAgfVxuKSB9KSwgWXUgPSAoKSA9PiAvKiBAX19QVVJFX18gKi8gYyhcInN2Z1wiLCB7IHZpZXdCb3g6IFwiMCAwIDI0IDI0XCIsIGZpbGw6IFwibm9uZVwiLCB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLCBjaGlsZHJlbjogLyogQF9fUFVSRV9fICovIGMoXG4gIFwicGF0aFwiLFxuICB7XG4gICAgZDogXCJNMTcuMTM1OCAyMy43NjQ3QzE3LjI5NjMgMjMuOTIxNiAxNy40NTY4IDI0IDE3LjY5NzUgMjRDMTcuODU4IDI0IDE4LjA5ODggMjMuOTIxNiAxOC4yNTkzIDIzLjc2NDdDMTguNTgwMiAyMy40NTEgMTguNTgwMiAyMy4wNTg4IDE4LjI1OTMgMjIuNzQ1MUw3LjI2NTQxIDEyTDE4LjI1OTMgMS4yNTQ5QzE4LjU4MDIgMC45NDExNzcgMTguNTgwMiAwLjU0OTAyIDE4LjI1OTMgMC4yMzUyOTRDMTcuOTM4MyAtMC4wNzg0MzE0IDE3LjUzNyAtMC4wNzg0MzE0IDE3LjIxNjEgMC4yMzUyOTRMNS43NDA3NCAxMS40NTFDNS40MTk3NSAxMS43NjQ3IDUuNDE5NzUgMTIuMTU2OSA1Ljc0MDc0IDEyLjQ3MDZMMTcuMTM1OCAyMy43NjQ3WlwiLFxuICAgIGZpbGw6IFwiY3VycmVudENvbG9yXCJcbiAgfVxuKSB9KSwgR3UgPSAoKSA9PiAvKiBAX19QVVJFX18gKi8gYyhcInN2Z1wiLCB7IHZpZXdCb3g6IFwiMCAwIDI0IDI0XCIsIGZpbGw6IFwibm9uZVwiLCB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLCBjaGlsZHJlbjogLyogQF9fUFVSRV9fICovIGMoXG4gIFwicGF0aFwiLFxuICB7XG4gICAgZDogXCJNNS43Mzg1NiAyMy43NjQ3QzUuODk4MDkgMjMuOTIxNiA2LjA1NzYgMjQgNi4yOTY4OSAyNEM2LjUzNjE5IDI0IDYuNjk1NzIgMjMuOTIxNiA2Ljg1NTI1IDIzLjc2NDdMMTguMjYxNSAxMi41NDlDMTguNTgwNSAxMi4yMzUzIDE4LjU4MDUgMTEuODQzMSAxOC4yNjE1IDExLjUyOTRMNi43NzU0OCAwLjIzNTI5NEM2LjQ1NjQzIC0wLjA3ODQzMTQgNi4wNTc2MiAtMC4wNzg0MzE0IDUuNzM4NTYgMC4yMzUyOTRDNS40MTk1IDAuNTQ5MDIgNS40MTk1IDAuOTQxMTc3IDUuNzM4NTYgMS4yNTQ5TDE2LjY2NjIgMTJMNS43Mzg1NiAyMi43NDUxQzUuNDE5NSAyMi45ODA0IDUuNDE5NSAyMy40NTEgNS43Mzg1NiAyMy43NjQ3WlwiLFxuICAgIGZpbGw6IFwiY3VycmVudENvbG9yXCJcbiAgfVxuKSB9KSwgUXUgPSAoKSA9PiAvKiBAX19QVVJFX18gKi8gYyhcInN2Z1wiLCB7IHZpZXdCb3g6IFwiMCAwIDI0IDI1XCIsIGZpbGw6IFwibm9uZVwiLCB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLCBjaGlsZHJlbjogLyogQF9fUFVSRV9fICovIGMoXG4gIFwicGF0aFwiLFxuICB7XG4gICAgZDogXCJNMTguMzg0NSAxMS44NzU4TDcuNjYzMjggMS4yNDk1TDcuNjU5NzYgMS4yNDYwNEM3LjM5Mzg3IDAuOTg2MTY1IDcuMDcxMiAwLjgyMzUxNyA2LjYzNzY3IDAuODIzNTE3QzYuMzE2OTkgMC44MjM1MTcgNS45MDg3NCAwLjk1OTUyNSA1LjYxNTU5IDEuMjQ2MDRDNS4zNTg1IDEuNDk3MzEgNS4xNzY1MSAxLjgzNjUzIDUuMTc2NTEgMi4yMzA2N0M1LjE3NjUxIDIuNjI0ODEgNS4zNTg1IDIuOTY0MDMgNS42MTU1OSAzLjIxNTNMMTUuNDQ2MiAxMi44MjM1TDUuNjE1NTkgMjIuNDMxN0M1LjM1ODUgMjIuNjgzIDUuMTc2NTEgMjMuMDIyMiA1LjE3NjUxIDIzLjQxNjRDNS4xNzY1MSAyMy44MTA1IDUuMzU4NSAyNC4xNDk3IDUuNjE1NTkgMjQuNDAxQzUuODczNCAyNC42NTMgNi4yMTMxNyAyNC44MjM1IDYuNTk5ODkgMjQuODIzNUM2Ljk4NjYyIDI0LjgyMzUgNy4zMjYzOSAyNC42NTMgNy41ODQyIDI0LjQwMUwxOC4zODQ1IDEzLjg0NTFDMTguNjQxNiAxMy41OTM4IDE4LjgyMzYgMTMuMjU0NiAxOC44MjM2IDEyLjg2MDRDMTguODIzNiAxMi40NjczIDE4LjY0MjUgMTIuMTI4OCAxOC4zODY1IDExLjg3NzhMMTguMzg0NSAxMS44NzU4WlwiLFxuICAgIGZpbGw6IFwiY3VycmVudENvbG9yXCJcbiAgfVxuKSB9KSwgWnUgPSAoKSA9PiAvKiBAX19QVVJFX18gKi8gYyhcbiAgXCJzdmdcIixcbiAge1xuICAgIHdpZHRoOiBcIjI0XCIsXG4gICAgaGVpZ2h0OiBcIjI1XCIsXG4gICAgdmlld0JveDogXCIwIDAgMjQgMjVcIixcbiAgICBmaWxsOiBcIm5vbmVcIixcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIGNoaWxkcmVuOiAvKiBAX19QVVJFX18gKi8gYyhcbiAgICAgIFwicGF0aFwiLFxuICAgICAge1xuICAgICAgICBkOiBcIk01LjYxNTM0IDExLjg3NThMMTYuMzM2NiAxLjI0OTVMMTYuMzQwMSAxLjI0NjA0QzE2LjYwNiAwLjk4NjE2NSAxNi45Mjg2IDAuODIzNTE3IDE3LjM2MjIgMC44MjM1MTdDMTcuNjgyOCAwLjgyMzUxNyAxOC4wOTExIDAuOTU5NTI1IDE4LjM4NDMgMS4yNDYwNEMxOC42NDEzIDEuNDk3MzEgMTguODIzMyAxLjgzNjUzIDE4LjgyMzMgMi4yMzA2N0MxOC44MjMzIDIuNjI0ODEgMTguNjQxMyAyLjk2NDAzIDE4LjM4NDMgMy4yMTUzTDguNTUzNiAxMi44MjM1TDE4LjM4NDMgMjIuNDMxN0MxOC42NDEzIDIyLjY4MyAxOC44MjMzIDIzLjAyMjIgMTguODIzMyAyMy40MTY0QzE4LjgyMzMgMjMuODEwNSAxOC42NDEzIDI0LjE0OTcgMTguMzg0MyAyNC40MDFDMTguMTI2NCAyNC42NTMgMTcuNzg2NyAyNC44MjM1IDE3LjM5OTkgMjQuODIzNUMxNy4wMTMyIDI0LjgyMzUgMTYuNjczNSAyNC42NTMgMTYuNDE1NiAyNC40MDFMNS42MTUzNCAxMy44NDUxQzUuMzU4MjUgMTMuNTkzOCA1LjE3NjI3IDEzLjI1NDYgNS4xNzYyNyAxMi44NjA0QzUuMTc2MjcgMTIuNDY3MyA1LjM1NzMgMTIuMTI4OCA1LjYxMzMyIDExLjg3NzhMNS42MTUzNCAxMS44NzU4WlwiLFxuICAgICAgICBmaWxsOiBcImN1cnJlbnRDb2xvclwiXG4gICAgICB9XG4gICAgKVxuICB9XG4pLCBqdSA9ICgpID0+IC8qIEBfX1BVUkVfXyAqLyBjKFwic3ZnXCIsIHsgdmlld0JveDogXCIwIDAgMjQgMjRcIiwgZmlsbDogXCJub25lXCIsIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsIGNoaWxkcmVuOiAvKiBAX19QVVJFX18gKi8gYyhcbiAgXCJwYXRoXCIsXG4gIHtcbiAgICBkOiBcIk0wLjIzNTI5NiAxNy4xMzU4QzAuMDc4NDM0IDE3LjI5NjMgMCAxNy40NTY4IDAgMTcuNjk3NUMwIDE3Ljg1OCAwLjA3ODQzNCAxOC4wOTg4IDAuMjM1Mjk2IDE4LjI1OTNDMC41NDkwMjEgMTguNTgwMiAwLjk0MTE3NyAxOC41ODAyIDEuMjU0OSAxOC4yNTkzTDEyIDcuMjY1NDFMMjIuNzQ1MSAxOC4yNTkzQzIzLjA1ODggMTguNTgwMiAyMy40NTEgMTguNTgwMiAyMy43NjQ3IDE4LjI1OTNDMjQuMDc4NCAxNy45MzgzIDI0LjA3ODQgMTcuNTM3IDIzLjc2NDcgMTcuMjE2MUwxMi41NDkgNS43NDA3NEMxMi4yMzUzIDUuNDE5NzUgMTEuODQzMSA1LjQxOTc1IDExLjUyOTQgNS43NDA3NEwwLjIzNTI5NiAxNy4xMzU4WlwiLFxuICAgIGZpbGw6IFwiY3VycmVudENvbG9yXCJcbiAgfVxuKSB9KSwgS3UgPSAoKSA9PiAvKiBAX19QVVJFX18gKi8gZTEoXCJzdmdcIiwgeyB2aWV3Qm94OiBcIjAgMCAyNCAyNFwiLCBmaWxsOiBcIm5vbmVcIiwgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiwgY2hpbGRyZW46IFtcbiAgLyogQF9fUFVSRV9fICovIGMoXCJnXCIsIHsgY2xpcFBhdGg6IFwidXJsKCNjbGlwMF8yMzQ2XzEyOTU1NilcIiwgY2hpbGRyZW46IC8qIEBfX1BVUkVfXyAqLyBjKFxuICAgIFwicGF0aFwiLFxuICAgIHtcbiAgICAgIGZpbGxSdWxlOiBcImV2ZW5vZGRcIixcbiAgICAgIGNsaXBSdWxlOiBcImV2ZW5vZGRcIixcbiAgICAgIGQ6IFwiTTEyIDI0QzE4LjYyNzQgMjQgMjQgMTguNjI3NCAyNCAxMkMyNCA1LjM3MjU4IDE4LjYyNzQgMCAxMiAwQzUuMzcyNTggMCAwIDUuMzcyNTggMCAxMkMwIDE4LjYyNzQgNS4zNzI1OCAyNCAxMiAyNFpNNy4yOTI4OSA3LjI5Mjg5QzYuOTAyMzcgNy42ODM0MiA2LjkwMjM3IDguMzE2NTggNy4yOTI4OSA4LjcwNzExTDEwLjU4NTggMTJMNy4yOTI4OSAxNS4yOTI5QzYuOTAyMzcgMTUuNjgzNCA2LjkwMjM3IDE2LjMxNjYgNy4yOTI4OSAxNi43MDcxQzcuNjgzNDIgMTcuMDk3NiA4LjMxNjU4IDE3LjA5NzYgOC43MDcxMSAxNi43MDcxTDEyIDEzLjQxNDJMMTUuMjkyOSAxNi43MDcxQzE1LjY4MzQgMTcuMDk3NiAxNi4zMTY2IDE3LjA5NzYgMTYuNzA3MSAxNi43MDcxQzE3LjA5NzYgMTYuMzE2NiAxNy4wOTc2IDE1LjY4MzQgMTYuNzA3MSAxNS4yOTI5TDEzLjQxNDIgMTJMMTYuNzA3MSA4LjcwNzExQzE3LjA5NzYgOC4zMTY1OCAxNy4wOTc2IDcuNjgzNDIgMTYuNzA3MSA3LjI5Mjg5QzE2LjMxNjYgNi45MDIzNyAxNS42ODM0IDYuOTAyMzcgMTUuMjkyOSA3LjI5Mjg5TDEyIDEwLjU4NThMOC43MDcxMSA3LjI5Mjg5QzguMzE2NTggNi45MDIzNyA3LjY4MzQyIDYuOTAyMzcgNy4yOTI4OSA3LjI5Mjg5WlwiLFxuICAgICAgZmlsbDogXCJjdXJyZW50Q29sb3JcIlxuICAgIH1cbiAgKSB9KSxcbiAgLyogQF9fUFVSRV9fICovIGMoXCJkZWZzXCIsIHsgY2hpbGRyZW46IC8qIEBfX1BVUkVfXyAqLyBjKFwiY2xpcFBhdGhcIiwgeyBpZDogXCJjbGlwMF8yMzQ2XzEyOTU1NlwiLCBjaGlsZHJlbjogLyogQF9fUFVSRV9fICovIGMoXCJyZWN0XCIsIHsgd2lkdGg6IFwiMjRcIiwgaGVpZ2h0OiBcIjI0XCIsIGZpbGw6IFwid2hpdGVcIiB9KSB9KSB9KVxuXSB9KSwgSnUgPSAoKSA9PiAvKiBAX19QVVJFX18gKi8gYyhcInN2Z1wiLCB7IHZpZXdCb3g6IFwiMCAwIDI0IDI0XCIsIGZpbGw6IFwibm9uZVwiLCB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLCBjaGlsZHJlbjogLyogQF9fUFVSRV9fICovIGMoXG4gIFwicGF0aFwiLFxuICB7XG4gICAgZmlsbFJ1bGU6IFwiZXZlbm9kZFwiLFxuICAgIGNsaXBSdWxlOiBcImV2ZW5vZGRcIixcbiAgICBkOiBcIk0wLjI1NjU4NCAxMi41MjQ2Qy0wLjA2OTAyMjQgMTIuMjU4IC0wLjEwMTUzMSAxMS43NTE0IDAuMjU2MjU4IDExLjQ1MjlMNy4yMzU1MSA1LjY0NjU4QzcuNDA0MjUgNS41MDE4OCA3LjU4NDc5IDUuNDYwNyA3Ljc1MDUxIDUuNDk2MjNDNy45MTM3MSA1LjUzMTIxIDguMDUzOTMgNS42Mzg2MiA4LjE1MDYzIDUuNzc1MjJDOC4zNDE4MiA2LjA0NTMxIDguMzgxMTkgNi40NjM4MSA4LjA1MDk3IDYuNzE4NjRMMS43MTgzIDExLjk5MzNMOC4wNTE2MyAxNy4yNTkxQzguMjM0MTYgMTcuNDA5MSA4LjMyMTc0IDE3LjU4NzQgOC4zMzM4NCAxNy43NjQyQzguMzQ1ODQgMTcuOTM5NiA4LjI4MzE3IDE4LjEwNjggOC4xNzc4IDE4LjIzNTlDOC4wNzI1NCAxOC4zNjQ5IDcuOTIyMTcgMTguNDU5IDcuNzU0MTggMTguNDg1M0M3LjU4NDU2IDE4LjUxMiA3LjQwMTQ0IDE4LjQ2ODggNy4yMzU4OSAxOC4zMzA5TDAuMjU2NTg0IDEyLjUyNDZaTTkuNDg1MDkgMTkuMTQ4TDEzLjI2NTUgNC40Nzk3MUMxMy4zMTMzIDQuMjc3MzYgMTMuNDMxNCA0LjE0MDcxIDEzLjU4MDIgNC4wNjY3NkMxMy43Mjc0IDMuOTkzNjIgMTMuOTAwMSAzLjk4MzgzIDE0LjA1NzIgNC4wMjQ2NEMxNC4yMTQ0IDQuMDY1NDggMTQuMzYxMiA0LjE1ODMyIDE0LjQ1NDQgNC4yOTcxMkMxNC41NDg2IDQuNDM3NCAxNC41ODQ1IDQuNjE5NTUgMTQuNTI3MiA0LjgyOTQyTDEwLjc0NjggMTkuNDk3N0MxMC42OTQ1IDE5LjcwNjIgMTAuNTc0OSAxOS44NDg4IDEwLjQyNTYgMTkuOTI3MUMxMC4yNzc3IDIwLjAwNDcgMTAuMTA1MiAyMC4wMTczIDkuOTQ4MzYgMTkuOTc2NUM5Ljc5MTQzIDE5LjkzNTYgOS42NDYyOSAxOS44NDAzIDkuNTU0ODMgMTkuNjk3M0M5LjQ2MjU4IDE5LjU1MyA5LjQyODM4IDE5LjM2NTMgOS40ODUwOSAxOS4xNDhaTTE1Ljk2MTIgNi43MTg0NUMxNS43OTI4IDYuNTg2MDggMTUuNzE1IDYuNDE2MzkgMTUuNzA3OCA2LjI0NTA0QzE1LjcwMDYgNi4wNzUzMiAxNS43NjI4IDUuOTA4NDEgMTUuODY1NiA1Ljc3NzMzQzE1Ljk2ODUgNS42NDYyNSAxNi4xMTU1IDUuNTQ2ODMgMTYuMjgyOSA1LjUxNzEyQzE2LjQ1MjMgNS40ODcwNiAxNi42MzYzIDUuNTI5NjIgMTYuODA2NyA1LjY3MTQzTDIzLjc1NTYgMTEuNDUyNEMyNC4wODMyIDExLjcyMDkgMjQuMDc5NiAxMi4yNTkzIDIzLjc1NTkgMTIuNTI0NUwxNi43NzY1IDE4LjMzMDlDMTYuNjEwOSAxOC40Njg4IDE2LjQyODcgMTguNTA4NSAxNi4yNjA0IDE4LjQ3NzFDMTYuMDk0MSAxOC40NDYxIDE1Ljk0NjQgMTguMzQ2NyAxNS44NDMyIDE4LjIxNTFDMTUuNzM5OSAxOC4wODM1IDE1LjY3OCAxNy45MTU1IDE1LjY4ODUgMTcuNzQzQzE1LjY5OTIgMTcuNTY4OSAxNS43ODM1IDE3LjM5NjQgMTUuOTYxMyAxNy4yNTg2TDIyLjI5NDEgMTEuOTkzM0wxNS45NjEyIDYuNzE4NDVaXCIsXG4gICAgZmlsbDogXCJjdXJyZW50Y29sb3JcIlxuICB9XG4pIH0pLCBfdSA9ICgpID0+IC8qIEBfX1BVUkVfXyAqLyBjKFwic3ZnXCIsIHsgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiwgdmlld0JveDogXCIwIDAgMjQgMjRcIiwgZmlsbDogXCJub25lXCIsIGNoaWxkcmVuOiAvKiBAX19QVVJFX18gKi8gYyhcbiAgXCJwYXRoXCIsXG4gIHtcbiAgICBmaWxsUnVsZTogXCJldmVub2RkXCIsXG4gICAgY2xpcFJ1bGU6IFwiZXZlbm9kZFwiLFxuICAgIGQ6IFwiTTIyLjcgMTEuM0MyMS44IDEwLjQgMjAuNyA5LjkgMTkuNSA5LjlDMTkuMyA5LjkgMTkuMSA5LjkgMTguOSAxMEMxNy45IDcgMTUuMiA1IDEyIDVDOS45IDUgNy45IDYgNi42IDcuNkM2LjMgNy42IDYuMSA3LjUgNS44IDcuNUMyLjYgNy41IDAgMTAuMiAwIDEzLjRDMCAxNi42IDIuNiAxOS4zIDUuOCAxOS4zSDE5LjRDMjEuOSAxOS4zIDI0IDE3LjIgMjQgMTQuNkMyNCAxMy40IDIzLjUgMTIuMiAyMi43IDExLjNaTTE5LjQgMTcuNUg1LjlDMy43IDE3LjUgMS45IDE1LjcgMS45IDEzLjRDMS45IDExLjEgMy43IDkuMyA1LjkgOS4zQzYuMiA5LjMgNi42IDkuNCA2LjggOS40QzYuOSA5LjQgNi45IDkuNCA3IDkuNEM3LjMgOS40IDcuNiA5LjMgNy44IDlDOC45IDcuNSAxMC40IDYuNyAxMi4xIDYuN0MxNC43IDYuNyAxNi45IDguNiAxNy4zIDExLjFDMTcuMyAxMS40IDE3LjQgMTEuNyAxNy43IDExLjlDMTcuOCAxMiAxOCAxMi4xIDE4LjEgMTIuMUMxOC4yIDEyLjEgMTguNCAxMi4xIDE4LjUgMTJDMTguOCAxMS45IDE5LjIgMTEuOCAxOS41IDExLjhDMjEgMTEuOCAyMi4zIDEzLjEgMjIuMyAxNC43QzIyLjIgMTYuMiAyMSAxNy41IDE5LjQgMTcuNVpcIixcbiAgICBmaWxsOiBcImN1cnJlbnRDb2xvclwiXG4gIH1cbikgfSksICR1ID0gKCkgPT4gLyogQF9fUFVSRV9fICovIGMoXCJzdmdcIiwgeyB2aWV3Qm94OiBcIjAgMCAyNCAyNFwiLCBmaWxsOiBcIm5vbmVcIiwgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiwgY2hpbGRyZW46IC8qIEBfX1BVUkVfXyAqLyBjKFxuICBcInBhdGhcIixcbiAge1xuICAgIGZpbGxSdWxlOiBcImV2ZW5vZGRcIixcbiAgICBjbGlwUnVsZTogXCJldmVub2RkXCIsXG4gICAgZDogXCJNMC4wNDkyMTU4IDE0Ljc3NUMwLjEyNDE0MiAxNC41NSAwLjI3Mzk5NSAxNC40IDAuNDk4Nzc1IDE0LjMyNUMxLjU0Nzc1IDEzLjk1IDIuNTIxNzkgMTMuNjUgMy41NzA3NiAxMy40MjVWMTAuNTc1QzIuNjcxNjQgMTAuMzUgMS42OTc2IDEwLjA1IDAuNTczNzAyIDkuNjc1MDJDMC4zNDg5MjIgOS42MDAwMiAwLjE5OTA2OSA5LjQ1IDAuMTI0MTQyIDkuMjI0OTlDMC4wNDkyMTU4IDguOTk5OTkgMC4xMjQxNDIgOC43NzUgMC4xOTkwNjkgOC42MjVMMy4xOTYxMyAzLjQ0OTk4QzMuMzQ1OTggMy4yMjQ5OCAzLjQ5NTg0IDMuMDc0OTggMy43MjA2MiAzLjA3NDk4QzMuOTQ1NCAyLjk5OTk4IDQuMTcwMTggMy4wNzQ5OSA0LjMyMDAzIDMuMjI0OTlDNS4yMTkxNSAzLjk3NDk5IDUuOTY4NDEgNC42NDk5OCA2LjY0Mjc1IDUuMzI0OThMOS4wNDA0IDMuOTAwMDFDOC44MTU2MiAyLjkyNTAxIDguNTkwODQgMS45NDk5OCA4LjM2NjA2IDAuODI0OTgyQzguMzY2MDYgMC41OTk5ODIgOC4zNjYwNiAwLjM3NDk5MSA4LjUxNTkyIDAuMjI0OTkxQzguNjY1NzcgMC4wNzQ5OTA5IDguODE1NjIgMCA5LjA0MDQgMEgxNS4wMzQ1QzE1LjI1OTMgMCAxNS40MDkyIDAuMDc0OTkwOSAxNS41NTkgMC4yMjQ5OTFDMTUuNzA4OSAwLjM3NDk5MSAxNS43ODM4IDAuNTk5OTgyIDE1LjcwODkgMC44MjQ5ODJDMTUuNDg0MSAyLjAyNDk4IDE1LjI1OTMgMy4wMDAwMSAxNS4wMzQ1IDMuOTAwMDFMMTcuNDMyMiA1LjMyNDk4QzE4LjEwNjUgNC42NDk5OCAxOC44NTU4IDMuOTc0OTkgMTkuNzU0OSAzLjIyNDk5QzE5LjkwNDggMy4wNzQ5OSAyMC4xMjk1IDMuMDc0OTggMjAuMzU0MyAzLjA3NDk4QzIwLjU3OTEgMy4xNDk5OCAyMC44MDM5IDMuMjk5OTggMjAuODc4OCAzLjQ0OTk4TDIzLjg3NTkgOC42MjVDMjQuMDI1NyA4Ljg1IDI0LjAyNTcgOC45OTk5OSAyMy45NTA4IDkuMjI0OTlDMjMuODc1OSA5LjQ1IDIzLjcyNiA5LjYwMDAyIDIzLjUwMTIgOS42NzUwMkMyMi4zNzczIDEwLjA1IDIxLjQwMzMgMTAuMzUgMjAuNTA0MiAxMC41NzVWMTMuNDI1QzIxLjQwMzMgMTMuNjUgMjIuMzc3MyAxMy45NSAyMy41MDEyIDE0LjMyNUMyMy43MjYgMTQuNCAyMy44NzU5IDE0LjU1IDIzLjk1MDggMTQuNzc1QzI0LjAyNTcgMTUgMjMuOTUwOCAxNS4yMjUgMjMuODc1OSAxNS4zNzVMMjAuODc4OCAyMC41NUMyMC43Mjg5IDIwLjc3NSAyMC41NzkxIDIwLjkyNSAyMC4zNTQzIDIwLjkyNUMyMC4xMjk1IDIxIDE5LjkwNDggMjAuOTI1IDE5Ljc1NDkgMjAuNzc1QzE4Ljg1NTggMjAuMDI1IDE4LjEwNjUgMTkuMzUgMTcuNDMyMiAxOC42NzVMMTUuMDM0NSAyMC4xQzE1LjI1OTMgMjEuMDc1IDE1LjQ4NDEgMjIuMDUgMTUuNzA4OSAyMy4xNzVDMTUuNzA4OSAyMy40IDE1LjcwODkgMjMuNjI1IDE1LjU1OSAyMy43NzVDMTUuNDA5MiAyMy45MjUgMTUuMjU5MyAyNCAxNS4wMzQ1IDI0SDkuMDQwNEM4LjgxNTYyIDI0IDguNjY1NzcgMjMuOTI1IDguNTE1OTIgMjMuNzc1QzguMzY2MDYgMjMuNjI1IDguMjkxMTQgMjMuNCA4LjM2NjA2IDIzLjE3NUM4LjU5MDg0IDIxLjk3NSA4LjgxNTYyIDIxIDkuMDQwNCAyMC4xTDYuNTY3ODMgMTguNjc1QzUuODkzNDkgMTkuMzUgNS4xNDQyMiAyMC4wMjUgNC4yNDUxIDIwLjc3NUM0LjA5NTI1IDIwLjkyNSAzLjg3MDQ3IDIwLjkyNSAzLjY0NTY5IDIwLjkyNUMzLjQyMDkxIDIwLjg1IDMuMTk2MTMgMjAuNyAzLjEyMTIgMjAuNTVMMC4xMjQxNDIgMTUuMzc1Qy0wLjAyNTcxMDggMTUuMTUgLTAuMDI1NzEwNyAxNSAwLjA0OTIxNTggMTQuNzc1Wk00LjMxOTk2IDkuMzc0OTlMNC4zMjAwMyA5LjM3NUM0LjYxOTc0IDkuNDUgNC44NDQ1MSA5LjY3NTAyIDQuODQ0NTEgMTAuMDVWMTMuOTVDNC44NDQ1MSAxNC4yNSA0LjYxOTc0IDE0LjU1IDQuMzIwMDMgMTQuNjI1TDQuMzE5OTYgMTQuNjI1QzMuNDk1NzkgMTQuODUgMi42NzE2MiAxNS4wNzUgMS42OTc2IDE1LjM3NUwzLjg3MDQ3IDE5LjA1QzQuNjE5NzMgMTguMzc1IDUuMjE5MTUgMTcuNzc1IDUuODE4NTYgMTcuMTc1QzYuMDQzMzQgMTYuOTUgNi4zNDMwNSAxNi44NzUgNi42NDI3NSAxNy4wMjVMMTAuMDE0NCAxOC45NzVDMTAuMjM5MiAxOS4yIDEwLjM4OTEgMTkuNSAxMC4zMTQyIDE5LjhDMTAuMjEwNyAyMC4zMTc4IDEwLjA3MTUgMjAuOTA3MiA5LjkyMTI3IDIxLjU0MzNDOS44NTM5MSAyMS44Mjg2IDkuNzg0MzMgMjIuMTIzMiA5LjcxNDc0IDIyLjQyNUgxMy45ODU2QzEzLjgzNTcgMjEuNDUgMTMuNjEwOSAyMC42MjUgMTMuMzg2MSAxOS44QzEzLjMxMTIgMTkuNDI1IDEzLjM4NjEgMTkuMTI1IDEzLjY4NTggMTguOTc1TDE3LjA1NzUgMTcuMDI1QzE3LjI4MjMgMTYuODc1IDE3LjY1NyAxNi45NSAxNy44ODE3IDE3LjE3NUMxOC40ODExIDE3Ljc3NSAxOS4wODA2IDE4LjM3NSAxOS44Mjk4IDE5LjA1TDIyLjAwMjcgMTUuMzc1QzIxLjAyODcgMTUuMDc1IDIwLjIwNDUgMTQuODUgMTkuMzgwMyAxNC42MjVMMTkuMzgwMyAxNC42MjVDMTkuMDgwNiAxNC41NSAxOC44NTU4IDE0LjI1IDE4Ljg1NTggMTMuOTVWMTAuMDVDMTguODU1OCA5Ljc1MDAyIDE5LjA4MDYgOS40NSAxOS4zODAzIDkuMzc1TDE5LjM4MDMgOS4zNzVDMjAuMjA0NSA5LjE1IDIxLjAyODcgOC45MjUgMjIuMDAyNyA4LjYyNUwxOS44Mjk4IDQuOTQ5OThDMTkuMDgwNiA1LjYyNDk4IDE4LjQ4MTEgNi4yMjQ5OCAxNy44ODE3IDYuODI0OThDMTcuNjU3IDcuMDQ5OTggMTcuMzU3MiA3LjEyNDk5IDE3LjA1NzUgNi45NzQ5OUwxMy42ODU4IDUuMDI1MDFDMTMuNDYxMSA0LjgwMDAxIDEzLjMxMTIgNC40OTk5OCAxMy4zODYxIDQuMTk5OThDMTMuNDg3IDMuNjQ0OCAxMy42MjE4IDMuMDg5NjEgMTMuNzY3NiAyLjQ4ODcxQzEzLjgzODUgMi4xOTY2OCAxMy45MTIgMS44OTM4NSAxMy45ODU2IDEuNTc0OThIOS43MTQ3NEM5Ljg2NDU5IDIuNTQ5OTggMTAuMDg5NCAzLjM3NDk4IDEwLjMxNDIgNC4xOTk5OEMxMC4zODkxIDQuNTc0OTggMTAuMzE0MiA0Ljg3NTAxIDEwLjAxNDQgNS4wMjUwMUw2LjY0Mjc1IDYuOTc0OTlDNi40MTc5NyA3LjEyNDk5IDYuMDQzMzQgNy4wNDk5OCA1LjgxODU2IDYuODI0OThDNS4yMTkxNSA2LjIyNDk4IDQuNjE5NzMgNS42MjQ5OCAzLjg3MDQ3IDQuOTQ5OThMMS42OTc2IDguNjI1QzIuNjcxNjIgOC45MjUgMy40OTU3OSA5LjE0OTk5IDQuMzE5OTYgOS4zNzQ5OVpNMTYuMTU4MSAxMkMxNi4xNTgxIDE0LjMyNDkgMTQuMjEgMTYuMjc0OSAxMS44ODc0IDE2LjI3NDlDOS40ODk4MSAxNi4yNzQ5IDcuNjE2NyAxNC4zMjQ5IDcuNjE2NyAxMkM3LjYxNjcgOS42NzUwNyA5LjU2NDc0IDcuNzI1MTEgMTEuODg3NCA3LjcyNTExQzE0LjIxIDcuNzI1MTEgMTYuMTU4MSA5LjY3NTA3IDE2LjE1ODEgMTJaTTE0LjgwOTQgMTJDMTQuODA5NCAxMC4zNTAxIDEzLjQ2MDggOS4wNzUwNyAxMS44ODc0IDkuMDc1MDdDMTAuMjM5MSA5LjA3NTA3IDguOTY1MzQgMTAuMzUwMSA4Ljk2NTM0IDEyQzguOTY1MzQgMTMuNjUgMTAuMzE0IDE0LjkyNDkgMTEuODg3NCAxNC45MjQ5QzEzLjUzNTcgMTQuOTI0OSAxNC44MDk0IDEzLjU3NSAxNC44MDk0IDEyWlwiLFxuICAgIGZpbGw6IFwiY3VycmVudENvbG9yXCJcbiAgfVxuKSB9KSwgZXogPSAoKSA9PiAvKiBAX19QVVJFX18gKi8gYyhcInN2Z1wiLCB7IHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsIHZpZXdCb3g6IFwiMCAwIDI0IDI0XCIsIGZpbGw6IFwibm9uZVwiLCBjaGlsZHJlbjogLyogQF9fUFVSRV9fICovIGMoXG4gIFwicGF0aFwiLFxuICB7XG4gICAgZmlsbFJ1bGU6IFwiZXZlbm9kZFwiLFxuICAgIGNsaXBSdWxlOiBcImV2ZW5vZGRcIixcbiAgICBkOiBcIk0yMy41IDE0LjNDMjIuNCAxMy45IDIxLjQgMTMuNiAyMC41IDEzLjRWMTAuNUMyMS40IDEwLjMgMjIuNCAxMCAyMy41IDkuNkMyMy43IDkuNSAyMy45IDkuNCAyNCA5LjFDMjQgOSAyNCA4LjkgMjMuOSA4LjZMMjAuOSAzLjRDMjAuOCAzLjMgMjAuNiAzLjEgMjAuNCAzQzIwLjIgMyAyMCAzIDE5LjggMy4yQzE4LjkgNCAxOC4yIDQuNiAxNy41IDUuM0wxNSAzLjlDMTUuMyAzIDE1LjUgMiAxNS43IDAuOEMxNS44IDAuNiAxNS43IDAuMyAxNS41IDAuMkMxNS40IDAuMSAxNS4zIDAgMTUgMEg5QzguOCAwIDguNyAwLjEgOC41IDAuMkM4LjQgMC40IDguNCAwLjYgOC40IDAuOEM4LjYgMiA4LjggMi45IDkgMy45TDYuNiA1LjNDNiA0LjcgNS4yIDQgNC4zIDMuMkM0LjIgMy4xIDQgMyAzLjcgMy4xQzMuNSAzLjEgMy4zIDMuMyAzLjIgMy41TDAuMiA4LjdDMC4xIDguOCAwLjEgOSAwLjEgOS4yQzAuMiA5LjQgMC4zIDkuNiAwLjYgOS43QzEuNyAxMC4xIDIuNyAxMC40IDMuNiAxMC42VjEzLjVDMi42IDEzLjcgMS42IDE0IDAuNSAxNC40QzAuMyAxNC41IDAuMSAxNC42IDAgMTQuOUMwIDE1IDAgMTUuMiAwLjEgMTUuNEwzLjEgMjAuNkMzLjIgMjAuNyAzLjQgMjAuOSAzLjYgMjFDMy44IDIxIDQgMjEgNC4yIDIwLjhDNS4xIDIwIDUuOCAxOS40IDYuNSAxOC43TDkgMjAuMUM4LjggMjEgOC42IDIyIDguNCAyMy4yQzguMyAyMy40IDguNCAyMy42IDguNiAyMy44QzguNyAyMy45IDguOCAyNCA5IDI0SDE1QzE1LjIgMjQgMTUuNCAyMy45IDE1LjUgMjMuOEMxNS42IDIzLjcgMTUuNyAyMy40IDE1LjcgMjMuMkMxNS41IDIyLjEgMTUuMiAyMS4xIDE1IDIwLjFMMTcuNCAxOC43QzE4LjEgMTkuNCAxOC44IDIwIDE5LjcgMjAuOEMxOS45IDIxIDIwLjEgMjEgMjAuMyAyMUMyMC41IDIxIDIwLjcgMjAuOCAyMC44IDIwLjZMMjMuOCAxNS40QzI0IDE1LjIgMjQgMTUgMjQgMTQuOEMyMy45IDE0LjYgMjMuNyAxNC40IDIzLjUgMTQuM1pNMTEuOSA5LjFDMTMuNSA5LjEgMTQuOCAxMC40IDE0LjggMTJDMTQuOCAxMy42IDEzLjUgMTQuOSAxMS45IDE0LjlDMTAuMyAxNC45IDkgMTMuNyA5IDEyQzkgMTAuNCAxMC4yIDkuMSAxMS45IDkuMVpcIixcbiAgICBmaWxsOiBcImN1cnJlbnRDb2xvclwiXG4gIH1cbikgfSksIHR6ID0gKCkgPT4gLyogQF9fUFVSRV9fICovIGUxKFwic3ZnXCIsIHsgdmlld0JveDogXCIwIDAgMjQgMjRcIiwgZmlsbDogXCJub25lXCIsIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsIGNoaWxkcmVuOiBbXG4gIC8qIEBfX1BVUkVfXyAqLyBjKFxuICAgIFwicGF0aFwiLFxuICAgIHtcbiAgICAgIGZpbGxSdWxlOiBcImV2ZW5vZGRcIixcbiAgICAgIGNsaXBSdWxlOiBcImV2ZW5vZGRcIixcbiAgICAgIGQ6IFwiTTEuMDkwOTEgMS4wOTA5MUg4LjAzMzA2VjIyLjkwOTFIMS4wOTA5MUwxLjA5MDkxIDEuMDkwOTFaTTEuMDkwOTEgMjMuOTAwOEMwLjU0MzE4OSAyMy45MDA4IDAuMDk5MTczNiAyMy40NTY4IDAuMDk5MTczNiAyMi45MDkxVjEuMDkwOTFDMC4wOTkxNzM2IDAuNTQzMTg5IDAuNTQzMTg5IDAuMDk5MTczNiAxLjA5MDkxIDAuMDk5MTczNkgyMi45MDkxQzIzLjQ1NjggMC4wOTkxNzM2IDIzLjkwMDggMC41NDMxODkgMjMuOTAwOCAxLjA5MDkxVjIyLjkwOTFDMjMuOTAwOCAyMy40NTY4IDIzLjQ1NjggMjMuOTAwOCAyMi45MDkxIDIzLjkwMDhIMS4wOTA5MVpNOS4wMjQ3OSAxLjA5MDkxVjIyLjkwOTFIMTQuOTc1MlYxLjA5MDkxSDkuMDI0NzlaTTE1Ljk2NjkgMjIuOTA5MVYxLjA5MDkxSDIyLjkwOTFWMjIuOTA5MUgxNS45NjY5WlwiLFxuICAgICAgZmlsbDogXCJjdXJyZW50Q29sb3JcIlxuICAgIH1cbiAgKSxcbiAgLyogQF9fUFVSRV9fICovIGMoXG4gICAgXCJwYXRoXCIsXG4gICAge1xuICAgICAgZmlsbFJ1bGU6IFwiZXZlbm9kZFwiLFxuICAgICAgY2xpcFJ1bGU6IFwiZXZlbm9kZFwiLFxuICAgICAgZDogXCJNMS4wOTA5MSAxLjA5MDkxSDguMDMzMDZWMjIuOTA5MUgxLjA5MDkxTDEuMDkwOTEgMS4wOTA5MVpNMS4xOTAwOCAyMi44MDk5SDcuOTMzODhWMS4xOTAwOEgxLjE5MDA4TDEuMTkwMDggMjIuODA5OVpNMS4wOTA5MSAyNEMwLjQ4ODQxNyAyNCAwIDIzLjUxMTYgMCAyMi45MDkxVjEuMDkwOTFDMCAwLjQ4ODQxNyAwLjQ4ODQxNyAwIDEuMDkwOTEgMEgyMi45MDkxQzIzLjUxMTYgMCAyNCAwLjQ4ODQxNyAyNCAxLjA5MDkxVjIyLjkwOTFDMjQgMjMuNTExNiAyMy41MTE2IDI0IDIyLjkwOTEgMjRIMS4wOTA5MVpNOS4xMjM5NyAxLjE5MDA4VjIyLjgwOTlIMTQuODc2VjEuMTkwMDhIOS4xMjM5N1pNMTUuOTY2OSAyMi45MDkxVjEuMDkwOTFIMjIuOTA5MVYyMi45MDkxSDE1Ljk2NjlaTTIyLjgwOTkgMjIuODA5OVYxLjE5MDA4SDE2LjA2NjFWMjIuODA5OUgyMi44MDk5Wk0xLjA5MDkxIDIzLjkwMDhIMjIuOTA5MUMyMy40NTY4IDIzLjkwMDggMjMuOTAwOCAyMy40NTY4IDIzLjkwMDggMjIuOTA5MVYxLjA5MDkxQzIzLjkwMDggMC41NDMxODkgMjMuNDU2OCAwLjA5OTE3MzYgMjIuOTA5MSAwLjA5OTE3MzZIMS4wOTA5MUMwLjU0MzE4OSAwLjA5OTE3MzYgMC4wOTkxNzM2IDAuNTQzMTg5IDAuMDk5MTczNiAxLjA5MDkxVjIyLjkwOTFDMC4wOTkxNzM2IDIzLjQ1NjggMC41NDMxODkgMjMuOTAwOCAxLjA5MDkxIDIzLjkwMDhaTTkuMDI0NzkgMS4wOTA5MUgxNC45NzUyVjIyLjkwOTFIOS4wMjQ3OVYxLjA5MDkxWlwiLFxuICAgICAgZmlsbDogXCJjdXJyZW50Q29sb3JcIlxuICAgIH1cbiAgKVxuXSB9KSwgb3ogPSAoKSA9PiAvKiBAX19QVVJFX18gKi8gZTEoXCJzdmdcIiwgeyB2aWV3Qm94OiBcIjAgMCAyNCAyNFwiLCBmaWxsOiBcIm5vbmVcIiwgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiwgY2hpbGRyZW46IFtcbiAgLyogQF9fUFVSRV9fICovIGMoXG4gICAgXCJwYXRoXCIsXG4gICAge1xuICAgICAgZDogXCJNNC45IDBIMS4yQzAuNSAwIDAgMC41IDAgMS4yVjIyLjhDMCAyMy40IDAuNSAyNCAxLjIgMjRINUM1LjYgMjQgNi4yIDIzLjUgNi4yIDIyLjhWMS4yQzYuMSAwLjUgNS42IDAgNC45IDBaXCIsXG4gICAgICBmaWxsOiBcImN1cnJlbnRDb2xvclwiXG4gICAgfVxuICApLFxuICAvKiBAX19QVVJFX18gKi8gYyhcbiAgICBcInBhdGhcIixcbiAgICB7XG4gICAgICBkOiBcIk0xMy45IDBIMTAuMUM5LjUgMCA5IDAuNSA5IDEuMlYyMi44QzkgMjMuNCA5LjUgMjQgMTAuMiAyNEgxNEMxNC42IDI0IDE1LjIgMjMuNSAxNS4yIDIyLjhWMS4yQzE1IDAuNSAxNC41IDAgMTMuOSAwWlwiLFxuICAgICAgZmlsbDogXCJjdXJyZW50Q29sb3JcIlxuICAgIH1cbiAgKSxcbiAgLyogQF9fUFVSRV9fICovIGMoXG4gICAgXCJwYXRoXCIsXG4gICAge1xuICAgICAgZDogXCJNMjIuOCAwSDE5QzE4LjQgMCAxNy44IDAuNSAxNy44IDEuMlYyMi44QzE3LjggMjMuNCAxOC4zIDI0IDE5IDI0SDIyLjhDMjMuNCAyNCAyNCAyMy41IDI0IDIyLjhWMS4yQzI0IDAuNSAyMy41IDAgMjIuOCAwWlwiLFxuICAgICAgZmlsbDogXCJjdXJyZW50Q29sb3JcIlxuICAgIH1cbiAgKVxuXSB9KSwgcnogPSAoKSA9PiAvKiBAX19QVVJFX18gKi8gYyhcInN2Z1wiLCB7IHZpZXdCb3g6IFwiMCAwIDI0IDI0XCIsIGZpbGw6IFwibm9uZVwiLCB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLCBjaGlsZHJlbjogLyogQF9fUFVSRV9fICovIGMoXG4gIFwicGF0aFwiLFxuICB7XG4gICAgZDogXCJNMC43MDgyMTYgMjRIMTQuNzkzNEgyMy4yOTE4QzIzLjY4NTIgMjQgMjQgMjMuNjg1MiAyNCAyMy4yOTE4VjAuNzA4MTkyQzI0IDAuMzE0NzQ5IDIzLjY4NTIgMCAyMy4yOTE4IDBIMTQuNzkzNEgwLjcwODIxNkMwLjMxNDc3MyAwIDAgMC4zMTQ3NDkgMCAwLjcwODE5MlY2LjM3Mzc2VjIzLjI5MThDMCAyMy42ODUyIDAuMzE0NzczIDI0IDAuNzA4MjE2IDI0Wk0xLjQxNjM4IDcuMDgxOTdIMTQuMDg1M1YyMi41ODM2SDEuNDE2MzhWNy4wODE5N1pNMjIuNTgzNiAyMi41MDQ5SDE1LjU4MDNWNi4yOTUwOFYxLjQxNjRIMjIuNTgzNlYyMi41MDQ5Wk0xLjQxNjM4IDEuNDE2NEgxNC4wODUzVjUuNTg2ODhIMS40MTYzOFYxLjQxNjRaXCIsXG4gICAgZmlsbDogXCJjdXJyZW50Q29sb3JcIlxuICB9XG4pIH0pLCBueiA9ICgpID0+IC8qIEBfX1BVUkVfXyAqLyBlMShcInN2Z1wiLCB7IHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsIHZpZXdCb3g6IFwiMCAwIDI0IDI0XCIsIGZpbGw6IFwibm9uZVwiLCBjaGlsZHJlbjogW1xuICAvKiBAX19QVVJFX18gKi8gYyhcbiAgICBcInBhdGhcIixcbiAgICB7XG4gICAgICBkOiBcIk0yMi44IDBIMTcuNUMxNi45IDAgMTYuMyAwLjUgMTYuMyAxLjJWMjIuOEMxNi4zIDIzLjQgMTYuOCAyNCAxNy41IDI0SDIyLjhDMjMuNCAyNCAyNCAyMy41IDI0IDIyLjhWMS4yQzI0IDAuNSAyMy41IDAgMjIuOCAwWlwiLFxuICAgICAgZmlsbDogXCJjdXJyZW50Q29sb3JcIlxuICAgIH1cbiAgKSxcbiAgLyogQF9fUFVSRV9fICovIGMoXG4gICAgXCJwYXRoXCIsXG4gICAge1xuICAgICAgZDogXCJNMTIuNCA3LjlIMS4yQzAuNSA3LjkgMCA4LjUgMCA5LjFWMjIuOEMwIDIzLjUgMC41IDI0IDEuMiAyNEgxMi40QzEzIDI0IDEzLjYgMjMuNSAxMy42IDIyLjhWOS4xQzEzLjUgOC41IDEzIDcuOSAxMi40IDcuOVpcIixcbiAgICAgIGZpbGw6IFwiY3VycmVudENvbG9yXCJcbiAgICB9XG4gICksXG4gIC8qIEBfX1BVUkVfXyAqLyBjKFxuICAgIFwicGF0aFwiLFxuICAgIHtcbiAgICAgIGQ6IFwiTTEyLjQgMEgxLjJDMC41IDAgMCAwLjUgMCAxLjJWNEMwIDQuNiAwLjUgNS4yIDEuMiA1LjJIMTIuNEMxMyA1LjIgMTMuNiA0LjcgMTMuNiA0VjEuMkMxMy41IDAuNSAxMyAwIDEyLjQgMFpcIixcbiAgICAgIGZpbGw6IFwiY3VycmVudENvbG9yXCJcbiAgICB9XG4gIClcbl0gfSksIGl6ID0gKCkgPT4gLyogQF9fUFVSRV9fICovIGUxKFwic3ZnXCIsIHsgdmlld0JveDogXCIwIDAgMjQgMjRcIiwgZmlsbDogXCJub25lXCIsIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsIGNoaWxkcmVuOiBbXG4gIC8qIEBfX1BVUkVfXyAqLyBlMShcImdcIiwgeyBjbGlwUGF0aDogXCJ1cmwoI2NsaXAwXzI3MjFfNjE0NTgpXCIsIGNoaWxkcmVuOiBbXG4gICAgLyogQF9fUFVSRV9fICovIGMoXG4gICAgICBcInBhdGhcIixcbiAgICAgIHtcbiAgICAgICAgZmlsbFJ1bGU6IFwiZXZlbm9kZFwiLFxuICAgICAgICBjbGlwUnVsZTogXCJldmVub2RkXCIsXG4gICAgICAgIGQ6IFwiTTguMyA4LjNWMjIuN0gyMi43VjguM0g4LjNaTTggN0M3LjQ0NzcyIDcgNyA3LjQ0NzcyIDcgOFYyM0M3IDIzLjU1MjMgNy40NDc3MiAyNCA4IDI0SDIzQzIzLjU1MjMgMjQgMjQgMjMuNTUyMyAyNCAyM1Y4QzI0IDcuNDQ3NzIgMjMuNTUyMyA3IDIzIDdIOFpcIixcbiAgICAgICAgZmlsbDogXCJjdXJyZW50Y29sb3JcIlxuICAgICAgfVxuICAgICksXG4gICAgLyogQF9fUFVSRV9fICovIGMoXG4gICAgICBcInBhdGhcIixcbiAgICAgIHtcbiAgICAgICAgZmlsbFJ1bGU6IFwiZXZlbm9kZFwiLFxuICAgICAgICBjbGlwUnVsZTogXCJldmVub2RkXCIsXG4gICAgICAgIGQ6IFwiTTEuMyAxLjNWMTUuN0gxNS43VjEuM0gxLjNaTTEgMEMwLjQ0NzcxNSAwIDAgMC40NDc3MTUgMCAxVjE2QzAgMTYuNTUyMyAwLjQ0NzcxNSAxNyAxIDE3SDE2QzE2LjU1MjMgMTcgMTcgMTYuNTUyMyAxNyAxNlYxQzE3IDAuNDQ3NzE1IDE2LjU1MjMgMCAxNiAwSDFaXCIsXG4gICAgICAgIGZpbGw6IFwiY3VycmVudENvbG9yXCJcbiAgICAgIH1cbiAgICApXG4gIF0gfSksXG4gIC8qIEBfX1BVUkVfXyAqLyBjKFwiZGVmc1wiLCB7IGNoaWxkcmVuOiAvKiBAX19QVVJFX18gKi8gYyhcImNsaXBQYXRoXCIsIHsgaWQ6IFwiY2xpcDBfMjcyMV82MTQ1OFwiLCBjaGlsZHJlbjogLyogQF9fUFVSRV9fICovIGMoXCJyZWN0XCIsIHsgd2lkdGg6IFwiMjRcIiwgaGVpZ2h0OiBcIjI0XCIsIGZpbGw6IFwiY3VycmVudENvbG9yXCIgfSkgfSkgfSlcbl0gfSksIGF6ID0gKCkgPT4gLyogQF9fUFVSRV9fICovIGUxKFwic3ZnXCIsIHsgdmlld0JveDogXCIwIDAgMjQgMjRcIiwgZmlsbDogXCJub25lXCIsIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsIGNoaWxkcmVuOiBbXG4gIC8qIEBfX1BVUkVfXyAqLyBjKFxuICAgIFwicGF0aFwiLFxuICAgIHtcbiAgICAgIGZpbGxSdWxlOiBcImV2ZW5vZGRcIixcbiAgICAgIGNsaXBSdWxlOiBcImV2ZW5vZGRcIixcbiAgICAgIGQ6IFwiTTE4Ljg5IDE5LjMzSDE1LjE0VjguMzEyMkgxOC44OVYxOS4zM1pNMTcuNSA5LjQ2SDE2LjVWMTguMTk0NkgxNy41VjkuNDZaXCIsXG4gICAgICBmaWxsOiBcImN1cnJlbnRjb2xvclwiXG4gICAgfVxuICApLFxuICAvKiBAX19QVVJFX18gKi8gYyhcbiAgICBcInBhdGhcIixcbiAgICB7XG4gICAgICBmaWxsUnVsZTogXCJldmVub2RkXCIsXG4gICAgICBjbGlwUnVsZTogXCJldmVub2RkXCIsXG4gICAgICBkOiBcIk0xMC4yNSA4LjMxMjJWMTkuMzNIMTMuNzVWOC4zMTIySDEwLjI1Wk0xMS42MSAxOC4xOTQ2VjkuNDZIMTIuMzlWMTguMTk0NkgxMS42MVpcIixcbiAgICAgIGZpbGw6IFwiY3VycmVudGNvbG9yXCJcbiAgICB9XG4gICksXG4gIC8qIEBfX1BVUkVfXyAqLyBjKFxuICAgIFwicGF0aFwiLFxuICAgIHtcbiAgICAgIGZpbGxSdWxlOiBcImV2ZW5vZGRcIixcbiAgICAgIGNsaXBSdWxlOiBcImV2ZW5vZGRcIixcbiAgICAgIGQ6IFwiTTguODU5OTkgMTkuMzNINS4xMDk5OVY4LjMxMjJIOC44NTk5OVYxOS4zM1pNNy40Njk5OSA5LjQ2SDYuNDY5OTlWMTguMTk0Nkg3LjQ2OTk5VjkuNDZaXCIsXG4gICAgICBmaWxsOiBcImN1cnJlbnRjb2xvclwiXG4gICAgfVxuICApLFxuICAvKiBAX19QVVJFX18gKi8gYyhcbiAgICBcInBhdGhcIixcbiAgICB7XG4gICAgICBmaWxsUnVsZTogXCJldmVub2RkXCIsXG4gICAgICBjbGlwUnVsZTogXCJldmVub2RkXCIsXG4gICAgICBkOiBcIk0yNCA2LjE5VjkuNDZIMjEuNjRWMTcuODlIMjIuNDdWMTkuNDlIMjRWMjNIMFYxOS40OUgxLjUzVjE3Ljg5SDIuMzZWOS40NkgwVjYuMTlDMCA2LjE5IDExLjY1MSAxIDEyIDFDMTIuMzQ5IDAuOTk5OTk4IDI0IDYuMTkgMjQgNi4xOVpNMjEuNDA3NiAyMC42NjI4VjE5LjMzSDIwLjQxOTdWOC4zMTIySDIyLjc3MzRWNi45OTg4NkwxMiAyLjQwODg2TDEuMjA4OTggNi45OTg4NlY4LjMxMjJIMy41NTdWMTkuMzNIMi42MTYxNFYyMC42NjI4SDEuMjA4OThWMjEuODU1OEgyMi43NzM0VjIwLjY2MjhIMjEuNDA3NlpcIixcbiAgICAgIGZpbGw6IFwiY3VycmVudGNvbG9yXCJcbiAgICB9XG4gIClcbl0gfSksIHN6ID0gKCkgPT4gLyogQF9fUFVSRV9fICovIGMoXCJzdmdcIiwgeyB2aWV3Qm94OiBcIjAgMCAyNCAyNFwiLCBmaWxsOiBcIm5vbmVcIiwgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiwgY2hpbGRyZW46IC8qIEBfX1BVUkVfXyAqLyBjKFxuICBcInBhdGhcIixcbiAge1xuICAgIGQ6IFwiTTQuMzA5MTYgMjAuODEwMkwxMi4wMjcgMTMuMDkyNEwxOS43MTk1IDIwLjc4NDlDMjAuMDA2NiAyMS4wNzE5IDIwLjQ2NjYgMjEuMDcxMiAyMC43NTQ1IDIwLjc4MzJDMjEuMDQyNSAyMC40OTUyIDIxLjA0MzMgMjAuMDM1MiAyMC43NTYyIDE5Ljc0ODJMMTMuMDYzNyAxMi4wNTU2TDIwLjc4MTUgNC4zMzc4QzIxLjA2OTUgNC4wNDk4MyAyMS4wNzAzIDMuNTg5ODEgMjAuNzgzMiAzLjMwMjc4QzIwLjQ5NjIgMy4wMTU3NSAyMC4wMzYyIDMuMDE2NSAxOS43NDgyIDMuMzA0NDhMMTIuMDg4IDEwLjk2NDdMNC4zMzgwNiAzLjIxNDc4QzQuMDUxMDIgMi45Mjc3NSAzLjU5MTAxIDIuOTI4NSAzLjMwMzAzIDMuMjE2NDhDMy4wMTUwNSAzLjUwNDQ2IDMuMDE0MyAzLjk2NDQ3IDMuMzAxMzMgNC4yNTE1TDEwLjk5MzkgMTEuOTQ0TDMuMjE4NDMgMTkuNzE5NEMyLjkzMDQ2IDIwLjAwNzQgMi45Mjk3IDIwLjQ2NzQgMy4yMTY3MyAyMC43NTQ1QzMuNTAzNzcgMjEuMDQxNSA0LjAyMTE5IDIxLjA5ODIgNC4zMDkxNiAyMC44MTAyWlwiLFxuICAgIGZpbGw6IFwiY3VycmVudENvbG9yXCJcbiAgfVxuKSB9KSwgY3ogPSAoKSA9PiAvKiBAX19QVVJFX18gKi8gYyhcInN2Z1wiLCB7IHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsIHZpZXdCb3g6IFwiMCAwIDI0IDI0XCIsIGZpbGw6IFwibm9uZVwiLCBjaGlsZHJlbjogLyogQF9fUFVSRV9fICovIGMoXG4gIFwicGF0aFwiLFxuICB7XG4gICAgZDogXCJNMTQuMTc1IDEyLjVMMjEuNTc1IDUuMUMyMi4wNzUgNC42IDIyLjA3NSAzLjkgMjEuNTc1IDMuNUMyMS4zNzUgMy4zIDIxLjA3NSAzLjIgMjAuNzc1IDMuMkMyMC40NzUgMy4yIDIwLjE3NSAzLjMgMTkuOTc1IDMuNUwxMi41NzUgMTAuOEw1LjE3NSAzLjNDNC44NzUgMy4xIDQuNjc1IDMgNC4yNzUgM0MzLjk3NSAzIDMuNjc1IDMuMSAzLjQ3NSAzLjNDMy4yNzUgMy42IDMuMTc1IDMuOSAzLjE3NSA0LjJDMy4xNzUgNC41IDMuMjc1IDQuOCAzLjQ3NSA1TDEwLjg3NSAxMi40TDMuMzc1IDE5LjlDMi44NzUgMjAuNCAyLjg3NSAyMS4xIDMuMzc1IDIxLjVDMy41NzUgMjEuNyAzLjk3NSAyMS45IDQuMjc1IDIxLjlDNC41NzUgMjEuOSA0Ljg3NSAyMS44IDUuMDc1IDIxLjZMMTIuNDc1IDE0LjJMMTkuODc1IDIxLjZDMjAuMDc1IDIxLjggMjAuMzc1IDIxLjkgMjAuNjc1IDIxLjlDMjAuOTc1IDIxLjkgMjEuMjc1IDIxLjggMjEuNDc1IDIxLjZDMjEuOTc1IDIxLjEgMjEuOTc1IDIwLjQgMjEuNDc1IDIwTDE0LjE3NSAxMi41WlwiLFxuICAgIGZpbGw6IFwiY3VycmVudENvbG9yXCJcbiAgfVxuKSB9KSwgbHogPSAoKSA9PiAvKiBAX19QVVJFX18gKi8gYyhcInN2Z1wiLCB7IHZpZXdCb3g6IFwiMCAwIDI0IDI0XCIsIGZpbGw6IFwibm9uZVwiLCB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLCBjaGlsZHJlbjogLyogQF9fUFVSRV9fICovIGMoXG4gIFwicGF0aFwiLFxuICB7XG4gICAgZDogXCJNMCAyMy4wMzI2QzAuMDA3NzYxNDIgMjMuNTQ1OCAwLjQzNjg5OSAyMy45OTIxIDAuOTY3NDU0IDI0LjAwMDFMMTUuMTU5NCAyMS40MTc3QzE1LjU3NTQgMjEuMzY0NSAxNS44NjY5IDIwLjk1MjEgMTUuNzQwNSAyMC40NzM4QzE1LjY3NDYgMjAuMDU2IDE1LjI1MzIgMTkuNzUxOSAxNC43Nzg1IDE5Ljg2MzdMMy4wODA3MSAyMi4wMDc3TDIzLjc4NDcgMS4zMDM2OUMyNC4wNzggMS4wMTA0MyAyNC4wNzA3IDAuNTMzOTQ1IDIzLjc2ODQgMC4yMzE2MTFDMjMuNDY2MSAtMC4wNzA3MjMzIDIyLjk4OTYgLTAuMDc3OTk5IDIyLjY5NjMgMC4yMTUyNTlMMi4wNTA5MyAyMC44NjA2TDQuMTk1MDEgOS4xNjI5MkM0LjI0ODIxIDguNzQ2OTEgMy45NDQwMyA4LjMyNTQzIDMuNTg0ODYgOC4yMDA4NkMzLjE2NzA0IDguMTM0OTUgMi43NTQ2MyA4LjQyNjM2IDIuNjQwOTYgOC43ODE5TDAgMjMuMDMyNlpcIixcbiAgICBmaWxsOiBcImN1cnJlbnRjb2xvclwiXG4gIH1cbikgfSksIHB6ID0gKCkgPT4gLyogQF9fUFVSRV9fICovIGMoXCJzdmdcIiwgeyB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLCB2aWV3Qm94OiBcIjAgMCAyNCAyNFwiLCBmaWxsOiBcIm5vbmVcIiwgY2hpbGRyZW46IC8qIEBfX1BVUkVfXyAqLyBjKFxuICBcInBhdGhcIixcbiAge1xuICAgIGQ6IFwiTTIyIDE0LjM4ODNDMjAuNTk0MiAxNS42NjQ5IDE4LjcxNjkgMTYuNDQ0NSAxNi42NTQ3IDE2LjQ0NDVDMTIuMjk2NiAxNi40NDQ1IDguNzYzNzIgMTIuOTYyMyA4Ljc2MzcyIDguNjY2NzNDOC43NjM3MiA1Ljg0MzQ4IDEwLjI4OTkgMy4zNzE1NiAxMi41NzM0IDIuMDA4NzNDMTIuNDMxNSAyLjAwMjkzIDEyLjI4ODkgMiAxMi4xNDU2IDJDNi41NDIzMyAyIDIgNi40NzcxNSAyIDEyQzIgMTcuNTIyOCA2LjU0MjMzIDIyIDEyLjE0NTYgMjJDMTYuOTEzNyAyMiAyMC45MTM2IDE4Ljc1OCAyMiAxNC4zODgzWlwiLFxuICAgIGZpbGw6IFwiY3VycmVudGNvbG9yXCJcbiAgfVxuKSB9KSwgZHogPSAoKSA9PiAvKiBAX19QVVJFX18gKi8gYyhcInN2Z1wiLCB7IHZpZXdCb3g6IFwiMCAwIDI0IDI0XCIsIGZpbGw6IFwibm9uZVwiLCB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLCBjaGlsZHJlbjogLyogQF9fUFVSRV9fICovIGMoXG4gIFwicGF0aFwiLFxuICB7XG4gICAgZmlsbFJ1bGU6IFwiZXZlbm9kZFwiLFxuICAgIGNsaXBSdWxlOiBcImV2ZW5vZGRcIixcbiAgICBkOiBcIk0yMy45NDU3IDIzLjE0OTFDMjQuMDUxOSAyMy4zNjkyIDIzLjk5MTEgMjMuNTg2OCAyMy44NjAzIDIzLjc0MjRDMjMuNzMwOCAyMy44OTY3IDIzLjUyNTkgMjQgMjMuMzIxMiAyNEgwLjY1ODE1OUMwLjIzMTkwMyAyNCAtMC4xMDcxNTkgMjMuNTczOSAwLjAzMTQ5ODEgMjMuMTU1NkwyLjg3MTgxIDE0LjY0NjRDMi45NzQwNCAxNC4zMzgyIDMuMjQwMzIgMTQuMjIxNCAzLjUxMjYzIDE0LjIyMTRINi4zMzg3MkM2LjY4OTgxIDE0LjIyMTQgNi45NzA0MiAxNC41MDQ0IDYuOTcwNDIgMTQuODU2MkM2Ljk3MDQyIDE1LjIwOCA2LjY4OTggMTUuNDkwOSA2LjMzODcyIDE1LjQ5MDlIMy45ODQwNEwxLjU2NTAyIDIyLjczMDVIMjIuNDE0NEwxOS45OTU0IDE1LjQ5MDlIMTcuNjQwN0MxNy4yODk2IDE1LjQ5MDkgMTcuMDA5IDE1LjIwOCAxNy4wMDkgMTQuODU2MkMxNy4wMDkgMTQuNTA0NCAxNy4yODk2IDE0LjIyMTQgMTcuNjQwNyAxNC4yMjE0SDIwLjQ4MUMyMC43NDI0IDE0LjIyMTQgMjEuMDMyOSAxNC4zNTM4IDIxLjEwODggMTQuNjQ5OEwyMy45NDU3IDIzLjE0OTFaTTEyLjAxOTIgMEMxNS41MDY1IDAgMTguMzMxNSAyLjg0MTYgMTguMzMxNSA2LjM0NzE2QzE4LjMzMTUgNy4xNTU5NCAxOC4wMTY5IDguMjIyNDEgMTcuNTQyOCA5LjM3NDkzQzE3LjA2NzQgMTAuNTMwNSAxNi40MjY2IDExLjc4NCAxNS43NjQyIDEyLjk3MDlDMTQuNDM5IDE1LjM0NDggMTMuMDIyOCAxNy40NTkzIDEyLjY1NzEgMTguMDAyNkMxMi41MDQ1IDE4LjIyOTQgMTIuMjc2MSAxOC4zNjMgMTIuMDM4MiAxOC4zNzM5QzExLjc5OCAxOC4zODUgMTEuNTYxMiAxOC4yNzAzIDExLjM5ODIgMTguMDI3MUMxMS4wNjQxIDE3LjUyODYgOS42NDM2NSAxNS40MDAxIDguMzA2NDYgMTMuMDA1QzcuNjM3OTMgMTEuODA3NiA2Ljk4OTE4IDEwLjU0MTcgNi41MDczIDkuMzc4NEM2LjAyNjc1IDguMjE4MzMgNS43MDY5OSA3LjE0ODQyIDUuNzA2OTkgNi4zNDcxNkM1LjcwNjk5IDIuODQxNiA4LjUzMTk5IDAgMTIuMDE5MiAwWk0xNi40NjIgOC40OTAxM0MxNi44MDQzIDcuNjIxNjIgMTcuMDA4OSA2Ljg3NzcxIDE3LjAwODkgNi4zNDcxNkMxNy4wMDg5IDMuNTQ1OTcgMTQuNzQ1OSAxLjMyODkxIDEyLjAxOTIgMS4zMjg5MUM5LjI5MjYgMS4zMjg5MSA3LjAyOTU0IDMuNTQ1OTcgNy4wMjk1NCA2LjM0NzE2QzcuMDI5NTQgNi44OTMxMiA3LjIzMDc4IDcuNjQ0ODggNy41NjgzMyA4LjUxNTc2QzcuOTA0OCA5LjM4Mzg1IDguMzcyNTYgMTAuMzYwMSA4Ljg5Njc1IDExLjM1MTJDOS45MTIzNyAxMy4yNzE2IDExLjEzNjQgMTUuMjQxNyAxMi4wMTc5IDE2LjU3ODZDMTIuODcyOSAxNS4yNDAxIDE0LjA5NyAxMy4yNTYxIDE1LjExOTYgMTEuMzI4OEMxNS42NDc1IDEwLjMzMzggMTYuMTIwOSA5LjM1NTU3IDE2LjQ2MiA4LjQ5MDEzWk0xMi4wMTkgOS44Mzc2OUMxMC4xMjk1IDkuODM3NjkgOC41NDcyIDguMjQ1NzYgOC41NDcyIDYuMzQ2ODlDOC41NDcyIDQuMzg4NTEgMTAuMDcwMyAyLjg1NjA1IDEyLjAxOSAyLjg1NjA1QzEzLjkwODYgMi44NTYwNSAxNS40OTA5IDQuNDQ4MDEgMTUuNDkwOSA2LjM0Njg5QzE1LjQ5MDkgOC4yNDU3NiAxMy45MDg2IDkuODM3NjkgMTIuMDE5IDkuODM3NjlaTTExLjk1OTkgOC41NjgzQzEzLjIwNDggOC41NjgzIDE0LjE2ODQgNy41NDM4MiAxNC4xNjg0IDYuMzQ2ODlDMTQuMTY4NCA1LjE0OTk1IDEzLjIwNDggNC4xMjU0MyAxMS45NTk5IDQuMTI1NDNDMTAuNzE1IDQuMTI1NDMgOS43NTEzNCA1LjE0OTk1IDkuNzUxMzQgNi4zNDY4OUM5Ljc1MTM0IDcuNjAwMDEgMTAuNzcwOSA4LjU2ODMgMTEuOTU5OSA4LjU2ODNaXCIsXG4gICAgZmlsbDogXCJjdXJyZW50Q29sb3JcIlxuICB9XG4pIH0pLCBieiA9ICgpID0+IC8qIEBfX1BVUkVfXyAqLyBlMShcInN2Z1wiLCB7IHZpZXdCb3g6IFwiMCAwIDI0IDI0XCIsIGZpbGw6IFwibm9uZVwiLCB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLCBjaGlsZHJlbjogW1xuICAvKiBAX19QVVJFX18gKi8gYyhcbiAgICBcInBhdGhcIixcbiAgICB7XG4gICAgICBkOiBcIk0yMy4yMzg2IDYuNjc3OTFIOS4wNjQzNUM4Ljc2NzgyIDYuNjc3OTEgOC41MzA1OCA2LjkxNDg3IDguNTMwNTggNy4yMTEwOVYxMi4zMDZIMy40MzAyNkMzLjM3MDk1IDEyLjMwNiAzLjMxMTYzIDEyLjMwNiAzLjE5MzAyIDEyLjM2NTNDMy4xMzM3MSAxMi4zNjUzIDMuMDc0NDEgMTIuNDI0NSAzLjAxNTExIDEyLjQ4MzdMMS4xMTczIDE0LjM3OTVWMi4xMTYxN0gxNC4yMjRWNC40MjY2N0MxNC4yMjQgNC43MjI4OCAxNC40NjEyIDQuOTU5ODUgMTQuNzU3NyA0Ljk1OTg1QzE1LjA1NDMgNC45NTk4NSAxNS4yOTE1IDQuNzIyODggMTUuMjkxNSA0LjQyNjY3VjEuNTgyOThDMTUuMjkxNSAxLjI4Njc2IDE1LjA1NDMgMS4wNDk4IDE0Ljc1NzcgMS4wNDk4SDAuNTgzNTYzQzAuMjg3MDMyIDEuMDQ5OCAwLjA0OTc5MjUgMS4yODY3NiAwLjA0OTc5MjUgMS41ODI5OFYxNS43NDIxQzAuMDQ5NzkyNSAxNS45NzkxIDAuMTY4NDI3IDE2LjE1NjggMC40MDU2NTIgMTYuMjc1M0MwLjQ2NDk1OCAxNi4yNzUzIDAuNTI0MjQzIDE2LjMzNDUgMC42NDI4NTUgMTYuMzM0NUMwLjc2MTQ2OCAxNi4zMzQ1IDAuOTM5Mzk0IDE2LjI3NTMgMS4wNTgwMSAxNi4xNTY4TDMuNzI2NzkgMTMuNDkwOUg4LjY0OTJWMTguNTg1OEM4LjY0OTIgMTguODgyIDguODg2NDQgMTkuMTE5IDkuMTgyOTcgMTkuMTE5SDIwLjI3MzJMMjIuOTQyIDIxLjc4NDlDMjMuMDYwNiAyMS45MDM0IDIzLjE3OTIgMjEuOTYyNyAyMy4zNTcxIDIxLjk2MjdDMjMuNDE2NSAyMS45NjI3IDIzLjQ3NTggMjEuOTYyNyAyMy41OTQ0IDIxLjkwMzRDMjMuNzcyMyAyMS44NDQyIDIzLjk1MDIgMjEuNjA3MiAyMy45NTAyIDIxLjM3MDJWNy4yMTEwOUMyMy43NzIzIDYuOTE0ODcgMjMuNTM1MSA2LjY3NzkxIDIzLjIzODYgNi42Nzc5MVpNMjIuNjQ1NSAyMC4wNjY5TDIwLjc0NzcgMTguMTcxMUMyMC42ODg0IDE4LjExMTggMjAuNjI5MSAxOC4wNTI2IDIwLjU2OTggMTguMDUyNkMyMC41MTA1IDE4LjA1MjYgMjAuNDUxMiAxNy45OTM0IDIwLjMzMjUgMTcuOTkzNEg5LjUzODc5VjcuNzQ0MjhIMjIuNjQ1NVYyMC4wNjY5WlwiLFxuICAgICAgZmlsbDogXCJjdXJyZW50Q29sb3JcIlxuICAgIH1cbiAgKSxcbiAgLyogQF9fUFVSRV9fICovIGMoXG4gICAgXCJwYXRoXCIsXG4gICAge1xuICAgICAgZmlsbFJ1bGU6IFwiZXZlbm9kZFwiLFxuICAgICAgY2xpcFJ1bGU6IFwiZXZlbm9kZFwiLFxuICAgICAgZDogXCJNMC40MDU2NTIgMTYuMjc1M0MwLjE2ODQyNyAxNi4xNTY4IDAuMDQ5NzkyNSAxNS45NzkxIDAuMDQ5NzkyNSAxNS43NDIxVjEuNTgyOThDMC4wNDk3OTI1IDEuMjg2NzYgMC4yODcwMzIgMS4wNDk4IDAuNTgzNTYzIDEuMDQ5OEgxNC43NTc3QzE1LjA1NDMgMS4wNDk4IDE1LjI5MTUgMS4yODY3NiAxNS4yOTE1IDEuNTgyOThWNC40MjY2N0MxNS4yOTE1IDQuNzIyODggMTUuMDU0MyA0Ljk1OTg1IDE0Ljc1NzcgNC45NTk4NUMxNC40NjEyIDQuOTU5ODUgMTQuMjI0IDQuNzIyODggMTQuMjI0IDQuNDI2NjdWMi4xMTYxN0gxLjExNzNWMTQuMzc5NUwzLjAxNTExIDEyLjQ4MzdDMy4wNzQ0MSAxMi40MjQ1IDMuMTMzNzEgMTIuMzY1MyAzLjE5MzAyIDEyLjM2NTNDMy4zMTE2MyAxMi4zMDYgMy4zNzA5NSAxMi4zMDYgMy40MzAyNiAxMi4zMDZIOC41MzA1OFY3LjIxMTA5QzguNTMwNTggNi45MTQ4NyA4Ljc2NzgyIDYuNjc3OTEgOS4wNjQzNSA2LjY3NzkxSDIzLjIzODZDMjMuNTM1MSA2LjY3NzkxIDIzLjc3MjMgNi45MTQ4NyAyMy45NTAyIDcuMjExMDlWMjEuMzcwMkMyMy45NTAyIDIxLjYwNzIgMjMuNzcyMyAyMS44NDQyIDIzLjU5NDQgMjEuOTAzNEMyMy40NzU4IDIxLjk2MjcgMjMuNDE2NSAyMS45NjI3IDIzLjM1NzEgMjEuOTYyN0MyMy4xNzkyIDIxLjk2MjcgMjMuMDYwNiAyMS45MDM0IDIyLjk0MiAyMS43ODQ5TDIwLjI3MzIgMTkuMTE5SDkuMTgyOTdDOC44ODY0NCAxOS4xMTkgOC42NDkyIDE4Ljg4MiA4LjY0OTIgMTguNTg1OFYxMy40OTA5SDMuNzI2NzlMMS4wNTgwMSAxNi4xNTY4QzAuOTM5Mzk0IDE2LjI3NTMgMC43NjE0NjggMTYuMzM0NSAwLjY0Mjg1NSAxNi4zMzQ1QzAuNTczMzc0IDE2LjMzNDUgMC41MjQyNSAxNi4zMTQyIDAuNDgzNTU1IDE2LjI5NzRDMC40NTQ3NzkgMTYuMjg1NSAwLjQzMDIxNyAxNi4yNzUzIDAuNDA1NjUyIDE2LjI3NTNaTTMuNzQ3NCAxMy41NDA3TDEuMDkzMiAxNi4xOTIxQzAuOTY0NjMgMTYuMzIwNSAwLjc3Mzc2NiAxNi4zODQzIDAuNjQyODU1IDE2LjM4NDNDMC41NzQ1MjQgMTYuMzg0MyAwLjUyMzMwNiAxNi4zNjcxIDAuNDgzNTQgMTYuMzUxMkMwLjQ3NTcxNSAxNi4zNDggMC40Njg5NTUgMTYuMzQ1MiAwLjQ2MjgwMiAxNi4zNDI3QzAuNDUyMzcgMTYuMzM4NCAwLjQ0MzY4MSAxNi4zMzQ4IDAuNDM0NSAxNi4zMzE1QzAuNDIxMDM4IDE2LjMyNjggMC40MTIzMzcgMTYuMzI1MSAwLjQwNTY1MiAxNi4zMjUxSDAuMzkzOTA5TDAuMzgzNDAzIDE2LjMxOTlDMC4yNTg4ODcgMTYuMjU3NyAwLjE2MjQ5OCAxNi4xNzg0IDAuMDk3MzQ3MSAxNi4wODA4QzAuMDMxOTg2NSAxNS45ODI5IDAgMTUuODY5MyAwIDE1Ljc0MjFWMS41ODI5OEMwIDEuMjU5MjEgMC4yNTk1ODUgMSAwLjU4MzU2MyAxSDE0Ljc1NzdDMTUuMDgxNyAxIDE1LjM0MTMgMS4yNTkyMSAxNS4zNDEzIDEuNTgyOThWNC40MjY2N0MxNS4zNDEzIDQuNzUwNDQgMTUuMDgxNyA1LjAwOTY1IDE0Ljc1NzcgNS4wMDk2NUMxNC40MzM4IDUuMDA5NjUgMTQuMTc0MiA0Ljc1MDQzIDE0LjE3NDIgNC40MjY2N1YyLjE2NTk2SDEuMTY3MDlWMTQuMjU5NEwyLjk4MTMxIDEyLjQ0NzFDMy4wMDk5NSAxMi40MTg1IDMuMDQxNyAxMi4zODY4IDMuMDc0MjEgMTIuMzYyNEMzLjEwMzY3IDEyLjM0MDQgMy4xMzk2MSAxMi4zMTk3IDMuMTgwMjMgMTIuMzE2MUMzLjIzODA1IDEyLjI4NzkgMy4yODM5NSAxMi4yNzI2IDMuMzI0MTIgMTIuMjY0NkMzLjM2NjA0IDEyLjI1NjIgMy4zOTk4IDEyLjI1NjIgMy40MjkzMSAxMi4yNTYySDguNDgwNzlWNy4yMTEwOUM4LjQ4MDc5IDYuODg3MzIgOC43NDAzNyA2LjYyODExIDkuMDY0MzUgNi42MjgxMUgyMy4yMzg2QzIzLjU2MzQgNi42MjgxMSAyMy44MTM1IDYuODg2NzIgMjMuOTkyOSA3LjE4NTQ1TDI0IDcuMTk3MjlWMjEuMzcwMkMyNCAyMS41MDA4IDIzLjk1MTIgMjEuNjI5IDIzLjg3OTkgMjEuNzMxOEMyMy44MDk4IDIxLjgzMzEgMjMuNzE0MiAyMS45MTQ5IDIzLjYxMzYgMjEuOTQ5NUMyMy41NTI3IDIxLjk3OTYgMjMuNTA0OSAyMS45OTU4IDIzLjQ2MzMgMjIuMDA0MUMyMy40MjE0IDIyLjAxMjUgMjMuMzg3NiAyMi4wMTI1IDIzLjM1ODEgMjIuMDEyNUgyMy4zNTcxQzIzLjI2MjQgMjIuMDEyNSAyMy4xODEyIDIxLjk5NjYgMjMuMTA3MSAyMS45NjM3QzIzLjAzMzMgMjEuOTMxIDIyLjk2OTEgMjEuODgyMyAyMi45MDY4IDIxLjgyMDJMMjAuMjUyNiAxOS4xNjg4SDkuMTgyOTdDOC44NTg5OSAxOS4xNjg4IDguNTk5NDEgMTguOTA5NiA4LjU5OTQxIDE4LjU4NThWMTMuNTQwN0gzLjc0NzRaTTIyLjY0NTUgMjAuMDY2OVY3Ljc0NDI4SDkuNTM4NzlWMTcuOTkzNEgyMC4zMzI1QzIwLjQwMiAxNy45OTM0IDIwLjQ1MTIgMTguMDEzNyAyMC40OTE5IDE4LjAzMDVDMjAuNTIwNiAxOC4wNDI1IDIwLjU0NTIgMTguMDUyNiAyMC41Njk4IDE4LjA1MjZDMjAuNjI5MSAxOC4wNTI2IDIwLjY4ODQgMTguMTExOCAyMC43NDc3IDE4LjE3MTFMMjIuNjQ1NSAyMC4wNjY5Wk0yMi41OTU3IDE5Ljk0NjhWNy43OTQwN0g5LjU4ODU5VjE3Ljk0MzZIMjAuMzMyNUMyMC40MDA5IDE3Ljk0MzYgMjAuNDUyMSAxNy45NjA5IDIwLjQ5MTkgMTcuOTc2OEMyMC40OTk3IDE3Ljk3OTkgMjAuNTA2NSAxNy45ODI3IDIwLjUxMjYgMTcuOTg1MkMyMC41MjMgMTcuOTg5NiAyMC41MzE3IDE3Ljk5MzIgMjAuNTQwOSAxNy45OTY0QzIwLjU1NDQgMTguMDAxMSAyMC41NjMxIDE4LjAwMjggMjAuNTY5OCAxOC4wMDI4QzIwLjYxNTcgMTguMDAyOCAyMC42NTYxIDE4LjAyNTQgMjAuNjg4NiAxOC4wNDk4QzIwLjcyMTEgMTguMDc0MSAyMC43NTI4IDE4LjEwNTggMjAuNzgxNSAxOC4xMzQ0TDIyLjU5NTcgMTkuOTQ2OFpcIixcbiAgICAgIGZpbGw6IFwiY3VycmVudENvbG9yXCJcbiAgICB9XG4gIClcbl0gfSksIE16ID0gKCkgPT4gLyogQF9fUFVSRV9fICovIGUxKFwic3ZnXCIsIHsgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiwgdmlld0JveDogXCIwIDAgMjQgMjRcIiwgZmlsbDogXCJub25lXCIsIGNoaWxkcmVuOiBbXG4gIC8qIEBfX1BVUkVfXyAqLyBjKFxuICAgIFwicGF0aFwiLFxuICAgIHtcbiAgICAgIGZpbGxSdWxlOiBcImV2ZW5vZGRcIixcbiAgICAgIGNsaXBSdWxlOiBcImV2ZW5vZGRcIixcbiAgICAgIGQ6IFwiTTI0IDcuMlYyMS40QzI0IDIxLjUgMjQgMjEuNyAyMy45IDIxLjhDMjMuOCAyMS45IDIzLjcgMjIgMjMuNiAyMkMyMy41IDIyIDIzLjUgMjIgMjMuNSAyMkgyMy40QzIzLjMgMjIgMjMuMiAyMiAyMy4yIDIyQzIzLjEgMjIgMjMuMSAyMS45IDIzIDIxLjlMMjAuMyAxOS4zSDkuMkM4LjkgMTkuMyA4LjYgMTkgOC42IDE4LjdWNy43QzguNiA3LjMgOC44IDcgOS4yIDYuOUM5LjMgNi45IDkuNCA2LjkgOS41IDYuOUgyMy4zQzIzLjc5NjMgNi45IDIzLjggNi45IDI0IDcuMlpcIixcbiAgICAgIGZpbGw6IFwiY3VycmVudENvbG9yXCJcbiAgICB9XG4gICksXG4gIC8qIEBfX1BVUkVfXyAqLyBjKFxuICAgIFwicGF0aFwiLFxuICAgIHtcbiAgICAgIGZpbGxSdWxlOiBcImV2ZW5vZGRcIixcbiAgICAgIGNsaXBSdWxlOiBcImV2ZW5vZGRcIixcbiAgICAgIGQ6IFwiTTE1LjMgMS42VjQuOEg4QzcuMyA0LjggNi44IDUuNCA2LjggNlYxMy41SDMuOEwxLjEgMTYuMUMxIDE2LjIgMC44IDE2LjMgMC42IDE2LjNDMC41IDE2LjMgMC41IDE2LjMgMC40IDE2LjNDMC4zIDE2LjIgMC4yIDE2LjIgMC4xIDE2LjFDMCAxNiAwIDE1LjkgMCAxNS43VjEuNkMwIDEuMyAwLjMgMSAwLjYgMUgxNC44QzE1LjEgMSAxNS4zIDEuMyAxNS4zIDEuNlpcIixcbiAgICAgIGZpbGw6IFwiY3VycmVudENvbG9yXCJcbiAgICB9XG4gIClcbl0gfSksIEF6ID0gKCkgPT4gLyogQF9fUFVSRV9fICovIGMoXCJzdmdcIiwgeyB2aWV3Qm94OiBcIjAgMCAyNCAyNFwiLCBmaWxsOiBcIm5vbmVcIiwgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiwgY2hpbGRyZW46IC8qIEBfX1BVUkVfXyAqLyBjKFxuICBcInBhdGhcIixcbiAge1xuICAgIGZpbGxSdWxlOiBcImV2ZW5vZGRcIixcbiAgICBjbGlwUnVsZTogXCJldmVub2RkXCIsXG4gICAgZDogXCJNMjQgMTJDMjQgMTguNjI3NCAxOC42Mjc0IDI0IDEyIDI0QzUuMzcyNTggMjQgMCAxOC42Mjc0IDAgMTJDMCA1LjM3MjU4IDUuMzcyNTggMCAxMiAwQzE4LjYyNzQgMCAyNCA1LjM3MjU4IDI0IDEyWk0xOS40OTUzIDQuNTA0NjdDMjEuNDEzNiA2LjQyMjg5IDIyLjYgOS4wNzI4OSAyMi42IDEyQzIyLjYgMTcuODU0MiAxNy44NTQyIDIyLjYgMTIgMjIuNkM5LjA3Mjg5IDIyLjYgNi40MjI4OSAyMS40MTM2IDQuNTA0NjcgMTkuNDk1M0wxOS40OTUzIDQuNTA0NjdaTTE4LjQ0MDEgMy41Nzk5OUwzLjU3OTk5IDE4LjQ0MDFDMi4yMTI1NiAxNi42NTUgMS40IDE0LjQyMjQgMS40IDEyQzEuNCA2LjE0NTc4IDYuMTQ1NzggMS40IDEyIDEuNEMxNC40MjI0IDEuNCAxNi42NTUgMi4yMTI1NiAxOC40NDAxIDMuNTc5OTlaXCIsXG4gICAgZmlsbDogXCJjdXJyZW50Q29sb3JcIlxuICB9XG4pIH0pLCB1eiA9ICgpID0+IC8qIEBfX1BVUkVfXyAqLyBjKFwic3ZnXCIsIHsgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiwgdmlld0JveDogXCIwIDAgMjQgMjRcIiwgZmlsbDogXCJub25lXCIsIGNoaWxkcmVuOiAvKiBAX19QVVJFX18gKi8gYyhcbiAgXCJwYXRoXCIsXG4gIHtcbiAgICBmaWxsUnVsZTogXCJldmVub2RkXCIsXG4gICAgY2xpcFJ1bGU6IFwiZXZlbm9kZFwiLFxuICAgIGQ6IFwiTTEyIDBDNS40IDAgMCA1LjQgMCAxMkMwIDE4LjYgNS40IDI0IDEyIDI0QzE4LjYgMjQgMjQgMTguNiAyNCAxMkMyNCA1LjQgMTguNiAwIDEyIDBaTTEyIDIxLjZDOS42IDIxLjYgNy40IDIwLjcgNS42IDE5LjJMMTkuMiA1LjZDMjAuOCA3LjQgMjEuNiA5LjYgMjEuNiAxMkMyMS42IDE3LjMgMTcuMyAyMS42IDEyIDIxLjZaTTEyIDIuNEMxMy45IDIuNCAxNS43IDMgMTcuMyA0TDQgMTcuM0MzIDE1LjggMi40IDEzLjkgMi40IDEyQzIuNCA2LjcgNi43IDIuNCAxMiAyLjRaXCIsXG4gICAgZmlsbDogXCJjdXJyZW50Q29sb3JcIlxuICB9XG4pIH0pLCB6eiA9ICgpID0+IC8qIEBfX1BVUkVfXyAqLyBlMShcInN2Z1wiLCB7IHZpZXdCb3g6IFwiMCAwIDI0IDI0XCIsIGZpbGw6IFwibm9uZVwiLCB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLCBjaGlsZHJlbjogW1xuICAvKiBAX19QVVJFX18gKi8gZTEoXCJnXCIsIHsgY2xpcFBhdGg6IFwidXJsKCNjbGlwMF8yNzIxXzYxMzI1KVwiLCBjaGlsZHJlbjogW1xuICAgIC8qIEBfX1BVUkVfXyAqLyBjKFxuICAgICAgXCJwYXRoXCIsXG4gICAgICB7XG4gICAgICAgIGZpbGxSdWxlOiBcImV2ZW5vZGRcIixcbiAgICAgICAgY2xpcFJ1bGU6IFwiZXZlbm9kZFwiLFxuICAgICAgICBkOiBcIk03LjE0MDgyIDcuMTQxQzcuNDE0MTggNi44Njc2MyA3Ljg1NzQgNi44Njc2MyA4LjEzMDc2IDcuMTQxTDE2Ljg1ODggMTUuODY5QzE3LjEzMjEgMTYuMTQyNCAxNy4xMzIxIDE2LjU4NTYgMTYuODU4OCAxNi44NTg5QzE2LjU4NTQgMTcuMTMyMyAxNi4xNDIyIDE3LjEzMjMgMTUuODY4OCAxNi44NTg5TDcuMTQwODIgOC4xMzA5NUM2Ljg2NzQ1IDcuODU3NTggNi44Njc0NSA3LjQxNDM2IDcuMTQwODIgNy4xNDFaXCIsXG4gICAgICAgIGZpbGw6IFwiY3VycmVudGNvbG9yXCJcbiAgICAgIH1cbiAgICApLFxuICAgIC8qIEBfX1BVUkVfXyAqLyBjKFxuICAgICAgXCJwYXRoXCIsXG4gICAgICB7XG4gICAgICAgIGZpbGxSdWxlOiBcImV2ZW5vZGRcIixcbiAgICAgICAgY2xpcFJ1bGU6IFwiZXZlbm9kZFwiLFxuICAgICAgICBkOiBcIk0yMS44NzgzIDIuMTIyMTlDMjMuMTY1OCAzLjQxMTM1IDIzLjg4OSA1LjE1ODg3IDIzLjg4OSA2Ljk4MDg5QzIzLjg4OSA4LjgwMjkgMjMuMTY1OCAxMC41NTA0IDIxLjg3ODMgMTEuODM5NkwxOC45NzAzIDE0Ljc0NzVDMTguNjk3IDE1LjAyMDkgMTguMjUzOCAxNS4wMjA5IDE3Ljk4MDQgMTQuNzQ3NUMxNy43MDcgMTQuNDc0MiAxNy43MDcgMTQuMDMwOSAxNy45ODA0IDEzLjc1NzZMMjAuODg3NyAxMC44NTAyQzIxLjkxMzEgOS44MjM1OSAyMi40ODkgOC40MzE5IDIyLjQ4OSA2Ljk4MDg4QzIyLjQ4OSA1LjUzMDAyIDIxLjkxMzIgNC4xMzg0NiAyMC44ODggMy4xMTE4M0MxOS44NjE0IDIuMDg2NjQgMTguNDY5OCAxLjUxMDgxIDE3LjAxOSAxLjUxMDgxQzE1LjU2OCAxLjUxMDgxIDE0LjE3NjQgMi4wODY3MSAxMy4xNDk3IDMuMTEyMDFMMTAuMjk2MyA1Ljk2NTVDMTAuMDIyOSA2LjIzODg2IDkuNTc5NjcgNi4yMzg4NiA5LjMwNjMgNS45NjU1QzkuMDMyOTMgNS42OTIxMyA5LjAzMjkzIDUuMjQ4OTEgOS4zMDYzIDQuOTc1NTVMMTIuMTYgMi4xMjE4OEMxMy40NDkxIDAuODM0MzI3IDE1LjE5NyAwLjExMDgwOSAxNy4wMTkgMC4xMTA4MDlDMTguODQxIDAuMTEwODA5IDIwLjU4OTEgMC44MzQ2MzUgMjEuODc4MyAyLjEyMjE5Wk01Ljg2Nzk2IDkuNDAzODRDNi4xNDEzMyA5LjY3NzIgNi4xNDEzMyAxMC4xMjA0IDUuODY3OTYgMTAuMzkzOEwyLjk2OTMyIDEzLjI5MjRDMi4wMDczMiAxNC4zMjk0IDEuNDgzODEgMTUuNjk4NSAxLjUwODc2IDE3LjExM0MxLjUzMzc5IDE4LjUzMTYgMi4xMDg0NCAxOS44ODUgMy4xMTE2NSAyMC44ODgyQzQuMTE0ODYgMjEuODkxNCA1LjQ2ODMgMjIuNDY2MSA2Ljg4NjgzIDIyLjQ5MTFDOC4zMDEzNiAyMi41MTYgOS42NzA1IDIxLjk5MjUgMTAuNzA3NCAyMS4wMzA1TDEzLjYwNjEgMTguMTMxOUMxMy44Nzk0IDE3Ljg1ODUgMTQuMzIyNiAxNy44NTg1IDE0LjU5NiAxOC4xMzE5QzE0Ljg2OTQgMTguNDA1MyAxNC44Njk0IDE4Ljg0ODUgMTQuNTk2IDE5LjEyMThMMTEuNjc5NiAyMi4wMzgyTDExLjY3MDYgMjIuMDQ2NkMxMC4zNjcyIDIzLjI2MTEgOC42NDMzNSAyMy45MjIzIDYuODYyMTMgMjMuODkwOUM1LjA4MDkgMjMuODU5NCAzLjM4MTQxIDIzLjEzNzkgMi4xMjE3IDIxLjg3ODFDMC44NjE5OSAyMC42MTg0IDAuMTQwNDEgMTguOTE4OSAwLjEwODk4MSAxNy4xMzc3QzAuMDc3NTU0MSAxNS4zNTY1IDAuNzM4NzM1IDEzLjYzMjYgMS45NTMyMiAxMi4zMjkyTDEuOTYxNjQgMTIuMzIwMkw0Ljg3ODAxIDkuNDAzODRDNS4xNTEzOCA5LjEzMDQ3IDUuNTk0NTkgOS4xMzA0NyA1Ljg2Nzk2IDkuNDAzODRaXCIsXG4gICAgICAgIGZpbGw6IFwiY3VycmVudGNvbG9yXCJcbiAgICAgIH1cbiAgICApXG4gIF0gfSksXG4gIC8qIEBfX1BVUkVfXyAqLyBjKFwiZGVmc1wiLCB7IGNoaWxkcmVuOiAvKiBAX19QVVJFX18gKi8gYyhcImNsaXBQYXRoXCIsIHsgaWQ6IFwiY2xpcDBfMjcyMV82MTMyNVwiLCBjaGlsZHJlbjogLyogQF9fUFVSRV9fICovIGMoXCJyZWN0XCIsIHsgd2lkdGg6IFwiMjRcIiwgaGVpZ2h0OiBcIjI0XCIsIGZpbGw6IFwiY3VycmVudENvbG9yXCIgfSkgfSkgfSlcbl0gfSksIGh6ID0gKCkgPT4gLyogQF9fUFVSRV9fICovIGUxKFwic3ZnXCIsIHsgdmlld0JveDogXCIwIDAgNDggNDhcIiwgZmlsbDogXCJub25lXCIsIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsIGNoaWxkcmVuOiBbXG4gIC8qIEBfX1BVUkVfXyAqLyBjKFxuICAgIFwicGF0aFwiLFxuICAgIHtcbiAgICAgIGQ6IFwiTTMzIDM1LjQ2MTNWMTguMjg0M0MzMyAxOC4yODQzIDMzIDE4LjI4NDMgMzMgMTguMjI0NEMzMyAxOC4xNjQ2IDMzIDE4LjEwNDcgMzMgMTguMTA0N1YxOC4wNDQ5QzMzIDE3Ljk4NSAzMi45NDA5IDE3LjkyNTIgMzIuODgxOSAxNy44NjUzTDI3LjIxNjQgMTIuMTE5N0MyNy4xNTczIDEyLjA1OTggMjcuMDk4MyAxMi4wNTk5IDI3LjAzOTMgMTJIMjYuOTgwM0MyNi45MjEzIDEyIDI2Ljg2MjMgMTIgMjYuODYyMyAxMkMyNi44NjIzIDEyIDI2Ljg2MjMgMTIgMjYuODAzMyAxMkgxNS41MzExQzE1LjIzNiAxMiAxNSAxMi4yMzk0IDE1IDEyLjUzODZWMzUuNDYxM0MxNSAzNS43NjA2IDE1LjIzNiAzNiAxNS41MzExIDM2SDMyLjQ2ODhDMzIuNzYzOSAzNiAzMyAzNS43NjA2IDMzIDM1LjQ2MTNaTTI3LjM5MzQgMTMuODU1NEwzMS4xNzA0IDE3LjY4NThIMjcuMzkzNFYxMy44NTU0Wk0xNi4xMjEzIDM0Ljg2MjhWMTMuMDc3M0gyNi4zMzExVjE4LjIyNDRDMjYuMzMxMSAxOC41MjM3IDI2LjU2NzIgMTguNzYzMSAyNi44NjIzIDE4Ljc2MzFIMzEuOTM3N1YzNC44MDNIMTYuMTIxM1YzNC44NjI4WlwiLFxuICAgICAgZmlsbDogXCJjdXJyZW50Q29sb3JcIlxuICAgIH1cbiAgKSxcbiAgLyogQF9fUFVSRV9fICovIGMoXG4gICAgXCJwYXRoXCIsXG4gICAge1xuICAgICAgZDogXCJNMjAuMzI4MiAyNi43MkMyMC4yMzc1IDI2LjY0NTMgMjAuMTA2OSAyNi41NzMzIDE5LjkzNjIgMjYuNTA0QzE5Ljc2NTUgMjYuNDM0NyAxOS41Nzg5IDI2LjQgMTkuMzc2MiAyNi40QzE5LjE2MjkgMjYuNCAxOC45Nzg5IDI2LjQ0IDE4LjgyNDIgMjYuNTJDMTguNjc0OSAyNi41OTQ3IDE4LjU1MjIgMjYuNzAxMyAxOC40NTYyIDI2Ljg0QzE4LjM2MDIgMjYuOTczMyAxOC4yOTA5IDI3LjEzMzMgMTguMjQ4MiAyNy4zMkMxOC4yMDU1IDI3LjUwNjcgMTguMTg0MiAyNy43MDY3IDE4LjE4NDIgMjcuOTJDMTguMTg0MiAyOC40MDUzIDE4LjMwNDIgMjguNzgxMyAxOC41NDQyIDI5LjA0OEMxOC43ODQyIDI5LjMwOTMgMTkuMTA0MiAyOS40NCAxOS41MDQyIDI5LjQ0QzE5LjcwNjkgMjkuNDQgMTkuODc0OSAyOS40MzIgMjAuMDA4MiAyOS40MTZDMjAuMTQ2OSAyOS4zOTQ3IDIwLjI1MzUgMjkuMzczMyAyMC4zMjgyIDI5LjM1MlYyNi43MlpNMjAuMzI4MiAyMy45MkwyMS4wNzIyIDIzLjc5MlYyOS44OEMyMC45MDE1IDI5LjkyOCAyMC42ODI5IDI5Ljk3NiAyMC40MTYyIDMwLjAyNEMyMC4xNDk1IDMwLjA3MiAxOS44NDI5IDMwLjA5NiAxOS40OTYyIDMwLjA5NkMxOS4xNzYyIDMwLjA5NiAxOC44ODgyIDMwLjA0NTMgMTguNjMyMiAyOS45NDRDMTguMzc2MiAyOS44NDI3IDE4LjE1NzUgMjkuNjk4NyAxNy45NzYyIDI5LjUxMkMxNy43OTQ5IDI5LjMyNTMgMTcuNjUzNSAyOS4wOTg3IDE3LjU1MjIgMjguODMyQzE3LjQ1NjIgMjguNTYgMTcuNDA4MiAyOC4yNTYgMTcuNDA4MiAyNy45MkMxNy40MDgyIDI3LjYgMTcuNDQ4MiAyNy4zMDY3IDE3LjUyODIgMjcuMDRDMTcuNjEzNSAyNi43NzMzIDE3LjczNjIgMjYuNTQ0IDE3Ljg5NjIgMjYuMzUyQzE4LjA1NjIgMjYuMTYgMTguMjUwOSAyNi4wMTA3IDE4LjQ4MDIgMjUuOTA0QzE4LjcxNDkgMjUuNzk3MyAxOC45ODE1IDI1Ljc0NCAxOS4yODAyIDI1Ljc0NEMxOS41MjAyIDI1Ljc0NCAxOS43MzA5IDI1Ljc3NiAxOS45MTIyIDI1Ljg0QzIwLjA5ODkgMjUuOTA0IDIwLjIzNzUgMjUuOTY1MyAyMC4zMjgyIDI2LjAyNFYyMy45MlpcIixcbiAgICAgIGZpbGw6IFwiY3VycmVudENvbG9yXCJcbiAgICB9XG4gICksXG4gIC8qIEBfX1BVUkVfXyAqLyBjKFxuICAgIFwicGF0aFwiLFxuICAgIHtcbiAgICAgIGQ6IFwiTTI2LjAyMzEgMjcuOTJDMjYuMDIzMSAyOC4yNTA3IDI1Ljk3NTEgMjguNTQ5MyAyNS44NzkxIDI4LjgxNkMyNS43ODMxIDI5LjA4MjcgMjUuNjQ3MSAyOS4zMTIgMjUuNDcxMSAyOS41MDRDMjUuMzAwNSAyOS42OTYgMjUuMDk1MSAyOS44NDUzIDI0Ljg1NTEgMjkuOTUyQzI0LjYxNTEgMzAuMDUzMyAyNC4zNTM4IDMwLjEwNCAyNC4wNzExIDMwLjEwNEMyMy43ODg1IDMwLjEwNCAyMy41MjcxIDMwLjA1MzMgMjMuMjg3MSAyOS45NTJDMjMuMDQ3MSAyOS44NDUzIDIyLjgzOTEgMjkuNjk2IDIyLjY2MzEgMjkuNTA0QzIyLjQ5MjUgMjkuMzEyIDIyLjM1OTEgMjkuMDgyNyAyMi4yNjMxIDI4LjgxNkMyMi4xNjcxIDI4LjU0OTMgMjIuMTE5MSAyOC4yNTA3IDIyLjExOTEgMjcuOTJDMjIuMTE5MSAyNy41OTQ3IDIyLjE2NzEgMjcuMjk4NyAyMi4yNjMxIDI3LjAzMkMyMi4zNTkxIDI2Ljc2IDIyLjQ5MjUgMjYuNTI4IDIyLjY2MzEgMjYuMzM2QzIyLjgzOTEgMjYuMTQ0IDIzLjA0NzEgMjUuOTk3MyAyMy4yODcxIDI1Ljg5NkMyMy41MjcxIDI1Ljc4OTMgMjMuNzg4NSAyNS43MzYgMjQuMDcxMSAyNS43MzZDMjQuMzUzOCAyNS43MzYgMjQuNjE1MSAyNS43ODkzIDI0Ljg1NTEgMjUuODk2QzI1LjA5NTEgMjUuOTk3MyAyNS4zMDA1IDI2LjE0NCAyNS40NzExIDI2LjMzNkMyNS42NDcxIDI2LjUyOCAyNS43ODMxIDI2Ljc2IDI1Ljg3OTEgMjcuMDMyQzI1Ljk3NTEgMjcuMjk4NyAyNi4wMjMxIDI3LjU5NDcgMjYuMDIzMSAyNy45MlpNMjUuMjQ3MSAyNy45MkMyNS4yNDcxIDI3LjQ1MDcgMjUuMTQwNSAyNy4wOCAyNC45MjcxIDI2LjgwOEMyNC43MTkxIDI2LjUzMDcgMjQuNDMzOCAyNi4zOTIgMjQuMDcxMSAyNi4zOTJDMjMuNzA4NSAyNi4zOTIgMjMuNDIwNSAyNi41MzA3IDIzLjIwNzEgMjYuODA4QzIyLjk5OTEgMjcuMDggMjIuODk1MSAyNy40NTA3IDIyLjg5NTEgMjcuOTJDMjIuODk1MSAyOC4zODkzIDIyLjk5OTEgMjguNzYyNyAyMy4yMDcxIDI5LjA0QzIzLjQyMDUgMjkuMzEyIDIzLjcwODUgMjkuNDQ4IDI0LjA3MTEgMjkuNDQ4QzI0LjQzMzggMjkuNDQ4IDI0LjcxOTEgMjkuMzEyIDI0LjkyNzEgMjkuMDRDMjUuMTQwNSAyOC43NjI3IDI1LjI0NzEgMjguMzg5MyAyNS4yNDcxIDI3LjkyWlwiLFxuICAgICAgZmlsbDogXCJjdXJyZW50Q29sb3JcIlxuICAgIH1cbiAgKSxcbiAgLyogQF9fUFVSRV9fICovIGMoXG4gICAgXCJwYXRoXCIsXG4gICAge1xuICAgICAgZDogXCJNMjguODc3OSAzMC4wOTZDMjguNTQxOSAzMC4wOTYgMjguMjQ1OSAzMC4wNDI3IDI3Ljk4OTkgMjkuOTM2QzI3LjczOTIgMjkuODI5MyAyNy41MjU5IDI5LjY4IDI3LjM0OTkgMjkuNDg4QzI3LjE3OTIgMjkuMjk2IDI3LjA1MTIgMjkuMDY5MyAyNi45NjU5IDI4LjgwOEMyNi44ODA2IDI4LjU0MTMgMjYuODM3OSAyOC4yNDggMjYuODM3OSAyNy45MjhDMjYuODM3OSAyNy42MDggMjYuODgzMiAyNy4zMTQ3IDI2Ljk3MzkgMjcuMDQ4QzI3LjA2OTkgMjYuNzgxMyAyNy4yMDMyIDI2LjU1MiAyNy4zNzM5IDI2LjM2QzI3LjU0NDYgMjYuMTYyNyAyNy43NTI2IDI2LjAxMDcgMjcuOTk3OSAyNS45MDRDMjguMjQ4NiAyNS43OTIgMjguNTI1OSAyNS43MzYgMjguODI5OSAyNS43MzZDMjkuMDE2NiAyNS43MzYgMjkuMjAzMiAyNS43NTIgMjkuMzg5OSAyNS43ODRDMjkuNTc2NiAyNS44MTYgMjkuNzU1MiAyNS44NjY3IDI5LjkyNTkgMjUuOTM2TDI5Ljc1NzkgMjYuNTY4QzI5LjY0NTkgMjYuNTE0NyAyOS41MTUyIDI2LjQ3MiAyOS4zNjU5IDI2LjQ0QzI5LjIyMTkgMjYuNDA4IDI5LjA2NzIgMjYuMzkyIDI4LjkwMTkgMjYuMzkyQzI4LjQ4NTkgMjYuMzkyIDI4LjE2NTkgMjYuNTIyNyAyNy45NDE5IDI2Ljc4NEMyNy43MjMyIDI3LjA0NTMgMjcuNjEzOSAyNy40MjY3IDI3LjYxMzkgMjcuOTI4QzI3LjYxMzkgMjguMTUyIDI3LjYzNzkgMjguMzU3MyAyNy42ODU5IDI4LjU0NEMyNy43MzkyIDI4LjczMDcgMjcuODE5MiAyOC44OTA3IDI3LjkyNTkgMjkuMDI0QzI4LjAzNzkgMjkuMTU3MyAyOC4xNzkyIDI5LjI2MTMgMjguMzQ5OSAyOS4zMzZDMjguNTIwNiAyOS40MDUzIDI4LjcyODYgMjkuNDQgMjguOTczOSAyOS40NEMyOS4xNzEyIDI5LjQ0IDI5LjM0OTkgMjkuNDIxMyAyOS41MDk5IDI5LjM4NEMyOS42Njk5IDI5LjM0NjcgMjkuNzk1MiAyOS4zMDY3IDI5Ljg4NTkgMjkuMjY0TDI5Ljk4OTkgMjkuODg4QzI5Ljk0NzIgMjkuOTE0NyAyOS44ODU5IDI5Ljk0MTMgMjkuODA1OSAyOS45NjhDMjkuNzI1OSAyOS45ODkzIDI5LjYzNTIgMzAuMDA4IDI5LjUzMzkgMzAuMDI0QzI5LjQzMjYgMzAuMDQ1MyAyOS4zMjMyIDMwLjA2MTMgMjkuMjA1OSAzMC4wNzJDMjkuMDkzOSAzMC4wODggMjguOTg0NiAzMC4wOTYgMjguODc3OSAzMC4wOTZaXCIsXG4gICAgICBmaWxsOiBcImN1cnJlbnRDb2xvclwiXG4gICAgfVxuICApXG5dIH0pLCBPeiA9ICgpID0+IC8qIEBfX1BVUkVfXyAqLyBlMShcInN2Z1wiLCB7IHZpZXdCb3g6IFwiMCAwIDI0IDI0XCIsIGZpbGw6IFwibm9uZVwiLCB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLCBjaGlsZHJlbjogW1xuICAvKiBAX19QVVJFX18gKi8gYyhcbiAgICBcInBhdGhcIixcbiAgICB7XG4gICAgICBmaWxsUnVsZTogXCJldmVub2RkXCIsXG4gICAgICBjbGlwUnVsZTogXCJldmVub2RkXCIsXG4gICAgICBkOiBcIk0yMC45NzUxIDIzLjQxMzhDMjAuOTc1MSAyMy43MTE4IDIwLjc0IDIzLjk1MDIgMjAuNDQ2MiAyMy45NTAySDMuNTc4NjhDMy4yODQ4MiAyMy45NTAyIDMuMDQ5NzkgMjMuNzExOCAzLjA0OTc5IDIzLjQxMzhWMC41ODYyMDhDMy4wNDk3OSAwLjI4ODE5NyAzLjI4NDgyIDAuMDQ5NzkyNiAzLjU3ODY4IDAuMDQ5NzkyNkgxNS4wMzkxQzE1LjA2ODUgMC4wNzk1OTM2IDE1LjA5NzkgMC4wOTQ0OTM3IDE1LjEyNzMgMC4xMDkzOTRDMTUuMTU2NyAwLjEyNDI5NCAxNS4xODYxIDAuMTM5MTk0IDE1LjIxNTUgMC4xNjg5OTVMMjAuODU3NSA1Ljg5MDhDMjAuOTE2MyA1Ljk1MDM2IDIwLjk3NTEgNi4wMTAwNCAyMC45NzUxIDYuMDY5NlYyMy40MTM4Wk0xOS4xNTMxIDUuNzExOTlMMTUuMzkxOCAxLjg5NzQ2VjUuNzExOTlIMTkuMTUzMVpNNC4xNjYzOSAxLjEyMjYzVjIyLjc1ODJIMTkuOTE3MlY2Ljc4NDgzSDE0Ljg2MjlDMTQuNTY5IDYuNzg0ODMgMTQuMzMzOSA2LjU0NjQxIDE0LjMzMzkgNi4yNDg0VjEuMTIyNjNINC4xNjYzOVpNMTIuMDQxOSA5LjcwNTM4SDYuMzk5OTlDNi4xMDYxNCA5LjcwNTM4IDUuODcxMDUgOS40NjY5OCA1Ljg3MTA1IDkuMTY4OThDNS44NzEwNSA4Ljg3MDk4IDYuMTA2MTQgOC42MzI1NyA2LjM5OTk5IDguNjMyNTdIMTIuMDQxOUMxMi4zMzU3IDguNjMyNTcgMTIuNTcwOCA4Ljg3MDk4IDEyLjU3MDggOS4xNjg5OEMxMi41NzA4IDkuNDY2OTggMTIuMzM1NyA5LjcwNTM4IDEyLjA0MTkgOS43MDUzOFpNMTQuODYyNCAxMi44NjQzSDYuNDU4MzRDNi4xNjQ0OSAxMi44NjQzIDUuOTI5NCAxMy4xMDI3IDUuOTI5NCAxMy40MDA3QzUuOTI5NCAxMy42OTg3IDYuMTY0NDkgMTMuOTM3MSA2LjQ1ODM0IDEzLjkzNzFIMTQuODYyNEMxNS4xNTYzIDEzLjkzNzEgMTUuMzkxNCAxMy42OTg3IDE1LjM5MTQgMTMuNDAwN0MxNS4zOTE0IDEzLjEwMjcgMTUuMTU2MyAxMi44NjQzIDE0Ljg2MjQgMTIuODY0M1pNNi40NTgzNCAxNy4xNTU1SDE0Ljg2MjRDMTUuMTU2MyAxNy4xNTU1IDE1LjM5MTQgMTcuMzkzOSAxNS4zOTE0IDE3LjY5MTlDMTUuMzkxNCAxNy45ODk5IDE1LjE1NjMgMTguMjI4MyAxNC44NjI0IDE4LjIyODNINi40NTgzNEM2LjE2NDQ5IDE4LjIyODMgNS45Mjk0IDE3Ljk4OTkgNS45Mjk0IDE3LjY5MTlDNS45Mjk0IDE3LjM5MzkgNi4xNjQ0OSAxNy4xNTU1IDYuNDU4MzQgMTcuMTU1NVpcIixcbiAgICAgIGZpbGw6IFwiY3VycmVudENvbG9yXCJcbiAgICB9XG4gICksXG4gIC8qIEBfX1BVUkVfXyAqLyBjKFxuICAgIFwicGF0aFwiLFxuICAgIHtcbiAgICAgIGZpbGxSdWxlOiBcImV2ZW5vZGRcIixcbiAgICAgIGNsaXBSdWxlOiBcImV2ZW5vZGRcIixcbiAgICAgIGQ6IFwiTTE1LjA2IDBMMTUuMDc0NiAwLjAxNDgzMTVDMTUuMDk3NyAwLjAzODI4NiAxNS4xMjA1IDAuMDUwMTAyMyAxNS4xNDk4IDAuMDY0OTgxM0wxNS4xNTEyIDAuMDY1NjYxNEMxNS4xODAzIDAuMDgwNDUxMSAxNS4yMTU4IDAuMDk4NDMzNyAxNS4yNTA5IDAuMTM0MDM0TDIwLjg5NDUgNS44NTczNkMyMC45MjI5IDUuODg2MTIgMjAuOTU0MyA1LjkxODAxIDIwLjk3ODQgNS45NTA2NUMyMS4wMDI2IDUuOTgzMzQgMjEuMDI0OSA2LjAyMzc5IDIxLjAyNDkgNi4wNjk2VjIzLjQxMzhDMjEuMDI0OSAyMy43Mzg2IDIwLjc2ODIgMjQgMjAuNDQ2MiAyNEgzLjU3ODY4QzMuMjU2NjYgMjQgMyAyMy43Mzg2IDMgMjMuNDEzOFYwLjU4NjIwN0MzIDAuMjYxMzY1IDMuMjU2NjYgMCAzLjU3ODY4IDBIMTUuMDZaTTIwLjg1NzUgNS44OTA4TDE1LjIxNTUgMC4xNjg5OTVDMTUuMTg2MSAwLjEzOTE5NCAxNS4xNTY3IDAuMTI0Mjk0IDE1LjEyNzMgMC4xMDkzOTRDMTUuMDk3OSAwLjA5NDQ5MzcgMTUuMDY4NSAwLjA3OTU5MzYgMTUuMDM5MSAwLjA0OTc5MjZIMy41Nzg2OEMzLjI4NDgyIDAuMDQ5NzkyNiAzLjA0OTc5IDAuMjg4MTk3IDMuMDQ5NzkgMC41ODYyMDhWMjMuNDEzOEMzLjA0OTc5IDIzLjcxMTggMy4yODQ4MiAyMy45NTAyIDMuNTc4NjggMjMuOTUwMkgyMC40NDYyQzIwLjc0IDIzLjk1MDIgMjAuOTc1MSAyMy43MTE4IDIwLjk3NTEgMjMuNDEzOFY2LjA2OTZDMjAuOTc1MSA2LjAxMDA0IDIwLjkxNjMgNS45NTAzNiAyMC44NTc1IDUuODkwOFpNMTUuMzkxOCAxLjg5NzQ2VjUuNzExOTlIMTkuMTUzMUwxNS4zOTE4IDEuODk3NDZaTTE1LjQ0MTYgMi4wMTg4N1Y1LjY2MjE5SDE5LjAzNDFMMTUuNDQxNiAyLjAxODg3Wk00LjIxNjE5IDEuMTcyNDJWMjIuNzA4NEgxOS44Njc0VjYuODM0NjJIMTQuODYyOUMxNC41NDA4IDYuODM0NjIgMTQuMjg0MSA2LjU3MzI1IDE0LjI4NDEgNi4yNDg0VjEuMTcyNDJINC4yMTYxOVpNMTIuMDQxOSA5Ljc1NTE3SDYuMzk5OTlDNi4wNzc5OSA5Ljc1NTE3IDUuODIxMjUgOS40OTM4MiA1LjgyMTI1IDkuMTY4OThDNS44MjEyNSA4Ljg0NDEzIDYuMDc3OTggOC41ODI3OCA2LjM5OTk5IDguNTgyNzhIMTIuMDQxOUMxMi4zNjM5IDguNTgyNzggMTIuNjIwNiA4Ljg0NDEzIDEyLjYyMDYgOS4xNjg5OEMxMi42MjA2IDkuNDkzODIgMTIuMzYzOSA5Ljc1NTE3IDEyLjA0MTkgOS43NTUxN1pNNi40NTgzNCAxMi44MTQ1SDE0Ljg2MjRDMTUuMTg0NSAxMi44MTQ1IDE1LjQ0MTIgMTMuMDc1OCAxNS40NDEyIDEzLjQwMDdDMTUuNDQxMiAxMy43MjU1IDE1LjE4NDUgMTMuOTg2OSAxNC44NjI0IDEzLjk4NjlINi40NTgzNEM2LjEzNjM0IDEzLjk4NjkgNS44Nzk2MSAxMy43MjU1IDUuODc5NjEgMTMuNDAwN0M1Ljg3OTYxIDEzLjA3NTggNi4xMzYzNCAxMi44MTQ1IDYuNDU4MzQgMTIuODE0NVpNNi40NTgzNCAxNy4xMDU3SDE0Ljg2MjRDMTUuMTg0NSAxNy4xMDU3IDE1LjQ0MTIgMTcuMzY3MSAxNS40NDEyIDE3LjY5MTlDMTUuNDQxMiAxOC4wMTY4IDE1LjE4NDUgMTguMjc4MSAxNC44NjI0IDE4LjI3ODFINi40NTgzNEM2LjEzNjM0IDE4LjI3ODEgNS44Nzk2MSAxOC4wMTY4IDUuODc5NjEgMTcuNjkxOUM1Ljg3OTYxIDE3LjM2NzEgNi4xMzYzNCAxNy4xMDU3IDYuNDU4MzQgMTcuMTA1N1pNNC4xNjYzOSAxLjEyMjYzSDE0LjMzMzlWNi4yNDg0QzE0LjMzMzkgNi41NDY0MSAxNC41NjkgNi43ODQ4MyAxNC44NjI5IDYuNzg0ODNIMTkuOTE3MlYyMi43NTgySDQuMTY2MzlWMS4xMjI2M1pNNi4zOTk5OSA5LjcwNTM4SDEyLjA0MTlDMTIuMzM1NyA5LjcwNTM4IDEyLjU3MDggOS40NjY5OCAxMi41NzA4IDkuMTY4OThDMTIuNTcwOCA4Ljg3MDk4IDEyLjMzNTcgOC42MzI1NyAxMi4wNDE5IDguNjMyNTdINi4zOTk5OUM2LjEwNjE0IDguNjMyNTcgNS44NzEwNSA4Ljg3MDk4IDUuODcxMDUgOS4xNjg5OEM1Ljg3MTA1IDkuNDY2OTggNi4xMDYxNCA5LjcwNTM4IDYuMzk5OTkgOS43MDUzOFpNNi40NTgzNCAxMi44NjQzSDE0Ljg2MjRDMTUuMTU2MyAxMi44NjQzIDE1LjM5MTQgMTMuMTAyNyAxNS4zOTE0IDEzLjQwMDdDMTUuMzkxNCAxMy42OTg3IDE1LjE1NjMgMTMuOTM3MSAxNC44NjI0IDEzLjkzNzFINi40NTgzNEM2LjE2NDQ5IDEzLjkzNzEgNS45Mjk0IDEzLjY5ODcgNS45Mjk0IDEzLjQwMDdDNS45Mjk0IDEzLjEwMjcgNi4xNjQ0OSAxMi44NjQzIDYuNDU4MzQgMTIuODY0M1pNMTQuODYyNCAxNy4xNTU1SDYuNDU4MzRDNi4xNjQ0OSAxNy4xNTU1IDUuOTI5NCAxNy4zOTM5IDUuOTI5NCAxNy42OTE5QzUuOTI5NCAxNy45ODk5IDYuMTY0NDkgMTguMjI4MyA2LjQ1ODM0IDE4LjIyODNIMTQuODYyNEMxNS4xNTYzIDE4LjIyODMgMTUuMzkxNCAxNy45ODk5IDE1LjM5MTQgMTcuNjkxOUMxNS4zOTE0IDE3LjM5MzkgMTUuMTU2MyAxNy4xNTU1IDE0Ljg2MjQgMTcuMTU1NVpcIixcbiAgICAgIGZpbGw6IFwiY3VycmVudENvbG9yXCJcbiAgICB9XG4gIClcbl0gfSksIGZ6ID0gKCkgPT4gLyogQF9fUFVSRV9fICovIGUxKFwic3ZnXCIsIHsgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiwgdmlld0JveDogXCIwIDAgMjQgMjRcIiwgZmlsbDogXCJub25lXCIsIGNoaWxkcmVuOiBbXG4gIC8qIEBfX1BVUkVfXyAqLyBjKFxuICAgIFwicGF0aFwiLFxuICAgIHtcbiAgICAgIGQ6IFwiTTE0LjUgNy41QzE0IDcuNSAxMy42IDcuMSAxMy42IDYuNlYwSDMuNkMzLjMgMCAzIDAuMyAzIDAuNlYyMy40QzMgMjMuNyAzLjMgMjQgMy42IDI0SDIwLjVDMjAuOCAyNCAyMS4xIDIzLjcgMjEuMSAyMy40VjcuNUgxNC41Wk0xNS44IDEzLjRDMTYuNCAxMy40IDE2LjkgMTMuOSAxNi45IDE0LjVDMTYuOSAxNS4xIDE2LjQgMTUuNiAxNS44IDE1LjZINy4zQzYuNyAxNS42IDYuMiAxNS4xIDYuMiAxNC41QzYuMiAxMy45IDYuNyAxMy40IDcuMyAxMy40SDE1LjhaTTYuMiAxOC43QzYuMiAxOC4xIDYuNyAxNy42IDcuMyAxNy42SDE1LjdDMTYuMyAxNy42IDE2LjggMTguMSAxNi44IDE4LjdDMTYuOCAxOS4zIDE2LjMgMTkuOCAxNS43IDE5LjhINy4zQzYuNyAxOS44IDYuMiAxOS4zIDYuMiAxOC43Wk0xNC4xIDEwLjNDMTQuMSAxMC45IDEzLjYgMTEuNCAxMyAxMS40SDcuM0M2LjcgMTEuNCA2LjIgMTAuOSA2LjIgMTAuM0M2LjIgOS43IDYuNyA5LjIgNy4zIDkuMkgxMi45QzEzLjYgOS4yIDE0LjEgOS43IDE0LjEgMTAuM1pcIixcbiAgICAgIGZpbGw6IFwiY3VycmVudENvbG9yXCJcbiAgICB9XG4gICksXG4gIC8qIEBfX1BVUkVfXyAqLyBjKFwicGF0aFwiLCB7IGQ6IFwiTTIwLjcgNS43SDE1LjRWMC4zTDIwLjcgNS43WlwiLCBmaWxsOiBcImN1cnJlbnRDb2xvclwiIH0pXG5dIH0pLCBneiA9ICgpID0+IC8qIEBfX1BVUkVfXyAqLyBjKFwic3ZnXCIsIHsgdmlld0JveDogXCIwIDAgMjQgMjRcIiwgZmlsbDogXCJub25lXCIsIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsIGNoaWxkcmVuOiAvKiBAX19QVVJFX18gKi8gYyhcbiAgXCJwYXRoXCIsXG4gIHtcbiAgICBmaWxsUnVsZTogXCJldmVub2RkXCIsXG4gICAgY2xpcFJ1bGU6IFwiZXZlbm9kZFwiLFxuICAgIGQ6IFwiTTIyLjYgMTJDMjIuNiAxNy44NTQyIDE3Ljg1NDIgMjIuNiAxMiAyMi42QzYuMTQ1NzggMjIuNiAxLjQgMTcuODU0MiAxLjQgMTJDMS40IDYuMTQ1NzggNi4xNDU3OCAxLjQgMTIgMS40QzE3Ljg1NDIgMS40IDIyLjYgNi4xNDU3OCAyMi42IDEyWk0yNCAxMkMyNCAxOC42Mjc0IDE4LjYyNzQgMjQgMTIgMjRDNS4zNzI1OCAyNCAwIDE4LjYyNzQgMCAxMkMwIDUuMzcyNTggNS4zNzI1OCAwIDEyIDBDMTguNjI3NCAwIDI0IDUuMzcyNTggMjQgMTJaTTguNjczOTMgOC4wMzAzMkw4LjY5MjQ2IDguMDA3NzRDOS4wNjk0NyA3LjU4MTQ2IDkuNTU3NTYgNy4yNjIzOCAxMC4xMDUyIDcuMDg0MTlDMTAuNTEzOCA2Ljk1MzI0IDEwLjkzNjYgNi44NjgzOSAxMS4zNjUgNi44MzEyOVY1SDEyLjc1NDZWNi44NTM4N0MxMy4wMDE3IDYuODg1MDggMTMuMjQ2MyA2LjkzMzM3IDEzLjQ4NjQgNi45OTgzOUMxMy44OTYzIDcuMTA4NTQgMTQuMjgzNCA3LjI4NzMzIDE0LjYzMDUgNy41MjY3N0MxNC45MTg4IDcuNzIzNjEgMTUuMTY2MyA3Ljk3MTg0IDE1LjM2IDguMjU4MzlMMTUuNzQ0NSA4LjgyMjlMMTQuNTg2NSA5LjU3MDMyTDE0LjIwMjEgOS4wMDU4MUMxNC4xMDM3IDguODYwNjIgMTMuOTc3OSA4LjczNDk1IDEzLjgzMTUgOC42MzU0OEMxMy42MTQ1IDguNDg1MTggMTMuMzcyNCA4LjM3Mjg2IDEzLjExNTkgOC4zMDM1NUMxMi43NTcyIDguMjA5MDQgMTIuMzg3MyA4LjE2MTIxIDEyLjAxNTggOC4xNjEyOUMxMS41MTg3IDguMTQ0NTggMTEuMDIyNSA4LjIxMzM4IDEwLjU0OTggOC4zNjQ1MkMxMC4yNDExIDguNDY0NDQgOS45NjU4NCA4LjY0Mzg5IDkuNzUzMTYgOC44ODM4N0M5LjYxNTYxIDkuMDQ4MDYgOS41MzQ1OCA5LjI1MDMxIDkuNTIxNTcgOS40NjE5NFY5LjUyOTY4QzkuNTA0NzggOS43NzM3MSA5LjU4MTUzIDEwLjAxNTEgOS43MzY5NSAxMC4yMDcxQzkuOTIxNDUgMTAuNDE0NiAxMC4xNTYzIDEwLjU3MzggMTAuNDIwMSAxMC42N0MxMC44NzIzIDEwLjgzNTUgMTEuMzM2OSAxMC45NjY4IDExLjgwOTcgMTEuMDYyOUMxMi4yNTQ0IDExLjE1MzIgMTIuNTM5MiAxMS4yMTg3IDEyLjgwMzIgMTEuMjg4N0MxMi44Nzk5IDExLjMwOTIgMTIuOTU0NCAxMS4zMjkgMTMuMDI2OSAxMS4zNDgyQzEzLjI1MDIgMTEuNDA3NSAxMy40NTQgMTEuNDYxNyAxMy42MzkzIDExLjUxNDVDMTQuMDQ3NCAxMS42MjkgMTQuNDM3MiAxMS43OTg1IDE0Ljc5NzMgMTIuMDE4MUMxNS4xNDc2IDEyLjIzNDYgMTUuNDQyMyAxMi41MjY2IDE1LjY1ODggMTIuODcxNkMxNS44OTAzIDEzLjI3NDggMTYuMDA3NyAxMy43MzA2IDE1Ljk5OTIgMTQuMTkyNkMxNi4wMTM0IDE0Ljc1OTYgMTUuODM1MSAxNS4zMTUyIDE1LjQ5MiAxNS43NzMyQzE1LjExMjcgMTYuMjYzOSAxNC41OTY1IDE2LjYzNzggMTQuMDA1MiAxNi44NTAzQzEzLjYwNDEgMTYuOTk5NiAxMy4xODU2IDE3LjA5OTcgMTIuNzU5MiAxNy4xNDg0VjE5SDExLjM2OTdWMTcuMTcxQzEwLjc2MzIgMTcuMTIyOCAxMC4xNzA0IDE2Ljk2OTkgOS42MTg4MyAxNi43MTk0QzkuMTM1MzggMTYuNDc5MiA4LjcxODM0IDE2LjEyOTIgOC40MDI5NyAxNS42OTg3TDggMTUuMTQ3N0w5LjEzMDE3IDE0LjM2MTlMOS41MzMxNCAxNC45MTI5QzkuNzEzMzUgMTUuMTYxIDkuOTUxNDkgMTUuMzYzOCAxMC4yMjc5IDE1LjUwNDVDMTAuNzUyOSAxNS43NDI5IDExLjMyODEgMTUuODU3NCAxMS45MDcgMTUuODM4N0gxMS45NTFDMTIuNDgyOCAxNS44NTYyIDEzLjAxMjggMTUuNzY5NCAxMy41MDk2IDE1LjU4MzVDMTMuODUzMyAxNS40NjI4IDE0LjE1NDEgMTUuMjQ4IDE0LjM3NTggMTQuOTY0OEMxNC41MzQ3IDE0Ljc0NjMgMTQuNjE2MSAxNC40ODMgMTQuNjA3MyAxNC4yMTUyVjE0LjE4MzVDMTQuNjEyMiAxMy45NjA3IDE0LjU1NTQgMTMuNzQwOCAxNC40NDI5IDEzLjU0NjhDMTQuMzM5MiAxMy4zOTA5IDE0LjIwMTYgMTMuMjU5MSAxNC4wMzk5IDEzLjE2MDZDMTMuNzkwNyAxMy4wMDkgMTMuNTIxIDEyLjg5MTkgMTMuMjM4NiAxMi44MTI5QzEzLjAxNCAxMi43NDk3IDEyLjc1NDYgMTIuNjgxOSAxMi40NDY2IDEyLjYwOTdDMTIuMTk2NSAxMi41MzA2IDExLjkzMjQgMTIuNDY5NyAxMS41MjAyIDEyLjM4MzlDMTAuOTc1NiAxMi4yNzM4IDEwLjQ0MDYgMTIuMTIyOCA5LjkxOTkgMTEuOTMyM0M5LjQyNzI3IDExLjc1MTQgOC45OTAzNSAxMS40NTA2IDguNjUwNzggMTEuMDU4NEw4LjYyNzYyIDExLjAzMTNDOC4yNjc1NCAxMC41ODE5IDguMDg4MDIgMTAuMDE5OSA4LjEyMjc0IDkuNDUwNjRDOC4xNDIzMSA4LjkzMTE5IDguMzM1OTEgOC40MzIyOSA4LjY3MzkzIDguMDMwMzJaXCIsXG4gICAgZmlsbDogXCJjdXJyZW50Y29sb3JcIlxuICB9XG4pIH0pLCBDeiA9ICgpID0+IC8qIEBfX1BVUkVfXyAqLyBjKFwic3ZnXCIsIHsgdmlld0JveDogXCIwIDAgMjQgMjRcIiwgZmlsbDogXCJub25lXCIsIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsIGNoaWxkcmVuOiAvKiBAX19QVVJFX18gKi8gYyhcbiAgXCJwYXRoXCIsXG4gIHtcbiAgICBmaWxsUnVsZTogXCJldmVub2RkXCIsXG4gICAgY2xpcFJ1bGU6IFwiZXZlbm9kZFwiLFxuICAgIGQ6IFwiTTE0LjI1OCAyNEMxNC4wMTYxIDI0IDEzLjg1NDggMjMuOTIxNiAxMy42OTM1IDIzLjc2NDdMMi4yNDE5MyAxMi41NDlDMi4wODA2NCAxMi4zOTIyIDIgMTIuMTU2OSAyIDEyQzIgMTEuNzY0NyAyLjA4MDY0IDExLjYwNzggMi4yNDE5MyAxMS40NTFMMTMuNzc0MiAwLjIzNTI5NEMxNC4wOTY3IC0wLjA3ODQzMTQgMTQuNDk5OSAtMC4wNzg0MzE0IDE0LjgyMjUgMC4yMzUyOTRDMTUuMTQ1MSAwLjU0OTAyIDE1LjE0NTEgMC45NDExNzcgMTQuODIyNSAxLjI1NDlMMy43NzQxNSAxMkwxNC44MjI1IDIyLjc0NTFDMTUuMTQ1MSAyMy4wNTg4IDE1LjE0NTEgMjMuNDUxIDE0LjgyMjUgMjMuNzY0N0MxNC42NjEyIDIzLjkyMTYgMTQuNDE5MyAyNCAxNC4yNTggMjRaTTkuMDk2OTEgMTIuNTQ5QzguOTM1NjIgMTIuMzkyMiA4Ljg1NDk4IDEyLjE1NjkgOC44NTQ5OCAxMkM4Ljg1NDk4IDExLjc2NDcgOC45MzU2IDExLjYwNzggOS4xNzc1MyAxMS40NTFMMjAuNzA5OCAwLjIzNTI5NEMyMS4wMzIzIC0wLjA3ODQzMTQgMjEuNDM1NiAtMC4wNzg0MzE0IDIxLjc1ODIgMC4yMzUyOTRDMjIuMDgwOCAwLjU0OTAyIDIyLjA4MDggMC45NDExNzcgMjEuNzU4MiAxLjI1NDlMMTAuNzA5OCAxMkwyMS43NTgyIDIyLjc0NTFDMjIuMDgwOCAyMy4wNTg4IDIyLjA4MDggMjMuNDUxIDIxLjc1ODIgMjMuNzY0N0MyMS41OTY5IDIzLjkyMTYgMjEuMzU0OSAyNCAyMS4xOTM3IDI0QzIwLjk1MTcgMjQgMjAuNzkwNCAyMy45MjE2IDIwLjYyOTEgMjMuNzY0N0w5LjA5NjkxIDEyLjU0OVpcIixcbiAgICBmaWxsOiBcImN1cnJlbnRDb2xvclwiXG4gIH1cbikgfSksIG16ID0gKCkgPT4gLyogQF9fUFVSRV9fICovIGMoXCJzdmdcIiwgeyB2aWV3Qm94OiBcIjAgMCAyNCAyNFwiLCBmaWxsOiBcIm5vbmVcIiwgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiwgY2hpbGRyZW46IC8qIEBfX1BVUkVfXyAqLyBjKFxuICBcInBhdGhcIixcbiAge1xuICAgIGZpbGxSdWxlOiBcImV2ZW5vZGRcIixcbiAgICBjbGlwUnVsZTogXCJldmVub2RkXCIsXG4gICAgZDogXCJNOS4xMDk4NiAyMi43NDUxTDIwLjE0NzEgMTJMOS4xOTA0MyAxLjI1NDlDOC44NjgxNyAwLjk0MTE3NiA4Ljg2ODE3IDAuNTQ5MDE5IDkuMTkwNDMgMC4yMzUyOTRDOS41MTI2OCAtMC4wNzg0MzEzIDkuOTE1NDkgLTAuMDc4NDMxMyAxMC4yMzc3IDAuMjM1Mjk0TDIxLjc1ODQgMTEuNTI5NEMyMi4wODA3IDExLjg0MzEgMjIuMDgwNyAxMi4yMzUzIDIxLjc1ODQgMTIuNTQ5TDEwLjIzNzcgMjMuNzY0N0MxMC4wNzY2IDIzLjkyMTYgOS44MzQ5MiAyNCA5LjY3Mzc5IDI0QzkuNDMyMSAyNCA5LjI3MDk4IDIzLjkyMTYgOS4xMDk4NiAyMy43NjQ3QzguNzg3NiAyMy40NTEgOC43ODc2IDIzLjA1ODggOS4xMDk4NiAyMi43NDUxWk0yLjc0NTIyIDI0QzIuNTAzNTMgMjQgMi4zNDIzOSAyMy45MjE2IDIuMTgxMjYgMjMuNzY0N0MxLjkzOTU3IDIzLjQ1MSAxLjkzOTU3IDIyLjk4MDQgMi4xODEyNiAyMi42NjY3TDEzLjI5OTEgMTJMMi4yNjE4MyAxLjI1NDkxQzEuOTM5NTcgMC45NDExODQgMS45Mzk1NyAwLjU0OTAyNyAyLjI2MTgzIDAuMjM1MzAyQzIuNTg0MDkgLTAuMDc4NDIzNyAyLjk4NjkgLTAuMDc4NDIzNyAzLjMwOTE1IDAuMjM1MzAyTDE0LjgyOTggMTEuNTI5NEMxNS4xNTIxIDExLjg0MzEgMTUuMTUyMSAxMi4yMzUzIDE0LjgyOTggMTIuNTQ5TDMuMzA5MTUgMjMuNzY0N0MzLjE0ODAzIDIzLjkyMTYgMi45MDYzNSAyNCAyLjc0NTIyIDI0WlwiLFxuICAgIGZpbGw6IFwiY3VycmVudENvbG9yXCJcbiAgfVxuKSB9KSwgTHogPSAoKSA9PiAvKiBAX19QVVJFX18gKi8gZTEoXCJzdmdcIiwgeyB2aWV3Qm94OiBcIjAgMCAyNCAyNFwiLCBmaWxsOiBcIm5vbmVcIiwgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiwgY2hpbGRyZW46IFtcbiAgLyogQF9fUFVSRV9fICovIGMoXG4gICAgXCJwYXRoXCIsXG4gICAge1xuICAgICAgZmlsbFJ1bGU6IFwiZXZlbm9kZFwiLFxuICAgICAgY2xpcFJ1bGU6IFwiZXZlbm9kZFwiLFxuICAgICAgZDogXCJNMTEuNDk1MyAxLjYyODY0QzExLjQ5NTMgMS4zMzQ0OSAxMS43MzI3IDEuMDk5MTcgMTIuMDI5NSAxLjA5OTE3QzEyLjMyNjIgMS4wOTkxNyAxMi41NjM3IDEuMzM0NDkgMTIuNjgyNCAxLjYyODY0VjE0LjM5NDdMMTcuNDMwNyA5LjY4ODM1QzE3LjY2ODEgOS40NTMwMyAxNy45NjQ5IDkuNDUzMDMgMTguMjAyMyA5LjY4ODM1QzE4LjQzOTcgOS45MjM2NyAxOC40Mzk3IDEwLjIxNzggMTguMjAyMyAxMC40NTMxTDEyLjUwNDMgMTYuMTAwOEMxMi40NDQ5IDE2LjE1OTcgMTIuMzg1NiAxNi4yMTg1IDEyLjMyNjIgMTYuMjE4NUMxMi4yMDc1IDE2LjI3NzMgMTIuMTQ4MiAxNi4yNzczIDEyLjA4ODggMTYuMjc3M0MxMi4wMTkzIDE2LjI3NzMgMTEuOTcwMSAxNi4yNTcxIDExLjkyOTQgMTYuMjQwNEMxMS45MDA2IDE2LjIyODYgMTEuODc2IDE2LjIxODUgMTEuODUxNCAxNi4yMTg1QzExLjc5MiAxNi4yMTg1IDExLjczMjcgMTYuMTU5NyAxMS42NzMzIDE2LjEwMDhMNS45NzUzNiAxMC40NTMxQzUuNzM3OTQgMTAuMjE3OCA1LjczNzk0IDkuOTIzNjcgNS45NzUzNiA5LjY4ODM1QzYuMjEyNzcgOS40NTMwMyA2LjUwOTU0IDkuNDUzMDMgNi43NDY5NiA5LjY4ODM1TDExLjQ5NTMgMTQuMzk0N1YxLjYyODY0Wk0yMi44MzI0IDE1LjY4OTVDMjIuODMyNCAxNS4zOTUzIDIzLjA2OTggMTUuMTYgMjMuMzY2NiAxNS4xNkMyMy42NjM0IDE1LjE2IDIzLjkwMDggMTUuNDU0MSAyMy45MDA4IDE1Ljc0ODNWMjEuMzk2MUMyMy45MDA4IDIxLjY5MDMgMjMuNjYzNCAyMS45MjU2IDIzLjM2NjYgMjEuOTI1NkgwLjYzMzM3NUMwLjMzNjU5NyAyMS45MjU2IDAuMDk5MTczNiAyMS42OTAzIDAuMDk5MTczNiAyMS4zOTYxVjE1Ljc0ODNDMC4wOTkxNzM2IDE1LjQ1NDEgMC4zOTU5NTIgMTUuMTYgMC42OTI3MzEgMTUuMTZDMC45ODk1MSAxNS4xNiAxLjIyNjkzIDE1LjM5NTMgMS4yMjY5MyAxNS42ODk1VjIwLjc0OUgyMi44MzI0VjE1LjY4OTVaXCIsXG4gICAgICBmaWxsOiBcImN1cnJlbnRjb2xvclwiXG4gICAgfVxuICApLFxuICAvKiBAX19QVVJFX18gKi8gYyhcbiAgICBcInBhdGhcIixcbiAgICB7XG4gICAgICBmaWxsUnVsZTogXCJldmVub2RkXCIsXG4gICAgICBjbGlwUnVsZTogXCJldmVub2RkXCIsXG4gICAgICBkOiBcIk0xMi43ODE1IDEuNjA5MzhWMTQuMTU2OEwxNy4zNjA5IDkuNjE3OUMxNy40OTQ0IDkuNDg1NSAxNy42NTIgOS40MTI2OCAxNy44MTY1IDkuNDEyNjhDMTcuOTgxIDkuNDEyNjggMTguMTM4NSA5LjQ4NTUgMTguMjcyMSA5LjYxNzlDMTguNDA1NiA5Ljc1MDI3IDE4LjQ3OTUgOS45MDY4MiAxOC40Nzk1IDEwLjA3MDdDMTguNDc5NSAxMC4yMzQ3IDE4LjQwNTYgMTAuMzkxMiAxOC4yNzIxIDEwLjUyMzZMMTIuNTcxNyAxNi4xNzM2QzEyLjU0MzggMTYuMjAxMyAxMi41MDk4IDE2LjIzNSAxMi40NzQ0IDE2LjI2MTNDMTIuNDQ0MiAxNi4yODM4IDEyLjQwMjcgMTYuMzA4OSAxMi4zNTI4IDE2LjMxNThDMTIuMjk1NCAxNi4zNDI5IDEyLjI0NzggMTYuMzU4NyAxMi4yMDQ2IDE2LjM2NzJDMTIuMTU3OSAxNi4zNzY1IDEyLjEyMDEgMTYuMzc2NSAxMi4wOTA1IDE2LjM3NjVIMTIuMDg4OEMxMS45OTk3IDE2LjM3NjUgMTEuOTM1NSAxNi4zNTAxIDExLjg5MzUgMTYuMzMyOUwxMS44OTE3IDE2LjMzMjFDMTEuODc2MyAxNi4zMjU4IDExLjg2NzIgMTYuMzIyMSAxMS44NTkzIDE2LjMxOTdDMTEuODUyIDE2LjMxNzQgMTEuODUwMiAxNi4zMTc2IDExLjg1MTQgMTYuMzE3NkMxMS43ODk2IDE2LjMxNzYgMTEuNzM4NiAxNi4yODc2IDExLjcwMzIgMTYuMjYxM0MxMS42Njc4IDE2LjIzNSAxMS42MzM5IDE2LjIwMTMgMTEuNjA1OSAxNi4xNzM2TDUuOTA1NTQgMTAuNTIzNkM1Ljc3MiAxMC4zOTEyIDUuNjk4MTIgMTAuMjM0NyA1LjY5ODEyIDEwLjA3MDdDNS42OTgxMiA5LjkwNjgyIDUuNzcyIDkuNzUwMjcgNS45MDU1NCA5LjYxNzlDNi4wMzkxMiA5LjQ4NTUgNi4xOTY2OCA5LjQxMjY4IDYuMzYxMTYgOS40MTI2OEM2LjUyNTY0IDkuNDEyNjggNi42ODMxOSA5LjQ4NTUgNi44MTY3NyA5LjYxNzlMMTEuMzk2MSAxNC4xNTY4VjEuNjI4NjRDMTEuMzk2MSAxLjI3ODg5IDExLjY3ODggMSAxMi4wMjk1IDFDMTIuMzgzNiAxIDEyLjY0OCAxLjI3ODQ4IDEyLjc3NDMgMS41OTE1M0wxMi43ODE1IDEuNjA5MzhaTTExLjQ5NTMgMS42Mjg2NEMxMS40OTUzIDEuMzM0NDkgMTEuNzMyNyAxLjA5OTE3IDEyLjAyOTUgMS4wOTkxN0MxMi4zMjYyIDEuMDk5MTcgMTIuNTYzNyAxLjMzNDQ5IDEyLjY4MjQgMS42Mjg2NFYxNC4zOTQ3TDE3LjQzMDcgOS42ODgzNUMxNy42NjgxIDkuNDUzMDMgMTcuOTY0OSA5LjQ1MzAzIDE4LjIwMjMgOS42ODgzNUMxOC40Mzk3IDkuOTIzNjcgMTguNDM5NyAxMC4yMTc4IDE4LjIwMjMgMTAuNDUzMUwxMi41MDQzIDE2LjEwMDhDMTIuNDQ0OSAxNi4xNTk3IDEyLjM4NTYgMTYuMjE4NSAxMi4zMjYyIDE2LjIxODVDMTIuMjA3NSAxNi4yNzczIDEyLjE0ODIgMTYuMjc3MyAxMi4wODg4IDE2LjI3NzNDMTIuMDE5MyAxNi4yNzczIDExLjk3MDEgMTYuMjU3MSAxMS45Mjk0IDE2LjI0MDRDMTEuOTAwNiAxNi4yMjg2IDExLjg3NiAxNi4yMTg1IDExLjg1MTQgMTYuMjE4NUMxMS43OTIgMTYuMjE4NSAxMS43MzI3IDE2LjE1OTcgMTEuNjczMyAxNi4xMDA4TDUuOTc1MzYgMTAuNDUzMUM1LjczNzk0IDEwLjIxNzggNS43Mzc5NCA5LjkyMzY3IDUuOTc1MzYgOS42ODgzNUM2LjIxMjc3IDkuNDUzMDMgNi41MDk1NCA5LjQ1MzAzIDYuNzQ2OTYgOS42ODgzNUwxMS40OTUzIDE0LjM5NDdWMS42Mjg2NFpNMjIuNzMzMiAxNS42ODk1QzIyLjczMzIgMTUuMzM5NyAyMy4wMTU5IDE1LjA2MDggMjMuMzY2NiAxNS4wNjA4QzIzLjU0OTEgMTUuMDYwOCAyMy43MDg0IDE1LjE1MTIgMjMuODE5NyAxNS4yNzg1QzIzLjkzMDcgMTUuNDA1NiAyNCAxNS41NzU0IDI0IDE1Ljc0ODNWMjEuMzk2MUMyNCAyMS43NDU5IDIzLjcxNzMgMjIuMDI0OCAyMy4zNjY2IDIyLjAyNDhIMC42MzMzNzVDMC4yODI2NTcgMjIuMDI0OCAwIDIxLjc0NTkgMCAyMS4zOTYxVjE1Ljc0ODNDMCAxNS41Njg2IDAuMDg5NjAyMSAxNS4zOTc1IDAuMjE0ODQ2IDE1LjI3MzRDMC4zNDAxNDQgMTUuMTQ5MiAwLjUxMjM5NyAxNS4wNjA4IDAuNjkyNzMxIDE1LjA2MDhDMS4wNDM0NSAxNS4wNjA4IDEuMzI2MTEgMTUuMzM5NyAxLjMyNjExIDE1LjY4OTVWMjAuNjQ5OEgyMi43MzMyVjE1LjY4OTVaTTIzLjM2NjYgMTUuMTZDMjMuMDY5OCAxNS4xNiAyMi44MzI0IDE1LjM5NTMgMjIuODMyNCAxNS42ODk1VjIwLjc0OUgxLjIyNjkzVjE1LjY4OTVDMS4yMjY5MyAxNS4zOTUzIDAuOTg5NTEgMTUuMTYgMC42OTI3MzEgMTUuMTZDMC4zOTU5NTIgMTUuMTYgMC4wOTkxNzM2IDE1LjQ1NDEgMC4wOTkxNzM2IDE1Ljc0ODNWMjEuMzk2MUMwLjA5OTE3MzYgMjEuNjkwMyAwLjMzNjU5NyAyMS45MjU2IDAuNjMzMzc1IDIxLjkyNTZIMjMuMzY2NkMyMy42NjM0IDIxLjkyNTYgMjMuOTAwOCAyMS42OTAzIDIzLjkwMDggMjEuMzk2MVYxNS43NDgzQzIzLjkwMDggMTUuNDU0MSAyMy42NjM0IDE1LjE2IDIzLjM2NjYgMTUuMTZaXCIsXG4gICAgICBmaWxsOiBcImN1cnJlbnRjb2xvclwiXG4gICAgfVxuICApXG5dIH0pLCB2eiA9ICgpID0+IC8qIEBfX1BVUkVfXyAqLyBlMShcInN2Z1wiLCB7IHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsIHZpZXdCb3g6IFwiMCAwIDI0IDI0XCIsIGZpbGw6IFwibm9uZVwiLCBjaGlsZHJlbjogW1xuICAvKiBAX19QVVJFX18gKi8gYyhcbiAgICBcInBhdGhcIixcbiAgICB7XG4gICAgICBkOiBcIk0xMS40IDE2LjVDMTEuNSAxNi42IDExLjYgMTYuNiAxMS43IDE2LjZDMTEuOCAxNi42IDExLjkgMTYuNyAxMiAxNi43QzEyIDE2LjcgMTIuMSAxNi43IDEyLjIgMTYuN0MxMi4zIDE2LjcgMTIuMyAxNi43IDEyLjQgMTYuNkMxMi41IDE2LjYgMTIuNiAxNi41IDEyLjYgMTYuNUMxMi43IDE2LjUgMTIuNyAxNi40IDEyLjcgMTYuNEwxOC4yIDEwLjlDMTguNCAxMC43IDE4LjUgMTAuNCAxOC41IDEwLjJDMTguNSA5LjkgMTguNCA5LjcgMTguMiA5LjVDMTggOS4zIDE3LjcgOS4yIDE3LjUgOS4yQzE3LjIgOS4yIDE3IDkuMyAxNi44IDkuNUwxMy4xIDEzLjJWMS44QzEyLjkgMS4zIDEyLjUgMSAxMiAxQzExLjQgMSAxMSAxLjUgMTEgMlYxMy4xTDcuMyA5LjRDNy4xIDkuMiA2LjggOS4xIDYuNiA5LjFDNi4zIDkuMSA2IDkuMiA1LjggOS40QzUuNiA5LjcgNS41IDkuOSA1LjUgMTAuMkM1LjUgMTAuNSA1LjYgMTAuNyA1LjggMTAuOUwxMS40IDE2LjVaXCIsXG4gICAgICBmaWxsOiBcImN1cnJlbnRjb2xvclwiXG4gICAgfVxuICApLFxuICAvKiBAX19QVVJFX18gKi8gYyhcbiAgICBcInBhdGhcIixcbiAgICB7XG4gICAgICBkOiBcIk0yMy43IDE0LjlDMjMuNSAxNC43IDIzLjIgMTQuNSAyMyAxNC41QzIyLjQgMTQuNSAyMiAxNSAyMiAxNS41VjIwSDIuMVYxNS42QzIuMSAxNSAxLjYgMTQuNiAxLjEgMTQuNkMwLjggMTQuNiAwLjYgMTQuNyAwLjMgMTQuOUMwLjEgMTUuMSAwIDE1LjQgMCAxNS43VjIxLjJDMCAyMS44IDAuNSAyMi4yIDEgMjIuMkgyM0MyMy42IDIyLjIgMjQgMjEuNyAyNCAyMS4yVjE1LjdDMjQgMTUuNCAyMy45IDE1LjEgMjMuNyAxNC45WlwiLFxuICAgICAgZmlsbDogXCJjdXJyZW50Y29sb3JcIlxuICAgIH1cbiAgKVxuXSB9KSwgcXogPSAoKSA9PiAvKiBAX19QVVJFX18gKi8gYyhcInN2Z1wiLCB7IHZpZXdCb3g6IFwiMCAwIDI0IDI0XCIsIGZpbGw6IFwibm9uZVwiLCB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLCBjaGlsZHJlbjogLyogQF9fUFVSRV9fICovIGMoXG4gIFwicGF0aFwiLFxuICB7XG4gICAgZmlsbFJ1bGU6IFwiZXZlbm9kZFwiLFxuICAgIGNsaXBSdWxlOiBcImV2ZW5vZGRcIixcbiAgICBkOiBcIk0wIDExLjgyOTRDOS42NDU1NmUtMDYgOC41NjIzIDMuMDQ0ODEgNS45MjgyNSA2LjU2OTQ0IDYuNDgzNDFDNy44ODc4OSA0Ljg5MTU2IDkuOTE0NjYgMy45ODM0IDEyIDMuOTgzNEMxNS4yMTYgMy45ODM0IDE3LjkwMTIgNi4wMjU4NCAxOC42OTUyIDguOTI3NzlDMTkuMDIxMyA4Ljg3NTE1IDE5LjMxOTMgOC44MjA0NiAxOS42MTAxIDguODIwNDZDMjIuMDEzNyA4LjgyMDQ2IDI0IDEwLjcxODYgMjQgMTMuMDI0NEMyNCAxNS4zMzAyIDIyLjAxMzcgMTcuMjI4NCAxOS42MTAxIDE3LjIyODRDMTkuMjg3NCAxNy4yMjg0IDE5LjAyNTIgMTYuOTgwNSAxOS4wMjUyIDE2LjY2NjRDMTkuMDI1MiAxNi4zNTI0IDE5LjI4NzQgMTYuMTA0NSAxOS42MTAxIDE2LjEwNDVDMjEuNDI4MyAxNi4xMDQ1IDIyLjgzMDMgMTQuNzU4NCAyMi44MzAzIDEzLjA4MTNDMjIuODMwMyAxMS4zNDczIDIxLjM2ODkgMTAuMDAxMyAxOS42MTAxIDEwLjAwMTNDMTkuMjYxOSAxMC4wMDEzIDE4Ljg1MjMgMTAuMTEyNyAxOC40OTU2IDEwLjIyNjVDMTguMTc2MSAxMC4zMjg1IDE3Ljc0NSAxMC4wOTg5IDE3LjY1NzggOS43Mjg0QzE3LjEyNTQgNy40NjY2NSAxNC44Mjk2IDUuMTY0MiAxMiA1LjE2NDJDMTAuMTcxOCA1LjE2NDIgOC40MDM2MyA2LjAxMTA1IDcuMzQzNDggNy40NzY3N0w3LjMzODE0IDcuNDg0MTVDNy4xNTcyMiA3LjY1NzMzIDYuOTYxNDEgNy43ODYzOSA2LjY5ODE1IDcuNzIzOUM2LjQwMTk0IDcuNjY3MjMgNi4wNDk0IDcuNjExMTkgNS42OTc5MiA3LjYxMTE5QzMuMjI2MjggNy42MTExOSAxLjIyOTIgOS41MjU3NiAxLjIyOTIgMTEuODg2M0MxLjIyOTIgMTQuMjQ2OCAzLjIyNjI4IDE2LjE2MTQgNS42OTc5MiAxNi4xNjE0QzYuMDIwNjEgMTYuMTYxNCA2LjI4Mjc3IDE2LjQwOTMgNi4yODI3NyAxNi43MjM0QzYuMjgyNzcgMTcuMDM3NCA2LjAyMDYxIDE3LjI4NTMgNS42OTc5MiAxNy4yODUzQzIuNTgwMzMgMTcuMjg1MyAwLjA2MDAxMDIgMTQuODczNyAwIDExLjgyOTRaTTEyLjcwMzcgMTEuMjUwNFYxOC4wMjkzTDE0LjUyMiAxNi4yODg5QzE0LjY0ODUgMTYuMTY3OCAxNC43OTQxIDE2LjEwNDQgMTQuOTQyOSAxNi4xMDQ0QzE1LjA5MTYgMTYuMTA0NCAxNS4yMzcyIDE2LjE2NzggMTUuMzYzNyAxNi4yODg5QzE1LjQ5MDEgMTYuNDA5OSAxNS41NTc0IDE2LjU1MDMgMTUuNTU3NCAxNi42OTQ4QzE1LjU1NzQgMTYuODM5MyAxNS40OTAxIDE2Ljk3OTYgMTUuMzYzNyAxNy4xMDA2TDEyLjUxMDggMTkuODMxM0wxMi41MSAxOS44MzIxTDEyLjUwODUgMTkuODMzNUMxMi4zODQ2IDE5Ljk1MjEgMTIuMjM1NSAyMC4wMTY2IDEyLjA2MDQgMjAuMDE2NkMxMS44ODggMjAuMDE2NiAxMS43MzI0IDE5Ljk1MDQgMTEuNjEwMyAxOS44MzM0TDguNzU1MDkgMTcuMTAwNkM4LjYyODY3IDE2Ljk3OTYgOC41NjEzNyAxNi44MzkzIDguNTYxMzcgMTYuNjk0OEM4LjU2MTM3IDE2LjU1MDMgOC42Mjg2NyAxNi40MDk5IDguNzU1MSAxNi4yODg5QzguODgxNjIgMTYuMTY3OCA5LjAyNzI2IDE2LjEwNDQgOS4xNzU5OCAxNi4xMDQ0QzkuMzI0NjkgMTYuMTA0NCA5LjQ3MDM0IDE2LjE2NzggOS41OTY4NiAxNi4yODg5TDExLjQxNTEgMTguMDI5M1YxMS4yNjA0QzExLjQxNTEgMTAuOTQ2MyAxMS42NzczIDEwLjY5ODQgMTIgMTAuNjk4NEMxMi4zMjUgMTAuNjk4NCAxMi41NzY3IDEwLjk0NjQgMTIuNjk5OSAxMS4yNDEyTDEyLjcwMzcgMTEuMjUwNFpcIixcbiAgICBmaWxsOiBcImN1cnJlbnRjb2xvclwiXG4gIH1cbikgfSksIHl6ID0gKCkgPT4gLyogQF9fUFVSRV9fICovIGUxKFwic3ZnXCIsIHsgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiwgdmlld0JveDogXCIwIDAgMjQgMjRcIiwgZmlsbDogXCJub25lXCIsIGNoaWxkcmVuOiBbXG4gIC8qIEBfX1BVUkVfXyAqLyBjKFxuICAgIFwicGF0aFwiLFxuICAgIHtcbiAgICAgIGQ6IFwiTTE0LjkgMTUuOUMxNC43IDE1LjkgMTQuNSAxNiAxNC4zIDE2LjJMMTMgMTcuNFYxMS4yQzEyLjggMTAuOCAxMi41IDEwLjUgMTIuMSAxMC41QzExLjYgMTAuNSAxMS4zIDEwLjkgMTEuMyAxMS4zVjE3LjNMMTAgMTZDOS44IDE1LjggOS42IDE1LjcgOS40IDE1LjdDOS4yIDE1LjcgOSAxNS44IDguOCAxNkM4LjYgMTYuMiA4LjUgMTYuNCA4LjUgMTYuNkM4LjUgMTYuOCA4LjYgMTcgOC44IDE3LjJMMTEuNiAxOS45QzExLjggMjAuMSAxMiAyMC4yIDEyLjIgMjAuMkMxMi40IDIwLjIgMTIuNyAyMC4xIDEyLjggMTkuOUwxNS42IDE3LjJDMTUuOCAxNyAxNS45IDE2LjggMTUuOSAxNi42QzE1LjkgMTYuNCAxNS44IDE2LjIgMTUuNiAxNkMxNS4zIDE1LjkgMTUuMSAxNS45IDE0LjkgMTUuOVpcIixcbiAgICAgIGZpbGw6IFwiY3VycmVudGNvbG9yXCJcbiAgICB9XG4gICksXG4gIC8qIEBfX1BVUkVfXyAqLyBjKFxuICAgIFwicGF0aFwiLFxuICAgIHtcbiAgICAgIGQ6IFwiTTE5LjUgOC43QzE5LjMgOC43IDE5IDguNyAxOC44IDguOEMxNy45IDUuOSAxNS4yIDQgMTIgNEM5LjkgNCA3LjkgNC45IDYuNiA2LjRDNi4zIDYuNCA2IDYuNCA1LjggNi40QzIuNiA2LjQgMCA4LjkgMCAxMkMwLjEgMTUuMSAyLjYgMTcuNiA1LjggMTcuNkM2LjMgMTcuNiA2LjYgMTcuMiA2LjYgMTYuOEM2LjYgMTYuMyA2LjIgMTYgNS44IDE2QzMuNSAxNiAxLjcgMTQuMiAxLjcgMTIuMUMxLjcgOS45IDMuNSA4LjIgNS44IDguMkM2LjEgOC4yIDYuNSA4LjMgNi43IDguM0M2LjggOC4zIDYuOCA4LjMgNi45IDguM0M3LjIgOC4zIDcuNCA4LjEgNy42IDcuOUM4LjYgNi42IDEwLjIgNS44IDExLjkgNS44QzE0LjYgNS44IDE2LjcgOCAxNy4yIDEwQzE3LjMgMTAuNCAxNy43IDEwLjcgMTguMSAxMC43QzE4LjIgMTAuNyAxOC4zIDEwLjcgMTguMyAxMC43QzE4LjYgMTAuNiAxOSAxMC41IDE5LjMgMTAuNUMyMC45IDEwLjUgMjIuMiAxMS43IDIyLjIgMTMuMkMyMi4yIDE0LjcgMjAuOSAxNS45IDE5LjMgMTUuOUMxOC44IDE1LjkgMTguNSAxNi4zIDE4LjUgMTYuN0MxOC41IDE3LjIgMTguOSAxNy41IDE5LjMgMTcuNUMyMS44IDE3LjUgMjMuOSAxNS41IDIzLjkgMTMuMUMyMy45IDEwLjcgMjIgOC43IDE5LjUgOC43WlwiLFxuICAgICAgZmlsbDogXCJjdXJyZW50Y29sb3JcIlxuICAgIH1cbiAgKVxuXSB9KSwgd3ogPSAoKSA9PiAvKiBAX19QVVJFX18gKi8gZTEoXCJzdmdcIiwgeyB2aWV3Qm94OiBcIjAgMCAyNCAyNFwiLCBmaWxsOiBcIm5vbmVcIiwgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiwgY2hpbGRyZW46IFtcbiAgLyogQF9fUFVSRV9fICovIGMoXG4gICAgXCJjaXJjbGVcIixcbiAgICB7XG4gICAgICBjeDogXCIxMlwiLFxuICAgICAgY3k6IFwiMTJcIixcbiAgICAgIHI6IFwiMTEuM1wiLFxuICAgICAgc3Ryb2tlOiBcImN1cnJlbnRDb2xvclwiLFxuICAgICAgc3Ryb2tlV2lkdGg6IFwiMS40XCJcbiAgICB9XG4gICksXG4gIC8qIEBfX1BVUkVfXyAqLyBjKFxuICAgIFwicGF0aFwiLFxuICAgIHtcbiAgICAgIGQ6IFwiTTE1LjU4MiA5LjI1MzczQzE1LjgxMjkgOS4wMjI5MiAxNS44MTI5IDguNjQ4NzEgMTUuNTgyIDguNDE3OTFDMTUuMzUxMiA4LjE4NzEgMTQuOTc3IDguMTg3MSAxNC43NDYyIDguNDE3OTFMMTIgMTEuMTY0MUw5LjI1MzggOC40MTc5MUM5LjAyMyA4LjE4NzEgOC42NDg3OSA4LjE4NzEgOC40MTc5OSA4LjQxNzkxQzguMTg3MTggOC42NDg3MSA4LjE4NzE4IDkuMDIyOTIgOC40MTc5OSA5LjI1MzcyTDExLjE2NDIgMTEuOTk5OUw4LjQxNzkxIDE0Ljc0NjJDOC4xODcxIDE0Ljk3NyA4LjE4NzEgMTUuMzUxMiA4LjQxNzkxIDE1LjU4MkM4LjY0ODcxIDE1LjgxMjkgOS4wMjI5MiAxNS44MTI5IDkuMjUzNzIgMTUuNTgyTDEyIDEyLjgzNThMMTQuNzQ2MyAxNS41ODJDMTQuOTc3MSAxNS44MTI5IDE1LjM1MTMgMTUuODEyOSAxNS41ODIxIDE1LjU4MkMxNS44MTI5IDE1LjM1MTIgMTUuODEyOSAxNC45NzcgMTUuNTgyMSAxNC43NDYyTDEyLjgzNTggMTEuOTk5OUwxNS41ODIgOS4yNTM3M1pcIixcbiAgICAgIGZpbGw6IFwiY3VycmVudENvbG9yXCJcbiAgICB9XG4gIClcbl0gfSksIHh6ID0gKCkgPT4gLyogQF9fUFVSRV9fICovIGUxKFwic3ZnXCIsIHsgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiwgdmlld0JveDogXCIwIDAgMjQgMjRcIiwgZmlsbDogXCJub25lXCIsIGNoaWxkcmVuOiBbXG4gIC8qIEBfX1BVUkVfXyAqLyBjKFwiZ1wiLCB7IGNsaXBQYXRoOiBcInVybCgjY2xpcDBfMjM0Nl8xMjk1NTYpXCIsIGNoaWxkcmVuOiAvKiBAX19QVVJFX18gKi8gYyhcbiAgICBcInBhdGhcIixcbiAgICB7XG4gICAgICBmaWxsUnVsZTogXCJldmVub2RkXCIsXG4gICAgICBjbGlwUnVsZTogXCJldmVub2RkXCIsXG4gICAgICBkOiBcIk0xMiAyNEMxOC42Mjc0IDI0IDI0IDE4LjYyNzQgMjQgMTJDMjQgNS4zNzI1OCAxOC42Mjc0IDAgMTIgMEM1LjM3MjU4IDAgMCA1LjM3MjU4IDAgMTJDMCAxOC42Mjc0IDUuMzcyNTggMjQgMTIgMjRaTTcuMjkyODkgNy4yOTI4OUM2LjkwMjM3IDcuNjgzNDIgNi45MDIzNyA4LjMxNjU4IDcuMjkyODkgOC43MDcxMUwxMC41ODU4IDEyTDcuMjkyODkgMTUuMjkyOUM2LjkwMjM3IDE1LjY4MzQgNi45MDIzNyAxNi4zMTY2IDcuMjkyODkgMTYuNzA3MUM3LjY4MzQyIDE3LjA5NzYgOC4zMTY1OCAxNy4wOTc2IDguNzA3MTEgMTYuNzA3MUwxMiAxMy40MTQyTDE1LjI5MjkgMTYuNzA3MUMxNS42ODM0IDE3LjA5NzYgMTYuMzE2NiAxNy4wOTc2IDE2LjcwNzEgMTYuNzA3MUMxNy4wOTc2IDE2LjMxNjYgMTcuMDk3NiAxNS42ODM0IDE2LjcwNzEgMTUuMjkyOUwxMy40MTQyIDEyTDE2LjcwNzEgOC43MDcxMUMxNy4wOTc2IDguMzE2NTggMTcuMDk3NiA3LjY4MzQyIDE2LjcwNzEgNy4yOTI4OUMxNi4zMTY2IDYuOTAyMzcgMTUuNjgzNCA2LjkwMjM3IDE1LjI5MjkgNy4yOTI4OUwxMiAxMC41ODU4TDguNzA3MTEgNy4yOTI4OUM4LjMxNjU4IDYuOTAyMzcgNy42ODM0MiA2LjkwMjM3IDcuMjkyODkgNy4yOTI4OVpcIixcbiAgICAgIGZpbGw6IFwiY3VycmVudENvbG9yXCJcbiAgICB9XG4gICkgfSksXG4gIC8qIEBfX1BVUkVfXyAqLyBjKFwiZGVmc1wiLCB7IGNoaWxkcmVuOiAvKiBAX19QVVJFX18gKi8gYyhcImNsaXBQYXRoXCIsIHsgaWQ6IFwiY2xpcDBfMjM0Nl8xMjk1NTZcIiwgY2hpbGRyZW46IC8qIEBfX1BVUkVfXyAqLyBjKFwicmVjdFwiLCB7IHdpZHRoOiBcIjI0XCIsIGhlaWdodDogXCIyNFwiLCBmaWxsOiBcIndoaXRlXCIgfSkgfSkgfSlcbl0gfSksIFd6ID0gKCkgPT4gLyogQF9fUFVSRV9fICovIGMoXCJzdmdcIiwgeyB2aWV3Qm94OiBcIjAgMCAyNCAyNFwiLCBmaWxsOiBcIm5vbmVcIiwgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiwgY2hpbGRyZW46IC8qIEBfX1BVUkVfXyAqLyBjKFxuICBcInBhdGhcIixcbiAge1xuICAgIGZpbGxSdWxlOiBcImV2ZW5vZGRcIixcbiAgICBjbGlwUnVsZTogXCJldmVub2RkXCIsXG4gICAgZDogXCJNMTcuNTM1MSAwTDE3LjU0OTcgMC4wMTQ4MzE1QzE3LjU3MjggMC4wMzgyODYyIDE3LjU5NTYgMC4wNTAxMDIyIDE3LjYyNDkgMC4wNjQ5ODE1TDE3LjYyNjMgMC4wNjU2NjE0QzE3LjY1NTQgMC4wODA0NTI5IDE3LjY5MDkgMC4wOTg0MzU0IDE3LjcyNiAwLjEzNDAzNEwyMy4zNjk2IDUuODU3MzZDMjMuMzk4IDUuODg2MTIgMjMuNDI5NCA1LjkxODAxIDIzLjQ1MzUgNS45NTA2NUMyMy40Nzc3IDUuOTgzMzQgMjMuNSA2LjAyMzc5IDIzLjUgNi4wNjk2VjIzLjQxMzhDMjMuNSAyMy43Mzg2IDIzLjI0MzMgMjQgMjIuOTIxMyAyNEg2LjA1Mzc4QzUuNzMxNzYgMjQgNS40NzUxIDIzLjczODYgNS40NzUxIDIzLjQxMzhWMTguMjc4MUgxLjUwNTI1QzAuOTUyOTYzIDE4LjI3ODEgMC41MDUyNDggMTcuODMwNCAwLjUwNTI0OCAxNy4yNzgxTDAuNSA2QzAuNSA1LjQ0NzcyIDAuOTQ3NzE1IDUgMS41IDVINS40NzUxVjAuNTg2MjA3QzUuNDc1MSAwLjI2MTM2NSA1LjczMTc2IDAgNi4wNTM3OCAwSDE3LjUzNTFaTTYuNjkxMjkgMjIuNzA4NFYxOC4yNzgxSDEyLjQ2MDhIMTcuMzM3NUMxNy42NTk1IDE4LjI3ODEgMTcuOTE2MyAxOC4wMTY4IDE3LjkxNjMgMTcuNjkxOUMxNy45MTYzIDE3LjM2NzEgMTcuNjU5NSAxNy4xMDU3IDE3LjMzNzUgMTcuMTA1N0gxMi41VjEzLjk4NjlIMTcuMzM3NUMxNy42NTk2IDEzLjk4NjkgMTcuOTE2MyAxMy43MjU1IDE3LjkxNjMgMTMuNDAwN0MxNy45MTYzIDEzLjA3NTggMTcuNjU5NSAxMi44MTQ1IDE3LjMzNzUgMTIuODE0NUgxMi41VjkuNzU1MTdIMTQuNTE3QzE0LjgzOSA5Ljc1NTE3IDE1LjA5NTcgOS40OTM4MiAxNS4wOTU3IDkuMTY4OThDMTUuMDk1NyA4Ljg0NDEzIDE0LjgzOSA4LjU4Mjc4IDE0LjUxNyA4LjU4Mjc4SDEyLjVWNkMxMi41IDUuNDQ3NzIgMTIuMDUyMyA1IDExLjUgNUg2LjY5MTI5VjEuMTcyNDJIMTYuNzU5MlY2LjI0ODRDMTYuNzU5MiA2LjU3MzI1IDE3LjAxNTkgNi44MzQ2MiAxNy4zMzggNi44MzQ2MkgyMi4zNDI1VjIyLjcwODRINi42OTEyOVpNMTcuOTE2NyAyLjAxODg3VjUuNjYyMTlIMjEuNTA5MkwxNy45MTY3IDIuMDE4ODdaTTMuNzc4MDMgOS4zMDMwN0M0LjAzMTg3IDkuMDQ5MjMgNC40NDM0MiA5LjA0OTIzIDQuNjk3MjcgOS4zMDMwN0w2LjQ3NDk4IDExLjA4MDhMOC4yNTI2OSA5LjMwMzA4QzguNTA2NTMgOS4wNDkyNCA4LjkxODA4IDkuMDQ5MjQgOS4xNzE5MiA5LjMwMzA4QzkuNDI1NzcgOS41NTY5MiA5LjQyNTc3IDkuOTY4NDggOS4xNzE5MiAxMC4yMjIzTDcuMzk0MjIgMTJMOS4xNzE4OCAxMy43Nzc3QzkuNDI1NzIgMTQuMDMxNSA5LjQyNTcyIDE0LjQ0MzEgOS4xNzE4OCAxNC42OTY5QzguOTE4MDMgMTQuOTUwOCA4LjUwNjQ4IDE0Ljk1MDggOC4yNTI2NCAxNC42OTY5TDYuNDc0OTggMTIuOTE5M0w0LjY5NzMyIDE0LjY5NjlDNC40NDM0NyAxNC45NTA4IDQuMDMxOTIgMTQuOTUwOCAzLjc3ODA4IDE0LjY5NjlDMy41MjQyNCAxNC40NDMxIDMuNTI0MjQgMTQuMDMxNSAzLjc3ODA4IDEzLjc3NzdMNS41NTU3NCAxMkwzLjc3ODAzIDEwLjIyMjNDMy41MjQxOSA5Ljk2ODQ2IDMuNTI0MTkgOS41NTY5MSAzLjc3ODAzIDkuMzAzMDdaXCIsXG4gICAgZmlsbDogXCJjdXJyZW50Q29sb3JcIlxuICB9XG4pIH0pLCBSeiA9ICgpID0+IC8qIEBfX1BVUkVfXyAqLyBlMShcInN2Z1wiLCB7IHZpZXdCb3g6IFwiMCAwIDI0IDI0XCIsIGZpbGw6IFwibm9uZVwiLCB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLCBjaGlsZHJlbjogW1xuICAvKiBAX19QVVJFX18gKi8gYyhcbiAgICBcInBhdGhcIixcbiAgICB7XG4gICAgICBkOiBcIk0zLjc4MzA3IDIuMTM5ODNIMTJWMi45NjE1MkgzLjc4MzA3QzMuMzI5MjYgMi45NjE1MiAyLjk2MTM4IDMuMzI5NCAyLjk2MTM4IDMuNzgzMlYyMC4yMTY5QzIuOTYxMzggMjAuNjcwNyAzLjMyOTI2IDIxLjAzODYgMy43ODMwNyAyMS4wMzg2SDIwLjIxNjlDMjAuNjcwNyAyMS4wMzg2IDIxLjAzODYgMjAuNjcwNyAyMS4wMzg2IDIwLjIxNjlWMTIuMDAwMUgyMS44NjAzVjIwLjIxNjlDMjEuODYwMyAyMS4xMjQ1IDIxLjEyNDUgMjEuODYwMyAyMC4yMTY5IDIxLjg2MDNIMy43ODMwN0MyLjg3NTQ2IDIxLjg2MDMgMi4xMzk2OSAyMS4xMjQ1IDIuMTM5NjkgMjAuMjE2OVYzLjc4MzJDMi4xMzk2OSAyLjg3NTU5IDIuODc1NDYgMi4xMzk4MyAzLjc4MzA3IDIuMTM5ODNaXCIsXG4gICAgICBmaWxsOiBcImN1cnJlbnRDb2xvclwiXG4gICAgfVxuICApLFxuICAvKiBAX19QVVJFX18gKi8gYyhcbiAgICBcInBhdGhcIixcbiAgICB7XG4gICAgICBkOiBcIk0yMC43MzUgMy41ODIyOEw5LjMzODQ5IDE0Ljk3ODZDOS4yMDM0NSAxNS4xMTM3IDguOTU3MDcgMTUuMDgzNiA4LjgxODczIDE0Ljk0NTVDOC42ODA0IDE0LjgwNzQgOC42Nzc3NyAxNC41ODg5IDguODEyODEgMTQuNDUzOUwyMC4yMDk0IDMuMDU3NUwxNC44MzY2IDQuMDYyNTFDMTQuNjE4NiA0LjExNDY5IDE0LjQyNTYgMy45NzU5OCAxNC4zOTU5IDMuNzg0NDdDMTQuMzM4NiAzLjU2NTM1IDE0LjQ3MyAzLjM3NTY4IDE0LjY2NCAzLjM1MDUxTDIxLjE4MjMgMi4xMzk4M0wyMS4yMzcgMi4xNDA0M0MyMS4yOTE3IDIuMTQxMDQgMjEuMzQ2NCAyLjE0MTY1IDIxLjM3NCAyLjE2OTI3TDIxLjQwMTcgMi4xOTY4OUMyMS40NTY0IDIuMTk3NSAyMS40ODQgMi4yMjUxMiAyMS41MTE3IDIuMjUyNzNDMjEuNTI1NSAyLjI2NjU0IDIxLjUzMjYgMi4yODcxMiAyMS41Mzk3IDIuMzA3NjhDMjEuNTQ2OCAyLjMyODI0IDIxLjU1MzkgMi4zNDg4IDIxLjU2NzcgMi4zNjI2MUwyMS41OTU0IDIuMzkwMjNDMjEuNTk1NyAyLjQxNzU0IDIxLjYwMjggMi40MzgxMSAyMS42MDk5IDIuNDU4NjdDMjEuNjE2OSAyLjQ3OTIzIDIxLjYyNCAyLjQ5OTggMjEuNjI0NCAyLjUyNzExTDIxLjYyNSAyLjU4MTc1TDIwLjQxODkgOS4wOTU0NUMyMC40MTk1IDkuMTUwMDggMjAuMzkzMiA5LjIzMTcyIDIwLjMzOTIgOS4yODU3NEMyMC4yNTgxIDkuMzY2NzYgMjAuMTQ5NCA5LjQyMDE2IDIwLjAxMjQgOS4zOTEzMkMxOS44NDc3IDkuMzM0ODYgMTkuNzA4NyA5LjE0MjEzIDE5LjczMzggOC45NTEyNEwyMC43MzUgMy41ODIyOFpcIixcbiAgICAgIGZpbGw6IFwiY3VycmVudENvbG9yXCJcbiAgICB9XG4gICksXG4gIC8qIEBfX1BVUkVfXyAqLyBjKFxuICAgIFwicGF0aFwiLFxuICAgIHtcbiAgICAgIGZpbGxSdWxlOiBcImV2ZW5vZGRcIixcbiAgICAgIGNsaXBSdWxlOiBcImV2ZW5vZGRcIixcbiAgICAgIGQ6IFwiTTEyLjEzOTcgMi4wMDAxNFYzLjEwMTJIMy43ODMwN0MzLjQwNjQxIDMuMTAxMiAzLjEwMTA3IDMuNDA2NTQgMy4xMDEwNyAzLjc4MzJWMjAuMjE2OUMzLjEwMTA3IDIwLjU5MzYgMy40MDY0MSAyMC44OTg5IDMuNzgzMDcgMjAuODk4OUgyMC4yMTY5QzIwLjU5MzYgMjAuODk4OSAyMC44OTg5IDIwLjU5MzYgMjAuODk4OSAyMC4yMTY5VjExLjg2MDRIMjJWMjAuMjE2OUMyMiAyMS4yMDE3IDIxLjIwMTcgMjIgMjAuMjE2OSAyMkgzLjc4MzA3QzIuNzk4MzEgMjIgMiAyMS4yMDE3IDIgMjAuMjE2OVYzLjc4MzJDMiAyLjc5ODQ0IDIuNzk4MzEgMi4wMDAxNCAzLjc4MzA3IDIuMDAwMTRIMTIuMTM5N1pNMjEuNjI0NCAyLjUyNzExTDIxLjYyNSAyLjU4MTc1TDIwLjQxODkgOS4wOTU0NUMyMC40MTk1IDkuMTUwMDggMjAuMzkzMiA5LjIzMTcyIDIwLjMzOTIgOS4yODU3NEMyMC4yNTgxIDkuMzY2NzYgMjAuMTQ5NCA5LjQyMDE2IDIwLjAxMjQgOS4zOTEzMkMxOS44NDc3IDkuMzM0ODYgMTkuNzA4NyA5LjE0MjEzIDE5LjczMzggOC45NTEyNEwyMC43MzUgMy41ODIyOEw5LjMzODQ5IDE0Ljk3ODZDOS4yMDM0NSAxNS4xMTM3IDguOTU3MDcgMTUuMDgzNiA4LjgxODczIDE0Ljk0NTVDOC42ODA0IDE0LjgwNzQgOC42Nzc3NyAxNC41ODg5IDguODEyODEgMTQuNDUzOUwyMC4yMDk0IDMuMDU3NUwxNC44MzY2IDQuMDYyNTFDMTQuNjE4NiA0LjExNDY5IDE0LjQyNTYgMy45NzU5OCAxNC4zOTU5IDMuNzg0NDdDMTQuMzM4NiAzLjU2NTM1IDE0LjQ3MyAzLjM3NTY4IDE0LjY2NCAzLjM1MDUxTDIxLjE4MjMgMi4xMzk4M0wyMS4yMzcgMi4xNDA0M0MyMS4yOTE3IDIuMTQxMDQgMjEuMzQ2NCAyLjE0MTY1IDIxLjM3NCAyLjE2OTI3TDIxLjQwMTcgMi4xOTY4OUMyMS40NTY0IDIuMTk3NSAyMS40ODQgMi4yMjUxMiAyMS41MTE3IDIuMjUyNzNDMjEuNTI1NSAyLjI2NjU0IDIxLjUzMjYgMi4yODcxMiAyMS41Mzk3IDIuMzA3NjhDMjEuNTQ2OCAyLjMyODI0IDIxLjU1MzkgMi4zNDg4IDIxLjU2NzcgMi4zNjI2MUwyMS41OTU0IDIuMzkwMjNDMjEuNTk1NyAyLjQxNzU0IDIxLjYwMjggMi40MzgxMSAyMS42MDk5IDIuNDU4NjdDMjEuNjE2OSAyLjQ3OTIzIDIxLjYyNCAyLjQ5OTggMjEuNjI0NCAyLjUyNzExWk0yMS40Njc0IDIuMDY1MjZDMjEuNTQgMi4wODMzOCAyMS41ODQxIDIuMTI3NTQgMjEuNjA3OCAyLjE1MTI0TDIxLjYxMDQgMi4xNTM4N0MyMS42NDg1IDIuMTkxOTQgMjEuNjY1MSAyLjI0MTk2IDIxLjY3MDcgMi4yNTg4NUMyMS42NzExIDIuMjYwMTcgMjEuNjcxNSAyLjI2MTI4IDIxLjY3MTggMi4yNjIxN0wyMS42NzU2IDIuMjcyODlMMjEuNzM0NCAyLjMzMTZMMjEuNzM1MSAyLjM4ODU1QzIxLjczNTEgMi4zOTA5MyAyMS43MzUxIDIuMzkzMyAyMS43NDE5IDIuNDEzMTlMMjEuNzQyOCAyLjQxNTY3QzIxLjc1MDEgMi40MzY4IDIxLjc2MzQgMi40NzUzNCAyMS43NjQgMi41MjU0M0wyMS43NjQ4IDIuNTkzNzVMMjAuNTU4MyA5LjEwOTQ5QzIwLjU1NSA5LjE5NjU3IDIwLjUxNTkgOS4zMDY1OCAyMC40Mzc5IDkuMzg0NTFDMjAuMzMzMiA5LjQ4OTI0IDIwLjE3ODggOS41NjkwOSAxOS45ODM3IDkuNTI4MDFMMTkuOTc1MiA5LjUyNjI0TDE5Ljk2NzEgOS41MjM0NkMxOS44NTE2IDkuNDgzODYgMTkuNzUyMSA5LjM5OTggMTkuNjg1NCA5LjI5ODY0QzE5LjYxODMgOS4xOTY5NSAxOS41Nzc2IDkuMDY3NzggMTkuNTk1MyA4LjkzMzA4TDE5LjU5NjMgOC45MjU1OUwyMC41MTUxIDMuOTk5NzhMOS40MzcyNyAxNS4wNzc0QzkuMzM0NTMgMTUuMTgwMiA5LjE5NTQzIDE1LjIxNDIgOS4wNjgzNyAxNS4yMDM3QzguOTQxNjcgMTUuMTkzMyA4LjgxMzk4IDE1LjEzODIgOC43MjAwNCAxNS4wNDQ0QzguNTI5MjUgMTQuODUzOSA4LjUyMjI2IDE0LjU0NjkgOC43MTQwNCAxNC4zNTUxTDE5Ljc5MTUgMy4yNzc3N0wxNC44NjU1IDQuMTk5MjJDMTQuNTc0NiA0LjI2Njc4IDE0LjMwNSA0LjA4MjY5IDE0LjI1OSAzLjgxM0MxNC4xODY3IDMuNTIxNzIgMTQuMzY2NiAzLjI1MTE2IDE0LjY0MTggMy4yMTI1NUwyMS4xNzAyIDJMMjEuMjQyMiAyLjAwMDc5QzIxLjI2NjkgMi4wMDEwNiAyMS4zMDI5IDIuMDAxNDQgMjEuMzM2OSAyLjAwNjY2QzIxLjM2OTYgMi4wMTE2OCAyMS40MjMgMi4wMjQxIDIxLjQ2NzQgMi4wNjUyNlpNMy43ODMwNyAyLjEzOTgzQzIuODc1NDYgMi4xMzk4MyAyLjEzOTY5IDIuODc1NTkgMi4xMzk2OSAzLjc4MzJWMjAuMjE2OUMyLjEzOTY5IDIxLjEyNDUgMi44NzU0NiAyMS44NjAzIDMuNzgzMDcgMjEuODYwM0gyMC4yMTY5QzIxLjEyNDUgMjEuODYwMyAyMS44NjAzIDIxLjEyNDUgMjEuODYwMyAyMC4yMTY5VjEyLjAwMDFIMjEuMDM4NlYyMC4yMTY5QzIxLjAzODYgMjAuNjcwNyAyMC42NzA3IDIxLjAzODYgMjAuMjE2OSAyMS4wMzg2SDMuNzgzMDdDMy4zMjkyNiAyMS4wMzg2IDIuOTYxMzggMjAuNjcwNyAyLjk2MTM4IDIwLjIxNjlWMy43ODMyQzIuOTYxMzggMy4zMjk0IDMuMzI5MjYgMi45NjE1MiAzLjc4MzA3IDIuOTYxNTJIMTJWMi4xMzk4M0gzLjc4MzA3WlwiLFxuICAgICAgZmlsbDogXCJjdXJyZW50Q29sb3JcIlxuICAgIH1cbiAgKVxuXSB9KSwgQnogPSAoKSA9PiAvKiBAX19QVVJFX18gKi8gYyhcInN2Z1wiLCB7IHZpZXdCb3g6IFwiMCAwIDI0IDI0XCIsIGZpbGw6IFwibm9uZVwiLCB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLCBjaGlsZHJlbjogLyogQF9fUFVSRV9fICovIGMoXG4gIFwicGF0aFwiLFxuICB7XG4gICAgZmlsbFJ1bGU6IFwiZXZlbm9kZFwiLFxuICAgIGNsaXBSdWxlOiBcImV2ZW5vZGRcIixcbiAgICBkOiBcIk0yNCA4LjM3NTY5QzI0IDguMjM5NzEgMjMuOTM2OCA4LjA0NDM0IDIzLjc1MjYgNy45MTIzNEMyMy42MDI4IDcuNzY1NzEgMjMuMzcwMSA3Ljc3MDAxIDIzLjIyNDMgNy44NDE2TDE5LjQzMDkgOS4xNzYzMlY2LjA1MTcxQzE5LjQzMDkgNS43MjQxMSAxOS4xNzc4IDUuNDU0NTQgMTguODUzNiA1LjQ1NDU0SDAuNTc3MzQ1QzAuMjUzMTczIDUuNDU0NTQgMCA1LjcyNDExIDAgNi4wNTE3MVYxNy45NDgzQzAgMTguMjc1OSAwLjI1MzE3MyAxOC41NDU1IDAuNTc3MzQ1IDE4LjU0NTVIMTguODUzNkMxOS4xNzc4IDE4LjU0NTUgMTkuNDMwOSAxOC4yNzU5IDE5LjQzMDkgMTcuOTQ4M1YxNC44MjM3TDIzLjI0NjMgMTYuMTY2MUMyMy40MzExIDE2LjE2NjEgMjMuNjIwNSAxNi4xNzAyIDIzLjc1OTkgMTYuMDI1QzIzLjg3MjggMTUuOTA3NCAyNCAxNS43MTc3IDI0IDE1LjUxMzZWOC4zNzU2OVpNMjIuNzkyMiA5LjIzNTFWMTQuNzA5NkwxOS4zNzc4IDEzLjUwNjhWMTAuNDM3OUwyMi43OTIyIDkuMjM1MVpNMS4xMDE1NCAxNy4yOTU4SDE4LjIyMzFWNi41OTM1NUgxLjEwMTU0VjE3LjI5NThaXCIsXG4gICAgZmlsbDogXCJjdXJyZW50Q29sb3JcIlxuICB9XG4pIH0pLCBTeiA9ICgpID0+IC8qIEBfX1BVUkVfXyAqLyBjKFwic3ZnXCIsIHsgdmlld0JveDogXCIwIDAgMjQgMjRcIiwgZmlsbDogXCJub25lXCIsIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsIGNoaWxkcmVuOiAvKiBAX19QVVJFX18gKi8gYyhcbiAgXCJwYXRoXCIsXG4gIHtcbiAgICBmaWxsUnVsZTogXCJldmVub2RkXCIsXG4gICAgY2xpcFJ1bGU6IFwiZXZlbm9kZFwiLFxuICAgIGQ6IFwiTTE5LjQ1NzQgMTkuNDQ1NEMyMC42ODIyIDE5Ljg2ODMgMjEuOTEwNCAyMC4zOTIyIDIzLjE2NTggMjAuNzE2NUMyMy4zMDU1IDIwLjc1MjYgMjMuNjIwNiAyMC43MDA0IDIzLjc4MDIgMjAuNTM4NEMyMy45MDUyIDIwLjQxMTYgMjQgMjAuMTgxOSAyNCAyMC4wMTM4VjEzLjEyMzRDMjQgMTIuOTE5MiAyMy45OTA2IDEyLjcxMDggMjMuNzk5NSAxMi41NzQzQzIzLjYxOTMgMTIuNDA2NSAyMy4zNzUgMTIuNDU2IDIzLjE5MDcgMTIuNTEyOUMyMy4wOTY1IDEyLjU0MTkgMjIuMTU5IDEyLjg2MzMgMjEuMjQ2OSAxMy4xNzY5QzIwLjc5MDQgMTMuMzMzOCAyMC4zMzk3IDEzLjQ4ODkgMjAuMDAzMiAxMy42MDQ4TDE5LjUxMDMgMTMuNzc0NlYxMC44NDc1QzE5LjUxMDMgMTAuNDg5IDE5LjIyNiAxMC4xOTY5IDE4Ljg2NjcgMTAuMTk2OUgxNy4yODc4QzE4LjM3NDYgOS4yNDE2MiAxOS4wMzQ5IDcuODI2ODIgMTkuMDM0OSA2LjIzNzU0QzE5LjAzNDkgMy4zMDQ4IDE2LjY4OTUgMC45NzY5MjkgMTMuODQ4NyAwLjk3NjkyOUMxMi4yMzA3IDAuOTc2OTI5IDEwLjc5MDEgMS43MzYgOS44MDgxMSAzLjAwNjc5QzguODI0NCAxLjczNTU1IDcuMzMxODIgMC45NzY5MjkgNS43MTQzNiAwLjk3NjkyOUMyLjgxODUgMC45NzY5MjkgMC41MjgyMDUgMy4zNjA3NCAwLjUyODIwNSA2LjIzNzU0QzAuNTI4MjA1IDcuODM3MzYgMS4xOTY4OCA5LjIxMjYzIDIuMjg5NzcgMTAuMTk2OUgwLjY0MzU5MUMwLjI4NDIxNiAxMC4xOTY5IDAgMTAuNDg5IDAgMTAuODQ3NVYyMi4zNzI0QzAgMjIuNzMxIDAuMjg0MjIxIDIzLjAyMzEgMC42NDM1OTEgMjMuMDIzMUgxOC44MTM4QzE5LjE3MzIgMjMuMDIzMSAxOS40NTc0IDIyLjczMSAxOS40NTc0IDIyLjM3MjRWMTkuNDQ1NFpNMS42NDc1OCA2LjIzNzU1QzEuNjQ3NTggMy45ODYxNyAzLjQ0MzQ4IDIuMTEwMDIgNS43MTQ3NiAyLjExMDAyQzcuMjQ2NTUgMi4xMTAwMiA4LjQwMjI2IDIuOTc5OTkgOS4zMjgxMyA0LjQxNUM5LjQwMDM4IDQuNTI3IDkuNDc5NjEgNC42MjU1IDkuNTM2MjggNC42ODMwM0g5LjgwODE1SDEwLjA5ODhDMTAuMTYwNyA0LjYxNDM4IDEwLjIzNiA0LjUyNTggMTAuMzEwMSA0LjQxNUMxMS4xOTY5IDMuMDg4ODIgMTIuMzcwMSAyLjExMDAyIDEzLjk1NDcgMi4xMTAwMkMxNi4xNzMyIDIuMTEwMDIgMTguMDIxOSAzLjkzMjU2IDE4LjAyMTkgNi4yMzc1NUMxOC4wMjE5IDguNTQyNTMgMTYuMjI2IDEwLjM2NTEgMTMuOTU0NyAxMC4zNjUxQzEyLjQyMyAxMC4zNjUxIDExLjM4NDggOS4zNTY3IDEwLjMxMDEgOC4wNjAwOUMxMC4yMjUxIDcuOTU3NDcgMTAuMTU0NiA3Ljg0ODY4IDEwLjA5ODggNy43OTIwN0g5LjgzNDc0SDkuNTcwNjRDOS40ODkyMiA3Ljg3NDcgOS40NDQ0MSA3Ljk1NzQ3IDkuMzU5MzYgOC4wNjAwOUM4LjI4NDcxIDkuMzU2NyA3LjI5OTM3IDEwLjM2NTEgNS43MTQ3NiAxMC4zNjUxQzMuNDQzNDggMTAuMzY1MSAxLjY0NzU4IDguNDg4OTIgMS42NDc1OCA2LjIzNzU1Wk0xLjE3MjIgMjEuODlIMTguMzkxN1YxMS4zM0gxLjE3MjJWMjEuODlaTTIyLjkzNDIgMTkuMzcwNkwxOS4zNDI0IDE4LjEzNzdWMTUuMDI4NkwyMi45MzQyIDEzLjc5NThWMTkuMzcwNlpNOS43ODQyMiA5LjI3MTk4QzkuNTA3NzcgOS42Nzk2OSA5LjE5MTg4IDEwLjAwOTkgOC44MzYyOCAxMC4yNjE3SDEwLjc0NjVDMTAuMzg1OCA5Ljk3MjMgMTAuMDY1IDkuNjQyMzcgOS43ODQyMiA5LjI3MTk4WlwiLFxuICAgIGZpbGw6IFwiY3VycmVudENvbG9yXCJcbiAgfVxuKSB9KSwgRXogPSAoKSA9PiAvKiBAX19QVVJFX18gKi8gYyhcInN2Z1wiLCB7IHZpZXdCb3g6IFwiMCAwIDI0IDI0XCIsIGZpbGw6IFwibm9uZVwiLCB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLCBjaGlsZHJlbjogLyogQF9fUFVSRV9fICovIGMoXG4gIFwicGF0aFwiLFxuICB7XG4gICAgZDogXCJNOC4zMTY0MSAyMy45MzJDOC4zODUyNiAyNCA4LjUyMjk3IDI0IDguNjYwNjcgMjRDOC43Mjk1MyAyNCA4Ljg2NzIgMjQgOC45MzYwNiAyMy45MzJMMTUuNTQ1OSAyMC42Njg2QzE1Ljc1MjUgMjAuNTMyNiAxNS44OTAyIDIwLjMyODYgMTUuODkwMiAyMC4xMjQ2VjE3LjA2NTFMMjIuMzYyMyA3LjQ3ODc2QzIyLjQzMTEgNy4zNDI3OCAyMi41IDcuMjc0NzkgMjIuNSA3LjEzODgxVjAuNjExODk0QzIyLjUgMC4yNzE5NTEgMjIuMjI0NiAwIDIxLjg4MDQgMEgyLjExOTY5QzEuNzc1NDMgMCAxLjUgMC4yNzE5NTEgMS41IDAuNjExODk0VjcuMTM4ODFDMS41IDcuMjc0NzkgMS41Njg4NiA3LjQxMDc3IDEuNjM3NzEgNy40Nzg3Nkw4LjEwOTg2IDE3LjA2NTFWMjMuMzg4MUM4LjA0MTAxIDIzLjY2MDEgOC4xNzg3MSAyMy43OTYgOC4zMTY0MSAyMy45MzJaTTE0LjY1MDggMTkuNzg0N0w5LjM0OTIgMjIuNDM2M1YxNy42MDkxSDE0LjY1MDhWMTkuNzg0N1pNMi43MzkzNCAxLjI5MTc4SDIxLjE5MThWNy4wMDI4M0wxNC45MjYyIDE2LjMxNzNIOS4wMDQ5M0wyLjczOTM0IDcuMDAyODNWMS4yOTE3OFpcIixcbiAgICBmaWxsOiBcImN1cnJlbnRDb2xvclwiXG4gIH1cbikgfSksIGt6ID0gKCkgPT4gLyogQF9fUFVSRV9fICovIGMoXCJzdmdcIiwgeyB2aWV3Qm94OiBcIjAgMCAyNCAyNFwiLCBmaWxsOiBcIm5vbmVcIiwgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiwgY2hpbGRyZW46IC8qIEBfX1BVUkVfXyAqLyBjKFxuICBcInBhdGhcIixcbiAge1xuICAgIGQ6IFwiTTIzIDAuNlY3LjFDMjMgNy4yIDIyLjkgNy4zIDIyLjkgNy40TDE2LjQgMTdWMjAuMUMxNi40IDIwLjMgMTYuMyAyMC41IDE2LjEgMjAuN0w5LjUgMjRDOS40IDI0IDkuMiAyNCA5LjIgMjRDOS4xIDI0IDguOSAyNCA4LjkgMjMuOUM4LjggMjMuOCA4LjYgMjMuNiA4LjcgMjMuNFYxNy4xTDIuMSA3LjVDMi4xIDcuNCAyIDcuMyAyIDcuMVYwLjZDMiAwLjMgMi4zIDAgMi42IDBIMjIuNEMyMi43IDAgMjMgMC4zIDIzIDAuNlpcIixcbiAgICBmaWxsOiBcImN1cnJlbnRjb2xvclwiXG4gIH1cbikgfSksIE56ID0gKCkgPT4gLyogQF9fUFVSRV9fICovIGUxKFwic3ZnXCIsIHsgdmlld0JveDogXCIwIDAgMjQgMjRcIiwgZmlsbDogXCJub25lXCIsIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsIGNoaWxkcmVuOiBbXG4gIC8qIEBfX1BVUkVfXyAqLyBjKFxuICAgIFwicGF0aFwiLFxuICAgIHtcbiAgICAgIGZpbGxSdWxlOiBcImV2ZW5vZGRcIixcbiAgICAgIGNsaXBSdWxlOiBcImV2ZW5vZGRcIixcbiAgICAgIGQ6IFwiTTAuNjUyMTM2IDEyLjU1NzJIMi45NjMxNlYyMC40MTI4QzIuOTYzMTYgMjAuNzA1OSAzLjIwMDEzIDIwLjk0MDQgMy40OTY0MiAyMC45NDA0QzMuNzkyNyAyMC45NDA0IDQuMDI5NzQgMjAuNzA1OSA0LjAyOTc0IDIwLjQxMjhWMTIuNTU3Mkg2LjM0MDc3QzYuNjM3MDUgMTIuNTU3MiA2Ljg3NDA5IDEyLjMyMjcgNi44NzQwOSAxMi4wMjk2QzYuODc0MDkgMTEuNzM2NSA2LjYzNzA1IDExLjUwMiA2LjM0MDc3IDExLjUwMkg0LjAyOTc0VjMuNjQ2NDJDNC4wMjk3NCAzLjM1MzMgMy43OTI3IDMuMTE4ODEgMy40OTY0MiAzLjExODgxQzMuMjAwMTMgMy4xMTg4MSAyLjk2MzE2IDMuMzUzMyAyLjk2MzE2IDMuNjQ2NDJWMTEuNTAySDAuNjUyMTM2QzAuMzU1ODUyIDExLjUwMiAwLjExODgxMSAxMS43MzY1IDAuMTE4ODExIDEyLjAyOTZDMC4xMTg4MTEgMTIuMzIyNyAwLjM1NTg1MiAxMi41NTcyIDAuNjUyMTM2IDEyLjU1NzJaTTIxLjAzNjcgMy42NDY0MkMyMS4wMzY3IDMuMzUzMyAyMC43OTk3IDMuMTE4ODEgMjAuNTAzNCAzLjExODgxQzIwLjIwNzEgMy4xMTg4MSAxOS45NyAzLjM1MzMgMTkuOTcgMy42NDY0MlY4LjY4ODA3SDE3LjY1OUMxNy4zNjI3IDguNjg4MDcgMTcuMTI1NyA4LjkyMjU2IDE3LjEyNTcgOS4yMTU2OEMxNy4xMjU3IDkuNTA4OCAxNy4zNjI3IDkuNzQzMyAxNy42NTkgOS43NDMzSDE5Ljk3VjIwLjQxMjhDMTkuOTcgMjAuNzA1OSAyMC4yMDcxIDIwLjk0MDQgMjAuNTAzNCAyMC45NDA0QzIwLjc5OTcgMjAuOTQwNCAyMS4wMzY3IDIwLjcwNTkgMjEuMDM2NyAyMC40MTI4VjkuNzQzM0gyMy4zNDc2QzIzLjY0MzkgOS43NDMzIDIzLjg4MSA5LjUwODggMjMuODgxIDkuMjE1NjhDMjMuODgxIDguOTIyNTYgMjMuNjQzOSA4LjY4ODA3IDIzLjM0NzYgOC42ODgwN0gyMS4wMzY3VjMuNjQ2NDJaTTExLjQ5NjMgMTUuMzcxMkg5LjE4NTMxQzguODg5MDMgMTUuMzcxMiA4LjY1MTk4IDE1LjEzNjcgOC42NTE5OCAxNC44NDM2QzguNjUxOTggMTQuNTUwNCA4Ljg4OTAzIDE0LjMxNTkgOS4xODUzMSAxNC4zMTU5SDExLjQ5NjNWMy42NDY0MkMxMS40OTYzIDMuMzUzMyAxMS43MzMzIDMuMTE4ODEgMTIuMDI5NiAzLjExODgxQzEyLjMyNTkgMy4xMTg4MSAxMi41NjI5IDMuMzUzMyAxMi41NjI5IDMuNjQ2NDJWMTQuMzE1OUgxNC44NzM5QzE1LjE3MDIgMTQuMzE1OSAxNS40MDczIDE0LjU1MDQgMTUuNDA3MyAxNC44NDM2QzE1LjQwNzMgMTUuMTM2NyAxNS4xNzAyIDE1LjM3MTIgMTQuODczOSAxNS4zNzEySDEyLjU2MjlWMjAuNDEyOEMxMi41NjI5IDIwLjcwNTkgMTIuMzI1OSAyMC45NDA0IDEyLjAyOTYgMjAuOTQwNEMxMS43MzMzIDIwLjk0MDQgMTEuNDk2MyAyMC43MDU5IDExLjQ5NjMgMjAuNDEyOFYxNS4zNzEyWlwiLFxuICAgICAgZmlsbDogXCJjdXJyZW50Y29sb3JcIlxuICAgIH1cbiAgKSxcbiAgLyogQF9fUFVSRV9fICovIGMoXG4gICAgXCJwYXRoXCIsXG4gICAge1xuICAgICAgZmlsbFJ1bGU6IFwiZXZlbm9kZFwiLFxuICAgICAgY2xpcFJ1bGU6IFwiZXZlbm9kZFwiLFxuICAgICAgZDogXCJNMi44NDQzOCAxMi42NzZIMC42NTIxNDFDMC4yOTE0NDkgMTIuNjc2IDAgMTIuMzg5NiAwIDEyLjAyOTZDMCAxMS42Njk3IDAuMjkxNDQ5IDExLjM4MzIgMC42NTIxNDEgMTEuMzgzMkgyLjg0NDM4VjMuNjQ2NDJDMi44NDQzOCAzLjI4NjUgMy4xMzU3MyAzIDMuNDk2NDUgM0MzLjg1NzE0IDMgNC4xNDg1OSAzLjI4NjQ4IDQuMTQ4NTkgMy42NDY0MlYxMS4zODMySDYuMzQwODJDNi43MDE1MSAxMS4zODMyIDYuOTkyOTYgMTEuNjY5NyA2Ljk5Mjk2IDEyLjAyOTZDNi45OTI5NiAxMi4zODk2IDYuNzAxNTEgMTIuNjc2IDYuMzQwODIgMTIuNjc2SDQuMTQ4NTlWMjAuNDEyOEM0LjE0ODU5IDIwLjc3MjcgMy44NTcxNCAyMS4wNTkyIDMuNDk2NDUgMjEuMDU5MkMzLjEzNTczIDIxLjA1OTIgMi44NDQzOCAyMC43NzI3IDIuODQ0MzggMjAuNDEyOFYxMi42NzZaTTAuNjUyMTM2IDEyLjU1NzJDMC4zNTU4NTIgMTIuNTU3MiAwLjExODgxMSAxMi4zMjI3IDAuMTE4ODExIDEyLjAyOTZDMC4xMTg4MTEgMTEuNzM2NSAwLjM1NTg1MiAxMS41MDIgMC42NTIxMzYgMTEuNTAySDIuOTYzMTZWMy42NDY0MkMyLjk2MzE2IDMuMzUzMyAzLjIwMDEzIDMuMTE4ODEgMy40OTY0MiAzLjExODgxQzMuNzkyNyAzLjExODgxIDQuMDI5NzQgMy4zNTMzIDQuMDI5NzQgMy42NDY0MlYxMS41MDJINi4zNDA3N0M2LjYzNzA1IDExLjUwMiA2Ljg3NDA5IDExLjczNjUgNi44NzQwOSAxMi4wMjk2QzYuODc0MDkgMTIuMzIyNyA2LjYzNzA1IDEyLjU1NzIgNi4zNDA3NyAxMi41NTcySDQuMDI5NzRWMjAuNDEyOEM0LjAyOTc0IDIwLjcwNTkgMy43OTI3IDIwLjk0MDQgMy40OTY0MiAyMC45NDA0QzMuMjAwMTMgMjAuOTQwNCAyLjk2MzE2IDIwLjcwNTkgMi45NjMxNiAyMC40MTI4VjEyLjU1NzJIMC42NTIxMzZaTTIwLjUwMzYgM0MyMC44NjQyIDMgMjEuMTU1NyAzLjI4NjQ4IDIxLjE1NTcgMy42NDY0MlY4LjU2OTI2SDIzLjM0NzlDMjMuNzA4NSA4LjU2OTI2IDI0IDguODU1NzMgMjQgOS4yMTU2OEMyNCA5LjU3NTYyIDIzLjcwODYgOS44NjIxMSAyMy4zNDc5IDkuODYyMTFIMjEuMTU1N1YyMC40MTI4QzIxLjE1NTcgMjAuNzcyNyAyMC44NjQzIDIxLjA1OTIgMjAuNTAzNiAyMS4wNTkyQzIwLjE0MjkgMjEuMDU5MiAxOS44NTE0IDIwLjc3MjcgMTkuODUxNCAyMC40MTI4VjkuODYyMTFIMTcuNjU5MkMxNy4yOTg1IDkuODYyMTEgMTcuMDA3IDkuNTc1NjIgMTcuMDA3IDkuMjE1NjhDMTcuMDA3IDguODU1NzQgMTcuMjk4NSA4LjU2OTI2IDE3LjY1OTIgOC41NjkyNkgxOS44NTE0VjMuNjQ2NDJDMTkuODUxNCAzLjI4NjQ4IDIwLjE0MjkgMyAyMC41MDM2IDNaTTE5Ljk3IDMuNjQ2NDJDMTkuOTcgMy4zNTMzIDIwLjIwNzEgMy4xMTg4MSAyMC41MDM0IDMuMTE4ODFDMjAuNzk5NyAzLjExODgxIDIxLjAzNjcgMy4zNTMzIDIxLjAzNjcgMy42NDY0MlY4LjY4ODA3SDIzLjM0NzZDMjMuNjQzOSA4LjY4ODA3IDIzLjg4MSA4LjkyMjU2IDIzLjg4MSA5LjIxNTY4QzIzLjg4MSA5LjUwODggMjMuNjQzOSA5Ljc0MzMgMjMuMzQ3NiA5Ljc0MzNIMjEuMDM2N1YyMC40MTI4QzIxLjAzNjcgMjAuNzA1OSAyMC43OTk3IDIwLjk0MDQgMjAuNTAzNCAyMC45NDA0QzIwLjIwNzEgMjAuOTQwNCAxOS45NyAyMC43MDU5IDE5Ljk3IDIwLjQxMjhWOS43NDMzSDE3LjY1OUMxNy4zNjI3IDkuNzQzMyAxNy4xMjU3IDkuNTA4OCAxNy4xMjU3IDkuMjE1NjhDMTcuMTI1NyA4LjkyMjU2IDE3LjM2MjcgOC42ODgwNyAxNy42NTkgOC42ODgwN0gxOS45N1YzLjY0NjQyWk0xMS4zNzc2IDE1LjQ5SDkuMTg1MzlDOC44MjQ3IDE1LjQ5IDguNTMzMjUgMTUuMjAzNSA4LjUzMzI1IDE0Ljg0MzZDOC41MzMyNSAxNC40ODM2IDguODI0NyAxNC4xOTcxIDkuMTg1MzkgMTQuMTk3MUgxMS4zNzc2VjMuNjQ2NDJDMTEuMzc3NiAzLjI4NjQ4IDExLjY2OSAzIDEyLjAyOTcgM0MxMi4zOTA0IDMgMTIuNjgxOCAzLjI4NjQ4IDEyLjY4MTggMy42NDY0MlYxNC4xOTcxSDE0Ljg3NDFDMTUuMjM0OCAxNC4xOTcxIDE1LjUyNjIgMTQuNDgzNiAxNS41MjYyIDE0Ljg0MzZDMTUuNTI2MiAxNS4yMDM1IDE1LjIzNDggMTUuNDkgMTQuODc0MSAxNS40OUgxMi42ODE4VjIwLjQxMjhDMTIuNjgxOCAyMC43NzI3IDEyLjM5MDQgMjEuMDU5MiAxMi4wMjk3IDIxLjA1OTJDMTEuNjY5IDIxLjA1OTIgMTEuMzc3NiAyMC43NzI3IDExLjM3NzYgMjAuNDEyOFYxNS40OVpNMTEuNDk2MyAxNS4zNzEyVjIwLjQxMjhDMTEuNDk2MyAyMC43MDU5IDExLjczMzMgMjAuOTQwNCAxMi4wMjk2IDIwLjk0MDRDMTIuMzI1OSAyMC45NDA0IDEyLjU2MjkgMjAuNzA1OSAxMi41NjI5IDIwLjQxMjhWMTUuMzcxMkgxNC44NzM5QzE1LjE3MDIgMTUuMzcxMiAxNS40MDczIDE1LjEzNjcgMTUuNDA3MyAxNC44NDM2QzE1LjQwNzMgMTQuNTUwNCAxNS4xNzAyIDE0LjMxNTkgMTQuODczOSAxNC4zMTU5SDEyLjU2MjlWMy42NDY0MkMxMi41NjI5IDMuMzUzMyAxMi4zMjU5IDMuMTE4ODEgMTIuMDI5NiAzLjExODgxQzExLjczMzMgMy4xMTg4MSAxMS40OTYzIDMuMzUzMyAxMS40OTYzIDMuNjQ2NDJWMTQuMzE1OUg5LjE4NTMxQzguODg5MDMgMTQuMzE1OSA4LjY1MTk4IDE0LjU1MDQgOC42NTE5OCAxNC44NDM2QzguNjUxOTggMTUuMTM2NyA4Ljg4OTAzIDE1LjM3MTIgOS4xODUzMSAxNS4zNzEySDExLjQ5NjNaXCIsXG4gICAgICBmaWxsOiBcImN1cnJlbnRjb2xvclwiXG4gICAgfVxuICApXG5dIH0pLCBUeiA9ICgpID0+IC8qIEBfX1BVUkVfXyAqLyBlMShcInN2Z1wiLCB7IHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsIHZpZXdCb3g6IFwiMCAwIDI0IDI0XCIsIGZpbGw6IFwibm9uZVwiLCBjaGlsZHJlbjogW1xuICAvKiBAX19QVVJFX18gKi8gYyhcbiAgICBcInBhdGhcIixcbiAgICB7XG4gICAgICBkOiBcIk02LjUgMTEuMUg0LjhWNEM0LjggMy40IDQuMyAzIDMuOCAzQzMuMiAzIDIuOCAzLjUgMi44IDRWMTEuMUgxQzAuNCAxMS4xIDAgMTEuNiAwIDEyLjFDMCAxMi43IDAuNSAxMy4xIDEgMTMuMUgyLjdWMjAuMkMyLjcgMjAuOCAzLjIgMjEuMiAzLjcgMjEuMkM0LjMgMjEuMiA0LjcgMjAuNyA0LjcgMjAuMlYxMy4xSDYuNEM3IDEzLjEgNy40IDEyLjYgNy40IDEyLjFDNy42IDExLjYgNy4xIDExLjEgNi41IDExLjFaXCIsXG4gICAgICBmaWxsOiBcImN1cnJlbnRjb2xvclwiXG4gICAgfVxuICApLFxuICAvKiBAX19QVVJFX18gKi8gYyhcbiAgICBcInBhdGhcIixcbiAgICB7XG4gICAgICBkOiBcIk0yMi45IDguNEgyMS4yVjRDMjEuMiAzLjQgMjAuNyAzIDIwLjIgM0MxOS43IDMgMTkuMiAzLjUgMTkuMiA0VjguM0gxNy41QzE2LjkgOC4zIDE2LjUgOC44IDE2LjUgOS4zQzE2LjUgOS44IDE3IDEwLjMgMTcuNSAxMC4zSDE5LjJWMjAuMUMxOS4yIDIwLjcgMTkuNyAyMS4xIDIwLjIgMjEuMUMyMC43IDIxLjEgMjEuMiAyMC42IDIxLjIgMjAuMVYxMC40SDIyLjlDMjMuNSAxMC40IDIzLjkgOS45IDIzLjkgOS40QzIzLjkgOC45IDIzLjUgOC40IDIyLjkgOC40WlwiLFxuICAgICAgZmlsbDogXCJjdXJyZW50Y29sb3JcIlxuICAgIH1cbiAgKSxcbiAgLyogQF9fUFVSRV9fICovIGMoXG4gICAgXCJwYXRoXCIsXG4gICAge1xuICAgICAgZDogXCJNMTQuOCAxMy44SDEzLjFWNEMxMy4xIDMuNCAxMi42IDMgMTIuMSAzQzExLjUgMyAxMS4xIDMuNSAxMS4xIDRWMTMuOEg5LjNDOC43IDEzLjggOC4zIDE0LjMgOC4zIDE0LjhDOC4zIDE1LjQgOC44IDE1LjggOS4zIDE1LjhIMTFWMjAuMUMxMSAyMC43IDExLjUgMjEuMSAxMiAyMS4xQzEyLjYgMjEuMSAxMyAyMC42IDEzIDIwLjFWMTUuOEgxNC43QzE1LjMgMTUuOCAxNS43IDE1LjMgMTUuNyAxNC44QzE1LjggMTQuMyAxNS4zIDEzLjggMTQuOCAxMy44WlwiLFxuICAgICAgZmlsbDogXCJjdXJyZW50Y29sb3JcIlxuICAgIH1cbiAgKVxuXSB9KSwgSXogPSAoKSA9PiAvKiBAX19QVVJFX18gKi8gYyhcInN2Z1wiLCB7IHZpZXdCb3g6IFwiMCAwIDI0IDI0XCIsIGZpbGw6IFwibm9uZVwiLCB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLCBjaGlsZHJlbjogLyogQF9fUFVSRV9fICovIGMoXG4gIFwicGF0aFwiLFxuICB7XG4gICAgZmlsbFJ1bGU6IFwiZXZlbm9kZFwiLFxuICAgIGNsaXBSdWxlOiBcImV2ZW5vZGRcIixcbiAgICBkOiBcIk01LjQgMC43QzUuNCAwLjMxMzQwMSA1LjA4NjYgMCA0LjcgMEM0LjMxMzQgMCA0IDAuMzEzNDAxIDQgMC43VjIzLjNDNCAyMy42ODY2IDQuMzEzNCAyNCA0LjcgMjRDNS4wODY2IDI0IDUuNCAyMy42ODY2IDUuNCAyMy4zVjAuN1pNMTkuMTk3NiAyNEMxOC45NTY5IDI0IDE4Ljc5NjQgMjMuOTIxNiAxOC42MzU5IDIzLjc2NDdMNy4yNDA4NCAxMi40NzA2QzYuOTE5ODUgMTIuMTU2OSA2LjkxOTg1IDExLjc2NDcgNy4yNDA4NCAxMS40NTFMMTguNzE2MiAwLjIzNTI5NEMxOS4wMzcxIC0wLjA3ODQzMTQgMTkuNDM4NCAtMC4wNzg0MzE0IDE5Ljc1OTQgMC4yMzUyOTRDMjAuMDgwMyAwLjU0OTAyIDIwLjA4MDMgMC45NDExNzcgMTkuNzU5NCAxLjI1NDlMOC43NjU1IDEyTDE5Ljc1OTQgMjIuNzQ1MUMyMC4wODAzIDIzLjA1ODggMjAuMDgwMyAyMy40NTEgMTkuNzU5NCAyMy43NjQ3QzE5LjU5ODkgMjMuOTIxNiAxOS4zNTgxIDI0IDE5LjE5NzYgMjRaXCIsXG4gICAgZmlsbDogXCJjdXJyZW50Q29sb3JcIlxuICB9XG4pIH0pLCBEeiA9ICgpID0+IC8qIEBfX1BVUkVfXyAqLyBjKFwic3ZnXCIsIHsgdmlld0JveDogXCIwIDAgMjQgMjRcIiwgZmlsbDogXCJub25lXCIsIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsIGNoaWxkcmVuOiAvKiBAX19QVVJFX18gKi8gYyhcbiAgXCJwYXRoXCIsXG4gIHtcbiAgICBkOiBcIk05LjAyMDc4IDAuMjU0MTMyQzcuMTM2NTYgMC4zMDc5NDYgNS4yNjgyMyAwLjg3MzE0MiAzLjU2MzAyIDEuOTc5MzhDMy4zMzUxNSAyLjEyNTY0IDMuMTg4NDMgMi4zOTU5MSAzLjE4NzUgMi42NzExOUMzLjE4NzUgOS40MjQxNSAzLjE4NzUgMTYuMTc3MSAzLjE4NzUgMjIuOTMwMUMzLjE4NzUgMjMuMzgyOSAzLjU0NjE5IDIzLjc1IDMuOTg4NjMgMjMuNzVDNC40MzExIDIzLjc1IDQuNzg5NzcgMjMuMzgyOSA0Ljc4OTc3IDIyLjkzMDFWMTMuMDA1NkM1Ljc4NTM0IDEyLjQxMjkgOS4wNjg2MyAxMC43ODcgMTMuMDE4MSAxMi41MzU5QzE1LjM3NjggMTMuNTgwMyAxNy4xNzIzIDEzLjc5MjkgMTguNDA5MSAxMy43MjMxQzE5LjY0NTggMTMuNjUzMiAyMC40MDM2IDEzLjI0NDggMjAuNDAzNiAxMy4yNDQ4QzIwLjY0ODUgMTMuMTA0IDIwLjgxMDQgMTIuODIzMyAyMC44MTI1IDEyLjUzNTlWMi42NjI2NUMyMC44MTUxIDIuMzc4NjcgMjAuNjYwOSAyLjA5ODc0IDIwLjQyMjggMS45NTI4OUMyMC4xODQ3IDEuODA3MDQgMTkuODcxIDEuODAwNjQgMTkuNjI3NSAxLjkzNjY4QzE5LjYyNzUgMS45MzY2OCAxOS4zMDY2IDIuMTQzOTEgMTguMzM0IDIuMTkyOUMxNy4zNjEzIDIuMjQxOSAxNS44MjA3IDIuMDgzNjQgMTMuNjQ0IDEuMTUwOTJDMTIuNDEwNiAwLjYyMjQwNCAxMS4xMjMgMC4zMjU0NTQgOS44MzAyNCAwLjI2MjY3MkM5LjU2MDkzIDAuMjQ5NTgxIDkuMjg5OTMgMC4yNDY0NDEgOS4wMjA3OCAwLjI1NDE0OFYwLjI1NDEzMlpNOS4xMjA5MiAxLjg3Njg5QzkuMzMyNzQgMS44NzE3OCA5LjU0MjkzIDEuODc0NzIgOS43NTUxNSAxLjg4NTQzQzEwLjg1NDMgMS45NDE2MSAxMS45NTcgMi4yMDQ0IDEzLjAyNjUgMi42NjI2NUMxNS4zOTMyIDMuNjc2ODQgMTcuMTg3OSAzLjg5NDY4IDE4LjQxNzQgMy44MzI3NEMxOC43NTMyIDMuODE1ODMgMTguOTUxNSAzLjc0NzU0IDE5LjIxMDIgMy42OTYwOVYxMS45NTUxQzE5LjAwNjcgMTIuMDA5IDE4Ljc1MTEgMTIuMDY3NyAxOC4zMjU2IDEyLjA5MTdDMTcuMzU0NCAxMi4xNDY2IDE1LjgxNDMgMTEuOTkgMTMuNjUyMyAxMS4wMzI3QzkuODQ4NyA5LjM0ODQxIDYuNTE2NDggMTAuMzg4MSA0Ljc4OTc3IDExLjE5NDlWMTAuMzU3OVYzLjE0OTQ4QzYuMTY4MSAyLjMzODk4IDcuNjM4MDcgMS45MTI2OSA5LjEyMDkyIDEuODc2ODlaXCIsXG4gICAgZmlsbDogXCJjdXJyZW50Q29sb3JcIlxuICB9XG4pIH0pLCBIeiA9ICgpID0+IC8qIEBfX1BVUkVfXyAqLyBjKFwic3ZnXCIsIHsgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiwgdmlld0JveDogXCIwIDAgMjQgMjRcIiwgZmlsbDogXCJub25lXCIsIGNoaWxkcmVuOiAvKiBAX19QVVJFX18gKi8gYyhcbiAgXCJwYXRoXCIsXG4gIHtcbiAgICBkOiBcIk0yMC42IDIuNFYxMi4zQzIwLjYgMTIuNiAyMC40IDEyLjkgMjAuMiAxM0MyMC4yIDEzIDE5LjQgMTMuNCAxOC4yIDEzLjVDMTcgMTMuNiAxNS4yIDEzLjQgMTIuOCAxMi4zQzkuMSAxMC43IDYgMTIgNC44IDEyLjZWMjIuNkM0LjggMjMuMSA0LjQgMjMuNSAzLjkgMjMuNUgzLjhDMy44IDIzLjUgMy44IDIzLjUgMy43IDIzLjVDMy4zIDIzLjQgMyAyMyAzIDIyLjZWMi40QzMgMi4xIDMuMiAxLjggMy40IDEuN0M1LjEgMC42IDcgMC4xIDguOCAwQzkuMSAwIDkuMyAwIDkuNiAwQzEwLjkgMC4xIDEyLjIgMC40IDEzLjQgMC45QzE1LjYgMS44IDE3LjEgMiAxOC4xIDEuOUMxOS4xIDEuOSAxOS40IDEuNyAxOS40IDEuN0MxOS42IDEuNiAxOS45IDEuNiAyMC4yIDEuN0MyMC41IDEuOSAyMC42IDIuMSAyMC42IDIuNFpcIixcbiAgICBmaWxsOiBcImN1cnJlbnRDb2xvclwiXG4gIH1cbikgfSksIFZ6ID0gKCkgPT4gLyogQF9fUFVSRV9fICovIGMoXCJzdmdcIiwgeyB2aWV3Qm94OiBcIjAgMCAyNCAyNFwiLCBmaWxsOiBcIm5vbmVcIiwgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiwgY2hpbGRyZW46IC8qIEBfX1BVUkVfXyAqLyBjKFxuICBcInBhdGhcIixcbiAge1xuICAgIGZpbGxSdWxlOiBcImV2ZW5vZGRcIixcbiAgICBjbGlwUnVsZTogXCJldmVub2RkXCIsXG4gICAgZDogXCJNMjIuOTc1MSA1LjI5MzU0SDEzLjQ5MDhMMTEuMjIwOSAzLjAxMjI2QzExLjE1ODggMi45NDk5MSAxMS4wOTM2IDIuODk5OTQgMTEuMDE3NiAyLjg2NkMxMC45NDEzIDIuODMxOSAxMC44NTgyIDIuODE1ODMgMTAuNzYyOCAyLjgxNTgzSDEuMDE1OTNDMC42ODQ2OTcgMi44MTU4MyAwLjQxOTkyMiAzLjA4MjUxIDAuNDE5OTIyIDMuNDE0NDJWMTguMTA3OUMwLjQxOTkyMiAxOS44MjI3IDEuNzc0MDYgMjEuMTg0MiAzLjQ4MTMyIDIxLjE4NDJIMjIuOTc1MUMyMy4zMDY0IDIxLjE4NDIgMjMuNTcxMSAyMC45MTc1IDIzLjU3MTEgMjAuNTg1NlY1Ljg5OTdDMjMuNjAxOSA1LjczMjUzIDIzLjU1MDUgNS41NzkwNSAyMy40NDAzIDUuNDY4MzdDMjMuMzI5NyA1LjM1NzEyIDIzLjE2NDYgNS4yOTM1NCAyMi45NzUxIDUuMjkzNTRaTTEuNjY5MjggMTguMTY1NVY0LjA3MDY0SDEwLjU1NzZMMTEuNzc0NCA1LjI5MzU0SDMuNDgxMzJDMy4xNTAwOSA1LjI5MzU0IDIuODg1MzIgNS41NjAyMiAyLjg4NTMyIDUuODkyMTNWMTkuODQyNUMyLjE2ODQ0IDE5LjU5MzkgMS42NjkyOCAxOC45NTQ0IDEuNjY5MjggMTguMTY1NVpNNC4wNzczNCAxOS45ODdIMjIuMzc5MVY2LjQ5MDczSDQuMDc3MzRWMTkuOTg3WlwiLFxuICAgIGZpbGw6IFwiY3VycmVudENvbG9yXCJcbiAgfVxuKSB9KSwgUHogPSAoKSA9PiAvKiBAX19QVVJFX18gKi8gYyhcInN2Z1wiLCB7IHZpZXdCb3g6IFwiMCAwIDI0IDI0XCIsIGZpbGw6IFwibm9uZVwiLCB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLCBjaGlsZHJlbjogLyogQF9fUFVSRV9fICovIGMoXG4gIFwicGF0aFwiLFxuICB7XG4gICAgZmlsbFJ1bGU6IFwiZXZlbm9kZFwiLFxuICAgIGNsaXBSdWxlOiBcImV2ZW5vZGRcIixcbiAgICBkOiBcIk0xOS44ODM3IDguMTk4ODFIMjMuNDMyMkMyMy42ODk2IDguMTk4ODEgMjMuODIyNiA4LjMzNDQ4IDIzLjg4MTIgOC4zOTQ1NUwyMy44ODg3IDguNDAyMjRMMjMuODk0NiA4LjQxMTI0QzI0LjAyMjcgOC42MDgxMyAyNC4wMjA0IDguODA2OTQgMjMuOTU5OSA4Ljk5MzFMMjMuOTU4IDguOTk4OTFMMTkuODE5OSAxOS42NDk1QzE5Ljc2MDcgMTkuNzcwOCAxOS42ODMgMTkuODY4NSAxOS41ODQzIDE5LjkzNTlDMTkuNDg0OSAyMC4wMDM4IDE5LjM3MDIgMjAuMDM2MyAxOS4yNDQ2IDIwLjAzNjNIMi42NTMzNUMxLjIxMzk3IDIwLjAzNjMgMCAxOC44NDYzIDAgMTcuMzIxMVY0LjU2MTMyQzAgNC4yMzIxMiAwLjI1ODM3NyAzLjk2MzY1IDAuNTg2MDY2IDMuOTYzNjVIOC45MDgxOUM5LjAwMDc2IDMuOTYzNjUgOS4wODI4MiAzLjk3OTYgOS4xNTg3NiA0LjAxNDE3QzkuMjM0MTUgNC4wNDg1IDkuMjk3OTEgNC4wOTg2MyA5LjM1NzI0IDQuMTU5NEwxMS4yMzM0IDYuMDgxMjNIMTkuMjk3NkMxOS42MjUzIDYuMDgxMjMgMTkuODgzNyA2LjM0OTcxIDE5Ljg4MzcgNi42Nzg5MVY4LjE5ODgxWk0yLjI3MDM5IDE4Ljc2MjhDMS43MTU0NSAxOC41NzQ4IDEuMjI1MTQgMTcuOTkxIDEuMjI1MTQgMTcuMzIxMVY1LjE1OUg4LjcwMzI1TDEwLjU3OTQgNy4wODA4M0MxMC42Mzg4IDcuMTQxNiAxMC43MDI1IDcuMTkxNzMgMTAuNzc3OSA3LjIyNjA1QzEwLjg1MzkgNy4yNjA2MyAxMC45MzU5IDcuMjc2NTggMTEuMDI4NSA3LjI3NjU4SDE4LjcxMTVWOC4xOTg4MUg2Ljg0MDkxQzYuNzE1MjggOC4xOTg4MSA2LjYwMDYgOC4yMzEzMyA2LjUwMTE2IDguMjk5MjRDNi40MDI1MiA4LjM2NjU5IDYuMzI1MTEgOC40NjQ0NiA2LjI2NTg5IDguNTg1NzdMMi4yNzAzOSAxOC43NjI4Wk0xOC45MDUyIDE4Ljg0MUwyMi41ODMzIDkuNDQ4NDVINy4yODYzNEwzLjYwODIgMTguODQxSDE4LjkwNTJaXCIsXG4gICAgZmlsbDogXCJjdXJyZW50Q29sb3JcIlxuICB9XG4pIH0pLCBGeiA9ICgpID0+IC8qIEBfX1BVUkVfXyAqLyBjKFwic3ZnXCIsIHsgdmlld0JveDogXCIwIDAgMjQgMjRcIiwgZmlsbDogXCJub25lXCIsIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsIGNoaWxkcmVuOiAvKiBAX19QVVJFX18gKi8gYyhcbiAgXCJwYXRoXCIsXG4gIHtcbiAgICBmaWxsUnVsZTogXCJldmVub2RkXCIsXG4gICAgY2xpcFJ1bGU6IFwiZXZlbm9kZFwiLFxuICAgIGQ6IFwiTTE4LjgwOTEgMi45NzUyNUgyMy4zNjhDMjMuNzExMyAyLjk3NTI1IDI0IDMuMjMxNTMgMjQgMy41NjcyNFY3Ljc4MzU0QzI0IDguMTE5MjUgMjMuNzExMyA4LjM3NTUzIDIzLjM2OCA4LjM3NTUzQzIzLjAyNDYgOC4zNzU1MyAyMi42NzY3IDguMTE5MjYgMjIuNjc2NyA3Ljc4MzU0VjQuMjEzOTlIMTguODA5MUMxOC40NjU3IDQuMjEzOTkgMTguMTc3MSAzLjkwMjk1IDE4LjE3NzEgMy41NjcyNEMxOC4xNzcxIDMuMjQ5MDIgMTguNTIxNyAyLjk3NTI1IDE4LjgwOTEgMi45NzUyNVpNMjIuNjc2NyAxOS44NDA4VjE2LjI3MTJDMjIuNjc2NyAxNS44ODk2IDIzLjAyNDYgMTUuNjc5MyAyMy4zNjggMTUuNjc5M0MyMy42ODE4IDE1LjY3OTMgMjQgMTUuOTU3NSAyNCAxNi4yNzEyVjIwLjQ3MjVDMjQgMjAuODA4MiAyMy43MTEzIDIxLjAyNDggMjMuMzY4IDIxLjAyNDhIMTguODA5MUMxOC40NjU3IDIxLjAyNDggMTguMTc3MSAyMC44MDgyIDE4LjE3NzEgMjAuNDcyNUMxOC4xNzcxIDIwLjEzNjggMTguNDY1NyAxOS44NDA4IDE4LjgwOTEgMTkuODQwOEgyMi42NzY3Wk0xLjI2NDA1IDcuNzgzNTRDMS4yNjQwNSA4LjExOTI1IDAuOTc1Mzk1IDguMzc1NTMgMC42MzIwMjcgOC4zNzU1M0MwLjI4ODc2IDguMzc1NTMgMCA4LjA3NTU4IDAgNy43ODM1NFYzLjU2NzI0QzAgMy4yMzE1MyAwLjI4ODY1OCAyLjk3NTI1IDAuNjMyMDI3IDIuOTc1MjVINS4xMzE3MUM1LjQ3NTA4IDIuOTc1MjUgNS43NjM3NCAzLjIzMTUzIDUuNzYzNzQgMy41NjcyNEM1Ljc2Mzc0IDMuOTAyOTUgNS40NzUwOCA0LjIxMzk5IDUuMTMxNzEgNC4yMTM5OUgxLjI2NDA1VjcuNzgzNTRaTTUuMTMxNzEgMjEuMDI0OEgwLjYzMjAyN0MwLjI5MjA5MSAyMS4wMjQ4IDAgMjAuODE4IDAgMjAuNDcyNVYxNi4yNzEyQzAgMTUuOTM1NSAwLjI4ODY1OCAxNS42NzkzIDAuNjMyMDI3IDE1LjY3OTNDMC45NzUzOTYgMTUuNjc5MyAxLjI2NDA1IDE1LjkyNzkgMS4yNjQwNSAxNi4yNzEyVjE5Ljg0MDhINS4xMzE3MUM1LjQ3NTA4IDE5Ljg0MDggNS43NjM3NCAyMC4xMzY4IDUuNzYzNzQgMjAuNDcyNUM1Ljc2Mzc0IDIwLjgwODIgNS40NzUwOCAyMS4wMjQ4IDUuMTMxNzEgMjEuMDI0OFpcIixcbiAgICBmaWxsOiBcImN1cnJlbnRDb2xvclwiXG4gIH1cbikgfSksIFh6ID0gKCkgPT4gLyogQF9fUFVSRV9fICovIGMoXCJzdmdcIiwgeyB2aWV3Qm94OiBcIjAgMCAyNSAyNFwiLCBmaWxsOiBcIm5vbmVcIiwgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiwgY2hpbGRyZW46IC8qIEBfX1BVUkVfXyAqLyBjKFxuICBcInBhdGhcIixcbiAge1xuICAgIGQ6IFwiTTIyIDBDMjEuMzUzIDAuMDAxNjY5ODggMjAuNzI0IDAuMjEyNDE3IDIwLjIwNjYgMC42MDA4MTFDMTkuNjg5MyAwLjk4OTIwNSAxOS4zMTEzIDEuNTM0NDQgMTkuMTI5MSAyLjE1NTE5QzE4Ljk0NjkgMi43NzU5MyAxOC45NzAzIDMuNDM4OTQgMTkuMTk1NyA0LjA0NTMzQzE5LjQyMTEgNC42NTE3MiAxOS44MzY1IDUuMTY4OTkgMjAuMzggNS41MkwxNy43NiAxMy4wN0MxNy42NjM0IDEzLjA2NTEgMTcuNTY2NiAxMy4wNjUxIDE3LjQ3IDEzLjA3QzE2Ljg2NjEgMTMuMDcyNiAxNi4yNzcxIDEzLjI1NzMgMTUuNzggMTMuNkwxMS4xNSA5LjM4QzExLjM5MjQgOC45NTk5OSAxMS41MjMyIDguNDg0OSAxMS41MyA4QzExLjUzMDggNy40NzkxMyAxMS4zOTYxIDYuOTY3MDIgMTEuMTM4OSA2LjUxNDA0QzEwLjg4MTggNi4wNjEwNyAxMC41MTEyIDUuNjgyODQgMTAuMDYzNSA1LjQxNjU5QzkuNjE1ODQgNS4xNTAzMyA5LjEwNjU2IDUuMDA1MjIgOC41ODU3OSA0Ljk5NTUzQzguMDY1MDEgNC45ODU4NCA3LjU1MDY4IDUuMTExOSA3LjA5MzQyIDUuMzYxMzJDNi42MzYxNSA1LjYxMDc0IDYuMjUxNyA1Ljk3NDkxIDUuOTc3OSA2LjQxODAxQzUuNzA0MSA2Ljg2MTExIDUuNTUwMzggNy4zNjc4NSA1LjUzMTg3IDcuODg4MzlDNS41MTMzNiA4LjQwODkzIDUuNjMwNjkgOC45MjUzMiA1Ljg3MjMzIDkuMzg2NzRDNi4xMTM5NyA5Ljg0ODE3IDYuNDcxNTcgMTAuMjM4NyA2LjkwOTk3IDEwLjUyTDQuMjg5OTcgMThDNC4xOTMzNyAxNy45OTUxIDQuMDk2NTcgMTcuOTk1MSAzLjk5OTk3IDE4QzMuMjc4MjYgMTcuOTk4MSAyLjU4MDA2IDE4LjI1NjUgMi4wMzM0MiAxOC43Mjc3QzEuNDg2NzggMTkuMTk4OSAxLjEyODMzIDE5Ljg1MTQgMS4wMjM4MiAyMC41NjU2QzAuOTE5MzA0IDIxLjI3OTcgMS4wNzU3MyAyMi4wMDc1IDEuNDY0NCAyMi42MTU2QzEuODUzMDggMjMuMjIzNyAyLjQ0Nzk1IDIzLjY3MTQgMy4xMzk5MyAyMy44NzY0QzMuODMxOTEgMjQuMDgxNCA0LjU3NDYxIDI0LjAzMDEgNS4yMzE4MyAyMy43MzE5QzUuODg5MDQgMjMuNDMzNyA2LjQxNjczIDIyLjkwODUgNi43MTgxMSAyMi4yNTI3QzcuMDE5NDggMjEuNTk3IDcuMDc0MzYgMjAuODU0NSA2Ljg3MjY2IDIwLjE2MTZDNi42NzA5NiAxOS40Njg2IDYuMjI2MjEgMTguODcxNiA1LjYxOTk3IDE4LjQ4TDguMjM5OTcgMTAuOTNDOC4zMzY1NyAxMC45MzQ5IDguNDMzMzcgMTAuOTM0OSA4LjUyOTk3IDEwLjkzQzkuMTMzOCAxMC45Mjc0IDkuNzIyODEgMTAuNzQyNyAxMC4yMiAxMC40TDE0Ljg1IDE0LjU5QzE0LjYwMjYgMTUuMDE4OCAxNC40NzE2IDE1LjUwNDkgMTQuNDcgMTZDMTQuNDY5MSAxNi41MjA5IDE0LjYwMzkgMTcuMDMzIDE0Ljg2MSAxNy40ODZDMTUuMTE4MSAxNy45Mzg5IDE1LjQ4ODggMTguMzE3MiAxNS45MzY0IDE4LjU4MzRDMTYuMzg0MSAxOC44NDk3IDE2Ljg5MzQgMTguOTk0OCAxNy40MTQyIDE5LjAwNDVDMTcuOTM0OSAxOS4wMTQyIDE4LjQ0OTMgMTguODg4MSAxOC45MDY1IDE4LjYzODdDMTkuMzYzOCAxOC4zODkzIDE5Ljc0ODIgMTguMDI1MSAyMC4wMjIgMTcuNTgyQzIwLjI5NTggMTcuMTM4OSAyMC40NDk2IDE2LjYzMjEgMjAuNDY4MSAxNi4xMTE2QzIwLjQ4NjYgMTUuNTkxMSAyMC4zNjkyIDE1LjA3NDcgMjAuMTI3NiAxNC42MTMzQzE5Ljg4NiAxNC4xNTE4IDE5LjUyODQgMTMuNzYxMyAxOS4wOSAxMy40OEwyMS43MSA2QzIxLjgwNjYgNi4wMDQ5MiAyMS45MDM0IDYuMDA0OTIgMjIgNkMyMi43OTU2IDYgMjMuNTU4NyA1LjY4MzkzIDI0LjEyMTMgNS4xMjEzMkMyNC42ODM5IDQuNTU4NzEgMjUgMy43OTU2NSAyNSAzQzI1IDIuMjA0MzUgMjQuNjgzOSAxLjQ0MTI5IDI0LjEyMTMgMC44Nzg2OEMyMy41NTg3IDAuMzE2MDcgMjIuNzk1NiAwIDIyIDBWMFpNMy45OTk5NyAyMi42QzMuNjgzNTIgMjIuNiAzLjM3NDE4IDIyLjUwNjIgMy4xMTEwNiAyMi4zMzA0QzIuODQ3OTQgMjIuMTU0NSAyLjY0Mjg2IDIxLjkwNDcgMi41MjE3NiAyMS42MTIzQzIuNDAwNjYgMjEuMzE5OSAyLjM2ODk4IDIwLjk5ODIgMi40MzA3MSAyMC42ODc5QzIuNDkyNDUgMjAuMzc3NSAyLjY0NDgzIDIwLjA5MjQgMi44Njg2IDE5Ljg2ODZDMy4wOTIzNiAxOS42NDQ5IDMuMzc3NDYgMTkuNDkyNSAzLjY4NzgyIDE5LjQzMDdDMy45OTgxOSAxOS4zNjkgNC4zMTk5IDE5LjQwMDcgNC42MTIyNiAxOS41MjE4QzQuOTA0NjIgMTkuNjQyOSA1LjE1NDUxIDE5Ljg0OCA1LjMzMDMyIDIwLjExMTFDNS41MDYxMyAyMC4zNzQyIDUuNTk5OTcgMjAuNjgzNSA1LjU5OTk3IDIxQzUuNTk5OTcgMjEuNDI0MyA1LjQzMTQgMjEuODMxMyA1LjEzMTM0IDIyLjEzMTRDNC44MzEyOCAyMi40MzE0IDQuNDI0MzIgMjIuNiAzLjk5OTk3IDIyLjZaTTguNTI5OTcgOS42QzguMjEzNTIgOS42IDcuOTA0MTggOS41MDYxNiA3LjY0MTA2IDkuMzMwMzVDNy4zNzc5NCA5LjE1NDU0IDcuMTcyODYgOC45MDQ2NiA3LjA1MTc2IDguNjEyMjlDNi45MzA2NiA4LjMxOTkzIDYuODk4OTggNy45OTgyMyA2Ljk2MDcxIDcuNjg3ODZDNy4wMjI0NSA3LjM3NzQ5IDcuMTc0ODMgNy4wOTIzOSA3LjM5ODYgNi44Njg2M0M3LjYyMjM2IDYuNjQ0ODcgNy45MDc0NiA2LjQ5MjQ4IDguMjE3ODIgNi40MzA3NEM4LjUyODE5IDYuMzY5MDEgOC44NDk5IDYuNDAwNjkgOS4xNDIyNiA2LjUyMTc5QzkuNDM0NjMgNi42NDI4OSA5LjY4NDUxIDYuODQ3OTcgOS44NjAzMiA3LjExMTA5QzEwLjAzNjEgNy4zNzQyMSAxMC4xMyA3LjY4MzU1IDEwLjEzIDhDMTAuMTE5NSA4LjQxNzM4IDkuOTQ2MzYgOC44MTQxNCA5LjY0NzQzIDkuMTA1NkM5LjM0ODUgOS4zOTcwNiA4Ljk0NzQ4IDkuNTYwMTMgOC41Mjk5NyA5LjU2VjkuNlpNMTcuNDcgMTcuNjhDMTcuMTUzNSAxNy42OCAxNi44NDQyIDE3LjU4NjIgMTYuNTgxMSAxNy40MTA0QzE2LjMxNzkgMTcuMjM0NSAxNi4xMTI5IDE2Ljk4NDcgMTUuOTkxOCAxNi42OTIzQzE1Ljg3MDcgMTYuMzk5OSAxNS44MzkgMTYuMDc4MiAxNS45MDA3IDE1Ljc2NzlDMTUuOTYyNCAxNS40NTc1IDE2LjExNDggMTUuMTcyNCAxNi4zMzg2IDE0Ljk0ODZDMTYuNTYyNCAxNC43MjQ5IDE2Ljg0NzUgMTQuNTcyNSAxNy4xNTc4IDE0LjUxMDdDMTcuNDY4MiAxNC40NDkgMTcuNzg5OSAxNC40ODA3IDE4LjA4MjMgMTQuNjAxOEMxOC4zNzQ2IDE0LjcyMjkgMTguNjI0NSAxNC45MjggMTguODAwMyAxNS4xOTExQzE4Ljk3NjEgMTUuNDU0MiAxOS4wNyAxNS43NjM1IDE5LjA3IDE2LjA4QzE5LjA1OTUgMTYuNDk3NCAxOC44ODY0IDE2Ljg5NDEgMTguNTg3NCAxNy4xODU2QzE4LjI4ODUgMTcuNDc3MSAxNy44ODc1IDE3LjY0MDEgMTcuNDcgMTcuNjRWMTcuNjhaTTIyIDQuNkMyMS42ODM1IDQuNiAyMS4zNzQyIDQuNTA2MTYgMjEuMTExMSA0LjMzMDM1QzIwLjg0NzkgNC4xNTQ1NCAyMC42NDI5IDMuOTA0NjYgMjAuNTIxOCAzLjYxMjI5QzIwLjQwMDcgMy4zMTk5MyAyMC4zNjkgMi45OTgyMyAyMC40MzA3IDIuNjg3ODZDMjAuNDkyNSAyLjM3NzQ5IDIwLjY0NDggMi4wOTIzOSAyMC44Njg2IDEuODY4NjNDMjEuMDkyNCAxLjY0NDg3IDIxLjM3NzUgMS40OTI0OCAyMS42ODc4IDEuNDMwNzRDMjEuOTk4MiAxLjM2OTAxIDIyLjMxOTkgMS40MDA2OSAyMi42MTIzIDEuNTIxNzlDMjIuOTA0NiAxLjY0Mjg5IDIzLjE1NDUgMS44NDc5NyAyMy4zMzAzIDIuMTExMDlDMjMuNTA2MSAyLjM3NDIxIDIzLjYgMi42ODM1NSAyMy42IDNDMjMuNiAzLjQyNDM1IDIzLjQzMTQgMy44MzEzMSAyMy4xMzEzIDQuMTMxMzdDMjIuODMxMyA0LjQzMTQzIDIyLjQyNDMgNC42IDIyIDQuNlpcIixcbiAgICBmaWxsOiBcImN1cnJlbnRjb2xvclwiXG4gIH1cbikgfSksIFV6ID0gKCkgPT4gLyogQF9fUFVSRV9fICovIGMoXCJzdmdcIiwgeyB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLCB2aWV3Qm94OiBcIjAgMCAyNSAyNVwiLCBmaWxsOiBcIm5vbmVcIiwgY2hpbGRyZW46IC8qIEBfX1BVUkVfXyAqLyBjKFxuICBcInBhdGhcIixcbiAge1xuICAgIGQ6IFwiTTI0Ljk5OTkgM0MyNC45OTk5IDMuOCAyNC42OTk5IDQuNiAyNC4wOTk5IDUuMUMyMy40OTk5IDUuNiAyMi43OTk5IDYgMjEuOTk5OSA2SDIxLjg5OTlMMTkuMTk5OSAxMy42QzE5LjU5OTkgMTMuOSAxOS44OTk5IDE0LjIgMjAuMDk5OSAxNC42QzIwLjI5OTkgMTUuMSAyMC40OTk5IDE1LjYgMjAuMzk5OSAxNi4xQzIwLjM5OTkgMTYuNiAyMC4xOTk5IDE3LjEgMTkuOTk5OSAxNy42QzE5LjY5OTkgMTggMTkuMjk5OSAxOC40IDE4Ljg5OTkgMTguN0MxOC4zOTk5IDE4LjkgMTcuODk5OSAxOS4xIDE3LjM5OTkgMTkuMUMxNi44OTk5IDE5LjEgMTYuMzk5OSAxOSAxNS44OTk5IDE4LjdDMTUuMzk5OSAxOC40IDE1LjA5OTkgMTguMSAxNC43OTk5IDE3LjZDMTQuNDk5OSAxNy4xIDE0LjM5OTkgMTYuNiAxNC4zOTk5IDE2LjFDMTQuMzk5OSAxNS43IDE0LjQ5OTkgMTUuMyAxNC42OTk5IDE0LjlMOS45OTk4OSAxMC41QzkuNDk5ODkgMTAuOCA4Ljk5OTg5IDEwLjkgOC40OTk4OSAxMC45TDUuNzk5ODkgMTguNkM2LjI5OTg5IDE5IDYuNjk5ODkgMTkuNSA2Ljg5OTg5IDIwLjJDNy4wOTk4OSAyMC45IDcuMDk5ODkgMjEuNiA2LjY5OTg5IDIyLjNDNi4zOTk4OSAyMyA1Ljg5OTg5IDIzLjUgNS4xOTk4OSAyMy44QzQuNDk5ODkgMjQuMSAzLjc5OTg5IDI0LjEgMy4wOTk4OSAyMy45QzIuMzk5ODkgMjMuNyAxLjc5OTg5IDIzLjIgMS4zOTk4OSAyMi42QzEuMDk5ODkgMjIgMC44OTk4OSAyMS4zIDAuOTk5ODkgMjAuNkMxLjA5OTg5IDE5LjkgMS40OTk4OSAxOS4yIDEuOTk5ODkgMTguOEMyLjU5OTg5IDE4LjMgMy4yOTk4OSAxOCAzLjk5OTg5IDE4QzMuOTk5ODkgMTggMy45OTk4OSAxOCA0LjA5OTg5IDE4TDYuNzk5ODkgMTAuNEM2LjM5OTg5IDEwLjIgNi4wOTk4OSA5LjggNS44OTk4OSA5LjRDNS42OTk4OSA4LjkgNS40OTk4OSA4LjQgNS41OTk4OSA3LjlDNS41OTk4OSA3LjQgNS43OTk4OSA2LjkgNS45OTk4OSA2LjRDNi4yOTk4OSA2IDYuNTk5ODkgNS42IDcuMDk5ODkgNS40QzcuNTk5ODkgNS4xIDguMDk5ODkgNSA4LjU5OTg5IDVDOS4wOTk4OSA1IDkuNTk5ODkgNS4yIDEwLjA5OTkgNS40QzEwLjU5OTkgNS43IDEwLjg5OTkgNiAxMS4xOTk5IDYuNUMxMS40OTk5IDcgMTEuNTk5OSA3LjUgMTEuNTk5OSA4QzExLjU5OTkgOC40IDExLjQ5OTkgOC44IDExLjI5OTkgOS4yTDE1Ljk5OTkgMTMuNUMxNi40OTk5IDEzLjIgMTYuOTk5OSAxMy4xIDE3LjQ5OTkgMTMuMUgxNy41OTk5TDIwLjI5OTkgNS40QzE5Ljc5OTkgNS4xIDE5LjQ5OTkgNC42IDE5LjI5OTkgNEMxOC45OTk5IDMuNCAxOC45OTk5IDIuOCAxOS4wOTk5IDIuMkMxOS4xOTk5IDEuNiAxOS42OTk5IDEgMjAuMTk5OSAwLjdDMjAuNjk5OSAwLjIgMjEuMzk5OSAwIDIxLjk5OTkgMEMyMi43OTk5IDAgMjMuNTk5OSAwLjMgMjQuMDk5OSAwLjlDMjQuNjk5OSAxLjQgMjQuOTk5OSAyLjIgMjQuOTk5OSAzWlwiLFxuICAgIGZpbGw6IFwiY3VycmVudGNvbG9yXCJcbiAgfVxuKSB9KSwgWXogPSAoKSA9PiAvKiBAX19QVVJFX18gKi8gYyhcInN2Z1wiLCB7IHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsIGZpbGw6IFwibm9uZVwiLCB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLCBjaGlsZHJlbjogLyogQF9fUFVSRV9fICovIGMoXG4gIFwicGF0aFwiLFxuICB7XG4gICAgZmlsbFJ1bGU6IFwiZXZlbm9kZFwiLFxuICAgIGNsaXBSdWxlOiBcImV2ZW5vZGRcIixcbiAgICBkOiBcIk0wLjYgMEMwLjMgMCAwIDAuMyAwIDAuN1Y2LjZDMCA3IDAuMyA3LjMgMC42IDcuM0g0LjRDNC44IDcuMiA1IDYuOSA1IDYuNVYwLjdDNSAwLjMgNC44IDAgNC40IDBIMC42Wk0wIDkuNkMwIDkuMiAwLjMgOSAwLjYgOUg4LjRDOC44IDkgOSA5LjMgOSA5LjZWMTUuNEM5IDE1LjggOC43IDE2IDguNCAxNkgwLjZDMC4zIDE2IDAgMTUuNyAwIDE1LjRWOS42Wk0xMC44IDkuNkMxMC44IDkuMiAxMS4xIDkgMTEuNCA5SDE1LjNDMTUuNyA5IDE1LjkgOS4zIDE1LjkgOS42VjE1LjRDMTUuOSAxNS44IDE1LjYgMTYgMTUuMyAxNkgxMS40QzExIDE2IDEwLjggMTUuNyAxMC44IDE1LjRWOS42Wk02LjcgMC43QzYuNyAwLjMgNyAwIDcuNCAwSDE1LjNDMTUuNyAwIDE2IDAuMyAxNiAwLjdWNi42QzE2IDcgMTUuNyA3LjMgMTUuMyA3LjNINy40QzcgNy4yIDYuNyA2LjkgNi43IDYuNVYwLjdaXCIsXG4gICAgZmlsbDogXCJjdXJyZW50Q29sb3JcIlxuICB9XG4pIH0pLCBHeiA9ICgpID0+IC8qIEBfX1BVUkVfXyAqLyBjKFwic3ZnXCIsIHsgdmlld0JveDogXCIwIDAgMjQgMjRcIiwgZmlsbDogXCJub25lXCIsIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsIGNoaWxkcmVuOiAvKiBAX19QVVJFX18gKi8gYyhcbiAgXCJwYXRoXCIsXG4gIHtcbiAgICBkOiBcIk0yMC43ODggMTIuOTU5MlYxMS45NjdDMjAuNzg4IDcuMjcwNDYgMTYuOTAyOCAzLjUgMTIuMDYzNyAzLjVDNy4yMjQ1NyAzLjUgMy4yNzE0OSA3LjMzNjU5IDMuMjcxNDkgMTIuMDMzMVYxMy4wMjUzQzEuNDMxMjcgMTMuMjg5OSAwIDE0Ljg3NzQgMCAxNi43Mjk2QzAgMTguNzgwMSAxLjc3MjA3IDIwLjUgMy44ODQ5MiAyMC41QzQuMjI1NyAyMC41IDQuNDk4MzQgMjAuMjM1NCA0LjQ5ODM0IDE5LjkwNDdWMTEuOTY3QzQuNDk4MzQgNy45MzE5NCA3LjgzNzk5IDQuNjkwNjkgMTEuOTk1NSA0LjY5MDY5QzE2LjE1MzEgNC42OTA2OSAxOS40OTI3IDcuOTMxOTQgMTkuNDkyNyAxMS45NjdWMTkuOTA0N0MxOS40OTI3IDIwLjIzNTQgMTkuNjk3NCAyMC40MzM5IDIwLjAzODIgMjAuNDMzOUMyMi4xNTExIDIwLjQzMzkgMjMuOTIzMSAxOC43MTQgMjMuOTIzMSAxNi42NjM0QzI0LjA1OTQgMTQuODExMyAyMi42MjgyIDEzLjIyMzggMjAuNzg4IDEyLjk1OTJaTTEuMjk0OTkgMTYuNzI5NkMxLjI5NDk5IDE1LjUzODkgMi4xODA5OSAxNC41NDY3IDMuMjcxNDkgMTQuMjgyMVYxOS4yNDMyQzIuMTgwOTkgMTguOTEyNSAxLjI5NDk5IDE3LjkyMDIgMS4yOTQ5OSAxNi43Mjk2Wk0yMC43ODggMTkuMTEwOVYxNC4xNDk4QzIxLjk0NjYgMTQuNDE0NCAyMi43NjQ1IDE1LjQwNjYgMjIuNzY0NSAxNi41OTczQzIyLjc2NDUgMTcuNzg4IDIxLjk0NjYgMTguODQ2MyAyMC43ODggMTkuMTEwOVpcIixcbiAgICBmaWxsOiBcImN1cnJlbnRDb2xvclwiXG4gIH1cbikgfSksIFF6ID0gKCkgPT4gLyogQF9fUFVSRV9fICovIGMoXCJzdmdcIiwgeyB2aWV3Qm94OiBcIjAgMCAyNiAyNFwiLCBmaWxsOiBcIm5vbmVcIiwgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiwgY2hpbGRyZW46IC8qIEBfX1BVUkVfXyAqLyBjKFxuICBcInBhdGhcIixcbiAge1xuICAgIGZpbGxSdWxlOiBcImV2ZW5vZGRcIixcbiAgICBjbGlwUnVsZTogXCJldmVub2RkXCIsXG4gICAgZDogXCJNMTMuMzQ5IDIxLjk0MzVDMTMuMjczNyAyMi4wMTQ3IDEzLjEzNyAyMi4wOCAxMi45OTggMjIuMDhDMTIuOTIyNiAyMi4wOCAxMi44NjU0IDIyLjA2MDggMTIuODEyNiAyMi4wMzQ4QzEyLjc4OTUgMjIuMDIzNCAxMi43NjY2IDIyLjAxMDMgMTIuNzQ0NyAyMS45OTc4TDEyLjczOTEgMjEuOTk0NkMxMi43MTQ4IDIxLjk4MDggMTIuNjkwNCAyMS45NjcxIDEyLjY2MjcgMjEuOTUzNEwxMi42NTExIDIxLjk0NzdMMTIuNjUxNyAyMS45NDY5QzguNjkyNzUgMTkuMTM2NSA1Ljc2MTgxIDE2Ljg4MzcgMy44MjA4MSAxNC43OTExQzEuODc4MTEgMTIuNjk2NiAwLjkxOTkyMiAxMC43NTUgMC45MTk5MjIgOC41NjgwM0MwLjkxOTkyMiA0Ljc5OTQzIDMuNjUxOTkgMS45MiA3LjI5ODkxIDEuOTJDMTAuMjA1NiAxLjkyIDEyLjE4MjMgMy4yMzkyIDEzLjA1OCAzLjk2NjYzQzEzLjkzMzcgMy4yMzkyIDE1LjkxMDQgMS45MiAxOC44MTcxIDEuOTJDMjIuNDYzMiAxLjkyIDI1LjE5NjggNC43OTg5NSAyNS4wNzYxIDguNTY5M0MyNS4wNzU3IDEwLjc1NTcgMjQuMTE3NiAxMi43MTE3IDIyLjE3NTMgMTQuODEzMkMyMC4yMzUgMTYuOTEyNCAxNy4zMDU3IDE5LjE2NDIgMTMuMzQ5IDIxLjk0MzVaTTEzLjYyODkgNS4xOTQ3NkMxMy40NzEgNS4yOTQzOSAxMy4zMjE2IDUuMzkzNTkgMTMuMTE4IDUuMzkzNTlDMTIuOTE5NCA1LjM5MzU5IDEyLjc5MjIgNS4zMDQzOSAxMi42Mjg5IDUuMTk0NzZDMTAuOTIxNiA0LjA0ODkzIDkuNTQ5MDUgMy4xNDUwOCA3LjM1ODkgMy4xNDUwOEM0LjQ2ODMzIDMuMTQ1MDggMi4yNzk3MyA1LjQ3MTE5IDIuMjc5NzMgOC41NjgwM0MyLjI3OTczIDEwLjQzMzEgMy4xNTAxIDEyLjE2IDQuOTUwMSAxNC4wNzU0QzYuNzQzNjIgMTUuOTgzOSA5LjQ1MTg1IDE4LjA3MDkgMTMuMTE4IDIwLjY1OTVDMTYuNzg0MSAxOC4wNzA5IDE5LjQ5MjMgMTUuOTgzOSAyMS4yODU5IDE0LjA3NTRDMjMuMDg1OSAxMi4xNiAyMy45NTYyIDEwLjQzMzEgMjMuOTU2MiA4LjU2ODAzQzIzLjk1NjIgNS40NzExOSAyMS43Njc2IDMuMTQ1MDggMTguODc3MSAzLjE0NTA4QzE2LjE3MjIgMy4xNDUwOCAxNC4yMzg1IDQuODEwMiAxMy42Mjg5IDUuMTk0NzZaXCIsXG4gICAgZmlsbDogXCJjdXJyZW50Y29sb3JcIlxuICB9XG4pIH0pLCBaeiA9ICgpID0+IC8qIEBfX1BVUkVfXyAqLyBlMShcInN2Z1wiLCB7IHZpZXdCb3g6IFwiMCAwIDI0IDI0XCIsIGZpbGw6IFwibm9uZVwiLCB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLCBjaGlsZHJlbjogW1xuICAvKiBAX19QVVJFX18gKi8gYyhcbiAgICBcInBhdGhcIixcbiAgICB7XG4gICAgICBmaWxsUnVsZTogXCJldmVub2RkXCIsXG4gICAgICBjbGlwUnVsZTogXCJldmVub2RkXCIsXG4gICAgICBkOiBcIk0xMiAyMi42QzE3Ljg1NDIgMjIuNiAyMi42IDE3Ljg1NDIgMjIuNiAxMkMyMi42IDYuMTQ1NzggMTcuODU0MiAxLjQgMTIgMS40QzYuMTQ1NzggMS40IDEuNCA2LjE0NTc4IDEuNCAxMkMxLjQgMTcuODU0MiA2LjE0NTc4IDIyLjYgMTIgMjIuNlpNMTIgMjRDMTguNjI3NCAyNCAyNCAxOC42Mjc0IDI0IDEyQzI0IDUuMzcyNTggMTguNjI3NCAwIDEyIDBDNS4zNzI1OCAwIDAgNS4zNzI1OCAwIDEyQzAgMTguNjI3NCA1LjM3MjU4IDI0IDEyIDI0WlwiLFxuICAgICAgZmlsbDogXCJjdXJyZW50Q29sb3JcIlxuICAgIH1cbiAgKSxcbiAgLyogQF9fUFVSRV9fICovIGMoXG4gICAgXCJwYXRoXCIsXG4gICAge1xuICAgICAgZDogXCJNOS44NzYyMiA3LjUwNjAxTDkuOTUzNjEgNy40NjUzOEMxMC4yNzc4IDcuMjk1MTkgMTAuNjM4OSA3LjE1ODcyIDExLjAzNjQgNy4wNTU0N0MxMS40NDU0IDYuOTUxNyAxMS44Nzc5IDYuODk5OSAxMi4zMzI1IDYuODk5OUMxMi44NzA2IDYuODk5OSAxMy4zMTgyIDYuOTc0NTIgMTMuNjcwMiA3LjEyOTM0QzE0LjAyNDYgNy4yNzIwNCAxNC4zMTIyIDcuNDU5NDQgMTQuNTI4OCA3LjY5MzhDMTQuNzQzNiA3LjkyNjEzIDE0Ljg5MTQgOC4xODg5OCAxNC45NzA0IDguNDgxNjVDMTUuMDU2NSA4Ljc1NzIyIDE1LjEwMDEgOS4wMjUyMSAxNS4xMDAxIDkuMjg1MjJDMTUuMTAwMSA5LjYxMjI4IDE1LjAzNyA5LjkwOTE1IDE0LjkwODUgMTAuMTczOEwxNC45MDc4IDEwLjE3NTFDMTQuNzgzMyAxMC40MjIyIDE0LjYzMDEgMTAuNjU0NyAxNC40NDg0IDEwLjg3MjhDMTQuMjY4NCAxMS4wODg5IDE0LjA2OTYgMTEuMjk1NCAxMy44NTIxIDExLjQ5MjNDMTMuNjQxMyAxMS42ODMyIDEzLjQ0OSAxMS44ODMgMTMuMjc1MiAxMi4wOTE2TDEzLjI3MzggMTIuMDkzM0MxMy4xMDI5IDEyLjI4OTYgMTIuOTU4NyAxMi41MDg0IDEyLjg0MTQgMTIuNzQ5OUwxMi44NDA4IDEyLjc1MTNDMTIuNzI3NyAxMi45NzU2IDEyLjY2OTkgMTMuMjMyMyAxMi42Njk5IDEzLjUyMzRWMTMuNjc1OEMxMi42Njk5IDEzLjcyNTcgMTIuNjc0MSAxMy43Njk3IDEyLjY4MTkgMTMuODA4NEwxMi43MDYxIDEzLjkyODJIMTEuNDEyN0wxMS4zOTY1IDEzLjg0NzlDMTEuMzU3OCAxMy42NTYzIDExLjMzODYgMTMuNDU1NyAxMS4zMzg2IDEzLjI0NjRDMTEuMzM4NiAxMi45MzkzIDExLjM5MTkgMTIuNjU3OSAxMS41MDAzIDEyLjQwMzlMMTEuNTAxNiAxMi40MDA5QzExLjYxNjcgMTIuMTUzNSAxMS43NjA3IDExLjkyNSAxMS45MzM0IDExLjcxNTVDMTIuMTAzNCAxMS41MDAyIDEyLjI4MzEgMTEuMzAzMiAxMi40NzI1IDExLjEyNDdDMTIuNjU3MiAxMC45NDE1IDEyLjgzMjYgMTAuNzU4NCAxMi45OTg3IDEwLjU3NTRDMTMuMTYwOCAxMC4zOTY3IDEzLjI5MDUgMTAuMjEwMiAxMy4zODg1IDEwLjAxNThMMTMuMzkwMSAxMC4wMTI2QzEzLjQ5MzQgOS44MjQ3OCAxMy41NDUzIDkuNjE5ODcgMTMuNTQ1MyA5LjM5NjAyQzEzLjU0NTMgOS4wMzIwNSAxMy40Mjg0IDguNzQ1NDUgMTMuMTk5MiA4LjUyNjUyTDEzLjE5NzggOC41MjUyMUMxMi45NzEyIDguMzAwNDUgMTIuNjMyNiA4LjE4MDIzIDEyLjE2NDkgOC4xODAyM0MxMS41NjgyIDguMTgwMjMgMTAuOTgzNyA4LjMzMjQ4IDEwLjQxMDQgOC42MzkzMkwxMC4zMDg3IDguNjkzNzRMOS44NzYyMiA3LjUwNjAxWlwiLFxuICAgICAgZmlsbDogXCJjdXJyZW50Q29sb3JcIlxuICAgIH1cbiAgKSxcbiAgLyogQF9fUFVSRV9fICovIGMoXG4gICAgXCJwYXRoXCIsXG4gICAge1xuICAgICAgZDogXCJNMTMuMTQ0OCAxNi4wNzE5QzEzLjE0NDggMTYuMzQ2MSAxMy4wNTE3IDE2LjU4NyAxMi44Njc0IDE2Ljc5MDFDMTIuNjc3OCAxNi45OTkgMTIuNDIxIDE3LjA5OTkgMTIuMTA5IDE3LjA5OTlDMTEuNzk3MSAxNy4wOTk5IDExLjU0MDIgMTYuOTk5IDExLjM1MDYgMTYuNzkwMUMxMS4xNjYzIDE2LjU4NyAxMS4wNzMzIDE2LjM0NjEgMTEuMDczMyAxNi4wNzE5QzExLjA3MzMgMTUuNzk3OCAxMS4xNjYzIDE1LjU1NjggMTEuMzUwNiAxNS4zNTM4QzExLjU0MDIgMTUuMTQ0OCAxMS43OTcxIDE1LjA0MzkgMTIuMTA5IDE1LjA0MzlDMTIuNDIxIDE1LjA0MzkgMTIuNjc3OCAxNS4xNDQ4IDEyLjg2NzQgMTUuMzUzOEMxMy4wNTE3IDE1LjU1NjggMTMuMTQ0OCAxNS43OTc4IDEzLjE0NDggMTYuMDcxOVpcIixcbiAgICAgIGZpbGw6IFwiY3VycmVudENvbG9yXCJcbiAgICB9XG4gIClcbl0gfSksIGp6ID0gKCkgPT4gLyogQF9fUFVSRV9fICovIGMoXCJzdmdcIiwgeyB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLCB2aWV3Qm94OiBcIjAgMCAyNCAyNFwiLCBmaWxsOiBcIm5vbmVcIiwgY2hpbGRyZW46IC8qIEBfX1BVUkVfXyAqLyBjKFxuICBcInBhdGhcIixcbiAge1xuICAgIGZpbGxSdWxlOiBcImV2ZW5vZGRcIixcbiAgICBjbGlwUnVsZTogXCJldmVub2RkXCIsXG4gICAgZDogXCJNMTIgMEM1LjQgMCAwIDUuNCAwIDEyQzAgMTguNiA1LjQgMjQgMTIgMjRDMTguNiAyNCAyNCAxOC42IDI0IDEyQzI0IDUuNCAxOC42IDAgMTIgMFpNMTAuOCAxNi4xQzEwLjggMTUuOCAxMC45IDE1LjUgMTEuMiAxNS4yQzExLjQgMTQuOSAxMS44IDE0LjggMTIuMiAxNC44QzEyLjYgMTQuOCAxMi45IDE0LjkgMTMuMiAxNS4yQzEzLjQgMTUuNSAxMy41IDE1LjggMTMuNSAxNi4xQzEzLjUgMTYuNSAxMy40IDE2LjggMTMuMiAxN0MxMyAxNy4zIDEyLjYgMTcuNCAxMi4yIDE3LjRDMTEuOCAxNy40IDExLjUgMTcuMyAxMS4yIDE3QzEwLjkgMTYuNyAxMC44IDE2LjQgMTAuOCAxNi4xWk0xNS4yIDkuNUMxNS4xIDkuOCAxNC45IDEwIDE0LjcgMTAuM0MxNC41IDEwLjUgMTQuMyAxMC43IDE0LjEgMTAuOUMxMy45IDExLjEgMTMuNyAxMS4zIDEzLjYgMTEuNUMxMy40IDExLjcgMTMuMyAxMS45IDEzLjIgMTIuMUMxMyAxMi4yIDEzIDEyLjUgMTMgMTIuN1YxMy4xTDEzLjEgMTMuNEgxMS4yVjEzLjJDMTEuMiAxMi45IDExLjEgMTIuNyAxMS4xIDEyLjVDMTEuMSAxMi4yIDExLjIgMTEuOCAxMS4zIDExLjZDMTEuNCAxMS4zIDExLjYgMTEuMSAxMS44IDEwLjhDMTIgMTAuNiAxMi4yIDEwLjQgMTIuNCAxMC4yQzEyLjYgMTAgMTIuNyA5LjggMTIuOSA5LjdDMTMgOS42IDEzLjIgOS40IDEzLjMgOS4yQzEzLjQgOSAxMy40IDguOSAxMy40IDguN0MxMy40IDguNCAxMy4zIDguMiAxMy4xIDhDMTIuOSA3LjggMTIuNiA3LjcgMTIuMyA3LjdDMTEuOCA3LjcgMTEuMiA3LjggMTAuNyA4LjFMMTAuMyA4LjNMOS41IDYuNkw5LjcgNi41QzEwLjIgNi4yIDEwLjUgNi4xIDExIDZDMTEuNCA1LjkgMTEuOSA1LjggMTIuNCA1LjhDMTMgNS44IDEzLjUgNS45IDEzLjkgNi4xQzE0LjMgNi4zIDE0LjYgNi41IDE0LjkgNi43QzE1IDcgMTUuMiA3LjMgMTUuMiA3LjZDMTUuMyA3LjkgMTUuMyA4LjIgMTUuMyA4LjVDMTUuNCA4LjggMTUuMyA5LjIgMTUuMiA5LjVaXCIsXG4gICAgZmlsbDogXCJjdXJyZW50Q29sb3JcIlxuICB9XG4pIH0pLCBLeiA9ICgpID0+IC8qIEBfX1BVUkVfXyAqLyBlMShcInN2Z1wiLCB7IHZpZXdCb3g6IFwiMCAwIDI0IDI0XCIsIGZpbGw6IFwibm9uZVwiLCB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLCBjaGlsZHJlbjogW1xuICAvKiBAX19QVVJFX18gKi8gYyhcbiAgICBcImNpcmNsZVwiLFxuICAgIHtcbiAgICAgIGN4OiBcIjEyXCIsXG4gICAgICBjeTogXCIxMlwiLFxuICAgICAgcjogXCIxMS4zXCIsXG4gICAgICBzdHJva2U6IFwiY3VycmVudENvbG9yXCIsXG4gICAgICBzdHJva2VXaWR0aDogXCIxLjRcIlxuICAgIH1cbiAgKSxcbiAgLyogQF9fUFVSRV9fICovIGMoXG4gICAgXCJwYXRoXCIsXG4gICAge1xuICAgICAgZmlsbFJ1bGU6IFwiZXZlbm9kZFwiLFxuICAgICAgY2xpcFJ1bGU6IFwiZXZlbm9kZFwiLFxuICAgICAgZDogXCJNMTAuMTU1NyA3Ljk5ODU2QzkuNzI2OTggOC4zNTA4IDkuNDU0NTUgOC44NTk1MyA5LjQ1NDU1IDkuNTI5NDFDOS40NTQ1NSA5LjkxOTI3IDkuMTI4OTUgMTAuMjM1MyA4LjcyNzI3IDEwLjIzNTNDOC4zMjU2IDEwLjIzNTMgOCA5LjkxOTI3IDggOS41Mjk0MUM4IDguNDQ0OTYgOC40NjAyMiA3LjU0MTkzIDkuMjE1OTMgNi45MjEwNEM5Ljk2MDE1IDYuMzA5NiAxMC45NTMzIDYgMTIgNkMxNC4yMDkyIDYgMTYgNy43MzgxNiAxNiA5Ljg4MjM1QzE2IDExLjUzMTMgMTQuNzU3OCAxMi44NTIgMTMuMzMxMyAxMy40Mjc4QzEyLjcwNDkgMTMuNjgwNiAxMi4zNjM2IDE0LjExMDMgMTIuMzYzNiAxNC40NzA2VjE0LjgyMzVDMTIuMzYzNiAxNS4yMTM0IDEyLjAzOCAxNS41Mjk0IDExLjYzNjQgMTUuNTI5NEMxMS4yMzQ3IDE1LjUyOTQgMTAuOTA5MSAxNS4yMTM0IDEwLjkwOTEgMTQuODIzNVYxNC40NzA2QzEwLjkwOTEgMTMuMjcxNCAxMS45MTU2IDEyLjQ3MDIgMTIuNzcyNyAxMi4xMjQyQzEzLjgyMDggMTEuNzAxMiAxNC41NDU1IDEwLjgwNjMgMTQuNTQ1NSA5Ljg4MjM1QzE0LjU0NTUgOC41MTc4OCAxMy40MDU4IDcuNDExNzYgMTIgNy40MTE3NkMxMS4yMzkyIDcuNDExNzYgMTAuNTk2IDcuNjM2OCAxMC4xNTU3IDcuOTk4NTZaTTEyLjM2MzYgMTcuMjk0MUMxMi4zNjM2IDE3LjY4NCAxMi4wMzggMTggMTEuNjM2NCAxOEMxMS4yMzQ3IDE4IDEwLjkwOTEgMTcuNjg0IDEwLjkwOTEgMTcuMjk0MUMxMC45MDkxIDE2LjkwNDMgMTEuMjM0NyAxNi41ODgyIDExLjYzNjQgMTYuNTg4MkMxMi4wMzggMTYuNTg4MiAxMi4zNjM2IDE2LjkwNDMgMTIuMzYzNiAxNy4yOTQxWlwiLFxuICAgICAgZmlsbDogXCJjdXJyZW50Q29sb3JcIlxuICAgIH1cbiAgKVxuXSB9KSwgSnogPSAoKSA9PiAvKiBAX19QVVJFX18gKi8gZTEoXCJzdmdcIiwgeyB2aWV3Qm94OiBcIjAgMCAyNCAyNFwiLCBmaWxsOiBcIm5vbmVcIiwgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiwgY2hpbGRyZW46IFtcbiAgLyogQF9fUFVSRV9fICovIGMoXG4gICAgXCJwYXRoXCIsXG4gICAge1xuICAgICAgZDogXCJNMi41ODQwNSA2LjQ5NjQ4TDcuNDI5MDQgNS4zMzA4QzcuNzg4NDkgNS4yNDQzMiA4LjE0OTk5IDUuNDY1NiA4LjIzNjQ3IDUuODI1MDZDOC4zMjI5NiA2LjE4NDUxIDguMTAxNjcgNi41NDYwMSA3Ljc0MjIyIDYuNjMyNDlMMS4zMDI0NiA4LjE4MTg2QzAuODE5NTk5IDguMjk4MDQgMC4zNTQxNTkgNy45MzQ5IDAuMzQ5NDEyIDcuNDM4MjdMMC4yODc2MjkgMC45NzQxNDRDMC4yODQwOTUgMC42MDQ0NTIgMC41ODA5MjUgMC4zMDE4OTQgMC45NTA2MTcgMC4yOTgzNjFDMS4zMjAzMSAwLjI5NDgyNyAxLjYyMjg3IDAuNTkxNjU3IDEuNjI2NCAwLjk2MTM0OEwxLjY2OTE3IDUuNDM1NzJDNS4xMjYxNiAwLjEzNjM1MSAxMi4xNjU3IC0xLjU5MjQ4IDE3LjcxMTYgMS42MDk0M0MyMy40NTAxIDQuOTIyNTggMjUuNDE2MyAxMi4yNjA0IDIyLjEwMzEgMTcuOTk5QzE4Ljc5IDIzLjczNzUgMTEuNDUyMSAyNS43MDM3IDUuNzEzNTcgMjIuMzkwNkM1LjM5MzQgMjIuMjA1NyA1LjI4MzcgMjEuNzk2MyA1LjQ2ODU1IDIxLjQ3NjFDNS42NTM0IDIxLjE1NTkgNi4wNjI4MSAyMS4wNDYyIDYuMzgyOTkgMjEuMjMxMUMxMS40ODEyIDI0LjE3NDYgMTguMDAwMiAyMi40Mjc4IDIwLjk0MzcgMTcuMzI5NkMyMy44ODcxIDEyLjIzMTQgMjIuMTQwNCA1LjcxMjM0IDE3LjA0MjIgMi43Njg4OUMxMi4wMDI0IC0wLjE0MDgzMSA1LjU3NDEyIDEuNTMyOCAyLjU4NDA1IDYuNDk2NDhaXCIsXG4gICAgICBmaWxsOiBcImN1cnJlbnRDb2xvclwiXG4gICAgfVxuICApLFxuICAvKiBAX19QVVJFX18gKi8gYyhcbiAgICBcInBhdGhcIixcbiAgICB7XG4gICAgICBkOiBcIk0xNy41ODc5IDExLjQxOTRIMTIuMzAwM1Y2LjEzMTg0QzEyLjMwMDMgNS44MjQ0MyAxMi4wNTQ0IDUuNTc4NSAxMS43NDcgNS41Nzg1QzExLjQzOTYgNS41Nzg1IDExLjE5MzYgNS44MjQ0MyAxMS4xOTM2IDYuMTMxODRWMTIuMDM0MkMxMS4xOTM2IDEyLjM0MTYgMTEuNDM5NiAxMi41ODc1IDExLjc0NyAxMi41ODc1SDE3LjY0OTNDMTcuOTU2OCAxMi41ODc1IDE4LjIwMjcgMTIuMzQxNiAxOC4yMDI3IDEyLjAzNDJDMTguMjAyNyAxMS43MjY4IDE3Ljg5NTMgMTEuNDE5NCAxNy41ODc5IDExLjQxOTRaXCIsXG4gICAgICBmaWxsOiBcImN1cnJlbnRDb2xvclwiXG4gICAgfVxuICApXG5dIH0pLCBfeiA9ICgpID0+IC8qIEBfX1BVUkVfXyAqLyBjKFwic3ZnXCIsIHsgdmlld0JveDogXCIwIDAgMjQgMjRcIiwgZmlsbDogXCJub25lXCIsIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsIGNoaWxkcmVuOiAvKiBAX19QVVJFX18gKi8gYyhcbiAgXCJwYXRoXCIsXG4gIHtcbiAgICBmaWxsUnVsZTogXCJldmVub2RkXCIsXG4gICAgY2xpcFJ1bGU6IFwiZXZlbm9kZFwiLFxuICAgIGQ6IFwiTTIzLjc1MjQgMTAuMDgxMUwxMi4zMDQ5IDEuNTk4NTJMMTIuMzAxNyAxLjU5NjI1QzEyLjE5NjcgMS41MjYyOCAxMi4wNjE4IDEuNDkzOTEgMTEuOTMxMyAxLjQ5MzkxQzExLjgwMDkgMS40OTM5MSAxMS42NjU5IDEuNTI2MTggMTEuNTYwOSAxLjU5NjE1TDAuMjI4NzA3IDEwLjA4MTJDLTAuMTc5NTI1IDEwLjM0NyAtMC4wMzg2NzgyIDExLjE3NDcgMC42MzA2MTggMTEuMTc0N0gyLjg2NDcxVjIxLjg5MjdDMi44NjQ3MSAyMi4yMzMyIDMuMTM3NTUgMjIuNTA2MSAzLjQ3ODA0IDIyLjUwNjFIMjAuNTAzM0MyMC44NDM4IDIyLjUwNjEgMjEuMTE2NiAyMi4yMzMyIDIxLjExNjYgMjEuODkyN1YxMS4xNzQ3SDIzLjM1MDdDMjQuMDI3IDExLjE3NDcgMjQuMTk5MyAxMC4zNzE4IDIzLjc1MjQgMTAuMDgxMVpNMjEuMzMzOSA5Ljk0Nzk2TDExLjkwMTcgMi44Mjk3NkwyLjQ2OTQzIDkuOTQ3OTZIMjEuMzMzOVpNMTkuODMwNiAxMS4yMzRWMjEuMzM4N0gxNS40MjE4VjE2LjMxNkMxNS40MjE4IDE1Ljk3NTUgMTUuMTQ4OSAxNS43MDI2IDE0LjgwODQgMTUuNzAyNkg5LjExMzU3QzguNzczMDggMTUuNzAyNiA4LjUwMDI0IDE1Ljk3NTUgOC41MDAyNCAxNi4zMTZWMjEuMzM4N0g0LjA5MTM3VjExLjIzNEgxOS44MzA2Wk05LjcyNjkgMjEuMzM4N0gxNC4xMzU4VjE2LjkyOTRIOS43MjY5VjIxLjMzODdaXCIsXG4gICAgZmlsbDogXCJjdXJyZW50Q29sb3JcIlxuICB9XG4pIH0pLCAkeiA9ICgpID0+IC8qIEBfX1BVUkVfXyAqLyBlMShcInN2Z1wiLCB7IHZpZXdCb3g6IFwiMCAwIDI0IDI0XCIsIGZpbGw6IFwibm9uZVwiLCB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLCBjaGlsZHJlbjogW1xuICAvKiBAX19QVVJFX18gKi8gYyhcImdcIiwgeyBjbGlwUGF0aDogXCJ1cmwoI2NsaXAwXzIzNDZfMTI5NTU1KVwiLCBjaGlsZHJlbjogLyogQF9fUFVSRV9fICovIGMoXG4gICAgXCJwYXRoXCIsXG4gICAge1xuICAgICAgZDogXCJNMjMuOCA5LjZMMTIuMyAxLjFDMTIuMiAxIDEyLjEgMSAxMS45IDFDMTEuNyAxIDExLjYgMSAxMS41IDEuMUwwLjIwMDA0NyA5LjZDLTAuMTk5OTUzIDkuOSA0LjcwMjgxZS0wNSAxMC43IDAuNjAwMDQ3IDEwLjdIMi44MDAwNVYyMS40QzIuODAwMDUgMjEuNyAzLjEwMDA1IDIyIDMuNDAwMDUgMjJIOS42MDAwNVYxNi40SDE0VjIySDIwLjRDMjAuNyAyMiAyMSAyMS43IDIxIDIxLjRWMTAuN0gyMy4yQzI0IDEwLjcgMjQuMiA5LjkgMjMuOCA5LjZaXCIsXG4gICAgICBmaWxsOiBcImN1cnJlbnRDb2xvclwiXG4gICAgfVxuICApIH0pLFxuICAvKiBAX19QVVJFX18gKi8gYyhcImRlZnNcIiwgeyBjaGlsZHJlbjogLyogQF9fUFVSRV9fICovIGMoXCJjbGlwUGF0aFwiLCB7IGlkOiBcImNsaXAwXzIzNDZfMTI5NTU1XCIsIGNoaWxkcmVuOiAvKiBAX19QVVJFX18gKi8gYyhcInJlY3RcIiwgeyB3aWR0aDogXCIyNFwiLCBoZWlnaHQ6IFwiMjRcIiwgZmlsbDogXCJ3aGl0ZVwiIH0pIH0pIH0pXG5dIH0pLCBlaCA9ICgpID0+IC8qIEBfX1BVUkVfXyAqLyBlMShcInN2Z1wiLCB7IHZpZXdCb3g6IFwiMCAwIDI0IDI0XCIsIGZpbGw6IFwibm9uZVwiLCB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLCBjaGlsZHJlbjogW1xuICAvKiBAX19QVVJFX18gKi8gYyhcbiAgICBcInBhdGhcIixcbiAgICB7XG4gICAgICBmaWxsUnVsZTogXCJldmVub2RkXCIsXG4gICAgICBjbGlwUnVsZTogXCJldmVub2RkXCIsXG4gICAgICBkOiBcIk0wLjU4NjIyOCAzLjA0OThIMjMuNDEzOEMyMy43MTE4IDMuMDQ5OCAyMy45NTAyIDMuMjg0ODggMjMuOTUwMiAzLjU3ODc0VjIwLjQ0NjFDMjMuOTUwMiAyMC43NCAyMy43MTE4IDIwLjk3NTEgMjMuNDEzOCAyMC45NzUxSDAuNTg2MjI4QzAuNTU2NDI3IDIwLjk3NTEgMC41MjY2MjggMjAuOTYwNCAwLjQ5NjgyOCAyMC45NDU3QzAuNDY3MDI5IDIwLjkzMSAwLjQzNzIzIDIwLjkxNjMgMC40MDc0MjkgMjAuOTE2M0gwLjI4ODIxOEwwLjIyODYxMiAyMC44NTc1QzAuMjI4NjEyIDIwLjg1NzUgMC4xNjkwMDcgMjAuODU3NSAwLjE2OTAwNyAyMC43OTg4QzAuMTY5MDA3IDIwLjc5ODggMC4xMDk0MTkgMjAuNzk4OCAwLjEwOTQxOSAyMC43NEMwLjA0OTg2MjkgMjAuNjgxMyAwLjA0OTgxMzcgMjAuNjgxMiAwLjA0OTgxMzcgMjAuNjIyNVYzLjU3ODc0QzAuMDQ5ODEzNyAzLjI4NDg4IDAuMjg4MjE4IDMuMDQ5OCAwLjU4NjIyOCAzLjA0OThaTTE4LjEwOTIgOC44NjgxN0wyMi44Nzc0IDEzLjU2OTlWNC4xMDc2OEgxLjE4MjI1VjE4LjYyNDJMNS44OTA4IDExLjY4OTJDNi4wMSAxMS41NzE2IDYuMTI5MjEgMTEuNDU0MSA2LjMwODAyIDExLjQ1NDFDNi40MjcyMiAxMS40NTQxIDYuNjA2MDIgMTEuNTEyOSA2LjcyNTIyIDExLjYzMDRMMTEuOTcwMiAxNi44MDIzTDE3LjI3NDggOC45MjY5NEMxNy4zOTQgOC44MDk0IDE3LjUxMzIgOC42OTE4NCAxNy42OTIgOC42OTE4NEMxNy44MTEyIDguNjkxODQgMTcuOTkgOC43NTA2MiAxOC4xMDkyIDguODY4MTdaTTYuNDI3MjEgMTIuODY0NkwxLjY1OTA2IDE5LjkxNzJWMTkuOTc2SDIyLjg3NzRWMTUuMDk3OUwxNy44MTEyIDEwLjEwMjRMMTIuNTA2NiAxNy45Nzc3QzEyLjM4NzQgMTguMDk1MyAxMi4yNjgyIDE4LjIxMjggMTIuMDg5NCAxOC4yMTI4QzExLjk3MDIgMTguMjEyOCAxMS43OTE0IDE4LjE1NDEgMTEuNjcyMiAxOC4wMzY1TDYuNDI3MjEgMTIuODY0NlpNNi44NDQ1NiA3LjgxMDIzQzYuODQ0NTYgOC44NjgwOSA1Ljk1MDU2IDkuNzQ5NjUgNC44Nzc3NiA5Ljc0OTY1QzMuODA0OTUgOS43NDk2NSAyLjkxMDk0IDguODY4MDkgMi45MTA5NCA3LjgxMDIzQzIuOTEwOTQgNi43NTIzOCAzLjgwNDk1IDUuODcwODQgNC44Nzc3NiA1Ljg3MDg0QzUuOTUwNTYgNS44NzA4NCA2Ljg0NDU2IDYuNzUyMzggNi44NDQ1NiA3LjgxMDIzWk01Ljc3MTc2IDcuODY5MDFDNS43NzE3NiA3LjM5ODg1IDUuMzU0NTYgNi45ODc0NiA0Ljg3Nzc2IDYuOTg3NDZDNC40MDA5NiA2Ljk4NzQ2IDMuOTgzNzUgNy4zOTg4NSAzLjk4Mzc1IDcuODY5MDFDMy45ODM3NSA4LjMzOTE2IDQuNDAwOTYgOC43NTA1NSA0Ljg3Nzc2IDguNzUwNTVDNS4zNTQ1NiA4Ljc1MDU1IDUuNzcxNzYgOC4zMzkxNiA1Ljc3MTc2IDcuODY5MDFaXCIsXG4gICAgICBmaWxsOiBcImN1cnJlbnRDb2xvclwiXG4gICAgfVxuICApLFxuICAvKiBAX19QVVJFX18gKi8gYyhcbiAgICBcInBhdGhcIixcbiAgICB7XG4gICAgICBmaWxsUnVsZTogXCJldmVub2RkXCIsXG4gICAgICBjbGlwUnVsZTogXCJldmVub2RkXCIsXG4gICAgICBkOiBcIk0wLjI2Nzc5OCAyMC45NjYxTDAuMjA1NTA0IDIwLjkwNDdDMC4xOTczNzkgMjAuOTAzIDAuMTg3MjggMjAuOSAwLjE3Njc4OSAyMC44OTQ4QzAuMTYzNDg4IDIwLjg4ODMgMC4xNDg1NjkgMjAuODc3NiAwLjEzNzA3MSAyMC44NjA2QzAuMTMyNzcgMjAuODU0MyAwLjEyOTIyMyAyMC44NDc0IDAuMTI2NDU1IDIwLjg0MDFDMC4xMjM0MyAyMC44MzkgMC4xMjAzMjYgMjAuODM3NiAwLjExNzE4OCAyMC44MzYxQzAuMTAzODg4IDIwLjgyOTUgMC4wODg5NzE5IDIwLjgxODggMC4wNzc0NzY4IDIwLjgwMThDMC4wNjk2OTA2IDIwLjc5MDMgMC4wNjQzNzU3IDIwLjc3NzIgMC4wNjE2ODIzIDIwLjc2MjhDMC4wNTI2MjM0IDIwLjc1MzggMC4wNDQ3MjA3IDIwLjc0NTggMC4wMzgxNjQzIDIwLjczODZDMC4wMjg2MDgzIDIwLjcyODIgMC4wMTk1NTU2IDIwLjcxNjkgMC4wMTI4NDg3IDIwLjcwMzdDLTAuMDAwMTM4NzY1IDIwLjY3ODEgLTYuMDkzNjdlLTA1IDIwLjY1MTkgMS4wNzExM2UtMDUgMjAuNjI3N0MxLjU5ODI5ZS0wNSAyMC42MjYgMi4xMjIxMmUtMDUgMjAuNjI0MiAyLjEyMjEyZS0wNSAyMC42MjI0VjMuNTc4NzRDMi4xMjIxMmUtMDUgMy4yNTY3MiAwLjI2MTM3OSAzIDAuNTg2MjI4IDNIMjMuNDEzOEMyMy43Mzg2IDMgMjQgMy4yNTY3MiAyNCAzLjU3ODc0VjIwLjQ0NjFDMjQgMjAuNzY4MSAyMy43Mzg2IDIxLjAyNDkgMjMuNDEzOCAyMS4wMjQ5SDAuNTg2MjI4QzAuNTQ0NTYzIDIxLjAyNDkgMC41MDU1MDggMjEuMDA1NSAwLjQ3ODU5MSAyMC45OTIyTDAuNDc0ODA3IDIwLjk5MDNDMC40NDIxNzMgMjAuOTc0MyAwLjQyMzM3IDIwLjk2NjEgMC40MDc0MjkgMjAuOTY2MUgwLjI2Nzc5OFpNMC4xNjkwMDcgMjAuNzk4OEMwLjE2OTAwNyAyMC44NTc1IDAuMjI4NjEyIDIwLjg1NzUgMC4yMjg2MTIgMjAuODU3NUwwLjI4ODIxOCAyMC45MTYzSDAuNDA3NDI5QzAuNDM3MjMgMjAuOTE2MyAwLjQ2NzAyOSAyMC45MzEgMC40OTY4MjggMjAuOTQ1N0MwLjUyNjYyOCAyMC45NjA0IDAuNTU2NDI3IDIwLjk3NTEgMC41ODYyMjggMjAuOTc1MUgyMy40MTM4QzIzLjcxMTggMjAuOTc1MSAyMy45NTAyIDIwLjc0IDIzLjk1MDIgMjAuNDQ2MVYzLjU3ODc0QzIzLjk1MDIgMy4yODQ4OCAyMy43MTE4IDMuMDQ5OCAyMy40MTM4IDMuMDQ5OEgwLjU4NjIyOEMwLjI4ODIxOCAzLjA0OTggMC4wNDk4MTM3IDMuMjg0ODggMC4wNDk4MTM3IDMuNTc4NzRWMjAuNjIyNUMwLjA0OTgxMzcgMjAuNjgxMiAwLjA0OTg2MjkgMjAuNjgxMyAwLjEwOTQxOSAyMC43NEMwLjEwOTQxOSAyMC43OTg4IDAuMTY5MDA3IDIwLjc5ODggMC4xNjkwMDcgMjAuNzk4OFpNMTcuMjc0OCA4LjkyNjk0QzE3LjM5NCA4LjgwOTQgMTcuNTEzMiA4LjY5MTg0IDE3LjY5MiA4LjY5MTg0QzE3LjgxMTIgOC42OTE4NCAxNy45OSA4Ljc1MDYyIDE4LjEwOTIgOC44NjgxN0wyMi44Nzc0IDEzLjU2OTlWNC4xMDc2OEgxLjE4MjI1VjE4LjYyNDJMNS44OTA4IDExLjY4OTJDNi4wMSAxMS41NzE2IDYuMTI5MjEgMTEuNDU0MSA2LjMwODAyIDExLjQ1NDFDNi40MjcyMiAxMS40NTQxIDYuNjA2MDIgMTEuNTEyOSA2LjcyNTIyIDExLjYzMDRMMTEuOTcwMiAxNi44MDIzTDE3LjI3NDggOC45MjY5NFpNMTEuOTYyNCAxNi43MjQ3TDE3LjIzNzIgOC44OTM1NkwxNy4yMzk4IDguODkxMzlMMTcuMjQ1MSA4Ljg4NjI2QzE3LjM2MDMgOC43NzI2MSAxNy40OTI3IDguNjQyMDUgMTcuNjkyIDguNjQyMDVDMTcuODIzMyA4LjY0MjA1IDE4LjAxNSA4LjcwNTMxIDE4LjE0NDIgOC44MzI3MUwyMi44Mjc2IDEzLjQ1MDlWNC4xNTc0N0gxLjIzMjA0VjE4LjQ2MjJMNS44NTUxNiAxMS42NTNMNS44NjExIDExLjY0ODVDNS45NzYzMiAxMS41MzQ5IDYuMTA4NjggMTEuNDA0MyA2LjMwODAyIDExLjQwNDNDNi40MzkzMiAxMS40MDQzIDYuNjMwOTggMTEuNDY3NiA2Ljc2MDE4IDExLjU5NUwxMS45NjI0IDE2LjcyNDdaTTEyLjU0MjMgMTguMDEzOUwxMi41NDE2IDE4LjAxMzJMMTIuNTM2MyAxOC4wMTg0QzEyLjQyMTEgMTguMTMyIDEyLjI4ODcgMTguMjYyNiAxMi4wODk0IDE4LjI2MjZDMTEuOTU4MSAxOC4yNjI2IDExLjc2NjQgMTguMTk5NCAxMS42MzcyIDE4LjA3Mkw2LjQzNDkxIDEyLjk0MjFMMS43MTMwOSAxOS45MjYySDIyLjgyNzZWMTUuMTE4OEwxNy44MTkgMTAuMThMMTIuNTQyMyAxOC4wMTM5Wk0xNy44MTEyIDEwLjEwMjRMMjIuODc3NCAxNS4wOTc5VjE5Ljk3NkgxLjY1OTA2VjE5LjkxNzJMNi40MjcyMSAxMi44NjQ2TDExLjY3MjIgMTguMDM2NUMxMS43OTE0IDE4LjE1NDEgMTEuOTcwMiAxOC4yMTI4IDEyLjA4OTQgMTguMjEyOEMxMi4yNjgyIDE4LjIxMjggMTIuMzg3NCAxOC4wOTUzIDEyLjUwNjYgMTcuOTc3N0wxNy44MTEyIDEwLjEwMjRaTTYuODk0MzUgNy44MTAyM0M2Ljg5NDM1IDguODk2MjQgNS45Nzc0IDkuNzk5NDMgNC44Nzc3NiA5Ljc5OTQzQzMuNzc4MTEgOS43OTk0MyAyLjg2MTE0IDguODk2MjQgMi44NjExNCA3LjgxMDIzQzIuODYxMTQgNi43MjQyMiAzLjc3ODExIDUuODIxMDQgNC44Nzc3NiA1LjgyMTA0QzUuOTc3NCA1LjgyMTA0IDYuODk0MzUgNi43MjQyMiA2Ljg5NDM1IDcuODEwMjNaTTUuNzIxOTcgNy44NjlDNS43MjE5NyA3LjQyNyA1LjMyNzcyIDcuMDM3MjUgNC44Nzc3NiA3LjAzNzI1QzQuNDI3NzkgNy4wMzcyNSA0LjAzMzU1IDcuNDI3IDQuMDMzNTUgNy44NjlDNC4wMzM1NSA4LjMxMSA0LjQyNzc5IDguNzAwNzYgNC44Nzc3NiA4LjcwMDc2QzUuMzI3NzIgOC43MDA3NiA1LjcyMTk3IDguMzExIDUuNzIxOTcgNy44NjlaTTQuODc3NzYgOS43NDk2NUM1Ljk1MDU2IDkuNzQ5NjUgNi44NDQ1NiA4Ljg2ODA5IDYuODQ0NTYgNy44MTAyM0M2Ljg0NDU2IDYuNzUyMzggNS45NTA1NiA1Ljg3MDg0IDQuODc3NzYgNS44NzA4NEMzLjgwNDk1IDUuODcwODQgMi45MTA5NCA2Ljc1MjM4IDIuOTEwOTQgNy44MTAyM0MyLjkxMDk0IDguODY4MDkgMy44MDQ5NSA5Ljc0OTY1IDQuODc3NzYgOS43NDk2NVpNNC44Nzc3NiA2Ljk4NzQ2QzUuMzU0NTYgNi45ODc0NiA1Ljc3MTc2IDcuMzk4ODUgNS43NzE3NiA3Ljg2OTAxQzUuNzcxNzYgOC4zMzkxNiA1LjM1NDU2IDguNzUwNTUgNC44Nzc3NiA4Ljc1MDU1QzQuNDAwOTYgOC43NTA1NSAzLjk4Mzc1IDguMzM5MTYgMy45ODM3NSA3Ljg2OTAxQzMuOTgzNzUgNy4zOTg4NSA0LjQwMDk2IDYuOTg3NDYgNC44Nzc3NiA2Ljk4NzQ2WlwiLFxuICAgICAgZmlsbDogXCJjdXJyZW50Q29sb3JcIlxuICAgIH1cbiAgKVxuXSB9KSwgdGggPSAoKSA9PiAvKiBAX19QVVJFX18gKi8gYyhcInN2Z1wiLCB7IHZpZXdCb3g6IFwiMCAwIDI0IDI0XCIsIGZpbGw6IFwibm9uZVwiLCB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLCBjaGlsZHJlbjogLyogQF9fUFVSRV9fICovIGMoXG4gIFwicGF0aFwiLFxuICB7XG4gICAgZDogXCJNMjQgMC45Njc0NTVDMjMuOTkyMyAwLjQ1NTQyNyAyMy41NjE5IDAuMDA4MDA1OTQgMjMuMDMyNSAwTDguODQwNTYgMi41ODIzOEM4LjQyNDU1IDIuNjM1NTkgOC4xMzMxNCAzLjA0Nzk5IDguMjU5NTIgMy41MjYyOEM4LjMyNTQzIDMuOTQ0MTEgOC43NDY4NCA0LjI0ODIxIDkuMjIxNSA0LjEzNjM1TDIwLjkxOTMgMS45OTIzNkwwLjIxNTI1OSAyMi42OTY0Qy0wLjA3Nzk5OTEgMjIuOTg5NiAtMC4wNzA3MjMzIDIzLjQ2NjEgMC4yMzE2MTEgMjMuNzY4NUMwLjUzMzk0NSAyNC4wNzA4IDEuMDEwNDMgMjQuMDc4MSAxLjMwMzY5IDIzLjc4NDhMMjEuOTQ5MSAzLjEzOTQ0TDE5LjgwNSAxNC44MzcyQzE5Ljc1MTggMTUuMjUzMiAyMC4wNTYgMTUuNjc0NiAyMC40MTUxIDE1Ljc5OTJDMjAuODMzIDE1Ljg2NTEgMjEuMjQ1NCAxNS41NzM3IDIxLjM1OSAxNS4yMTgyTDI0IDAuOTY3NDU1WlwiLFxuICAgIGZpbGw6IFwiY3VycmVudGNvbG9yXCJcbiAgfVxuKSB9KSwgb2ggPSAoKSA9PiAvKiBAX19QVVJFX18gKi8gZTEoXCJzdmdcIiwgeyB2aWV3Qm94OiBcIjAgMCAyNCAyNFwiLCBmaWxsOiBcIm5vbmVcIiwgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiwgY2hpbGRyZW46IFtcbiAgLyogQF9fUFVSRV9fICovIGMoXG4gICAgXCJwYXRoXCIsXG4gICAge1xuICAgICAgZmlsbFJ1bGU6IFwiZXZlbm9kZFwiLFxuICAgICAgY2xpcFJ1bGU6IFwiZXZlbm9kZFwiLFxuICAgICAgZDogXCJNMTIgMjIuNkMxNy44NTQyIDIyLjYgMjIuNiAxNy44NTQyIDIyLjYgMTJDMjIuNiA2LjE0NTc4IDE3Ljg1NDIgMS40IDEyIDEuNEM2LjE0NTc4IDEuNCAxLjQgNi4xNDU3OCAxLjQgMTJDMS40IDE3Ljg1NDIgNi4xNDU3OCAyMi42IDEyIDIyLjZaTTEyIDI0QzE4LjYyNzQgMjQgMjQgMTguNjI3NCAyNCAxMkMyNCA1LjM3MjU4IDE4LjYyNzQgMCAxMiAwQzUuMzcyNTggMCAwIDUuMzcyNTggMCAxMkMwIDE4LjYyNzQgNS4zNzI1OCAyNCAxMiAyNFpcIixcbiAgICAgIGZpbGw6IFwiY3VycmVudENvbG9yXCJcbiAgICB9XG4gICksXG4gIC8qIEBfX1BVUkVfXyAqLyBjKFxuICAgIFwicGF0aFwiLFxuICAgIHtcbiAgICAgIGQ6IFwiTTEyLjc5OTkgNy43QzEyLjc5OTkgOC4wODY2IDEyLjQ4NjUgOC40IDEyLjA5OTkgOC40QzExLjcxMzMgOC40IDExLjM5OTkgOC4wODY2IDExLjM5OTkgNy43QzExLjM5OTkgNy4zMTM0IDExLjcxMzMgNyAxMi4wOTk5IDdDMTIuNDg2NSA3IDEyLjc5OTkgNy4zMTM0IDEyLjc5OTkgNy43WlwiLFxuICAgICAgZmlsbDogXCJjdXJyZW50Q29sb3JcIlxuICAgIH1cbiAgKSxcbiAgLyogQF9fUFVSRV9fICovIGMoXG4gICAgXCJwYXRoXCIsXG4gICAge1xuICAgICAgZDogXCJNMTEuMzk5OSA5LjU5OTk4SDEyLjc5OTlWMTZIMTEuMzk5OVY5LjU5OTk4WlwiLFxuICAgICAgZmlsbDogXCJjdXJyZW50Q29sb3JcIlxuICAgIH1cbiAgKVxuXSB9KSwgcmggPSAoKSA9PiAvKiBAX19QVVJFX18gKi8gYyhcInN2Z1wiLCB7IHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsIHZpZXdCb3g6IFwiMCAwIDI0IDI0XCIsIGZpbGw6IFwibm9uZVwiLCBjaGlsZHJlbjogLyogQF9fUFVSRV9fICovIGMoXG4gIFwicGF0aFwiLFxuICB7XG4gICAgZmlsbFJ1bGU6IFwiZXZlbm9kZFwiLFxuICAgIGNsaXBSdWxlOiBcImV2ZW5vZGRcIixcbiAgICBkOiBcIk0xMiAwQzUuNCAwIDAgNS40IDAgMTJDMCAxOC42IDUuNCAyNCAxMiAyNEMxOC42IDI0IDI0IDE4LjYgMjQgMTJDMjQgNS40IDE4LjYgMCAxMiAwWk0xMSAxMC4ySDEzLjJWMTcuNEgxMVYxMC4yWk0xMi4xIDguOEMxMS41IDguOCAxMSA4LjMgMTEgNy43QzExIDcuMSAxMS41IDYuNiAxMi4xIDYuNkMxMi43IDYuNiAxMy4yIDcuMSAxMy4yIDcuN0MxMy4yIDguMyAxMi43IDguOCAxMi4xIDguOFpcIixcbiAgICBmaWxsOiBcImN1cnJlbnRDb2xvclwiXG4gIH1cbikgfSksIG5oID0gKCkgPT4gLyogQF9fUFVSRV9fICovIGMoXCJzdmdcIiwgeyB2aWV3Qm94OiBcIjAgMCAyNCAyNFwiLCBmaWxsOiBcIm5vbmVcIiwgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiwgY2hpbGRyZW46IC8qIEBfX1BVUkVfXyAqLyBjKFxuICBcInBhdGhcIixcbiAge1xuICAgIGQ6IFwiTTIxLjAxNTYgMEg0LjY3OTQzQzQuMzc2OSAwIDQuMDc0MzggMC4zMDI1MjEgNC4wNzQzOCAwLjYwNTA0MlYzLjIyNjg5SDMuMDY1OThDMi43NjM0NiAzLjIyNjg5IDIuNDYwOTQgMy41Mjk0MSAyLjQ2MDk0IDMuOTMyNzdDMi40NjA5NCA0LjMzNjEzIDIuNzYzNDYgNC41Mzc4MiAzLjA2NTk4IDQuNTM3ODJINC4wNzQzOFY2LjU1NDYySDMuMDY1OThDMi43NjM0NiA2LjU1NDYyIDIuNDYwOTQgNi44NTcxNCAyLjQ2MDk0IDcuMTU5NjZDMi40NjA5NCA3LjQ2MjE5IDIuNzYzNDYgNy43NjQ3MSAzLjA2NTk4IDcuNzY0NzFINC4wNzQzOFY5Ljc4MTUxSDMuMDY1OThDMi43NjM0NiA5Ljc4MTUxIDIuNDYwOTQgMTAuMDg0IDIuNDYwOTQgMTAuNDg3NEMyLjQ2MDk0IDEwLjc4OTkgMi43NjM0NiAxMS4wOTI0IDMuMDY1OTggMTEuMDkyNEg0LjA3NDM4VjEzLjEwOTJIMy4wNjU5OEMyLjc2MzQ2IDEzLjEwOTIgMi40NjA5NCAxMy40MTE4IDIuNDYwOTQgMTMuNzE0M0MyLjQ2MDk0IDE0LjAxNjggMi43NjM0NiAxNC4zMTkzIDMuMDY1OTggMTQuMzE5M0g0LjA3NDM4VjE2LjMzNjFIMy4wNjU5OEMyLjc2MzQ2IDE2LjMzNjEgMi40NjA5NCAxNi42Mzg3IDIuNDYwOTQgMTYuOTQxMkMyLjQ2MDk0IDE3LjI0MzcgMi43NjM0NiAxNy41NDYyIDMuMDY1OTggMTcuNTQ2Mkg0LjA3NDM4VjE5LjU2M0gzLjA2NTk4QzIuNzYzNDYgMTkuNTYzIDIuNDYwOTQgMTkuODY1NSAyLjQ2MDk0IDIwLjE2ODFDMi40NjA5NCAyMC40NzA2IDIuNzYzNDYgMjAuNzczMSAzLjA2NTk4IDIwLjc3MzFINC4wNzQzOFYyMy4zOTVDNC4wNzQzOCAyMy42OTc1IDQuMzc2OSAyNCA0LjY3OTQzIDI0SDIwLjkxNDdDMjEuMjE3MiAyNCAyMS41MTk4IDIzLjY5NzUgMjEuNTE5OCAyMy4zOTVWMC42MDUwNDJDMjEuNjIwNiAwLjMwMjUyMSAyMS4zMTgxIDAgMjEuMDE1NiAwWk0yMC4zMDk3IDIyLjg5MDhINS4zODUzMVYyMC44NzRINi4zOTM3MUM2LjY5NjIzIDIwLjg3NCA2Ljk5ODc1IDIwLjU3MTQgNi45OTg3NSAyMC4yNjg5QzYuOTk4NzUgMTkuOTY2NCA2LjY5NjIzIDE5LjY2MzkgNi4zOTM3MSAxOS42NjM5SDUuMzg1MzFWMTcuNjQ3MUg2LjM5MzcxQzYuNjk2MjMgMTcuNjQ3MSA2Ljk5ODc1IDE3LjM0NDUgNi45OTg3NSAxNy4wNDJDNi45OTg3NSAxNi43Mzk1IDYuNjk2MjMgMTYuNDM3IDYuMzkzNzEgMTYuNDM3SDUuMzg1MzFWMTQuNDIwMkg2LjM5MzcxQzYuNjk2MjMgMTQuNDIwMiA2Ljk5ODc1IDE0LjExNzYgNi45OTg3NSAxMy44MTUxQzYuOTk4NzUgMTMuNTEyNiA2LjY5NjIzIDEzLjIxMDEgNi4zOTM3MSAxMy4yMTAxSDUuMzg1MzFWMTEuMTkzM0g2LjM5MzcxQzYuNjk2MjMgMTEuMTkzMyA2Ljk5ODc1IDEwLjg5MDggNi45OTg3NSAxMC41ODgyQzYuOTk4NzUgMTAuMjg1NyA2LjY5NjIzIDkuOTgzMTkgNi4zOTM3MSA5Ljk4MzE5SDUuMzg1MzFWNy45NjYzOUg2LjM5MzcxQzYuNjk2MjMgNy45NjYzOSA2Ljk5ODc1IDcuNjYzODcgNi45OTg3NSA3LjM2MTM1QzYuOTk4NzUgNy4wNTg4MiA2LjY5NjIzIDYuNTU0NjIgNi4zOTM3MSA2LjU1NDYySDUuMzg1MzFWNC41Mzc4Mkg2LjM5MzcxQzYuNjk2MjMgNC41Mzc4MiA2Ljk5ODc1IDQuMjM1MjkgNi45OTg3NSAzLjkzMjc3QzYuOTk4NzUgMy42MzAyNSA2LjY5NjIzIDMuMjI2ODkgNi4zOTM3MSAzLjIyNjg5SDUuMzg1MzFWMS4yMTAwOEgyMC40MTA1VjIyLjg5MDhIMjAuMzA5N1pcIixcbiAgICBmaWxsOiBcImN1cnJlbnRDb2xvclwiXG4gIH1cbikgfSksIGloID0gKCkgPT4gLyogQF9fUFVSRV9fICovIGMoXCJzdmdcIiwgeyB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLCB2aWV3Qm94OiBcIjAgMCAyNCAyNFwiLCBmaWxsOiBcIm5vbmVcIiwgY2hpbGRyZW46IC8qIEBfX1BVUkVfXyAqLyBjKFxuICBcInBhdGhcIixcbiAge1xuICAgIGZpbGxSdWxlOiBcImV2ZW5vZGRcIixcbiAgICBjbGlwUnVsZTogXCJldmVub2RkXCIsXG4gICAgZDogXCJNMjEuNiAwLjZWMjMuNEMyMS42IDIzLjcgMjEuMyAyNCAyMSAyNEg0LjhDNC41IDI0IDQuMiAyMy43IDQuMiAyMy40VjIxLjRIMi45QzIuNCAyMS40IDIgMjEgMiAyMC41QzIgMjAgMi40IDE5LjYgMi45IDE5LjZINC4xVjE4LjFIMi45QzIuNCAxOC4xIDIgMTcuNyAyIDE3LjJDMiAxNi43IDIuNCAxNi4zIDIuOSAxNi4zSDQuMVYxNC44SDIuOUMyLjQgMTQuOCAyIDE0LjQgMiAxMy45QzIgMTMuNCAyLjQgMTMgMi45IDEzSDQuMVYxMS41SDIuOUMyLjQgMTEuNSAyIDExLjEgMiAxMC42QzIgMTAuMSAyLjQgOS43IDIuOSA5LjdINC4xVjcuOUgyLjlDMi40IDcuOSAyIDcuNSAyIDdDMiA2LjUgMi40IDYuMSAyLjkgNi4xSDQuMVY0LjZIMi45QzIuNCA0LjYgMiA0LjEgMiAzLjZDMiAzLjEgMi40IDIuNyAyLjkgMi43SDQuMVYwLjZDNC4yIDAuMyA0LjUgMCA0LjggMEgyMS4xQzIxLjQgMCAyMS43IDAuMyAyMS42IDAuNlpcIixcbiAgICBmaWxsOiBcImN1cnJlbnRDb2xvclwiXG4gIH1cbikgfSksIGFoID0gKCkgPT4gLyogQF9fUFVSRV9fICovIGMoXCJzdmdcIiwgeyB2aWV3Qm94OiBcIjAgMCAyNCAyNFwiLCBmaWxsOiBcIm5vbmVcIiwgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiwgY2hpbGRyZW46IC8qIEBfX1BVUkVfXyAqLyBjKFxuICBcInBhdGhcIixcbiAge1xuICAgIGQ6IFwiTTQuOTQ1MzMgMjMuMjc0NUwxMS44ODI5IDE2LjU4NUwxOC44MjA1IDIzLjI3NDVDMTguOTc2NCAyMy40MjQ4IDE5LjEzMjMgMjMuNSAxOS4zNjYyIDIzLjVDMTkuNDQ0MSAyMy41IDE5LjUyMjEgMjMuNSAxOS42NzggMjMuNDI0OEMxOS45MTE4IDIzLjM0OTcgMjAuMTQ1NyAyMy4wNDkgMjAuMTQ1NyAyMi43NDg0VjEuMTc2NDdDMjAuMTQ1NyAwLjgwMDY0OSAxOS44MzM4IDAuNSAxOS40NDQxIDAuNUg0LjU1NTU4QzQuMTY1ODIgMC41IDMuODU0IDAuODAwNjQ5IDMuODU0IDEuMTc2NDdWMjIuNzQ4NEMzLjg1NCAyMy4wNDkgNC4wMDk5MyAyMy4yNzQ1IDQuMzIxNzQgMjMuNDI0OEM0LjQ3NzY0IDIzLjUgNC43ODk0MyAyMy40MjQ4IDQuOTQ1MzMgMjMuMjc0NVpNNS4xNzkxNyAxLjg1MjkzSDE4LjY2NDZWMjEuMDE5NkwxMi40Mjg2IDE1LjAwNjVDMTIuMjcyNyAxNC44NTYyIDEyLjExNjggMTQuNzgxIDExLjg4MjkgMTQuNzgxQzExLjcyNyAxNC43ODEgMTEuNDkzMiAxNC44NTYyIDExLjMzNzMgMTUuMDA2NUw1LjEwMTI0IDIxLjAxOTZWMS44NTI5M0g1LjE3OTE3WlwiLFxuICAgIGZpbGw6IFwiY3VycmVudENvbG9yXCJcbiAgfVxuKSB9KSwgc2ggPSAoKSA9PiAvKiBAX19QVVJFX18gKi8gYyhcInN2Z1wiLCB7IHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsIHZpZXdCb3g6IFwiMCAwIDI0IDI0XCIsIGZpbGw6IFwibm9uZVwiLCBjaGlsZHJlbjogLyogQF9fUFVSRV9fICovIGMoXG4gIFwicGF0aFwiLFxuICB7XG4gICAgZDogXCJNNC4yMDU3NiAyMy43NjQ3TDExLjg3MDggMTYuNzg0M0wxOS41MzU5IDIzLjc2NDdDMTkuNzA4MSAyMy45MjE2IDE5Ljg4MDQgMjQgMjAuMTM4OCAyNEMyMC4yMjQ5IDI0IDIwLjMxMSAyNCAyMC40ODMzIDIzLjkyMTZDMjAuNzQxNiAyMy44NDMxIDIxIDIzLjUyOTQgMjEgMjMuMjE1N1YwLjcwNTg3N0MyMSAwLjMxMzcyMSAyMC42NTU1IDAgMjAuMjI0OSAwSDMuNzc1MTRDMy4zNDQ1MiAwIDMgMC4zMTM3MjEgMyAwLjcwNTg3N1YyMy4yMTU3QzMgMjMuNTI5NCAzLjE3MjI4IDIzLjc2NDcgMy41MTY3OCAyMy45MjE2QzMuNjg5MDMgMjQgNC4wMzM1MSAyMy45MjE2IDQuMjA1NzYgMjMuNzY0N1pcIixcbiAgICBmaWxsOiBcImN1cnJlbnRDb2xvclwiXG4gIH1cbikgfSksIGNoID0gKCkgPT4gLyogQF9fUFVSRV9fICovIGMoXCJzdmdcIiwgeyB2aWV3Qm94OiBcIjAgMCAyNCAyNFwiLCBmaWxsOiBcIm5vbmVcIiwgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiwgY2hpbGRyZW46IC8qIEBfX1BVUkVfXyAqLyBjKFxuICBcInBhdGhcIixcbiAge1xuICAgIGZpbGxSdWxlOiBcImV2ZW5vZGRcIixcbiAgICBjbGlwUnVsZTogXCJldmVub2RkXCIsXG4gICAgZDogXCJNMjAuNyAwLjdDMjAuNyAwLjMxMzQwMSAyMC4zODY2IDAgMjAgMEMxOS42MTM0IDAgMTkuMyAwLjMxMzQwMSAxOS4zIDAuN1YyMy4zQzE5LjMgMjMuNjg2NiAxOS42MTM0IDI0IDIwIDI0QzIwLjM4NjYgMjQgMjAuNyAyMy42ODY2IDIwLjcgMjMuM1YwLjdaTTQuMDk3NjcgMjRDMy44NTgzOCAyNCAzLjY5ODg3IDIzLjkyMTYgMy41MzkzNCAyMy43NjQ3QzMuMjIwMjggMjMuNDUxIDMuMjIwMjggMjIuOTgwNCAzLjUzOTM0IDIyLjc0NTFMMTQuNDY3IDEyTDMuNTM5MzQgMS4yNTQ5QzMuMjIwMjggMC45NDExNzcgMy4yMjAyOCAwLjU0OTAyIDMuNTM5MzQgMC4yMzUyOTRDMy44NTg0IC0wLjA3ODQzMTQgNC4yNTcyMSAtMC4wNzg0MzE0IDQuNTc2MjYgMC4yMzUyOTRMMTYuMDYyMyAxMS41Mjk0QzE2LjM4MTMgMTEuODQzMSAxNi4zODEzIDEyLjIzNTMgMTYuMDYyMyAxMi41NDlMNC42NTYwMyAyMy43NjQ3QzQuNDk2NSAyMy45MjE2IDQuMzM2OTcgMjQgNC4wOTc2NyAyNFpcIixcbiAgICBmaWxsOiBcImN1cnJlbnRDb2xvclwiXG4gIH1cbikgfSksIGxoID0gKCkgPT4gLyogQF9fUFVSRV9fICovIGMoXCJzdmdcIiwgeyB2aWV3Qm94OiBcIjAgMCAyNCAyNFwiLCBmaWxsOiBcIm5vbmVcIiwgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiwgY2hpbGRyZW46IC8qIEBfX1BVUkVfXyAqLyBjKFxuICBcInBhdGhcIixcbiAge1xuICAgIGQ6IFwiTTEwLjM0MDcgMjRIMTMuNzI5OUMxNC4wODMgMjQgMTQuMzY1NCAyMy43MjY1IDE0LjM2NTQgMjMuMzg0NlYyMC42NDk2QzE1LjM1MzkgMjAuNDQ0NSAxNi4wNiAxOS42MjM5IDE2LjA2IDE4LjY2NjdWMTcuNTA0M0gxNi4zNDI0QzE2LjYyNDggMTcuNTA0MyAxNi44MzY3IDE3LjM2NzUgMTYuOTA3MyAxNy4xNjI0TDIwLjIyNTkgMTAuNDYxNVYxMC4zOTMyTDIwLjcyMDEgOC44ODg4OUMyMS4yODUgNy4xMTExMSAyMS4wMDI2IDUuMTk2NTkgMTkuODAyMiAzLjU1NTU2QzE4LjMxOTUgMS40MzU5MSAxNS41NjU3IDAuMTM2NzUyIDEyLjUyOTYgMEMxMi4xNzY1IDAgMTEuODIzNSAwIDExLjQ3MDUgMEM4LjQzNDMgMC4xMzY3NTIgNS42ODA1OCAxLjUwNDI4IDQuMTk3ODEgMy41NTU1NkMyLjk5NzQ2IDUuMTk2NTkgMi43MTUgNy4xMTExMSAzLjI3OTg2IDguODg4ODlMMy43NzQxMyAxMC4zOTMyVjEwLjQ2MTVMNy4wOTI3MyAxNy4xNjI0QzcuMjMzOTUgMTcuMzY3NSA3LjQ0NTc2IDE3LjUwNDMgNy42NTc1OSAxNy41MDQzSDcuOTQwMDRWMTguNjY2N0M3Ljk0MDA0IDE5LjYyMzkgOC42NDYwOSAyMC40NDQ1IDkuNjM0NjEgMjAuNjQ5NlYyMy4zODQ2QzkuNzA1MjIgMjMuNzI2NSA5Ljk4NzY1IDI0IDEwLjM0MDcgMjRaTTEzLjA5NDQgMjIuNzY5MkgxMC45NzYyVjIwLjc4NjNIMTMuMDIzOFYyMi43NjkySDEzLjA5NDRaTTUuMDQ1MDcgOS45MTQ1M0w0LjU1MDg1IDguNDEwMjdDNC4wNTY1OSA2Ljk3NDM3IDQuMzM5MDIgNS40NzAwOSA1LjI1NjkzIDQuMTcwOTRDNi41Mjc4OCAyLjM5MzE3IDguODU3OTMgMS4yMzA3OCAxMS41NDEgMS4xNjI0QzExLjgyMzUgMS4xNjI0IDEyLjE3NjUgMS4xNjI0IDEyLjQ1ODkgMS4xNjI0QzE1LjA3MTUgMS4yOTkxNSAxNy40MDE1IDIuMzkzMTcgMTguNzQzMSA0LjE3MDk0QzE5LjY2MSA1LjQ3MDA5IDE5Ljk0MzQgNi45NzQzNyAxOS40NDkyIDguNDEwMjdMMTguOTU0OSA5LjkxNDUzTDE1Ljg0ODIgMTYuMjczNUgxMi44ODI2TDE1Ljk4OTQgNy4zMTYyNUMxNi4xMzA2IDYuOTc0MzcgMTUuOTE4OCA2LjYzMjQ4IDE1LjU2NTcgNi40OTU3M0MxNS4yMTI3IDYuMzU4OTcgMTQuODU5NiA2LjU2NDExIDE0LjcxODQgNi45MDU5OUwxMS45NjQ3IDE0LjkwNkw5LjQ5MzQzIDcuNzI2NTFIMTEuOTY0N0MxMi4zMTc4IDcuNzI2NTEgMTIuNjAwMiA3LjQ1Mjk5IDEyLjYwMDIgNy4xMTExMUMxMi42MDAyIDYuNzY5MjMgMTIuMzE3OCA2LjQ5NTczIDExLjk2NDcgNi40OTU3M0g4LjU3NTQ5QzguMzYzNjYgNi40OTU3MyA4LjE1MTg0IDYuNTY0MSA4LjAxMDYzIDYuNzY5MjNDNy44Njk0MSA2LjkwNTk4IDcuODY5NDMgNy4xNzk0OSA3Ljk0MDA0IDcuMzE2MjVMMTEuMDQ2OCAxNi4yNzM1SDguMTUxODVMNS4wNDUwNyA5LjkxNDUzWk05LjM1MjIgMTguNjY2N1YxNy41MDQzSDE0Ljc4OTFWMTguNjY2N0MxNC43ODkxIDE5LjE0NTMgMTQuMzY1NCAxOS40ODcyIDEzLjg3MTEgMTkuNDg3MkgxMy43Mjk5SDEwLjM0MDdIMTAuMTk5NUM5LjcwNTI1IDE5LjQ4NzIgOS4zNTIyIDE5LjE0NTMgOS4zNTIyIDE4LjY2NjdaXCIsXG4gICAgZmlsbDogXCJjdXJyZW50Q29sb3JcIlxuICB9XG4pIH0pLCBwaCA9ICgpID0+IC8qIEBfX1BVUkVfXyAqLyBlMShcInN2Z1wiLCB7IHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsIHZpZXdCb3g6IFwiMCAwIDI0IDI0XCIsIGZpbGw6IFwibm9uZVwiLCBjaGlsZHJlbjogW1xuICAvKiBAX19QVVJFX18gKi8gZTEoXCJnXCIsIHsgY2xpcFBhdGg6IFwidXJsKCNjbGlwMF82MjA3XzUxOTg0KVwiLCBjaGlsZHJlbjogW1xuICAgIC8qIEBfX1BVUkVfXyAqLyBjKFxuICAgICAgXCJwYXRoXCIsXG4gICAgICB7XG4gICAgICAgIGQ6IFwiTTExLjk5OTkgMC4wOTk5NzU2QzEyLjQ5NjkgMC4wOTk5NzU2IDEyLjg5OTkgMC41MDI5MTkgMTIuODk5OSAwLjk5OTk3NlYyLjk5OTk4QzEyLjg5OTkgMy40OTcwMyAxMi40OTY5IDMuODk5OTggMTEuOTk5OSAzLjg5OTk4QzExLjUwMjggMy44OTk5OCAxMS4wOTk5IDMuNDk3MDMgMTEuMDk5OSAyLjk5OTk4VjAuOTk5OTc2QzExLjA5OTkgMC41MDI5MTkgMTEuNTAyOCAwLjA5OTk3NTYgMTEuOTk5OSAwLjA5OTk3NTZaXCIsXG4gICAgICAgIGZpbGw6IFwiY3VycmVudENvbG9yXCJcbiAgICAgIH1cbiAgICApLFxuICAgIC8qIEBfX1BVUkVfXyAqLyBjKFxuICAgICAgXCJwYXRoXCIsXG4gICAgICB7XG4gICAgICAgIGQ6IFwiTTExLjk5OTkgMjAuMUMxMi40OTY5IDIwLjEgMTIuODk5OSAyMC41MDMgMTIuODk5OSAyMVYyM0MxMi44OTk5IDIzLjQ5NzEgMTIuNDk2OSAyMy45IDExLjk5OTkgMjMuOUMxMS41MDI4IDIzLjkgMTEuMDk5OSAyMy40OTcxIDExLjA5OTkgMjNWMjFDMTEuMDk5OSAyMC41MDMgMTEuNTAyOCAyMC4xIDExLjk5OTkgMjAuMVpcIixcbiAgICAgICAgZmlsbDogXCJjdXJyZW50Q29sb3JcIlxuICAgICAgfVxuICAgICksXG4gICAgLyogQF9fUFVSRV9fICovIGMoXG4gICAgICBcInBhdGhcIixcbiAgICAgIHtcbiAgICAgICAgZDogXCJNMy41ODM2NyAzLjU4MzQ5QzMuOTM1MTQgMy4yMzIwMiA0LjUwNDk5IDMuMjMyMDIgNC44NTY0NiAzLjU4MzQ5TDYuMjc2NDYgNS4wMDM0OUM2LjYyNzk0IDUuMzU0OTYgNi42Mjc5NCA1LjkyNDgxIDYuMjc2NDYgNi4yNzYyOEM1LjkyNDk5IDYuNjI3NzUgNS4zNTUxNCA2LjYyNzc1IDUuMDAzNjcgNi4yNzYyOEwzLjU4MzY3IDQuODU2MjhDMy4yMzIyIDQuNTA0ODEgMy4yMzIyIDMuOTM0OTYgMy41ODM2NyAzLjU4MzQ5WlwiLFxuICAgICAgICBmaWxsOiBcImN1cnJlbnRDb2xvclwiXG4gICAgICB9XG4gICAgKSxcbiAgICAvKiBAX19QVVJFX18gKi8gYyhcbiAgICAgIFwicGF0aFwiLFxuICAgICAge1xuICAgICAgICBkOiBcIk0xNy43MjIzIDE3LjcyMzZDMTguMDczOCAxNy4zNzIyIDE4LjY0MzcgMTcuMzcyMiAxOC45OTUxIDE3LjcyMzZMMjAuNDE1MSAxOS4xNDM2QzIwLjc2NjYgMTkuNDk1MSAyMC43NjY2IDIwLjA2NDkgMjAuNDE1MSAyMC40MTY0QzIwLjA2MzcgMjAuNzY3OSAxOS40OTM4IDIwLjc2NzkgMTkuMTQyMyAyMC40MTY0TDE3LjcyMjMgMTguOTk2NEMxNy4zNzA5IDE4LjY0NDkgMTcuMzcwOSAxOC4wNzUxIDE3LjcyMjMgMTcuNzIzNlpcIixcbiAgICAgICAgZmlsbDogXCJjdXJyZW50Q29sb3JcIlxuICAgICAgfVxuICAgICksXG4gICAgLyogQF9fUFVSRV9fICovIGMoXG4gICAgICBcInBhdGhcIixcbiAgICAgIHtcbiAgICAgICAgZDogXCJNMC4wOTk2MDk0IDEyQzAuMDk5NjA5NCAxMS41MDMgMC41MDI1NTMgMTEuMSAwLjk5OTYwOSAxMS4xSDIuOTk5NjFDMy40OTY2NyAxMS4xIDMuODk5NjEgMTEuNTAzIDMuODk5NjEgMTJDMy44OTk2MSAxMi40OTcxIDMuNDk2NjcgMTIuOSAyLjk5OTYxIDEyLjlIMC45OTk2MDlDMC41MDI1NTMgMTIuOSAwLjA5OTYwOTQgMTIuNDk3MSAwLjA5OTYwOTQgMTJaXCIsXG4gICAgICAgIGZpbGw6IFwiY3VycmVudENvbG9yXCJcbiAgICAgIH1cbiAgICApLFxuICAgIC8qIEBfX1BVUkVfXyAqLyBjKFxuICAgICAgXCJwYXRoXCIsXG4gICAgICB7XG4gICAgICAgIGQ6IFwiTTIwLjA5OTkgMTJDMjAuMDk5OSAxMS41MDMgMjAuNTAyOCAxMS4xIDIwLjk5OTkgMTEuMUgyMi45OTk5QzIzLjQ5NjkgMTEuMSAyMy44OTk5IDExLjUwMyAyMy44OTk5IDEyQzIzLjg5OTkgMTIuNDk3MSAyMy40OTY5IDEyLjkgMjIuOTk5OSAxMi45SDIwLjk5OTlDMjAuNTAyOCAxMi45IDIwLjA5OTkgMTIuNDk3MSAyMC4wOTk5IDEyWlwiLFxuICAgICAgICBmaWxsOiBcImN1cnJlbnRDb2xvclwiXG4gICAgICB9XG4gICAgKSxcbiAgICAvKiBAX19QVVJFX18gKi8gYyhcbiAgICAgIFwicGF0aFwiLFxuICAgICAge1xuICAgICAgICBkOiBcIk02LjI3NjQ2IDE3LjcyMzZDNi42Mjc5NCAxOC4wNzUxIDYuNjI3OTQgMTguNjQ0OSA2LjI3NjQ2IDE4Ljk5NjRMNC44NTY0NiAyMC40MTY0QzQuNTA0OTkgMjAuNzY3OSAzLjkzNTE0IDIwLjc2NzkgMy41ODM2NyAyMC40MTY0QzMuMjMyMiAyMC4wNjQ5IDMuMjMyMiAxOS40OTUxIDMuNTgzNjcgMTkuMTQzNkw1LjAwMzY3IDE3LjcyMzZDNS4zNTUxNCAxNy4zNzIyIDUuOTI0OTkgMTcuMzcyMiA2LjI3NjQ2IDE3LjcyMzZaXCIsXG4gICAgICAgIGZpbGw6IFwiY3VycmVudENvbG9yXCJcbiAgICAgIH1cbiAgICApLFxuICAgIC8qIEBfX1BVUkVfXyAqLyBjKFxuICAgICAgXCJwYXRoXCIsXG4gICAgICB7XG4gICAgICAgIGQ6IFwiTTIwLjQxNTEgMy41ODM0OUMyMC43NjY2IDMuOTM0OTYgMjAuNzY2NiA0LjUwNDgxIDIwLjQxNTEgNC44NTYyOEwxOC45OTUxIDYuMjc2MjhDMTguNjQzNyA2LjYyNzc1IDE4LjA3MzggNi42Mjc3NSAxNy43MjIzIDYuMjc2MjhDMTcuMzcwOSA1LjkyNDgxIDE3LjM3MDkgNS4zNTQ5NiAxNy43MjIzIDUuMDAzNDlMMTkuMTQyMyAzLjU4MzQ5QzE5LjQ5MzggMy4yMzIwMiAyMC4wNjM3IDMuMjMyMDIgMjAuNDE1MSAzLjU4MzQ5WlwiLFxuICAgICAgICBmaWxsOiBcImN1cnJlbnRDb2xvclwiXG4gICAgICB9XG4gICAgKSxcbiAgICAvKiBAX19QVVJFX18gKi8gYyhcbiAgICAgIFwicGF0aFwiLFxuICAgICAge1xuICAgICAgICBkOiBcIk0xMiAxOUMxNS44NjYgMTkgMTkgMTUuODY2IDE5IDEyQzE5IDguMTM0MDEgMTUuODY2IDUgMTIgNUM4LjEzNDAxIDUgNSA4LjEzNDAxIDUgMTJDNSAxNS44NjYgOC4xMzQwMSAxOSAxMiAxOVpcIixcbiAgICAgICAgZmlsbDogXCJjdXJyZW50Q29sb3JcIlxuICAgICAgfVxuICAgIClcbiAgXSB9KSxcbiAgLyogQF9fUFVSRV9fICovIGMoXCJkZWZzXCIsIHsgY2hpbGRyZW46IC8qIEBfX1BVUkVfXyAqLyBjKFwiY2xpcFBhdGhcIiwgeyBpZDogXCJjbGlwMF82MjA3XzUxOTg0XCIsIGNoaWxkcmVuOiAvKiBAX19QVVJFX18gKi8gYyhcInJlY3RcIiwgeyB3aWR0aDogXCIyNFwiLCBoZWlnaHQ6IFwiMjRcIiwgZmlsbDogXCJ3aGl0ZVwiIH0pIH0pIH0pXG5dIH0pLCBkaCA9ICgpID0+IC8qIEBfX1BVUkVfXyAqLyBlMShcInN2Z1wiLCB7IHZpZXdCb3g6IFwiMCAwIDI0IDI0XCIsIGZpbGw6IFwibm9uZVwiLCB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLCBjaGlsZHJlbjogW1xuICAvKiBAX19QVVJFX18gKi8gZTEoXCJnXCIsIHsgY2xpcFBhdGg6IFwidXJsKCNjbGlwMF8yNjQwXzQ0ODU3KVwiLCBjaGlsZHJlbjogW1xuICAgIC8qIEBfX1BVUkVfXyAqLyBjKFxuICAgICAgXCJwYXRoXCIsXG4gICAgICB7XG4gICAgICAgIGZpbGxSdWxlOiBcImV2ZW5vZGRcIixcbiAgICAgICAgY2xpcFJ1bGU6IFwiZXZlbm9kZFwiLFxuICAgICAgICBkOiBcIk01LjEgNS4yMDAwMVYxLjUwMDAxSDEuNVY1LjIwMDAxSDUuMVpNNi42IDUuOTAwMDFWMC43MDAwMDhDNi42IDAuMzAwMDA4IDYuMyA3LjYyOTM5ZS0wNiA1LjkgNy42MjkzOWUtMDZIMC43QzAuMyA3LjYyOTM5ZS0wNiAwIDAuMzAwMDA4IDAgMC43MDAwMDhWNS45MDAwMUMwIDYuMzAwMDEgMC4zIDYuNzAwMDEgMC43IDYuNzAwMDFINS45QzYuMyA2LjcwMDAxIDYuNyA2LjMwMDAxIDYuNiA1LjkwMDAxWlwiLFxuICAgICAgICBmaWxsOiBcImN1cnJlbnRDb2xvclwiXG4gICAgICB9XG4gICAgKSxcbiAgICAvKiBAX19QVVJFX18gKi8gYyhcbiAgICAgIFwicGF0aFwiLFxuICAgICAge1xuICAgICAgICBkOiBcIk0yMyAzLjgwMDAxSDEwLjNDOS43IDMuODAwMDEgOS4zIDMuNDI1MDEgOS4zIDMuMDUwMDFDOS4zIDIuNjAwMDEgOS44IDIuMzAwMDEgMTAuMyAyLjMwMDAxSDIzQzIzLjYgMi4zMDAwMSAyNCAyLjY3NTAxIDI0IDMuMDUwMDFDMjQgMy41MDAwMSAyMy42IDMuODAwMDEgMjMgMy44MDAwMVpcIixcbiAgICAgICAgZmlsbDogXCJjdXJyZW50Q29sb3JcIlxuICAgICAgfVxuICAgICksXG4gICAgLyogQF9fUFVSRV9fICovIGMoXG4gICAgICBcInBhdGhcIixcbiAgICAgIHtcbiAgICAgICAgZmlsbFJ1bGU6IFwiZXZlbm9kZFwiLFxuICAgICAgICBjbGlwUnVsZTogXCJldmVub2RkXCIsXG4gICAgICAgIGQ6IFwiTTUuMSAxMy44VjEwLjJIMS41VjEzLjhINS4xWk02LjYgMTQuNlY5LjQwMDAxQzYuNiA5LjAwMDAxIDYuMyA4LjcwMDAxIDUuOSA4LjcwMDAxSDAuN0MwLjMgOC43MDAwMSAwIDkuMDAwMDEgMCA5LjQwMDAxVjE0LjZDMCAxNSAwLjMgMTUuMyAwLjcgMTUuM0g1LjlDNi4zIDE1LjMgNi43IDE1IDYuNiAxNC42WlwiLFxuICAgICAgICBmaWxsOiBcImN1cnJlbnRDb2xvclwiXG4gICAgICB9XG4gICAgKSxcbiAgICAvKiBAX19QVVJFX18gKi8gYyhcbiAgICAgIFwicGF0aFwiLFxuICAgICAge1xuICAgICAgICBkOiBcIk0yMyAxMi41SDEwLjNDOS43IDEyLjUgOS4zIDEyLjEyNSA5LjMgMTEuNzVDOS4zIDExLjMgOS44IDExIDEwLjMgMTFIMjNDMjMuNiAxMSAyNCAxMS4zNzUgMjQgMTEuNzVDMjQgMTIuMiAyMy42IDEyLjUgMjMgMTIuNVpcIixcbiAgICAgICAgZmlsbDogXCJjdXJyZW50Q29sb3JcIlxuICAgICAgfVxuICAgICksXG4gICAgLyogQF9fUFVSRV9fICovIGMoXG4gICAgICBcInBhdGhcIixcbiAgICAgIHtcbiAgICAgICAgZmlsbFJ1bGU6IFwiZXZlbm9kZFwiLFxuICAgICAgICBjbGlwUnVsZTogXCJldmVub2RkXCIsXG4gICAgICAgIGQ6IFwiTTUuMSAyMi41VjE4LjlIMS41VjIyLjVINS4xWk02LjYgMjMuM1YxOC4xQzYuNiAxNy43IDYuMyAxNy40IDUuOSAxNy40SDAuN0MwLjMgMTcuNCAwIDE3LjcgMCAxOC4xVjIzLjNDMCAyMy43IDAuMyAyNCAwLjcgMjRINS45QzYuMyAyNCA2LjcgMjMuNyA2LjYgMjMuM1pcIixcbiAgICAgICAgZmlsbDogXCJjdXJyZW50Q29sb3JcIlxuICAgICAgfVxuICAgICksXG4gICAgLyogQF9fUFVSRV9fICovIGMoXG4gICAgICBcInBhdGhcIixcbiAgICAgIHtcbiAgICAgICAgZDogXCJNMjMgMjEuMkgxMC4zQzkuNyAyMS4yIDkuMyAyMC44MjUgOS4zIDIwLjQ1QzkuMyAyMCA5LjggMTkuNyAxMC4zIDE5LjdIMjNDMjMuNiAxOS43IDI0IDIwLjA3NSAyNCAyMC40NUMyNCAyMC44MjUgMjMuNiAyMS4yIDIzIDIxLjJaXCIsXG4gICAgICAgIGZpbGw6IFwiY3VycmVudENvbG9yXCJcbiAgICAgIH1cbiAgICApXG4gIF0gfSksXG4gIC8qIEBfX1BVUkVfXyAqLyBjKFwiZGVmc1wiLCB7IGNoaWxkcmVuOiAvKiBAX19QVVJFX18gKi8gYyhcImNsaXBQYXRoXCIsIHsgaWQ6IFwiY2xpcDBfMjY0MF80NDg1N1wiLCBjaGlsZHJlbjogLyogQF9fUFVSRV9fICovIGMoXCJyZWN0XCIsIHsgd2lkdGg6IFwiMjRcIiwgaGVpZ2h0OiBcIjI0XCIsIGZpbGw6IFwid2hpdGVcIiB9KSB9KSB9KVxuXSB9KSwgYmggPSAoKSA9PiAvKiBAX19QVVJFX18gKi8gZTEoXCJzdmdcIiwgeyB2aWV3Qm94OiBcIjAgMCAyNCAyNFwiLCBmaWxsOiBcIm5vbmVcIiwgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiwgY2hpbGRyZW46IFtcbiAgLyogQF9fUFVSRV9fICovIGUxKFwiZ1wiLCB7IGNsaXBQYXRoOiBcInVybCgjY2xpcDBfMjY0MF80NDg1NilcIiwgY2hpbGRyZW46IFtcbiAgICAvKiBAX19QVVJFX18gKi8gYyhcbiAgICAgIFwicGF0aFwiLFxuICAgICAge1xuICAgICAgICBkOiBcIk0wLjcgNi41SDUuOUM2LjMgNi41IDYuNyA2LjExMTk0IDYuNiA1LjcyMzg4VjAuNjc5MTA1QzYuNiAwLjI5MTA0NSA2LjMgMCA1LjkgMEgwLjdDMC4zIDAgMCAwLjI5MTA0NSAwIDAuNjc5MTA1VjUuNzIzODhDMCA2LjExMTk0IDAuMyA2LjUgMC43IDYuNVpcIixcbiAgICAgICAgZmlsbDogXCJjdXJyZW50Q29sb3JcIlxuICAgICAgfVxuICAgICksXG4gICAgLyogQF9fUFVSRV9fICovIGMoXG4gICAgICBcInBhdGhcIixcbiAgICAgIHtcbiAgICAgICAgZDogXCJNMTAuMyA0LjA1SDIzQzIzLjYgNC4wNSAyNCAzLjcgMjQgMy4xNzVDMjQgMi43Mzc1IDIzLjYgMi4zIDIzIDIuM0gxMC4zQzkuODAwMDUgMi4zIDkuMzAwMDUgMi42NSA5LjMwMDA1IDMuMTc1QzkuMzAwMDUgMy42MTI1IDkuNzAwMDUgNC4wNSAxMC4zIDQuMDVaXCIsXG4gICAgICAgIGZpbGw6IFwiY3VycmVudENvbG9yXCJcbiAgICAgIH1cbiAgICApLFxuICAgIC8qIEBfX1BVUkVfXyAqLyBjKFxuICAgICAgXCJwYXRoXCIsXG4gICAgICB7XG4gICAgICAgIGQ6IFwiTTUuOSAxNS4ySDAuN0MwLjMgMTUuMiAwIDE0LjkwNDUgMCAxNC41MTA2VjkuMzg5MzlDMCA4Ljk5NTQ1IDAuMyA4LjcgMC43IDguN0g1LjlDNi4zIDguNyA2LjYgOC45OTU0NSA2LjYgOS4zODkzOVYxNC41MTA2QzYuNyAxNC45MDQ1IDYuMyAxNS4yIDUuOSAxNS4yWlwiLFxuICAgICAgICBmaWxsOiBcImN1cnJlbnRDb2xvclwiXG4gICAgICB9XG4gICAgKSxcbiAgICAvKiBAX19QVVJFX18gKi8gYyhcbiAgICAgIFwicGF0aFwiLFxuICAgICAge1xuICAgICAgICBkOiBcIk0xMC4zIDEyLjc1SDIzQzIzLjYgMTIuNzUgMjQgMTIuNCAyNCAxMS44NzVDMjQgMTEuNDM3NSAyMy42IDExIDIzIDExSDEwLjNDOS44MDAwNSAxMSA5LjMwMDA1IDExLjM1IDkuMzAwMDUgMTEuODc1QzkuMzAwMDUgMTIuMzEyNSA5LjcwMDA1IDEyLjc1IDEwLjMgMTIuNzVaXCIsXG4gICAgICAgIGZpbGw6IFwiY3VycmVudENvbG9yXCJcbiAgICAgIH1cbiAgICApLFxuICAgIC8qIEBfX1BVUkVfXyAqLyBjKFxuICAgICAgXCJwYXRoXCIsXG4gICAgICB7XG4gICAgICAgIGQ6IFwiTTUuOSAyMy45SDAuN0MwLjMgMjMuOSAwIDIzLjYwNDUgMCAyMy4yMTA2VjE4LjA4OTRDMCAxNy42OTU0IDAuMyAxNy40IDAuNyAxNy40SDUuOUM2LjMgMTcuNCA2LjYgMTcuNjk1NCA2LjYgMTguMDg5NFYyMy4yMTA2QzYuNyAyMy42MDQ1IDYuMyAyMy45IDUuOSAyMy45WlwiLFxuICAgICAgICBmaWxsOiBcImN1cnJlbnRDb2xvclwiXG4gICAgICB9XG4gICAgKSxcbiAgICAvKiBAX19QVVJFX18gKi8gYyhcbiAgICAgIFwicGF0aFwiLFxuICAgICAge1xuICAgICAgICBkOiBcIk0xMC4zIDIxLjQ1SDIzQzIzLjYgMjEuNDUgMjQgMjEuMDEyNSAyNCAyMC41NzVDMjQgMjAuMTM3NSAyMy42IDE5LjcgMjMgMTkuN0gxMC4zQzkuODAwMDUgMTkuNyA5LjMwMDA1IDIwLjA1IDkuMzAwMDUgMjAuNTc1QzkuMzAwMDUgMjEuMDEyNSA5LjcwMDA1IDIxLjQ1IDEwLjMgMjEuNDVaXCIsXG4gICAgICAgIGZpbGw6IFwiY3VycmVudENvbG9yXCJcbiAgICAgIH1cbiAgICApXG4gIF0gfSksXG4gIC8qIEBfX1BVUkVfXyAqLyBjKFwiZGVmc1wiLCB7IGNoaWxkcmVuOiAvKiBAX19QVVJFX18gKi8gYyhcImNsaXBQYXRoXCIsIHsgaWQ6IFwiY2xpcDBfMjY0MF80NDg1NlwiLCBjaGlsZHJlbjogLyogQF9fUFVSRV9fICovIGMoXCJyZWN0XCIsIHsgd2lkdGg6IFwiMjRcIiwgaGVpZ2h0OiBcIjI0XCIsIGZpbGw6IFwid2hpdGVcIiB9KSB9KSB9KVxuXSB9KSwgTWggPSAoKSA9PiAvKiBAX19QVVJFX18gKi8gYyhcInN2Z1wiLCB7IHZpZXdCb3g6IFwiMCAwIDI0IDI0XCIsIGZpbGw6IFwibm9uZVwiLCB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLCBjaGlsZHJlbjogLyogQF9fUFVSRV9fICovIGMoXG4gIFwicGF0aFwiLFxuICB7XG4gICAgZmlsbFJ1bGU6IFwiZXZlbm9kZFwiLFxuICAgIGNsaXBSdWxlOiBcImV2ZW5vZGRcIixcbiAgICBkOiBcIk0xMiAxLjVDNi4yMDEwMSAxLjUgMS41IDYuMjAxMDEgMS41IDEyQzEuNSAxNy43OTkgNi4yMDEwMSAyMi41IDEyIDIyLjVDMTcuNzk5IDIyLjUgMjIuNSAxNy43OTkgMjIuNSAxMkMyMi41IDExLjU4NTggMjIuODM1OCAxMS4yNSAyMy4yNSAxMS4yNUMyMy42NjQyIDExLjI1IDI0IDExLjU4NTggMjQgMTJDMjQgMTguNjI3NCAxOC42Mjc0IDI0IDEyIDI0QzUuMzcyNTggMjQgMCAxOC42Mjc0IDAgMTJDMCA1LjM3MjU4IDUuMzcyNTggMCAxMiAwQzEyLjQxNDIgMCAxMi43NSAwLjMzNTc4NiAxMi43NSAwLjc1QzEyLjc1IDEuMTY0MjEgMTIuNDE0MiAxLjUgMTIgMS41WlwiLFxuICAgIGZpbGw6IFwiY3VycmVudENvbG9yXCJcbiAgfVxuKSB9KSwgQWggPSAoKSA9PiAvKiBAX19QVVJFX18gKi8gZTEoXCJzdmdcIiwgeyB2aWV3Qm94OiBcIjAgMCAyNCAyNFwiLCBmaWxsOiBcIm5vbmVcIiwgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiwgY2hpbGRyZW46IFtcbiAgLyogQF9fUFVSRV9fICovIGMoXG4gICAgXCJwYXRoXCIsXG4gICAge1xuICAgICAgZmlsbFJ1bGU6IFwiZXZlbm9kZFwiLFxuICAgICAgY2xpcFJ1bGU6IFwiZXZlbm9kZFwiLFxuICAgICAgZDogXCJNMTEuOTk5OCAzLjc2NDY4QzE0LjQ3MjQgMy43NjQ2OCAxNi41NDYyIDUuODAzODUgMTYuNTQ2MiA4LjIzNTE2QzE2LjU0NjIgMTAuNzQ0OSAxNC40NzI0IDEyLjcwNTYgMTEuOTk5OCAxMi43MDU2QzkuNTI3MiAxMi43MDU2IDcuNDUzNCAxMC42NjY1IDcuNDUzNCA4LjIzNTE2QzcuNDUzNCA1LjgwMzg1IDkuNTI3MiAzLjc2NDY4IDExLjk5OTggMy43NjQ2OFpNMTIuMDc5NiA1LjE3NjRDMTAuMzI0OCA1LjE3NjQgOC45Njg4NyA2LjU4ODE0IDguOTY4ODcgOC4yMzUxNkM4Ljk2ODg3IDkuODgyMTcgMTAuMzI0OCAxMS4yOTM5IDEyLjA3OTYgMTEuMjkzOUMxMy44MzQzIDExLjI5MzkgMTUuMTkwMyA5Ljg4MjE3IDE1LjE5MDMgOC4yMzUxNkMxNS4xOTAzIDYuNTA5NzEgMTMuODM0MyA1LjE3NjQgMTIuMDc5NiA1LjE3NjRaXCIsXG4gICAgICBmaWxsOiBcImN1cnJlbnRDb2xvclwiXG4gICAgfVxuICApLFxuICAvKiBAX19QVVJFX18gKi8gYyhcbiAgICBcInBhdGhcIixcbiAgICB7XG4gICAgICBmaWxsUnVsZTogXCJldmVub2RkXCIsXG4gICAgICBjbGlwUnVsZTogXCJldmVub2RkXCIsXG4gICAgICBkOiBcIk0xMi42MzgxIDIzLjY4NjNDMTIuNDc4NiAyMy45MjE2IDEyLjIzOTMgMjQgMTIgMjRDMTEuNzYwNyAyNCAxMS41MjE0IDIzLjg0MzEgMTEuMzYxOSAyMy42ODYzQzExLjM1MTEgMjMuNjcwMyAxMS4zMzIxIDIzLjY0MjcgMTEuMzA1NiAyMy42MDRDMTAuNTQ4OCAyMi41MDAzIDMuNjI0NzYgMTIuNDAyOSAzLjYyNDc2IDguMjM1M0MzLjYyNDc2IDMuNjg2MjggNy4zNzM2NiAwIDEyIDBDMTYuNjI2MyAwIDIwLjM3NTIgMy42ODYyOCAyMC4zNzUyIDguMjM1M0MyMC4zNzUyIDEyLjQ1NDEgMTMuNTMxMiAyMi4zODk0IDEyLjcwODIgMjMuNTg0MkMxMi42NzQzIDIzLjYzMzMgMTIuNjUwNyAyMy42Njc3IDEyLjYzODEgMjMuNjg2M1pNMTguODU5NyA4LjIzNTNDMTguODU5NyA0LjU0OTAyIDE1LjgyODYgMS40OTAxOSAxMiAxLjQ5MDE5QzguMjUxMDcgMS40OTAxOSA1LjE0MDI3IDQuNDcwNTkgNS4xNDAyNyA4LjIzNTNDNS4xNDAyNyAxMS4yMTU3IDkuNjA3MDYgMTguNDMxNCAxMiAyMS45NjA4QzE0LjMxMzEgMTguNDMxNCAxOC44NTk3IDExLjEzNzMgMTguODU5NyA4LjIzNTNaXCIsXG4gICAgICBmaWxsOiBcImN1cnJlbnRDb2xvclwiXG4gICAgfVxuICApXG5dIH0pLCB1aCA9ICgpID0+IC8qIEBfX1BVUkVfXyAqLyBjKFwic3ZnXCIsIHsgdmlld0JveDogXCIwIDAgMjQgMjRcIiwgZmlsbDogXCJub25lXCIsIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsIGNoaWxkcmVuOiAvKiBAX19QVVJFX18gKi8gYyhcbiAgXCJwYXRoXCIsXG4gIHtcbiAgICBkOiBcIk0yMS44ODI0IDkuNzIyMzdIMTkuMTM3M1Y3Ljg4NjY3QzE5LjEzNzMgNi44NjY4NCAxOSA1Ljk4Mjk5IDE4LjcyNTUgNS4xNjcxMkMxNy42OTYxIDIuMDM5NjQgMTQuOTUxIDAgMTIgMEM4LjAxOTYxIDAgNC43OTQxMiAzLjUzNTQgNC43OTQxMiA3Ljk1NDY2VjkuNzkwMzdIMi4xMTc2NEMxLjc3NDUxIDkuNzkwMzcgMS41IDEwLjA2MjMgMS41IDEwLjQwMjNWMjMuMzg4MUMxLjUgMjMuNzI4MSAxLjc3NDUxIDI0IDIuMTE3NjQgMjRIMjEuODgyNEMyMi4yMjU1IDI0IDIyLjUgMjMuNzI4MSAyMi41IDIzLjM4ODFWMTAuNDAyM0MyMi41IDEwLjA2MjMgMjIuMjI1NSA5LjcyMjM3IDIxLjg4MjQgOS43MjIzN1pNNi4wOTgwNCA3Ljk1NDY2QzYuMDk4MDQgNC4yODMyOCA4Ljc3NDUxIDEuMjkxNzggMTIgMS4yOTE3OEMxNC40NzA2IDEuMjkxNzggMTYuNjY2NyAzLjA1OTQ4IDE3LjU1ODggNS42NDMwNUMxNy43NjQ3IDYuMzIyOTQgMTcuOTAyIDcuMDcwODEgMTcuOTAyIDcuOTU0NjZWOS43OTAzN0g2LjA5ODA0VjcuOTU0NjZaTTIxLjE5NjEgMjIuNzc2MkgyLjgwMzkyVjExLjAxNDJIMjEuMTk2MVYyMi43NzYyWlwiLFxuICAgIGZpbGw6IFwiY3VycmVudENvbG9yXCJcbiAgfVxuKSB9KSwgemggPSAoKSA9PiAvKiBAX19QVVJFX18gKi8gYyhcInN2Z1wiLCB7IHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsIHZpZXdCb3g6IFwiMCAwIDI0IDI1XCIsIGZpbGw6IFwibm9uZVwiLCBjaGlsZHJlbjogLyogQF9fUFVSRV9fICovIGMoXG4gIFwicGF0aFwiLFxuICB7XG4gICAgZDogXCJNMjEuMSAxMC40SDE4LjlWOS4wMDAwMkMxOC45IDguMDAwMDIgMTguOCA3LjEwMDAyIDE4LjUgNi4yMDAwMkMxNy41IDMuMDAwMDIgMTQuNyAwLjkwMDAyNCAxMS42IDAuOTAwMDI0QzcuNSAxLjAwMDAyIDQuMiA0LjYwMDAzIDQuMiA5LjEwMDAzVjEwLjVIMkMxLjQgMTAuNSAxIDExIDEgMTEuNVYyNEMxIDI0LjYgMS40IDI1IDIgMjVIMjEuMUMyMS43IDI1IDIyLjEgMjQuNiAyMi4xIDI0VjExLjVDMjIuMSAxMC45IDIxLjYgMTAuNCAyMS4xIDEwLjRaTTYuMyA5LjEwMDAzQzYuMyA1LjgwMDAyIDguNyAzLjEwMDAyIDExLjYgMy4xMDAwMkMxMy44IDMuMTAwMDIgMTUuOCA0LjcwMDAyIDE2LjYgNy4wMDAwMkMxNi44IDcuNzAwMDIgMTYuOSA4LjQwMDAzIDE2LjkgOS4xMDAwM1YxMC41SDYuM1Y5LjEwMDAzWlwiLFxuICAgIGZpbGw6IFwiY3VycmVudENvbG9yXCJcbiAgfVxuKSB9KSwgaGggPSAoKSA9PiAvKiBAX19QVVJFX18gKi8gYyhcInN2Z1wiLCB7IHZpZXdCb3g6IFwiMCAwIDI0IDI0XCIsIGZpbGw6IFwibm9uZVwiLCB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLCBjaGlsZHJlbjogLyogQF9fUFVSRV9fICovIGMoXG4gIFwicGF0aFwiLFxuICB7XG4gICAgZDogXCJNMTIuMDM0NCAxLjI5MTc4QzE1LjA2MzkgMS4yOTE3OCAxNy42MTE1IDMuODc1MzQgMTcuOTU1NyA3LjIwNjc4QzE4LjAyNDYgNy41NDY3MyAxOC4zIDcuODE4NyAxOC42NDQzIDcuNzUwNzFDMTguOTg4NSA3LjY4MjcyIDE5LjI2MzkgNy40MTA3NiAxOS4xOTUxIDcuMDcwODJDMTguNzgyIDMuMDU5NDkgMTUuNjgzNiAwIDEyLjAzNDQgMEM4LjA0MDk4IDAgNC44MDQ5MSAzLjUzNTQgNC44MDQ5MSA3Ljk1NDY2VjkuNzkwMzdIMi4xMTk2N0MxLjc3NTQxIDkuNzkwMzcgMS41IDEwLjA2MjMgMS41IDEwLjQwMjNWMjMuMzg4MUMxLjUgMjMuNzI4MSAxLjc3NTQxIDI0IDIuMTE5NjcgMjRIMjEuODgwM0MyMi4yMjQ2IDI0IDIyLjUgMjMuNzI4MSAyMi41IDIzLjM4ODFWMTAuNDAyM0MyMi41IDEwLjA2MjMgMjIuMjI0NiA5Ljc5MDM3IDIxLjg4MDMgOS43OTAzN0g2LjA0NDI3VjcuOTU0NjZDNi4xMTMxMiA0LjI4MzI4IDguNzI5NSAxLjI5MTc4IDEyLjAzNDQgMS4yOTE3OFpNMjEuMjYwNiAyMi43NzYySDIuODA4MTlWMTEuMDE0MkgyMS4yNjA2VjIyLjc3NjJaXCIsXG4gICAgZmlsbDogXCJjdXJyZW50Q29sb3JcIlxuICB9XG4pIH0pLCBPaCA9ICgpID0+IC8qIEBfX1BVUkVfXyAqLyBjKFwic3ZnXCIsIHsgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiwgdmlld0JveDogXCIwIDAgMjQgMjRcIiwgZmlsbDogXCJub25lXCIsIGNoaWxkcmVuOiAvKiBAX19QVVJFX18gKi8gYyhcbiAgXCJwYXRoXCIsXG4gIHtcbiAgICBkOiBcIk0xNy44IDcuM0MxOC40IDcuMiAxOC44IDYuNiAxOC43IDYuMUMxNy45IDIuNSAxNSAwIDExLjYgMEM3LjUgMCA0LjIgMy42IDQuMiA4LjFWOS41SDJDMS40IDkuNSAxIDEwIDEgMTAuNVYyM0MxIDIzLjUgMS40IDI0IDIgMjRIMjEuMUMyMS42IDI0IDIyLjEgMjMuNSAyMi4xIDIzVjEwLjRDMjIuMSA5LjggMjEuNiA5LjQgMjEuMSA5LjRINi4yVjguMUM2LjMgNC43IDguNiAyLjEgMTEuNiAyLjFDMTQgMi4xIDE2LjEgNCAxNi44IDYuNkMxNi44IDcgMTcuMyA3LjQgMTcuOCA3LjNaXCIsXG4gICAgZmlsbDogXCJjdXJyZW50Q29sb3JcIlxuICB9XG4pIH0pLCBmaCA9ICgpID0+IC8qIEBfX1BVUkVfXyAqLyBlMShcInN2Z1wiLCB7IHZpZXdCb3g6IFwiMCAwIDI0IDI0XCIsIGZpbGw6IFwibm9uZVwiLCB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLCBjaGlsZHJlbjogW1xuICAvKiBAX19QVVJFX18gKi8gYyhcbiAgICBcInBhdGhcIixcbiAgICB7XG4gICAgICBmaWxsUnVsZTogXCJldmVub2RkXCIsXG4gICAgICBjbGlwUnVsZTogXCJldmVub2RkXCIsXG4gICAgICBkOiBcIk0xMy4yODUzIDEuMzc3MDVWOS4xMTQyN0gxNC42MjQ3VjEuMTgwMzNDMTQuNjI0NyAwLjUzNTc2OCAxNC4xMjAzIDAgMTMuNDgyIDBIMi4xMzExNUMxLjQ5MjkyIDAgMC45ODg1MjUgMC41MzU3NjggMC45ODg1MjUgMS4xODAzM1YyMi44MTk3QzAuOTg4NTI1IDIzLjQ2NDIgMS40OTI5MiAyNCAyLjEzMTE1IDI0SDEzLjQ4MkMxNC4xMjAzIDI0IDE0LjYyNDcgMjMuNDY0MiAxNC42MjQ3IDIyLjgxOTdWMTQuODg1NkgxMy4yODUzVjIyLjYyMjlIMi4zMjc4OFYxLjM3NzA1SDEzLjI4NTNaXCIsXG4gICAgICBmaWxsOiBcImN1cnJlbnRDb2xvclwiXG4gICAgfVxuICApLFxuICAvKiBAX19QVVJFX18gKi8gYyhcbiAgICBcInBhdGhcIixcbiAgICB7XG4gICAgICBmaWxsUnVsZTogXCJldmVub2RkXCIsXG4gICAgICBjbGlwUnVsZTogXCJldmVub2RkXCIsXG4gICAgICBkOiBcIk0yMi43ODUgMTEuNTE2M0wxNi45MDY1IDcuNjIxNTlDMTYuMjk0MSA3LjE3NzkgMTUuNjE1NiA4LjE5NzE3IDE2LjI3OSA4LjU5NzRMMjAuNTcgMTEuNDMyNkg2Ljc4NDMxQzYuMDQ0NzEgMTEuNDMyNiA2LjA1ODM3IDEyLjU5NTMgNi43ODQzMSAxMi41OTUzSDIwLjU3TDE2LjI3NTIgMTUuNDMyNkMxNS42ODggMTUuODY3MyAxNi4yNzUyIDE2Ljc3NzQgMTYuOTE1NyAxNi4zNTk3TDIyLjc4NSAxMi40NzFDMjMuMDk3NSAxMi4yNTgyIDIzLjA3NjMgMTEuNzI4NCAyMi43ODUgMTEuNTE2M1pcIixcbiAgICAgIGZpbGw6IFwiY3VycmVudENvbG9yXCJcbiAgICB9XG4gIClcbl0gfSksIGdoID0gKCkgPT4gLyogQF9fUFVSRV9fICovIGMoXCJzdmdcIiwgeyB2aWV3Qm94OiBcIjAgMCAyNSAyNFwiLCBmaWxsOiBcIm5vbmVcIiwgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiwgY2hpbGRyZW46IC8qIEBfX1BVUkVfXyAqLyBjKFxuICBcInBhdGhcIixcbiAge1xuICAgIGQ6IFwiTTEuNjc0MjEgMy41Mjc3OEMxLjIwMzYyIDMuNTI3NzggMC44ODk4OTMgMy44NTA1MyAwLjg4OTg5MyA0LjMzNDY2VjE5Ljc0NkMwLjg4OTg5MyAyMC4xNjQ0IDEuMjAzMDcgMjAuNDcyMiAxLjU5NTc3IDIwLjQ3MjJIMjQuMTA1NkMyNC41MDk0IDIwLjQ3MjIgMjQuODg5OSAyMC4wNjg1IDI0Ljg4OTkgMTkuNjY1M1Y0LjMzNDY2QzI0Ljg4OTkgMy44NTA1MyAyNC41NzYyIDMuNTI3NzggMjQuMTA1NiAzLjUyNzc4SDEuNjc0MjFaTTIuMTQ4NTQgNS43OTA2OUw4LjY4OTM4IDExLjg3MzJMMi4xNDg1NCAxOC4zNDQ0VjUuNzkwNjlaTTE0Ljg0MzcgMTIuMzExQzEzLjc0NTcgMTMuMzYgMTEuOTIzMiAxMy4zNiAxMC45MDM2IDEyLjMxMUwyLjkwODI0IDQuODcxNEgyMi45MDJMMTQuODQzNyAxMi4zMTFaTTkuNDQ0OTUgMTIuNjc1NUMxMC40MTM2IDEzLjY3MiAxMS4zMjU2IDE0LjI1MjEgMTIuNzg5MyAxNC4yNTIxQzE0LjIxMjIgMTQuMjUyMSAxNS4yNTE1IDEzLjY0ODYgMTYuMTk3NCAxMi42NzU1TDIyLjkwMiAxOS4yNTRIMi45MDgyNEw5LjQ0NDk1IDEyLjY3NTVaTTE3LjA2NzggMTEuODczMkwyMy42OTIzIDUuNzkwNjlWMTguMzQ0NEwxNy4wNjc4IDExLjg3MzJaXCIsXG4gICAgZmlsbDogXCJjdXJyZW50Q29sb3JcIlxuICB9XG4pIH0pLCBDaCA9ICgpID0+IC8qIEBfX1BVUkVfXyAqLyBjKFwic3ZnXCIsIHsgdmlld0JveDogXCIwIDAgMjQgMjRcIiwgZmlsbDogXCJub25lXCIsIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsIGNoaWxkcmVuOiAvKiBAX19QVVJFX18gKi8gYyhcbiAgXCJwYXRoXCIsXG4gIHtcbiAgICBkOiBcIk0xNC4yNzIxIDEuMDQxNTRDMTIuOTAxNiAtMC4zMTE1NzYgMTAuNzM3NyAtMC4zMTE1NzYgOS40MzkzNCAxLjA0MTU0QzcuODkxMTggMi41NzAwNyAxLjE4NTQ4IDkuMDg5MDIgMSA5LjY1ODc1QzEgOS42NTg3NSAxLjAwMDEgOS42NTg3NSAxIDIzLjMzMjNDMSAyMy42ODg0IDEuMjg4NTIgMjMuOTczMyAxLjY0OTE4IDIzLjk3MzNIMjIuMzUwOEMyMi43MzY0IDIzLjk3MzMgMjMgMjMuNjk0NiAyMyAyMy4zMzIzVjkuODAxMThDMjIuNzYxMiA5LjA4OTAyIDE3LjEwMDMgMy44MDk5NyAxNC4yNzIxIDEuMDQxNTRaTTEzLjA0NTkgMTYuNTY2OEwyMS40ODUyIDExLjAxMTlWMjIuMTkyOUwxMy4wNDU5IDE2LjU2NjhaTTMuNzQwOTggMTAuNDQyMUgyMC4wNDI2TDExLjg5MTggMTUuNzgzNEwzLjc0MDk4IDEwLjQ0MjFaTTEwLjM3NyAxLjk2NzM2QzExLjE3MDUgMS4xODM5NyAxMi41NDEgMS4xODM5NyAxMy4zMzQ0IDEuOTY3MzZMMjAuNTQ3NSA5LjA4OTAySDMuMTYzOTNMMTAuMzc3IDEuOTY3MzZaTTIuMjI2MjMgMTEuMDExOUwxMS41MzExIDE3LjEzNjVMMjAuMDQyNiAyMi43NjI2SDIuMjI2MjNWMTEuMDExOVpcIixcbiAgICBmaWxsOiBcImN1cnJlbnRDb2xvclwiXG4gIH1cbikgfSksIG1oID0gKCkgPT4gLyogQF9fUFVSRV9fICovIGMoXCJzdmdcIiwgeyB2aWV3Qm94OiBcIjAgMCAyNCAyNFwiLCBmaWxsOiBcIm5vbmVcIiwgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiwgY2hpbGRyZW46IC8qIEBfX1BVUkVfXyAqLyBjKFxuICBcInBhdGhcIixcbiAge1xuICAgIGQ6IFwiTTIyLjY1NTcgMy4zMTY3OUwxNi4wNDU5IDAuMDUxMDI3NkMxNi4wNDU5IDAuMDUxMDI3NiAxNi4wNDU5IDAuMDUxMDI3NiAxNS45NzcgMC4wNTEwMjc2SDE1LjkwODJIMTUuODM5M0gxNS43NzA1SDE1LjcwMTZIMTUuNjMyOEgxNS41NjM5SDE1LjQ5NTFMOS4yMjk1MSAzLjE4MDcxTDIuODk1MDggMC4wNTEwMjc2QzIuNjg4NTMgLTAuMDE3MDA5MiAyLjQ4MTk3IC0wLjAxNzAwOTIgMi4yNzU0MSAwLjA1MTAyNzZDMi4wNjg4NSAwLjE4NzEwMSAyIDAuMzkxMjAzIDIgMC41OTUzMTRWMjAuMTIxOUMyIDIwLjM5NCAyLjEzNzcgMjAuNTk4MSAyLjM0NDI2IDIwLjY2NjJMOC45NTQxIDIzLjkzMTlDOS4wMjI5NSAyNCA5LjA5MTgxIDI0IDkuMjI5NTEgMjRDOS4yOTgzNiAyNCA5LjQzNjA2IDI0IDkuNTA0OTIgMjMuOTMxOUwxNS43NzA1IDIwLjgwMjNMMjIuMTA0OSAyMy45MzE5QzIyLjE3MzggMjQgMjIuMzExNSAyNCAyMi4zODAzIDI0QzIyLjUxOCAyNCAyMi41ODY5IDI0IDIyLjcyNDYgMjMuOTMxOUMyMi45MzExIDIzLjc5NTkgMjMgMjMuNTkxOCAyMyAyMy4zODc3VjMuODYxMDdDMjMgMy41ODg5MyAyMi44NjIzIDMuMzg0ODIgMjIuNjU1NyAzLjMxNjc5Wk0zLjIzOTM1IDEuNjE1ODdMOC41NDA5OSA0LjI2OTMyVjIyLjM2NzFMMy4yMzkzNSAxOS43MTM3VjEuNjE1ODdaTTkuODQ5MTggNC4yNjkzMkwxNS4xNTA4IDEuNjE1ODdWMTkuNzEzN0w5Ljg0OTE4IDIyLjM2NzFWNC4yNjkzMlpNMjEuNzYwNyAyMi4zNjcxTDE2LjQ1OSAxOS43MTM3VjEuNjE1ODdMMjEuNzYwNyA0LjI2OTMyVjIyLjM2NzFaXCIsXG4gICAgZmlsbDogXCJjdXJyZW50Q29sb3JcIlxuICB9XG4pIH0pLCBMaCA9ICgpID0+IC8qIEBfX1BVUkVfXyAqLyBlMShcInN2Z1wiLCB7IHZpZXdCb3g6IFwiMCAwIDI0IDI0XCIsIGZpbGw6IFwibm9uZVwiLCB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLCBjaGlsZHJlbjogW1xuICAvKiBAX19QVVJFX18gKi8gYyhcbiAgICBcInBhdGhcIixcbiAgICB7XG4gICAgICBkOiBcIk0xNC43ODA5IDEwLjEyODlMMjIuMzYxNiAyLjU0ODFDMjIuMDA2IDQuNDY3NjYgMjEuNjM3NSA2LjQyNjQ4IDIxLjI4NTQgOC4zMTUzNUMyMS4yMTM3IDguNjMzODUgMjEuNDEwMSA5LjAxMjg2IDIxLjc3NTIgOS4wNzUzOEMyMi4xMjMgOS4xMzQ5NSAyMi40MzA2IDguODc2MjggMjIuNDg1MSA4LjU2Mzc0QzIyLjUyMDIgOC4zNjI0OSAyMy44MjAyIDEuNjQ2MDEgMjMuOTQxOCAwLjg4NzYxQzIzLjk3NzggMC42NjMwNTEgMjMuODk2OSAwLjQwNjY3OCAyMy43MzIxIDAuMjQyMTYzQzIzLjQ3MTkgLTAuMDE3NTgwMyAyMy4xMTM3IDAuMDU4MTQ3NyAyMi43OTI4IDAuMTE0OTc1QzIwLjMyNjcgMC41NTE2NzYgMTcuODY3OCAxLjAyOTYzIDE1LjQwNyAxLjQ5NDg1QzE1LjA2MTggMS41NDM4NiAxNC44MzgyIDEuODgyOSAxNC45Mjc0IDIuMjQ0OUMxNC45ODU2IDIuNTgyNDYgMTUuMzIyNiAyLjgxMTI4IDE1LjY4NDUgMi43Mjc2TDIxLjQ1NzMgMS42NDc3M0wxMy44NzggOS4yMjcwN0MxMy42Mzc3IDkuNDY3NCAxMy42NDY5IDkuODUxNjkgMTMuODg1MiAxMC4wODk1QzE0LjExNzkgMTAuMzIxOSAxNC41MzY5IDEwLjM3MjggMTQuNzgwOSAxMC4xMjg5WlwiLFxuICAgICAgZmlsbDogXCJjdXJyZW50Q29sb3JcIlxuICAgIH1cbiAgKSxcbiAgLyogQF9fUFVSRV9fICovIGMoXG4gICAgXCJwYXRoXCIsXG4gICAge1xuICAgICAgZmlsbFJ1bGU6IFwiZXZlbm9kZFwiLFxuICAgICAgY2xpcFJ1bGU6IFwiZXZlbm9kZFwiLFxuICAgICAgZDogXCJNMTMuODUgMTAuMTI0N0MxMy41OTMyIDkuODY4MzMgMTMuNTgyMiA5LjQ1MjUgMTMuODQyOCA5LjE5MTlMMjEuMzA4NiAxLjcyNjE3TDE1LjY5NDYgMi43NzYzMUMxNS4zMDY5IDIuODY1MzggMTQuOTQyNyAyLjYyMDQ3IDE0Ljg3ODcgMi4yNTUxQzE0Ljc4NDEgMS44Njc1NCAxNS4wMjM3IDEuNDk5NzEgMTUuMzk4OCAxLjQ0NTc2QzE1Ljk3NjggMS4zMzY1IDE2LjU1NDcgMS4yMjY1MyAxNy4xMzI2IDEuMTE2NTVDMTkuMDE0NyAwLjc1ODM3NSAyMC44OTc0IDAuNDAwMTA1IDIyLjc4NDEgMC4wNjU5OTQ5QzIyLjc5NjMgMC4wNjM4NDQ5IDIyLjgwODUgMC4wNjE2NTY2IDIyLjgyMDkgMC4wNTk0NTI1QzIyLjk2OTUgMC4wMzI4OTM1IDIzLjEzMTQgMC4wMDM5NzEwMyAyMy4yODcyIDAuMDEwMTUxNkMyMy40NTgxIDAuMDE2OTMwOCAyMy42MjYgMC4wNjU5MzYzIDIzLjc2NzIgMC4yMDY5NkMyMy45NDM0IDAuMzgyODU0IDI0LjAyOTQgMC42NTUyOTEgMjMuOTkwOSAwLjg5NTQ4OEMyMy45MDMgMS40NDQxIDIzLjE5NjQgNS4xMjA4MiAyMi44MDAzIDcuMTgyMTJDMjIuNjQ5NCA3Ljk2NzE0IDIyLjU0MzYgOC41MTc4NiAyMi41MzQxIDguNTcyMjlDMjIuNDc1NCA4LjkwODY3IDIyLjE0NDcgOS4xODkxMyAyMS43NjY4IDkuMTI0NDFDMjEuMzY5NiA5LjA1NjM4IDIxLjE2MDMgOC42NDY4OCAyMS4yMzY3IDguMzA1MzZDMjEuMzcwMSA3LjU4OTU5IDIxLjUwNTggNi44NjM4MyAyMS42NDI0IDYuMTMzOThDMjEuODU2MyA0Ljk5MDYxIDIyLjA3MiAzLjgzNzIyIDIyLjI4MzUgMi42OTY1NkwxNC44MTYgMTAuMTY0QzE0LjU0ODIgMTAuNDMxOSAxNC4wOTc1IDEwLjM3MTggMTMuODUgMTAuMTI0N1pNMTQuNzgwOSAxMC4xMjg5QzE0LjUzNjkgMTAuMzcyOCAxNC4xMTc5IDEwLjMyMTkgMTMuODg1MiAxMC4wODk1QzEzLjY0NjkgOS44NTE2OSAxMy42Mzc3IDkuNDY3NCAxMy44NzggOS4yMjcwN0wyMS40NTczIDEuNjQ3NzNMMTUuNjg0NSAyLjcyNzZDMTUuMzIyNiAyLjgxMTI4IDE0Ljk4NTYgMi41ODI0NiAxNC45Mjc0IDIuMjQ0OUMxNC44MzgyIDEuODgyOSAxNS4wNjE4IDEuNTQzODYgMTUuNDA3IDEuNDk0ODVDMTUuOTg1NCAxLjM4NTUgMTYuNTYzNyAxLjI3NTQ1IDE3LjE0MiAxLjE2NTM5QzE5LjAyNDEgMC44MDcyMjYgMjAuOTA2NCAwLjQ0OTAzIDIyLjc5MjggMC4xMTQ5NzVMMjIuODI4NyAwLjEwODU5M0MyMy4xNDAyIDAuMDUyOTkyOSAyMy40ODE1IC0wLjAwNzk0MzkgMjMuNzMyMSAwLjI0MjE2M0MyMy44OTY5IDAuNDA2Njc4IDIzLjk3NzggMC42NjMwNTEgMjMuOTQxOCAwLjg4NzYxQzIzLjg1NCAxLjQzNTQzIDIzLjE1MTMgNS4wOTIwMSAyMi43NTQ2IDcuMTU2MjJDMjIuNjAyMSA3Ljk0OTY4IDIyLjQ5NDggOC41MDc4NiAyMi40ODUxIDguNTYzNzRDMjIuNDMwNiA4Ljg3NjI4IDIyLjEyMyA5LjEzNDk1IDIxLjc3NTIgOS4wNzUzOEMyMS40MTAxIDkuMDEyODYgMjEuMjEzNyA4LjYzMzg1IDIxLjI4NTQgOC4zMTUzNUMyMS40MTg0IDcuNjAxNzQgMjEuNTUzOCA2Ljg3ODE0IDIxLjY4OTkgNi4xNTA0NUwyMS42OTE0IDYuMTQyMzFDMjEuOTA5NyA0Ljk3NTQxIDIyLjEzIDMuNzk4MDMgMjIuMzQ1NiAyLjYzNDQ2QzIyLjM1MDkgMi42MDU2NiAyMi4zNTYzIDIuNTc2ODggMjIuMzYxNiAyLjU0ODFMMTQuNzgwOSAxMC4xMjg5WlwiLFxuICAgICAgZmlsbDogXCJjdXJyZW50Q29sb3JcIlxuICAgIH1cbiAgKSxcbiAgLyogQF9fUFVSRV9fICovIGMoXG4gICAgXCJwYXRoXCIsXG4gICAge1xuICAgICAgZmlsbFJ1bGU6IFwiZXZlbm9kZFwiLFxuICAgICAgY2xpcFJ1bGU6IFwiZXZlbm9kZFwiLFxuICAgICAgZDogXCJNMTAuMTE1NCAxMy44NDA4QzkuODU5MDEgMTMuNTgzOSA5LjQ0MzE5IDEzLjU3MyA5LjE4MjU5IDEzLjgzMzZMMS43MTY4NiAyMS4yOTkzTDIuNzY2OTkgMTUuNjg1NEMyLjg1NjA3IDE1LjI5NzYgMi42MTExNiAxNC45MzM0IDIuMjQ1NzkgMTQuODY5NEMxLjg1ODIyIDE0Ljc3NDggMS40OTAzOSAxNS4wMTQ1IDEuNDM2NDQgMTUuMzg5NkMwLjk3MTM1NSAxNy44NDk3IDAuMDY2NjM4NSAyMy4wOTI4IDAuMDY2NjM4NSAyMy4wOTI4Qy0wLjAxNTkyMTEgMjMuNjYwOSAwLjI3MDc1NSAyNC4wODAzIDAuODg2MTczIDIzLjk4MTdDMS42NDM3MSAyMy44NjAyIDguMzY1NjQgMjIuNTU5MiA4LjU2Mjk3IDIyLjUyNDhDOC44OTkzNiAyMi40NjYxIDkuMTc5ODIgMjIuMTM1NCA5LjExNTEgMjEuNzU3NUM5LjA0NzA3IDIxLjM2MDMgOC42Mzc1NyAyMS4xNTEgOC4yOTYwNSAyMS4yMjc0QzYuNDU4OTUgMjEuNTY5OCA0LjU1NjAxIDIxLjkyNzcgMi42ODcyNSAyMi4yNzQyTDEwLjE1NDcgMTQuODA2OEMxMC40MjI1IDE0LjUzODkgMTAuMzYyNSAxNC4wODgyIDEwLjExNTQgMTMuODQwOFpcIixcbiAgICAgIGZpbGw6IFwiY3VycmVudENvbG9yXCJcbiAgICB9XG4gIClcbl0gfSksIHZoID0gKCkgPT4gLyogQF9fUFVSRV9fICovIGMoXCJzdmdcIiwgeyB2aWV3Qm94OiBcIjAgMCAyNCAyNFwiLCBmaWxsOiBcIm5vbmVcIiwgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiwgY2hpbGRyZW46IC8qIEBfX1BVUkVfXyAqLyBjKFxuICBcInBhdGhcIixcbiAge1xuICAgIGZpbGxSdWxlOiBcImV2ZW5vZGRcIixcbiAgICBjbGlwUnVsZTogXCJldmVub2RkXCIsXG4gICAgZDogXCJNMC42MzMzNzUgNS45NTA0NEgyMy4zNjY2QzIzLjU0NzMgNS45NTA0NCAyMy43MDUyIDYuMDM2NDIgMjMuODE2MSA2LjE1MDQ3QzIzLjkyNTggNi4yNjMyMyAyNCA2LjQxNDMzIDI0IDYuNTU5NjNDMjQgNi45MDIwMyAyMy43MTM4IDcuMTY4ODMgMjMuMzY2NiA3LjE2ODgzSDAuNjMzMzc1QzAuMjg2MjAyIDcuMTY4ODMgMCA2LjkwMjAzIDAgNi41NTk2M0MwIDYuMjE3MjMgMC4yODYyMDUgNS45NTA0NCAwLjYzMzM3NSA1Ljk1MDQ0Wk0wLjYzMzM3NSAxMS4zOTA4SDIzLjM2NjZDMjMuNzEzOCAxMS4zOTA4IDI0IDExLjY1NzYgMjQgMTJDMjQgMTIuMzQyNCAyMy43MTM4IDEyLjYwOTIgMjMuMzY2NiAxMi42MDkySDAuNjMzMzc1QzAuMjg2MjAxIDEyLjYwOTIgMCAxMi4zNDI0IDAgMTJDMCAxMS42NTc2IDAuMjg2MjAxIDExLjM5MDggMC42MzMzNzUgMTEuMzkwOFpNMC42MzMzNzUgMTYuODMxMkgyMy4zNjY2QzIzLjcxMzggMTYuODMxMiAyNCAxNy4wOTggMjQgMTcuNDQwNEMyNCAxNy43ODI4IDIzLjcxMzggMTguMDQ5NiAyMy4zNjY2IDE4LjA0OTZIMC42MzMzNzVDMC4yODYyMDIgMTguMDQ5NiAwIDE3Ljc4MjggMCAxNy40NDA0QzAgMTcuMDk4IDAuMjg2MiAxNi44MzEyIDAuNjMzMzc1IDE2LjgzMTJaXCIsXG4gICAgZmlsbDogXCJjdXJyZW50Q29sb3JcIlxuICB9XG4pIH0pLCBxaCA9ICgpID0+IC8qIEBfX1BVUkVfXyAqLyBlMShcInN2Z1wiLCB7IHZpZXdCb3g6IFwiMCAwIDI0IDI0XCIsIGZpbGw6IFwibm9uZVwiLCB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLCBjaGlsZHJlbjogW1xuICAvKiBAX19QVVJFX18gKi8gYyhcbiAgICBcInBhdGhcIixcbiAgICB7XG4gICAgICBmaWxsUnVsZTogXCJldmVub2RkXCIsXG4gICAgICBjbGlwUnVsZTogXCJldmVub2RkXCIsXG4gICAgICBkOiBcIk0xMiA2QzEzLjY1NjkgNiAxNSA0LjY1Njg1IDE1IDNDMTUgMS4zNDMxNSAxMy42NTY5IDAgMTIgMEMxMC4zNDMxIDAgOSAxLjM0MzE1IDkgM0M5IDQuNjU2ODUgMTAuMzQzMSA2IDEyIDZaTTEyIDQuNkMxMi44ODM3IDQuNiAxMy42IDMuODgzNjYgMTMuNiAzQzEzLjYgMi4xMTYzNCAxMi44ODM3IDEuNCAxMiAxLjRDMTEuMTE2MyAxLjQgMTAuNCAyLjExNjM0IDEwLjQgM0MxMC40IDMuODgzNjYgMTEuMTE2MyA0LjYgMTIgNC42WlwiLFxuICAgICAgZmlsbDogXCJjdXJyZW50Q29sb3JcIlxuICAgIH1cbiAgKSxcbiAgLyogQF9fUFVSRV9fICovIGMoXG4gICAgXCJwYXRoXCIsXG4gICAge1xuICAgICAgZmlsbFJ1bGU6IFwiZXZlbm9kZFwiLFxuICAgICAgY2xpcFJ1bGU6IFwiZXZlbm9kZFwiLFxuICAgICAgZDogXCJNMTIgMTVDMTMuNjU2OSAxNSAxNSAxMy42NTY5IDE1IDEyQzE1IDEwLjM0MzEgMTMuNjU2OSA5IDEyIDlDMTAuMzQzMSA5IDkgMTAuMzQzMSA5IDEyQzkgMTMuNjU2OSAxMC4zNDMxIDE1IDEyIDE1Wk0xMiAxMy42QzEyLjg4MzcgMTMuNiAxMy42IDEyLjg4MzcgMTMuNiAxMkMxMy42IDExLjExNjMgMTIuODgzNyAxMC40IDEyIDEwLjRDMTEuMTE2MyAxMC40IDEwLjQgMTEuMTE2MyAxMC40IDEyQzEwLjQgMTIuODgzNyAxMS4xMTYzIDEzLjYgMTIgMTMuNlpcIixcbiAgICAgIGZpbGw6IFwiY3VycmVudENvbG9yXCJcbiAgICB9XG4gICksXG4gIC8qIEBfX1BVUkVfXyAqLyBjKFxuICAgIFwicGF0aFwiLFxuICAgIHtcbiAgICAgIGZpbGxSdWxlOiBcImV2ZW5vZGRcIixcbiAgICAgIGNsaXBSdWxlOiBcImV2ZW5vZGRcIixcbiAgICAgIGQ6IFwiTTE1IDIxQzE1IDIyLjY1NjkgMTMuNjU2OSAyNCAxMiAyNEMxMC4zNDMxIDI0IDkgMjIuNjU2OSA5IDIxQzkgMTkuMzQzMSAxMC4zNDMxIDE4IDEyIDE4QzEzLjY1NjkgMTggMTUgMTkuMzQzMSAxNSAyMVpNMTMuNiAyMUMxMy42IDIxLjg4MzcgMTIuODgzNyAyMi42IDEyIDIyLjZDMTEuMTE2MyAyMi42IDEwLjQgMjEuODgzNyAxMC40IDIxQzEwLjQgMjAuMTE2MyAxMS4xMTYzIDE5LjQgMTIgMTkuNEMxMi44ODM3IDE5LjQgMTMuNiAyMC4xMTYzIDEzLjYgMjFaXCIsXG4gICAgICBmaWxsOiBcImN1cnJlbnRDb2xvclwiXG4gICAgfVxuICApXG5dIH0pLCB5aCA9ICgpID0+IC8qIEBfX1BVUkVfXyAqLyBlMShcInN2Z1wiLCB7IHZpZXdCb3g6IFwiMCAwIDI0IDI0XCIsIGZpbGw6IFwibm9uZVwiLCB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLCBjaGlsZHJlbjogW1xuICAvKiBAX19QVVJFX18gKi8gYyhcbiAgICBcInBhdGhcIixcbiAgICB7XG4gICAgICBkOiBcIk0xMiA2QzEzLjY1NjkgNiAxNSA0LjY1Njg1IDE1IDNDMTUgMS4zNDMxNSAxMy42NTY5IDAgMTIgMEMxMC4zNDMxIDAgOSAxLjM0MzE1IDkgM0M5IDQuNjU2ODUgMTAuMzQzMSA2IDEyIDZaXCIsXG4gICAgICBmaWxsOiBcImN1cnJlbnRDb2xvclwiXG4gICAgfVxuICApLFxuICAvKiBAX19QVVJFX18gKi8gYyhcbiAgICBcInBhdGhcIixcbiAgICB7XG4gICAgICBkOiBcIk0xMiAxNUMxMy42NTY5IDE1IDE1IDEzLjY1NjkgMTUgMTJDMTUgMTAuMzQzMSAxMy42NTY5IDkgMTIgOUMxMC4zNDMxIDkgOSAxMC4zNDMxIDkgMTJDOSAxMy42NTY5IDEwLjM0MzEgMTUgMTIgMTVaXCIsXG4gICAgICBmaWxsOiBcImN1cnJlbnRDb2xvclwiXG4gICAgfVxuICApLFxuICAvKiBAX19QVVJFX18gKi8gYyhcbiAgICBcInBhdGhcIixcbiAgICB7XG4gICAgICBkOiBcIk0xMiAyNEMxMy42NTY5IDI0IDE1IDIyLjY1NjkgMTUgMjFDMTUgMTkuMzQzMSAxMy42NTY5IDE4IDEyIDE4QzEwLjM0MzEgMTggOSAxOS4zNDMxIDkgMjFDOSAyMi42NTY5IDEwLjM0MzEgMjQgMTIgMjRaXCIsXG4gICAgICBmaWxsOiBcImN1cnJlbnRDb2xvclwiXG4gICAgfVxuICApXG5dIH0pLCB3aCA9ICgpID0+IC8qIEBfX1BVUkVfXyAqLyBjKFwic3ZnXCIsIHsgdmlld0JveDogXCIwIDAgMjQgMjRcIiwgZmlsbDogXCJub25lXCIsIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsIGNoaWxkcmVuOiAvKiBAX19QVVJFX18gKi8gYyhcbiAgXCJwYXRoXCIsXG4gIHtcbiAgICBmaWxsUnVsZTogXCJldmVub2RkXCIsXG4gICAgY2xpcFJ1bGU6IFwiZXZlbm9kZFwiLFxuICAgIGQ6IFwiTTAuNjM3MzIxIDUuOTQ2MDhIMjMuMzYyN0MyMy43NjU1IDUuOTQ2MDggMjQuMDA3MSA2LjIyMzQ1IDIzLjk5OTggNi41NzIyNkMyMy45OTI3IDYuOTE0MTIgMjMuNzA3NSA3LjE3Mjc3IDIzLjM2MjcgNy4xNzI3N0gwLjYzNzMyMUMwLjI4ODExMSA3LjE3Mjc3IDAgNi45MDQyNSAwIDYuNTU5NDJDMCA2LjIxNDU5IDAuMjg4MTE0IDUuOTQ2MDggMC42MzczMjEgNS45NDYwOFpNMTcuNzI2IDEyLjY3SDAuNjk2ODI3QzAuMzM1MDM4IDEyLjY3IDAuMDU5NTA2MSAxMi4zNTE2IDAuMDU5NTA2MSAxMi4wNTY3QzAuMDU5NTA2MSAxMS43MTE4IDAuMzQ3NjE0IDExLjQ0MzMgMC42OTY4MjcgMTEuNDQzM0gxNy43MjZDMTguMDc1MiAxMS40NDMzIDE4LjM2MzMgMTEuNzExOCAxOC4zNjMzIDEyLjA1NjdDMTguMzYzMyAxMi40MDE1IDE4LjA3NTIgMTIuNjcgMTcuNzI2IDEyLjY3Wk0wLjYzNzMyMSAxNi44MjcySDIzLjM2MjdDMjMuNzYwMSAxNi44MjcyIDI0LjAwNTggMTcuMTA4NyAyMy45OTk5IDE3LjQ1MTJDMjMuOTk0IDE3Ljc5MzcgMjMuNzA4MyAxOC4wNTM5IDIzLjM2MjcgMTguMDUzOUgwLjYzNzMyMUMwLjI4ODExMSAxOC4wNTM5IDAgMTcuNzg1NCAwIDE3LjQ0MDZDMCAxNy4wOTU3IDAuMjg4MTA4IDE2LjgyNzIgMC42MzczMjEgMTYuODI3MlpcIixcbiAgICBmaWxsOiBcImN1cnJlbnRDb2xvclwiXG4gIH1cbikgfSksIHhoID0gKCkgPT4gLyogQF9fUFVSRV9fICovIGMoXCJzdmdcIiwgeyB2aWV3Qm94OiBcIjAgMCAyNCAyNFwiLCBmaWxsOiBcIm5vbmVcIiwgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiwgY2hpbGRyZW46IC8qIEBfX1BVUkVfXyAqLyBjKFxuICBcInBhdGhcIixcbiAge1xuICAgIGZpbGxSdWxlOiBcImV2ZW5vZGRcIixcbiAgICBjbGlwUnVsZTogXCJldmVub2RkXCIsXG4gICAgZDogXCJNMjMuMzY2NiA3LjE3MjIxSDAuNjMzNDFDMC4yOTA1ODYgNy4xNzIyMSAtMC4wMDU2MTM5NCA2Ljg5Njg4IDkuMDUxNjVlLTA1IDYuNTUwMjlDMC4wMDU3MDUgNi4yMDkxNiAwLjI4OTE0MSA1Ljk0ODUyIDAuNjMzNDEgNS45NDg1MkgyMy4zNjY2QzIzLjcxNDMgNS45NDg1MiAyNCA2LjIxNjk2IDI0IDYuNTYwMzZDMjQgNi45MDM3NiAyMy43MTQzIDcuMTcyMjEgMjMuMzY2NiA3LjE3MjIxWk01LjYzODUzIDExLjk3MTVDNS42Mzg1MyAxMS42MjgxIDUuOTI0MjUgMTEuMzU5NyA2LjI3MTkxIDExLjM1OTdIMTcuNjY3OUMxOC4wMTU1IDExLjM1OTcgMTguMzAxMiAxMS42MjgxIDE4LjMwMTIgMTEuOTcxNUMxOC4zMDEyIDEyLjMxNDkgMTguMDE1NSAxMi41ODM0IDE3LjY2NzkgMTIuNTgzNEg2LjI3MTkxQzUuOTI0MjUgMTIuNTgzNCA1LjYzODUzIDEyLjMxNDkgNS42Mzg1MyAxMS45NzE1Wk0yMy4zNjY2IDE4LjA1MTVIMC42MzM0QzAuMjkwNTc3IDE4LjA1MTUgLTAuMDA1NjIwODQgMTcuNzc2MiA4LjA5ODE2ZS0wNSAxNy40Mjk2QzAuMDA1NjkyOTEgMTcuMDg4NSAwLjI4OTEzIDE2LjgyNzggMC42MzM0IDE2LjgyNzhIMjMuMzY2NkMyMy43MTQzIDE2LjgyNzggMjQgMTcuMDk2MyAyNCAxNy40Mzk3QzI0IDE3Ljc4MzEgMjMuNzE0MyAxOC4wNTE1IDIzLjM2NjYgMTguMDUxNVpcIixcbiAgICBmaWxsOiBcImN1cnJlbnRDb2xvclwiXG4gIH1cbikgfSksIFdoID0gKCkgPT4gLyogQF9fUFVSRV9fICovIGMoXCJzdmdcIiwgeyB2aWV3Qm94OiBcIjAgMCAyNCAyNFwiLCBmaWxsOiBcIm5vbmVcIiwgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiwgY2hpbGRyZW46IC8qIEBfX1BVUkVfXyAqLyBjKFxuICBcInBhdGhcIixcbiAge1xuICAgIGZpbGxSdWxlOiBcImV2ZW5vZGRcIixcbiAgICBjbGlwUnVsZTogXCJldmVub2RkXCIsXG4gICAgZDogXCJNNS42OTc5NyA2LjU1OTZDNS42OTc5NyA2LjIxNzIgNS45ODQxNyA1Ljk1MDQxIDYuMzMxMzQgNS45NTA0MUgyMy4zNjY0QzIzLjcxMzYgNS45NTA0MSAyMy45OTk4IDYuMjE3MiAyMy45OTk4IDYuNTU5NkMyMy45OTk4IDYuOTAyIDIzLjcxMzYgNy4xNjg4IDIzLjM2NjQgNy4xNjg4SDYuMzMxMzRDNS45ODQxNyA3LjE2ODggNS42OTc5NyA2LjkwMiA1LjY5Nzk3IDYuNTU5NlpNMjMuMzY2NiAxMi42NjU5SDAuNjMzMzcyQzAuMjc0MTEyIDEyLjY2NTkgMCAxMi4zNDg5IDAgMTIuMDU2N0MwIDExLjcxNDMgMC4yODYxOTUgMTEuNDQ3NSAwLjYzMzM3MiAxMS40NDc1SDIzLjM2NjZDMjMuNzEzOCAxMS40NDc1IDI0IDExLjcxNDMgMjQgMTIuMDU2N0MyNCAxMi4zOTkxIDIzLjcxMzggMTIuNjY1OSAyMy4zNjY2IDEyLjY2NTlaTTYuMzMxMzQgMTYuODMxMUgyMy4zNjY0QzIzLjcxMzYgMTYuODMxMSAyMy45OTk4IDE3LjA5OCAyMy45OTk4IDE3LjQ0MDRDMjMuOTk5OCAxNy43ODI4IDIzLjcxMzYgMTguMDQ5NiAyMy4zNjY0IDE4LjA0OTZINi4zMzEzNEM1Ljk4NDE3IDE4LjA0OTYgNS42OTc5NyAxNy43ODI4IDUuNjk3OTcgMTcuNDQwNEM1LjY5Nzk3IDE3LjA5OCA1Ljk4NDE3IDE2LjgzMTEgNi4zMzEzNCAxNi44MzExWlwiLFxuICAgIGZpbGw6IFwiY3VycmVudENvbG9yXCJcbiAgfVxuKSB9KSwgUmggPSAoKSA9PiAvKiBAX19QVVJFX18gKi8gZTEoXCJzdmdcIiwgeyB2aWV3Qm94OiBcIjAgMCAyNCAyNFwiLCBmaWxsOiBcIm5vbmVcIiwgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiwgY2hpbGRyZW46IFtcbiAgLyogQF9fUFVSRV9fICovIGMoXG4gICAgXCJwYXRoXCIsXG4gICAge1xuICAgICAgZDogXCJNMTEuMzUyIDIxLjI0NDZDMTEuMzUyIDIxLjYyODkgMTEuNjYzNSAyMS45NDA0IDEyLjA0NzggMjEuOTQwNEMxMi40MzIxIDIxLjk0MDQgMTIuNzQzNiAyMS42Mjg5IDEyLjc0MzYgMjEuMjQ0NlYyLjc1NTQ2QzEyLjc0MzYgMi4zNzExNiAxMi40MzIxIDIuMDU5NjMgMTIuMDQ3OCAyLjA1OTYzQzExLjY2MzUgMi4wNTk2MyAxMS4zNTIgMi4zNzExNiAxMS4zNTIgMi43NTU0NlYyMS4yNDQ2WlwiLFxuICAgICAgZmlsbDogXCJjdXJyZW50Y29sb3JcIlxuICAgIH1cbiAgKSxcbiAgLyogQF9fUFVSRV9fICovIGMoXG4gICAgXCJwYXRoXCIsXG4gICAge1xuICAgICAgZDogXCJNMTYuMDkzMyAxMS40MjUzSDE5LjcyNjRIMjMuMzU5NUMyMy43MTMyIDExLjQyNTMgMjQgMTEuNzEyMSAyNCAxMi4wNjU4QzI0IDEyLjQxOTUgMjMuNzEzMiAxMi43MDYzIDIzLjM1OTUgMTIuNzA2M0gxNi4wOTMzTDE4LjE4NTcgMTQuOTEwMUMxOC4yNTA1IDE0Ljk2NzEgMTguMzAzMyAxNS4wMzc3IDE4LjM0MDcgMTUuMTE3NEMxOC4zNzgyIDE1LjE5NzEgMTguMzk5NSAxNS4yODQxIDE4LjQwMzIgMTUuMzcyOUMxOC40MDcgMTUuNDYxOCAxOC4zOTMyIDE1LjU1MDQgMTguMzYyNiAxNS42MzMzQzE4LjMzMiAxNS43MTYyIDE4LjI4NTQgMTUuNzkxNSAxOC4yMjU3IDE1Ljg1NDNDMTguMTY2IDE1LjkxNzIgMTguMDk0NSAxNS45NjYzIDE4LjAxNTkgMTUuOTk4NUMxNy45MzcyIDE2LjAzMDcgMTcuODUzIDE2LjA0NTMgMTcuNzY4NiAxNi4wNDEzQzE3LjY4NDMgMTYuMDM3MyAxNy42MDE2IDE2LjAxNDkgMTcuNTI2IDE1Ljk3NTVDMTcuNDUwMyAxNS45MzYxIDE3LjM4MzMgMTUuODgwNSAxNy4zMjkxIDE1LjgxMjJMMTQuMTgzOSAxMi40NzlDMTQuMTMzIDEyLjQyNDcgMTQuMDkxIDEyLjM2MTkgMTQuMDU5NiAxMi4yOTNIMTQuMTE4NUMxNC4wOTI5IDEyLjIyOTkgMTQuMDc5NiAxMi4xNjIgMTQuMDc5MiAxMi4wOTMzVjEyLjAyNDVDMTQuMDczNSAxMS45NzE4IDE0LjA3MzUgMTEuOTE4NyAxNC4wNzkyIDExLjg2NjFWMTEuODA0MUMxNC4xMDg2IDExLjczNTggMTQuMTQ4NCAxMS42NzMgMTQuMTk2OSAxMS42MTgxTDE3LjMyOTEgOC4zMTkzMkMxNy4zODMzIDguMjUxMTEgMTcuNDUwMyA4LjE5NTUxIDE3LjUyNiA4LjE1NjA4QzE3LjYwMTYgOC4xMTY2NCAxNy42ODQzIDguMDk0MjMgMTcuNzY4NiA4LjA5MDI3QzE3Ljg1MyA4LjA4NjMxIDE3LjkzNzIgOC4xMDA4OCAxOC4wMTU5IDguMTMzMDdDMTguMDk0NSA4LjE2NTI2IDE4LjE2NiA4LjIxNDM1IDE4LjIyNTcgOC4yNzcyMkMxOC4yODU0IDguMzQwMSAxOC4zMzIgOC40MTUzNyAxOC4zNjI2IDguNDk4MjVDMTguMzkzMiA4LjU4MTE0IDE4LjQwNyA4LjY2OTgxIDE4LjQwMzIgOC43NTg2NEMxOC4zOTk1IDguODQ3NDYgMTguMzc4MiA4LjkzNDQ5IDE4LjM0MDcgOS4wMTQxOEMxOC4zMDMzIDkuMDkzODcgMTguMjUwNSA5LjE2NDQ4IDE4LjE4NTcgOS4yMjE1TDE2LjA5MzMgMTEuNDI1M1pcIixcbiAgICAgIGZpbGw6IFwiY3VycmVudGNvbG9yXCJcbiAgICB9XG4gICksXG4gIC8qIEBfX1BVUkVfXyAqLyBjKFxuICAgIFwicGF0aFwiLFxuICAgIHtcbiAgICAgIGQ6IFwiTTcuOTA2NjggMTIuNjQwNUgwLjY0MDQxN0MwLjI4NjY5IDEyLjY0MDUgLTYuMTg4NDRlLTA1IDEyLjM1MzcgLTYuMTg4NDRlLTA1IDEyQy02LjE4ODQ0ZS0wNSAxMS42NDYyIDAuMjg2NjkgMTEuMzU5NSAwLjY0MDQxNyAxMS4zNTk1SDcuOTA2NjhMNS44MTQxOSA5LjE1NTdDNS43NDk0MiA5LjA5ODY3IDUuNjk2NjMgOS4wMjgwNiA1LjY1OTE5IDguOTQ4MzdDNS42MjE3NSA4Ljg2ODY4IDUuNjAwNDcgOC43ODE2NiA1LjU5NjcxIDguNjkyODNDNS41OTI5NSA4LjYwNCA1LjYwNjc5IDguNTE1MzMgNS42MzczNSA4LjQzMjQ0QzUuNjY3OTEgOC4zNDk1NiA1LjcxNDUzIDguMjc0MjkgNS43NzQyMiA4LjIxMTQxQzUuODMzOTIgOC4xNDg1NCA1LjkwNTM5IDguMDk5NDUgNS45ODQwOCA4LjA2NzI2QzYuMDYyNzggOC4wMzUwOCA2LjE0Njk4IDguMDIwNSA2LjIzMTMyIDguMDI0NDZDNi4zMTU2NiA4LjAyODQyIDYuMzk4MjkgOC4wNTA4MyA2LjQ3Mzk2IDguMDkwMjdDNi41NDk2MiA4LjEyOTcgNi42MTY2NiA4LjE4NTMgNi42NzA4MSA4LjI1MzUyTDkuODE2MDggMTEuNTg2OEM5Ljg2Njk4IDExLjY0MTEgOS45MDg5NyAxMS43MDM5IDkuOTQwMzEgMTEuNzcyN0g5Ljg4MTQ2QzkuOTA3MDEgMTEuODM1OSA5LjkyMDM1IDExLjkwMzggOS45MjA3IDExLjk3MjRWMTIuMDQxM0M5LjkyNjQ4IDEyLjA5MzkgOS45MjY0OCAxMi4xNDcxIDkuOTIwNyAxMi4xOTk3VjEyLjI2MTdDOS44OTEzNCAxMi4zMyA5Ljg1MTU4IDEyLjM5MjggOS44MDMgMTIuNDQ3Nkw2LjY3MDgxIDE1Ljc0NjRDNi42MTY2NiAxNS44MTQ2IDYuNTQ5NjIgMTUuODcwMiA2LjQ3Mzk2IDE1LjkwOTdDNi4zOTgyOSAxNS45NDkxIDYuMzE1NjYgMTUuOTcxNSA2LjIzMTMyIDE1Ljk3NTVDNi4xNDY5OCAxNS45Nzk1IDYuMDYyNzggMTUuOTY0OSA1Ljk4NDA5IDE1LjkzMjdDNS45MDUzOSAxNS45MDA1IDUuODMzOTIgMTUuODUxNCA1Ljc3NDIyIDE1Ljc4ODVDNS43MTQ1MiAxNS43MjU3IDUuNjY3OTEgMTUuNjUwNCA1LjYzNzM1IDE1LjU2NzVDNS42MDY3OSAxNS40ODQ2IDUuNTkyOTUgMTUuMzk1OSA1LjU5NjcxIDE1LjMwNzFDNS42MDA0NyAxNS4yMTgzIDUuNjIxNzUgMTUuMTMxMyA1LjY1OTE5IDE1LjA1MTZDNS42OTY2MyAxNC45NzE5IDUuNzQ5NDIgMTQuOTAxMyA1LjgxNDE5IDE0Ljg0NDNMNy45MDY2OCAxMi42NDA1WlwiLFxuICAgICAgZmlsbDogXCJjdXJyZW50Y29sb3JcIlxuICAgIH1cbiAgKSxcbiAgLyogQF9fUFVSRV9fICovIGMoXG4gICAgXCJwYXRoXCIsXG4gICAge1xuICAgICAgZDogXCJNNy45MDY2OCAxMi42NDA1SDAuNjQwNDE3QzAuMjg2NjkgMTIuNjQwNSAtNi4xODg0NGUtMDUgMTIuMzUzNyAtNi4xODg0NGUtMDUgMTJDLTYuMTg4NDRlLTA1IDExLjY0NjIgMC4yODY2OSAxMS4zNTk1IDAuNjQwNDE3IDExLjM1OTVINy45MDY2OEw1LjgxNDE5IDkuMTU1N0M1Ljc0OTQyIDkuMDk4NjcgNS42OTY2MyA5LjAyODA2IDUuNjU5MTkgOC45NDgzN0M1LjYyMTc1IDguODY4NjggNS42MDA0NyA4Ljc4MTY2IDUuNTk2NzEgOC42OTI4M0M1LjU5Mjk1IDguNjA0IDUuNjA2NzkgOC41MTUzMyA1LjYzNzM1IDguNDMyNDRDNS42Njc5MSA4LjM0OTU2IDUuNzE0NTMgOC4yNzQyOSA1Ljc3NDIyIDguMjExNDFDNS44MzM5MiA4LjE0ODU0IDUuOTA1MzkgOC4wOTk0NSA1Ljk4NDA4IDguMDY3MjZDNi4wNjI3OCA4LjAzNTA4IDYuMTQ2OTggOC4wMjA1IDYuMjMxMzIgOC4wMjQ0NkM2LjMxNTY2IDguMDI4NDIgNi4zOTgyOSA4LjA1MDgzIDYuNDczOTYgOC4wOTAyN0M2LjU0OTYyIDguMTI5NyA2LjYxNjY2IDguMTg1MyA2LjY3MDgxIDguMjUzNTJMOS44MTYwOCAxMS41ODY4QzkuODY2OTggMTEuNjQxMSA5LjkwODk3IDExLjcwMzkgOS45NDAzMSAxMS43NzI3SDkuODgxNDZDOS45MDcwMSAxMS44MzU5IDkuOTIwMzUgMTEuOTAzOCA5LjkyMDcgMTEuOTcyNFYxMi4wNDEzQzkuOTI2NDggMTIuMDkzOSA5LjkyNjQ4IDEyLjE0NzEgOS45MjA3IDEyLjE5OTdWMTIuMjYxN0M5Ljg5MTM0IDEyLjMzIDkuODUxNTggMTIuMzkyOCA5LjgwMyAxMi40NDc2TDYuNjcwODEgMTUuNzQ2NEM2LjYxNjY2IDE1LjgxNDYgNi41NDk2MiAxNS44NzAyIDYuNDczOTYgMTUuOTA5N0M2LjM5ODI5IDE1Ljk0OTEgNi4zMTU2NiAxNS45NzE1IDYuMjMxMzIgMTUuOTc1NUM2LjE0Njk4IDE1Ljk3OTUgNi4wNjI3OCAxNS45NjQ5IDUuOTg0MDkgMTUuOTMyN0M1LjkwNTM5IDE1LjkwMDUgNS44MzM5MiAxNS44NTE0IDUuNzc0MjIgMTUuNzg4NUM1LjcxNDUyIDE1LjcyNTcgNS42Njc5MSAxNS42NTA0IDUuNjM3MzUgMTUuNTY3NUM1LjYwNjc5IDE1LjQ4NDYgNS41OTI5NSAxNS4zOTU5IDUuNTk2NzEgMTUuMzA3MUM1LjYwMDQ3IDE1LjIxODMgNS42MjE3NSAxNS4xMzEzIDUuNjU5MTkgMTUuMDUxNkM1LjY5NjYzIDE0Ljk3MTkgNS43NDk0MiAxNC45MDEzIDUuODE0MTkgMTQuODQ0M0w3LjkwNjY4IDEyLjY0MDVaXCIsXG4gICAgICBmaWxsOiBcImN1cnJlbnRjb2xvclwiXG4gICAgfVxuICApXG5dIH0pLCBCaCA9ICgpID0+IC8qIEBfX1BVUkVfXyAqLyBjKFwic3ZnXCIsIHsgdmlld0JveDogXCIwIDAgMjQgMjRcIiwgZmlsbDogXCJub25lXCIsIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsIGNoaWxkcmVuOiAvKiBAX19QVVJFX18gKi8gYyhcbiAgXCJwYXRoXCIsXG4gIHtcbiAgICBmaWxsUnVsZTogXCJldmVub2RkXCIsXG4gICAgY2xpcFJ1bGU6IFwiZXZlbm9kZFwiLFxuICAgIGQ6IFwiTTE3LjM4MzkgOS43MzI4OVY1LjE5OTM4QzE3LjM4MzkgMi4zMDc4NiAxNC45ODczIDAgMTEuOTk5OSAwQzkuMDEyNTUgMCA2LjYxNjAzIDIuMzA3ODYgNi42MTYwMyA1LjE5OTM4VjkuNzMyODlDNi42MTYwMyAxMi42MjQ0IDkuMDEyNTUgMTQuOTMyMyAxMS45OTk5IDE0LjkzMjNDMTQuOTg3MyAxNC45MzIzIDE3LjM4MzkgMTIuNjI0NCAxNy4zODM5IDkuNzMyODlaTTEyLjAwMDIgMjRDMTIuMzc3OCAyNCAxMi42ODY2IDIzLjcwNyAxMi42ODY2IDIzLjMzNDFWMTkuNDYwMUMxNy45MTA3IDE5LjA5ODggMjIuMDE2NyAxNC45MjIgMjIuMDE2NyA5Ljc5NjE1QzIyLjAxNjcgOS40MjMyNSAyMS43MDggOS4xMzAyOCAyMS4zMzAzIDkuMTMwMjhDMjAuOTUyNyA5LjEzMDI4IDIwLjY0NCA5LjQyMzI2IDIwLjY0NCA5Ljc5NjE1QzIwLjY0NCAxNC4zOTc3IDE2Ljc3NjkgMTguMTM0NiAxMi4wMDAyIDE4LjEzNDZDNy4yMjM0MSAxOC4xMzQ2IDMuMzU2NDEgMTQuMzk3NyAzLjM1NjQxIDkuNzk2MTVDMy4zNTY0MSA5LjQyMzI2IDMuMDQ3NyA5LjEzMDI4IDIuNjcwMDQgOS4xMzAyOEMyLjI5MjQgOS4xMzAyOCAxLjk4MzY0IDkuNDIzMjUgMS45ODM2NCA5Ljc5NjE1QzEuOTgzNjQgMTQuOTIyMSA2LjE1NCAxOS4wOTgyIDExLjMxMzggMTkuNDYwMVYyMy4zMzQxQzExLjMxMzggMjMuNzA3IDExLjYyMjUgMjQgMTIuMDAwMiAyNFpNMTEuOTk3MSAxMy41Mzc2TDExLjk5OTkgMTMuNTM3NUMxNC4xNjY4IDEzLjUzNzYgMTUuOTQ1OSAxMS44MTU3IDE1Ljk0NTkgOS43MzI4OVY1LjE5OTM4QzE1Ljk0NTkgMy4xMTY2MSAxNC4xNjY4IDEuMzk0NjkgMTEuOTk5OSAxLjM5NDY5QzkuODMzMDcgMS4zOTQ2OSA4LjA1Mzk5IDMuMTE2NjEgOC4wNTM5OSA1LjE5OTM4VjkuNzMyODlDOC4wNTM5OSAxMS44ODAxIDkuODM0MDEgMTMuNTk5IDExLjk5NzEgMTMuNTM3NlpcIixcbiAgICBmaWxsOiBcImN1cnJlbnRDb2xvclwiXG4gIH1cbikgfSksIFNoID0gKCkgPT4gLyogQF9fUFVSRV9fICovIGMoXCJzdmdcIiwgeyB2aWV3Qm94OiBcIjAgMCAyNCAyNFwiLCBmaWxsOiBcIm5vbmVcIiwgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiwgY2hpbGRyZW46IC8qIEBfX1BVUkVfXyAqLyBjKFxuICBcInBhdGhcIixcbiAge1xuICAgIGZpbGxSdWxlOiBcImV2ZW5vZGRcIixcbiAgICBjbGlwUnVsZTogXCJldmVub2RkXCIsXG4gICAgZDogXCJNMS43NDg2NSAxNS4wOTgxQzQuMjExMTIgMTQuNjMyNSA2LjY3MjU3IDE0LjE1NDEgOS4xNDA5OSAxMy43MTdDOS44NzY2OSAxMy41ODY3IDEwLjQzMTYgMTMuODQ4OCAxMC4yOTUgMTQuNjc2M0MxMC4wOCAxNS45MTA5IDguOTI0IDIyLjA0MDUgOC44OTA3MSAyMi4yMzE0QzguODMxOTcgMjIuNTY4MSA4LjUwMDkzIDIyLjg0ODggOC4xMjI2NyAyMi43ODRDNy43MjUxMSAyMi43MTU5IDcuNTIxNzEgMjIuMzU0MSA3LjU5MTg0IDIxLjk2NTNDNy45MzE4OSAyMC4wODA0IDguMjkyOTYgMTguMjE3OSA4LjYzOTg2IDE2LjM1MDFMMS4xNjUzIDIzLjgyNDZDMC44OTcyMzIgMjQuMDkyNyAwLjQ0NjA3IDI0LjAzMjYgMC4xOTgzODMgMjMuNzg1M0MtMC4wNTg3MTI2IDIzLjUyODYgLTAuMDY5Njc4IDIzLjExMjQgMC4xOTExNzMgMjIuODUxNkw3LjY2NDAxIDE1LjM3ODdMMi4wNDQ3MiAxNi40Mjk5QzEuNjU2NjIgMTYuNTE5IDEuMjkyMDMgMTYuMjczOSAxLjIyODA0IDE1LjkwODJDMS4xMzMzNSAxNS41MjAyIDEuMzczMTkgMTUuMTUyMSAxLjc0ODY1IDE1LjA5ODFaTTIzLjgwMTkgMC4yMTQ3MDJDMjQuMDU5IDAuNDcxMzU3IDI0LjA3IDAuODg3NTc5IDIzLjgwOTIgMS4xNDg0M0wxNi4zMzYzIDguNjIxMjdMMjEuOTU1NiA3LjU3MDEzQzIyLjM0MzcgNy40ODA5NyAyMi43MDgzIDcuNzI2MTIgMjIuNzcyMyA4LjA5MTgzQzIyLjg2NyA4LjQ3OTc3IDIyLjYyNzEgOC44NDc5NSAyMi4yNTE3IDguOTAxOTVDMTkuNzg5MiA5LjM2NzQ4IDE3LjMyNzggOS44NDU5MSAxNC44NTkzIDEwLjI4M0MxNC41NDAxIDEwLjMzOTUgMTQuMTU2MyAxMC40MjI0IDEzLjg3NTMgMTAuMTQxOUMxMy42OTg5IDkuOTY1ODYgMTMuNjEyOCA5LjY5MzE3IDEzLjY1MTQgOS40NTI3NEMxMy43NzMgOC42OTQ0OCAxNS4wNzUyIDEuOTY2MTUgMTUuMTA5NiAxLjc2ODYzQzE1LjE2ODQgMS40MzE5MyAxNS40OTk0IDEuMTUxMiAxNS44Nzc3IDEuMjE1OThDMTYuMjc1MiAxLjI4NDA3IDE2LjQ4NDcgMS42OTM5NiAxNi40MDgzIDIuMDM1ODFDMTYuMDY1NSAzLjg3NDY2IDE1LjcwNzMgNS43Nzk0MSAxNS4zNjA0IDcuNjQ5OTVMMjIuODM1IDAuMTc1MzY5QzIzLjEwMzEgLTAuMDkyNzAzNiAyMy41NTQzIC0wLjAzMjU2MTIgMjMuODAxOSAwLjIxNDcwMlpcIixcbiAgICBmaWxsOiBcImN1cnJlbnRDb2xvclwiXG4gIH1cbikgfSksIEVoID0gKCkgPT4gLyogQF9fUFVSRV9fICovIGMoXCJzdmdcIiwgeyB2aWV3Qm94OiBcIjAgMCAyNCAyNFwiLCBmaWxsOiBcIm5vbmVcIiwgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiwgY2hpbGRyZW46IC8qIEBfX1BVUkVfXyAqLyBjKFxuICBcInBhdGhcIixcbiAge1xuICAgIGQ6IFwiTTAuNzA4MjA0IDEyLjhIMjMuMjkxOEMyMy42ODUzIDEyLjggMjQgMTIuNDQ0NSAyNCAxMkMyNCAxMS41NTU2IDIzLjY4NTMgMTEuMiAyMy4yOTE4IDExLjJIMC43MDgyMDRDMC4zMTQ3NjEgMTEuMiAwIDExLjU1NTYgMCAxMkMwIDEyLjQ0NDUgMC4zMTQ3NjEgMTIuOCAwLjcwODIwNCAxMi44WlwiLFxuICAgIGZpbGw6IFwiY3VycmVudENvbG9yXCJcbiAgfVxuKSB9KSwga2ggPSAoKSA9PiAvKiBAX19QVVJFX18gKi8gYyhcInN2Z1wiLCB7IHZpZXdCb3g6IFwiMCAwIDI0IDI0XCIsIGZpbGw6IFwibm9uZVwiLCB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLCBjaGlsZHJlbjogLyogQF9fUFVSRV9fICovIGMoXG4gIFwicGF0aFwiLFxuICB7XG4gICAgZDogXCJNMjMuOTE4NCAxNC43MTQ4VjUuNTA4MkMyMy45MTg0IDIuNDM5MzQgMjEuNDA4OSAwIDE4LjQyODkgMEg1LjQ4OTQ3QzIuNDMxMDUgMCAwIDIuNTE4MDMgMCA1LjUwODJWMTQuNzE0OEMwIDE3Ljc4MzYgMi41MDk0NyAyMC4yMjMgNS40ODk0NyAyMC4yMjNIMTUuNTI3M0wyMi44OTg5IDIzLjkyMTNDMjIuOTc3MyAyNCAyMy4xMzQyIDI0IDIzLjIxMjYgMjRDMjMuMzY5NCAyNCAyMy42MDQ3IDIzLjkyMTMgMjMuNzYxNiAyMy43NjM5QzIzLjk5NjggMjMuNTI3OSAyNC4wNzUyIDIzLjIxMzEgMjMuOTE4NCAyMi44OTgzTDIxLjk1NzkgMTguOTYzOUMyMy4xMzQyIDE3Ljk0MSAyMy45MTg0IDE2LjQ0NTkgMjMuOTE4NCAxNC43MTQ4Wk0xNS45OTc5IDE4Ljg4NTJDMTUuOTE5NSAxOC44ODUyIDE1Ljg0MSAxOC44ODUyIDE1Ljg0MSAxOC44MDY1QzE1Ljc2MjYgMTguODA2NSAxNS43NjI2IDE4LjgwNjUgMTUuNjg0MiAxOC44MDY1SDUuNDg5NDdDMy4yMTUyNiAxOC44MDY1IDEuNDExNTcgMTYuOTk2NyAxLjQxMTU3IDE0LjcxNDhWNS41MDgyQzEuNDExNTcgMy4yMjYyMyAzLjIxNTI2IDEuNDE2MzggNS40ODk0NyAxLjQxNjM4SDE4LjQyODlDMjAuNzAzMSAxLjQxNjM4IDIyLjUwNjggMy4yMjYyMyAyMi41MDY4IDUuNTA4MlYxNC43MTQ4QzIyLjUwNjggMTYuMTMxMiAyMS44MDEgMTcuMzkwMSAyMC42MjQ3IDE4LjE3N0wyMC41NDYzIDE4LjI1NTdMMjAuNDY3OSAxOC4zMzQ0QzIwLjQ2NzkgMTguMzM0NCAyMC4zODk1IDE4LjQxMzEgMjAuMzg5NSAxOC40OTE4QzIwLjM4OTUgMTguNTcwNSAyMC4zMTEgMTguNTcwNSAyMC4zMTEgMTguNjQ5MkMyMC4zMTEgMTguNzI3OSAyMC4zMTEgMTguNzI3OCAyMC4zMTEgMTguODA2NUMyMC4zMTEgMTguODg1MiAyMC4zMTEgMTguODg1MiAyMC4zMTEgMTguOTYzOUMyMC4zMTEgMTkuMDQyNiAyMC4zMTEgMTkuMDQyNiAyMC4zMTEgMTkuMTIxM1YxOS4yTDIxLjU2NTggMjEuNzE4TDE1Ljk5NzkgMTguODg1MlpcIixcbiAgICBmaWxsOiBcImN1cnJlbnRDb2xvclwiXG4gIH1cbikgfSksIE5oID0gKCkgPT4gLyogQF9fUFVSRV9fICovIGMoXCJzdmdcIiwgeyB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLCB2aWV3Qm94OiBcIjAgMCAyNCAyNFwiLCBmaWxsOiBcIm5vbmVcIiwgY2hpbGRyZW46IC8qIEBfX1BVUkVfXyAqLyBjKFxuICBcInBhdGhcIixcbiAge1xuICAgIGQ6IFwiTTIzLjkxODQgMTQuNzE0OFY1LjUwODJDMjMuOTE4NCAyLjQzOTM0IDIxLjQwODkgMCAxOC40Mjg5IDBINS40ODk0N0MyLjQzMTA1IDAgMCAyLjUxODAzIDAgNS41MDgyVjE0LjcxNDhDMCAxNy43ODM2IDIuNTA5NDcgMjAuMjIzIDUuNDg5NDcgMjAuMjIzSDE1LjUyNzNMMjIuODk4OSAyMy45MjEzQzIyLjk3NzMgMjQgMjMuMTM0MiAyNCAyMy4yMTI2IDI0QzIzLjM2OTQgMjQgMjMuNjA0NyAyMy45MjEzIDIzLjc2MTYgMjMuNzYzOUMyMy45OTY4IDIzLjUyNzkgMjQuMDc1MiAyMy4yMTMxIDIzLjkxODQgMjIuODk4M0wyMS45NTc5IDE4Ljk2MzlDMjMuMTM0MiAxNy45NDEgMjMuOTE4NCAxNi40NDU5IDIzLjkxODQgMTQuNzE0OFpcIixcbiAgICBmaWxsOiBcImN1cnJlbnRDb2xvclwiXG4gIH1cbikgfSksIFRoID0gKCkgPT4gLyogQF9fUFVSRV9fICovIGUxKFwic3ZnXCIsIHsgdmlld0JveDogXCIwIDAgMjQgMjRcIiwgZmlsbDogXCJub25lXCIsIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsIGNoaWxkcmVuOiBbXG4gIC8qIEBfX1BVUkVfXyAqLyBjKFxuICAgIFwicGF0aFwiLFxuICAgIHtcbiAgICAgIGQ6IFwiTTExLjQwMDEgMy44NzUyQzExLjQwMDEgMy41MzUyNyAxMS42NjY4IDMuMjYzMzEgMTIuMDAwMSAzLjI2MzMxQzEyLjMzMzUgMy4yNjMzMSAxMi42MDAxIDMuNTM1MjcgMTIuNjAwMSAzLjg3NTJWNy4xMzg1MkMxMi42MDAxIDcuNDc4NDUgMTIuMzMzNSA3Ljc1MDM2IDEyLjAwMDEgNy43NTAzNkMxMS42NjY4IDcuNzUwMzYgMTEuNDAwMSA3LjQ3ODQ1IDExLjQwMDEgNy4xMzg1MlYzLjg3NTJaXCIsXG4gICAgICBmaWxsOiBcImN1cnJlbnRDb2xvclwiXG4gICAgfVxuICApLFxuICAvKiBAX19QVVJFX18gKi8gYyhcbiAgICBcInBhdGhcIixcbiAgICB7XG4gICAgICBmaWxsUnVsZTogXCJldmVub2RkXCIsXG4gICAgICBjbGlwUnVsZTogXCJldmVub2RkXCIsXG4gICAgICBkOiBcIk01IDcuMTM4ODJDNSAzLjE5NTQ3IDguMTMzMzQgMCAxMiAwQzE1Ljg2NjcgMCAxOSAzLjE5NTQ3IDE5IDcuMTM4ODJWMTYuODYxMkMxOSAyMC44MDQ2IDE1Ljg2NjcgMjQgMTIgMjRDOC4xMzMzNCAyNCA1IDIwLjgwNDYgNSAxNi44NjEyVjcuMTM4ODJaTTEyIDIyLjcwODJDMTUuMTMzMyAyMi43MDgyIDE3LjczMzQgMjAuMTI0NyAxNy43MzM0IDE2Ljg2MTJWNy4xMzg4MkMxNy43MzM0IDMuOTQzMzUgMTUuMiAxLjI5MTc2IDEyIDEuMjkxNzZDOC44NjY2NyAxLjI5MTc2IDYuMjY2NjggMy44NzUzNiA2LjI2NjY4IDcuMTM4ODJWMTYuODYxMkM2LjI2NjY4IDIwLjA1NjcgOC44MDAwMSAyMi43MDgyIDEyIDIyLjcwODJaXCIsXG4gICAgICBmaWxsOiBcImN1cnJlbnRDb2xvclwiXG4gICAgfVxuICApXG5dIH0pLCBJaCA9ICgpID0+IC8qIEBfX1BVUkVfXyAqLyBjKFwic3ZnXCIsIHsgdmlld0JveDogXCIwIDAgMjQgMjRcIiwgZmlsbDogXCJub25lXCIsIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsIGNoaWxkcmVuOiAvKiBAX19QVVJFX18gKi8gYyhcbiAgXCJwYXRoXCIsXG4gIHtcbiAgICBmaWxsUnVsZTogXCJldmVub2RkXCIsXG4gICAgY2xpcFJ1bGU6IFwiZXZlbm9kZFwiLFxuICAgIGQ6IFwiTTExLjk2NzIgMS44Mjc5TDE0LjMxOTggNC4xNDExOUMxNC45MTM5IDQuNzI1MyAxNS45MDc2IDMuODU1ODkgMTUuMjg2IDMuMjQ0NkwxMi40NTAzIDAuNDU2MzA5QzEyLjE4NDEgMC4xOTQ1NTYgMTEuODA5NCAwLjE5NDU1NiAxMS41NDMyIDAuNDU2MzA5TDguNzA3NTcgMy4yNDQ2QzguMTI2NzYgMy44MTU3MSA5LjAxMTIyIDQuNzM0NTEgOS42MTQ2MiA0LjE0MTE5TDExLjk2NzIgMS44Mjc5Wk0yMC44OTc4IDguNzYyNTNDMjAuMjkzMyA4LjE2OTU2IDE5LjQxMDQgOS4wODg0OSAxOS45OTE1IDkuNjU5ODdMMjIuMzQxOCAxMS45NzA4TDE5Ljk5MTUgMTQuMjgxOEMxOS4zODY1IDE0Ljg3NjcgMjAuMzQ3OSAxNS43Nzc5IDIwLjk1NzYgMTUuMTc4NEwyMy43OTMzIDEyLjM5MDFDMjQuMDU5NCAxMi4xMjg1IDI0LjA1OTQgMTEuNzU1MSAyMy43OTMzIDExLjQ5MzVMMjAuODk4NiA4Ljc2MzI4TDIwLjg5NzggOC43NjI1M1pNMjAuNDc0NiAxMS40MDcxQzIwLjgyMzIgMTEuNDA3MSAyMS4xMDU1IDExLjY4MjMgMjEuMTA1NSAxMi4wMjkxQzIxLjEwNTUgMTIuMzc1MyAyMC44MDggMTIuNjUxMSAyMC4zNTY1IDEyLjY1MTFIMTIuNTM5MVYyMC4zMzYyQzEyLjUzOTEgMjEuMTQwNCAxMS4yNzc0IDIxLjE0MDQgMTEuMjc3NCAyMC4zMzYyVjEyLjY1MTFIMy40NjAwNkMzLjExMTQ4IDEyLjY1MTEgMi44MjkxOSAxMi4zNzU5IDIuODI5MTkgMTIuMDI5MUMyLjgyOTE5IDExLjY4MjMgMy4xMTE0OCAxMS40MDcxIDMuNDYwMDYgMTEuNDA3MUgxMS4zOTU1VjMuNzIyMDZDMTEuMzk1NSAzLjM3NTI3IDExLjY3NzggMy4xMDAwNSAxMi4wMjY0IDMuMTAwMDVDMTIuMzc1IDMuMTAwMDUgMTIuNjU3MyAzLjM3NTI3IDEyLjY1NzMgMy43MjIwNlYxMS40MDcxSDIwLjQ3NDZaTTAuMjA1MDggMTIuNDUzQy0wLjA3NTgxIDEyLjI0MDEgLTAuMDY2NjcxOSAxMS44MDc0IDAuMjY3NzE0IDExLjYwMTZMMy4wOTUwNiA4LjgyMTQ4QzMuNjY3MDQgOC4yNTkwNSA0LjYwMzk3IDkuMTI2MjYgNC4wMDIxMSA5LjcxODA3TDEuNjUxOSAxMi4wMjlMNC4wMDIxMSAxNC4zNEM0LjYzNTAzIDE0Ljk2MjQgMy42MTAzNCAxNS44MDE0IDMuMDM1OTggMTUuMjM2NkwwLjIwNTA4IDEyLjQ1M1pNMTIuNDkyMyAyMy41MTg1QzEyLjIyOSAyMy44MTQ3IDExLjgzODggMjMuNzk0NCAxMS41NzY2IDIzLjUxODVMOC43NjY2NCAyMC43NTU0QzguMTg2NjYgMjAuMTg1MiA5LjA3NzU5IDE5LjI3MjcgOS42NzM3IDE5Ljg1ODlMMTEuOTk2OCAyMi4xNzIxTDE0LjM3ODkgMTkuODU4OUMxNC45NTI1IDE5LjI5NDkgMTUuODk1OSAyMC4xNTU3IDE1LjI4NiAyMC43NTU0TDEyLjQ5MjMgMjMuNTE4NVpcIixcbiAgICBmaWxsOiBcImN1cnJlbnRDb2xvclwiXG4gIH1cbikgfSksIERoID0gKCkgPT4gLyogQF9fUFVSRV9fICovIGMoXCJzdmdcIiwgeyB2aWV3Qm94OiBcIjAgMCAyNCAyNFwiLCBmaWxsOiBcIm5vbmVcIiwgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiwgY2hpbGRyZW46IC8qIEBfX1BVUkVfXyAqLyBjKFxuICBcInBhdGhcIixcbiAge1xuICAgIGZpbGxSdWxlOiBcImV2ZW5vZGRcIixcbiAgICBjbGlwUnVsZTogXCJldmVub2RkXCIsXG4gICAgZDogXCJNMSA1QzAuNDQ3NzE1IDUgMCA1LjQ0NzcxIDAgNlY4QzAgOC41NTIyOCAwLjQ0NzcxNSA5IDEgOUgzQzMuNTUyMjggOSA0IDguNTUyMjggNCA4VjZDNCA1LjQ0NzcxIDMuNTUyMjggNSAzIDVIMVpNMSAxNUMwLjQ0NzcxNSAxNSAwIDE1LjQ0NzcgMCAxNlYxOEMwIDE4LjU1MjMgMC40NDc3MTUgMTkgMSAxOUgzQzMuNTUyMjggMTkgNCAxOC41NTIzIDQgMThWMTZDNCAxNS40NDc3IDMuNTUyMjggMTUgMyAxNUgxWk0xMCA2QzEwIDUuNDQ3NzEgMTAuNDQ3NyA1IDExIDVIMTNDMTMuNTUyMyA1IDE0IDUuNDQ3NzEgMTQgNlY4QzE0IDguNTUyMjggMTMuNTUyMyA5IDEzIDlIMTFDMTAuNDQ3NyA5IDEwIDguNTUyMjggMTAgOFY2Wk0xMSAxNUMxMC40NDc3IDE1IDEwIDE1LjQ0NzcgMTAgMTZWMThDMTAgMTguNTUyMyAxMC40NDc3IDE5IDExIDE5SDEzQzEzLjU1MjMgMTkgMTQgMTguNTUyMyAxNCAxOFYxNkMxNCAxNS40NDc3IDEzLjU1MjMgMTUgMTMgMTVIMTFaTTIwIDZDMjAgNS40NDc3MSAyMC40NDc3IDUgMjEgNUgyM0MyMy41NTIzIDUgMjQgNS40NDc3MSAyNCA2VjhDMjQgOC41NTIyOCAyMy41NTIzIDkgMjMgOUgyMUMyMC40NDc3IDkgMjAgOC41NTIyOCAyMCA4VjZaTTIxIDE1QzIwLjQ0NzcgMTUgMjAgMTUuNDQ3NyAyMCAxNlYxOEMyMCAxOC41NTIzIDIwLjQ0NzcgMTkgMjEgMTlIMjNDMjMuNTUyMyAxOSAyNCAxOC41NTIzIDI0IDE4VjE2QzI0IDE1LjQ0NzcgMjMuNTUyMyAxNSAyMyAxNUgyMVpcIixcbiAgICBmaWxsOiBcImN1cnJlbnRDb2xvclwiXG4gIH1cbikgfSksIEhoID0gKCkgPT4gLyogQF9fUFVSRV9fICovIGUxKFxuICBcInN2Z1wiLFxuICB7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB2aWV3Qm94OiBcIjAgMCAyNCAyNFwiLFxuICAgIGZpbGw6IFwibm9uZVwiLFxuICAgIGNoaWxkcmVuOiBbXG4gICAgICAvKiBAX19QVVJFX18gKi8gYyhcbiAgICAgICAgXCJwYXRoXCIsXG4gICAgICAgIHtcbiAgICAgICAgICBkOiBcIk0zLjQgNUgxLjRDMC42IDUgMCA1LjYgMCA2LjRWOC40QzAgOS4yIDAuNiA5LjggMS40IDkuOEgzLjRDNC4yIDkuOCA0LjggOS4yIDQuOCA4LjRWNi40QzQuOSA1LjYgNC4yIDUgMy40IDVaXCIsXG4gICAgICAgICAgZmlsbDogXCJjdXJyZW50Q29sb3JcIlxuICAgICAgICB9XG4gICAgICApLFxuICAgICAgLyogQF9fUFVSRV9fICovIGMoXG4gICAgICAgIFwicGF0aFwiLFxuICAgICAgICB7XG4gICAgICAgICAgZDogXCJNMy40IDE1SDEuNEMwLjYgMTUgMCAxNS42IDAgMTYuNFYxOC40QzAgMTkuMiAwLjYgMTkuOCAxLjQgMTkuOEgzLjRDNC4yIDE5LjggNC44IDE5LjIgNC44IDE4LjRWMTYuNEM0LjkgMTUuNiA0LjIgMTUgMy40IDE1WlwiLFxuICAgICAgICAgIGZpbGw6IFwiY3VycmVudENvbG9yXCJcbiAgICAgICAgfVxuICAgICAgKSxcbiAgICAgIC8qIEBfX1BVUkVfXyAqLyBjKFxuICAgICAgICBcInBhdGhcIixcbiAgICAgICAge1xuICAgICAgICAgIGQ6IFwiTTEzIDVIMTFDMTAuMiA1IDkuNiA1LjYgOS42IDYuNFY4LjRDOS42IDkuMiAxMC4yIDkuOCAxMSA5LjhIMTNDMTMuOCA5LjggMTQuNCA5LjIgMTQuNCA4LjRWNi40QzE0LjQgNS42IDEzLjggNSAxMyA1WlwiLFxuICAgICAgICAgIGZpbGw6IFwiY3VycmVudENvbG9yXCJcbiAgICAgICAgfVxuICAgICAgKSxcbiAgICAgIC8qIEBfX1BVUkVfXyAqLyBjKFxuICAgICAgICBcInBhdGhcIixcbiAgICAgICAge1xuICAgICAgICAgIGQ6IFwiTTEzIDE1SDExQzEwLjIgMTUgOS42IDE1LjYgOS42IDE2LjRWMTguNEM5LjYgMTkuMiAxMC4yIDE5LjggMTEgMTkuOEgxM0MxMy44IDE5LjggMTQuNCAxOS4yIDE0LjQgMTguNFYxNi40QzE0LjQgMTUuNiAxMy44IDE1IDEzIDE1WlwiLFxuICAgICAgICAgIGZpbGw6IFwiY3VycmVudENvbG9yXCJcbiAgICAgICAgfVxuICAgICAgKSxcbiAgICAgIC8qIEBfX1BVUkVfXyAqLyBjKFxuICAgICAgICBcInBhdGhcIixcbiAgICAgICAge1xuICAgICAgICAgIGQ6IFwiTTIyLjYgNUgyMC42QzE5LjggNSAxOS4yIDUuNiAxOS4yIDYuNFY4LjRDMTkuMiA5LjIgMTkuOCA5LjggMjAuNiA5LjhIMjIuNkMyMy40IDkuOCAyNCA5LjIgMjQgOC40VjYuNEMyNCA1LjYgMjMuMyA1IDIyLjYgNVpcIixcbiAgICAgICAgICBmaWxsOiBcImN1cnJlbnRDb2xvclwiXG4gICAgICAgIH1cbiAgICAgICksXG4gICAgICAvKiBAX19QVVJFX18gKi8gYyhcbiAgICAgICAgXCJwYXRoXCIsXG4gICAgICAgIHtcbiAgICAgICAgICBkOiBcIk0yMi42IDE1SDIwLjZDMTkuOCAxNSAxOS4yIDE1LjYgMTkuMiAxNi40VjE4LjRDMTkuMiAxOS4yIDE5LjggMTkuOCAyMC42IDE5LjhIMjIuNkMyMy40IDE5LjggMjQgMTkuMiAyNCAxOC40VjE2LjRDMjQgMTUuNiAyMy4zIDE1IDIyLjYgMTVaXCIsXG4gICAgICAgICAgZmlsbDogXCJjdXJyZW50Q29sb3JcIlxuICAgICAgICB9XG4gICAgICApXG4gICAgXVxuICB9XG4pLCBWaCA9ICgpID0+IC8qIEBfX1BVUkVfXyAqLyBjKFwic3ZnXCIsIHsgdmlld0JveDogXCIwIDAgMjQgMjRcIiwgZmlsbDogXCJub25lXCIsIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsIGNoaWxkcmVuOiAvKiBAX19QVVJFX18gKi8gYyhcbiAgXCJwYXRoXCIsXG4gIHtcbiAgICBmaWxsUnVsZTogXCJldmVub2RkXCIsXG4gICAgY2xpcFJ1bGU6IFwiZXZlbm9kZFwiLFxuICAgIGQ6IFwiTTE5LjYyNTIgMTAuMDY3NEMyMi4wNzM1IDEwLjAzIDI0LjA1ODcgMTIuMDk2OCAyMy45OTg3IDE0LjU1NTdDMjMuOTk4IDE3LjAxMyAyMS45OTYzIDE5LjA0MTQgMTkuNTY2NyAxOS4wNDE0SDUuNjc4NDJDMi41MzYwOSAxOS4wNDE0IDAgMTYuNDcxMyAwIDEzLjI5MjJDMCA5LjgyNzU3IDMuMDQ1MDMgNy4wMjM0NyA2LjU4NjE1IDcuNTk0ODNDNy45MTE4OSA1LjkxNjI5IDkuOTQwNzkgNC45NTg1OSAxMi4wMjkgNC45NTg1OUMxNS4yNDk2IDQuOTU4NTkgMTcuOTM4MSA3LjExMjUgMTguNzQ5NiAxMC4xNzNDMTguNzQ5NiAxMC4xNzMgMTguOTE4NiAxMC4xNDI1IDE5LjAyNzQgMTAuMTI2N0MxOS4yNTk2IDEwLjA5MyAxOS40NDIxIDEwLjA3MDIgMTkuNjI1MiAxMC4wNjc0Wk0xNy45MDkgMTEuNTQ4OEMxNy43Mjk4IDExLjQyNzggMTcuNjMxNCAxMS4yNDYzIDE3LjYyNzQgMTEuMDE3MUMxNy4xNTc1IDguMjQyOTggMTQuODI1NyA2LjIzOTIyIDEyLjAyOSA2LjIzOTIyQzEwLjE0NTEgNi4yMzkyMiA4LjUzMDg4IDcuMTg1MjUgNy40MTk2MSA4LjY2Mzc3QzcuMjQ5NzcgOC44NjM2MiA2Ljk5MDg5IDkuMDA3NzkgNi43MjQ3NyA4Ljk0MTQ3QzYuNDMwMjQgOC44ODE4OCA2LjA4Mjg0IDguODIzNyA1LjczNzc2IDguODIzN0MzLjMwMTA2IDguODIzNyAxLjMyNjQ1IDEwLjgyMTYgMS4zMjY0NSAxMy4yOTIyQzEuMzI2NDUgMTUuNzYyOSAzLjMwMTA2IDE3Ljc2MDggNS43Mzc3NiAxNy43NjA4SDE5LjYyNkMyMS4zNDgxIDE3Ljc2MDggMjIuNzMxNiAxNi4zMDYyIDIyLjczMTYgMTQuNTU0NEMyMi43MzE2IDEyLjc0MzcgMjEuMzQ5MyAxMS4zNDgxIDE5LjYyNiAxMS4zNDgxQzE5LjI4NzggMTEuMzQ4MSAxOC44ODYyIDExLjQ2MzEgMTguNTMwMSAxMS41ODMzQzE4LjM0ODQgMTEuNjQ0NiAxOC4wNzE5IDExLjY0NjggMTcuOTA5IDExLjU0ODhaXCIsXG4gICAgZmlsbDogXCJjdXJyZW50Y29sb3JcIlxuICB9XG4pIH0pLCBQaCA9ICgpID0+IC8qIEBfX1BVUkVfXyAqLyBlMShcInN2Z1wiLCB7IHZpZXdCb3g6IFwiMCAwIDI0IDI0XCIsIGZpbGw6IFwibm9uZVwiLCB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLCBjaGlsZHJlbjogW1xuICAvKiBAX19QVVJFX18gKi8gYyhcbiAgICBcInBhdGhcIixcbiAgICB7XG4gICAgICBkOiBcIk0xMi43ODQ1IDUuODUxNTNWMEgwVjI0SDI0VjUuODUxNTNIMTIuNzg0NVpNMTEuMjc2MSAyMi41MDc3SDEuNDU2NDNWMS41NDQyNUgxMS4yNzU2TDExLjI3NjEgMjIuNTA3N1pNMjIuNDg1IDIyLjUwNzdIMTIuNzg0NUwxMi43ODUgNy4zMTM0OUgyMi40ODVWMjIuNTA3N1pcIixcbiAgICAgIGZpbGw6IFwiY3VycmVudENvbG9yXCJcbiAgICB9XG4gICksXG4gIC8qIEBfX1BVUkVfXyAqLyBjKFxuICAgIFwicGF0aFwiLFxuICAgIHtcbiAgICAgIGQ6IFwiTTguNzQ5NjEgNi4wNTM0Nkg0LjAzNDc5VjcuNTUxNTNIOC43NDk2MVY2LjA1MzQ2WlwiLFxuICAgICAgZmlsbDogXCJjdXJyZW50Q29sb3JcIlxuICAgIH1cbiAgKSxcbiAgLyogQF9fUFVSRV9fICovIGMoXG4gICAgXCJwYXRoXCIsXG4gICAge1xuICAgICAgZDogXCJNOC43NDk2MSAxMS4xNUg0LjAzNDc5VjEyLjY3MDVIOC43NDk2MVYxMS4xNVpcIixcbiAgICAgIGZpbGw6IFwiY3VycmVudENvbG9yXCJcbiAgICB9XG4gICksXG4gIC8qIEBfX1BVUkVfXyAqLyBjKFxuICAgIFwicGF0aFwiLFxuICAgIHtcbiAgICAgIGQ6IFwiTTguNzQ5NjEgMTYuNjA1NEg0LjAzNDc5VjE4LjE0ODRIOC43NDk2MVYxNi42MDU0WlwiLFxuICAgICAgZmlsbDogXCJjdXJyZW50Q29sb3JcIlxuICAgIH1cbiAgKSxcbiAgLyogQF9fUFVSRV9fICovIGMoXG4gICAgXCJwYXRoXCIsXG4gICAge1xuICAgICAgZDogXCJNMTkuOTY1OCAxMS4xNUgxNS4yNTFWMTIuNjcwNUgxOS45NjU4VjExLjE1WlwiLFxuICAgICAgZmlsbDogXCJjdXJyZW50Q29sb3JcIlxuICAgIH1cbiAgKSxcbiAgLyogQF9fUFVSRV9fICovIGMoXG4gICAgXCJwYXRoXCIsXG4gICAge1xuICAgICAgZDogXCJNMTkuOTY1OCAxNi42MDU0SDE1LjI1MVYxOC4xNDg0SDE5Ljk2NThWMTYuNjA1NFpcIixcbiAgICAgIGZpbGw6IFwiY3VycmVudENvbG9yXCJcbiAgICB9XG4gIClcbl0gfSksIEZoID0gKCkgPT4gLyogQF9fUFVSRV9fICovIGUxKFwic3ZnXCIsIHsgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiwgdmlld0JveDogXCIwIDAgMjQgMjRcIiwgZmlsbDogXCJub25lXCIsIGNoaWxkcmVuOiBbXG4gIC8qIEBfX1BVUkVfXyAqLyBjKFxuICAgIFwicGF0aFwiLFxuICAgIHtcbiAgICAgIGQ6IFwiTTAgMFYyNEgxMS4zVjBIMFpNOC4xIDcuNUgzLjRWNS44SDguMVY3LjVaTTguMSAxNi40VjE4LjJIMy40VjE2LjRIOC4xWk04LjEgMTAuOVYxMi43SDMuNFYxMC45SDguMVpcIixcbiAgICAgIGZpbGw6IFwiY3VycmVudENvbG9yXCJcbiAgICB9XG4gICksXG4gIC8qIEBfX1BVUkVfXyAqLyBjKFxuICAgIFwicGF0aFwiLFxuICAgIHtcbiAgICAgIGQ6IFwiTTEzLjEgNS45VjI0SDI0VjUuOUgxMy4xWk0xNiAxMi43VjEwLjlIMjAuN1YxMi43SDE2Wk0yMC44IDE2LjRWMTguMkgxNlYxNi40SDIwLjhaXCIsXG4gICAgICBmaWxsOiBcImN1cnJlbnRDb2xvclwiXG4gICAgfVxuICApXG5dIH0pLCBYaCA9ICgpID0+IC8qIEBfX1BVUkVfXyAqLyBjKFwic3ZnXCIsIHsgdmlld0JveDogXCIwIDAgMjQgMjRcIiwgZmlsbDogXCJub25lXCIsIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsIGNoaWxkcmVuOiAvKiBAX19QVVJFX18gKi8gYyhcbiAgXCJwYXRoXCIsXG4gIHtcbiAgICBmaWxsUnVsZTogXCJldmVub2RkXCIsXG4gICAgY2xpcFJ1bGU6IFwiZXZlbm9kZFwiLFxuICAgIGQ6IFwiTTEzLjg5NTggNC41NTU4M0MxMy44OTU4IDMuNDEwMTQgMTQuODI0NSAyLjQ4MTM4IDE1Ljk3MDIgMi40ODEzOEgyMS45MjU2QzIzLjA3MTIgMi40ODEzOCAyNCAzLjQxMDE0IDI0IDQuNTU1ODNWNy41MzM0OUMyNCA4LjY3OTE4IDIzLjA3MTIgOS42MDc5NCAyMS45MjU2IDkuNjA3OTRIMTUuOTcwMkMxNC44MjQ1IDkuNjA3OTQgMTMuODk1OCA4LjY3OTE4IDEzLjg5NTggNy41MzM0OVY2Ljk3MzA3TDkuMjQ5NDQgOS42ODM0M0M5Ljc4OTI2IDEwLjQ4NzQgMTAuMTA0MiAxMS40NTUxIDEwLjEwNDIgMTIuNDk2MkMxMC4xMDQyIDEzLjI5MjMgOS45MjAwMiAxNC4wNDU2IDkuNTkxODQgMTQuNzE1NkwxMy44OTU4IDE3LjIyNjJWMTYuNDY2NUMxMy44OTU4IDE1LjMyMDggMTQuODI0NSAxNC4zOTIxIDE1Ljk3MDIgMTQuMzkyMUgyMS45MjU2QzIzLjA3MTIgMTQuMzkyMSAyNCAxNS4zMjA4IDI0IDE2LjQ2NjVWMTkuNDQ0MkMyNCAyMC41ODk4IDIzLjA3MTIgMjEuNTE4NiAyMS45MjU2IDIxLjUxODZIMTUuOTcwMkMxNC44MjQ1IDIxLjUxODYgMTMuODk1OCAyMC41ODk4IDEzLjg5NTggMTkuNDQ0MlYxOC4zOTk4TDkuMDU2NTMgMTUuNTc2OUM4LjEzMjkzIDE2Ljc3NTYgNi42ODI3NCAxNy41NDgzIDUuMDUyMTEgMTcuNTQ4M0MyLjI2MTkxIDE3LjU0ODMgMCAxNS4yODY0IDAgMTIuNDk2MkMtNC44MDY4M2UtMDcgOS43MDU5NSAyLjI2MTkxIDcuNDQ0MDQgNS4wNTIxMSA3LjQ0NDA0QzYuNDMxMzIgNy40NDQwNCA3LjY4MTU4IDcuOTk2ODIgOC41OTMxNiA4Ljg5MjcxTDEzLjg5NTggNS43OTk1MlY0LjU1NTgzWk0xNS45NzAyIDMuNjUyNkMxNS40NzE0IDMuNjUyNiAxNS4wNjcgNC4wNTY5OSAxNS4wNjcgNC41NTU4M1Y3LjUzMzQ5QzE1LjA2NyA4LjAzMjMzIDE1LjQ3MTQgOC40MzY3MiAxNS45NzAyIDguNDM2NzJIMjEuOTI1NkMyMi40MjQ0IDguNDM2NzIgMjIuODI4OCA4LjAzMjMzIDIyLjgyODggNy41MzM0OVY0LjU1NTgzQzIyLjgyODggNC4wNTY5OSAyMi40MjQ0IDMuNjUyNiAyMS45MjU2IDMuNjUyNkgxNS45NzAyWk01LjA1MjExIDguNjE1MjZDMi45MDg3NSA4LjYxNTI2IDEuMTcxMjIgMTAuMzUyOCAxLjE3MTIyIDEyLjQ5NjJDMS4xNzEyMiAxNC42Mzk1IDIuOTA4NzUgMTYuMzc3IDUuMDUyMTEgMTYuMzc3QzYuMjk4OTkgMTYuMzc3IDcuNDM4MjcgMTUuNzY5MSA4LjE4ODU2IDE0Ljc4MjJDOC42NTY3MiAxNC4xNDEgOC45MzMgMTMuMzUxIDguOTMzIDEyLjQ5NjJDOC45MzMgMTAuMzUyOCA3LjE5NTQ3IDguNjE1MjYgNS4wNTIxMSA4LjYxNTI2Wk0xNS45NzAyIDE1LjU2MzNDMTUuNDcxNCAxNS41NjMzIDE1LjA2NyAxNS45Njc3IDE1LjA2NyAxNi40NjY1VjE5LjQ0NDJDMTUuMDY3IDE5Ljk0MyAxNS40NzE0IDIwLjM0NzQgMTUuOTcwMiAyMC4zNDc0SDIxLjkyNTZDMjIuNDI0NCAyMC4zNDc0IDIyLjgyODggMTkuOTQzIDIyLjgyODggMTkuNDQ0MlYxNi40NjY1QzIyLjgyODggMTUuOTY3NyAyMi40MjQ0IDE1LjU2MzMgMjEuOTI1NiAxNS41NjMzSDE1Ljk3MDJaXCIsXG4gICAgZmlsbDogXCJjdXJyZW50Q29sb3JcIlxuICB9XG4pIH0pLCBVaCA9ICgpID0+IC8qIEBfX1BVUkVfXyAqLyBjKFwic3ZnXCIsIHsgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiwgdmlld0JveDogXCIwIDAgMjUgMjRcIiwgZmlsbDogXCJub25lXCIsIGNoaWxkcmVuOiAvKiBAX19QVVJFX18gKi8gYyhcbiAgXCJwYXRoXCIsXG4gIHtcbiAgICBmaWxsUnVsZTogXCJldmVub2RkXCIsXG4gICAgY2xpcFJ1bGU6IFwiZXZlbm9kZFwiLFxuICAgIGQ6IFwiTTEzLjkgOC4xTDkuNCAxMC42QzkuNyAxMS4yIDEwLjEgMTIgMTAuMSAxM0MxMC4xIDEzLjcgOS45IDE0LjMgOS43IDE0LjhMMTMuOSAxNy4yVjE3QzEzLjkgMTUuOCAxNC44IDE0LjkgMTYgMTQuOUgyMkMyMy4xIDE0LjkgMjQuMSAxNS44IDI0LjEgMTdWMjBDMjQuMSAyMS4yIDIzLjIgMjIuMSAyMiAyMi4xSDE2QzE0LjkgMjIuMSAxMy45IDIxLjIgMTMuOSAyMFYxOS40TDguOCAxNi41QzcuOSAxNy41IDYuNSAxOC4yIDUgMTguMkMyLjIgMTguMiAwIDE1LjkgMCAxMy4xQzAgMTAuMiAyLjMgOCA1IDhDNi4zIDggNy40IDguNSA4LjMgOS4yTDEzLjkgNlY1LjFDMTMuOSAzLjkgMTQuOCAzIDE2IDNIMjJDMjMuMSAzIDI0IDMuOSAyNCA1LjFWOC4xQzI0IDkuMiAyMy4xIDEwLjIgMjEuOSAxMC4ySDE1LjlDMTQuOCAxMC4xIDEzLjkgOS4yIDEzLjkgOC4xWlwiLFxuICAgIGZpbGw6IFwiY3VycmVudENvbG9yXCJcbiAgfVxuKSB9KSwgWWggPSAoKSA9PiAvKiBAX19QVVJFX18gKi8gZTEoXCJzdmdcIiwgeyB2aWV3Qm94OiBcIjAgMCAyNCAyNFwiLCBmaWxsOiBcIm5vbmVcIiwgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiwgY2hpbGRyZW46IFtcbiAgLyogQF9fUFVSRV9fICovIGMoXG4gICAgXCJwYXRoXCIsXG4gICAge1xuICAgICAgZmlsbFJ1bGU6IFwiZXZlbm9kZFwiLFxuICAgICAgY2xpcFJ1bGU6IFwiZXZlbm9kZFwiLFxuICAgICAgZDogXCJNNi45NjMxNCA2LjU4NjY2QzYuOTYzMTQgNy45Nzk2NSA3LjUyODczIDkuMjQwNyA4LjQ0MjU1IDEwLjE1MjRMNC4zNzc4OSAxNS4zNzY1SDIuMTIzOEMwLjk3ODM1NSAxNS4zNzY1IDAuMDQ5NzkyNSAxNi4zMDUgMC4wNDk3OTI1IDE3LjQ1MDVWMjAuNDEzM0MwLjA0OTc5MjUgMjEuNTU4OCAwLjk3ODM1NSAyMi40ODczIDIuMTIzOCAyMi40ODczSDguMDQ5NTJDOS4xOTQ5NiAyMi40ODczIDEwLjEyMzUgMjEuNTU4OCAxMC4xMjM1IDIwLjQxMzNWMTcuNDUwNUMxMC4xMjM1IDE2LjMwNSA5LjE5NDk2IDE1LjM3NjUgOC4wNDk1MiAxNS4zNzY1SDUuODc5NTFMOS4zNzM3OCAxMC44ODU1QzEwLjEzODUgMTEuMzUzNyAxMS4wMzc5IDExLjYyMzUgMTIgMTEuNjIzNUMxMi45NjIxIDExLjYyMzUgMTMuODYxNSAxMS4zNTM3IDE0LjYyNjIgMTAuODg1NUwxOC4xMjA1IDE1LjM3NjVIMTUuOTUwNUMxNC44MDUgMTUuMzc2NSAxMy44NzY1IDE2LjMwNSAxMy44NzY1IDE3LjQ1MDVWMjAuNDEzM0MxMy44NzY1IDIxLjU1ODggMTQuODA1IDIyLjQ4NzMgMTUuOTUwNSAyMi40ODczSDIxLjg3NjJDMjMuMDIxNiAyMi40ODczIDIzLjk1MDIgMjEuNTU4OCAyMy45NTAyIDIwLjQxMzNWMTcuNDUwNUMyMy45NTAyIDE2LjMwNSAyMy4wMjE2IDE1LjM3NjUgMjEuODc2MiAxNS4zNzY1SDE5LjYyMjFMMTUuNTU3NCAxMC4xNTI0QzE2LjQ3MTMgOS4yNDA3IDE3LjAzNjkgNy45Nzk2NSAxNy4wMzY5IDYuNTg2NjZDMTcuMDM2OSAzLjgwNDg3IDE0Ljc4MTggMS41NDk3OSAxMiAxLjU0OTc5QzkuMjE4MjIgMS41NDk3OSA2Ljk2MzE0IDMuODA0ODcgNi45NjMxNCA2LjU4NjY2Wk04LjA0OTUyIDE2LjU2MTZIMi4xMjM4QzEuNjMyODkgMTYuNTYxNiAxLjIzNDk0IDE2Ljk1OTYgMS4yMzQ5NCAxNy40NTA1VjIwLjQxMzNDMS4yMzQ5NCAyMC45MDQyIDEuNjMyODkgMjEuMzAyMiAyLjEyMzggMjEuMzAyMkg4LjA0OTUyQzguNTQwNDIgMjEuMzAyMiA4LjkzODM4IDIwLjkwNDIgOC45MzgzOCAyMC40MTMzVjE3LjQ1MDVDOC45MzgzOCAxNi45NTk2IDguNTQwNDIgMTYuNTYxNiA4LjA0OTUyIDE2LjU2MTZaTTE1Ljg1MTcgNi41ODY2NkMxNS44NTE3IDguNzEzOSAxNC4xMjcyIDEwLjQzODQgMTIgMTAuNDM4NEM5Ljg3Mjc1IDEwLjQzODQgOC4xNDgyOCA4LjcxMzkgOC4xNDgyOCA2LjU4NjY2QzguMTQ4MjggNC40NTk0MSA5Ljg3Mjc1IDIuNzM0OTQgMTIgMi43MzQ5NEMxNC4xMjcyIDIuNzM0OTQgMTUuODUxNyA0LjQ1OTQxIDE1Ljg1MTcgNi41ODY2NlpNMjEuODc2MiAxNi41NjE2SDE1Ljk1MDVDMTUuNDU5NiAxNi41NjE2IDE1LjA2MTYgMTYuOTU5NiAxNS4wNjE2IDE3LjQ1MDVWMjAuNDEzM0MxNS4wNjE2IDIwLjkwNDIgMTUuNDU5NiAyMS4zMDIyIDE1Ljk1MDUgMjEuMzAyMkgyMS44NzYyQzIyLjM2NzEgMjEuMzAyMiAyMi43NjUxIDIwLjkwNDIgMjIuNzY1MSAyMC40MTMzVjE3LjQ1MDVDMjIuNzY1MSAxNi45NTk2IDIyLjM2NzEgMTYuNTYxNiAyMS44NzYyIDE2LjU2MTZaXCIsXG4gICAgICBmaWxsOiBcImN1cnJlbnRDb2xvclwiXG4gICAgfVxuICApLFxuICAvKiBAX19QVVJFX18gKi8gYyhcbiAgICBcInBhdGhcIixcbiAgICB7XG4gICAgICBmaWxsUnVsZTogXCJldmVub2RkXCIsXG4gICAgICBjbGlwUnVsZTogXCJldmVub2RkXCIsXG4gICAgICBkOiBcIk0xMiAxMC4zODg2QzE0LjA5OTcgMTAuMzg4NiAxNS44MDE5IDguNjg2NCAxNS44MDE5IDYuNTg2NjZDMTUuODAxOSA0LjQ4NjkxIDE0LjA5OTcgMi43ODQ3MyAxMiAyLjc4NDczQzkuOTAwMjUgMi43ODQ3MyA4LjE5ODA3IDQuNDg2OTEgOC4xOTgwNyA2LjU4NjY2QzguMTk4MDcgOC42ODY0IDkuOTAwMjUgMTAuMzg4NiAxMiAxMC4zODg2Wk04LjM3NjM0IDEwLjE1NjRDNy40NzE3OSA5LjIzODI5IDYuOTEzMzQgNy45Nzc1NiA2LjkxMzM0IDYuNTg2NjZDNi45MTMzNCAzLjc3NzM3IDkuMTkwNzIgMS41IDEyIDEuNUMxNC44MDkzIDEuNSAxNy4wODY3IDMuNzc3MzcgMTcuMDg2NyA2LjU4NjY2QzE3LjA4NjcgNy45Nzc1NyAxNi41MjgyIDkuMjM4MjkgMTUuNjIzNiAxMC4xNTY0TDE5LjY0NjUgMTUuMzI2N0gyMS44NzYyQzIzLjA0OTEgMTUuMzI2NyAyNCAxNi4yNzc1IDI0IDE3LjQ1MDVWMjAuNDEzM0MyNCAyMS41ODYzIDIzLjA0OTEgMjIuNTM3MSAyMS44NzYyIDIyLjUzNzFIMTUuOTUwNUMxNC43Nzc1IDIyLjUzNzEgMTMuODI2NyAyMS41ODYzIDEzLjgyNjcgMjAuNDEzM1YxNy40NTA1QzEzLjgyNjcgMTYuMjc3NSAxNC43Nzc1IDE1LjMyNjcgMTUuOTUwNSAxNS4zMjY3SDE4LjAxODdMMTQuNjE0MSAxMC45NTExQzEzLjg1MDEgMTEuNDA5NyAxMi45NTU2IDExLjY3MzMgMTIgMTEuNjczM0MxMS4wNDQ0IDExLjY3MzMgMTAuMTQ5OSAxMS40MDk3IDkuMzg1ODcgMTAuOTUxMUw1Ljk4MTM1IDE1LjMyNjdIOC4wNDk1MkM5LjIyMjQ2IDE1LjMyNjcgMTAuMTczMyAxNi4yNzc1IDEwLjE3MzMgMTcuNDUwNVYyMC40MTMzQzEwLjE3MzMgMjEuNTg2MyA5LjIyMjQ2IDIyLjUzNzEgOC4wNDk1MiAyMi41MzcxSDIuMTIzOEMwLjk1MDg1NSAyMi41MzcxIDAgMjEuNTg2MyAwIDIwLjQxMzNWMTcuNDUwNUMwIDE2LjI3NzUgMC45NTA4NTUgMTUuMzI2NyAyLjEyMzggMTUuMzI2N0g0LjM1MzU1TDguMzc2MzQgMTAuMTU2NFpNOC40NDI1NSAxMC4xNTI0QzcuNTI4NzMgOS4yNDA3IDYuOTYzMTQgNy45Nzk2NSA2Ljk2MzE0IDYuNTg2NjZDNi45NjMxNCAzLjgwNDg3IDkuMjE4MjIgMS41NDk3OSAxMiAxLjU0OTc5QzE0Ljc4MTggMS41NDk3OSAxNy4wMzY5IDMuODA0ODcgMTcuMDM2OSA2LjU4NjY2QzE3LjAzNjkgNy45Nzk2NSAxNi40NzEzIDkuMjQwNyAxNS41NTc0IDEwLjE1MjRMMTkuNjIyMSAxNS4zNzY1SDIxLjg3NjJDMjMuMDIxNiAxNS4zNzY1IDIzLjk1MDIgMTYuMzA1IDIzLjk1MDIgMTcuNDUwNVYyMC40MTMzQzIzLjk1MDIgMjEuNTU4OCAyMy4wMjE2IDIyLjQ4NzMgMjEuODc2MiAyMi40ODczSDE1Ljk1MDVDMTQuODA1IDIyLjQ4NzMgMTMuODc2NSAyMS41NTg4IDEzLjg3NjUgMjAuNDEzM1YxNy40NTA1QzEzLjg3NjUgMTYuMzA1IDE0LjgwNSAxNS4zNzY1IDE1Ljk1MDUgMTUuMzc2NUgxOC4xMjA1TDE0LjYyNjIgMTAuODg1NUMxMy44NjE1IDExLjM1MzcgMTIuOTYyMSAxMS42MjM1IDEyIDExLjYyMzVDMTEuMDM3OSAxMS42MjM1IDEwLjEzODUgMTEuMzUzNyA5LjM3Mzc4IDEwLjg4NTVMNS44Nzk1MSAxNS4zNzY1SDguMDQ5NTJDOS4xOTQ5NiAxNS4zNzY1IDEwLjEyMzUgMTYuMzA1IDEwLjEyMzUgMTcuNDUwNVYyMC40MTMzQzEwLjEyMzUgMjEuNTU4OCA5LjE5NDk2IDIyLjQ4NzMgOC4wNDk1MiAyMi40ODczSDIuMTIzOEMwLjk3ODM1NSAyMi40ODczIDAuMDQ5NzkyNSAyMS41NTg4IDAuMDQ5NzkyNSAyMC40MTMzVjE3LjQ1MDVDMC4wNDk3OTI1IDE2LjMwNSAwLjk3ODM1NSAxNS4zNzY1IDIuMTIzOCAxNS4zNzY1SDQuMzc3ODlMOC40NDI1NSAxMC4xNTI0Wk04LjA0OTUyIDE2LjYxMTRIMi4xMjM4QzEuNjYwMzkgMTYuNjExNCAxLjI4NDczIDE2Ljk4NzEgMS4yODQ3MyAxNy40NTA1VjIwLjQxMzNDMS4yODQ3MyAyMC44NzY3IDEuNjYwMzkgMjEuMjUyNCAyLjEyMzggMjEuMjUyNEg4LjA0OTUyQzguNTEyOTIgMjEuMjUyNCA4Ljg4ODU4IDIwLjg3NjcgOC44ODg1OCAyMC40MTMzVjE3LjQ1MDVDOC44ODg1OCAxNi45ODcxIDguNTEyOTIgMTYuNjExNCA4LjA0OTUyIDE2LjYxMTRaTTIxLjg3NjIgMTYuNjExNEgxNS45NTA1QzE1LjQ4NzEgMTYuNjExNCAxNS4xMTE0IDE2Ljk4NzEgMTUuMTExNCAxNy40NTA1VjIwLjQxMzNDMTUuMTExNCAyMC44NzY3IDE1LjQ4NzEgMjEuMjUyNCAxNS45NTA1IDIxLjI1MjRIMjEuODc2MkMyMi4zMzk2IDIxLjI1MjQgMjIuNzE1MyAyMC44NzY3IDIyLjcxNTMgMjAuNDEzM1YxNy40NTA1QzIyLjcxNTMgMTYuOTg3MSAyMi4zMzk2IDE2LjYxMTQgMjEuODc2MiAxNi42MTE0Wk0yLjEyMzggMTYuNTYxNkg4LjA0OTUyQzguNTQwNDIgMTYuNTYxNiA4LjkzODM4IDE2Ljk1OTYgOC45MzgzOCAxNy40NTA1VjIwLjQxMzNDOC45MzgzOCAyMC45MDQyIDguNTQwNDIgMjEuMzAyMiA4LjA0OTUyIDIxLjMwMjJIMi4xMjM4QzEuNjMyODkgMjEuMzAyMiAxLjIzNDk0IDIwLjkwNDIgMS4yMzQ5NCAyMC40MTMzVjE3LjQ1MDVDMS4yMzQ5NCAxNi45NTk2IDEuNjMyODkgMTYuNTYxNiAyLjEyMzggMTYuNTYxNlpNMTIgMTAuNDM4NEMxNC4xMjcyIDEwLjQzODQgMTUuODUxNyA4LjcxMzkgMTUuODUxNyA2LjU4NjY2QzE1Ljg1MTcgNC40NTk0MSAxNC4xMjcyIDIuNzM0OTQgMTIgMi43MzQ5NEM5Ljg3Mjc1IDIuNzM0OTQgOC4xNDgyOCA0LjQ1OTQxIDguMTQ4MjggNi41ODY2NkM4LjE0ODI4IDguNzEzOSA5Ljg3Mjc1IDEwLjQzODQgMTIgMTAuNDM4NFpNMTUuOTUwNSAxNi41NjE2SDIxLjg3NjJDMjIuMzY3MSAxNi41NjE2IDIyLjc2NTEgMTYuOTU5NiAyMi43NjUxIDE3LjQ1MDVWMjAuNDEzM0MyMi43NjUxIDIwLjkwNDIgMjIuMzY3MSAyMS4zMDIyIDIxLjg3NjIgMjEuMzAyMkgxNS45NTA1QzE1LjQ1OTYgMjEuMzAyMiAxNS4wNjE2IDIwLjkwNDIgMTUuMDYxNiAyMC40MTMzVjE3LjQ1MDVDMTUuMDYxNiAxNi45NTk2IDE1LjQ1OTYgMTYuNTYxNiAxNS45NTA1IDE2LjU2MTZaXCIsXG4gICAgICBmaWxsOiBcImN1cnJlbnRDb2xvclwiXG4gICAgfVxuICApXG5dIH0pLCBHaCA9ICgpID0+IC8qIEBfX1BVUkVfXyAqLyBjKFwic3ZnXCIsIHsgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiwgdmlld0JveDogXCIwIDAgMjQgMjRcIiwgZmlsbDogXCJub25lXCIsIGNoaWxkcmVuOiAvKiBAX19QVVJFX18gKi8gYyhcbiAgXCJwYXRoXCIsXG4gIHtcbiAgICBmaWxsUnVsZTogXCJldmVub2RkXCIsXG4gICAgY2xpcFJ1bGU6IFwiZXZlbm9kZFwiLFxuICAgIGQ6IFwiTTI0IDE4VjIxQzI0IDIyLjIgMjMgMjMuMSAyMS45IDIzLjFIMTZDMTQuOCAyMy4xIDEzLjkgMjIuMSAxMy45IDIxVjE4QzEzLjkgMTYuOCAxNC45IDE1LjkgMTYgMTUuOUgxNy43TDE0LjQgMTEuN0MxMy43IDEyLjEgMTIuOSAxMi4zIDEyLjEgMTIuM0MxMS4yIDEyLjMgMTAuNCAxMi4xIDkuNyAxMS43TDYuNCAxNkg4QzkuMiAxNiAxMC4xIDE3IDEwLjEgMTguMVYyMS4xQzEwLjEgMjIuMyA5LjEgMjMuMiA4IDIzLjJIMi4xQzEgMjMgMCAyMi4xIDAgMjAuOVYxNy45QzAgMTYuNyAxIDE1LjggMi4xIDE1LjhINEw4LjIgMTAuNEM3LjQgOS42IDYuOSA4LjQgNi45IDcuMUM2LjkgNC4zIDkuMiAyIDEyIDJDMTQuOCAyIDE3LjEgNC4zIDE3LjEgNy4xQzE3LjEgOC40IDE2LjYgOS42IDE1LjggMTAuNUwxOS45IDE1LjhIMjEuOUMyMyAxNS44IDI0IDE2LjggMjQgMThaXCIsXG4gICAgZmlsbDogXCJjdXJyZW50Q29sb3JcIlxuICB9XG4pIH0pLCBRaCA9ICgpID0+IC8qIEBfX1BVUkVfXyAqLyBlMShcbiAgXCJzdmdcIixcbiAge1xuICAgIHdpZHRoOiBcIjI0XCIsXG4gICAgaGVpZ2h0OiBcIjI0XCIsXG4gICAgdmlld0JveDogXCIwIDAgMjQgMjRcIixcbiAgICBmaWxsOiBcIm5vbmVcIixcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIGNoaWxkcmVuOiBbXG4gICAgICAvKiBAX19QVVJFX18gKi8gZTEoXCJnXCIsIHsgY2xpcFBhdGg6IFwidXJsKCNjbGlwMF8yNzIxXzYxMzgzKVwiLCBjaGlsZHJlbjogW1xuICAgICAgICAvKiBAX19QVVJFX18gKi8gYyhcbiAgICAgICAgICBcInBhdGhcIixcbiAgICAgICAgICB7XG4gICAgICAgICAgICBmaWxsUnVsZTogXCJldmVub2RkXCIsXG4gICAgICAgICAgICBjbGlwUnVsZTogXCJldmVub2RkXCIsXG4gICAgICAgICAgICBkOiBcIk0xNy40NDQ1IDYuNTU1MTdDMTcuNzE3OCA2LjgyODUzIDE3LjcxNzggNy4yNzE3NSAxNy40NDQ1IDcuNTQ1MTFMNy41NDQ5OCAxNy40NDQ2QzcuMjcxNjIgMTcuNzE4IDYuODI4NCAxNy43MTggNi41NTUwMyAxNy40NDQ2QzYuMjgxNjcgMTcuMTcxMiA2LjI4MTY3IDE2LjcyOCA2LjU1NTAzIDE2LjQ1NDdMMTYuNDU0NSA2LjU1NTE3QzE2LjcyNzkgNi4yODE4IDE3LjE3MTEgNi4yODE4IDE3LjQ0NDUgNi41NTUxN1pcIixcbiAgICAgICAgICAgIGZpbGw6IFwiY3VycmVudGNvbG9yXCJcbiAgICAgICAgICB9XG4gICAgICAgICksXG4gICAgICAgIC8qIEBfX1BVUkVfXyAqLyBjKFxuICAgICAgICAgIFwicGF0aFwiLFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGZpbGxSdWxlOiBcImV2ZW5vZGRcIixcbiAgICAgICAgICAgIGNsaXBSdWxlOiBcImV2ZW5vZGRcIixcbiAgICAgICAgICAgIGQ6IFwiTTIxLjg3OTcgMi4xMjA4MkMyMy4xNjczIDMuNDA5OTggMjMuODkwNSA1LjE1NzUgMjMuODkwNSA2Ljk3OTUxQzIzLjg5MDUgOC44MDE1MyAyMy4xNjczIDEwLjU0OSAyMS44Nzk3IDExLjgzODJMMTguOTcxOCAxNC43NDYxQzE4LjY5ODQgMTUuMDE5NSAxOC4yNTUyIDE1LjAxOTUgMTcuOTgxOCAxNC43NDYxQzE3LjcwODUgMTQuNDcyOCAxNy43MDg1IDE0LjAyOTYgMTcuOTgxOCAxMy43NTYyTDIwLjg4OTIgMTAuODQ4OUMyMS45MTQ2IDkuODIyMjEgMjIuNDkwNSA4LjQzMDUyIDIyLjQ5MDUgNi45Nzk1MUMyMi40OTA1IDUuNTI4NjQgMjEuOTE0NyA0LjEzNzA5IDIwLjg4OTUgMy4xMTA0NkMxOS44NjI5IDIuMDg1MjcgMTguNDcxMyAxLjUwOTQ0IDE3LjAyMDQgMS41MDk0NEMxNS41Njk1IDEuNTA5NDQgMTQuMTc3OSAyLjA4NTM0IDEzLjE1MTIgMy4xMTA2NEwxMC4yOTc3IDUuOTY0MTJDMTAuMDI0MyA2LjIzNzQ5IDkuNTgxMTMgNi4yMzc0OSA5LjMwNzc3IDUuOTY0MTJDOS4wMzQ0IDUuNjkwNzYgOS4wMzQ0IDUuMjQ3NTQgOS4zMDc3NyA0Ljk3NDE3TDEyLjE2MTQgMi4xMjA1MUMxMy40NTA2IDAuODMyOTU0IDE1LjE5ODQgMC4xMDk0MzYgMTcuMDIwNCAwLjEwOTQzNkMxOC44NDI0IDAuMTA5NDM2IDIwLjU5MDYgMC44MzMyNjEgMjEuODc5NyAyLjEyMDgyWk01Ljg2OTQzIDkuNDAyNDZDNi4xNDI3OSA5LjY3NTgzIDYuMTQyNzkgMTAuMTE5IDUuODY5NDMgMTAuMzkyNEwyLjk3MDc5IDEzLjI5MTFDMi4wMDg3OSAxNC4zMjggMS40ODUyNyAxNS42OTcxIDEuNTEwMjMgMTcuMTExN0MxLjUzNTI2IDE4LjUzMDIgMi4xMDk5MSAxOS44ODM2IDMuMTEzMTIgMjAuODg2OEM0LjExNjMyIDIxLjg5IDUuNDY5NzYgMjIuNDY0NyA2Ljg4ODI5IDIyLjQ4OTdDOC4zMDI4MiAyMi41MTQ3IDkuNjcxOTYgMjEuOTkxMiAxMC43MDg5IDIxLjAyOTJMMTMuNjA3NSAxOC4xMzA1QzEzLjg4MDkgMTcuODU3MiAxNC4zMjQxIDE3Ljg1NzIgMTQuNTk3NSAxOC4xMzA1QzE0Ljg3MDggMTguNDAzOSAxNC44NzA4IDE4Ljg0NzEgMTQuNTk3NSAxOS4xMjA1TDExLjY4MTEgMjIuMDM2OEwxMS42NzIxIDIyLjA0NTNDMTAuMzY4NyAyMy4yNTk3IDguNjQ0ODIgMjMuOTIwOSA2Ljg2MzU5IDIzLjg4OTVDNS4wODIzNyAyMy44NTgxIDMuMzgyODggMjMuMTM2NSAyLjEyMzE3IDIxLjg3NjhDMC44NjM0NTUgMjAuNjE3MSAwLjE0MTg3NSAxOC45MTc2IDAuMTEwNDQ2IDE3LjEzNjNDMC4wNzkwMTkgMTUuMzU1MSAwLjc0MDIgMTMuNjMxMiAxLjk1NDY5IDEyLjMyNzlMMS45NjMxMSAxMi4zMTg4TDQuODc5NDggOS40MDI0NkM1LjE1Mjg0IDkuMTI5MSA1LjU5NjA2IDkuMTI5MSA1Ljg2OTQzIDkuNDAyNDZaXCIsXG4gICAgICAgICAgICBmaWxsOiBcImN1cnJlbnRjb2xvclwiXG4gICAgICAgICAgfVxuICAgICAgICApXG4gICAgICBdIH0pLFxuICAgICAgLyogQF9fUFVSRV9fICovIGMoXCJkZWZzXCIsIHsgY2hpbGRyZW46IC8qIEBfX1BVUkVfXyAqLyBjKFwiY2xpcFBhdGhcIiwgeyBpZDogXCJjbGlwMF8yNzIxXzYxMzgzXCIsIGNoaWxkcmVuOiAvKiBAX19QVVJFX18gKi8gYyhcInJlY3RcIiwgeyB3aWR0aDogXCIyNFwiLCBoZWlnaHQ6IFwiMjRcIiwgZmlsbDogXCJ3aGl0ZVwiIH0pIH0pIH0pXG4gICAgXVxuICB9XG4pLCBaaCA9ICgpID0+IC8qIEBfX1BVUkVfXyAqLyBjKFwic3ZnXCIsIHsgdmlld0JveDogXCIwIDAgMjQgMjRcIiwgZmlsbDogXCJub25lXCIsIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsIGNoaWxkcmVuOiAvKiBAX19QVVJFX18gKi8gYyhcbiAgXCJwYXRoXCIsXG4gIHtcbiAgICBkOiBcIk0yMy41IDIyLjg4NTRWNi42ODA0N0MyMy41IDYuNjA1MSAyMy40OTk5IDYuNTI5NzMgMjMuNDI0OCA2LjM3ODk4QzIzLjQyNDggNi4zMDM2MSAyMy4zNDk2IDYuMjI4MjUgMjMuMjc0NSA2LjE1Mjg4TDE3Ljg2MjggMC43MjYxMDZDMTcuNzg3NiAwLjY1MDczNCAxNy43MTI0IDAuNTc1Mzc2IDE3LjYzNzIgMC41NzUzNzZDMTcuNTYyMSAwLjU3NTM3NiAxNy40ODY5IDAuNSAxNy4zMzY2IDAuNUgxLjE3NjQ5QzAuODAwNjcxIDAuNSAwLjUgMC44MDE0ODIgMC41IDEuMTc4MzRWMjIuODFDMC41IDIzLjE4NjkgMC44MDA2NzEgMjMuNDg4NCAxLjE3NjQ5IDIzLjQ4ODRIMjIuNzQ4NEMyMy4xOTkzIDIzLjU2MzcgMjMuNSAyMy4yNjIyIDIzLjUgMjIuODg1NFpNMTcuODYyOCAyLjM2OTEyTDIxLjg1NDEgNi4zNzg5OEgxNy43ODFMMTcuODYyOCAyLjM2OTEyWk0xLjc5NzcyIDIyLjM4OTlWMS43NDQ2NEgxNi44MTA1VjYuNjgwNDdDMTYuODEwNSA3LjA1NzMzIDE3LjExMTEgNy4zNTg4MyAxNy40ODY5IDcuMzU4ODNIMjIuNDc3MVYyMi4zODk5SDEuNzk3NzJaXCIsXG4gICAgZmlsbDogXCJjdXJyZW50Q29sb3JcIlxuICB9XG4pIH0pLCBqaCA9ICgpID0+IC8qIEBfX1BVUkVfXyAqLyBlMShcInN2Z1wiLCB7IHZpZXdCb3g6IFwiMCAwIDI0IDI0XCIsIGZpbGw6IFwibm9uZVwiLCB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLCBjaGlsZHJlbjogW1xuICAvKiBAX19QVVJFX18gKi8gYyhcbiAgICBcInBhdGhcIixcbiAgICB7XG4gICAgICBkOiBcIk01LjczMzE1IDAuOTM1NDE3QzUuNzMzMTUgMC41NTY4NzIgNi4wNDAwMyAwLjI1IDYuNDE4NTcgMC4yNUM2Ljc5NzEyIDAuMjUgNy4xMDM5OSAwLjU1Njg3MiA3LjEwMzk5IDAuOTM1NDE3VjIzLjA2NDZDNy4xMDM5OSAyMy40NDMxIDYuNzk3MTIgMjMuNzUgNi40MTg1NyAyMy43NUM2LjA0MDAzIDIzLjc1IDUuNzMzMTUgMjMuNDQzMSA1LjczMzE1IDIzLjA2NDZWMC45MzU0MTdaXCIsXG4gICAgICBmaWxsOiBcImN1cnJlbnRDb2xvclwiXG4gICAgfVxuICApLFxuICAvKiBAX19QVVJFX18gKi8gYyhcbiAgICBcInBhdGhcIixcbiAgICB7XG4gICAgICBkOiBcIk0xNi44OTU3IDAuOTM1NDE3QzE2Ljg5NTcgMC41NTY4NzIgMTcuMjAyNSAwLjI1IDE3LjU4MTEgMC4yNUMxNy45NTk2IDAuMjUgMTguMjY2NSAwLjU1Njg3MiAxOC4yNjY1IDAuOTM1NDE3VjIzLjA2NDZDMTguMjY2NSAyMy40NDMxIDE3Ljk1OTYgMjMuNzUgMTcuNTgxMSAyMy43NUMxNy4yMDI1IDIzLjc1IDE2Ljg5NTcgMjMuNDQzMSAxNi44OTU3IDIzLjA2NDZWMC45MzU0MTdaXCIsXG4gICAgICBmaWxsOiBcImN1cnJlbnRDb2xvclwiXG4gICAgfVxuICApXG5dIH0pLCBLaCA9ICgpID0+IC8qIEBfX1BVUkVfXyAqLyBjKFwic3ZnXCIsIHsgdmlld0JveDogXCIwIDAgNDggNDhcIiwgZmlsbDogXCJub25lXCIsIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsIGNoaWxkcmVuOiAvKiBAX19QVVJFX18gKi8gYyhcbiAgXCJwYXRoXCIsXG4gIHtcbiAgICBmaWxsUnVsZTogXCJldmVub2RkXCIsXG4gICAgY2xpcFJ1bGU6IFwiZXZlbm9kZFwiLFxuICAgIGQ6IFwiTTMyLjQ4OTggMTcuOTM0SDI4LjU0MjVWMTkuNDkyNEgzNS4xNTUyVjEyLjk0NjlMMzMuNTgwNyAxMi45NDY5VjE2LjcxMDhMMzIuNzUzOCAxNS43ODA1QzMwLjUzNCAxMy4yODMxIDI3LjI4NTUgMTEuNzAwMiAyMy42NjE2IDExLjcwMDJDMTcuNTQ4NyAxMS43MDAyIDEyLjQ5OTcgMTYuMTc0NCAxMS42NjE2IDIxLjk4NTlIMTMuMjY0NEMxNC4wODg4IDE3LjA0MiAxOC40MzcxIDEzLjI1ODYgMjMuNjYxNiAxMy4yNTg2QzI2Ljk4NTIgMTMuMjU4NiAyOS45NTMgMTQuNzg2NiAzMS44NzggMTcuMTc0OUwzMi40ODk4IDE3LjkzNFpNMTMuNzQyNSAzMC42ODk2TDE0LjU2OTUgMzEuNjE5OUMxNi43ODkyIDM0LjExNzIgMjAuMDM3OCAzNS43MDAyIDIzLjY2MTYgMzUuNzAwMkMyOS43NzQ1IDM1LjcwMDIgMzQuODIzNiAzMS4yMjYgMzUuNjYxNiAyNS40MTQ1SDM0LjA1ODhDMzMuMjM0NCAzMC4zNTg0IDI4Ljg4NjIgMzQuMTQxOCAyMy42NjE2IDM0LjE0MThDMjAuMzM3MSAzNC4xNDE4IDE3LjM4MjkgMzIuNjEzMSAxNS40NDYzIDMwLjIyNjhMMTQuODI5MiAyOS40NjY0SDE4Ljc4MDhWMjcuOTA4SDEyLjE2OEwxMi4xNjggMzQuNDUzNEgxMy43NDI1VjMwLjY4OTZaTTIyLjAyMDYgMjEuMzg5MUMyMi4wMjA2IDIyLjA2NDYgMjIuNDc5NSAyMi40OTg0IDIzLjkwNjcgMjIuOTE4QzI1LjMzMzggMjMuMzM3NSAyNi44NjE1IDI0LjAyNzMgMjYuODYxNSAyNi4wNDY4QzI2Ljg2MTUgMjcuNTA0NiAyNS44ODcgMjguMzA4MiAyNC42NjExIDI4LjU3MTNWMzAuMTAwMkgyMi43NzVWMjguNTU3MUMyMS41Njc5IDI4LjI2NTUgMjAuNTM2OSAyNy4zOTA4IDIwLjQ2MTUgMjUuODMzNUgyMS44NDQ2QzIxLjkxMzcgMjYuNjcyNiAyMi40MjMgMjcuMzI2OCAyMy43MTggMjcuMzI2OEMyNS4xMDc0IDI3LjMyNjggMjUuNDE1NSAyNi41NDQ2IDI1LjQxNTUgMjYuMDU0QzI1LjQxNTUgMjUuMzkyNiAyNS4xMDExIDI0Ljc2NjggMjMuNTI5NCAyNC4zNDAyQzIxLjc3NTQgMjMuODYzNyAyMC41NzQ2IDIzLjA0NiAyMC41NzQ2IDIxLjQwMzNDMjAuNTc0NiAyMC4wMzA4IDIxLjU1NTQgMTkuMTM0OCAyMi43NzUgMTguODM2MlYxNy4zMDAySDI0LjY2MTFWMTguODU3NUMyNS45NzUgMTkuMjIwMiAyNi42MzUxIDIwLjM0MzcgMjYuNjc5MSAyMS41NjY4SDI1LjI4OThDMjUuMjUyIDIwLjY3OCAyNC44MzcxIDIwLjA3MzUgMjMuNzE4IDIwLjA3MzVDMjIuNjU1NiAyMC4wNzM1IDIyLjAyMDYgMjAuNjE0IDIyLjAyMDYgMjEuMzg5MVpcIixcbiAgICBmaWxsOiBcImN1cnJlbnRDb2xvclwiXG4gIH1cbikgfSksIEpoID0gKCkgPT4gLyogQF9fUFVSRV9fICovIGUxKFwic3ZnXCIsIHsgdmlld0JveDogXCIwIDAgNDggNDhcIiwgZmlsbDogXCJub25lXCIsIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsIGNoaWxkcmVuOiBbXG4gIC8qIEBfX1BVUkVfXyAqLyBjKFxuICAgIFwicGF0aFwiLFxuICAgIHtcbiAgICAgIGQ6IFwiTTMzIDM1LjQ2MTNWMTguMjg0M0MzMyAxOC4yODQzIDMzIDE4LjI4NDMgMzMgMTguMjI0NEMzMyAxOC4xNjQ2IDMzIDE4LjEwNDcgMzMgMTguMTA0N1YxOC4wNDQ5QzMzIDE3Ljk4NSAzMi45NDA5IDE3LjkyNTIgMzIuODgxOSAxNy44NjUzTDI3LjIxNjQgMTIuMTE5N0MyNy4xNTczIDEyLjA1OTggMjcuMDk4MyAxMi4wNTk5IDI3LjAzOTMgMTJIMjYuOTgwM0MyNi45MjEzIDEyIDI2Ljg2MjMgMTIgMjYuODYyMyAxMkMyNi44NjIzIDEyIDI2Ljg2MjMgMTIgMjYuODAzMyAxMkgxNS41MzExQzE1LjIzNiAxMiAxNSAxMi4yMzk0IDE1IDEyLjUzODZWMzUuNDYxM0MxNSAzNS43NjA2IDE1LjIzNiAzNiAxNS41MzExIDM2SDMyLjQ2ODhDMzIuNzYzOSAzNiAzMyAzNS43NjA2IDMzIDM1LjQ2MTNaTTI3LjM5MzQgMTMuODU1NEwzMS4xNzA0IDE3LjY4NThIMjcuMzkzNFYxMy44NTU0Wk0xNi4xMjEzIDM0Ljg2MjhWMTMuMDc3M0gyNi4zMzExVjE4LjIyNDRDMjYuMzMxMSAxOC41MjM3IDI2LjU2NzIgMTguNzYzMSAyNi44NjIzIDE4Ljc2MzFIMzEuOTM3N1YzNC44MDNIMTYuMTIxM1YzNC44NjI4WlwiLFxuICAgICAgZmlsbDogXCJjdXJyZW50Q29sb3JcIlxuICAgIH1cbiAgKSxcbiAgLyogQF9fUFVSRV9fICovIGMoXG4gICAgXCJwYXRoXCIsXG4gICAge1xuICAgICAgZDogXCJNMjAuNTI4MSAyNy45MjhDMjAuNTI4MSAyNy40NDI3IDIwLjQwODEgMjcuMDY5MyAyMC4xNjgxIDI2LjgwOEMxOS45MjgxIDI2LjU0NjcgMTkuNjA4MSAyNi40MTYgMTkuMjA4MSAyNi40MTZDMTguOTg0MSAyNi40MTYgMTguODA4MSAyNi40MjQgMTguNjgwMSAyNi40NEMxOC41NTc1IDI2LjQ1NiAxOC40NTg4IDI2LjQ3NDcgMTguMzg0MSAyNi40OTZWMjkuMTJDMTguNDc0OCAyOS4xOTQ3IDE4LjYwNTUgMjkuMjY2NyAxOC43NzYxIDI5LjMzNkMxOC45NDY4IDI5LjQwNTMgMTkuMTMzNSAyOS40NCAxOS4zMzYxIDI5LjQ0QzE5LjU0OTUgMjkuNDQgMTkuNzMwOCAyOS40MDI3IDE5Ljg4MDEgMjkuMzI4QzIwLjAzNDggMjkuMjQ4IDIwLjE2MDEgMjkuMTQxMyAyMC4yNTYxIDI5LjAwOEMyMC4zNTIxIDI4Ljg2OTMgMjAuNDIxNSAyOC43MDkzIDIwLjQ2NDEgMjguNTI4QzIwLjUwNjggMjguMzQxMyAyMC41MjgxIDI4LjE0MTMgMjAuNTI4MSAyNy45MjhaTTIxLjMwNDEgMjcuOTI4QzIxLjMwNDEgMjguMjQyNyAyMS4yNjE1IDI4LjUzMzMgMjEuMTc2MSAyOC44QzIxLjA5NjEgMjkuMDY2NyAyMC45NzYxIDI5LjI5NiAyMC44MTYxIDI5LjQ4OEMyMC42NTYxIDI5LjY4IDIwLjQ1ODggMjkuODI5MyAyMC4yMjQxIDI5LjkzNkMxOS45OTQ4IDMwLjA0MjcgMTkuNzMwOCAzMC4wOTYgMTkuNDMyMSAzMC4wOTZDMTkuMTkyMSAzMC4wOTYgMTguOTc4OCAzMC4wNjQgMTguNzkyMSAzMEMxOC42MTA4IDI5LjkzNiAxOC40NzQ4IDI5Ljg3NDcgMTguMzg0MSAyOS44MTZWMzEuNDhIMTcuNjQwMVYyNS45NjhDMTcuODE2MSAyNS45MjUzIDE4LjAzNDggMjUuODggMTguMjk2MSAyNS44MzJDMTguNTYyOCAyNS43Nzg3IDE4Ljg2OTUgMjUuNzUyIDE5LjIxNjEgMjUuNzUyQzE5LjUzNjEgMjUuNzUyIDE5LjgyNDEgMjUuODAyNyAyMC4wODAxIDI1LjkwNEMyMC4zMzYxIDI2LjAwNTMgMjAuNTU0OCAyNi4xNDkzIDIwLjczNjEgMjYuMzM2QzIwLjkxNzUgMjYuNTIyNyAyMS4wNTYxIDI2Ljc1MiAyMS4xNTIxIDI3LjAyNEMyMS4yNTM1IDI3LjI5MDcgMjEuMzA0MSAyNy41OTIgMjEuMzA0MSAyNy45MjhaXCIsXG4gICAgICBmaWxsOiBcImN1cnJlbnRDb2xvclwiXG4gICAgfVxuICApLFxuICAvKiBAX19QVVJFX18gKi8gYyhcbiAgICBcInBhdGhcIixcbiAgICB7XG4gICAgICBkOiBcIk0yNS4yMzkxIDI2LjcyQzI1LjE0ODQgMjYuNjQ1MyAyNS4wMTc3IDI2LjU3MzMgMjQuODQ3MSAyNi41MDRDMjQuNjc2NCAyNi40MzQ3IDI0LjQ4OTcgMjYuNCAyNC4yODcxIDI2LjRDMjQuMDczNyAyNi40IDIzLjg4OTcgMjYuNDQgMjMuNzM1MSAyNi41MkMyMy41ODU3IDI2LjU5NDcgMjMuNDYzMSAyNi43MDEzIDIzLjM2NzEgMjYuODRDMjMuMjcxMSAyNi45NzMzIDIzLjIwMTcgMjcuMTMzMyAyMy4xNTkxIDI3LjMyQzIzLjExNjQgMjcuNTA2NyAyMy4wOTUxIDI3LjcwNjcgMjMuMDk1MSAyNy45MkMyMy4wOTUxIDI4LjQwNTMgMjMuMjE1MSAyOC43ODEzIDIzLjQ1NTEgMjkuMDQ4QzIzLjY5NTEgMjkuMzA5MyAyNC4wMTUxIDI5LjQ0IDI0LjQxNTEgMjkuNDRDMjQuNjE3NyAyOS40NCAyNC43ODU3IDI5LjQzMiAyNC45MTkxIDI5LjQxNkMyNS4wNTc3IDI5LjM5NDcgMjUuMTY0NCAyOS4zNzMzIDI1LjIzOTEgMjkuMzUyVjI2LjcyWk0yNS4yMzkxIDIzLjkyTDI1Ljk4MzEgMjMuNzkyVjI5Ljg4QzI1LjgxMjQgMjkuOTI4IDI1LjU5MzcgMjkuOTc2IDI1LjMyNzEgMzAuMDI0QzI1LjA2MDQgMzAuMDcyIDI0Ljc1MzcgMzAuMDk2IDI0LjQwNzEgMzAuMDk2QzI0LjA4NzEgMzAuMDk2IDIzLjc5OTEgMzAuMDQ1MyAyMy41NDMxIDI5Ljk0NEMyMy4yODcxIDI5Ljg0MjcgMjMuMDY4NCAyOS42OTg3IDIyLjg4NzEgMjkuNTEyQzIyLjcwNTcgMjkuMzI1MyAyMi41NjQ0IDI5LjA5ODcgMjIuNDYzMSAyOC44MzJDMjIuMzY3MSAyOC41NiAyMi4zMTkxIDI4LjI1NiAyMi4zMTkxIDI3LjkyQzIyLjMxOTEgMjcuNiAyMi4zNTkxIDI3LjMwNjcgMjIuNDM5MSAyNy4wNEMyMi41MjQ0IDI2Ljc3MzMgMjIuNjQ3MSAyNi41NDQgMjIuODA3MSAyNi4zNTJDMjIuOTY3MSAyNi4xNiAyMy4xNjE3IDI2LjAxMDcgMjMuMzkxMSAyNS45MDRDMjMuNjI1NyAyNS43OTczIDIzLjg5MjQgMjUuNzQ0IDI0LjE5MTEgMjUuNzQ0QzI0LjQzMTEgMjUuNzQ0IDI0LjY0MTcgMjUuNzc2IDI0LjgyMzEgMjUuODRDMjUuMDA5NyAyNS45MDQgMjUuMTQ4NCAyNS45NjUzIDI1LjIzOTEgMjYuMDI0VjIzLjkyWlwiLFxuICAgICAgZmlsbDogXCJjdXJyZW50Q29sb3JcIlxuICAgIH1cbiAgKSxcbiAgLyogQF9fUFVSRV9fICovIGMoXG4gICAgXCJwYXRoXCIsXG4gICAge1xuICAgICAgZDogXCJNMjkuMDg2IDIzLjc5MkMyOS4zMDQ3IDIzLjc5MiAyOS40OTEzIDIzLjgwOCAyOS42NDYgMjMuODRDMjkuODA2IDIzLjg3MiAyOS45MTggMjMuOTAxMyAyOS45ODIgMjMuOTI4TDI5Ljg0NiAyNC41NjhDMjkuNzgyIDI0LjUzNiAyOS42OTEzIDI0LjUwNjcgMjkuNTc0IDI0LjQ4QzI5LjQ1NjcgMjQuNDQ4IDI5LjMxMjcgMjQuNDMyIDI5LjE0MiAyNC40MzJDMjguNzk1MyAyNC40MzIgMjguNTUyNyAyNC41MjggMjguNDE0IDI0LjcyQzI4LjI3NTMgMjQuOTA2NyAyOC4yMDYgMjUuMTYgMjguMjA2IDI1LjQ4VjI1Ljg0SDI5LjgwNlYyNi40NjRIMjguMjA2VjMwSDI3LjQ2MlYyNS40NjRDMjcuNDYyIDI0LjkzMDcgMjcuNTkyNyAyNC41MiAyNy44NTQgMjQuMjMyQzI4LjExNTMgMjMuOTM4NyAyOC41MjYgMjMuNzkyIDI5LjA4NiAyMy43OTJaXCIsXG4gICAgICBmaWxsOiBcImN1cnJlbnRDb2xvclwiXG4gICAgfVxuICApXG5dIH0pLCBfaCA9ICgpID0+IC8qIEBfX1BVUkVfXyAqLyBlMShcInN2Z1wiLCB7IHZpZXdCb3g6IFwiMCAwIDI0IDI1XCIsIGZpbGw6IFwibm9uZVwiLCB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLCBjaGlsZHJlbjogW1xuICAvKiBAX19QVVJFX18gKi8gYyhcbiAgICBcInBhdGhcIixcbiAgICB7XG4gICAgICBkOiBcIk0yMi44MzkxIDYuOTAzNDFDMjQuMjU0NyA1LjQ4ODE4IDI0LjI1NDcgMy4xNzIzNCAyMi44MzkxIDEuNjkyNzhDMjIuMTMxMyAwLjk4NTE1OSAyMS4yMzA0IDAuNTk5MTg5IDIwLjI2NTIgMC41OTkxODlDMTkuMyAwLjU5OTE4OSAxOC4zMzQ4IDAuOTg1MTU5IDE3LjY5MTMgMS42OTI3OEwyLjQ0MDkzIDE2LjkzODdDMi4zNzY1OCAxNy4wMDMgMi4zNzY1OCAxNy4wNjc0IDIuMzEyMjMgMTcuMDY3NEMyLjMxMjIzIDE3LjA2NzQgMi4zMTIyMyAxNy4wNjc0IDIuMzEyMjMgMTcuMTMxN0wwLjEyNDQxNiAyMy42Mjg5QzAuMDYwMDY4NiAyMy44MjE5IDAuMTI0NDE2IDI0LjA3OTIgMC4yNTMxMTEgMjQuMjA3OEMwLjM4MTgwNiAyNC4zMzY1IDAuNTEwNTAxIDI0LjQwMDggMC43MDM1NDQgMjQuNDAwOEMwLjc2Nzg5MSAyNC40MDA4IDAuODMyMjM5IDI0LjQwMDggMC44OTY1ODYgMjQuNDAwOEw3LjM5NTY5IDIyLjIxMzZDNy4zOTU2OSAyMi4yMTM2IDcuMzk1NjkgMjIuMjEzNiA3LjQ2MDAzIDIyLjIxMzZDNy41MjQzOCAyMi4yMTM2IDcuNTg4NzMgMjIuMTQ5MyA3LjU4ODczIDIyLjA4NUwyMC42NTEzIDkuMDI2MjZMMjIuODM5MSA2LjkwMzQxWk0xOC41Mjc4IDIuNTkzMzhDMTguOTc4MiAyLjE0MzA4IDE5LjYyMTcgMS44ODU3NiAyMC4yNjUyIDEuODg1NzZDMjAuOTA4NyAxLjg4NTc2IDIxLjU1MjEgMi4xNDMwOCAyMi4wMDI2IDIuNTkzMzhDMjIuOTY3OCAzLjU1ODMyIDIyLjk2NzggNS4xMDIyMSAyMi4wMDI2IDYuMTMxNDdMMjAuMjY1MiA3Ljg2ODM0TDE2LjcyNjEgNC4zMzAyNkwxOC41Mjc4IDIuNTkzMzhaTTEzLjc2NjEgNy4zNTM3MUwxNy4zMDUyIDEwLjg5MThMNy4yNjY5OSAyMC45MjcxTDMuNzkyMjIgMTcuNDUzM0wxMy43NjYxIDcuMzUzNzFaTTEuNjA0NDEgMjIuOTg1NkwzLjA4NDQgMTguNDgyNkw2LjA0NDM5IDIxLjQ0MTdMMS42MDQ0MSAyMi45ODU2Wk0xOC4wNzc0IDkuOTkxMTlMMTQuNTM4MyA2LjQ1MzExTDE1Ljg4OTYgNS4xMDIyTDE5LjQyODcgOC42NDAyOEwxOC4wNzc0IDkuOTkxMTlaXCIsXG4gICAgICBmaWxsOiBcImN1cnJlbnRjb2xvclwiXG4gICAgfVxuICApLFxuICAvKiBAX19QVVJFX18gKi8gYyhcbiAgICBcInBhdGhcIixcbiAgICB7XG4gICAgICBmaWxsUnVsZTogXCJldmVub2RkXCIsXG4gICAgICBjbGlwUnVsZTogXCJldmVub2RkXCIsXG4gICAgICBkOiBcIk0yMi45MDkyIDYuOTczNTVMMjIuOTA4MiA2Ljk3NDU5TDIwLjcyMTQgOS4wOTY0TDIwLjcyMDMgOS4wOTc0NEw3LjY4MjQ0IDIyLjEzMTVDNy42NzE4OSAyMi4xNzYzIDcuNjQ3MTggMjIuMjE1IDcuNjE4NjIgMjIuMjQzNkM3LjU4MDU3IDIyLjI4MTYgNy41MjQ0NSAyMi4zMTI4IDcuNDYwMDMgMjIuMzEyOEg3LjQxMjNMMC45MTI4MjcgMjQuNUgwLjcwNDI5OEMwLjU5NjIwNiAyNC41IDAuNTAwOTQzIDI0LjQ4MTkgMC40MTM5MjYgMjQuNDQzMkMwLjMyNzMzOSAyNC40MDQ3IDAuMjUzMTk3IDI0LjM0ODIgMC4xODI5OTUgMjQuMjc4QzAuMTAyNDI1IDI0LjE5NzQgMC4wNDY5NTIgMjQuMDgyNyAwLjAxOTc0MDMgMjMuOTY0OEMtMC4wMDc1NjY3MSAyMy44NDY1IC0wLjAwODc5Mjk4IDIzLjcxNDkgMC4wMzAzMzQ2IDIzLjU5NzVMMi4yMTMwNiAxNy4xMTU0VjE3LjA2NzlMMi4zMTIyMyAxNy4wNjc0VjE3LjEzMTdMMC4xMjQ0MTYgMjMuNjI4OUMwLjA2MDA2ODYgMjMuODIxOSAwLjEyNDQxNiAyNC4wNzkyIDAuMjUzMTExIDI0LjIwNzhDMC4zODE4MDYgMjQuMzM2NSAwLjUxMDUwMSAyNC40MDA4IDAuNzAzNTQ0IDI0LjQwMDhIMC44OTY1ODZMNy4zOTU2OSAyMi4yMTM2SDcuNDYwMDNDNy41MjQzOCAyMi4yMTM2IDcuNTg4NzMgMjIuMTQ5MyA3LjU4ODczIDIyLjA4NUwyMC42NTEzIDkuMDI2MjZMMjIuODM5MSA2LjkwMzQxQzI0LjI1NDcgNS40ODgxOCAyNC4yNTQ3IDMuMTcyMzQgMjIuODM5MSAxLjY5Mjc4QzIyLjEzMTMgMC45ODUxNTkgMjEuMjMwNCAwLjU5OTE4OSAyMC4yNjUyIDAuNTk5MTg5QzE5LjMgMC41OTkxODkgMTguMzM0OCAwLjk4NTE1OSAxNy42OTEzIDEuNjkyNzhMMi40NDA5MyAxNi45Mzg3QzIuNDE2MzUgMTYuOTYzMyAyLjQwMTE2IDE2Ljk4NzggMi4zODgxOCAxNy4wMDg4QzIuMzY3MTkgMTcuMDQyOCAyLjM1MiAxNy4wNjc0IDIuMzEyMjMgMTcuMDY3NFYxNi45NjgyQzIuMzA5OTUgMTYuOTY4MiAyLjMwMTc0IDE2Ljk2OTMgMi4yOTM1OCAxNi45NzVDMi4yOTA4OSAxNi45NzY5IDIuMjg5NDggMTYuOTc4NSAyLjI4OTUyIDE2Ljk3ODRDMi4yODk1NSAxNi45Nzg0IDIuMjkxMDIgMTYuOTc2NyAyLjI5NDA3IDE2Ljk3MjFDMi4yOTU2MiAxNi45Njk4IDIuMjk3NzEgMTYuOTY2NCAyLjMwMDM0IDE2Ljk2MjFDMi4zMTI2NiAxNi45NDE5IDIuMzM2NjYgMTYuOTAyNyAyLjM3MDgxIDE2Ljg2ODZMMTcuNjE5NSAxLjYyNDI4QzE4LjI4MzcgMC44OTQ5OTMgMTkuMjc1OSAwLjUwMDAxNSAyMC4yNjUyIDAuNTAwMDE1QzIxLjI1ODEgMC41MDAwMTUgMjIuMTgzOCAwLjg5NzQ0NyAyMi45MDkyIDEuNjIyNjRMMjIuOTEwOCAxLjYyNDJDMjQuMzYyMyAzLjE0MTIzIDI0LjM2NDQgNS41MTg3NCAyMi45MDkyIDYuOTczNTVaTTE4LjU5NzkgMi42NjM1MkwxOC41OTY2IDIuNjY0OEwxNi44Njc2IDQuMzMxNTVMMjAuMjY1MiA3LjcyODExTDIxLjkzMTMgNi4wNjI0NkMyMi44NjA5IDUuMDcwMDggMjIuODU3NCAzLjU4ODE2IDIxLjkzMjUgMi42NjM1MkMyMS41MDE0IDIuMjMyNTcgMjAuODgzNSAxLjk4NDk0IDIwLjI2NTIgMS45ODQ5NEMxOS42NDY5IDEuOTg0OTQgMTkuMDI5IDIuMjMyNTcgMTguNTk3OSAyLjY2MzUyWk0yMi4wMDI2IDYuMTMxNDdDMjIuOTY3OCA1LjEwMjIxIDIyLjk2NzggMy41NTgzMiAyMi4wMDI2IDIuNTkzMzhDMjEuNTUyMSAyLjE0MzA4IDIwLjkwODcgMS44ODU3NiAyMC4yNjUyIDEuODg1NzZDMTkuNjIxNyAxLjg4NTc2IDE4Ljk3ODIgMi4xNDMwOCAxOC41Mjc4IDIuNTkzMzhMMTYuNzI2MSA0LjMzMDI2TDIwLjI2NTIgNy44NjgzNEwyMi4wMDI2IDYuMTMxNDdaTTEzLjc2NjEgNy4zNTM3MUwzLjc5MjIyIDE3LjQ1MzNMNy4yNjY5OSAyMC45MjcxTDE3LjMwNTIgMTAuODkxOEwxMy43NjYxIDcuMzUzNzFaTTEzLjc2NjUgNy40OTQzOUwzLjkzMjA1IDE3LjQ1MjlMNy4yNjY5OSAyMC43ODY4TDE3LjE2NDkgMTAuODkxOEwxMy43NjY1IDcuNDk0MzlaTTEuNjA0NDEgMjIuOTg1Nkw2LjA0NDM5IDIxLjQ0MTdMMy4wODQ0IDE4LjQ4MjZMMS42MDQ0MSAyMi45ODU2Wk0xLjc2MTIzIDIyLjgyNjFMNS44NjIzOSAyMS40TDMuMTI4MjkgMTguNjY2N0wxLjc2MTIzIDIyLjgyNjFaTTE4LjA3NzQgOS45OTExOUwxNC41MzgzIDYuNDUzMTFMMTUuODg5NiA1LjEwMjJMMTkuNDI4NyA4LjY0MDI4TDE4LjA3NzQgOS45OTExOVpNMTkuMjg4NCA4LjY0MDI4TDE4LjA3NzQgOS44NTA5NkwxNC42Nzg1IDYuNDUzMTFMMTUuODg5NiA1LjI0MjQzTDE5LjI4ODQgOC42NDAyOFpcIixcbiAgICAgIGZpbGw6IFwiY3VycmVudGNvbG9yXCJcbiAgICB9XG4gIClcbl0gfSksICRoID0gKCkgPT4gLyogQF9fUFVSRV9fICovIGMoXCJzdmdcIiwgeyB2aWV3Qm94OiBcIjAgMCA0OCA0OFwiLCBmaWxsOiBcIm5vbmVcIiwgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiwgY2hpbGRyZW46IC8qIEBfX1BVUkVfXyAqLyBjKFxuICBcInBhdGhcIixcbiAge1xuICAgIGQ6IFwiTTEzLjc1MDkgMS4yMzIzQzE1LjM4NzUgLTAuNDEwNzY5IDE4LjA0MDggLTAuNDEwNzY0IDE5LjY3NzQgMS4yMzIzQzIxLjMxMzggMi44NzUzNiAyMS4zMTM4IDUuNTM5MjkgMTkuNjc3NCA3LjE4MjM3TDE5LjIxMiA3LjY0OTZMMTkuMzU5MSA3Ljc5NzI3QzIwLjY5NzkgOS4xNDE1MyAyMC42OTc5IDExLjMyMSAxOS4zNTkxIDEyLjY2NTNMMTYuODkxNyAxNS4xNDI2QzE2LjU1NjkgMTUuNDc4NiAxNi4wMTQyIDE1LjQ3ODYgMTUuNjc5NCAxNS4xNDI2QzE1LjM0NDcgMTQuODA2NSAxNS4zNDQ3IDE0LjI2MTYgMTUuNjc5NCAxMy45MjU2TDE4LjE0NjkgMTEuNDQ4M0MxOC44MTYzIDEwLjc3NjIgMTguODE2MyA5LjY4NjQxIDE4LjE0NjkgOS4wMTQyN0wxNy45OTk4IDguODY2Nkw4LjMyMDMgMTguNTg0N0M4LjIxMDQ1IDE4LjY5NSA4LjA3MjgxIDE4Ljc3MzMgNy45MjIxMSAxOC44MTFMMS4wNjUwNCAyMC41MzIxQzAuNzYxNTQ0IDIwLjYwODQgMC40NDA4MDUgMjAuNTEyNSAwLjIyODI1MyAyMC4yODIxQzAuMDE1NzAwNiAyMC4wNTE2IC0wLjA1NDkyNzEgMTkuNzIzMiAwLjA0NDAwMzIgMTkuNDI1M0wyLjE4Njg0IDEyLjk3MUMyLjIyODkyIDEyLjg0NDMgMi4yOTk4MSAxMi43MjkxIDIuMzkzOSAxMi42MzQ3TDEzLjc1MDkgMS4yMzIzWk0xOC40NjUyIDIuNDQ5MzFDMTcuNDk4IDEuNDc4MzggMTUuOTMwMiAxLjQ3ODM4IDE0Ljk2MzEgMi40NDkzMUwzLjc0OTE1IDEzLjcwOEwyLjE2NDA1IDE4LjQ4MjNMNy4yNzYwMiAxNy4xOTkyTDE4LjQ2NTIgNS45NjUzNUMxOS40MzIyIDQuOTk0NDIgMTkuNDMyMiAzLjQyMDI0IDE4LjQ2NTIgMi40NDkzMVpNNi43OTk5MSAyNEM0LjY4MjczIDI0IDMuMDE1NjkgMjMuMDI1IDEuOTA1OCAyMi4wOTUyTDQuMTA4MSAyMS41NDI0QzQuODcxNSAyMS45NzIgNS43NzU2OSAyMi4yNzg5IDYuNzk5OTEgMjIuMjc4OUM3LjQ5NDg2IDIyLjI3ODkgOC4yMTE0MiAyMS45OTY2IDguOTc1NjUgMjEuNDkyNUM5Ljc0MTQ5IDIwLjk4NzIgMTAuNDgxMSAyMC4zMTAxIDExLjIyNzkgMTkuNjA3MkwxMS40MjI0IDE5LjQyMzlDMTIuMDgxMyAxOC44MDIxIDEyLjc2NjUgMTguMTU1NSAxMy40MjE1IDE3LjcwODNDMTQuMTIxIDE3LjIzMDcgMTUuMDQ4IDE2Ljc5NyAxNi4wMjE5IDE3LjE3M0MxNi42NjUzIDE3LjQyMTYgMTcuMDgzIDE3Ljg4MDIgMTcuMzc3NyAxOC40NDEyQzE3LjY1NCAxOC45NjY2IDE3Ljg0NDMgMTkuNjI1NSAxOC4wMjk1IDIwLjM0MTZDMTguMTE0MSAyMC42NjkgMTguMjU3NiAyMC45ODUzIDE4LjQyMiAyMS4xOTkyQzE4LjUwMjEgMjEuMzAzNSAxOC41NzEyIDIxLjM2MjYgMTguNjE5MyAyMS4zOTIzQzE4LjY2MTcgMjEuNDE4NSAxOC42ODA1IDIxLjQxODUgMTguNjg1MyAyMS40MTg1QzE4Ljg5NDMgMjEuNDE4NSAxOS4yNTI5IDIxLjI3NjUgMTkuNzY1MyAyMC45MjY0QzIwLjA4MzIgMjAuNzA5MiAyMC4zNTQ1IDIwLjQ5MTkgMjAuNjI2MiAyMC4yNzQzQzIwLjc5NDggMjAuMTM5NCAyMC45NjM0IDIwLjAwNDEgMjEuMTQzNCAxOS44NjlDMjEuNjIxNSAxOS41MDk2IDIyLjAzNTkgMTkuMjY4NyAyMi4zMzkzIDE5LjExNDZDMjIuNDkwOCAxOS4wMzc1IDIyLjYxNSAxOC45ODIxIDIyLjcwNTUgMTguOTQ0NkMyMi43NTA3IDE4LjkyNTggMjIuNzg3NiAxOC45MTE1IDIyLjgxNTQgMTguOTAxTDIyLjg1MDIgMTguODg4NUwyMi44NjIzIDE4Ljg4NDJMMjIuODY3IDE4Ljg4MjZMMjIuODY5IDE4Ljg4MTlDMjIuODY5IDE4Ljg4MTkgMjIuODcwNyAxOC44ODEyIDIzLjE0MjYgMTkuNjk3NEwyMi44NzA3IDE4Ljg4MTJDMjMuMzE5NyAxOC43MzA1IDIzLjgwNTMgMTguOTczNyAyMy45NTU1IDE5LjQyNDRDMjQuMTA1IDE5Ljg3MzMgMjMuODY1NSAyMC4zNTg1IDIzLjQyMDMgMjAuNTExNUwyMy40MTM2IDIwLjUxNDFDMjMuNDA0NCAyMC41MTc1IDIzLjM4NjQgMjAuNTI0NCAyMy4zNjAzIDIwLjUzNTJDMjMuMzA4MiAyMC41NTY3IDIzLjIyNCAyMC41OTM5IDIzLjExMzEgMjAuNjUwNEMyMi44OTEzIDIwLjc2MjkgMjIuNTYyNyAyMC45NTIzIDIyLjE3MDUgMjEuMjQ2OUMyMi4wNyAyMS4zMjIzIDIxLjkzODcgMjEuNDI2OSAyMS43ODg5IDIxLjU0NjJDMjEuNDc4MSAyMS43OTM5IDIxLjA4NzUgMjIuMTA0OSAyMC43Mjk4IDIyLjM0OTNDMjAuMTk2OCAyMi43MTM1IDE5LjQ1ODYgMjMuMTM5NiAxOC42ODU1IDIzLjEzOTZDMTcuOTM4OCAyMy4xMzk2IDE3LjM5NzggMjIuNjg0IDE3LjA2NDcgMjIuMjUwNUMxNi43MjQ3IDIxLjgwODIgMTYuNDk2NyAyMS4yNjQgMTYuMzcwMiAyMC43NzQxQzE2LjE4MjIgMjAuMDQ3IDE2LjAzMzIgMTkuNTcwNyAxNS44NjE2IDE5LjI0NDJDMTUuNzA4NSAxOC45NTMgMTUuNTcwMiAxOC44NDI3IDE1LjQwNjQgMTguNzc5NEMxNS4yNjU5IDE4LjcyNTEgMTQuOTg1OCAxOC43MjE3IDE0LjM4NTQgMTkuMTMxNUMxMy44NDg3IDE5LjQ5NzkgMTMuMjYzOSAyMC4wNDkgMTIuNTcxNiAyMC43MDE1TDEyLjQwMDQgMjAuODYyOUMxMS42NjE1IDIxLjU1ODQgMTAuODIyNiAyMi4zMzM0IDkuOTE2OTggMjIuOTMwOEM5LjAwOTc5IDIzLjUyOTMgNy45NjIxIDI0IDYuNzk5OTEgMjRaXCIsXG4gICAgZmlsbDogXCJjdXJyZW50Q29sb3JcIlxuICB9XG4pIH0pLCBlTyA9ICgpID0+IC8qIEBfX1BVUkVfXyAqLyBjKFwic3ZnXCIsIHsgdmlld0JveDogXCIwIDAgMjYgMjZcIiwgZmlsbDogXCJub25lXCIsIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsIGNoaWxkcmVuOiAvKiBAX19QVVJFX18gKi8gYyhcbiAgXCJwYXRoXCIsXG4gIHtcbiAgICBmaWxsUnVsZTogXCJldmVub2RkXCIsXG4gICAgY2xpcFJ1bGU6IFwiZXZlbm9kZFwiLFxuICAgIGQ6IFwiTTI0LjgyNzggMS4xNzcwMUMyNC43NTg4IDEuMTA0NjYgMjQuNjc1OSAxLjA0NzA0IDI0LjU4NCAxLjAwNzYzQzI0LjQ5MTggMC45NjgwODUgMjQuMzkyNiAwLjk0NzY5MyAyNC4yOTIzIDAuOTQ3NjkzQzI0LjE5MTkgMC45NDc2OTMgMjQuMDkyNyAwLjk2ODA4NSAyNC4wMDA1IDEuMDA3NjNDMjMuOTA4NSAxLjA0NzEgMjMuODI1NSAxLjEwNDgyIDIzLjc1NjQgMS4xNzczTDEuMTc3OCAyMy43NjZDMS4xMDUzMyAyMy44MzUgMS4wNDcxNSAyMy45MTg1IDEuMDA3NjkgMjQuMDEwNEMwLjk2ODE0NiAyNC4xMDI2IDAuOTQ3NzU0IDI0LjIwMTkgMC45NDc3NTQgMjQuMzAyMkMwLjk0Nzc1NCAyNC40MDI1IDAuOTY4MTQ2IDI0LjUwMTggMS4wMDc2OSAyNC41OTM5QzEuMDQ3MTMgMjQuNjg1OSAxLjEwNDc5IDI0Ljc2ODggMS4xNzcyIDI0LjgzNzlDMS4yNDU2NSAyNC45MDczIDEuMzI3NSAyNC45NjIxIDEuNDE3NzcgMjQuOTk4OUMxLjUwODExIDI1LjAzNTggMS42MDUwMSAyNS4wNTM5IDEuNzAyNTcgMjUuMDUyMkMxLjgwMjMxIDI1LjA1MjcgMS45MDExNCAyNS4wMzMxIDEuOTkzMTEgMjQuOTk0NUMyLjA4NTE3IDI0Ljk1NTggMi4xNjg0NSAyNC44OTg5IDIuMjM3OTQgMjQuODI3MkwyNC44MjcxIDIuMjM4MDZDMjQuODk4IDIuMTY5MTMgMjQuOTU0NiAyLjA4NjQ3IDI0Ljk5MzEgMS45OTUzOEMyNS4wMzE3IDEuOTA0MTkgMjUuMDUxNSAxLjgwNjIgMjUuMDUxNSAxLjcwNzE5QzI1LjA1MTUgMS42MDgxOSAyNS4wMzE3IDEuNTEwMTkgMjQuOTkzMSAxLjQxOTAxQzI0Ljk1NDcgMS4zMjgxMiAyNC44OTg1IDEuMjQ1ODQgMjQuODI3OCAxLjE3NzAxWk0xMC4zNjM1IDEyLjAzMjVDOS4zNjg1NCAxMi42OTczIDguMTk4ODMgMTMuMDUyMSA3LjAwMjI2IDEzLjA1MjFDNS4zOTc3IDEzLjA1MjEgMy44NTg4NSAxMi40MTQ3IDIuNzI0MjYgMTEuMjgwMUMxLjU4OTY2IDEwLjE0NTUgMC45NTIyNTUgOC42MDY2NSAwLjk1MjI1NSA3LjAwMjA5QzAuOTUyMjU1IDUuODA1NTEgMS4zMDcwOCA0LjYzNTgxIDEuOTcxODYgMy42NDA4OUMyLjYzNjY1IDIuNjQ1OTcgMy41ODE1MyAxLjg3MDUzIDQuNjg3MDIgMS40MTI2MkM1Ljc5MjUxIDAuOTU0NzA5IDcuMDA4OTcgMC44MzQ4OTggOC4xODI1NSAxLjA2ODM0QzkuMzU2MTQgMS4zMDE3OCAxMC40MzQxIDEuODc3OTkgMTEuMjgwMyAyLjcyNDA5QzEyLjEyNjQgMy41NzAyIDEyLjcwMjYgNC42NDgyMSAxMi45MzYgNS44MjE3OUMxMy4xNjk0IDYuOTk1MzggMTMuMDQ5NiA4LjIxMTgzIDEyLjU5MTcgOS4zMTczM0MxMi4xMzM4IDEwLjQyMjggMTEuMzU4NCAxMS4zNjc3IDEwLjM2MzUgMTIuMDMyNVpNOS41MzAxIDMuMjE4OUM4Ljc4MTg2IDIuNzE4OTQgNy45MDIxNiAyLjQ1MjA5IDcuMDAyMjYgMi40NTIwOUM1Ljc5NTUyIDIuNDUyMDkgNC42MzgyMSAyLjkzMTQ2IDMuNzg0OTIgMy43ODQ3NUMyLjkzMTYzIDQuNjM4MDQgMi40NTIyNSA1Ljc5NTM2IDIuNDUyMjUgNy4wMDIwOUMyLjQ1MjI1IDcuOTAyIDIuNzE5MTEgOC43ODE2OSAzLjIxOTA3IDkuNTI5OTNDMy43MTkwMyAxMC4yNzgyIDQuNDI5NjQgMTAuODYxNCA1LjI2MTA1IDExLjIwNTdDNi4wOTI0NSAxMS41NTAxIDcuMDA3MyAxMS42NDAyIDcuODg5OTIgMTEuNDY0N0M4Ljc3MjUzIDExLjI4OTEgOS41ODMyNiAxMC44NTU4IDEwLjIxOTYgMTAuMjE5NEMxMC44NTU5IDkuNTgzMSAxMS4yODkzIDguNzcyMzcgMTEuNDY0OCA3Ljg4OTc1QzExLjY0MDQgNy4wMDcxNCAxMS41NTAzIDYuMDkyMjggMTEuMjA1OSA1LjI2MDg4QzEwLjg2MTUgNC40Mjk0OCAxMC4yNzgzIDMuNzE4ODYgOS41MzAxIDMuMjE4OVpNMTUuNjQxMSAxMy45NzE3QzE2LjYzNiAxMy4zMDY5IDE3LjgwNTcgMTIuOTUyMSAxOS4wMDIzIDEyLjk1MjFDMjAuNjA2OCAxMi45NTIxIDIyLjE0NTcgMTMuNTg5NSAyMy4yODAzIDE0LjcyNDFDMjQuNDE0OCAxNS44NTg3IDI1LjA1MjMgMTcuMzk3NSAyNS4wNTIzIDE5LjAwMjFDMjUuMDUyMyAyMC4xOTg3IDI0LjY5NzQgMjEuMzY4NCAyNC4wMzI2IDIyLjM2MzNDMjMuMzY3OSAyMy4zNTgyIDIyLjQyMyAyNC4xMzM2IDIxLjMxNzUgMjQuNTkxNkMyMC4yMTIgMjUuMDQ5NSAxOC45OTU1IDI1LjE2OTMgMTcuODIyIDI0LjkzNThDMTYuNjQ4NCAyNC43MDI0IDE1LjU3MDQgMjQuMTI2MiAxNC43MjQzIDIzLjI4MDFDMTMuODc4MiAyMi40MzQgMTMuMzAxOSAyMS4zNTYgMTMuMDY4NSAyMC4xODI0QzEyLjgzNTEgMTkuMDA4OCAxMi45NTQ5IDE3Ljc5MjMgMTMuNDEyOCAxNi42ODY5QzEzLjg3MDcgMTUuNTgxNCAxNC42NDYxIDE0LjYzNjUgMTUuNjQxMSAxMy45NzE3Wk0xNi40NzQ0IDIyLjc4NTNDMTcuMjIyNyAyMy4yODUyIDE4LjEwMjQgMjMuNTUyMSAxOS4wMDIzIDIzLjU1MjFDMjAuMjA5IDIzLjU1MjEgMjEuMzY2MyAyMy4wNzI3IDIyLjIxOTYgMjIuMjE5NEMyMy4wNzI5IDIxLjM2NjEgMjMuNTUyMyAyMC4yMDg4IDIzLjU1MjMgMTkuMDAyMUMyMy41NTIzIDE4LjEwMjIgMjMuMjg1NCAxNy4yMjI1IDIyLjc4NTQgMTYuNDc0MkMyMi4yODU1IDE1LjcyNiAyMS41NzQ5IDE1LjE0MjggMjAuNzQzNSAxNC43OTg0QzE5LjkxMjEgMTQuNDU0MSAxOC45OTcyIDE0LjM2NCAxOC4xMTQ2IDE0LjUzOTVDMTcuMjMyIDE0LjcxNTEgMTYuNDIxMyAxNS4xNDg0IDE1Ljc4NDkgMTUuNzg0OEMxNS4xNDg2IDE2LjQyMTEgMTQuNzE1MiAxNy4yMzE4IDE0LjUzOTcgMTguMTE0NEMxNC4zNjQxIDE4Ljk5NyAxNC40NTQyIDE5LjkxMTkgMTQuNzk4NiAyMC43NDMzQzE1LjE0MyAyMS41NzQ3IDE1LjcyNjIgMjIuMjg1MyAxNi40NzQ0IDIyLjc4NTNaXCIsXG4gICAgZmlsbDogXCJjdXJyZW50Y29sb3JcIlxuICB9XG4pIH0pLCB0TyA9ICgpID0+IC8qIEBfX1BVUkVfXyAqLyBlMShcInN2Z1wiLCB7IHZpZXdCb3g6IFwiMCAwIDI0IDI0XCIsIGZpbGw6IFwibm9uZVwiLCB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLCBjaGlsZHJlbjogW1xuICAvKiBAX19QVVJFX18gKi8gYyhcbiAgICBcInBhdGhcIixcbiAgICB7XG4gICAgICBmaWxsUnVsZTogXCJldmVub2RkXCIsXG4gICAgICBjbGlwUnVsZTogXCJldmVub2RkXCIsXG4gICAgICBkOiBcIk0yMC42MzY5IDMuMjE4NjRDMjIuNzIyMiA1LjI3MDE4IDIzLjkyMzUgOC4wNTU3MSAyMy45ODQ2IDEwLjk4MVYxMS4zNTE4SDEyLjYyNzdWMEgxMi44MjI4QzE1Ljc0NzUgMC4wMTIxNTM0IDE4LjU1MTYgMS4xNjcwOSAyMC42MzY5IDMuMjE4NjRaTTE0LjExMDggOS44NzgxM0gyMi40MTM4QzIyLjExODggNy43NzkzOSAyMS4xNDkxIDUuODMzODkgMTkuNjUxMSA0LjMzNTMyQzE4LjE1MzIgMi44MzY3NiAxNi4yMDg1IDEuODY2NjMgMTQuMTEwOCAxLjU3MTQ5VjkuODc4MTNaXCIsXG4gICAgICBmaWxsOiBcImN1cnJlbnRjb2xvclwiXG4gICAgfVxuICApLFxuICAvKiBAX19QVVJFX18gKi8gYyhcbiAgICBcInBhdGhcIixcbiAgICB7XG4gICAgICBmaWxsUnVsZTogXCJldmVub2RkXCIsXG4gICAgICBjbGlwUnVsZTogXCJldmVub2RkXCIsXG4gICAgICBkOiBcIk0xMS4wMDEzIDEuNjY4NTZIMTEuMzcyMVYxMi42NDk3SDIyLjMzODdWMTIuODM1MUMyMi4zMzg0IDE1LjAzNiAyMS42ODggMTcuMTg3OSAyMC40NjkxIDE5LjAyMDJDMTkuMjUwMiAyMC44NTI1IDE3LjUxNzMgMjIuMjgzNSAxNS40ODc5IDIzLjEzMzZDMTMuNDU4NiAyMy45ODM2IDExLjIyMzQgMjQuMjE0NyA5LjA2MzE5IDIzLjc5NzlDNi45MDI5MiAyMy4zODEyIDQuOTEzOTggMjIuMzM1IDMuMzQ2MTkgMjAuNzkwOEMxLjc3ODQ2IDE5LjI0NjggMC43MDE3NzcgMTcuMjczNSAwLjI1MTQ1NCAxNS4xMTkyQy0wLjE5ODg2OSAxMi45NjQ3IC0wLjAwMjcwOTExIDEwLjcyNTQgMC44MTUyMjEgOC42ODIxNkMxLjYzMzIxIDYuNjM4OTYgMy4wMzY0NyA0Ljg4MzE0IDQuODQ4NzggMy42MzUyN0M2LjY2MTAzIDIuMzg3NCA4LjgwMTUyIDEuNzAzMjMgMTEuMDAxMyAxLjY2ODU2Wk05Ljg5ODggMTQuMTIzM1YzLjI0MDA0QzguMTEwMjUgMy40Nzk5IDYuNDI0MzEgNC4yMTUxOCA1LjAzMTM2IDUuMzYyOTZDMy42Mzg0NiA2LjUxMDc1IDIuNTk0IDguMDI1MTYgMi4wMTU5NCA5LjczNTM0QzEuNDM3ODggMTEuNDQ1NSAxLjM0OTI3IDEzLjI4MzMgMS43NjAwNSAxNS4wNDEzQzIuMTcwOSAxNi43OTkyIDMuMDY0NzUgMTguNDA3MyA0LjM0MDgxIDE5LjY4MzlDNS42MTY4IDIwLjk2MDIgNy4yMjQxNCAyMS44NTQ2IDguOTgxMzYgMjIuMjY1N0MxMC43Mzg1IDIyLjY3NjUgMTIuNTc1NiAyMi41ODc4IDE0LjI4NSAyMi4wMDk1QzE1Ljk5NDUgMjEuNDMxNCAxNy41MDg0IDIwLjM4NjQgMTguNjU1NiAxOC45OTI4QzE5LjgwMjkgMTcuNTk5NSAyMC41Mzc5IDE1LjkxMjcgMjAuNzc3NyAxNC4xMjMzSDkuODk4OFpcIixcbiAgICAgIGZpbGw6IFwiY3VycmVudGNvbG9yXCJcbiAgICB9XG4gIClcbl0gfSksIG9PID0gKCkgPT4gLyogQF9fUFVSRV9fICovIGUxKFwic3ZnXCIsIHsgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiwgdmlld0JveDogXCIwIDAgMjQgMjRcIiwgZmlsbDogXCJub25lXCIsIGNoaWxkcmVuOiBbXG4gIC8qIEBfX1BVUkVfXyAqLyBjKFwicGF0aFwiLCB7IGZpbGxSdWxlOiBcImV2ZW5vZGRcIiwgY2xpcFJ1bGU6IFwiZXZlbm9kZFwiLCBkOiBcIk0yMC42MzY5IDMuMjE4NjRDMjIuNzIyMiA1LjI3MDE4IDIzLjkyMzUgOC4wNTU3MSAyMy45ODQ2IDEwLjk4MVYxMS4zNTE4SDEyLjYyNzdWMEgxMi44MjI4QzE1Ljc0NzUgMC4wMTIxNTM0IDE4LjU1MTYgMS4xNjcwOSAyMC42MzY5IDMuMjE4NjRaXCIsIGZpbGw6IFwiY3VycmVudGNvbG9yXCIgfSksXG4gIC8qIEBfX1BVUkVfXyAqLyBjKFwicGF0aFwiLCB7IGZpbGxSdWxlOiBcImV2ZW5vZGRcIiwgY2xpcFJ1bGU6IFwiZXZlbm9kZFwiLCBkOiBcIk0xMS4wMDEzIDEuNjY4NTZIMTEuMzcyMVYxMi42NDk3SDIyLjMzODdWMTIuODM1MUMyMi4zMzg0IDE1LjAzNiAyMS42ODggMTcuMTg3OSAyMC40NjkxIDE5LjAyMDJDMTkuMjUwMiAyMC44NTI1IDE3LjUxNzMgMjIuMjgzNSAxNS40ODc5IDIzLjEzMzZDMTMuNDU4NiAyMy45ODM2IDExLjIyMzQgMjQuMjE0NyA5LjA2MzE5IDIzLjc5NzlDNi45MDI5MiAyMy4zODEyIDQuOTEzOTggMjIuMzM1IDMuMzQ2MTkgMjAuNzkwOEMxLjc3ODQ2IDE5LjI0NjggMC43MDE3NzcgMTcuMjczNSAwLjI1MTQ1NCAxNS4xMTkyQy0wLjE5ODg2OSAxMi45NjQ3IC0wLjAwMjcwOTA5IDEwLjcyNTQgMC44MTUyMjEgOC42ODIxNkMxLjYzMzIxIDYuNjM4OTYgMy4wMzY0NyA0Ljg4MzE0IDQuODQ4NzggMy42MzUyN0M2LjY2MTAzIDIuMzg3NCA4LjgwMTUyIDEuNzAzMjMgMTEuMDAxMyAxLjY2ODU2WlwiLCBmaWxsOiBcImN1cnJlbnRjb2xvclwiIH0pXG5dIH0pLCByTyA9ICgpID0+IC8qIEBfX1BVUkVfXyAqLyBjKFwic3ZnXCIsIHsgdmlld0JveDogXCIwIDAgMjQgMjRcIiwgZmlsbDogXCJub25lXCIsIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsIGNoaWxkcmVuOiAvKiBAX19QVVJFX18gKi8gYyhcbiAgXCJwYXRoXCIsXG4gIHtcbiAgICBmaWxsUnVsZTogXCJldmVub2RkXCIsXG4gICAgY2xpcFJ1bGU6IFwiZXZlbm9kZFwiLFxuICAgIGQ6IFwiTTI0IDEyQzI0IDEyLjUzNDIgMjMuNjM2IDEzLjAyMyAyMy4wNTg3IDEzLjI2MzlMMi40ODcyNyAyMS44NDc5QzEuOTU1ODQgMjIuMDY5NiAxLjMyMzE3IDIyLjA0NzcgMC44MTYwNDkgMjEuNzkwMUMwLjMwODkzIDIxLjUzMjQgLTguMzM4M2UtMDcgMjEuMDc1OCAtOC4xMjMzM2UtMDcgMjAuNTg0TC02LjE4OTUxZS0wOCAzLjQxNTk5Qy00LjAzOTgxZS0wOCAyLjkyNDIgMC4zMDg5MzEgMi40Njc2MyAwLjgxNjA1IDIuMjA5OTRDMS4zMjMxNyAxLjk1MjI2IDEuOTU1ODQgMS45MzAzNyAyLjQ4NzI3IDIuMTUyMTJMMjMuMDU4NyAxMC43MzYxQzIzLjYzNiAxMC45NzcgMjQgMTEuNDY1OCAyNCAxMlpNMjIuNzk2MiAxMkwxLjQzODIzIDMuMTcwOTFMMS40MzgyMyAyMC42OTIzTDIyLjc5NjIgMTJaXCIsXG4gICAgZmlsbDogXCJjdXJyZW50Q29sb3JcIlxuICB9XG4pIH0pLCBuTyA9ICgpID0+IC8qIEBfX1BVUkVfXyAqLyBjKFwic3ZnXCIsIHsgdmlld0JveDogXCIwIDAgMjQgMjRcIiwgZmlsbDogXCJub25lXCIsIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsIGNoaWxkcmVuOiAvKiBAX19QVVJFX18gKi8gYyhcbiAgXCJwYXRoXCIsXG4gIHtcbiAgICBkOiBcIk0wLjcxMDUyNiAxMi43NDc1SDExLjI4OTVWMjMuMjkxOEMxMS4yODk1IDIzLjY4NTIgMTEuNjA1MyAyNCAxMiAyNEMxMi4zOTQ3IDI0IDEyLjcxMDUgMjMuNjg1MiAxMi43MTA1IDIzLjI5MThWMTIuNzQ3NUgyMy4yODk1QzIzLjY4NDIgMTIuNzQ3NSAyNCAxMi40MzI4IDI0IDEyLjAzOTNDMjQgMTEuNjQ1OSAyMy42ODQyIDExLjMzMTEgMjMuMjg5NSAxMS4zMzExSDEyLjc4OTVWMC43MDgxOTZDMTIuNzg5NSAwLjMxNDc1NCAxMi40NzM3IDAgMTIuMDc4OSAwQzExLjY4NDIgMCAxMS4zNjg0IDAuMzE0NzU0IDExLjM2ODQgMC43MDgxOTZWMTEuMjUyNUgwLjcxMDUyNkMwLjMxNTc4OSAxMS4yNTI1IDAgMTEuNTY3MiAwIDExLjk2MDdDMCAxMi4zNTQxIDAuMzE1Nzg5IDEyLjc0NzUgMC43MTA1MjYgMTIuNzQ3NVpcIixcbiAgICBmaWxsOiBcImN1cnJlbnRDb2xvclwiXG4gIH1cbikgfSksIGlPID0gKCkgPT4gLyogQF9fUFVSRV9fICovIGMoXCJzdmdcIiwgeyB2aWV3Qm94OiBcIjAgMCAyNCAyNFwiLCBmaWxsOiBcIm5vbmVcIiwgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiwgY2hpbGRyZW46IC8qIEBfX1BVUkVfXyAqLyBjKFxuICBcInBhdGhcIixcbiAge1xuICAgIGZpbGxSdWxlOiBcImV2ZW5vZGRcIixcbiAgICBjbGlwUnVsZTogXCJldmVub2RkXCIsXG4gICAgZDogXCJNMC45OTAyNTEgMTMuMjQ2N0wwLjk5MDIzNCAxMy4yNDU0QzAuOTkwMjQzIDEwLjExMzIgMi4zNzYwNyA3LjE4NjMgNC43MzAxIDUuMTQ1MDdMNC43MzcyMiA1LjEzODg5QzUuMDQ2NTYgNC45MTA4OSA1LjUzNjQyIDQuODk0MDcgNS43OTI4NCA1LjIzMDA2QzYuMDI0OTggNS41MzQyNCA2LjA0Mjk5IDYuMDE2MDEgNS43MDQ4MyA2LjI2OTU2QzMuNjc3MjEgOC4wNjQ3OSAyLjUyOTMzIDEwLjU4OTEgMi41MjkzMyAxMy4yNDU0QzIuNTI5MzMgMTguMzYxMSA2Ljc4OTUyIDIyLjU1MDcgMTIuMDAwMiAyMi41NTA3QzE3LjIxMDggMjIuNTUwNyAyMS40NzEgMTguMzYxMSAyMS40NzEgMTMuMjQ1NEMyMS40NzEgMTAuNTg5MSAyMC4zMjMxIDguMDY0NzggMTguMjk1NSA2LjI2OTU2QzE3Ljk1NzMgNi4wMTYwMSAxNy45NzUzIDUuNTM0MjQgMTguMjA3NCA1LjIzMDA2QzE4LjQ2MzkgNC44OTQwNyAxOC45NTM2IDQuOTExMTkgMTkuMjYyOSA1LjEzOTE5TDE5LjI3MiA1LjE0NTk0QzIxLjYyNDEgNy4yNTM0OSAyMy4wMSAxMC4xNzk4IDIzLjAxIDEzLjI0NTRDMjMuMDEgMTkuMTY5NCAxOC4wOTE2IDI0IDEyLjA2ODYgMjRDNS45Nzc0MSAyNCAxLjA1OTUzIDE5LjE2OTkgMC45OTAyNTEgMTMuMjQ2N1pNMTEuMzMzMyAwLjcyNDYyOUMxMS4zMzMzIDAuMzIwNTYgMTEuNjYyMyAwIDEyLjA2ODMgMEMxMi40NzQzIDAgMTIuODAzMiAwLjMyMDU2IDEyLjgwMzIgMC43MjQ2MjlWOC4yNjM3NEMxMi44MDMyIDguNjY3ODEgMTIuNDc0MyA4Ljk4ODM3IDEyLjA2ODMgOC45ODgzN0MxMS42NjIzIDguOTg4MzcgMTEuMzMzMyA4LjY2NzgxIDExLjMzMzMgOC4yNjM3NFYwLjcyNDYyOVpcIixcbiAgICBmaWxsOiBcImN1cnJlbnRDb2xvclwiXG4gIH1cbikgfSksIGFPID0gKCkgPT4gLyogQF9fUFVSRV9fICovIGMoXCJzdmdcIiwgeyB2aWV3Qm94OiBcIjAgMCAyNCAyNFwiLCBmaWxsOiBcIm5vbmVcIiwgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiwgY2hpbGRyZW46IC8qIEBfX1BVUkVfXyAqLyBjKFxuICBcInBhdGhcIixcbiAge1xuICAgIGZpbGxSdWxlOiBcImV2ZW5vZGRcIixcbiAgICBjbGlwUnVsZTogXCJldmVub2RkXCIsXG4gICAgZDogXCJNMTguMzA5NCA3LjEzNzg4SDIzLjQxMTFDMjMuNzM3NyA3LjEzNzg4IDI0IDcuMzk3NDUgMjQgNy43MjIzOVYxOS4wN0MyNCAxOS4zOTQ5IDIzLjczNzcgMTkuNjU0NSAyMy40MTExIDE5LjY1NDVIMTguMzA5NFYyMS45MjE3QzE4LjMwOTQgMjIuMjQ2NyAxOC4wNDcyIDIyLjUwNjIgMTcuNzIwNSAyMi41MDYySDYuMjc5NDZDNS45NTI4NCAyMi41MDYyIDUuNjkwNTggMjIuMjQ2NyA1LjY5MDU4IDIxLjkyMTdWMTkuNjU0NUgwLjU4ODg3OEMwLjI2MjI1NiAxOS42NTQ1IDAgMTkuMzk0OSAwIDE5LjA3VjcuNzIyMzlDMCA3LjM5NzQ1IDAuMjYyMjU2IDcuMTM3ODggMC41ODg4NzggNy4xMzc4OEg1LjY5MDU4VjIuMDc4M0M1LjY5MDU4IDEuNzUzMzYgNS45NTI4NCAxLjQ5Mzc5IDYuMjc5NDYgMS40OTM3OUgxNy43MjA1QzE4LjA0NzIgMS40OTM3OSAxOC4zMDk0IDEuNzUzMzYgMTguMzA5NCAyLjA3ODNWNy4xMzc4OFpNNi44NjgzNyA3LjEzNzg4SDE3LjEzMTZWMi42NjI3OUg2Ljg2ODM3VjcuMTM3ODhaTTE3LjA3MTcgMjEuMzM3MlYxNi44NjIxSDYuODA4NDVWMjEuMzM3MkgxNy4wNzE3Wk0yMi44MjIyIDguMzA2ODhIMS4xNzc3OVYxOC40ODU1SDUuNjkwNThWMTYuMjE4MkM1LjY5MDU4IDE1Ljg5MzMgNS45NTI4NCAxNS42MzM3IDYuMjc5NDYgMTUuNjMzN0gxNy43MjA1QzE4LjA0NzIgMTUuNjMzNyAxOC4zMDk0IDE1Ljg5MzMgMTguMzA5NCAxNi4yMTgyVjE4LjQ4NTVIMjIuODIyMlY4LjMwNjg4Wk0yLjc1NTQ5IDExLjk5OTlDMi43NTU0OSAxMC45MDI2IDMuNjc2NjQgOS45ODk1NyA0Ljc4MTk0IDkuOTg5NTdDNS45NDgxMiA5Ljk4OTU3IDYuODA4MzkgMTAuOTAzNiA2LjgwODM5IDExLjk5OTlDNi44MDgzOSAxMy4wOTcxIDUuODg3MjMgMTQuMDEwMiA0Ljc4MTk0IDE0LjAxMDJDMy42NzY2NCAxNC4wMTAyIDIuNzU1NDkgMTMuMDk3MSAyLjc1NTQ5IDExLjk5OTlaTTMuOTMzMjUgMTEuOTk5OUMzLjkzMzI1IDEyLjQ0NzMgNC4zMjk4NiAxMi44NDEyIDQuNzgxOTQgMTIuODQxMkM1LjIzNDAyIDEyLjg0MTIgNS42MzA2MyAxMi40NDczIDUuNjMwNjMgMTEuOTk5OUM1LjYzMDYzIDExLjU1MjUgNS4yMzQwMiAxMS4xNTg1IDQuNzgxOTQgMTEuMTU4NUM0LjMyOTg2IDExLjE1ODUgMy45MzMyNSAxMS41NTI1IDMuOTMzMjUgMTEuOTk5OVpcIixcbiAgICBmaWxsOiBcImN1cnJlbnRDb2xvclwiXG4gIH1cbikgfSksIHNPID0gKCkgPT4gLyogQF9fUFVSRV9fICovIGUxKFwic3ZnXCIsIHsgdmlld0JveDogXCIwIDAgMjQgMjRcIiwgZmlsbDogXCJub25lXCIsIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsIGNoaWxkcmVuOiBbXG4gIC8qIEBfX1BVUkVfXyAqLyBjKFxuICAgIFwicGF0aFwiLFxuICAgIHtcbiAgICAgIGQ6IFwiTTE0LjgwNDQgMTAuMjc4N0MxNi4wODQ3IDkuMzcyNjkgMTYuOTM4MiA3LjkyMzE0IDE2LjkzODIgNi4yMzJDMTYuOTM4MiAzLjUxNDExIDE0Ljc0MzUgMS4zMzk3NyAxMiAxLjMzOTc3QzkuMjU2NiAxLjMzOTc3IDcuMDYxODUgMy41MTQxMSA3LjA2MTg1IDYuMjMyQzcuMDYxODUgNy45MjMxNCA3LjkxNTM2IDkuMzcyNjkgOS4xOTU2MyAxMC4yNzg3QzUuNDc2NzUgMTEuMTg0NiAyLjY3MjM1IDE0LjUwNjUgMi42NzIzNSAxOC40OTI3VjIyLjExNjZDMi42NzIzNSAyMi40MTg2IDIuOTE2MjEgMjIuNjYwMiAzLjIyMTAzIDIyLjY2MDJIMjAuNzc5QzIxLjA4MzkgMjIuNjYwMiAyMS4zMjc3IDIyLjQxODYgMjEuMzI3NyAyMi4xMTY2VjE4LjQ5MjdDMjEuMzI3NyAxNC41NjY5IDE4LjUyMzMgMTEuMTg0NiAxNC44MDQ0IDEwLjI3ODdaTTguMjIwMTggNi4yOTIzOUM4LjIyMDE4IDQuMjM4ODcgOS45MjcyMiAyLjU0NzcyIDEyIDIuNTQ3NzJDMTQuMDcyOSAyLjU0NzcyIDE1Ljc3OTkgNC4yMzg4NyAxNS43Nzk5IDYuMjkyMzlDMTUuNzc5OSA4LjM0NTkxIDE0LjA3MjkgMTAuMDM3MSAxMiAxMC4wMzcxQzkuOTI3MjIgMTAuMDM3MSA4LjIyMDE4IDguMzQ1OTEgOC4yMjAxOCA2LjI5MjM5Wk0zLjgzMDY5IDIxLjU3M1YxOC40OTI3QzMuODMwNjkgMTQuNDQ2MSA3LjE4Mzc3IDExLjEyNDIgMTEuMjY4NCAxMS4xMjQySDEyLjc5MjZDMTYuODc3MyAxMS4xMjQyIDIwLjIzMDMgMTQuNDQ2MSAyMC4yMzAzIDE4LjQ5MjdWMjEuNTczSDMuODMwNjlaXCIsXG4gICAgICBmaWxsOiBcImN1cnJlbnRDb2xvclwiXG4gICAgfVxuICApLFxuICAvKiBAX19QVVJFX18gKi8gYyhcbiAgICBcInBhdGhcIixcbiAgICB7XG4gICAgICBmaWxsUnVsZTogXCJldmVub2RkXCIsXG4gICAgICBjbGlwUnVsZTogXCJldmVub2RkXCIsXG4gICAgICBkOiBcIk0xNC44NTc3IDEwLjI0MDVDMTYuMTA4MyA5LjMzMjI3IDE2LjkzODIgNy44OTk1OSAxNi45MzgyIDYuMjMyQzE2LjkzODIgMy41MTQxMSAxNC43NDM1IDEuMzM5NzcgMTIgMS4zMzk3N0M5LjI1NjYgMS4zMzk3NyA3LjA2MTg1IDMuNTE0MTEgNy4wNjE4NSA2LjIzMkM3LjA2MTg1IDcuODk5NTkgNy44OTE3NSA5LjMzMjI3IDkuMTQyMzkgMTAuMjQwNUM5LjE2MDA1IDEwLjI1MzMgOS4xNzc4IDEwLjI2NiA5LjE5NTYzIDEwLjI3ODdDOS4xNzQzOSAxMC4yODM4IDkuMTUzMTggMTAuMjg5MSA5LjEzMiAxMC4yOTQ0QzUuNDQ0ODEgMTEuMjIyNiAyLjY3MjM1IDE0LjUyOTIgMi42NzIzNSAxOC40OTI3VjIyLjExNjZDMi42NzIzNSAyMi40MTg2IDIuOTE2MjEgMjIuNjYwMiAzLjIyMTAzIDIyLjY2MDJIMjAuNzc5QzIxLjA4MzkgMjIuNjYwMiAyMS4zMjc3IDIyLjQxODYgMjEuMzI3NyAyMi4xMTY2VjE4LjQ5MjdDMjEuMzI3NyAxNC41ODkzIDE4LjU1NTMgMTEuMjIzMyAxNC44NjgxIDEwLjI5NDRDMTQuODQ2OSAxMC4yODkxIDE0LjgyNTcgMTAuMjgzOCAxNC44MDQ0IDEwLjI3ODdDMTQuODIyMyAxMC4yNjYgMTQuODQgMTAuMjUzMyAxNC44NTc3IDEwLjI0MDVaTTE0LjkyMDMgMTAuMjU2M0MxNi4xNjQgOS4zMzg0NyAxNi45ODggNy45MDIxIDE2Ljk4OCA2LjIzMjAxQzE2Ljk4OCAzLjQ4NjE3IDE0Ljc3MDUgMS4yODk5OCAxMiAxLjI4OTk4QzkuMjI5NTQgMS4yODk5OCA3LjAxMjA2IDMuNDg2MTcgNy4wMTIwNiA2LjIzMjAxQzcuMDEyMDYgNy45MDIwOSA3LjgzNjA1IDkuMzM4NDYgOS4wNzk3NCAxMC4yNTYzQzUuMzkxNTkgMTEuMjAzNiAyLjYyMjU2IDE0LjUxOTYgMi42MjI1NiAxOC40OTI3VjIyLjExNjZDMi42MjI1NiAyMi40NDY1IDIuODg5MTUgMjIuNzEgMy4yMjEwMyAyMi43MUgyMC43NzlDMjEuMTEwOSAyMi43MSAyMS4zNzc1IDIyLjQ0NjUgMjEuMzc3NSAyMi4xMTY2VjE4LjQ5MjdDMjEuMzc3NSAxNC41Nzk3IDE4LjYwODcgMTEuMjA0OCAxNC45MjAzIDEwLjI1NjNaTTEyIDIuNTk3NTFDOS45NTQyOCAyLjU5NzUxIDguMjY5OTcgNC4yNjY4IDguMjY5OTcgNi4yOTIzOUM4LjI2OTk3IDguMzE3OTcgOS45NTQyOCA5Ljk4NzI2IDEyIDkuOTg3MjZDMTQuMDQ1OCA5Ljk4NzI2IDE1LjczMDEgOC4zMTc5NyAxNS43MzAxIDYuMjkyMzlDMTUuNzMwMSA0LjI2NjggMTQuMDQ1OCAyLjU5NzUxIDEyIDIuNTk3NTFaTTMuODgwNDggMjEuNTIzMkgyMC4xODA2VjE4LjQ5MjdDMjAuMTgwNiAxNC40NzQgMTYuODUwMiAxMS4xNzQgMTIuNzkyNiAxMS4xNzRIMTEuMjY4NEM3LjIxMDgzIDExLjE3NCAzLjg4MDQ4IDE0LjQ3NCAzLjg4MDQ4IDE4LjQ5MjdWMjEuNTIzMlpNMTIgMi41NDc3MkM5LjkyNzIyIDIuNTQ3NzIgOC4yMjAxOCA0LjIzODg3IDguMjIwMTggNi4yOTIzOUM4LjIyMDE4IDguMzQ1OTEgOS45MjcyMiAxMC4wMzcxIDEyIDEwLjAzNzFDMTQuMDcyOSAxMC4wMzcxIDE1Ljc3OTkgOC4zNDU5MSAxNS43Nzk5IDYuMjkyMzlDMTUuNzc5OSA0LjIzODg3IDE0LjA3MjkgMi41NDc3MiAxMiAyLjU0NzcyWk0yMC4yMzAzIDIxLjU3M1YxOC40OTI3QzIwLjIzMDMgMTQuNDQ2MSAxNi44NzczIDExLjEyNDIgMTIuNzkyNiAxMS4xMjQySDExLjI2ODRDNy4xODM3NyAxMS4xMjQyIDMuODMwNjkgMTQuNDQ2MSAzLjgzMDY5IDE4LjQ5MjdWMjEuNTczSDIwLjIzMDNaXCIsXG4gICAgICBmaWxsOiBcImN1cnJlbnRDb2xvclwiXG4gICAgfVxuICApXG5dIH0pLCBjTyA9ICgpID0+IC8qIEBfX1BVUkVfXyAqLyBlMShcInN2Z1wiLCB7IHZpZXdCb3g6IFwiMCAwIDEwIDEyXCIsIGZpbGw6IFwibm9uZVwiLCB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLCBjaGlsZHJlbjogW1xuICAvKiBAX19QVVJFX18gKi8gYyhcbiAgICBcInBhdGhcIixcbiAgICB7XG4gICAgICBkOiBcIk02LjQwMjIyIDUuMTM5MzZDNy4wNDIzNSA0LjY4NjM4IDcuNDY5MTEgMy45NjE2IDcuNDY5MTEgMy4xMTYwM0M3LjQ2OTExIDEuNzU3MDggNi4zNzE3NCAwLjY2OTkxNSA1LjAwMDAyIDAuNjY5OTE1QzMuNjI4MyAwLjY2OTkxNSAyLjUzMDkyIDEuNzU3MDggMi41MzA5MiAzLjExNjAzQzIuNTMwOTIgMy45NjE2IDIuOTU3NjggNC42ODYzOCAzLjU5NzgyIDUuMTM5MzZDMS43MzgzNyA1LjU5MjM0IDAuMzM2MTc1IDcuMjUzMjcgMC4zMzYxNzUgOS4yNDY0VjExLjA1ODNDMC4zMzYxNzUgMTEuMjA5MyAwLjQ1ODEwMyAxMS4zMzAxIDAuNjEwNTE2IDExLjMzMDFIOS4zODk1MkM5LjU0MTkzIDExLjMzMDEgOS42NjM4NiAxMS4yMDkzIDkuNjYzODYgMTEuMDU4M1Y5LjI0NjRDOS42NjM4NiA3LjI4MzQ3IDguMjYxNjYgNS41OTIzNCA2LjQwMjIyIDUuMTM5MzZaXCIsXG4gICAgICBmaWxsOiBcImN1cnJlbnRDb2xvclwiXG4gICAgfVxuICApLFxuICAvKiBAX19QVVJFX18gKi8gYyhcbiAgICBcInBhdGhcIixcbiAgICB7XG4gICAgICBmaWxsUnVsZTogXCJldmVub2RkXCIsXG4gICAgICBjbGlwUnVsZTogXCJldmVub2RkXCIsXG4gICAgICBkOiBcIk02LjQyODg0IDUuMTIwMjhDNy4wNTQxNiA0LjY2NjE3IDcuNDY5MTEgMy45NDk4MyA3LjQ2OTExIDMuMTE2MDNDNy40NjkxMSAxLjc1NzA4IDYuMzcxNzQgMC42Njk5MTUgNS4wMDAwMiAwLjY2OTkxNUMzLjYyODMgMC42Njk5MTUgMi41MzA5MiAxLjc1NzA4IDIuNTMwOTIgMy4xMTYwM0MyLjUzMDkyIDMuOTQ5ODIgMi45NDU4OCA0LjY2NjE3IDMuNTcxMiA1LjEyMDI4QzMuNTgwMDMgNS4xMjY2OSAzLjU4ODkgNS4xMzMwNSAzLjU5NzgyIDUuMTM5MzZDMy41ODcyIDUuMTQxOTUgMy41NzY1OSA1LjE0NDU3IDMuNTY2IDUuMTQ3MjRDMS43MjI0IDUuNjExMzMgMC4zMzYxNzUgNy4yNjQ2NSAwLjMzNjE3NSA5LjI0NjRWMTEuMDU4M0MwLjMzNjE3NSAxMS4yMDkzIDAuNDU4MTAzIDExLjMzMDEgMC42MTA1MTYgMTEuMzMwMUg5LjM4OTUyQzkuNTQxOTMgMTEuMzMwMSA5LjY2Mzg2IDExLjIwOTMgOS42NjM4NiAxMS4wNTgzVjkuMjQ2NEM5LjY2Mzg2IDcuMjk0NjggOC4yNzc2MyA1LjYxMTY3IDYuNDM0MDMgNS4xNDcyNEM2LjQyMzQ0IDUuMTQ0NTcgNi40MTI4NCA1LjE0MTk1IDYuNDAyMjIgNS4xMzkzNkM2LjQxMTEzIDUuMTMzMDUgNi40MiA1LjEyNjY5IDYuNDI4ODQgNS4xMjAyOFpNNi40NjAxNSA1LjEyODJDNy4wODIwMSA0LjY2OTI3IDcuNDk0MDEgMy45NTEwOCA3LjQ5NDAxIDMuMTE2MDNDNy40OTQwMSAxLjc0MzEyIDYuMzg1MjcgMC42NDUwMiA1LjAwMDAyIDAuNjQ1MDJDMy42MTQ3NyAwLjY0NTAyIDIuNTA2MDMgMS43NDMxMiAyLjUwNjAzIDMuMTE2MDNDMi41MDYwMyAzLjk1MTA4IDIuOTE4MDIgNC42NjkyNiAzLjUzOTg3IDUuMTI4MkMxLjY5NTc5IDUuNjAxODMgMC4zMTEyNzkgNy4yNTk4NSAwLjMxMTI3OSA5LjI0NjRWMTEuMDU4M0MwLjMxMTI3OSAxMS4yMjMzIDAuNDQ0NTczIDExLjM1NSAwLjYxMDUxNyAxMS4zNTVIOS4zODk1MkM5LjU1NTQ2IDExLjM1NSA5LjY4ODc1IDExLjIyMzMgOS42ODg3NSAxMS4wNTgzVjkuMjQ2NEM5LjY4ODc1IDcuMjg5ODcgOC4zMDQzNCA1LjYwMjQxIDYuNDYwMTUgNS4xMjgyWlwiLFxuICAgICAgZmlsbDogXCJjdXJyZW50Q29sb3JcIlxuICAgIH1cbiAgKVxuXSB9KSwgbE8gPSAoKSA9PiAvKiBAX19QVVJFX18gKi8gZTEoXCJzdmdcIiwgeyB2aWV3Qm94OiBcIjAgMCAyNCAyNFwiLCBmaWxsOiBcIm5vbmVcIiwgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiwgY2hpbGRyZW46IFtcbiAgLyogQF9fUFVSRV9fICovIGUxKFwiZ1wiLCB7IGNsaXBQYXRoOiBcInVybCgjY2xpcDBfOTM1Xzg2Njc0KVwiLCBjaGlsZHJlbjogW1xuICAgIC8qIEBfX1BVUkVfXyAqLyBjKFxuICAgICAgXCJwYXRoXCIsXG4gICAgICB7XG4gICAgICAgIGZpbGxSdWxlOiBcImV2ZW5vZGRcIixcbiAgICAgICAgY2xpcFJ1bGU6IFwiZXZlbm9kZFwiLFxuICAgICAgICBkOiBcIk0xNC41MzExIDYuMjMxMUMxNC41MzExIDcuOTIyNTEgMTMuNjY0NyA5LjM3MjMgMTIuMzY1MSAxMC4yNzg0QzE2LjE0MDEgMTEuMTg0NSAxOC45ODY4IDE0LjU2NzMgMTguOTg2OCAxOC40OTM4VjIyLjExODNDMTguOTg2OCAyMi40MjAzIDE4LjczOTMgMjIuNjYyIDE4LjQyOTggMjIuNjYySDAuNjA2Nzc5QzAuMjk3MzUgMjIuNjYyIDAuMDQ5NzkyNSAyMi40MjAzIDAuMDQ5NzkyNSAyMi4xMTgzVjE4LjQ5MzhDMC4wNDk3OTI1IDE0LjUwNjkgMi44OTY1NCAxMS4xODQ1IDYuNjcxNTcgMTAuMjc4NEM1LjM3MTk3IDkuMzcyMyA0LjUwNTU3IDcuOTIyNTEgNC41MDU1NyA2LjIzMTFDNC41MDU1NyAzLjUxMjc2IDYuNzMzNDYgMS4zMzgwNiA5LjUxODMxIDEuMzM4MDZDMTIuMzAzMiAxLjMzODA2IDE0LjUzMTEgMy41MTI3NiAxNC41MzExIDYuMjMxMVpNOS41MTgzMSAyLjU0NjIxQzcuNDE0MiAyLjU0NjIxIDUuNjgxMzkgNC4yMzc2MyA1LjY4MTM5IDYuMjkxNDlDNS42ODEzOSA4LjM0NTM1IDcuNDE0MiAxMC4wMzY4IDkuNTE4MzEgMTAuMDM2OEMxMS42MjI0IDEwLjAzNjggMTMuMzU1MiA4LjM0NTM1IDEzLjM1NTIgNi4yOTE0OUMxMy4zNTUyIDQuMjM3NjMgMTEuNjIyNCAyLjU0NjIxIDkuNTE4MzEgMi41NDYyMVpNMS4yMjU2NCAyMS41NzQ2SDE3Ljg3MjlWMTguNDkzOEMxNy44NzI5IDE0LjQ0NjUgMTQuNDY5MiAxMS4xMjQxIDEwLjMyMjggMTEuMTI0MUg4Ljc3NTY3QzQuNjI5MzQgMTEuMTI0MSAxLjIyNTY0IDE0LjQ0NjUgMS4yMjU2NCAxOC40OTM4VjIxLjU3NDZaXCIsXG4gICAgICAgIGZpbGw6IFwiY3VycmVudENvbG9yXCJcbiAgICAgIH1cbiAgICApLFxuICAgIC8qIEBfX1BVUkVfXyAqLyBjKFxuICAgICAgXCJwYXRoXCIsXG4gICAgICB7XG4gICAgICAgIGQ6IFwiTTIwLjkxNzkgNy4xMzczNEgyMy4zMzE0QzIzLjY0MDggNy4xMzczNCAyMy45NTAyIDcuMzc4OTQgMjMuOTUwMiA3LjY4MDk3QzIzLjk1MDIgNy45ODI5OSAyMy43MDI3IDguMjI0NjMgMjMuMzkzMyA4LjIyNDYzSDIwLjk3OThWMTAuNTgwNUMyMC45Nzk4IDEwLjg4MjUgMjAuNzMyMiAxMS4xMjQxIDIwLjQyMjggMTEuMTI0MUMyMC4xMTM0IDExLjEyNDEgMTkuODY1OSAxMC44ODI1IDE5Ljg2NTkgMTAuNTgwNVY4LjIyNDYzSDE3LjQ1MjRDMTcuMTQzIDguMjI0NjMgMTYuODk1NCA3Ljk4Mjk5IDE2Ljg5NTQgNy42ODA5N0MxNi44OTU0IDcuMzc4OTQgMTcuMTQzIDcuMTM3MzQgMTcuNDUyNCA3LjEzNzM0SDE5LjgwNFY0Ljc4MTVDMTkuODA0IDQuNDc5NDcgMjAuMDUxNSA0LjIzNzg3IDIwLjM2MDkgNC4yMzc4N0MyMC42NzA0IDQuMjM3ODcgMjAuOTE3OSA0LjQ3OTQ3IDIwLjkxNzkgNC43ODE1VjcuMTM3MzRaXCIsXG4gICAgICAgIGZpbGw6IFwiY3VycmVudENvbG9yXCJcbiAgICAgIH1cbiAgICApLFxuICAgIC8qIEBfX1BVUkVfXyAqLyBjKFxuICAgICAgXCJwYXRoXCIsXG4gICAgICB7XG4gICAgICAgIGZpbGxSdWxlOiBcImV2ZW5vZGRcIixcbiAgICAgICAgY2xpcFJ1bGU6IFwiZXZlbm9kZFwiLFxuICAgICAgICBkOiBcIk0xMi40MTkgMTAuMjQwM0MxMi40MDExIDEwLjI1MzEgMTIuMzgzMSAxMC4yNjU4IDEyLjM2NTEgMTAuMjc4NEMxMi4zODY1IDEwLjI4MzYgMTIuNDA3OSAxMC4yODg4IDEyLjQyOTMgMTAuMjk0MUMxNi4xNzIzIDExLjIyMyAxOC45ODY4IDE0LjU4OTYgMTguOTg2OCAxOC40OTM4VjIyLjExODNDMTguOTg2OCAyMi40MjAzIDE4LjczOTMgMjIuNjYyIDE4LjQyOTggMjIuNjYySDAuNjA2Nzc5QzAuMjk3MzUgMjIuNjYyIDAuMDQ5NzkyNSAyMi40MjAzIDAuMDQ5NzkyNSAyMi4xMTgzVjE4LjQ5MzhDMC4wNDk3OTI1IDE0LjUyOTYgMi44NjQyOCAxMS4yMjIzIDYuNjA3MyAxMC4yOTQxQzYuNjI4NjkgMTAuMjg4OCA2LjY1MDEyIDEwLjI4MzYgNi42NzE1NyAxMC4yNzg0QzYuNjUzNDkgMTAuMjY1OCA2LjYzNTQ5IDEwLjI1MzEgNi42MTc1NyAxMC4yNDAzQzUuMzQ4MDMgOS4zMzE5MSA0LjUwNTU3IDcuODk4OTggNC41MDU1NyA2LjIzMTFDNC41MDU1NyAzLjUxMjc2IDYuNzMzNDYgMS4zMzgwNiA5LjUxODMxIDEuMzM4MDZDMTIuMzAzMiAxLjMzODA2IDE0LjUzMTEgMy41MTI3NiAxNC41MzExIDYuMjMxMUMxNC41MzExIDcuODk4OTggMTMuNjg4NiA5LjMzMTkxIDEyLjQxOSAxMC4yNDAzWk0xMi40ODIzIDEwLjI1NjFDMTMuNzQ0NCA5LjMzODE0IDE0LjU4MDggNy45MDE2MyAxNC41ODA4IDYuMjMxMUMxNC41ODA4IDMuNDg0MTMgMTIuMzI5NSAxLjI4ODI3IDkuNTE4MzEgMS4yODgyN0M2LjcwNzEgMS4yODgyNyA0LjQ1NTc4IDMuNDg0MTMgNC40NTU3OCA2LjIzMTFDNC40NTU3OCA3LjkwMTYyIDUuMjkyMjIgOS4zMzgxMyA2LjU1NDMyIDEwLjI1NkMyLjgxMTE1IDExLjIwMzMgMCAxNC41MTk2IDAgMTguNDkzOFYyMi4xMTgzQzAgMjIuNDQ4OSAwLjI3MDk5MiAyMi43MTE4IDAuNjA2Nzc5IDIyLjcxMThIMTguNDI5OEMxOC43NjU2IDIyLjcxMTggMTkuMDM2NiAyMi40NDg5IDE5LjAzNjYgMjIuMTE4M1YxOC40OTM4QzE5LjAzNjYgMTQuNTc5NiAxNi4yMjU3IDExLjIwNDQgMTIuNDgyMyAxMC4yNTYxWk05LjUxODMxIDIuNTk2MDFDNy40NDA1NiAyLjU5NjAxIDUuNzMxMTggNC4yNjYyNiA1LjczMTE4IDYuMjkxNDlDNS43MzExOCA4LjMxNjcyIDcuNDQwNTYgOS45ODY5OCA5LjUxODMxIDkuOTg2OThDMTEuNTk2MSA5Ljk4Njk4IDEzLjMwNTQgOC4zMTY3MiAxMy4zMDU0IDYuMjkxNDlDMTMuMzA1NCA0LjI2NjI2IDExLjU5NjEgMi41OTYwMSA5LjUxODMxIDIuNTk2MDFaTTE3LjgyMzEgMjEuNTI0OFYxOC40OTM4QzE3LjgyMzEgMTQuNDc1MSAxNC40NDI4IDExLjE3MzkgMTAuMzIyOCAxMS4xNzM5SDguNzc1NjdDNC42NTU2OSAxMS4xNzM5IDEuMjc1NDMgMTQuNDc1MSAxLjI3NTQzIDE4LjQ5MzhWMjEuNTI0OEgxNy44MjMxWk0yMC45Njc3IDcuMDg3NTRIMjMuMzMxNEMyMy40OTg1IDcuMDg3NTQgMjMuNjY0NSA3LjE1MjU3IDIzLjc4OSA3LjI1Nzg3QzIzLjkxMzYgNy4zNjMyNiAyNCA3LjUxMjE3IDI0IDcuNjgwOTdDMjQgOC4wMTE2MiAyMy43MjkgOC4yNzQ0MiAyMy4zOTMzIDguMjc0NDJIMjEuMDI5NlYxMC41ODA1QzIxLjAyOTYgMTAuOTExMSAyMC43NTg2IDExLjE3MzkgMjAuNDIyOCAxMS4xNzM5QzIwLjA4NyAxMS4xNzM5IDE5LjgxNjEgMTAuOTExMSAxOS44MTYxIDEwLjU4MDVWOC4yNzQ0MkgxNy40NTI0QzE3LjExNjYgOC4yNzQ0MiAxNi44NDU3IDguMDExNjIgMTYuODQ1NyA3LjY4MDk3QzE2Ljg0NTcgNy4zNTAzMSAxNy4xMTY2IDcuMDg3NTQgMTcuNDUyNCA3LjA4NzU0SDE5Ljc1NDJWNC43ODE1QzE5Ljc1NDIgNC40NTA4NCAyMC4wMjUyIDQuMTg4MDggMjAuMzYwOSA0LjE4ODA4QzIwLjY5NjcgNC4xODgwOCAyMC45Njc3IDQuNDUwODQgMjAuOTY3NyA0Ljc4MTVWNy4wODc1NFpNNS42ODEzOSA2LjI5MTQ5QzUuNjgxMzkgNC4yMzc2MyA3LjQxNDIgMi41NDYyMSA5LjUxODMxIDIuNTQ2MjFDMTEuNjIyNCAyLjU0NjIxIDEzLjM1NTIgNC4yMzc2MyAxMy4zNTUyIDYuMjkxNDlDMTMuMzU1MiA4LjM0NTM1IDExLjYyMjQgMTAuMDM2OCA5LjUxODMxIDEwLjAzNjhDNy40MTQyIDEwLjAzNjggNS42ODEzOSA4LjM0NTM1IDUuNjgxMzkgNi4yOTE0OVpNMS4yMjU2NCAyMS41NzQ2VjE4LjQ5MzhDMS4yMjU2NCAxNC40NDY1IDQuNjI5MzQgMTEuMTI0MSA4Ljc3NTY3IDExLjEyNDFIMTAuMzIyOEMxNC40NjkyIDExLjEyNDEgMTcuODcyOSAxNC40NDY1IDE3Ljg3MjkgMTguNDkzOFYyMS41NzQ2SDEuMjI1NjRaTTIwLjkxNzkgNy4xMzczNFY0Ljc4MTVDMjAuOTE3OSA0LjQ3OTQ3IDIwLjY3MDQgNC4yMzc4NyAyMC4zNjA5IDQuMjM3ODdDMjAuMDUxNSA0LjIzNzg3IDE5LjgwNCA0LjQ3OTQ3IDE5LjgwNCA0Ljc4MTVWNy4xMzczNEgxNy40NTI0QzE3LjE0MyA3LjEzNzM0IDE2Ljg5NTQgNy4zNzg5NCAxNi44OTU0IDcuNjgwOTdDMTYuODk1NCA3Ljk4Mjk5IDE3LjE0MyA4LjIyNDYzIDE3LjQ1MjQgOC4yMjQ2M0gxOS44NjU5VjEwLjU4MDVDMTkuODY1OSAxMC44ODI1IDIwLjExMzQgMTEuMTI0MSAyMC40MjI4IDExLjEyNDFDMjAuNzMyMiAxMS4xMjQxIDIwLjk3OTggMTAuODgyNSAyMC45Nzk4IDEwLjU4MDVWOC4yMjQ2M0gyMy4zOTMzQzIzLjcwMjcgOC4yMjQ2MyAyMy45NTAyIDcuOTgyOTkgMjMuOTUwMiA3LjY4MDk3QzIzLjk1MDIgNy4zNzg5NCAyMy42NDA4IDcuMTM3MzQgMjMuMzMxNCA3LjEzNzM0SDIwLjkxNzlaXCIsXG4gICAgICAgIGZpbGw6IFwiY3VycmVudENvbG9yXCJcbiAgICAgIH1cbiAgICApXG4gIF0gfSksXG4gIC8qIEBfX1BVUkVfXyAqLyBjKFwiZGVmc1wiLCB7IGNoaWxkcmVuOiAvKiBAX19QVVJFX18gKi8gYyhcImNsaXBQYXRoXCIsIHsgaWQ6IFwiY2xpcDBfOTM1Xzg2Njc0XCIsIGNoaWxkcmVuOiAvKiBAX19QVVJFX18gKi8gYyhcInJlY3RcIiwgeyB3aWR0aDogXCIyNFwiLCBoZWlnaHQ6IFwiMjRcIiwgZmlsbDogXCJjdXJyZW50Q29sb3JcIiB9KSB9KSB9KVxuXSB9KSwgcE8gPSAoKSA9PiAvKiBAX19QVVJFX18gKi8gZTEoXCJzdmdcIiwgeyB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLCB2aWV3Qm94OiBcIjAgMCAyNCAyNFwiLCBmaWxsOiBcIm5vbmVcIiwgY2hpbGRyZW46IFtcbiAgLyogQF9fUFVSRV9fICovIGUxKFwiZ1wiLCB7IGNsaXBQYXRoOiBcInVybCgjY2xpcDBfNTYzMF85NTkxOSlcIiwgY2hpbGRyZW46IFtcbiAgICAvKiBAX19QVVJFX18gKi8gYyhcbiAgICAgIFwicGF0aFwiLFxuICAgICAge1xuICAgICAgICBmaWxsUnVsZTogXCJldmVub2RkXCIsXG4gICAgICAgIGNsaXBSdWxlOiBcImV2ZW5vZGRcIixcbiAgICAgICAgZDogXCJNMTQuNTMxMSA2LjIzMTE2QzE0LjUzMTEgNy45MjI1NyAxMy42NjQ3IDkuMzcyMzYgMTIuMzY1MSAxMC4yNzg1QzE2LjE0MDEgMTEuMTg0NiAxOC45ODY4IDE0LjU2NzQgMTguOTg2OCAxOC40OTM5VjIyLjExODNDMTguOTg2OCAyMi40MjA0IDE4LjczOTMgMjIuNjYyIDE4LjQyOTggMjIuNjYySDAuNjA2Nzc5QzAuMjk3MzUgMjIuNjYyIDAuMDQ5NzkyNSAyMi40MjA0IDAuMDQ5NzkyNSAyMi4xMTgzVjE4LjQ5MzlDMC4wNDk3OTI1IDE0LjUwNyAyLjg5NjU0IDExLjE4NDYgNi42NzE1NyAxMC4yNzg1QzUuMzcxOTcgOS4zNzIzNiA0LjUwNTU3IDcuOTIyNTcgNC41MDU1NyA2LjIzMTE2QzQuNTA1NTcgMy41MTI4MiA2LjczMzQ2IDEuMzM4MTIgOS41MTgzMSAxLjMzODEyQzEyLjMwMzIgMS4zMzgxMiAxNC41MzExIDMuNTEyODIgMTQuNTMxMSA2LjIzMTE2WlwiLFxuICAgICAgICBmaWxsOiBcImN1cnJlbnRDb2xvclwiXG4gICAgICB9XG4gICAgKSxcbiAgICAvKiBAX19QVVJFX18gKi8gYyhcbiAgICAgIFwicGF0aFwiLFxuICAgICAge1xuICAgICAgICBkOiBcIk0yMC45MTc5IDcuMTM3NEgyMy4zMzE0QzIzLjY0MDggNy4xMzc0IDIzLjk1MDIgNy4zNzkgMjMuOTUwMiA3LjY4MTAzQzIzLjk1MDIgNy45ODMwNiAyMy43MDI3IDguMjI0NjkgMjMuMzkzMyA4LjIyNDY5SDIwLjk3OThWMTAuNTgwNUMyMC45Nzk4IDEwLjg4MjYgMjAuNzMyMiAxMS4xMjQyIDIwLjQyMjggMTEuMTI0MkMyMC4xMTM0IDExLjEyNDIgMTkuODY1OSAxMC44ODI2IDE5Ljg2NTkgMTAuNTgwNVY4LjIyNDY5SDE3LjQ1MjRDMTcuMTQzIDguMjI0NjkgMTYuODk1NCA3Ljk4MzA2IDE2Ljg5NTQgNy42ODEwM0MxNi44OTU0IDcuMzc5IDE3LjE0MyA3LjEzNzQgMTcuNDUyNCA3LjEzNzRIMTkuODA0VjQuNzgxNTZDMTkuODA0IDQuNDc5NTMgMjAuMDUxNSA0LjIzNzkzIDIwLjM2MDkgNC4yMzc5M0MyMC42NzA0IDQuMjM3OTMgMjAuOTE3OSA0LjQ3OTUzIDIwLjkxNzkgNC43ODE1NlY3LjEzNzRaXCIsXG4gICAgICAgIGZpbGw6IFwiY3VycmVudENvbG9yXCJcbiAgICAgIH1cbiAgICApLFxuICAgIC8qIEBfX1BVUkVfXyAqLyBjKFxuICAgICAgXCJwYXRoXCIsXG4gICAgICB7XG4gICAgICAgIGZpbGxSdWxlOiBcImV2ZW5vZGRcIixcbiAgICAgICAgY2xpcFJ1bGU6IFwiZXZlbm9kZFwiLFxuICAgICAgICBkOiBcIk0xMi40MTkgMTAuMjQwM0MxMi40MDExIDEwLjI1MzIgMTIuMzgzMSAxMC4yNjU5IDEyLjM2NTEgMTAuMjc4NUMxMi4zODY1IDEwLjI4MzYgMTIuNDA3OSAxMC4yODg5IDEyLjQyOTMgMTAuMjk0MkMxNi4xNzIzIDExLjIyMyAxOC45ODY4IDE0LjU4OTcgMTguOTg2OCAxOC40OTM5VjIyLjExODNDMTguOTg2OCAyMi40MjA0IDE4LjczOTMgMjIuNjYyIDE4LjQyOTggMjIuNjYySDAuNjA2Nzc5QzAuMjk3MzUgMjIuNjYyIDAuMDQ5NzkyNSAyMi40MjA0IDAuMDQ5NzkyNSAyMi4xMTgzVjE4LjQ5MzlDMC4wNDk3OTI1IDE0LjUyOTYgMi44NjQyOCAxMS4yMjI0IDYuNjA3MyAxMC4yOTQyQzYuNjI4NjkgMTAuMjg4OSA2LjY1MDEyIDEwLjI4MzYgNi42NzE1NyAxMC4yNzg1QzYuNjUzNDkgMTAuMjY1OSA2LjYzNTQ5IDEwLjI1MzIgNi42MTc1NyAxMC4yNDAzQzUuMzQ4MDMgOS4zMzE5NyA0LjUwNTU3IDcuODk5MDQgNC41MDU1NyA2LjIzMTE2QzQuNTA1NTcgMy41MTI4MiA2LjczMzQ2IDEuMzM4MTIgOS41MTgzMSAxLjMzODEyQzEyLjMwMzIgMS4zMzgxMiAxNC41MzExIDMuNTEyODIgMTQuNTMxMSA2LjIzMTE2QzE0LjUzMTEgNy44OTkwNCAxMy42ODg2IDkuMzMxOTcgMTIuNDE5IDEwLjI0MDNaTTEyLjQ4MjMgMTAuMjU2MUMxMy43NDQ0IDkuMzM4MiAxNC41ODA4IDcuOTAxNjkgMTQuNTgwOCA2LjIzMTE2QzE0LjU4MDggMy40ODQxOSAxMi4zMjk1IDEuMjg4MzMgOS41MTgzMSAxLjI4ODMzQzYuNzA3MSAxLjI4ODMzIDQuNDU1NzggMy40ODQxOSA0LjQ1NTc4IDYuMjMxMTZDNC40NTU3OCA3LjkwMTY4IDUuMjkyMjEgOS4zMzgxOSA2LjU1NDMyIDEwLjI1NjFDMi44MTExNSAxMS4yMDMzIDAgMTQuNTE5NiAwIDE4LjQ5MzlWMjIuMTE4M0MwIDIyLjQ0OSAwLjI3MDk5MiAyMi43MTE4IDAuNjA2Nzc5IDIyLjcxMThIMTguNDI5OEMxOC43NjU2IDIyLjcxMTggMTkuMDM2NiAyMi40NDkgMTkuMDM2NiAyMi4xMTgzVjE4LjQ5MzlDMTkuMDM2NiAxNC41Nzk3IDE2LjIyNTcgMTEuMjA0NSAxMi40ODIzIDEwLjI1NjFaTTIwLjk2NzcgNy4wODc2SDIzLjMzMTRDMjMuNDk4NSA3LjA4NzYgMjMuNjY0NSA3LjE1MjYzIDIzLjc4OSA3LjI1Nzk0QzIzLjkxMzYgNy4zNjMzMiAyNCA3LjUxMjI0IDI0IDcuNjgxMDNDMjQgOC4wMTE2OCAyMy43MjkgOC4yNzQ0OCAyMy4zOTMzIDguMjc0NDhIMjEuMDI5NlYxMC41ODA1QzIxLjAyOTYgMTAuOTExMiAyMC43NTg2IDExLjE3NCAyMC40MjI4IDExLjE3NEMyMC4wODcgMTEuMTc0IDE5LjgxNjEgMTAuOTExMiAxOS44MTYxIDEwLjU4MDVWOC4yNzQ0OEgxNy40NTI0QzE3LjExNjYgOC4yNzQ0OCAxNi44NDU3IDguMDExNjggMTYuODQ1NyA3LjY4MTAzQzE2Ljg0NTcgNy4zNTAzNyAxNy4xMTY2IDcuMDg3NiAxNy40NTI0IDcuMDg3NkgxOS43NTQyVjQuNzgxNTZDMTkuNzU0MiA0LjQ1MDkgMjAuMDI1MiA0LjE4ODE0IDIwLjM2MDkgNC4xODgxNEMyMC42OTY3IDQuMTg4MTQgMjAuOTY3NyA0LjQ1MDkgMjAuOTY3NyA0Ljc4MTU2VjcuMDg3NlpNMjAuOTE3OSA3LjEzNzRWNC43ODE1NkMyMC45MTc5IDQuNDc5NTMgMjAuNjcwNCA0LjIzNzkzIDIwLjM2MDkgNC4yMzc5M0MyMC4wNTE1IDQuMjM3OTMgMTkuODA0IDQuNDc5NTMgMTkuODA0IDQuNzgxNTZWNy4xMzc0SDE3LjQ1MjRDMTcuMTQzIDcuMTM3NCAxNi44OTU0IDcuMzc5IDE2Ljg5NTQgNy42ODEwM0MxNi44OTU0IDcuOTgzMDYgMTcuMTQzIDguMjI0NjkgMTcuNDUyNCA4LjIyNDY5SDE5Ljg2NTlWMTAuNTgwNUMxOS44NjU5IDEwLjg4MjYgMjAuMTEzNCAxMS4xMjQyIDIwLjQyMjggMTEuMTI0MkMyMC43MzIyIDExLjEyNDIgMjAuOTc5OCAxMC44ODI2IDIwLjk3OTggMTAuNTgwNVY4LjIyNDY5SDIzLjM5MzNDMjMuNzAyNyA4LjIyNDY5IDIzLjk1MDIgNy45ODMwNiAyMy45NTAyIDcuNjgxMDNDMjMuOTUwMiA3LjM3OSAyMy42NDA4IDcuMTM3NCAyMy4zMzE0IDcuMTM3NEgyMC45MTc5WlwiLFxuICAgICAgICBmaWxsOiBcImN1cnJlbnRDb2xvclwiXG4gICAgICB9XG4gICAgKVxuICBdIH0pLFxuICAvKiBAX19QVVJFX18gKi8gYyhcImRlZnNcIiwgeyBjaGlsZHJlbjogLyogQF9fUFVSRV9fICovIGMoXCJjbGlwUGF0aFwiLCB7IGlkOiBcImNsaXAwXzU2MzBfOTU5MTlcIiwgY2hpbGRyZW46IC8qIEBfX1BVUkVfXyAqLyBjKFwicmVjdFwiLCB7IHdpZHRoOiBcIjI0XCIsIGhlaWdodDogXCIyNFwiLCBmaWxsOiBcIndoaXRlXCIgfSkgfSkgfSlcbl0gfSksIGRPID0gKCkgPT4gLyogQF9fUFVSRV9fICovIGMoXG4gIFwic3ZnXCIsXG4gIHtcbiAgICB3aWR0aDogXCIyNFwiLFxuICAgIGhlaWdodDogXCIyNFwiLFxuICAgIHZpZXdCb3g6IFwiMCAwIDI0IDI0XCIsXG4gICAgZmlsbDogXCJub25lXCIsXG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICBjaGlsZHJlbjogLyogQF9fUFVSRV9fICovIGMoXG4gICAgICBcInBhdGhcIixcbiAgICAgIHtcbiAgICAgICAgZmlsbFJ1bGU6IFwiZXZlbm9kZFwiLFxuICAgICAgICBjbGlwUnVsZTogXCJldmVub2RkXCIsXG4gICAgICAgIGQ6IFwiTTIwLjAyMjggMS4zMjg3M0MxOS42NTk3IDEuMzE4NDMgMTkuMjk4MiAxLjM4MDc3IDE4Ljk1OTYgMS41MTIyM0MxOC42MjAyIDEuNjQzOTggMTguMzEwNiAxLjg0MjQ3IDE4LjA0OTMgMi4wOTU4OUMxNy43ODggMi4zNDkzMiAxNy41ODAzIDIuNjUyNTcgMTcuNDM4NCAyLjk4NzgxQzE3LjI5NjUgMy4zMjMgMTcuMjIzNCAzLjY4MzI1IDE3LjIyMzQgNC4wNDcyM1Y2Ljc2NzA0SDE5LjkzNzJDMjAuNjU2NSA2Ljc3NTg2IDIxLjM1MDkgNi40OTk4NiAyMS44NjczIDUuOTk5MDVDMjIuMzg0NyA1LjQ5NzM2IDIyLjY4MTggNC44MTA5OCAyMi42OTMyIDQuMDkwNDZDMjIuNzA0NSAzLjM2OTk1IDIyLjQyOTEgMi42NzQ1NSAyMS45Mjc4IDIuMTU2ODVDMjEuNDI3MyAxLjY0MDAzIDIwLjc0MiAxLjM0MjQ4IDIwLjAyMjggMS4zMjg3M1pNMy45NzY3MSAxLjMyODc0QzMuMjU3NSAxLjM0MjQ5IDIuNTcyNjkgMS42NDAwMyAyLjA3MjIgMi4xNTY4NUMxLjU3MDg3IDIuNjc0NTUgMS4yOTU1IDMuMzY5OTUgMS4zMDY4NCA0LjA5MDQ2QzEuMzE4MTggNC44MTA5OCAxLjYxNTMgNS40OTczNiAyLjEzMjY2IDUuOTk5MDVDMi42NDkxIDYuNDk5ODYgMy4zNDI4OSA2Ljc3NTg2IDQuMDYyMiA2Ljc2NzA0TDYuNzc2NTIgNi43NjcwNFY0LjA0NzIyQzYuNzc2NTcgMy42ODMyNSA2LjcwMzQ3IDMuMzIzIDYuNTYxNiAyLjk4NzgxQzYuNDE5NyAyLjY1MjU3IDYuMjExOSAyLjM0OTMyIDUuOTUwNiAyLjA5NTg5QzUuNjg5MzEgMS44NDI0NyA1LjM3OTc5IDEuNjQzOTggNS4wNDAzNyAxLjUxMjIzQzQuNzAxNzIgMS4zODA3NyA0LjMzOTc1IDEuMzE4NDQgMy45NzY3MSAxLjMyODc0Wk04LjEwOTM1IDE3LjIzMjRWMTkuOTUyMUM4LjEwOTM2IDIwLjc1MjUgNy44NzE3IDIxLjUzNSA3LjQyNjMgMjIuMjAwNkM2Ljk4MDkgMjIuODY2MiA2LjM0NzcyIDIzLjM4NTIgNS42MDY2OSAyMy42OTE3QzQuODY1NjUgMjMuOTk4MiA0LjA1MDE4IDI0LjA3ODUgMy4yNjM0NSAyMy45MjIyQzIuNDc2NzEgMjMuNzY1OSAxLjc1NDE5IDIzLjM4MDIgMS4xODcyIDIyLjgxNEMwLjYyMDIyNCAyMi4yNDc4IDAuMjM0MjMyIDIxLjUyNjYgMC4wNzc4Njg4IDIwLjc0MTZDLTAuMDc4NDk2NCAxOS45NTY2IDAuMDAxNzUwNDUgMTkuMTQzIDAuMzA4NTEgMTguNDAzNUMwLjYxNTI3IDE3LjY2NCAxLjEzNDgyIDE3LjAzMTcgMS44MDE2NCAxNi41ODY4QzIuNDY4NDYgMTYuMTQxOSAzLjI1MjU0IDE1LjkwNDQgNC4wNTQ3MiAxNS45MDQ0SDYuNzc3MzhWOC4wOTU2NEg0LjA1NDcyQzMuMjUyNTQgOC4wOTU2NSAyLjQ2ODQ2IDcuODU4MTEgMS44MDE2NCA3LjQxMzJDMS4xMzQ4MiA2Ljk2ODI5IDAuNjE1MjcgNi4zMzYwNiAwLjMwODUxIDUuNTk2NTRDMC4wMDE3NTIzNSA0Ljg1NzAzIC0wLjA3ODQ5NjQgNC4wNDMzIDAuMDc3ODY4OCAzLjI1ODMxQzAuMjM0MjMyIDIuNDczMzEgMC42MjAyMjQgMS43NTIxMSAxLjE4NzIgMS4xODU5M0MxLjc1NDE4IDAuNjE5NzYgMi40NzY2OSAwLjIzNDEwMSAzLjI2MzQ1IDAuMDc3ODI4OUM0LjA1MDIgLTAuMDc4NDQ0MiA0Ljg2NTY3IDAuMDAxNzQyODIgNS42MDY2OSAwLjMwODI0N0M2LjM0NzcyIDAuNjE0NzU0IDYuOTgwOSAxLjEzMzcxIDcuNDI2MyAxLjc5OTM2QzcuODcxNyAyLjQ2NSA4LjEwOTM2IDMuMjQ3NDcgOC4xMDkzNSA0LjA0NzgyVjYuNzQ4OEwxNS44OTA2IDYuNzQ4NzlWNC4wNDc4MkMxNS44OTA2IDMuMjQ3NDcgMTYuMTI4MiAyLjQ2NSAxNi41NzM2IDEuNzk5MzZDMTcuMDE5IDEuMTMzNzEgMTcuNjUyMiAwLjYxNDc1NCAxOC4zOTMzIDAuMzA4MjQ3QzE5LjEzNDMgMC4wMDE3NDI4MiAxOS45NDk4IC0wLjA3ODQ0NDIgMjAuNzM2NSAwLjA3NzgyODlDMjEuNTIzMyAwLjIzNDEwMSAyMi4yNDU4IDAuNjE5NzYgMjIuODEyOCAxLjE4NTkzQzIzLjM3OTggMS43NTIxMSAyMy43NjU4IDIuNDczMzEgMjMuOTIyMSAzLjI1ODMxQzI0LjA3ODUgNC4wNDMzIDIzLjk5ODIgNC44NTcwMyAyMy42OTE1IDUuNTk2NTRDMjMuMzg0NyA2LjMzNjA2IDIyLjg2NTIgNi45NjgyOSAyMi4xOTg0IDcuNDEzMkMyMS41MzE1IDcuODU4MTEgMjAuNzQ3NCA4LjA5NTY1IDE5Ljk0NTIgOC4wOTU2NEgxNy4yMjI2VjE1LjkwNDRIMTkuOTQ1MkMyMC43NDc0IDE1LjkwNDQgMjEuNTMxNSAxNi4xNDE5IDIyLjE5ODQgMTYuNTg2OEMyMi44NjUyIDE3LjAzMTcgMjMuMzg0NyAxNy42NjQgMjMuNjkxNSAxOC40MDM1QzIzLjk5ODIgMTkuMTQzIDI0LjA3ODUgMTkuOTU2NiAyMy45MjIxIDIwLjc0MTZDMjMuNzY1OCAyMS41MjY2IDIzLjM3OTggMjIuMjQ3OCAyMi44MTI4IDIyLjgxNEMyMi4yNDU4IDIzLjM4MDIgMjEuNTIzMyAyMy43NjU5IDIwLjczNjUgMjMuOTIyMkMxOS45NDk4IDI0LjA3ODUgMTkuMTM0MyAyMy45OTgyIDE4LjM5MzMgMjMuNjkxN0MxNy42NTIyIDIzLjM4NTIgMTcuMDE5IDIyLjg2NjIgMTYuNTczNiAyMi4yMDA2QzE2LjEyODIgMjEuNTM1IDE1Ljg5MDYgMjAuNzUyNSAxNS44OTA2IDE5Ljk1MjFWMTcuMjMyNEg4LjEwOTM1Wk0xNS44OTEyIDE1LjkwMzhWOC4wOTUwNUg4LjEwODcxVjE1LjkwMzhIMTUuODkxMlpNMTkuOTQ1OSAxNy4yMzE4SDE3LjIyMzJWMTkuOTUxN0MxNy4yMjMzIDIwLjQ4OTYgMTcuMzgzMiAyMS4wMTU1IDE3LjY4MjUgMjEuNDYyNkMxNy45ODE4IDIxLjkwOTcgMTguNDA3IDIyLjI1OCAxOC45MDQyIDIyLjQ2MzZDMTkuNDAxNCAyMi42NjkyIDE5Ljk0ODUgMjIuNzIyOSAyMC40NzYzIDIyLjYxODFDMjEuMDA0IDIyLjUxMzIgMjEuNDg4OSAyMi4yNTQ0IDIxLjg2OTcgMjEuODc0M0MyMi4yNTA0IDIxLjQ5NDEgMjIuNTA5OCAyMS4wMDk2IDIyLjYxNSAyMC40ODJDMjIuNzIwMSAxOS45NTQ0IDIyLjY2NjIgMTkuNDA3NSAyMi40NjAyIDE4LjkxMDVDMjIuMjU0MSAxOC40MTM1IDIxLjkwNTIgMTcuOTg4OSAyMS40NTc2IDE3LjY5MDFDMjEuMDEwMiAxNy4zOTE0IDIwLjQ4NCAxNy4yMzE5IDE5Ljk0NTkgMTcuMjMxOFpNNi43NzY3MyAxNy4yMzE4SDQuMDU0MDhDMy41MTU5OSAxNy4yMzE5IDIuOTg5ODIgMTcuMzkxNCAyLjU0MjM0IDE3LjY5MDFDMi4wOTQ4MyAxNy45ODg5IDEuNzQ1ODkgMTguNDEzNSAxLjUzOTgzIDE4LjkxMDVDMS4zMzM3NiAxOS40MDc1IDEuMjc5ODcgMTkuOTU0NCAxLjM4NTAxIDIwLjQ4MkMxLjQ5MDE2IDIxLjAwOTYgMS43NDk1OSAyMS40OTQxIDIuMTMwMzEgMjEuODc0M0MyLjUxMTAzIDIyLjI1NDQgMi45OTU5NiAyMi41MTMyIDMuNTIzNzIgMjIuNjE4MUM0LjA1MTQ4IDIyLjcyMjkgNC41OTg1MyAyMi42NjkyIDUuMDk1NzUgMjIuNDYzNkM1LjU5MyAyMi4yNTggNi4wMTgxOSAyMS45MDk3IDYuMzE3NDYgMjEuNDYyNkM2LjYxNjc0IDIxLjAxNTUgNi43NzY2MSAyMC40ODk2IDYuNzc2NzMgMTkuOTUxN1YxNy4yMzE4WlwiLFxuICAgICAgICBmaWxsOiBcImJsYWNrXCJcbiAgICAgIH1cbiAgICApXG4gIH1cbiksIGJPID0gKCkgPT4gLyogQF9fUFVSRV9fICovIGMoXCJzdmdcIiwgeyB2aWV3Qm94OiBcIjAgMCAyNCAyNFwiLCBmaWxsOiBcIm5vbmVcIiwgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiwgY2hpbGRyZW46IC8qIEBfX1BVUkVfXyAqLyBjKFxuICBcInBhdGhcIixcbiAge1xuICAgIGQ6IFwiTTIyLjMzMzQgNC41ODk2M0MyMi43MDE0IDQuNTg5NjMgMjMgNC4yODgyMSAyMyAzLjkxNTgxQzIzIDMuNTQzNDIgMjIuNzAxNCAzLjI0MiAyMi4zMzM0IDMuMjQySDE4LjMxODFDMTguMzA1MiAzLjI0MiAxOC4yOTI3IDMuMjQ1MTQgMTguMjgwMyAzLjI0NTU5QzE4LjI1ODUgMy4yNDY5NCAxOC4yMzY3IDMuMjQ4NzQgMTguMjE1NCAzLjI1MjMzQzE4LjIwNTYgMy4yNTQxMyAxOC4xOTQxIDMuMjUzMjMgMTguMTg0MyAzLjI1NTQ4QzE4LjE3NzIgMy4yNTY4MiAxOC4xNzE5IDMuMjYxMzIgMTguMTY0NyAzLjI2MzExQzE4LjEwMTIgMy4yNzgzOSAxOC4wNDAzIDMuMzAxNzUgMTcuOTgzIDMuMzM1NDRDMTcuOTczNiAzLjM0MDgzIDE3Ljk2NjUgMy4zNDY2NyAxNy45NTc2IDMuMzUyNTFDMTcuOTA0OCAzLjM4NzEgMTcuODU1OSAzLjQyODQyIDE3LjgxMjggMy40NzkxOEMxNy44MDkyIDMuNDgzMjMgMTcuODA1MiAzLjQ4NjM3IDE3LjgwMjUgMy40ODk5NkMxNy44MDA4IDMuNDkyMjEgMTcuNzk4NSAzLjQ5MzU2IDE3Ljc5NjggMy40OTU4QzE3Ljc1NTQgMy41NDgzNiAxNy43MjYxIDMuNjA2MzEgMTcuNzAyNSAzLjY2NTYxQzE3LjY5ODEgMy42NzY4NCAxNy42OTMyIDMuNjg3NjIgMTcuNjg5NyAzLjY5OTc0QzE3LjY2NzQgMy43NjUzMyAxNy42NTYzIDMuODMyMjYgMTcuNjU0NSAzLjkwMDA5QzE3LjY1NDUgMy45MDU0OCAxNy42NTE5IDMuOTA5OTggMTcuNjUxOSAzLjkxNTgxTDE3LjY1MjMgNy45NjM2M0MxNy42NTIzIDguMzM2MDMgMTcuOTUxIDguNjM3NDUgMTguMzE5IDguNjM3NDVDMTguNjg2OSA4LjYzNzQ1IDE4Ljk4NTYgOC4zMzU1OCAxOC45ODU2IDcuOTYzNjNMMTguOTg1MSA1LjQ3NjgxQzIwLjYxMDggNy4yNjI0MiAyMS41MTEyIDkuNTU4MzMgMjEuNTExMiAxMS45OTk4QzIxLjUxMTIgMTcuMzIyIDE3LjIyNyAyMS42NTE5IDExLjk2MiAyMS42NTE5QzExLjA1MDEgMjEuNjUxOSAxMC4xNDgzIDIxLjUyMjEgOS4yODE3MiAyMS4yNjdDOC45Mjg4NSAyMS4xNjIzIDguNTU4MjEgMjEuMzY4IDguNDU1MSAyMS43MjQ3QzguMzUyIDIyLjA4MjMgOC41NTQ2NSAyMi40NTY1IDguOTA4NDEgMjIuNTYwMkM5Ljg5NjM1IDIyLjg1MTggMTAuOTIzOCAyMyAxMS45NjI0IDIzQzE3Ljk2MyAyMyAyMi44NDQ5IDE4LjA2NTQgMjIuODQ0OSAxMi4wMDAyQzIyLjg0NDkgOS4yMzE3NSAyMS44MzkyIDYuNjIwNSAyMC4wMDM3IDQuNTkwMDhIMjIuMzMzNFY0LjU4OTYzWk01LjY4MTk0IDE1LjM2MTdDNS4zMTM1MiAxNS4zNjE3IDUuMDE1MzEgMTUuNjYzNSA1LjAxNTMxIDE2LjAzNTVMNS4wMTU3NiAxOC42MDk0QzMuMzM5NDEgMTYuODEyNiAyLjQxMTkxIDE0LjQ4MDMgMi40MTE5MSAxMS45OTk4QzIuNDExOTEgNi42Nzc1NSA2LjY5NTY2IDIuMzQ3NjMgMTEuOTYxMSAyLjM0NzYzQzEyLjg3MzEgMi4zNDc2MyAxMy43NzQ4IDIuNDc3NDUgMTQuNjQxIDIuNzMzMDVDMTQuOTkzNCAyLjgzNzcxIDE1LjM2NDkgMi42MzI0MiAxNS40Njc2IDIuMjc0ODVDMTUuNTcwNyAxLjkxNzczIDE1LjM2OCAxLjU0MzU0IDE1LjAxNDcgMS40MzkzM0MxNC4wMjYzIDEuMTQ3NzkgMTIuOTk5MyAxIDExLjk2MDcgMUM1Ljk2MDE0IDEgMS4wNzgyMiA1LjkzNDU2IDEuMDc4MjIgMTEuOTk5OEMxLjA3ODIyIDE0Ljc2ODIgMi4wODM5MyAxNy4zNzk5IDMuOTE4OTMgMTkuNDA5OUgxLjY2NjYzQzEuMjk4MiAxOS40MDk5IDEgMTkuNzExOCAxIDIwLjA4MzdDMSAyMC40NTU3IDEuMjk4MiAyMC43NTc2IDEuNjY2NjMgMjAuNzU3Nkg1LjY4MTk0QzYuMDUwMzYgMjAuNzU3NiA2LjM0ODU2IDIwLjQ1NTcgNi4zNDg1NiAyMC4wODM3TDYuMzQ4MTIgMTYuMDM1NUM2LjM0ODU2IDE1LjY2MzUgNi4wNDk5MiAxNS4zNjE3IDUuNjgxOTQgMTUuMzYxN1pcIixcbiAgICBmaWxsOiBcImN1cnJlbnRjb2xvclwiXG4gIH1cbikgfSksIE1PID0gKCkgPT4gLyogQF9fUFVSRV9fICovIGUxKFwic3ZnXCIsIHsgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiwgdmlld0JveDogXCIwIDAgMjQgMjRcIiwgZmlsbDogXCJub25lXCIsIGNoaWxkcmVuOiBbXG4gIC8qIEBfX1BVUkVfXyAqLyBjKFxuICAgIFwicGF0aFwiLFxuICAgIHtcbiAgICAgIGQ6IFwiTTYuNiAxNS42QzYuNCAxNS40IDYuMiAxNS4zIDUuOSAxNS4zQzUuNCAxNS4zIDQuOSAxNS43IDQuOSAxNi4zVjE4LjFDMy42IDE2LjQgMi45IDE0LjQgMi45IDEyLjNDMi45IDcuMSA3LjEgMi45IDEyLjIgMi45QzEzLjEgMi45IDEzLjEgMi45IDEzLjYgM0MxMy43IDMgMTMuOCAzIDEzLjkgM0MxNC4zIDMgMTQuNyAyLjcgMTQuOCAyLjNDMTQuOSAxLjggMTQuNyAxLjIgMTQuMiAxLjFDMTMuMyAxIDEzLjMgMSAxMi4yIDFDNi4xIDEgMS4xIDYuMSAxLjEgMTIuM0MxLjEgMTQuOSAyIDE3LjQgMy42IDE5LjRIMkMxLjUgMTkuNCAxIDE5LjggMSAyMC40QzEgMjEgMS40IDIxLjQgMiAyMS40SDZDNi41IDIxLjQgNyAyMSA3IDIwLjRWMTYuNEM2LjkgMTYuMSA2LjggMTUuOCA2LjYgMTUuNlpcIixcbiAgICAgIGZpbGw6IFwiY3VycmVudGNvbG9yXCJcbiAgICB9XG4gICksXG4gIC8qIEBfX1BVUkVfXyAqLyBjKFxuICAgIFwicGF0aFwiLFxuICAgIHtcbiAgICAgIGQ6IFwiTTIyLjYgNS4yQzIzLjEgNS4yIDIzLjYgNC44IDIzLjYgNC4yQzIzLjYgMy42IDIzLjIgMy4yIDIyLjYgMy4ySDE4LjNDMTguMiAzLjIgMTguMSAzLjMgMTggMy4zQzE3LjkgMy40IDE3LjkgMy40IDE3LjggMy41QzE3LjcgMy42IDE3LjcgMy42IDE3LjYgMy44QzE3LjU4MjIgMy44MzU2NyAxNy41IDQgMTcuNSA0LjFWOC4xQzE3LjUgOC42IDE3LjkgOS4xIDE4LjUgOS4xQzE5IDkuMSAxOS40IDguNyAxOS40IDguMVY2LjVDMjAuNyA4LjEgMjEuNCAxMC4yIDIxLjQgMTIuMkMyMS40IDE3LjQgMTcuMiAyMS42IDEyLjEgMjEuNkMxMS4yIDIxLjYgMTEuMiAyMS42IDEwLjUgMjEuNUMxMC40IDIxLjUgMTAuMyAyMS41IDEwLjIgMjEuNUM5LjggMjEuNSA5LjQgMjEuOCA5LjMgMjIuMkM5LjIgMjIuNyA5LjQgMjMuMyA5LjkgMjMuNEMxMC44IDIzLjYgMTAuOSAyMy42IDEyIDIzLjZDMTguMiAyMy42IDIzLjIgMTguNSAyMy4yIDEyLjNDMjMuMiA5LjcgMjIuMyA3LjIgMjAuNyA1LjJIMjIuNlpcIixcbiAgICAgIGZpbGw6IFwiY3VycmVudGNvbG9yXCJcbiAgICB9XG4gIClcbl0gfSksIEFPID0gKCkgPT4gLyogQF9fUFVSRV9fICovIGMoXCJzdmdcIiwgeyB2aWV3Qm94OiBcIjAgMCAyNCAyNFwiLCBmaWxsOiBcIm5vbmVcIiwgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiwgY2hpbGRyZW46IC8qIEBfX1BVUkVfXyAqLyBjKFxuICBcInBhdGhcIixcbiAge1xuICAgIGZpbGxSdWxlOiBcImV2ZW5vZGRcIixcbiAgICBjbGlwUnVsZTogXCJldmVub2RkXCIsXG4gICAgZDogXCJNMy4zNjkwNiA2Ljk1NDk4TDcuODA5NzUgNS44ODY1N0M4LjEzOTI1IDUuODA3MyA4LjQ3MDYyIDYuMDEwMTQgOC41NDk5IDYuMzM5NjRDOC42MjkxNyA2LjY2OTEzIDguNDI2MzMgNy4wMDA1MSA4LjA5NjgzIDcuMDc5NzhMMi4xOTM3MiA4LjUwMDA1QzEuNzUxMSA4LjYwNjU0IDEuMzI0NDQgOC4yNzM2NiAxLjMyMDA5IDcuODE4NDJMMS4yNjM0NiAxLjg5Mjk3QzEuMjYwMjIgMS41NTQwOCAxLjUzMjMxIDEuMjc2NzQgMS44NzEyIDEuMjczNUMyLjIxMDA4IDEuMjcwMjYgMi40ODc0MiAxLjU0MjM1IDIuNDkwNjYgMS44ODEyNEwyLjUyOTg3IDUuOTgzNDZDNS42OTg2MSAxLjEyNTEzIDEyLjE1MTkgLTAuNDU5OTI3IDE3LjIzNTkgMi40NzUzQzIyLjQ5NjIgNS41MTIzNSAyNC4yOTg1IDEyLjIzODcgMjEuMjYxNSAxNy40OTkxQzE4LjIyNDQgMjIuNzU5NCAxMS40OTgxIDI0LjU2MTcgNi4yMzc3MiAyMS41MjQ3QzUuOTQ0MjIgMjEuMzU1MiA1Ljg0MzY3IDIwLjk3OTkgNi4wMTMxMiAyMC42ODY0QzYuMTgyNTcgMjAuMzkyOSA2LjU1Nzg2IDIwLjI5MjQgNi44NTEzNSAyMC40NjE4QzExLjUyNDcgMjMuMTYgMTcuNTAwNSAyMS41NTg4IDIwLjE5ODcgMTYuODg1NEMyMi44OTY4IDEyLjIxMjEgMjEuMjk1NiA2LjIzNjMgMTYuNjIyMyAzLjUzODE0QzEyLjAwMjUgMC44NzA5MTYgNi4xMDk5OSAyLjQwNTAzIDMuMzY5MDYgNi45NTQ5OFpcIixcbiAgICBmaWxsOiBcImN1cnJlbnRjb2xvclwiXG4gIH1cbikgfSksIHVPID0gKCkgPT4gLyogQF9fUFVSRV9fICovIGUxKFxuICBcInN2Z1wiLFxuICB7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogXCIxNFwiLFxuICAgIGhlaWdodDogXCIxNVwiLFxuICAgIHZpZXdCb3g6IFwiMCAwIDE0IDE1XCIsXG4gICAgZmlsbDogXCJub25lXCIsXG4gICAgY2hpbGRyZW46IFtcbiAgICAgIC8qIEBfX1BVUkVfXyAqLyBjKFxuICAgICAgICBcInBhdGhcIixcbiAgICAgICAge1xuICAgICAgICAgIGQ6IFwiTTEuMzcyNDggMy44ODI2NEw0LjI2ODEgMy4xODU5N0M0LjQ4MjkzIDMuMTM0MjggNC42OTg5OCAzLjI2NjU0IDQuNzUwNjcgMy40ODEzNkM0LjgwMjM1IDMuNjk2MTkgNC42NzAxIDMuOTEyMjQgNC40NTUyOCAzLjk2MzkzTDAuNjA2NTM2IDQuODg5OTJDMC4zMTc5NTIgNC45NTkzNSAwLjAzOTc4MDMgNC43NDIzMSAwLjAzNjk0MzUgNC40NDU1MUwxLjg2NTk5ZS0wNSAwLjU4MjIwMkMtMC4wMDIwOTMxMiAwLjM2MTI1NSAwLjE3NTMwOCAwLjE4MDQzIDAuMzk2MjU1IDAuMTc4MzE4QzAuNjE3MjAyIDAuMTc2MjA2IDAuNzk4MDI3IDAuMzUzNjA4IDAuODAwMTM5IDAuNTc0NTU1TDAuODI1Njk4IDMuMjQ4NjhDMi44OTE3OCAwLjA4MTQ5MjkgNy4wOTg5OSAtMC45NTE3NDUgMTAuNDEzNSAwLjk2MTg4QzEzLjg0MzEgMi45NDIgMTUuMDE4MiA3LjMyNzQ5IDEzLjAzODEgMTAuNzU3MkMxMS4wNTggMTQuMTg2OCA2LjY3MjUxIDE1LjM2MTkgMy4yNDI4NSAxMy4zODE4QzMuMDUxNDkgMTMuMjcxMyAyLjk4NTkzIDEzLjAyNjYgMy4wOTY0MSAxMi44MzUzQzMuMjA2ODkgMTIuNjQzOSAzLjQ1MTU3IDEyLjU3ODQgMy42NDI5MyAxMi42ODg4QzYuNjg5ODggMTQuNDQ4IDEwLjU4NiAxMy40MDQgMTIuMzQ1MiAxMC4zNTcxQzE0LjEwNDMgNy4zMTAxMiAxMy4wNjA0IDMuNDE0IDEwLjAxMzQgMS42NTQ4NEM3LjAwMTM3IC0wLjA4NDE2NTggMy4xNTk1IDAuOTE2MDg0IDEuMzcyNDggMy44ODI2NFpcIixcbiAgICAgICAgICBmaWxsOiBcImN1cnJlbnRjb2xvclwiXG4gICAgICAgIH1cbiAgICAgICksXG4gICAgICAvKiBAX19QVVJFX18gKi8gYyhcbiAgICAgICAgXCJwYXRoXCIsXG4gICAgICAgIHtcbiAgICAgICAgICBkOiBcIk0xMC4zMzk2IDYuODI0ODFINy4xNzk0NVYzLjY2NDcyQzcuMTc5NDUgMy40ODA5OSA3LjAzMjQ2IDMuMzM0MDEgNi44NDg3MyAzLjMzNDAxQzYuNjY1MDEgMy4zMzQwMSA2LjUxODAzIDMuNDgwOTkgNi41MTgwMyAzLjY2NDcyVjcuMTkyMjdDNi41MTgwMyA3LjM3NTk5IDYuNjY1MDEgNy41MjI5NyA2Ljg0ODczIDcuNTIyOTdIMTAuMzc2M0MxMC41NiA3LjUyMjk3IDEwLjcwNyA3LjM3NTk5IDEwLjcwNyA3LjE5MjI3QzEwLjcwNyA3LjAwODU0IDEwLjUyMzMgNi44MjQ4MSAxMC4zMzk2IDYuODI0ODFaXCIsXG4gICAgICAgICAgZmlsbDogXCJjdXJyZW50Y29sb3JcIlxuICAgICAgICB9XG4gICAgICApXG4gICAgXVxuICB9XG4pLCB6TyA9ICgpID0+IC8qIEBfX1BVUkVfXyAqLyBlMShcInN2Z1wiLCB7IHZpZXdCb3g6IFwiMCAwIDI1IDI1XCIsIGZpbGw6IFwibm9uZVwiLCB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLCBjaGlsZHJlbjogW1xuICAvKiBAX19QVVJFX18gKi8gYyhcbiAgICBcInBhdGhcIixcbiAgICB7XG4gICAgICBmaWxsUnVsZTogXCJldmVub2RkXCIsXG4gICAgICBjbGlwUnVsZTogXCJldmVub2RkXCIsXG4gICAgICBkOiBcIk0xLjk4OTgxIDI0Ljc4MUMxLjQ0MjU0IDI0Ljc4MSAwLjk5ODg5MyAyNC4zMzczIDAuOTk4ODkzIDIzLjc5MDFWMS45ODk5MkMwLjk5ODg5MyAxLjQ0MjY1IDEuNDQyNTQgMC45OTkgMS45ODk4MSAwLjk5OUgyMy43OUMyNC4zMzcyIDAuOTk5IDI0Ljc4MDkgMS40NDI2NSAyNC43ODA5IDEuOTg5OTJWMjMuNzkwMUMyNC43ODA5IDI0LjMzNzMgMjQuMzM3MiAyNC43ODEgMjMuNzkgMjQuNzgxSDEuOTg5ODFaTTEuOTg5ODEgNy45MzU0MlYxLjk4OTkySDIzLjc5VjcuOTM1NDJIMS45ODk4MVpNMS45ODk4MSA4LjkyNjMzSDIzLjc5VjE1Ljg2MjdIMS45ODk4MVY4LjkyNjMzWk0xLjk4OTgxIDIzLjc5MDFWMTYuODUzN0gyMy43OVYyMy43OTAxSDEuOTg5ODFaXCIsXG4gICAgICBmaWxsOiBcImN1cnJlbnRDb2xvclwiXG4gICAgfVxuICApLFxuICAvKiBAX19QVVJFX18gKi8gYyhcbiAgICBcInBhdGhcIixcbiAgICB7XG4gICAgICBmaWxsUnVsZTogXCJldmVub2RkXCIsXG4gICAgICBjbGlwUnVsZTogXCJldmVub2RkXCIsXG4gICAgICBkOiBcIk0xLjk4OTgxIDI0Ljg5QzEuMzgyMzQgMjQuODkgMC44ODk4OTMgMjQuMzk3NSAwLjg4OTg5MyAyMy43OTAxVjEuOTg5OTJDMC44ODk4OTMgMS4zODI0NSAxLjM4MjM0IDAuODg5OTk5IDEuOTg5ODEgMC44ODk5OTlIMjMuNzlDMjQuMzk3NCAwLjg4OTk5OSAyNC44ODk5IDEuMzgyNDUgMjQuODg5OSAxLjk4OTkyVjIzLjc5MDFDMjQuODg5OSAyNC4zOTc1IDI0LjM5NzQgMjQuODkgMjMuNzkgMjQuODlIMS45ODk4MVpNMS45ODk4MSA3LjkzNTQyVjEuOTg5OTJIMjMuNzlWNy45MzU0MkgxLjk4OTgxWk0yMy42ODEgNy44MjY0MlYyLjA5ODkySDIuMDk4ODFWNy44MjY0MkgyMy42ODFaTTEuOTg5ODEgOC45MjYzM0gyMy43OVYxNS44NjI3SDEuOTg5ODFWOC45MjYzM1pNMi4wOTg4MSAxNS43NTM3SDIzLjY4MVY5LjAzNTMzSDIuMDk4ODFWMTUuNzUzN1pNMS45ODk4MSAyMy43OTAxVjE2Ljg1MzdIMjMuNzlWMjMuNzkwMUgxLjk4OTgxWk0yMy42ODEgMjMuNjgxMVYxNi45NjI3SDIuMDk4ODFWMjMuNjgxMUgyMy42ODFaTTAuOTk4ODkzIDIzLjc5MDFDMC45OTg4OTMgMjQuMzM3MyAxLjQ0MjU0IDI0Ljc4MSAxLjk4OTgxIDI0Ljc4MUgyMy43OUMyNC4zMzcyIDI0Ljc4MSAyNC43ODA5IDI0LjMzNzMgMjQuNzgwOSAyMy43OTAxVjEuOTg5OTJDMjQuNzgwOSAxLjQ0MjY1IDI0LjMzNzIgMC45OTkgMjMuNzkgMC45OTlIMS45ODk4MUMxLjQ0MjU0IDAuOTk5IDAuOTk4ODkzIDEuNDQyNjUgMC45OTg4OTMgMS45ODk5MlYyMy43OTAxWlwiLFxuICAgICAgZmlsbDogXCJjdXJyZW50Q29sb3JcIlxuICAgIH1cbiAgKVxuXSB9KSwgaE8gPSAoKSA9PiAvKiBAX19QVVJFX18gKi8gZTEoXCJzdmdcIiwgeyB2aWV3Qm94OiBcIjAgMCAyNCAyNFwiLCBmaWxsOiBcIm5vbmVcIiwgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiwgY2hpbGRyZW46IFtcbiAgLyogQF9fUFVSRV9fICovIGMoXG4gICAgXCJwYXRoXCIsXG4gICAge1xuICAgICAgZDogXCJNMjQgNC45VjEuMkMyNCAwLjUwMDAwMSAyMy41IDkuNzQ3NjRlLTA3IDIyLjggOS40NDE2NmUtMDdMMS4yIDBDMC42MDAwMDIgLTIuNjIyNjhlLTA4IDkuNzQ3NjRlLTA3IDAuNSA5LjQ0MTY2ZS0wNyAxLjJMNy43ODA2M2UtMDcgNUM3LjUxODM2ZS0wNyA1LjYgMC41MDAwMDEgNi4yIDEuMiA2LjJMMjIuOCA2LjJDMjMuNSA2LjEgMjQgNS42IDI0IDQuOVpcIixcbiAgICAgIGZpbGw6IFwiY3VycmVudENvbG9yXCJcbiAgICB9XG4gICksXG4gIC8qIEBfX1BVUkVfXyAqLyBjKFxuICAgIFwicGF0aFwiLFxuICAgIHtcbiAgICAgIGQ6IFwiTTI0IDEzLjlWMTAuMUMyNCA5LjUgMjMuNSA5IDIyLjggOUwxLjIgOUMwLjYwMDAwMSA5IDUuODEzNjJlLTA3IDkuNSA1LjUwNzY0ZS0wNyAxMC4yTDMuODQ2NmUtMDcgMTRDMy41ODQzM2UtMDcgMTQuNiAwLjUwMDAwMSAxNS4yIDEuMiAxNS4yTDIyLjggMTUuMkMyMy41IDE1IDI0IDE0LjUgMjQgMTMuOVpcIixcbiAgICAgIGZpbGw6IFwiY3VycmVudENvbG9yXCJcbiAgICB9XG4gICksXG4gIC8qIEBfX1BVUkVfXyAqLyBjKFxuICAgIFwicGF0aFwiLFxuICAgIHtcbiAgICAgIGQ6IFwiTTI0IDIyLjhWMTlDMjQgMTguNCAyMy41IDE3LjggMjIuOCAxNy44SDEuMkMwLjYwMDAwMSAxNy44IDEuOTY3MDFlLTA3IDE4LjMgMS42NjEwM2UtMDcgMTlMMCAyMi44Qy0yLjYyMjY4ZS0wOCAyMy40IDAuNTAwMDAxIDI0IDEuMiAyNEgyMi44QzIzLjUgMjQgMjQgMjMuNSAyNCAyMi44WlwiLFxuICAgICAgZmlsbDogXCJjdXJyZW50Q29sb3JcIlxuICAgIH1cbiAgKVxuXSB9KSwgT08gPSAoKSA9PiAvKiBAX19QVVJFX18gKi8gZTEoXCJzdmdcIiwgeyB2aWV3Qm94OiBcIjAgMCAyNCAyNFwiLCBmaWxsOiBcIm5vbmVcIiwgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiwgY2hpbGRyZW46IFtcbiAgLyogQF9fUFVSRV9fICovIGMoXG4gICAgXCJwYXRoXCIsXG4gICAge1xuICAgICAgZmlsbFJ1bGU6IFwiZXZlbm9kZFwiLFxuICAgICAgY2xpcFJ1bGU6IFwiZXZlbm9kZFwiLFxuICAgICAgZDogXCJNMTAuMDIxMiAxMy4zMzcxQzEwLjYwNyAxMi45NDU4IDExLjI5NTYgMTIuNzM2OSAxMiAxMi43MzY5QzEyLjk0NDYgMTIuNzM2OSAxMy44NTA2IDEzLjExMjEgMTQuNTE4NSAxMy43ODAxQzE1LjE4NjUgMTQuNDQ4IDE1LjU2MTcgMTUuMzUzOSAxNS41NjE3IDE2LjI5ODZDMTUuNTYxNyAxNy4wMDMgMTUuMzUyOCAxNy42OTE2IDE0Ljk2MTUgMTguMjc3M0MxNC41NzAxIDE4Ljg2MzEgMTQuMDEzOCAxOS4zMTk2IDEzLjM2MyAxOS41ODkxQzEyLjcxMjIgMTkuODU4NyAxMS45OTYxIDE5LjkyOTMgMTEuMzA1MiAxOS43OTE4QzEwLjYxNDMgMTkuNjU0NCA5Ljk3OTY0IDE5LjMxNTIgOS40ODE1MiAxOC44MTcxQzguOTgzNDEgMTguMzE5IDguNjQ0MTkgMTcuNjg0MyA4LjUwNjc2IDE2Ljk5MzRDOC4zNjkzMyAxNi4zMDI1IDguNDM5ODcgMTUuNTg2NCA4LjcwOTQ0IDE0LjkzNTZDOC45NzkwMiAxNC4yODQ4IDkuNDM1NTMgMTMuNzI4NSAxMC4wMjEyIDEzLjMzNzFaTTEwLjU2NzEgMTguNDQzMUMxMC45OTEzIDE4LjcyNjUgMTEuNDg5OSAxOC44Nzc3IDEyIDE4Ljg3NzdDMTIuMzM5OSAxOC44ODE4IDEyLjY3NzEgMTguODE3OSAxMi45OTE5IDE4LjY4OThDMTMuMzA2NiAxOC41NjE2IDEzLjU5MjYgMTguMzcxOCAxMy44MzI5IDE4LjEzMTVDMTQuMDczMyAxNy44OTEyIDE0LjI2MzEgMTcuNjA1MiAxNC4zOTEyIDE3LjI5MDRDMTQuNTE5NCAxNi45NzU2IDE0LjU4MzMgMTYuNjM4NCAxNC41NzkyIDE2LjI5ODZDMTQuNTc5MiAxNS43ODg1IDE0LjQyNzkgMTUuMjg5OCAxNC4xNDQ1IDE0Ljg2NTdDMTMuODYxMSAxNC40NDE1IDEzLjQ1ODMgMTQuMTExIDEyLjk4NyAxMy45MTU3QzEyLjUxNTcgMTMuNzIwNSAxMS45OTcyIDEzLjY2OTUgMTEuNDk2OCAxMy43NjlDMTAuOTk2NSAxMy44Njg1IDEwLjUzNyAxNC4xMTQxIDEwLjE3NjMgMTQuNDc0OEM5LjgxNTU4IDE0LjgzNTUgOS41Njk5NCAxNS4yOTUxIDkuNDcwNDIgMTUuNzk1NEM5LjM3MDkgMTYuMjk1NyA5LjQyMTk4IDE2LjgxNDMgOS42MTcxOSAxNy4yODU2QzkuODEyNCAxNy43NTY4IDEwLjE0MyAxOC4xNTk3IDEwLjU2NzEgMTguNDQzMVpcIixcbiAgICAgIGZpbGw6IFwiY3VycmVudGNvbG9yXCJcbiAgICB9XG4gICksXG4gIC8qIEBfX1BVUkVfXyAqLyBjKFxuICAgIFwicGF0aFwiLFxuICAgIHtcbiAgICAgIGZpbGxSdWxlOiBcImV2ZW5vZGRcIixcbiAgICAgIGNsaXBSdWxlOiBcImV2ZW5vZGRcIixcbiAgICAgIGQ6IFwiTTE4LjQ0NzkgMC4xNDgxN0MxOC41NzYyIDAuMTUzMjMzIDE4LjY5NzQgMC4yMDgzNCAxOC43ODU2IDAuMzAxNjkxTDIzLjY5ODMgNS4yMTQzN0MyMy43OTE3IDUuMzAyNTYgMjMuODQ2OCA1LjQyMzc5IDIzLjg1MTggNS41NTIxMVYyMi4xMzI0QzIzLjg0MzkgMjIuNTg1OSAyMy42NjAyIDIzLjAxODcgMjMuMzM5NSAyMy4zMzk1QzIzLjAxODcgMjMuNjYwMyAyMi41ODU5IDIzLjg0MzkgMjIuMTMyNCAyMy44NTE4SDEuODY3NjFDMS40MTQwNSAyMy44NDM5IDAuOTgxMjcxIDIzLjY2MDMgMC42NjA1MDggMjMuMzM5NUMwLjMzOTc0NiAyMy4wMTg3IDAuMTU2MDYgMjIuNTg1OSAwLjE0ODE3IDIyLjEzMjRWMS44Njc2MUMwLjE1NjA2IDEuNDE0MDUgMC4zMzk3NDYgMC45ODEyNzIgMC42NjA1MDggMC42NjA1MUMwLjk4MTI3MSAwLjMzOTc0NyAxLjQxNDA1IDAuMTU2MDYgMS44Njc2MSAwLjE0ODE3SDE4LjQ0NzlaTTUuOTMzODcgMS4xMzA3QzUuODI0NzcgMS4xMzA3IDUuNzM2MzQgMS4yMTkxNCA1LjczNjM0IDEuMzI4MjRWOC41NDc4MkM1LjczNjM0IDguNjU2OTEgNS44MjQ3NyA4Ljc0NTM1IDUuOTMzODcgOC43NDUzNUgxNi44MzhDMTYuOTQ3MSA4Ljc0NTM1IDE3LjAzNTUgOC42NTY5MSAxNy4wMzU1IDguNTQ3ODJWMS4zMjgyNEMxNy4wMzU1IDEuMjE5MTQgMTYuOTQ3MSAxLjEzMDcgMTYuODM4IDEuMTMwN0g1LjkzMzg3Wk0yMi44NjkzIDIyLjEzMjRWNS44NDg4NkMyMi44NjkzIDUuNzk2NDcgMjIuODQ4NSA1Ljc0NjIzIDIyLjgxMTQgNS43MDkxOUwxOC4zNTUyIDEuMjUyOThDMTguMjMwOCAxLjEyODU0IDE4LjAxOCAxLjIxNjY4IDE4LjAxOCAxLjM5MjY2VjkuMjM2NjJDMTguMDE4IDkuMzY2OTEgMTcuOTY2MyA5LjQ5MTg3IDE3Ljg3NDEgOS41ODRDMTcuNzgyIDkuNjc2MTMgMTcuNjU3MSA5LjcyNzg5IDE3LjUyNjggOS43Mjc4OUg1LjI0NTA3QzUuMTE0NzggOS43Mjc4OSA0Ljk4OTgyIDkuNjc2MTMgNC44OTc2OSA5LjU4NEM0LjgwNTU2IDkuNDkxODcgNC43NTM4IDkuMzY2OTEgNC43NTM4IDkuMjM2NjJWMS4zMjgyNEM0Ljc1MzggMS4yMTkxNCA0LjY2NTM3IDEuMTMwNyA0LjU1NjI3IDEuMTMwN0gxLjg2NzYxQzEuNzY5NjggMS4xMjYzNSAxLjY3MTkxIDEuMTQyNDIgMS41ODA1MyAxLjE3NzkxQzEuNDg5MTUgMS4yMTM0IDEuNDA2MTcgMS4yNjc1MyAxLjMzNjg1IDEuMzM2ODVDMS4yNjc1MyAxLjQwNjE2IDEuMjEzNDEgMS40ODkxNSAxLjE3NzkyIDEuNTgwNTNDMS4xNDI0MyAxLjY3MTkxIDEuMTI2MzUgMS43Njk2OCAxLjEzMDcgMS44Njc2MVYyMi4xMzI0QzEuMTI2MzUgMjIuMjMwMyAxLjE0MjQzIDIyLjMyODEgMS4xNzc5MiAyMi40MTk1QzEuMjEzNDEgMjIuNTEwOCAxLjI2NzUzIDIyLjU5MzggMS4zMzY4NSAyMi42NjMyQzEuNDA2MTcgMjIuNzMyNSAxLjQ4OTE1IDIyLjc4NjYgMS41ODA1MyAyMi44MjIxQzEuNjcxOTEgMjIuODU3NiAxLjc2OTY4IDIyLjg3MzcgMS44Njc2MSAyMi44NjkzSDIyLjEzMjRDMjIuMjMwMyAyMi44NzM3IDIyLjMyODEgMjIuODU3NiAyMi40MTk1IDIyLjgyMjFDMjIuNTEwOCAyMi43ODY2IDIyLjU5MzggMjIuNzMyNSAyMi42NjMxIDIyLjY2MzJDMjIuNzMyNSAyMi41OTM4IDIyLjc4NjYgMjIuNTEwOCAyMi44MjIxIDIyLjQxOTVDMjIuODU3NiAyMi4zMjgxIDIyLjg3MzcgMjIuMjMwMyAyMi44NjkzIDIyLjEzMjRaXCIsXG4gICAgICBmaWxsOiBcImN1cnJlbnRjb2xvclwiXG4gICAgfVxuICApLFxuICAvKiBAX19QVVJFX18gKi8gYyhcbiAgICBcInBhdGhcIixcbiAgICB7XG4gICAgICBmaWxsUnVsZTogXCJldmVub2RkXCIsXG4gICAgICBjbGlwUnVsZTogXCJldmVub2RkXCIsXG4gICAgICBkOiBcIk0xOC40NDc5IDAuMTQ4MTdDMTguNTc2MiAwLjE1MzIzMyAxOC42OTc0IDAuMjA4MzQgMTguNzg1NiAwLjMwMTY5MUwyMy42OTgzIDUuMjE0MzdDMjMuNzkxNyA1LjMwMjU2IDIzLjg0NjggNS40MjM3OSAyMy44NTE4IDUuNTUyMTFWMjIuMTMyNEMyMy44NDM5IDIyLjU4NTkgMjMuNjYwMiAyMy4wMTg3IDIzLjMzOTUgMjMuMzM5NUMyMy4wMTg3IDIzLjY2MDMgMjIuNTg1OSAyMy44NDM5IDIyLjEzMjQgMjMuODUxOEgxLjg2NzYxQzEuNDE0MDUgMjMuODQzOSAwLjk4MTI3MSAyMy42NjAzIDAuNjYwNTA4IDIzLjMzOTVDMC4zMzk3NDYgMjMuMDE4NyAwLjE1NjA2IDIyLjU4NTkgMC4xNDgxNyAyMi4xMzI0VjEuODY3NjFDMC4xNTYwNiAxLjQxNDA1IDAuMzM5NzQ2IDAuOTgxMjcyIDAuNjYwNTA4IDAuNjYwNTFDMC45ODEyNzEgMC4zMzk3NDcgMS40MTQwNSAwLjE1NjA2IDEuODY3NjEgMC4xNDgxN0gxOC40NDc5Wk0yMy44MDE3IDUuMTA4MjFDMjMuOTIyMiA1LjIyMjg3IDIzLjk5MzMgNS4zOCAyMy45OTk5IDUuNTQ2MjdMMjQuMDAwMSA1LjU1MjExTDI0IDIyLjEzNUMyMy45OTE0IDIyLjYyNjkgMjMuNzkyMiAyMy4wOTYzIDIzLjQ0NDIgMjMuNDQ0MkMyMy4wOTYzIDIzLjc5MjIgMjIuNjI2OSAyMy45OTE0IDIyLjEzNSAyNEwyMi4xMzI0IDI0TDEuODY1MDMgMjRDMS4zNzMwOCAyMy45OTE0IDAuOTAzNjY3IDIzLjc5MjIgMC41NTU3NTIgMjMuNDQ0MkMwLjIwNzgzNyAyMy4wOTYzIDAuMDA4NjAyNDIgMjIuNjI2OSA0LjQ4Mjg1ZS0wNSAyMi4xMzVMMCAyMi4xMzI0TDIuMjQxNDJlLTA1IDEuODY1MDNDMC4wMDg1ODAwMSAxLjM3MzA4IDAuMjA3ODM3IDAuOTAzNjY4IDAuNTU1NzUyIDAuNTU1NzUzQzAuOTAzNjY3IDAuMjA3ODM4IDEuMzczMDggMC4wMDg2MDI0MiAxLjg2NTAzIDQuNDgyODVlLTA1TDEuODY3NjEgMEwxOC40NTM3IDIuMjQxNDJlLTA1QzE4LjYyIDAuMDA2NTgyMTEgMTguNzc3MSAwLjA3NzgxOTIgMTguODkxOCAwLjE5ODM0OEwyMy44MDE3IDUuMTA4MjFaTTIyLjcyMTEgMjIuMTMyNFY1Ljg0ODg2QzIyLjcyMTEgNS44MzU3NyAyMi43MTU5IDUuODIzMiAyMi43MDY3IDUuODEzOTRMMTguMjUwNSAxLjM1Nzc0QzE4LjIxOTQgMS4zMjY2MyAxOC4xNjYyIDEuMzQ4NjYgMTguMTY2MiAxLjM5MjY2VjkuMjM2NjJDMTguMTY2MiA5LjQwNjIgMTguMDk4OCA5LjU2ODg0IDE3Ljk3ODkgOS42ODg3NUMxNy44NTkgOS44MDg2NyAxNy42OTYzIDkuODc2MDMgMTcuNTI2OCA5Ljg3NjAzSDUuMjQ1MDdDNS4wNzU0OSA5Ljg3NjAzIDQuOTEyODUgOS44MDg2NyA0Ljc5MjkzIDkuNjg4NzVDNC42NzMwMiA5LjU2ODg0IDQuNjA1NjUgOS40MDYyIDQuNjA1NjUgOS4yMzY2MlYxLjMyODI0QzQuNjA1NjUgMS4zMDA5NiA0LjU4MzU1IDEuMjc4ODUgNC41NTYyNyAxLjI3ODg1SDEuODYxMDFDMS43ODM2MyAxLjI3NTQxIDEuNzA2MzcgMS4yODc5NyAxLjYzNDE3IDEuMzE2MDFDMS41NjE5NiAxLjM0NDA2IDEuNDk2MzggMS4zODY4MyAxLjQ0MTYgMS40NDE2QzEuMzg2ODMgMS40OTYzOCAxLjM0NDA2IDEuNTYxOTYgMS4zMTYwMSAxLjYzNDE3QzEuMjg3OTcgMS43MDYzOCAxLjI3NTI2IDEuNzgzNjMgMS4yNzg3MSAxLjg2MTAyTDEuMjc5IDEuODY3NjFMMS4yNzg4NSAyMi4xMzlDMS4yNzU0MSAyMi4yMTY0IDEuMjg3OTcgMjIuMjkzNiAxLjMxNjAxIDIyLjM2NThDMS4zNDQwNiAyMi40MzggMS4zODY4MyAyMi41MDM2IDEuNDQxNiAyMi41NTg0QzEuNDk2MzggMjIuNjEzMiAxLjU2MTk2IDIyLjY1NTkgMS42MzQxNiAyMi42ODRMMS41ODA1MyAyMi44MjIxQzEuNDg5MTUgMjIuNzg2NiAxLjQwNjE3IDIyLjczMjUgMS4zMzY4NSAyMi42NjMyQzEuMjY3NTMgMjIuNTkzOCAxLjIxMzQxIDIyLjUxMDggMS4xNzc5MiAyMi40MTk1QzEuMTQyNDMgMjIuMzI4MSAxLjEyNjM1IDIyLjIzMDMgMS4xMzA3IDIyLjEzMjRWMS44Njc2MUMxLjEyNjM1IDEuNzY5NjggMS4xNDI0MyAxLjY3MTkxIDEuMTc3OTIgMS41ODA1M0MxLjIxMzQxIDEuNDg5MTUgMS4yNjc1MyAxLjQwNjE2IDEuMzM2ODUgMS4zMzY4NUMxLjQwNjE3IDEuMjY3NTMgMS40ODkxNSAxLjIxMzQgMS41ODA1MyAxLjE3NzkxQzEuNjcxOTEgMS4xNDI0MiAxLjc2OTY4IDEuMTI2MzUgMS44Njc2MSAxLjEzMDdINC41NTYyN0M0LjY2NTM3IDEuMTMwNyA0Ljc1MzggMS4yMTkxNCA0Ljc1MzggMS4zMjgyNFY5LjIzNjYyQzQuNzUzOCA5LjM2NjkxIDQuODA1NTYgOS40OTE4NyA0Ljg5NzY5IDkuNTg0QzQuOTg5ODIgOS42NzYxMyA1LjExNDc4IDkuNzI3ODkgNS4yNDUwNyA5LjcyNzg5SDE3LjUyNjhDMTcuNjU3MSA5LjcyNzg5IDE3Ljc4MiA5LjY3NjEzIDE3Ljg3NDEgOS41ODRDMTcuOTY2MyA5LjQ5MTg3IDE4LjAxOCA5LjM2NjkxIDE4LjAxOCA5LjIzNjYyVjEuMzkyNjZDMTguMDE4IDEuMjE2NjggMTguMjMwOCAxLjEyODU0IDE4LjM1NTIgMS4yNTI5OEwyMi44MTE0IDUuNzA5MTlDMjIuODQ4NSA1Ljc0NjIzIDIyLjg2OTMgNS43OTY0NyAyMi44NjkzIDUuODQ4ODZWMjIuMTMyNEMyMi44NzM3IDIyLjIzMDMgMjIuODU3NiAyMi4zMjgxIDIyLjgyMjEgMjIuNDE5NUMyMi43ODY2IDIyLjUxMDggMjIuNzMyNSAyMi41OTM4IDIyLjY2MzEgMjIuNjYzMkMyMi41OTM4IDIyLjczMjUgMjIuNTEwOCAyMi43ODY2IDIyLjQxOTUgMjIuODIyMUMyMi4zMjgxIDIyLjg1NzYgMjIuMjMwMyAyMi44NzM3IDIyLjEzMjQgMjIuODY5M0gxLjg2NzYxQzEuNzY5NjggMjIuODczNyAxLjY3MTkxIDIyLjg1NzYgMS41ODA1MyAyMi44MjIxTDEuNjM0MTYgMjIuNjg0QzEuNzA2MzcgMjIuNzEyIDEuNzgzNjMgMjIuNzI0NyAxLjg2MTAyIDIyLjcyMTNMMS44Njc2MSAyMi43MjFMMjIuMTM5IDIyLjcyMTFDMjIuMjE2NCAyMi43MjQ2IDIyLjI5MzYgMjIuNzEyIDIyLjM2NTggMjIuNjg0QzIyLjQzOCAyMi42NTU5IDIyLjUwMzYgMjIuNjEzMiAyMi41NTg0IDIyLjU1ODRDMjIuNjEzMiAyMi41MDM2IDIyLjY1NTkgMjIuNDM4IDIyLjY4NCAyMi4zNjU4QzIyLjcxMiAyMi4yOTM2IDIyLjcyNDcgMjIuMjE2NCAyMi43MjEzIDIyLjEzOUwyMi43MjExIDIyLjEzMjRaTTEyIDE4LjcyOTZIMTIuMDAxOEMxMi4zMjE5IDE4LjczMzUgMTIuNjM5NSAxOC42NzMzIDEyLjkzNiAxOC41NTI2QzEzLjIzMjUgMTguNDMxOSAxMy41MDE4IDE4LjI1MzEgMTMuNzI4MiAxOC4wMjY3QzEzLjk1NDUgMTcuODAwNCAxNC4xMzMzIDE3LjUzMSAxNC4yNTQgMTcuMjM0NkMxNC4zNzQ3IDE2LjkzODEgMTQuNDM0OSAxNi42MjA0IDE0LjQzMSAxNi4zMDA0TDE0LjQzMSAxNi4yOTg2QzE0LjQzMSAxNS44MTc4IDE0LjI4ODQgMTUuMzQ3OCAxNC4wMjEzIDE0Ljk0OEMxMy43NTQyIDE0LjU0ODIgMTMuMzc0NSAxNC4yMzY2IDEyLjkzMDMgMTQuMDUyNkMxMi40ODYxIDEzLjg2ODYgMTEuOTk3MyAxMy44MjA1IDExLjUyNTggMTMuOTE0M0MxMS4wNTQyIDE0LjAwODEgMTAuNjIxIDE0LjIzOTYgMTAuMjgxIDE0LjU3OTZDOS45NDEwNiAxNC45MTk2IDkuNzA5NTIgMTUuMzUyNyA5LjYxNTcyIDE1LjgyNDNDOS41MjE5MiAxNi4yOTU5IDkuNTcwMDYgMTYuNzg0NyA5Ljc1NDA2IDE3LjIyODlDOS45MzgwNiAxNy42NzMxIDEwLjI0OTYgMTguMDUyOCAxMC42NDk0IDE4LjMxOTlDMTEuMDQ5MiAxOC41ODcgMTEuNTE5MiAxOC43Mjk2IDEyIDE4LjcyOTZaTTUuOTMzODcgOC41OTcySDE2LjgzOEMxNi44NjUyIDguNTk3MiAxNi44ODczIDguNTc1MSAxNi44ODczIDguNTQ3ODJWMS4zMjgyNEMxNi44ODczIDEuMzAwOTYgMTYuODY1MiAxLjI3ODg1IDE2LjgzOCAxLjI3ODg1SDUuOTMzODdDNS45MDY1OSAxLjI3ODg1IDUuODg0NDggMS4zMDA5NiA1Ljg4NDQ4IDEuMzI4MjRWOC41NDc4MkM1Ljg4NDQ4IDguNTc1MSA1LjkwNjU5IDguNTk3MiA1LjkzMzg3IDguNTk3MlpNOS45Mzg5NCAxMy4yMTRDMTAuNTQ5IDEyLjgwNjMgMTEuMjY2MyAxMi41ODg3IDEyIDEyLjU4ODdDMTIuOTgzOSAxMi41ODg3IDEzLjkyNzUgMTIuOTc5NiAxNC42MjMzIDEzLjY3NTNDMTUuMzE5IDE0LjM3MSAxNS43MDk5IDE1LjMxNDcgMTUuNzA5OSAxNi4yOTg2QzE1LjcwOTkgMTcuMDMyMyAxNS40OTIzIDE3Ljc0OTYgMTUuMDg0NiAxOC4zNTk2QzE0LjY3NyAxOC45Njk3IDE0LjA5NzYgMTkuNDQ1MiAxMy40MTk3IDE5LjcyNkMxMi43NDE4IDIwLjAwNjggMTEuOTk1OSAyMC4wODAzIDExLjI3NjMgMTkuOTM3MUMxMC41NTY2IDE5Ljc5NCA5Ljg5NTYgMTkuNDQwNyA5LjM3Njc3IDE4LjkyMThDOC44NTc5NCAxOC40MDMgOC41MDQ2MSAxNy43NDIgOC4zNjE0NiAxNy4wMjIzQzguMjE4MzIgMTYuMzAyNyA4LjI5MTc5IDE1LjU1NjggOC41NzI1NyAxNC44Nzg5QzguODUzMzYgMTQuMjAxIDkuMzI4ODYgMTMuNjIxNiA5LjkzODk0IDEzLjIxNFpNNS43MzYzNCAxLjMyODI0QzUuNzM2MzQgMS4yMTkxNCA1LjgyNDc3IDEuMTMwNyA1LjkzMzg3IDEuMTMwN0gxNi44MzhDMTYuOTQ3MSAxLjEzMDcgMTcuMDM1NSAxLjIxOTE0IDE3LjAzNTUgMS4zMjgyNFY4LjU0NzgyQzE3LjAzNTUgOC42NTY5MSAxNi45NDcxIDguNzQ1MzUgMTYuODM4IDguNzQ1MzVINS45MzM4N0M1LjgyNDc3IDguNzQ1MzUgNS43MzYzNCA4LjY1NjkxIDUuNzM2MzQgOC41NDc4MlYxLjMyODI0Wk0xMiAxMi43MzY5QzExLjI5NTYgMTIuNzM2OSAxMC42MDcgMTIuOTQ1OCAxMC4wMjEyIDEzLjMzNzFDOS40MzU1MyAxMy43Mjg1IDguOTc5MDIgMTQuMjg0OCA4LjcwOTQ0IDE0LjkzNTZDOC40Mzk4NyAxNS41ODY0IDguMzY5MzMgMTYuMzAyNSA4LjUwNjc2IDE2Ljk5MzRDOC42NDQxOSAxNy42ODQzIDguOTgzNDEgMTguMzE5IDkuNDgxNTIgMTguODE3MUM5Ljk3OTY0IDE5LjMxNTIgMTAuNjE0MyAxOS42NTQ0IDExLjMwNTIgMTkuNzkxOEMxMS45OTYxIDE5LjkyOTMgMTIuNzEyMiAxOS44NTg3IDEzLjM2MyAxOS41ODkxQzE0LjAxMzggMTkuMzE5NiAxNC41NzAxIDE4Ljg2MzEgMTQuOTYxNSAxOC4yNzczQzE1LjM1MjggMTcuNjkxNiAxNS41NjE3IDE3LjAwMyAxNS41NjE3IDE2LjI5ODZDMTUuNTYxNyAxNS4zNTM5IDE1LjE4NjUgMTQuNDQ4IDE0LjUxODUgMTMuNzgwMUMxMy44NTA2IDEzLjExMjEgMTIuOTQ0NiAxMi43MzY5IDEyIDEyLjczNjlaTTEyIDE4Ljg3NzdDMTEuNDg5OSAxOC44Nzc3IDEwLjk5MTMgMTguNzI2NSAxMC41NjcxIDE4LjQ0MzFDMTAuMTQzIDE4LjE1OTcgOS44MTI0IDE3Ljc1NjggOS42MTcxOSAxNy4yODU2QzkuNDIxOTggMTYuODE0MyA5LjM3MDkgMTYuMjk1NyA5LjQ3MDQyIDE1Ljc5NTRDOS41Njk5NCAxNS4yOTUxIDkuODE1NTggMTQuODM1NSAxMC4xNzYzIDE0LjQ3NDhDMTAuNTM3IDE0LjExNDEgMTAuOTk2NSAxMy44Njg1IDExLjQ5NjggMTMuNzY5QzExLjk5NzIgMTMuNjY5NSAxMi41MTU3IDEzLjcyMDUgMTIuOTg3IDEzLjkxNTdDMTMuNDU4MyAxNC4xMTEgMTMuODYxMSAxNC40NDE1IDE0LjE0NDUgMTQuODY1N0MxNC40Mjc5IDE1LjI4OTggMTQuNTc5MiAxNS43ODg1IDE0LjU3OTIgMTYuMjk4NkMxNC41ODMzIDE2LjYzODQgMTQuNTE5NCAxNi45NzU2IDE0LjM5MTIgMTcuMjkwNEMxNC4yNjMxIDE3LjYwNTIgMTQuMDczMyAxNy44OTEyIDEzLjgzMjkgMTguMTMxNUMxMy41OTI2IDE4LjM3MTggMTMuMzA2NiAxOC41NjE2IDEyLjk5MTkgMTguNjg5OEMxMi42NzcxIDE4LjgxNzkgMTIuMzM5OSAxOC44ODE4IDEyIDE4Ljg3NzdaXCIsXG4gICAgICBmaWxsOiBcImN1cnJlbnRjb2xvclwiXG4gICAgfVxuICApXG5dIH0pLCBmTyA9ICgpID0+IC8qIEBfX1BVUkVfXyAqLyBjKFwic3ZnXCIsIHsgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiwgdmlld0JveDogXCIwIDAgMjUgMjRcIiwgZmlsbDogXCJub25lXCIsIGNoaWxkcmVuOiAvKiBAX19QVVJFX18gKi8gYyhcbiAgXCJwYXRoXCIsXG4gIHtcbiAgICBmaWxsUnVsZTogXCJldmVub2RkXCIsXG4gICAgY2xpcFJ1bGU6IFwiZXZlbm9kZFwiLFxuICAgIGQ6IFwiTTIzLjggNS4xTDE4LjkgMC4yQzE4LjggMC4xIDE4LjYgMCAxOC41IDBIMS45QzEuNCAwIDAuOSAwLjIgMC42IDAuNkMwLjIgMC45IDAgMS40IDAgMS45VjIyLjJDMCAyMi43IDAuMiAyMy4yIDAuNiAyMy41QzAuOSAyMy44IDEuNCAyNCAxLjkgMjRIMjIuMkMyMi43IDI0IDIzLjIgMjMuOCAyMy41IDIzLjRDMjMuOCAyMy4xIDI0IDIyLjYgMjQuMSAyMi4xVjUuNkMyNCA1LjQgMjMuOSA1LjIgMjMuOCA1LjFaTTE0LjQgMTcuM0MxNC4zIDE3LjYgMTQuMSAxNy45IDEzLjggMTguMUMxMy41IDE4LjMgMTMuMyAxOC41IDEzIDE4LjdDMTIuNyAxOC44IDEyLjQgMTguOSAxMiAxOC45QzExLjUgMTguOSAxMSAxOC44IDEwLjYgMTguNUMxMC4yIDE4LjIgOS44IDE3LjggOS42IDE3LjNDOS40IDE2LjggOS40IDE2LjMgOS40IDE1LjhDOS41IDE1LjMgOS44IDE0LjggMTAuMSAxNC41QzEwLjQgMTQuMiAxMC45IDEzLjkgMTEuNCAxMy44QzExLjkgMTMuNyAxMi40IDEzLjggMTIuOSAxMy45QzEzLjQgMTQuMSAxMy44IDE0LjQgMTQuMSAxNC45QzE0LjQgMTUuMyAxNC41IDE1LjggMTQuNSAxNi4zQzE0LjYgMTYuNiAxNC41IDE3IDE0LjQgMTcuM1pNMTcgOC42QzE3IDguNyAxNi45IDguOCAxNi44IDguOEg1LjhMNS43IDguN1YxLjNDNS43IDEuMiA1LjggMS4xIDUuOSAxLjFIMTYuOEMxNyAxLjEgMTcgMS4yIDE3IDEuM1Y4LjZaXCIsXG4gICAgZmlsbDogXCJjdXJyZW50Y29sb3JcIlxuICB9XG4pIH0pLCBnTyA9ICgpID0+IC8qIEBfX1BVUkVfXyAqLyBjKFwic3ZnXCIsIHsgdmlld0JveDogXCIwIDAgMjYgMjZcIiwgZmlsbDogXCJub25lXCIsIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsIGNoaWxkcmVuOiAvKiBAX19QVVJFX18gKi8gYyhcbiAgXCJwYXRoXCIsXG4gIHtcbiAgICBmaWxsUnVsZTogXCJldmVub2RkXCIsXG4gICAgY2xpcFJ1bGU6IFwiZXZlbm9kZFwiLFxuICAgIGQ6IFwiTTguNTQzMDEgNC43NTg3OUM4LjU0MzAxIDYuODQ1NjggNi44NDgzOCA4LjU0MDMxIDQuNzYxNDkgOC41NDAzMUMyLjY3NDYgOC41NDAzMSAwLjk3OTk4IDYuODQ1NjggMC45Nzk5OCA0Ljc1ODc5QzAuOTc5OTggMi42NzE5IDIuNjc0NiAwLjk3NzI4IDQuNzYxNDkgMC45NzcyOEM2Ljg0ODM4IDAuOTc3MjggOC41NDMwMSAyLjY3MTkgOC41NDMwMSA0Ljc1ODc5Wk0xLjAyMDI5IDE3LjQ1OTdIOC41ODMzMlYyNS4wMjI3SDEuMDIwMjlWMTcuNDU5N1pNMjEuMTk4NCAyNS4wMjI3QzIzLjI4NTMgMjUuMDIyNyAyNC45OCAyMy4zMjgxIDI0Ljk4IDIxLjI0MTJDMjQuOTggMTkuMTUzOCAyMy4yODUzIDE3LjQ1OTcgMjEuMTk4NCAxNy40NTk3QzE5LjExMTYgMTcuNDU5NyAxNy40MTY5IDE5LjE1MzggMTcuNDE2OSAyMS4yNDEyQzE3LjQxNjkgMjMuMzI4MSAxOS4xMTE2IDI1LjAyMjcgMjEuMTk4NCAyNS4wMjI3Wk0yMS4yNDE0IDAuOTc5NzIxTDI1LjAyMDQgNC43NTg3MUwyMS4yNDE0IDguNTM3N0wxNy40NjI0IDQuNzU4NzFMMjEuMjQxNCAwLjk3OTcyMVpNMTIuOTEwOSAxOS4yNTNMMTIuODg4MiAxOS4yNTA1TDEyLjg2NSAxOS4yNDk1TDEyLjg0MjMgMTkuMjQ5TDEyLjgxOTEgMTkuMjVMMTIuNzk2NCAxOS4yNTE1TDEyLjc3MzMgMTkuMjU0NkwxMi43NTA2IDE5LjI1ODZMMTIuNzI3OSAxOS4yNjM2TDEyLjcwNTIgMTkuMjcwMkwxMi42ODMgMTkuMjc3MkwxMi42NjA4IDE5LjI4NThMMTIuNjM5MSAxOS4yOTU0TDEyLjYxNzUgMTkuMzA2NUwxMi41OTYzIDE5LjMxODFMMTIuNTc1NiAxOS4zMzEyTDEwLjUwNTQgMjAuNzA1NkwxMC40ODU3IDIwLjcxOTNMMTAuNDY3NSAyMC43MzM5TDEwLjQ0OTkgMjAuNzQ5TDEwLjQzMzMgMjAuNzY1MUwxMC40MTk2IDIwLjc3OThMMTAuNDE4NiAyMC43ODAzTDEwLjQwMSAyMC43ODk4TDEwLjM4MzggMjAuNzk5OUwxMC4zNjcyIDIwLjgxMUwxMC4zNTExIDIwLjgyMjFMMTAuMzM1NCAyMC44MzQyTDEwLjMxOTggMjAuODQ2OEwxMC4zMDUyIDIwLjg1OTlMMTAuMjkxMSAyMC44NzM1TDEwLjI3NzUgMjAuODg4MkwxMC4yNjM5IDIwLjkwMjhMMTAuMjUxMiAyMC45MTc5TDEwLjIzOTYgMjAuOTM0TDEwLjIyODEgMjAuOTUwMkwxMC4yMTcgMjAuOTY2OEwxMC4yMDY5IDIwLjk4NEwxMC4xOTczIDIxLjAwMTZMMTAuMTg4NyAyMS4wMTkzTDEwLjE4MDcgMjEuMDM3NEwxMC4xNzMxIDIxLjA1NjZMMTAuMTY2IDIxLjA3NTJMMTAuMTYgMjEuMDk0OUwxMC4xNTQ5IDIxLjExNDZMMTAuMTUwNCAyMS4xMzQyTDEwLjE0NjkgMjEuMTU0OUwxMC4xNDM5IDIxLjE3NTFMMTAuMTQxOCAyMS4xOTYyTDEwLjE0MDMgMjEuMjE2OUwxMC4xMzk4IDIxLjIzODZMMTAuMTQwMyAyMS4yNTk4TDEwLjE0MTggMjEuMjgwNEwxMC4xNDM5IDIxLjMwMTZMMTAuMTQ2OSAyMS4zMjE4TDEwLjE1MDQgMjEuMzQyNUwxMC4xNTQ5IDIxLjM2MjFMMTAuMTYgMjEuMzgxOEwxMC4xNjYgMjEuNDAxNEwxMC4xNzMxIDIxLjQyMDZMMTAuMTgwNyAyMS40MzkzTDEwLjE4ODcgMjEuNDU3NEwxMC4xOTczIDIxLjQ3NTFMMTAuMjA2OSAyMS40OTI3TDEwLjIxNyAyMS41MDk4TDEwLjIyODEgMjEuNTI2NUwxMC4yMzk2IDIxLjU0MjZMMTAuMjUxMiAyMS41NTg4TDEwLjI2MzkgMjEuNTczOUwxMC4yNzc1IDIxLjU4ODVMMTAuMjkxMSAyMS42MDMxTDEwLjMwNTIgMjEuNjE2N0wxMC4zMTk4IDIxLjYyOThMMTAuMzM1NCAyMS42NDI1TDEwLjM1MTEgMjEuNjU0NkwxMC4zNjcyIDIxLjY2NjFMMTAuMzgzOCAyMS42NzY3TDEwLjQwMSAyMS42ODY4TDEwLjQxMjEgMjEuNjkyOUwxMC40MTc2IDIxLjY5OTlMMTAuNDMzMyAyMS43MTY2TDEwLjQ0OTkgMjEuNzMyN0wxMC40Njc1IDIxLjc0NzhMMTAuNDg1NyAyMS43NjI1TDEwLjUwNTQgMjEuNzc2MUwxMi41NzU2IDIzLjE1MDVMMTIuNTk2MyAyMy4xNjM2TDEyLjYxNzUgMjMuMTc1MkwxMi42MzkxIDIzLjE4NjNMMTIuNjYwOCAyMy4xOTU5TDEyLjY4MyAyMy4yMDQ1TDEyLjcwNTIgMjMuMjExNUwxMi43Mjc5IDIzLjIxODFMMTIuNzUwNiAyMy4yMjMxTDEyLjc3MzMgMjMuMjI3MkwxMi43OTY0IDIzLjIzMDJMMTIuODE5MSAyMy4yMzE3TDEyLjg0MjMgMjMuMjMyN0gxMi44NjVMMTIuODg4MiAyMy4yMzEyTDEyLjkxMDkgMjMuMjI4N0wxMi45MzM2IDIzLjIyNTFMMTIuOTU2MyAyMy4yMjA2TDEyLjk3ODUgMjMuMjE1MUwxMy4wMDAxIDIzLjIwODVMMTMuMDIxOCAyMy4yMDA5TDEzLjA0MzUgMjMuMTkyNEwxMy4wNjQyIDIzLjE4MjhMMTMuMDg0OSAyMy4xNzIyTDEzLjEwNSAyMy4xNjA2TDEzLjEyNDcgMjMuMTQ4TDEzLjE0MzMgMjMuMTM0NEwxMy4xNjIgMjMuMTE5OEwxMy4xODAxIDIzLjEwNDZMMTMuMTk3MyAyMy4wODhMMTMuMjEzNCAyMy4wNzA0TDEzLjIyOTYgMjMuMDUyMkwxMy4yNDQ3IDIzLjAzMjVMMTMuMzExNyAyMi45NDE4TDEzLjMyNTQgMjIuOTIyNkwxMy4zMzc1IDIyLjkwMjVMMTMuMzQ5MSAyMi44ODIzTDEzLjM1OTEgMjIuODYxNkwxMy4zNjc3IDIyLjg0MDRMMTMuMzc1OCAyMi44MTkzTDEzLjM4MjMgMjIuNzk3NkwxMy4zODc5IDIyLjc3NTlMMTMuMzkyNCAyMi43NTQyTDEzLjM5NTQgMjIuNzMyTDEzLjM5NzUgMjIuNzA5OEwxMy4zOTg1IDIyLjY4NzdWMjIuNjY1NUwxMy4zOTc1IDIyLjY0MzhMMTMuMzk1NCAyMi42MjE2TDEzLjM5MTkgMjIuNTk5OUwxMy4zODc5IDIyLjU3ODNMMTMuMzgyMyAyMi41NTcxTDEzLjM3NTggMjIuNTM1OUwxMy4zNjgyIDIyLjUxNTJMMTMuMzU5NiAyMi40OTQ2TDEzLjM1MDEgMjIuNDc0NEwxMy4zMzk1IDIyLjQ1NDdMMTMuMzI3OSAyMi40MzYxTDEzLjMxNTMgMjIuNDE3NEwxMy4zMDE3IDIyLjM5OTNMMTMuMjg3IDIyLjM4MjFMMTMuMjcxNCAyMi4zNjVMMTMuMjU1MyAyMi4zNDkzTDEzLjIzNzYgMjIuMzMzN0wxMy4yMTkgMjIuMzE5NkwxMy4xOTk4IDIyLjMwNkwxMi4zNjg0IDIxLjc1MzlIMTUuNjc0OUwxNS42OTYxIDIxLjc1MzRMMTUuNzE2OCAyMS43NTI0TDE1LjczOCAyMS43NTA0TDE1Ljc1ODEgMjEuNzQ3M0wxNS43Nzg4IDIxLjc0MzNMMTUuNzk4NSAyMS43Mzg4TDE1LjgxODEgMjEuNzMzN0wxNS44Mzc4IDIxLjcyNzdMMTUuODU2OSAyMS43MjExTDE1Ljg3NTYgMjEuNzEzNUwxNS44OTM4IDIxLjcwNTVMMTUuOTExOSAyMS42OTY0TDE1LjkyOSAyMS42ODY4TDE1Ljk0NjIgMjEuNjc2N0wxNS45NjI4IDIxLjY2NjFMMTUuOTc5NSAyMS42NTQ2TDE1Ljk5NTEgMjEuNjQyNUwxNi4wMTAyIDIxLjYyOThMMTYuMDI0OCAyMS42MTY3TDE2LjAzOTUgMjEuNjAzMUwxNi4wNTMxIDIxLjU4ODVMMTYuMDY2MiAyMS41NzM5TDE2LjA3ODggMjEuNTU4OEwxNi4wOTA5IDIxLjU0MjZMMTYuMTAyNSAyMS41MjY1TDE2LjExMzEgMjEuNTA5OEwxNi4xMjMyIDIxLjQ5MjdMMTYuMTMyNyAyMS40NzUxTDE2LjE0MTggMjEuNDU3NEwxNi4xNDk5IDIxLjQzOTNMMTYuMTU3NSAyMS40MjA2TDE2LjE2NCAyMS40MDE0TDE2LjE3MDEgMjEuMzgxOEwxNi4xNzUxIDIxLjM2MjFMMTYuMTc5NiAyMS4zNDI1TDE2LjE4MzcgMjEuMzIxOEwxNi4xODY3IDIxLjMwMTZMMTYuMTg4NyAyMS4yODA0TDE2LjE4OTcgMjEuMjU5OEwxNi4xOTAyIDIxLjIzODZMMTYuMTg5NyAyMS4yMTY5TDE2LjE4ODcgMjEuMTk2MkwxNi4xODY3IDIxLjE3NTFMMTYuMTgzNyAyMS4xNTQ5TDE2LjE3OTYgMjEuMTM0MkwxNi4xNzUxIDIxLjExNDZMMTYuMTcwMSAyMS4wOTQ5TDE2LjE2NCAyMS4wNzUyTDE2LjE1NzUgMjEuMDU2NkwxNi4xNDk5IDIxLjAzNzRMMTYuMTQxOCAyMS4wMTkzTDE2LjEzMjcgMjEuMDAxNkwxNi4xMjMyIDIwLjk4NEwxNi4xMTMxIDIwLjk2NjhMMTYuMTAyNSAyMC45NTAyTDE2LjA5MDkgMjAuOTM0TDE2LjA3ODggMjAuOTE3OUwxNi4wNjYyIDIwLjkwMjhMMTYuMDUzMSAyMC44ODgyTDE2LjAzOTUgMjAuODczNUwxNi4wMjQ4IDIwLjg1OTlMMTYuMDEwMiAyMC44NDY4TDE1Ljk5NTEgMjAuODM0MkwxNS45Nzk1IDIwLjgyMjFMMTUuOTYyOCAyMC44MTFMMTUuOTQ2MiAyMC43OTk5TDE1LjkyOSAyMC43ODk4TDE1LjkxMTkgMjAuNzgwM0wxNS44OTM4IDIwLjc3MTJMMTUuODc1NiAyMC43NjMxTDE1Ljg1NjkgMjAuNzU1NkwxNS44Mzc4IDIwLjc0OUwxNS44MTgxIDIwLjc0M0wxNS43OTg1IDIwLjczNzlMMTUuNzc4OCAyMC43MzM0TDE1Ljc1ODEgMjAuNzI5M0wxNS43MzggMjAuNzI2M0wxNS43MTY4IDIwLjcyNDNMMTUuNjk2MSAyMC43MjMzTDE1LjY3NDkgMjAuNzIyOEgxMi4zNzU5TDEzLjE5OTMgMjAuMTc1N0wxMy4yMTkgMjAuMTYyMUwxMy4yMzc2IDIwLjE0OEwxMy4yNTQ4IDIwLjEzMjRMMTMuMjcxNCAyMC4xMTY3TDEzLjI4NyAyMC4wOTk2TDEzLjMwMTcgMjAuMDgyNUwxMy4zMTUzIDIwLjA2NDNMMTMuMzI3OSAyMC4wNDYyTDEzLjMzOTUgMjAuMDI3TDEzLjM1MDEgMjAuMDA3M0wxMy4zNTk2IDE5Ljk4NzJMMTMuMzY4MiAxOS45NjdMMTMuMzc1OCAxOS45NDU4TDEzLjM4MjMgMTkuOTI1MUwxMy4zODc5IDE5LjkwMzVMMTMuMzkxOSAxOS44ODE4TDEzLjM5NTQgMTkuODYwMUwxMy4zOTc1IDE5LjgzODRMMTMuMzk4NSAxOS44MTYyVjE5Ljc5NDFMMTMuMzk3NSAxOS43NzE5TDEzLjM5NTQgMTkuNzQ5N0wxMy4zOTI0IDE5LjcyOEwxMy4zODc5IDE5LjcwNThMMTMuMzgyMyAxOS42ODQxTDEzLjM3NTggMTkuNjYyNUwxMy4zNjc3IDE5LjY0MTNMMTMuMzU5MSAxOS42MjAxTDEzLjM0OTEgMTkuNTk5NEwxMy4zMzc1IDE5LjU3OTNMMTMuMzI1NCAxOS41NTkxTDEzLjMxMTcgMTkuNTM5OUwxMy4yNDQ3IDE5LjQ0OTJMMTMuMjI5NiAxOS40Mjk1TDEzLjIxMzkgMTkuNDExNEwxMy4xOTczIDE5LjM5MzdMMTMuMTgwMSAxOS4zNzc2TDEzLjE2MiAxOS4zNjE5TDEzLjE0MzggMTkuMzQ3M0wxMy4xMjQ3IDE5LjMzMzdMMTMuMTA1IDE5LjMyMTFMMTMuMDg0OSAxOS4zMDk1TDEzLjA2NDIgMTkuMjk4OUwxMy4wNDM1IDE5LjI4OTNMMTMuMDIxOCAxOS4yODA4TDEzLjAwMDEgMTkuMjczMkwxMi45Nzg1IDE5LjI2NjdMMTIuOTU2MyAxOS4yNjExTDEyLjkzMzYgMTkuMjU2NkwxMi45MTA5IDE5LjI1M1pNMTMuNTM0MSAyLjc2OTYxTDEzLjU1NjggMi43NzI2NEwxMy41OCAyLjc3NjY3TDEzLjYwMjcgMi43ODE3MUwxMy42MjQ5IDIuNzg3NzZMMTMuNjQ3NSAyLjc5NTMzTDEzLjY2OTIgMi44MDM5TDEzLjY5MTQgMi44MTM0OEwxMy43MTI2IDIuODI0MDdMMTMuNzMzOCAyLjgzNjE3TDEzLjc1NDQgMi44NDkyOEwxNS44MjUyIDQuMjIzMjJMMTUuODQ0MyA0LjIzNjg0TDE1Ljg2MyA0LjI1MTQ2TDE1Ljg4MDYgNC4yNjY1OUwxNS44OTY4IDQuMjgyNzJMMTUuOTEwOSA0LjI5Nzg1SDE1LjkxMTlMMTUuOTI5IDQuMzA3NDNMMTUuOTQ2MiA0LjMxODAyTDE1Ljk2MjggNC4zMjg2TDE1Ljk3OTUgNC4zNDAyTDE1Ljk5NTEgNC4zNTIzTDE2LjAxMDIgNC4zNjQ5MUwxNi4wMjQ4IDQuMzc4MDFMMTYuMDM5NSA0LjM5MTYzTDE2LjA1MzEgNC40MDU3NUwxNi4wNjYyIDQuNDIwMzdMMTYuMDc4OCA0LjQzNkwxNi4wOTA5IDQuNDUxNjNMMTYuMTAyNSA0LjQ2Nzc2TDE2LjExMzEgNC40ODQ0TDE2LjEyMzIgNC41MDE1NEwxNi4xMzI3IDQuNTE5MTlMMTYuMTQxOCA0LjUzNzM0TDE2LjE0OTkgNC41NTU0OUwxNi4xNTc1IDQuNTc0MTVMMTYuMTY0IDQuNTkzMzFMMTYuMTcwMSA0LjYxMjQ3TDE2LjE3NTEgNC42MzIxM0wxNi4xNzk2IDQuNjUyM0wxNi4xODM3IDQuNjcyNDdMMTYuMTg2NyA0LjY5MzE0TDE2LjE4ODcgNC43MTM4MUwxNi4xODk3IDQuNzM0OTlMMTYuMTkwMiA0Ljc1NjE3TDE2LjE4OTcgNC43NzczNEwxNi4xODg3IDQuNzk4NTJMMTYuMTg2NyA0LjgxOTE5TDE2LjE4MzcgNC44Mzk4NkwxNi4xNzk2IDQuODYwMDNMMTYuMTc1MSA0Ljg4MDJMMTYuMTcwMSA0Ljg5OTg2TDE2LjE2NCA0LjkxOTAyTDE2LjE1NzUgNC45MzgxOEwxNi4xNDk5IDQuOTU2ODRMMTYuMTQxOCA0Ljk3NDk5TDE2LjEzMjcgNC45OTMxNEwxNi4xMjMyIDUuMDEwNzlMMTYuMTEzMSA1LjAyNzkzTDE2LjEwMjUgNS4wNDQ1N0wxNi4wOTA5IDUuMDYwN0wxNi4wNzg4IDUuMDc2MzNMMTYuMDY2MiA1LjA5MTk2TDE2LjA1MzEgNS4xMDY1OUwxNi4wMzk1IDUuMTIwN0wxNi4wMjQ4IDUuMTM0MzJMMTYuMDEwMiA1LjE0NzQzTDE1Ljk5NTEgNS4xNjAwM0wxNS45Nzk1IDUuMTcyMTNMMTUuOTYyOCA1LjE4MzczTDE1Ljk0NjIgNS4xOTQzMkwxNS45MjkgNS4yMDQ5MUwxNS45MTg1IDUuMjEwNDVMMTUuOTEyNCA1LjIxNzUxTDE1Ljg5NjggNS4yMzQxNUwxNS44ODAxIDUuMjUwMjhMMTUuODYzIDUuMjY1NDFMMTUuODQ0MyA1LjI4MDAzTDE1LjgyNDcgNS4yOTM2NUwxMy43NTQ0IDYuNjY4MUwxMy43MzM4IDYuNjgxMjFMMTMuNzEyNiA2LjY5MzMxTDEzLjY5MTQgNi43MDM5TDEzLjY2OTcgNi43MTM0OEwxMy42NDc1IDYuNzIyMDVMMTMuNjI0OSA2LjcyOTYxTDEzLjYwMjcgNi43MzU2NkwxMy41OCA2Ljc0MDdMMTMuNTU2OCA2Ljc0NDc0TDEzLjUzNDEgNi43NDc3NkwxMy41MTA5IDYuNzQ5NzhMMTMuNDg4MiA2Ljc1MDc5TDEzLjQ2NSA2Ljc1MDI4TDEzLjQ0MjMgNi43NDg3N0wxMy40MTkxIDYuNzQ2NzVMMTMuMzk2NCA2Ljc0MzIzTDEzLjM3NDMgNi43Mzg2OUwxMy4zNTIxIDYuNzMzMTRMMTMuMzI5OSA2LjcyNjU5TDEzLjMwODIgNi43MTkwMkwxMy4yODcgNi43MTA0NUwxMy4yNjU5IDYuNzAwODdMMTMuMjQ1MiA2LjY5MDI4TDEzLjIyNTUgNi42Nzg2OUwxMy4yMDU5IDYuNjY2MDhMMTMuMTg2NyA2LjY1MjQ3TDEzLjE2OCA2LjYzNzg1TDEzLjE1MDQgNi42MjIyMkwxMy4xMzMzIDYuNjA1NThMMTMuMTE2NiA2LjU4ODQ0TDEzLjEwMSA2LjU2OTc4TDEzLjA4NTkgNi41NTA2MkwxMy4wMTg4IDYuNDU5ODZMMTMuMDA1MiA2LjQ0MDJMMTIuOTkyNiA2LjQyMDU0TDEyLjk4MTUgNi4zOTk4NkwxMi45NzE0IDYuMzc5MTlMMTIuOTYyMyA2LjM1ODUyTDEyLjk1NDggNi4zMzY4NEwxMi45NDc3IDYuMzE1NjZMMTIuOTQyNyA2LjI5MzQ4TDEyLjkzODEgNi4yNzE4TDEyLjkzNDYgNi4yNDk2MUwxMi45MzI2IDYuMjI3OTNMMTIuOTMxNiA2LjIwNTc1VjYuMTgzNTZMMTIuOTMyNiA2LjE2MTM4TDEyLjkzNTEgNi4xMzk3TDEyLjkzODEgNi4xMTc1MUwxMi45NDI3IDYuMDk1ODNMMTIuOTQ4MiA2LjA3NDY1TDEyLjk1NDMgNi4wNTM0OEwxMi45NjE4IDYuMDMyOEwxMi45NzA0IDYuMDEyMTNMMTIuOTggNS45OTI0N0wxMi45OTA2IDUuOTcyODFMMTMuMDAyMiA1Ljk1MzY1TDEzLjAxNDggNS45MzQ5OUwxMy4wMjg0IDUuOTE3MzRMMTMuMDQzIDUuODk5N0wxMy4wNTg2IDUuODgzMDZMMTMuMDc1MyA1Ljg2NjkyTDEzLjA5MjkgNS44NTE4TDEzLjExMTEgNS44MzcxN0wxMy4xMzA3IDUuODIzNTZMMTMuOTYxNyA1LjI3MTk2SDEwLjY1NTZMMTAuNjM0NCA1LjI3MTQ2TDEwLjYxMzMgNS4yNjk5NUwxMC41OTI2IDUuMjY3OTNMMTAuNTcxOSA1LjI2NDkxTDEwLjU1MTcgNS4yNjEzOEwxMC41MzE2IDUuMjU2ODRMMTAuNTExOSA1LjI1MTI5TDEwLjQ5MjggNS4yNDUyNEwxMC40NzM2IDUuMjM4NjlMMTAuNDU0OSA1LjIzMTEyTDEwLjQzNjMgNS4yMjMwNkwxMC40MTg2IDUuMjEzOThMMTAuNDAxIDUuMjA0OTFMMTAuMzgzOCA1LjE5NDMyTDEwLjM2NzIgNS4xODM3M0wxMC4zNTExIDUuMTcyMTNMMTAuMzM1NCA1LjE2MDAzTDEwLjMxOTggNS4xNDc0M0wxMC4zMDUyIDUuMTM0MzJMMTAuMjkxMSA1LjEyMDdMMTAuMjc3NSA1LjEwNjU5TDEwLjI2MzkgNS4wOTE5NkwxMC4yNTEyIDUuMDc2MzNMMTAuMjM5NiA1LjA2MDdMMTAuMjI4MSA1LjA0NDU3TDEwLjIxNyA1LjAyNzkzTDEwLjIwNjkgNS4wMTA3OUwxMC4xOTczIDQuOTkzMTRMMTAuMTg4NyA0Ljk3NDk5TDEwLjE4MDcgNC45NTY4NEwxMC4xNzMxIDQuOTM4MThMMTAuMTY2IDQuOTE5MDJMMTAuMTYgNC44OTk4NkwxMC4xNTQ5IDQuODgwMkwxMC4xNTA0IDQuODYwMDNMMTAuMTQ2OSA0LjgzOTg2TDEwLjE0MzkgNC44MTkxOUwxMC4xNDE4IDQuNzk4NTJMMTAuMTQwMyA0Ljc3NzM0TDEwLjEzOTggNC43NTYxN0wxMC4xNDAzIDQuNzM0OTlMMTAuMTQxOCA0LjcxMzgxTDEwLjE0MzkgNC42OTMxNEwxMC4xNDY5IDQuNjcyNDdMMTAuMTUwNCA0LjY1MjNMMTAuMTU0OSA0LjYzMjEzTDEwLjE2IDQuNjEyNDdMMTAuMTY2IDQuNTkzMzFMMTAuMTczMSA0LjU3NDE1TDEwLjE4MDcgNC41NTU0OUwxMC4xODg3IDQuNTM3MzRMMTAuMTk3MyA0LjUxOTE5TDEwLjIwNjkgNC41MDE1NEwxMC4yMTcgNC40ODQ0TDEwLjIyODEgNC40Njc3NkwxMC4yMzk2IDQuNDUxNjNMMTAuMjUxMiA0LjQzNkwxMC4yNjM5IDQuNDIwMzdMMTAuMjc3NSA0LjQwNTc1TDEwLjI5MTEgNC4zOTE2M0wxMC4zMDUyIDQuMzc4MDFMMTAuMzE5OCA0LjM2NDkxTDEwLjMzNTQgNC4zNTIzTDEwLjM1MTEgNC4zNDAyTDEwLjM2NzIgNC4zMjg2TDEwLjM4MzggNC4zMTgwMkwxMC40MDEgNC4zMDc0M0wxMC40MTg2IDQuMjk3ODVMMTAuNDM2MyA0LjI4OTI4TDEwLjQ1NDkgNC4yODEyMUwxMC40NzM2IDQuMjczNjRMMTAuNDkyOCA0LjI2NjU5TDEwLjUxMTkgNC4yNjEwNEwxMC41MzE2IDQuMjU1NDlMMTAuNTUxNyA0LjI1MDk2TDEwLjU3MTkgNC4yNDc0M0wxMC41OTI2IDQuMjQ0NEwxMC42MTMzIDQuMjQyMzhMMTAuNjM0NCA0LjI0MDg3TDEwLjY1NTYgNC4yNDAzN0gxMy45NTQ2TDEzLjEzMDcgMy42OTM4MUwxMy4xMTExIDMuNjgwMkwxMy4wOTI5IDMuNjY1NThMMTMuMDc1MyAzLjY1MDQ1TDEzLjA1ODYgMy42MzQzMkwxMy4wNDMgMy42MTc2OEwxMy4wMjg0IDMuNjAwNTRMMTMuMDE0OCAzLjU4MjM4TDEzLjAwMjIgMy41NjM3M0wxMi45OTA2IDMuNTQ0NTdMMTIuOTggMy41MjQ5MUwxMi45NzA0IDMuNTA1MjRMMTIuOTYxOCAzLjQ4NDU3TDEyLjk1NDMgMy40NjM5TDEyLjk0ODIgMy40NDI3MkwxMi45NDI3IDMuNDIxNTRMMTIuOTM4MSAzLjM5OTg2TDEyLjkzNTEgMy4zNzgxOEwxMi45MzI2IDMuMzU2TDEyLjkzMTYgMy4zMzM4MVYzLjMxMTYzTDEyLjkzMjYgMy4yODk5NUwxMi45MzQ2IDMuMjY3NzZMMTIuOTM4MSAzLjI0NTU4TDEyLjk0MjcgMy4yMjM5TDEyLjk0NzcgMy4yMDE3MUwxMi45NTQ4IDMuMTgwNTRMMTIuOTYyMyAzLjE1ODg2TDEyLjk3MTQgMy4xMzgxOEwxMi45ODE1IDMuMTE3NTFMMTIuOTkyNiAzLjA5Njg0TDEzLjAwNTIgMy4wNzcxN0wxMy4wMTg4IDMuMDU3NTFMMTMuMDg1OSAyLjk2Njc1TDEzLjEwMSAyLjk0NzU5TDEzLjExNjYgMi45Mjg5NEwxMy4xMzMzIDIuOTExOEwxMy4xNTA0IDIuODk1MTZMMTMuMTY4IDIuODc5NTNMMTMuMTg2NyAyLjg2NDkxTDEzLjIwNTkgMi44NTEyOUwxMy4yMjU1IDIuODM4NjlMMTMuMjQ1MiAyLjgyNzA5TDEzLjI2NTkgMi44MTY1TDEzLjI4NyAyLjgwNjkyTDEzLjMwODIgMi43OTgzNUwxMy4zMjk5IDIuNzkwNzlMMTMuMzUyMSAyLjc4NDIzTDEzLjM3NDMgMi43Nzg2OUwxMy4zOTY0IDIuNzc0MTVMMTMuNDE5MSAyLjc3MDYyTDEzLjQ0MjMgMi43Njg2TDEzLjQ2NSAyLjc2NzA5TDEzLjQ4ODIgMi43NjY1OUwxMy41MTA5IDIuNzY3NTlMMTMuNTM0MSAyLjc2OTYxWk0yMS4yNjUgMTAuMDk5N0wyMS4yNDQzIDEwLjA5NzdMMjEuMjIzMiAxMC4wOTY3SDIxLjIwMkwyMS4xODA4IDEwLjA5NzJMMjEuMTU5NiAxMC4wOTg3TDIxLjEzOSAxMC4xMDEyTDIxLjExODggMTAuMTA0MkwyMS4wOTgxIDEwLjEwODNMMjEuMDc4NSAxMC4xMTMzTDIxLjA1ODggMTAuMTE4OEwyMS4wMzk2IDEwLjEyNDlMMjEuMDIwNSAxMC4xMzJMMjEuMDAxOCAxMC4xMzk1TDIwLjk4MzcgMTAuMTQ4MUwyMC45NjYgMTAuMTU3MkwyMC45NDg0IDEwLjE2NjdMMjAuOTMxNyAxMC4xNzczTDIwLjkxNTEgMTAuMTg4NEwyMC44OTkgMTAuMkwyMC44ODMzIDEwLjIxMjFMMjAuODY4MiAxMC4yMjQ3TDIwLjg1MzYgMTAuMjM4M0wyMC44Mzk1IDEwLjI1MkwyMC44MjU5IDEwLjI2NjZMMjAuODEyNyAxMC4yODE3TDIwLjgwMDYgMTAuMjk2OEwyMC43ODg1IDEwLjMxM0wyMC43Nzc1IDEwLjMyOTFMMjAuNzY2OSAxMC4zNDYyTDIwLjc1NjggMTAuMzYzNEwyMC43NDc3IDEwLjM4MUwyMC43MzkxIDEwLjM5OTJMMjAuNzMxMSAxMC40MTczTDIwLjcyMzUgMTAuNDM2TDIwLjcxNzUgMTAuNDU1MkwyMC43MTE0IDEwLjQ3NDhMMjAuNzA2NCAxMC40OTQ1TDIwLjcwMjMgMTAuNTE0NkwyMC42OTg4IDEwLjUzNDhMMjAuNjk1OCAxMC41NTU1TDIwLjY5NDMgMTAuNTc2MkwyMC42OTMzIDEwLjU5NzNMMjAuNjkyNyAxMC42MTg1TDIwLjczNDEgMTMuOTI0NkwyMC4xNzE5IDEzLjEwMDdMMjAuMTU4MyAxMy4wODFMMjAuMTQzMiAxMy4wNjI5TDIwLjEyOCAxMy4wNDU3TDIwLjExMTQgMTMuMDI5MUwyMC4wOTQ4IDEzLjAxNEwyMC4wNzcxIDEyLjk5OTRMMjAuMDU5IDEyLjk4NjJMMjAuMDQwMyAxMi45NzM2TDIwLjAyMTIgMTIuOTYyNUwyMC4wMDE1IDEyLjk1MkwxOS45ODEzIDEyLjk0MjlMMTkuOTYwNiAxMi45MzQzTDE5Ljk0IDEyLjkyNzNMMTkuOTE4OCAxMi45MjA3TDE5Ljg5NzEgMTIuOTE1N0wxOS44NzU0IDEyLjkxMTZMMTkuODUzOCAxMi45MDg2TDE5LjgzMTYgMTIuOTA2NkwxOS44MDk5IDEyLjkwNjFIMTkuNzg3N0wxOS43NjU1IDEyLjkwNzZMMTkuNzQzMyAxMi45MTAxTDE5LjcyMTcgMTIuOTEzNkwxOS42OTk1IDEyLjkxODJMMTkuNjc3OCAxMi45MjM3TDE5LjY1NjYgMTIuOTMwOEwxOS42MzU0IDEyLjkzODhMMTkuNjE0MyAxMi45NDc5TDE5LjU5MzYgMTIuOTU4NUwxOS41NzM0IDEyLjk3MDFMMTkuNTUzOCAxMi45ODI3TDE5LjUzNDYgMTIuOTk2M0wxOS40NDQzIDEzLjA2NDRMMTkuNDI1MiAxMy4wOEwxOS40MDcgMTMuMDk2MkwxOS4zODk5IDEzLjExMjhMMTkuMzczOCAxMy4xMjk5TDE5LjM1ODEgMTMuMTQ4MUwxOS4zNDQgMTMuMTY2N0wxOS4zMzA5IDEzLjE4NTlMMTkuMzE4MyAxMy4yMDU2TDE5LjMwNzIgMTMuMjI2MkwxOS4yOTY2IDEzLjI0NjlMMTkuMjg3IDEzLjI2NzZMMTkuMjc5IDEzLjI4OTNMMTkuMjcxNCAxMy4zMTFMMTkuMjY1NCAxMy4zMzMxTDE5LjI2MDMgMTMuMzU1M0wxOS4yNTU4IDEzLjM3OEwxOS4yNTI4IDEzLjQwMDdMMTkuMjUwNyAxMy40MjM0TDE5LjI0OTcgMTMuNDQ2NlYxMy40NjkzTDE5LjI1MDcgMTMuNDkyNUwxOS4yNTI4IDEzLjUxNTJMMTkuMjU2MyAxMy41MzgzTDE5LjI2MDMgMTMuNTYxTDE5LjI2NTkgMTMuNTgzN0wxOS4yNzI0IDEzLjYwNTlMMTkuMjggMTMuNjI4NkwxOS4yODg1IDEzLjY1MDNMMTkuMjk4NiAxMy42NzJMMTkuMzA5NyAxMy42OTMxTDE5LjMyMTggMTMuNzE0M0wxOS4zMzQ5IDEzLjczNUwyMC43MzUxIDE1Ljc4ODFMMjAuNzQ5MiAxNS44MDczTDIwLjc2MzggMTUuODI1NEwyMC43Nzk1IDE1Ljg0MjVMMjAuNzk1NiAxNS44NTkyTDIwLjgxMjcgMTUuODc0M0wyMC44MTk4IDE1Ljg4MDRMMjAuODI1OSAxNS44OTFMMjAuODM1OSAxNS45MDgxTDIwLjg0NyAxNS45MjQ3TDIwLjg1ODYgMTUuOTQwOUwyMC44NzA3IDE1Ljk1NjVMMjAuODgzOCAxNS45NzE2TDIwLjg5NjkgMTUuOTg2MkwyMC45MTExIDE2LjAwMDRMMjAuOTI1MiAxNi4wMTM1TDIwLjk0MDMgMTYuMDI2NkwyMC45NTU5IDE2LjAzOTJMMjAuOTcxNiAxNi4wNTA4TDIwLjk4ODIgMTYuMDYyNEwyMS4wMDQ5IDE2LjA3M0wyMS4wMjIgMTYuMDgyNUwyMS4wMzk2IDE2LjA5MjFMMjEuMDU3OCAxNi4xMDA3TDIxLjA3NjQgMTYuMTA4OEwyMS4wOTUxIDE2LjExNThMMjEuMTE0MyAxNi4xMjI0TDIxLjEzMzQgMTYuMTI3OUwyMS4xNTM2IDE2LjEzM0wyMS4xNzMzIDE2LjEzNzVMMjEuMTkzOSAxNi4xNDFMMjEuMjE0MSAxNi4xNDM2TDIxLjIzNTMgMTYuMTQ1NkwyMS4yNTU5IDE2LjE0NjZIMjEuMjc3NkwyMS4yOTg4IDE2LjE0NjFMMjEuMzE5NSAxNi4xNDQ2TDIxLjM0MDYgMTYuMTQyTDIxLjM2MDggMTYuMTM5TDIxLjM4MSAxNi4xMzVMMjEuNDAxMiAxNi4xMjk5TDIxLjQyMDggMTYuMTI0NEwyMS40NCAxNi4xMTgzTDIxLjQ1OTEgMTYuMTExM0wyMS40Nzc4IDE2LjEwMzdMMjEuNDk1OSAxNi4wOTUyTDIxLjUxMzYgMTYuMDg2MUwyMS41MzEyIDE2LjA3NjVMMjEuNTQ3OSAxNi4wNjU5TDIxLjU2NDUgMTYuMDU0OEwyMS41ODA2IDE2LjA0MzJMMjEuNTk2MyAxNi4wMzExTDIxLjYxMTQgMTYuMDE4NUwyMS42MjYgMTYuMDA0OUwyMS42NDAxIDE1Ljk5MTNMMjEuNjUzOCAxNS45NzY3TDIxLjY2NjkgMTUuOTYxNUwyMS42NzkgMTUuOTQ2NEwyMS42OTExIDE1LjkzMDNMMjEuNzAyMiAxNS45MTQxTDIxLjcxMjcgMTUuODk3TDIxLjcyMjggMTUuODc5OUwyMS43MzE5IDE1Ljg2MjJMMjEuNzMyNCAxNS44NjEyTDIxLjc0NyAxNS44NDc2TDIxLjc2MjcgMTUuODMwNEwyMS43Nzc4IDE1LjgxMjhMMjEuNzkxOSAxNS43OTQxTDIxLjgwNTUgMTUuNzc0NUwyMy4xNTQzIDEzLjY4NzFMMjMuMTY2OSAxMy42NjY0TDIzLjE3ODUgMTMuNjQ1MkwyMy4xODkxIDEzLjYyMzZMMjMuMTk4MSAxMy42MDE0TDIzLjIwNjcgMTMuNTc5MkwyMy4yMTM4IDEzLjU1N0wyMy4yMTk4IDEzLjUzNDNMMjMuMjI0MyAxMy41MTE2TDIzLjIyODQgMTMuNDg4OUwyMy4yMzA5IDEzLjQ2NTdMMjMuMjMyNCAxMy40NDI1TDIzLjIzMjkgMTMuNDE5OUwyMy4yMzI0IDEzLjM5NjdMMjMuMjMwOSAxMy4zNzRMMjMuMjI3OSAxMy4zNTEzTDIzLjIyNDMgMTMuMzI4NkwyMy4yMTk4IDEzLjMwNTlMMjMuMjEzOCAxMy4yODM3TDIzLjIwNjcgMTMuMjYyTDIzLjE5OTEgMTMuMjQwNEwyMy4xOTAxIDEzLjIxOTJMMjMuMTgwNSAxMy4xOTg1TDIzLjE2OTQgMTMuMTc3OEwyMy4xNTc4IDEzLjE1ODJMMjMuMTQ0NyAxMy4xMzg1TDIzLjEzMTEgMTMuMTE5OUwyMy4xMTU5IDEzLjEwMTJMMjMuMTAwMyAxMy4wODM2TDIzLjA4MzcgMTMuMDY2NEwyMy4wNjYgMTMuMDUwM0wyMy4wNDc0IDEzLjAzNDZMMjMuMDI4MiAxMy4wMkwyMi45MzY0IDEyLjk1NEwyMi45MTY4IDEyLjk0MDlMMjIuODk2NiAxMi45Mjg4TDIyLjg3NTkgMTIuOTE3N0wyMi44NTUzIDEyLjkwNzZMMjIuODM0MSAxMi44OTlMMjIuODEyOSAxMi44OTE1TDIyLjc5MTIgMTIuODg0OUwyMi43Njk2IDEyLjg3OTlMMjIuNzQ3NCAxMi44NzU4TDIyLjcyNTIgMTIuODcyOEwyMi43MDMgMTIuODcwOEwyMi42ODA4IDEyLjg3MDNIMjIuNjU5MUwyMi42MzY5IDEyLjg3MThMMjIuNjE1MyAxMi44NzQzTDIyLjU5MzEgMTIuODc3OEwyMi41NzE5IDEyLjg4MjRMMjIuNTUwMiAxMi44ODg0TDIyLjUyOTYgMTIuODk1TDIyLjUwODkgMTIuOTAyNUwyMi40ODgyIDEyLjkxMTZMMjIuNDY4NSAxMi45MjEyTDIyLjQ0ODkgMTIuOTMyM0wyMi40MzAyIDEyLjk0MzlMMjIuNDExNiAxMi45NTdMMjIuMzkzOSAxMi45NzA2TDIyLjM3NjggMTIuOTg1MkwyMi4zNjAxIDEzLjAwMTRMMjIuMzQ0NSAxMy4wMThMMjIuMzI5NCAxMy4wMzU3TDIyLjMxNTMgMTMuMDU0M0wyMi4zMDE3IDEzLjA3NEwyMS43NjUyIDEzLjkwNDRMMjEuNzI0MyAxMC42MDU5TDIxLjcyMzMgMTAuNTg0N0wyMS43MjE4IDEwLjU2MzZMMjEuNzE5MyAxMC41NDI5TDIxLjcxNjMgMTAuNTIyMkwyMS43MTIyIDEwLjUwMkwyMS43MDc3IDEwLjQ4MTlMMjEuNzAyMiAxMC40NjI3TDIxLjY5NTYgMTAuNDQzMUwyMS42ODg1IDEwLjQyNDRMMjEuNjgxIDEwLjQwNTdMMjEuNjcyOSAxMC4zODc2TDIxLjY2MzggMTAuMzY5NEwyMS42NTM4IDEwLjM1MjNMMjEuNjQzNyAxMC4zMzUyTDIxLjYzMjYgMTAuMzE4NUwyMS42MjEgMTAuMzAyNEwyMS42MDg0IDEwLjI4NjdMMjEuNTk1OCAxMC4yNzE2TDIxLjU4MjcgMTAuMjU3TDIxLjU2ODUgMTAuMjQyOUwyMS41NTM5IDEwLjIyOThMMjEuNTM5MyAxMC4yMTY3TDIxLjUyMzcgMTAuMjA0MUwyMS41MDggMTAuMTkyNUwyMS40OTE0IDEwLjE4MTRMMjEuNDc0OCAxMC4xNzAzTDIxLjQ1NzYgMTAuMTYwN0wyMS40NCAxMC4xNTExTDIxLjQyMTggMTAuMTQyNUwyMS40MDMyIDEwLjEzNDVMMjEuMzg0NSAxMC4xMjc0TDIxLjM2NTQgMTAuMTIwOUwyMS4zNDYyIDEwLjExNTNMMjEuMzI2IDEwLjExMDNMMjEuMzA2NCAxMC4xMDU3TDIxLjI4NTcgMTAuMTAyMkwyMS4yNjUgMTAuMDk5N1pcIixcbiAgICBmaWxsOiBcImN1cnJlbnRDb2xvclwiXG4gIH1cbikgfSksIENPID0gKCkgPT4gLyogQF9fUFVSRV9fICovIGMoXCJzdmdcIiwgeyB2aWV3Qm94OiBcIjAgMCAyNiAyNFwiLCBmaWxsOiBcIm5vbmVcIiwgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiwgY2hpbGRyZW46IC8qIEBfX1BVUkVfXyAqLyBjKFxuICBcInBhdGhcIixcbiAge1xuICAgIGZpbGxSdWxlOiBcImV2ZW5vZGRcIixcbiAgICBjbGlwUnVsZTogXCJldmVub2RkXCIsXG4gICAgZDogXCJNMS41Mzg1OSAyLjk2OTUxSDI0LjQ2MTNDMjQuNzkyOSAyLjk2OTUxIDI1LjA1OTkgMy4yMzE2NCAyNS4wNTk5IDMuNTYwNjVWMTcuNjY1NkMyNS4wNTk5IDE3Ljk5NDYgMjQuNzkyOSAxOC4yNTY3IDI0LjQ2MTMgMTguMjU2N0gxMy42Mjg1VjE5Ljg0ODJIMTUuODQyOEMxNi4xNzQ0IDE5Ljg0ODIgMTYuNDQxNSAyMC4xMTAzIDE2LjQ0MTUgMjAuNDM5M0MxNi40NDE1IDIwLjc2ODMgMTYuMTc0NCAyMS4wMzA1IDE1Ljg0MjggMjEuMDMwNUgxMC4wOTcyQzkuNzY1NjEgMjEuMDMwNSA5LjQ5ODU1IDIwLjc2ODMgOS40OTg1NSAyMC40MzkzQzkuNDk4NTUgMjAuMTEwMyA5Ljc2NTYxIDE5Ljg0ODIgMTAuMDk3MiAxOS44NDgySDEyLjM3MTRWMTguMjU2N0gxLjUzODU5QzEuMjA3IDE4LjI1NjcgMC45Mzk5NDEgMTcuOTk0NiAwLjkzOTk0MSAxNy42NjU2VjMuNTYwNjVDMC45Mzk5NDEgMy4yMzE2NCAxLjIwNyAyLjk2OTUxIDEuNTM4NTkgMi45Njk1MVpNMjMuODYyNiAxNC4zMDA3VjQuMjEwODJIMi4xOTcxVjE0LjMwMDdIMjMuODYyNlpNMi4xOTcxIDE1LjQ4MjlWMTcuMDc0NEgyMy44NjI2VjE1LjQ4MjlIMi4xOTcxWlwiLFxuICAgIGZpbGw6IFwiY3VycmVudENvbG9yXCJcbiAgfVxuKSB9KSwgbU8gPSAoKSA9PiAvKiBAX19QVVJFX18gKi8gYyhcInN2Z1wiLCB7IHZpZXdCb3g6IFwiMCAwIDI0IDI0XCIsIGZpbGw6IFwibm9uZVwiLCB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLCBjaGlsZHJlbjogLyogQF9fUFVSRV9fICovIGMoXG4gIFwicGF0aFwiLFxuICB7XG4gICAgZDogXCJNOC4wNjc4MSAxNi4zMzlDMTAuMTAxNyAxNi4zMzkgMTEuOTMyMiAxNS41OTMyIDEzLjQyMzcgMTQuMzcyOUwxNS41MjU0IDE2LjQ3NDZMMTUuMTg2NCAxNi44MTM2QzE1LjA1MDggMTYuOTQ5MiAxNC45ODMxIDE3LjA4NDcgMTQuOTgzMSAxNy4yODgxQzE0Ljk4MzEgMTcuNDIzNyAxNS4wNTA4IDE3LjYyNzEgMTUuMTg2NCAxNy43NjI3TDIxLjIyMDQgMjMuNzk2NkMyMS4zNTU5IDIzLjkzMjIgMjEuNDkxNSAyNCAyMS42OTQ5IDI0QzIxLjgzMDUgMjQgMjIuMDMzOSAyMy45MzIyIDIyLjE2OTUgMjMuNzk2NkwyMi41MDg1IDIzLjQ1NzZMMjIuODQ3NCAyMy43OTY2QzIyLjk4MyAyMy45MzIyIDIzLjExODYgMjQgMjMuMzIyIDI0QzIzLjUyNTQgMjQgMjMuNjYxIDIzLjkzMjIgMjMuNzk2NiAyMy43OTY2QzI0LjA2NzggMjMuNTI1NCAyNC4wNjc4IDIzLjE4NjQgMjMuNzk2NiAyMi45MTUzTDIzLjQ1NzYgMjIuNTc2M0wyMy43OTY2IDIyLjIzNzNDMjQuMDY3OCAyMS45NjYxIDI0LjA2NzggMjEuNjI3MSAyMy43OTY2IDIxLjM1NTlMMTcuNzYyNyAxNS4zMjJDMTcuNDkxNSAxNS4wNTA4IDE3LjE1MjUgMTUuMDUwOCAxNi44ODE0IDE1LjMyMkwxNi41NDI0IDE1LjY2MUwxNC40NDA3IDEzLjU1OTNDMTUuNjYxIDEyLjEzNTYgMTYuNDA2OCAxMC4yMzczIDE2LjQwNjggOC4yMDMzOUMxNi40MDY4IDMuNjYxMDIgMTIuNzQ1OCAwIDguMjAzNDEgMEMzLjY2MTA0IDAgMCAzLjY2MTAyIDAgOC4yMDMzOUMwIDEyLjc0NTggMy41OTMyMyAxNi4zMzkgOC4wNjc4MSAxNi4zMzlaTTIyLjMwNTEgMjEuNzYyN0wyMS42OTQ5IDIyLjM3MjlMMTYuNTQyNCAxNy4yMjAzTDE3LjE1MjYgMTYuNjEwMkwyMi4zMDUxIDIxLjc2MjdaTTguMDY3ODEgMS4xNTI1NUMxMS44NjQ0IDEuMTUyNTUgMTQuOTgzMSA0LjI3MTE5IDE0Ljk4MzEgOC4wNjc4QzE0Ljk4MzEgMTEuODY0NCAxMS44NjQ0IDE0Ljk4MyA4LjA2NzgxIDE0Ljk4M0M0LjI3MTIgMTQuOTgzIDEuMTUyNTUgMTEuODY0NCAxLjE1MjU1IDguMDY3OEMxLjE1MjU1IDQuMjcxMTkgNC4yNzEyIDEuMTUyNTUgOC4wNjc4MSAxLjE1MjU1WlwiLFxuICAgIGZpbGw6IFwiY3VycmVudGNvbG9yXCJcbiAgfVxuKSB9KSwgTE8gPSAoKSA9PiAvKiBAX19QVVJFX18gKi8gYyhcInN2Z1wiLCB7IHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsIHZpZXdCb3g6IFwiMCAwIDI0IDI0XCIsIGZpbGw6IFwibm9uZVwiLCBjaGlsZHJlbjogLyogQF9fUFVSRV9fICovIGMoXG4gIFwicGF0aFwiLFxuICB7XG4gICAgZDogXCJNMjMuNjc1MyAyMy43QzIzLjU3NTQgMjMuOCAyMy4zNzU3IDI0IDIzLjE3NTkgMjRDMjIuOTc2MSAyNCAyMi44NzYyIDIzLjkgMjIuNjc2NCAyMy44TDIyLjM3NjcgMjMuNUwyMi4wNzcgMjMuOEMyMS45NzcxIDIzLjkgMjEuNzc3MyAyNCAyMS41Nzc1IDI0QzIxLjM3NzcgMjQgMjEuMjc3OCAyMy45IDIxLjA3OCAyMy44TDE1LjA4NDMgMTcuOEMxNC45ODQ0IDE3LjcgMTQuODg0NSAxNy41IDE0Ljg4NDUgMTcuM0MxNC44ODQ1IDE3LjEgMTQuOTg0NCAxNyAxNS4wODQzIDE2LjhMMTUuMjg0MSAxNi42TDEzLjE4NjMgMTQuNUMxMS43ODc3IDE1LjYgOS45ODk1OSAxNi4zIDcuOTkxNjggMTYuM0MzLjU5NjI1IDE2LjMgMCAxMi43IDAgOC4yQzAgMy43IDMuNjk2MTUgMCA4LjE5MTQ3IDBDMTIuNjg2OCAwIDE2LjM4MjkgMy43IDE2LjM4MjkgOC4yQzE2LjM4MjkgMTAuMiAxNS43ODM2IDEyIDE0LjU4NDggMTMuNEwxNi42ODI2IDE1LjVMMTYuODgyNCAxNS4zQzE3LjE4MjEgMTUgMTcuNDgxOCAxNSAxNy43ODE1IDE1LjNMMjMuNzc1MiAyMS4zQzI0LjA3NDkgMjEuNiAyNC4wNzQ5IDIxLjkgMjMuNzc1MiAyMi4yTDIzLjQ3NTUgMjIuNEwyMy43NzUyIDIyLjdDMjQuMDc0OSAyMyAyMy45NzUgMjMuNSAyMy42NzUzIDIzLjdaXCIsXG4gICAgZmlsbDogXCJjdXJyZW50Y29sb3JcIlxuICB9XG4pIH0pLCB2TyA9ICgpID0+IC8qIEBfX1BVUkVfXyAqLyBjKFwic3ZnXCIsIHsgdmlld0JveDogXCIwIDAgMjQgMjRcIiwgZmlsbDogXCJub25lXCIsIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsIGNoaWxkcmVuOiAvKiBAX19QVVJFX18gKi8gYyhcbiAgXCJwYXRoXCIsXG4gIHtcbiAgICBkOiBcIk0yNCAzLjQxMDQzQzI0IDMuMzUxOCAyNCAzLjM1MTc5IDI0IDMuMjkzMTZDMjQgMy4yOTMxNiAyNCAzLjIzNDU0IDIzLjk0MDUgMy4yMzQ1NEMyMy45NDA1IDMuMTc1OTEgMjMuODgxIDMuMTc1OSAyMy44ODEgMy4xMTcyN0wyMy44MjE1IDMuMDU4NjRDMjMuNzYxOSAzLjA1ODY0IDIzLjc2MTkgMyAyMy43MDI0IDNDMjMuNzAyNCAzIDIzLjcwMjQgMyAyMy42NDI5IDNDMjMuNjQyOSAzIDIzLjY0MjkgMyAyMy41ODM0IDNDMjMuNTIzOSAzIDIzLjUyMzkgMyAyMy40NjQzIDNDMjMuNDA0OCAzIDIzLjQwNDkgMyAyMy4zNDU0IDNDMjMuMzQ1NCAzIDIzLjM0NTMgMyAyMy4yODU4IDNMMC40OTE1OTYgNS44MTQzNEMwLjI1MzUzNiA1LjgxNDM0IDAuMDc0OTk4NCA1Ljk5MDIzIDAuMDE1NDgzNCA2LjIyNDc1Qy0wLjA0NDAzMTUgNi40NTkyOCAwLjA3NDk3NjUgNi42OTM4MSAwLjI1MzUyMSA2LjgxMTA3TDguNTI2MTEgMTIuMjYzOVYyMC40MTM3QzguNTI2MTEgMjAuNjQ4MiA4LjY0NTEzIDIwLjgyNDEgOC44ODMxOSAyMC45NDE0QzguOTQyNyAyMC45NDE0IDkuMDAyMjUgMjEgOS4wNjE3NiAyMUM5LjI0MDMxIDIxIDkuMzU5MzEgMjAuOTQxNCA5LjQ3ODM0IDIwLjgyNDFMMTMuNzYzNCAxNS43ODE4TDE3LjMzNDMgMTguMTI3QzE3LjQ1MzMgMTguMjQ0MyAxNy42MzE5IDE4LjI0NDMgMTcuODEwNCAxOC4xODU3QzE3Ljk4OSAxOC4xMjcgMTguMTA4IDE4LjAwOTggMTguMTY3NSAxNy44OTI1TDIzLjg4MSAzLjg3OTQ4QzIzLjg4MSAzLjgyMDg1IDIzLjk0MDUgMy43NjIyMiAyMy45NDA1IDMuNzAzNTlDMjQgMy40NjkwNiAyNCAzLjQ2OTA2IDI0IDMuNDEwNDNaTTIwLjkwNTIgNC4zNDg1NEw5LjI0MDMgMTEuMjY3MUwyLjIxNzU0IDYuNjM1MThMMjAuOTA1MiA0LjM0ODU0Wk05Ljc3NTkxIDE4LjgzMDZWMTIuOTA4OEwxMi45ODk3IDE1LjAxOTVMOS43NzU5MSAxOC44MzA2Wk0xNy41MTI5IDE2LjcxOTlMMTAuMjUyMSAxMS45NzA3TDIyLjMzMzYgNC44MTc1OUwxNy41MTI5IDE2LjcxOTlaXCIsXG4gICAgZmlsbDogXCJjdXJyZW50Q29sb3JcIlxuICB9XG4pIH0pLCBxTyA9ICgpID0+IC8qIEBfX1BVUkVfXyAqLyBjKFwic3ZnXCIsIHsgdmlld0JveDogXCIwIDAgMjQgMjRcIiwgZmlsbDogXCJub25lXCIsIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsIGNoaWxkcmVuOiAvKiBAX19QVVJFX18gKi8gYyhcbiAgXCJwYXRoXCIsXG4gIHtcbiAgICBmaWxsUnVsZTogXCJldmVub2RkXCIsXG4gICAgY2xpcFJ1bGU6IFwiZXZlbm9kZFwiLFxuICAgIGQ6IFwiTTE3LjkwMDEgNi45ODE4QzE5Ljg2NjUgNi45ODE4IDIxLjUyMDggNS4zOTM3OCAyMS41MjA4IDMuNDkwOUMyMS41MjA4IDEuNTg4MDIgMTkuODY2NSAtMS41MjU4OGUtMDUgMTcuOTAwMSAtMS41MjU4OGUtMDVDMTUuOTMzNyAtMS41MjU4OGUtMDUgMTQuMjc5NSAxLjU4ODAzIDE0LjI3OTUgMy40OTA5QzE0LjI3OTUgNC4wNzAxNCAxNC4zOTQgNC41NDIxNyAxNC42MjI3IDUuMDA3MjlMOC41MTc3MSA5LjQzMTkyQzcuODg1ODkgOC44NTMxMSA3LjAyMjE5IDguNTA5MDcgNi4xMDAxMSA4LjUwOTA3QzQuMTMzNjkgOC41MDkwNyAyLjQ3OTQ5IDEwLjA5NzEgMi40Nzk0OSAxMkMyLjQ3OTQ5IDEzLjkwMjkgNC4xMzM2OSAxNS40OTA5IDYuMTAwMTEgMTUuNDkwOUM3LjAyMjE5IDE1LjQ5MDkgNy44ODU4OSAxNS4xNDY5IDguNTE3NzEgMTQuNTY4MUwxNC42MjI5IDE4Ljk5MjhDMTQuMzkzNyAxOS40NjQxIDE0LjI3OTUgMTkuOTg2OSAxNC4yNzk1IDIwLjUwOTFDMTQuMjc5NSAyMi40MTE5IDE1LjkzMzcgMjQgMTcuOTAwMSAyNEMxOS44NjY1IDI0IDIxLjUyMDggMjIuNDExOSAyMS41MjA4IDIwLjUwOTFDMjEuNTIwOCAxOC42MDYyIDE5Ljg2NjUgMTcuMDE4MiAxNy45MDAxIDE3LjAxODJDMTYuOTc4IDE3LjAxODIgMTYuMTE0MyAxNy4zNjIyIDE1LjQ4MjUgMTcuOTQxTDkuMzc3MzYgMTMuNTE2M0M5LjYwNjUzIDEzLjA0NDkgOS43MjA3MyAxMi41MjIxIDkuNzIwNzMgMTJDOS43MjA3MyAxMS40MjA3IDkuNjA2MjMgMTAuOTQ4NyA5LjM3NzUyIDEwLjQ4MzZMMTUuNDgyNSA2LjA1ODk1QzE2LjExNDMgNi42Mzc3NiAxNi45NzggNi45ODE4IDE3LjkwMDEgNi45ODE4Wk0xNy45MDAxIDEuMjY5NEMxOS4xNDggMS4yNjk0IDIwLjIxMDQgMi4yNDE2NyAyMC4yMTA0IDMuNDkwOUMyMC4yMTA0IDQuNjgzODcgMTkuMjA2NCA1LjcxMjM5IDE3LjkwMDEgNS43MTIzOUMxNi42NTMgNS43MTIzOSAxNS41OTEyIDQuNzQxMzQgMTUuNTg5OSAzLjQ5MzIzQzE1LjY1MDMgMi4yMzcyOSAxNi42NTczIDEuMjY5NCAxNy45MDAxIDEuMjY5NFpNNi4xMDAxMSAxNC4yMjE1QzQuODUyMjYgMTQuMjIxNSAzLjc4OTg0IDEzLjI0OTIgMy43ODk4NCAxMkMzLjc4OTg0IDEwLjgwNyA0Ljc5Mzg1IDkuNzc4NSA2LjEwMDExIDkuNzc4NUM3LjM0Nzk2IDkuNzc4NSA4LjQxMDM4IDEwLjc1MDggOC40MTAzOCAxMkM4LjQxMDM4IDEzLjE5MTMgNy4zNDYyNyAxNC4yMjE1IDYuMTAwMTEgMTQuMjIxNVpNMTcuOTAwMSAxOC4zNDcxQzE5LjE0OCAxOC4zNDcxIDIwLjIxMDQgMTkuMzE5MyAyMC4yMTA0IDIwLjU2ODZDMjAuMjEwNCAyMS43NjE1IDE5LjIwNjQgMjIuNzkwMSAxNy45MDAxIDIyLjc5MDFDMTYuNjUzIDIyLjc5MDEgMTUuNTkxMiAyMS44MTkgMTUuNTg5OSAyMC41NzA5QzE1LjY1MDMgMTkuMzE1IDE2LjY1NzMgMTguMzQ3MSAxNy45MDAxIDE4LjM0NzFaXCIsXG4gICAgZmlsbDogXCJjdXJyZW50Y29sb3JcIlxuICB9XG4pIH0pLCB5TyA9ICgpID0+IC8qIEBfX1BVUkVfXyAqLyBjKFwic3ZnXCIsIHsgdmlld0JveDogXCIwIDAgMjQgMjRcIiwgZmlsbDogXCJub25lXCIsIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsIGNoaWxkcmVuOiAvKiBAX19QVVJFX18gKi8gYyhcbiAgXCJwYXRoXCIsXG4gIHtcbiAgICBkOiBcIk0yMS4wODM5IDMuNDE0MDJDMjAuOTQxOSAzLjIxMDIgMjAuNzI5IDMuMDc0MzIgMjAuNTE2MSAzLjA3NDMyQzE3LjQ2NDUgMy4wMDYzOCAxNC42MjU4IDEuOTg3MjYgMTIuMjgzOSAwLjE1Mjg2NkMxMi4wNzEgLTAuMDUwOTU1NCAxMS43MTYxIC0wLjA1MDk1NTQgMTEuNDMyMyAwLjE1Mjg2NkM5LjE2MTMgMS45MTkzMiA2LjM5MzU0IDIuOTM4NDQgMy40MTI5IDMuMDc0MzJDMy4yIDMuMDc0MzIgMi45ODcxIDMuMjEwMiAyLjg0NTE3IDMuNDE0MDJDMS42Mzg3MSA1LjUyMDE4IDEgNy44OTgwOCAxIDEwLjI3NkMxIDE2LjU5NDUgNS40MDAwMSAyMi4yMzM1IDExLjc4NzEgMjRDMTEuODU4MSAyNCAxMS45MjkgMjQgMTIgMjRDMTIuMDcxIDI0IDEyLjE0MTkgMjQgMTIuMjEyOSAyNEMxOC41MjkgMjIuMjMzNSAyMyAxNi42NjI0IDIzIDEwLjI3NkMyMyA3Ljg5ODA4IDIyLjM2MTMgNS41MjAxOCAyMS4wODM5IDMuNDE0MDJaTTEyIDIyLjc3NzFDNi4zMjI1OCAyMS4xNDY1IDIuMzQ4MzggMTYuMDUxIDIuMzQ4MzggMTAuMzQzOUMyLjM0ODM4IDguMjM3NzkgMi44NDUxNiA2LjE5OTU4IDMuODM4NzEgNC4zNjUxOUM2Ljc0ODM5IDQuMTYxMzcgOS41MTYxMiAzLjIxMDE5IDExLjg1ODEgMS41MTE2OEMxNC4yNzEgMy4yNzgxMyAxNy4xMDk3IDQuMjI5MzEgMjAuMDkwMyA0LjM2NTE5QzIxLjA4MzkgNi4xOTk1OCAyMS41ODA2IDguMjM3NzkgMjEuNTgwNiAxMC4zNDM5QzIxLjY1MTYgMTYuMDUxIDE3LjY3NzQgMjEuMTQ2NSAxMiAyMi43NzcxWlwiLFxuICAgIGZpbGw6IFwiY3VycmVudENvbG9yXCJcbiAgfVxuKSB9KSwgd08gPSAoKSA9PiAvKiBAX19QVVJFX18gKi8gYyhcInN2Z1wiLCB7IHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsIHZpZXdCb3g6IFwiMCAwIDI0IDI0XCIsIGZpbGw6IFwibm9uZVwiLCBjaGlsZHJlbjogLyogQF9fUFVSRV9fICovIGMoXG4gIFwicGF0aFwiLFxuICB7XG4gICAgZDogXCJNMjEuMDgzOSAzLjQxNDAyQzIwLjk0MTkgMy4yMTAyIDIwLjcyOSAzLjA3NDMyIDIwLjUxNjEgMy4wNzQzMkMxNy40NjQ1IDMuMDA2MzggMTQuNjI1OCAxLjk4NzI2IDEyLjI4MzkgMC4xNTI4NjZDMTIuMDcxIC0wLjA1MDk1NTQgMTEuNzE2MSAtMC4wNTA5NTU0IDExLjQzMjMgMC4xNTI4NjZDOS4xNjEzIDEuOTE5MzIgNi4zOTM1NCAyLjkzODQ0IDMuNDEyOSAzLjA3NDMyQzMuMiAzLjA3NDMyIDIuOTg3MSAzLjIxMDIgMi44NDUxNyAzLjQxNDAyQzEuNjM4NzEgNS41MjAxOCAxIDcuODk4MDggMSAxMC4yNzZDMSAxNi41OTQ1IDUuNDAwMDEgMjIuMjMzNSAxMS43ODcxIDI0QzExLjg1ODEgMjQgMTEuOTI5IDI0IDEyIDI0QzEyLjA3MSAyNCAxMi4xNDE5IDI0IDEyLjIxMjkgMjRDMTguNTI5IDIyLjIzMzUgMjMgMTYuNjYyNCAyMyAxMC4yNzZDMjMgNy44OTgwOCAyMi4zNjEzIDUuNTIwMTggMjEuMDgzOSAzLjQxNDAyWlwiLFxuICAgIGZpbGw6IFwiY3VycmVudENvbG9yXCJcbiAgfVxuKSB9KSwgeE8gPSAoKSA9PiAvKiBAX19QVVJFX18gKi8gZTEoXCJzdmdcIiwgeyB2aWV3Qm94OiBcIjAgMCAyNCAyNFwiLCBmaWxsOiBcIm5vbmVcIiwgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiwgY2hpbGRyZW46IFtcbiAgLyogQF9fUFVSRV9fICovIGMoXG4gICAgXCJwYXRoXCIsXG4gICAge1xuICAgICAgZmlsbFJ1bGU6IFwiZXZlbm9kZFwiLFxuICAgICAgY2xpcFJ1bGU6IFwiZXZlbm9kZFwiLFxuICAgICAgZDogXCJNMC4wMDAxMTQ1NyAxMi4wMDM2QzAuMDAzMzE4NjQgMTIuMTY4MSAwLjA4MTQ5MDggMTIuMzI0NyAwLjE1MTcyNSAxMi4zOTY3TDMuMDE5MDEgMTUuMzE0NkMzLjA3MjU0IDE1LjM3ODkgMy4xMzg2NSAxNS40MzE0IDMuMjEzMjMgMTUuNDY4N0MzLjI4ODQ3IDE1LjUwNjQgMy4zNzA2NSAxNS41Mjc4IDMuNDU0NTYgMTUuNTMxNkMzLjUzODQ2IDE1LjUzNTQgMy42MjIyMSAxNS41MjE0IDMuNzAwNDcgMTUuNDkwN0MzLjc3ODczIDE1LjQ1OTkgMy44NDk3NyAxNS40MTMxIDMuOTA5MDcgMTUuMzUzMUMzLjk2ODM3IDE1LjI5MzEgNC4wMTQ2NCAxNS4yMjE0IDQuMDQ0OTcgMTUuMTQyNEM0LjA3NTI5IDE1LjA2MzQgNC4wODkwMiAxNC45Nzg5IDQuMDg1MjkgMTQuODk0M0M0LjA4MTU2IDE0LjgwOTcgNC4wNjA0NSAxNC43MjY4IDQuMDIzMjkgMTQuNjUwOEMzLjk4NjQ2IDE0LjU3NTUgMy45MzQ2NSAxNC41MDg3IDMuODcxMDggMTQuNDU0NkwyLjA0NzkzIDEyLjYxMDdMMjIuMDc0OSAxMi41NjA5XCIsXG4gICAgICBmaWxsOiBcImN1cnJlbnRDb2xvclwiXG4gICAgfVxuICApLFxuICAvKiBAX19QVVJFX18gKi8gYyhcbiAgICBcInBhdGhcIixcbiAgICB7XG4gICAgICBkOiBcIk0yMi4wNzQ5IDEyLjU2MDlMMjAuMTY2NCAxNC40OTExQzIwLjA3NzUgMTQuNTk4NiAyMC4wMzE3IDE0LjczNTkgMjAuMDM3OSAxNC44NzU5QzIwLjA0NCAxNS4wMTU5IDIwLjEwMTggMTUuMTQ4NCAyMC4xOTk4IDE1LjI0NzVDMjAuMjk3NyAxNS4zNDY2IDIwLjQyODggMTUuNDA1IDIwLjU2NzIgMTUuNDExM0MyMC43MDU3IDE1LjQxNzUgMjAuODQxNCAxNS4zNzExIDIwLjk0NzcgMTUuMjgxM0wyMy44MDQ0IDEyLjM5ODFDMjMuOTE5NCAxMi4yODAzIDI0IDEyLjE2NTkgMjQgMTEuOTkyMkMyNCAxMS44MTcgMjMuOTI2MSAxMS43MDI5IDIzLjgwNDQgMTEuNTU2OUwyMC45ODQ1IDguNjg1MjRDMjAuOTMxIDguNjIxIDIwLjg2NDkgOC41Njg1OCAyMC43OTA0IDguNTMxMjdDMjAuNzE1MiA4LjQ5MzYyIDIwLjYzMyA4LjQ3MjIxIDIwLjU0OTEgOC40Njg0M0MyMC40NjUyIDguNDY0NjQgMjAuMzgxNCA4LjQ3ODU3IDIwLjMwMzIgOC41MDkzMUMyMC4yMjQ5IDguNTQwMDUgMjAuMTUzOSA4LjU4NjkxIDIwLjA5NDYgOC42NDY4OUMyMC4wMzUzIDguNzA2ODYgMTkuOTg5IDguNzc4NjMgMTkuOTU4NyA4Ljg1NzYyQzE5LjkyODQgOC45MzY2IDE5LjkxNDYgOS4wMjEwOCAxOS45MTg0IDkuMTA1N0MxOS45MjIxIDkuMTkwMzEgMTkuOTQzMiA5LjI3MzIzIDE5Ljk4MDQgOS4zNDkxOEMyMC4wMTcyIDkuNDI0NDUgMjAuMDY5IDkuNDkxMjYgMjAuMTMyNiA5LjU0NTQyTDIxLjk1NTcgMTEuMzg5M0gyLjA0Nzk0TDMuODcxMDggOS41NDU0MkMzLjkzNDY1IDkuNDkxMjYgMy45ODY0NiA5LjQyNDQ1IDQuMDIzMjkgOS4zNDkxOEM0LjA2MDQ1IDkuMjczMjMgNC4wODE1NiA5LjE5MDMxIDQuMDg1MjkgOS4xMDU3QzQuMDg5MDIgOS4wMjEwOCA0LjA3NTI5IDguOTM2NiA0LjA0NDk3IDguODU3NjJDNC4wMTQ2NCA4Ljc3ODY0IDMuOTY4MzcgOC43MDY4NiAzLjkwOTA3IDguNjQ2ODlDMy44NDk3NyA4LjU4NjkxIDMuNzc4NzMgOC41NDAwNSAzLjcwMDQ3IDguNTA5MzFDMy42MjIyMSA4LjQ3ODU3IDMuNTM4NDYgOC40NjQ2NCAzLjQ1NDU2IDguNDY4NDNDMy4zNzA2NSA4LjQ3MjIxIDMuMjg4NDcgOC40OTM2MiAzLjIxMzIzIDguNTMxMjdDMy4xMzg2OCA4LjU2ODU5IDMuMDcyNTggOC42MjEwNCAzLjAxOTA2IDguNjg1M0wwLjE2Mzg1MyAxMS41NzI5TDAuMTYyNjkyIDExLjU3NDJDMC4wNzM0MjkgMTEuNjcwOSAtMC4wMDMzNzY5MyAxMS44MjQzIDAuMDAwMTE0NTcgMTIuMDAzNkMwLjAwMzMxODY0IDEyLjE2ODEgMC4wODE0OTA4IDEyLjMyNDcgMC4xNTE3MjUgMTIuMzk2N0wzLjAxOTAxIDE1LjMxNDZDMy4wNzI1NCAxNS4zNzg5IDMuMTM4NjUgMTUuNDMxNCAzLjIxMzIzIDE1LjQ2ODdDMy4yODg0NyAxNS41MDY0IDMuMzcwNjUgMTUuNTI3OCAzLjQ1NDU2IDE1LjUzMTZDMy41Mzg0NiAxNS41MzU0IDMuNjIyMjEgMTUuNTIxNCAzLjcwMDQ3IDE1LjQ5MDdDMy43Nzg3MyAxNS40NTk5IDMuODQ5NzcgMTUuNDEzMSAzLjkwOTA3IDE1LjM1MzFDMy45NjgzNyAxNS4yOTMxIDQuMDE0NjQgMTUuMjIxNCA0LjA0NDk3IDE1LjE0MjRDNC4wNzUyOSAxNS4wNjM0IDQuMDg5MDIgMTQuOTc4OSA0LjA4NTI5IDE0Ljg5NDNDNC4wODE1NiAxNC44MDk3IDQuMDYwNDUgMTQuNzI2OCA0LjAyMzI5IDE0LjY1MDhDMy45ODY0NiAxNC41NzU1IDMuOTM0NjUgMTQuNTA4NyAzLjg3MTA4IDE0LjQ1NDZMMi4wNDc5MyAxMi42MTA3TDIyLjA3NDkgMTIuNTYwOVpcIixcbiAgICAgIGZpbGw6IFwiY3VycmVudENvbG9yXCJcbiAgICB9XG4gIClcbl0gfSksIFdPID0gKCkgPT4gLyogQF9fUFVSRV9fICovIGMoXCJzdmdcIiwgeyB2aWV3Qm94OiBcIjAgMCAyNCAyNFwiLCBmaWxsOiBcIm5vbmVcIiwgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiwgY2hpbGRyZW46IC8qIEBfX1BVUkVfXyAqLyBjKFxuICBcInBhdGhcIixcbiAge1xuICAgIGZpbGxSdWxlOiBcImV2ZW5vZGRcIixcbiAgICBjbGlwUnVsZTogXCJldmVub2RkXCIsXG4gICAgZDogXCJNMTcuNzcxOCAxNi4zMDE1QzE2LjYzNzEgMTguMjU2MiAxNC40MjM4IDE5LjQ2NjEgMTIgMTkuNDY2MUM5LjU3NTg0IDE5LjQ2NjEgNy4zNjI0NyAxOC4yNTYyIDYuMjI3ODUgMTYuMzAxMkM2LjA0MzQxIDE1Ljk4MzIgNi4xNTEyOCAxNS41NzYgNi40Njk1NSAxNS4zOTEyQzYuNzg3MzMgMTUuMjA2NCA3LjE5NDgxIDE1LjMxNDggNy4zNzk1MSAxNS42MzI5QzguMjczMzcgMTcuMTcyNSAxMC4wNDE5IDE4LjEzNDMgMTIgMTguMTM0M0MxMy45NTggMTguMTM0MyAxNS43MjYyIDE3LjE3MjUgMTYuNjE5OCAxNS42MzI5QzE2LjgwNDYgMTUuMzE1IDE3LjIxMjEgMTUuMjA2OCAxNy41MyAxNS4zOTEyQzE3Ljg0ODEgMTUuNTc1NyAxNy45NTYyIDE1Ljk4MzMgMTcuNzcxOCAxNi4zMDE1Wk0yNCAxMkMyNCAxOC41MDU5IDE4LjUwNTYgMjQgMTIgMjRDNS40OTQ0MSAyNCAwIDE4LjUwNTkgMCAxMkMwIDUuNDk0MTMgNS40OTQ0MSAwIDEyIDBDMTguNTA1NiAwIDI0IDUuNDk0MTMgMjQgMTJaTTIyLjY2ODIgMTJDMjIuNjY4MiA2LjIxODI3IDE3Ljc4MTcgMS4zMzE3NiAxMiAxLjMzMTc2QzYuMjE4MjcgMS4zMzE3NiAxLjMzMTc2IDYuMjE4MjcgMS4zMzE3NiAxMkMxLjMzMTc2IDE3Ljc4MTcgNi4yMTgyNyAyMi42NjgyIDEyIDIyLjY2ODJDMTcuNzgxNyAyMi42NjgyIDIyLjY2ODIgMTcuNzgxNyAyMi42NjgyIDEyWk04Ljk4NDAzIDEwLjgyNjlDOC45ODQwMyAxMS40MzAzIDguNDk0ODUgMTEuOTE5NSA3Ljg5MTQyIDExLjkxOTVDNy4yODc5OSAxMS45MTk1IDYuNzk4ODEgMTEuNDMwMyA2Ljc5ODgxIDEwLjgyNjlDNi43OTg4MSAxMC4yMjM1IDcuMjg3OTkgOS43MzQzMSA3Ljg5MTQyIDkuNzM0MzFDOC40OTQ4NSA5LjczNDMxIDguOTg0MDMgMTAuMjIzNSA4Ljk4NDAzIDEwLjgyNjlaTTE3LjM0MTEgMTAuODI2OUMxNy4zNDExIDExLjQzMDMgMTYuODUyIDExLjkxOTUgMTYuMjQ4NSAxMS45MTk1QzE1LjY0NTEgMTEuOTE5NSAxNS4xNTU5IDExLjQzMDMgMTUuMTU1OSAxMC44MjY5QzE1LjE1NTkgMTAuMjIzNSAxNS42NDUxIDkuNzM0MzEgMTYuMjQ4NSA5LjczNDMxQzE2Ljg1MiA5LjczNDMxIDE3LjM0MTEgMTAuMjIzNSAxNy4zNDExIDEwLjgyNjlaXCIsXG4gICAgZmlsbDogXCJjdXJyZW50Q29sb3JcIlxuICB9XG4pIH0pLCBSTyA9ICgpID0+IC8qIEBfX1BVUkVfXyAqLyBlMShcInN2Z1wiLCB7IHZpZXdCb3g6IFwiMCAwIDI0IDI0XCIsIGZpbGw6IFwibm9uZVwiLCB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLCBjaGlsZHJlbjogW1xuICAvKiBAX19QVVJFX18gKi8gZTEoXCJnXCIsIHsgY2xpcFBhdGg6IFwidXJsKCNjbGlwMF8yNzIxXzYxNDMwKVwiLCBjaGlsZHJlbjogW1xuICAgIC8qIEBfX1BVUkVfXyAqLyBjKFxuICAgICAgXCJwYXRoXCIsXG4gICAgICB7XG4gICAgICAgIGQ6IFwiTTQuMjc0NzcgMjMuNjgwM0w0LjI3MzIgMjMuNjgyNEM0LjE0MDA1IDIzLjg2MDkgMy45NjYyOCAyMy45ODIzIDMuNzc1OTkgMjMuOTk4MkMzLjU4MDQyIDI0LjAxNDYgMy4zOTUxMSAyMy45MTc1IDMuMjQ5NTIgMjMuNzE2M0MyLjkyODk2IDIzLjI3MzMgMC4xODIwNzEgMTkuMjA4NCAwLjEwNDI3MSAxOS4wOTc3Qy0wLjA2MzgwOTYgMTguODU4NiAtMC4wMzY2NzA1IDE4LjQ4NjIgMC4yMzY5MzQgMTguMjkyNkMwLjUyNTM3NSAxOC4wODg1IDAuODk5MjY4IDE4LjIxNDkgMS4wNTkxNyAxOC40NjQ5QzEuNzU1NDMgMTkuNDgwMiAyLjQ3Mjk2IDIwLjUyOTkgMy4xODMzMiAyMS41NjQ1TDMuMTgzMzIgMC41NjgwNDJDMy4xODMzMiAwLjIyOTc0MSAzLjQ2NjE2IC0wLjAwODc0MDU5IDMuNzkwNzUgMC4wMDAyNjE3NTNDNC4xMDU5NCAwLjAwOTAwMzc1IDQuMzY1MzUgMC4yNDY3MTcgNC4zNjUzNSAwLjU2NzVMNC4zNjUzNSAyMS41NjE0TDYuNDkwMjQgMTguNDU4NkM2LjY3MDE5IDE4LjE3MzUgNy4wMzkxNCAxOC4wOTc2IDcuMzAzNTcgMTguMjgxQzcuNTkwOTMgMTguNDU3NiA3LjY3Mzg3IDE4LjgyNzggNy40NzYzIDE5LjA5MzlDNi40MjU3OCAyMC42MzQxIDUuMzQ4NTMgMjIuMTU2MiA0LjI3NDc3IDIzLjY4MDNaXCIsXG4gICAgICAgIGZpbGw6IFwiY3VycmVudGNvbG9yXCJcbiAgICAgIH1cbiAgICApLFxuICAgIC8qIEBfX1BVUkVfXyAqLyBjKFxuICAgICAgXCJwYXRoXCIsXG4gICAgICB7XG4gICAgICAgIGZpbGxSdWxlOiBcImV2ZW5vZGRcIixcbiAgICAgICAgY2xpcFJ1bGU6IFwiZXZlbm9kZFwiLFxuICAgICAgICBkOiBcIk04LjYwMDM5IDQuMDU3MDNDOC42MDAzOSAzLjY3MDQzIDguOTEzNzkgMy4zNTcwMyA5LjMwMDM5IDMuMzU3MDNIMjMuMzAwNEMyMy42ODcgMy4zNTcwMyAyNC4wMDA0IDMuNjcwNDMgMjQuMDAwNCA0LjA1NzAzQzI0LjAwMDQgNC40NDM2MyAyMy42ODcgNC43NTcwMyAyMy4zMDA0IDQuNzU3MDNIOS4zMDAzOUM4LjkxMzc5IDQuNzU3MDMgOC42MDAzOSA0LjQ0MzYzIDguNjAwMzkgNC4wNTcwM1pcIixcbiAgICAgICAgZmlsbDogXCJjdXJyZW50Y29sb3JcIlxuICAgICAgfVxuICAgICksXG4gICAgLyogQF9fUFVSRV9fICovIGMoXG4gICAgICBcInBhdGhcIixcbiAgICAgIHtcbiAgICAgICAgZmlsbFJ1bGU6IFwiZXZlbm9kZFwiLFxuICAgICAgICBjbGlwUnVsZTogXCJldmVub2RkXCIsXG4gICAgICAgIGQ6IFwiTTguNjAwMzkgOS4zNTIzNUM4LjYwMDM5IDguOTY1NzUgOC45MTM3OSA4LjY1MjM1IDkuMzAwMzkgOC42NTIzNUgyMS44MDA0QzIyLjE4NyA4LjY1MjM1IDIyLjUwMDQgOC45NjU3NSAyMi41MDA0IDkuMzUyMzVDMjIuNTAwNCA5LjczODk1IDIyLjE4NyAxMC4wNTI0IDIxLjgwMDQgMTAuMDUyNEg5LjMwMDM5QzguOTEzNzkgMTAuMDUyNCA4LjYwMDM5IDkuNzM4OTUgOC42MDAzOSA5LjM1MjM1WlwiLFxuICAgICAgICBmaWxsOiBcImN1cnJlbnRjb2xvclwiXG4gICAgICB9XG4gICAgKSxcbiAgICAvKiBAX19QVVJFX18gKi8gYyhcbiAgICAgIFwicGF0aFwiLFxuICAgICAge1xuICAgICAgICBmaWxsUnVsZTogXCJldmVub2RkXCIsXG4gICAgICAgIGNsaXBSdWxlOiBcImV2ZW5vZGRcIixcbiAgICAgICAgZDogXCJNOC42MDAzOSAxNC42NDc3QzguNjAwMzkgMTQuMjYxMSA4LjkxMzc5IDEzLjk0NzcgOS4zMDAzOSAxMy45NDc3SDE5LjMwMDRDMTkuNjg3IDEzLjk0NzcgMjAuMDAwNCAxNC4yNjExIDIwLjAwMDQgMTQuNjQ3N0MyMC4wMDA0IDE1LjAzNDMgMTkuNjg3IDE1LjM0NzcgMTkuMzAwNCAxNS4zNDc3SDkuMzAwMzlDOC45MTM3OSAxNS4zNDc3IDguNjAwMzkgMTUuMDM0MyA4LjYwMDM5IDE0LjY0NzdaXCIsXG4gICAgICAgIGZpbGw6IFwiY3VycmVudGNvbG9yXCJcbiAgICAgIH1cbiAgICApLFxuICAgIC8qIEBfX1BVUkVfXyAqLyBjKFxuICAgICAgXCJwYXRoXCIsXG4gICAgICB7XG4gICAgICAgIGZpbGxSdWxlOiBcImV2ZW5vZGRcIixcbiAgICAgICAgY2xpcFJ1bGU6IFwiZXZlbm9kZFwiLFxuICAgICAgICBkOiBcIk04LjYwMDM5IDE5Ljk0M0M4LjYwMDM5IDE5LjU1NjQgOC45MTM3OSAxOS4yNDMgOS4zMDAzOSAxOS4yNDNIMTcuODAwNEMxOC4xODcgMTkuMjQzIDE4LjUwMDQgMTkuNTU2NCAxOC41MDA0IDE5Ljk0M0MxOC41MDA0IDIwLjMyOTYgMTguMTg3IDIwLjY0MyAxNy44MDA0IDIwLjY0M0g5LjMwMDM5QzguOTEzNzkgMjAuNjQzIDguNjAwMzkgMjAuMzI5NiA4LjYwMDM5IDE5Ljk0M1pcIixcbiAgICAgICAgZmlsbDogXCJjdXJyZW50Y29sb3JcIlxuICAgICAgfVxuICAgIClcbiAgXSB9KSxcbiAgLyogQF9fUFVSRV9fICovIGMoXCJkZWZzXCIsIHsgY2hpbGRyZW46IC8qIEBfX1BVUkVfXyAqLyBjKFwiY2xpcFBhdGhcIiwgeyBpZDogXCJjbGlwMF8yNzIxXzYxNDMwXCIsIGNoaWxkcmVuOiAvKiBAX19QVVJFX18gKi8gYyhcInJlY3RcIiwgeyB3aWR0aDogXCIyNFwiLCBoZWlnaHQ6IFwiMjRcIiwgZmlsbDogXCJjdXJyZW50Q29sb3JcIiB9KSB9KSB9KVxuXSB9KSwgQk8gPSAoKSA9PiAvKiBAX19QVVJFX18gKi8gYyhcInN2Z1wiLCB7IHZpZXdCb3g6IFwiMCAwIDI0IDI0XCIsIGZpbGw6IFwibm9uZVwiLCB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLCBjaGlsZHJlbjogLyogQF9fUFVSRV9fICovIGMoXG4gIFwicGF0aFwiLFxuICB7XG4gICAgZDogXCJNMjMuNDgwMyA4LjcwMzY1TDE1LjQ3NTEgOC4xODQwNEwxMi41NTg1IDAuMzg5NzJDMTIuNDk2NCAwLjEyOTkwOSAxMi4yNDgyIDAgMTIgMEMxMS43NTE4IDAgMTEuNTY1NiAwLjEyOTkwOSAxMS40NDE1IDAuMzg5NzJMOC41MjQ4NiA4LjE4NDA0TDAuNTE5NzA5IDguNzAzNjVDMC4yNzE0ODcgOC43MDM2NSAwLjA4NTMyNzcgOC44OTg1MSAwLjAyMzI3MiA5LjA5MzM3Qy0wLjAzODc4MzYgOS4zNTMxOCAwLjAyMzI2NDUgOS42MTI5OSAwLjIwOTQzMSA5Ljc0MjlMNi4zNTI5MiAxNS4wNjlMNC4zNjcxNyAyMy4xODgxQzQuMzA1MTEgMjMuNDQ3OSA0LjM2NzE0IDIzLjcwNzcgNC42MTUzNyAyMy44Mzc2QzQuNzM5NDggMjMuOTAyNiA0Ljg2MzU5IDIzLjk2NzUgNC45MjU2NCAyMy45Njc1QzUuMDQ5NzUgMjMuOTY3NSA1LjExMTgxIDIzLjk2NzUgNS4yMzU5MiAyMy45MDI2TDEyIDE5LjQyMDhMMTguNzY0IDIzLjkwMjZDMTguOTUwMiAyNC4wMzI1IDE5LjE5ODQgMjQuMDMyNSAxOS4zODQ2IDIzLjkwMjZDMTkuNTcwOCAyMy43NzI3IDE5LjYzMjggMjMuNTEyOSAxOS42MzI4IDIzLjI1M0wxNy42NDcgMTUuMTM0TDIzLjc5MDYgOS44MDc4NkMyMy45NzY3IDkuNjc3OTUgMjQuMDM4OCA5LjQxODE0IDIzLjk3NjcgOS4xNTgzM0MyMy45MTQ3IDguODk4NTIgMjMuNzI4NSA4Ljc2ODYxIDIzLjQ4MDMgOC43MDM2NVpNMTYuNjU0MiAxNC40MTk1QzE2LjQ2OCAxNC41NDk0IDE2LjQwNiAxNC44MDkyIDE2LjQ2OCAxNS4wMDQxTDE4LjIwNTYgMjIuMDE4OUwxMi4zNzIzIDE4LjEyMThDMTIuMTg2MiAxNy45OTE5IDExLjkzNzkgMTcuOTkxOSAxMS43NTE4IDE4LjEyMThMNS45MTg1NiAyMi4wMTg5TDcuNjU2MTEgMTUuMDA0MUM3LjcxODE2IDE0LjgwOTIgNy42NTYxMSAxNC41NDk0IDcuNDY5OTUgMTQuNDE5NUwyLjEzMzE0IDkuODA3ODZMOS4wMjEzNCA5LjM1MzE4QzkuMjY5NTYgOS4zNTMxOCA5LjQ1NTcyIDkuMjIzMjcgOS41MTc3OCA4Ljk2MzQ2TDEyLjA2MiAyLjIwODM5TDE0LjYwNjMgOC45NjM0NkMxNC42Njg0IDkuMTU4MzIgMTQuODU0NiA5LjM1MzE4IDE1LjEwMjggOS4zNTMxOEwyMS45OTA5IDkuODA3ODZMMTYuNjU0MiAxNC40MTk1WlwiLFxuICAgIGZpbGw6IFwiY3VycmVudENvbG9yXCJcbiAgfVxuKSB9KSwgU08gPSAoKSA9PiAvKiBAX19QVVJFX18gKi8gYyhcInN2Z1wiLCB7IHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsIHZpZXdCb3g6IFwiMCAwIDI0IDI0XCIsIGZpbGw6IFwibm9uZVwiLCBjaGlsZHJlbjogLyogQF9fUFVSRV9fICovIGMoXG4gIFwicGF0aFwiLFxuICB7XG4gICAgZDogXCJNMjMuNDgwMyA4LjcwMzY1TDE1LjQ3NTEgOC4xODQwNEwxMi41NTg1IDAuMzg5NzJDMTIuNDk2NCAwLjEyOTkwOSAxMi4yNDgyIDAgMTIgMEMxMS43NTE4IDAgMTEuNTY1NiAwLjEyOTkwOSAxMS40NDE1IDAuMzg5NzJMOC41MjQ4NiA4LjE4NDA0TDAuNTE5NzA5IDguNzAzNjVDMC4yNzE0ODcgOC43MDM2NSAwLjA4NTMyNzcgOC44OTg1MSAwLjAyMzI3MiA5LjA5MzM3Qy0wLjAzODc4MzYgOS4zNTMxOCAwLjAyMzI2NDUgOS42MTI5OSAwLjIwOTQzMSA5Ljc0MjlMNi4zNTI5MiAxNS4wNjlMNC4zNjcxNyAyMy4xODgxQzQuMzA1MTEgMjMuNDQ3OSA0LjM2NzE0IDIzLjcwNzcgNC42MTUzNyAyMy44Mzc2QzQuNzM5NDggMjMuOTAyNiA0Ljg2MzU5IDIzLjk2NzUgNC45MjU2NCAyMy45Njc1QzUuMDQ5NzUgMjMuOTY3NSA1LjExMTgxIDIzLjk2NzUgNS4yMzU5MiAyMy45MDI2TDEyIDE5LjQyMDhMMTguNzY0IDIzLjkwMjZDMTguOTUwMiAyNC4wMzI1IDE5LjE5ODQgMjQuMDMyNSAxOS4zODQ2IDIzLjkwMjZDMTkuNTcwOCAyMy43NzI3IDE5LjYzMjggMjMuNTEyOSAxOS42MzI4IDIzLjI1M0wxNy42NDcgMTUuMTM0TDIzLjc5MDYgOS44MDc4NkMyMy45NzY3IDkuNjc3OTUgMjQuMDM4OCA5LjQxODE0IDIzLjk3NjcgOS4xNTgzM0MyMy45MTQ3IDguODk4NTIgMjMuNzI4NSA4Ljc2ODYxIDIzLjQ4MDMgOC43MDM2NVpcIixcbiAgICBmaWxsOiBcImN1cnJlbnRDb2xvclwiXG4gIH1cbikgfSksIEVPID0gKCkgPT4gLyogQF9fUFVSRV9fICovIGMoXCJzdmdcIiwgeyB2aWV3Qm94OiBcIjAgMCA0OCA0OFwiLCBmaWxsOiBcIm5vbmVcIiwgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiwgY2hpbGRyZW46IC8qIEBfX1BVUkVfXyAqLyBjKFxuICBcInBhdGhcIixcbiAge1xuICAgIGQ6IFwiTTMwLjgyNDEgMzQuMzEzM0MzMC42NTYzIDM0LjMxMzkgMzAuNDkyNyAzNC4yNjE2IDMwLjM1NjQgMzQuMTYzOEwyMy45NTEgMjkuNTIwMUwxNy41NDU2IDM0LjE2MzhDMTcuNDA4OCAzNC4yNjMxIDE3LjI0MzkgMzQuMzE2MyAxNy4wNzQ5IDM0LjMxNTdDMTYuOTA1OCAzNC4zMTUgMTYuNzQxNCAzNC4yNjA3IDE2LjYwNTIgMzQuMTYwNEMxNi40NjkxIDM0LjA2MDIgMTYuMzY4NCAzMy45MTkyIDE2LjMxNzcgMzMuNzU4QzE2LjI2NjkgMzMuNTk2NyAxNi4yNjg4IDMzLjQyMzUgMTYuMzIyOSAzMy4yNjM0TDE4LjgyMTEgMjUuODYzOUwxMi4zNDY1IDIxLjQyMzhDMTIuMjA2MyAyMS4zMjc3IDEyLjEwMDQgMjEuMTg5MyAxMi4wNDQ1IDIxLjAyODhDMTEuOTg4NSAyMC44NjgzIDExLjk4NTMgMjAuNjk0MSAxMi4wMzU0IDIwLjUzMTdDMTIuMDg1NCAyMC4zNjkyIDEyLjE4NjEgMjAuMjI3IDEyLjMyMjggMjAuMTI1OUMxMi40NTk0IDIwLjAyNDggMTIuNjI0OCAxOS45NyAxMi43OTQ4IDE5Ljk2OTVIMjAuNzgyNUwyMy4xOTMgMTIuNTUxMUMyMy4yNDQ5IDEyLjM5MDkgMjMuMzQ2MyAxMi4yNTEzIDIzLjQ4MjQgMTIuMTUyM0MyMy42MTg2IDEyLjA1MzMgMjMuNzgyNyAxMiAyMy45NTEgMTJDMjQuMTE5NCAxMiAyNC4yODM0IDEyLjA1MzMgMjQuNDE5NiAxMi4xNTIzQzI0LjU1NTggMTIuMjUxMyAyNC42NTcxIDEyLjM5MDkgMjQuNzA5MSAxMi41NTExTDI3LjExOTYgMTkuOTcySDM1LjEwNzNDMzUuMjc3NSAxOS45NzE5IDM1LjQ0MzIgMjAuMDI2MyAzNS41ODAzIDIwLjEyNzNDMzUuNzE3MyAyMC4yMjgyIDM1LjgxODQgMjAuMzcwNCAzNS44Njg4IDIwLjUzM0MzNS45MTkyIDIwLjY5NTUgMzUuOTE2MiAyMC44NyAzNS44NjAzIDIxLjAzMDdDMzUuODA0NCAyMS4xOTE1IDM1LjY5ODQgMjEuMzMwMSAzNS41NTggMjEuNDI2M0wyOS4wODA5IDI1Ljg2MzlMMzEuNTc3NiAzMy4yNjE0QzMxLjYxODEgMzMuMzgxMiAzMS42Mjk1IDMzLjUwODggMzEuNjEwOCAzMy42MzM5QzMxLjU5MjIgMzMuNzU4OSAzMS41NDQxIDMzLjg3NzcgMzEuNDcwNCAzMy45ODA1QzMxLjM5NjggMzQuMDgzMiAzMS4yOTk4IDM0LjE2NyAzMS4xODc0IDM0LjIyNDlDMzEuMDc1IDM0LjI4MjcgMzAuOTUwNSAzNC4zMTMgMzAuODI0MSAzNC4zMTMzWlwiLFxuICAgIGZpbGw6IFwiY3VycmVudENvbG9yXCJcbiAgfVxuKSB9KSwga08gPSAoKSA9PiAvKiBAX19QVVJFX18gKi8gYyhcInN2Z1wiLCB7IHZpZXdCb3g6IFwiMCAwIDI0IDI0XCIsIGZpbGw6IFwibm9uZVwiLCB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLCBjaGlsZHJlbjogLyogQF9fUFVSRV9fICovIGMoXG4gIFwicGF0aFwiLFxuICB7XG4gICAgZmlsbFJ1bGU6IFwiZXZlbm9kZFwiLFxuICAgIGNsaXBSdWxlOiBcImV2ZW5vZGRcIixcbiAgICBkOiBcIk00LjU5MDgyIDBIMTkuMzk5N0MxOS41OTU4IDAgMTkuNzY0IDAuMDYyOTAwMSAxOS44NzU3IDAuMTcwMzUyQzE5Ljk4NzIgMC4yNzc2MDkgMjAuMDM5NiAwLjQyNjk1MyAyMC4wMDcxIDAuNTkxMTgyVjIzLjQxMzhDMjAuMDA3MSAyMy43NDExIDE5LjczNTIgMjQgMTkuMzk5NyAyNEg0LjU5MDgyQzQuMjU1MzUgMjQgMy45ODM0IDIzLjc0MTEgMy45ODM0IDIzLjQxMzhWMC41ODYxODlDMy45ODM0IDAuMjU4ODc1IDQuMjU1MzYgMCA0LjU5MDgyIDBaTTE4Ljc5MjIgMS4yMzJINS4xOTgyOVYyMi44Mjc2SDE4Ljc5MjJWMS4yMzJaTTEzLjUxMzQgNC4wMzMxNkgxMC41MzkzQzEwLjIwMzkgNC4wMzMxNiA5LjkzMTg4IDMuNzc0MjUgOS45MzE4OCAzLjQ0Njk0QzkuOTMxODggMy4xMTk2MyAxMC4yMDM5IDIuODYwNzYgMTAuNTM5MyAyLjg2MDc2SDEzLjUxMzRDMTMuODQ4OSAyLjg2MDc2IDE0LjEyMDggMy4xMTk2MyAxNC4xMjA4IDMuNDQ2OTRDMTQuMTIwOCAzLjc3NDI1IDEzLjg0ODkgNC4wMzMxNiAxMy41MTM0IDQuMDMzMTZaTTE0LjEyMDggMTkuMTIyNEMxNC4xMjA4IDIwLjIyNDYgMTMuMTY3MyAyMS4xMzkxIDEyLjAyNjMgMjEuMTM5MUMxMC44ODU0IDIxLjEzOTEgOS45MzE4OCAyMC4yMjQ2IDkuOTMxODggMTkuMTIyNEM5LjkzMTg4IDE4LjAyMDMgMTAuODg1NCAxNy4xMDU3IDEyLjAyNjMgMTcuMTA1N0MxMy4xNjczIDE3LjEwNTcgMTQuMTIwOCAxOC4wMjAzIDE0LjEyMDggMTkuMTIyNFpNMTIuOTA2IDE5LjEyMjRDMTIuOTA2IDE4LjY3NDkgMTIuNDk2NCAxOC4yNzgyIDEyLjAyNjMgMTguMjc4MkMxMS41NTYzIDE4LjI3ODIgMTEuMTQ2NyAxOC42NzQ5IDExLjE0NjcgMTkuMTIyNEMxMS4xNDY3IDE5LjU2OTkgMTEuNTU2MyAxOS45NjY3IDEyLjAyNjMgMTkuOTY2N0MxMi40OTY0IDE5Ljk2NjcgMTIuOTA2IDE5LjU2OTkgMTIuOTA2IDE5LjEyMjRaXCIsXG4gICAgZmlsbDogXCJjdXJyZW50Q29sb3JcIlxuICB9XG4pIH0pLCBOTyA9ICgpID0+IC8qIEBfX1BVUkVfXyAqLyBjKFwic3ZnXCIsIHsgdmlld0JveDogXCIwIDAgMjQgMjRcIiwgZmlsbDogXCJub25lXCIsIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsIGNoaWxkcmVuOiAvKiBAX19QVVJFX18gKi8gYyhcbiAgXCJwYXRoXCIsXG4gIHtcbiAgICBmaWxsUnVsZTogXCJldmVub2RkXCIsXG4gICAgY2xpcFJ1bGU6IFwiZXZlbm9kZFwiLFxuICAgIGQ6IFwiTTIwIDEuNEg0QzIuNTY0MDYgMS40IDEuNCAyLjU2NDA2IDEuNCA0VjIwQzEuNCAyMS40MzU5IDIuNTY0MDYgMjIuNiA0IDIyLjZIMjBDMjEuNDM1OSAyMi42IDIyLjYgMjEuNDM1OSAyMi42IDIwVjRDMjIuNiAyLjU2NDA2IDIxLjQzNTkgMS40IDIwIDEuNFpNNCAwQzEuNzkwODYgMCAwIDEuNzkwODYgMCA0VjIwQzAgMjIuMjA5MSAxLjc5MDg2IDI0IDQgMjRIMjBDMjIuMjA5MSAyNCAyNCAyMi4yMDkxIDI0IDIwVjRDMjQgMS43OTA4NiAyMi4yMDkxIDAgMjAgMEg0WlwiLFxuICAgIGZpbGw6IFwiY3VycmVudENvbG9yXCJcbiAgfVxuKSB9KSwgVE8gPSAoKSA9PiAvKiBAX19QVVJFX18gKi8gYyhcInN2Z1wiLCB7IHZpZXdCb3g6IFwiMCAwIDI0IDI0XCIsIGZpbGw6IFwibm9uZVwiLCB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLCBjaGlsZHJlbjogLyogQF9fUFVSRV9fICovIGMoXG4gIFwicGF0aFwiLFxuICB7XG4gICAgZmlsbFJ1bGU6IFwiZXZlbm9kZFwiLFxuICAgIGNsaXBSdWxlOiBcImV2ZW5vZGRcIixcbiAgICBkOiBcIk0xNC40ODAzIDAuNjU0NTMyQzE0LjQ4MDMgMS4wMTgxNSAxNC4xNzk2IDEuMzA5MDIgMTMuODAzOCAxLjMwOTAySDEwLjE5NjFDOS44MjAyOCAxLjMwOTAyIDkuNTE5NjYgMS4wMTgxNSA5LjUxOTY2IDAuNjU0NTMyQzkuNTE5NjYgMC4yOTA5MTMgOS44MjAyOCAwIDEwLjE5NjEgMEgxMy44MDM4QzE0LjE3OTYgMCAxNC40ODAzIDAuMjkwOTEzIDE0LjQ4MDMgMC42NTQ1MzJaTTEyIDEuNzQ1NEM1LjY4NjI2IDEuNzQ1NCAwLjUgNi43NjM2IDAuNSAxMi44NzI3QzAuNSAxOC45ODE4IDUuNjg2MjYgMjQgMTIgMjRDMTguMzEzNyAyNCAyMy41IDE4Ljk4MTggMjMuNSAxMi44NzI3QzIzLjUgNi43NjM2IDE4LjM4ODkgMS43NDU0IDEyIDEuNzQ1NFpNMTIgMjIuNjE4MkM2LjQzNzkgMjIuNjE4MiAxLjkyODA4IDE4LjI1NDYgMS45MjgwOCAxMi44NzI3QzEuOTI4MDggNy40OTA4NyA2LjQzNzkgMy4xMjcyIDEyIDMuMTI3MkMxNy41NjIxIDMuMTI3MiAyMi4wNzE5IDcuNDkwODcgMjIuMDcxOSAxMi44NzI3QzIyLjE0NyAxOC4yNTQ2IDE3LjU2MjEgMjIuNjE4MiAxMiAyMi42MTgyWk05LjA2ODY0IDUuNjAwMDRDOC45MTgzMiA1LjIzNjQxIDguNDY3MzQgNS4xNjM2NyA4LjE2NjcgNS4zMDkxMkM3Ljc5MDg5IDUuNDU0NTcgNy43MTU3NiA1Ljg5MDk0IDcuODY2MDggNi4xODE4NEwxMS40NzM4IDEzLjE2MzVDMTEuNjI0MSAxMy4zODE3IDExLjg0OTYgMTMuNTI3MSAxMi4wNzUxIDEzLjUyNzFIMTkuMjkwNkMxOS42NjY0IDEzLjUyNzEgMTkuOTY3IDEzLjIzNjIgMTkuOTY3IDEyLjg3MjZDMTkuOTY3IDEyLjUwOSAxOS42NjY0IDEyLjIxODEgMTkuMjkwNiAxMi4yMTgxSDEyLjUyNjFMOS4wNjg2NCA1LjYwMDA0WlwiLFxuICAgIGZpbGw6IFwiY3VycmVudENvbG9yXCJcbiAgfVxuKSB9KSwgSU8gPSAoKSA9PiAvKiBAX19QVVJFX18gKi8gZTEoXCJzdmdcIiwgeyB2aWV3Qm94OiBcIjAgMCAyNCAyNFwiLCBmaWxsOiBcIm5vbmVcIiwgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiwgY2hpbGRyZW46IFtcbiAgLyogQF9fUFVSRV9fICovIGMoXG4gICAgXCJjaXJjbGVcIixcbiAgICB7XG4gICAgICBjeDogXCIxMlwiLFxuICAgICAgY3k6IFwiMTJcIixcbiAgICAgIHI6IFwiMTEuM1wiLFxuICAgICAgc3Ryb2tlOiBcImN1cnJlbnRDb2xvclwiLFxuICAgICAgc3Ryb2tlV2lkdGg6IFwiMS40XCJcbiAgICB9XG4gICksXG4gIC8qIEBfX1BVUkVfXyAqLyBjKFxuICAgIFwicGF0aFwiLFxuICAgIHtcbiAgICAgIGZpbGxSdWxlOiBcImV2ZW5vZGRcIixcbiAgICAgIGNsaXBSdWxlOiBcImV2ZW5vZGRcIixcbiAgICAgIGQ6IFwiTTguMjg3IDkuOTc5NDFWMTQuMDY2MUwxNS45NDg1IDguMTMyN0wxNS45NTU5IDguMTI3NTFDMTYuMTg0NyA3Ljk2NzU2IDE2LjYwNTYgNy45MTU1OSAxNi44NTU4IDguMjI2NkMxNy4wMzY3IDguNDUxMzYgMTcuMDkwOSA4Ljg2OTI5IDE2Ljc1ODYgOS4xMDk2TDguMDIyMzQgMTUuODkwNkw3Ljk4NDQgMTUuOTA4M0w3Ljk3NDE1IDE1LjkxMzJDNy45MjM1NCAxNS45MzczIDcuNzkyMiAxNiA3LjY0MzUxIDE2TDcuNjQxMTMgMTZDNy42MjUwOCAxNiA3LjU3NzMyIDE2LjAwMDEgNy41MjQ5MyAxNS45OTJDNy40OTEwOCAxNS45ODY3IDcuNDE5NTcgMTUuOTczMyA3LjM0NTA1IDE1LjkyOTdDNy4yMjUxOCAxNS44NzQ0IDcuMTQ0NjggMTUuNzgzNCA3LjA5NjU0IDE1LjcwNjVDNy4wMzk1NyAxNS42MTU1IDcgMTUuNTAwOSA3IDE1LjM4MThWOS45Nzk0MUM3IDkuNjE5NTUgNy4zMDU2MSA5LjM2MTE5IDcuNjQzNTEgOS4zNjExOUM3Ljk4MTQ0IDkuMzYxMTkgOC4yODcgOS42MTk1OCA4LjI4NyA5Ljk3OTQxWlwiLFxuICAgICAgZmlsbDogXCJjdXJyZW50Q29sb3JcIlxuICAgIH1cbiAgKVxuXSB9KSwgRE8gPSAoKSA9PiAvKiBAX19QVVJFX18gKi8gZTEoXCJzdmdcIiwgeyB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLCB2aWV3Qm94OiBcIjAgMCAyNCAyNFwiLCBmaWxsOiBcIm5vbmVcIiwgY2hpbGRyZW46IFtcbiAgLyogQF9fUFVSRV9fICovIGMoXCJnXCIsIHsgY2xpcFBhdGg6IFwidXJsKCNjbGlwMF8zMjE2XzEyNDAwKVwiLCBjaGlsZHJlbjogLyogQF9fUFVSRV9fICovIGMoXG4gICAgXCJwYXRoXCIsXG4gICAge1xuICAgICAgZmlsbFJ1bGU6IFwiZXZlbm9kZFwiLFxuICAgICAgY2xpcFJ1bGU6IFwiZXZlbm9kZFwiLFxuICAgICAgZDogXCJNMTIgMjRDMTQuMzczNCAyNCAxNi42OTM1IDIzLjI5NjIgMTguNjY2OCAyMS45Nzc2QzIwLjY0MDIgMjAuNjU5MSAyMi4xNzgzIDE4Ljc4NDkgMjMuMDg2NiAxNi41OTIyQzIzLjk5NDggMTQuMzk5NSAyNC4yMzI0IDExLjk4NjcgMjMuNzY5NCA5LjY1ODkyQzIzLjMwNjQgNy4zMzExNSAyMi4xNjM1IDUuMTkyOTUgMjAuNDg1MyAzLjUxNDcyQzE4LjgwNzEgMS44MzY0OSAxNi42Njg5IDAuNjkzNjA1IDE0LjM0MTEgMC4yMzA1ODJDMTIuMDEzMyAtMC4yMzI0NDEgOS42MDA1MSAwLjAwNTE5OTQzIDcuNDA3OCAwLjkxMzQ1MUM1LjIxNTA5IDEuODIxNyAzLjM0MDk0IDMuMzU5NzcgMi4wMjIzNiA1LjMzMzE2QzAuNzAzNzg4IDcuMzA2NTUgMCA5LjYyNjYzIDAgMTJDMCAxNS4xODI2IDEuMjY0MjggMTguMjM0OCAzLjUxNDcyIDIwLjQ4NTNDNS43NjUxNSAyMi43MzU3IDguODE3NCAyNCAxMiAyNFpNNy42NCAxNi4zN0M3LjU4MDIxIDE2LjM3NzEgNy41MTk4IDE2LjM3NzEgNy40NiAxNi4zN0M3LjM1NDQ2IDE2LjM1NjUgNy4yNTI1NyAxNi4zMjI1IDcuMTYgMTYuMjdDNy4wMDI4MiAxNi4xOTE2IDYuODcxMDcgMTYuMDcwMiA2Ljc4IDE1LjkyQzYuNjgzMTYgMTUuNzYzOCA2LjYzMTI2IDE1LjU4MzggNi42MyAxNS40VjEwQzYuNjMgOS43MzQ4MSA2LjczNTM2IDkuNDgwNDUgNi45MjI5IDkuMjkyOTJDNy4xMTA0MyA5LjEwNTM4IDcuMzY0NzkgOS4wMDAwMiA3LjYzIDkuMDAwMDJDNy44OTUyMiA5LjAwMDAyIDguMTQ5NTggOS4xMDUzOCA4LjMzNzExIDkuMjkyOTJDOC41MjQ2NSA5LjQ4MDQ1IDguNjMgOS43MzQ4MSA4LjYzIDEwVjEzLjMzTDE1LjY5IDcuODYwMDJDMTUuODgwMSA3LjcyNTIzIDE2LjEwNyA3LjY1MTk0IDE2LjM0IDcuNjUwMDJDMTYuNDg3NyA3LjY1MSAxNi42MzM0IDcuNjg0NjkgMTYuNzY2NSA3Ljc0ODY2QzE2Ljg5OTYgNy44MTI2NCAxNy4wMTcgNy45MDUzMSAxNy4xMSA4LjAyMDAyQzE3LjE5NzggOC4xMjYyOCAxNy4yNjI2IDguMjQ5NTMgMTcuMzAwNCA4LjM4MjA0QzE3LjMzODMgOC41MTQ1NSAxNy4zNDg0IDguNjUzNDUgMTcuMzMgOC43OTAwMkMxNy4zMTQyIDguOTE4MjggMTcuMjcxMiA5LjA0MTY5IDE3LjIwMzkgOS4xNTIwNEMxNy4xMzY3IDkuMjYyMzkgMTcuMDQ2NyA5LjM1NzE1IDE2Ljk0IDkuNDMwMDJMOC4xOSAxNi4yM0g4LjExQzcuOTU0OTkgMTYuMzA5OCA3Ljc4NDIzIDE2LjM1NDIgNy42MSAxNi4zNkw3LjY0IDE2LjM3WlwiLFxuICAgICAgZmlsbDogXCJjdXJyZW50Q29sb3JcIlxuICAgIH1cbiAgKSB9KSxcbiAgLyogQF9fUFVSRV9fICovIGMoXCJkZWZzXCIsIHsgY2hpbGRyZW46IC8qIEBfX1BVUkVfXyAqLyBjKFwiY2xpcFBhdGhcIiwgeyBpZDogXCJjbGlwMF8zMjE2XzEyNDAwXCIsIGNoaWxkcmVuOiAvKiBAX19QVVJFX18gKi8gYyhcInJlY3RcIiwgeyB3aWR0aDogXCIyNFwiLCBoZWlnaHQ6IFwiMjRcIiwgZmlsbDogXCJ3aGl0ZVwiIH0pIH0pIH0pXG5dIH0pLCBITyA9ICgpID0+IC8qIEBfX1BVUkVfXyAqLyBlMShcInN2Z1wiLCB7IHZpZXdCb3g6IFwiMCAwIDI0IDI0XCIsIGZpbGw6IFwibm9uZVwiLCB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLCBjaGlsZHJlbjogW1xuICAvKiBAX19QVVJFX18gKi8gYyhcbiAgICBcInBhdGhcIixcbiAgICB7XG4gICAgICBkOiBcIk0xNS4xNDIgNy4yNTcwOEg4Ljc5MjAxQzguNDYxMjggNy4yNTcwOCA4LjE5NjY5IDcuNTExNzEgOC4xOTY2OSA3LjgzMDAxQzguMTk2NjkgOC4xNDgzMSA4LjQ2MTI4IDguNDAyOTQgOC43OTIwMSA4LjQwMjk0SDE1LjE0MkMxNS40NzI3IDguNDAyOTQgMTUuNzM3MyA4LjE0ODMxIDE1LjczNzMgNy44MzAwMUMxNS43MzczIDcuNTExNzEgMTUuNDcyNyA3LjI1NzA4IDE1LjE0MiA3LjI1NzA4WlwiLFxuICAgICAgZmlsbDogXCJjdXJyZW50Q29sb3JcIlxuICAgIH1cbiAgKSxcbiAgLyogQF9fUFVSRV9fICovIGMoXG4gICAgXCJwYXRoXCIsXG4gICAge1xuICAgICAgZDogXCJNOC43OTIwMSAxMS4wMTMxSDE1LjE0MkMxNS40NzI3IDExLjAxMzEgMTUuNzM3MyAxMS4yNjc3IDE1LjczNzMgMTEuNTg2QzE1LjczNzMgMTEuOTA0MyAxNS40NzI3IDEyLjE1OSAxNS4xNDIgMTIuMTU5SDguNzkyMDFDOC40NjEyOCAxMi4xNTkgOC4xOTY2OSAxMS45MDQzIDguMTk2NjkgMTEuNTg2QzguMTk2NjkgMTEuMjY3NyA4LjQ2MTI4IDExLjAxMzEgOC43OTIwMSAxMS4wMTMxWlwiLFxuICAgICAgZmlsbDogXCJjdXJyZW50Q29sb3JcIlxuICAgIH1cbiAgKSxcbiAgLyogQF9fUFVSRV9fICovIGMoXG4gICAgXCJwYXRoXCIsXG4gICAge1xuICAgICAgZDogXCJNMTUuMTQyIDE0LjcwNTRIOC43OTIwMUM4LjQ2MTI4IDE0LjcwNTQgOC4xOTY2OSAxNC45NjAxIDguMTk2NjkgMTUuMjc4NEM4LjE5NjY5IDE1LjU5NjcgOC40NjEyOCAxNS44NTEzIDguNzkyMDEgMTUuODUxM0gxNS4xNDJDMTUuNDcyNyAxNS44NTEzIDE1LjczNzMgMTUuNTk2NyAxNS43MzczIDE1LjI3ODRDMTUuNzM3MyAxNC45NjAxIDE1LjQ3MjcgMTQuNzA1NCAxNS4xNDIgMTQuNzA1NFpcIixcbiAgICAgIGZpbGw6IFwiY3VycmVudENvbG9yXCJcbiAgICB9XG4gICksXG4gIC8qIEBfX1BVUkVfXyAqLyBjKFxuICAgIFwicGF0aFwiLFxuICAgIHtcbiAgICAgIGQ6IFwiTTguNzkyMDEgMTguMzk3OEgxNS4xNDJDMTUuNDcyNyAxOC4zOTc4IDE1LjczNzMgMTguNjUyNSAxNS43MzczIDE4Ljk3MDdDMTUuNzM3MyAxOS4yODkgMTUuNDcyNyAxOS41NDM3IDE1LjE0MiAxOS41NDM3SDguNzkyMDFDOC40NjEyOCAxOS41NDM3IDguMTk2NjkgMTkuMjg5IDguMTk2NjkgMTguOTcwN0M4LjE5NjY5IDE4LjY1MjUgOC40NjEyOCAxOC4zOTc4IDguNzkyMDEgMTguMzk3OFpcIixcbiAgICAgIGZpbGw6IFwiY3VycmVudENvbG9yXCJcbiAgICB9XG4gICksXG4gIC8qIEBfX1BVUkVfXyAqLyBjKFxuICAgIFwicGF0aFwiLFxuICAgIHtcbiAgICAgIGZpbGxSdWxlOiBcImV2ZW5vZGRcIixcbiAgICAgIGNsaXBSdWxlOiBcImV2ZW5vZGRcIixcbiAgICAgIGQ6IFwiTTE5LjgzODUgMS41Mjc4N0gxNS43MzczVjAuNTcyOTZDMTUuNzM3MyAwLjI1NDY1OCAxNS40NzI3IDAgMTUuMTQyIDBIOC43OTE4MkM4LjQ2MTA4IDAgOC4xOTY0OCAwLjI1NDY1OCA4LjE5NjQ4IDAuNTcyOTZWMS41Mjc4N0g0LjA5NTM1QzMuNzY0NjEgMS41Mjc4NyAzLjUgMS43ODI1MSAzLjUgMi4xMDA4MVYyMy40MjcxQzMuNSAyMy43NDU0IDMuNzY0NjEgMjQgNC4wOTUzNSAyNEgxOS45MDQ2QzIwLjIzNTQgMjQgMjAuNSAyMy43NDU0IDIwLjUgMjMuNDI3MVYyLjEwMDgxQzIwLjUgMS43ODI1MSAyMC4yMzU0IDEuNTI3ODcgMTkuODM4NSAxLjUyNzg3Wk05LjM4NzE3IDEuMjA5NTdIMTQuNDgwNVYzLjA1NTcySDkuMzg3MTdWMS4yMDk1N1pNNC42MjQ1MiAyMi44NTQyVjIuNzM3NDJIOC4xMzAzNFYzLjY5MjMyQzguMTMwMzQgNC4wMTA2MyA4LjM5NDk1IDQuMjY1MjYgOC43MjU2OSA0LjI2NTI2SDE1LjA3NTlDMTUuNDA2NiA0LjI2NTI2IDE1LjY3MTIgNC4wMTA2MyAxNS42NzEyIDMuNjkyMzJWMi43Mzc0MkgxOS4zMDc3VjIyLjg1NDJINC42MjQ1MlpcIixcbiAgICAgIGZpbGw6IFwiY3VycmVudENvbG9yXCJcbiAgICB9XG4gIClcbl0gfSksIFZPID0gKCkgPT4gLyogQF9fUFVSRV9fICovIGUxKFwic3ZnXCIsIHsgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiwgdmlld0JveDogXCIwIDAgMjQgMjRcIiwgZmlsbDogXCJub25lXCIsIGNoaWxkcmVuOiBbXG4gIC8qIEBfX1BVUkVfXyAqLyBjKFxuICAgIFwicGF0aFwiLFxuICAgIHtcbiAgICAgIGZpbGxSdWxlOiBcImV2ZW5vZGRcIixcbiAgICAgIGNsaXBSdWxlOiBcImV2ZW5vZGRcIixcbiAgICAgIGQ6IFwiTTE2LjEgMC4yVjMuNUMxNi4xIDMuOCAxNS45IDQuMSAxNS42IDQuMkg5LjVDOS40IDQuMiA5LjQgNC4yIDkuNCA0LjJDOC45IDQuMiA4LjcgMy45IDguNyAzLjZWMC42QzguNyAwLjIgOSAwIDkuMyAwSDE1LjdDMTUuOCAwIDE2IDAuMSAxNi4xIDAuMlpcIixcbiAgICAgIGZpbGw6IFwiY3VycmVudENvbG9yXCJcbiAgICB9XG4gICksXG4gIC8qIEBfX1BVUkVfXyAqLyBjKFxuICAgIFwicGF0aFwiLFxuICAgIHtcbiAgICAgIGZpbGxSdWxlOiBcImV2ZW5vZGRcIixcbiAgICAgIGNsaXBSdWxlOiBcImV2ZW5vZGRcIixcbiAgICAgIGQ6IFwiTTIwLjMgMS41SDE3LjlWNS4zQzE3LjkgNS43IDE3LjYgNiAxNy4yIDZINy42QzcuMiA2IDYuOSA1LjcgNi45IDUuM1YxLjVINC42QzQuMyAxLjUgNCAxLjggNCAyLjFWMjMuNEM0IDIzLjcgNC4zIDI0IDQuNiAyNEgyMC40QzIwLjcgMjQgMjEgMjMuNyAyMSAyMy40VjIuMUMyMSAxLjggMjAuNyAxLjUgMjAuMyAxLjVaTTE1LjQgMjEuMkg5LjVDOSAyMS4yIDguNiAyMC44IDguNiAyMC4zQzguNiAxOS44IDkgMTkuNCA5LjUgMTkuNEgxNS4zQzE1LjggMTkuNCAxNi4yIDE5LjggMTYuMiAyMC4zQzE2LjMgMjAuOCAxNS45IDIxLjIgMTUuNCAyMS4yWk0xNS40IDE3LjRIOS41QzkgMTcuNCA4LjYgMTcgOC42IDE2LjVDOC42IDE2IDkgMTUuNiA5LjUgMTUuNkgxNS4zQzE1LjggMTUuNiAxNi4yIDE2IDE2LjIgMTYuNUMxNi4yIDE3IDE1LjkgMTcuNCAxNS40IDE3LjRaTTE1LjQgMTMuNkg5LjVDOSAxMy42IDguNiAxMy4yIDguNiAxMi43QzguNiAxMi4yIDkgMTEuOCA5LjUgMTEuOEgxNS4zQzE1LjggMTEuOCAxNi4yIDEyLjIgMTYuMiAxMi43QzE2LjMgMTMuMiAxNS45IDEzLjYgMTUuNCAxMy42Wk0xNS40IDkuN0g5LjVDOSA5LjcgOC42IDkuMyA4LjYgOC44QzguNiA4LjMgOSA3LjkgOS41IDcuOUgxNS4zQzE1LjggNy45IDE2LjIgOC4zIDE2LjIgOC44QzE2LjMgOS4zIDE1LjkgOS43IDE1LjQgOS43WlwiLFxuICAgICAgZmlsbDogXCJjdXJyZW50Q29sb3JcIlxuICAgIH1cbiAgKVxuXSB9KSwgUE8gPSAoKSA9PiAvKiBAX19QVVJFX18gKi8gYyhcInN2Z1wiLCB7IHZpZXdCb3g6IFwiMCAwIDI0IDI0XCIsIGZpbGw6IFwibm9uZVwiLCB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLCBjaGlsZHJlbjogLyogQF9fUFVSRV9fICovIGMoXG4gIFwicGF0aFwiLFxuICB7XG4gICAgZDogXCJNMjMuMjg5NSAxMS4yODk1SDIyLjEwNTNDMjEuNzEwNSA2LjIzNjg0IDE3Ljc2MzIgMi4yMTA1IDEyLjcxMDUgMS44OTQ3MVYwLjcxMDQ5OEMxMi43MTA1IDAuMzE1NzYxIDEyLjM5NDcgMCAxMiAwQzExLjYwNTMgMCAxMS4yODk1IDAuMzE1NzYxIDExLjI4OTUgMC43MTA0OThWMS44OTQ3MUM2LjIzNjg0IDIuMjg5NDUgMi4yMTA1MyA2LjIzNjg0IDEuODk0NzQgMTEuMjg5NUgwLjcxMDUyN0MwLjMxNTc5MSAxMS4yODk1IDAgMTEuNjA1MyAwIDEyQzAgMTIuMzk0OCAwLjMxNTc5MSAxMi43MTA1IDAuNzEwNTI3IDEyLjcxMDVIMS44OTQ3NEMyLjI4OTQ3IDE3Ljc2MzIgNi4yMzY4NCAyMS43ODk1IDExLjI4OTUgMjIuMTA1M1YyMy4yODk1QzExLjI4OTUgMjMuNjg0MiAxMS42MDUzIDI0IDEyIDI0QzEyLjM5NDcgMjQgMTIuNzEwNSAyMy42ODQyIDEyLjcxMDUgMjMuMjg5NVYyMi4xMDUzQzE3Ljc2MzIgMjEuNzEwNiAyMS43ODk1IDE3Ljc2MzIgMjIuMTA1MyAxMi43MTA1SDIzLjI4OTVDMjMuNjg0MiAxMi43MTA1IDI0IDEyLjM5NDggMjQgMTJDMjQgMTEuNjA1MyAyMy42ODQyIDExLjI4OTUgMjMuMjg5NSAxMS4yODk1Wk0xMi43MTA1IDIwLjgyODJWMTkuNzIyOUMxMi43MTA1IDE5LjMyODIgMTIuMzk0NyAxOS4wMTI0IDEyIDE5LjAxMjRDMTEuNjA1MyAxOS4wMTI0IDExLjI4OTUgMTkuMzI4MiAxMS4yODk1IDE5LjcyMjlWMjAuODI4MkM3LjEwNTI2IDIwLjUxMjQgMy41ODc1NSAxNi45NzM3IDMuMTkyODEgMTIuNzEwNUg0LjI5ODA3QzQuNjkyODEgMTIuNzEwNSA1LjAwODYgMTIuMzk0OCA1LjAwODYgMTJDNS4wMDg2IDExLjYwNTMgNC42OTI4MSAxMS4yODk1IDQuMjk4MDcgMTEuMjg5NUgzLjE5MjgxQzMuNTA4NiA3LjEwNTI2IDcuMDI2MzIgMy41OTM0NyAxMS4yODk1IDMuMTk4NzNWNC4zMDM5N0MxMS4yODk1IDQuNjk4NzEgMTEuNjA1MyA1LjAxNDUyIDEyIDUuMDE0NTJDMTIuMzk0NyA1LjAxNDUyIDEyLjcxMDUgNC42OTg3MSAxMi43MTA1IDQuMzAzOTdWMy4xOTg3M0MxNi44OTQ3IDMuNTE0NTIgMjAuNDc3MSA3LjA5ODE4IDIwLjg3MTggMTEuMzYxM0gxOS43NjY2QzE5LjM3MTggMTEuMzYxMyAxOS4wNTYgMTEuNjc3MiAxOS4wNTYgMTIuMDcxOUMxOS4wNTYgMTIuNDY2NiAxOS4zNzE4IDEyLjc4MjQgMTkuNzY2NiAxMi43ODI0SDIwLjg3MThDMjAuNDc3MSAxNi45NjY3IDE2Ljg5NDcgMjAuNTEyNCAxMi43MTA1IDIwLjgyODJaXCIsXG4gICAgZmlsbDogXCJjdXJyZW50Q29sb3JcIlxuICB9XG4pIH0pLCBGTyA9ICgpID0+IC8qIEBfX1BVUkVfXyAqLyBjKFwic3ZnXCIsIHsgdmlld0JveDogXCIwIDAgMjQgMjRcIiwgZmlsbDogXCJub25lXCIsIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsIGNoaWxkcmVuOiAvKiBAX19QVVJFX18gKi8gYyhcbiAgXCJwYXRoXCIsXG4gIHtcbiAgICBkOiBcIk0xOC45MjEyIDkuNjA5OTRDMTkuOTE3IDguODEzMjYgMjAuNDE0OSA3LjcxNzgzIDIwLjQxNDkgNi40MjMyMkMyMC40MTQ5IDQuMjMyMzUgMTguNjIyNCAyLjQzOTgyIDE2LjMzMTkgMi40Mzk4MkMxNC4xNDExIDIuNDM5ODIgMTIuMjQ5IDQuMjMyMzUgMTIuMjQ5IDYuNDIzMjJDMTIuMjQ5IDcuNjE4MjQgMTIuNzQ2OSA4LjgxMzI2IDEzLjc0MjcgOS42MDk5NEMxMi41NDc3IDEwLjAwODMgMTEuMzUyNyAxMC43MDU0IDEwLjU1NiAxMS43MDEyQzEwLjM1NjggMTEuNjAxNiAxMC4yNTczIDExLjYwMTYgMTAuMDU4MSAxMS41MDIxQzExLjA1MzkgMTAuNzA1NCAxMS41NTE5IDkuNjA5OTQgMTEuNTUxOSA4LjMxNTM0QzExLjU1MTkgNi4xMjQ0NyA5Ljc1OTM0IDQuMzMxOTQgNy40Njg4OCA0LjMzMTk0QzUuMjc4MDEgNC4zMzE5NCAzLjM4NTg5IDYuMTI0NDcgMy4zODU4OSA4LjMxNTM0QzMuNDg1NDggOS41MTAzNiAzLjk4MzQgMTAuNzA1NCA0Ljk3OTI1IDExLjUwMjFDMS45OTE3IDEyLjM5ODMgMCAxNC45ODc1IDAgMTguMDc0N1YyMC45NjI2QzAgMjEuMjYxNCAwLjI5ODc1NSAyMS41NjAyIDAuNTk3NTEgMjEuNTYwMkgxNC41Mzk0QzE0LjgzODIgMjEuNTYwMiAxNS4xMzY5IDIxLjI2MTQgMTUuMTM2OSAyMC45NjI2VjE5LjY2OEgyMy40MDI1QzIzLjcwMTIgMTkuNjY4IDI0IDE5LjM2OTMgMjQgMTkuMDcwNVYxNi4xODI2QzIzLjkwMDQgMTMuMTk1IDIxLjgwOTEgMTAuNDA2NiAxOC45MjEyIDkuNjA5OTRaTTExLjc1MSAxMi4xOTkyQzEyLjg0NjUgMTEuMTAzNyAxNC4zNDAyIDEwLjUwNjIgMTUuODM0IDEwLjUwNjJIMTcuMDI5QzIwLjIxNTggMTAuNTA2MiAyMi44MDUgMTMuMDk1NCAyMi44MDUgMTYuMTgyNlYxOC40NzNIMTUuMTM2OVYxOC4wNzQ3QzE1LjAzNzMgMTUuNjg0NiAxMy43NDI3IDEzLjQ5MzggMTEuNzUxIDEyLjE5OTJaTTEzLjU0MzYgNi41MjI4MUMxMy41NDM2IDQuOTI5NDUgMTQuODM4MiAzLjczNDQzIDE2LjQzMTUgMy43MzQ0M0MxOC4wMjQ5IDMuNzM0NDMgMTkuMzE5NSA1LjAyOTAzIDE5LjMxOTUgNi41MjI4MUMxOS4zMTk1IDguMTE2MTcgMTguMDI0OSA5LjMxMTE5IDE2LjQzMTUgOS4zMTExOUMxNC44MzgyIDkuMzExMTkgMTMuNTQzNiA4LjAxNjU4IDEzLjU0MzYgNi41MjI4MVpNNi45NzA5NSAxMi4yOTg3SDguMTY1OTdDOC43NjM0OCAxMi4yOTg3IDkuNDYwNTggMTIuMzk4MyAxMC4wNTgxIDEyLjU5NzVDMTAuMzU2OCAxMi42OTcxIDEwLjY1NTYgMTIuNzk2NyAxMC44NTQ4IDEyLjk5NThDMTIuNzQ2OSAxMy45OTE3IDEzLjg0MjMgMTUuODgzOCAxMy44NDIzIDE3Ljk3NTFWMjAuMjY1NUgxLjE5NTAyVjE3Ljk3NTFDMS4xOTUwMiAxNC44ODggMy43ODQyMyAxMi4yOTg3IDYuOTcwOTUgMTIuMjk4N1pNNC42ODA1IDguNDE0OTJDNC42ODA1IDYuODIxNTYgNS45NzUxIDUuNjI2NTQgNy41Njg0NiA1LjYyNjU0QzkuMTYxODMgNS42MjY1NCAxMC40NTY0IDYuOTIxMTUgMTAuNDU2NCA4LjQxNDkyQzEwLjQ1NjQgMTAuMDA4MyA5LjE2MTgzIDExLjIwMzMgNy41Njg0NiAxMS4yMDMzQzUuOTc1MSAxMS4yMDMzIDQuNjgwNSA5LjkwODcgNC42ODA1IDguNDE0OTJaXCIsXG4gICAgZmlsbDogXCJjdXJyZW50Q29sb3JcIlxuICB9XG4pIH0pLCBYTyA9ICgpID0+IC8qIEBfX1BVUkVfXyAqLyBjKFwic3ZnXCIsIHsgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiwgdmlld0JveDogXCIwIDAgMjQgMjRcIiwgZmlsbDogXCJub25lXCIsIGNoaWxkcmVuOiAvKiBAX19QVVJFX18gKi8gYyhcbiAgXCJwYXRoXCIsXG4gIHtcbiAgICBkOiBcIk0xOC45MjEyIDkuNjEwMDdDMTkuOTE3IDguODEzMzkgMjAuNDE0OSA3LjcxNzk1IDIwLjQxNDkgNi40MjMzNEMyMC40MTQ5IDQuMjMyNDcgMTguNjIyNCAyLjQzOTk0IDE2LjMzMTkgMi40Mzk5NEMxNC4xNDExIDIuNDM5OTQgMTIuMjQ5IDQuMjMyNDcgMTIuMjQ5IDYuNDIzMzRDMTIuMjQ5IDcuNjE4MzYgMTIuNzQ2OSA4LjgxMzM5IDEzLjc0MjcgOS42MTAwN0MxMi41NDc3IDEwLjAwODQgMTEuMzUyNyAxMC43MDU1IDEwLjU1NiAxMS43MDE0QzEwLjM1NjggMTEuNjAxOCAxMC4yNTczIDExLjYwMTggMTAuMDU4MSAxMS41MDIyQzExLjA1MzkgMTAuNzA1NSAxMS41NTE5IDkuNjEwMDcgMTEuNTUxOSA4LjMxNTQ2QzExLjU1MTkgNi4xMjQ1OSA5Ljc1OTM0IDQuMzMyMDYgNy40Njg4OCA0LjMzMjA2QzUuMjc4MDEgNC4zMzIwNiAzLjM4NTg5IDYuMTI0NTkgMy4zODU4OSA4LjMxNTQ2QzMuNDg1NDggOS41MTA0OCAzLjk4MzQgMTAuNzA1NSA0Ljk3OTI1IDExLjUwMjJDMS45OTE3IDEyLjM5ODQgMCAxNC45ODc3IDAgMTguMDc0OFYyMC45NjI4QzAgMjEuMjYxNSAwLjI5ODc1NSAyMS41NjAzIDAuNTk3NTEgMjEuNTYwM0gxNC41Mzk0QzE0LjgzODIgMjEuNTYwMyAxNS4xMzY5IDIxLjI2MTUgMTUuMTM2OSAyMC45NjI4VjE5LjY2ODJIMjMuNDAyNUMyMy43MDEyIDE5LjY2ODIgMjQgMTkuMzY5NCAyNCAxOS4wNzA2VjE2LjE4MjdDMjMuOTAwNCAxMy4xOTUxIDIxLjgwOTEgMTAuNDA2NyAxOC45MjEyIDkuNjEwMDdaXCIsXG4gICAgZmlsbDogXCJjdXJyZW50Q29sb3JcIlxuICB9XG4pIH0pLCBVTyA9ICgpID0+IC8qIEBfX1BVUkVfXyAqLyBjKFwic3ZnXCIsIHsgdmlld0JveDogXCIwIDAgMjQgMjRcIiwgZmlsbDogXCJub25lXCIsIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsIGNoaWxkcmVuOiAvKiBAX19QVVJFX18gKi8gYyhcbiAgXCJwYXRoXCIsXG4gIHtcbiAgICBmaWxsUnVsZTogXCJldmVub2RkXCIsXG4gICAgY2xpcFJ1bGU6IFwiZXZlbm9kZFwiLFxuICAgIGQ6IFwiTTguMDQ3NjUgMjMuOTk2QzcuMzYzNDggMjMuOTUzNSA2LjcwMzAzIDIzLjQxMTUgNi4zNzY2NCAyMi42NDczTDYuMzc2MTYgMjIuNjQ2MkM2LjE5MTk0IDIyLjIwMjIgNS45ODIwNSAyMS40MDU5IDYuMTcyNDQgMjAuMjUwMUM2LjM1NjE0IDE5LjEzNDggNi45MTE1MSAxNy42OTA3IDguMjEyNDkgMTUuOTA5NEg0LjcxOTc5QzMuMzYwNjEgMTUuOTA5NCAyLjI0NjE1IDE0LjgxMzEgMi4yNDYxNSAxMy40NjlDMi4yNDYxNSAxMi45NjE2IDIuNDA5NTYgMTIuNDg3IDIuNjc3OTcgMTIuMTAxOUMxLjY5NTM1IDExLjc2OTQgMC45OTAyMzQgMTAuODc0MiAwLjk5MDIzNCA5Ljc5MzE3QzAuOTkwMjM0IDguNzEyMTYgMS42OTUzNCA3LjgxNjkyIDIuNjc3OTcgNy40ODQzOUMyLjQwOTU2IDcuMDk5MzUgMi4yNDYxNCA2LjYyNDY5IDIuMjQ2MTQgNi4xMTczMUMyLjI0NjE0IDQuOTI0MzggMy4xMzAzOCAzLjkxNTg2IDQuMjcxNDUgMy43MDU4NkM0LjAxOTA5IDMuMzIzIDMuODk0NTIgMi44NjE0NCAzLjg5NDUyIDIuNDAyNzZDMy44OTQ1MiAxLjA2MjU5IDQuOTY2MyAtMC4wMzg3MjI5IDYuMzMwNjcgMC4wMDEwNDQyNUwxMi42MDg1IDAuMDAxMDQzN0MxNS4yNTE2IDAuMDAxMDQzNDcgMTcuNjMgMS40NjMyNCAxOC42MTI2IDMuNjc2OUwyMi40MjAyIDMuNjc2OUMyMi43MTMyIDMuNjc2OSAyMy4wMSAzLjkxNTcyIDIzLjAxIDQuMjYwMDNWMTQuMzU5QzIzLjAxIDE0LjY1MTkgMjIuNzY1MyAxNC45NDIxIDIyLjQyMDIgMTQuOTQyMUwxNy41NTU2IDE0Ljk0MjFMMTMuNDY3IDE4LjE2NjhDMTEuNzk4NyAxOS40NjczIDEwLjk0NDcgMjAuODQyNCA5LjU3MDAzIDIzLjA4ODNDOS4xODc3IDIzLjU5NCA4LjczOTg1IDI0LjA0ODEgOC4wNDc2NSAyMy45OTZaTTE3LjY3NzcgNC40NTYxQzE2LjkyMTEgMi40MTQ4IDE0LjMyMjIgMS40MDAwNiAxMi42NDc3IDEuNDAwMDZMNi4zNjgxNiAxLjM5OTQ3QzUuNjg0MjQgMS4zOTk0NyA1LjExMzMzIDEuOTMwNDUgNS4xMTMzMyAyLjYzNDkyQzUuMTEzMzMgMy4zMDUxIDUuNjQ5NDYgMy44NzAzNyA2LjM2ODE2IDMuODcwMzdDNy4wNzYwOCAzLjg3MDM3IDcuMTM5NjkgNS4wMzY2MyA2LjM2ODE2IDUuMDM2NjNINC43MTk3OEM0LjAzNTg2IDUuMDM2NjMgMy40NjQ5NSA1LjU2NzYxIDMuNDY0OTUgNi4yNzIwOEMzLjQ2NDk1IDYuOTQyMjYgNC4wMDEwOSA3LjUwNzUzIDQuNzE5NzggNy41MDc1M0M1LjQyNzcgNy41MDc1MyA1LjQ5MTMxIDguNjczOCA0LjcxOTc5IDguNjczOEgzLjUwMzEyQzIuODE5MiA4LjY3MzggMi4yNDgyOSA5LjIwNDc4IDIuMjQ4MjkgOS45MDkyNUMyLjI0ODI5IDEwLjU3OTQgMi43ODQ0MyAxMS4xNDQ3IDMuNTAzMTIgMTEuMTQ0N0g0LjcxOTc5QzUuNDI3NyAxMS4xNDQ3IDUuNDkxMzEgMTIuMzExIDQuNzE5NzkgMTIuMzExQzQuMDM4MTEgMTIuMzExIDMuNDY0OTUgMTIuODc4NCAzLjQ2NDk1IDEzLjU0NjRDMy40NjQ5NSAxNC4yMTY2IDQuMDAxMDkgMTQuNzgxOSA0LjcxOTc5IDE0Ljc4MTlIOS40Njg2OUM5Ljk4MjgxIDE0Ljc4MTkgMTAuMjExNCAxNS4zNTg4IDkuOTE2NDcgMTUuNzQ2NUw5LjkxMjkyIDE1Ljc1MTJDOC4yOTMxOCAxNy42NzUxIDcuNjM3MTkgMTkuMTY2NyA3LjQxMTY2IDIwLjI0MDZDNy4xODY1NSAyMS4zMTI0IDcuMzg4NjMgMjEuOTc1MiA3LjQ5ODY5IDIyLjI0NjRMNy40OTkyOSAyMi4yNDc5QzcuNjgzNzMgMjIuNzIwNyA4LjAwMTY2IDIyLjg2ODggOC4xMzQyOSAyMi44Njg4QzguMzk3NTcgMjIuODY4OCA4LjU1MTIgMjIuNTA3OSA4LjY3NzExIDIyLjMyMjFDMTAuMDEzNyAyMC4xNjA4IDEwLjkyNjkgMTguNjg0MiAxMi43MzEzIDE3LjI4MzZMMTYuOTY0OSAxMy45MjE0QzE3LjA3MDUgMTMuODIwMyAxNy4yMTg3IDEzLjc3NTggMTcuMzU3NCAxMy43NzU4TDIxLjg2OTcgMTMuNzc1OFY0Ljg0MzE2TDE4LjI2IDQuODQzMTZDMTcuOTg0NiA0Ljg0MzE2IDE3Ljc3MjMgNC42ODk1NyAxNy42NzkgNC40NTk0N0wxNy42Nzc3IDQuNDU2MVpcIixcbiAgICBmaWxsOiBcImN1cnJlbnRjb2xvclwiXG4gIH1cbikgfSksIFlPID0gKCkgPT4gLyogQF9fUFVSRV9fICovIGMoXCJzdmdcIiwgeyB2aWV3Qm94OiBcIjAgMCAyNCAyNFwiLCBmaWxsOiBcIm5vbmVcIiwgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiwgY2hpbGRyZW46IC8qIEBfX1BVUkVfXyAqLyBjKFxuICBcInBhdGhcIixcbiAge1xuICAgIGZpbGxSdWxlOiBcImV2ZW5vZGRcIixcbiAgICBjbGlwUnVsZTogXCJldmVub2RkXCIsXG4gICAgZDogXCJNMTUuOTUyNiAwLjAwMzk1MTkyQzE2LjYzNjggMC4wNDY1MTgzIDE3LjI5NzIgMC41ODg0NzYgMTcuNjIzNiAxLjM1MjdMMTcuNjI0MSAxLjM1MzgzQzE3LjgwODMgMS43OTc4IDE4LjAxODIgMi41OTQwOSAxNy44Mjc4IDMuNzQ5OTRDMTcuNjQ0MSA0Ljg2NTIyIDE3LjA4ODcgNi4zMDkyOSAxNS43ODc4IDguMDkwNTdIMTkuMjgwNUMyMC42Mzk2IDguMDkwNTcgMjEuNzU0MSA5LjE4Njg5IDIxLjc1NDEgMTAuNTMxQzIxLjc1NDEgMTEuMDM4NCAyMS41OTA3IDExLjUxMyAyMS4zMjIzIDExLjg5ODFDMjIuMzA0OSAxMi4yMzA2IDIzLjAxIDEzLjEyNTggMjMuMDEgMTQuMjA2OEMyMy4wMSAxNS4yODc4IDIyLjMwNDkgMTYuMTgzMSAyMS4zMjIzIDE2LjUxNTZDMjEuNTkwNyAxNi45MDA2IDIxLjc1NDEgMTcuMzc1MyAyMS43NTQxIDE3Ljg4MjdDMjEuNzU0MSAxOS4wNzU2IDIwLjg2OTkgMjAuMDg0MSAxOS43Mjg4IDIwLjI5NDFDMTkuOTgxMiAyMC42NzcgMjAuMTA1NyAyMS4xMzg2IDIwLjEwNTcgMjEuNTk3MkMyMC4xMDU3IDIyLjkzNzQgMTkuMDMzOSAyNC4wMzg3IDE3LjY2OTYgMjMuOTk5SDExLjM5MThDOC43NDg2IDIzLjk5OSA2LjM3MDMgMjIuNTM2OCA1LjM4NzYzIDIwLjMyMzFIMS41ODAwMUMxLjI4NzA0IDIwLjMyMzEgMC45OTAyMzQgMjAuMDg0MyAwLjk5MDIzNCAxOS43NFY5LjY0MTAzQzAuOTkwMjM0IDkuMzQ4MTEgMS4yMzQ5MSA5LjA1NzkgMS41ODAwMSA5LjA1NzlINi40NDQ2OUwxMC41MzMzIDUuODMzMTlDMTIuMjAxNiA0LjUzMjcgMTMuMDU1NSAzLjE1NzY1IDE0LjQzMDIgMC45MTE3MTJDMTQuODEyNiAwLjQwNjAxOCAxNS4yNjA0IC0wLjA0ODEyNzkgMTUuOTUyNiAwLjAwMzk1MTkyWk02LjMyMjU4IDE5LjU0MzlDNy4wNDkzNSAyMS41MDQ5IDkuMDc4NTUgMjIuODI3OSAxMS4zNDA3IDIyLjYwMTFMMTEuMzUyNSAyMi41OTk5TDE3LjYzMjEgMjIuNjAwNUMxOC4zMTYgMjIuNjAwNSAxOC44ODY5IDIyLjA2OTYgMTguODg2OSAyMS4zNjUxQzE4Ljg4NjkgMjAuNjk0OSAxOC4zNTA4IDIwLjEyOTYgMTcuNjMyMSAyMC4xMjk2QzE2Ljg3OCAyMC4xMjk2IDE2Ljg3MjkgMTguOTYzNCAxNy42MzIxIDE4Ljk2MzRIMTkuMjgwNUMxOS45NjQ0IDE4Ljk2MzQgMjAuNTM1MyAxOC40MzI0IDIwLjUzNTMgMTcuNzI3OUMyMC41MzUzIDE3LjA1NzcgMTkuOTk5MiAxNi40OTI1IDE5LjI4MDUgMTYuNDkyNUMxOC41MjY0IDE2LjQ5MjUgMTguNTIxMyAxNS4zMjYyIDE5LjI4MDUgMTUuMzI2MkgyMC40OTcxQzIxLjE4MSAxNS4zMjYyIDIxLjc1MiAxNC43OTUyIDIxLjc1MiAxNC4wOTA4QzIxLjc1MiAxMy40MjA2IDIxLjIxNTggMTIuODU1MyAyMC40OTcxIDEyLjg1NTNIMTkuMjgwNUMxOC41MjY0IDEyLjg1NTMgMTguNTIxMyAxMS42ODkgMTkuMjgwNSAxMS42ODlDMTkuOTYyMSAxMS42ODkgMjAuNTM1MyAxMS4xMjE2IDIwLjUzNTMgMTAuNDUzNkMyMC41MzUzIDkuNzgzNDEgMTkuOTk5MiA5LjIxODEzIDE5LjI4MDUgOS4yMTgxM0gxNC41MzE2QzE0LjI4NSA5LjIxODEzIDE0LjA5IDkuMDcxNjggMTMuOTkzOSA4Ljg4MjIxQzEzLjg4ODcgOC42NzQ3OSAxMy45NDc3IDguNDMyMzkgMTQuMDgzOCA4LjI1MzUyTDE0LjA4NzMgOC4yNDg4NEMxNS43MDcxIDYuMzI0ODkgMTYuMzYzMSA0LjgzMzMxIDE2LjU4ODYgMy43NTk0MkMxNi44MTM3IDIuNjg3NTcgMTYuNjExNiAyLjAyNDg0IDE2LjUwMTYgMS43NTM1OEwxNi41MDEgMS43NTIxQzE2LjMxNjUgMS4yNzkzMSAxNS45OTg2IDEuMTMxMjQgMTUuODY2IDEuMTMxMjRDMTUuNjAyNyAxLjEzMTI0IDE1LjQ3NTcgMS40MTg2NCAxNS4zMjMxIDEuNjc3OTNDMTQuMDk4MSAzLjc1OTQyIDEzLjA3MzMgNS4zMTU4NCAxMS4yNjg5IDYuNzE2NDFMNy4wMzUzNyAxMC4wNzg2QzYuOTI5NzYgMTAuMTc5NyA2Ljc4MTU4IDEwLjIyNDIgNi42NDI4OSAxMC4yMjQySDIuMTMwNTRWMTkuMTU2OEg1Ljc0MDIxQzYuMDE1NjQgMTkuMTU2OCA2LjIyNzkyIDE5LjMxMDQgNi4zMjEyNyAxOS41NDA1TDYuMzIyNTggMTkuNTQzOVpcIixcbiAgICBmaWxsOiBcImN1cnJlbnRjb2xvclwiXG4gIH1cbikgfSksIEdPID0gKCkgPT4gLyogQF9fUFVSRV9fICovIGMoXCJzdmdcIiwgeyB2aWV3Qm94OiBcIjAgMCAyNCAyNFwiLCBmaWxsOiBcIm5vbmVcIiwgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiwgY2hpbGRyZW46IC8qIEBfX1BVUkVfXyAqLyBjKFxuICBcInBhdGhcIixcbiAge1xuICAgIGZpbGxSdWxlOiBcImV2ZW5vZGRcIixcbiAgICBjbGlwUnVsZTogXCJldmVub2RkXCIsXG4gICAgZDogXCJNMCAxMkMwIDUuMzczMTMgNS4zNzMxMyAtNy42MjkzOWUtMDYgMTIgLTcuNjI5MzllLTA2QzE4LjYyNjkgLTcuNjI5MzllLTA2IDI0IDUuMzczMTMgMjQgMTJDMjQgMTguNjI2OSAxOC42MjY5IDI0IDEyIDI0QzUuMzczMTMgMjQgMCAxOC42MjY5IDAgMTJaTTEuMzIzMyAxMkMxLjMyMzMgMTcuODY2IDYuMTMzOTcgMjIuNjc2NyAxMiAyMi42NzY3QzE3LjkyNDkgMjIuNjc2NyAyMi42NzY3IDE3Ljg2NjQgMjIuNjc2NyAxMkMyMi42NzY3IDYuMTMzOTYgMTcuODY2IDEuMzIzMjkgMTIgMS4zMjMyOUM2LjEzMzk3IDEuMzIzMjkgMS4zMjMzIDYuMTMzOTYgMS4zMjMzIDEyWk0xMi42OTEyIDExLjM2NzdIMTcuNjgzOEMxOC4wNDQzIDExLjM2NzcgMTguMzc1IDExLjY5ODQgMTguMzc1IDEyLjA1OUMxOC4zNzUgMTIuNDA5OCAxOC4wOTM4IDEyLjY5MSAxNy43NDMgMTIuNjkxSDEyLjA1OTJDMTEuNzA4NCAxMi42OTEgMTEuNDI3MiAxMi40MDk4IDExLjQyNzIgMTIuMDU5VjYuMzc1MTdDMTEuNDI3MiA2LjAyNDM3IDExLjcwODQgNS43NDMxNCAxMi4wNTkyIDUuNzQzMTRDMTIuNDEgNS43NDMxNCAxMi42OTEyIDYuMDI0MzYgMTIuNjkxMiA2LjM3NTE3VjExLjM2NzdaXCIsXG4gICAgZmlsbDogXCJjdXJyZW50Q29sb3JcIlxuICB9XG4pIH0pLCBRTyA9ICgpID0+IC8qIEBfX1BVUkVfXyAqLyBjKFwic3ZnXCIsIHsgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiwgdmlld0JveDogXCIwIDAgMjQgMjRcIiwgZmlsbDogXCJub25lXCIsIGNoaWxkcmVuOiAvKiBAX19QVVJFX18gKi8gYyhcbiAgXCJwYXRoXCIsXG4gIHtcbiAgICBmaWxsUnVsZTogXCJldmVub2RkXCIsXG4gICAgY2xpcFJ1bGU6IFwiZXZlbm9kZFwiLFxuICAgIGQ6IFwiTTEyIDBDNS40IDAgMCA1LjQgMCAxMkMwIDE4LjYgNS40IDI0IDEyIDI0QzE4LjYgMjQgMjQgMTguNiAyNCAxMkMyNCA1LjQgMTguNiAwIDEyIDBaTTExLjEgMTIuMVY2LjRDMTEuMSA1LjkgMTEuNSA1LjUgMTIgNS41QzEyLjUgNS41IDEyLjkgNS45IDEyLjkgNi40VjExLjFIMTcuNkMxOC4xIDExLjEgMTguNiAxMS42IDE4LjYgMTIuMUMxOC42IDEyLjYgMTguMiAxMyAxNy43IDEzSDEyQzExLjUgMTMgMTEuMSAxMi42IDExLjEgMTIuMVpcIixcbiAgICBmaWxsOiBcImN1cnJlbnRDb2xvclwiXG4gIH1cbikgfSksIFpPID0gKCkgPT4gLyogQF9fUFVSRV9fICovIGUxKFwic3ZnXCIsIHsgdmlld0JveDogXCIwIDAgMjQgMjRcIiwgZmlsbDogXCJub25lXCIsIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsIGNoaWxkcmVuOiBbXG4gIC8qIEBfX1BVUkVfXyAqLyBlMShcImdcIiwgeyBjbGlwUGF0aDogXCJ1cmwoI2NsaXAwXzI2NDBfNDQ4NTUpXCIsIGNoaWxkcmVuOiBbXG4gICAgLyogQF9fUFVSRV9fICovIGMoXG4gICAgICBcInBhdGhcIixcbiAgICAgIHtcbiAgICAgICAgZmlsbFJ1bGU6IFwiZXZlbm9kZFwiLFxuICAgICAgICBjbGlwUnVsZTogXCJldmVub2RkXCIsXG4gICAgICAgIGQ6IFwiTTE4LjkgNS4yMDAwMVYxLjUwMDAxSDIyLjVWNS4yMDAwMUgxOC45Wk0xNy40IDUuOTAwMDFWMC43MDAwMDhDMTcuNCAwLjMwMDAwOCAxNy43IDcuNjI5MzllLTA2IDE4LjEgNy42MjkzOWUtMDZIMjMuM0MyMy43IDcuNjI5MzllLTA2IDI0IDAuMzAwMDA4IDI0IDAuNzAwMDA4VjUuOTAwMDFDMjQgNi4zMDAwMSAyMy43IDYuNzAwMDEgMjMuMyA2LjcwMDAxSDE4LjFDMTcuNyA2LjcwMDAxIDE3LjMgNi4zMDAwMSAxNy40IDUuOTAwMDFaXCIsXG4gICAgICAgIGZpbGw6IFwiY3VycmVudENvbG9yXCJcbiAgICAgIH1cbiAgICApLFxuICAgIC8qIEBfX1BVUkVfXyAqLyBjKFxuICAgICAgXCJwYXRoXCIsXG4gICAgICB7XG4gICAgICAgIGQ6IFwiTTEgMy44MDAwMUgxMy43QzE0LjMgMy44MDAwMSAxNC43IDMuNDI1MDEgMTQuNyAzLjA1MDAxQzE0LjcgMi42MDAwMSAxNC4yIDIuMzAwMDEgMTMuNyAyLjMwMDAxSDFDMC40IDIuMzAwMDEgMCAyLjY3NTAxIDAgMy4wNTAwMUMwIDMuNTAwMDEgMC40IDMuODAwMDEgMSAzLjgwMDAxWlwiLFxuICAgICAgICBmaWxsOiBcImN1cnJlbnRDb2xvclwiXG4gICAgICB9XG4gICAgKSxcbiAgICAvKiBAX19QVVJFX18gKi8gYyhcbiAgICAgIFwicGF0aFwiLFxuICAgICAge1xuICAgICAgICBmaWxsUnVsZTogXCJldmVub2RkXCIsXG4gICAgICAgIGNsaXBSdWxlOiBcImV2ZW5vZGRcIixcbiAgICAgICAgZDogXCJNMTguOSAxMy44VjEwLjJIMjIuNVYxMy44SDE4LjlaTTE3LjQgMTQuNlY5LjQwMDAxQzE3LjQgOS4wMDAwMSAxNy43IDguNzAwMDEgMTguMSA4LjcwMDAxSDIzLjNDMjMuNyA4LjcwMDAxIDI0IDkuMDAwMDEgMjQgOS40MDAwMVYxNC42QzI0IDE1IDIzLjcgMTUuMyAyMy4zIDE1LjNIMTguMUMxNy43IDE1LjMgMTcuMyAxNSAxNy40IDE0LjZaXCIsXG4gICAgICAgIGZpbGw6IFwiY3VycmVudENvbG9yXCJcbiAgICAgIH1cbiAgICApLFxuICAgIC8qIEBfX1BVUkVfXyAqLyBjKFxuICAgICAgXCJwYXRoXCIsXG4gICAgICB7XG4gICAgICAgIGQ6IFwiTTEgMTIuNUgxMy43QzE0LjMgMTIuNSAxNC43IDEyLjEyNSAxNC43IDExLjc1QzE0LjcgMTEuMyAxNC4yIDExIDEzLjcgMTFIMUMwLjQgMTEgMCAxMS4zNzUgMCAxMS43NUMwIDEyLjIgMC40IDEyLjUgMSAxMi41WlwiLFxuICAgICAgICBmaWxsOiBcImN1cnJlbnRDb2xvclwiXG4gICAgICB9XG4gICAgKSxcbiAgICAvKiBAX19QVVJFX18gKi8gYyhcbiAgICAgIFwicGF0aFwiLFxuICAgICAge1xuICAgICAgICBmaWxsUnVsZTogXCJldmVub2RkXCIsXG4gICAgICAgIGNsaXBSdWxlOiBcImV2ZW5vZGRcIixcbiAgICAgICAgZDogXCJNMTguOSAyMi41VjE4LjlIMjIuNVYyMi41SDE4LjlaTTE3LjQgMjMuM1YxOC4xQzE3LjQgMTcuNyAxNy43IDE3LjQgMTguMSAxNy40SDIzLjNDMjMuNyAxNy40IDI0IDE3LjcgMjQgMTguMVYyMy4zQzI0IDIzLjcgMjMuNyAyNCAyMy4zIDI0SDE4LjFDMTcuNyAyNCAxNy4zIDIzLjcgMTcuNCAyMy4zWlwiLFxuICAgICAgICBmaWxsOiBcImN1cnJlbnRDb2xvclwiXG4gICAgICB9XG4gICAgKSxcbiAgICAvKiBAX19QVVJFX18gKi8gYyhcbiAgICAgIFwicGF0aFwiLFxuICAgICAge1xuICAgICAgICBkOiBcIk0xIDIxLjJIMTMuN0MxNC4zIDIxLjIgMTQuNyAyMC44MjUgMTQuNyAyMC40NUMxNC43IDIwIDE0LjIgMTkuNyAxMy43IDE5LjdIMUMwLjQgMTkuNyAwIDIwLjA3NSAwIDIwLjQ1QzAgMjAuODI1IDAuNCAyMS4yIDEgMjEuMlpcIixcbiAgICAgICAgZmlsbDogXCJjdXJyZW50Q29sb3JcIlxuICAgICAgfVxuICAgIClcbiAgXSB9KSxcbiAgLyogQF9fUFVSRV9fICovIGMoXCJkZWZzXCIsIHsgY2hpbGRyZW46IC8qIEBfX1BVUkVfXyAqLyBjKFwiY2xpcFBhdGhcIiwgeyBpZDogXCJjbGlwMF8yNjQwXzQ0ODU1XCIsIGNoaWxkcmVuOiAvKiBAX19QVVJFX18gKi8gYyhcInJlY3RcIiwgeyB3aWR0aDogXCIyNFwiLCBoZWlnaHQ6IFwiMjRcIiwgZmlsbDogXCJjdXJyZW50Q29sb3JcIiB9KSB9KSB9KVxuXSB9KSwgak8gPSAoKSA9PiAvKiBAX19QVVJFX18gKi8gZTEoXCJzdmdcIiwgeyB2aWV3Qm94OiBcIjAgMCAyNCAyNFwiLCBmaWxsOiBcIm5vbmVcIiwgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiwgY2hpbGRyZW46IFtcbiAgLyogQF9fUFVSRV9fICovIGUxKFwiZ1wiLCB7IGNsaXBQYXRoOiBcInVybCgjY2xpcDBfMjY0MF80NTAxMylcIiwgY2hpbGRyZW46IFtcbiAgICAvKiBAX19QVVJFX18gKi8gYyhcbiAgICAgIFwicGF0aFwiLFxuICAgICAge1xuICAgICAgICBkOiBcIk0yMy4zIDYuNUgxOC4xQzE3LjcwMDEgNi41IDE3LjMgNi4xMTE5NCAxNy40IDUuNzIzODhWMC42NzkxMDVDMTcuNCAwLjI5MTA0NSAxNy43MDAxIDAgMTguMSAwSDIzLjNDMjMuNyAwIDI0IDAuMjkxMDQ1IDI0IDAuNjc5MTA1VjUuNzIzODhDMjQgNi4xMTE5NCAyMy43IDYuNSAyMy4zIDYuNVpcIixcbiAgICAgICAgZmlsbDogXCJjdXJyZW50Q29sb3JcIlxuICAgICAgfVxuICAgICksXG4gICAgLyogQF9fUFVSRV9fICovIGMoXG4gICAgICBcInBhdGhcIixcbiAgICAgIHtcbiAgICAgICAgZDogXCJNMTMuNyA0LjA1SDFDMC40MDAwMDIgNC4wNSAwIDMuNyAwIDMuMTc1QzAgMi43Mzc1IDAuNDAwMDAyIDIuMyAxIDIuM0gxMy43QzE0LjIgMi4zIDE0LjcgMi42NSAxNC43IDMuMTc1QzE0LjcgMy42MTI1IDE0LjMgNC4wNSAxMy43IDQuMDVaXCIsXG4gICAgICAgIGZpbGw6IFwiY3VycmVudENvbG9yXCJcbiAgICAgIH1cbiAgICApLFxuICAgIC8qIEBfX1BVUkVfXyAqLyBjKFxuICAgICAgXCJwYXRoXCIsXG4gICAgICB7XG4gICAgICAgIGQ6IFwiTTE4LjEgMTUuMkgyMy4zQzIzLjcgMTUuMiAyNCAxNC45MDQ1IDI0IDE0LjUxMDZWOS4zODkzOUMyNCA4Ljk5NTQ1IDIzLjcgOC43IDIzLjMgOC43SDE4LjFDMTcuNzAwMSA4LjcgMTcuNCA4Ljk5NTQ1IDE3LjQgOS4zODkzOVYxNC41MTA2QzE3LjMgMTQuOTA0NSAxNy43MDAxIDE1LjIgMTguMSAxNS4yWlwiLFxuICAgICAgICBmaWxsOiBcImN1cnJlbnRDb2xvclwiXG4gICAgICB9XG4gICAgKSxcbiAgICAvKiBAX19QVVJFX18gKi8gYyhcbiAgICAgIFwicGF0aFwiLFxuICAgICAge1xuICAgICAgICBkOiBcIk0xMy43IDEyLjc1SDFDMC40MDAwMDIgMTIuNzUgMCAxMi40IDAgMTEuODc1QzAgMTEuNDM3NSAwLjQwMDAwMiAxMSAxIDExSDEzLjdDMTQuMiAxMSAxNC43IDExLjM1IDE0LjcgMTEuODc1QzE0LjcgMTIuMzEyNSAxNC4zIDEyLjc1IDEzLjcgMTIuNzVaXCIsXG4gICAgICAgIGZpbGw6IFwiY3VycmVudENvbG9yXCJcbiAgICAgIH1cbiAgICApLFxuICAgIC8qIEBfX1BVUkVfXyAqLyBjKFxuICAgICAgXCJwYXRoXCIsXG4gICAgICB7XG4gICAgICAgIGQ6IFwiTTE4LjEgMjMuOUgyMy4zQzIzLjcgMjMuOSAyNCAyMy42MDQ1IDI0IDIzLjIxMDZWMTguMDg5NEMyNCAxNy42OTU0IDIzLjcgMTcuNCAyMy4zIDE3LjRIMTguMUMxNy43MDAxIDE3LjQgMTcuNCAxNy42OTU0IDE3LjQgMTguMDg5NFYyMy4yMTA2QzE3LjMgMjMuNjA0NSAxNy43MDAxIDIzLjkgMTguMSAyMy45WlwiLFxuICAgICAgICBmaWxsOiBcImN1cnJlbnRDb2xvclwiXG4gICAgICB9XG4gICAgKSxcbiAgICAvKiBAX19QVVJFX18gKi8gYyhcbiAgICAgIFwicGF0aFwiLFxuICAgICAge1xuICAgICAgICBkOiBcIk0xMy43IDIxLjQ1SDFDMC40MDAwMDIgMjEuNDUgMCAyMS4wMTI1IDAgMjAuNTc1QzAgMjAuMTM3NSAwLjQwMDAwMiAxOS43IDEgMTkuN0gxMy43QzE0LjIgMTkuNyAxNC43IDIwLjA1IDE0LjcgMjAuNTc1QzE0LjcgMjEuMDEyNSAxNC4zIDIxLjQ1IDEzLjcgMjEuNDVaXCIsXG4gICAgICAgIGZpbGw6IFwiY3VycmVudENvbG9yXCJcbiAgICAgIH1cbiAgICApXG4gIF0gfSksXG4gIC8qIEBfX1BVUkVfXyAqLyBjKFwiZGVmc1wiLCB7IGNoaWxkcmVuOiAvKiBAX19QVVJFX18gKi8gYyhcImNsaXBQYXRoXCIsIHsgaWQ6IFwiY2xpcDBfMjY0MF80NTAxM1wiLCBjaGlsZHJlbjogLyogQF9fUFVSRV9fICovIGMoXCJyZWN0XCIsIHsgd2lkdGg6IFwiMjRcIiwgaGVpZ2h0OiBcIjI0XCIsIGZpbGw6IFwiY3VycmVudENvbG9yXCIgfSkgfSkgfSlcbl0gfSksIEtPID0gKCkgPT4gLyogQF9fUFVSRV9fICovIGMoXCJzdmdcIiwgeyB2aWV3Qm94OiBcIjAgMCAyNCAyNFwiLCBmaWxsOiBcIm5vbmVcIiwgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiwgY2hpbGRyZW46IC8qIEBfX1BVUkVfXyAqLyBjKFxuICBcInBhdGhcIixcbiAge1xuICAgIGZpbGxSdWxlOiBcImV2ZW5vZGRcIixcbiAgICBjbGlwUnVsZTogXCJldmVub2RkXCIsXG4gICAgZDogXCJNMTkuOTAwNSAxLjExNDQzSDQuMDk5NTRWMjIuODg1NkgxOS45MDA1VjEuMTE0NDNaTTIuOTg1MTEgMS4wNTQ3M0MyLjk4NTExIDAuNDcyMjE4IDMuNDU3MzIgMCA0LjAzOTgzIDBIMTkuOTYwMkMyMC41NDI3IDAgMjEuMDE1IDAuNDcyMjE3IDIxLjAxNSAxLjA1NDczVjIyLjk0NTNDMjEuMDE1IDIzLjUyNzggMjAuNTQyNyAyNCAxOS45NjAyIDI0SDQuMDM5ODNDMy40NTczMiAyNCAyLjk4NTExIDIzLjUyNzggMi45ODUxMSAyMi45NDUzVjEuMDU0NzNaTTguNjQ4MzkgNC45NzUxMkgxNS4zNTE3QzE1LjczMDkgNC45NzUxMiAxNi4wMzk4IDUuMjY0MzQgMTYuMDM5OCA1LjYzMTg0QzE2LjAzOTggNS45OTkzNCAxNS43MzA5IDYuMjg4NTYgMTUuMzUxNyA2LjI4ODU2SDguNjQ4MzlDOC4yNjkyMSA2LjI4ODU2IDcuOTYwMjMgNS45OTkzNCA3Ljk2MDIzIDUuNjMxODRDNy45NjAyMyA1LjI2NDM0IDguMjY5MjEgNC45NzUxMiA4LjY0ODM5IDQuOTc1MTJaTTguNjQ4MzkgOS4xNTQ0MkgxNS4zNTE3QzE1LjczMDkgOS4xNTQ0MiAxNi4wMzk4IDkuNDQzNjQgMTYuMDM5OCA5LjgxMTE0QzE2LjAzOTggMTAuMTc4NiAxNS43MzA5IDEwLjQ2NzkgMTUuMzUxNyAxMC40Njc5SDguNjQ4MzlDOC4yNjkyMSAxMC40Njc5IDcuOTYwMjMgMTAuMTc4NiA3Ljk2MDIzIDkuODExMTRDNy45NjAyMyA5LjQ0MzY0IDguMjY5MjEgOS4xNTQ0MiA4LjY0ODM5IDkuMTU0NDJaTTguNjQ4MzkgMTMuMzMzN0gxNS4zNTE3QzE1LjczMDkgMTMuMzMzNyAxNi4wMzk4IDEzLjYyMjkgMTYuMDM5OCAxMy45OTA0QzE2LjAzOTggMTQuMzU3OSAxNS43MzA5IDE0LjY0NzIgMTUuMzUxNyAxNC42NDcySDguNjQ4MzlDOC4yNjkyMSAxNC42NDcyIDcuOTYwMjMgMTQuMzU3OSA3Ljk2MDIzIDEzLjk5MDRDNy45NjAyMyAxMy42MjI5IDguMjY5MjEgMTMuMzMzNyA4LjY0ODM5IDEzLjMzMzdaTTguNjQ4MzkgMTcuNTEzSDE1LjM1MTdDMTUuNzMwOSAxNy41MTMgMTYuMDM5OCAxNy44MDIyIDE2LjAzOTggMTguMTY5N0MxNi4wMzk4IDE4LjUzNzIgMTUuNzMwOSAxOC44MjY1IDE1LjM1MTcgMTguODI2NUg4LjY0ODM5QzguMjY5MjEgMTguODI2NSA3Ljk2MDIzIDE4LjUzNzIgNy45NjAyMyAxOC4xNjk3QzcuOTYwMjMgMTcuODAyMiA4LjI2OTIxIDE3LjUxMyA4LjY0ODM5IDE3LjUxM1pcIixcbiAgICBmaWxsOiBcImN1cnJlbnRDb2xvclwiXG4gIH1cbikgfSksIEpPID0gKCkgPT4gLyogQF9fUFVSRV9fICovIGMoXCJzdmdcIiwgeyB2aWV3Qm94OiBcIjAgMCAyNCAyNFwiLCBmaWxsOiBcIm5vbmVcIiwgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiwgY2hpbGRyZW46IC8qIEBfX1BVUkVfXyAqLyBjKFxuICBcInBhdGhcIixcbiAge1xuICAgIGQ6IFwiTTIxLjM5MDIgMS4zMDgwOEgxOS43MjU2VjAuNTkwNDE1QzE5LjcyNTYgMC4yNjQzNTMgMTkuNDUyNiAwIDE5LjExNTggMEg0Ljg4NDIzQzQuNTQ3NDMgMCA0LjI3NDM4IDAuMjY0MzM0IDQuMjc0MzggMC41OTA0MTVWMS4zMDgwOEgyLjYwOTg1QzIuMjczMDMgMS4zMDgwOCAyIDEuNTcyNDEgMiAxLjg5ODQ5VjMuOTA1NzlDMiA2LjcyODQ1IDMuOTE0MzIgOS4zNDcxMiA3LjAwNTA4IDEwLjc2NjZDNy43OTc4OCAxMS42MzY1IDguNzI3OTEgMTIuMzAzNiA5Ljc0NjY5IDEyLjcwNTZWMTMuNjUxOEM5Ljc0NjY5IDE0Ljc4ODggOS40NjUxMSAxNS44OTY2IDguOTc0MTcgMTYuNjkxMUM4LjcyNzQ2IDE3LjA5MDQgOC4yMTM3NSAxNy43NTE3IDcuNTAwNjkgMTcuNzkyMUg1LjcxNjczQzUuMzc5OSAxNy43OTIxIDUuMTA2ODkgMTguMDU2NCA1LjEwNjg5IDE4LjM4MjVWMjMuNDA5NkM1LjEwNjg5IDIzLjczNTcgNS4zNzk5IDI0IDUuNzE2NzMgMjRIMTguMjgzM0MxOC42MjAxIDI0IDE4Ljg5MzEgMjMuNzM1NyAxOC44OTMxIDIzLjQwOTZWMTguMzgyNUMxOC44OTMxIDE4LjA1NjQgMTguNjIwMSAxNy43OTIxIDE4LjI4MzMgMTcuNzkyMUgxNi40OTkyQzE1Ljc4NjIgMTcuNzUxNyAxNS4yNzI1IDE3LjA5MDQgMTUuMDI1OCAxNi42OTExQzE0LjUzNDkgMTUuODk2NiAxNC4yNTMzIDE0Ljc4ODggMTQuMjUzMyAxMy42NTE4VjEyLjcwNTZDMTUuMjcyIDEyLjMwMzYgMTYuMjAyMSAxMS42MzY1IDE2Ljk5NDggMTAuNzY2N0MyMC4wODU2IDkuMzQ3MTQgMjIgNi43Mjg0NSAyMiAzLjkwNTc3VjEuODk4NDlDMjIgMS41NzI0MSAyMS43MjcgMS4zMDgwOCAyMS4zOTAyIDEuMzA4MDhaTTMuMjE5NzEgMy45MDU3N1YyLjQ4ODg5SDQuMjc0NFYzLjE1OTg2QzQuMjc0NCA1LjA1MDg5IDQuNjgzNzYgNi44MjA3NCA1LjM5NCA4LjMyOTM0QzQuMDE1NTUgNy4xMTQ5NyAzLjIxOTcxIDUuNTQ2NDkgMy4yMTk3MSAzLjkwNTc3Wk0xNy42NzM1IDIyLjgxOTJINi4zMjY2VjE4Ljk3MjlINy4zODQ0OUM3LjQwMDIzIDE4Ljk3NDEgNy40MTYxIDE4Ljk3NDkgNy40MzIxNCAxOC45NzQ5QzcuNDY0NzYgMTguOTc0OSA3LjQ5NzI4IDE4Ljk3NDIgNy41Mjk3NCAxOC45NzI5SDE2LjQ3MDNDMTYuNTAyNyAxOC45NzQyIDE2LjUzNTIgMTguOTc0OSAxNi41Njc5IDE4Ljk3NDlDMTYuNTgzOSAxOC45NzQ5IDE2LjU5OTggMTguOTc0MSAxNi42MTU1IDE4Ljk3MjlIMTcuNjczNVYyMi44MTkyWk0xMy45NzkyIDE3LjI5NzNDMTQuMDg5NCAxNy40NzU3IDE0LjIwNjYgMTcuNjQwNiAxNC4zMjk3IDE3Ljc5MjFIOS42NzAzMUM5Ljc5MzQzIDE3LjY0MDYgOS45MTA2MiAxNy40NzU3IDEwLjAyMDkgMTcuMjk3M0MxMC42MzA2IDE2LjMxMDYgMTAuOTY2NCAxNS4wMTU5IDEwLjk2NjQgMTMuNjUxOFYxMy4wNDk1QzExLjMwNDYgMTMuMTA4MSAxMS42NDk2IDEzLjEzODYgMTIgMTMuMTM4NkMxMi4zNTA0IDEzLjEzODYgMTIuNjk1NCAxMy4xMDgxIDEzLjAzMzYgMTMuMDQ5NVYxMy42NTE4QzEzLjAzMzYgMTUuMDE1OSAxMy4zNjk0IDE2LjMxMDYgMTMuOTc5MiAxNy4yOTczWk0xMiAxMS45NTc4QzEwLjQ3ODYgMTEuOTU3OCA5LjAyNDY4IDExLjIzNjQgNy44NTMwMiA5LjkxMzNDNy44NDQ3MSA5LjkwMzMgNy44MzYxIDkuODkzNDggNy44MjcwOCA5Ljg4NEM3LjcwMzUzIDkuNzQzMDIgNy41ODMxNCA5LjU5NTM3IDcuNDY2MTggOS40NDExQzYuMTk0NDYgNy43NjMyMiA1LjQ5NDA3IDUuNTMyNSA1LjQ5NDA3IDMuMTU5ODZWMS4xODA4M0gxOC41MDU5VjMuMTU5ODZDMTguNTA1OSA1LjUzMjUyIDE3LjgwNTYgNy43NjMyMiAxNi41MzM5IDkuNDQxMUMxNi40MTY5IDkuNTk1MzcgMTYuMjk2NSA5Ljc0MyAxNi4xNzMgOS44ODM5NkMxNi4xNjM5IDkuODkzNTIgMTYuMTU1MyA5LjkwMzQgMTYuMTQ2OSA5LjkxMzQ2QzE0Ljk3NTIgMTEuMjM2NSAxMy41MjEzIDExLjk1NzggMTIgMTEuOTU3OFpNMjAuNzgwMyAzLjkwNTc3QzIwLjc4MDMgNS41NDY1IDE5Ljk4NDUgNy4xMTUwMSAxOC42MDYgOC4zMjk0MkMxOS4zMTYyIDYuODIwOCAxOS43MjU2IDUuMDUwOTEgMTkuNzI1NiAzLjE1OTg2VjIuNDg4ODlIMjAuNzgwM1YzLjkwNTc3WlwiLFxuICAgIGZpbGw6IFwiY3VycmVudGNvbG9yXCJcbiAgfVxuKSB9KSwgX08gPSAoKSA9PiAvKiBAX19QVVJFX18gKi8gYyhcInN2Z1wiLCB7IHZpZXdCb3g6IFwiMCAwIDI0IDI0XCIsIGZpbGw6IFwibm9uZVwiLCB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLCBjaGlsZHJlbjogLyogQF9fUFVSRV9fICovIGMoXG4gIFwicGF0aFwiLFxuICB7XG4gICAgZDogXCJNMC43ODY4ODUgNS4wMjg1N0MxLjE4MDMzIDUuMDI4NTcgMS40OTUxIDQuNzIzODEgMS40OTUxIDQuMzQyODVWMS4zNzE0M0gxMS4zMzEyVjIyLjYyODZIOC4yNjIyOUM3Ljg2ODg1IDIyLjYyODYgNy41NTQxIDIyLjkzMzMgNy41NTQxIDIzLjMxNDNDNy41NTQxIDIzLjY5NTIgNy44Njg4NSAyNCA4LjI2MjI5IDI0SDE1LjgxNjRDMTYuMjA5OCAyNCAxNi41MjQ2IDIzLjY5NTIgMTYuNTI0NiAyMy4zMTQzQzE2LjUyNDYgMjIuOTMzMyAxNi4yMDk4IDIyLjYyODYgMTUuODE2NCAyMi42Mjg2SDEyLjc0NzZWMS4zNzE0M0gyMi41ODM2VjQuMzQyODVDMjIuNTgzNiA0LjcyMzgxIDIyLjg5ODQgNS4wMjg1NyAyMy4yOTE4IDUuMDI4NTdDMjMuNjg1MyA1LjAyODU3IDI0IDQuNzIzODEgMjQgNC4zNDI4NVYwLjY4NTcxQzI0IDAuMzA0NzU3IDIzLjY4NTMgMCAyMy4yOTE4IDBIMC43MDgyMTZDMC4zMTQ3NzMgMCAwIDAuMzA0NzU3IDAgMC42ODU3MVY0LjM0Mjg1QzAuMDc4Njg4NSA0LjcyMzgxIDAuMzkzNDQzIDUuMDI4NTcgMC43ODY4ODUgNS4wMjg1N1pcIixcbiAgICBmaWxsOiBcImN1cnJlbnRDb2xvclwiXG4gIH1cbikgfSksICRPID0gKCkgPT4gLyogQF9fUFVSRV9fICovIGMoXCJzdmdcIiwgeyB2aWV3Qm94OiBcIjAgMCAyNCAyNFwiLCBmaWxsOiBcIm5vbmVcIiwgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiwgY2hpbGRyZW46IC8qIEBfX1BVUkVfXyAqLyBjKFxuICBcInBhdGhcIixcbiAge1xuICAgIGQ6IFwiTTIwLjQ3MDYgMjAuNDcwNkMyMC41NDkgMjAuMzkyMiAyMC41NDkgMjAuMzkyMiAyMC41NDkgMjAuMzkyMkMyMC43MDU5IDIwLjIzNTMgMjAuODYyOCAyMC4xNTY5IDIwLjk0MTIgMjBDMjIuOTAyIDE3LjgwMzkgMjQgMTQuOTgwNCAyNCAxMkMyNCA1LjQxMTc2IDE4LjU4ODIgMCAxMiAwQzkuMDE5NjIgMCA2LjE5NjA4IDEuMDk4MDQgNCAzLjA1ODgyQzMuODQzMTQgMy4yMTU2OCAzLjY4NjI4IDMuMzcyNTUgMy42MDc4NSAzLjQ1MDk4QzMuNjA3ODUgMy40NTA5OCAzLjUyOTQxIDMuNDUwOTggMy41Mjk0MSAzLjUyOTQxQzMuNTI5NDEgMy41Mjk0MSAzLjUyOTQzIDMuNjA3ODMgMy40NTEgMy42MDc4M0MxLjI1NDkyIDUuODAzOTEgMCA4Ljg2Mjc0IDAgMTJDMCAxOC41ODgyIDUuNDExNzggMjQgMTIgMjRDMTUuMjE1NyAyNCAxOC4xOTYxIDIyLjY2NjcgMjAuNDcwNiAyMC40NzA2Wk0yMi41ODgyIDEyQzIyLjU4ODIgMTQuNTA5OCAyMS42NDcxIDE3LjAxOTYgMjAgMTguOTAyTDUuMTc2NDcgNC4wNzg0MkM3LjA1ODgzIDIuNDMxMzYgOS41Njg2NCAxLjQ5MDE5IDEyLjA3ODQgMS40OTAxOUMxNy44ODI0IDEuNDkwMTkgMjIuNTg4MiA2LjE5NjA3IDIyLjU4ODIgMTJaTTEuNTY4NjMgMTJDMS41Njg2MyA5LjQxMTc2IDIuNTA5ODIgNi45ODA0IDQuMTU2ODggNS4wOTgwNEwxOC45ODA0IDE5LjkyMTZDMTcuMDk4IDIxLjU2ODYgMTQuNTg4MyAyMi41MDk4IDEyLjA3ODQgMjIuNTA5OEM2LjI3NDUzIDIyLjUwOTggMS41Njg2MyAxNy44MDM5IDEuNTY4NjMgMTJaXCIsXG4gICAgZmlsbDogXCJjdXJyZW50Q29sb3JcIlxuICB9XG4pIH0pLCBlZiA9ICgpID0+IC8qIEBfX1BVUkVfXyAqLyBjKFwic3ZnXCIsIHsgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiwgdmlld0JveDogXCIwIDAgMjQgMjRcIiwgZmlsbDogXCJub25lXCIsIGNoaWxkcmVuOiAvKiBAX19QVVJFX18gKi8gYyhcbiAgXCJwYXRoXCIsXG4gIHtcbiAgICBmaWxsUnVsZTogXCJldmVub2RkXCIsXG4gICAgY2xpcFJ1bGU6IFwiZXZlbm9kZFwiLFxuICAgIGQ6IFwiTTEyIDBDMTguNiAwIDI0IDUuNCAyNCAxMkMyNCAxOC42IDE4LjYgMjQgMTIgMjRDNS40IDI0IDAgMTguNiAwIDEyQzAgNS40IDUuNCAwIDEyIDBaTTEyIDIxLjZDMTQuNCAyMS42IDE2LjYgMjAuNyAxOC40IDE5LjJMNC44IDUuNkMzLjIgNy40IDIuNCA5LjYgMi40IDEyQzIuNCAxNy4zIDYuNyAyMS42IDEyIDIxLjZaTTEyIDIuNEMxMC4xIDIuNCA4LjMgMyA2LjcgNEwyMCAxNy4zQzIxIDE1LjggMjEuNiAxMy45IDIxLjYgMTJDMjEuNiA2LjcgMTcuMyAyLjQgMTIgMi40WlwiLFxuICAgIGZpbGw6IFwiY3VycmVudENvbG9yXCJcbiAgfVxuKSB9KSwgdGYgPSAoKSA9PiAvKiBAX19QVVJFX18gKi8gZTEoXCJzdmdcIiwgeyB2aWV3Qm94OiBcIjAgMCAyNCAyNFwiLCBmaWxsOiBcIm5vbmVcIiwgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiwgY2hpbGRyZW46IFtcbiAgLyogQF9fUFVSRV9fICovIGUxKFwiZ1wiLCB7IGNsaXBQYXRoOiBcInVybCgjY2xpcDBfMjcyMV82MTQ2MClcIiwgY2hpbGRyZW46IFtcbiAgICAvKiBAX19QVVJFX18gKi8gYyhcbiAgICAgIFwicGF0aFwiLFxuICAgICAge1xuICAgICAgICBmaWxsUnVsZTogXCJldmVub2RkXCIsXG4gICAgICAgIGNsaXBSdWxlOiBcImV2ZW5vZGRcIixcbiAgICAgICAgZDogXCJNMCAxLjEyNDI0QzAgMC41MDMzMzkgMC41MDMzMzcgMCAxLjEyNDI0IDBIMTUuMjk5NEMxNS45MjAzIDAgMTYuNDIzNiAwLjUwMzMzOCAxNi40MjM2IDEuMTI0MjRWOC4yMTE4MkMxNi40MjM2IDguNTYyNzYgMTYuMTM5MSA4Ljg0NzI1IDE1Ljc4ODIgOC44NDcyNUMxNS40MzczIDguODQ3MjUgMTUuMTUyOCA4LjU2Mjc2IDE1LjE1MjggOC4yMTE4MlYxLjI3MDg4SDEuMjcwODhWMTUuMTUyOEg4LjIxMTgyQzguNTYyNzYgMTUuMTUyOCA4Ljg0NzI1IDE1LjQzNzMgOC44NDcyNSAxNS43ODgyQzguODQ3MjUgMTYuMTM5MSA4LjU2Mjc2IDE2LjQyMzYgOC4yMTE4MiAxNi40MjM2SDEuMTI0MjRDMC41MDMzMzggMTYuNDIzNiAwIDE1LjkyMDMgMCAxNS4yOTk0VjEuMTI0MjRaTTE1Ljc4ODIgOS40NzA0N0MxNi4xMzkxIDkuNDcwNDcgMTYuNDIzNiA5Ljc1NDk3IDE2LjQyMzYgMTAuMTA1OVYxMkMxNi40MjM2IDEyLjM1MDkgMTYuMTM5MSAxMi42MzU0IDE1Ljc4ODIgMTIuNjM1NEMxNS40MzczIDEyLjYzNTQgMTUuMTUyOCAxMi4zNTA5IDE1LjE1MjggMTJWMTAuMTA1OUMxNS4xNTI4IDkuNzU0OTcgMTUuNDM3MyA5LjQ3MDQ3IDE1Ljc4ODIgOS40NzA0N1pNMTUuNzg4MiAxMy4yNTg3QzE2LjEzOTEgMTMuMjU4NyAxNi40MjM2IDEzLjU0MzIgMTYuNDIzNiAxMy44OTQxVjE1LjI5OTRDMTYuNDIzNiAxNS45MjAzIDE1LjkyMDMgMTYuNDIzNiAxNS4yOTk0IDE2LjQyMzZIMTMuODk0MUMxMy41NDMyIDE2LjQyMzYgMTMuMjU4NyAxNi4xMzkxIDEzLjI1ODcgMTUuNzg4MkMxMy4yNTg3IDE1LjQzNzMgMTMuNTQzMiAxNS4xNTI4IDEzLjg5NDEgMTUuMTUyOEgxNS4xNTI4VjEzLjg5NDFDMTUuMTUyOCAxMy41NDMyIDE1LjQzNzMgMTMuMjU4NyAxNS43ODgyIDEzLjI1ODdaTTkuNDcwNDcgMTUuNzg4MkM5LjQ3MDQ3IDE1LjQzNzMgOS43NTQ5NyAxNS4xNTI4IDEwLjEwNTkgMTUuMTUyOEgxMkMxMi4zNTA5IDE1LjE1MjggMTIuNjM1NCAxNS40MzczIDEyLjYzNTQgMTUuNzg4MkMxMi42MzU0IDE2LjEzOTEgMTIuMzUwOSAxNi40MjM2IDEyIDE2LjQyMzZIMTAuMTA1OUM5Ljc1NDk3IDE2LjQyMzYgOS40NzA0NyAxNi4xMzkxIDkuNDcwNDcgMTUuNzg4MlpcIixcbiAgICAgICAgZmlsbDogXCJjdXJyZW50Y29sb3JcIlxuICAgICAgfVxuICAgICksXG4gICAgLyogQF9fUFVSRV9fICovIGMoXG4gICAgICBcInBhdGhcIixcbiAgICAgIHtcbiAgICAgICAgZmlsbFJ1bGU6IFwiZXZlbm9kZFwiLFxuICAgICAgICBjbGlwUnVsZTogXCJldmVub2RkXCIsXG4gICAgICAgIGQ6IFwiTTIzLjk5OTggMjIuODc1OEMyMy45OTk4IDIzLjQ5NjcgMjMuNDk2NCAyNCAyMi44NzU1IDI0TDguNzAwMzYgMjRDOC4wNzk0NiAyNCA3LjU3NjEyIDIzLjQ5NjcgNy41NzYxMiAyMi44NzU4TDcuNTc2MTIgMTUuNzg4MkM3LjU3NjEyIDE1LjQzNzIgNy44NjA2MiAxNS4xNTI3IDguMjExNTYgMTUuMTUyN0M4LjU2MjUxIDE1LjE1MjcgOC44NDcgMTUuNDM3MiA4Ljg0NyAxNS43ODgyTDguODQ3IDIyLjcyOTFMMjIuNzI4OSAyMi43MjkxTDIyLjcyODkgOC44NDcyNEwxNS43ODc5IDguODQ3MjRDMTUuNDM3IDguODQ3MjQgMTUuMTUyNSA4LjU2Mjc1IDE1LjE1MjUgOC4yMTE4QzE1LjE1MjUgNy44NjA4NiAxNS40MzcgNy41NzYzNyAxNS43ODc5IDcuNTc2MzdMMjIuODc1NSA3LjU3NjM3QzIzLjQ5NjQgNy41NzYzNyAyMy45OTk4IDguMDc5NyAyMy45OTk4IDguNzAwNkwyMy45OTk4IDIyLjg3NThaTTguMjExNTYgMTQuNTI5NUM3Ljg2MDYyIDE0LjUyOTUgNy41NzYxMyAxNC4yNDUgNy41NzYxMyAxMy44OTQxTDcuNTc2MTMgMTJDNy41NzYxMyAxMS42NDkgNy44NjA2MiAxMS4zNjQ2IDguMjExNTYgMTEuMzY0NkM4LjU2MjUxIDExLjM2NDYgOC44NDcgMTEuNjQ5IDguODQ3IDEyTDguODQ3IDEzLjg5NDFDOC44NDcgMTQuMjQ1IDguNTYyNTEgMTQuNTI5NSA4LjIxMTU2IDE0LjUyOTVaTTguMjExNTYgMTAuNzQxM0M3Ljg2MDYyIDEwLjc0MTMgNy41NzYxMyAxMC40NTY4IDcuNTc2MTMgMTAuMTA1OUw3LjU3NjEzIDguNzAwNkM3LjU3NjEzIDguMDc5NyA4LjA3OTQ2IDcuNTc2MzcgOC43MDAzNiA3LjU3NjM3TDEwLjEwNTcgNy41NzYzN0MxMC40NTY2IDcuNTc2MzcgMTAuNzQxMSA3Ljg2MDg2IDEwLjc0MTEgOC4yMTE4QzEwLjc0MTEgOC41NjI3NSAxMC40NTY2IDguODQ3MjQgMTAuMTA1NyA4Ljg0NzI0TDguODQ3IDguODQ3MjRMOC44NDcgMTAuMTA1OUM4Ljg0NyAxMC40NTY4IDguNTYyNTEgMTAuNzQxMyA4LjIxMTU2IDEwLjc0MTNaTTE0LjUyOTMgOC4yMTE4QzE0LjUyOTMgOC41NjI3NSAxNC4yNDQ4IDguODQ3MjQgMTMuODkzOCA4Ljg0NzI0TDExLjk5OTggOC44NDcyNEMxMS42NDg4IDguODQ3MjQgMTEuMzY0MyA4LjU2Mjc1IDExLjM2NDMgOC4yMTE4QzExLjM2NDMgNy44NjA4NiAxMS42NDg4IDcuNTc2MzcgMTEuOTk5OCA3LjU3NjM3TDEzLjg5MzggNy41NzYzN0MxNC4yNDQ4IDcuNTc2MzcgMTQuNTI5MyA3Ljg2MDg2IDE0LjUyOTMgOC4yMTE4WlwiLFxuICAgICAgICBmaWxsOiBcImN1cnJlbnRjb2xvclwiXG4gICAgICB9XG4gICAgKVxuICBdIH0pLFxuICAvKiBAX19QVVJFX18gKi8gYyhcImRlZnNcIiwgeyBjaGlsZHJlbjogLyogQF9fUFVSRV9fICovIGMoXCJjbGlwUGF0aFwiLCB7IGlkOiBcImNsaXAwXzI3MjFfNjE0NjBcIiwgY2hpbGRyZW46IC8qIEBfX1BVUkVfXyAqLyBjKFwicmVjdFwiLCB7IHdpZHRoOiBcIjI0XCIsIGhlaWdodDogXCIyNFwiLCBmaWxsOiBcImN1cnJlbnRDb2xvclwiIH0pIH0pIH0pXG5dIH0pLCBvZiA9ICgpID0+IC8qIEBfX1BVUkVfXyAqLyBjKFwic3ZnXCIsIHsgdmlld0JveDogXCIwIDAgNDggNDhcIiwgZmlsbDogXCJub25lXCIsIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsIGNoaWxkcmVuOiAvKiBAX19QVVJFX18gKi8gYyhcbiAgXCJwYXRoXCIsXG4gIHtcbiAgICBkOiBcIk0zMS43ODk2IDEzLjI5MThDMzQuODE5MSAxMy4yOTE4IDM3LjM2NjYgMTUuODc1MyAzNy43MTA4IDE5LjIwNjhDMzcuNzc5NyAxOS41NDY3IDM4LjA1NTEgMTkuODE4NyAzOC4zOTk0IDE5Ljc1MDdDMzguNzQzNiAxOS42ODI3IDM5LjAxOSAxOS40MTA4IDM4Ljk1MDIgMTkuMDcwOEMzOC41MzcxIDE1LjA1OTUgMzUuNDM4NyAxMiAzMS43ODk2IDEyQzI3Ljc5NjEgMTIgMjQuNTYgMTUuNTM1NCAyNC41NiAxOS45NTQ3VjIxLjc5MDRMOS42MTk2OCAyMS43OTAzQzkuMjc1NCAyMS43OTAzIDkgMjIuMDYyMiA5IDIyLjQwMjFWMzUuMzg3OUM5IDM1LjcyNzkgOS4yNzU0IDM1Ljk5OTkgOS42MTk2OCAzNS45OTk5SDI5LjM4MDNDMjkuNzI0NiAzNS45OTk5IDMwIDM1LjcyNzkgMzAgMzUuMzg3OVYyMi40MDIxQzMwIDIyLjA2MjIgMjkuNzI0NiAyMS43OTAzIDI5LjM4MDMgMjEuNzkwM0wyNS43OTk0IDIxLjc5MDRWMTkuOTU0N0MyNS44NjgyIDE2LjI4MzMgMjguNDg0NiAxMy4yOTE4IDMxLjc4OTYgMTMuMjkxOFpNMjguNzYwNiAzNC43NzYxSDEwLjMwODJWMjMuMDE0SDI4Ljc2MDZWMzQuNzc2MVpcIixcbiAgICBmaWxsOiBcImN1cnJlbnRDb2xvclwiXG4gIH1cbikgfSksIHJmID0gKCkgPT4gLyogQF9fUFVSRV9fICovIGMoXCJzdmdcIiwgeyB2aWV3Qm94OiBcIjAgMCAyNCAyNFwiLCBmaWxsOiBcIm5vbmVcIiwgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiwgY2hpbGRyZW46IC8qIEBfX1BVUkVfXyAqLyBjKFxuICBcInBhdGhcIixcbiAge1xuICAgIGZpbGxSdWxlOiBcImV2ZW5vZGRcIixcbiAgICBjbGlwUnVsZTogXCJldmVub2RkXCIsXG4gICAgZDogXCJNMTEuOTgxNyAxLjQ3NzkzQzEyLjE5MTIgMS40ODM2NSAxMi4zMzQzIDEuNTY2NTkgMTIuNDY5NyAxLjcwMTE4TDE4LjA3OTUgNy4zMjQyM0MxOC4yMTMzIDcuNDU3MjkgMTguMjg3MiA3LjYxNDU2IDE4LjI4NzIgNy43NzkxMkMxOC4yODcyIDcuOTQzNjggMTguMjEzMyA4LjEwMDk1IDE4LjA3OTUgOC4yMzQwMUMxNy45NDU2IDguMzY3MSAxNy43ODc3IDguNDQwMzUgMTcuNjIyOCA4LjQ0MDM1QzE3LjQ1NzkgOC40NDAzNSAxNy4yOTk5IDguMzY3MSAxNy4xNjYxIDguMjM0MDFMMTIuNTc1IDMuNjY5MDJWMTYuMjY5MkMxMi41NzUgMTYuNjIwMyAxMi4yOTIxIDE2LjkwMDggMTEuOTQwMyAxNi45MDA4QzExLjU5NjIgMTYuOTAwOCAxMS4zMDU2IDE2LjYyNzYgMTEuMzA1NiAxNi4zMjgzVjMuNzI4MTlMNi43MTQ1MiA4LjI5MzE4QzYuNjQ5MTMgOC4zNTgxOSA2LjU3OTgzIDguNDEwODQgNi40OTg3MyA4LjQ0NjY4QzYuNDE3MjEgOC40ODI3IDYuMzI4ODIgOC40OTk1MSA2LjIyODA3IDguNDk5NTFDNi4xMjczMiA4LjQ5OTUxIDYuMDM4OTMgOC40ODI3IDUuOTU3NDEgOC40NDY2OEM1Ljg3NjMxIDguNDEwODQgNS44MDcwMSA4LjM1ODE5IDUuNzQxNjMgOC4yOTMxOEM1LjYwNzgxIDguMTYwMTIgNS41NTc2OSA4LjAwNTg1IDUuNTU3NjkgNy44NDEyOUM1LjU1NzY5IDcuNjc2NzQgNS42MDc4MSA3LjUxNjQ2IDUuNzQxNjMgNy4zODM0TDExLjQ1NjMgMS43MDExOEMxMS41NjkzIDEuNTg4OCAxMS43NTg5IDEuNDcxODUgMTEuOTgxNyAxLjQ3NzkzWk0yMi43MzA2IDE2LjIxMDVDMjIuNzMwNiAxNS44NTkzIDIzLjAxMzUgMTUuNTc4OCAyMy4zNjUzIDE1LjU3ODhDMjMuNTQ3OCAxNS41Nzg4IDIzLjcwNjQgMTUuNjY5MiAyMy44MTcxIDE1Ljc4NzhDMjMuOTI2OCAxNS45MDUzIDI0IDE2LjA2MTUgMjQgMTYuMjEwNVYyMS44OTA0QzI0IDIyLjI0MTUgMjMuNzE3MSAyMi41MjIxIDIzLjM2NTMgMjIuNTIyMUgwLjYzNDcxMkMwLjI4Mjk1MyAyMi41MjIxIDAgMjIuMjQxNSAwIDIxLjg5MDRWMTYuMjEwNUMwIDE1Ljg1OTMgMC4yODI5NTQgMTUuNTc4OCAwLjYzNDcxMiAxNS41Nzg4QzAuOTg2NDcxIDE1LjU3ODggMS4yNjk0MiAxNS44NTkzIDEuMjY5NDIgMTYuMjEwNVYyMS4xOTk2SDIyLjczMDZWMTYuMjEwNVpcIixcbiAgICBmaWxsOiBcImN1cnJlbnRDb2xvclwiXG4gIH1cbikgfSksIG5mID0gKCkgPT4gLyogQF9fUFVSRV9fICovIGMoXCJzdmdcIiwgeyB2aWV3Qm94OiBcIjAgMCAyNCAyNFwiLCBmaWxsOiBcIm5vbmVcIiwgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiwgY2hpbGRyZW46IC8qIEBfX1BVUkVfXyAqLyBjKFxuICBcInBhdGhcIixcbiAge1xuICAgIGZpbGxSdWxlOiBcImV2ZW5vZGRcIixcbiAgICBjbGlwUnVsZTogXCJldmVub2RkXCIsXG4gICAgZDogXCJNMTcuNTY4NCA5LjcwNkMxNy4wNjczIDcuNDk1MjIgMTQuNzcwNSA1LjE4OTAxIDExLjk2OTYgNS4xODkwMUMxMC4xNTkzIDUuMTg5MDEgOC40MDk2MSA2LjAyODY0IDcuMzYxMjEgNy40Nzk3OUw3LjM1NTk0IDcuNDg3MDlMNy4zNDk0NCA3LjQ5MzMyQzcuMTY2MjcgNy42Njg4NCA2Ljk1NDYyIDcuODE0MTkgNi42NjY0OSA3Ljc0NjJDNi4zNzE4NyA3LjY4OTc5IDYuMDIzOTkgNy42MzQ2MyA1LjY3ODMgNy42MzQ2M0MzLjIzNjI1IDcuNjM0NjMgMS4yNjY3MiA5LjUyNzkyIDEuMjY2NzIgMTEuODU4QzEuMjY2NzIgMTQuMTg4IDMuMjM2MjUgMTYuMDgxMyA1LjY3ODMgMTYuMDgxM0M2LjAyNTgxIDE2LjA4MTMgNi4zMTE2NiAxNi4zNDkyIDYuMzExNjYgMTYuNjkyM0M2LjMxMTY2IDE3LjAzNTQgNi4wMjU4MSAxNy4zMDM0IDUuNjc4MyAxNy4zMDM0QzIuNTQxMjQgMTcuMzAzNCAwIDE0Ljg3NDIgMCAxMS44NThDMCA4LjU2OTYyIDMuMDUyMDQgNS45MjA2OCA2LjU4NzU0IDYuNDYxODJDNy45MTQwMiA0Ljg3MjM0IDkuOTQyNzEgMy45NjY5MiAxMi4wMjkgMy45NjY5MkMxNS4yNDUxIDMuOTY2OTIgMTcuOTM1MyA2LjAwMjIxIDE4Ljc0ODYgOC45MDIwOUMxOS4wNDM2IDguODU0MDMgMTkuMzMxMSA4LjgwMTI4IDE5LjYyNjEgOC44MDEyOEMyMi4xMDkxIDguODAxMjggMjQuMDU4OCAxMC43MTc5IDIzLjk5ODYgMTIuOTk2OEMyMy45OTc5IDE1LjMyOTkgMjEuOTkxMSAxNy4yNDY1IDE5LjU2NjggMTcuMjQ2NUMxOS4yMTkzIDE3LjI0NjUgMTguOTMzNCAxNi45Nzg1IDE4LjkzMzQgMTYuNjM1NEMxOC45MzM0IDE2LjI5MjMgMTkuMjE5MyAxNi4wMjQ0IDE5LjU2NjggMTYuMDI0NEMyMS4zNTcyIDE2LjAyNDQgMjIuNzMyIDE0LjY5ODcgMjIuNzMyIDEzLjA1MjNDMjIuNzMyIDExLjM0OTEgMjEuMjk3OCAxMC4wMjM0IDE5LjU2NjggMTAuMDIzNEMxOS4yMjc2IDEwLjAyMzQgMTguODI1MiAxMC4xMzI1IDE4LjQ2OTIgMTAuMjQ2MkMxOC4xMjE2IDEwLjM1NzIgMTcuNjU5MSAxMC4xMDYgMTcuNTY4NCA5LjcwNlpNMTIuNTY5NiAxMC44NzQxTDE1LjM2MTggMTMuNTQ5NEMxNS40OTU0IDEzLjY3NzUgMTUuNTcwNCAxMy44Mjk5IDE1LjU3MDQgMTMuOTkwN0MxNS41NzA0IDE0LjE1MTQgMTUuNDk1NCAxNC4zMDM4IDE1LjM2MTggMTQuNDMxOUMxNS4yMjc5IDE0LjU2MDIgMTUuMDcwNyAxNC42MzAxIDE0LjkwNzQgMTQuNjMwMUMxNC43NDQgMTQuNjMwMSAxNC41ODY5IDE0LjU2MDIgMTQuNDUzIDE0LjQzMTlMMTIuNzIxNiAxMi43NzI4VjE5LjQyMkMxMi43MjE2IDE5Ljc2NTEgMTIuNDQ0IDIwLjAzMzEgMTIuMDk2NSAyMC4wMzMxQzExLjc1NjcgMjAuMDMzMSAxMS40NTQ5IDE5Ljc3MjMgMTEuNDU0OSAxOS40Nzg5VjEyLjgyOTdMOS43MjM0NyAxNC40ODg4QzkuNTg0NjkgMTQuNjIxOCA5LjM4MTMzIDE0LjY4NyA5LjIzOTM5IDE0LjY4N0M5LjAzMjkyIDE0LjY4NyA4Ljg5MDMxIDE0LjYxODIgOC43NTUzMSAxNC40ODg4QzguNjIxNjQgMTQuMzYwNyA4LjU0NjcxIDE0LjIwODIgOC41NDY3MSAxNC4wNDc1QzguNTQ2NzEgMTMuODg2OCA4LjYyMTY0IDEzLjczNDQgOC43NTUzMSAxMy42MDYzTDExLjYwNjUgMTAuODc0MUMxMS43MiAxMC43NjUzIDExLjg4NzUgMTAuNjczMyAxMi4wOTY1IDEwLjY3ODRDMTIuMjkzNCAxMC42ODMxIDEyLjQ0MDQgMTAuNzUwMyAxMi41Njk2IDEwLjg3NDFaXCIsXG4gICAgZmlsbDogXCJjdXJyZW50Y29sb3JcIlxuICB9XG4pIH0pLCBhZiA9ICgpID0+IC8qIEBfX1BVUkVfXyAqLyBlMShcInN2Z1wiLCB7IHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsIHZpZXdCb3g6IFwiMCAwIDI1IDI0XCIsIGZpbGw6IFwibm9uZVwiLCBjaGlsZHJlbjogW1xuICAvKiBAX19QVVJFX18gKi8gYyhcbiAgICBcInBhdGhcIixcbiAgICB7XG4gICAgICBkOiBcIk0xMi43IDEwLjhDMTIuNSAxMC42IDEyLjMgMTAuNSAxMiAxMC41QzExLjggMTAuNSAxMS41IDEwLjYgMTEuMyAxMC44TDguNiAxMy41QzguNCAxMy43IDguMyAxMy45IDguMyAxNC4xQzguMyAxNC4zIDguNCAxNC41IDguNiAxNC43QzguOCAxNC45IDkgMTUgOS4zIDE1QzkuNSAxNSA5LjggMTQuOSAxMCAxNC43TDExLjIgMTMuNVYxOS4zQzExLjIgMTkuNyAxMS42IDIwLjEgMTIuMSAyMC4xQzEyLjYgMjAuMSAxMyAxOS43IDEzIDE5LjJWMTMuNUwxNC4yIDE0LjdDMTQuNCAxNC45IDE0LjYgMTUgMTQuOCAxNUMxNSAxNSAxNS4yIDE0LjkgMTUuNCAxNC43QzE1LjYgMTQuNSAxNS43IDE0LjMgMTUuNyAxNC4xQzE1LjcgMTMuOSAxNS42IDEzLjcgMTUuNCAxMy41TDEyLjcgMTAuOFpcIixcbiAgICAgIGZpbGw6IFwiY3VycmVudENvbG9yXCJcbiAgICB9XG4gICksXG4gIC8qIEBfX1BVUkVfXyAqLyBjKFxuICAgIFwicGF0aFwiLFxuICAgIHtcbiAgICAgIGQ6IFwiTTIyLjggMTAuMUMyMS45IDkuMiAyMC43IDguNyAxOS41IDguN0MxOS4zIDguNyAxOS4xIDguNyAxOC44IDguOEMxNy44IDUuOSAxNS4yIDQgMTIgNEM5LjkgNCA3LjkgNC45IDYuNiA2LjRDNi4zIDYuNCA2LjEgNi4zIDUuOCA2LjNDMi42IDYuNCAwIDguOSAwIDEyQzAgMTUuMSAyLjYgMTcuNiA1LjggMTcuNkM2LjMgMTcuNiA2LjcgMTcuMiA2LjcgMTYuN0M2LjcgMTYuMiA2LjMgMTUuOCA1LjggMTUuOEMzLjYgMTUuOCAxLjggMTQuMSAxLjggMTJDMS44IDkuOSAzLjYgOC4yIDUuOCA4LjJDNi4xIDguMiA2LjUgOC4zIDYuNyA4LjNDNi44IDguMyA2LjggOC4zIDYuOSA4LjNDNy4yIDguMyA3LjUgOC4xIDcuNyA3LjlDOC43IDYuNiAxMC4zIDUuOCAxMiA1LjhDMTQuNiA1LjggMTYuNyA4IDE3LjIgMTBDMTcuMyAxMC40IDE3LjcgMTAuOCAxOC4yIDEwLjhDMTguMyAxMC44IDE4LjQgMTAuOCAxOC41IDEwLjhDMTguOCAxMC43IDE5LjIgMTAuNiAxOS41IDEwLjZDMjEgMTAuNiAyMi4zIDExLjggMjIuMyAxMy4zQzIyLjMgMTQuOCAyMS4xIDE1LjkgMTkuNSAxNS45QzE5IDE1LjkgMTguNiAxNi4zIDE4LjYgMTYuOEMxOC42IDE3LjMgMTkgMTcuNyAxOS41IDE3LjdDMjIgMTcuNyAyNC4xIDE1LjcgMjQuMSAxMy4zQzI0IDEyIDIzLjYgMTAuOSAyMi44IDEwLjFaXCIsXG4gICAgICBmaWxsOiBcImN1cnJlbnRDb2xvclwiXG4gICAgfVxuICApXG5dIH0pLCBzZiA9ICgpID0+IC8qIEBfX1BVUkVfXyAqLyBjKFwic3ZnXCIsIHsgdmlld0JveDogXCIwIDAgMjQgMjRcIiwgZmlsbDogXCJub25lXCIsIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsIGNoaWxkcmVuOiAvKiBAX19QVVJFX18gKi8gYyhcbiAgXCJwYXRoXCIsXG4gIHtcbiAgICBkOiBcIk0xOC45MjEyIDkuNjEwMDdDMTkuOTE3IDguODEzMzkgMjAuNDE0OSA3LjcxNzk1IDIwLjQxNDkgNi40MjMzNEMyMC40MTQ5IDQuMjMyNDcgMTguNjIyNCAyLjQzOTk0IDE2LjMzMTkgMi40Mzk5NEMxNC4xNDExIDIuNDM5OTQgMTIuMjQ5IDQuMjMyNDcgMTIuMjQ5IDYuNDIzMzRDMTIuMjQ5IDcuNjE4MzYgMTIuNzQ2OSA4LjgxMzM5IDEzLjc0MjcgOS42MTAwN0MxMi41NDc3IDEwLjAwODQgMTEuMzUyNyAxMC43MDU1IDEwLjU1NiAxMS43MDE0QzEwLjM1NjggMTEuNjAxOCAxMC4yNTczIDExLjYwMTggMTAuMDU4MSAxMS41MDIyQzExLjA1MzkgMTAuNzA1NSAxMS41NTE5IDkuNjEwMDcgMTEuNTUxOSA4LjMxNTQ2QzExLjU1MTkgNi4xMjQ1OSA5Ljc1OTM0IDQuMzMyMDYgNy40Njg4OCA0LjMzMjA2QzUuMjc4MDEgNC4zMzIwNiAzLjM4NTg5IDYuMTI0NTkgMy4zODU4OSA4LjMxNTQ2QzMuNDg1NDggOS41MTA0OCAzLjk4MzQgMTAuNzA1NSA0Ljk3OTI1IDExLjUwMjJDMS45OTE3IDEyLjM5ODQgMCAxNC45ODc3IDAgMTguMDc0OFYyMC45NjI4QzAgMjEuMjYxNSAwLjI5ODc1NSAyMS41NjAzIDAuNTk3NTEgMjEuNTYwM0gxNC41Mzk0QzE0LjgzODIgMjEuNTYwMyAxNS4xMzY5IDIxLjI2MTUgMTUuMTM2OSAyMC45NjI4VjE5LjY2ODJIMjMuNDAyNUMyMy43MDEyIDE5LjY2ODIgMjQgMTkuMzY5NCAyNCAxOS4wNzA2VjE2LjE4MjdDMjMuOTAwNCAxMy4xOTUxIDIxLjgwOTEgMTAuNDA2NyAxOC45MjEyIDkuNjEwMDdaTTExLjc1MSAxMi4xOTkzQzEyLjg0NjUgMTEuMTAzOCAxNC4zNDAyIDEwLjUwNjMgMTUuODM0IDEwLjUwNjNIMTcuMDI5QzIwLjIxNTggMTAuNTA2MyAyMi44MDUgMTMuMDk1NSAyMi44MDUgMTYuMTgyN1YxOC40NzMxSDE1LjEzNjlWMTguMDc0OEMxNS4wMzczIDE1LjY4NDggMTMuNzQyNyAxMy40OTM5IDExLjc1MSAxMi4xOTkzWk0xMy41NDM2IDYuNTIyOTNDMTMuNTQzNiA0LjkyOTU3IDE0LjgzODIgMy43MzQ1NSAxNi40MzE1IDMuNzM0NTVDMTguMDI0OSAzLjczNDU1IDE5LjMxOTUgNS4wMjkxNSAxOS4zMTk1IDYuNTIyOTNDMTkuMzE5NSA4LjExNjI5IDE4LjAyNDkgOS4zMTEzMSAxNi40MzE1IDkuMzExMzFDMTQuODM4MiA5LjMxMTMxIDEzLjU0MzYgOC4wMTY3MSAxMy41NDM2IDYuNTIyOTNaTTYuOTcwOTUgMTIuMjk4OUg4LjE2NTk3QzguNzYzNDggMTIuMjk4OSA5LjQ2MDU4IDEyLjM5ODQgMTAuMDU4MSAxMi41OTc2QzEwLjM1NjggMTIuNjk3MiAxMC42NTU2IDEyLjc5NjggMTAuODU0OCAxMi45OTZDMTIuNzQ2OSAxMy45OTE4IDEzLjg0MjMgMTUuODgzOSAxMy44NDIzIDE3Ljk3NTJWMjAuMjY1N0gxLjE5NTAyVjE3Ljk3NTJDMS4xOTUwMiAxNC44ODgxIDMuNzg0MjMgMTIuMjk4OSA2Ljk3MDk1IDEyLjI5ODlaTTQuNjgwNSA4LjQxNTA1QzQuNjgwNSA2LjgyMTY4IDUuOTc1MSA1LjYyNjY2IDcuNTY4NDYgNS42MjY2NkM5LjE2MTgzIDUuNjI2NjYgMTAuNDU2NCA2LjkyMTI3IDEwLjQ1NjQgOC40MTUwNUMxMC40NTY0IDEwLjAwODQgOS4xNjE4MyAxMS4yMDM0IDcuNTY4NDYgMTEuMjAzNEM1Ljk3NTEgMTEuMjAzNCA0LjY4MDUgOS45MDg4MiA0LjY4MDUgOC40MTUwNVpcIixcbiAgICBmaWxsOiBcImN1cnJlbnRDb2xvclwiXG4gIH1cbikgfSksIGNmID0gKCkgPT4gLyogQF9fUFVSRV9fICovIGUxKFwic3ZnXCIsIHsgdmlld0JveDogXCIwIDAgMjQgMjRcIiwgZmlsbDogXCJub25lXCIsIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsIGNoaWxkcmVuOiBbXG4gIC8qIEBfX1BVUkVfXyAqLyBjKFxuICAgIFwicGF0aFwiLFxuICAgIHtcbiAgICAgIGZpbGxSdWxlOiBcImV2ZW5vZGRcIixcbiAgICAgIGNsaXBSdWxlOiBcImV2ZW5vZGRcIixcbiAgICAgIGQ6IFwiTTEyIDE4LjA1MDVDMTYuODUzMiAxOC4wNTA1IDIxLjM4MjQgMTUuODg1MiAyMy44NzE1IDEyLjM5ODdMMjMuODkwMyAxMi4zNzIzVjEyLjM1MjVDMjMuOTA2NCAxMi4zMzU5IDIzLjk0NTEgMTIuMjk2MSAyMy45NDUxIDEyLjIyNjZMMjMuOTQ1MiAxMi4yMTEzQzIzLjk1MDcgMTIuMjA1MiAyMy45NTg1IDEyLjE5NyAyMy45NzE1IDEyLjE4MzZMMjMuOTk5OSAxMi4xNTQyVjExLjg4NjdMMjQgMTEuODgxQzI0LjAwMDEgMTEuODU5IDI0LjAwMDQgMTEuODIyMSAyMy45ODMgMTEuNzg2QzIzLjk3MzkgMTEuNzY3MiAyMy45NjIgMTEuNzUyMyAyMy45NTIgMTEuNzQwN0wyMy45NDQgMTEuNzMxN0MyMy45NDIyIDExLjcxMzcgMjMuOTM4IDExLjY5MyAyMy45MjgyIDExLjY3MjdDMjMuOTE5IDExLjY1MzggMjMuOTA3MiAxMS42Mzg5IDIzLjg5NzEgMTEuNjI3M0MyMy44ODg3IDExLjYxNzcgMjMuODc4NCAxMS42MDY5IDIzLjg2NzQgMTEuNTk1NkMyMS40MzE2IDguMTExNTkgMTYuODQ5NCA1Ljk0OTU0IDEyIDUuOTQ5NTRDNi4zMzc3OCA1Ljk0OTU0IDEuNzk4OTYgOC42NjkzMiA2Ljg1MThlLTA1IDExLjk1MTZDMS44NDEzMiAxNS41MzE3IDguMjgyMTggMTguMDUwNSAxMiAxOC4wNTA1Wk0xLjQ4OTM0IDExLjk1MTZDMy43MjUyMSAxNC44ODkyIDcuNzc4NyAxNi44Mjg1IDEyLjA1NDggMTYuODI4NUMxNi4zMzEzIDE2LjgyODUgMjAuMzg1MSAxNC45OTQ3IDIyLjYyMDkgMTIuMDU2N0MyMC4zODUxIDkuMTE4NjcgMTYuMzMxMyA3LjI4NDc4IDEyLjA1NDggNy4yODQ3OEM3Ljc3OTE4IDcuMjg0NzggMy43Nzg2NCA5LjAxMjM0IDEuNDg5MzQgMTEuOTUxNlpcIixcbiAgICAgIGZpbGw6IFwiY3VycmVudENvbG9yXCJcbiAgICB9XG4gICksXG4gIC8qIEBfX1BVUkVfXyAqLyBjKFxuICAgIFwicGF0aFwiLFxuICAgIHtcbiAgICAgIGZpbGxSdWxlOiBcImV2ZW5vZGRcIixcbiAgICAgIGNsaXBSdWxlOiBcImV2ZW5vZGRcIixcbiAgICAgIGQ6IFwiTTEyLjA1NSA4LjY2OTMyQzEwLjI5NjMgOC42NjkzMiA4LjgyODUyIDEwLjE5MDggOC44Mjg1MiAxMS45OTk5QzguODI4NTIgMTMuODA5IDEwLjI5NjMgMTUuMzMwNSAxMi4wNTUgMTUuMzMwNUMxMy44MTM2IDE1LjMzMDUgMTUuMjgxNCAxMy44MDkgMTUuMjgxNCAxMS45OTk5QzE1LjI4MTQgMTAuMTkwOCAxMy44MTM2IDguNjY5MzIgMTIuMDU1IDguNjY5MzJaTTEwLjAxNzUgMTEuOTk5OUMxMC4wMTc1IDEzLjE5MjEgMTAuOTYwNyAxNC4xMDg3IDEyLjA1NSAxNC4xMDg3QzEzLjE0NzUgMTQuMTA4NyAxNC4wOTI0IDEzLjEzNzEgMTQuMDkyNCAxMS45OTk5QzE0LjA5MjQgMTAuODA3OCAxMy4xNDkyIDkuODkxMjEgMTIuMDU1IDkuODkxMjFDMTAuOTA5MiA5Ljg5MTIxIDEwLjAxNzUgMTAuODYxIDEwLjAxNzUgMTEuOTk5OVpcIixcbiAgICAgIGZpbGw6IFwiY3VycmVudENvbG9yXCJcbiAgICB9XG4gIClcbl0gfSksIGxmID0gKCkgPT4gLyogQF9fUFVSRV9fICovIGMoXCJzdmdcIiwgeyB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLCB2aWV3Qm94OiBcIjAgMCAyNCAyNFwiLCBmaWxsOiBcIm5vbmVcIiwgY2hpbGRyZW46IC8qIEBfX1BVUkVfXyAqLyBjKFxuICBcInBhdGhcIixcbiAge1xuICAgIGZpbGxSdWxlOiBcImV2ZW5vZGRcIixcbiAgICBjbGlwUnVsZTogXCJldmVub2RkXCIsXG4gICAgZDogXCJNMjQgMTEuOEMyNCAxMS43IDI0IDExLjcgMjQgMTEuN0MyMS40IDguMiAxNi44IDYgMTIgNkM2LjMgNiAxLjggOC43IDAgMTJDMS44IDE1LjYgOC4zIDE4LjEgMTIgMTguMUMxNi44IDE4LjEgMjEuNCAxNS45IDIzLjkgMTIuNEwyNCAxMi4zVjExLjhDMjQgMTEuOSAyNCAxMS45IDI0IDExLjhaTTEyLjEgMTUuNEMxMC4zIDE1LjQgOC45IDEzLjkgOC45IDEyLjFDOC45IDEwLjMgMTAuNCA4LjggMTIuMSA4LjhDMTMuOSA4LjggMTUuMyAxMC4zIDE1LjMgMTIuMUMxNS4zIDEzLjkgMTMuOCAxNS40IDEyLjEgMTUuNFpcIixcbiAgICBmaWxsOiBcImN1cnJlbnRDb2xvclwiXG4gIH1cbikgfSksIHBmID0gKCkgPT4gLyogQF9fUFVSRV9fICovIGMoXCJzdmdcIiwgeyB2aWV3Qm94OiBcIjAgMCAyNCAyNFwiLCBmaWxsOiBcIm5vbmVcIiwgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiwgY2hpbGRyZW46IC8qIEBfX1BVUkVfXyAqLyBjKFxuICBcInBhdGhcIixcbiAge1xuICAgIGZpbGxSdWxlOiBcImV2ZW5vZGRcIixcbiAgICBjbGlwUnVsZTogXCJldmVub2RkXCIsXG4gICAgZDogXCJNMC4wMDAyNDQxNDEgMTcuMzQ2N0wwLjUyMjg3NyAxOC4zOTJMNC43OTMxNyAxNi4yNTY4QzcuMjU3NjkgMTcuNTcyMSAxMC4xNjI2IDE4LjM1ODIgMTIuMjE3NyAxOC4zNTgyQzE2Ljk2OTUgMTguMzU4MiAyMS40MDQgMTYuMjM4MiAyMy44NDEgMTIuODI0NUwyMy44NTk0IDEyLjc5ODdWMTIuNzc5M0MyMy44NzUyIDEyLjc2MzEgMjMuOTEzMSAxMi43MjQxIDIzLjkxMzEgMTIuNjU2MUwyMy45MTMyIDEyLjY0MTFDMjMuOTE4NiAxMi42MzUgMjMuOTI2MyAxMi42MjcxIDIzLjkzOSAxMi42MTM5TDIzLjk2NjggMTIuNTg1MlYxMi4zMjMyTDIzLjk2NjggMTIuMzE3N0MyMy45NjcgMTIuMjk2MiAyMy45NjczIDEyLjI2IDIzLjk1MDIgMTIuMjI0N0MyMy45NDEzIDEyLjIwNjIgMjMuOTI5NyAxMi4xOTE2IDIzLjkxOTggMTIuMTgwM0wyMy45MTIgMTIuMTcxNUMyMy45MTAzIDEyLjE1MzggMjMuOTA2MiAxMi4xMzM2IDIzLjg5NjUgMTIuMTEzN0MyMy44ODc2IDEyLjA5NTMgMjMuODc2IDEyLjA4MDYgMjMuODY2MSAxMi4wNjkzQzIzLjg1NzkgMTIuMDU5OCAyMy44NDc4IDEyLjA0OTMgMjMuODM3MSAxMi4wMzgyQzIyLjg4MTcgMTAuNjcxNyAyMS41ODkgOS41MTI5MSAyMC4wNzc0IDguNjE0N0wyNC4wMDAyIDYuNjUzM0wyMy40Nzc2IDUuNjA4MDNMMTguODA1MyA3Ljk0NDE3QzE2LjgxNzggNy4wMjA2NCAxNC41NDkzIDYuNTEwMTggMTIuMjE3NyA2LjUxMDE4QzYuNjczODIgNi41MTAxOCAyLjIyOTg2IDkuMTczMTEgMC40Njg1NzMgMTIuMzg2OEMxLjA4MjQ3IDEzLjU4MDUgMi4yMTg2IDE0LjY1MzYgMy41OTM4NCAxNS41NDk5TDAuMDAwMjQ0MTQxIDE3LjM0NjdaTTUuOTcgMTUuNjY4NEM3Ljg0Nzc5IDE2LjYxNjggMTAuMDI4MyAxNy4xNjE4IDEyLjI3MTQgMTcuMTYxOEMxNi40NTg1IDE3LjE2MTggMjAuNDI3NSAxNS4zNjYzIDIyLjYxNjYgMTIuNDg5N0MyMS42MjQgMTEuMTg1NCAyMC4yNjU1IDEwLjEwMzMgMTguNjg2NiA5LjMxMDFMMTUuMTM4NiAxMS4wODQxQzE1LjMyNTYgMTEuNDk3NyAxNS40MzA1IDExLjk1NTYgMTUuNDMwNSAxMi40MzQxQzE1LjQzMDUgMTQuMjA1NCAxMy45OTM0IDE1LjY5NTEgMTIuMjcxNSAxNS42OTUxQzExLjA2NTkgMTUuNjk1MSA5Ljk5OTg5IDE0Ljk2NDggOS40NjkwNCAxMy45MTg5TDUuOTcgMTUuNjY4NFpNOS4xMzEwMSAxMi43ODEzTDQuNzUzNDcgMTQuOTcwMUMzLjY0MzA2IDE0LjI0OTYgMi42Nzk2MyAxMy4zNzYgMS45MjY3MiAxMi4zODY4QzQuMTY4MTcgOS41MDg5NiA4LjA4NTEgNy44MTc1MSAxMi4yNzE0IDcuODE3NTFDMTQuMDE4OCA3LjgxNzUxIDE1LjcyODIgOC4xMzAyNCAxNy4yODYyIDguNzAzNzZMMTQuNDY5OCAxMC4xMTE5QzEzLjg5NzcgOS41MzQwOCAxMy4xMTkxIDkuMTczMTEgMTIuMjcxNSA5LjE3MzExQzEwLjU0OTYgOS4xNzMxMSA5LjExMjUgMTAuNjYyOCA5LjExMjUgMTIuNDM0MUM5LjExMjUgMTIuNTUxMiA5LjExODc4IDEyLjY2NzEgOS4xMzEwMSAxMi43ODEzWk0xMC41MDc1IDEzLjM5OTdDMTAuODQ3MyAxNC4wNjEyIDExLjUyMzMgMTQuNDk4OCAxMi4yNzE1IDE0LjQ5ODhDMTMuMzQxMyAxNC40OTg4IDE0LjI2NjQgMTMuNTQ3NiAxNC4yNjY0IDEyLjQzNDFDMTQuMjY2NCAxMi4xMzY0IDE0LjIwNjMgMTEuODU2MiAxNC4wOTkgMTEuNjAzOUwxMC41MDc1IDEzLjM5OTdaTTEzLjMyNjUgMTAuNjgzNkwxMC4yODkzIDEyLjIwMjJDMTAuNDAwMyAxMS4xOTA1IDExLjIyODMgMTAuMzY5NSAxMi4yNzE1IDEwLjM2OTVDMTIuNjUzNyAxMC4zNjk1IDEzLjAxNzEgMTAuNDgzNyAxMy4zMjY1IDEwLjY4MzZaXCIsXG4gICAgZmlsbDogXCJjdXJyZW50Q29sb3JcIlxuICB9XG4pIH0pLCBkZiA9ICgpID0+IC8qIEBfX1BVUkVfXyAqLyBjKFwic3ZnXCIsIHsgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiwgdmlld0JveDogXCIwIDAgMjUgMjRcIiwgZmlsbDogXCJub25lXCIsIGNoaWxkcmVuOiAvKiBAX19QVVJFX18gKi8gYyhcbiAgXCJwYXRoXCIsXG4gIHtcbiAgICBmaWxsUnVsZTogXCJldmVub2RkXCIsXG4gICAgY2xpcFJ1bGU6IFwiZXZlbm9kZFwiLFxuICAgIGQ6IFwiTTI0IDEyLjJDMjQgMTIuMSAyNCAxMi4xIDI0IDEyLjFDMjMuMiAxMC45IDIyLjIgOS45IDIwLjkgOS4xTDIzLjYgNy44QzI0LjEgNy42IDI0LjIgNyAyNCA2LjZDMjMuNyA2LjIgMjMuNCA2IDIzLjEgNkMyMyA2IDIyLjggNiAyMi43IDYuMUwxOSA4QzE2LjkgNyAxNC41IDYuNCAxMiA2LjRDNi4zIDYuNCAxLjggOS4xIDAgMTIuNEMwLjcgMTMuNyAxLjkgMTQuOCAzLjQgMTUuOEwwLjUgMTcuMkMwIDE3LjQgLTAuMSAxOCAwLjEgMTguNEMwLjMgMTguNyAwLjYgMTguOSAwLjkgMTguOUMxIDE4LjkgMS4yIDE4LjkgMS4zIDE4LjhMNS4zIDE2LjhDNy42IDE3LjkgMTAuMSAxOC41IDEyIDE4LjVDMTYuOCAxOC41IDIxLjQgMTYuMyAyMy45IDEyLjhMMjQgMTIuN1YxMi4yWk04LjggMTIuNEM4LjggMTAuNiAxMC4zIDkuMSAxMiA5LjFDMTIuOSA5LjEgMTMuOCA5LjUgMTQuNCAxMC4yTDguOSAxM0M4LjggMTIuOCA4LjggMTIuNiA4LjggMTIuNFpNMTIuMSAxNS44QzExLjEgMTUuOCAxMC4zIDE1LjMgOS43IDE0LjZMMTUuMyAxMS44QzE1LjMgMTIgMTUuNCAxMi4yIDE1LjQgMTIuNEMxNS4zIDE0LjIgMTMuOCAxNS44IDEyLjEgMTUuOFpcIixcbiAgICBmaWxsOiBcImN1cnJlbnRDb2xvclwiXG4gIH1cbikgfSksIGJmID0gKCkgPT4gLyogQF9fUFVSRV9fICovIGMoXCJzdmdcIiwgeyB2aWV3Qm94OiBcIjAgMCAyNCAyNFwiLCBmaWxsOiBcIm5vbmVcIiwgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiwgY2hpbGRyZW46IC8qIEBfX1BVUkVfXyAqLyBjKFxuICBcInBhdGhcIixcbiAge1xuICAgIGZpbGxSdWxlOiBcImV2ZW5vZGRcIixcbiAgICBjbGlwUnVsZTogXCJldmVub2RkXCIsXG4gICAgZDogXCJNMTMuOTg3OSAzLjY4MTQ0QzEzLjU2MTkgMy4zOTYzOCAxMi45OTM4IDMuNDY3NjcgMTIuNTY3OCAzLjc1MjczTDcuMzg0NDggNi45NTk2NkM2LjM5MDQxIDcuNjAxMDUgNS4yNTQzNCA3Ljg4NjEgNC4xODkyNyA3Ljg4NjFIMi43NjkxOEMxLjIwNzA3IDcuODg2MSAwIDkuMzgyNjcgMCAxMS4yMzU2VjEyLjczMjFDMCAxNC41ODUgMS4yNzgwOCAxNi4wODE2IDIuNzY5MTggMTYuMDgxNkgzLjU1MDIzQzUuMTEyMzMgMTYuMDgxNiA2LjYwMzQyIDE2LjUwOTEgOC4wMjM1MiAxNy40MzU2TDEyLjU2NzggMjAuMjg2MkMxMi43ODA4IDIwLjQyODcgMTMuMDY0OCAyMC41IDEzLjM0ODkgMjAuNUMxMy41NjE5IDIwLjUgMTMuODQ1OSAyMC40Mjg3IDE0LjA1ODkgMjAuMjg2MkMxNC42MjY5IDIwLjAwMTEgMTQuOTExIDE5LjM1OTggMTQuOTExIDE4LjY0NzFWNS4yNDkyOEMxNC44NCA0LjYwNzkgMTQuNDg0OSAzLjk2NjUgMTMuOTg3OSAzLjY4MTQ0Wk0xMy40OTA5IDE4LjY0NzFDMTMuNDkwOSAxOC44NjA5IDEzLjQxOTkgMTkuMDc0NyAxMy4yNzc5IDE5LjA3NDdIMTMuMjA2OEw4LjY2MjU1IDE2LjIyNDFDNy4xMDA0NSAxNS4yMjY0IDUuMzI1MzUgMTQuNzI3NSAzLjU1MDIzIDE0LjcyNzVIMi42OTgxN0MxLjkxNzEyIDE0LjcyNzUgMS4yMDcwNyAxMy44MDExIDEuMjA3MDcgMTIuNzMyMVYxMS4yMzU2QzEuMjA3MDcgMTAuMTY2NiAxLjg0NjExIDkuMjQwMTEgMi42OTgxNyA5LjI0MDExSDQuMTE4MjZDNS40NjczNSA5LjI0MDExIDYuODE2NDQgOC44MTI1MyA4LjAyMzUyIDguMDk5ODhMMTMuMjA2OCA0Ljg5Mjk2SDEzLjI3NzlMMTMuMjc3OSA0Ljg5Mjk5QzEzLjM0ODkgNC45NjQyNiAxMy40OTA5IDUuMTA2NzYgMTMuNDkwOSA1LjMyMDUzVjE4LjY0NzFaTTIwLjU5MTggMTIuMDE5N0MyMC41OTE4IDEwLjIzODEgMTkuNDU1NyA4Ljc0MTUxIDE3LjgyMjYgOC4xNzEzOUMxNy40Njc2IDguMDI4ODYgMTcuMTEyNiA4LjI0MjY4IDE2Ljk3MDYgOC41OTkwMUMxNi44Mjg2IDguOTU1MzMgMTcuMDQxNiA5LjMxMTY3IDE3LjM5NjYgOS40NTQyQzE4LjUzMjcgOS44MTA1MiAxOS4yNDI3IDEwLjg3OTUgMTkuMjQyNyAxMi4wOTFDMTkuMjQyNyAxMy4zMDI1IDE4LjQ2MTcgMTQuMzAwMiAxNy4zOTY2IDE0LjcyNzhDMTcuMDQxNiAxNC44NzAzIDE2LjgyODYgMTUuMjI2NiAxNi45NzA2IDE1LjU4M0MxNy4wNDE2IDE1Ljg2OCAxNy4zMjU2IDE2LjAxMDUgMTcuNjA5NiAxNi4wMTA1SDE3LjgyMjZDMTkuNDU1NyAxNS4yOTc5IDIwLjU5MTggMTMuNzMwMSAyMC41OTE4IDEyLjAxOTdaTTE4LjAzNTYgNS4zMjA2M0MxOC4xNzc2IDQuOTY0MyAxOC41MzI2IDQuNzUwNTIgMTguODg3NyA0Ljg5MzA1QzIxLjk0MDkgNS44OTA3NiAyMy45MjkgOC43NDEzNiAyNCAxMi4wMTk1QzI0IDE1LjI5NzcgMjEuOTQwOSAxOC4xNDgzIDE4Ljg4NzcgMTkuMTQ2SDE4LjY3NDdDMTguMzkwNyAxOS4xNDYgMTguMTA2NiAxOS4wMDM1IDE4LjAzNTYgMTguNzE4NUMxNy45NjQ2IDE4LjM2MjEgMTguMTA2NiAxOC4wMDU4IDE4LjQ2MTcgMTcuODYzM0MyMC45NDY4IDE3LjAwODEgMjIuNjUwOSAxNC42NTYzIDIyLjY1MDkgMTIuMDE5NUMyMi42NTA5IDkuMzgyNzQgMjAuOTQ2OCA3LjAzMDk5IDE4LjQ2MTcgNi4xNzU4MUMxOC4xMDY2IDYuMDMzMjggMTcuODkzNiA1LjY3Njk1IDE4LjAzNTYgNS4zMjA2M1pcIixcbiAgICBmaWxsOiBcImN1cnJlbnRDb2xvclwiXG4gIH1cbikgfSksIE1mID0gKCkgPT4gLyogQF9fUFVSRV9fICovIGMoXCJzdmdcIiwgeyB2aWV3Qm94OiBcIjAgMCAyNCAyNFwiLCBmaWxsOiBcIm5vbmVcIiwgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiwgY2hpbGRyZW46IC8qIEBfX1BVUkVfXyAqLyBjKFxuICBcInBhdGhcIixcbiAge1xuICAgIGZpbGxSdWxlOiBcImV2ZW5vZGRcIixcbiAgICBjbGlwUnVsZTogXCJldmVub2RkXCIsXG4gICAgZDogXCJNMTQuMzE2OSAzLjc1MjczQzE0Ljc1MTQgMy40Njc2NyAxNS4zMzA3IDMuMzk2MzggMTUuNzY1MiAzLjY4MTQ0QzE2LjM0NDUgMy45NjY1IDE2LjcwNjUgNC42MDc5IDE2LjcwNjUgNS4yNDkyOFYxOC42NDcxQzE2LjcwNjUgMTkuMzU5OCAxNi40MTY5IDIwLjAwMTEgMTUuODM3NiAyMC4yODYyQzE1LjYyMDMgMjAuNDI4NyAxNS4zMzA3IDIwLjUgMTUuMTEzNSAyMC41QzE0LjgyMzggMjAuNSAxNC41MzQyIDIwLjQyODcgMTQuMzE2OSAyMC4yODYyTDkuNjgyNTUgMTcuNDM1NkM4LjIzNDMxIDE2LjUwOTEgNi43MTM2NyAxNi4wODE2IDUuMTIwNiAxNi4wODE2SDQuMzI0MDRDMi44MDMzOSAxNi4wODE2IDEuNSAxNC41ODUgMS41IDEyLjczMjFWMTEuMjM1NkMxLjUgOS4zODI2NyAyLjczMDk4IDcuODg2MSA0LjMyNDA0IDcuODg2MUg1Ljc3MjI4QzYuODU4NDYgNy44ODYxIDguMDE3MDYgNy42MDEwNSA5LjAzMDgyIDYuOTU5NjZMMTQuMzE2OSAzLjc1MjczWk0xNS4xMTM1IDE5LjA3NDdDMTUuMjU4MyAxOS4wNzQ3IDE1LjMzMDcgMTguODYwOSAxNS4zMzA3IDE4LjY0NzFIMTUuNDAzMVY1LjMyMDUzQzE1LjQwMzEgNS4xMDY3OSAxNS4yNTgzIDQuOTY0MjkgMTUuMTg1OSA0Ljg5MzAxTDE1LjE4NTggNC44OTI5NkgxNS4xMTM1TDkuODI3MzggOC4wOTk4OEM4LjU5NjM4IDguODEyNTMgNy4yMjA1NSA5LjI0MDExIDUuODQ0NzIgOS4yNDAxMUg0LjM5NjQ4QzMuNTI3NTQgOS4yNDAxMSAyLjg3NTggMTAuMTY2NiAyLjg3NTggMTEuMjM1NlYxMi43MzIxQzIuODc1OCAxMy44MDExIDMuNTk5OTUgMTQuNzI3NSA0LjM5NjQ4IDE0LjcyNzVINS4xOTNDNy4wMDMzIDE0LjcyNzUgOC44MTM2MSAxNS4yMjY0IDEwLjQwNjcgMTYuMjI0MUwxNS4wNDExIDE5LjA3NDdIMTUuMTEzNVpNMTguODA3IDguNTI3NjJDMTguOTUxOCA4LjE3MTMgMTkuMzEzOSA3Ljk1NzUzIDE5LjY3NTkgOC4xMDAwNkMyMS4zNDE0IDguNjcwMTcgMjIuNSAxMC4yMzggMjIuNSAxMi4wOTA4QzIyLjUgMTMuODcyNCAyMS4zNDE0IDE1LjM2OSAxOS42NzU5IDE1LjkzOTFIMTkuNDU4N0MxOS4xNjkxIDE1LjkzOTEgMTguODc5NCAxNS43OTY2IDE4LjgwNyAxNS41MTE1QzE4LjY2MjIgMTUuMTU1MiAxOC44Nzk0IDE0Ljc5ODkgMTkuMjQxNSAxNC42NTY0QzIwLjMyNzcgMTQuMjI4OCAyMS4xMjQyIDEzLjIzMTEgMjEuMTI0MiAxMi4wMTk2QzIxLjEyNDIgMTAuODA4MSAyMC40MDAxIDkuNzM5MTIgMTkuMjQxNSA5LjM4MjhDMTguODc5NCA5LjI0MDI3IDE4LjY2MjIgOC44ODM5NCAxOC44MDcgOC41Mjc2MlpcIixcbiAgICBmaWxsOiBcImN1cnJlbnRDb2xvclwiXG4gIH1cbikgfSksIEFmID0gKCkgPT4gLyogQF9fUFVSRV9fICovIGMoXCJzdmdcIiwgeyB2aWV3Qm94OiBcIjAgMCAyNCAyNFwiLCBmaWxsOiBcIm5vbmVcIiwgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiwgY2hpbGRyZW46IC8qIEBfX1BVUkVfXyAqLyBjKFxuICBcInBhdGhcIixcbiAge1xuICAgIGZpbGxSdWxlOiBcImV2ZW5vZGRcIixcbiAgICBjbGlwUnVsZTogXCJldmVub2RkXCIsXG4gICAgZDogXCJNMTIuNDU3MiAzLjc1MjczQzEyLjg3OTQgMy40Njc2NyAxMy40NDI1IDMuMzk2MzggMTMuODY0NyAzLjY4MTQ0QzE0LjQyNzggMy45NjY1IDE0Ljc3OTcgNC42MDc5IDE0Ljc3OTcgNS4yNDkyOFYxOC42NDcxQzE0Ljc3OTcgMTkuMzU5OCAxNC40OTgyIDIwLjAwMTEgMTMuOTM1MSAyMC4yODYyQzEzLjcyNCAyMC40Mjg3IDEzLjQ0MjUgMjAuNSAxMy4yMzE0IDIwLjVDMTIuOTQ5OCAyMC41IDEyLjY2ODMgMjAuNDI4NyAxMi40NTcyIDIwLjI4NjJMNy45NTI4OCAxNy40MzU2QzYuNTQ1MjkgMTYuNTA5MSA1LjA2NzMzIDE2LjA4MTYgMy41MTg5OCAxNi4wODE2SDIuNzQ0NzhDMS4yNjY4MSAxNi4wODE2IDAgMTQuNTg1IDAgMTIuNzMyMVYxMS4yMzU2QzAgOS4zODI2NyAxLjE5NjQzIDcuODg2MSAyLjc0NDc4IDcuODg2MUg0LjE1MjM3QzUuMjA4MDYgNy44ODYxIDYuMzM0MTQgNy42MDEwNSA3LjMxOTQ1IDYuOTU5NjZMMTIuNDU3MiAzLjc1MjczWk0xMy4yMzE0IDE5LjA3NDdDMTMuMzcyMSAxOS4wNzQ3IDEzLjQ0MjUgMTguODYwOSAxMy40NDI1IDE4LjY0NzFIMTMuNTEyOFY1LjMyMDUzQzEzLjUxMjggNS4xMDY3NCAxMy4zNzIxIDQuOTY0MjQgMTMuMzAxNyA0Ljg5Mjk3TDEzLjMwMTcgNC44OTI5NkgxMy4yMzE0TDguMDkzNjUgOC4wOTk4OEM2Ljg5NzIgOC44MTI1MyA1LjU1OTk5IDkuMjQwMTEgNC4yMjI3NyA5LjI0MDExSDIuODE1MThDMS45NzA2MyA5LjI0MDExIDEuMzM3MTkgMTAuMTY2NiAxLjMzNzE5IDExLjIzNTZWMTIuNzMyMUMxLjMzNzE5IDEzLjgwMTEgMi4wNDEwMSAxNC43Mjc1IDIuODE1MTggMTQuNzI3NUgzLjU4OTM0QzUuMzQ4ODMgMTQuNzI3NSA3LjEwODMzIDE1LjIyNjQgOC42NTY2OCAxNi4yMjQxTDEzLjE2MDkgMTkuMDc0N0gxMy4yMzE0Wk0yMi43MzMyIDkuNDU0MTVDMjMuMDE0NyA5LjE2OTA4IDIzLjM2NjYgOS4xNjkwOCAyMy42NDgxIDkuNDU0MTVDMjMuOTI5NiA5LjczOTIxIDIzLjkyOTYgMTAuMTY2OCAyMy43ODg5IDEwLjM4MDZMMjEuODg4NiAxMi4zMDQ4TDIzLjc4ODkgMTQuMjI5QzI0LjA3MDQgMTQuNTE0IDI0LjA3MDQgMTQuODcwNCAyMy43ODg5IDE1LjE1NTVDMjMuNjQ4MSAxNS4yOTggMjMuNDM3IDE1LjM2OTIgMjMuMjk2MiAxNS4zNjkyQzIzLjA4NTEgMTUuMzY5MiAyMi45NDQzIDE1LjI5OCAyMi44MDM1IDE1LjE1NTVMMjAuOTAzMyAxMy4yMzEzTDE5LjAwMzEgMTUuMTU1NUMxOC44NjIzIDE1LjI5OCAxOC42NTEyIDE1LjM2OTIgMTguNTEwNCAxNS4zNjkyQzE4LjI5OTMgMTUuMzY5MiAxOC4xNTg1IDE1LjI5OCAxOC4wMTc3IDE1LjE1NTVDMTcuNzM2MiAxNC44NzA0IDE3LjczNjIgMTQuNTE0IDE4LjAxNzcgMTQuMjI5TDE5LjkxOCAxMi4zMDQ4TDE4LjAxNzcgMTAuMzgwNkMxNy43MzYyIDEwLjA5NTUgMTcuNzM2MiA5LjczOTIxIDE4LjAxNzcgOS40NTQxNUMxOC4yOTkyIDkuMTY5MDggMTguNjUxMSA5LjE2OTA4IDE4LjkzMjcgOS40NTQxNUwyMC44MzI5IDExLjM3ODNMMjIuNzMzMiA5LjQ1NDE1WlwiLFxuICAgIGZpbGw6IFwiY3VycmVudENvbG9yXCJcbiAgfVxuKSB9KSwgdWYgPSAoKSA9PiAvKiBAX19QVVJFX18gKi8gYyhcInN2Z1wiLCB7IHZpZXdCb3g6IFwiMCAwIDI0IDI0XCIsIGZpbGw6IFwibm9uZVwiLCB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLCBjaGlsZHJlbjogLyogQF9fUFVSRV9fICovIGMoXG4gIFwicGF0aFwiLFxuICB7XG4gICAgZmlsbFJ1bGU6IFwiZXZlbm9kZFwiLFxuICAgIGNsaXBSdWxlOiBcImV2ZW5vZGRcIixcbiAgICBkOiBcIk0xNy4wNzcgMC41Mzk5NzhWNC4yNTk5OEMxOS43NTU3IDUuODc5OTggMjEuNSA4Ljc1OTk5IDIxLjUgMTJDMjEuNSAxNS4yNCAxOS42OTM1IDE4LjEyIDE3LjAxNDggMTkuNzRWMjMuNDZDMTcuMDE0OCAyMy43NiAxNi43NjU2IDI0IDE2LjQ1NDEgMjRINy41NDU5MUM3LjIzNDQzIDI0IDYuOTg1MjUgMjMuNzYgNi45ODUyNSAyMy40NlYxOS43NEM0LjMwNjU2IDE4LjEyIDIuNSAxNS4yNCAyLjUgMTJDMi41IDguNzU5OTkgNC4zMDY1NiA1Ljg3OTk4IDYuOTg1MjUgNC4yNTk5OFYwLjUzOTk3OEM2Ljk4NTI1IDAuMjM5OTc4IDcuMjM0NDMgMCA3LjU0NTkxIDBIMTYuNTE2NEMxNi44Mjc5IDAgMTcuMDc3IDAuMjM5OTc4IDE3LjA3NyAwLjUzOTk3OFpNMTUuODkzNCAxLjEzOTk4SDguMTY4ODZWMy43MTk5N0M5LjM1MjQ2IDMuMTc5OTcgMTAuNjYwNyAyLjg3OTk5IDEyLjAzMTIgMi44Nzk5OUMxMy40MDE3IDIuODc5OTkgMTQuNzA5OCAzLjE3OTk3IDE1Ljg5MzQgMy43MTk5N1YxLjEzOTk4Wk04LjEwNjU2IDIyLjk4SDE1LjgzMTFWMjAuNEMxNC42NDc1IDIwLjk0IDEzLjMzOTQgMjEuMjQgMTEuOTY4OSAyMS4yNEMxMC41OTg0IDIxLjI0IDkuMjkwMTYgMjAuOTQgOC4xMDY1NiAyMC40VjIyLjk4Wk0zLjY4MzYgMTIuMDZDMy42ODM2IDE2LjUgNy40MjEzMiAyMC4xIDEyLjAzMTIgMjAuMUMxNi42NDEgMjAuMSAyMC4zNzg3IDE2LjUgMjAuMzc4NyAxMi4wNkMyMC4zNzg3IDcuNjE5OTggMTYuNjQxIDQuMDE5OTcgMTIuMDMxMiA0LjAxOTk3QzcuNDIxMzIgNC4wMTk5NyAzLjY4MzYgNy42MTk5OCAzLjY4MzYgMTIuMDZaTTEyLjAzMTEgNS43NTk3N0MxMi4zNDI2IDUuNzU5NzcgMTIuNTkxOCA1Ljk5OTc3IDEyLjU5MTggNi4yOTk3NkgxMi42NTQxVjExLjUxOTVIMTguMDExM0MxOC4zMjI3IDExLjUxOTUgMTguNTcxOSAxMS43NTk1IDE4LjU3MTkgMTIuMDU5NUMxOC41NzE5IDEyLjM1OTUgMTguMzIyNyAxMi41OTk1IDE4LjAxMTMgMTIuNTk5NUgxMi4wMzExQzExLjcxOTcgMTIuNTk5NSAxMS40NzA1IDEyLjM1OTUgMTEuNDcwNSAxMi4wNTk1VjYuMjk5NzZDMTEuNDcwNSA1Ljk5OTc3IDExLjcxOTcgNS43NTk3NyAxMi4wMzExIDUuNzU5NzdaXCIsXG4gICAgZmlsbDogXCJjdXJyZW50Q29sb3JcIlxuICB9XG4pIH0pLCB6ZiA9ICgpID0+IC8qIEBfX1BVUkVfXyAqLyBjKFwic3ZnXCIsIHsgdmlld0JveDogXCIwIDAgMjQgMjRcIiwgZmlsbDogXCJub25lXCIsIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsIGNoaWxkcmVuOiAvKiBAX19QVVJFX18gKi8gYyhcbiAgXCJwYXRoXCIsXG4gIHtcbiAgICBmaWxsUnVsZTogXCJldmVub2RkXCIsXG4gICAgY2xpcFJ1bGU6IFwiZXZlbm9kZFwiLFxuICAgIGQ6IFwiTTEuNCAxLjRWOS42SDYuNlYxLjRIMS40Wk0xIDBDMC40NDc3MTUgMCAwIDAuNDQ3NzE1IDAgMVYxMEMwIDEwLjU1MjMgMC40NDc3MTUgMTEgMSAxMUg3QzcuNTUyMjggMTEgOCAxMC41NTIzIDggMTBWMUM4IDAuNDQ3NzE1IDcuNTUyMjggMCA3IDBIMVpNMS40IDIyLjZWMTQuNEgxMi42VjIyLjZIMS40Wk0wIDE0QzAgMTMuNDQ3NyAwLjQ0NzcxNSAxMyAxIDEzSDEzQzEzLjU1MjMgMTMgMTQgMTMuNDQ3NyAxNCAxNFYyM0MxNCAyMy41NTIzIDEzLjU1MjMgMjQgMTMgMjRIMUMwLjQ0NzcxNiAyNCAwIDIzLjU1MjMgMCAyM1YxNFpNMTcuNCAyMi42VjE0LjRIMjIuNlYyMi42SDE3LjRaTTE2IDE0QzE2IDEzLjQ0NzcgMTYuNDQ3NyAxMyAxNyAxM0gyM0MyMy41NTIzIDEzIDI0IDEzLjQ0NzcgMjQgMTRWMjNDMjQgMjMuNTUyMyAyMy41NTIzIDI0IDIzIDI0SDE3QzE2LjQ0NzcgMjQgMTYgMjMuNTUyMyAxNiAyM1YxNFpNMTEuNCA5LjZWMS40SDIyLjZWOS42SDExLjRaTTEwIDFDMTAgMC40NDc3MTUgMTAuNDQ3NyAwIDExIDBIMjNDMjMuNTUyMyAwIDI0IDAuNDQ3NzE1IDI0IDFWMTBDMjQgMTAuNTUyMyAyMy41NTIzIDExIDIzIDExSDExQzEwLjQ0NzcgMTEgMTAgMTAuNTUyMyAxMCAxMFYxWlwiLFxuICAgIGZpbGw6IFwiY3VycmVudENvbG9yXCJcbiAgfVxuKSB9KSwgaGYgPSAoKSA9PiAvKiBAX19QVVJFX18gKi8gYyhcInN2Z1wiLCB7IHZpZXdCb3g6IFwiMCAwIDI0IDI0XCIsIGZpbGw6IFwibm9uZVwiLCB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLCBjaGlsZHJlbjogLyogQF9fUFVSRV9fICovIGMoXG4gIFwicGF0aFwiLFxuICB7XG4gICAgZmlsbFJ1bGU6IFwiZXZlbm9kZFwiLFxuICAgIGNsaXBSdWxlOiBcImV2ZW5vZGRcIixcbiAgICBkOiBcIk0yMy45OTk4IDIwLjMwNDNDMjMuOTk5OCAyMC42OTA2IDIzLjY4NTEgMjAuOTk5NiAyMy4yOTE2IDIwLjk5OTZDMjIuODk4MiAyMC45OTk2IDIyLjU4MzUgMjAuNjkwNiAyMi41ODM1IDIwLjMwNDNWMy42OTUyNkMyMi41ODM1IDMuMzA5MDEgMjIuODk4MiAzIDIzLjI5MTYgM0MyMy42ODUxIDMgMjMuOTk5OCAzLjMwOTAxIDIzLjk5OTggMy42OTUyNlYyMC4zMDQzWk0xNy42MjYxIDIwLjk5OTdDMTguMDE5NSAyMC45OTk3IDE4LjMzNDMgMjAuNjkwNyAxOC4zMzQzIDIwLjMwNDRWNi40NzY0M0MxOC4zMzQzIDYuMDkwMTcgMTguMDE5NSA1Ljc4MTE3IDE3LjYyNjEgNS43ODExN0MxNy4yMzI3IDUuNzgxMTcgMTYuOTE4IDYuMDkwMTcgMTYuOTE4IDYuNDc2NDNWMjAuMzA0NEMxNi45MTggMjAuNjkwNyAxNy4yMzI3IDIwLjk5OTcgMTcuNjI2MSAyMC45OTk3Wk0xMi4wMzkyIDguNDg1MDdDMTIuNDMyNyA4LjQ4NTA3IDEyLjc0NzQgOC43OTQwNyAxMi43NDc0IDkuMTgwMzNWMjAuMjI3M0MxMi43NDc0IDIwLjYxMzYgMTIuNDMyNyAyMC45MjI2IDEyLjAzOTIgMjAuOTIyNkMxMS42NDU4IDIwLjkyMjYgMTEuMzMxMSAyMC42MTM2IDExLjMzMTEgMjAuMjI3M1Y5LjE4MDMzQzExLjMzMTEgOC43OTQwNyAxMS42NDU4IDguNDg1MDcgMTIuMDM5MiA4LjQ4NTA3Wk01LjY2NTUzIDExLjk2MTVWMjAuMzA0N0M1LjY2NTUzIDIwLjY5MDkgNS45ODAyNCAyMSA2LjM3MzY3IDIxQzYuNzY3MSAyMSA3LjA4MTg3IDIwLjY5MDkgNy4wODE4NyAyMC4zMDQ3VjExLjk2MTVDNy4wODE4NyAxMS41NzUzIDYuNzY3MSAxMS4yNjYzIDYuMzczNjcgMTEuMjY2M0M1Ljk4MDI0IDExLjI2NjMgNS42NjU1MyAxMS41NzUzIDUuNjY1NTMgMTEuOTYxNVpNMC43MDgxNDYgMjFDMS4xMDE1OCAyMSAxLjQxNjM0IDIwLjY5MSAxLjQxNjM0IDIwLjMwNDdWMTQuNzQyNkMxLjQxNjM0IDE0LjM1NjQgMS4xMDE1OCAxNC4wNDczIDAuNzA4MTQ2IDE0LjA0NzNDMC4zMTQ3MTUgMTQuMDQ3MyAwIDE0LjM1NjQgMCAxNC43NDI2VjIwLjMwNDdDMCAyMC42OTEgMC4zMTQ3MTUgMjEgMC43MDgxNDYgMjFaXCIsXG4gICAgZmlsbDogXCJjdXJyZW50Q29sb3JcIlxuICB9XG4pIH0pLCBPZiA9ICgpID0+IC8qIEBfX1BVUkVfXyAqLyBjKFwic3ZnXCIsIHsgdmlld0JveDogXCIwIDAgMjQgMjRcIiwgZmlsbDogXCJub25lXCIsIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsIGNoaWxkcmVuOiAvKiBAX19QVVJFX18gKi8gYyhcbiAgXCJwYXRoXCIsXG4gIHtcbiAgICBkOiBcIk0xMi4xNDM4IDFDMTIuMDcxOSAxIDEyLjA3MTkgMSAxMiAxQzUuOTYwODEgMSAxIDUuOTYwNzggMSAxMkMxIDE4LjAzOTIgNS45NjA4MSAyMyAxMiAyM0MxOC4wMzkyIDIzIDIzIDE4LjAzOTIgMjMgMTJDMjMgNS45NjA3OCAxOC4xODMgMS4wNzE5IDEyLjE0MzggMVpNMjEuNjM0IDExLjI4MUgxNy4yNDg0QzE3LjEwNDYgNy45NzM4NSAxNS44MTA0IDQuODgyMzYgMTMuNzI1NSAyLjQzNzkxQzE4LjAzOTIgMy4yMjg3NiAyMS4zNDY0IDYuODIzNTMgMjEuNjM0IDExLjI4MVpNMTIuMDcxOSAyMS4yNzQ1QzkuNzcxMjUgMTguOTczOSA4LjMzMzMyIDE1Ljg4MjQgOC4xODk1MyAxMi42NDcxSDE1Ljk1NDNDMTUuNzM4NiAxNS44ODI0IDE0LjM3MjYgMTguOTczOSAxMi4wNzE5IDIxLjI3NDVaTTguMTg5NTMgMTEuMjgxQzguMzMzMzIgOC4wNDU3NSA5LjY5OTM1IDQuOTU0MjQgMTIuMDcxOSAyLjY1MzU5QzE0LjM3MjYgNC45NTQyNCAxNS44MTA1IDguMDQ1NzUgMTUuOTU0MyAxMS4yODFIOC4xODk1M1pNMTAuMzQ2NCAyLjUwOTc5QzguMTg5NTMgNC45NTQyMyA2Ljk2NzM0IDguMDQ1NzMgNi44MjM1NSAxMS4zNTI5SDIuNDM3OTFDMi43MjU0OSA2LjgyMzUxIDYuMDMyNjcgMy4yMjg3NCAxMC4zNDY0IDIuNTA5NzlaTTIuNDM3OTEgMTIuNjQ3MUg2LjgyMzU1QzYuOTY3MzQgMTUuOTU0MyA4LjI2MTQzIDE5LjA0NTggMTAuMzQ2NCAyMS40OTAyQzYuMDMyNjcgMjAuNjk5NCAyLjcyNTQ5IDE3LjEwNDYgMi40Mzc5MSAxMi42NDcxWk0xMy43MjU1IDIxLjQ5MDJDMTUuODgyMyAxOS4wNDU4IDE3LjEwNDYgMTUuOTU0MyAxNy4yNDg0IDEyLjY0NzFIMjEuNjM0QzIxLjM0NjQgMTcuMTA0NiAxOC4wMzkyIDIwLjY5OTQgMTMuNzI1NSAyMS40OTAyWlwiLFxuICAgIGZpbGw6IFwiY3VycmVudENvbG9yXCJcbiAgfVxuKSB9KSwgZmYgPSAoKSA9PiAvKiBAX19QVVJFX18gKi8gYyhcInN2Z1wiLCB7IHZpZXdCb3g6IFwiMCAwIDI0IDI0XCIsIGZpbGw6IFwibm9uZVwiLCB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLCBjaGlsZHJlbjogLyogQF9fUFVSRV9fICovIGMoXG4gIFwicGF0aFwiLFxuICB7XG4gICAgZmlsbFJ1bGU6IFwiZXZlbm9kZFwiLFxuICAgIGNsaXBSdWxlOiBcImV2ZW5vZGRcIixcbiAgICBkOiBcIk0wIDguMTgwMjlDMCAzLjY1MDcxIDMuNjQwNDMgMCA4LjE1NzI5IDBDMTIuNjc0MSAwIDE2LjMxNDYgMy42NTA3IDE2LjQ0OTQgOC4yNDc4OUMxNi40NDk0IDEwLjI3NjEgMTUuNzA3OSAxMi4xNjkgMTQuNDk0NCAxMy41ODg3TDE2LjU4NDMgMTUuNjg0NUwxNi45MjEzIDE1LjM0NjVDMTcuMTkxIDE1LjA3NjEgMTcuNTI4MSAxNS4wNzYxIDE3Ljc5NzcgMTUuMzQ2NUwyMy43OTc3IDIxLjM2MzRDMjQuMDY3NCAyMS42MzM4IDI0LjA2NzQgMjEuOTcxOCAyMy43OTc3IDIyLjI0MjNMMjMuNDYwNyAyMi41ODAzTDIzLjc5NzcgMjIuOTE4M0MyNC4wNjc0IDIzLjE4ODcgMjQuMDY3NCAyMy41MjY4IDIzLjc5NzcgMjMuNzk3MkMyMy42NjI5IDIzLjkzMjQgMjMuNTI4MSAyNCAyMy4zMjU4IDI0QzIzLjEyMzYgMjQgMjIuOTg4NyAyMy45MzI0IDIyLjg1MzkgMjMuNzk3MkwyMi41MTY4IDIzLjQ1OTJMMjIuMTc5OCAyMy43OTcyQzIyLjA0NDkgMjMuOTMyNCAyMS44NDI3IDI0IDIxLjcwNzkgMjRDMjEuNTA1NiAyNCAyMS4zNzA4IDIzLjkzMjQgMjEuMjM2IDIzLjc5NzJMMTUuMjM1OSAxNy43ODAzQzE1LjEwMTEgMTcuNjQ1MSAxNS4wMzM3IDE3LjQ0MjMgMTUuMDMzNyAxNy4zMDcxQzE1LjAzMzcgMTcuMTA0MiAxNS4xMDExIDE2Ljk2OSAxNS4yMzU5IDE2LjgzMzhMMTUuNTczIDE2LjQ5NThMMTMuNDgzMSAxNC40QzEyIDE1LjYxNjkgMTAuMTc5OCAxNi4zNjA2IDguMTU3MjkgMTYuMzYwNkMzLjY0MDQzIDE2LjM2MDYgMCAxMi43MDk5IDAgOC4xODAyOVpNMjEuOTc3NSAyMi4xMDcxTDIyLjMxNDYgMjEuNzY5TDE3LjEyMzYgMTYuNjk4NkwxNi41MTY5IDE3LjMwNzFMMjEuNjQwNCAyMi40NDUxTDIxLjk3NzUgMjIuMTA3MVpNOC4xNTcyOSAxLjI4NDUxQzQuMzgyMDEgMS4yODQ1MSAxLjI4MDg3IDQuMzk0MzcgMS4yODA4NyA4LjE4MDI5QzEuMjgwODcgMTEuOTY2MiA0LjM4MjAxIDE1LjA3NjEgOC4xNTcyOSAxNS4wNzYxQzExLjkzMjYgMTUuMDc2MSAxNS4wMzM3IDExLjk2NjIgMTUuMDMzNyA4LjE4MDI5QzE1LjAzMzcgNC4zOTQzNyAxMS45MzI2IDEuMjg0NTEgOC4xNTcyOSAxLjI4NDUxWk04Ljc2MzkyIDcuNTA0MTdIMTAuNjUxNUMxMS4wNTYgNy41MDQxNyAxMS4yNTgyIDcuODQyMTkgMTEuMjU4MiA4LjE4MDIxQzExLjI1ODIgOC41MTgyMyAxMC45ODg2IDguNzg4NjQgMTAuNjUxNSA4Ljc4ODY0SDguNzYzOTJWMTAuNjEzOUM4Ljc2MzkyIDEwLjk1MiA4LjQ5NDI1IDExLjIyMjQgOC4xNTcxOCAxMS4yMjI0QzcuODIwMTEgMTEuMjIyNCA3LjU1MDQ4IDEwLjk1MiA3LjU1MDQ4IDEwLjYxMzlWOC43MjEwNEg1LjY2Mjg1QzUuMzI1NzggOC43MjEwNCA1LjA1NjE1IDguNDUwNjIgNS4wNTYxNSA4LjExMjYxQzUuMDU2MTUgNy43NzQ1OSA1LjMyNTc4IDcuNTA0MTcgNS42NjI4NSA3LjUwNDE3SDcuNTUwNDhWNS42MTEyN0M3LjU1MDQ4IDUuMjczMjUgNy44MjAxMSA1LjAwMjg0IDguMTU3MTggNS4wMDI4NEM4LjQ5NDI1IDUuMDAyODQgOC43NjM5MiA1LjI3MzI1IDguNzYzOTIgNS42MTEyN1Y3LjUwNDE3WlwiLFxuICAgIGZpbGw6IFwiY3VycmVudENvbG9yXCJcbiAgfVxuKSB9KSwgZ2YgPSAoKSA9PiAvKiBAX19QVVJFX18gKi8gYyhcInN2Z1wiLCB7IHZpZXdCb3g6IFwiMCAwIDI0IDI0XCIsIGZpbGw6IFwibm9uZVwiLCB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLCBjaGlsZHJlbjogLyogQF9fUFVSRV9fICovIGMoXG4gIFwicGF0aFwiLFxuICB7XG4gICAgZmlsbFJ1bGU6IFwiZXZlbm9kZFwiLFxuICAgIGNsaXBSdWxlOiBcImV2ZW5vZGRcIixcbiAgICBkOiBcIk0xMy40MjM3IDE0LjQ2NzZDMTEuOTMyMiAxNS42ODQ1IDEwLjEwMTcgMTYuNDI4MiA4LjA2NzggMTYuNDI4MkMzLjUyNTQzIDE2LjQyODIgMCAxMi43MDk5IDAgOC4xODAyOEMwIDMuNjUwNyAzLjY2MTA4IDAgOC4yMDM0NCAwQzEyLjc0NTggMCAxNi40MDY4IDMuNjUwNyAxNi40MDY4IDguMTgwMjhDMTYuNDA2OCAxMC4yMDg0IDE1LjY2MSAxMi4xMDE0IDE0LjQ0MDcgMTMuNTIxMUwxNi41NDI0IDE1LjYxNjlMMTYuODgxMyAxNS4yNzg5QzE3LjA4NDcgMTUuMDc2MSAxNy41NTkzIDE1LjA3NjEgMTcuNzYyNyAxNS4yNzg5TDIzLjc5NjYgMjEuMjk1OEMyMy45MzIyIDIxLjQzMSAyNCAyMS42MzM4IDI0IDIxLjc2OUMyNCAyMS45NzE4IDIzLjkzMjIgMjIuMTA3IDIzLjc5NjYgMjIuMjQyM0wyMy40NTc2IDIyLjU4MDNMMjMuNzk2NiAyMi45MTgzQzI0LjA2NzggMjMuMTg4NyAyNC4wNjc4IDIzLjUyNjggMjMuNzk2NiAyMy43OTcyQzIzLjY2MSAyMy45MzI0IDIzLjUyNTQgMjQgMjMuMzIyIDI0QzIzLjExODYgMjQgMjIuOTgzMSAyMy45MzI0IDIyLjg0NzUgMjMuNzk3MkwyMi41MDg1IDIzLjQ1OTJMMjIuMTY5NSAyMy43OTcyQzIyLjAzMzkgMjMuOTMyNCAyMS44OTgzIDI0IDIxLjY5NDkgMjRDMjEuNDkxNSAyNCAyMS4zNTU5IDIzLjkzMjQgMjEuMjIwMyAyMy43OTcyTDE1LjE4NjQgMTcuNzgwM0MxNC45MTUyIDE3LjUwOTkgMTQuOTE1MiAxNy4xNzE4IDE1LjE4NjQgMTYuOTAxNEwxNS41MjU0IDE2LjU2MzRMMTMuNDIzNyAxNC40Njc2Wk0yMi4zMDUxIDIxLjc2OUwxNy4xNTI1IDE2LjYzMUwxNi44ODEzIDE2LjkwMTRMMTYuNTQyNCAxNy4yMzk0TDIxLjY5NDkgMjIuMzc3NUwyMi4zMDUxIDIxLjc2OVpNMTQuOTgzMSA4LjE4MDI4QzE0Ljk4MzEgNC4zOTQzNyAxMS44NjQ0IDEuMjg0NTEgOC4wNjc4IDEuMjg0NTFDNC4yNzExOSAxLjI4NDUxIDEuMTUyNTkgNC4zOTQzNyAxLjE1MjU5IDguMTgwMjhDMS4xNTI1OSAxMS45NjYyIDQuMjcxMTkgMTUuMDc2MSA4LjA2NzggMTUuMDc2MUMxMS44NjQ0IDE1LjA3NjEgMTQuOTgzMSAxMS45NjYyIDE0Ljk4MzEgOC4xODAyOFpNMTAuNTc2MiA4Ljg1NjMxSDUuNTU5MzlDNS4yMjA0MSA4Ljg1NjMxIDQuOTQ5MjIgOC41ODU4OSA0Ljk0OTIyIDguMjQ3ODdDNC45NDkyMiA3LjkwOTg1IDUuMjIwNDEgNy42Mzk0MyA1LjU1OTM5IDcuNjM5NDNIMTAuNTc2MkMxMC45MTUyIDcuNjM5NDMgMTEuMTg2MyA3LjkwOTg1IDExLjE4NjMgOC4yNDc4N0MxMS4xODYzIDguNTg1ODkgMTAuOTE1MiA4Ljg1NjMxIDEwLjU3NjIgOC44NTYzMVpcIixcbiAgICBmaWxsOiBcImN1cnJlbnRDb2xvclwiXG4gIH1cbikgfSksIGhsID0gLyogQF9fUFVSRV9fICovIE9iamVjdC5mcmVlemUoLyogQF9fUFVSRV9fICovIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh7XG4gIF9fcHJvdG9fXzogbnVsbCxcbiAgQWxlcnQ6IHB1LFxuICBBbGVydEZpbGxlZDogZHUsXG4gIEFycm93Qm90dG9tOiBidSxcbiAgQXJyb3dMZWZ0OiBNdSxcbiAgQXJyb3dSaWdodDogQXUsXG4gIEFycm93VXA6IHV1LFxuICBBdHRhY2htZW50OiB6dSxcbiAgQmFyR3JhcGg6IGh1LFxuICBCYXJHcmFwaEZpbGxlZDogT3UsXG4gIEJhdHRlcnlFbXB0eTogZnUsXG4gIEJhdHRlcnlGdWxsOiBndSxcbiAgQmVsbDogQ3UsXG4gIEJlbGxGaWxsZWQ6IG11LFxuICBCZWxsT2ZmOiBMdSxcbiAgQmluOiB2dSxcbiAgQmluRmlsbGVkOiBxdSxcbiAgQmluT2N1bGFyczogd3UsXG4gIEJsb2NrczogeXUsXG4gIEJyZWFrOiB4dSxcbiAgQnJpZWZDYXNlQmFjazogV3UsXG4gIEJyaWVmQ2FzZUJhY2tGaWxsZWQ6IFJ1LFxuICBCcmllZkNhc2VGcm9udDogQnUsXG4gIEJyb2FkY2FzdDogU3UsXG4gIEJ1YmJsZXM6IEV1LFxuICBCdWJibGVzRmlsbGVkOiBrdSxcbiAgQ2FsZW5kYXI6IE51LFxuICBDYW1lcmE6IFR1LFxuICBDYXNlOiBJdSxcbiAgQ2FzZXM6IER1LFxuICBDaGFpbnM6IEh1LFxuICBDaGVja01hcms6IFZ1LFxuICBDaGVja01hcmtGaWxsZWQ6IFB1LFxuICBDaGV2cm9uRG93bjogRnUsXG4gIENoZXZyb25Eb3duRHJvcGRvd246IFh1LFxuICBDaGV2cm9uTGVmdDogWXUsXG4gIENoZXZyb25MZWZ0VGhpY2s6IFp1LFxuICBDaGV2cm9uUmlnaHQ6IEd1LFxuICBDaGV2cm9uUmlnaHRUaGljazogUXUsXG4gIENoZXZyb25VcDoganUsXG4gIENoZXZyb25VcERyb3Bkb3duOiBVdSxcbiAgQ2xvc2U6IEt1LFxuICBDbG91ZEZpbGxlZDogX3UsXG4gIENvZGU6IEp1LFxuICBDb2dXaGVlbDogJHUsXG4gIENvZ1doZWVsRmlsbGVkOiBleixcbiAgQ29sdW1uT3B0aW9uRmlsbGVkOiBveixcbiAgQ29sdW1uT3B0aW9uczogdHosXG4gIENvbHVtbnM6IHJ6LFxuICBDb2x1bW5zRmlsbGVkOiBueixcbiAgQ29tYmluZTogaXosXG4gIENvcnBvcmF0ZTogYXosXG4gIENyb3NzOiBzeixcbiAgQ3Jvc3NGaWxsZWQ6IGN6LFxuICBEYXJrTW9kZVN3aXRjaGVyRmlsbGVkOiBweixcbiAgRGVjcmVhc2U6IGx6LFxuICBEZXN0aW5hdGlvbjogZHosXG4gIERpYWxvZ3VlOiBieixcbiAgRGlhbG9ndWVGaWxsZWQ6IE16LFxuICBEaXNhYmxlZDogQXosXG4gIERpc2FibGVkRmlsbGVkOiB1eixcbiAgRGlzY29ubmVjdDogenosXG4gIERvY0ZpbGU6IGh6LFxuICBEb2N1bWVudDogT3osXG4gIERvY3VtZW50RmlsbGVkOiBmeixcbiAgRG9sbGFyOiBneixcbiAgRG91YmxlQ2hldnJvbkxlZnQ6IEN6LFxuICBEb3VibGVDaGV2cm9uUmlnaHQ6IG16LFxuICBEb3dubG9hZDogTHosXG4gIERvd25sb2FkQ2xvdWQ6IHF6LFxuICBEb3dubG9hZENsb3VkRmlsbGVkOiB5eixcbiAgRG93bmxvYWRGaWxsZWQ6IHZ6LFxuICBFcnJvcjogd3osXG4gIEVycm9yRmlsbGVkOiB4eixcbiAgRXhjZWw6IFd6LFxuICBFeHRlcm5hbExpbms6IFJ6LFxuICBGaWxtOiBCeixcbiAgRmlsbUJpZzogU3osXG4gIEZpbHRlcjogRXosXG4gIEZpbHRlckZpbGxlZDoga3osXG4gIEZpbHRlcnM6IE56LFxuICBGaWx0ZXJzRmlsbGVkOiBUeixcbiAgRmlyc3RQYWdlOiBJeixcbiAgRmxhZzogRHosXG4gIEZsYWdGaWxsZWQ6IEh6LFxuICBGb2xkZXI6IFZ6LFxuICBGb2xkZXJPcGVuOiBQeixcbiAgRnVsbFNjcmVlbjogRnosXG4gIEdyYXBoOiBYeixcbiAgR3JhcGhGaWxsZWQ6IFV6LFxuICBIZWFkUGhvbmVzOiBHeixcbiAgSGVhcnQ6IFF6LFxuICBIZWxwOiBaeixcbiAgSGVscDI6IEt6LFxuICBIZWxwRmlsbGVkOiBqeixcbiAgSGlzdG9yeTogSnosXG4gIEhvbWU6IF96LFxuICBIb21lRmlsbGVkOiAkeixcbiAgSW1hZ2U6IGVoLFxuICBJbmNyZWFzZTogdGgsXG4gIEluZm86IG9oLFxuICBJbmZvRmlsbGVkOiByaCxcbiAgSm91cm5hbDogbmgsXG4gIEpvdXJuYWxGaWxsZWQ6IGloLFxuICBMYWJlbDogYWgsXG4gIExhYmVsRmlsbGVkOiBzaCxcbiAgTGFzdFBhZ2U6IGNoLFxuICBMaWdodEJ1bGI6IGxoLFxuICBMaWdodE1vZGVTd2l0Y2hlckZpbGxlZDogcGgsXG4gIExpc3Q6IGRoLFxuICBMaXN0RmlsbGVkOiBiaCxcbiAgTG9hZGVyOiBNaCxcbiAgTG9jYXRpb246IEFoLFxuICBMb2NrQ2xvc2VkOiB1aCxcbiAgTG9ja0Nsb3NlZEZpbGxlZDogemgsXG4gIExvY2tPcGVuZWQ6IGhoLFxuICBMb2NrT3BlbmVkRmlsbGVkOiBPaCxcbiAgTG9nT3V0OiBmaCxcbiAgTWFpbENsb3NlZDogZ2gsXG4gIE1haWxPcGVuZWQ6IENoLFxuICBNYXA6IG1oLFxuICBNYXhpbWl6ZTogTGgsXG4gIE1lbnU6IHZoLFxuICBNZW51RG93bjogcWgsXG4gIE1lbnVEb3duRmlsbGVkOiB5aCxcbiAgTWVudUxlZnQ6IHdoLFxuICBNZW51TWlkZGxlOiB4aCxcbiAgTWVudVJpZ2h0OiBXaCxcbiAgTWVyZ2U6IFJoLFxuICBNaWNyb3Bob25lOiBCaCxcbiAgTWluaW1pemU6IFNoLFxuICBNaW51czogRWgsXG4gIE1vbm9sb2d1ZToga2gsXG4gIE1vbm9sb2d1ZUZpbGxlZDogTmgsXG4gIE1vdXNlOiBUaCxcbiAgTW92ZTogSWgsXG4gIE1vdmVEb3RzOiBEaCxcbiAgTW92ZURvdHNGaWxsZWQ6IEhoLFxuICBOb3JtYWw6IFZoLFxuICBPZmZpY2U6IFBoLFxuICBPZmZpY2VGaWxsZWQ6IEZoLFxuICBPcmllbnRhdGlvbkhvcml6b250YWw6IFhoLFxuICBPcmllbnRhdGlvbkhvcml6b250YWxGaWxsZWQ6IFVoLFxuICBPcmllbnRhdGlvblZlcnRpY2FsOiBZaCxcbiAgT3JpZW50YXRpb25WZXJ0aWNhbEZpbGxlZDogR2gsXG4gIFBhaXI6IFFoLFxuICBQYXBlcjogWmgsXG4gIFBhdXNlOiBqaCxcbiAgUGF5bWVudDogS2gsXG4gIFBkZkZpbGU6IEpoLFxuICBQZW5jaVdyaXRlOiAkaCxcbiAgUGVuY2lsOiBfaCxcbiAgUGVyY2VudGFnZTogZU8sXG4gIFBpZTogdE8sXG4gIFBpZUZpbGxlZDogb08sXG4gIFBsYXk6IHJPLFxuICBQbHVzOiBuTyxcbiAgUG93ZXI6IGlPLFxuICBQcmludDogYU8sXG4gIFByb2ZpbGU6IHNPLFxuICBQcm9maWxlRmlsbGVkOiBjTyxcbiAgUHJvZmlsZVBsdXM6IGxPLFxuICBQcm9maWxlUGx1c0ZpbGxlZDogcE8sXG4gIFJlY2VudDogdU8sXG4gIFJlY29uY2lsaWF0aW9uOiBkTyxcbiAgUmVmcmVzaDogYk8sXG4gIFJlZnJlc2hGaWxsZWQ6IE1PLFxuICBSZXNldDogQU8sXG4gIFJvd09wdGlvbnM6IHpPLFxuICBSb3dPcHRpb25zRmlsbGVkOiBoTyxcbiAgU2F2ZTogT08sXG4gIFNhdmVGaWxsZWQ6IGZPLFxuICBTY2hlbWU6IGdPLFxuICBTY3JlZW46IENPLFxuICBTZWFyY2g6IG1PLFxuICBTZWFyY2hGaWxsZWQ6IExPLFxuICBTZW5kOiB2TyxcbiAgU2hhcmU6IHFPLFxuICBTaGllbGQ6IHlPLFxuICBTaGllbGRGaWxsZWQ6IHdPLFxuICBTaWRlQXJyb3dzOiB4TyxcbiAgU21pbGU6IFdPLFxuICBTb3J0OiBSTyxcbiAgU3RhcjogQk8sXG4gIFN0YXJGaWxsZWQ6IFNPLFxuICBTdGFyU29saWQ6IEVPLFxuICBTdGVyZW86IGtPLFxuICBTdG9wOiBOTyxcbiAgU3RvcFdhdGNoOiBUTyxcbiAgU3VjY2VzczogSU8sXG4gIFN1Y2Nlc3NGaWxsZWQ6IERPLFxuICBTdXJ2ZXk6IEhPLFxuICBTdXJ2ZXlGaWxsZWQ6IFZPLFxuICBUYXJnZXQ6IFBPLFxuICBUZWFtOiBGTyxcbiAgVGVhbUZpbGxlZDogWE8sXG4gIFRodW1ic0Rvd246IFVPLFxuICBUaHVtYnNVcDogWU8sXG4gIFRpbWU6IEdPLFxuICBUaW1lRmlsbGVkOiBRTyxcbiAgVG9EbzogWk8sXG4gIFRvRG9GaWxsZWQ6IGpPLFxuICBUb29sdGlwSW5mbzogS08sXG4gIFRyb3BoeTogSk8sXG4gIFR5cG9ncmFwaHk6IF9PLFxuICBVbmF2YWlsYWJsZTogJE8sXG4gIFVuYXZhaWxhYmxlRmlsbGVkOiBlZixcbiAgVW5jb21iaW5lOiB0ZixcbiAgVW5sb2NrZWQ6IG9mLFxuICBVcGxvYWQ6IHJmLFxuICBVcGxvYWRDbG91ZDogbmYsXG4gIFVwbG9hZENsb3VkRmlsbGVkOiBhZixcbiAgVXNlcnM6IHNmLFxuICBWaWV3OiBjZixcbiAgVmlld0ZpbGxlZDogbGYsXG4gIFZpZXdPZmY6IHBmLFxuICBWaWV3T2ZmRmlsbGVkOiBkZixcbiAgVm9sdW1lTWF4OiBiZixcbiAgVm9sdW1lTWluOiBNZixcbiAgVm9sdW1lT2ZmOiBBZixcbiAgV2F0Y2g6IHVmLFxuICBXaUZpOiBoZixcbiAgV2lkZ2V0czogemYsXG4gIFdpZGdldHNGaWxsZWQ6IFl6LFxuICBXb3JsZDogT2YsXG4gIFpvb21JbjogZmYsXG4gIFpvb21PdXQ6IGdmXG59LCBTeW1ib2wudG9TdHJpbmdUYWcsIHsgdmFsdWU6IFwiTW9kdWxlXCIgfSkpLCBuMiA9IHtcbiAgWFhYWFNNQUxMOiBcInh4eHhzXCIsXG4gIFhYWFNNQUxMOiBcInh4eHNcIixcbiAgWFhTTUFMTDogXCJ4eHNcIixcbiAgWFNNQUxMOiBcInhzXCIsXG4gIFNNQUxMOiBcInNtXCIsXG4gIE1FRElVTTogXCJtZFwiLFxuICBMQVJHRTogXCJsZ1wiLFxuICBFWFRSQV9MQVJHRTogXCJ4bFwiXG59LCBIMiA9IHtcbiAgSE9SSVpPTlRBTDogXCJob3Jpem9udGFsXCIsXG4gIFZFUlRJQ0FMOiBcInZlcnRpY2FsXCJcbn0sIE9sID0ge1xuICBMRUZUOiBcImxlZnRcIixcbiAgQ0VOVEVSOiBcImNlbnRlclwiLFxuICBSSUdIVDogXCJyaWdodFwiXG59O1xuJC5kaXZgXG4gIHdpZHRoOiAxMDAlO1xuICBtaW4td2lkdGg6IDEwMHZ3O1xuYDtcbmNvbnN0IENmID0gJC5kaXYoXG4gICh7IGNvbG9yOiBlID0gXCJpbmhlcml0XCIgfSkgPT4gbzFgXG4gICAgbGluZS1oZWlnaHQ6IDA7XG4gICAgY29sb3I6ICR7ZX07XG5cbiAgICA+IHN2ZyB7XG4gICAgICBwYXRoOiB7XG4gICAgICAgIGZpbGw6IGN1cnJlbnRDb2xvcjtcbiAgICAgIH1cbiAgICB9XG4gIGBcbiksIG5vID0gJChcbiAgQ2ZcbikoKHsgc2l6ZTogZSwgdGhlbWU6IHsgaXRlbVNpemU6IHQgfSB9KSA9PiB7XG4gIGxldCBvO1xuICBzd2l0Y2ggKGUpIHtcbiAgICBjYXNlIG4yLlhYWFhTTUFMTDpcbiAgICAgIG8gPSB0Lnh4eHhzO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSBuMi5YWFhTTUFMTDpcbiAgICAgIG8gPSB0Lnh4eHM7XG4gICAgICBicmVhaztcbiAgICBjYXNlIG4yLlhYU01BTEw6XG4gICAgICBvID0gdC54eHM7XG4gICAgICBicmVhaztcbiAgICBjYXNlIG4yLlhTTUFMTDpcbiAgICAgIG8gPSB0LnhzO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSBuMi5TTUFMTDpcbiAgICAgIG8gPSB0LnNtO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSBuMi5MQVJHRTpcbiAgICAgIG8gPSB0LmxnO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSBuMi5FWFRSQV9MQVJHRTpcbiAgICAgIG8gPSB0LnhsO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSBuMi5NRURJVU06XG4gICAgZGVmYXVsdDpcbiAgICAgIG8gPSB0Lm1kO1xuICB9XG4gIHJldHVybiBvMWBcbiAgICB3aWR0aDogJHtvfTtcbiAgICBib3gtc2l6aW5nOiBjb250ZW50LWJveDtcblxuICAgID4gc3ZnIHtcbiAgICAgIHdpZHRoOiAke299O1xuICAgIH1cbiAgYDtcbn0pLCBtZiA9ICQobm8pYGA7XG4kLmRpdmBcbiAgZGlzcGxheTogaW5saW5lLWZsZXg7XG4gIGhlaWdodDogMTAwdmg7XG4gIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG4gIGZsZXgtd3JhcDogd3JhcDtcbmA7XG4kLmRpdmBcbiAgbWluLXdpZHRoOiAyNTBweDtcbiAgZGlzcGxheTogZmxleDtcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgbWFyZ2luLWJvdHRvbTogMTBweDtcbiAgLmljb24tc3lzdGVtIHtcbiAgICBtYXJnaW4tcmlnaHQ6IDhweDtcbiAgfVxuXG4gIC5pY29uLWRldGFpbGVkIHtcbiAgICB3aWR0aDogJHsoeyB0aGVtZTogZSB9KSA9PiBlLml0ZW1TaXplLnNtfTtcbiAgICBtYXJnaW46IDAgMTZweCA4cHggMDtcbiAgfVxuYDtcbiQuc3BhbmBcbiAgZm9udC1zaXplOiAxNHB4O1xuYDtcbmZ1bmN0aW9uIFNyKGUpIHtcbiAgcmV0dXJuICh0KSA9PiAobykgPT4ge1xuICAgIGNvbnN0IHsgbmFtZTogbiwgLi4uciB9ID0gbywgaSA9IFN0cmluZyhuKSwgYSA9IGVbbl07XG4gICAgaWYgKCFhKVxuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICBgVGhlcmUgaXMgbm8gaW1hZ2UgYXZhaWxhYmxlIHdpdGggc3VjaCBuYW1lOiBbJHtpfV0uYFxuICAgICAgKTtcbiAgICByZXR1cm4gLyogQF9fUFVSRV9fICovIGModCwgeyAuLi5yLCBjaGlsZHJlbjogLyogQF9fUFVSRV9fICovIGMoYSwgeyBmaWxsOiBcImN1cnJlbnRDb2xvclwiIH0pIH0pO1xuICB9O1xufVxuZnVuY3Rpb24gTGYoZSkge1xuICB2YXIgdCwgbywgbiwgciwgaSwgYTtcbiAgcmV0dXJuIC8qIEBfX1BVUkVfXyAqLyBjKFxuICAgIG5vLFxuICAgIHtcbiAgICAgIHJvbGU6IFwiaW1nXCIsXG4gICAgICBcImFyaWEtbGFiZWxcIjogKG4gPSAobyA9ICh0ID0gZSA9PSBudWxsID8gdm9pZCAwIDogZS5jaGlsZHJlbikgPT0gbnVsbCA/IHZvaWQgMCA6IHQuX293bmVyKSA9PSBudWxsID8gdm9pZCAwIDogby5tZW1vaXplZFByb3BzKSAhPSBudWxsICYmIG4ubmFtZSA/IChhID0gKGkgPSAociA9IGUgPT0gbnVsbCA/IHZvaWQgMCA6IGUuY2hpbGRyZW4pID09IG51bGwgPyB2b2lkIDAgOiByLl9vd25lcikgPT0gbnVsbCA/IHZvaWQgMCA6IGkubWVtb2l6ZWRQcm9wcykgPT0gbnVsbCA/IHZvaWQgMCA6IGEubmFtZSA6IFwiXCIsXG4gICAgICBjbGFzc05hbWU6IFwiaWNvbi1zeXN0ZW1cIixcbiAgICAgIC4uLmVcbiAgICB9XG4gICk7XG59XG5jb25zdCBaMSA9IFNyKGhsKShMZiksIHZmID0gJC51bGBcbiAgcGFkZGluZzogMDtcbiAgbWFyZ2luOiAwO1xuYCwgRWEgPSAkLmRpdihcbiAgKHsgdGhlbWU6IGUgfSkgPT4gbzFgXG4gICAgZGlzcGxheTogZmxleDtcbiAgICBhbGlnbi1pdGVtczogY2VudGVyO1xuICAgIGp1c3RpZnktY29udGVudDogZmxleC1zdGFydDtcbiAgICBnYXA6IDhweDtcbiAgICBoZWlnaHQ6IGNhbGMoJHtlLkdMT0JBTF9JVEVNX0hFSUdIVF9DT05ERU5TRUR9ICsgNnB4KTtcbiAgICBwYWRkaW5nOiAwICR7ZS5zcGFjaW5ncy5zcDh9IDAgJHtlLnNwYWNpbmdzLnNwMTJ9O1xuICAgIGNvbG9yOiAke2UuY29sb3JzLnRleHRJY29uLnRleHRIaWdoZW1waGFzaXN9O1xuICAgIGN1cnNvcjogcG9pbnRlcjtcbiAgYFxuKSwgcjQgPSAkLmRpdmBcbiAgaGVpZ2h0OiAzMnB4O1xuICB3aWR0aDogMzJweDtcbiAgbWluLXdpZHRoOiAzMnB4O1xuICBkaXNwbGF5OiBmbGV4O1xuICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbmAsIGQ4ID0gJC5kaXZgXG4gIGRpc3BsYXk6IGZsZXg7XG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gIGp1c3RpZnktY29udGVudDogZmxleC1zdGFydDtcbiAgZ2FwOiA4cHg7XG4gIGZsZXgtZ3JvdzogMTtcbiAgd2hpdGUtc3BhY2U6IG5vd3JhcDtcbiAgb3ZlcmZsb3c6IGhpZGRlbjtcbiAgdGV4dC1vdmVyZmxvdzogZWxsaXBzaXM7XG4gIHBvaW50ZXItZXZlbnRzOiBub25lO1xuYCwga2EgPSAkLnAoXG4gICh7IHRoZW1lOiBlIH0pID0+IG8xYFxuICAgIGZvbnQtd2VpZ2h0OiAke2UuZm9udFdlaWdodC5tZWRpdW19O1xuICAgIG1hcmdpbjogMDtcbiAgICB3aGl0ZS1zcGFjZTogbm93cmFwO1xuICAgIG92ZXJmbG93OiBoaWRkZW47XG4gICAgdGV4dC1vdmVyZmxvdzogZWxsaXBzaXM7XG4gICAgcG9pbnRlci1ldmVudHM6IG5vbmU7XG4gIGBcbiksIHRuID0gJC5wKFxuICAoeyB0aGVtZTogZSB9KSA9PiBvMWBcbiAgICBmb250LXdlaWdodDogJHtlLmZvbnRXZWlnaHQubGlnaHR9O1xuICAgIGZvbnQtc2l6ZTogJHtlLnR5cG9ncmFwaHkudDEyfTtcbiAgICBjb2xvcjogJHtlLmNvbG9ycy50ZXh0SWNvbi50ZXh0TWVkaXVtZW1waGFzaXN9O1xuICAgIG1hcmdpbjogMDtcbiAgICB3aGl0ZS1zcGFjZTogbm93cmFwO1xuICAgIG92ZXJmbG93OiBoaWRkZW47XG4gICAgdGV4dC1vdmVyZmxvdzogZWxsaXBzaXM7XG4gICAgcG9pbnRlci1ldmVudHM6IG5vbmU7XG4gIGBcbiksIGI4ID0gJC5kaXYoXG4gICh7ICRpc0FsaWduOiBlIH0pID0+IG8xYFxuICAgIGRpc3BsYXk6IGZsZXg7XG4gICAganVzdGlmeS1jb250ZW50OiBzcGFjZS1iZXR3ZWVuO1xuICAgIGdhcDogOHB4O1xuICAgICR7ZSAmJiBvMWBcbiAgICAgIGZsZXgtZ3JvdzogMTtcbiAgICBgfVxuICBgXG4pLCBNOCA9ICQuZGl2KFxuICAoeyB0aGVtZTogZSB9KSA9PiBvMWBcbiAgICBmb250LXdlaWdodDogJHtlLmZvbnRXZWlnaHQubGlnaHR9O1xuICAgIGZvbnQtc2l6ZTogJHtlLnR5cG9ncmFwaHkudDEyfTtcbiAgICBjb2xvcjogJHtlLmNvbG9ycy50ZXh0SWNvbi50ZXh0TG93ZW1waGFzaXN9O1xuICAgIHBhZGRpbmc6IDAgNHB4ICR7ZS5zcGFjaW5ncy5zcDh9ICR7ZS5zcGFjaW5ncy5zcDEyfTtcbiAgICBtYXJnaW46IDA7XG4gIGBcbiksIE5hID0gJC5kaXYoXG4gICh7IHRoZW1lOiBlLCBoZWlnaHQ6IHQgfSkgPT4gbzFgXG4gICAgaGVpZ2h0OiAke3R9cHg7XG4gICAgdHJhbnNpdGlvbjogJHtlLnRyYW5zaXRpb25zLmJhc2V9O1xuICAgIG92ZXJmbG93OiBoaWRkZW47XG4gIGBcbiksIEE4ID0gJC5saShcbiAgKHsgdGhlbWU6IGUsICRpc0V4cGFuZGVkOiB0LCAkaXNEaXNhYmxlZDogbyB9KSA9PiBvMWBcbiAgICBsaXN0LXN0eWxlLXR5cGU6IG5vbmU7XG4gICAgZm9udC1zaXplOiAke2UudHlwb2dyYXBoeS50MTR9O1xuICAgIGxpbmUtaGVpZ2h0OiAke2UubGluZUhlaWdodC5saDIyfTtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAke2UuY29sb3JzLmJhY2tncm91bmRzLmJnUHJpbWFyeX07XG4gICAgYm9yZGVyLXJhZGl1czogJHtlLmJvcmRlclJhZGl1cy5iYXNlfTtcbiAgICB0cmFuc2l0aW9uOiAke2UudHJhbnNpdGlvbnMuYmFzZX07XG4gICAgYm9yZGVyOiAxcHggc29saWQgJHtlLmNvbG9ycy5ib3JkZXIuYm9yZGVyUHJpbWFyeX07XG5cbiAgICAmOmhvdmVyIHtcbiAgICAgIHRyYW5zaXRpb246ICR7ZS50cmFuc2l0aW9ucy5iYXNlfTtcbiAgICAgIGJvcmRlci1jb2xvcjogJHshdCAmJiAhbyAmJiBlLmNvbG9ycy5ib3JkZXIuYm9yZGVyUHJpbWFyeX07XG4gICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAkeyF0ICYmICFvICYmIGUuY29sb3JzLmJhY2tncm91bmRzLmJnSG92ZXJQcmltYXJ5fTtcbiAgICB9XG5cbiAgICAke3I0fSB7XG4gICAgICAuaWNvbi1zeXN0ZW0ge1xuICAgICAgICBwb2ludGVyLWV2ZW50czogbm9uZTtcbiAgICAgICAgdHJhbnNmb3JtOiByb3RhdGUoOTBkZWcpO1xuICAgICAgICB0cmFuc2l0aW9uOiAke2UudHJhbnNpdGlvbnMuYmFzZX07XG4gICAgICB9XG4gICAgfVxuXG4gICAgJHshdCAmJiBvMWBcbiAgICAgIGJvcmRlci1jb2xvcjogJHtlLmNvbG9ycy5ib3JkZXIuYm9yZGVyUHJpbWFyeX07XG5cbiAgICAgICR7cjR9IHtcbiAgICAgICAgLmljb24tc3lzdGVtIHtcbiAgICAgICAgICB0cmFuc2Zvcm06IHJvdGF0ZSgwZGVnKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICAke05hfSB7XG4gICAgICAgIGhlaWdodDogMDtcbiAgICAgIH1cbiAgICBgfVxuXG4gICAgJHtvICYmIG8xYFxuICAgICAgYmFja2dyb3VuZC1jb2xvcjogJHtlLmNvbG9ycy5iYWNrZ3JvdW5kcy5iZ0Rpc2FibGVkUHJpbWFyeX07XG4gICAgICBib3JkZXItY29sb3I6ICR7ZS5jb2xvcnMuYm9yZGVyLmJvcmRlckRpc2FibGVkT25iZ307XG5cbiAgICAgICR7RWF9IHtcbiAgICAgICAgY3Vyc29yOiBkZWZhdWx0O1xuICAgICAgfVxuXG4gICAgICAke2thfSwgLmljb24tc3lzdGVtIHtcbiAgICAgICAgY29sb3I6ICR7ZS5jb2xvcnMudGV4dEljb24udGV4dERpc2FibGVkT25iZ307XG4gICAgICAgIHVzZXItc2VsZWN0OiBub25lO1xuICAgICAgfVxuICAgIGB9XG4gIGBcbik7XG4kLmRpdmBcbiAgd2lkdGg6IDUyMHB4O1xuYDtcbmZ1bmN0aW9uIFVfKGUpIHtcbiAgY29uc3QgW3QsIG9dID0gVDEoMCksIFtuLCByXSA9IFQxKDApLCBpID0gbjAoW10pLCB7IGRhdGE6IGEsIGlzTXVsdGk6IHMsIG9uQ2xpY2s6IGwsIGlzRXhwYW5kOiBwIH0gPSBlLCBkID0gXzEoXG4gICAgKEEpID0+IHtcbiAgICAgIGNvbnN0IHogPSBBICYmIEEub2Zmc2V0SGVpZ2h0O1xuICAgICAgeiAmJiBvKHopO1xuICAgIH0sXG4gICAgW29dXG4gICksIGIgPSBfMShcbiAgICAoQSkgPT4ge1xuICAgICAgaS5jdXJyZW50ICYmIGkuY3VycmVudFtBXSAmJiBkKGkuY3VycmVudFtBXSksIHIobiAhPT0gQSB8fCBuID09PSAtMSA/IEEgOiAtMSk7XG4gICAgfSxcbiAgICBbciwgbiwgaSwgZF1cbiAgKSwgTSA9IF8xKFxuICAgIChBKSA9PiB7XG4gICAgICBpLmN1cnJlbnQgJiYgaS5jdXJyZW50W0FdICYmIGQoaS5jdXJyZW50W0FdKSwgcihBKTtcbiAgICB9LFxuICAgIFtyLCBuLCBpLCBkXVxuICApLCB1ID0gXzEoKCkgPT4ge1xuICAgIGlmIChzKVxuICAgICAgcmV0dXJuIGEgPT0gbnVsbCA/IHZvaWQgMCA6IGEubWFwKFxuICAgICAgICAoe1xuICAgICAgICAgIGljb25MZWZ0OiBBLFxuICAgICAgICAgIHRpdGxlOiB6LFxuICAgICAgICAgIGhlbHBlclRleHQ6IGYsXG4gICAgICAgICAgYWxpZ25IZWxwZXJUZXh0OiBPLFxuICAgICAgICAgIGNvbnRlbnQ6IGgsXG4gICAgICAgICAgaXNEaXNhYmxlZDogZyxcbiAgICAgICAgICBoaWRlRXhwYW5kZWRIZWxwZXJUZXh0OiB2XG4gICAgICAgIH0sIEwpID0+IC8qIEBfX1BVUkVfXyAqLyBlMShcbiAgICAgICAgICBBOCxcbiAgICAgICAgICB7XG4gICAgICAgICAgICAkaXNFeHBhbmRlZDogbiA9PT0gTCxcbiAgICAgICAgICAgICRpc0Rpc2FibGVkOiBnLFxuICAgICAgICAgICAgY2hpbGRyZW46IFtcbiAgICAgICAgICAgICAgLyogQF9fUFVSRV9fICovIGUxKEVhLCB7IG9uQ2xpY2s6ICgpID0+ICFnICYmIGIoTCksIGNoaWxkcmVuOiBbXG4gICAgICAgICAgICAgICAgQSAmJiAvKiBAX19QVVJFX18gKi8gYyhaMSwgeyBuYW1lOiBBLCBzaXplOiBcInh4eHNcIiB9KSxcbiAgICAgICAgICAgICAgICAvKiBAX19QVVJFX18gKi8gYyhkOCwgeyBjaGlsZHJlbjogLyogQF9fUFVSRV9fICovIGUxKFxuICAgICAgICAgICAgICAgICAgYjgsXG4gICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICRpc0FsaWduOiBPID8/ICExLFxuICAgICAgICAgICAgICAgICAgICBjaGlsZHJlbjogW1xuICAgICAgICAgICAgICAgICAgICAgIC8qIEBfX1BVUkVfXyAqLyBjKGthLCB7IHRpdGxlOiB6LCBjaGlsZHJlbjogeiB9KSxcbiAgICAgICAgICAgICAgICAgICAgICB2ICYmIGYgJiYgbiAhPSBMICYmIC8qIEBfX1BVUkVfXyAqLyBjKHRuLCB7IGNoaWxkcmVuOiBmIH0pLFxuICAgICAgICAgICAgICAgICAgICAgIGYgJiYgKHYgPT0gbnVsbCB8fCAhdikgJiYgLyogQF9fUFVSRV9fICovIGModG4sIHsgY2hpbGRyZW46IGYgfSlcbiAgICAgICAgICAgICAgICAgICAgXVxuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICkgfSksXG4gICAgICAgICAgICAgICAgLyogQF9fUFVSRV9fICovIGMocjQsIHsgY2hpbGRyZW46IC8qIEBfX1BVUkVfXyAqLyBjKFoxLCB7IG5hbWU6IFwiQ2hldnJvblJpZ2h0XCIsIHNpemU6IFwieHh4c1wiIH0pIH0pXG4gICAgICAgICAgICAgIF0gfSksXG4gICAgICAgICAgICAgICFnICYmIC8qIEBfX1BVUkVfXyAqLyBjKE5hLCB7IGhlaWdodDogdCwgY2hpbGRyZW46IC8qIEBfX1BVUkVfXyAqLyBjKE04LCB7IHJlZjogKHkpID0+IGkuY3VycmVudFtMXSA9IHksIGNoaWxkcmVuOiBoIH0pIH0pXG4gICAgICAgICAgICBdXG4gICAgICAgICAgfSxcbiAgICAgICAgICBMXG4gICAgICAgIClcbiAgICAgICk7XG4gICAgaWYgKHMpXG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB7XG4gICAgICBsZXQgQSA9IFthXTtcbiAgICAgIHJldHVybiBBID09IG51bGwgPyB2b2lkIDAgOiBBLm1hcChcbiAgICAgICAgKHtcbiAgICAgICAgICBpY29uTGVmdDogeixcbiAgICAgICAgICB0aXRsZTogZixcbiAgICAgICAgICBoZWxwZXJUZXh0OiBPLFxuICAgICAgICAgIGFsaWduSGVscGVyVGV4dDogaCxcbiAgICAgICAgICBjb250ZW50OiBnLFxuICAgICAgICAgIGlzRGlzYWJsZWQ6IHYsXG4gICAgICAgICAgaGlkZUV4cGFuZGVkSGVscGVyVGV4dDogTFxuICAgICAgICB9LCB5KSA9PiAvKiBAX19QVVJFX18gKi8gZTEoXG4gICAgICAgICAgQTgsXG4gICAgICAgICAge1xuICAgICAgICAgICAgJGlzRXhwYW5kZWQ6ICEhcCxcbiAgICAgICAgICAgICRpc0Rpc2FibGVkOiB2LFxuICAgICAgICAgICAgY2hpbGRyZW46IFtcbiAgICAgICAgICAgICAgLyogQF9fUFVSRV9fICovIGUxKEVhLCB7IG9uQ2xpY2s6ICgpID0+ICF2ICYmIGwgJiYgbCgpLCBjaGlsZHJlbjogW1xuICAgICAgICAgICAgICAgIHogJiYgLyogQF9fUFVSRV9fICovIGMoWjEsIHsgbmFtZTogeiwgc2l6ZTogXCJ4eHhzXCIgfSksXG4gICAgICAgICAgICAgICAgLyogQF9fUFVSRV9fICovIGMoZDgsIHsgY2hpbGRyZW46IC8qIEBfX1BVUkVfXyAqLyBlMShcbiAgICAgICAgICAgICAgICAgIGI4LFxuICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAkaXNBbGlnbjogaCA/PyAhMSxcbiAgICAgICAgICAgICAgICAgICAgY2hpbGRyZW46IFtcbiAgICAgICAgICAgICAgICAgICAgICAvKiBAX19QVVJFX18gKi8gYyhrYSwgeyB0aXRsZTogZiwgY2hpbGRyZW46IGYgfSksXG4gICAgICAgICAgICAgICAgICAgICAgTCAmJiBPICYmIG4gIT0geSAmJiAvKiBAX19QVVJFX18gKi8gYyh0biwgeyBjaGlsZHJlbjogTyB9KSxcbiAgICAgICAgICAgICAgICAgICAgICBPICYmIChMID09IG51bGwgfHwgIUwpICYmIC8qIEBfX1BVUkVfXyAqLyBjKHRuLCB7IGNoaWxkcmVuOiBPIH0pXG4gICAgICAgICAgICAgICAgICAgIF1cbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICApIH0pLFxuICAgICAgICAgICAgICAgIC8qIEBfX1BVUkVfXyAqLyBjKHI0LCB7IGNoaWxkcmVuOiAvKiBAX19QVVJFX18gKi8gYyhaMSwgeyBuYW1lOiBcIkNoZXZyb25SaWdodFwiLCBzaXplOiBcInh4eHNcIiB9KSB9KVxuICAgICAgICAgICAgICBdIH0pLFxuICAgICAgICAgICAgICAhdiAmJiAvKiBAX19QVVJFX18gKi8gYyhOYSwgeyBoZWlnaHQ6IHQsIGNoaWxkcmVuOiAvKiBAX19QVVJFX18gKi8gYyhNOCwgeyByZWY6IChCKSA9PiBpLmN1cnJlbnRbeV0gPSBCLCBjaGlsZHJlbjogZyB9KSB9KVxuICAgICAgICAgICAgXVxuICAgICAgICAgIH0sXG4gICAgICAgICAgeVxuICAgICAgICApXG4gICAgICApO1xuICAgIH1cbiAgfSwgW1xuICAgIGEsXG4gICAgbixcbiAgICBpLFxuICAgIHQsXG4gICAgYixcbiAgICBNLFxuICAgIHAsXG4gICAgc1xuICBdKTtcbiAgcmV0dXJuIFAxKCgpID0+IHtcbiAgICBpLmN1cnJlbnQgJiYgaS5jdXJyZW50WzBdICYmIGQoaS5jdXJyZW50WzBdKTtcbiAgfSwgW2ksIGRdKSwgLyogQF9fUFVSRV9fICovIGModmYsIHsgY2hpbGRyZW46IHUoKSB9KTtcbn1cbmNvbnN0IFY1ID0gJC5pbnB1dChcbiAgKHsgdGhlbWU6IGUsIGlzRXJyb3I6IHQsIGlzUmVhZE9ubHk6IG8sIHJlcXVpcmVkOiBuLCAkaGFzVmFsdWU6IHIsIHR5cGU6IGkgfSkgPT4ge1xuICAgIGNvbnN0IHtcbiAgICAgIGNvbG9yczogYSxcbiAgICAgIGJvcmRlclJhZGl1czogcyxcbiAgICAgIHR5cG9ncmFwaHk6IGwsXG4gICAgICB0cmFuc2l0aW9uczogcCxcbiAgICAgIGZvbnRGYW1pbHk6IGQsXG4gICAgICBmb250V2VpZ2h0OiBiLFxuICAgICAgc3BhY2luZ3M6IE0sXG4gICAgICBHTE9CQUxfSVRFTV9IRUlHSFRfQ09OREVOU0VEOiB1XG4gICAgfSA9IGU7XG4gICAgcmV0dXJuIG8xYFxuICAgICAgd2hpdGUtc3BhY2U6IG5vd3JhcDtcbiAgICAgIG92ZXJmbG93OiBoaWRkZW47XG4gICAgICB0ZXh0LW92ZXJmbG93OiBlbGxpcHNpcztcbiAgICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgICAgd2lkdGg6IDEwMCU7XG4gICAgICBoZWlnaHQ6ICR7dX07XG4gICAgICBib3JkZXI6IDFweCBzb2xpZCAke3QgPyBhLnRleHRJY29uLnRleHRFcnJvciA6IFwidHJhbnNwYXJlbnRcIn07XG4gICAgICBib3JkZXItcmFkaXVzOiAke3MuYmFzZX07XG4gICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAke2EuZmllbGQuZmllbGRCZ0RlZmF1bHR9O1xuICAgICAgZm9udC1mYW1pbHk6ICR7ZC5iYXNlfTtcbiAgICAgIGZvbnQtc2l6ZTogJHtsLnQxMn07XG4gICAgICBmb250LXdlaWdodDogJHtiLmxpZ2h0fTtcbiAgICAgIGNvbG9yOiAke3QgPyBhLnRleHRJY29uLnRleHRFcnJvciA6IGEudGV4dEljb24udGV4dFByaW1hcnl9O1xuICAgICAgcGFkZGluZzogMCAke2kgPT0gXCJwYXNzd29yZFwiID8gXCI2MXB4XCIgOiBcIjI4cHhcIn0gMCAke00uc3A4fTtcbiAgICAgIHRyYW5zaXRpb246ICR7cC5iYXNlfTtcbiAgICAgIG91dGxpbmU6IG5vbmU7XG4gICAgICBib3gtc2l6aW5nOiBib3JkZXItYm94O1xuICAgICAgYm9yZGVyLWxlZnQ6IDJweCBzb2xpZFxuICAgICAgICAke24gJiYgIXQgPyBhLmJvcmRlci5ib3JkZXJTZWNvbmRhcnkgOiBuICYmIHQgPyBhLmJvcmRlci5ib3JkZXJFcnJvciA6IFwibm9uZVwifTtcblxuICAgICAgLyogQ2xlYXIgSWNvbiAqL1xuICAgICAgcG9zaXRpb246IHJlbGF0aXZlO1xuXG4gICAgICAmOmFmdGVyIHtcbiAgICAgICAgY29udGVudDogJ1xcdTAwZDcnO1xuICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgICAgIHJpZ2h0OiAxMHB4O1xuICAgICAgICB0b3A6IDUwJTtcbiAgICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKC01MCUpO1xuICAgICAgICBmb250LXNpemU6IDE2cHg7XG4gICAgICAgIGhlaWdodDogNDBweDtcbiAgICAgICAgd2lkdGg6IDQwcHg7XG4gICAgICAgIGN1cnNvcjogcG9pbnRlcjtcbiAgICAgICAgY29sb3I6ICR7YS5ncmV5fTtcbiAgICAgICAgb3BhY2l0eTogJHtyID8gMSA6IDB9O1xuICAgICAgICBwb2ludGVyLWV2ZW50czogJHtyID8gXCJhdXRvXCIgOiBcIm5vbmVcIn07XG4gICAgICAgIHRyYW5zaXRpb246IG9wYWNpdHkgMC4ycyBlYXNlLWluLW91dDtcbiAgICAgIH1cblxuICAgICAgJHtvICYmIG8xYFxuICAgICAgICBib3JkZXI6IDFweCBzb2xpZCAke2EuYm9yZGVyLmJvcmRlclRlcnRpYXJ5fTtcbiAgICAgICAgcG9pbnRlci1ldmVudHM6IG5vbmU7XG4gICAgICAgIGJhY2tncm91bmQtY29sb3I6ICR7YS5iYWNrZ3JvdW5kcy5iZ1ByaW1hcnl9ICFpbXBvcnRhbnQ7XG4gICAgICAgIGNvbG9yOiAke2EuZ3JleX07XG4gICAgICBgfVxuXG4gICAgICAmOmhvdmVyOm5vdCg6ZGlzYWJsZWQpOm5vdCg6Zm9jdXMpIHtcbiAgICAgICAgLyogYm9yZGVyLWNvbG9yOiAkeyF0ICYmIGEucGlua1N3YW59OyAqL1xuICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAke2EuZmllbGQuZmllbGRCZ0hvdmVyfTtcbiAgICAgIH1cblxuICAgICAgJHshdCAmJiBvMWBcbiAgICAgICAgJjpmb2N1cyB7XG4gICAgICAgICAgYm9yZGVyLWNvbG9yOiAke2EuYm9yZGVyLmJvcmRlclNlY29uZGFyeX07XG4gICAgICAgICAgY29sb3I6ICR7YS50ZXh0SWNvbi50ZXh0SGlnaGVtcGhhc2lzfTtcbiAgICAgICAgICAmOmhvdmVyIHtcbiAgICAgICAgICAgIC8qIGJhY2tncm91bmQtY29sb3I6ICR7YS5maWVsZC5maWVsZEJnSG92ZXJ9OyAqL1xuICAgICAgICAgICAgYm9yZGVyOiAxcHggc29saWRcbiAgICAgICAgICAgICAgJHt0ID8gYS5ib3JkZXIuYm9yZGVyRXJyb3IgOiBhLmZpZWxkLmZpZWxkQm9yZGVyQWN0aXZlfTtcbiAgICAgICAgICAgIGJvcmRlci1sZWZ0OiAycHggc29saWRcbiAgICAgICAgICAgICAgJHtuICYmICF0ID8gYS5maWVsZC5maWVsZEJvcmRlckFjdGl2ZSA6IG4gJiYgdCA/IGEuYm9yZGVyLmJvcmRlckVycm9yIDogXCJub25lXCJ9O1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgYH1cblxuICAgICAgJjpkaXNhYmxlZCB7XG4gICAgICAgIGJvcmRlci1jb2xvcjogdHJhbnNwYXJlbnQ7XG4gICAgICAgIC8vIG5ldyBkaXNhYmxlZCBjb2xvclxuICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAke2EuYmFja2dyb3VuZHMuYmdEaXNhYmxlZFByaW1hcnl9O1xuICAgICAgICBjb2xvcjogJHthLnRleHRJY29uLnRleHREaXNhYmxlZE9uYmd9O1xuICAgICAgICAvL1xuXG4gICAgICAgIGJvcmRlci1sZWZ0OiAycHggc29saWRcbiAgICAgICAgICAke24gPyBhLmJvcmRlci5ib3JkZXJSZWFkb25seSA6IFwidHJhbnNwYXJlbnRcIn07XG4gICAgICAgIGZvbnQtd2VpZ2h0OiAke2IubGlnaHR9O1xuXG4gICAgICAgICYsXG4gICAgICAgICY6OnBsYWNlaG9sZGVyIHtcbiAgICAgICAgICBjb2xvcjogJHthLnRleHRJY29uLnRleHREaXNhYmxlZE9uYmd9O1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgICY6OnBsYWNlaG9sZGVyIHtcbiAgICAgICAgY29sb3I6ICR7YS5maWVsZC5maWVsZFRleHRQbGFjZWhvbGRlcn07XG4gICAgICAgIGZvbnQtc2l6ZTogJHtsLnQxMn07XG4gICAgICAgIGZvbnQtd2VpZ2h0OiAke2IucmVndWxhcn07XG4gICAgICB9XG5cbiAgICAgICY6YWN0aXZlIHtcbiAgICAgICAgYm9yZGVyOiAxcHggc29saWRcbiAgICAgICAgICAke3QgPyBhLmJvcmRlci5ib3JkZXJFcnJvciA6IGEuZmllbGQuZmllbGRCb3JkZXJBY3RpdmV9O1xuICAgICAgICBib3JkZXItbGVmdDogMnB4IHNvbGlkXG4gICAgICAgICAgJHtuICYmICF0ID8gYS5iYWNrZ3JvdW5kcy5iZ1JlYWRPbmx5IDogbiAmJiB0ID8gYS5ib3JkZXIuYm9yZGVyRXJyb3IgOiBcIm5vbmVcIn07XG4gICAgICB9XG4gICAgICAmOjotd2Via2l0LWNvbnRhY3RzLWF1dG8tZmlsbC1idXR0b24sXG4gICAgICAmOjotd2Via2l0LWNyZWRlbnRpYWxzLWF1dG8tZmlsbC1idXR0b24ge1xuICAgICAgICBkaXNwbGF5OiBub25lO1xuICAgICAgICB2aXNpYmlsaXR5OiBoaWRkZW47XG4gICAgICAgIHBvaW50ZXItZXZlbnRzOiBub25lO1xuICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgICAgIHJpZ2h0OiAwO1xuICAgICAgfVxuICAgICAgJiB7XG4gICAgICAgIC13ZWJraXQtYXBwZWFyYW5jZTogbm9uZTtcbiAgICAgICAgLW1vei1hcHBlYXJhbmNlOiBub25lO1xuICAgICAgICBhcHBlYXJhbmNlOiBub25lO1xuICAgICAgfVxuICAgICAgJjo6LW1zLXJldmVhbCxcbiAgICAgICY6Oi1tcy1jbGVhciB7XG4gICAgICAgIGRpc3BsYXk6IG5vbmU7XG4gICAgICB9XG5cbiAgICAgICR7ciAmJiBvMWBcbiAgICAgICAgYm9yZGVyLWNvbG9yOiAke2EuZmllbGQuZmllbGRCb3JkZXJBY3RpdmV9O1xuICAgICAgYH1cbiAgICBgO1xuICB9XG4pLCBxZiA9ICQoVjUpYGAsIGZsID0gJC5kaXYoXG4gICh7IHRoZW1lOiBlLCBpc0Vycm9yOiB0LCB0eXBlOiBvIH0pID0+IHtcbiAgICBjb25zdCB7IGNvbG9yczogbiB9ID0gZTtcbiAgICByZXR1cm4gbzFgXG4gICAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgICB0b3A6IDZweDtcbiAgICAgIHJpZ2h0OiAke28gPT0gXCJwYXNzd29yZFwiID8gMjggOiA4fXB4O1xuICAgICAgY3Vyc29yOiBwb2ludGVyO1xuICAgICAgYmFja2dyb3VuZDogdHJhbnNwYXJlbnQ7XG4gICAgICB6LWluZGV4OiAyO1xuICAgICAgcG9pbnRlci1ldmVudHM6ICR7dCA/IFwibm9uZVwiIDogXCJpbml0aWFsXCJ9O1xuICAgICAgbWFyZ2luOiA0cHggMDtcbiAgICAgICY6aG92ZXIge1xuICAgICAgICAuaWNvbi1zeXN0ZW0ge1xuICAgICAgICAgIGNvbG9yOiAke24uYmFja2dyb3VuZHMuYmdIb3ZlclNlY29uZGFyeX07XG4gICAgICAgICAgdHJhbnNpdGlvbjogMC4zcyBhbGwgZWFzZS1pbi1vdXQ7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIC5pY29uLXN5c3RlbSBzdmcge1xuICAgICAgICB3aWR0aDogMTJweDtcbiAgICAgICAgaGVpZ2h0OiAxMnB4O1xuICAgICAgfVxuICAgIGA7XG4gIH1cbiksIHlmID0gJC5kaXYoXG4gICh7IGlzRXJyb3I6IGUsIGlzRGlzYWJsZWQ6IHQgfSkgPT4gbzFgXG4gICAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgICB0b3A6IDZweDtcbiAgICAgIHJpZ2h0OiAxMHB4O1xuICAgICAgY3Vyc29yOiAke3QgPyBcImRlZmF1bHRcIiA6IFwicG9pbnRlclwifTtcbiAgICAgIGJhY2tncm91bmQ6IHRyYW5zcGFyZW50O1xuICAgICAgei1pbmRleDogMjtcbiAgICAgIHBvaW50ZXItZXZlbnRzOiAke2UgPyBcIm5vbmVcIiA6IFwiaW5pdGlhbFwifTtcbiAgICAgIG1hcmdpbjogNHB4IDA7XG4gICAgICAuaWNvbi1zeXN0ZW0gc3ZnIHtcbiAgICAgICAgd2lkdGg6IDEycHg7XG4gICAgICAgIGhlaWdodDogMTJweDtcbiAgICAgIH1cbiAgICBgXG4pLCB3ZiA9ICQuZGl2YFxuICBwb3NpdGlvbjogcmVsYXRpdmU7XG5gO1xuZnVuY3Rpb24geGYoZSwgdCkge1xuICBjb25zdCBbbywgbl0gPSBUMShcInBhc3N3b3JkXCIpLCByID0gKGEpID0+IHtcbiAgICBhIHx8IG4obyA9PT0gXCJ0ZXh0XCIgPyBcInBhc3N3b3JkXCIgOiBcInRleHRcIik7XG4gIH0sIGkgPSBlLnZhbHVlICE9PSBcIlwiICYmIC8vIHByb3BzLmhhc1ZhbHVlICYmXG4gICFlLmRpc2FibGVkICYmICFlLmlzUmVhZE9ubHk7XG4gIHJldHVybiAvKiBAX19QVVJFX18gKi8gZTEod2YsIHsgY2xhc3NOYW1lOiBcImlucHV0LWNvbnRhaW5lclwiLCBjaGlsZHJlbjogW1xuICAgIC8qIEBfX1BVUkVfXyAqLyBjKFxuICAgICAgcWYsXG4gICAgICB7XG4gICAgICAgIHJlZjogdCxcbiAgICAgICAgLi4uZSxcbiAgICAgICAgaWQ6IGUuJGlucHV0SWQsXG4gICAgICAgIHR5cGU6IChlID09IG51bGwgPyB2b2lkIDAgOiBlLnR5cGUpID09PSBcInBhc3N3b3JkXCIgPyBvIDogZSA9PSBudWxsID8gdm9pZCAwIDogZS50eXBlLFxuICAgICAgICAkaXNFcnJvcjogZS5pc0Vycm9yLFxuICAgICAgICAkaXNSZWFkT25seTogZS5pc1JlYWRPbmx5XG4gICAgICB9XG4gICAgKSxcbiAgICBpICYmICFlLmhpZGVDbGVhckJ1dHRvbiAmJiAvKiBAX19QVVJFX18gKi8gYyhcbiAgICAgIGZsLFxuICAgICAge1xuICAgICAgICBvbkNsaWNrOiBlLmhhbmRsZUNsZWFyRm4sXG4gICAgICAgICRpc0Vycm9yOiBlLmlzRXJyb3IsXG4gICAgICAgIHR5cGU6IGUgPT0gbnVsbCA/IHZvaWQgMCA6IGUudHlwZSxcbiAgICAgICAgY2xhc3NOYW1lOiBcImlucHV0LWNsZWFyLWJ0blwiLFxuICAgICAgICBjaGlsZHJlbjogLyogQF9fUFVSRV9fICovIGMoXG4gICAgICAgICAgWjEsXG4gICAgICAgICAge1xuICAgICAgICAgICAgbmFtZTogZS5pc0Vycm9yID8gXCJBbGVydEZpbGxlZFwiIDogXCJDbG9zZVwiLFxuICAgICAgICAgICAgc2l6ZTogXCJ4eHNcIixcbiAgICAgICAgICAgIGNvbG9yOiBlLmlzRXJyb3IgPyBcIiNENzM3M0ZcIiA6IFwiI0E2QTZBQlwiXG4gICAgICAgICAgfVxuICAgICAgICApXG4gICAgICB9XG4gICAgKSxcbiAgICAoZSA9PSBudWxsID8gdm9pZCAwIDogZS50eXBlKSA9PT0gXCJwYXNzd29yZFwiICYmIC8qIEBfX1BVUkVfXyAqLyBjKFxuICAgICAgeWYsXG4gICAgICB7XG4gICAgICAgIG9uQ2xpY2s6ICgpID0+IHIoZSA9PSBudWxsID8gdm9pZCAwIDogZS5kaXNhYmxlZCksXG4gICAgICAgIGlzRGlzYWJsZWQ6IGUgPT0gbnVsbCA/IHZvaWQgMCA6IGUuZGlzYWJsZWQsXG4gICAgICAgIGNoaWxkcmVuOiAvKiBAX19QVVJFX18gKi8gYyhcbiAgICAgICAgICBaMSxcbiAgICAgICAgICB7XG4gICAgICAgICAgICBuYW1lOiBvID09PSBcInRleHRcIiA/IFwiVmlld09mZlwiIDogXCJWaWV3XCIsXG4gICAgICAgICAgICBzaXplOiBcInh4c1wiLFxuICAgICAgICAgICAgY29sb3I6IFwiIzc5Nzk4MFwiXG4gICAgICAgICAgfVxuICAgICAgICApXG4gICAgICB9XG4gICAgKVxuICBdIH0pO1xufVxuY29uc3QgZ2wgPSBCMCh4ZiksIFdmID0gJC5kaXYoXG4gICh7IHRoZW1lOiB7IGNvbG9yczogZSwgc3BhY2luZ3M6IHQgfSwgaXNFcnJvcjogbyB9KSA9PiBvMWBcbiAgICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gICAgY29sb3I6ICR7ZS5ncmV5fTtcblxuICAgIC5pY29uLXN5c3RlbSB7XG4gICAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgICB0b3A6IDUwJTtcbiAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlKDAsIC01MCUpO1xuICAgICAgei1pbmRleDogMTtcbiAgICAgIGNvbG9yOiAke2UucGxhY2Vob2xlckdyZXl9OyBcbiAgICAgICAgXG4gICAgICAmW2RhdGEtcG9zaXRpb249J2xlZnQnXSB7XG4gICAgICAgIGNvbG9yOiAke28gJiYgZS5lcnJvcn07XG4gICAgICAgIGxlZnQ6ICR7dC5zcDEyfTtcbiAgICAgIH1cblxuICAgICAgJltkYXRhLXBvc2l0aW9uPSdyaWdodCddIHtcbiAgICAgICAgcmlnaHQ6ICR7dC5zcDh9O1xuICAgICAgfVxuICAgIH1cblxuICAgIC5pY29uLWZsYWcge1xuICAgICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgICAgdG9wOiA1MCU7XG4gICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZSgwLCAtNTAlKTtcbiAgICAgIHotaW5kZXg6IDE7XG5cbiAgICAgIGltZyB7XG4gICAgICAgIHdpZHRoOiAke3Quc3AxNn07XG4gICAgICAgIGhlaWdodDogJHt0LnNwMTZ9O1xuICAgICAgfVxuICAgICAgJltkYXRhLXBvc2l0aW9uPSdsZWZ0J10ge1xuICAgICAgICBjb2xvcjogJHtvICYmIGUuZXJyb3J9O1xuICAgICAgICBsZWZ0OiAke3Quc3A4fTtcbiAgICAgIH1cblxuICAgICAgJltkYXRhLXBvc2l0aW9uPSdyaWdodCddIHtcbiAgICAgICAgcmlnaHQ6ICR7dC5zcDh9O1xuICAgICAgfVxuICAgIH1cblxuICAgIC5pbnB1dC1jbGVhci1idG4ge1xuICAgICAgcmlnaHQ6IDQwcHg7XG4gICAgICB0b3A6IDEycHg7XG4gICAgfVxuICBgXG4pLCBSZiA9ICQoZ2wpKFxuICAoeyBpY29uTGVmdDogZSwgaWNvblJpZ2h0OiB0LCB0aGVtZTogeyBjb2xvcnM6IG8sIHNwYWNpbmdzOiBuIH0gfSkgPT4gbzFgXG4gICAgcGFkZGluZy1sZWZ0OiAke2UgPyBuLnNwNDAgOiBuLnNwMTZ9O1xuICAgIHBhZGRpbmctcmlnaHQ6ICR7dCA/IG4uc3A0MCA6IG4uc3AxNn07XG5cbiAgICAmOmZvY3VzIH4gJHtuNH0ge1xuICAgICAgY29sb3I6ICR7by5ibGFja307XG4gICAgfVxuXG4gICAgJjpkaXNhYmxlZCB+ICR7bjR9IHtcbiAgICAgIGNvbG9yOiAke28ucGlua1N3YW59O1xuICAgIH1cbiAgYFxuKSwgbjQgPSAkLmRpdihcbiAgKHsgb25DbGljazogZSwgaXNEaXNhYmxlZDogdCB9KSA9PiBvMWBcbiAgICAke2UgJiYgKHQgPyBvMWBcbiAgICAgICAgICBwb2ludGVyLWV2ZW50czogbm9uZTtcbiAgICAgICAgYCA6IG8xYFxuICAgICAgICAgIGN1cnNvcjogcG9pbnRlcjtcbiAgICAgICAgYCl9XG4gIGBcbiksIENsID0gJC5kaXYoXG4gICh7IHNpemU6IGUgfSkgPT4gbzFgXG4gICAgd2lkdGg6ICR7ZX07XG5cbiAgICA+IHN2ZyB7XG4gICAgICB3aWR0aDogJHtlfTtcbiAgICAgIGhlaWdodDogYXV0bztcbiAgICB9XG4gIGBcbiksIG1sID0gJC5kaXYoXG4gICh7IHRoZW1lOiB7IHNwYWNpbmdzOiBlIH0sIGhpZGVDbGFzc05hbWU6IHQgfSkgPT4gbzFgXG4gICAgJHt0ID09ICExICYmIG8xYFxuICAgICAgbWFyZ2luOiAke2Uuc3AxNn0gJHtlLnNwMzJ9O1xuICAgIGB9XG4gICAgdGV4dC1hbGlnbjogY2VudGVyO1xuICAgIHZlcnRpY2FsLWFsaWduOiB0b3A7XG4gIGBcbiksIEJmID0gJC5zcGFuYGAsIFNmID0gJC5pbWcoXG4gICh7IHRoZW1lOiB7IHNwYWNpbmdzOiBlLCBpdGVtU2l6ZTogdCB9LCBoaWRlQ2xhc3NOYW1lOiBvIH0pID0+IG8xYFxuICAgICR7byA9PSAhMSAmJiBvMWBcbiAgICAgIG1hcmdpbjogMCBhdXRvICR7ZS5zcDE2fTtcbiAgICBgfVxuXG4gICAgZGlzcGxheTogYmxvY2s7XG4gICAgd2lkdGg6ICR7dC5zbX07XG4gICAgaGVpZ2h0OiAke3Quc219O1xuICBgXG4pO1xuJC5kaXYoXG4gICh7IHRoZW1lOiB7IHNwYWNpbmdzOiBlIH0gfSkgPT4gbzFgXG4gICAgbWFyZ2luOiAke2Uuc3AxNn0gJHtlLnNwMzJ9O1xuICAgIGRpc3BsYXk6IGdyaWQ7XG4gICAgZ3JpZC10ZW1wbGF0ZS1jb2x1bW5zOiByZXBlYXQoOCwgMWZyKTtcblxuICAgICR7bWx9e1xuICAgICAgZGlzcGxheTogZmxleDtcbiAgICAgIG1hcmdpbjogMTZweCAzMnB4O1xuICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbiAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gICAgICBqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWJldHdlZW47XG4gICAgICBwYWRkaW5nOiAxMHB4O1xuICAgIH1cbiAgYFxuKTtcbnZhciBMMSA9IC8qIEBfX1BVUkVfXyAqLyAoKGUpID0+IChlLkFCS0hBWklBID0gXCJhYlwiLCBlLkFGR0hBTklTVEFOID0gXCJhZlwiLCBlLkFMQkFOSUEgPSBcImFsYlwiLCBlLkFMR0VSSUEgPSBcImFsZ1wiLCBlLkFORE9SUkEgPSBcImFuZFwiLCBlLkFOR09MQSA9IFwiYW5nXCIsIGUuQU5USUdVQUJBUkJVREEgPSBcImFuYlwiLCBlLkFSR0VOVElOQSA9IFwiYXJnXCIsIGUuQVJNRU5JQSA9IFwiYXJtXCIsIGUuQVVTVFJBTElBID0gXCJhdXNcIiwgZS5BVVNUUklBID0gXCJhc1wiLCBlLkFaRVJCQUlKQU4gPSBcImF6XCIsIGUuQkFIQU1BUyA9IFwiYmFtXCIsIGUuQkFIUkFJTiA9IFwiYmFoXCIsIGUuQkFOR0xBREVTSCA9IFwiYmFuXCIsIGUuQkFSQkFET1MgPSBcImJhclwiLCBlLkJFTEFSVVMgPSBcImJlclwiLCBlLkJFTEdJVU0gPSBcImJlbFwiLCBlLkJFTElaRSA9IFwiYmV6XCIsIGUuQkVOSU4gPSBcImJlblwiLCBlLkJIVVRBTiA9IFwiYmh1XCIsIGUuQk9MSVZJQSA9IFwiYm9sXCIsIGUuQk9TTklBSEVSWkVHT1ZJTkEgPSBcImJvc1wiLCBlLkJPVFNXQU5BID0gXCJib3RcIiwgZS5CUkFaSUwgPSBcImJyYVwiLCBlLkJSVU5FSSA9IFwiYnJ1XCIsIGUuQlVMR0FSSUEgPSBcImJ1bFwiLCBlLkJVUktJTkFGQVNPID0gXCJidXJcIiwgZS5CVVJVTkRJID0gXCJidWRcIiwgZS5DQU1CT0RJQSA9IFwiY2FkXCIsIGUuQ0FNRVJPT04gPSBcImNhbVwiLCBlLkNBTkFEQSA9IFwiY2FcIiwgZS5DQVBFVkVSREUgPSBcImN2XCIsIGUuQ0VOVFJBTF9BRlJJQ0FOX1JFUFVCTElDID0gXCJjYXJcIiwgZS5DSEFEID0gXCJjaFwiLCBlLkNISUxFID0gXCJjaGVcIiwgZS5DSElOQSA9IFwiY2hpXCIsIGUuQ09MT01CSUEgPSBcImNvbFwiLCBlLkNPTU9ST1MgPSBcImNvbVwiLCBlLkNPTkdPID0gXCJjb25cIiwgZS5DT09LSVNMQU5EUyA9IFwiY2lcIiwgZS5DT1NUQVJJQ0EgPSBcImNyXCIsIGUuQ1JPQVRJQSA9IFwiY3JvXCIsIGUuQ1VCQSA9IFwiY3VcIiwgZS5DWVBSVVMgPSBcImN5XCIsIGUuQ1pFQ0hfUkVQVUJMSUMgPSBcImN6XCIsIGUuREVNT0NSQVRJQ19SRVBVQkxJQ19DT05HTyA9IFwiZHJjXCIsIGUuREVOTUFSSyA9IFwiZGVuXCIsIGUuREpJQk9VVEkgPSBcImRqXCIsIGUuRE9NSU5JQ0EgPSBcImRvbVwiLCBlLkRPTUlOSUNBTl9SRVBVQkxJQyA9IFwiZHJcIiwgZS5FQVNUVElNT1IgPSBcImV0XCIsIGUuRUNVQURPUiA9IFwiZWNcIiwgZS5FR1lQVCA9IFwiZWdcIiwgZS5FTFNBTFZBRE9SID0gXCJlc1wiLCBlLkVRVUlUT1JJQUxfR1VJTkVBID0gXCJlcWdcIiwgZS5FUklUUkVBID0gXCJlcmlcIiwgZS5FU1RPTklBID0gXCJlc3RcIiwgZS5FVEhJT1BJQSA9IFwiZXRoXCIsIGUuRVUgPSBcImV1XCIsIGUuRl9TX01JQ1JPTkVTSUEgPSBcImZzXCIsIGUuRklKSSA9IFwiZmlcIiwgZS5GSU5MQU5EID0gXCJmZFwiLCBlLkZSQU5DRSA9IFwiZnJcIiwgZS5HQUJPTiA9IFwiZ2FiXCIsIGUuR0FNQklBID0gXCJnYW1cIiwgZS5HRU9SR0lBID0gXCJnZW9cIiwgZS5HRVJNQU5ZID0gXCJnZXJcIiwgZS5HSEFOQSA9IFwiZ2hcIiwgZS5HUkVFQ0UgPSBcImdyXCIsIGUuR1JFTkFEQSA9IFwiZ3JhXCIsIGUuR1VBVEVNQUxBID0gXCJndVwiLCBlLkdVSU5FQUJJU1NBVSA9IFwiZ2JcIiwgZS5HVUlORUEgPSBcImd1aVwiLCBlLkdVWUFOQSA9IFwiZ3V5XCIsIGUuSEFJVEkgPSBcImhhaVwiLCBlLkhPTkRVUkFTID0gXCJob25cIiwgZS5IT05HX0tPTkcgPSBcImhrXCIsIGUuSFVOR0FSWSA9IFwiaHVcIiwgZS5JQ0VMQU5EID0gXCJpbFwiLCBlLklORElBID0gXCJpbmRcIiwgZS5JTkRPTkVTSUEgPSBcImluYVwiLCBlLklSQU4gPSBcImlyblwiLCBlLklSQVEgPSBcImlycVwiLCBlLklSRUxBTkQgPSBcImlyZVwiLCBlLklTUkFFTCA9IFwiaXNyXCIsIGUuSVRBTFkgPSBcIml0XCIsIGUuSVZPUllfQ09BU1QgPSBcImljXCIsIGUuSkFNQUlDQSA9IFwiamFtXCIsIGUuSkFQQU4gPSBcImphcFwiLCBlLkpPUkRBTiA9IFwiam9yXCIsIGUuS0VOWUEgPSBcImtlblwiLCBlLktJUklCQVRJID0gXCJraVwiLCBlLktPU09WTyA9IFwia29cIiwgZS5LWkFLSFNUQU4gPSBcImt6XCIsIGUuS1VXQUlUID0gXCJrdVwiLCBlLktZUkdZWlNUQU4gPSBcImt5XCIsIGUuTEFPUyA9IFwibGFvXCIsIGUuTEFUVklBID0gXCJsYXRcIiwgZS5MRUJBTk9OID0gXCJsZWJcIiwgZS5MRVNPVEhPID0gXCJsZXNcIiwgZS5MSUJFUklBID0gXCJsaWJcIiwgZS5MSUJJQSA9IFwibGlcIiwgZS5MSUVDSFRFTlNURUlOID0gXCJsaW5cIiwgZS5MSVRIVUFOSUEgPSBcImxpdFwiLCBlLkxVWEVNQk9VUkcgPSBcImx1eFwiLCBlLk1BQ0FVID0gXCJtYVwiLCBlLk1BQ0VET05JQSA9IFwibWFlXCIsIGUuTUFEQUdBU0NBUiA9IFwibWdcIiwgZS5NQUxBV0kgPSBcIm1hd1wiLCBlLk1BTEFZU0lBID0gXCJtYWxcIiwgZS5NQUxESVZFUyA9IFwibXZcIiwgZS5NQUxJID0gXCJtaVwiLCBlLk1BTFRBID0gXCJtdFwiLCBlLk1BUlNIQUxMX0lTTEFORFMgPSBcIm1pc1wiLCBlLk1BVVJJVEFOSUEgPSBcIm11XCIsIGUuTUFVUklUSVVTID0gXCJtYXVcIiwgZS5NRVhJQ08gPSBcIm14XCIsIGUuTU9MRE9WQSA9IFwibW9cIiwgZS5NT05BQ08gPSBcIm1vblwiLCBlLk1PTkdPTElBID0gXCJtZ2xcIiwgZS5NT05URU5FR1JPID0gXCJtb2dcIiwgZS5NT1JPQ0NPID0gXCJtb3JcIiwgZS5NT1pBTUJJUVVFID0gXCJtelwiLCBlLk1ZQU5NQVIgPSBcIm15XCIsIGUuTkFHT1JOT0tBUkFCQUtKID0gXCJua1wiLCBlLk5BTUlCSUEgPSBcIm5tXCIsIGUuTkFVUlUgPSBcIm5hXCIsIGUuTkVQQUwgPSBcIm5wXCIsIGUuTkVUSEVSTEFORFMgPSBcIm5sXCIsIGUuTkVXX1pFQUxBTkQgPSBcIm56XCIsIGUuTklDQVJBR1VBID0gXCJuaWNcIiwgZS5OSUdFUiA9IFwibmlnXCIsIGUuTklHRVJJQSA9IFwibmdhXCIsIGUuTklVRSA9IFwibmlcIiwgZS5OT1JUSF9LT1JFQSA9IFwibmtvXCIsIGUuTk9SVEhFUk5fQ1lQUlVTID0gXCJuY1wiLCBlLk5PUldBWSA9IFwibnlcIiwgZS5PUk1BTiA9IFwib3JcIiwgZS5QQUtJU1RBTiA9IFwicGtcIiwgZS5QQUxBVSA9IFwicGFcIiwgZS5QQUxFU1RJTkUgPSBcInBhbFwiLCBlLlBBUEFfTkVXX0dVSU5FQSA9IFwicG5nXCIsIGUuUEFSQUdVQVkgPSBcInBhclwiLCBlLlBFUlUgPSBcInBlXCIsIGUuUEhJTExJUFBJTkVTID0gXCJwaFwiLCBlLlBPTEFORCA9IFwicGxcIiwgZS5QT1JUVUdBTCA9IFwicG9yXCIsIGUuUFVFUlRPX1JJQ0EgPSBcInByXCIsIGUuUUFUQVIgPSBcInF0XCIsIGUuUkVQVUJMSUNfT0ZfQ0hJTkEgPSBcInJjXCIsIGUuUk9NQU5JQSA9IFwicm9cIiwgZS5SVVNTSUEgPSBcInJ1XCIsIGUuUldBTkRBID0gXCJyd1wiLCBlLlNBSFJBV0lfQVJBQl9ERU1PQ1JBVElDX1JFUFVCTElDID0gXCJzYVwiLCBlLlNBSU5UX0tJVFRTX0FORF9ORVZJUyA9IFwic2tcIiwgZS5TQUlOVF9MVUNJQSA9IFwic2xcIiwgZS5TQU1PQSA9IFwic2FtXCIsIGUuU0FOX01BUklOTyA9IFwic21cIiwgZS5TQU9fVE9NRV9BTkRfUFJJTkNJUEUgPSBcInN0cFwiLCBlLlNBVURJX0FSQUJJQSA9IFwic2F1XCIsIGUuU0VORUdBTCA9IFwic2VuXCIsIGUuU0VSQklBID0gXCJzZXJcIiwgZS5TRVlDSEVMTEVTID0gXCJzeVwiLCBlLlNJRVJSQV9MRU9ORSA9IFwic2xlXCIsIGUuU0lOR0FQT1JFID0gXCJzZ3BcIiwgZS5TTE9WQUtJQSA9IFwic2xvXCIsIGUuU0xPVkVOSUEgPSBcIlNMVlwiLCBlLlNPTE9NT05fSVNMQU5EUyA9IFwiU0lcIiwgZS5TT01BTElBID0gXCJTT01cIiwgZS5TT01BTElMQU5EID0gXCJTTURcIiwgZS5TT1VUSF9BRlJJQ0EgPSBcIlNBRlwiLCBlLlNPVVRIX0tPUkVBID0gXCJTS09cIiwgZS5TT1VUSF9PU1NFVElBID0gXCJTT1wiLCBlLlNPVVRIX1NVREFOID0gXCJTU1wiLCBlLlNQQUlOID0gXCJzcFwiLCBlLlNSSV9MQU5LQSA9IFwic2xhXCIsIGUuU1RfVklOQ0VOVF9BTkRfVEhFX0dSRU5BRElORVMgPSBcInN2XCIsIGUuU1VEQU4gPSBcInN1ZFwiLCBlLlNVUklOQU1FID0gXCJzdVwiLCBlLlNXQVpJTEFORCA9IFwic3dhXCIsIGUuU1dFREVOID0gXCJzd2RcIiwgZS5TV0lUWkVSTEFORCA9IFwic3dcIiwgZS5TWVJJQSA9IFwic3lyXCIsIGUuVEFKSUtJU1RBTiA9IFwidGFqXCIsIGUuVEFOWkFOSUEgPSBcInRhXCIsIGUuVEhBSUxBTkQgPSBcInRoXCIsIGUuVE9HTyA9IFwidG9nXCIsIGUuVE9OR0EgPSBcInRvXCIsIGUuVFJBTlNOSVNUUklBID0gXCJ0clwiLCBlLlRSSU5JREFEX1RPQkFHTyA9IFwidHRcIiwgZS5UVU5JU0lBID0gXCJ0dW5cIiwgZS5UVVJLRVkgPSBcInR1clwiLCBlLlRVUktNRU5JU1RBTiA9IFwidGtcIiwgZS5UVVZBTFUgPSBcInR1XCIsIGUuVV9TX1ZJUkdJTl9JU0xBTkRTID0gXCJ2aVwiLCBlLlVHQU5EQSA9IFwidWdcIiwgZS5VS1JBSU5FID0gXCJ1a3JcIiwgZS5VTklURURfQVJBQl9FTUlSQVRFUyA9IFwiYWVcIiwgZS5VTklURURfS0lOR0RPTSA9IFwidWtcIiwgZS5VWkJFS0lTVEFOID0gXCJ1elwiLCBlLlZBVElDQU5fQ0lUWSA9IFwidmNcIiwgZS5WRU5FWlVFTEEgPSBcInZuXCIsIGUuVklFVE5BTSA9IFwidnRcIiwgZS5ZRU1FTiA9IFwieW1cIiwgZS5aQU1CSUEgPSBcInphXCIsIGUuQlJJVElTSF9WSVJHSU5fSVNMQU5EUyA9IFwiYnZcIiwgZS5DQVlNQU5fSVNMQU5EUyA9IFwiY2F5XCIsIGUuQ1VSQUNBTyA9IFwiY3VyXCIsIGUuR1VFUk5TRVkgPSBcImd1ZVwiLCBlLkpFUlNFWSA9IFwiamVcIiwgZS5aSU1CQUJXRSA9IFwiem1cIiwgZS5VU0EgPSBcInVzYVwiLCBlLlJFU1RSSUNURUQgPSBcInJlc1wiLCBlKSkoTDEgfHwge30pO1xuY29uc3QgRWYgPSBcImRhdGE6aW1hZ2UvcG5nO2Jhc2U2NCxpVkJPUncwS0dnb0FBQUFOU1VoRVVnQUFBQmdBQUFBWUNBWUFBQURnZHozNEFBQUFDWEJJV1hNQUFBc1RBQUFMRXdFQW1wd1lBQUFBQVhOU1IwSUFyczRjNlFBQUFBUm5RVTFCQUFDeGp3djhZUVVBQUFRNVNVUkJWSGdCcFZadlRGdFZGUCs5dmxkc2h5MWxzRmhEZEdWakJEZitPSTNNYldUT1JMT3NndnBCc3hEakh6NHFIMVkvR0kxK3NJdngzd2N6UDdpWnFBazRSUmYvSkRxWkcwWURNeE9kWnJKQkZraEJpaUIvUnFrdEtlMUsyL2V1OTl5K20zWkszZGhPYzNMdk8vZWQ4N3ZuZDg4N3Q4RC9DR1BNeGZWbHJyMWNneXduRWRQbTQrckJhb1djekFCWEt4MkZnSlFWZ3Uvbmc1K3JpNTRIUnVieDBmRUEvcGlNNHNKNEZFZENYYWh6YTFCcjYxRGs5VUxiMFNSZG8xd1BLSXJ5ZGtFQW9zTU1qbE5uWi9EV2tRSGN0YmtVZmIrSDBMaTVIRXhSc0cvTkRLdktoQmhMeEtIUHpqSjJrNXM1OXZzMHE5VXF3L2c1eUlIL0FKZzdGK2dIUHo2SEQ3dEgwTHBuSXdiSEZqbElPWWJHb29qRVVuamh5UzJvV2UrUVBqQU1BK2wwR25hN0hRNkhRNFo3Vm1haVNNNkpEYUxsbGZkL3cyQWdCS3RteGFXMGdUdHJ5bkQ2ZkFnTm05WWlIRjFHKzFRMzZyUW85K0YrRW9TUHFaRmgzTkRjQXR0enowdTZ0bktRQ2MxRUpHcGM1d05oREF4ZlJEaG1vTmltWUZ2ZE9ueDM1aUx1YTNTamYzQUJpYVFPdldvVG1FcitMSTliQTZyYmpjUm9BT3BFRUZaUEpaMWZCOWQ3TlhQM1Q5RjczWDBCZkhONkJ1MlAzb2JBWkJ6SGZweEdjMU9GR0J1M2xDRTRFMGRxanhmcDZ0TDhjeE0wa2VxcEZHS3FpclhacGQxVTVwVEJ3L0pRL1I4TTRabEhhbkR5bHpsVTMxcUNPMnBLOGRrUFUyaHJya1JYejU5SWNjcTBsMTZFWFFzTGNva21NZkxCV0U3Qk9qY0huUnN6aDkrVjFlVWpnSWRvMXZQekZKN3dic0RoTDBleGE2c2J5enhZNzlsNXRON3Z3YUV2Um5GM2JSa1NsM1JrRnNyQWluSU1NZkhqRWsvQW9ta3dPRUI2ZkZ3QzNFTUF0OU5zT0JqQjk3L09vcTJsQ2gzZFFWVGY0dVRWVTRiM3ZockQ0M3M5NkR3K0RuNW9TTDdxUTdLMkhQOHE3eHhOdWk1czl1eVNSNkhQa0diMSt6Nkg1K1ppOUp5WngvYjZkUmlkaW1IKzcyVTh1S3NDSi9wbjBjUnRZOU14ZE9nbjBXUU5aZm1SYWlaRTFhUWJIS3pFaWVLdW84SXVxd2diS2h4aUo5dnJ5dUc2c1VpVVp5eWVSckZkd3paK3dHdnNLdXFyWEhCTXFyd205ZHoybGR5Z2NCVEtFazVuYnBtYUdLV3l1TGdvREJhTFJid2tYbHlGME9aSWlTS0s0Y3lDUkNtRENRS3dkUjhETy9vcFZBcU9GWnJVbFFCTXBVTzJlQjhBbm00bjh6a0NPTVYxdDdXeUVwbnBhVmdVWERPQVlVNjBoZ1pwL3Bvb29xOHVRazlMUzB1aUVpUk5xd0l3SzRuRW1UdURTbzBIaXZMRlBzckNIbDVBK28zWG9JTE9BS3NTWGp3OEE0YWkxOStVcHM3OFh0VEdkVUJkNzNFcEc2dGdmTklscUNLNUVvN2sza0xVdEQ0R2kwdTBFWEUzWE9aUDF4OGZEdEk4bVV5S0ZpeHBLa1FYazk4QUgraytzTmxzY3VueWRwM240RWUyczRweTB3KzlrOEZmVXdXekVPRjNOa0Z0YnRGVTN1Uk1vVnZOTHg5V3VqSjlKb2k0TWxuL1Q4Q0piNEVMUTJDVGsxbUhraEtBZXMxZUw1UWRPNlhyaWxjbUNxUk9sMzRudTNycFpkZng3OEpuQm9qa0JReWFOcjlaNWdYbEg5RU1keHJOUWdqOUFBQUFBRWxGVGtTdVFtQ0NcIiwga2YgPSBcImRhdGE6aW1hZ2UvcG5nO2Jhc2U2NCxpVkJPUncwS0dnb0FBQUFOU1VoRVVnQUFBQmdBQUFBWUNBWUFBQURnZHozNEFBQUFDWEJJV1hNQUFBc1RBQUFMRXdFQW1wd1lBQUFBQVhOU1IwSUFyczRjNlFBQUFBUm5RVTFCQUFDeGp3djhZUVVBQUFPT1NVUkJWSGdCcFZaTGJJeFJGUDd1UDYrYUVSMmlFZ3RNVjBpSVZvaE4wUlhpVlJaSUVPS3hrUkFWZ28yWXJoQVNGbllXdWhJaVNFT0xib3FVeENQcEpKNjEwUEZZb0tJem5ackhQelAvZGM2ZGU2ZERwMHpUazV5NS96My9QZDkzejdublAzZUFmNGlVTWtoNmtyU0x0RThPeTRDMk5aT0dNRlpoSncxUXFWd2VqVWlVQVQ5SVE1ZzB5UFBjNDI3WWR6dlVLT054ckZ2dndEVmpKdXFtejBmVDNMVm9yRzB3cmpIU0ZpSEVoVkVKT0IwYUhKbitmdGpIamdCdjNzQ3FxWUdZSElUbEQrQm9nMFJVRE9HWC9Rc2Zma2FWMzYydFZ4U2hsakNSdEl3ZzBEdFg3T216WjVDNWVRT2UybHFJUUFCV0pnTnk0a1VJcjU2Q2J4TzBvd1NTZGhKdnY3L0gvaVY3c1dmeFRnTjN5RVFpVE01cDZPRzB4Q2tOY3NkMlZIazlzRGhGUzVmQjgrd3BCSlBRUEhYbUhKeXBVOWxIcWVNNGFzelErd0J0cHJxNjJxU3Jua2lpbG1iazFBUnQyMFlpa1lDN3ZnNmd0RmlwRkh5ZDkyRmxzN0NTU1FpYU13bEhZMW1XVXBmTHBVYVB4Nk44bVVpZjMyVVZnZDU5SDA5K3ROOUdkdUVpVENCQVA2WEovZnFWQXVRb1hKRWVXRU1KUEQ5MUxKK1lFdUJzbWRTU09oU0pSR3dvSm4xZW43Vmh3VnF6OGNsdSt0bkFUL2tuM1JBOVBYQXRYZ0tyOXgzY0w1NFZka3ZxNmJ5bjhzMlRvdzlQdUw0RUNnY2doTTR5dlV0bk0vZ2Mrd0lRVWRla2RsTmR6VXpRcE1xeG93TlYxNjVDNXZPb29ySVVxV1JKaVFrWWhwU2RROUluU2l1UHJBSURxVmhoR2UyOTdkMGRRN0NjQ2VyNHlRNkZITGw1aStQSzVaQmRzUkk1cnhlVzI0MWhwQUxQcGpxSnVGZENEcjlCTnA4bHpVSFM3aVVkK3F5Sk05bk16aUUrQTdXMm4rcSs5UENFR1BFTi9sTk1SZVVwQXl3MVZDUW9CS1NUb0FISENsd3E3UHUzUDRjUkpRMWRqRnpDeC9obkNFdVVhU0FWQ3VXQ3Eybit0TGs0WEhPQUxiRWlRVHczaU5iWFZ3b3hqWU1BRHBYT3hIM0dFbUc0aC96VU5HY054aVZTSzJQTkxtSzE4U0h6VnpmQXM0NjNuZXFReXVYeXYvaTZkWEQ0NithdE11WmEwNHU2YUdqTTBoYzhPRGhZcktKS1NVcjdVakFZbE5RKzJMR1YvSGVOYUhaSjZqbnBkSHBNcFdvSWZENGYvSDQvbTRyTlRuMUovRUFMdUllZjV3VlhlMitpNWRIcHlnK2JNbk55MlhIc3J0OXVMSHp4UkJYMlh6c0pvOUJaRWZuNkVodXZiME0wL21sNGdmZ1RsS1Z4Vm9NQzU3RUVQRnpPeFpBMGF4SjFaVDc0MkkyMjNuWkV2cjBza2dWOTFRcVFxNlVFdU95VldUN2l3cVhmS2l1WExqbU9meGZOR21DZ0JMQlAyOEs2ekVlVjM0VFZNaGNQNHI2Y0FBQUFBRWxGVGtTdVFtQ0NcIiwgdTggPSBcImRhdGE6aW1hZ2UvcG5nO2Jhc2U2NCxpVkJPUncwS0dnb0FBQUFOU1VoRVVnQUFBQmdBQUFBWUNBWUFBQURnZHozNEFBQUFDWEJJV1hNQUFBc1RBQUFMRXdFQW1wd1lBQUFBQVhOU1IwSUFyczRjNlFBQUFBUm5RVTFCQUFDeGp3djhZUVVBQUFReVNVUkJWSGdCcFZaZmFGdFZHUC9kM0pzL2JaSTI3VHBjcGpiZEJwV1J0bTZSaWxqWlVyUTROMnd0ZWRCSGRZOCtXUGF5QjR0SllBT25JRlZXVUJBN0tJZ2dpSzNvSGxkajlxSjdDQlcxWmJna0cxM1JKaWFoeWMzLzNIM241SjRzVzlMU3NROCt6bmZPUGVmMysvNmNQeGZZUlRSTmM1RDZTYStSUnJYN2t0TEhaa2dIOEtqQ0Z1a0FlNVdGbllpa051RHZVeE1nZGJCK0puUWQveS8vek50S0pzUG5XRno5c0k0TW9YZnlOTHBQakltbGFkS2dKRWx6T3hLd2RPamdXRmxad2Y1UExxTVl2d1B6RS91aE9CeVFiVlkrcjVyTmtXYVJqOTlHVmRKZ0RTOVczZnVHWkIwbVFDUkJnV2xvNHptQ3dTQjhQaDlrb3dMYjBVR1llbm9nRzhpWG5BcW9LbVJKZ3RGdWgzM1lEY3ZnWWZoK1BDTmYrdjJDZ0FxdzJvaU9JbkxlREQ0L1B3K1B4d05EcVF3d2JRNldOVnJETGNqazk5RStONzVZdmN4SHpvL09zc1pQbUQ5UUpERVJBVXVOSXhLSklCQUl3T2wwa3FNcXRId0JrcG9IcU5WVTVuMmVSOEZzaVN2N2xvZGFWZUcwSDhSSE55NGd2QkdDWHI4Rm5pTGQrN2RaWjNwNnV1NGtwU0NYeXhGWWpzRHFvQ1lpTlI5MlFlN3NwUFRZVU5PSjJMYzhFU2l5d3FPN2RLT1JLaS9iNWl5Q04wUlJZN0VZLzVKTUpua0V6R01HSW5mWkNkZ0N5V1NDOFVrblpDcDR4L0Zob0ZLbUtDbUNtb3AwS2NVckd0NE1JWHczSkVobUdNRVVzNWFXbHNRZ3RyYTJlQVExQXJmNUp0Qng2Z1VVWXJjQVdVUHhUZ3pGalRnc3p3K2o0K1FvUlpLRFdza2hVVXBBTXRScjlGTjBXVUNkWkVQSG1NWHlMNlJZTEhJU3FjTUNHQTFRUTcraDQ5a1IyRjgvaGQ3M3pzTGlkaVA1NlplMFJXaTVXVUd5bUVDaG1tOXNndXVidndxb0FVVXZDS0xSS0pxbFhDN0RmR3dRWGQ1WFVQbnJOc3FwTGFTKytSWWFZU3JXYm5TK09BcmJxMTVrMTlaUnJxMDF3S2w4eUpUU0RRSURkaEZEUlViNTdnWmdOY0pnTnFMMzNGa29CM3BSdUxVT3FRS1krZzVBSzFTd0t3WnBqQms5ZEpnZWx1eEtHUGwvMXFEUldUQWRPa0lERmRoZUhrZlhtQmRWcFlERXd0Y28vdm4zZzRzb2duNjdTL1RTRFFLdjE5dENVTXRzb3hyOUYxMm5KMUNLeDVFSWZvYlV4MStobkUrajAvTWNKRTFCYlR2ZnNtNm9iMFNZRVZhRFh4aisxTlFVNXVibVdpWm5GcjlISlp2Q3dZc1hVYm9aZzBaYjB6andGRFkvK0JEcTFUQnRncFlsT0RNd0tjd2xpUjBHTWxLc056NCt6cytEa0ZWelg4TTJ1WjZHNlpranFMR0xMcGxHY2YwbUh5OFJ3Y1RuMi9Ycmc3VGY2a0xrclhXeDdKQkNwelpOSkF6VjYvZjdIeUJvbGhMZHFreDNGU0pZblBoTzlLNDAzMFh2a0taWkhSakpJNHZ1L1huUExJYjM4Znp6dDRFWm5JQXhpUUYyMlFrU2JZL1lIUHo0TENmUUphaGp0anc0QWRSdlZuNnlUVysraXpLbFJVeVNIZ1ltc1hqSDhOL0NPYnprUE5FTUhrQ2JOWUprUmlmaEp6eExUMlZtK1NvS3EzODBhaUIzZDhOR1QyWFg1R3U4MWFYdGs5ays3UHFqZjBYYnUxelRIdVB2WWtZSFNEVUJSdld4Z0w3TmQ1Ujd4K2xxd0U1SlNVRUFBQUFBU1VWT1JLNUNZSUk9XCIsIE5mID0gXCJkYXRhOmltYWdlL3BuZztiYXNlNjQsaVZCT1J3MEtHZ29BQUFBTlNVaEVVZ0FBQUJnQUFBQVlDQVlBQUFEZ2R6MzRBQUFBQ1hCSVdYTUFBQXNUQUFBTEV3RUFtcHdZQUFBQUFYTlNSMElBcnM0YzZRQUFBQVJuUVUxQkFBQ3hqd3Y4WVFVQUFBUTdTVVJCVkhnQnBWWk5hRnhWRlA3dSswc3lzVTFTaUpWQ1Mxd0pUV29qRVlwTnFRWjFrWUFhQzdxMW9vaXVHc0cyQ3hjbWlJc2tJdGxxMWJZcUZFSFJXb3lMTGxvaHFRc0ZhNXZVZ0lHa2s1WEZaUHFUek15YjkzUDl6cDMzcHEvTnBGUTg0Y3g5OStkODN6M25ubk52Z0h1STFycVYraDcxSEhWQjM1WkNNalpFN2NCL0ZURktBTzVYam05RXBPcUFIMkl6VEcyVmZqZzloY3BQazZiVk4yNllOZGFPSGJDN2RzRWJHSUN6ZDE5cWVwMDZvcFNhMkpCQXdwR0FHOER5eEVmUVMwdXcydHVoMmxxaGNzM0dSSyt0VXRjUTU2L1NCbWorNGt2WW5idFNtR0dTakt3alNIWnUyTXZqby9BLy9RUnV6K093WEJlS0tEU0NRVE1tR3RyOEFuR3hoSER1Q3J4WFhrWGo0YU1wM051cEp5cU5PWnZmSlN3Q0hueitHUW83ZDJLclplRmFGQ05QYmJRVXVoMGJaYUwrR1VVb2t1d1IyMEliaWEveHUrWFNIM0RmZURNbGtYQTlScExGbE9BNG00UHg3SXhlN2R1djNNNU9uSFk4QkRUY1JwSzVPTWFwWWhuam01dFI0dGpJYWdrSEdqMHo1N01may9TbG9FeFA1dEQwL1EvcHVad25RWjlLZHI4Z0k2czkzVkJMZWJpZFhmamFyMkNGd04vNEFUWnhsKzgyTitHRHRaTHgvNjJtUnB3cSsxZ20rSDdYUVpmam9OOXpFTTdPQUwyOXlIMTNKZzFWbThPZlFmbUtMa3dCQkxjbFN3b0Y1SlNGWlJJNEpKaG5lOUl2WXo0SWpkVzNmZ20vVmtJOHhCRGxHaHF3ekRoWUpRWExKTWMwUW1JbFhnd0p3UXNtYXlZbnpRS0x1N1ZXbG5Hck1ZY0NnUlZCMThJSVAyYXk3V3pTaHJhTlcyR0FiV3hWdVdoc2JYb1ZFU3NoZUZJSXVzMDV6Rnl1N2w0NnZvK1dVaG0rNDZKQWdpSVBXYWVaVkQwejA5b01qUnM2VUJVZml0NkliU3g2WVRyZFM0Y1FtSUlDODEyWnYycHF1VUdBVnBKczVRbEt4aXhFTWJLeWhXUWVNOHVyMkd3dEVuakdqbCtJa29JVUFndVpncEFOcG9YUlRxTi9DTnpQblQzS3RwZFpINUJVVkw0UHVUYjJrR0F4ak5HY2VLWXltb3A0c0NoTTJOd2lidFFtQWthaGp4bnl0T2ZpTDU1QlJNS1hHenl3N0xoampiL3AyY1NtSE01V0FtamNLWEtWSkhLOVJtQXp2ZlNWbWRxaWVSWlRub2Q4aGdDN3VkdDlKSGo5NXBxSjg5Z0RUWkNBSEZrdG1ycm9vSmZQY2lPcEYyQ2FKM0pSQ0g2bVBtWHg0b3FPZlZ3ajJNUGREOXJWQ0Y1bC9OOW5EYmpKM0JMN0Ixa0xCeXpQRkpyT0JFVzhjWWlWeUdrcE5EbmtndlRDRjUrSFlnWllXSC9OL3NKc09zWkRsMUo3amJuL1RJTjd4N3k1bDBTM2I0ZjcyOFYwK0dHbXJwSjc0N3owYk40ajZTVjJkMXlmb0VlMlpBNi83d1pIeHNZNStWVTZkQ0o3RjNVZ3VlemlEOGVnZWVIVjgyS0Y0YmdaVjJOZUR4enZISVYxK0loODFTNjcyNHVxejUrUmFIeFVSdzl1MFhHaStoNHE4N0kyR2h2TnZuQkRxQ2VjR0s0dG1ibWtvNTdkNjRqaWpCcmd3ZWQwUEQyVkJSL09ZdFo3TW9WZFhqWlQ0VnJLbms4bVppOUQ1L05WZ3hiV2pOdzEvUU5RZTN0VDA3cFA1a2FleUtOL1F0Ky9uTlAvNDcrTG9RU2drQUZjU01hR2t6VGZVUDRGRzUrOVF1YUJtbWtBQUFBQVNVVk9SSzVDWUlJPVwiLCBUZiA9IFwiZGF0YTppbWFnZS9wbmc7YmFzZTY0LGlWQk9SdzBLR2dvQUFBQU5TVWhFVWdBQUFCZ0FBQUFZQ0FZQUFBRGdkejM0QUFBQUNYQklXWE1BQUFzVEFBQUxFd0VBbXB3WUFBQUFBWE5TUjBJQXJzNGM2UUFBQUFSblFVMUJBQUN4and2OFlRVUFBQVFFU1VSQlZIZ0JwVmJkYjFObEdQK2RudE91M1RLN2xYVklDc2xBSWRuSTBBdmpjRE9aTTFHVGlWRVRGaS8wZ2lHSkYwWmQ1QS9ZcGlaZStRSEdlRU15RWhNdk5GRXdYZ3hrV2ZSaTVXTjhYRURoYmdQYUFXTzBYYmEycHp2ZE9UelBlOTYzUFcwNkF1RkpucndmUGUvdjkzeTl6MXZnRWVJNFRndnBLT2swNlp4VGtZemNHeUh0d0pNS0g1SUFqeXNUR3hGcGRjQy9vR0dNdElYWE0zZk9ZbkwrRE9JMExsc3IrT3ZWMzJBWUJnS0JBRUtoRUlMQm9EcWFKUjNYTk8xSEw1NVJBejRxd1FYd2tTdS9JTG1hUkxTeERiRm5ZdGhsaEFTb2Jkc29sVXBJcDlQaVhGdGJtME9FYk5BUGhCRW1rbkdGNmF0ak9iNjdkQlNIcGo1RlFEZXdLN0lUcmFGV2FENE5lZHVFeitlRHJ1dkNDN2FlUFZsYVd0S1dsNWNWMUJqbnBzb0RHVDhYL1BKUlROejRGZDNSM2JCUXdwcGRFb0ZVc1dRQ2VVWW9TME5EQTNLNW5KaUh3MkVlUnVtM0UrVEp2UEtBUTlOeUxaMGdnaVBZM05RT2s2d3RrSnAyQVVVYTh6VHltZzZWVlhuRG85L3Z4OHJLQ29yRkltVCtKa1NTcGZWenZIajU5MzRrOHlsMGJlcWtrRUJhcnVHNWV5VU1YalRSZmRQQ0puOHJzSDBIMEQ4QURMd3V2T0Njc0RJNGh5NGFqYW9JdFhLSTN1TlovTzQ1SkhOSlFOZVF0VElJR2tGQnNEOXU0c0JVRGtXL2hqOWZDZUdqVDc0SEdodUJWQXBZV0FDMmJDbDd4TjVZbGlXSU9Hd2tJMnpudXp5YnZIV2FBdXdHTzcyV1FYNjlnTWhpRGdkUDNvZWV5K09yZlRxTzlXbHcydHVCNW1ZZ0ZvTkQ0RjdoVUxHYXBxbTIrcG5nUlo1ZFRWOTNRMEphdE5jRXlRZVQ5NEZDSHY5MDJwaDZmaDM1VWdHNE9Pc20rTnR2VUNzcUwreUZsQTVESmdTM2N3dHVxV2h1dlZpMmhjNUVHczZxZy9NeEF3WHlpUFBobUpURWwxNGdjM1ZnM3p2QTN0NHl1RkpWWFV6Z3F6YWhlZ3hhOU9INk90YTRZS2xjbVZUODl1Q0JhMGdpUWZGTVYzbWdhZFhOZ1FubWVSSU9ORmVUa0Z6ZTRSZmpucm1TNXdRZCtUOE85UFVCQnc4QmtRaHFoU3RKU3JaTTBQdHNqN3ZsVkQ3OG96Y2t4cUdaUERvV0pVblBYbURyVnJvNVgyTWo4UkJjWVlML2VQYld0amVxd0ZrdTdBemc1OEVtNkRadzdLY3MzbzlUa3QyTFJFbWljTTFlcUVzZ1M1VGxKRjgwVG5LR1Yvdi8vUkR4eGZNeTJaVURiOCthR0thNzBIVmJldEcxbXo0ZUFnNThYUDVHWFRpV1NDVnMyelg1NHpRTnI4M2NPNGNoSWxIM29aNGszanpMTWFqYVUzMkpDYmdYeVJBZHA0UVBxeW9hSnMzMmJ1N0JsM3MrZDBQbDFDZW9CZmNLdDNJSkx0NEduZ2dDN25wcTR6QVJITzcrN05Fa05aYXpjdXR1NUJiaXlyakVyTHdIOGlVU0pPekY2Y0cvc2EwcFZpR1M2Z1ZsNWY3VFRLMkRyZmVBbDErMWVrOG1QeGFpZmZNNlRuazVsVG9qV2tseU5ZVlRBeWZFWlZMUHByZm1VZWZKM01oMWZ2U1BPNDh2MDg1VC9Mc1lrUUFaRCtDYzNCdVRaYjZoUEFUdm1FY05DUnAwOFFBQUFBQkpSVTVFcmtKZ2dnPT1cIiwgSWYgPSBcImRhdGE6aW1hZ2UvcG5nO2Jhc2U2NCxpVkJPUncwS0dnb0FBQUFOU1VoRVVnQUFBQmdBQUFBWUNBWUFBQURnZHozNEFBQUFDWEJJV1hNQUFBc1RBQUFMRXdFQW1wd1lBQUFBQVhOU1IwSUFyczRjNlFBQUFBUm5RVTFCQUFDeGp3djhZUVVBQUFRcFNVUkJWSGdCcFZaTmJCdFZFUDcyeDc4eGpaTzBkZUlRMTBHcFdoVlZNWWNVSkFpeHhCVVVRSUp6T01DRkE3NVdBaVdCUTY5SVZkV2pLNUJ5UUVJMEI4U0pwRkdSa1BoTDZoVFJVdElrTFNVMmR2MlRlRGYrM2NmTWV0ZDJVaWNLNnRqamZXOW05dnRtNWoyL1hlQVFFVUw0U2FkSkYwblhSVXR5bGkxR0dzYi9GYjdKQWppcXhBOGlranFBZjBTWEdWSS96MnZsRzZqc3pwdFhZZVROR0ZrSlEzRkc0UFJNUW5WRjdWdlpPU3RKMHVjSEVuQTdMSEFzTFNjeEdweUNJdTRUWUFDUzBnTko4bGx4UlNMVFlOVHUweGhRTTkvQmUvNnNEVE5ESkxQMlJPNlFPVDZMTCtQZGp4Y0kwQW1IK3h4VVJ5OVVSWVlpYTZRNmpTV3krY2czQ3RVNWdyVzNQOERXcFN0TkFsNGJlNkxhUFc4SHYvck5YYnh3NWdTQlZTRkxOZEpHclhhNXd2b1JacnVBcm5PbmtiNzZoZWtidVBnaFg2WUo4enBWc21GWHdLM3hyNjVsalUvanQ5RGYxd1c5WElkTTJYTEdmSlVsalNyU1RlV3hiTnRKb1pmZ0hnZ2dSVlhzM1B3SjF2ckZ6UlpaMlUveDVLMkxDeklrL3NwRVlCQ1laZ0ZycUZWVTVOS0RTRytGVUsvVlRWdlRyKzlDVVZXejM2bFdxNks4emJsRmI1cUx1cExFWmxJREUyUUxWYmpkcXBsdDZwL1RTRDRjUS8rekNmeTljWUZhb3FCU0VzaGxJK2c3OFNPQ29UOGdka3N3eWhVaWs2RDk4RE9LVklWdi9BTER4cGhna2tmek54K2E0S3pwUWdXOTNIR2h3K3ZaQkJZSG9BeEYwSjlaaGhSS0FyL282Qm9WOFBrZVVWVFJiQkh5QmJNQ1hwZkN0OS9iQkJOc2kvQW84VmUyc1pLazVacUJESkdVTkJtM2Yzc0RxQXIwdnVxQVVocUNxaVVoNVZOUW9PUE82aVFLV1FlTVRKYXFLSnNFWmhXTmRXQUpxOWFDWUdOTGF4S3dWSWxFVmxLa3REWEh5UC9sNzRESGdPWUl3RC95TDBwRTRYQStwazJRZ2FnK1l3T2FkeHVGNGg2Q2xrZVMyaWFBMDFYRjhNZ0NVci8yd0N2ZGduemNDODlKRmZxY0E5TDdXZlFjZXdCZnQ5NEd3Uit4NTkvTFZXM3dvTnZuUWlkNXNENkJ1dWh0Z2FnQ25tb1podWltUlg5NVQzNjJPRThOMnNPOGFoR0VKeUlCSk5ZS1R4QVk5UkpTbFNFa2g5K2hyZWlBMktwQkg5ZmgyZXhCYjZDQ1R1SnVIUnNyVExCRUdwMGNIOExscis5aS8va1hlZkVyUEU0RnNaM3JRZkxSUytZdUdUNzdKN3FQSjJpSDNXdkdpYmJmN3RkZnM4M3pUTUNuM3pSWHdMcTBrcllDRzBRdWR4N0JVM24wblZUZzhtekQ2NVBnNzd0TmR1T0p6UGt1TlJTRTk1VXgyM1NkZHBYRXgrd05ubjB5ZGI2WnhYNXhlZW9ZUHJPS3dHRGlRSENXME54bDIzU3QvU3g2anpUUEZaZ2tmQWJicDlrUnBCRXQwRWNIbmF2UmYvUFpzRGVvOGZnelpUYWVFT3JFbk5EVERtRVV5TFY5c0xML3pySG5SZnJTbGZZblhLeHpKa0xNMkJFcjkzS2luSHRPMVBNTkVKdklIck95cjc0VEZmVFBiUWVmT2J6Y1JpVTVPOXFvTGdwRGp3bWpHQlgxN2JBd1dIY2lEUnY1OXIwSXhIQVVzUjc2MThUUlpWRTh4ZHRGekFMSXRRR3VXelp1cWY4d2pQOEFzQTNGVnBJMDNITUFBQUFBU1VWT1JLNUNZSUk9XCIsIERmID0gXCJkYXRhOmltYWdlL3BuZztiYXNlNjQsaVZCT1J3MEtHZ29BQUFBTlNVaEVVZ0FBQUJnQUFBQVlDQVlBQUFEZ2R6MzRBQUFBQ1hCSVdYTUFBQXNUQUFBTEV3RUFtcHdZQUFBQUFYTlNSMElBcnM0YzZRQUFBQVJuUVUxQkFBQ3hqd3Y4WVFVQUFBTzZTVVJCVkhnQnBWWk5hRk5aRlA3dVMxSTc3WUJ4VVRjam1haVZrVW1HY2RvWkdIK3cxWVYvbTNTaG9HNVVFSEVoR0JGMW1WWVJFVVZjRjZ1Q2dodEJvMWdYZ3FsaUZOd2svbEpkMkdoUlhOaW1yVFpwbTd4Y3o3bnYzdlJwRW45UE9ibXZKL2Q4M3ozZlBmZmRBRjh3S2FXZlBFYWVJQitRMDViVnNTaDVFTjlybktRQnZ0WE8xQ0lTVmNCMzA5Qko3dWYvaThrN21McmVxMFk1T3FybVdJRUFQT0cvVUxkdUhieExscG5VRWZJdUljVEptZ1FzaHdaWGdCTW5UMEFPRHNKcWFvS1k1WWRvYUZRcGN2d0QrVGhLcjE1U0R0QjQ3cnowL0JrMldKMUUwbFZCb0ZldTJDZU9IY1hrcVc3NFd2K0Y1Zk5CRUFvbFFhR3BGQW1wUG9GU0xvOWkvMVBVYmRtRytuMEhETndlVTRrd210T1FZbGtZdkhDNkI3NXdXSDBwQ01VUzd0VUlEZS93OFhPSnlBdnBGSHc3ZGhvU2x1c2ZJc2tZZ2pNMGJMVWZQOEw0eWpiNFFpRjRHbitGcFVIVkpIOEpDTm5BRkQzZjkxSlFURmRCVFBiN01hcWtINzljdm1MMnBZOElWZ2k5K2dHT2ZHaGRCREg0aWdqQ3RHcFJKbEFmVFFTMVlRSXlWSUM0VndmRVowQ09PVFV4aVUwa3hTZVBnYVZMMFhEcHFwRnFGbU4wOEpOOTl3NUE0Qjd1a213V1ZqNEhZVHlYQTFxeUVNY2xyUDAwNCs4UmlPWlJXTG5wT1JaMUdJT1Zra2tVR2N1eEtNY2lxbXQ2ZXhXNGgxYytQS1JBRmZBTTZwZ2RROENtWVdBVlNmc3lEM0hZZ3R4T3NjQVl4TGd6VHd5OVUxVXpoazFZMnRwSVRDeFNaWkwrWlVrbUp5bUJBT3JyU1hNQjhaU0VmMFo3OEdBU3lOTStQQ1JSM3VhQk1jcklXVlRCQkVTeDRGVEFmamRwQ0lKTW9BNFVxTitGK3RNa2hZSnkyVVhKUFEzQUcwb1h2TU5UVHVvN0lsaE5oT2w2MVU0bWoraGc2d1BKQkRCbmZjSGN1UVd2RUJWK2NBL3NnZHV3bStkOEd1Ky9BWHY1ZjdDcjVTeVlONjlnY0xtcURGTTF6cHpwTFVwWjRTZDZZRjI5Q2V0aXQvUnU3SEJpSFd1a2QvWnNXQ1hhODJvNXZ3VUNYbDNCQ014TExScU5tcll1K3gveklYK2Y0enkzaENCVDF5QTNSeUF6U2NpVlMxQXgzemhqYVV0d0JiZVlLaEtKNEhOYk9COTRjUnRJWEtDenZ4MFlwaVphM0FvOHAxT1RlWTJhNXNLS20zZStzdmIyOW9yVnJGOEwyZlkvNURsNjd5MXVjU29La25jZmdkeTFwWEwxd1dEUS9Sb1BLaG9qVXlLUnFGbDJOVCswRjNKaDg2ZXhWQ3BWdmlQS0pla0xobThwR1l2RnZvdkU3WnpydXZHQ2J0bWdyei81b3lRdWNOVXpxR2IwUmFlWndhV3lubDhENW4xamFWM1c2Y2FzZG1VeWV3ejZoUGYxOVNFZWp5T2RUaU9UeWFnNWZyOGZCS3k2aFVkdFZhL01XcFh3bnB5VjMyNEorUk8vTHFJYUlPc0NITkF4bHRUL0pZeVBPdm9mTGpTU2R0UUFBQUFBU1VWT1JLNUNZSUk9XCIsIEhmID0gXCJkYXRhOmltYWdlL3BuZztiYXNlNjQsaVZCT1J3MEtHZ29BQUFBTlNVaEVVZ0FBQUJnQUFBQVlDQVlBQUFEZ2R6MzRBQUFBQ1hCSVdYTUFBQXNUQUFBTEV3RUFtcHdZQUFBQUFYTlNSMElBcnM0YzZRQUFBQVJuUVUxQkFBQ3hqd3Y4WVFVQUFBUS9TVVJCVkhnQnBWWmZURnRWR1ArZEM2MENIUlRtSUhIU3RSbHpnSVEvTG9zTGFFQ1htR0N5Z2VISko0M3h4U2RyNGpLakpsQ1RrWXpGWkZuRzRzdXltWmo0b2pJeWdRZkNxRzR6bVphSUsyejRNRnBEUkJlWVZOcDcyV2g3aitjN1BhZnJacnV3K0NXLzNQUG5mci9mK2I3dm5Ic3U4QWpqbkxzRitnV21CU0w4dnEycE1iK0FGNDlyNUtRSXRtcm5DZ214UE9UdmljZUFnSnY2d1dBUW82T2o4aG1MeFdBWWdNZmpSV3RySzNwNmV0RFYxYVZkWXdJQnh0akpnZ0tVRGtVdUNRY0hCeEdOUnRHd3R3YWNWYUwyR1JlY0R1QldKSUVublNaK25sbVVmaU1qSTFKUTJZQVFDZWlPa1dmbENBUUM2T3ZyZzhQaFFHTmpJMTdwcUVMMWRnTVZaU1pxdGxzb2R6RjBIbkNocGFVRmRYVjE2Tzd1bGo1YWdHcnpRQVFxZjc5UVd1akY0ZUZoNmR5NEI3aXpCbXh6QWQxZFFHUUplRUpFVUZNTlhMNEdMSXArMDdQQXRWa2dGQXJCNy9lanY3OWZwNnROUkJMVkF1ZkU0NjF3T0p4cWJtNHVGb0RMNVlLckZEaDJCTGc0QlJ4OWwyTnBtV0hqTHRCY3ovSHhDWWErYmpGL0dyaTl5ckcrdm83NStYbE1UMC9ydWdTRndNdE1yVDVDSXo2ZlQrYjgxWU10T05BR3JLeVJPakQwRVZCYXdrUzRuTHBpUVpuUTMvOFVTTnZBMHpYQWxaK0FpY2xmSlRtSktLdWtHdlRxb2hJNTJZM2Y3bUR5Qnd2MVBndkRBVXV3V0dCMkFyRHBhY0hnSnBqQTBJY1cyaG9zZkRObVlXN2hiMmdlZ2pJL0NmUlFhM1Y4TEx1Ynlwd3JxUE9ZTUUwVG9lc215a3BNc1d3aHhFMEZTK0wyaWlscWxNQWVyNGtkN3RXcy8rTFlkN3JaU1NtaVJMZzNlZy9oZzNzTk9GTi9XTVJ2d0ZGc29NUmh3R0JNNW9UTEhjRmtiblJQdGtSekkya2ptUks1NGpiZVdKekMyZmdsbEZ6Nm5nU2l4VkFIaWkwdEliQThnN0dkKy9GNytVNGswMXdnalNLRENaRk1MWEpQRFJIVGtNMHpJbVM3ekJWOE5uTldiTE1xL1pyWFFJNVYyUGN3RVF6QW5UU3pZMm1iWjhUMFV5RWwralNueWFreE9mVUpudG8wSHppOUpCQ1ZFWlJYeUlHOThUOHhSS3Q0VE9zUGY0WGRpYjhrdWVIeDZPRllzUkx3Rm5WMGdOK1lrNlB2M0pxRXA2TVYvTTIzdDBSZU9uNEJMd2tCSFF4N3JrbFB6ZElobzZQTjAxY3Y4ODNxS3A0V3NBVlN2bHB1M3J6SkU0bkVJMkV1TFBCVWZaMXRLOS9OSGNKZmNDbnoweTZpSXROT1F1cjF3MkEvWHBWNW8xQ1RQaDlQWHJqSStMYnl2Q3NYdm5BZTdJUlRuQjlaY0VKdExSeWhXZjJLVCt4Q1J0K05JUFdLamh6Tm5GUUZSeVRDMk9BeFhpZzF6bE1uSlRseWZJcS8rRkpQbjZkdmtWNkpWOTFTUEgzaU9FK3BOSEdGdTZkUC9TYzExdWRuYkQydjA1TWVPcDU3NDNrZkR0ZXZaMGxFMTBJNjc5N0Y0K0d3blp2M1pGTzlYWUNjNTM2dUh4WVp5TDR5ZDUybjk3VmtoVGJiWDdBVHkzL3dlRHpPay90YTd4UDNIaEpGdlpKTFBwRExtZS9LSkhYNnFNc1R6a1hSTVRFT3pJZnh6L1A3ZVdtbG16bSsvUnBvZjFGY0VxK0J0WGRvMTd4WFpxRklxQ2JuK2RadG12K1B2d3UvSWxqTElZeW9zUUcxelF2YXYzYjlPKy92Y0haT0FBQUFBRWxGVGtTdVFtQ0NcIiwgVmYgPSBcImRhdGE6aW1hZ2UvcG5nO2Jhc2U2NCxpVkJPUncwS0dnb0FBQUFOU1VoRVVnQUFBQmdBQUFBWUNBWUFBQURnZHozNEFBQUFDWEJJV1hNQUFBc1RBQUFMRXdFQW1wd1lBQUFBQVhOU1IwSUFyczRjNlFBQUFBUm5RVTFCQUFDeGp3djhZUVVBQUFOK1NVUkJWSGdCcFZiYlRsTkJGRjF6enVrTkNvVkdFVVVqd1hoTExFcDgwUmlOaWEvRzZLdGdvbDhnZmdIRkwvQVBKR3Jpb3hvL0FJMkp4aGNWOUVGTnVQaEFFQlZvYWFYdHVZMTd6NWxUVHd0RmlEdlptZW1jMld2dHk4eWVBbHVJbExLTGRJeDBrblJPL3BWVnZUWksybytkQ2h0cGdPM0svVlpFWWhQdzJ6VGtTYnY0OTlSM0c2Ky9WZFZZdG4yMXB6ZHQ0bEEyaG5NSGt4anNqWWVtQmRKeEljUzlsZ1NjRGcydUFCOVBsYkgwMjBOM3lrSkhRaUJwR1dwZjFmVlJjU1FXU3k3YjRPNmxyQnpJV2lGV25rakdOeEJvenhYN2cvY2xQUHRjd2ZHZU9DeURRSVhBeG1BbEc2SHErSmhiY1hENWFCSTNoanJDajNmQ1NFU1ljeHJlYzFvZWZDamorWmNLcFNBT3dlQzhKVUxBVThLdEUzQUVQSDc5VmNPMVl5a2lTWWZwR2lLU2VVTXpjbXE2WmxaY1BKcGF4NjcyR0d6ZlFFMnJIUjI5eUZ5RzN3UjJwMk40T0wyT2FVcXRydDk5bmhqYSs1c3FlWk1GOHRwVVdvMkFNUURYbDhlYWgyRHVpUVl5MHd6c0hwS0RXaTd5TWJkb2NwVi96YTNZMkpQeXNiZmRRclpkd2pJNUhSUytrSTNGQ3BMVE1PRXN1VVNjTmdSODE4WkMwVVpmUnAydVVjSG5uZG1LeFNJcWxRb3N5MUxlc05aUEFpV2VjKzJWWnVEN1BtS2RBK1N0RmVRL3FLRmE5endQcnVzaWxVb2hrOG53cHhjY3dTbWU4UWVEaXNvYUFnb1IrTzNaSlZTWDNzRmRmRUxwMklWVTN5VzA3eitEWnVIOWJPODRUcmpVYittQ0tBOE13Mmd3Q0QyMEN6T3dWNy9BWEhrS3YxeEQyYWtpMmIwUFJ0dUJCdkJRUXpzbU1LSWJvbU5VckppRXMvd1d5VVFGdlgyMnFvMTAxemFOb05tZUk1aFhUT1I5aExsQnpNeEpKUHV2bzdSOEZNdkZlWFFjdTBMZUgwWXI0VHBxS2RRSjR2RTRhclZhUzZPMjN0TndrZ2wwSHI0Q3MrTUl0cElJd1FlZXZTUzl1T1luTVBHSkMyM3FHOXdzV2RJTHJWSFZoZmFwbGdLM2hsTFFUZU1aRTNEUEdOdlhHVVBCamVIalQzMTZOcW5GbHFMYWhrQlBtNG05bmZVSW5ob0V4bjNqQmY4YXlTV0NqZW9HeVozaDY5NDBkcjR0WEpxSTlxSmJwSVhCSGd2RHVYaHdOWGVDcnh2ZThJa0VCcnJWQlZWdkEwOFVBVE9GQ3lPMGFmaEVYT1V6YUp2eW4rQzhsMjFHY3ZYSFoxeGpibmh3OGdnNksyWUxQdTYrcW1KcG5XcFMzeWFhQ0NWeXUwMENqMkd3eDR5QzV4R3hhSEpJam1vU2RjT25mM2g0cytCaGR0V24xeTBBVDVPak9RSTgyMmRHZ1RkOU1sdEVyUjc5Q2JsOW1aVC84ZTlpVkFPc1JnRG45RnFlZS81V0dIOEFLSVUwdHpxZkk0WUFBQUFBU1VWT1JLNUNZSUk9XCIsIFBmID0gXCJkYXRhOmltYWdlL3BuZztiYXNlNjQsaVZCT1J3MEtHZ29BQUFBTlNVaEVVZ0FBQUJnQUFBQVlDQVlBQUFEZ2R6MzRBQUFBQ1hCSVdYTUFBQXNUQUFBTEV3RUFtcHdZQUFBQUFYTlNSMElBcnM0YzZRQUFBQVJuUVUxQkFBQ3hqd3Y4WVFVQUFBTkpTVVJCVkhnQnBWWTlURlJCRVA3MkhjY0JkeUtZSUJvVEFzYUdQOFZnQ0lvSllxT2hVQ3RicGREUXFGQVlTNDVLalFraHNUTW9GTWJHd3I5RVl3VWEvNkNCS0JJS0V2NU1qTWJBQVhmODNOMTc2OHl5KzNqbVFPOXd5TEE3ODk1ODMrek03dHNEL2lKU3lnTFNEdEorMGttNUlmUGExMFphaWt5Rmd6UkF1dEs3RlpIWUJQd2FEV0hTQXJhVDc5OGgvdXFsR3VYQ2duckhLaW1CcjZvYTJjM055RHAyM0lSR1NEdUZFTjFiRW5BNU5MZ0NYTzN1Z3B5ZGhWVlVCRkZZQUpFWFZDRXlGaVdOd1o2WnBpQWcrUEJSMGxkZWthVmh3a1RTbVVLZ00xZnNxM2R1WTYzbkh2eTFSMkQ1L1JCU2dvTDRKUjBpR1ZlcHM3eUM1UGdZc2krMElPZjZEUVBYYmxZaVRNMXBHT2F5TUhqaXdYMzRxNnJVUTBFb2x2Qm1JelE4Z2F0QndpYnk1TWd3L0pkYkRRbVg2ekNSVEJtQ1hob3UycU5mRUR2WkNIOWxKWHpCRUN3TnFsK2lpVERMVlhOM0ZXVGJTNHUwa25Ia1BuMXUrakpBQkUxQ1p6L0pubWh0RGNUc0RCRlVVZGJDSllCbkJWSzZSYVcvOVFlT0prbDhIWVZvYUVEZWt4Zm1wVUp1ekRtZS9Sd2N3Y2U1SUdWZWpweDRFZnc1Z2RRdHhtTHB0SFdaREVreWtjQnl5SVk5TW9kRFEyTW9xNnRnZHhzVG5PWFpyYUVFN3BhMFVwb1dBdGwrN01vUHFNYTZsZEg5M2N4bUk3SVV4MHBKbktZT3JneEcwVlduZUJ1Wm9JWm5ueWZtWUNxK2xuRHdheUdPM0lCUE5kaE5XSmc5NUNXUVdGbHprRWphYnZ6YjRSOW12YVZNb0E3VTFQY1lQQzJsQUVlcGp4Z3NLN1ZZbkRtRGMrMDMrckllSDRrbS9pRFF6OFRHTHZGVTM2YTlhRHNTbWNsR1BMZHNpaWM3UTlrcEQ3Y25BcVY3UThhSXVBU05OY1hhbDJtMnFYTHdRS0daam5DSjNwQ2V1SG9taE9yQVkxVnZJYmEzQ3RVVEttZlQ2WnZHOVl3UEdqZDVucTNreEhtSTJDQ1JlTnFSTnZqNnA4UHg3YU9EK3NHNHkrakFDdjV1RExEbDI5T3V6cWZhSWNoTXpLN0sydDlqWEgzOExiSzAwVUlhRWFHanNJcmJ2UWMxYlhBV2poVzU2Z1NydTBINStCOHp1UTVhaGRqZHJqUDZONDk1RHhURHNWbzZOV2JLaFJPbW9VTVpLMk53cGk4QjhXOXVQNFR3RUJyeVlMMUtTSVRxdmVCaFkyeDJaYlpwRW5YQ1pmUVRzUGlhYnFFeFNDWmpweThmWU1BZHA3ekFtMTZaV3l4YlhmcDlNbjNwbC8veDY2Sk5BOHg3QUNlMUw2eTMrWmJ5RythMyt2Zmp1NXBGQUFBQUFFbEZUa1N1UW1DQ1wiLCBGZiA9IFwiZGF0YTppbWFnZS9wbmc7YmFzZTY0LGlWQk9SdzBLR2dvQUFBQU5TVWhFVWdBQUFCZ0FBQUFZQ0FZQUFBRGdkejM0QUFBQUNYQklXWE1BQUFzVEFBQUxFd0VBbXB3WUFBQUFBWE5TUjBJQXJzNGM2UUFBQUFSblFVMUJBQUN4and2OFlRVUFBQVFtU1VSQlZIZ0JwVlp2YkZOVkZQKzlybVZqM1VaeDdkTDljU3dUdHVsMFc5bUF4TmpXQmI4WW5UV0NTaVF4a0F3WEJiV1RLTUV3Nkw1b0RNWVlRNHlKaHZGbFlLSlJaeUtLU05pVWlDUjBLQ3FNT2JPNlpheU9yWCsybHZXOXZ0Zkh2YmZ2ZGlVcnl4cE9jbnZ1UGUvZTMrK2NjOCs5dDhBU29xcXFpYlJEcEowbGJWUmRrS0JtYzVOV2hXeUZMdElBbGlzOWR5SVNNb0MvVHBTSE5CTWQvM2JaRDNPUmdPSnZUMEE0L1NNY2hoZFFZaWxFUTAweFhJOVd3OWxjeHBlR1NPc1dCT0hET3hMUWRHamdHUEJleDRtVFE5aStzUkNORjc2RFlMWGlmRzByZXM5TVlEWWlJVG92WVhSaUZpcVorOVg3anpOQ1RUeUVwSHNSZ2VZNVkvLzF3Z2hPZWYzWVd6WUZ3NkFYZ2NmYTBITk5qOEZyQVFnQ25jc1hxN2daay9IbnlEUTZubmtBWFM5dDRIQ2RQQktCNTV5b1N6UXRzY1B2SVZwWmlaeVdqZENQREFOTjZ6RTRMbUx1cGd5Sy92R1h3MUFTNmdJTGkwSEZ1SDhXUncvYXNhbWhncWZMUmtoOG5LQ0hxQjNLMzM4aDJ1cUFvYjRlT2NZQzZEUVB0RW1NNElueTNZZ2toTFRjcW5ROVZobDFhRytyd3BxS0V0anFMUFJEUHlGb0ZUVHZSNmtsMHR3RVlYeU1FRHdJSFFIakJCeU5La2RGSjZJSkhkSTJMaGtGMFRSVkRwc1ZQMzNTeHIrdTFwT2ZwMmxQa2lSSUhTOGovOEIreUxzNm9ET2JvUXNFSUxWc3doVmZHSE5SbVJFRWowOUFUaWhwNlVtU2lIR1pLSUVVeHlRckVLMjYzTlFWRisyZFBEZUc4OEU4NXZrVnY0VGo4L2RDdURHRi9MZmZSSEdCSHUvK01JT2RuL2tRanNiWnhsS3hONWFnMG1wRU5LWmdPaVNSRUhVc2pYMzlQaDZCa3hJMDBkNlJMNGFZbDlRUURJdlljOWlMN1JNUDRWLzNJVlR2ZXdYZjExM0ZhOC9WUW9vcnBFUmxpSktDcCt6bE1PYmxFSEFSODZLU0tzeWZMMDF5Z2lxS3h3NlU3M3FFa0d1YlIzUmNUdURyL25Gc2Z1Y3FQbWcvQW9naTNqaTZCNHFVakdCeVpoNWI5LzlDd0tiWVhBNWVYVjZJVXZQS0ZBSGRaSmJJdGE3UDRRL0VZRXFJa0EyNW1JbmRmc2hYRlJpZ2w2VkY5clRkWm50UlpOU2pxalFmM3Q0dHpFb2o4Q1VCY2tuWUNmeXY1R1lFQ1VmaVM0QXZ5Q3pabzlWRmVYd1lTaEU0bTB1VG5ob051RnRwV0plNk5uNm5CQU8wdCtQSmRYaTR3WXhYbjYvQkk0MFdtQXBYSUJzcHMrUmo5N00xTFA4dTV4cHU3cU1FN002Z2w5VkhlemVnYzFzdDlyMTRQMEp6RXJLUkJMays3TVF4YS9IS1ZEYUlmRVBLWHFEM1JqOGQxYSsxc0dNZkp1QXRkZmNnRy9HVHF0cDI0QncrN2JKejB6RjZGL0V6djVPMGtGNnZ4K21MMCtnOTVjUEZvWm5sbzJzVjFMWExoc1prL3RuYlFEdU1nREp4dzliTjk2R2x2bVRoanNrQy9HQzdqUnU3TmN4RkQ0NkhLUHJvNEkvaEFMYThkUWIvK2FOTHdqdlhXOUhWM3NSMEdyaUhEekk5bVc2TmhKM3dnVUUvK2diR2NQbWZBSHlURVRiSFZMQUNEZ0xvY2xhbUEyZDhNak1Iblh6MGo2bkxsN1BxWGZ5N2NHc0F3VFRBVWMzbUljMjBGTVl0c1YxS3Ezbnc5a3NBQUFBQVNVVk9SSzVDWUlJPVwiLCBYZiA9IFwiZGF0YTppbWFnZS9wbmc7YmFzZTY0LGlWQk9SdzBLR2dvQUFBQU5TVWhFVWdBQUFCZ0FBQUFZQ0FZQUFBRGdkejM0QUFBQUNYQklXWE1BQUFzVEFBQUxFd0VBbXB3WUFBQUFBWE5TUjBJQXJzNGM2UUFBQUFSblFVMUJBQUN4and2OFlRVUFBQU1HU1VSQlZIZ0JyVmJMUzVSUkZQL2Q3ekUxbXVnRXV0UEd0Uk1adHRJZ2E1ZFEyRjlRYnFKZEV4UVNCSTJMQ0JQQ2RWUmF1TzhGdGRSQVd3VktQbkEzTmk0TDFOTEcraDYzYzY3M2Z0NXdSdFE4TTJmdTgveCs5NXg3N3IwRDdDSlN5Z2JTKzZUanBFVzVMU3U2TDArYXhYNkZqVFRBWG1Xa0dwR29BSDZUaWdKcEE3ZkRxVW44K2ZCZWxYSnRUYzF4V2xyZzVrNGkxZE1Eci9Pc01WMGxIUkJDREZjbDRIQm9jQVc0T2Z3WWNua1pUbU1qUktZQm9xWldtY2lOZGRJTnhLV3ZaQVBVdkJ5VFhsdk9ZQldJWkdBSGdWNjVZdDhjR3NUdnAwL2dkNXlCNC9zUWhFSkdVR2pLUkVLcVh5RCtWVWE0dUlEVTFUNGN2ZE52NEc0WlQ0U0pPUlhUSEJZR0Q1NC9nNS9McVVGQktJNndWeU0wL0JZZjEyTWlEMmFtNFYrL1lVZzRYS2VKWk1rUWpGQnhMWnFieGNhRmMvRGIydURXSG9PalFZVkJFd0t3Nm9rWDFJNSsvaUJQRnBGKy9kYnN5d1FSbkJkNjlVWHVXZTlvaDFndUVVR09WaTBTQWxnZVNKa0VsVDVDMTRDSUJvTDVPWWl1THRTOGVtY21aVHo2NlZXYnVqQ1BpTFBqUkJaeFV4TkFzVGVvUW9YZXpnZHB2b3FFcWFJd2dNeGtFTVFTZnJFSXY3V1ZKK2JaZzNHcWRLOVJDcGJMWlhpZUI5ZDFsU2Fad09IUUcyMUtIZHFrak9NWVVSUWhERU9rMDJuVTE5ZXJNSEVVMnBVSE5PQTRqbElEbEt6WEFqS2xQVzR2aE8yRElEQmRXUTZST2xDOEFoNjBwUkpJTldGd281WmQxckVuMk9WQnhCRFl3Z1JMcXFKRGN4akMrNmhsTlNGSXBWSTRMTEVJWnJqMmtiVDc2UGR2Y0I0K2dNdHU0bUNleEp5dUZQOGpkKzhCZFhYYzlZYlRsRGQ1aFZ2aGxjc1FuNmEyRDlnK1JKMW8xdVptK0o5blRIY3JIVmpCOThZRXQxeTZSOHp4MzN2K2JCT3dlaS9HVE5jbzMwVW1pL3BJVjBWbkZ4eE5zbDl3RnVkMlB3UmRNOUJ2dzcrVHRwNC9KZEhRb0l5YWpzdFlxOXhGZVp6blJvOEc3UmN1WDNrbFVoYVNLWE5mWk5SeGFnZFJiS2tDN3IwazQ2bEpHN3hnWTFaNk1wbWRYeloxd2lWdE91akp4UHdzWkttMFpjRDNERi9KRjN2QVlkVlM4Y21zNWdrLytxTnk3ekl1LytQZlJWNERyRmlBUmQxWDBHbGVWZjRDeDFvNFR5clBSMFlBQUFBQVNVVk9SSzVDWUlJPVwiLCBVZiA9IFwiZGF0YTppbWFnZS9wbmc7YmFzZTY0LGlWQk9SdzBLR2dvQUFBQU5TVWhFVWdBQUFCZ0FBQUFZQ0FZQUFBRGdkejM0QUFBQUNYQklXWE1BQUFzVEFBQUxFd0VBbXB3WUFBQUFBWE5TUjBJQXJzNGM2UUFBQUFSblFVMUJBQUN4and2OFlRVUFBQU80U1VSQlZIZ0JwVlpMU0pSUkZQN3VQNytqVXVrSWFWSXhUUkgwc0tBZ0toUnFrVVZ0S2lxS05sR3JucVJCdEczY1JOQ2ltazIyU2tsY0JFRnRlcE9tSlpuMkFNMjBqYU9qNWdPWm1VYm5QZi9mdWZlLy84eklqRExTMGVOOS9PZWM3OXp2bm51dndBS2k2N3FOOUNacEMrbWduaEt2bktzbGRXQ3h3cDFrZ0Z6bDBYeEFMRXZ3R21xY3BEWSsvdXdPNDkxQVNMU0JzQ1pzVnRsVWJDNjNvbnBESVhZN0NreFhIMmtkWSt6ZXZBQ2NEaG1jQWtid29OMlBFWDhjeTVlcXNCVXFLTFFxd21FMnFpRVkwZUh4eGNnSnFEKzFISnNJVUlxVFFPb3lBR1RtQXQzVjZrZGpWd0RiVmhjZ3o2S1FGWnVUaTA0L3pIQkNrTUIrVDBSeGVzY1MxT3d0TmsydW1TdGhKdWZVZk9lMHVENzQ4Ymg3bGpMS3A3ajhzd21BVkN1REN5aGRFLzJlc1FqTzdreUNjTHEyazc5YmtlYWNHdHV2aWFoK3Z5MkFzaUlyd25GRmFDaEJiWUloSk1aTWFDakdVbk1KaTJoWEZPZkJSYjZkUXhISS9Yc2tjcExaRC9MQlh0Y2ZqUDZGeUI0S3o1eHp6dExJWkFZOXVxQStTUmhvRmJxbW9YODhncDEyRmMxblNzMlBKU3I5T2NwN0EvMFRXTlBUanJYTWd0SkFBZFI4cXhHY3BlSmsxbHh5L3hDUFVqRjRnOUNIRWhqZXZnUDJyZXY0cDFvT2NJVDNIRTMzVWYrOEhpcnhyT1lUL3lVbHFYalYrNEY5MWNEUU1PM1VWNkN6TXkxNytpVkR6ZWRESWh4R2dzQ1VGUmVBcmJjRUtSeGdHKzlwdlQyd0dGc0tSQ0pnMDlOQUFkWDRpWlBBbGF2QXFlUEE1SlN4aWp3cXlmSnlZSHljYk1OZ0lkSjRUUGp5azZKMWZESlRjeWh5UThBOEhrRkpzaUJqVk9PQkFIQ1lHSFRkQmR4dUlCUUU0bkhnNGlYZzZUTmc0eVpnWm9ibVlray9jVkw4L2lTQWF2YUVBY3RDczU4cUxod3hBbk5SeVdYZGVpQWFCUkp4V2E1cE1UQTNCbCtCVy9TS2lwRlYzcndHTGwybWVpZ3h4cUVRVVVZY0h6cEErL0V0dzF5c3dtNDNoejVWQWpnc1ZWWFErM296QVpxYktOTUVjUHNPTU9JQlhyNEF1cnZvdnBqRmZNSXF0cGpkSC93Y09LbHpjN2kvQTNjZW5xVFNaM01PYk00aXo0YW02Ymh4L2duc0d5djU3RFVPd0RmWnkwZkgzcDlHeDlTWFRDSnpCT0M2dW5BVnVnKzNtYk5yRmJvditMM1J5a2ZYdDlUTTJiVEZyMEpINDU1NmM5U1FmaGVkSS9WVmx1MldJRWkvQzNMT252dFcyRGJ6R2ZFMjhJNEE0RWptQkRlNlhuRTFkeEF6T1BtSTVBeXBrekV6SGh3bmpKc1ZQMzE5T1B2eEFqekIwUVhqVjVidW91QTFxQ3pibFI3Y2FRNnlQWm0xRWtTYzhJN0pUcndhZTR0ZWJ4ODhzd1pZa1hVWnFvak9neXYzcHdmTyttUm1YN1h4NkRmb3VVdUwvaC8vWGRUS0FONjBnSU55emluTGZGNzVCMUlGR2o2TjF4MTJBQUFBQUVsRlRrU3VRbUNDXCIsIFlmID0gXCJkYXRhOmltYWdlL3BuZztiYXNlNjQsaVZCT1J3MEtHZ29BQUFBTlNVaEVVZ0FBQUJnQUFBQVlDQVlBQUFEZ2R6MzRBQUFBQ1hCSVdYTUFBQXNUQUFBTEV3RUFtcHdZQUFBQUFYTlNSMElBcnM0YzZRQUFBQVJuUVUxQkFBQ3hqd3Y4WVFVQUFBT3BTVVJCVkhnQnBWYk5ieE5IRlAvTjJwdUVramhyUVp1U1V1SUFhcUZTUWxwVTlkQ0tPQXBWUDlRcVZkVURoeDZJVkZWVkQ2MVJKWHB6SEhxb09NRUJDVzdrRDBCSWxyanhFWE5DQ0FVSUgwSjhDQnVRRUNpTzdaakVrV1B2UHQ3TTd0aExFZ2NqbnZUOFp0KysrZjFtMzd4NVkyQU5JU0tMZFl4MWtqVk5kY2w3dmhockJHOHFjcElIMEt5Y2JFUWtWZ0gvbTAyQzFaTFBGNTh2SXZsa1h0bkNrcTFpSXUwbWRvVmJNZkpoT3dhNzF1bXBCZFp4SWNUUmhnUXlIUjY0QXZ6L1ZoNlBTaFYwdFFVUmJnMWdmZEJRY1FzVkIvTlZCK241Slo0RW5JNTJVNy9Wb3JFU1RESytnc0JidVdJL2RHTVd4KzRWOGNXNzYyQWFEQ3JjTVBJbWFNdVRVS3JhdUpVcjQvZVBPaER2MjZEaER1Z3ZFVHJuYks3SnRCeTZtY1B4KzBYMGg5djRyUWV1dEw0aWd1L0hJVVUwTlZ2Q1h4K0hOSWxNMTZkTWt0RUVKOW5zdjM3dklYYWZmVWI5MnlLaW95VUkwdURRQlA2TXVzQmFpK1VLYmhmS09EKzhDWVB2cVgxSk1jR1E4RmFmbHA3ZTNsNWtGcW9ZK09jd0didS9GcHJBeGZiU1JQb3JDRFVIT2NyZXlDMWljR01MazNUclZZU0QvUE9Ub2t1bGtNbGtsRGQ3N0YveFR2UXliZnRscjlqOGdYZ2xOYlVVK1lVSktuWVZYY1lDSE52R3c3bXZzTFZ6dTN3VGt3UWpjcFJNSm12eE16TXoySERobE1qZFBZVS9ENEorK0habE9mdFRSU1RnT0huWTlpS1lCNGFJc2YrSWZEa0k3MVJTTkJvbGIzRktUZE9rVUNoRWxtWFJINzlaOVBoT3AwTXYrR0FyN2ZScGlLaG9rbDBBVlhLZ3hSbFFLVHVnRDJBYWV0VFQwL01LZ2RaQUlLREl0bTgxYWVLRXFjQmNEYklHV0hrYmk1eWtPVkExRHlwbkpVR2tkc1NEZUkzWW5GT3AyVm11U0FlOG16QWF4YXA2azNYaDJ5UVpuSkdEY0RqY2tHUjRENXpwUzZEUlh4dUQxeGtZTkJqUm5rS05nUGRnUmJ6VkNSdy9DdWZjR1JoYk5xKzEwY3Q0QWdONmVGMmVnd1FQeG1TWkRnME4xYVA2dnFSdi90dUg3azFPYzhEcXZKSEs0MWpmajRoMHFESTlJQWxrMTh6TEowbVF1bnFUeEw2RE1MN2IzL1NLWFFMM3dFWGFCQjU4Lzc3Mjl1cFdNY2ttbXJweUZYdW51SkM3dHRSYlJOTUVqdXBMVThNYnNjc3lwV2VDVzhXbzNyUlIxa0wwODg4UTM3T3pYcVJ2dEhvZ3ZyTmRnNnU3UVE0VWdleDYyaEgvaE52dWp2WDFScllXRTZFV0Y5L1JydVo2TXU1aHJyaHdFbXprcFlQcFFnVS9YeTd3aFdQN3dwWjNJbExOVGE1Y1doOTRBcjRaeTc2V1loNkplMlZtbDVCOFdzYjBYQVdaa250bFdxYWhBRWU2Vy8zQXExNlpxMys1ZStsUFVQTXlTVy94N3lMbUFlUjlnR25QbC9ES3ZLRzhCQ3VEYUluVnBPV0RBQUFBQUVsRlRrU3VRbUNDXCIsIEdmID0gXCJkYXRhOmltYWdlL3BuZztiYXNlNjQsaVZCT1J3MEtHZ29BQUFBTlNVaEVVZ0FBQUJnQUFBQVlDQVlBQUFEZ2R6MzRBQUFBQ1hCSVdYTUFBQXNUQUFBTEV3RUFtcHdZQUFBQUFYTlNSMElBcnM0YzZRQUFBQVJuUVUxQkFBQ3hqd3Y4WVFVQUFBT0pTVVJCVkhnQnBWYk5TMVJSRlArOWVUT09qcFpUQnBwUUdyVXB3bXdkVk50YVdMczJMV29SYllKc1VTdEpCVmUxU1BvRDBqU1Fra0FOKzZKUUN5RW8xTlNReEZMVFVWTE1tZWJUK2JxZGM5Kzk0NVBHR3V2STlaNTN2ZWY4enZtZGU4OFYrSU1JSWJ3MDZtbjAwWmdXNjdLcTFtcHBWR0tyd2tiS1FhN1NzaG1Ra2NYNVZab2FhSGo1Ty9CbUVEOTZuc281RlFoQTBGcCt4VjRVVmgzR3pwclRLRDUrVEp2NmFUUWFodEc4S1FEVG9aeGpiVzBOeSsvZVkrVm1FNXhPSjV4ZUw4eWlRcmt2RlFyVENDRTYrNDJOY0xDekhSNENWTkpBSUkyL0FhaklKWHFBSWcwR2d6Qm41eERyZllIazVCY1l2Rk1vQzJHcGd2UlVKSUx3K0FSS0wxM0Fucm9iMnQwMW5ZbWhPYWRwbUdueHovdXc4cW9mR0JwR2FtbzZFNFdoWTdFRHlCOUxEdzZOb096S1pRM0NkQjBsa0JtSFFtUnF2SWxFSWhsWVdJQ0xuS1MvTDBORVl6QWlVWUJtUVpHQzlYQkU2b1ljVVd1TjlQenkzZkExM2NKUHFwV3FYNHVNUjBVdlExMWNYSlJvYnJjYkRvY0RhNVJKK09GanBHYm43WldTYVpCZEpwczBCMFJxYUhRY1JWVDBReSs3OWVZZFR2cDFWaGVWalV6VHRKZ2cwczJTblhEazV5UEIwZHVLeHI0ekh4cVc3Tmt5U0Jsd0Z0dXQwMVhMQUdkWWk4VmlNbXBPUGZ6a09lS3ZCeEFmK3lRajVBTExnQTBkdVpGQjBkOXB2MS9XeVVFR3EzU3NGY0FKQnFobUxabE1TZ0JFaWROMEd2R3ByeEIwSEdsUitlS0NHamFhdENxUUpodVJJSHRkOExlRCtxK1ZYQU81ZTJscFNRTG93ZEV5LzZIN0hZZ1R0eGIxeGdiSFBBUUZJMmRZZFVpVFpsYnN3WkhQdzNLYk04T3RNalpzVHN6eWNxNjRqQzRYMGNmWmZuc1pZSVpUNGVKeU1vSXVXTGlyRjZHV0IwaE1UQ0pYMGZlUXhVMnRSSW5mb1FDUWw1Y25WOUowemczbW5mbi9SN0cxalJFR0dOQUE4cGlXbGFMdy9EbVVmeGhBeWQzYnlLdXV5c21wc0dsZWFvSkt1aG1nV1FPNFhDNElzYjdWc2FzRWhxY0F1UXBidW9pZWJlc2R0c3RKUmZXVDAzNzZPT254ZUJEdytSRHVvTk56cngzSk9kK1duTFBzNzJ6VFM2MzJYblNSaHA4emNLZG9LN1ZsZ2R4Rk43d3lhblFGRnYveWJXREYzcTVyYWJyRGVvUnVNN2VPeUtNdXlxUU44WS9qZjNWZVNzN0w2cTdyNVV5N3R0K0RabjZEU2ExbnFyamhKUTdzQXdvS2tLWDFaTllLaWU5U2NseTB6dnVHVnkzYms4bVp5UGJOM3lGcVhJR2VaNGlOamlGT0R4Q0xXVndzSFc2dk9XVjNuUFhKeko2MjllaTNpdHlsVC96SGZ4ZTF5c0dxemVHMFdtdFF0RzRxdndBeVRFTFFqbU11dXdBQUFBQkpSVTVFcmtKZ2dnPT1cIiwgUWYgPSBcImRhdGE6aW1hZ2UvcG5nO2Jhc2U2NCxpVkJPUncwS0dnb0FBQUFOU1VoRVVnQUFBQmdBQUFBWUNBWUFBQURnZHozNEFBQUFDWEJJV1hNQUFBc1RBQUFMRXdFQW1wd1lBQUFBQVhOU1IwSUFyczRjNlFBQUFBUm5RVTFCQUFDeGp3djhZUVVBQUFQQlNVUkJWSGdCcFZaTGFKUlhGUDcrakRGalRPTEV0TlpZakVtYUxyUkppSDJBNElTbXBWMlVXT3FtZHRORjBpN2Ewa1duaTJJV0JTY0w4UUdDTDFCUlNWQndJWUlLQmdYQitBaTZFTTFJTU1ibmpQRXhKdmlZU2VZOTZ1ODU1NzkzNW84ekNTT2U0WER2Zis4NTMzZlBPZmN4d0F4aW1xYUxkQjFwUDZuZnpNb0xOZVlocmNXN0Nqc3BnRUtsWnpvaUl3LzRQOVI0U1YzOFBYQjNFSDNYTDFEclF6Z2VFWnVhK1F2UnRLZ0I3WTJ0Y05jdjE2NGgwbTdETUxaT1M4RHBVT0FDdk9YTVFZeUdnbGhRVmdYWG5ITE1MWEdLU3pRWlJ6UVZRK0I1a0oxd3FHT0QyVmpkb0xHOFJOS2RRNkJXTHV3YlQvZGd6OFVqK0xMbU14UTdab21WUVQrVGZ1eGdacHlBV0NxQjRlQmQvTFppTmJxKzc5UXovK3BJREoxemFnWTVMUXkrOTlKUk5IM2NBRElTVUZmeU5VcGVtNGdXRjRuYUZwVmg4ejBZd1o4cmY5WWtuSzdsNUIvUUJEM1VkQXc5dm8zV2JiK2pjZEVubU9zc3hRLzNKL0hkdzBrc2U1NlFWQkFqL0JVbE9GcGZnZE5MS2l4d1JUS1JpT0JHMEk4VGYyelRkVGxMQk44WWF2VitIbW5ldUFhajRURXA0SCtENDFnVm1MQkNOTEw1Tk5XS0QzL3F3czdtRDNVb1FzSUxkTmUyRU1sMkhXUWxKUmlycGFqM2ZBVCtSTkt5NXZJOXJMb2RFVUREbG05ZEN3Yjg1Vm9NWTBqandMSXErVTZtVStJNzRQY1IxcUNPd3NNSi9ZbDdmY01YSkFXTG8ybjhkZlltakZoTUZLSnhJSzdhV0pUNmNkSE9xdy9oaUVRUVRTZndOQllXZjlhKzRRRzlySzg1Z2hidURUMitJNnR0ZXhSQlVUSUo0OWt6d0VuYnNxaElGVElUUWlaUDVjVFpkbXNjUGZXbFNMOThhVTBia0FpVTFES0JIQ2plNzJ5d09KS3kwcEpPVytwd1dGNVNCTnV4a2J5YnFId2FRbnJKN093NG1ZUVRrU2tFMlJrcncxUGwxU3ZNS0xycWhxMVdOdUVhQkxnemIwNlpEQVJvRzc2TGpNeDM1b3pWVkZicmJpaEQ0SzZYVXVCRVhRWENKUTRVSXFQbHhUakY1K0V0NFcydXhNY0U1N2pYdnJSVlJzS3pIZGo4K1Vjb1JIWTBMMERTWWErTDFXZ3NrdU5Nc0ZWSDRLNXJFYU5kVFI5ZzB4Y3prNnovYWlIMk5WYmxnSE42ZERaSWp1bXJvcCthTmo0a1ArNzNxUDFNeHBNcGRGMFp3NHBnRkhVVEtZeVh6c0pKU3NsdVdzQkk1VnU1VjZmNS9OLzcwRlF0S2VxbGc5ZVplOW1kNmNVbVVrMVNrS2c3YWUyM0hlZ2loZTJ5azZ1Uk85VElIYzRHYThYSXpObHkwNEpqQ2poTHQ4TE1lWEM4MVBDamc2SGdIZng2Nkg4NmdHUFdaTDVvYU5VcjZYSmpZS2xmRnR5clAvSTltUjVGWWoyWlZKZStHd05DT0JwNklqYnpuR1VDMkw3VWJRZk8rMlRtajlwNjlIdk53cVhmZkk5L0Z4NEY4TUlHNkZkalhsTFhUQmh2QUZaTkp1bW5TcUtVQUFBQUFFbEZUa1N1UW1DQ1wiLCBaZiA9IFwiZGF0YTppbWFnZS9wbmc7YmFzZTY0LGlWQk9SdzBLR2dvQUFBQU5TVWhFVWdBQUFCZ0FBQUFZQ0FZQUFBRGdkejM0QUFBQUNYQklXWE1BQUFzVEFBQUxFd0VBbXB3WUFBQUFBWE5TUjBJQXJzNGM2UUFBQUFSblFVMUJBQUN4and2OFlRVUFBQVBKU1VSQlZIZ0JwVlpkYUJSWEZQNW1ack50NmRiRXJUYVdZcnV0Z1phMjBRMjJUZi9zNXFFUDdWTUtRb1ZTckZJZnhCY0hmUEJCeFVRRlh4UkVCTUVIMXdkUlFVVHpJSUlQK2ZFSDhZK3NlUkdObW8yQ0pxalp5ZTdPck5uTnpQV2NPM09UWGQxZEloNzIyN2svNTM3Zk9lZk8zQm1namdraG1namJDWDJFRVRGcm1XRE1KTVR3cHNhTEFvSzVXcktXa0ZhRmZDTmR1Z2hOM0orZTZrZXgwQ092d3JPa2oyN0VZSVRqQ0wvWGlkQTdIV29wVDNacm1yYXZwZ0NYSXlESHdPQVlsaTllRFRHZEpzSm1hTVo4YUZvazhNdVRtQTF2K2dHMWdWSDdwbWh0aVNxdUxoTHBWcHg2bGNpeE16bUl2N2YyUXRjYTBQRHUxd2cxUkJFeWRCaTZUWENvcmRGWWhPYVdJUlJ1d1orYnptdThSZ253M3FoT1NOVzhuUHpnNlR0byszSWhES05JVVJkSnlNOVZoU2lDUHlITEJYeTdKSXI5SjIvTHVXMXIyL2l5blRqUFVDWnBsUUdYcHVuVzhBUjJKRzloMFlmdnc1bHlaYlFNbmFIWkpPWkljRnRYNHdSN1N1Q1RoUkc1bGtzYjdGOVNsaWlJZmcxM1ZtN3BwVEIxK3VrazRQbEVrcGhSUUhyVWhtVXBJWCtjNTUwWEZFeklrQlhmbVV5cDZuVHdiYzRaL0NVM05UV0cwVEZiT2sxTWxtQy84SkRMT2JoNmc4akF5T05RMHNIUkU5eTJKYTdSbkdVNU1waE1yaVNERzBpTnF5ellUTjZEVG03MVhId2tIU2dzUE0wV0VTV0t4bmsyOXU0SFZ2d0VyRm9KM0JrR25qMEhzbGxnN3dIZ0x2V1BIeFlVakF0TENtZ3l3SjVMRDVGb1c4UzBDYzRnenEyaGV4UCtUaEttU2g2ZVRSYXBuWWU1d2NINVhnZk5IOWxvWCs3Z202OGN6UHZBeHRsek5qYWJuTEV0ZlF0RmQyYjloY0Z4bFVFc0ZHd0kway9zR1FlMjByUkh0MGtXdjdRYkdCblZxUlEwUmtIUzNZckhUNEJ3ZzBDOGxXOGx6L2VWNXErMzhxVUtnV0JPQzFJRUtwOC9Gei8vNE9MYVRjQnpmVnkvQWJSL2h6bzJ1NTRGMHF6VUdBa0Q0d1ZVT1QydzVITmc5eDRnUTFrVXlDVWFCZjc3cHpaNTdPT0k2bGd6QW9sNE00YnVUOEovZkNwRi92Z2RXTEFBdUh5RklxSVZpVitCSDc5SFRWdmFNbDgxVTd6SkE5enFYTEU0SUgvZDRrdUJkYXNwaWsrQkZzcm0zMVYwL2FJV3ZRaTRwUFd3Z0R6OU9BT0djcXBtalkwKzZ0bG5WSjVaSHB6UjZiemdZN2FmZTl2V3ROWWtaek0zQU92L1I2M0E1ZCtwWGIrcGtTUGxaOUZhZ3NYS1VvVFA0RHBDMWRtRlhMdk1yNzk4TjFTNitLOC9hZDNKSVJGS0hCUGVKQ1RvY2FnSm5tZGZYbE5tWnZVNGhPaFNIcW5oakhDek1lRmFxQkJTYlFiUHVia08wVDg0WGs3ZVZUOVpQNU9NOHZaS2ZjSnpUT0hsTzZTZ3g4akYvVEdhZStWRHdNUmNMSGpwSHhGenR6N3hGbDhYWmtDUUtTTWNDY2E0cEUzMU9GNENUME93Q3JMT0FDb0FBQUFBU1VWT1JLNUNZSUk9XCIsIGpmID0gXCJkYXRhOmltYWdlL3BuZztiYXNlNjQsaVZCT1J3MEtHZ29BQUFBTlNVaEVVZ0FBQUJnQUFBQVlDQVlBQUFEZ2R6MzRBQUFBQ1hCSVdYTUFBQXNUQUFBTEV3RUFtcHdZQUFBQUFYTlNSMElBcnM0YzZRQUFBQVJuUVUxQkFBQ3hqd3Y4WVFVQUFBTXZTVVJCVkhnQnJWWk5TRlJSRlA3T2U0MzRVK1lzckVVaXVvd1p3ekFRTlVvaENBU3BvSjFFU1JDMXFLWWthdGU0YUJGQnVJd29sV3JmSHhoUm9JYWoyRWFoTWQxcFRnWUZPbU9ONlRnejczWHVmZmZPUEhHVXFUeDYzdjE1OTN6Zk9lZWUrKzRBVzRodDIyV3N0MWtIV0dmc3JFVFZYSUMxQ244cndrZ0I1Q3U5bXhGUkR2Q3IzQVJaeThRNEZSckcycHQrMmRwTFMzS05VVmtKMDErRGd0Wlc3R2c4ckUxanJGMUUxTDBwZ1VpSEFwZUFxOTMzWVVjaU1NckxRZDR5VUhHSk5MR1g0NnpMc09hK3NBMVE4dVFwVEYrTmhna3lTZGNHQXVXNVpGKzlkeGVKUncvaHFUc0V3K01CTVFvYlFhSkpFeHUyZkFMVzd4V2twaitqNEd3SENtL2MxSERYZENTa2M4N051RWlMQUUvMlBJYkg3NWN2aVZFTWNudERDdDdoRTMyTHlaTVQ0L0JjdUtoSlJMb09Nc21zSnVqbDVwdzFHYmJqTFVmSTQvUEJMTmtKUTRHU1JpTUNYUDFNRkR4Ty8vckprVXlqNk1VcnZTK0RUTkJDeXZzWk1ST3Zxd1ZGNXVEeCtkbHJ5aERBRllGdFo1TEtmNlI2UUpwZnBDYkRRRk1UaXArLzFvdThPL2h4VXZUU0k4TUFnNXZjTjZKUkdFV0ZXZTgxQ29sL3lyQklRclhBU0t4SmgxS2hFRktNcGFJSUNJSVRzbXI2KytVQzZmbmlBbGVOMTFWaWxHWEl0QTRyYWVKWVROcWFJbDJNcFFpT0NvSmF1VFQ4eWZGZURCSUowTUlDVUZqSUU0YURtUTNCblNmWnA1VlZVQ29wYlMyaEl5SDl0a29ReUFNRnJuZHlFdUQ0bDB3NmFwclp6U1ZhQnl6VnNod1NaV2Z3TTYwT3BDYklKSUVveDlGT3A1R3ZrRXUxaUtobVphOTBON1pEWkJUOEtWRVN5eENZWEY3YkpjUmxybVJDcEdpSXRmbGJleHZ1ckR6alBhVjFxYzViYkhYb0xCdTN6clNoMnBsOUtRNmEyT1NvR0oxKzE0N1JIeDgzSmpKUEFySFpGY1g3TUhacVNNOVdjK21TK0c0TWl0SDFBMWZXbCtBL1JOSFQvRUNQK3NTM3lGQ0REdFpZNDk1NlJRSlYrL2tEQysxa1c1OTN2NWlSZDRQb1NBTEJwQ2ZFb3M2YXkvbVRhSEMya2M0NTBxVXdOMXc0UVc3RXBZUEo2QlRPZjdpRXlQTDhsdmdOZStvbGVBTkg3d0lQNmtHdUt6T2dTT1FKSC8wK2hyZno3eEZlbk1MWHVFTldXckFMSXAzSEs0NjVnWE5lbWJtamRpNzlQanQvR2JELzQ5ZEZRQUZFWFlBemFpNm95bnhUK1FOY25lRDQzNk82N0FBQUFBQkpSVTVFcmtKZ2dnPT1cIiwgS2YgPSBcImRhdGE6aW1hZ2UvcG5nO2Jhc2U2NCxpVkJPUncwS0dnb0FBQUFOU1VoRVVnQUFBQmdBQUFBWUNBWUFBQURnZHozNEFBQUFDWEJJV1hNQUFBc1RBQUFMRXdFQW1wd1lBQUFBQVhOU1IwSUFyczRjNlFBQUFBUm5RVTFCQUFDeGp3djhZUVVBQUFNR1NVUkJWSGdCclZiUFR4TkJGUDVtZDR1b0pGQVBHdlJBVFR3WUZkby9nTVNlbTFUOEF3anhQN0EzRHNaUUVCTzRtUmhQSE9Cc1BBaUdNMURoYm9DRGlZa2daOHBXNk83MjU0N3Z6ZTZVYmNPUHFyems2NzZaTi9OOWIrWk5keGE0d0tTVUE0UXB3aHBoVDU2YUhmYmxDQW44cmZHa2tLQmJXenhQU0p4Qi9wSWVlY0lBdHh2VmRkUzhaZldVZmttTk1jd0V6SjRVZXE2UHdicVcxbE01T0MyRWVIZXVBRzlIU0k3TnpVMmtIczVBTnZhSjhBNkVHWWNRZmVHNE1vazU4QnMveVFkdUhLNUlhM2hZYytWSlpGcHpHbWRranZuNWVVeE1UTUFRTWNSNkg4R0szWUpsR2pBTmgrQ1NMNml2ajJKSldEMFBjSnpOQ0dmMmphYktjMjEwdzlKN0hpVmZXRmhBTXBtRWFaWXA2eG9KQld2VktjcndSNnJ0QW5vZVAwSGx3M3MxNE9hcjF4eWRJczdQdEpKOXZRTGVtb0dkblIzTXpjMWhjSEFRbnVlcGJCa0dRemdrNWlxd2IraCtnbkFkeE83ZVE0VldVUzlzSUt6Zm90cWlNUHNYM0JnZkgyL1Z3M1ZESWtYTThDSytHejZEdU9sUUlwWUpXZ3k4dDYydFN2TXg1eFU4MTBVOU9EaWdTUUsyYlNzQm5iRUFvOHl5b2U4b0dEcnVVVEpIdGlwb3MxRFFxMkRMY2Q4WWU2dXJxNjNzaThWaUlFQWtrQnB1aHgrMFdWZzQxRmM4VkFLTStwY1ZUZldVaTV4aWIzZDNWMlhQVnExV2xRaFF3ZWxCaytnbzg2bC8ySUNvMTlWSWpqUy9GblF3WVlVRlVkc1R0VHBOZ0R3bXo0eUlvSjFZd2FmQkZzS0RwdUNYU20wQ2wxZ3p4T1VXRmRIR3FlMnowOS9majZzeWN5aWgzVkpMWUhSMEZGZGhuTDB4TXFLYjMxaEFuYWxNSm9Pck1LNUtMUHRNTjVjRi94bklzYm1WeldheHRiWFZHbnoweSs2S3RIWTdwc3NOT1RTRUc5OS82TkI5ZzQ0bWwzeWRXNU9Uay9oWDAyZXE5K01uM2JYRTc2SWdHRnd3ZkV0SmVoZkplRHl1UUtlMEsxUjZZOUlqMUdabm9qZGVvajJENFBxVFVSSC9OeFF1SXVkNEI3bU12cTQ3UmZKNnhQYjJ0bXdlSjJTemhEWWg3VE00MWp4SnkrYkdlcFE4and2M01saUpyVWY3OVRYcHV6bnBsOU5LMEdlY3BJSStpblY4Q09UUVZjR0NtaXpKN20xTi9zZlhSUzRrc0NPRWUyRmZQanptNTlvZjZtS3FqTDNtNkU0QUFBQUFTVVZPUks1Q1lJST1cIiwgSmYgPSBcImRhdGE6aW1hZ2UvcG5nO2Jhc2U2NCxpVkJPUncwS0dnb0FBQUFOU1VoRVVnQUFBQmdBQUFBWUNBWUFBQURnZHozNEFBQUFDWEJJV1hNQUFBc1RBQUFMRXdFQW1wd1lBQUFBQVhOU1IwSUFyczRjNlFBQUFBUm5RVTFCQUFDeGp3djhZUVVBQUFWN1NVUkJWSGdCcFpaclRKTlhHTWQvUmJDNnRrS2xDZ2dUbkNCZThBS0tGekRDeEcwUkx4aGRkTk50MmN4MGNURWJXNVpsV2FKRDJhZnRnN3E0dUhpSmx3L082OVM1cVRIZWNPS05va0pGbEFDRlZxSGwwdEpCUzBHZ08rL2J2cWdSRjVjOXllazU1ODE1L3Y5em5tdmhYOFRuODRXSjhaMFlGOFV3KzU2SU0vQXRWNHc0L3F0SVNnR0FsNVhkTHlKUzlRSCt1Wmp5eEFpVDlsMkZWK2c4ZlVxZWZTNlhmQ1pvK0hENkpZMm5mM1kyd1drekZkVVdNVGFvVktyTkx5U1F6QkVBcDZDNGpzdmJqaEJqTmpIQW9BZTlucUJYTlBLNUhyY2JuN3VOTm1zOWxuNTZsdjd5TFJOR2hTc3dlWUprdzNNRWdadkw3UG5iaTloNjhDN1R4a2NRcGxVek16bVNwSGc5T20wUDZ1Q0J0THE3S0N5eGM2L2FTVzE5RzZiS0pqNVpQSloxcTFNVnVDK1VsNmdVbTR2cHRtU1cvQjFGYkR0OFQ5eklRSGI2cTZSTlZURkVQUkNqK1JxeDJoaGFlOW9aTlRRUnM5dUtRWlBBWDBZWFI4K2JLYjdYd0dmdkpyRnVWYXBpcm1SQlVoTVVZSlJNRTFaYTBjVEc3Y1ZFR3JRc25mTWFTU2xOTkRnZVlQYzJvQnRpb0xqek5pM3FKcTQ3aXRDSDZEaGR2SnQ1R1dHODg5Wklvb2RxWlYzSnRBSC83WmI5RmJqOWg5Sm04VmRueFp1Q1dKSTFna25KN1RpdHRVeE1uSUhEYThkb09VdTdxWWF5RytjcExOOUhxZFBJaXF6VmJQN3plNWJNaW1ERjNBUlpOMzlIc1dLbVRDbk1wUmNzVXB4YWEydGxlS1NPK1prR2pLVVh5Sml4Z01lMkZzcU9IR1pvOERCQ0J4b1lFSzVGVTlLQWVlY0I2c3ZOTEg5OU5kc0tmK2J0TjZNSTFRNFFPUFhLS3lUSmxRaHlwTldKZ2xycFFjeEtpZUo2K1JFaTR1SnBQSE1NVDlGUExKemFIMjlJQjFXUDcxTnVOR0xJbm8vRzBZKzd1MzZndThSTVprSW1kdGNEM3A4WEwxNmg0c1NsR29VZ1F5S1lKSzFLSzVwbG4wdm1pVGVNSk1rd2psQUIydDNlaU1kbUpXZmdCRmFPemVXYnJFVk1kbmJTTEVLMHlsS1B1OFdKTjZpTCsxV2x6RTRkSm1OY3ZsMnZFTVFGQnh4Q2pRZzNpYjFMQklETDFZaTlzNUcwaFd2eFBWd2dzczJEN1Y2WkNORm0xRUZ0aEFjN1dYUDRKSTlzelV5WmtrcE5TdzIvT3c2eWZQUUNHYU9sdGJPWFFJbWkzclFZR1JYRERYc0ptaEIvVW9XR2hlUHQ3bzkrU0N4RHBzOUdHNmVselZ4QXNGcEhZdUpvK1V4amF5T1oyaFJVUGNINEkvOUova3BmYWlTbVVKRlE0S0g2VVJ2eng4d2xkbkNzZk1EcjlSSWRIYzM5RUQybWFnZWRuY3VJVHZiUjNkMk54K05CcDlNSms4WnpLL0lXV3BjZk9HNllUc0Z2NlNYSW1CeEZhYVdUQzBYMVJDY1VZMm14TW1saUttMS9OMUpiWWVTTTJZV3EybzIzWHd5cU9BY3JPODZpMG9VU0VaSERyMWYzb0hiRGZwTlpScDJRMEZzMjdrZ21LcEJXT1JuK0crOC9VOFdxMlYvajZXN25pdVVxdHVhNzJCeVAwWWZWTTNUeUpXWm1IaWQ2a0pzYjdUZTRWbmFDSTZaRFROV01ZODYwRmVKeS92QlVzS1RnVkVuSklCWk9hVGRuelNrS2J0bFp1MndzYTkvVFUzenpISnI0V0NKVWFUUlpUTmpyekdSbFpmR3d6a2F3Smdacnp6VzBsamJjY1RwS3I4YVJ2L00yc1ZFYUtvOHZWUWhHQklsNklkV05TOUp1M2FwazhldGo2NkZ5RHB6MEVqOTVPdU9DaG1PczIwZDg0Z1RHWmFZVE1raE51MGFEMVhXTzVrZTFSSXdaamZYdUtQSjMzWkYxai82WXBZRHZlYm9XZlNRNUpFTWttVXppODVHMzR4YS9IUk51VjRjenVQTVZydGNkbzlaNGhpMkgxeFBwZFdEdmNQRkd5bkwybm9Bdk45MlVkU1RkaVg3N3k3MEJuaTNYdVdMYUpLMDNpcWZtNzdnangzUnNsSTZNbEVnK21EY1N0YWFEbm00dlZsc1hSU1lQZS8rb0ZESGYwUXUrL3VOSkN0eXo1Zm9wa2p6OGxaV1NDZ2Q3MTI3Qlo3V0tRODgxUGtVRDB0UEorWFNlZkltQVNGMHRUOW4wMVRKekF5UnlodnV1Rm9Kb21aU1o4RmtzZm9YUVVKQmE1ZHhzVkducGltcWZMYlB2ZS9tYi9oN2Z5OHRGMy8vNGQ1RWJBSEErQldnT2ZNc0xoUGtMNVI5RTM5UmROTU5kNEFBQUFBQkpSVTVFcmtKZ2dnPT1cIiwgX2YgPSBcImRhdGE6aW1hZ2UvcG5nO2Jhc2U2NCxpVkJPUncwS0dnb0FBQUFOU1VoRVVnQUFBQmdBQUFBWUNBWUFBQURnZHozNEFBQUFDWEJJV1hNQUFBc1RBQUFMRXdFQW1wd1lBQUFBQVhOU1IwSUFyczRjNlFBQUFBUm5RVTFCQUFDeGp3djhZUVVBQUFNOVNVUkJWSGdCclZaSmExTlJGUDd1eTZ0MUtEWmFVVlFzQlhHaXppdXJnbDBwRmtSL2dBVUZGKzVNeFFGYzJIVGhWb3NMdDdVaXVIUUN3VlVycUZVUW5GczNIYWhGTzJuUzJxUk44L0tPNTl4M2J4SmlXMVBySVNmdjNKTnp2KzhNNzkwWFlBNGhvakJySTJzYmF5L2xKR1o4RWRZcXpGZGtrd0VvVmxxS0p1TEFjeVpETFcrSFgxSWlGcUd4d2QwVS8xYWxkWHlvVnZ2U1UyMVVVRldrRUU4VmdEZnlKU3IydTVFTzNQdHlFNFBKQWR6YXk0R2hGVkNxek1STmdQd0VmSytIYldEWnF2c0lsZXkyTUZHbFZOTWZCSkk1WDVyRmJ1MjhqZ2ZkTGRoV3NSY2xqb3NyVzBjWlhFTEpiQ0Z0RVNuNG1RUzg5Q2NzV25vV2k1YzNXcmdHam0vT0Vwait2V1VOMyttNmprYzlyZGdZcm9aZ2tpSmNxeDdWa1RZYk1sOWsxUGVCZE9vTlNwWkZMRW1jZFErVDlEbG1qM2pEM1dPZmNhZnJCaXFXcmtHS0pyVk8weFFjSndsSEpaZ3dxVlZzN2N0cUF1Nmk5VWhQUk9HbDJnVXZ6Tm9paG11eVB5V0xxeDFub0poU09Rb3BQd2xkZ253WVVBeGxXbE00UktYVGRFRWhZSHFpQ1c1cHJUaHE1VFozMlRnaHEvZWpIUmllR3REQnY3d1lTdDBsdWcwQlJ6TGJmNVZya3A2TEpYUVVWOG9FWHJwZFYyRklJa0p3WEt3WDM1OEcyVExCV1Bvbmxxc1ZHanpBUzJBMlVWbmlHTGNLQ0xGbVVnOHR3U0VoMFBkWDkxaG5VQ3FqZWpTTmNTWXBEUzAyVGNoVmtEZm1ySzB3eVpybUtuamdqT0Z6RlVhcVhETVFERTErTlEwTmZ2RW9EYytUVGFGWktpQ2pma0NpZ25ZS1NVYmZSRGtDV3l0bXNuM0tBRnZLUEJRaE9qK1pXMlU1OEJvYVc3NzZoS21zcEJ3alBPUVpKYU5jRkN0TTRLeXJ0S3U0WXdpd3EySWYvcGVvNnUzV2ZDY0V6OFE2c1BaSWJuU0VCWWxiVjJmTmgwS2d6NHlkRlRWY1JRMFdJanF2eWcxUSt3OWExd09ISHhZWmVidXM2amMzNk1QbFh3cXc5NVRiZXRlNmJ1ZWZSYWRaNDFKRi9hYUdYUFE4d0VXY0M1ZHQveVZwZldSckFtR3lqcE9iejJzU0twSWtHOGJnenNWTDF0MWtNQXVDaWFMMjljUW5LOVczMWREaEp4dklYNzFTSzVtcjFZem9pV1BrdjNpZS8yYUw1bU9xR1Vqa3RhZVBiMWwvK1BFS081b2ZBNTgvZ3ZyN2d3M2wvQ0RKSUkvVzhVQVAySzF4azNrei9scDI4TksvVGNWTEd5M2czMFhFQU1UeUFIdU5UMW9hbmd2ak4rUFZKTjl1WndDdEFBQUFBRWxGVGtTdVFtQ0NcIiwgJGYgPSBcImRhdGE6aW1hZ2UvcG5nO2Jhc2U2NCxpVkJPUncwS0dnb0FBQUFOU1VoRVVnQUFBQmdBQUFBWUNBWUFBQURnZHozNEFBQUFDWEJJV1hNQUFBc1RBQUFMRXdFQW1wd1lBQUFBQVhOU1IwSUFyczRjNlFBQUFBUm5RVTFCQUFDeGp3djhZUVVBQUFUTlNVUkJWSGdCcFZaYlRGeFZGRjNuem9QaERzTU16RkNRbDRDMDFvRXFOYVZwaFZyOUVJMkpZbnpVTnFreFRmelFtRVpJdEg0S3huNWh0SW1KU2RWYS9CQVR2eVJSUXZpUUVLTklXNkZQZ1JwZ29PQXdEMmFZOS9QZTZ6bG43cDFDQUZQalR2WTlqOWw3clgzMk9XZWZBZjVGRkVXeFVmMkE2aWpWQmVXdUJOVzVMcXAxK0svQ25GU0FlNVdMT3hHUmJjRGZvVTBQVlJzYlp5UGpTSytQOEZhUlE5eEdNTlJBSnpiQmFPdUEzbkpZYzEybjJrc0lPYmNqQVV1SENzNEJrNnVmUVVrdlU4QXlFTDBOUkJCemRuS01xNXhjb2o2QStZR3ZPS0VxUFpTa2R3dUJHamxuVDdvL1JjcjNOUXhGajBJUUROeUliQTZGMmhNT0xzdHhaT096TURwT3duUmZ0MmJRcmEyRWFEbW56UlJMQ3dQUCtMK0J3ZXlrb0lTcUFrRkYxMGl5S0lJblZBc1k5OEtpdjQ1QzhoY3kwV3N3bEwyaGtiQjA3YWYrTHIzS3lGSmpreExUY3RyemlXQVFuUkNRcE1DNUNBajdFcG4za25nSTBaUUQ1cEpHK0NMM0E0YjlVSXBzK0dONkFJM0p5NmkwK2xFZ090aitYYVQ2SkZHalgyQXMwVnVQZ1VqTFBIcEJnRXFRWjRFa214Q1g2eEVRM3NUYVdnUStudy9sNWVVd204MUlyeTRoWFZTS1hYK09vZnBrUGxVbEZBWXZzSjRVSGFkclg0YU9BU3RCdW9JRXhWUlZpZE1GeEtGSGtBYXdqbWcwaldReWlTTGozNmd0QlZMdVJSU0V2YkNIM1pCdi9rb1BTRUFqNkdJRW5UeXZvWkZjMUV6bEFBVk5jQVVGQjI5em1zWXUrRHp6S0NrcFFhRzFDYUVMZldqdTcwSWtHb1BkUFlOZyt5dVF2dnRZSXpqSzlxQ0Y5ZVRrclZ6MExDOFVoa2cwQ3NIRWM3UG8zdzJIM2NhMzF5NzhoTmE5TllnSXJiQmFyWmhvZVJuV3R1ZFI0UE5qcGVseFpJSUJKSXJMVUpBanFHTUUvRUtSekRJL0pVUTdXc2dnbVRMaVR1SlZwTVFPdUZiU0VFVVJSbWtDZFhNK2VKdTk4SGc4T0tKYng1eWhHcGJid3lpOE1vU0szVTBnMTM4QmpuZm5DZkkzZ3BETjU5MGtsaUFTUDRxQUowYnpuVVNjWnN0VytUUm1oU0NzSmhOcWFtcVErTHdQenBnZitxQ2JrbWNnelUxQUtxdkpZekFDRjJNaXVtS2FwN3Zna21MR1VyQURWeVp2NHluSERDb0dCK2h1aWloOHVBMGVld01TN1M4aDVsMUI3ZElrdDVlSm9NVUpvYnhXZzFrWFZBTG96SWV4VVdRcEFVVlhEcWZUaWRUTk1IeXZmNEdZclJLWUdFTGg5Ry93WFJwRmRNMFAzNEhuRUhqeFhheWRQbytJb3BJME5Hc3dWOW5NR09zSnhSMUl5dzVrSlFHS1lJRlBPZ2FYZncvQzRURE14N3BoYWo2RWJPZmIzS3Q0WVJLdFAzeUlnNVBmUTE5V0JhSHpMYmp0OVRBK2NvUVdFWnFXUTg5cUJJUHNvckZORHJKUmJPa2poQk9sY0VjZXhMd3JpSlliUDJMUlZBWm5hQjZPQWhyTHFndUcxZmxOSzJXQWdiUERFS29hSVg1NUJzTHNaUmd1WE5WK3J0ZHEwU2h0bmxDeUlVeU5qS0RLWW9acGRBRGl0WitSMm5NUU04K2N4cjd4YjFFd1BvaWRSRlp5VzZnN042YWxxSi9Xb2xQYUtUcEZkWXJvcmJhVzBBSXk1L3RncE9hTWZhWGhBQ3dWMVVpVU40Qlk3REJHMXJhQUsyb3JuSGhmQStkdkE1L2ptMEtyWG43aXhCa1lqci9IU3pGemRMZ21VVmxaQ2VuUzhJN2d6QllVblBtcTBxdGlibmx3ZXBDcnJMVDgzWUI4OWpYQWV3ZHhvd2h6SnM2TmxVMzI5TE92RFlSRjN0eTJFYnhIRzJ6M1pIYXBKUHlHSzdSNDRmY2hUcWg0bDNJT1ppdlEzQTdRMDdJQmVOc25jMXRSSC8xKzVkNWxWUGtmL3k2NlZJRGdCc0FGZGE1SFBlWTd5ai9SRDRvUDN6NDlIZ0FBQUFCSlJVNUVya0pnZ2c9PVwiLCBlZyA9IFwiZGF0YTppbWFnZS9wbmc7YmFzZTY0LGlWQk9SdzBLR2dvQUFBQU5TVWhFVWdBQUFCZ0FBQUFZQ0FZQUFBRGdkejM0QUFBQUNYQklXWE1BQUFzVEFBQUxFd0VBbXB3WUFBQUFBWE5TUjBJQXJzNGM2UUFBQUFSblFVMUJBQUN4and2OFlRVUFBQVBYU1VSQlZIZ0JwVlpkYkZSRkZQNW1kdTkydTd0Q2Z5Z1YwYVphSVNiYm1ocjZnRUFFZVRIcEN4b1NFeE1hYkdLTWlRKzJKc1R3eFBiUmFBelBDRUxnWFZRU2pVOWRwVUlUakZTb0ZSOWdXMm94UldXM2Y3dmQzYnM3bkRNN2MvZVdka2tienViY09YUHVtZStiTTJmbXpnS1BFYVZVQStrSjBtSFNsS3BLMnZnR1NOdXhVZUZCQm1DOWNyWVdrVmdEL0NOcUVxUU4zSGQvR1VIaGgrOTFxK2JtZEl4c2EwT2dzd3VoM2w0RTkreXpRek9rUTBLSWt6VUplRGtNdUFaY1B2a0YxUFEwWkVzTFJHTURSQ1NxaDZpbFJkSWxsTzlPMFJnZ2V2NENBdkV1QzVNZ2txRlZCR2JtbW4zNXMwK1JQMzBLenE0ZVNNZUJJQlFhQkkybWh5Z28vUVRLMlJ6Y1d4TUlIZTFIK05nbkZtN1FaaUxzbWxOem5aZUZ3WXRmbllIVDJhbGZDa0tSd2o4YlllQXJmR3lYaWJ3NGRoM08reDlZRWw2dVY0aGswaEtjcGViZDB2aE5MQjNjRHljZVJ5QWFnelNnd3FJSkFmaHNMd3ZxbHhibUtaTmJxUC9tTzF1WEpCRzhMc3pzVSt4WjNOVU5NWDJYQ0RwcDFzSWpnQzhEcGJ4RnBaOHdGbENpRis0ZjQ4RGV2WWhjdkdTREdvUDBlSk90MHZobFlOdHRCSjZoSldtOUQrSFVlK0JDclNUeFVIMGlpM25JbUF1M21JUjc1MmNFWDNpTjNRTk1jSWd0ZDh2WGtKOHZRckpIVGtJRW16MDB4cHI2UjJBK3V3VTVBdG9VTGVDbDU1YXJUSW9DUzJrSU53ZFpJcXpJUlFTaENmWXpYRGRiNWZ3WXBLd3NzeEI1aVBLL1JGVFBiTWptbS9Gbk1vc3ZSeHprUTAvaHcwTUZiRzBvb0NtVzBnUkM1V2d1UlQyZWw3Q2NUZHJFMnBsQUh5Z1VVeFZ3YnhtS0ZGbEV2aERGcjZleW1IbTJEZkhkWFdoU0djemUreDJUdDVjUmZnZUkxQzFVU095RzRFYzU0eEZJYTFWbVh0MG9WdXBDUzRqODVXTGk2VlpjbmhuQmNDbURteDFkQ0Z3cEVQamN5bUlJSDRtdERlbWtmaGRvWEJHNG9vQjVpYmRtcjZHcHRRY3pZZ2Q2cDBZUkNEOVNaVlIzbkhUYXJTc1ROQVR0TW5xQXZqVmpXRXM2amovQStMVVlqbSs3aERUVmRuT21EckdqQzZnbE10eHR6VEVtK0luMHdIK2h3emd6Y3dFeVlGTDBaMUZIdXM4bXpFSmJCUkhnWHFRYW8weUJ5MEIveTJGc3IzaS81WVBHUlU1ejc5alZ0M0VqUGJxYVlEMWlDRnJEMjNIKzRGWHJmWjRPck9DU0o3blh0M05RUnlsc1hQUUpwOGVKbnRQV2RZNi9SVGJuZnRMTXk4MnZvbS9ISUx5UHpBWm16M0tFeG5ac2lyT3A3d1kyTkFFeldjZVJuUjlyRXJVZUVoUERzUXplUjJPTkRCbk1WUmRPZ2hxK2RIQm5mZ0tKMzk3RGJPN3ZtdVZnWUozMWk0UFU3dmFESjJ4bnJTdHp3SkRvRTM3ai8xRmN1ZitqSnB6TlRldVlhSEN6QnR5ejlRMC84SnBYWm8yWjZVdi9uRnEvREtzbitIY3hZQURTUHNDVThTWE1OcThwRHdIMExoZnRzZCs2YXdBQUFBQkpSVTVFcmtKZ2dnPT1cIiwgdGcgPSBcImRhdGE6aW1hZ2UvcG5nO2Jhc2U2NCxpVkJPUncwS0dnb0FBQUFOU1VoRVVnQUFBQmdBQUFBWUNBWUFBQURnZHozNEFBQUFDWEJJV1hNQUFBc1RBQUFMRXdFQW1wd1lBQUFBQVhOU1IwSUFyczRjNlFBQUFBUm5RVTFCQUFDeGp3djhZUVVBQUFSUlNVUkJWSGdCcFZadGJKTlZGSDd1MjYreHVYV2ZtWUdPZElrZnJGR3lnWktCVFBkTE1TeG9ZakJraThsaWtQMXc0c2lpNGVNSFhVUWw4Y2N3d1lpNE9JenhELzlNMEVSL3VNMVV3OGNHeE1tSElGRHFWbHpYdFYzWjJxNXIzOWR6NzNzdlc3YVdRRGpweVhudmZlOTlublB1T2ZlOEJlNGpobUdVa2g0a0hTQzlaU3hJVk01MWticnhzTUkzU1lBSGxmNThSQ3dIK1B0a3ZLU2xmSnlKbjBZNjhyT3dSall1MW1nT0Z5eUZIdGpMWDRHMXBGRnRqWkgyTU1hTzVDWGd4eUhCQldCcS9DaU05QmcwZXlXWXRSUk1LelRYNlFraW00V2VDdEFlb09qcFBzTlNXS2V3dkVUU3M0eEFlaTdZUTllUHdSSC9FcmJpQm1nV20xakUyTkpJU2NucW1RUXlpYjlocjJwRGdXdVBlcjFIUmFLcE0xZWVILzN1Q3JidnMyRmEzd1NMbHFFRlNWaFkwclJTMVp3RkNWZ0p3VjYwQnZPaGZvcTRWeEVjVkRuUjFBUS84MncyaXhmcW5Walg4Q3dPZkw4RjRaak5CRFJTQXBTeGxGQk5rS1JNbFdPcm94cnp3U1BJM0QwTm1iOStRU0NaMnZuZzF6L0c4Rjg0alhPak1jVG55ckQ3bTIyWWlOcnBpQWljZ3hsa2pZUTU1dFpZRkpuVlNoRXpwQmVpYU9abHppTjRuWTk4d3lHOGZXQVk3ZnRIOEZSdENUN2NXWWZLaWhwMGY3c0RkNmFJaEJJTG5ZQjFpb0piQ2M0dEo5VDBhV2lFcHMrY1VWRnc2ZUlFci9HblU0TmppTTlrTVpjMlVMVENoazNyS3VGMlBZWUwvemp3MXVjN01CNTIwTzZFMU9ROVZaRXdJeW9JTEtUWjJDK0s0Q1hHYnlVL3M2M3ZET0QzODJHUmxoZWZyNGF1QTFZcmcwN2xZcmRiRVB6M0JrNTI5OEZWRWNXU2VxSmZrdFpuU0Exa3NqUzBlN0RDOHhOLzZkZGtRaEFJenNxcVpmaHRlQkkrSWtza3MvanNnN1h3ZG5wUVZlM0d0ay9iRVpnc0VJQWd6MkhNOGpNaG01RTdHU1dkMTI1Y3NiczFMTDBSYkdGd2RqU0N5emZ1SWppUnd0QzVNT3lGTldqNXVBUCtpUktEZzlKdE15TlFXNWx5Y1VFNGdaOC9PSXNkeU5FNXNKTVMzL25SZWJTMnJFYnZ2bnBzYnF6SG03M3ZzVUM0SERtRm1hMUVTdXdlUWRQNnFwenJzM1N1b2FrNUpGTlpiR3lvSUg4TlhCdDNvdVdUZDVHUGhGR2ZrbktSRXd6eHA2M05xOHh3UmNUR3NrMmh5QnlhV2dkd2hZNnNzYjRDbG9LYVpTUnFsOVg1c3ByNmdWY1JUN0lvalpaZFEvQ05UTW5HdzNKNnQyRnRPYjQrOUJ3bXdpbnNQblFSaWJnZnAvWi9nWnFLQ0ZVYzVkZXlDclk2bjFwZXExRlQ0bTEya0kvMmRuaHllcjlZenY0WndjaWxLSzdmbnNIVm0zRVVPZDBpa3R1VFpieW53ZW8rcnBhZUlHeS9jRk8yaXd1a3BZZVBYOGJocjY3bWpZSzNBKzVwV1lrTlc1b2V4L1pYWGVnN2VST2pmMTNDMExFTXltbzcrREx1ZEFNbkVHWEtIOGlJSHI1M2w0Y2lXV1AyNHh6UjhLUnpUeVBUYVpIdzVnMVZkRi9tMGZyR1JnWE9wVWRpTHZ2Z2VHRjJWb3hlaTZHdCt3d0NkeExJSjg4OFdTSmFTbWZiRTFpOXNtZ3h1RmNOY24weXV5U0p1T0cra1RCK0hBd1M0VFRkZHBQTVdXekQ1dldWVkhrcmhaV1M4NU9aVStSSC80VHg0REpnUE1LL2l5NEpFRjBFZUV2T2VXV1o1NVgvQVVuMGhMYXFUQVF1QUFBQUFFbEZUa1N1UW1DQ1wiLCBvZyA9IFwiZGF0YTppbWFnZS9wbmc7YmFzZTY0LGlWQk9SdzBLR2dvQUFBQU5TVWhFVWdBQUFCZ0FBQUFZQ0FZQUFBRGdkejM0QUFBQUNYQklXWE1BQUFzVEFBQUxFd0VBbXB3WUFBQUFBWE5TUjBJQXJzNGM2UUFBQUFSblFVMUJBQUN4and2OFlRVUFBQU0wU1VSQlZIZ0JwVlpQYXhOQkZQOU5kamVwTllWWTdCOFFUYWkwS0RTaEJTbUlvQVd2Z2txT3JhQ2Z3UGdKbXZaUXIxNDl0YlNDQnk4dGZvQldCTDBJdFRscHdTYUNZbHZFQk5xbStiYzd2amM3dTI2YjlLOFBIalA3WnViM20vZG0zcHNGamhBcFpZeDBnblNKTkMvL1NWSGJNcVFKbkZaNGtRWTRxY3djUmlSYWdEK2xKa3NhNCsvVmpSbytmSytvZHFmbXFEbTlVUU5YT3kzY2lyY2gxUnYybHBaSUo0VVFMdzRsNEhCb2NBWDRlblVIbTdzMkxwd3owUkVSYURORGFsNmw0V0N2THZGcnU4RnJNSFczRTMyZHBnZVRKWkxKSmdLOWM4VSt0N0tOeFM5N3VONGRoaGtpVUNIUTdLemtSYWpVSGVTTGRkd2JhTU9qNFE1djhKbm5pZkJpVHMwS2gyWHU4dzdlZnQyakVJUWhHSnluQkFpNFM3ZytBWHZBN2RydktoNWVPMGNrVVM5Y3cwUlNDR2xHRGszczI1OEdYcTJXY2ZHOGhab1RRbFZyTGRqYWdiNzB4Z1M2b2hibWMyWGtLTFQ2L0dhNEU5SzdmNnlDdDFTaVhSdEtLd0V3QnVEejViWnF3KzNiWWgrWllianI1bW1EV2tiNW12UEpQT0N2M0VZZFc3dFFZZG11Q1lRdDRVWm0zNDJRa0dnaGtqYlFFR3B0YnJPaHZOQzNLOE1FOTdsWHJWV1JIaEFJR1FSTzFvamxSVjI2SFltbWMxWm16Vmh0a05aRGNHd0hsV3FWTElyZ0RoTU1jVy9oNVhQazgzbmF0WXZDTGx1V3BWcDlFZnd4cVZINTIzRUlzRkx4N2F5RlJBSWowOU5zU3NCTHhYZzhMdlUrOXlrUlNDSnFVdE0wMVJpUk5LMUpKQkoraXBzNFJtemJWbnBXWVlJQ3U1Sk9wMUVvRkpUYlFvZ3pnWGtoNnUvdjkwd2x3VVdOT3FPZmZwU3BQRFRVVFJBdE0vZFllQVhPWnpMVVkrTEc1WFkyTHJNSDc1Z2diSVh4Wm8wSmhOSlRFN2dKRFVrNU1uTEZMNENMbk1tcVpxU0lOZFZqNkprNG8wajBSQVZTM2Y3UkxvUW9IRnczbHZsclBCbHg2NHQvSVU0RDdib3djYnZkTTgwR2E5RVQwaEl6anlYRDJ0ZVRnME1YdkxIQkNQcGlLbS9VMjhBZFJjQk1ubUdjSm8wTmhtbStvOU5VSGd2T2Mzbk5lTktQL2FUR2JIcHdzbkFySzlaTERxYmVWN0JacGd6MnA0a0RoQkxKTG9QQUxZcTdFUVRQSXJEaXdJWmtScE9vSnpPM1plUGpUeHZyUllkZU54YzhTaHRORXVETlMwWVF1T1dUZVlqWDZ0R2ZsU2VYSmZrZmZ4Y1pEVkFNQU9hMUxjczEveWlNdjE5ek1yWFBUdFROQUFBQUFFbEZUa1N1UW1DQ1wiLCByZyA9IFwiZGF0YTppbWFnZS9wbmc7YmFzZTY0LGlWQk9SdzBLR2dvQUFBQU5TVWhFVWdBQUFCZ0FBQUFZQ0FZQUFBRGdkejM0QUFBQUNYQklXWE1BQUFzVEFBQUxFd0VBbXB3WUFBQUFBWE5TUjBJQXJzNGM2UUFBQUFSblFVMUJBQUN4and2OFlRVUFBQVV0U1VSQlZIZ0JwVlpyYkZSRkZQN203dTIyMiszdWRyZVBMWTlDb1lCcFNVQUpQeXdHcFlxQUNkRWdTVkZwRGFqUkg0YTRFUGhIWWh1amlRa1dZb2pHeEZCZUt0aWdJa0ZhVVFwR2FhTlVIcFZIa2RKQ2FkMWQ2ZDV1ZCsrKzk0NHpzL2VXa3JZRzQwbk96dHg3ejN6Zm5EUG5uRm5nWDRSU21zLzBiYVp0VEh2cFBWSDBkeDZtWmZpdndoZnBBQThxVFpNUmtRbkEzMkpEUGROOC9uemg3M2FjSFd3Vll6Z1JGRFlsMWxMTXlaK1BKVk5YNHVHaUttUHBNTk1HUXNpdVNRbDRPSFJ3QWZqRnRRL2hqZHlCTTZjSU5uTStMSEt1c0l1bUlvaWxWQXlHYi9OVmVHZkpIanJiVVdsZzFUT1NobkVFK3M0Ris3NHJqZmltcHdrVkJZdVFKY25DS3NjRUxDdFMrWlNlRGVRZ21EQVJoczJJb3VnTlhzUHFXYlY0dVhLTEFiZlo4SVFZTVdmRGVSNlcvVmNiOGUzTmZTaG5JU0FjalZETXpVdGdYV21JNXBxb3NGZVNFbjd3NTJubkZiUEVTWmdSdWdNWDhYejVxd1lKRDljampLVFBJR2hpdzRhZTRHVzg4ZU1xbERzcllNbXl3cFdkcGpYVHczU2VMUzVSQnVSWG5HSjdibGRBN08yY2tvTVdyeFdCdUFRMUhtS2VkT09EcGMxWW1EbVgwNHlnbXVpNzcrVnYxcmRVd1IrN3d3Z3FzZHdkb2MrVXFFU21KbnJneEhKeTVOUlNoQ01XdG1FS3AxMmxhNnQvb3V1ZVBrMVVxcEhqZjFuUlBtUkJqM0lGQ3dvZUZTUzZPRG1CaDAxMlhyemJqcTAvMTZETWxxU2VoNnlrd21HQ0dyUFFqUTFiMFR0UVFuZ2tDTkdqU3FtSXpNSzVON1ZQdCsrVUNOSFFIZFRvdTVkVjRvdksyUEhZbDRZWERSTDdlWTdQZnZXMjBCZG5qTkFkQy95a3dqYkFZRlFjUGJPSzNsV0xVVlJrb25tNU1vMUUwMUNqS1VSaWFVU1pkblRObEQ1dXJoYTI4MnlENUpQRlBvMWg0QmR2cStIQkU5d0RoUjl1TEZCTmlYYWFtRmpTU0l4V0lsbllmZklrL2dqY1N0bGtPNmE1WE5LTVFoZTU0TzhpNmNIWk9QeTFRcE9wTk1uTFZYSDVVQzAwTGNrVVNLV0JjSG9SQ3QyZG5LQlBOZ29LdEpjUUtaTldYSy8zRjJzN2RxdFNLT3lRaVVSRVloQW9tRlpTU0VzcXUwa2RTOFNyNXh5MDlaaVozUFk2VWVyMml4QnlVNnNjTUR3b2s4Y1dCQm1OTTJBMnBhWGhrUVN5WkFJenkwYStrSWRsU0ltVHZ1L3Q2R3d6MGRWcktON2NIdEljdGl3Slk5YUxBOU9GZitqakU1VzY3cXRyZDRHaVRYY25ZTFhJU0tZMGhOUVVyTGttRnI2TVVUS1pKcWRPbUlpMzA1NTJXQWZ1MjZVa2x4a3d3Nk1FemI1bjBUeGdIK1cyWk1lbG1xZU8wZUZRRXV5QXhidDBPdk9OZThWMkRRc3I3OW1GaDBlakVOY0kvYnpmVGc4T1BHN2dYT0FFWi9pc3FtUWw5dmJaeVliT0tmREdaR0hnZWVrcnpKemlvNEhoaExBT1IxSUlNa0lUODhLUmw0VUNldy9kdE82bytOWTFrbzJ0WGNYMHM5dDJzdGk5eW9qRlVaNUYvSkI1Sm1GYmV3MHVLUjBpam11bmg3UlhaZzRqckZxbDk1cGVvUHVPcjBBOFlTYThvaDE1S2w1Zjh4MjJyRDlDTlZPQ0hCcHdhTTM5TmxIdDdweHAyUDlrdStIVUxLTlZ0TEZoMmFXaGRtenJxQkdwd0VuYzJTbHNLZzlvaTUxeFNXUDlwcWQvcXBadFRrckZMb1htbUpQa1lqQmJhN3poa253eEdWUVRRUGhvYVF2SzdmTTU3RjdXS2phT2EzWUhyemZpd0kxZG1XelNIVjNoVnJHK05NZ0lNNGNRVGtuMC9lc3UvS1pZTWhaVVlLTjJqZ2QxOHlab2RqcUphQmw4ZnZEUG5UakFkQ3dKOTZhV1ZXbUNIZVNlV3c2aXBpUUJuRm5Md09kdVJoMVRYZTV2MTJOSTZ0bkFMeDNjSExtQyt0OWZneTk2Wi95MWgzdkFDd3FxVURkbnMyaHl1dkJicmQ1NG1Paks5T2drb3NJdkRYWGdyTDlWRVBxaS9jTEdLanNFNEpMaWxXT0JKN3d5SjltWnVQVDMwZ2VYTnZvLy9sMTRkQUJsREdDdi9xNWVUL05KNVIvQkJOKzdsSUxnOHdBQUFBQkpSVTVFcmtKZ2dnPT1cIiwgbmcgPSBcImRhdGE6aW1hZ2UvcG5nO2Jhc2U2NCxpVkJPUncwS0dnb0FBQUFOU1VoRVVnQUFBQmdBQUFBWUNBWUFBQURnZHozNEFBQUFDWEJJV1hNQUFBc1RBQUFMRXdFQW1wd1lBQUFBQVhOU1IwSUFyczRjNlFBQUFBUm5RVTFCQUFDeGp3djhZUVVBQUFSMlNVUkJWSGdCcFZaZGFGeEZGUDdtL3UwbTNZUkUwelMxL2l3K0tNUVVVcTBsRnNGZENDaFdTVjZLVDRvVWhUNVkzTHhwL05sRW9UNG8yQlo5OE1WV1NrVVJxVVVRcE1SZDI5SzB4YmcyYkV1dDZDWkJFNEpwOWllNzJiMTc3NTNqek4xN3R4dTZpUlVQbk55VG1UUG5tL09kTXpNTGJDQkUxQ0UwTGpRaE5FTTNKZXVOeFlTRzhWOUZMdklDM0s0Y1hRK0lOUW4rcXZpTUNlMlEvOXRtRXRYeUtmZExQT2Y2S0dvWXF0RVBvMlVJV2lEaUw1V1Q0NHl4UStzQ1NEcTg0RzdBeXNwQmtEMGpBbTRCVXp2QldNanpLd3F3RXJqOWg3Q0JUVjBub2VyOWZwZ3hBVEorQzRDM2N4ZTlVaGlIV1RvQzNSZ1F3WFhoUkNLNGNDVi9GYmttRVFOM1NyQ3ROSXpXL1FpMngvMXdJMzRtek9kY2ZGS1NsbUpoaXV6U0tBc0dPSmdpSElTSHdtcWVQS2VnZUVGSCsxT21DMGFlY2c1WTVrL1FOOFY4RUVuWERnRXk0d01jRlo4WExjdWl4Y1ZGRmd3R29hbXJwQ2xYb1NzL001Vk5RY0VDc2lkYVVKMVRzT1gxa290NEU0RGdPQVZCNnhXMDNKbnc2NUlVQUZIbTdUNGpSeFlXRnR6OEFvRUFGRVZ4VlZMRDh3VlV2dm1Zbk90bkdLOEF4cjBjSFhzcjBMYnhlaVlPbDNXN0RHZ1J0QW9RVHpvMThXZFlXcVpweWt5Z3FtcXRKa3MzZ083TnJtMmVQWS9WY3d2TW5nMUE3ZW1CZFlPVHBlNWttdy9rdVlyTENpOWNrMTVRZ2dMRVNyb040bVVSa3hsSXVNams1Q1MxdGJXaHA2ZEhVTUt3L05JQjNQRmVYUENlQjlOVXFIZHRoZlhiNzRKc0czcnZneUN6Q2pzekMzWGJWbVRmZkllNlAzcWNRWnZnaXZPRG9nWmZRS0Q5UTVjbW1ZSGJYNk9qb3l5WlRLS3Zydy9SYUpSMmg0THMwVGZlUlhEM0xyUSsrelJZS0FSbmFWbm1Ca1BZMEUyVUUyZFJUVTNER05qSkxPTTVVWXU5aWdNSFd2VXZDdFFhS0t6NUJ5cVRjY3VBZERvdGxSMFQ4MThablVoZW5jS2dzWXJRcmlqZDUzQ210QVJjS3F1L25BTnIwZUZrYzJnZDN1UFd5bGVIN3ZiYjN3Vm9LaUhSbzMrRDQ5TmZyK09KVHc3aWxkZmVZczhZWGVqdTMwNlA1UmZSZGVZRDF2YjJseWllK0ZwUXFOZU9od2NnTitDTDZIVE1TR043WCtjYUFIbTREdHNsQk1XQ1NvSGg1RkFRUStFeUhpcGVaQjNIWTJ4MlloNHZEKy9ENXcvY2d5dnBORFd1MWJUNnZuUDFJdHVsRWN6UEhlSVRTU2pmblFhL2VBbUtOYS9nc05hT1J4NG1GTElNY3dYQmY1R2hyQkIyOUJPbUw2aDQzc3BoUmV4WU5BZUoyckhCd1VFYUdCaGd2YjI5dGJNZ0FNYUVFZWVpdlp5VktHU1h5dE1yZGZJU0tQRWpVRTBhN1BRMHAyaXJ6dFNjaXUrVkN0UXl3M2x1TmFVM2tVZ2dFb2xJYzhTLzgxMng4aEd5cytJZXk0dmh3bHJOL3dubjFCZmcrL2VCM3g4V3hhbmRUTGRvT0J4dXZNYkRMcUovOS9OcWdxeGxrSk5yRHRLbzE2YkFqN3dQdnVkSmtLN0Q5Z0ZTcVZUOWphaW41RDB3OHBVaVp6VytiaGJycWJrRW12Z1dkUHl6TWQ3dzRvWFg4T1k5ZjY0NDVUZzVIc2kvQWNsNTZTdlhORWlzYVhGa3dlc3Vkb3FjUXJoT2x3L2syMjVnTWVlc1JJaGJpY2JnWTloSXZFeXl2cmRjekZkanhJc1JGNUJMWGVtdmphME5uRjEzNTAxQVpFMk8wZTFMZ3Y3SHI0dVlGeURiRUREampVbEtPemFLOFE4OHVMREJVQm9CZndBQUFBQkpSVTVFcmtKZ2dnPT1cIiwgaWcgPSBcImRhdGE6aW1hZ2UvcG5nO2Jhc2U2NCxpVkJPUncwS0dnb0FBQUFOU1VoRVVnQUFBQmdBQUFBWUNBWUFBQURnZHozNEFBQUFDWEJJV1hNQUFBc1RBQUFMRXdFQW1wd1lBQUFBQVhOU1IwSUFyczRjNlFBQUFBUm5RVTFCQUFDeGp3djhZUVVBQUFMNVNVUkJWSGdCclZaTGExTkJGRDcza2VUV2FKTml1eENSeGlJSVF0SGl4bFhyb3JwVDYyOXc1OGE0VjB5cmE2a2JkOUp1RlVIVUg5Q0hJTzZzWFlnZ3RrVVhSVkhUR09OTjdtczgzOXlaOUtaSkpGRlBPSm5YbWU4N2o4bE1pUDRnUW9nODZ5M1dKZFpOc1N0bE5WZGtMVkMvZ2swS29GZFo2RVprZEFDL3hrMkpOWTl4dlY0bjEzVmxHMFdSdExGdG05THBOQTBNREpEak9IcnJEdXVzWVJqelhRbVFEZ1ZPalVhREtwVUtCVUVnQVUzVGxBb0JFZHVTNy90eVBEdzhMQW1WbEpoa3RvMUFlUzdaQVZ5dFZxVjNBT1VOVWhPMnpSWmtudWRSTnB1bFhDNm5UYTdyU0F5ZGMyNWVJeTBBcjlWcWxNbGtKS2dta01aN1NEUUJXa1NjSUVHNkp0aCt5MVQyU0UwZW5zQnpoQXRneTdLYUJNbEl0Q1p0VXFtVTNBc2lWYjhGNlpUeWZoT0Q3ZTF0eVFidmRjNlRYcU92MDVPTUJGRkFBWTU2all5TTZPVWhtNzltMFB0VyswTHI1WmRrMlJZNURZZHNLMDJHQ1U5MUpnWHRsa3kwTmhFWFBQVEo5VndLdzVER25kTjArRUFCUzBVUVhFTHY0Y1o5ZXJMeGdFeUxLR1ZuYURBOVJFYmJJZTVDeEZMMUtsVDNYUkloMGVYZ0NsMGRMMkY2Q2dTbjBQdFFlY3NleXp4UUlEejY0WCtuak9Yc0FUTmFlV1REQlE3Wjh5aUkwMmtLV3YvNlN2TVdiRlVRK3V4K2lqY3FqRUQ0L0J2d3lUUzRpRTBTSTZZeDFDbkNSMFN5YlJLei9nd3FMUVM3aXgzNkVjY2MwUjRSMUxNZ0tWdm83RS9sMnUrTnY1UkQyU082dTlNa09IbndEUDBQZ1pOamd5ZjBjQTBwV21FOU8yTlAwOWo4WGJLSU9weWUzb1JQcTB6bnhMMXBQZlVVUHpRVXVZeVJlNTRYWHF6S3ZQWExnYklBWEl5TzByNTM3L1gwVVpPUEZ1Nk5aWXpTTjI1S1E2MzlFa0NkUjQvMTFDTHVvbmd4Zm1Ed1NnbnY5cHo0NWFSRW5iWFJvOExXWmZYdXpDVmZ2RUtyQi9Iekp6U0pxemJXK3dlSEZEdUhLVVJKVzRScmE4STlmcXlOcUo1UXJEWE9UWXR3WlRrSlhrcGlkbm95d1M2dmI0eWoxUlVLbno4ajhXYWR4TWV0MkNpWEozTnlrcXdMRjdtZDBsczdQcG5kSWtGTkZrWHZzaVQrNGQ5RlVRR1VFNENiYXE2a2pubFgrUTI5aG1GVXM5UHdaQUFBQUFCSlJVNUVya0pnZ2c9PVwiLCBhZyA9IFwiZGF0YTppbWFnZS9wbmc7YmFzZTY0LGlWQk9SdzBLR2dvQUFBQU5TVWhFVWdBQUFCZ0FBQUFZQ0FZQUFBRGdkejM0QUFBQUNYQklXWE1BQUFzVEFBQUxFd0VBbXB3WUFBQUFBWE5TUjBJQXJzNGM2UUFBQUFSblFVMUJBQUN4and2OFlRVUFBQU9BU1VSQlZIZ0JwVlpMYUZOQkZEM3pYcUt0MFRacG9DcUtpbGd0YXFPQ2loK291SExuWjkrQ2d1aEN4ZFNOQ3hWVGRLRTdONktDb2xzUlFldkdvdENQSUlLMDJtcTd0RCtGVmxxYnR1a25KdStOOTg2YlNWTFRsSlpldUc5Kzk1NXo3NTJaVElCNVJFb1pKTDFKMmtUYUk3TXlxdWVpcEp1d1dHRW5EYkJRZVZxSVNNd0JmcG1hR0dtUXgzOWJXNUJzYUVDS1dqazJwbXpzalJ0aFIzWmgrZkhqV0ZaOXhMakdTZXVGRVBjS0VuQTVOTGdDbkx4N0IyNS9QK3p5Y29oUUNGWWdRQjRDYmlJQlNlcjA5cklQU2wrOGhDOFNNVEF4SXFuUEk5Q1JLL2JKMjdjdzgrQSsvUHYydy9MN2xkSC9xVXF0N3RRVTBsM2ZzZnpzT1FTdTN6RExkU1lUWVdwT3pSY3VDNE1uSHoyRW55S3lsSUVrRlFVSXBHNEZrdTF0S0xwNENZRnJOMHk1OWhCSnJ5RjRTczNwOUxkT09iWi9yL0JYVmNFWFdKbUpYQ21WZ3N0ajRLV21aQUtIdnM3NEJGTGRYU2hwZkFlL3R5L05SSEJVNk9oN2VHYTBzZ0xvNjhPeXFnaHN3YUFHVTJUcTZjV3NrWE5LNWRCaXFyTVRWblUxa2J3M2lZWjg5RGxwTmxVU09FK0lQeU1ReGNXemF5KzlnY2dCUjVZYjFreFNsZFJwYlZWWU9vc280NTFRQkc4YVlMTWg2L0F3UkZrWlJTKzRmcG5ZeFRvLzdSTHRTbmNxUzBMcktzdDRYUGxLamFVSmpqREJidTQ1SFIwZU9BK1NTWUJJSkdVQnk5SWsxSzFjQVlSdHVKOG5zeG53MnZRMFJDcVZJWEErdEpyVlRVeWdMcFRzNzlPblJtZE5Ea3B0Ry9iNVVvaWRkRndyZlJBV25haHR4WkJ0U1RndkU4QjQyc3NpeDllTngyY1JLTGw2TjV3ZVRFNTVBSG4zRzZoWlovdE9sYmlxMzdqRHdwT1FQeTJQaG1iWnFFUWRpZFZGWVR5QTJrNzE2V1VtR1F6NkppZCtlUVJXUHNGQVdtSW83ZlVIcVo4b3NueXowVFdCSzdHeWJJT1pqVnVhQUx2Q0J6Qkg0QmxaUlpZWEJsMUVoMXlNdVpoWE5wZHNOOTJ2VE5EQ3ZjTnJqMlZQbjh4M2VqNU9VUlB3cUFPOFRjaUM0RkpqYVhuTkJPbzNJeEkrU0ZrY3hGSmx6WXIxQ2t2TEs0dk9PbTk1TTQ5cXQ5YXBRc3JGNDNyMUo0M3RmV3ltbnZGdmtkbk9NNlJ4WnE2dHFNdmUvd1dqZTAxTlJaVHF2NE83Nm0zZ2ppSmdKak5Scy9XS0lwRUxJZEUyYkZ0RFByWGtxNlZlWStZOU9ERnErTkhCai9GdXhOclBZbWo2WjhIVHhjQXE2eTExMUI3SUJZK1p3VnhQWmxTVHFCdmVPZklKSDM4M0tzS2g2UUZsRS9DVktzQkQ1Y2R5Z2VkOE1ndEVwaDc5WjNMaDBpU1g4TzhpcWdGR2N3Qjc5RnlNTkRnZnhqLzRzZ1RkcTRuVm93QUFBQUJKUlU1RXJrSmdnZz09XCIsIHNnID0gXCJkYXRhOmltYWdlL3BuZztiYXNlNjQsaVZCT1J3MEtHZ29BQUFBTlNVaEVVZ0FBQUJnQUFBQVlDQVlBQUFEZ2R6MzRBQUFBQ1hCSVdYTUFBQXNUQUFBTEV3RUFtcHdZQUFBQUFYTlNSMElBcnM0YzZRQUFBQVJuUVUxQkFBQ3hqd3Y4WVFVQUFBU0pTVVJCVkhnQnBWWnJiRlJWRVA3TzdXNHZkcmZ0dHN1Mjlza0tvVW1yUUtpS0R4SVUveGd4bHNRSFA1dHFJaW44a0txZ2lTSFNKaElpUm92UEdCclNJdG9ZQ2hGS3NEUkc2b05Db2daS3U2WUVNZTIybGRLV2ZYWWYzZGNkejdsNzczWkxXMUxqYkNabnpqa3ozOHlaTTNmT0FuY2hJckp3M3NlNWgvTVF6WkpIVzJ2Z2JNZC9KV0drQVN5VldoZHp4QllBMzhXSFJzNFdNZmY5MGd0MzUvZnFtUEQ1UUh4dDJZcHltTlkrZ1B5YUxjamR0RkUzOVhKdVlvd2RXdFNCU0ljR3JnS092ZCtNaUhNVWNxRU5Cb3NGR1dhVHFwY0lCRGtIRUhhT0NDTlVkaHhERm5lb1VTTjMwalRQZ1JhNTZuMzB2WU1ZLzZJRk9Sc2VoR1EwZ3ZHd21kQWt6WUtTSW5FNUVRb2g2QmhFNGF0MUtOdjdsZzczdW40U3B1ZWNEMWRFV2laL09FK2pPeHBncWxqTnBMUW9tQjVMdWdQMWw1UUQxMjlneFZlSFlYdjhFVDFkNjdtVFlSMURwTVlTalVZUnJheGdwWjNIbWFGZ09WRjRCaXdVQnZoSVBGSUlPUmhTWmFaeVdGMHpGdGlvNU9ReFJNcExFSWxFb04xZnF4cVBGdjJRbURpY2wySE5MSUlzeTVBa0NhRnZqbE93dlFQTEh0dUFyQmUyUWw1VEpmUVJIM0pTOE1RcEZqcjNJMlhYdjhMdWVmNDVLSXFpZ2tjUWdyMW9sWjZxUEdpMVRIMVRGK25aVTZzVExWY09LQzZYaTd4ZUwvbDhQdkxkSENlLzM2L3l0UXRucVAvWEU2bTUxK2xNQ0IyaDYzYTc2ZWpWWnFvNVUwbDlreGYxOG0wVUtkb3FYUFdPZDNQdllhbGo3SE8yNzg4NnhSVzlsWXpCbEtVWEFTWmFXeEE1M0k1VWhWZ3Nhb285c1NuYVA3Z2RYNDk4aUZCaUdyMjN1bldWSjhTUlBTSm5iMTdZaGdIUEpUQ0pYeWMzTTBoRytyUzZDMWI1M2xTbHhmeGVKQ0loTExNVnA1eEVsQm1sL3ZlbnBHRGNEMUo0SUFwaHBmbCtmTG41bk5nZU5tZ1hnb253cUY0dUtzVXB4dkl6QzlYSWRUSms1NnFjdnBiSlpJa293YUVoNmZhQnVFL2Z0a3V6NXdVV2tpTktDUDNmSGNMRTVHQnFiZG85aHNuMk5vVGkwK3BjWVNSaEVSSWJ3MEl3RzNQbitKQllCbmxqTGdyNEp5RTN0U0p5OG14cWI3enpXN2ozZndCaklJWWdkektUQ00wQkxUS1Y2YUkzNVdDZDlkR1VRbFhPdy9oNC9WbG1NVnFaMVdKSDZma3VsTy9ZbmRxdnFOc04yMCtkTUZyeVlUSms0N1BxYmhSbjNVZjY0VmZtVk9tcWZjTEJ6MExhV1BRMDVBd1RhdTE3OEc3VkVSVElKVW1WV0p4TStjVjNuaHhXMnlvb2ZyOHEyK1JpZkxUdU5IdXBiQ2Z4bmtJQ1M2UFRlczlYeVRsMVEvMEdQQjZQV3R1akI1dkprVmVtL0YyN25XNFBPTlExd2E3cmY5SHdHKzhvanVWMkdtazZrQkJyd2tiWVhyczVrTjdHN1hvdjZ1SERrN0ZZRFB3REF2MHpEdmV1dHlseTZiYzUzVmJLTm9QSnNwSzQ3WnB6cVpscjF5aldJNTlJckxnSXVibTgwZ3lpT05IR2U5SEw4NXFkNzQvTEdObnlJc2cvUGYreFdJVFVKbXMyVTJuSFVlUnQzaVRNNWpZN0lmQkI3ZUc1RDFYRDlscDlxa3N1QlZ5d3JXRW4wOEFGTldtWTh4NmNSaVE3SzhKWEhSamFWb3NZZjNCMEpYWUhzQ0FUZjlFSzkrNkJlZlpsRStDTldNQkdkOUtnT1ZHLzhBQi8yWHlkWFpqcEgwQ1VPeE9Vd2ZNc0FITnFua2tIWHZESlhQall5VWUvalpaT1BmUS8vbDAwYUFDZU5NQWhiYTFSbFBuZE1QNEZLMS90MzZIeHRlUUFBQUFBU1VWT1JLNUNZSUk9XCIsIGNnID0gXCJkYXRhOmltYWdlL3BuZztiYXNlNjQsaVZCT1J3MEtHZ29BQUFBTlNVaEVVZ0FBQUJnQUFBQVlDQVlBQUFEZ2R6MzRBQUFBQ1hCSVdYTUFBQXNUQUFBTEV3RUFtcHdZQUFBQUFYTlNSMElBcnM0YzZRQUFBQVJuUVUxQkFBQ3hqd3Y4WVFVQUFBUkFTVVJCVkhnQnBWWmRUSnRWR0g2K3J4OVFLTmFPL1ZBcGdjcGtpZnc0R0JJVEdTdkxkdU5NaGs0VHQzampGRjI4MGVxRmQyakpia3cweGd2L29oZnN3aHV6UkVOTXRzUm9HSXZzd28wSm84TmtqTFdqZ1RWUTJ0TDFqLzU5dnVkODU1VGlZQm54VFY3T09XL1Arenp2ei9uT0FYaUk2THB1SS8yRWRKVFVwNjlMUk5qY3BFNXNWNWlUQUhoVUdkNktTTmtFL0gwYVBLUTJ0aDZiV01USXBUdTRUR1AwZm9idmNkWTlobWYyN1VSL1h4TmNYWFhTTlVvNnBDaktsMXNTc0hJSWNBNzg2ZkFFN3Q2TFkwOU5GWFpZSzFCZFdjYjN4Wk5aSkZJWitCWmkwR245OCtjdmNFSWhIaUlaZW9CQVJNN1p6MzUvRlYvOTVNVno3YlhRTkJQZnBpaHNENHFqNGF3am1jNWgrbllJWjA2MFlQQ2RiZ24zZ2N4RWtUV240VzlXbHJNL1hNVzM1MmNvb2wwQ1RSRzdsUC9XVWs2NFRzd3M0YjFUYlJoOHUxdVdxNU5JL0pKZ21JWTNwbTZ0NE5uWHo2TzllVGVxcThvTkFnR3NHM21JdVY1Q3B6Ti8zSStuY1hOdUJiOS9kMXoyNVJJUkhGWkU5RDVlMjY0T3FJRjVhSzF0VUFsY3hjYmdnelU3b1NrcWRvV1dOOUF3OGp5UjVHNTZnWjRlVlAzeXEyVGZ3VEJlWXJQOGxUOEJBbWNHTlJLQm1rb2ltODlCb1ZGSmtpYVNtT3ZxeHRSVCs0eDFNZ1dWalNsRDFkVlY3bHNZSDBlT1lSbmlaclorTnN0ZHVBRFdUaE9MUEx6Q1FmNDVmQVNyZSt3QWdZRkF6SzQrN0Q5NWt1WXBybk8xdGJqZDAyc1Fyb1I0MWd3alQxaENYSXlnZzZmcG5WNHZ5ZG9hNHBacVpDbGlQNVVMQkJCb2FVVlpaU1ZtRmhlUmU3cUZiQWxVdm5ZS2Q5cmFxZjRKS09sMDBiOXdaVndTT0RXSUR3cUJBRytpYkt2M3lGSGtiRGFFRC9iQzB0cUtCWXNGdnNsSlZGUlU0SzhUcnlMVGV3aE9BamN0TGVIeTh3Zng0bThYdVo5S2YvTlVybElDeUQ0cXl2cGgzQjJQWThsa1FvQWlOamMzODVQU1V1ZEFmWDA5eHFuT2FldmpNQkZRUHAvSFhpcGZFUU1iRHpRajhETW1rQU9sVWZ3aFJlV0l4V0pJSkJJODZrS2hnRkFveEcyTmpZMEloOE5ZWGw2RzJXeEcxRktGVWxFYkd1UTBXaVF3MGZIU1o3emM2cWZhMTdvL2hJMTZ3UUNhbXBxNGZaR3lZWms0SEE0NG5VNXExUnBtWjJleDk3TXZFRjlZZ0dYNmhwRUo2NXNoazZ3dlk1ejEyREZ1U1ZPMG1UZmZRcHFhRmd3R2tjbGsrSnhwTkJybDJjZzFJOGhtczN3K1AzQUc4dHZXQkJiSkNQdlFXSk1qYkpWNytUZ1UraFppdEpuVk1VbW5KeEtOd0VHMVo4TEtvbWthckZhckVZd2d0ZHZ0L0xQTGZQTTFhc3JMVUhadFVoSThLYStLVVJyNnhxN2Z3OUYzTDFLT3hRTzdEYUg0OVFLdS9kaVAvYzM4WmoxSFY4VnBWZng2bWpYRWRlQUp1cXc2eFVXbWJ4TmM1NzRDbkw4TmJNSUoySzBuRFI4UGROTEdqbTJRcklNelh5RkRBdk9CQjhkREEzdDBNSFVyakZjKytnTjNnNG1Id3JzTzJERTQwTUhIRW5DUFhHejJaTG9GaWZGa1hnOWlaR3dlTjJiRDhOUHJ4c1JXWFk1REJOanZhaWdGM3ZUSjNEeHA0OUUvcHorNmpPci80NzhMdHdDSWxBRDZoTTBqanZtVzhpLzZ6M29NUFFiNm1RQUFBQUJKUlU1RXJrSmdnZz09XCIsIGxnID0gXCJkYXRhOmltYWdlL3BuZztiYXNlNjQsaVZCT1J3MEtHZ29BQUFBTlNVaEVVZ0FBQUJnQUFBQVlDQVlBQUFEZ2R6MzRBQUFBQ1hCSVdYTUFBQXNUQUFBTEV3RUFtcHdZQUFBQUFYTlNSMElBcnM0YzZRQUFBQVJuUVUxQkFBQ3hqd3Y4WVFVQUFBTjJTVVJCVkhnQnBWWkxheFJCRVA2NlozWmo0aU9ySVlvSXNnY05LTVlJWG55QnVZa0IwUitnb09CQnZKZ0k0a0Z3ZDgrQ0NucFBGRVE4bVNBb25wS0FNUjRqa25nS2VZSm8xR1ROdnJLek8yMVZUL2RtWWpZeGo0TGFxYTdwK3I2cW1uNHNzSW9vcFdLa0NkSmUwakcxS0xQRzEwNGF4M3FGZ3d6QVdxVnpKU0pSQmZ3V1BaS2tNUjZYQmo2ZytPNnRmcXAwV3MrUisvZkRPZEtNYUZzYjNGTm5iT2djYVVvSThYaEZBbTZIQWNmUXpDQU8zSHdBTlRVRjJkZ0lzVE1HV2JkVmgvalpERlEyQzM5eWdtS0FyWis2NEVTT1daZ2trYVNXRVpqTU5mdXprWWZvSHUzRWk1ZUhJU01SQ0VLaElHZzBIYUtnOUMvZzUvSW9QUjFFdE80R3R1eElXTGdPVzRscmUyNHpmLzcxSWQ2TVBVUFRybVk0WGdHaTZFR0tjRGJDd0FkOGttd1pQUUl2RzNUR2tDUUlzNXRJeHFWaFpHOXNORDFNQkkvUVVMY0hDeW9QSjA5YXlFUFNVK1p5RVBRVStaeTJ0WS9mRlFxUU1nczN1ZzllSm9uU1FoL005K3ZVRlpqc3IvTGcvdUIxQ0tJVWxQS0N6MENGSU90UUJVcFZtcW85N0JNeXA1dWhIS0NZU2NHdGFlVUpyYnpNdVVXWGVQVDU1eUIrRktZMXdYeHBGalZ1cmM1V0xNVUxJQTJMSnRRTWxJeWdTb2lnNVBYcEtneEpPeE5jWkd2ZzIvc0FnQWpTM20vc0VEc3BMaGRhQ3dUYVNKb25NeU1yckVKelpXbkdMTFVLY0VqTEN6Mlc0Q3dUNlBVMW1oN1I0TFJjVUZKRi9DRVNaTXZRVWNxVWNMUUkxSkg1S29xSzhBckRER213R0h5YTdsTVZSdUt1K1NENG5wOEtFalU5S1NtUGVwV2xsSnhneHBNTWNLZ2N2T1M4N2hIVE5DUDY1UEE0TDYxTVV0WjdMaUNRbFV6Q1d5NXNsd24wRitrZHlycVdLdGhPZXBmc0NUOTR0L2pWZy93TWtSVW1HR2RqVzZSKytia1JsZ01FbUtLZGZKdTB1VlI5anEzQ2lWdlBuR3NJNGkwTkp6QTJQN3d5UVg4RWF4WGhWSTZOSWE2Z242M1RlODloeVJMZm9IREgzSnFMZHRqREJIcVBIMjA0aVJiU3pZaitIRElPRVdtMXJtNUo1d1YvOGo0ZVhXbnEwTE0yVWdDRGM1eTc3YlYxZFlYUG9tdWtjMXpGbFlNZHFCeVY2d0RuK2JJbUFlSHEvdXU3Z1ExTndFeldjYm5wdGlheEdmMlBSOC9ocmJBbEFWbWJ0TzZVd2Z3M0U1VzBkeUNkcktwOHZFV1ZkKzlTdmxFVnNsbjVYZm5TQmVWN3ZlSHJNeG5HckhabHRzTWMzM3I4Y1FDZ0t4UERYNkFtSjRPQStucUFyOHJ6YlJDblR0dlFxbGRtOWJLRFM3OUxyVjE2MVNiK1hiUWJnTmtRNEpqeGNVdGpxMkg4QmRLVUlNTWpubDc2QUFBQUFFbEZUa1N1UW1DQ1wiLCBwZyA9IFwiZGF0YTppbWFnZS9wbmc7YmFzZTY0LGlWQk9SdzBLR2dvQUFBQU5TVWhFVWdBQUFCZ0FBQUFZQ0FZQUFBRGdkejM0QUFBQUNYQklXWE1BQUFzVEFBQUxFd0VBbXB3WUFBQUFBWE5TUjBJQXJzNGM2UUFBQUFSblFVMUJBQUN4and2OFlRVUFBQU8vU1VSQlZIZ0JwVlpaYTFSSkZQN3EzdHRiWXRLWm1aQ1pRZEhNd3d6anpEek1oaUFLK2l5dVAwRDBUUVRGRmhGQkJOdEhGNHdMUHJpQVVWUndBZkVsK09BV01LSWdxS2dZY1VrMDRnS1M3blNubDNUM3ZlVTVkYXM2dCsxdWlYamdkQzIzNnZ2T09YWHFWQU5mRUNsbEIrbDIwdXVrUTNKU1Vub3VRZHFOcnhYZXBBR21Lc2ViRVlrRzRCdW9TWkoyOExoWUxLSlFLS2pXOHp5MXhuRWNoTU5oeEdJeFJLTlJzelZOdWtNSXNhOHBBWWREZzJOaVlnSmpZMk9vVkNvSzBMSXNwU3hNUkd0UkxwZlZ1TE96VXhGcVNSTEpqam9DYmJsaVorQnNOcXVzWTFEYW9EU3d0dG95V2FsVVFtdHJLK0x4dUZteTBYZ2lUTXlwdWNkaHlRNCtRYlk5amtna29rQ0RCQ0l6Qm9RamtFVE00SWFBVy9hNExUV0t0ai8vTXVINmgvWU1XNXFSUTlQaFBucUk0cG5UeWwwR3RtMjdoaUI4OVFwQzE2NVd4OEUxb1ZBSXhaTzlxTnk2Q1gxK3g5VjVhZXRYODZDd2FpWHN4VXVBb05VTU5QUVM5dVBIQ0YyNkNKUXJ5bS8zL3pud3VycjhPTk1hSm9Ld1VOcTlFODdGK1R5OWtOT2NQVmpPSTVlWlIxN0QxZ2NaakRsYVdoRGQzd1ByM1R0WUh6OGkyck1YY3RxMHlVelJodGlXZ0Rjd1lMeGdTVERhTXU1Vit2cEFOc0EyaTE4TkUrQmJSQTcwUUxhMFFyS0YrUUpwRGw3SGQ1d0ppQnc3b3RZNFR3Y1ZHdVdad25BSlM4c0NoMzcrVmdkTjhXYzJUeE00L2YxazlWNFZMdXZCQTRwZm5zRHpmbHBRdjJYZFdoVzY4S0dEeUcvZEJ2ejZHeTBWNnJOM2E4QVFkRHY2UUNnOEl4QVExYnlWTWJwQWxLb1VYRGdETjAwc2ZFdGZQT2ZVODVXeXlPdnU5c09rdkJCd3lUdERZRlhqcVBjYkFqRTY2bmRjbCtKWDhaVXZsbEVlMHpkSjZXeU52Sm5FUU8zdFpZSmgxV3VQSXlnVGE5WWlkK0kwWk5lUGFDYmU5T25JbmIyQTh2SVZOZlBXekptbW02NFMyUFBtMVFGVTVzN0YrTm56RGNGbGV6dHlaODdCbmYxSDNUZmhYemFXKzN3Ry9hUUxyVVdMNEI0OURQbjVhcXBEeFkyYklHZk1nRWhuSU5zb282Z3NXSU9ETmFsYXM0V3d0RndTZkJtb2sxSVdyMWlLMHIvL29iUitRKzA5MEdMZnVRMzUwOC93WnMycTk0Z09QTHhuRjBLWCt4QzZlOTlNLzJJUkVOZU5Hd3BnOHhhZEhMSmEwT3JjcDVyVENOeW9jK0tVbWU3bFdsUlg3SXJQbnlILy9RL1ZHbFFEbnNsQThFVWpMeG9SeEQ2OFIvVDMyVHhWTFhiQmNwMmdwb2Y3ZWJwUVhCME5RYU53R1dEVGNtbm5CMGhMYmJrT2JFakNyNnlVNGk3R3g4ZFZPZjRTQVQ5R0RNeXRGbjdWa21nbStpRlBtY2VXWGkyWnkrVmtKcE9SNlhSYUtUMUlhbzYvZmZaSElJR3BpSDcwZStYVTVicjhobjhYQ1EyUUNnQU82Ym1rVHZPbThnbEhQMlowNUFwRVFnQUFBQUJKUlU1RXJrSmdnZz09XCIsIGRnID0gXCJkYXRhOmltYWdlL3BuZztiYXNlNjQsaVZCT1J3MEtHZ29BQUFBTlNVaEVVZ0FBQUJnQUFBQVlDQVlBQUFEZ2R6MzRBQUFBQ1hCSVdYTUFBQXNUQUFBTEV3RUFtcHdZQUFBQUFYTlNSMElBcnM0YzZRQUFBQVJuUVUxQkFBQ3hqd3Y4WVFVQUFBUWtTVVJCVkhnQnBWWmZhSnRWRlAvZE5FM1NtTTM4Z1hiZ3FCRXJPcmZWMWo0TVFhMkNEMU9RRG1VK2lIODY4YytMYUh3UVgxYVhPaFdmMUlreWhFSUxpb0pkTnlyNFZ0bmFGRlNvYTl3VWxkVWxuYlpMUzVla1cvUC9TNjduM0h3M3pkWXZaV01ubkp6dnUvZWU4enZuZDIvT0RiQ0pTQ205cElkSVQ1TEc1THFrekxFUWFSQTNLdXhrQnJoZUdXNEVKQ3lDdjBrbVRPcmw5OG5aQk1ZamNVeEZFMGl2RmRXYTREWVBPanY4Nkhzb2lON3ViZG8xVFRvb2hQaTBJUURUWVFaWGdULzZLb3I1aXhtMEJscmcyK0tFeDlXc1BOWnlKV1N5SmNRdVhtRWZIUC93TVhUZTVkZGh3Z1F5dUFIQXpGeWhIeDZleGVmSC9zU2VuYTJ3MjIxcUdUblJtcXFEcEk5Mnp1WkxPUHRQRXEvdHV4c0RCN3AxdUxkMEpVSnpUbWFXYWVIZ1IwLzhUUlFFYUZaQXhXSzdnVTBKaGFpa2dsLy9Xc0ViKzNkb0VLYXJtMERpR21DWVRQK1p1YVRzZWVsN3Nmdk9BRHh1cHNOV0sxUmxMNFN1RmtMVVNsY1ZYVmtyNEk5WUVoTkg5dXA5T1VYckh4Vm05akVlNlhqbUdPYVhzaXI3S2lWQ1pjOGZYVUF0YWNocktwRTRjKzRTZXJ0YU1mSFpYcjNJWjZldmZXcFQ2WlRNSnpJcTYrUnFDUzZYWFdYZWJLK2daRFRWQWxhQjVUcFRvb3BhS0JyS2R6SzZyQTZJV1VXSU9lampwL0hJdjFWS1NGY3VGNURKbCtGdnVZVCtQUkZrQ3dic3lKQXQwd2t5bE0zU1BOdE1ycXpXcmxCU2lqZlM4ZWtMR3I2WEFicjRpZmczVHdzdzlOdzM4RGtYeWRIQVRDeWc3UDc3ZjhhOWJYSGtDSXpmMTdWRXdZdklGY3RtT1FKVHMwc2FJTWg3SUt2OEh5ZitjNm9DdnllUHl6a1hqSW9OVFRZQkcybTdQNFhWWEF1cHE3WVg3RnJoVFpaMWV5RXJ1TDJ0QlhQZlBWVmxVQU1razBrNEN0T3dWeFpnM1BwODdjVFVpekFXNFVnZlFkRi9FTksyNWFvNXFZQWt5dVd5c2o2ZlQ0M3pUc2E1RlB2WUtIRCtKOHFqaENiSElocEtkZ2JDL2NYR0htT0NVRWtRd1NEdzhpczhsSzRCT0phV1lJeEZJRzZoYmNuOFlobUFwZUlpeXZMZldzNnBYd1JoTkwzd29oNktNa1ZoZWpoa0dBWnl5Nk5vcnN6RDhMNXVUWkVzd0xIeU5vcUJEemFseU9QeFVJdmgzS2xsY00rbmh4Uy9mZnoxSktMbkRkcG5KNjV0RFc1bmtZNGxqWmFYSVp1MlcrZFBBTzF0YnJ6L2FvOGV2TU5PbWFacDRoUzlQTkt6Nng2OE0vUWpCcCtjd05ISUEwaXNib1hYblVjNjY4TEFFeFA0NGR3T25MNXdHeTM5enlJK241VUtab1llMXlNajNJdDBzemxBbXU3dGFzTkEvMjZjaU81RXZ0aU03dllGZlBuc0dEek9Ba1pQZDJJaHZSWFdVbTBWN0h0Zmh6bzk2bTVRdE5aeEdDTHpDVCsvTjNJV2gwZCtwK3dMUkUwSml3MERtOEVsQjkrRmR3bkFsS3ZiZFIxSW1BeGZPdmh0TG8ybkQwNnA1cmRaYkc1dUhKeXRLWHlyaGZXTDFaVVpNa0dxVnlZMXIvSHBCV29sS2NRVGEycU4xK1BBd3hTdzc4SHQ5WUV0cjB6cnhLcVgvb2k4ZmprcGIrTGZSY2dNa0tvTEdEUEh3dVl4YnlqL0F4ZVhsVERzcEk4REFBQUFBRWxGVGtTdVFtQ0NcIiwgYmcgPSBcImRhdGE6aW1hZ2UvcG5nO2Jhc2U2NCxpVkJPUncwS0dnb0FBQUFOU1VoRVVnQUFBQmdBQUFBWUNBWUFBQURnZHozNEFBQUFDWEJJV1hNQUFBc1RBQUFMRXdFQW1wd1lBQUFBQVhOU1IwSUFyczRjNlFBQUFBUm5RVTFCQUFDeGp3djhZUVVBQUFOUlNVUkJWSGdCclZaTmJFeFJGUDd1bXpmRnRHRk1TNHBXNmk5S3BDV1NSaU5CaEFnaWFtUEJrTmo3NmNKU1VpVVJzUklieS9GVExDVEtRaVNJbjVWWVlTR0lSVWtJMFVUYnhMek96SnQ1MXpsbjduMTlVMjNUSDE5eTV0MTczajNmZCs4NWQrNTl3QVRRV2lmSnVzaWVrL1hwRVF3WVh5ZFpFNllLRGpJRWswVm1QQ0UxQnZrcGVwd2xTM0wvNVp1ZjhCODlSTnVUNjlCRFF6TEdXYm9VcjlzNkVOKzlGMXMzMU52UVFiSnVwZFRsY1FVNEhZWmNpQy9lZkl1dlA3STQ2YjdIVWZVUlRxSmFRb0xzSDl5SnJjRkZyNWxqY08vQ0RyU3NTbG1hc3lUU2JUdk9HRFBIK2N3YkhEenpESEhYUmZPeStaZzdyeHF1Y3VCNG5waXJGT2JVSk5DeXNnNnJHcFBZYy9xeHhGZ0JyazJGZ01sZlNINjE5eE0yckY2QVFnbndjZ0dLT1YrSVk4UERZZzVaTVZkQU5sZUNKb3AxSzFLNGN2ZERWS1RMMXNTdWdGT1RmUGY1Tjg1bDNxRyt0aHBldmtRV3dDc0VRc1lDaW9qVmNIa1ZMT29WdEl6SjVqV1dMS2lSV0U2dHFWOUdhbUNVK3JqVDM5OHZhbFZWVllqRllxQmNpc1Z2MzRKN3AwY0tSaWtYRkE4ZGhuOG9MVFVJZ2tDc1VDaElYQ29WMW1PK1N6OGQzT0tYUE5pbHZET3BxSnNuZkI4cTY4bVdVUHpES240eEhPTTRqc1F5ZWJGWUZDNmVKS0dUQmZaYkFSN0labWNlZ2dSQXFTbHZPbDErRm4xRVlZWFk4dm04RmRqS0F1dGx5YVFjRmFnQWszbEd3T2JKcnhTSWl2Z2o3NXBjVXhESkliK01RcHVFYTFxZENFU0V0VWxwbE54YXhOL0VSWlplK21rN2Z1VytRVGswcUZJSDZkNEMwdmNyWjl6VEVVZlBnYXJJYk1vTDA0SEd3bGtONk5uNVN0eE05WVViTmZGNS81NGIwOFNpNmtiYkhBd0ZXbXMzNFgrQUo3bDg3bHJiZmNzQ0w3bTFlZEV1aEpuVG1EYTA0VEo0d0FKeStyWFV0dE1xMmpGVDFDY2FoTXZnUHAxYmFwRHEvSUk2Mnk2MW5rYnAreEhhVGVWQ2h6V3A0M2xWRmpsZEYwZDZkU0xzMHlaRXdIKzJ4b3gxWFNQdUwzYS9IQ01iVklrMk9MVW55c2ZCRk5KVUhrL0hYdW9FMUt4bWRzbmR3QTBSWUtYUWtUb09SYWJ0dHBzRXVRZ1FPY2NhZEJ2T2tmdkEzRVNoaU5QUUN4MWJRdnU2VXNndWpuMEIrMmUzUVMyK01acjg4Z1F6a290OHdGNjJnZmRhQi9lNmRIQmdueTV0Yk5VQjIvWXRaUis5Ry9VaDBJbkp3Rno2MS9UazhWelA0T3VpMHhBTVJBajdqSSt2eCtSRUhIOEJKdW84aEhSdzRSQUFBQUFBU1VWT1JLNUNZSUk9XCIsIE1nID0gXCJkYXRhOmltYWdlL3BuZztiYXNlNjQsaVZCT1J3MEtHZ29BQUFBTlNVaEVVZ0FBQUJnQUFBQVlDQVlBQUFEZ2R6MzRBQUFBQ1hCSVdYTUFBQXNUQUFBTEV3RUFtcHdZQUFBQUFYTlNSMElBcnM0YzZRQUFBQVJuUVUxQkFBQ3hqd3Y4WVFVQUFBTVhTVVJCVkhnQnJWWk5UeE5SRkQxdlpxZ2FTS3dZQlJhUUxreU1JTEhHbmRHMGF6WVlFM1ZuOEJmWWhZYkVhQ2k2UWpmdU5HNktpWEVydUdESlI2UnNRWFpHSXpVdUpCRnBDMHdMN2N3ODczMHpyMHdKWUFWdWV2THUrNWh6N3NkMFpvQjlURW9aSlF3UnBnaExjdHZ5d1ZxS0VNUC9HbDhVRURScW1iMkV4QzdrOTJsSUU2SThkN2FtVVNtUHExRjZCWFhHTUdNd0kzRkVUdlRET3BiVWwvTG1zQkRpNVo0Q1hJNkFIRFB6eTdqU2VSZlN5UkZoRzRSNUNvWm9VZWM4dVVGaU5qem5PMTBETks5K2hOblRxMm5TSkRLc0o4WXVrZU5aWmg2M0gwOFNZUk9ham5mRGFtcUZaUm93REp0UUlsL1FXZ3Z0WFlJVk9RZjd6aTFzdmhpcENYQnY5TVRTTlErVHYvcndCWmZQbjRGcFZpQkVoWVQ4WEhXNlVvOGVsNHR3b1J2Vk42L1YydkdIZ3p3TUVlY1laWkxUR1hCcG9vdmZWdVhUekdlMG4yNUdhY3VGU2RFeU9HcEQyQ1JXVW1EZkVNRTZvMFJaZFhTZ1NsazRjN01JK3BkUkpRcWlIK0RKelVlVEFzS2duMEVDWGtERXhJeHl5QzhGbzYzS1pwYkxsSzBGU2dhVjdWSWwrVGJuREc2b3BpNHM0OGV5cldxeFdxekMzdlJxRVFzd05taFArN2FDb2ZmS2xFV3hxQnJxWmJNNkM3WVVyL1d6Ti83cEp6aDZ4dTlpaFFSY1JRS3BVZHJoKzNNV0ZsUWk4V2VGQklYS3dwMlkwQUlKYm5LY1BhcS8zMG5DbHVOaGhVU2dvalpDcmQzWlp0OFhLNVN0VS9VellNeGw5V2JNQ2hxQzNDKzdKc0JXSlJISU5mTE1rQWpxaUgzUU9jZXFYVWtkaEV2bENndjRwazZJMEVTYkcrRGZKaEFPMFRjT0xjZk95WllJanNKVUZsMWRlbHFvQ1NUaTdUZ3FFejBYdGJ2QUFqUHM5Vi92UkgzekRtYk1ZUFgxNmVrNEM2aW5YeUxlcHJCOTdHRGs2T3FFdUhwTkw0M1JyU3Y0TVR2TnN5Y0R2VGdNdVlyKzdUdTlOQnArRnQwakZEZ0RKU0wxOGNiSjJZd0hnN3IrNnQxUWY4aC8vU2tieml4S0svRmVla1VvME45aFQvQytlN1pWdXM5SHdtKzQxTzZSU0puV0p4YSs1cVc3RnBOdUFYVkMybGZFdE9ldUo2V1huUTJUcDdGdnVuNG1lWDNhcTA1SnI1U1Mza1pTQ1hxTTliaS9SbnM3UGdSU2FLaW0va3QvVkRadVUvSVFYeGVwZ0NBZklsd0sxcmlrMGYwNC9nTHVhVy9TMWdSRHF3QUFBQUJKUlU1RXJrSmdnZz09XCIsIEFnID0gXCJkYXRhOmltYWdlL3BuZztiYXNlNjQsaVZCT1J3MEtHZ29BQUFBTlNVaEVVZ0FBQUJnQUFBQVlDQVlBQUFEZ2R6MzRBQUFBQ1hCSVdYTUFBQXNUQUFBTEV3RUFtcHdZQUFBQUFYTlNSMElBcnM0YzZRQUFBQVJuUVUxQkFBQ3hqd3Y4WVFVQUFBTTJTVVJCVkhnQnJWWkxTRlJSR1A3dXZmTzZHYzR3aWRSQzBTSklNaEtFSUEyc1pVSmx1R2xadTNiTndyQ2RJMjJ5QndWQlVVRXEyUzRJTjFsdTFNZ1dtYUNtRVVYcVdFaUVPak9Pb3pQTjNIczYvNWw3eGpzNWlwby9mSE1lOTV6dit4LzNualBBQnNZWTgzRzBjUFJ4VExGVkMxdHpBWTR5Yk5Wb2swV3dXV3RmVDBqSlEzNkZOMEVPSDQwSGhtZlIzVCtKdDd5TnhQNmc5MzRkQ25RWFhDNFhkRjJIeCtPUld5TWNyWXFpM0xQek9mNGhiN0hJQmZHTnA4TUkvVnBDc1g4WFN2WVZvbUsvRXdXN2RHZ3FrRTZuc2JDd0lQWVZGUldSSURsMGwzTjR1VWlyNUZUemVJN3JqNGR3NFZvdnZMdmRPRlR1aDkrclExVlZ4Qk1HYnpWb21nYUh3eUc4cDBqbTV1WVFqVVlsVlpCcWt5Tmc1UzlEL21RSUQxOTh4dVhHQ2h3NTZNZHl3c1J5MHVEazFKcFFGVVVJa0tDRTIrMUdQQjYzaTdUSW1zZ1VVV3A4bzEvbmNlZlpLQjQwSDhleHltTHdVRkY1d0lkSEw3OGp0cExtQmVNbFV4VXhMd3FvWlBxbWFjTHBkQ0lXaTRtb3VDQ2xxNTNqbEdvcFhhUU5qVTF2aEtlZFBTSHMzYU1MZEwwTzRYYzRpUldLZ0tjbyszWlk1QklVRldGeGNWRXVPVW12T1VYUUlJdEtCYVdzYWR6TDI4Ky93TzNTQk9JMllqQ3NNYnRJS3BWQ01wa1VhZU1XSUlGejFPc2VDRUc4dFh6aGg0bDVqRS9HeENiR3hGU0dtTGNtVzFWZ0xGZE4xaVNSU0VpQk9oS29vdDdZdDNsa2FxNGlHay96Z2pMb0hsNU16c3F5cml0NWllMlJrQUJGWVZrWkNZZ1BhbnAyS2VlelM2Vk5wSlpNa1M1VlZYSzh6aWRncjRmdGVabkNyRkd5dWdycXp4L1FMRDhWYk0yWUJZUC9HQ1VsOEF5UGlIbkt5YlRvRlhxeFU2YVdsc3B1SkN1ZzFkWmlwMHc1WENtN0l5UXdJRlRyNjdGVDVsamw2cVlhVUpIRE5FcWZQd3ZsL2FESTIzWnFZQko0L3AwZlIrUjBPVDlhRkRwbSsybWtYVzNPRm90dFE0RGc2T3lTVXgyY2UxcWVwcGM0SWtwTkxWUkxaS3ZrWkdwVHM4eS91QnR5RjJXdVAySEdyVFptRlB1WmFZRnRBSHBPYTQyYmJmWWJMcERmRThhQzJTWGpZOHlvUHJwR3lMUkJFRGVjWWViZ096dDUwTTZaNzhva2RYRjhpekV2T25wZUFST2Z3R1ptTWh1OC9KdXBPUUdjcmdlbDFiSzhWK1o2a2RDbDM4RTJiMzNzUC81ZEJDeUNzSTF3eXBvTFdxLzV1dllYYUxRMHYzRHBxeVlBQUFBQVNVVk9SSzVDWUlJPVwiLCB1ZyA9IFwiZGF0YTppbWFnZS9wbmc7YmFzZTY0LGlWQk9SdzBLR2dvQUFBQU5TVWhFVWdBQUFCZ0FBQUFZQ0FZQUFBRGdkejM0QUFBQUNYQklXWE1BQUFzVEFBQUxFd0VBbXB3WUFBQUFBWE5TUjBJQXJzNGM2UUFBQUFSblFVMUJBQUN4and2OFlRVUFBQU5jU1VSQlZIZ0JyVlpkU0ZSQkZQN092WGZOZmtnTjdLMG9LQ2dzK3JHSDBDQjZUT2dQZWk5Zm9yYzJNS1NIYUlWZVRBZ2ZleW50NTcyeXNxQkFBMWNJUXMwL3BCZHRmVlpYVGRkMjc3M1RPWE5uMWcxWFVmUXM1ODdjdVRQZk4rZWJNek1MckdGS3FYTDJoK3hkN09OcTJXWk1XNXo5QURacU1zZ0FyTmZhVmlPaUl1QjN1RWl3bDh1N24reEI5bE9uTHRYc3JPN2o3TjhQOTloeGxOVFZ3YXM1WjRlbTJadUlxSFZWQXBIRGdHdkFwZFluVUpPVGNDb3JRUlhsY0twS2dTd2gvSldCV2xoQW1Qck5ZNENkTDEvQnJUcHVZUkpNMHJTQ3dNeGNzeSsxTkNQNzRTbTgwMmZnVEc4RE1Rb1BBbzdtZ0JpWFAxMG9HY01lTG1iZ2o0Mmk1RVk5U3U4MVdyaTdOaEt5bW5QUkw3SUllTzc1TTNnTmgrSDRCT2RMQ1lnS1owTlFwNWxvbXN0eElWSUl1VU51b0IreFc3Y3RpY2gxaWtrbUxFRWJGemVENFNFc1BLcUJGejhFdDJJbkhQNUtzMHpTd2RMMHVjZ3puYzFxcVZSZkxJcUNJd3ptNXppU01XeC8yMkhYcFpzSkxwQ1ovYmkwL0trK0NXY3lCZS82RVRqM0Z6VUJIdXdDcGR4OEJLSzVFWlYvWkdwQXdCLzhrV0dndGhZNzNyeTNuU284Zmx5Vld0RGJBekM0STFsU05nWG5Zd3pJRWFocURqUzJMVUtSaU9SeGlpTmcrV2pRZ3pKQk9YK3plcXlmVE1KbkxCTkZYQWl1Nkt6cDdJVE0wMlVaNlBzTXFMTlMxQVlPQnNCaWlEeURsQzZ2UWNqMWpNY0pZSWpUYVk2WTRJcGNqR1VJemd2QlNSMG02KzhZQ0JvSlFMRXBvSlMxSCtWV2xZMkFxMzFnbm50OGRvMENXYTBaWlpaQWZrNlBsNm1FdlVrcjBRRWgwQnNLbk84VUNSQXBtOHRGN2k0dnJ1S1pVeGxYTWlYUllvaUhZVVJpeGpuOERNeUd0QVQ1QlNRcXNyV0RJRitsci9ackRzV01DdHlhUkRXaGE3dkxzRlVtUjRteGRKN0E1ZlRhS3FPcVk3WTZJQVRmTkNzZlhKczF1MFc4WmF4M3N0RmtrV2ZremI5MkdjUVpZTE5wbytBNmcvYnRRK3pIZ0cwK3lLbExjbTUweTV2TDU0Zzl4TlFHd2ExN0wxN2I1blk1aXh6elVzK2VwcHBhT0laa282YjNXME9qMVYvZkRmOTNpSzQvYlVGTHN3cjI3bEdoY2JXR3kzZnBHenh1THJ6aDRzVm5vVlFpMzJWNFVBWFZKMVlRaFFXdWdhOWVVbUd5cHhBOFVZaFo3TW9VZHJuWjlBNVhzdTM1eXNUSUVGUXFGUTBvNHowalo4M0ZPb2lzeG9wZW1hdEZJcGQrdTFxL2RhbE4vTHVJRzRDWkFzQngwNVl3YWI2cS9RTzBURURhcDk3cHpnQUFBQUJKUlU1RXJrSmdnZz09XCIsIHpnID0gXCJkYXRhOmltYWdlL3BuZztiYXNlNjQsaVZCT1J3MEtHZ29BQUFBTlNVaEVVZ0FBQUJnQUFBQVlDQVlBQUFEZ2R6MzRBQUFBQ1hCSVdYTUFBQXNUQUFBTEV3RUFtcHdZQUFBQUFYTlNSMElBcnM0YzZRQUFBQVJuUVUxQkFBQ3hqd3Y4WVFVQUFBTWlTVVJCVkhnQnJWWk5TRlJSRlA3dWZXK21jWnh3akV4Y2lFS3VVc3BxVTFiWUtpZ0lYYlZxRTdRTUdpRng2Ymkwb0lKb0YybXJvRlZ0Q214aFFtYTdmaFdDUUJPaHBOQVpjbjZhbWZkdTU5eDMzN3daSE1XL0EyZnV6enYzKzg3ZmUzZUFUVVFwRlNjZEpwMGtuVmVCckpxOUJHazd0aXQ4eUFCc1ZjWTJJaEkxd0cvU2tDU044N3IwZHdhRjFBUkthek5RVGxyYnlIQXJyTHBPaE9NWFlPOC83UjlOa1k0SUllNXZTTURwTU9BYU9QL3JBVlJoQ1RMVUJHSEhJYTJvdG5PZERKU2JnWnRmcEROQS9lRkhzS0tkUGt5U1NFYldFUmpQTlh2KzV6MzgrLzBZb2RnSlNCblNScUxhRmJJWDlNdGtXWlN5M3hBK2VCV1JsZ0hmWU1DUFJQZzVwK0VEcDRYQmkzK2VJRlIvaEVBRnFZSTA2RDZKOGc1cDcxbGQwdUxhSjRTYXJ2c2tuSzdqZEg1QkdrWk9UZHpKemFLd2ZCZjJ2bVpJNUdHSkhDd2FlUzVGbHJ6SkVVbU8xbG16eDhyckhPeElDNHAwbGxOcjZqZW1uVExlei9OaWJhNEhvclNrdlpkRUxRV0hLTHc0emFDMC82SWNnUWtHamt0MXk4d0IwVk9JZGp6elU5Vm8wMDgvenh6cUVoU1hZRmtFckZiSnE0akI5Y0M4dkFoVE5GVXVvRExQcFZ2UVRwVXk3M1hIMlRIZFhRa202Tk5kazU2QVJRYXMwbDJCa0kzcmU5aEFCaU9ud0grUzFnUVdSME5ZaHFDWENicTFUL2xaYlNBNEx5aEFPQ3ZFRkVIUWFBbzFYaHN2QmtXMVVTVjluZ3Z1VWhSRzJtMVRFSjBlRWFTYk44aVNsTW9jOUtpb0F2YUs0UHFKMGdtVUZKTGpwcXNJdEhRTkQrTEhjczRERVJMYkYwT29YTFExUi9IZDFKbVJGbmpTRUF2WDhISW5JdERlRXZNWHFUSkJiM2R6NE1rdTVXaEhvei85eUFSVFBPczcxN29uNEl6aFlXbDV3UVQ2bThFUjdFVVViWlNlQUFmUGJmcGVwT2h0ZmtPTDg2K3YxTUY1ZWtNWEp1aW1yWWxyMUhvNDVXK05WMzZMcnBHbVJNOFp5TUdoYmZ2djI4dGJReENkWFR6VmQwTzFrWGY5YVhIdWpDcm4wQUhsR2xXYktEOW5XK2YyYU9VTmw2anRpVkxKc3NuWHo4bzVlV3dka1Z1aEdyai9zbktuMzFhQ0p5c3hhMTJaeks0LzMzcjliaHA0OVJLWS9RSzF1T2dkYUdnQWVzNENGeStCMDJxazVwVzVVU1I4NlkrcnJjdWsyc1cvaTRRQldLMEFuRGQ3bk5MNFpoai9BWlJpSk5oeSt1YVBBQUFBQUVsRlRrU3VRbUNDXCIsIGhnID0gXCJkYXRhOmltYWdlL3BuZztiYXNlNjQsaVZCT1J3MEtHZ29BQUFBTlNVaEVVZ0FBQUJnQUFBQVlDQVlBQUFEZ2R6MzRBQUFBQ1hCSVdYTUFBQXNUQUFBTEV3RUFtcHdZQUFBQUFYTlNSMElBcnM0YzZRQUFBQVJuUVUxQkFBQ3hqd3Y4WVFVQUFBUFlTVVJCVkhnQnBWWk5iRlJWRlA3dW16ZC9uVllIeTFETFQ5ckdzQkVGU2tnaklSRTIvc1JFMElVeEdoWm9YV21Ra3Jod1llTFV2VDhKVVRldFFPTEtqUklUQ1dKc1NEQ1RGSk5Tb2swTmF2bHRhWm5TRHUxTTM3dzM3MTdPdWZOdU81MU95eEJPNXN6OW1YTy83OXh6N2oxM2dEVkVLWlVrL1pSMGdIUk1MY2xNTU5kRDJvNkhGVjRVQU5RckoxWWpFalhBajFLVEprM3l1RFNYZ1R2N0swcnpHU2cvcDIyc3lCYUU0dHNRU2I0SXUybVBXVHBMMml1RStHcFZBZzVIQUs2Qm5kdkhvZHlic01JcENEc0pLOVNnN2FTZmg1SjVTT2M2clFFU1QvVWgxTEROd0tTSnBIY0ZRZUM1Wm5jbXZvUjc1enZZamJ0Z1dXRnRKSmE3UXZhQ3ZwbXNnRkxoSDBUV0gwS3M5Wmd4T0daMklrek1xUm5pc0RDNGx6MkZjT0pwV0lRcWhDSXRveHNTVlY2a3ZXZVZwTjc4TU1LcDl3d0poNnVUMWwyMUFrWU9UZksvM04vNGZ2UnpaVWRiWU1FaGdvVnlxL3NGOG1hQlNIaXVFTXdabXdYWXNWWjRrMS9vMEFiNU82R2RDcndmNDhHUmdRTVl6UTFoZDh2emVPSEpOOVh1NXYxQ1ZNU0crMG9wVk9VTlVrcXR4V0lSdG0wamxVcVpuOWVGMHVuMFllcThQSnpOd1BjVXhwMy9NUzluTVRKM1VVeTVOOVdXK0ZiUllEZWlIbUd5VXFtRVNDU2lpVWlLSEtLRDNQdGo0aXdHNy80R0R5NXkzbDA0bEx4TTlxejRiS1JiblI3dlY4Ynp5aDFVNzhheUxLMk80NWlwZlV5d2szdmorV3Q0WmwwWDRuWUNKZVhpWGtDU2M2ZkZqemY2eEVmRHIrUENuVFBLQUZlRG14QXlnZWQ1WnFwZEdOY09uZHVEellrT2pNNE53YUV6Ymc2d0pVS1VSSk1IZ2IycFYvREc1dmVSaW01RXJWejR2cS9ISmcvMkVqM2dLNSs4OTVaZFAwbHpzZ0pvOXR3UEt2cE5IK0pUZnRYTktDdkR5N1kyWVBUS0lzRlYza3BqK0hFOEZuNENublFockJXN3g0WXBIeDk4bTBQbkpWZmdBUkpxYTEvMFo1RmdSL056R0puK0V6RXFCMFZWV0RSTzVDVU8vbHhRci8yVVI2eW9IZ2pPQnRiMjdXWjRpUW5Pays3ZjIvb1NHbFV6cGljblVmUUsydkxadjF4MTlIaE9iS2dLeDFyQ1lRcS9lc0FNVDNPUytkYk44T2lUd2NPNG1QMGRMVmtmUjc3T1ljZGx0MTdjY2wzaWx1TGZFTVNmcE1QVW9nSGV4ZVhwREQ0OGMwR1Y1dCttYXRra2FsVHpOUmdrZlNST3ZkV0VyZXYxMlRsSngvYWRGY1d1ZjNBQi9ZTkZPdE5XZFFsZEE1enZoVVIzVjVRMHpqUExpeDEzcU5FMW5BMjZ1Mko2Z1M2VlVIV0N4d3c0UzIrQXVlTEJTYU5jV1hHRjh2RHhMd1hjbnBOTFpyeWpaVGRZb1hOakNPOFMrSzVOZGlWNDJneHFQWms5QVlsK01vZHVsWEIrek1PL1dZbUplK1VyMXhRVjJMa3BoSDBkWVhRdUFkZDhNbGZadFg3MFQ2cjZaVUE5d3IrTG5nQmdwZ0p3TEpoTEI4ZDhWYmtQakFGaFRBUWxnMUVBQUFBQVNVVk9SSzVDWUlJPVwiLCBPZyA9IFwiZGF0YTppbWFnZS9wbmc7YmFzZTY0LGlWQk9SdzBLR2dvQUFBQU5TVWhFVWdBQUFCZ0FBQUFZQ0FZQUFBRGdkejM0QUFBQUNYQklXWE1BQUFzVEFBQUxFd0VBbXB3WUFBQUFBWE5TUjBJQXJzNGM2UUFBQUFSblFVMUJBQUN4and2OFlRVUFBQU9PU1VSQlZIZ0JwVlpMYjFOSEZQN20zaGlTdUFWSGJvb0REWEZGTjdRUzBLNUtrUUpVYlVPck5xMWFxU0Jnd1E1Mm1EMG9CckVEQmNRZkNMQmhDWVFOTEZCQ0VMQkJJa0c4SkJRU0FlSU5mc1J2MzduRE9YUHZPTmZFUmdHTzlkMXo1L1Y5TTJmTzNESHdIbE5LUlFnRGhCSENsSnExbEYrWElNVHhvY2FEZklMNTJsQXpJZEdBZkRlNUpDSEM1ZkdYMTNEMXlRWHRjNVdNN2hNTGQrT2J5SGY0YVdrZjFuU3VOVVBUaFAxQ2lLTk5CVGdjUHJrbVBIWHZHSjRWSHFPanRST2ZMNGlncmFWZDl5czZCWlNjUEZhSDc2Sy9hd2JoTDA3RERxMHhORWtTMlQ5SHdKKzVWajl4WnhCbkpvZXdNdm9EUWxhTDErdWR0ZlpHQzFnWExjS1ZlVGpWVzFqUXZndXRpd1pNOHg2ekVtRmlUdTRHaCtYazNVRU1QemlCRlJRQ1FhMUtLUEtpYmpvL2QrWUpCU2lYeHdJdStXcjVPa0xoaEJIaGNIMVA0NmFOd0JDNUhaT1oyOWg1Y1JOV2RLeEVXeWlzQmJ6WjgwTnA4cjRsZWZ6MlpVNDNNTGtub0NCbEZrNzVOdHFpSTJoWnVJRzdqcExBUnVIUGZvcHJ0cDFmaXhlbHh5VHdyVTh1dElCWndKK3hISDZQNVFKNzVudGFnU1E0NVFtZ1pRUGFTY1MzRG9zZS8vRGJ4S3RybWx4UXpZeVRRbG1WVUhhTHFCRFliMXJ5SEgvRVhwQmVnWkRYc0VUQks1TzN4QnRZTm9YcThCaXFZNWVNUUlKMkVIL3oyNVduRjd6WmtrQ20rZ2FMUkVkdDV2OHRtMEYvYk1aRXFjNkVyaFQwUzBFZG9jRkhiVlNkWVlSNjEzUHplaGJRK1RXWnVhUEptZFZSRldSSlpLSGRpczFmNWZEdjBxeS9CeWFWZ2txVUJLQnNPaXloQm0wd2hidzhaaHJqTEtBUDFQUGlvN3AwZEZRVlc3cGU0LzlsRkhObHpaMjZGbUc0a0ljRUNkaTE0VzQ2WFNkZzFocGNON1ozWjdGOWVjYXZrR2htOHBCRnNHc1U3eDRabnRvMHYzd1dXbHhycUNmSHZNaURadmZFeld1NkpyQTYrcU5Idmp5TGJkMGZUODZUdEZhdE1zVnhGdEE1dGE2ckQxdTdQNDJjalhjbDlGZS9LWjdsZzhhYm5PS1NrOTBJNFk3Q3NtWVAxM3pKdmUwbTM5T0Q5bnYzVGZYWFhxUC83WGNySTRxeVU4azBIYzRNVldmcjRleXpWTGsxMUJCRlFwNGdKOFpyZDhTc3VuZkI4QzJsWkdGQTBVR2VJL0ErOHBJdlVEbDRJSGpqeGV1WDZGMS8ybVJ4UUVsZmhQR0I1R3lKaHZHbGhtU3RpM05EeVd4Y1ZmZGFtcVFVSUN3RmlNdS8vcUxrcGRFZ2VUTEkyZWpLWkhYK3FPc1Q3dEtIUzU0YmhwcTRDZlZ3MnV1ME9BS3J0eGMyWll2bGZYUFlHbDZaelZiQ2UzSmN6ZDlHMUNmOHUwajRCS2tBNFpSZmwvVFR2S205QmRUTXY5dTlxRkJzQUFBQUFFbEZUa1N1UW1DQ1wiLCBmZyA9IFwiZGF0YTppbWFnZS9wbmc7YmFzZTY0LGlWQk9SdzBLR2dvQUFBQU5TVWhFVWdBQUFCZ0FBQUFZQ0FZQUFBRGdkejM0QUFBQUNYQklXWE1BQUFzVEFBQUxFd0VBbXB3WUFBQUFBWE5TUjBJQXJzNGM2UUFBQUFSblFVMUJBQUN4and2OFlRVUFBQVFyU1VSQlZIZ0JwVlo5YkZOVkZQKzkxMjdkdWs2Nk1KWnR4clVTaHdhRnVDMTFRYU1kekgvNGh4S0RLQ2dKb21oQ0JHYUVQeFlkYmdKaWdrYjhYc0tTTGZDSEVEL0NFbUxpNXo0U045U05mZW8yNlZndGtjNjFyTjM2c2RIMjlYbnUyM3V2VCtoR0NTYzV2ZWVlZCsvNW5Ydk91ZWNXV0lKRVVUUVR2MFhjUmp3aEpza3Y2MnFJcmJoZFlwdGtBK2xTODJKQVhBcmorMm1vSnphemVkL29GQXFXNlpCOXVnbGkxeTlZejI5RndZcGNyRjIxSEk2cWxiQlhGQ3RiQThRTkhNZWRXQlNBaFVNMmpvN2VxempmUG83dE5oTldmdmNsZUlzRmJhVWI4TlZQYmdRak1ZVG5vcGo0WnhZaXJmM212WTBTb0V6MUJOSndFNERzdVlUK1c4OWx0QTFNWVkvSkJXNXNETk5QYmtMelVCd0RsL3pnT0xaVzJTd2lNaC9Ia05PSFY1NWFqYnFYYllxNTE1U1RjRXJNV1RSWVdNSkhEaU5hVW9LTVJ5ckJqNDJDZS9ReC9PNE1raUZCMnZueHVjc1FFbUlTUlRxRGlONC9wN0J2MjBPbzIyMVR3bFZHSUM0Rm9KbUduY0xnQUFLVk5tU3NXUU45amtsQ1Y1a1pKUGNkcXc0aWxPQTBzUlhaZmdSRDgvaGovQnArYk55azVLV2RBTmJyWmU5M01zM3MxaTNRMGFpbjdYd2tURVlsbTJvazJXK1lRaEpKOE5Ba1RnTFI2ZlMwZ01maGs3MEtRQlVyYzlKaU01dkZZekZ3Ujk4Ri8vdzI4QWNPZ2k4dUJ1ZjE0dnE2eHpFeU1RUFB0WGtKekgvS2lYaEMwSVFIeU12TnhQVm9IRysrV0liV2RwZFVJREpJRFhQRndhUXozNCtqMngyVFRqRHNDdUp6dHhtY3h3UEQ5aTBvNE9id1JiY1ByemFPWUNZY2t4Szd3QUx5elZrNGU2d0tXUVk5N3JmbXdaaWRBYU5CUGFHZFNROHpxZVc4azhvdkxvVWhFSXloOXJOK2JPaTdGMWVPZm9xaU4vYmhWRzRYNm5jOWlHaE1vQktOazhjQzN0OXZRK2s5ZDJIejZ6L2pML2NzZGh6cXhLL0RQalNjdktnQVdCbUFkS0ZjVjBNVUFrNU5haXllUVBlUUYrVzFBL2praFk4QVFjQno3K3lBRUYwNFFXWUdqd3ZEWG5UMi9ZdEJwNStjaWk3c0pCdWpyaGtWZ0dQM25FbjNPYzdnNzhtSXZFaVR4QlMwSWk4TGpiWHJjS3g1Q0QwanZtUSs1SVJiQ28xd3RqNHJhWmtsRnhPV21Rd0w2emdPdHlLdmZ4NW5mM0JoY2pxUzhydTFPRmNSQXlxQXZhSklkZVJXWkthcWVicmFnaERsTEJXdExWWGJSajhENkdDU3cyNUJ1Z2paQmgyMWh3Q01XZnFVMzVPMjBNb0FUaWduc0pjWHBnWGk4YzNoMjY0cjJQdk02cHUrV1lwTXlXZ0E1M2lxSE5ZMzJ0bXNibmNaMG9vUjBkMzVPUWlHb3loY25xM1Jpdmo2ZUxVeWFkSDJJaXZrWnZkMlV4OWQ5MzQ1MlVzbjNFaVhxN05wSS9ZZXZ3QzNKNFJkamxJY2VvazVlVU96azBGcWFQaUF5YmNEVW0wcmxDN2Vod2NxVWY1QXZxSlcyN1ZhOExKQ2VpaVlGejJuSFZUUE9WRGE4V0ljRjBRYzJWT2hOZjYvVnkzVms4bE93bDQyNllaM1hKeEVhNGNiZzVlbTRhSXdNREtiTXZFRUZZVERYcUlwak5SUFprcVNILzBXTVgxcUUrL2czMFdOYk1Ddk1UZ2g2K3BaejEvS3huL1dZbFQ1eUtqZVVBQUFBQUJKUlU1RXJrSmdnZz09XCIsIGdnID0gXCJkYXRhOmltYWdlL3BuZztiYXNlNjQsaVZCT1J3MEtHZ29BQUFBTlNVaEVVZ0FBQUJnQUFBQVlDQVlBQUFEZ2R6MzRBQUFBQ1hCSVdYTUFBQXNUQUFBTEV3RUFtcHdZQUFBQUFYTlNSMElBcnM0YzZRQUFBQVJuUVUxQkFBQ3hqd3Y4WVFVQUFBTk1TVVJCVkhnQnJWYk5UMU5CRUo5OTc5bVdDZ1VxVlNRQkN3YzFKaExRR0E4bUZDOGFUUXhHL3dFUGZzU29zVjY4RVV1NG1QaEZJaWROaEtzWERmR2tpZkxoMGFDZ252eHFRYUUwcVZDZ2ZMVjk3em16YjdkOTJJSWxNbVNZM2JlenY5L3V6T3h1QWRZUjB6UXJVRytoOXFPR3paek1pRzlCVkQ5c1ZHaVNBQ2hXZXRZaVlnWEFyNk1Kb1ZaUWYzQjRFdm9HZnNBUTJzUjhpdnY0YThxZ2NmYzJhR3R0Z01EQkdqazFnZHJCR090YWs0RENJY0E1OE8wbnd6QTJsWVR0WGpkVWVweFFXcktGK3lVWDA3Q3dsSUx3eEJ5WTJIOTI5d1FuRkJKQ2tvNDhBckZ5enQ3NTZCMTBQLzBNaC9mdkFFMVR1UnRqNUFOWmEwMDJZWEU1QTUrK3hlSFNtWDNRZnZHUWhMc2hkOEprek5GOG9MRDhpdjZHNTIrK1ErMU9ENElwcUl5cjVaemJzRWwvWms0blkzTndLbEFQdFRWVk1sek5PQzhpQ1hyUW5FdW4wMllzRm1NdWx3dFVWZVhBaXFKWTRJejluYXVzTlF3RE1wa01yS3lzZ00vbkE2ZlRTVU1ET09jb0U2c1AwNWRvTk1vbmtRTUJrOXFCcVMyQjdVUkVRRW9FbXFaeEVpR1ZHdjQ3VGEzVXhJU2h2SHBwYUtvQ3Fuc3JVeDFiZUVqeXlzd09McXhDSkxwdW1zbDUwSFVEVW9GV3pkSFFRRU5CSW1palZxYnJ2dUxxZnFoUVNqWGFnZGRyclo2dm1GbHdxekp0Q3hWMjlVUUNsS1VsMEFucjZqVnczTGxId3dFaWFLS1dQam9LRkcwZWNkd3F4T05nbHBUZ0J5VlhObGFnYkdzSGF3eUJXVHJONTlLSS9uWklqdnFKZ0I4b2MzeU1PekNoZ0JPNFlyS3pKUFpFVTU4VVkwK1cyZVlhaWNRcWd1eTZzdUIyMFhWTGk1QkNHTFRvQ0crVWw4Tm1DSUdydS95eW04Z1NxQzBCMkN4UkdodGxjNFJDTklqYXFsMitBc3Q3OW1ZTVVmdHNnNkNVWEtvb0hYTlNldXk0ckpjK09taVU1Qmx5bXAyZHhYRHJlUWVzS0FKeDRFaThXT0pDNmhVRW9wUVBVTS90ZHErNlh6WUNMdjA5SG8vODNHdS9pL3dnTHJ2NDlEeThHSXFJSFJTN0MxdzlFcHc4VWdmVlBsNHMyY3VPbHlrMWtJVHU4QWRWM2pMNEdjOUE1K01SVWZmL0lySE9RL3VGWmdsT1FnOVBCQ0Qvd1FtaG9VY0hScjlNdzltYnIvSEJXVmdYUG5DZ0d0clBOM0ZyQXcvSlRxRW5NeWhJckNmei9SVDBEWTdEeDYvVEVJa211VTlGcVFOYUVMQXRVR2NITHZoa0Z0NjA5ZWozbXNWTHYva2Z2eTZDQW1ER0JoZ1czMEtpek5lVVArNGdDbzQxY3Q1SEFBQUFBRWxGVGtTdVFtQ0NcIiwgQ2cgPSBcImRhdGE6aW1hZ2UvcG5nO2Jhc2U2NCxpVkJPUncwS0dnb0FBQUFOU1VoRVVnQUFBQmdBQUFBWUNBWUFBQURnZHozNEFBQUFDWEJJV1hNQUFBc1RBQUFMRXdFQW1wd1lBQUFBQVhOU1IwSUFyczRjNlFBQUFBUm5RVTFCQUFDeGp3djhZUVVBQUFSZFNVUkJWSGdCcFZaZGJGUkZGUDdtM3J2YnJidDBXOXB1b1dqLzFQSlRXMW9DUlVta0VOUTNmb3dHNHhzaHhjUUVRdnNnUkxHeVdFZ1VqZnFpMEVnQzhVR2JtQm9MU2tLd3doSWZxcWJscDViWTBwUjFvV20zVU5pdSs5UHUzcjNEelBST3U5dHVDWVNUUFpselo4NTgzNWt6WjJZV2VJaFFTck9aSG1SNmdlbE5PaVAzemI0R3BpVjRYT0dUVElCSGxaUHpFWkUwNEh0WjQyYWF6YjlqbHp5WVBIMGFjZGJTOFhIaG94WVhRNjFhQ2R1V0xiQ3NyNU5UQTB3UEVVSyttcGVBcDhNRUY0RGhUeitCNGZOQmRibEFjbktnMk8xc0JvRVJDb0V5VFhpOWZBNmNQN1pCcTZxU01HNUdjbWdPZ1JtNVlBOGZic2JFc2E5aFdWTUx4V0lSVHJPWFNrMDFJaEhvdmY4Z28vNGQyRDlza3NPTmNpVkU1cHcxbDNsYU9QaGt5M0ZZV0VTS2NLQk1pWEEwbnJKRDBWUWdHRFFKcU5rU1RIWjN3Ylo3RCt3SG1tUzZhaGlKVnhLY1pNMk94TFdyQ0t4ZEEwdGxKVFM3QS82c2ZGeC9lZ1cwZ0lHRkxnZCtYYklRbW1zeEFwY204SUx1dzlJbFlaUU45c014NGtNaStEL2kxM3VSZGU2ODNKZUxqR0NqWWthL2cvY0V0NzhKRmg4MEZwRVNDYU90NGpXMDFLN0YzeGtGNlBvM2pGdDJHLzRhOWlQRDJZRmZGcFNpZFhVMWZucnhkYWpoQ0ZTMk1qNDNlcVJacG1rREwzT05HZHRFdGZUMUdjYlNaWWE2YkRtTWdnSUNpeFcxK1JyNXpmYThNcEFiUmVZRVMxYithcFM2SXJnem1vZHNTd3diLytqQ1M0dHlFd1lMZ3VvNlJXRWhZZ1pGYkhCUXM1YVZjZGdHd3V1ZHM0MnpFb3hHbzlBMERhcXFDdVZ5eHRPSGRSV0Z5SGM1Z2FFaHdPRUFuRTRNOWZrd29Oang4ck01b3BJTXcwQWlrWUN1NjhqTXpHUXV6cWswOFZQSk4zZHNiRXc0Y0FKRlVWZzFFcUhXYlp0QnNweElmTjhLOWUyM1JKbEttNDdkUmV6c3VXa0NTY0xuNStYbGNRS3ZKZzhVSCtRRHM4NEZqRTJ2UWhrWkJqbCtETFM2R21DQlNKdUd3OEpIbEtNWkVGZlp4NlJFbXo0UWhLUzBVb3lkTzRHZUhtaGJOME52UHlQNnBFM0x5MU44MHhDQUUzZzVFNDgrZVVDS2V1QURjUlk0b05yNmc2aDhhUnVURThBM0xYUG04RFNiRWxCTUFsaXRWcVFWdHZuRWR3c29LaElCekxIVFNCTEJGVzU1bUc0WURTU3c1MmluVGdqakpETjdjZlM5dzBwSjhMYWkxYXljU1pGcGV3dWV3NzZEbmZxVUorV2J4bjRHUG05Y3B5eGZJQzZDZGw1RmZKTjVKZUdWZDgvQzArMFhsU0p2bi9vS2lpOVdoVUJ1OUFQc2RGTjI0WkZSUDJocEdYYmZyY1IzNTI4am1hQjRzUjBEUDIrWDhaVXFiRlA0dlhHUmZ6WHRxcGx5VEpJVHZRUkhlbXlJNzIwRStiTVR5dThkMFBlL2ovMTN5cFBBTVUzUzl0a20rWEVxK1M0cWdYblpmWHppTXBxL3ZaS3lDaTdQMk9KWWtVdGdEL2pSUVVvd0hvcW5BUFBvbTNaVjQ2TjZIdVNzeTg0a2FXRE5sOXllanlTOVNQQWFCbDR0TzFPdjZ5UVNOMnY0bzRPci9mZnd4cjRPL0RjU2ZpaDgzYXBGYUdMQXZEV0Z2MnB1K1pIdXlXd3dTY1FKOTNTUG9OM2p3N1ViOStBZERnbWZiSWNWNnhuZzFycWlaT0MwVDJiNlJVODkrcWZvbzhzRitnVC9MaHBNZ1B0SmdEZk5QcmRaNXZQS0EvckhnMDRKQWRrSEFBQUFBRWxGVGtTdVFtQ0NcIiwgbWcgPSBcImRhdGE6aW1hZ2UvcG5nO2Jhc2U2NCxpVkJPUncwS0dnb0FBQUFOU1VoRVVnQUFBQmdBQUFBWUNBWUFBQURnZHozNEFBQUFDWEJJV1hNQUFBc1RBQUFMRXdFQW1wd1lBQUFBQVhOU1IwSUFyczRjNlFBQUFBUm5RVTFCQUFDeGp3djhZUVVBQUFQa1NVUkJWSGdCcFZaZGJGUkZGUDdtN3QxZGFtaTViVzFMaURYVnhHS01QNndFZjRpNm1CZ1ZvNWFBRUh6U0pnWGV0RWJhb0VsMWExK0t3WWlteGtRZzVjRm9UQ09rL2lUR0JQdmpnNG0xSXFpRThOZVdzdENVaGpiUWJuZTc5OTdobk5tNWwrMTJXMHI0a3RNemQzYk85ODJjT1ROVFlBRklLUzJ5RDhtNnlBYmtEWXpydm5xeUt0d3FPRWdUTEJidDh3bUpQT1J2azR1UldmemQwMzhSbmQzbjBFdCs0dHFNR2xPMW9oQVBWNWVpWnQyOWlLNWU0WVZPa0RVTElmYk9LOERwME9TS3VMVzlIME9YSmxGZWNnZUtpOEpZV2hCVTR5WVRhVXhOejJBZ2ZoV1N2Zy90V2E4RU5XSWswanhIUU05Y3FiZDgxWWUyNy83RDR3OVZ3RFFEYXBnUVBBYSt6d1JMSkpJMi9qMHpoaDBiSDBEVDlqVWUzVHZlU29TWGMzSkhPUzB0Ky9yd1pjY0ptdEdkbWszb1VTSTNsMTVEV2YrSlViejErb05vMnJiR1MxZUVSQVk5Z1haeWJ6ckhqMkZzZHl2TVhlL0J1S3NTaG1HUVJvYlk4emtwVmVhNkxtemJSaXFWUWxsWkdjTGhNUC9jVFRIUENqMzdBZTRadi84K2lLRWhCQ01SNEkxYTZieTJHU0lVOHBsWlJQb3p2eUhDQW13c1lKcW1FdEVvTnVqUEJtNmxlM3NBSXVjT1kzUVVadHZuSXJ4MWl3ajgvTk1zc254Z1liWkFJSUIwT3EyRU5PcVpyMFlKL1BpREl1Y3RkWjk2R21KcUNzYTVzd2krdnd1aHVsb3A0dkU1SXJtQ25GSzJaRExwZFVVNVJlUFVzQ2FmZnc3eTkxNklKNTZFMjlDSUpWdTNBQVVGSE9WdmFJZjFHUGFVcjhkd3FIU1d5SFRLUWRwMjZNTlY5a2gxTWY3NmVoUC9QR2hDSHlnbmtZRDl5Njh3cWxkQ0VISHkvNU13djJqalZQa2lteFBkZUdua0QvbEorWXZZVy9hQ3NLbkNYTFhSZnJKVTVYa0hrbEJsK01zYnU0d2xHemRBVUE3Vjk3ZmZ3UHpzVTFLbW1YRWZWUWw3MjNaRllDWWx6SFJLT200MmVaWklWa256Q2dhVjBySmxrRlJlUnQrZk1IODdBamV5T2pjU0IwcWpjbmZGeTRnSHJka3NPZUNyUkdPQzk2Q0xHdXVTRGUvQ1Bud1ladnhDSnJLeUVtSjRXSTF5MTY1RnV2VmoxNjFlYWN4SDZwMEpoMWJNNTZDd1VJbDBjMEFQdDRLdnZBcEI1UDVDaVZ4V0xKY3pIZCs3cVVPZFdJZzhGL3FnTVRwNUJiekpYRW1ZcGtvQ1YxSlJFWnp0TzJEdmJOQzN6ODNoSFRoR1NVbUoxMzJQZDFXb05EbDAyQklIOXJ2T3prWkRwV2h4M0xPdURNdXlKQjA0RGp4SThiVnpMcnVQOWg5Rnk3NS85TVFYSjZBdVBCSm8ycllLSDlSRnVNTy83RlJldVVGTzNlRThnQWRtNmsvZUFubkVJMmMwYTg0NUQwNk1IRDg2T0hicUNqWTFIc0hReU5TQzlORkhsNk9wYnBYeVdlUXg3eVBmazFtdlJUSlA1dDhqNk93NWorT25yMkNRWGplR3RUU0VaNGl3Sm5wM05uSGVKelAvb2pPUC9rRzVlSFRKMi9qdm9sNFRqR2NSRHVpK21DN3plWEVka0lWWTRGdDhnODhBQUFBQVNVVk9SSzVDWUlJPVwiLCBMZyA9IFwiZGF0YTppbWFnZS9wbmc7YmFzZTY0LGlWQk9SdzBLR2dvQUFBQU5TVWhFVWdBQUFCZ0FBQUFZQ0FZQUFBRGdkejM0QUFBQUNYQklXWE1BQUFzVEFBQUxFd0VBbXB3WUFBQUFBWE5TUjBJQXJzNGM2UUFBQUFSblFVMUJBQUN4and2OFlRVUFBQU4zU1VSQlZIZ0JwVlpMVDFOUkVQN3ViYUV0aFVLUmtvQkF3R0JpZkdKQ29pWW00TmFZeU5yRWhZbTR0UzVjVy82QWNlMEdmb0p1WEtuVmhZbGlEQmlOSVVUQ0k0RVNnYmEwcFpTMjlEZ3puRk52VzhBYUo1bWU5L2ZObVprN3A4QXhvcFJxSTMxQ0dpVmRWSDhrb2VmQ3BQMzRWK0ZER3FCZW1UeUt5RG9FL0NFMUVkSTJIdWR5T2V6dTdrcGJLcFZrajl2dFJtTmpJM3crSDd4ZXJ6bWFKSjJ3TE92WmtRVHNEZzJPdmIwOWJHOXZvMWdzQ3FCdDI2SXNURVI3VVNnVVpOelIwU0dFV2lKRU1sRkRvQzBYZGdaT3A5TmlIWVBTQWRFcVkwU1pMSi9QdysvM283VzExU3cvTWpleGpNK3BtV0czTVBqT3pnNDhIbytBMWtQQUxkL1lRY0x1dWt4bmxteTluMTNUeHBhdzVYeGRCbmE1WEJVRVRqVXVrejNFM2JnNWk4ejZUeUhTOFp1VUcyanJGM2tRaThXRWphMDNBRTdMdWMvV1ZzaHlGR3AxR3Z2bjdpTG5Da2k4UXFHUVdRMjY2V2ZNQkpVUDh3WURWZ1plL1FnVWR3RnZHeXliMXJPL1lNVytBRHZyVUNldm9YVDFNVWNlTGdvNkI1NngyRWlTTUtQZDVoNm5vZE5xVVFLQTd3U3c5QnJXMmlkVWl4cDZnTkxnTFE2SWpNMTV4dElFSTB3d3hEMU94ekpCZkI3WS9BWjc5ams1dHdVb1pBVERxdjVxRmw0QmZhTkFnNzk4YXo1djBwZWszNjBESXRsZzh0eEt6TU9lZmdxeHE1Q2xpWU41SlVsSHM4MWRLQTJOQTNraTNrc0pnVE1CSEhIcWR6c0RXQTVrejNVNjFIUUFya29IYXR6U2VSSHEwamhVMTNDMXh3NGprQ3ppRE9xUHgrT3lVSTRCK2Q5ZWZrTUIzWUMxUGtNVzN4ZkxWZkEwRGhQelhlenY3MHZxQm9OQm5rN3lEWmFZZ0hOZjU3REl1L1JubkQwMWlrNWZENUJhQVFKOU5hQ3g3REptdGo3Z1p1K2Rpbm1UaVNTejdOejMzR01DNTlVR0ErZXhrUDZCdWVSWHFFQnZCVUMybU1aaWVnN1RHMUVNZDR6VUVPc01Zbm5KTHVJZ0ozakVaWUt2YU56MFBURk5CRE5vYm1pRngvYmlSdmNZM3E2OVFDcS9SVit2R3hmYXIyQ2c1VXpaUmFiYXRyZTNHNElCVTR1aTFJeHllcVZTcVpyNnM1bGJ4MHBtSHZIOEJ2cjhnd2g1dXhIMGhHcjh6eG9JQkl5THB1ajh2WnBpbDgxbXl4K2RWWlA0aDRzQlo5YzBOVFh4VkdXeDR3NDFVc041QTVkcHAxVi9BMmJsTXhxY1pVSmoxanc0RVJ4VVZvbEZKcE1Sdng1MUUxTzcrR1Z6WkE2RFIzQ01WV0g5cUl0UVhCUzlENHBpbzVMSnBDZ2xnOHp4V3RVZmdURHFFZjNvVDZuNkphcis0OTlGV0FNa0hJQ0xlaTZpMC94SStRMlQ3WUY1U1MwMlR3QUFBQUJKUlU1RXJrSmdnZz09XCIsIHZnID0gXCJkYXRhOmltYWdlL3BuZztiYXNlNjQsaVZCT1J3MEtHZ29BQUFBTlNVaEVVZ0FBQUJnQUFBQVlDQVlBQUFEZ2R6MzRBQUFBQ1hCSVdYTUFBQXNUQUFBTEV3RUFtcHdZQUFBQUFYTlNSMElBcnM0YzZRQUFBQVJuUVUxQkFBQ3hqd3Y4WVFVQUFBTXBTVVJCVkhnQnBWWkxhQk5CR1A1M2t6U0pMU1JDS2lqU1JDajBWbnpjUERTWGlpRFkxb01nbnJ3cWd1bFJQSmkyRmk4aXZmWGdvYjM0QUwyMGdqZXAwVk1McG1uVlZpdzFxWDBvYVRVSmFaTGRKTHZqL0xNenlTYlpTSUlmZk14TWR1Yjcvc2QycHdEL0FDSEVTM21mY29FeVRxcEk4ZDlDbEFGb0YzaUlDN1NLbVdaR2tvWDRIVHFFS2IyNFZoUUZDb1VDRzNWZFozdnNkanQwZEhTQTIrMEdsOHNsanFZcHh5UkptbXBxZ09YZzRxQ3FLbVF5R1NpWHkweFFsbVZHQkJyUnZWQXFsZGphNS9NeFE0NHdOUmxyTU9DUk0zY1V6bWF6TERvVXBRY1k2NEpoUkxOaXNRaWRuWjNnOFhqRTQxR1JpU1JxVG9kbExBdUs1M0k1Y0RxZFRMUVZBeHd4WTVNSmx1c01QWk9RK1g0c2pUZSttNEgxelNSTEY0VnRObHVOZ1ptaVpHS1B3K0ZnV2FNUjc5OE15NEJISDhkRjc5QXowR2hFazdmT3dxWHpKeXJpbFhyU09VWmJud2xtZ1VSeDdGZDNkN2Q0ZkJRekdNRlo1T01lYlAwNmhKMmtBdmVtUDhIRXpCcjhQRkFheEt3Z3NzSnNzUEU4QzBRSURZWnhOaGZaTWxwQ04rNm5WWGo1ZGdkdVRDekMvSWRkWWhZM205UWJpckxoSzgwUlJJUFRPRnZkK0kxYkdOV1NEZ2ZVNU50MkZrS1BsNlhScVNoc0ovTTFKbGJaaU42STE1Y2lnRDFnTzN1SFg5QVM1UXdUVm5lajlqWVpEMGx3OHBnYlJxLzF3ZldMUFdBRjBRdE4wOWhhOU1GZUYwUGRDTFRwaFBIUDlqNzAzSjRFZC9hTHRRRW55dXQrUDhEWGpZcEJBbFB4ZERucGtPZlIxK0pxZW9rODJuMHUrY3FIMEFwcy9vQ1lwbVZ1QU1Geng2dWhjSGkxUEhtYW1DYXpXMDlhRnNmdzVQNStzWXloUVFSbncwRS9tQjFHMGxIOTgvcGRhU1FUbGFBTjRHbkg1U0d4bk1NbTQxOWRDbGVETjkvQTk4VTFlTGozU3IrU2ljcnRDdU8zbHRENkgrSDFwemhsUE9UZi91V2xUYkxaNWRNTExnZFJLTlUyaUdkeWxOcEtySEpIVk4yTkN3WnZLVktjR0NmNU5nMFVibEI4TUc2KzhRSzFLUnJYSHhFbUlndWxmWEZFeUxxT2hJVEZEaTBXSTRXKzNnWWp4VVI4cGw0WUpGcmtuVms4Yk5hMHVqTFJuWDIrY2EyL2o0RDJlaDdJeWlxUUh3bGprOGNMOHNBQTJPamJJZzhFeFZITEs3TlpKdGlUV2RJNkZzaC8vSGNSNGdJcGsyQ2MveGJtcjNsVC9BWDNsTWNBUXVYWjJBQUFBQUJKUlU1RXJrSmdnZz09XCIsIHFnID0gXCJkYXRhOmltYWdlL3BuZztiYXNlNjQsaVZCT1J3MEtHZ29BQUFBTlNVaEVVZ0FBQUJnQUFBQVlDQVlBQUFEZ2R6MzRBQUFBQ1hCSVdYTUFBQXNUQUFBTEV3RUFtcHdZQUFBQUFYTlNSMElBcnM0YzZRQUFBQVJuUVUxQkFBQ3hqd3Y4WVFVQUFBUnNTVVJCVkhnQnBWWnRUSnRWRkg3dWJhRjAwSzY0TVVkQUFYVzZrWkNKb2pNUklUUE1YeHJuUjZJalllT0hYd3paOEo4L1ZJcC9UQndzaGdVWlVUUEV6eGdYNTJabVpzZ0d4UmhXekVSbXh1Wk0rTnptMEkxQ0MyMmg3ejNlKy9aOVM3RjBZbmFhMi92UmU1N25uSFBQUGJmQURZU0lYTEkxeUhaS3RtRmFsQ2xqclY2MmZQeGZVVW9Hd0VybFVESWl0Z3o0WHRtNVpYT3BlZDlJQ0YwWGducnZEd2w5VDQ3TGlzTDFxYWk0eDQ2SDh0Tk1WWjlzall5eDk1SVNxSEFZNEJJd2pMYmVhVXhNUjdBMnd3cVhuY09leW5XRjJYbUJ1VEJoM0xjZ2xZQ0R6NjNGSmtsb2lGdVNOQ1lRR0picjdDM2QwL2k0MzQ5N2M5T1FZdUZ5RjF0aUM4a1BpeXBoVHBMOWZuVWVPMHJTc2JkOHRibmxOZE1UWnNaY2RyK29zTFQvK0NjK1BDMmtSVGFKcTM2T0kyQkwzSTFTa2NBcXl5d0tiZTMwWWxFS3M5L1pZSWFyV09xUG1BU0haRmV0aFFZUStLTVkzSDRmdmhxdHd3OFQyMEdNNi9oRUxNcGpZRE5HZXI4MSt6aWVYdmNacFo4WVJYamZFSnhmZDdHVXNuSzFyVnNTYkdXRzljTnF4WCtoQUlIUWRialBlWEE1bUNkUlZNeFpYREJaTkR3U3VIaU5GeThYTmxQV3lTdlFqbGlZZGcxWUdCd0VMeXVEODBTWDZXZW1WWDV0VnlOdHRoc0RrMWtvV1RjaVRieU9ZQ1EvRmhXS0hSaGg4NXArVk4zVmpxS3hBWWc2VG1LQ2NUMlFvYkFLSmpTUEJ3dWVIaGhlMUN1Q0o5V28xVnVBbHArTzR2a05uY2kybmNWdlUvZEhRNk1mS0VPaDYxZFJVOWpFTjQvOURPRzJRQnZRWGVJcVRucm9mRDVZSEFSZUthQmxIMEVLZElKeUZhSXBkYmlWbjF5RGQxeVRLbFk0VWdNSTAycWtXUm55SE1Na2dWRXhkUXphQVN2b0RHZUxQaGtISXVhSTdRd3ovek1PNnBoOGlmVlB2MEpmN0xwRDBZNG9EL1FMZFhsR0dERUhBZ3RPT0cwKzFHeHNwcDNzQTJMdmdFVk9TanZad3IremlQZ1RFY3pXWjdCUC82ckZSMzI3MlV3b0F6bk9XTDdsV3hjMW9tdU9sQmxVYjJ6SHJ2VnRTRzhMUUJ6bWpFS0pONTQ5SXNqeXFxQnZuRHVvcWMvTi93NWxNUWlWWGhyaVBWUUVJNG9wS3oxRWorZTA0b1hjTnBieFpRRFVLZmY3ZVNMd0F3S1dQWUo2Y3g4VlRZTnVmdjU4RVRkY2l1M0pkY1hzOXNVSVBpOXJadHI3TGNRNk9UUS9UekJaQjY0VjhCWThqQVBuWG1kZVQ2a0ZTV1RUclRHQ0FjWGVvMFpjWGlxdDFjTEl2eFNhWlJOWjltdGljSDhKcW9MSFVOWDlIYnlUcFltb2NlZSs3VzZiT2Z4V1paRTZaSlZKQ0Q1V0FmUjY5SHhtbVJLNFd1QktaUzdiZDdaUk96NytWRktMb3dUUnNpRVBHRDI3YnpGWEM3aTh6cXB1ZEt0WjZodHZnbFF1MTJxWU8rckF1dysrVGR1K1A0UC9CQWZCZE9IZ3MwNXpzU08rRnVYREtIWml0QkV0ZzBGMFhxeUJQK0xDaWtTbHJHeDFwVGJzS1YybFZtTEZUczhBTlpDZFhzTjVYZ040NWx2d3k3dGdWc3diV203c3FTdE5NOEdWTkJxWUNRK09XM1o2dlIyYTFGQnpPSUJMNmdJdUtYanhuSVF0dDFrbHVCMWJicmZHZzd2TnlYSlBacjFCb3NmbjlGZ0VYUmZuTVhSVnc2VnBvV3M0YkV3SHJOaVFHZys4N0pPNXZPUFJSNytEVmk2bjZDYitYZFFiQUZOeGdNUEdtdHRJODZUeUQ1U29lTDZ2cGlzSkFBQUFBRWxGVGtTdVFtQ0NcIiwgeWcgPSBcImRhdGE6aW1hZ2UvcG5nO2Jhc2U2NCxpVkJPUncwS0dnb0FBQUFOU1VoRVVnQUFBQmdBQUFBWUNBWUFBQURnZHozNEFBQUFDWEJJV1hNQUFBc1RBQUFMRXdFQW1wd1lBQUFBQVhOU1IwSUFyczRjNlFBQUFBUm5RVTFCQUFDeGp3djhZUVVBQUFNYVNVUkJWSGdCclZZN2J4TkJFSjdkTzBNa1VsaVdlS1FBSlhRa2tBalJoUWdRWlFRa0RZOEdCYWdRRFM3eUVBOHBUb2xvS0hrSUVoNC9JR25TQm9UTkQ0RFVTUWhWSklJZDIrZXpmYjRkWnZadUx5ZkxCSWN3MHFlN0crOTgzOHpzM0swQmRqQkVUQkttQ1V1RVZkeTJmT2hMRTdwaHQ4WkJJVUc3TnR1MkVDMjhIMmFvclZxdFlxRlF3STJORGN6ZnVJYUYwLzFZSExtRXpxTUg2T1UrWTFOVjZXWSswVVErVFpjTTN6ZHlXU2paZHFQZTNXT1RnWlFTOXI5NkFYSmxCWlJUQm5RY1VPdmZLUWJnd0x2M1lQV2RNalFaSWNTTWVaRHh6QTE1OWVrVGNPNk1nYXhVWkVkSEJ5UVNDYkFzQzJTdHpqNndoUUM3c3hNU3ZYMWc5eHdINS9wVkhXTUU0cFZJMC9NNHVmZm1OZXp2SHdCcEJaa2JXUFVhV0s0TGtzQlhxK0tDRFFqN1R2U0M5L0o1WEdUYTdJbXBnRnVUOUplL1FaMFcyVWNPYXhLSkNxbmNTRURVYWlEY2lxNUMvMTVsVklPcXVyckFvOWpHbHl6ekpRbXpXaUJVdXNVUDd0aE5zT2hxMGRab0V1VnI0bWpEYWxVUTVCZEVMaXFPdnVkMXVocXFsbVByMjFWYzRESG42RkYrOGxuNXg3cGVKUE41eXBDSWxBcUlxUW9OWFlFYmlGQjdwQllMSUxlMmREdFVMbWVxWUV1emIwUlB6ZUppa0QyMzVOZG1rSjFTR081UkFCSUF5aHhJSkFDUk81VkFjUE1uU0lwbERwKzRRanN2ZUg2NVp6VHJvQ2hqTTVJbTYzYU14VG1XNGZ1KzlxVlNLYjZzMmVHRzZCL2ovVGFCN1ZyVVJrSXNydHR1dGZCZnJWWFZuUElhMy9DTHRCZnl1REZYYUFVd0h6V1B2aTMxUXluMENZcUFCSGRoM2l1WHkyalF1REtzL2EyZ3dsanZZQXJyeEJYYUVsZndTWmN5UEF6L3c3ajc5amJYQWdzODB3S0RReUFHejBMNzI5cWFISTRkSlo0aDQ1cW4wUlVGdXZuSVQ5YkVsRjVrc0Z0eW5mM2JEOFkxUjl4clppNXZFd3BjZ1F4RmRrdk9Kc2VuUVBTZDVGdE9Xbit5dFFBclJZN3hTUkNtRXZ6N3V4QlZTK1J5WXRLNFowTE9wc1dJbWVoOFd2NktsVnpXTHhhTFdDcVZOSGlLVkRneFptcjgwY3VvY3RuNHlaYUJIVE1LRHZMb3lHdzBHdWk2TGgxZ0RucjM3cUk2TTREcTRqbFVqeDgyRTdjOE12OGt3b2YrSExadlM3aUhmeGZwa0NBZkkxd05mZHpTNUU0Y3Z3RjlJck1RTDlCMkhnQUFBQUJKUlU1RXJrSmdnZz09XCIsIHdnID0gXCJkYXRhOmltYWdlL3BuZztiYXNlNjQsaVZCT1J3MEtHZ29BQUFBTlNVaEVVZ0FBQUJnQUFBQVlDQVlBQUFEZ2R6MzRBQUFBQ1hCSVdYTUFBQXNUQUFBTEV3RUFtcHdZQUFBQUFYTlNSMElBcnM0YzZRQUFBQVJuUVUxQkFBQ3hqd3Y4WVFVQUFBUHVTVVJCVkhnQnBWWkxhRnhWR1A3T25UdVA1dEVtS1VrVHJLWTI2YUJXUXdNcTFpNHN1Z2hJUVYyNU1CRVVYYmt3RVZ5NHlzU1Y0RVp3NFVaSWpJSXZpc1Rvd29YVUtxYUNZSnFVaUpXbWFadzAwMGtha3NuTWRPN2N4em1lLzh3NU4xTTZVMGI4NFovem4zUFArYjcvZGU4WjRDNGloR2lUT2k3MW5OUVZzU2ZiZW0xVTZoSDhWNkZER3FCUm1heEh4R3FBdnltSGxOUTJtaS9jY0RHMzZxaXg0SEsxcDdzbGdyNk9LRTcxSmpEUUhUTkhkNlJPTU1ZK3FFdEE2ZERnQ3ZEemhRS3l4UUR0KzJ5MHhoa1N0cVZPT0I1SHlSUEk1SDA2ZzNlZjZjRFJEdHZBcENUSnhCMEUyblBGUGoyZng4eGZKVHpZRllOdEVhaUZHb21rUTRwc1pkdkRtV1FDSTRPdDV1R1lpWVNabk10aG50SXlmYkdBMmNzbG1ZS1l4TFVxV3hnTGZTRlQ0b1lFRkFHTmY5OHM0NFVIOWttU0ZwT3VRVWx5emJoR3FXbHpYUmR4YnhmSmcxRzRJb0l5dDVTNjFXTlFaUXZ6aktHekpZcFBGMjloVWFaVzEyOVNPYVM5WDZGSkpwTlJiUEY0SEw5a2JQeWF0VVhSc3hoalZSa2xqNWtPb0JLK1ZDNEhqdVV0RndOZEVidy8xR1lPdEZNRXo1TlZMcGRWdUpGSVJEMDVmVmpnalVjQ2RxS1R3L0dodE96TG5BY1ZtOFl5S1llS29PQXhsZExGckcraUlCa2xndWZJY2h3SGx0eEFTaTViMTlmUUhoZDRzZC9IMjRPZU9CRFQ0QVpZcStNenVjYXc2MUd0cEhQeS9GdzZKSGlLQ0U2UTVmdCtTR0F2TFNFNk94djJTMCt6WU9PUGUzZ3A2YU0xS3NLSWpPWWtuaHRBT2Naa3h5M0lLTFFjc1hWQndEbEhaQzJOeEZkZklIYnBFcXpORFZpWjYzQ0hYMFp3TEtsMm4rd084TmloZ004c1I5aTNxd0Y4TGhnWHBqeXlveXlhQkNoNi9EWUMzWDRNNHI1ZWVCSXdjZVpaV0tWYkNGNTlQUVEzNGdaNWk4Yy9BMnY5UlBoQmNlK0JNUFVXNFBIRGN1R0NXaWFDYThSRXFhRWlzOXd1Ukg4ZnZPTVBneFVMdDRIL3VIRlduRTEvaEMwM3UvZGkxSkNlNW51TnVSTVN4R0t4U2lkMWRpTC85VGVxSTZ6bEsyclhVdTUzZkpuK1VGek96OWNGRFRNaDllaitoOHowSWhHY2wzcWFDS2lUdUNRd2paL3Y3UkpUVjk3aFAyOStGOEZkUEs0V3FzS3BuaUV6bmFFWGpZcThUYk5jTG9jZ0NPREJ3ZXo2dE5SSlVlYWxob0JORFE0bDdzSDAweGZNNnYyMjlIWkhrdnhFVVRRMU5lSDhQOS96cWRYM3JKdnV1b200TVh4UitSbC85R096TkZYOUxYcEY2azQwR3NXTjRLcTE2YXpyNzBDajZKVmgrTmdZK3ZZZkoxUGREV1FvQW1JeUM4UEp0ekFpTjFZOGFnQllwNGJBUitSWkxSTWE4NDRMSjRYS2x4VlhkLzlFNm8vWGtDMnQxYzBUQVE4Y1BJbVIvakU1UGxFTm5qS1RXbGZtcUNaUmIvamkxbStZMi9oQkVXWkxhYlduMlQ2Z0FKL3NHcW9Hcm5sbDF2Rk1YZnBUb25FNUovN0h2NHRSRGJCZEJiaWkxMUs2emV2S3Z6QlRnc3hzSzVJTUFBQUFBRWxGVGtTdVFtQ0NcIiwgeGcgPSBcImRhdGE6aW1hZ2UvcG5nO2Jhc2U2NCxpVkJPUncwS0dnb0FBQUFOU1VoRVVnQUFBQmdBQUFBWUNBWUFBQURnZHozNEFBQUFDWEJJV1hNQUFBc1RBQUFMRXdFQW1wd1lBQUFBQVhOU1IwSUFyczRjNlFBQUFBUm5RVTFCQUFDeGp3djhZUVVBQUFTeVNVUkJWSGdCcFZaN1RGdFZHUC9kMjlKQ3kyZ0x6RkUyb0VEWkVNZDRCR1ZUa0RrMnAzODRIek1zYXBiZ1lyS29pZkxIRXZhSENWdGlGSTFHTkNZem9rSWlLa1lqbWhtZGp6QWNzSWVKcFFsS0pEeGFNQTVFUjF0b2UvdTR2Y2R6VG05TFE5ekUrQ1ZmNzduZk9kL3Y5ejNPdWFmQURZUVFZcWJhUWZVOFZSZFpFNDlxYTZOcXczOFY1cVFDYkZSNk5reEVGejZyUnNobGVOcEJCbjk4a2ZqR0RwTDlqZlpZWTJNaldWcGFJb01UVjhqd2pJT3N5NnB0UFo1MkhYZ0hmWnhpNDVHWk1idzYrRDdtdlF0NHNrS0grckt0cUttN0NWTFVCSzFXaTk4OGkzamxRaDl6d2dldEw2RFNXbWFtYnE5UkRKTWdDS2NUbUdKcTVBbnd6dTk2Y0xUdk9RNjBJNjhZV1FZenRLS0FVREFJU1pLZzBXaVFvVS9Iem53N1NqWVg0UEE3SjdpUEtxZFNNeEVUTlU4Rjc3NDBnS3B0T3lDVEdJTFJFR1FsQkZHUUVBb0ZTWUpBSmdxQ2NnZ1FnSXI4VXJ3MStra3FTVWVpSjRrTVdHbk00MWVuMFBsOUQ2eW1IRWh5V05VSVlveUFCQmtCejRDV2dKT3pPYjRtR29iVnZKbjdqc3lPTVR4V0xzNG1xRXd1OXJLcnN3WHp2ajlRU1ZPbktHeVdQNDhyZmh3WUMrT2FTNlRMQVl1OURCZkxNL0Y2dWx0UTYwc1ZZQUUyMktyeDVmRTNFcGxZV0pNZjRFMmRkVkx3UlI3ZHN1UkRoaTZkK2VDSVU4S21QMlZJQ3pKK3o5WUlBYTJBa3ZHZmtlc1NjV2hiR2o2dU1YQ0NjRFRDZlVkY1RwNUZRMGtOZzIxakJQZXprZXo5QmljcXZCQnBNL1c2SU5KMUp1Z25STko4V1JZYzFqU1FZQlNaUlhYSVdQSUJnV25RUXVIaHl3cTIySDFrdFZJUXd0RVZoTGFHb01RSVpNKzNGSkVUTkRHQ2FqYXFOL3lFUGJkNGFRTUZTa0tiSTNndzEyOFd6dVVac1g5R2drTFRHVEw2NGR0MUsxcS9ua0RwaW96UHR1dlFjbWxWS0hod0dZb2lVNlhnTVpxUWZvZ2l0ak5ZbTFadENPNDU1c0NjZTRIdkN0NGNxdjJyV2lVbkx5YVNBT0cyTFBrdTlBYmZ4SkdJSDV2Q0JIZitJaUVZbEpYaXUrZEZrdHp2Rk5XbXg5QkZKQW00YU5JTG9jc1VlUjBUb2cxcVVlU1RRZVM0dXlVZ0ljMWl4VmM1eTJpWko1aXphRkFWZ0tqTExFSEtlYUk0dGpVTXFtN0dOREF3RUQ4WVlweUU2YlZIbnNGSFMwNGNtZ3pUQ1FWWmsyL0RZemRpeFpSR1YwWncxYVJCZFdHNTRqajdIdDllVEdPeEdNZFF4WnNrY0N4TzRzS01BNEs0bG9WK2owVjhxRE9NOFZ3Ulpycm5zN05kT09NUkVITWJNVnBvd0wzVEVaeDd3aVI0Umo1TVJrOFVCWTJsdGRpWGRSc3pPUm5CRDFUM3BxWHAwRFhhSHo5NktXWDZxOTZJdmJOaFpFVDBjQzhiWUJnbTJMa2F3eFhhdVc0NjEyMmNFakE2RlYvTWRnSWxhYjU1ZDhMOUN3Ylh4VVlOSmRWb0tLN21UVUt5WXhSa3R3Ry9IaGFVb3Bvb0NqeFI1SHFqUkhkN0xUeEhEL0k1cERTWFNTSHRFY2VKeStjaUxZZVhEb2JZVzN0eksvNUpJclZFekg5WndsT1dLZm5SeklDUSsra1pTSFhsNjFiRkdmb2VlejVoNktYWTdrUTNIbWNOWWN6dCsxcVRSMy9Eb21iTmZDdXRkbVpoUWZOUE5pZGdUQW5EU2JxSWsyQ0RKQ1QrdzN4T2NqOHVwMVhNdGZ1QUdycFNTWWFmZnBjVW1yY2tvMHROaW4veDRnUGNZYXZDMldOZDY4RzdyaDlRL0NKZnV6Sm54OGl3OHlXaXpMU1ErdzVzanpZMU5SRy8zOCt2VWpiM2IxZm05VWpZcGQ5TE5pN255Zi80ZDlHbUFuaFNBRjJxalYyUDVodGgvQTI5MWZIR1dzSm5EQUFBQUFCSlJVNUVya0pnZ2c9PVwiLCBXZyA9IFwiZGF0YTppbWFnZS9wbmc7YmFzZTY0LGlWQk9SdzBLR2dvQUFBQU5TVWhFVWdBQUFCZ0FBQUFZQ0FZQUFBRGdkejM0QUFBQUNYQklXWE1BQUFzVEFBQUxFd0VBbXB3WUFBQUFBWE5TUjBJQXJzNGM2UUFBQUFSblFVMUJBQUN4and2OFlRVUFBQVBEU1VSQlZIZ0JwVlpOYUZ4VkZQN2V6OFFTNjJRYXRiU2thcXlpYmRLMFlzVkZFakRkQ0tZTHV4RkJHbEJ3MDVWWlZGdEVUQUxTeGgvUXBUK1ZORldSSW9oaWlZcUwxRTdHamRTYXRoWnExSVowTERQVG44eDBNdlBlWlBMZTZUbDMzbjJkR1pLUTBBL092UFB1UGZjN3Y3dzd3RElnb2hqTEFNczR5eVc2amRsZ3JaK2xGYXVGSEFvSVZvcVJGVHRpdzllQ0NCWGlaMUwwenNnWlNxZlRsRXFsbEdReUdTb01INkp5SWs1MVdmWFg4OWwxNUFQOEdCUjk0czgwUHZqNlBHWlNSV3piM0lSSTVDRVlocUh0NFA5OUVjNDN4MWtIN2o3MkJhejJqaGh2ZmNoN1RXdzNwRG5ONnNnMStlSFJzOWc3RkVmRXNyR2xOWWJvMmpXd0xLdEc3R2dVa2JaMjJBOXZSdUhGRitDKy82Nm1HcXpPeE5RMUQ4bVBuY09SSC83QmpzZnVROWtIaXE2UEVpdW1hWWFpbkxndXJLTERKU0EwYkcxRCtkT1BxNTBNNko3b0RLUTBzWFAvem1LWUhXeTR0eEZ1eVlmRFVwd251Q3hDTENVS3hTM0JkQjBXRjJheENIdmpScFRad2NKdkU4SW41UnBSRGdKUEw4dkxTMi9IQWNOaUFoTUZKaTl3OUpLQk0rK3JLSFFQMUVFbU41aFl5QzNINGF4c1dMdytmenVMSGhsenlXQ1BhdXBrQmpPWm9pSzVrVjlRMFRzbGo4azlwV3Z5TUFNbUZYTERxWWlaeTZseStJbUV6a0xRTDFQMHZHZ25Fc2xLeFRqNjY3a3kxa1VyUkR3a1hDNFBGNmJTK0M4NWc0aHRZdGZUTFZqRHBZR1Fpd0g3TnJKWm1HeHY4Vmg1WTJPd083dUY5aGxENWxkcWxtVUQzL2RoMjNaTnZRWDV3anlPak1YUjFWSkMyOVR2R0czc1FOOXp2V3E2d3JIbHN5S2U1Nm0xNXVabWVVeWJRVVBVcGhCWFF3NktYTXhONGZKZHAvSEhoVGtjVDY3SDZmTFB1SEp0TXR5dktWMVZueGl0dFl4MWpkUm80S0RXY2IxM2ZmazU2SDhQM0JHNGZobUxuYTEzSWc2bVJaSFpYb3hjOERpaTJQbkxLY3oyUElEdXB5N2oxWWtrdGpXMFlpa0lWNENzOUdDY2xaNkZ0OTRFZmZhSkdqVWpFQTNhdEFtNUV6L0J1bWN0TjlKRStlWk5kQitZUkRMalZsdEJmVGM0djMxN0hzWGhmVS9JNGtuSjRGZVZTbTh2bGtPRVB3MUNydlVsd1Q1MmQ3WG90Ky9seEVmS0FZK1YwZGtGd3AzaHdRMk42TjUrdjM3OWprZlh5TEp5VXQ2czF3OG9CMXBXQmFyOGZEWFFxVmVPTXZlMG5xSlhJQTNoRE16QXllclpDUWYzYmtYSEkycnFKV2oxeVZZT3hGTzRzUDhOR0N2T0pMQWdJZCtDZzMxdGVtTW80S3d6SnhvTTc2ZnpaOG5idVlPODljM2tQYm1kOHZsOGpiVDMvVWhOejM1THUvZWZvdmprMWVxYmJYRDVtQ29YZVhobCtva0o4dDRicGtLaFFITnpjNkVjR3Yycm5ualJLM01wSjNMcEg2V1ZZNXp1NE45RmYwQXdXMFY0S1ZpVGtzYVc0N2dGS3BLOHkrWU03cndBQUFBQVNVVk9SSzVDWUlJPVwiLCBSZyA9IFwiZGF0YTppbWFnZS9wbmc7YmFzZTY0LGlWQk9SdzBLR2dvQUFBQU5TVWhFVWdBQUFCZ0FBQUFZQ0FZQUFBRGdkejM0QUFBQUNYQklXWE1BQUFzVEFBQUxFd0VBbXB3WUFBQUFBWE5TUjBJQXJzNGM2UUFBQUFSblFVMUJBQUN4and2OFlRVUFBQVJJU1VSQlZIZ0JwVlpkVEZ4RkZQN21ia0hZOHJOWW9hU1ZBaG8xYllFVkc3WkpNUkZpb2ltSmtRZWZOcUxZYUdLTVFjUVVmV2dFWHF5b05KQ1kwSmltbU1LRFlneWloaHBqQW8zUVIxaDFJUkRYUWtFZlNKUi9XR0IzNTNobXVMUHM4cGNhVDNMMnpzenUrYjQ1Mzdrelo0RURqSWhjN0Ezcy9leVR0RzN6OWxvdGV4NytxNmtnRytCZXJXTS9JckVIK0Z2OGFHUjNxWGw0YUJDYk4vdjBreFlYOVcrc0V5ZmdLQ2hFWWtVRkRwMTcwb1F1c0RjSklWcjNKVkJ5Mk9BYWNMMzFDbWhtQmxabUprU0dDNWJ6c0E2UnF5dWcxVlhJNmJzY0F4eSswUW5INlVJRDA4Z2tUYnNJN0oxcjlwKytiMEhKNHRlVU1QNndzS1lKZ2xFNENCcE5oeEJJZndKeUxZancrQmdTWDM0RlNSZmZOWEJ2bTB3c283blplVk5URTd3WG12SEZiSTdZckVvbHF6b1oxdEVJV1d0cmNBU0QyaTM3NldEd1EweVRlUElVUXA5ZHhmckh6WWFnd2RSRTJBUWQvS2oyK1h3b0xpNUdVVkVSVWxKU2tQMUFBbHJmejhXeHJFU0lzYURFanl1RWlRMkh6b1F6aW1iQjg4anlFbWN5anVSdnZqVjFHZUFzeW9YTk5LbFc4dlB6TVRVMUJiZmJIYTJMTThsQzdZVnNldUg4a1MxSVg1QndjeGtZWHhka0s2eElJa3dTSHZVRHBhVnc5bnhud2pNTzhVZWxwaHNZME9ESzV1Ym1rSlNVcE1lc0RDNTlFaEIvVEM1UVRYVTJuRzVMd0ozR0JKeFZONzlWbyt0YmI5YkdwdFk3UERTRThPMUJrMFd0V250ZWpYcDdlNk83cnFxcWdzdmx3aXEvS1lvb0l5TURuOTY0SzU3MmpvaVp2eGhVTXVpai9NTkw2YUQzVWdrNUVTbisrUnNXNStoUTJmVDFHYWluRk1IamFxVDBOelk3TzR2T3prN1UxZFdocTZzTGdVQkFrMDNjV1lDbmNwaTZldjVrWFlMYVJSRXIvV0d5SlM0ZmlRaDNNaW5SNU8waEE1VUhjeFJ6YzNOMXpkTFQwNm10clkxV1ZsYTAxOVRVVUVKQ3dpNS81N1VINWJ5dlJNckFXWklCRDBWKzkxQm9vb1RXcjUraXRWZlBSbys0aFJoVFJXNXZiNGZINDRtdTFkZlhvN3k4SEtGUUtNNlhsamQ0Y3hHeFZXTGJlQ2FTdVBaeSsveXFJaytwVkpUT1NpYXYxNnUvOFB2OWFHbHB3ZGpZR0p4T0o5TFMwckMwdEFSWHFnTWZYTXloMTcxWmNiZUFHQTZTZFgxTzBIQlFPRW9mTXNzTFVZS3lzcks0T25SM2Q2T2pveU1XQSs2VFR1cTUrb2pJTzM3Zk52Z0kxK0hhSEdna0dGMFRwd3ZNMEtkcTBLaTA2dS92TitkR081Y3VidjdHaTFtcytSTlM2YTM5cTBLaVo0OFRaZDJ2WGJLSDJUY3plVHowc3lsQnJibnp0WEVXY2FES1hXa09lZTF5L2pad2Q2R2taNDVKQTd5TDRJdzc5aHJQMDNtWXUzOW5Gb1dQSmRPZFcrNDlkN3dUUE1JZVVuTy9YNW9lRVpYUmJqQ3FTMUZEUTRNR2YvT2xvN1Q0eXhsNUVQRE8zWWMvYW83dGVIbHhCYlRibjdaYlAxeVI0UzhMcEdSZ2VRQnc3TzRqMitCYjJ1OWxwdURhL0w5U2hQV00yQ0F5QmxER0FsYyt4MFVkakFWdmpNWGNxMlVxZHRYWmRNc2tkZXk1WldMME45RDA5RlpBZWpxZ0xyUHpGUkRuU2szb25pMXp2MHhVVFQ2bmU3ZCsraC8vTG1wdGdQa1l3RWw3VFVucU9nampYMURHalNOcGlhek1BQUFBQUVsRlRrU3VRbUNDXCIsIEJnID0gXCJkYXRhOmltYWdlL3BuZztiYXNlNjQsaVZCT1J3MEtHZ29BQUFBTlNVaEVVZ0FBQUJnQUFBQVlDQVlBQUFEZ2R6MzRBQUFBQ1hCSVdYTUFBQXNUQUFBTEV3RUFtcHdZQUFBQUFYTlNSMElBcnM0YzZRQUFBQVJuUVUxQkFBQ3hqd3Y4WVFVQUFBUkZTVVJCVkhnQnBWWmJUQnhWR1A3T21WbVdoY1dGbGt1M3RwYTdUUzhLaXc5YWJLQ0pEMXFERkUzYTZJdjJwYTlpMVBSUitsaU5pWWxQMXNUeTJOUTB3SU9YeEFzUXJVMFRzTFdnZ3RDQWFNdEZHNVl1N016c3pzenhQMmRtMmlVc1dPTVAvODQ1TS8vL2ZmOXQ1eXl3aFFnaFNrbmZJUjBrblJIM1pkbS8xMDFhamY4cTBza0hlRkE1dnhrUnl3UCtPbDE2U0V2bDNsNGRRU1k1aE96cUtJU3pxbXkwZ2ppMFNDTUtTdHVoUjU4SVhKT2taeGhqSDJ4S0lNdmhneFB3S015RlQrQm01OEgxN2VDaEVqQmU1Tms1YWJndXFYVmIraUJhKzc0aTlLV0hTTTVzSVBBalYrekcvRGxrL3I1QTBSMkV4a05rSlVCT25yR1EvL0tQcWJYckdMQ05hWVMydllSSS9GUUE5MGFRQ1F0cVRwZHJzaXptQW9IZitSUjZVU000WitDNTRJR0hJbEYrRUM2UjBDYTc5Z3RDNVM4anN1TlVVSzVtOHB2bHZwc3NUYWxqL0FacjhSejBjRGswWmtHRFNRUVdPS1RLdGVsZGxWcmVNK1k5QzRVcmtTVmZXVnEvZitkVlBINzBNM0tUK3JVRHpGbEFxTGlSQ0NocWluN3lwbzMrTDEya3JBcWNPQnBEMHJBeDhOa2M5dFV6SEduVlVQTUlWQllPcFdHbnA0QklBc1YxSHdYNWx1bjBjVXl1bkxWUk1Ic0JtZ1p3c1VMZ1ljakNOTll3dk5qQk1UTTloNHVYUW9oRU9UcU9XS2l0S1VTOFVrWm9xNXB4a2FXU0VrNzZSNVdGSG0yUnNOMnlSSjFxYWxhR2xJRkdkV2R1a3FCTmNqYVJOaDFNemFhUktzNGk4M0FGRXEwUkhHZ1N1TFdRaEpseHljWlFka3drdlo0UmhuMTNLTWlnVFdiUUpGZXVPYVVlTXFuSVVxbW9UN3dRUDQxa01IcDdDUmwySFBHV01sekxhT2diV0VJbDd3TTNRbmp5cVl4SEFGdjVxNlpURnI1VTYzNURZQnFMNEc0SUdrMkVqTVNiR2hNTjFXdTRNYmtMU3lXRmVEU3lGN2ZDWVppUmNiaUxkYWhybjRScFJmMHgxMm1hQkJ5SENDd0RSVDZCYkxLY09OU2Y2TVB2aTRZM2h5d1lMdUI0MHdnUzFqUlNleGxHVnVJb2IwaGgvNTkzd1c1eVhBMDFvSDhzRVh5VEpJdEtZVTlWRWFZdmRxbTdFbWxXTG1MUmdweEJYeThySlEraCthc2svckFQWW1JOGdVVC9QTlppUmJBZEhSdUZvVG9lRFRiSmV3UnRUVlgzSThtUm1UdmIwWFY0QWxaeENWNmQ2OFVyRXgvalNqaU8xNTRkdzhSU0ZmTEpZL1Zsd2ZLNkpCaVdxODdEdXplQVMvbDVmaWMrL0s0ZDMremFqZHF5Sk9MN2FJS2FkK0xOUzg5aktSWExBeTk4TENVRHNnZXl5Y3R5OTB6MzF4aSsvaGRseVpCYnFyRHVvb0NuVWI5NEZSVVJHMWRpYlRBeU9teWhyd09XUGRpemcrcC9vVE80V1JPOGl3YnAwaTUrdUF5bjZ3WFZtUFVVL3k2dXI5cTN3MkQ3RDhoYnZmUXVPaG1NeTBuU0pEdlVDdjcyNlR5RjJsb0NlLzdXNlFCY25RM3JqYnpqVDRuejNsbmhWRzRUcnE5aUM1WFBwYTN6N3RuY0U2NDdmeVJDOU53ekdiOGhuSmJITnhDNU9hcUFqM1VJOS9MM3VlQTl1Wmo1amt6SnJsN2Zhazk5d1JlZjB6aU5RY3pOZVE0eG1wNURUd1BQSFlVc3F5OTVqOHpOTXBHSGZxOTRjQmtVLytQWFJiY1BzSndET09QZjYvSEhmRlA1QnkxdnFoYmJRQzJJQUFBQUFFbEZUa1N1UW1DQ1wiLCBTZyA9IFwiZGF0YTppbWFnZS9wbmc7YmFzZTY0LGlWQk9SdzBLR2dvQUFBQU5TVWhFVWdBQUFCZ0FBQUFZQ0FZQUFBRGdkejM0QUFBQUNYQklXWE1BQUFzVEFBQUxFd0VBbXB3WUFBQUFBWE5TUjBJQXJzNGM2UUFBQUFSblFVMUJBQUN4and2OFlRVUFBQU5YU1VSQlZIZ0JwVlpMYTFOQkZQN3VLemFKMkZRTkxrUzk0c0pGRXFub1NnV2pTemYxSDZoUXhKMXhJUzVUZDRvZ1FuZmlDOTBLV2dYZG1Rb0s3aEx4UVVFd3NYRmhxeEtqaVdseUgrTTVrenZwdFUyMDFoTk9adTdNbk84NzU1dTVtUUIvTUNGRWdqeFBYaUF2aTBXckJXTTVjaHYvYWh3VUFLelViZzRpMHZxQW42Wm1nanpCeis3elorZzhmaVJiVWEvTE5mcldyVERTR1VTT0hJRzU3NEFLL1VaK1h0TzBLd01KV0k0QVhBSXVYTGtNVWExQ1R5YWhqU1NneCtJeXhHODJJSnBOK0xNZktBYUkzNzRESTVWUk1CTkVjbjRaUVpDNVpGKzRkQkdkYTFkaDd0a0wzYktnRVFvRlFhTEpFQUVodndIL1p3dnV6RnRFanAzQTBObHpDdTZNcWtSVG1sTlRaRmtZM0xseEhWWTZEWjBYRUlxbWhiUFJBdmd1SC9kOVd1Q1VpckJPbmxJa0xOZHVJcWtvZ3B2VUhQZGV2MEx6OEVGWXFSU00rTm91d1dJV2kweEJ2MWNGUFhzL3ZsTWxNNGplZjZEMlpab0lEbWxCOW1VZWFld1poVjZkaFptaTdBbEFFU0JVZ1JBOVVlbWpCVDNBb3duM3pXdGcvMzdFN2oxVWkwWk0ram9xTjdYODNuZlRhZC9JN0lLV1RHcUN0QmM5Vk1pTVBlYzdER3RkZDBBb21xNWt2dWNKYjlzMmVMNkFWUzZiMXZidFBKM2pDZ3JVeWRicENMWmFMWmltQ2NNd3BQZE9Bb0g3WGh0T1l4YkcwRWJvWmd5NnNZYWxWUWNFdnUvRDh6eTRyb3RvTklyaDRXRXBFNnN3S2l1Z0NWM1hwVE9nV05RQ1R1c3pQcjI4QUtjOUQ2YzVpMXI1TGpxdGVTdzFqdU40eDNIVWtNMFN5UmVLTStESnNDbVNUck9LeHZ3THFrNkgyNjZoVm4yQytLWUR2eVhCNE1wRDQ1S2d0eURjaHMxekdqRFhqQ0EydkFQQ2lLRHhkUVplaDA1aWZNdXlDcFpXenlsWFpDZVFacERGTm94aW9mRVJvbFBIdXMySGlhQStjQzN2WTJEZnpJREFqa1FpYUxmYmZRUFdraHljd0VMOUhZUzFDZkhrVGd3bFVpc2hLSEh2S1hsMmJtNE80K1BqN3FBcStCUzU3UzlkZ01oNk9rblJaV3RZR3ZiSnlVazlrOG13T2xQcU4xOWFOcHRWTCtlcTNiYnQ4TSs0clpnTC9GUW9GUDZib0Znczl1NkljR2wyY0V1SmZENi9hbkNPRGQxNE5wYm9sMU96cXlFSmdiUGwwTTlvWWtLdDRGSlp6NzhCODc2eHRDR2JDR1AydXpLWlBZL2dEWitlbnNiVTFCUktwUklxbFlwY2swZ2tRTUFZR3h1VGJXQjlyOHhCbGZDZTNCSXJ0NEw0ajM4WHVRQ2dGZ0lzQjJNc2FlSlBHTDhBcW9lNk01WnlsZzRBQUFBQVNVVk9SSzVDWUlJPVwiLCBFZyA9IFwiZGF0YTppbWFnZS9wbmc7YmFzZTY0LGlWQk9SdzBLR2dvQUFBQU5TVWhFVWdBQUFCZ0FBQUFZQ0FZQUFBRGdkejM0QUFBQUNYQklXWE1BQUFzVEFBQUxFd0VBbXB3WUFBQUFBWE5TUjBJQXJzNGM2UUFBQUFSblFVMUJBQUN4and2OFlRVUFBQVBBU1VSQlZIZ0JwVlpmYUpOWEZQL2RMMTlTczFpYXlOcU9ybXFyM1dhN1JkMWdiSFNCL1grYWpMR0h2VmpMWkEvYmc3RDZsajAxM1lzd0p1eDFNTEFiYkh0MW5Wb1FwRldMSUVXc2phajFUMU1xclZhMFRXcE5yRi95WGMrNXVUZjlORW0xZU1qNXp2M3puZC92bkhPL2UyK0FWVVJLR1NidEpSMGlUY2tWV2RCalBhUXRXS3V3a3daNFhqbFVqVWhVQVArUlRJSTB6UDJSc1RrY09YTlQyY3lTbzk3WjlFb0kwYllJZG5WdVJHeG5vM0ZOay9ZSklYNnJTc0RsME9BSzhOZC9MMkw2ZGhZTmtYVUkxOVlnRkxTVncxTE93WU9IZVV6TkxyRVgvdm41UTBTM1JneE1na2o2eWdoMDVJcjl3Si9qK1Azd1ZiemJYZysvM3lJSTRZbEVVRjhhTDJTSjZISnFIbnQzdlk2ZnVxUG1wZjBtRTJGcVR1WThsK1hBWDBuOE1YQU5iMUZFOUJKTmtySXRxNmJVUDFkUm5wKzRoeCsrZnNPUWNMbmVKdjhwUTNDSXpMZkpHd3VJZlQ5STRCdXdQaGhRd0NiNkZldE5YU29sZnl3K1dLWk0wamg2OEZQRWRqVHc1REFSZkN4MDlDa2VpZTRld1BTZExOVnpBeUZZR2tZVUV5aEJ5aUtSOUdTaVVwRkkzcGhIYlB2TGlrUkx4S2JIVjl5Nk1wVjJ0ellGM2JhTklUUkdYaEwrZ0YyTTJSTzJjQmZwNFlNclFrOFVqRWtMVGtIV2gzMlFiZ0dUTXhsN3k2dDFQTlhER1F4UjQ2Tk1Kb05jTGdmYnR1SHorWlNXbGxWSTJOblRTQy9TZkcwVUlkOE0zRUE3RWEySExqRmMxMFdoVUVBK24wY3dHRVJkblNJWTVqcnM1QlpQV0phbGxCZFhydFFBVm00VS9mOW40TGliSVozN09EWXlEK3ZoR0o0VzltTi94M0hNVUFzVHFBM0ZFZkRrRTk4SmtZajhIUDQ3TllyQms0K1FteG5FL01SMURKeEk0L2k1S3hDRmhWSWdERzdVRTF5TDdXWDMyaEtKRmNKeXdVSDk1aXlPVFp6QzVGSUtPYXNSRjY0dDQ1UDNaVmtHWmRtVFRxbUdMczNUUXRYSGU2MFdRaldYcU5lTlp2OE95RWRYOGMzbkgwRDZJcWdrdkk1YTBpV0NRQ0JROFdXSUdqUy8xbzA5bjNYZzRxMGt4bWRTaUgvM0pab2IybEJOUEFSai9CVWxxTkdibXIyUGZRZEg4NkpLSnBCNUlyT3hta2lYTjUyTFgvYTlZNzNaR3ViZzk3TUhueG05clUyMXRMZDg5c2o0dlNwSHc3T2t1TmsyTmE0RGdadkJ3eFpGeStmR01QZmllenBnenBnMWl5dysvazUwbXBGK1Bvdk1kN21YTkIzYlhrOGs3U2h0L3pXaFM4UzcyaEhkb3FKWGR3TTNGQUV6bVlGNFZ3ZVJiTk9IemJOSVZzNmhlTmMyWFFFbGZScXo3TUpKa09GTEI4bkpOSFluem1KNkxsdDlPUWliRHpmT21xMEhQR0U2bGE3TUhrMVN2RExINytMb21Wa2l6QlRKU09wQ2ZnWDRSV2VURjdqaWxWazVzT0tsM3krZlg0YmtDL3k3Nk5FQUN4N0FsQjVMa0laWHczZ01HY1lrU1ZrOFBjVUFBQUFBU1VWT1JLNUNZSUk9XCIsIGtnID0gXCJkYXRhOmltYWdlL3BuZztiYXNlNjQsaVZCT1J3MEtHZ29BQUFBTlNVaEVVZ0FBQUJnQUFBQVlDQVlBQUFEZ2R6MzRBQUFBQ1hCSVdYTUFBQXNUQUFBTEV3RUFtcHdZQUFBQUFYTlNSMElBcnM0YzZRQUFBQVJuUVUxQkFBQ3hqd3Y4WVFVQUFBTzZTVVJCVkhnQnBWWmRhRk5KRlA1bWVwUCs3R1lidDlSMTErM2FiTXV5cTl2VjNYMm9yWUw2SUtKVUZCR2ZSQlRmZk5BcWlpK0NxVDVWb1lvUGdvajBCMEY4OHdjVUZmd0JxNGlWMXQvVUIyMXNiZFVLTm8wMnVXMXk3emhuTXZjMnNVbXRlc2hoenN5Y2M3NHozN24zVG9CSlJBamhsN3BYNmpXcFBXSmNodlJhdmRSeWZLbFFrRTR3VlduT0JjU3lKTjhtaDZCVVA4MjczdDdHcllGTGF2d3dOcXg4Wm54WGhrci9ITlQrc2d6elNtdWMwSWpVQnNiWTRad0FSSWRPcmhLZTZqNkMxN0dYbUZaUUNwL1hqMEtqU1BuRmt6R1l5UkVNZk9pbEtPeXJPWUVLQ2FnbEtFRWFKZ0RveWhWNjY1TW1uSG5Xakw5Sy9vT0hHeW12VDg4cVVtb200K2daN2taZFlEMDJ6TjdoN0c1M1RzSWN6dVhRU2JTMGhacHc3bm1ycW9oeHlpRWduVFBMRVc1Ukdvamg2YnY3V0ZPeDJRRWh1djZWY1dHdVE0Z2EvN1BoeDJnTEhVSkowVThZRlhHTTJuR01DVlBhcGp0WFNyWmNvNzB4MEY0TXBVVXowTmJkaFB1U1d0Mi9aaks0cm40alRiYWVieGRVTmVOTUpwSTh5MlNtU2hvYlQ2N1Z0RWYwZmt3QjVobUdpaU1RTFl2cE1aY0VZelhON3J3WVJYZTRqbFdVRDFtQlgxL0JtK2VSU0l4K0RpTXVTd0taVkVtdWtMQXQ0ZWNsc0MyZy8zM1ltT21qdWxGUEFLdkl1dnpVbE1rNDNyN1puTGRrdmlIK25NN2R0bElQaUc4YTJlZ2poSHQ3NERFb2RBVCthVE5SVUZ3TjI3WmhXUmFTeVNRSzdVSW5kQkgxWUI1Wm9UZEo0Z2J2RXh3N3J3QlJjN3h1MVV3OXhrVWxDbjZyUm1QZlZUenhsQ0RCWnlPOUVNNDVFb21FczFUT2RVTXdFTFVWQUpYOUtncDI5RzRxWVRhOTE5K0pXak1BajIyb3lwM2tqam9GT1FCcDdDcFBaWTVaR2RTN1FoVFVWUzdIM0I5K3g1TEFJa1Fpa1l3VHVJKzBGZ0lJaytITDV5N0l6ejc1cHRRZ3E4VGpjY1JpTWZUMTlTTWFqV0p3Y0hDQ2o2SDZveVRpQWxUUDhxcVY3L01oanEyVW8zZmlkNHFFams4Yys4di9RU2dVUWxWVjFXUUFYV1Rka0xwNDZSOWV0SFNZMkhMdnVLanM2TFNRUTJicHNUVExuaTFKdFdRQitRMzdPWHcrS3Y0c281ZEJHa1BrY0hwUG0xaDdmRHNiSjJ2cVFnMmpkdHRsWmZCMGREbkxBUzZiUWwyNlRyTjFLeXFZL29abDcvQm5BRWlOMXBQT1VrdjZ0MmlUMUFpclhRQythL2RYSlNkaE8zZUR6Zm1iVEhVM1pEcWxyajhsMXNGR1lVMy9VZGhheFNSSysrUnJIV2hNditIcXMxY2lSTkIxZWZSQVdQL1BuUUJrcDZsS3ZIcWxzTnR2cGljUHB1Zk1kbVVTdXZwOHEvbXRkdURpQmVEeFE0amUzbFJBY1RGUXV4Qll2Z0pFcTVhc1YyYXVrOUNsM3lLbUx0ZkVOL3k3cU5jSmh0SVM5dWkxb0g3TWM4cEhWUkdqTkFRZnkwUUFBQUFBU1VWT1JLNUNZSUk9XCIsIE5nID0gXCJkYXRhOmltYWdlL3BuZztiYXNlNjQsaVZCT1J3MEtHZ29BQUFBTlNVaEVVZ0FBQUJnQUFBQVlDQVlBQUFEZ2R6MzRBQUFBQ1hCSVdYTUFBQXNUQUFBTEV3RUFtcHdZQUFBQUFYTlNSMElBcnM0YzZRQUFBQVJuUVUxQkFBQ3hqd3Y4WVFVQUFBUlBTVVJCVkhnQnBWWmRUSk5YR0g1T1cwcFpvUlljQ0NnRVVzVUpURkVXSGRURmJURnpZVzVURXhjdmxtVi9WeWJiMkU5MnRjUzZYYm1mekp2ZCtETzkyY1d5WmRsUGNHNHhReExCNElWMGt6Z1JFeGc0WEFOU08rZ1A4TFZuenpuOXZsSUdKUnJmNU8zNWU4L3p2Tzk3em5tL0FzdUlsTkpMUFVUdHBBN0plUW1iYyszVUd0eXJxRTBtd04zS3FWeEVZZ253dDlnRXFGNDFEbzVmUk0vWUw3cWRubzFvbTNKM0ZkWjZHOUJhdVF0TnBTM1cxanZVdzBLSW96a0pWRHBNY0JqZEYzQjA0Z3RjY2QxRXNhc1VSVTR2Q2h3UGFMdTRFVVBDaUdKc2VrVHR3b2N0SitFam9Ta0JraHhlUkdCNnJ0a1RueHpCeklsanlHdCtCSk5sVHRtLzNpNXYxTnJGZUVtV1F6S3RDU09Pb2NnMTdLNTlFUy9WdjJPdHZtMUZJcXljcytsVGFWSGdjMStlUkY1am8xNFVCTEdac0tFeWdXQzlYVjZ2dFNOVUlnVDNtVVFDQTVPL1k1L3ZOWXRFcFdzelNZWXRnbE5zWGs3MlgwSDB5UjNJYTJpQTNWMEltK21CYWNTT3NNSWxtVTBHTnpqazVYb2h4cjFDUkdlbUdNa0FQbnZzRzJ4S244dDVFandoVE8rSDFNeDBjeFBFNkFnSkd1bTF5QkRvSDdlQWlFck5ZK1ZJbWhrYkt4WHlZcE1kMzVkZEUrVjFyWnJFbEdJSGYvYW9YckxuQWtCd08vdTJjQmcybnh2aTZYd0lEMmx1cFlEVkJCdElRcHlmcFNlcHpBRXlPNmdjZ2RnN09JdG5iOFl4V05XSmY0OTN3N1BGcjB6YWxaUFA2MXR6NW96MldIcytNd254cmcyaWZ3bzRHeVpLRERnK0FiZ1N3SDRhMmRuRzQ5UVlvNkxHcUxjbjlONjFveW5rZjlkaFJiQkRZVGJwZ0psLzdiMGFQRVB3MzBKQXh5U3dpem54elFFUEo0RWZTYmFKL1hYVVdKUWEwNjJZdUEyUlNHUlNtdXJwdGdocVZJcjBnOExvS0JkRitsQlhrNnFQSGs3TkFIOXhXd0cxaTJEL01EVlgyWGR3UHBaSUgzd3FwVnZyTXRBMUpDT1JCUVFaVVpkRUg5dEsvcFlRYUlVQ28rZFJxb3M2WjNCTTc0c0lhaGo0djRnc3RVUkZOYXdYUFN2bVo4Y0k0SGVtQ2Vyb1F3VWpXdTlJOTdmbUFUY1dnMmVUMktxcnJlR2RESUhkNzUrM09zSDhPbW02endXOHpqZHppNERYR2NFUkQzQ01xYm8waStWRThKcWJFbFFFWFRxVXRyWjVpeW5tOWlDQkJ3bjhRUkd3aGRHMDB2dVBlS3UraWk4TDNsZXhPUlhiYzhBYS9xQWVtanJrc0JvWmU1K0Q0QTNJUERBbEtqMkZJazJXUXk1WE5NdGY2M2JLanJyZGhxMnkzTmwxc01SYXFyVktSU2VieHlYQmt5UlpVQ0p5U08rYVI5RmQ0OGUzalM4WTQrNEhIZW9tcWRyMDA2c2ViQ2pUZCtjMFM4VXJpNHBkNnRPUElWbndiRXNRWEZxelZmWld0WWl2Tng2UW9jSlZXWlZWYW4xamV6N2UzSzVMZXFiWWFTclZJWW1xNFovYjNuc2ZxaEFvRWlWL3JOcVlQUHRRbXpqbmUwb09GOWZZVFVpcjZxV3JLUlM0aStBRkZxWDY4QXdEaXo4NEFUYUg5T0Jxdjl6L3N5c1pORlk2TW1hV2RWYkIyMWJsSUhnQnRsVTdzc0VEV09qSkFwSjJrMFMvOE40UkErZFl5UDRNSmZGM0pLVjNGT1VMRGJoem5UTWJlTWxQNXBKaWZ2UlB5N3VYVG5rZi95N2FUWUJ3RnVDUU9SY3dyM2xPK1EvVEpVVW1RVDh4YXdBQUFBQkpSVTVFcmtKZ2dnPT1cIiwgVGcgPSBcImRhdGE6aW1hZ2UvcG5nO2Jhc2U2NCxpVkJPUncwS0dnb0FBQUFOU1VoRVVnQUFBQmdBQUFBWUNBWUFBQURnZHozNEFBQUFDWEJJV1hNQUFBc1RBQUFMRXdFQW1wd1lBQUFBQVhOU1IwSUFyczRjNlFBQUFBUm5RVTFCQUFDeGp3djhZUVVBQUFNUVNVUkJWSGdCclZaUFR4TkJGSCt6WGVpMlNxR3RLTkhFMUdCSTlLQnRZc0tCZzAwNGV0QmdQR3I4QUNUV1QyRDdDU0R4YWdMQkJMMnA0UU5RRHVqQmlNWG9RUklwMFlSL05kbFNTOXR0dXp1K056c0RYYkNrSUM5NW5UZHY1djErYjk3YjJTM0FFY0k1NzBOOWhqcVBtdWY3WWtwZkNqVUd4eFVLa2dDZHlsUTdJdllQOENjNHBGSDdhTDc4OHc4c3JwaXcvS3NNNVpvdDlnejBkc1BnK1FDTURJWGg1dVVlRlZwRXpUREdKdHNTVURra3VBQ2UvYkFKV3lVTHdzRXU2QWwwZ2RHdGlZQnEzVUZ0d2theGpqTUhNbU5Ya1RDb1lOSklramxFSURNWDdET0w2L0QyVXdHdVhUb0x1azhUMjVqYXpzUmVGUVJXdzRiOGRnWHVKTTdCbzVHTEN1NnBPZ2xUTmNmaE01VmxabkVENXBZS01EaHdCbGRwV1JNamEwMkh1ei9FdzdtRGJnN2YxOHN3ZHFzZkhyb2tWSzRFa3F4cE1vUkswL2RqdXdvdmtTQWFNc0RDY2xzMkUyTWRsY3B2TlpuUW1tZU5mQUQ5dlFhZWZBdStZR2xsLzZiSTBHVDJqd1hMbTFWZ21nOVZrMkRnRWpVNTFGRXQyMEhiY1czaGM5ZHJTT0x6dVhFejd6ZFZtWkwwbU90bzNLUFp4MityenZMQ25FT2JJTkxEREgrWDdCTGJMNHVuUksxekpLdzMrT2J2RW13c09mRGcrbjE5K01ZUXJhU0k0QzVac3krZWExOWZUWXFTcmZqOUVJMUdvUk9oaG1PdHdUUk5xRmFyd3ZmNndqWU1UMHlRZVpzSTRtVGxjcm05SU11eW9GQW9RQ0FRQUUzVFBFREtiaVVnNEVhanNlZkxaclBLak9teUlaRFA1ejJaVVFBcDFWYVJITXljMUhFY0R5RkpzVmowRUJ3cHRtMExQYWxRYW10a2hNTmhPQzJKeFdMS0xPNFJKSk5KT0MySngrUEt6RkdKRmdoL2ZId2NFb2xFVTlWYk5iUlRVVDBoSFIwZEpSRFNkNHd1QXhvbWJkcloyUkgxSnBLVEVGRERTU0tSaUhKZjBSQ0lXcDZsV1RBWTlHUnlrdXhEb1pCeVQ5Tzc2TkRMcmxLcFFLMVdPOVlwRkxnZkx5Z2xDUWRmZG1UZ2tGR25NQXlqbzVPMDdxRVlDVTZTa1ppSFBqaHBjTitzb2hmbGNsblV0ZDFKQ0ZqWGRYSGphV3dCVDhNUldhWGtSMTBJM21hK3U3dkxTNlVTeHhzcUZCOEc0YU8xQTM4RVV0Q0p5SS8rTk85YzV2bC8vTHRJU1FDekJUQXZmV241bUxlVnYzb0daRUhuamFTVEFBQUFBRWxGVGtTdVFtQ0NcIiwgSWcgPSBcImRhdGE6aW1hZ2UvcG5nO2Jhc2U2NCxpVkJPUncwS0dnb0FBQUFOU1VoRVVnQUFBQmdBQUFBWUNBWUFBQURnZHozNEFBQUFDWEJJV1hNQUFBc1RBQUFMRXdFQW1wd1lBQUFBQVhOU1IwSUFyczRjNlFBQUFBUm5RVTFCQUFDeGp3djhZUVVBQUFUaFNVUkJWSGdCcFZaWlRGeFZHUDd1WldZWUdKYUJzbGxoR0tTV1FrdFkrbUJMYVZsTVdyV1YwdmF0TnFhSkpyNFlSZE5hWDFTcXNZWldpUnBqNGtORGFkSTB4cmdVcmRnYUJTMUxGUXlJUUZsa0tWSkFwaXd6dzJ6TXpMMys1OHk5dzlSQ1UrT2YvSFAyNy91M2M4OEE5eEJabG8ya2I1QTJrWTdKSzdLZ3pGV1JtdkZmaFIxU0FPNVg2dFlpRWxZQmY1R2FhbElqRzNkYjJ0RTJkWVczUzh0V3ZpZkZrSVlOeHMwb1dyOEgrWW5iMWFPTHBDY0ZRWGgvVFFJV0RnV2NBMTRjK0JBenprbkU2Uk1SclRNaVFoUEo5N2w4VHJoOURrd3RUYkJUZUhQN1dXUVNvU0xWUkhMeUxnTEZjczVlMzErTHIwYnFrTDJ1RUZwUkU5ajFiMS9sZ0xwOUxveFpCN0F2NHdpZXpubFpYWDFKOVVSUVkwNU5Gd3ZMK1J1MWFCaXQ1eFlKSXNPUTRacExoY095SGw1bkxHUkpSSGpNUEtJZkhJSE9NSzhRQ1JpYy94MEhNNTlSU1ZpNENvaGtYQ1dvbytib2lMVVB6LzN3R0RManNoR2hOY0RuTVdEcTF6MXd6S1lSam9Bb3ZScytmeGpjWGkyM0xEYTlIMG01TGRDRU8rRHcyTW1UUWJ5Mzh6UGtCZkxTVEFSbG9tTDlVVGJ6ZXZ1ejNHcEJGR0MzYTlIWGVBZ3VTenhFMFFHWFIwSmMxQ3pTazBlcDcwZDA1RzNZSmt6by8rNFFuQjRaWVJvTlAzZCtvRllOVXlrcmM0SkRKUnROMmxxUVpSaEdTYklMVzJLbThYZlhOdGptRFppMTZyQXBkUUFPdHc4NXBodDRLR1VNVHJjZkd0R08yVVVkclBQUm1QeWxCTGt4TTlpVjVFSXNtakJ0djZhU1ZGRUdzWi8xRXZFNWptZk5nUXpCd0ZROFB1ck5oaUJJUE1UWEI4ellrRElNdlhhUjV5UTNvdytqTXluY0U3WSsxcGVOOGtvM010UG40UGNCb3Z3RnplNWtzQ1dNSUovbndkZE5vUUFQVWNQMXJaaXplWEdrdkkzbVpHNktLY0dDQlhzRURCRWVaQ1NQWUYzME5Bemhia2lVNEU4dWw2R3hZek5lcUJnQzFRQWtiN1BxZ1ptRnlCZ291N0ZBL0trN2ZDc1ZYcCtFdXF2YkVDYllhTVlCajllRER5N3R4cW1MRlZRQUM3RGFRWHRjK1BqckVuajlNb2FuVThsanNsNVFpMmlGSUhnaHVOS1BUdXNMbHZ1blB4Y2pSbTlEUXN3Y2pieUkxQzhoMXp5RWVDclZ1dThmNVI3Y2dTSGNlV1ZZaU1ZWkU4UTRhbTd5eVl6a0dVU1Mrem1tdi9odDZoamVTREYvQU0vdmEwQXFoZXBDVXprc1ZpTVJqZlBTYmVySlEySG1uMEVyeFRDemlyOG9LZ1FJMDVVR1djdnl1cW4wOU9nY2ZwaDBJNHB6ZWhFVjRTTHJaRmdkQnBpU0xOaTFwUWNkUTFrY25NbnV3dDlXUEFuTFY3dmR6SU9mV00yS2xnUHdIenZMWng4UmJtSHZVaGN1UnhYd2NWcWlCVisyNzZDcUNRK0NIQzV0Q3ZhZjhsNkQ2VlVYSkVSVGhpa3NieDBFY3ZqU0pZRmRCdW9zc0pIdlFBV0V0bFl3dHhZMFVTakxlZzJMY1JIODlqcmNlcGdTWi9tcENVc1NZZzBPdUpmRFliYlA0c2ZCdHhFcHVSazJwTFEwYUR1N1ZlNE1rYTR6UzNrekQ5UHhFK28zREhHK0pWd1pPb1c5RTkwY25JblZhZURLK3hTcXc5T3R1RHIwRGdkWHoybnJMOGdLK0xuUWI1RVp5c2RPZXZjMDVETTEzQXUxR203cUV2Q05zUUI5K2pRKzN1U2V3djdGVHFRdjMrWmpoc2lzeDdFVFpPUXJQTGxRUG5iQk9DclBIeGYvbVJyWm54UXZTNHJLOTFDMnp2YjZUOWVFdm5CVldFMW9vVHE0cGJkSDltL051NHRJQ2xFT1hQbWtMTFcyaElKWGgyS3U5bVF5ZHZheThSc3VVOUxSK0MzUTl3ZmtpWW5BZ2RoWW9LZ1llUHdKQ0VVNzFLT3JQcGxyZWNJZS9YUHkvVXVUL0QvK1hWUXBBQXNoZ0dQS1hMVlM1bXZLUHdTVzVVMjc2WmFHQUFBQUFFbEZUa1N1UW1DQ1wiLCBEZyA9IFwiZGF0YTppbWFnZS9wbmc7YmFzZTY0LGlWQk9SdzBLR2dvQUFBQU5TVWhFVWdBQUFCZ0FBQUFZQ0FZQUFBRGdkejM0QUFBQUNYQklXWE1BQUFzVEFBQUxFd0VBbXB3WUFBQUFBWE5TUjBJQXJzNGM2UUFBQUFSblFVMUJBQUN4and2OFlRVUFBQVEyU1VSQlZIZ0JwVlpkYkpOVkdINitRZi9MMW9FTU5vYXJzQ0VRNlRhUXpCaTBtR2hnVWVpQ2VtRzhnY1NmTEVTdEdpOG5CVzUyWWVKaVREUUtEbzBhaVVnY3diQkV5T2owUW9XeGdSTVJuT3VRYlFYV3JkM2FybHUvOXVNOTV6dW5MYVBBQ08veTd2dy96em5QK2M3N0ZyaURhWnJtSU45RjNrSGVyMlZ0VFBSNXlaMjRWMk9MQk1Cc3JmVjJSRW9lOExlbzhKRTdXTnZmTllTMmsvK2hrOHJ3eERTZjR5eWJCOWVLQmZCc1hBYjN1aks1TkV5K1cxR1VsdHNTTURrRU9BZHVidTNDd0hBVUpmT3RLQzQwd1c0eHdHUlFFWXBvaUUxT28zOXdIQnJOUGZ4QlBTY1U1aU9TM2JjUWlKMXo5cjJmbmNMSEIzdFJ0MllSQ20wYTRsTUdLRFR6aGJxL01aazA0R2hYcFZoTVl3a1ZmLzQ3Z3RlM3JVYlRhK3NsM052eUpBVlNjN256dlorZndpZUh6cU4yVlFrV084Ynh4cVpmTU44V1JpeVJSdUM2QmY5Y3NSTmhHa1hXQ0pxZVA0NFZaYU40cFBJQmZQUmRMMThyYkplOEUwVVF0Rkt4L2V6RkVCNTkrWHVzcVZvSXU5VklraVN4NGVFcmFEKzduRXVoaUFOcjlHYzFxdGl5N2lMODU1Y2lHTFpoSXByQVgzMGhIUDkwcTd5WGszU0tweFRCMU05NktyZCtpNEZnRlBWMVpneU5GUklNQVNvU05ncys0NnZndlV1S0l6ajIreFRjYTB1SlpJc2NMV1lTTmNoTFplQkYxaVQydkhnRURldlBrUlFwMGpoRjhqQlh1VThtOUQ3ZFZUN24yZHBlTkw5MGhOWk9FODR3eHhMbW5Vdi9QS3pXNWgvZ3U0eE1tdEhRL0F6c05pc0hZUnRrRnl3MHlyYXpId2QrT2wyT0wwK1UwRnFDVTFMMFdRZWtURzVHVU1OcTV5NkYrSjBYME9yQlVSTU00NERGbktRZVJZaVN2UVVOTnhPTWhPY2dxUnFwbGVaek9ydUg1YkNUU2NRZlZHQW95bmU0YzNNWFhNNXJ0Q0NOOFdnU0UvR2tMb1dRSk1icmVobU42K05zYmxYcEtONTk3Zzg0YkZPWkJ5a0pja3pCNnZJUjJJMlpDVWlsTlE0dzAxVnlOcWFKNHl4ZkZNYks4aERDY1F0eTN5K1RLTUNZaXV3bUt1Sm8zRmVQUEJIa3J0YmVzd3p0M1E5eEFWa29FUll1RUFSMEthVkNWTkxNbHNDOUdwTkdtcXNxRXpaNkdJR2YxVHp1Q3Q0enp6eUZnOTdEMkZUZGg5bGFmVTBmRHIzekE2d21GYmxZWkcyTW9FV2V3TDEyTVNZU1JuelY2VUl3WXA4dFBpNE1MY0FYSGRYMEp1YWlvdFNlVlFQNFVZYUtEaW8yK3M4TTQrbkdZM1FGakZlL2g4ZXFCdkhicFNWNWdUZXMvQisvWGxncVdxU3Rsc2JwcnoybzFpVTZRS0ZpaC95S2RwQ0gyVE52ZXJVMjgveXJuVmZ4elp0dHFGZ1k0Wk5jRlZmeHhLckx2TTc2OWpjZXhlTVVxM1J3amE4VjREdzNBRGVIYXk4Vkg3TDZubjNkRkJsN2VMQXp6TkV3RmpQek9TM2JmNloyQ2p2M2I0YUZnaDNMRFJ3dGF1VGc3NzlTSStFeTRYcG13dkZSd1pJT3ZleFJiZHQ3SjVTQllDd3piakt3MEtGZ1dzMCtIM1p2VFFUTVNtRXNxL2xrSTEvSzlBb1NQV1dlQ1ZLY3Vzd0lFYURzeHN4aE4rSkpBdlM0SDh3Rnpwc3k4NXBJK2dlMDJWdUhkaCsvTHJ3Q1lDd0hzRi8wK2NnZGQ4SzRBU3ByaWpodEtRYzhBQUFBQUVsRlRrU3VRbUNDXCIsIEhnID0gXCJkYXRhOmltYWdlL3BuZztiYXNlNjQsaVZCT1J3MEtHZ29BQUFBTlNVaEVVZ0FBQUJnQUFBQVlDQVlBQUFEZ2R6MzRBQUFBQ1hCSVdYTUFBQXNUQUFBTEV3RUFtcHdZQUFBQUFYTlNSMElBcnM0YzZRQUFBQVJuUVUxQkFBQ3hqd3Y4WVFVQUFBTzNTVVJCVkhnQnBWWkxUMU5CRlA3bTNyYWdGbEpRYUkyaUJJelJoQktKaWMrZ0ppN2NtS2hyZE9FZlVIVHJ3dXJPdU5CL29QRVJWeVlhM2FzeDZzWVhqUXMxMFlKZ2hBSVdLTkQyM3ZhTzU4ek03WU5YTUp6MDVNek12Zk9kYzc0NWMyNkJGVVJLR1NHOVN2cUNOQ1Vya2pGci9hVHQrRi9oVFFaZ3RYSm5PVWRpQ2ZDTFpCS2tFWjRQakRwNE81UlhkdGJ4MUR1eHNJM081aUFPYjY5SGR5emtiNTBpdlNhRXVMMnNBNmJEZ0N2QVJ3T3pHSnNyb1dsZEFBMTFBdlVCUyszSXV4NXlyc1NmYkpIMzRQcnhablEwQjN5WUJEbTV0c2lCaVZ4NXYvY3BpNmRmYzlqZEdrTEFZbEJMdlJOZEQ1UWtNSkZUTzNpVGNwYkt1RGk1c3g3bmVocDh1RXQrSnNMbm5Nd25wdVhlNTFrOCs1WWpDa0tFYStsWGhFQjhFN0EzQ25pRSszRU0rREtwTnFvTTJINmZLT0RNcm5Ya0pPelQxVU5PQmkzamthbUovUGhieElPQmVXemFFSVFqYlJROFM2bEQrajV0RTBWQzZZZHhXNjBWcEg1VzhBUmF3a0hjVDg0alNkU2E4N3VqTWpEUnAzaHk3dkVFMHZNQ25SdERpaGJCMUZEMDlBTkgwc0lVMFRsbkN0cEtuVDZwUjhiRGowa0gzYTAyYnA2SStGUTE4Y21jNWxGeTFFVjZqdkJzRzFsWG9DNGdGdFhZcnhrRHVsQ2tnRk1VaXRMa1dGRmxZYXFybngyYzR0R2JZVXJOMGxGUE93S05LdktLQjJrT3pMZVY0dEN6V1pjRHNnbEQ0dTF3MmNGUnpud1BqMzVtaW9ZU0N3YzJBek1GRFpRditpcVZMUlNyMTdST1UyeTlXNkFDWW93QnlzSkl1MlVPaE9wZEt2QU9taDF2QTI3MFN1SmRJa2ZBQmFwTnB3Umw4eVZadHZ3c3RzSERyU01TaHpkTGJHdlVGVGZubG9sc0Q5UndLWFNkczdEbitvQ2tzaFNxTkpjVHB5UlFwSVBtNkdXWndBcUo3R0NRUFlWREZ0SjVnYUdzd1BNVWxXSmFZRFV5Tmc5Y2ZpVndqQ2dhenVxMVdJUHRQNTZ5akFOMFI0TjZpWUw0a01hcXhkWHRDUzlIekFKbDB0bFVKdVl6TzNqRm8wTnRRVjNUYXhYQ09OZ1c5R2RQMllIcUdkM1JBQ21uSnBjc2RycmNhS1dMMXRHNElqcWlZVUdYclp6QkU0c09oL3ZHUzU2ZGpkZnAvcUk4MUhxWmM0RXIrenhjNlBHV2dkWTk2V3J2ZW4vcGJuVXZPazg2eFo3NzRpRnovV3NCam0yVnlPU0I4WnpBL3RpQ2g2Ymg5WFhWb2FOSkhiRDZOdkNndWwzM2s3bkY0d2RmSER3azFSZXY4dG9PdWlONXVnOGoyVnB3N2tOOVhTR2M3U3AvZkdyYmRaV1RCSFJueGM4cEQ5ZGY1NmtNcWNiTHIvbk5va0pNdk1VbThLQnFja2I0cTVaQTFZNEYyYXBNVlB2bWVUSmR3cnZmSldvbG5yN3RKR0VLTkU2QUI3ZlkxY0JMZmpLWEZQUFJ2eXRYTHkva0d2NWQ5QnVBVEJWZ3lxd2xTQ01yWWZ3RFNsQTdnQ3Bud0tBQUFBQUFTVVZPUks1Q1lJST1cIiwgVmcgPSBcImRhdGE6aW1hZ2UvcG5nO2Jhc2U2NCxpVkJPUncwS0dnb0FBQUFOU1VoRVVnQUFBQmdBQUFBWUNBWUFBQURnZHozNEFBQUFDWEJJV1hNQUFBc1RBQUFMRXdFQW1wd1lBQUFBQVhOU1IwSUFyczRjNlFBQUFBUm5RVTFCQUFDeGp3djhZUVVBQUFMK1NVUkJWSGdCcFZhOWJoTkJFSjQ5bngwN2tlMEFSb29FU0NtZ29hWW40Z1dnVEFrdkFDN3BIRGUwcEVVZ0pTK0FCQklnVWFBa05PUUIwaUVTRjVTSi94MmZmVC9EZk90ZCszeHhrSjJNTmJxOXZaM3ZtNS9kV1JQOVI1aDVWYlFpdWlkNndoTnBtTG15NkRvdEtqQXlBUFBLem1WRWFnYjRLM2xzaWE3aS9mRFBnTDRmOWZYejlaT1E3dDltY2wyWE1wa001WEk1eW1hejFyUXBXbFZLYmNmeDNBUjR4WURUWURDZ04xODd3Y0h2d0MzbFUzVG5ScHJ5ZVlBeVJWRkVRUkJRdlY3WGRxVlNDWVJ3NksxZ0ZJV2tlb0VnNWptMVdpM3FkRHBVeU9hY0IydkdRNldJNWVjNFN0VEJla3FsVXByczlQU1VWbFpXcUZnc1l1V1dmR3ZaU0J5Yjh6aDRyOWZUNGZ1UlEvMUFpY3JUZHdDdndaTzZ0TFNrYldCcnBHSnI0dGdKNUh3NEhHclBrVjhZK3B4aWdIdWFBQkVvQ1dTa0ZoeFI0SmxPcDdVdFVtdnF0Nk1KRE5OenZKeWRuWTBOQURJUTd6MEJCcmdYQ2dGUDd3bExCb1VkdE4xdTI4OGIyT2Fvd1ROYlZPUVZPOFFhRDBPaWMzOENHa1kwVStJa3Z1OXJMS1JOcEF5MHB4aDVuamNPMnhyNGtlSyt6MUlrUzhEYUNYd3p0WnNpc3ZiQU1nU1BGVTRsY3JiNXJrNkh0VWlNaFZOSlRsMUZXUmRFWk1Cb1BJNEw1dUZFSU9FeFM0aFJTQS9YRkgwcjM4TG5tbXNLUW44YlBLcTVBZkZES0xibFpDZG9BdU0wRzQxNFJBSkQvRmdXdGIweC83cDcwU2MxZGI0ak9FVnppTFZKYkFRNFY4T2drSE5vUnVkWVVKVFd1emRUZHFLSkd1ekpZS1BiN2VycXg0djg4cU1UL0R5ZW5QWVBtMHlQN3ZGTWFCUWNHb2FoTG5BK244ZjBQdHcrd0FpSEs3a3JyaXBtQjBFK2cyRGJFdUEwWG9jRXRzZ0FzSXg4Y2lRVmFMUDdlRnRlWGg2SHVnaFJmSDJoVUxEVHU0SmRzenZ3aFdnVEVhREpUY0FYaXdaM2cra0UrbTdBUUJPQXlVNGdDaXljaHlRZUxXeGdhNlJxTUNjN0JQMGJ6VW1HRlN5VVFuRXUwM01vbHFwazZtenZRdFMyaDlHTVd5M3BWZGxjNmxwK0hmdGMvWExPbSsrNy9PT294YzFtazZYdnMvUi9sc2JHaVQ4Q1pacEh6S1cveS9QTEhsL2ozMFhaQURSaWdDZG1ic3VrOVZMNUIxWi9QSFF3R1BudEFBQUFBRWxGVGtTdVFtQ0NcIiwgUGcgPSBcImRhdGE6aW1hZ2UvcG5nO2Jhc2U2NCxpVkJPUncwS0dnb0FBQUFOU1VoRVVnQUFBQmdBQUFBWUNBWUFBQURnZHozNEFBQUFDWEJJV1hNQUFBc1RBQUFMRXdFQW1wd1lBQUFBQVhOU1IwSUFyczRjNlFBQUFBUm5RVTFCQUFDeGp3djhZUVVBQUFSV1NVUkJWSGdCcFZadFRGdFZHSDd1NWJaQUN3bWdGTmdDWThwZ0ZFaUV5TkEvRThQVXpLZ2JFYjlqQnZwalVYK0lXZFFmYWlnNmx2aVZtQmdOYW5SVDQrWkhuRHJqRCtNSFRKY2x3eGkyZGNWRkhLVVE1bWhuMjdXNy9iNzMrcDdUZTBzWnNKWHNUZDZlYzg4NTcvTzg1ejNuZlUrQnk0aW1hU1drQTZRanBHNXRRUUw2V0Q5cExWWXJ6RWdIeUZYMnJrUWtMQVArTkRVTzBoTDJQWDdhaTRvU0NRVWZ2Z3ZONWNLTDNhK2p2RWpDK2pJek5xMnpvS215d0RBTmtnNEtndkRXaWdRc0hEbzREdjk1Rmo4ZGRlT0JWaXRxdnQ4UHNhRUJJK3MzWTBvcVF6eXBJcHJVNEEwbm1RMmU3N0tobGdoMWNSREo0QklDM1hQT1B1YWN3MjlqczlpWlB3bkI3WVp2NjczNGFFeUdheXFJbSs5cWg1YTJZRWFJRVprbkVNZnQ5VVhrVElrQjk0eXhFOEdJT1lzR0M0dTgreFVrNmpiQTNOZ0lZY1lEY1ZNSGpwKzVBRG11MEdJQlIxSEZnZE1jYXJwTDdUL25ZN2h6WTRhRWhhdVZTS1lOZ3IzVTlDb25UeURZMFE1VFN3c2theEZuRjQydE1pUkJ3TzRYRG1VSEZWSC9PY0pYRVVrb21QYUZNZFJkaDlicmJHeHlsQWh1bFhUdmU5bEk2UDRlNUZFckViUVlrUW1VWTJZaXlYNFRpc0E3TFBiUndEeGUvZm9ScEN6a2NwMEs2WWdUZVg5M0F1Lzl6Slozc21zdVVXYzcrMG9sa3hBR1hvYjQyQTZJUTNzZ21rd1F3bUhJSFp2aFBCUEFPWCtjRThRVkxlTi9JcVZoYmtzUGNPcGp5RTBSVkZXcThJVitSZUcvb3lpdTZtUkwrbGtFdHJIZXB6OU1ZdUpzbE8vQTVRN2gvZmx5Q0o1cFdCL2NoaHBSeGhlamM5ZzE3T1FFaHNaU0t0WmVXd2lwYXdmVytIdGgrcklOcHNCdGlFUkNoZyszTUlJYldPK3pINmNRa2xQY3kwQW9nZWZlSHNjZHJuck1EcjJEcW1kMzRzQTF4L0JTYnhQaUtTd28zYUNCNG56c0tTN0VjTVAxaUsrcEE4eHRHUGhyMGlDb1pRVDgyR2ZuWlNnQytXL081OWRRSVQzaTlPRW14eWtNUC9rQjRyRWtIbjN6OFVVN2lCSkJYK01XUEN4dFFGZEpIVXJOVmxSYVN2RlFjMWVHUUdCNXpucFBmZU1GM1RRNjFEd0lvb0Jsa255SnlMNFpIRHkwSzMyZkNFVnhub1JxczBHcnI0ZjFxNE44bkIzeU5HT3lta1VpMEhMQlhTVEI3dTJ3U0daT3dNQkVJbEM2NzhsTVp3anNGV1o0UW5HZW9MbVNXTXRyY0xybGJsU1hTY2pYOGxBMmRneGFVek0rcWM3SEUra2x4OWtaSEdhOTl1cUNoUXhkaFJ5WUxNYjRpU21ZNkZxcmxIQVgvZWZSVmxSdFRIL0hDSGpOYUtJZDJDdE1TTmVZM0FuOE1RR2YvN2NSKzEwcCtLTEFUUGdpT3V3M0d0UGZHcVZpaEpyT0NXOENnNzljb0VNVzZiQnpPK2kwYUR5ek5VWEZhMXZMdEhXbGVjeHdIMkgwR2FXbWp6Um90NWx4WDRzbEhhclZSSXNYUEkzYjZ1RDhiV0JUbklCVlBXT2dwOWxLYXVFZTZhWHlDdURNZTVYYjlMUllqZEZCSFhQSmcrT2doajA2OEFSVGVPUDNNSHdSbFpmcHRBaUxDQWthOW5JVGdSZkNiak5sZ3p1UVpYR0pRMXEvVHNJemZNS2J4Qjl6Q1hwVUZQaGtoYTloT2ROb2s5QysxcHdOdk95VHVjS3UrYU8vVDh0ZFJyU3IrSGZScndNRXNnRGQrcGlEMWZ6TFlmd1A3YnB0c014OUxIQUFBQUFBU1VWT1JLNUNZSUk9XCIsIEZnID0gXCJkYXRhOmltYWdlL3BuZztiYXNlNjQsaVZCT1J3MEtHZ29BQUFBTlNVaEVVZ0FBQUJnQUFBQVlDQVlBQUFEZ2R6MzRBQUFBQ1hCSVdYTUFBQXNUQUFBTEV3RUFtcHdZQUFBQUFYTlNSMElBcnM0YzZRQUFBQVJuUVUxQkFBQ3hqd3Y4WVFVQUFBT21TVVJCVkhnQnBWWmJieE5YRVA1MjEyczdGeVEzVFhCcENRUzNxYXJLWENTa1ZxM1VObXJWNS9ZVkpRL3dDL0FyVDBuNEJmd0FKQkRoRFNSdUR6d2dFUkFRSkY1d0xGQWdrSXVJUUFsQnlmcXk5dHE3MmNQTTJUM0dqcDJRaUpGR2U4N3N6UGZOekRsN3pnTGJpQkFpUVRwS09rbTZJRDdKZW1qTGtBNWd0OEpCSWNCTzVjSldSRm9iOE5QMEdDTk44Tnh4SEZRcUZmbjBmVi82UkNJUlJLTlJkSFIwSUI2UHExQ0xkRnpUdEhOYkVuQTdRbkJNTDlld1Q3ZmdlWjRFMUhWZEtnc1RrUzljMTVWeko3NFhxWjZJZ2hramtuRTEwZHRramt0UGl6ZzdhVWxBenRBMHpTWVNIclB5TzY3a3pKMTFURkNNSXVDMWFTSUkreGVBWjB1NE5ldGdzRGRXQi95Y0h1cUo0ZG9MaDBoS0NuZFVyWW1xZ0Z1VG1GdnpjSG02ak40dUV6VmZoMkVZRW9CS2JsRUZ6ajVWWDBOZnQ0bUpYQms1YW0yNGZoY2tRY2gwVXRaR2JkRjBRNnJqTndQTEJkT2E5NFI2cDVMaHVBbEtNSlFoM3VaY3dmODh5eTI3ZUc5VEVHVlZkRFdaMVdaeGFpV1VxN1ljVjkxcTNjNitKWXJoMk55S3A2cGd5VERCZnp4NnRFUkcyUTREK1JvUmJBUUVGYWVNcTNmUG8wckFxMjluOGZENVRibXpydDJkZ08wRVBYZkl0MEFFb0ZqR21GcXFFL3pGQk1kNE5ML3VFYmpPSmNDampBcGhnblB2bnVIYnZnTXdzSVprOXpNTUhlekV6SnRwcFBZUEl2dHlTdnJrQ2ErMm9WcW1ZNXFxQ0dWQUR4Y0VLN2FRNE9yTDhJVGNYWGk3K2dZK1oxamVndzNQaDdVMGhZSTlCek1TUmFsVWxENGI4dnZqQ2dLMVhkRkUwTEJxeXZHVFNSY1JkTVk3NEpaWHFkZDkwTDcrRzY4WDUvR2g4STdhNktCVk5EUUNNTUVpRDdxamVnczR5MCtwbzdoLyt3cXlNMW1VOWVQSWE0ZFFwTjB3OCtReGpnNysyZ3BPRlh5engxQUdxMDV3SkdrR0p0RWM4bDN2UWFSLy9nVkx5dyt3WXMwajkyb1NxNFU1cEZQSDBaOU1vWjE4LzFYOTJNank2RDdwME8vOUpxN1B1bTJPUCtDZmYwOWdaZTBQSkxwNzhjT0JOSTc5T0lTQmZZTm9Md0svOVp0cWNvTXJPQmRVRUNFMXBNUG1LbGlTUGZzUmk4WnBQYnEyQlU5MmFUaXl0MTdCZFoyMkZoK3o5M2cyY2pqR1d3ZENNZ2pzUm1RTXhZNysyYWxNRndsN1VlMmlVNlFXTXc4ZmprckhYZUdMQUh3NEhVTXFJUmRZM2cwOGtBVE1wQXdqNURTY2pwSi9jT2F6Ym8wclF2Vmx6QWduRjhoNGlObHk0WXdoT0ZteFlQbCtqMWJVK1hMWmZNZzFFdkM5c0ZEcHBMNGJqZUJqMkNhclRIaXBTNkZiUzlpMkxRcUZnckFzUzJvK241YzJmcmZwUnlDRG5VaDQ2VjhVTzVkSjhRVi9GNWtRWUwwQmNDRzA4ZldZMkE3akkrLzBVd3VZMnJaN0FBQUFBRWxGVGtTdVFtQ0NcIiwgWGcgPSBcImRhdGE6aW1hZ2UvcG5nO2Jhc2U2NCxpVkJPUncwS0dnb0FBQUFOU1VoRVVnQUFBQmdBQUFBWUNBWUFBQURnZHozNEFBQUFDWEJJV1hNQUFBc1RBQUFMRXdFQW1wd1lBQUFBQVhOU1IwSUFyczRjNlFBQUFBUm5RVTFCQUFDeGp3djhZUVVBQUFPTVNVUkJWSGdCcFZaSmFKTkJGUDVtOHFlTHFVMWRzQzFhRFVKRlJVVlJ0RGFDSGdUQmk4dE5zS2dIYjRxdHVJQUl0bDVFQkJFOENLTFdneWRQZWxFRVYxeWdLcmdWeGZiUTBweHFvWXR0a3IvcG4zOThiLzZaTktWcGFlMkRsMW55M3ZlOVpUSVRZQnBSU2xXUVhpSjlSZHFseG1YQTdEV1N4akJiWVNjRE1GTnBuWXBJRkFBL1JVTXphUVd2dmZmdmtPbDRCcS8rRzVRL3JHMWtlQ2xDcFd0UUZOME5wMnliZFIwa2JSRkMzSmlTZ010aHdEV3dlK002VkNJQldWY04wYlFVVXBacUY5OVBRbVZUOEVjVFVMUVRpZDBpd3RVV3BwbElXaVlSbU1nMXUzdnRLakozYnNQWnZJV2lEVVBFUWhESEkyeGxYQlRac3crUkVaSG5kcUJvd1NHVVZKMjBjRTAyRTJGclRzTVhMZ3VEajkyN2kvQzZkWkJzUUVDaTFnRk9SSExSTUxnZHlaY3lBc1pTN1Fndk9vS1N5cE8yWEp1SXBGc2FIeTVOUmJiOUJ6SkU0RlJWUXFiVGdicWtHVktraWNDRkVDNms0RFdQNCtvVVYyTHN6MDE0STIwdy9XdmxpV09pUDhxTDlKRUdVS3lnZ2tDbVVrRUd1bWE4NjlDY1N1TURFNXVvaUpTZEhLZ1FrQ0VTMC9oZGZNelpjeit2c2gvZUFZa2VEU29IQmlCTFN6UjRRQkNtV2pnR1VKaGVCT1V6MVlKVUdUb0VBbDc2STd4a0c1eUlKbWxrcjMzNjFEeDVRcEZUSUJST2YxOGZPcU5SeE1NQktFYUp3SGR5RFI0L0cwcG5BR3EyVUVORVFQNDB6dzYvc0FRNzJXdWpOcVg2MjVLOFRTYnhLWmxDZlBGQ2FLOVJqd3pDS0N4RW9xZzM4TFFwTjl4UHR0a3ZZNDVwQ0pVbmdlL1pMQzZPcFBIWjgrQlNZTStKNUVKNUdRNm01NU5YT0tBWEtnK2I1NzdKSkFpT1NiTCszd2tFcHJhVWl1UGdTdGs4Yk80ZjBuc25xQThIblJDK0Q3czQ5MXRnV2xIbTJQb0tTNHBkUEtnTnRwbWdtNWxRSHVVMDBFMVpIQzBweG9xUXhDK2EvNDlVUjJyc2REQkhFSXJIb1g2Mll4TmxjYUM0U0dmVWsvVXhXMkcvbGVWcjdmSXI5L1VOeitUZXZYcUhJN2V5UEc4K1UrR3V4S3YzMk9WalJ0QjNocXpmQVZFZmg4TGNwS3AwR1RZczJtNlhqeVRkRjN4dnZPWlY2T3g1VFdCMU5xSVBGSDFjM3RwcUczYy8veTQ2UmpySUdVaERNanYwWURoYzI0VFkvTlg4ZTlWdkErOXBBbWJLYlp3NUJ6SFRUSXdCUjgvZ0RhdE8yMjlhRENaeVhUVDNkNDVFdm53TlZWTXpUcUltS3dPdlg3Z2QxN1k5UkFNUjVJSG5YclZDVDJZanpQV3QxeC9lby9mVFUxeXY2MFJ2T3FGdElrNlVHbG1IK2lWNzlHaWs0Sk5aT1BQZzBiK3ZaaTZ2MUJ6K1hUUWFnSUU4d0M2ejE4eDMvblFZL3dCY3lQNE5KS3BjandBQUFBQkpSVTVFcmtKZ2dnPT1cIiwgVWcgPSBcImRhdGE6aW1hZ2UvcG5nO2Jhc2U2NCxpVkJPUncwS0dnb0FBQUFOU1VoRVVnQUFBQmdBQUFBWUNBWUFBQURnZHozNEFBQUFDWEJJV1hNQUFBc1RBQUFMRXdFQW1wd1lBQUFBQVhOU1IwSUFyczRjNlFBQUFBUm5RVTFCQUFDeGp3djhZUVVBQUFNNVNVUkJWSGdCclZiUFMxUlJGUDd1bXpmV3FPaEFSUTRWV1Zha2diVW9LeWVvaFJDNHFUOGdzMXEyYVpKKzBNcHhHWUcwYUprcC9nRmhHeUVRTE5DeVZxVVdia0pKaE1ER0dXdDY4L3ZkenJudlhwMXlOSWM4Y09iZWM5NjczM2ZPdWZlZE84QUdJcVVNa25hVGpwTE95bFdKYTErRXRCN2xDaS9TQUp1Vi92V0lSQW53V3pSRVNZTnM1NVB2a0YwZVVhTjBmNnAzTFA4ZStBS05xS2h0ZzExOTJpeE5rUFlJSVI2dlM4RGwwT0RJajQ4aEhlcUR6QzRRNEU0SXV4YVdGVkJMWFBjWFpNR0JtNW1ISk05aTZBa2Fnc2NNVEpSSWVveGhsWWdjNlVjUDRkem9KRUEvL0pXSFlGZlV3dllKV0NLbGxPZTJ2d3IrcWtiWTIvZmp3WGdIQmovM3JoRHczaGpETmpVdkJzODk2ME5GODNFaXlFRUlWaTlYazY0c0dpMGZjQ0I0Rk0rLzlDbmYxYVl1SHJvSmM0Z3ltVE1aY0dtQ2hla3BaSW5BcnRzTks4WFJwcjJvUVNOU1JKQW1NbSt1Zk1MVGpIU3dxN0lPZ3pPOStMajRGbnIvK2xXSmRQVFgyRWgxZHFpVWZBUmxPUTZCT0FwSUtQQ01SeUpaalMrbGZCbnkrV3did2hLS1JNc0ZQdWFjd1dXMkNtL0dnUG12YWxPc2VKd3ljTHlJcFFja0tFcjhEUzY5ckRKdUdzbkNNaEVBazdFSmt3VkxoUEV1cVZNelBFeVJVL1JVY0dzcEJrRVpNRGlEd2pXYUpuWDBtTmFFRGhFNCtKRmI4bzRNYmRUNHQ1ZUc0RHhYNUlUYU1LcS9mZzVrTWhDeEdEa0QrcUNaYlMwbEVvbnNFZ3B1bnZaSGNORXgrWDNDUEt5MzlZWlFlZVlKWEVBWWtseU9va3g2Qkp5NzR1Q2pWRVFtZWU2aUlQT2VyUmNuODh0L0VLdytFeVUrYlFLZ1Q3ZzQ0TEtFODU5VHM1cGFiSldFcXZhWmFXS0Z3QmNPWXl1RUszQ3dwc21ZSDVqZ05jK3M5blpzaFhBRnc2R0x4bnpCQktyN1dhM25JRnJENVpaNGpkUlY3a1h6anJQR0hMTG9hSEdiZmNXVzcrNTlSV0MwSEZFSGluNjZUejQxcm9IaVhuU2ROTUVaV0pxa1BIUnZ1SEw0TmhwcVZOdFdkd05QRkFFenJUanUzSU13bWNoL1o2TGVrUjU0eDVFdTQrN1JtR3N1bkNpOHpncDhtb0piVFcwOXYrQzFhM2pmaVN5S1dzMjN0MkI2MjAycSs1bGk4S2d4U2wyWkVVMml2bkNaZWc4NEk5UStaaUNaVEtWWkF3Uk9BWlZ0RUlFV3M3VGtsYmxPMnVyU0g1Q2JsMUg1SC84dUlob2dYZ1E0cTMxOFBRWTN3dmdOWnVUenJ3dC9XdUVBQUFBQVNVVk9SSzVDWUlJPVwiLCBZZyA9IFwiZGF0YTppbWFnZS9wbmc7YmFzZTY0LGlWQk9SdzBLR2dvQUFBQU5TVWhFVWdBQUFCZ0FBQUFZQ0FZQUFBRGdkejM0QUFBQUNYQklXWE1BQUFzVEFBQUxFd0VBbXB3WUFBQUFBWE5TUjBJQXJzNGM2UUFBQUFSblFVMUJBQUN4and2OFlRVUFBQVN0U1VSQlZIZ0JwVlpyVEZ0VkhQK2QyeGJLUzFvWWdveHBDVWd5RnhqNEdnd1dHWnJnMkZ3VzladXc0R05xZkEybWZpRW1LL3V5eFVoOExHWStzNm9mek9RVGZocVlTSmNKMUJtM0ZSeXZiZEt0d0hpdVphVzBwYjNuZU03dHZUeEdXV2IyVC84NTk1NTd6dS8zZjUzL0tYQUhZWXladUI3bTJzbDFoQzJMUjUxcjRHckIveFd4U1FXNFd6bTVIaEdKQVg2UUQxYXVKdkYrY2JvSDNlUHR5amkvT0tlc3lVcmFoSHpURm16UHJrWnhScG0yMWN1MW1SRHkyYm9FSWh3cXVBTDQ4K0FYbUZnWWhkbVlnWlE0RXhMMGljcTZRR1FCd1lnZjQvUFh4UzRjS2ZzZWVaeFFGU3NuYVY1RG9GcXVzTGRkc1RIYlFBdlpuUDRvREpJK3V1cDJYMWxVZzVFQVJ1WUdzU2UzRnZzZk9hUjliZFE4SVZyTStYQkJoQ1V3M1FwL0tKbjY0d3ZJcGJsekdQRDloZW5RQkZsbERsc3lTaVVpR0xycHhQTjVyMm9rSWx3bG5NU2xFWnprUTczVDZXUy8ycDdCdTYrWElpRXBFNGd2SWpTK0ZGTTBsWjMzZEpFcnZsNDJIcmhHbHB4blVTWkdHVGZLeHowWlFzdU9WbXlONXNYT0NYWVMxZm9STVhPcHBCREhCb2N4czZNUTcrdzNZOWRUaWVDTHdDUVRxS0VRY2x3cEc1UFRjSG0ranpxbU82U0p3Q2hSWEJBL0NsejE5S01vdlZRaFVjVXNDQnI0dzZkeTl4OEk3TnNMSG5FNE1qSnBzOHlrSjU1T3hIdjFadVE4b0YrT3ZXUm1zbUVya1EzYmNJTnRvdWR2bmtVUEp4dGZjR0ZxZmt3aCtxVDhGODJMWmtIUXlSOHFReDgxZ1g3ekZmVGNZbDE4UElqWmpPT0JFSDRJaGVTNmVwUDB4a3U4aW94UzFHSXRHVklLalJpZWxPUzRDbm85bkFiSHRKMTJUWjdXRldXVWtyY0tyZEV3aVZNcGtodmM5eHhJZHhkMG5FQVNldzBHd0dpRW0rTWQ5UWR3TmszRzRZTVo4b3ZQSnV0d2V6bXhJQ2hNYkZGWGpKQ2hCalBJSlhsWm04VkhseUJRTWhWOHJCaVMyODBKb0JBc1ZhV080M0hTdGxDWWZlaGZJR1UxeVRqU3VBRVA1ZWpWSkZPRlJEeFNubXladjhxU2hTWGt0eXNRUzhGVlNwM0VPTnF5ckF5cGNvU3djQVJqTndLVXNiQ2tsZXBLRVFYQlN3SkVpbCtDRVFRdXJoYmNsOG9IOTVwTm81VGl6VnQrOXM4R3dIWWltMVJ1UzVRUVM2UVVSQXdWQ01YdGhvOXNsTE81NzN6V0s2a0UwSldYcnphY2grN1lRcEJWTE02aitFQUtjWjYyZ0lPdldzTUlCMDE0Z1FWTngrRktPc0YrOG1heHBvSFBhZHZFS1MxUEY0VUhaN2hXU2pVMWtMLzlXcGs5c3hqR3l6NC9LU2hOb1BhakR4Skxqa0dMb2dJcUoxU3pTRndWaGtKNlhQQ2NJMy9PdHJBUlh6OVJEalpsNU1DV0pzMkdOcEZrMFRWRkpjRzlkdzk3dStNMzlHVXdmTm1jaVpxZFNjdWd4aW9hTWU2V2hvTlU3cHZybGV4VGJYRDdMeStuakVWem5tbmNpQityZXJUWlhGNzJ4TXRKN01LTHE0YytJQ1VXQjdPOWtrYk1wbFNFamJzRU1LNkY5TlErMDBuNnZCOVQzaTUwc1ZMQTFPWm5mZnc3YmNxMnNoZFpvRFk3Mlh1S2Q4aFV1T1EwNXBqOUhVNVBsenpzYytweEoxR3RyODF2UUYxQmpHYW5raWd0UXp4M3VGdlIwdmUrVXJacjYzWTFzR1o5N2NPTnFPT3F5dXAydllMRXlnZHg2ZURmVy8ydy92MGFKb09qNjNJSTRLTDBNdFRsTnlwTlRoVnhxMW0xbDFoWFpvTktvbHladmJNT2RFKzFLNFNUZ2VnNVNkS25Lb0RiNzY5ZUNSenp5bHpITXVYU3Q3RzdsMDUyRC84dUdsUUF6d3JBRVhYT3FwYjV1dklmZ1hhN1FoTjljU0lBQUFBQVNVVk9SSzVDWUlJPVwiLCBHZyA9IFwiZGF0YTppbWFnZS9wbmc7YmFzZTY0LGlWQk9SdzBLR2dvQUFBQU5TVWhFVWdBQUFCZ0FBQUFZQ0FZQUFBRGdkejM0QUFBQUNYQklXWE1BQUFzVEFBQUxFd0VBbXB3WUFBQUFBWE5TUjBJQXJzNGM2UUFBQUFSblFVMUJBQUN4and2OFlRVUFBQVBhU1VSQlZIZ0JwVlpkVEZSSEZQNW0yUldobEVWcW9TWEJVbE50V3BSS2xacElHK3hUYTFOQiswYjdZaC82ODlSaTBzWW40eHBmdEgvcFEwMmJ0Z2xvMU1Sb2pMeW9NU3FnWUdKV29nSnUvR2ZaUlNDeXlMcXMvTzNlSGMrWm5Wa3Y3bUpRVDNKMjVwNTd6dmZOT1dmbXpnSlBFU2xsQWVrMjBoYlNYdmxZUnJXdGdiUU16eW9jcEFIbUtvMnpFWWtNNEQvUzRDRXQ0T2UyemdFMHQ5N0JXUnJEWTlQS3A2emtaVlFzZlFWMWF4ZWpabVdKQ1EyVGJoZEMvRGtyQVpkRGd5dmduWTJkNkJ1TW9xZ3dGd3Z5czVHWDQxSiswZkVZSGs1TW8vZHVCSktlai95MlRoRnE4UkRKOWpRQ3ZYTEZ2dU5mTC80NjJJUFZ5NHZoZEdZcE55SFlCNmt4R1N3eFBobEg5NjBRdnZ2aVhXejl0c3JBYlRhWkNGTnpHaTV4V1hiODU4WGZoM3kwb29VYVRXZ3Y4V1F0elVScHArOGVmcWhmaHEzZlZKbHlWUktKM3hBMDByRHB5bzBSclBycUVKWXZlUlY1dWZPU0JCcFlKdlBRYzJtamt4eVBzZWdrcnQ0ZXdhbC9hazFmV29uZ1k2RlgzOHVXdDJvUG9HOG9pZ29pb0pkSkdHRmdINE9uWnlMVjJIVnpHRFh2djZaSXRDeHcwczhHMDFRR0J4eTRINW5HL0d6bmpBenNUWk8yMVJ1U3FWaGN4YloxRGlrc25VVURFOVR4ckxtdEx4bE9vTVBoS1JTNmhjcmk3VGZ5c2VuekpRUXdqWjdiNXlDeUMxQlpWa252SE5oOStCcUNhbEZJYm1HeU1XbHpxOThRMUxCbEJjKzZibzZvRmJCT3hSSUlFVWwwSW9iYytVNTgrZWxpcksyYUIzL09ZZHh5TmFIcUEwdlpGcnF6YWJ2R2xlL0VsSlhLOGV5bFFaTmlHU09xQStVZmlNNm9SaXllUUNRYVU5dnc0V2dFZS84NGdmcThTbnhmOUFuMi9YNGFrZUIxQW8xampNNEUrNllLU0ZtYkE4a0VUak83MnI4VGp2NGdzblNkVTF5dlYrTk05MHU0Y05lSDhsQTd4Z014ZU4yck1keS9DaWNIZGdOM09sTGRZTFhveDRxWDBxeGUyWm5BejB6SWQ5TVF4SlB5SUJTQTk4Yi8rS2ppT0VKRGVSZ3BTV0Q5aWhaYzlBRWxFeEhrSUYwY2l4YVphVGhGa0ZWZERlbnJTU2NZRGlDLzJ3R25heW4xVUtDNEdKZ01UaUxZNzRWL2FCRHZaQ0FRNWN2TTlES2ZBdzlOdGlYT3Q4UGFXSmRlb2ptS3ZVVE9vODBRYXo1azgyWW00Q2FQOGxOOFl5M0UrUTYxbDU2SGdGdWRLQzJGNitKbFkzN1RRWHVkdnh1dC9KVDE4NWJVU3VUY3NXZkV1UGJzTjZGTi9DMXk2SWV2U2NOaVRUVWNtdVJaUlgycmZ0b0NsSmR6OHVwdW1PbVF2UDZVV0wvdWtsWlJvVXhvbFU5UmZzKysxaSs3N0RkY1ErWlZVTU5UTGoxZDBscjVYaHBSd3FZS2VNTjZtZWhvdDRONzdKaVpya3htNTV0Tm5YQkpUY2Z4WTNRU3V5RURnV1NBbTg0TTc1SjFuNEhMcWlYamxUbGJKbnpwTjhtNVM0dDhnWDhYRFJwZzFBYllxMjBldmMxbmxVZmtnWW1EQUJ0SFR3QUFBQUJKUlU1RXJrSmdnZz09XCIsIFFnID0gXCJkYXRhOmltYWdlL3BuZztiYXNlNjQsaVZCT1J3MEtHZ29BQUFBTlNVaEVVZ0FBQUJnQUFBQVlDQVlBQUFEZ2R6MzRBQUFBQ1hCSVdYTUFBQXNUQUFBTEV3RUFtcHdZQUFBQUFYTlNSMElBcnM0YzZRQUFBQVJuUVUxQkFBQ3hqd3Y4WVFVQUFBTnpTVVJCVkhnQnBWWk5iRXhSRlA3dWUyOW1PaGd6YUlrV2JWbUlSa0pYclorRlJMQmtMeFpkc1RNVzFxYUpXQkVXVml3MFlVRmlRZGhvU0d0QmlNUS9qUVRUMHByb2ovNHdNNTIvZTUxejMzMmR2N1k2Y1pJejU3N3p6dm0rYzg3dHU3ZkFJcUtVaXBDZUllMGpqYXVpVEJwZmxMUUZ0UW9uR1lDbHlyV0ZpTVE4NENmSnhFZ2ovUHpzU3dZUDNxZTFuVWxMSGJOaHRZMjJSajhPYlEraWMwdkFTNTBpN1JaQ1hGcVFnTWRod0RYZzVVZS9NVHlaUjMzSVJpUm9ZMW5BMG5HcGpFUXlLL0Z0SXM5SnVOcFZUNFErRHlaR0pOMVZCS1p5elg2eGR3WTlUNUpvMytTSHo3Rk5aRVd6eXYxSlpRdjQ5Q09Ibzd1VzRkVEJsZDdiVTE0bndwczVtVmM4RmdhLy9qU0Z0aVkvdmJVTXNGRlJUcUFnZFFkQ1Niejlua0hYM3VVZUNZK3JuVWdHTFJQT280a01KTEx5MHNNL1dCdjJJWjIzNW5TV2JVNWcxcWhlNTRYMno1cVlkV0UvT0pkSGEvYnZtdTdBVkIvbmh6M25mbUprR3RqV0dLRGlMVjIxRU9YVks0WEtOa2drK1NVR1JqTG9hSFZ3NjhRYUwyQ1ZRejlIZURVNGxzR09Sb24yalE3V2hCUjhkdW5ZVmZtT0tiTTIrNkNVUUlHbXRXV1ZCVm5JWVlpd21odjBYMWVVTytpanhiN3A2V21rMDJrNGpnUGJ0cld5dkVzSXJLRFkxdFZLZDZPVWF6K1BBK05Kb0dPVDBqNHBKUXFGQXZMNVBJTEJJTUxoTUtmMzh4eDI4b3BmV0RRV3k3TE1LTnlxYjc0RTNpZFE1bVA3bFFoZURLRk1tSmp6YzdtYzUycmhEblRXNk9qb0hBR3JFRlhmSU81L29GRlE5T0h0THBFa1k0a2l1ZGNGUzBORGc3WldLWHVwOWVSWHNyaXhBZHF4ZGFIaUxpZXoxUjFVNWpQQklDOTQ1dk5WZmFGZjRONEgxMzlncTBKbnMrdS8vVWJnYksvUVhWUUs3Nk9SS2NjUXRQajlmbVF5bWFyZ0U3dVYzdVJLMmQyaTBONVVITkVDQks5NTlaaDAzOFJzQU9jZlpDbUJNaXdMdFl2UTM0S1VGazRmcWtNb3BKMTNtWURQakRQTjlUNk1wUnc4ajB0ek1vamE4Slg3MFRWRkxEQ1drVHRVc09Cem81K2ZvdnVEL05rQWMxb1RnODY0Y215RjUrZ3BQWXU2U0tjNk4vdUlwRzZ1bXRxcVY1UWJRTnQ2UFg5OU4vQkNFekNUNStBdVRqS0pPU24veWFSanBNN2hYQ1BkQnJQcXdvbkJQVm54TVZIQThSc3BERS9KWXBnUVJVSnpEblcwMnJycnpsYW5GRHptUGN4M1pVWU5pWHRseHZQby9aakRRRUlhTWlCVUp3alF4c0UyWHlud3ZGZm1BbDNyUzc5SExWMzYxSC84ZHhFMUFKTWxnSEhqaTVGR0ZzUDRDM1hsR1RrRzZWdlhBQUFBQUVsRlRrU3VRbUNDXCIsIFpnID0gXCJkYXRhOmltYWdlL3BuZztiYXNlNjQsaVZCT1J3MEtHZ29BQUFBTlNVaEVVZ0FBQUJnQUFBQVlDQVlBQUFEZ2R6MzRBQUFBQ1hCSVdYTUFBQXNUQUFBTEV3RUFtcHdZQUFBQUFYTlNSMElBcnM0YzZRQUFBQVJuUVUxQkFBQ3hqd3Y4WVFVQUFBUDRTVVJCVkhnQnBWWmRiRlJGRlA1bTdsMXRYTENGUURIUnBEVXhrTGEweHRoYW5vcEdRRTIwR2tWODB4b052cUNXR0gxUjRrSXgwUWRJZzBYeHhXTGl6NE14cGhVVHR4cGFhbmlzYm9rZ3hzUnUreUFZQzd0ZHV2OTc1M2htN3AxMnkrNXFpU2M1bmIwejUzemZuRFBuekJUNEZ5R2lCdGEzV2NkWloyaFpFc0ZjUDJzemJsUzBVd0N3V2htdVJTU3FnTC9LUTRTMVFYOFhKczhnUHpxS0lvKzBzR0JzbktZbU9CMTNvNjYzRjZHZTdkWTF5WHBRQ0RGWWswQ25Jd0EzZ09uMzNvV2FtNFBUMkFpeGJoMWtPTXdlQW1weEVjVHF4ZVBhQi9WZmZnVzNvOFBDUkpqa1lBVkJzSFBEbmo0OGdOeUh4eEhxdWc4eUZESkcxNGRLZ2FwTUJxWHp2K0RtRi9jaS9OWUJ1N3pmUmlKc3pubjRXYWRGZytjL09vR2JlRWMrTUVGV1pqSWdvR0FVeVA4MGhicDlMeVA4NWdHYnJudVlKRzRKaG5ubzg4NU5JOW5kaFZCN085endHZ01yYmFocndwQzc5d0NKQk5USTF3YlVFbm44MTB0ZFEvSENlZHdhL2Q2ZXl3UVRQT0FHdSsvVE02azl1K0h3NkxLenpLUWh5S1RjeEJINjRBUkVTd3U4eno0Rk9DMTZ6WXIyZ2V0QThaQjlaOEFTM0svTFhHL3dDWHVvbUowMU94WlhyMEJva0d6R2pMS3R6WURUMUJUa3ZaMFFhWDkreVlaVlhrMFlYMjl5MHNmeXBWL1BQVzRJdmhrMUJubzNZbjRlY3RkRERMd1Znc3NSaXJlYlRoc1NGZjBPN3RCeHVORXh1QjhQUTk1K0J4T21nU3Z6eGw4R1dJRnNSOUNWZEczbmc1U3FDMUdhTmNmcWZYTFNiNkZjamtxRGc2VCt1a3pGMS9hVCt1MGlVU1pEM2xpVVNDbWkxQUxsdDdaUU52RFZHS251VHR1QU01clFOSlNhbTExUmpucW5VQXJxMjFOdyt2cmd2ZkU2RUp1R0docEM2ZkFoanFZVk5QODNTczg5eStkQlM3NWFLWm0wRVRURFVxVzIzRVdMeko0TklzaXpNbEN3bUNJMU1VNkZiVjFVZXY4WXFWOHZVUEdGNTZsdzIwWmpsdzk4dEsvRzBGaFdkQVJ4VFNYcjZ5dXEzZU9lS0xhM3d2dmljNml6WitFT0hnTmQraE5pWXlQY0kwZEJxQzVPVTdQOW1Wd2ljTGkwcWpuSWZhOUFQdmtVNU42WElMcTNRYmEyZ1diKzRBVUg4dEhlQ252VE84dlhSa3dUbUpvS1BWYkZlTk1teUljZjBaMElzV0VEMU5FalVHTlJpTTR1WU8xYTRQS2xDaDlhaVRVaWREUHdqNFQreXU3YUFmdzQ2ZmVDVnI0MXhkUFBRSzVmRC9YREdOVHAwejd4NXMxd1IwNmgyTHJGa0Z0ZzNXakVQcmRjL04wUzNPa3ZCbmQvNmN5RUtiWHlnNjZsQlQ3SThtOWJwdDUwYk9tTldBN0xmMkJNUHhRR0RsRm1GUVRsYWl1b1lLdk94MnBlbVR2LytTTkxZcVBJM1RpNGxuNVVFMTZJV0FzdkZxTXNwK0Y2b2x5WjZyWDh6aDNrY1dyTEpMS2lVS3FRYUhiOXN2a2R6aGVYeDNjTFRaOER6Y1Y5by9vR3lKNGVPRnd0OGorZXpGcVI2RE01U2F1WGNmb2YvMTMwQndDSk1zQ1pZQzRTbEhsTitRY1AzVUVQdExRcUVRQUFBQUJKUlU1RXJrSmdnZz09XCIsIGpnID0gXCJkYXRhOmltYWdlL3BuZztiYXNlNjQsaVZCT1J3MEtHZ29BQUFBTlNVaEVVZ0FBQUJnQUFBQVlDQVlBQUFEZ2R6MzRBQUFBQ1hCSVdYTUFBQXNUQUFBTEV3RUFtcHdZQUFBQUFYTlNSMElBcnM0YzZRQUFBQVJuUVUxQkFBQ3hqd3Y4WVFVQUFBTWJTVVJCVkhnQnJWYlBUeE5CRlA1MjI2MWl3WllnbW1EQ0R5TWNMQmdFVFJSTVJDOG1uUHdESUVwaWpEZGJFL1ZJT2FxSjRXeEVpUDRCb2lZYVQyQ2l4cE1RUmNMQldLUmUwQkFLVWt2bzdvN3ZUV2ZhVFdoSlFWN3o5czNPdlBkOWI5N016aFRZUW9RUVlkSkIwZ25TaENqSXN1cUxralppdThKQkNxQmNHUzFGWkJRQnYwRW1UaHJtZC92OU8yeThmaVd0V0ZtUlBtWjlQWHl0YlFqMDlzTGZkVmFIcGtpSERNTVlMa25BNVZEZ0VuQjkrQUZFTWdtenRoWkdkUmptdnFBTWNkTnJFT2swM0lVZkZBTUVuenlGTDlLbVllSkVNclNKUUdVdTJkZnYzOFhHbzRmd2Q1NkVhVmt3Q0lXQ0lORmtpSUNRVDhEOW00RTlONHZBNVFIc3ZYVkh3OFgwVEF4ZGN6SlRYQllHeno0ZWdkWGFDcE1kQ01Vd3ZOa1lDajdIeDIyWEhMTFRVN0N1WGRja1hLNFRSREt2Q1ViSlhIRm12aUI5NFJ5c1NBUytZR1dPb0pCRmdVbTE4N09nZCtmUEtzMWtEaFhqTC9TNlRCTEJlVU5sbitDZXRjNTJtTWtGK0NPVVBRRm9BbmhtSUVTK3FQUXpWQXR3YU1EK09nTjBkMlBmczVmYXFkcFBqMHZjeXM0bllIZDB3RWQxTjJvT1FBUXN1RkJKQ3hTeTE1QkN0M0lsYzJ3YmRuTXpIRmZBU2lSZ05UWHhjSlJuTUVHTm5oWGFncGxNQm42L0h6NmZUMnArSjNBNTFFSnJxMHFidDY3cnduRWMyRVJVVVZHQlVDZ2t5OFJWYU9jV0Q1aW1LVlVENWZQMUFHbnJIZmNtd3ZIWmJGWjNOWEtKNUFmRkdmQ2dWNHFCbEJJRzErcUphelM5RGw2N0U5RUVYbUdDZWRsUXBka040WFZVa3NvVEJBSUI3Slo0Q0thNTlaYTBaMVVzWWZUYlBSZytZOGN6RVM2cmk0SEliVlRSaitRNUUvQ1pNVmhYMVlDVSt4dWZsejdtdHZ4Mk9VVHVJenkwNXpEcUtodDA3emg5c0FhZkc1UDgxdDhTazE3bDd4MFB2c2c5NHFkR2RQZ1luMFY2RncyUXBvN1huRUYvY3d6NVEyWWIyYlAwVWV5Ui9jZDQ3dkp1NEQ1SndFeTZvNi9scGlRUjVaQW9IL1psOEg2S1ZUS2tNRGRkT0hFeWZPbmcrK29zNHArdVlqSHpzK1J5TUxDYzlkRVkyZE5lOExoK0tYWmxSaFdKL01KNTBULzhlaU1KRnpOSjZSUDBoeVJnMThHTFh1Q2lWMmFKek9TbFB5Yktsd254SC84dW9ncGcyUU9ZVUgxeDB2QldHUDhBWThieFhuVFcxMXNBQUFBQVNVVk9SSzVDWUlJPVwiLCBLZyA9IFwiZGF0YTppbWFnZS9wbmc7YmFzZTY0LGlWQk9SdzBLR2dvQUFBQU5TVWhFVWdBQUFCZ0FBQUFZQ0FZQUFBRGdkejM0QUFBQUNYQklXWE1BQUFzVEFBQUxFd0VBbXB3WUFBQUFBWE5TUjBJQXJzNGM2UUFBQUFSblFVMUJBQUN4and2OFlRVUFBQVBlU1VSQlZIZ0JwVlpMYUZSWEdQN091VE1td1luTTFHUk0waVlkYXRWRlN4Tk5hYnRRSjVBK2FLR05iU2xkdUdtcDNiYWhVTHJTUkMxMDBVTEZqV2g4cmNTRjc3ZHVOS0J1d29DZ0NFSWtMM3hnTUJuRHpOekp6TDMzK1Avbm5qdko2SXhFL2VGbnpqbjMvTi8zdjg0NUE3eEFsRkpSMGo3U3k2UWphazZtelZvdmFRSXZLMnhrQUJZcUI2b1JpUXJndjlOUFAybVU1ODYxcXlpY1A0ZnMydlZxWUtKZTdEODFna1JMUFQ1WXVSUTlYZThnMmRrU21LWkp0d29oZGxRbDRIUVljTnlkbUVZTUdTLzh3M2RTTmpiQytmTXZkVFlURitldjMwY21WMFRXTG1EazNnd1U3VDMyMzVlYTBFZy9rV3dOSnJLQzU5aStad2ovN0J1Q0NJZEZlTlVxaEdJeFdPRVFYQS9JemJvUVVpS3l1SlpBRzdHaUxZYXZmanVqYlFJQ3JrMFpnY21mRHo0d2hGMUhibU41Mnh1d0NNaks1bURaTnFTclVDVE41ajBpSWMyN2Vxd29DZSsvMjRDZGgyOXBXeU45UVUyQ0NEZzEwVnZEVTg2MlBTazBOVVJRTENwSUlwQjVBbWNDNWNGeEtRSUN6Uks0SmpIS1JHL0dJMkRid2RSOW1Qb2QwQVNHNlNlZWJQampRb2ppaHlBdE9FUWdoSks1SElSTlN2a3BPZ3ptR08rTjJxNmVXMVlJYkx0OUlCVkUwY1Z0SG1KY25qSHoyTU9NRG1wcXBvQkMwU01pYUhBdHJrc0VDamFCcWJtMkNBcUkyYUtqYlFkVER6U1c2YTVlSnVqaDBhUEhHZno0V1VKN1g3TW9qUGFWTWQ4K2wvT2J6WFd3L0swSXZ2aWtDZVdkNXhQWkZKazl1eFFlUlRvNWxRaytKNW1nZzBlZkw4dXA3cS9yRWJaQ2luTXZaQmE0TTBtV3RrODBQbzd1RDVlcDdrL3JTbzdySmljR1FibndQQVZQMVZHZ1ZDaE1DZk0xd2QvMDlueG5CK1RFQkN6aFY3NTBRQ3dMT2xjYVVKUzd6dXA1K3BkQlBNNGtEZHpXVnRTbGJ1aHRvZm5oNnB6akdkRWVMVXpFUEEyRUNVWTVsT0x1dlY2Qld0SFM2WkgrSmtwUDNiZmY2Rll1YlB2YmNULzZXRllENXdnVXBjbWxpRVJOamFqMWVkSWxna3ZwcUR3eE9FYXRLWFVvYTl2ajJMaXUxU3NCTkxmSTA1UDE4dXkxZTZncTVDQlZBejNKQkw3M1YyNHd3U0JwVjBOc01RNWZHdk1ERkw2akc5YzFsdG5mSEU3ajBNV3g2akhvY2lyOHN1RzlZUEVrSStuYkw5blpqT1NhcHJuTnJ5aHZOMGMwbHBFVGRGZ0ZYN05YZUxiNTE5V3ZCYzYyUi8vdERpWUhDWHMwS05yUHBPbmttbWFmeExUZHdzbjg5TEJ0K3dwOWJldTNnUWU2VFptSmpnTXYvTDlsMDJwdE1qeWU5bHNkRlZxM0N2aVdUUjNCSWo4OG95VUNRN0tETHljYTlqSEo5RXllVHQ5TUtZYm43aDhqWExmTkJEeFh2L0pYN1ptREp2aXg0UEQ2WWt0cW8xaFNLOVh4VXdBOW1TSWVGOUVuWVYzRWFHUVIxaE5nVDdKdFBuREZKN055MFA2amYxQXRYQzZyMS9oMzBXc0FwdWNCanBpMWZwUFdxdklVQTZwZ1JyYWNuSnNBQUFBQVNVVk9SSzVDWUlJPVwiLCBKZyA9IFwiZGF0YTppbWFnZS9wbmc7YmFzZTY0LGlWQk9SdzBLR2dvQUFBQU5TVWhFVWdBQUFCZ0FBQUFZQ0FZQUFBRGdkejM0QUFBQUNYQklXWE1BQUFzVEFBQUxFd0VBbXB3WUFBQUFBWE5TUjBJQXJzNGM2UUFBQUFSblFVMUJBQUN4and2OFlRVUFBQU9mU1VSQlZIZ0JwVlpMYUJOUkZEMXZNa21hMURUUmFDb3Qxb3BhRkQ5VUZMOGdncUFiRjZJTEZleWk0RW9RR3hkdW0yNWRDYUtnQ0JVUmRlbkNqYUswRzBWZEtJaW9xTmphYXJYUjJxU05uVXdtbWZIZWx6ZHgycWFTNmlVMzczdlB1Wis4OXdMOFJSekhpWkYyay9hUkRqaC9aRnpOZFpHMllyN0NSZ3FnVnVtZGkwaFVBVDlOVFlvMHhtTno2Q21NOXc5aERqK0RrNStRZTdSb013S0p0UWl0M290Z3l6YlhORVBhSTRRNFB5Y0JwME9CRStCVDVCNWZSbkh5QzN6aHhkQkNVV2orc0xTd0MxTndTSXVaWWJaQi9OQWwrQk5yWEpnVWtmVE1JbENlUy9hSlJ4Y3c5ZndHQWszdDBIeTYzQ1RFekVoSnFiVXRBMWI2SFVMdFI5Q3c2NVM3bkhRakVXN09xWG5CYVpsazhCZTNFR2hjQTQxUWhYQThCS0pzUWVnOHk5NHprVTFxZm4yRitzMGRpSlJKT0YyYmlHUlFVNHljbXBpVmZrdHB1UWgvd3hKb3BUeXBVVzV0RTZLWWg2QytiSXQ1dFo2djdBczBKS1N0T2ZRTXFuNjkwaVhsL1FBUDBsZjJBcFJ6OXQ0bnZXZUhSY1Z4bFJ3WkNjZWdQaktLRW1saDlBMTh6VnNSUDNyZDNieFFwNitEM0N2OEhJSzllQVAweG8xQWZSelEvZE9xNUZRR0RtWUpUNVdLMENLdHNFbzJUTUlLTG1yaGxTNk9vSTg2ZTdMWkxBekRnSzdyOFBsOFVsMHhDelp1UHhpQ1pUbjRPbVpnV1NLTVkvdGFFQXhvN2c4RXRtMmpWQ3FoV0N3aUZBb2hHbzN5VWovdmFPY2VMMmlhSnBXS0k0MWN1WG4vRTNadldvSnduWWJ0NitOb2I0dmg4cDBQc3dKaE83YTNMTXVkYXRWVlFhUUh2RGd0Y2tYeXk3QXc4bjBLZHgrTklKdXpjUEx3S2l5S0JLWTVJV1ROeEV6bldqWHZCbS9ybFVqWWo3RnNBVDlJQTM0TjBYcS83RmVMWUtZOVJ6QW9tY2g3cjBkZVNZL25zWDVsRkdlT3RlSGJ6enlXeHVzcSthOG1YRWNsbVVxUmM3a2NUTk9zMU1EcmlXR1cwSHQzRUIrLzVORFNHQ0lBRFowSFZpQVUvUE5ES0I4NlJ4WTZHQXdpRW9ud2REOFRwS2pUUFRMNUNiMnZ6MEg0Uk5VMDFTS096V3FqYzkxWk5DMVl6bE5Kam9YdmpPNm15SEprN085NE9mYWtmQzNNbDhNcEg3akd1bVlYbk9VT1hUZUM3NDErSG5XMEpkVTk4dy9lcXlQZHZlV3FPM1hOZXhkMWttWTJ4bmVnWTNWU25YL1VMbXJ2Y2JKZDJiQ091L0p0NEk0a1lDWjM0bmpiR1VuaTFFS2k5dkJlQnU4Z1d5VTlDblBXZzVOQytXYkZ4NG5YU0QwL2dWSGo4NXpsWUdBWjlhb2t0ZHU5NENsM1VPM0o3RklrOG9SejBSK243MG5DVVdOWTdxblhveEp3WjJLL0Y3anFrem1IWi9MUnYrYlVMbjNPZi95NzZGSUE0eDdBQVRXWElvMzlEZU0zMjBVd3hrendlZmtBQUFBQVNVVk9SSzVDWUlJPVwiLCBfZyA9IFwiZGF0YTppbWFnZS9wbmc7YmFzZTY0LGlWQk9SdzBLR2dvQUFBQU5TVWhFVWdBQUFCZ0FBQUFZQ0FZQUFBRGdkejM0QUFBQUNYQklXWE1BQUFzVEFBQUxFd0VBbXB3WUFBQUFBWE5TUjBJQXJzNGM2UUFBQUFSblFVMUJBQUN4and2OFlRVUFBQU1KU1VSQlZIZ0JyVmJOVHhOQkZQL043cmEweFlTUGhDdkJjeUhCNEVsTWlCNjU2SCtnWG93MzY4RjR0RDBhRThQWnFCRDlBL3hLOEFnbWxDc2tvdUVHd2hYc1V0dFN1aC9qZTdNejI5WGFwaFVmdkozWjJYbS8zL3ZhblFJOVJFbzVTdnFZZEkxMFQ3YWxvdGNLcEZNWVZOaElBL1FyeTkySXhGL0E3OU5RSkIzbGU3KzhnZGFuVlRYS2t4TzF4NXFjaEQwOWcvVGlJcHdyVjQycFMxb1NRaXgxSmVCMGFIQUYyRng2Qm5sNENHdGlBbUpzRkZadVdKbUU5UnBrdlk3dzREdlpBTU92MzhET3p4aVlJcEdVT2dpMDU0cTkrZlFKV2krZXc1bTdEQ3VWZ2lBVU1vSkNVeVlTVWwyQnNIRUtmL2NiMHJmdUlQUHdrWUY3WUNJUkp1YzBiSEZhR054NzlSS3A2V2xZdklGUWhFaDZJelI4eE1memtEWjQyMXRJM2IxblNEaGRsNGhrM3hBczAzQTcyUG1DK3ZVRnBQSjUyTU1YSW9LMkYyMG1QWStqb1B2Z1o1VWkyVVgyM1FkVGwzVWl1Q2EwOTN1OFVwdWJoWFY0QUNkUDNoT0FJVUFpQWluanBOS2YwRE1nb0FmKzF4MWdmaDY1dHgvTnBqR0hMamQ1Rm14dUFBVE9vRmFsQWl1YmFYdHZVQVQvaTVoRkVlb04xbGxMMmZybE1uekMwbEVVbU9DRzZwclZWZGcwMnV6NWoyUHFtckZFaTRrMlF6eEdyTUlRdTY2SzJ1WjBFWlltV0dDQ1diV1Y4aCtuNU93TTR2Z1l5R1RJTlN2Q2JJZVF6Sk9haTlNbWhPOHArNUIxczJ5ZVRqR0JlcUZBL1M2aUJFUWtuaGVwYlNmYVNQd0dyRFFNSXhKdFo5RTEwQzhrRTNDUmxUdEhSMGRxeFNaQTdua2hPbDd5bnNJd3JFRVFxSEdDWGs0b1FtQmZUU2dWZzRKMkU4ZHh6TlNOQ2RMcE5QNlhKQWkybWVDeklaREo0cDFEaG9hR3pQUTkxNENMWE9HN0V5b081L0JmMHNYT2hWeHdrdkh4Y2JOOGtWcFg4SGRqbmU5eXVWeGNyRUdpU2RxTWpJejRlbmtsK1MyYWd2N1lOUm9OTkp2TmdhSXc0SndhZGhLSmp4M1hnSUgyYVNpWktETDBndlVUU1hJUDIyaHdscExHN0Rod2lqVHdvYU5xVWF2VlZGNjdSY0xBM0RIWmJEYlpPUXhlUkErdkN2cFFWK0o1SGgxZWRWbXRWcVhydWtxcEdkUWFQL3ZqaDBBQi9ZZys5RmRrLzdJbXovSHJvcUFCS2duQVBiMVcxRzNlVlg0QllCQTZpWHRxZmF3QUFBQUFTVVZPUks1Q1lJST1cIiwgJGcgPSBcImRhdGE6aW1hZ2UvcG5nO2Jhc2U2NCxpVkJPUncwS0dnb0FBQUFOU1VoRVVnQUFBQmdBQUFBWUNBWUFBQURnZHozNEFBQUFDWEJJV1hNQUFBc1RBQUFMRXdFQW1wd1lBQUFBQVhOU1IwSUFyczRjNlFBQUFBUm5RVTFCQUFDeGp3djhZUVVBQUFQMFNVUkJWSGdCcFZaZmFGdFZHUC9kYzIrU3BtMldwREYxQ090U0l4dDFnclUrdFJibW16ajhNMFhCaVFqRFY5RXF5aDdORk1STzZjUlhsVzcxb2VpVFRsQlV0QXhjOTloTjNWYkIyZlRQcW1QZGtuUnBicEo3N3prNzM4bTVhZG9scFdNZmZKeC8zL2Y3ZmVmN3pybm5BbHVJRUNJbTlUMnBVMUxueExyazlOeUkxQlR1Vk1oSkEyeFh4bHNSR1UzQTM1Uk5SbXFNeHVldW5jWDA4aytxTFZZTHltWm54eTQ4RU51SG9mdWVRSDl5MEhmTlN6MXFHTWFuTFFrb0hScGNBVTdPZm9iL1MwdUl0eVVSQ2NZUXR0cVZuZTJXVUhiWHNGeGNJQys4UC9nbDBwSlFTMGFTSEwyTlFFZXUyRTllSE1PM2w4ZlJseGhBZ0ZrMXE4MTdGVFV0dXpibUNyTjRxdmNWdlByZzIvN3FXLzVPREQvbnNwbWh0RXhjR3NPcGYwK3FpQXhHR0FMU2VHTTRvaDZVSmpMdzk0M3plRDc5bWs5QzZYcEUrbVdaZHFIVXhDNFhMbUxpMG5FazJ1OUZSZGlvY0J0VlVaYjljbjJzbFBweWp0YXFvTFVTa3UwN01URTdodk15dGJwKzR5b21IZjBjRFQ0OCt3WnNyNGlPdG9nTWlxTXIxSzNDdnVubVlUSUcwekJSOW13NVl5QWFTS0RnM0FEbkhGR3JDNElML0pPN2dON29YcncrOElHZnFyaE1NQTVTNzhwcUZuczYrc0daSzQzNlpIUTJQRGh3aFlNUUM2dE1FRG1OSTFaTWdsL0hRR3cvSEY2Qnl4MlUzQ0oyaC92Z09GWGtTdGNSYjA4UTdBZ1JQRXU5VGhISGNQY0JXSllGMHpTVjFrK0NyQUhsbXkwdkEydEZpRDE3MTJ1Z1c5cUo1M2x3WFJmTXNYelgvVlNEZnVxcEJaa0dVaCt3Zm1Da3MzVjhEQ0lVQXB1ZWh2bkY1OEI4RnB1Ri9NamZjUngvS3NWMFFWUUV0TmdvUktJaS8rWnJpTEJNVTJrTklwOEhqOFZnVGs3VzEzMXdYeHVDUzdGRzlzWjJRMlFySzBBd0FLTllCQUlXalBsNUNNdHF1b1BOL2tTUVZSMmRtbWJpSFhvWm9tYzN6SzhtWUdTbGVUUUtQanlNVm1LdGsrY3RUWkFLQm9Pb1ZDcE5IVVE4RGo0NHBFNFNtNW1COThLTEVEdDJiSWZnSFBWT1MzMDhKTUg1OTZmQXFLQlhsaURTYVFqYmxvaG03VXV4Y2czOG5pU01uaDZ3WDM2VzkwUVc5T3AvNEwxcFlIV1ZVTUZsa0lIRlJiUzlkQWlJUklqZ083cG9WT1FjamNxakg0Rk4vUXJzNm9GaGwyQlFVUk5KQlM3YVF2SldrbEVab3JNVGJHa1IvUDQwSFQ4WWxTcTQzSkVvRk1CVEtZU1BmZUx2b05mL0ZrM1JMc1QwR1hqUFBhTUswK3o3dHBWd3JlWnZwMkhzZTRpbVRzaWFIdlpQMFdFcWlESDBHTmk3UnlCd1orTGJzM2VPK09EcWJkaG9WSHYrbEhnZmp3cXZ1MHR3cldJTHBYV3k5WTZOTnI1d0k4MGpFU0pUTi9uckQrRTkrdkJ0Ukx4QkZmREJwd1UvODNzamVLWVJzOW1UU2V6cTg2M0dzaTc0OFFmZ3dwOFFDd3MxQjNrUE1DVHZ3Wk1IUUduVjB2VEpiTFVUZXZSUGlPM0xsTGlMdjRzUkRaQnJBSnpUY3hsOXpGdktMY05ocmhmY1AyWEZBQUFBQUVsRlRrU3VRbUNDXCIsIGVDID0gXCJkYXRhOmltYWdlL3BuZztiYXNlNjQsaVZCT1J3MEtHZ29BQUFBTlNVaEVVZ0FBQUJnQUFBQVlDQVlBQUFEZ2R6MzRBQUFBQ1hCSVdYTUFBQXNUQUFBTEV3RUFtcHdZQUFBQUFYTlNSMElBcnM0YzZRQUFBQVJuUVUxQkFBQ3hqd3Y4WVFVQUFBTjBTVVJCVkhnQnBWWkxhMU5CRlA3dXpZMVJtMmlzYjBHOU8vR0pJaFJFMExnVEY3WUxmNEFic1F2QnVIRWxwQVVYYXNVSGdnZ2lDZ3FDNGlJaVB0RWJoV0oxWWRwU1cvSFY5R0ZiMjJMZmFmTzR1WjR6bVltMzltRnRUemlaYytmT2ZOK1o3OHhrQWt4amp1TUV5U1BrRm5tejg4ZjZaRitZM01UL0drK1NBRE8xbTFNUmFaT0FINmVtZ2p6SXp3TnZxdkhyNFdQUjJnTURjS2h2L3ZwMUtOcTJCY1VIRDJEeG50MXFhajk1cGFacGw2WWtZRGtrdUFCc1Azc1JxWlkyK0ZZdWh4RU13dU12RXVQczRSSHlZWXkydFBJa2JMeC9Hd3VKVUZvRmtWUk9JSkNaQy9hMjArZlFlZlU2RnBYc2hPNzFRcU8wTlI3cHlCbE9QblFvdHBOSmpEUTBZZVdSdzFoNzZxU0NPNkZXb2luTnFZbXpMQXorODlvTitDa2ozWldGcG5KeEU0aFBQaDc2VUl0Vng0NHFFcFpyQjVFa0ZNRk5hZzRuNnh0UVh4S0NmK3RtZUlVY0duU1NnQWJ5R0VuaXVCZUNuT3pKREE1aHBQRVROajJQWWxHK0xqR2F0MCtUMlRkelQzekREbVJJYy8rMnpaUzlUaUI1MFBFN0lRL1BoSW9scCtXSmhpbEJQNEV6aWJRbEJuMlZjVFRhMDR2Z21VcDRkQjIrUUFDNlJ4ZVpheE0zMmpncWtUOEZkallEL3dnVjM4NGhsVXJCNS9QeHl6QVRsSEtVbnVmRmdsMGxNQXdESG85SGVHRW5LSWxjclpTMjBPWnlPUmkyald3Mmk3R3hNVVd3bCt1NG5TTitvVlAyN0FwSTJac3VDeDNKZHRFWGJYc2dXdlp2UTE5UTAxT05POTl2RlJMaCtabE1SazAxbVVBY0tNNkFYNDZUZ0VEdUplN2lLd0VWR1FHazdUUzZSanNMQk4xajNialNkQUc5cVo2OG5OSmR5Wm1HV3diVi9raTJZZW44NVhqZit4Wlcxd3VVclQyRWk0MW5vV3M2bHN3ckZ1T2VkanpDNC9aSFNPZlM0bmtvT3dpL0p6Qmg5Wnh5UWdSU0dyWjN2VFVvcy9iamN0TjVrZkcxejFkUTF4ZkhNdDhLdkNKQ3p0anFlb24yWkN1eVRoYUc1c1d6amljRlVLNmp0SDdlcGhZRm9XRTYrbHg5Sm1vYS9JalZDOWFnMkxjVU16VWxtMDJGNWdJSGFDZVN4WmpxTlJOdzVhdXFxZ282enNiVWJpb3ZMMWNFVWZXYkx5d1VDcW1UUDJzM1RkUDlNMjRxWm91ZkxNdWFNMEZkWFoydDdnajMwa3g1U3ptUlNHVFc0RHpYZGVPWitFdS9zSG83R3hJWE9Gc1lVeFNwUW8ySXgrTkN6MzhCYzkxWVdwZFZ1REVudXpLWlBRSjV3bU94R0tMUktHcHJhNUZJSk1TWUlOMXVCSXpTMGxMUlNwdjB5cHhxSlZ5VFc4N016WExtOE84aUxBSDZYSUROc284bERVNkg4UnRSRitDMVR1MFRiZ0FBQUFCSlJVNUVya0pnZ2c9PVwiLCB0QyA9IFwiZGF0YTppbWFnZS9wbmc7YmFzZTY0LGlWQk9SdzBLR2dvQUFBQU5TVWhFVWdBQUFCZ0FBQUFZQ0FZQUFBRGdkejM0QUFBQUNYQklXWE1BQUFzVEFBQUxFd0VBbXB3WUFBQUFBWE5TUjBJQXJzNGM2UUFBQUFSblFVMUJBQUN4and2OFlRVUFBQUwxU1VSQlZIZ0JyVlpMVHhOUkZQN3VkRnBiWTZDUkFCcGNzTkJHRno1V0NuR2hpUXRYUm4rQUpHcU1HMDBzN2czdEgwQVRkYzNEcFJ1Tkt4TVRkQUVZRWhQYzBJVVJpSkFZSDZHZDRURlRPcDNyT2JkenB5MkZVc0d2T2Izdjc1dHo3cGw3QjJnQ0tXV1NiSWhzZ214QlZwRVArdEprdmZoWDhLS0FvRldNN0NRa3RpRi9TRVdHTE1sdDEzWGhPSTRxZmQ5WGMwelRSQ3dXUXlLUlFEd2UxMHNMWkZraHhOTWRCVGdjQVRsbWYwK2oyKytGTEV0RmFCaUdNZ1lMMFZ5VVNpWFY3alJ0Ukx0T2Fwb01pV1IxdzlqbXlURTJONHpzcDNzd0lrSTlZVFFhclJQaE9odVBzU2Nycis3Q25ud1dDdkRlMUFrRThWUGs0N2xodkYwWVErcnc2WkJ3TjR0MXBiRHgrU1ZXcXlKRGVrKzBCeHlhNUx5Vjg4ZHpUOUJ4c0J0RjZjQVFGUUp5dWNFMGVTUVNnVkYyRUd2cnd0clVDeFMvenlEWXZ4RWxFQ2pkNHNiajZUdk1DV0VJRlAwTlZXcEN0V0dpUGlkQ3NiSUx3NHdpUW12WHBwN3I0Y3VjNXV6QkRXNTkrVE9OWCs0eVdHRFZ5NU1ITGdjUFc1SUEyMEd3UU5FaUFRRnZlUWFiU3pONktNMEMxN2syK2VPZHlpa1dzRW9yY01zYmRhUmJ5N3E2NXdERlBJV1VRa0xyM2EvdjlaUkxKdjJkNDlvM2EwNlJrOC93NUNac0VsRUVvcm1JZ3JNQ2xEMWVTaUlDcGVYUWcxNHoyQkQ4ZEpZcWIwVVFaaytXS0VCeXg3RFV3ZmZDcFd5eXVCb0tHTlZBWXQ4US9CTXFDQ0ZZWUpFcmg2THR0VFAzd2g0V2tmWWUzVnNJQmM1MjlQMFBKeFRNemxPNk9zc0NIN2wyOGVqVmFsSzJFUFlHeUdweDRQZ1YzZnVHQmRUcGQ2YWpuN3pveDM3QVNXRzA5Y0E4ZGw1M3ZhYXNFbnpNZnVEV1FHcVFjM0RQRHJBZHVoYSt5YVBFdmFpejZEWlpnYjBZT0RGWW5kMmlrc3BrK290ZnVJOUlwenEyMWQzQUZTWEFTcnJqWnVxUkV1RkZ1NzBIUEZZeElFYms4YjRIZWlnYmNEWmNPQmxVVGxiTTIzTkkra2NncEdnNDVHb0YrRjVJV0xuYXVETjVCazJlS2gxYzZncDBhOG4xOVhWcDI3WXNGQXJLTE10U2ZUeTI1VU1nalZZUVhQcWpzblZNeUgxOFhhUURnbndONFVMUXg5ZGpzaG5IWDNsYUJOWk1mK2NvQUFBQUFFbEZUa1N1UW1DQ1wiLCBvQyA9IFwiZGF0YTppbWFnZS9wbmc7YmFzZTY0LGlWQk9SdzBLR2dvQUFBQU5TVWhFVWdBQUFCZ0FBQUFZQ0FZQUFBRGdkejM0QUFBQUNYQklXWE1BQUFzVEFBQUxFd0VBbXB3WUFBQUFBWE5TUjBJQXJzNGM2UUFBQUFSblFVMUJBQUN4and2OFlRVUFBQU9KU1VSQlZIZ0JwVlpMYTFOQkZQN201dWJlcEZaVEg2MFdYN1dJTHhBVUZCOG9Lb0xpU2wwSWdndnhCNGh4NTg1MDdVSi9nR0RCalVzZkMwSEV4MExSVmNVWHFFZ3JpaFNMemNPa1NacmJlenhuN2t5VEpvMUdQT1JrNXM3TStiNDVqenR6Z1Q4SUVmV3dYbVo5ekRwS2RjbWFzVFRyQVA1VnhNZ0FkQ28zMmhHcGVjQXZjSk5oN1pIblNxV0Njcm1zMnpBTTlSclhkZUY1SHBMSkpCS0poRFhOc1E0cHBhNjFKWkJ3R0hDTVRWUXhWY3dEWWFBQkhjZUJZdFhybUNnTUNVRlF3MVFOR0Z6Vml5WGRjUXVUWVpLaEZnS3pjODErOVVFQnc4OUsyTDdHUTl5Tm1aVk56bEwwTnpVOWd3L2Zheml6cHdzWGp5eXlzeGV0SjhyR25Kc1JDWXVBMzN3K2hTMHJQWjUxRExCUk5aZUFFSW94RklWNC9iV0tjL3NXV0JJSjEzWW1HWFBNY2dsTnozdmV5YldIUmZTbDRpZ0h6cXhXcEswcFZJenFmcUQwZU1Xc1daN3l0TzJMejFXWS9OM1FIcGpkajhyRHQrL2ptSmtoVHB3UEp4Ymp6YXRJOWY0akQ2WUR3SXRGTG9TUit6cjVJWHRSTGxlUjhGMnM2T3UxZmk1MitlK0U5S3JWS2h3MjhYaUJoSjN4ZFhUcW9TZmNmcU4wNkU5dXBYcWtKRlNPWWhMZWdoL1RpUmNzMy9kbE9pMEV4NlVuWlNpVm9xdkY3RnlrVUFFbkVpaXlmcG9BeGd2QTFuNmdtMVBVelJnTHZIcGFyTDFnR1lJRFFyQk5la0VRekNFZ1NSNjNJOThJdDBZVWZwWVVqbTBtcExqc0w5MVR1ajIxalhCMFU1MUExb3Q5clZhelF3T3VTWWlPbytNNG1GT0pUTEovRUxqN1ZtSHRxaEJuZDBhaENUZ2NFMFhneUViU0liTGdWb2xtUXpqZ05MSTN0bk9Gc01pdlAvMzRCVXlXV2xjMWh0YUtlRENtbVhqM0RjeXpjdmVkMG5GL1A4Nko1R25PSjE1K1VWaWNKRHdmVmRpN3J0VkczbndqdVZrQ09Wc2srODF5YUQxaHgycUZYeFhDbFVjSy9TbkMxUk9FYnM3QlFyOFZ2SW5nbGZTZXNoNFVBc2wrc3l6MERSQy9vTHZXY3ArQk4vVE5EMnpGVkpESUhYblJKTWxaZVpyTTVWR2REazBsdFJyS3dkWVZueDlVd2lzYVU0VGVaVXZzOERxWGs1TGppU2ZpeGNmSkxweStYalRIanoyRE9oR0tma3h3LzN5S2VpUEQ0Y2F6NkJ4cmJ2ZGdIT25EQ2ZONm9uTWg3WUsyM2R3ZkUzQjlOOGlVSmhBbU81QStuTVFGSVRFbjVWK1o5SnBRMjRpdGtTR0QyWExoWkJDZHJNaVdaakQrc3hpVnJsSnR3V05jTVVtKzFkWXNkUnZCTTJpL0lYMlJaKzFseTY4OWxVb2xLaFFLbE12bHRPYnplVDBtYzAwZkFtbDBJdWJTSDZiTzVUSDl4OWRGMmdCa0d3Qkh6VmpHbEhsYitRMkY2MGdNYzVPbVJnQUFBQUJKUlU1RXJrSmdnZz09XCIsIHJDID0gXCJkYXRhOmltYWdlL3BuZztiYXNlNjQsaVZCT1J3MEtHZ29BQUFBTlNVaEVVZ0FBQUJnQUFBQVlDQVlBQUFEZ2R6MzRBQUFBQ1hCSVdYTUFBQXNUQUFBTEV3RUFtcHdZQUFBQUFYTlNSMElBcnM0YzZRQUFBQVJuUVUxQkFBQ3hqd3Y4WVFVQUFBTHBTVVJCVkhnQnJWYk5heE5CRkg4enV3bXRGQXoyVUh1dzlHSkJhOVdqdFlMZWhGNzBJbDRzMkl0WFUvSGpJalE1aWxBOWlwZCs0QitnQ0FWUFZUQ3R4NnJRZXRFVUZFUnRURGFTWk50TmRuenZaU2JKNXF2UjlNSGJuZmRtNXZlYjkrYnR6QUswRWFWVUJIVVdkUVUxcWFxUzFyNG82akQ4cTlBa0RkQ3B6TGNpRWszQWIrSXJoaG9oMjNWZEtCUUsvUFo5bjhmWXRnM2hjQmg2ZTN1aHA2ZkhUTTJneG9VUWoxc1NVRG8wT0t6L1dvTUJmeGhVU1RHZ2xKS1ZoSWh3TEhpZXgvWkFPZ1hXNkppQmlTRkozQml5eWNwaGNXTU80dTl1Z0xRRXJ6QVVDZ1ZJcUUxS2ZSUko3dW9WY0I4K3FCRFEzZ1FJZFA0WWZHbHpEbDRtRjJIazBGZ0ZjQzhOSHpzTzN0TW50U1N6Wms5TUJKU2FTREw3cWJpMCtRajZEd3pBamlxQUZHVUFETGxCRGJobFdTRHplYkFIQjhGRGd1THFXOUQ3Tjg4RW11azZHZmRYcDIzRUJDRUY3UGg1Zmh0QTNqQVJyQW5UWjJFUldKWU5GdnAycTFGY29ES25DQzZUOVg1N0RYNjYzNEFJL2hUVEdJRkx5WU82SW9CbUlncDVrSTdENmZBVENSTUZTWlI4bDZpVitQNkthNG9JSE84M3VLVjhBTFQrWGRzV21DS1Iyc2FVQ282aXRMeHNocHkzOFhHYVdwK2REUWJIbUtHb2RpR0xKQXdnMnBNd3dYWUtSTkVyUjBDNm1qQmR3N2JlRVBoUitGcitLblNhaThyREJLbVdhUWtJZ3B1cFdCSlF3blFaQWxsZEJuUXRBZ0pyWkNHQ0xXcjBoUTRHUjNaQklvZUdqSm1wRUp6cVA3TWZRWlJKUmsrWTVqb1J2S0hXeE9ERmFsRjJrUFpXUWxQdHlVbGp2aUFDUHYxTzlvOWpGT1BRamZDNmhvNkFPSHZPdUo1ajZRbzZabCtUTlRVeVF6WDRYd0VvcmZiaU0rTmFRT3d0VTBYVHFCbUtZdXJvVEhWMGgweG1tTHg5eitTZjd3YjIwWU9Zak9QYXlDMG1vZkxmNnp1Z1BtVWlSbkI1NTY3cGltdk1oZ3NuQnVXVEZiNWtOeURpSHdhaFJNTWhWMHRBOTBMZnh3K1k5NGxhOEJpMFdWVlVYK29zZUd1cFhDNm5zdG1zeW1ReXJJN2pzSS82Nm40RW90Q0o2RXQvUVhVdUs2cUx2NHVvQmtqWEFDYTFqNjdIU0R1TXZ6RmhBQ1k0T3VKWkFBQUFBRWxGVGtTdVFtQ0NcIiwgbkMgPSBcImRhdGE6aW1hZ2UvcG5nO2Jhc2U2NCxpVkJPUncwS0dnb0FBQUFOU1VoRVVnQUFBQmdBQUFBWUNBWUFBQURnZHozNEFBQUFDWEJJV1hNQUFBc1RBQUFMRXdFQW1wd1lBQUFBQVhOU1IwSUFyczRjNlFBQUFBUm5RVTFCQUFDeGp3djhZUVVBQUFMU1NVUkJWSGdCclZZN2J4TkJFSjY5dTFoMmhJUU5VaUFGbGtXcVlKQ2dvUUFrVTZjSkVqSzA4QXR3d2FNS3NhRUtOSFFnbWdTSkJpclNoREpFd3BFUUZDUkFnU2pzbENnMmZpUis1YzVlWnNhNzl2bUpTZkxKNDV0OTNQZnR6TDRPWUFpa2xINjBlYlJWdEpSc0k2ZnFZbWdoK0YvUVM0cGdWQ3dPRWhKOXlPL2dJNDdtcDNLMVdvVktwY0xQUnFQQmZTekxBby9IQXo2ZkQ3eGVyMzQxajVZUVFqd2JLRURwVU9TdzlqMEwweE4xY0J5SENRM0RZQ09RRVBZRjI3YTVmQ0tYQlROOFR0UEVVU1NoQzBhZmtjUGpOei9oeHBQUFRFZ2pIQnNiNnhBaG40emFLSkxTelNoVW55NjBCR2h1T2dSVS9scmt6OTl2d1lXcFFJdndYK2FaUGdQMnl4ZHVrWGs5SnpvQ1NvMS9JMVdBUjI5L3djbmo0MURHNkUzVFpBSU11Y2MwT2ZjcGw4R2FuQVFiQlp6MWo2RG1iNUVGbE5JdEtseGYrSUt6UW9RR2xHdU5Ea0tlTU5HNUpuU2JpWXZBTkMwd3NXNnZIY1ZWV3VZVXdUV2UxQjlaMk5xdXNzQ2ZYUWRLTlFuZG9JbnRCMUVwZzFFb2NEb2F5YVNPZ2hDanVsbnlsai85Wm5MSzJ2WU9DdXcxT2tpN24yNWZZSXBFTmdNR1JZUGwrc3FLN2hLeDhPODhlWnZwWWxNQU85VnNDWmtkdTRlb253Z0xaTElnSExzWkFkbDZVamVGU0lBM1ZKclN3OXRDOE05MjVNQ1U5QURKMVpzb0lxQ082ZElDUm5zWUhXT0MvVUM0VElNRTB1UWNIZmZBWWNFSUJyV2Jid2xFd3NmZ3NDRENaN1g3bFFUV3lKdTlPT0hxTW1MdXU2RGZzbVptZE5VeUNmRHBSeEZFd2dFNE1JS25RRnk2b2t2dmNPa0tPbVkvVUdrdU90VWN4ejRDa01xc1Y2OTExUkp5cC9VcXVvMldweWptb3FkZDNVY25KNGk3RDNUKytXNGdod1ZJU1ZjOHhDaFlSRGIzd2JDOW9OdTVCNUtiOSs3cnBvVGk3TGx3NHRBOFdXRWp2UXVoUUowdmwrNUR6aTFBOThLUmI1dVk5OHR1OGpnTUdWVk1YZW9NdkxWa3FWU1N4V0pSNXZONXRrS2h3SFhVMXZVaEVJTlJvQzc5SlRrNlZ1VUJ2aTVpaWlEbklreXBPcm9lL2NNNC9nSWpTL2NZMTdrR3pBQUFBQUJKUlU1RXJrSmdnZz09XCIsIGlDID0gXCJkYXRhOmltYWdlL3BuZztiYXNlNjQsaVZCT1J3MEtHZ29BQUFBTlNVaEVVZ0FBQUJnQUFBQVlDQVlBQUFEZ2R6MzRBQUFBQ1hCSVdYTUFBQXNUQUFBTEV3RUFtcHdZQUFBQUFYTlNSMElBcnM0YzZRQUFBQVJuUVUxQkFBQ3hqd3Y4WVFVQUFBTldTVVJCVkhnQnJWWkxiSXhSRlA3dVAzOGZNNEtwcHQ2a1VoWkZwQWh0cFEwTGlRVUpFYnMyRXJHUVNOU3dzQk5UZXlWV050SkhJaFlzc0NKQmRZT3kwQzcwRWFrMjFSZE5US2ZQNlhUKy96cm4vdmQycHUyVUZtZm16SDJkZTc1enZ2UGYvdzd3RzVGU0JrbHZrRGFTZHN1a1JQUmNpRFFmeXhYZXBCMHNWV29YQXhKcG5GK21Ka3dhNUhITDhEdThIWGloMnZGNFZObXNYN0VGMjRPN2NHampNUlRsbFpxdEk2VFZRb2c3aXdJd0hkcTVjdml3NHk2R0p2dVFrNTJIbFpsQitPMkFzcHRLVENLV21NREFlQy92d3MzUyt5Z2dRQzFoQXFsZUFLQWpWK2oxYlRWNDBsV0x3dHg5eUxCc3oycCtydExUV0dJSzNkRU9uTmhXaWJNN3I1clZLeVlUWVRpbjVoUFQwdEJlZzJkZjYxVkVnbGFsa05TS3VlSEkyYUEwa0VEbnoxYWNMamh2UUppdXZiU3Z4OUpibUpwZ1YvUXpHdHB2SXpld0R0TnlTbWxjeHFpTmVXTlhxMXFMcWJVNGVHMFNlWUgxYU9pb1FTdFJxK3RYcTJMUzBYZnpvT0o1S1g3RStsQ1FzMU5GcjM2RTEyQUJRMUpGcmxMZ3J3dDBSZHF3SjdjRXQ4b2ZHYk1jSWhpbnVEYzQ4aDY3TXdkaCtYMEkrc2VRNGN1ZWRTNDFPMFFXZmFSaEtJVXF3SFhpeUpjK3lQaEg1V3REc0lTWFFneHdrbnRycGw0aHRDRUx0Zy93K2NZaGJEdE41RHJpT2NVZ1FNckVkY2JnSkxMZ09JQVZlMDN6Q3VBd0F4UXAwK2wyV0ZRUndWVVJjUWczUXBaWk5MQ1NvYVlWeW90cUlaQlErMTJpeXAxb05vdjV0aTRJTU5PdktSYzZ2aG15blBFQUdGWHFERVFLR0hNRFY1UG41Y1VnampzNkIyQTJlMVBYdWVKNkZVd0d2S2p3NDh3MVN2WEIrZmVvUlh0MWlpV1dMK2FvVUd0bGJqYXpJN01BdnNCQi9DOFIyWVdtMjhJVU5aRWVHYklxY2EzcEFORnQ2Wk83M0RTa090bVNxbno5K0g1b2lLZDgwTGpJRVI1VlBJaml3emZISzZwWUpnQTdwMXB0V2tVUlgxeGpacmRaRkMyL045N3dxS284b0krUjBhVkhiK3p2blZsbEp1dFMzMFhuU0VlS3QyYWdxc3p2UFg1LzRiK3FMQnVGYTlXRHFlNEc3aWdBUmpJVFZXVUJYQ0pERCtSUG1TUnRlQS92MVZLdGZTNjRjTUx3M3F6b0hIYmNDNC9IcmY1Uk4yazI3M1hObmVJdE5qbjNvM2lybmVvOGJBYnByc3lRQmxFbnZMazNnWmRmNG1qLzdxQS82cW9kSzdPRWNuaDBSMmFxNDdSWFp2ckV2VXUvVGk1ZEd1VS8vTHNJYVFlUkZJZmRlaTZzSC9ORjVSZFNyUG5WeXRaSERBQUFBQUJKUlU1RXJrSmdnZz09XCIsIGFDID0gXCJkYXRhOmltYWdlL3BuZztiYXNlNjQsaVZCT1J3MEtHZ29BQUFBTlNVaEVVZ0FBQUJnQUFBQVlDQVlBQUFEZ2R6MzRBQUFBQ1hCSVdYTUFBQXNUQUFBTEV3RUFtcHdZQUFBQUFYTlNSMElBcnM0YzZRQUFBQVJuUVUxQkFBQ3hqd3Y4WVFVQUFBTm5TVVJCVkhnQnBWWmRTRlJCRlA3bTd0MU5XOHUxLy84MktudFkrME9qWDdCNkNYeXB4eDZVRWlLQ29OeEFlblNscDRqQzE4SlNxdmVzb09oSmhRcWhIOE5NaEVJM3JjQXcvRjMvOXQ0N25UTTdkOTNOSDl3OHk1azVjMmJtKzg2Y2MrK2RCZVlSS1dXQXRJcTBrYlJiVHN1QTlsV1FCcEdwOENZTnNGQ3BtNHRJekFKK2xib0lhWURIMXB2WG1IcjVRdlZ5YUVpdE1iWnNnYWRnTjN3bEpUQ1BISE8zRHBKV0N5RnE1aVRnZEdod0JUaFJjd2V5dHhmRzZ0VVFlUUVZUy8xcWl4TWJoWXpGNFBSOHB6MkEvK0VqZUVLN1haZ0lrVlRQSU5DUksvYUpXemN4VlhzUFptRVJESzhYZ2xCb0V4U2EyaUloVlFzNFkrT3dPanZnTzFlT3JNcnJMbHpZUFlsd2MwNWRLNmVGd2VNUDdzTmJVQUNERnhDS0VLblJDQTJmNEdQYm9RWHhUNjN3WHJ6a2tuQzY5aE5KMUNXb28rNjgzZjRac1pQRjhJWkM4UGh6RWdUVFVVd3phVHQ1Q2hyYkk4TjBrazVrTnp4ejY5SkVCQ2VFanI2YlBhT0YrMkQwOXNBTVVmUUU0QklnNVFSU0pwTktQNkV0d0tZSjYwczdjUFFvbGo1NTdpN0tNNms1dzFZOEdvVmRXQWdVSFlDemFoWGc4eUtSY1FFQmlmVG5RU1picVdjZHk0S1R2d3ZVd2hmdGhobmN4a3NxbU9BMFcxK3RiSHc3V3dtUDZZRmhlTERFWjg1OGhrVVNPMDNZTlRsRjBMWU4yN0d4ZHRpTGc0bXBZaWJZeDlhVjIrL1EvS0dQUUF5Vlh5OFJaV2NSbVk0UXlmT2tjMUNLTVQ1cEkyN1pOSENVN3MzUHcvdkhtM2c2eUFUcWhZcitHazNMUXR4eUVCOTE0REdvRm9hWU5XcnBTRlhnNmJvSUZkemd5SlRyVUFULzVDQzFwK0lSQ092Q1JhVHQ1d2NseWtadXpoSTlMN0JZQ1c1WTVwcUQvSmcya25HOHM2dmY2aDhZbzNRa2FpQXlKSkxxcmVQVFd0aThicmtSM0xpQ2cyL2lGRFV6UWU2YW1IbjNaNWhxck1FelBZaE1rSEJkTHZ0dmtHTUZlNTh5QVg4enF0Ym5iSVZwbW1nYmFFbGs2YjhJZ0xWWkc3RWpFSEs5RGZUQ0N2NXVOUEdvTEQrc1ZtVlMwaVMrVERSVlJiV3VxNTYvUllZZWxKTU83bGw1R0dVN3cwaCtaREtJbnFXVTltNWZycUpYZHdNYmlvQ1pYRWRwL2pWRkloZENvdGZ3V2dZdm83MWFxalhtakFzblFsMFYyMTNESFloOHZJQys4Ujl6bG9PQjFhbDNoS2svbEFvZWNRZXpYWmtWbWtTOTRXMS9XdkQyOXl0RjJEZmVxOWI0elZ3RmVHVE5xVlRnV2EvTU9TSlRsMzY5WExnMHlrWDh1NmpRQUFNcGdOM2FGeUVOeklmeEZ6RG5BVzUwMkdGMEFBQUFBRWxGVGtTdVFtQ0NcIiwgc0MgPSBcImRhdGE6aW1hZ2UvcG5nO2Jhc2U2NCxpVkJPUncwS0dnb0FBQUFOU1VoRVVnQUFBQmdBQUFBWUNBWUFBQURnZHozNEFBQUFDWEJJV1hNQUFBc1RBQUFMRXdFQW1wd1lBQUFBQVhOU1IwSUFyczRjNlFBQUFBUm5RVTFCQUFDeGp3djhZUVVBQUFOUlNVUkJWSGdCcFZaTFR4TlJGRDUzK2dKcWFSZUVzUEJSakVyaW03Z2dNUnI1QVJJd3hwMHhHbU5pM0ZoM3hnMFFvOEZFQXhxalM0anhCNmpCcldBaUxJZ0xWN3BnQWNvR0NZR1dQbWFhdG5NOTMrMjk3YlFnRnZ5UzA3bVBPZDk1enIwbDJnWlN5aGpMSU1zVXk0S3NZbDJ2SlZqaXRGTkFTUk0waXZHR0RmR0xkN1dIQ3JadHk3VzFOWm5xUFMrVDNTZVZiRnk1ck5hd1Z4ZFZvcDdQWDBjK3lJOGhqUFA1UEtWU0tTb1dpK1QzK3ltMGJ5OVpYVjI4SThndGxjamhkVGFpOU5yYTJpZ1lETVo0T01vY1VTSEU4Q1lEOE55UWd6aWRUbE5UVTVNU1ZpQy9zSWh5T1dWQU5EY3JvejZmajF6WHBkWFZWUXFId3hTTlJxRSt4RndwMWhuRHhESTVOK1QyNjFma3pNM0paaWF4TEtzcVRPNno3Ykk0VHMxZUtCU2kvTWRKNmJ4OEliVy9nNlltbGxsZ2laVitmS2ZNeW04S3hHSktFUjdpaVFoZ1FEQzVzSE5LRExsNUo5RFJRWm5sWlNyT2ZnRWYwald1VXFRdFhjY2s4MlJFRmg4K0VyNXdXSURVQ0NBY0psZlI4bGlVL2FyczhkTTkzUzFLZXlMU252d2dJMmZQWWFNWGJZNGFESmlpWmgrUENPVFdxMndnc2pta0h4VWdhVm0xZThhWmVGeWtiOStoSUhNaGJZd0UyUG94Y2p4NTlYck9YcFRIZHJuQXZFS2NsOHFlRjBZZlhOckFCWUgrUmM2Y2dUNFNzelBrUTc3eGNpQkEzRUxRVXB6bEgwR1ZQRlhiajQwNzVCWUw1UEsweUhONS9BUTFmL3FNM1VXL0xnalIwcElLWDJnL3FWQW9DN3cxNmZLbURjUVFibE04alI3SFR5VnVjNDE0NVRzUVdyODI4d3orcUJxRjhJZ0JEQ3pDRXJXM0U2MnNWSFpsdlRJWHpndFp6dkdXc0RvN3pUQ0pHa3p4b0RlVHlhaE9xaSt5UWZUSXdTcDVheXR0ZlAxV2F4QzVaeWx4eENod0pCTEI4alRxcWFyQlo4bW1ydGd0UXRYbzNzUEFtREVRZlhCZmNtRjNiY1g2K1V1MlhydXF1RFRlV1p5S0pBK21NZlBkdkNXQ3owZUZOVDh2ZHhJTjN2WFB6c2pBMnpjVWVQck0xY3NUekwxb1Bza2JMRW1ycDRlYTloL1FIOVhPSVBuNERoMCtKTVRSWStDRTArcklGaDR2Y0ZtTVlwempndzBGOTU0MVd4WFpSSWtuam5XY3dCcjNhbzVyVFRKbXJMYTB0RkFyazREWWRJZEptRFNpMTNHYW9tTTg1TU9HZk90UXl4ZDU1Y29zY05HejJheDBML1hKMHBsVDBtVXA5VjlVYTlqNzE1WDVOeU80OUNkazQ1aVMvL0h2SXFFSjFqMkVDM29OMTJOc080NC9yK2RXMDFvaXlzUUFBQUFBU1VWT1JLNUNZSUk9XCIsIGNDID0gXCJkYXRhOmltYWdlL3BuZztiYXNlNjQsaVZCT1J3MEtHZ29BQUFBTlNVaEVVZ0FBQUJnQUFBQVlDQVlBQUFEZ2R6MzRBQUFBQ1hCSVdYTUFBQXNUQUFBTEV3RUFtcHdZQUFBQUFYTlNSMElBcnM0YzZRQUFBQVJuUVUxQkFBQ3hqd3Y4WVFVQUFBTVhTVVJCVkhnQnJWWlBUMU5CRVAvdEs1VkNFYWwvUWpTR3RKcDRrUlFLRnhLQ1ZyOUFqWjlBalNTOStUeDRibnZoNHNXUWNQSUEzNEEwWHZUVXFwRjRRQzJ4bkVqYVJoTHhRaWpZQ3FXMHo1bDl1L1JWV20wamsweDNadmZONzdjeis2L0FYOFN5ckNIU0dHbUtORzgxWkVmMW1hUitkQ3NjcEFBNmxjVjJSS0lGK0JOcTRxUkQ3S2ZUYVNTVFNka1dpMFg1amQvdngvajRPQ0tSQ01MaHNBN2x3WVFRNGtWYkFpNkhBcGVBYzNOektCUUtHQjRlaHMvbnc4REFnUHl1VkNxaFhDNGpsOHRKZjNsNVdSSXFpUk5KNGdTQm1ybGtUeVFTbUorZng5VFVGTnh1TjQrQmdwcGFHVXcyRTJXeldVU2pVY1JpTVEzM1ZHY2lkTTJwK2NKbFlmQ0ZoUVdNalkyaEcxbGRYWVZwbXBxRXl4VWlrb0ltV0tUbVFTYVRRU2dVUWpBWVBDNkhJME01NHo5dDdlL3Q3V0Y5ZlIycFZFcXZTNXErdVNQVTdQUGNFd2dFWk0xYnpkNVptbmF5dHJZbXdabEVpYStIZnU2eGxYLy9EdE0vdm1QRzA0dExwWjl3OTNsb2FoSVp0c0gxYkdUZ1lKYmp0Y29oZ2hSYi83aUNIR0ZkbTduRm95WVRSTmk2OHVZMVhwNzFvb2NDWElmN0VGNlBob085VkJwVSs4b21Nb3ZjZXVVWGFvTmUxTWczQ0FzMndXMG1rUHZMeW42Rm9VTXJGWWp0YmNCRFdSaUd3bGJBa3N1UkFhL0gvZ0hFVVZYRzExbFhQdWhSUHhQSUE0WE5UVmtDb1VtcVZWdGRMbFVHTkZvRkxMVmV0MGxVbkVHL3RkM2RKZ0pWWHp2K3hOR3UxZENwQ0lkcTRhd0swaG84aDlNU1kyUkVtOFZqQXRmME5FNURaQVkzUjdXYjRSSzlKUTBianlJNEduMEZ5MUI3SHQwTGIxOWVrcDY3OTNWWGtnOGFML0lPZTlWdlVZaUR6N1J4Uk5ONmRnWk82ODBFeG1XY3VaN1UzUUdEWnN2M1JwbzkxOFZaT1hPNVFkQ2Q2RTNsdnZwY2R5M3hYV1FvNXlGNFFmb240VHJQSk4weDJCT2lBMGF4b3ZjR2Q4bTNnUTFKd0V6SEhaU0Y0WnVWNmY0ekU2dFJHZ2JuQ2loSktNd1REMDZjR25uZldwVU5xNzcxVEtDNjFUaG5hQ2FVWjlzekFYSGhNVVRmcEJNOHJwMVdUNmFwU09RSnQvWS93U3JUUmp2WUFJNjI3SThNdXNyN0NkZ2JKdUFKSGRyeXlXeWR1ZjNvTDFtZFM4cjZqMzhYcGdMWWNRRG1WVjljYmZPMjhodHN5K2wrOHQ1MkFBQUFBQUJKUlU1RXJrSmdnZz09XCIsIGxDID0gXCJkYXRhOmltYWdlL3BuZztiYXNlNjQsaVZCT1J3MEtHZ29BQUFBTlNVaEVVZ0FBQUJnQUFBQVlDQVlBQUFEZ2R6MzRBQUFBQ1hCSVdYTUFBQXNUQUFBTEV3RUFtcHdZQUFBQUFYTlNSMElBcnM0YzZRQUFBQVJuUVUxQkFBQ3hqd3Y4WVFVQUFBUElTVVJCVkhnQnBWWmRiRlJGRlA1bTd0M3R6eTY2cUxVb3NGbTA3WU10cElCR0N5WkVmVERoUlo5OE1EUktZdng1c210Q2ZGSzJ2aGhqUW9nUFBoZ3JCUFVaSTBaREpFQUlwWVdFLzk5QW9LWGxyd1RZYnVuU1pmZnVIYzZabmJsN29WM1Nock9aT3pQbm52Tjk1OHladWJQQVkwUXBsYUMya2RvZWFrT3FLbG1qNjZHV3dseUZuUXpBYkdWTExTSXhBL2lYMUdXb0pYanU5ZTlIOGI5L2RhOXlPVzBqazBrNEhVc1JYYnNXN3FvM3JlczR0VjRoeE9hYUJMd2NCbHdERmpadmdob2RoV3hxZ3BpZmdHeU1hUmMvUHdtVno4TWZ1VXcrUUd6YjczRGFsMXFZREpIMFRpTXdrV3Yyd284L29QanJMM0JYdmdvWmlVQVFDamxCbzJrWEJhV2ZnSDl2Q3Q2NU00aCt0QjcxRzc2MmNHbWJpYkJyVHQxUlhoWUdMLzNXaDBoSEJ5UWJFSW9RNFdpRWdhL3c4ZGduZzlLeG80aDgrcmtsNGVWYVRpVERsbUFMZFIrWFQ1MUUvdTAxaUxTM3c0bkZLd1RWS0twTVpoeGtRZlB5M1FuSzVCd2EvdnJiMW1VdkVid2xUUFJEckpsYzJRazVPZ0szbmFJbkFFdUFVQVpLQll0S1AyRkdRSmxlZUtkUEFhdFhvM0g3RG1zMDM2WEgrendxbng4RVd1NUF0bEhrVFVXSWFIMVFJTnNYU2dUcUt6VFV5YUFXOXEwc2xTQ2I0L0J3SE43RmczQmZmcDNWUFV6d250NDE4WDdJYjVzaEhYSndYUWczRmlwb0JXUmZmdzd4Um9tdTVYRlVSWmtVZkFodkFXU1pNbW5ZRHhlYVlBMFRkUExJTDF5QXBNQUVONVFneWxRbldSK0tGTmkrOHhvUzh4eDBkYm9JaTFBRnN2SzB2L0o1WngyeHIxSnNxUThVU3RmMFZneUtTZzd3SjNIbGhvY3Z2aG5COE5YN3VIeTFpREpGK00rdU1TUVhSdEgzZlFyTnp6azZBT3NuSkQzOXV3R0JES0lRMVJhV1JRdGMvUHpkSXJRa1hVem03Mk9xVU1TU3hSSi9iRW9TdUF5eXM4V3FCbGdSdGhqVzc1eDVEMXVGWlBFTFVUeVRjUFh5MUVVRldsUDFOSDU0bVJBQ2xuVXZXdFY0UUNCaksvQTR1WlV0NGZDT0RwejlmeGwyRDB6VU5oUmN1bFk3TzhibklFT0RqZGR6aC9EVDRROHBFMUZacGxBV3VRa1BzUVlIYnFTaUxIc0tqdnRJbXNxY2JLclJaeXYrUkNxaGQxR2FDYmpJV1o1dEdQZ0FKN0tEMHdobUpZYWd1VzRodHIwellMVkw2TUFLL203czVWbDNXMXBiS2N4ZDlBbW5SK2ExUHV1K2xiOUZkaGV0cHphKzdOa3VkTGVtRVh4azVoQTl5enJ5ZmVtcFZ6aDNmVGV3VGhNd2sxV3NhL3RLazZqWmtCZ2J0bVh3YnZJMTBtc3dwMTA0R2VyNDBzR2xpVFBJSFBrRVkxTlhhcGFEZ1hYV0xXbnEzd2lEWit4a3BpdXp4NURvRTM3aTlpQU8zTnlwQ2NlbVJyVk56SDFhQTY1Ni90MHc4SXhYWm8zSTlLVy9WYzFlOXFnbitIZlJZd0N5SWNBaG84dVliVjVUSGdDajBBeDF6aFBETkFBQUFBQkpSVTVFcmtKZ2dnPT1cIiwgcEMgPSBcImRhdGE6aW1hZ2UvcG5nO2Jhc2U2NCxpVkJPUncwS0dnb0FBQUFOU1VoRVVnQUFBQmdBQUFBWUNBWUFBQURnZHozNEFBQUFDWEJJV1hNQUFBc1RBQUFMRXdFQW1wd1lBQUFBQVhOU1IwSUFyczRjNlFBQUFBUm5RVTFCQUFDeGp3djhZUVVBQUFQaFNVUkJWSGdCcFZaUGJGUkZHUDk5ODk3MmRYZHR1N3RsYTRBS1c1c1kwcURSaTZBeFFhUFJtM3J6Z29rY0pKNTBqUmU5MkpKNHg1TVhFc0RnUVMrbWVwTkVxNGswbUpqZ1FTQW1RZ3QwMlNhbHRFdXpmOTd1dmpkODM3eDUyeTFzYVJzbW5jNjhtZmwrdi9uK3pnS1BhRnJyRFBkSjdqUGM1L1I2VzdGclJlNEY3TFNKa0FYWWJqdXpHUkgxQVArRWh5bnVHZm1lWC9MeDdXd2RGNi81dUZjUHpablJuSU9KUFgxNDYyQVNoOGU5V0hTVit3a2krbnBUQWpHSEJjZWRpby9RcitEZjJ3RyttWFdSU1RwSWVjcWNxL2tocXMwUU41ZmJJb1JUeDNZeFlTS0dtV0tTRS9HSDIrUG1PSG4rSGhxMU5YejRpb2ZCdEl0c21vR0pVRzlIWjk5L1VTR2JKR2c0cUROUmFYRUplOU5wREEwTkdRTEdxc1NhdUxITnU4SFB6ZGJ3MlJ0SktNYlZVQXlzSW1XdHZ2dHlHcm1VRmptRUlSTnBEOVZxMWV4WmtrbmVtMmFTZWJJRVozajRvRnB2NmxPL0xRWDVRWThtZGp2cTZieWlOWi8wMzdjbzdMWm1wUTRFREE1dFpMbUhhTGJhS0s4MjlYc3ZEYnNIUjQxZmZtZUMxOGplZms1V3l1V3lBZkE4ajIrdlRPZEQ2dzRqTW9DZlRpdmNycGlybVQ4Z05DUlhTejRPamJuNDRhUGhXQ1FySm5wWFpndkxUZno2SDF2VmNaSDJDT01qaEVLT25jMmFYMTZrRFhIeFRGNWpMQWNMTGhvUUF0WnhQS3NRQmkzYzRNamJuemRhRklYZ0habWR2dERBYVk0V2tBc3ZvZkR4a1lpZ3hNSDMxUzhkYkFQNjNWR05Kd2NqODFnVHN5ODBnb0RRNWtCSTlqWEVEckoxUkFpZWw5bVZNdStRbUVTaHlRZXJyUWd6WU1GNlMweGpBc20waFFxRGFSdDlob0QzUTlGQ05IQ2dXUGhaNDJzVWhNQWsxTUtLSEZVZFg3Skp6YzBDRnF3MXRmVkJoSGo4ZTRxQXhmckcwZktoT2s0ZlpmQS9QMThuZUtEUmh2UVQyWGFJclZzc296Y1dCNGtpaWFCQ2FmRnVXMHZVcThoTUNZZFV3dEVtZGVzdHRMZkNOMUhMYWdkaHlJSGlZRTgrSTVkZmxYL3pRakQwUkovcis3NUpMaUtOcnVoRU1nRjNhd0p0U0FKMmp1YzU4ZkkvSXZnSDkxZVhHeDYrK0xISmZpYmo3QjAzTVExcm9OblJYNzdkandNRFp2VW5JWkNhTWJsL1Z3SWhoK2hmMTIzU0V1MlFJRXE2dlJtRkE3czdoVzg2TGhVem9zWGxVZ3MvWDFvelBvZ3llUHNrMnR4ZTQrakxBM2hxMkZqMExHTWNpd2tLUEZ6aW5xblZhbWcwR2crVmlVZURSNFZQU2t3cWxaSWxlUnRla0dKbnFHVENCNlNHbjdRSGNPRi8zeEJRZEdBemFKc0RHcy90NjBjMmxZdzM1T0dabDBrbk9xUit5eHZNMDBraEdSM3g5UEZ6TlZwWTdVcUNPTk93UGh3YWMxQjhQWTJSak5zTjNublZlajJaUlNHQnpmQ0xjMjJjdjlMQzFYS0ltR3lnbjNDWWdkK2NTUERZQWU3NVpQWldQSHIweitydHR4bjlHTDh1aWhaZ3BRdHd6cTVOV2JOdTJ1NERSdVZPSUFuWmZrRUFBQUFBU1VWT1JLNUNZSUk9XCIsIGRDID0gXCJkYXRhOmltYWdlL3BuZztiYXNlNjQsaVZCT1J3MEtHZ29BQUFBTlNVaEVVZ0FBQUJnQUFBQVlDQVlBQUFEZ2R6MzRBQUFBQ1hCSVdYTUFBQXNUQUFBTEV3RUFtcHdZQUFBQUFYTlNSMElBcnM0YzZRQUFBQVJuUVUxQkFBQ3hqd3Y4WVFVQUFBUmVTVVJCVkhnQnBWWnZhQnhGRlAvTjd1M2w3dEplanVaZlk1dmFWcWtnSk5VVXBWcWJSbW9SeEthQ2doUS9hRDVFcWlDTnBhTG9oNmFLWUt6UUlrVWxXTm9QN1JlTG9Da0lzWVUwWWtpaFJwUFMxRDlnY3lSRmt6WnA3bkovZG05dmQ4YzN1ek5KTkVsSjhjRzdlZk5tMzNzenYvZG0zZ0YzSU01NWd2Z1FjUS94Q0oramFhbHJJMTZQdXlWaEpCMHNsMDR1RllndDRudy9EZTNFQ1RHM2YraEZvYXNMUlJwNXpBUXNGM3A4TGZUNnpZZzBOOE5vM0tGTVU4U0hHV1BIbGd3ZzRKRE9mWWU1am8vZ2pZNUNyNnFDVmxNTy9jVzFRRWlEY3lJSm5zM0NUU2FGRGNyT2ZvMVFmYjF5MDA1QkRpOElJSGZ1Ujg5L2RRVFdGNThoM1BBb21CSHlQMkwwd3paRXdHME8zQ2lBQ3h0aUw1OUg4YmRoUlBidlEreVpBOHJkbStva1RHRk93eThDRm11OEUvYlVXUml4VGRBMFJvNDVNWnZiQ1FzODg4QU8zS01nTkNubXJzR28ySXZvNmxjVlhBK1RYVktUWmdLYWhHditBZnRtSjBJbEZkQllBUm9zT1NyWkNrYWZDOEdhL000b3FVSnhvaE5PZGdBeWZ5ZUZvTW5kdnlJbUIvdGEwSnV6b09zYWRETFNZZElIRm0yYWtrc09HY2tRakVBbjFqUm1RaGVCZFIzZnplVHgvbENIT211VEtQTVFDYytKMmRCa1A2NW1SekdjQjg3YjEvRkdkUlh1aXhvU3d5V3FRcTc5YnRrNGMzTUtsMU1aZ3F3ZlE3ZjZzYm55TWJIYUpnTHNFVkxmMzkyK05TUFFycHUzY09ndkI5dmpVVHlmaUtFeVJKOWxYZkNoWEJCa1c5d2ZaeHdQWDA3TzRHZXpnSXlkSmp5Q2dIM2ozU3JBRGhIZ0lTRk5aSC8xbll0eWNiaU5tZUp0WEVoRjBKdE80WVZFS2ZhMGpnS3J3MEdPanhWeDdtZ052ckV0WkQwUEJkZUU2emwrTVJCdXVESjVTWjF2dlNZVGdyZFhtYWlMaFdjeGNIZ1JPU2REdTh6Z2F2Y1l0RjBSNk85UzhnK1dRMnNxd1U4RDQ1Z3NabUU2ZEIrNE00Y2ZjZFpKL3l1QVQ1bDNSckN4eEZnQXRNZGRXSG9SN3FkallDVWVXTXlEZTN3TUx1RXUxdmo4QkMxQ0FxS2tpSFM2ZFEwdXBxOHR5T0lLVGNPV3g4dkJ0cnR3OXYwWjVPbkpPSjdZV1luUnFTeW14VVg0RDlXVTFpb3hOUnNndG00cjdPUndjR1VsN1M2TDRlV0tPRXJwd3VIemxlQ1hNa0JZQTZ1TDRWbUQ0WkVWRVp5NW5jSDVHWFBXUmxodmpEK29wb01Db2w0aGJhdDVldmF3ZGRFd2p0U1c0L1dxc3NDNU10NjZFcXloRkRBQ1hiV2g0MEIxQWlmV1ZhSTJIUEoxWFBxUzlDMFRsNEdFYVRIcnVMd1hEZG93ZHBaRjV4OWtXVVN2QnI1UDUzRWhWNFpQR245VTZnM3FMZXFob2NuTEQ4Qzk4UnJkVHVhWDdOM0U4UHczaVNOMDcya3FoazFDZFlyS3RrVlZVUXR4U290dGdiNnFOYWdNdm56bjNQK2NReU5iNmR6dkRVTHdnUk92SHAxQ0tJNXFGYTN3ZXRLd1Avd0FLcm82Q2J2SG9EN2cwaFdlcXh6MWJPdHZ2UWY5cFZhbEZvMG51Y2hPZUx2cWdlN2dJRGNmdUorYkVZTmJrdDNqYTdqemNRMHZyQXI3YzdGVzJQVVVkM3N2em0rZjdmTjlMdFl5MnlDZmJ4OWI2bXp1dVM1Nmg2NkFWVThBVVFadktBeXRzUkg2N21ZYTc5d3lsOERVYi9xbitQS3BoLytQZnhkdDBzSDBQSWNqVXRjdXkzeEorZ2ZUSllMOHoxc1VBd0FBQUFCSlJVNUVya0pnZ2c9PVwiLCBiQyA9IFwiZGF0YTppbWFnZS9wbmc7YmFzZTY0LGlWQk9SdzBLR2dvQUFBQU5TVWhFVWdBQUFCZ0FBQUFZQ0FZQUFBRGdkejM0QUFBQUNYQklXWE1BQUFzVEFBQUxFd0VBbXB3WUFBQUFBWE5TUjBJQXJzNGM2UUFBQUFSblFVMUJBQUN4and2OFlRVUFBQUxpU1VSQlZIZ0JyVlpQYXhOQkZIKzcrVjhoQktTUVFBdXRWUkVMNGtGcXhJT0NCNC82QVN6b3VhTFJtNmNrWDZBSTRrMXA2Y1dieEtNZ1ZBL1I2a1V0S0Qwb0tSUkJyRzAyTWVsdWt0MGQzM3M3RS9QZmhPYkIyNTAzOCtiM20vZG1kdDRDREJBaFJBdzFqYnFPV2hEL3BDajdVcWd6TUtyUUpBa3dyS3owSTlKNmdOL0ZWd1kxUnJabFdXQ2FKcjlkMTJVZnY5OFB3V0FRSXBFSWhNTmhOZFZBeldxYTlyQXZBYVZEZ2tOdDV6MlVRck5nMnpZRDZyck9Ta0pFNkF1TlJvTnRjNklJYzdGNUJaTkJrcXd5OUI0cmgzTCtFUlJ6ZHhpUVZoZ0lCTnBJcUUxS1l4VEpnL3dpckgxZGJoTFEzclFSeVB3eCtCOEVOejgrZzFCOHZnbjRQNTJObllMbjM1KzJrcVRWbnFnSUtEV3h4cTh0cUx4OURJSG9KT2lPQlQ2Zmp3RXc1QzVWNE9SVEV3Y3dPUkdIdGExbCtMejdEdVQrclRDQlpMcEpSakczQkQ2azFIVUVjTXcyUU40d3JmMU1xTEdhTU1HSEtkTndIcEZJdVV6SG5DSzRUbFo5NXdPSThnL3cwYVJhQ1RTTW9GTm9ZM3RKemJXZzR1QWNSTnZjMjFCUmtLU0k0Qm83Zlh2bHJSeDdOR3Nmd0RiYlFEdmZyZTJhZXdEbHhyNlhjQXd5Ly9PbGNybmt4OGRaYXRtWWY4UUh5b0xtNFBHemlsMUF2VWhJalBvZU9LN3RwVkFYc1BsN1F3M05FQUYvVUM2bWh3blVwNEVrL1ZMU0tZNnd2WWJtYWNVdU5RbWEzNEhhUDAwNmpVdUlZSnNib2VqWWNCTkhwbFhUYUJJRXBoZGdIRUtMUEJZOXJjeFBSUENHV3NIalY0QXpQbHphK3dwTnY1aTRxc3dYUk1DM1gyQnFBZnlvZ2x3T1FSS2ZtSUl6Unk4b002ZmowYUpyOWpWWmtlUVNDSWsvS2djZk9IeWt6ejFSWGF1SXZhMU8wUzFVZ3lJSU04bUlVVWpmR3lmdXdWeVVyMjJ1RGRSZ0FtSlNIZUhrYlFpZGw1SGdZOUMzb01iSmhjQVhUOTVYUTFtSjJWVndNdURkck9EczRzMGFUSEJ4NmJ6a1dnbW9MaFRxWHpEdnlWYndEQXhZVlVvV2RSYXNXcUphcllweXVTd013MkF0bFVyY1IyTWRQd0lwR0VaazBWOFZ3OHU2T01UZlJVb0NGRnNBQzdLUHltTnNFTVpmYWR3RTE5U201d1lBQUFBQVNVVk9SSzVDWUlJPVwiLCBNQyA9IFwiZGF0YTppbWFnZS9wbmc7YmFzZTY0LGlWQk9SdzBLR2dvQUFBQU5TVWhFVWdBQUFCZ0FBQUFZQ0FZQUFBRGdkejM0QUFBQUNYQklXWE1BQUFzVEFBQUxFd0VBbXB3WUFBQUFBWE5TUjBJQXJzNGM2UUFBQUFSblFVMUJBQUN4and2OFlRVUFBQVJKU1VSQlZIZ0JwVlpkYkJSVkZQN3VNR3ZicGUxdTAzYnBUNVp1a1VUYUdsa0ZJKzJERktQVUIrT2E2SXNHRk5DWWFNUnVsZUFmeWpiNG9qRkk0RWtmYUZXVVJCTkRIM3hBeGJiUlVDT05oU3BRUSt3MnRCWmFYUHMvTSszT3pQSGV1elA5b1YwbzRTUW41ODZaYzc3dnpMbC9BOXhBaU1qUGRUL1hWcTV4bXBNUnh4ZmxHc0t0aWtoeUFKWXJUZW1JMkJMZzlkekV1UHJGODlsckhUZzllRkxheVpreEdWTzBNb2kxL2lyVWxOUWhYRmp0cG81eWJXU01IVXBMSU5yaGdFdkE0ejJIY1ZVYlFGNW1JWEx1OENOTDljbzQzZFJnbUZNWW5Md3NzbkNnNWlpdDhWVzZXREZPMHJpSXdLbGNzbjkyNFNCTy9OMkVpdno3NEZIVVZOVDEzMG9wTlV3ZDhiRWVQRmErRGM5V3Z1YStiWEMvaExrOTU2Wkx0Q1V4ZUJqNy9qaUszT3hLTVA2V0dISExGcFpEczBVNVJBempFOTMyKyt0ZlZQS0xYM1hiZFMvUDYzTUptcmpaWVJrWE1YVXBBbmp2b3ArMVRQYmp1T2xVeitaUTUzZVhVcjRIc3hXcTh4ck0waThocS93THFOa1BDSGNiSjlqQ25Pcmp3alBZdVpsODNpdk00NjJBb2dCWFRhSlBocE1zWVYwUEx1Z0l4YXBDT3dvOUtGVVpzMnpBMUM1aUxMa1J4ZXUvY3NQeU9BeWVrSFJ0YmFpT2RMQXo1d3hTYUJRS0RKUjZwdGw3SlRZZXpVM0NzSFZNTzJwWU9oN09NZTI5eFJhQ1BJYnhXSVhHOFV1bmpnMWJ2NUZZamtRRlFVU01XbHBhY0hrd2lTM1A5TFBYRC95RlpGSURJeDBlNkhqY2w4VGJSWmFkd3d6NEZaM2VLTExvU2IrcFpNSmdqRFJNVEV5aGZuOFA2cDRid0pWaFUySTVzaG5PcnFUYTJscWFXeHVnTzh1ODFQNTFwVVY5OXhQMWJaUnFjelhpRzJ6M1dlaFB4eXRwemVxc0JibmhjTmpkZ0hHNG83S3lzZ1ZCcnI3MVVxRTkzTG5PcHQ0cW90NjdlVXFWMUpGekZkVHdmQUh4aVZ5VUV3cUZacmU0aXB1SVpwak1vMXFZVzVzcE16MXRrbWVGSlFwa044b1hjOUFucHpzdmI4R0xVS2tISGQrdXBrUHZCdURQVmFSdnlpYTRDMnBWZ2NvK2VEUEFUbjBaSkJHN0lEY1Vjb2Vqc3dSOERxU0hMd21LN3NxanJ1OUMyQlRPbXEydVc3UHdjcCtCWFhFZGYycTI2Zm9mcXZheTg5K0hVTDl6cmtBK0IrN3dyQ0JvRjZOSUpJS3lVZytkT2haa0I5OEpzUGxWZjNwdGh2YjJUMk1vU1ZMMzlCdnFzVVFTTTVUYWFkNHNCUi92QytDSHo0TWNRNVZZanJTSWpTWk96Ukh4OUYvUE52S3BaNWlpTUxsNXoyc1dmVGcwZzZHWnBmdTh5c01RSzhtZzhreUZDU3FiRjVPWUxFSWczTzZHbEx0SFJhdm9FbW0vd2Zwbk8wemVwdVpFa3AwWU1iRWNlVHJmZzZmOEttWHd1bFlFVzhBeTFnbDNNMTloT3hjZGR1UC9Ic0VyWFI5aDJLUWxib3Mwd2tNREtzT1I4Qjc0Q25jTHoreGhKeHN0QnR6SU16eTNZRGUyaHFLcGM0eHVEaXhVeEQ3Q2N4eHdJWTBPNXFJTEo4YU51SFRRTzM0QnNkOWZ3SkEra1BaREJQQTkrZFhZdnJhQjIwM3p3V1B1dzFKWFp0UWhrVmRtZCtKWG5CNCtLUW1IOUg0WnMxTDFTY0NhUU4xODRDV3Z6RFNWeVV1L21aWXZyWFFiZnhkUkIyQmtIbURjOGNXY1paNVcvZ2YyakwyeUkrZWUwd0FBQUFCSlJVNUVya0pnZ2c9PVwiLCBBQyA9IFwiZGF0YTppbWFnZS9wbmc7YmFzZTY0LGlWQk9SdzBLR2dvQUFBQU5TVWhFVWdBQUFCZ0FBQUFZQ0FZQUFBRGdkejM0QUFBQUNYQklXWE1BQUFzVEFBQUxFd0VBbXB3WUFBQUFBWE5TUjBJQXJzNGM2UUFBQUFSblFVMUJBQUN4and2OFlRVUFBQU1xU1VSQlZIZ0JwVmEvVDFSQkVKNzMzbkVIUndKbkFrSk1NTFFVS2hUYUdxT05ObHBxSTlZYXc5bWduWGU5UnZ3TG9OQkVHd0oyV29pMHhrUmJDQUVLelNWY3djSGR2ZnY1M2pyZjNPNXo0YndmeGdtVDNYM01mdC9NN016dUVYVVJwVlNLOVRuckJ1dWUraU9IK2x1YWRacitWYkJKQS9Rcnk1MkluTCtBTC9DUVlVMWhYYTFXcVZLcHlCaUdvZGpFWWpHS3grTTBORFJFZzRPRFptdUJOZXM0emxKSEFxUkRnMU90VnFPam95TnFOcHNDNkxxdUtBUkViRXVOUmtQV1kyTmpRcWdsd3lUWk5nTHR1YkFEdUZnc2luY0E1UTJpbG0wMGdxeGVyOVB3OERDTmpvNGFreWNtRXNma25JZnZTQXZBeStVeUpSSUpBVFVFWW55S3hCQmdSTVFXQ2RJMXgvYjdNVzJQMUtRNFpNV2VPN2JuU0lyMzZTTjVtNXZrYm04UkJRR0ZNek1VWEw4aENodVFEQXdNUkZHemN6aS9aZFpyanZaK0R5eTVYRTdZNEwza1BIOUFpV2VMNVB6OEZlV1QvZFloOE4va0pOVmZ2S1RnN0lTUUlBcWMxL2o0dUFuMERCeThZdzRWb1pxRGhHZUpoY2ZzOVRZNWZwa2NUaHRoOUgyZSt6SzZ1N3NVZi9TUVhONExlOC96NU9DQnBTVU50TnVZb1F3QkRpTVl4ejZzazd2RktRRXdBd0tjR0ZUV0ZiODFCOW5PRG5udjN3bWFxVFJnYWJrS2dsbk1VSTdHUUx4NSs0WlVxVVNLZTBBeHVHSXdWY1pZMFdOTFFleXRyVVpSWTc4cFg1WnBuSUVrTlovUFJ3YlE1TGtKbEFxZnNBZlhXbk9yaW1RTlJmUHg2T2NPNUJ3Q0xnS0lPUWRUUmUybENHQ09DbFZEZWxNdk1mMWkra1RTeHJwdjhtZlhlWGo1Q3ZVcjRZV0xKOWFvSkMyRmlNQnFkWkhnNWkzcVY0TDVCNTBJZm9CZzB4RFlvVFh2ejVPYU9rKzlCRGJOdS9kT2ZFTWZhVmtId1pJaFFEZEdKTnlSdGRXMXJpVDRIMnhJZTJ6NnlNckdtc3Q1eDczeEJhdGtNaG5kTWFKVFUxVDkrbzNxcjE1VGVHazJBZzduNXFpeCtKUnFuemZFeHRoRFJrWkdqTmtLN3FLMnk4N25lamROWng5NjF6UnBBcVFHVHBKMTJjbTlnQWtQV1JNRkxpdzdrbDdBVU96UjRKQ3N4bXg3Y0RMVXVsbWxZVXJjeVdpZVRwRUFHQldEbDgycUhJQm5xSXRYYWYyb2krQUs1L2RCSFI4ZnEwS2hJTXB2aG56RC8wNzlFRWhUUDZJZi9SWFZ2MnlvLy9oMWtkWUFoeGJnbnY2V1lVMTF3L2dOQmxKL3ZyaFdERE1BQUFBQVNVVk9SSzVDWUlJPVwiLCB1QyA9IFwiZGF0YTppbWFnZS9wbmc7YmFzZTY0LGlWQk9SdzBLR2dvQUFBQU5TVWhFVWdBQUFCZ0FBQUFZQ0FZQUFBRGdkejM0QUFBQUNYQklXWE1BQUFzVEFBQUxFd0VBbXB3WUFBQUFBWE5TUjBJQXJzNGM2UUFBQUFSblFVMUJBQUN4and2OFlRVUFBQU52U1VSQlZIZ0JwVlpKVEZOQkdQN210ZGdMWVJPRFM2TFBFSmNZbGJwRU9TZ1VJeTR4cEdpTUZ3L3F3UVJqb3RWNE1CN3NhMEtJUjJ6Q0ZVZ1VQUkFqdUVWUHJjdVJoTjFFRXFBZ0IweFlhcUZSUXZ2RythZHZvQVVLSmY3SjMvbm5melBmOXkvejNoUllSVGpuZVVLOVFnTkNoL21pVEZzK2oxQWQ2eFhhWkFGa0trM3BpTmdLNEhmRllBak5vM2t3R0VSN2U3c2N3K0d3WEtQck9weE9KOXh1TjF3dWw5cEtEMzJNc2ZxMEJGUU9DMXdDMXRYVklSUUtvYWlvQ1BuNStjak96cGJyWm1kbkVZMUdNVFEwSk9kdGJXMjhwS1JFWVJtQ3hMZU13SXBjc3Z0OFB2ajlmcFNXbGlJcks0dWVRV3hLR2VWbVlSTlJYMThmYW1wcTRQVjZGZHc5bFFsVE5SZERKNVdGd0JzYUdpQWl3bnFrbzZNREhvOUhrVkM1RGdtU2tDSm9Fc1AxcWU1dTdEL2s1SnNPSEdTcUhFa1p5b2lYMm1vZWlVVFEzOStQUUNDZytoSVVheXFZRmYwd2VhYjM3c0pQVWZPV2ZmdjVKNU9uOUNlNU5PbWtXd1JJNEVSaVNiNWQvRlNUTmYvbE16QXlBbDBBR1pFd083TEJ3VDl1MXhuZnNnV1p5UHo4UEFvTEMyVVFnNE9ES0M0dUpyZUhDTnh5d2RzMzBNUm9vMmduSmxCZFVNQ3FveEdZVlRlNWVlNDhXdzJjUUUzVFJEd2VSeXdXZzhQaFVJL0tDZE5KbGluU293bmJ2UWRzYmc0UUpCZ1lnSGI3RnRNZTNBY2JHK05yWlVGbDFEUk5abU9KVHBqeWhUSkhSNERLTTRpLyt3RHowbVhLR2FKendNd010T2ZQb0ZWWE1mYnloWXgycVNwd3BVbWkyeGZZU1NkRjFOLzd3YVltRjVlSXRFblo1QlM0M1dZS2o3WldGaWx6K29nUlUvVDRVYkNlbmtTWmtQcUs4NHBUOGRoVHY0YXQyOUwyUW1WRGZhQXk1ZVRra0R0TWVDR3liR1hsV0Zia25GekU2LzFtclBXVmJUWHdwV0szTHhTbWl6SXdoT0dOaTJQNjkyeGw0aFFKRGVnMnMrbHVCVE1MTjJVR3pLMHNUSTRubFFaMmJaVEg5QjRSVUpPbmFmYm56R21NZDM1Rjdja3MzbmpFbm5IRWlvQlV6OTJPNFRzOXlydFRFMDJoNzBaUUV0UStodXVhZ3pjZVhpZDRrcnkrMHFMTVp2b1dxUk54UTJpNDRGZ1pibFE5WWlxYTlVYnZMWHNJNStZRDVKRjNBeG1TZ0ppVXd5aC9DSy9RaFkyWmdDTUJicWg5aVlzbkpMRlQxbG9OSjd0cnZCY1hXNjhpOUh0MGNRRmJEdXphY1VLQzA1Z0VicXkwUlpGNExKTEVsVG55RGUwLzNxUHJWKzhDV1o0alZ3SzY5MXhJQmw3eHlsdzU2OFNsMzh3emx3RC9qMzhYSGd0Z09nbHcyUElaMWpGUEsvOEF3VzRnODFpZFN5UUFBQUFBU1VWT1JLNUNZSUk9XCIsIHpDID0gXCJkYXRhOmltYWdlL3BuZztiYXNlNjQsaVZCT1J3MEtHZ29BQUFBTlNVaEVVZ0FBQUJnQUFBQVlDQVlBQUFEZ2R6MzRBQUFBQ1hCSVdYTUFBQXNUQUFBTEV3RUFtcHdZQUFBQUFYTlNSMElBcnM0YzZRQUFBQVJuUVUxQkFBQ3hqd3Y4WVFVQUFBUkFTVVJCVkhnQnBWWmZhRnRsRlAvZG05eWthMDJUNm1pRHRWbVlNTVc1ZEZPd2dtNHBvaThPbTlxcUx3VnhpQVZSdWhWQkowaVRGS0Y5RUtaUUNHTVAzY3RlSmtVRENvSm8xeUFGY2NYV1ZWbnhJVTFhcFN1NjVVK1Q1di8xbkMvM3ByY21HUk1Qbkg3bis3N3o3L3VkMDNNRDNJVlVWWFVRKzRubmlhUHFIdDNSenM0UnUvRmZpWTAwQi9kS3M4MENTUTJjbjZVbFFPemcvY0xDQXNMaHNGZ1RpWVRRY2J2ZDZPM3RoYy9uZzlmcjFVMzVNaWhKMHFkTkF6QWNtblBoY0dwcUNyRllERjFkWGVqbzZFQmJXNXZReTJReTJOblpRVFFhRmZ1NXVUa1JVS01BQlFuV0JkQXlGOUVuSnljeE16T0R2cjQrS0lwaVRBQmtYRnVac3Rrc1ZsZFhNVG82aW9tSkNWMTFYSCtKcEdOT3k4OE1DenNQaFVMd2VEeENzN1cxVlRpcFphUUZZTExaYkVpbjAwSmVXbHJDMk5pWUhvVGhPa0c2NjdKbXg5QTRWbFpXUlBaT3B4Tzd1N3ZDOGZEd01HUlpGdkpEc2dKN05pZGtxOVdLb2FFaElUTjNkM2NMVzRaV3E5OHNDN0tXL1J1OFlRTTlTOGFabVEwR0J3ZHhNSnZIeEpISE1QM2swK2pjeldGZ1lBQ0xpNHMxUFpQSkJCMWVqZnE1elNYdVpkcGNLQlFLaU1malFwR3o0NngxbkxsN0ttK2RoZjJGNThSWllqNkNqaXVYYXZjTVdhVlNRVDZmUjdsY2hzdmxnc1ZpNGF1Z21mNzRXTm9LVGlOMWFSWW1Lb3ZKYW9HWnVrWTRJT010Vk5DWnprS3lLS2prY3BDaU1jU2U5OEZCU1lES29aSmFLWmxFaVY1V3BvT3QwVE53ZlN4cTRlVUF4MFUzL0xRRU5aV21hNG5ja1VFaUJmbEFDNEVvNDJJeGpmZE5iY2pmL0YwRUtSTWtNOGx0ZkdodUV3bFVxRjZWWWtudk5hUysvUjZvQm5DYnRZS2dFSXVUYTZuV3QycXhpREt4UkpBdGwxTFlWRlMwM2x5RDNONk8zekpwUkFvcGZFQWRyQkkwMExwS2I4dHlJcWx2M2JMeG91N2ZtZ01ScHB1RlBOYUpEL1NmaFBXRUI5c2tweWc0My8zYnVURkpKbjdCT2tjeTJlMG9ZYk9tYUNRYjFlSWdaT1FXZjRTYXllSkJxdFFEVXFOMHFtUTk1TkxGaEt3RmdPM1VNMDBObnBBVUhKWE5VQTY3b1R4NkJEMVVsMk9TMGxTLzFmTzRMaTV6bXdaSThCZXBPM2FvRTdoTnVYc2tRNFpyNGE5Z2VmczlPTWJmQWZVakVwK0ZVTGw0QVErLzlHSk5wOXFxekdYY1ozZEFhYkh5OFRoRHhEUERyN1MwWU9qcUs3Z1crNkd1SUNPSFg4VmdwNHFuQ0I2MVZNUWZkaFdmcEsvaXU5QzdlMHBxbGQxMkY2Smp2K2luWDhxVUtjK05hN3p6bnpwZjkxeFhldzhpMXlQNHlGZkc3ZTBOWkRmaWVQUDFNdjR5L1EySFpLL1QvK0sxSzdwNDJUaUx6aEFuK3QzUFZvTm8yVEJKUldEai9sdFljNm80M2ZNTlJvNWV4NThPRlN1M2Y0VTVKZTNMbm0yUE80L3hpZmcyQ0hzRGhtSmtzQnlJVENOSWpIMGFUVWhMeEgveVBBTGVHZ0w3eDdVaFNBRFZ5WXJsclJ0NCtmTVJyQ2ZqZXdwU3ZlUCtROVZYODZvUmY5VUNqVXlNTHhIam0vZGM5UERhMTFpK2RhTVd6R0cxQzRlK1IwNGJIVGY4WkRaK2RmV2pmMW05ZDVwWC84ZXZpM09hZ3pzR2gxSHRMTUF6LzI0Ky9nSEl0WGdRQWdJRHhBQUFBQUJKUlU1RXJrSmdnZz09XCIsIGhDID0gXCJkYXRhOmltYWdlL3BuZztiYXNlNjQsaVZCT1J3MEtHZ29BQUFBTlNVaEVVZ0FBQUJnQUFBQVlDQVlBQUFEZ2R6MzRBQUFBQ1hCSVdYTUFBQXNUQUFBTEV3RUFtcHdZQUFBQUFYTlNSMElBcnM0YzZRQUFBQVJuUVUxQkFBQ3hqd3Y4WVFVQUFBVVhTVVJCVkhnQnBWWk5iRlJWRlA3dWUvT20wMms3blVLVkFxR1pTaE9SVGhFdHYyMmgvQ2dhTU5iSUFoTU5TbUtJaVF2ckFsMFp5b29RTmJweFkxUXd3UVZ1QkV5cUVRaHRhQnVVd0VCdG9ZQ21MVlBUempCL2JhY3o4MzZ2NTc2K0J5VzBCT09abkhmL3YrL2NjODY5ZDRCSENPYzhTSHFROUR6cEVMOHZhYWV2alRTRS95cGlrUVB3dUhKMFBpSTJCL2dIVkxTVEJrWGI2T21HOWt1SFhmS0pDWHVPVkYwTk9Wd1A3ODZkOERRMnUwc3pwSWNZWTEvT1N5RGM0WURiZ09rVG44UE1qOEs3cUFxeVhBNGxXUXlybkVFTDVjRjRIdHBmd3pDSGRTdzZlQnh5WGIwTDAwNGtoeDRpY0N5MzJRdWZIb0g2emRkUUd0WkFVaFJNcmJEQU4zcFI0bGVnRjNISWwzVG9Rd2I4VWNESzVXRU1Yb2YzN1gzd0hmalloZnZRM1FsemZVNUZSTGhGZ092ZmZRc2xITFlIR2FlUFFqdDZSZ0xXZTZGUG12RGQ1bERIZEJTUE1YRDZXWXhCdnhxQnN2ODlsMFM0NnpraUdYWUpqbEx4am5sOXdKcmVza2xTNnVvZ2w1UkNjaXh3SmxHRnVkdTE2NEpicUVWdGMycVNkaktJNHBPbjNiaDBFc0ZXNWxnL0pIcXlEYXZCb25lZzFJVWhFWUJMWUZRUWtFa2dqVjZZQVE3V2I2S0k0aTM5dzJmNFNFMGlNUWI2Z2FZbStILzYyWFZWaFljK3I0bWEyZHNORUxnc3NpU2RobFRzczhGTjhqbHY4b0UzSzJBTEFLOGtRVzIwd0VhQmZFY094UkVpdEdpTnF0a0dHVDA5TUFqTDJVV2I2R3UxczZhanc1NWdXNTVLZ3VWeXR1WmFEZkFkRk9RS0RSNUpoV1ZNUXk1U2tROFZnRzJFTE9kbjVpWVQ5bHBob0VsWWpyUUl6TldpWnZYL09XTzlhS2dxTFVqQ2VLSUEvMHJxODZtUVdSNGV1UUJma1E2L1Q3ZnIzckFGZmEwR2xpQ0RDb1Y3THJWNmUxeUNrSENSZmFCWU5FcUQ3SDVRZFIyVGxSbjRGOGxRcDRIeWdKZFdNaWV0S0xFOGxFa0ZTdGZsMDVDS2FIZkd6RnFKdnFaeklGMENXOHc5YnhnNGMwYVdVZ2xtcm5xV205dTJ3N2Q5RTdNQ2RNQzBmdUxyaHF4SHdNd2tUR1VGVkhrenJJWHJvT3l0Z05iUUIzNzJnc0c2T21XZVNEQytzWkc3ZG9vc0Voa1Vpc1ZTM09lVG1VUkJwUFRDbGNFVS8zMGd4VkpUR2xiV0JQRHloaXB5amVMYVErTkpYT3hQUVl5SG53cnlGOVkrU2VNeU0wMFRBaU1RQ05qblFleGdXQkFjK2VFV3V6UVFoOGNqNGVaSWx0L05xS3k4UkVGNXFZSTdzUnhrY3ZDNnVrb3FHUVpITWtoa2RBVExGQVRvZEg4V3U4RkVzbTRJTDZSWWdXOWR1NWdkM0w5R0VGd1ZCRjJrVy9idXFzWE5vWlJGQ1lpM2RvYlk5alZWQkxpQWV6MHlHeG1mNWozWEV1ejBoU2hVamVQTmwycnc0dnJGOThhanNSenY3b3V6azUxUlM5ZE0xdHBTNDI3MGxIQ1JDSExhUG1qWkxDeWltTXFiK0xWM25QY08zRVU2bzZHK05zaGYzN0tNMVM0cnRmMDZNYTNqdDR2anZETVN3MVJXNTA5WEIvQnF5eEsyTWhTd3h4MzNDS2x4cjRyelloZVJtd25zUG5BT28vR0NmUm5VTHcvYUxyb1ZuVExqcVlJczZzSnRvL0djWlhGSTd2amZvMWsrbHN5eGdOK0R5OGRiRVZwU0ptQ1BVU3ozUFhUWmZmWGpkVHBRRmw1cFhzcURaZDU3dDIzM3RiczQrMGNNOFhRZVRhc3ErYTdtcFFpV2V0MzF1QkNKWXpKdjhUMDdha1hmZzVlZE02bU5paTlFUFo4djRQRDNmZnp5alRSTFRxaFc3Ykl5YWZmV2F0NjRxaEtseFI0bUxENXhkb1JkdnBHeU1sa05OVXRLcE1Qdk4xaWhwVUhKZ1h2d3VwNUYwazZGZUhSdzdWWUt1ejg2Qndvd0hpVXR6MWZoazNkWDI2VWo0bFZyZHh0elBabHREb2w5d3J1dWpPTlUxeDMwM1U1aGVDeHJ6eUhYWURNQnRyWlV6d2FlODhtY1U1eEgveGgvZkRuUC84ZS9pellISUQwTGNNanBhM2ZTZkY3NUY0WGg2azh5UmFjNkFBQUFBRWxGVGtTdVFtQ0NcIiwgT0MgPSBcImRhdGE6aW1hZ2UvcG5nO2Jhc2U2NCxpVkJPUncwS0dnb0FBQUFOU1VoRVVnQUFBQmdBQUFBWUNBWUFBQURnZHozNEFBQUFDWEJJV1hNQUFBc1RBQUFMRXdFQW1wd1lBQUFBQVhOU1IwSUFyczRjNlFBQUFBUm5RVTFCQUFDeGp3djhZUVVBQUFROFNVUkJWSGdCcFZadGJKTkZIUDg5M1VyWjJxMGR6cnB1WkMyejZLYU1EWkFRZzlJWnA1a0JiY0tIZmRCSVFud0xHa00xMFc5ekhmaEJFNHpFbUtEVHlCS0owV1FoTmpINFJRSWRCbEhzUUpoTGdJVjJqTDI1YmkzcjB6N3Irdko0ZDcxNzJyS1hZUHdsbDd2N1AzZS8zOTMvZi9lL0IxZ0ZxcXBhU09rbTVRd3BRVFdQQ0xkNVNISGd2NEpPNGdUM2l1TXJDVW5Ma0I4a2xaY1VDKzM3QXhQd25iMkpBVkpIWTR0c2pLTzJBcHNmdWcvdXRnYTR0dFdLcVZGU2VpUkpPcnFpQUhVSEoyZkVIMzBUd09pVURPdTZjbFJWR21BcTA3TnhjaUtGdUxLSTRQZzhWTkkvZWVRNUpzamhKU0k5U3dUNHlwbjY0ZDZMK1B5SElleG9mZ0NscFNWc21DVFJNZERxM0dRVmlZVTBybzZFOGNiZVI5RDErblpCOTQ3WWlVNzRYS3o4OEZjWGNheC9HRnVhckxCVkc1SE5FaUtkaEgyN0c5aE9HdW9xOFdMSEJwaks5WWd2WkdHM21iREpXWTNQdmg5aWN6bTZSVXgwd2tCOS90ZjFXUnpxRFpDVlc4bEtkWVQwUWV4K1lqMW1Jb3VJeFRPRU1JMXJ0MklvMGVrd1RXd2RqOWZoRmJlVExlS3B4MnJaWE9wYUhyL2piSmRjS1VnN3poZSt3N003YXVCNTZWRzg5WEVBZXIwT2EvU2x1UDFQUXZPbUNsV0xXYlhaZ0F4aHA2NzY1R0FyVHB3YXdlQzFPL2psaStmRmtDb3E0Q0dOVDZseSs0R2ZVR0Uwb001cVFqcURuTU01c2RXazROMWRRK2k5MElpYmN4VWljaUtBckIyT0pCQ2RYeUFDZThUcDZxRXVjdE9XenovS3lHS0pOSUlUY2VLT0RBa2djWXVTWm9HTXlDcHFqWFBvZnZvODNuL3lEMllUMytuWThSa0ZVVG5ORnVVN0d4STdjRkdCVnRxNmNtT1doMFNIWkNxTGNEUUpXVWxCSVVSU1ZzR0h6NXhEbVM2RzhoSVoyK3ZHOEhMTDFSdzVLWFNza3N4b0IzUGcwcVFRY0pUeWdDQTBJUmZkaWxRNmk3V3BKRnpPS2JRNXArRXdoNUhONUw5M05nOGpSc2lQblg5WU83YU1nT3hBWEVnaFVBQkpxeTFsU2ZSMURtQzlKWjV6Y3haTHNLY3BoSHJ6UEh6RGR2d1d1citBSTc5UzZwTVFiWmhOQnY0OTl6R3FHUEJycUFhcndXcFUwTDV4SEMyMjJTSTdUU1VjVVUzQXRjMldNK1ZQSVk3NG0zRWpYSW5WRUV2cThXM0FXV1RidkZGTEc1ZXBnSisyM0M0N2xpZ1FmSG1oQ1dOUjQ0cmt2YjgzSXI2b0w3TG51ZUNqOTRBR09VSjc3UWRPd1Q4NFhYVCtLWFNTaXY1OXAxRnZrWkhPU3VpLzBvQ094akc4ZVhJbnJzK1k4d3NqMGJiYmpCajVzVk5NM2NCWWFPNG5WWnQvY0pLSS9FeVREKzdPNUcvdi9CdjJLaGxIejIzQzdUdEdPTmJKQ00yWkNrYW83Q1Q4ZWNLTmxweUwra2pDMnk5eTBYNVNvcTZ0Tm5TOXRrVzdtWVdZVGF3bHhjRElLWmFTcTJ3dUoyZHZBMUNjcmxuS29PMURYMThpbWZGeWthc3FEQ25ONzhYSWszL3dhcXN3YXVuNjdnZkhpMXhtSlRkN1R0MzczbWxwZENxTzFlRGFXb011UWt4ckR2cXFlVVZudVNmVHcwVnlUK2JnRk1sVHQ2Z2dRcE15RzJNeHJjRXVRdWgyMVJjU0wvdGtMZ3YrNlBlcDk0NHo2di80dS9Cd2drZ0JZWkRidlB5WXI0aC9BY3RFYkdNRUUycy9BQUFBQUVsRlRrU3VRbUNDXCIsIGZDID0gXCJkYXRhOmltYWdlL3BuZztiYXNlNjQsaVZCT1J3MEtHZ29BQUFBTlNVaEVVZ0FBQUJnQUFBQVlDQVlBQUFEZ2R6MzRBQUFBQ1hCSVdYTUFBQXNUQUFBTEV3RUFtcHdZQUFBQUFYTlNSMElBcnM0YzZRQUFBQVJuUVUxQkFBQ3hqd3Y4WVFVQUFBUmxTVVJCVkhnQnBWYmRieFJWRlAvZG1aMzlYdHB1S1Z1dDFTMUZwWFRiOE9FRG9ORW14a1FURFJyakU1RG9YMENKaVQ3YTlzRVhYM3doOFkwR2F2VEZLSUg0WmhxRFFNQ2swRzBUMU1LV3RueTBDMkhiL1p6Wm1aM3J1WGRtbGwzYWtocFBjbkx2ek43eis1MXo3amxuRm5pR2NNNWJTYjhpblNTZDUwOGs1NzRiSmszaXY0b3djZ0cyS3FjM0kySWJnSitnWllTMFZUeFBMMWR4ZVVHWGE3RnF5ek9kVVJXOWNRMnZ2eFRFWUtmZk0xMGxIV1dNZmJzcGdVaUhDeTRCZjVndVlxVlVRMXZJaDFpQUllaFQ1RG5kc2xFeE9SNFVMR0dEc2JmajJCbjNlVEFqUkRLNmpzRDFYTEtmdVY3QXViOHE2TnZoaDA4aFVNYXdQbGd1aktDYk51WnpKdDUvSllqaisyTGVqeWU5U0ppWGMxcXVpN1NjdVZIRStiOHJsQUkvbUFBWFJ4b0l4Slp3NndRaUFySCs4OGpBUjd0RFJCTDEwcldQU080b0xxTklUZXZ0eHlhZm1DNWplMFJEMVZaZ3VPcnQvVW9KRVNXSHZzZ1VWS2JENE41dkRCMVJEV2ZUWmFRcHRlNzluUllibit2OXB6SjVrMnVNS1NxRTZtVEl1Sk1lNGZYemdYc1kzRFpGK1EraDNmOElDaXJ3TVF0LzVONEVwN09xQ21sM2xoejh4cm40SVZIbUlvSVB4Vk42MlVTMkpQQVVGS3BNZW1WUTBSZzFvRVZkeGtEMEN2dzhqNDhUNHhocXU0QjMyMytDWmRld1AzWUpOamRSTkpsTWFYckY4cUlRTWl3SWpvamRwU1Y2S1hKT1hxelJZYVBtS2ZCcWFBcThwdU9kK00rQVhTSFYwZTY3aXdPeGkyanozWWRwYytSTmNWZXF4TGk4VkNkNFN4RHNGYnRNenBMZTA4V1FaMERlb0xPOFJDa0JjdFV3NVpwZWNnTG5ocnRXaUdRSkJWTkR4VElrQ1pQcFZEQk5VYmlTVk53TG9YcTNuUkp4SzhhaTRuaWo1UUo1T1VrcDA0aElsSS91Z3V0UzU0cmRzaC84ZEIrZko3OUdxN1lxN1VzbWJ5SjQwaEplT2JvbC85cTJxL2lrY3dLM3lyMVlNVHB3UHZzQnBZL0trRk9lOHluTUZsSzR0bllRQjFxdW9UODJneGZEZHh6N2hwNFI3U2ZlSnFOK0JWbTl1WmwrWEQ2TzV3TDMwUmVkUWJxd0YxMkJ1L2h1OFFSNndyZVFNK01VcFE4QnhjQmlKWW1IMVFTUjdpZHNHNTB4MVlOWXJSTU1KalJrOGxZVHdReUJkZ2NYOEdmaElKS2hERzZXOW1DK3ZBdTNLN3NRVll2UVdKVjg1WGdodUloVGl5ZnJkcjF0OWJGeFE2VG9kN0U3M0sxNUxkb2t2ejQ4Z3UxYUZqZUwvVmkxNGtqRnB0RWJua09ZQ0RLVmw5RVZYTUxWdGNOWUtQZTRGaHlIQkpZajV3U0JuQm1EQ1IrcENtY0VOSlBNbFhkVDQ0V29rM1cwYVkrUm9TZ01ldjZpWnd6ekZJMUlsd2VlaURBTTdxaEg4SXMzaXlacEdVcG5MWHo1VzBYV010dHd3QUY3SXJOSTBMMDhNTHF3cUNkUnJrVWNhRTVWU0tWODZyMHdkcmJLT3hnbmpNL1dEYnVKV1FQZno1cXlucDJxMm9MSW9XZmphTDhmeHdia21HZ2VkbUpEaTV6aHgxSUJIRTM1SFkva25mQ3RnYWZxNEVKR1hjeDFINXdST0pNVm1WVWJZeGQxckpTcFErdkgyRk9FSEFNZEtvRnJsSGUxRVh3RURSWlBPY1NIWFJMWjRlbHNEVmZ1MVdpVTJOVHREbmlVSEIwZ3dFTmRhaVB3aHAvTVRhS1dILzF4dm5XWjVQL2ozOFd3QzVCckFKeDMzNDJJbWY4c2pIOEJyLzZVUXlTeitKSUFBQUFBU1VWT1JLNUNZSUk9XCIsIGdDID0gXCJkYXRhOmltYWdlL3BuZztiYXNlNjQsaVZCT1J3MEtHZ29BQUFBTlNVaEVVZ0FBQUJnQUFBQVlDQVlBQUFEZ2R6MzRBQUFBQ1hCSVdYTUFBQXNUQUFBTEV3RUFtcHdZQUFBQUFYTlNSMElBcnM0YzZRQUFBQVJuUVUxQkFBQ3hqd3Y4WVFVQUFBTlNTVVJCVkhnQnJWWmRTSk5SR0g2K2JXcHF1bjBPSXdUUm9hU2xiRm8zT2Z2UnF5Z0twVzRqaWlDNmtTeUNiaUszcmxRUXBLdHVSSU1ncUl1d2k4SnVORXE3TVZxLzZFVnNTWWt3ZElxLysvdE81ejA3Mytkc215N3kyVjYrYzg3M3ZzOXozdmVjc3pOZ0d6REdiTnk2dUkxeTg3Tk5oT1JZSjdkSy9Dc29TQkpraThGTVFrb2E4aHY4NGVGbW83NHYrQjRUc3lQaXVSSlpFajc3Qzh0UmJhdUR1K3dVR2txYjlOQkZibDVGVWZvekNsQTVKTGtnZkRMMUFITnJ2NkR1S1VWUnJnMzVsZ0xodHg1YncwWnNGYk1yTXhTRiswMERxT0tDRWg0dTRrMFJrRE1YNm9NZit0aUwyU0hsb1Awd2NreVdoTmZmdWJLRWJjVFc0Vithd2xuSFJWdzZkRXQvZTFQUFJORnJ6aDhmcVN4ZXJ4Y0RUeC9pUXU4SjVLbG1NSVdCTzIrZERqTW1KWVVVVEM5OHd2bXFxN29JbGF1Unh3VjBnVUgrdU96eitkRFkyQWluMHdsN3VSVzExMjNJS3pGelltV1ROYm02TERIR05JYlY4RExQWkJwOXg1L0JsVmlYTVM3UXFzalorMm5FNFhBZ0VBakE1WEtKUUV1aHdtcXVxYkJXNTZadUJoSmtVcGkrR3ZBajlCMU8rMUVoSXFIeUFxTmR5STJOQ1hMQy9Qdzg4dlB6Z1RVb2s5MnJ6TjFSaXhwM3BWRWxscHdOUzJRU2lVZXhCd1dJUnFPWVhmNkpzcUlLZXR0SkFtM1VHaDRlTm1LQ3dTRHNkcnRSaTlybFpuUWM2RUFtMEZwb21vWjRQSTVZTElZOC9wRTRTUUlOMUtMNjZ3aUh3MEtFc2pDWlRJaEVJc2dHdEJuSW43S1FxQ1FCY2FEOGZ2OFdaM0lpTTV2TlFvQXh0aU81YmttK1FtQmJVTnFVZnJZWkdGdGF3c1F0UUExVlZiRmJvS3dsRmcyQmxwWVc3QllzRnFNd1BtcTlJZjYydGpiMDkvZW5PTk1tZEw0ZVFkN2NiMlVuWW43ZUVPZjF6NzE3RDZpcW9xRmhPbWkweUNIcXRiYTJpdk9ndzhicitkeTZsN1hrNXV4SVRzdEtLNldWbHlObjB0aVJEaE5mRlByZEdLTmVWMWVYRVZEQnQ5dGJ0VGdyY2wyQXpQTG9zVDQwUkw5Rkp0bTV3bTJSMW9GRUtqbjVxRnFNZW9zNWEzS0M2ZllkS0hYMTFCUjN3MWFueFBVbnNORFR6ZUw3U3BnbWpXMWo5SjU4NDcwOXlUZGNaL3FaTU9ZeFhMNStadkVqcmhRaExja0VjZnM1cG8yL1N5YjNKSE9tdXpKSm5SWkRuSEEyTVE2OGVnbDgrd0kyTTVNSXNGb0I5ekhnOUJrbzdtWTlOTzJWbVNrVHV2U0hXUFlZWmYveDc2SlRFb1NTQ1AxeXpDTzNlVWI4QVpLRk9lL0E4YjBLQUFBQUFFbEZUa1N1UW1DQ1wiLCBDQyA9IFwiZGF0YTppbWFnZS9wbmc7YmFzZTY0LGlWQk9SdzBLR2dvQUFBQU5TVWhFVWdBQUFCZ0FBQUFZQ0FZQUFBRGdkejM0QUFBQUNYQklXWE1BQUFzVEFBQUxFd0VBbXB3WUFBQUFBWE5TUjBJQXJzNGM2UUFBQUFSblFVMUJBQUN4and2OFlRVUFBQVFFU1VSQlZIZ0JwVlpMYnh4RkVQNTZac2V4MXdIYm9JU0Q0enhBb01oZVpJUER4VUV5Y01NU1lQZ0RrQXZpaHBFSU9iSTVPa0VvWjBSSUpKQTQ4b2hrTGlqR3lCdExrQ2dyYkVjUmltUm5Ody9sNFd3ZWZ1eDZaNmJ6VmMvMGVsYmVqUktsck5ydW1lbjZ2cXJxNm1vRGp4Q3RkU2YxYStva2RVRnZTQ2wrTjBiZGpTY1ZNWW9CSGxkT05DTlNEY0EvNTVDbGRzcXpuNXZHK2g4VFp0VDM3cGsxenM2ZGNET3ZvbVZrQkttaE42M3BYZXBocGRTeHBnU1NqaGpjQUphUGZRdGRMTUxadGcycXF4TXEzVzVNOU1veWRRVmg0VEp0Z1BZZmY5SnViOFppWlVseWVCTkI3TGxoTHg4ZFIrWDc3K0FON29QamVWQkVvUkVNbWpIUjBPWVhDRmZYNEYrOGdKYVBENkQxNENFTDk0V05STm1jY3pndmFSSHc2Zy9INFdVeTVxTWlpcU9TM3FnWVB1S1RlVWp5YXY0OHZFOC9zeVNTcnRkSXNtZ0pUbkQ0SkppYnhjbzd3L0Q2K3VDMmI0VVRnNXBGMi9uVXpsa1h4NklQM0VwRVFhYmd3WDFHY2hGdHYvNXU5K1V2RXJ5dFl1OFg1TTN5NEFCVXNVQ0NETDFXY0lpbGRybEFyd2NFbkwrU2lyeWZyMExZZFY2SVFrTVNrTVNmbndQMjcwZjZsMU0yVlYwcC9vektMRGd6VGM4S2NLVktTaVU0YmExUWUxeW9sMXVBSG0wQWNiTVNSYk9QRDJrRnRTV0EvbmNkV0F6Z1ZDcG1pWi9Md1NkV0hNV1l2UHZBVk0zRWhBRjN4Zk03UzFDcnExQjc2ZUViMUdzcndDVFR1b05nM1JWZ2d1WDZOL1Y1RXZLZEN0ZWdscFpNMUlJUkVDdVdZWWxnd093RDgyOXpEbnFqMGdSWUM0RXJURWZJL094Z0ZNZEp0SldyK21sV0ZXODRkM3l1dlE5VkxodjdVUFJNemhMc2xuZm1RSUgxcnN4ZlRMS1hTd2ZvN2RrU295REJWWUozTTRMV01uQjdsVFhDeUdZWTFZdHI5SzVhczNQa056NlFRcEJLSGdncDlkckJ1QjVHWGk0VDZEVEIwNHhnWkF1d3hERkg0aityVVoyR2JzMUlKZFNLUkxCb1pzOTJvRTd1MG5pR1FNT3R3TlI2WkxXTC9yenV5VVlCNTBndzRFVWwyMUhmY2FTVldKUWFnY3Z5cXBNaTAvS01mTlpSem1mV28vS2NwZjd2UjBUZDlMN0lTUCtwMXBrcWxua3NlVUdZTXF4c1hIWGk2OGp3RXNFK2F1TXhaQjg2eFloK1p2NUhHVlV2U2MrUjlHcGd6a2hTVWh0WXY4bEJrMDB1R2N3UDM0ZGlCZFNxU2VRbEFnMTUwWDcwYzVSZHkvT0J2Q2FpQzc0cEhYT2lSWHQ2NEozTlcrczl0bFZNY25oTEV6d2dTVjJMc05KSDhCZjQ1U1poeW9SN1FMMng0WG9ZcTN0NnlxYm9KRnZGZ1UzTkx2em1DRFFibm9NR2wwVVRzVDBKWHg2Q2MvQXJtZFdhM2NhaTZQb3pFaHdkMThIMjUzUVlxMzZFeW5kWkd4d1pUOTV3WTQwOTBUcGJXekwzbnc0Ryt6Y1JoUWsxd0tQdjZUQTNuUVRQSmpFYlhabkNMamViT2VHeUwrQ1ZpZmxaNkVJaE11amdtWkZtOXU0STFGQ3R2QnRlbWMwaWtVdi9wSDU4bWRSUDhkL0ZXQXhRU2dBdXhPK3ljWmszbFlmNTdwS29BZURocGdBQUFBQkpSVTVFcmtKZ2dnPT1cIiwgbUMgPSBcImRhdGE6aW1hZ2UvcG5nO2Jhc2U2NCxpVkJPUncwS0dnb0FBQUFOU1VoRVVnQUFBQmdBQUFBWUNBWUFBQURnZHozNEFBQUFDWEJJV1hNQUFBc1RBQUFMRXdFQW1wd1lBQUFBQVhOU1IwSUFyczRjNlFBQUFBUm5RVTFCQUFDeGp3djhZUVVBQUFPUlNVUkJWSGdCcFZaTmFGTlpGUDVlMG1jNkUyMGJTaDNhR2FhZFFXZlFHVE9qMWdvdUdnVEZsYTByTjI0VVJCRC9LZ3BDVll3L29PSkdFRkZCVURkdVJMQVZCRkZvSTRJYmJXTzFDdjQxN2FKVnF6WTF2eS9KeS9XYzkrNU5rellwQmcrY2Q4Kzc5NXp2Ty9mY2QzTUN6Q0pDaUJyU0k2UTlwRU5pU2lia1hBZHBFOG9WRHBJQTN5dFhTaEZwUmNEMzBPQW5yZUgzMUlNQWpPNXVwR2tVazVPV2o3T3hFVTd2ZjNDMXRXRk9xMCtGaGttUGFwcDJ0aVFCbDBPQ1c0Q3gwNmVRSFJtQmMvNThhQjRQSEc0M1JXaklScU1RcEdZb3hER292bkVURlY2dmd2RVR5ZEVaQkRKeml6MTI0amlTRjg1RFg5RUNoNjViVHRPM0txUm00M0ZrQnAvRHRYVWIzSWNPcStXOWFpZWFxamtOL1Z3V0JqY3VYWVJPR1Rrc0IwR3FsU0FRY3RSZzlEMUI1YzVkY0I4OHJNcTFsRWhDaXVBS0Rac3p6d2JFWkV1enBpOVpnZ3IzM0Z6bWxsSXB1RHdLWGtoS0pqRHBhWDZOSVAxaUVGVjM3MEczejZXWENGWnJNdnNobmxuUWRoM0Q3NlB3THF3akxEdDNCdFh5cW1ublhIQndOZzJOQTYvSDRWdFdqL3NYMTZ0VlR3VTlOckFWZURKSzRCR3luUGp5TllWS1Y0WE1XTU52ZFQramM4dGkvUFY3Rlp4VXQrZHZ3emg1N1NWR1A4VnpKRVk2UTRhRGNNWXNMTi95Qmw3cDRESzNzOVVWR0xZY0dIUThiQ0NXTkJFbjljelRjZUZBTTFiK1UydlpWVzRkcTd4MXVOelpnbCtKT0piSVdMNmZ3aW1LdGVPN2VrTnFCejRtK0ordGdkZWZaUmtjbEUyV0FneEVFMm5zMzdRSURYVS9ZYnI4VWx1SnpzMkxMUUwyVFJpbVhOSHdvSDlNdVRWeGlhd0xGUnFONWgwaTNZTk1GdWxvRnMyTFBOYTNYa3orL2JNYWtYZ2FVOHYybVlVanFSeUJvekJFbXpiT0xxNDVUc3prTHJ3MVRCQmlvM3F1UzY0WGdnKyttMFFwZWZSc3ZPaDhVOE04WllaekJMN2w5ZmJVdEl6Mm4rdkgyT2ZFREpBdlZJWWRaeDZqbUhnWDFpb3p5QVFCdHRwOWpTakc4R280Z25XN2U5RGI5eEZwT3Z5NGtjSEQ0RGphOXdVdzhqNWVsR0FLQzExODBmaVFKL2h0emZZN0NQUjl5SDMvNVlsOTJScnIzWGh6YTZPYS9NTmVrci85bVVDdmlGWHFJa0dhSkRYS1VJN2hXUE5wTU5janByanRCc05kU3FTT0h4UHhNZ21Ta2lCMTRsaCt4MnNxM0tEZC9vUWlVYnRJbGcvTzBsRzhpa0w0bFljWkRJckUzd3RtRUNYemxOZU10V3VFU2FYTkUzOCtackdXeWV6YzJhd2JucVhPWnQ3dWhuZzZBREVTc3AycWErQm9iWVZ6ZlJ1TnM3Zk1VanZoTTdrcXZsOTZ4QS84dStpUUFCTjVnRU55emk4Lzg1THlEVjlWdlduSVV2SllBQUFBQUVsRlRrU3VRbUNDXCIsIExDID0gXCJkYXRhOmltYWdlL3BuZztiYXNlNjQsaVZCT1J3MEtHZ29BQUFBTlNVaEVVZ0FBQUJnQUFBQVlDQVlBQUFEZ2R6MzRBQUFBQ1hCSVdYTUFBQXNUQUFBTEV3RUFtcHdZQUFBQUFYTlNSMElBcnM0YzZRQUFBQVJuUVUxQkFBQ3hqd3Y4WVFVQUFBTVRTVVJCVkhnQnJWWlBTSlJCRlAvTjUyNWxHYnVhMnFIVTdkQkZNd2d4VUxJSU9pUUlSYmNPUVZKMHFFTWIyY1VPclIwQ0k2Z09CWUdnZElrdVFpVG9UVlBhRGtHV3RWRkV1R29kS3RkZHQ5VmFkSGQ2YjNibTgwTlgyVFdmUE9mTm4vZjd6WHN6MzVzRjFoQXBwWmYwQnVrZzZiaGNrcWdlODVQNmtLK3drd2JJVmJwWEl4Slp3QzlURXlEMWNuOW01Q1YrUEI5QVpDU0loZGxadGFhd3NnS2UvZnV3czZVWkpZY2JqV3VNdEVNSWNXOVZBazZIQmxmQVgyL2Z4NS9KYjloY1hnYTMxd3RYMFZhMWJqRXhqOVJjQW5QaFNmWkMzZFBIY250dHRjRUtFRW5IQ2dLOWM4WCs1ZFlkVER6c1FzbkJPbGh1dDJPaDFKWlVGdHVMOC9PSWh6Nmg0dHdaN0wxK3pjQmRNWkVJazNOcVJqa3RERDcxcUp0U1VLTW14Ykl3QmYwWmVPblEySnQzcUx4NDNwQnd1ZzRRU2RnUWRGTnpOajcyQWNHR1kvRFVWc05kdEMwRFR0NjBrQmRCQ0kybW1neVIxUEVzeEg4ai92RXo2dnQ3emJrTWtkOVJvWGMvemlQRDFmVklUazRSUVkzYXFWQXdJaE9CQ1VQYVNiWE50QjZlZlIrQzkxQWo2Z2Q2emFKaUYvMDdtVG5VSVA0U2VBSFpxWmtvQ3JZVTJqbGZnaEw2Q0d3V081SlVNZ21MK2xIQ21Sa09taWo4VEhDQ3JWOTkvV3FCeFFjM0hZRW9LVFo3WDF1SVRGTHVVckdZOHBmazhyTnZ3QkFjNFJSRitYQWprUWhTcVJSY0xoY3N5MUo1VjduUFFRZ0Q2WFJhS1dPd2YybHBLVStGT1FMMVFmRWtUeXgzekZYTWhsZ2RmajdMdWNEWnJrZXlSYzBFWVdYb3RHeUVjSnExeEZ5YXdEZmRlUmZmSDNUcGcxNmZwSlZLN0xwMEFjV2ROM25vTFdPOVlLdU1DaGNjWDJpKzR2UXBiemx1ekdkOGkvaVErU1podFBrVTRpT3ZWcFNIWEFsWU4xWHRSa1BvdFJuZVkxSGV1VzRNcVY1NzI3cDI3eVNwZmRKanVqMWNpMHk2VzBsajNxWkcrTnF2MnJ2SkI1aTFpbnlMcUVoQ3Z3MXNLQUptTWdNK2lxSXFEeEluT0dkQVM0ZkdYUEhnQktqaFJ3ZUpzUkJDcDF1Um5KaXk1OFV5WUJaUFV3T0J0NEdqZDRBSHN2a1lFcjhtVVY5NGpJcFhoR3BMZ2tvNUYwTVdsOGVqQUhmUWJYRUFaMzB5czRlZGVmUjdaTzR5S1AvajE0VmZBMFFkZ09ONkxLQ3YrYXJ5RDd5YjJkK0JsR0c4QUFBQUFFbEZUa1N1UW1DQ1wiLCB2QyA9IFwiZGF0YTppbWFnZS9wbmc7YmFzZTY0LGlWQk9SdzBLR2dvQUFBQU5TVWhFVWdBQUFCZ0FBQUFZQ0FZQUFBRGdkejM0QUFBQUNYQklXWE1BQUFzVEFBQUxFd0VBbXB3WUFBQUFBWE5TUjBJQXJzNGM2UUFBQUFSblFVMUJBQUN4and2OFlRVUFBQVBSU1VSQlZIZ0JwVlpiYTFSWEZQNzJPWE1tTTA3aVpGSVRxZ1ZKU3ltV21kQ0tGb3RLMjRBdlRkSGFYMUR6VXZyV0ZGcnNXOGNISDZJZ2d1S0RlRU1SZkZRZm9pOGFCZU9EQ0VwTUpJaWFtSXNKUnMxdE1qbmp1V3pYMm5QMnVNMk5pQitzT2Z2c3M5ZjNyYjNXdmd5d0RLU1V0V1QvazNXUzljdDNtSWo2MnNnYThhRmdwNGhncFRpOWxKQlloUHd2ZXVUSmF2bmQ3N3FGTjFjNjFGTk9UYWt4MXZyMXNITk5pTGUwSUxaMXUzYWRKTnNuaERpOHBBQ25JeUpYaE83aFE1QkRRN0RxNnlFeXRSQ3JVc3BGemhiSVpoRU9QaU1mSUhYMkhPeHNrNmJKazhpK0JRSlI1RXJkUGRpTzBvbmpjRFp0aHVVNEVNUkNUbEJzeWtWQ3FsOGdMTTdCNzN1SStPK3RTUHk3VjlQOXJXY2lkTTdwY1kvVHd1VGVxWk53Y2puMVVSQ0xKY3hvUkVSZjF1TjJTT0xlL1h0dy92aFRpM0M2TnBMSWdCWTRUWTg5Zm0rUExEYi9JSnhzRm5hcUdsWkVLalNiRUlEUnJzeUMzb09aYVpwSkg1SVhMK3U2M0NDQlpoRkYzODg5WThQRGtMNlBSRElKeTdKVVdyUXg3cnkraGcwMUc3SGFxVFByaGpBTWxaWGNPZGhWVmFqL2RLMytuSW5SejI1dWxVb2xoRVJxRTdta3ZNTzJ5eEZIa1Q0cDlPRDg2RkdzSHM4Z2wvNGVPOWZ0UWRKT0tRRTFJeEt3T0ZVVUlITlZrUkNoamJQd3F5cXM2NnFvYlNJMm8yYUNnaitOanRGenlEZ05tUFZuOE1JZHhvdzNVU1kzd1A1c3pCWGhSeGI0VmkxTFV0WUROREdqNEUvaDFOUDlHSGVmWTd3MEFsLzZHSmp0UTlmTHE1Z1BEb3I5UGMvVFhZMmNJcldoZ2lDb2tKdlJDeW53Sm5ReE10ZXZ5R1BDd2FwWU5hNk9ucWZpQyt4YTExcngwV2JNck5FeTFjMm5Fa0NJRytNWGFUWFpDSWk4U09rSnBJZUNONG1hV0MycXJNU0NHWmorS20xa0E5elF1VGZ4cWpTRzN1bTdlRng0Z0pTZFJrUGlNMVVEWHZ0Q1dCaHpoL0NzMklmNWlNVml1amxaRVlqSDR3c0dQaWs4eEJmVlgyUDdtbCtRVFg5SHhSMVIvZjl0T0liTm1XYkVhUWFQWnJxWEU3alByWnRrUDdHQVVYMkZMWi9zd0Jic1VPMExRMGVRc0ZMd3BJdTF5VVo4VmFQV2hrcmJmRVJMbEhHSk54b1hlWUxmcHVpMDFNWFc2ZkxDRWg0VnVsVnh2Nnh1d3UyWEhYQ0RJcmF0YWFGaTExUkk5WVpqMU5WVk51TG4rcWpvNUZuSTIxMElmdHYxL2hHeFFvU1IyZGR2UW1SejNIV0dnbXpWcTRqWDJxVFl1ZzBXSFZZU0h3WTkzdnBucnlaWGQ4UDdnOHJYbjBKd3NGMEdEWFV5akV3dVkveWR4d1lIMnMwYnJtM3hTS1RNVjRiMGRNdGcwemNMaEVMREZQSHVuVExzdW1XUzUwM094YTVNVnVlYlRlMXdyZ3ZveWtUdkE4akJ3YkpET2czd2tmeHpDeml0RVJhOU1wZWFDVi82WitUSzBTay80dDlGVzBRd1lSRDJSMzM1YUprdmliZWxGNVNGbkw3c2pnQUFBQUJKUlU1RXJrSmdnZz09XCIsIHFDID0gXCJkYXRhOmltYWdlL3BuZztiYXNlNjQsaVZCT1J3MEtHZ29BQUFBTlNVaEVVZ0FBQUJnQUFBQVlDQVlBQUFEZ2R6MzRBQUFBQ1hCSVdYTUFBQXNUQUFBTEV3RUFtcHdZQUFBQUFYTlNSMElBcnM0YzZRQUFBQVJuUVUxQkFBQ3hqd3Y4WVFVQUFBT25TVVJCVkhnQnBWWkxUSk5aRlA1dVc5dXBZNHRNaHdyT2hwbXhKTXhnTXc5bEhwbWt6Q1JrTWh1ZHpHS1N5VWlpaVkrZGdvbExZNGtzV0NoeFFhSlJvOGFGaVdra01XNGdRS2d1MU1TZ2lNcWlhc0g0Q0lnRTBDS2x0Rnp2T2IyMy9KYldRUHlTMDNNZjUzN2Z1ZWYrLzM4TGZBQlN5clhLRGluclV6WXNGekdweHhxVlZXS2xvRVdhWUxrNFcweElGQ0RmcDF4WTJWcnFYKzEvZ2N2Uk9LNHBQL1VteFRHVjZ6MElWdm13dGU0cmhINWNiNVpPS1dzV1Fod3JLa0RsME9STTNIcW1IMDlHRS9CL3RocWxYaGZXdUZkeFhPTHRQR1ptVXhoKy9ocFM5VHVPL01XQ0dtRWwwcnhFUUdmTzZvZFAza0w3eGZ2NGFlTTZPQngyRGhPQ1lwRHoyY1VTYjVOcDNIdjBDbnYrK1FZSGQyODJkRTFtSjhMVVhMazdWSmJEcDI3aGVHUklaZlM1bmhZNlN1VFgwalRZK29kZVl1OS9OVGk0YTdNcDEvZEtaTVFJbkZWdSs5M1lCRGI5SDhIR1FCbldySFptMDgzbHl2dlFsTklpSjJrOTNpU1NlUEI0QWowbnRwaHppU3FCMzRYT2ZwaEdObXk1d0RVUEtnRTFtYVVSaG5hUmZPbE9KUHZCaCtNSS9WRE9JaHFsRHZYek43WG01dVp3NWVodmFZZmREcGRybGJEYkhaSkVoRmpNdGFQakVudytIMEtoT2t2MldaSE1Ra1lra3ltWnlXU0l5K0Z5dVNpZ2tRUzJVaXVaVEtMVTQzUW93SzVFeUF4SXBLZW5COGdrOFdyc0daNk94RkJkWGMybDBTWEd3b0tBMnltUVRxZVpTd3VFYk9ybk8yclJoTTFtWStQeVNHbXBndVQ1ZUR5T1dDeUdtWm1aOSthdGlkRDYrZmw1TTFSSlo4Q1I0K1BqdVFBallrVXFsVUl3R0VSNWVUbWkwZWdTOHV3dUZrQWxJcFNWbGJHM1dkV3RQaDl0YlcwWUhSM0Z3TUFBMnR2YkM4YmtuNWtSR09GR2dhd05JcEVJV2x0YmMvMldsaGIwOXZhaUdPZ2NOYWFvUkgycVVaZElKUGhKTWtKR2JIcDZHclcxdGFpdnIwZG5aeWZjYmpjcUtpcDRub1M5WGkvSFVZbklxRVIwd0I2UGg0YWpKSFdWQkp4T0o1OStQa3BLU3REVjFZWHU3bTRFQWdFK2JML2ZqNXFhbWh4NVB2UVRSTGhNTzZDdjVpVDFEdHo0RjRPVE43TXZzTURLa0gzWHNPNlRMM0Qranh0bTlFdWIyaXA5TjZMVWE2aHE0aWlKbGNPOGNJYzJuVFpENStoYlpKNmlIY3FtZ3I1ZjBCQm9NdCt2RldWUDJLYldmdTM5bHBwOE4xQ0RCVWpKREd5cjJzOGljamtpaTU4aEptOVFheldhTmVlU0N5ZXNIRjA2aUw4ZVF2ajJUb3pOUGl0NkhFVE11OTdRcFB6UFZ2S3c2UlM2TWh1MUNGK1pneE0zY2YxbEZ3dU96VDdsbUU4ZEpVejRxLzlQSzNIQks3TklabnpwbjVQTFI1LzhpSDhYalpwZzBrSTRyTWZDK2pFdmluY0Z4U21iKzJXZ09RQUFBQUJKUlU1RXJrSmdnZz09XCIsIHlDID0gXCJkYXRhOmltYWdlL3BuZztiYXNlNjQsaVZCT1J3MEtHZ29BQUFBTlNVaEVVZ0FBQUJnQUFBQVlDQVlBQUFEZ2R6MzRBQUFBQ1hCSVdYTUFBQXNUQUFBTEV3RUFtcHdZQUFBQUFYTlNSMElBcnM0YzZRQUFBQVJuUVUxQkFBQ3hqd3Y4WVFVQUFBUHFTVVJCVkhnQnBWWmRiRlJGRlA3bTNydmIzYkw5Z1VCTi9HbnBneTlvRTQyTkQ5UUUrZ0NGOG9BL0NZa3hSdFFYRTJOYzR0K0xDWXNZNDVQV1NOSkVqZTJUeHZoUUlSSGtRYUFrL2lRTkFTdVFCc1d5VlF0S1NoZjJicnZkbmJuRE9YUG5icGQwbDdSd2tyTno3OXlaNzV2dm5ETXpDOXpHdE5hdDVIdkpqNU5QNmtXYnRYMXA4dlZZcWZFa0M3QmNHNnBISkdxQXYwNU5ocnlWMzBkUFRlUGdpYjl3a3Rxdi8veFV0c2tibnRQZUR2ZmhMc1Q3KytGdGZDS2FtaVBmSjRRWXFFdkE0YkRnQnZqRG9WUElYdmJSdHFZUnE1c2JNSmo4TldoVzg0NmVLd0IrQVdvcWl5Q1JRT3JBSUx5T2pnZ21ReVQ3bGhEWWxSdjIvWitONGNBM1o5SGJmUjlLU3B0aGdrWis4a2EzYWxrVmMybHNOQWRCRUtCY0xpT1pUS0twcVNtQzJ4TXBFVkhNcVRuTllkbi8rUmdHdnoyUHh6YTA0Ym0rVGd4L1AybEhDWHo1ZEhOcGpTZGRDdy9tTVNUa3BWeE9OeWFUVHJKdm0yUEQ5U2lSWFBJc0k0ZW05YmNMTS9qZ2k5TjQrNFV1ZEc5WWg4Y2ZXb3VpMUJpL2NCMWpFek9JRDN6a3hsWEJOY2drU1JzYUdBSXZmd055WWdMeXUwT2NGODdmRUhtdloxZS9tMW1lZWZNb0NJL0FjbmgreDROSU5jWUlRZURrbWYrTkFybDlCMVJNaFlwMENNNi9UTUJLMVBRMDVxWXZvemxjOUdZdWMxYndaSlRVN0JXZm5oeGMvTnZIM0lMRVYwZXpLQk5qb2FqTURMbnpLY2pXaHVxaXFMUktLUVJTb2tTZUtKVVFqOGY1VTVvSmR2TFR3ZEZzbUJLU25wK1hlUGJkWCtCVDIzbnZLc3dWcFZtdTgvNTdRWU5iMHJpMThzSlE1Zk9RbEd4RlNRKzJiSFh3MHN1Y2kwMU04QWdQSFA5anhxeWUvV3B1QVRsZklwbHdjZTdpOVVvb3ZHTS9Da2ZsUFdoZHpRRE1GMm4xWlJNNXdZVC9YUUVSOE5mMVFsdWQ0eFAvbXZHdTYwSTREZ2tKSzFoVTdaUU9PWXNsWnVOdmtxMENvNERmVjNkMW1jOVJGYUhkTFJoUUpuQVlWZFRBaXNkUXp3UVhWcURKVlpSOTIwK0hHRXRaNk4wRTUveFp1R0VtYXVIZjFxS1M1WDJwZTNvUUh6bkUzVGxXY0lrSnhLNWRDQTZuVEVqRVN0R3RrUUJENFBadGk3ck9zSUlNUGV5VlZGNis3NGM1RUtLU2cyVXJpUFlDbFdzcWxZTG5tZWp2WVFMZWRTWjc4eU1qRUJRbTV3NGtSQVRCL1ErZ2NmZUxVWGVuUnl2TjBZY1Q5TEk1Y1U4YjFDc0RwbGhYbW9mQXVudHNOT29hNXJOb3lXRW5memlDMHV3MVV1RkVaOXd5VnMveER4QmJ1dzZ4TFZ1NXEzTFlWUi9YYVdvKzV1ZGlzV2lPNE1XOUlPb0FMeDRWc1ZnTUNib2JyTjE2WEZkTnlDQThXYUducHFCZWV4WGluNm02SWd6OHhoNkl0OTZCMDE2NWNQaFd5MFF2dGE3TXRDVXhWNmIrK1NmZ3lHSGczTytHMUV4b2FTRmd1aXEzOTBNUWdiV2FWeWJxU09kTGYxZ3YzNDdydS9oM2tiWUFzMVdBazdZdlk4dThydDBFQzhweFk1LzUyWFFBQUFBQVNVVk9SSzVDWUlJPVwiLCB3QyA9IFwiZGF0YTppbWFnZS9wbmc7YmFzZTY0LGlWQk9SdzBLR2dvQUFBQU5TVWhFVWdBQUFCZ0FBQUFZQ0FZQUFBRGdkejM0QUFBQUNYQklXWE1BQUFzVEFBQUxFd0VBbXB3WUFBQUFBWE5TUjBJQXJzNGM2UUFBQUFSblFVMUJBQUN4and2OFlRVUFBQU5hU1VSQlZIZ0JwVlpMVDFOUkVQNXU2UlY1QkFvR2wwMHgxZzJ0WURRQmlhWm9TRXhJaUs1a0ExRVNJKzRzSnNRbFpXbE1ERHNUbzBMMER3Z0xHOE9pTEh5d2tvZUdRRWhzRlRjSWhWSW9yWmIyT0hNNEJ5N1NJdWdrYzgvYzA1bnZtNWw3SGdYMkVTR0VnN1NYTkVRYUZqdXlvdWI4cEM0Y1ZqaElBUnhVQnZJUkdUbkE3OUlRSUhYdysrYTd0L2dWZkMxSHNib3FmV3hPSndvOFhoeHBhWUc5OFlJT2paSDJHWWJSbjVlQTI2SEFKV0NxL3hIRS9EeHNWVlV3S2h5d0ZaZklrR3hpSFNLUlFQYmJWNG9CU2w2OFJFR05WOE1FaUtSdkQ0SEtYTEtuSGo3QXo2ZFBZSjQ5QjV0cHdpQVVDb0pFa3lFQ1FqNkI3RVlTbXpQVE9IS2pFMGQ3N211NGJsMkpvWHRPd3ppM2hjSFR6NS9COUhqa2p3YWgyQXhyTm9hQzMrSmpPMHZrNllseG1MZnZhQkp1MXhraWlXaUNBUnB1Wmo1L1F1S3lEMlpORFFwS1NtRlRvSVpHTXd6QVltOVhRZStadFRoVk1vT2lWOFA2dTR3U3dTVkRaUi9tbWVycWFrUWlFZFRXMXVKUDRSWUpJYkNmVEU1T29xbXBDYUZRU0U5VjJPbHhUZEtOamtwd2xtZzBpcUtpb2wzQlFuOEhaV3RTTGFsVUNocUhsWWxJL055RnEyd05EUTF0T3k4dUxpSkJxOFNxZHJzZGJXMXRhR2hvUUdWbEpUWTJOdVQ4K3ZxNkhKZVdscmJqTFZnK3FGMHBpRkczVktwcG1xS3NyRXc0SEE3aDlYckZ5TWlJOEhnODhyMjh2Rno0ZkQ1cHN3LzdXbVByNnVyMEJneHpCWEpEaGNQaFhTMUpwOU9JeCtOWVcxdERmWDA5aG9lSE1UczdLN010TFMxRlYxY1hnc0dncklaOXJSS0x4YlRwc3VFdmtzbGtVRmhZaUd3Mks0Rll1ZmZMeTh0SUpwT2dDdllIMEljWWwyVXQwNnJjRXNwV09KM083VG0zMjUzWG45dXREMFd1SU1KRTZxdm5sRlU2ZzdnbHpjM05hRzF0UlhGeE1lYm01dkw2VTdMYW5PQUtBa3hGYXpkdlJvZFZ4bExpMTJlK3lMV1Mva1ZkTHBmMUdIZnBveUxFWFpxS2ZrRFAySFY1K0JnR0RpVWl1MFh4K0dJUUo4cHFlR3FRRmtPblhrV2RwTEhUeDg2anc5MjlrOCtCMGJlR2RyZGZnOHU3Z1ExSndLZWVubWcvZFUrU2lJT1FLQi8yYmFlWURvcFYwcWN3OTF3NEFScDYyZjRTbjBiZzR5MHNKTDhqWDdjWVdGWjlzcHZHQml0NFFML2t1akw5aWtUdThLbm9HTjcvZUNNSkY1THowcWZFWGk0Qkc0OWZzUUxudkRMelpDWXYvVUZ4Y0FtSi8vaDM0VmNBS3hiQXNKcmpQZVRZRCtNM1FobVVZcGpPNnNFQUFBQUFTVVZPUks1Q1lJST1cIiwgeEMgPSBcImRhdGE6aW1hZ2UvcG5nO2Jhc2U2NCxpVkJPUncwS0dnb0FBQUFOU1VoRVVnQUFBQmdBQUFBWUNBWUFBQURnZHozNEFBQUFDWEJJV1hNQUFBc1RBQUFMRXdFQW1wd1lBQUFBQVhOU1IwSUFyczRjNlFBQUFBUm5RVTFCQUFDeGp3djhZUVVBQUFPRlNVUkJWSGdCclZaTFNGUlJHUDd1SGUwOWFaWkZTYUV1Q25vYVZsQUcxYTdzWGJTSU5yV29kbVZRdElvbTNHaTFDR29SQ1duVUpvSm9nZ3dwMEpGc281UHZoRjZPbGcrMHlXbWNjUjUzN2oyZC84dzVPdUlqTFgvNDczbmM4My9mZi83Ly9QZGNZQkpoaktWeXZjNjFrbXM3RzVFQk9WZkFOUlBURlRLU0FGT1Ywb21JdEhIQUwvTEd3VFdWeGk1M041eFYzMUROVzk5Z1ZLekpYR0hIeHRXTGNYaDNObmJscmxDbVBxNDNORTI3TXlFQmhVT0NDK0NpaDI1MDl2eEMrdUpVTEZvNEd3dm1Kb3QxZ1NFRHdWQVU3VjErTUQ1K2ZudWZJSlRpNENRM3hoQkl6d1Y3NFlOYTNIdmFnbTBibGlGbldRTmF2VnVnYWJRR3cyM2NtR0VvSEVQemw1ODRmMnd0cnAzYnF1QXVxWjFvS3VhOHFhZXdGSmJVNGtXRkM4ZTM5YUxmUHg4WjloNEV0UXlrMlEyOGFkdUVLTE1yajVSclF0MGYrM0RoNUhwY083dFZoV3N6Si9Fb2dsTGVuRzc4NU1XV1U4OVFmS0lTcC9ZeWVMb01kUFhHc0dDZWpuVnJacUhvY1RvYS9RYzRIRXVJTFNON0RBYkNhUDNxeGR2N2gxUmVxampCSGwxNmY1cG1qbCt1NEh2U2taMWg0YmMvQUNNYXhQSWxVY3hLRGlNY0dzTDJ6UnFDUENSRFlaTzNVa09tR050c1NjSzJzS1JPTWUrbVk4NW5jVVFsdGFNM3dIczYycnhaMkxueEE5TFRORVFqRmhhbDZEeXhFWlM3bHlQRXdWaUM5eXBjRVNNbWJGM3VYb0VsZDFGQUJJZXA1M1IxeEZQQ3MzajNaU2FjcnpvUjlQVWhFbzBISkNNckcrM0dHbzRWRTRsT09CeWlGVWVZNzRCSW5WVWVSYkNMQ0hLbzEvVFpLendnN1EvTWd5OXBQK2JhYlh5a0NUOEgvUFNNaWRpUDdDQk9FSXFZTUdJbTFObXFydTlScnpPSlFCU1VwenN3cWlxTW1BVWpZTUdtYTlEMU1mVVlQenNXZzhYWXlJR1NFVkFGU1FRYWszdU01T1pBLy9FZHR2aXlzU1grRjJGU1RmNHdWNjdFSEhlRG1LZVllRVJ2WVFwbVN2UlZxMVRYTjB4Z3k4dkRUSW0yYnIzcU5oQ0JTN0RtNTJPbUpHa0V5MGs1b0NRUDBDaDI5QkMwOXpVaWJ2K1NBNHVVeHorNXJrRk5aK204bk9tN1VVVWoyNVdydzhsaW1KNG9tNlJIVDlSVUdYMkxkRGs0dzlXbjdjaURMa21tQzA2aVg3NnE0aS91aHRHTDR0ZWZFUE5XTVRPWHBqRkxLcHRFNlQydE5XOFdKOTV3QmVON3dwaGplRWxMRXpOek40MGhzaEpVQUI4NXlLeWFkNG5namtUTThhNU1ZcWViVFZRNDQwbkg2M0tndFJtc3N6TnVrTUpyWnNkT1lGOCtLS3hTeHIweUo5b0pYZnBsYk9wU3lmN2o3NkpBQWd3a0FMYkxPWWM4NWhQS0g3eldkWWs3ZHJMWUFBQUFBRWxGVGtTdVFtQ0NcIiwgV0MgPSBcImRhdGE6aW1hZ2UvcG5nO2Jhc2U2NCxpVkJPUncwS0dnb0FBQUFOU1VoRVVnQUFBQmdBQUFBWUNBWUFBQURnZHozNEFBQUFDWEJJV1hNQUFBc1RBQUFMRXdFQW1wd1lBQUFBQVhOU1IwSUFyczRjNlFBQUFBUm5RVTFCQUFDeGp3djhZUVVBQUFORlNVUkJWSGdCclZaTFNCVlJHUDdPUERUVDhwWVJ1UkI2a0lzczdFV0VCYm1LQ2l5bFZjczJMdHBrVUxqc3VyUUh0QXRkcEVHTHFFVUVZVXNOc2lLVXhNcWdCNXBCYWxoNjgrWjl6Y3pwLytlY3VYZlVxNmoxRC8rZGM4NzgvL2Y5anpOekxyQ0VTQ2tqcEZkSnUwbUhaVTZtOUZvVDZWYXNWTmhKQXl4WE9oWWpFbm5BTDlJdFNocmh1UlB2UTNxNkI1bDRQNlFiOTIzTWduS1lSWlVvaU5UQ0tqa1l1RTZUdGdnaGJpMUt3T1hRNEFUY2orVDRIWGlaTVJoV0dReDdIWVN4VnRtNXMvQTgwdFIzOWtISjlwcytvWllva2JRc0lOQ1IrK3lKc1hha0orOVRkSHRnR2paWlNaQVRHV1d0NlZKenowM0FTWHlHdmZFc2lzb2JBNE5MUVNZaXFEbmQzbkJaa3VNRS92TWhyTFdWTUF3QlE0T0xjRWhTY1hIMDBpTVNtbVQrRE1IZWRBNUZXeHFEY3UwanZ4RkR1M0ZwSW03aW8weE50TU1xM0FSVHBHQWlDUU1wclRRV1NYVVAxb1ZXbXR1Rm01RWhYeTZ0N2wrSEg0K09mcGduTXgvcUlOeHgyTVVVdmNoRnI4TG5MR1N1U2dneVVWbTRsSVl6K3drbzJvL2lIVzJCeFFhTGZ1cDVOQm5yOHdaaVh6M0RCTlo0UDRSbHJxR21FcXpJdHlka2FHT29tamxPV2lZVEtianhsNmdxZTIyVlJ3N3g0eVltT01PakI2TlBqRWNUVXdZVDJOWXMxaGRzbUFjZWFrQWVvcGwwRE1sTWduWVkwRkRjaFF1SzRCZ1Q3T1hSbDlpUUh6R2pPaktOMzVsZktLUXM1b0tKdVR4UUpVclJUbkk5UjVYVGtCaWNmQlh3YnJWMFF6Q1IrS1ljTllZak01UjJodnBnVWhORk5nT3BZbEE3aUM5cVFMWXoyai91eE9ZUTVCN21HWHVVczRkNUlyRnM0YUtNOEtERUxsMzQzVmlGTUVaNWNVVXduYzRTVkpjZHh2K1M3ZXQzQmNNQkx0RXowdG9HK3poMnR0MTJES0Zxdk5KczFKdk5KWldvdm5HQ0EyZDl6QzhhTjNtS2paeUcweEF2ZXYwbnF5SGdYbmtWRmJEN0JvTGxiZlRDQ3Y1dTlQRE12TktzSXNHSytwakxnTlM2ZXk5WTZneC9pODZUVG91YUl6QTB5VXJCV1l6THpSQlZ1M25vbncxempkVHg1NHQ3dlZXNm16ZEtUNnRjUXZrNTI3clhXc01uWEZQK1NLU01aazNlRFVyM1FQVUNJaStrUG5COW5mUjZuNGZCbzJITWZFY21zL3VmYjM5T1RjZlRMdUQ5VzhqUlVlVlFXZ3JVSEFWT25nS1hWVXZlSTNPeFRQalE3NVRMbDI3NUQvOHVtalRBVkFod1dLOUY5VFpmVlA0Q0tlZEV4aFB6TEhFQUFBQUFTVVZPUks1Q1lJST1cIiwgUkMgPSBcImRhdGE6aW1hZ2UvcG5nO2Jhc2U2NCxpVkJPUncwS0dnb0FBQUFOU1VoRVVnQUFBQmdBQUFBWUNBWUFBQURnZHozNEFBQUFDWEJJV1hNQUFBc1RBQUFMRXdFQW1wd1lBQUFBQVhOU1IwSUFyczRjNlFBQUFBUm5RVTFCQUFDeGp3djhZUVVBQUFNalNVUkJWSGdCclZZN1QxUkJGUDdtUGhZQmhhVUFFL0dCdHV3YURGb29HdEdTeWg0U3BWRTdzVENXTEhiR3hGQllHUldpUDBEVVJFc3dhaXdoOGdnVml4QUxhSGpJQXJyM3puak9NSE9kOEJLUXN6bjN6SjJaODMzbm5EdVBCYllScFZTYXRKTzBuelN2L3NxYzZlc2dyY051aFowTXdFNmxaeXNpc1FuNEhUSTUwalMvUjE4KzQvZUg5OXFxaFFVOXh6dCtISDRtaTFSTEM0SUxGNjNyUEdtWEVLSjdTd0l1aHdIWGdLdmRqNkdtcCtGVlYwTlVwZUdWbFdzWFdWaUNLaFFncDc2VEQxRCs4aFg4K3F5RnlSRkoxd1lDRTdsbVgzMzBFTCtlUFVYWWVCWmVHRUlRQ2psQm8ya1hCYVdmZ0Z4ZVFUUStodFQxZGh5NGQ5L0MzYldaQ0Z0ek1vTmNGZ1l2dm5pT01KUFJnNEpRUE9GR0l3ejhHaCszSlpFWGh3WVIzcnh0U2JoY1o0aGswaEwwa0xrUmp3eWpjUFV5d3ZwNitPVUg0UmxRWWRHRUFKeDJrZ1c5eHo4WEtaTnhsUGE5dGQ5bGdBaXVDQk45bm51V0doc2dwcWVJSUVOUmk0UUFUZ1pLSlVXbG56QXRJS2FCYUhRRWFHcEMyZXQzZGxKVlFJOXIrcU9PamNxNHRsYjZSNDlCSGo0c1FMWFhGUmNHUWJqclFjRlVTWlBvTWtXUmtoVVZpR09KWWo0ZmhDZFA4bkFIWjlCUGplWUZXb0lyS3lzSWdnQys3MnROVmdLWHczeG9hMDFwRXl1bEpQQVlVUlNodExRVWxaV1Z1a3hjaFFhZEFRMTRucWZWQWlYeE9rRFd1dU51SU94ZkxCWnRWeDJYU0c4b2pvQUhYZGtNWkN0aGNLdU9YNTNuVG5EdFhzUVN1TUlFazdwaFNyTWZ3dC9SeUh4Q2tFcWxzRi9pRUF4eDZ5TnA4Nklzd1pQQk9QSThIOExiUXlhS041eUVpajNjT25mQU83UlduVGRNd0dkRzU1R0tFSkVJZ3VGWnN3eDNXeTY5c2dScXlqeWNTSWUydDQ4MnJPQnpZNERmMnJJbGF4T1RRMkEzQ1NqdDIzbXB6SGIxOGxsa1YxRTc2ZnpwbWdDdDJaUTl4WFlWUFd0cnBnU25xdlFHMVhjRE56UUJNOW1PTnByVW1rblJmR2tPSHZWUGNKN0xQbTNaWktGMEdjd05GMDZPREY4Nm1KaVhlUEJwRlRQTGZOcllhV0lkb1VLMjJpZndFS2RyZkJjOEI4ZGpYVUNxdzVEb0hmNXROc2JYSHpFbTVpUm1DbXZnQnluUUxBR2VyL1ZkNEUydnpDMnkxcGQrcjlxNTlLdi8rSGZSWVFEbUhNQzg2Y3VScHJmRCtBTjZvZm83SzdueU9RQUFBQUJKUlU1RXJrSmdnZz09XCIsIEJDID0gXCJkYXRhOmltYWdlL3BuZztiYXNlNjQsaVZCT1J3MEtHZ29BQUFBTlNVaEVVZ0FBQUJnQUFBQVlDQVlBQUFEZ2R6MzRBQUFBQ1hCSVdYTUFBQXNUQUFBTEV3RUFtcHdZQUFBQUFYTlNSMElBcnM0YzZRQUFBQVJuUVUxQkFBQ3hqd3Y4WVFVQUFBVU5TVVJCVkhnQnBWWnJiRlJGRlA1bTdqN2JYYllzcFk5RmFFc3BVQ3B2TmFDaWFJeUJTSldROEFOampHSUloVWpFeFBoRFkwcE5BQlVOWW1KRWpJTDRpTkZnTkpCUWpSSFUyQVR4QVlUeWFDMWRXMnBiMnU1dWQ3dDc5M1h2Y2VidXZXVkxDc0V3emJrN3IvTjlaODQ1TTZmQURSb1JGUWxwRkhKTVNDZGRiV0Z6YnF1UVN2emZKcFZNZ0p0dCs2OUh4TVlCZjA3OGJCTlNKTWVoWDM1Ri8rRm1GTmRmaE4ydjV2Wmt5dEQzZVJsS1Y2MkUvNzY3TGRXSWtDYkcyTnY1ZUxacndCdE5jQU80NDQwOVVMc3V3MWt5R2I1RlU4aFQ0VGNNaXJWR01ITDJIUHFQTkVzdExQN2lZM2puMVVtRGRnc01ueUJwc2pENU9KYWpmY2ViK0hQZE0xRHNka3lZUFJOTy8wUmsrM1d4T1dsSXFqTUx1OWVEb3JsMThGUlB4OG5WNjlDK2ZaY0Z0VTNHWmd5QjZUOERYTzNkUjVuQkwybml3bmxBSmdOS0pBQWg2b1VvRkphRXdwTklkc1RFbkdxc1NRQmYzV3pFejM5R2F0OCtDN2ZSaW9sMUF1bWFvc1NsOHpSeTVqMVd1Ym1hbFR5c2dGUUpJa1JOSXRFV1kzTE1zaXJGVDBYRmZESzNKbVRTUGFCWmpiTlk0dSs5aUowOVFXYjg5aHN4TUptZWtvUGZWejNKa0JsQXpjdFZLS3N2QU05dzlIMFZoNVVPYWx1VW1JTXhQYUVhdnBkSVpXczlLRjFqWjhOblU5VDYvQlhtcm42ZDNkbjh0ZFJZTHROY0JubDFMcWd0U0haMVF4SDk0TTRnRXFmOUNLenpndXMyOUh3U05UaDZEbWJsbVVsUHBJMWdCeDczb25pRkRkMTcrNm52bXpETDlHYVIvTGNGb1o5YnJPemFLZ2tlazcyQncwY05mekh4bHgwY3dzQVJIYkdURWR5MmZnSk5tRWR3bENpWTlLQ0RoTjA4OUdPV1VqMVpGTlpvYUYzZmlkUVFNUzBTTWZSSlVGOFIyV1VTM0M4SkZ1Unl1dzNlR3J1dXRtYzVwZEtDSkFRMTdrTDdLeU5zOGlNRnFIaDJvdGlsTVdtQ2Q0NlQvZk9PaW5OYnVtV0dRQk14MGtWQ1NPUGM1WXF1Si82d1lsdHBNd09DaWdZVmZHTTVWOFJTdWp1cnB3YzFyZ1l6K3VCM0tWYjhFR2VnSlBKYlNiMUM0WllNSzYxM3d6M0RSYzZBblRsS3VLNkJjWTByeUNmSXhaRGxyclh4NjJDY3V4bmxUcFlsa2E3Q013clBKOUFTSW9XekdoUTNkQWJPbVFKZDVERm4ydGpuUVJJRUpWUHdYUTNSNDcxNk1xaUpUV1RtVFc3djBMR0U3bHZpR25PQ3dlWTQ0aGZUYUdzTVdjUmNGNStDMlhZcWVtQTZhblladWhGdUVvQzdGaUhlSWZ5ZkE4K3hleGxtN3ZCVDZvckdPMTRkb3RpWkZNWGIwOVM1SzR5UjgybFd1N3VZWEFGbERQSEloVFFqUHRNNnhDbEo4SlBzVFJZUEY1QURsMS8vdlc2NjQwaUF0Q2hSNkhnU3ZZZmk3TkpyWWRheFBZU2VUMk9JbkVpSkUyVFkzQTlMeFQzd2dQTGpzMnFGMWYyV3ljc2dPbUU1K212bEdpUXYva1pWVzN3b2ZkVERMaCtJVW5CM1pOU2x0Nzlmb2ltRmpKOStvbjkwYmxxREQ5TTIrVER3Zlp3dWliMWtMOGZTMXBQV2NwVk52SHdSUVhKY0RKYlAyUGtpMlBCbTVnN1lFZHdUb2NzZlJjYzg1NTVhQjJkMnhyaU5RYy9tYk83YU93elNRRk0zKzVobnZwTjQrVUZMNTREQURsb0JlbG9HeEx0Z0NRcnFOcUh6clJCMVh3TmVXR3ZYYkQ2UkxBWGlIaXh3NUMraDY0TmgxdDQwUlBhS0JyaXFhdVdVVVJ1TTJNcVBaQnFkS040QTI3U05SbzdtKzlWYjZ4eE4wOEpaVndtc2ZhNDVEY3crWllObFZKT0plYlVlbUpYSUlLbDg2UVVzYnZrQnpvcXBvd0RlaFE2akl5NHVpdTV5YWRhOGI5bFN6RDk2eU5ESkF4K3RhdU9WVEZrc2pPZmJPS3Q0QklmRTJ4Slkyd3RuOFlDeEp4c3ZSUGZCYWt3UzJWSzA3TVlsYzl4bUZ2MERkUFB0R04zQ2Z4ZGJUWUJ3SG1Dbk9iZk5UUFBydHY4QVBqemM1YUhRbkQwQUFBQUFTVVZPUks1Q1lJST1cIiwgU0MgPSBcImRhdGE6aW1hZ2UvcG5nO2Jhc2U2NCxpVkJPUncwS0dnb0FBQUFOU1VoRVVnQUFBQmdBQUFBWUNBWUFBQURnZHozNEFBQUFDWEJJV1hNQUFBc1RBQUFMRXdFQW1wd1lBQUFBQVhOU1IwSUFyczRjNlFBQUFBUm5RVTFCQUFDeGp3djhZUVVBQUFNaFNVUkJWSGdCclZiTlR4TkJGUC9ON3JZbElLV0NJUm8wRUFSSi9FQVBIUHc0WU9LQmc0bjZCMGlpTnowSjNrMUxTRHo3a2VDRkNBZWpKeFAwYmhDdkVtTml3azBnR2crZXV0SnV0OXVQSGQrYm5TbXRhUVVDTDNtWmVUTTd2OS83Nmt5Qi80aVVNa1dhSmwwbTNaRGJrdFZyVTZRRDJLdndJUTJ3VzFsb1JTU2FnRCtnSVVPYVlydjA0enRLYitaUS9yd0NtZnVqdnJINyttR1BuRWZpMmczRXhzYk5VWmQwUmdqeHBDVUJwME9ESXdnQzVQTjV5TFV2aU04L2hwVThETkhlb1k3SVFoNGhhZlhYSnA5Qjh0bGJPQ09qQmlaREpEUEdzSnA0amx3dWgydzJDOHV5RU85TXdrbDF3N1lFckdLQjFGTno1MUFuRWlQbkVPOGZRdTdlZFJSZXpOWUl1RGJHY0V6TzY4RjkzMGRiVzVzaXNDQmhFL0MvdVpUUk9UV1BENTlGOE9xNW1yZmZmOFJEbXZhV0tKSk5Fd0duSmxVdWwrRjVIbUt4V0FUT1NpRHN1ZkE5Q0I2VmVsRTBnVS9rdm9vcTF0dUhnS0tvcks1QTEyOUJwVWg3ZjBkVnlYVmgyM1lObkR5QWtHRUVHdmlOUkR6Nm5nTG5kZHV4WVJPR1AxZEwxVlZ1YzA3UkxkVXRwWklLMlhFY0JhdzZnQW5DVUFGSjNSSkNSdW5SWnEyUWtwcUNTb1BxNmljVmhSTjExeFFUM0RRRURaNXJFbFNya09RaHNST3dpTExQZTdLK0dyUzA1VVpFcE9VUDd3M0JPQk5jNEZtbFVta2cySzVtU0hGNzBVbWgvZWJpbWs5b0xxZ09vbEpXQktHT1FzdUFvd3VDa0ZMQjRBMmR3bDRUTWZ3QzZoaTJQV2NpT3FkSTlLNGl5YmtOQkEzUzREM0p0OEVZWmpQZDJGRTBIMEtKM3NRUnZOVExUTERKVE53OXJhVHNDT3lXZ0RQYTAzWENyTHFXSmxDOWZ4RENyZ3dtVHh2ekt4T29YMFk4SHEvOU12Y2pqSERsMklReDN6R0J1djI0LzFuM1MzSzAvVGhHZXk0WmM4bWlvbkxKUDdMRjk0L3FISzE3OGp5Nm5KQWVtemRMaS9WMzBWMVNseU5JSkJKN2owSi9mbnQ0R2llVFozaXEzZ2FlS0FKbU1nc2NoYWxIcERzQTYrNWg4TWxURDgzT2pNWkU3WGZBTHhGZlRqUk5Nd2wzVmJGWWpLSnBRY0pibk8vSm9Xa2FMOWFEMTE2MVprOG1QeGJxK21aN0szRHhldjBwMXJmVzhOdi9xYjdwY0xvVTRPWGVpWHJncGs5bUM4L1VvNzhvZHkvTGNoLy9McVkwUUxZT2NFT3ZaWFJhVzhwZjN3Y05hU3ZoZE5vQUFBQUFTVVZPUks1Q1lJST1cIiwgRUMgPSBcImRhdGE6aW1hZ2UvcG5nO2Jhc2U2NCxpVkJPUncwS0dnb0FBQUFOU1VoRVVnQUFBQmdBQUFBWUNBWUFBQURnZHozNEFBQUFDWEJJV1hNQUFBc1RBQUFMRXdFQW1wd1lBQUFBQVhOU1IwSUFyczRjNlFBQUFBUm5RVTFCQUFDeGp3djhZUVVBQUFPTFNVUkJWSGdCclZaTmFGTkJFUDcySmRWUU5hMzRVMFVxOFI5UjBsWThWRVdOWHJ3b3RSZEJ0S0tnMG91WUNwNlRYSHJ5SUlWNkVsb1VieDVhdkZnOEpQVWZMQnEwOVNCWUE2MkNQeVZwREUxaSt0NDZzMiszQnRwSXF4MHliM2YyN1h6ZjdzenMyd0IvRVNsbExXbUVORTc2U2Y2UnRCNExrd2F3VUdFbkRUQmY2YWxFSk9ZQXYwcE5sTFNXN1VRaWdmNytmdFZtTWhrMUp4QUlvTEd4RVMwdExRaUZRc2FWWDhhRUVEY3JFbkE0TkxnQzdPenNSQ3FWUWwxZEhRNnVXWTE2djEvTis1ejlpVmVUay9nd09xcnN2cjQrMmREUVlMQ2lSQktiUmFCWHJ0aGpzUmk2dXJyUTNOeU1QVDRmVHZpcWtKTVNPVWRpM0hFUTlIaXcwckp3ci9BTHI3SlpEQThQbzcyOUhaRkl4TUIxbUowSUUzTnEzbkJZR0x5N3V4dTBJdXlyOHVLTWJ3a2VGRXNZbWJZUkpKdUowcllEanhBNHZiUUs5NHRFUXUrR2hvWVFEb2NOQ1llcmlVaFNocUNIbXZQSlpCSk5UVTBJQm9QWVJ1RzRzYndhZHd0RnJQVll1TFIwQ1MzSDNiQkRKTGRvOVQ0eVY5Qll6MVFCWHloa0l5TWppTWZqSmk4SklqaGk2ZFdmNTVIVzFsWTNidVRVOEt1SW9ld2tuS2twWEpZMlJDRVBLejhGUWJZbm44Y1ZPWTJQbEl2dnVSeU8yaVY0dlY2WThHb0pjWm56NkVtMmtvT0RxUDg4am5vS3czcE9ZTFVQT1lyekY0cjd1ZHhQblRCaDhqVlRHRVdhTXlFZDdLQlExWkN2L2V3cFJwODh4dWFEaC9oMW1BbGF1TGZ6MFFBR2FsZkFTNnYzMkVVSWI3VUxaL0hUWWxpZE1xbHR1SDMrQ1F0T3JnQjdwUjgya1ZzRER3R1g0REFUTktxcHcrK1Vtd0l0RXNIRUJFQVZCRnFod2pRRWlrT1cxelpFdmdBeFhWTCtEdXZ6WitadGdBblVnY0xZbUFxQk1DU2xrcXRVa2lhNU02MEdWa3BscTBpMG4wVlBtMEpjVHFEajYvclBPdHEyamZtS0tGTWp2S3VVNnZscnNGaGliZHhvdXBrWkFzK0JBMWdzRWJ0Mm0yNlNRelJJR3ZyUmRoeDM3RjVWTkVMZ24wU2xoQjduQ0d1ZE85UXYrREJRSjgzVzlSZW44RGI5MGlWWUtJbk9lWjF2QSs0Y2ZXRkdOMWwwYXZtN2tXQ3JiWHVIbWlXeGNGR1ZTNC9JM3R0bXFKZS9SZWJFWENETkJGZnRROXUyRHJma0Y4S2k1NTRsM3kzK1hkeFZkd04zRkFFem1ZR3oyNjhwRWprZkVqMkg1eko0Ry9scWlXbk1XUmRPbEJyMXZSM052a2YwOVVWOHpZOVhUQWNEcTExdjdhQzJ1Unc4YW95NXJzeXdKbEVuL08zRVN6ei9OcUFJditiSDFKeGwzaG9GdUgvdHNYTGdPYS9NQ2l0VGwzNnZuTC9FNVgvOHV3aHJnSFFaNENjOUZ0VmxYbEYrQThIUUZ0bXNwQUFJQUFBQUFFbEZUa1N1UW1DQ1wiLCBrQyA9IFwiZGF0YTppbWFnZS9wbmc7YmFzZTY0LGlWQk9SdzBLR2dvQUFBQU5TVWhFVWdBQUFCZ0FBQUFZQ0FZQUFBRGdkejM0QUFBQUNYQklXWE1BQUFzVEFBQUxFd0VBbXB3WUFBQUFBWE5TUjBJQXJzNGM2UUFBQUFSblFVMUJBQUN4and2OFlRVUFBQVFXU1VSQlZIZ0JwVlpaYkZSbEZQNyt1OHptdEIyTk1vVlNBWXVoTVJSam9qRlNvMmdSbFFmQlJCL0V4UFNsQkdPTWcydlVCNGI0Z2t0aWpjZ0RNWVUzTmNFZ3h2Z2dJV0JMbzRBTlV5cTR4Wmx1Z2xCZ2huSm52L2YrbkhPNXQ1MHVROXB3a2pQL2ZyNy9mT2Y4NXc1d0E1RlNSa2kza1I0bVRjbEpTYnR6TWRLbG1LL3dJZGZBWEdWUE5TQXhpL0hYcUltVFJuajhjOTlaSERpU1JEZTFtYXNsL0hLdUU0SEZDNkd1YklGdi9YcG9xeC8yam1aSXR3c2hPcXNDTUIydWNjZndqcTQrRFAxdllNRnRJZHhhNjBjNHFPUHordzBvZVFQSVptRmR2QWg3VVFOcVg5Z0VYZGM5TTNFQzJUNER3TDI1Zy83QjdoUFkrYzN2ZUxBbENrMVRuVzFDOEI3Z3l5MU4wRldGVC9BWjJMYU5VaTZQa04rSDhJcG16OXhXenhQaGNVN05TYWJGT1BjRkRoejhGU1BHUXhnWWlTSmI5S0ZRMWlidXN2OThGM1JwdXBkeVlHQVRlamx4RXZybUxRaTg5WTVIMTMwRU1xaTVpRXhOeENyOGdmZDM5cU1udFJIaGtBOU45Um5jdVdnTVpWUERpVlE5cEszQWZPVlZTMUhackF2QVhwREtYQTdHMVhHcEdJYnFDNGM1Zm50SUg5UGMyN2N6eXZHZU9IWWRiTU9xdXhYVUJxL2cyUWY2c2U3ZUZKTG5Jd2o0V25EbzFESklYVmVoZVB3NkNGQVlxYVlHUXRySTlSNkY3OG1uZUhrTnB6bDdzSkZIVnZZWS9obk5VVS9CNWZFU2FvSVdRcHFCZ0dyZ25nWURHV01sZVZLRS84M1g0YmZMazRuQnNhSFdMcGFnalk2QXlUTy8rOTdMcmhnRGJPRGVqMGVUV0xkcUNIVzNsRENXS2NKSFdYRm9vQjZSVUJyZGZ5N0JtZUVReHE0STVIZDNXYlpQd2JUc2cyMlowaTZiTUMyQ2lFYVZNQncvSHhYOEtwbi90Uy8vZ0tlYnYwSnI4MW0wNzNvR3c1ZHVSL05pU2tWTFFabjB3bmpJSVNYWkxoRlFaS1Y1U05OMDRzQnFXalpFWFIxcW4zdWVGd2Nad05tOWZNUFhsUE5adEs3NEQ0KzNES012dVJBLzlkOUZ4NGx5WmZLNXBJZmVnMStXdlFnVE43YlRPalF4MWRTeEdoc1I3RXM0KzdVcHZ0SU5lLzlxUk8vZlM2YmMwTEluYjV3OWRRYm1OSW84bWxndHkzTGFvRHZQQUlPa1M5L0ZiMlltL2E5RG5KaFpRU1lrdU9NME5GV1pkYzJqQ1UzTEZYUnM1azJaQ1lDWEhvbHE4a0kzVkhIOVNWV0Y2Qm1kZFZxNlp3UjF4QjBMdk9rRXh5Qk9uVzBtQmNvd0RLaXFTbVZCT0RvZnFhUW9IQTVUaVhIWTM4b0EvT280azFEOCtFT0k0OGRjbXVZblhwRHRoa1lFT2ovenBwZHBkTk1NZ1J5aHdScTk3UW5iVENSc0tjUzhFWnlFb2g5L1I0ZVhPSHU1RnMwb2RvVkNBYVZTaVZKVG1UTk5IajFjc2dPQkFFOU5MWGJjb1ExY3d6L2xEZHIrYjRGUFB2SktUbFZuWklXS045Nkd1dWxGYjRrL1BJTXp6bm9CZHdhbkIxRGV0OCswcjcvRFdVRjRoWk5DYlZ1cmlkV3RsY2JqdUlHN01mZWo3Z2hsbDh6bjh6S2J6VXJLc2dubE9WNmI5a2NnaHJtSSs5SGZLK2N1aCtWTi9MdUl1UWJTRlFaVDdsemNUZk9xY2cwWEdxM3lvdFZmaVFBQUFBQkpSVTVFcmtKZ2dnPT1cIiwgTkMgPSBcImRhdGE6aW1hZ2UvcG5nO2Jhc2U2NCxpVkJPUncwS0dnb0FBQUFOU1VoRVVnQUFBQmdBQUFBWUNBWUFBQURnZHozNEFBQUFDWEJJV1hNQUFBc1RBQUFMRXdFQW1wd1lBQUFBQVhOU1IwSUFyczRjNlFBQUFBUm5RVTFCQUFDeGp3djhZUVVBQUFPV1NVUkJWSGdCcFZaTGFCTmRGUDd1cE9uZi91bHYyMStxMUdMeHNSQk1mYUVMclVyVmhXTHh1WEdqcU4ySUNHSUZpK0RHdUpJcVNoZXV4QmU2Y0tFTGRlRUR3U29ZVzNTaFZpMUZrZFJXOFcyYU5rMm16Y3hjejdrek4wa3hLU2tlY3VhZXVYUE85NTE3N2l2QU9DS2xyQ0E5U3RwT0dwRVppWHA5emFRek1GSGhJQStnVUxtWWowamtBRDlBVFlpMGd0K3Q4R09NM3JtdFdobUxLUitqdGhhK3Vua29ibXhFVWYwS0hUcEFla3dJMFphWGdNdmhnU3RBcyswMFpIOC9qS29xaU1vS0dQOEdWSWd6SEljY0hvYlQ5NEZpZ01EbEsvQUY1Mm1ZRUpFYys0UEF5MXl4bXlkYk1YcnVMSW9XTDRIaDkwTVFDZ1ZCb2FrUUNhbWVnSk5Jd3VycFJ2R3VKcFMwSE5ad0IvVkloSzQ1TmMrNUxBeWV1bkFlL3JvNkdPeEFLRUprWnlNOGVKZVBiWWNjVWkrZXc3OW5yeWJoY2kwaWtsNU5jSkdhM2ZiclZ4aGUwd0IvTUFoZm9Nd2x5R1NSWWZMczlDam8zUjRhcEpIMG9QVEdMVDB2RDRsZ3RmQ3lqM0RQOXJ2TDhNMzhpTm1WYzEwc2ZvZ003cGo1WW1qcGxrdjlIT0I5dEJ2ekp5L0ZxWlhYdEZzbEo3bUZyWmMvT2hTNG9KNGhLNG9SYVpJbU1lb2tNVUpxT215UG9McTBGbVZGNVJpeHVUOUJmZVJIR3JkaktyYnJaeWRlZnUvUUJNMU1zSm10OE9kN2JyYlVFMHY5Z21rbkNDU2hXdE5Lb016M0gvYlBPWTZxNG1uNGxJalFOMU9SS0Q4aUdxUVlYZFB3bDN1YW9LR0lIZ3ZaZWgvclZ1QmNEMHVPcW9CL2ZDWHBxZDB4c3dWOThYZTQvK1c2WGtqcFVqR1I3Vmp1U2pNa3VuNTBhb0laVEtBMjFOZGtmOWFNMGo2UUtWaFdDb2J3SVVEWkJ5Y3R3ZFhlTnNvNENYZkZTZ1V1cWZoNlZlbjR1QlViUTVENW1NTjJwSjIyNDlZZ2JDTFdlSVVJRjZXWGpUSi9PVVFlcHlGckFHOWlUMUUvZVMwS2tlckFkRzBPcEFrVzBQSWFUODY4UFlLR3FadXhvV2JudUg2YzVLeEpjL1hyQ3laNHhOYnk2bldaa2Vjb3dUZnpFL1k5VzR0SXZBYzFwYlB5NGF0UXh2TGtKbTgwbnVRb3Y3VjBiRU5YdE5QYlpKaVlTSGVEVHkycHdlVTE2WDB3VXg4VjdkU3Nray9Dc0xkdUdudEVGQ2lPcDc0SGp5Q0NkZHgxaVpadGsrRjlieUlkRVBYTFlkQmhOWUZGb3BOWElnNGQxdURxYmhqcjVGNS9TdXlUcmRLZThyOTBQSlhqS0g5blgvdEVhL1lOMTV3N0V5bERhWmZYWGRKZXZPQVBJaWRMRmZDV2pkSUpQODRHRDJWajVyb3ltWjF2TnJYRGVWNUFWeWJldklMczYzTUR5c3NCUHBMWE40TEw2a25PS3pQZlNQalN2eVFMbDNiNUYvOHVtajJBYUJaZ3hPc0xlY3M4ci93R2UyYUllbmhNd1NNQUFBQUFTVVZPUks1Q1lJST1cIiwgVEMgPSBcImRhdGE6aW1hZ2UvcG5nO2Jhc2U2NCxpVkJPUncwS0dnb0FBQUFOU1VoRVVnQUFBQmdBQUFBWUNBWUFBQURnZHozNEFBQUFDWEJJV1hNQUFBc1RBQUFMRXdFQW1wd1lBQUFBQVhOU1IwSUFyczRjNlFBQUFBUm5RVTFCQUFDeGp3djhZUVVBQUFNM1NVUkJWSGdCclZiTGE1TkJFUC90OTMyTk5vMDFtSVBrWUN5aUFhMVZLUjZzRmV4TjZFVXY0cVVGUmZCcUtqN0FnMDB1Z2dqVm8zanBnLzRCaWxEdzFBcW05YUJRTCsxQnRFWEZvdmFSMUxSSm1zYzZzOW5OdzZadkIrYkx6T3p1Nzdjeit3cXdqa2dwdmFUZHBNT2tVN0lrQ3pvV0ltM0FWb1VIYVlETlN1OWFSS0lLK0UzNkNaTjYyYzhtM21NbE5vSk00Z05rTHFINjJDNC83Tm9nWE40Mk9KN1RabWlNTkNLRWVMb21BWmREZzJQODl4Z094d2VSejh6QWNueXdhdlpBV081Q3Y5d3k4bm5TOUE4ZUF3OGV3bTVzTWpCaElva1l4Nm95Yy9SUDlDRHk3Z2FFN2NEbFBnUm5WejFzMjZMT0thVzJMZURVZU9DcUM2S21Ob0NsSzVlUmV2eW9TTUJyVTBHZzY2ZkFCeVo3OEdxcUg4RjlUYkN0SEN5UmhDM1NzQmxZa0ZxcGdrKzJhaU1FMTlGanlEeC9WazdTYmRiRVpNQ2w4WDZPVDhpQnlTZnd1ZmNqTFpNSzFFSmFLd09taWxtb21OQzZ2QXpINzBlR0NMS2piNkhYcjFjUmFLYXI3RHdZdXk0RVVRcExJRTAxdHBCVVlJSitRWUJDcGloZFVoMnpwTTRpU1VybHRLbGxwWlJGRzI5enp1QVNleDlueC9BcitSMU04Q2U3UUJrd0NJRXlHTnVVRWFTeHRhbzI2cE9reWNUanFoejVhTlJrd1JMaTJFVzJvak92VmNHWUlKNlpSNHAyaXBweG5vRHpxVEt0OUpsWVVJbkUzQ3hsSTFRV3VhRWhRM0Rlb2M4cHRxaitDaHpVS1N0WHNFZ2trUFY2SjB0VTd1eHlueUt6Y3hEWlRDRUQxdEdvYVdwdzlJTGdaL0piWWF3K0dWbVpvWjRKRk5PcUpqSmZJQ053TTlTaWI0N0tWVTVRbWxnMW0rZWtnRFlXZ1lvNUt1R3BUYlBocWRtNyt0N1locWdzQWdIanhvb0VKMzFuOEw5RU5CNDM1amdUdkdHcjFYK2h0SFFTMnhZZTZyUzNHL2NsRTZqYjc0U3ZoYkpvd1U1RXpTdHdBT0xzT1JONlFWdFg4RFU3d2w1bnNJc3ZwbTBsSUxVNi9ZTW0xRWZZMDJiL1hTT05jUmFkUjdwS3ZiY0F6bUxkdm1mcXI5NEdGZU1QTTVsQVIvQ1dJcUZFQ3JvQmNyRVBnVnQzN3BxV2lNWmM5ZUNFVWJoWjhXVnhBZ2ZuN3dQMDRBamQ2OTh6ekxiWTNRenh0WVBxM2xvT0hqWk90U2N6cEVuVUNaZEplaXFYYUtPbFB0R0puZEcxOEFCdUFxNXJnNmh0TmtPclBwblZNeTg4K24xeTh6SXNkL0R2SXFRQkZzb0FwM1NNbjBmdmVoaC9BVnpoL2ptRG83MjlBQUFBQUVsRlRrU3VRbUNDXCIsIElDID0gXCJkYXRhOmltYWdlL3BuZztiYXNlNjQsaVZCT1J3MEtHZ29BQUFBTlNVaEVVZ0FBQUJnQUFBQVlDQVlBQUFEZ2R6MzRBQUFBQ1hCSVdYTUFBQXNUQUFBTEV3RUFtcHdZQUFBQUFYTlNSMElBcnM0YzZRQUFBQVJuUVUxQkFBQ3hqd3Y4WVFVQUFBTXhTVVJCVkhnQnJWWk5UeE5CR0g1bWQxdnBGbVBqVndRREFnY1RLWWlKZWpGR2pVY1NJaGZqVlgrQkhQd0tNYUVjalJlUHhndjRjVGRldUtJSjVlU0JLQmRQb05lR3RyUnN1KzIyTzc3dmRLWXRoQ0lJYi9KMFoyWjNuK2Y5MnBrQ2U1aVVNa0dZSVN3UzFtVExjbnB0aWpDQWd4cS9wQW4yYTNPZGhNUXU1SS9wa2lJa2VPNzdQc3Jsc3JxR1lZanVpWEZZL2Yyd1IwWVJIUitIYytPbWVUVlBtQlZDdk9rb3dPblE1S2hVS3RqYzNFU3RWb1BqT0xBc1M4R2Rmb0hRMjRMMFBJUi9mdE03UVB6RFI5akpVVU9USXBGWk03RjI4VndSWnpJWlZvRk5aSkZJcENWU0tzRVJBazUzTnlMRFNUaURRL0FlM0lmLytsVlRnR3V6VFVEbnIwbnVrWGV4V0F6bGpRMWtDOFdtOXd5YjBtVVIrR3FYeW5BZ0ViMDBqT0RkMjNhUkdWTVRFd0duSmxHdFZsRXNGaEdOUmxrVVdhOElyMG8xS0cyQndtNmdYRkpSc0lqbE0veEdWRDA5Q0VpZ3Ryd0VYYjg1SGpoYTZTRlBOc2hqMjdhUitma0RrbEx5YTMyTm90bkNNV0VqVzYzZ1FrOHZCSkhwcEtvU0N1aEMybzVhcVpLSTgxa1YvZzYzT1Vjd2FZcktYck5BbkZJUkllL085WjdINmRObjZLWVBsenBJeHVNVVFWbUpDRW9QZTg0UnFhZ290VXdXcHRNbUNyWXBoMzd1bVhZMGVUNStlUXdKRXJKV1YzRXE1cUkvbVZUcGtRU1VQTFNhVDBJMEFvSEk1MkhSZlp1Y3JDOHNtUGE5elFKWGVNVHRhQVFVR1Qzb2ttZlNpYWk1YmdiUVJ3SFZtNjMyb3doOGlGclFpSUN4bkRaM0J4eGRFUFVSTVhtN3VkZXV3elhFeGt3TmVJMUI3eWtSSFJlNWh6cWxxMTFBbWZIU1hEdGFFSFM4SmRwZ2pGMWVWd09kbXFNdzNrcTA1WnNDM1B0SFpTSTVZb1lyTFBETkNHekw5U0hNb1UxUTJ4ZkJId01OY2p6amJhSmVyKytacmhNWGgzWmRaOWRVQi9YMUlmSjl4U3dQVXVzSzNtYS84c3gxWFJXRndVRk1hamp2UDVtbGVlSmVOMzM1aUpEblhaTTN1ZjhoWjdPZVBEZjVWMmVEV3VNZlZqSUxIRVZYVjllK0l6R2VnOGl0cDgvTThxem0zUEd3bENsekJ0S1hMZlA1dk14bXN6S1h5elVSbmozWlJKMHhPU0hEOUZMNzhabkNuaDQxRHZLY2VUb0lBanE4UEZrb0ZKUmdlSFZNaG5kdnlmRGw5RTdpWFB0Qjh5OFJQdlRuNWY1dFVSN2kzOFdVSnNpMUVhN3B0WlJ1ODQ3MkY0OUVjbGtKeDNlbkFBQUFBRWxGVGtTdVFtQ0NcIiwgREMgPSBcImRhdGE6aW1hZ2UvcG5nO2Jhc2U2NCxpVkJPUncwS0dnb0FBQUFOU1VoRVVnQUFBQmdBQUFBWUNBWUFBQURnZHozNEFBQUFDWEJJV1hNQUFBc1RBQUFMRXdFQW1wd1lBQUFBQVhOU1IwSUFyczRjNlFBQUFBUm5RVTFCQUFDeGp3djhZUVVBQUFUWlNVUkJWSGdCcFZadFRGdFZHSDdPYlR1Z3ZSM2QyQmgwYm56Sk5oZ2dTTFpocHBZZmkyWS90QVlURXd3YVp6YU1NWm1ZSmZzMWxJMC8vdEJNTTNYSlJtUWFUU1JHSXhwQXhRMUJuRTVXeG5EaU5wQXZnNlhqcTFBb2JhSDMrSjdMdmFYTFlKbnhUVTdPdWFmblBNOTdudmM5N3lsd0YrT2MyNmk5UWEyRjJnQmZ0aWx0cm9KYUt2NnJpVTBhd0wxYTdXcEViQVh3VjZtcm9tWVQzNjJ1ZjFEL1l6L2FxUGY2UXVxYVZMc1ZlZHNTNEN4T2g2UFFybS8xVWp2T0dIdG5WUUloaHdhdUFyLzVvUXREbzdQWXNrbUdPYzRFbVpxd1dmOEM1dVpER0JpWkFhZnZMOS9hcnhKcVZrVWt4KzhnMER4WDJhdlBkT0M5dW12WWs3c0pScU1CaWV2aU1ENGRoS0p3TUNiVzZwczUvSUZGL040M2pwZEtzbEZadmt1SGUwMC9DZE0xcCs2S2tLWDZiQWRPZjk1REhtMkFoVHcyeDVxUWxpemp4dkEwZ1V2d3pvWjBqM1RYMU9icXVZWERwVG1vUExSTGw2dUFTQVlsYlpXUXh0YmRPOEZQbkhFaGFZT011QmdUN3I5dkxRcDNyTWUrUFVuWW1iNE85bzFtZ21LWUM0VGhEeXFSTmhkUXNEbFJodGdycE5YaVZ5c0dSczM3RjhSSHlaSHZHTWhMcTJVTk1yZGE0WFJzUVY2bURjR1Fnb1Q0V0RUKzRzYWZnek1rU3pnNmNPb0pEQVlqeE43cXN5NDk4TVVpemNVSm50S0RPalRxbzVGRXVrdXE3bWwyR1JLSmJvNDFJbjJ6akhTN0JURW1pV0lCbFVUbzd3K0cxZkdVS3AxRU9HNjBkNDdvOUJWRUM2Y1kxYmNPd1dhTnhVYWJHUllDVExVTG1ReDZBcWk5MVd4Q1RvWU44d1E2TWpZUG4zOHg4cHRJNFJpRHdsL0oraFZwNHo2SzdSRXg3UkFFK1dMVWZYT0NGaTFRRUgyNDVRMGhYbzZoOURRak4wTzlEcGlZQ2VIN1MyNzgwZStGNi9wa2xFSmNKZHk5ZmdDbmlocVpQVzRhR0JXL3F3U3BSaTBnR0hUUFFzMUJDdUlNZVRZeTVzZnBMM3J4eE1PYmtid2hEblhOUStpOE1VbmdVOHU1UTJsck5jN2paT0Y1L216R05hWVFXZGdvQSttUDZmd3FRWlN4U054KzZockRqcFFBdW51OXlFcGJpOTVoSDRZOWZpd3NLcEhWQjdkMUtzZnkyNlI0VTVEQkpJTnRMK0hTempMR1RaYklHa0V3S0ppRUpCUTZSRi91NjBNK0dDU0dRQ2hNcHliTjV4YlYrUlRaaS9jZmFzVGV4TDhsU0FhTzdESWdwd3dzZGgxRE9FeDc5T3lITjBMZ0tFeEdkOStVZHZobGtqREpFQ1FDQVI1dkN1Qnc5bSs4ZkllTHlXWnlhRnNaWi9rdk1xeXhxckdZcGt6NnRHa0FpZXZOL0lCenJRRHBFZ1N0SW1lZGpoU2NxdXZCU3VhWkNtRHZwbUc4dS90YkpTTmhuckdzVWlDWHZJNnhxWjYwazV3MVgvY3BMWmM5MHZSc0VEOThzRi8zc0o2SnkwQUROWEw3WG01RWE2Y25FbXhoOWpnZlAxYlF4a3N6ZXhreW53VExleDZ3SkRIMytEei9xR0dBMVRiMHd6TVJXRG81blNJbDJZSytyNTdSZlV2VGExR0xPRVZycDV0SW10UWJLUWpLdDd1VW83a1hrWkQzT0NNcHNCaVRpSWFMYnRUVTl6R1JCTGViSUZCdytSTW5Ic2hVSytzNXFrVUg3aWgySjJxdTRMTzZDL3p0b2d0NHBMZ0lMUGM1L053SDF0emg0YlhmL01XbVp4ZFdFSEhKKzhwRCtYajlZSUVhWEdqRkxycGNWMUIzVW96SHVwcDQwTHdGSDdjSDBYekp3OXF2am1GMTA4RUxDRHhmbjd5OVhFZVJWR0dwc3VMcXpVazhmZlE4MWFjNTNNMGNEeWFoa29CRnI1bDQxYXIwajVXZXpBcU5aT25KN0J5bE9qVk1GMjV5NmJhTEgrUTFlSlFBblk2dDBjQXJQcGtySDNycDBUL0g3OTFhK1AvNGQxR2hBVXhGQVE1b2MxVmFtcTlxL3dLSnA3bGZ6eGYwRGdBQUFBQkpSVTVFcmtKZ2dnPT1cIiwgSEMgPSBcImRhdGE6aW1hZ2UvcG5nO2Jhc2U2NCxpVkJPUncwS0dnb0FBQUFOU1VoRVVnQUFBQmdBQUFBWUNBWUFBQURnZHozNEFBQUFDWEJJV1hNQUFBc1RBQUFMRXdFQW1wd1lBQUFBQVhOU1IwSUFyczRjNlFBQUFBUm5RVTFCQUFDeGp3djhZUVVBQUFRS1NVUkJWSGdCcFZaZmFGdGxGUC9kOUtaSmEyclNkSlZteFpLTkNwWlpTVUZCV2FmaXFnK1dZVUgyVkIrcWdnbytHS2ZRZ29JcERwbjRCMTlGb1dNNjNZTWdnL1ZCTnB6U09NR3FqWFNid3RxMTFyR2tYZHNrUzNLYm0zOTM1M3ozdStudG1vNXVPK1hrZm4vT09iL3o3L3UrQXJjZ3d6Qjh4TzhUbnlXZU05WXBLZGZDeEVIY0xyR1NOTEJkR3RzS1NLbGgvRTM2UkloOVBJL09UbUg4d2dSOVkwaXZaWVZNaDc4TjNUczcwZi9RUHZUdTdyRlVVOFNqaXFKOHZpVUFwME1hRjRZLy9lbHJMS1RpdU0vVEFsOURFKzV4dVlWS1RsOURycUJoZmpYT1NqZys5Q0c2QXc5WVppSUVNcm9KUUhvdTBJK2NIc01YNTc3SEl4MTc0S3hUaFpSQ2Z3YjlzWUpSVlFLMFFoNFg0N040K2JFQmpEenprclh6bGhXSll1V2NQbE9jRmpiKzVXOC9vTHU5RXlRa2pRb0V0TG9yME1vVVFWR3huS3FpeGY3L0Y2L3ZQV2lCY0xwNlNIL2VJUkU1TmI3cHE1ZHc1TXdZQXQ0V3JKVjB5UVdzbFhWb3hUdzZ2Vms4MnBvUlk4M2E0MjlSUjhEWEtuU2psOWxQVWI4eEhxalMreUdlREI1N0YzQ1F2dzRIR2RISmEzS1BvbWh5R2pnVXlxS3ZYUmNPNzJsMjRiT1lCeGtaQ2RkQjVWUTZ6UFNlZWswVS9pbHVjNDVnUUJUMWNnd0w2UVRidzczcUtubVdGeURzM1pLbTQrTy9WR1IwSFlsc0FZY25WU3pTbWtZeVZxVE56cVJJYVhRdVprWEJGQ1pZUE0rajhZc1R3bHZtZ0hzWlZ6UUhpaFZIdFFaQlR4R0RaOXpJbFJUc2JNd2h0cXlLRXZKK0hhbTFONnhJZmJZVnRkcjNTWllLOFdqNjZveFpjZnFwZHhSdzRQNDRqbDN5VThiTU5Fd21ET0VoMDJ5S2Exc3loU2s5QThFa2xyVUtUVjBDd3haQjBDRUxJdnBkSUJEL3VsaVBWN3ZTRlBaMVpLbmZjd1V6WGR5U2R1YXo0SFZtOFBiREtWeElPcXVObjg1bk53RFlqb1RwNFVKV0phN0RkMzFKdERjV1VhcVVCQmR0WEtxVXFXMkxPTkczZ3QrWDZ2RWZ5VysrRjBUZE1jOERiNE5udzhZYkV6NzRYV1dNUDdlQ1Z4N1UwTlpZcWU2MXVDb1k3c2tnT25CTmROZ0hmelp0ME8xb0RsakRsQ29CZ3IyN1F6aWZtSzBLY1FRSFQvdHhmSDhTbnp5ZUZxelRJY3VYeVpsNm95cnp3bzkrOGJVVDMxT1NZaHpCTHp6cTc5cUhtK244cWhQUG50cUJRK2U4bUZ4eVVqdENnUHh4elltUHBwcnd4TWtkbUxtdXJpdklVMjJ6ZFZMaHcwQ0RKTThPZkJWR2RENVdiYmZiSWpaT0hkWGhhOFBmNzV5d1ZuZFJGeXA4Yi96TXMrSDlRN2h6TXQzL1p2Q3d0WERVZmhmeERaWHEzUlhDOE5ORHdwUDFLM09idG9sWnR6c2c4aS9lQmg0SUFFYXlGa1pJU0lCZ215Q0crY002STBKUDBLaTB1ZW5CaWNDOFdURWRuOEdMMzc1SEIzRFIzS3hWRTRwMGJ6QWtESFAwTnVNUmExTHJ5UXhMRVBQSnBNdHIvSitvQUZ4SUpZU00xKzBSQnZ1N2V1MkdhejZadGFNMkgvMmp4dmJwckhFWC8xMkVwWUdremVDY1hJdklOdCtTYmdCN2xIYm1nWkJ6c0FBQUFBQkpSVTVFcmtKZ2dnPT1cIiwgVkMgPSBcImRhdGE6aW1hZ2UvcG5nO2Jhc2U2NCxpVkJPUncwS0dnb0FBQUFOU1VoRVVnQUFBQmdBQUFBWUNBWUFBQURnZHozNEFBQUFDWEJJV1hNQUFBc1RBQUFMRXdFQW1wd1lBQUFBQVhOU1IwSUFyczRjNlFBQUFBUm5RVTFCQUFDeGp3djhZUVVBQUFOV1NVUkJWSGdCclZaTFRCUkJFSDA5c3l2ZytrR05SajBZRTlFTG4vRHhvRVFEZXRGd1VFK2VJRWhpakRmQmhIaGtPUm9UUXp4NE1DcEVyeDZBUkkySkNhQm9QQWtCZzBTTi9Ed3N5R2NCRi9ZN2JWVlA5K3dhUGdHMVNHOVgxMVM5VjEzVk13Mndqa2dwYzJrMDBlaWlNU0xUTXFkdDlUUU9ZN1BDUVJwZ285SzZGcEZZQmZ3R1RVRWF1YnhPdnV0Ri9PVUxOY3Y1ZWVWakhUb0V1NkFRVzZxcTRDcy9aVUxETkpxRkVDMXJFbkE1TkxnQ2pMYmNoWnlZZ0xWM0w4U3VYRmhiQXlyRWlmeUNqRVRnakk5UkRCQjQ4aFIyZnFHQkNSSko4d29DbmJsaWo5NjVqZmpEQi9DVkhZZmw5ME1RQ2dWQm9ha1FDYWwrQVdkcEdjbmhJV3lwclVOMjR5MEQxMkIySWt6TmFlcmpzakI0NHZFaitBc0tZTEVEb1FpUm1ZM1E4QzRmNnc0NUpQcjc0TDkyM1pCd3VVcUlaTlFRdE5KMEpmVnBFSkd6RmZEbjU4TU9iSE1KMGxta21iVHU3WUxXcWNVRjJza3djdG83VFYrNmllQ00wTm1Qc0NYdjhqT01UUzZoS0crUEtvbVVRZ0h4SHpLd3RaYWVwVXMxOEhVR0ZjWDc4UHJlZWVPMHkwYy9sMWpyNlE5aExCUWhJQnV6OHdsa1ovdmMzRlhKaFFmb0Vuc3MrcmxFTEo0azNTS2NLZlQwaFZCUnNwK2YxalBLUmRZNjNrNG9CODc0NTBJY3V6bHZCYVlyby91NzJwb1g0Y1dFZmlEUTBUdHVDQ3FZb0ppMWdXK3pYc1ZqQ1FmVDgzSGtaTm13aE01ZFptd0ltUVFTeXpFSGlXVEtpMy9UTjJuMmQ1Z0oxQXNWbWw1QWxqL2xIaHNWblVJc0J2aDhna2orZkIrRmJpeExNaVhWWWNoaUpEZ1U2aUFhajNvRTNHVGxHZjF5QVpZTXdiYmNPb3NWNy9qNndpaE02bENPS1dzL2NvNTFLanVUajZxczdPM3AvRFlKbnJrekJacDEwSmpDSG9FVktNVi9FV0t4c28rYVZUOFQ5TEJtNzZqVU5ways0cHNVMDN4N2U2VXhkVENCK21aWVc4c2dja29oL3hMY0UvOEJoYVdsM1VjTkRWT2Z1MmxSK1RsUWk4YkI1K0N6dWVrbU8xQ2R2bis2RlVkY1V4dC9peXo5dkk1R3VHalBTZFFjYllEM2tka3d1anRWVSt5UkhmbXNxcnVCRlVYQVRNWlFmZXltSXBFYklkRSs3TXZnTlJTcnBWbGpycmh3Z2pRMXNmNTlZUWpCajFjeHVmeGp6VlBMd0dyWGVRMDBuOGdFRDVyRmFsZG12U1pSYi9qQXpBZThuM3FsQ0NlWEo1UlB3TGRUQVpidk81Y0p2T3FWdVVabTZ0SnZreHVYTHZrUC8xM1VhNEM1RE1BUmJRdlN5RjBQNHpjcG4vNDZNa3AyNUFBQUFBQkpSVTVFcmtKZ2dnPT1cIiwgUEMgPSBcImRhdGE6aW1hZ2UvcG5nO2Jhc2U2NCxpVkJPUncwS0dnb0FBQUFOU1VoRVVnQUFBQmdBQUFBWUNBWUFBQURnZHozNEFBQUFDWEJJV1hNQUFBc1RBQUFMRXdFQW1wd1lBQUFBQVhOU1IwSUFyczRjNlFBQUFBUm5RVTFCQUFDeGp3djhZUVVBQUFPdVNVUkJWSGdCcFZaTlRGTlpGUDdlNjJ1SERqTlFLTUdCRVFiR0NJdjVFVGNUeDVsRUo1bkVSQmZxd3AyL2lYRnJOZjdzRkpiR1JGMGFFNk1ZOTJvMEpPcENUUVRjbUtnSkdJMElpRUd4RlBxSzVkM3kybDdQdVgyM1B4UVE0a2xPZTMvTy9iNzduWHQ2YjRFbFRFb1pJajlOL29COFdCWnMyaHVMa0xkZ3BjYUxQSURsMnBYRmlJd0Z3QS9UVnlkNWlQdENDRGlPbzc2ejJheUtzU3dMZ1VBQXdXQVFGUlVWZW1tY3ZNc3dqQXVMRW5BNlBIQThpL2FqVWE1Qk9wMVdnS1pwS21kaklvcUY2N3FxWHk4Y1dMK3UwVENkUk5LbE8rWUNPMGYzNERsMFBUbWtBSG1IZnIrL2hJVGI3RHpIU3BKN2QwT2NQWk1uNExNcElmRHlwOEN2dlR5SDI4UGRhS3Y5SXcvNE5RKzB0OE85ZExHWTVMUStFNjJBVXhNYXNnZUk0RHpDMzY5Q1NqcncrWHdLZ0NTWHVRWlhNWTZBMWRBQWx3alNmWS9obmQ4VlJlQXg3ZWZPcWY2RE1JalNNQTJrc3JNbGdPckFqTktheUpPbEJCRlo4TkhZWEVIRlppNXpWckNEZTg4bisvRkp2RmNFTStscFVpQXczMUt6U2N4OGVGTTJibENWbWJhdDBwSHQ3ZFVxMkNJV2ZXem5WdStIdTZxbW1NQjJwMUJsMU9qRHA2ckpJUHI2UHA3ZTY4SFUyQ2krQ3pWaCs5RXpDQVFyOHdTSVRjSWtOVDZLei9UMHdOcjRMMDl0WXRJT2JnM1pnd3FjTkNNdDU1QWdFbTBaTVFGQjdGWTJSU29FWW1PdjhPTGh6WUtDcVJnTStwMm81YXlpcjFkUHRaamVnV0RDR2N2TmVtbE9TMWZ0UGpvNUN2RlpRS2JHRVhzL0FqdmpSK3VHYmJBVERpWmo3MVFNMHBuOFVwTS9LVjNGQk40MmlwTmFhRHFKSWZTOW5rQnMxb2RmTnUyaTh4RjROZkFDcmVzM0loNGZMd2szVUxKSFpVd3d3bzBmL05YbDl3WlpzTElSTGJWUmRHYzZjT2RqQXU1L1ZCUC83MFRLSFVkZFhXdFp2RkxSM0t5N2Njc2phRmtYM29EaG1ZR3lCWFgxN1JBcEcvdXlvMEJUZ0JSUVR1dm5VRld6RnRWVjlWaklqTjkrMTgxblRQQ0lmUE0vRFZ0d1krUnlUb1ZFaWM3VlRYOWhsU3NRWGYwWmpSa1g0UjlyNlBxb1dCQ2NsMXBidCtydUxVNlJ1djMrRFArTmRlU0xHUU0yVnRmaHA5cUdKY0hSM0FRalY2SnNONmwwRGI1bUgzSnZUOXNSTHZ4YzRBcE1Gcm5WZlYwUFh5WHNFVjFGQjhqanJHTFAyaU9GNkJVUXNKbkhUdXI4cTdkQmpmRUhNK21CM1cxSEZRbVhOOWU0cXZQRmdMMTVwWm5BemVNbjlGU1hoMW4yNEhRaWQ3UGliV0lRWWZtemVsem1YM0xGQlB3dVZBNjlnZG14dmhpOEUwdnNLdUk5NnNybzFaTEpaRkltRWdrWmo4ZVYyN2F0eG5odTNoK0JDSlpqM3FOL1ZTN2ZIc2h2K0hjUjhRQ21pd0NIdlRGK0hrTkxZWHdCRUxSTDMxZ1pkallBQUFBQVNVVk9SSzVDWUlJPVwiLCBGQyA9IFwiZGF0YTppbWFnZS9wbmc7YmFzZTY0LGlWQk9SdzBLR2dvQUFBQU5TVWhFVWdBQUFCZ0FBQUFZQ0FZQUFBRGdkejM0QUFBQUNYQklXWE1BQUFzVEFBQUxFd0VBbXB3WUFBQUFBWE5TUjBJQXJzNGM2UUFBQUFSblFVMUJBQUN4and2OFlRVUFBQVA5U1VSQlZIZ0JwVlpOYkZSVkZQN3UreG5tcCtrTWxEYlVpdE1GSlRZb1VJeVlHT01Rdzg2VW1wZ0lDMDAwNmxhN01HNmswb3J1TmNhWTRBSldMZ2dtZ0tzbUpOZ3hNU0pPdEFTSlZremJWQ21tN2Z5MDgyYmVkRHJ2Y3M1OTcwNm5NQU1sbk9Uay9yeDd2dStjZTg2Y084QjlSRXFaSUQxQmVwbDBXcTVMTHRnYkp1M0Z3d29iQlFDYmxkT3RpRVFUOFBkcEdDVk44SHF0ZUFXcmhVdHFsTjZLT21QWVBUQWovUWpGRDhOcWUwNmI1a25IaEJDZnR5VGc2d2pBTVpHNWhYM3R4MkhXL2lYQTdSQldISVlSVVNhZTUwRFdTdkFxYzVDMEU2MStBV3Z2WGcwelNpUmplbUUwOFJ3blQxM0ZheCtPUXhnaDJORmRzRUp4V0thQUljcEtlVzdaTWRpeGZsamhKSmFQdkF6bjA1TjFBczZOWGxqNnp1dmczMXpGMStkdVlLQy9DNmFvRXFCSDZzZXF3NVVObzJFQ29UMVB3ZjNxUzNVZzl0RUlmenBCbU9jcGtoa2RBVjlOWW5KcUNaK2N5bURIOWphVVhBYXVFQWw1RFplMFRQWXVoUERuYWsvNEtrb083TWQ2NEZJVTFmUUVndnlkVmxjVWVQOG1MMTc5WUp5OE1BakVJSUlhQVpZVWtGRGdGUlR5S3hDUzVsTHZsUldaNlpSZ1dpWW9HSlEvcTEvVklTNXpqdUFWbmRUWjJ5c3FMZG5sVlRpS3dGV0FQLzFjd25LdWpOay9CREsvQVBQekpWeS9RZUF5aUtwTWptUnpLcUcxZEZwSHdUTE1PUmppMllXSldRVk83bU1oWDhHMk9GMG9BVkM1NE51TEJYU05HM2grZHd4YjR3Yk9waDI0WmdoUFAya1RnWVJ3SENyU3ZDTGd2RlMvdndqN3hSVERwcGhnUDgrdS9iM2taNUtPVmFvZUZvbEVlRXpnWWMvamNleWNkR0g5czRnRm80WWV0d01ZYktkdldSOXljUkdpV3EwVDFINU02d2g2clNBaG1MbFZWTjVycWE1NWhGMmthRHg4OTFzTmc1MVJiSDBpaExtY2plTHRHUG9LRGhZVzh1anNJQWdDRHdwTnFaZlBieUJvRUhIWENIUzJld1JjaEplbzRFcTJIYzVxQk9GNEhCM2JwZ25jeEhyUllnT0pGaWFZWWFaNDJ4WWFTaHVpME5KbnUxaWFXa1BxQlJ0TGJoU0o2UXorejhYUVROamFUUGJxWmI1T2tIcW1HOWR1NW55SDd1SjQ3dzBiZjEydjRkZE1GT1ZLQVVPdmh4Qk9WQm1xS1lteDNqWis1N3lvbWhwS0pZTTllWTlCZDVlRlF5OXR3YzdkOHpoMnJJaWVYaE1kaWViZ2JHMFBIdEhMQzB5Z3VoOUhrRHF3b3lVSnk5R2hFUHAyTmYrbXJVUXlDZE12VVpiekJ2VUxUdmtQdkJwNWQ2QWwrSU5FQmhvK2UwNXZuV25zUlcrUjVsTUh1bjBTcVk5dkhwekZQajVDOTcrUHArcHQ0SWtpWUNhOThmRTdBMFN5WDVFd3o0Tm85Qm1Ud0cyL2s3S01CWmozUERpajhEc3JKcWV5NkxlUHd2TG02cFhMbzJ4d1c4M0RCNEdiYjhOWXYzY0dIOVdMWmsvbWNFQ2lmdUd5VE4ydGRBbW8vQW01OXA5dllGQ2JpRHhMVDlsaGlNaEJiZHIweVd3UnRucjB6OGpOeTJYNUNQOHVoZ09BWEFQZ2RMREh6MlBpZmhoM0FMYTJMTHZ1YkF0dkFBQUFBRWxGVGtTdVFtQ0NcIiwgWEMgPSBcImRhdGE6aW1hZ2UvcG5nO2Jhc2U2NCxpVkJPUncwS0dnb0FBQUFOU1VoRVVnQUFBQmdBQUFBWUNBWUFBQURnZHozNEFBQUFDWEJJV1hNQUFBc1RBQUFMRXdFQW1wd1lBQUFBQVhOU1IwSUFyczRjNlFBQUFBUm5RVTFCQUFDeGp3djhZUVVBQUFMMFNVUkJWSGdCclZZN2J4TkJFUDcyenEvRXlDUXAwaVlVU0RReFVBUzZSUHlCd0UrZ1FGUWdUQTBSdHFDQWpnWUJWZElqQ2tLRlFFcGlrS2g0SkNLMGZ0UUJuNDN0MkRudWxwbjE3dmtjWThzT2pEUTN0N3MzM3pjeit6cGdpRWdwcDBqdmtXNlNGbVJYS3JvdlF6cVBjWVdkTk1Db3NqYUlTUHdGL0JhWkxPa1V0dy96MjJodmJNQWxLNnRWOVkwOU53YzdmUmFKbFJWRWw1YU5xME9hRTBJOEhrakE1ZERnQ3JEeDZDSDhjaG4yN0N6RTlEU3NaSkk4QlB4NkhaTFVLeGJaQnlkZnZFUWtuVFl3V1NMSjlSSG95QlY3NDhGOXRKNCtRWFR4QXF4b1ZIMTBORldwMVc4MjhYdnZHK0xYcmlONWQ5VU0zemFaQ0ZOek1sKzRMQXplZnY0TU1ZcW9BeXhoOVZkU0UwaHRCZHFmUHlGeDR5YVNkMVpOdWM0VFNkRVFySkc1NnUzdXdMbTRpT2pDQWlMSkV3cldNcWxTS2JnOEJsNXFVaWJ3Nk9uVmZzSDl2b2ZVbTdkbVhyYUk0SkxRMFJlNHAzTG1ORVNwaE5oQ0dwWmdVSU1wZ25wMll0YklvVko1Tk9qdTdzSmFXaUtTZHliUjZRZzlycGhKQllGenhPTG5ENGlKaWQ3YXkwNURoTURSNVliVmFpdGZMNTlYV0RxTERCTmNWZ1N2TjlRSE52dnM3MFBNekZEMGd1c1h4QTdUVnRZUXkwNldqcVA4cGNiU0JNdE1jSTdmL0oyZFR2U3M3VFpBSkpLeWdHVnBrbkRJb1RhUEhSeEF1RzVBNEwzUG05RjVKbEFieWkrWEFnSWw1S0RVdHJza1F2UUNzL3ArSndzVEhHTTVUZytCa3NNUEg1VzFDWkJMSTBULzBod212T0ZZUGM5VDFnZ0hYVlF2Rk9XNG9JTWtFZ25pZGdLQ1dDeUcveVVoZ3E5TXNHMElaTTlrSGwvaThiaDVmY1VialNlNXdxMHFuWlpjdytPVWk0UHplY0pKWm1pSmF6bGxFUkJQK1JhM0ppY25nOGthSjV1d1R5cVZNdDNyNGJOb0h2cXdhOUxwMkdxMXhzckNnSE5wT0VpRURqdDFsdkVMbVp6SklwRklqSlJKK0J2MjBlQXNPWTNaZCtGa3lmQ2xvK2FpVHBjSzEzVlFKZ3pNSzJhQ2RueG81VEI0RmtPaXl1aExYWW5ydXJMUmFNaGFyU1lkeDFGS2kwSDE4ZGlSSDRFTVJoRjk2YS9MMFdWVC9zUGZSVVlEVkVLQUJkMlgxY3Q4b1B3QmVFNHYwSE1uTTFRQUFBQUFTVVZPUks1Q1lJST1cIiwgVUMgPSBcImRhdGE6aW1hZ2UvcG5nO2Jhc2U2NCxpVkJPUncwS0dnb0FBQUFOU1VoRVVnQUFBQmdBQUFBWUNBWUFBQURnZHozNEFBQUFDWEJJV1hNQUFBc1RBQUFMRXdFQW1wd1lBQUFBQVhOU1IwSUFyczRjNlFBQUFBUm5RVTFCQUFDeGp3djhZUVVBQUFOUlNVUkJWSGdCclZaTlNGUlJGUDd1dmUrTkptcGpvV2dXTXlEUm9wd1VLb2d3bzJXUkJSSFNydHEwQ0Vwb0ZTVXFGVzJEQ0dxbDYyalJ6eUphV1FhR0s5T0NJQ0kxaWpUOEdiU1plZlB6M3UyZSs5NmRHZk1IWlRweXZIL25mTjg1NTk1Mzd3RHJpSlF5ckxSSDZhRFNDVm1RaFdDdVMya1VteFZ5Q2dBMkt2MXJFYkZWd0srcHBsZHBtTVpqMHhrTVR6bTYvWlB4dEUxOXBVRFROaHRISXVXSTFZZU1hMXhwSDJQcy9wb0VWSTRBSE5taHQraE9OV01tNGFKbWk0V3FNb1p5aTJzUEorc2hsWlg0dFpRakh3enNtWVlWaXhtWVhrWFNad1o4bGNpUnVITWJpK2M3WVNuQVNFMFpxcmZZWU54QzJ1Tkl1MXozSzhvc05HMHZ3ODZ0SVN4Mm5OUStob0QyWmhsQlVMODhlUHJ4STRSYVd1RkMrS0FlQzFxT2pPVDVQaW00UUdqdlBqZ1BIeUJ4TjAvU1kvYkVaRUNsQ2VjK2prdEhHVmtOOVJESlpBRzB1SFdMK3RKdldUSUJlMGNqSEJVY2xUYll2MzVORURCZG9NSFN1Yk9NR0lVcU5GZE9Cb3d5b1AzVm1iancreTdMcjR0RUVzSVN5ZzlJRmJJNFJzZWM4TTdReUUyTWdOWE9hQ00yUDZlaW9neWdBWjJjcittY2hHUEdycjlHTml5VkJKOWYwT1Z3aDRaTUZpUmROSGRhbjVwUHJ5RHFMRzNFWjJmQkVva2d5b0NrU05ORjZ1U1l0c1hjck85TFdDOWZHSUoyUy8xcm9aNzNlUnhzMVBFM0paMEdGRWtxVnpqSFV2MnhsWitOT2lEUXRpeWIxYjQwZE44Tm1lVW9EellFY3ZFSFdEVkg2UFV1aU01cUZVWVdTWFhXVTZvc2FWY2lveU9tRXNsOFMydWtaRXZVUm1VOG5pZXdUSStGMWRZZUtBZHZ0T0ZWY1IySnprejZ1aEVwSmpGQ0dVenF4VkViY2ppRlVvWEFSU1JxaG5FcklJaGFuY2ZoTlh6Ri94QmV1RFkrVUFiNlRJbllDWGhUV1pRcVZFMzdWSWNaUGljQ2Zmdnhpa1BnN2tGOWVaVUN6aUlSaUtQdFp1b1pWemNmYmZrYkdsbVhiK2hqSndQanpZS1Rsajk1YXFZR0ZQYWt1WXN1S28yTDFqWXcrd3E4THhsc1Jrd3c5cTF1VmYvOTFOVnZBM1UwQVRHWkNSRzlDdDUyM1hlU0c4aEZTbTBoRkxoOXM5dk05Z1dZS3g2Y1h2ZzNLN3l4TVZ6NnZoc3p5ZUl2V0g5R3kySnZyaFc0WjQyQUYrcE80TDBvOHZnbklQMVk2T3VieHVPL1hiei82ZUxiZ3FkZU54KzhVcjJTelhVQ2h4c0ZZblhDdUs3NlpLNlJ0WDcwQitUR1pWQ1c4T3VpS3dCWUtBS2NDT2JvZVF5dmgvRVhXbzgvMSsxNGVZRUFBQUFBU1VWT1JLNUNZSUk9XCIsIFlDID0gXCJkYXRhOmltYWdlL3BuZztiYXNlNjQsaVZCT1J3MEtHZ29BQUFBTlNVaEVVZ0FBQUJnQUFBQVlDQVlBQUFEZ2R6MzRBQUFBQ1hCSVdYTUFBQXNUQUFBTEV3RUFtcHdZQUFBQUFYTlNSMElBcnM0YzZRQUFBQVJuUVUxQkFBQ3hqd3Y4WVFVQUFBUjNTVVJCVkhnQnBWWmRhQnhWRlA3dTdNeE9zcHZzYmxQVDB0WmtFelVJVFJwYm81VkVhbHBVK2tOUjhVa1JvVVdmZkRGaWZha1BKaTk5S0FyNklnU0VSRVRzZ3doaW9iNDFhVEZTV3BzYUcyMnhOVDlyZjdaSmRqYVQzZG1kblovcnVaT1p6VzZUU01VRGgzdm16am5mZCsrNTU1NFo0RitFYzU0Zy9ZajBMT2tVWHhITm4rc2piY0YvRlJIa0F6eW9ESzFIeE5ZQWY1ZUdmdEtFZU5iVHYyQWhOVXJqWlRoV3p2TlJvMXNRMmRDR2pVMTdFZHY4WkJDYUpSMWdqSDI2TG9GSWh3K096UG1mY1BQa1p5ak0vZzExVXlPVVJBSnlYY1R6czNNR25Id08rZWxaRVlXdVUxK2l2ck05Z09rbmtvRlZCUDdLUGZZL1QzeU1tYysvUU1QdUxraUtVdUhJZll0N2xyQnR3NEErZVExTmI3Mkp0ZzgvQ09EZUMzYkNncHpUTUM3U0lzQlRnME9JMDRxWTd4Q3Nna2tNTE16Z0Z0MHlYYURaeTcraStaMjNBeEtScmwxRU1oMFFETkZ3UkorNGlySHVGeERmc1IxS1hYUVpuS0xKRVZLOUJQbVpLQXltSW53aEEzZlI5ZmJCL2YxWStoTDAzNi9qNlRQZm9lRzVIZ0U3UW5IN0pILzFSOFRNbGRlT0lrU29JUUxrK1FKWTFBSlRTMlFiY0VNbHVFb0prZm9jbkZxYU0vS2tCa0xOQkc4VUVKSmwwQVp4a3pMZ3kxNVI1aElacnl3ZjZoaUtzeW1JQ1NlamdSY282QWtKYklNTktRbUU5eW13L2xwRTZaSUdaYmVNVUFlOWk5dVFPMm5rSmh3dDY4VnFoSk01TnhhUTlJbTVsNFUxZC9xTTV5Q0pnNXRmQUNJbUFYUElUOGt3Yittd2J5MUIzdXpTcm1qMXVRTE1xNHNJdjZpQ2JYUGd4aXc0QzVubGVOckZ2ZE0vQmdTOVltNm5zSlltSmowSHIwYk1FaXhiaDhzTGtCNEZhZytvdEVNZCtVYUd1V1F0dEJzRktKMEUxaWJ5YndLVU5yZFFwRmpteFd0VTRyNjB5UEF2bEVoUFZjVndDeTZqM0ZzMlhNZkV4WTVXVE0xc2djSERhRzNXY09qT0pjZ212VGNkMkNrRGxYWHZMT3BWQkt0RU9FbXhFSnkwN1ZWSjZMRVFzaXlHM3ByclNKdjFkRGNZYXA2UHdyVnRXRE4wK0ZObU9lNysxaUN5TWkyTWNEeFc5ZHE2a0lmOW0wRzV0eWdQRE50cTBwaXdWY3hLTGlSSmgyTzZLQkY0NGRRQ0ZRU3ZBbzRrbXdJeld5Wkk3T2xadFJQM3JnWHo1RjBzZlRXUFp6Zk9vVjFOWTNzOGphNllodUlQV1dRR2RhUjZrcXZpNmpvN0F2T0tJQmdWVnVQaGc0RGZBTGovbGhjNXd2dmpVRHNqeUgrYlFYc2RYYzlhT3BzUkhmSWpLdFEzR3NBZmoxUDNZK1VZSVpzT0h3ak03NW00REdSbzRtbjg0S3ZRei8rODBpSzJLcEJlaXNNWm5JZXlQNGJ3b1FTWXpPQ2NXNkxVWkFoSkJ0Y2NNSXVYVzBZNCtUQzZKeThHQkswU1hXZlJOMGE4cCtQSHFsYkNiMU45ZjYxNWtmWWZSZXJkRG1YVlJ1bGFjZG5obnUyQmwvMUpkM3d6SER3T1YvYWlGdmpOYmxwMDBoT2ZyRmtSUEN4NlVnaDh3YTZlOTdYNStQdmVJbEhSN01RWmlHWTJUWVBYdzF2SUlVbU9RVkNsc0JKZkZ6eTVBaTVrd01kYzljSHBwMEY4ZEpDam16MzUrbEdZTTZrVmd2dUFoY1QzZEJQNHNjb3FGT0Q5YThVRUpIMCtpWGZEOC9QajBHK1Bvcmg0QXlYamp1Y1RVdW9SZldnbllsdDdhZHdWaEs3NXlWeFQvSS8rTUg5d09jdi94OTlGbncrZ1ZRQk8rWFA5ZnBtdksvOEFZaVdNdmYxMmViTUFBQUFBU1VWT1JLNUNZSUk9XCIsIEdDID0gXCJkYXRhOmltYWdlL3BuZztiYXNlNjQsaVZCT1J3MEtHZ29BQUFBTlNVaEVVZ0FBQUJnQUFBQVlDQVlBQUFEZ2R6MzRBQUFBQ1hCSVdYTUFBQXNUQUFBTEV3RUFtcHdZQUFBQUFYTlNSMElBcnM0YzZRQUFBQVJuUVUxQkFBQ3hqd3Y4WVFVQUFBT0pTVVJCVkhnQnBWWkxTSlJSRlA3K21kRWNzMlo2MmlKem9pS3lqQ0lzbEI0RUxZcWlvamExQ0lwYXRjbW9OclZvM0xTSUZyVUpnc0JhRlFSQ0pDaHROSzFwVVdoYVk0bUlyNGg4ek1QUmVUWCs4M2ZPblh2LytkWFJsQTZldWVjK3p2ZWRjKzUvN3hXWVJ3ekRjSlBlSlcwaTdUT3lFcEpqMWFRZUxGYllTUUlzVkdybkl0SnlnRitqeGt2cTVuNnc5UU9HM3pRaTBPcERhbnhjckhGdUtJRnI1dzRVbnppR2xRZXJsR3VZdEViVHRJZHpFbkE1SkxnQTdyMy9DUEhCbjFpeWRnM3kzRzQ0aWdyRnVxbkpHUFRvSktMOWcreUZQUytmWTluTzdRckdTeVExc3doazVJSzk1OTRERER4K2lwVjc5OENXbDJkWmFFakxFQmJiVTdFWUl2NGZLTGw4QVZ2dTNGSncxMVVtbXFvNU5lMWNGZ1lmZWxKTEpkZ3VKalZMRkpyOFZmQ0dSY050SGRodzlZb2k0WEx0SnBKK1JWQkx6Y1ZJNXpmNEtvL0FWVjZHdktLbEdYRHlwb1c4Q0pvbTBVU1RJVEprUHFuSUJDSmQzYWhvcUZQNzBreCtoelVaZlIrUHRKUlZJRGs0UkFRY3ZTWWdNcTBsRGNNc3FtbW01ZkQ0VnovYys2dFEwVmluRnExdzBNL3B6S2I2a0NCd085bDZNQVI3Z2RPc2VSWktrMXRnc3BpWjZNa2tiTlFQRVU2d3hhZXlxT2F4VTJ5TjFqZUlCVGJldUxFQTByRW9hUnc2YmFJdTJqZytyOWJRNDlUTlBtczZLdGNGZ2hsL0NtQ2t2bEh4SCtJTWRyRTEwZWtYQzBTQXlUOUVFb1RkV1VBRHRrd205TmU5dEJDRitSbzhnekZrVTZEbzR3bWtVeW16ckNINnhLVjRtRUFjS0M2UDlZc3h5R0dLbmV4MnZOaFhqTGRsYmhSUHBHakdqbGRiMStOczJ4aU9kd1JncE5QVFNzYisrbmhrR3NFc3NaNCtROWR4enZjTHl5TUp2Tis4REVtSERaZWJobEhWRzhudXQ4VnY1dFhBK2ZlemtlOWFubU02SzkzckNyQnBOSUd0SXduMHIxb3liMUNGcFNYS0REc2tnY2Q5b0FyUnpxNDVDVTUyaElnZ0x1enY2NXlZVDRyb25wTHloVE40eDlZYXVyaGdPYUV6UllHemJQc2RuelZ2OVZsNzRxZ3lYL05CNDAwT2NhLzkyQmxFV2ovbXJPVy9SRjBaK2FYclVlbi9wSVkzMnVnNDg3M1JMSHEzYithTWZqRWs1UytmSzRobmZCZlpaT2NTYVpqM3dYUDdoaG5OWW9CWlM4bTNxTHlNa3hkdkE4OEpBbVpTQXg3S29uUVJKRlp3cm9DVUdvazU2OEh4VXNPUERpYnBaUHZQWDBKeVlNaWMxMllBczdnT1ZCTDRUWEQyRm5CdkxoOUZVaTFKeEFrUDArVVZvTHRsa3E1eVB1MHNEcGRMQUs2aXI4VUNuUFBKekoxMjV0Ri9aaXhjbW96LytPK2lXZ0tFTElCOWNzd3JQL001NVM4aFl4K2xTZUVwRndBQUFBQkpSVTVFcmtKZ2dnPT1cIiwgUUMgPSBcImRhdGE6aW1hZ2UvcG5nO2Jhc2U2NCxpVkJPUncwS0dnb0FBQUFOU1VoRVVnQUFBQmdBQUFBWUNBWUFBQURnZHozNEFBQUFDWEJJV1hNQUFBc1RBQUFMRXdFQW1wd1lBQUFBQVhOU1IwSUFyczRjNlFBQUFBUm5RVTFCQUFDeGp3djhZUVVBQUFSY1NVUkJWSGdCcFZadFRKdFZGSDd1UzB2NUtGK0RmY0RjS014RnhFMGdFK0l3QXNzMjNUU1J4Y1JFb3pHNnhXeUpMSGFSSDJiUjBNMjR6Y1NFK1VQQjdBZHpTdUl2cDFHalpqcUlKTXhNWmllRDZMSkkrWkNFTUtEbG83UjkyL2U5bm52N3ZxWE1GbVoyNFBhY2UzcnU4NXg3N2xlQkZZUnpua3V0aFZvWE5ROWZFcS9oYzFKejRQK0tHR1FBM0sxMEpDTmlDY0RmSU9XaWxpdjYzVGR2NEd2M0ZkTDk4QVVXWkl3amZ6MHFOMjFCWTlWT05EeXczUnpxbzNhQ01YWTJLWUVvaHdFdWdVOTk5d1dHcHlleFBpY1BlUmwyMk5QU1pOeENNQWgvS0lDaDJ4T3lmL0gxZDRpdzFJUnhFY21KL3hBWW1VdjJMOCsxNDdYQkxqeGFXZ2FyeFFJdUE1bWhLVlphWkpQeXF5RU0vT1BCa2ZxbjBQTE1peWJjTVhNbXpLdzVLYmNveTYxVEgyRHNrdzVjYTZ6RHBaSjhjT1dPaVVZWnpLeGl1bS80RnB5N0cwMFNVYTRxSWhrMkNUcEl2VExYUDREZW5YdVFzNzBjVm5zbXBqTlMrVWVQYkdha1JReG9RQlNQL3FJRFk3UEgzS0lmZytNajZHbytUZXZ5c0t3eXhlOWlSdlllNGZtbHZCcWgwVEVpZUVpV1JCUmx3V2JobmR1SzBGZVV3M2g4OWpGMDQ0UCsveGdiUXNQV2JVUnl4Z3pLczlESEFXSE45UFFpU09BcFpHc3pYdGdmdENEb3NjQyt5TmpobnB2WTkwUXRJdnYzTHBXSUxaVklLRFdzWXI3Y0QwM1hNVFUxaFlLQ0F2R1ZVeEEwQ3V2MnQ5OURsRnVoa1VPK1NUeDkySUxmaitaaUVUb2k1TC92cTU4eGN2RkgvWFJvVnBuVU5jUnREbGs2cjllTFFDQWdmUjZuRTYydHJjS3NGd1NWd3Bydkg4UXMxOUVVbU1IdUFndlcrWFJjQ0Fmd21KcUJDaVVWT21XNWlVRnhjUnZhMURuK2F5UmtycDhFRG9mRE1kTHU3bTdUZEFnQ2VhQWkzaEdNUHUvRmN5d0xEVldGYUQ1alJmdlpEZGlhMTR2d2dBTFB5U3pvWVFYNUZQczJiS3dqclBKUFEvTk1wNUp3SGxzWUtUNmZieG1CbE1pOGdoM2ZySUZXQTd4L0lRdDFkVFc0T25vLy9EL013OVlwOW9CbXRLaG9sTEdtYVZoTkJNR3dZRXJOeWNabmZ3ZWdhaFU0Y3FnR3hhVTdzRGE3SDIzbkp2QkMzSUFKcnVIZG9JL2YwTU1zR2FqRDRZaE5Ka2FRKzNndE5ycmRlSG5mTlNocUg4YmZzbVB6eVZrY2ZOS0t5WFk3c3BnQ3Q2Yml2ZEFzbitRYVd5bnJ5c3BLMDd3dXpvR0xqQll2YmRQcis1L0Z1cjBxcGkvWlltYzN1MXJGM0crcEtEeFl5L1ZEQnhnSFR3aktvMGNCdXFaalEvRXU1QmNVQy9jeFFTQVcyU3Q2YmlLWTY3a2l3VTBDMjFyR3Q3U2tJNy9ldW1MV2drQ25yYWFuYklTMTVMTHBMbEZvRDRzbDc1YTk0ODNMOHNzc1MwSEY1M2EyR25qOERDeEZINXV1OCtJdVVvek9xOVI4WWgwY3g5K1VnWVV2cGFLcU01UGJpcFRWc0tNSG1qNlVOVWZCYkdYQ0pkOEdZY1JmMTA1Uzh2ajVMbi9JczR2Ym9uY2JTL0FxM1ptNUlNaHJJb0ltMDczOHVvNGpjWkZxa1ozUW45QW5hRUJrSE1ZbEtuWDhYU2Z0dEJvd0FtZnBOZVkzNGxWem1aMUVUNmJUSUpFbm5BZXVBb3MvRWVGZjRJSk1PSlZzSUwwYXlOZ1RENXp3eVV3eWJmbm9uK2QzTDEzOEhuNWRPQTBBYnh5Z3gvQzVqRzJlVlA0RnIxMXc5cHVaeGJrQUFBQUFTVVZPUks1Q1lJST1cIiwgWkMgPSBcImRhdGE6aW1hZ2UvcG5nO2Jhc2U2NCxpVkJPUncwS0dnb0FBQUFOU1VoRVVnQUFBQmdBQUFBWUNBWUFBQURnZHozNEFBQUFDWEJJV1hNQUFBc1RBQUFMRXdFQW1wd1lBQUFBQVhOU1IwSUFyczRjNlFBQUFBUm5RVTFCQUFDeGp3djhZUVVBQUFRSVNVUkJWSGdCcFZaZGFCeFZGUDdtTDAyeVNYYzNiYTFwYWJyRWJscWoyQVJhMjRmU0JreWtMOVlXaEZwODBPZUttQ0krQ0lLYjZtTlRoQmIwUmF1aUx5S0lQNGdQbWhvVmJKUFdiRXF0NEE4Skd3Sk4wcGlzMloyWm5aMlo2em16ZHlack5sc3FIdmh5Lzg3NXZudlBtYjAzd0YxTUNKRWd2RWE0VEpnU3E3WWs1d1lKS2Z4WDR5QkpjSzkycVo2UXNnNzVpOVJrQ0FrZXU0V3JjUExmQkszd1Z3SWYxZGdPcmVsQk5NVDdvYmNjQ0VPWENVT0tvcnhaVjREVElja0RRbnYrYlFobmxnZzNROUhqVU5XbUlNVDNpeENlQ2I4MEEwRXpzZFJiSkxnbnBNbVF5RkNOZ054NW9HN1BYWUJ6NXdQb3NWNGkxYUVvZ3NDdVFvWUk4dWNZRWlNaDEvNE5EVzJuMExqMWhaRHVUSGdTSmN3NU5ST2NGaVl2TDM0RW8za1BrU3RnM29DYm9iYVJzeVVCS1NMb1JFRFp2QWxqMDdPaENLZXJsMFNtVmFuSXFVbDQ5cTl3NWk5QWI5d0NWYkVsTEtpZ0ZrUnFkQkRTUVQrWVUxYWhiOWlLTXNWeWFtWDlMZ1gxa3J0L2pnZlc5R25vR3FDcHFpUTJBeUtGQ0JXVTRCbjc0QnVQUUJIaG5CV0lhZVNyYVRvQndRYWw5ZkZucmxQbk9JL204MlArOWVXY3I1SlRvN3VvR0VaVGtIdk9EV2VuV1c5Rk90bWpNZW5QWnRrcis2V2dJcnd1UEFGWGxJUmxlZkQrL2dtOWJWZjA5c1JCWGh4a2dTZTU5MG51Sy9YVE9VZGxBVU8valkwTnlVcnVwUjNZdkErN21Bek5HREYzYTltbEgyWFJLN2JpNUdHWEhSSURUc1MreHVtS3dCRVc2T0hlbi9sYlVMZ2l4TnFUUElTSGt2c3BWWHFsa21RUEp4Nk55STYybjhMT1dGYzA5b1NMVzh2WE1MWXd3a25IalR0WHdxV1VMZ3VDT1d1bThxVVFydjAxZ3M3V2JwemMrVHlxVFVpeHpwYnVBR3hsNGVERHFmTVlYeHlKNGd0dVBoSlFvK2pxbnh6MVA4NWR4Sm5yeDdCUW1rVTlXN0JuOGVya00vaHk5djI2UGl3d3paMFdJMTV6YitUTTMvSHl4Rk80YmMvVUJQNlNIOGRMRXlmd3g4ck5tclgyMkk2d3V4d0o3TjEwRU91WjVSYXhRVzJzbWUrSXBlRjRwWnA1M21Ubnh1NXdtT1VhakJMNmp1djk2RG8zN0dxby9ITEQwelR0NzBQeTBCWTlDTDVLeGR1MkRXSkhCMXIxQkY3NXRzdDN4My93ZVkycjQ5TWZIdXk5T0tESzdId1czdm1CbVFPUENiUFJFRGFoSkdHKys0NG9GQXJDSEQ1WG1ZdTNDR3NvVTVrN1B4ejVjUXpIRm5mdnFyN0dVOEV1dzd2ZkhmMU9GTW5KcWhJcDBweDE5UEdJS0lUMTlFbFJIQnRiSGJNdndadk1SbTlFbERmNXdQQXJKWnpYejBhbnNOT2R3dTdZWGtNZTdUcjlnQ2pkZjEvZ3l3TE9HMmVyWDd6VXY0b2puejhSaW9TbnNPdVFWNmRtRFRuYklOWXpXc2lFSGw0Mkt5eks1MW9odXdxOFZocm9GeDZsc2NveWE3K3FtcE5BWHQ4ODlyOGZoZmZGNXhDVE55QnkweFduZUFMcTRjUFFuamhHN1pFd2ROMG5zOTVKdUNidmlYdTN5K0ovL0hjeEtBbVdxZ2luNUJ5bk5IRTNqbjhBd2JvS2hJcURVRFlBQUFBQVNVVk9SSzVDWUlJPVwiLCBqQyA9IFwiZGF0YTppbWFnZS9wbmc7YmFzZTY0LGlWQk9SdzBLR2dvQUFBQU5TVWhFVWdBQUFCZ0FBQUFZQ0FZQUFBRGdkejM0QUFBQUNYQklXWE1BQUFzVEFBQUxFd0VBbXB3WUFBQUFBWE5TUjBJQXJzNGM2UUFBQUFSblFVMUJBQUN4and2OFlRVUFBQVBGU1VSQlZIZ0JwVlpiYUZSSEdQNW16am1ibUt4eGt6WVgyMklqRlN3bVNzUlFiQlZNb1NEa29iWFlDeTJVVkNpbEw3YWJoOXJIYnZESnRsaHBId3JTVmx2eHpSY1JyeWhlVURRb3hCdFJRVEF4aXNhbzJkWHNack43Y3NiL241M1pQV3FpSzM3dzc1bVpNL045ODEvT3pBTFBnRklxUnZZejJXR3lhNnFFVVRNV0oydkdpNElYR1lKeXNXVTZJVEVGK1EvMFNKREZ1TytmT0k3YzNqMzZxVklwUFVmT21RT25kU0VpbloxdzMxdHVseWJKZW9RUW02WVY0SEFZY2syWTNiUVJhbWdJc3I0ZW9qWUdXVld0bHdUcE1haDBHc0gxUVZvRFZQKy9EVTdMUWt1VElKR2Vwd1RNenJWNjl0Y05tUGg3TTd3bDdaQ2VCMEVzdEFpYVRTOVJVUG9YQ0RMajhDLzNJOUsxQnBVLy9tVHB1cTBud3NhY0huMGNGaWJQLy9zUHZOWlcvVklRaXhUaDNRaERYOURqZGtEaStiTjk4TDc5em9wd3VCYVR5SUJyRkRrMHNjbUxGNUFqQWErbEJYSjhITktRQ3NzbWpJUnBXeS9RdGhqdXFvK1J6L3R3ZlRMWDVmeHRJWHZmTmJ2L211ZU5kMzBGaDU0T1VjcE1waWlBa0FkS0ZZT3FSL1FHM3BvSGZQbzVGSkhuY2prVzRBa2RYT2JjV3NXOW9UUDl3YUhVcTRGVFU0K3F5VWJoVlVZTTZST0ZGbEpadHFoSlJxc3BSMjgyQ3lrbC9FbWxEdlRlVkVzV3pKWnpYNXZKVStJczhCRzNmaitabG4rKzNpVWhKQ29vc1hVMUZUcXh4Y2lZL0liN0o5WjlnTHFHS3M0aGdpREFjREludmxqZks5WitNaDhiMTc3RHRDdFlvSTFiNTYvZUwwWjh3Zzl3TjVYRGpBcEhKMWlWSW9KWnRPUEcyaG5hQThjcGVKZEsreGg5T0lFYmQ3SjYwckcrWWV0dk13dm9EMnJnVmhxaGxDSlBJbXdPS1VoWkNsUDcvRHJzKzYzanNhajlzZU1LMXY5M3NWakd5Ykg4WXdLbDJBb1I2aFF3R1NodEZqNkpQaCtsOVZ3b0E5eVlGWTJnSEJ3OU40STNWdS9VTm5nN3JjZldmYmtBSTd0VzQvVG1sWnE4ZVhiVVRrOFdCVmEwTmFGY0ROL1Bhck9vakVqS2pVdWI5SFIvMGJ4YSsrb3NoK2dvV2NmM0gwYXhMTGJONTNLVG9qeWhWeDRjRk5sTVJMaTFuY0tKZFFxT3d1NWZscXYydHh1QVFweDJDdjRZcURIS0kvN1Z6eURTdlpUVVVEcktRVU1jcWo2dVM1WE44eno3WnE2a1d1ZHo0d2ozbktadWZiWVV6cGdYUU9ZTTFNaGZVUGUyMjYrWXNaWFBJbWs2YThpU0l2b3VaR04zcWU3TGhIcDRITGk5QVRLNFZ6aDF6ZDNBRFMzQVNzVUI4a0t3eXdwbGVXTG5vYUZicnpYb01aeFBYVGdKRkU1V092a3VxV0R3RzRIY2pXSStoQWdKV3ZIcXBiUWgybFIwYVpnOFlUdFRYWmx4STZLL2NEVjJDbml3bjI2aGZpZ1c0MEduQm1EQ21TdkR4Rk5lbWRPNHJTLzlyYXA4SEZZdjhlOGliZ2hHUTRUWHpGakNsUG0wZUFReERoRXR1MUkrZ0FBQUFBQkpSVTVFcmtKZ2dnPT1cIiwgS0MgPSBcImRhdGE6aW1hZ2UvcG5nO2Jhc2U2NCxpVkJPUncwS0dnb0FBQUFOU1VoRVVnQUFBQmdBQUFBWUNBWUFBQURnZHozNEFBQUFDWEJJV1hNQUFBc1RBQUFMRXdFQW1wd1lBQUFBQVhOU1IwSUFyczRjNlFBQUFBUm5RVTFCQUFDeGp3djhZUVVBQUFTUVNVUkJWSGdCcFZaOVRGdFZGUC9keHdQQytLWk1DM1BRNFdUWkVBSWF2MFlaSmRHWlNmaVlMb3ZPS1p0WmRHTlJhekljUmplK1lyVFpNbzBoTHBuQjhjODBMaUFXTnhYVTBESzJmd2dMRzNNTE14bGdITklDbzBCYm9MUzkzdnY2WG1rZHhSbFBjbnJQUFRuMy9NN1h1N2ZBQ2tRcFRXQmN3N2lMOFJCZG9pbFpwMmVzd1g4bGZraDJjSzkwT2hRUVdjYjUyMnlwWlp6QTkrYStVUmhOdDlETlZ0dXNTN0xScE1ZaUoxT0ZNbDBHQ2g5TlZZN2FHTmNSUWo0TkNjRExJVHVYSEgvOFpSOXVqMDhqS1Q0V2lYR1JpSWtLbCt6c3prVTQ1bHdZdWowRHl2YmZIdDhtQWNwVXkwRHE3Z0tRSTVmUUcwNzFvdkdiYXpoWTZzWURTWE53ZVVUOC9OdDZac01PRUVpcjd6QmxlNG9TYlFyZHNkcU82TTM1aXI5M2xFd0VwZVpLNUExZjlPSmt5M1c4OFp3TCtldUhvTnR3SGVxNENaVGs5TU81NElWajNpdXR6bmtQTmoyWVNCc3JIOGFPR3ovQVc3R2J6Qjh6S1BIV0tEMFJGQVd2K1pXYms2Zy8xUWQxY2d3eWt2OUNXb0lGNlVsV0ZHWGVZTkhPTStNNTV0aUx5UEF3ZXZqVkxQcCttcFdxcXZVMC9JS1ppQ2twV0dRQTdrczlrUHQzbWd1aWpMU0hiMTQ0MU1IeUZsamFBaXpUSXJvSDc4ZWFSQ3QrdWJZT0Zwc0lLK09DdkNSYVZaS0srNzV1Z21BeStTckFmOEpFYVhVeEVMRk55elU2UHVZaUU4cVZwbzZNMmFXazdzeTQwTnk5RVM4OU9ZRFBPbk5obVluQnBWdForS2d5eDdQRk1TaEVIS2dneEc3MzlVNnV1ckRna3NyaHZuZ1I3b0dyRUxOenVGclBBY3E0WkRTUCtIck91amh1VzJDVFE5Qmt6b0lxMm9tOHJBeHFQTElPeVNjK0ZNU2VickkwRzZ6SlZENW1zMEdJaTRPN3BwN2VWRVdRVFQ2RFFnNmF5NldydjAvS0xSR3dzT2pGQkFPSkVBa09WVHhGVCtaT1VmV3Vjb2lkSFFSemM0RFRJYk5UV3NuRUpMemFBdS9ZMlRPME10S01sNDM3bEdaclJMa2hHQjYxQjMwVnp6NlJRai9mbjBsV0g2dW40dm52ZmNOQUFnejRyREttMGRHczdzZHA1eVBKZE4rUGU0aDFkcHhvWXRjR0FRUVFRVkpjQkJxckh2ZVd6bDRSSW91TEtLWnRBa0tRKyttdGRMemhDSG5yc2dFdHJjWXdVTDhiUDNHQVlZNFVIeE9KN1RvVk5UeXZwbXViREVRMHR2M0ROQ0Q0K0FTNjhNRlIycDRYaXpmYnkyRjFXSVBzTklucGltanpBM3pWb01XYXl5WkU3WDVkRUdabVFnVU5UNzdXWXoxaENOUDNHWEMydlczWkFITFYyWXJZendITWpIVVBPY2JnT2JpZmtCQ09LWnNRMTlFNno2K1BxWVZYV3JmaHp2eFVzQ21WbVZIWmhtSkZhK1QxOWQwWjJka2dtL1A5WlF5SytwbXQzdEZ6YmQ3WFZuV1Q0dGFkaERsSEtOSWtwRUduMFNyYjcwUjJLZG5ZRjJmaVdZUlZIWVpuZStrU0NJdDY4ZDFxMmxtUVRnOTA3QkwrbkIwbCtCZHEyM2xHRVp1WjcyRmxRdll5dHZFTUJBYkNBVHk2SXUvWVQrZXdWOVhyTFdsOU1XeEY1M0o1YXJaVUsvV1gzZ1l1QkY3WGVyWjh3dVhGbmd1MEpjWkM5RjN2VWF0emZPV281WFJyQ3FwUlcxaXRhUDNYdGY4NzRBcCtPWEhiY0cwQjJUZzJnRlZpRkFscUNybmJzUzVkSzBYT1Y1bUNYclhsbmt5ZWlYUjk4NzFwcEFmR3dmUG90d3hnZVBvUHlTWWhNbDV5eUtjbHdQR3lUK2J5V2ZzZS9XWjY3OVJGLzhlL0M3M3NZQ3JBNFpDc3E1WExHcEwrQnQwd2R2aWc3ck12QUFBQUFFbEZUa1N1UW1DQ1wiLCBKQyA9IFwiZGF0YTppbWFnZS9wbmc7YmFzZTY0LGlWQk9SdzBLR2dvQUFBQU5TVWhFVWdBQUFCZ0FBQUFZQ0FZQUFBRGdkejM0QUFBQUNYQklXWE1BQUFzVEFBQUxFd0VBbXB3WUFBQUFBWE5TUjBJQXJzNGM2UUFBQUFSblFVMUJBQUN4and2OFlRVUFBQU9sU1VSQlZIZ0JwVlpiU0pSYkZQNzJQMk5hekdrc08xcHh6bEhqZUlJNmlYcE9TQlNORVQzVVEwWTlSUkE5WlBWVUUwUnZVMU8rQkVYMUVCUVpHUFFVVWVSTEVSUnFVQVF4MmYzQkxtcGdobm5MeG5LdXU3WDJ2L2MvLzVTT1JnczIrekpyZmQrNjdIL3RBWEtJbExLUXhtRWFyVFM2WkVhRzlWbVFSaGwrVnRoSUEweFhtaWNqRWhPQTc2TXBUS09ROSsyUjkyaHBlNHU3Tkk5OGppdWRzb1cvb2ZLZkl0VFhMVUxndjRYR2RJVEdFU0hFNlVrSk9CMGFYQUVmYTQ2Z3B5K0s0cm16TUdkMlBud3o4NVJlOUVzQ1kxL2o2T29kaGFUOXRSUHJGYUdXTUpFYytZRkFlNjdZRzg4L3hKbkx6MUc3ckFSZXIwZXBDY0U2Y0diYldPTExlQkxQWGc5ZzkrWWxDTzFhYnVEMm0waUV5VGxOSFp5V3hxYUhPSHZsSlhrMFQ2TUpyU1crejZWWnFCRjUyWSs5Vy85RnFHRzVTVmMxa1hRYmdtYWFkanpwSE1ULzI2NWdXY1h2OE0yYVlSTm9ZR25Ib2RmU1JTZlpIcCtqNDNqeFpoQzN6MjAwZFdramdqVmU3ZjBPUHRseTRCYWhXSVJyVWVncEcwWVkyQXo0ajVGSWVEeGVaZHZZRkRFRWRYek42UlNiVEZGN1BrUnBaV0ZvTkk2Q2ZHOVdCTzZpU1pmM2hpU1dTQ3JiOWtpZnd0SWtRU2FvNTFWTGU0OXRUcUFmUjJLWTYrZkNDcWV3T2tlWnZST0FUYUt1TUVYQWlpMXQzWVlnd0FSVnZIcjZhbEI1d0NPV1NHT0FTR1lXZUdnbnRKK1pLa2hrRTN5TnBaQklwcHdZNzNiMG1aL0xoTlF1ZExhdWgwajF3bU1KV0ZZbU1Wd1A1Wm1PSURzN1hKRzBJbEdWU0FQcHRFVEsrd2NXMTkxUWF0NU1jc1VrdHpGdFcrSTcxMTBpa1Ayek80Vk0wTTJoYkcxcXdOUFh3enFQQW90TFo2Tzdid3pyYXVkak5KcWdzUHVSVzZSem93STFKYmdkVUljamxpYWdvaXh3OU1vWCtGQzd0QWozenEvRHliMDFXRms1RDNVMXhaaXVWRlk0YmVNeEU3VHpxajVRNm5qeUtSckQ5ZzNsK1B0UEgvV2hmT3paWElGNE1qMXRnZ3dXV3BqZ3RJa2dVRE1mZmw4ZVZwREh4WE1LSEFNdS9OSkZmcFFVRlV3SlhrclJPOWtBcmx0MDE3bHZ0UEV1MUZCTjNzZHBKSERqZnE4ZEQ2WHN3Zk1CNnFCSjlBK05Ud0V2Y2ZYNFdyTzU2TzVGWmRETjd1aUZEdnJjSDJOVlZURkdDWFJKdVI5NUhndVhibmJsQkdaUFFnMVZPTFN6bWcreW01MG1DZEowaXRlR2hPK2IzemREUlRRMWVEV0JWNW5EN0hidElnblR4SThPbm5RT1ljdkJPOVNmeHBCTHVHNGhBdVpaQzc5cVliT1o2TWtNYWhMN3lYejBnZnJVTzJvbFEvUmRSSlZPSVVXMW1nRHJBMys1Z1NkOE1pY08ybjcwTDhycFM2djhoWDhYUVEwdzdBTHMwbWRoN3ZtNU1MNEJXT3dmYVh5UXpOUUFBQUFBU1VWT1JLNUNZSUk9XCIsIF9DID0gXCJkYXRhOmltYWdlL3BuZztiYXNlNjQsaVZCT1J3MEtHZ29BQUFBTlNVaEVVZ0FBQUJnQUFBQVlDQVlBQUFEZ2R6MzRBQUFBQ1hCSVdYTUFBQXNUQUFBTEV3RUFtcHdZQUFBQUFYTlNSMElBcnM0YzZRQUFBQVJuUVUxQkFBQ3hqd3Y4WVFVQUFBUTlTVVJCVkhnQnBWWjlURnRWRkQvM1BkYW9ZNk1sTWtEK3NIRmptd2tCQkJ4c01DbCt4TEJrRTdlc09vazZrODBRRTZWcU5tTU10dU1QWFNWR3pESWNKakJzY0M0elpLQ0daS0tqVGpjVHFUQWNmb0ZJSTVrdVk5TFNsckxTOWgzUExmZDF6OG82ekU3eXl6MzN2SHZQNzV4enZ4NUFFa0ZFUGNGSzZDZE00RFh4Q0p1RllJVC9LM3lTY0xCVU9icGtJaHBZTHlKVXBWOUVXaWlJT1V6QzFwK1FsU1hSSDB0d2JxWEd4dlhCbjZlOFJYZG5tRWwxRXpJSkJrS3FHQm9nekJKK0YvMlRoRUtoMnhoakIvNUR3Q09ucHBucmMyL1o0WVBqTHJoWS9kaTMxVHZMT3pZVlpsOFNZMUhUcXZNNTBRaWhqbUFWOWhlSnBEbE9JT28zUk5CZmFHNkhPMXNQZ3B5WEIxTlNLbnk2SWovNDI5cXlybmYzVnpnZ3ViZ0lGa0hpSmR4REpHNlY0Q2cxdTZkbnJycXRHL1lhN1hlNFFicHRlVHpNQzdwc09KUmVkYW44NGFMWDZzeDV2Mmd5aVJlQTRDT0hQL0oxSWQxRWNGSy9TaExSNythaldqNGVlWWJSUElsamJnN2tZRENHZk84NHRFNjBaWVU3SFcwN251dmExK01jWFM1S295SklTQkZrYXYzNVJ0QkxwTlFJZzdPaHplVm1GSmNreThEU1ZrSzB3UWFSRitwQklpUEhuc3Vud1Q3Y1V0UDM5b21PN1MvMVZndkhLcVpqTldmTXlYMEpueGJPK29qbzlDd3NDb05vU1Ftd0RhV2dsSmJ5OG9GeThVOWczN3RBR25SQkRnYkI3djhvNTlqZnY3NjViZXZZNXJ3SFN4dmZxQyticEtrZVRjbDZSSmtxZVFicTlqcXZmbDNXMVFWS1ZqYUlpQUJ5MTBES04yZEFDbExaUk9scUwzOE5UYVB0V3p5ZEg1NUxLMy8vV1dZMnoyc0luS0kxOGd6MG9qTUI2c0w1WnVEV1I3Y0JybDROd1REQXFaa1ZaTHdMa1BFTkFhQXdYTWdzZ2xBNWRWNVNidkZiMjBKVlQwc0ZaZHZEd3k4UGlWMFVKN2l1U09QanNaTTFZTmdDQi9VUHRGSXl4eUVTU1JpMTBHZlU0akpkV3FJUFR1RG1UTEJ3VXIzYWo4cXFUR0JYcmtDanB4ZG1tVzdQb1pXYnowUmRlNC9CamNVb1dxK1d3RVRvanNlMVl5Y28rUVVVZ2d4UzcyZlFkTFpiVmxCeEhMbjNpRFEvVU5kNUE0SnI2MHExdEttWEdwUzlaNnhmOXhTRzdxL0V3TmdvQmdJQjlQdjlHSmljeFBENlhBeGxwT09yYXgrUHlNV3RUeVR6cnJrRUxYd1hOUXU3NlVUalF5YXVSRGR1QXRUc0l0VHJJVnBSRWRzQ3IzdE95ZnQ4cHgzWEl4RUgxeVM2M1hSK0dLKzdNNWJYK3R0amwxWEtsMzIwQUVwOEV2UDVRQjRhQkI0TlB5Y04zcy9sSjJlL2MraUtXeFlqT1NuYURuNFh4Vm5WTitDbmQ5cHhmbFU2aGl6UFkvQ0xQcnphMDQzaDJsMm9rQzFLNE4vbXFGU0JEQU8ra211T3lFV0hhelhSV3pWdmd6RXhOWXY2Y2tTYjdCamhEdGNZVWNuSlJDU2Q0OThraGhqSmZrNVNjbmlYeGprdTl2Q29KTGI0a0pFZk1GcGNFSE9vYU1EN25EeEVDQkpCc0dZckRnMk1hM3lqVGV1VExVS2kzdW14RTQ3bnpzSW5YLzBCdzJQVDRQN0xIeHVqVDlYQmZVVlpVR2xhQjRhTnhlcFV2cFlIMUljbXFZZzE2Y0NsU3ovZXhOK0YrcmhyZndRbWhJMlhWSi9NeHo5RXRQUUdCMFlLVWdBQUFBQkpSVTVFcmtKZ2dnPT1cIiwgJEMgPSBcImRhdGE6aW1hZ2UvcG5nO2Jhc2U2NCxpVkJPUncwS0dnb0FBQUFOU1VoRVVnQUFBQmdBQUFBWUNBWUFBQURnZHozNEFBQUFDWEJJV1hNQUFBc1RBQUFMRXdFQW1wd1lBQUFBQVhOU1IwSUFyczRjNlFBQUFBUm5RVTFCQUFDeGp3djhZUVVBQUFNaFNVUkJWSGdCclZaTlRGTkJFUDcyOWJWUUVWb09jRkJEK0x1UVFvTEJFNWlJWGpDY1BIbFZFbU84V1NIR0krWGd3WmdZemthQmFPSlYxRVRqQ1V6OE9VSUNHRFNhSWxWUENrV3B4ZmIxclRQYjNkZG5MRWlWYWFlemIzZm4rMlptOSswVzJFR2tsRkhTVWRJWjBxUXN5YnJ1aTVNMm8xSmhKdzJ3VzVuY2praVVBYjlJSmtFYTVXZm54WFBrbmp4V1ZtNXNxRGxXVXhNQ25WMElEUTdDN2oxcVhOT2tZMEtJOFcwSnVCd2FYQUZ1amQrQVRLVmdOVFJBMUVkaDdhdFJMbTVtRXpLVGdidjZnWHlBbWp0M0VZaDFHWmdFa1l6OVFhQWpWK3hiMTY4aGQrc203SjRqc0lKQkNFSWhKeWcwNVNJaDFTL2cvc2pDV1g2TjBKa2hWRisrWXVBdW1VeUVxVG1aT1M0TGcrY25iaVBZMlFtTEp4Q0tFUDVvaElZdjhuSGJwUW41K1RrRXoxOHdKRnl1dzBTeVlnZ215Wnd0TEM0Z2MrSVlnckVZQWpYN2l3U2xLRXBNdXUxbFFjK0Y3OThvazJXRXB4K2FkWmtsZ3VOQ1I1L2tuczJlYmxpcFZkZ3hpcDRBREFGOEdVanBGWlUrUXJlQUFnMDRTNHRBWHgvMjNYOWtKdFhiOUhOS0xlcmJOMjZodGRWRld6dmN4a1locWZaU293cFZldjkra09icmxjeDFIT25TWm1DaWZESnBCMXRhZURET0djeFFvMytEdG1BMm00VnQyd2dFQWtxOW5jRGwwQXR0ckM2dFoxM1hSYUZRZ09NNENJZkRpRVFpcWt4Y2hXNlZBUTFZbHFYVUFIbngrb0NNOVkvN0EySC9mRDV2dXBxNVJPcUY0Z2g0MEMvbFFMWVRCamZxODJ1Mi9CUDg5bC9FRVBpRkNWWlVRNWRtTDRUWFVVdmFJd2lGUXRncjhSSE1jK3NaYWYrWGJCREQ5OUtPc0FJNmswcXpLUzY4cEoxMDlYU3QxVkdycXZPQUNmak1HRzF1cUlJSTJQYXI5em5DdGlvblVPZUdpMFAxRmpvT1ZKbmVhWHBoQlo4YnMvdzBjaktxSis1KzkvZ3pZSms4MTJnNnB2Z3NNcnRvaURUZDIxNU5KSkZTUkpWRXJ3S01JSFpRcmFXNkc3aWhDSmpKZEhBV0l3TjF4WWorU2lJOVpSOHZ1T0xGczZLd2Z3OUVKc2p3cFlPbFR6a01UWHpGeHpXbk9FMlV4Kzl0QzJHWWdIdmJxL3pnQ2ZOUTdzcU1heEwxaHI5ODl4TlBGN0pZK3B4RGFxMmc1dFNGQlFGWFk2QXI3QWN1ZTJXV1Q3eDQ2VS9KM2N1TS9JOS9GM0VOc080RFRPcStCR2wwSjR4ZmRXand1VEpUcldVQUFBQUFTVVZPUks1Q1lJST1cIiwgZW0gPSBcImRhdGE6aW1hZ2UvcG5nO2Jhc2U2NCxpVkJPUncwS0dnb0FBQUFOU1VoRVVnQUFBQmdBQUFBWUNBWUFBQURnZHozNEFBQUFDWEJJV1hNQUFBc1RBQUFMRXdFQW1wd1lBQUFBQVhOU1IwSUFyczRjNlFBQUFBUm5RVTFCQUFDeGp3djhZUVVBQUFPOFNVUkJWSGdCcFZaYlRGUlhGRjMzenRDbWluSFExQUpxSVlpYWxJYUMxQSt4N2EzOXNMRkpNMzJraVUzOXFGSEErQ0ZvbE1Rb01pVCtHQjhZb3g4YWpZL0UxNGZHVVQ3VWFBVDkwUGhDaFdCUXpGemtwVUpnR09ZRnpPVzY5NTF6aGpFaWdjeE85cHh6enpsN3JmMDRqd0hHRWRNMEhhU1ZwTGRJUGVhbzlJbXhNdEpNVEZiWVNBQk1WSTUvaWtnWkE3eVVHaGVwZzcrZk5IZmpxNVFrVEQxNUJPSG56U2pzWG9iTTlHbklYVEFUenArem9CV2tTMU12YVpXaUtQcy9TY0RwRU9Db2U5U0pHL2QwL1B2OWRNeXRPUXZid29XNFByc1FGMjdxOEFlSEVRZ053ZFBoZzBsckwrNVpZUkVLY1JGSjFVY0V3bk9ML1VGakYrNDhiTU82S1I0b3VnZmR5Ly9FMGJzK05MN3FnNkx3V21sc0loaU9vS0dsQnlWL2ZZT0s0c1VTYnFPTVJKRTVwNmFlMHhMZXZRdkRPZC9DUGk4YktvR3JoVXRSMzlLUFlDZ0NZOFRFN3ZQTjBpUHBtcVdQbXQ1aCs4b0ZLQzFlS3RPVlR5UzZKRGhPemY5R1l3TUN2MmhJeXNtQmJXb3lWT0dCV0lRaDFZN2xxZXNKem96THJjbjJHUENIVVo3YWpsODMvNGVaYzJieFJDMFJMRk9FOXg0ZThSZmtRVzE3RFR0Rm9GSXVKSUZFRzFic1dKSldDbnhZdUdnVTFPcWQvZER5WitIaXZ0L2tiSXFkZnY3Z25tRVlRRVVsMU9JMVVLdDJRcldyVUFZQ0NDMzVFUTJVKzU2K01DS0dpZENSQnBoeDNrdVN3ZUVJZklFSXJ0eHB0emFJMkYxbDdLU1RlNmRxWHFDcFBRZ2JlZDdrNmNleHQxOENyVHErV1BVUFppT0l3elVlYkRoUUR6L1ZnZ3ZMeXM1blRRTUNZUU05M2lHS2xPREkzbDJyU3c4MEpzamozdW1ycnl3UE9CdTl2a0dVN3IyUDM1dm1vYTJ5R3VsYlNuQTVveEhiVnVjaVJNQ0JVRlMvUytySEN0OVRBaDlFYU5DSWJjemI5VjJTSUpNSnJBT2xkL3BIQzhyNWpvemcycjBPTE43NkdJZUtEZ0lqQmxaVkY1RzNVZSs1ZGJmYXNLa2p5MW9yd1RrQzc4QlFqSUNMYkNVeTIza09yVytDWXBHS3lZc1pLM2hHNmhTMHVGZGFvNHlrYzJkNjh1ZkNDUVdKQ2w4bFFyd3hBcTBnTGVaSW9wSTdQM1p0UEdHQ091NDV0UXdreWxBeTE0dnNHYlk0TExpWndMb3pPQUp0VVdwQ0pBTmhFK2x6VWthekFWeWlBNnZ3dlZITFh4VkYrVWdrZ2pQZERsU1gveUFCVHZCZEpMZkxhbEt2dGlndFNpS1AvNFFsdW9QWU5uZitETjRsMXR2QU14WUJNOG1CSFd2emFXSGVKRWhHd2RsV1NKWEEvT2pCY1ZIRGp3NmV2dWpGMytVMzZXd0V4b1hudWxXc3pZdXJud1h1a2g5alBabGxnc1E2NFhXUDM4QmQ5eHJQWHZaQzcvSmJheHpKbitFbkFuUnFYOGNEai9sa2poMTA5TkUvWVU1Y2Jwa0ovTHNvRXdCOWNZQWVNZVlpZFl5SDhSNHJ0RGQ5bkJuY2FnQUFBQUJKUlU1RXJrSmdnZz09XCIsIHRtID0gXCJkYXRhOmltYWdlL3BuZztiYXNlNjQsaVZCT1J3MEtHZ29BQUFBTlNVaEVVZ0FBQUJnQUFBQVlDQVlBQUFEZ2R6MzRBQUFBQ1hCSVdYTUFBQXNUQUFBTEV3RUFtcHdZQUFBQUFYTlNSMElBcnM0YzZRQUFBQVJuUVUxQkFBQ3hqd3Y4WVFVQUFBT25TVVJCVkhnQnBWWTdiQnhWRkQzdjdleG4xbmcvY1d5VWo5RUNBY2s0b0FBU0VoWVM2V3lKaG9ZV2dRU2lqSWxEUzlZRlhTS2xvWXpzaWc0SkdoTXFPd1drakNWSUlqREJWdnhSUHZaNmJDVTdrNW5aZWJuM3padjEvaHpaeXQyOSsvN24zTS9NZlFzOFI1UlNKZEtMcFBPa3kycFB0czNjSkdrRmh4VStaQUFPS2pQN0VZa2U0T2VvcVpLV2VQem5VaDNYRm5lcGZZSWROOUo3aGdmU09IMGloNGt6Qll5OWtVK09PcVRUUW9ncit4SndPQXk0QnI1eWJSUHJ0UUJIQ3hiS2VRdjVyTlQ3Nmw2RXgzNEQ5elo5T2dQTWZqT00wWlBaQktaS0pOTmRCTVp5elg1cDdoR3VMamg0LzFVYmFVdEMwVGIrcUhaZitSQmNJcnF6N3VIemowcTQ4TWxnc3ZodDRvbElZazdOVFE3THBibE56RjUzTURwczA2cU10d2pSTkVmby9Ra0JmeU1JbWxpOFY4ZlhIemRKT0Z6dkVzbUtOSXdjbXRMZmF4NHV6MjNoNVZJR2JpamdCcVFoNEFXSSs2UjEwOFpyZ3RiaXVXTjA1dkp2TlIxYWs3OFpiWk94ZnBrSEgzei9QMWFkQ0tNbnlIb1pXeThTNjAwMGxla3A0MEg4dy8wR2JxMTZHRHVWeGMvbmhwTlFsUzM2K1pSNy8yNTRVV1VBMFd0REdRd1ZwVWhiMWw1TXVoKzJ0anl3aEtGVVIvTVJvc2pIeWtQUHFnemxlSHFTUFppbnp0bWRuUjI0cmd1TGdGT3BsTmJtazBCZUJONERSQ3BBS1B1UTloOGgwLzhtNXc0bWh3UWNvZEZvRUZFSTI3WlJMQlo1YVlIamNDYTJJS1NvU0swTW1CeG04ZXRya0NrYlMzNEJkNE1zclB3cmVMcDdwOHNmUHNmbmd5QklwaXFXU1lpMlFFclpIZ0JESXExK09QVSszTGkvQ0xXZHhyRjNqdU5JdnRKbUJJTW4yakt2Q1pvYld0czJ5MlFHTjdkK3hIdjJIMWlIaFgrV1J2SGg2ZTk2ZXREcFBlZUFuNkJLclZiVEMwbUlXb204M2R0NHVOdUhiQ1lGSlNrLzlPd1BGUE9RNlhLYnQ2eWNCODVmdWF6WEhJN0pDdmN5bVF6MmsxemhMUXkrVkVNcDUrQ0lYVWNoVjI4RDd4VExhZ1pta1h2WFNjOXV1bW1jLzhrSkJWa1lXOThacXBHT3NkY3hqajFRbE1zZlB1dVhJLzFnNDM5bEFxNFpGeXVEV1lpVVpkMjQ2KytWaU1PSWl0K0prMldCa2VQTnd2ZUxKR3U1Yml6d2FHcWkxTng0ZUluZjZKbXZocEtKMmRaYTlDV3BNM1lxaC9NVFJiUytvUWUyWGh0WXBES2pjNm52QnU1b0FtWktKaTZRRjFQakJ5VlJUWjBhTDJnQ0k5TUdzK3ZDcVNLdXJMaTk0YXN2cm02SnRWcUl2WnJValQvMmVrWjd6VVd1QmJ5YURIcGRtWk9HSkw0eS8zdUszLzl5Y1d2RHgycXRvZmNVYkVIQU9ZeS9iYmNDOTd3eWV6c2VYL3F6NnVBeXIxN2czOFdrQWRodUFWdzJjMVhTMHZNd25nSE1qQ2ExQy9EN1BBQUFBQUJKUlU1RXJrSmdnZz09XCIsIG9tID0gXCJkYXRhOmltYWdlL3BuZztiYXNlNjQsaVZCT1J3MEtHZ29BQUFBTlNVaEVVZ0FBQUJnQUFBQVlDQVlBQUFEZ2R6MzRBQUFBQ1hCSVdYTUFBQXNUQUFBTEV3RUFtcHdZQUFBQUFYTlNSMElBcnM0YzZRQUFBQVJuUVUxQkFBQ3hqd3Y4WVFVQUFBTnVTVVJCVkhnQnBWWk5TRlJSRlA3dW0rZllLTTFZbGtHQzJvOWhCR1VVL1c2S0FxRWdJb2hhNkNKb1dlUkVlOGYyUVNBRlJhQkUwTGFnRmkxQ0NSUTFVSkdveUZKeit0TW8vOEkzei9mbTNjNjVjNStPem95TmRQQjQ3enYzbnU4NzU5eS9BVllRS1dVSmFSTnBPK21JWEpSSmJXc2tyY0pxaFowMFFMN1Ntb3RJWkFHL1JrMk10SVMvN2JFZVdFTXZZY2Q3SVJNemFvNFJLVWV3YkNkQzFTZFFXSEhRZDUwaWJSWkMzTTVKd09YUTRBVFlnejlkOStET2ZrV2dhQU9NVUFSR1FaSHk4T2JuSUVuZHFUajdvUFRjWFJTVTFmZ3dNU0pwemlEUWtTdjJtYzRXelBVOVFuQnpMWXlBcVNZSnNUeFRVbW85eDRJejhRR2gyZ3NJSDczcUQwZjlUSVJmYzJyNnVTeXpETjcvR01GTk5UQUlWUWlaUmlCU0hvVE9WbzZlaVR4Uysvc2JGTzlyd05vVUNaZHJMNUdNR3BxUlMxUGlUTHluc3R4QlFYZ2pqR1NDMUVxMW5nM2hKaUNvcjFvM29jY1RDL09DNFRMbGE0LzFRcTlmcXdwSlJ6L0NIeFAzVHdCVWM0NCtvS0xuZ01WQzRMbzRLaFBPUWYrcExKS2s4K1B2RUNnL2dOS0xELzNKNjB6NmQ1Wjc4ejgvZWpKYzZabnJ0Z0RGcFFKbXdaSlZrZ3NmRWhsQ0pwRjBwVkc0SGc0eDJiL0h6TUwxRlR6U3lCbTBVK2ZZOVBRMExNdUNhWm9JQkFKS0YzWUNaelAwRkloM2NzNUE1VW5JclhWcURmUWF3dk04SkpOSnVLNkxVQ2lFU0NUQ1F4MmNRUzMzZU1Bd0RLVU15RTdDM3pwRHo0RFhMWXM3NlVjL0pLMERxczhzU1lUbnM3L2pPTDZweXRBTG9pTGd3U1dacTExQ1VYNGlBdGVDZEJLa2xsTEVYeTJPKzFscTlXMU1ZS2F6cDdmTGF3elBYV3B6NWpLbVpTRUFoenlxT3JvMDJVUldIcyswYlR1RlhNTHJxR1hLMUFSVndXQVF0bTFuSjZnNUQ4OHNnaGgrVHQ1MFhWUWNKNExUK1JBTThDNktVYWZwMit4bjNCcTQ0Um9Ca1RPVGY0bEhSMXFTWHRsejA5Z1Mzc25WaVRJVjN4bE5tOWRXd2pDRk9UalpuZG90cStXUXFRTzNhVTA1Q055M1BxSHJSdkM5MGNGZkRUdWkrcDVadlVoOXBKdjJQL0JOYmVsMzBTWFNxZDJsaDlGUUhkWG5IL21Mbmx0UHZ0dkN1N2lyM2didUtBSm04ZzMxTzY0ckVwa1BpWjdEY3htOGdYeTFOR3ZNakFjbmh0VE5pdUdadDRqMVhjYTQ5U1huY2pDd3lucDdsTnBENmVBeC95UGJrOW1vU2RRSkgvelZqYTZKRjRwdzNJcXJPY1ZtUkFFZUthdExCODc2Wk9hSVREMzZiVEovYVpmLzhldWlVUU5NcGdHT2FGdU10R1Fsakw5SU1oKzBmUm9EQ1FBQUFBQkpSVTVFcmtKZ2dnPT1cIiwgcm0gPSBcImRhdGE6aW1hZ2UvcG5nO2Jhc2U2NCxpVkJPUncwS0dnb0FBQUFOU1VoRVVnQUFBQmdBQUFBWUNBWUFBQURnZHozNEFBQUFDWEJJV1hNQUFBc1RBQUFMRXdFQW1wd1lBQUFBQVhOU1IwSUFyczRjNlFBQUFBUm5RVTFCQUFDeGp3djhZUVVBQUFMMVNVUkJWSGdCclZaTFR4TlJGRDR6SFhscHRKR29rR0JFRFkzeGJlSUM0a0ozTG1YakRoSk4zRnY0QVZKK2dPZ1AwUEQ0QWNiWGhoVzZJTEFFRXRDRkNJa212bG82UXgvVG9UTnpQZWZNdmUyMHRLUVV2dVMwOTNXKzc1d3pkKzRkZ0QwZ2hJaWlqYUhOb1cySU10SnlMSTdXQy9zRk9VbUNSakZaVDBpclFmNFUveEpvVWVvN2pnTzJYZUIvbk9NMXVxNURTMHNMdExlM1FXdHJxM0kxMGNZMVRYdFpWNERLSWNsaDZkOEM5R2d4OER3WEloR0RTWFU5V083N0F0ZjY0TG9laStiYWtuQXhla1hSSkZCa0hHcEZydktkV24wdUJ0OWZGYW5VbGtpblRXR2FsckFzc20xcEZvL1JISzE1K1BHV21FYWZFT0tLVjFjMVY1SFBmSm1BRHh2VEVEdDVEU09QeU1pcnJUeE9hODVITDhHYjlkY3dzemFoZU1mVU05SFZBTlY4M1ZwRmdSZlEyWEVHSEdHRHBnVmxJU0pxWStvbEN3czZJZytuT3JwZzV1c0VMR05wNWZPYlpBR3A5SWc2enhhZUFQS2dhZUQ0ZVNZblluNVlHa2p5b0IyTUJXSVVUTVF3Mkk5RUpPN1JOaWZ2UWVvdEp4ZmdiK0VuQzJUY05Eb1YyRmtSbGZkRDBBN1BPWDRCc3A3RnZpdXBSWlVGSVU0Q0Q2ZzEvMnVXZldtUlZkeUNncGNQYjRDYXBrRFpicU1QRnh3NTVuL1BxcW03QnY3Y3BOYTZ0Y2JrbEw4cmRnS0hpbDFXTGswMXpKMFVlTDRiWktVTFdFa3VxcWxlUXo0UStHUC9VTmt6WEZHc2lGS0oxSUluM0hEMUlPdGFKUUc5dENvY1haMUltd0VKYkZMajJKRVRoOEpMSE4xSHo2cXVXUks0MGRrUGg0VUx4eStyNWhJSmZLYlduZTc3VUNxeGdLWWhKSmZFT3hMZzArOTY1d0JtTVFBSFJWZEhEM05Kdk5WeGE5RXgrNGw2dzdFUjNpck5KTUE3REMxeCs1VWFta0x1VGJXTEhxT1pwRHpjTnhMa3VSOFZ1WGFvTDQ3MTUyT2I3d1pxc0FBcHFZR2gyQ2lMVUVUVmIyd3Q1bUFOa1k5Z0JVYlZ4TGprM0hYaEpDQTRXZUY3WmsyYzFzNXB2dStIenAzS2w0M0lEU01DMyt3VnJIdC9tRHhSUDZiZ0lrK3JtNk5ZZElWdDJ5S1h5NGxNSnN1V3pXWjVqT2FxUGdUaTBBamtwVDhsR3NlY09NRFhSVndTcEVPRUczSXNRV2YrWGh6L0FTNUhQZ0JyanhmVkFBQUFBRWxGVGtTdVFtQ0NcIiwgbm0gPSBcImRhdGE6aW1hZ2UvcG5nO2Jhc2U2NCxpVkJPUncwS0dnb0FBQUFOU1VoRVVnQUFBQmdBQUFBWUNBWUFBQURnZHozNEFBQUFDWEJJV1hNQUFBc1RBQUFMRXdFQW1wd1lBQUFBQVhOU1IwSUFyczRjNlFBQUFBUm5RVTFCQUFDeGp3djhZUVVBQUFQaVNVUkJWSGdCclZaYmFKUkhGUDVtL2o4eHVva0ppTWJXU2pVVVd4dUV0bEJJYW92SlE4MURIK3BERVlwU1Vsb1JpdEJzNmNWQ2l4dUtGQXJTUW1zVkVlSU5KWUlQZ25oN01JbUNSa0dqb3Nab2pGRmpOTkc0bTJ6Mmt2eVg4WnpaZnpiQkpHclVzNXgvTHN6NXZqbm56SmxaNENtaWxDb2lYVWZhUUhwVGpVZzBtS3NobllmSkNoc0ZBTThyZFJNUmlYSEF2NmNtUWxyRTQ1YXJ2U2d1c3BHM2ZRdFVjelB3U3o5eTgyZkNDcFVpZDhaUzJOUExqV21NdEZZSThjK0VCQnlPQUJ4Tlo3dHg4RVFIdnZ3Z2hQbUg2aUZMU3REd1ZpVXFYLzhQbG9oRHVRbjQ2ZHRRdERiMHpsWlkwMG9OVElSSWFzY1FCRHZYN0dkYWJxUGhYRGUrQzNWQVhydUdoNTh1UTkwRkJ4ZmJvOWk1YWg5eUxKZUFCZGtBdnBlRW0yaEQ3cXlWeUpzYk5uQmg0NGt3TWVkb2NGajIxUjlBWWR4RCtjY0xJTnJhSUJjdnhwbnJjU1RUbnJhc21MTWV0dVd3a1NiUUpLUk8vQUp5aXI4MUpCeXU5NG1rMHhEVVVWTWQ3ZXRBYStOeU5MVjlobStPTmFQQVM4TjYyNGE2NTBQMEU0R2c1UnRudzg0ZDFudmo4Q2hDWndMUGlXdFBwaTdjYS9MU1NBU1ZNdGg5TmMrc1dWc1BIeFo2blVLSVJBS1NWQXdtSWFla2dWUUtJcG1FVUtSSVoxcFNpUlJaa0ZvMkxDa3dmUGR2RTZZS1B1WTJkWmJ4eUhVYy9GcnhKdjVhdXdnL2JsaUl3aVYvUUVTalNKZDlndGJPR083M0RXa0hxdVFQRVA1UU5vR2NDNDZUOUljaExjS0pOOE1kT0dXOHFKSDArWng3dXcrM28vZUJqMDN1TGppMytyQ2xaeWJFM1M3a3JmZ0N4WElJTzVwNnNHWnpLNVEzU0VFbmoveVVWdUd6SjlTcVJ5QUh5QXNLVit5bzhXSUpFN3pIdlIwSGJ5QWVkMkN2eUVjMDZlRG5mMXRRZFhrQjdxemZpTmQrV28wOU0wN2o5Mm82aW9yaVQ2Q2FRTEVTZ2Q5SEJHbElRaE9rUG5rUnlEeHBDcXF6ZTVCQ0lPQnZHSUJ3RlJ6WHgvR1dIbno0MjBYOHYzb3piY3ZEVjMrdWhLVEVHMkI0Q1ZMeVNMazZYSUorN0FXOC9peUI0RHJuM3RDbGp5RGRMcDBvanJVWVUrTlBGM05rUFRwU252VUc4aGFkMVBQc1FhZnVXZE5IVms4Uy9FbVJVK2FhYml4TFlCV1U0MVdKbVBhdTZaNW5naWJOV3JoMFpJWENTNGxkVkdXNit6a0huT1Fvajl6MjVWUmdwek9uNFFWeXdCWHRXM09RVTNyU1RNK1hkSEw0M21qa2tUVTdUSnNQN2hoTVRqSkpWckJMdHBxcGJYd1h5V0R3TldsTTVKZERGb2N6NEpOZ1VNRmF0aFZUZGZ6MTI2RG4rTU5NMlFueVFzd0taNC9kczNqTU9wQU4yd1pTRzJDT2VYQWkxS3pUZzlRVitMZFdBY05kMlh4d215VTA1S0V5dlNHUlh6WWFQR0lHNHoyWk5RR0pybkExU0dVL2NBUklYNkZib2l0andEWERnQVZWbzRISGZUSW5jRnMvK3R2VTgwdURlb2wvRnpVQlFIUVU0TTFnTGhJYzh3bmxNWC93VGJpdEJ6WWFBQUFBQUVsRlRrU3VRbUNDXCIsIGltID0gXCJkYXRhOmltYWdlL3BuZztiYXNlNjQsaVZCT1J3MEtHZ29BQUFBTlNVaEVVZ0FBQUJnQUFBQVlDQVlBQUFEZ2R6MzRBQUFBQ1hCSVdYTUFBQXNUQUFBTEV3RUFtcHdZQUFBQUFYTlNSMElBcnM0YzZRQUFBQVJuUVUxQkFBQ3hqd3Y4WVFVQUFBUXJTVVJCVkhnQnBWWmRURnhGRlA3bTNzc2loU0pnRkxQOENDYldIMmlsSlExYW1tNzF5VFpSMUNZK21HakVZRFhHcHFpcGI4UWx4RlJOVFRYeFNXT3BELzYwU1Mxb1VpV053cXBRRVZ1eDNVYTBwcnZ5MDYxcDdWSllkb0c5OTQ1bjVzNjlyQUcyR0E4NWQzNzJ6UGVkYzJibURFQVc0WndYa2I1SzJrc2E0UXNTVjNPdHBGWDRyeUlXS1lDVlN1ZHlSR3dKOE4zVUJFbUx4RGgwOGdLNis4N2pXMm9ucCtlbFRaVi9OZGF0dVFGTlcyOUZvTjd2THAwa2JXZU12YjBzZ1VpSEFwZkFyeDg0aVQ4dkpuQlR5U29VRithaUlDOUgyaVdTYWN5azVoR1ptQUtuOFdmN3RrbENKVUVpYVY5RW9EeVg3QjN2RGVIZFEyRTByQzJGWWVqU2pERmhBNjkxRm5Na1owMmMrZU15bm4zMExyVHQzT2pDdmVoR3d0eWNVL096U011RlUyRjBoYUtvS0MrQkp0QWt1T09IMjNMRndNV2Y2Sk5PeE9KNGNQTXQ4RytvZGRPMW51eWpMa0VuTlU5WjRUT1l1VCtBbkpvYTZQa0YwSlFIeXNoeFA2UFBKUWxnMDlpYW5vSTVNb0s4cnM5aGJOb3NyUHFJNEQ2bXZJL0kzTmJYZ1kyTkVrR3Q5SjdsNThQZTFBaW02MkFURTlERHA3MzBPUDZyaUVndCtzRThHd1lhRzdIcTZCZXVVYkZCbjRkRnp4cjRIaUJ3a1hFdEhvZjl4Sk93bXArVy9odDl2VWp2MmswazQ4amQ4ekpZTE9adElGZEJhWFB6TW1LenZ4OG1ZYWtvV3NWY2sraVp4NDVKY0owOHR4N1lodlJ6ejROZmx3ZDk2RWZvUjQvSVhOditNc3krdForOE1ZRlVpalFKTmtPYUpQMzdzb3hhWUZpRXBTUWdJcWlUWVZMK1pjNHBIWFpEQS9UalBXQStIL1NQUDRJMk9BZzkxRWNyTGJuS0pBZU1Uei94OW9PbFpzSE10Rnh2Q3gzb2R3bXFCSUc4VUJnYkUrY0ZmTzA2MlBVYmtidnZUUmlIQ0lRSXhZYm10alNEbDVWajdyVzlzTmJjQVlPOGxodGkydzZKU3BsR1grdnFWWTlBYzN2U2dENGlaRjVTZ3JtOWJ5RGRzdFB4MmpUQmk0dVJPdElGaXpaZGd0S2MvRzFoMXoyU3pOc3JDS0t5VjNpOVkvUlhESXlPbk96VFpvUFN4RXRMd1M1ZEFuSU1PYThQL29Cc29sVld1dDFKajBDbjR5VkJwNmJnZThjcEoxcmtQRkpmSGtmeXhCRFNMK3lDZnZndzJQZzQ5SjZ2c2hLd21scTNPeXdJUWhKcyszYlB3T2o4QUw2T2Rzd2UrQkIyZGJXY20zOXBEMURtUjk3amo0RWxwck1TR0F0WTNlS2lpVTJPaTVINXlFTmdkQUxjRzh6THkySGRjeS80NmtKb0k3OUNQekd3TEtpODBVSXJLcER6MDdBN1hlMldpbDVxdG5JQ3Q0amtYeVZpaFdJcjFiOEp1U2s2U0tXaWVWR3hTL3gyenU3cEg3VVpjdy9ZdFdsRTBRQzNzYVhlYjl4NDk1MWl5aXQyOGxpSURwR0lHcjYvNFBiYnRMUGZKYlNPOTRkVmNic1dnVk5OMjU1Wmp4ME91QkR4OEVRWHVVY2tRV3JFbzROZmZyK0NIYTk4VFEvT1RGYjR3SWFiMGRaU0o5c004S0E3V09ySmJGVWt6cE41NmlLNlE2TTRmZTRLb3JHRXRDa3E4R0VMQVRZRktqT0JsM3d5bHc3YWVmUVA4cFZMTC84Zi8xMjBLb0I0Qm1CRXpRWFZNVjlXL2dHaUgwN21UVmNLK3dBQUFBQkpSVTVFcmtKZ2dnPT1cIiwgYW0gPSBcImRhdGE6aW1hZ2UvcG5nO2Jhc2U2NCxpVkJPUncwS0dnb0FBQUFOU1VoRVVnQUFBQmdBQUFBWUNBWUFBQURnZHozNEFBQUFDWEJJV1hNQUFBc1RBQUFMRXdFQW1wd1lBQUFBQVhOU1IwSUFyczRjNlFBQUFBUm5RVTFCQUFDeGp3djhZUVVBQUFPclNVUkJWSGdCcFZaTlNGUlJGUDd1K3huSE1wcEVSNklXdFNvcXlQNDNRYlVMV2xTTG92OXlFeEZGRS9TemlpWUl3b29Lb2sxVXVwWkMybVMxU0F1RGJLT0xpaWhJS1VzVWRFWWRuZC8zYnVkYzd4MUhuUkdqQTJmdW0zZnZPZDg5M3puMzNBZk1JbExLRU9sVjBsYlNiamtwTWYwdVFyb00veXBzcEIzTVZScEtBWWtpenMvUkVDVU44ZjlVS29Wa01xbEczL2ZWR3NkeEVBZ0VVRjVlam1Bd2FFempwTmVFRVBkS0FqQWQyam5TNlRTR2g0ZVJ5K1dVUTh1eWxMSXdFSzFGTnB0Vi82dXFxaFNnbGlpQlhKc0JvSGV1MEZPMzZwRjU5QkRPaG8yd1hCZUNuSkVSTDlJbUVsTDlFdGg0RXJtdlh4QTRYb2ZneGN2RzNYa1RpVENjMDlESnRMRHo3SlBIY05lc0FlOVhrQmNoQ25janRQc0pQSDcyYVVHMnF4UHV5Vk1HaE9sYVJ5QTlCcUNCaGhPWlRBWURBd09LVjl1MkZTVkNlemZqTkVxVk1tVk1KZE5hWFYyTnNySXlubTRqbXgxQzc3NmIzL1QxOVNsRFhtREhoaEJzYm9iN3JnMWlMQUU1dndMZTVpM0lIRHdFUDF3ekJZUUJXQm1BODhVZ1doWTU5TFBISkpVWHE0VDI5MlArdVRPd1IwZmdyYTFGNXVoeCtDdFdVdUJ4V0x5SktuS2dFMjZpWStXb09mSHNTMGNSWVlEZEtyRlVocVpTS3VxT3dVNk9JN2R0TzVMWGJ5aGpCaGMxTmNpRnc1TjB4V1BBd2xBZXlOaXpMdzJ3amJkUnkwL01JVSs2N2Uyd3VuOUFEQTRpZmZwc25vYnBJMnVncVFuVzkyOXdPajVBMEZsaFlQWmh5cGRrR1FPb0xUQ0hDdUR6SjFVdDNxclY4Qll2emp1Ym9yVFdhWHNENTFVTEtuYnRoUE94QTVnM0wwK1YyWWdCbUZJbDBuVW1YaVFTS0NtMDFxOE9ROUpKbGt6RitQaVVYQlFLQS9RWS9ualNYNnNZZy8zcko2eFlyQ1NHaW5EclZpUmFYaU83WnkrczBkSDhIQmVLbG5nZXdCejEzTVpOOEdyWEEzUW1nbGV2RkE4Z2xWUmorZ2hWMTVLbDhLakMvQVVMaWdGME1jQmJBNkM0bzBpU2QrNlM0Uks0TDErZzRzQSsyTVN4TlRRSXE3Y1hnV2RQZ1d4T1dVdml2WmpvQ21KNXpnZU5rNnk0NE9ibWVaNml5Lzd6RzJVUDdzTjkzdzVCdFMrcG9XWDI3VWZtOERFNmFPRVpUczJCWTZtc3JEU3ZsNXRXMFVyRGRpNnZrWkdSZkQ2S3RZZGlVdGd5UXFHUXBBUEhobzFrWHplajJmbTNiMEpTdzFPTkRuTVQxVlg1NGNKbDJCY3Y4Vk8rMlJYdUltS3VKKzlXdmZUQ2xkTFhLbWRSbnVlMTNzMzZ3aHN1WXZ4T3YzQ2lOUENsbzNLUm9MUEFZWmVpeXZRdXZ0a0tLb2R2dFNoS2hqc1JTY3hzaGZJaXg4YkdKT1ZHeHVOeHBWUU02aDNQVGZzUWlHQk9uRTVjK28xeTd0SXEvK1BySXFJZHhBb2NkdXQzVVYzbUplVXY2Qm14UTFTMjRrNEFBQUFBU1VWT1JLNUNZSUk9XCIsIHNtID0gXCJkYXRhOmltYWdlL3BuZztiYXNlNjQsaVZCT1J3MEtHZ29BQUFBTlNVaEVVZ0FBQUJnQUFBQVlDQVlBQUFEZ2R6MzRBQUFBQ1hCSVdYTUFBQXNUQUFBTEV3RUFtcHdZQUFBQUFYTlNSMElBcnM0YzZRQUFBQVJuUVUxQkFBQ3hqd3Y4WVFVQUFBUGRTVVJCVkhnQnBWWmJhQlJuRlA3K2Z5YTdObEd6RlVzVm04WU5nUnJURnExaXJSV2F4NW9XMGo0VTZVT3RQZ3FpRWJ3Z1BpUytDR0xRUElrSTNzQUhIN3psUVVFUk5Pb0tvaGp4RWdRdlNid2hYdGhWc3p1YjNabi85NXgvWnBMSmFtU0RCODcrbC9uUDk1M3Z6Sm1aQlQ1aFd1c0VlUnY1T2ZJK1BXTHBZSytWZkNiR2F4d1VBSlJyKzhzbW9vTnJnZ3lObmIvMlZLL3R1S2d2WEwyblgzVnMxNW01UCtxM0xYL3E3T1pOdXBpNnFFdFV0WmJpeVJMd05obzZ5UlBGL2o1Y3Z6MkFsVnU3Y2YzdWEweUl4eEd2clVWOHdjK3dKazJDN3IwRFovVXF2SjAzQjk2ZFd4eWVJTjhaWUh4SXdKblQwTTd6L1BadEdOelJnYXJLR0dZbHAyQks5UmVvc0MxSXo0WE01V0FMQVh2aVJGVE1ib1NkckVOMjZUOG1KckQycUJJWjFqd0tYdHkzRjdHNk9naGhJWmRYeUExNTBCQ3dYQStXNDBDUzgyamxITmgwSmRZd0c4VTl1Nk1rYmVFOUNSV3dySVIzK3hZS2RNaWU5alZrb1VoYmdzQ1ZJVkZhUUxndWhKTXpLcGhFNXRuenZxcnAwMUdrV1BmeXBiQmMrdzFCd0xTY0Y4Ny8vMUZHZ0VYQXN1Z1RaUE1lRVpBQ1RTdTNDRUZnZ3NCRkxtdm1ERzdVV0RiRndTUVlXQk8zT2VQOXhTdVBtUjgvTXBKa09nMVZLSUNTTnVEbXVpSUdJbVZ3dzJib1ljNllUSWNLSnRaTnBZd0tlOUZpM201bGdoYWVEYjBiVkhyNUNxV2tCVGNXZzVnM1h5cWxaZGFoc2hDSThxaE0zODFTYnN2ZkNnTFIxZ1BUS1NxVkluSk5pUlRlRFVyYkwvOXZURENIei9WODFTRFR6VWtwTGVvV0loR0UrdVRtS3poNTF3RGN2UDhHMlcvcUpacnFSN2MyZ3l0bGdKVlc4RHdQa21MLzhDL1BGUHlFOEt5KzVUQUdubWY5Kzg0cEIybGFrdTZIaktZOEF1eUQ2cUJpT2lpZFF1MjBTdHp2K3RlY3MwZUhpWkxScjcycGY5a21Sc1d6Z2o2V2t1b1pvSXdvWTh0WHdDVjY5dExCMHMwcGMzRFBwZ1ZvU0U0ZUU5WVVRbk15Q3BWeEd6ODF6dUR0REN2b1o0TDVqM3VnVHAya3AxU2FCTlRDWDFDMWNNa3dRSEpHRmVZK3ZBTHJ6T21QRThDdmtFYy9zcG51Z0U5d2d3bTZ5WnNxcGs2RmQveVk2V1VXYUpvelFtRGs5dmJDUG5wa1RBSmxTa0oxWDdZczNPN2lqdUNYR3lUMXJWajBLOFpUN1kvYXR6V0VzemhjbmFDT0VobWFuT2VWdFg2akx4WGp0ekRPUG5nbzNEcEEyUDFoVDY4Z3o3QUNHWktNZ3lVOEt0WnRoR2o4bnFlYzlCYWVtRFpsSnVvQzN0Z3AxMjB3dGRRUEhwUkZNcXlZd0szMUc4THRMWXc1VEJDUWRQTExpYVp0VEdKbk1oQXY4aVA1Qld5NkJCeWtXcEJxVmg4Qjd3d1hveDQwdXNBZmk0d2hTU1FTUHhEZDJWMi9vNnY3RWI2Y1BBRzZ1aHFvcVFGNDVLWlkwaHdGenBTQ2p5M2IvK2dmME9YYk9mMFoveTVhQTRCMEJMQXYyR3NQeWpxbXZRZDZFbnN1c1d5S3JBQUFBQUJKUlU1RXJrSmdnZz09XCIsIGNtID0gXCJkYXRhOmltYWdlL3BuZztiYXNlNjQsaVZCT1J3MEtHZ29BQUFBTlNVaEVVZ0FBQUJnQUFBQVlDQVlBQUFEZ2R6MzRBQUFBQ1hCSVdYTUFBQXNUQUFBTEV3RUFtcHdZQUFBQUFYTlNSMElBcnM0YzZRQUFBQVJuUVUxQkFBQ3hqd3Y4WVFVQUFBTmxTVVJCVkhnQnJWWkxhRk5CRkQwejc2VnBLWnFvVkVGUmF2MkNIMFFFdGQySUc4R0ZxT0JHRkhRanVsRGpIMFJvQlhIalFwZitRTkc2Y1dVWC9rQ3NnbTIzZ2lKV3NLMVVLNFhTcEsxcGt1YTlOOTQ3bVhtSk5iVXQ5cEtieVozUE9mZmV1VE1UNEIraWxJcVROcEsya25hcm9pUk5YNEswRnRNVlhtUUFwaXIzSmlJU1pjQlBVdE5FR21mYmEzdUgwVXdHNlRWckVRU0JudU82TGlvcUtsQlZWWVhLeWtxN05FVjZXUWh4b3hSUGpnTnZwSVlueEwxdlBmaTFieTh5WjA0aDZQcUtTQ1NpQVZrZHg0SG5lUmdjSEVSZlh4L0d4c1pnSExwdU1FSnh5M2lPYkVjN2NpMHRHbFN1V2dVeGF4YTdYZlJLU3A2dmlUaXFnWUVCVkZkWEl4YUw4WEFUalEzWlNLVE5lUWcrTW9JOGVSZU54K0RVTFlOTWowSjZ2Z2FkU0tQUktOTHBOSWFHaHF3UGpYWlBiSW80ckxpZlRHS01QSEtmUFlVY0hZV1R5OEhKWm9qQUEzbjBoMXB3am9KYmpuYUVuTXZSR3BPdWV6cEZodWtRRzVrdm5YQmVQSWV6ZkRua28yYk56bFVndkh5aElnaVlVMk9GYmRzeUVldnc4REJxYW1xNGV4dVhPU2QyTjFzK2JTcU9Ib0h6NHp2a3hrMlF4MDlBUEh3QThiTVBUbGRYNExTM3FiRG1paHgyLzZCOFh3bEtreGY0eUcvZTRrYVcxdkZRUW5DOU0xdnUwa1g0dDIvQ0pXOWN5cWxZdlJvaVBnZm8vR3ppVU9OYXc4UWZNb05VQ240MkM1L0k1SkdqaUY2NXloUGVjQVFiOU5TUEgrRFlUYUU4aWsrZkFLNXh5bS9CWXdPc09WU3AreENackU0anIrV1RFclMzMmRGYTEyd0kwTnRMYTBVaDUyem44d1dsdk1Ma09td05zRlkrZkVxRjZ5UjkrOFZxcW5WTGN5bEVtYVB0KzVpcWlCSzF3bEgxNk1IWk1jeUU2Q2lXTExGbUtpUndHaG93VXlMbzNqTHlubFAwbG5TYjNMa1QvcDFiWlJlOHFuZUQxdzFPTUJtdzNaSmorM2ZKMmtKMldyaE1lWk9UUE1IYnN3dUNLc0FlTUN2TnV5Tm8zbE14Q1hxQllFSGxJanpZM21GN2wwbzZoWHpOdm1ITE9YZEJGNlBWNllneWk1bzIzYlZkOXdtN3g5NUZoMGxUb3I0QjBwQk1ENzNRSEZpUlFOM3NOZnhUdnczOFF4TXdVOWh4OWp6RVZDTXhFOWo3QXl0TzRlREswM2Jrc3NFc1Bqam0vZzVKWk90YnBSWXZMcEtvdjVXQjE4M2RpbXViSCtNZ0VaU0FoNjlhdVNjekFYTjlhNXMydmFQL0paNHM3RVIvcGxmUHFYWmpXRDl2Qytybjc5Q3RrYkpQWnZuSUM0LytmVFYxYVZYLzhlOGlZUUNTSllEZHBxL0psUG1FOGh1eSsvNXFkd2pVTHdBQUFBQkpSVTVFcmtKZ2dnPT1cIiwgbG0gPSBcImRhdGE6aW1hZ2UvcG5nO2Jhc2U2NCxpVkJPUncwS0dnb0FBQUFOU1VoRVVnQUFBQmdBQUFBWUNBWUFBQURnZHozNEFBQUFDWEJJV1hNQUFBc1RBQUFMRXdFQW1wd1lBQUFBQVhOU1IwSUFyczRjNlFBQUFBUm5RVTFCQUFDeGp3djhZUVVBQUFRV1NVUkJWSGdCcFZadmFGdFZGUCs5MXlSTmt5Yk43S3B0SmJVMTdlYm0wRG0vMkExeCtLV2pDSTRKYW5FZHlyWXZRN0RWZlJMQmRJZ2d5aFJCMlFlbGEvRXZpQ2d5WFBIRDlJTjFDSE5yd1MwcU5kTzFYVGY3TDFtYnZMeSt2T3M1Ti9jOTB5MXZidXlFMjN2dXVlZWUzL2wzN3l0d0hSSkN4R2k4U3VNRWpiVDRqeGFVckk5R0syNlcrSkF5Y0tNMDZBV2tWVEQrQWsxSkdqRmVuL25uSjR4T2o4aDV5Y3hJbmNad0hPMnhlN0cxdVF1Ykd6cWRvNHMwQmpSTmU4Y1RnTk9oakV1RG42YmV4VXh1RW11Q0RZZ0VZcWp4aGFSZTNzckJzSll4dmZRM244S2h6ZytSSUVCRlNRSVp1QVpBZVM3Umg4NGV4bGNUZzloUXZ3ViszVmZTdWpwV1VScUdsVWM2azhKamJidXhaK09Mem02L0U0bm01SnltMDV5V1l4T2ZZREQxaHZSSTA5bUdBQ212ZGtlNFRpa2dEYi9OajJGWFlxOER3dWw2Z002ZDE5VVJUazNNTkUya1ozOUhmZWdPRkVRZUJUc1BVeGpFRys0NjVJc2c1QTlMR2UrWjRMMGNHa0tOR0U0ZHhoaWxWdFZ2a0JsZGVmOHNMK2JtNXFCWDZlUzVSc1lvejJTUUIvTnNmSDMwZm5UZjJZTVo0d0xKbDlWK2ppSVRxSzJ1aytjWVJORjJibk9PWUNldkNvV0NERmtucFN2V2d1dTFhWmM4andadXd6TnRMK0g0OUdjd2lpUXJsb0JOMjBEV1dzUys5bGR3WVAwaGpNK2RkS0pnNm1PQXg1a3pESU9NbDd6UHJNeVRFZkthQnM4R2RjMlQ4UU9ZTlM3aVhPWlV5WGpSa0RQdmR6VTloWlp3QjJvRGRiSk9QODZNT0FDUFVJdGdNM09XWlpVQXFLQ1dNSkVsa09xcW9LeHN4QmZEUGRFdE9KYzlKYjJYeFhZS1RiL2g5RnV3N1NLK3UvZ0ZncjRneG1kUE9nQ3RQbFVRVXJCZEFBa29WZ2gwQmJwV2hVVHRKcG0rU0ZWTUFyQUtyK1ZQMkhJZVNyOEoyVlQwWjhuS3VBQzZleUhLVzdHczUyMVJsQVZsYXFwcHBXanFZTmtyS0FwTDdna25GQTlpZ1BPU0tmUCthcHJLcFV2S2RER2VhTm1QLzZNbWVrb1VMYm9BZ1VEQTg4Q3lsY1d2bVo4bDM5MjhCenZqZXoxMTF3WWJjWGQwbzdNOHd3QS9PQUR5WmpKVmlQcURpZGVRczY1SXZyZjFJSjVmOXpyYUk1dmMvYkEvZ2gzTlBkaTJ0aHZibXJvYzhkY2FYd1ppRm5pVnlXVHcrVi92NGN1cEl4WGVXVkFuUFlpREc5N0dta0NESzdPcEZxWnRvbHF2d1RlVFEvaDIraU1NUCtyZWd6WWY1WDJSUUw2bnhmWlFLTVJ0SUFPb1ZJMFV0ZW5MWXozWUZkOHYyelllNnBCZHhlazdOdlV4eHVkSDhmN0R4eDMxby93VytkVGlPUnFuL1g1L3JDV1dvS29xYVFXVXk4WVVqdnlSWEMyVTdRbnM3dWhISWlxZmJmbHRZRWEyS1NNNWdoMTNQWTFlVWhUcU9iNHVpZFhHZTllNXovV0Fzbm5OQnllSjBzdUtQN05ua2Z4bEh5N2xKNkY1MlNmRDk5VjNvcmU5bithSHlvMG40WlVFL3BBckVIbkQrZkVhdlR3aUFTL2xMMGlkTUYwMk5yajE5cTV5d3hVL21SNmV5WS8rVVhIamRFTGN3bjhYZmNyQVFwbkJ0SklsVlp0NzByOWVDNDBndDNOVW13QUFBQUJKUlU1RXJrSmdnZz09XCIsIHBtID0gXCJkYXRhOmltYWdlL3BuZztiYXNlNjQsaVZCT1J3MEtHZ29BQUFBTlNVaEVVZ0FBQUJnQUFBQVlDQVlBQUFEZ2R6MzRBQUFBQ1hCSVdYTUFBQXNUQUFBTEV3RUFtcHdZQUFBQUFYTlNSMElBcnM0YzZRQUFBQVJuUVUxQkFBQ3hqd3Y4WVFVQUFBUFJTVVJCVkhnQnBWWmZhRk5YR1ArZDNPUTJvYW1rN1dyak5yZHVoYkd4cHM2SE1UcVJPZllnRTVuYm5zWlV4dDRINjJDd3g2VnViM3Z4WWV4aHNDbk9vWWlDSWlnSVVxUllRUVJOS0tKQy80ai9tdGlhcUVudnpVM3VQWDdmdWVmR3RFbTA0aGMrempuM252UDduZTkzdnZQZEFNOHdLV1dDL0ZmeWNmSlorZFFLK3RrbytRQmUxSGlSQmxpdDdXdEhKRnFBLzBoTm1qekI0OHk4ZzhtYnRtcExqcWZtSk9NR0Juc2kyUFJtRk1OSk0xaGFKQjhUUXV4dFM4QnlhSEFGZUNoVFFxN3NvanNXUmxlSFFEUWNVaXZzcWdlcktuSHZjWTNYWU05blBYaTdKeHpBcElsa3JJbEE3MXl4SDdqOEdDZXVXWGh2cllsd2lFRkRhQ0VrTDFKa3M0VXF0cjhUeGU2TlhjSExuNEpJUktBNU5aZFpsZ05YU2poNTNTSUpUTUlOK1ZPRXFPK0Z1NFJiSitBSXVMMnhVTUZYNzhhSUpCN0l0WkZJNW9LNFdKckU5SU1hRG1hV01OaHJ3cEVHWXJEd1llSWlrdEY1QlpKelhzVlVhUU1XblY2aWsrb0hqMGs4OU1VaitDKzdoQTNyVEQ0WFByOTk1SjhLdmZ0Wlp0bDliQUg1SmFFSVJyb244WFh5S0dLR3BUY3ZOQ2h3K3Y0WHl2MUFPQUpQa1V3dk9oaGVhK0NQcllsQXFtNk80RXZ1WmVlcnlKY0p4akNRNnB6QXQrditJVG1FMWhETHNtTGJLMGRRcm9WeFptR2JQZzRCcHlhVXBObGNqYkNjSUx0R1dlUWQzRHQveXdGb3dwcElDVHY2L2lVZ0cwTGFKQUZGNE5rTjdvKzM5eDVHVEJSaEU3RHRDanlxOGxrWkNtT1NzWHo3aEFrKzRONU1vVVk3RGlHMUpvTis4eGFFUytja0NVeFdkR3N0RzhkQ2k5aWNPRVVFd0VQQ2MxejRFUk5HaHFMUU5zQVNLY0Z5WmFuU2NTQTJwL09GSm5rbGF0dWxLZEFmbVlaVmsxcEJuVzNrNWFxM2pHQzV3R0xsNWZiVUliWXlVOWlOeDlNSVVoL3gxdWE0RXpmOW5MOVRlYjFGQVdsdFYwdERMY0Q5VXFLdFdDY1k3bytvSjVlS0grRmhOWUhubWVYRk1GSFkwdnlDRkJoOFdqYXVNTUU1N24yOFBxSnl1dXpHOGVmTm4vRThPNWI3Qm5rbjJmeUNNRWJXUjRMUkNTYlk2MGNRSnVmUUpDNFVOK0czNmQrUnJ6UURsTjFPL0gzN0J4eTYrMTBMV29uK3VLRExWby9nZUZDTHhxblprczNYOE10WlMrVXlwMXhIeU1IbTduRU1SR2ZRWWRpNGJiK0JzNHRiVVhLN21vQlZUZkk4L1BWNXAvZFdRaFd4L1lUeGZWT3hPemhWd2Y5VFZaWFB6Um5WeHFSZmozYStiMkpYU3QzZ2VyRlRDYzRkYWxRTjN6WFVnWjFEcGxyZ2wwMjVPdkNoT2pqYm1NWnMrdUNrNFZkV3pCUTk3Sm13a1Z1U0VQVnBZZ1doUktyUElQQ0lLbklONEdrMHJGaXhJVG1xU1ZTdVp2TXVMdHh4cVpSNC9tMEgzeGtnUllBanJ4bU53QzAvbVcyaVZoLzkvWEwxTmk1ZjR0L0ZxQVlvTkFETzZtZHA4bWZleWljelpEMXh6WXIzdkFBQUFBQkpSVTVFcmtKZ2dnPT1cIiwgZG0gPSBcImRhdGE6aW1hZ2UvcG5nO2Jhc2U2NCxpVkJPUncwS0dnb0FBQUFOU1VoRVVnQUFBQmdBQUFBWUNBWUFBQURnZHozNEFBQUFDWEJJV1hNQUFBc1RBQUFMRXdFQW1wd1lBQUFBQVhOU1IwSUFyczRjNlFBQUFBUm5RVTFCQUFDeGp3djhZUVVBQUFOVFNVUkJWSGdCcFZaZlNKTlJGUC9kYlZhQ29CUEVDcXVsOUlmS1hFSGdRNmxCZjZpbzFVc1JQVlJ2OXFLekVBeUNiUS81MEZOWVBtdEVFUFVnbGo1dldTK1JrSDhmS3RSWkZnV21heWdwMjc3Yk9YZmZuZC9tbEkxK2NIYlBkNzk3ZnI5enpyMThkOEE2a0ZLV2tQbklnbVJUY2dYejVweVh6SVY4d1VFbVFhN29Xa3RJWkNGdnBzRlBWc0xQb1ZBSXZiMjlhb3hFSW1xTnkrV0MyKzJHeCtOQlEwT0REdVdYQVNIRXd6VUZ1QjBtdVNKc2IyOUhPQnhHZVhrNW5FNG5pb3FLMUxxRmhRVXNMaTVpY25KU1BmZjA5Q2hCRTM0U0Nhd1NNRE5YNm9GQUFCMGRIYWl0clVWQlFRRy9Bd1dsalNxWWZCWWFHeHREWTJNamZENmZwbXZSbFFqZGN4bytjbHVZdkxPekV6VTFOY2dIZzRPRDhIcTlXb1RiZFloRXdscWdpNFliYzhQRGNCOXl3MWw5TU5VT1M0VXE0MHhmUDBlalVZeVBqeU1ZRE9wOUNkR2E0OExNZm9wbjV2ZnV3Z3oxL1BtK0ErZzNaSnFBdFRWcllaZ1NaSElXTWVGMDBNOUY5bUlEYjREcGFld2dvbnZSQ0E1djJJaUJBOVVKYk5tYTFuT2RjU1lTaVlTc3JLeFU3eVltSmh4VlZWVTg3V1VCanhKNC9RbzJHdTFNTkR1TDg2V2xPUC9qdXoxKzRZSk1lQzZLekkyMkN2Rm9HQWFMSUI2UG83Q3dVT3ZXTTZjNlh3YVZ4dzhjS3BhWEFSTEJsODl3dE40Ump0dGVpSmx2YVlUWnFtQmhtODJHV0N5bXAxeWNtVm9acGY3YnFFVmNnUlpTc05NTUJjbUtDc1NibWhHL2VnM1pZSzJDVVZaV3BrWmJTdDFpR2MybC9zVWdmczlKbzJJYjFnTlhZRDFkV2lDc25PTGkxZVFtNHBldnlLWDNINFJ4ckE2NXdPRndhRGVTRXJEWDFTT3pxOUxwbE10UG5zcFl4Mk5CUG5LRlJXQ0k5OEJQamk5QngzVHA5TW5rS1NKN3NkOXVkRjAvWW9BcXl4WFNTRzcrbzdNUGJOWGwrem41RmhiZ3IrWThML2g3NmdTbVI5Nmk5ZFFHMmJmSExwQVBaTkpjeGRzeDFUU2laM2ZhYUZQNHV4RlNBdmQ5c3Y3R0p0bTNPMDl5QzNvdVA5TnVOMytMOUNtNlNSWXBQWEpNM0RwelYraHM4czNlVjljRzkrWnFubEYzQXp0S2dKWDBoTCsrRFQ2eVZHQXU1RWlTKzNWYzh1SUpLKzYwdGVhR3N6LzBjeFNYWGw1RCtNL1hsUVZpTlhIRGpxT0tuRWNMdVQ5YmlCYnhtaUxKSzNQNkhYby85V1BvMTJoS3JHUmpzU0wwN0RsbkpjNTZaV2F2T25ucGQ4dmNFWlQvOGUvQ2F4TE1Xd2luekRtL2Vjelh4RDl5eEJyTkh1RXZmd0FBQUFCSlJVNUVya0pnZ2c9PVwiLCBibSA9IFwiZGF0YTppbWFnZS9wbmc7YmFzZTY0LGlWQk9SdzBLR2dvQUFBQU5TVWhFVWdBQUFCZ0FBQUFZQ0FZQUFBRGdkejM0QUFBQUNYQklXWE1BQUFzVEFBQUxFd0VBbXB3WUFBQUFBWE5TUjBJQXJzNGM2UUFBQUFSblFVMUJBQUN4and2OFlRVUFBQVBLU1VSQlZIZ0JwVlpOYkJ0RkZQNW0xdXZHUDRtZFJBbFlKTEd0UkNDRVpFd0xPQ2NhSVFRWDJsUUlrQ29WRHFoQ2dsUmdUaUJSYWlkVVVTc3VYQ3FvVktrZ09DQWhEcWxVcm83aEVEaEFraU53Y1BwenFZS1NXdGhPbHF6MzljMTZ4M1ZpSjAzYkYzMloyWjJaNzV2MzN1dzhBM3NZRVVVWk9VYUJVYUs3dHU2OXl6SVN1RjlUaXp5Qy9kcmwzWVJFQi9JUHVja3pvdXI1LzErS3NLNWN3UmEzVkM2N2M0eDRIRWJxYVhRZFBRcnpoY042NlczR3RCRGl5MTBGVkRnOGNwZXdldjRjbk92WFlRd09RdlQyUW9aQ3ZFTEFxVlJBalByS2lscUR5STgvd1pkS2FabzhpMHkzQ1hnN2Q5V3Jaei9INWxjWFlENzNQS1JwdXBOMnVrb2VuRm9OOWRRdGRMMytEZ0tIVHVuaGo3UW5Rc2VjbTBVVkZrVnVYZndhZnQ1Umc1Z2cyeVBwQ2ZCZlFFSitrWVQxL2E4dzVSc0lmZnFaRHRjekxMSWl2ZmtxTk5IUzhqSnVuSjBoWCt4UlNONlpnbEhiZ0ZEOWFyWDVUdGFxTUFicU1JOTN3eGdCYjJBVC9oZkhZRC8rQSt5YnY4UEwzMlhYQTIvM0pmV1FUQ2JoWEx1R0N3ZlQ5SkloaFNBMzVNMEFDVy9YWXBERDlrb3ZZSFAvdFQ2UUE5UWRnbDM3QndnY1JHajBvbmEwMThmL2pxbmUvUHc4Yk50R09SekdlN2RXeFlsd0VPOUtpU0VwN3NaRU5FU00wMk1RTWIrWE84c2RsTFFGbm81NjdVL1lsVC9nQ3g5U3cxbmxRWUU3RS9sOEhzRmdrRVhxbUptWlJuOS9QNFo0KzJkOGtsNldTc1Z6cDg4SDhWUVFPTUJzQXo0WUp4OWhFVTUyK1Ric2hYOVJEM0ZPK280ajhPb1pkOS9LZzdUcUZZdEZqSXlNWUcxdERaWmxZWFYxRlpWQUFDZVkvRTNtLzhRbjhaZ1NxSExhYjVTYnlSWXhCeUpsUUhSejhNN2ZCQ1c3VUQreW9JY1QwSjlpUEI2bmx0UFhoR0VZWkpvbWpmcE51aFRzSXFzNzJFQTRRRmFJbndOK3NycE0yam9kcDQxakEvUWY5NnVYRGpjLzhWMEZob2VIS1pNWmJ4TThhVWo2KzREUEpXM0ZKbU5qTkVTMTk0ZW9NdlhzTm9HUzZxVFQ2U1pKSkJLaHExZC9wb1dGM3lnV2k3V0p4UGw4ZldjYVRwdEEyRS9WaUo5cUh4eHBYb3JRbDFvMm05MUdrc2xrYUh4OHZHUFlOTjQycEtPOWFRbzhHYWJOY3g5cmdZSVN5THU5UW1HYkIzc1I3L1RtVzlOb0NEQXFETHM0cndXeStzNTNiV0ppd3MzRjFOU3BmUXRvdk1XNStZdTlxVDR4MW5xTko3eVBwUkVtUHFyM1RielRtL1hsWlVmWENHaWpSb0ZSVllwbVoyZXBwNmZuZ1FSeXVWd3p1YlN6QUZHai9MbW1KajRFZVNQMm5Vd25YTm5pNGlJbEVvbDdFcXU4cVFQU1l2bFd6azRsVTZubjRKVk1kUW5PemMxaGFXa0pLMXpCbEVXalVUQXhKaWNuM2RhemppVnpOMDlVVHI2aC9WdUJIdUxYUmRZaldHOGhMSG52VkVpamUzSGNBZEthVC9hb1Y3OFVBQUFBQUVsRlRrU3VRbUNDXCIsIE1tID0gXCJkYXRhOmltYWdlL3BuZztiYXNlNjQsaVZCT1J3MEtHZ29BQUFBTlNVaEVVZ0FBQUJnQUFBQVlDQVlBQUFEZ2R6MzRBQUFBQ1hCSVdYTUFBQXNUQUFBTEV3RUFtcHdZQUFBQUFYTlNSMElBcnM0YzZRQUFBQVJuUVUxQkFBQ3hqd3Y4WVFVQUFBT1NTVVJCVkhnQnBWWkxhMU5CRlA3bTVvRkpFNW8wVmhxUUdxdFNwQkZiRlFTcjFzZk9qZUlmVUVIRm5SVVVWMm9LYmtRUTNZb3ZkQzFXQmQyb3RhRHV0RlZycVE5SUgwSnIwYWExamMzajVvN25UTzZrRjVxR1ZrOXlNcy96ZlhQT25Ka0pVRUdrbENIU0M2UmRwRWs1SnltN3I1MDBocVVLRzlrQWk1WGJDeEdKTXVBbnFVaVFocmh0dm42RjNOTW5xcFJUVTJxT1VWOFBWM3dEdlB2MndiMXR1emFkSk8wUVFseGRrSUREWVlNcndNelZLNUFqSXpCcWF5SENJUmorS21WaXBXY2cwMmxZdzBOa0ExVGR2UWRYMHdZTmt5Q1NqbmtFOXNvVmUrYnlKV1J2WElkbjh4WVlIZzhFb1pBUkZKb3lrWkRxRjdEK3pNSWM2SWYzMEJFc08zTld3NTNTbmdnZGN5cDZPQ3dNbnI5MUU1NTRYQTBLUWpHRWN6WENoaS95Y2QwaThueHZEenpIVDJnU0RsY0xrUXhxZ3R0VUhDNzBmVVI2VHhzOFRVMXdWUVZnMktCQ293a0JPT29sTDZoZG1QNU5uZ3pBMS9sSTc4dExJdGd0N05VbnVXZG1jelBFeURBUnhHblZva1FBaHdkU2xvSktIMkhYZ0FJTm1KLzZnTlpXK0I4ODFwUENidm81b0RiMXkyZXIwTkJndWRhc2hiVmloWkFVZTJtakNoVjZaejVJL1MyRnpESk5hVkV5TUZFK21YUjdWcS9td1hiMm9Jc3F1NllvQldkblorRjJ1K0Z5dVpTV01vSEFVNmtVaHhKK3YxL05ZWlZTN3dVUldCWUtoUUpNMDRUUDUwTjFkYlVLRTN2UXJEeWdBY013bERLZzFKbERrc3ZsMFB2K1BiNWJQMkhrQkdMQk9qUTJOaUlTaWNBcFBKL3Q4L204N29weG1OV0I0aFh3b0ZPWWhKWEpuNDIveGRiR0lIWnNYWS9PL2hlbE1lMEZnMnVWY3hzVmN6dlpuYVZUT0h6bWRBWTl2N0tZR2V0QlhXQTVBb0hBdkhsbENQZ01TYzZnMk1URWhCclFJWElTOFZnbWs4RzN6Q2hDdmlCcUVVUTBHaTNyTGU4RDcxODRIT2J1U2ZaZ2tBbThYaSt5MlN6S1NVMU5qU29qMllqYUQ5Wkt3Z2xnU3kvWHVrbDNqVThXY096aUcxTVl4ZXdYOCsvQmlxSXZEMGw3ZWUxMHF4RVBxbVAwa0FuNHpyalFzTEthd3VKeWQ3LzlZZWY4MGdpS0IwTmlWYlFLOGJVMXVyT1REcXpnZStNbHQ4NGRhNEUrUHY4bUV2Y3Y3OVdOTzN3WDZidzhRanJadGlsYUpKSDZsbGs4TU51dzdjWjE2bXlvdDRFcmlvQ1pkTWY1b3kwMHNYa0pKSFBnYkd0TGg0MDU3OEZKVU1HUERqNThuWkFIenp3WFEyUHBpdkJ0bStwdzdtaXpLaDNnQ2QwbzkyUzIyeVRxaEhlL0c4UEQ3bUVteE9Eb2pKb1RDbml4a3dEM3Q5VTdnY3MrbWVXZExqNzZkK1RpcFV2K3g3K0xkaHNnNVFCTTJuMEowbEFsakw5UkRqZ0FEbDE5T3dBQUFBQkpSVTVFcmtKZ2dnPT1cIiwgQW0gPSBcImRhdGE6aW1hZ2UvcG5nO2Jhc2U2NCxpVkJPUncwS0dnb0FBQUFOU1VoRVVnQUFBQmdBQUFBWUNBWUFBQURnZHozNEFBQUFDWEJJV1hNQUFBc1RBQUFMRXdFQW1wd1lBQUFBQVhOU1IwSUFyczRjNlFBQUFBUm5RVTFCQUFDeGp3djhZUVVBQUFLNVNVUkJWSGdCclZZN2J4TkJFSjdkTzV0WVF1QXVSQUlyRFVnUVhuVWNDZW8wMENBcUZPQVA0Q0tQTW5hSmFDZ1JFaVJJL0FCbzBnYWtPRFdTUTUwSXQ3RjlaOGxuaHp2Zk1UUGVjYzVQN0NTZk5McDl6SHpmenV6ZTdRR01RUlJGYWJSTnRGMjB3K2dVTlRPV1E1dUhhVUZCaG1CU2JJMFNVa1BJMytBamo1YW1mcXZWZ21henljOHdETm5IdG0xSUpwT1FTcVZnWm1aR1FoMjBnbExxL1VnQktvY2hoNkM0QjlXYnR5QUlBaWJVV3JNUlNBaDl3ZmQ5Q2dwbm5hcTJGdTRKVFI1RkN0TFJRMVlPclhkdndYdTl3b1Mwd2tRaTBTTkNiVEthdTVSSVJJM256emhHQkdodmVnUk0vYnJrL3VkUGtMei9vRXY0UDB2ZXZnUCt4dzl4a1UzWkU4bUFTcE51SDVUZ0x6cloxMlpCWTkwdHkySUNUSG5BdWdMazQzbGd6ODJCajdIQi9oNlkvZHRpQWFQMGtqck5sUmRnNDlQQ3JhR2dPQ0Z2bU9vOUV6eEgvcndZRytPQUYyandtSTQ1WmZDVWVtMVNMdi9obEhTdGhobDQwQS9hMkdGUTZLdGRsMlBEWWxHeUlPUm83QW0xZ3AwZFhvRkY2VmNyb0R5dmg3VC9HVytUcjZvY2c4Wlk0bWdqbDhFanFzaERkc2I2a3hvWDRlUUVBeW9EUk1ORTBEOVN4N2lnd085a1FMWmZsT2w1RXVBWENzcGxVTkNwS1l2Z0dSOVZraDZRRDVKTEhCNEphR081UkVESFZnSzBod3JPRGhVekFRa2NjZXZLVmJnbzZFeEdtazVYd01wbTRhS2dGdTVLOHhjSi9HVFY1V1U0TDJUSDdGT3U3eVRBWHorOXVBUnFNUXNUYk90NFpHNGd6NUwwdnVIUlZmU1ovVUU5YTIyREJjU21nY1RZWDc3SzBEWnlIOGtwZW9YbVVBYmFpRXhMVGxDckcxSi92aHVvd1FLazFCMVlYUWNsbWVBWkgvY3V5RHg3SUxtMXRpNVRCY001Y09Ia29mTmxCZmhkQXZkNmhpK1gvbzljWE1DMnJQRHlRVWxUOWpIeVBJeFpWYzVjNmd5OHRhSkdveEhWNi9YSWNSdzIxM1Y1ak9iNmZnUnlNQW5NcGI4ZFRZN2Q2QngvRnpsRFVJc1JIcG94dWg3VDR6aitBYUNzOHlqT1JrYlRBQUFBQUVsRlRrU3VRbUNDXCIsIHVtID0gXCJkYXRhOmltYWdlL3BuZztiYXNlNjQsaVZCT1J3MEtHZ29BQUFBTlNVaEVVZ0FBQUJnQUFBQVlDQVlBQUFEZ2R6MzRBQUFBQ1hCSVdYTUFBQXNUQUFBTEV3RUFtcHdZQUFBQUFYTlNSMElBcnM0YzZRQUFBQVJuUVUxQkFBQ3hqd3Y4WVFVQUFBUUxTVVJCVkhnQnBWWmRiRlJGRlA3bTdyM2RuNjUyV3ltaWh1NFdqVVpwSkloZ1JKUDZZTlEyQ24wdyt1U0Q4VUdmZERFa21oakNnaS9nSHhCSlRBeXhHRWxNRTVVMEVUREVoTlpZcExXRVltblVpaTZsUUtpaDNkMXU3eTY3OTJlY00zdW51eHU2WklrbitUSm5aczg1M3psbjVzNHNjQlBobkVjRXRndWNFRWp5c3FTOHRiaEFETGNxNU9RRnFGZDZheEd4SllLL0pZYUVRSVRtZytldW9YL2tLbjQ2TjR0MHpwSTJzZFlnSG01dnd1WU5LOURac1V5NXBnVjJNTWIyMWlTZ2RuakJSZUJaN1BwMkVsUC81ckU4NGtkenVBSGhnQzd0RnE3Yk1BV1NNNmJ3QWI1N2Q3MGs5Q1FoU0hiY1FPQmxMdG5mNy9zVCs0OGs4ZGo5ZDBEWG1UUVRUdUNlQXllTmwvUmN3Y0w0MUR4ZWZ6YUtiUzgvb01KdFVaVXcxWE14bktHMlVQRFBqazJWTW1KYU9RZFdXU3l2R0Z3NW5qNmZ3cHZQeHhRSnRXdXRJTG1nZVI3VW1raXhXRVJyME1MYWU1dEE3YzRWdVlBcmRBNnp3TDA1NlZqVWMwWEFGRGIzTEF0aVo5OWZHSnlZaGJkL3ZUSXZML3NrVFdhdVRNSmx0OEh2OStQSW1Rei8rbFFLTXhsTDVNNFdHOHA1MWFaNVpYQ3AvNVpNbzNOMU0zN2MrYml5YUtZS2VrZ3I1cVpoNUw2QnorZUR4dWV3NmRFV3R1ZVZLTnUwcnBtYkJSY0tlYXFvUUhCSzFYbVZwRXhIdG5Sd1lrNVZRUkluZ3MyazJlWlpRRzlGZ3oyTTBQeDJ1YWwzUlF4czZWckJEcjk5SHg2SkJ0emNkVWVjSUtjVXZGQWlNb1ZPeE5leWRtblBCUHBIWmhSQko3VW9SVDNMLy9NR1dPRTAzTkF6c0J0ZkJEZFdTWkpLT1R3Nmg3MUhyMko2dGxqVnBYelJnV1c3cFExM1hheUpOV0wwb3lmcFo3bko4b09DZFVVR05JcS9RTGZQSXJDd1h4Z3YwQW1UTVBMZjQ2V0hCakN3N1VIRXUrNUVTMGpuVkUxV2ZBK1d3OHNIWG94cDAxTDhNVjFwbEt5MDBjSnc5QTV3UFFyT0doY3pkWDJ0WXQ0Q2xzMWk2MlFmM2p2ZXk5ajhmTGtTRDhUbHJGd3B0REc1VGdRWGlBa05iWENkTUpoeE4zek9lVmlCcnFyMjJNWUdHTWQvNEtGZHJ6SHQwalJxQ1NXcHRiV3BhYnBNY0hzUExQTnY4T0I2R1BhdlZVNis0Vk1JZkxvUCtzZ3dReDNDVm5jb2RZd0lCZ1dlTW9KUkZIS1hSQ3ZhNGVxclpDYlVnc0MrVDl5R1ExOXAxUjlBYlNFcnZidGJUZnZwRk5FbTAwbENKcE9CNHpqUWJKc0h2ampBQWdjKzU4aG02OHFhQXN0ekpQcHZqSTZwNVhaTm5CeTZOd1pvRmdxRm9KOGNjc1BQUGMzOGV6NUd2Y0VWZ2N6K3kwTnE2V0RsWGZTcVFOb3dESVQvK0Yxamx5L2pWa1ExVDl2Nmp1cS9mQnVxalVyUG54VG53OTNjV2Q3Q1hRLzhKcURmeWRiNVlIZmxDeGRmT2hQT0U0c21FK091czI3TkRVUnVCV1RnbmhlNE8vUnpaZkJFWmN5bG5reGlsOWUzbko4Y0FvNGRCU2JHd1M5ZUxEazBpYmRpbzdnS3VyckJOajZoWEpkOE1tdFZRby8rUVY2L25PRC80OTlGM0F1UXFnaVk5TllTM2pHdktmOEJtWnJHSzBocXRzTUFBQUFBU1VWT1JLNUNZSUk9XCIsIHptID0gXCJkYXRhOmltYWdlL3BuZztiYXNlNjQsaVZCT1J3MEtHZ29BQUFBTlNVaEVVZ0FBQUJnQUFBQVlDQVlBQUFEZ2R6MzRBQUFBQ1hCSVdYTUFBQXNUQUFBTEV3RUFtcHdZQUFBQUFYTlNSMElBcnM0YzZRQUFBQVJuUVUxQkFBQ3hqd3Y4WVFVQUFBS05TVVJCVkhnQnJWWkxiMUpCRkQ3M1FZR1FDQnB3MXdiWG1salRYVEZ4TFlsYWY0Sy9RRXcwWFVxWDFZMy9vRFh4RDdqUlpUV3hyalFTSDJ1YWFzSVNDQ0U4N3gzUGQ1aWgwOXRMQmN1WG5NN2p6bnpmZVF3ekpUb0hTcWtjMjNPMkE3YTZPa0ZUejFYWWlyUW9zRWtUekl1OVdVSk9EUGxqYnFwc09ZejcvVDcxZWoxcHd6Q1VOYjd2MDhyS0NxWFRhVXFsVW1acmkyM0hjWnhYTXdXUURrMU9nOEdBMnUwMmpjZGpJWFJkVnd5QUVLK2wwV2drNDN3K0w0SWFWUmJaT1NPZ1BSZDFFSGM2SGZFT3BMeEJMT0tNR01TR3d5RmxNaG5LWnJQbTh4TVRpV055enMwM3BBWGszVzZYa3Nta2tNNGpnQllSV3lKSTF5M2VjK1RxOVVoTkRwN0FjNFFMWXMvelRnbllabEptMWlRU0Nka0xJVjIvUFlsQWUxL0hvTkZvaUJxOE53UzI1K2pEMjJna2lBSUdjdFNyVUNpWXo1Y1J3WllwS2hiREkwTVdSWlRjRm9aaEx3cXZvd0FxRUhpQUhvNmg3YlVSTUtUUk5rN1E3QWVYeGgwSXJLT0g0MmdMeEJIWmJWdzBwamJtK0RLS1B1a2ZsT0lmRTlTY0lDQW5rdnQvQVN0ZFlzR1FoWG0vSlY1RWtXVTAyRmduOTg5djh2U0crZWwxbE5vQy9oT3NybExxYTAzbTRmU1I5QzVsYVZsdzE5Wk10elVWOEVvbFdoYWM2emRNdHdhQmo2SmFMdE95NEo5d3ZVVU5VT1FtUnVPSDk4bjVmRGdwTmkwRzVCOTNiY2o1VDN5cG1lbHJMcDhXM0JzZk1QS2ViVStMcGY1REFPYS9mbU9tOXUyNzZCRmJ5OWtza2F0RkZpVUgzS2ZiSnYveU5weGVOSG4rQk1ITFhSVmN2YUpDYmVvY3czZXNEVjdzMmk5Y0pkNFRwYXJUSlQrL3EyRGo1aG1oMERJaDNycW53c05QTm5uVjVveDdNcUV1MTdlTXVlajAvaDNScngra2pvOG5HM0RuYjk0bXVsc21wRlVqOXNtY0ZRa2UvWDAxUHc3VUJmNjdxR2lDcGtWWTEzTlZmY3huNGk5MTdpVlRoVC9QMkFBQUFBQkpSVTVFcmtKZ2dnPT1cIiwgaG0gPSBcImRhdGE6aW1hZ2UvcG5nO2Jhc2U2NCxpVkJPUncwS0dnb0FBQUFOU1VoRVVnQUFBQmdBQUFBWUNBWUFBQURnZHozNEFBQUFDWEJJV1hNQUFBc1RBQUFMRXdFQW1wd1lBQUFBQVhOU1IwSUFyczRjNlFBQUFBUm5RVTFCQUFDeGp3djhZUVVBQUFTVFNVUkJWSGdCcFZadFRKdFZGSDd1Kzc0dFh3MXRCMk5nK1dqQkdRYlVqNkQrQU56SEQ2UFdMU09hYVdLTWM4WXNaajhjV1p4YitFTWJFNmZSNkdJMDhRY0pDMmo4WTF4UVIySmlWcllBT3JNRUhBeWNtYlIwS2h1VTBnb3RoYjRmM252N3ZxV1Rvak03Y09EZTIzdWVjNTV6enIyM3dMK0lwbWsycWwxVS9WUUQycm9zNm1zZFZKMzR2OEtNZElBN2xaN05ISkVjNEVmcFB5OVZHNXNQQm9iUVAvVXREbmFQcUs1Z1RHQnJRblUxeENZM3pCNFBwSlkyd3pSSzFVY0lPYjJwQTVZT0had0R2MzNoZlFTaklXeXpsS0Y3dEVTcFVRcEZacUxHbDZIRjQxQkRNOVFHS09ydGc5am9ObUM4MUluUG1BZzVJb2Z2L0NrOCs4V0xNRWttTkd5cng1WWlPMFJxSlNRU1lDb1JBc2xpZ2FtaEVaS3JGdkhuRHlENTNyc1pCNncydHpIUTh6ZkswdUx6bjhJbmw3cnh3RDFOOUZPUzJmWHBvS0E0WStBTU5QcVR0Z01mcTNSZmFtd1Vwc092SWYvNENTTmREOUdZZ2dZRGxocmIyTTF4ZVAzdm9LSzRIQWs1U1hXRmFnSTJLUTY1ZEFtcWxnQlpTYk1RVmxZZ0pKa20wNndxS3BDaUxPU1JJZWoxNitHeDZkRUgyTVQxZ1J2QldJaEc3K1pSUDFlM2htcUxpbXVMSW83SktzaThBT1V2b0hqWURDbk1tS1FaTWo0S3BTTmZuUUJhVzFGNDloc2pRM2JHb0owWE5UakV3U0VRTEt4RThNcTlpL0RBaGJ6ejIvSElqN1dRQTA3WS9OdXh1bHlEeEJFcjFncmlQSExHaUxPS3hYaEIxZUZoZ3dXVERyYTJuNDFZSy9JZE5LaWRqbGtjYkk1aXgvUU1EdHlhZzJjNUQvWTZFMkEybzlRK0JpMjBoQnN2aHdFR0hxZktIQzJFYVd5RUZRbkt3SURoWUpkRS96eklSaXovSEozK05tK05ZeWFhUk1PNWN1Q2xJL2l6NVFtY0hRemdhRGZ0ZmZjT0NBNFZhRXBodFdZSmVaTUNaWkFFa1ZOcEJreEhoZzBIVGtrdkNBSXNQU1JOd2tHM0RWeW4wYlRQSTc4Z2dxdS9McURXVVl6dmZ2Z2RwYS9meEgyM1RKQmRNY2lyRXZKK012RjJJbnBMVW5kUWFMb01CNWx6Z1BXT1pHWEE3QnhROWJVRmRWb1JiQll6YjhuWmNBTE4zUkpTOFNRQ29SUWdLK2xlellJZ3VQMzBNZ2RCWHU1OEsxOVE2S2R6UkVCUE1BK1J5aExjdU55TDJzcGlUUHdXd1F0Ynh4R0p5U2plbDRBam40Qk1pY2dsN0NyUkpacHhzTHZtc2N5R3ZsL00rUEx4T0Q2c3VZNlU5ak1xUFczby9Lb1RtdTh3d3E4V0lGVCtCd29mVmxBNEplVjBRQnFiak9FWWMzQ0JqZmJYUDUzWmNHbGVnajlpd3YyUGhuSGFFc1BuVDFxUnNDNGdVV0tIZVRxS3RRa1JVb2RsQTdDUkxJbGVncnIwczRQR2lyeklabnQ2OTJKd1ppaVR5R2VjYTJpdFVCQ0lFSFNxS3RSeEVVVWxHb1NQQzFDOEpHd0E1eDFVVlFYVDVURmoyV1hjUlg2V0pYYlk5dlR0M1ZDcE1yT0s3eThTdFg1VUZFd3Brak55dzRIb3Y2aVNoa2JtL1F5OWl3NFpZUnlpR3QzdGJFUFh6cFByRnJyTXJkRnQwNkthQ3p6YkNYbmpCSFJ3L2phd2RlNkEzWHJHZ25mWFNYUlJ6Vmo5aDJoWjRPTHhONDFsbjQ3NWo4MmE1alhld05IWks1cnpJN2VHdDZ4Y3J6VFlVMXJaRmszTlVvVnArejVOSFI3S2ZqNjkyWmk1bmt6MldQRHJtODFaMGZ1dm5jT3h6eVpseCtTTXhBMnM5TXl3cC9JcEQwaExxMkdhODhuTVRUdjk2Si9SN2x6ODJsMTh1K2pRQVJhekFBUDZtbGR2ODAzbGJ3anZrell6NTUrNUFBQUFBRWxGVGtTdVFtQ0NcIiwgT20gPSBcImRhdGE6aW1hZ2UvcG5nO2Jhc2U2NCxpVkJPUncwS0dnb0FBQUFOU1VoRVVnQUFBQmdBQUFBWUNBWUFBQURnZHozNEFBQUFDWEJJV1hNQUFBc1RBQUFMRXdFQW1wd1lBQUFBQVhOU1IwSUFyczRjNlFBQUFBUm5RVTFCQUFDeGp3djhZUVVBQUFRdFNVUkJWSGdCcFZadGJGTlZHSDd1YldjSG5kMW5BUmV4WFp5ZDBkRUJLb1pBMW9nWU5ZWU5FNGxCb3BrUlFhUEU0aCtOYktPYkdqVm9RcUlSRE9yMlIyTmNJRzVHZjVtd2poaEJzaW1kR3JRazZ5cHFDWlJ1czkvdHZZZnpudDY3WGJaMmdmQWtUOCs1NStOOXpubmY4NTVUWUJFd3hxbzQ5M01lNTV4Z2M0aHBiVjVPSjY0WE5Fa3pjSzNvS3lVa0ZUSCtDaTk4bkZYMG5SM3hJek0waEJ3djJmUzBHR055T0dCeXQ2QzhyUTFsclI1OTZoUm5qeVJKQjBzS2tEczA0OEpnNHIxM29ZYkRNQzFiQnFtNkdyTFZ5bWRJVU9OeE1FNGxGS0k1cUJ3NENyUGJyWnZ4Y1pHZUJRTGF5b1g2d1VNbllQbm9BTnZoa2lUWmJCYUQ1bStWYVZTVFNlUi8vdzJXbmJ0ZzdlelN1L2ZxTzVGMG4vUGlGM0xMbTBkTzQ5REFIM0M3Nm1CWDR0aDFjWmpkbHdvdGRLVWcwMG9KbWJGUmxMKzhCOVo5WGJxNzFuQ1JrQzdReDR1T00zOUZjZStPQWF5Nnc0NktwVGNKZDlBYU5xeTJzK2NlYTVDVzE1Wmpua3NGVlZWRlBwOUhKcE9CM1c2SHhXS2g3bUV1OElDa3JYNkNXaHJidnNSa0pBNDNGK0NkWW1Va0ltbmUzUGJncmV5cGh4Mm9xaWd6dWxZSUVFbkF6RjFLSWhxcVpmNnpsV3IrMFgrRmNVREc1WmtzRW1rRnlRd25MeE9DZWZSL0Y1STZlazlKeC96L01PTk9hREZFazhtRVhDNG5oRFI0U2FDZGFvUCt5VUpJK01DTFV4bGhkSDF6TFdUZWxPVEdrNm04S0lOL3g5SDl5YmoweU40UjllUjRWREVLeWJJc21FNm45U2FQbWYrc3Bsb2dHQldySjJaeUtpNXhrVWZYcjBCME9vc2ZBNWUwc0JiY1JiVS9RelB5OXU2ZnNDMzJNMTZkUElxVmlRaFUzaTRVVzFxQWs2ZXA1cVFZaU8wMnRuL0ZYWlFRQW51ZWRPSDFaKzZDcFV4R1htVUlobWV3KzUxUkJNL0hyejVGdkUrbDZTcFlaK1FiZEZ3ZVFVMytmMG5saVdnN0d4VGp6TGdLaGRoOStQVTVaSE1NYjcrd0NtYnVvKzNkcDNEK1FoS2xVS2ttNmJ5cDVXcGVtcDh6SkJDaXJWUlcwTkZLYWtjVGNLMjhHWjJIeCtGeTJOQlFieTBwOEd6MEJQTkZqa20xK2Jnc0VnOTBsVGoxN3FsWkFjODl0eUJ3THFhN0d1OS9jUmIvUlF2QnVtM0YwZ1dHTjdqcnNIL24zY3JhcHEwbTRBT2t0SnhRRkVYUEE4S3ZGRlUvMWRvOURzeDVGN1BHQ2VISTNPcVgxeXhobisxYnB3NGUySWkxVGRVbUZJRkJZSkNDVExkbWpMNDJ2L2c5L0dNWFpqUFlDSnUxRExzZnZ4MHZQZEhJS3BhWWk5M0NJdGtJTlRVMWVuT0R6Qk9FN28xaCt1cDZmczNzRG96WXNyR2VqUnpleEY1NytrNlVNcTRkUnRoc05yMjVuKzRpZllCVGU2Vll6NUV4Wmw3M09UUGYzOGM4elcrd0grcWFXYWE4YkZHbU9WT2MyYmQ2alMrZWMvNHF2SHB2NzZkajZzZjFtOVMwTnZrNmpSTzhLQWJlNGROSEtJR0FrbXBxRkpPTlFta0RxUy96MEdhbStJZU54bjFHbThYOFNlcjBzb2tuVStVdm0vTHRFTmlaQUZnNFZCaFVXUVc1dFJXbUxXMjhYUHpKTExVVGlray91M1ljWnpmdzc4S3JHWWdaREU1b2JUN3RtSmZFRldDLzVGN0F3ZFg1QUFBQUFFbEZUa1N1UW1DQ1wiLCBmbSA9IFwiZGF0YTppbWFnZS9wbmc7YmFzZTY0LGlWQk9SdzBLR2dvQUFBQU5TVWhFVWdBQUFCZ0FBQUFZQ0FZQUFBRGdkejM0QUFBQUNYQklXWE1BQUFzVEFBQUxFd0VBbXB3WUFBQUFBWE5TUjBJQXJzNGM2UUFBQUFSblFVMUJBQUN4and2OFlRVUFBQU9OU1VSQlZIZ0JwVlpMU0ZSUkdQN1BuWEV5c3pLemh4SmlpNEtpS2JPaW9LS0NvQmE5YUJFSUxaSXlxSTIyQ1NTaUVTcWlYTFFVb25RVFJXMHFKQWdwbnlnSWFnL1JTR3ZNR0owY0g2TXp6bnZ1NmYvUFBjZXVqWXBqUDNQdWVkenpmOS8vT3ZjTXdEekNPYy9BZGd0YkhUWW4veXZqY3EwVVd4NGtLNlFrQVJZcVZYTVJzVm5BUzdCellNdWcrV0JUT3pocjZzSFYzQTZSQ1ovWXN6dzNCN0xzbTJIamljT1FjM0NYVXZWaUsyZU1QWnlUZ01JaHdRVndSMFVWK0FlR0lHMXRKaXpKV0FFcHk1YUtmZEdwQUVUOFFaajg2VUlsZ09QUEsyQTFFa3B4SUVsNUFvRzBYTEE3MzdkQVE5Rk5XTGZIRGhhYkZSaW5uWXcyVGZkYzZrVURJUmp0N29PdEY4L0M3ckxMQ3U2YThvU3BtR1BYU1dIeCtYemdHeGtEMTR0YVB0THlpUkVZYms2SXBhREFueTdudzUzZHNPMXFJWklVcTNEdFJMMStSVkNGM1lWb05BcnUvZ0g0ZXVjeGhGM0RncDlOVzJIeTF6U21vWTdQOEtRZlBma09KOTlXcXJ6VUk4RVJKcTEzMG9ySDR4RktOcHNOZXU0OTBZY2IyelZGa2lEa0FBTWpYTXdnR2ZuY0Mrc1BGZ2dTS2F1cytEaERvMGdrUXA0QUQ0U2hyZVErK0hxY0d2c0hYQmx1N2xXNFl1RW9vQUs0c1RpR3NHVWJYcFNpaFhCYUVXaWFodFd5SEhZNHJrRFdYanZFTVlHeFFCQ2IwY2RuOUNHam56TG1rVkV2YUdRUTVxc2Z5MXJLSWZJZ24wYXhXRXdRaE55ajBGZjVrcnZlNENiTlF2c05LMlVCSlVRS1g4U0RZWWhIWTJKT1c0YWFPdFhyUENJUUIwclhkVUdRbHJNR3N2WnRCM2R0S3d2OCtnM01nbll4RGFhMXpUbmdHSG1kRyt6eU5RVlZIVWhGTUVQUVpLNEhROERqY1JGcUhxZjA2WkNNbU8wZzAvcHBZTEZZUlB5Q2d4NDIwZk9EaDRiSEdTeENTQ2s5TDBkTnZkTUVLU2twWW1VcGhtakRxU05zZGNFV0RvdVVMUHNtTmZ4SUJBMDBvdHFuaEVYeHdIVGRmc1JHMnJvVzVRRlpsWHZpa0pxK3BvTkdTUjZubWQvdkY4bldzZlJhaTh0MVQyT0hsZ3d3blllMDNHdzQxL1ZLTFcvVU1PNzAzYWluV1dwcUtsYUFYMjgrZjRNbkEyNG1PZnJzZ1FwdE5YMkxGRWdSTnEvVmFvWDBOWm5hL3FkM2VmYXgvVWtCay9VNzhVT1hhZDlFb1JWM0E3MFRCTVNrRnNnTGIxdVg1bnJYREF2SnNnTFBSL0Q4c2t0cXVWeGlKbHc0RHV6bzBvR3hMOS9nUStGMW1CcHd6MHV3RGo5dUJMeitRSUVaM0tFbXMxMlpwWkpFbkhCM2N3Y00xRFFnWWErNDNVaHNLOU1GSUZXTENYaldLM04ydDQxTHY1b3ZYT3I0Zi95N0tKVUE0eVpBcDF4enlES2ZVLzRBVjVkQjlWWnVBY1FBQUFBQVNVVk9SSzVDWUlJPVwiLCBnbSA9IFwiZGF0YTppbWFnZS9wbmc7YmFzZTY0LGlWQk9SdzBLR2dvQUFBQU5TVWhFVWdBQUFCZ0FBQUFZQ0FZQUFBRGdkejM0QUFBQUNYQklXWE1BQUFzVEFBQUxFd0VBbXB3WUFBQUFBWE5TUjBJQXJzNGM2UUFBQUFSblFVMUJBQUN4and2OFlRVUFBQU41U1VSQlZIZ0JyVlpOYkV4UkZQN2Vlek9qcFdPS1NQeTNwQ0tpeXNKT0ZQR1RpQ2lKalIxTEc5R0ZoWWpHdE5oTEJCR0pFb21GL3hLSlJFUm5MRVFvOVplVW9sT2trU2dkN2N4N001MTU3enJudm5lbnI3UjAxR20rM3A5MzcvZmRlODY5NXc3d0J4TkNsQk1PRWU0VHVzU1E5WGw5OVlSS0ZHczh5U01ZcXpXUEpxU05RTDZYaWlpaG5OdXh0aDYwdEg1QW5Ncmt3Q0FldlcyRVVWRUJvMllaU3VycUVLeGRyYVltQ1kyYXBoMGJWWURkNFpIanhkdXZPSHIyS2Q1MS8wQzRiQUttVEo2QXN0SWdUbjArRHllVmdpRFlpUVRQUWVUeVZRUnFhaFJObEVRYVZVTWZZZVY0OHZvTHpseDdoUldMcHlPNmV3V21Sa3FoNnpyU0dSdDZPbzJBcGlFUURpTzBkQ21DVlZYb3I5dU05SkhEQlFHT3pUQUJ6MytTdktPckZ4ZHVkMkQzOW1wc1dqa1hMOS8vd1BaMTgrRUlEV2JXZ1c2YVBxUmhRQ0MwcEJxWkU4ZVJQbG9RT2FSaUVsQWQ3UE5FVHorYVRyZGh6NDVxTEt5SXlGVUhBd0hjaUgyQ1JlUm14aFdnSmRHZjYxMUJzT2wvY05ac1pHZ1hvVlcxSEJlT1h6TmhyZTRwN2VMQk94dnVZVnA1S1NhVHo1bWNrYlBkVU9Wc1FRTFVvRldEUkRSeWxZS1JObUVFRE5vTllBM3RZZzBmYzNiUk5uVmFIcjc2aW5renkzQ2RWdnptWXo4NlB3M2c0cDBQV0RBbmpKU1pweGprb1VseTB5MFpsZ3Y5ZTUvMHR4MlBJeGVQS1pGNjd0dkt0WlpZTjhWQ3c0R1R6ekF0VW9KTGR4Tm92dG1KdVRQS3NPL1lZM3pwdFdnSGVZQldEQ0xrWFVpazNGM2dXNjhVWU9SdTNWUUNxemtHeStXeDdQem1mZGF4LzNnYkpwWUdFSjRVd21ET1FkcktlOTdXSUV6THF4ZU9Id2xhMEhJNU9Wdkc1RUZjZmExa0FYbWhFajJwd3Ewd3MzbUNqZDVrRm9hdVVTeDgxNFZqb0lnWmppTkxEU2pBU1NhSENVaDc5cVlCZW5lM0RKUWFXS3o1UlpUeHJoS3lFb244RStsSVpsUlVxbXF5SUdCUVRoRVl2L0VpOWFHMDBjNEM4a3dGdDlUaGY1Z1l6dFdpOFdXZ1NoKzNySTNyQVRvQk9vcVBBUk03WEZLbW5kalJxYnJuNjVUNU9PU3QzQW9kYkpBREZZb1ZZSlJjdXFLNnpoRjN3djNvUGpEOFNvbkJ3MDNDTEFtS0RDRTdSdkJZaXpCNHBNbi80bFVPWDRINy9Ba2xZbmtUTThXVEMzKzYvbFVrcWtiWTdlM0NXbFQxbTFER0IvNlczYkJlMkxGV1AzblV6em5TazhucU1uMXoyNkhFWlZOdUVjOWZRSHhNdUlNaTVkQnJhMkhRYWRILzhtU090aE9PeVRreGRyc3Z4dkhyb3Q0ajZQTVJkbmw5VWUrWWoyby9BWG9HcVNpeDV1ZjRBQUFBQUVsRlRrU3VRbUNDXCIsIENtID0gXCJkYXRhOmltYWdlL3BuZztiYXNlNjQsaVZCT1J3MEtHZ29BQUFBTlNVaEVVZ0FBQUJnQUFBQVlDQVlBQUFEZ2R6MzRBQUFBQ1hCSVdYTUFBQXNUQUFBTEV3RUFtcHdZQUFBQUFYTlNSMElBcnM0YzZRQUFBQVJuUVUxQkFBQ3hqd3Y4WVFVQUFBTTZTVVJCVkhnQnJWWk5TRlJSRlA3dWUyOU1VOVNGaE9aaVhBUWhoWCtSN1pvVzdpSU5vdFpGdGM1RnRFbFRzL1pGUkdBTFhZY0xyWlVnbUxZcUVmcUJpSDVReVNUSW44bWNOek9PODI3bjNIZnZ6Tk5tZE1vT0hPNjk1OTd6ZmVmbnpiMEQ3Q0JTeWtyU0h0SUowbG1abFZWdDZ5U3R3OThLTzJtQVFtVXdINUhJQVg2TmhsN1NTbDV2cnIvRXhzOXhOVXJ2bHpwamhXcGhsOVNqcUtJTlR0a0o0eG9sN1JOQzNNdEx3T1hRNEppY1dVUmplUmZzOUFJQlZrRTRGYkNzRXVYaWVUSEl0QXN2K1JXU0xQdFQ5K0UwTkJpWVhpTHBNd3NyUitUb0g1akdoUnRqRUZZUlF2c1B3U21xZ0dNTFdDS3VsT2RPcUJTaDBubzR4V0dzdFo5RzdFNS9ob0I3WXhhT3FYa0cvUEUwSGcyL1IzUDlBZGdpUmVwQkNEOVhrNjRNakpZTkZCMDVpc1REQitwQTZjMXUzdW9oekJIS1pNNWt3S1dwZlBOeEdiY0habEJkVlFZMzRWRzBTVDlxSkVqajVKOGdNbit1Yk1KWDRjWVFPbGlMQkdXUm1wcUU3dCtnS3BHTy9pSXZ6bDBmb3lnc0FyR0lJRTJBcmdJU0NqenBrMGhXWTRzcm14MXpZVHMyS0JuRTcyWktkWW8vYzg3Z3JHbnEvUGQxMVphVnRRM0VGRUhDQjFUQUx0VmtHN2pVV2NVcGtKVlYxZEQwMUpUSmdxV1RiUjA4RzUyYzE0VVcrQkZOS2dJR1ZPb1pUWkM2ZWt4b1FoY2lGZ09XbHhRQmErclpVME1RNFNZMzhlenRwMlc5YlNHWjhyQkVKSUpCcFJkb2F5Nmh2YVVsaUZSS2VmUEo5SXNwczFubjZJWmdibkY5eTY4aXRla1JOdGs4VC9YRjUrQU1BMlNTNTdSUDRQcERVK3BGbzFzSUFpSzJqZkFCVkJiWmdQTkprTVFJWnpYSGs0cXlmZnFVd0Y2RXZlMXduVmxHTXdTUll6VzdSbGlvV05scjR6VVRxRytxSXhMRy8yQmc3OUNaZHJNY1pRSjErM0VHa1picXdMRi9BeGZoTU95VEVXTWFzZWkrNEpZLzUxWDMxV2JzQlp5MStNbXdNUTBGNzZKTHBORklTNDFQSXMzeHdzRlpRbDNkVlA5R25xcTNnU2VLZ0ptTTRkYVZaaUpwVWlUTUkzZmhVV2RvdEFrODVOK2tMSDBhODQ4SHB4Zit6WXAzWDFiVGg2M3p0dU10Wkw1Y0htVWdiRFV2YmdVK1g0YVZyVHVEOTVwRnJpZXpVNU9vWDdpTXZ3TGNjU0Q1QVhMem0rOWdsUU1seCtrcGE0TW9hVFd1T1ovTVBHbXJSMzlJRmk0VGNnLy9Mam8xd0dvQWNGYmIrSG1zM0Fuak40Rm8vQ1laYkRjY0FBQUFBRWxGVGtTdVFtQ0NcIiwgbW0gPSBcImRhdGE6aW1hZ2UvcG5nO2Jhc2U2NCxpVkJPUncwS0dnb0FBQUFOU1VoRVVnQUFBQmdBQUFBWUNBWUFBQURnZHozNEFBQUFDWEJJV1hNQUFBc1RBQUFMRXdFQW1wd1lBQUFBQVhOU1IwSUFyczRjNlFBQUFBUm5RVTFCQUFDeGp3djhZUVVBQUFMMFNVUkJWSGdCclZaTFQxTkJGRDV6ZS91eXdTSUJFaGNrTmU3RTRJTWRtdURHaGNZSC9nUitnRm9UREV0TFhCZzBNUkovQUpqNEIxd0lTOVNJSzQwRVpVMWhRd3pHRmt2dDR6N0c4MDFuNktVUGJDTW5mTXp6Zk4rWk0zTm5TblNJU1NsN0dZOFl5NHdOV2JlYzdrc3pVdFN0d1VrVGRHcno3WVJFQy9MN1hHUVl2V2lYeTJVcWxVcXE5SDFmemJGdG15S1JDTVhqY1lyRllzWTF6NWdSUXJ4b0s0QjBhSEtxVkNxMHU3dExydXNxUXN1eUZHQVE0cm5rT0k1cTkvZjNLMEZ0R1JhWmFSTFFrU3QxRUJjS0JSVWRTTmxCb1NFWUJZaFZxMVZLSkJLVVRDYk44QU96RW1GeXpzVlhwQVhreFdLUm90R29JdTFFQUNWV0hCQkJ1aTZ3VDliUzg1R2FYa1NDeUxGY0VJZENvUU1DUVppVW1UbmhjRmo1UWtqdjM3eGFnWTUrQTQzdDdXMmxodWdOUVRCeTFCRnQ0MHF3Q2dEazJLK0JnUUV6Zk1MbWZ4T29iZjdZbzZVdk9RcFpOaVhpWlk0b3BNbWJEbHFEMVZMbHVoN3QvYW1RNTN0MGRUUkdwMC8yWURBTmdkdW96YjNkb3BlTG04d1hvbWpFcHI2ZUNGTnp4QTBTemUzYWl2SjdEcFVxZktxa1IzZDNCRDJmUElQdWNRaWNSMjB0KzVzOUxlU0JLbzZrbndXSDRtSGtGMm1vRXdvdFVrOFJVYW5xa2VQNnlwZWtSUi9XZjVuaGxLMDNoTEk3WmUwdTFKL2o4am5uYnlCazhZWTJaa25VaUFGZm5hYUFNcGY1b25OQW9CNWFpNGJuUy9Lb1V4TUIxQXpITkl0SzhsaUVqc3BTZzhkTU5iOHZNRDdjUjBkbEk2bmpwcnFLRkwxblhMazNJdWpHazhkcW42eC9IczNXeHQ4MDd3blJ4YWs1MC9VR0h4bzJPWWVXZStjV2lVOHJLbS9kU2tnbHdCZ2FvdkRuVmROOXl1S1BDZmZHTzdSQ0Q2ZlZSSU51QlFENzFXdlR0UkM4aXlZWmVURjJpU3d0MGkwNVRFeE5reGcraTZwNkd3NU9xajEveXJ4bnM5SWI3Sk8raGp3RUdNZGM3K2xzOElWTHQ0NUV5c3orbE85cjBoczkxeVRrQjZDSUoyNUtmK1Zqa0R3VDVHejFaRUpkWGQrcXpadE9TNHRFNjk5SWJtM1ZISERuajEwbXVuYWRrRlp0TFovTWRpdkJvNzhnTzdkbCtSKy9MdEthSUJjZzNOQjlHWDNNMjlwZmt5VXhRdENDV1ljQUFBQUFTVVZPUks1Q1lJST1cIiwgTG0gPSBcImRhdGE6aW1hZ2UvcG5nO2Jhc2U2NCxpVkJPUncwS0dnb0FBQUFOU1VoRVVnQUFBQmdBQUFBWUNBWUFBQURnZHozNEFBQUFDWEJJV1hNQUFBc1RBQUFMRXdFQW1wd1lBQUFBQVhOU1IwSUFyczRjNlFBQUFBUm5RVTFCQUFDeGp3djhZUVVBQUFOMlNVUkJWSGdCclZaTFR4TlJGUDd1ek5BSHBWcXJNV2hVcXNaWG9zWlgzR2kwNnRJRWRXSGl3b1V1WElzN2QxUi9nWC9BYU5SRTNZbEd0MEFpYkhrWkZSSjVLNDlFS0ZCb081M085Wnc3ZDlvYUNnSHhKQ2YzenUwOTMzZk9kKzZkS2JDS1NTbGo1TTNrcmVSRHNteXplcTJKUElIMUdnZHBnTFhhczVXSVJCWHcrelNreUdQODNETnBvM01rcDhhTTdhbzk5WFVtOXNkcmNLNGhoT1AxQVQ4MFRmNUlDUEZrUlFLV1E0TXJ3TmM5R1V3dEZyRWxiQ0VhRkFoWmhvcklGVnhrQ3hJVEN3N0g0UEdWT1BiRkxSOG1SU1NQbGhIb3pCWDdpNjRGdEh6UDRzajJBQ3lEUVExVUVSSlJjdzdwZkFEajZTWGNPR3lpOGVodS84Y0hmaVhDMTV5R0xwYmxSWGNHSC9xekpFR0FjQTF2aXhDbFhIZ3E0Q0lnOG1nSURTSmVNMDBBTGpwK2JzR1p2WWR4OC9nMlg2NlRSRExzcDhiU3hIN01PSGpWczRSdGtSclkwa1RlTlpUYmxXUFJnQ3NkYkEzOHd0bFlPeTV2L1lRRHRWK1EySnpEUzRydEpXbDEvNTd4eE5EWjMxSGl0YVlwYTFONXJpZ1VtRWNpd1AzbE1WOEVFUlJoeWl3c0xDRnNwQkUwTWdqWHVOZ1pubEFrMnBKOHpMa3oxL21wZDdLQTZVVXEzelN4VUJBSVdtTFpHUk9rdTZReFY0d2dKT0xvblQrQzMzWVVvMHQ3TUpXcnc3aTlGNFVwUjFXaFQxY1RFMXpqV2NjWWxVYWFDMnJvbkMyd2ljUVdRbFMwMU9Qeng4bHNIRUlld2tBbWdVV25EdC9tZDhIaFh3MEhuV01sZ290TWNJSm5nN09PQXVjVDQ1QVU4M2tnWUpXTDROeEZSVWs1MUdMR1BrZ0hoQ1d6cVNwT3psWHhQVlNGdG9TbEc0TEYvSUlUSVZtOEhoamVjYUZnVTU4Y3JWSGxLVlhWVUV0ZzBuckVrdXBPU0xjSTRmS0ZWUEluQk45emxkRkFJM1Y4RXFiQ0ZoREw3dmpxNWxVaVFmZ29HdlVJSDN5djF2bVlEcXZrekdnNXpYV0NveHlwRWpPQ08vMmxkSW5BaUp6Qy96SWpkTUNmZGpOQk84L01UVW05cHNYOVIrTlFNNXIwSDF1WVFMMHpqTnJURU9GVGtCc0VoN1ZEWVdsN1oxRkQwOVRuTm5wSWRyaTNjZW50R3kwbTFtZlM4NjU3VDcxekR6eXZmQmZkSlU4bkUrZlJmT0ZoYWZONndUbjJSUDB4WGxIZkJwNG9BbWJ5RjFJWEg2S1p2QlM0Rm5CNDRDay96dnZ3REN2c3YvWkttWUwzWmtYZjlGZW44ZTB0YTNodXRMeEJMQWRPTm5oVjgxZ0JucW9XNHBNMGFSSjF3OXRHUHFPbC95TzZwL3JnazhXQ214WGd0VU5YSzRHcmZqS3JWKzE5OUovTHRWdXIzTUMvaXlZTk1Gc0JPS1RYVXZ6T1h3M2pEenR5QndkY0RxT2ZBQUFBQUVsRlRrU3VRbUNDXCIsIHZtID0gXCJkYXRhOmltYWdlL3BuZztiYXNlNjQsaVZCT1J3MEtHZ29BQUFBTlNVaEVVZ0FBQUJnQUFBQVlDQVlBQUFEZ2R6MzRBQUFBQ1hCSVdYTUFBQXNUQUFBTEV3RUFtcHdZQUFBQUFYTlNSMElBcnM0YzZRQUFBQVJuUVUxQkFBQ3hqd3Y4WVFVQUFBT3RTVVJCVkhnQnBWWlphRk5aR1A3dTdVYWw2VElqdHRPQm1WczdNbENaTk1VWjZBd3pZMllVVVVUamd1SUNvdUpEQlpkVWZQQkJTQUpTeFpkS3BlQ0x1SUNDU2drVnhjZkVCVUdwbUc0V3hUWlJFYTFWRTlPbTFXWTVudi9rbnZTbVNiWEJILzZjYy81Ny91LzdsM1B2Q2ZBRllZeVZjM1Z3OVhEMXN5a0o2alk3VncyNUNqbnBBTE9WTXpNUktWbkE5L1BCeWJXYzFsNnZGNTJkbldJTWhVSmlqNlpwc0Znc3NObHNzRnF0MHBVZXVoUkZPVEVqQVpWREJ4ZUFMUzB0Q0FRQ3FLeXNSRVZGQlVwS1NzUytzYkV4UkNJUkRBME5pYlhiN1JhRXVqZzVpU3VEUUk5Y3NMdGNMclMxdGFHeHNSRUZCUVgwRE53cGJSVE9mRTVFZlgxOWFHcHFnc1Boa0hETk1oTkYxcHdQRDZrc0JON2Uzbzc2K25ya0lsMWRYYkRiN1pLRXl0WEFTUUtTNEF3ZnR2dDhQalEwTk1Cc05xZktZY2hRUkR4OUx0ZmhjQmo5L2Yzd2VEeXlMMTYrNXo5Rmo5NVBsbHQxZjZEMTZTUG1yMXVRMFh4amFXYVM3dTV1QVU0a3VsVGs4NTgxTkh0Lyt5NCtQbitCUFlVbTVVRWt6Z2JxZmtGaDFUeGxlczFseE5NbEdvMml1cm9haVVRQ2c0T0RxSzJ0SmJPZENHdzBHN2wyQXlvZlZkNldQOStIbFNYQmNXakhEcURneHgvU0doeDlNNEpReDFXWWx2MlBvdmxhaXBDQTQvRTRZckVZaW91TEplOWl3aFRuYTdTblh4QlFqT3pUSkNaNkIvQmt5U3E4TzNlUnlZaWpJMjh4dEdrbnlsYXZRUHhER1BId2FFWVpWVlVWMmVpaVVRYmloYUx5S0pnNnQ0eHZpbkY5ZWZpSU10N2R4eXFiOTJEaTBZQ1NOL2Q3aEQyM0VienNScDdKaEhuMjNaaXp5Q0xBcFJwS3FLbklJc1lPTTU0Mjk0QmFXcUlreGlJODZqQysyN0lCazYrR01UazhMTUNOR1JoUEZ3bGxFQ0Ntd3JKU1JLZDlPVlFlWWRYQnZaaTdhNXQ0WUZwcXhldldkb3p5REdyT24wSmlZaUpiZk1qUHo1ZlRrS29Ub1B5ZnY5STJGZFhXc0FYWExqRU9uckxsbFpvdy8rSnBqRC9zZ2NvYk9jZGkvaHFCajk0REo1ODRndnlZK2xhc0U2Zm9oaVdCZTVzWENzQ2NoSmVlSlJoYWx4K0Z1V29oV1pxSmdKb2NwTlg5VmV0eFBPOG02L2c5cG1SK1o3OE9UcXFWL1FUL3ZoNXByVkY1VStpNzRhWFYrTWxtZEN5SzVRcWRKdTZORitUMExIMkw1Q25hd1RWazFmNkc0OTlEcVdoeWpaNThMVlcva1VYY0RUUVJCTVFrRGM3RmgrRGdtbktjRFRpUzRFN3BsN3g0QWdJN2JhL2VjSnI3WHZkaTdaV3RDSHg0UHJWQnlRUzIvcHpNbWtZRHVET2JpeVN4NnlUSksvUFpIWFErdmc3ZmNHK0tyTHlvVEFEYWZsMXBCTTU2WldiUE9ubnBuMld6RncvN2huOFhkaDBnYUFEMDZ6YW5mc3hubE0rWjVTdlNlME41K3dBQUFBQkpSVTVFcmtKZ2dnPT1cIiwgcW0gPSBcImRhdGE6aW1hZ2UvcG5nO2Jhc2U2NCxpVkJPUncwS0dnb0FBQUFOU1VoRVVnQUFBQmdBQUFBWUNBWUFBQURnZHozNEFBQUFDWEJJV1hNQUFBc1RBQUFMRXdFQW1wd1lBQUFBQVhOU1IwSUFyczRjNlFBQUFBUm5RVTFCQUFDeGp3djhZUVVBQUFTa1NVUkJWSGdCcFZadFRKUkhFSDcyT0ZFNDBic0RQRUNPUW13dGFyVlVtelpZV3VrUFVpUXBXcUxVUktBaGJVSWF0SHlrTGVsSEFKdjBSMDJVUnByK2F5akZJditnYVZxRkVnOFNQcG9vU2xIQU5LRlFQajFyRDRnQ0I5enRkSGQ1WHpqME1EWk9NdG5aZldlZm1YbG1iL2VBUndnUm1ZV1dDWFVJSGFRVm1kVFdDb1hHNHYrSzNLUUJQSzVVclJXSStRRXZFRU81VUxPY2QvL1RpWTd4UmpYZVg1aFdQaEVtTzU0Mjc4TCtxRGVRRUo2b2I1MFNlb294OXZXYUFTUWRHcmdDdkhEckhHN1Bqc0t5SVJ3aGdXWUVHWU9WMzV4bkZtN1BETWJ2RHlQY2FNQ1pwQ29FQkczWFljcEZrRk1QQmRBeVY5R3IrODZpWWFBS08wTDNZcDNCdU9UMVlLMEV2QlM4QVluQmhMYVc2OVE5ZGhDbHBhVzZWNUZlaVZIblhNLzhoLzZ6K0htd0d0dXR1OEhaSXR5MElMQ1pBdFNEV0FJTXlEQ2JZRjNrK1BZN0o3VmUyY2l1WHEyUU9DZ3JreVNnVE5nTklzaVFRWXNvVjgwRDA3MGlRQVZDZzIyWXB6bk04emtza0Z2WTd1WDV5eWJnNUpiMUdMamlvdHlQK3VpWjU5OW1JU0VoS0NvcVFsMWRIVnBhV3FEMXIwcFJwR1UvS0NmSEx5WGlqbnNVMnl3N3dSUXRUR1V0aDNCakFMSkNOOExxWnZpbTJrbjF2MDJxZXJLeXNwQ1RrNE9KaVFra0pDUWdPVGtaRG9kREo5SWlLemdzclQvdWRpcHdKbGJ1ZVNhWHMxNFFXYisyRWZqWXRnRi9pYXpUY252b2ZNTW9tNW1aUVdwcUtyS3pzMkV5bVJBWEY0ZVNraEpWZ1ZhRmxFTFpnMFBTYXA5b1hNcFdCSmhlZEdFVHN5QnNYUUM5SDc2SlJYa1lDajd0cDR1dDA2dGFYVk5UZzlyYVdyUzF0U0VqSXdNdWx3djJ5RUNZcUUxOFRaWXVCMlNBQkdrTlRQY3BjTW1IUnpRMk5XU0JqbHF0N0plbXV6enozSmhoWkdKZTlJenBKdzQrcHc5NWVYbm82dXBDd1RzUlZGYXdHK3NIcnVrbk5OYW9OUVRPdVJHMVpGc1hnT0pJTTJJV0RTem5aQSt2YjVvMkNNR0RJb0dsY3M1eDYrWmx1bncrbnIzNmJERDRsM2VZZDlBREhGRnVLc0NTQ1BCREZoT3l3MEp3cVdtU1h2L3NiMHpkOHloa3I5ZUx0YVF3TjRKS1A0aGk1bzQ1VGxrampGeGVNTHQxVlNhRDhqTHA3enRLWTUwdjhIZVB4WEc3M1M0NW9KaVlHRFg2MDlpdGdkUjZZUWZudis4bGZpeUc4eTFXOGdwZENMZlMvT0UzbHk5RldjR1FMR1ZxZkE4bHZsWFB2QWhDWTJNam1wdWJFUm9haXZ6OC9JZXkvdkM5U1ByOFJCUTJkYzJCSFI4V3g0NHo4dm5PZGoybm05MlNnbFpwdVFPU21LQUVGb3NGTnBzTnhjWEZpbDlmRVZuRDhXTThUcC9ZaXMzbFRyQlBiak1CdnNLR05oclQwdlNsbjJRQWRXZklIMGg2ZWpveU16UFIwOU1EcDlPSm9LQWdwS1NrS00rQ1hCdDZHL2ZRZ1g4WnNTTkREQjJ6RFA0a3hnNjJQMG1mTmVoOWNFakN4QzlROFJzZEhVMlZsWlZMWEVjSGNwRTE4YTU5bkdjOTVTWEJzeitWL0M4SzVUZHZMTDhSOEdsMHJQWktrYmlzRkhCa1pDU0pFOEpkMTBVVHEzWjZhRnNZclFXdU45aHoraXZmRnk5MlZXWGE4NmVrNHN3WDFGd1RUOTVyTHhMUHNQTzFnSDNCdlN2Z1VncjkwaWMrbE9zZTNQMG45NmJzNDE0TmhQc0FjbDlnY1NSNWU1c3ZlTGt2cHI4blUwWlgxN2VhZDdRREYzOEZlbStBaG9lWE5temVETWhHSGt3VERYMUYzK3IzeVZ5ckV0bVQ3K254eFVGUDhPK2lVQU9ZOUFFYzFOWWtwZVpIWWZ3SDFqdzkyMy8wMWxRQUFBQUFTVVZPUks1Q1lJST1cIiwgeW0gPSBcImRhdGE6aW1hZ2UvcG5nO2Jhc2U2NCxpVkJPUncwS0dnb0FBQUFOU1VoRVVnQUFBQmdBQUFBWUNBWUFBQURnZHozNEFBQUFDWEJJV1hNQUFBc1RBQUFMRXdFQW1wd1lBQUFBQVhOU1IwSUFyczRjNlFBQUFBUm5RVTFCQUFDeGp3djhZUVVBQUFSSVNVUkJWSGdCcFZaZFRKdGxGSDYrcno4d2FCa1VXNFlOVW1sbWhoUGM0ay9jbUdpaU1XcG10bDNzWXBsTDlHcDZvOTJsaVlsRmI4M2NqZFBFUkpEVytMc0lndHNTUkdaVW1tZ21vL0ZDU3liZ25KWUZwYVAvdjYvbnZOL1g5cU9EdVdVSFR0N2Y4enp2T2U5NXoxZmdPaUtFYUNaOWpYU0tkRjVVWlVXZjg1RjZjTFBDUmpyQWpjcmdSa1RLT3VBdlUrTW5iZWJ4YkRTSDZjV01iQk81a3R5enhXYUMxMkZCWDJjOWVyZFl5Nll4MGdGRlVVNXNTTURoME1FbDRFZXpDU3dsaTJqWlpJYTlUa0c5V1pVV21Yd0o2YnpBMy9FQzIrRDF4eHpvY3BqTE1INGlHYmlHUUQrNVpCK2VpV1AwMXpTNlhWYVlWUVpWNVo3dHJVQThCL3dSbHhac0pNbm1WL0xZZTFjOWp1eTBsK0dPbFQxUnlqR25ab2JETW53aGdiSGYwaFFDSytHcTJoWkZrZTJSYm9GVkloaTlxRlFJMkFOdUk4dFpITmkyaVVoczVYRHRKSklGVldmazBEUmYvTGVBNEd3S3R6VmFrQk1tWkV1cTFCd3BoMmg1N2p3SzBZZ2s1cm1zME51U0FxZk5na0E0aFRDRlZyKy9RZTZvK3VtZms4R2JpcEd4U1dxbXFDQmJWSFVTQlgyM0ErUGo0L2hwK2h6dWJ4TzBWbDFuRXBOSnN3dlFBWFY1bE5PY1BkalBvM0Ewanl0SnlFM3h2RUpHQkVCSmt5MENPZEtXN0dXTWpJd2dHQXlpMjU2aEEyaHJjZy90VFpBTmV4WmVLcFM5WVBFeHdUN3UvWENKSm1tRFFoZDZOYWZvSGlnU1pJZFQ0THR2SnBCTUpoR05SaEdhR0VWbms1QnJtWUsyZHpYUGQyV1NHTk9YS2dTUE1NRU83djIrVXBEZ25ERUZPdEZxRmtnWEdBRFkzUTY4Yy9KdHBGSXBxWjk5K2duNjNVS3VzVjdOYVY3U3BVcU1XZkpDRjQrcVh3amx1OURTVVUvY0FnMVRsT3V1Qm9HNTZhOFFpVVNrQjZ5VGs1UElMczVBVlFRZFFxQllRalhiU0pOa1p5U29pbExlV0oxNjJpUHcvdUFnOHZrOFhublJoYU9IV21WLzdOVEhlTEpUUUtCV0ZCZ0JtR0NCT3phcmVnMDRaU3VjbVFXY1BYTWEreDV2Z2Y4bE45NDQ1c2E5M1EwSUJBSjRxRG0yRHJoV1NuU0pWUWg2Mnl6YWxPRklEMUE2ZnZEZVNYZzc2aEE0N3BWem0rMG1mUEh1Vm14dXpHRHM4dy9wZGRmNFFDSHlWc3ZHQlNiNGxudTdPeXp5UlJwbHYxY2dmSDRDRThGdHNEVlVvK2x4MTJINHpTNU1mbjBhZSs5Y2k4OFl1em9zNWRFb1c1M1FQRENUbWpRWDZQOE9LaXVoczZmdzZndG1DVmdyL1EvYWNlRGhSYVRudm9lOVVsQUYybXdLZWwwVkQwWlVTaTBPNURrZVBkdFRwOVVYK251bXE0VHQ3U0U4c2NlR2plVG9JU2U2V2tKMDJTVnB3N1lEL1kxRmZYbklXSXVlSjQweDgrRWVLMXJyQlBZMGZZbjd2RC9qLzJScjZ4azgxZjRMWll2QTRYdXM4RFNySEFiNWJlQjFZN24yVWZNVzkyZisvQWM5MllOVXFKSzFpYlZXdEdpaXFMYmhSM1VJZlI1SGVXVnR1VGFRK0tGVlZpUlNmK0Y0YUJsTEtlTW12VXdicE1lcDR1RGRqWEEwVlc2YnYycCtvd1ZxU0h3NmlYemg0U3RGaEM0WHFaU1V0TmNPZmpNRTdESmhsOXRFRjFyTmVhenp5VnpmYysyalB5UnVYS2JFTGZ5NjhPa0FLd2JBZVgzT3p6WC9laGovQVFGZ2RNUVpDU2kvQUFBQUFFbEZUa1N1UW1DQ1wiLCB3bSA9IFwiZGF0YTppbWFnZS9wbmc7YmFzZTY0LGlWQk9SdzBLR2dvQUFBQU5TVWhFVWdBQUFCZ0FBQUFZQ0FZQUFBRGdkejM0QUFBQUNYQklXWE1BQUFzVEFBQUxFd0VBbXB3WUFBQUFBWE5TUjBJQXJzNGM2UUFBQUFSblFVMUJBQUN4and2OFlRVUFBQU52U1VSQlZIZ0JyVlk3VEZSQkZEM3ozZ0NpUkpBUW9vVkd0RkZYbzRtTkVSTS9uU1QrWXRUR1FpdExLZngwdW40SzBjWm9vY0VDMU5nWkRZM0dSc1dJTVZFUy9CWnExQVdDb2hDKzcrM0MrNHozenM3QUVoY0NnWnM5bWMrYk9XZnV2Zk5aWUFwVFNwVVJ6aEtlRVg2b2Nlc3pmYldFNVppcDhTUkRNRjFybUV4STVDRS9Ua1dTVU1idDV0WXVORDMvamhkVWhvTkRZWFBYTmVrc1d3WjM3VG9VMXRSQWJ0NWlwL1lUemdraHJrNHF3T0V3NUpyNFVrTXJVcitHVVZrK0g0c1dGcUdpR1BIMW5nZE83QTFEZVI3aTloVE5BUmJjdVFzM3NjN1NKRW5rbkcwNGVWYU9DL1Z2Y1BEVUV4UVhTYXlxS2tkNWFURWN4NEdmaVpYais1QkNRSmFVb0dCTkFySnFCYnhEQjVDNVVqY213TG1aSUdEaWx5Vy85UVkzN24vR251MVZPRnl6a2tuaGowVHdxRXdUM0hRYURvRkwxMDlEUXFGdzlSb0U5VGR6UmM3YW5GZ1BPRFJsNzc3MDRueDlLeFpYbEtDbmJ4Uk5MN3FJUE5ZaVhpYWlNb0pJKzJBdldNVEpNREs2TFpjc1FVQUM0YXVYTVBscjRJbzBTa2U0c2YvRUU4cUtneTBiS3ZINSt4QlMzV2xxQzVNb0FVZVJBSkdab09vK0FaTklWK3FlVVJLUkQzWGl0L0UybDFUWmE1T2ErajFNc1paNDJ2cUg2UkRHQ2hQMmdRcklnelIwWnMwWFpUNDdJNk02SEdGTGkvYkM3SzVhN3R2RHRhYm1GSFpzWEl6R001dFFVVnFFQVMvUUlmSFNJWlVFVThMM0FCYlI4Q0U4WDNzbGVudmdrTGN1Y1VXUEh0a2xiV1VQTm5EdC9kZGVmT3Z3RUVRS2JWLzdNUm9vRk05emFWVUN5b1pFVVdlT0I5bHVSVjVsSU1KQWV4QXpYclhZcjh1bFNRZzZ1d2JEN3I4ZWpsMThQUllXUDZCSnJnUDZhWkhDT0NBM2ZHbUpOZUk0SzJKbThZS2lnWUVKQXRyZWRWNldUbWVIZGxFZ3p4SFBtc1FVSnZMTVphOSs2dHJDVXN5VjhWVmlySDlNd0sydXhseVpTS3kxMVRZV2FOYXFkSEhOMW16cTVUaFhrK0REUUpVK2JvWDdka1BRRG1CVmdaa1prK3NkdEhRcEN0NjIyZTRxMnJxQ3I5bm4zSEpQbnRZRExXWkNibEZ3KzU2ZDJramNQKzFkZEpUUUx6Wlh3ekVpTXpWOTVrK2NCaElKZGw2L0RSTUhaSjgvYmRHVk9oVlZscXZZUUUwQi9zNWpvOHQxdVM5Y2JmNVZLSlVjRy9MeHZZbzJydjlQS002Qkp0NjdTOFV0TDNQSms3bWMrWjVNVnRmWHQyN3pzWDlNZDh1bkQxRHQ3ZGtKcFhSbStETGJXUU1PcTdHOFQrWmtudkNqMzZpbWI4L1VMUDVkMUJxQ3ZoekNINll2YWJiNXBQWVAwUUdDNVd5TXQwVUFBQUFBU1VWT1JLNUNZSUk9XCIsIHhtID0gXCJkYXRhOmltYWdlL3BuZztiYXNlNjQsaVZCT1J3MEtHZ29BQUFBTlNVaEVVZ0FBQUJnQUFBQVlDQVlBQUFEZ2R6MzRBQUFBQ1hCSVdYTUFBQXNUQUFBTEV3RUFtcHdZQUFBQUFYTlNSMElBcnM0YzZRQUFBQVJuUVUxQkFBQ3hqd3Y4WVFVQUFBUkZTVVJCVkhnQnBWWkxieHRWRlA3bWFUdTJZenVKblpUMGtVZEpJaFJIVUNHa1ZnSUtRa0t3NENHV2pnVDlCWmdGc0FQbkg3QUFzV3hodzRJVmlBV3ZFa3BGQzVXcWx0U29xRVZKSUdxVE9IWDh5b3duZnN4d3p2V002emd4S3VKSVIzZm0rcHp2TzY5N3g4Qy9pT000VWRMM1NSZEpWNXo3VW5EMzBxUmorSy9DVGk3QWc4clpYa1RTQWVCdjBwSWhqZks3WlZtb1ZxdGl0VzFiMktpcUNsM1hFUWdFNFBmN1BkY2k2WUlrU1IvMEpPQnl1T0RZM2QxRnFWUkNvOUVRZ0xJc0MyVmhJckpGdlY0WDcwTkRRNExRbFF5UkxPd2pjQ01YN0F4Y3FWUkVkQXhLRGtMdGVsSFl5bHBVRUxBeVdhMVdRekFZUkNRUzhlRGU4aktSdkpyVGNvM0x3dUNHWWNEbjh3blFUb0ttdVlZZHM0YkkwT1FlQWw0NTR3NFNqdVF4OGxsVlhVWXVUWlFqNll6Y0ErZFNHT3MvWVhzN0IzL2ZJR3h6RmZyQUV3aUd3cTNNaUVUVHRMWXZCY2Y5TzB2NmpPcEcvd2F6NVBONUtJcXlKMnJXcXJFTk0zY0plc05BdlZSRVJSckdXUHlFK0UyVWdWYjJZeTJYeTRqSDQ3eDltc2VjdS9hSzExUk9sWTA4SnhiVE5CR0pqZUJPTVlaYVpRWE5XZ0ZHTTBHWkRJaFNlclllQ1dmTFdLNmt1VVF2ZStQWVdSWlcwekp4OGRxUG1BNldFSzUramVYS0FHSlJQdzdyMzJQdDkyRjg4MmNlcDZhZndzelVUS3Y1cmo5amNROUpubWFDUi9tSng3Rzc3cDkvOVNGMnFob09EV1R4NWZwckNCOU5RckhyU0VoTlRONzZHRnZyeDNHMS9tMmJ3QnNLYjN4SnhwaEFIS2hLelc3SUVoRTAyQWhvTmh6OFhhaksrZlVONmZGUVJSb2RuMFdkZ3RpaHNtakRFd2pXRldobXY1MjlmVjNlTEJ1TlVDQUlQb2VOcGtQT2REYm9QSG9FUXQ3N1JWTnpGa2V2UUpLcC9qVUxlcTRBT3pLT2dyR0swSUNLamNJOWpCMmJoRlV1WXFzV3hBOVhOMlJkNjBmNmNreUZHRnNhV1Z0QkltRGowMWRidUV5d3lrd2hYVWJPa3U0ZlBUMEN5KzdINFBaTnJBMC9nb1Q1SFN3RWNLKzBRY1Mza1pYN01SSnZJcWM5Q3g4NnppMlZhU1NzZUJ0RjJTWEEzTERXMm5MYTFxZ092UWg1NUNndS9ackZ6YVVyZEdVc283NmJ4V0RnTG42K1ljQlIrK0diZUI3ZE1obHJGK1k2RTF6Z3AxTkhORDdTZXd5RDQwOWl1VFNOcmZHMzhkRHgxekZER1JsLzBOWGdUNkV5K0J3cWgxSlFBK0V1ZUFjbmoyamV5eGNTSHdaNktQRGJPK2NOM05oeUtFdFpwTXJ5Y0xpRytkRzdXRm9yNDdjckY1QTROb1hCY0I5T1RCM0daMy9GY011S3VyaXRIaVQ2SEh6eVVwdDAzTHVMRm1rNXZaUnI0TjN6VlI1bzk2RHR1ODJwaVUwYUFtWC9Qb0h6R0gzMFFoOG1vdUwzYzRSeFJuWi9QME5hbkV1b1NDWDFWcWtjSENnSGdiZnNIYVJtZlI2NCtEYndneURnVzgvYm1DZWoxS3plaWtqMHBBZFRCempic3M5OHN2MU5XSEF4OTMxd01tamRyRmdwMnZiQ1JVdmVOS2tuYlRPcGk5QkJNcTRRdUlhNWhOSUpua0dIUjFkQVR0b2xFZDFieWpWeCtVNFR5d1VibTBZTFBFU0JKZ253NUtqU0NYemdKN05IMXVLamY4NTVjRmwwL3NlL2k3UUxVT2dBWEhIM011Nlk5NVIvQUFYdmdPbzJSNUdjQUFBQUFFbEZUa1N1UW1DQ1wiLCBXbSA9IFwiZGF0YTppbWFnZS9wbmc7YmFzZTY0LGlWQk9SdzBLR2dvQUFBQU5TVWhFVWdBQUFCZ0FBQUFZQ0FZQUFBRGdkejM0QUFBQUNYQklXWE1BQUFzVEFBQUxFd0VBbXB3WUFBQUFBWE5TUjBJQXJzNGM2UUFBQUFSblFVMUJBQUN4and2OFlRVUFBQVFBU1VSQlZIZ0JwVlpkYkZSRkZQN203bDFxdTNTN3BiVFZZaUlJWWtLTlZKdW94UWVLTVpnUUU5UUhUTFNOTnZoa1l0aHF3a05qWU1zVE1XbHFUQ1FhVkdpanhrU2p3UWVpcUZsTStnTXhnbFRXWW1MYnRRVUJ0ZTFTOTYvYnV6dWVNM2RtV2VndWxIQ1NzL04zenZlZGMyYnV6QUkzRUNsbGdIUXZhWmgwUWw2VldUMFhKRjJOV3hWMjBnQkxsVU9saUVRUjhGM1VoRWdEUFA3bG4yRU1YdmlXMmlFa01uUEtwdDUzTjlZRkhzRGpxNTVDVTIyTGNZMlJkZ3NoM2k1SndPWFE0QXI0MDlGM2NDbDVIaXZLYTFIcHJjSWR0azk1cEowRVVnc0pYSXhQUXBMdHZrMGZFbUdqZ1FrUlNmY2lBaDI1WXUrTDlPQ3JzWSt3WVdVemJNdkxxeUFuK3BYYVJXb25Ka3RoSW5ZT1Q2OXB3MHVOYnhpNFRwT0pNRFduNWpTWHBlKzNIbnc5M29lMUZKR3dDa0lRcHRGRWhvUGJIUEQ3ekJrOHQzYW5JZUZ5UFVRa1VVdTdjMmtDZjhRaTZCL3RSVTFGUGVhUndueU9WS2FRa1duVlY2MDA4MjQvby9wSjFQcnVSUCs1WHB5aDB1cjlPNlFDMHRGUDhPRGs4dy9MYjE3OEZ3MTNOUXFPbnNzaXJzdWdzRXBTanprTG1aTzRlR1VVNjZvZnd3dk5uNWxTVmR2MDh3ejNza01EYUF4SHhjWVpyN1I3NDlMeVZ6QytpeXV1UHhkWDkwRHFNdVd5R1RpVlpYQ3lwK0FrVHNMMlBjb1dRUzdSZHU0NVI0L0NRNjFueEJIV25rbUliSkxTUzVFM2FjNW9talNKN3dlbTNUNnRDZW5hQ1RrRGk5QThsa0Qydng5TU5KdVpvRWtGYy9aWDVQZDBNQzdFcTFHSmVJTDIwd1Z5TmFuYVQ3NjhoSUdmcHZQekRDNW8xeXhWVnVEWWQyRkRzSnIzUU9XYmJtNkNOVFVGRHhrWUlubS9MY1dCR21DNXhVY0hIeCtady80RDA0ais1Y0JMeGQzOFNEaysyRitIbGRXV0tsUDRSQXBkYjExR2ZLRUJaeVBqaXNFcXJHeSs1a2J1OFFpNUxFdmdEaGNSYmRzckVPendJNUdnZWk4NDZPOXh3WTIwRW1Fb1dJdEVVdWJuZURXcWV2NnFRbWpJSjhvZzl2a2h2TmZlSm1PVEdYeitiZ002ZGxUaFZDUjl6UnBIOStlRkJieTJNLzlWeDdoRVhMQlc1ODB1eUlQdnE0M0dGZ2F2WEFUT01wK1JLRnZtenMvRXNsZ1I4TGdCNmVNNm44bkJybmtaM3JvdW5qN09HZnlvVXRtMnpUWGNXa2FYUzNGd0ZnUE9Zc0R6V1pQYXRvQzkvRWt6ZFlRejRLOXVsa2NuOWp3cnY5aHlXcDEvRk1jdkxUcUR1ckpWMkwxcDBNeXVzUWt0UmlUSGFkQmF2bXUzR0JuZW9YWkczQ0tCZXlkSnZOZDgwSHpyaHd2dm9nN1MyTWFhRnJTdjc5U2ZKNVl1MnI1OS9ldTQxNytCd2RYYndFdUtnSm5NQkJ1MTM5ZnBSblF6RW0zRHR1ekR2bHE2TmVhaUJ5Y0U5MmJGK0Z3RWUzOStCWmRUNTB0dkJ3RS9TRm0zRVRoblh3QWVNb05pVDJaUWs2Z25jMlI2R0VOL0g4UFlsUWlSVFNrYm4xMmxBRnZxdHhZQ0YzMHlpd2ZtUHZxSDVkSWxMRy9qMzBWUUE4d1dBRTdvdVpBKzVpWGxmd2xJV3lxMDUzaVpBQUFBQUVsRlRrU3VRbUNDXCIsIFJtID0gXCJkYXRhOmltYWdlL3BuZztiYXNlNjQsaVZCT1J3MEtHZ29BQUFBTlNVaEVVZ0FBQUJnQUFBQVlDQVlBQUFEZ2R6MzRBQUFBQ1hCSVdYTUFBQXNUQUFBTEV3RUFtcHdZQUFBQUFYTlNSMElBcnM0YzZRQUFBQVJuUVUxQkFBQ3hqd3Y4WVFVQUFBUVhTVVJCVkhnQnJWYnRUNXRWRlA4OWJla0tIYlMxS1IxYWRNQllJaXg3TWJBTWxPZzBrVVJuTkg3WUY0dG0rZ2RZbHV5VGlSYS91eGhqNGhlVmJkSDRnWmpNSlZNYkY1a2pRTE1zdkZSaHlNWUtBK243RzMxLzIrTzV0OC9Ud2FCTGwrMDBKL2M4ejNQdjczZnVPZWVlVytBaElvcWludlF6MGxGU3QzaGZJdEk3RytsZVBLcXdSUkpBdFRKY2lVallBZnhqR3V5a2V2WThFNWpFeExxRGo0bGNqTS9abzIzR1BuMG5lcC91eDJGVGo3dzBTam9rQ01LWEZRbFlPQ1J3RHZqVHdsZndwdFpnMEpoUXI5YWpWbFhINTZVTEtXUUtTYXduN3JKVitMem5PN1FSb1NSMklobmFSaUI1enRuUHo1L0Z4YVZoUEc5OEFUVUtWV25XZzNzVlM1b3BwT0dPTGVCRWl4WHZkNXlXdnc3S094SGttTk13emNKeTRlWlpYTHB6bm5za0tCaUdDSnE4MVIyeDdKUkVKT0RmOEN6ZWJmdElKbUhoT2tMcmxsWFNFaFlhL1ZKc0RqL2YraGFkcGk3b05VYitJWHN2UlFRS3dya0hjMjB6dERYMXVKdTRCYlZDUTZGSzhCM29hb3dvaWdVNFZrWndpSEpDeXZJM1RIcGNrTHgzTTdEM2Z1OGhtQUtHdXI5SHRCQkVYc3hpSmJHSWRERUppN1lWdVdJR0dzcERoNkVMaTFFWGR0Zm9jR1Z0Qkc4MkR5Q1ZTMkxLUDRhbCtCeSs2QnVSUTJXZ0lPQWRaczBHSitIUHJPR0FzUnZodkpmSHdadGV4VlRvR3RUS1hWQUtTbVNKTUZtSTQwYmdLdTFpRWFHTUI5Mk54K0hQcnVOMi9HLzZub1lyNU1Rc0ZZZ2tOa2J3TnJQR1BRNGU0Nm53TlZ6MVhDTHZHdEJyZmgxdlBmc0J6Qm9MUEtrVldPcGEwS0h2b3RBa1lkaGxna0toeElUUGdVYk5NOWl0MXZFd01veHhyME1tZUprUkhHYldVbXkrbEZSQnhFRmpEM24wRDJiQzR4anpYdVp4YjJ2b1JJYnlFYzBGMEZUM0hKeUJQNkNnWDd2dUlEYnlJYVNLR3pCckxSekRGWFRLQkh0Wmt2bUI4bEU0R1B0UjAyc0laMzB3MXU3QmV0S05BNGFqU09iaitIWDFSL1ExbmNCbC93OVFLZFE0OHRSTHVCNzhFN2xDQnRjRFY5QmEzd2xmNmorT2tTakV0aEJzS2NGUnowWHV4VTZ5RUpzdTI5UEJzUzNmYmthbUlZcmIxekNvWldhd2loRHcrTUl3bXFpVlNCSXRFeHd5SHNPVGt0YUdEdG1jWVFSL01ldkZwbjZVZHloV0I2UlZOV3g3SjBwWWt2ekNEaHBMY29ROW5aazhDVmZFQ2RZWnpIVVd2TkZzNVdkQWxud3h5OGVpV09RbjExeHJRU1BwYXVJMnZwNzdoT2ZBVENWNzRkWHlPV2lSZTlFb0RhKzRRcE00NHp4Sm1SRWdWSmtRcGFDaTZRcXFwaHgzLzV1KzN5aEV2TE9lbzE1MFNxNlhVNlJSVnY4RDdZUGxUbG1Oc0oza2l6bHVXOXR0TWppL0c1akJDVmpYazE5WTk1L21KR0kxSk5JY050ZEthd2IybDl2MWtJUzU3Y0t4bzlSWnNSeGZLSDU2NDBPbEw3MVdNVndNbU85NjN5Q054emFEMitXSG5hNU1tMFRDVHpoclhoTitCKzVzekpkT08xajE2RGhnYjJQL1p1QWRyOHdLbnZGTC81eFl2WXlLai9IdndpWUJSRFlCdXFWM2Rxbk1LOHIvWndaSjRBWlh2dndBQUFBQVNVVk9SSzVDWUlJPVwiLCBCbSA9IFwiZGF0YTppbWFnZS9wbmc7YmFzZTY0LGlWQk9SdzBLR2dvQUFBQU5TVWhFVWdBQUFCZ0FBQUFZQ0FZQUFBRGdkejM0QUFBQUNYQklXWE1BQUFzVEFBQUxFd0VBbXB3WUFBQUFBWE5TUjBJQXJzNGM2UUFBQUFSblFVMUJBQUN4and2OFlRVUFBQU9KU1VSQlZIZ0JwVlpMYUJSTEZEM1YzUmxmbnZLY2w3eW41dUVMZy9qQmY3Wit3Q0NLa0lXZnBZdWc0c3FWb3lndUU1Y3FRWmZpUW8ySTRNb1BJcmlLZ2tsY2loSkZVUlB4ZzUrSjZVbG11ak16M1YzZVcxMlY2WmhrU1BEQ21iNWRkZXVjZTI5MWRROVF3NlNVYVVJSG9ZY3dLS3Myb3NleWhBem1hcnhJRTh6V3Jzd2tKS1loUDBxWFRrS2E3NFBTUTVUOU8rb3FJMWZGV0hZR2Rxb0ZxZm85Y09hMW1xVThlVm9JY1dGR0FXNkhKc2ZUNy8xWUxqb2dneUVpWEF4aC93M0xXcURpb3FoQVlrVkV3VHVhQitibjc4SmV1OTdRZEpMSTZTa0NPbk9sM2ozUWhWdHZMK1BHbGd5UjExR1FCQzNpS0wxRUtrOUtnV2k4aUdESEI2UU9ITUlmSjA4WnVtT21Fc2YwM0dUZS9hSUxkd2U3c2JKaEF4dzdSOFJsS0c1UnpVYWFhOFR0RXJCV3IwSGwwa1UxcGtVNmlQTTJpUXhaT3BaYmszN2pEdURheS9Oby9ITXhTdkNwSlY0Vm9raENuZ0w3bGtqTWVSNmNwaVpVenAxQjBQY1lldit1cVAzUzJSOVVLazhPUTVDa3NBUktvYStKbUpqaEozeFBYK041Mi9kaDJ3NXM0aWlUaUxaV2ZzeTVncjFxVTNQOStPcC9WQUpqZ1l1UzlDY3lGbUFVbEdqSTR5Z3FXR2JPcHlyeWVUQloxTnRycW1ETDh0Z2U5dm8rUDFDOVpvRjhaUmpqb2FkSUlBMDhQQjhOOFhxc3JQd1lSU1VzcUVWaU9FZUNRbFVSM3I5dkJMYnhKcmV3OXpZL0FKVUNCUVd5ak5IS0Q3b3BJSklXWlIxdmJYOHVoWHBIWXNWOFQ2MnVzK0x0RnJrUUlxakVGVEQ2ZW8xQXh0RWJnaS8raC9neDBZOUtJQ3ZFT1VxTGJOejh0QkRYMy84RkUvRGdTeHJ0elM1Mk54WDRVRkN3UGJIVW90K1EycFVVaUMxNTVDWWR2eEQ3bC81QVkyb2NYYThiMU1pUlpjUFkvcTgvSlZoZ1VvN0t1S29oZGhiVUxaejYza2pZTTNjZTl2MVhRTnVTQXQ0VlU2aGxWbk96Y1YxSEMyUTIvck1KZzJNRE15N2FzY2hEUzdxay9MN2hldFF5c1hhZGNaOXlCWS9ZMjdKazE4UUpyVHBWTStSc214djlhWW5OTXFldHpRemRZUUgxenVBS05qWnV3bTliOC84UW03ZWF1OXYwNkFwK3pUN2t1L1pWeDFVYUVuTTNxZUYwWHpkRFY1UHZva01FbHl0b1gzbXNHajBIY2paeDRwVHB2L28yVEE2S1AzL0tycjNxa2p2dkxaVlJIZ3AwSEdaRTlFM0ljRkdERE0rZVNYN2hzdE5uSW1XbmlhQ1RIWVdqR1JtNm1DUmtmQWJQaFc2cmpIb2ZKOGs3VWJQY3VKSVJFeDFWZW1Ua1pXVlVhSlVzR0RIR1d1SXhtdnZsajBBV3MrcHAvTkcvS21kdlBmSTMvbDFrTmNGSWduQlFqM0ZMMDdVNGZnSnEyNXNUcDZUQmJBQUFBQUJKUlU1RXJrSmdnZz09XCIsIFNtID0gXCJkYXRhOmltYWdlL3BuZztiYXNlNjQsaVZCT1J3MEtHZ29BQUFBTlNVaEVVZ0FBQUJnQUFBQVlDQVlBQUFEZ2R6MzRBQUFBQ1hCSVdYTUFBQXNUQUFBTEV3RUFtcHdZQUFBQUFYTlNSMElBcnM0YzZRQUFBQVJuUVUxQkFBQ3hqd3Y4WVFVQUFBUjZTVVJCVkhnQnBWWmRUQnhWRlA1bWRuYlpIMWlXb2FVRld0aU5NU1JsSVZENlVLMUtFNjFhYktyR041dkcrTktZVkNNK05MNFloY1FYWTFLYk5MNFlremIrdkptMGlMRVBhbW9KYXRyRVF2aHBSQTBzTEg4V3lpN0w3czdmem96bkRuZjRFYmJGOUd6TzNudlA3UG0rZTg4NWMrNEM5eEhidGlPa0g1QmVKNTJ3MXlYRmJaMmtVZnhmWVU0Y1lLZHlxUmlSc0EzNDJ6UjBrVWJZdXZCTFAvUnIzenVqdmJ6cy9FYXNxNE1uM2dSZlJ3ZWt4NTl3WGRPazNZSWdYQ2hLd01MQndSMUE5Y0o1Mk1ra1VGMEZUMWs1aEdESWNiRnpXZEljcktsSjhnR0NYM3hsUzQxeEY2dUxTTHEzRVBDZE8renF4eDlCKy93emlJY2Z3MUwxSHVpU0Z6V0xTL0RtYzl6RnBnOGN0ZklLQ24vY2dlKzExK0UvOTY0TDk0NTdFc0dOT1EwRExDd01YTys1Z3J2UFB3TlB5RUxBVUpDWFFwQWdvbUI3VVQ4K0MvdnVQM3hUcTFTV0lNQVlISUQzekJzdUNRdFhLNUVrUk03SVFoTXhSNGFoRTRFM1hJNFNZd3FLT29mTTNBd0taaGFpTllmQy9GL0lLc3NRODNtSWlnSlJaYW82YTZtNkdnYjVGbjd0QjgvZkplY0VmUGNUYkpGdGE0R1FuSUszTVk3UjJncWtHbFZVaGYzSVpuUUVaQS8wT3lJT0RTKzdRYVdQd0dlQVNjY3hSa2NnSERtQzRKVmVOMVFWRW4yOXhHWkxOMi9qMWtvSW5zZ0J0SzVvMkRkekQvbTZBR3pkZ0taNkllUTF4RVlVS0pxTjRkRCs5Y0lRVm5OUzBIUW81R3VPTHFIaDl6SEUyaHJZNDA1RzhDS2JmVGpxeDhYbTkraE1Idnl3OGpVT1A5dUVjbkVRa2RxVGlIdTlHQnk0Q3ZsWUEyN2Vuc0tyOHVsMUFtZi9GUFNzQVdXM1FRWVRidzJaT04vbW1OdFpEbHJZYkNpUklYQmEwbzVTTGExSVBkbU94bTlHRWFxcGdSNk5JZjd0YjVoclB3cjc2V1BJYWVhNnFoWVdNd1N1VzQ0dnZTWG9vMU53aVVvOElVZ3NxTHlvQktSMzdVYVNZcXFmUGdQLytEZ1dMQXYxWjgvQnFxbkZ3SGUza05mbDFRb2l0ZWlMamJ4Nm5UR2RNOVlJUkd4NUkrakYwVFdZcGdrMXMwSVZra09zc2hMOVkyT1luNTlIckVLR1VhQ1ltelpNaTROdkFoRTJnVEdDQkp1VUIzMXJSbU5tQnFGUUNQTEJnd2cxTlVQYlc0MzJVNmVnVUdrdVRrL2pRUkt0Q3JyVHRNUUpvdTJOTW9ZbXM0NjFqRnFCeitkRG9lOEdORnA3cWZmOG1aeEdWY2NMdFB2Q0F3bWFvMkYzT3NnSWJwQWVmZlA0UGp5eVM0VG9FUkh2SzBYVnRTK1JmSFEveXY2ZWhZZmlNT2tueC81ZVZJWUZYRHdSM1lycTVNU0NSZms2ZnFqR3RmYXdGNDBsT2NWV3k5UXRXZXg5dlZjeDI5ZU5QZmRNcE43dndlVENBcG8rUFl0WldjZmU1N3JoN1hobEt6NXRnb0V6a1dYWk5jZEU2aGVzYi96TVZzRmcwUG1oY2ZKbDFIbWVRcTY4Rmt1VU1IK2tBclAxVGFqTEhDZ0s3bW80dkJhZXk2d1hiV2wyZWVvckt1c3ZJdVgvcHg4aEpSSlFTMHNSS2l1RjNuR0MxL3IyQkNVbEpjNG1zYUhaYld6WG5UUjh3dWFNUk5NMHdscDlMR3dENmdLN285L3ZSeUFRY0I5dGJ0Y2JITHF3MmxtZFhHU3pXU2V1OXlPUUpNa0JaaU1YZHF0MW9aandpenpsWHJhR1lkRGxsYk16bVl5ZFRxY2RwV0p3Yk96WmYvNElkR0lud2kvOXkvYk81YnI5RVA4dU9qbEFhZ1BnQkxkMThUSXZLdjhDSU5UV1JLc2MzM0VBQUFBQVNVVk9SSzVDWUlJPVwiLCBFbSA9IFwiZGF0YTppbWFnZS9wbmc7YmFzZTY0LGlWQk9SdzBLR2dvQUFBQU5TVWhFVWdBQUFCZ0FBQUFZQ0FZQUFBRGdkejM0QUFBQUNYQklXWE1BQUFzVEFBQUxFd0VBbXB3WUFBQUFBWE5TUjBJQXJzNGM2UUFBQUFSblFVMUJBQUN4and2OFlRVUFBQVFyU1VSQlZIZ0JwVlpkYUZ4VkVQN20zcHVrelpwdEpLSUdoZjZRVm5CdE1hWFVwQkdNdm9oWWJLcU50VDhMRmtINlpCT2hpRTlOOEVsRUxQU2xJcWJCQ0ZxTHRyVVFVZEEyclFrS2hzUzIyMVNhWklPTk5DbHNkemViL2IwL3h6bDN6OTBmeklaSVo1bTljK2FlODgxOGMyYlBXV0FaRVVMVXN4NWp2Y2dhRmtXSktsOFg2enI4WDVHTEZNQks1VlNsUUxRRStCRis5TERXeTdHMStBZHlzVXN3RjBjaDdFVjNqbDdkQ0gzMUpsVFh0OE40WUp1M05NYmFTMFRIS3dhUTVWRGdERHlLekZ3ZkhQTU9OS01CV2xVZFNLdk56N05UY0J6V014UEFtVGg4WHd4QUQyejJZSG80U0s4MzBKYklIS2QvR1JiSjhGR1FicUM2ZGdPTUdqOTBYZVBKR1ZkMW5WQjFXYUQ2eHVNdzFtOUFjbThuTWg5OVdBZ2c5NmFNZ2FyZm1DekxCNmYvd2hOVko1eWR6VUxUTklKR0FweFJrYW8wZmtnQVB5VjRIYS9sajhQdnpmRXhWTDE5R0t1T3Z1ZVZxNW5YelhnTVpHbnFyODRzaU84dVgzRjJib2xvT21XaHV4bG5sYkpOckJmdVFqczNEeTJkaHBhUnlyNVVDa1pqSTB4bVlZMzhDclYvcDl4OFZQWmhPV2c2L0RONm54OFFlN2FicEZFeCszejZ6T0pzSERnWDk0cktIMUlXWURNZEszUWRhR3REN2RrTEh0OEhEZjdxa05aUUtBS3k3dURWelNIU3hDTU1YaU1oVlEwWi9odG0vVzA4WHlOWkcxVXRvV3FuWlhQdWhsckR3eTRMWThlejB0MGxBK3lTMXZuZjUvSCtDME9RZFNjbnhoMnpodW5sd2VnckJ2NDY2a0dpMkh6OFRnMHBGb05rcmZOOGUzRFFDL0NjRFBDMHRMS3BLYkcvZFp6Y0FEQkJObWVzclFJTjhITWdXZ1IyWXdpZzJINmdkSWJabXk0RFIrcklzUGQybmFFMkJQc0NnNFZ1eWVkbmdUNzdHK2puN0VsbFRGUUc3S3JqNUlOSW45OFBhMWVIeU8xNTNWNE5HRjRBVjdZOTlnOUp1Z1dzeis4QlVsY2dnb0d6aDk0U21RTkJzbncrMlRnRlhHbk15RWlrMTNIU2MyNysxTGN5Y1B2SmdEQmY2eFRaZzBGTjVEdVNuVFlNbzRBZkt3VFFmRnNoNHJmeTRIM0xnMXZiVzVCOTV3Zy9ueWxXdEdSZlNnS01TMnVJdFYzM3Q4TStmcEovSHZjcWxpSDN4ajZZTDcwczdNQlR0RndDTlRVMW5ubGUwcEtiSEhVejIvMEtpRHRBUTBrak5qd2tjdnNQVVBiTlF4QjEvb3Fnc2p4Wkt5TVdyQWcyUGhyd2xxODN1SE5pL1BLU3k0TFBFWnVEdUwvTTVxM0M3TnhMWnNkdWlDTGxNa21ZVVl6RnJvaHdjb0ttRWlGTUpxN2pSTnYzSG5pL1BJditjOWpabjU1RWN1MWFPQzJ0K1dOQ1NjcEtZRFk5N2R4Sy9FazNFMk9ZV3J4R2tkeThTaisvQlFlYnVoRGM5SzcwRkE0N0txRW9qOWhQWERBK3ZPWVNzMkl5ZVkxdUxveGlPaG5DN2ZRa2toeWt2QzdlV2diZjJJMGdxNUp1NytJcGNKY090Ui9IYW12NVlyRXMrbkxpWTh5blowRVY2dzVzYVdoRnNLbWJueTJldSt4V1crcktsRXpjNDF1T3IwWit3OGpkSHpHOWNJT0QzWGJuK0l3MUx1Q09oMThzQlY3eXlxeVFtWHZwOTR1VnkwVnhILzh1dWhSQXRBUXdySHc5cXF3VjVWK3FOWFFxUkZYSzFRQUFBQUJKUlU1RXJrSmdnZz09XCIsIGttID0gXCJkYXRhOmltYWdlL3BuZztiYXNlNjQsaVZCT1J3MEtHZ29BQUFBTlNVaEVVZ0FBQUJnQUFBQVlDQVlBQUFEZ2R6MzRBQUFBQ1hCSVdYTUFBQXNUQUFBTEV3RUFtcHdZQUFBQUFYTlNSMElBcnM0YzZRQUFBQVJuUVUxQkFBQ3hqd3Y4WVFVQUFBTWhTVVJCVkhnQnJWYlBUeE5CRlA1Mld3cUxxVzNCQWhGTnF1VWlSSU9lcElrSk56eDRJRjQxSmtUdlZqaDZvT2haTlA0QkZMaDQ4SUtlNUFSZTRDaEUrV0cwdGxFZ3hoK1VqY2lXN1k5eDN1enNzb1dDVkhuaDhXYm16WHpmbTIvWUdZQURqREVXNUQ3SWZZcDdtdTFZVm83RnVVZFFyZEVpQ1hCWVMrNUhwRlFBdjh0RGdudVErblBmWnpHek5pbmlwcW1MT1MzSFRxTXQySUhZeVI1MGhydnNwUnZjaHhSRmViSXZBY2tod1FYZ3MrV24rTHExZ2xCZEdINWZFSnEzWHN3ekNsdklGWDVqYmZNenJjTEQyQWc3RzJpM3NSS2NaR2dQZ2F4Y3NJOHREbU1pbGNTNXhrdW9VYjNXck4xN1paYm5DZ2JTK2pLdW5ibUpXKzM5ZHZhZXZSUEYxcHlITnlUTCtOSXdYbjRhUTVSTG9QQXNVeGlQU25rNXpDbEtFaWw0dno2UDY5SGJOZ25KZFpHdnk2aHlDVWtUVE9rTEdGOTZqTWI2Wm13elE3akpjanptckg1SnVzamxSTTRFNWJZUXJtL0IrUEl3NXJtMDh2eVNvaVpaZlpvNk4xNTE0VnR1QmRGUXU2aGUvRktzZ0QwS01WRzUyQUw5bElCVWRoRVhHaS9qMFpYbjlyUVFGeGk5MVBxUWZZY0dYeE5PYU0xbzRPN3oxQWhrSVpNTFdJR3J6NXdEUkw2WVJ5M1RZSm9tVm45bDBPcVBVQ1pPTzVqaWpXNWQxMkVZQnJ4ZUx6d2VqM0FIbExPUTN1N29uSUdNcFZJSnhXSVJoVUlCbXFZaEVBaFFhcHJPb0pOYWxGQlZWYmdONUJUcUFyS2pPKzh1aE5ibjgzbDdLT0tWQnlJcW9HU1p6aFZBOWpORnlLbnNMaTZpdWllNDQ3K1lUZUEySXNpSWhwVG1LSXpPVWRxR1ErRHorWEJVNWlLWW85WnI3dDAvakJvOG1OQ2hpSjJvcU5yb1crQWZBeXNWY2IvWEQ3OWZqTDRnQXJvekJpUGhXdWpiSHN5bVRDNG1FVlFwRjdPK3RsTWhGZEdtV250MFF1VzYwNzB4VGIyQnEwRTU4ZkIvUFdWYjRKYTgwMlFQakxydm9qN3VHN0cyT2s0UzJLbW9tdXBGZ1FGMHRJcXpGRzhETlFRQk1ka0R0SXVCbnVPUW92NE4yWEZhNHhSblBUd1pnVjFlQ0V2QXVsbXhzR3FpYitRblZ0WUxsVzg3aVIrTCt0RFBnV050dFc3d2hOMnA5R1RHSlluNHdtYytibVB5cllHRk5STmYxb3Rpem5GTjRjQjE2RG12dVlFclBwbVZDN01lL1ZGMmVKdGkvL0hmUlZ3Q1pGMkFhVG1XNEI0OENPTVBKU2IzUjdGWmlFb0FBQUFBU1VWT1JLNUNZSUk9XCIsIE5tID0gXCJkYXRhOmltYWdlL3BuZztiYXNlNjQsaVZCT1J3MEtHZ29BQUFBTlNVaEVVZ0FBQUJnQUFBQVlDQVlBQUFEZ2R6MzRBQUFBQ1hCSVdYTUFBQXNUQUFBTEV3RUFtcHdZQUFBQUFYTlNSMElBcnM0YzZRQUFBQVJuUVUxQkFBQ3hqd3Y4WVFVQUFBTm5TVVJCVkhnQnJWYmZTMVJCRlA1bTd0MnJycmlaVUVFOXRFRkJQNVdvWjN1SlhpcnJMNGplSWdyYzNpTlhxdmNnZWxhbzZDRjZ5SjZDeUY4UG1vYXBnUVFocmhsQ3BlMjY3TjNkZHQwN25UTTdzMnFwck5tQnN6TjNkdWI3NW56bnpKMExiR0pLcVVieUR2SmU4aG0xWWtrekZpT1BZcXZHaXd4QXRkYTFFWkZZQjd5ZG1qaDVJejhYQnZyeHE2Y0hSV3JWMHBLZTQremZENmU1QlRWdGJmQmF6OWlsS2ZKT0ljU0REUWxZRGdPT3d2UTAwbC9uRUl5TndSdDVCMWtzUXRiWDB3cUJJSk9CSWk4bEVyd0dPNTYvZ052Y2JHSGlSTkpwSCtRNk8wZm15V1A4S0JUZ3pNOGpQRFNFa09kQlhMb01TV0RTOStFU2lkdlFBTy9FQ1lRT0hrUzY3VHo4ZTNjckJKeWJOUVJHUHczT0V6UFJLT29JeENNaUlRaDBZUUh1eEFUazRpSWtqY3RzMXJnUEJ3cmVzZVBJUDNvSS8zNkZwTVBteEViQTBqUXVmNXhVMldkUDRSNCtBcmZ2TGFSRHk2OWRoNVFTenZ0UmFnVktOMjRTYVpuRXllYTBDeUlLN2QySFBHMk9jMlh5MTZWellKaG0rQ0Y1K0JCVW9JRGhFYjM3a0k2QTBsUWZwdEN5UUcwdGtNOFpUVmNhOWhKTkswNU9RcmEySXZMNmpZMWtKMGR3bVh1NlNtWm40YzU5Z1RNMUJYWHFORVNPUUhmdFF1bkNSUWpTUGpoL0FkaTloL3BaMnJYeFhObmx6NlNXb3pRd1lLTmdpL0hZSlUzd3FvZjBMR3NXdW5NYjZ1aFJMRis1Q3BEK1l2d0RRREtJNFdIZyt6ZUFpYlBHTTc0bXgrS0NYaXNObHJFekxGR1NOY3VjT3dzMU9GQWhFWlRvNWZaYldoYVhFaWptNXJCUzJRcFlLVDhpekNHZ01nNDRBaDVyYVVIRDhDajNFa3lnWjZkSmYwa1NWUWdzQUNXYXNsc0dFbUl0TUhzUTZKWkJMRUZBQnpIeTZiT2U1dHI1aGI3QlpRWndDSkJMY1ExWU5VWWtBWkd4bXoyNzlpZEJIcFdlNStvL2FMZUt3TVVXQ1NwclN5VzlTV01wYVFqZzBXbjlYK2E2RldIR21hRGZFcGpRdG0wMU5UVzIrNUtUektlT0t3bEw5TFlzVVloOGN2OUZJdGFmcmFtcHlRNGZvSHdLZnMzMjhWTTRITllUclc4RjNNNlBSQ0oydUp1d0U4Sk1pRkpEcHdtTldUbzgrWHgrUzFGWUFwYUdONG55M1hDU0NmVExqanZVZE5vb2F1bHdWUlBKNmptOHhvQ3pkUnJNdnk2Y09NcHZWcDJMREYwcXJPdEdrVEF3VjB4ZFhkM3F5bUh3T0RiWlZjeGM2dHFLeGFMeWZWK2wwMm1WU3FXMFV6SG9NZjd2ancrQkdLb3hjK2wzcStxdFYyM2o2eUptQUpLckFHZk1XTnlVK1liMkd3QVplSFhLbzM1NkFBQUFBRWxGVGtTdVFtQ0NcIiwgVG0gPSBcImRhdGE6aW1hZ2UvcG5nO2Jhc2U2NCxpVkJPUncwS0dnb0FBQUFOU1VoRVVnQUFBQmdBQUFBWUNBWUFBQURnZHozNEFBQUFDWEJJV1hNQUFBc1RBQUFMRXdFQW1wd1lBQUFBQVhOU1IwSUFyczRjNlFBQUFBUm5RVTFCQUFDeGp3djhZUVVBQUFQelNVUkJWSGdCcFZaZGFGeEZGUDd1ei82bXlTWXhLU1JOYlZKdFN4dHAvUzIxRmlzb1NDM1ZWUEZCRUNTK3F4R1VpQzl1c0NLTnRRaFJSRkdhRjF0RVNCVzFQaWlHYUZOOUNCcGo4N0tpdXkyQlBJUW11OW5kM0x1Nzk5N3huTms3NjYzZC9JaUhmSm1mZStiN1pzNmNtVmxnRFJOQ05CTmVJNHdUMHVJZlcvTDdCZ2pkK0svR2czeUNqZHFaMVlTME91UXZVSkVrTkhQYnRtMVlsaVZMei9Pa2oybWFDSWZEaU1WaWlFYWphbWlXTUtScDJqdXJDbkE0ZkhLVVNpWGtjams0amlNSmRWMlhZR01oOGtXbFVwSHR0clkyUVlLS0swa2lRemNJK0RPWDZreWN6K2ZsN0ppVUJrZ0VmR3NsaTVYTFpUUTBOQ0NSU0NpWEY5VktOQlZ6S243bHNEQjVzVmhFSkJLUnBFcEFPdjlMUkFsd3lTc09pSEM0N2lEL2pPNzdjMmlhZVNZOGM0NHZFeHVHVVJNSXJrUWg2Qk1LaGVSWUZ2TDM3NHljbEQvN05EZm01K2NSK2lPRmFDb0ZReWVTVFkzUWFJYWFiVlZuM2RLS3lvTVAxVUlVREJPRHlYbS8ydHZiMWVjV2svNzFjVzBodTRKTHFUejJUMHlpZWV3YzlGZ1UzdjREOEk0Y1JYam9OREhSWDFjWFpuY2ZRczV5RUVnTktlSzZMb3BXbVlSYzdIT2l1S1dqa1Q4T3NNQmpYSHR6TElPUkMxY3dlVk1PV3hhdndYbmxWYmdIN2dXYW1tQzkveUZpeno0REZBcDQvZndjZmtrWGcvU3l6Qllxc0VxVVZjTEZjMGNkbk83Znc5MkhXZUIycnMxa2xpbGdPalpGRE01Um1HYy9nWGwrREU3ZmNZUSsvb2hvYUlNdEc0NG5VQ3k1Z1JCUmQ5bEZ4ZkU0QzZoRHh3K3ppK3B6dCtsdkNESUx0a3dxMHlBbkNrVnArSlNNdmJlbEM5Nk9uVEMvL2dyR3p6L0JMbnRZSVVJbVpuZ3ltMUROUjcvTUZpdlhDVlROejBESHBQU2NtMFBzK0tQd2R1OUI1WWtuRVRsUlBUZmV6bDF3WERwZ2prQjkwd0tvR2d0a1dDa1JEMU5SeHVmdU5ncFRHMUx4VGt5VmR1R3ppeDBZYmRpR2E2RkczTnl4SFZOL0ZiQ2VkVytPcTJxMkpuQzR0eFV6VndwNEw5K0RxYWMvd0pkL2VyVUJkOTV6Q2kxeEE4ZDJoR0QvWnE4cnNMZTdTVlduV1dDQzhNRHplelhjL2ZZSUtQM1IyYnNkNmE2bmNIbHVSWG9sNGlZKzdaekd3cm52OFBBYXhIU21hVStBK3dlSFZkY1hmTkI0azVlNDVWRGN0VXVUNE9QdDlOeUtFNCsvZ1I4WG94Z3BmWXZlcys5aUxSTlNnTEIxSzBKVDA2cTdSOTFGNDd3S1FlUXVpYkNBMmlwQjUwQmJYc1o2NXZrd3ZwK0ExbnNiZDQzU2RkS3Y3cUorUWxZN2VCLzBsd2NSekpHTmtDdC8vYVZCUlM3Zmh1dWRxcytmTlBldGs4TGQzQ284SDJJTjhIZjJkWWRQQmwrNGdmb3pFU0paYzdrOEk5eTc5dDBnNUFVZ2lmdU9DVy95WXBBOEdlU3M5MlN5dXJ5K1padjJCZDljQUdaL2g3aDZ0VHFBNy95RGg0QWpqNERENmx2ZEozTzFsZkNqUHlvMmJ1UGlmL3k2R1BBSmxnS0VhYjh2NmFmNXF2WTMra21sMHYrVmZEb0FBQUFBU1VWT1JLNUNZSUk9XCIsIEltID0gXCJkYXRhOmltYWdlL3BuZztiYXNlNjQsaVZCT1J3MEtHZ29BQUFBTlNVaEVVZ0FBQUJnQUFBQVlDQVlBQUFEZ2R6MzRBQUFBQ1hCSVdYTUFBQXNUQUFBTEV3RUFtcHdZQUFBQUFYTlNSMElBcnM0YzZRQUFBQVJuUVUxQkFBQ3hqd3Y4WVFVQUFBT0lTVVJCVkhnQnJWWkpheFJCRlA2cWV6b3ptUm1kR0tJWWNZa2JpcnU0Z0FzdUYzRkJpU2RQZ3Y0QU5ZcVNvK05GaUtJSU9YbHhBVUhRazRMTHliZ2pJa2JVQ1M0SFkxQmNrcGlaVE1aWmVpbmZxK21lOUpDRmpQckJSM1hWdlBxK2VxK3F1d1lZQlZMS0d1SnhZaHZ4a3h4RW56dldSR3hBcGVCSnJzQlljWEVrSXpHTStDRnE0c1FhN3VkeU9XU3pXZFU2anFOaUFvRUFxcXFxVUYxZGpWQW81RTFORWs4SUljNk5hTURsY01XUnorZVJTcVZnV1pZUzFEUk5rY0ZHRkF2VE5GVy9ycTVPR2JxSWs4bUpJUWJ1eXBVN0M2ZlRhYlU2RnFVSmlyN1lVc3RtaFVJQmtVZ0VzVmpNQ3puc1pTSzhtbFBUem1WaDhlNWZhYlIvTWZHMVp3Q3BuSUVwTlRabTFVL0FxbG5STWhQUGdGdk8yR2ZDNVZwT0pwMEJONTVMVTBNcmNXamxXcy83TDJoOUxKUi8yRWhUSTVBcFpIRzNrUVRuelIrc3I1c1pteGlHVWNvNkdBenkvbDBrYnRiYzFlL2pDYjI5dlpxdTY2ZzFNL2lkZDVBaDVtd0RQUU02bGNHQ2lFYUhpSHZrZWN6Ky9uNHZaQk1mYzg2Z2tYdmZlek5vNitpSHJ1a3dVanFKUyt4YVdZdFZjNks0K2FJUHFjUkhQUDgySHZsTUd1WGdVb0VPZzQxTU5rL1oyRmk5SUlUWjllUDR4eWJCNTUzZGpsem9RT3Z0ejdRMEhZdXRuOWl6ZHcwT2JLMHZ5Wnh2dVlWelA2WkFvdnpvU1JRM1BEbGdJcHVuVXlWdEhOZ3hBMmYzTCtEaCs1ekJNbjU2M2NtcGFhcmVYU0tHMEljTzNKc2FSaVNvSVoxejhOT3VvcXhzSlM3OUJ0VEpGbXlZbHFQbVFtcDRtUGpsL2R6QUIxdTlVSjNkdVdJQVNhU01NSjQvK29DNVZqY214Z0xvYXYrSTYrOHMyaGRibWZ3dUZOdUJuRTNtRmt4YkRxWkZiVEpqbGd3Q2c3dUdNbHlMTGtmaTVFdHNtZndNVjN2cThEMDRBYkFsUm9md3NRZzI2R1NuV0pqZnhBTDhib25JZENSNFQ0T29DQTJUd3Q1alVuTU5zSEZoTGY0WGxqU005eDVmY1FZUGlKc09MaEZZZWFhVnR4bWFFUGdiMERzTmg2cTRvZm1VTjNTRGp5bHZjaC8zck4yN0lKNCtVU2FWV2tobFFKdzJEY2FMVjk3d1RGcXM0Ty9HZmU3cHg1cFZvTWRLRFppQnkxZThvVXY4TGRMY3puNWlVcXhkQjgwMXFWU2NvUjF0aGxpNGlCL1YzVkFlVkx6K0ZPelRMZEtlVkNzZGwzSVU4dThjYTU5cThkOXdUY092Uk1wNEtlVHRhMm12V0RyRXlQRlJDVGZ1bE02VHgzN3h1Rjl6dUN1VDNkWG5XL1ZwMDNIbk5yMFVieUM3dW9vVCtKdS9kajJ3YlR1NHJDNkd2VEpIeW9Rdi9VdHk3R2lULy9Edm9za1Y2UE1KZm5MSDR1NHhIeEYvQUhsY2ZXUmNGQzloQUFBQUFFbEZUa1N1UW1DQ1wiLCBEbSA9IFwiZGF0YTppbWFnZS9wbmc7YmFzZTY0LGlWQk9SdzBLR2dvQUFBQU5TVWhFVWdBQUFCZ0FBQUFZQ0FZQUFBRGdkejM0QUFBQUNYQklXWE1BQUFzVEFBQUxFd0VBbXB3WUFBQUFBWE5TUjBJQXJzNGM2UUFBQUFSblFVMUJBQUN4and2OFlRVUFBQVF5U1VSQlZIZ0JwVlpkVEp0VkdINU9RL2tmQmN3V0lXYnJUSVlEaDhHQmk1bkx5alJtSTJwUTUrYkZBckliRGM1QWwvaXpDdzFkdUprSk1SdGVPSFVMWkZPald5SkJoeGV3WktVakptNkJZUnRBTmx3TGJQellkaTJsZjdTbHgzTys3enR0Z1RKcjlqYW41ejJuNTMyZTl6em5yOEJEakZLYXowb0xLOWRZc2RLNHVaUStQU3RhL0YvalFRcEFxdGF4SGhGSkF0N01LZ01yK2J6ZFB6aURidU5kbUZqdFhneEpZN1RGRy9CTXlXT29yWDRTdXNwaUVlcG01U1FoNVBTNkJGd09CUnpYYjgxaTVJNGQ3VCtOWUZOaE5ncnlNcENicFpiR2VmMWgrQUloV085N1FGbjc1N1lhaVZBeEF5TTV1WVpBeVZ4aWIvL0JqRkp0RG5hV2JrTEhyeFA0M1d3SElYd01ZclVjVE9FUFJtQ1pjT0M5Tjh2dzJidlBDYmpqWWlaRWFNNnFXMXlXMW05djRxdkxvempWdEl0bG5JNUxWMjF3ZTBOWW82WmdrZVpBTVRqNkR6NDlXb0xtdWhlRVhNOHlFcHNnNkdCVnc3elRqeWNPWEVENXRvM1E1R1pnbWNWbXBxY2hHRnFXWUloQ1F0a25Ua2Q1UEhadkhvODJWSFNwdHUwOWc3VDhLdjZEa1JIc0kwcjJWa2xicnhjLzl0bHc4VGNiMHpnaXd4QUJHd2RQdEx6TUlJNi9ORVFQbEZtSnd6V0dMdjkyZXF6bWt1QXZTR05mcjNQUEh3eExXbzlQTG1KcXpvZk1qRFJaOEZYU0VFVVVidFVsOStqbkIwM0lWWWZJZGFlSDF0Mll3YlJ2a2p5OWZRRFZXL2Z3SVhwT1VNdTl0Z3RtdEo0YllnZ3FaS1NyVWFnaGVIbFhNZnB1ek1vOHNrYVM5SnFzSmJTOVphTDd5eWJKUWlTS0Q4ZGM5T3pkK3lRUWlnQXFvUHV2SzRKQXh3a3F1R2RpMjFMT1Q0WGNiRFZhRzNmaXhhb2lDZmNYMDNTTW9XYUhqWDV4cUI4YmN3UEU2UEJIUHhoMWtOdUxYaEtPaEpYcEVSaHRBMkxDV2s0Z0hTamJqRmVSQkhBdUxNSGxDU0VVanFKbjRKNjBGWG5XcHc4YjZkdFZ0NG1iWmYyK3hSbjladHFqaWthaks5ZUZRYmlEQ3lzSVZpa3MxNjNuL3NSSFoyNWlRNDRhKzB2djBQUDFWMUdZRXlTOWRqOXRzTmd4RzF4V0pRMmxXTEZzbk1ER21maTJaRXNkbTRYSEYrS0FhRHZZUyt1ZUh5TnVOcHZHa1FmMDdKUm56Zld5MnJRRlc0VHJqaEhvS290Z25uREZNbmkxL0cvYStVNGZOTmxMeFBnZ2lFTkRjM0NFby84SnpxM2k4WExoRHZOcDluT3ZWaWV6OHF6UDEvZlNyc1lyaEtvRHBHbkVFZDMzeHd3SGZ6Z3FSV3ovMWo3MWl1anQ1Z2VOTDdLTHQwNjFmMDNyZDF4RWtjWlBldXcrZW16VWlhbEFKS1dzQllGV3N4bldKclBvM2FwaXg1bmZHMGJlK3FTaGtxUm5MYUo1ekVGZkc1d25LWU1uV05maDc0WGJ5ZThpc1JPT3N1SW1lVlg0amg0aFgxbzlaTldOa0ZMMkxYdFBDUDJsdDRFN0VnRm5FaDM2M1IralJYY2lIcGdLT0dSd2c0aVRIeDZiaEwxaUxLVUdQcGI3dzNNV3ZISDVDR3dMVS9FQlpDMXc5Wlk5RWppdkU4QU55VUlFaVY0aGtVNjRjWElBM2VNOUdKNjN4TWp5TXpRU0lOOHRDY0JKbjh6a3M1WWYvVTZhdWwyamovRHZRcThBdUJJQXJVcWZRZG5tNjlxL3FvUnRWMHRrZ0hvQUFBQUFTVVZPUks1Q1lJST1cIiwgSG0gPSBcImRhdGE6aW1hZ2UvcG5nO2Jhc2U2NCxpVkJPUncwS0dnb0FBQUFOU1VoRVVnQUFBQmdBQUFBWUNBWUFBQURnZHozNEFBQUFDWEJJV1hNQUFBc1RBQUFMRXdFQW1wd1lBQUFBQVhOU1IwSUFyczRjNlFBQUFBUm5RVTFCQUFDeGp3djhZUVVBQUFPUVNVUkJWSGdCcFZaYlMxUlJGUDcyT1hPeDBuQXNUYWpJTXJEQTBYd0pMS1FlZWdtaTI2c0c5UXN5aUhxSkhDTjY3aDlvR3ZRc1BmVVFscEpDTCtwRWRJRzhwSktYMEVrZG5kczV1N1gyMmVmTXlSbExhY0dhcy9jK2UzM2Z1dTE5QnZpTFNDbkxTVHRJKzBrblpGNlc5Vm83YVExMktteWtBYllyWFZzUmlTTGd0K2tSSXkzbitkaGNCa05US2ZWY3k5aHFUM1dwaWRxS0lNNGVLVUZEZGNnMVRaQjJDaUdlYmtuQTZkRGdDdkRGMkJybWt4WWl1d0lvQ3d1VUJBeTFMNVd6c1pHVitMR2FZeHM4dmxCaDFVUUNwb2FKRVVsbkFZSDJYTEgzakt5aTcvTUdUbGFGRURBSVZBZ1VCaXZaQ0ttc2pZbWxMQzdWbGVCR1U1bjc4bzRiaVhCelRvOFJUa3ZQNkJwZWZ0bWdGSVFnR0p5MytBaDRTTGdlQVVjQWFlUHJ6d3l1bmRoRkpLVnV1cHFJWk5MUWpKeWE4bTlMT1R3Zlc4ZitQVUZrYkFOcHJSbi8wL0tOWmY1ZFpXa1F2ZkYxeENtMXVuNWRQREMwOXpkVjh2b1Q1TFdwTk9VRFM5c0NYTis5WVRJZ2wzaWN0b1NqNnAwQjAzVHNlc2xCTGVlNXpUbUNxenlMejJXeGtJUkt5MnJXTVV3cklDNnFvMGZLSk9yM1NXZHV3U05nWFNNYnRvM1A1OXdvV05xWjRBcVAzazFubEh0Q21QaVZFWGtQTFUxQ2VycGFvbkcvOU5ZY2NrSHZCRmF5WEN0VFlReE5ld1RuQXZSemlrZmp5emtDNTQ0eGtDT1BWdExBSWZLNDVhQXFwNUthdllCRms0czEwdXVsd1JsZ2hpSzNMRzRBb2V6SEtBclhKS0FMUXYwdTFVdTNHM00wblZ3QjZpSVMxNDlMVkpRNDNhTkNQaVlwalVEM1I0SHZxMEk3b0x1Tk5KbTFQUUlEZmhIdXh2elNxeW1CQjBNRzVUaS9scVR4L1VFREE3TUNFcHZsenpQREJKTThLQTBaQmVDdXNPZlVoWjd3Z1U1bVVVUWM0K295OTFBajRSRTBITkFJaFM2aG5ncTd1QUU4SEJaNDhwN3FRelZzckpRb0twU2kya2pBblkweXdWc2VuVGtjZEk5b2daUlQvOThkTVBCcFNXQmtVYUJqMkVEWUxJN1BHTTJIdlhEN0JCOEdHaXp6N043ckpENHNTdDFOQWpzU2RXM1lxTm90OGV5eWR5Y2ROYWkxK041NHc3TzJhTmpacVBJa2Q0YXY3NmFPbHQzdVVyZi9McnBGbW1pb0NxQTFHbkpTdFJOODZZQzMxb2R4TEtKeXA3NE5QRkFFek9RdXROR20xdnFRQ3RlcGlmd25PTzlsbTdhbzkvSHAxSmdGSDV3WW5Kc1Y0d2tiandaVG1GK25tbmpieENaQ2lXaWxTZUJCTkZTWmZ2QVlmQmFiSEpMdG1rU2Q4UGlDaGVGWmk2NFMyem50NERNRFJBbXcrYURwQnk3Nnlkd2lhdlhSNzViYmwzNzVILzh1MmpYQXNnOXdRcS9GZEp0dktiOEI3R1pFcVcycmVtc0FBQUFBU1VWT1JLNUNZSUk9XCIsIFZtID0gXCJkYXRhOmltYWdlL3BuZztiYXNlNjQsaVZCT1J3MEtHZ29BQUFBTlNVaEVVZ0FBQUJnQUFBQVlDQVlBQUFEZ2R6MzRBQUFBQ1hCSVdYTUFBQXNUQUFBTEV3RUFtcHdZQUFBQUFYTlNSMElBcnM0YzZRQUFBQVJuUVUxQkFBQ3hqd3Y4WVFVQUFBUFhTVVJCVkhnQnBWYmRiMU5sR1ArZDAwUHBhVGZhc201anVJM1dCaXN5VWFKWGlKR1lHS0pFeGV3djRIb1hMbEZEb2lRVVRVeEFaK1JPcjRhSk40c1h4Z3MwSk9xMkNFMUZZaGE2VFV5Y0hkdWdHeXY5R1B2cytYaDVuM2ZuTFFkb3lRYlA4c3Q3bnZmajkzenVmUXM4UWhoaklZNlRISU1jV1haUGlzNWNMMGNVbXhVNjVCQnNWUHJyR1ZKcWtML1BoeVJIaVBUMDlCV001c2J3dzlpUDhHays2SnFPVldzVlhhM1BvYnZyWGV4djJ5ZVBsamhPS1lyeWRWMERsQTZISExNTGM1Z3Azc0NaMUZtOHZITS9JdjRtNkY0ZE94dDN3TFJNak05ZlEyRzVoRnRMOC9qc2pSUFk3ZzlMbWlRM2Nrb3FXZzNQa1pwTVkybGxCY3YyTXRxMjdVREE1MGM0RUlhcXFyRDVYNFVaMkJYZWhaQWV4RFpmQTlMWnkyQWU0TWl6aDRVQnpsV1drYWd5NTVMODI4djkrRzFpR0Z1M2VyR25PWUVqaWNQWTI3SUhONWR5YVBBR29HL1JjWDFoaWtmanc2SzVqR0tsaktKUlJpWTNqcittLzViK25wUTFVZVVFNVh4a05vTVBMbnlDY21VQm1mbHhUSlN5T1AvZkJTeHhvbmc0aGp2R0loUlZRV3REQy82NS9hOHdhQ3NNK2RVQ25ncTE0ZlBoTHpHVXZRaW5mdjJpQm82bExDbXhyNTVIUjdBZHI4VU9JaEhaalJWZVROTXlSSEYvblJ6QzY5Rlg4WHYyRHg2RkQvdGF1M0R6VGc0VnF3TEROQkFQeG5EMnoyOFFEWFZnOE5oNUdVbVlhbkNVdnNibXJ0bTdRM0diUEp3cVRTdTV4Vm5SQTRyVEJuNlBManJLejd1SU80V3JzMlBWTGlGOVpHNlVQZE1VQnpNWkptNy9yOFdibnFibFhvcGdrSDhjS3BmTFdPR0YxVFFOSG85SG9OcHEzQXFSdUVlbmR0WFJ0bTFZbGdYVE5LSHJPb0xCSUMwTlVRMWVwQzlhb0M0aFNDSlhoNGt4bFVvaG5VNEwzYjN1ZG9UT0c0WWhwNkthVXhEaEFTMjZ4VTNTMTllSGdZRUJCQUlCZEhkM282ZW5weHFKSkpkd25ZdFNpb1NXeitmRkRLVkdibnhRRW9rRXZGNHZNcG5NUTJzeUtrb1RqYzNOemV1RzZSSWpTNFZDUVN6SUZEMW9ZR1ptQnJTSFVobUpSTkRaMlZuWEFEa1pEb3YvN0JLbGFKSU1rR2RyYTJ1b0orM3Q3UUliRVdvVVIwYm9hNWpqa0M4L0QvWEV4N2FIQ29YSEU4cTF4YVB3Smo5VjBOaElLZmlKVWtSRkx0SUc4NzEzb0tRdUNRUEtZNURiaEk0T2JMa3lJcWRqS3M4MVhiTkRwSGsrT2k0MlNteUdYRUw3N25zNWZZNXpUOHBzSE9Nb0tRZGVnZW9ZMmF6UUdlWEQ0MUQyZHBFcTNvYjdONncvZjBLc0wwNHpxMlU3c3gyd1I0RFdhYTkxNXJUN2hldXQ3UVZqeWVxVzBhdk1ldW1GaHd6WkxnamlvMjh6KzlKRk4zblN6Vm5yeVNUcjR2b1dPaTg2ZnZtWjM0WVpzS21wOVFOMHp4dzRDTHo1RmlpdGp0UjhNdXRGUW8vK09iWnhHV1JQOE91aTF5RW91Z2l6emx6U2FmTzZjaGVyZzUveUNSUEdTUUFBQUFCSlJVNUVya0pnZ2c9PVwiLCBQbSA9IFwiZGF0YTppbWFnZS9wbmc7YmFzZTY0LGlWQk9SdzBLR2dvQUFBQU5TVWhFVWdBQUFCZ0FBQUFZQ0FZQUFBRGdkejM0QUFBQUNYQklXWE1BQUFzVEFBQUxFd0VBbXB3WUFBQUFBWE5TUjBJQXJzNGM2UUFBQUFSblFVMUJBQUN4and2OFlRVUFBQVE0U1VSQlZIZ0JwVlp0YkpOVkZINXUrNjdkT2xaYkZXUjFIeDBKbXNnbUxURXFUamNhR1QrV0dJblpILzhvR2dFaG9rTWx5ZzlZRnlJZm1teVlKUVRqanhFMVN4UU1iQmdXSW1icm1LQ1MwTUp3SVpHc1hSY25ZV0ZyMTlWMjlHMWZ6MzM3M3E3Yk9waHdtdE43NyttOXozUHVPZmVlVytBdW9paUtoYlNKdElmVXI4ekloR1pySkxYai93cGZwQUVzVnRvWEltSTV3RCtneGsxcTRXUDUxMzdjNlQ2anRrbzRyTTdSbFpWQlgxa0ZRMzA5cEJkZUZFdERwTTJNc2NNTEV2QndhT0FxWVB4d0M1U1JFZWlXTGdXeldzQk1oZW9TSlRwRkdrVXFPRXhyZ01KdnZvVitWWldBY1JOSjh6d0N6WE9WUFJLSllQcUg3Mkh5WFladWNoS01VR2dSVkRSMWlRSkYvUVpTLzhZZ1h4K0U0YzIza0wvckV3RzNVK3lFaVpoVDQrVmhhZTQ1Z0lIUlFleDM3VVh4dEI1NVhaMlErczluZWNNMCtEUWY3NmVJUE9IekltL0x1NEtFaDh0SkpBRkIwRTdOcGlzM3I4RnhwQnBQTDY5RXFlVnh2Rkg1T3VwWDFFRzZlQUY1SGQrQmpZMGhnOHpZekM1b25JeE0wazZ1bytCVWw4aExMeEc0bU9hOW4xc3FXcW9RQ0FleDJsYVZDZDc2Q2hlMk9kNkdMY3BVRXYyNW4wVlE2Y08wSHBBa0V2blBhMEIxTlV3blQ0dFFXU1g2MnNoNzQ3Zi9nREY1aTQ0SXcrM1lPQW9NQmVxTXJodG44UHZvSld4WnZRa05PejlDNnFsVmtNNTJaNEFGQ1JKM0tOdExJQ2NTa0FOK1NQWUtibTNrTytpaHpyckJ2czlnbDQ2akpSakIva0FVMWdLTEdvWTBUTHA5YmVVcjJMRm1LMHFLYkpoeitwQktwWkJNSmlITE1veEdJNHFLaXRKaDRyZVNKOWZsY3FIVWRCVUgzN2RodXBCaG8yOGNnVGlqRGVreUlJd1RzVFNsT0ZFOFVERTVob1NjMEJJQ09KWlZ3cnV0bjg4SzhCQ3BGOHJ2OTZOM2VCem52VlBZdDkyR0svWEw0TDR4Z1FORGtUUlcxamtTR1ZCUEVIa3VUcFdZRW9xSHhjZ3VZWTZFb3lua1NXbXZMZFNhV0FxaFpBcjNGSlpobm5WOU9VR0FNMW10VmpoWGhQSGx4eVZJbWhuV1hoekZiNkU0N2tmczFuTFJEV1VJamg5cFFMbitCTnBHd3RnM0VFSkludS8xU3lWcjhkV0dWcFNaUytmOXhuUEVsU2ZhWURBSXM0OFRlRWpYUGZKa0hkWjN0S0dQZXoybkJENWtOR1AzOHgvaVBlZG05SGx2WWZmSkMvUGQ1ckVoQWgxRjk5Q081N0N5M01TTm5aeUExNHdtNjhQUFFtZCtCcGpvVDg5bk0xNGZyV3VGV2ZjWXRuOStDUjFuaDVGYjBnVGx4WVVFYmhIR1V6cTZ6cnh1OVBKUlU4Mm5tZWxHeVloRHRjM29iamlCNFNFamFyYWV1d3Y0RE1tUFg3d3NCc2V5YTVFZFdyRnpldzdpbHlFUGptNW9vWHRlRFBmWEEyai9hZWlld056N1Bac2QyUHVPa3h0bUZ6dU5wSkdhVnQ2UHgrTTQzUmZFcmpZZi9oNkxMUkxjU2VBT1ljeVU2OHc5NEFiK0JsTzNLVDgvSDAvWUg0V2tGNlZpWWFsZHN4eDdDSmkzbXN4NjFYSTltWHduL0dWVE0rVzVmQk9kbmlDdS9rV2w0NThwZFk1bGlRRTFCUGhxYlZrMmNNNG5NL2VtMDQvK01XWHgwcU04d0wrTFJnMWdJZ3ZRcjluY1dsZ1hsUDhBWUo5YjNBQS94VXNBQUFBQVNVVk9SSzVDWUlJPVwiLCBGbSA9IFwiZGF0YTppbWFnZS9wbmc7YmFzZTY0LGlWQk9SdzBLR2dvQUFBQU5TVWhFVWdBQUFCZ0FBQUFZQ0FZQUFBRGdkejM0QUFBQUNYQklXWE1BQUFzVEFBQUxFd0VBbXB3WUFBQUFBWE5TUjBJQXJzNGM2UUFBQUFSblFVMUJBQUN4and2OFlRVUFBQVFqU1VSQlZIZ0JwVlpkU0p0WEdINlNmRWtURTlRdC91M0dkWC9kMUcwWEUwYmRENXZVc2ExdXRoZWlYcFJCY2VJUERCM2FkY1NOeGl0QjBBMGNXeW15aHQwb3NvczVXSWNvMUNrT1czRU9meWc2eFNLaU9PTVN4U1QrSlBsMjNqZmZ5VDRsZHBZKzVPV2M3L3c4enpudis1NXpBandBcXFxbUNyc203TGF3SmZVLytMUzJCbUduOGJDZ1NSckJTWEh6T0NGREF2SjZVYmlGcGRMMzd1NHVRcUVRbDlGb2xNY29pZ0tMeFFLYnpRYXIxU3FuK29XMUdBeUdyNDhWSUhkbzVOamIyOFBXMWhiQzRUQVRHbzFHTmdJSmliRTRPRGpnNzdTME5GVUlTaTYzRUdtUm5NWUVLMGQvZno4Mk5qYVlrRlpvTnBzUGlaaE1KdjZtUHRxSjErczFqSTZPU2lvM3hlYVFnT1kvSmg4ZkgwZGpZeU9HaDRkNUY1SlVyT3FRZ0w1OWNIQVE5ZlgxR0JzYms3elhaRXprRHNnMXFmdjcreWd0TFVWRlJRWG01dWJnY0RnT2tWT3BOMnFqblV4TlRhRzR1QmhWVlZXOEtDMStOemtHbXRJU2ZUUTFOV0ZsWllXMzduSzVrSldWeFVUS25UR1lmLzRKcG9VRnFNTC9rWmRlUnZpRER4RitKWjlqc2I2K2pwNmVIc3pQenlNbko0Zm5hbmlNZG5DUmFxdXJxK2p0N1dYZkZ4WVdJak16azBkWVBOL0Q5cVVMeXQyN01QaitnVkVFM2p3eUROdlZLN0Q4NE9FeEdSa1pTRTlQWjZHdXJpNnNyYTFKZ1FZU3VFQTF1OTJPenM1TzVPYm1vcVNraEZkdXVmVUxUblhkQUlJaElCU01sY0dBcUlmWVR0MjREbVh5RDJZcUx5L25nSHM4SGlRbEpVbUJ0OGhGUHZMWjV1WW1JcEZJUEZ0STRQZVBYSGovM3E4aUN6Z1ZZbGt0ZmdjR1JYeUpCVVQzRVQ1YmdNQTMzM0hxa2hFSHpSZXBTNVB1RzdXQWNLZk1jMEk0b21MZ0x4R3duWjNZcW9OQjNrVzc1U3l5blZlUWt2NEZybHJQd1RRNXllUDF3YWU0YURnZFo2UU9mVW00bnZ3YUJxeG5oRm9Zb2FnQkxZNXorTnp4THJ4UmkyaUtvc1ArSm00cHowTFBvWjlQVUdnYnJDUldyMU9HWWpMZytXY2V4M2xVNFV6RWk3OE5kdmlOTmh6Rm5ZS0xlT05JRzdsWmc5K29DWENBWm1kbjBkemNIQi80Y2NuVFhNNmIwaEtTRTNJdXZCNnZ0N1cxOFpuUUNmeEpBcjlSYlhGeEViVzF0WmllbnNiSXlBajNYbnJ2eWJoSUlueDI2UVdjTDNpQzY5M2QzYnpBeXNwS2VkZ0lmWlJGRkdUS0pENGc1RU1hUERRMGhKU1VsTmprZ1dWOCsrTUM3dDNmNXY2Q0Y1MzRwT3c1dlBOcTdLd3NMeStqcjYrUFM2ZlRpZGJXVmlud0ZFZUU3bjVSdkUyM1kxMWRIYWNhRVhWMGRPQWtxS21wUVhaMk5sL3A3ZTN0MGtVZXdYRlpadEZsWVg2Nk5jdkt5akF6TTRQazVHUytxdjhQZEtYbjVlWHhWVkZkWFMzSitXMmdTanludEN2Mks2clQ3WmlmbjU4d2RmV1FXVWZseE1RRWlvcUtaTmVuOHVFNSt1QzRFYnRaMlUwNzRwRFJBWHlRQUsyWVhqWmQ1dENyNXNaeDBCNXluM3hzUlZ6VVFDQ2dibTl2cTM2L24wMjRoZHVvNzhnZmdRYWNCTnFqNzFGUGp0dnFJL3k3YU5BSWZEckNKYTNOcmFYNXNmZ1hNZFNDRHJRbGVVTUFBQUFBU1VWT1JLNUNZSUk9XCIsIFhtID0gXCJkYXRhOmltYWdlL3BuZztiYXNlNjQsaVZCT1J3MEtHZ29BQUFBTlNVaEVVZ0FBQUJnQUFBQVlDQVlBQUFEZ2R6MzRBQUFBQ1hCSVdYTUFBQXNUQUFBTEV3RUFtcHdZQUFBQUFYTlNSMElBcnM0YzZRQUFBQVJuUVUxQkFBQ3hqd3Y4WVFVQUFBTGdTVVJCVkhnQnJWYTdibE5CRUoyOTkvcWxJT3lFcEtDSkhGcFNoQXFrRkJncXFPQVhvRUIwbUMrSUl5RWFHaVNFaEdpU1AwQjhnVTBCYlpDZ0JRY1NjRU5rVzVieDY5NWQ1b3gzbldzbkJsdGs1T045enB5WjJWbXZpZjRpeHBnY1k0dFJabFROc2RUdFhKR1JwM2tGU3RiQXJMSXpqVWlkWXZ3Uk55VkdEdU51dDB1ZFRrZGFyYlhzQ1lLQWtza2taVElaU3FmVFRyWEIyRlpLUFo5S2dIUlk0OVRyOWFqWmJGSVlobUxROHp3QkJFUzhsd2FEZ1l5WGw1ZUYwRXFKU2JaUEVGalBoUjJHVzYyV2VBZWpyQ0NZY0VZQXNuNi9Ud3NMQzVUTlp0M3lZeGVKY2publpnOXBnZkYydTAycFZFcU16a0tBRmhISFNKQ3VLNnl6NzluOVNFME9uc0J6aEF2RHZ1K1BFY1RoVXViMkpCSUowUVdSUGI4ZGljQjZYOFdnVnFzSkc3eDNCdUtlb3c5dkp5TkJGQUNNNDd4V1ZsYmM4bUxBWDNmUkc5UnFPcWlVZGNBZUJlbTA4bEpKenQ5RWtibmhPTWN3WFZGa0ZLYzIxQkVOcmw0TEVtdVhzRlFFd1IzMDlNc1gzcm5Ycjd5QXZmU1IvOFhGbUhsbHJjWmJ5NFFQRDNXalFVa3U1UWdSUFhoSTlPUXBObHdId1lacy9meUpQS2ZLb2Fxakl5TFVPRXJUMExGaDRUQng5MGwxdXFUQ2dlampwdWdQNzkxcVByQUhRblJ3SUNsUmpnUTFEbkRLeUoxRHZKSkFBdUR5Z2NUcThhbFJ4SlVZSnhnbFFhbFRybllVMGF5aVluQ0NxUGFsZHo1TFp5RVN4ZXFxR3paR0JQN21KcDJWcU12cnJ2c1JLWHJIS0hqM2IxRzAvaXc4RWVNOGdtUGhJL0Z2M29iandGdGNOQnh5SGV2aDRRMVN2WW9VanBxVFJNNGI4UEtVeUZmZDlKckh0eE8vR3hXTS9BdGJvK0l3ODlrZjZyRDN3Y1UzYm1vMy9sdDBqOUZRbVFKNVMwT1NlUmpjdFlDdVNzbTFrcmRCNXZBRnB0SEVVb2x2OGV5UnVIMlUyeEpkSzl2VzV1Um1VeG85Z3QwOUUzM0xtK2dMUi81MUNGUGwxb0hIRWZDallQVHZjdno1TFAzREkzbkk2MjQzbFBXdm90RS9DeWI2bmpjYU9Od1l6blhHREVPblNMT0lmZlIzemV4U052L3g3NkpvRGRSakJxdDJybVRMZktyOEFZOCtOem83ZEVldEFBQUFBRWxGVGtTdVFtQ0NcIiwgVW0gPSBcImRhdGE6aW1hZ2UvcG5nO2Jhc2U2NCxpVkJPUncwS0dnb0FBQUFOU1VoRVVnQUFBQmdBQUFBWUNBWUFBQURnZHozNEFBQUFDWEJJV1hNQUFBc1RBQUFMRXdFQW1wd1lBQUFBQVhOU1IwSUFyczRjNlFBQUFBUm5RVTFCQUFDeGp3djhZUVVBQUFQOFNVUkJWSGdCcFZaTmJCdEZGUDUyczRsTmNCb0hxTk1VS1JqVWhBT0JPRUdWSXBIZ1ZNb0JDVkZUVVlFb3FxQ29sVklPNENBT1ZhVmkreEloY2FBS2lzU3R2Y0NsYXJFUFFFRUNPNEtqVTVMVVBqU2cyRzVKYUdoZHJ5UC80ZXp1TURPNzQ3aHhRaFAxeVcvZm05bVo3M3Z2emN5T2dmOFJRb2lUYW9CcWxHcUtiRWpPNnZOVGRXTzN3aVpaQUR1VkM5c1JTVnVBZjBSTmtLcVR0V094R0NLUkNMZXFxdkl4YnJjYkhvOEhQcDhQbzZPallpcDdHWklrNmZ5MkJLd2NGamdIbkp5Y1JEcWRSbWRuSnpvNk91QndPUGk0UXFHQVlyR0lwYVVsM2c2SHc2Uy92MTlnQlNsSnFJSEFpcHl6aDBJaFRFMU5ZV2hvQ00zTnpld2Q2S1Q3TEo5TWZVYVVTQ1F3UGo2T1FDQWc0Q1pFSnBLb09UVy9zN0l3OE9ucGFkQ0lzQnVKeCtQdysvMkNoSlZyZ0pLa0JjRUZhdDZiWDh4aTBIdmM2SE10eTZJY2RSbnlpRGY3b3IyMnRvWmtNb2xvTkNyV0pVYkhISktzNkZPczU4RGhiNUM1WGNBTGJscVdmMzdXRFRYUlZLdGxYV20yay9uNWVRN09TQ3pwVU9qamRlYk56SzV3Y0VER3ZYSXI3RThjYVJvNTlLNTIrbWdQbnR6YjJoRHg1dXgwWFpjcWxRcWhGdFZxVldscGFXR3YvSXpBeDd6SVRJYkZpZUdlRmF3V0hrT2g0c0tQY1ZXSngzOGx4OVlUK2lmNVgyQXVHY0hHM2lEbWp6WU5OVS8wZjh2UURBTHkva2tEbndabE9zRExIaDQyZE9HUExJOStmM3NaWHgyN2lzSDlpemgrY0JaNTZOSm5ta2Nac0oxUUlxVXVHZG1zZ3J0M0xMM0xyWFR6bGlMZHl5cHlzYVRJcFpKaXhLS3lGWUdiT2Z4QXJkN0pZYVIzR1c4ZFhNVElnUldFeDY4ZytaY055MWtacFlxR0cxb2IzbTQ3S3A5cWZRMlpkVHRRS29IdVVYWW9BRzJkNXlUeEVPa3pueGZWY3l2Q2M5ZzF1TnJLZUtSRnE5VTJWN1JEcHlrekZaSWliYVM2VHR1YTF2QVZrT3BVQ0NOSU02WXFjZUx5dFI0MHlSSjZYSG1jRGIrRVYvclNTSzQ4RHJWc1E3ZVd3eGZaSytSd0tka0F2Rm5rN203aHFqVUM3NHRkV1BnemgxczVCOGJPdjRGTWRnOHV6ZlppajFIQjJiV2Y4SEUrUnRxTnlnUEJlU2JQOVFsM2pwMkRJSFVDTTdOL1kreURIeURUVlRHSXVmMkgrL2ZpeXdrUG5uSFpId2pLdHFwQkRCaTZnVWVkVGlnMkcrdWVZQVJza1hPc05YYjZlOHhjV3dWcHpjSG91MHpJdnVTT0lqWVpUSFczZHlQMTRZTG9mVnFtQjRoOU4yS3NkZTdVQUl6ZXE5QzluMk5YNEhYeTdadGZDL2NpK3hhSi9YcUNxdW9kN01LNWt3TkFVOW1NYUpmUkIxNCtBOCsrNTFrUHZ4dVl3d2tZaytnSWVzOGdRTFUyY1NmZ01NR0RZcDU1OGFRNTluMWpyUVZuL3R6dDZ6aHk2UjJrOHpjM0JraU53S05QRFhOd1p1dkFnMXRORVNSK2k4UzhNak8vSVhMak84eXRYcStST1czdEhORDM3S3Yxd0Z0ZW1WdG5iVjc2RjhuT0pVb2U0dCtGM3dMSTFRR21yTDZndGMyM2xmOEFSRWRodmZTTlhpc0FBQUFBU1VWT1JLNUNZSUk9XCIsIFltID0gXCJkYXRhOmltYWdlL3BuZztiYXNlNjQsaVZCT1J3MEtHZ29BQUFBTlNVaEVVZ0FBQUJnQUFBQVlDQVlBQUFEZ2R6MzRBQUFBQ1hCSVdYTUFBQXNUQUFBTEV3RUFtcHdZQUFBQUFYTlNSMElBcnM0YzZRQUFBQVJuUVUxQkFBQ3hqd3Y4WVFVQUFBUDBTVVJCVkhnQnBWWmRhQnhWRlA3dTdHNWkwaVE3U1pPVWdsbTNpRDgwYWZ5SmxiWlNvL1NseFVKRVFmQkJzT3FUTDBhc0wvWEJEWUlQNG9PK0NJS1ErdVpUSVNqWUYybERhUkRFTkUxTmJQckRKdGtRV2pmSlRyWTcrNU9kbWVzNWQrNXN4bmFqQ1o3bHpQMlpjNzd2bm5QUDNMdkF2NGlVMGlUOWxQUUNhVnB1U2s3UERaTW1zVk5oSncyd1hSbmRpa2pVQWYrQW1oU3B5ZU8xUzVkeDk4ZnpXTDAwZ2VyNnVySnBTdlFnM3QrSFBTZFBvT1BGSTRHclJUb2loUGhxU3dKT2h3Wlh3TGUvK0JxbHhTVTBkbmNoWnBxSXRqUXJPNmRRaEdzWFlNOHZzaGNHZnZnZXJmMjlBVXlLU0VZZUlOQXJWK3czUC84U0M5OThoNDduQjJERVlpRkRxWHRTOWJqdkZJdkl6MXhIejd0djRiRlBQZzdnUGd3aUVVSE9xYm5DYVdId3pMZWpsSUplOVZMY0Y2YWdYd0F2UTJwTlhrWGkvZmNDRWs3WE0wUXlIeENNVXZOMi90cU1uRGgwVE1RUDdFZXNaWmNQVHQ1a3lFWVFRcU9weGllU09wNXEvaDd5czNNNCtQTzVZRjh1a3QvTFFxOCt6VE9GaVVjaEtndUl4ZnRoRUpvaE5LZ1F0VFRKY0pyMDhybDFTWjM4Tk5BMmlPWm5md2tDYmpmbzhTcjMzTnc0UU9DUkNHQzRhekNramNwR0ZlazdIZ3JGQ29SbkE2VENLNm0rOElwa1U2UUlhVXl0NGVaZ0VKcTNQZzdIR2c4SWhxUDBHRktWc1RLbURKUTZXZHhZN2tIbWNnekdpc1QxcUlGcWg0bWhONVpERzYzM1JQcGpvUWtpSEUxMkRGRnprRjhQY2dSUGM4K3pyeUpDZmdicHJUOGx1aHVYWURWWStHMWhBM2ZYSER6UnY0elpXUmNWdTB3STlxWnlOTFFnam9SOU9ac2NoWllrRTZnUFNwVG4xVXZXMjk2VHVQRjdIRXZueWpqUWxxQjZlQWR6NWRld0loSW91WnlIb2dLR1d5QzlSMEZWYTlYR0pKU2pmeEQ0b1dwd2puaGplZzh5Vng3Q25jNU96UDBGVkxNMnV1WER5RTgyd1VvM0tVQkloM2R1czZ4Q0dDSlUxN3dIODh4RVNTT2tCYlVDS2NzdzkxZHd1SlREcitzVkpESVZORVR6VURaMkNYVkZsN0NLb2lrWnpGcUdKa0RFM3hRbEc0L0gwZFhub2R6bTRsQ3JqYTdLRkJwWDU5QTYwSUgyM2lyK1M4U3VwNEx1RkJPb0hURjJEOVVNc3NVc0dwcE50UGRGMFBMS0N4QzllN0gzdUlQSm00dFlMYmZWUjVXYlRiU3poalhHSHhwdmNvNUh6clZqRVBseFZXNUNZRWZDZStleHhwS0lIYndWVE8rTDB1ZHNFY2xGR3J4VXNEN0QxSW5Yd1dIdEVGK3QzQ045Ym1JTS92R0lzM3dXQlZWMGl0UXlqeDVCOHN4SHRRTnNKK0NzajVCdmkzOXNxN3VCTzRxQW1ZS0o1Sm5UeW5DN0pHSHdmZVNyWlVSalBuRGhwS2poU3dlRjZSbk12SG1LanFkTTdiMjRENWdsZnZRd2daOEdSeDhDVDlYekNVaUdOWW42d2kyNktsZC9PaytFZjZDODZKTkY0M0VGdVB2azhUQnczU3V6ZnRqK3BYOVdibDh1eVAveDcySllBK1JDZ0drOWw5Smx2cVg4RFp1ZVMvQ1pTZndCQUFBQUFFbEZUa1N1UW1DQ1wiLCBHbSA9IFwiZGF0YTppbWFnZS9wbmc7YmFzZTY0LGlWQk9SdzBLR2dvQUFBQU5TVWhFVWdBQUFCZ0FBQUFZQ0FZQUFBRGdkejM0QUFBQUNYQklXWE1BQUFzVEFBQUxFd0VBbXB3WUFBQUFBWE5TUjBJQXJzNGM2UUFBQUFSblFVMUJBQUN4and2OFlRVUFBQVJjU1VSQlZIZ0JwVlpkVEJ4VkZQN3VuV0Yvb01zdXhWTEVWc0NtS2JwQmpFbGJOUnA0cUUxOElQalROelhSOU1INFlNQlVmV2hqZ01RMk1jYkUxT2lUU1VsOHFQR3BHTlBFUHdyVlZHMjBvVTJvVUN5c0dFcUJsdVZuWjNaM1ptZXU1OTZaUVVxM3VLWUh6czY5ZDg3OXZ2Tno5OXdGTmhBaFJJSzBtL1FNNmFUNFY5TCtXaGRwQS82dnlFMCtRS2x5NGs1RXJBaDRKejE2U0JOeVhrZ1B3WnJyVjA5aEx5b2JIbTJBRm10QnFLWURlbFZyc0ZXKzdHV01mWFJIQXBrT0h4eUYwVUhremgrRGlFK0JiNnZGd3ZtdFlIeVQyaUVLR1FqSGdKMmVSRzZPNC83WHZrQ3NPUm5BOUJCSjcyMEV2dWVLUFhlcUYvbnZqNk5zeDJNRUhnSjdrR0c4TDRvdGoxdTQvbVdGdEtZL2IzdkJOTEU4TW9ydEIxL0d6aU52QjNCdkJwSHdJT2VCNTRPbjM0Yzk4QW5Dalk5Q2N5MXc4bFlUQnR3WkMra1JpN3czSWN3c1FDb0lYQUxFazAyWSt2UXpqQi85SUNEb0RtckNnd1daOCtGcmYrRG90OGNwci9lQzJ5WTBxWTRFTWVGY3p5RjMxcVZNZStCT05LT0loRTlVWGxlTGlXTWZZdUhzT2ZqMU82RUlmS1pYNU9TNXZ0Y3B6NERHR2JobGVFb2VNMEZlWjdOd1RVL2pMWXR3NDhzUWVvYklUR1NiMHFodXQ3RzFQWXVab2ZlQ0tOcmtNZGRwOEt4S3pkVmZrVnFjeGs2cUNqZHVnb2VpcWtDc1FCOHVoMnVFdlpMSkl0ZXVvSEk2Z3ZLWDBxaXNFeWlVdVNqWWViZ05CcVorSGtUajJFOG8zL1draE8yU0tlcVFvLzZSNzJnemsvL2dtWGt3OHA3WkJrQnBJcmZoeUxTUXQ0NWh3ZzBiV0pnM3NUSnVZZXlTaWFweUU3T3pONEF3bFg1YXc5WGYrb01vV21VRWo4alI4TFZSejBIcGRpRVBac3dEZXBUR0d1QXdpaUM2ZXVZY0lzOHZBVXRYYkJSYXNoaWZ6Q0NiczdHVTV0QUdLcENadndDOHFFd2JkTDhnbUV4UHI1NWNqOFQyMUNJVFYxZmV5eGZMM0VGOTNNQk16RUhaQlIxMSs1Y1JpanFZV3hCSU5nT1JyMitBUlZKQkJJcmdWbG4vM1hZZGVZN3BlQmJVTkZvbU1EWnRJWlowRVc3aXFIL0lVZXUxMVV5YXdYRlZ3S3NpYTVDU2c2cG9yQ2orZXRGdGhxVUpEU0pwWWRlQkhQSzJuellDenVicGFkQUpqRFFFNW91ckJHMDc5cUpVaVZYU3pwTVZ1Sm5pdUh3NnBOYW1MblA4L200bGZqeFFqU3MvN0FsTWh5WEJrQngxSlBlVlRIQVBIVnVNaC9CbjEyWmtQbzVqNGhKSGZpQUtNUnlHVG1uYXRyczlNTzJYQktwbnREMndsM1NQeXVOL3lmTG5NVVF5R21UMnExNHdjRjhOOWFwZnZISkc2cmNqOGRRVGdla3BUazFKdHRsQk9ldmU5d1pVSXhOQUNUd1FqQXIrVlJnWER5V1FtQStwUGMwbis0TFhmWVNkQ25yUnE2U0xNb3JPcHpzOThIVU1vUzBPNGdkWFlIRjNkVTBYRERXMmp0d3NWK2IxaHc5aDA4T3FiYXU3UVE0VWdXUUtGcDdaL3c1WWU3ZmFzRFlTa1hCVmZrTXV2elVLWHlWNDQrRzNndVZlSC9PMkM2Y0hYbWNGL2g2R2UrNTVRdndMckpaaDlwc0lpa3BsS3lLN2o2ek51d1R2Q1NiRnJzd3VuMFI5dzhVU0hiSUY2aTNtUlloOHl0dWdKUlF3Tm5lQXhUZStNb3VLZituM2lkTGxqTGlMWHhkZFBrQjZEZUNrdjlZamUvNUdHUDhBaEdhQ21yaEIvbm9BQUFBQVNVVk9SSzVDWUlJPVwiLCBRbSA9IFwiZGF0YTppbWFnZS9wbmc7YmFzZTY0LGlWQk9SdzBLR2dvQUFBQU5TVWhFVWdBQUFCZ0FBQUFZQ0FZQUFBRGdkejM0QUFBQUNYQklXWE1BQUFzVEFBQUxFd0VBbXB3WUFBQUFBWE5TUjBJQXJzNGM2UUFBQUFSblFVMUJBQUN4and2OFlRVUFBQVAxU1VSQlZIZ0JwVlpkYUZ4RkZQNW03bTZ5Zjlsc3M2SUdMUTB4OUVHeGFDMkNFVFJQTlFoaVJSVDBTY1VXZk9xcStOenR1OVUrdDJLTElQcll2bFR0ZzYyQ1dzVlNEVmJFQ0MyMFpsdXl5VzdzM2IyNzJYdG5QR2Z1VExMcjNwWktUM0l5NTh5ZDgzMW56dndGdUlWb3JVdWtCMGpQa0Y3U205S3dmUlhTS2Z4ZjRTQUxjTHR5N0daRUlnRjhQelZWMGhMN29mOHoxcHRuMGZQUFEwZStHZU9OVE1MTGJzZElhUTZwd2k0WDJpUTlLSVE0ZkZNQ0xvY0ZKK0R6NkZ6N0dLcFhnMHlWSWROakVESVhqNHZhVUlxMHU4UXhLRXdmTW9SV3FrUnljSWpBWm03WWc5b1JyTmMvcCt3ZWhpZlRORXFEZ3VMQm1uLzVSeGhiUlFIQzRDK2tKMTVFZG5LZmczdmJ6VVM0bWxOemdjdnkvcWs2OW0xN0JlbmNka2hKb1AzZ0xzS1FtRGhvUlNUazlGcS9ZM244WmZYQTFyZWtMZGVqRkhkWjJqQXVUZW0zcXgwY09yV0MxT2hka0tJTGlZNXRuZDJKVzZQZCtKc2RseDY5R3lmL1BLeCtYZjRCZHYyT3NTRnQ5cSt4ODhhUkplcng0SGtTSGdWNUNHaEFoNUlPNkd1WEt0V2h0RWtSOS9FM0tRSjRUT3g1cEFLZi9QR0JtK3NjYjNPZXdSNzJ2bDlzNDBvam9oSklDbHpiQkNXd2R0Z204TUNBQzZzQjFaNi9DUjJQa2Rvbk1tQmg1UnpzTEZncVRQQThXMTh1dEF3NHExQk5HMHpacWdCZnJEWHdrMDlsVmJILzdUOE5uRjViTlQ0VHg2Uk5FODVyOU4yMXJ4ekIweW42OHdoYkYvL3V4dUJnN1VGRUJDZ3pXQTRWdmlhd1BLWDNlTFpzRUQ1YnFhTWRhZXd1Q09SNEk1Z3lodkZtSUpLRitqbEhNSld5QzRJcnExRk1MOXplRFNsREg2ZWJWTHBPeS9UOGVDT0ZHMHJoYXRjM08rakVxc2FyRTNtenJUaEdpQmpDRDljR0NEYjNuN0J0bjJnZElkU2hzZHRxSFdtbVZqM2pqd3F6V1FjZy9pdGN0Y3RzRkhNeWNlQUxXL0ttUFBlTnBJaElZNFRzS2JMdlNYdDRkanczQk1paGsvbXR6bTJtTE1IVTdFd1dGNWY4b1lDOGxOaFR5aHZBVDFkOEZGTVNMMjBwMENwcFpHVkN5aVRUeFFlZCtRdW4vUTFiOHp2NnN0R0RBVHdMbHV0aGhNVk9EMmtDM2oyV1N3VG4wQ2NubjNIdVNTWXdkd2JQWUhabWRCamR6dUo2TDlyd0E2WGpCVTFBdnpkM1AzYVVuM0E5SnlSdExiNDN6ckwzN255SlY1Vi9oMmpjV25DcG5ockxER1BibUFPN1BuSmR4L2t1Y3J2b2RkSUxzek9aMGp2ejQvRmRxY1hBWXJ1MUtORTFraEVpQVZ6anVlbjljbHZ4SWU0eWJ3TWIvZGQxaFpvUDJWYjFvMUNObzNUMDQ4OE9yMFZuZ000WGlwN2NLQWxuclloQlR1eUZMTzkxY0lQWGRSOUpGZkhOQ3QxZDFLcjJIaDNxMmdhQnZhazN4M05mWmlkRStVMkk3R091bTErMXFuT1Nuc3lLSlRFblhBZjBWTFpvbzNVVzZZVFY0a0d5QU9RSU9EOUh3RHRkYU9LVG1TajIwVCt1YjEvTzZEdjQ3NkppQVJwOWdKZHNYNVh2L0Z0aC9BdXdvMEVQZ2lrWU5RQUFBQUJKUlU1RXJrSmdnZz09XCIsIFptID0gXCJkYXRhOmltYWdlL3BuZztiYXNlNjQsaVZCT1J3MEtHZ29BQUFBTlNVaEVVZ0FBQUJnQUFBQVlDQVlBQUFEZ2R6MzRBQUFBQ1hCSVdYTUFBQXNUQUFBTEV3RUFtcHdZQUFBQUFYTlNSMElBcnM0YzZRQUFBQVJuUVUxQkFBQ3hqd3Y4WVFVQUFBTjRTVVJCVkhnQnBWWkxhRk5MR1A3bW1FaFR2U1JCM01nbE45bVV5NzBOVlhyQmkxNnhjamNpWW5XaEtDZ3FncStGeG9XNFRIUWhWZkd4RUFVcEtBcHVOYjVYSnRqNldBaUpqNnJnNHNUcW9xQTE5cEcyeWNrNTQveVRtZE9ESnJiVkwvblBQTTdNOTgxOE01TUo4QU53emtNaWtpSXlJa3craWFLcVM0aUlZcWFnVG9wZ3VyallTSWpWSWQ4dmtwU0lFSldyRDN0UnVYdEhwbnhvU0xZeEloSE1hbzFqOXFwVjhDMzVUM2Y5SXVJd1kreE1Rd0d5UTVGTHdva3pwOERmdjRjeGZ6NVlPQVRXUEVkMjRhVlJFU1U0L2U5RUgyRE81U3VZOVhkYzA2U0V5T0h2Qk5USXBmckVpV01vZDErQXYvMGZHSDQvbUdBUm5TRFpaQmNPTHArQU16YU82cHRYbUwxMU81b09IdEowQi9STW1QWmNKRG15cGEvN09JK2M3R2IrMWxiNWtna1dnM2xId3hSOVRZL3lqaEMzOGpuNGQrN1dJbVRYSWlGUzBBSVhSYkx0K1VDZjAzWnVpWEc2R01kZTh6Y1lpcFJwTnNZQVQ5NmRoU2piSThOaUptOFF1SDVEcjB0V0NLeGdhdlFtMWNST3hWRVk2a2ZiZ2pqYVB4bElQUUYrTHpIWFNLYTRsWXI0TUpVRGJQR2kydmNTV0xvVXpkZHU2a1pobjNpc2xYS0ZYa2xPZmd5T2YwWlBPSUF0eTRDanorYnl4WE5ibUR0NmwxSXZTYzB5cDJMQmFXNkdYYTdBTWszNFl6RnFraUNCVHNxbFg5K0M5dVRqK0NEbXNURGVOakdzWDF4aWU5cFdZOStpWFhLaHVWN3dtclZ1NmpnT2JOdEd0Vm9GQWdFRWF5TlpUcFFMS1pjZmVGRmpGOSt5WFpZaW81VlJqRm5qT1BuMExOYWxOenY5d3g5Y1FqN3BsUXNTTmd3RGxtWHBxaWdKeUFObGtqMGVGeXpid25CNUJDTkNwRlFwb2VmREkyUE50VTI0My8rQWF3R3ZFSkhyOEloSGZaUHludFFqWkRzMmJKVWZuUGdzZG95RFJxZ2pJRjB2VUNiY0ZNU1A4TmU4UDVIZGNCdi9SNVl6VEFHZnp4MzNGMWVnNDQ5bERUdnNYYmlEUDl4NEQ3RmdCTk9CUnlCUDV5QWxNa25hcGlzdXIzWjNrc1FFeDRMSFlmNXZzSDNLVVd1UVBWMWRYV2hwYWFIaUFSS2dSUzVTaVFTeTczcHJtMmxBSEoycll3eEZCek5CTkJxRmFacTZHTk9xR2RvYUdiT0g0MGlRczVVQnpueE0veExNS0hLNW5IdEhlS2NWVmJjVVQ1NC84bFBFRk1sazBudmpSZkdOZHduOWxocitBamtoZ1hxZ0JkY3RhS3JDenltSk96bzZlQ2FUOFpLbnZKejFya3hTVDBLZDhHdzJpM1E2alh3K2owS2hJTnVFUWlFSVluUjJkc3BVb2U2VjJXZ210Q2FYK1BTUjRiL3c3eUtoQ0lvZVFsUFZwZFEyYjRpdnYzMnJvUDBaZWtvQUFBQUFTVVZPUks1Q1lJST1cIiwgam0gPSBcImRhdGE6aW1hZ2UvcG5nO2Jhc2U2NCxpVkJPUncwS0dnb0FBQUFOU1VoRVVnQUFBQmdBQUFBWUNBWUFBQURnZHozNEFBQUFDWEJJV1hNQUFBc1RBQUFMRXdFQW1wd1lBQUFBQVhOU1IwSUFyczRjNlFBQUFBUm5RVTFCQUFDeGp3djhZUVVBQUFOd1NVUkJWSGdCcFZaTlNGUlJGUDd1ZTJNem1ZeWpZQ1dCMlNvaUkxdEV2NVMxck1Ba1dybXBuYnVtbmE1bVpwTkNFU0swQ0FMZHVZZ29JZDJWR21ZR2dZS0N0SEVtRFRUQm5BazFIZCtiMXpuMzNUdnpaT2FKMHRIejdyblhjNzd2M25QdWo4QXU0amhPaERSR09reWFkQXF5cXNhaXBQWFlyM0NRQXRpcjlQb1JpUkxnajZpSmswYTRQNUljdzhEc2U5bW1OelBTcHo1U2g4YmFNMmcrZFFkTko2N3EwRFJwUWdqUjdVdkE2VkRnRXZESjZET2swdk00VW5FWVZRY2pxRGh3aUNJRTFyYldzSjVkeDl6dmxJeDcxOXJ2bkQzYW9MSGlSSklvSWxBemwreUpqNTNvbVhpSmkzWG5VV2FXd2FFZkNxS3ZHOEI5L21WN1BidUJtYVZadEoxL2lOak5EZzMzV0s5RTZKeFRNOGxwU1F4MzRzWFhWemhiMndBWW9zUTZ2VXVXd2RMaDI4OUpSQysxSVhhalE2ZnJISkdrTkVFdk5RK3kyU3lXbDVjUkNvVmdtaVlNdzVBemx4eGlKNHNqZ2QwMmw4dkJzaXhzYlcyaHBxWUd3V0JRWnBsaWJnZzEreVNQTEM0dXlpQjJZSEF2Z1NiUndGNGlKbUJsZ2tBZ0lFbVVWQVhvYzVjdGUzd000WHN0bGttMmVleVlNRU1oUjNpenc3Z2NsNldSUDA1K2pKMjRsOHRtaGJXdzRGaGtXMi9lQmdLWDVlNktNa0V6VzliUUVBemJEcGcwUzVQU0pLcXFQS2wzUzR0R0NpL0xBY1BCUEt0UWxSZnBOQXhhaFVrcnNnbExFVnhuZ2ticE9qTU5ROCtZbGlwV1ZrREZvRUliN2hUNWMySER4UjBzOStZSTR1OG1oTFV0NDNPczQ1LzFYK3VaUUI0b0xDd1F1RUErTGR2YnJqYlp3SDFxZWRLSGMyN1k4eldBdWZwcGNNSndTVlFjVlExMkpwTW5NTHhKNEhvVzdjZ1Jxa3JpQUlGc0Y5UW03UzREdmdpMVRUMFkySW5CQkNscGhTdmhLOHZrbGpRTC9TWHF6NW0rN2taZG5UYlRlUUx6eWhYZkFGUlNhaHFvd0U4cDl6MEhLVlUwNjBPT3I3czQzYUROS1NZWWxheTNidmtUVkJOWXRBSVlvN1I4b0hURmlLZzI1K3NlS0dBTjhFSGpJcTl5TDBQRnNXMjc2SUR0UmZTQmsvT3BydGJESnd3QzRudGpoSHZsNWVYU1VldCt3TFdHdzJFOTNPZTlpK3FoTHJ2NGFCY1NuN3FLdDhPdURLN0dyclVqZnIyZFIvS1huZHltYkZBajczQjJpTGxPNm9EdEFSdzd3RmtTQ3JQb3dZbXpMOXRUUzlOb2VkMktWR2ErNENDS2dadU9YNVhnM0hyQTQ2VkNORWxVa2JoUDVnOTZNcjhQWXVyWGRKNHNFcXlVZ00wbmIzdUJTejZacFZmdFB2cDl6dDVsMlBtUC95NmlDbURWQTVoVVkzRzF6WDNsSDFDOENxV2VpTVNNQUFBQUFFbEZUa1N1UW1DQ1wiLCBLbSA9IFwiZGF0YTppbWFnZS9wbmc7YmFzZTY0LGlWQk9SdzBLR2dvQUFBQU5TVWhFVWdBQUFCZ0FBQUFZQ0FZQUFBRGdkejM0QUFBQUNYQklXWE1BQUFzVEFBQUxFd0VBbXB3WUFBQUFBWE5TUjBJQXJzNGM2UUFBQUFSblFVMUJBQUN4and2OFlRVUFBQVNZU1VSQlZIZ0JwVlp0VEp0VkZINWUrcllVTEZCb3hvWnNoUWJHM01DdEpMSUl3VEUxMGMwUVoxeWkwVGppbGhqNU4yYWNTelJPOW1OcStJUEpsdmhQbHNYTWlHaml3aHo2QXphWU9MOUdKeCtaZ212RFY0QkNXMHBMdjk0UHo3MTkzNElCRm95blBia2ZQZWQ1emozMzNuTUxQRUJVVmJXU2ZrRGFRK3BXVjhTdnpUV1JGdU8vQ25QU0FEWXJiUnNSQ2V1QW42U21tZFRLeGdOREMraTlQUVBYa0EraGNJTGJiTXZQUUtrakd3Y2UzNGJLQ3B2dUdpQTlKd2pDSnhzU3NIUm80Qno0OGxkam1KbUxJTSthaml5TEVSbG1rZHRGb2hJaUVSblRzOHRRNmZQeHUxVnFxU05MeDJvbWtuTnJDTFRJT2Z0blg0eWk0NW9iNVdVMmlLTEF6Y2lKb0pJT2F0S0RPU0VhazNIZnM0Z2poK3c0OFVxWkRuZEtYNG1nNTV3RnpkSXlNbklaVjc5M1kwZmhWZzdLZ2FoTmZwSWVxb29VamNJRzlKMlltaUtTTXV6ZWZVeFBWeVg1ZTNTQ05tcGVseE11aEwyVk1LYnZoY0ZnUVZvYXgrYUtWUHdyZlRXNUNDaUtDbGtPUW9vTkk4UFdBekg5SURPNlFRUlBDbHIwYmpiVHU2Y0tzZkVKNUR4YXJrV3NwaUlmVTJWSWVWYnNjVGdRRzNQREdBeHFheUFDalhKeGNCalcyaHBVZFgyanB5cVg3ZG9Mck9mcjYwZVV3QTNVbDMxK0dNd1pXRllWWEpjaStObFdEbS9RZzR2dm5JVHpJSThPNHpkdlliU2xGZG1UTTN5ajVWZ010R0Q0Q2NmWDI0KzhBelhNckluTkhXRTliK2QxYnBCRzhVcnpDNWdPQlhIYVA0M3ZNa3V4eTM0VTFRWFBvYnU3VzQ4TTlycGFQSDN0YStTOWNRektjZ1R5Z2kvcFQ4djEzM0hwWm5Wc0JVN1dpOGt1R0U4c2NRT1BYOFhwcmhuc0tOcUxtcW9TbUNidkk3ajFZVnk1Y3A3eXJhQ2hvUUVqSXlPd1dDeXdQL01VMUowQ0VwMXZJUnlpblNsNkhtRmJyazVRekVqNWhZb3NlYUJNaUJnZk5PRE0xU2htdlhHRVFpR1l4QWdteFg1RUFsMklVUnJhMjlzUmpVYmg5L3ZoOC9ub1BrUlEvZXlieUh5c0JkbnhMQlRTcmkvZCtQUmZCRnhrWkNGbnlRRFR0SWlsWUhMT1pESkJraVFPbG0vUDU4RDZmRGdjaHRGb1JDS1J2TjFTU0VUMlhBTEtqejhBeTBvcWxTeEZIc2FVR01wQzdHNDY4bW53a1RrUHA2SSt4T054T3E0R1dLMVdEbDVTVW9MR3hrYmVONXZOZkVXaUtPSjJld2NXenB5RkJCT2RLRHBQZFlVNmZpQkZVRkM3SDFOMy8rQ3orOUtNdUpSaHc5dC9qdUxpdlh1cGFCZ1JBM1U2blZ5WjNHbTlnTVd6NTVGTFc2ekhYVml4UzNkeHNSVGRaTDB0OVlleHFnakFMb2k0UUNTdm1oNUNycENXSWdnRUFuU3BaSGh2OWVQM3d5OGkvUDZIeUZTRjFKMWdrbDkvU085K3l5NGEyMlEvR3cyUVE3RHZKeVNyejRwSXBMOHBjY3dyRXQwVEFZNDBFWS9RS2xlTHFxbXBhRHVxaDMvVnB4M0pIN1hhcjhSNzFJUVBxaHlBcWl6U2RIRHp5bnlZcjVJWVNMMFJ3RHJGYnZTdno5SFJPWmdzZE1LYTUySjlvYVBKYXRMUitncVVsYjNHWmxMRmpoZDQxaUVTVnNOYmQ1SkJ3WFkzMnI3MGFOWDBRU1NxbmdFY2Y2bVl3QjM2RCt6aDhRQnJINXhtYXRpamd6RjNDTysxREdKMkxyWWhCd04ybGx0eC9HVUhiMWVCTit1RDlaN01KbzJFZTdpR0ErajdaUjUvRStHTU44SnRMSmxHN0t2SXdSUDd0NndHWHZmSjNDZ3k5dWhmVWpjdlBlci8rSGZScEFINFZ3RzZ0YmxtN1podktQOEE4V2pGai9Nc3lYOEFBQUFBU1VWT1JLNUNZSUk9XCIsIEptID0gXCJkYXRhOmltYWdlL3BuZztiYXNlNjQsaVZCT1J3MEtHZ29BQUFBTlNVaEVVZ0FBQUJnQUFBQVlDQVlBQUFEZ2R6MzRBQUFBQ1hCSVdYTUFBQXNUQUFBTEV3RUFtcHdZQUFBQUFYTlNSMElBcnM0YzZRQUFBQVJuUVUxQkFBQ3hqd3Y4WVFVQUFBT01TVVJCVkhnQnBWYkxTMVJSR1ArZGUrK016ampvOUtDSTBkQXk2RjFyRjlVbW1rVlEwQ3BvMFF2YUJFbXVZeXhvRTcwMmJwTFEvb0hJUmVwQ01Gc1lGVVJVVkZDZ2xOckMxREYwN3AwN2QrN3ArODQ5ZDV3Uko5USsrTGpuOFozZjczdWN4d1grSVZMS0pHbUdkSmgwVEM3Sm5CNXJKMjNHV29VWGFZRFZTazgxSXJFQytEWDZkSkltdWU4dHZJWTdQNlMrVndldTRzdE1DNW8yUmJBL1ZZdjA0WHEwN1lxSFM3T2tONFVRRDh2eHJHWGdHUTJPMFc4NXhPYnZlSzJKVWN1SWJJWlZtOEtobGlRU3lRUnlqby9QdjF3TWZweWlOVUR2bFNic2E2eGhoeDRRUmdPUjNBd3hqUlU4eDkzK2FWenFua0N1V0c5RTRxMndvZzJ3VElHODV5TlhvS0JORTRsWUJIc2I0OWl4dFFabnUzN2c3dlBwRUtxVGExTkJvUE9ud1gramQyUWVCN2ZYd1RRS01JUU5VemhrYUtOUWxIQThBYnNRcWdFcFRPeEp4ZEU5a2kwbnlZUTFDU1BnMUNRL1RUaTQxeitEcmNrb2JBS1NzaUJOSWpEZ0tLSzhKMVVFSlFJUGNPakxZOXRvemIyQldaVmFYYjhlUmFDWnpuUG40cU1wR2pFZ0RGTXQ4bVZlZ1JNVUJMVmRUcEVMQWdmTms3b0JPRHRqV1NadEdWTTVxT1VZYjNPTzRIUlkxSjl6bmpLYXM2VUNrVVdYZ08yQUFEbEtqMGNlVXhTdUQ5dGxHMG9aMmRsRW1yV2huQnY5N29SUnNMUXp3U2x1RFg1WUpIQkQ2Y3lpVko3NklBUWlnQjlvM2kwaWw1Y0tNTlJGTjNCbWRsRm5uTllyckVDT0NqNlZuRE5uL0J4RS9pMXZFSEpFVU00ajFLalJaWktvTGpRbkhmaStSeXBCUVVKR2RpTzJzNDhueHkxZEVLQXdDU0g0NUFsOStzZ3R2MUR5S3VCZ2d6SXlQZ1FVSjArS1lKYXpoS0wvSjdSb0xoMjBBRHo0VmdvQlNML0M0V3BDQjR3d1pBVUd4eit1V2xaRG1TWFdMbUxKVVNQYUdJNW1MVTNRZlB2ZFkzUy9YQ0FEblJLU0p5ZHZlTWRiUmt0Um5ubDZINjhtRDFWaGtFSEtLTnJMUnhLNHRWME52bWVrRVc2bEQ4WXJqZGNwdEdrSXF5N3M5akdCdXYzYVdtT2tOZXNIbDRFMmJiUUlwelljZldaUVlmaWFmY0c5am5SU2g3a2Vrb0NoNS9LV2NLQ1hzTWZEdStnQ2FaYVpPOUs2MkdzaDBiYThkbDhxeWszMU5uQkRFVEJUT01CUmRKeW9WOTVJS3BoY2hkZXN2S2JrWFBEd01DYkt6b0Y0eUpjVE5UTnNtRDRRUTM2cXpsQkhRQ3dIWE9xMjdZemlPdGtIOVN1QmwxNjFpaGVOSnZpeDRQQXlGR29TcVM1RDJtL28yaHdDOGwvUnRNSEVSTTVFZlV3UWNDMU9ISWlWQTYvNFpLNGNlUERvOThyVnk3RDhqNytMZGcwd1Z3WTRwc2M2ZFZxcnlsK0I2ejRIODhvSkxRQUFBQUJKUlU1RXJrSmdnZz09XCIsIF9tID0gXCJkYXRhOmltYWdlL3BuZztiYXNlNjQsaVZCT1J3MEtHZ29BQUFBTlNVaEVVZ0FBQUJnQUFBQVlDQVlBQUFEZ2R6MzRBQUFBQ1hCSVdYTUFBQXNUQUFBTEV3RUFtcHdZQUFBQUFYTlNSMElBcnM0YzZRQUFBQVJuUVUxQkFBQ3hqd3Y4WVFVQUFBTWlTVVJCVkhnQnJWYk5UMU5CRUovZDF4SVFJOFVFdlNqaDNoSmo4QVJHeEp0RUJmOEFBMXo4T0ZHSmhxUGxpQ1NHazRsR0JTMEg0MFhrZ0Vjd29Wd2hnb1FiV0x5WWlBVzFmZEQyZFoyWnQ5dStTbWtvTXVUWC9YZzd2OS9PN0JjQVpVd3BGVUE4UXN3ZzFsVEJFcm92akdpQ1NvMmNOTUZCYld3L0lWR0N2QitMQ0NKQTdXeHNEdElmcDdsVTI5czhSalkyZ2hWcWhxck9UdkMxWGpTdVc0Z2hJY1RvdmdLVURrM09oRHVqVDBCdGJJQnNhQUJSSHdCeHJKWmRWUElQSWdtNStGZjBBYWg5RXdVcjJHeG9JaWd5dEVkQXo1elZkMGFHWWZmRmMvQzNYQURwOTROQUZuUUNabU1YQllwL0FYSXBHN0tySzFEVjB3ZlZEd2NOM1gwVGlUQTV4MktCMGtMa21WY3Z3UjhLOFVlQkxCSXJ1VHYzaWdLV3o1NnlIa25sVUR5enVBRCsyM2VOQ0tYclBJcXNHNEV4TEhxZDVTVklYbWtIZnpBSVZ1MXhrSnFTNEx5ZjhtWVRySnMzQ2xHZ2t2UDdGMGF5Q2pXVFUyWmRabEdnUStyWjkxS1AzWE1MTEhKR1NwbEs1U0hzRk1zSVVaQVVxU1RDL1c3Wk5saVdqMzNUbUFGdGwybWIrN0RTVFMxbmZnNWdJODZEWkNJQnNxWTZQM3ZPcFRDbHV3WUNjODgxM1M5MzB4eHhOaGFETEhMcEtNTFUxOFc3Wm5yYW5UMFN5SitiUERzQ01HeDNmU25qYmdYRHRSRTRKdW1PRTVzL2NLMEVjempJcGEwZDlLbFVkdGMxdGROUXJ6S25UcXAwTktyUzZVeGxtSWl5cjQwY3FZNUw1Z0N1VVFSOG9BRDN1K0MvUWpvcU5YS1Q5S3NQSkZxVDlINGs0a055NTlmTHUyN0FnZ0RyWER0UkIwZGxkSlZvMi9KcGdTYXJyUTNVeWpMM1dnUDlJQWI2aTV3eTM3NFh0ZjFuVGhlMXpaa2dFOEdRNlY2a0NENnhLbDVjUjJXK0F0Y0hFdUE3UStLK0ZhMXQrVmtjeHRpMzhTenk1Ry9ZU2R5Nmd1Nk5XV3BaZUkrWVVDc1ZNajYrMXhPbWE1enVJcDl1OUNFV01JS0FKQkU4N3YvdUp2SHViVmx5TXZsZzBPU2YzNGJpUWU3engrYU1EQ3NIRDAxT1E1VUJmYWV4enVOaDd3c1hMajBUcFNMNUljdWZsZE55Ym85UXpnTW03cjZ1Y3JFNUwzbWtLUElTSXFST0x4dWZjRFVmQThBbkU3NHNnWXJIWFljNlBETzBrRmM3ZVdOb0svbGs3aGNKUGZyajZ1QTJvLzdqdjR1d0praDRDTmQwSDZVMFVJN2pMNXZBYmt2VzRUbkxBQUFBQUVsRlRrU3VRbUNDXCIsICRtID0gXCJkYXRhOmltYWdlL3BuZztiYXNlNjQsaVZCT1J3MEtHZ29BQUFBTlNVaEVVZ0FBQUJnQUFBQVlDQVlBQUFEZ2R6MzRBQUFBQ1hCSVdYTUFBQXNUQUFBTEV3RUFtcHdZQUFBQUFYTlNSMElBcnM0YzZRQUFBQVJuUVUxQkFBQ3hqd3Y4WVFVQUFBTnRTVVJCVkhnQnBWWkxTRlJSR1A3dVBMaU5PYzBvVEZQNTRCSVVxS21GR0NFU1Jxc2cwRTJ0RW5wQmtJdW1SYXNXbzVzV0VWaUxBakhRYUdHYkJHbVJ1NWtVaFZya2xHOGluVlFFOGEyajB6U1AwL25QM0ROZTFQSDVELzg5NTU3em4rODcvL2ZmZTg4QU94aGp6TW5keTkzSGZaeHQyS0krNXVHdVliOUdpM1NBdlZwTE9pSmxHL0JIdktubjdxVDdoZTRlekh6cXhIeDNMNkxMeXlMR2xwOEhSOGs1dUs5ZlEvYmxDcmwwaVh1RG9pZ3YweEtRSERxNEFQNzkvQlhDRTFOUWo3dGdkVHBoeWN3UWNiSFFPdUpySWF3RkoyZ1Z5ajY4Zzcya1NNTFVjNUtHTFFUNnpnWDdyMmN2OE9mTlcyUmZMSVBKYWpVRU1yM0hSSS82c2ZWMXJBeU9JTzllTGM0OGZTTGhIc3RNRktrNWIvcElGZ0tmYkdyaEVoU0pTV1ZUbWdyL1NYaG04S1h2UDVELzhMNGtJYmt1Y0pLZ0pHamh6ZTNWL2tIV2MrbXE0aWd1aERYemFCS2NyK2FCRkFSRjBkRkVreVJpZWo3UmxWV3NESTJpL0hPN3JJdWZyN3VpNkxzZnA1R3V3bkpFSmliaEtDNFNPMVVFakpMTVFLYkJVcUttdWdsOWVMbC9FTTdLQ3BSM3RzdWdMQXUvMUZCdlpXQTRZY2s5bFZEemM2QzYzWXFaYTA4N05tMTkwQXpHT0hneWs4Uy9HR09PWTRnbUVnaU5CUzJacHpVSzhGQUdQdDZwV3VhUFlEZ2Noc1ZpZ2Rsc0ZwN1NuVE14SWRGR3EwdWJhaE1jT0I2UEl4YUx3V2F6d2VGd0NKbE0vSEtlZWpSaE1wbUVEOHdOb1d1eWQyT2ZCaURaeWo1WjcvUTM5RXgvRmNTMFBocU55aW1OSkJJdkZMSFRaTnZJUnpUOWJNSGZlQVMxaFRmeG9QUU9WTE9LZFBZNjBJeldnVFprV2pOdzQyd043aGJlTXBKckpKRzRtNTJkRlRzZ2FVcmZWMkpxZFJwemRXTXdLeWJzWmxwektZNVlWUFRYOW9ocUU2VEw1VXJLU3g4eGlsbFlXQkFUa1VRRWdkbCtuRGpxaHRWc1JiNDlkMGZ3Y0N5TTRmbFJSRmtjYnBzTE9Sa254U2F6c3JKb2VpbFY1RkFvaEVna0ltU2lUR1FoOTJxeUxpUzFxcXF3MiswMDdLY2FmQ0dDbVprWjFOWFZ4ZllMdkIxUlkyT2pxYUNnZ0xUdGtOOThZVlZWVmNhMy8wQ3VhWnJ4TTY1SlZoL2QrWHkrUXhQMDlmV2x6Z2hqV3BwK1NqR3YxM3RnY0Zwck9QRTBiTkxPSTJjUFFtSUFKL01nVFlIcVpRU2xTbnJ1Qmt4MUkya05WbS9FM083SUpIWXY5RGZjNy9lam82TURnVUFBd1dCUXhEajU2Y2FCVVYxZExWcmR0ajB5MDJWQ05XbGxlemNmTzhTL0M0OE9zR2dBSE5mSFNGTG5UaGovQVMvRXdxOGdWQUd6QUFBQUFFbEZUa1N1UW1DQ1wiLCBlTCA9IFwiZGF0YTppbWFnZS9wbmc7YmFzZTY0LGlWQk9SdzBLR2dvQUFBQU5TVWhFVWdBQUFCZ0FBQUFZQ0FZQUFBRGdkejM0QUFBQUNYQklXWE1BQUFzVEFBQUxFd0VBbXB3WUFBQUFBWE5TUjBJQXJzNGM2UUFBQUFSblFVMUJBQUN4and2OFlRVUFBQU9tU1VSQlZIZ0JwVlpKYnhSSEZQNnFsL0Y0Q2JIbEFKR1NJQ0pNb3NnbUlZRklpUU1oeVNVS2wvd0JVSUtFRW03WVNNQUZ3ZmlJUUN3WERvakZnZ05IRm9udGhCR0xFTHRZTEF2SkRHQTRnR1JzRE9PWmR2ZDA4ZDV6VmJ1TlBjZ1dUM3BUUzlmN3ZucGZiUU84eDdUVzllUmJ5TStSNS9XWURaaStOdks1bUs1eGtBR1lxaDJzUktRbUFWOUxSWTY4bnR2UnBZc1lPWDFLU3YzcWxZeHg1c3lCMjdJQW1lWEw0YlV1c2FHRDVCMUtxVjBWQ1ZnT0F5NkFwVjA3b1B2NjRNeWNDZFZRRDFWVEt5RzY4SWE4Z1BqSlk0b0JhZzhkaHR1OHdNTGtpS1JqQW9HWnViQ1h0bTFGc0c4di9FV0w0ZmcrRktGUUVBUk5RalMwL0FMeGNCRlJUemN5LzZ4Q2R2MUdDOWR1TTFGV2N5cHVzU3dNSGg3WUQ3K2xSVDRxUW5GVWVqYkt3SS95Y1QwbTh2RDJMZmovcmJFa0xOZjNSUExJRWh5azR0L3l2YnNvL0xFTWZuTXozTm82T0FaVVdUU2xnRlE5eVlMYTVkZERsRWtQcW8rZHNPdlNSUVMvS3pQN3ZORCt2eHFLTk0vTWE2SlpLL0ZFUTFQWFdvK3RtU21aZ0QzczdRVmFXekZqMDJZN3BJRUoycWl5TXdnQzlQZjN3L004Y2RkMVJYZWx4dmFCRTl3bm9neml6SHdEcjRTUVBZNWpoR0dJS0lyUTJOaUlxcW9xRHVudzZPZHZXZGhTQ1k3amlLZUJPZGdyWG9OMjZnaTRpWG9DdUlVTDBHNER5bFhOU0p1Tlp5eERzSXhsWHNnMVprNFRpQlE2Z2o5MEZGSDFqd1QyRFZUNERDb2lyV3VXSVBhL2dQLzY1RGdDanVONHpzVFlYQ2FRQThVcDhzZTBhYmdJYTM1TlpIQ0NCM0FLWGFPU3FJOFFaUmNtYTJLelRpYVhJa2dHcEVzMnIzZ0RLaTRsYmRhK1hMTjBiTWJSUzdoQno3Z00wdkdDUWY1SW1HajI2UjBpZ042bnBIMDFuSkJPODBpZU11Z213Z0xLMmU5UXJsNHNNazI4YkNDYnhOaGdRcERKWk1BN2FSeUIveG04NFl0d2g2K1JYZ0VCOCtHTEtMUHJjRXYzRUdlL1JsajMxL3NJYnJORTU3bkdCTzltd01ZTHFyM1pjbjdka1Y3SzVDbjFscUg5VHlZRlp6TTdpTzA0bndOZTVBRnVkWFp2ais4UFhJMlZvekJ0MDZNSGJsYjJjMnhZdE1PbThLVkhpekpJSkYzVStPMkgyYjg0Ui9LN0hiNTgxRFE1ZEF5NVF2WXNQV083T3ZrdXNydG9GZm5ndDQwL1krWDhkaVNYekRSbXo3YUNZdWZOa01NbmJ3TlhoSUNaYk1lS3I5WUppWjRLaVJuRFl4bDhKY1VhNnpDWUV4NmNIQlg4Nk9EaFVEZHlOMWZqZWZFcEtxbkZ3SkoxVXp1VlA2WEJjN1l4MlpQWlpramtoTi9wdjRMTEw4NEs0Zk5pbjR5cDlUNFd3TlpaZjZhQkozMHlLOHhNSHYxT1BYVTdwei9nMzBXYkFSaElBZVpOWDg1czg0cjJGb2RITk5WQlBCbFVBQUFBQUVsRlRrU3VRbUNDXCIsIHRMID0gXCJkYXRhOmltYWdlL3BuZztiYXNlNjQsaVZCT1J3MEtHZ29BQUFBTlNVaEVVZ0FBQUJnQUFBQVlDQVlBQUFEZ2R6MzRBQUFBQ1hCSVdYTUFBQXNUQUFBTEV3RUFtcHdZQUFBQUFYTlNSMElBcnM0YzZRQUFBQVJuUVUxQkFBQ3hqd3Y4WVFVQUFBUmhTVVJCVkhnQnBWWnJURnhGRlA3bUxydXdXeWk3UlI1dGJhVmlZbHBCc2JIUkxSVWhNVGF4cGpYK3NRbEVNYW1wc1FZWHRXblVDSXR0Yk9BSHBXTDBSNGtVZ3BMNFJHSWErOE9DTVlxSnFMQUdiSnBRR2w3ZEJYUVhLTjMzUGM3TTNnc0wzYlUxL1pLVE0zY2UzM2ZtM0hObkx2QWZJQ0lydHpwdXZkekdhQVZlcmMvQkxSLy9GMktSUm5DcmFFc214QktRdjhxZGs1dFZQQS9POXVQbjZmUFNYd3ZOeXpsNTY3YmdIdXQ5MkwxcEw0cXo3ZnBTSDdkNnhsaHpVZ0dSRG8xY0VuWmRmQi91NjVPd3BXVWp3MlNGT2NVaTUva2oxeEdJTEdINjJqZzJHRlJxM3RQS0RKWWluY2JKUmVwdkVOQWlsK3J0STAzb0htM0Q5cXlkTUNvcHNWbHI5MHJBanJTbytvVFpwd3orNnNLZ3V3bzFyOWZxb3pYNlRwaWVjKzcrRUducCtLc0pQWmZiVWNCVHdQZ29NZUtlclFySHJCQ2VYUitrM0VpVWRmYUUwSE1oZ29HQkFUZ2NEdFRWMWVucGVwQ3Z1NklMdEhGWE5Uby9Rb2UvMzhzS2JOdGhOcTZUQXJIb1dTeGtEcnNsUWs5bEJqRXlyTEtUWndKd3o1SllqNFdGQlF3UEQ2TzN0eGRsWldWaWFoOFhLR2RhOUdPaXArSTdPMllDa3lpdzdkREltUlFRTG9OSGZkQWFvbnNSUXNzbklkYjFiUmhyTVRRMEpNbUZpQVliVHpDZWxvTnovWmp4VDRJWmdNV0lGNmtwWmhtMElOOWxDYXZQMllLS3l4VmwrNW9DbUhSSFl4bGpLeThtRUFoSTM5ZlhKMDNiaFVNSUhCQ3RuNjZlQnhTK2lOdDgrQitzWnpha0d3aXZaQVhVYmRFSWEyZ0pVdXZub1VSbExZVzhYcTk4enN4Z1pJbWM0L09rd0dOQ29GaTBlUDRsdVFnNVFpSHNTdlhRb1RzQTE2REtTdXI5Ykh3NnVoeXhJSTBYOFB2OUNJZkRxRHhncE1hamFjeTd6cWNQNXdzQitVRjUvQk15MzFrcFJDOW4rNmxRRFN1MUo0UFUwaGxoaXFJZ1VlVENWRldGTFJQMDhYc1dsRCtheFRxblg2TmZacDVuSGNVckFqRnc4dEwwTUZYbkJQSDdiMkZsNTV0K0dwdFNaY2pSYUJUSlVMbmZxTGE4WTFiR1dRbFZYMnFDTzdDSjVaalY1WEVoY0VVb3ZaRnJvcnNDZnRRMkJIRzZJNmhKSmtmK1pnV24zMDZqeDhzMktGMmVHdnJTOHhLVHFXTXE4aklNK2pUZnNrQjA3bUgyUU1XUG1MaEt1QmtPN2pQU1IwNHptMkM3MmVHTEg5TGY0VHltZnljQ0JiYmx4QXlLNVA0Z1dvdnN5WnVTNTJVem5EdGpvZGJHUFBiWjRuRWNHLzBLTWZKNEVPeGJqUHJETjJKYjRpWExHaXN2TDVjMW5BaEhLa3g0dHpvVlU0WVNuSnBvaGp1MGRRMnZlT2txY2l5RTl2MFpldTgyaFplZXFDbkpxcDBqcTdCMW80S3ZQN0JRdzF1NStHTHBoSXo2Qm5JWk4wbVJ1bEtMM25WV25FVjYvYjNBelNlK3ZuaVJxbWRNTk5TVGpvSkhTdG1SU3hlb2UvWkZKQVRGeUNzS1UzRzNWYjVnZVRlSVJ2eHg3ZUR1bEdpZk9GNVBEMjFzeEI1N0Z2dlVjNVM2NXc0bHJ5Z3ROUldGSmxSeTA3RDZ1STRUY1hJWDIwTHdUeHpyTThIbHU1TlAwcWV0bktwNllvcXlEWnpjaVB0emxrdFQzR3BPeEsxWUU1RGNpUkNSWDdockpvcitxU2d1ZTFWNGxtTGs2VHpRSWs1bzMyeUlKMDU0WlNiWnRiejB6OUt0bzVkdTQrL0NvUkY0NHdqSHRENm5WdVpKOFM5ZUxYNDloSlhJK1FBQUFBQkpSVTVFcmtKZ2dnPT1cIiwgb0wgPSBcImRhdGE6aW1hZ2UvcG5nO2Jhc2U2NCxpVkJPUncwS0dnb0FBQUFOU1VoRVVnQUFBQmdBQUFBWUNBWUFBQURnZHozNEFBQUFDWEJJV1hNQUFBc1RBQUFMRXdFQW1wd1lBQUFBQVhOU1IwSUFyczRjNlFBQUFBUm5RVTFCQUFDeGp3djhZUVVBQUFOWFNVUkJWSGdCcFZaTlNGUlJGUDdlZXpQenBxYlVKaHhJcEN4b0VXWS9HQVFXV1lzZ2pjaFZMYXQ5a1ZIaHNuRVprUW50SWxDS29HMlF1V2loaFVZN3d6U0NGcHFpa2lacWpqOHo4OTY5blhQbjNuRkd4MUk4Y3ViZWQ5NDczM2Z1dWVmZUkvQVBrVktXa0Q0ZzdTSWRraXN5bzIyTnBCWFlyTENUQnRpb3RLMUhaQlVBdjAxRG5MU0VuNzNlSHFRNjM2bFJ6czJwYit5OWUrRWNya0tvdmg2Qm10UEdkWmEwMmJLczFuVUpPQjBhWEFFdXQ3WkFqbzdDTGkyRnRhc0UxdmFJY3BFTENkSUZpSkdmNUFORVhyeUVVMWxsWU9KRTByeUdRRWV1MkpjZlBVVHkrVE1FcTAvQURnWmhFUW81UWFFcEZ3bXBmZ0d4dUFUdit6ZUVydDFBK0g2VGdidGpWbUtabk5QUXgybEpqSThqMmZFV3dmSnkyTGFsUHJCMUhJcEVBek1aL3drZXlaQ2FtSUI3b1E0N3lzcE11bzdUOThPR29JMkc2K2wwR3RQVDAzQmRGNDdqRUlHZHlia2VDK3lYVWlFRVBNOURLcFZDTkJwRktCVGkxOTFFY003UzBRK3haV3BxU2pueUIwekFFWnVvelFxa1NsTStDUk93TWdIN01ZbVdYUUg2YWVEWjJLOC80djNuTVJHd0hXd0x1MVl3R0FCalp3bE0rdlVlckY2RjUvdHljU2xGbzRjejFYYmdRTGtxd2tZbXVNeXp4NjhHN2FldkJ5amROdHhRRU5IaXNJNFlpc2dRWko5ekNGVFM1NU5ZV2s2VHdjZXRxNHRvdVZ2RDVsb21PTWF6L2gvVGFqdFprMm1CMzdOSldvbWpObGptTENFLy9nekJVdEpIMnZOTkl2R3hiOEs4cm1BQ3RaYmg4VVRlcVVoN0F1bUVnRU9WeE5XMFdsU1ppcFVxTXVDOHZObjVWQjVCamxpclJzQW5FTmFOaTVYbnp6a1o1a254RGxlL3Q3QlZxU2piYWFheldZTGE2ajBaMDJhQ1hVZU9ITnh0cGw4NFJSOUl6OTY4Y2dpVkJ5S2ViV2ZxMzk0a3FJRFpFNEh6Si9kbHFnVjR3d2VOTjNtR1Awb2tFdXJBOE1tMU5wa3FjK0JZaW9xS2pIbS9UVUI4YjNUelV6Z2N6aDZjMVNmMmYrQkdJNUdJTWJmbjNrVVYwSmRkY25JU29yTkRWZnhHRjhHeENObzhwLzRpM05JWW03S1huU3BUbmhBSjMrRlAzRmdNZ3U4a3VyTFhGbTBCY0syNDEwUjlJMmJNM0hpR0MwUWk0OWttT05Bdi9lcWowbzlGcGRBcWMrYXMvTTV2dUNSRmIwOXUrNHpuWWhacW1ZMDBjR2RUSjF4KzZnV29aV0x3SytUSVNNYWh1QmpnVmxsWEQ2dm1sSEV0MkRJTEx6dlQ5TnZseHFWTGJ1Ry9pMFlOTUpNRE9LUnRjVjNtNjhwZkhWczhiOXpLem4wQUFBQUFTVVZPUks1Q1lJST1cIiwgckwgPSBcImRhdGE6aW1hZ2UvcG5nO2Jhc2U2NCxpVkJPUncwS0dnb0FBQUFOU1VoRVVnQUFBQmdBQUFBWUNBWUFBQURnZHozNEFBQUFDWEJJV1hNQUFBc1RBQUFMRXdFQW1wd1lBQUFBQVhOU1IwSUFyczRjNlFBQUFBUm5RVTFCQUFDeGp3djhZUVVBQUFPbFNVUkJWSGdCclZaTmJCdEZGUDVtZGsxUlZJZ3RKWUhra0xnVmFnUkttaUQxaEJ4YWJraU5NRDhTUWlvVkVqY2tCRG5tWnZ0RXFncVVHNzIxSENvT1hJamFCaUVrMHFSdXhJa2tOUmZVSDd2dHBUbTBjZFRzcnB0ZDcvUzkyWm5FVlowcWFmdXN6elA3UFBOOU0rKzltVFh3REZOS3BRa0Z3aHlocXJadHpmZ21DRm5zMVhpU0lkaXRuZDFKU0xRaC81NmFJaUhOejlIVk1qYi9tTlh0endOMW5CbFd5S2I3TWRvN2pQemI0emgySUdlbjFna2xJY1QwamdJY0RrT3VDUnZUUDBIZHZRdlozUTJSU2VQQ1VBZG1EZ0lianpiZ2JYcTQ5YUNtNS8xKzRsYzE4dWFRNVNxU1NNbHl5allyUitQaUJmaGZmd1daU2lFMU9BZzNrNEVySktKSFB2ekloM0FFOXIrNkh5TjlRM2lyNnlBKy9PVlRVZnI3QjB0VjVOdzhJV0RpbDVDZlBvV3dxd3V2SEI2Qkc0WndQQjlPRUVENlBna0U4Q0lXQ2VBM3VSL29HQXoxdm9QcGY4NmdOTGNsVXJBNWNhMkRZOTY4Y3h1Ykt5dElmZnNkSkFuSVdsWEhVS3l1OGlwd3NnODRtWXUzb2tzdWpaaSttbUV2SW44SzBjTXh1Sy9sT0g5bkNSOElvMVRsS1JzM2JrRDI5Y0YxWFVncElUMFA0c2ZUd05VckNlVkhDaW9mYTNKbVZucjdpVWlUM0pGWEFUcHk2RGgweWU0a3d5SDZtSHZOeFRMdytXY0pNU09PSWI3OEF1S3ZQeUVvUElKQ2haQmFGVURFM1BxUUJJRkFROFoxbWljUWUyWGFSZGtLVExCQVhsZk43Q3ljN2g0NFFrQXV6RU5RZ2tYUEd3Q1J3NmRZQjlSdVVodDd0R1Rxa3hCREtFK0xDWFdmQkFDSDBGeS9hQVdPY2c1RzlVNy9xMEFlT1FLUkh3ZVcvb1U0VE82eE1lREtBbXdzcGlvS3AvYlowS2drRC9RSktObGhGQ2JqWW9IUm5qS1d2dEVDV1JiUUJ3cFU3Mkp4RWJTQjVIQmNXd1p1WHFleWFrQTd5Y0tHb3ZwWFNWbWJUMHloTkpJMjk2ZzMxdTFUMW0zeGI1TmJveVMzV2t5WkRHT0Z0bVluS2p4QndqbW82ZDdyblhoWmxzME0yRzdkTlFKWjUveDdVR3NyaWFSc1A3RmcwTTVVUzdraU0yemR5MHcxenozWmVieGxOSjdMN0xsd3Q3bG0rS0J4a3RmNEthcU9Rd1JsWFc1QzdKRmNuMmlDMDQvVW9XdldmVURTemNmWDdHVitjbm9tOVNyMGRyRTNzeUZ5Kzg5YjF6bmlyb25rUjMxZExCSFN4ZmtwbEJhbVRGbnRsajFCNGYxSkZJOU9zb2NYL1M0TDZIUnloeHA5aC9PQVFqSm9kOXN3WTFySTJVcUc4NmtYVGhHbVVKYnZWZkRKYnlkUVc3K3pQVUE4VFh4c0lLZkp1VzBoTDdhYllrVW1qSWcrNFpkdmx6SHoveVVzcjFhMnhOTDdPalZoZnZCNEszSGJWMmI3WFNjdi9YTnE5emFuWHVEZnhZUWhXR3NockJwZjBaVDVqdllZY0RNNHRrWjVsNFVBQUFBQVNVVk9SSzVDWUlJPVwiLCBuTCA9IFwiZGF0YTppbWFnZS9wbmc7YmFzZTY0LGlWQk9SdzBLR2dvQUFBQU5TVWhFVWdBQUFCZ0FBQUFZQ0FZQUFBRGdkejM0QUFBQUNYQklXWE1BQUFzVEFBQUxFd0VBbXB3WUFBQUFBWE5TUjBJQXJzNGM2UUFBQUFSblFVMUJBQUN4and2OFlRVUFBQU0rU1VSQlZIZ0JyVmJMUzVSUkZQOTluek15MXVoTVJiVlFtekVwTEI4STBVTEJNaWpJRUpSVzJVci9nZ2JValJhT1FVSFVvamF0QW0xVnF5QW9jcWNsMmNKRklobW9pRGJWcHFubTBUeWJ4OWM1ZCs0ZFAzVU14enJEbWZ1YTgvdWRjKzY1OXc3d0Z6RU13MGs2UWpwSnVtcXNTMERPZVVqZEtGYllTQUxzVk1hMkk5SUtnRitqeGt2cTVIRWlrVUE4SGhkdE5wdkYwb1V1bEIycGhxT3BBWWM3TzdEL1RLc3lEWktPYXBwMmYxc0NUb2NFUnpLWlJDZ1VRanFkaHNWaWdhN3JRci8wRHlNZGlTRVRqU0M2NW1Ncm5IcjZHT1ZOOVFyR1N5U2phcUFYOEJ4ZlgwN0E3L2NMUUp2TkJxdlZtaWN4WW5HVWtKVzEzQTVuWXozc3RVY3gyOTJENVZ0Mzh3UzhOeHNJWlA0RStQTHRlMWk5OHdBYWVmZDdhWmx6SklESks5R0NDSmdrMThZRWdLTytEcjZIajh3a0kycFBORWt3UmsxdmVQNERabHJPdzlGNEVsYjdYckZZZGZNNnlocE9DQUtXbGU2cnVZaHAxUkFmaU85VStCZkNIeGR4K3RVenRTOVRaSE5PbDB5OVBETjNwUThsaEZOQ1lFYVVQSXpHUUR1YkIrYzJTNTVuaGZkUkVRRklSZG80aGZTekZjcUFsSFl1Y3d0MXVua1U4MytIdHM4QjNmY1p1dDJPeWh1RDVLTUdXMjJOdVFpUXBZcWl6dnFjakNSRFJjSHBDa3pQNE9lYkdSV0Zod202dUpjcXRjSmFVWUVVSnlhVnd0N21KbXlxTUJGQmhxUGF1QUNENTROQlFXQ1ErYmNYRTRyZ0xCTTBjNC9Mc2F6dUdFcEVlendQcU1EekVjUzJFbVRpZEVaU0tSRXh4eE9ZZnF0VzNVd2dEaFFmb3NyaHdYeTltNEhOa3VFS2tzRENlN0l6cDR4ZHlvVENHd2lFTExaZlF1b1Q1Wjkrb21OM29tSHIxY0JZYTl3cGRWUVVXQzRPWE1rZVY3WHFCdk1FenJaVy9DK3gwejBsWlk0SlhuUHZJRjFjZ054TUZDOW1tME9kRjFYM3VjYUhnVG9CSHIzdnVJenc5THVDdWR3SkFXdXBxd290QzdOcXVrYW5VdVJyZGtxTWhnWjI1YjJacFBISnVCcU9FL2FhS3BnKzBpRHZnM3VvUCs5Tk1jQ3NMcksxNTY1dDhUWndSeEF3azVwd1V4U3VJa2pNNEp3QkthTVNjOHVENDZXR0h4MUU1aGV3ME5PSEpKME5KZG9tWUJaSFd3dUJENWlya01HOWhXd1VpVWVTaUJNZXBNdnJCOTB0RWJyS0U3NGNtY1hoRUlBSHFGcE13QVdmek1KaDV4NzljV1BuTW1uOHc3OExqd1FJbUFCWDVaeFhsdm0yOGdmcVlnN0hTcXhGcWdBQUFBQkpSVTVFcmtKZ2dnPT1cIiwgaUwgPSBcImRhdGE6aW1hZ2UvcG5nO2Jhc2U2NCxpVkJPUncwS0dnb0FBQUFOU1VoRVVnQUFBQmdBQUFBWUNBWUFBQURnZHozNEFBQUFDWEJJV1hNQUFBc1RBQUFMRXdFQW1wd1lBQUFBQVhOU1IwSUFyczRjNlFBQUFBUm5RVTFCQUFDeGp3djhZUVVBQUFOWVNVUkJWSGdCclZiYlM1UkJGUC9OOSszcTFrSzZMMEZQYmxBVVJkdU5qQ0tzb0NLUVZNZy9vSWZvcWNoNlRXbTlRSzgrRk9TVDBrdlFCZEtJa0FKWGpkN1VsQXpCQjFkN3l3ZGRMM3R4OS91bWMrYWIwVjF2cmRXQnMvUE5tVG0vMzV3ek0yY1cyRWFrbE9Xa2owbjdTS2ZrbXN4cFd3TnBHRHNWZHRJQXhVcm5Wa1JpRS9ENzFFUkp5N20vTXRDUFRFOFBzdFRLUkVMTnNTc3FZRWVPSTFCVEEzL1ZSZU02VDlvc2hHamZrb0RUb2NHUm5leEg4c1VUT085K3d0NjdGeUlVZ2hVTWtvZUF1N1FFU2VyRTQreURzdGR2NFl0RURFeVVTSm8zRU9pVksvYmx0bFprWWsvaFAxUUo4YXRFVFZvZnF0VHFKcFBJalg5SDZlMDdDRFkybWVFSEpoSmhjazdOQ0tkRmdYYzhSMG50TVZnbFpKa0JyTlNHVEdvQ3FWdUJ6UEFRQW5mdklmaW95YVRySkpIRURVRW5OYmVjc1ZITW56MkQwb2RINGE4TXd1Mnc0YXR5NGZaYUVKUUtUbytCbHpvbUpuRG8xMWxZUlBiSE9QYjBmakw3RWlPQ3kwS3Zmb290YzRjUEF0UFRLRDBYZ1JXVzhGVzZRSnB5L3RKZXphZTNabzJjbHlxSEJyTmpZN0NxcW9qa3N3azA1S09mT3JXcGZFb0luQTIrbTdQQTVDNkFHa0VjSW1sNUtNTGtOQzlYT2lncm5ZSEZSQU1EQ2t0SDBjQjR0ZnpWUGZFQlF4ZjhzTWpCL3JpSTRCNGFtaFdlZjBTRENvRlZKczBpTmRueVVnSzUvWDdWUDAxWTlSN0JSU1k0d1YvUC9PT0lFWUZhQmkzYjcxdkFMbCtBQ0MwTnhGbjNRcENyeUVLbExKVkxJWnZMa1kzOEtlSVR6bGZVZTd4aEpsQVhhaW94VTNBV3MwNVdxVzNaeENrSzh3RnpnaVJjMTEzYkZ6MWxQcDB3UFVWUTZMdnUwRHV1UTZla0NGazdZQVgrSEgrY1AwS0JNdnd2Q1ljcXpPZThUeE9FRzhWNURIOFpVWXdiSzFSeHd0dkNBWnphZDhTWXZqRkJQK21sdXNQVnVEN1lEaHZZdERUOEVSem0wZ0dCeG1wajd1YUx4cHM4eDczVXRTdkE0SUIza0xBelVYV0pXNnEwdXljbWpYbS9SZGVaNjBhTWV5VlVyR1RlYXY0bWdzQ3JOOGJVeGJYSUcvUWVHSDZsWkthMVJTWURmcGttelJTcFBEZEZ1dExXa3YvaWhRdFg0RDEvU2xhSUpLVWQwenNIWjJuWVBFd3BvMmFHTXpycXBnNGQyRUNVemxNZXkxeTlJcDMrV0Q1NE5COXpzeWVUMmZsbFV6ZmNwY0xsdk8rQkhCMkRuSWw3azhyS1ZkVzBiOVJRdS8yVHVWVWt2Q2Rkc25qcGsvL3c3NkpCQTh6bEFVNXBXMVFmOHkzbE45QWhjbmZwYVN3ZEFBQUFBRWxGVGtTdVFtQ0NcIiwgYUwgPSBcImRhdGE6aW1hZ2UvcG5nO2Jhc2U2NCxpVkJPUncwS0dnb0FBQUFOU1VoRVVnQUFBQmdBQUFBWUNBWUFBQURnZHozNEFBQUFDWEJJV1hNQUFBc1RBQUFMRXdFQW1wd1lBQUFBQVhOU1IwSUFyczRjNlFBQUFBUm5RVTFCQUFDeGp3djhZUVVBQUFSb1NVUkJWSGdCcFZadFRKdFZGSDV1K2NxZ1FETnJOcGVNZFRQbzNCd2ZFUk96QkNPSkpqTlpCamdUTjkyV2plZ1BqUkVXUmxSSXBEVzBDMjZKU0VEWnNtV0kyUUpaNGpBekVYVnhDSzR1TVptb0F3YUZVQmd5RUduTFI2R2o3WHM5OS9LKzJMS1diTmxwVHU1OTc4ZnpuSHZPUGVjV1dFVTQ1d2JTU3RLcnBFUDhmM0dyWXlXa0pqeW9pRTBxd1AzS3VXaEVMQUo0TVRWbVVvUDRkblZldzhUbE5reDEydUdmbnBacjFxUnRSR3JHMDFpMysyV3NmWDZudHRWRGFtR00xVVFsRU81UXdURTVPUW5melY0TUhmMFFDWThhRVdjd0lGYWZLTmNGNXVZUjlNN0I2eHdSdS9CTVN4TlAzckZOd3pJVGlVWEQxRVd3SEJhTEJkbloyWHdBUWY3RXFScXMyZkFZWW5RTWZINmVkSUg2UUZ5eUhvWWQyNkYvZkF0K3k5L0hITllUR3BSWnhDYnNCS3IvZmhkdUVlRDE5ZlhJek15RVRxZmpaV1ZseUZwclpHT2ZmQWJGNjZVTlJFUS91UzlFUFRmK1FObzdieUs5b2t4elZ6YWR4S2tSbktQbWNGZFhsN0FjR1JrWjBPdjFFaVFoSVFIRnhjVTgxN1Naalg1a2d6TG5WY0dYaUpZSU9Qd3pzNWpwNmNPejMzMnR4YVdkQ1BKMHF2V0h4WWdoSllYbjV1Wnltb0NYckJYcWNybFFXVm5KcnZUZDRtbkh6ZEFseEVNaE4vRjVyM1FaTkxmRnhvSzhpRUhiU2MwN0w0aHJMbUpRc0hSYjdKajh3SXd2ejU1RlRrNE83WjFIcUZaVVZMREdIOXI0cHJxVGlFbE5VVWtXcVBYSk51ajJ5SUM2Q2NmVllkZElTbUxNWnZOeDZwaEdQaitOZnk1Y1pPZ2J3Q3ZWVmppY1R2VDI5aksvM3c5TjdYWTcwK21UOE9LeG8vQjhmd1VCQXVXTGkrQ0JBQkc0WlN1aUdwT2FDdU5MZVpJaGxqUkxkR2IvN0pZV3pMYi93b2IzRmVIVGkwMDhQajZlTnpjM2EzR0NjRjExZFRVV0NmUzlNM1VZUFBBV0ZrZi9SbkRCQjRVTVlPb1ZjRlB1cUdJU0JES2hmQ08zNVpVU3V2QlhEL3J6OThOMi9neUxpNHZqRFEwTllmbFNWVlVsU1VxL09vMytndGNSb0FDSFhzdmc5RXdZd1QwaVNmb2NiT0NOSWxoYW1saHljakpzTmx2WUdxdlZpZ0M1NVAxTDUrSFlleEMrNFpGbEEwTkZlTVVwT3ZFVXVKWFR2cjVCT1BhOGh0S0RoMUJlWG42UEljSmRINS82Z2o5NXVZVW5iazNuMm5qaXBvMWExN05NWU1qZGlVaHlkMlFVanNJRFVVbHFhbXFZcGE0VzZaY3VzTVR0VDhreFBkVXBWYnBFOEVScWMxZkhOZjVUMGpyZW5yU2UvMHphc1VLdmI4M2hVNzIzT0pHRUp2Q3lGaFVWQmY4ZGN2THJ6K1VwYnNKU3BVU3IrVkp1N0NxTVNpQkowak9WcWU0ZVRrRldJcEVVRkJRbzd2SHgwREp1MHRIVkUzV2pYWnhuYy9reGNFU1h4YkVKSm03TjIzdnlHZFVzWmVWOGEyc3JjOTY1bzMwMmlscWtWZE1qSWlBaURxYnkwbVdUSW9sL2JCejlyeDdDdTRWN1dXMXRiZGd5S2luSXlwSnBKZCtHc0kzcTh5ZGx5SHBpVlZjSi9YVkxCcC9vdElzY0VTUUtnWWU2SnJ4Y2g1Q1loU0dpUDBlWjNiMy9DTzRPMzBha3hRSlZsNVNJYlQ5K0EyWERlaGlOUm0xS3ZHcm1pQVRhU1ZRU21lRWVLbDVUMzdZUjRVMlo3VUppcWRZSWR6NnllMWZvOVk3NFpFWVU5ZEZ2NVBjdlYvbEQvTHNvVVFIY0lZQkQ2cGpJSWNOcUdQOEJyVjRNTEVKY0VGRUFBQUFBU1VWT1JLNUNZSUk9XCIsIHNMID0gXCJkYXRhOmltYWdlL3BuZztiYXNlNjQsaVZCT1J3MEtHZ29BQUFBTlNVaEVVZ0FBQUJnQUFBQVlDQVlBQUFEZ2R6MzRBQUFBQ1hCSVdYTUFBQXNUQUFBTEV3RUFtcHdZQUFBQUFYTlNSMElBcnM0YzZRQUFBQVJuUVUxQkFBQ3hqd3Y4WVFVQUFBUURTVVJCVkhnQnBWWmRiRlJGRlA3bWJpOFdhcVExVkpLYWtHS01tbXlKU3V0ZmkyZ1RmYkJSZ2NUNEV6RzFLb1RFQjlkRTB4aFV0bSsyRmNLeklEVDRnNGtnQkUzVkZ3cmFiVUlJb1VEYmtQQlEybjJsTFBSbnQ3djMzam1jbVR1ejNPMFBLZUZzenAzWnUrZDg1OHo1bXdYdVFFUlV5YnlMdVk5NWxHNVR4cnhMTU5maWJra3BHWUNsMHNIRkRJa0Z3RC9qSmNsY3FiNzdxWDRVL3U3Vks5MjhxV1djTldzUXExdUhaUzB0S0d2Y1lGVnZNSGNJSWZZdWFrQ0Z3NEJyd05tOWUwRHBOSnpxYW9pcVNvZ1ZGVnFGWnFhWlp5REh4MWdIcURqMEUyTHhkUllteVVZNjVoa3dubXZyczkyZHlPLy9BVzU5QXh6WGhXQVVWb0pHMHlvRTBrOUFablB3TDQ5Z1dXc2J5cjlzdDNDZjI1TUlHM05lenF1d0tIRHZ3STl3NityMGo0SlJIQkgxUmhqNDBKN2FTemJ1RFo2SHUzMkhOYUxDOVRRYnVXb05IT1RsUXprOFJOUE5HNFVianlOV2NUOGNBeW9zbWhCQVpGODhCWDhQcGliNUpKZXgvUGdKbTVkVGJLQlpHTzlIMVp2cCtxY2cwdU53NDNYc3RTZ2F3UHIxd0FldEVJODlEbkpkd3Nnd3dJbW5mLzhKYlRNSGJNUWZIZ0thbXJEaTJKODJWRlZsL05pc2RzRkFQOERnTVZVbG1ReWM1ZVdoOTU5c0J6N2VCdngxSXNCdmgyTWlsd05lZVZXZy9TdUlWYXRBbkN0ZFdmbUNkc2hQcGVBemxqbEZRcjNicEt1bXQxY0xhTSt2VDBCa3N4QWJYcFFhL091ZEFaTGZPbGo3Q0xEekcwSmpVNEN4c2REd004K1NscDI0cG5XVmd3RmpHWG9KcGlzcHQrbDFtcTJ1SXUraEJ5bGdwb2RYRS8xM1d0TFIzNGtlWFV0MFlML1VMWFgwaUtmWGREcHNzVE5uaUdwV2F4MmxtMk9NYlBORzI0Q2p5bW5kVU9CNkYvcGo0dTU1d0hQUEE4ZVBFYkl6d0R2dkNReWtnRU05QXZFbkpLNVBTSzNYMENEaGUwVTlSejFOUXpMVk90R0dVRVZTMG5tZUozQmZPY2ZQaHdMUkFwbU1RQ0h2SUo4UFJSMm5GQU9sR09ySHEzcjN3RXJNb3d1RDRIaUhSZi9MejRRWEdvRzMzdzF3aFl1dXBpYkV1WFNCb2lyNkZEeEtETjBvTXdacVkxeGVOREpVYW1EUGJ1RElIdzVPblNSMDdPSU1jZ3JmMzFxR3lVbGdha3BxQi9mdG16ZlBCSmU1b1VHVjVLVEtScEQ2bndvbXdWSWwyWExYZDJHNkR2OHE2YTB0UksxYmlYWjNFM21lcE8rN2luTFM2QmFxZWM5WWhoSjI1bXZ5TnI5Qi9sd0Rpai9kSWVuY1dWOExCVUZBQXltaWJSOEZVUm1sbzNRTDlVOUd4M2l0SFJWOXZMek1pZ2kydkZrNklwWkkwbkRzNUdrYm9oNGVGVzIyQXRwVVFrUmpFeHdlVm9TN0l5dnZmTkZ1d2ZYZFVDb1VYbjloRkxvN2k3bVlGNjQ1YkdNZmRIVkdRNU5ZMkJPVGNFMURGeW5nZU00MUpDT3NnVGx2TXRVZkJVOUdNUmU2TXBWMWRiUHBEbGQ1VVpNVHc1ZEE0K09od2tydUdUWE1YbXVCQ3F1aEJhL014VTZpTHYwZVdqcjEwVDM4dTBnWWdFd0VjTlM4VXlHdHZCUEdMZWZCR1JyaHNBWTRBQUFBQUVsRlRrU3VRbUNDXCIsIGNMID0gXCJkYXRhOmltYWdlL3BuZztiYXNlNjQsaVZCT1J3MEtHZ29BQUFBTlNVaEVVZ0FBQUJnQUFBQVlDQVlBQUFEZ2R6MzRBQUFBQ1hCSVdYTUFBQXNUQUFBTEV3RUFtcHdZQUFBQUFYTlNSMElBcnM0YzZRQUFBQVJuUVUxQkFBQ3hqd3Y4WVFVQUFBUE1TVVJCVkhnQnBWWkpUQlJCRkgzVnpTaUtVZHdURG9oTG9na1lGend4S3VoRkphNko4YXA0Y0VFVFVWR1BqdDVBWTB5TUIxZU1Kc2JFR0xjRWpTYWlDZVBGZ3h2amRnRkJQUUNHSFFlWTd2TC9XbVlHR0FqR1QzNVhUM2YvOTZyZS8vVUxZQlNUVW1hU255U3ZJYStYQ1dzeno4ckljL0N2eGtFR1lLeFdOUktSU0FGK2lJWVFlU2Ivam9WcjBmK2tXbzJ5bzBOOTQyUm53ODFiakhIRnhVZ3JXR2xEMjhsUENTSE9qMGpBY2hod0JSZzlmdzZ5cVFuT3pKa1FVek1oSm1hb0VOblRUZDREdi9FN3hRQVpOMi9CelYxc1lVSkVjbW9ZZ1ptNVlvK2VxVURmMWNzSTVLK0FFd2hBRUFvRlFhR3BFQW1wcm9EZit3ZXhMNTh3Ym1jSjBvK2RzSENIN1VxRTFaeUd0eXdMZ3c5Y3Y0WkFYcDU2S1FqRkVjbXpFUVplOC9HOVQrUUQ3OTRpc0dlZkpXRzVsaEZKZ3lXb29tR1hWL2NSUFdzTEVjak5oWnN4Q1E3RHpacE4wa3dBbXB1QjNsN0VrWVZJcklKK2UxMmR0Skl2bVBEZ2tjM0xTeUpZSTh6czYvbEpkLzVTaUtaR0lzaURzMm8xbkpMZEVEbHpOZWp2Vm9qV1ZzaktDcUNoM3NpazE4UWtIcEhFSW5WQU1JaUo5eDlicWFhbTBXVXIzM212YXdFQ2Q3bEt0dStBczc5VTZTN3UzQWFxcmdHZFhVb2pzV3c1TUpkSUl4R2REU09mMDlldlZod0xoeEVqTExPS01pYllvcXFtdWxxQnU5bHpFdUFYTHdCWExzVVRxMGFxTHFTblV5WDBBVE9tUTdTMGF1TDJkc3FWZ010eUVaWWhLR1NDcFdxWnBML1MvR2k1VGlXVko2aE00VGdhMnhJd2w4M0Z3aUJRbEFYeC9qMEV4MGVqOERrbnI4TldvaHdtVUJzS0JDajRqelJYSmZuOEdkQkZzcml1U3FobVRkbzJCUVMrYmoydGZ4dEF5UldGUWNYdDBOVXpHOUlTeEV1UTQ4WDQ4Umhrbm9lVTF0SkNNa1gxYXZxaWFpS0N2aFVZdkh0WmxRWjFOM21LZnZMbWpSNExpekNxZllwUVBraUs4aVBBd1ZKZy9vSUVLTFVTWSsxeEFwZktTOW5UYWwzbkN5aGcvNEhVNEZZcTZsRzRkeGY0OWxXN2ZVMWxidXdkRTd4U3JOUzRsSEdDdU5iWlFxY0IzcGxaV1FsdzFuN2VmSDNmMlpHU1A4MWlBUTl0ejFjMnNIV1RqTTJhSm4xeVdicFh5c2JHUkVQKy9Ka2ErQXNwdDJ5VWt0OFBjWTdoMlA3OEpjbHRQTWUyaWhvYWlpVE4zdHUyV1plcmNTeGNSSFZHK1duNkFmejZpWkhNTis2K2VHVWx1a0hWV0RLczJmbG5LeUdwNFZtU3NaanRTU2cvQWVmWWNiNkxON3ZFUi9yNFUrYWRxWkNlV2JhZlFvNmgwdkMzWG1WRnNqUmxxV2NpWlNqK1NkMEg2WkdlUTRuOEpGZkFsRGMvWEpzTUhrckdUSFZrTWp1ZmJHcUhjMTVVT1VZK2dwS3VBNlpRVHJqWGJDaUdLQWphMEpSSDVrZ3I0VVAvaGh5NzFjai8rTytpekFDMEpRSFdtMmNzYWVab0dIOEI0VmVidEp3ZnNoSUFBQUFBU1VWT1JLNUNZSUk9XCIsIGxMID0gXCJkYXRhOmltYWdlL3BuZztiYXNlNjQsaVZCT1J3MEtHZ29BQUFBTlNVaEVVZ0FBQUJnQUFBQVlDQVlBQUFEZ2R6MzRBQUFBQ1hCSVdYTUFBQXNUQUFBTEV3RUFtcHdZQUFBQUFYTlNSMElBcnM0YzZRQUFBQVJuUVUxQkFBQ3hqd3Y4WVFVQUFBUG9TVVJCVkhnQnBWWk5iQk5IRlA1MjdWQkRTSnVReEZGK2FBMnBxYUlhNGlTcWxLcEZzYWlxU29DYTlsUkZQYlM5dGVxaHFWcjFnaXJiQnlwVnVlVFVBejNBcFZXbFNsQzM2Z1VKTUJmQ1B3WWlSTUxQT2poQXNJbGo1SC92ZXBjM3N6TW1LQ0ZLd3JPZlorYk56dmU5OStidGpJRVZ4TEtzUnRJZzZTbFN6WG9tQzhJMlN1ckJXb1V0RWdDcmxjTXZJbEtXQWYrT21oQnBJeHRIcDY0amNtV0MybXZJRkhQOEdVOXpHL3hidXpIYzl5NENiKzJVU3pPa1lVVlJ4bDlJd05JaHdEbndMLy8vaGZoOEVtMnZOYUZwMDJac2RybjRjN2xTQ2ZseUVYZFRjM3g4N051ZmlYQzdoQWtSU1hnSmdmQ2NzMC85T29iQTdBWDBlM3RRNTNSaVlPdWJtRTQ5UUtGU3hnNTNKMjdNM2JNWFcwQ2ViSk96R3I0ZTJvdmd4NTlMdU85bEpLck11ZlI4YW13TW1ZbEQ2UGQwbzJKV1VUUXFTSmR5TUV3VHBhb0JwOU1CcjdzREJiMkN2RjdtTHZxNlBCZy9FVUg0M3o4a1FWRHVpU29OTE9meDJSdVlqUHlHSjNYdHRMakNRWHE3dHNPa3labUZGTzFCSG1uU2pxWVdtaXZ6ZVp1b2drNnloZjc3aysrVjJML0RuRUF3ZmNrR3QzLzhEQSszRkJBM212a2lGdjd4bXpIRVp1TW9DbzgvNnVtakZDWDRIQnV6bHBFNUtaVlFGWVNKUkVpQWxUbFo4UWxQemVVelNPajM0Y3Eyb3Z0VmpmTGRDdDJoOG0xcTJxUlF0Zml3LysxM2NHNW1HcWR2VFQ2L2dTUWxjZ0NLZ3VqMGRWNGdvcnBHR2NFd3I0eWp4NkZFTjZLajdna2E5czJqV05tSnNzUEpGMDhuNzJNbW5VVGs2bm1VRFIzUFZSNTlGUG9zNUxNMkk1RkVZaE9TWUlnaCtGbnY2SnlHaE5lRnhxeUJiVmMzSURtWWcrTVZGMFZ0KzVrdmwyaXRJa0FYL1ZKVHBCVHBobUhIUk4rb2lKREU0eFFiZ25ydERuYTFkMkRDVEdQRDR5SXRxQ0p2RmVCUVZadkVzcjBUSGU0NTVSaW1aYmUxT2ZwbUNya2FnYXdpdUhRSFVyY2Z3WnV1WUhjNVcwdEJsY3BUcjFhaFU4bnFWS2E4VDYxQkxadmo0Q3NJaXlET21IeTZpdWFIV1RUckpobytwSFNnS3FiWEtCU0lwNlZOampJMUF1M0FGMGo4L1RzdXF2WG8xRzRDTFZpMytMdHF4MGFNcGVnMDY3M1h2UXR1T09DcXA2cW9Nck9LOWNxd2YxQjJJd3lGbnhtK25uNjhZYlpqNk9RbGZOQ2JJb3VKTlluWUNzOFdOd0k3YWlmc1AxUWdDanRtbzJ3MDhNTlBLTFJ1dy96bGhuVkVZRmZRc1c4T1NNTVJ3bzVMbEs5SU0xMytBUXdlSElmbDdxUHFVTmFFelNTNGYwVG1uOThOa0c0eUptbDQvZjNkOE8zWlUvTm90UXpCZlNNSWtRb0pDOHdsRjA0STlzbUtXRUxEcDRjTzhndEh2cUZMY1MyZTcrRGVFV3A5aThGRGNyRGNsVGtxU093cmsxNzdTT3dzbmFnYTR1a2tmNlp4WXowQ1hoK0dld2NYQXk5N1pTNGZzSDNwSDdGV0w2ZXNsL2gzTVNvQUZoWUJhc0lXWW1mK1NoaFBBZWpNWVQ5RmtzQkpBQUFBQUVsRlRrU3VRbUNDXCIsIHBMID0gXCJkYXRhOmltYWdlL3BuZztiYXNlNjQsaVZCT1J3MEtHZ29BQUFBTlNVaEVVZ0FBQUJnQUFBQVlDQVlBQUFEZ2R6MzRBQUFBQ1hCSVdYTUFBQXNUQUFBTEV3RUFtcHdZQUFBQUFYTlNSMElBcnM0YzZRQUFBQVJuUVUxQkFBQ3hqd3Y4WVFVQUFBU2JTVVJCVkhnQnBWWjdURnRWR1ArZDI5dU90a0FCb2NEWVJqSEtXSVZzR0Jsb0l1SUROY1JNVFhCRStjTXRKSnN6NmpEUlRPT3JaTVNZWmNiRm9OT1lCZUk3QzJiTzZCOGE2OERISDhJMlh0dVlRT1N4Z1ZBR0xZOCtiM3V2NTV6ZVc5b0lFK1BYZkQzZitYclA3L2VkN3p2M093V3VJNHFpcEZGOWcrb1pxcVBLaXJoVlh5TlZHLzZyc0VVcXdIcWxkUzBpc2dyNFFUbzRxS2F4K2RsQkYzSXNPcGcrT3dIRjZjU3JEU2VRbGF4RFFZWUJPL1BOdUNVblNWdnFvZHBFQ0RtMkpnRkxod3FPem5OVE9PVWNSdjF0S1NqOHFSM0NwczM0ZWV0OUdOWmxJQmlXNFpka3VKYkNiQTBPM1d1RmpSS3E0cUFrVGY4Z1VDUG43RjA5RTNDZW5jUXphUk1nL1FOd1YrOUMyMlVCUFVQenVQMmhNaWowb3k1Q2dCS051NE80dnpBWmRhVnBHdHp6Mms2SWxuTTY5TEMwZUpzUEkyUzNRNytqRk1JZmwwSEtLOUE5Nm9VdkVLRVBFM1NITElqaUs1eEFZYllpWStSYUFEVkZNUktXcmxKS01xWVJ0TkpoVDZTL0Q1N3lNdWhMU2lDYWt6bDdUQmtTSVdoKzVadjRwRkpzUmlMREZ3cGpZajZFcGdleXRMcDBVSUs3QlRYNlBjeXp1THNXT2pxS0ZGTHdlU0Y0dlh3a1BoL2c5L014RkNFSXlRVEJDS2hHYlltcXFOT0JDQUpPOWkxcTdGWHNtSXZVZUlUTndwSUVjdWhsQ0U4L0JlRWxPcWFuZzh6TlFTcS9Bd01qSG5pV1Ezd0h3WWlDUkNGMEJ3S2tzSUliVE5QSTIvQXRaaGJxa1cyNWlmM1lLTkN2aDVuMWxYTVU1OTBHdm9OTGszNThzWlFIY3ZVcTlQc2JrR01HM3Y1K0J2cytIT1lFOFFvc28zcExDMjYxZm80YkxSZFFWL1FXWmhkKzE5anZZZ1E3bVBYUjZTRXNlU1dlNy9uRkVBNGM2Y0xqMDl0eDViV2p5SDMyU1h5WDM0OFhudGhHanlnUzFDaTZzRDN6UzlnemZzVDUyUm9jT1hjU0gvZFhhd1EyUnNETFBqYTFURE5BWWtXVjZGbi91dU1LS3BzdjR2akJOaUFVeFA1amV4T2lEOUMwakhsc2VMKy9CZS8ydHZJVWppenN4TElVUzZPTnNQZWNXUWZhcCtFT0VpVEpFbVJSajZBaUptUmFyNk9GbDhPUWRIcXNLa3IwTkNteWpFeWpndmNlemVadXRvTXhacVFZUlNqMEZBUU1SZzRpaUVLQ1JtaDBhNExIRmR5c1g0UTFKUmFjSjBaZ3oxWmZkUVgvS2hXNXArQ29lSkNDZVJMODlvemZzSy9rT1ZSdUdkSmN2WXlnazFsbG01TVFmUzNYSXdSaDJRQmI2a0NDMStYTFI1WnhIRlVGUWMxMW10V0FGZG5OWmsxT053Wm5hVXNnQWkvWTlZUkY3NVdpdmFkcTA2ZUl5Q0s2L3FwQjhnWXpXblpsYW84VkNQVGtzSDEyc05sakpXYmVIYVBOTEhFM2VpRUFVWWhHVnB6WmlmcWkxMkUxaldPamVSaDFoYzEwTjMwUVNCZ3YzaGxyZUcyc0Z3bnFaQzlWajkxcW9DU21hS3JpOEpOMFh1d3VmQk0xdHVNd2lRdllhQnFoK2Y2VnAyUEtlek0rb01mMGs4SERxTm1haS94MFhtQitOekNEenhnVGpadzUzcWt0TnZNY3QxL3dSMXN0L1FwRXpNZ3gvUW1MNFJwOFlRdCttR2pBakQ4ZkYrY3FlVEM5cm50UVcyeWthdEppWWhmUG1McDhSU2lKZ3c3czBzRzRKNHlqdnl4aDFpZnpOcDI2WVk0V1ZnK2ZsTHJ5UFAzWXMvUWMzRzdWeDRNN3RNbHFWMmFqU3NLVGVja2xvWHN5UkMrVkNHYTlrV2lCRFFLMldVV1U1Um5pZ1ZlOU1sY1Y5ZEp2VTlZdlo1VC84ZStpVVFWd3h3R09xajZIZXN6WGxMOEJuT1NQUU1JOVIxUUFBQUFBU1VWT1JLNUNZSUk9XCIsIGRMID0gXCJkYXRhOmltYWdlL3BuZztiYXNlNjQsaVZCT1J3MEtHZ29BQUFBTlNVaEVVZ0FBQUJnQUFBQVlDQVlBQUFEZ2R6MzRBQUFBQ1hCSVdYTUFBQXNUQUFBTEV3RUFtcHdZQUFBQUFYTlNSMElBcnM0YzZRQUFBQVJuUVUxQkFBQ3hqd3Y4WVFVQUFBVU9TVVJCVkhnQnBWWlpiRlJWR1A3dU1wM3AzSm5wZExwT1oyaUxJRlRLSUl0bERaSlNxQkdqOHVDVE1RRmpJUHBrTlR3WVhpZ3YrZ0FKYUh6ekFUVEdCMFcydUtKSVdkcWtBVzNURnFXbHRkdDBtWGIyTyt1ZDVYck82YjIxVmt0cStKTS81OXg3enZtKzgvLzNYeTd3Q0ZGVjFVNzBCTkViUklmVnZ5V2t2V3NoV292L0svU1FCckJjT2JjVUVmY2Y0RytUb1pXb25UNm5VaWtrazBrMjV2TjV0a2NVUlJRVUZLQ3dzQkFtazBrL0dpWjZrdU80czBzU1VIZG80RWluMDRoRUlzaG1zd3lRNTNtbVZDZ1IyWXRNSnNPZVMwdExHYUVtcllUazVMOEl0SnN6ZGdvc3l6SzdIUVVsQnpBMU9RRWwrQjNzRGhmc3JoY1lBVlZLcGlnS0pFbENVVkdSRHZlT2JnbXYrMXkvZVdqaUdzSXpmY3g4L2RaVVpmODkxQlQzdzU3L0Zoa0N1SEROYURSaWJMZ0xpZWx2ZElJVCtqZmhOSUp6WkRpY2pkL0gySzM5Y0ZaN0VFalV3T284QU02Mmw1M2c4MzZZL2NmWS9JRjhHQ3RXTnpJTFFxTVhrSXZmaGQwd2dQRHNBOWc4WDZIVXRaTnVheU5XTkhJYTB6QTcrTU0yek02TVlsdkRSa1RqZVFqRXZvN0pvM0RXYnNITTcyZGdsZUlJUlBMWVZGZUJtT1ZOK0h5RDJHdzlCWU5JZ2tFQnByMjk0S1R0cUd1NnFGdFNUSlp3a002VXBCK1JoQkVyS2dWMGRrMWo3Uk5XaUlYbGFPOGV4S1ZQQmJLamNmNmpxV3pXaGFaMUFheHVKbWVWR05TY0FxOHZCNHREUmlvUmdNbGNRamUxVUlLWDZXd3FtRWVnNGwxVVczK0ZGUHNTbkNyQXhJMmgwbUpESXJWcURwV2o3aVNERmhyR1hDL01vaDh5c1NxYnl5RnBPb2k2aG1OSVowUm93YnVIRW15a016bmx4NFdSSDlGVHRCcXZiZmdJdk84dDNMN0g0Vm1QRWU2aFBvS3RJaHFMTVNDZWtDamt1WGF6Q2Q0cEdYWkxHbVBpS2V6YTJZVGU0UkRXbXpPNmkyb3BBVXVvRXFrWW9pRGlkczhkN0hseUY5ejI0Nmh5ZllGa2xvTXJHMldPa2ZJSkZFcG1xQ1EzNUd3R05SVUZDTTArQlpQaklOcUd0cUR0ZWhpU2tVT3BMVWx5WTQ2QTE2a01vZ0U3YXJmQlZDN2g1ei9hWUhXOUF2ZjJTM0M1VnlLUS9wUDRPUGNQTlJXbE1SNWNnWFdObjZHd3ZCazNoemhZU0RKM1Bvd2hHRk4wV0pZSEkyeEM0amtYeUNBd05vdU9rVTVjNzIxRGNQb3UvQU5uVUxwL0RISk14a0tSVjQxREdmOEEvc25mWUxOYTBMd3lDbmRsQ1JwcU9IaFdPdlJ0NFhrQ211b3ZOaHhBVmJVTE1YTUN2M2h2WVh6Z0o1REx3cGZ4UUhxK0Q0S1p1RXBJd3V2dVJzSzRoa1FjajNTb0hkNVFGcDM5UVFKaXhxSEdLbFphTk9tbUJEZDFBb0VYY0dUcklWaEhrMmhRcnBLQ05JQ0s5YTF3V3pxUVY3MjQ3N2dGWDkwTjJDb0c0YWxzUjFuOSs4akUrekY0K3loMjF3dG9XbXVZaXk2UzJacGNvUVJuZFFLRHdZQ24zUjY4dnU0bFZEbEVPSGVjSm41ZWhiTGlMS3FkQXZadEY3REduY0J1RWoxbERoNEcyMWJJWlNjeEVUTmlnMjJhWlRaMTlZTENkNWtuNlV6TGJCdDlNcHZOYk5PK0EyL0F1ZjVyWE95NWlyWDFEZkFaVHlOSVlsMGsrVlpSSXFDN1gwQ2srR1BNS0ZVNDhua2ExMExIc1BHWlpuYldaclBwNE9jSjlvaGVpMnBaYXBLUVRTUVNyUGJyVlZRWDc4UHZZWWg4Z2xETURHZjllNUNLNjNEOFNocVg3d3podVMxVitQQlZCM01OdlNUbWVzT21lUUtOcElVTVoraWNrdEIrb0JQb1l6amtZMVhXYUpxNzVVdzRoZUhKTURLOENYczNsTE0xVGViTDllS0cwMG9HMm5SSTlPUVFJNWxMNi8xQ1N4YnRaeEZEZ1JkRUR1MXFyVmhLdEVZZTBwc3Q2VnBxUEI1WG85R29HZzZIbVpLR3hON1J0VVUvQWkxWWptaE4vN3k2ZkxtaFBzYmZSWXNHRUZvQU9LeTlheVZxZnhUR1h5M0M1amRZcGs5QkFBQUFBRWxGVGtTdVFtQ0NcIiwgYkwgPSBcImRhdGE6aW1hZ2UvcG5nO2Jhc2U2NCxpVkJPUncwS0dnb0FBQUFOU1VoRVVnQUFBQmdBQUFBWUNBWUFBQURnZHozNEFBQUFDWEJJV1hNQUFBc1RBQUFMRXdFQW1wd1lBQUFBQVhOU1IwSUFyczRjNlFBQUFBUm5RVTFCQUFDeGp3djhZUVVBQUFQMlNVUkJWSGdCcFZaZmFKdFZGUC9kTDBsZGs0RHBuTWFPRFNPenJkUSt0Qk5HUjJHcm9FOFNNL1hOaHpJZkpwRUs2M3dSbjVKTUtjZ2NqaUxJOEtIRGYvaFFxTkczSVN5dGpEMG8ybzVDMWRRbXJTTzFPT3hIa3paL3YrOTZ6djIrcjAxTlVpbzd5Y245ZDg3NW5YUHVQZmNHMklla2xBSGlHUEV0NG96Y3BRMTdib3c0aFA5THJHUWJPQ2hOdGdJU1RZeGZwQ1pPSE9CeEtwVkNNcGxVcmE3clNpWVVDcUcvdngrUlNBVER3OE9PS2k4bWhCRFhXZ0p3T216anl1RDQrRGl5MlN5Q3dTQTZPanJnOS91VlhLRlF3TmJXRnBhWGw5VjRlbnBhQWRvVUo1QkVBNER0dVVKUEpCS1ltSmpBNE9BZ1BCNFByNEdVOXJSS21mb010TEN3Z0dnMGlsZ3M1cGk3NUVRaW5KeFQ4d3VuWlQzOUNiNloraFRIUTMxa0FCYXpES3krNVkzVDBNZTBocmsvN3lMOGNoVEJyamVkZEEwUVNOWUJtS1RtdkZIOEhWdnAxK0QyZHNIbDlrRmo0eG9EOEVmdXhpdjVLM1lBVEZQQ3JCVlEzZjREM2hQWDRmWS9xN0pNQU04SjIvc016K1FYd3hER1gvRDR1dUVpZHpVaGQwT3dRZVNlVGR1TndpQ1EybllhYUQ4Skg0SFkxT0dtbjNQY3ErVitOSEU3YldvdXN1Yk5DYlFkZ2hSV3p1MU5nbnk4RTlndUFwczY5cHdUM3B0YVJZcDhBVFZ6aHZpTzI5MTFtaGZIR0NEQ3ZjcEhYMnZteDh1YXhyWWV1Z2Z6OEdITE9Dc2ZQUXJYMVd2NDdPYVhlUFhGMStFMVNqRGVmUWY0WjhQYWNCSXo2QWlieGFLS3NQTFdGTnhYRk1CWkJsRG55NXlmaDJidnVpaVhnZnYzSWR2YkFZSjBmL0FocWdNRFdQL3FDNVNmZUFiK2s0OUErSHlvdm5KT09RQXlMS3BWcGM4QXhnK3pUbmdobmxNRlphNnVXTWFkSlZMQTVpYUUxd3N4TklTbHBTWDg5UGM2aXVVaU50ZldJQVpQUTdBRCtieVNkWFRWaWROM1VoaHlPNzFUcFNxeXhQK2xrQ253SzdXOXZiM29lN29QRjkrNGdFa0N4dXh0SE5mejBJdVZScDF5VGVrd01VQ1c1OXFwVXNzckt3M0N2MUVsYzFYMzlQU2d1N3NiZ1VBQWF5c1ozSnlhd3JxdW94bDEwbFZpazY3WkFQVjNTZ09Oakl4Z2NYRlJnUXpRWHF5Rkl4Z2RIVzBwWDNkdHpIRWR4S2tUeTZUdllPNzc4elZOczNNcEdoV1BQUFlvMnRvOHlOM0xOYXp4WHBzMkQ0VS8xNExIVHJIemx4aUFOM21EaGFxclVZalN6M1J3UkZPQS9jZ0NvSXJXT3RGMkl1bE1QNm5SV2VkRXBuamtPbkpCSFRNcHNiZGlEd2pBN0RsMnhabTZVWDhYaFdCZmRzYnFkUmpKcTFaTkhEUUs5cDRhTGZ3MlhLRW96K3hjZG5VZXFPZFBVZVc5eTdKNHlDTkxOcGYzWVY1bjJjcjdsK3RmdUxFV1ljcTRJMkhNemNsaXoxTU5RS1U2NXJYeUM4OUxZeVpWYnp4ZWI3UFprOG5vL0hKWUZUNDdBK083YnlIbjcwS3VaaTJoaHdQUXpweUJLL3dTdFdjZDFhWlBacXRJK05HL0lROU90K1FEL0xzWXN3MXMxQm5NMkhOeCs1aTNwSDhCL2kyWitDSE9sczRBQUFBQVNVVk9SSzVDWUlJPVwiLCBNTCA9IFwiZGF0YTppbWFnZS9wbmc7YmFzZTY0LGlWQk9SdzBLR2dvQUFBQU5TVWhFVWdBQUFCZ0FBQUFZQ0FZQUFBRGdkejM0QUFBQUNYQklXWE1BQUFzVEFBQUxFd0VBbXB3WUFBQUFBWE5TUjBJQXJzNGM2UUFBQUFSblFVMUJBQUN4and2OFlRVUFBQU15U1VSQlZIZ0JyVmJQVDFOQkVQNTJXMmhwRExZUVlnU2FRSUtKQmc4WVl3L0VoSmh3TVBHZy80QW1Ib3dYRFRYeHJPVU9DU2R2aHY0REhyd2dCeU53NGNCRllpU1lTSVJRTUNaQ1c0bjlBZTE3Njh4MnQrK1JVa0xWYWFlN2I5N005ODNPN0h0YjRCUlJTa1ZKWDVJdWtHNHFUM0xHbGlRZFFLdkNRUWJnckRMYmpFaWNBRDVCUTRvMHl0ZkxYNHVZWHoyZ3NZQmZKVmY3eEx2YmNMVXZqTnNqblJpOUZMR2hlZEpKSWNSTVV3SXVod0hYd0RQemU5akpWdERUR1VRc0VrUWtKTFZmc2V6aTk1R0Q3YjBqaWdIU2orTVk3ZzlabUJTUlREWVFtTXcxKzlUY1Q3eGV6T0g2WUFSdFFRbEZidnhSeDlmS1FTZ1IwZnB1R1E5dVJ2SDhUbys5K2N5dVJOaWEwL0NSeXpJMXQ0ZjBVaDdEOFE2Nnk3ZWxHV3ZlUXZ0YkF2NjZFR1JZM1M3aTBWaWRoTXQxalVpMnBHSGswa1EvNzVReFBiZVBDOUYybEtvQ3BZcWtFU2hYUUhPaHRXaEdyZVJUTnJhTEZEUDlMcXRMYS9vM3EzTXkyVy95UmVMRk4yVHlEb2I3cUhGUzZwU0Z6ZDVVVTVtWk1pdW8vZkRjd1ZxbWpOR2hFTjVNeEcycFlrSDZ1V2VibXNrNUJCeEFycVFRYnZmVjJqY3lvVkplTjJ6SkRxdlFTUzF2bERXVzJWMUpKcmpMcy9sUEJmS1dXdmNMQ2pFZHJCb3lSME9ybGJibmRXVTRYbWtzUXpER0JDTThXOXM5MU9DQ25JNm90dG1DaTNDYmhLU0FlbFByNWZMUktlNlBpMnFWYjlPT1V5NnRvbVQ1QjRLbUljaGtIVytia0ZZY1ZoY0J1NGswdmpxV09ZTzd5dXdxWVhrRkRvcHVuWUNicktNT04yNUJxdThFS0RTZ2FIakdUeGRsaUJ4SHdaRzlDQTh0d0JRTlczb1dQTzk1dHdqdWorSEVaSHUvdGVickJJRklBdjlMUlBpS25hNHl3UkxQNUxseHowT2hkVkhlRVBTdzNuSVB1TWs1dnFydTNJY29yOUIyRm4vVkE1YzY3Z2I2MERiNHdab0hKVDA0L041WTVLdEExOU42czFwZGhJMEo5cjZ5cHJUL1hmU1FOQytvRDdLN1J0SUtRODFmUVZLQ0luU1pUZnBzNElrbVlLYTZvZXNKQk9sWlYyTDlRT0FjYTJUU1lEWWNPQ25VM3F6MFlLekQvVUVCMVYzdmJTMThoSlk4bklDSVVWSWRDVDk0eWw2Y2RHUW1EWWwrd2xWcGhZNnc5MFQ0QllySjlESTdnWTRiUUdUY0QzemlrZGxrMmZyUVQ2dXp5NEw2aDM4WFNRT1E4d0Z1R2x2S2JQT204Z2NKUmdqZHJDMzEyUUFBQUFCSlJVNUVya0pnZ2c9PVwiLCBBTCA9IFwiZGF0YTppbWFnZS9wbmc7YmFzZTY0LGlWQk9SdzBLR2dvQUFBQU5TVWhFVWdBQUFCZ0FBQUFZQ0FZQUFBRGdkejM0QUFBQUNYQklXWE1BQUFzVEFBQUxFd0VBbXB3WUFBQUFBWE5TUjBJQXJzNGM2UUFBQUFSblFVMUJBQUN4and2OFlRVUFBQU1DU1VSQlZIZ0JyVlpMVHhOUkZQN21kaVFVQXc0YWtHaE1odWdDTkZHMmdJbmRtUkJOV2JMdytRdXM3b3lMRmxjU0VuSGp3Z2RpL0FIR2JraGNGUlBBSlZWWnNERTBvTVRFWUNGQ08rMDhydWZlM2hrR2JKRUtYM0p5WCtkKzM3bm4zTTR0c0FzNDV3WlpraXhEdHNpM2tGZHpDVElUOVVKc1VnUjd4VVF0SWEwSytSMXFVbVNHR0dkL2ZzVHN5bnZaYnBUWHBVL0g0Vk00WTV4RDM0bkw2R25yOWJldWtRMXJtdmFrcG9CSWh5S0hNek9OQjk1VC9DaDhRMnRqRzVvYkRFVDFKdWxYZEFxd25FMnNiQ3lKWFhqWU80N1RKS2lRSXBIaHZ3UlU1RkxkR2gxQitlVnpQSnE0aUVOTXIzanRQQ3V2bU9VVXNiaStnQ3VkMTNEajdEMS85YTUvRXQzUHVSKzVJTGRmamFQaC9BVjRtZzJMbDRsYnF4QnFJZkxLUG9BQm5VWVgzbjRkbDNOS0pFbHI3MGdreDlRV2tSckRuZitDTWdub0hjZkJpa1dVdkNMSzNFSkpXbVVzVGZScFRxeVZJZFlLYUd2cXdKdUZ4L2hFdFZMMW14QWRwcUsvSlhONzg3bzhVb1JDWlFYS001RlprclN3UmE3TThqYlZla0VLUm5RZEd0T2tpRUpNWEhQQk55aEc3dXcwc0x3a1RneVd6NE5GRzlIVjB1ZHFXcENSb0dnYzIxTkZ1WUxqdWZ4WXBCMmVDM3ovbmROUE5vdTRrUkFDY1hsckppY3Bjb3FlR05tdlZXaXRyYmpkZVQ4aVNXbE81RHZjQmpWUXJlZDVjRjBYanVNZzZrWDlFQzRKZ1I3cFJQbG5maDFMSldpcnEwSFVZYUp3dXhOQ21ERUcyN2I5S1ZOWEJhSDBMTXZiRXR4SWNxcEZWSXZjdDlBK2t3VU8wcW5LVDdzTytBSmhDSUdjN0xVY3dVRkIxM1cvdXhZSVJQcjdjVkFJQ1dSRjd3TlpqQTBNd0gzeGJKdmowTkNRZ3pvaDhqODJOc2E2dTd0RjhHbi9teTloRDE3bFR2dFI3cEZ4TWdSZm5MMmJhWnJoejdqcHEyYkV5SnVaNWpZUnUwcmtmd1RtNXVhQ055SjhMRk85VXR3ZEhRbE9VUzk1TXBrTXYzZ21kdVF1NGE4S0ViZE9nUkM1UUFJMUNwUUtYT1kveTN6K2l6Z1dpL0ZNSmhNbVQ0VTVxejJaUWowSjlRdWZtcHBDT3AxR05wdEZMcGVUUG9aaGdJZ1JqOGRscTFEMXlheDFFbEdUMTN6dnlQQjkvTHRJS0lKOGlIQlJ6WW1VR3J0eC9BR0tScXQ0ajR5TkF3QUFBQUJKUlU1RXJrSmdnZz09XCIsIHVMID0gXCJkYXRhOmltYWdlL3BuZztiYXNlNjQsaVZCT1J3MEtHZ29BQUFBTlNVaEVVZ0FBQUJnQUFBQVlDQVlBQUFEZ2R6MzRBQUFBQ1hCSVdYTUFBQXNUQUFBTEV3RUFtcHdZQUFBQUFYTlNSMElBcnM0YzZRQUFBQVJuUVUxQkFBQ3hqd3Y4WVFVQUFBUi9TVVJCVkhnQnJWWjlURlZsR1ArOTU5eDd1WURBUlJLdmZkeHNVMUN6YklJNDRBOXd0UndzdyttV3pXelNadjJScTFndFY4NEpqQzFvT1lYY3FoVUl5dGJhK3BnTTI2SkljQ1ZKeVhSVDNFb1NDTG94Y3J0ODNlOXp6dHZ6dnZjY3ZJSWFMWi90ZDg3NytYcyszL01lNEE3Q09YY1JLZ2xkaEVGK1Ezem1XQVZoT2Y2cmlFMG13VUtsK1hhSzJDM0lYNk5YRmNFbCttZjZ2QWlGZ3NqNytTU1UxaE94UmJ2TGNTNzNhVGlkaVNqS3VkZmFPa0dvWm96VngvUFo1cEJYbXVTU3VPNVlINGJIWnZEeTltemtMM1hEa1pjbmJZb3VTc0dRZHhxSFduOENwNUd2RHBYZzBhd01ZZEFSNGtnakpkVVdwM0lMeTFIejhTOTRabDhIN0hZVnF4NWFqTlFVSjJ5S0FpVVFrTEF4aGtTbmcwaVhZS1VuSGFXdm5rSnQwM21McWtyazVpWUZadndrK2N6NE9Fcno3OEhtQWc4aUdoQUlHZEIwV3FocFVJUEJHS2l0NlJ4K211UGswUk1iSDhDNkZjbVk4WG90M2tvcko1WUhJalF1L2ZJbDZFOCtqcFcvWDhUUk56ZGcyeVlQQW1GZGtna0ZqTWhaTUFDbVJhWFNRTmhBU2NGOWFIZ2pseGV5Y2VpbG02SDEvQWd6ZjgweUI2YW1jdEdaSEx3R0I3MGREVWZBK3k5ajEvTzd5Ym9DZnZGWEgyTVRHaFFpNXhSMEZvM2kvcVZKL0hERmVyWW0wd2FsOFJPbXRMY2hRcE16d1ZDc09vQmlVZWJDZzYyaU4reWRSSFJqUG85KzlqbjBMV1ZRUmtmZ09OYUlaV3FZbFJSUXBVU2laSEpBZW9GSUJKdHkzT3poSlNyc1J4dGd1L29iOUczYkVXazdCZCtLTmJqdTgxdWhxaEJWVkNaYUdZNG93dE4rcGlRbFFkdnhMTGlxZ3FvaHRteHFDc3cvUXdxQ0ltUFU5c3N4SWRyZVYwUU9ZZWc2VkVLcUhvTERTS0NaWkRGZHhNU3BGREVMYmQwQzFuTVdLcEVLdHhTN0hWVG8xRkFnYTFFK1dPemtjSTY0MmdZb0xBYmx4UkFLcWMvWFBvTEUwMmZFN0pETlRBZ3dNa0o3bWR3djdhWTRTNUFuc0R4aDdHWmlBY09RYjJ1ZlFrOTljdEphdFh6Mm9ERnovN3lqVFc0dlZGZ2NMQkhSR0pLdDFEVGNEWkZlZUR4V2QwTGtvSXNheFFHZkQxRktwQ3BPTEp0ckIyRC82QU1KSWRyT1hZanNlMnNldVVIaEVyQXRXb1NrOUhReDFDMUNKTEpSSEdRSkNLbFVCVVlZdHVZbXFMM253QmRuSVBKT0hYaGFHbmhDd2l5UmFQUFVWTEF3VmN5Qi9XQ2pvekN5c2hIZTh4SU10eHZYZ3lwTUg5cEVpT1RYTDhPVmhQVGhBU1NXUFFYNysvWGdXVm1JMUw2TGdXbkYrUHFzbDgrMTl0T09ZVndkanhxUnR3L0FXTFVhdHRiamNPN2NBZHZwNytGWmxtSXRPMG5SWU9JejJ5MTZpWVlPVGk0R20xb1FxcXBCelpjamZFUDV0OHFsZ1lsNXVmOWp6SS9jOGc2bHRuME0wL3NQOGxCanN5ems1T3hzYTBrTGNROVpWZlFDNFFJcktIUVozM3lIQzMrRytONFhPOUUvT0RtUGVLN1VuYmhDM2d5eUwyb0wrZW9mZXBnOVdSNHdlVGVJaHZ6WUNVM1dRRUptSm5xdlRLSC9tbytaSit4ZmhFdHYybnYrWnM0WXVaQnFrL1BHZldEZVJGTEo2OCt0WmVkYnkvQ2dPMWtTOERoRmZQYk41Yk5vdlJ1ZEg1Ymc0SjdINHNucmIyOVA3Q0wzV1pkdGQ5OWZ2TE4zaElkYmozTTlaeDAzQ09IRDc4a3hNVGZuUjZBQ0N4SHowbS9oQzVjdS9qLytMaXBNQWw4YzRhQTVKcTVIMTUwNC9nSGR1NnBhY0tCT3hBQUFBQUJKUlU1RXJrSmdnZz09XCIsIHpMID0gXCJkYXRhOmltYWdlL3BuZztiYXNlNjQsaVZCT1J3MEtHZ29BQUFBTlNVaEVVZ0FBQUJnQUFBQVlDQVlBQUFEZ2R6MzRBQUFBQ1hCSVdYTUFBQXNUQUFBTEV3RUFtcHdZQUFBQUFYTlNSMElBcnM0YzZRQUFBQVJuUVUxQkFBQ3hqd3Y4WVFVQUFBTTFTVVJCVkhnQnJWWkxUeFJCRVA2NlozYkNDcmdFSC9nNGlLQ0lNUkpKUFBpNEVEMTQ4YUF4OFdBZzBjUVliNEtKWnhaL0FjYXJDUVNPUmhOdWVnSXZRRHpJdzJnTWlVSUVVUkRjQlJZV21Oa1pxM3E3WVFLc1daQktLdFZkM2ZWOTFkVzEwd3Y4UTRJZ0tDRnRKdTBtSFEzV0phRjlqYVRsMks1d2tBYklWOXB5RVlrdHdCK1JpWk9XOEh6bzF5b0dKNWZSTjc2S3hWVWZBZmtPRlZtb0xJM2c4ckVDMUJ4eVRHaVN0RVVJMFpxVGdNdWh3UlZ3MzFnS0g2Y3pPTDNmUXRLVnFJaEpUS1NnaU5KdWdKOExIc2ZnNmRWU1ZKVGFCaVpPSkMyYkNIVG1pcjFqWUFGZFg5S29QZXpBQ3lRS2JJSGxqRUJFQXE2L0ZzRkJXQ2JIYU1MRjlhb0NOTlFXbThVbWN4SmhhazVtZ012U01aakMrKzlwSElrNWlOZ1NxNzZBTFFWU3JrQlpJVEM5YUVpeUJId0N0aU16SzdoWkhTV1NJbE91V2lJWms1cVJTMVB5OVkrSDE1K1dBQ3VDbVdXSkpVOWlsdXc4bFdlUnhqOVNXYnZpTXpIWlFGdEs0a0JSQkozRFN4aW0wdXI3YStPQjFObmY1Y216M2lSS29oSmxkSWw3SEVubEVTaDB1RFFDSG1YdFdNQktCZ1RLVnBDdWsxbVdCU0V0ZEE0dG1UTFZjWnZ6emR6ZzJmVElHS3JmdlBLa0VJaVZ4aENKUktpQUc1cU1waUpReGNHRzVrREdjMUV6T3djLzhQSDcxQjNyUVBrUkRtNFUzTy9NTmpjM2gzUTZEZHUyVlRhc2E3aEV4Q0JoYTRDTjlYMGZtVXdHbnVjaEdvMGlGb3Z4VWcvZndUa2U4WUtVVXFrQkNtZTQwWWJYdzRsd3ZPdTZ4bFZ1Nnd0UkdmRGl4cVBuS3d4dU5CUlhMc01id25ZbllnakN3Z1JqYXFCTHN4dkM5NmdsdVViZ09BNTJTMElFZ3p4NlIxcTNrcGowWDdZKzhLWElkdWQyejhKVjU5TDdwTGNlUHJlTGk4K3l1NHZibEM4NXdiTW5mYmN4bk9qUHR2OE9HSmlnck9Bb09xNzBHZTl4K2wwSi9tNzA4S3locWluN2ZjSDJKZEJIYUQ3L3dyamF3OStpZTZUSm1uMFgwWEN5U1o4WCtZdmVXMCt4bFh2UDhGQzlEVHhRQk14a0hQVlZqeFZKa0ErSjNzTjdHYnlCWXJXMGFNeE5EMDRjMlM4cnZzMS9SdnpEZlV5bEozSmVCd09yVTU5b0luc2hEQjQzazYyZXpFWk5vbjdodzdQOTZKMStxd2luMHVOcVQ2RWRVNENYRGw0TEEyLzVaT2JJVEQzNjdVSCswaDM4eDcrTFJnMlFDQUdPYWw5Y3QzbE8rUXR1TWhPMThUVDg5QUFBQUFCSlJVNUVya0pnZ2c9PVwiLCBoTCA9IFwiZGF0YTppbWFnZS9wbmc7YmFzZTY0LGlWQk9SdzBLR2dvQUFBQU5TVWhFVWdBQUFCZ0FBQUFZQ0FZQUFBRGdkejM0QUFBQUNYQklXWE1BQUFzVEFBQUxFd0VBbXB3WUFBQUFBWE5TUjBJQXJzNGM2UUFBQUFSblFVMUJBQUN4and2OFlRVUFBQU90U1VSQlZIZ0JwVmEvYnlORkZQNW1mM2dkMjBuc0pBWVpkQmZUbkk1RHA5d0I3WWtnL2dDUTZKRW9xREUxaFoyR2hnSWFLb283VVZIQ0h3QkpoNFFFRjBydUNISEJSYllTWXEvdDNheXozaDNlRzgvNE5nWnlqdTVaYjJkbVorYjczcStkTVhDSlNDbkxwRTNTWGRKRCtWUjYrbDJEdEk2ckNtL1NBSXZLL1lXSmFPSEgya0lsY2JRcmcxNUQrcDA3c245VWwwK2VITWhPcHlOUFQwL2wyZG1ablBPcU1ZOG41c0NiMUxTNFB4bnZJUnArQmpscHc3SmZoTEFyc0VRSm9md0NhV3J6V3NSeHJQWnRiR3dnbDhzWm1KWVFZc2NNckt6bEJqd2E3Q0E0Zlo4QVhiajVXM0RjTlRpMkJjc0tTQzNZdGczSGNaRFA1eFh3eWNrSmZOK2ZFV1E5RVNibTFEd2tMVE40SEg0Rk43Y0ZRZlNDVmxoaXVwS2JRSDVMVDFkNXdKcW1xV3JINHpHS3hTSldWMWNac2s5Nmx6eHBHdzg0Tk9VazNzZjVxRVVXMThqU0VMWlc3bHNpSUxKUWtkRkdwY1liYmwzWHhYQTRWRVNNUlhwZmVhQ3RQK1RCcVBzS1dkbUc2MjNSSm1ndzR5ZUJRbUtVL2tEUFdieHhIbzFvVEdSMlRvRno2S3JWcXBtdU9QUjRqM3ZKK1I3RnFnM2I0Y1Q4VGVCTENsek15a0JxSm9tcytOMWZNRWxTVksvZlU5NXc0cG5JOHp5ZWJqREJ1NnBxb3U4cEhGQnFpV09DV3RjSnVvQ240czBUa3ppQ2YvSVlmLzMrSTRXSHhvbUR3dG90bGZnb2lnekJXNXlETzJyalpGK0ZoUk1MTVNhTVl3NGFhYWcxME8yVTVNL0h2OEkvL2dNdjMzZ0hhN1Uza1BkYytBZmZxSHlZOGlXcE96b2h0T3R3V2pVbTVLQkZraGZheUZUenRIcm9WMXpkeERpcUlveU9FQjM5REsrOENXKzVycEt2dk13UUFIZ0tMQVRtSk5GNlVXcTFHbGthNGJldlA4V0FnbkR2b3c5VURwSWt5UktvS3VJS3FvOTdkOG5PZlpXRGk4bTlLSU8wUy9aN2VQVFQ1MGlpWTZ5RXJ5TXV2WVN1TzBacHVZSWJON2NVVWFWUzRlVjk5cjNOUFR1M2phdElycmlKWmU5TkZLKy9oZ0o5WE91VEhGNm9ycXM1TGxVdCsreEJpenJOTk41RE1ueWIyQmZ6d0VoNDhJaEtmSUxTelZkVmFEaEVLeXNyNW16NmhEMzRrbnVXdXczaGJFTktYRWxrU0RWZkxFMzd0Sm1yS0hQd2ZXZFIxdm5jMk9PUnZkUlVCRVlYa2VMdDIzQ3ZYWnNsbHEzWDhpQjdGbjFJMmhma2haVnZYdGtMSS95UjZmaXowZXJJVmdUTU5IdXgxSUpna3ZUWm5wZ1RsWlhCQzRXQ21kclJtUC9hMEpyZFQ1T0hNaG5VWmRJbkxuK3FjZ0RaNzNWa3I5ZFR5cmZhWURDUTlPVm1iN1lXTGhOOWtjK3V6RFRlbFduWWtPbG9XeEg2L2E2a3kwVUdRVEFQL0o5WDV2K1I4S1gvUUM0dXUvSTUvbDAwTkVBdkEzaW8zM0ZJeTVkaC9BTXRVNk1KMVR5ekpRQUFBQUJKUlU1RXJrSmdnZz09XCIsIE9MID0gXCJkYXRhOmltYWdlL3BuZztiYXNlNjQsaVZCT1J3MEtHZ29BQUFBTlNVaEVVZ0FBQUJnQUFBQVlDQVlBQUFEZ2R6MzRBQUFBQ1hCSVdYTUFBQXNUQUFBTEV3RUFtcHdZQUFBQUFYTlNSMElBcnM0YzZRQUFBQVJuUVUxQkFBQ3hqd3Y4WVFVQUFBUE1TVVJCVkhnQnBWWk5iRlJWRlA3dW5mZG1PbTlxTzBYYVlReTFSV1pockZFVWttSTE0a0pOSkZIUkVEZWFHQk8yNkRUUnNIUllJZ2tZV2JoUm9Za3JRa3pZWU9JR01WWTJFbjVMSUNFcE5DV2xvYVhUZHY3Nlp0NjduSFBmZmE4em9ZVTJuT2Iwblh2dk9kOTN6cm4zdlR2QVkwUXBsU2I5bnZRczZiaGFsamt6bHlmdHgzcUZnd3pBV3VYNGFrUmlCZkJ2NkZFZ1RmTzRzWGdlYnZFdk5Fcm5vYng1N1NQanZZZ2xCeEJQdncvcm1UZkMwQ0xwUVNIRWo2c1NjRHNNdUFhdTNUc0c1VTVDMnQwUVZob3k1bWcvM3l0RCtXWDR0UW1LQVZKYmYwSE1HUWhoQ2tSeThCRUNrN2xtcjAwZGhYdi9OMWp0cjBOS1d6dUoxbFRvVDJodzM2dWdVYm1KK01ZdjBKWWREaDJHdzBwRTJITjZYT1MyTUhoOVpnUjI2aVZJUWhXQ29CaGRMR2VqZ2lCTm9FbEk2NlhMc0x2M2hTVGNydGNvN3JZME1keWF0RmNkZ3p0OUJGWWlBNGthRVZSSmE0R05DaEZVaWF5cTdXRGQrTkM4MVpaRm5XSzV0V2IvanVzS1RQYmpQQ2hkSDRKc1RNTGk3SWxhNnF4TjZ1YWhkUDRpcXNBVUE4K25mU3RmQjV5ZGNISW53MVoxV2ZSdkQxdFRVMlArdVFzZGZrd09JT24wQ051T0c5QUl1YlZIUXVtbk1tUU5yNjRxWlFIUFc4Q2dmY1BhMHZjaWUrYVo0R08yRHArcXlHT25QcGNRRW9tNGpRMGRDZDE3em82MzRMMGRQYmc1VVVKYlhLSTduY0RvMWRtd0VNMVlYSFJSWFhMSjlMRy91SUFqKzNVcXUzZ1B0ckYxNWRZRGhMMVlxdnVZbVhkUnFqWXd2RGVIdm95RDJma2xIZkdBZ09aS0x2cXpEdko3dDZKY3EydmZxdXRGOGY5Y25BNWIxTTk3b0hQSWZmWUg3a3hYd1JWd3lzLzNwTWhVK2lRdFZqek1sK3RvbGc3SDB0Vll0Rmt5UnBzNFZRN0tvUXI2TWtuY092bXA5cE5SaEQ2S1laTUZzczhtc0h0d0V3VldLTU1sMUJ0K2k4NHV1TGc3VThPN083cVJicmZSS3NzdkRSUGNacU96UFI0dDVqYW5xSjgrZmo0OWppZkpyMmZ1NklQd3duT3BLTDQvMng0dUZ5T0NYZHN5Wms1aFUxY2JNbDBKckZWU3lSZzJiMHhHNDFkeVhhRjVpVS9ST2RKM3ZoNTBzUDJuRVk4WjVkMWc5VXVzVVNhRHh6NVNlaDN3OXM2akVrR2ZUdk1tODFzM3h3Nk5UejZDK0c4VTRlcDZSQmx3djdjWDl2K1h3dWt0ZEVnRWZ6Zis1bEhzdXdQYU1kVDFFckJhSTcrSFV5ZWF2MFZma1JiRjBKdVFobVM5NEN6aTJ3TVFBeSt6cWUrR1ZxZmcrdFBpSFQ2a3ZKNE55amVxSHFPOHpyN2VENGVhYjdqOHlwa29WWWhjcmwxUjN2WlhIeUh5bTFRRDcvbFErYVAvTm9NWG1qRlh1aktaWFgrKzlaZzJIWCtlQWNhdVFrMU1CQUdkbmNEUVc4QUh1OEZ0TmJMaWxibGFKWHpwbjFCcmw3UHFLWDVkNUEzQVhCUGd1SmtybUdPK3Fqd0VRMlJ3VkZPREprc0FBQUFBU1VWT1JLNUNZSUk9XCIsIGZMID0gXCJkYXRhOmltYWdlL3BuZztiYXNlNjQsaVZCT1J3MEtHZ29BQUFBTlNVaEVVZ0FBQUJnQUFBQVlDQVlBQUFEZ2R6MzRBQUFBQ1hCSVdYTUFBQXNUQUFBTEV3RUFtcHdZQUFBQUFYTlNSMElBcnM0YzZRQUFBQVJuUVUxQkFBQ3hqd3Y4WVFVQUFBT2VTVVJCVkhnQnBWWmRiMHhkRkg3Mm1abEdXNisyYjk1NmZZU1FTRWhhUVNvaUtoRnVSQk5mdndBMzRvb1NJcTZNeTJvaWRTdW9yOFNGQzE5SlhTSTZyb1NpeEFVcDdRV0pNRk02MnFOenp2YXNmZlkrTTJObWhGak5tdjF4MW5xZXRkZGVlKzhDdnhDdGRUUDFPUFV1ZFVRWEpXdm51cW1MOEtjaVRoYmdkNlcvRnBHcUFuNkFUWnJhTE9OQ1poRGY3d3lZVm8rUEd4dHY0VUlrMnBlanJxc0x5WFhybld1T2VrSXAxVmVUUU5KaHdRM2dWTjhwNkxFeGVLMnRVQzNOOEJvYWpVdVluNERPNXhHT3ZxTVAwSGpwTWhKdHl4MU1taVFuS2doczVJWjlxcmNIL3RrelNIV3NocGRLUVJHRlRqQm94a1ZEbTE4Zy9EYUp3cXVYcU51MUJ6T09ISFZ3QjkxS2xNczVteWVTRmdHZlBuOE9xZloyODFFUnhWT2wwU2dMSC9GSlB5VDU5TkFUcFBidWN5U1NybFVrZWVzSSt0bnNEb2FmSTc5cEExSnRiVWcwem9SblFaVkRtOHVaQm83ZUJKeFV4Vlh3Vy9EMUMxZnlDdlUzYnJsOXVVZUNqY3BHUHlJekV4MHJvY1pHU2RET3FGVk00QktwTmlXaFo3SnpzMkRURkgwUWtvQWtoUmZEUUdjbkdxN2ZkcWxxU2ZKbmgvU0NoNE1Bd1JOU0pka3N2UG9aeGVnZHlwcDZxSDg0Yy9WYm5ESnREVHovdXdtb2tNbWdRQ3k3aW00aDJHNnFabURBR0pqSVAzOWkxYlNVbEJoN3M5a3M4U0ttK1Q3d09qUjlaZmRkNVhMR055SHBJcFlsMkNBRUswMkF6TCtKWGdhK0R6V1ArN1IzRmpBbkVYSFVhU21acUgrYzRIbTd2dkVRcWpjSDljRTN2a0liUHN5NHlCYkpuRGxRWUwwcjgyZlQ4bmlLRmYyUmtYNEJXaWVCSm83MVpLUU5malEzOWhVNFJKdGhQL2J6RE9sNEdVR2NUeW4xc3BQM2dWRWZ6Z1BuR2JubXh1cnBvdlp6YnY4RThDbEVHUWJLTVlUZ3Jlbk5ha0pOZVI5V3prMXEyT05RSm1ZVnZFcXM1R0tDQk11cnBteE9SdTBEcnVMYWROUmZtNnhwcmxqbVZvYUU0TDcwUEY1Y1ZlVi94clNNRzkzSHZCL2pQcHoySTVXSytzK3JNSmRGSll0WU4rV2d5U1puWlZUWXVRMktGUkFmTUpFVkJNL1I3ZDFQYVpwRGk2WDhkcjhRQTVzS1dyQUFxVWREem1veFMxZkp2WEZQUmduZUkrNzR4K2w5R2xTQ2kwZ0JXSENVK0NRdlhuRlRGK1F1Y212Y1E4MnBkWjN3TE1tZmlMUDNEaDkxK1RkdlE3bFI5UHdaQ1hwN2RERDdYeDFhMWI5UStTNjJ3Y21lMGhldXUzb2tXcWRqaytGbk91aFlVVUVVbHFnQjNyRlZoNW5CVXZCMEtXYTFKMVBZNVdVekoxekxzZWVUaVJmUG9VZEhJNGNtbmhtNWE3WjBRZEpxcGVxVFdXc2w4dWhmMEw4dmQvVmYvSGZSYlFHeUpZQWpkaTV0eTd5bS9BQTZwbHMvMkR1a213QUFBQUJKUlU1RXJrSmdnZz09XCIsIGdMID0gXCJkYXRhOmltYWdlL3BuZztiYXNlNjQsaVZCT1J3MEtHZ29BQUFBTlNVaEVVZ0FBQUJnQUFBQVlDQVlBQUFEZ2R6MzRBQUFBQ1hCSVdYTUFBQXNUQUFBTEV3RUFtcHdZQUFBQUFYTlNSMElBcnM0YzZRQUFBQVJuUVUxQkFBQ3hqd3Y4WVFVQUFBTEhTVVJCVkhnQnJWWkJUeE5CRlA1MnU5dFlNR0Y3Z0NNdVZ3b0pCazlpWXZYSUJmK0Jlakdlc0I2TXg1YWphV0k0R3hXalAwQ3JpUjYzSm5wdUU0RndhNFVUSjBDcEpYUjN4L2VHbWUxRVc4U1cxNzYrMloxNTN6ZnZtOW1kQXFlWUVNSWpMNUlINUEzUnRUMTFyMER1NDMrTmt4VEFXVzJ0SDVIVkEvd0JoUks1eDlmaDF5ODQvdlJSUm5Gd0lNZllrNU5JemN3aXZiZ0k1K28xbmJwUHZtSloxbXBmQXBaRGdVdkFvOVduRURzN3NNZkhZV1U5MkNPak1pVnVIVUswV29pM3YxTU9NUHI2RFZLNVdRMVRJcEtWdndqVXpDWDdVZmtKanA4L2d6Ti9CYmJyd2lJVVNvSkVreWtDUXY0QzhhODJ3cTFOcEcvZnhZVkhqelhjUTEySnBUV25VR05aR0x6ejhnWGNtUm5ZUElCUUxNdWNqYVhnVC9pNEhkT0FUcjBHOTk1OVRjSnlYU2FTcGlaWW8zQW5XditHMXMzcmNITTVwRVl2bmhCMFo5RmxVdTJrQ3JxT2Z2NmdTcmFRZWZkZXIwdVZDRzVZYXZZTnZuTTRQd2Q3Wnh0T2ptWlBBSm9BUmdWQ0pLTFN4MUl0SUtLT2NHTWRXRmpBeU5zUGVsRFdvWjliY2xFM054RFI3c0FsSC9IRUJFRGFhMVJMU20vdUI2Ry9KNHZPTW9VZHhOa3NRaUp5R3cyNFUxUGNXZUFLQW1ya0QyZ0x0dHR0T0k2RFZDb2xQZGtKTElkYWFCMlZ0RW1NNHhoUkZDRU1RMlF5R1l5TmpVbVpXSVU1V1FGMTJMWXRYUU1sOHpXQWREVDd6WWx3ZnFmVDBiZDhsa2crVUR3RDdqU3RGMGcvWTNEdFJwNXZtd1BNT0locEF0T1lvQ2tiU3Byek1GNUhaZnNKUVRxZHhubVpRVkRuMW1meS9PN3VMcGFYbDRldWd2VXZsOHVZbnA3bXk0cCs1MHZMNS9QNjRSellmZDgzWCtPK1pnMzRLZ2lDb1FscXRWcHlScGhsK2VxVUVzVmljV0J3empWT1BCOS9hRmZRdllPUUdPQnNCZlJab0pJZXdhV3ludjhDNW5WamFRMHJtWmk5amt4bUwwSTk0ZFZxRlpWS0JmVjZIYzFtVTQ3eFBBOEVqS1dsSlJtVjlUd3krMVhDYS9KS25OMENNY1MvaTRJQzJETUFHK29lUytxZGh2RWJPMEY0QXRUZWNyd0FBQUFBU1VWT1JLNUNZSUk9XCIsIENMID0gXCJkYXRhOmltYWdlL3BuZztiYXNlNjQsaVZCT1J3MEtHZ29BQUFBTlNVaEVVZ0FBQUJnQUFBQVlDQVlBQUFEZ2R6MzRBQUFBQ1hCSVdYTUFBQXNUQUFBTEV3RUFtcHdZQUFBQUFYTlNSMElBcnM0YzZRQUFBQVJuUVUxQkFBQ3hqd3Y4WVFVQUFBT0VTVVJCVkhnQnJWWk5hRk5MRlA1dWJ0clh2b2FYeEQ1OHJ5STFWZkMvTlNLQ1lMVlhvUzVVaUJzUmRHTTNnaXVydU9oR2t5RG9Sa1FFLzBEUWxTdEZCZDE2SzRvb0NyYitva0lUeForS3RFMXRhLzY4ZHp4bjdreWFhcFJhUGNuSm5EbVorYjQ1WjA3dUNmQVRFVUtFU09Pa05tbEtqTXVROG5XU1J2Q3J3cHNVd0dUbDdJK0lqQXJndTJoSWtJWjQzcDI2aFN2UHJzb3hreHVXYXlLaFJrUWJtaEZic0JGV1U2dmVtaUZOR29aeDlJY0VuQTRGTGdFUDNqaU1kT1kxL2d0TVI3ZzJoRUIxSGVvS0FoL3dHV09GTWZRTnB1VytTMXZQUzBJbENTSkpma2VnVGk3Wms5Y1A0ZGlkMDFqUnVCeFZaaFVFdldnVFRGZGdieTZQZjRzTzd2bjl5Skp2VG1FRUovcGZZR2UwQTJzMjdkZHd1M1VraHM0NURRODRMVW43RUk3ZlBZTWxEWXNCbjFFaFRxQnRySUNXdklONWNGRlhEYndiQVY0OXZZL1E1ajFvWDc5UHAyc3BrYVExd1ZrYXR2ZjJQeGJSRXl1Tmx2OFhJMUFUMFBRMEdsNFUwc0VXcEYxWGRCSDdWTUEvUXVDVVA0ZmJnODloZDF6VDk5Sk5CR3NNZGZvVWU1cU9OQ005L0JwTFpqU1BuNXBIUTBNclFqRStXMWI0Z3BlR2lVOFViVy8vSTFpeldpV0prckNmUGpaSnV2UXRDYzVwR2NnT29yYTZka0o2NkNEeUhqemJJK0xwVFU2aktDS1h6OHVETUE0WGlJcWlrd2xpYkhFcHd1Y0Jmc3dPb040SXl3MVFDZUh4cEcxaTBZQTNmKys2MkRJOFdpTGUwVEtFOXRrNU9GUUlNNTljcEhSSWdqWW1pTExWUStGSklIcm5uYndrcWZYWFVFQytVZ1QxZ3libTlCc3loQ29pR0JzWWtmNXNOb3RBWXhGemlkc2g5ZlYxNnhSRm1FRCtvRktjbnJKcUtUcEZxYWJQcE1DOEw1eWNDWHhXYWZyaVlIUjBGQzRSeVNqR3J3dHVMak9CWUVLdVN5dVZPSzREUjlrdVZRMktpc0J4NFRnT3lvWEJEVEd4cWpuK3RMenVtaUQraERDNE9TMmlwNWtTZ1RWckZmNlVWRFZFdGRuREJEZllpczNmZ044VzRkWGNYd3RqMm5PRkNlUXp3NHEwU3BVckJLWWt2TTBYanFDNnlkS3V5ejZxWWI3eWJwN0ZWM2RocXFMUEZkeDJTYnZPOGJQSXB5WWRwQm1PUUpKTUpRcGEvL2ZhT1B4ZS9tVnZZRU1TTUpOMkpOcTZFRy9yS20yYXJNemNHQ2VDaEo0bUZlWTNoeEFpb1h2Z2cvY1BSZVJZczhDQllFbnRwV0hoVHA4bXRhOCtKT08wTEV2WXRsM2VQaFBsbUpWYVppY04zTm04bHZtS1d1YnphK2o1OEFqN0w3eUI5WmFjd1NBeUsxYWl0MzBkaUVCdnJkZ3lLNHBxK3VmRTVNVVd2L0h2b2xNQkRKVUJwcFNQVXhyNkdjWlhQbUVvVTNCdForY0FBQUFBU1VWT1JLNUNZSUk9XCIsIG1MID0gXCJkYXRhOmltYWdlL3BuZztiYXNlNjQsaVZCT1J3MEtHZ29BQUFBTlNVaEVVZ0FBQUJnQUFBQVlDQVlBQUFEZ2R6MzRBQUFBQ1hCSVdYTUFBQXNUQUFBTEV3RUFtcHdZQUFBQUFYTlNSMElBcnM0YzZRQUFBQVJuUVUxQkFBQ3hqd3Y4WVFVQUFBUmtTVVJCVkhnQnBWWjdUSnRWRlA5OUxhVldIaXNiYUJrVGNDR0Fnb1J1WThxV3JKMlp6MlRXUUdhaWlZTWxzSW1KRHJhNHpDaGE1djZabUVpQ2p5VnFXSHpNeEJBalBySW9LS3NZb3pLZ3loamJZS0V5VnJhTzlmMysybjdlKy9IZHJwR09kZGxKVHM3OWJzLzkvZTQ5NTl4ekN5d2pnaUNvaWI1SmRKRG9qSEJkSE5KY0s5RmkzS3JRUlJKQXF0SnpJeUl1Q2ZoZVlveEUxZlI3ZU1JR3pVb0ZWdlIrQm1HZ0g1dTVaNkM1T3h0VnBhdGcwSytGYnYxcXR0Ukp0SVBqdUs0YkV0QndTT0F3alZqUjJ6K0ZobG8xN2h2cUE1ZS9HcitXYnNYeG55encrSGo0QW1ITVhISkRJTDVmdi9PRVNDaUprWkIwTENHUWRpNnlENXZuTUhEcUV2Ym16WU1iTThQeHlIYjBuT1V3TXJrQWpxTytiTEVBZnpDQzhla0Y3S203SCsyN2F4aGNHenNKeDJKT3pCZ05TN0R6Q1BpS1NpaXFxc0NkT3dkdVF3MU96ZmpoRFVSRThLNHZKeEdOeGE2emlHY1FNSExHaHBlZnJVUjdjdzBMbDVhUVdCaEJEekdOMGRQajhEMnNnNktpQXZLTVRNaWtIVWhPb0F5UGFsb1E0dVFKc1JYb2VuaThRVXhjdUlhQm8wK3h2SndrQkZ2VHBOMDMwcGxBdy9PUUUwdVh5L3orT0FGRG84WkhRaEpPeU55RzhwVlNpR1BJdmxPR0UwUFRqRUJQeXp5TkRKNm1YOUZvRk5GOXIwRFo5aEt3L3dENHpHeklIUTRJdGJXWXRMamhjSWRFSU84blU0akVvdkhkdS94SElhUmZ3VjkySG10RExuVC81c1N1TForamJOMW02dEJLTjJtZ283NlRGdng1UlFZWkNjTlphd0JmZWZLaHNGbVIvbUl6Y3BVQ09yKzNvckg3REZ5a2dtaGlGelVLWnpRTUJRSzQ1bk5nMjBPUDQxNzFHdngrdXA4ZFVFY0pxdW5vZzk1SnNmem9oTjBWUXN1UlAxQS9YWWFMcjNXaVlIOFRmaWlad01HR0t2QjhsSlJvSks0UnR4dXEwQUkwd2gzUUZtK0NYbE1DODl3d0l5aW1lT0tGc2xpOUpJZGNQSGw4SklidmhpNmk5dlV4dkxmblEzQWtoQys4dnhzaFV2OTA5elFYWGorUE9mRElVa1NRRVpFanQyZ05iREUvUWs1SG5DQU5DYkx6eHhoVWhZZUJiM255SlJQbmJJNGc5cjA3akVOWkpIR1JSbmo0eGJKa3dvZkQrR1ZXUUgxSkdJSS9DSHVhREpWS2VmeDNpbUtoZ3hXWlNvVENKS1p5Rlp5OERQOFhweWVjZEw0d3lLTXNJNFl2WEt0UVVGaUVRbVVlaXU4cWlDK0xFK2pXNTdQQ1NGblVXZW5JVnVRaEoxY0JPUW1wU3FXQ1hyc0pzWndLNW1LbUJDWTZNdWlLY0tzTWI5ZU40cmtIZkxCNlNTbGZuY1dEQncxNDlmaGhGRmMveGx6NktFRVhPNEZ1blNabGt1d01CUzVjSmZXaHlFRmIyWGw4K3VRTzNKTWVSUGVPT3VqTE56SzNiMWlyR0NSR2J4cWR4N2FXRStUS3h1L3dUU1VuU3dsdDdpZzJhc1pSVTVxRzdUczd3V1dVMDUrT2thcmN0YVRaSGZwNERHOTlaQmI3VHFvazRvbEpQMnB2cnNZYlRWbzZFVzkyWWxuUUFURmlENmNPMUhHeFc2YVNEd2F1WmVCVU9pVE1KUStPa1JqNjZPRHY4M2JVSC9nWi8xNzJMUXRQODliZVZKMlFQeEhjeUQ2U1BabXRFb2w0dzAyamw5Rm5tc1UvVTNaWTVyMmlqem96SFZzSW9FRlhtQWljOU1sTWZ1akZSLytZa0xvTUNyZng3NkpWQW5Ba0FNNUljMGJhODVmRCtBK0NMbk4wSy9SR2hRQUFBQUJKUlU1RXJrSmdnZz09XCIsIExMID0gXCJkYXRhOmltYWdlL3BuZztiYXNlNjQsaVZCT1J3MEtHZ29BQUFBTlNVaEVVZ0FBQUJnQUFBQVlDQVlBQUFEZ2R6MzRBQUFBQ1hCSVdYTUFBQXNUQUFBTEV3RUFtcHdZQUFBQUFYTlNSMElBcnM0YzZRQUFBQVJuUVUxQkFBQ3hqd3Y4WVFVQUFBUjhTVVJCVkhnQnBWWnJURnhGRlA3dTNWMFd3bEtXSXNsQ3l5TVVMQkVzYkN1dHFHR3hVVnVyZGxGakxDR05SV3ViYXVUaEs5R0V1clJOakdsTStHR1VSZzAxTVJGRnJhUW1ZaXpDcGhxU1VoN2xWWjVob2JBOEFpeGxuOTBIMTVuTG5lMlNCZHltSnptWnVaTXozM2ZtbkRObkxyQ0pDSUtnSnZvSjBXYWlZOEpkc1VocjVVUlRjSzlDTjBrQW9VcnRSa1RjT3VCbFpEQVFWZFB2em9FNWFMYUdJYkx1T3ppTVYvR0V1eEFwQ1ZIWTlXQXM5QVdwME8xSllGdVhpRlp4SEZlOUlRRU5od1FPWTdzWmwxdEdjZlJSTmRMKy9oVklURVJUY2o3cW04WmhjM2hnZDdveE5yVU1nZGhlK3Z4WjRlSDBXSVpsSUNSVlFRU1M1eUo3Vys4MFd0cHU0VzMxSkxqQkFjd1hIRUp0dHhkZFE0dmdPR3JMTmd0d3VMem9HWm5IeVpjZVF1V0pYQVpYd1U3Q3NaalRhTkN3dU01L0JvOTJOeFE3TThBTkRZTGJ1dzl0SXpiWUNkQUtRYTcrb1o5NXhGd1R0YjEvRHFWRldhaDhNNWVGUzB0SVRJeWdsZ3pIZkwwOXNPL1hRWkdaQ1Zta0NyemtnV1FFTnkvSE01cTNDSndRRUZ1QjdvZlY1a0xmNkFLdTFCeG1lV2toQkUvS0plK1AwUlhuYTBjaEk2T01iT2NkRGo4QlErTTV1WGdTckUwY0N2T1VpT09IMEJvemg1Ly91c2tJQ21pWnk4bWtrSDc1ZkQ3NFNpdWcvS0FDM01lVjhDaVVrRmtzRVBMeVNPd3RZcXpkM2hVNGEwY2dCSGdmRytsQWF0UTFkTFQ5aSt5RWFOVDNaWXNGSXBHVVV5ZjFkRmIzNXdnR3JYTElTQlp2bWwxb2NDVWdiSFlLaXZmS3NDMkt4NWxmYnVIRVZ3T3dPYjBpMmFyNklGY3A4Rkh2VmRRUUo5NXY3TVRVZ2drTkxTYm1nWTRTNU5CWjdlVmhMTnU5WWpRV2wrL2c5WE90S0puWmhja0tBN2EvK3dhYXRHT29LTXFFa3dEYm5hc3FsL0hZTWIySVltc3VQazEvQWFYcHp5RmZXRUQ3ZFQ5QkNpVVFMNVRKYkx1YlVDSWVFbzd2RzBkUmNMWUhYNXk2QU41dXg4bHZTOFVjVU8vcEtKZHhlSHI4QW1MTVRaanJyNFBHMFlKOXM3L2pBZDdwSitEb1BhZXpOSDBkWmhlY0NML2pBc0xEc2VUaDErUlNIUlVHdUZ4cjFwUGpWYmkwOHhyNnJKUHdYWjlBVGw0V1poZXRxRkhwOGRPWHI0ZzJOTWtteWhTdFVtSjh4Z0dYTElLNEg5UkJzR1IxMHpvS1d2OHg0eUJrUWpleVhqMk4rdUVyaU5tU2hvaGUvLzRsWGlJZ1dZOW5oUkd5UkhpY2lGd1p4OVM4Q2ZPMzdTU3NVL0I2elRpUUVjRk11aWlCa2M3MHVtVGNDMFB4NHlxY1MybkVYR3N2TXBJTzQzeDlHZUszWnFHLy96YjJKeXVaV1FNbHFHWW4wTzNXaEV4U2pIL0FIWXlCSW00ZVRodVAxTGpuY2NNVWpaenQ0ZEE4dHBlWi9jWmFSVE1aQ293ZDAzanExQitrbFB4M2VFUEp6dzZIMG1kR3lZdGhHSnNZUUdKU0dqUmJ2TWpWSG9GS3RZMmFYQ1N0b2lTbzJaMzVwaE5udis2QzJEYi9oNFRKam5nWllsVXV2Rk8wQjBjT2FlbVN2OW1KWlVFblpCQjcrT25qV3RJUmM2UnVHVW8rQkl5YVBUaWdlNFNCVTZtU01JTWVIQU1aNktPREc2VDN2L3hoRXlsZCs2YndORytWeDNNQzhpZUNHOWpIZWs5bXVVUWkzbkJqeHd3YWpCUG9IbDZFYWRvbTJxaFZZY2duZ0hwZFVpRHd1ay9tK29kZWZmUXZDcUZMczNBZmZ4ZmxFb0FsQUhCTVdqUFFucjhaeG4rWlRZQUMrTk91bkFBQUFBQkpSVTVFcmtKZ2dnPT1cIiwgdkwgPSBcImRhdGE6aW1hZ2UvcG5nO2Jhc2U2NCxpVkJPUncwS0dnb0FBQUFOU1VoRVVnQUFBQmdBQUFBWUNBWUFBQURnZHozNEFBQUFDWEJJV1hNQUFBc1RBQUFMRXdFQW1wd1lBQUFBQVhOU1IwSUFyczRjNlFBQUFBUm5RVTFCQUFDeGp3djhZUVVBQUFOK1NVUkJWSGdCcFZaSlRKTkJGUDcraW9CWXRMaURVZEc0Sk1ZUXdIQWlXalJlUENCR3ZaaTR4TGpkRkMvR1M3WG94WU1IVDhhb0NaQVlpUWROVUE0a2FsZ1N1Wml5bVlpeXRUVVJpR3dGeTFLNmpPL05QMVBLbWdLdmVaMy9uNzc1dmpmZnpMd3BzSWdKSVd6a0Q4aHJ5TjFpMm9aVlh6RjVKcFpxUEVnQnhHdWxDeEVaODREZnBzWkpidVAzT2xjUEttdTdVVSt0NzkrVWpNbk1TRVhXL28wb0t0Z0QrK0VNUGRSSFhtSVl4dE1GQ1ZnT0JTNkJINWU2NE8zMVk4dUdGS1N0UzRKMXpXb1o1eDhQWW14aUN1NC9veEQwL3Y3SlNVbW96RWtrSlhNSVZPYVMzZHN6ak1MYjFUaVF1UUZoWVlZWkJzY2cycHE5QXVPVElYenZITUROTXdmaHVKR240ZTdvbVJoYWMycWFXSmJ5ajIwNGtiY1YzVDNqZUZyUlJwbUdWSlF4VzB2OUlOMzE0eTl1blQ4RXgvVThMVmNPa1hnU1ZCUkxZMnRwSDRUajJUZjRMMmRqWkR5RWZsOUFBcWVtck1Zb3lXSW9Fa0dmYVRyQkNXTDdGaXNldm5EaGFPNTJYaGRldjFMeVk0YkszczJoZTArOWdiZlBqNng5bTBrS1E4S2tyazNFdWVPN1VGYlZGUVdmT3hNaDI5YU9mdGh6MC9INWVhSCtOWTFuY0ZvdktvTURGZ3lOVGlFNUtRR0ZSM2ZpNnFuOXlOaWNnb043MHVCODBZd0IzMlFNaFlpU0JJSWhPYmJPMVN1eDFPNHF0dEJYRVQ5VjFubE5uU2x6bG1ac01veTNuenp3alUzQlNoS1ZWWFhLQlB5MEpyeXdwb2ZsR25Ic2dJKzJzR0dSNHl0clBUb0RPeE5rODFOcng2RE1nRDBRak5DQUFJRUZVVkh0UnU2RkQ5aVVsaXpCSmdoWWdzWTR4MDRFd3RCN3E3NnBWeE5rc2tUeVFIbDYvRE0yU2pBVVFkQWZ3Zk4zUDJHeEdQamxIWmtwUFh0RUlDTEU5SVpTQ3VnRHFRbGl6SmpWQW1FQ1lZL2ZqQm5qV1JNUFA2eTNKcW5mRGF6VXVKUW84MFVKN0lmVHphNmxKTHVBWmUyTGxvMW1scWlPdk9EZXhXUmN5bjhpOVZhYllVa216S01nNWR5MTk3WHVydVNEeG9zOHpHOFQvYlJqZ3cxRXNqd0NYaXFCSFVoSmI5VGR1eFBveFBxSXBKWm5rYmp1THI0MjNKSUV5Mkhnd25na3YxejNsTVhXb2l2a1RhdVM4bTIxWGEvdzZHV3pJb2lYeE5USGNUMGI5b0pEM0NIdkJuN2dYTG51ZUhUSC9XczVNakJhWStJR3o1RmpsWlVvekRrWGpoTm1aVVZMK3hETzN2MUM1V0ZzVVhoNzdqWTRybVhMTmdiY3FWL211ektMRllsNVpUYjJVWjM2VGFWa0NKNWV2NHl4V1JPcExHOURrWDFuTFBDOFYrYjhrell2L1RJUnY5V0lGZnk3S0ZZQXd6R0FidFhuVk50OFFmc1BwQVkwbXlyOHA1MEFBQUFBU1VWT1JLNUNZSUk9XCIsIHFMID0gXCJkYXRhOmltYWdlL3BuZztiYXNlNjQsaVZCT1J3MEtHZ29BQUFBTlNVaEVVZ0FBQUJnQUFBQVlDQVlBQUFEZ2R6MzRBQUFBQ1hCSVdYTUFBQXNUQUFBTEV3RUFtcHdZQUFBQUFYTlNSMElBcnM0YzZRQUFBQVJuUVUxQkFBQ3hqd3Y4WVFVQUFBT2JTVVJCVkhnQnBWWTlpQlJKRlA2cWVycDdsaHZQdmNQZzltNjRXOVJqUFk0MUVxTVZSVXlFRmNWSU1GQWpReWN4M2pVelVUY1NSRVJERVFNUkE4SEFSUlFERlFYeEIxUWNWM1FOMUpuWjFlbnA2ZTRxMzZ1cEdudG1XRm4xTVkvdXFsZnYrMTY5OTZwNmdHK0kxbnFZZElyME91bEwvVlZxZHE1Q09vcnZGWGF5QU11VnM4c21vb1dIYklSR2tpVFJ0U3ZYZEhYVGJ2MWkvVGFqYzVQN2RPM1NWV1ByMjFXbEg2L1FCejVGajJsK1Q5TVVyVmFMNTVBMUZoR1dSeURHMXBoMTZuTVRXWDBSVVJRWmU3RTRwSVBBSHliVENScXZGRUljR1NEZ3lCMDRBOGR4RE4vM0lhV0VIaG9DeWhweXBFRldBVFV2NFErRnhxNlVvdldSVUNvam9pSzdUeE5XZzBobWVDQmR6dlBndEhXRVlRalA4d3lCVERQb056R0tXK3NvVG40RTNyWWhzc3pZQzRVQ2dpQXdQdXhyWmNyVlJMb0owdUdNbk5ydHRuRmlZQVl3SkRRdjNwUHpoeGlpU2MvM01aR3FEcmxWOW1FU1RpMWprWjQxS2JKTSszbkFPZTJDV2tmYXFva1dyUmpJSWlvQXZUZERpQ1R0Mkt5YTJsQzZYSUFrVzdqTmVRZTdlTVRSc3d5QXN6T0I2YytSSVJDS0N0K011QXQ2MXJnZE00bmRCVXVGcVhhYTZHZHZvLzM4RlRKUEltV1NZdGlOTExuMzBJSTJpVVJCUjBXazl4OGhPbitaQ3dqTjBVY3RNaWxTcXRmcVVhellOc0d1bXdYM0wrZHNmc2NCSkxmdUl2eVhvbjNtUTFDSENDS0JGTGJOZ05KTUhmSVBoWVU5dnlQWDI5QlVYTVVwSzZkb3Y2WVVqNC9ocnhzWDJWb3QySUlnbTN0aktoNXNpUkVjWG9UUUZwaTJEaUVOZ2JjNjVTNUY2YmpyRmtVL2JVaFFVb2huUXlTbmY0RnVMRGo2MGU0NUVMbW45ejlGMDhhQWlKTHUxR2xOTW1EVFFTK09FeWFvTXBOYytTdlU2M2xrTDN3c2JGOEZ2U0FIUUVxbmF2RCt6TkRZc1FxRFJqcUk2enJFL3Q5bE4xdnZFcFFPN2tYNzFoMTRsSTdDWkc4YzZaTm5WTlRIdlpGUm5ndmo2M3AzUWFtU2F4V0NpWTF1NmdGUDh0SFcxS2FhZXRnOHFkVjZyc3BQSjg3b2Q3K042MDhYeWpxNk9XTGVGNCtlN0ZuRFBnNGo1MS9oUEhUdUROdlRITVdQaXZOMTdVMXlTZEtnVGkrelBPS0R3b3VjZmk4NHF6M0ZMT2NJdStvcWVZQzA3azdrVXVCQ0xnM3VJcmZSYzlEbXlwYldVTzFPNUZLVjM0bjNUNHJzS1YxbzFPdmVXRElRdWN1QWxTTVc4K3YzZ085dnZwem9kWXBKV1BoZXNUQklYeFdRSGx1UkQ3dHJ6MTk0Rm56R0RYcSthR1RnanVMdG1ldmJwY3Y3YnkzOGlRMVFjMjg3NitqTWNJdjJBZGY3d1pjVSs5RS9wNWN2MS9WUC9MdW9XSUJhRHZDbG5adTJhVjFTdmdCSW9jS3JOdVJacndBQUFBQkpSVTVFcmtKZ2dnPT1cIiwgeUwgPSBcImRhdGE6aW1hZ2UvcG5nO2Jhc2U2NCxpVkJPUncwS0dnb0FBQUFOU1VoRVVnQUFBQmdBQUFBWUNBWUFBQURnZHozNEFBQUFDWEJJV1hNQUFBc1RBQUFMRXdFQW1wd1lBQUFBQVhOU1IwSUFyczRjNlFBQUFBUm5RVTFCQUFDeGp3djhZUVVBQUFQelNVUkJWSGdCcFZaYmFGeFZGRjF6NTVGTU0yUEhPbWxGU1lsQmxDb0lnVXBhUmVxSEZTMUlGTVZYbGRhUElsaXg0NGRDUGlRcDlxT0NqNnBWV3hCVDg2R2tJdGdLb2grU0luNUlVVk1TTTdVMWp6R0pZNTJrbWZkMDVzNjk5N2ozeVQyM2R5YnBKS1VMTnVlMTkxNzdjYzdjQVJwQUNCRWg2U1VaSXBrU2w1RzI5MklrN2JoYXNKSHRZTFhvWHpVUktlNnpJNVNvVnF1aVdDeUtiRFlyTXBtTWxGd3VKL2Y0ckM2cldMMC9UNTN6WGhyNmVHNFlCc3JsTXU5QjB6UjRQQjRJUzRmbWJaSjdMSlpseWJHbHBRVmVyMWU1NlNQZC9Vc0lPSElhRHZHY0hldTZEcC9QSjUzRFRFRXZuQ09sQ25UREM2L0hBdnkzSUhoZGh5VGhZQUtCQUpxYm01VzdWNG5ra0VOZzEyK1lKTUxPS1hYNC9YNG5jcGIwMkJQd0N0NFBRQ2VuYXpkOVhaT0pzckZKTWlTZFpKZlFiRVl1VGNTNFZCdTVXOFlIYjBBK1hrVm1OSS9VaWRDU2M3WmhFajNOdmhFaDZlZUpaa2UvbXhkbjdua0V5ZGNQd0pxN1dHUE1HYlJVc3BpZk1GQ0tteWdYc2s1bWZNNzF0K1lYTVBQS0d6aS9lNThxMC8xOHpYMDBlWlJYaGRHejBHZitRVzRtaWVueEJLTFBQWTdvcmllbEUwWWdtQVhDSlhpb1RNRnkyQ0V3eXhWY0hQZ0tLWkxTbitNd0lWQVlPWXZRWFp2WUxNWWw2dWFaLzdZT3RMKzNIMDF0TjZGTWl2Kzljd1IvUGJ3VHBaRzRKTEFpRDhBd0s5RDBTd2lVdHNxOTR1a3ptSHpxUmFRKy9BekczN1BTOXRiQm8vRGYzcUd5Mk9iaCs2dWFLMU1XUU9yZG81ai8rQmcwdWhuUVBMaitzUjJJUE5PTlJFOHZ0TFZodFBXOGh2U25YeUQ3L1NtK0lSU2RINjE3ZDJIZEMwL0Q4dnRrNDRQQklCTWttRUNvcTZucXlXTjFOb2xrNzl2SWZQY2pFVk1UYjF5UFVQZDIrR2krOE9VM3NMSjU2U2k4YlFzMnZ2OG1mQnRhNVcweVRWT0tUUUNIb0ZLcE9BU3F2b3lGNHlkeDRlQkhzajl1TkcyOEdXMGZIRURvM3J2Vk81S2lDTlNiNEI0azBBQ2hyWnV4WnJGaE5WalQxWWtBa1N3SCtUZ1hrZUVNaHZoSzhXdmtDRlFHZ3Q1RWl2b3c5OGtBekZ4ZWFvZnY2NEozWFFTWkV6L0l0Vzk5RkJ0aWU5QzZaMmROQnZMU1VGOElwM2l6ajh0RUI0SWVtUnh6UDU4VzhhNGRZamg2cDVUNDVvZEVudllVRmdaUGlySE9CNTN6c2M3dG9qZzhLaWhJNllONm9WUmo2amRmb2pnMUxjNC8rNUw0M1RZYzZkZ2kvajE0V0ZqbHlwTGZaeU9iRjhtM0Rqc2tiRE81dDBjVUpoSnV0WGJWb0NGZWNlUy9SdStReWhORVZKbWVGU3VCZFNhZmYxbjhSalpzVy96am5EcnFkNW9pRmo4dzhodHc0Y2lBeVB6MGl6dk5GY0c2YzhlL0pkdlAxVlphMUgrQXhPTG5UNEw3d01LR0t4SHh1ZEozSWJiczlSSjJ3eHNScWJuYmNWMFFmV2dFTzVPME8wSzNRL2U2em5INmlwRXZROEk5T1NaV2p5RnhEZjh1WXJhRHRNdmhsTDNISlkwMDh2RS9NOUZKdnRyd214MEFBQUFBU1VWT1JLNUNZSUk9XCIsIHdMID0gXCJkYXRhOmltYWdlL3BuZztiYXNlNjQsaVZCT1J3MEtHZ29BQUFBTlNVaEVVZ0FBQUJnQUFBQVlDQVlBQUFEZ2R6MzRBQUFBQ1hCSVdYTUFBQXNUQUFBTEV3RUFtcHdZQUFBQUFYTlNSMElBcnM0YzZRQUFBQVJuUVUxQkFBQ3hqd3Y4WVFVQUFBU0tTVVJCVkhnQnBWWnRURnRsRkg1dWV5bTNYNk5sQVJuZzBnMUlpTG9QakQ4R3pvbUpjUTZ6TUQvUU9UVlo0a2Y4cGVXSDg5L29OSnVpeGhrVFk3YndwWmlZRUNmd3c4VTVDV05ibVBGcnpLQXVTZ29CTmtacG9hMzlvTzI5ZlQzdjdiMmxLc1VaMytUY2MzdnVlWi9uZmM4NTcza0xyREVZWXc2U05wSmhra20yTXBZMG01dkVoZjg2K0NRTjRHWkhkejRpWVJYd2wwbDVTQno4OTlqQ0pZeGVQNlBxU0RLaytwUlpiMFcxNDNZMGxPL0c5cEo2ZldxUTVJZ2dDTy9sSmVEaDBNQlZ3RSt2dm84YnNWazRwUkxZVFE2WVJZdnFGNWRqV0phanVCNlo1clB3V24wbnFvaFFHeDRpT2ZJUEFtM2xLdnZRaGEvd3dkUkwyRkY3RjBSREFYa3hjaFJVbmZIVkp3SExTaHpUb2F0bzN2d1U5bFFkMHVGYTlaMEllc3hKWGVaaENZVkNpRWFqdUhEK0xFUU1ZTytlQ0F4Q3hsTll3YzNvZElZc1RUcVYrQjRGVmpla2RXMTZ1T3FJWkVvbjZDWjFNSmxNd3VmelFaSWtHSTFHK1AxK2pBeTl5bHIyemNOdVkzK2pFRlR3REFHRG9vUWhKMzZHZWYwd3hNSkc3blNPQ080VHROVlBjc3ZjM0p3NjNWSTRReERWa1BwUElkTDhNQWI3UDhTRDFRT29NQnJJbmdIbnlFempZc1N0RUlrY3ZBSklqYkE4ZEZZUGxWT2t4ejcrbGtnaytFNnd1SEFlc0I2Qzg5cWRLT3k0QnVYdW5YaDh2eHVuK3NvaGRYZXgvVW9xcy9STVZzQzBUUmtTS1JobTdaRHhBK1NCaXhBYmRuS3oyMENQWnY2MnZMd01nOEdBc29yN1liSStocVhLN3hDc0NNUFUwNlVDUE5MU2d1MGRuY0xKUW9sRjQ3RTA0bkVxcHhpRUtFbU1KT0NuWEFrd2txOXkrclMrZzN0NWlKWjRjaGZIeDJGNnV4Mm1LMk1JYnZIQy9tNEtack1aeWdrcldLOFR3a1lYNUh0MklmcnM4emh4K0RBMkRQYkxtZnlsa1lvUm1ad0M1Um9VS1RpMmJjV0JpNWQ0ZEthZ0gwVktMdk9QWFdhcHVpMXM0UjBUaS9uQS9QUjU3bmNqODMwaHNjU3hGMWhvZG9ZRmcwRlYydHZiV1VsSkNhTkVNaTNyV1hHNVhOa2pMbVlQQkcyUFZWVEMvMWtmNUVBOWxIQVMzaW5BWmxWUVhLVmdycVlZRHB0ZGQ0Zk5aZ092T3BZOUZLdVB6RFlBRjQ4L2Q1YWNFaUlwSUJRR2Jpa2xUZDNoandoUVhMNUxuY0RQU08vUm8zRDI5c2h2Y1lQZGtnWFR0MUI4V3kzUExaZGdsc0JrTXFtVmhGZ0JMR05KeEd0RjhOQ1dsUUcrRzBZVVdocmc5WG94K09RVGludlJiM1NZSlRGM3BUcTR3aDkxZGJwNWpEdU5rRFJ5QWw1SlFpZ0k4WTV2VVZwWm1aMWMvZXNJUHUvdGhmTG1NWGhTQ1NQRkUydUdwYWxKZngza1ZjUzdKcThrOERhaEtJcGFyb0lHRWc2SDhjbkhyNk5wY3hlMnJjc1BySjVvTHRpRWdyMi82ZVpOSWdFRmllUWMzNFhGWWxFQjljUk5URXpnNnk4ZlRiOTRjRnB3Rm1ITlphdDlpVVMwOSttbUh0NkxOSGIxZ3VHM0ZLTWtza0Fnd0RvN2pxYy9PbG5FR09mN0YwbUh3SlFsa2xoYjdvM240dGk1N2RwTjZqaC9IeDRkd2h2akI3Q2h4b2cxMTgxV1Z2OTBUU3NlMlBpSy91V3Y3VHFIeEVOSzdiZmU4Qy93L1BnYzV1T3plVGw0SkxldXI4Y3oxYTJrZCtobWZxdDU5QityWFpsdWpVUzlNbjhLZklOUjN4bVZjRDQrby9wWXhTSVZzS0YwZHk3d3FsZG1ucFdwT2VsaE56K0cyZi80ZCtIV0FKWnlBQ2MxbTBjcjg3empUOGN2Nm1nL1JkZnJBQUFBQUVsRlRrU3VRbUNDXCIsIHhMID0gKGUpID0+IHtcbiAgbGV0IHQgPSB1ODtcbiAgY29uc3QgbyA9IGUuY2xhc3NlcygpO1xuICBzd2l0Y2ggKCEwKSB7XG4gICAgY2FzZSBvLmluY2x1ZGVzKEwxLkFCS0hBWklBLnRvTG93ZXJDYXNlKCkpOlxuICAgICAgdCA9IGtmO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSBvLmluY2x1ZGVzKEwxLkFGR0hBTklTVEFOLnRvTG93ZXJDYXNlKCkpOlxuICAgICAgdCA9IHU4O1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSBvLmluY2x1ZGVzKEwxLkFMQkFOSUEudG9Mb3dlckNhc2UoKSk6XG4gICAgICB0ID0gTmY7XG4gICAgICBicmVhaztcbiAgICBjYXNlIG8uaW5jbHVkZXMoTDEuQUxHRVJJQS50b0xvd2VyQ2FzZSgpKTpcbiAgICAgIHQgPSBUZjtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2Ugby5pbmNsdWRlcyhMMS5BTkRPUlJBLnRvTG93ZXJDYXNlKCkpOlxuICAgICAgdCA9IElmO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSBvLmluY2x1ZGVzKEwxLkFOR09MQS50b0xvd2VyQ2FzZSgpKTpcbiAgICAgIHQgPSBEZjtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2Ugby5pbmNsdWRlcyhMMS5BTlRJR1VBQkFSQlVEQS50b0xvd2VyQ2FzZSgpKTpcbiAgICAgIHQgPSBIZjtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2Ugby5pbmNsdWRlcyhMMS5BUkdFTlRJTkEudG9Mb3dlckNhc2UoKSk6XG4gICAgICB0ID0gVmY7XG4gICAgICBicmVhaztcbiAgICBjYXNlIG8uaW5jbHVkZXMoTDEuQVJNRU5JQS50b0xvd2VyQ2FzZSgpKTpcbiAgICAgIHQgPSBQZjtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2Ugby5pbmNsdWRlcyhMMS5BVVNUUkFMSUEudG9Mb3dlckNhc2UoKSk6XG4gICAgICB0ID0gRmY7XG4gICAgICBicmVhaztcbiAgICBjYXNlIG8uaW5jbHVkZXMoTDEuQVVTVFJJQS50b0xvd2VyQ2FzZSgpKTpcbiAgICAgIHQgPSBYZjtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2Ugby5pbmNsdWRlcyhMMS5BWkVSQkFJSkFOLnRvTG93ZXJDYXNlKCkpOlxuICAgICAgdCA9IFVmO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSBvLmluY2x1ZGVzKEwxLkJBSEFNQVMudG9Mb3dlckNhc2UoKSk6XG4gICAgICB0ID0gWWY7XG4gICAgICBicmVhaztcbiAgICBjYXNlIG8uaW5jbHVkZXMoTDEuQkFIUkFJTi50b0xvd2VyQ2FzZSgpKTpcbiAgICAgIHQgPSBHZjtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2Ugby5pbmNsdWRlcyhMMS5CQU5HTEFERVNILnRvTG93ZXJDYXNlKCkpOlxuICAgICAgdCA9IFFmO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSBvLmluY2x1ZGVzKEwxLkJBUkJBRE9TLnRvTG93ZXJDYXNlKCkpOlxuICAgICAgdCA9IFpmO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSBvLmluY2x1ZGVzKEwxLkJFTEFSVVMudG9Mb3dlckNhc2UoKSk6XG4gICAgICB0ID0gamY7XG4gICAgICBicmVhaztcbiAgICBjYXNlIG8uaW5jbHVkZXMoTDEuQkVMR0lVTS50b0xvd2VyQ2FzZSgpKTpcbiAgICAgIHQgPSBLZjtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2Ugby5pbmNsdWRlcyhMMS5CRUxJWkUudG9Mb3dlckNhc2UoKSk6XG4gICAgICB0ID0gSmY7XG4gICAgICBicmVhaztcbiAgICBjYXNlIG8uaW5jbHVkZXMoTDEuQkVOSU4udG9Mb3dlckNhc2UoKSk6XG4gICAgICB0ID0gX2Y7XG4gICAgICBicmVhaztcbiAgICBjYXNlIG8uaW5jbHVkZXMoTDEuQkhVVEFOLnRvTG93ZXJDYXNlKCkpOlxuICAgICAgdCA9ICRmO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSBvLmluY2x1ZGVzKEwxLkJPTElWSUEudG9Mb3dlckNhc2UoKSk6XG4gICAgICB0ID0gZWc7XG4gICAgICBicmVhaztcbiAgICBjYXNlIG8uaW5jbHVkZXMoTDEuQk9TTklBSEVSWkVHT1ZJTkEudG9Mb3dlckNhc2UoKSk6XG4gICAgICB0ID0gdGc7XG4gICAgICBicmVhaztcbiAgICBjYXNlIG8uaW5jbHVkZXMoTDEuQk9UU1dBTkEudG9Mb3dlckNhc2UoKSk6XG4gICAgICB0ID0gb2c7XG4gICAgICBicmVhaztcbiAgICBjYXNlIG8uaW5jbHVkZXMoTDEuQlJBWklMLnRvTG93ZXJDYXNlKCkpOlxuICAgICAgdCA9IHJnO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSBvLmluY2x1ZGVzKEwxLkJSVU5FSS50b0xvd2VyQ2FzZSgpKTpcbiAgICAgIHQgPSBuZztcbiAgICAgIGJyZWFrO1xuICAgIGNhc2Ugby5pbmNsdWRlcyhMMS5CVUxHQVJJQS50b0xvd2VyQ2FzZSgpKTpcbiAgICAgIHQgPSBpZztcbiAgICAgIGJyZWFrO1xuICAgIGNhc2Ugby5pbmNsdWRlcyhMMS5CVVJLSU5BRkFTTy50b0xvd2VyQ2FzZSgpKTpcbiAgICAgIHQgPSBhZztcbiAgICAgIGJyZWFrO1xuICAgIGNhc2Ugby5pbmNsdWRlcyhMMS5CVVJVTkRJLnRvTG93ZXJDYXNlKCkpOlxuICAgICAgdCA9IHNnO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSBvLmluY2x1ZGVzKEwxLkNBTUJPRElBLnRvTG93ZXJDYXNlKCkpOlxuICAgICAgdCA9IGNnO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSBvLmluY2x1ZGVzKEwxLkNBTUVST09OLnRvTG93ZXJDYXNlKCkpOlxuICAgICAgdCA9IGxnO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSBvLmluY2x1ZGVzKEwxLkNBTkFEQS50b0xvd2VyQ2FzZSgpKTpcbiAgICAgIHQgPSBwZztcbiAgICAgIGJyZWFrO1xuICAgIGNhc2Ugby5pbmNsdWRlcyhMMS5DQVBFVkVSREUudG9Mb3dlckNhc2UoKSk6XG4gICAgICB0ID0gZGc7XG4gICAgICBicmVhaztcbiAgICBjYXNlIG8uaW5jbHVkZXMoTDEuQ0VOVFJBTF9BRlJJQ0FOX1JFUFVCTElDLnRvTG93ZXJDYXNlKCkpOlxuICAgICAgdCA9IGJnO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSBvLmluY2x1ZGVzKEwxLkNIQUQudG9Mb3dlckNhc2UoKSk6XG4gICAgICB0ID0gTWc7XG4gICAgICBicmVhaztcbiAgICBjYXNlIG8uaW5jbHVkZXMoTDEuQ0hJTEUudG9Mb3dlckNhc2UoKSk6XG4gICAgICB0ID0gQWc7XG4gICAgICBicmVhaztcbiAgICBjYXNlIG8uaW5jbHVkZXMoTDEuQ0hJTkEudG9Mb3dlckNhc2UoKSk6XG4gICAgICB0ID0gdWc7XG4gICAgICBicmVhaztcbiAgICBjYXNlIG8uaW5jbHVkZXMoTDEuQ09MT01CSUEudG9Mb3dlckNhc2UoKSk6XG4gICAgICB0ID0gemc7XG4gICAgICBicmVhaztcbiAgICBjYXNlIG8uaW5jbHVkZXMoTDEuQ09NT1JPUy50b0xvd2VyQ2FzZSgpKTpcbiAgICAgIHQgPSBoZztcbiAgICAgIGJyZWFrO1xuICAgIGNhc2Ugby5pbmNsdWRlcyhMMS5DT05HTy50b0xvd2VyQ2FzZSgpKTpcbiAgICAgIHQgPSBPZztcbiAgICAgIGJyZWFrO1xuICAgIGNhc2Ugby5pbmNsdWRlcyhMMS5DT09LSVNMQU5EUy50b0xvd2VyQ2FzZSgpKTpcbiAgICAgIHQgPSBmZztcbiAgICAgIGJyZWFrO1xuICAgIGNhc2Ugby5pbmNsdWRlcyhMMS5DT1NUQVJJQ0EudG9Mb3dlckNhc2UoKSk6XG4gICAgICB0ID0gZ2c7XG4gICAgICBicmVhaztcbiAgICBjYXNlIG8uaW5jbHVkZXMoTDEuQ1JPQVRJQS50b0xvd2VyQ2FzZSgpKTpcbiAgICAgIHQgPSBDZztcbiAgICAgIGJyZWFrO1xuICAgIGNhc2Ugby5pbmNsdWRlcyhMMS5DVUJBLnRvTG93ZXJDYXNlKCkpOlxuICAgICAgdCA9IG1nO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSBvLmluY2x1ZGVzKEwxLkNZUFJVUy50b0xvd2VyQ2FzZSgpKTpcbiAgICAgIHQgPSBMZztcbiAgICAgIGJyZWFrO1xuICAgIGNhc2Ugby5pbmNsdWRlcyhMMS5DWkVDSF9SRVBVQkxJQy50b0xvd2VyQ2FzZSgpKTpcbiAgICAgIHQgPSB2ZztcbiAgICAgIGJyZWFrO1xuICAgIGNhc2Ugby5pbmNsdWRlcyhMMS5ERU1PQ1JBVElDX1JFUFVCTElDX0NPTkdPLnRvTG93ZXJDYXNlKCkpOlxuICAgICAgdCA9IHFnO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSBvLmluY2x1ZGVzKEwxLkRFTk1BUksudG9Mb3dlckNhc2UoKSk6XG4gICAgICB0ID0geWc7XG4gICAgICBicmVhaztcbiAgICBjYXNlIG8uaW5jbHVkZXMoTDEuREpJQk9VVEkudG9Mb3dlckNhc2UoKSk6XG4gICAgICB0ID0gd2c7XG4gICAgICBicmVhaztcbiAgICBjYXNlIG8uaW5jbHVkZXMoTDEuRE9NSU5JQ0EudG9Mb3dlckNhc2UoKSk6XG4gICAgICB0ID0geGc7XG4gICAgICBicmVhaztcbiAgICBjYXNlIG8uaW5jbHVkZXMoTDEuRE9NSU5JQ0FOX1JFUFVCTElDLnRvTG93ZXJDYXNlKCkpOlxuICAgICAgdCA9IFdnO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSBvLmluY2x1ZGVzKEwxLkVBU1RUSU1PUi50b0xvd2VyQ2FzZSgpKTpcbiAgICAgIHQgPSBSZztcbiAgICAgIGJyZWFrO1xuICAgIGNhc2Ugby5pbmNsdWRlcyhMMS5FQ1VBRE9SLnRvTG93ZXJDYXNlKCkpOlxuICAgICAgdCA9IEJnO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSBvLmluY2x1ZGVzKEwxLkVHWVBULnRvTG93ZXJDYXNlKCkpOlxuICAgICAgdCA9IFNnO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSBvLmluY2x1ZGVzKEwxLkVMU0FMVkFET1IudG9Mb3dlckNhc2UoKSk6XG4gICAgICB0ID0gRWc7XG4gICAgICBicmVhaztcbiAgICBjYXNlIG8uaW5jbHVkZXMoTDEuRVFVSVRPUklBTF9HVUlORUEudG9Mb3dlckNhc2UoKSk6XG4gICAgICB0ID0ga2c7XG4gICAgICBicmVhaztcbiAgICBjYXNlIG8uaW5jbHVkZXMoTDEuRVJJVFJFQS50b0xvd2VyQ2FzZSgpKTpcbiAgICAgIHQgPSBOZztcbiAgICAgIGJyZWFrO1xuICAgIGNhc2Ugby5pbmNsdWRlcyhMMS5FU1RPTklBLnRvTG93ZXJDYXNlKCkpOlxuICAgICAgdCA9IFRnO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSBvLmluY2x1ZGVzKEwxLkVUSElPUElBLnRvTG93ZXJDYXNlKCkpOlxuICAgICAgdCA9IElnO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSBvLmluY2x1ZGVzKEwxLkVVLnRvTG93ZXJDYXNlKCkpOlxuICAgICAgdCA9IERnO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSBvLmluY2x1ZGVzKEwxLkZfU19NSUNST05FU0lBLnRvTG93ZXJDYXNlKCkpOlxuICAgICAgdCA9IEhnO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSBvLmluY2x1ZGVzKEwxLkZJSkkudG9Mb3dlckNhc2UoKSk6XG4gICAgICB0ID0gVmc7XG4gICAgICBicmVhaztcbiAgICBjYXNlIG8uaW5jbHVkZXMoTDEuRklOTEFORC50b0xvd2VyQ2FzZSgpKTpcbiAgICAgIHQgPSBQZztcbiAgICAgIGJyZWFrO1xuICAgIGNhc2Ugby5pbmNsdWRlcyhMMS5GUkFOQ0UudG9Mb3dlckNhc2UoKSk6XG4gICAgICB0ID0gbkM7XG4gICAgICBicmVhaztcbiAgICBjYXNlIG8uaW5jbHVkZXMoTDEuR0FCT04udG9Mb3dlckNhc2UoKSk6XG4gICAgICB0ID0gaUM7XG4gICAgICBicmVhaztcbiAgICBjYXNlIG8uaW5jbHVkZXMoTDEuR0FNQklBLnRvTG93ZXJDYXNlKCkpOlxuICAgICAgdCA9IGFDO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSBvLmluY2x1ZGVzKEwxLkdFT1JHSUEudG9Mb3dlckNhc2UoKSk6XG4gICAgICB0ID0gc0M7XG4gICAgICBicmVhaztcbiAgICBjYXNlIG8uaW5jbHVkZXMoTDEuR0VSTUFOWS50b0xvd2VyQ2FzZSgpKTpcbiAgICAgIHQgPSBjQztcbiAgICAgIGJyZWFrO1xuICAgIGNhc2Ugby5pbmNsdWRlcyhMMS5HSEFOQS50b0xvd2VyQ2FzZSgpKTpcbiAgICAgIHQgPSBsQztcbiAgICAgIGJyZWFrO1xuICAgIGNhc2Ugby5pbmNsdWRlcyhMMS5HUkVFQ0UudG9Mb3dlckNhc2UoKSk6XG4gICAgICB0ID0gcEM7XG4gICAgICBicmVhaztcbiAgICBjYXNlIG8uaW5jbHVkZXMoTDEuR1JFTkFEQS50b0xvd2VyQ2FzZSgpKTpcbiAgICAgIHQgPSBkQztcbiAgICAgIGJyZWFrO1xuICAgIGNhc2Ugby5pbmNsdWRlcyhMMS5HVUFURU1BTEEudG9Mb3dlckNhc2UoKSk6XG4gICAgICB0ID0gRmc7XG4gICAgICBicmVhaztcbiAgICBjYXNlIG8uaW5jbHVkZXMoTDEuR1VJTkVBQklTU0FVLnRvTG93ZXJDYXNlKCkpOlxuICAgICAgdCA9IFhnO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSBvLmluY2x1ZGVzKEwxLkdVSU5FQS50b0xvd2VyQ2FzZSgpKTpcbiAgICAgIHQgPSBVZztcbiAgICAgIGJyZWFrO1xuICAgIGNhc2Ugby5pbmNsdWRlcyhMMS5HVVlBTkEudG9Mb3dlckNhc2UoKSk6XG4gICAgICB0ID0gWWc7XG4gICAgICBicmVhaztcbiAgICBjYXNlIG8uaW5jbHVkZXMoTDEuSEFJVEkudG9Mb3dlckNhc2UoKSk6XG4gICAgICB0ID0gR2c7XG4gICAgICBicmVhaztcbiAgICBjYXNlIG8uaW5jbHVkZXMoTDEuSE9ORFVSQVMudG9Mb3dlckNhc2UoKSk6XG4gICAgICB0ID0gUWc7XG4gICAgICBicmVhaztcbiAgICBjYXNlIG8uaW5jbHVkZXMoTDEuSE9OR19LT05HLnRvTG93ZXJDYXNlKCkpOlxuICAgICAgdCA9IFpnO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSBvLmluY2x1ZGVzKEwxLkhVTkdBUlkudG9Mb3dlckNhc2UoKSk6XG4gICAgICB0ID0gamc7XG4gICAgICBicmVhaztcbiAgICBjYXNlIG8uaW5jbHVkZXMoTDEuSUNFTEFORC50b0xvd2VyQ2FzZSgpKTpcbiAgICAgIHQgPSBLZztcbiAgICAgIGJyZWFrO1xuICAgIGNhc2Ugby5pbmNsdWRlcyhMMS5JTkRJQS50b0xvd2VyQ2FzZSgpKTpcbiAgICAgIHQgPSBKZztcbiAgICAgIGJyZWFrO1xuICAgIGNhc2Ugby5pbmNsdWRlcyhMMS5JTkRPTkVTSUEudG9Mb3dlckNhc2UoKSk6XG4gICAgICB0ID0gX2c7XG4gICAgICBicmVhaztcbiAgICBjYXNlIG8uaW5jbHVkZXMoTDEuSVJBTi50b0xvd2VyQ2FzZSgpKTpcbiAgICAgIHQgPSAkZztcbiAgICAgIGJyZWFrO1xuICAgIGNhc2Ugby5pbmNsdWRlcyhMMS5JUkFRLnRvTG93ZXJDYXNlKCkpOlxuICAgICAgdCA9IGVDO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSBvLmluY2x1ZGVzKEwxLklSRUxBTkQudG9Mb3dlckNhc2UoKSk6XG4gICAgICB0ID0gdEM7XG4gICAgICBicmVhaztcbiAgICBjYXNlIG8uaW5jbHVkZXMoTDEuSVNSQUVMLnRvTG93ZXJDYXNlKCkpOlxuICAgICAgdCA9IG9DO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSBvLmluY2x1ZGVzKEwxLklUQUxZLnRvTG93ZXJDYXNlKCkpOlxuICAgICAgdCA9IHJDO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSBvLmluY2x1ZGVzKEwxLklWT1JZX0NPQVNULnRvTG93ZXJDYXNlKCkpOlxuICAgICAgdCA9IGJDO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSBvLmluY2x1ZGVzKEwxLkpBTUFJQ0EudG9Mb3dlckNhc2UoKSk6XG4gICAgICB0ID0gTUM7XG4gICAgICBicmVhaztcbiAgICBjYXNlIG8uaW5jbHVkZXMoTDEuSkFQQU4udG9Mb3dlckNhc2UoKSk6XG4gICAgICB0ID0gQUM7XG4gICAgICBicmVhaztcbiAgICBjYXNlIG8uaW5jbHVkZXMoTDEuSk9SREFOLnRvTG93ZXJDYXNlKCkpOlxuICAgICAgdCA9IHVDO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSBvLmluY2x1ZGVzKEwxLktFTllBLnRvTG93ZXJDYXNlKCkpOlxuICAgICAgdCA9IHpDO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSBvLmluY2x1ZGVzKEwxLktJUklCQVRJLnRvTG93ZXJDYXNlKCkpOlxuICAgICAgdCA9IGhDO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSBvLmluY2x1ZGVzKEwxLktPU09WTy50b0xvd2VyQ2FzZSgpKTpcbiAgICAgIHQgPSBPQztcbiAgICAgIGJyZWFrO1xuICAgIGNhc2Ugby5pbmNsdWRlcyhMMS5LWkFLSFNUQU4udG9Mb3dlckNhc2UoKSk6XG4gICAgICB0ID0gZkM7XG4gICAgICBicmVhaztcbiAgICBjYXNlIG8uaW5jbHVkZXMoTDEuS1VXQUlULnRvTG93ZXJDYXNlKCkpOlxuICAgICAgdCA9IGdDO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSBvLmluY2x1ZGVzKEwxLktZUkdZWlNUQU4udG9Mb3dlckNhc2UoKSk6XG4gICAgICB0ID0gQ0M7XG4gICAgICBicmVhaztcbiAgICBjYXNlIG8uaW5jbHVkZXMoTDEuTEFPUy50b0xvd2VyQ2FzZSgpKTpcbiAgICAgIHQgPSBtQztcbiAgICAgIGJyZWFrO1xuICAgIGNhc2Ugby5pbmNsdWRlcyhMMS5MQVRWSUEudG9Mb3dlckNhc2UoKSk6XG4gICAgICB0ID0gTEM7XG4gICAgICBicmVhaztcbiAgICBjYXNlIG8uaW5jbHVkZXMoTDEuTEVCQU5PTi50b0xvd2VyQ2FzZSgpKTpcbiAgICAgIHQgPSB2QztcbiAgICAgIGJyZWFrO1xuICAgIGNhc2Ugby5pbmNsdWRlcyhMMS5MRVNPVEhPLnRvTG93ZXJDYXNlKCkpOlxuICAgICAgdCA9IHFDO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSBvLmluY2x1ZGVzKEwxLkxJQkVSSUEudG9Mb3dlckNhc2UoKSk6XG4gICAgICB0ID0geUM7XG4gICAgICBicmVhaztcbiAgICBjYXNlIG8uaW5jbHVkZXMoTDEuTElCSUEudG9Mb3dlckNhc2UoKSk6XG4gICAgICB0ID0gd0M7XG4gICAgICBicmVhaztcbiAgICBjYXNlIG8uaW5jbHVkZXMoTDEuTElFQ0hURU5TVEVJTi50b0xvd2VyQ2FzZSgpKTpcbiAgICAgIHQgPSB4QztcbiAgICAgIGJyZWFrO1xuICAgIGNhc2Ugby5pbmNsdWRlcyhMMS5MSVRIVUFOSUEudG9Mb3dlckNhc2UoKSk6XG4gICAgICB0ID0gV0M7XG4gICAgICBicmVhaztcbiAgICBjYXNlIG8uaW5jbHVkZXMoTDEuTFVYRU1CT1VSRy50b0xvd2VyQ2FzZSgpKTpcbiAgICAgIHQgPSBSQztcbiAgICAgIGJyZWFrO1xuICAgIGNhc2Ugby5pbmNsdWRlcyhMMS5NQUNFRE9OSUEudG9Mb3dlckNhc2UoKSk6XG4gICAgICB0ID0gQkM7XG4gICAgICBicmVhaztcbiAgICBjYXNlIG8uaW5jbHVkZXMoTDEuTUFEQUdBU0NBUi50b0xvd2VyQ2FzZSgpKTpcbiAgICAgIHQgPSBTQztcbiAgICAgIGJyZWFrO1xuICAgIGNhc2Ugby5pbmNsdWRlcyhMMS5NQUxBV0kudG9Mb3dlckNhc2UoKSk6XG4gICAgICB0ID0gRUM7XG4gICAgICBicmVhaztcbiAgICBjYXNlIG8uaW5jbHVkZXMoTDEuTUFMQVlTSUEudG9Mb3dlckNhc2UoKSk6XG4gICAgICB0ID0ga0M7XG4gICAgICBicmVhaztcbiAgICBjYXNlIG8uaW5jbHVkZXMoTDEuTUFMRElWRVMudG9Mb3dlckNhc2UoKSk6XG4gICAgICB0ID0gTkM7XG4gICAgICBicmVhaztcbiAgICBjYXNlIG8uaW5jbHVkZXMoTDEuTUFMSS50b0xvd2VyQ2FzZSgpKTpcbiAgICAgIHQgPSBUQztcbiAgICAgIGJyZWFrO1xuICAgIGNhc2Ugby5pbmNsdWRlcyhMMS5NQUxUQS50b0xvd2VyQ2FzZSgpKTpcbiAgICAgIHQgPSBJQztcbiAgICAgIGJyZWFrO1xuICAgIGNhc2Ugby5pbmNsdWRlcyhMMS5NQVJTSEFMTF9JU0xBTkRTLnRvTG93ZXJDYXNlKCkpOlxuICAgICAgdCA9IERDO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSBvLmluY2x1ZGVzKEwxLk1BVVJJVEFOSUEudG9Mb3dlckNhc2UoKSk6XG4gICAgICB0ID0gSEM7XG4gICAgICBicmVhaztcbiAgICBjYXNlIG8uaW5jbHVkZXMoTDEuTUFVUklUSVVTLnRvTG93ZXJDYXNlKCkpOlxuICAgICAgdCA9IFZDO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSBvLmluY2x1ZGVzKEwxLk1FWElDTy50b0xvd2VyQ2FzZSgpKTpcbiAgICAgIHQgPSBQQztcbiAgICAgIGJyZWFrO1xuICAgIGNhc2Ugby5pbmNsdWRlcyhMMS5NT0xET1ZBLnRvTG93ZXJDYXNlKCkpOlxuICAgICAgdCA9IEZDO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSBvLmluY2x1ZGVzKEwxLk1PTkFDTy50b0xvd2VyQ2FzZSgpKTpcbiAgICAgIHQgPSBYQztcbiAgICAgIGJyZWFrO1xuICAgIGNhc2Ugby5pbmNsdWRlcyhMMS5NT05HT0xJQS50b0xvd2VyQ2FzZSgpKTpcbiAgICAgIHQgPSBVQztcbiAgICAgIGJyZWFrO1xuICAgIGNhc2Ugby5pbmNsdWRlcyhMMS5NT05URU5FR1JPLnRvTG93ZXJDYXNlKCkpOlxuICAgICAgdCA9IFlDO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSBvLmluY2x1ZGVzKEwxLk1PUk9DQ08udG9Mb3dlckNhc2UoKSk6XG4gICAgICB0ID0gR0M7XG4gICAgICBicmVhaztcbiAgICBjYXNlIG8uaW5jbHVkZXMoTDEuTU9aQU1CSVFVRS50b0xvd2VyQ2FzZSgpKTpcbiAgICAgIHQgPSBRQztcbiAgICAgIGJyZWFrO1xuICAgIGNhc2Ugby5pbmNsdWRlcyhMMS5NWUFOTUFSLnRvTG93ZXJDYXNlKCkpOlxuICAgICAgdCA9IFpDO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSBvLmluY2x1ZGVzKEwxLk5BR09STk9LQVJBQkFLSi50b0xvd2VyQ2FzZSgpKTpcbiAgICAgIHQgPSBqQztcbiAgICAgIGJyZWFrO1xuICAgIGNhc2Ugby5pbmNsdWRlcyhMMS5OQU1JQklBLnRvTG93ZXJDYXNlKCkpOlxuICAgICAgdCA9IEtDO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSBvLmluY2x1ZGVzKEwxLk5BVVJVLnRvTG93ZXJDYXNlKCkpOlxuICAgICAgdCA9IEpDO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSBvLmluY2x1ZGVzKEwxLk5FUEFMLnRvTG93ZXJDYXNlKCkpOlxuICAgICAgdCA9IF9DO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSBvLmluY2x1ZGVzKEwxLk5FVEhFUkxBTkRTLnRvTG93ZXJDYXNlKCkpOlxuICAgICAgdCA9ICRDO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSBvLmluY2x1ZGVzKEwxLk5FV19aRUFMQU5ELnRvTG93ZXJDYXNlKCkpOlxuICAgICAgdCA9IGVtO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSBvLmluY2x1ZGVzKEwxLk5JQ0FSQUdVQS50b0xvd2VyQ2FzZSgpKTpcbiAgICAgIHQgPSB0bTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2Ugby5pbmNsdWRlcyhMMS5OSUdFUi50b0xvd2VyQ2FzZSgpKTpcbiAgICAgIHQgPSBvbTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2Ugby5pbmNsdWRlcyhMMS5OSUdFUklBLnRvTG93ZXJDYXNlKCkpOlxuICAgICAgdCA9IHJtO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSBvLmluY2x1ZGVzKEwxLk5JVUUudG9Mb3dlckNhc2UoKSk6XG4gICAgICB0ID0gbm07XG4gICAgICBicmVhaztcbiAgICBjYXNlIG8uaW5jbHVkZXMoTDEuTk9SVEhfS09SRUEudG9Mb3dlckNhc2UoKSk6XG4gICAgICB0ID0gaW07XG4gICAgICBicmVhaztcbiAgICBjYXNlIG8uaW5jbHVkZXMoTDEuTk9SVEhFUk5fQ1lQUlVTLnRvTG93ZXJDYXNlKCkpOlxuICAgICAgdCA9IGFtO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSBvLmluY2x1ZGVzKEwxLk5PUldBWS50b0xvd2VyQ2FzZSgpKTpcbiAgICAgIHQgPSBzbTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2Ugby5pbmNsdWRlcyhMMS5PUk1BTi50b0xvd2VyQ2FzZSgpKTpcbiAgICAgIHQgPSBjbTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2Ugby5pbmNsdWRlcyhMMS5QQUtJU1RBTi50b0xvd2VyQ2FzZSgpKTpcbiAgICAgIHQgPSBsbTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2Ugby5pbmNsdWRlcyhMMS5QQUxBVS50b0xvd2VyQ2FzZSgpKTpcbiAgICAgIHQgPSBwbTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2Ugby5pbmNsdWRlcyhMMS5QQUxFU1RJTkUudG9Mb3dlckNhc2UoKSk6XG4gICAgICB0ID0gZG07XG4gICAgICBicmVhaztcbiAgICBjYXNlIG8uaW5jbHVkZXMoTDEuUEFQQV9ORVdfR1VJTkVBLnRvTG93ZXJDYXNlKCkpOlxuICAgICAgdCA9IGJtO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSBvLmluY2x1ZGVzKEwxLlBBUkFHVUFZLnRvTG93ZXJDYXNlKCkpOlxuICAgICAgdCA9IE1tO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSBvLmluY2x1ZGVzKEwxLlBFUlUudG9Mb3dlckNhc2UoKSk6XG4gICAgICB0ID0gQW07XG4gICAgICBicmVhaztcbiAgICBjYXNlIG8uaW5jbHVkZXMoTDEuUEhJTExJUFBJTkVTLnRvTG93ZXJDYXNlKCkpOlxuICAgICAgdCA9IHVtO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSBvLmluY2x1ZGVzKEwxLlBPTEFORC50b0xvd2VyQ2FzZSgpKTpcbiAgICAgIHQgPSB6bTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2Ugby5pbmNsdWRlcyhMMS5QT1JUVUdBTC50b0xvd2VyQ2FzZSgpKTpcbiAgICAgIHQgPSBobTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2Ugby5pbmNsdWRlcyhMMS5QVUVSVE9fUklDQS50b0xvd2VyQ2FzZSgpKTpcbiAgICAgIHQgPSBPbTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2Ugby5pbmNsdWRlcyhMMS5RQVRBUi50b0xvd2VyQ2FzZSgpKTpcbiAgICAgIHQgPSBmbTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2Ugby5pbmNsdWRlcyhMMS5SRVBVQkxJQ19PRl9DSElOQS50b0xvd2VyQ2FzZSgpKTpcbiAgICAgIHQgPSBnbTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2Ugby5pbmNsdWRlcyhMMS5ST01BTklBLnRvTG93ZXJDYXNlKCkpOlxuICAgICAgdCA9IENtO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSBvLmluY2x1ZGVzKEwxLlJVU1NJQS50b0xvd2VyQ2FzZSgpKTpcbiAgICAgIHQgPSBtbTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2Ugby5pbmNsdWRlcyhMMS5SV0FOREEudG9Mb3dlckNhc2UoKSk6XG4gICAgICB0ID0gTG07XG4gICAgICBicmVhaztcbiAgICBjYXNlIG8uaW5jbHVkZXMoTDEuU0FIUkFXSV9BUkFCX0RFTU9DUkFUSUNfUkVQVUJMSUMudG9Mb3dlckNhc2UoKSk6XG4gICAgICB0ID0gdm07XG4gICAgICBicmVhaztcbiAgICBjYXNlIG8uaW5jbHVkZXMoTDEuU0FJTlRfS0lUVFNfQU5EX05FVklTLnRvTG93ZXJDYXNlKCkpOlxuICAgICAgdCA9IHFtO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSBvLmluY2x1ZGVzKEwxLlNBSU5UX0xVQ0lBLnRvTG93ZXJDYXNlKCkpOlxuICAgICAgdCA9IHltO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSBvLmluY2x1ZGVzKEwxLlNBTU9BLnRvTG93ZXJDYXNlKCkpOlxuICAgICAgdCA9IHdtO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSBvLmluY2x1ZGVzKEwxLlNBTl9NQVJJTk8udG9Mb3dlckNhc2UoKSk6XG4gICAgICB0ID0geG07XG4gICAgICBicmVhaztcbiAgICBjYXNlIG8uaW5jbHVkZXMoTDEuU0FPX1RPTUVfQU5EX1BSSU5DSVBFLnRvTG93ZXJDYXNlKCkpOlxuICAgICAgdCA9IFdtO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSBvLmluY2x1ZGVzKEwxLlNBVURJX0FSQUJJQS50b0xvd2VyQ2FzZSgpKTpcbiAgICAgIHQgPSBSbTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2Ugby5pbmNsdWRlcyhMMS5TRU5FR0FMLnRvTG93ZXJDYXNlKCkpOlxuICAgICAgdCA9IEJtO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSBvLmluY2x1ZGVzKEwxLlNFUkJJQS50b0xvd2VyQ2FzZSgpKTpcbiAgICAgIHQgPSBTbTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2Ugby5pbmNsdWRlcyhMMS5TRVlDSEVMTEVTLnRvTG93ZXJDYXNlKCkpOlxuICAgICAgdCA9IEVtO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSBvLmluY2x1ZGVzKEwxLlNJRVJSQV9MRU9ORS50b0xvd2VyQ2FzZSgpKTpcbiAgICAgIHQgPSBrbTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2Ugby5pbmNsdWRlcyhMMS5TSU5HQVBPUkUudG9Mb3dlckNhc2UoKSk6XG4gICAgICB0ID0gTm07XG4gICAgICBicmVhaztcbiAgICBjYXNlIG8uaW5jbHVkZXMoTDEuU0xPVkFLSUEudG9Mb3dlckNhc2UoKSk6XG4gICAgICB0ID0gVG07XG4gICAgICBicmVhaztcbiAgICBjYXNlIG8uaW5jbHVkZXMoTDEuU0xPVkVOSUEudG9Mb3dlckNhc2UoKSk6XG4gICAgICB0ID0gSW07XG4gICAgICBicmVhaztcbiAgICBjYXNlIG8uaW5jbHVkZXMoTDEuU09MT01PTl9JU0xBTkRTLnRvTG93ZXJDYXNlKCkpOlxuICAgICAgdCA9IERtO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSBvLmluY2x1ZGVzKEwxLlNPTUFMSUEudG9Mb3dlckNhc2UoKSk6XG4gICAgICB0ID0gSG07XG4gICAgICBicmVhaztcbiAgICBjYXNlIG8uaW5jbHVkZXMoTDEuU09NQUxJTEFORC50b0xvd2VyQ2FzZSgpKTpcbiAgICAgIHQgPSBWbTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2Ugby5pbmNsdWRlcyhMMS5TT1VUSF9BRlJJQ0EudG9Mb3dlckNhc2UoKSk6XG4gICAgICB0ID0gUG07XG4gICAgICBicmVhaztcbiAgICBjYXNlIG8uaW5jbHVkZXMoTDEuU09VVEhfS09SRUEudG9Mb3dlckNhc2UoKSk6XG4gICAgICB0ID0gRm07XG4gICAgICBicmVhaztcbiAgICBjYXNlIG8uaW5jbHVkZXMoTDEuU09VVEhfT1NTRVRJQS50b0xvd2VyQ2FzZSgpKTpcbiAgICAgIHQgPSBYbTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2Ugby5pbmNsdWRlcyhMMS5TT1VUSF9TVURBTi50b0xvd2VyQ2FzZSgpKTpcbiAgICAgIHQgPSBVbTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2Ugby5pbmNsdWRlcyhMMS5TUEFJTi50b0xvd2VyQ2FzZSgpKTpcbiAgICAgIHQgPSBZbTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2Ugby5pbmNsdWRlcyhMMS5TUklfTEFOS0EudG9Mb3dlckNhc2UoKSk6XG4gICAgICB0ID0gR207XG4gICAgICBicmVhaztcbiAgICBjYXNlIG8uaW5jbHVkZXMoTDEuU1RfVklOQ0VOVF9BTkRfVEhFX0dSRU5BRElORVMudG9Mb3dlckNhc2UoKSk6XG4gICAgICB0ID0gUW07XG4gICAgICBicmVhaztcbiAgICBjYXNlIG8uaW5jbHVkZXMoTDEuU1VEQU4udG9Mb3dlckNhc2UoKSk6XG4gICAgICB0ID0gWm07XG4gICAgICBicmVhaztcbiAgICBjYXNlIG8uaW5jbHVkZXMoTDEuU1VSSU5BTUUudG9Mb3dlckNhc2UoKSk6XG4gICAgICB0ID0gam07XG4gICAgICBicmVhaztcbiAgICBjYXNlIG8uaW5jbHVkZXMoTDEuU1dBWklMQU5ELnRvTG93ZXJDYXNlKCkpOlxuICAgICAgdCA9IEttO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSBvLmluY2x1ZGVzKEwxLlNXRURFTi50b0xvd2VyQ2FzZSgpKTpcbiAgICAgIHQgPSBKbTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2Ugby5pbmNsdWRlcyhMMS5TV0lUWkVSTEFORC50b0xvd2VyQ2FzZSgpKTpcbiAgICAgIHQgPSBfbTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2Ugby5pbmNsdWRlcyhMMS5TWVJJQS50b0xvd2VyQ2FzZSgpKTpcbiAgICAgIHQgPSAkbTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2Ugby5pbmNsdWRlcyhMMS5UQUpJS0lTVEFOLnRvTG93ZXJDYXNlKCkpOlxuICAgICAgdCA9IGVMO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSBvLmluY2x1ZGVzKEwxLlRBTlpBTklBLnRvTG93ZXJDYXNlKCkpOlxuICAgICAgdCA9IHRMO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSBvLmluY2x1ZGVzKEwxLlRIQUlMQU5ELnRvTG93ZXJDYXNlKCkpOlxuICAgICAgdCA9IG9MO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSBvLmluY2x1ZGVzKEwxLlRPR08udG9Mb3dlckNhc2UoKSk6XG4gICAgICB0ID0gckw7XG4gICAgICBicmVhaztcbiAgICBjYXNlIG8uaW5jbHVkZXMoTDEuVE9OR0EudG9Mb3dlckNhc2UoKSk6XG4gICAgICB0ID0gbkw7XG4gICAgICBicmVhaztcbiAgICBjYXNlIG8uaW5jbHVkZXMoTDEuVFJBTlNOSVNUUklBLnRvTG93ZXJDYXNlKCkpOlxuICAgICAgdCA9IGlMO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSBvLmluY2x1ZGVzKEwxLlRSSU5JREFEX1RPQkFHTy50b0xvd2VyQ2FzZSgpKTpcbiAgICAgIHQgPSBhTDtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2Ugby5pbmNsdWRlcyhMMS5UVU5JU0lBLnRvTG93ZXJDYXNlKCkpOlxuICAgICAgdCA9IHNMO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSBvLmluY2x1ZGVzKEwxLlRVUktFWS50b0xvd2VyQ2FzZSgpKTpcbiAgICAgIHQgPSBjTDtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2Ugby5pbmNsdWRlcyhMMS5UVVJLTUVOSVNUQU4udG9Mb3dlckNhc2UoKSk6XG4gICAgICB0ID0gbEw7XG4gICAgICBicmVhaztcbiAgICBjYXNlIG8uaW5jbHVkZXMoTDEuVFVWQUxVLnRvTG93ZXJDYXNlKCkpOlxuICAgICAgdCA9IHBMO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSBvLmluY2x1ZGVzKEwxLlVfU19WSVJHSU5fSVNMQU5EUy50b0xvd2VyQ2FzZSgpKTpcbiAgICAgIHQgPSBkTDtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2Ugby5pbmNsdWRlcyhMMS5VR0FOREEudG9Mb3dlckNhc2UoKSk6XG4gICAgICB0ID0gYkw7XG4gICAgICBicmVhaztcbiAgICBjYXNlIG8uaW5jbHVkZXMoTDEuVUtSQUlORS50b0xvd2VyQ2FzZSgpKTpcbiAgICAgIHQgPSBNTDtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2Ugby5pbmNsdWRlcyhMMS5VTklURURfQVJBQl9FTUlSQVRFUy50b0xvd2VyQ2FzZSgpKTpcbiAgICAgIHQgPSBBTDtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2Ugby5pbmNsdWRlcyhMMS5VTklURURfS0lOR0RPTS50b0xvd2VyQ2FzZSgpKTpcbiAgICAgIHQgPSB1TDtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2Ugby5pbmNsdWRlcyhMMS5VWkJFS0lTVEFOLnRvTG93ZXJDYXNlKCkpOlxuICAgICAgdCA9IHpMO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSBvLmluY2x1ZGVzKEwxLlZBVElDQU5fQ0lUWS50b0xvd2VyQ2FzZSgpKTpcbiAgICAgIHQgPSBoTDtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2Ugby5pbmNsdWRlcyhMMS5WRU5FWlVFTEEudG9Mb3dlckNhc2UoKSk6XG4gICAgICB0ID0gT0w7XG4gICAgICBicmVhaztcbiAgICBjYXNlIG8uaW5jbHVkZXMoTDEuVklFVE5BTS50b0xvd2VyQ2FzZSgpKTpcbiAgICAgIHQgPSBmTDtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2Ugby5pbmNsdWRlcyhMMS5ZRU1FTi50b0xvd2VyQ2FzZSgpKTpcbiAgICAgIHQgPSBnTDtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2Ugby5pbmNsdWRlcyhMMS5aQU1CSUEudG9Mb3dlckNhc2UoKSk6XG4gICAgICB0ID0gQ0w7XG4gICAgICBicmVhaztcbiAgICBjYXNlIG8uaW5jbHVkZXMoTDEuQlJJVElTSF9WSVJHSU5fSVNMQU5EUy50b0xvd2VyQ2FzZSgpKTpcbiAgICAgIHQgPSBtTDtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2Ugby5pbmNsdWRlcyhMMS5DQVlNQU5fSVNMQU5EUy50b0xvd2VyQ2FzZSgpKTpcbiAgICAgIHQgPSBMTDtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2Ugby5pbmNsdWRlcyhMMS5DVVJBQ0FPLnRvTG93ZXJDYXNlKCkpOlxuICAgICAgdCA9IHZMO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSBvLmluY2x1ZGVzKEwxLkdVRVJOU0VZLnRvTG93ZXJDYXNlKCkpOlxuICAgICAgdCA9IHFMO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSBvLmluY2x1ZGVzKEwxLkpFUlNFWS50b0xvd2VyQ2FzZSgpKTpcbiAgICAgIHQgPSB5TDtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2Ugby5pbmNsdWRlcyhMMS5aSU1CQUJXRS50b0xvd2VyQ2FzZSgpKTpcbiAgICAgIHQgPSB3TDtcbiAgICAgIGJyZWFrO1xuICAgIGRlZmF1bHQ6XG4gICAgICB0ID0gRWY7XG4gICAgICBicmVhaztcbiAgfVxuICByZXR1cm4gdDtcbn0sIEoyID0ge1xuICBDb3VudHJpZXM6IFtcbiAgICB7XG4gICAgICBDb3VudHJ5TmFtZTogXCJVbml0ZWQgU3RhdGVzIE9mIEFtZXJpY2FcIixcbiAgICAgIENvdW50cnlDb2RlOiBcIlVTXCIsXG4gICAgICBGbGFnOiBcIkZsYWdVU0FcIlxuICAgIH0sXG4gICAge1xuICAgICAgQ291bnRyeU5hbWU6IFwiQWJraGF6aWFcIixcbiAgICAgIENvdW50cnlDb2RlOiBcIkFCXCIsXG4gICAgICBGbGFnOiBcIkZsYWdBQlwiXG4gICAgfSxcbiAgICB7XG4gICAgICBDb3VudHJ5TmFtZTogXCJBZmdoYW5pc3RhblwiLFxuICAgICAgQ291bnRyeUNvZGU6IFwiQUZcIixcbiAgICAgIEZsYWc6IFwiRmxhZ0FGXCJcbiAgICB9LFxuICAgIHtcbiAgICAgIENvdW50cnlOYW1lOiBcIkFsYmFuaWFcIixcbiAgICAgIENvdW50cnlDb2RlOiBcIkFMQlwiLFxuICAgICAgRmxhZzogXCJGbGFnQUxCXCJcbiAgICB9LFxuICAgIHtcbiAgICAgIENvdW50cnlOYW1lOiBcIkFsZ2VyaWFcIixcbiAgICAgIENvdW50cnlDb2RlOiBcIkFMR1wiLFxuICAgICAgRmxhZzogXCJGbGFnQUxHXCJcbiAgICB9LFxuICAgIHtcbiAgICAgIENvdW50cnlOYW1lOiBcIkFuZG9ycmFcIixcbiAgICAgIENvdW50cnlDb2RlOiBcIkFORFwiLFxuICAgICAgRmxhZzogXCJGbGFnQU5EXCJcbiAgICB9LFxuICAgIHtcbiAgICAgIENvdW50cnlOYW1lOiBcIkFuZ29sYVwiLFxuICAgICAgQ291bnRyeUNvZGU6IFwiQU5HXCIsXG4gICAgICBGbGFnOiBcIkZsYWdBTkdcIlxuICAgIH0sXG4gICAge1xuICAgICAgQ291bnRyeU5hbWU6IFwiQW50aWd1YSAmIEJhcmJ1ZGFcIixcbiAgICAgIENvdW50cnlDb2RlOiBcIkFOQlwiLFxuICAgICAgRmxhZzogXCJGbGFnQU5CXCJcbiAgICB9LFxuICAgIHtcbiAgICAgIENvdW50cnlOYW1lOiBcIkFyZ2VudGluYVwiLFxuICAgICAgQ291bnRyeUNvZGU6IFwiQVJHXCIsXG4gICAgICBGbGFnOiBcIkZsYWdBUkdcIlxuICAgIH0sXG4gICAge1xuICAgICAgQ291bnRyeU5hbWU6IFwiQXJtZW5pYVwiLFxuICAgICAgQ291bnRyeUNvZGU6IFwiQVJNXCIsXG4gICAgICBGbGFnOiBcIkZsYWdBUk1cIlxuICAgIH0sXG4gICAge1xuICAgICAgQ291bnRyeU5hbWU6IFwiQXVzdHJhbGlhXCIsXG4gICAgICBDb3VudHJ5Q29kZTogXCJBVVNcIixcbiAgICAgIEZsYWc6IFwiRmxhZ0FVU1wiXG4gICAgfSxcbiAgICB7XG4gICAgICBDb3VudHJ5TmFtZTogXCJBdXN0cmlhXCIsXG4gICAgICBDb3VudHJ5Q29kZTogXCJBU1wiLFxuICAgICAgRmxhZzogXCJGbGFnQVNcIlxuICAgIH0sXG4gICAge1xuICAgICAgQ291bnRyeU5hbWU6IFwiQXplcmJhaWphblwiLFxuICAgICAgQ291bnRyeUNvZGU6IFwiQVpcIixcbiAgICAgIEZsYWc6IFwiRmxhZ0FaXCJcbiAgICB9LFxuICAgIHtcbiAgICAgIENvdW50cnlOYW1lOiBcIkJhaGFtYXNcIixcbiAgICAgIENvdW50cnlDb2RlOiBcIkJBTVwiLFxuICAgICAgRmxhZzogXCJGbGFnQkFNXCJcbiAgICB9LFxuICAgIHtcbiAgICAgIENvdW50cnlOYW1lOiBcIkJhaHJhaW5cIixcbiAgICAgIENvdW50cnlDb2RlOiBcIkJBSFwiLFxuICAgICAgRmxhZzogXCJGbGFnQkFIXCJcbiAgICB9LFxuICAgIHtcbiAgICAgIENvdW50cnlOYW1lOiBcIkJhbmdsYWRlc2hcIixcbiAgICAgIENvdW50cnlDb2RlOiBcIkJBTlwiLFxuICAgICAgRmxhZzogXCJGbGFnQkFOXCJcbiAgICB9LFxuICAgIHtcbiAgICAgIENvdW50cnlOYW1lOiBcIkJhcmJhZG9zXCIsXG4gICAgICBDb3VudHJ5Q29kZTogXCJCQVJcIixcbiAgICAgIEZsYWc6IFwiRmxhZ0JBUlwiXG4gICAgfSxcbiAgICB7XG4gICAgICBDb3VudHJ5TmFtZTogXCJCZWxhcnVzXCIsXG4gICAgICBDb3VudHJ5Q29kZTogXCJCRVJcIixcbiAgICAgIEZsYWc6IFwiRmxhZ0JFUlwiXG4gICAgfSxcbiAgICB7XG4gICAgICBDb3VudHJ5TmFtZTogXCJCZWxnaXVtXCIsXG4gICAgICBDb3VudHJ5Q29kZTogXCJCRUxcIixcbiAgICAgIEZsYWc6IFwiRmxhZ0JFTFwiXG4gICAgfSxcbiAgICB7XG4gICAgICBDb3VudHJ5TmFtZTogXCJCZWxpemVcIixcbiAgICAgIENvdW50cnlDb2RlOiBcIkJFWlwiLFxuICAgICAgRmxhZzogXCJGbGFnQkVaXCJcbiAgICB9LFxuICAgIHtcbiAgICAgIENvdW50cnlOYW1lOiBcIkJlbmluXCIsXG4gICAgICBDb3VudHJ5Q29kZTogXCJCRU5cIixcbiAgICAgIEZsYWc6IFwiRmxhZ0JFTlwiXG4gICAgfSxcbiAgICB7XG4gICAgICBDb3VudHJ5TmFtZTogXCJCaHV0YW5cIixcbiAgICAgIENvdW50cnlDb2RlOiBcIkJIVVwiLFxuICAgICAgRmxhZzogXCJGbGFnQkhVXCJcbiAgICB9LFxuICAgIHtcbiAgICAgIENvdW50cnlOYW1lOiBcIkJvbGl2aWFcIixcbiAgICAgIENvdW50cnlDb2RlOiBcIkJPTFwiLFxuICAgICAgRmxhZzogXCJGbGFnQk9MXCJcbiAgICB9LFxuICAgIHtcbiAgICAgIENvdW50cnlOYW1lOiBcIkJvc25pYSAmIEhlcnplZ292aW5hXCIsXG4gICAgICBDb3VudHJ5Q29kZTogXCJCT1NcIixcbiAgICAgIEZsYWc6IFwiRmxhZ0JPU1wiXG4gICAgfSxcbiAgICB7XG4gICAgICBDb3VudHJ5TmFtZTogXCJCb3Rzd2FuYVwiLFxuICAgICAgQ291bnRyeUNvZGU6IFwiQk9UXCIsXG4gICAgICBGbGFnOiBcIkZsYWdCT1RcIlxuICAgIH0sXG4gICAge1xuICAgICAgQ291bnRyeU5hbWU6IFwiQnJhemlsXCIsXG4gICAgICBDb3VudHJ5Q29kZTogXCJCUkFcIixcbiAgICAgIEZsYWc6IFwiRmxhZ0JSQVwiXG4gICAgfSxcbiAgICB7XG4gICAgICBDb3VudHJ5TmFtZTogXCJCcnVuZWlcIixcbiAgICAgIENvdW50cnlDb2RlOiBcIkJSVVwiLFxuICAgICAgRmxhZzogXCJGbGFnQlJVXCJcbiAgICB9LFxuICAgIHtcbiAgICAgIENvdW50cnlOYW1lOiBcIkJ1bGdhcmlhXCIsXG4gICAgICBDb3VudHJ5Q29kZTogXCJCVUxcIixcbiAgICAgIEZsYWc6IFwiRmxhZ0JVTFwiXG4gICAgfSxcbiAgICB7XG4gICAgICBDb3VudHJ5TmFtZTogXCJCdXJraW5hIEZhc29cIixcbiAgICAgIENvdW50cnlDb2RlOiBcIkJVUlwiLFxuICAgICAgRmxhZzogXCJGbGFnQlVSXCJcbiAgICB9LFxuICAgIHtcbiAgICAgIENvdW50cnlOYW1lOiBcIkJ1cnVuZGlcIixcbiAgICAgIENvdW50cnlDb2RlOiBcIkJVRFwiLFxuICAgICAgRmxhZzogXCJGbGFnQlVEXCJcbiAgICB9LFxuICAgIHtcbiAgICAgIENvdW50cnlOYW1lOiBcIkNhbWJvZGlhXCIsXG4gICAgICBDb3VudHJ5Q29kZTogXCJDQURcIixcbiAgICAgIEZsYWc6IFwiRmxhZ0NBRFwiXG4gICAgfSxcbiAgICB7XG4gICAgICBDb3VudHJ5TmFtZTogXCJDYW1lcm9vblwiLFxuICAgICAgQ291bnRyeUNvZGU6IFwiQ0FNXCIsXG4gICAgICBGbGFnOiBcIkZsYWdDQU1cIlxuICAgIH0sXG4gICAge1xuICAgICAgQ291bnRyeU5hbWU6IFwiQ2FuYWRhXCIsXG4gICAgICBDb3VudHJ5Q29kZTogXCJDQVwiLFxuICAgICAgRmxhZzogXCJGbGFnQ0FcIlxuICAgIH0sXG4gICAge1xuICAgICAgQ291bnRyeU5hbWU6IFwiQ2FwZSBWZXJkZVwiLFxuICAgICAgQ291bnRyeUNvZGU6IFwiQ1ZcIixcbiAgICAgIEZsYWc6IFwiRmxhZ0NWXCJcbiAgICB9LFxuICAgIHtcbiAgICAgIENvdW50cnlOYW1lOiBcIkNlbnRyYWwgQWZyaWNhbiBSZXB1YmxpY1wiLFxuICAgICAgQ291bnRyeUNvZGU6IFwiQ0FSXCIsXG4gICAgICBGbGFnOiBcIkZsYWdDQVJcIlxuICAgIH0sXG4gICAge1xuICAgICAgQ291bnRyeU5hbWU6IFwiQ2hhZFwiLFxuICAgICAgQ291bnRyeUNvZGU6IFwiQ0hcIixcbiAgICAgIEZsYWc6IFwiRmxhZ0NIXCJcbiAgICB9LFxuICAgIHtcbiAgICAgIENvdW50cnlOYW1lOiBcIkNoaWxlXCIsXG4gICAgICBDb3VudHJ5Q29kZTogXCJDSEVcIixcbiAgICAgIEZsYWc6IFwiRmxhZ0NIRVwiXG4gICAgfSxcbiAgICB7XG4gICAgICBDb3VudHJ5TmFtZTogXCJDaGluYVwiLFxuICAgICAgQ291bnRyeUNvZGU6IFwiQ0hJXCIsXG4gICAgICBGbGFnOiBcIkZsYWdDSElcIlxuICAgIH0sXG4gICAge1xuICAgICAgQ291bnRyeU5hbWU6IFwiQ29sb21iaWFcIixcbiAgICAgIENvdW50cnlDb2RlOiBcIkNPTFwiLFxuICAgICAgRmxhZzogXCJGbGFnQ09MXCJcbiAgICB9LFxuICAgIHtcbiAgICAgIENvdW50cnlOYW1lOiBcIkNvbW9yb3NcIixcbiAgICAgIENvdW50cnlDb2RlOiBcIkNPTVwiLFxuICAgICAgRmxhZzogXCJGbGFnQ09NXCJcbiAgICB9LFxuICAgIHtcbiAgICAgIENvdW50cnlOYW1lOiBcIkNvbmdvXCIsXG4gICAgICBDb3VudHJ5Q29kZTogXCJDT05cIixcbiAgICAgIEZsYWc6IFwiRmxhZ0NPTlwiXG4gICAgfSxcbiAgICB7XG4gICAgICBDb3VudHJ5TmFtZTogXCJDb29rIElzbGFuZHNcIixcbiAgICAgIENvdW50cnlDb2RlOiBcIkNJXCIsXG4gICAgICBGbGFnOiBcIkZsYWdDSVwiXG4gICAgfSxcbiAgICB7XG4gICAgICBDb3VudHJ5TmFtZTogXCJDb3N0YSBSaWNhXCIsXG4gICAgICBDb3VudHJ5Q29kZTogXCJDUlwiLFxuICAgICAgRmxhZzogXCJGbGFnQ1JcIlxuICAgIH0sXG4gICAge1xuICAgICAgQ291bnRyeU5hbWU6IFwiQ3JvYXRpYVwiLFxuICAgICAgQ291bnRyeUNvZGU6IFwiQ1JPXCIsXG4gICAgICBGbGFnOiBcIkZsYWdDUk9cIlxuICAgIH0sXG4gICAge1xuICAgICAgQ291bnRyeU5hbWU6IFwiQ3ViYVwiLFxuICAgICAgQ291bnRyeUNvZGU6IFwiQ1VcIixcbiAgICAgIEZsYWc6IFwiRmxhZ0NVXCJcbiAgICB9LFxuICAgIHtcbiAgICAgIENvdW50cnlOYW1lOiBcIkN5cHJ1c1wiLFxuICAgICAgQ291bnRyeUNvZGU6IFwiQ1lcIixcbiAgICAgIEZsYWc6IFwiRmxhZ0NZXCJcbiAgICB9LFxuICAgIHtcbiAgICAgIENvdW50cnlOYW1lOiBcIkN6ZWNoIFJlcHVibGljXCIsXG4gICAgICBDb3VudHJ5Q29kZTogXCJDWlwiLFxuICAgICAgRmxhZzogXCJGbGFnQ1pcIlxuICAgIH0sXG4gICAge1xuICAgICAgQ291bnRyeU5hbWU6IFwiRGVtb2NyYXRpYyBSZXB1YmxpYyBvZiB0aGUgQ29uZ29cIixcbiAgICAgIENvdW50cnlDb2RlOiBcIkRSQ1wiLFxuICAgICAgRmxhZzogXCJGbGFnRFJDXCJcbiAgICB9LFxuICAgIHtcbiAgICAgIENvdW50cnlOYW1lOiBcIkRlbm1hcmtcIixcbiAgICAgIENvdW50cnlDb2RlOiBcIkRFTlwiLFxuICAgICAgRmxhZzogXCJGbGFnREVOXCJcbiAgICB9LFxuICAgIHtcbiAgICAgIENvdW50cnlOYW1lOiBcIkRqaWJvdXRpXCIsXG4gICAgICBDb3VudHJ5Q29kZTogXCJESlwiLFxuICAgICAgRmxhZzogXCJGbGFnREpcIlxuICAgIH0sXG4gICAge1xuICAgICAgQ291bnRyeU5hbWU6IFwiRG9taW5pY2FcIixcbiAgICAgIENvdW50cnlDb2RlOiBcIkRPTVwiLFxuICAgICAgRmxhZzogXCJGbGFnRE9NXCJcbiAgICB9LFxuICAgIHtcbiAgICAgIENvdW50cnlOYW1lOiBcIkRvbWluaWNhbiBSZXB1YmxpY1wiLFxuICAgICAgQ291bnRyeUNvZGU6IFwiRFJcIixcbiAgICAgIEZsYWc6IFwiRmxhZ0RSXCJcbiAgICB9LFxuICAgIHtcbiAgICAgIENvdW50cnlOYW1lOiBcIkVhc3QgVGltb3JcIixcbiAgICAgIENvdW50cnlDb2RlOiBcIkVUXCIsXG4gICAgICBGbGFnOiBcIkZsYWdFVFwiXG4gICAgfSxcbiAgICB7XG4gICAgICBDb3VudHJ5TmFtZTogXCJFY3VhZG9yXCIsXG4gICAgICBDb3VudHJ5Q29kZTogXCJFQ1wiLFxuICAgICAgRmxhZzogXCJGbGFnRUNcIlxuICAgIH0sXG4gICAge1xuICAgICAgQ291bnRyeU5hbWU6IFwiRWd5cHRcIixcbiAgICAgIENvdW50cnlDb2RlOiBcIkVHXCIsXG4gICAgICBGbGFnOiBcIkZsYWdFR1wiXG4gICAgfSxcbiAgICB7XG4gICAgICBDb3VudHJ5TmFtZTogXCJFbCBTYWx2YWRvclwiLFxuICAgICAgQ291bnRyeUNvZGU6IFwiRVNcIixcbiAgICAgIEZsYWc6IFwiRmxhZ0VTXCJcbiAgICB9LFxuICAgIHtcbiAgICAgIENvdW50cnlOYW1lOiBcIkVxdWl0b3JpYWwgR3VpbmVhXCIsXG4gICAgICBDb3VudHJ5Q29kZTogXCJFUUdcIixcbiAgICAgIEZsYWc6IFwiRmxhZ0VRR1wiXG4gICAgfSxcbiAgICB7XG4gICAgICBDb3VudHJ5TmFtZTogXCJFcml0cmVhXCIsXG4gICAgICBDb3VudHJ5Q29kZTogXCJFUklcIixcbiAgICAgIEZsYWc6IFwiRmxhZ0VSSVwiXG4gICAgfSxcbiAgICB7XG4gICAgICBDb3VudHJ5TmFtZTogXCJFc3RvbmlhXCIsXG4gICAgICBDb3VudHJ5Q29kZTogXCJFU1RcIixcbiAgICAgIEZsYWc6IFwiRmxhZ0VTVFwiXG4gICAgfSxcbiAgICB7XG4gICAgICBDb3VudHJ5TmFtZTogXCJFdGhpb3BpYVwiLFxuICAgICAgQ291bnRyeUNvZGU6IFwiRVRIXCIsXG4gICAgICBGbGFnOiBcIkZsYWdFVEhcIlxuICAgIH0sXG4gICAge1xuICAgICAgQ291bnRyeU5hbWU6IFwiRVVcIixcbiAgICAgIENvdW50cnlDb2RlOiBcIkVVXCIsXG4gICAgICBGbGFnOiBcIkZsYWdFVVwiXG4gICAgfSxcbiAgICB7XG4gICAgICBDb3VudHJ5TmFtZTogXCJGLlMuIE1pY3JvbmVzaWFcIixcbiAgICAgIENvdW50cnlDb2RlOiBcIkZTXCIsXG4gICAgICBGbGFnOiBcIkZsYWdGU1wiXG4gICAgfSxcbiAgICB7XG4gICAgICBDb3VudHJ5TmFtZTogXCJGaWppXCIsXG4gICAgICBDb3VudHJ5Q29kZTogXCJGSVwiLFxuICAgICAgRmxhZzogXCJGbGFnRklcIlxuICAgIH0sXG4gICAge1xuICAgICAgQ291bnRyeU5hbWU6IFwiRmlubGFuZFwiLFxuICAgICAgQ291bnRyeUNvZGU6IFwiRkRcIixcbiAgICAgIEZsYWc6IFwiRmxhZ0ZEXCJcbiAgICB9LFxuICAgIHtcbiAgICAgIENvdW50cnlOYW1lOiBcIkZyYW5jZVwiLFxuICAgICAgQ291bnRyeUNvZGU6IFwiRlJcIixcbiAgICAgIEZsYWc6IFwiRmxhZ0ZSXCJcbiAgICB9LFxuICAgIHtcbiAgICAgIENvdW50cnlOYW1lOiBcIkdhYm9uXCIsXG4gICAgICBDb3VudHJ5Q29kZTogXCJHQUJcIixcbiAgICAgIEZsYWc6IFwiRmxhZ0dBQlwiXG4gICAgfSxcbiAgICB7XG4gICAgICBDb3VudHJ5TmFtZTogXCJHYW1iaWFcIixcbiAgICAgIENvdW50cnlDb2RlOiBcIkdBTVwiLFxuICAgICAgRmxhZzogXCJGbGFnR0FNXCJcbiAgICB9LFxuICAgIHtcbiAgICAgIENvdW50cnlOYW1lOiBcIkdlb3JnaWFcIixcbiAgICAgIENvdW50cnlDb2RlOiBcIkdFT1wiLFxuICAgICAgRmxhZzogXCJGbGFnR0VPXCJcbiAgICB9LFxuICAgIHtcbiAgICAgIENvdW50cnlOYW1lOiBcIkdlcm1hbnlcIixcbiAgICAgIENvdW50cnlDb2RlOiBcIkdFUlwiLFxuICAgICAgRmxhZzogXCJGbGFnR0VSXCJcbiAgICB9LFxuICAgIHtcbiAgICAgIENvdW50cnlOYW1lOiBcIkdoYW5hXCIsXG4gICAgICBDb3VudHJ5Q29kZTogXCJHSFwiLFxuICAgICAgRmxhZzogXCJGbGFnR0hcIlxuICAgIH0sXG4gICAge1xuICAgICAgQ291bnRyeU5hbWU6IFwiR3JlZWNlXCIsXG4gICAgICBDb3VudHJ5Q29kZTogXCJHUlwiLFxuICAgICAgRmxhZzogXCJGbGFnR1JcIlxuICAgIH0sXG4gICAge1xuICAgICAgQ291bnRyeU5hbWU6IFwiR3JlbmFkYVwiLFxuICAgICAgQ291bnRyeUNvZGU6IFwiR1JBXCIsXG4gICAgICBGbGFnOiBcIkZsYWdHUkFcIlxuICAgIH0sXG4gICAge1xuICAgICAgQ291bnRyeU5hbWU6IFwiR3VhdGVtYWxhXCIsXG4gICAgICBDb3VudHJ5Q29kZTogXCJHVVwiLFxuICAgICAgRmxhZzogXCJGbGFnR1VcIlxuICAgIH0sXG4gICAge1xuICAgICAgQ291bnRyeU5hbWU6IFwiR3VpbmVhLUJpc3NhdVwiLFxuICAgICAgQ291bnRyeUNvZGU6IFwiR0JcIixcbiAgICAgIEZsYWc6IFwiRmxhZ0dCXCJcbiAgICB9LFxuICAgIHtcbiAgICAgIENvdW50cnlOYW1lOiBcIkd1aW5lYVwiLFxuICAgICAgQ291bnRyeUNvZGU6IFwiR1VJXCIsXG4gICAgICBGbGFnOiBcIkZsYWdHVUlcIlxuICAgIH0sXG4gICAge1xuICAgICAgQ291bnRyeU5hbWU6IFwiR3V5YW5hXCIsXG4gICAgICBDb3VudHJ5Q29kZTogXCJHVVlcIixcbiAgICAgIEZsYWc6IFwiRmxhZ0dVWVwiXG4gICAgfSxcbiAgICB7XG4gICAgICBDb3VudHJ5TmFtZTogXCJIYWl0aVwiLFxuICAgICAgQ291bnRyeUNvZGU6IFwiSEFJXCIsXG4gICAgICBGbGFnOiBcIkZsYWdIQUlcIlxuICAgIH0sXG4gICAge1xuICAgICAgQ291bnRyeU5hbWU6IFwiSG9uZHVyYXNcIixcbiAgICAgIENvdW50cnlDb2RlOiBcIkhPTlwiLFxuICAgICAgRmxhZzogXCJGbGFnSE9OXCJcbiAgICB9LFxuICAgIHtcbiAgICAgIENvdW50cnlOYW1lOiBcIkhvbmcgS29uZ1wiLFxuICAgICAgQ291bnRyeUNvZGU6IFwiSEtcIixcbiAgICAgIEZsYWc6IFwiRmxhZ0hLXCJcbiAgICB9LFxuICAgIHtcbiAgICAgIENvdW50cnlOYW1lOiBcIkh1bmdhcnlcIixcbiAgICAgIENvdW50cnlDb2RlOiBcIkhVXCIsXG4gICAgICBGbGFnOiBcIkZsYWdIVVwiXG4gICAgfSxcbiAgICB7XG4gICAgICBDb3VudHJ5TmFtZTogXCJJY2VsYW5kXCIsXG4gICAgICBDb3VudHJ5Q29kZTogXCJJTFwiLFxuICAgICAgRmxhZzogXCJGbGFnSUxcIlxuICAgIH0sXG4gICAge1xuICAgICAgQ291bnRyeU5hbWU6IFwiSW5kaWFcIixcbiAgICAgIENvdW50cnlDb2RlOiBcIklORFwiLFxuICAgICAgRmxhZzogXCJGbGFnSU5EXCJcbiAgICB9LFxuICAgIHtcbiAgICAgIENvdW50cnlOYW1lOiBcIkluZG9uZXNpYVwiLFxuICAgICAgQ291bnRyeUNvZGU6IFwiSU5BXCIsXG4gICAgICBGbGFnOiBcIkZsYWdJTkFcIlxuICAgIH0sXG4gICAge1xuICAgICAgQ291bnRyeU5hbWU6IFwiSXJhblwiLFxuICAgICAgQ291bnRyeUNvZGU6IFwiSVJOXCIsXG4gICAgICBGbGFnOiBcIkZsYWdJUk5cIlxuICAgIH0sXG4gICAge1xuICAgICAgQ291bnRyeU5hbWU6IFwiSXJhcVwiLFxuICAgICAgQ291bnRyeUNvZGU6IFwiSVJRXCIsXG4gICAgICBGbGFnOiBcIkZsYWdJUlFcIlxuICAgIH0sXG4gICAge1xuICAgICAgQ291bnRyeU5hbWU6IFwiSXJlbGFuZFwiLFxuICAgICAgQ291bnRyeUNvZGU6IFwiSVJFXCIsXG4gICAgICBGbGFnOiBcIkZsYWdJUkVcIlxuICAgIH0sXG4gICAge1xuICAgICAgQ291bnRyeU5hbWU6IFwiSXNyYWVsXCIsXG4gICAgICBDb3VudHJ5Q29kZTogXCJJU1JcIixcbiAgICAgIEZsYWc6IFwiRmxhZ0lTUlwiXG4gICAgfSxcbiAgICB7XG4gICAgICBDb3VudHJ5TmFtZTogXCJJdGFseVwiLFxuICAgICAgQ291bnRyeUNvZGU6IFwiSVRcIixcbiAgICAgIEZsYWc6IFwiRmxhZ0lUXCJcbiAgICB9LFxuICAgIHtcbiAgICAgIENvdW50cnlOYW1lOiBcIkl2b3J5IENvYXN0XCIsXG4gICAgICBDb3VudHJ5Q29kZTogXCJJQ1wiLFxuICAgICAgRmxhZzogXCJGbGFnSUNcIlxuICAgIH0sXG4gICAge1xuICAgICAgQ291bnRyeU5hbWU6IFwiSmFtYWljYVwiLFxuICAgICAgQ291bnRyeUNvZGU6IFwiSkFNXCIsXG4gICAgICBGbGFnOiBcIkZsYWdKQU1cIlxuICAgIH0sXG4gICAge1xuICAgICAgQ291bnRyeU5hbWU6IFwiSmFwYW5cIixcbiAgICAgIENvdW50cnlDb2RlOiBcIkpBUFwiLFxuICAgICAgRmxhZzogXCJGbGFnSkFQXCJcbiAgICB9LFxuICAgIHtcbiAgICAgIENvdW50cnlOYW1lOiBcIkpvcmRhblwiLFxuICAgICAgQ291bnRyeUNvZGU6IFwiSk9SXCIsXG4gICAgICBGbGFnOiBcIkZsYWdKT1JcIlxuICAgIH0sXG4gICAge1xuICAgICAgQ291bnRyeU5hbWU6IFwiS2VueWFcIixcbiAgICAgIENvdW50cnlDb2RlOiBcIktFTlwiLFxuICAgICAgRmxhZzogXCJGbGFnS0VOXCJcbiAgICB9LFxuICAgIHtcbiAgICAgIENvdW50cnlOYW1lOiBcIktpcmliYXRpXCIsXG4gICAgICBDb3VudHJ5Q29kZTogXCJLSVwiLFxuICAgICAgRmxhZzogXCJGbGFnS0lcIlxuICAgIH0sXG4gICAge1xuICAgICAgQ291bnRyeU5hbWU6IFwiS29zb3ZvXCIsXG4gICAgICBDb3VudHJ5Q29kZTogXCJLT1wiLFxuICAgICAgRmxhZzogXCJGbGFnS09cIlxuICAgIH0sXG4gICAge1xuICAgICAgQ291bnRyeU5hbWU6IFwiS3pha2hzdGFuXCIsXG4gICAgICBDb3VudHJ5Q29kZTogXCJLWlwiLFxuICAgICAgRmxhZzogXCJGbGFnS1pcIlxuICAgIH0sXG4gICAge1xuICAgICAgQ291bnRyeU5hbWU6IFwiS3V3YWl0XCIsXG4gICAgICBDb3VudHJ5Q29kZTogXCJLVVwiLFxuICAgICAgRmxhZzogXCJGbGFnS1VcIlxuICAgIH0sXG4gICAge1xuICAgICAgQ291bnRyeU5hbWU6IFwiS3lyZ3l6c3RhblwiLFxuICAgICAgQ291bnRyeUNvZGU6IFwiS1lcIixcbiAgICAgIEZsYWc6IFwiRmxhZ0tZXCJcbiAgICB9LFxuICAgIHtcbiAgICAgIENvdW50cnlOYW1lOiBcIkxhb3NcIixcbiAgICAgIENvdW50cnlDb2RlOiBcIkxBT1wiLFxuICAgICAgRmxhZzogXCJGbGFnTEFPXCJcbiAgICB9LFxuICAgIHtcbiAgICAgIENvdW50cnlOYW1lOiBcIkxhdHZpYVwiLFxuICAgICAgQ291bnRyeUNvZGU6IFwiTEFUXCIsXG4gICAgICBGbGFnOiBcIkZsYWdMQVRcIlxuICAgIH0sXG4gICAge1xuICAgICAgQ291bnRyeU5hbWU6IFwiTGViYW5vblwiLFxuICAgICAgQ291bnRyeUNvZGU6IFwiTEVCXCIsXG4gICAgICBGbGFnOiBcIkZsYWdMRUJcIlxuICAgIH0sXG4gICAge1xuICAgICAgQ291bnRyeU5hbWU6IFwiTGVzb3Rob1wiLFxuICAgICAgQ291bnRyeUNvZGU6IFwiTEVTXCIsXG4gICAgICBGbGFnOiBcIkZsYWdMRVNcIlxuICAgIH0sXG4gICAge1xuICAgICAgQ291bnRyeU5hbWU6IFwiTGliZXJpYVwiLFxuICAgICAgQ291bnRyeUNvZGU6IFwiTElCXCIsXG4gICAgICBGbGFnOiBcIkZsYWdMSUJcIlxuICAgIH0sXG4gICAge1xuICAgICAgQ291bnRyeU5hbWU6IFwiTGlieWFcIixcbiAgICAgIENvdW50cnlDb2RlOiBcIkxJXCIsXG4gICAgICBGbGFnOiBcIkZsYWdMSVwiXG4gICAgfSxcbiAgICB7XG4gICAgICBDb3VudHJ5TmFtZTogXCJMaWVjaHRlbnN0ZWluXCIsXG4gICAgICBDb3VudHJ5Q29kZTogXCJMSU5cIixcbiAgICAgIEZsYWc6IFwiRmxhZ0xJTlwiXG4gICAgfSxcbiAgICB7XG4gICAgICBDb3VudHJ5TmFtZTogXCJMaXRodWFuaWFcIixcbiAgICAgIENvdW50cnlDb2RlOiBcIkxJVFwiLFxuICAgICAgRmxhZzogXCJGbGFnTElUXCJcbiAgICB9LFxuICAgIHtcbiAgICAgIENvdW50cnlOYW1lOiBcIkx1eGVtYm91cmdcIixcbiAgICAgIENvdW50cnlDb2RlOiBcIkxVWFwiLFxuICAgICAgRmxhZzogXCJGbGFnTFVYXCJcbiAgICB9LFxuICAgIC8vIHtcbiAgICAvLyAgIENvdW50cnlOYW1lOiAnTWFjYXUnLFxuICAgIC8vICAgQ291bnRyeUNvZGU6ICdNQScsXG4gICAgLy8gICBGbGFnOiBcIkZsYWdNQVwiLFxuICAgIC8vIH0sXG4gICAge1xuICAgICAgQ291bnRyeU5hbWU6IFwiTWFjZWRvbmlhXCIsXG4gICAgICBDb3VudHJ5Q29kZTogXCJNQUVcIixcbiAgICAgIEZsYWc6IFwiRmxhZ01BRVwiXG4gICAgfSxcbiAgICB7XG4gICAgICBDb3VudHJ5TmFtZTogXCJNYWRhZ2FzY2FyXCIsXG4gICAgICBDb3VudHJ5Q29kZTogXCJtZ1wiLFxuICAgICAgRmxhZzogXCJGbGFnTUdcIlxuICAgIH0sXG4gICAge1xuICAgICAgQ291bnRyeU5hbWU6IFwiTWFsYXdpXCIsXG4gICAgICBDb3VudHJ5Q29kZTogXCJNQVdcIixcbiAgICAgIEZsYWc6IFwiRmxhZ01BV1wiXG4gICAgfSxcbiAgICB7XG4gICAgICBDb3VudHJ5TmFtZTogXCJNYWxheXNpYVwiLFxuICAgICAgQ291bnRyeUNvZGU6IFwiTUFMXCIsXG4gICAgICBGbGFnOiBcIkZsYWdNQUxcIlxuICAgIH0sXG4gICAge1xuICAgICAgQ291bnRyeU5hbWU6IFwiTWFsZGl2ZXNcIixcbiAgICAgIENvdW50cnlDb2RlOiBcIk1WXCIsXG4gICAgICBGbGFnOiBcIkZsYWdNVlwiXG4gICAgfSxcbiAgICB7XG4gICAgICBDb3VudHJ5TmFtZTogXCJNYWxpXCIsXG4gICAgICBDb3VudHJ5Q29kZTogXCJNSVwiLFxuICAgICAgRmxhZzogXCJGbGFnTUlcIlxuICAgIH0sXG4gICAge1xuICAgICAgQ291bnRyeU5hbWU6IFwiTWFsdGFcIixcbiAgICAgIENvdW50cnlDb2RlOiBcIk1UXCIsXG4gICAgICBGbGFnOiBcIkZsYWdNVFwiXG4gICAgfSxcbiAgICB7XG4gICAgICBDb3VudHJ5TmFtZTogXCJNYXJzaGFsbCBJc2xhbmRzXCIsXG4gICAgICBDb3VudHJ5Q29kZTogXCJNSVNcIixcbiAgICAgIEZsYWc6IFwiRmxhZ01JU1wiXG4gICAgfSxcbiAgICB7XG4gICAgICBDb3VudHJ5TmFtZTogXCJNYXVyaXRhbmlhXCIsXG4gICAgICBDb3VudHJ5Q29kZTogXCJNVVwiLFxuICAgICAgRmxhZzogXCJGbGFnTVVcIlxuICAgIH0sXG4gICAge1xuICAgICAgQ291bnRyeU5hbWU6IFwiTWF1cml0aXVzXCIsXG4gICAgICBDb3VudHJ5Q29kZTogXCJNQVVcIixcbiAgICAgIEZsYWc6IFwiRmxhZ01BVVwiXG4gICAgfSxcbiAgICB7XG4gICAgICBDb3VudHJ5TmFtZTogXCJNZXhpY29cIixcbiAgICAgIENvdW50cnlDb2RlOiBcIk1YXCIsXG4gICAgICBGbGFnOiBcIkZsYWdNWFwiXG4gICAgfSxcbiAgICB7XG4gICAgICBDb3VudHJ5TmFtZTogXCJNb2xkb3ZhXCIsXG4gICAgICBDb3VudHJ5Q29kZTogXCJNT1wiLFxuICAgICAgRmxhZzogXCJGbGFnTU9cIlxuICAgIH0sXG4gICAge1xuICAgICAgQ291bnRyeU5hbWU6IFwiTW9uYWNvXCIsXG4gICAgICBDb3VudHJ5Q29kZTogXCJNT05cIixcbiAgICAgIEZsYWc6IFwiRmxhZ01PTlwiXG4gICAgfSxcbiAgICB7XG4gICAgICBDb3VudHJ5TmFtZTogXCJNb25nb2xpYVwiLFxuICAgICAgQ291bnRyeUNvZGU6IFwiTUdMXCIsXG4gICAgICBGbGFnOiBcIkZsYWdNR0xcIlxuICAgIH0sXG4gICAge1xuICAgICAgQ291bnRyeU5hbWU6IFwiTW9udGVuZWdyb1wiLFxuICAgICAgQ291bnRyeUNvZGU6IFwiTU9HXCIsXG4gICAgICBGbGFnOiBcIkZsYWdNT0dcIlxuICAgIH0sXG4gICAge1xuICAgICAgQ291bnRyeU5hbWU6IFwiTW9yb2Njb1wiLFxuICAgICAgQ291bnRyeUNvZGU6IFwiTU9SXCIsXG4gICAgICBGbGFnOiBcIkZsYWdNT1JcIlxuICAgIH0sXG4gICAge1xuICAgICAgQ291bnRyeU5hbWU6IFwiTW96YW1iaXF1ZVwiLFxuICAgICAgQ291bnRyeUNvZGU6IFwiTVpcIixcbiAgICAgIEZsYWc6IFwiRmxhZ01aXCJcbiAgICB9LFxuICAgIHtcbiAgICAgIENvdW50cnlOYW1lOiBcIk15YW5tYXJcIixcbiAgICAgIENvdW50cnlDb2RlOiBcIk1ZXCIsXG4gICAgICBGbGFnOiBcIkZsYWdNWVwiXG4gICAgfSxcbiAgICB7XG4gICAgICBDb3VudHJ5TmFtZTogXCJOYWdvcm5vLUthcmFiYWtqXCIsXG4gICAgICBDb3VudHJ5Q29kZTogXCJOS1wiLFxuICAgICAgRmxhZzogXCJGbGFnTktcIlxuICAgIH0sXG4gICAge1xuICAgICAgQ291bnRyeU5hbWU6IFwiTmFtaWJpYVwiLFxuICAgICAgQ291bnRyeUNvZGU6IFwiTk1cIixcbiAgICAgIEZsYWc6IFwiRmxhZ05NXCJcbiAgICB9LFxuICAgIHtcbiAgICAgIENvdW50cnlOYW1lOiBcIk5hdXJ1XCIsXG4gICAgICBDb3VudHJ5Q29kZTogXCJOQVwiLFxuICAgICAgRmxhZzogXCJGbGFnTkFcIlxuICAgIH0sXG4gICAge1xuICAgICAgQ291bnRyeU5hbWU6IFwiTmVwYWxcIixcbiAgICAgIENvdW50cnlDb2RlOiBcIk5QXCIsXG4gICAgICBGbGFnOiBcIkZsYWdOUFwiXG4gICAgfSxcbiAgICB7XG4gICAgICBDb3VudHJ5TmFtZTogXCJOZXRoZXJsYW5kc1wiLFxuICAgICAgQ291bnRyeUNvZGU6IFwiTkxcIixcbiAgICAgIEZsYWc6IFwiRmxhZ05MXCJcbiAgICB9LFxuICAgIHtcbiAgICAgIENvdW50cnlOYW1lOiBcIk5ldyBaZWFsYW5kXCIsXG4gICAgICBDb3VudHJ5Q29kZTogXCJOWlwiLFxuICAgICAgRmxhZzogXCJGbGFnTlpcIlxuICAgIH0sXG4gICAge1xuICAgICAgQ291bnRyeU5hbWU6IFwiTmljYXJhZ3VhXCIsXG4gICAgICBDb3VudHJ5Q29kZTogXCJOSUNcIixcbiAgICAgIEZsYWc6IFwiRmxhZ05JQ1wiXG4gICAgfSxcbiAgICB7XG4gICAgICBDb3VudHJ5TmFtZTogXCJOaWdlclwiLFxuICAgICAgQ291bnRyeUNvZGU6IFwiTklHXCIsXG4gICAgICBGbGFnOiBcIkZsYWdOSUdcIlxuICAgIH0sXG4gICAge1xuICAgICAgQ291bnRyeU5hbWU6IFwiTmlnZXJpYVwiLFxuICAgICAgQ291bnRyeUNvZGU6IFwiTkdBXCIsXG4gICAgICBGbGFnOiBcIkZsYWdOR0FcIlxuICAgIH0sXG4gICAge1xuICAgICAgQ291bnRyeU5hbWU6IFwiTml1ZVwiLFxuICAgICAgQ291bnRyeUNvZGU6IFwiTklcIixcbiAgICAgIEZsYWc6IFwiRmxhZ05JXCJcbiAgICB9LFxuICAgIHtcbiAgICAgIENvdW50cnlOYW1lOiBcIk5vcnRoIEtvcmVhXCIsXG4gICAgICBDb3VudHJ5Q29kZTogXCJOS09cIixcbiAgICAgIEZsYWc6IFwiRmxhZ05LT1wiXG4gICAgfSxcbiAgICB7XG4gICAgICBDb3VudHJ5TmFtZTogXCJOb3J0aGVybiBDeXBydXNcIixcbiAgICAgIENvdW50cnlDb2RlOiBcIk5DXCIsXG4gICAgICBGbGFnOiBcIkZsYWdOQ1wiXG4gICAgfSxcbiAgICB7XG4gICAgICBDb3VudHJ5TmFtZTogXCJOb3J3YXlcIixcbiAgICAgIENvdW50cnlDb2RlOiBcIk5ZXCIsXG4gICAgICBGbGFnOiBcIkZsYWdOWVwiXG4gICAgfSxcbiAgICB7XG4gICAgICBDb3VudHJ5TmFtZTogXCJPcm1hblwiLFxuICAgICAgQ291bnRyeUNvZGU6IFwiT1JcIixcbiAgICAgIEZsYWc6IFwiRmxhZ09SXCJcbiAgICB9LFxuICAgIHtcbiAgICAgIENvdW50cnlOYW1lOiBcIlBha2lzdGFuXCIsXG4gICAgICBDb3VudHJ5Q29kZTogXCJQS1wiLFxuICAgICAgRmxhZzogXCJGbGFnUEtcIlxuICAgIH0sXG4gICAge1xuICAgICAgQ291bnRyeU5hbWU6IFwiUGFsYXVcIixcbiAgICAgIENvdW50cnlDb2RlOiBcIlBBXCIsXG4gICAgICBGbGFnOiBcIkZsYWdQQVwiXG4gICAgfSxcbiAgICB7XG4gICAgICBDb3VudHJ5TmFtZTogXCJQYWxlc3RpbmVcIixcbiAgICAgIENvdW50cnlDb2RlOiBcIlBBTFwiLFxuICAgICAgRmxhZzogXCJGbGFnUEFMXCJcbiAgICB9LFxuICAgIHtcbiAgICAgIENvdW50cnlOYW1lOiBcIlBhcGEgTmV3IEd1aW5lYVwiLFxuICAgICAgQ291bnRyeUNvZGU6IFwiUE5HXCIsXG4gICAgICBGbGFnOiBcIkZsYWdQTkdcIlxuICAgIH0sXG4gICAge1xuICAgICAgQ291bnRyeU5hbWU6IFwiUGFyYWd1YXlcIixcbiAgICAgIENvdW50cnlDb2RlOiBcIlBBUlwiLFxuICAgICAgRmxhZzogXCJGbGFnUEFSXCJcbiAgICB9LFxuICAgIHtcbiAgICAgIENvdW50cnlOYW1lOiBcIlBlcnVcIixcbiAgICAgIENvdW50cnlDb2RlOiBcIlBFXCIsXG4gICAgICBGbGFnOiBcIkZsYWdQRVwiXG4gICAgfSxcbiAgICB7XG4gICAgICBDb3VudHJ5TmFtZTogXCJQaGlsbGlwcGluZXNcIixcbiAgICAgIENvdW50cnlDb2RlOiBcIlBIXCIsXG4gICAgICBGbGFnOiBcIkZsYWdQSFwiXG4gICAgfSxcbiAgICB7XG4gICAgICBDb3VudHJ5TmFtZTogXCJQb2xhbmRcIixcbiAgICAgIENvdW50cnlDb2RlOiBcIlBMXCIsXG4gICAgICBGbGFnOiBcIkZsYWdQTFwiXG4gICAgfSxcbiAgICB7XG4gICAgICBDb3VudHJ5TmFtZTogXCJQb3J0dWdhbFwiLFxuICAgICAgQ291bnRyeUNvZGU6IFwiUE9SXCIsXG4gICAgICBGbGFnOiBcIkZsYWdQT1JcIlxuICAgIH0sXG4gICAge1xuICAgICAgQ291bnRyeU5hbWU6IFwiUHVlcnRvIFJpY2FcIixcbiAgICAgIENvdW50cnlDb2RlOiBcIlBSXCIsXG4gICAgICBGbGFnOiBcIkZsYWdQUlwiXG4gICAgfSxcbiAgICB7XG4gICAgICBDb3VudHJ5TmFtZTogXCJRYXRhclwiLFxuICAgICAgQ291bnRyeUNvZGU6IFwiUVRcIixcbiAgICAgIEZsYWc6IFwiRmxhZ1FUXCJcbiAgICB9LFxuICAgIHtcbiAgICAgIENvdW50cnlOYW1lOiBcIlJlcHVibGljIG9mIENoaW5hXCIsXG4gICAgICBDb3VudHJ5Q29kZTogXCJSQ1wiLFxuICAgICAgRmxhZzogXCJGbGFnUkNcIlxuICAgIH0sXG4gICAge1xuICAgICAgQ291bnRyeU5hbWU6IFwiUm9tYW5pYVwiLFxuICAgICAgQ291bnRyeUNvZGU6IFwiUk9cIixcbiAgICAgIEZsYWc6IFwiRmxhZ1JPXCJcbiAgICB9LFxuICAgIHtcbiAgICAgIENvdW50cnlOYW1lOiBcIlJ1c3NpYVwiLFxuICAgICAgQ291bnRyeUNvZGU6IFwiUlVcIixcbiAgICAgIEZsYWc6IFwiRmxhZ1JVXCJcbiAgICB9LFxuICAgIHtcbiAgICAgIENvdW50cnlOYW1lOiBcIlJ3YW5kYVwiLFxuICAgICAgQ291bnRyeUNvZGU6IFwiUldcIixcbiAgICAgIEZsYWc6IFwiRmxhZ1JXXCJcbiAgICB9LFxuICAgIHtcbiAgICAgIENvdW50cnlOYW1lOiBcIlNhaHJhd2kgQXJhYiBEZW1vY3JhdGljIFJlcHVibGljXCIsXG4gICAgICBDb3VudHJ5Q29kZTogXCJTQVwiLFxuICAgICAgRmxhZzogXCJGbGFnU0FcIlxuICAgIH0sXG4gICAge1xuICAgICAgQ291bnRyeU5hbWU6IFwiU2FpbnQgS2l0dHMgYW5kIE5ldmlzXCIsXG4gICAgICBDb3VudHJ5Q29kZTogXCJTS1wiLFxuICAgICAgRmxhZzogXCJGbGFnU0tcIlxuICAgIH0sXG4gICAge1xuICAgICAgQ291bnRyeU5hbWU6IFwiU2FpbnQgTHVjaWFcIixcbiAgICAgIENvdW50cnlDb2RlOiBcIlNMXCIsXG4gICAgICBGbGFnOiBcIkZsYWdTTFwiXG4gICAgfSxcbiAgICB7XG4gICAgICBDb3VudHJ5TmFtZTogXCJTYW1vYVwiLFxuICAgICAgQ291bnRyeUNvZGU6IFwiU0FNXCIsXG4gICAgICBGbGFnOiBcIkZsYWdTQU1cIlxuICAgIH0sXG4gICAge1xuICAgICAgQ291bnRyeU5hbWU6IFwiU2FuIE1hcmlub1wiLFxuICAgICAgQ291bnRyeUNvZGU6IFwiU01cIixcbiAgICAgIEZsYWc6IFwiRmxhZ1NNXCJcbiAgICB9LFxuICAgIHtcbiAgICAgIENvdW50cnlOYW1lOiBcIlNhbyBUb21lIGFuZCBQcmluY2lwZVwiLFxuICAgICAgQ291bnRyeUNvZGU6IFwiU1RQXCIsXG4gICAgICBGbGFnOiBcIkZsYWdTVFBcIlxuICAgIH0sXG4gICAge1xuICAgICAgQ291bnRyeU5hbWU6IFwiU2F1ZGkgQXJhYmlhXCIsXG4gICAgICBDb3VudHJ5Q29kZTogXCJTQVVcIixcbiAgICAgIEZsYWc6IFwiRmxhZ1NBVVwiXG4gICAgfSxcbiAgICB7XG4gICAgICBDb3VudHJ5TmFtZTogXCJTZW5lZ2FsXCIsXG4gICAgICBDb3VudHJ5Q29kZTogXCJTRU5cIixcbiAgICAgIEZsYWc6IFwiRmxhZ1NFTlwiXG4gICAgfSxcbiAgICB7XG4gICAgICBDb3VudHJ5TmFtZTogXCJTZXJiaWFcIixcbiAgICAgIENvdW50cnlDb2RlOiBcIlNFUlwiLFxuICAgICAgRmxhZzogXCJGbGFnU0VSXCJcbiAgICB9LFxuICAgIHtcbiAgICAgIENvdW50cnlOYW1lOiBcIlNleWNoZWxsZXNcIixcbiAgICAgIENvdW50cnlDb2RlOiBcIlNZXCIsXG4gICAgICBGbGFnOiBcIkZsYWdTWVwiXG4gICAgfSxcbiAgICB7XG4gICAgICBDb3VudHJ5TmFtZTogXCJTaWVycmEgTGVvbmVcIixcbiAgICAgIENvdW50cnlDb2RlOiBcIlNMRVwiLFxuICAgICAgRmxhZzogXCJGbGFnU0xFXCJcbiAgICB9LFxuICAgIHtcbiAgICAgIENvdW50cnlOYW1lOiBcIlNpbmdhcG9yZVwiLFxuICAgICAgQ291bnRyeUNvZGU6IFwiU0dQXCIsXG4gICAgICBGbGFnOiBcIkZsYWdTR1BcIlxuICAgIH0sXG4gICAge1xuICAgICAgQ291bnRyeU5hbWU6IFwiU2xvdmFraWFcIixcbiAgICAgIENvdW50cnlDb2RlOiBcIlNMT1wiLFxuICAgICAgRmxhZzogXCJGbGFnU0xPXCJcbiAgICB9LFxuICAgIHtcbiAgICAgIENvdW50cnlOYW1lOiBcIlNsb3ZlbmlhXCIsXG4gICAgICBDb3VudHJ5Q29kZTogXCJTTFZcIixcbiAgICAgIEZsYWc6IFwiRmxhZ1NMVlwiXG4gICAgfSxcbiAgICB7XG4gICAgICBDb3VudHJ5TmFtZTogXCJTb2xvbW9uIElzbGFuZHNcIixcbiAgICAgIENvdW50cnlDb2RlOiBcIlNJXCIsXG4gICAgICBGbGFnOiBcIkZsYWdTSVwiXG4gICAgfSxcbiAgICB7XG4gICAgICBDb3VudHJ5TmFtZTogXCJTb21hbGlhXCIsXG4gICAgICBDb3VudHJ5Q29kZTogXCJTT01cIixcbiAgICAgIEZsYWc6IFwiRmxhZ1NPTVwiXG4gICAgfSxcbiAgICB7XG4gICAgICBDb3VudHJ5TmFtZTogXCJTb21hbGlsYW5kXCIsXG4gICAgICBDb3VudHJ5Q29kZTogXCJTTURcIixcbiAgICAgIEZsYWc6IFwiRmxhZ1NNRFwiXG4gICAgfSxcbiAgICB7XG4gICAgICBDb3VudHJ5TmFtZTogXCJTb3V0aCBBZnJpY2FcIixcbiAgICAgIENvdW50cnlDb2RlOiBcIlNBRlwiLFxuICAgICAgRmxhZzogXCJGbGFnU0FGXCJcbiAgICB9LFxuICAgIHtcbiAgICAgIENvdW50cnlOYW1lOiBcIlNvdXRoIEtvcmVhXCIsXG4gICAgICBDb3VudHJ5Q29kZTogXCJTS09cIixcbiAgICAgIEZsYWc6IFwiRmxhZ1NLT1wiXG4gICAgfSxcbiAgICB7XG4gICAgICBDb3VudHJ5TmFtZTogXCJTb3V0aCBPc3NldGlhXCIsXG4gICAgICBDb3VudHJ5Q29kZTogXCJTT1wiLFxuICAgICAgRmxhZzogXCJGbGFnU09cIlxuICAgIH0sXG4gICAge1xuICAgICAgQ291bnRyeU5hbWU6IFwiU291dGggU3VkYW5cIixcbiAgICAgIENvdW50cnlDb2RlOiBcIlNTXCIsXG4gICAgICBGbGFnOiBcIkZsYWdTU1wiXG4gICAgfSxcbiAgICB7XG4gICAgICBDb3VudHJ5TmFtZTogXCJTcGFpblwiLFxuICAgICAgQ291bnRyeUNvZGU6IFwiU1BcIixcbiAgICAgIEZsYWc6IFwiRmxhZ1NQXCJcbiAgICB9LFxuICAgIHtcbiAgICAgIENvdW50cnlOYW1lOiBcIlNyaSBMYW5rYVwiLFxuICAgICAgQ291bnRyeUNvZGU6IFwiU0xBXCIsXG4gICAgICBGbGFnOiBcIkZsYWdTTEFcIlxuICAgIH0sXG4gICAge1xuICAgICAgQ291bnRyeU5hbWU6IFwiU3QuIFZpbmNlbnQgYW5kIHRoZSBHcmVuYWRpbmVzXCIsXG4gICAgICBDb3VudHJ5Q29kZTogXCJTVlwiLFxuICAgICAgRmxhZzogXCJGbGFnU1ZcIlxuICAgIH0sXG4gICAge1xuICAgICAgQ291bnRyeU5hbWU6IFwiU3VkYW5cIixcbiAgICAgIENvdW50cnlDb2RlOiBcIlNVRFwiLFxuICAgICAgRmxhZzogXCJGbGFnU1VEXCJcbiAgICB9LFxuICAgIHtcbiAgICAgIENvdW50cnlOYW1lOiBcIlN1cmluYW1lXCIsXG4gICAgICBDb3VudHJ5Q29kZTogXCJTVVwiLFxuICAgICAgRmxhZzogXCJGbGFnU1VcIlxuICAgIH0sXG4gICAge1xuICAgICAgQ291bnRyeU5hbWU6IFwiU3dhemlsYW5kXCIsXG4gICAgICBDb3VudHJ5Q29kZTogXCJTV0FcIixcbiAgICAgIEZsYWc6IFwiRmxhZ1NXQVwiXG4gICAgfSxcbiAgICB7XG4gICAgICBDb3VudHJ5TmFtZTogXCJTd2VkZW5cIixcbiAgICAgIENvdW50cnlDb2RlOiBcIlNXRFwiLFxuICAgICAgRmxhZzogXCJGbGFnU1dEXCJcbiAgICB9LFxuICAgIHtcbiAgICAgIENvdW50cnlOYW1lOiBcIlN3aXR6ZXJsYW5kXCIsXG4gICAgICBDb3VudHJ5Q29kZTogXCJTV1wiLFxuICAgICAgRmxhZzogXCJGbGFnU1dcIlxuICAgIH0sXG4gICAge1xuICAgICAgQ291bnRyeU5hbWU6IFwiU3lyaWFcIixcbiAgICAgIENvdW50cnlDb2RlOiBcIlNZUlwiLFxuICAgICAgRmxhZzogXCJGbGFnU1lSXCJcbiAgICB9LFxuICAgIHtcbiAgICAgIENvdW50cnlOYW1lOiBcIlRhamlraXN0YW5cIixcbiAgICAgIENvdW50cnlDb2RlOiBcIlRBSlwiLFxuICAgICAgRmxhZzogXCJGbGFnVEFKXCJcbiAgICB9LFxuICAgIHtcbiAgICAgIENvdW50cnlOYW1lOiBcIlRhbnphbmlhXCIsXG4gICAgICBDb3VudHJ5Q29kZTogXCJUQVwiLFxuICAgICAgRmxhZzogXCJGbGFnVEFcIlxuICAgIH0sXG4gICAge1xuICAgICAgQ291bnRyeU5hbWU6IFwiVGhhaWxhbmRcIixcbiAgICAgIENvdW50cnlDb2RlOiBcIlRIXCIsXG4gICAgICBGbGFnOiBcIkZsYWdUSFwiXG4gICAgfSxcbiAgICB7XG4gICAgICBDb3VudHJ5TmFtZTogXCJUb2dvXCIsXG4gICAgICBDb3VudHJ5Q29kZTogXCJUT0dcIixcbiAgICAgIEZsYWc6IFwiRmxhZ1RPR1wiXG4gICAgfSxcbiAgICB7XG4gICAgICBDb3VudHJ5TmFtZTogXCJUb25nYVwiLFxuICAgICAgQ291bnRyeUNvZGU6IFwiVE9cIixcbiAgICAgIEZsYWc6IFwiRmxhZ1RPXCJcbiAgICB9LFxuICAgIHtcbiAgICAgIENvdW50cnlOYW1lOiBcIlRyYW5zbmlzdHJpYVwiLFxuICAgICAgQ291bnRyeUNvZGU6IFwiVFJcIixcbiAgICAgIEZsYWc6IFwiRmxhZ1RSXCJcbiAgICB9LFxuICAgIHtcbiAgICAgIENvdW50cnlOYW1lOiBcIlRyaW5pZGFkICYgVG9iYWdvXCIsXG4gICAgICBDb3VudHJ5Q29kZTogXCJUVFwiLFxuICAgICAgRmxhZzogXCJGbGFnVFRcIlxuICAgIH0sXG4gICAge1xuICAgICAgQ291bnRyeU5hbWU6IFwiVHVuaXNpYVwiLFxuICAgICAgQ291bnRyeUNvZGU6IFwiVFVOXCIsXG4gICAgICBGbGFnOiBcIkZsYWdUVU5cIlxuICAgIH0sXG4gICAge1xuICAgICAgQ291bnRyeU5hbWU6IFwiVHVya2V5XCIsXG4gICAgICBDb3VudHJ5Q29kZTogXCJUVVJcIixcbiAgICAgIEZsYWc6IFwiRmxhZ1RVUlwiXG4gICAgfSxcbiAgICB7XG4gICAgICBDb3VudHJ5TmFtZTogXCJUdXJrbWVuaXN0YW5cIixcbiAgICAgIENvdW50cnlDb2RlOiBcIlRLXCIsXG4gICAgICBGbGFnOiBcIkZsYWdUS1wiXG4gICAgfSxcbiAgICB7XG4gICAgICBDb3VudHJ5TmFtZTogXCJUdXZhbHVcIixcbiAgICAgIENvdW50cnlDb2RlOiBcIlRVXCIsXG4gICAgICBGbGFnOiBcIkZsYWdUVVwiXG4gICAgfSxcbiAgICB7XG4gICAgICBDb3VudHJ5TmFtZTogXCJVLlMuIFZpcmdpbiBJc2xhbmRzXCIsXG4gICAgICBDb3VudHJ5Q29kZTogXCJWSVwiLFxuICAgICAgRmxhZzogXCJGbGFnVklcIlxuICAgIH0sXG4gICAge1xuICAgICAgQ291bnRyeU5hbWU6IFwiVWdhbmRhXCIsXG4gICAgICBDb3VudHJ5Q29kZTogXCJVR1wiLFxuICAgICAgRmxhZzogXCJGbGFnVUdcIlxuICAgIH0sXG4gICAge1xuICAgICAgQ291bnRyeU5hbWU6IFwiVWtyYWluZVwiLFxuICAgICAgQ291bnRyeUNvZGU6IFwiVUtSXCIsXG4gICAgICBGbGFnOiBcIkZsYWdVS1JcIlxuICAgIH0sXG4gICAge1xuICAgICAgQ291bnRyeU5hbWU6IFwiVW5pdGVkIEFyYWIgRW1pcmF0ZXNcIixcbiAgICAgIENvdW50cnlDb2RlOiBcIkFFXCIsXG4gICAgICBGbGFnOiBcIkZsYWdBRVwiXG4gICAgfSxcbiAgICB7XG4gICAgICBDb3VudHJ5TmFtZTogXCJVbml0ZWQgS2luZ2RvbVwiLFxuICAgICAgQ291bnRyeUNvZGU6IFwiVUtcIixcbiAgICAgIEZsYWc6IFwiRmxhZ1VLXCJcbiAgICB9LFxuICAgIHtcbiAgICAgIENvdW50cnlOYW1lOiBcIlV6YmVraXN0YW5cIixcbiAgICAgIENvdW50cnlDb2RlOiBcIlVaXCIsXG4gICAgICBGbGFnOiBcIkZsYWdVWlwiXG4gICAgfSxcbiAgICB7XG4gICAgICBDb3VudHJ5TmFtZTogXCJWYXRpY2FuIENpdHlcIixcbiAgICAgIENvdW50cnlDb2RlOiBcIlZDXCIsXG4gICAgICBGbGFnOiBcIkZsYWdWQ1wiXG4gICAgfSxcbiAgICB7XG4gICAgICBDb3VudHJ5TmFtZTogXCJWZW5lenVlbGFcIixcbiAgICAgIENvdW50cnlDb2RlOiBcIlZOXCIsXG4gICAgICBGbGFnOiBcIkZsYWdWTlwiXG4gICAgfSxcbiAgICB7XG4gICAgICBDb3VudHJ5TmFtZTogXCJWaWV0bmFtXCIsXG4gICAgICBDb3VudHJ5Q29kZTogXCJWVFwiLFxuICAgICAgRmxhZzogXCJGbGFnVlRcIlxuICAgIH0sXG4gICAge1xuICAgICAgQ291bnRyeU5hbWU6IFwiWWVtZW5cIixcbiAgICAgIENvdW50cnlDb2RlOiBcIllNXCIsXG4gICAgICBGbGFnOiBcIkZsYWdZTVwiXG4gICAgfSxcbiAgICB7XG4gICAgICBDb3VudHJ5TmFtZTogXCJaYW1iaWFcIixcbiAgICAgIENvdW50cnlDb2RlOiBcIlpBXCIsXG4gICAgICBGbGFnOiBcIkZsYWdaQVwiXG4gICAgfSxcbiAgICB7XG4gICAgICBDb3VudHJ5TmFtZTogXCJCcml0aXNoIFZpcmdpbiBJc2xhbmRzXCIsXG4gICAgICBDb3VudHJ5Q29kZTogXCJCVlwiLFxuICAgICAgRmxhZzogXCJGbGFnQlZcIlxuICAgIH0sXG4gICAge1xuICAgICAgQ291bnRyeU5hbWU6IFwiQ2F5bWFuIElzbGFuZHNcIixcbiAgICAgIENvdW50cnlDb2RlOiBcIkNBWVwiLFxuICAgICAgRmxhZzogXCJGbGFnQ0FZXCJcbiAgICB9LFxuICAgIHtcbiAgICAgIENvdW50cnlOYW1lOiBcIkN1cmFjYW9cIixcbiAgICAgIENvdW50cnlDb2RlOiBcIkNVUlwiLFxuICAgICAgRmxhZzogXCJGbGFnQ1VSXCJcbiAgICB9LFxuICAgIHtcbiAgICAgIENvdW50cnlOYW1lOiBcIkd1ZXJuc2V5XCIsXG4gICAgICBDb3VudHJ5Q29kZTogXCJHVUVcIixcbiAgICAgIEZsYWc6IFwiRmxhZ0dVRVwiXG4gICAgfSxcbiAgICB7XG4gICAgICBDb3VudHJ5TmFtZTogXCJKZXJzZXlcIixcbiAgICAgIENvdW50cnlDb2RlOiBcIkpFXCIsXG4gICAgICBGbGFnOiBcIkZsYWdKRVwiXG4gICAgfSxcbiAgICB7XG4gICAgICBDb3VudHJ5TmFtZTogXCJaaW1iYWJ3ZVwiLFxuICAgICAgQ291bnRyeUNvZGU6IFwiWk1cIixcbiAgICAgIEZsYWc6IFwiRmxhZ1pNXCJcbiAgICB9LFxuICAgIHtcbiAgICAgIENvdW50cnlOYW1lOiBcIk1hZGFnYXNjYXJcIixcbiAgICAgIENvdW50cnlDb2RlOiBcIk1HXCIsXG4gICAgICBGbGFnOiBcIkZsYWdNR1wiXG4gICAgfVxuICBdXG59O1xuZnVuY3Rpb24gaTQoZSkge1xuICBjb25zdCBbdCwgb10gPSBUMShcIlwiKTtcbiAgcmV0dXJuIFAxKCgpID0+IHtcbiAgICB2YXIgbjtcbiAgICAobiA9IEoyLkNvdW50cmllcykgPT0gbnVsbCB8fCBuLm1hcCgocikgPT4ge1xuICAgICAgKGUubmFtZSA9PSByLkZsYWcgfHwgZS5uYW1lID09IHIuQ291bnRyeU5hbWUpICYmIG8oci5Db3VudHJ5Q29kZS50b0xvd2VyQ2FzZSgpKTtcbiAgICB9KTtcbiAgfSwgW2UubmFtZV0pLCB0ICYmIC8qIEBfX1BVUkVfXyAqLyBlMShcbiAgICBtbCxcbiAgICB7XG4gICAgICBjbGFzc05hbWU6IFwiaWNvbi1mbGFnXCIsXG4gICAgICAuLi5lLFxuICAgICAgaGlkZUNsYXNzTmFtZTogZS5oaWRlQ2xhc3NOYW1lLFxuICAgICAgY2hpbGRyZW46IFtcbiAgICAgICAgLyogQF9fUFVSRV9fICovIGMoXG4gICAgICAgICAgU2YsXG4gICAgICAgICAge1xuICAgICAgICAgICAgc3JjOiBgJHt4TCh7XG4gICAgICAgICAgICAgIGNsYXNzZXM6ICgpID0+IFt0XVxuICAgICAgICAgICAgfSl9YCxcbiAgICAgICAgICAgIGFsdDogdFxuICAgICAgICAgIH1cbiAgICAgICAgKSxcbiAgICAgICAgZS5oaWRlQ2xhc3NOYW1lICE9IG51bGwgJiYgIWUuaGlkZUNsYXNzTmFtZSAmJiAvKiBAX19QVVJFX18gKi8gYyhCZiwgeyBjaGlsZHJlbjogdCB9KVxuICAgICAgXVxuICAgIH0sXG4gICAgZS5uYW1lXG4gICk7XG59XG5mdW5jdGlvbiBXTChlLCB0KSB7XG4gIGNvbnN0IHtcbiAgICBkaXNhYmxlZDogbyxcbiAgICBpY29uTGVmdDogbixcbiAgICBpY29uUmlnaHQ6IHIsXG4gICAgaWNvblNpemU6IGkgPSBcInh4c1wiLFxuICAgIG9uSWNvbkxlZnRDbGljazogYSxcbiAgICBvbkljb25SaWdodENsaWNrOiBzLFxuICAgIGNvbG9ySWNvbkxlZnQ6IGwgPSBcIiMwMDBcIixcbiAgICBjb2xvckljb25SaWdodDogcCA9IFwiIzAwMFwiLFxuICAgIC4uLmRcbiAgfSA9IGUsIFtiLCBNXSA9IFQxKCksIFt1LCBBXSA9IFQxKCk7XG4gIHJldHVybiBQMSgoKSA9PiB7XG4gICAgbiAhPSBudWxsICYmIG4uaW5jbHVkZXMoXCJGbGFnXCIpICYmIE0obiksIHIgIT0gbnVsbCAmJiByLmluY2x1ZGVzKFwiRmxhZ1wiKSAmJiBBKG4pO1xuICB9LCBbbiwgcl0pLCAvKiBAX19QVVJFX18gKi8gZTEoV2YsIHsgaXNFcnJvcjogZS5pc0Vycm9yLCBjbGFzc05hbWU6IFwiaW5wdXQtd3JhcHBlclwiLCBjaGlsZHJlbjogW1xuICAgIC8qIEBfX1BVUkVfXyAqLyBjKFxuICAgICAgUmYsXG4gICAgICB7XG4gICAgICAgIC4uLmQsXG4gICAgICAgIHJlZjogdCxcbiAgICAgICAgZGlzYWJsZWQ6IG8sXG4gICAgICAgIGljb25MZWZ0OiBuLFxuICAgICAgICBpY29uUmlnaHQ6IHIsXG4gICAgICAgICRpc0Vycm9yOiBlLmlzRXJyb3IsXG4gICAgICAgICRpc1JlYWRPbmx5OiBlLmlzUmVhZE9ubHlcbiAgICAgIH1cbiAgICApLFxuICAgICEhbiAmJiAvKiBAX19QVVJFX18gKi8gYyhuNCwgeyBvbkNsaWNrOiBhLCBpc0Rpc2FibGVkOiBvLCBjaGlsZHJlbjogbi5pbmNsdWRlcyhcIkZsYWdcIikgPyAvKiBAX19QVVJFX18gKi8gYyhpNCwgeyBcImRhdGEtcG9zaXRpb25cIjogXCJsZWZ0XCIsIG5hbWU6IGIsIHNpemU6IGkgfSkgOiAvKiBAX19QVVJFX18gKi8gYyhcbiAgICAgIFoxLFxuICAgICAge1xuICAgICAgICBcImRhdGEtcG9zaXRpb25cIjogXCJsZWZ0XCIsXG4gICAgICAgIG5hbWU6IG4sXG4gICAgICAgIHNpemU6IGksXG4gICAgICAgIGNvbG9yOiBsXG4gICAgICB9XG4gICAgKSB9KSxcbiAgICAhIXIgJiYgLyogQF9fUFVSRV9fICovIGMobjQsIHsgb25DbGljazogcywgaXNEaXNhYmxlZDogbywgY2hpbGRyZW46IHIuaW5jbHVkZXMoXCJGbGFnXCIpID8gLyogQF9fUFVSRV9fICovIGMoaTQsIHsgXCJkYXRhLXBvc2l0aW9uXCI6IFwicmlnaHRcIiwgbmFtZTogdSwgc2l6ZTogaSB9KSA6IC8qIEBfX1BVUkVfXyAqLyBjKFxuICAgICAgWjEsXG4gICAgICB7XG4gICAgICAgIFwiZGF0YS1wb3NpdGlvblwiOiBcInJpZ2h0XCIsXG4gICAgICAgIG5hbWU6IHIsXG4gICAgICAgIHNpemU6IGksXG4gICAgICAgIGNvbG9yOiBwXG4gICAgICB9XG4gICAgKSB9KVxuICBdIH0pO1xufVxuY29uc3QgUkwgPSBCMChXTCksIEJMID0gJC5kaXYoKGUpID0+IHtcbiAgY29uc3QgeyBjb2xvcnM6IHQsIGZvbnRGYW1pbHk6IG8sIHR5cG9ncmFwaHk6IG4sIGZvbnRXZWlnaHQ6IHIsIGxpbmVIZWlnaHQ6IGkgfSA9IGUudGhlbWU7XG4gIGxldCBhID0gdC50ZXh0SWNvbi50ZXh0UHJpbWFyeSwgcyA9IG8uYmFzZSwgbCA9IG4udDI4LCBwID0gXCJub3JtYWxcIiwgZCA9IGkubGgzNiwgYiA9IHIubWVkaXVtLCBNID0gXCIxNi44cHhcIiwgdSA9IFwiMTIuNnB4XCI7XG4gIHN3aXRjaCAoZSAhPSBudWxsICYmIGUuY29sb3IgJiYgKGEgPSBlLmNvbG9yKSwgZSA9PSBudWxsID8gdm9pZCAwIDogZS52YXJpYW50KSB7XG4gICAgY2FzZSBcImRpc3BsYXktbGdcIjpcbiAgICAgIGwgPSBuLnQyOCwgZCA9IGkubGgzOSwgYiA9IHIubWVkaXVtLCBlICE9IG51bGwgJiYgZS5mb250V2VpZ2h0ICYmIChiID0gcltlLmZvbnRXZWlnaHRdKSwgZSAhPSBudWxsICYmIGUuZm9udEZhbWlseSAmJiAocyA9IG9bZS5mb250RmFtaWx5XSk7XG4gICAgICBicmVhaztcbiAgICBjYXNlIFwiaGVhZGluZy1sZy1tZWRpdW1cIjpcbiAgICAgIGwgPSBuLnQyMCwgZCA9IGkubGgyOCwgYiA9IHIubWVkaXVtLCBlICE9IG51bGwgJiYgZS5mb250V2VpZ2h0ICYmIChiID0gcltlLmZvbnRXZWlnaHRdKSwgZSAhPSBudWxsICYmIGUuZm9udEZhbWlseSAmJiAocyA9IG9bZS5mb250RmFtaWx5XSk7XG4gICAgICBicmVhaztcbiAgICBjYXNlIFwiaGVhZGluZy1sZy1yZWd1bGFyXCI6XG4gICAgICBsID0gbi50MjAsIGQgPSBpLmxoMjgsIGIgPSByLnJlZ3VsYXIsIGUgIT0gbnVsbCAmJiBlLmZvbnRXZWlnaHQgJiYgKGIgPSByW2UuZm9udFdlaWdodF0pLCBlICE9IG51bGwgJiYgZS5mb250RmFtaWx5ICYmIChzID0gb1tlLmZvbnRGYW1pbHldKTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgXCJoZWFkaW5nLW1kXCI6XG4gICAgICBsID0gbi50MTgsIGQgPSBpLmxoMjUsIGIgPSByLm1lZGl1bSwgZSAhPSBudWxsICYmIGUuZm9udFdlaWdodCAmJiAoYiA9IHJbZS5mb250V2VpZ2h0XSksIGUgIT0gbnVsbCAmJiBlLmZvbnRGYW1pbHkgJiYgKHMgPSBvW2UuZm9udEZhbWlseV0pO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSBcImhlYWRpbmctc21cIjpcbiAgICAgIGwgPSBuLnQxNiwgZCA9IGkubGgyNSwgYiA9IHIucmVndWxhciwgZSAhPSBudWxsICYmIGUuZm9udFdlaWdodCAmJiAoYiA9IHJbZS5mb250V2VpZ2h0XSksIGUgIT0gbnVsbCAmJiBlLmZvbnRGYW1pbHkgJiYgKHMgPSBvW2UuZm9udEZhbWlseV0pO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSBcImhlYWRpbmcteHMtbWVkaXVtXCI6XG4gICAgICBsID0gbi50MTQsIGQgPSBpLmxoMTksIGIgPSByLm1lZGl1bSwgZSAhPSBudWxsICYmIGUuZm9udFdlaWdodCAmJiAoYiA9IHJbZS5mb250V2VpZ2h0XSksIGUgIT0gbnVsbCAmJiBlLmZvbnRGYW1pbHkgJiYgKHMgPSBvW2UuZm9udEZhbWlseV0pO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSBcImhlYWRpbmcteHMtcmVndWxhclwiOlxuICAgICAgbCA9IG4udDE0LCBkID0gaS5saDE5LCBiID0gci5yZWd1bGFyLCBlICE9IG51bGwgJiYgZS5mb250V2VpZ2h0ICYmIChiID0gcltlLmZvbnRXZWlnaHRdKSwgZSAhPSBudWxsICYmIGUuZm9udEZhbWlseSAmJiAocyA9IG9bZS5mb250RmFtaWx5XSk7XG4gICAgICBicmVhaztcbiAgICBjYXNlIFwiYm9keS1sZy1yZWd1bGFyXCI6XG4gICAgICBsID0gbi50MTQsIGQgPSBpLmxoMTksIGIgPSByLnJlZ3VsYXIsIGUgIT0gbnVsbCAmJiBlLmZvbnRXZWlnaHQgJiYgKGIgPSByW2UuZm9udFdlaWdodF0pLCBlICE9IG51bGwgJiYgZS5mb250RmFtaWx5ICYmIChzID0gb1tlLmZvbnRGYW1pbHldKTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgXCJib2R5LWxnLWxpZ2h0XCI6XG4gICAgICBsID0gbi50MTQsIGQgPSBpLmxoMTksIGIgPSByLmxpZ2h0LCBlICE9IG51bGwgJiYgZS5mb250V2VpZ2h0ICYmIChiID0gcltlLmZvbnRXZWlnaHRdKSwgZSAhPSBudWxsICYmIGUuZm9udEZhbWlseSAmJiAocyA9IG9bZS5mb250RmFtaWx5XSk7XG4gICAgICBicmVhaztcbiAgICBjYXNlIFwiYm9keS1zbS1ib2xkXCI6XG4gICAgICBsID0gbi50MTIsIGQgPSBNLCBiID0gci5ib2xkLCBlICE9IG51bGwgJiYgZS5mb250V2VpZ2h0ICYmIChiID0gcltlLmZvbnRXZWlnaHRdKSwgZSAhPSBudWxsICYmIGUuZm9udEZhbWlseSAmJiAocyA9IG9bZS5mb250RmFtaWx5XSk7XG4gICAgICBicmVhaztcbiAgICBjYXNlIFwiYm9keS1zbS1tZWRpdW1cIjpcbiAgICAgIGwgPSBuLnQxMiwgZCA9IE0sIGIgPSByLm1lZGl1bSwgZSAhPSBudWxsICYmIGUuZm9udFdlaWdodCAmJiAoYiA9IHJbZS5mb250V2VpZ2h0XSksIGUgIT0gbnVsbCAmJiBlLmZvbnRGYW1pbHkgJiYgKHMgPSBvW2UuZm9udEZhbWlseV0pO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSBcImJvZHktc20tcmVndWxhclwiOlxuICAgICAgbCA9IG4udDEyLCBkID0gTSwgYiA9IHIucmVndWxhciwgZSAhPSBudWxsICYmIGUuZm9udFdlaWdodCAmJiAoYiA9IHJbZS5mb250V2VpZ2h0XSksIGUgIT0gbnVsbCAmJiBlLmZvbnRGYW1pbHkgJiYgKHMgPSBvW2UuZm9udEZhbWlseV0pO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSBcImJvZHktc20tbGlnaHRcIjpcbiAgICAgIGwgPSBuLnQxMiwgZCA9IE0sIGIgPSByLmxpZ2h0LCBlICE9IG51bGwgJiYgZS5mb250V2VpZ2h0ICYmIChiID0gcltlLmZvbnRXZWlnaHRdKSwgZSAhPSBudWxsICYmIGUuZm9udEZhbWlseSAmJiAocyA9IG9bZS5mb250RmFtaWx5XSk7XG4gICAgICBicmVhaztcbiAgICBjYXNlIFwibGFiZWwtbGctcmVndWxhclwiOlxuICAgICAgbCA9IG4udDEyLCBkID0gTSwgYiA9IHIucmVndWxhciwgZSAhPSBudWxsICYmIGUuZm9udFdlaWdodCAmJiAoYiA9IHJbZS5mb250V2VpZ2h0XSksIGUgIT0gbnVsbCAmJiBlLmZvbnRGYW1pbHkgJiYgKHMgPSBvW2UuZm9udEZhbWlseV0pO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSBcImxhYmVsLWxnLWxpZ2h0XCI6XG4gICAgICBsID0gbi50MTIsIGQgPSBNLCBiID0gci5saWdodCwgZSAhPSBudWxsICYmIGUuZm9udFdlaWdodCAmJiAoYiA9IHJbZS5mb250V2VpZ2h0XSksIGUgIT0gbnVsbCAmJiBlLmZvbnRGYW1pbHkgJiYgKHMgPSBvW2UuZm9udEZhbWlseV0pO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSBcImxhYmVsLXNtXCI6XG4gICAgICBsID0gbi50MTAsIGQgPSBpLmxoMTQsIGIgPSByLm1lZGl1bSwgZSAhPSBudWxsICYmIGUuZm9udFdlaWdodCAmJiAoYiA9IHJbZS5mb250V2VpZ2h0XSksIGUgIT0gbnVsbCAmJiBlLmZvbnRGYW1pbHkgJiYgKHMgPSBvW2UuZm9udEZhbWlseV0pO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSBcImxhYmVsLXNtLXJlZ3VsYXJcIjpcbiAgICAgIGwgPSBuLnQxMCwgZCA9IGkubGgxNCwgYiA9IHIucmVndWxhciwgZSAhPSBudWxsICYmIGUuZm9udFdlaWdodCAmJiAoYiA9IHJbZS5mb250V2VpZ2h0XSksIGUgIT0gbnVsbCAmJiBlLmZvbnRGYW1pbHkgJiYgKHMgPSBvW2UuZm9udEZhbWlseV0pO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSBcImxhYmVsLXNtLWxpZ2h0XCI6XG4gICAgICBsID0gbi50MTAsIGQgPSBpLmxoMTQsIGIgPSByLmxpZ2h0LCBlICE9IG51bGwgJiYgZS5mb250V2VpZ2h0ICYmIChiID0gcltlLmZvbnRXZWlnaHRdKSwgZSAhPSBudWxsICYmIGUuZm9udEZhbWlseSAmJiAocyA9IG9bZS5mb250RmFtaWx5XSk7XG4gICAgICBicmVhaztcbiAgICBjYXNlIFwibGFiZWwteHMtcmVndWxhclwiOlxuICAgICAgbCA9IG4udDksIGQgPSB1LCBiID0gci5yZWd1bGFyLCBlICE9IG51bGwgJiYgZS5mb250V2VpZ2h0ICYmIChiID0gcltlLmZvbnRXZWlnaHRdKSwgZSAhPSBudWxsICYmIGUuZm9udEZhbWlseSAmJiAocyA9IG9bZS5mb250RmFtaWx5XSk7XG4gICAgICBicmVhaztcbiAgICBjYXNlIFwibGFiZWwteHMtbGlnaHRcIjpcbiAgICAgIGwgPSBuLnQ5LCBkID0gdSwgYiA9IHIubGlnaHQsIGUgIT0gbnVsbCAmJiBlLmZvbnRXZWlnaHQgJiYgKGIgPSByW2UuZm9udFdlaWdodF0pLCBlICE9IG51bGwgJiYgZS5mb250RmFtaWx5ICYmIChzID0gb1tlLmZvbnRGYW1pbHldKTtcbiAgICAgIGJyZWFrO1xuICB9XG4gIHJldHVybiBvMWBcbiAgICBtYXJnaW46IDBweDtcbiAgICBjb2xvcjogJHthfTtcbiAgICBmb250LWZhbWlseTogJHtzfTtcbiAgICBmb250LXNpemU6ICR7bH07XG4gICAgZm9udC1zdHlsZTogJHtwfTtcbiAgICBmb250LXdlaWdodDogJHtifTtcbiAgICBsaW5lLWhlaWdodDogJHtkfTtcbiAgICAke2UgIT0gbnVsbCAmJiBlLiR3aGl0ZVNwYWNlID8gYHdoaXRlLXNwYWNlOiR7ZSA9PSBudWxsID8gdm9pZCAwIDogZS4kd2hpdGVTcGFjZX1gIDogXCJcIn1cbiAgYDtcbn0pLCBuciA9ICh7IGNoaWxkcmVuOiBlLCAuLi50IH0pID0+IHtcbiAgbGV0IG8gPSBcInBcIjtcbiAgaWYgKHQgIT0gbnVsbCAmJiB0LmVsZW1lbnQpXG4gICAgbyA9IHQgPT0gbnVsbCA/IHZvaWQgMCA6IHQuZWxlbWVudDtcbiAgZWxzZSBpZiAodCAhPSBudWxsICYmIHQudmFyaWFudClcbiAgICBzd2l0Y2ggKHQgPT0gbnVsbCA/IHZvaWQgMCA6IHQudmFyaWFudCkge1xuICAgICAgY2FzZSBcImRpc3BsYXktbGdcIjpcbiAgICAgICAgbyA9IFwiaDFcIjtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIFwiaGVhZGluZy1sZy1tZWRpdW1cIjpcbiAgICAgICAgbyA9IFwiaDJcIjtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIFwiaGVhZGluZy1sZy1yZWd1bGFyXCI6XG4gICAgICAgIG8gPSBcImgyXCI7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBcImhlYWRpbmctbWRcIjpcbiAgICAgICAgbyA9IFwiaDNcIjtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIFwiaGVhZGluZy1zbVwiOlxuICAgICAgICBvID0gXCJoM1wiO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgXCJoZWFkaW5nLXhzLW1lZGl1bVwiOlxuICAgICAgICBvID0gXCJoNFwiO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgXCJoZWFkaW5nLXhzLXJlZ3VsYXJcIjpcbiAgICAgICAgbyA9IFwiaDRcIjtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIFwiYm9keS1sZy1yZWd1bGFyXCI6XG4gICAgICAgIG8gPSBcInBcIjtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIFwiYm9keS1sZy1saWdodFwiOlxuICAgICAgICBvID0gXCJwXCI7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBcImJvZHktc20tYm9sZFwiOlxuICAgICAgICBvID0gXCJwXCI7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBcImJvZHktc20tbWVkaXVtXCI6XG4gICAgICAgIG8gPSBcInBcIjtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIFwiYm9keS1zbS1yZWd1bGFyXCI6XG4gICAgICAgIG8gPSBcInBcIjtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIFwiYm9keS1zbS1saWdodFwiOlxuICAgICAgICBvID0gXCJwXCI7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBcImxhYmVsLWxnLXJlZ3VsYXJcIjpcbiAgICAgICAgbyA9IFwibGFiZWxcIjtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIFwibGFiZWwtbGctbGlnaHRcIjpcbiAgICAgICAgbyA9IFwibGFiZWxcIjtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIFwibGFiZWwtc21cIjpcbiAgICAgICAgbyA9IFwibGFiZWxcIjtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIFwibGFiZWwtc20tcmVndWxhclwiOlxuICAgICAgICBvID0gXCJsYWJlbFwiO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgXCJsYWJlbC1zbS1saWdodFwiOlxuICAgICAgICBvID0gXCJsYWJlbFwiO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgXCJsYWJlbC14cy1yZWd1bGFyXCI6XG4gICAgICAgIG8gPSB0ICE9IG51bGwgJiYgdC5lbGVtZW50ID8gdCA9PSBudWxsID8gdm9pZCAwIDogdC5lbGVtZW50IDogXCJsYWJlbFwiO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgXCJsYWJlbC14cy1saWdodFwiOlxuICAgICAgICBvID0gdCAhPSBudWxsICYmIHQuZWxlbWVudCA/IHQgPT0gbnVsbCA/IHZvaWQgMCA6IHQuZWxlbWVudCA6IFwibGFiZWxcIjtcbiAgICAgICAgYnJlYWs7XG4gICAgfVxuICByZXR1cm4gLyogQF9fUFVSRV9fICovIGMoQkwsIHsgYXM6IG8sIC4uLnQsIGNoaWxkcmVuOiBlIH0pO1xufSwgejggPSA0O1xuJC5kaXZgXG4gIHdpZHRoOiA0MDBweDtcbmA7XG5jb25zdCBHbyA9ICQuc3BhbigoeyB0aGVtZTogeyBjb2xvcnM6IGUgfSB9KSA9PiBvMWBcbiAgICBjb2xvcjogJHtlLnRleHRJY29uLnRleHRTZWNvbmRhcnl9O1xuICBgKSwgU0wgPSAkKG5yKWBcbiAgJHsoeyB0aGVtZTogZSwgaXNFcnJvcjogdCwgaXNEaXNhYmxlZDogbyB9KSA9PiB7XG4gIGNvbnN0IHsgY29sb3JzOiBuLCBsaW5lSGVpZ2h0OiByLCBmb250V2VpZ2h0OiBpIH0gPSBlO1xuICBsZXQgYSA9IG4udGV4dEljb24udGV4dExvd2VtcGhhc2lzO1xuICByZXR1cm4gbyA/IGEgPSBuLnBpbmtTd2FuIDogdCAmJiAoYSA9IG4uZXJyb3IpLCBvMWBcbiAgICAgIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgICAgIHZlcnRpY2FsLWFsaWduOiB0b3A7XG4gICAgICBsaW5lLWhlaWdodDogJHtyLmxoMjB9O1xuICAgICAgY29sb3I6ICR7YX07XG4gICAgICBmb250LXNpemU6IDlweDtcbiAgICAgIGZvbnQtd2VpZ2h0OiAke2kucmVndWxhcn07XG4gICAgYDtcbn19XG5gO1xuJC5zcGFuKFxuICAoeyB0aGVtZTogZSwgaXNEaXNhYmxlZDogdCwgaXNFcnJvcjogbyB9KSA9PiB7XG4gICAgY29uc3QgeyBjb2xvcnM6IG4sIHR5cG9ncmFwaHk6IHIsIGxpbmVIZWlnaHQ6IGkgfSA9IGU7XG4gICAgbGV0IGEgPSBuLmdyZXk7XG4gICAgcmV0dXJuIHQgPyBhID0gbi5waW5rU3dhbiA6IG8gJiYgKGEgPSBuLmVycm9yKSwgbzFgXG4gICAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG4gICAgICB2ZXJ0aWNhbC1hbGlnbjogdG9wO1xuICAgICAgbWFyZ2luOiA0cHggMCAwO1xuICAgICAgZm9udC1zaXplOiAke3IudDEyfTtcbiAgICAgIGxpbmUtaGVpZ2h0OiAke2kubGgyMH07XG4gICAgICBjb2xvcjogJHthfTtcbiAgICBgO1xuICB9XG4pO1xuY29uc3QgVGEgPSAkKG5yKWBcbiAgJHsoeyB0aGVtZTogZSwgaXNFcnJvcjogdCwgaXNEaXNhYmxlZDogbyB9KSA9PiB7XG4gIGNvbnN0IHsgY29sb3JzOiBuIH0gPSBlO1xuICBsZXQgciA9IG4udGV4dEljb24udGV4dFByaW1hcnk7XG4gIHJldHVybiBvID8gciA9IG4udGV4dEljb24udGV4dERpc2FibGVkT25iZyA6IHQgJiYgKHIgPSBuLnRleHRJY29uLnRleHRFcnJvciksIG8xYFxuICAgICAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuICAgICAgdmVydGljYWwtYWxpZ246IHRvcDtcbiAgICAgIG1hcmdpbi1ib3R0b206IDVweDtcbiAgICAgIGNvbG9yOiAke3J9O1xuICAgICAgJHsoaSkgPT4gaS4kYWN0aXZlICYmICF0ICYmIG8xYFxuICAgICAgICAgIGNvbG9yOiAke3J9O1xuICAgICAgICBgfVxuXG4gICAgICAke28gJiYgbzFgXG4gICAgICAgICR7R299IHtcbiAgICAgICAgICBjb2xvcjogJHtuLnRleHRJY29uLnRleHREaXNhYmxlZE9uYmd9O1xuICAgICAgICB9XG4gICAgICBgfVxuICAgICAgJjpmb2N1cy12aXNpYmxlIHtcbiAgICAgICAgb3V0bGluZTogbm9uZTtcbiAgICAgIH1cblxuICAgICAgJHt0ICYmICFvICYmIG8xYFxuICAgICAgICAke0dvfSB7XG4gICAgICAgICAgY29sb3I6ICR7bi50ZXh0SWNvbi50ZXh0RXJyb3J9O1xuICAgICAgICB9XG4gICAgICBgfVxuICAgIGA7XG59fVxuYCwgaXIgPSAkLnNwYW5gXG4gIGNvbG9yOiAkeyh7IHRoZW1lOiBlIH0pID0+IGUuY29sb3JzLnBpbmtTd2FufTtcbiAgbWFyZ2luLWxlZnQ6ICR7KHsgdGhlbWU6IGUgfSkgPT4gZS5zcGFjaW5ncy5zcDR9O1xuYCwgUW8gPSAkKFNMKWBcbiAgbWFyZ2luLWxlZnQ6IDEwcHg7XG5gLCBFTCA9ICQudGV4dGFyZWEuYXR0cnMoKCkgPT4gKHtcbiAgYXM6IFwidGV4dGFyZWFcIlxufSkpKCh7IHRoZW1lOiBlLCBpc0Vycm9yOiB0LCBpc1JlYWRPbmx5OiBvLCByZXF1aXJlZDogbiwgJGhhc1ZhbHVlOiByIH0pID0+IHtcbiAgY29uc3Qge1xuICAgIGNvbG9yczogaSxcbiAgICBib3JkZXJSYWRpdXM6IGEsXG4gICAgdHlwb2dyYXBoeTogcyxcbiAgICB0cmFuc2l0aW9uczogbCxcbiAgICBmb250RmFtaWx5OiBwLFxuICAgIGZvbnRXZWlnaHQ6IGQsXG4gICAgc3BhY2luZ3M6IGJcbiAgfSA9IGU7XG4gIHJldHVybiBvMWBcbiAgICBwYWRkaW5nLXRvcDogMTIuOTZweDtcbiAgICBwYWRkaW5nLWJvdHRvbTogMTIuOTZweDtcbiAgICB3aWR0aDogMTAwJTtcbiAgICByZXNpemU6IHZlcnRpY2FsO1xuICAgIG1pbi1oZWlnaHQ6IDkwcHg7XG4gICAgYm9yZGVyLXJhZGl1czogJHthLmJhc2V9O1xuICAgIGJhY2tncm91bmQ6ICR7aS5maWVsZC5maWVsZEJnRGVmYXVsdH07XG4gICAgcGFkZGluZzogJHtiLnNwNH07XG4gICAgY29sb3I6ICR7dCA/IGkudGV4dEljb24udGV4dEVycm9yIDogaS50ZXh0SWNvbi50ZXh0UHJpbWFyeX07XG4gICAgYm9yZGVyOiAxcHggc29saWRcbiAgICAgICR7dCA/IGkudGV4dEljb24udGV4dEVycm9yIDogaS5maWVsZC5maWVsZEJnRGVmYXVsdH07XG4gICAgdHJhbnNpdGlvbjogJHtsLmJhc2V9O1xuICAgIGZvbnQtZmFtaWx5OiAke3AuYmFzZX07XG4gICAgZm9udC1zaXplOiAke3MudDEyfTtcbiAgICBmb250LXdlaWdodDogJHtkLmxpZ2h0fTtcbiAgICBvdXRsaW5lOiBub25lO1xuICAgIGJveC1zaXppbmc6IGJvcmRlci1ib3g7XG4gICAgYm9yZGVyLWxlZnQ6IDJweCBzb2xpZFxuICAgICAgJHtuICYmICF0ID8gaS5ib3JkZXIuYm9yZGVyU2Vjb25kYXJ5IDogbiAmJiB0ID8gaS5ib3JkZXIuYm9yZGVyRXJyb3IgOiBcIm5vbmVcIn07XG5cbiAgICAke28gJiYgbzFgXG4gICAgICBib3JkZXI6IDFweCBzb2xpZCAke2kuYm9yZGVyLmJvcmRlclRlcnRpYXJ5fTtcbiAgICAgIHBvaW50ZXItZXZlbnRzOiBub25lO1xuICAgICAgYmFja2dyb3VuZC1jb2xvcjogJHtpLmJhY2tncm91bmRzLmJnUHJpbWFyeX0gIWltcG9ydGFudDtcbiAgICAgIGNvbG9yOiAke2kuZ3JleX07XG4gICAgYH1cblxuICAgICY6aG92ZXI6bm90KDpkaXNhYmxlZCk6bm90KDpmb2N1cykge1xuICAgICAgLyogYm9yZGVyLWNvbG9yOiAkeyF0ICYmIGkucGlua1N3YW59OyAqL1xuICAgICAgYmFja2dyb3VuZC1jb2xvcjogJHtpLmZpZWxkLmZpZWxkQmdIb3Zlcn07XG4gICAgfVxuXG4gICAgJHshdCAmJiBvMWBcbiAgICAgICY6Zm9jdXMge1xuICAgICAgICBib3JkZXItY29sb3I6ICR7aS5ib3JkZXIuYm9yZGVyU2Vjb25kYXJ5fTtcbiAgICAgICAgY29sb3I6ICR7aS50ZXh0SWNvbi50ZXh0SGlnaGVtcGhhc2lzfTtcbiAgICAgICAgJjpob3ZlciB7XG4gICAgICAgICAgLyogYmFja2dyb3VuZC1jb2xvcjogJHtpLmZpZWxkLmZpZWxkQmdIb3Zlcn07ICovXG4gICAgICAgICAgYm9yZGVyOiAxcHggc29saWRcbiAgICAgICAgICAgICR7dCA/IGkuYm9yZGVyLmJvcmRlckVycm9yIDogaS5maWVsZC5maWVsZEJvcmRlckFjdGl2ZX07XG4gICAgICAgICAgYm9yZGVyLWxlZnQ6IDJweCBzb2xpZFxuICAgICAgICAgICAgJHtuICYmICF0ID8gaS5maWVsZC5maWVsZEJvcmRlckFjdGl2ZSA6IG4gJiYgdCA/IGkuYm9yZGVyLmJvcmRlckVycm9yIDogXCJub25lXCJ9O1xuICAgICAgICB9XG4gICAgICB9XG4gICAgYH1cblxuICAgICY6ZGlzYWJsZWQge1xuICAgICAgYm9yZGVyLWNvbG9yOiB0cmFuc3BhcmVudDtcbiAgICAgIC8vIG5ldyBkaXNhYmxlZCBjb2xvclxuICAgICAgYmFja2dyb3VuZC1jb2xvcjogJHtpLmJhY2tncm91bmRzLmJnRGlzYWJsZWRQcmltYXJ5fTtcbiAgICAgIGNvbG9yOiAke2kudGV4dEljb24udGV4dERpc2FibGVkT25iZ307XG4gICAgICAvL1xuXG4gICAgICBib3JkZXItbGVmdDogMnB4IHNvbGlkXG4gICAgICAgICR7biA/IGkuYm9yZGVyLmJvcmRlclJlYWRvbmx5IDogXCJ0cmFuc3BhcmVudFwifTtcbiAgICAgIGZvbnQtd2VpZ2h0OiAke2QubGlnaHR9O1xuXG4gICAgICAmLFxuICAgICAgJjo6cGxhY2Vob2xkZXIge1xuICAgICAgICBjb2xvcjogJHtpLnRleHRJY29uLnRleHREaXNhYmxlZE9uYmd9O1xuICAgICAgfVxuICAgIH1cblxuICAgICY6OnBsYWNlaG9sZGVyIHtcbiAgICAgIGNvbG9yOiAke2kuZmllbGQuZmllbGRUZXh0UGxhY2Vob2xkZXJ9O1xuICAgICAgZm9udC1zaXplOiAke3MudDEyfTtcbiAgICAgIGZvbnQtd2VpZ2h0OiAke2QucmVndWxhcn07XG4gICAgfVxuXG4gICAgJjphY3RpdmUge1xuICAgICAgYm9yZGVyOiAxcHggc29saWRcbiAgICAgICAgJHt0ID8gaS5ib3JkZXIuYm9yZGVyRXJyb3IgOiBpLmZpZWxkLmZpZWxkQm9yZGVyQWN0aXZlfTtcbiAgICAgIGJvcmRlci1sZWZ0OiAycHggc29saWRcbiAgICAgICAgJHtuICYmICF0ID8gaS5iYWNrZ3JvdW5kcy5iZ1JlYWRPbmx5IDogbiAmJiB0ID8gaS5ib3JkZXIuYm9yZGVyRXJyb3IgOiBcIm5vbmVcIn07XG4gICAgfVxuXG4gICAgJHtyICYmIG8xYFxuICAgICAgYm9yZGVyLWNvbG9yOiAke2kuZmllbGQuZmllbGRCb3JkZXJBY3RpdmV9O1xuICAgIGB9XG4gICAgLyogU3R5bGVzIGZvciB0aGUgc2Nyb2xsYmFyICovXG4gICAgICAmOjotd2Via2l0LXNjcm9sbGJhciB7XG4gICAgICBoZWlnaHQ6ICR7ejh9cHg7XG4gICAgICB3aWR0aDogJHt6OH1weDtcbiAgICB9XG4gICAgJjo6LXdlYmtpdC1zY3JvbGxiYXItdHJhY2sge1xuICAgICAgYmFja2dyb3VuZC1jb2xvcjogJHsoTSkgPT4gTS50aGVtZS5jb2xvcnMuc2Nyb2xsLnNjcm9sbEJnUHJpbWFyeX07XG4gICAgfVxuXG4gICAgJjo6LXdlYmtpdC1zY3JvbGxiYXItdGh1bWIge1xuICAgICAgYmFja2dyb3VuZC1jb2xvcjogJHsoTSkgPT4gTS50aGVtZS5jb2xvcnMuc2Nyb2xsLnNjcm9sbEJnRGVmYXVsdH07XG5cbiAgICAgIGJvcmRlci1yYWRpdXM6ICR7KE0pID0+IE0udGhlbWUuYm9yZGVyUmFkaXVzLnhsfTtcbiAgICB9XG4gICAgLyogSGFuZGxlIG9uIGhvdmVyICovXG4gICAgJjo6LXdlYmtpdC1zY3JvbGxiYXItdGh1bWI6aG92ZXIge1xuICAgICAgYmFja2dyb3VuZC1jb2xvcjogJHsoTSkgPT4gTS50aGVtZS5jb2xvcnMuc2Nyb2xsLnNjcm9sbEJnSG92ZXJ9O1xuICAgIH1cbiAgICAmOjotd2Via2l0LXNjcm9sbGJhci10aHVtYjphY3RpdmUge1xuICAgICAgYmFja2dyb3VuZC1jb2xvcjogJHsoTSkgPT4gTS50aGVtZS5jb2xvcnMuc2Nyb2xsLnNjcm9sbEJnUHJlc3NlZH07XG4gICAgfVxuXG4gICAgJjpmb2N1cy12aXNpYmxlIHtcbiAgICAgIG91dGxpbmU6IDFweCBzb2xpZCAkeyhNKSA9PiBNLnRoZW1lLmNvbG9ycy5ib3JkZXIuYm9yZGVyU2Vjb25kYXJ5fSAhaW1wb3J0YW50O1xuICAgIH1cbiAgYDtcbn0pLCBrTCA9ICQuZGl2KFxuICAoeyAkT3B0aW5hbDogZSB9KSA9PiBvMWBcbiAgICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgICBhbGlnbi1pdGVtczogY2VudGVyO1xuXG4gICAgICAkeyFlICYmIG8xYFxuICAgICAgICBnYXA6IDhweDtcbiAgICAgIGB9XG4gICAgICAke2UgJiYgbzFgXG4gICAgICAgIGdhcDogMjBweDtcbiAgICAgIGB9XG4gICAgYFxuKSwgTkwgPSAkLmRpdmBcbiAgZmxleC1iYXNpczogNzAlO1xuYCwgVEwgPSAkLmRpdmBcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xuYCwgSUwgPSAkLmxhYmVsKCh7IHRoZW1lOiBlLCBpc0Vycm9yOiB0LCBpc0Rpc2FibGVkOiBvIH0pID0+IHtcbiAgY29uc3QgeyBjb2xvcnM6IG4sIHR5cG9ncmFwaHk6IHIgfSA9IGU7XG4gIGxldCBpID0gbi5ibGFjaztcbiAgcmV0dXJuIG8gPyBpID0gbi5ncmV5IDogdCAmJiAoaSA9IG4uYmxhY2spLCBvMWBcbiAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgdG9wOiAxMHB4O1xuICAgIGxlZnQ6IDEwcHg7XG4gICAgcG9pbnRlci1ldmVudHM6IG5vbmU7XG4gICAgdHJhbnNpdGlvbjogMC4zcztcbiAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG4gICAgdmVydGljYWwtYWxpZ246IHRvcDtcbiAgICBmb250LXNpemU6ICR7ci50MTB9O1xuICAgIGNvbG9yOiAke2l9O1xuICAgIHBhZGRpbmc6IDAgNXB4O1xuICAgICR7KGEpID0+IGEuZmxvYXRpbmcgJiYgbzFgXG4gICAgICAgIHRvcDogLThweDtcbiAgICAgICAgbGVmdDogMTBweDtcbiAgICAgICAgcGFkZGluZzogMnB4IDVweDtcbiAgICAgICAgJjo6YWZ0ZXIge1xuICAgICAgICAgIGNvbnRlbnQ6ICcnO1xuICAgICAgICAgIHdpZHRoOiAxMDAlO1xuICAgICAgICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgICAgICAgIGJhY2tncm91bmQtY29sb3I6ICNmZmY7XG4gICAgICAgICAgaGVpZ2h0OiAxNHB4O1xuICAgICAgICAgIG1hcmdpbi10b3A6IC0xN3B4O1xuICAgICAgICB9XG4gICAgICBgfVxuICAgICR7KGEpID0+IGEuJGFjdGl2ZSAmJiAhdCAmJiBvMWBcbiAgICAgICAgY29sb3I6ICR7bi50ZXh0SWNvbi50ZXh0U2Vjb25kYXJ5fTtcbiAgICAgIGB9XG4gIGA7XG59KTtcbmZ1bmN0aW9uIERMKGUsIHQpIHtcbiAgY29uc3Qge1xuICAgIGxhYmVsOiBvLFxuICAgIGlkOiBuLFxuICAgIGljb25MZWZ0OiByLFxuICAgIGljb25SaWdodDogaSxcbiAgICBtdWx0aUxpbmU6IGEsXG4gICAgaXNEaXNhYmxlZDogcyxcbiAgICBpc1JlcXVpcmVkOiBsLFxuICAgIHN1cHBvcnRUZXh0OiBwLFxuICAgIGljb25TaXplOiBkLFxuICAgIGxhYmVsVHlwZTogYixcbiAgICBoYW5kbGVDbGVhckZuOiBNLFxuICAgIC4uLnVcbiAgfSA9IGUsIEEgPSB7XG4gICAgZGlzYWJsZWQ6IHMsXG4gICAgcmVmOiB0LFxuICAgIGlkOiBuLFxuICAgIC4uLnVcbiAgfSwgW3osIGZdID0gVDEoITEpLCBbTywgaF0gPSBUMSghMSksIFtnLCB2XSA9IFQxKCExKSwgTCA9IChUKSA9PiB7XG4gICAgZighMCksIGgoITApLCB1Lm9uRm9jdXMgJiYgdS5vbkZvY3VzKFQpO1xuICB9LCB5ID0gKFQpID0+IHtcbiAgICBmKFQudGFyZ2V0LnZhbHVlICE9PSBcIlwiKSwgaCghMSksIHUub25CbHVyICYmIHUub25CbHVyKFQpO1xuICB9LCBCID0gKFQpID0+IHtcbiAgICB2KFQudGFyZ2V0LnZhbHVlICE9PSBcIlwiKSwgdS5vbkNoYW5nZSAmJiB1Lm9uQ2hhbmdlKFQpO1xuICB9LCBYID0gKCkgPT4ge1xuICAgIE0gJiYgTSgpLCBmKCExKSwgdighMSk7XG4gIH07XG4gIFAxKCgpID0+IHtcbiAgICBlLnZhbHVlID8gZighMCkgOiBmKCExKTtcbiAgfSwgW2UudmFsdWVdKTtcbiAgY29uc3QgRiA9ICgpID0+IHtcbiAgICBzd2l0Y2ggKCEwKSB7XG4gICAgICBjYXNlICghIXIgfHwgISFpKTpcbiAgICAgICAgcmV0dXJuIC8qIEBfX1BVUkVfXyAqLyBjKFxuICAgICAgICAgIFJMLFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIC4uLkEsXG4gICAgICAgICAgICBpY29uTGVmdDogcixcbiAgICAgICAgICAgIGljb25SaWdodDogaSxcbiAgICAgICAgICAgIGljb25TaXplOiBkLFxuICAgICAgICAgICAgcmVxdWlyZWQ6IGwsXG4gICAgICAgICAgICAkaW5wdXRJZDogbyxcbiAgICAgICAgICAgIG9uRm9jdXM6IEwsXG4gICAgICAgICAgICBvbkJsdXI6IHksXG4gICAgICAgICAgICBvbkNoYW5nZTogQixcbiAgICAgICAgICAgICRoYXNWYWx1ZTogZyxcbiAgICAgICAgICAgIGRpc2FibGVkOiBzLFxuICAgICAgICAgICAgaGFuZGxlQ2xlYXJGbjogWCxcbiAgICAgICAgICAgIHBsYWNlaG9sZGVyOiBiID09PSBcImluc2lkZVwiID8gXCJcIiA6IGUucGxhY2Vob2xkZXJcbiAgICAgICAgICB9XG4gICAgICAgICk7XG4gICAgICBjYXNlIGE6XG4gICAgICAgIHJldHVybiAvKiBAX19QVVJFX18gKi8gYyhcbiAgICAgICAgICBFTCxcbiAgICAgICAgICB7XG4gICAgICAgICAgICByZXF1aXJlZDogbCxcbiAgICAgICAgICAgIG9uRm9jdXM6IEwsXG4gICAgICAgICAgICBvbkJsdXI6IHksXG4gICAgICAgICAgICBvbkNoYW5nZTogQixcbiAgICAgICAgICAgICRoYXNWYWx1ZTogZyxcbiAgICAgICAgICAgIC4uLkFcbiAgICAgICAgICB9XG4gICAgICAgICk7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm4gLyogQF9fUFVSRV9fICovIGMoXG4gICAgICAgICAgZ2wsXG4gICAgICAgICAge1xuICAgICAgICAgICAgcmVxdWlyZWQ6IGwsXG4gICAgICAgICAgICAkaW5wdXRJZDogbyxcbiAgICAgICAgICAgIC4uLkEsXG4gICAgICAgICAgICBvbkZvY3VzOiBMLFxuICAgICAgICAgICAgb25CbHVyOiB5LFxuICAgICAgICAgICAgb25DaGFuZ2U6IEIsXG4gICAgICAgICAgICAkaGFzVmFsdWU6IGcsXG4gICAgICAgICAgICBkaXNhYmxlZDogcyxcbiAgICAgICAgICAgIGhhbmRsZUNsZWFyRm46IFgsXG4gICAgICAgICAgICBwbGFjZWhvbGRlcjogYiA9PT0gXCJpbnNpZGVcIiA/IFwiXCIgOiBlLnBsYWNlaG9sZGVyXG4gICAgICAgICAgfVxuICAgICAgICApO1xuICAgIH1cbiAgfTtcbiAgcmV0dXJuIC8qIEBfX1BVUkVfXyAqLyBjKHMwLCB7IGNoaWxkcmVuOiBiID09PSBcImhvcml6b250YWxcIiA/IC8qIEBfX1BVUkVfXyAqLyBlMShrTCwgeyAkT3B0aW5hbDogbCwgY2hpbGRyZW46IFtcbiAgICBvICYmIG8ubGVuZ3RoID4gMCAmJiAvKiBAX19QVVJFX18gKi8gZTEoXG4gICAgICBUYSxcbiAgICAgIHtcbiAgICAgICAgdmFyaWFudDogXCJsYWJlbC1zbS1yZWd1bGFyXCIsXG4gICAgICAgIGh0bWxGb3I6IG8sXG4gICAgICAgIGlzRGlzYWJsZWQ6IHMsXG4gICAgICAgIGlzRXJyb3I6IEEuaXNFcnJvcixcbiAgICAgICAgY2xhc3NOYW1lOiBcImlucHV0X19sYWJlbFwiLFxuICAgICAgICB0YWJJbmRleDogLTEsXG4gICAgICAgICRhY3RpdmU6IE8sXG4gICAgICAgIGVsZW1lbnQ6IFwibGFiZWxcIixcbiAgICAgICAgY2hpbGRyZW46IFtcbiAgICAgICAgICBvLFxuICAgICAgICAgIFwiIFwiLFxuICAgICAgICAgIGwgJiYgbyAmJiBvLmxlbmd0aCA+IDAgJiYgLyogQF9fUFVSRV9fICovIGMoR28sIHsgY2hpbGRyZW46IFwiKlwiIH0pLFxuICAgICAgICAgICFsICYmIG8gJiYgby5sZW5ndGggPiAwICYmIC8qIEBfX1BVUkVfXyAqLyBjKGlyLCB7IGNoaWxkcmVuOiBcIk9wdGlvbmFsXCIgfSlcbiAgICAgICAgXVxuICAgICAgfVxuICAgICksXG4gICAgLyogQF9fUFVSRV9fICovIGUxKE5MLCB7IGNoaWxkcmVuOiBbXG4gICAgICBGKCksXG4gICAgICAhIXAgJiYgLyogQF9fUFVSRV9fICovIGMoXG4gICAgICAgIFFvLFxuICAgICAgICB7XG4gICAgICAgICAgaXNEaXNhYmxlZDogcyxcbiAgICAgICAgICBpc0Vycm9yOiBBLmlzRXJyb3IsXG4gICAgICAgICAgY2xhc3NOYW1lOiBcInN1cHBvcnRUZXh0XCIsXG4gICAgICAgICAgdmFyaWFudDogXCJsYWJlbC1zbS1yZWd1bGFyXCIsXG4gICAgICAgICAgZWxlbWVudDogXCJzcGFuXCIsXG4gICAgICAgICAgY2hpbGRyZW46IHBcbiAgICAgICAgfVxuICAgICAgKVxuICAgIF0gfSlcbiAgXSB9KSA6IGIgPT09IFwiaW5zaWRlXCIgPyAvKiBAX19QVVJFX18gKi8gZTEoVEwsIHsgY2hpbGRyZW46IFtcbiAgICBGKCksXG4gICAgLyogQF9fUFVSRV9fICovIGUxKFxuICAgICAgSUwsXG4gICAgICB7XG4gICAgICAgIGZsb2F0aW5nOiB6LnRvU3RyaW5nKCkgPT09IFwidHJ1ZVwiLFxuICAgICAgICBodG1sRm9yOiBvLFxuICAgICAgICBpc0Rpc2FibGVkOiBzLFxuICAgICAgICBpc0Vycm9yOiBBLmlzRXJyb3IsXG4gICAgICAgICRhY3RpdmU6IE8sXG4gICAgICAgIGNoaWxkcmVuOiBbXG4gICAgICAgICAgbyxcbiAgICAgICAgICBcIiBcIixcbiAgICAgICAgICBsICYmIG8gJiYgby5sZW5ndGggPiAwICYmIC8qIEBfX1BVUkVfXyAqLyBjKEdvLCB7IGNoaWxkcmVuOiBcIipcIiB9KVxuICAgICAgICBdXG4gICAgICB9XG4gICAgKSxcbiAgICAhIXAgJiYgLyogQF9fUFVSRV9fICovIGMoXG4gICAgICBRbyxcbiAgICAgIHtcbiAgICAgICAgaXNEaXNhYmxlZDogcyxcbiAgICAgICAgaXNFcnJvcjogQS5pc0Vycm9yLFxuICAgICAgICBjbGFzc05hbWU6IFwic3VwcG9ydFRleHRcIixcbiAgICAgICAgdmFyaWFudDogXCJsYWJlbC1zbS1yZWd1bGFyXCIsXG4gICAgICAgIGVsZW1lbnQ6IFwic3BhblwiLFxuICAgICAgICBjaGlsZHJlbjogcFxuICAgICAgfVxuICAgIClcbiAgXSB9KSA6IC8qIEBfX1BVUkVfXyAqLyBlMShzMCwgeyBjaGlsZHJlbjogW1xuICAgIG8gJiYgby5sZW5ndGggPiAwICYmIC8qIEBfX1BVUkVfXyAqLyBlMShcbiAgICAgIFRhLFxuICAgICAge1xuICAgICAgICB2YXJpYW50OiBcImxhYmVsLXNtLXJlZ3VsYXJcIixcbiAgICAgICAgZWxlbWVudDogXCJsYWJlbFwiLFxuICAgICAgICBodG1sRm9yOiBvLFxuICAgICAgICBpc0Rpc2FibGVkOiBzLFxuICAgICAgICBpc0Vycm9yOiBBLmlzRXJyb3IsXG4gICAgICAgIGNsYXNzTmFtZTogXCJpbnB1dF9fbGFiZWwgMVwiLFxuICAgICAgICB0YWJJbmRleDogLTEsXG4gICAgICAgICRhY3RpdmU6IE8sXG4gICAgICAgIGNoaWxkcmVuOiBbXG4gICAgICAgICAgbyxcbiAgICAgICAgICBcIiBcIixcbiAgICAgICAgICBsICYmIC8qIEBfX1BVUkVfXyAqLyBjKEdvLCB7IGNoaWxkcmVuOiBcIipcIiB9KSxcbiAgICAgICAgICAhbCAmJiAvKiBAX19QVVJFX18gKi8gYyhpciwgeyBjaGlsZHJlbjogXCJPcHRpb25hbFwiIH0pXG4gICAgICAgIF1cbiAgICAgIH1cbiAgICApLFxuICAgIEYoKSxcbiAgICAhIXAgJiYgLyogQF9fUFVSRV9fICovIGMoXG4gICAgICBRbyxcbiAgICAgIHtcbiAgICAgICAgaXNEaXNhYmxlZDogcyxcbiAgICAgICAgaXNFcnJvcjogQS5pc0Vycm9yLFxuICAgICAgICBjbGFzc05hbWU6IFwic3VwcG9ydFRleHRcIixcbiAgICAgICAgdmFyaWFudDogXCJsYWJlbC1zbS1yZWd1bGFyXCIsXG4gICAgICAgIGVsZW1lbnQ6IFwic3BhblwiLFxuICAgICAgICBjaGlsZHJlbjogcFxuICAgICAgfVxuICAgIClcbiAgXSB9KSB9KTtcbn1cbmNvbnN0IFkyID0gQjAoREwpO1xuZnVuY3Rpb24gSEwoZSwgdCkge1xuICBjb25zdCB7IGxpbWl0OiBvID0gNTAsIGlzRXJyb3I6IG4sIHN1cHBvcnRUZXh0OiByLCB2YWx1ZTogaSwgLi4uYSB9ID0gZSwgW3MsIGxdID0gVDEoMCk7XG4gIFAxKCgpID0+IHtcbiAgICBpIHx8IGwoMCk7XG4gIH0sIFtpXSk7XG4gIGNvbnN0IHAgPSAoTSkgPT4ge1xuICAgIGNvbnN0IHUgPSBNLmN1cnJlbnRUYXJnZXQudmFsdWU7XG4gICAgbCh1Lmxlbmd0aCk7XG4gIH0sIGQgPSBzID4gbztcbiAgcmV0dXJuIC8qIEBfX1BVUkVfXyAqLyBjKHMwLCB7IGNoaWxkcmVuOiAvKiBAX19QVVJFX18gKi8gYyhcbiAgICBZMixcbiAgICB7XG4gICAgICByZWY6IHQsXG4gICAgICB2YWx1ZTogaSxcbiAgICAgIGlzRXJyb3I6IGQgfHwgbixcbiAgICAgIGxpbWl0OiBvLFxuICAgICAgc3VwcG9ydFRleHQ6IGQgPyBcIllvdSB1c2VkIHRvbyBtYW55IGNoYXJhY3RlcnNcIiA6IHIsXG4gICAgICBvbktleVVwOiBwLFxuICAgICAgLi4uYVxuICAgIH1cbiAgKSB9KTtcbn1cbmNvbnN0IFZMID0gQjAoSEwpO1xuZnVuY3Rpb24gSWEoZSkge1xuICBjb25zdCB7IGxpbWl0OiB0IH0gPSBlO1xuICByZXR1cm4gdCA/IC8qIEBfX1BVUkVfXyAqLyBjKFZMLCB7IGlzUmVxdWlyZWQ6ICEwLCAuLi5lIH0pIDogLyogQF9fUFVSRV9fICovIGMoWTIsIHsgaXNSZXF1aXJlZDogITAsIC4uLmUgfSk7XG59XG52YXIgbnQgPSAvKiBAX19QVVJFX18gKi8gKChlKSA9PiAoZS5QUklNQVJZID0gXCJwcmltYXJ5XCIsIGUuU0VDT05EQVJZID0gXCJzZWNvbmRhcnlcIiwgZS5URVJUSUFSWSA9IFwidGVydGlhcnlcIiwgZS5MSU5LID0gXCJsaW5rXCIsIGUuTUlOSSA9IFwibWluaVwiLCBlKSkobnQgfHwge30pLCBQNSA9IC8qIEBfX1BVUkVfXyAqLyAoKGUpID0+IChlLlNNQUxMID0gXCJzbVwiLCBlLkxBUkdFID0gXCJsZ1wiLCBlKSkoUDUgfHwge30pO1xuY29uc3QgJDAgPSAoZSwgdCA9IDEpID0+IGAwIDAgMCAke3R9cHggJHtlfSBpbnNldGAsIFB0ID0gJC5idXR0b24oXG4gICh7IHRoZW1lOiBlLCBzaXplOiB0IH0pID0+IHtcbiAgICBjb25zdCB7XG4gICAgICBsaW5lSGVpZ2h0OiBvLFxuICAgICAgZm9udFdlaWdodDogbixcbiAgICAgIHR5cG9ncmFwaHk6IHIsXG4gICAgICBjb2xvcnM6IGksXG4gICAgICB0cmFuc2l0aW9uczogYSxcbiAgICAgIGJvcmRlclJhZGl1czogcyxcbiAgICAgIG1peGluczogbCxcbiAgICAgIGl0ZW1TaXplOiBwXG4gICAgfSA9IGUsIGQgPSB0ID09PSBQNS5TTUFMTDtcbiAgICByZXR1cm4gbzFgXG4gICAgICAke2wuYnV0dG9uUmVzZXR9O1xuXG4gICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAke2kuYnV0dG9uQmFja2dvdW5kLmJ1dHRvbkJnUHJpbWFyeURlZmF1bHR9O1xuICAgICAgYm9yZGVyLXJhZGl1czogJHtzLmJhc2V9O1xuICAgICAgcGFkZGluZzogMCAke2QgPyAwLjYyNSA6IDAuNzV9cmVtO1xuICAgICAgbGluZS1oZWlnaHQ6ICR7ZCA/IG8ubGgzMiA6IG8ubGg0MH07XG4gICAgICBmb250LXdlaWdodDogJHtuLnJlZ3VsYXJ9O1xuICAgICAgZm9udC1zaXplOiAke3IudDEyfTtcbiAgICAgIGNvbG9yOiAke2kuYnV0dG9uVGV4dC5idXR0b25UZXh0UHJpbWFyeX07XG4gICAgICBib3gtc2hhZG93OiAkeyQwKGkuYnV0dG9uQmFja2dvdW5kLmJ1dHRvbkJnUHJpbWFyeURlZmF1bHQpfTtcbiAgICAgIG1pbi13aWR0aDogJHtkID8gcC5tZCA6IHAubGd9O1xuXG4gICAgICAmOm5vdCg6ZGlzYWJsZWQpIHtcbiAgICAgICAgJjpob3ZlciB7XG4gICAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogJHtpLmJ1dHRvbkJhY2tnb3VuZC5idXR0b25CZ1ByaW1hcnlIb3Zlcn07XG4gICAgICAgICAgYm94LXNoYWRvdzogJHskMChpLmJ1dHRvbkJhY2tnb3VuZC5idXR0b25CZ1ByaW1hcnlIb3Zlcil9O1xuICAgICAgICAgIHRyYW5zaXRpb246ICR7YS5iYXNlfTtcbiAgICAgICAgICBjb2xvcjogJHtpLmJ1dHRvblRleHQuYnV0dG9uVGV4dFByaW1hcnl9O1xuICAgICAgICB9XG5cbiAgICAgICAgJjpmb2N1cy12aXNpYmxlIHtcbiAgICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAke2kuYnV0dG9uQmFja2dvdW5kLmJ1dHRvbkJnUHJpbWFyeUhvdmVyfTtcbiAgICAgICAgICBib3gtc2hhZG93OiAkeyQwKGkuYm9yZGVyLmJvcmRlckZvY3VzZWQsIDIpfTtcbiAgICAgICAgICB0cmFuc2l0aW9uOiAke2EuYmFzZX07XG4gICAgICAgICAgY29sb3I6ICR7aS5idXR0b25UZXh0LmJ1dHRvblRleHRQcmltYXJ5fTtcbiAgICAgICAgfVxuXG4gICAgICAgICY6YWN0aXZlIHtcbiAgICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAke2kuYnV0dG9uQmFja2dvdW5kLmJ1dHRvbkJnUHJpbWFyeVByZXNzZWR9O1xuICAgICAgICAgIGJveC1zaGFkb3c6ICR7JDAoaS5idXR0b25CYWNrZ291bmQuYnV0dG9uQmdQcmltYXJ5UHJlc3NlZCl9O1xuICAgICAgICAgIHRyYW5zaXRpb246ICR7YS5iYXNlfTtcbiAgICAgICAgICBjb2xvcjogJHtpLmJ1dHRvblRleHQuYnV0dG9uVGV4dFByaW1hcnlQcmVzc2VkfTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICAmW2FyaWEtZGlzYWJsZWQ9J3RydWUnXSB7XG4gICAgICAgIGJhY2tncm91bmQtY29sb3I6ICR7aS5iYWNrZ3JvdW5kcy5iZ0Rpc2FibGVkUHJpbWFyeX07XG4gICAgICAgIGJveC1zaGFkb3c6ICR7JDAoaS5iYWNrZ3JvdW5kcy5iZ0Rpc2FibGVkUHJpbWFyeSl9O1xuICAgICAgICBjb2xvcjogJHtpLnRleHRJY29uLnRleHREaXNhYmxlZE9uYmd9O1xuICAgICAgICBjdXJzb3I6IGRlZmF1bHQ7XG4gICAgICAgIHBvaW50ZXItZXZlbnRzOiBub25lO1xuICAgICAgfVxuICAgIGA7XG4gIH1cbiksIEY1ID0gJChQdCkoXG4gICh7IHRoZW1lOiB7IGNvbG9yczogZSwgZm9udFdlaWdodDogdCB9IH0pID0+IG8xYFxuICAgIGJhY2tncm91bmQtY29sb3I6ICR7ZS5idXR0b25CYWNrZ291bmQuYnV0dG9uQmdTZWNvbmRhcnlEZWZhdWx0fTtcbiAgICBjb2xvcjogJHtlLmJ1dHRvblRleHQuYnV0dG9uVGV4dFNlY29uZGFyeURlZmF1bHR9O1xuICAgIGZvbnQtd2VpZ2h0OiAke3QucmVndWxhcn07XG4gICAgYm94LXNoYWRvdzogJHskMChlLmJ1dHRvbkJvcmRlci5idXR0b25Cb3JkZXJTZWNvbmRhcnlEZWZhdWx0KX07XG5cbiAgICAmOmhvdmVyIHtcbiAgICAgIGJhY2tncm91bmQtY29sb3I6ICR7ZS5idXR0b25CYWNrZ291bmQuYnV0dG9uQmdTZWNvbmRhcnlIb3Zlcn0gO1xuICAgICAgYm94LXNoYWRvdzogJHskMChlLmJ1dHRvbkJhY2tnb3VuZC5idXR0b25CZ1NlY29uZGFyeUhvdmVyKX0gO1xuICAgIH1cblxuICAgICY6YWN0aXZlIHtcbiAgICAgIGJhY2tncm91bmQtY29sb3I6ICR7ZS5idXR0b25CYWNrZ291bmQuYnV0dG9uQmdTZWNvbmRhcnlQcmVzc2VkfSA7XG4gICAgfVxuXG4gICAgJjpmb2N1cy12aXNpYmxle1xuICAgICAgYmFja2dyb3VuZC1jb2xvcjogJHtlLmJ1dHRvbkJhY2tnb3VuZC5idXR0b25CZ1NlY29uZGFyeUhvdmVyfSA7XG4gICAgICBjb2xvcjogJHtlLmJ1dHRvblRleHQuYnV0dG9uVGV4dFNlY29uZGFyeUZvY3VzZWR9IDtcbiAgICB9XG5cbiAgICAmW2FyaWEtZGlzYWJsZWQ9J3RydWUnXSB7XG4gICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAke2UuYnV0dG9uQmFja2dvdW5kLmJ1dHRvbkJnU2Vjb25kYXJ5RGVmYXVsdH07XG4gICAgICBib3gtc2hhZG93OiAkeyQwKGUuYmFja2dyb3VuZHMuYmdEaXNhYmxlZFByaW1hcnkpfSA7XG4gICAgICBjdXJzb3I6IGRlZmF1bHQ7XG4gICAgICBjb2xvcjogJHtlLnRleHRJY29uLnRleHREaXNhYmxlZE9uYmd9O1xuICAgICAgcG9pbnRlci1ldmVudHM6IG5vbmU7XG4gICAgfVxuICBgXG4pLCBQTCA9ICQoUHQpKFxuICAoeyB0aGVtZTogeyBjb2xvcnM6IGUsIGZvbnRXZWlnaHQ6IHQgfSB9KSA9PiBvMWBcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAke2UuYnV0dG9uQmFja2dvdW5kLmJ1dHRvbkJnVGVydGlhcnl9O1xuICAgIGNvbG9yOiAke2UuYnV0dG9uVGV4dC5idXR0b25UZXh0VGVydGlhcnl9O1xuICAgIGJveC1zaGFkb3c6ICR7JDAoZS5idXR0b25Cb3JkZXIuYnV0dG9uQm9yZGVyVGVydGlhcnlEZWZhdWx0KX07XG4gICAgZm9udC13ZWlnaHQ6ICR7dC5yZWd1bGFyfTtcblxuICAgICY6bm90KDpkaXNhYmxlZCkge1xuICAgICAgJjpob3ZlciB7XG4gICAgICAgIGJhY2tncm91bmQtY29sb3I6ICR7ZS5idXR0b25CYWNrZ291bmQuYnV0dG9uQmdUZXJ0aWFyeX07XG4gICAgICAgIGJveC1zaGFkb3c6ICR7JDAoZS5idXR0b25Cb3JkZXIuYnV0dG9uQm9yZGVyVGVydGlhcnlIb3Zlcil9O1xuICAgICAgICBjb2xvcjogJHtlLmJ1dHRvblRleHQuYnV0dG9uVGV4dFRlcnRpYXJ5fTtcbiAgICAgIH1cblxuICAgICAgJjpmb2N1cy12aXNpYmxlIHtcbiAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogJHtlLmJ1dHRvbkJhY2tnb3VuZC5idXR0b25CZ1RlcnRpYXJ5fTtcbiAgICAgICAgYm94LXNoYWRvdzogJHskMChlLmJvcmRlci5ib3JkZXJGb2N1c2VkLCAyKX07XG4gICAgICAgIGNvbG9yOiAke2UuYnV0dG9uVGV4dC5idXR0b25UZXh0VGVydGlhcnl9O1xuICAgICAgfVxuXG4gICAgICAmOmFjdGl2ZSB7XG4gICAgICAgIGJhY2tncm91bmQtY29sb3I6ICR7ZS5idXR0b25CYWNrZ291bmQuYnV0dG9uQmdUZXJ0aWFyeX07XG4gICAgICAgIGJveC1zaGFkb3c6ICR7JDAoZS5idXR0b25Cb3JkZXIuYnV0dG9uQm9yZGVyVGVydGlhcnlQcmVzc2VkKX07XG4gICAgICAgIGNvbG9yOiAke2UuYnV0dG9uVGV4dC5idXR0b25UZXh0VGVydGlhcnl9O1xuICAgICAgfVxuICAgIH1cblxuICAgICZbYXJpYS1kaXNhYmxlZD0ndHJ1ZSddIHtcbiAgICAgIGJhY2tncm91bmQtY29sb3I6ICR7ZS5idXR0b25CYWNrZ291bmQuYnV0dG9uQmdUZXJ0aWFyeX07XG4gICAgICBjdXJzb3I6IGRlZmF1bHQ7XG4gICAgICBjb2xvcjogJHtlLnRleHRJY29uLnRleHREaXNhYmxlZE5vYmd9O1xuICAgICAgYm94LXNoYWRvdzogICR7JDAoZS5ib3JkZXIuYm9yZGVyVGVydGlhcnkpfTtcbiAgICAgIHBvaW50ZXItZXZlbnRzOiBub25lO1xuICAgIH1cbiAgYFxuKSwgRkwgPSAkKFB0KShcbiAgKHsgdGhlbWU6IHsgY29sb3JzOiBlLCBmb250V2VpZ2h0OiB0IH0gfSkgPT4gbzFgXG4gICAgYmFja2dyb3VuZC1jb2xvcjogdHJhbnNwYXJlbnQ7XG4gICAgY29sb3I6ICR7ZS5idXR0b25UZXh0LmJ1dHRvblRleHRsaW5rRGVmYXVsdH07XG4gICAgZm9udC13ZWlnaHQ6ICR7dC5yZWd1bGFyfTtcbiAgICBib3gtc2hhZG93OiBub25lO1xuXG4gICAgJjpub3QoOmRpc2FibGVkKSB7XG4gICAgICAmOmhvdmVyIHtcbiAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogJHtlLmJ1dHRvbkJhY2tnb3VuZC5idXR0b25CZ1RleHRsaW5rSG92ZXJ9O1xuICAgICAgICBib3gtc2hhZG93OiBub25lO1xuICAgICAgICBjb2xvcjogJHtlLmJ1dHRvblRleHQuYnV0dG9uVGV4dGxpbmtIb3Zlcn07XG4gICAgICB9XG5cbiAgICAgICY6Zm9jdXMtdmlzaWJsZXtcbiAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogdHJhbnNwYXJlbnQ7XG4gICAgICAgIGJveC1zaGFkb3c6ICR7JDAoZS5ib3JkZXIuYm9yZGVyRm9jdXNlZCwgMil9O1xuICAgICAgICBjb2xvcjogJHtlLmJ1dHRvblRleHQuYnV0dG9uVGV4dGxpbmtIb3Zlcn07XG4gICAgICB9XG5cbiAgICAgICY6YWN0aXZlIHtcbiAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogdHJhbnNwYXJlbnQ7XG4gICAgICAgIGJveC1zaGFkb3c6IG5vbmU7XG4gICAgICAgIGNvbG9yOiAke2UuYnV0dG9uVGV4dC5idXR0b25UZXh0bGlua1ByZXNzZWR9O1xuICAgICAgfVxuICAgIH1cblxuICAgICZbYXJpYS1kaXNhYmxlZD0ndHJ1ZSddIHtcbiAgICAgIGJhY2tncm91bmQtY29sb3I6IHRyYW5zcGFyZW50O1xuICAgICAgYm94LXNoYWRvdzogbm9uZTtcbiAgICAgIGNvbG9yOiAke2UudGV4dEljb24udGV4dERpc2FibGVkTm9iZ307XG4gICAgICBwb2ludGVyLWV2ZW50czogbm9uZTtcbiAgICB9XG4gIGBcbik7XG5mdW5jdGlvbiBCMihlKSB7XG4gIGNvbnN0IHtcbiAgICBidXR0b25UeXBlOiB0ID0gbnQuUFJJTUFSWSxcbiAgICBpc0Rpc2FibGVkOiBvLFxuICAgIC4uLm5cbiAgfSA9IGUsIHIgPSB7IC4uLm4gfTtcbiAgc3dpdGNoICh0KSB7XG4gICAgY2FzZSBudC5TRUNPTkRBUlk6XG4gICAgICByZXR1cm4gLyogQF9fUFVSRV9fICovIGMoRjUsIHsgXCJhcmlhLWRpc2FibGVkXCI6IG8sIC4uLnIsIGNoaWxkcmVuOiBlLmNoaWxkcmVuIH0pO1xuICAgIGNhc2UgbnQuVEVSVElBUlk6XG4gICAgICByZXR1cm4gLyogQF9fUFVSRV9fICovIGMoUEwsIHsgXCJhcmlhLWRpc2FibGVkXCI6IG8sIC4uLnIsIGNoaWxkcmVuOiBlLmNoaWxkcmVuIH0pO1xuICAgIGNhc2UgbnQuTElOSzpcbiAgICAgIHJldHVybiAvKiBAX19QVVJFX18gKi8gYyhGTCwgeyBcImFyaWEtZGlzYWJsZWRcIjogbywgLi4uciwgY2hpbGRyZW46IGUuY2hpbGRyZW4gfSk7XG4gICAgZGVmYXVsdDpcbiAgICAgIHJldHVybiAvKiBAX19QVVJFX18gKi8gYyhQdCwgeyBcImFyaWEtZGlzYWJsZWRcIjogbywgLi4uciwgY2hpbGRyZW46IGUuY2hpbGRyZW4gfSk7XG4gIH1cbn1cbmNvbnN0IFAyID0gJC5kaXYoXG4gICh7IHRoZW1lOiBlLCBvcmllbnRhdGlvbjogdCwgJGhhc01hcmdpbjogbywgJGRlZmF1bHQ6IG4gfSkgPT4gbzFgXG4gICAgd2lkdGg6ICR7dCA9PT0gXCJ2ZXJ0aWNhbFwiID8gXCIxcHhcIiA6IFwiMTAwJVwifTtcbiAgICBoZWlnaHQ6ICR7dCA9PT0gXCJ2ZXJ0aWNhbFwiID8gXCIxMDAlXCIgOiBcIjFweFwifTtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAke24gPyBlLmNvbG9ycy5ib3JkZXIuYm9yZGVyVGVydGlhcnkgOiBlLmNvbG9ycy5MYXZlbmRlck1pc3R9O1xuICAgIG1hcmdpbjogJHtvICYmIHQgPT09IFwidmVydGljYWxcIiA/IFwiMXB4IDRweFwiIDogbyAmJiB0ID09PSBcImhvcml6b250YWxcIiA/IFwiNHB4IDFweFwiIDogXCIwXCJ9O1xuICBgXG4pO1xuJC5kaXYoXG4gICh7IG9yaWVudGF0aW9uOiBlIH0pID0+IG8xYFxuICAgIHdpZHRoOiAke2UgPT09IFwiaG9yaXpvbnRhbFwiID8gXCI0MDBweFwiIDogXCIwXCJ9O1xuICAgIGhlaWdodDogMzAwcHg7XG4gIGBcbik7XG4kLmRpdmBcbiAgd2lkdGg6IDEwMCU7XG5gO1xuZnVuY3Rpb24gTGwoe1xuICBjaGlsZHJlbjogZSxcbiAgY29udGFpbmVyOiB0ID0gd2luZG93LmRvY3VtZW50LmJvZHlcbn0pIHtcbiAgcmV0dXJuIGlsKGUsIHQpO1xufVxuY29uc3QgWEwgPSAkLmRpdmBcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xuYDtcbiQuZGl2KFxuICAoeyB0aGVtZTogeyBjb2xvcnM6IGUgfSB9KSA9PiBvMWBcbiAgICAgIGJhY2tncm91bmQtY29sb3I6ICR7ZS5iYWNrZ3JvdW5kcy5iZ1RlcnRpYXJ5fTtcbiAgICAgIGJvcmRlci1yYWRpdXM6IDRweDtcbiAgICBgXG4pO1xuY29uc3QgWDUgPSAkLmRpdihcbiAgKHtcbiAgICAkaXNPcGVuZWRVcDogZSxcbiAgICB0aGVtZToge1xuICAgICAgYm9yZGVyUmFkaXVzOiB0LFxuICAgICAgY29sb3JzOiBvLFxuICAgICAgY3ViaWNCZXppZXI6IG4sXG4gICAgICB0eXBvZ3JhcGh5OiByLFxuICAgICAgbGluZUhlaWdodDogaSxcbiAgICAgIEdMT0JBTF9JVEVNX0hFSUdIVF9DT05ERU5TRUQ6IGEsXG4gICAgICBHTE9CQUxfSVRFTV9IRUlHSFQ6IHMsXG4gICAgICBzcGFjaW5nczogbCxcbiAgICAgIGFuaW1hdGlvbnM6IHBcbiAgICB9LFxuICAgIHdpZHRoOiBkID0gXCIxMDAlXCIsXG4gICAgY29vcmRzOiBiLFxuICAgICRib2R5UGFkZGluZzogTVxuICB9KSA9PiB7XG4gICAgY29uc3QgeyBpbm5lcldpZHRoOiB1LCBpbm5lckhlaWdodDogQSB9ID0gd2luZG93LCB6ID0gZSA/IG8xYFxuICAgICAgICAgIGJvdHRvbTogJHtiID8gYCR7QSAtIGIuYm90dG9tfXB4YCA6IFwiMTAwJVwifTtcbiAgICAgICAgICBtYXJnaW4tYm90dG9tOiAke2wuc3A4fTtcbiAgICAgICAgYCA6IG8xYFxuICAgICAgICAgIHRvcDogJHtiID8gYCR7TnVtYmVyKGIudG9wICsgYi5oZWlnaHQpfXB4YCA6IFwiMTAwJVwifTtcbiAgICAgICAgICBtYXJnaW4tdG9wOiAke2wuc3A0fTtcbiAgICAgICAgYDtcbiAgICByZXR1cm4gbzFgXG4gICAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgICBtaW4taGVpZ2h0OiAke2F9O1xuICAgICAgbWluLXdpZHRoOiA1MHB4O1xuICAgICAgd2lkdGg6ICR7ZH07XG4gICAgICBtYXgtd2lkdGg6ICR7ZH07XG4gICAgICBib3gtc2l6aW5nOiBib3JkZXItYm94O1xuICAgICAgcGFkZGluZzogJHtNIHx8IGwuc3A4fTtcbiAgICAgIGJhY2tncm91bmQ6ICR7by5iYWNrZ3JvdW5kcy5iZ1ByaW1hcnl9O1xuICAgICAgYm9yZGVyLXJhZGl1czogJHt0LmJhc2V9O1xuICAgICAgYW5pbWF0aW9uLWR1cmF0aW9uOiAwLjNzO1xuICAgICAgYW5pbWF0aW9uLXRpbWluZy1mdW5jdGlvbjogJHtufTtcbiAgICAgIGFuaW1hdGlvbi1maWxsLW1vZGU6IGZvcndhcmRzO1xuICAgICAgYW5pbWF0aW9uLW5hbWU6ICR7cC5mYWRlSW59O1xuICAgICAgZm9udC1zaXplOiAke3IudDE0fTtcbiAgICAgIGxpbmUtaGVpZ2h0OiAke2kubGgyMn07XG4gICAgICBib3JkZXI6IDFweCBzb2xpZCAke28uYm9yZGVyLmJvcmRlclRlcnRpYXJ5fTtcbiAgICAgIHotaW5kZXg6IDEwO1xuXG4gICAgICBsaSA+IGRpdiA+IGxhYmVsID4gc3BhbiB7XG4gICAgICAgIHdpZHRoOiAke2R9O1xuICAgICAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2sgIWltcG9ydGFudDtcbiAgICAgICAgb3ZlcmZsb3c6IGhpZGRlbjtcbiAgICAgICAgd2hpdGUtc3BhY2U6IG5vd3JhcDtcbiAgICAgICAgdGV4dC1vdmVyZmxvdzogZWxsaXBzaXM7XG4gICAgICB9XG4gICAgICBsaSA+IHNwYW4ge1xuICAgICAgICB3aWR0aDogJHtkfTtcbiAgICAgICAgZGlzcGxheTogaW5saW5lLWJsb2NrICFpbXBvcnRhbnQ7XG4gICAgICAgIG92ZXJmbG93OiBoaWRkZW47XG4gICAgICAgIHdoaXRlLXNwYWNlOiBub3dyYXA7XG4gICAgICAgIHRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzO1xuICAgICAgfVxuICAgICAgJHt6fTtcblxuICAgICAgJi5hbGlnbi1jZW50ZXIge1xuICAgICAgICBsZWZ0OiAke2IgPyBgJHtiLmxlZnQgKyBiLndpZHRoIC8gMn1weGAgOiBcIjUwJVwifTtcbiAgICAgICAgbWFyZ2luLWxlZnQ6IC0ke051bWJlcihwYXJzZUZsb2F0KGQpKSAvIDJ9cHg7XG4gICAgICB9XG5cbiAgICAgICYuYWxpZ24tcmlnaHQge1xuICAgICAgICByaWdodDogJHtiID8gdSAtIGIubGVmdCAtIGIud2lkdGggOiAwfXB4O1xuICAgICAgfVxuXG4gICAgICAmLmFsaWduLWxlZnQge1xuICAgICAgICBsZWZ0OiAke2IgPyBiLmxlZnQgOiAwfXB4O1xuICAgICAgfVxuXG4gICAgICAuc2Nyb2xsYmFyLWNvbnRhaW5lciB7XG4gICAgICAgIG1heC1oZWlnaHQ6ICR7TnVtYmVyKHBhcnNlRmxvYXQocykpICogNn1yZW07XG4gICAgICB9XG5cbiAgICAgIC5wcy0tYWN0aXZlLXkge1xuICAgICAgICBtYXJnaW4tcmlnaHQ6IC0ke2wuc3A4fTtcbiAgICAgIH1cbiAgICBgO1xuICB9XG4pLCBVTCA9IHR5cGVvZiB3aW5kb3cgPCBcInVcIiA/IFQ1IDogUDE7XG5mdW5jdGlvbiBZTChlLCB0LCBvKSB7XG4gIGNvbnN0IG4gPSBuMCh0KTtcbiAgVUwoKCkgPT4ge1xuICAgIG4uY3VycmVudCA9IHQ7XG4gIH0sIFt0XSksIFAxKCgpID0+IHtcbiAgICBjb25zdCByID0gKG8gPT0gbnVsbCA/IHZvaWQgMCA6IG8uY3VycmVudCkgfHwgd2luZG93O1xuICAgIGlmICghKHIgJiYgci5hZGRFdmVudExpc3RlbmVyKSlcbiAgICAgIHJldHVybjtcbiAgICBjb25zdCBpID0gKGEpID0+IG4uY3VycmVudChhKTtcbiAgICByZXR1cm4gci5hZGRFdmVudExpc3RlbmVyKGUsIGkpLCAoKSA9PiB7XG4gICAgICByLnJlbW92ZUV2ZW50TGlzdGVuZXIoZSwgaSk7XG4gICAgfTtcbiAgfSwgW2UsIG9dKTtcbn1cbmZ1bmN0aW9uIEdMKGUsIHQsIG8gPSBcIm1vdXNlZG93blwiKSB7XG4gIFlMKG8sIChuKSA9PiB7XG4gICAgY29uc3QgciA9IGUgPT0gbnVsbCA/IHZvaWQgMCA6IGUuY3VycmVudDtcbiAgICAhciB8fCByLmNvbnRhaW5zKG4udGFyZ2V0KSB8fCB0KG4pO1xuICB9KTtcbn1cbmNvbnN0IGl0ID0gKHtcbiAgYm9keTogZSxcbiAgcG9zaXRpb246IHQgPSBPbC5MRUZULFxuICBjaGlsZHJlbjogbyxcbiAgaXNTaG93ZWQ6IG4sXG4gIG9uQ2hhbmdlOiByLFxuICBpc0Rpc2FibGVkOiBpLFxuICBwcmV2ZW50Q2xvc2VPbkNsaWNrSW5zaWRlOiBhLFxuICBpc0JvZHlHZW5lcmF0ZWQ6IHMsXG4gIGRyb3Bkb3duQm9keVdpZHRoOiBsLFxuICBib2R5UGFkZGluZzogcCxcbiAgZHJvcGRvd25TdHlsZXM6IGRcbn0pID0+IHtcbiAgY29uc3QgYiA9IG4wKG51bGwpLCBNID0gbjAobnVsbCksIFt1LCBBXSA9IFQxKCExKSwgW3osIGZdID0gVDEoITEpLCBPID0gXzEoXG4gICAgKEIpID0+IHtcbiAgICAgIEIuc3RvcFByb3BhZ2F0aW9uKCksICghYSAmJiAhbiB8fCAhKEIudGFyZ2V0IGluc3RhbmNlb2YgSFRNTEVsZW1lbnQpIHx8ICFNLmN1cnJlbnQgfHwgIU0uY3VycmVudC5jb250YWlucyhCLnRhcmdldCkpICYmIChBKCExKSwgciAmJiByKCExKSk7XG4gICAgfSxcbiAgICBbciwgbiwgYV1cbiAgKSwgaCA9ICgpID0+IHtcbiAgICB2YXIgSDtcbiAgICBjb25zdCBCID0gd2luZG93LnBhZ2VZT2Zmc2V0LCBYID0gd2luZG93LmlubmVySGVpZ2h0LCB3ID0gKCgoSCA9IGIuY3VycmVudCkgPT0gbnVsbCA/IHZvaWQgMCA6IEgub2Zmc2V0VG9wKSB8fCAwKSAtIEIgPiBYIC8gMjtcbiAgICBmKHcpO1xuICB9O1xuICBHTChNLCBPKSwgUDEoKCkgPT4ge1xuICAgIGgoKSwgQSghIW4pO1xuICB9LCBbbl0pO1xuICBjb25zdCBnID0gKEIpID0+IHtcbiAgICBCLnN0b3BQcm9wYWdhdGlvbigpLCAhaSAmJiBuID09PSB2b2lkIDAgJiYgKHIgJiYgcighdSksIGgoKSwgQSgoWCkgPT4gIVgpKTtcbiAgfSwgdiA9IG0wKCgpID0+IGBkcm9wZG93bi1ib2R5IGFsaWduLSR7dH1gLCBbdF0pO1xuICByZXR1cm4gLyogQF9fUFVSRV9fICovIGUxKFxuICAgIFhMLFxuICAgIHtcbiAgICAgIGNsYXNzTmFtZTogXCJkcm9wZG93blwiLFxuICAgICAgcmVmOiBiLFxuICAgICAgb25DbGljazogZyxcbiAgICAgIGNoaWxkcmVuOiBbXG4gICAgICAgIC8qIEBfX1BVUkVfXyAqLyBjKFwiZGl2XCIsIHsgY2hpbGRyZW46IG8gfSksXG4gICAgICAgIHUgJiYgLyogQF9fUFVSRV9fICovIGMocyA/IExsIDogVTIsIHsgY2hpbGRyZW46IC8qIEBfX1BVUkVfXyAqLyBjKFxuICAgICAgICAgIFg1LFxuICAgICAgICAgIHtcbiAgICAgICAgICAgICRib2R5UGFkZGluZzogcCxcbiAgICAgICAgICAgIHJlZjogTSxcbiAgICAgICAgICAgIGNsYXNzTmFtZTogdixcbiAgICAgICAgICAgICRpc09wZW5lZFVwOiB6LFxuICAgICAgICAgICAgY29vcmRzOiAoKCkgPT4gcyAmJiBiLmN1cnJlbnQgPyBiLmN1cnJlbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkgOiBudWxsKSgpLFxuICAgICAgICAgICAgd2lkdGg6IGwsXG4gICAgICAgICAgICBzdHlsZTogZCxcbiAgICAgICAgICAgIGNoaWxkcmVuOiBlXG4gICAgICAgICAgfVxuICAgICAgICApIH0pXG4gICAgICBdXG4gICAgfVxuICApO1xufSwgVTUgPSAoZSwgdCwgbykgPT4ge1xuICBtMS51c2VFZmZlY3QoKCkgPT4ge1xuICAgIGNvbnN0IG4gPSAocikgPT4ge1xuICAgICAgdCAmJiByLnRhcmdldCBpbnN0YW5jZW9mIEhUTUxFbGVtZW50ICYmIGUuY3VycmVudCAmJiAhZS5jdXJyZW50LmNvbnRhaW5zKHIudGFyZ2V0KSAmJiBvICYmIG8oKTtcbiAgICB9O1xuICAgIHJldHVybiBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKFwibW91c2Vkb3duXCIsIG4pLCAoKSA9PiB7XG4gICAgICBkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKFwibW91c2Vkb3duXCIsIG4pO1xuICAgIH07XG4gIH0sIFtlLCB0LCBvXSk7XG59LCBRTCA9ICQuZGl2KFxuICAoeyB0aGVtZTogeyBzcGFjaW5nczogZSwgY29sb3JzOiB0IH0sIHdpZHRoOiBvIH0pID0+IG8xYFxuICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgICBcbiAgICAmID4gLmRyb3Bkb3duID4gLmRyb3Bkb3duLWJvZHkge1xuICAgICAgcGFkZGluZzogJHtlLnNwOH07XG4gICAgICB3aWR0aDogJHtvfXB4O1xuICAgICAgICBiYWNrZ3JvdW5kOiAke3QuYmFja2dyb3VuZHMuYmdQcmltYXJ5fTtcbiAgICAgICAgYm9yZGVyOiAxcHggc29saWQgJHt0LmJvcmRlci5ib3JkZXJQcmltYXJ5fTtcbiAgICB9XG4gIGBcbiksIFpMID0gJC5kaXYoXG4gICh7IHRoZW1lOiB7IHNwYWNpbmdzOiBlIH0gfSkgPT4gbzFgXG4gICAgcGFkZGluZy1ib3R0b206ICR7ZS5zcDh9O1xuICBgXG4pLCBqTCA9ICQuZGl2KFxuICAoeyB0aGVtZTogeyBzcGFjaW5nczogZSB9IH0pID0+IG8xYFxuICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgICBqdXN0aWZ5LWNvbnRlbnQ6IGZsZXgtZW5kO1xuICAgIHBhZGRpbmctdG9wOiAke2Uuc3A4fTtcbiAgICBib3gtc2l6aW5nOiBib3JkZXItYm94O1xuICAgIGdhcDogOHB4O1xuXG5cbiAgYFxuKTtcbmZ1bmN0aW9uIEVyKGUpIHtcbiAgY29uc3Qge1xuICAgIGNoaWxkcmVuOiB0LFxuICAgIGFwcGx5VGV4dDogbyA9IFwiQXBwbHlcIixcbiAgICBjbGVhclRleHQ6IG4gPSBcIkNsZWFyXCIsXG4gICAgcG9zaXRpb246IHIsXG4gICAgd2lkdGg6IGkgPSAzMzYsXG4gICAgaXNEaXNhYmxlZDogYSxcbiAgICBidXR0b246IHMsXG4gICAgaXNTaG93ZWQ6IGwsXG4gICAgaXNGaWx0ZXJWYWx1ZUNoYW5nZWQ6IHAsXG4gICAgb25BcHBseUZpbHRlcjogZCxcbiAgICBvbkNsZWFyRmlsdGVyOiBiLFxuICAgIGhhbmRsZURyb3Bkb3duU2hvd2VkOiBNLFxuICAgIGlzRW5hYmxlQXBwbHlCdG46IHVcbiAgfSA9IGUsIEEgPSBuMChudWxsKTtcbiAgcmV0dXJuIFU1KEEsIGwsIE0pLCAvKiBAX19QVVJFX18gKi8gYyhRTCwgeyB3aWR0aDogaSwgcmVmOiBBLCBjaGlsZHJlbjogLyogQF9fUFVSRV9fICovIGMoXG4gICAgaXQsXG4gICAge1xuICAgICAgYm9keTogLyogQF9fUFVSRV9fICovIGUxKHMwLCB7IGNoaWxkcmVuOiBbXG4gICAgICAgIC8qIEBfX1BVUkVfXyAqLyBjKFpMLCB7IGNoaWxkcmVuOiB0IH0pLFxuICAgICAgICAvKiBAX19QVVJFX18gKi8gYyhQMiwgeyAkZGVmYXVsdDogITAgfSksXG4gICAgICAgIC8qIEBfX1BVUkVfXyAqLyBlMShqTCwgeyBjaGlsZHJlbjogW1xuICAgICAgICAgIC8qIEBfX1BVUkVfXyAqLyBjKFxuICAgICAgICAgICAgQjIsXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIG9uQ2xpY2s6IGIsXG4gICAgICAgICAgICAgIGlzRGlzYWJsZWQ6ICFwLFxuICAgICAgICAgICAgICBidXR0b25UeXBlOiBcImxpbmtcIixcbiAgICAgICAgICAgICAgc2l6ZTogXCJzbVwiLFxuICAgICAgICAgICAgICBjaGlsZHJlbjogblxuICAgICAgICAgICAgfVxuICAgICAgICAgICksXG4gICAgICAgICAgLyogQF9fUFVSRV9fICovIGMoXG4gICAgICAgICAgICBCMixcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgb25DbGljazogZCxcbiAgICAgICAgICAgICAgYnV0dG9uVHlwZTogXCJwcmltYXJ5XCIsXG4gICAgICAgICAgICAgIGlzRGlzYWJsZWQ6IHUsXG4gICAgICAgICAgICAgIHNpemU6IFwic21cIixcbiAgICAgICAgICAgICAgY2hpbGRyZW46IG9cbiAgICAgICAgICAgIH1cbiAgICAgICAgICApXG4gICAgICAgIF0gfSlcbiAgICAgIF0gfSksXG4gICAgICBwb3NpdGlvbjogcixcbiAgICAgIGlzU2hvd2VkOiBsLFxuICAgICAgcHJldmVudENsb3NlT25DbGlja0luc2lkZTogITAsXG4gICAgICBpc0Rpc2FibGVkOiBhLFxuICAgICAgZHJvcGRvd25Cb2R5V2lkdGg6IFwiMzM2cHhcIixcbiAgICAgIGNoaWxkcmVuOiBzXG4gICAgfVxuICApIH0pO1xufVxuY29uc3QgVjIgPSAkLmRpdigoeyB0aGVtZTogeyBib3JkZXJSYWRpdXM6IGUsIHR5cG9ncmFwaHk6IHQsIGNvbG9yczogbyB9LCAkbm9EaWdpdDogbiwgJHZhcmlhbnQ6IHIgfSkgPT4gbzFgXG4gICAgaGVpZ2h0OiAxNHB4O1xuICAgIG1pbi13aWR0aDogOHB4O1xuICAgIGRpc3BsYXk6IGZsZXg7XG4gICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XG4gICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgICBmb250LXNpemU6ICR7dC50MTB9O1xuICAgIGJhY2tncm91bmQtY29sb3I6ICR7ciA9PT0gXCJibHVlXCIgfHwgciA9PT0gdm9pZCAwID8gYCR7by5iYWNrZ3JvdW5kcy5iZ1RlcnRpYXJ5fWAgOiBgJHtvLmJhY2tncm91bmRzLmJnRXJyb3JQcmltYXJ5fWB9O1xuICAgIGNvbG9yOiAke28udGV4dEljb24udGV4dFRlcnRpYXJ5fTtcbiAgICBib3JkZXItcmFkaXVzOiAke2UueHhsfTtcbiAgICBwYWRkaW5nOiAwIDRweDtcbiAgICAke24gJiYgbzFgXG4gICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAke3IgPT09IFwiYmx1ZVwiIHx8IHIgPT09IHZvaWQgMCA/IGAke28uYmFja2dyb3VuZHMuYmdUZXJ0aWFyeX1gIDogYCR7by5iYWNrZ3JvdW5kcy5iZ0Vycm9yUHJpbWFyeX1gfTtcbiAgICAgIGhlaWdodDogOHB4O1xuICAgICAgd2lkdGg6IDhweDtcbiAgICAgIGJvcmRlci1yYWRpdXM6ICR7ZS54eGx9O1xuICAgICAgbWluLXdpZHRoOiBhdXRvO1xuICAgICAgcGFkZGluZzogMDtcbiAgICBgfVxuICBgKSwgS0wgPSAkLmRpdihcbiAgKHsgdGhlbWU6IHsgc3BhY2luZ3M6IGUgfSwgJG5vRGlnaXQ6IHQsICRiYWRnZVNpemU6IG8gfSkgPT4gbzFgXG4gICAgcG9zaXRpb246IHJlbGF0aXZlO1xuXG4gICAgJHtWMn0ge1xuICAgICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgICAgdG9wOiAtJHtlLnNwNn07XG4gICAgICByaWdodDogJHtvID09PSAxID8gXCItNnB4XCIgOiBvID09PSAyID8gXCItOS41cHhcIiA6IG8gPT09IDMgPyBcIi0xNHB4XCIgOiAwfTtcbiAgICAgICR7dCAmJiBvMWBcbiAgICAgICAgdG9wOiAtNHB4O1xuICAgICAgICByaWdodDogLTRweDtcbiAgICAgIGB9XG4gICAgfVxuICBgXG4pLCBVZSA9ICQuc3BhbihcbiAgKHsgdGhlbWU6IHsgbWl4aW5zOiBlIH0gfSkgPT4gbzFgXG4gICAgZGlzcGxheTogYmxvY2s7XG4gICAgbWF4LXdpZHRoOiA5MHB4O1xuICAgICR7ZS5lbGxpcHNpc31cbiAgYFxuKSwgdmwgPSAkLmRpdihcbiAgKHsgdGhlbWU6IHsgY29sb3JzOiBlIH0sICRpc0FjdGl2ZTogdCB9KSA9PiBvMWBcbiAgICBkaXNwbGF5OiBmbGV4O1xuICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gICAgZ2FwOiA0cHg7XG4gICAgJjpob3ZlciB7XG4gICAgICBjb2xvcjogJHt0ID8gZS50ZXh0SWNvbi50ZXh0VGVydGlhcnkgOiBlLnRleHRJY29uLnRleHRQcmVzc2VkfTtcbiAgICB9XG4gICAgJjpmb2N1cyB7XG4gICAgICBjb2xvcjogJHtlLnRleHRJY29uLnRleHRTZWNvbmRhcnl9ICFpbXBvcnRhbnQgO1xuICAgIH1cbiAgICBjb2xvcjogJHt0ID8gZS50ZXh0SWNvbi50ZXh0VGVydGlhcnkgOiBlLnRleHRJY29uLnRleHRTZWNvbmRhcnl9O1xuICAgICR7VjJ9IHtcbiAgICAgIHdpZHRoOiA0cHg7XG4gICAgICBoZWlnaHQ6IDRweDtcbiAgICAgIGJhY2tncm91bmQ6ICR7dCA/IGUudGV4dEljb24udGV4dFRlcnRpYXJ5IDogZS50ZXh0SWNvbi50ZXh0U2Vjb25kYXJ5fTtcbiAgICB9XG4gIGBcbiksIEpMID0gJC5kaXYoXG4gICh7IHRoZW1lOiB7IHNwYWNpbmdzOiBlIH0gfSkgPT4gbzFgXG4gICAgZGlzcGxheTogZmxleDtcbiAgICBhbGlnbi1pdGVtczogY2VudGVyO1xuICAgIGdhcDogNHB4O1xuICAgIGZsZXgtd3JhcDogd3JhcDtcbiAgICBtYXJnaW4tYm90dG9tOiAke2Uuc3A4fTtcbiAgYFxuKSwgSXQgPSAkLnNwYW4oXG4gICh7fSkgPT4gbzFgXG4gICAgZGlzcGxheTogZmxleDtcbiAgICBhbGlnbi1pdGVtczogY2VudGVyO1xuICAgIGdhcDogNHB4O1xuICAgIHN2ZyB7XG4gICAgICB3aWR0aDogMTJweDtcbiAgICB9XG4gIGBcbiksIERhID0gJC5zcGFuKFxuICAoeyB0aGVtZTogeyBjb2xvcnM6IGUgfSB9KSA9PiBvMWBcbiAgICBkaXYge1xuICAgICAgYmFja2dyb3VuZC1jb2xvcjogJHtlLmJhY2tncm91bmRzLmJnVGVydGlhcnl9O1xuICAgIH1cbiAgYFxuKSwgZDMgPSAkLnNwYW4oXG4gICh7IHRoZW1lOiB7fSB9KSA9PiBvMWBcbiAgICBzdmcge1xuICAgICAgb3BhY2l0eTogMC4yO1xuICAgIH1cbiAgYFxuKSwgX0wgPSAkKEY1KShcbiAgKHtcbiAgICB0aGVtZTogeyBjb2xvcnM6IGUsIGZvbnRXZWlnaHQ6IHQsIHR5cG9ncmFwaHk6IG8sIGxpbmVIZWlnaHQ6IG4sIGl0ZW1TaXplOiByIH0sXG4gICAgJGlzQWN0aXZlOiBpLFxuICAgIGlzRmlsdGVyZWQ6IGEsXG4gICAgLi4uc1xuICB9KSA9PiBvMWBcbiAgICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgICBhbGlnbi1pdGVtczogY2VudGVyO1xuICAgICAganVzdGlmeS1jb250ZW50OiBzcGFjZS1iZXR3ZWVuO1xuICAgICAgZm9udC1zaXplOiAke28udDEyfTtcbiAgICAgIGJhY2tncm91bmQtY29sb3I6ICR7ZS5iYWNrZ3JvdW5kcy5iZ1ByaW1hcnl9ICFpbXBvcnRhbnQ7XG4gICAgICBib3JkZXItcmFkaXVzOiA0MHB4O1xuICAgICAgaGVpZ2h0OiAke3IubWR9O1xuICAgICAgd2hpdGUtc3BhY2U6IG5vd3JhcDtcbiAgICAgIG1pbi13aWR0aDogbWluLWNvbnRlbnQ7XG4gICAgICAvL25ld1xuICAgICAgY29sb3I6ICR7ZS50ZXh0SWNvbi50ZXh0UHJpbWFyeX0gIWltcG9ydGFudDtcbiAgICAgIGJveC1zaGFkb3c6ICR7JDAoZS5ib3JkZXIuYm9yZGVyVGVydGlhcnkpfTtcbiAgICAgIGxpbmUtaGVpZ2h0OiAke24ubGgyMH07XG4gICAgICBmb250LXdlaWdodDogJHt0LnJlZ3VsYXJ9O1xuICAgICAgJjpub3QoOmRpc2FibGVkKSB7XG4gICAgICAgICY6aG92ZXIge1xuICAgICAgICAgICR7IWkgJiYgIWEgJiYgbzFgXG4gICAgICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAke2UuYmFja2dyb3VuZHMuYmdIb3ZlclByaW1hcnl9ICFpbXBvcnRhbnQ7XG4gICAgICAgICAgICBib3gtc2hhZG93OiAkeyQwKGUuYm9yZGVyLmJvcmRlclRlcnRpYXJ5KX07XG4gICAgICAgICAgYH1cbiAgICAgICAgfVxuXG4gICAgICAgICY6Zm9jdXMtdmlzaWJsZSB7XG4gICAgICAgICAgY29sb3I6ICR7ZS50ZXh0SWNvbi50ZXh0UHJpbWFyeX0gIWltcG9ydGFudDtcbiAgICAgICAgICBib3JkZXItY29sb3I6ICR7ZS5ib3JkZXIuYm9yZGVyRm9jdXNlZH0gbXBvICFpbXBvcnRhbnQ7XG4gICAgICAgICAgYm94LXNoYWRvdzogJHskMChlLmJvcmRlci5ib3JkZXJGb2N1c2VkKX0gIWltcG9ydGFudDtcbiAgICAgICAgfVxuXG4gICAgICAgICY6YWN0aXZlIHtcbiAgICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAke2UuYmx1ZX07XG4gICAgICAgICAgY29sb3I6ICR7ZS53aGl0ZX07XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHN2ZyB7XG4gICAgICAgICAgY29sb3I6ICR7ZS50ZXh0SWNvbi50ZXh0UHJpbWFyeX0gIWltcG9ydGFudDtcbiAgICAgICAgfVxuICAgICAgJjpkaXNhYmxlZCB7XG4gICAgICAgIGJveC1zaGFkb3c6ICR7JDAoZS5ib3JkZXIuYm9yZGVyRGlzYWJsZWRPbmJnKX0gIWltcG9ydGFudDtcbiAgICAgICAgY29sb3I6ICR7ZS50ZXh0SWNvbi50ZXh0RGlzYWJsZWRPbmJnfSAhaW1wb3J0YW50O1xuICAgICAgICAke0RhfSB7XG4gICAgICAgICAgZGl2IHtcblxuICAgICAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogJHtlLmJhY2tncm91bmRzLmJnRGlzYWJsZWRQcmltYXJ5fTtcbiAgICAgICAgICAgICAgICBjb2xvcjogJHtlLnRleHRJY29uLnRleHREaXNhYmxlZE9uYmd9O1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBzdmcge1xuICAgICAgICAgIGNvbG9yOiAke2UuYmFja2dyb3VuZHMuYmdEaXNhYmxlZFByaW1hcnl9IWltcG9ydGFudDtcbiAgICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiR7ZS50ZXh0SWNvbi50ZXh0RGlzYWJsZWRPbmJnfSAhaW1wb3J0YW50O1xuICAgICAgICAgIGJvcmRlci1yYWRpdXM6ICR7RDMuc3A4fTtcbiAgICAgICAgICBvcGFjaXR5OjE7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgICR7YSAmJiBvMWBcbiAgICAgICAgY29sb3I6ICR7ZS50ZXh0SWNvbi50ZXh0U2Vjb25kYXJ5fSAhaW1wb3J0YW50O1xuICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAke2UuYmFja2dyb3VuZHMuYmdQcmltYXJ5fTtcbiAgICAgICAgYm94LXNoYWRvdzogJHskMChlLmJvcmRlci5ib3JkZXJTZWNvbmRhcnkpfTtcblxuICAgICAgICBzdmcge1xuICAgICAgICAgIGNvbG9yOiAke2UudGV4dEljb24udGV4dFRlcnRpYXJ5fTtcbiAgICAgICAgICBvcGFjaXR5OiAwLjM7XG4gICAgICAgIH1cbiAgICAgICAgJjpob3ZlciB7XG4gICAgICAgICAgY29sb3I6ICR7ZS50ZXh0SWNvbi50ZXh0UHJlc3NlZH0gIWltcG9ydGFudDtcbiAgICAgICAgICBib3gtc2hhZG93OiAkeyQwKGUuYm9yZGVyLmJvcmRlclByZXNzZWQpfSAhaW1wb3J0YW50O1xuICAgICAgICAgIGJhY2tncm91bmQtY29sb3I6ICR7ZS5iYWNrZ3JvdW5kcy5iZ1NlY29uZGFyeX0gIWltcG9ydGFudDtcbiAgICAgICAgfVxuICAgICAgYH1cbiAgICAgICR7aSA/IG8xYFxuICAgICAgICAgICAgY29sb3I6ICR7ZS50ZXh0SWNvbi50ZXh0VGVydGlhcnl9ICFpbXBvcnRhbnQ7XG4gICAgICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAke2UuYmFja2dyb3VuZHMuYmdQcmVzc2VkfSAhaW1wb3J0YW50O1xuICAgICAgICAgICAgYm9yZGVyLWNvbG9yOiAke2UuYmFja2dyb3VuZHMuYmdQcmVzc2VkfSAhaW1wb3J0YW50O1xuICAgICAgICAgICAgYm94LXNoYWRvdzogJHskMChlLmJhY2tncm91bmRzLmJnUHJlc3NlZCl9ICFpbXBvcnRhbnQ7XG4gICAgICAgICAgICBzdmcge1xuICAgICAgICAgICAgICBjb2xvcjogJHtlLnRleHRJY29uLnRleHRUZXJ0aWFyeX0gIWltcG9ydGFudDtcbiAgICAgICAgICAgICAgb3BhY2l0eTogMTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgICR7RGF9IHtcbiAgICAgICAgICAgICAgZGl2IHtcbiAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAke2UuYmFja2dyb3VuZHMuYmdQcmltYXJ5fTtcbiAgICAgICAgICAgICAgICBjb2xvcjogJHtlLnRleHRJY29uLnRleHRQcmVzc2VkfTtcbiAgICAgICAgICAgICAgICBib3JkZXItcmFkaXVzOiAke0QzLnNwOH07XG4gICAgICAgICAgICAgICAgb3BhY2l0eToxO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgYCA6IG8xYFxuICAgICAgICAgICAgY29sb3I6ICR7ZS5kYXJrfTtcbiAgICAgICAgICAgIGJhY2tncm91bmQtY29sb3I6ICR7ZS53aGl0ZX07XG4gICAgICAgICAgICBzdmcge1xuICAgICAgICAgICAgICBjb2xvcjogJHtlLmRhcmt9O1xuICAgICAgICAgICAgfVxuICAgICAgICAgIGB9XG4gICAgYFxuKTtcbmZ1bmN0aW9uIFk1KGUpIHtcbiAgcmV0dXJuIC8qIEBfX1BVUkVfXyAqLyBjZShfTCwgeyAuLi5lLCBrZXk6IFwiaXNBY3RpdmUtXCIgKyBlLiRpc0FjdGl2ZSB9KTtcbn1cbmNvbnN0ICRMID0gKGUpID0+IHtcbiAgaWYgKHR5cGVvZiBlID09IFwibnVtYmVyXCIgJiYgKGUgPSBlLnRvU3RyaW5nKCkpLCB0eXBlb2YgZSAhPSBcInN0cmluZ1wiKVxuICAgIHRocm93IG5ldyBFcnJvcihcIklucHV0IGlzIG5vdCBhIHZhbGlkIG51bWJlciBvciBzdHJpbmdcIik7XG4gIGlmIChlID09PSBcIjBcIilcbiAgICByZXR1cm4gMTtcbiAgY29uc3QgdCA9IGUucmVwbGFjZShcIi5cIiwgXCJcIik7XG4gIHJldHVybiB0ID09PSBcIjk5K1wiIHx8IHQubGVuZ3RoID49IDMgPyAzIDogdC5sZW5ndGg7XG59LCBldiA9IFwiOTkrXCI7XG5mdW5jdGlvbiBBZShlKSB7XG4gIGNvbnN0IHsgY291bnQ6IHQgPSAwLCBjaGlsZHJlbjogbywgbm9EaWdpdDogbiwgdmFyaWFudDogciB9ID0gZSwgaSA9IG0wKCgpID0+IE51bWJlcih0KSA+PSAxID8gTnVtYmVyKHQpID4gOTkgPyBldiA6IE51bWJlcih0KS50b1N0cmluZygpIDogbnVsbCwgW051bWJlcih0KV0pLCBhID0gKCkgPT4gbiA/IC8qIEBfX1BVUkVfXyAqLyBjKFYyLCB7ICR2YXJpYW50OiByLCAkbm9EaWdpdDogbiB9KSA6IC8qIEBfX1BVUkVfXyAqLyBjKFYyLCB7ICR2YXJpYW50OiByLCBjaGlsZHJlbjogaSB9KTtcbiAgcmV0dXJuIG8gPyBOdW1iZXIodCkgPiAwID8gLyogQF9fUFVSRV9fICovIGUxKEtMLCB7ICRub0RpZ2l0OiBuLCAkYmFkZ2VTaXplOiAkTChpKSwgY2hpbGRyZW46IFtcbiAgICAvKiBAX19QVVJFX18gKi8gYyhhLCB7fSksXG4gICAgb1xuICBdIH0pIDogLyogQF9fUFVSRV9fICovIGMoczAsIHsgY2hpbGRyZW46IG8gfSkgOiAvKiBAX19QVVJFX18gKi8gYyhhLCB7fSk7XG59XG5jb25zdCB0diA9ICQoWTUpKFxuICAoeyB0aGVtZTogeyBjb2xvcnM6IGUgfSwgJGlzQWN0aXZlOiB0IH0pID0+IG8xYFxuICAgICR7VjJ9IHtcbiAgICAgIGJhY2tncm91bmQtY29sb3I6ICR7ZS5ibHVlfTtcblxuICAgICAgJjpub3QoOmZpcnN0LWNoaWxkKSB7XG4gICAgICAgIG1hcmdpbi1sZWZ0OiA4cHg7XG4gICAgICB9XG4gICAgfVxuXG4gICAgJjpub3QoOmRpc2FibGVkKSB7XG4gICAgICAmOmFjdGl2ZSB7XG4gICAgICAgICR7VjJ9IHtcbiAgICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAke2Uud2hpdGV9O1xuICAgICAgICAgIGNvbG9yOiAke2UuYmx1ZX07XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICAke3QgJiYgbzFgXG4gICAgICAmOm5vdCg6Zm9jdXMpIHtcbiAgICAgICAgJHtWMn0ge1xuICAgICAgICAgIGJhY2tncm91bmQtY29sb3I6ICR7ZS53aGl0ZX07XG4gICAgICAgICAgY29sb3I6ICR7ZS5ibHVlfTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIGB9XG5cbiAgICAmOmRpc2FibGVkIHtcbiAgICAgICR7VjJ9IHtcbiAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogJHtlLmxhdmVuZGVyR3JleX07XG4gICAgICAgIGNvbG9yOiAke2Uud2hpdGV9O1xuICAgICAgfVxuICAgIH1cbiAgYFxuKSwgb3YgPSAkKFVlKWBgO1xuZnVuY3Rpb24gcnYoZSkge1xuICBjb25zdCB7IGNvdW50OiB0LCBjaGlsZHJlbjogbywgLi4ubiB9ID0gZTtcbiAgcmV0dXJuIC8qIEBfX1BVUkVfXyAqLyBlMSh0diwgeyAuLi5uLCBpc0FwcGxpZWQ6ICEhdCwgY2hpbGRyZW46IFtcbiAgICBvICYmIC8qIEBfX1BVUkVfXyAqLyBjKG92LCB7IGNoaWxkcmVuOiBvIH0pLFxuICAgIC8qIEBfX1BVUkVfXyAqLyBjKEFlLCB7IGNvdW50OiB0IH0pXG4gIF0gfSk7XG59XG5jb25zdCBudiA9ICQoVWUpYFxuICAmICsgJiB7XG4gICAgJjpiZWZvcmUge1xuICAgICAgY29udGVudDogJ1xcXFwyMDIyJztcbiAgICAgIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgICAgIHZlcnRpY2FsLWFsaWduOiBtaWRkbGU7XG4gICAgICBtYXJnaW46IDAgOHB4O1xuICAgICAgbGluZS1oZWlnaHQ6IDE7XG4gICAgfVxuICB9XG5gO1xuZnVuY3Rpb24gaXYoZSkge1xuICBjb25zdCB7IHJhbmdlOiB0ID0gW10sIC4uLm8gfSA9IGUsIG4gPSBtMChcbiAgICAoKSA9PiB0Lm1hcChcbiAgICAgIChyLCBpKSA9PiAvKiBAX19QVVJFX18gKi8gYyhudiwgeyBjaGlsZHJlbjogciB9LCBpKVxuICAgICksXG4gICAgW3RdXG4gICk7XG4gIHJldHVybiAvKiBAX19QVVJFX18gKi8gYyhZNSwgeyAuLi5vLCBpc0FwcGxpZWQ6ICEhdC5sZW5ndGgsIGNoaWxkcmVuOiBuIH0pO1xufVxuZnVuY3Rpb24gYjMoZSkge1xuICBjb25zdCB7IGlzRGlzYWJsZWQ6IHQsIGNvdW50OiBvLCByYW5nZTogbiwgLi4uciB9ID0gZSwgaSA9IHsgZGlzYWJsZWQ6IHQsIC4uLnIgfTtcbiAgcmV0dXJuIG4gJiYgbi5sZW5ndGggPyAvKiBAX19QVVJFX18gKi8gYyhpdiwgeyByYW5nZTogbiwgLi4uaSB9KSA6IG8gPyAvKiBAX19QVVJFX18gKi8gYyhydiwgeyBjb3VudDogbywgLi4uaSB9KSA6IC8qIEBfX1BVUkVfXyAqLyBjKFk1LCB7IC4uLmkgfSk7XG59XG5jb25zdCBpbyA9IChlKSA9PiB7XG4gIGNvbnN0IFt0LCBvXSA9IFQxKGUgfHwgITEpLCBuID0gXzEoXG4gICAgKCkgPT4gbygoaSkgPT4gIWkpLFxuICAgIFtvXVxuICApLCByID0gXzEoXG4gICAgKGkpID0+IG8oKCkgPT4gaSksXG4gICAgW29dXG4gICk7XG4gIHJldHVybiBbdCwgbiwgcl07XG59O1xuZnVuY3Rpb24gYXYoZSkge1xuICBjb25zdCBbdCwgb10gPSBUMSgwKSwgbiA9IF8xKFxuICAgIChyKSA9PiB7XG4gICAgICByLmNvZGUgPT09IFwiQXJyb3dEb3duXCIgPyAoci5wcmV2ZW50RGVmYXVsdCgpLCBvKHQgPT09IGUgLSAxID8gMCA6IHQgKyAxKSkgOiByLmNvZGUgPT09IFwiQXJyb3dVcFwiICYmIChyLnByZXZlbnREZWZhdWx0KCksIG8odCA9PT0gMCA/IGUgLSAxIDogdCAtIDEpKTtcbiAgICB9LFxuICAgIFtlLCB0LCBvXVxuICApO1xuICByZXR1cm4gUDEoKCkgPT4gKGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoXCJrZXlkb3duXCIsIG4sICExKSwgKCkgPT4ge1xuICAgIGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJrZXlkb3duXCIsIG4sICExKTtcbiAgfSksIFtuXSksIFt0LCBvXTtcbn1cbmNvbnN0IHN2ID0gKCkgPT4ge1xuICBjb25zdCBlID0gbjAoITApO1xuICByZXR1cm4gUDEoKCkgPT4ge1xuICAgIGUuY3VycmVudCA9ICExO1xuICB9LCBbXSksIGUuY3VycmVudDtcbn07XG5mdW5jdGlvbiBoOChlKSB7XG4gIGNvbnN0IHtcbiAgICBvbkNsZWFyRmlsdGVyOiB0LFxuICAgIG9uQXBwbHlGaWx0ZXI6IG8sXG4gICAgdmFsdWU6IG4sXG4gICAgaXNEaXNhYmxlZDogcixcbiAgICBidXR0b25UZXh0OiBpLFxuICAgIC4uLmFcbiAgfSA9IGUsIFtzLCBsXSA9IGlvKCExKSwgW3AsIGRdID0gVDEoXCJcIiksIFtiLCBNXSA9IFQxKCExKSwgdSA9IF8xKCgpID0+IHtcbiAgICBvICYmIG8ocCksIGwoKTtcbiAgfSwgW28sIGwsIHBdKSwgQSA9IF8xKCgpID0+IHtcbiAgICBkKFwiXCIpLCBvICYmIG8oXCJcIiksIHQgJiYgdCgpLCBsKCk7XG4gIH0sIFt0XSk7XG4gIFAxKCgpID0+IHtcbiAgICB0eXBlb2YgbiA9PSBcInN0cmluZ1wiICYmIGQobik7XG4gIH0sIFtuXSksIFAxKCgpID0+IHtcbiAgICAobiAhPT0gcCAhPT0gYiB8fCBwKSAmJiBNKCEwKTtcbiAgfSwgW24sIHAsIHMsIGJdKTtcbiAgY29uc3QgeiA9IG0wKFxuICAgICgpID0+IC8qIEBfX1BVUkVfXyAqLyBjKHMwLCB7IGNoaWxkcmVuOiBuID8gLyogQF9fUFVSRV9fICovIGMoXG4gICAgICBiMyxcbiAgICAgIHtcbiAgICAgICAgaXNEaXNhYmxlZDogcixcbiAgICAgICAgJGlzQWN0aXZlOiBzLFxuICAgICAgICBvbkNsaWNrOiBsLFxuICAgICAgICBpc0ZpbHRlcmVkOiAhISghcyAmJiBuKSxcbiAgICAgICAgY2hpbGRyZW46IC8qIEBfX1BVUkVfXyAqLyBlMShJdCwgeyBjaGlsZHJlbjogW1xuICAgICAgICAgIC8qIEBfX1BVUkVfXyAqLyBjKFVlLCB7IGNoaWxkcmVuOiBuIHx8IGkgfSksXG4gICAgICAgICAgcyA/IC8qIEBfX1BVUkVfXyAqLyBjKFxuICAgICAgICAgICAgWjEsXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIG5hbWU6IHMgPyBcIkNoZXZyb25VcERyb3Bkb3duXCIgOiBcIkNoZXZyb25Eb3duRHJvcGRvd25cIixcbiAgICAgICAgICAgICAgc2l6ZTogXCJ4eHNcIlxuICAgICAgICAgICAgfVxuICAgICAgICAgICkgOiAvKiBAX19QVVJFX18gKi8gYyhkMywgeyBvbkNsaWNrOiBBLCBjaGlsZHJlbjogLyogQF9fUFVSRV9fICovIGMoWjEsIHsgbmFtZTogXCJDbG9zZVwiLCBjb2xvcjogYCR7djIuYmxhY2t9YCwgc2l6ZTogXCJ4eHNcIiB9KSB9KVxuICAgICAgICBdIH0pXG4gICAgICB9XG4gICAgKSA6IC8qIEBfX1BVUkVfXyAqLyBjKFxuICAgICAgYjMsXG4gICAgICB7XG4gICAgICAgIGlzRGlzYWJsZWQ6IHIsXG4gICAgICAgICRpc0FjdGl2ZTogcyxcbiAgICAgICAgb25DbGljazogbCxcbiAgICAgICAgaXNGaWx0ZXJlZDogISEoIXMgJiYgbiksXG4gICAgICAgIGNoaWxkcmVuOiAvKiBAX19QVVJFX18gKi8gZTEoSXQsIHsgY2hpbGRyZW46IFtcbiAgICAgICAgICAvKiBAX19QVVJFX18gKi8gYyhVZSwgeyBjaGlsZHJlbjogbiB8fCBpIH0pLFxuICAgICAgICAgIG4gPyAvKiBAX19QVVJFX18gKi8gYyhkMywgeyBvbkNsaWNrOiBBLCBjaGlsZHJlbjogLyogQF9fUFVSRV9fICovIGMoWjEsIHsgbmFtZTogXCJDbG9zZVwiLCBjb2xvcjogYCR7djIuYmxhY2t9YCwgc2l6ZTogXCJ4eHNcIiB9KSB9KSA6IC8qIEBfX1BVUkVfXyAqLyBjKFxuICAgICAgICAgICAgWjEsXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIG5hbWU6IHMgPyBcIkNoZXZyb25VcERyb3Bkb3duXCIgOiBcIkNoZXZyb25Eb3duRHJvcGRvd25cIixcbiAgICAgICAgICAgICAgc2l6ZTogXCJ4eHNcIlxuICAgICAgICAgICAgfVxuICAgICAgICAgIClcbiAgICAgICAgXSB9KVxuICAgICAgfVxuICAgICkgfSksXG4gICAgW2wsIHMsIHIsIG4sIGldXG4gICksIGYgPSBfMShcbiAgICAoTykgPT4gZChPLmN1cnJlbnRUYXJnZXQudmFsdWUpLFxuICAgIFtdXG4gICk7XG4gIHJldHVybiAvKiBAX19QVVJFX18gKi8gYyhcbiAgICBFcixcbiAgICB7XG4gICAgICAuLi5hLFxuICAgICAgYnV0dG9uOiB6LFxuICAgICAgaXNTaG93ZWQ6IHMsXG4gICAgICBpc0ZpbHRlclZhbHVlQ2hhbmdlZDogYixcbiAgICAgIG9uQXBwbHlGaWx0ZXI6IHUsXG4gICAgICBvbkNsZWFyRmlsdGVyOiBBLFxuICAgICAgaGFuZGxlRHJvcGRvd25TaG93ZWQ6IGwsXG4gICAgICBjaGlsZHJlbjogLyogQF9fUFVSRV9fICovIGMoXG4gICAgICAgIElhLFxuICAgICAgICB7XG4gICAgICAgICAgLi4uYSxcbiAgICAgICAgICBpc1JlcXVpcmVkOiAhMSxcbiAgICAgICAgICBwbGFjZWhvbGRlcjogXCJJbnNlcnQgdGV4dCBoZXJlXCIsXG4gICAgICAgICAgb25DaGFuZ2U6IGYsXG4gICAgICAgICAgdmFsdWU6IHAsXG4gICAgICAgICAgaGFuZGxlQ2xlYXJGbjogKCkgPT4ge1xuICAgICAgICAgICAgZChcIlwiKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIClcbiAgICB9XG4gICk7XG59XG5mdW5jdGlvbiBhNChlLCB0KSB7XG4gIHJldHVybiBhNCA9IE9iamVjdC5zZXRQcm90b3R5cGVPZiA/IE9iamVjdC5zZXRQcm90b3R5cGVPZi5iaW5kKCkgOiBmdW5jdGlvbihvLCBuKSB7XG4gICAgcmV0dXJuIG8uX19wcm90b19fID0gbiwgbztcbiAgfSwgYTQoZSwgdCk7XG59XG5mdW5jdGlvbiBWNChlLCB0KSB7XG4gIGUucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZSh0LnByb3RvdHlwZSksIGUucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gZSwgYTQoZSwgdCk7XG59XG5mdW5jdGlvbiBnaShlKSB7XG4gIHJldHVybiBlICYmIGUuc3RvcFByb3BhZ2F0aW9uICYmIGUuc3RvcFByb3BhZ2F0aW9uKCksIGUgJiYgZS5wcmV2ZW50RGVmYXVsdCAmJiBlLnByZXZlbnREZWZhdWx0KCksICExO1xufVxuZnVuY3Rpb24gQ2koZSkge1xuICByZXR1cm4gZSA9PSBudWxsID8gW10gOiBBcnJheS5pc0FycmF5KGUpID8gZS5zbGljZSgpIDogW2VdO1xufVxuZnVuY3Rpb24gb24oZSkge1xuICByZXR1cm4gZSAhPT0gbnVsbCAmJiBlLmxlbmd0aCA9PT0gMSA/IGVbMF0gOiBlLnNsaWNlKCk7XG59XG5mdW5jdGlvbiBybihlKSB7XG4gIE9iamVjdC5rZXlzKGUpLmZvckVhY2goKHQpID0+IHtcbiAgICB0eXBlb2YgZG9jdW1lbnQgPCBcInVcIiAmJiBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKHQsIGVbdF0sICExKTtcbiAgfSk7XG59XG5mdW5jdGlvbiBadChlLCB0KSB7XG4gIHJldHVybiBIYShmdW5jdGlvbihvLCBuKSB7XG4gICAgbGV0IHIgPSBvO1xuICAgIHJldHVybiByIDw9IG4ubWluICYmIChyID0gbi5taW4pLCByID49IG4ubWF4ICYmIChyID0gbi5tYXgpLCByO1xuICB9KGUsIHQpLCB0KTtcbn1cbmZ1bmN0aW9uIEhhKGUsIHQpIHtcbiAgY29uc3QgbyA9IChlIC0gdC5taW4pICUgdC5zdGVwO1xuICBsZXQgbiA9IGUgLSBvO1xuICByZXR1cm4gMiAqIE1hdGguYWJzKG8pID49IHQuc3RlcCAmJiAobiArPSBvID4gMCA/IHQuc3RlcCA6IC10LnN0ZXApLCBwYXJzZUZsb2F0KG4udG9GaXhlZCg1KSk7XG59XG5sZXQgVmEgPSBmdW5jdGlvbihlKSB7XG4gIGZ1bmN0aW9uIHQobikge1xuICAgIHZhciByO1xuICAgIChyID0gZS5jYWxsKHRoaXMsIG4pIHx8IHRoaXMpLm9uS2V5VXAgPSAoKSA9PiB7XG4gICAgICByLm9uRW5kKCk7XG4gICAgfSwgci5vbk1vdXNlVXAgPSAoKSA9PiB7XG4gICAgICByLm9uRW5kKHIuZ2V0TW91c2VFdmVudE1hcCgpKTtcbiAgICB9LCByLm9uVG91Y2hFbmQgPSAocykgPT4ge1xuICAgICAgcy5wcmV2ZW50RGVmYXVsdCgpLCByLm9uRW5kKHIuZ2V0VG91Y2hFdmVudE1hcCgpKTtcbiAgICB9LCByLm9uQmx1ciA9ICgpID0+IHtcbiAgICAgIHIuc2V0U3RhdGUoeyBpbmRleDogLTEgfSwgci5vbkVuZChyLmdldEtleURvd25FdmVudE1hcCgpKSk7XG4gICAgfSwgci5vbk1vdXNlTW92ZSA9IChzKSA9PiB7XG4gICAgICByLnNldFN0YXRlKHsgcGVuZGluZzogITAgfSk7XG4gICAgICBjb25zdCBsID0gci5nZXRNb3VzZVBvc2l0aW9uKHMpLCBwID0gci5nZXREaWZmUG9zaXRpb24obFswXSksIGQgPSByLmdldFZhbHVlRnJvbVBvc2l0aW9uKHApO1xuICAgICAgci5tb3ZlKGQpO1xuICAgIH0sIHIub25Ub3VjaE1vdmUgPSAocykgPT4ge1xuICAgICAgaWYgKHMudG91Y2hlcy5sZW5ndGggPiAxKVxuICAgICAgICByZXR1cm47XG4gICAgICByLnNldFN0YXRlKHsgcGVuZGluZzogITAgfSk7XG4gICAgICBjb25zdCBsID0gci5nZXRUb3VjaFBvc2l0aW9uKHMpO1xuICAgICAgaWYgKHIuaXNTY3JvbGxpbmcgPT09IHZvaWQgMCkge1xuICAgICAgICBjb25zdCBiID0gbFswXSAtIHIuc3RhcnRQb3NpdGlvblswXSwgTSA9IGxbMV0gLSByLnN0YXJ0UG9zaXRpb25bMV07XG4gICAgICAgIHIuaXNTY3JvbGxpbmcgPSBNYXRoLmFicyhNKSA+IE1hdGguYWJzKGIpO1xuICAgICAgfVxuICAgICAgaWYgKHIuaXNTY3JvbGxpbmcpXG4gICAgICAgIHJldHVybiB2b2lkIHIuc2V0U3RhdGUoeyBpbmRleDogLTEgfSk7XG4gICAgICBjb25zdCBwID0gci5nZXREaWZmUG9zaXRpb24obFswXSksIGQgPSByLmdldFZhbHVlRnJvbVBvc2l0aW9uKHApO1xuICAgICAgci5tb3ZlKGQpO1xuICAgIH0sIHIub25LZXlEb3duID0gKHMpID0+IHtcbiAgICAgIGlmICghKHMuY3RybEtleSB8fCBzLnNoaWZ0S2V5IHx8IHMuYWx0S2V5IHx8IHMubWV0YUtleSkpXG4gICAgICAgIHN3aXRjaCAoci5zZXRTdGF0ZSh7IHBlbmRpbmc6ICEwIH0pLCBzLmtleSkge1xuICAgICAgICAgIGNhc2UgXCJBcnJvd0xlZnRcIjpcbiAgICAgICAgICBjYXNlIFwiQXJyb3dEb3duXCI6XG4gICAgICAgICAgY2FzZSBcIkxlZnRcIjpcbiAgICAgICAgICBjYXNlIFwiRG93blwiOlxuICAgICAgICAgICAgcy5wcmV2ZW50RGVmYXVsdCgpLCByLm1vdmVEb3duQnlTdGVwKCk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIFwiQXJyb3dSaWdodFwiOlxuICAgICAgICAgIGNhc2UgXCJBcnJvd1VwXCI6XG4gICAgICAgICAgY2FzZSBcIlJpZ2h0XCI6XG4gICAgICAgICAgY2FzZSBcIlVwXCI6XG4gICAgICAgICAgICBzLnByZXZlbnREZWZhdWx0KCksIHIubW92ZVVwQnlTdGVwKCk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIFwiSG9tZVwiOlxuICAgICAgICAgICAgcy5wcmV2ZW50RGVmYXVsdCgpLCByLm1vdmUoci5wcm9wcy5taW4pO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSBcIkVuZFwiOlxuICAgICAgICAgICAgcy5wcmV2ZW50RGVmYXVsdCgpLCByLm1vdmUoci5wcm9wcy5tYXgpO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSBcIlBhZ2VEb3duXCI6XG4gICAgICAgICAgICBzLnByZXZlbnREZWZhdWx0KCksIHIubW92ZURvd25CeVN0ZXAoci5wcm9wcy5wYWdlRm4oci5wcm9wcy5zdGVwKSk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIFwiUGFnZVVwXCI6XG4gICAgICAgICAgICBzLnByZXZlbnREZWZhdWx0KCksIHIubW92ZVVwQnlTdGVwKHIucHJvcHMucGFnZUZuKHIucHJvcHMuc3RlcCkpO1xuICAgICAgICB9XG4gICAgfSwgci5vblNsaWRlck1vdXNlRG93biA9IChzKSA9PiB7XG4gICAgICBpZiAoIXIucHJvcHMuZGlzYWJsZWQgJiYgcy5idXR0b24gIT09IDIpIHtcbiAgICAgICAgaWYgKHIuc2V0U3RhdGUoeyBwZW5kaW5nOiAhMCB9KSwgIXIucHJvcHMuc25hcERyYWdEaXNhYmxlZCkge1xuICAgICAgICAgIGNvbnN0IGwgPSByLmdldE1vdXNlUG9zaXRpb24ocyk7XG4gICAgICAgICAgci5mb3JjZVZhbHVlRnJvbVBvc2l0aW9uKGxbMF0sIChwKSA9PiB7XG4gICAgICAgICAgICByLnN0YXJ0KHAsIGxbMF0pLCBybihyLmdldE1vdXNlRXZlbnRNYXAoKSk7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgZ2kocyk7XG4gICAgICB9XG4gICAgfSwgci5vblNsaWRlckNsaWNrID0gKHMpID0+IHtcbiAgICAgIGlmICghci5wcm9wcy5kaXNhYmxlZCAmJiByLnByb3BzLm9uU2xpZGVyQ2xpY2sgJiYgIXIuaGFzTW92ZWQpIHtcbiAgICAgICAgY29uc3QgbCA9IHIuZ2V0TW91c2VQb3NpdGlvbihzKSwgcCA9IFp0KHIuY2FsY1ZhbHVlKHIuY2FsY09mZnNldEZyb21Qb3NpdGlvbihsWzBdKSksIHIucHJvcHMpO1xuICAgICAgICByLnByb3BzLm9uU2xpZGVyQ2xpY2socCk7XG4gICAgICB9XG4gICAgfSwgci5jcmVhdGVPbktleURvd24gPSAocykgPT4gKGwpID0+IHtcbiAgICAgIHIucHJvcHMuZGlzYWJsZWQgfHwgKHIuc3RhcnQocyksIHJuKHIuZ2V0S2V5RG93bkV2ZW50TWFwKCkpLCBnaShsKSk7XG4gICAgfSwgci5jcmVhdGVPbk1vdXNlRG93biA9IChzKSA9PiAobCkgPT4ge1xuICAgICAgaWYgKHIucHJvcHMuZGlzYWJsZWQgfHwgbC5idXR0b24gPT09IDIpXG4gICAgICAgIHJldHVybjtcbiAgICAgIHIuc2V0U3RhdGUoeyBwZW5kaW5nOiAhMCB9KTtcbiAgICAgIGNvbnN0IHAgPSByLmdldE1vdXNlUG9zaXRpb24obCk7XG4gICAgICByLnN0YXJ0KHMsIHBbMF0pLCBybihyLmdldE1vdXNlRXZlbnRNYXAoKSksIGdpKGwpO1xuICAgIH0sIHIuY3JlYXRlT25Ub3VjaFN0YXJ0ID0gKHMpID0+IChsKSA9PiB7XG4gICAgICBpZiAoci5wcm9wcy5kaXNhYmxlZCB8fCBsLnRvdWNoZXMubGVuZ3RoID4gMSlcbiAgICAgICAgcmV0dXJuO1xuICAgICAgci5zZXRTdGF0ZSh7IHBlbmRpbmc6ICEwIH0pO1xuICAgICAgY29uc3QgcCA9IHIuZ2V0VG91Y2hQb3NpdGlvbihsKTtcbiAgICAgIHIuc3RhcnRQb3NpdGlvbiA9IHAsIHIuaXNTY3JvbGxpbmcgPSB2b2lkIDAsIHIuc3RhcnQocywgcFswXSksIHJuKHIuZ2V0VG91Y2hFdmVudE1hcCgpKSwgZnVuY3Rpb24oZCkge1xuICAgICAgICBkLnN0b3BQcm9wYWdhdGlvbiAmJiBkLnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgfShsKTtcbiAgICB9LCByLmhhbmRsZVJlc2l6ZSA9ICgpID0+IHtcbiAgICAgIGNvbnN0IHMgPSB3aW5kb3cuc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgIHIucGVuZGluZ1Jlc2l6ZVRpbWVvdXRzLnNoaWZ0KCksIHIucmVzaXplKCk7XG4gICAgICB9LCAwKTtcbiAgICAgIHIucGVuZGluZ1Jlc2l6ZVRpbWVvdXRzLnB1c2gocyk7XG4gICAgfSwgci5yZW5kZXJUaHVtYiA9IChzLCBsKSA9PiB7XG4gICAgICBjb25zdCBwID0gci5wcm9wcy50aHVtYkNsYXNzTmFtZSArIFwiIFwiICsgci5wcm9wcy50aHVtYkNsYXNzTmFtZSArIFwiLVwiICsgbCArIFwiIFwiICsgKHIuc3RhdGUuaW5kZXggPT09IGwgPyByLnByb3BzLnRodW1iQWN0aXZlQ2xhc3NOYW1lIDogXCJcIiksIGQgPSB7IHJlZjogKE0pID0+IHtcbiAgICAgICAgcltcInRodW1iXCIgKyBsXSA9IE07XG4gICAgICB9LCBrZXk6IHIucHJvcHMudGh1bWJDbGFzc05hbWUgKyBcIi1cIiArIGwsIGNsYXNzTmFtZTogcCwgc3R5bGU6IHMsIG9uTW91c2VEb3duOiByLmNyZWF0ZU9uTW91c2VEb3duKGwpLCBvblRvdWNoU3RhcnQ6IHIuY3JlYXRlT25Ub3VjaFN0YXJ0KGwpLCBvbkZvY3VzOiByLmNyZWF0ZU9uS2V5RG93bihsKSwgdGFiSW5kZXg6IDAsIHJvbGU6IFwic2xpZGVyXCIsIFwiYXJpYS1vcmllbnRhdGlvblwiOiByLnByb3BzLm9yaWVudGF0aW9uLCBcImFyaWEtdmFsdWVub3dcIjogci5zdGF0ZS52YWx1ZVtsXSwgXCJhcmlhLXZhbHVlbWluXCI6IHIucHJvcHMubWluLCBcImFyaWEtdmFsdWVtYXhcIjogci5wcm9wcy5tYXgsIFwiYXJpYS1sYWJlbFwiOiBBcnJheS5pc0FycmF5KHIucHJvcHMuYXJpYUxhYmVsKSA/IHIucHJvcHMuYXJpYUxhYmVsW2xdIDogci5wcm9wcy5hcmlhTGFiZWwsIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IEFycmF5LmlzQXJyYXkoci5wcm9wcy5hcmlhTGFiZWxsZWRieSkgPyByLnByb3BzLmFyaWFMYWJlbGxlZGJ5W2xdIDogci5wcm9wcy5hcmlhTGFiZWxsZWRieSwgXCJhcmlhLWRpc2FibGVkXCI6IHIucHJvcHMuZGlzYWJsZWQgfSwgYiA9IHsgaW5kZXg6IGwsIHZhbHVlOiBvbihyLnN0YXRlLnZhbHVlKSwgdmFsdWVOb3c6IHIuc3RhdGUudmFsdWVbbF0gfTtcbiAgICAgIHJldHVybiByLnByb3BzLmFyaWFWYWx1ZXRleHQgJiYgKGRbXCJhcmlhLXZhbHVldGV4dFwiXSA9IHR5cGVvZiByLnByb3BzLmFyaWFWYWx1ZXRleHQgPT0gXCJzdHJpbmdcIiA/IHIucHJvcHMuYXJpYVZhbHVldGV4dCA6IHIucHJvcHMuYXJpYVZhbHVldGV4dChiKSksIHIucHJvcHMucmVuZGVyVGh1bWIoZCwgYik7XG4gICAgfSwgci5yZW5kZXJUcmFjayA9IChzLCBsLCBwKSA9PiB7XG4gICAgICBjb25zdCBkID0geyBrZXk6IHIucHJvcHMudHJhY2tDbGFzc05hbWUgKyBcIi1cIiArIHMsIGNsYXNzTmFtZTogci5wcm9wcy50cmFja0NsYXNzTmFtZSArIFwiIFwiICsgci5wcm9wcy50cmFja0NsYXNzTmFtZSArIFwiLVwiICsgcywgc3R5bGU6IHIuYnVpbGRUcmFja1N0eWxlKGwsIHIuc3RhdGUudXBwZXJCb3VuZCAtIHApIH0sIGIgPSB7IGluZGV4OiBzLCB2YWx1ZTogb24oci5zdGF0ZS52YWx1ZSkgfTtcbiAgICAgIHJldHVybiByLnByb3BzLnJlbmRlclRyYWNrKGQsIGIpO1xuICAgIH07XG4gICAgbGV0IGkgPSBDaShuLnZhbHVlKTtcbiAgICBpLmxlbmd0aCB8fCAoaSA9IENpKG4uZGVmYXVsdFZhbHVlKSksIHIucGVuZGluZ1Jlc2l6ZVRpbWVvdXRzID0gW107XG4gICAgY29uc3QgYSA9IFtdO1xuICAgIGZvciAobGV0IHMgPSAwOyBzIDwgaS5sZW5ndGg7IHMgKz0gMSlcbiAgICAgIGlbc10gPSBadChpW3NdLCBuKSwgYS5wdXNoKHMpO1xuICAgIHJldHVybiByLnJlc2l6ZU9ic2VydmVyID0gbnVsbCwgci5yZXNpemVFbGVtZW50UmVmID0gbTEuY3JlYXRlUmVmKCksIHIuc3RhdGUgPSB7IGluZGV4OiAtMSwgdXBwZXJCb3VuZDogMCwgc2xpZGVyTGVuZ3RoOiAwLCB2YWx1ZTogaSwgekluZGljZXM6IGEgfSwgcjtcbiAgfVxuICBWNCh0LCBlKTtcbiAgdmFyIG8gPSB0LnByb3RvdHlwZTtcbiAgcmV0dXJuIG8uY29tcG9uZW50RGlkTW91bnQgPSBmdW5jdGlvbigpIHtcbiAgICB0eXBlb2Ygd2luZG93IDwgXCJ1XCIgJiYgKHRoaXMucmVzaXplT2JzZXJ2ZXIgPSBuZXcgUmVzaXplT2JzZXJ2ZXIodGhpcy5oYW5kbGVSZXNpemUpLCB0aGlzLnJlc2l6ZU9ic2VydmVyLm9ic2VydmUodGhpcy5yZXNpemVFbGVtZW50UmVmLmN1cnJlbnQpLCB0aGlzLnJlc2l6ZSgpKTtcbiAgfSwgdC5nZXREZXJpdmVkU3RhdGVGcm9tUHJvcHMgPSBmdW5jdGlvbihuLCByKSB7XG4gICAgY29uc3QgaSA9IENpKG4udmFsdWUpO1xuICAgIHJldHVybiBpLmxlbmd0aCA/IHIucGVuZGluZyA/IG51bGwgOiB7IHZhbHVlOiBpLm1hcCgoYSkgPT4gWnQoYSwgbikpIH0gOiBudWxsO1xuICB9LCBvLmNvbXBvbmVudERpZFVwZGF0ZSA9IGZ1bmN0aW9uKCkge1xuICAgIHRoaXMuc3RhdGUudXBwZXJCb3VuZCA9PT0gMCAmJiB0aGlzLnJlc2l6ZSgpO1xuICB9LCBvLmNvbXBvbmVudFdpbGxVbm1vdW50ID0gZnVuY3Rpb24oKSB7XG4gICAgdGhpcy5jbGVhclBlbmRpbmdSZXNpemVUaW1lb3V0cygpLCB0aGlzLnJlc2l6ZU9ic2VydmVyICYmIHRoaXMucmVzaXplT2JzZXJ2ZXIuZGlzY29ubmVjdCgpO1xuICB9LCBvLm9uRW5kID0gZnVuY3Rpb24obikge1xuICAgIG4gJiYgZnVuY3Rpb24ocikge1xuICAgICAgT2JqZWN0LmtleXMocikuZm9yRWFjaCgoaSkgPT4ge1xuICAgICAgICB0eXBlb2YgZG9jdW1lbnQgPCBcInVcIiAmJiBkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKGksIHJbaV0sICExKTtcbiAgICAgIH0pO1xuICAgIH0obiksIHRoaXMuaGFzTW92ZWQgJiYgdGhpcy5maXJlQ2hhbmdlRXZlbnQoXCJvbkFmdGVyQ2hhbmdlXCIpLCB0aGlzLnNldFN0YXRlKHsgcGVuZGluZzogITEgfSksIHRoaXMuaGFzTW92ZWQgPSAhMTtcbiAgfSwgby5nZXRWYWx1ZSA9IGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiBvbih0aGlzLnN0YXRlLnZhbHVlKTtcbiAgfSwgby5nZXRDbG9zZXN0SW5kZXggPSBmdW5jdGlvbihuKSB7XG4gICAgbGV0IHIgPSBOdW1iZXIuTUFYX1ZBTFVFLCBpID0gLTE7XG4gICAgY29uc3QgeyB2YWx1ZTogYSB9ID0gdGhpcy5zdGF0ZSwgcyA9IGEubGVuZ3RoO1xuICAgIGZvciAobGV0IGwgPSAwOyBsIDwgczsgbCArPSAxKSB7XG4gICAgICBjb25zdCBwID0gdGhpcy5jYWxjT2Zmc2V0KGFbbF0pLCBkID0gTWF0aC5hYnMobiAtIHApO1xuICAgICAgZCA8IHIgJiYgKHIgPSBkLCBpID0gbCk7XG4gICAgfVxuICAgIHJldHVybiBpO1xuICB9LCBvLmdldE1vdXNlUG9zaXRpb24gPSBmdW5jdGlvbihuKSB7XG4gICAgcmV0dXJuIFtuW1wicGFnZVwiICsgdGhpcy5heGlzS2V5KCldLCBuW1wicGFnZVwiICsgdGhpcy5vcnRob2dvbmFsQXhpc0tleSgpXV07XG4gIH0sIG8uZ2V0VG91Y2hQb3NpdGlvbiA9IGZ1bmN0aW9uKG4pIHtcbiAgICBjb25zdCByID0gbi50b3VjaGVzWzBdO1xuICAgIHJldHVybiBbcltcInBhZ2VcIiArIHRoaXMuYXhpc0tleSgpXSwgcltcInBhZ2VcIiArIHRoaXMub3J0aG9nb25hbEF4aXNLZXkoKV1dO1xuICB9LCBvLmdldEtleURvd25FdmVudE1hcCA9IGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiB7IGtleWRvd246IHRoaXMub25LZXlEb3duLCBrZXl1cDogdGhpcy5vbktleVVwLCBmb2N1c291dDogdGhpcy5vbkJsdXIgfTtcbiAgfSwgby5nZXRNb3VzZUV2ZW50TWFwID0gZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIHsgbW91c2Vtb3ZlOiB0aGlzLm9uTW91c2VNb3ZlLCBtb3VzZXVwOiB0aGlzLm9uTW91c2VVcCB9O1xuICB9LCBvLmdldFRvdWNoRXZlbnRNYXAgPSBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4geyB0b3VjaG1vdmU6IHRoaXMub25Ub3VjaE1vdmUsIHRvdWNoZW5kOiB0aGlzLm9uVG91Y2hFbmQgfTtcbiAgfSwgby5nZXRWYWx1ZUZyb21Qb3NpdGlvbiA9IGZ1bmN0aW9uKG4pIHtcbiAgICBjb25zdCByID0gbiAvICh0aGlzLnN0YXRlLnNsaWRlckxlbmd0aCAtIHRoaXMuc3RhdGUudGh1bWJTaXplKSAqICh0aGlzLnByb3BzLm1heCAtIHRoaXMucHJvcHMubWluKTtcbiAgICByZXR1cm4gWnQodGhpcy5zdGF0ZS5zdGFydFZhbHVlICsgciwgdGhpcy5wcm9wcyk7XG4gIH0sIG8uZ2V0RGlmZlBvc2l0aW9uID0gZnVuY3Rpb24obikge1xuICAgIGxldCByID0gbiAtIHRoaXMuc3RhdGUuc3RhcnRQb3NpdGlvbjtcbiAgICByZXR1cm4gdGhpcy5wcm9wcy5pbnZlcnQgJiYgKHIgKj0gLTEpLCByO1xuICB9LCBvLnJlc2l6ZSA9IGZ1bmN0aW9uKCkge1xuICAgIGNvbnN0IHsgc2xpZGVyOiBuLCB0aHVtYjA6IHIgfSA9IHRoaXM7XG4gICAgaWYgKCFuIHx8ICFyKVxuICAgICAgcmV0dXJuO1xuICAgIGNvbnN0IGkgPSB0aGlzLnNpemVLZXkoKSwgYSA9IG4uZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCksIHMgPSBuW2ldLCBsID0gYVt0aGlzLnBvc01heEtleSgpXSwgcCA9IGFbdGhpcy5wb3NNaW5LZXkoKV0sIGQgPSByLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpW2kucmVwbGFjZShcImNsaWVudFwiLCBcIlwiKS50b0xvd2VyQ2FzZSgpXSwgYiA9IHMgLSBkLCBNID0gTWF0aC5hYnMobCAtIHApO1xuICAgIHRoaXMuc3RhdGUudXBwZXJCb3VuZCA9PT0gYiAmJiB0aGlzLnN0YXRlLnNsaWRlckxlbmd0aCA9PT0gTSAmJiB0aGlzLnN0YXRlLnRodW1iU2l6ZSA9PT0gZCB8fCB0aGlzLnNldFN0YXRlKHsgdXBwZXJCb3VuZDogYiwgc2xpZGVyTGVuZ3RoOiBNLCB0aHVtYlNpemU6IGQgfSk7XG4gIH0sIG8uY2FsY09mZnNldCA9IGZ1bmN0aW9uKG4pIHtcbiAgICBjb25zdCByID0gdGhpcy5wcm9wcy5tYXggLSB0aGlzLnByb3BzLm1pbjtcbiAgICByZXR1cm4gciA9PT0gMCA/IDAgOiAobiAtIHRoaXMucHJvcHMubWluKSAvIHIgKiB0aGlzLnN0YXRlLnVwcGVyQm91bmQ7XG4gIH0sIG8uY2FsY1ZhbHVlID0gZnVuY3Rpb24obikge1xuICAgIHJldHVybiBuIC8gdGhpcy5zdGF0ZS51cHBlckJvdW5kICogKHRoaXMucHJvcHMubWF4IC0gdGhpcy5wcm9wcy5taW4pICsgdGhpcy5wcm9wcy5taW47XG4gIH0sIG8uY2FsY09mZnNldEZyb21Qb3NpdGlvbiA9IGZ1bmN0aW9uKG4pIHtcbiAgICBjb25zdCB7IHNsaWRlcjogciB9ID0gdGhpcywgaSA9IHIuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCksIGEgPSBpW3RoaXMucG9zTWF4S2V5KCldLCBzID0gaVt0aGlzLnBvc01pbktleSgpXTtcbiAgICBsZXQgbCA9IG4gLSAod2luZG93W1wicGFnZVwiICsgdGhpcy5heGlzS2V5KCkgKyBcIk9mZnNldFwiXSArICh0aGlzLnByb3BzLmludmVydCA/IGEgOiBzKSk7XG4gICAgcmV0dXJuIHRoaXMucHJvcHMuaW52ZXJ0ICYmIChsID0gdGhpcy5zdGF0ZS5zbGlkZXJMZW5ndGggLSBsKSwgbCAtPSB0aGlzLnN0YXRlLnRodW1iU2l6ZSAvIDIsIGw7XG4gIH0sIG8uZm9yY2VWYWx1ZUZyb21Qb3NpdGlvbiA9IGZ1bmN0aW9uKG4sIHIpIHtcbiAgICBjb25zdCBpID0gdGhpcy5jYWxjT2Zmc2V0RnJvbVBvc2l0aW9uKG4pLCBhID0gdGhpcy5nZXRDbG9zZXN0SW5kZXgoaSksIHMgPSBadCh0aGlzLmNhbGNWYWx1ZShpKSwgdGhpcy5wcm9wcyksIGwgPSB0aGlzLnN0YXRlLnZhbHVlLnNsaWNlKCk7XG4gICAgbFthXSA9IHM7XG4gICAgZm9yIChsZXQgcCA9IDA7IHAgPCBsLmxlbmd0aCAtIDE7IHAgKz0gMSlcbiAgICAgIGlmIChsW3AgKyAxXSAtIGxbcF0gPCB0aGlzLnByb3BzLm1pbkRpc3RhbmNlKVxuICAgICAgICByZXR1cm47XG4gICAgdGhpcy5maXJlQ2hhbmdlRXZlbnQoXCJvbkJlZm9yZUNoYW5nZVwiKSwgdGhpcy5oYXNNb3ZlZCA9ICEwLCB0aGlzLnNldFN0YXRlKHsgdmFsdWU6IGwgfSwgKCkgPT4ge1xuICAgICAgcihhKSwgdGhpcy5maXJlQ2hhbmdlRXZlbnQoXCJvbkNoYW5nZVwiKTtcbiAgICB9KTtcbiAgfSwgby5jbGVhclBlbmRpbmdSZXNpemVUaW1lb3V0cyA9IGZ1bmN0aW9uKCkge1xuICAgIGRvIHtcbiAgICAgIGNvbnN0IG4gPSB0aGlzLnBlbmRpbmdSZXNpemVUaW1lb3V0cy5zaGlmdCgpO1xuICAgICAgY2xlYXJUaW1lb3V0KG4pO1xuICAgIH0gd2hpbGUgKHRoaXMucGVuZGluZ1Jlc2l6ZVRpbWVvdXRzLmxlbmd0aCk7XG4gIH0sIG8uc3RhcnQgPSBmdW5jdGlvbihuLCByKSB7XG4gICAgY29uc3QgaSA9IHRoaXNbXCJ0aHVtYlwiICsgbl07XG4gICAgaSAmJiBpLmZvY3VzKCk7XG4gICAgY29uc3QgeyB6SW5kaWNlczogYSB9ID0gdGhpcy5zdGF0ZTtcbiAgICBhLnNwbGljZShhLmluZGV4T2YobiksIDEpLCBhLnB1c2gobiksIHRoaXMuc2V0U3RhdGUoKHMpID0+ICh7IHN0YXJ0VmFsdWU6IHMudmFsdWVbbl0sIHN0YXJ0UG9zaXRpb246IHIgIT09IHZvaWQgMCA/IHIgOiBzLnN0YXJ0UG9zaXRpb24sIGluZGV4OiBuLCB6SW5kaWNlczogYSB9KSk7XG4gIH0sIG8ubW92ZVVwQnlTdGVwID0gZnVuY3Rpb24obikge1xuICAgIG4gPT09IHZvaWQgMCAmJiAobiA9IHRoaXMucHJvcHMuc3RlcCk7XG4gICAgY29uc3QgciA9IHRoaXMuc3RhdGUudmFsdWVbdGhpcy5zdGF0ZS5pbmRleF0sIGkgPSBadCh0aGlzLnByb3BzLmludmVydCAmJiB0aGlzLnByb3BzLm9yaWVudGF0aW9uID09PSBcImhvcml6b250YWxcIiA/IHIgLSBuIDogciArIG4sIHRoaXMucHJvcHMpO1xuICAgIHRoaXMubW92ZShNYXRoLm1pbihpLCB0aGlzLnByb3BzLm1heCkpO1xuICB9LCBvLm1vdmVEb3duQnlTdGVwID0gZnVuY3Rpb24obikge1xuICAgIG4gPT09IHZvaWQgMCAmJiAobiA9IHRoaXMucHJvcHMuc3RlcCk7XG4gICAgY29uc3QgciA9IHRoaXMuc3RhdGUudmFsdWVbdGhpcy5zdGF0ZS5pbmRleF0sIGkgPSBadCh0aGlzLnByb3BzLmludmVydCAmJiB0aGlzLnByb3BzLm9yaWVudGF0aW9uID09PSBcImhvcml6b250YWxcIiA/IHIgKyBuIDogciAtIG4sIHRoaXMucHJvcHMpO1xuICAgIHRoaXMubW92ZShNYXRoLm1heChpLCB0aGlzLnByb3BzLm1pbikpO1xuICB9LCBvLm1vdmUgPSBmdW5jdGlvbihuKSB7XG4gICAgY29uc3QgciA9IHRoaXMuc3RhdGUudmFsdWUuc2xpY2UoKSwgeyBpbmRleDogaSB9ID0gdGhpcy5zdGF0ZSwgeyBsZW5ndGg6IGEgfSA9IHIsIHMgPSByW2ldO1xuICAgIGlmIChuID09PSBzKVxuICAgICAgcmV0dXJuO1xuICAgIHRoaXMuaGFzTW92ZWQgfHwgdGhpcy5maXJlQ2hhbmdlRXZlbnQoXCJvbkJlZm9yZUNoYW5nZVwiKSwgdGhpcy5oYXNNb3ZlZCA9ICEwO1xuICAgIGNvbnN0IHsgcGVhcmxpbmc6IGwsIG1heDogcCwgbWluOiBkLCBtaW5EaXN0YW5jZTogYiB9ID0gdGhpcy5wcm9wcztcbiAgICBpZiAoIWwpIHtcbiAgICAgIGlmIChpID4gMCkge1xuICAgICAgICBjb25zdCBNID0gcltpIC0gMV07XG4gICAgICAgIG4gPCBNICsgYiAmJiAobiA9IE0gKyBiKTtcbiAgICAgIH1cbiAgICAgIGlmIChpIDwgYSAtIDEpIHtcbiAgICAgICAgY29uc3QgTSA9IHJbaSArIDFdO1xuICAgICAgICBuID4gTSAtIGIgJiYgKG4gPSBNIC0gYik7XG4gICAgICB9XG4gICAgfVxuICAgIHJbaV0gPSBuLCBsICYmIGEgPiAxICYmIChuID4gcyA/ICh0aGlzLnB1c2hTdWNjZWVkaW5nKHIsIGIsIGkpLCBmdW5jdGlvbihNLCB1LCBBLCB6KSB7XG4gICAgICBmb3IgKGxldCBmID0gMDsgZiA8IE07IGYgKz0gMSkge1xuICAgICAgICBjb25zdCBPID0geiAtIGYgKiBBO1xuICAgICAgICB1W00gLSAxIC0gZl0gPiBPICYmICh1W00gLSAxIC0gZl0gPSBPKTtcbiAgICAgIH1cbiAgICB9KGEsIHIsIGIsIHApKSA6IG4gPCBzICYmICh0aGlzLnB1c2hQcmVjZWRpbmcociwgYiwgaSksIGZ1bmN0aW9uKE0sIHUsIEEsIHopIHtcbiAgICAgIGZvciAobGV0IGYgPSAwOyBmIDwgTTsgZiArPSAxKSB7XG4gICAgICAgIGNvbnN0IE8gPSB6ICsgZiAqIEE7XG4gICAgICAgIHVbZl0gPCBPICYmICh1W2ZdID0gTyk7XG4gICAgICB9XG4gICAgfShhLCByLCBiLCBkKSkpLCB0aGlzLnNldFN0YXRlKHsgdmFsdWU6IHIgfSwgdGhpcy5maXJlQ2hhbmdlRXZlbnQuYmluZCh0aGlzLCBcIm9uQ2hhbmdlXCIpKTtcbiAgfSwgby5wdXNoU3VjY2VlZGluZyA9IGZ1bmN0aW9uKG4sIHIsIGkpIHtcbiAgICBsZXQgYSwgcztcbiAgICBmb3IgKGEgPSBpLCBzID0gblthXSArIHI7IG5bYSArIDFdICE9PSBudWxsICYmIHMgPiBuW2EgKyAxXTsgYSArPSAxLCBzID0gblthXSArIHIpXG4gICAgICBuW2EgKyAxXSA9IEhhKHMsIHRoaXMucHJvcHMpO1xuICB9LCBvLnB1c2hQcmVjZWRpbmcgPSBmdW5jdGlvbihuLCByLCBpKSB7XG4gICAgZm9yIChsZXQgYSA9IGksIHMgPSBuW2FdIC0gcjsgblthIC0gMV0gIT09IG51bGwgJiYgcyA8IG5bYSAtIDFdOyBhIC09IDEsIHMgPSBuW2FdIC0gcilcbiAgICAgIG5bYSAtIDFdID0gSGEocywgdGhpcy5wcm9wcyk7XG4gIH0sIG8uYXhpc0tleSA9IGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiB0aGlzLnByb3BzLm9yaWVudGF0aW9uID09PSBcInZlcnRpY2FsXCIgPyBcIllcIiA6IFwiWFwiO1xuICB9LCBvLm9ydGhvZ29uYWxBeGlzS2V5ID0gZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIHRoaXMucHJvcHMub3JpZW50YXRpb24gPT09IFwidmVydGljYWxcIiA/IFwiWFwiIDogXCJZXCI7XG4gIH0sIG8ucG9zTWluS2V5ID0gZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIHRoaXMucHJvcHMub3JpZW50YXRpb24gPT09IFwidmVydGljYWxcIiA/IHRoaXMucHJvcHMuaW52ZXJ0ID8gXCJib3R0b21cIiA6IFwidG9wXCIgOiB0aGlzLnByb3BzLmludmVydCA/IFwicmlnaHRcIiA6IFwibGVmdFwiO1xuICB9LCBvLnBvc01heEtleSA9IGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiB0aGlzLnByb3BzLm9yaWVudGF0aW9uID09PSBcInZlcnRpY2FsXCIgPyB0aGlzLnByb3BzLmludmVydCA/IFwidG9wXCIgOiBcImJvdHRvbVwiIDogdGhpcy5wcm9wcy5pbnZlcnQgPyBcImxlZnRcIiA6IFwicmlnaHRcIjtcbiAgfSwgby5zaXplS2V5ID0gZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIHRoaXMucHJvcHMub3JpZW50YXRpb24gPT09IFwidmVydGljYWxcIiA/IFwiY2xpZW50SGVpZ2h0XCIgOiBcImNsaWVudFdpZHRoXCI7XG4gIH0sIG8uZmlyZUNoYW5nZUV2ZW50ID0gZnVuY3Rpb24obikge1xuICAgIHRoaXMucHJvcHNbbl0gJiYgdGhpcy5wcm9wc1tuXShvbih0aGlzLnN0YXRlLnZhbHVlKSwgdGhpcy5zdGF0ZS5pbmRleCk7XG4gIH0sIG8uYnVpbGRUaHVtYlN0eWxlID0gZnVuY3Rpb24obiwgcikge1xuICAgIGNvbnN0IGkgPSB7IHBvc2l0aW9uOiBcImFic29sdXRlXCIsIHRvdWNoQWN0aW9uOiBcIm5vbmVcIiwgd2lsbENoYW5nZTogdGhpcy5zdGF0ZS5pbmRleCA+PSAwID8gdGhpcy5wb3NNaW5LZXkoKSA6IHZvaWQgMCwgekluZGV4OiB0aGlzLnN0YXRlLnpJbmRpY2VzLmluZGV4T2YocikgKyAxIH07XG4gICAgcmV0dXJuIGlbdGhpcy5wb3NNaW5LZXkoKV0gPSBuICsgXCJweFwiLCBpO1xuICB9LCBvLmJ1aWxkVHJhY2tTdHlsZSA9IGZ1bmN0aW9uKG4sIHIpIHtcbiAgICBjb25zdCBpID0geyBwb3NpdGlvbjogXCJhYnNvbHV0ZVwiLCB3aWxsQ2hhbmdlOiB0aGlzLnN0YXRlLmluZGV4ID49IDAgPyB0aGlzLnBvc01pbktleSgpICsgXCIsXCIgKyB0aGlzLnBvc01heEtleSgpIDogdm9pZCAwIH07XG4gICAgcmV0dXJuIGlbdGhpcy5wb3NNaW5LZXkoKV0gPSBuLCBpW3RoaXMucG9zTWF4S2V5KCldID0gciwgaTtcbiAgfSwgby5idWlsZE1hcmtTdHlsZSA9IGZ1bmN0aW9uKG4pIHtcbiAgICB2YXIgcjtcbiAgICByZXR1cm4gKHIgPSB7IHBvc2l0aW9uOiBcImFic29sdXRlXCIgfSlbdGhpcy5wb3NNaW5LZXkoKV0gPSBuLCByO1xuICB9LCBvLnJlbmRlclRodW1icyA9IGZ1bmN0aW9uKG4pIHtcbiAgICBjb25zdCB7IGxlbmd0aDogciB9ID0gbiwgaSA9IFtdO1xuICAgIGZvciAobGV0IHMgPSAwOyBzIDwgcjsgcyArPSAxKVxuICAgICAgaVtzXSA9IHRoaXMuYnVpbGRUaHVtYlN0eWxlKG5bc10sIHMpO1xuICAgIGNvbnN0IGEgPSBbXTtcbiAgICBmb3IgKGxldCBzID0gMDsgcyA8IHI7IHMgKz0gMSlcbiAgICAgIGFbc10gPSB0aGlzLnJlbmRlclRodW1iKGlbc10sIHMpO1xuICAgIHJldHVybiBhO1xuICB9LCBvLnJlbmRlclRyYWNrcyA9IGZ1bmN0aW9uKG4pIHtcbiAgICBjb25zdCByID0gW10sIGkgPSBuLmxlbmd0aCAtIDE7XG4gICAgci5wdXNoKHRoaXMucmVuZGVyVHJhY2soMCwgMCwgblswXSkpO1xuICAgIGZvciAobGV0IGEgPSAwOyBhIDwgaTsgYSArPSAxKVxuICAgICAgci5wdXNoKHRoaXMucmVuZGVyVHJhY2soYSArIDEsIG5bYV0sIG5bYSArIDFdKSk7XG4gICAgcmV0dXJuIHIucHVzaCh0aGlzLnJlbmRlclRyYWNrKGkgKyAxLCBuW2ldLCB0aGlzLnN0YXRlLnVwcGVyQm91bmQpKSwgcjtcbiAgfSwgby5yZW5kZXJNYXJrcyA9IGZ1bmN0aW9uKCkge1xuICAgIGxldCB7IG1hcmtzOiBuIH0gPSB0aGlzLnByb3BzO1xuICAgIGNvbnN0IHIgPSB0aGlzLnByb3BzLm1heCAtIHRoaXMucHJvcHMubWluICsgMTtcbiAgICByZXR1cm4gdHlwZW9mIG4gPT0gXCJib29sZWFuXCIgPyBuID0gQXJyYXkuZnJvbSh7IGxlbmd0aDogciB9KS5tYXAoKGksIGEpID0+IGEpIDogdHlwZW9mIG4gPT0gXCJudW1iZXJcIiAmJiAobiA9IEFycmF5LmZyb20oeyBsZW5ndGg6IHIgfSkubWFwKChpLCBhKSA9PiBhKS5maWx0ZXIoKGkpID0+IGkgJSBuID09IDApKSwgbi5tYXAocGFyc2VGbG9hdCkuc29ydCgoaSwgYSkgPT4gaSAtIGEpLm1hcCgoaSkgPT4ge1xuICAgICAgY29uc3QgYSA9IHRoaXMuY2FsY09mZnNldChpKSwgcyA9IHsga2V5OiBpLCBjbGFzc05hbWU6IHRoaXMucHJvcHMubWFya0NsYXNzTmFtZSwgc3R5bGU6IHRoaXMuYnVpbGRNYXJrU3R5bGUoYSkgfTtcbiAgICAgIHJldHVybiB0aGlzLnByb3BzLnJlbmRlck1hcmsocyk7XG4gICAgfSk7XG4gIH0sIG8ucmVuZGVyID0gZnVuY3Rpb24oKSB7XG4gICAgY29uc3QgbiA9IFtdLCB7IHZhbHVlOiByIH0gPSB0aGlzLnN0YXRlLCBpID0gci5sZW5ndGg7XG4gICAgZm9yIChsZXQgcCA9IDA7IHAgPCBpOyBwICs9IDEpXG4gICAgICBuW3BdID0gdGhpcy5jYWxjT2Zmc2V0KHJbcF0sIHApO1xuICAgIGNvbnN0IGEgPSB0aGlzLnByb3BzLndpdGhUcmFja3MgPyB0aGlzLnJlbmRlclRyYWNrcyhuKSA6IG51bGwsIHMgPSB0aGlzLnJlbmRlclRodW1icyhuKSwgbCA9IHRoaXMucHJvcHMubWFya3MgPyB0aGlzLnJlbmRlck1hcmtzKCkgOiBudWxsO1xuICAgIHJldHVybiBtMS5jcmVhdGVFbGVtZW50KFwiZGl2XCIsIHsgcmVmOiAocCkgPT4ge1xuICAgICAgdGhpcy5zbGlkZXIgPSBwLCB0aGlzLnJlc2l6ZUVsZW1lbnRSZWYuY3VycmVudCA9IHA7XG4gICAgfSwgc3R5bGU6IHsgcG9zaXRpb246IFwicmVsYXRpdmVcIiB9LCBjbGFzc05hbWU6IHRoaXMucHJvcHMuY2xhc3NOYW1lICsgKHRoaXMucHJvcHMuZGlzYWJsZWQgPyBcIiBkaXNhYmxlZFwiIDogXCJcIiksIG9uTW91c2VEb3duOiB0aGlzLm9uU2xpZGVyTW91c2VEb3duLCBvbkNsaWNrOiB0aGlzLm9uU2xpZGVyQ2xpY2sgfSwgYSwgcywgbCk7XG4gIH0sIHQ7XG59KG0xLkNvbXBvbmVudCk7XG5WYS5kaXNwbGF5TmFtZSA9IFwiUmVhY3RTbGlkZXJcIiwgVmEuZGVmYXVsdFByb3BzID0geyBtaW46IDAsIG1heDogMTAwLCBzdGVwOiAxLCBwYWdlRm46IChlKSA9PiAxMCAqIGUsIG1pbkRpc3RhbmNlOiAwLCBkZWZhdWx0VmFsdWU6IDAsIG9yaWVudGF0aW9uOiBcImhvcml6b250YWxcIiwgY2xhc3NOYW1lOiBcInNsaWRlclwiLCB0aHVtYkNsYXNzTmFtZTogXCJ0aHVtYlwiLCB0aHVtYkFjdGl2ZUNsYXNzTmFtZTogXCJhY3RpdmVcIiwgdHJhY2tDbGFzc05hbWU6IFwidHJhY2tcIiwgbWFya0NsYXNzTmFtZTogXCJtYXJrXCIsIHdpdGhUcmFja3M6ICEwLCBwZWFybGluZzogITEsIGRpc2FibGVkOiAhMSwgc25hcERyYWdEaXNhYmxlZDogITEsIGludmVydDogITEsIG1hcmtzOiBbXSwgcmVuZGVyVGh1bWI6IChlKSA9PiBtMS5jcmVhdGVFbGVtZW50KFwiZGl2XCIsIGUpLCByZW5kZXJUcmFjazogKGUpID0+IG0xLmNyZWF0ZUVsZW1lbnQoXCJkaXZcIiwgZSksIHJlbmRlck1hcms6IChlKSA9PiBtMS5jcmVhdGVFbGVtZW50KFwic3BhblwiLCBlKSB9O1xudmFyIGN2ID0gVmE7XG4kLmRpdmBcbiAgd2lkdGg6IDEwMCU7XG4gIG1pbi13aWR0aDogNDgwcHg7XG5gO1xuY29uc3QgbHYgPSAkLmRpdmBcbiBjb2xvcjogdHJhbnNwYXJlbnQgIWltcG9ydGFudCA7XG5cbiA6Zm9jdXMtdmlzaWJsZXtcbiAgICAgIG91dGxpbmU6IG5vbmUgIWltcG9ydGFudDtcbiAgICB9XG5cbiAgYCwgcHYgPSAkLmRpdmBcbiAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICB0b3A6IC04cHg7XG4gICAgYmFja2dyb3VuZDogdHJhbnNwYXJlbnQ7XG4gICAgbGluZS1oZWlnaHQ6IDI0cHg7XG4gICAgd2lkdGg6IDE1cHg7XG4gICAgOmZvY3VzLXZpc2libGV7XG4gICAgICBvdXRsaW5lOiBub25lICFpbXBvcnRhbnQ7XG4gICAgfSAgIFxuXG4gYCwgZHYgPSAkLmRpdihcbiAgKHtcbiAgICB0aGVtZTogeyBib3JkZXJSYWRpdXM6IGUsIGNvbG9yczogdCwgdHJhbnNpdGlvbnM6IG8gfVxuICB9KSA9PiBvMWBcbiAgICAuaG9yaXpvbnRhbC1zbGlkZXIge1xuICAgIHdpZHRoOiAxMDAlO1xuICAgIG1heC13aWR0aDogNTAwcHg7XG4gICAgaGVpZ2h0OiA1MHB4O1xufVxuXG4uaG9yaXpvbnRhbC1zbGlkZXIgLmV4YW1wbGUtdHJhY2sge1xuICAgIHRvcDogMjBweDtcbiAgICBoZWlnaHQ6IDRweDtcbiAgICBib3JkZXItcmFkaXVzOiAke2UuYmFzZX07XG4gICAgXG59XG5cbi5ob3Jpem9udGFsLXNsaWRlciAuZXhhbXBsZS10aHVtYiB7XG4gIHotaW5kZXg6IDAgIWltcG9ydGFudDtcbiAgICB0b3A6IDE0cHg7IFxuICAgIHdpZHRoOiAxNnB4O1xuICAgIGhlaWdodDogMTZweDtcbiAgICBib3JkZXItcmFkaXVzOiA1MCU7XG4gICAgYmFja2dyb3VuZC1jb2xvcjogJHt0LmJhY2tncm91bmRzLmJnVGVydGlhcnl9O1xuICAgIGNvbG9yOiB3aGl0ZTtcbiAgICBjdXJzb3I6IHBvaW50ZXI7XG4gICAgYm94LXNpemluZzogYm9yZGVyLWJveDtcbiAgICB0cmFuc2l0aW9uOiAke28uYmFzZX07XG4gICAgYm9yZGVyOiBub25lO1xuICAgXG4gICAgJjpob3ZlcixcbiAgICAgICAgICAmOmFjdGl2ZSB7XG4gICAgICAgICAgICBib3gtc2hhZG93OiAwIDAgMHB4IDEwcHggJHt0LmJhY2tncm91bmRzLmJnUmVhZE9ubHl9O1xuICAgICAgICAgICAgdHJhbnNmb3JtOiBzY2FsZSgxKTtcbiAgICAgICAgICAgXG4gICAgICAgICAgfVxuXG4gICAgICAgICAgXG59XG4uZXhhbXBsZS10aHVtYntcbiAgJjpmb2N1cy12aXNpYmxle1xuICAgICAgb3V0bGluZTogbm9uZSAhaW1wb3J0YW50O1xuICAgIH1cbn1cblxuLmV4YW1wbGUtdHJhY2suZXhhbXBsZS10cmFjay0wIHtcbiAgICBiYWNrZ3JvdW5kOiAke3Quc2xpZGVyLnNsaWRlckJnRGVmYXVsdH07XG59XG5cbi5leGFtcGxlLXRyYWNrLmV4YW1wbGUtdHJhY2stMSB7XG4gIGJhY2tncm91bmQ6ICR7dC5iYWNrZ3JvdW5kcy5iZ1RlcnRpYXJ5fTtcbn1cblxuLmV4YW1wbGUtdHJhY2suZXhhbXBsZS10cmFjay0yIHtcbiAgYmFja2dyb3VuZDogJHt0LnNsaWRlci5zbGlkZXJCZ0RlZmF1bHR9O1xufVxuXG5cbiAgYFxuKTtcbmZ1bmN0aW9uIGFyKGUsIHQpIHtcbiAgaWYgKGUgPT0gbnVsbClcbiAgICByZXR1cm4ge307XG4gIHZhciBvID0ge307XG4gIGZvciAodmFyIG4gaW4gZSlcbiAgICBpZiAoe30uaGFzT3duUHJvcGVydHkuY2FsbChlLCBuKSkge1xuICAgICAgaWYgKHQuaW5jbHVkZXMobikpXG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgb1tuXSA9IGVbbl07XG4gICAgfVxuICByZXR1cm4gbztcbn1cbmZ1bmN0aW9uIGEwKCkge1xuICByZXR1cm4gYTAgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbihlKSB7XG4gICAgZm9yICh2YXIgdCA9IDE7IHQgPCBhcmd1bWVudHMubGVuZ3RoOyB0KyspIHtcbiAgICAgIHZhciBvID0gYXJndW1lbnRzW3RdO1xuICAgICAgZm9yICh2YXIgbiBpbiBvKVxuICAgICAgICAoe30pLmhhc093blByb3BlcnR5LmNhbGwobywgbikgJiYgKGVbbl0gPSBvW25dKTtcbiAgICB9XG4gICAgcmV0dXJuIGU7XG4gIH0sIGEwLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7XG59XG52YXIgcWwgPSBjMC5jcmVhdGVDb250ZXh0KCksIHlsID0gYzAuY3JlYXRlQ29udGV4dCgpO1xuZnVuY3Rpb24gYnYoZSkge1xuICB2YXIgdCA9IGUuY2hpbGRyZW4sIG8gPSBjMC51c2VTdGF0ZShudWxsKSwgbiA9IG9bMF0sIHIgPSBvWzFdLCBpID0gYzAudXNlUmVmKCExKTtcbiAgYzAudXNlRWZmZWN0KGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICAgIGkuY3VycmVudCA9ICEwO1xuICAgIH07XG4gIH0sIFtdKTtcbiAgdmFyIGEgPSBjMC51c2VDYWxsYmFjayhmdW5jdGlvbihzKSB7XG4gICAgaS5jdXJyZW50IHx8IHIocyk7XG4gIH0sIFtdKTtcbiAgcmV0dXJuIC8qIEBfX1BVUkVfXyAqLyBjMC5jcmVhdGVFbGVtZW50KHFsLlByb3ZpZGVyLCB7XG4gICAgdmFsdWU6IG5cbiAgfSwgLyogQF9fUFVSRV9fICovIGMwLmNyZWF0ZUVsZW1lbnQoeWwuUHJvdmlkZXIsIHtcbiAgICB2YWx1ZTogYVxuICB9LCB0KSk7XG59XG52YXIgd2wgPSBmdW5jdGlvbih0KSB7XG4gIHJldHVybiBBcnJheS5pc0FycmF5KHQpID8gdFswXSA6IHQ7XG59LCB4bCA9IGZ1bmN0aW9uKHQpIHtcbiAgaWYgKHR5cGVvZiB0ID09IFwiZnVuY3Rpb25cIikge1xuICAgIGZvciAodmFyIG8gPSBhcmd1bWVudHMubGVuZ3RoLCBuID0gbmV3IEFycmF5KG8gPiAxID8gbyAtIDEgOiAwKSwgciA9IDE7IHIgPCBvOyByKyspXG4gICAgICBuW3IgLSAxXSA9IGFyZ3VtZW50c1tyXTtcbiAgICByZXR1cm4gdC5hcHBseSh2b2lkIDAsIG4pO1xuICB9XG59LCBQYSA9IGZ1bmN0aW9uKHQsIG8pIHtcbiAgaWYgKHR5cGVvZiB0ID09IFwiZnVuY3Rpb25cIilcbiAgICByZXR1cm4geGwodCwgbyk7XG4gIHQgIT0gbnVsbCAmJiAodC5jdXJyZW50ID0gbyk7XG59LCBPOCA9IGZ1bmN0aW9uKHQpIHtcbiAgcmV0dXJuIHQucmVkdWNlKGZ1bmN0aW9uKG8sIG4pIHtcbiAgICB2YXIgciA9IG5bMF0sIGkgPSBuWzFdO1xuICAgIHJldHVybiBvW3JdID0gaSwgbztcbiAgfSwge30pO1xufSwgZjggPSB0eXBlb2Ygd2luZG93IDwgXCJ1XCIgJiYgd2luZG93LmRvY3VtZW50ICYmIHdpbmRvdy5kb2N1bWVudC5jcmVhdGVFbGVtZW50ID8gYzAudXNlTGF5b3V0RWZmZWN0IDogYzAudXNlRWZmZWN0LCBGMiA9IFwidG9wXCIsIGRlID0gXCJib3R0b21cIiwgYmUgPSBcInJpZ2h0XCIsIFgyID0gXCJsZWZ0XCIsIEc1ID0gXCJhdXRvXCIsIGtyID0gW0YyLCBkZSwgYmUsIFgyXSwgWTMgPSBcInN0YXJ0XCIsIHNyID0gXCJlbmRcIiwgTXYgPSBcImNsaXBwaW5nUGFyZW50c1wiLCBXbCA9IFwidmlld3BvcnRcIiwgV28gPSBcInBvcHBlclwiLCBBdiA9IFwicmVmZXJlbmNlXCIsIGc4ID0gLyogQF9fUFVSRV9fICovIGtyLnJlZHVjZShmdW5jdGlvbihlLCB0KSB7XG4gIHJldHVybiBlLmNvbmNhdChbdCArIFwiLVwiICsgWTMsIHQgKyBcIi1cIiArIHNyXSk7XG59LCBbXSksIFJsID0gLyogQF9fUFVSRV9fICovIFtdLmNvbmNhdChrciwgW0c1XSkucmVkdWNlKGZ1bmN0aW9uKGUsIHQpIHtcbiAgcmV0dXJuIGUuY29uY2F0KFt0LCB0ICsgXCItXCIgKyBZMywgdCArIFwiLVwiICsgc3JdKTtcbn0sIFtdKSwgdXYgPSBcImJlZm9yZVJlYWRcIiwgenYgPSBcInJlYWRcIiwgaHYgPSBcImFmdGVyUmVhZFwiLCBPdiA9IFwiYmVmb3JlTWFpblwiLCBmdiA9IFwibWFpblwiLCBndiA9IFwiYWZ0ZXJNYWluXCIsIEN2ID0gXCJiZWZvcmVXcml0ZVwiLCBtdiA9IFwid3JpdGVcIiwgTHYgPSBcImFmdGVyV3JpdGVcIiwgdnYgPSBbdXYsIHp2LCBodiwgT3YsIGZ2LCBndiwgQ3YsIG12LCBMdl07XG5mdW5jdGlvbiBZZShlKSB7XG4gIHJldHVybiBlID8gKGUubm9kZU5hbWUgfHwgXCJcIikudG9Mb3dlckNhc2UoKSA6IG51bGw7XG59XG5mdW5jdGlvbiB0ZShlKSB7XG4gIGlmIChlID09IG51bGwpXG4gICAgcmV0dXJuIHdpbmRvdztcbiAgaWYgKGUudG9TdHJpbmcoKSAhPT0gXCJbb2JqZWN0IFdpbmRvd11cIikge1xuICAgIHZhciB0ID0gZS5vd25lckRvY3VtZW50O1xuICAgIHJldHVybiB0ICYmIHQuZGVmYXVsdFZpZXcgfHwgd2luZG93O1xuICB9XG4gIHJldHVybiBlO1xufVxuZnVuY3Rpb24gTTMoZSkge1xuICB2YXIgdCA9IHRlKGUpLkVsZW1lbnQ7XG4gIHJldHVybiBlIGluc3RhbmNlb2YgdCB8fCBlIGluc3RhbmNlb2YgRWxlbWVudDtcbn1cbmZ1bmN0aW9uIGxlKGUpIHtcbiAgdmFyIHQgPSB0ZShlKS5IVE1MRWxlbWVudDtcbiAgcmV0dXJuIGUgaW5zdGFuY2VvZiB0IHx8IGUgaW5zdGFuY2VvZiBIVE1MRWxlbWVudDtcbn1cbmZ1bmN0aW9uIFE1KGUpIHtcbiAgaWYgKHR5cGVvZiBTaGFkb3dSb290ID4gXCJ1XCIpXG4gICAgcmV0dXJuICExO1xuICB2YXIgdCA9IHRlKGUpLlNoYWRvd1Jvb3Q7XG4gIHJldHVybiBlIGluc3RhbmNlb2YgdCB8fCBlIGluc3RhbmNlb2YgU2hhZG93Um9vdDtcbn1cbmZ1bmN0aW9uIHF2KGUpIHtcbiAgdmFyIHQgPSBlLnN0YXRlO1xuICBPYmplY3Qua2V5cyh0LmVsZW1lbnRzKS5mb3JFYWNoKGZ1bmN0aW9uKG8pIHtcbiAgICB2YXIgbiA9IHQuc3R5bGVzW29dIHx8IHt9LCByID0gdC5hdHRyaWJ1dGVzW29dIHx8IHt9LCBpID0gdC5lbGVtZW50c1tvXTtcbiAgICAhbGUoaSkgfHwgIVllKGkpIHx8IChPYmplY3QuYXNzaWduKGkuc3R5bGUsIG4pLCBPYmplY3Qua2V5cyhyKS5mb3JFYWNoKGZ1bmN0aW9uKGEpIHtcbiAgICAgIHZhciBzID0gclthXTtcbiAgICAgIHMgPT09ICExID8gaS5yZW1vdmVBdHRyaWJ1dGUoYSkgOiBpLnNldEF0dHJpYnV0ZShhLCBzID09PSAhMCA/IFwiXCIgOiBzKTtcbiAgICB9KSk7XG4gIH0pO1xufVxuZnVuY3Rpb24geXYoZSkge1xuICB2YXIgdCA9IGUuc3RhdGUsIG8gPSB7XG4gICAgcG9wcGVyOiB7XG4gICAgICBwb3NpdGlvbjogdC5vcHRpb25zLnN0cmF0ZWd5LFxuICAgICAgbGVmdDogXCIwXCIsXG4gICAgICB0b3A6IFwiMFwiLFxuICAgICAgbWFyZ2luOiBcIjBcIlxuICAgIH0sXG4gICAgYXJyb3c6IHtcbiAgICAgIHBvc2l0aW9uOiBcImFic29sdXRlXCJcbiAgICB9LFxuICAgIHJlZmVyZW5jZToge31cbiAgfTtcbiAgcmV0dXJuIE9iamVjdC5hc3NpZ24odC5lbGVtZW50cy5wb3BwZXIuc3R5bGUsIG8ucG9wcGVyKSwgdC5zdHlsZXMgPSBvLCB0LmVsZW1lbnRzLmFycm93ICYmIE9iamVjdC5hc3NpZ24odC5lbGVtZW50cy5hcnJvdy5zdHlsZSwgby5hcnJvdyksIGZ1bmN0aW9uKCkge1xuICAgIE9iamVjdC5rZXlzKHQuZWxlbWVudHMpLmZvckVhY2goZnVuY3Rpb24obikge1xuICAgICAgdmFyIHIgPSB0LmVsZW1lbnRzW25dLCBpID0gdC5hdHRyaWJ1dGVzW25dIHx8IHt9LCBhID0gT2JqZWN0LmtleXModC5zdHlsZXMuaGFzT3duUHJvcGVydHkobikgPyB0LnN0eWxlc1tuXSA6IG9bbl0pLCBzID0gYS5yZWR1Y2UoZnVuY3Rpb24obCwgcCkge1xuICAgICAgICByZXR1cm4gbFtwXSA9IFwiXCIsIGw7XG4gICAgICB9LCB7fSk7XG4gICAgICAhbGUocikgfHwgIVllKHIpIHx8IChPYmplY3QuYXNzaWduKHIuc3R5bGUsIHMpLCBPYmplY3Qua2V5cyhpKS5mb3JFYWNoKGZ1bmN0aW9uKGwpIHtcbiAgICAgICAgci5yZW1vdmVBdHRyaWJ1dGUobCk7XG4gICAgICB9KSk7XG4gICAgfSk7XG4gIH07XG59XG5jb25zdCB3diA9IHtcbiAgbmFtZTogXCJhcHBseVN0eWxlc1wiLFxuICBlbmFibGVkOiAhMCxcbiAgcGhhc2U6IFwid3JpdGVcIixcbiAgZm46IHF2LFxuICBlZmZlY3Q6IHl2LFxuICByZXF1aXJlczogW1wiY29tcHV0ZVN0eWxlc1wiXVxufTtcbmZ1bmN0aW9uIEhlKGUpIHtcbiAgcmV0dXJuIGUuc3BsaXQoXCItXCIpWzBdO1xufVxudmFyIHMzID0gTWF0aC5tYXgsIHM0ID0gTWF0aC5taW4sIEczID0gTWF0aC5yb3VuZDtcbmZ1bmN0aW9uIEZhKCkge1xuICB2YXIgZSA9IG5hdmlnYXRvci51c2VyQWdlbnREYXRhO1xuICByZXR1cm4gZSAhPSBudWxsICYmIGUuYnJhbmRzICYmIEFycmF5LmlzQXJyYXkoZS5icmFuZHMpID8gZS5icmFuZHMubWFwKGZ1bmN0aW9uKHQpIHtcbiAgICByZXR1cm4gdC5icmFuZCArIFwiL1wiICsgdC52ZXJzaW9uO1xuICB9KS5qb2luKFwiIFwiKSA6IG5hdmlnYXRvci51c2VyQWdlbnQ7XG59XG5mdW5jdGlvbiBCbCgpIHtcbiAgcmV0dXJuICEvXigoPyFjaHJvbWV8YW5kcm9pZCkuKSpzYWZhcmkvaS50ZXN0KEZhKCkpO1xufVxuZnVuY3Rpb24gUTMoZSwgdCwgbykge1xuICB0ID09PSB2b2lkIDAgJiYgKHQgPSAhMSksIG8gPT09IHZvaWQgMCAmJiAobyA9ICExKTtcbiAgdmFyIG4gPSBlLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLCByID0gMSwgaSA9IDE7XG4gIHQgJiYgbGUoZSkgJiYgKHIgPSBlLm9mZnNldFdpZHRoID4gMCAmJiBHMyhuLndpZHRoKSAvIGUub2Zmc2V0V2lkdGggfHwgMSwgaSA9IGUub2Zmc2V0SGVpZ2h0ID4gMCAmJiBHMyhuLmhlaWdodCkgLyBlLm9mZnNldEhlaWdodCB8fCAxKTtcbiAgdmFyIGEgPSBNMyhlKSA/IHRlKGUpIDogd2luZG93LCBzID0gYS52aXN1YWxWaWV3cG9ydCwgbCA9ICFCbCgpICYmIG8sIHAgPSAobi5sZWZ0ICsgKGwgJiYgcyA/IHMub2Zmc2V0TGVmdCA6IDApKSAvIHIsIGQgPSAobi50b3AgKyAobCAmJiBzID8gcy5vZmZzZXRUb3AgOiAwKSkgLyBpLCBiID0gbi53aWR0aCAvIHIsIE0gPSBuLmhlaWdodCAvIGk7XG4gIHJldHVybiB7XG4gICAgd2lkdGg6IGIsXG4gICAgaGVpZ2h0OiBNLFxuICAgIHRvcDogZCxcbiAgICByaWdodDogcCArIGIsXG4gICAgYm90dG9tOiBkICsgTSxcbiAgICBsZWZ0OiBwLFxuICAgIHg6IHAsXG4gICAgeTogZFxuICB9O1xufVxuZnVuY3Rpb24gWjUoZSkge1xuICB2YXIgdCA9IFEzKGUpLCBvID0gZS5vZmZzZXRXaWR0aCwgbiA9IGUub2Zmc2V0SGVpZ2h0O1xuICByZXR1cm4gTWF0aC5hYnModC53aWR0aCAtIG8pIDw9IDEgJiYgKG8gPSB0LndpZHRoKSwgTWF0aC5hYnModC5oZWlnaHQgLSBuKSA8PSAxICYmIChuID0gdC5oZWlnaHQpLCB7XG4gICAgeDogZS5vZmZzZXRMZWZ0LFxuICAgIHk6IGUub2Zmc2V0VG9wLFxuICAgIHdpZHRoOiBvLFxuICAgIGhlaWdodDogblxuICB9O1xufVxuZnVuY3Rpb24gU2woZSwgdCkge1xuICB2YXIgbyA9IHQuZ2V0Um9vdE5vZGUgJiYgdC5nZXRSb290Tm9kZSgpO1xuICBpZiAoZS5jb250YWlucyh0KSlcbiAgICByZXR1cm4gITA7XG4gIGlmIChvICYmIFE1KG8pKSB7XG4gICAgdmFyIG4gPSB0O1xuICAgIGRvIHtcbiAgICAgIGlmIChuICYmIGUuaXNTYW1lTm9kZShuKSlcbiAgICAgICAgcmV0dXJuICEwO1xuICAgICAgbiA9IG4ucGFyZW50Tm9kZSB8fCBuLmhvc3Q7XG4gICAgfSB3aGlsZSAobik7XG4gIH1cbiAgcmV0dXJuICExO1xufVxuZnVuY3Rpb24gcHQoZSkge1xuICByZXR1cm4gdGUoZSkuZ2V0Q29tcHV0ZWRTdHlsZShlKTtcbn1cbmZ1bmN0aW9uIHh2KGUpIHtcbiAgcmV0dXJuIFtcInRhYmxlXCIsIFwidGRcIiwgXCJ0aFwiXS5pbmRleE9mKFllKGUpKSA+PSAwO1xufVxuZnVuY3Rpb24gRnQoZSkge1xuICByZXR1cm4gKChNMyhlKSA/IGUub3duZXJEb2N1bWVudCA6IChcbiAgICAvLyAkRmxvd0ZpeE1lW3Byb3AtbWlzc2luZ11cbiAgICBlLmRvY3VtZW50XG4gICkpIHx8IHdpbmRvdy5kb2N1bWVudCkuZG9jdW1lbnRFbGVtZW50O1xufVxuZnVuY3Rpb24gUDQoZSkge1xuICByZXR1cm4gWWUoZSkgPT09IFwiaHRtbFwiID8gZSA6IChcbiAgICAvLyB0aGlzIGlzIGEgcXVpY2tlciAoYnV0IGxlc3MgdHlwZSBzYWZlKSB3YXkgdG8gc2F2ZSBxdWl0ZSBzb21lIGJ5dGVzIGZyb20gdGhlIGJ1bmRsZVxuICAgIC8vICRGbG93Rml4TWVbaW5jb21wYXRpYmxlLXJldHVybl1cbiAgICAvLyAkRmxvd0ZpeE1lW3Byb3AtbWlzc2luZ11cbiAgICBlLmFzc2lnbmVkU2xvdCB8fCAvLyBzdGVwIGludG8gdGhlIHNoYWRvdyBET00gb2YgdGhlIHBhcmVudCBvZiBhIHNsb3R0ZWQgbm9kZVxuICAgIGUucGFyZW50Tm9kZSB8fCAvLyBET00gRWxlbWVudCBkZXRlY3RlZFxuICAgIChRNShlKSA/IGUuaG9zdCA6IG51bGwpIHx8IC8vIFNoYWRvd1Jvb3QgZGV0ZWN0ZWRcbiAgICAvLyAkRmxvd0ZpeE1lW2luY29tcGF0aWJsZS1jYWxsXTogSFRNTEVsZW1lbnQgaXMgYSBOb2RlXG4gICAgRnQoZSlcbiAgKTtcbn1cbmZ1bmN0aW9uIEM4KGUpIHtcbiAgcmV0dXJuICFsZShlKSB8fCAvLyBodHRwczovL2dpdGh1Yi5jb20vcG9wcGVyanMvcG9wcGVyLWNvcmUvaXNzdWVzLzgzN1xuICBwdChlKS5wb3NpdGlvbiA9PT0gXCJmaXhlZFwiID8gbnVsbCA6IGUub2Zmc2V0UGFyZW50O1xufVxuZnVuY3Rpb24gV3YoZSkge1xuICB2YXIgdCA9IC9maXJlZm94L2kudGVzdChGYSgpKSwgbyA9IC9UcmlkZW50L2kudGVzdChGYSgpKTtcbiAgaWYgKG8gJiYgbGUoZSkpIHtcbiAgICB2YXIgbiA9IHB0KGUpO1xuICAgIGlmIChuLnBvc2l0aW9uID09PSBcImZpeGVkXCIpXG4gICAgICByZXR1cm4gbnVsbDtcbiAgfVxuICB2YXIgciA9IFA0KGUpO1xuICBmb3IgKFE1KHIpICYmIChyID0gci5ob3N0KTsgbGUocikgJiYgW1wiaHRtbFwiLCBcImJvZHlcIl0uaW5kZXhPZihZZShyKSkgPCAwOyApIHtcbiAgICB2YXIgaSA9IHB0KHIpO1xuICAgIGlmIChpLnRyYW5zZm9ybSAhPT0gXCJub25lXCIgfHwgaS5wZXJzcGVjdGl2ZSAhPT0gXCJub25lXCIgfHwgaS5jb250YWluID09PSBcInBhaW50XCIgfHwgW1widHJhbnNmb3JtXCIsIFwicGVyc3BlY3RpdmVcIl0uaW5kZXhPZihpLndpbGxDaGFuZ2UpICE9PSAtMSB8fCB0ICYmIGkud2lsbENoYW5nZSA9PT0gXCJmaWx0ZXJcIiB8fCB0ICYmIGkuZmlsdGVyICYmIGkuZmlsdGVyICE9PSBcIm5vbmVcIilcbiAgICAgIHJldHVybiByO1xuICAgIHIgPSByLnBhcmVudE5vZGU7XG4gIH1cbiAgcmV0dXJuIG51bGw7XG59XG5mdW5jdGlvbiBOcihlKSB7XG4gIGZvciAodmFyIHQgPSB0ZShlKSwgbyA9IEM4KGUpOyBvICYmIHh2KG8pICYmIHB0KG8pLnBvc2l0aW9uID09PSBcInN0YXRpY1wiOyApXG4gICAgbyA9IEM4KG8pO1xuICByZXR1cm4gbyAmJiAoWWUobykgPT09IFwiaHRtbFwiIHx8IFllKG8pID09PSBcImJvZHlcIiAmJiBwdChvKS5wb3NpdGlvbiA9PT0gXCJzdGF0aWNcIikgPyB0IDogbyB8fCBXdihlKSB8fCB0O1xufVxuZnVuY3Rpb24gajUoZSkge1xuICByZXR1cm4gW1widG9wXCIsIFwiYm90dG9tXCJdLmluZGV4T2YoZSkgPj0gMCA/IFwieFwiIDogXCJ5XCI7XG59XG5mdW5jdGlvbiBabyhlLCB0LCBvKSB7XG4gIHJldHVybiBzMyhlLCBzNCh0LCBvKSk7XG59XG5mdW5jdGlvbiBSdihlLCB0LCBvKSB7XG4gIHZhciBuID0gWm8oZSwgdCwgbyk7XG4gIHJldHVybiBuID4gbyA/IG8gOiBuO1xufVxuZnVuY3Rpb24gRWwoKSB7XG4gIHJldHVybiB7XG4gICAgdG9wOiAwLFxuICAgIHJpZ2h0OiAwLFxuICAgIGJvdHRvbTogMCxcbiAgICBsZWZ0OiAwXG4gIH07XG59XG5mdW5jdGlvbiBrbChlKSB7XG4gIHJldHVybiBPYmplY3QuYXNzaWduKHt9LCBFbCgpLCBlKTtcbn1cbmZ1bmN0aW9uIE5sKGUsIHQpIHtcbiAgcmV0dXJuIHQucmVkdWNlKGZ1bmN0aW9uKG8sIG4pIHtcbiAgICByZXR1cm4gb1tuXSA9IGUsIG87XG4gIH0sIHt9KTtcbn1cbnZhciBCdiA9IGZ1bmN0aW9uKHQsIG8pIHtcbiAgcmV0dXJuIHQgPSB0eXBlb2YgdCA9PSBcImZ1bmN0aW9uXCIgPyB0KE9iamVjdC5hc3NpZ24oe30sIG8ucmVjdHMsIHtcbiAgICBwbGFjZW1lbnQ6IG8ucGxhY2VtZW50XG4gIH0pKSA6IHQsIGtsKHR5cGVvZiB0ICE9IFwibnVtYmVyXCIgPyB0IDogTmwodCwga3IpKTtcbn07XG5mdW5jdGlvbiBTdihlKSB7XG4gIHZhciB0LCBvID0gZS5zdGF0ZSwgbiA9IGUubmFtZSwgciA9IGUub3B0aW9ucywgaSA9IG8uZWxlbWVudHMuYXJyb3csIGEgPSBvLm1vZGlmaWVyc0RhdGEucG9wcGVyT2Zmc2V0cywgcyA9IEhlKG8ucGxhY2VtZW50KSwgbCA9IGo1KHMpLCBwID0gW1gyLCBiZV0uaW5kZXhPZihzKSA+PSAwLCBkID0gcCA/IFwiaGVpZ2h0XCIgOiBcIndpZHRoXCI7XG4gIGlmICghKCFpIHx8ICFhKSkge1xuICAgIHZhciBiID0gQnYoci5wYWRkaW5nLCBvKSwgTSA9IFo1KGkpLCB1ID0gbCA9PT0gXCJ5XCIgPyBGMiA6IFgyLCBBID0gbCA9PT0gXCJ5XCIgPyBkZSA6IGJlLCB6ID0gby5yZWN0cy5yZWZlcmVuY2VbZF0gKyBvLnJlY3RzLnJlZmVyZW5jZVtsXSAtIGFbbF0gLSBvLnJlY3RzLnBvcHBlcltkXSwgZiA9IGFbbF0gLSBvLnJlY3RzLnJlZmVyZW5jZVtsXSwgTyA9IE5yKGkpLCBoID0gTyA/IGwgPT09IFwieVwiID8gTy5jbGllbnRIZWlnaHQgfHwgMCA6IE8uY2xpZW50V2lkdGggfHwgMCA6IDAsIGcgPSB6IC8gMiAtIGYgLyAyLCB2ID0gYlt1XSwgTCA9IGggLSBNW2RdIC0gYltBXSwgeSA9IGggLyAyIC0gTVtkXSAvIDIgKyBnLCBCID0gWm8odiwgeSwgTCksIFggPSBsO1xuICAgIG8ubW9kaWZpZXJzRGF0YVtuXSA9ICh0ID0ge30sIHRbWF0gPSBCLCB0LmNlbnRlck9mZnNldCA9IEIgLSB5LCB0KTtcbiAgfVxufVxuZnVuY3Rpb24gRXYoZSkge1xuICB2YXIgdCA9IGUuc3RhdGUsIG8gPSBlLm9wdGlvbnMsIG4gPSBvLmVsZW1lbnQsIHIgPSBuID09PSB2b2lkIDAgPyBcIltkYXRhLXBvcHBlci1hcnJvd11cIiA6IG47XG4gIHIgIT0gbnVsbCAmJiAodHlwZW9mIHIgPT0gXCJzdHJpbmdcIiAmJiAociA9IHQuZWxlbWVudHMucG9wcGVyLnF1ZXJ5U2VsZWN0b3IociksICFyKSB8fCBTbCh0LmVsZW1lbnRzLnBvcHBlciwgcikgJiYgKHQuZWxlbWVudHMuYXJyb3cgPSByKSk7XG59XG5jb25zdCBrdiA9IHtcbiAgbmFtZTogXCJhcnJvd1wiLFxuICBlbmFibGVkOiAhMCxcbiAgcGhhc2U6IFwibWFpblwiLFxuICBmbjogU3YsXG4gIGVmZmVjdDogRXYsXG4gIHJlcXVpcmVzOiBbXCJwb3BwZXJPZmZzZXRzXCJdLFxuICByZXF1aXJlc0lmRXhpc3RzOiBbXCJwcmV2ZW50T3ZlcmZsb3dcIl1cbn07XG5mdW5jdGlvbiBaMyhlKSB7XG4gIHJldHVybiBlLnNwbGl0KFwiLVwiKVsxXTtcbn1cbnZhciBOdiA9IHtcbiAgdG9wOiBcImF1dG9cIixcbiAgcmlnaHQ6IFwiYXV0b1wiLFxuICBib3R0b206IFwiYXV0b1wiLFxuICBsZWZ0OiBcImF1dG9cIlxufTtcbmZ1bmN0aW9uIFR2KGUsIHQpIHtcbiAgdmFyIG8gPSBlLngsIG4gPSBlLnksIHIgPSB0LmRldmljZVBpeGVsUmF0aW8gfHwgMTtcbiAgcmV0dXJuIHtcbiAgICB4OiBHMyhvICogcikgLyByIHx8IDAsXG4gICAgeTogRzMobiAqIHIpIC8gciB8fCAwXG4gIH07XG59XG5mdW5jdGlvbiBtOChlKSB7XG4gIHZhciB0LCBvID0gZS5wb3BwZXIsIG4gPSBlLnBvcHBlclJlY3QsIHIgPSBlLnBsYWNlbWVudCwgaSA9IGUudmFyaWF0aW9uLCBhID0gZS5vZmZzZXRzLCBzID0gZS5wb3NpdGlvbiwgbCA9IGUuZ3B1QWNjZWxlcmF0aW9uLCBwID0gZS5hZGFwdGl2ZSwgZCA9IGUucm91bmRPZmZzZXRzLCBiID0gZS5pc0ZpeGVkLCBNID0gYS54LCB1ID0gTSA9PT0gdm9pZCAwID8gMCA6IE0sIEEgPSBhLnksIHogPSBBID09PSB2b2lkIDAgPyAwIDogQSwgZiA9IHR5cGVvZiBkID09IFwiZnVuY3Rpb25cIiA/IGQoe1xuICAgIHg6IHUsXG4gICAgeTogelxuICB9KSA6IHtcbiAgICB4OiB1LFxuICAgIHk6IHpcbiAgfTtcbiAgdSA9IGYueCwgeiA9IGYueTtcbiAgdmFyIE8gPSBhLmhhc093blByb3BlcnR5KFwieFwiKSwgaCA9IGEuaGFzT3duUHJvcGVydHkoXCJ5XCIpLCBnID0gWDIsIHYgPSBGMiwgTCA9IHdpbmRvdztcbiAgaWYgKHApIHtcbiAgICB2YXIgeSA9IE5yKG8pLCBCID0gXCJjbGllbnRIZWlnaHRcIiwgWCA9IFwiY2xpZW50V2lkdGhcIjtcbiAgICBpZiAoeSA9PT0gdGUobykgJiYgKHkgPSBGdChvKSwgcHQoeSkucG9zaXRpb24gIT09IFwic3RhdGljXCIgJiYgcyA9PT0gXCJhYnNvbHV0ZVwiICYmIChCID0gXCJzY3JvbGxIZWlnaHRcIiwgWCA9IFwic2Nyb2xsV2lkdGhcIikpLCB5ID0geSwgciA9PT0gRjIgfHwgKHIgPT09IFgyIHx8IHIgPT09IGJlKSAmJiBpID09PSBzcikge1xuICAgICAgdiA9IGRlO1xuICAgICAgdmFyIEYgPSBiICYmIHkgPT09IEwgJiYgTC52aXN1YWxWaWV3cG9ydCA/IEwudmlzdWFsVmlld3BvcnQuaGVpZ2h0IDogKFxuICAgICAgICAvLyAkRmxvd0ZpeE1lW3Byb3AtbWlzc2luZ11cbiAgICAgICAgeVtCXVxuICAgICAgKTtcbiAgICAgIHogLT0gRiAtIG4uaGVpZ2h0LCB6ICo9IGwgPyAxIDogLTE7XG4gICAgfVxuICAgIGlmIChyID09PSBYMiB8fCAociA9PT0gRjIgfHwgciA9PT0gZGUpICYmIGkgPT09IHNyKSB7XG4gICAgICBnID0gYmU7XG4gICAgICB2YXIgVCA9IGIgJiYgeSA9PT0gTCAmJiBMLnZpc3VhbFZpZXdwb3J0ID8gTC52aXN1YWxWaWV3cG9ydC53aWR0aCA6IChcbiAgICAgICAgLy8gJEZsb3dGaXhNZVtwcm9wLW1pc3NpbmddXG4gICAgICAgIHlbWF1cbiAgICAgICk7XG4gICAgICB1IC09IFQgLSBuLndpZHRoLCB1ICo9IGwgPyAxIDogLTE7XG4gICAgfVxuICB9XG4gIHZhciB3ID0gT2JqZWN0LmFzc2lnbih7XG4gICAgcG9zaXRpb246IHNcbiAgfSwgcCAmJiBOdiksIEggPSBkID09PSAhMCA/IFR2KHtcbiAgICB4OiB1LFxuICAgIHk6IHpcbiAgfSwgdGUobykpIDoge1xuICAgIHg6IHUsXG4gICAgeTogelxuICB9O1xuICBpZiAodSA9IEgueCwgeiA9IEgueSwgbCkge1xuICAgIHZhciBDO1xuICAgIHJldHVybiBPYmplY3QuYXNzaWduKHt9LCB3LCAoQyA9IHt9LCBDW3ZdID0gaCA/IFwiMFwiIDogXCJcIiwgQ1tnXSA9IE8gPyBcIjBcIiA6IFwiXCIsIEMudHJhbnNmb3JtID0gKEwuZGV2aWNlUGl4ZWxSYXRpbyB8fCAxKSA8PSAxID8gXCJ0cmFuc2xhdGUoXCIgKyB1ICsgXCJweCwgXCIgKyB6ICsgXCJweClcIiA6IFwidHJhbnNsYXRlM2QoXCIgKyB1ICsgXCJweCwgXCIgKyB6ICsgXCJweCwgMClcIiwgQykpO1xuICB9XG4gIHJldHVybiBPYmplY3QuYXNzaWduKHt9LCB3LCAodCA9IHt9LCB0W3ZdID0gaCA/IHogKyBcInB4XCIgOiBcIlwiLCB0W2ddID0gTyA/IHUgKyBcInB4XCIgOiBcIlwiLCB0LnRyYW5zZm9ybSA9IFwiXCIsIHQpKTtcbn1cbmZ1bmN0aW9uIEl2KGUpIHtcbiAgdmFyIHQgPSBlLnN0YXRlLCBvID0gZS5vcHRpb25zLCBuID0gby5ncHVBY2NlbGVyYXRpb24sIHIgPSBuID09PSB2b2lkIDAgPyAhMCA6IG4sIGkgPSBvLmFkYXB0aXZlLCBhID0gaSA9PT0gdm9pZCAwID8gITAgOiBpLCBzID0gby5yb3VuZE9mZnNldHMsIGwgPSBzID09PSB2b2lkIDAgPyAhMCA6IHMsIHAgPSB7XG4gICAgcGxhY2VtZW50OiBIZSh0LnBsYWNlbWVudCksXG4gICAgdmFyaWF0aW9uOiBaMyh0LnBsYWNlbWVudCksXG4gICAgcG9wcGVyOiB0LmVsZW1lbnRzLnBvcHBlcixcbiAgICBwb3BwZXJSZWN0OiB0LnJlY3RzLnBvcHBlcixcbiAgICBncHVBY2NlbGVyYXRpb246IHIsXG4gICAgaXNGaXhlZDogdC5vcHRpb25zLnN0cmF0ZWd5ID09PSBcImZpeGVkXCJcbiAgfTtcbiAgdC5tb2RpZmllcnNEYXRhLnBvcHBlck9mZnNldHMgIT0gbnVsbCAmJiAodC5zdHlsZXMucG9wcGVyID0gT2JqZWN0LmFzc2lnbih7fSwgdC5zdHlsZXMucG9wcGVyLCBtOChPYmplY3QuYXNzaWduKHt9LCBwLCB7XG4gICAgb2Zmc2V0czogdC5tb2RpZmllcnNEYXRhLnBvcHBlck9mZnNldHMsXG4gICAgcG9zaXRpb246IHQub3B0aW9ucy5zdHJhdGVneSxcbiAgICBhZGFwdGl2ZTogYSxcbiAgICByb3VuZE9mZnNldHM6IGxcbiAgfSkpKSksIHQubW9kaWZpZXJzRGF0YS5hcnJvdyAhPSBudWxsICYmICh0LnN0eWxlcy5hcnJvdyA9IE9iamVjdC5hc3NpZ24oe30sIHQuc3R5bGVzLmFycm93LCBtOChPYmplY3QuYXNzaWduKHt9LCBwLCB7XG4gICAgb2Zmc2V0czogdC5tb2RpZmllcnNEYXRhLmFycm93LFxuICAgIHBvc2l0aW9uOiBcImFic29sdXRlXCIsXG4gICAgYWRhcHRpdmU6ICExLFxuICAgIHJvdW5kT2Zmc2V0czogbFxuICB9KSkpKSwgdC5hdHRyaWJ1dGVzLnBvcHBlciA9IE9iamVjdC5hc3NpZ24oe30sIHQuYXR0cmlidXRlcy5wb3BwZXIsIHtcbiAgICBcImRhdGEtcG9wcGVyLXBsYWNlbWVudFwiOiB0LnBsYWNlbWVudFxuICB9KTtcbn1cbmNvbnN0IER2ID0ge1xuICBuYW1lOiBcImNvbXB1dGVTdHlsZXNcIixcbiAgZW5hYmxlZDogITAsXG4gIHBoYXNlOiBcImJlZm9yZVdyaXRlXCIsXG4gIGZuOiBJdixcbiAgZGF0YToge31cbn07XG52YXIgbm4gPSB7XG4gIHBhc3NpdmU6ICEwXG59O1xuZnVuY3Rpb24gSHYoZSkge1xuICB2YXIgdCA9IGUuc3RhdGUsIG8gPSBlLmluc3RhbmNlLCBuID0gZS5vcHRpb25zLCByID0gbi5zY3JvbGwsIGkgPSByID09PSB2b2lkIDAgPyAhMCA6IHIsIGEgPSBuLnJlc2l6ZSwgcyA9IGEgPT09IHZvaWQgMCA/ICEwIDogYSwgbCA9IHRlKHQuZWxlbWVudHMucG9wcGVyKSwgcCA9IFtdLmNvbmNhdCh0LnNjcm9sbFBhcmVudHMucmVmZXJlbmNlLCB0LnNjcm9sbFBhcmVudHMucG9wcGVyKTtcbiAgcmV0dXJuIGkgJiYgcC5mb3JFYWNoKGZ1bmN0aW9uKGQpIHtcbiAgICBkLmFkZEV2ZW50TGlzdGVuZXIoXCJzY3JvbGxcIiwgby51cGRhdGUsIG5uKTtcbiAgfSksIHMgJiYgbC5hZGRFdmVudExpc3RlbmVyKFwicmVzaXplXCIsIG8udXBkYXRlLCBubiksIGZ1bmN0aW9uKCkge1xuICAgIGkgJiYgcC5mb3JFYWNoKGZ1bmN0aW9uKGQpIHtcbiAgICAgIGQucmVtb3ZlRXZlbnRMaXN0ZW5lcihcInNjcm9sbFwiLCBvLnVwZGF0ZSwgbm4pO1xuICAgIH0pLCBzICYmIGwucmVtb3ZlRXZlbnRMaXN0ZW5lcihcInJlc2l6ZVwiLCBvLnVwZGF0ZSwgbm4pO1xuICB9O1xufVxuY29uc3QgVnYgPSB7XG4gIG5hbWU6IFwiZXZlbnRMaXN0ZW5lcnNcIixcbiAgZW5hYmxlZDogITAsXG4gIHBoYXNlOiBcIndyaXRlXCIsXG4gIGZuOiBmdW5jdGlvbigpIHtcbiAgfSxcbiAgZWZmZWN0OiBIdixcbiAgZGF0YToge31cbn07XG52YXIgUHYgPSB7XG4gIGxlZnQ6IFwicmlnaHRcIixcbiAgcmlnaHQ6IFwibGVmdFwiLFxuICBib3R0b206IFwidG9wXCIsXG4gIHRvcDogXCJib3R0b21cIlxufTtcbmZ1bmN0aW9uIEluKGUpIHtcbiAgcmV0dXJuIGUucmVwbGFjZSgvbGVmdHxyaWdodHxib3R0b218dG9wL2csIGZ1bmN0aW9uKHQpIHtcbiAgICByZXR1cm4gUHZbdF07XG4gIH0pO1xufVxudmFyIEZ2ID0ge1xuICBzdGFydDogXCJlbmRcIixcbiAgZW5kOiBcInN0YXJ0XCJcbn07XG5mdW5jdGlvbiBMOChlKSB7XG4gIHJldHVybiBlLnJlcGxhY2UoL3N0YXJ0fGVuZC9nLCBmdW5jdGlvbih0KSB7XG4gICAgcmV0dXJuIEZ2W3RdO1xuICB9KTtcbn1cbmZ1bmN0aW9uIEs1KGUpIHtcbiAgdmFyIHQgPSB0ZShlKSwgbyA9IHQucGFnZVhPZmZzZXQsIG4gPSB0LnBhZ2VZT2Zmc2V0O1xuICByZXR1cm4ge1xuICAgIHNjcm9sbExlZnQ6IG8sXG4gICAgc2Nyb2xsVG9wOiBuXG4gIH07XG59XG5mdW5jdGlvbiBKNShlKSB7XG4gIHJldHVybiBRMyhGdChlKSkubGVmdCArIEs1KGUpLnNjcm9sbExlZnQ7XG59XG5mdW5jdGlvbiBYdihlLCB0KSB7XG4gIHZhciBvID0gdGUoZSksIG4gPSBGdChlKSwgciA9IG8udmlzdWFsVmlld3BvcnQsIGkgPSBuLmNsaWVudFdpZHRoLCBhID0gbi5jbGllbnRIZWlnaHQsIHMgPSAwLCBsID0gMDtcbiAgaWYgKHIpIHtcbiAgICBpID0gci53aWR0aCwgYSA9IHIuaGVpZ2h0O1xuICAgIHZhciBwID0gQmwoKTtcbiAgICAocCB8fCAhcCAmJiB0ID09PSBcImZpeGVkXCIpICYmIChzID0gci5vZmZzZXRMZWZ0LCBsID0gci5vZmZzZXRUb3ApO1xuICB9XG4gIHJldHVybiB7XG4gICAgd2lkdGg6IGksXG4gICAgaGVpZ2h0OiBhLFxuICAgIHg6IHMgKyBKNShlKSxcbiAgICB5OiBsXG4gIH07XG59XG5mdW5jdGlvbiBVdihlKSB7XG4gIHZhciB0LCBvID0gRnQoZSksIG4gPSBLNShlKSwgciA9ICh0ID0gZS5vd25lckRvY3VtZW50KSA9PSBudWxsID8gdm9pZCAwIDogdC5ib2R5LCBpID0gczMoby5zY3JvbGxXaWR0aCwgby5jbGllbnRXaWR0aCwgciA/IHIuc2Nyb2xsV2lkdGggOiAwLCByID8gci5jbGllbnRXaWR0aCA6IDApLCBhID0gczMoby5zY3JvbGxIZWlnaHQsIG8uY2xpZW50SGVpZ2h0LCByID8gci5zY3JvbGxIZWlnaHQgOiAwLCByID8gci5jbGllbnRIZWlnaHQgOiAwKSwgcyA9IC1uLnNjcm9sbExlZnQgKyBKNShlKSwgbCA9IC1uLnNjcm9sbFRvcDtcbiAgcmV0dXJuIHB0KHIgfHwgbykuZGlyZWN0aW9uID09PSBcInJ0bFwiICYmIChzICs9IHMzKG8uY2xpZW50V2lkdGgsIHIgPyByLmNsaWVudFdpZHRoIDogMCkgLSBpKSwge1xuICAgIHdpZHRoOiBpLFxuICAgIGhlaWdodDogYSxcbiAgICB4OiBzLFxuICAgIHk6IGxcbiAgfTtcbn1cbmZ1bmN0aW9uIF81KGUpIHtcbiAgdmFyIHQgPSBwdChlKSwgbyA9IHQub3ZlcmZsb3csIG4gPSB0Lm92ZXJmbG93WCwgciA9IHQub3ZlcmZsb3dZO1xuICByZXR1cm4gL2F1dG98c2Nyb2xsfG92ZXJsYXl8aGlkZGVuLy50ZXN0KG8gKyByICsgbik7XG59XG5mdW5jdGlvbiBUbChlKSB7XG4gIHJldHVybiBbXCJodG1sXCIsIFwiYm9keVwiLCBcIiNkb2N1bWVudFwiXS5pbmRleE9mKFllKGUpKSA+PSAwID8gZS5vd25lckRvY3VtZW50LmJvZHkgOiBsZShlKSAmJiBfNShlKSA/IGUgOiBUbChQNChlKSk7XG59XG5mdW5jdGlvbiBqbyhlLCB0KSB7XG4gIHZhciBvO1xuICB0ID09PSB2b2lkIDAgJiYgKHQgPSBbXSk7XG4gIHZhciBuID0gVGwoZSksIHIgPSBuID09PSAoKG8gPSBlLm93bmVyRG9jdW1lbnQpID09IG51bGwgPyB2b2lkIDAgOiBvLmJvZHkpLCBpID0gdGUobiksIGEgPSByID8gW2ldLmNvbmNhdChpLnZpc3VhbFZpZXdwb3J0IHx8IFtdLCBfNShuKSA/IG4gOiBbXSkgOiBuLCBzID0gdC5jb25jYXQoYSk7XG4gIHJldHVybiByID8gcyA6IChcbiAgICAvLyAkRmxvd0ZpeE1lW2luY29tcGF0aWJsZS1jYWxsXTogaXNCb2R5IHRlbGxzIHVzIHRhcmdldCB3aWxsIGJlIGFuIEhUTUxFbGVtZW50IGhlcmVcbiAgICBzLmNvbmNhdChqbyhQNChhKSkpXG4gICk7XG59XG5mdW5jdGlvbiBYYShlKSB7XG4gIHJldHVybiBPYmplY3QuYXNzaWduKHt9LCBlLCB7XG4gICAgbGVmdDogZS54LFxuICAgIHRvcDogZS55LFxuICAgIHJpZ2h0OiBlLnggKyBlLndpZHRoLFxuICAgIGJvdHRvbTogZS55ICsgZS5oZWlnaHRcbiAgfSk7XG59XG5mdW5jdGlvbiBZdihlLCB0KSB7XG4gIHZhciBvID0gUTMoZSwgITEsIHQgPT09IFwiZml4ZWRcIik7XG4gIHJldHVybiBvLnRvcCA9IG8udG9wICsgZS5jbGllbnRUb3AsIG8ubGVmdCA9IG8ubGVmdCArIGUuY2xpZW50TGVmdCwgby5ib3R0b20gPSBvLnRvcCArIGUuY2xpZW50SGVpZ2h0LCBvLnJpZ2h0ID0gby5sZWZ0ICsgZS5jbGllbnRXaWR0aCwgby53aWR0aCA9IGUuY2xpZW50V2lkdGgsIG8uaGVpZ2h0ID0gZS5jbGllbnRIZWlnaHQsIG8ueCA9IG8ubGVmdCwgby55ID0gby50b3AsIG87XG59XG5mdW5jdGlvbiB2OChlLCB0LCBvKSB7XG4gIHJldHVybiB0ID09PSBXbCA/IFhhKFh2KGUsIG8pKSA6IE0zKHQpID8gWXYodCwgbykgOiBYYShVdihGdChlKSkpO1xufVxuZnVuY3Rpb24gR3YoZSkge1xuICB2YXIgdCA9IGpvKFA0KGUpKSwgbyA9IFtcImFic29sdXRlXCIsIFwiZml4ZWRcIl0uaW5kZXhPZihwdChlKS5wb3NpdGlvbikgPj0gMCwgbiA9IG8gJiYgbGUoZSkgPyBOcihlKSA6IGU7XG4gIHJldHVybiBNMyhuKSA/IHQuZmlsdGVyKGZ1bmN0aW9uKHIpIHtcbiAgICByZXR1cm4gTTMocikgJiYgU2wociwgbikgJiYgWWUocikgIT09IFwiYm9keVwiO1xuICB9KSA6IFtdO1xufVxuZnVuY3Rpb24gUXYoZSwgdCwgbywgbikge1xuICB2YXIgciA9IHQgPT09IFwiY2xpcHBpbmdQYXJlbnRzXCIgPyBHdihlKSA6IFtdLmNvbmNhdCh0KSwgaSA9IFtdLmNvbmNhdChyLCBbb10pLCBhID0gaVswXSwgcyA9IGkucmVkdWNlKGZ1bmN0aW9uKGwsIHApIHtcbiAgICB2YXIgZCA9IHY4KGUsIHAsIG4pO1xuICAgIHJldHVybiBsLnRvcCA9IHMzKGQudG9wLCBsLnRvcCksIGwucmlnaHQgPSBzNChkLnJpZ2h0LCBsLnJpZ2h0KSwgbC5ib3R0b20gPSBzNChkLmJvdHRvbSwgbC5ib3R0b20pLCBsLmxlZnQgPSBzMyhkLmxlZnQsIGwubGVmdCksIGw7XG4gIH0sIHY4KGUsIGEsIG4pKTtcbiAgcmV0dXJuIHMud2lkdGggPSBzLnJpZ2h0IC0gcy5sZWZ0LCBzLmhlaWdodCA9IHMuYm90dG9tIC0gcy50b3AsIHMueCA9IHMubGVmdCwgcy55ID0gcy50b3AsIHM7XG59XG5mdW5jdGlvbiBJbChlKSB7XG4gIHZhciB0ID0gZS5yZWZlcmVuY2UsIG8gPSBlLmVsZW1lbnQsIG4gPSBlLnBsYWNlbWVudCwgciA9IG4gPyBIZShuKSA6IG51bGwsIGkgPSBuID8gWjMobikgOiBudWxsLCBhID0gdC54ICsgdC53aWR0aCAvIDIgLSBvLndpZHRoIC8gMiwgcyA9IHQueSArIHQuaGVpZ2h0IC8gMiAtIG8uaGVpZ2h0IC8gMiwgbDtcbiAgc3dpdGNoIChyKSB7XG4gICAgY2FzZSBGMjpcbiAgICAgIGwgPSB7XG4gICAgICAgIHg6IGEsXG4gICAgICAgIHk6IHQueSAtIG8uaGVpZ2h0XG4gICAgICB9O1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSBkZTpcbiAgICAgIGwgPSB7XG4gICAgICAgIHg6IGEsXG4gICAgICAgIHk6IHQueSArIHQuaGVpZ2h0XG4gICAgICB9O1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSBiZTpcbiAgICAgIGwgPSB7XG4gICAgICAgIHg6IHQueCArIHQud2lkdGgsXG4gICAgICAgIHk6IHNcbiAgICAgIH07XG4gICAgICBicmVhaztcbiAgICBjYXNlIFgyOlxuICAgICAgbCA9IHtcbiAgICAgICAgeDogdC54IC0gby53aWR0aCxcbiAgICAgICAgeTogc1xuICAgICAgfTtcbiAgICAgIGJyZWFrO1xuICAgIGRlZmF1bHQ6XG4gICAgICBsID0ge1xuICAgICAgICB4OiB0LngsXG4gICAgICAgIHk6IHQueVxuICAgICAgfTtcbiAgfVxuICB2YXIgcCA9IHIgPyBqNShyKSA6IG51bGw7XG4gIGlmIChwICE9IG51bGwpIHtcbiAgICB2YXIgZCA9IHAgPT09IFwieVwiID8gXCJoZWlnaHRcIiA6IFwid2lkdGhcIjtcbiAgICBzd2l0Y2ggKGkpIHtcbiAgICAgIGNhc2UgWTM6XG4gICAgICAgIGxbcF0gPSBsW3BdIC0gKHRbZF0gLyAyIC0gb1tkXSAvIDIpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2Ugc3I6XG4gICAgICAgIGxbcF0gPSBsW3BdICsgKHRbZF0gLyAyIC0gb1tkXSAvIDIpO1xuICAgICAgICBicmVhaztcbiAgICB9XG4gIH1cbiAgcmV0dXJuIGw7XG59XG5mdW5jdGlvbiBjcihlLCB0KSB7XG4gIHQgPT09IHZvaWQgMCAmJiAodCA9IHt9KTtcbiAgdmFyIG8gPSB0LCBuID0gby5wbGFjZW1lbnQsIHIgPSBuID09PSB2b2lkIDAgPyBlLnBsYWNlbWVudCA6IG4sIGkgPSBvLnN0cmF0ZWd5LCBhID0gaSA9PT0gdm9pZCAwID8gZS5zdHJhdGVneSA6IGksIHMgPSBvLmJvdW5kYXJ5LCBsID0gcyA9PT0gdm9pZCAwID8gTXYgOiBzLCBwID0gby5yb290Qm91bmRhcnksIGQgPSBwID09PSB2b2lkIDAgPyBXbCA6IHAsIGIgPSBvLmVsZW1lbnRDb250ZXh0LCBNID0gYiA9PT0gdm9pZCAwID8gV28gOiBiLCB1ID0gby5hbHRCb3VuZGFyeSwgQSA9IHUgPT09IHZvaWQgMCA/ICExIDogdSwgeiA9IG8ucGFkZGluZywgZiA9IHogPT09IHZvaWQgMCA/IDAgOiB6LCBPID0ga2wodHlwZW9mIGYgIT0gXCJudW1iZXJcIiA/IGYgOiBObChmLCBrcikpLCBoID0gTSA9PT0gV28gPyBBdiA6IFdvLCBnID0gZS5yZWN0cy5wb3BwZXIsIHYgPSBlLmVsZW1lbnRzW0EgPyBoIDogTV0sIEwgPSBRdihNMyh2KSA/IHYgOiB2LmNvbnRleHRFbGVtZW50IHx8IEZ0KGUuZWxlbWVudHMucG9wcGVyKSwgbCwgZCwgYSksIHkgPSBRMyhlLmVsZW1lbnRzLnJlZmVyZW5jZSksIEIgPSBJbCh7XG4gICAgcmVmZXJlbmNlOiB5LFxuICAgIGVsZW1lbnQ6IGcsXG4gICAgc3RyYXRlZ3k6IFwiYWJzb2x1dGVcIixcbiAgICBwbGFjZW1lbnQ6IHJcbiAgfSksIFggPSBYYShPYmplY3QuYXNzaWduKHt9LCBnLCBCKSksIEYgPSBNID09PSBXbyA/IFggOiB5LCBUID0ge1xuICAgIHRvcDogTC50b3AgLSBGLnRvcCArIE8udG9wLFxuICAgIGJvdHRvbTogRi5ib3R0b20gLSBMLmJvdHRvbSArIE8uYm90dG9tLFxuICAgIGxlZnQ6IEwubGVmdCAtIEYubGVmdCArIE8ubGVmdCxcbiAgICByaWdodDogRi5yaWdodCAtIEwucmlnaHQgKyBPLnJpZ2h0XG4gIH0sIHcgPSBlLm1vZGlmaWVyc0RhdGEub2Zmc2V0O1xuICBpZiAoTSA9PT0gV28gJiYgdykge1xuICAgIHZhciBIID0gd1tyXTtcbiAgICBPYmplY3Qua2V5cyhUKS5mb3JFYWNoKGZ1bmN0aW9uKEMpIHtcbiAgICAgIHZhciBxID0gW2JlLCBkZV0uaW5kZXhPZihDKSA+PSAwID8gMSA6IC0xLCBtID0gW0YyLCBkZV0uaW5kZXhPZihDKSA+PSAwID8gXCJ5XCIgOiBcInhcIjtcbiAgICAgIFRbQ10gKz0gSFttXSAqIHE7XG4gICAgfSk7XG4gIH1cbiAgcmV0dXJuIFQ7XG59XG5mdW5jdGlvbiBadihlLCB0KSB7XG4gIHQgPT09IHZvaWQgMCAmJiAodCA9IHt9KTtcbiAgdmFyIG8gPSB0LCBuID0gby5wbGFjZW1lbnQsIHIgPSBvLmJvdW5kYXJ5LCBpID0gby5yb290Qm91bmRhcnksIGEgPSBvLnBhZGRpbmcsIHMgPSBvLmZsaXBWYXJpYXRpb25zLCBsID0gby5hbGxvd2VkQXV0b1BsYWNlbWVudHMsIHAgPSBsID09PSB2b2lkIDAgPyBSbCA6IGwsIGQgPSBaMyhuKSwgYiA9IGQgPyBzID8gZzggOiBnOC5maWx0ZXIoZnVuY3Rpb24oQSkge1xuICAgIHJldHVybiBaMyhBKSA9PT0gZDtcbiAgfSkgOiBrciwgTSA9IGIuZmlsdGVyKGZ1bmN0aW9uKEEpIHtcbiAgICByZXR1cm4gcC5pbmRleE9mKEEpID49IDA7XG4gIH0pO1xuICBNLmxlbmd0aCA9PT0gMCAmJiAoTSA9IGIpO1xuICB2YXIgdSA9IE0ucmVkdWNlKGZ1bmN0aW9uKEEsIHopIHtcbiAgICByZXR1cm4gQVt6XSA9IGNyKGUsIHtcbiAgICAgIHBsYWNlbWVudDogeixcbiAgICAgIGJvdW5kYXJ5OiByLFxuICAgICAgcm9vdEJvdW5kYXJ5OiBpLFxuICAgICAgcGFkZGluZzogYVxuICAgIH0pW0hlKHopXSwgQTtcbiAgfSwge30pO1xuICByZXR1cm4gT2JqZWN0LmtleXModSkuc29ydChmdW5jdGlvbihBLCB6KSB7XG4gICAgcmV0dXJuIHVbQV0gLSB1W3pdO1xuICB9KTtcbn1cbmZ1bmN0aW9uIGp2KGUpIHtcbiAgaWYgKEhlKGUpID09PSBHNSlcbiAgICByZXR1cm4gW107XG4gIHZhciB0ID0gSW4oZSk7XG4gIHJldHVybiBbTDgoZSksIHQsIEw4KHQpXTtcbn1cbmZ1bmN0aW9uIEt2KGUpIHtcbiAgdmFyIHQgPSBlLnN0YXRlLCBvID0gZS5vcHRpb25zLCBuID0gZS5uYW1lO1xuICBpZiAoIXQubW9kaWZpZXJzRGF0YVtuXS5fc2tpcCkge1xuICAgIGZvciAodmFyIHIgPSBvLm1haW5BeGlzLCBpID0gciA9PT0gdm9pZCAwID8gITAgOiByLCBhID0gby5hbHRBeGlzLCBzID0gYSA9PT0gdm9pZCAwID8gITAgOiBhLCBsID0gby5mYWxsYmFja1BsYWNlbWVudHMsIHAgPSBvLnBhZGRpbmcsIGQgPSBvLmJvdW5kYXJ5LCBiID0gby5yb290Qm91bmRhcnksIE0gPSBvLmFsdEJvdW5kYXJ5LCB1ID0gby5mbGlwVmFyaWF0aW9ucywgQSA9IHUgPT09IHZvaWQgMCA/ICEwIDogdSwgeiA9IG8uYWxsb3dlZEF1dG9QbGFjZW1lbnRzLCBmID0gdC5vcHRpb25zLnBsYWNlbWVudCwgTyA9IEhlKGYpLCBoID0gTyA9PT0gZiwgZyA9IGwgfHwgKGggfHwgIUEgPyBbSW4oZildIDoganYoZikpLCB2ID0gW2ZdLmNvbmNhdChnKS5yZWR1Y2UoZnVuY3Rpb24oXywgcjEpIHtcbiAgICAgIHJldHVybiBfLmNvbmNhdChIZShyMSkgPT09IEc1ID8gWnYodCwge1xuICAgICAgICBwbGFjZW1lbnQ6IHIxLFxuICAgICAgICBib3VuZGFyeTogZCxcbiAgICAgICAgcm9vdEJvdW5kYXJ5OiBiLFxuICAgICAgICBwYWRkaW5nOiBwLFxuICAgICAgICBmbGlwVmFyaWF0aW9uczogQSxcbiAgICAgICAgYWxsb3dlZEF1dG9QbGFjZW1lbnRzOiB6XG4gICAgICB9KSA6IHIxKTtcbiAgICB9LCBbXSksIEwgPSB0LnJlY3RzLnJlZmVyZW5jZSwgeSA9IHQucmVjdHMucG9wcGVyLCBCID0gLyogQF9fUFVSRV9fICovIG5ldyBNYXAoKSwgWCA9ICEwLCBGID0gdlswXSwgVCA9IDA7IFQgPCB2Lmxlbmd0aDsgVCsrKSB7XG4gICAgICB2YXIgdyA9IHZbVF0sIEggPSBIZSh3KSwgQyA9IFozKHcpID09PSBZMywgcSA9IFtGMiwgZGVdLmluZGV4T2YoSCkgPj0gMCwgbSA9IHEgPyBcIndpZHRoXCIgOiBcImhlaWdodFwiLCBrID0gY3IodCwge1xuICAgICAgICBwbGFjZW1lbnQ6IHcsXG4gICAgICAgIGJvdW5kYXJ5OiBkLFxuICAgICAgICByb290Qm91bmRhcnk6IGIsXG4gICAgICAgIGFsdEJvdW5kYXJ5OiBNLFxuICAgICAgICBwYWRkaW5nOiBwXG4gICAgICB9KSwgeCA9IHEgPyBDID8gYmUgOiBYMiA6IEMgPyBkZSA6IEYyO1xuICAgICAgTFttXSA+IHlbbV0gJiYgKHggPSBJbih4KSk7XG4gICAgICB2YXIgTiA9IEluKHgpLCBWID0gW107XG4gICAgICBpZiAoaSAmJiBWLnB1c2goa1tIXSA8PSAwKSwgcyAmJiBWLnB1c2goa1t4XSA8PSAwLCBrW05dIDw9IDApLCBWLmV2ZXJ5KGZ1bmN0aW9uKF8pIHtcbiAgICAgICAgcmV0dXJuIF87XG4gICAgICB9KSkge1xuICAgICAgICBGID0gdywgWCA9ICExO1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICAgIEIuc2V0KHcsIFYpO1xuICAgIH1cbiAgICBpZiAoWClcbiAgICAgIGZvciAodmFyIFIgPSBBID8gMyA6IDEsIEkgPSBmdW5jdGlvbihyMSkge1xuICAgICAgICB2YXIgSyA9IHYuZmluZChmdW5jdGlvbihRKSB7XG4gICAgICAgICAgdmFyIEUgPSBCLmdldChRKTtcbiAgICAgICAgICBpZiAoRSlcbiAgICAgICAgICAgIHJldHVybiBFLnNsaWNlKDAsIHIxKS5ldmVyeShmdW5jdGlvbihEKSB7XG4gICAgICAgICAgICAgIHJldHVybiBEO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgICAgICBpZiAoSylcbiAgICAgICAgICByZXR1cm4gRiA9IEssIFwiYnJlYWtcIjtcbiAgICAgIH0sIGogPSBSOyBqID4gMDsgai0tKSB7XG4gICAgICAgIHZhciBVID0gSShqKTtcbiAgICAgICAgaWYgKFUgPT09IFwiYnJlYWtcIilcbiAgICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB0LnBsYWNlbWVudCAhPT0gRiAmJiAodC5tb2RpZmllcnNEYXRhW25dLl9za2lwID0gITAsIHQucGxhY2VtZW50ID0gRiwgdC5yZXNldCA9ICEwKTtcbiAgfVxufVxuY29uc3QgSnYgPSB7XG4gIG5hbWU6IFwiZmxpcFwiLFxuICBlbmFibGVkOiAhMCxcbiAgcGhhc2U6IFwibWFpblwiLFxuICBmbjogS3YsXG4gIHJlcXVpcmVzSWZFeGlzdHM6IFtcIm9mZnNldFwiXSxcbiAgZGF0YToge1xuICAgIF9za2lwOiAhMVxuICB9XG59O1xuZnVuY3Rpb24gcTgoZSwgdCwgbykge1xuICByZXR1cm4gbyA9PT0gdm9pZCAwICYmIChvID0ge1xuICAgIHg6IDAsXG4gICAgeTogMFxuICB9KSwge1xuICAgIHRvcDogZS50b3AgLSB0LmhlaWdodCAtIG8ueSxcbiAgICByaWdodDogZS5yaWdodCAtIHQud2lkdGggKyBvLngsXG4gICAgYm90dG9tOiBlLmJvdHRvbSAtIHQuaGVpZ2h0ICsgby55LFxuICAgIGxlZnQ6IGUubGVmdCAtIHQud2lkdGggLSBvLnhcbiAgfTtcbn1cbmZ1bmN0aW9uIHk4KGUpIHtcbiAgcmV0dXJuIFtGMiwgYmUsIGRlLCBYMl0uc29tZShmdW5jdGlvbih0KSB7XG4gICAgcmV0dXJuIGVbdF0gPj0gMDtcbiAgfSk7XG59XG5mdW5jdGlvbiBfdihlKSB7XG4gIHZhciB0ID0gZS5zdGF0ZSwgbyA9IGUubmFtZSwgbiA9IHQucmVjdHMucmVmZXJlbmNlLCByID0gdC5yZWN0cy5wb3BwZXIsIGkgPSB0Lm1vZGlmaWVyc0RhdGEucHJldmVudE92ZXJmbG93LCBhID0gY3IodCwge1xuICAgIGVsZW1lbnRDb250ZXh0OiBcInJlZmVyZW5jZVwiXG4gIH0pLCBzID0gY3IodCwge1xuICAgIGFsdEJvdW5kYXJ5OiAhMFxuICB9KSwgbCA9IHE4KGEsIG4pLCBwID0gcTgocywgciwgaSksIGQgPSB5OChsKSwgYiA9IHk4KHApO1xuICB0Lm1vZGlmaWVyc0RhdGFbb10gPSB7XG4gICAgcmVmZXJlbmNlQ2xpcHBpbmdPZmZzZXRzOiBsLFxuICAgIHBvcHBlckVzY2FwZU9mZnNldHM6IHAsXG4gICAgaXNSZWZlcmVuY2VIaWRkZW46IGQsXG4gICAgaGFzUG9wcGVyRXNjYXBlZDogYlxuICB9LCB0LmF0dHJpYnV0ZXMucG9wcGVyID0gT2JqZWN0LmFzc2lnbih7fSwgdC5hdHRyaWJ1dGVzLnBvcHBlciwge1xuICAgIFwiZGF0YS1wb3BwZXItcmVmZXJlbmNlLWhpZGRlblwiOiBkLFxuICAgIFwiZGF0YS1wb3BwZXItZXNjYXBlZFwiOiBiXG4gIH0pO1xufVxuY29uc3QgJHYgPSB7XG4gIG5hbWU6IFwiaGlkZVwiLFxuICBlbmFibGVkOiAhMCxcbiAgcGhhc2U6IFwibWFpblwiLFxuICByZXF1aXJlc0lmRXhpc3RzOiBbXCJwcmV2ZW50T3ZlcmZsb3dcIl0sXG4gIGZuOiBfdlxufTtcbmZ1bmN0aW9uIGVxKGUsIHQsIG8pIHtcbiAgdmFyIG4gPSBIZShlKSwgciA9IFtYMiwgRjJdLmluZGV4T2YobikgPj0gMCA/IC0xIDogMSwgaSA9IHR5cGVvZiBvID09IFwiZnVuY3Rpb25cIiA/IG8oT2JqZWN0LmFzc2lnbih7fSwgdCwge1xuICAgIHBsYWNlbWVudDogZVxuICB9KSkgOiBvLCBhID0gaVswXSwgcyA9IGlbMV07XG4gIHJldHVybiBhID0gYSB8fCAwLCBzID0gKHMgfHwgMCkgKiByLCBbWDIsIGJlXS5pbmRleE9mKG4pID49IDAgPyB7XG4gICAgeDogcyxcbiAgICB5OiBhXG4gIH0gOiB7XG4gICAgeDogYSxcbiAgICB5OiBzXG4gIH07XG59XG5mdW5jdGlvbiB0cShlKSB7XG4gIHZhciB0ID0gZS5zdGF0ZSwgbyA9IGUub3B0aW9ucywgbiA9IGUubmFtZSwgciA9IG8ub2Zmc2V0LCBpID0gciA9PT0gdm9pZCAwID8gWzAsIDBdIDogciwgYSA9IFJsLnJlZHVjZShmdW5jdGlvbihkLCBiKSB7XG4gICAgcmV0dXJuIGRbYl0gPSBlcShiLCB0LnJlY3RzLCBpKSwgZDtcbiAgfSwge30pLCBzID0gYVt0LnBsYWNlbWVudF0sIGwgPSBzLngsIHAgPSBzLnk7XG4gIHQubW9kaWZpZXJzRGF0YS5wb3BwZXJPZmZzZXRzICE9IG51bGwgJiYgKHQubW9kaWZpZXJzRGF0YS5wb3BwZXJPZmZzZXRzLnggKz0gbCwgdC5tb2RpZmllcnNEYXRhLnBvcHBlck9mZnNldHMueSArPSBwKSwgdC5tb2RpZmllcnNEYXRhW25dID0gYTtcbn1cbmNvbnN0IG9xID0ge1xuICBuYW1lOiBcIm9mZnNldFwiLFxuICBlbmFibGVkOiAhMCxcbiAgcGhhc2U6IFwibWFpblwiLFxuICByZXF1aXJlczogW1wicG9wcGVyT2Zmc2V0c1wiXSxcbiAgZm46IHRxXG59O1xuZnVuY3Rpb24gcnEoZSkge1xuICB2YXIgdCA9IGUuc3RhdGUsIG8gPSBlLm5hbWU7XG4gIHQubW9kaWZpZXJzRGF0YVtvXSA9IElsKHtcbiAgICByZWZlcmVuY2U6IHQucmVjdHMucmVmZXJlbmNlLFxuICAgIGVsZW1lbnQ6IHQucmVjdHMucG9wcGVyLFxuICAgIHN0cmF0ZWd5OiBcImFic29sdXRlXCIsXG4gICAgcGxhY2VtZW50OiB0LnBsYWNlbWVudFxuICB9KTtcbn1cbmNvbnN0IG5xID0ge1xuICBuYW1lOiBcInBvcHBlck9mZnNldHNcIixcbiAgZW5hYmxlZDogITAsXG4gIHBoYXNlOiBcInJlYWRcIixcbiAgZm46IHJxLFxuICBkYXRhOiB7fVxufTtcbmZ1bmN0aW9uIGlxKGUpIHtcbiAgcmV0dXJuIGUgPT09IFwieFwiID8gXCJ5XCIgOiBcInhcIjtcbn1cbmZ1bmN0aW9uIGFxKGUpIHtcbiAgdmFyIHQgPSBlLnN0YXRlLCBvID0gZS5vcHRpb25zLCBuID0gZS5uYW1lLCByID0gby5tYWluQXhpcywgaSA9IHIgPT09IHZvaWQgMCA/ICEwIDogciwgYSA9IG8uYWx0QXhpcywgcyA9IGEgPT09IHZvaWQgMCA/ICExIDogYSwgbCA9IG8uYm91bmRhcnksIHAgPSBvLnJvb3RCb3VuZGFyeSwgZCA9IG8uYWx0Qm91bmRhcnksIGIgPSBvLnBhZGRpbmcsIE0gPSBvLnRldGhlciwgdSA9IE0gPT09IHZvaWQgMCA/ICEwIDogTSwgQSA9IG8udGV0aGVyT2Zmc2V0LCB6ID0gQSA9PT0gdm9pZCAwID8gMCA6IEEsIGYgPSBjcih0LCB7XG4gICAgYm91bmRhcnk6IGwsXG4gICAgcm9vdEJvdW5kYXJ5OiBwLFxuICAgIHBhZGRpbmc6IGIsXG4gICAgYWx0Qm91bmRhcnk6IGRcbiAgfSksIE8gPSBIZSh0LnBsYWNlbWVudCksIGggPSBaMyh0LnBsYWNlbWVudCksIGcgPSAhaCwgdiA9IGo1KE8pLCBMID0gaXEodiksIHkgPSB0Lm1vZGlmaWVyc0RhdGEucG9wcGVyT2Zmc2V0cywgQiA9IHQucmVjdHMucmVmZXJlbmNlLCBYID0gdC5yZWN0cy5wb3BwZXIsIEYgPSB0eXBlb2YgeiA9PSBcImZ1bmN0aW9uXCIgPyB6KE9iamVjdC5hc3NpZ24oe30sIHQucmVjdHMsIHtcbiAgICBwbGFjZW1lbnQ6IHQucGxhY2VtZW50XG4gIH0pKSA6IHosIFQgPSB0eXBlb2YgRiA9PSBcIm51bWJlclwiID8ge1xuICAgIG1haW5BeGlzOiBGLFxuICAgIGFsdEF4aXM6IEZcbiAgfSA6IE9iamVjdC5hc3NpZ24oe1xuICAgIG1haW5BeGlzOiAwLFxuICAgIGFsdEF4aXM6IDBcbiAgfSwgRiksIHcgPSB0Lm1vZGlmaWVyc0RhdGEub2Zmc2V0ID8gdC5tb2RpZmllcnNEYXRhLm9mZnNldFt0LnBsYWNlbWVudF0gOiBudWxsLCBIID0ge1xuICAgIHg6IDAsXG4gICAgeTogMFxuICB9O1xuICBpZiAoeSkge1xuICAgIGlmIChpKSB7XG4gICAgICB2YXIgQywgcSA9IHYgPT09IFwieVwiID8gRjIgOiBYMiwgbSA9IHYgPT09IFwieVwiID8gZGUgOiBiZSwgayA9IHYgPT09IFwieVwiID8gXCJoZWlnaHRcIiA6IFwid2lkdGhcIiwgeCA9IHlbdl0sIE4gPSB4ICsgZltxXSwgViA9IHggLSBmW21dLCBSID0gdSA/IC1YW2tdIC8gMiA6IDAsIEkgPSBoID09PSBZMyA/IEJba10gOiBYW2tdLCBqID0gaCA9PT0gWTMgPyAtWFtrXSA6IC1CW2tdLCBVID0gdC5lbGVtZW50cy5hcnJvdywgXyA9IHUgJiYgVSA/IFo1KFUpIDoge1xuICAgICAgICB3aWR0aDogMCxcbiAgICAgICAgaGVpZ2h0OiAwXG4gICAgICB9LCByMSA9IHQubW9kaWZpZXJzRGF0YVtcImFycm93I3BlcnNpc3RlbnRcIl0gPyB0Lm1vZGlmaWVyc0RhdGFbXCJhcnJvdyNwZXJzaXN0ZW50XCJdLnBhZGRpbmcgOiBFbCgpLCBLID0gcjFbcV0sIFEgPSByMVttXSwgRSA9IFpvKDAsIEJba10sIF9ba10pLCBEID0gZyA/IEJba10gLyAyIC0gUiAtIEUgLSBLIC0gVC5tYWluQXhpcyA6IEkgLSBFIC0gSyAtIFQubWFpbkF4aXMsIEcgPSBnID8gLUJba10gLyAyICsgUiArIEUgKyBRICsgVC5tYWluQXhpcyA6IGogKyBFICsgUSArIFQubWFpbkF4aXMsIEogPSB0LmVsZW1lbnRzLmFycm93ICYmIE5yKHQuZWxlbWVudHMuYXJyb3cpLCBTID0gSiA/IHYgPT09IFwieVwiID8gSi5jbGllbnRUb3AgfHwgMCA6IEouY2xpZW50TGVmdCB8fCAwIDogMCwgVyA9IChDID0gdyA9PSBudWxsID8gdm9pZCAwIDogd1t2XSkgIT0gbnVsbCA/IEMgOiAwLCBQID0geCArIEQgLSBXIC0gUywgWSA9IHggKyBHIC0gVywgWiA9IFpvKHUgPyBzNChOLCBQKSA6IE4sIHgsIHUgPyBzMyhWLCBZKSA6IFYpO1xuICAgICAgeVt2XSA9IFosIEhbdl0gPSBaIC0geDtcbiAgICB9XG4gICAgaWYgKHMpIHtcbiAgICAgIHZhciB0MSwgaTEgPSB2ID09PSBcInhcIiA/IEYyIDogWDIsIG4xID0gdiA9PT0gXCJ4XCIgPyBkZSA6IGJlLCBzMSA9IHlbTF0sIGQxID0gTCA9PT0gXCJ5XCIgPyBcImhlaWdodFwiIDogXCJ3aWR0aFwiLCBiMSA9IHMxICsgZltpMV0sIGMxID0gczEgLSBmW24xXSwgYTEgPSBbRjIsIFgyXS5pbmRleE9mKE8pICE9PSAtMSwgbDEgPSAodDEgPSB3ID09IG51bGwgPyB2b2lkIDAgOiB3W0xdKSAhPSBudWxsID8gdDEgOiAwLCBwMSA9IGExID8gYjEgOiBzMSAtIEJbZDFdIC0gWFtkMV0gLSBsMSArIFQuYWx0QXhpcywgTTEgPSBhMSA/IHMxICsgQltkMV0gKyBYW2QxXSAtIGwxIC0gVC5hbHRBeGlzIDogYzEsIEExID0gdSAmJiBhMSA/IFJ2KHAxLCBzMSwgTTEpIDogWm8odSA/IHAxIDogYjEsIHMxLCB1ID8gTTEgOiBjMSk7XG4gICAgICB5W0xdID0gQTEsIEhbTF0gPSBBMSAtIHMxO1xuICAgIH1cbiAgICB0Lm1vZGlmaWVyc0RhdGFbbl0gPSBIO1xuICB9XG59XG5jb25zdCBzcSA9IHtcbiAgbmFtZTogXCJwcmV2ZW50T3ZlcmZsb3dcIixcbiAgZW5hYmxlZDogITAsXG4gIHBoYXNlOiBcIm1haW5cIixcbiAgZm46IGFxLFxuICByZXF1aXJlc0lmRXhpc3RzOiBbXCJvZmZzZXRcIl1cbn07XG5mdW5jdGlvbiBjcShlKSB7XG4gIHJldHVybiB7XG4gICAgc2Nyb2xsTGVmdDogZS5zY3JvbGxMZWZ0LFxuICAgIHNjcm9sbFRvcDogZS5zY3JvbGxUb3BcbiAgfTtcbn1cbmZ1bmN0aW9uIGxxKGUpIHtcbiAgcmV0dXJuIGUgPT09IHRlKGUpIHx8ICFsZShlKSA/IEs1KGUpIDogY3EoZSk7XG59XG5mdW5jdGlvbiBwcShlKSB7XG4gIHZhciB0ID0gZS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSwgbyA9IEczKHQud2lkdGgpIC8gZS5vZmZzZXRXaWR0aCB8fCAxLCBuID0gRzModC5oZWlnaHQpIC8gZS5vZmZzZXRIZWlnaHQgfHwgMTtcbiAgcmV0dXJuIG8gIT09IDEgfHwgbiAhPT0gMTtcbn1cbmZ1bmN0aW9uIGRxKGUsIHQsIG8pIHtcbiAgbyA9PT0gdm9pZCAwICYmIChvID0gITEpO1xuICB2YXIgbiA9IGxlKHQpLCByID0gbGUodCkgJiYgcHEodCksIGkgPSBGdCh0KSwgYSA9IFEzKGUsIHIsIG8pLCBzID0ge1xuICAgIHNjcm9sbExlZnQ6IDAsXG4gICAgc2Nyb2xsVG9wOiAwXG4gIH0sIGwgPSB7XG4gICAgeDogMCxcbiAgICB5OiAwXG4gIH07XG4gIHJldHVybiAobiB8fCAhbiAmJiAhbykgJiYgKChZZSh0KSAhPT0gXCJib2R5XCIgfHwgLy8gaHR0cHM6Ly9naXRodWIuY29tL3BvcHBlcmpzL3BvcHBlci1jb3JlL2lzc3Vlcy8xMDc4XG4gIF81KGkpKSAmJiAocyA9IGxxKHQpKSwgbGUodCkgPyAobCA9IFEzKHQsICEwKSwgbC54ICs9IHQuY2xpZW50TGVmdCwgbC55ICs9IHQuY2xpZW50VG9wKSA6IGkgJiYgKGwueCA9IEo1KGkpKSksIHtcbiAgICB4OiBhLmxlZnQgKyBzLnNjcm9sbExlZnQgLSBsLngsXG4gICAgeTogYS50b3AgKyBzLnNjcm9sbFRvcCAtIGwueSxcbiAgICB3aWR0aDogYS53aWR0aCxcbiAgICBoZWlnaHQ6IGEuaGVpZ2h0XG4gIH07XG59XG5mdW5jdGlvbiBicShlKSB7XG4gIHZhciB0ID0gLyogQF9fUFVSRV9fICovIG5ldyBNYXAoKSwgbyA9IC8qIEBfX1BVUkVfXyAqLyBuZXcgU2V0KCksIG4gPSBbXTtcbiAgZS5mb3JFYWNoKGZ1bmN0aW9uKGkpIHtcbiAgICB0LnNldChpLm5hbWUsIGkpO1xuICB9KTtcbiAgZnVuY3Rpb24gcihpKSB7XG4gICAgby5hZGQoaS5uYW1lKTtcbiAgICB2YXIgYSA9IFtdLmNvbmNhdChpLnJlcXVpcmVzIHx8IFtdLCBpLnJlcXVpcmVzSWZFeGlzdHMgfHwgW10pO1xuICAgIGEuZm9yRWFjaChmdW5jdGlvbihzKSB7XG4gICAgICBpZiAoIW8uaGFzKHMpKSB7XG4gICAgICAgIHZhciBsID0gdC5nZXQocyk7XG4gICAgICAgIGwgJiYgcihsKTtcbiAgICAgIH1cbiAgICB9KSwgbi5wdXNoKGkpO1xuICB9XG4gIHJldHVybiBlLmZvckVhY2goZnVuY3Rpb24oaSkge1xuICAgIG8uaGFzKGkubmFtZSkgfHwgcihpKTtcbiAgfSksIG47XG59XG5mdW5jdGlvbiBNcShlKSB7XG4gIHZhciB0ID0gYnEoZSk7XG4gIHJldHVybiB2di5yZWR1Y2UoZnVuY3Rpb24obywgbikge1xuICAgIHJldHVybiBvLmNvbmNhdCh0LmZpbHRlcihmdW5jdGlvbihyKSB7XG4gICAgICByZXR1cm4gci5waGFzZSA9PT0gbjtcbiAgICB9KSk7XG4gIH0sIFtdKTtcbn1cbmZ1bmN0aW9uIEFxKGUpIHtcbiAgdmFyIHQ7XG4gIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gdCB8fCAodCA9IG5ldyBQcm9taXNlKGZ1bmN0aW9uKG8pIHtcbiAgICAgIFByb21pc2UucmVzb2x2ZSgpLnRoZW4oZnVuY3Rpb24oKSB7XG4gICAgICAgIHQgPSB2b2lkIDAsIG8oZSgpKTtcbiAgICAgIH0pO1xuICAgIH0pKSwgdDtcbiAgfTtcbn1cbmZ1bmN0aW9uIHVxKGUpIHtcbiAgdmFyIHQgPSBlLnJlZHVjZShmdW5jdGlvbihvLCBuKSB7XG4gICAgdmFyIHIgPSBvW24ubmFtZV07XG4gICAgcmV0dXJuIG9bbi5uYW1lXSA9IHIgPyBPYmplY3QuYXNzaWduKHt9LCByLCBuLCB7XG4gICAgICBvcHRpb25zOiBPYmplY3QuYXNzaWduKHt9LCByLm9wdGlvbnMsIG4ub3B0aW9ucyksXG4gICAgICBkYXRhOiBPYmplY3QuYXNzaWduKHt9LCByLmRhdGEsIG4uZGF0YSlcbiAgICB9KSA6IG4sIG87XG4gIH0sIHt9KTtcbiAgcmV0dXJuIE9iamVjdC5rZXlzKHQpLm1hcChmdW5jdGlvbihvKSB7XG4gICAgcmV0dXJuIHRbb107XG4gIH0pO1xufVxudmFyIHc4ID0ge1xuICBwbGFjZW1lbnQ6IFwiYm90dG9tXCIsXG4gIG1vZGlmaWVyczogW10sXG4gIHN0cmF0ZWd5OiBcImFic29sdXRlXCJcbn07XG5mdW5jdGlvbiB4OCgpIHtcbiAgZm9yICh2YXIgZSA9IGFyZ3VtZW50cy5sZW5ndGgsIHQgPSBuZXcgQXJyYXkoZSksIG8gPSAwOyBvIDwgZTsgbysrKVxuICAgIHRbb10gPSBhcmd1bWVudHNbb107XG4gIHJldHVybiAhdC5zb21lKGZ1bmN0aW9uKG4pIHtcbiAgICByZXR1cm4gIShuICYmIHR5cGVvZiBuLmdldEJvdW5kaW5nQ2xpZW50UmVjdCA9PSBcImZ1bmN0aW9uXCIpO1xuICB9KTtcbn1cbmZ1bmN0aW9uIHpxKGUpIHtcbiAgZSA9PT0gdm9pZCAwICYmIChlID0ge30pO1xuICB2YXIgdCA9IGUsIG8gPSB0LmRlZmF1bHRNb2RpZmllcnMsIG4gPSBvID09PSB2b2lkIDAgPyBbXSA6IG8sIHIgPSB0LmRlZmF1bHRPcHRpb25zLCBpID0gciA9PT0gdm9pZCAwID8gdzggOiByO1xuICByZXR1cm4gZnVuY3Rpb24ocywgbCwgcCkge1xuICAgIHAgPT09IHZvaWQgMCAmJiAocCA9IGkpO1xuICAgIHZhciBkID0ge1xuICAgICAgcGxhY2VtZW50OiBcImJvdHRvbVwiLFxuICAgICAgb3JkZXJlZE1vZGlmaWVyczogW10sXG4gICAgICBvcHRpb25zOiBPYmplY3QuYXNzaWduKHt9LCB3OCwgaSksXG4gICAgICBtb2RpZmllcnNEYXRhOiB7fSxcbiAgICAgIGVsZW1lbnRzOiB7XG4gICAgICAgIHJlZmVyZW5jZTogcyxcbiAgICAgICAgcG9wcGVyOiBsXG4gICAgICB9LFxuICAgICAgYXR0cmlidXRlczoge30sXG4gICAgICBzdHlsZXM6IHt9XG4gICAgfSwgYiA9IFtdLCBNID0gITEsIHUgPSB7XG4gICAgICBzdGF0ZTogZCxcbiAgICAgIHNldE9wdGlvbnM6IGZ1bmN0aW9uKE8pIHtcbiAgICAgICAgdmFyIGggPSB0eXBlb2YgTyA9PSBcImZ1bmN0aW9uXCIgPyBPKGQub3B0aW9ucykgOiBPO1xuICAgICAgICB6KCksIGQub3B0aW9ucyA9IE9iamVjdC5hc3NpZ24oe30sIGksIGQub3B0aW9ucywgaCksIGQuc2Nyb2xsUGFyZW50cyA9IHtcbiAgICAgICAgICByZWZlcmVuY2U6IE0zKHMpID8gam8ocykgOiBzLmNvbnRleHRFbGVtZW50ID8gam8ocy5jb250ZXh0RWxlbWVudCkgOiBbXSxcbiAgICAgICAgICBwb3BwZXI6IGpvKGwpXG4gICAgICAgIH07XG4gICAgICAgIHZhciBnID0gTXEodXEoW10uY29uY2F0KG4sIGQub3B0aW9ucy5tb2RpZmllcnMpKSk7XG4gICAgICAgIHJldHVybiBkLm9yZGVyZWRNb2RpZmllcnMgPSBnLmZpbHRlcihmdW5jdGlvbih2KSB7XG4gICAgICAgICAgcmV0dXJuIHYuZW5hYmxlZDtcbiAgICAgICAgfSksIEEoKSwgdS51cGRhdGUoKTtcbiAgICAgIH0sXG4gICAgICAvLyBTeW5jIHVwZGF0ZSDigJMgaXQgd2lsbCBhbHdheXMgYmUgZXhlY3V0ZWQsIGV2ZW4gaWYgbm90IG5lY2Vzc2FyeS4gVGhpc1xuICAgICAgLy8gaXMgdXNlZnVsIGZvciBsb3cgZnJlcXVlbmN5IHVwZGF0ZXMgd2hlcmUgc3luYyBiZWhhdmlvciBzaW1wbGlmaWVzIHRoZVxuICAgICAgLy8gbG9naWMuXG4gICAgICAvLyBGb3IgaGlnaCBmcmVxdWVuY3kgdXBkYXRlcyAoZS5nLiBgcmVzaXplYCBhbmQgYHNjcm9sbGAgZXZlbnRzKSwgYWx3YXlzXG4gICAgICAvLyBwcmVmZXIgdGhlIGFzeW5jIFBvcHBlciN1cGRhdGUgbWV0aG9kXG4gICAgICBmb3JjZVVwZGF0ZTogZnVuY3Rpb24oKSB7XG4gICAgICAgIGlmICghTSkge1xuICAgICAgICAgIHZhciBPID0gZC5lbGVtZW50cywgaCA9IE8ucmVmZXJlbmNlLCBnID0gTy5wb3BwZXI7XG4gICAgICAgICAgaWYgKHg4KGgsIGcpKSB7XG4gICAgICAgICAgICBkLnJlY3RzID0ge1xuICAgICAgICAgICAgICByZWZlcmVuY2U6IGRxKGgsIE5yKGcpLCBkLm9wdGlvbnMuc3RyYXRlZ3kgPT09IFwiZml4ZWRcIiksXG4gICAgICAgICAgICAgIHBvcHBlcjogWjUoZylcbiAgICAgICAgICAgIH0sIGQucmVzZXQgPSAhMSwgZC5wbGFjZW1lbnQgPSBkLm9wdGlvbnMucGxhY2VtZW50LCBkLm9yZGVyZWRNb2RpZmllcnMuZm9yRWFjaChmdW5jdGlvbihUKSB7XG4gICAgICAgICAgICAgIHJldHVybiBkLm1vZGlmaWVyc0RhdGFbVC5uYW1lXSA9IE9iamVjdC5hc3NpZ24oe30sIFQuZGF0YSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGZvciAodmFyIHYgPSAwOyB2IDwgZC5vcmRlcmVkTW9kaWZpZXJzLmxlbmd0aDsgdisrKSB7XG4gICAgICAgICAgICAgIGlmIChkLnJlc2V0ID09PSAhMCkge1xuICAgICAgICAgICAgICAgIGQucmVzZXQgPSAhMSwgdiA9IC0xO1xuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIHZhciBMID0gZC5vcmRlcmVkTW9kaWZpZXJzW3ZdLCB5ID0gTC5mbiwgQiA9IEwub3B0aW9ucywgWCA9IEIgPT09IHZvaWQgMCA/IHt9IDogQiwgRiA9IEwubmFtZTtcbiAgICAgICAgICAgICAgdHlwZW9mIHkgPT0gXCJmdW5jdGlvblwiICYmIChkID0geSh7XG4gICAgICAgICAgICAgICAgc3RhdGU6IGQsXG4gICAgICAgICAgICAgICAgb3B0aW9uczogWCxcbiAgICAgICAgICAgICAgICBuYW1lOiBGLFxuICAgICAgICAgICAgICAgIGluc3RhbmNlOiB1XG4gICAgICAgICAgICAgIH0pIHx8IGQpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIC8vIEFzeW5jIGFuZCBvcHRpbWlzdGljYWxseSBvcHRpbWl6ZWQgdXBkYXRlIOKAkyBpdCB3aWxsIG5vdCBiZSBleGVjdXRlZCBpZlxuICAgICAgLy8gbm90IG5lY2Vzc2FyeSAoZGVib3VuY2VkIHRvIHJ1biBhdCBtb3N0IG9uY2UtcGVyLXRpY2spXG4gICAgICB1cGRhdGU6IEFxKGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24oZikge1xuICAgICAgICAgIHUuZm9yY2VVcGRhdGUoKSwgZihkKTtcbiAgICAgICAgfSk7XG4gICAgICB9KSxcbiAgICAgIGRlc3Ryb3k6IGZ1bmN0aW9uKCkge1xuICAgICAgICB6KCksIE0gPSAhMDtcbiAgICAgIH1cbiAgICB9O1xuICAgIGlmICgheDgocywgbCkpXG4gICAgICByZXR1cm4gdTtcbiAgICB1LnNldE9wdGlvbnMocCkudGhlbihmdW5jdGlvbihmKSB7XG4gICAgICAhTSAmJiBwLm9uRmlyc3RVcGRhdGUgJiYgcC5vbkZpcnN0VXBkYXRlKGYpO1xuICAgIH0pO1xuICAgIGZ1bmN0aW9uIEEoKSB7XG4gICAgICBkLm9yZGVyZWRNb2RpZmllcnMuZm9yRWFjaChmdW5jdGlvbihmKSB7XG4gICAgICAgIHZhciBPID0gZi5uYW1lLCBoID0gZi5vcHRpb25zLCBnID0gaCA9PT0gdm9pZCAwID8ge30gOiBoLCB2ID0gZi5lZmZlY3Q7XG4gICAgICAgIGlmICh0eXBlb2YgdiA9PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgICAgICB2YXIgTCA9IHYoe1xuICAgICAgICAgICAgc3RhdGU6IGQsXG4gICAgICAgICAgICBuYW1lOiBPLFxuICAgICAgICAgICAgaW5zdGFuY2U6IHUsXG4gICAgICAgICAgICBvcHRpb25zOiBnXG4gICAgICAgICAgfSksIHkgPSBmdW5jdGlvbigpIHtcbiAgICAgICAgICB9O1xuICAgICAgICAgIGIucHVzaChMIHx8IHkpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG4gICAgZnVuY3Rpb24geigpIHtcbiAgICAgIGIuZm9yRWFjaChmdW5jdGlvbihmKSB7XG4gICAgICAgIHJldHVybiBmKCk7XG4gICAgICB9KSwgYiA9IFtdO1xuICAgIH1cbiAgICByZXR1cm4gdTtcbiAgfTtcbn1cbnZhciBocSA9IFtWdiwgbnEsIER2LCB3diwgb3EsIEp2LCBzcSwga3YsICR2XSwgT3EgPSAvKiBAX19QVVJFX18gKi8genEoe1xuICBkZWZhdWx0TW9kaWZpZXJzOiBocVxufSksIGZxID0gdHlwZW9mIEVsZW1lbnQgPCBcInVcIiwgZ3EgPSB0eXBlb2YgTWFwID09IFwiZnVuY3Rpb25cIiwgQ3EgPSB0eXBlb2YgU2V0ID09IFwiZnVuY3Rpb25cIiwgbXEgPSB0eXBlb2YgQXJyYXlCdWZmZXIgPT0gXCJmdW5jdGlvblwiICYmICEhQXJyYXlCdWZmZXIuaXNWaWV3O1xuZnVuY3Rpb24gRG4oZSwgdCkge1xuICBpZiAoZSA9PT0gdClcbiAgICByZXR1cm4gITA7XG4gIGlmIChlICYmIHQgJiYgdHlwZW9mIGUgPT0gXCJvYmplY3RcIiAmJiB0eXBlb2YgdCA9PSBcIm9iamVjdFwiKSB7XG4gICAgaWYgKGUuY29uc3RydWN0b3IgIT09IHQuY29uc3RydWN0b3IpXG4gICAgICByZXR1cm4gITE7XG4gICAgdmFyIG8sIG4sIHI7XG4gICAgaWYgKEFycmF5LmlzQXJyYXkoZSkpIHtcbiAgICAgIGlmIChvID0gZS5sZW5ndGgsIG8gIT0gdC5sZW5ndGgpXG4gICAgICAgIHJldHVybiAhMTtcbiAgICAgIGZvciAobiA9IG87IG4tLSAhPT0gMDsgKVxuICAgICAgICBpZiAoIURuKGVbbl0sIHRbbl0pKVxuICAgICAgICAgIHJldHVybiAhMTtcbiAgICAgIHJldHVybiAhMDtcbiAgICB9XG4gICAgdmFyIGk7XG4gICAgaWYgKGdxICYmIGUgaW5zdGFuY2VvZiBNYXAgJiYgdCBpbnN0YW5jZW9mIE1hcCkge1xuICAgICAgaWYgKGUuc2l6ZSAhPT0gdC5zaXplKVxuICAgICAgICByZXR1cm4gITE7XG4gICAgICBmb3IgKGkgPSBlLmVudHJpZXMoKTsgIShuID0gaS5uZXh0KCkpLmRvbmU7IClcbiAgICAgICAgaWYgKCF0LmhhcyhuLnZhbHVlWzBdKSlcbiAgICAgICAgICByZXR1cm4gITE7XG4gICAgICBmb3IgKGkgPSBlLmVudHJpZXMoKTsgIShuID0gaS5uZXh0KCkpLmRvbmU7IClcbiAgICAgICAgaWYgKCFEbihuLnZhbHVlWzFdLCB0LmdldChuLnZhbHVlWzBdKSkpXG4gICAgICAgICAgcmV0dXJuICExO1xuICAgICAgcmV0dXJuICEwO1xuICAgIH1cbiAgICBpZiAoQ3EgJiYgZSBpbnN0YW5jZW9mIFNldCAmJiB0IGluc3RhbmNlb2YgU2V0KSB7XG4gICAgICBpZiAoZS5zaXplICE9PSB0LnNpemUpXG4gICAgICAgIHJldHVybiAhMTtcbiAgICAgIGZvciAoaSA9IGUuZW50cmllcygpOyAhKG4gPSBpLm5leHQoKSkuZG9uZTsgKVxuICAgICAgICBpZiAoIXQuaGFzKG4udmFsdWVbMF0pKVxuICAgICAgICAgIHJldHVybiAhMTtcbiAgICAgIHJldHVybiAhMDtcbiAgICB9XG4gICAgaWYgKG1xICYmIEFycmF5QnVmZmVyLmlzVmlldyhlKSAmJiBBcnJheUJ1ZmZlci5pc1ZpZXcodCkpIHtcbiAgICAgIGlmIChvID0gZS5sZW5ndGgsIG8gIT0gdC5sZW5ndGgpXG4gICAgICAgIHJldHVybiAhMTtcbiAgICAgIGZvciAobiA9IG87IG4tLSAhPT0gMDsgKVxuICAgICAgICBpZiAoZVtuXSAhPT0gdFtuXSlcbiAgICAgICAgICByZXR1cm4gITE7XG4gICAgICByZXR1cm4gITA7XG4gICAgfVxuICAgIGlmIChlLmNvbnN0cnVjdG9yID09PSBSZWdFeHApXG4gICAgICByZXR1cm4gZS5zb3VyY2UgPT09IHQuc291cmNlICYmIGUuZmxhZ3MgPT09IHQuZmxhZ3M7XG4gICAgaWYgKGUudmFsdWVPZiAhPT0gT2JqZWN0LnByb3RvdHlwZS52YWx1ZU9mICYmIHR5cGVvZiBlLnZhbHVlT2YgPT0gXCJmdW5jdGlvblwiICYmIHR5cGVvZiB0LnZhbHVlT2YgPT0gXCJmdW5jdGlvblwiKVxuICAgICAgcmV0dXJuIGUudmFsdWVPZigpID09PSB0LnZhbHVlT2YoKTtcbiAgICBpZiAoZS50b1N0cmluZyAhPT0gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZyAmJiB0eXBlb2YgZS50b1N0cmluZyA9PSBcImZ1bmN0aW9uXCIgJiYgdHlwZW9mIHQudG9TdHJpbmcgPT0gXCJmdW5jdGlvblwiKVxuICAgICAgcmV0dXJuIGUudG9TdHJpbmcoKSA9PT0gdC50b1N0cmluZygpO1xuICAgIGlmIChyID0gT2JqZWN0LmtleXMoZSksIG8gPSByLmxlbmd0aCwgbyAhPT0gT2JqZWN0LmtleXModCkubGVuZ3RoKVxuICAgICAgcmV0dXJuICExO1xuICAgIGZvciAobiA9IG87IG4tLSAhPT0gMDsgKVxuICAgICAgaWYgKCFPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwodCwgcltuXSkpXG4gICAgICAgIHJldHVybiAhMTtcbiAgICBpZiAoZnEgJiYgZSBpbnN0YW5jZW9mIEVsZW1lbnQpXG4gICAgICByZXR1cm4gITE7XG4gICAgZm9yIChuID0gbzsgbi0tICE9PSAwOyApXG4gICAgICBpZiAoISgocltuXSA9PT0gXCJfb3duZXJcIiB8fCByW25dID09PSBcIl9fdlwiIHx8IHJbbl0gPT09IFwiX19vXCIpICYmIGUuJCR0eXBlb2YpICYmICFEbihlW3Jbbl1dLCB0W3Jbbl1dKSlcbiAgICAgICAgcmV0dXJuICExO1xuICAgIHJldHVybiAhMDtcbiAgfVxuICByZXR1cm4gZSAhPT0gZSAmJiB0ICE9PSB0O1xufVxudmFyIExxID0gZnVuY3Rpb24odCwgbykge1xuICB0cnkge1xuICAgIHJldHVybiBEbih0LCBvKTtcbiAgfSBjYXRjaCAobikge1xuICAgIGlmICgobi5tZXNzYWdlIHx8IFwiXCIpLm1hdGNoKC9zdGFja3xyZWN1cnNpb24vaSkpXG4gICAgICByZXR1cm4gY29uc29sZS53YXJuKFwicmVhY3QtZmFzdC1jb21wYXJlIGNhbm5vdCBoYW5kbGUgY2lyY3VsYXIgcmVmc1wiKSwgITE7XG4gICAgdGhyb3cgbjtcbiAgfVxufTtcbmNvbnN0IHZxID0gLyogQF9fUFVSRV9fICovIFEyKExxKTtcbnZhciBxcSA9IFtdLCBEbCA9IGZ1bmN0aW9uKHQsIG8sIG4pIHtcbiAgbiA9PT0gdm9pZCAwICYmIChuID0ge30pO1xuICB2YXIgciA9IGMwLnVzZVJlZihudWxsKSwgaSA9IHtcbiAgICBvbkZpcnN0VXBkYXRlOiBuLm9uRmlyc3RVcGRhdGUsXG4gICAgcGxhY2VtZW50OiBuLnBsYWNlbWVudCB8fCBcImJvdHRvbVwiLFxuICAgIHN0cmF0ZWd5OiBuLnN0cmF0ZWd5IHx8IFwiYWJzb2x1dGVcIixcbiAgICBtb2RpZmllcnM6IG4ubW9kaWZpZXJzIHx8IHFxXG4gIH0sIGEgPSBjMC51c2VTdGF0ZSh7XG4gICAgc3R5bGVzOiB7XG4gICAgICBwb3BwZXI6IHtcbiAgICAgICAgcG9zaXRpb246IGkuc3RyYXRlZ3ksXG4gICAgICAgIGxlZnQ6IFwiMFwiLFxuICAgICAgICB0b3A6IFwiMFwiXG4gICAgICB9LFxuICAgICAgYXJyb3c6IHtcbiAgICAgICAgcG9zaXRpb246IFwiYWJzb2x1dGVcIlxuICAgICAgfVxuICAgIH0sXG4gICAgYXR0cmlidXRlczoge31cbiAgfSksIHMgPSBhWzBdLCBsID0gYVsxXSwgcCA9IGMwLnVzZU1lbW8oZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIG5hbWU6IFwidXBkYXRlU3RhdGVcIixcbiAgICAgIGVuYWJsZWQ6ICEwLFxuICAgICAgcGhhc2U6IFwid3JpdGVcIixcbiAgICAgIGZuOiBmdW5jdGlvbih1KSB7XG4gICAgICAgIHZhciBBID0gdS5zdGF0ZSwgeiA9IE9iamVjdC5rZXlzKEEuZWxlbWVudHMpO1xuICAgICAgICBpQS5mbHVzaFN5bmMoZnVuY3Rpb24oKSB7XG4gICAgICAgICAgbCh7XG4gICAgICAgICAgICBzdHlsZXM6IE84KHoubWFwKGZ1bmN0aW9uKGYpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIFtmLCBBLnN0eWxlc1tmXSB8fCB7fV07XG4gICAgICAgICAgICB9KSksXG4gICAgICAgICAgICBhdHRyaWJ1dGVzOiBPOCh6Lm1hcChmdW5jdGlvbihmKSB7XG4gICAgICAgICAgICAgIHJldHVybiBbZiwgQS5hdHRyaWJ1dGVzW2ZdXTtcbiAgICAgICAgICAgIH0pKVxuICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICAgIH0sXG4gICAgICByZXF1aXJlczogW1wiY29tcHV0ZVN0eWxlc1wiXVxuICAgIH07XG4gIH0sIFtdKSwgZCA9IGMwLnVzZU1lbW8oZnVuY3Rpb24oKSB7XG4gICAgdmFyIE0gPSB7XG4gICAgICBvbkZpcnN0VXBkYXRlOiBpLm9uRmlyc3RVcGRhdGUsXG4gICAgICBwbGFjZW1lbnQ6IGkucGxhY2VtZW50LFxuICAgICAgc3RyYXRlZ3k6IGkuc3RyYXRlZ3ksXG4gICAgICBtb2RpZmllcnM6IFtdLmNvbmNhdChpLm1vZGlmaWVycywgW3AsIHtcbiAgICAgICAgbmFtZTogXCJhcHBseVN0eWxlc1wiLFxuICAgICAgICBlbmFibGVkOiAhMVxuICAgICAgfV0pXG4gICAgfTtcbiAgICByZXR1cm4gdnEoci5jdXJyZW50LCBNKSA/IHIuY3VycmVudCB8fCBNIDogKHIuY3VycmVudCA9IE0sIE0pO1xuICB9LCBbaS5vbkZpcnN0VXBkYXRlLCBpLnBsYWNlbWVudCwgaS5zdHJhdGVneSwgaS5tb2RpZmllcnMsIHBdKSwgYiA9IGMwLnVzZVJlZigpO1xuICByZXR1cm4gZjgoZnVuY3Rpb24oKSB7XG4gICAgYi5jdXJyZW50ICYmIGIuY3VycmVudC5zZXRPcHRpb25zKGQpO1xuICB9LCBbZF0pLCBmOChmdW5jdGlvbigpIHtcbiAgICBpZiAoISh0ID09IG51bGwgfHwgbyA9PSBudWxsKSkge1xuICAgICAgdmFyIE0gPSBuLmNyZWF0ZVBvcHBlciB8fCBPcSwgdSA9IE0odCwgbywgZCk7XG4gICAgICByZXR1cm4gYi5jdXJyZW50ID0gdSwgZnVuY3Rpb24oKSB7XG4gICAgICAgIHUuZGVzdHJveSgpLCBiLmN1cnJlbnQgPSBudWxsO1xuICAgICAgfTtcbiAgICB9XG4gIH0sIFt0LCBvLCBuLmNyZWF0ZVBvcHBlcl0pLCB7XG4gICAgc3RhdGU6IGIuY3VycmVudCA/IGIuY3VycmVudC5zdGF0ZSA6IG51bGwsXG4gICAgc3R5bGVzOiBzLnN0eWxlcyxcbiAgICBhdHRyaWJ1dGVzOiBzLmF0dHJpYnV0ZXMsXG4gICAgdXBkYXRlOiBiLmN1cnJlbnQgPyBiLmN1cnJlbnQudXBkYXRlIDogbnVsbCxcbiAgICBmb3JjZVVwZGF0ZTogYi5jdXJyZW50ID8gYi5jdXJyZW50LmZvcmNlVXBkYXRlIDogbnVsbFxuICB9O1xufSwgeXEgPSBmdW5jdGlvbigpIHtcbn0sIHdxID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiBQcm9taXNlLnJlc29sdmUobnVsbCk7XG59LCB4cSA9IFtdO1xuZnVuY3Rpb24gV3EoZSkge1xuICB2YXIgdCA9IGUucGxhY2VtZW50LCBvID0gdCA9PT0gdm9pZCAwID8gXCJib3R0b21cIiA6IHQsIG4gPSBlLnN0cmF0ZWd5LCByID0gbiA9PT0gdm9pZCAwID8gXCJhYnNvbHV0ZVwiIDogbiwgaSA9IGUubW9kaWZpZXJzLCBhID0gaSA9PT0gdm9pZCAwID8geHEgOiBpLCBzID0gZS5yZWZlcmVuY2VFbGVtZW50LCBsID0gZS5vbkZpcnN0VXBkYXRlLCBwID0gZS5pbm5lclJlZiwgZCA9IGUuY2hpbGRyZW4sIGIgPSBjMC51c2VDb250ZXh0KHFsKSwgTSA9IGMwLnVzZVN0YXRlKG51bGwpLCB1ID0gTVswXSwgQSA9IE1bMV0sIHogPSBjMC51c2VTdGF0ZShudWxsKSwgZiA9IHpbMF0sIE8gPSB6WzFdO1xuICBjMC51c2VFZmZlY3QoZnVuY3Rpb24oKSB7XG4gICAgUGEocCwgdSk7XG4gIH0sIFtwLCB1XSk7XG4gIHZhciBoID0gYzAudXNlTWVtbyhmdW5jdGlvbigpIHtcbiAgICByZXR1cm4ge1xuICAgICAgcGxhY2VtZW50OiBvLFxuICAgICAgc3RyYXRlZ3k6IHIsXG4gICAgICBvbkZpcnN0VXBkYXRlOiBsLFxuICAgICAgbW9kaWZpZXJzOiBbXS5jb25jYXQoYSwgW3tcbiAgICAgICAgbmFtZTogXCJhcnJvd1wiLFxuICAgICAgICBlbmFibGVkOiBmICE9IG51bGwsXG4gICAgICAgIG9wdGlvbnM6IHtcbiAgICAgICAgICBlbGVtZW50OiBmXG4gICAgICAgIH1cbiAgICAgIH1dKVxuICAgIH07XG4gIH0sIFtvLCByLCBsLCBhLCBmXSksIGcgPSBEbChzIHx8IGIsIHUsIGgpLCB2ID0gZy5zdGF0ZSwgTCA9IGcuc3R5bGVzLCB5ID0gZy5mb3JjZVVwZGF0ZSwgQiA9IGcudXBkYXRlLCBYID0gYzAudXNlTWVtbyhmdW5jdGlvbigpIHtcbiAgICByZXR1cm4ge1xuICAgICAgcmVmOiBBLFxuICAgICAgc3R5bGU6IEwucG9wcGVyLFxuICAgICAgcGxhY2VtZW50OiB2ID8gdi5wbGFjZW1lbnQgOiBvLFxuICAgICAgaGFzUG9wcGVyRXNjYXBlZDogdiAmJiB2Lm1vZGlmaWVyc0RhdGEuaGlkZSA/IHYubW9kaWZpZXJzRGF0YS5oaWRlLmhhc1BvcHBlckVzY2FwZWQgOiBudWxsLFxuICAgICAgaXNSZWZlcmVuY2VIaWRkZW46IHYgJiYgdi5tb2RpZmllcnNEYXRhLmhpZGUgPyB2Lm1vZGlmaWVyc0RhdGEuaGlkZS5pc1JlZmVyZW5jZUhpZGRlbiA6IG51bGwsXG4gICAgICBhcnJvd1Byb3BzOiB7XG4gICAgICAgIHN0eWxlOiBMLmFycm93LFxuICAgICAgICByZWY6IE9cbiAgICAgIH0sXG4gICAgICBmb3JjZVVwZGF0ZTogeSB8fCB5cSxcbiAgICAgIHVwZGF0ZTogQiB8fCB3cVxuICAgIH07XG4gIH0sIFtBLCBPLCBvLCB2LCBMLCBCLCB5XSk7XG4gIHJldHVybiB3bChkKShYKTtcbn1cbnZhciBScSA9IHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIiwgSGwgPSBmdW5jdGlvbigpIHtcbn07XG5pZiAoUnEpIHtcbiAgdmFyIEJxID0gZnVuY3Rpb24odCwgbykge1xuICAgIHZhciBuID0gYXJndW1lbnRzLmxlbmd0aDtcbiAgICBvID0gbmV3IEFycmF5KG4gPiAxID8gbiAtIDEgOiAwKTtcbiAgICBmb3IgKHZhciByID0gMTsgciA8IG47IHIrKylcbiAgICAgIG9bciAtIDFdID0gYXJndW1lbnRzW3JdO1xuICAgIHZhciBpID0gMCwgYSA9IFwiV2FybmluZzogXCIgKyB0LnJlcGxhY2UoLyVzL2csIGZ1bmN0aW9uKCkge1xuICAgICAgcmV0dXJuIG9baSsrXTtcbiAgICB9KTtcbiAgICB0eXBlb2YgY29uc29sZSA8IFwidVwiICYmIGNvbnNvbGUuZXJyb3IoYSk7XG4gICAgdHJ5IHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihhKTtcbiAgICB9IGNhdGNoIHtcbiAgICB9XG4gIH07XG4gIEhsID0gZnVuY3Rpb24oZSwgdCwgbykge1xuICAgIHZhciBuID0gYXJndW1lbnRzLmxlbmd0aDtcbiAgICBvID0gbmV3IEFycmF5KG4gPiAyID8gbiAtIDIgOiAwKTtcbiAgICBmb3IgKHZhciByID0gMjsgciA8IG47IHIrKylcbiAgICAgIG9bciAtIDJdID0gYXJndW1lbnRzW3JdO1xuICAgIGlmICh0ID09PSB2b2lkIDApXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgIFwiYHdhcm5pbmcoY29uZGl0aW9uLCBmb3JtYXQsIC4uLmFyZ3MpYCByZXF1aXJlcyBhIHdhcm5pbmcgbWVzc2FnZSBhcmd1bWVudFwiXG4gICAgICApO1xuICAgIGUgfHwgQnEuYXBwbHkobnVsbCwgW3RdLmNvbmNhdChvKSk7XG4gIH07XG59XG52YXIgU3EgPSBIbDtcbmNvbnN0IEVxID0gLyogQF9fUFVSRV9fICovIFEyKFNxKTtcbmZ1bmN0aW9uIGtxKGUpIHtcbiAgdmFyIHQgPSBlLmNoaWxkcmVuLCBvID0gZS5pbm5lclJlZiwgbiA9IGMwLnVzZUNvbnRleHQoeWwpLCByID0gYzAudXNlQ2FsbGJhY2soZnVuY3Rpb24oaSkge1xuICAgIFBhKG8sIGkpLCB4bChuLCBpKTtcbiAgfSwgW28sIG5dKTtcbiAgcmV0dXJuIGMwLnVzZUVmZmVjdChmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgICByZXR1cm4gUGEobywgbnVsbCk7XG4gICAgfTtcbiAgfSwgW10pLCBjMC51c2VFZmZlY3QoZnVuY3Rpb24oKSB7XG4gICAgRXEoISFuLCBcImBSZWZlcmVuY2VgIHNob3VsZCBub3QgYmUgdXNlZCBvdXRzaWRlIG9mIGEgYE1hbmFnZXJgIGNvbXBvbmVudC5cIik7XG4gIH0sIFtuXSksIHdsKHQpKHtcbiAgICByZWY6IHJcbiAgfSk7XG59XG5mdW5jdGlvbiBWbChlKSB7XG4gIHZhciB0ID0gYzAudXNlUmVmKGUpO1xuICByZXR1cm4gdC5jdXJyZW50ID0gZSwgYzAudXNlQ2FsbGJhY2soZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIHQuY3VycmVudDtcbiAgfSwgW10pO1xufVxudmFyIE5xID0gZnVuY3Rpb24oKSB7XG59O1xuZnVuY3Rpb24gVHEoZSkge1xuICB2YXIgdCA9IGUuaW5pdGlhbCwgbyA9IGUudmFsdWUsIG4gPSBlLm9uQ2hhbmdlLCByID0gbiA9PT0gdm9pZCAwID8gTnEgOiBuO1xuICBpZiAodCA9PT0gdm9pZCAwICYmIG8gPT09IHZvaWQgMClcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdFaXRoZXIgXCJ2YWx1ZVwiIG9yIFwiaW5pdGlhbFwiIHZhcmlhYmxlIG11c3QgYmUgc2V0LiBOb3cgYm90aCBhcmUgdW5kZWZpbmVkJyk7XG4gIHZhciBpID0gYzAudXNlU3RhdGUodCksIGEgPSBpWzBdLCBzID0gaVsxXSwgbCA9IFZsKGEpLCBwID0gYzAudXNlQ2FsbGJhY2soZnVuY3Rpb24oYikge1xuICAgIHZhciBNID0gbCgpLCB1ID0gdHlwZW9mIGIgPT0gXCJmdW5jdGlvblwiID8gYihNKSA6IGI7XG4gICAgdHlwZW9mIHUucGVyc2lzdCA9PSBcImZ1bmN0aW9uXCIgJiYgdS5wZXJzaXN0KCksIHModSksIHR5cGVvZiByID09IFwiZnVuY3Rpb25cIiAmJiByKHUpO1xuICB9LCBbbCwgcl0pLCBkID0gbyAhPT0gdm9pZCAwO1xuICByZXR1cm4gW2QgPyBvIDogYSwgZCA/IHIgOiBwXTtcbn1cbmZ1bmN0aW9uIFBsKGUsIHQpIHtcbiAgcmV0dXJuIGUgPT09IHZvaWQgMCAmJiAoZSA9IDApLCB0ID09PSB2b2lkIDAgJiYgKHQgPSAwKSwgZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHdpZHRoOiAwLFxuICAgICAgaGVpZ2h0OiAwLFxuICAgICAgdG9wOiB0LFxuICAgICAgcmlnaHQ6IGUsXG4gICAgICBib3R0b206IHQsXG4gICAgICBsZWZ0OiBlLFxuICAgICAgeDogMCxcbiAgICAgIHk6IDAsXG4gICAgICB0b0pTT046IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIH1cbiAgICB9O1xuICB9O1xufVxudmFyIElxID0gW1wic3R5bGVzXCIsIFwiYXR0cmlidXRlc1wiXSwgVzggPSB7XG4gIGdldEJvdW5kaW5nQ2xpZW50UmVjdDogUGwoKVxufSwgUjggPSB7XG4gIGNsb3NlT25PdXRzaWRlQ2xpY2s6ICEwLFxuICBjbG9zZU9uVHJpZ2dlckhpZGRlbjogITEsXG4gIGRlZmF1bHRWaXNpYmxlOiAhMSxcbiAgZGVsYXlIaWRlOiAwLFxuICBkZWxheVNob3c6IDAsXG4gIGZvbGxvd0N1cnNvcjogITEsXG4gIGludGVyYWN0aXZlOiAhMSxcbiAgbXV0YXRpb25PYnNlcnZlck9wdGlvbnM6IHtcbiAgICBhdHRyaWJ1dGVzOiAhMCxcbiAgICBjaGlsZExpc3Q6ICEwLFxuICAgIHN1YnRyZWU6ICEwXG4gIH0sXG4gIG9mZnNldDogWzAsIDZdLFxuICB0cmlnZ2VyOiBcImhvdmVyXCJcbn07XG5mdW5jdGlvbiBEcShlLCB0KSB7XG4gIHZhciBvLCBuLCByO1xuICBlID09PSB2b2lkIDAgJiYgKGUgPSB7fSksIHQgPT09IHZvaWQgMCAmJiAodCA9IHt9KTtcbiAgdmFyIGkgPSBPYmplY3Qua2V5cyhSOCkucmVkdWNlKGZ1bmN0aW9uKG0sIGspIHtcbiAgICB2YXIgeDtcbiAgICByZXR1cm4gYTAoe30sIG0sICh4ID0ge30sIHhba10gPSBtW2tdICE9PSB2b2lkIDAgPyBtW2tdIDogUjhba10sIHgpKTtcbiAgfSwgZSksIGEgPSBjMC51c2VNZW1vKFxuICAgIGZ1bmN0aW9uKCkge1xuICAgICAgcmV0dXJuIFt7XG4gICAgICAgIG5hbWU6IFwib2Zmc2V0XCIsXG4gICAgICAgIG9wdGlvbnM6IHtcbiAgICAgICAgICBvZmZzZXQ6IGkub2Zmc2V0XG4gICAgICAgIH1cbiAgICAgIH1dO1xuICAgIH0sXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHJlYWN0LWhvb2tzL2V4aGF1c3RpdmUtZGVwc1xuICAgIEFycmF5LmlzQXJyYXkoaS5vZmZzZXQpID8gaS5vZmZzZXQgOiBbXVxuICApLCBzID0gYTAoe30sIHQsIHtcbiAgICBwbGFjZW1lbnQ6IHQucGxhY2VtZW50IHx8IGkucGxhY2VtZW50LFxuICAgIG1vZGlmaWVyczogdC5tb2RpZmllcnMgfHwgYVxuICB9KSwgbCA9IGMwLnVzZVN0YXRlKG51bGwpLCBwID0gbFswXSwgZCA9IGxbMV0sIGIgPSBjMC51c2VTdGF0ZShudWxsKSwgTSA9IGJbMF0sIHUgPSBiWzFdLCBBID0gVHEoe1xuICAgIGluaXRpYWw6IGkuZGVmYXVsdFZpc2libGUsXG4gICAgdmFsdWU6IGkudmlzaWJsZSxcbiAgICBvbkNoYW5nZTogaS5vblZpc2libGVDaGFuZ2VcbiAgfSksIHogPSBBWzBdLCBmID0gQVsxXSwgTyA9IGMwLnVzZVJlZigpO1xuICBjMC51c2VFZmZlY3QoZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgICAgcmV0dXJuIGNsZWFyVGltZW91dChPLmN1cnJlbnQpO1xuICAgIH07XG4gIH0sIFtdKTtcbiAgdmFyIGggPSBEbChpLmZvbGxvd0N1cnNvciA/IFc4IDogcCwgTSwgcyksIGcgPSBoLnN0eWxlcywgdiA9IGguYXR0cmlidXRlcywgTCA9IGFyKGgsIElxKSwgeSA9IEwudXBkYXRlLCBCID0gVmwoe1xuICAgIHZpc2libGU6IHosXG4gICAgdHJpZ2dlclJlZjogcCxcbiAgICB0b29sdGlwUmVmOiBNLFxuICAgIGZpbmFsQ29uZmlnOiBpXG4gIH0pLCBYID0gYzAudXNlQ2FsbGJhY2soXG4gICAgZnVuY3Rpb24obSkge1xuICAgICAgcmV0dXJuIEFycmF5LmlzQXJyYXkoaS50cmlnZ2VyKSA/IGkudHJpZ2dlci5pbmNsdWRlcyhtKSA6IGkudHJpZ2dlciA9PT0gbTtcbiAgICB9LFxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSByZWFjdC1ob29rcy9leGhhdXN0aXZlLWRlcHNcbiAgICBBcnJheS5pc0FycmF5KGkudHJpZ2dlcikgPyBpLnRyaWdnZXIgOiBbaS50cmlnZ2VyXVxuICApLCBGID0gYzAudXNlQ2FsbGJhY2soZnVuY3Rpb24oKSB7XG4gICAgY2xlYXJUaW1lb3V0KE8uY3VycmVudCksIE8uY3VycmVudCA9IHdpbmRvdy5zZXRUaW1lb3V0KGZ1bmN0aW9uKCkge1xuICAgICAgcmV0dXJuIGYoITEpO1xuICAgIH0sIGkuZGVsYXlIaWRlKTtcbiAgfSwgW2kuZGVsYXlIaWRlLCBmXSksIFQgPSBjMC51c2VDYWxsYmFjayhmdW5jdGlvbigpIHtcbiAgICBjbGVhclRpbWVvdXQoTy5jdXJyZW50KSwgTy5jdXJyZW50ID0gd2luZG93LnNldFRpbWVvdXQoZnVuY3Rpb24oKSB7XG4gICAgICByZXR1cm4gZighMCk7XG4gICAgfSwgaS5kZWxheVNob3cpO1xuICB9LCBbaS5kZWxheVNob3csIGZdKSwgdyA9IGMwLnVzZUNhbGxiYWNrKGZ1bmN0aW9uKCkge1xuICAgIEIoKS52aXNpYmxlID8gRigpIDogVCgpO1xuICB9LCBbQiwgRiwgVF0pO1xuICBjMC51c2VFZmZlY3QoZnVuY3Rpb24oKSB7XG4gICAgaWYgKEIoKS5maW5hbENvbmZpZy5jbG9zZU9uT3V0c2lkZUNsaWNrKSB7XG4gICAgICB2YXIgbSA9IGZ1bmN0aW9uKHgpIHtcbiAgICAgICAgdmFyIE4sIFYgPSBCKCksIFIgPSBWLnRvb2x0aXBSZWYsIEkgPSBWLnRyaWdnZXJSZWYsIGogPSAoeC5jb21wb3NlZFBhdGggPT0gbnVsbCB8fCAoTiA9IHguY29tcG9zZWRQYXRoKCkpID09IG51bGwgPyB2b2lkIDAgOiBOWzBdKSB8fCB4LnRhcmdldDtcbiAgICAgICAgaiBpbnN0YW5jZW9mIE5vZGUgJiYgUiAhPSBudWxsICYmIEkgIT0gbnVsbCAmJiAhUi5jb250YWlucyhqKSAmJiAhSS5jb250YWlucyhqKSAmJiBGKCk7XG4gICAgICB9O1xuICAgICAgcmV0dXJuIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoXCJtb3VzZWRvd25cIiwgbSksIGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcihcIm1vdXNlZG93blwiLCBtKTtcbiAgICAgIH07XG4gICAgfVxuICB9LCBbQiwgRl0pLCBjMC51c2VFZmZlY3QoZnVuY3Rpb24oKSB7XG4gICAgaWYgKCEocCA9PSBudWxsIHx8ICFYKFwiY2xpY2tcIikpKVxuICAgICAgcmV0dXJuIHAuYWRkRXZlbnRMaXN0ZW5lcihcImNsaWNrXCIsIHcpLCBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIHAucmVtb3ZlRXZlbnRMaXN0ZW5lcihcImNsaWNrXCIsIHcpO1xuICAgICAgfTtcbiAgfSwgW3AsIFgsIHddKSwgYzAudXNlRWZmZWN0KGZ1bmN0aW9uKCkge1xuICAgIGlmICghKHAgPT0gbnVsbCB8fCAhWChcImRvdWJsZS1jbGlja1wiKSkpXG4gICAgICByZXR1cm4gcC5hZGRFdmVudExpc3RlbmVyKFwiZGJsY2xpY2tcIiwgdyksIGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gcC5yZW1vdmVFdmVudExpc3RlbmVyKFwiZGJsY2xpY2tcIiwgdyk7XG4gICAgICB9O1xuICB9LCBbcCwgWCwgd10pLCBjMC51c2VFZmZlY3QoZnVuY3Rpb24oKSB7XG4gICAgaWYgKCEocCA9PSBudWxsIHx8ICFYKFwicmlnaHQtY2xpY2tcIikpKSB7XG4gICAgICB2YXIgbSA9IGZ1bmN0aW9uKHgpIHtcbiAgICAgICAgeC5wcmV2ZW50RGVmYXVsdCgpLCB3KCk7XG4gICAgICB9O1xuICAgICAgcmV0dXJuIHAuYWRkRXZlbnRMaXN0ZW5lcihcImNvbnRleHRtZW51XCIsIG0pLCBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIHAucmVtb3ZlRXZlbnRMaXN0ZW5lcihcImNvbnRleHRtZW51XCIsIG0pO1xuICAgICAgfTtcbiAgICB9XG4gIH0sIFtwLCBYLCB3XSksIGMwLnVzZUVmZmVjdChmdW5jdGlvbigpIHtcbiAgICBpZiAoIShwID09IG51bGwgfHwgIVgoXCJmb2N1c1wiKSkpXG4gICAgICByZXR1cm4gcC5hZGRFdmVudExpc3RlbmVyKFwiZm9jdXNcIiwgVCksIHAuYWRkRXZlbnRMaXN0ZW5lcihcImJsdXJcIiwgRiksIGZ1bmN0aW9uKCkge1xuICAgICAgICBwLnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJmb2N1c1wiLCBUKSwgcC5yZW1vdmVFdmVudExpc3RlbmVyKFwiYmx1clwiLCBGKTtcbiAgICAgIH07XG4gIH0sIFtwLCBYLCBULCBGXSksIGMwLnVzZUVmZmVjdChmdW5jdGlvbigpIHtcbiAgICBpZiAoIShwID09IG51bGwgfHwgIVgoXCJob3ZlclwiKSkpXG4gICAgICByZXR1cm4gcC5hZGRFdmVudExpc3RlbmVyKFwibW91c2VlbnRlclwiLCBUKSwgcC5hZGRFdmVudExpc3RlbmVyKFwibW91c2VsZWF2ZVwiLCBGKSwgZnVuY3Rpb24oKSB7XG4gICAgICAgIHAucmVtb3ZlRXZlbnRMaXN0ZW5lcihcIm1vdXNlZW50ZXJcIiwgVCksIHAucmVtb3ZlRXZlbnRMaXN0ZW5lcihcIm1vdXNlbGVhdmVcIiwgRik7XG4gICAgICB9O1xuICB9LCBbcCwgWCwgVCwgRl0pLCBjMC51c2VFZmZlY3QoZnVuY3Rpb24oKSB7XG4gICAgaWYgKCEoTSA9PSBudWxsIHx8ICFYKFwiaG92ZXJcIikgfHwgIUIoKS5maW5hbENvbmZpZy5pbnRlcmFjdGl2ZSkpXG4gICAgICByZXR1cm4gTS5hZGRFdmVudExpc3RlbmVyKFwibW91c2VlbnRlclwiLCBUKSwgTS5hZGRFdmVudExpc3RlbmVyKFwibW91c2VsZWF2ZVwiLCBGKSwgZnVuY3Rpb24oKSB7XG4gICAgICAgIE0ucmVtb3ZlRXZlbnRMaXN0ZW5lcihcIm1vdXNlZW50ZXJcIiwgVCksIE0ucmVtb3ZlRXZlbnRMaXN0ZW5lcihcIm1vdXNlbGVhdmVcIiwgRik7XG4gICAgICB9O1xuICB9LCBbTSwgWCwgVCwgRiwgQl0pO1xuICB2YXIgSCA9IEwgPT0gbnVsbCB8fCAobyA9IEwuc3RhdGUpID09IG51bGwgfHwgKG4gPSBvLm1vZGlmaWVyc0RhdGEpID09IG51bGwgfHwgKHIgPSBuLmhpZGUpID09IG51bGwgPyB2b2lkIDAgOiByLmlzUmVmZXJlbmNlSGlkZGVuO1xuICBjMC51c2VFZmZlY3QoZnVuY3Rpb24oKSB7XG4gICAgaS5jbG9zZU9uVHJpZ2dlckhpZGRlbiAmJiBIICYmIEYoKTtcbiAgfSwgW2kuY2xvc2VPblRyaWdnZXJIaWRkZW4sIEYsIEhdKSwgYzAudXNlRWZmZWN0KGZ1bmN0aW9uKCkge1xuICAgIGlmICghaS5mb2xsb3dDdXJzb3IgfHwgcCA9PSBudWxsKVxuICAgICAgcmV0dXJuO1xuICAgIGZ1bmN0aW9uIG0oaykge1xuICAgICAgdmFyIHggPSBrLmNsaWVudFgsIE4gPSBrLmNsaWVudFk7XG4gICAgICBXOC5nZXRCb3VuZGluZ0NsaWVudFJlY3QgPSBQbCh4LCBOKSwgeSA9PSBudWxsIHx8IHkoKTtcbiAgICB9XG4gICAgcmV0dXJuIHAuYWRkRXZlbnRMaXN0ZW5lcihcIm1vdXNlbW92ZVwiLCBtKSwgZnVuY3Rpb24oKSB7XG4gICAgICByZXR1cm4gcC5yZW1vdmVFdmVudExpc3RlbmVyKFwibW91c2Vtb3ZlXCIsIG0pO1xuICAgIH07XG4gIH0sIFtpLmZvbGxvd0N1cnNvciwgcCwgeV0pLCBjMC51c2VFZmZlY3QoZnVuY3Rpb24oKSB7XG4gICAgaWYgKCEoTSA9PSBudWxsIHx8IHkgPT0gbnVsbCB8fCBpLm11dGF0aW9uT2JzZXJ2ZXJPcHRpb25zID09IG51bGwpKSB7XG4gICAgICB2YXIgbSA9IG5ldyBNdXRhdGlvbk9ic2VydmVyKHkpO1xuICAgICAgcmV0dXJuIG0ub2JzZXJ2ZShNLCBpLm11dGF0aW9uT2JzZXJ2ZXJPcHRpb25zKSwgZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiBtLmRpc2Nvbm5lY3QoKTtcbiAgICAgIH07XG4gICAgfVxuICB9LCBbaS5tdXRhdGlvbk9ic2VydmVyT3B0aW9ucywgTSwgeV0pO1xuICB2YXIgQyA9IGZ1bmN0aW9uKGspIHtcbiAgICByZXR1cm4gayA9PT0gdm9pZCAwICYmIChrID0ge30pLCBhMCh7fSwgaywge1xuICAgICAgc3R5bGU6IGEwKHt9LCBrLnN0eWxlLCBnLnBvcHBlcilcbiAgICB9LCB2LnBvcHBlciwge1xuICAgICAgXCJkYXRhLXBvcHBlci1pbnRlcmFjdGl2ZVwiOiBpLmludGVyYWN0aXZlXG4gICAgfSk7XG4gIH0sIHEgPSBmdW5jdGlvbihrKSB7XG4gICAgcmV0dXJuIGsgPT09IHZvaWQgMCAmJiAoayA9IHt9KSwgYTAoe30sIGssIHYuYXJyb3csIHtcbiAgICAgIHN0eWxlOiBhMCh7fSwgay5zdHlsZSwgZy5hcnJvdyksXG4gICAgICBcImRhdGEtcG9wcGVyLWFycm93XCI6ICEwXG4gICAgfSk7XG4gIH07XG4gIHJldHVybiBhMCh7XG4gICAgZ2V0QXJyb3dQcm9wczogcSxcbiAgICBnZXRUb29sdGlwUHJvcHM6IEMsXG4gICAgc2V0VG9vbHRpcFJlZjogdSxcbiAgICBzZXRUcmlnZ2VyUmVmOiBkLFxuICAgIHRvb2x0aXBSZWY6IE0sXG4gICAgdHJpZ2dlclJlZjogcCxcbiAgICB2aXNpYmxlOiB6XG4gIH0sIEwpO1xufVxuY29uc3QgSHEgPSAkLmRpdmBgLCBGbCA9ICQuZGl2KFxuICAoe1xuICAgIHNpemU6IGUsXG4gICAgdGhlbWU6IHsgY29sb3JzOiB0LCB0eXBvZ3JhcGh5OiBvLCBzcGFjaW5nczogbiwgYm9yZGVyUmFkaXVzOiByLCBmb250V2VpZ2h0OiBpIH1cbiAgfSkgPT4gbzFgXG4gICAgZm9udC1zaXplOiAke28udDEwfTtcbiAgICBsaW5lLWhlaWdodDogJHtlID09PSBcIm1pbmlcIiA/IFwiMTBweFwiIDogMX07XG4gICAgZm9udC13ZWlnaHQ6ICR7ZSA9PT0gXCJtaW5pXCIgPyBpLnJlZ3VsYXIgOiBpLm1lZGl1bX07XG4gICAgcGFkZGluZzogJHtlID09PSBcIm1pbmlcIiA/IGAke24uc3A0fSA1cHhgIDogbi5zcDh9O1xuICAgIGJvcmRlci1yYWRpdXM6ICR7ci5iYXNlfTtcbiAgICBiYWNrZ3JvdW5kOiAke3QuYmFja2dyb3VuZHMuYmdUZXJ0aWFyeX07XG4gICAgY29sb3I6ICR7dC50ZXh0SWNvbi50ZXh0VGVydGlhcnl9O1xuICAgIGJvcmRlcjogbm9uZTtcbiAgICB6LWluZGV4OiA5OTk5O1xuXG4gICAgJltkYXRhLXBvcHBlci1pbnRlcmFjdGl2ZT0nZmFsc2UnXSB7XG4gICAgICBwb2ludGVyLWV2ZW50czogbm9uZTtcbiAgICB9XG4gIGBcbik7XG5mdW5jdGlvbiBBMyhlKSB7XG4gIGNvbnN0IHtcbiAgICB0ZXh0OiB0LFxuICAgIHBsYWNlOiBvLFxuICAgIGNoaWxkcmVuOiBuLFxuICAgIGZvbGxvd0N1cnNvcjogcixcbiAgICBzaXplOiBpID0gXCJkZWZhdWx0XCIsXG4gICAgLi4uYVxuICB9ID0gZSwgcyA9IGkgPT09IFwibWluaVwiID8gWzAsIDJdIDogWzAsIDZdLCB7IGdldFRvb2x0aXBQcm9wczogbCwgc2V0VG9vbHRpcFJlZjogcCwgc2V0VHJpZ2dlclJlZjogZCwgdmlzaWJsZTogYiB9ID0gRHEoe1xuICAgIC4uLmEsXG4gICAgZm9sbG93Q3Vyc29yOiByLFxuICAgIHBsYWNlbWVudDogbyxcbiAgICBvZmZzZXQ6IHNcbiAgfSk7XG4gIHJldHVybiAvKiBAX19QVVJFX18gKi8gZTEoSHEsIHsgcmVmOiBkLCBjaGlsZHJlbjogW1xuICAgIG4sXG4gICAgYiAmJiBpbChcbiAgICAgIC8qIEBfX1BVUkVfXyAqLyBjKFxuICAgICAgICBGbCxcbiAgICAgICAge1xuICAgICAgICAgIHNpemU6IGksXG4gICAgICAgICAgcmVmOiBwLFxuICAgICAgICAgIC4uLmwoeyBjbGFzc05hbWU6IFwidG9vbHRpcC1jb250YWluZXJcIiB9KSxcbiAgICAgICAgICBjaGlsZHJlbjogdFxuICAgICAgICB9XG4gICAgICApLFxuICAgICAgZG9jdW1lbnQuYm9keVxuICAgIClcbiAgXSB9KTtcbn1cbmZ1bmN0aW9uIFZxKGUpIHtcbiAgY29uc3QgeyBtaW5WYWx1ZTogdCwgbWF4VmFsdWU6IG8sIGlzRGlzYWJsZWQ6IG4sIHZhbHVlOiByLCBnZXRWYWx1ZTogaSwgLi4uYSB9ID0gZSwgW3MsIGxdID0gVDEociksIHAgPSBfMShcbiAgICAoZCkgPT4ge1xuICAgICAgbChkKSwgaSAmJiBpKGQpO1xuICAgIH0sXG4gICAgW2wsIGldXG4gICk7XG4gIHJldHVybiBQMSgoKSA9PiB7XG4gICAgbChyKTtcbiAgfSwgW3JdKSwgLyogQF9fUFVSRV9fICovIGMoZHYsIHsgY2hpbGRyZW46IC8qIEBfX1BVUkVfXyAqLyBjKFxuICAgIGN2LFxuICAgIHtcbiAgICAgIC4uLmEsXG4gICAgICBtaW46IHQsXG4gICAgICBtYXg6IG8sXG4gICAgICBkaXNhYmxlZDogbixcbiAgICAgIHZhbHVlOiBzLFxuICAgICAgb25DaGFuZ2U6IHAsXG4gICAgICBjbGFzc05hbWU6IFwiaG9yaXpvbnRhbC1zbGlkZXJcIixcbiAgICAgIHRodW1iQ2xhc3NOYW1lOiBcImV4YW1wbGUtdGh1bWJcIixcbiAgICAgIHRyYWNrQ2xhc3NOYW1lOiBcImV4YW1wbGUtdHJhY2tcIixcbiAgICAgIHJlbmRlclRodW1iOiAoZCwgYikgPT4gLyogQF9fUFVSRV9fICovIGMobHYsIHsgLi4uZCwgY2hpbGRyZW46IC8qIEBfX1BVUkVfXyAqLyBjKHB2LCB7IGNoaWxkcmVuOiAvKiBAX19QVVJFX18gKi8gYyhBMywgeyBzaXplOiBcImRlZmF1bHRcIiwgdGV4dDogYi52YWx1ZU5vdywgcGxhY2U6IFwidG9wXCIsIGNoaWxkcmVuOiBiLnZhbHVlTm93IH0pIH0pIH0pXG4gICAgfVxuICApIH0pO1xufVxuY29uc3QgUHEgPSAkLmRpdmBcbiAgZGlzcGxheTogZmxleDtcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgbWFyZ2luLWJvdHRvbTogJHsoeyB0aGVtZTogeyBzcGFjaW5nczogZSB9IH0pID0+IGUuc3AxNn07XG5gLCBCOCA9ICQuZGl2YFxuICBmbGV4OiAxO1xuXG4gIGlucHV0W3R5cGU9J251bWJlciddIHtcbiAgICA6Oi13ZWJraXQtb3V0ZXItc3Bpbi1idXR0b24sXG4gICAgOjotd2Via2l0LWlubmVyLXNwaW4tYnV0dG9uIHtcbiAgICAgIC13ZWJraXQtYXBwZWFyYW5jZTogbm9uZTtcbiAgICAgIG1hcmdpbjogMDtcbiAgICB9XG4gIH1cbmAsIEZxID0gJC5kaXYoXG4gICh7IHRoZW1lOiB7IHNwYWNpbmdzOiBlIH0gfSkgPT4gbzFgXG4gICAgcGFkZGluZy10b3A6ICR7ZS5zcDI0fTtcbiAgICB3aWR0aDogMXJlbTtcbiAgICBtYXJnaW46IDAgJHtlLnNwOH07XG4gIGBcbiksIFhxID0gJC5kaXYoXG4gICh7fSkgPT4gbzFgXG4gICAgcCB7XG4gICAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgICBtYXJnaW4tdG9wOiAtMTVweDtcbiAgICB9XG4gIGBcbik7XG5mdW5jdGlvbiBVcShlLCB0KSB7XG4gIGNvbnN0IHtcbiAgICBpc0Rpc2FibGVkOiBvLFxuICAgIHZhbHVlOiBuLFxuICAgIGhpZGVDbGVhckJ1dHRvbjogcixcbiAgICBtaW46IGksXG4gICAgbWF4OiBhLFxuICAgIG9uQ2hhbmdlOiBzLFxuICAgIGlzVmFsaWRhdGlvbjogbCxcbiAgICAuLi5wXG4gIH0gPSBlLCBbZCwgYl0gPSBUMShuKSwgW00sIHVdID0gVDEoITEpLCBbQSwgel0gPSBUMSghMSksIFtmLCBPXSA9IFQxKDApLCBbaCwgZ10gPSBUMSgwKTtcbiAgQnIodCwgKCkgPT4gKHtcbiAgICBoYW5kbGVSZXNldChYKSB7XG4gICAgICBiKFgpO1xuICAgIH1cbiAgfSkpLCBQMSgoKSA9PiB7XG4gICAgYihuKSwgTyhuWzBdKSwgZyhuWzFdKTtcbiAgfSwgW25dKSwgUDEoKCkgPT4ge1xuICAgIGRbMF0gPiBkWzFdICYmIGwgPyB1KCEwKSA6IHUoITEpO1xuICB9LCBbZCwgbF0pLCBQMSgoKSA9PiB7XG4gICAgZFsxXSA8IGRbMF0gJiYgbCA/IHooITApIDogeighMSk7XG4gIH0sIFtkLCBsXSk7XG4gIGNvbnN0IHYgPSBfMShcbiAgICAoWCkgPT4ge1xuICAgICAgY29uc3QgeyB2YWx1ZTogRiB9ID0gWC50YXJnZXQsIFQgPSAvXlswLTlcXGJdKyQvLCB3ID0gW051bWJlcihGKSwgZFsxXV07XG4gICAgICAoRiA9PT0gXCJcIiB8fCBULnRlc3QoRikpICYmIChiKHcpLCBzKHcpLCBPKEYpKSwgdSghMSk7XG4gICAgfSxcbiAgICBbZCwgZl1cbiAgKSwgTCA9IF8xKFxuICAgIChYKSA9PiB7XG4gICAgICBjb25zdCB7IHZhbHVlOiBGIH0gPSBYLmN1cnJlbnRUYXJnZXQsIFQgPSAvXlswLTlcXGJdKyQvLCB3ID0gW2RbMF0sIE51bWJlcihGKV07XG4gICAgICAoRiA9PT0gXCJcIiB8fCBULnRlc3QoRikpICYmIChiKHcpLCBzKHcpLCBnKEYpKSwgeighMSk7XG4gICAgfSxcbiAgICBbZCwgaF1cbiAgKSwgeSA9IF8xKFxuICAgIChYKSA9PiB7XG4gICAgICBiKFgpLCBzKFgpLCB6KCExKSwgdSghMSksIE8oWFswXSksIGcoWFsxXSk7XG4gICAgfSxcbiAgICBbcywgZiwgaCwgZF1cbiAgKSwgQiA9IHtcbiAgICB0eXBlOiBcInRleHRcIixcbiAgICBpc0Rpc2FibGVkOiBvLFxuICAgIHBsYWNlaG9sZGVyOiBcIkVudGVyIGFtb3VudFwiXG4gIH07XG4gIHJldHVybiAvKiBAX19QVVJFX18gKi8gZTEoVTIsIHsgY2hpbGRyZW46IFtcbiAgICAvKiBAX19QVVJFX18gKi8gZTEoUHEsIHsgY2hpbGRyZW46IFtcbiAgICAgIC8qIEBfX1BVUkVfXyAqLyBjKEI4LCB7IGNoaWxkcmVuOiAvKiBAX19QVVJFX18gKi8gYyhcbiAgICAgICAgWTIsXG4gICAgICAgIHtcbiAgICAgICAgICBsYWJlbDogXCJGcm9tXCIsXG4gICAgICAgICAgdmFsdWU6IGYsXG4gICAgICAgICAgb25DaGFuZ2U6IHYsXG4gICAgICAgICAgaXNFcnJvcjogTSxcbiAgICAgICAgICBpc1JlcXVpcmVkOiAhMCxcbiAgICAgICAgICBoaWRlQ2xlYXJCdXR0b246IHIsXG4gICAgICAgICAgaGFuZGxlQ2xlYXJGbjogKCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgWCA9IFswLCBkWzFdXTtcbiAgICAgICAgICAgIE8oXCJcIiksIGIoWCksIHMoWCk7XG4gICAgICAgICAgfSxcbiAgICAgICAgICAuLi5CXG4gICAgICAgIH1cbiAgICAgICkgfSksXG4gICAgICAvKiBAX19QVVJFX18gKi8gYyhGcSwgeyBjaGlsZHJlbjogLyogQF9fUFVSRV9fICovIGMoUDIsIHsgJGRlZmF1bHQ6ICEwIH0pIH0pLFxuICAgICAgLyogQF9fUFVSRV9fICovIGMoQjgsIHsgY2hpbGRyZW46IC8qIEBfX1BVUkVfXyAqLyBjKFxuICAgICAgICBZMixcbiAgICAgICAge1xuICAgICAgICAgIGxhYmVsOiBcIlRvXCIsXG4gICAgICAgICAgdmFsdWU6IGgsXG4gICAgICAgICAgb25DaGFuZ2U6IEwsXG4gICAgICAgICAgaXNFcnJvcjogQSxcbiAgICAgICAgICBpc1JlcXVpcmVkOiAhMCxcbiAgICAgICAgICBoaWRlQ2xlYXJCdXR0b246IHIsXG4gICAgICAgICAgaGFuZGxlQ2xlYXJGbjogKCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgWCA9IFtkWzBdLCAwXTtcbiAgICAgICAgICAgIGcoXCJcIiksIGIoWCksIHMoWCk7XG4gICAgICAgICAgfSxcbiAgICAgICAgICAuLi5CXG4gICAgICAgIH1cbiAgICAgICkgfSlcbiAgICBdIH0pLFxuICAgIE0gJiYgQSAmJiAvKiBAX19QVVJFX18gKi8gYyhYcSwgeyBjaGlsZHJlbjogLyogQF9fUFVSRV9fICovIGMoUW8sIHsgaXNFcnJvcjogITAsIGNoaWxkcmVuOiBcIkZyb20gdmFsdWUgbXVzdCBiZSBzbWFsbGVyIHRoYW4gVG8gdmFsdWVcIiB9KSB9KSxcbiAgICAvKiBAX19QVVJFX18gKi8gYyhcbiAgICAgIFZxLFxuICAgICAge1xuICAgICAgICAuLi5wLFxuICAgICAgICBpc0Rpc2FibGVkOiBvLFxuICAgICAgICB2YWx1ZTogZCxcbiAgICAgICAgZ2V0VmFsdWU6IHksXG4gICAgICAgIG1pblZhbHVlOiBpLFxuICAgICAgICBtYXhWYWx1ZTogYVxuICAgICAgfVxuICAgIClcbiAgXSB9KTtcbn1cbmNvbnN0IFhsID0gQjAoVXEpO1xuZnVuY3Rpb24gWXEoZSkge1xuICBjb25zdCB7XG4gICAgb25DbGVhckZpbHRlcjogdCxcbiAgICBpc0Rpc2FibGVkOiBvLFxuICAgIG9uQXBwbHlGaWx0ZXI6IG4sXG4gICAgdmFsdWU6IHIsXG4gICAgYnV0dG9uVGV4dDogaSxcbiAgICBzaG93RGVmYXVsdFZhbHVlOiBhLFxuICAgIC4uLnNcbiAgfSA9IGUsIGwgPSBuMChudWxsKSwgW3AsIGRdID0gaW8oITEpLCBbYiwgTV0gPSBUMShyKSwgW3UsIEFdID0gVDEoITEpLCBbeiwgZl0gPSBUMSghMCk7XG4gIFAxKCgpID0+IHtcbiAgICBNKHIpO1xuICB9LCBbcl0pO1xuICBjb25zdCBPID0gXzEoKCkgPT4ge1xuICAgIGIgJiYgKG4gJiYgbihiKSwgZCgpKTtcbiAgfSwgW24sIGQsIGJdKTtcbiAgUDEoKCkgPT4ge1xuICAgIGJbMF0gPCBiWzFdID8gZighMSkgOiBmKCEwKTtcbiAgfSwgW2JbMF0sIGJbMV1dKTtcbiAgY29uc3QgaCA9IF8xKCgpID0+IHtcbiAgICBjb25zdCBMID0gWzAsIDBdO1xuICAgIE0oTCksIG4gJiYgbihMKSwgbCAhPSBudWxsICYmIGwuY3VycmVudCAmJiBsLmN1cnJlbnQuaGFuZGxlUmVzZXQoTCksIHQgJiYgdCgpLCBkKCk7XG4gIH0sIFtdKTtcbiAgUDEoKCkgPT4ge1xuICAgIEEoXG4gICAgICBiWzBdICE9PSAwIHx8IGJbMV0gIT09IDAgfHwgclswXSAhPT0gMCB8fCByWzFdICE9PSAwXG4gICAgKTtcbiAgfSwgW3IsIGIsIHBdKTtcbiAgY29uc3QgZyA9IG0wKCgpID0+IC8qIEBfX1BVUkVfXyAqLyBjKFxuICAgIGIzLFxuICAgIHtcbiAgICAgIC4uLntcbiAgICAgICAgaXNEaXNhYmxlZDogbyxcbiAgICAgICAgaXNBY3RpdmU6IHAsXG4gICAgICAgIG9uQ2xpY2s6IGRcbiAgICAgIH0sXG4gICAgICBpc0Rpc2FibGVkOiBvLFxuICAgICAgJGlzQWN0aXZlOiBwLFxuICAgICAgb25DbGljazogZCxcbiAgICAgIGlzRmlsdGVyZWQ6ICEhKCFwICYmIHJbMF0gJiYgclsxXSksXG4gICAgICBjaGlsZHJlbjogLyogQF9fUFVSRV9fICovIGUxKEl0LCB7IGNoaWxkcmVuOiBbXG4gICAgICAgIC8qIEBfX1BVUkVfXyAqLyBjKFVlLCB7IGNoaWxkcmVuOiByWzFdICYmICFhID8gLyogQF9fUFVSRV9fICovIGUxKHZsLCB7ICRpc0FjdGl2ZTogcCwgY2hpbGRyZW46IFtcbiAgICAgICAgICByWzBdLFxuICAgICAgICAgIFwiIFwiLFxuICAgICAgICAgIC8qIEBfX1BVUkVfXyAqLyBjKEFlLCB7IGNvdW50OiAwLCBub0RpZ2l0OiAhMCB9KSxcbiAgICAgICAgICBcIiBcIixcbiAgICAgICAgICByWzFdXG4gICAgICAgIF0gfSkgOiBpIH0pLFxuICAgICAgICByWzFdID8gIXAgJiYgIWEgPyAvKiBAX19QVVJFX18gKi8gYyhkMywgeyBvbkNsaWNrOiBoLCBjaGlsZHJlbjogLyogQF9fUFVSRV9fICovIGMoWjEsIHsgbmFtZTogXCJDbG9zZVwiLCBjb2xvcjogYCR7djIuYmxhY2t9YCwgc2l6ZTogXCJ4eHNcIiB9KSB9KSA6IC8qIEBfX1BVUkVfXyAqLyBjKFxuICAgICAgICAgIFoxLFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIG5hbWU6IHAgPyBcIkNoZXZyb25VcERyb3Bkb3duXCIgOiBcIkNoZXZyb25Eb3duRHJvcGRvd25cIixcbiAgICAgICAgICAgIHNpemU6IFwieHhzXCJcbiAgICAgICAgICB9XG4gICAgICAgICkgOiAvKiBAX19QVVJFX18gKi8gYyhcbiAgICAgICAgICBaMSxcbiAgICAgICAgICB7XG4gICAgICAgICAgICBuYW1lOiBwID8gXCJDaGV2cm9uVXBEcm9wZG93blwiIDogXCJDaGV2cm9uRG93bkRyb3Bkb3duXCIsXG4gICAgICAgICAgICBzaXplOiBcInh4c1wiXG4gICAgICAgICAgfVxuICAgICAgICApXG4gICAgICBdIH0pXG4gICAgfVxuICApLCBbZCwgcCwgbywgciwgaV0pLCB2ID0gXzEoKFtMLCB5XSkgPT4ge1xuICAgIE0oW0wsIHldKTtcbiAgfSwgW10pO1xuICByZXR1cm4gLyogQF9fUFVSRV9fICovIGMoXG4gICAgRXIsXG4gICAge1xuICAgICAgLi4ucyxcbiAgICAgIGJ1dHRvbjogZyxcbiAgICAgIGlzU2hvd2VkOiBwLFxuICAgICAgaXNGaWx0ZXJWYWx1ZUNoYW5nZWQ6IHUsXG4gICAgICBvbkFwcGx5RmlsdGVyOiBPLFxuICAgICAgb25DbGVhckZpbHRlcjogaCxcbiAgICAgIGhhbmRsZURyb3Bkb3duU2hvd2VkOiBkLFxuICAgICAgaXNFbmFibGVBcHBseUJ0bjogeixcbiAgICAgIGNoaWxkcmVuOiAvKiBAX19QVVJFX18gKi8gYyhcbiAgICAgICAgWGwsXG4gICAgICAgIHtcbiAgICAgICAgICAuLi5zLFxuICAgICAgICAgIHJlZjogbCxcbiAgICAgICAgICBvbkNoYW5nZTogdixcbiAgICAgICAgICB2YWx1ZTogYixcbiAgICAgICAgICBpc1ZhbGlkYXRpb246ICEwXG4gICAgICAgIH1cbiAgICAgIClcbiAgICB9XG4gICk7XG59XG5mdW5jdGlvbiByMihlKSB7XG4gIHJldHVybiBlLnJlcGxhY2UoLyhbYS16XSkoW0EtWl0pL2csIFwiJDEgJDJcIikuc3BsaXQoLyg/PVtBLVpdKS8pLm1hcChcbiAgICAobiwgcikgPT4gciA9PT0gMCA/IG4uY2hhckF0KDApLnRvVXBwZXJDYXNlKCkgKyBuLnNsaWNlKDEpIDogbi50b0xvd2VyQ2FzZSgpXG4gICkuam9pbihcIiBcIik7XG59XG5mdW5jdGlvbiBNZShlKSB7XG4gIFwiQGJhYmVsL2hlbHBlcnMgLSB0eXBlb2ZcIjtcbiAgcmV0dXJuIE1lID0gdHlwZW9mIFN5bWJvbCA9PSBcImZ1bmN0aW9uXCIgJiYgdHlwZW9mIFN5bWJvbC5pdGVyYXRvciA9PSBcInN5bWJvbFwiID8gZnVuY3Rpb24odCkge1xuICAgIHJldHVybiB0eXBlb2YgdDtcbiAgfSA6IGZ1bmN0aW9uKHQpIHtcbiAgICByZXR1cm4gdCAmJiB0eXBlb2YgU3ltYm9sID09IFwiZnVuY3Rpb25cIiAmJiB0LmNvbnN0cnVjdG9yID09PSBTeW1ib2wgJiYgdCAhPT0gU3ltYm9sLnByb3RvdHlwZSA/IFwic3ltYm9sXCIgOiB0eXBlb2YgdDtcbiAgfSwgTWUoZSk7XG59XG5mdW5jdGlvbiB2MChlKSB7XG4gIGlmIChlID09PSBudWxsIHx8IGUgPT09ICEwIHx8IGUgPT09ICExKVxuICAgIHJldHVybiBOYU47XG4gIHZhciB0ID0gTnVtYmVyKGUpO1xuICByZXR1cm4gaXNOYU4odCkgPyB0IDogdCA8IDAgPyBNYXRoLmNlaWwodCkgOiBNYXRoLmZsb29yKHQpO1xufVxuZnVuY3Rpb24gUTEoZSwgdCkge1xuICBpZiAodC5sZW5ndGggPCBlKVxuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoZSArIFwiIGFyZ3VtZW50XCIgKyAoZSA+IDEgPyBcInNcIiA6IFwiXCIpICsgXCIgcmVxdWlyZWQsIGJ1dCBvbmx5IFwiICsgdC5sZW5ndGggKyBcIiBwcmVzZW50XCIpO1xufVxuZnVuY3Rpb24gajEoZSkge1xuICBRMSgxLCBhcmd1bWVudHMpO1xuICB2YXIgdCA9IE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChlKTtcbiAgcmV0dXJuIGUgaW5zdGFuY2VvZiBEYXRlIHx8IE1lKGUpID09PSBcIm9iamVjdFwiICYmIHQgPT09IFwiW29iamVjdCBEYXRlXVwiID8gbmV3IERhdGUoZS5nZXRUaW1lKCkpIDogdHlwZW9mIGUgPT0gXCJudW1iZXJcIiB8fCB0ID09PSBcIltvYmplY3QgTnVtYmVyXVwiID8gbmV3IERhdGUoZSkgOiAoKHR5cGVvZiBlID09IFwic3RyaW5nXCIgfHwgdCA9PT0gXCJbb2JqZWN0IFN0cmluZ11cIikgJiYgdHlwZW9mIGNvbnNvbGUgPCBcInVcIiAmJiAoY29uc29sZS53YXJuKFwiU3RhcnRpbmcgd2l0aCB2Mi4wLjAtYmV0YS4xIGRhdGUtZm5zIGRvZXNuJ3QgYWNjZXB0IHN0cmluZ3MgYXMgZGF0ZSBhcmd1bWVudHMuIFBsZWFzZSB1c2UgYHBhcnNlSVNPYCB0byBwYXJzZSBzdHJpbmdzLiBTZWU6IGh0dHBzOi8vZ2l0aHViLmNvbS9kYXRlLWZucy9kYXRlLWZucy9ibG9iL21hc3Rlci9kb2NzL3VwZ3JhZGVHdWlkZS5tZCNzdHJpbmctYXJndW1lbnRzXCIpLCBjb25zb2xlLndhcm4obmV3IEVycm9yKCkuc3RhY2spKSwgLyogQF9fUFVSRV9fICovIG5ldyBEYXRlKE5hTikpO1xufVxuZnVuY3Rpb24gYW8oZSwgdCkge1xuICBRMSgyLCBhcmd1bWVudHMpO1xuICB2YXIgbyA9IGoxKGUpLCBuID0gdjAodCk7XG4gIHJldHVybiBpc05hTihuKSA/IC8qIEBfX1BVUkVfXyAqLyBuZXcgRGF0ZShOYU4pIDogKG4gJiYgby5zZXREYXRlKG8uZ2V0RGF0ZSgpICsgbiksIG8pO1xufVxuZnVuY3Rpb24gdmUoZSwgdCkge1xuICBRMSgyLCBhcmd1bWVudHMpO1xuICB2YXIgbyA9IGoxKGUpLCBuID0gdjAodCk7XG4gIGlmIChpc05hTihuKSlcbiAgICByZXR1cm4gLyogQF9fUFVSRV9fICovIG5ldyBEYXRlKE5hTik7XG4gIGlmICghbilcbiAgICByZXR1cm4gbztcbiAgdmFyIHIgPSBvLmdldERhdGUoKSwgaSA9IG5ldyBEYXRlKG8uZ2V0VGltZSgpKTtcbiAgaS5zZXRNb250aChvLmdldE1vbnRoKCkgKyBuICsgMSwgMCk7XG4gIHZhciBhID0gaS5nZXREYXRlKCk7XG4gIHJldHVybiByID49IGEgPyBpIDogKG8uc2V0RnVsbFllYXIoaS5nZXRGdWxsWWVhcigpLCBpLmdldE1vbnRoKCksIHIpLCBvKTtcbn1cbmZ1bmN0aW9uICQ1KGUsIHQpIHtcbiAgUTEoMiwgYXJndW1lbnRzKTtcbiAgdmFyIG8gPSBqMShlKS5nZXRUaW1lKCksIG4gPSB2MCh0KTtcbiAgcmV0dXJuIG5ldyBEYXRlKG8gKyBuKTtcbn1cbnZhciBHcSA9IDM2ZTU7XG5mdW5jdGlvbiBRcShlLCB0KSB7XG4gIFExKDIsIGFyZ3VtZW50cyk7XG4gIHZhciBvID0gdjAodCk7XG4gIHJldHVybiAkNShlLCBvICogR3EpO1xufVxudmFyIFpxID0ge307XG5mdW5jdGlvbiBYdCgpIHtcbiAgcmV0dXJuIFpxO1xufVxuZnVuY3Rpb24gVWwoZSwgdCkge1xuICB2YXIgbywgbiwgciwgaSwgYSwgcywgbCwgcDtcbiAgUTEoMSwgYXJndW1lbnRzKTtcbiAgdmFyIGQgPSBYdCgpLCBiID0gdjAoKG8gPSAobiA9IChyID0gKGkgPSB0ID09IG51bGwgPyB2b2lkIDAgOiB0LndlZWtTdGFydHNPbikgIT09IG51bGwgJiYgaSAhPT0gdm9pZCAwID8gaSA6IHQgPT0gbnVsbCB8fCAoYSA9IHQubG9jYWxlKSA9PT0gbnVsbCB8fCBhID09PSB2b2lkIDAgfHwgKHMgPSBhLm9wdGlvbnMpID09PSBudWxsIHx8IHMgPT09IHZvaWQgMCA/IHZvaWQgMCA6IHMud2Vla1N0YXJ0c09uKSAhPT0gbnVsbCAmJiByICE9PSB2b2lkIDAgPyByIDogZC53ZWVrU3RhcnRzT24pICE9PSBudWxsICYmIG4gIT09IHZvaWQgMCA/IG4gOiAobCA9IGQubG9jYWxlKSA9PT0gbnVsbCB8fCBsID09PSB2b2lkIDAgfHwgKHAgPSBsLm9wdGlvbnMpID09PSBudWxsIHx8IHAgPT09IHZvaWQgMCA/IHZvaWQgMCA6IHAud2Vla1N0YXJ0c09uKSAhPT0gbnVsbCAmJiBvICE9PSB2b2lkIDAgPyBvIDogMCk7XG4gIGlmICghKGIgPj0gMCAmJiBiIDw9IDYpKVxuICAgIHRocm93IG5ldyBSYW5nZUVycm9yKFwid2Vla1N0YXJ0c09uIG11c3QgYmUgYmV0d2VlbiAwIGFuZCA2IGluY2x1c2l2ZWx5XCIpO1xuICB2YXIgTSA9IGoxKGUpLCB1ID0gTS5nZXREYXkoKSwgQSA9ICh1IDwgYiA/IDcgOiAwKSArIHUgLSBiO1xuICByZXR1cm4gTS5zZXREYXRlKE0uZ2V0RGF0ZSgpIC0gQSksIE0uc2V0SG91cnMoMCwgMCwgMCwgMCksIE07XG59XG5mdW5jdGlvbiBjNChlKSB7XG4gIHJldHVybiBRMSgxLCBhcmd1bWVudHMpLCBVbChlLCB7XG4gICAgd2Vla1N0YXJ0c09uOiAxXG4gIH0pO1xufVxuZnVuY3Rpb24ganEoZSkge1xuICBRMSgxLCBhcmd1bWVudHMpO1xuICB2YXIgdCA9IGoxKGUpLCBvID0gdC5nZXRGdWxsWWVhcigpLCBuID0gLyogQF9fUFVSRV9fICovIG5ldyBEYXRlKDApO1xuICBuLnNldEZ1bGxZZWFyKG8gKyAxLCAwLCA0KSwgbi5zZXRIb3VycygwLCAwLCAwLCAwKTtcbiAgdmFyIHIgPSBjNChuKSwgaSA9IC8qIEBfX1BVUkVfXyAqLyBuZXcgRGF0ZSgwKTtcbiAgaS5zZXRGdWxsWWVhcihvLCAwLCA0KSwgaS5zZXRIb3VycygwLCAwLCAwLCAwKTtcbiAgdmFyIGEgPSBjNChpKTtcbiAgcmV0dXJuIHQuZ2V0VGltZSgpID49IHIuZ2V0VGltZSgpID8gbyArIDEgOiB0LmdldFRpbWUoKSA+PSBhLmdldFRpbWUoKSA/IG8gOiBvIC0gMTtcbn1cbmZ1bmN0aW9uIEtxKGUpIHtcbiAgUTEoMSwgYXJndW1lbnRzKTtcbiAgdmFyIHQgPSBqcShlKSwgbyA9IC8qIEBfX1BVUkVfXyAqLyBuZXcgRGF0ZSgwKTtcbiAgby5zZXRGdWxsWWVhcih0LCAwLCA0KSwgby5zZXRIb3VycygwLCAwLCAwLCAwKTtcbiAgdmFyIG4gPSBjNChvKTtcbiAgcmV0dXJuIG47XG59XG5mdW5jdGlvbiBqMyhlKSB7XG4gIHZhciB0ID0gbmV3IERhdGUoRGF0ZS5VVEMoZS5nZXRGdWxsWWVhcigpLCBlLmdldE1vbnRoKCksIGUuZ2V0RGF0ZSgpLCBlLmdldEhvdXJzKCksIGUuZ2V0TWludXRlcygpLCBlLmdldFNlY29uZHMoKSwgZS5nZXRNaWxsaXNlY29uZHMoKSkpO1xuICByZXR1cm4gdC5zZXRVVENGdWxsWWVhcihlLmdldEZ1bGxZZWFyKCkpLCBlLmdldFRpbWUoKSAtIHQuZ2V0VGltZSgpO1xufVxuZnVuY3Rpb24gVmUoZSkge1xuICBRMSgxLCBhcmd1bWVudHMpO1xuICB2YXIgdCA9IGoxKGUpO1xuICByZXR1cm4gdC5zZXRIb3VycygwLCAwLCAwLCAwKSwgdDtcbn1cbnZhciBKcSA9IDg2NGU1O1xuZnVuY3Rpb24gbDQoZSwgdCkge1xuICBRMSgyLCBhcmd1bWVudHMpO1xuICB2YXIgbyA9IFZlKGUpLCBuID0gVmUodCksIHIgPSBvLmdldFRpbWUoKSAtIGozKG8pLCBpID0gbi5nZXRUaW1lKCkgLSBqMyhuKTtcbiAgcmV0dXJuIE1hdGgucm91bmQoKHIgLSBpKSAvIEpxKTtcbn1cbnZhciBfcSA9IDZlNDtcbmZ1bmN0aW9uIFVhKGUsIHQpIHtcbiAgUTEoMiwgYXJndW1lbnRzKTtcbiAgdmFyIG8gPSB2MCh0KTtcbiAgcmV0dXJuICQ1KGUsIG8gKiBfcSk7XG59XG5mdW5jdGlvbiBZbChlLCB0KSB7XG4gIFExKDIsIGFyZ3VtZW50cyk7XG4gIHZhciBvID0gdjAodCksIG4gPSBvICogMztcbiAgcmV0dXJuIHZlKGUsIG4pO1xufVxuZnVuY3Rpb24gcDQoZSwgdCkge1xuICBRMSgyLCBhcmd1bWVudHMpO1xuICB2YXIgbyA9IHYwKHQpLCBuID0gbyAqIDc7XG4gIHJldHVybiBhbyhlLCBuKTtcbn1cbmZ1bmN0aW9uIEszKGUsIHQpIHtcbiAgUTEoMiwgYXJndW1lbnRzKTtcbiAgdmFyIG8gPSB2MCh0KTtcbiAgcmV0dXJuIHZlKGUsIG8gKiAxMik7XG59XG5mdW5jdGlvbiBTOChlKSB7XG4gIFExKDEsIGFyZ3VtZW50cyk7XG4gIHZhciB0O1xuICBpZiAoZSAmJiB0eXBlb2YgZS5mb3JFYWNoID09IFwiZnVuY3Rpb25cIilcbiAgICB0ID0gZTtcbiAgZWxzZSBpZiAoTWUoZSkgPT09IFwib2JqZWN0XCIgJiYgZSAhPT0gbnVsbClcbiAgICB0ID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoZSk7XG4gIGVsc2VcbiAgICByZXR1cm4gLyogQF9fUFVSRV9fICovIG5ldyBEYXRlKE5hTik7XG4gIHZhciBvO1xuICByZXR1cm4gdC5mb3JFYWNoKGZ1bmN0aW9uKG4pIHtcbiAgICB2YXIgciA9IGoxKG4pO1xuICAgIChvID09PSB2b2lkIDAgfHwgbyA8IHIgfHwgaXNOYU4oTnVtYmVyKHIpKSkgJiYgKG8gPSByKTtcbiAgfSksIG8gfHwgLyogQF9fUFVSRV9fICovIG5ldyBEYXRlKE5hTik7XG59XG5mdW5jdGlvbiBFOChlKSB7XG4gIFExKDEsIGFyZ3VtZW50cyk7XG4gIHZhciB0O1xuICBpZiAoZSAmJiB0eXBlb2YgZS5mb3JFYWNoID09IFwiZnVuY3Rpb25cIilcbiAgICB0ID0gZTtcbiAgZWxzZSBpZiAoTWUoZSkgPT09IFwib2JqZWN0XCIgJiYgZSAhPT0gbnVsbClcbiAgICB0ID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoZSk7XG4gIGVsc2VcbiAgICByZXR1cm4gLyogQF9fUFVSRV9fICovIG5ldyBEYXRlKE5hTik7XG4gIHZhciBvO1xuICByZXR1cm4gdC5mb3JFYWNoKGZ1bmN0aW9uKG4pIHtcbiAgICB2YXIgciA9IGoxKG4pO1xuICAgIChvID09PSB2b2lkIDAgfHwgbyA+IHIgfHwgaXNOYU4oci5nZXREYXRlKCkpKSAmJiAobyA9IHIpO1xuICB9KSwgbyB8fCAvKiBAX19QVVJFX18gKi8gbmV3IERhdGUoTmFOKTtcbn1cbmZ1bmN0aW9uIEhuKGUsIHQpIHtcbiAgUTEoMiwgYXJndW1lbnRzKTtcbiAgdmFyIG8gPSBqMShlKSwgbiA9IGoxKHQpLCByID0gby5nZXRUaW1lKCkgLSBuLmdldFRpbWUoKTtcbiAgcmV0dXJuIHIgPCAwID8gLTEgOiByID4gMCA/IDEgOiByO1xufVxudmFyIGU2ID0gNmU0LCB0NiA9IDM2ZTUsICRxID0gMWUzO1xuZnVuY3Rpb24gZXkoZSwgdCkge1xuICBRMSgyLCBhcmd1bWVudHMpO1xuICB2YXIgbyA9IFZlKGUpLCBuID0gVmUodCk7XG4gIHJldHVybiBvLmdldFRpbWUoKSA9PT0gbi5nZXRUaW1lKCk7XG59XG5mdW5jdGlvbiBGNChlKSB7XG4gIHJldHVybiBRMSgxLCBhcmd1bWVudHMpLCBlIGluc3RhbmNlb2YgRGF0ZSB8fCBNZShlKSA9PT0gXCJvYmplY3RcIiAmJiBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoZSkgPT09IFwiW29iamVjdCBEYXRlXVwiO1xufVxuZnVuY3Rpb24gbHIoZSkge1xuICBpZiAoUTEoMSwgYXJndW1lbnRzKSwgIUY0KGUpICYmIHR5cGVvZiBlICE9IFwibnVtYmVyXCIpXG4gICAgcmV0dXJuICExO1xuICB2YXIgdCA9IGoxKGUpO1xuICByZXR1cm4gIWlzTmFOKE51bWJlcih0KSk7XG59XG5mdW5jdGlvbiBwcihlLCB0KSB7XG4gIFExKDIsIGFyZ3VtZW50cyk7XG4gIHZhciBvID0gajEoZSksIG4gPSBqMSh0KSwgciA9IG8uZ2V0RnVsbFllYXIoKSAtIG4uZ2V0RnVsbFllYXIoKSwgaSA9IG8uZ2V0TW9udGgoKSAtIG4uZ2V0TW9udGgoKTtcbiAgcmV0dXJuIHIgKiAxMiArIGk7XG59XG5mdW5jdGlvbiBTMyhlKSB7XG4gIFExKDEsIGFyZ3VtZW50cyk7XG4gIHZhciB0ID0gajEoZSksIG8gPSBNYXRoLmZsb29yKHQuZ2V0TW9udGgoKSAvIDMpICsgMTtcbiAgcmV0dXJuIG87XG59XG5mdW5jdGlvbiBkNChlLCB0KSB7XG4gIFExKDIsIGFyZ3VtZW50cyk7XG4gIHZhciBvID0gajEoZSksIG4gPSBqMSh0KTtcbiAgcmV0dXJuIG8uZ2V0RnVsbFllYXIoKSAtIG4uZ2V0RnVsbFllYXIoKTtcbn1cbmZ1bmN0aW9uIHR5KGUsIHQpIHtcbiAgcmV0dXJuIFExKDIsIGFyZ3VtZW50cyksIGoxKGUpLmdldFRpbWUoKSAtIGoxKHQpLmdldFRpbWUoKTtcbn1cbnZhciBrOCA9IHtcbiAgY2VpbDogTWF0aC5jZWlsLFxuICByb3VuZDogTWF0aC5yb3VuZCxcbiAgZmxvb3I6IE1hdGguZmxvb3IsXG4gIHRydW5jOiBmdW5jdGlvbih0KSB7XG4gICAgcmV0dXJuIHQgPCAwID8gTWF0aC5jZWlsKHQpIDogTWF0aC5mbG9vcih0KTtcbiAgfVxuICAvLyBNYXRoLnRydW5jIGlzIG5vdCBzdXBwb3J0ZWQgYnkgSUVcbn0sIG95ID0gXCJ0cnVuY1wiO1xuZnVuY3Rpb24gcnkoZSkge1xuICByZXR1cm4gZSA/IGs4W2VdIDogazhbb3ldO1xufVxuZnVuY3Rpb24gYjQoZSkge1xuICBRMSgxLCBhcmd1bWVudHMpO1xuICB2YXIgdCA9IGoxKGUpO1xuICByZXR1cm4gdC5zZXRIb3VycygyMywgNTksIDU5LCA5OTkpLCB0O1xufVxuZnVuY3Rpb24gR2woZSkge1xuICBRMSgxLCBhcmd1bWVudHMpO1xuICB2YXIgdCA9IGoxKGUpLCBvID0gdC5nZXRNb250aCgpO1xuICByZXR1cm4gdC5zZXRGdWxsWWVhcih0LmdldEZ1bGxZZWFyKCksIG8gKyAxLCAwKSwgdC5zZXRIb3VycygyMywgNTksIDU5LCA5OTkpLCB0O1xufVxuZnVuY3Rpb24gbnkoZSkge1xuICBRMSgxLCBhcmd1bWVudHMpO1xuICB2YXIgdCA9IGoxKGUpO1xuICByZXR1cm4gYjQodCkuZ2V0VGltZSgpID09PSBHbCh0KS5nZXRUaW1lKCk7XG59XG5mdW5jdGlvbiBpeShlLCB0KSB7XG4gIFExKDIsIGFyZ3VtZW50cyk7XG4gIHZhciBvID0gajEoZSksIG4gPSBqMSh0KSwgciA9IEhuKG8sIG4pLCBpID0gTWF0aC5hYnMocHIobywgbikpLCBhO1xuICBpZiAoaSA8IDEpXG4gICAgYSA9IDA7XG4gIGVsc2Uge1xuICAgIG8uZ2V0TW9udGgoKSA9PT0gMSAmJiBvLmdldERhdGUoKSA+IDI3ICYmIG8uc2V0RGF0ZSgzMCksIG8uc2V0TW9udGgoby5nZXRNb250aCgpIC0gciAqIGkpO1xuICAgIHZhciBzID0gSG4obywgbikgPT09IC1yO1xuICAgIG55KGoxKGUpKSAmJiBpID09PSAxICYmIEhuKGUsIG4pID09PSAxICYmIChzID0gITEpLCBhID0gciAqIChpIC0gTnVtYmVyKHMpKTtcbiAgfVxuICByZXR1cm4gYSA9PT0gMCA/IDAgOiBhO1xufVxuZnVuY3Rpb24gYXkoZSwgdCwgbykge1xuICBRMSgyLCBhcmd1bWVudHMpO1xuICB2YXIgbiA9IHR5KGUsIHQpIC8gMWUzO1xuICByZXR1cm4gcnkobyA9PSBudWxsID8gdm9pZCAwIDogby5yb3VuZGluZ01ldGhvZCkobik7XG59XG5mdW5jdGlvbiBZYShlKSB7XG4gIFExKDEsIGFyZ3VtZW50cyk7XG4gIHZhciB0ID0gajEoZSksIG8gPSB0LmdldE1vbnRoKCksIG4gPSBvIC0gbyAlIDM7XG4gIHJldHVybiB0LnNldE1vbnRoKG4sIDEpLCB0LnNldEhvdXJzKDAsIDAsIDAsIDApLCB0O1xufVxuZnVuY3Rpb24gUWwoZSkge1xuICBRMSgxLCBhcmd1bWVudHMpO1xuICB2YXIgdCA9IGoxKGUpO1xuICByZXR1cm4gdC5zZXREYXRlKDEpLCB0LnNldEhvdXJzKDAsIDAsIDAsIDApLCB0O1xufVxuZnVuY3Rpb24gc3koZSkge1xuICBRMSgxLCBhcmd1bWVudHMpO1xuICB2YXIgdCA9IGoxKGUpLCBvID0gdC5nZXRGdWxsWWVhcigpO1xuICByZXR1cm4gdC5zZXRGdWxsWWVhcihvICsgMSwgMCwgMCksIHQuc2V0SG91cnMoMjMsIDU5LCA1OSwgOTk5KSwgdDtcbn1cbmZ1bmN0aW9uIFpsKGUpIHtcbiAgUTEoMSwgYXJndW1lbnRzKTtcbiAgdmFyIHQgPSBqMShlKSwgbyA9IC8qIEBfX1BVUkVfXyAqLyBuZXcgRGF0ZSgwKTtcbiAgcmV0dXJuIG8uc2V0RnVsbFllYXIodC5nZXRGdWxsWWVhcigpLCAwLCAxKSwgby5zZXRIb3VycygwLCAwLCAwLCAwKSwgbztcbn1cbmZ1bmN0aW9uIGpsKGUsIHQpIHtcbiAgUTEoMiwgYXJndW1lbnRzKTtcbiAgdmFyIG8gPSB2MCh0KTtcbiAgcmV0dXJuICQ1KGUsIC1vKTtcbn1cbnZhciBjeSA9IDg2NGU1O1xuZnVuY3Rpb24gbHkoZSkge1xuICBRMSgxLCBhcmd1bWVudHMpO1xuICB2YXIgdCA9IGoxKGUpLCBvID0gdC5nZXRUaW1lKCk7XG4gIHQuc2V0VVRDTW9udGgoMCwgMSksIHQuc2V0VVRDSG91cnMoMCwgMCwgMCwgMCk7XG4gIHZhciBuID0gdC5nZXRUaW1lKCksIHIgPSBvIC0gbjtcbiAgcmV0dXJuIE1hdGguZmxvb3IociAvIGN5KSArIDE7XG59XG5mdW5jdGlvbiBKMyhlKSB7XG4gIFExKDEsIGFyZ3VtZW50cyk7XG4gIHZhciB0ID0gMSwgbyA9IGoxKGUpLCBuID0gby5nZXRVVENEYXkoKSwgciA9IChuIDwgdCA/IDcgOiAwKSArIG4gLSB0O1xuICByZXR1cm4gby5zZXRVVENEYXRlKG8uZ2V0VVRDRGF0ZSgpIC0gciksIG8uc2V0VVRDSG91cnMoMCwgMCwgMCwgMCksIG87XG59XG5mdW5jdGlvbiBLbChlKSB7XG4gIFExKDEsIGFyZ3VtZW50cyk7XG4gIHZhciB0ID0gajEoZSksIG8gPSB0LmdldFVUQ0Z1bGxZZWFyKCksIG4gPSAvKiBAX19QVVJFX18gKi8gbmV3IERhdGUoMCk7XG4gIG4uc2V0VVRDRnVsbFllYXIobyArIDEsIDAsIDQpLCBuLnNldFVUQ0hvdXJzKDAsIDAsIDAsIDApO1xuICB2YXIgciA9IEozKG4pLCBpID0gLyogQF9fUFVSRV9fICovIG5ldyBEYXRlKDApO1xuICBpLnNldFVUQ0Z1bGxZZWFyKG8sIDAsIDQpLCBpLnNldFVUQ0hvdXJzKDAsIDAsIDAsIDApO1xuICB2YXIgYSA9IEozKGkpO1xuICByZXR1cm4gdC5nZXRUaW1lKCkgPj0gci5nZXRUaW1lKCkgPyBvICsgMSA6IHQuZ2V0VGltZSgpID49IGEuZ2V0VGltZSgpID8gbyA6IG8gLSAxO1xufVxuZnVuY3Rpb24gcHkoZSkge1xuICBRMSgxLCBhcmd1bWVudHMpO1xuICB2YXIgdCA9IEtsKGUpLCBvID0gLyogQF9fUFVSRV9fICovIG5ldyBEYXRlKDApO1xuICBvLnNldFVUQ0Z1bGxZZWFyKHQsIDAsIDQpLCBvLnNldFVUQ0hvdXJzKDAsIDAsIDAsIDApO1xuICB2YXIgbiA9IEozKG8pO1xuICByZXR1cm4gbjtcbn1cbnZhciBkeSA9IDYwNDhlNTtcbmZ1bmN0aW9uIEpsKGUpIHtcbiAgUTEoMSwgYXJndW1lbnRzKTtcbiAgdmFyIHQgPSBqMShlKSwgbyA9IEozKHQpLmdldFRpbWUoKSAtIHB5KHQpLmdldFRpbWUoKTtcbiAgcmV0dXJuIE1hdGgucm91bmQobyAvIGR5KSArIDE7XG59XG5mdW5jdGlvbiB1MyhlLCB0KSB7XG4gIHZhciBvLCBuLCByLCBpLCBhLCBzLCBsLCBwO1xuICBRMSgxLCBhcmd1bWVudHMpO1xuICB2YXIgZCA9IFh0KCksIGIgPSB2MCgobyA9IChuID0gKHIgPSAoaSA9IHQgPT0gbnVsbCA/IHZvaWQgMCA6IHQud2Vla1N0YXJ0c09uKSAhPT0gbnVsbCAmJiBpICE9PSB2b2lkIDAgPyBpIDogdCA9PSBudWxsIHx8IChhID0gdC5sb2NhbGUpID09PSBudWxsIHx8IGEgPT09IHZvaWQgMCB8fCAocyA9IGEub3B0aW9ucykgPT09IG51bGwgfHwgcyA9PT0gdm9pZCAwID8gdm9pZCAwIDogcy53ZWVrU3RhcnRzT24pICE9PSBudWxsICYmIHIgIT09IHZvaWQgMCA/IHIgOiBkLndlZWtTdGFydHNPbikgIT09IG51bGwgJiYgbiAhPT0gdm9pZCAwID8gbiA6IChsID0gZC5sb2NhbGUpID09PSBudWxsIHx8IGwgPT09IHZvaWQgMCB8fCAocCA9IGwub3B0aW9ucykgPT09IG51bGwgfHwgcCA9PT0gdm9pZCAwID8gdm9pZCAwIDogcC53ZWVrU3RhcnRzT24pICE9PSBudWxsICYmIG8gIT09IHZvaWQgMCA/IG8gOiAwKTtcbiAgaWYgKCEoYiA+PSAwICYmIGIgPD0gNikpXG4gICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoXCJ3ZWVrU3RhcnRzT24gbXVzdCBiZSBiZXR3ZWVuIDAgYW5kIDYgaW5jbHVzaXZlbHlcIik7XG4gIHZhciBNID0gajEoZSksIHUgPSBNLmdldFVUQ0RheSgpLCBBID0gKHUgPCBiID8gNyA6IDApICsgdSAtIGI7XG4gIHJldHVybiBNLnNldFVUQ0RhdGUoTS5nZXRVVENEYXRlKCkgLSBBKSwgTS5zZXRVVENIb3VycygwLCAwLCAwLCAwKSwgTTtcbn1cbmZ1bmN0aW9uIG82KGUsIHQpIHtcbiAgdmFyIG8sIG4sIHIsIGksIGEsIHMsIGwsIHA7XG4gIFExKDEsIGFyZ3VtZW50cyk7XG4gIHZhciBkID0gajEoZSksIGIgPSBkLmdldFVUQ0Z1bGxZZWFyKCksIE0gPSBYdCgpLCB1ID0gdjAoKG8gPSAobiA9IChyID0gKGkgPSB0ID09IG51bGwgPyB2b2lkIDAgOiB0LmZpcnN0V2Vla0NvbnRhaW5zRGF0ZSkgIT09IG51bGwgJiYgaSAhPT0gdm9pZCAwID8gaSA6IHQgPT0gbnVsbCB8fCAoYSA9IHQubG9jYWxlKSA9PT0gbnVsbCB8fCBhID09PSB2b2lkIDAgfHwgKHMgPSBhLm9wdGlvbnMpID09PSBudWxsIHx8IHMgPT09IHZvaWQgMCA/IHZvaWQgMCA6IHMuZmlyc3RXZWVrQ29udGFpbnNEYXRlKSAhPT0gbnVsbCAmJiByICE9PSB2b2lkIDAgPyByIDogTS5maXJzdFdlZWtDb250YWluc0RhdGUpICE9PSBudWxsICYmIG4gIT09IHZvaWQgMCA/IG4gOiAobCA9IE0ubG9jYWxlKSA9PT0gbnVsbCB8fCBsID09PSB2b2lkIDAgfHwgKHAgPSBsLm9wdGlvbnMpID09PSBudWxsIHx8IHAgPT09IHZvaWQgMCA/IHZvaWQgMCA6IHAuZmlyc3RXZWVrQ29udGFpbnNEYXRlKSAhPT0gbnVsbCAmJiBvICE9PSB2b2lkIDAgPyBvIDogMSk7XG4gIGlmICghKHUgPj0gMSAmJiB1IDw9IDcpKVxuICAgIHRocm93IG5ldyBSYW5nZUVycm9yKFwiZmlyc3RXZWVrQ29udGFpbnNEYXRlIG11c3QgYmUgYmV0d2VlbiAxIGFuZCA3IGluY2x1c2l2ZWx5XCIpO1xuICB2YXIgQSA9IC8qIEBfX1BVUkVfXyAqLyBuZXcgRGF0ZSgwKTtcbiAgQS5zZXRVVENGdWxsWWVhcihiICsgMSwgMCwgdSksIEEuc2V0VVRDSG91cnMoMCwgMCwgMCwgMCk7XG4gIHZhciB6ID0gdTMoQSwgdCksIGYgPSAvKiBAX19QVVJFX18gKi8gbmV3IERhdGUoMCk7XG4gIGYuc2V0VVRDRnVsbFllYXIoYiwgMCwgdSksIGYuc2V0VVRDSG91cnMoMCwgMCwgMCwgMCk7XG4gIHZhciBPID0gdTMoZiwgdCk7XG4gIHJldHVybiBkLmdldFRpbWUoKSA+PSB6LmdldFRpbWUoKSA/IGIgKyAxIDogZC5nZXRUaW1lKCkgPj0gTy5nZXRUaW1lKCkgPyBiIDogYiAtIDE7XG59XG5mdW5jdGlvbiBieShlLCB0KSB7XG4gIHZhciBvLCBuLCByLCBpLCBhLCBzLCBsLCBwO1xuICBRMSgxLCBhcmd1bWVudHMpO1xuICB2YXIgZCA9IFh0KCksIGIgPSB2MCgobyA9IChuID0gKHIgPSAoaSA9IHQgPT0gbnVsbCA/IHZvaWQgMCA6IHQuZmlyc3RXZWVrQ29udGFpbnNEYXRlKSAhPT0gbnVsbCAmJiBpICE9PSB2b2lkIDAgPyBpIDogdCA9PSBudWxsIHx8IChhID0gdC5sb2NhbGUpID09PSBudWxsIHx8IGEgPT09IHZvaWQgMCB8fCAocyA9IGEub3B0aW9ucykgPT09IG51bGwgfHwgcyA9PT0gdm9pZCAwID8gdm9pZCAwIDogcy5maXJzdFdlZWtDb250YWluc0RhdGUpICE9PSBudWxsICYmIHIgIT09IHZvaWQgMCA/IHIgOiBkLmZpcnN0V2Vla0NvbnRhaW5zRGF0ZSkgIT09IG51bGwgJiYgbiAhPT0gdm9pZCAwID8gbiA6IChsID0gZC5sb2NhbGUpID09PSBudWxsIHx8IGwgPT09IHZvaWQgMCB8fCAocCA9IGwub3B0aW9ucykgPT09IG51bGwgfHwgcCA9PT0gdm9pZCAwID8gdm9pZCAwIDogcC5maXJzdFdlZWtDb250YWluc0RhdGUpICE9PSBudWxsICYmIG8gIT09IHZvaWQgMCA/IG8gOiAxKSwgTSA9IG82KGUsIHQpLCB1ID0gLyogQF9fUFVSRV9fICovIG5ldyBEYXRlKDApO1xuICB1LnNldFVUQ0Z1bGxZZWFyKE0sIDAsIGIpLCB1LnNldFVUQ0hvdXJzKDAsIDAsIDAsIDApO1xuICB2YXIgQSA9IHUzKHUsIHQpO1xuICByZXR1cm4gQTtcbn1cbnZhciBNeSA9IDYwNDhlNTtcbmZ1bmN0aW9uIF9sKGUsIHQpIHtcbiAgUTEoMSwgYXJndW1lbnRzKTtcbiAgdmFyIG8gPSBqMShlKSwgbiA9IHUzKG8sIHQpLmdldFRpbWUoKSAtIGJ5KG8sIHQpLmdldFRpbWUoKTtcbiAgcmV0dXJuIE1hdGgucm91bmQobiAvIE15KSArIDE7XG59XG5mdW5jdGlvbiBQMChlLCB0KSB7XG4gIGZvciAodmFyIG8gPSBlIDwgMCA/IFwiLVwiIDogXCJcIiwgbiA9IE1hdGguYWJzKGUpLnRvU3RyaW5nKCk7IG4ubGVuZ3RoIDwgdDsgKVxuICAgIG4gPSBcIjBcIiArIG47XG4gIHJldHVybiBvICsgbjtcbn1cbnZhciBBeSA9IHtcbiAgLy8gWWVhclxuICB5OiBmdW5jdGlvbih0LCBvKSB7XG4gICAgdmFyIG4gPSB0LmdldFVUQ0Z1bGxZZWFyKCksIHIgPSBuID4gMCA/IG4gOiAxIC0gbjtcbiAgICByZXR1cm4gUDAobyA9PT0gXCJ5eVwiID8gciAlIDEwMCA6IHIsIG8ubGVuZ3RoKTtcbiAgfSxcbiAgLy8gTW9udGhcbiAgTTogZnVuY3Rpb24odCwgbykge1xuICAgIHZhciBuID0gdC5nZXRVVENNb250aCgpO1xuICAgIHJldHVybiBvID09PSBcIk1cIiA/IFN0cmluZyhuICsgMSkgOiBQMChuICsgMSwgMik7XG4gIH0sXG4gIC8vIERheSBvZiB0aGUgbW9udGhcbiAgZDogZnVuY3Rpb24odCwgbykge1xuICAgIHJldHVybiBQMCh0LmdldFVUQ0RhdGUoKSwgby5sZW5ndGgpO1xuICB9LFxuICAvLyBBTSBvciBQTVxuICBhOiBmdW5jdGlvbih0LCBvKSB7XG4gICAgdmFyIG4gPSB0LmdldFVUQ0hvdXJzKCkgLyAxMiA+PSAxID8gXCJwbVwiIDogXCJhbVwiO1xuICAgIHN3aXRjaCAobykge1xuICAgICAgY2FzZSBcImFcIjpcbiAgICAgIGNhc2UgXCJhYVwiOlxuICAgICAgICByZXR1cm4gbi50b1VwcGVyQ2FzZSgpO1xuICAgICAgY2FzZSBcImFhYVwiOlxuICAgICAgICByZXR1cm4gbjtcbiAgICAgIGNhc2UgXCJhYWFhYVwiOlxuICAgICAgICByZXR1cm4gblswXTtcbiAgICAgIGNhc2UgXCJhYWFhXCI6XG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm4gbiA9PT0gXCJhbVwiID8gXCJhLm0uXCIgOiBcInAubS5cIjtcbiAgICB9XG4gIH0sXG4gIC8vIEhvdXIgWzEtMTJdXG4gIGg6IGZ1bmN0aW9uKHQsIG8pIHtcbiAgICByZXR1cm4gUDAodC5nZXRVVENIb3VycygpICUgMTIgfHwgMTIsIG8ubGVuZ3RoKTtcbiAgfSxcbiAgLy8gSG91ciBbMC0yM11cbiAgSDogZnVuY3Rpb24odCwgbykge1xuICAgIHJldHVybiBQMCh0LmdldFVUQ0hvdXJzKCksIG8ubGVuZ3RoKTtcbiAgfSxcbiAgLy8gTWludXRlXG4gIG06IGZ1bmN0aW9uKHQsIG8pIHtcbiAgICByZXR1cm4gUDAodC5nZXRVVENNaW51dGVzKCksIG8ubGVuZ3RoKTtcbiAgfSxcbiAgLy8gU2Vjb25kXG4gIHM6IGZ1bmN0aW9uKHQsIG8pIHtcbiAgICByZXR1cm4gUDAodC5nZXRVVENTZWNvbmRzKCksIG8ubGVuZ3RoKTtcbiAgfSxcbiAgLy8gRnJhY3Rpb24gb2Ygc2Vjb25kXG4gIFM6IGZ1bmN0aW9uKHQsIG8pIHtcbiAgICB2YXIgbiA9IG8ubGVuZ3RoLCByID0gdC5nZXRVVENNaWxsaXNlY29uZHMoKSwgaSA9IE1hdGguZmxvb3IociAqIE1hdGgucG93KDEwLCBuIC0gMykpO1xuICAgIHJldHVybiBQMChpLCBvLmxlbmd0aCk7XG4gIH1cbn07XG5jb25zdCBDdCA9IEF5O1xudmFyIEwzID0ge1xuICBhbTogXCJhbVwiLFxuICBwbTogXCJwbVwiLFxuICBtaWRuaWdodDogXCJtaWRuaWdodFwiLFxuICBub29uOiBcIm5vb25cIixcbiAgbW9ybmluZzogXCJtb3JuaW5nXCIsXG4gIGFmdGVybm9vbjogXCJhZnRlcm5vb25cIixcbiAgZXZlbmluZzogXCJldmVuaW5nXCIsXG4gIG5pZ2h0OiBcIm5pZ2h0XCJcbn0sIHV5ID0ge1xuICAvLyBFcmFcbiAgRzogZnVuY3Rpb24odCwgbywgbikge1xuICAgIHZhciByID0gdC5nZXRVVENGdWxsWWVhcigpID4gMCA/IDEgOiAwO1xuICAgIHN3aXRjaCAobykge1xuICAgICAgY2FzZSBcIkdcIjpcbiAgICAgIGNhc2UgXCJHR1wiOlxuICAgICAgY2FzZSBcIkdHR1wiOlxuICAgICAgICByZXR1cm4gbi5lcmEociwge1xuICAgICAgICAgIHdpZHRoOiBcImFiYnJldmlhdGVkXCJcbiAgICAgICAgfSk7XG4gICAgICBjYXNlIFwiR0dHR0dcIjpcbiAgICAgICAgcmV0dXJuIG4uZXJhKHIsIHtcbiAgICAgICAgICB3aWR0aDogXCJuYXJyb3dcIlxuICAgICAgICB9KTtcbiAgICAgIGNhc2UgXCJHR0dHXCI6XG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm4gbi5lcmEociwge1xuICAgICAgICAgIHdpZHRoOiBcIndpZGVcIlxuICAgICAgICB9KTtcbiAgICB9XG4gIH0sXG4gIC8vIFllYXJcbiAgeTogZnVuY3Rpb24odCwgbywgbikge1xuICAgIGlmIChvID09PSBcInlvXCIpIHtcbiAgICAgIHZhciByID0gdC5nZXRVVENGdWxsWWVhcigpLCBpID0gciA+IDAgPyByIDogMSAtIHI7XG4gICAgICByZXR1cm4gbi5vcmRpbmFsTnVtYmVyKGksIHtcbiAgICAgICAgdW5pdDogXCJ5ZWFyXCJcbiAgICAgIH0pO1xuICAgIH1cbiAgICByZXR1cm4gQ3QueSh0LCBvKTtcbiAgfSxcbiAgLy8gTG9jYWwgd2Vlay1udW1iZXJpbmcgeWVhclxuICBZOiBmdW5jdGlvbih0LCBvLCBuLCByKSB7XG4gICAgdmFyIGkgPSBvNih0LCByKSwgYSA9IGkgPiAwID8gaSA6IDEgLSBpO1xuICAgIGlmIChvID09PSBcIllZXCIpIHtcbiAgICAgIHZhciBzID0gYSAlIDEwMDtcbiAgICAgIHJldHVybiBQMChzLCAyKTtcbiAgICB9XG4gICAgcmV0dXJuIG8gPT09IFwiWW9cIiA/IG4ub3JkaW5hbE51bWJlcihhLCB7XG4gICAgICB1bml0OiBcInllYXJcIlxuICAgIH0pIDogUDAoYSwgby5sZW5ndGgpO1xuICB9LFxuICAvLyBJU08gd2Vlay1udW1iZXJpbmcgeWVhclxuICBSOiBmdW5jdGlvbih0LCBvKSB7XG4gICAgdmFyIG4gPSBLbCh0KTtcbiAgICByZXR1cm4gUDAobiwgby5sZW5ndGgpO1xuICB9LFxuICAvLyBFeHRlbmRlZCB5ZWFyLiBUaGlzIGlzIGEgc2luZ2xlIG51bWJlciBkZXNpZ25hdGluZyB0aGUgeWVhciBvZiB0aGlzIGNhbGVuZGFyIHN5c3RlbS5cbiAgLy8gVGhlIG1haW4gZGlmZmVyZW5jZSBiZXR3ZWVuIGB5YCBhbmQgYHVgIGxvY2FsaXplcnMgYXJlIEIuQy4geWVhcnM6XG4gIC8vIHwgWWVhciB8IGB5YCB8IGB1YCB8XG4gIC8vIHwtLS0tLS18LS0tLS18LS0tLS18XG4gIC8vIHwgQUMgMSB8ICAgMSB8ICAgMSB8XG4gIC8vIHwgQkMgMSB8ICAgMSB8ICAgMCB8XG4gIC8vIHwgQkMgMiB8ICAgMiB8ICAtMSB8XG4gIC8vIEFsc28gYHl5YCBhbHdheXMgcmV0dXJucyB0aGUgbGFzdCB0d28gZGlnaXRzIG9mIGEgeWVhcixcbiAgLy8gd2hpbGUgYHV1YCBwYWRzIHNpbmdsZSBkaWdpdCB5ZWFycyB0byAyIGNoYXJhY3RlcnMgYW5kIHJldHVybnMgb3RoZXIgeWVhcnMgdW5jaGFuZ2VkLlxuICB1OiBmdW5jdGlvbih0LCBvKSB7XG4gICAgdmFyIG4gPSB0LmdldFVUQ0Z1bGxZZWFyKCk7XG4gICAgcmV0dXJuIFAwKG4sIG8ubGVuZ3RoKTtcbiAgfSxcbiAgLy8gUXVhcnRlclxuICBROiBmdW5jdGlvbih0LCBvLCBuKSB7XG4gICAgdmFyIHIgPSBNYXRoLmNlaWwoKHQuZ2V0VVRDTW9udGgoKSArIDEpIC8gMyk7XG4gICAgc3dpdGNoIChvKSB7XG4gICAgICBjYXNlIFwiUVwiOlxuICAgICAgICByZXR1cm4gU3RyaW5nKHIpO1xuICAgICAgY2FzZSBcIlFRXCI6XG4gICAgICAgIHJldHVybiBQMChyLCAyKTtcbiAgICAgIGNhc2UgXCJRb1wiOlxuICAgICAgICByZXR1cm4gbi5vcmRpbmFsTnVtYmVyKHIsIHtcbiAgICAgICAgICB1bml0OiBcInF1YXJ0ZXJcIlxuICAgICAgICB9KTtcbiAgICAgIGNhc2UgXCJRUVFcIjpcbiAgICAgICAgcmV0dXJuIG4ucXVhcnRlcihyLCB7XG4gICAgICAgICAgd2lkdGg6IFwiYWJicmV2aWF0ZWRcIixcbiAgICAgICAgICBjb250ZXh0OiBcImZvcm1hdHRpbmdcIlxuICAgICAgICB9KTtcbiAgICAgIGNhc2UgXCJRUVFRUVwiOlxuICAgICAgICByZXR1cm4gbi5xdWFydGVyKHIsIHtcbiAgICAgICAgICB3aWR0aDogXCJuYXJyb3dcIixcbiAgICAgICAgICBjb250ZXh0OiBcImZvcm1hdHRpbmdcIlxuICAgICAgICB9KTtcbiAgICAgIGNhc2UgXCJRUVFRXCI6XG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm4gbi5xdWFydGVyKHIsIHtcbiAgICAgICAgICB3aWR0aDogXCJ3aWRlXCIsXG4gICAgICAgICAgY29udGV4dDogXCJmb3JtYXR0aW5nXCJcbiAgICAgICAgfSk7XG4gICAgfVxuICB9LFxuICAvLyBTdGFuZC1hbG9uZSBxdWFydGVyXG4gIHE6IGZ1bmN0aW9uKHQsIG8sIG4pIHtcbiAgICB2YXIgciA9IE1hdGguY2VpbCgodC5nZXRVVENNb250aCgpICsgMSkgLyAzKTtcbiAgICBzd2l0Y2ggKG8pIHtcbiAgICAgIGNhc2UgXCJxXCI6XG4gICAgICAgIHJldHVybiBTdHJpbmcocik7XG4gICAgICBjYXNlIFwicXFcIjpcbiAgICAgICAgcmV0dXJuIFAwKHIsIDIpO1xuICAgICAgY2FzZSBcInFvXCI6XG4gICAgICAgIHJldHVybiBuLm9yZGluYWxOdW1iZXIociwge1xuICAgICAgICAgIHVuaXQ6IFwicXVhcnRlclwiXG4gICAgICAgIH0pO1xuICAgICAgY2FzZSBcInFxcVwiOlxuICAgICAgICByZXR1cm4gbi5xdWFydGVyKHIsIHtcbiAgICAgICAgICB3aWR0aDogXCJhYmJyZXZpYXRlZFwiLFxuICAgICAgICAgIGNvbnRleHQ6IFwic3RhbmRhbG9uZVwiXG4gICAgICAgIH0pO1xuICAgICAgY2FzZSBcInFxcXFxXCI6XG4gICAgICAgIHJldHVybiBuLnF1YXJ0ZXIociwge1xuICAgICAgICAgIHdpZHRoOiBcIm5hcnJvd1wiLFxuICAgICAgICAgIGNvbnRleHQ6IFwic3RhbmRhbG9uZVwiXG4gICAgICAgIH0pO1xuICAgICAgY2FzZSBcInFxcXFcIjpcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiBuLnF1YXJ0ZXIociwge1xuICAgICAgICAgIHdpZHRoOiBcIndpZGVcIixcbiAgICAgICAgICBjb250ZXh0OiBcInN0YW5kYWxvbmVcIlxuICAgICAgICB9KTtcbiAgICB9XG4gIH0sXG4gIC8vIE1vbnRoXG4gIE06IGZ1bmN0aW9uKHQsIG8sIG4pIHtcbiAgICB2YXIgciA9IHQuZ2V0VVRDTW9udGgoKTtcbiAgICBzd2l0Y2ggKG8pIHtcbiAgICAgIGNhc2UgXCJNXCI6XG4gICAgICBjYXNlIFwiTU1cIjpcbiAgICAgICAgcmV0dXJuIEN0Lk0odCwgbyk7XG4gICAgICBjYXNlIFwiTW9cIjpcbiAgICAgICAgcmV0dXJuIG4ub3JkaW5hbE51bWJlcihyICsgMSwge1xuICAgICAgICAgIHVuaXQ6IFwibW9udGhcIlxuICAgICAgICB9KTtcbiAgICAgIGNhc2UgXCJNTU1cIjpcbiAgICAgICAgcmV0dXJuIG4ubW9udGgociwge1xuICAgICAgICAgIHdpZHRoOiBcImFiYnJldmlhdGVkXCIsXG4gICAgICAgICAgY29udGV4dDogXCJmb3JtYXR0aW5nXCJcbiAgICAgICAgfSk7XG4gICAgICBjYXNlIFwiTU1NTU1cIjpcbiAgICAgICAgcmV0dXJuIG4ubW9udGgociwge1xuICAgICAgICAgIHdpZHRoOiBcIm5hcnJvd1wiLFxuICAgICAgICAgIGNvbnRleHQ6IFwiZm9ybWF0dGluZ1wiXG4gICAgICAgIH0pO1xuICAgICAgY2FzZSBcIk1NTU1cIjpcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiBuLm1vbnRoKHIsIHtcbiAgICAgICAgICB3aWR0aDogXCJ3aWRlXCIsXG4gICAgICAgICAgY29udGV4dDogXCJmb3JtYXR0aW5nXCJcbiAgICAgICAgfSk7XG4gICAgfVxuICB9LFxuICAvLyBTdGFuZC1hbG9uZSBtb250aFxuICBMOiBmdW5jdGlvbih0LCBvLCBuKSB7XG4gICAgdmFyIHIgPSB0LmdldFVUQ01vbnRoKCk7XG4gICAgc3dpdGNoIChvKSB7XG4gICAgICBjYXNlIFwiTFwiOlxuICAgICAgICByZXR1cm4gU3RyaW5nKHIgKyAxKTtcbiAgICAgIGNhc2UgXCJMTFwiOlxuICAgICAgICByZXR1cm4gUDAociArIDEsIDIpO1xuICAgICAgY2FzZSBcIkxvXCI6XG4gICAgICAgIHJldHVybiBuLm9yZGluYWxOdW1iZXIociArIDEsIHtcbiAgICAgICAgICB1bml0OiBcIm1vbnRoXCJcbiAgICAgICAgfSk7XG4gICAgICBjYXNlIFwiTExMXCI6XG4gICAgICAgIHJldHVybiBuLm1vbnRoKHIsIHtcbiAgICAgICAgICB3aWR0aDogXCJhYmJyZXZpYXRlZFwiLFxuICAgICAgICAgIGNvbnRleHQ6IFwic3RhbmRhbG9uZVwiXG4gICAgICAgIH0pO1xuICAgICAgY2FzZSBcIkxMTExMXCI6XG4gICAgICAgIHJldHVybiBuLm1vbnRoKHIsIHtcbiAgICAgICAgICB3aWR0aDogXCJuYXJyb3dcIixcbiAgICAgICAgICBjb250ZXh0OiBcInN0YW5kYWxvbmVcIlxuICAgICAgICB9KTtcbiAgICAgIGNhc2UgXCJMTExMXCI6XG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm4gbi5tb250aChyLCB7XG4gICAgICAgICAgd2lkdGg6IFwid2lkZVwiLFxuICAgICAgICAgIGNvbnRleHQ6IFwic3RhbmRhbG9uZVwiXG4gICAgICAgIH0pO1xuICAgIH1cbiAgfSxcbiAgLy8gTG9jYWwgd2VlayBvZiB5ZWFyXG4gIHc6IGZ1bmN0aW9uKHQsIG8sIG4sIHIpIHtcbiAgICB2YXIgaSA9IF9sKHQsIHIpO1xuICAgIHJldHVybiBvID09PSBcIndvXCIgPyBuLm9yZGluYWxOdW1iZXIoaSwge1xuICAgICAgdW5pdDogXCJ3ZWVrXCJcbiAgICB9KSA6IFAwKGksIG8ubGVuZ3RoKTtcbiAgfSxcbiAgLy8gSVNPIHdlZWsgb2YgeWVhclxuICBJOiBmdW5jdGlvbih0LCBvLCBuKSB7XG4gICAgdmFyIHIgPSBKbCh0KTtcbiAgICByZXR1cm4gbyA9PT0gXCJJb1wiID8gbi5vcmRpbmFsTnVtYmVyKHIsIHtcbiAgICAgIHVuaXQ6IFwid2Vla1wiXG4gICAgfSkgOiBQMChyLCBvLmxlbmd0aCk7XG4gIH0sXG4gIC8vIERheSBvZiB0aGUgbW9udGhcbiAgZDogZnVuY3Rpb24odCwgbywgbikge1xuICAgIHJldHVybiBvID09PSBcImRvXCIgPyBuLm9yZGluYWxOdW1iZXIodC5nZXRVVENEYXRlKCksIHtcbiAgICAgIHVuaXQ6IFwiZGF0ZVwiXG4gICAgfSkgOiBDdC5kKHQsIG8pO1xuICB9LFxuICAvLyBEYXkgb2YgeWVhclxuICBEOiBmdW5jdGlvbih0LCBvLCBuKSB7XG4gICAgdmFyIHIgPSBseSh0KTtcbiAgICByZXR1cm4gbyA9PT0gXCJEb1wiID8gbi5vcmRpbmFsTnVtYmVyKHIsIHtcbiAgICAgIHVuaXQ6IFwiZGF5T2ZZZWFyXCJcbiAgICB9KSA6IFAwKHIsIG8ubGVuZ3RoKTtcbiAgfSxcbiAgLy8gRGF5IG9mIHdlZWtcbiAgRTogZnVuY3Rpb24odCwgbywgbikge1xuICAgIHZhciByID0gdC5nZXRVVENEYXkoKTtcbiAgICBzd2l0Y2ggKG8pIHtcbiAgICAgIGNhc2UgXCJFXCI6XG4gICAgICBjYXNlIFwiRUVcIjpcbiAgICAgIGNhc2UgXCJFRUVcIjpcbiAgICAgICAgcmV0dXJuIG4uZGF5KHIsIHtcbiAgICAgICAgICB3aWR0aDogXCJhYmJyZXZpYXRlZFwiLFxuICAgICAgICAgIGNvbnRleHQ6IFwiZm9ybWF0dGluZ1wiXG4gICAgICAgIH0pO1xuICAgICAgY2FzZSBcIkVFRUVFXCI6XG4gICAgICAgIHJldHVybiBuLmRheShyLCB7XG4gICAgICAgICAgd2lkdGg6IFwibmFycm93XCIsXG4gICAgICAgICAgY29udGV4dDogXCJmb3JtYXR0aW5nXCJcbiAgICAgICAgfSk7XG4gICAgICBjYXNlIFwiRUVFRUVFXCI6XG4gICAgICAgIHJldHVybiBuLmRheShyLCB7XG4gICAgICAgICAgd2lkdGg6IFwic2hvcnRcIixcbiAgICAgICAgICBjb250ZXh0OiBcImZvcm1hdHRpbmdcIlxuICAgICAgICB9KTtcbiAgICAgIGNhc2UgXCJFRUVFXCI6XG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm4gbi5kYXkociwge1xuICAgICAgICAgIHdpZHRoOiBcIndpZGVcIixcbiAgICAgICAgICBjb250ZXh0OiBcImZvcm1hdHRpbmdcIlxuICAgICAgICB9KTtcbiAgICB9XG4gIH0sXG4gIC8vIExvY2FsIGRheSBvZiB3ZWVrXG4gIGU6IGZ1bmN0aW9uKHQsIG8sIG4sIHIpIHtcbiAgICB2YXIgaSA9IHQuZ2V0VVRDRGF5KCksIGEgPSAoaSAtIHIud2Vla1N0YXJ0c09uICsgOCkgJSA3IHx8IDc7XG4gICAgc3dpdGNoIChvKSB7XG4gICAgICBjYXNlIFwiZVwiOlxuICAgICAgICByZXR1cm4gU3RyaW5nKGEpO1xuICAgICAgY2FzZSBcImVlXCI6XG4gICAgICAgIHJldHVybiBQMChhLCAyKTtcbiAgICAgIGNhc2UgXCJlb1wiOlxuICAgICAgICByZXR1cm4gbi5vcmRpbmFsTnVtYmVyKGEsIHtcbiAgICAgICAgICB1bml0OiBcImRheVwiXG4gICAgICAgIH0pO1xuICAgICAgY2FzZSBcImVlZVwiOlxuICAgICAgICByZXR1cm4gbi5kYXkoaSwge1xuICAgICAgICAgIHdpZHRoOiBcImFiYnJldmlhdGVkXCIsXG4gICAgICAgICAgY29udGV4dDogXCJmb3JtYXR0aW5nXCJcbiAgICAgICAgfSk7XG4gICAgICBjYXNlIFwiZWVlZWVcIjpcbiAgICAgICAgcmV0dXJuIG4uZGF5KGksIHtcbiAgICAgICAgICB3aWR0aDogXCJuYXJyb3dcIixcbiAgICAgICAgICBjb250ZXh0OiBcImZvcm1hdHRpbmdcIlxuICAgICAgICB9KTtcbiAgICAgIGNhc2UgXCJlZWVlZWVcIjpcbiAgICAgICAgcmV0dXJuIG4uZGF5KGksIHtcbiAgICAgICAgICB3aWR0aDogXCJzaG9ydFwiLFxuICAgICAgICAgIGNvbnRleHQ6IFwiZm9ybWF0dGluZ1wiXG4gICAgICAgIH0pO1xuICAgICAgY2FzZSBcImVlZWVcIjpcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiBuLmRheShpLCB7XG4gICAgICAgICAgd2lkdGg6IFwid2lkZVwiLFxuICAgICAgICAgIGNvbnRleHQ6IFwiZm9ybWF0dGluZ1wiXG4gICAgICAgIH0pO1xuICAgIH1cbiAgfSxcbiAgLy8gU3RhbmQtYWxvbmUgbG9jYWwgZGF5IG9mIHdlZWtcbiAgYzogZnVuY3Rpb24odCwgbywgbiwgcikge1xuICAgIHZhciBpID0gdC5nZXRVVENEYXkoKSwgYSA9IChpIC0gci53ZWVrU3RhcnRzT24gKyA4KSAlIDcgfHwgNztcbiAgICBzd2l0Y2ggKG8pIHtcbiAgICAgIGNhc2UgXCJjXCI6XG4gICAgICAgIHJldHVybiBTdHJpbmcoYSk7XG4gICAgICBjYXNlIFwiY2NcIjpcbiAgICAgICAgcmV0dXJuIFAwKGEsIG8ubGVuZ3RoKTtcbiAgICAgIGNhc2UgXCJjb1wiOlxuICAgICAgICByZXR1cm4gbi5vcmRpbmFsTnVtYmVyKGEsIHtcbiAgICAgICAgICB1bml0OiBcImRheVwiXG4gICAgICAgIH0pO1xuICAgICAgY2FzZSBcImNjY1wiOlxuICAgICAgICByZXR1cm4gbi5kYXkoaSwge1xuICAgICAgICAgIHdpZHRoOiBcImFiYnJldmlhdGVkXCIsXG4gICAgICAgICAgY29udGV4dDogXCJzdGFuZGFsb25lXCJcbiAgICAgICAgfSk7XG4gICAgICBjYXNlIFwiY2NjY2NcIjpcbiAgICAgICAgcmV0dXJuIG4uZGF5KGksIHtcbiAgICAgICAgICB3aWR0aDogXCJuYXJyb3dcIixcbiAgICAgICAgICBjb250ZXh0OiBcInN0YW5kYWxvbmVcIlxuICAgICAgICB9KTtcbiAgICAgIGNhc2UgXCJjY2NjY2NcIjpcbiAgICAgICAgcmV0dXJuIG4uZGF5KGksIHtcbiAgICAgICAgICB3aWR0aDogXCJzaG9ydFwiLFxuICAgICAgICAgIGNvbnRleHQ6IFwic3RhbmRhbG9uZVwiXG4gICAgICAgIH0pO1xuICAgICAgY2FzZSBcImNjY2NcIjpcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiBuLmRheShpLCB7XG4gICAgICAgICAgd2lkdGg6IFwid2lkZVwiLFxuICAgICAgICAgIGNvbnRleHQ6IFwic3RhbmRhbG9uZVwiXG4gICAgICAgIH0pO1xuICAgIH1cbiAgfSxcbiAgLy8gSVNPIGRheSBvZiB3ZWVrXG4gIGk6IGZ1bmN0aW9uKHQsIG8sIG4pIHtcbiAgICB2YXIgciA9IHQuZ2V0VVRDRGF5KCksIGkgPSByID09PSAwID8gNyA6IHI7XG4gICAgc3dpdGNoIChvKSB7XG4gICAgICBjYXNlIFwiaVwiOlxuICAgICAgICByZXR1cm4gU3RyaW5nKGkpO1xuICAgICAgY2FzZSBcImlpXCI6XG4gICAgICAgIHJldHVybiBQMChpLCBvLmxlbmd0aCk7XG4gICAgICBjYXNlIFwiaW9cIjpcbiAgICAgICAgcmV0dXJuIG4ub3JkaW5hbE51bWJlcihpLCB7XG4gICAgICAgICAgdW5pdDogXCJkYXlcIlxuICAgICAgICB9KTtcbiAgICAgIGNhc2UgXCJpaWlcIjpcbiAgICAgICAgcmV0dXJuIG4uZGF5KHIsIHtcbiAgICAgICAgICB3aWR0aDogXCJhYmJyZXZpYXRlZFwiLFxuICAgICAgICAgIGNvbnRleHQ6IFwiZm9ybWF0dGluZ1wiXG4gICAgICAgIH0pO1xuICAgICAgY2FzZSBcImlpaWlpXCI6XG4gICAgICAgIHJldHVybiBuLmRheShyLCB7XG4gICAgICAgICAgd2lkdGg6IFwibmFycm93XCIsXG4gICAgICAgICAgY29udGV4dDogXCJmb3JtYXR0aW5nXCJcbiAgICAgICAgfSk7XG4gICAgICBjYXNlIFwiaWlpaWlpXCI6XG4gICAgICAgIHJldHVybiBuLmRheShyLCB7XG4gICAgICAgICAgd2lkdGg6IFwic2hvcnRcIixcbiAgICAgICAgICBjb250ZXh0OiBcImZvcm1hdHRpbmdcIlxuICAgICAgICB9KTtcbiAgICAgIGNhc2UgXCJpaWlpXCI6XG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm4gbi5kYXkociwge1xuICAgICAgICAgIHdpZHRoOiBcIndpZGVcIixcbiAgICAgICAgICBjb250ZXh0OiBcImZvcm1hdHRpbmdcIlxuICAgICAgICB9KTtcbiAgICB9XG4gIH0sXG4gIC8vIEFNIG9yIFBNXG4gIGE6IGZ1bmN0aW9uKHQsIG8sIG4pIHtcbiAgICB2YXIgciA9IHQuZ2V0VVRDSG91cnMoKSwgaSA9IHIgLyAxMiA+PSAxID8gXCJwbVwiIDogXCJhbVwiO1xuICAgIHN3aXRjaCAobykge1xuICAgICAgY2FzZSBcImFcIjpcbiAgICAgIGNhc2UgXCJhYVwiOlxuICAgICAgICByZXR1cm4gbi5kYXlQZXJpb2QoaSwge1xuICAgICAgICAgIHdpZHRoOiBcImFiYnJldmlhdGVkXCIsXG4gICAgICAgICAgY29udGV4dDogXCJmb3JtYXR0aW5nXCJcbiAgICAgICAgfSk7XG4gICAgICBjYXNlIFwiYWFhXCI6XG4gICAgICAgIHJldHVybiBuLmRheVBlcmlvZChpLCB7XG4gICAgICAgICAgd2lkdGg6IFwiYWJicmV2aWF0ZWRcIixcbiAgICAgICAgICBjb250ZXh0OiBcImZvcm1hdHRpbmdcIlxuICAgICAgICB9KS50b0xvd2VyQ2FzZSgpO1xuICAgICAgY2FzZSBcImFhYWFhXCI6XG4gICAgICAgIHJldHVybiBuLmRheVBlcmlvZChpLCB7XG4gICAgICAgICAgd2lkdGg6IFwibmFycm93XCIsXG4gICAgICAgICAgY29udGV4dDogXCJmb3JtYXR0aW5nXCJcbiAgICAgICAgfSk7XG4gICAgICBjYXNlIFwiYWFhYVwiOlxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuIG4uZGF5UGVyaW9kKGksIHtcbiAgICAgICAgICB3aWR0aDogXCJ3aWRlXCIsXG4gICAgICAgICAgY29udGV4dDogXCJmb3JtYXR0aW5nXCJcbiAgICAgICAgfSk7XG4gICAgfVxuICB9LFxuICAvLyBBTSwgUE0sIG1pZG5pZ2h0LCBub29uXG4gIGI6IGZ1bmN0aW9uKHQsIG8sIG4pIHtcbiAgICB2YXIgciA9IHQuZ2V0VVRDSG91cnMoKSwgaTtcbiAgICBzd2l0Y2ggKHIgPT09IDEyID8gaSA9IEwzLm5vb24gOiByID09PSAwID8gaSA9IEwzLm1pZG5pZ2h0IDogaSA9IHIgLyAxMiA+PSAxID8gXCJwbVwiIDogXCJhbVwiLCBvKSB7XG4gICAgICBjYXNlIFwiYlwiOlxuICAgICAgY2FzZSBcImJiXCI6XG4gICAgICAgIHJldHVybiBuLmRheVBlcmlvZChpLCB7XG4gICAgICAgICAgd2lkdGg6IFwiYWJicmV2aWF0ZWRcIixcbiAgICAgICAgICBjb250ZXh0OiBcImZvcm1hdHRpbmdcIlxuICAgICAgICB9KTtcbiAgICAgIGNhc2UgXCJiYmJcIjpcbiAgICAgICAgcmV0dXJuIG4uZGF5UGVyaW9kKGksIHtcbiAgICAgICAgICB3aWR0aDogXCJhYmJyZXZpYXRlZFwiLFxuICAgICAgICAgIGNvbnRleHQ6IFwiZm9ybWF0dGluZ1wiXG4gICAgICAgIH0pLnRvTG93ZXJDYXNlKCk7XG4gICAgICBjYXNlIFwiYmJiYmJcIjpcbiAgICAgICAgcmV0dXJuIG4uZGF5UGVyaW9kKGksIHtcbiAgICAgICAgICB3aWR0aDogXCJuYXJyb3dcIixcbiAgICAgICAgICBjb250ZXh0OiBcImZvcm1hdHRpbmdcIlxuICAgICAgICB9KTtcbiAgICAgIGNhc2UgXCJiYmJiXCI6XG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm4gbi5kYXlQZXJpb2QoaSwge1xuICAgICAgICAgIHdpZHRoOiBcIndpZGVcIixcbiAgICAgICAgICBjb250ZXh0OiBcImZvcm1hdHRpbmdcIlxuICAgICAgICB9KTtcbiAgICB9XG4gIH0sXG4gIC8vIGluIHRoZSBtb3JuaW5nLCBpbiB0aGUgYWZ0ZXJub29uLCBpbiB0aGUgZXZlbmluZywgYXQgbmlnaHRcbiAgQjogZnVuY3Rpb24odCwgbywgbikge1xuICAgIHZhciByID0gdC5nZXRVVENIb3VycygpLCBpO1xuICAgIHN3aXRjaCAociA+PSAxNyA/IGkgPSBMMy5ldmVuaW5nIDogciA+PSAxMiA/IGkgPSBMMy5hZnRlcm5vb24gOiByID49IDQgPyBpID0gTDMubW9ybmluZyA6IGkgPSBMMy5uaWdodCwgbykge1xuICAgICAgY2FzZSBcIkJcIjpcbiAgICAgIGNhc2UgXCJCQlwiOlxuICAgICAgY2FzZSBcIkJCQlwiOlxuICAgICAgICByZXR1cm4gbi5kYXlQZXJpb2QoaSwge1xuICAgICAgICAgIHdpZHRoOiBcImFiYnJldmlhdGVkXCIsXG4gICAgICAgICAgY29udGV4dDogXCJmb3JtYXR0aW5nXCJcbiAgICAgICAgfSk7XG4gICAgICBjYXNlIFwiQkJCQkJcIjpcbiAgICAgICAgcmV0dXJuIG4uZGF5UGVyaW9kKGksIHtcbiAgICAgICAgICB3aWR0aDogXCJuYXJyb3dcIixcbiAgICAgICAgICBjb250ZXh0OiBcImZvcm1hdHRpbmdcIlxuICAgICAgICB9KTtcbiAgICAgIGNhc2UgXCJCQkJCXCI6XG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm4gbi5kYXlQZXJpb2QoaSwge1xuICAgICAgICAgIHdpZHRoOiBcIndpZGVcIixcbiAgICAgICAgICBjb250ZXh0OiBcImZvcm1hdHRpbmdcIlxuICAgICAgICB9KTtcbiAgICB9XG4gIH0sXG4gIC8vIEhvdXIgWzEtMTJdXG4gIGg6IGZ1bmN0aW9uKHQsIG8sIG4pIHtcbiAgICBpZiAobyA9PT0gXCJob1wiKSB7XG4gICAgICB2YXIgciA9IHQuZ2V0VVRDSG91cnMoKSAlIDEyO1xuICAgICAgcmV0dXJuIHIgPT09IDAgJiYgKHIgPSAxMiksIG4ub3JkaW5hbE51bWJlcihyLCB7XG4gICAgICAgIHVuaXQ6IFwiaG91clwiXG4gICAgICB9KTtcbiAgICB9XG4gICAgcmV0dXJuIEN0LmgodCwgbyk7XG4gIH0sXG4gIC8vIEhvdXIgWzAtMjNdXG4gIEg6IGZ1bmN0aW9uKHQsIG8sIG4pIHtcbiAgICByZXR1cm4gbyA9PT0gXCJIb1wiID8gbi5vcmRpbmFsTnVtYmVyKHQuZ2V0VVRDSG91cnMoKSwge1xuICAgICAgdW5pdDogXCJob3VyXCJcbiAgICB9KSA6IEN0LkgodCwgbyk7XG4gIH0sXG4gIC8vIEhvdXIgWzAtMTFdXG4gIEs6IGZ1bmN0aW9uKHQsIG8sIG4pIHtcbiAgICB2YXIgciA9IHQuZ2V0VVRDSG91cnMoKSAlIDEyO1xuICAgIHJldHVybiBvID09PSBcIktvXCIgPyBuLm9yZGluYWxOdW1iZXIociwge1xuICAgICAgdW5pdDogXCJob3VyXCJcbiAgICB9KSA6IFAwKHIsIG8ubGVuZ3RoKTtcbiAgfSxcbiAgLy8gSG91ciBbMS0yNF1cbiAgazogZnVuY3Rpb24odCwgbywgbikge1xuICAgIHZhciByID0gdC5nZXRVVENIb3VycygpO1xuICAgIHJldHVybiByID09PSAwICYmIChyID0gMjQpLCBvID09PSBcImtvXCIgPyBuLm9yZGluYWxOdW1iZXIociwge1xuICAgICAgdW5pdDogXCJob3VyXCJcbiAgICB9KSA6IFAwKHIsIG8ubGVuZ3RoKTtcbiAgfSxcbiAgLy8gTWludXRlXG4gIG06IGZ1bmN0aW9uKHQsIG8sIG4pIHtcbiAgICByZXR1cm4gbyA9PT0gXCJtb1wiID8gbi5vcmRpbmFsTnVtYmVyKHQuZ2V0VVRDTWludXRlcygpLCB7XG4gICAgICB1bml0OiBcIm1pbnV0ZVwiXG4gICAgfSkgOiBDdC5tKHQsIG8pO1xuICB9LFxuICAvLyBTZWNvbmRcbiAgczogZnVuY3Rpb24odCwgbywgbikge1xuICAgIHJldHVybiBvID09PSBcInNvXCIgPyBuLm9yZGluYWxOdW1iZXIodC5nZXRVVENTZWNvbmRzKCksIHtcbiAgICAgIHVuaXQ6IFwic2Vjb25kXCJcbiAgICB9KSA6IEN0LnModCwgbyk7XG4gIH0sXG4gIC8vIEZyYWN0aW9uIG9mIHNlY29uZFxuICBTOiBmdW5jdGlvbih0LCBvKSB7XG4gICAgcmV0dXJuIEN0LlModCwgbyk7XG4gIH0sXG4gIC8vIFRpbWV6b25lIChJU08tODYwMS4gSWYgb2Zmc2V0IGlzIDAsIG91dHB1dCBpcyBhbHdheXMgYCdaJ2ApXG4gIFg6IGZ1bmN0aW9uKHQsIG8sIG4sIHIpIHtcbiAgICB2YXIgaSA9IHIuX29yaWdpbmFsRGF0ZSB8fCB0LCBhID0gaS5nZXRUaW1lem9uZU9mZnNldCgpO1xuICAgIGlmIChhID09PSAwKVxuICAgICAgcmV0dXJuIFwiWlwiO1xuICAgIHN3aXRjaCAobykge1xuICAgICAgY2FzZSBcIlhcIjpcbiAgICAgICAgcmV0dXJuIFQ4KGEpO1xuICAgICAgY2FzZSBcIlhYWFhcIjpcbiAgICAgIGNhc2UgXCJYWFwiOlxuICAgICAgICByZXR1cm4gJHQoYSk7XG4gICAgICBjYXNlIFwiWFhYWFhcIjpcbiAgICAgIGNhc2UgXCJYWFhcIjpcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiAkdChhLCBcIjpcIik7XG4gICAgfVxuICB9LFxuICAvLyBUaW1lem9uZSAoSVNPLTg2MDEuIElmIG9mZnNldCBpcyAwLCBvdXRwdXQgaXMgYCcrMDA6MDAnYCBvciBlcXVpdmFsZW50KVxuICB4OiBmdW5jdGlvbih0LCBvLCBuLCByKSB7XG4gICAgdmFyIGkgPSByLl9vcmlnaW5hbERhdGUgfHwgdCwgYSA9IGkuZ2V0VGltZXpvbmVPZmZzZXQoKTtcbiAgICBzd2l0Y2ggKG8pIHtcbiAgICAgIGNhc2UgXCJ4XCI6XG4gICAgICAgIHJldHVybiBUOChhKTtcbiAgICAgIGNhc2UgXCJ4eHh4XCI6XG4gICAgICBjYXNlIFwieHhcIjpcbiAgICAgICAgcmV0dXJuICR0KGEpO1xuICAgICAgY2FzZSBcInh4eHh4XCI6XG4gICAgICBjYXNlIFwieHh4XCI6XG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm4gJHQoYSwgXCI6XCIpO1xuICAgIH1cbiAgfSxcbiAgLy8gVGltZXpvbmUgKEdNVClcbiAgTzogZnVuY3Rpb24odCwgbywgbiwgcikge1xuICAgIHZhciBpID0gci5fb3JpZ2luYWxEYXRlIHx8IHQsIGEgPSBpLmdldFRpbWV6b25lT2Zmc2V0KCk7XG4gICAgc3dpdGNoIChvKSB7XG4gICAgICBjYXNlIFwiT1wiOlxuICAgICAgY2FzZSBcIk9PXCI6XG4gICAgICBjYXNlIFwiT09PXCI6XG4gICAgICAgIHJldHVybiBcIkdNVFwiICsgTjgoYSwgXCI6XCIpO1xuICAgICAgY2FzZSBcIk9PT09cIjpcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiBcIkdNVFwiICsgJHQoYSwgXCI6XCIpO1xuICAgIH1cbiAgfSxcbiAgLy8gVGltZXpvbmUgKHNwZWNpZmljIG5vbi1sb2NhdGlvbilcbiAgejogZnVuY3Rpb24odCwgbywgbiwgcikge1xuICAgIHZhciBpID0gci5fb3JpZ2luYWxEYXRlIHx8IHQsIGEgPSBpLmdldFRpbWV6b25lT2Zmc2V0KCk7XG4gICAgc3dpdGNoIChvKSB7XG4gICAgICBjYXNlIFwielwiOlxuICAgICAgY2FzZSBcInp6XCI6XG4gICAgICBjYXNlIFwienp6XCI6XG4gICAgICAgIHJldHVybiBcIkdNVFwiICsgTjgoYSwgXCI6XCIpO1xuICAgICAgY2FzZSBcInp6enpcIjpcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiBcIkdNVFwiICsgJHQoYSwgXCI6XCIpO1xuICAgIH1cbiAgfSxcbiAgLy8gU2Vjb25kcyB0aW1lc3RhbXBcbiAgdDogZnVuY3Rpb24odCwgbywgbiwgcikge1xuICAgIHZhciBpID0gci5fb3JpZ2luYWxEYXRlIHx8IHQsIGEgPSBNYXRoLmZsb29yKGkuZ2V0VGltZSgpIC8gMWUzKTtcbiAgICByZXR1cm4gUDAoYSwgby5sZW5ndGgpO1xuICB9LFxuICAvLyBNaWxsaXNlY29uZHMgdGltZXN0YW1wXG4gIFQ6IGZ1bmN0aW9uKHQsIG8sIG4sIHIpIHtcbiAgICB2YXIgaSA9IHIuX29yaWdpbmFsRGF0ZSB8fCB0LCBhID0gaS5nZXRUaW1lKCk7XG4gICAgcmV0dXJuIFAwKGEsIG8ubGVuZ3RoKTtcbiAgfVxufTtcbmZ1bmN0aW9uIE44KGUsIHQpIHtcbiAgdmFyIG8gPSBlID4gMCA/IFwiLVwiIDogXCIrXCIsIG4gPSBNYXRoLmFicyhlKSwgciA9IE1hdGguZmxvb3IobiAvIDYwKSwgaSA9IG4gJSA2MDtcbiAgaWYgKGkgPT09IDApXG4gICAgcmV0dXJuIG8gKyBTdHJpbmcocik7XG4gIHZhciBhID0gdCB8fCBcIlwiO1xuICByZXR1cm4gbyArIFN0cmluZyhyKSArIGEgKyBQMChpLCAyKTtcbn1cbmZ1bmN0aW9uIFQ4KGUsIHQpIHtcbiAgaWYgKGUgJSA2MCA9PT0gMCkge1xuICAgIHZhciBvID0gZSA+IDAgPyBcIi1cIiA6IFwiK1wiO1xuICAgIHJldHVybiBvICsgUDAoTWF0aC5hYnMoZSkgLyA2MCwgMik7XG4gIH1cbiAgcmV0dXJuICR0KGUsIHQpO1xufVxuZnVuY3Rpb24gJHQoZSwgdCkge1xuICB2YXIgbyA9IHQgfHwgXCJcIiwgbiA9IGUgPiAwID8gXCItXCIgOiBcIitcIiwgciA9IE1hdGguYWJzKGUpLCBpID0gUDAoTWF0aC5mbG9vcihyIC8gNjApLCAyKSwgYSA9IFAwKHIgJSA2MCwgMik7XG4gIHJldHVybiBuICsgaSArIG8gKyBhO1xufVxuY29uc3QgenkgPSB1eTtcbnZhciBJOCA9IGZ1bmN0aW9uKHQsIG8pIHtcbiAgc3dpdGNoICh0KSB7XG4gICAgY2FzZSBcIlBcIjpcbiAgICAgIHJldHVybiBvLmRhdGUoe1xuICAgICAgICB3aWR0aDogXCJzaG9ydFwiXG4gICAgICB9KTtcbiAgICBjYXNlIFwiUFBcIjpcbiAgICAgIHJldHVybiBvLmRhdGUoe1xuICAgICAgICB3aWR0aDogXCJtZWRpdW1cIlxuICAgICAgfSk7XG4gICAgY2FzZSBcIlBQUFwiOlxuICAgICAgcmV0dXJuIG8uZGF0ZSh7XG4gICAgICAgIHdpZHRoOiBcImxvbmdcIlxuICAgICAgfSk7XG4gICAgY2FzZSBcIlBQUFBcIjpcbiAgICBkZWZhdWx0OlxuICAgICAgcmV0dXJuIG8uZGF0ZSh7XG4gICAgICAgIHdpZHRoOiBcImZ1bGxcIlxuICAgICAgfSk7XG4gIH1cbn0sICRsID0gZnVuY3Rpb24odCwgbykge1xuICBzd2l0Y2ggKHQpIHtcbiAgICBjYXNlIFwicFwiOlxuICAgICAgcmV0dXJuIG8udGltZSh7XG4gICAgICAgIHdpZHRoOiBcInNob3J0XCJcbiAgICAgIH0pO1xuICAgIGNhc2UgXCJwcFwiOlxuICAgICAgcmV0dXJuIG8udGltZSh7XG4gICAgICAgIHdpZHRoOiBcIm1lZGl1bVwiXG4gICAgICB9KTtcbiAgICBjYXNlIFwicHBwXCI6XG4gICAgICByZXR1cm4gby50aW1lKHtcbiAgICAgICAgd2lkdGg6IFwibG9uZ1wiXG4gICAgICB9KTtcbiAgICBjYXNlIFwicHBwcFwiOlxuICAgIGRlZmF1bHQ6XG4gICAgICByZXR1cm4gby50aW1lKHtcbiAgICAgICAgd2lkdGg6IFwiZnVsbFwiXG4gICAgICB9KTtcbiAgfVxufSwgaHkgPSBmdW5jdGlvbih0LCBvKSB7XG4gIHZhciBuID0gdC5tYXRjaCgvKFArKShwKyk/LykgfHwgW10sIHIgPSBuWzFdLCBpID0gblsyXTtcbiAgaWYgKCFpKVxuICAgIHJldHVybiBJOCh0LCBvKTtcbiAgdmFyIGE7XG4gIHN3aXRjaCAocikge1xuICAgIGNhc2UgXCJQXCI6XG4gICAgICBhID0gby5kYXRlVGltZSh7XG4gICAgICAgIHdpZHRoOiBcInNob3J0XCJcbiAgICAgIH0pO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSBcIlBQXCI6XG4gICAgICBhID0gby5kYXRlVGltZSh7XG4gICAgICAgIHdpZHRoOiBcIm1lZGl1bVwiXG4gICAgICB9KTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgXCJQUFBcIjpcbiAgICAgIGEgPSBvLmRhdGVUaW1lKHtcbiAgICAgICAgd2lkdGg6IFwibG9uZ1wiXG4gICAgICB9KTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgXCJQUFBQXCI6XG4gICAgZGVmYXVsdDpcbiAgICAgIGEgPSBvLmRhdGVUaW1lKHtcbiAgICAgICAgd2lkdGg6IFwiZnVsbFwiXG4gICAgICB9KTtcbiAgICAgIGJyZWFrO1xuICB9XG4gIHJldHVybiBhLnJlcGxhY2UoXCJ7e2RhdGV9fVwiLCBJOChyLCBvKSkucmVwbGFjZShcInt7dGltZX19XCIsICRsKGksIG8pKTtcbn0sIE95ID0ge1xuICBwOiAkbCxcbiAgUDogaHlcbn07XG5jb25zdCBHYSA9IE95O1xudmFyIGZ5ID0gW1wiRFwiLCBcIkREXCJdLCBneSA9IFtcIllZXCIsIFwiWVlZWVwiXTtcbmZ1bmN0aW9uIGVwKGUpIHtcbiAgcmV0dXJuIGZ5LmluZGV4T2YoZSkgIT09IC0xO1xufVxuZnVuY3Rpb24gdHAoZSkge1xuICByZXR1cm4gZ3kuaW5kZXhPZihlKSAhPT0gLTE7XG59XG5mdW5jdGlvbiBNNChlLCB0LCBvKSB7XG4gIGlmIChlID09PSBcIllZWVlcIilcbiAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcihcIlVzZSBgeXl5eWAgaW5zdGVhZCBvZiBgWVlZWWAgKGluIGBcIi5jb25jYXQodCwgXCJgKSBmb3IgZm9ybWF0dGluZyB5ZWFycyB0byB0aGUgaW5wdXQgYFwiKS5jb25jYXQobywgXCJgOyBzZWU6IGh0dHBzOi8vZ2l0aHViLmNvbS9kYXRlLWZucy9kYXRlLWZucy9ibG9iL21hc3Rlci9kb2NzL3VuaWNvZGVUb2tlbnMubWRcIikpO1xuICBpZiAoZSA9PT0gXCJZWVwiKVxuICAgIHRocm93IG5ldyBSYW5nZUVycm9yKFwiVXNlIGB5eWAgaW5zdGVhZCBvZiBgWVlgIChpbiBgXCIuY29uY2F0KHQsIFwiYCkgZm9yIGZvcm1hdHRpbmcgeWVhcnMgdG8gdGhlIGlucHV0IGBcIikuY29uY2F0KG8sIFwiYDsgc2VlOiBodHRwczovL2dpdGh1Yi5jb20vZGF0ZS1mbnMvZGF0ZS1mbnMvYmxvYi9tYXN0ZXIvZG9jcy91bmljb2RlVG9rZW5zLm1kXCIpKTtcbiAgaWYgKGUgPT09IFwiRFwiKVxuICAgIHRocm93IG5ldyBSYW5nZUVycm9yKFwiVXNlIGBkYCBpbnN0ZWFkIG9mIGBEYCAoaW4gYFwiLmNvbmNhdCh0LCBcImApIGZvciBmb3JtYXR0aW5nIGRheXMgb2YgdGhlIG1vbnRoIHRvIHRoZSBpbnB1dCBgXCIpLmNvbmNhdChvLCBcImA7IHNlZTogaHR0cHM6Ly9naXRodWIuY29tL2RhdGUtZm5zL2RhdGUtZm5zL2Jsb2IvbWFzdGVyL2RvY3MvdW5pY29kZVRva2Vucy5tZFwiKSk7XG4gIGlmIChlID09PSBcIkREXCIpXG4gICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoXCJVc2UgYGRkYCBpbnN0ZWFkIG9mIGBERGAgKGluIGBcIi5jb25jYXQodCwgXCJgKSBmb3IgZm9ybWF0dGluZyBkYXlzIG9mIHRoZSBtb250aCB0byB0aGUgaW5wdXQgYFwiKS5jb25jYXQobywgXCJgOyBzZWU6IGh0dHBzOi8vZ2l0aHViLmNvbS9kYXRlLWZucy9kYXRlLWZucy9ibG9iL21hc3Rlci9kb2NzL3VuaWNvZGVUb2tlbnMubWRcIikpO1xufVxudmFyIEN5ID0ge1xuICBsZXNzVGhhblhTZWNvbmRzOiB7XG4gICAgb25lOiBcImxlc3MgdGhhbiBhIHNlY29uZFwiLFxuICAgIG90aGVyOiBcImxlc3MgdGhhbiB7e2NvdW50fX0gc2Vjb25kc1wiXG4gIH0sXG4gIHhTZWNvbmRzOiB7XG4gICAgb25lOiBcIjEgc2Vjb25kXCIsXG4gICAgb3RoZXI6IFwie3tjb3VudH19IHNlY29uZHNcIlxuICB9LFxuICBoYWxmQU1pbnV0ZTogXCJoYWxmIGEgbWludXRlXCIsXG4gIGxlc3NUaGFuWE1pbnV0ZXM6IHtcbiAgICBvbmU6IFwibGVzcyB0aGFuIGEgbWludXRlXCIsXG4gICAgb3RoZXI6IFwibGVzcyB0aGFuIHt7Y291bnR9fSBtaW51dGVzXCJcbiAgfSxcbiAgeE1pbnV0ZXM6IHtcbiAgICBvbmU6IFwiMSBtaW51dGVcIixcbiAgICBvdGhlcjogXCJ7e2NvdW50fX0gbWludXRlc1wiXG4gIH0sXG4gIGFib3V0WEhvdXJzOiB7XG4gICAgb25lOiBcImFib3V0IDEgaG91clwiLFxuICAgIG90aGVyOiBcImFib3V0IHt7Y291bnR9fSBob3Vyc1wiXG4gIH0sXG4gIHhIb3Vyczoge1xuICAgIG9uZTogXCIxIGhvdXJcIixcbiAgICBvdGhlcjogXCJ7e2NvdW50fX0gaG91cnNcIlxuICB9LFxuICB4RGF5czoge1xuICAgIG9uZTogXCIxIGRheVwiLFxuICAgIG90aGVyOiBcInt7Y291bnR9fSBkYXlzXCJcbiAgfSxcbiAgYWJvdXRYV2Vla3M6IHtcbiAgICBvbmU6IFwiYWJvdXQgMSB3ZWVrXCIsXG4gICAgb3RoZXI6IFwiYWJvdXQge3tjb3VudH19IHdlZWtzXCJcbiAgfSxcbiAgeFdlZWtzOiB7XG4gICAgb25lOiBcIjEgd2Vla1wiLFxuICAgIG90aGVyOiBcInt7Y291bnR9fSB3ZWVrc1wiXG4gIH0sXG4gIGFib3V0WE1vbnRoczoge1xuICAgIG9uZTogXCJhYm91dCAxIG1vbnRoXCIsXG4gICAgb3RoZXI6IFwiYWJvdXQge3tjb3VudH19IG1vbnRoc1wiXG4gIH0sXG4gIHhNb250aHM6IHtcbiAgICBvbmU6IFwiMSBtb250aFwiLFxuICAgIG90aGVyOiBcInt7Y291bnR9fSBtb250aHNcIlxuICB9LFxuICBhYm91dFhZZWFyczoge1xuICAgIG9uZTogXCJhYm91dCAxIHllYXJcIixcbiAgICBvdGhlcjogXCJhYm91dCB7e2NvdW50fX0geWVhcnNcIlxuICB9LFxuICB4WWVhcnM6IHtcbiAgICBvbmU6IFwiMSB5ZWFyXCIsXG4gICAgb3RoZXI6IFwie3tjb3VudH19IHllYXJzXCJcbiAgfSxcbiAgb3ZlclhZZWFyczoge1xuICAgIG9uZTogXCJvdmVyIDEgeWVhclwiLFxuICAgIG90aGVyOiBcIm92ZXIge3tjb3VudH19IHllYXJzXCJcbiAgfSxcbiAgYWxtb3N0WFllYXJzOiB7XG4gICAgb25lOiBcImFsbW9zdCAxIHllYXJcIixcbiAgICBvdGhlcjogXCJhbG1vc3Qge3tjb3VudH19IHllYXJzXCJcbiAgfVxufSwgbXkgPSBmdW5jdGlvbih0LCBvLCBuKSB7XG4gIHZhciByLCBpID0gQ3lbdF07XG4gIHJldHVybiB0eXBlb2YgaSA9PSBcInN0cmluZ1wiID8gciA9IGkgOiBvID09PSAxID8gciA9IGkub25lIDogciA9IGkub3RoZXIucmVwbGFjZShcInt7Y291bnR9fVwiLCBvLnRvU3RyaW5nKCkpLCBuICE9IG51bGwgJiYgbi5hZGRTdWZmaXggPyBuLmNvbXBhcmlzb24gJiYgbi5jb21wYXJpc29uID4gMCA/IFwiaW4gXCIgKyByIDogciArIFwiIGFnb1wiIDogcjtcbn07XG5jb25zdCBMeSA9IG15O1xuZnVuY3Rpb24gbWkoZSkge1xuICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgdmFyIHQgPSBhcmd1bWVudHMubGVuZ3RoID4gMCAmJiBhcmd1bWVudHNbMF0gIT09IHZvaWQgMCA/IGFyZ3VtZW50c1swXSA6IHt9LCBvID0gdC53aWR0aCA/IFN0cmluZyh0LndpZHRoKSA6IGUuZGVmYXVsdFdpZHRoLCBuID0gZS5mb3JtYXRzW29dIHx8IGUuZm9ybWF0c1tlLmRlZmF1bHRXaWR0aF07XG4gICAgcmV0dXJuIG47XG4gIH07XG59XG52YXIgdnkgPSB7XG4gIGZ1bGw6IFwiRUVFRSwgTU1NTSBkbywgeVwiLFxuICBsb25nOiBcIk1NTU0gZG8sIHlcIixcbiAgbWVkaXVtOiBcIk1NTSBkLCB5XCIsXG4gIHNob3J0OiBcIk1NL2RkL3l5eXlcIlxufSwgcXkgPSB7XG4gIGZ1bGw6IFwiaDptbTpzcyBhIHp6enpcIixcbiAgbG9uZzogXCJoOm1tOnNzIGEgelwiLFxuICBtZWRpdW06IFwiaDptbTpzcyBhXCIsXG4gIHNob3J0OiBcImg6bW0gYVwiXG59LCB5eSA9IHtcbiAgZnVsbDogXCJ7e2RhdGV9fSAnYXQnIHt7dGltZX19XCIsXG4gIGxvbmc6IFwie3tkYXRlfX0gJ2F0JyB7e3RpbWV9fVwiLFxuICBtZWRpdW06IFwie3tkYXRlfX0sIHt7dGltZX19XCIsXG4gIHNob3J0OiBcInt7ZGF0ZX19LCB7e3RpbWV9fVwiXG59LCB3eSA9IHtcbiAgZGF0ZTogbWkoe1xuICAgIGZvcm1hdHM6IHZ5LFxuICAgIGRlZmF1bHRXaWR0aDogXCJmdWxsXCJcbiAgfSksXG4gIHRpbWU6IG1pKHtcbiAgICBmb3JtYXRzOiBxeSxcbiAgICBkZWZhdWx0V2lkdGg6IFwiZnVsbFwiXG4gIH0pLFxuICBkYXRlVGltZTogbWkoe1xuICAgIGZvcm1hdHM6IHl5LFxuICAgIGRlZmF1bHRXaWR0aDogXCJmdWxsXCJcbiAgfSlcbn07XG5jb25zdCB4eSA9IHd5O1xudmFyIFd5ID0ge1xuICBsYXN0V2VlazogXCInbGFzdCcgZWVlZSAnYXQnIHBcIixcbiAgeWVzdGVyZGF5OiBcIid5ZXN0ZXJkYXkgYXQnIHBcIixcbiAgdG9kYXk6IFwiJ3RvZGF5IGF0JyBwXCIsXG4gIHRvbW9ycm93OiBcIid0b21vcnJvdyBhdCcgcFwiLFxuICBuZXh0V2VlazogXCJlZWVlICdhdCcgcFwiLFxuICBvdGhlcjogXCJQXCJcbn0sIFJ5ID0gZnVuY3Rpb24odCwgbywgbiwgcikge1xuICByZXR1cm4gV3lbdF07XG59O1xuY29uc3QgQnkgPSBSeTtcbmZ1bmN0aW9uIFJvKGUpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uKHQsIG8pIHtcbiAgICB2YXIgbiA9IG8gIT0gbnVsbCAmJiBvLmNvbnRleHQgPyBTdHJpbmcoby5jb250ZXh0KSA6IFwic3RhbmRhbG9uZVwiLCByO1xuICAgIGlmIChuID09PSBcImZvcm1hdHRpbmdcIiAmJiBlLmZvcm1hdHRpbmdWYWx1ZXMpIHtcbiAgICAgIHZhciBpID0gZS5kZWZhdWx0Rm9ybWF0dGluZ1dpZHRoIHx8IGUuZGVmYXVsdFdpZHRoLCBhID0gbyAhPSBudWxsICYmIG8ud2lkdGggPyBTdHJpbmcoby53aWR0aCkgOiBpO1xuICAgICAgciA9IGUuZm9ybWF0dGluZ1ZhbHVlc1thXSB8fCBlLmZvcm1hdHRpbmdWYWx1ZXNbaV07XG4gICAgfSBlbHNlIHtcbiAgICAgIHZhciBzID0gZS5kZWZhdWx0V2lkdGgsIGwgPSBvICE9IG51bGwgJiYgby53aWR0aCA/IFN0cmluZyhvLndpZHRoKSA6IGUuZGVmYXVsdFdpZHRoO1xuICAgICAgciA9IGUudmFsdWVzW2xdIHx8IGUudmFsdWVzW3NdO1xuICAgIH1cbiAgICB2YXIgcCA9IGUuYXJndW1lbnRDYWxsYmFjayA/IGUuYXJndW1lbnRDYWxsYmFjayh0KSA6IHQ7XG4gICAgcmV0dXJuIHJbcF07XG4gIH07XG59XG52YXIgU3kgPSB7XG4gIG5hcnJvdzogW1wiQlwiLCBcIkFcIl0sXG4gIGFiYnJldmlhdGVkOiBbXCJCQ1wiLCBcIkFEXCJdLFxuICB3aWRlOiBbXCJCZWZvcmUgQ2hyaXN0XCIsIFwiQW5ubyBEb21pbmlcIl1cbn0sIEV5ID0ge1xuICBuYXJyb3c6IFtcIjFcIiwgXCIyXCIsIFwiM1wiLCBcIjRcIl0sXG4gIGFiYnJldmlhdGVkOiBbXCJRMVwiLCBcIlEyXCIsIFwiUTNcIiwgXCJRNFwiXSxcbiAgd2lkZTogW1wiMXN0IHF1YXJ0ZXJcIiwgXCIybmQgcXVhcnRlclwiLCBcIjNyZCBxdWFydGVyXCIsIFwiNHRoIHF1YXJ0ZXJcIl1cbn0sIGt5ID0ge1xuICBuYXJyb3c6IFtcIkpcIiwgXCJGXCIsIFwiTVwiLCBcIkFcIiwgXCJNXCIsIFwiSlwiLCBcIkpcIiwgXCJBXCIsIFwiU1wiLCBcIk9cIiwgXCJOXCIsIFwiRFwiXSxcbiAgYWJicmV2aWF0ZWQ6IFtcIkphblwiLCBcIkZlYlwiLCBcIk1hclwiLCBcIkFwclwiLCBcIk1heVwiLCBcIkp1blwiLCBcIkp1bFwiLCBcIkF1Z1wiLCBcIlNlcFwiLCBcIk9jdFwiLCBcIk5vdlwiLCBcIkRlY1wiXSxcbiAgd2lkZTogW1wiSmFudWFyeVwiLCBcIkZlYnJ1YXJ5XCIsIFwiTWFyY2hcIiwgXCJBcHJpbFwiLCBcIk1heVwiLCBcIkp1bmVcIiwgXCJKdWx5XCIsIFwiQXVndXN0XCIsIFwiU2VwdGVtYmVyXCIsIFwiT2N0b2JlclwiLCBcIk5vdmVtYmVyXCIsIFwiRGVjZW1iZXJcIl1cbn0sIE55ID0ge1xuICBuYXJyb3c6IFtcIlNcIiwgXCJNXCIsIFwiVFwiLCBcIldcIiwgXCJUXCIsIFwiRlwiLCBcIlNcIl0sXG4gIHNob3J0OiBbXCJTdVwiLCBcIk1vXCIsIFwiVHVcIiwgXCJXZVwiLCBcIlRoXCIsIFwiRnJcIiwgXCJTYVwiXSxcbiAgYWJicmV2aWF0ZWQ6IFtcIlN1blwiLCBcIk1vblwiLCBcIlR1ZVwiLCBcIldlZFwiLCBcIlRodVwiLCBcIkZyaVwiLCBcIlNhdFwiXSxcbiAgd2lkZTogW1wiU3VuZGF5XCIsIFwiTW9uZGF5XCIsIFwiVHVlc2RheVwiLCBcIldlZG5lc2RheVwiLCBcIlRodXJzZGF5XCIsIFwiRnJpZGF5XCIsIFwiU2F0dXJkYXlcIl1cbn0sIFR5ID0ge1xuICBuYXJyb3c6IHtcbiAgICBhbTogXCJhXCIsXG4gICAgcG06IFwicFwiLFxuICAgIG1pZG5pZ2h0OiBcIm1pXCIsXG4gICAgbm9vbjogXCJuXCIsXG4gICAgbW9ybmluZzogXCJtb3JuaW5nXCIsXG4gICAgYWZ0ZXJub29uOiBcImFmdGVybm9vblwiLFxuICAgIGV2ZW5pbmc6IFwiZXZlbmluZ1wiLFxuICAgIG5pZ2h0OiBcIm5pZ2h0XCJcbiAgfSxcbiAgYWJicmV2aWF0ZWQ6IHtcbiAgICBhbTogXCJBTVwiLFxuICAgIHBtOiBcIlBNXCIsXG4gICAgbWlkbmlnaHQ6IFwibWlkbmlnaHRcIixcbiAgICBub29uOiBcIm5vb25cIixcbiAgICBtb3JuaW5nOiBcIm1vcm5pbmdcIixcbiAgICBhZnRlcm5vb246IFwiYWZ0ZXJub29uXCIsXG4gICAgZXZlbmluZzogXCJldmVuaW5nXCIsXG4gICAgbmlnaHQ6IFwibmlnaHRcIlxuICB9LFxuICB3aWRlOiB7XG4gICAgYW06IFwiYS5tLlwiLFxuICAgIHBtOiBcInAubS5cIixcbiAgICBtaWRuaWdodDogXCJtaWRuaWdodFwiLFxuICAgIG5vb246IFwibm9vblwiLFxuICAgIG1vcm5pbmc6IFwibW9ybmluZ1wiLFxuICAgIGFmdGVybm9vbjogXCJhZnRlcm5vb25cIixcbiAgICBldmVuaW5nOiBcImV2ZW5pbmdcIixcbiAgICBuaWdodDogXCJuaWdodFwiXG4gIH1cbn0sIEl5ID0ge1xuICBuYXJyb3c6IHtcbiAgICBhbTogXCJhXCIsXG4gICAgcG06IFwicFwiLFxuICAgIG1pZG5pZ2h0OiBcIm1pXCIsXG4gICAgbm9vbjogXCJuXCIsXG4gICAgbW9ybmluZzogXCJpbiB0aGUgbW9ybmluZ1wiLFxuICAgIGFmdGVybm9vbjogXCJpbiB0aGUgYWZ0ZXJub29uXCIsXG4gICAgZXZlbmluZzogXCJpbiB0aGUgZXZlbmluZ1wiLFxuICAgIG5pZ2h0OiBcImF0IG5pZ2h0XCJcbiAgfSxcbiAgYWJicmV2aWF0ZWQ6IHtcbiAgICBhbTogXCJBTVwiLFxuICAgIHBtOiBcIlBNXCIsXG4gICAgbWlkbmlnaHQ6IFwibWlkbmlnaHRcIixcbiAgICBub29uOiBcIm5vb25cIixcbiAgICBtb3JuaW5nOiBcImluIHRoZSBtb3JuaW5nXCIsXG4gICAgYWZ0ZXJub29uOiBcImluIHRoZSBhZnRlcm5vb25cIixcbiAgICBldmVuaW5nOiBcImluIHRoZSBldmVuaW5nXCIsXG4gICAgbmlnaHQ6IFwiYXQgbmlnaHRcIlxuICB9LFxuICB3aWRlOiB7XG4gICAgYW06IFwiYS5tLlwiLFxuICAgIHBtOiBcInAubS5cIixcbiAgICBtaWRuaWdodDogXCJtaWRuaWdodFwiLFxuICAgIG5vb246IFwibm9vblwiLFxuICAgIG1vcm5pbmc6IFwiaW4gdGhlIG1vcm5pbmdcIixcbiAgICBhZnRlcm5vb246IFwiaW4gdGhlIGFmdGVybm9vblwiLFxuICAgIGV2ZW5pbmc6IFwiaW4gdGhlIGV2ZW5pbmdcIixcbiAgICBuaWdodDogXCJhdCBuaWdodFwiXG4gIH1cbn0sIER5ID0gZnVuY3Rpb24odCwgbykge1xuICB2YXIgbiA9IE51bWJlcih0KSwgciA9IG4gJSAxMDA7XG4gIGlmIChyID4gMjAgfHwgciA8IDEwKVxuICAgIHN3aXRjaCAociAlIDEwKSB7XG4gICAgICBjYXNlIDE6XG4gICAgICAgIHJldHVybiBuICsgXCJzdFwiO1xuICAgICAgY2FzZSAyOlxuICAgICAgICByZXR1cm4gbiArIFwibmRcIjtcbiAgICAgIGNhc2UgMzpcbiAgICAgICAgcmV0dXJuIG4gKyBcInJkXCI7XG4gICAgfVxuICByZXR1cm4gbiArIFwidGhcIjtcbn0sIEh5ID0ge1xuICBvcmRpbmFsTnVtYmVyOiBEeSxcbiAgZXJhOiBSbyh7XG4gICAgdmFsdWVzOiBTeSxcbiAgICBkZWZhdWx0V2lkdGg6IFwid2lkZVwiXG4gIH0pLFxuICBxdWFydGVyOiBSbyh7XG4gICAgdmFsdWVzOiBFeSxcbiAgICBkZWZhdWx0V2lkdGg6IFwid2lkZVwiLFxuICAgIGFyZ3VtZW50Q2FsbGJhY2s6IGZ1bmN0aW9uKHQpIHtcbiAgICAgIHJldHVybiB0IC0gMTtcbiAgICB9XG4gIH0pLFxuICBtb250aDogUm8oe1xuICAgIHZhbHVlczoga3ksXG4gICAgZGVmYXVsdFdpZHRoOiBcIndpZGVcIlxuICB9KSxcbiAgZGF5OiBSbyh7XG4gICAgdmFsdWVzOiBOeSxcbiAgICBkZWZhdWx0V2lkdGg6IFwid2lkZVwiXG4gIH0pLFxuICBkYXlQZXJpb2Q6IFJvKHtcbiAgICB2YWx1ZXM6IFR5LFxuICAgIGRlZmF1bHRXaWR0aDogXCJ3aWRlXCIsXG4gICAgZm9ybWF0dGluZ1ZhbHVlczogSXksXG4gICAgZGVmYXVsdEZvcm1hdHRpbmdXaWR0aDogXCJ3aWRlXCJcbiAgfSlcbn07XG5jb25zdCBWeSA9IEh5O1xuZnVuY3Rpb24gQm8oZSkge1xuICByZXR1cm4gZnVuY3Rpb24odCkge1xuICAgIHZhciBvID0gYXJndW1lbnRzLmxlbmd0aCA+IDEgJiYgYXJndW1lbnRzWzFdICE9PSB2b2lkIDAgPyBhcmd1bWVudHNbMV0gOiB7fSwgbiA9IG8ud2lkdGgsIHIgPSBuICYmIGUubWF0Y2hQYXR0ZXJuc1tuXSB8fCBlLm1hdGNoUGF0dGVybnNbZS5kZWZhdWx0TWF0Y2hXaWR0aF0sIGkgPSB0Lm1hdGNoKHIpO1xuICAgIGlmICghaSlcbiAgICAgIHJldHVybiBudWxsO1xuICAgIHZhciBhID0gaVswXSwgcyA9IG4gJiYgZS5wYXJzZVBhdHRlcm5zW25dIHx8IGUucGFyc2VQYXR0ZXJuc1tlLmRlZmF1bHRQYXJzZVdpZHRoXSwgbCA9IEFycmF5LmlzQXJyYXkocykgPyBGeShzLCBmdW5jdGlvbihiKSB7XG4gICAgICByZXR1cm4gYi50ZXN0KGEpO1xuICAgIH0pIDogUHkocywgZnVuY3Rpb24oYikge1xuICAgICAgcmV0dXJuIGIudGVzdChhKTtcbiAgICB9KSwgcDtcbiAgICBwID0gZS52YWx1ZUNhbGxiYWNrID8gZS52YWx1ZUNhbGxiYWNrKGwpIDogbCwgcCA9IG8udmFsdWVDYWxsYmFjayA/IG8udmFsdWVDYWxsYmFjayhwKSA6IHA7XG4gICAgdmFyIGQgPSB0LnNsaWNlKGEubGVuZ3RoKTtcbiAgICByZXR1cm4ge1xuICAgICAgdmFsdWU6IHAsXG4gICAgICByZXN0OiBkXG4gICAgfTtcbiAgfTtcbn1cbmZ1bmN0aW9uIFB5KGUsIHQpIHtcbiAgZm9yICh2YXIgbyBpbiBlKVxuICAgIGlmIChlLmhhc093blByb3BlcnR5KG8pICYmIHQoZVtvXSkpXG4gICAgICByZXR1cm4gbztcbn1cbmZ1bmN0aW9uIEZ5KGUsIHQpIHtcbiAgZm9yICh2YXIgbyA9IDA7IG8gPCBlLmxlbmd0aDsgbysrKVxuICAgIGlmICh0KGVbb10pKVxuICAgICAgcmV0dXJuIG87XG59XG5mdW5jdGlvbiBYeShlKSB7XG4gIHJldHVybiBmdW5jdGlvbih0KSB7XG4gICAgdmFyIG8gPSBhcmd1bWVudHMubGVuZ3RoID4gMSAmJiBhcmd1bWVudHNbMV0gIT09IHZvaWQgMCA/IGFyZ3VtZW50c1sxXSA6IHt9LCBuID0gdC5tYXRjaChlLm1hdGNoUGF0dGVybik7XG4gICAgaWYgKCFuKVxuICAgICAgcmV0dXJuIG51bGw7XG4gICAgdmFyIHIgPSBuWzBdLCBpID0gdC5tYXRjaChlLnBhcnNlUGF0dGVybik7XG4gICAgaWYgKCFpKVxuICAgICAgcmV0dXJuIG51bGw7XG4gICAgdmFyIGEgPSBlLnZhbHVlQ2FsbGJhY2sgPyBlLnZhbHVlQ2FsbGJhY2soaVswXSkgOiBpWzBdO1xuICAgIGEgPSBvLnZhbHVlQ2FsbGJhY2sgPyBvLnZhbHVlQ2FsbGJhY2soYSkgOiBhO1xuICAgIHZhciBzID0gdC5zbGljZShyLmxlbmd0aCk7XG4gICAgcmV0dXJuIHtcbiAgICAgIHZhbHVlOiBhLFxuICAgICAgcmVzdDogc1xuICAgIH07XG4gIH07XG59XG52YXIgVXkgPSAvXihcXGQrKSh0aHxzdHxuZHxyZCk/L2ksIFl5ID0gL1xcZCsvaSwgR3kgPSB7XG4gIG5hcnJvdzogL14oYnxhKS9pLFxuICBhYmJyZXZpYXRlZDogL14oYlxcLj9cXHM/Y1xcLj98YlxcLj9cXHM/Y1xcLj9cXHM/ZVxcLj98YVxcLj9cXHM/ZFxcLj98Y1xcLj9cXHM/ZVxcLj8pL2ksXG4gIHdpZGU6IC9eKGJlZm9yZSBjaHJpc3R8YmVmb3JlIGNvbW1vbiBlcmF8YW5ubyBkb21pbml8Y29tbW9uIGVyYSkvaVxufSwgUXkgPSB7XG4gIGFueTogWy9eYi9pLCAvXihhfGMpL2ldXG59LCBaeSA9IHtcbiAgbmFycm93OiAvXlsxMjM0XS9pLFxuICBhYmJyZXZpYXRlZDogL15xWzEyMzRdL2ksXG4gIHdpZGU6IC9eWzEyMzRdKHRofHN0fG5kfHJkKT8gcXVhcnRlci9pXG59LCBqeSA9IHtcbiAgYW55OiBbLzEvaSwgLzIvaSwgLzMvaSwgLzQvaV1cbn0sIEt5ID0ge1xuICBuYXJyb3c6IC9eW2pmbWFzb25kXS9pLFxuICBhYmJyZXZpYXRlZDogL14oamFufGZlYnxtYXJ8YXByfG1heXxqdW58anVsfGF1Z3xzZXB8b2N0fG5vdnxkZWMpL2ksXG4gIHdpZGU6IC9eKGphbnVhcnl8ZmVicnVhcnl8bWFyY2h8YXByaWx8bWF5fGp1bmV8anVseXxhdWd1c3R8c2VwdGVtYmVyfG9jdG9iZXJ8bm92ZW1iZXJ8ZGVjZW1iZXIpL2lcbn0sIEp5ID0ge1xuICBuYXJyb3c6IFsvXmovaSwgL15mL2ksIC9ebS9pLCAvXmEvaSwgL15tL2ksIC9eai9pLCAvXmovaSwgL15hL2ksIC9ecy9pLCAvXm8vaSwgL15uL2ksIC9eZC9pXSxcbiAgYW55OiBbL15qYS9pLCAvXmYvaSwgL15tYXIvaSwgL15hcC9pLCAvXm1heS9pLCAvXmp1bi9pLCAvXmp1bC9pLCAvXmF1L2ksIC9ecy9pLCAvXm8vaSwgL15uL2ksIC9eZC9pXVxufSwgX3kgPSB7XG4gIG5hcnJvdzogL15bc210d2ZdL2ksXG4gIHNob3J0OiAvXihzdXxtb3x0dXx3ZXx0aHxmcnxzYSkvaSxcbiAgYWJicmV2aWF0ZWQ6IC9eKHN1bnxtb258dHVlfHdlZHx0aHV8ZnJpfHNhdCkvaSxcbiAgd2lkZTogL14oc3VuZGF5fG1vbmRheXx0dWVzZGF5fHdlZG5lc2RheXx0aHVyc2RheXxmcmlkYXl8c2F0dXJkYXkpL2lcbn0sICR5ID0ge1xuICBuYXJyb3c6IFsvXnMvaSwgL15tL2ksIC9edC9pLCAvXncvaSwgL150L2ksIC9eZi9pLCAvXnMvaV0sXG4gIGFueTogWy9ec3UvaSwgL15tL2ksIC9edHUvaSwgL153L2ksIC9edGgvaSwgL15mL2ksIC9ec2EvaV1cbn0sIGV3ID0ge1xuICBuYXJyb3c6IC9eKGF8cHxtaXxufChpbiB0aGV8YXQpIChtb3JuaW5nfGFmdGVybm9vbnxldmVuaW5nfG5pZ2h0KSkvaSxcbiAgYW55OiAvXihbYXBdXFwuP1xccz9tXFwuP3xtaWRuaWdodHxub29ufChpbiB0aGV8YXQpIChtb3JuaW5nfGFmdGVybm9vbnxldmVuaW5nfG5pZ2h0KSkvaVxufSwgdHcgPSB7XG4gIGFueToge1xuICAgIGFtOiAvXmEvaSxcbiAgICBwbTogL15wL2ksXG4gICAgbWlkbmlnaHQ6IC9ebWkvaSxcbiAgICBub29uOiAvXm5vL2ksXG4gICAgbW9ybmluZzogL21vcm5pbmcvaSxcbiAgICBhZnRlcm5vb246IC9hZnRlcm5vb24vaSxcbiAgICBldmVuaW5nOiAvZXZlbmluZy9pLFxuICAgIG5pZ2h0OiAvbmlnaHQvaVxuICB9XG59LCBvdyA9IHtcbiAgb3JkaW5hbE51bWJlcjogWHkoe1xuICAgIG1hdGNoUGF0dGVybjogVXksXG4gICAgcGFyc2VQYXR0ZXJuOiBZeSxcbiAgICB2YWx1ZUNhbGxiYWNrOiBmdW5jdGlvbih0KSB7XG4gICAgICByZXR1cm4gcGFyc2VJbnQodCwgMTApO1xuICAgIH1cbiAgfSksXG4gIGVyYTogQm8oe1xuICAgIG1hdGNoUGF0dGVybnM6IEd5LFxuICAgIGRlZmF1bHRNYXRjaFdpZHRoOiBcIndpZGVcIixcbiAgICBwYXJzZVBhdHRlcm5zOiBReSxcbiAgICBkZWZhdWx0UGFyc2VXaWR0aDogXCJhbnlcIlxuICB9KSxcbiAgcXVhcnRlcjogQm8oe1xuICAgIG1hdGNoUGF0dGVybnM6IFp5LFxuICAgIGRlZmF1bHRNYXRjaFdpZHRoOiBcIndpZGVcIixcbiAgICBwYXJzZVBhdHRlcm5zOiBqeSxcbiAgICBkZWZhdWx0UGFyc2VXaWR0aDogXCJhbnlcIixcbiAgICB2YWx1ZUNhbGxiYWNrOiBmdW5jdGlvbih0KSB7XG4gICAgICByZXR1cm4gdCArIDE7XG4gICAgfVxuICB9KSxcbiAgbW9udGg6IEJvKHtcbiAgICBtYXRjaFBhdHRlcm5zOiBLeSxcbiAgICBkZWZhdWx0TWF0Y2hXaWR0aDogXCJ3aWRlXCIsXG4gICAgcGFyc2VQYXR0ZXJuczogSnksXG4gICAgZGVmYXVsdFBhcnNlV2lkdGg6IFwiYW55XCJcbiAgfSksXG4gIGRheTogQm8oe1xuICAgIG1hdGNoUGF0dGVybnM6IF95LFxuICAgIGRlZmF1bHRNYXRjaFdpZHRoOiBcIndpZGVcIixcbiAgICBwYXJzZVBhdHRlcm5zOiAkeSxcbiAgICBkZWZhdWx0UGFyc2VXaWR0aDogXCJhbnlcIlxuICB9KSxcbiAgZGF5UGVyaW9kOiBCbyh7XG4gICAgbWF0Y2hQYXR0ZXJuczogZXcsXG4gICAgZGVmYXVsdE1hdGNoV2lkdGg6IFwiYW55XCIsXG4gICAgcGFyc2VQYXR0ZXJuczogdHcsXG4gICAgZGVmYXVsdFBhcnNlV2lkdGg6IFwiYW55XCJcbiAgfSlcbn07XG5jb25zdCBydyA9IG93O1xudmFyIG53ID0ge1xuICBjb2RlOiBcImVuLVVTXCIsXG4gIGZvcm1hdERpc3RhbmNlOiBMeSxcbiAgZm9ybWF0TG9uZzogeHksXG4gIGZvcm1hdFJlbGF0aXZlOiBCeSxcbiAgbG9jYWxpemU6IFZ5LFxuICBtYXRjaDogcncsXG4gIG9wdGlvbnM6IHtcbiAgICB3ZWVrU3RhcnRzT246IDAsXG4gICAgZmlyc3RXZWVrQ29udGFpbnNEYXRlOiAxXG4gIH1cbn07XG5jb25zdCByNiA9IG53O1xudmFyIGl3ID0gL1t5WVFxTUx3SWREZWNpaEhLa21zXW98KFxcdylcXDEqfCcnfCcoJyd8W14nXSkrKCd8JCl8Li9nLCBhdyA9IC9QK3ArfFArfHArfCcnfCcoJyd8W14nXSkrKCd8JCl8Li9nLCBzdyA9IC9eJyhbXl0qPyknPyQvLCBjdyA9IC8nJy9nLCBsdyA9IC9bYS16QS1aXS87XG5mdW5jdGlvbiBkcihlLCB0LCBvKSB7XG4gIHZhciBuLCByLCBpLCBhLCBzLCBsLCBwLCBkLCBiLCBNLCB1LCBBLCB6LCBmLCBPLCBoLCBnLCB2O1xuICBRMSgyLCBhcmd1bWVudHMpO1xuICB2YXIgTCA9IFN0cmluZyh0KSwgeSA9IFh0KCksIEIgPSAobiA9IChyID0gbyA9PSBudWxsID8gdm9pZCAwIDogby5sb2NhbGUpICE9PSBudWxsICYmIHIgIT09IHZvaWQgMCA/IHIgOiB5LmxvY2FsZSkgIT09IG51bGwgJiYgbiAhPT0gdm9pZCAwID8gbiA6IHI2LCBYID0gdjAoKGkgPSAoYSA9IChzID0gKGwgPSBvID09IG51bGwgPyB2b2lkIDAgOiBvLmZpcnN0V2Vla0NvbnRhaW5zRGF0ZSkgIT09IG51bGwgJiYgbCAhPT0gdm9pZCAwID8gbCA6IG8gPT0gbnVsbCB8fCAocCA9IG8ubG9jYWxlKSA9PT0gbnVsbCB8fCBwID09PSB2b2lkIDAgfHwgKGQgPSBwLm9wdGlvbnMpID09PSBudWxsIHx8IGQgPT09IHZvaWQgMCA/IHZvaWQgMCA6IGQuZmlyc3RXZWVrQ29udGFpbnNEYXRlKSAhPT0gbnVsbCAmJiBzICE9PSB2b2lkIDAgPyBzIDogeS5maXJzdFdlZWtDb250YWluc0RhdGUpICE9PSBudWxsICYmIGEgIT09IHZvaWQgMCA/IGEgOiAoYiA9IHkubG9jYWxlKSA9PT0gbnVsbCB8fCBiID09PSB2b2lkIDAgfHwgKE0gPSBiLm9wdGlvbnMpID09PSBudWxsIHx8IE0gPT09IHZvaWQgMCA/IHZvaWQgMCA6IE0uZmlyc3RXZWVrQ29udGFpbnNEYXRlKSAhPT0gbnVsbCAmJiBpICE9PSB2b2lkIDAgPyBpIDogMSk7XG4gIGlmICghKFggPj0gMSAmJiBYIDw9IDcpKVxuICAgIHRocm93IG5ldyBSYW5nZUVycm9yKFwiZmlyc3RXZWVrQ29udGFpbnNEYXRlIG11c3QgYmUgYmV0d2VlbiAxIGFuZCA3IGluY2x1c2l2ZWx5XCIpO1xuICB2YXIgRiA9IHYwKCh1ID0gKEEgPSAoeiA9IChmID0gbyA9PSBudWxsID8gdm9pZCAwIDogby53ZWVrU3RhcnRzT24pICE9PSBudWxsICYmIGYgIT09IHZvaWQgMCA/IGYgOiBvID09IG51bGwgfHwgKE8gPSBvLmxvY2FsZSkgPT09IG51bGwgfHwgTyA9PT0gdm9pZCAwIHx8IChoID0gTy5vcHRpb25zKSA9PT0gbnVsbCB8fCBoID09PSB2b2lkIDAgPyB2b2lkIDAgOiBoLndlZWtTdGFydHNPbikgIT09IG51bGwgJiYgeiAhPT0gdm9pZCAwID8geiA6IHkud2Vla1N0YXJ0c09uKSAhPT0gbnVsbCAmJiBBICE9PSB2b2lkIDAgPyBBIDogKGcgPSB5LmxvY2FsZSkgPT09IG51bGwgfHwgZyA9PT0gdm9pZCAwIHx8ICh2ID0gZy5vcHRpb25zKSA9PT0gbnVsbCB8fCB2ID09PSB2b2lkIDAgPyB2b2lkIDAgOiB2LndlZWtTdGFydHNPbikgIT09IG51bGwgJiYgdSAhPT0gdm9pZCAwID8gdSA6IDApO1xuICBpZiAoIShGID49IDAgJiYgRiA8PSA2KSlcbiAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcihcIndlZWtTdGFydHNPbiBtdXN0IGJlIGJldHdlZW4gMCBhbmQgNiBpbmNsdXNpdmVseVwiKTtcbiAgaWYgKCFCLmxvY2FsaXplKVxuICAgIHRocm93IG5ldyBSYW5nZUVycm9yKFwibG9jYWxlIG11c3QgY29udGFpbiBsb2NhbGl6ZSBwcm9wZXJ0eVwiKTtcbiAgaWYgKCFCLmZvcm1hdExvbmcpXG4gICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoXCJsb2NhbGUgbXVzdCBjb250YWluIGZvcm1hdExvbmcgcHJvcGVydHlcIik7XG4gIHZhciBUID0gajEoZSk7XG4gIGlmICghbHIoVCkpXG4gICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoXCJJbnZhbGlkIHRpbWUgdmFsdWVcIik7XG4gIHZhciB3ID0gajMoVCksIEggPSBqbChULCB3KSwgQyA9IHtcbiAgICBmaXJzdFdlZWtDb250YWluc0RhdGU6IFgsXG4gICAgd2Vla1N0YXJ0c09uOiBGLFxuICAgIGxvY2FsZTogQixcbiAgICBfb3JpZ2luYWxEYXRlOiBUXG4gIH0sIHEgPSBMLm1hdGNoKGF3KS5tYXAoZnVuY3Rpb24obSkge1xuICAgIHZhciBrID0gbVswXTtcbiAgICBpZiAoayA9PT0gXCJwXCIgfHwgayA9PT0gXCJQXCIpIHtcbiAgICAgIHZhciB4ID0gR2Fba107XG4gICAgICByZXR1cm4geChtLCBCLmZvcm1hdExvbmcpO1xuICAgIH1cbiAgICByZXR1cm4gbTtcbiAgfSkuam9pbihcIlwiKS5tYXRjaChpdykubWFwKGZ1bmN0aW9uKG0pIHtcbiAgICBpZiAobSA9PT0gXCInJ1wiKVxuICAgICAgcmV0dXJuIFwiJ1wiO1xuICAgIHZhciBrID0gbVswXTtcbiAgICBpZiAoayA9PT0gXCInXCIpXG4gICAgICByZXR1cm4gcHcobSk7XG4gICAgdmFyIHggPSB6eVtrXTtcbiAgICBpZiAoeClcbiAgICAgIHJldHVybiAhKG8gIT0gbnVsbCAmJiBvLnVzZUFkZGl0aW9uYWxXZWVrWWVhclRva2VucykgJiYgdHAobSkgJiYgTTQobSwgdCwgU3RyaW5nKGUpKSwgIShvICE9IG51bGwgJiYgby51c2VBZGRpdGlvbmFsRGF5T2ZZZWFyVG9rZW5zKSAmJiBlcChtKSAmJiBNNChtLCB0LCBTdHJpbmcoZSkpLCB4KEgsIG0sIEIubG9jYWxpemUsIEMpO1xuICAgIGlmIChrLm1hdGNoKGx3KSlcbiAgICAgIHRocm93IG5ldyBSYW5nZUVycm9yKFwiRm9ybWF0IHN0cmluZyBjb250YWlucyBhbiB1bmVzY2FwZWQgbGF0aW4gYWxwaGFiZXQgY2hhcmFjdGVyIGBcIiArIGsgKyBcImBcIik7XG4gICAgcmV0dXJuIG07XG4gIH0pLmpvaW4oXCJcIik7XG4gIHJldHVybiBxO1xufVxuZnVuY3Rpb24gcHcoZSkge1xuICB2YXIgdCA9IGUubWF0Y2goc3cpO1xuICByZXR1cm4gdCA/IHRbMV0ucmVwbGFjZShjdywgXCInXCIpIDogZTtcbn1cbmZ1bmN0aW9uIG42KGUsIHQpIHtcbiAgaWYgKGUgPT0gbnVsbClcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiYXNzaWduIHJlcXVpcmVzIHRoYXQgaW5wdXQgcGFyYW1ldGVyIG5vdCBiZSBudWxsIG9yIHVuZGVmaW5lZFwiKTtcbiAgZm9yICh2YXIgbyBpbiB0KVxuICAgIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh0LCBvKSAmJiAoZVtvXSA9IHRbb10pO1xuICByZXR1cm4gZTtcbn1cbmZ1bmN0aW9uIGR3KGUpIHtcbiAgcmV0dXJuIG42KHt9LCBlKTtcbn1cbnZhciBEOCA9IDE0NDAsIGJ3ID0gMjUyMCwgTGkgPSA0MzIwMCwgTXcgPSA4NjQwMDtcbmZ1bmN0aW9uIEF3KGUsIHQsIG8pIHtcbiAgdmFyIG4sIHI7XG4gIFExKDIsIGFyZ3VtZW50cyk7XG4gIHZhciBpID0gWHQoKSwgYSA9IChuID0gKHIgPSBvID09IG51bGwgPyB2b2lkIDAgOiBvLmxvY2FsZSkgIT09IG51bGwgJiYgciAhPT0gdm9pZCAwID8gciA6IGkubG9jYWxlKSAhPT0gbnVsbCAmJiBuICE9PSB2b2lkIDAgPyBuIDogcjY7XG4gIGlmICghYS5mb3JtYXREaXN0YW5jZSlcbiAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcihcImxvY2FsZSBtdXN0IGNvbnRhaW4gZm9ybWF0RGlzdGFuY2UgcHJvcGVydHlcIik7XG4gIHZhciBzID0gSG4oZSwgdCk7XG4gIGlmIChpc05hTihzKSlcbiAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcihcIkludmFsaWQgdGltZSB2YWx1ZVwiKTtcbiAgdmFyIGwgPSBuNihkdyhvKSwge1xuICAgIGFkZFN1ZmZpeDogISEobyAhPSBudWxsICYmIG8uYWRkU3VmZml4KSxcbiAgICBjb21wYXJpc29uOiBzXG4gIH0pLCBwLCBkO1xuICBzID4gMCA/IChwID0gajEodCksIGQgPSBqMShlKSkgOiAocCA9IGoxKGUpLCBkID0gajEodCkpO1xuICB2YXIgYiA9IGF5KGQsIHApLCBNID0gKGozKGQpIC0gajMocCkpIC8gMWUzLCB1ID0gTWF0aC5yb3VuZCgoYiAtIE0pIC8gNjApLCBBO1xuICBpZiAodSA8IDIpXG4gICAgcmV0dXJuIG8gIT0gbnVsbCAmJiBvLmluY2x1ZGVTZWNvbmRzID8gYiA8IDUgPyBhLmZvcm1hdERpc3RhbmNlKFwibGVzc1RoYW5YU2Vjb25kc1wiLCA1LCBsKSA6IGIgPCAxMCA/IGEuZm9ybWF0RGlzdGFuY2UoXCJsZXNzVGhhblhTZWNvbmRzXCIsIDEwLCBsKSA6IGIgPCAyMCA/IGEuZm9ybWF0RGlzdGFuY2UoXCJsZXNzVGhhblhTZWNvbmRzXCIsIDIwLCBsKSA6IGIgPCA0MCA/IGEuZm9ybWF0RGlzdGFuY2UoXCJoYWxmQU1pbnV0ZVwiLCAwLCBsKSA6IGIgPCA2MCA/IGEuZm9ybWF0RGlzdGFuY2UoXCJsZXNzVGhhblhNaW51dGVzXCIsIDEsIGwpIDogYS5mb3JtYXREaXN0YW5jZShcInhNaW51dGVzXCIsIDEsIGwpIDogdSA9PT0gMCA/IGEuZm9ybWF0RGlzdGFuY2UoXCJsZXNzVGhhblhNaW51dGVzXCIsIDEsIGwpIDogYS5mb3JtYXREaXN0YW5jZShcInhNaW51dGVzXCIsIHUsIGwpO1xuICBpZiAodSA8IDQ1KVxuICAgIHJldHVybiBhLmZvcm1hdERpc3RhbmNlKFwieE1pbnV0ZXNcIiwgdSwgbCk7XG4gIGlmICh1IDwgOTApXG4gICAgcmV0dXJuIGEuZm9ybWF0RGlzdGFuY2UoXCJhYm91dFhIb3Vyc1wiLCAxLCBsKTtcbiAgaWYgKHUgPCBEOCkge1xuICAgIHZhciB6ID0gTWF0aC5yb3VuZCh1IC8gNjApO1xuICAgIHJldHVybiBhLmZvcm1hdERpc3RhbmNlKFwiYWJvdXRYSG91cnNcIiwgeiwgbCk7XG4gIH0gZWxzZSB7XG4gICAgaWYgKHUgPCBidylcbiAgICAgIHJldHVybiBhLmZvcm1hdERpc3RhbmNlKFwieERheXNcIiwgMSwgbCk7XG4gICAgaWYgKHUgPCBMaSkge1xuICAgICAgdmFyIGYgPSBNYXRoLnJvdW5kKHUgLyBEOCk7XG4gICAgICByZXR1cm4gYS5mb3JtYXREaXN0YW5jZShcInhEYXlzXCIsIGYsIGwpO1xuICAgIH0gZWxzZSBpZiAodSA8IE13KVxuICAgICAgcmV0dXJuIEEgPSBNYXRoLnJvdW5kKHUgLyBMaSksIGEuZm9ybWF0RGlzdGFuY2UoXCJhYm91dFhNb250aHNcIiwgQSwgbCk7XG4gIH1cbiAgaWYgKEEgPSBpeShkLCBwKSwgQSA8IDEyKSB7XG4gICAgdmFyIE8gPSBNYXRoLnJvdW5kKHUgLyBMaSk7XG4gICAgcmV0dXJuIGEuZm9ybWF0RGlzdGFuY2UoXCJ4TW9udGhzXCIsIE8sIGwpO1xuICB9IGVsc2Uge1xuICAgIHZhciBoID0gQSAlIDEyLCBnID0gTWF0aC5mbG9vcihBIC8gMTIpO1xuICAgIHJldHVybiBoIDwgMyA/IGEuZm9ybWF0RGlzdGFuY2UoXCJhYm91dFhZZWFyc1wiLCBnLCBsKSA6IGggPCA5ID8gYS5mb3JtYXREaXN0YW5jZShcIm92ZXJYWWVhcnNcIiwgZywgbCkgOiBhLmZvcm1hdERpc3RhbmNlKFwiYWxtb3N0WFllYXJzXCIsIGcgKyAxLCBsKTtcbiAgfVxufVxuZnVuY3Rpb24gdXcoZSwgdCkge1xuICByZXR1cm4gUTEoMSwgYXJndW1lbnRzKSwgQXcoZSwgRGF0ZS5ub3coKSwgdCk7XG59XG5mdW5jdGlvbiBIOChlKSB7XG4gIFExKDEsIGFyZ3VtZW50cyk7XG4gIHZhciB0ID0gajEoZSksIG8gPSB0LmdldERhdGUoKTtcbiAgcmV0dXJuIG87XG59XG5mdW5jdGlvbiB6dyhlKSB7XG4gIFExKDEsIGFyZ3VtZW50cyk7XG4gIHZhciB0ID0gajEoZSksIG8gPSB0LmdldERheSgpO1xuICByZXR1cm4gbztcbn1cbmZ1bmN0aW9uIGh3KGUpIHtcbiAgUTEoMSwgYXJndW1lbnRzKTtcbiAgdmFyIHQgPSBqMShlKSwgbyA9IHQuZ2V0RnVsbFllYXIoKSwgbiA9IHQuZ2V0TW9udGgoKSwgciA9IC8qIEBfX1BVUkVfXyAqLyBuZXcgRGF0ZSgwKTtcbiAgcmV0dXJuIHIuc2V0RnVsbFllYXIobywgbiArIDEsIDApLCByLnNldEhvdXJzKDAsIDAsIDAsIDApLCByLmdldERhdGUoKTtcbn1cbmZ1bmN0aW9uIFBlKGUpIHtcbiAgUTEoMSwgYXJndW1lbnRzKTtcbiAgdmFyIHQgPSBqMShlKSwgbyA9IHQuZ2V0SG91cnMoKTtcbiAgcmV0dXJuIG87XG59XG52YXIgT3cgPSA2MDQ4ZTU7XG5mdW5jdGlvbiBmdyhlKSB7XG4gIFExKDEsIGFyZ3VtZW50cyk7XG4gIHZhciB0ID0gajEoZSksIG8gPSBjNCh0KS5nZXRUaW1lKCkgLSBLcSh0KS5nZXRUaW1lKCk7XG4gIHJldHVybiBNYXRoLnJvdW5kKG8gLyBPdykgKyAxO1xufVxuZnVuY3Rpb24gRmUoZSkge1xuICBRMSgxLCBhcmd1bWVudHMpO1xuICB2YXIgdCA9IGoxKGUpLCBvID0gdC5nZXRNaW51dGVzKCk7XG4gIHJldHVybiBvO1xufVxuZnVuY3Rpb24gZzIoZSkge1xuICBRMSgxLCBhcmd1bWVudHMpO1xuICB2YXIgdCA9IGoxKGUpLCBvID0gdC5nZXRNb250aCgpO1xuICByZXR1cm4gbztcbn1cbmZ1bmN0aW9uIFY4KGUpIHtcbiAgUTEoMSwgYXJndW1lbnRzKTtcbiAgdmFyIHQgPSBqMShlKSwgbyA9IHQuZ2V0U2Vjb25kcygpO1xuICByZXR1cm4gbztcbn1cbmZ1bmN0aW9uIFFhKGUpIHtcbiAgUTEoMSwgYXJndW1lbnRzKTtcbiAgdmFyIHQgPSBqMShlKSwgbyA9IHQuZ2V0VGltZSgpO1xuICByZXR1cm4gbztcbn1cbmZ1bmN0aW9uIEwwKGUpIHtcbiAgcmV0dXJuIFExKDEsIGFyZ3VtZW50cyksIGoxKGUpLmdldEZ1bGxZZWFyKCk7XG59XG5mdW5jdGlvbiBEdChlLCB0KSB7XG4gIFExKDIsIGFyZ3VtZW50cyk7XG4gIHZhciBvID0gajEoZSksIG4gPSBqMSh0KTtcbiAgcmV0dXJuIG8uZ2V0VGltZSgpID4gbi5nZXRUaW1lKCk7XG59XG5mdW5jdGlvbiB2dChlLCB0KSB7XG4gIFExKDIsIGFyZ3VtZW50cyk7XG4gIHZhciBvID0gajEoZSksIG4gPSBqMSh0KTtcbiAgcmV0dXJuIG8uZ2V0VGltZSgpIDwgbi5nZXRUaW1lKCk7XG59XG5mdW5jdGlvbiBndyhlLCB0KSB7XG4gIFExKDIsIGFyZ3VtZW50cyk7XG4gIHZhciBvID0gajEoZSksIG4gPSBqMSh0KTtcbiAgcmV0dXJuIG8uZ2V0VGltZSgpID09PSBuLmdldFRpbWUoKTtcbn1cbmZ1bmN0aW9uIFA4KGUsIHQpIHtcbiAgKHQgPT0gbnVsbCB8fCB0ID4gZS5sZW5ndGgpICYmICh0ID0gZS5sZW5ndGgpO1xuICBmb3IgKHZhciBvID0gMCwgbiA9IEFycmF5KHQpOyBvIDwgdDsgbysrKVxuICAgIG5bb10gPSBlW29dO1xuICByZXR1cm4gbjtcbn1cbmZ1bmN0aW9uIEN3KGUsIHQpIHtcbiAgaWYgKGUpIHtcbiAgICBpZiAodHlwZW9mIGUgPT0gXCJzdHJpbmdcIilcbiAgICAgIHJldHVybiBQOChlLCB0KTtcbiAgICB2YXIgbyA9IHt9LnRvU3RyaW5nLmNhbGwoZSkuc2xpY2UoOCwgLTEpO1xuICAgIHJldHVybiBvID09PSBcIk9iamVjdFwiICYmIGUuY29uc3RydWN0b3IgJiYgKG8gPSBlLmNvbnN0cnVjdG9yLm5hbWUpLCBvID09PSBcIk1hcFwiIHx8IG8gPT09IFwiU2V0XCIgPyBBcnJheS5mcm9tKGUpIDogbyA9PT0gXCJBcmd1bWVudHNcIiB8fCAvXig/OlVpfEkpbnQoPzo4fDE2fDMyKSg/OkNsYW1wZWQpP0FycmF5JC8udGVzdChvKSA/IFA4KGUsIHQpIDogdm9pZCAwO1xuICB9XG59XG5mdW5jdGlvbiBGOChlLCB0KSB7XG4gIHZhciBvID0gdHlwZW9mIFN5bWJvbCA8IFwidVwiICYmIGVbU3ltYm9sLml0ZXJhdG9yXSB8fCBlW1wiQEBpdGVyYXRvclwiXTtcbiAgaWYgKCFvKSB7XG4gICAgaWYgKEFycmF5LmlzQXJyYXkoZSkgfHwgKG8gPSBDdyhlKSkgfHwgdCAmJiBlICYmIHR5cGVvZiBlLmxlbmd0aCA9PSBcIm51bWJlclwiKSB7XG4gICAgICBvICYmIChlID0gbyk7XG4gICAgICB2YXIgbiA9IDAsIHIgPSBmdW5jdGlvbigpIHtcbiAgICAgIH07XG4gICAgICByZXR1cm4ge1xuICAgICAgICBzOiByLFxuICAgICAgICBuOiBmdW5jdGlvbigpIHtcbiAgICAgICAgICByZXR1cm4gbiA+PSBlLmxlbmd0aCA/IHtcbiAgICAgICAgICAgIGRvbmU6ICEwXG4gICAgICAgICAgfSA6IHtcbiAgICAgICAgICAgIGRvbmU6ICExLFxuICAgICAgICAgICAgdmFsdWU6IGVbbisrXVxuICAgICAgICAgIH07XG4gICAgICAgIH0sXG4gICAgICAgIGU6IGZ1bmN0aW9uKHApIHtcbiAgICAgICAgICB0aHJvdyBwO1xuICAgICAgICB9LFxuICAgICAgICBmOiByXG4gICAgICB9O1xuICAgIH1cbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKGBJbnZhbGlkIGF0dGVtcHQgdG8gaXRlcmF0ZSBub24taXRlcmFibGUgaW5zdGFuY2UuXG5JbiBvcmRlciB0byBiZSBpdGVyYWJsZSwgbm9uLWFycmF5IG9iamVjdHMgbXVzdCBoYXZlIGEgW1N5bWJvbC5pdGVyYXRvcl0oKSBtZXRob2QuYCk7XG4gIH1cbiAgdmFyIGksIGEgPSAhMCwgcyA9ICExO1xuICByZXR1cm4ge1xuICAgIHM6IGZ1bmN0aW9uKCkge1xuICAgICAgbyA9IG8uY2FsbChlKTtcbiAgICB9LFxuICAgIG46IGZ1bmN0aW9uKCkge1xuICAgICAgdmFyIHAgPSBvLm5leHQoKTtcbiAgICAgIHJldHVybiBhID0gcC5kb25lLCBwO1xuICAgIH0sXG4gICAgZTogZnVuY3Rpb24ocCkge1xuICAgICAgcyA9ICEwLCBpID0gcDtcbiAgICB9LFxuICAgIGY6IGZ1bmN0aW9uKCkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgYSB8fCBvLnJldHVybiA9PSBudWxsIHx8IG8ucmV0dXJuKCk7XG4gICAgICB9IGZpbmFsbHkge1xuICAgICAgICBpZiAocylcbiAgICAgICAgICB0aHJvdyBpO1xuICAgICAgfVxuICAgIH1cbiAgfTtcbn1cbmZ1bmN0aW9uIG8wKGUpIHtcbiAgaWYgKGUgPT09IHZvaWQgMClcbiAgICB0aHJvdyBuZXcgUmVmZXJlbmNlRXJyb3IoXCJ0aGlzIGhhc24ndCBiZWVuIGluaXRpYWxpc2VkIC0gc3VwZXIoKSBoYXNuJ3QgYmVlbiBjYWxsZWRcIik7XG4gIHJldHVybiBlO1xufVxuZnVuY3Rpb24gUzAoZSwgdCkge1xuICBpZiAodHlwZW9mIHQgIT0gXCJmdW5jdGlvblwiICYmIHQgIT09IG51bGwpXG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlN1cGVyIGV4cHJlc3Npb24gbXVzdCBlaXRoZXIgYmUgbnVsbCBvciBhIGZ1bmN0aW9uXCIpO1xuICBlLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUodCAmJiB0LnByb3RvdHlwZSwge1xuICAgIGNvbnN0cnVjdG9yOiB7XG4gICAgICB2YWx1ZTogZSxcbiAgICAgIHdyaXRhYmxlOiAhMCxcbiAgICAgIGNvbmZpZ3VyYWJsZTogITBcbiAgICB9XG4gIH0pLCBPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwgXCJwcm90b3R5cGVcIiwge1xuICAgIHdyaXRhYmxlOiAhMVxuICB9KSwgdCAmJiBhNChlLCB0KTtcbn1cbmZ1bmN0aW9uIEE0KGUpIHtcbiAgcmV0dXJuIEE0ID0gT2JqZWN0LnNldFByb3RvdHlwZU9mID8gT2JqZWN0LmdldFByb3RvdHlwZU9mLmJpbmQoKSA6IGZ1bmN0aW9uKHQpIHtcbiAgICByZXR1cm4gdC5fX3Byb3RvX18gfHwgT2JqZWN0LmdldFByb3RvdHlwZU9mKHQpO1xuICB9LCBBNChlKTtcbn1cbmZ1bmN0aW9uIG9wKCkge1xuICB0cnkge1xuICAgIHZhciBlID0gIUJvb2xlYW4ucHJvdG90eXBlLnZhbHVlT2YuY2FsbChSZWZsZWN0LmNvbnN0cnVjdChCb29sZWFuLCBbXSwgZnVuY3Rpb24oKSB7XG4gICAgfSkpO1xuICB9IGNhdGNoIHtcbiAgfVxuICByZXR1cm4gKG9wID0gZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuICEhZTtcbiAgfSkoKTtcbn1cbmZ1bmN0aW9uIG13KGUsIHQpIHtcbiAgaWYgKHQgJiYgKE1lKHQpID09IFwib2JqZWN0XCIgfHwgdHlwZW9mIHQgPT0gXCJmdW5jdGlvblwiKSlcbiAgICByZXR1cm4gdDtcbiAgaWYgKHQgIT09IHZvaWQgMClcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiRGVyaXZlZCBjb25zdHJ1Y3RvcnMgbWF5IG9ubHkgcmV0dXJuIG9iamVjdCBvciB1bmRlZmluZWRcIik7XG4gIHJldHVybiBvMChlKTtcbn1cbmZ1bmN0aW9uIEUwKGUpIHtcbiAgdmFyIHQgPSBvcCgpO1xuICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgdmFyIG8sIG4gPSBBNChlKTtcbiAgICBpZiAodCkge1xuICAgICAgdmFyIHIgPSBBNCh0aGlzKS5jb25zdHJ1Y3RvcjtcbiAgICAgIG8gPSBSZWZsZWN0LmNvbnN0cnVjdChuLCBhcmd1bWVudHMsIHIpO1xuICAgIH0gZWxzZVxuICAgICAgbyA9IG4uYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgICByZXR1cm4gbXcodGhpcywgbyk7XG4gIH07XG59XG5mdW5jdGlvbiB5MChlLCB0KSB7XG4gIGlmICghKGUgaW5zdGFuY2VvZiB0KSlcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uXCIpO1xufVxuZnVuY3Rpb24gTHcoZSwgdCkge1xuICBpZiAoTWUoZSkgIT0gXCJvYmplY3RcIiB8fCAhZSlcbiAgICByZXR1cm4gZTtcbiAgdmFyIG8gPSBlW1N5bWJvbC50b1ByaW1pdGl2ZV07XG4gIGlmIChvICE9PSB2b2lkIDApIHtcbiAgICB2YXIgbiA9IG8uY2FsbChlLCB0IHx8IFwiZGVmYXVsdFwiKTtcbiAgICBpZiAoTWUobikgIT0gXCJvYmplY3RcIilcbiAgICAgIHJldHVybiBuO1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLlwiKTtcbiAgfVxuICByZXR1cm4gKHQgPT09IFwic3RyaW5nXCIgPyBTdHJpbmcgOiBOdW1iZXIpKGUpO1xufVxuZnVuY3Rpb24gcnAoZSkge1xuICB2YXIgdCA9IEx3KGUsIFwic3RyaW5nXCIpO1xuICByZXR1cm4gTWUodCkgPT0gXCJzeW1ib2xcIiA/IHQgOiB0ICsgXCJcIjtcbn1cbmZ1bmN0aW9uIFg4KGUsIHQpIHtcbiAgZm9yICh2YXIgbyA9IDA7IG8gPCB0Lmxlbmd0aDsgbysrKSB7XG4gICAgdmFyIG4gPSB0W29dO1xuICAgIG4uZW51bWVyYWJsZSA9IG4uZW51bWVyYWJsZSB8fCAhMSwgbi5jb25maWd1cmFibGUgPSAhMCwgXCJ2YWx1ZVwiIGluIG4gJiYgKG4ud3JpdGFibGUgPSAhMCksIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCBycChuLmtleSksIG4pO1xuICB9XG59XG5mdW5jdGlvbiB3MChlLCB0LCBvKSB7XG4gIHJldHVybiB0ICYmIFg4KGUucHJvdG90eXBlLCB0KSwgbyAmJiBYOChlLCBvKSwgT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIFwicHJvdG90eXBlXCIsIHtcbiAgICB3cml0YWJsZTogITFcbiAgfSksIGU7XG59XG5mdW5jdGlvbiB0MChlLCB0LCBvKSB7XG4gIHJldHVybiAodCA9IHJwKHQpKSBpbiBlID8gT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIHQsIHtcbiAgICB2YWx1ZTogbyxcbiAgICBlbnVtZXJhYmxlOiAhMCxcbiAgICBjb25maWd1cmFibGU6ICEwLFxuICAgIHdyaXRhYmxlOiAhMFxuICB9KSA6IGVbdF0gPSBvLCBlO1xufVxudmFyIHZ3ID0gMTAsIG5wID0gLyogQF9fUFVSRV9fICovIGZ1bmN0aW9uKCkge1xuICBmdW5jdGlvbiBlKCkge1xuICAgIHkwKHRoaXMsIGUpLCB0MCh0aGlzLCBcInByaW9yaXR5XCIsIHZvaWQgMCksIHQwKHRoaXMsIFwic3ViUHJpb3JpdHlcIiwgMCk7XG4gIH1cbiAgcmV0dXJuIHcwKGUsIFt7XG4gICAga2V5OiBcInZhbGlkYXRlXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uKG8sIG4pIHtcbiAgICAgIHJldHVybiAhMDtcbiAgICB9XG4gIH1dKSwgZTtcbn0oKSwgcXcgPSAvKiBAX19QVVJFX18gKi8gZnVuY3Rpb24oZSkge1xuICBTMChvLCBlKTtcbiAgdmFyIHQgPSBFMChvKTtcbiAgZnVuY3Rpb24gbyhuLCByLCBpLCBhLCBzKSB7XG4gICAgdmFyIGw7XG4gICAgcmV0dXJuIHkwKHRoaXMsIG8pLCBsID0gdC5jYWxsKHRoaXMpLCBsLnZhbHVlID0gbiwgbC52YWxpZGF0ZVZhbHVlID0gciwgbC5zZXRWYWx1ZSA9IGksIGwucHJpb3JpdHkgPSBhLCBzICYmIChsLnN1YlByaW9yaXR5ID0gcyksIGw7XG4gIH1cbiAgcmV0dXJuIHcwKG8sIFt7XG4gICAga2V5OiBcInZhbGlkYXRlXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uKHIsIGkpIHtcbiAgICAgIHJldHVybiB0aGlzLnZhbGlkYXRlVmFsdWUociwgdGhpcy52YWx1ZSwgaSk7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcInNldFwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbihyLCBpLCBhKSB7XG4gICAgICByZXR1cm4gdGhpcy5zZXRWYWx1ZShyLCBpLCB0aGlzLnZhbHVlLCBhKTtcbiAgICB9XG4gIH1dKSwgbztcbn0obnApLCB5dyA9IC8qIEBfX1BVUkVfXyAqLyBmdW5jdGlvbihlKSB7XG4gIFMwKG8sIGUpO1xuICB2YXIgdCA9IEUwKG8pO1xuICBmdW5jdGlvbiBvKCkge1xuICAgIHZhciBuO1xuICAgIHkwKHRoaXMsIG8pO1xuICAgIGZvciAodmFyIHIgPSBhcmd1bWVudHMubGVuZ3RoLCBpID0gbmV3IEFycmF5KHIpLCBhID0gMDsgYSA8IHI7IGErKylcbiAgICAgIGlbYV0gPSBhcmd1bWVudHNbYV07XG4gICAgcmV0dXJuIG4gPSB0LmNhbGwuYXBwbHkodCwgW3RoaXNdLmNvbmNhdChpKSksIHQwKG8wKG4pLCBcInByaW9yaXR5XCIsIHZ3KSwgdDAobzAobiksIFwic3ViUHJpb3JpdHlcIiwgLTEpLCBuO1xuICB9XG4gIHJldHVybiB3MChvLCBbe1xuICAgIGtleTogXCJzZXRcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24ociwgaSkge1xuICAgICAgaWYgKGkudGltZXN0YW1wSXNTZXQpXG4gICAgICAgIHJldHVybiByO1xuICAgICAgdmFyIGEgPSAvKiBAX19QVVJFX18gKi8gbmV3IERhdGUoMCk7XG4gICAgICByZXR1cm4gYS5zZXRGdWxsWWVhcihyLmdldFVUQ0Z1bGxZZWFyKCksIHIuZ2V0VVRDTW9udGgoKSwgci5nZXRVVENEYXRlKCkpLCBhLnNldEhvdXJzKHIuZ2V0VVRDSG91cnMoKSwgci5nZXRVVENNaW51dGVzKCksIHIuZ2V0VVRDU2Vjb25kcygpLCByLmdldFVUQ01pbGxpc2Vjb25kcygpKSwgYTtcbiAgICB9XG4gIH1dKSwgbztcbn0obnApLCBUMCA9IC8qIEBfX1BVUkVfXyAqLyBmdW5jdGlvbigpIHtcbiAgZnVuY3Rpb24gZSgpIHtcbiAgICB5MCh0aGlzLCBlKSwgdDAodGhpcywgXCJpbmNvbXBhdGlibGVUb2tlbnNcIiwgdm9pZCAwKSwgdDAodGhpcywgXCJwcmlvcml0eVwiLCB2b2lkIDApLCB0MCh0aGlzLCBcInN1YlByaW9yaXR5XCIsIHZvaWQgMCk7XG4gIH1cbiAgcmV0dXJuIHcwKGUsIFt7XG4gICAga2V5OiBcInJ1blwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbihvLCBuLCByLCBpKSB7XG4gICAgICB2YXIgYSA9IHRoaXMucGFyc2UobywgbiwgciwgaSk7XG4gICAgICByZXR1cm4gYSA/IHtcbiAgICAgICAgc2V0dGVyOiBuZXcgcXcoYS52YWx1ZSwgdGhpcy52YWxpZGF0ZSwgdGhpcy5zZXQsIHRoaXMucHJpb3JpdHksIHRoaXMuc3ViUHJpb3JpdHkpLFxuICAgICAgICByZXN0OiBhLnJlc3RcbiAgICAgIH0gOiBudWxsO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJ2YWxpZGF0ZVwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbihvLCBuLCByKSB7XG4gICAgICByZXR1cm4gITA7XG4gICAgfVxuICB9XSksIGU7XG59KCksIHd3ID0gLyogQF9fUFVSRV9fICovIGZ1bmN0aW9uKGUpIHtcbiAgUzAobywgZSk7XG4gIHZhciB0ID0gRTAobyk7XG4gIGZ1bmN0aW9uIG8oKSB7XG4gICAgdmFyIG47XG4gICAgeTAodGhpcywgbyk7XG4gICAgZm9yICh2YXIgciA9IGFyZ3VtZW50cy5sZW5ndGgsIGkgPSBuZXcgQXJyYXkociksIGEgPSAwOyBhIDwgcjsgYSsrKVxuICAgICAgaVthXSA9IGFyZ3VtZW50c1thXTtcbiAgICByZXR1cm4gbiA9IHQuY2FsbC5hcHBseSh0LCBbdGhpc10uY29uY2F0KGkpKSwgdDAobzAobiksIFwicHJpb3JpdHlcIiwgMTQwKSwgdDAobzAobiksIFwiaW5jb21wYXRpYmxlVG9rZW5zXCIsIFtcIlJcIiwgXCJ1XCIsIFwidFwiLCBcIlRcIl0pLCBuO1xuICB9XG4gIHJldHVybiB3MChvLCBbe1xuICAgIGtleTogXCJwYXJzZVwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbihyLCBpLCBhKSB7XG4gICAgICBzd2l0Y2ggKGkpIHtcbiAgICAgICAgY2FzZSBcIkdcIjpcbiAgICAgICAgY2FzZSBcIkdHXCI6XG4gICAgICAgIGNhc2UgXCJHR0dcIjpcbiAgICAgICAgICByZXR1cm4gYS5lcmEociwge1xuICAgICAgICAgICAgd2lkdGg6IFwiYWJicmV2aWF0ZWRcIlxuICAgICAgICAgIH0pIHx8IGEuZXJhKHIsIHtcbiAgICAgICAgICAgIHdpZHRoOiBcIm5hcnJvd1wiXG4gICAgICAgICAgfSk7XG4gICAgICAgIGNhc2UgXCJHR0dHR1wiOlxuICAgICAgICAgIHJldHVybiBhLmVyYShyLCB7XG4gICAgICAgICAgICB3aWR0aDogXCJuYXJyb3dcIlxuICAgICAgICAgIH0pO1xuICAgICAgICBjYXNlIFwiR0dHR1wiOlxuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIHJldHVybiBhLmVyYShyLCB7XG4gICAgICAgICAgICB3aWR0aDogXCJ3aWRlXCJcbiAgICAgICAgICB9KSB8fCBhLmVyYShyLCB7XG4gICAgICAgICAgICB3aWR0aDogXCJhYmJyZXZpYXRlZFwiXG4gICAgICAgICAgfSkgfHwgYS5lcmEociwge1xuICAgICAgICAgICAgd2lkdGg6IFwibmFycm93XCJcbiAgICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwic2V0XCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uKHIsIGksIGEpIHtcbiAgICAgIHJldHVybiBpLmVyYSA9IGEsIHIuc2V0VVRDRnVsbFllYXIoYSwgMCwgMSksIHIuc2V0VVRDSG91cnMoMCwgMCwgMCwgMCksIHI7XG4gICAgfVxuICB9XSksIG87XG59KFQwKSwgYzIgPSB7XG4gIG1vbnRoOiAvXigxWzAtMl18MD9cXGQpLyxcbiAgLy8gMCB0byAxMlxuICBkYXRlOiAvXigzWzAtMV18WzAtMl0/XFxkKS8sXG4gIC8vIDAgdG8gMzFcbiAgZGF5T2ZZZWFyOiAvXigzNlswLTZdfDNbMC01XVxcZHxbMC0yXT9cXGQ/XFxkKS8sXG4gIC8vIDAgdG8gMzY2XG4gIHdlZWs6IC9eKDVbMC0zXXxbMC00XT9cXGQpLyxcbiAgLy8gMCB0byA1M1xuICBob3VyMjNoOiAvXigyWzAtM118WzAtMV0/XFxkKS8sXG4gIC8vIDAgdG8gMjNcbiAgaG91cjI0aDogL14oMlswLTRdfFswLTFdP1xcZCkvLFxuICAvLyAwIHRvIDI0XG4gIGhvdXIxMWg6IC9eKDFbMC0xXXwwP1xcZCkvLFxuICAvLyAwIHRvIDExXG4gIGhvdXIxMmg6IC9eKDFbMC0yXXwwP1xcZCkvLFxuICAvLyAwIHRvIDEyXG4gIG1pbnV0ZTogL15bMC01XT9cXGQvLFxuICAvLyAwIHRvIDU5XG4gIHNlY29uZDogL15bMC01XT9cXGQvLFxuICAvLyAwIHRvIDU5XG4gIHNpbmdsZURpZ2l0OiAvXlxcZC8sXG4gIC8vIDAgdG8gOVxuICB0d29EaWdpdHM6IC9eXFxkezEsMn0vLFxuICAvLyAwIHRvIDk5XG4gIHRocmVlRGlnaXRzOiAvXlxcZHsxLDN9LyxcbiAgLy8gMCB0byA5OTlcbiAgZm91ckRpZ2l0czogL15cXGR7MSw0fS8sXG4gIC8vIDAgdG8gOTk5OVxuICBhbnlEaWdpdHNTaWduZWQ6IC9eLT9cXGQrLyxcbiAgc2luZ2xlRGlnaXRTaWduZWQ6IC9eLT9cXGQvLFxuICAvLyAwIHRvIDksIC0wIHRvIC05XG4gIHR3b0RpZ2l0c1NpZ25lZDogL14tP1xcZHsxLDJ9LyxcbiAgLy8gMCB0byA5OSwgLTAgdG8gLTk5XG4gIHRocmVlRGlnaXRzU2lnbmVkOiAvXi0/XFxkezEsM30vLFxuICAvLyAwIHRvIDk5OSwgLTAgdG8gLTk5OVxuICBmb3VyRGlnaXRzU2lnbmVkOiAvXi0/XFxkezEsNH0vXG4gIC8vIDAgdG8gOTk5OSwgLTAgdG8gLTk5OTlcbn0sIGtlID0ge1xuICBiYXNpY09wdGlvbmFsTWludXRlczogL14oWystXSkoXFxkezJ9KShcXGR7Mn0pP3xaLyxcbiAgYmFzaWM6IC9eKFsrLV0pKFxcZHsyfSkoXFxkezJ9KXxaLyxcbiAgYmFzaWNPcHRpb25hbFNlY29uZHM6IC9eKFsrLV0pKFxcZHsyfSkoXFxkezJ9KSgoXFxkezJ9KSk/fFovLFxuICBleHRlbmRlZDogL14oWystXSkoXFxkezJ9KTooXFxkezJ9KXxaLyxcbiAgZXh0ZW5kZWRPcHRpb25hbFNlY29uZHM6IC9eKFsrLV0pKFxcZHsyfSk6KFxcZHsyfSkoOihcXGR7Mn0pKT98Wi9cbn07XG5mdW5jdGlvbiBsMihlLCB0KSB7XG4gIHJldHVybiBlICYmIHtcbiAgICB2YWx1ZTogdChlLnZhbHVlKSxcbiAgICByZXN0OiBlLnJlc3RcbiAgfTtcbn1cbmZ1bmN0aW9uIG8yKGUsIHQpIHtcbiAgdmFyIG8gPSB0Lm1hdGNoKGUpO1xuICByZXR1cm4gbyA/IHtcbiAgICB2YWx1ZTogcGFyc2VJbnQob1swXSwgMTApLFxuICAgIHJlc3Q6IHQuc2xpY2Uob1swXS5sZW5ndGgpXG4gIH0gOiBudWxsO1xufVxuZnVuY3Rpb24gTmUoZSwgdCkge1xuICB2YXIgbyA9IHQubWF0Y2goZSk7XG4gIGlmICghbylcbiAgICByZXR1cm4gbnVsbDtcbiAgaWYgKG9bMF0gPT09IFwiWlwiKVxuICAgIHJldHVybiB7XG4gICAgICB2YWx1ZTogMCxcbiAgICAgIHJlc3Q6IHQuc2xpY2UoMSlcbiAgICB9O1xuICB2YXIgbiA9IG9bMV0gPT09IFwiK1wiID8gMSA6IC0xLCByID0gb1syXSA/IHBhcnNlSW50KG9bMl0sIDEwKSA6IDAsIGkgPSBvWzNdID8gcGFyc2VJbnQob1szXSwgMTApIDogMCwgYSA9IG9bNV0gPyBwYXJzZUludChvWzVdLCAxMCkgOiAwO1xuICByZXR1cm4ge1xuICAgIHZhbHVlOiBuICogKHIgKiB0NiArIGkgKiBlNiArIGEgKiAkcSksXG4gICAgcmVzdDogdC5zbGljZShvWzBdLmxlbmd0aClcbiAgfTtcbn1cbmZ1bmN0aW9uIGlwKGUpIHtcbiAgcmV0dXJuIG8yKGMyLmFueURpZ2l0c1NpZ25lZCwgZSk7XG59XG5mdW5jdGlvbiBpMihlLCB0KSB7XG4gIHN3aXRjaCAoZSkge1xuICAgIGNhc2UgMTpcbiAgICAgIHJldHVybiBvMihjMi5zaW5nbGVEaWdpdCwgdCk7XG4gICAgY2FzZSAyOlxuICAgICAgcmV0dXJuIG8yKGMyLnR3b0RpZ2l0cywgdCk7XG4gICAgY2FzZSAzOlxuICAgICAgcmV0dXJuIG8yKGMyLnRocmVlRGlnaXRzLCB0KTtcbiAgICBjYXNlIDQ6XG4gICAgICByZXR1cm4gbzIoYzIuZm91ckRpZ2l0cywgdCk7XG4gICAgZGVmYXVsdDpcbiAgICAgIHJldHVybiBvMihuZXcgUmVnRXhwKFwiXlxcXFxkezEsXCIgKyBlICsgXCJ9XCIpLCB0KTtcbiAgfVxufVxuZnVuY3Rpb24gdTQoZSwgdCkge1xuICBzd2l0Y2ggKGUpIHtcbiAgICBjYXNlIDE6XG4gICAgICByZXR1cm4gbzIoYzIuc2luZ2xlRGlnaXRTaWduZWQsIHQpO1xuICAgIGNhc2UgMjpcbiAgICAgIHJldHVybiBvMihjMi50d29EaWdpdHNTaWduZWQsIHQpO1xuICAgIGNhc2UgMzpcbiAgICAgIHJldHVybiBvMihjMi50aHJlZURpZ2l0c1NpZ25lZCwgdCk7XG4gICAgY2FzZSA0OlxuICAgICAgcmV0dXJuIG8yKGMyLmZvdXJEaWdpdHNTaWduZWQsIHQpO1xuICAgIGRlZmF1bHQ6XG4gICAgICByZXR1cm4gbzIobmV3IFJlZ0V4cChcIl4tP1xcXFxkezEsXCIgKyBlICsgXCJ9XCIpLCB0KTtcbiAgfVxufVxuZnVuY3Rpb24gaTYoZSkge1xuICBzd2l0Y2ggKGUpIHtcbiAgICBjYXNlIFwibW9ybmluZ1wiOlxuICAgICAgcmV0dXJuIDQ7XG4gICAgY2FzZSBcImV2ZW5pbmdcIjpcbiAgICAgIHJldHVybiAxNztcbiAgICBjYXNlIFwicG1cIjpcbiAgICBjYXNlIFwibm9vblwiOlxuICAgIGNhc2UgXCJhZnRlcm5vb25cIjpcbiAgICAgIHJldHVybiAxMjtcbiAgICBjYXNlIFwiYW1cIjpcbiAgICBjYXNlIFwibWlkbmlnaHRcIjpcbiAgICBjYXNlIFwibmlnaHRcIjpcbiAgICBkZWZhdWx0OlxuICAgICAgcmV0dXJuIDA7XG4gIH1cbn1cbmZ1bmN0aW9uIGFwKGUsIHQpIHtcbiAgdmFyIG8gPSB0ID4gMCwgbiA9IG8gPyB0IDogMSAtIHQsIHI7XG4gIGlmIChuIDw9IDUwKVxuICAgIHIgPSBlIHx8IDEwMDtcbiAgZWxzZSB7XG4gICAgdmFyIGkgPSBuICsgNTAsIGEgPSBNYXRoLmZsb29yKGkgLyAxMDApICogMTAwLCBzID0gZSA+PSBpICUgMTAwO1xuICAgIHIgPSBlICsgYSAtIChzID8gMTAwIDogMCk7XG4gIH1cbiAgcmV0dXJuIG8gPyByIDogMSAtIHI7XG59XG5mdW5jdGlvbiBzcChlKSB7XG4gIHJldHVybiBlICUgNDAwID09PSAwIHx8IGUgJSA0ID09PSAwICYmIGUgJSAxMDAgIT09IDA7XG59XG52YXIgeHcgPSAvKiBAX19QVVJFX18gKi8gZnVuY3Rpb24oZSkge1xuICBTMChvLCBlKTtcbiAgdmFyIHQgPSBFMChvKTtcbiAgZnVuY3Rpb24gbygpIHtcbiAgICB2YXIgbjtcbiAgICB5MCh0aGlzLCBvKTtcbiAgICBmb3IgKHZhciByID0gYXJndW1lbnRzLmxlbmd0aCwgaSA9IG5ldyBBcnJheShyKSwgYSA9IDA7IGEgPCByOyBhKyspXG4gICAgICBpW2FdID0gYXJndW1lbnRzW2FdO1xuICAgIHJldHVybiBuID0gdC5jYWxsLmFwcGx5KHQsIFt0aGlzXS5jb25jYXQoaSkpLCB0MChvMChuKSwgXCJwcmlvcml0eVwiLCAxMzApLCB0MChvMChuKSwgXCJpbmNvbXBhdGlibGVUb2tlbnNcIiwgW1wiWVwiLCBcIlJcIiwgXCJ1XCIsIFwid1wiLCBcIklcIiwgXCJpXCIsIFwiZVwiLCBcImNcIiwgXCJ0XCIsIFwiVFwiXSksIG47XG4gIH1cbiAgcmV0dXJuIHcwKG8sIFt7XG4gICAga2V5OiBcInBhcnNlXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uKHIsIGksIGEpIHtcbiAgICAgIHZhciBzID0gZnVuY3Rpb24ocCkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIHllYXI6IHAsXG4gICAgICAgICAgaXNUd29EaWdpdFllYXI6IGkgPT09IFwieXlcIlxuICAgICAgICB9O1xuICAgICAgfTtcbiAgICAgIHN3aXRjaCAoaSkge1xuICAgICAgICBjYXNlIFwieVwiOlxuICAgICAgICAgIHJldHVybiBsMihpMig0LCByKSwgcyk7XG4gICAgICAgIGNhc2UgXCJ5b1wiOlxuICAgICAgICAgIHJldHVybiBsMihhLm9yZGluYWxOdW1iZXIociwge1xuICAgICAgICAgICAgdW5pdDogXCJ5ZWFyXCJcbiAgICAgICAgICB9KSwgcyk7XG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgcmV0dXJuIGwyKGkyKGkubGVuZ3RoLCByKSwgcyk7XG4gICAgICB9XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcInZhbGlkYXRlXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uKHIsIGkpIHtcbiAgICAgIHJldHVybiBpLmlzVHdvRGlnaXRZZWFyIHx8IGkueWVhciA+IDA7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcInNldFwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbihyLCBpLCBhKSB7XG4gICAgICB2YXIgcyA9IHIuZ2V0VVRDRnVsbFllYXIoKTtcbiAgICAgIGlmIChhLmlzVHdvRGlnaXRZZWFyKSB7XG4gICAgICAgIHZhciBsID0gYXAoYS55ZWFyLCBzKTtcbiAgICAgICAgcmV0dXJuIHIuc2V0VVRDRnVsbFllYXIobCwgMCwgMSksIHIuc2V0VVRDSG91cnMoMCwgMCwgMCwgMCksIHI7XG4gICAgICB9XG4gICAgICB2YXIgcCA9ICEoXCJlcmFcIiBpbiBpKSB8fCBpLmVyYSA9PT0gMSA/IGEueWVhciA6IDEgLSBhLnllYXI7XG4gICAgICByZXR1cm4gci5zZXRVVENGdWxsWWVhcihwLCAwLCAxKSwgci5zZXRVVENIb3VycygwLCAwLCAwLCAwKSwgcjtcbiAgICB9XG4gIH1dKSwgbztcbn0oVDApLCBXdyA9IC8qIEBfX1BVUkVfXyAqLyBmdW5jdGlvbihlKSB7XG4gIFMwKG8sIGUpO1xuICB2YXIgdCA9IEUwKG8pO1xuICBmdW5jdGlvbiBvKCkge1xuICAgIHZhciBuO1xuICAgIHkwKHRoaXMsIG8pO1xuICAgIGZvciAodmFyIHIgPSBhcmd1bWVudHMubGVuZ3RoLCBpID0gbmV3IEFycmF5KHIpLCBhID0gMDsgYSA8IHI7IGErKylcbiAgICAgIGlbYV0gPSBhcmd1bWVudHNbYV07XG4gICAgcmV0dXJuIG4gPSB0LmNhbGwuYXBwbHkodCwgW3RoaXNdLmNvbmNhdChpKSksIHQwKG8wKG4pLCBcInByaW9yaXR5XCIsIDEzMCksIHQwKG8wKG4pLCBcImluY29tcGF0aWJsZVRva2Vuc1wiLCBbXCJ5XCIsIFwiUlwiLCBcInVcIiwgXCJRXCIsIFwicVwiLCBcIk1cIiwgXCJMXCIsIFwiSVwiLCBcImRcIiwgXCJEXCIsIFwiaVwiLCBcInRcIiwgXCJUXCJdKSwgbjtcbiAgfVxuICByZXR1cm4gdzAobywgW3tcbiAgICBrZXk6IFwicGFyc2VcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24ociwgaSwgYSkge1xuICAgICAgdmFyIHMgPSBmdW5jdGlvbihwKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgeWVhcjogcCxcbiAgICAgICAgICBpc1R3b0RpZ2l0WWVhcjogaSA9PT0gXCJZWVwiXG4gICAgICAgIH07XG4gICAgICB9O1xuICAgICAgc3dpdGNoIChpKSB7XG4gICAgICAgIGNhc2UgXCJZXCI6XG4gICAgICAgICAgcmV0dXJuIGwyKGkyKDQsIHIpLCBzKTtcbiAgICAgICAgY2FzZSBcIllvXCI6XG4gICAgICAgICAgcmV0dXJuIGwyKGEub3JkaW5hbE51bWJlcihyLCB7XG4gICAgICAgICAgICB1bml0OiBcInllYXJcIlxuICAgICAgICAgIH0pLCBzKTtcbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICByZXR1cm4gbDIoaTIoaS5sZW5ndGgsIHIpLCBzKTtcbiAgICAgIH1cbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwidmFsaWRhdGVcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24ociwgaSkge1xuICAgICAgcmV0dXJuIGkuaXNUd29EaWdpdFllYXIgfHwgaS55ZWFyID4gMDtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwic2V0XCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uKHIsIGksIGEsIHMpIHtcbiAgICAgIHZhciBsID0gbzYociwgcyk7XG4gICAgICBpZiAoYS5pc1R3b0RpZ2l0WWVhcikge1xuICAgICAgICB2YXIgcCA9IGFwKGEueWVhciwgbCk7XG4gICAgICAgIHJldHVybiByLnNldFVUQ0Z1bGxZZWFyKHAsIDAsIHMuZmlyc3RXZWVrQ29udGFpbnNEYXRlKSwgci5zZXRVVENIb3VycygwLCAwLCAwLCAwKSwgdTMociwgcyk7XG4gICAgICB9XG4gICAgICB2YXIgZCA9ICEoXCJlcmFcIiBpbiBpKSB8fCBpLmVyYSA9PT0gMSA/IGEueWVhciA6IDEgLSBhLnllYXI7XG4gICAgICByZXR1cm4gci5zZXRVVENGdWxsWWVhcihkLCAwLCBzLmZpcnN0V2Vla0NvbnRhaW5zRGF0ZSksIHIuc2V0VVRDSG91cnMoMCwgMCwgMCwgMCksIHUzKHIsIHMpO1xuICAgIH1cbiAgfV0pLCBvO1xufShUMCksIFJ3ID0gLyogQF9fUFVSRV9fICovIGZ1bmN0aW9uKGUpIHtcbiAgUzAobywgZSk7XG4gIHZhciB0ID0gRTAobyk7XG4gIGZ1bmN0aW9uIG8oKSB7XG4gICAgdmFyIG47XG4gICAgeTAodGhpcywgbyk7XG4gICAgZm9yICh2YXIgciA9IGFyZ3VtZW50cy5sZW5ndGgsIGkgPSBuZXcgQXJyYXkociksIGEgPSAwOyBhIDwgcjsgYSsrKVxuICAgICAgaVthXSA9IGFyZ3VtZW50c1thXTtcbiAgICByZXR1cm4gbiA9IHQuY2FsbC5hcHBseSh0LCBbdGhpc10uY29uY2F0KGkpKSwgdDAobzAobiksIFwicHJpb3JpdHlcIiwgMTMwKSwgdDAobzAobiksIFwiaW5jb21wYXRpYmxlVG9rZW5zXCIsIFtcIkdcIiwgXCJ5XCIsIFwiWVwiLCBcInVcIiwgXCJRXCIsIFwicVwiLCBcIk1cIiwgXCJMXCIsIFwid1wiLCBcImRcIiwgXCJEXCIsIFwiZVwiLCBcImNcIiwgXCJ0XCIsIFwiVFwiXSksIG47XG4gIH1cbiAgcmV0dXJuIHcwKG8sIFt7XG4gICAga2V5OiBcInBhcnNlXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uKHIsIGkpIHtcbiAgICAgIHJldHVybiB1NChpID09PSBcIlJcIiA/IDQgOiBpLmxlbmd0aCwgcik7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcInNldFwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbihyLCBpLCBhKSB7XG4gICAgICB2YXIgcyA9IC8qIEBfX1BVUkVfXyAqLyBuZXcgRGF0ZSgwKTtcbiAgICAgIHJldHVybiBzLnNldFVUQ0Z1bGxZZWFyKGEsIDAsIDQpLCBzLnNldFVUQ0hvdXJzKDAsIDAsIDAsIDApLCBKMyhzKTtcbiAgICB9XG4gIH1dKSwgbztcbn0oVDApLCBCdyA9IC8qIEBfX1BVUkVfXyAqLyBmdW5jdGlvbihlKSB7XG4gIFMwKG8sIGUpO1xuICB2YXIgdCA9IEUwKG8pO1xuICBmdW5jdGlvbiBvKCkge1xuICAgIHZhciBuO1xuICAgIHkwKHRoaXMsIG8pO1xuICAgIGZvciAodmFyIHIgPSBhcmd1bWVudHMubGVuZ3RoLCBpID0gbmV3IEFycmF5KHIpLCBhID0gMDsgYSA8IHI7IGErKylcbiAgICAgIGlbYV0gPSBhcmd1bWVudHNbYV07XG4gICAgcmV0dXJuIG4gPSB0LmNhbGwuYXBwbHkodCwgW3RoaXNdLmNvbmNhdChpKSksIHQwKG8wKG4pLCBcInByaW9yaXR5XCIsIDEzMCksIHQwKG8wKG4pLCBcImluY29tcGF0aWJsZVRva2Vuc1wiLCBbXCJHXCIsIFwieVwiLCBcIllcIiwgXCJSXCIsIFwid1wiLCBcIklcIiwgXCJpXCIsIFwiZVwiLCBcImNcIiwgXCJ0XCIsIFwiVFwiXSksIG47XG4gIH1cbiAgcmV0dXJuIHcwKG8sIFt7XG4gICAga2V5OiBcInBhcnNlXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uKHIsIGkpIHtcbiAgICAgIHJldHVybiB1NChpID09PSBcInVcIiA/IDQgOiBpLmxlbmd0aCwgcik7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcInNldFwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbihyLCBpLCBhKSB7XG4gICAgICByZXR1cm4gci5zZXRVVENGdWxsWWVhcihhLCAwLCAxKSwgci5zZXRVVENIb3VycygwLCAwLCAwLCAwKSwgcjtcbiAgICB9XG4gIH1dKSwgbztcbn0oVDApLCBTdyA9IC8qIEBfX1BVUkVfXyAqLyBmdW5jdGlvbihlKSB7XG4gIFMwKG8sIGUpO1xuICB2YXIgdCA9IEUwKG8pO1xuICBmdW5jdGlvbiBvKCkge1xuICAgIHZhciBuO1xuICAgIHkwKHRoaXMsIG8pO1xuICAgIGZvciAodmFyIHIgPSBhcmd1bWVudHMubGVuZ3RoLCBpID0gbmV3IEFycmF5KHIpLCBhID0gMDsgYSA8IHI7IGErKylcbiAgICAgIGlbYV0gPSBhcmd1bWVudHNbYV07XG4gICAgcmV0dXJuIG4gPSB0LmNhbGwuYXBwbHkodCwgW3RoaXNdLmNvbmNhdChpKSksIHQwKG8wKG4pLCBcInByaW9yaXR5XCIsIDEyMCksIHQwKG8wKG4pLCBcImluY29tcGF0aWJsZVRva2Vuc1wiLCBbXCJZXCIsIFwiUlwiLCBcInFcIiwgXCJNXCIsIFwiTFwiLCBcIndcIiwgXCJJXCIsIFwiZFwiLCBcIkRcIiwgXCJpXCIsIFwiZVwiLCBcImNcIiwgXCJ0XCIsIFwiVFwiXSksIG47XG4gIH1cbiAgcmV0dXJuIHcwKG8sIFt7XG4gICAga2V5OiBcInBhcnNlXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uKHIsIGksIGEpIHtcbiAgICAgIHN3aXRjaCAoaSkge1xuICAgICAgICBjYXNlIFwiUVwiOlxuICAgICAgICBjYXNlIFwiUVFcIjpcbiAgICAgICAgICByZXR1cm4gaTIoaS5sZW5ndGgsIHIpO1xuICAgICAgICBjYXNlIFwiUW9cIjpcbiAgICAgICAgICByZXR1cm4gYS5vcmRpbmFsTnVtYmVyKHIsIHtcbiAgICAgICAgICAgIHVuaXQ6IFwicXVhcnRlclwiXG4gICAgICAgICAgfSk7XG4gICAgICAgIGNhc2UgXCJRUVFcIjpcbiAgICAgICAgICByZXR1cm4gYS5xdWFydGVyKHIsIHtcbiAgICAgICAgICAgIHdpZHRoOiBcImFiYnJldmlhdGVkXCIsXG4gICAgICAgICAgICBjb250ZXh0OiBcImZvcm1hdHRpbmdcIlxuICAgICAgICAgIH0pIHx8IGEucXVhcnRlcihyLCB7XG4gICAgICAgICAgICB3aWR0aDogXCJuYXJyb3dcIixcbiAgICAgICAgICAgIGNvbnRleHQ6IFwiZm9ybWF0dGluZ1wiXG4gICAgICAgICAgfSk7XG4gICAgICAgIGNhc2UgXCJRUVFRUVwiOlxuICAgICAgICAgIHJldHVybiBhLnF1YXJ0ZXIociwge1xuICAgICAgICAgICAgd2lkdGg6IFwibmFycm93XCIsXG4gICAgICAgICAgICBjb250ZXh0OiBcImZvcm1hdHRpbmdcIlxuICAgICAgICAgIH0pO1xuICAgICAgICBjYXNlIFwiUVFRUVwiOlxuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIHJldHVybiBhLnF1YXJ0ZXIociwge1xuICAgICAgICAgICAgd2lkdGg6IFwid2lkZVwiLFxuICAgICAgICAgICAgY29udGV4dDogXCJmb3JtYXR0aW5nXCJcbiAgICAgICAgICB9KSB8fCBhLnF1YXJ0ZXIociwge1xuICAgICAgICAgICAgd2lkdGg6IFwiYWJicmV2aWF0ZWRcIixcbiAgICAgICAgICAgIGNvbnRleHQ6IFwiZm9ybWF0dGluZ1wiXG4gICAgICAgICAgfSkgfHwgYS5xdWFydGVyKHIsIHtcbiAgICAgICAgICAgIHdpZHRoOiBcIm5hcnJvd1wiLFxuICAgICAgICAgICAgY29udGV4dDogXCJmb3JtYXR0aW5nXCJcbiAgICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwidmFsaWRhdGVcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24ociwgaSkge1xuICAgICAgcmV0dXJuIGkgPj0gMSAmJiBpIDw9IDQ7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcInNldFwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbihyLCBpLCBhKSB7XG4gICAgICByZXR1cm4gci5zZXRVVENNb250aCgoYSAtIDEpICogMywgMSksIHIuc2V0VVRDSG91cnMoMCwgMCwgMCwgMCksIHI7XG4gICAgfVxuICB9XSksIG87XG59KFQwKSwgRXcgPSAvKiBAX19QVVJFX18gKi8gZnVuY3Rpb24oZSkge1xuICBTMChvLCBlKTtcbiAgdmFyIHQgPSBFMChvKTtcbiAgZnVuY3Rpb24gbygpIHtcbiAgICB2YXIgbjtcbiAgICB5MCh0aGlzLCBvKTtcbiAgICBmb3IgKHZhciByID0gYXJndW1lbnRzLmxlbmd0aCwgaSA9IG5ldyBBcnJheShyKSwgYSA9IDA7IGEgPCByOyBhKyspXG4gICAgICBpW2FdID0gYXJndW1lbnRzW2FdO1xuICAgIHJldHVybiBuID0gdC5jYWxsLmFwcGx5KHQsIFt0aGlzXS5jb25jYXQoaSkpLCB0MChvMChuKSwgXCJwcmlvcml0eVwiLCAxMjApLCB0MChvMChuKSwgXCJpbmNvbXBhdGlibGVUb2tlbnNcIiwgW1wiWVwiLCBcIlJcIiwgXCJRXCIsIFwiTVwiLCBcIkxcIiwgXCJ3XCIsIFwiSVwiLCBcImRcIiwgXCJEXCIsIFwiaVwiLCBcImVcIiwgXCJjXCIsIFwidFwiLCBcIlRcIl0pLCBuO1xuICB9XG4gIHJldHVybiB3MChvLCBbe1xuICAgIGtleTogXCJwYXJzZVwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbihyLCBpLCBhKSB7XG4gICAgICBzd2l0Y2ggKGkpIHtcbiAgICAgICAgY2FzZSBcInFcIjpcbiAgICAgICAgY2FzZSBcInFxXCI6XG4gICAgICAgICAgcmV0dXJuIGkyKGkubGVuZ3RoLCByKTtcbiAgICAgICAgY2FzZSBcInFvXCI6XG4gICAgICAgICAgcmV0dXJuIGEub3JkaW5hbE51bWJlcihyLCB7XG4gICAgICAgICAgICB1bml0OiBcInF1YXJ0ZXJcIlxuICAgICAgICAgIH0pO1xuICAgICAgICBjYXNlIFwicXFxXCI6XG4gICAgICAgICAgcmV0dXJuIGEucXVhcnRlcihyLCB7XG4gICAgICAgICAgICB3aWR0aDogXCJhYmJyZXZpYXRlZFwiLFxuICAgICAgICAgICAgY29udGV4dDogXCJzdGFuZGFsb25lXCJcbiAgICAgICAgICB9KSB8fCBhLnF1YXJ0ZXIociwge1xuICAgICAgICAgICAgd2lkdGg6IFwibmFycm93XCIsXG4gICAgICAgICAgICBjb250ZXh0OiBcInN0YW5kYWxvbmVcIlxuICAgICAgICAgIH0pO1xuICAgICAgICBjYXNlIFwicXFxcXFcIjpcbiAgICAgICAgICByZXR1cm4gYS5xdWFydGVyKHIsIHtcbiAgICAgICAgICAgIHdpZHRoOiBcIm5hcnJvd1wiLFxuICAgICAgICAgICAgY29udGV4dDogXCJzdGFuZGFsb25lXCJcbiAgICAgICAgICB9KTtcbiAgICAgICAgY2FzZSBcInFxcXFcIjpcbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICByZXR1cm4gYS5xdWFydGVyKHIsIHtcbiAgICAgICAgICAgIHdpZHRoOiBcIndpZGVcIixcbiAgICAgICAgICAgIGNvbnRleHQ6IFwic3RhbmRhbG9uZVwiXG4gICAgICAgICAgfSkgfHwgYS5xdWFydGVyKHIsIHtcbiAgICAgICAgICAgIHdpZHRoOiBcImFiYnJldmlhdGVkXCIsXG4gICAgICAgICAgICBjb250ZXh0OiBcInN0YW5kYWxvbmVcIlxuICAgICAgICAgIH0pIHx8IGEucXVhcnRlcihyLCB7XG4gICAgICAgICAgICB3aWR0aDogXCJuYXJyb3dcIixcbiAgICAgICAgICAgIGNvbnRleHQ6IFwic3RhbmRhbG9uZVwiXG4gICAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcInZhbGlkYXRlXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uKHIsIGkpIHtcbiAgICAgIHJldHVybiBpID49IDEgJiYgaSA8PSA0O1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJzZXRcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24ociwgaSwgYSkge1xuICAgICAgcmV0dXJuIHIuc2V0VVRDTW9udGgoKGEgLSAxKSAqIDMsIDEpLCByLnNldFVUQ0hvdXJzKDAsIDAsIDAsIDApLCByO1xuICAgIH1cbiAgfV0pLCBvO1xufShUMCksIGt3ID0gLyogQF9fUFVSRV9fICovIGZ1bmN0aW9uKGUpIHtcbiAgUzAobywgZSk7XG4gIHZhciB0ID0gRTAobyk7XG4gIGZ1bmN0aW9uIG8oKSB7XG4gICAgdmFyIG47XG4gICAgeTAodGhpcywgbyk7XG4gICAgZm9yICh2YXIgciA9IGFyZ3VtZW50cy5sZW5ndGgsIGkgPSBuZXcgQXJyYXkociksIGEgPSAwOyBhIDwgcjsgYSsrKVxuICAgICAgaVthXSA9IGFyZ3VtZW50c1thXTtcbiAgICByZXR1cm4gbiA9IHQuY2FsbC5hcHBseSh0LCBbdGhpc10uY29uY2F0KGkpKSwgdDAobzAobiksIFwiaW5jb21wYXRpYmxlVG9rZW5zXCIsIFtcIllcIiwgXCJSXCIsIFwicVwiLCBcIlFcIiwgXCJMXCIsIFwid1wiLCBcIklcIiwgXCJEXCIsIFwiaVwiLCBcImVcIiwgXCJjXCIsIFwidFwiLCBcIlRcIl0pLCB0MChvMChuKSwgXCJwcmlvcml0eVwiLCAxMTApLCBuO1xuICB9XG4gIHJldHVybiB3MChvLCBbe1xuICAgIGtleTogXCJwYXJzZVwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbihyLCBpLCBhKSB7XG4gICAgICB2YXIgcyA9IGZ1bmN0aW9uKHApIHtcbiAgICAgICAgcmV0dXJuIHAgLSAxO1xuICAgICAgfTtcbiAgICAgIHN3aXRjaCAoaSkge1xuICAgICAgICBjYXNlIFwiTVwiOlxuICAgICAgICAgIHJldHVybiBsMihvMihjMi5tb250aCwgciksIHMpO1xuICAgICAgICBjYXNlIFwiTU1cIjpcbiAgICAgICAgICByZXR1cm4gbDIoaTIoMiwgciksIHMpO1xuICAgICAgICBjYXNlIFwiTW9cIjpcbiAgICAgICAgICByZXR1cm4gbDIoYS5vcmRpbmFsTnVtYmVyKHIsIHtcbiAgICAgICAgICAgIHVuaXQ6IFwibW9udGhcIlxuICAgICAgICAgIH0pLCBzKTtcbiAgICAgICAgY2FzZSBcIk1NTVwiOlxuICAgICAgICAgIHJldHVybiBhLm1vbnRoKHIsIHtcbiAgICAgICAgICAgIHdpZHRoOiBcImFiYnJldmlhdGVkXCIsXG4gICAgICAgICAgICBjb250ZXh0OiBcImZvcm1hdHRpbmdcIlxuICAgICAgICAgIH0pIHx8IGEubW9udGgociwge1xuICAgICAgICAgICAgd2lkdGg6IFwibmFycm93XCIsXG4gICAgICAgICAgICBjb250ZXh0OiBcImZvcm1hdHRpbmdcIlxuICAgICAgICAgIH0pO1xuICAgICAgICBjYXNlIFwiTU1NTU1cIjpcbiAgICAgICAgICByZXR1cm4gYS5tb250aChyLCB7XG4gICAgICAgICAgICB3aWR0aDogXCJuYXJyb3dcIixcbiAgICAgICAgICAgIGNvbnRleHQ6IFwiZm9ybWF0dGluZ1wiXG4gICAgICAgICAgfSk7XG4gICAgICAgIGNhc2UgXCJNTU1NXCI6XG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgcmV0dXJuIGEubW9udGgociwge1xuICAgICAgICAgICAgd2lkdGg6IFwid2lkZVwiLFxuICAgICAgICAgICAgY29udGV4dDogXCJmb3JtYXR0aW5nXCJcbiAgICAgICAgICB9KSB8fCBhLm1vbnRoKHIsIHtcbiAgICAgICAgICAgIHdpZHRoOiBcImFiYnJldmlhdGVkXCIsXG4gICAgICAgICAgICBjb250ZXh0OiBcImZvcm1hdHRpbmdcIlxuICAgICAgICAgIH0pIHx8IGEubW9udGgociwge1xuICAgICAgICAgICAgd2lkdGg6IFwibmFycm93XCIsXG4gICAgICAgICAgICBjb250ZXh0OiBcImZvcm1hdHRpbmdcIlxuICAgICAgICAgIH0pO1xuICAgICAgfVxuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJ2YWxpZGF0ZVwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbihyLCBpKSB7XG4gICAgICByZXR1cm4gaSA+PSAwICYmIGkgPD0gMTE7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcInNldFwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbihyLCBpLCBhKSB7XG4gICAgICByZXR1cm4gci5zZXRVVENNb250aChhLCAxKSwgci5zZXRVVENIb3VycygwLCAwLCAwLCAwKSwgcjtcbiAgICB9XG4gIH1dKSwgbztcbn0oVDApLCBOdyA9IC8qIEBfX1BVUkVfXyAqLyBmdW5jdGlvbihlKSB7XG4gIFMwKG8sIGUpO1xuICB2YXIgdCA9IEUwKG8pO1xuICBmdW5jdGlvbiBvKCkge1xuICAgIHZhciBuO1xuICAgIHkwKHRoaXMsIG8pO1xuICAgIGZvciAodmFyIHIgPSBhcmd1bWVudHMubGVuZ3RoLCBpID0gbmV3IEFycmF5KHIpLCBhID0gMDsgYSA8IHI7IGErKylcbiAgICAgIGlbYV0gPSBhcmd1bWVudHNbYV07XG4gICAgcmV0dXJuIG4gPSB0LmNhbGwuYXBwbHkodCwgW3RoaXNdLmNvbmNhdChpKSksIHQwKG8wKG4pLCBcInByaW9yaXR5XCIsIDExMCksIHQwKG8wKG4pLCBcImluY29tcGF0aWJsZVRva2Vuc1wiLCBbXCJZXCIsIFwiUlwiLCBcInFcIiwgXCJRXCIsIFwiTVwiLCBcIndcIiwgXCJJXCIsIFwiRFwiLCBcImlcIiwgXCJlXCIsIFwiY1wiLCBcInRcIiwgXCJUXCJdKSwgbjtcbiAgfVxuICByZXR1cm4gdzAobywgW3tcbiAgICBrZXk6IFwicGFyc2VcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24ociwgaSwgYSkge1xuICAgICAgdmFyIHMgPSBmdW5jdGlvbihwKSB7XG4gICAgICAgIHJldHVybiBwIC0gMTtcbiAgICAgIH07XG4gICAgICBzd2l0Y2ggKGkpIHtcbiAgICAgICAgY2FzZSBcIkxcIjpcbiAgICAgICAgICByZXR1cm4gbDIobzIoYzIubW9udGgsIHIpLCBzKTtcbiAgICAgICAgY2FzZSBcIkxMXCI6XG4gICAgICAgICAgcmV0dXJuIGwyKGkyKDIsIHIpLCBzKTtcbiAgICAgICAgY2FzZSBcIkxvXCI6XG4gICAgICAgICAgcmV0dXJuIGwyKGEub3JkaW5hbE51bWJlcihyLCB7XG4gICAgICAgICAgICB1bml0OiBcIm1vbnRoXCJcbiAgICAgICAgICB9KSwgcyk7XG4gICAgICAgIGNhc2UgXCJMTExcIjpcbiAgICAgICAgICByZXR1cm4gYS5tb250aChyLCB7XG4gICAgICAgICAgICB3aWR0aDogXCJhYmJyZXZpYXRlZFwiLFxuICAgICAgICAgICAgY29udGV4dDogXCJzdGFuZGFsb25lXCJcbiAgICAgICAgICB9KSB8fCBhLm1vbnRoKHIsIHtcbiAgICAgICAgICAgIHdpZHRoOiBcIm5hcnJvd1wiLFxuICAgICAgICAgICAgY29udGV4dDogXCJzdGFuZGFsb25lXCJcbiAgICAgICAgICB9KTtcbiAgICAgICAgY2FzZSBcIkxMTExMXCI6XG4gICAgICAgICAgcmV0dXJuIGEubW9udGgociwge1xuICAgICAgICAgICAgd2lkdGg6IFwibmFycm93XCIsXG4gICAgICAgICAgICBjb250ZXh0OiBcInN0YW5kYWxvbmVcIlxuICAgICAgICAgIH0pO1xuICAgICAgICBjYXNlIFwiTExMTFwiOlxuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIHJldHVybiBhLm1vbnRoKHIsIHtcbiAgICAgICAgICAgIHdpZHRoOiBcIndpZGVcIixcbiAgICAgICAgICAgIGNvbnRleHQ6IFwic3RhbmRhbG9uZVwiXG4gICAgICAgICAgfSkgfHwgYS5tb250aChyLCB7XG4gICAgICAgICAgICB3aWR0aDogXCJhYmJyZXZpYXRlZFwiLFxuICAgICAgICAgICAgY29udGV4dDogXCJzdGFuZGFsb25lXCJcbiAgICAgICAgICB9KSB8fCBhLm1vbnRoKHIsIHtcbiAgICAgICAgICAgIHdpZHRoOiBcIm5hcnJvd1wiLFxuICAgICAgICAgICAgY29udGV4dDogXCJzdGFuZGFsb25lXCJcbiAgICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwidmFsaWRhdGVcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24ociwgaSkge1xuICAgICAgcmV0dXJuIGkgPj0gMCAmJiBpIDw9IDExO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJzZXRcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24ociwgaSwgYSkge1xuICAgICAgcmV0dXJuIHIuc2V0VVRDTW9udGgoYSwgMSksIHIuc2V0VVRDSG91cnMoMCwgMCwgMCwgMCksIHI7XG4gICAgfVxuICB9XSksIG87XG59KFQwKTtcbmZ1bmN0aW9uIFR3KGUsIHQsIG8pIHtcbiAgUTEoMiwgYXJndW1lbnRzKTtcbiAgdmFyIG4gPSBqMShlKSwgciA9IHYwKHQpLCBpID0gX2wobiwgbykgLSByO1xuICByZXR1cm4gbi5zZXRVVENEYXRlKG4uZ2V0VVRDRGF0ZSgpIC0gaSAqIDcpLCBuO1xufVxudmFyIEl3ID0gLyogQF9fUFVSRV9fICovIGZ1bmN0aW9uKGUpIHtcbiAgUzAobywgZSk7XG4gIHZhciB0ID0gRTAobyk7XG4gIGZ1bmN0aW9uIG8oKSB7XG4gICAgdmFyIG47XG4gICAgeTAodGhpcywgbyk7XG4gICAgZm9yICh2YXIgciA9IGFyZ3VtZW50cy5sZW5ndGgsIGkgPSBuZXcgQXJyYXkociksIGEgPSAwOyBhIDwgcjsgYSsrKVxuICAgICAgaVthXSA9IGFyZ3VtZW50c1thXTtcbiAgICByZXR1cm4gbiA9IHQuY2FsbC5hcHBseSh0LCBbdGhpc10uY29uY2F0KGkpKSwgdDAobzAobiksIFwicHJpb3JpdHlcIiwgMTAwKSwgdDAobzAobiksIFwiaW5jb21wYXRpYmxlVG9rZW5zXCIsIFtcInlcIiwgXCJSXCIsIFwidVwiLCBcInFcIiwgXCJRXCIsIFwiTVwiLCBcIkxcIiwgXCJJXCIsIFwiZFwiLCBcIkRcIiwgXCJpXCIsIFwidFwiLCBcIlRcIl0pLCBuO1xuICB9XG4gIHJldHVybiB3MChvLCBbe1xuICAgIGtleTogXCJwYXJzZVwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbihyLCBpLCBhKSB7XG4gICAgICBzd2l0Y2ggKGkpIHtcbiAgICAgICAgY2FzZSBcIndcIjpcbiAgICAgICAgICByZXR1cm4gbzIoYzIud2Vlaywgcik7XG4gICAgICAgIGNhc2UgXCJ3b1wiOlxuICAgICAgICAgIHJldHVybiBhLm9yZGluYWxOdW1iZXIociwge1xuICAgICAgICAgICAgdW5pdDogXCJ3ZWVrXCJcbiAgICAgICAgICB9KTtcbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICByZXR1cm4gaTIoaS5sZW5ndGgsIHIpO1xuICAgICAgfVxuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJ2YWxpZGF0ZVwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbihyLCBpKSB7XG4gICAgICByZXR1cm4gaSA+PSAxICYmIGkgPD0gNTM7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcInNldFwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbihyLCBpLCBhLCBzKSB7XG4gICAgICByZXR1cm4gdTMoVHcociwgYSwgcyksIHMpO1xuICAgIH1cbiAgfV0pLCBvO1xufShUMCk7XG5mdW5jdGlvbiBEdyhlLCB0KSB7XG4gIFExKDIsIGFyZ3VtZW50cyk7XG4gIHZhciBvID0gajEoZSksIG4gPSB2MCh0KSwgciA9IEpsKG8pIC0gbjtcbiAgcmV0dXJuIG8uc2V0VVRDRGF0ZShvLmdldFVUQ0RhdGUoKSAtIHIgKiA3KSwgbztcbn1cbnZhciBIdyA9IC8qIEBfX1BVUkVfXyAqLyBmdW5jdGlvbihlKSB7XG4gIFMwKG8sIGUpO1xuICB2YXIgdCA9IEUwKG8pO1xuICBmdW5jdGlvbiBvKCkge1xuICAgIHZhciBuO1xuICAgIHkwKHRoaXMsIG8pO1xuICAgIGZvciAodmFyIHIgPSBhcmd1bWVudHMubGVuZ3RoLCBpID0gbmV3IEFycmF5KHIpLCBhID0gMDsgYSA8IHI7IGErKylcbiAgICAgIGlbYV0gPSBhcmd1bWVudHNbYV07XG4gICAgcmV0dXJuIG4gPSB0LmNhbGwuYXBwbHkodCwgW3RoaXNdLmNvbmNhdChpKSksIHQwKG8wKG4pLCBcInByaW9yaXR5XCIsIDEwMCksIHQwKG8wKG4pLCBcImluY29tcGF0aWJsZVRva2Vuc1wiLCBbXCJ5XCIsIFwiWVwiLCBcInVcIiwgXCJxXCIsIFwiUVwiLCBcIk1cIiwgXCJMXCIsIFwid1wiLCBcImRcIiwgXCJEXCIsIFwiZVwiLCBcImNcIiwgXCJ0XCIsIFwiVFwiXSksIG47XG4gIH1cbiAgcmV0dXJuIHcwKG8sIFt7XG4gICAga2V5OiBcInBhcnNlXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uKHIsIGksIGEpIHtcbiAgICAgIHN3aXRjaCAoaSkge1xuICAgICAgICBjYXNlIFwiSVwiOlxuICAgICAgICAgIHJldHVybiBvMihjMi53ZWVrLCByKTtcbiAgICAgICAgY2FzZSBcIklvXCI6XG4gICAgICAgICAgcmV0dXJuIGEub3JkaW5hbE51bWJlcihyLCB7XG4gICAgICAgICAgICB1bml0OiBcIndlZWtcIlxuICAgICAgICAgIH0pO1xuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIHJldHVybiBpMihpLmxlbmd0aCwgcik7XG4gICAgICB9XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcInZhbGlkYXRlXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uKHIsIGkpIHtcbiAgICAgIHJldHVybiBpID49IDEgJiYgaSA8PSA1MztcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwic2V0XCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uKHIsIGksIGEpIHtcbiAgICAgIHJldHVybiBKMyhEdyhyLCBhKSk7XG4gICAgfVxuICB9XSksIG87XG59KFQwKSwgVncgPSBbMzEsIDI4LCAzMSwgMzAsIDMxLCAzMCwgMzEsIDMxLCAzMCwgMzEsIDMwLCAzMV0sIFB3ID0gWzMxLCAyOSwgMzEsIDMwLCAzMSwgMzAsIDMxLCAzMSwgMzAsIDMxLCAzMCwgMzFdLCBGdyA9IC8qIEBfX1BVUkVfXyAqLyBmdW5jdGlvbihlKSB7XG4gIFMwKG8sIGUpO1xuICB2YXIgdCA9IEUwKG8pO1xuICBmdW5jdGlvbiBvKCkge1xuICAgIHZhciBuO1xuICAgIHkwKHRoaXMsIG8pO1xuICAgIGZvciAodmFyIHIgPSBhcmd1bWVudHMubGVuZ3RoLCBpID0gbmV3IEFycmF5KHIpLCBhID0gMDsgYSA8IHI7IGErKylcbiAgICAgIGlbYV0gPSBhcmd1bWVudHNbYV07XG4gICAgcmV0dXJuIG4gPSB0LmNhbGwuYXBwbHkodCwgW3RoaXNdLmNvbmNhdChpKSksIHQwKG8wKG4pLCBcInByaW9yaXR5XCIsIDkwKSwgdDAobzAobiksIFwic3ViUHJpb3JpdHlcIiwgMSksIHQwKG8wKG4pLCBcImluY29tcGF0aWJsZVRva2Vuc1wiLCBbXCJZXCIsIFwiUlwiLCBcInFcIiwgXCJRXCIsIFwid1wiLCBcIklcIiwgXCJEXCIsIFwiaVwiLCBcImVcIiwgXCJjXCIsIFwidFwiLCBcIlRcIl0pLCBuO1xuICB9XG4gIHJldHVybiB3MChvLCBbe1xuICAgIGtleTogXCJwYXJzZVwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbihyLCBpLCBhKSB7XG4gICAgICBzd2l0Y2ggKGkpIHtcbiAgICAgICAgY2FzZSBcImRcIjpcbiAgICAgICAgICByZXR1cm4gbzIoYzIuZGF0ZSwgcik7XG4gICAgICAgIGNhc2UgXCJkb1wiOlxuICAgICAgICAgIHJldHVybiBhLm9yZGluYWxOdW1iZXIociwge1xuICAgICAgICAgICAgdW5pdDogXCJkYXRlXCJcbiAgICAgICAgICB9KTtcbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICByZXR1cm4gaTIoaS5sZW5ndGgsIHIpO1xuICAgICAgfVxuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJ2YWxpZGF0ZVwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbihyLCBpKSB7XG4gICAgICB2YXIgYSA9IHIuZ2V0VVRDRnVsbFllYXIoKSwgcyA9IHNwKGEpLCBsID0gci5nZXRVVENNb250aCgpO1xuICAgICAgcmV0dXJuIHMgPyBpID49IDEgJiYgaSA8PSBQd1tsXSA6IGkgPj0gMSAmJiBpIDw9IFZ3W2xdO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJzZXRcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24ociwgaSwgYSkge1xuICAgICAgcmV0dXJuIHIuc2V0VVRDRGF0ZShhKSwgci5zZXRVVENIb3VycygwLCAwLCAwLCAwKSwgcjtcbiAgICB9XG4gIH1dKSwgbztcbn0oVDApLCBYdyA9IC8qIEBfX1BVUkVfXyAqLyBmdW5jdGlvbihlKSB7XG4gIFMwKG8sIGUpO1xuICB2YXIgdCA9IEUwKG8pO1xuICBmdW5jdGlvbiBvKCkge1xuICAgIHZhciBuO1xuICAgIHkwKHRoaXMsIG8pO1xuICAgIGZvciAodmFyIHIgPSBhcmd1bWVudHMubGVuZ3RoLCBpID0gbmV3IEFycmF5KHIpLCBhID0gMDsgYSA8IHI7IGErKylcbiAgICAgIGlbYV0gPSBhcmd1bWVudHNbYV07XG4gICAgcmV0dXJuIG4gPSB0LmNhbGwuYXBwbHkodCwgW3RoaXNdLmNvbmNhdChpKSksIHQwKG8wKG4pLCBcInByaW9yaXR5XCIsIDkwKSwgdDAobzAobiksIFwic3VicHJpb3JpdHlcIiwgMSksIHQwKG8wKG4pLCBcImluY29tcGF0aWJsZVRva2Vuc1wiLCBbXCJZXCIsIFwiUlwiLCBcInFcIiwgXCJRXCIsIFwiTVwiLCBcIkxcIiwgXCJ3XCIsIFwiSVwiLCBcImRcIiwgXCJFXCIsIFwiaVwiLCBcImVcIiwgXCJjXCIsIFwidFwiLCBcIlRcIl0pLCBuO1xuICB9XG4gIHJldHVybiB3MChvLCBbe1xuICAgIGtleTogXCJwYXJzZVwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbihyLCBpLCBhKSB7XG4gICAgICBzd2l0Y2ggKGkpIHtcbiAgICAgICAgY2FzZSBcIkRcIjpcbiAgICAgICAgY2FzZSBcIkREXCI6XG4gICAgICAgICAgcmV0dXJuIG8yKGMyLmRheU9mWWVhciwgcik7XG4gICAgICAgIGNhc2UgXCJEb1wiOlxuICAgICAgICAgIHJldHVybiBhLm9yZGluYWxOdW1iZXIociwge1xuICAgICAgICAgICAgdW5pdDogXCJkYXRlXCJcbiAgICAgICAgICB9KTtcbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICByZXR1cm4gaTIoaS5sZW5ndGgsIHIpO1xuICAgICAgfVxuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJ2YWxpZGF0ZVwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbihyLCBpKSB7XG4gICAgICB2YXIgYSA9IHIuZ2V0VVRDRnVsbFllYXIoKSwgcyA9IHNwKGEpO1xuICAgICAgcmV0dXJuIHMgPyBpID49IDEgJiYgaSA8PSAzNjYgOiBpID49IDEgJiYgaSA8PSAzNjU7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcInNldFwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbihyLCBpLCBhKSB7XG4gICAgICByZXR1cm4gci5zZXRVVENNb250aCgwLCBhKSwgci5zZXRVVENIb3VycygwLCAwLCAwLCAwKSwgcjtcbiAgICB9XG4gIH1dKSwgbztcbn0oVDApO1xuZnVuY3Rpb24gYTYoZSwgdCwgbykge1xuICB2YXIgbiwgciwgaSwgYSwgcywgbCwgcCwgZDtcbiAgUTEoMiwgYXJndW1lbnRzKTtcbiAgdmFyIGIgPSBYdCgpLCBNID0gdjAoKG4gPSAociA9IChpID0gKGEgPSBvID09IG51bGwgPyB2b2lkIDAgOiBvLndlZWtTdGFydHNPbikgIT09IG51bGwgJiYgYSAhPT0gdm9pZCAwID8gYSA6IG8gPT0gbnVsbCB8fCAocyA9IG8ubG9jYWxlKSA9PT0gbnVsbCB8fCBzID09PSB2b2lkIDAgfHwgKGwgPSBzLm9wdGlvbnMpID09PSBudWxsIHx8IGwgPT09IHZvaWQgMCA/IHZvaWQgMCA6IGwud2Vla1N0YXJ0c09uKSAhPT0gbnVsbCAmJiBpICE9PSB2b2lkIDAgPyBpIDogYi53ZWVrU3RhcnRzT24pICE9PSBudWxsICYmIHIgIT09IHZvaWQgMCA/IHIgOiAocCA9IGIubG9jYWxlKSA9PT0gbnVsbCB8fCBwID09PSB2b2lkIDAgfHwgKGQgPSBwLm9wdGlvbnMpID09PSBudWxsIHx8IGQgPT09IHZvaWQgMCA/IHZvaWQgMCA6IGQud2Vla1N0YXJ0c09uKSAhPT0gbnVsbCAmJiBuICE9PSB2b2lkIDAgPyBuIDogMCk7XG4gIGlmICghKE0gPj0gMCAmJiBNIDw9IDYpKVxuICAgIHRocm93IG5ldyBSYW5nZUVycm9yKFwid2Vla1N0YXJ0c09uIG11c3QgYmUgYmV0d2VlbiAwIGFuZCA2IGluY2x1c2l2ZWx5XCIpO1xuICB2YXIgdSA9IGoxKGUpLCBBID0gdjAodCksIHogPSB1LmdldFVUQ0RheSgpLCBmID0gQSAlIDcsIE8gPSAoZiArIDcpICUgNywgaCA9IChPIDwgTSA/IDcgOiAwKSArIEEgLSB6O1xuICByZXR1cm4gdS5zZXRVVENEYXRlKHUuZ2V0VVRDRGF0ZSgpICsgaCksIHU7XG59XG52YXIgVXcgPSAvKiBAX19QVVJFX18gKi8gZnVuY3Rpb24oZSkge1xuICBTMChvLCBlKTtcbiAgdmFyIHQgPSBFMChvKTtcbiAgZnVuY3Rpb24gbygpIHtcbiAgICB2YXIgbjtcbiAgICB5MCh0aGlzLCBvKTtcbiAgICBmb3IgKHZhciByID0gYXJndW1lbnRzLmxlbmd0aCwgaSA9IG5ldyBBcnJheShyKSwgYSA9IDA7IGEgPCByOyBhKyspXG4gICAgICBpW2FdID0gYXJndW1lbnRzW2FdO1xuICAgIHJldHVybiBuID0gdC5jYWxsLmFwcGx5KHQsIFt0aGlzXS5jb25jYXQoaSkpLCB0MChvMChuKSwgXCJwcmlvcml0eVwiLCA5MCksIHQwKG8wKG4pLCBcImluY29tcGF0aWJsZVRva2Vuc1wiLCBbXCJEXCIsIFwiaVwiLCBcImVcIiwgXCJjXCIsIFwidFwiLCBcIlRcIl0pLCBuO1xuICB9XG4gIHJldHVybiB3MChvLCBbe1xuICAgIGtleTogXCJwYXJzZVwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbihyLCBpLCBhKSB7XG4gICAgICBzd2l0Y2ggKGkpIHtcbiAgICAgICAgY2FzZSBcIkVcIjpcbiAgICAgICAgY2FzZSBcIkVFXCI6XG4gICAgICAgIGNhc2UgXCJFRUVcIjpcbiAgICAgICAgICByZXR1cm4gYS5kYXkociwge1xuICAgICAgICAgICAgd2lkdGg6IFwiYWJicmV2aWF0ZWRcIixcbiAgICAgICAgICAgIGNvbnRleHQ6IFwiZm9ybWF0dGluZ1wiXG4gICAgICAgICAgfSkgfHwgYS5kYXkociwge1xuICAgICAgICAgICAgd2lkdGg6IFwic2hvcnRcIixcbiAgICAgICAgICAgIGNvbnRleHQ6IFwiZm9ybWF0dGluZ1wiXG4gICAgICAgICAgfSkgfHwgYS5kYXkociwge1xuICAgICAgICAgICAgd2lkdGg6IFwibmFycm93XCIsXG4gICAgICAgICAgICBjb250ZXh0OiBcImZvcm1hdHRpbmdcIlxuICAgICAgICAgIH0pO1xuICAgICAgICBjYXNlIFwiRUVFRUVcIjpcbiAgICAgICAgICByZXR1cm4gYS5kYXkociwge1xuICAgICAgICAgICAgd2lkdGg6IFwibmFycm93XCIsXG4gICAgICAgICAgICBjb250ZXh0OiBcImZvcm1hdHRpbmdcIlxuICAgICAgICAgIH0pO1xuICAgICAgICBjYXNlIFwiRUVFRUVFXCI6XG4gICAgICAgICAgcmV0dXJuIGEuZGF5KHIsIHtcbiAgICAgICAgICAgIHdpZHRoOiBcInNob3J0XCIsXG4gICAgICAgICAgICBjb250ZXh0OiBcImZvcm1hdHRpbmdcIlxuICAgICAgICAgIH0pIHx8IGEuZGF5KHIsIHtcbiAgICAgICAgICAgIHdpZHRoOiBcIm5hcnJvd1wiLFxuICAgICAgICAgICAgY29udGV4dDogXCJmb3JtYXR0aW5nXCJcbiAgICAgICAgICB9KTtcbiAgICAgICAgY2FzZSBcIkVFRUVcIjpcbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICByZXR1cm4gYS5kYXkociwge1xuICAgICAgICAgICAgd2lkdGg6IFwid2lkZVwiLFxuICAgICAgICAgICAgY29udGV4dDogXCJmb3JtYXR0aW5nXCJcbiAgICAgICAgICB9KSB8fCBhLmRheShyLCB7XG4gICAgICAgICAgICB3aWR0aDogXCJhYmJyZXZpYXRlZFwiLFxuICAgICAgICAgICAgY29udGV4dDogXCJmb3JtYXR0aW5nXCJcbiAgICAgICAgICB9KSB8fCBhLmRheShyLCB7XG4gICAgICAgICAgICB3aWR0aDogXCJzaG9ydFwiLFxuICAgICAgICAgICAgY29udGV4dDogXCJmb3JtYXR0aW5nXCJcbiAgICAgICAgICB9KSB8fCBhLmRheShyLCB7XG4gICAgICAgICAgICB3aWR0aDogXCJuYXJyb3dcIixcbiAgICAgICAgICAgIGNvbnRleHQ6IFwiZm9ybWF0dGluZ1wiXG4gICAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcInZhbGlkYXRlXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uKHIsIGkpIHtcbiAgICAgIHJldHVybiBpID49IDAgJiYgaSA8PSA2O1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJzZXRcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24ociwgaSwgYSwgcykge1xuICAgICAgcmV0dXJuIHIgPSBhNihyLCBhLCBzKSwgci5zZXRVVENIb3VycygwLCAwLCAwLCAwKSwgcjtcbiAgICB9XG4gIH1dKSwgbztcbn0oVDApLCBZdyA9IC8qIEBfX1BVUkVfXyAqLyBmdW5jdGlvbihlKSB7XG4gIFMwKG8sIGUpO1xuICB2YXIgdCA9IEUwKG8pO1xuICBmdW5jdGlvbiBvKCkge1xuICAgIHZhciBuO1xuICAgIHkwKHRoaXMsIG8pO1xuICAgIGZvciAodmFyIHIgPSBhcmd1bWVudHMubGVuZ3RoLCBpID0gbmV3IEFycmF5KHIpLCBhID0gMDsgYSA8IHI7IGErKylcbiAgICAgIGlbYV0gPSBhcmd1bWVudHNbYV07XG4gICAgcmV0dXJuIG4gPSB0LmNhbGwuYXBwbHkodCwgW3RoaXNdLmNvbmNhdChpKSksIHQwKG8wKG4pLCBcInByaW9yaXR5XCIsIDkwKSwgdDAobzAobiksIFwiaW5jb21wYXRpYmxlVG9rZW5zXCIsIFtcInlcIiwgXCJSXCIsIFwidVwiLCBcInFcIiwgXCJRXCIsIFwiTVwiLCBcIkxcIiwgXCJJXCIsIFwiZFwiLCBcIkRcIiwgXCJFXCIsIFwiaVwiLCBcImNcIiwgXCJ0XCIsIFwiVFwiXSksIG47XG4gIH1cbiAgcmV0dXJuIHcwKG8sIFt7XG4gICAga2V5OiBcInBhcnNlXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uKHIsIGksIGEsIHMpIHtcbiAgICAgIHZhciBsID0gZnVuY3Rpb24oZCkge1xuICAgICAgICB2YXIgYiA9IE1hdGguZmxvb3IoKGQgLSAxKSAvIDcpICogNztcbiAgICAgICAgcmV0dXJuIChkICsgcy53ZWVrU3RhcnRzT24gKyA2KSAlIDcgKyBiO1xuICAgICAgfTtcbiAgICAgIHN3aXRjaCAoaSkge1xuICAgICAgICBjYXNlIFwiZVwiOlxuICAgICAgICBjYXNlIFwiZWVcIjpcbiAgICAgICAgICByZXR1cm4gbDIoaTIoaS5sZW5ndGgsIHIpLCBsKTtcbiAgICAgICAgY2FzZSBcImVvXCI6XG4gICAgICAgICAgcmV0dXJuIGwyKGEub3JkaW5hbE51bWJlcihyLCB7XG4gICAgICAgICAgICB1bml0OiBcImRheVwiXG4gICAgICAgICAgfSksIGwpO1xuICAgICAgICBjYXNlIFwiZWVlXCI6XG4gICAgICAgICAgcmV0dXJuIGEuZGF5KHIsIHtcbiAgICAgICAgICAgIHdpZHRoOiBcImFiYnJldmlhdGVkXCIsXG4gICAgICAgICAgICBjb250ZXh0OiBcImZvcm1hdHRpbmdcIlxuICAgICAgICAgIH0pIHx8IGEuZGF5KHIsIHtcbiAgICAgICAgICAgIHdpZHRoOiBcInNob3J0XCIsXG4gICAgICAgICAgICBjb250ZXh0OiBcImZvcm1hdHRpbmdcIlxuICAgICAgICAgIH0pIHx8IGEuZGF5KHIsIHtcbiAgICAgICAgICAgIHdpZHRoOiBcIm5hcnJvd1wiLFxuICAgICAgICAgICAgY29udGV4dDogXCJmb3JtYXR0aW5nXCJcbiAgICAgICAgICB9KTtcbiAgICAgICAgY2FzZSBcImVlZWVlXCI6XG4gICAgICAgICAgcmV0dXJuIGEuZGF5KHIsIHtcbiAgICAgICAgICAgIHdpZHRoOiBcIm5hcnJvd1wiLFxuICAgICAgICAgICAgY29udGV4dDogXCJmb3JtYXR0aW5nXCJcbiAgICAgICAgICB9KTtcbiAgICAgICAgY2FzZSBcImVlZWVlZVwiOlxuICAgICAgICAgIHJldHVybiBhLmRheShyLCB7XG4gICAgICAgICAgICB3aWR0aDogXCJzaG9ydFwiLFxuICAgICAgICAgICAgY29udGV4dDogXCJmb3JtYXR0aW5nXCJcbiAgICAgICAgICB9KSB8fCBhLmRheShyLCB7XG4gICAgICAgICAgICB3aWR0aDogXCJuYXJyb3dcIixcbiAgICAgICAgICAgIGNvbnRleHQ6IFwiZm9ybWF0dGluZ1wiXG4gICAgICAgICAgfSk7XG4gICAgICAgIGNhc2UgXCJlZWVlXCI6XG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgcmV0dXJuIGEuZGF5KHIsIHtcbiAgICAgICAgICAgIHdpZHRoOiBcIndpZGVcIixcbiAgICAgICAgICAgIGNvbnRleHQ6IFwiZm9ybWF0dGluZ1wiXG4gICAgICAgICAgfSkgfHwgYS5kYXkociwge1xuICAgICAgICAgICAgd2lkdGg6IFwiYWJicmV2aWF0ZWRcIixcbiAgICAgICAgICAgIGNvbnRleHQ6IFwiZm9ybWF0dGluZ1wiXG4gICAgICAgICAgfSkgfHwgYS5kYXkociwge1xuICAgICAgICAgICAgd2lkdGg6IFwic2hvcnRcIixcbiAgICAgICAgICAgIGNvbnRleHQ6IFwiZm9ybWF0dGluZ1wiXG4gICAgICAgICAgfSkgfHwgYS5kYXkociwge1xuICAgICAgICAgICAgd2lkdGg6IFwibmFycm93XCIsXG4gICAgICAgICAgICBjb250ZXh0OiBcImZvcm1hdHRpbmdcIlxuICAgICAgICAgIH0pO1xuICAgICAgfVxuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJ2YWxpZGF0ZVwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbihyLCBpKSB7XG4gICAgICByZXR1cm4gaSA+PSAwICYmIGkgPD0gNjtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwic2V0XCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uKHIsIGksIGEsIHMpIHtcbiAgICAgIHJldHVybiByID0gYTYociwgYSwgcyksIHIuc2V0VVRDSG91cnMoMCwgMCwgMCwgMCksIHI7XG4gICAgfVxuICB9XSksIG87XG59KFQwKSwgR3cgPSAvKiBAX19QVVJFX18gKi8gZnVuY3Rpb24oZSkge1xuICBTMChvLCBlKTtcbiAgdmFyIHQgPSBFMChvKTtcbiAgZnVuY3Rpb24gbygpIHtcbiAgICB2YXIgbjtcbiAgICB5MCh0aGlzLCBvKTtcbiAgICBmb3IgKHZhciByID0gYXJndW1lbnRzLmxlbmd0aCwgaSA9IG5ldyBBcnJheShyKSwgYSA9IDA7IGEgPCByOyBhKyspXG4gICAgICBpW2FdID0gYXJndW1lbnRzW2FdO1xuICAgIHJldHVybiBuID0gdC5jYWxsLmFwcGx5KHQsIFt0aGlzXS5jb25jYXQoaSkpLCB0MChvMChuKSwgXCJwcmlvcml0eVwiLCA5MCksIHQwKG8wKG4pLCBcImluY29tcGF0aWJsZVRva2Vuc1wiLCBbXCJ5XCIsIFwiUlwiLCBcInVcIiwgXCJxXCIsIFwiUVwiLCBcIk1cIiwgXCJMXCIsIFwiSVwiLCBcImRcIiwgXCJEXCIsIFwiRVwiLCBcImlcIiwgXCJlXCIsIFwidFwiLCBcIlRcIl0pLCBuO1xuICB9XG4gIHJldHVybiB3MChvLCBbe1xuICAgIGtleTogXCJwYXJzZVwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbihyLCBpLCBhLCBzKSB7XG4gICAgICB2YXIgbCA9IGZ1bmN0aW9uKGQpIHtcbiAgICAgICAgdmFyIGIgPSBNYXRoLmZsb29yKChkIC0gMSkgLyA3KSAqIDc7XG4gICAgICAgIHJldHVybiAoZCArIHMud2Vla1N0YXJ0c09uICsgNikgJSA3ICsgYjtcbiAgICAgIH07XG4gICAgICBzd2l0Y2ggKGkpIHtcbiAgICAgICAgY2FzZSBcImNcIjpcbiAgICAgICAgY2FzZSBcImNjXCI6XG4gICAgICAgICAgcmV0dXJuIGwyKGkyKGkubGVuZ3RoLCByKSwgbCk7XG4gICAgICAgIGNhc2UgXCJjb1wiOlxuICAgICAgICAgIHJldHVybiBsMihhLm9yZGluYWxOdW1iZXIociwge1xuICAgICAgICAgICAgdW5pdDogXCJkYXlcIlxuICAgICAgICAgIH0pLCBsKTtcbiAgICAgICAgY2FzZSBcImNjY1wiOlxuICAgICAgICAgIHJldHVybiBhLmRheShyLCB7XG4gICAgICAgICAgICB3aWR0aDogXCJhYmJyZXZpYXRlZFwiLFxuICAgICAgICAgICAgY29udGV4dDogXCJzdGFuZGFsb25lXCJcbiAgICAgICAgICB9KSB8fCBhLmRheShyLCB7XG4gICAgICAgICAgICB3aWR0aDogXCJzaG9ydFwiLFxuICAgICAgICAgICAgY29udGV4dDogXCJzdGFuZGFsb25lXCJcbiAgICAgICAgICB9KSB8fCBhLmRheShyLCB7XG4gICAgICAgICAgICB3aWR0aDogXCJuYXJyb3dcIixcbiAgICAgICAgICAgIGNvbnRleHQ6IFwic3RhbmRhbG9uZVwiXG4gICAgICAgICAgfSk7XG4gICAgICAgIGNhc2UgXCJjY2NjY1wiOlxuICAgICAgICAgIHJldHVybiBhLmRheShyLCB7XG4gICAgICAgICAgICB3aWR0aDogXCJuYXJyb3dcIixcbiAgICAgICAgICAgIGNvbnRleHQ6IFwic3RhbmRhbG9uZVwiXG4gICAgICAgICAgfSk7XG4gICAgICAgIGNhc2UgXCJjY2NjY2NcIjpcbiAgICAgICAgICByZXR1cm4gYS5kYXkociwge1xuICAgICAgICAgICAgd2lkdGg6IFwic2hvcnRcIixcbiAgICAgICAgICAgIGNvbnRleHQ6IFwic3RhbmRhbG9uZVwiXG4gICAgICAgICAgfSkgfHwgYS5kYXkociwge1xuICAgICAgICAgICAgd2lkdGg6IFwibmFycm93XCIsXG4gICAgICAgICAgICBjb250ZXh0OiBcInN0YW5kYWxvbmVcIlxuICAgICAgICAgIH0pO1xuICAgICAgICBjYXNlIFwiY2NjY1wiOlxuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIHJldHVybiBhLmRheShyLCB7XG4gICAgICAgICAgICB3aWR0aDogXCJ3aWRlXCIsXG4gICAgICAgICAgICBjb250ZXh0OiBcInN0YW5kYWxvbmVcIlxuICAgICAgICAgIH0pIHx8IGEuZGF5KHIsIHtcbiAgICAgICAgICAgIHdpZHRoOiBcImFiYnJldmlhdGVkXCIsXG4gICAgICAgICAgICBjb250ZXh0OiBcInN0YW5kYWxvbmVcIlxuICAgICAgICAgIH0pIHx8IGEuZGF5KHIsIHtcbiAgICAgICAgICAgIHdpZHRoOiBcInNob3J0XCIsXG4gICAgICAgICAgICBjb250ZXh0OiBcInN0YW5kYWxvbmVcIlxuICAgICAgICAgIH0pIHx8IGEuZGF5KHIsIHtcbiAgICAgICAgICAgIHdpZHRoOiBcIm5hcnJvd1wiLFxuICAgICAgICAgICAgY29udGV4dDogXCJzdGFuZGFsb25lXCJcbiAgICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwidmFsaWRhdGVcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24ociwgaSkge1xuICAgICAgcmV0dXJuIGkgPj0gMCAmJiBpIDw9IDY7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcInNldFwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbihyLCBpLCBhLCBzKSB7XG4gICAgICByZXR1cm4gciA9IGE2KHIsIGEsIHMpLCByLnNldFVUQ0hvdXJzKDAsIDAsIDAsIDApLCByO1xuICAgIH1cbiAgfV0pLCBvO1xufShUMCk7XG5mdW5jdGlvbiBRdyhlLCB0KSB7XG4gIFExKDIsIGFyZ3VtZW50cyk7XG4gIHZhciBvID0gdjAodCk7XG4gIG8gJSA3ID09PSAwICYmIChvID0gbyAtIDcpO1xuICB2YXIgbiA9IDEsIHIgPSBqMShlKSwgaSA9IHIuZ2V0VVRDRGF5KCksIGEgPSBvICUgNywgcyA9IChhICsgNykgJSA3LCBsID0gKHMgPCBuID8gNyA6IDApICsgbyAtIGk7XG4gIHJldHVybiByLnNldFVUQ0RhdGUoci5nZXRVVENEYXRlKCkgKyBsKSwgcjtcbn1cbnZhciBadyA9IC8qIEBfX1BVUkVfXyAqLyBmdW5jdGlvbihlKSB7XG4gIFMwKG8sIGUpO1xuICB2YXIgdCA9IEUwKG8pO1xuICBmdW5jdGlvbiBvKCkge1xuICAgIHZhciBuO1xuICAgIHkwKHRoaXMsIG8pO1xuICAgIGZvciAodmFyIHIgPSBhcmd1bWVudHMubGVuZ3RoLCBpID0gbmV3IEFycmF5KHIpLCBhID0gMDsgYSA8IHI7IGErKylcbiAgICAgIGlbYV0gPSBhcmd1bWVudHNbYV07XG4gICAgcmV0dXJuIG4gPSB0LmNhbGwuYXBwbHkodCwgW3RoaXNdLmNvbmNhdChpKSksIHQwKG8wKG4pLCBcInByaW9yaXR5XCIsIDkwKSwgdDAobzAobiksIFwiaW5jb21wYXRpYmxlVG9rZW5zXCIsIFtcInlcIiwgXCJZXCIsIFwidVwiLCBcInFcIiwgXCJRXCIsIFwiTVwiLCBcIkxcIiwgXCJ3XCIsIFwiZFwiLCBcIkRcIiwgXCJFXCIsIFwiZVwiLCBcImNcIiwgXCJ0XCIsIFwiVFwiXSksIG47XG4gIH1cbiAgcmV0dXJuIHcwKG8sIFt7XG4gICAga2V5OiBcInBhcnNlXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uKHIsIGksIGEpIHtcbiAgICAgIHZhciBzID0gZnVuY3Rpb24ocCkge1xuICAgICAgICByZXR1cm4gcCA9PT0gMCA/IDcgOiBwO1xuICAgICAgfTtcbiAgICAgIHN3aXRjaCAoaSkge1xuICAgICAgICBjYXNlIFwiaVwiOlxuICAgICAgICBjYXNlIFwiaWlcIjpcbiAgICAgICAgICByZXR1cm4gaTIoaS5sZW5ndGgsIHIpO1xuICAgICAgICBjYXNlIFwiaW9cIjpcbiAgICAgICAgICByZXR1cm4gYS5vcmRpbmFsTnVtYmVyKHIsIHtcbiAgICAgICAgICAgIHVuaXQ6IFwiZGF5XCJcbiAgICAgICAgICB9KTtcbiAgICAgICAgY2FzZSBcImlpaVwiOlxuICAgICAgICAgIHJldHVybiBsMihhLmRheShyLCB7XG4gICAgICAgICAgICB3aWR0aDogXCJhYmJyZXZpYXRlZFwiLFxuICAgICAgICAgICAgY29udGV4dDogXCJmb3JtYXR0aW5nXCJcbiAgICAgICAgICB9KSB8fCBhLmRheShyLCB7XG4gICAgICAgICAgICB3aWR0aDogXCJzaG9ydFwiLFxuICAgICAgICAgICAgY29udGV4dDogXCJmb3JtYXR0aW5nXCJcbiAgICAgICAgICB9KSB8fCBhLmRheShyLCB7XG4gICAgICAgICAgICB3aWR0aDogXCJuYXJyb3dcIixcbiAgICAgICAgICAgIGNvbnRleHQ6IFwiZm9ybWF0dGluZ1wiXG4gICAgICAgICAgfSksIHMpO1xuICAgICAgICBjYXNlIFwiaWlpaWlcIjpcbiAgICAgICAgICByZXR1cm4gbDIoYS5kYXkociwge1xuICAgICAgICAgICAgd2lkdGg6IFwibmFycm93XCIsXG4gICAgICAgICAgICBjb250ZXh0OiBcImZvcm1hdHRpbmdcIlxuICAgICAgICAgIH0pLCBzKTtcbiAgICAgICAgY2FzZSBcImlpaWlpaVwiOlxuICAgICAgICAgIHJldHVybiBsMihhLmRheShyLCB7XG4gICAgICAgICAgICB3aWR0aDogXCJzaG9ydFwiLFxuICAgICAgICAgICAgY29udGV4dDogXCJmb3JtYXR0aW5nXCJcbiAgICAgICAgICB9KSB8fCBhLmRheShyLCB7XG4gICAgICAgICAgICB3aWR0aDogXCJuYXJyb3dcIixcbiAgICAgICAgICAgIGNvbnRleHQ6IFwiZm9ybWF0dGluZ1wiXG4gICAgICAgICAgfSksIHMpO1xuICAgICAgICBjYXNlIFwiaWlpaVwiOlxuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIHJldHVybiBsMihhLmRheShyLCB7XG4gICAgICAgICAgICB3aWR0aDogXCJ3aWRlXCIsXG4gICAgICAgICAgICBjb250ZXh0OiBcImZvcm1hdHRpbmdcIlxuICAgICAgICAgIH0pIHx8IGEuZGF5KHIsIHtcbiAgICAgICAgICAgIHdpZHRoOiBcImFiYnJldmlhdGVkXCIsXG4gICAgICAgICAgICBjb250ZXh0OiBcImZvcm1hdHRpbmdcIlxuICAgICAgICAgIH0pIHx8IGEuZGF5KHIsIHtcbiAgICAgICAgICAgIHdpZHRoOiBcInNob3J0XCIsXG4gICAgICAgICAgICBjb250ZXh0OiBcImZvcm1hdHRpbmdcIlxuICAgICAgICAgIH0pIHx8IGEuZGF5KHIsIHtcbiAgICAgICAgICAgIHdpZHRoOiBcIm5hcnJvd1wiLFxuICAgICAgICAgICAgY29udGV4dDogXCJmb3JtYXR0aW5nXCJcbiAgICAgICAgICB9KSwgcyk7XG4gICAgICB9XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcInZhbGlkYXRlXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uKHIsIGkpIHtcbiAgICAgIHJldHVybiBpID49IDEgJiYgaSA8PSA3O1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJzZXRcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24ociwgaSwgYSkge1xuICAgICAgcmV0dXJuIHIgPSBRdyhyLCBhKSwgci5zZXRVVENIb3VycygwLCAwLCAwLCAwKSwgcjtcbiAgICB9XG4gIH1dKSwgbztcbn0oVDApLCBqdyA9IC8qIEBfX1BVUkVfXyAqLyBmdW5jdGlvbihlKSB7XG4gIFMwKG8sIGUpO1xuICB2YXIgdCA9IEUwKG8pO1xuICBmdW5jdGlvbiBvKCkge1xuICAgIHZhciBuO1xuICAgIHkwKHRoaXMsIG8pO1xuICAgIGZvciAodmFyIHIgPSBhcmd1bWVudHMubGVuZ3RoLCBpID0gbmV3IEFycmF5KHIpLCBhID0gMDsgYSA8IHI7IGErKylcbiAgICAgIGlbYV0gPSBhcmd1bWVudHNbYV07XG4gICAgcmV0dXJuIG4gPSB0LmNhbGwuYXBwbHkodCwgW3RoaXNdLmNvbmNhdChpKSksIHQwKG8wKG4pLCBcInByaW9yaXR5XCIsIDgwKSwgdDAobzAobiksIFwiaW5jb21wYXRpYmxlVG9rZW5zXCIsIFtcImJcIiwgXCJCXCIsIFwiSFwiLCBcImtcIiwgXCJ0XCIsIFwiVFwiXSksIG47XG4gIH1cbiAgcmV0dXJuIHcwKG8sIFt7XG4gICAga2V5OiBcInBhcnNlXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uKHIsIGksIGEpIHtcbiAgICAgIHN3aXRjaCAoaSkge1xuICAgICAgICBjYXNlIFwiYVwiOlxuICAgICAgICBjYXNlIFwiYWFcIjpcbiAgICAgICAgY2FzZSBcImFhYVwiOlxuICAgICAgICAgIHJldHVybiBhLmRheVBlcmlvZChyLCB7XG4gICAgICAgICAgICB3aWR0aDogXCJhYmJyZXZpYXRlZFwiLFxuICAgICAgICAgICAgY29udGV4dDogXCJmb3JtYXR0aW5nXCJcbiAgICAgICAgICB9KSB8fCBhLmRheVBlcmlvZChyLCB7XG4gICAgICAgICAgICB3aWR0aDogXCJuYXJyb3dcIixcbiAgICAgICAgICAgIGNvbnRleHQ6IFwiZm9ybWF0dGluZ1wiXG4gICAgICAgICAgfSk7XG4gICAgICAgIGNhc2UgXCJhYWFhYVwiOlxuICAgICAgICAgIHJldHVybiBhLmRheVBlcmlvZChyLCB7XG4gICAgICAgICAgICB3aWR0aDogXCJuYXJyb3dcIixcbiAgICAgICAgICAgIGNvbnRleHQ6IFwiZm9ybWF0dGluZ1wiXG4gICAgICAgICAgfSk7XG4gICAgICAgIGNhc2UgXCJhYWFhXCI6XG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgcmV0dXJuIGEuZGF5UGVyaW9kKHIsIHtcbiAgICAgICAgICAgIHdpZHRoOiBcIndpZGVcIixcbiAgICAgICAgICAgIGNvbnRleHQ6IFwiZm9ybWF0dGluZ1wiXG4gICAgICAgICAgfSkgfHwgYS5kYXlQZXJpb2Qociwge1xuICAgICAgICAgICAgd2lkdGg6IFwiYWJicmV2aWF0ZWRcIixcbiAgICAgICAgICAgIGNvbnRleHQ6IFwiZm9ybWF0dGluZ1wiXG4gICAgICAgICAgfSkgfHwgYS5kYXlQZXJpb2Qociwge1xuICAgICAgICAgICAgd2lkdGg6IFwibmFycm93XCIsXG4gICAgICAgICAgICBjb250ZXh0OiBcImZvcm1hdHRpbmdcIlxuICAgICAgICAgIH0pO1xuICAgICAgfVxuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJzZXRcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24ociwgaSwgYSkge1xuICAgICAgcmV0dXJuIHIuc2V0VVRDSG91cnMoaTYoYSksIDAsIDAsIDApLCByO1xuICAgIH1cbiAgfV0pLCBvO1xufShUMCksIEt3ID0gLyogQF9fUFVSRV9fICovIGZ1bmN0aW9uKGUpIHtcbiAgUzAobywgZSk7XG4gIHZhciB0ID0gRTAobyk7XG4gIGZ1bmN0aW9uIG8oKSB7XG4gICAgdmFyIG47XG4gICAgeTAodGhpcywgbyk7XG4gICAgZm9yICh2YXIgciA9IGFyZ3VtZW50cy5sZW5ndGgsIGkgPSBuZXcgQXJyYXkociksIGEgPSAwOyBhIDwgcjsgYSsrKVxuICAgICAgaVthXSA9IGFyZ3VtZW50c1thXTtcbiAgICByZXR1cm4gbiA9IHQuY2FsbC5hcHBseSh0LCBbdGhpc10uY29uY2F0KGkpKSwgdDAobzAobiksIFwicHJpb3JpdHlcIiwgODApLCB0MChvMChuKSwgXCJpbmNvbXBhdGlibGVUb2tlbnNcIiwgW1wiYVwiLCBcIkJcIiwgXCJIXCIsIFwia1wiLCBcInRcIiwgXCJUXCJdKSwgbjtcbiAgfVxuICByZXR1cm4gdzAobywgW3tcbiAgICBrZXk6IFwicGFyc2VcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24ociwgaSwgYSkge1xuICAgICAgc3dpdGNoIChpKSB7XG4gICAgICAgIGNhc2UgXCJiXCI6XG4gICAgICAgIGNhc2UgXCJiYlwiOlxuICAgICAgICBjYXNlIFwiYmJiXCI6XG4gICAgICAgICAgcmV0dXJuIGEuZGF5UGVyaW9kKHIsIHtcbiAgICAgICAgICAgIHdpZHRoOiBcImFiYnJldmlhdGVkXCIsXG4gICAgICAgICAgICBjb250ZXh0OiBcImZvcm1hdHRpbmdcIlxuICAgICAgICAgIH0pIHx8IGEuZGF5UGVyaW9kKHIsIHtcbiAgICAgICAgICAgIHdpZHRoOiBcIm5hcnJvd1wiLFxuICAgICAgICAgICAgY29udGV4dDogXCJmb3JtYXR0aW5nXCJcbiAgICAgICAgICB9KTtcbiAgICAgICAgY2FzZSBcImJiYmJiXCI6XG4gICAgICAgICAgcmV0dXJuIGEuZGF5UGVyaW9kKHIsIHtcbiAgICAgICAgICAgIHdpZHRoOiBcIm5hcnJvd1wiLFxuICAgICAgICAgICAgY29udGV4dDogXCJmb3JtYXR0aW5nXCJcbiAgICAgICAgICB9KTtcbiAgICAgICAgY2FzZSBcImJiYmJcIjpcbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICByZXR1cm4gYS5kYXlQZXJpb2Qociwge1xuICAgICAgICAgICAgd2lkdGg6IFwid2lkZVwiLFxuICAgICAgICAgICAgY29udGV4dDogXCJmb3JtYXR0aW5nXCJcbiAgICAgICAgICB9KSB8fCBhLmRheVBlcmlvZChyLCB7XG4gICAgICAgICAgICB3aWR0aDogXCJhYmJyZXZpYXRlZFwiLFxuICAgICAgICAgICAgY29udGV4dDogXCJmb3JtYXR0aW5nXCJcbiAgICAgICAgICB9KSB8fCBhLmRheVBlcmlvZChyLCB7XG4gICAgICAgICAgICB3aWR0aDogXCJuYXJyb3dcIixcbiAgICAgICAgICAgIGNvbnRleHQ6IFwiZm9ybWF0dGluZ1wiXG4gICAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcInNldFwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbihyLCBpLCBhKSB7XG4gICAgICByZXR1cm4gci5zZXRVVENIb3VycyhpNihhKSwgMCwgMCwgMCksIHI7XG4gICAgfVxuICB9XSksIG87XG59KFQwKSwgSncgPSAvKiBAX19QVVJFX18gKi8gZnVuY3Rpb24oZSkge1xuICBTMChvLCBlKTtcbiAgdmFyIHQgPSBFMChvKTtcbiAgZnVuY3Rpb24gbygpIHtcbiAgICB2YXIgbjtcbiAgICB5MCh0aGlzLCBvKTtcbiAgICBmb3IgKHZhciByID0gYXJndW1lbnRzLmxlbmd0aCwgaSA9IG5ldyBBcnJheShyKSwgYSA9IDA7IGEgPCByOyBhKyspXG4gICAgICBpW2FdID0gYXJndW1lbnRzW2FdO1xuICAgIHJldHVybiBuID0gdC5jYWxsLmFwcGx5KHQsIFt0aGlzXS5jb25jYXQoaSkpLCB0MChvMChuKSwgXCJwcmlvcml0eVwiLCA4MCksIHQwKG8wKG4pLCBcImluY29tcGF0aWJsZVRva2Vuc1wiLCBbXCJhXCIsIFwiYlwiLCBcInRcIiwgXCJUXCJdKSwgbjtcbiAgfVxuICByZXR1cm4gdzAobywgW3tcbiAgICBrZXk6IFwicGFyc2VcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24ociwgaSwgYSkge1xuICAgICAgc3dpdGNoIChpKSB7XG4gICAgICAgIGNhc2UgXCJCXCI6XG4gICAgICAgIGNhc2UgXCJCQlwiOlxuICAgICAgICBjYXNlIFwiQkJCXCI6XG4gICAgICAgICAgcmV0dXJuIGEuZGF5UGVyaW9kKHIsIHtcbiAgICAgICAgICAgIHdpZHRoOiBcImFiYnJldmlhdGVkXCIsXG4gICAgICAgICAgICBjb250ZXh0OiBcImZvcm1hdHRpbmdcIlxuICAgICAgICAgIH0pIHx8IGEuZGF5UGVyaW9kKHIsIHtcbiAgICAgICAgICAgIHdpZHRoOiBcIm5hcnJvd1wiLFxuICAgICAgICAgICAgY29udGV4dDogXCJmb3JtYXR0aW5nXCJcbiAgICAgICAgICB9KTtcbiAgICAgICAgY2FzZSBcIkJCQkJCXCI6XG4gICAgICAgICAgcmV0dXJuIGEuZGF5UGVyaW9kKHIsIHtcbiAgICAgICAgICAgIHdpZHRoOiBcIm5hcnJvd1wiLFxuICAgICAgICAgICAgY29udGV4dDogXCJmb3JtYXR0aW5nXCJcbiAgICAgICAgICB9KTtcbiAgICAgICAgY2FzZSBcIkJCQkJcIjpcbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICByZXR1cm4gYS5kYXlQZXJpb2Qociwge1xuICAgICAgICAgICAgd2lkdGg6IFwid2lkZVwiLFxuICAgICAgICAgICAgY29udGV4dDogXCJmb3JtYXR0aW5nXCJcbiAgICAgICAgICB9KSB8fCBhLmRheVBlcmlvZChyLCB7XG4gICAgICAgICAgICB3aWR0aDogXCJhYmJyZXZpYXRlZFwiLFxuICAgICAgICAgICAgY29udGV4dDogXCJmb3JtYXR0aW5nXCJcbiAgICAgICAgICB9KSB8fCBhLmRheVBlcmlvZChyLCB7XG4gICAgICAgICAgICB3aWR0aDogXCJuYXJyb3dcIixcbiAgICAgICAgICAgIGNvbnRleHQ6IFwiZm9ybWF0dGluZ1wiXG4gICAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcInNldFwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbihyLCBpLCBhKSB7XG4gICAgICByZXR1cm4gci5zZXRVVENIb3VycyhpNihhKSwgMCwgMCwgMCksIHI7XG4gICAgfVxuICB9XSksIG87XG59KFQwKSwgX3cgPSAvKiBAX19QVVJFX18gKi8gZnVuY3Rpb24oZSkge1xuICBTMChvLCBlKTtcbiAgdmFyIHQgPSBFMChvKTtcbiAgZnVuY3Rpb24gbygpIHtcbiAgICB2YXIgbjtcbiAgICB5MCh0aGlzLCBvKTtcbiAgICBmb3IgKHZhciByID0gYXJndW1lbnRzLmxlbmd0aCwgaSA9IG5ldyBBcnJheShyKSwgYSA9IDA7IGEgPCByOyBhKyspXG4gICAgICBpW2FdID0gYXJndW1lbnRzW2FdO1xuICAgIHJldHVybiBuID0gdC5jYWxsLmFwcGx5KHQsIFt0aGlzXS5jb25jYXQoaSkpLCB0MChvMChuKSwgXCJwcmlvcml0eVwiLCA3MCksIHQwKG8wKG4pLCBcImluY29tcGF0aWJsZVRva2Vuc1wiLCBbXCJIXCIsIFwiS1wiLCBcImtcIiwgXCJ0XCIsIFwiVFwiXSksIG47XG4gIH1cbiAgcmV0dXJuIHcwKG8sIFt7XG4gICAga2V5OiBcInBhcnNlXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uKHIsIGksIGEpIHtcbiAgICAgIHN3aXRjaCAoaSkge1xuICAgICAgICBjYXNlIFwiaFwiOlxuICAgICAgICAgIHJldHVybiBvMihjMi5ob3VyMTJoLCByKTtcbiAgICAgICAgY2FzZSBcImhvXCI6XG4gICAgICAgICAgcmV0dXJuIGEub3JkaW5hbE51bWJlcihyLCB7XG4gICAgICAgICAgICB1bml0OiBcImhvdXJcIlxuICAgICAgICAgIH0pO1xuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIHJldHVybiBpMihpLmxlbmd0aCwgcik7XG4gICAgICB9XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcInZhbGlkYXRlXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uKHIsIGkpIHtcbiAgICAgIHJldHVybiBpID49IDEgJiYgaSA8PSAxMjtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwic2V0XCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uKHIsIGksIGEpIHtcbiAgICAgIHZhciBzID0gci5nZXRVVENIb3VycygpID49IDEyO1xuICAgICAgcmV0dXJuIHMgJiYgYSA8IDEyID8gci5zZXRVVENIb3VycyhhICsgMTIsIDAsIDAsIDApIDogIXMgJiYgYSA9PT0gMTIgPyByLnNldFVUQ0hvdXJzKDAsIDAsIDAsIDApIDogci5zZXRVVENIb3VycyhhLCAwLCAwLCAwKSwgcjtcbiAgICB9XG4gIH1dKSwgbztcbn0oVDApLCAkdyA9IC8qIEBfX1BVUkVfXyAqLyBmdW5jdGlvbihlKSB7XG4gIFMwKG8sIGUpO1xuICB2YXIgdCA9IEUwKG8pO1xuICBmdW5jdGlvbiBvKCkge1xuICAgIHZhciBuO1xuICAgIHkwKHRoaXMsIG8pO1xuICAgIGZvciAodmFyIHIgPSBhcmd1bWVudHMubGVuZ3RoLCBpID0gbmV3IEFycmF5KHIpLCBhID0gMDsgYSA8IHI7IGErKylcbiAgICAgIGlbYV0gPSBhcmd1bWVudHNbYV07XG4gICAgcmV0dXJuIG4gPSB0LmNhbGwuYXBwbHkodCwgW3RoaXNdLmNvbmNhdChpKSksIHQwKG8wKG4pLCBcInByaW9yaXR5XCIsIDcwKSwgdDAobzAobiksIFwiaW5jb21wYXRpYmxlVG9rZW5zXCIsIFtcImFcIiwgXCJiXCIsIFwiaFwiLCBcIktcIiwgXCJrXCIsIFwidFwiLCBcIlRcIl0pLCBuO1xuICB9XG4gIHJldHVybiB3MChvLCBbe1xuICAgIGtleTogXCJwYXJzZVwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbihyLCBpLCBhKSB7XG4gICAgICBzd2l0Y2ggKGkpIHtcbiAgICAgICAgY2FzZSBcIkhcIjpcbiAgICAgICAgICByZXR1cm4gbzIoYzIuaG91cjIzaCwgcik7XG4gICAgICAgIGNhc2UgXCJIb1wiOlxuICAgICAgICAgIHJldHVybiBhLm9yZGluYWxOdW1iZXIociwge1xuICAgICAgICAgICAgdW5pdDogXCJob3VyXCJcbiAgICAgICAgICB9KTtcbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICByZXR1cm4gaTIoaS5sZW5ndGgsIHIpO1xuICAgICAgfVxuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJ2YWxpZGF0ZVwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbihyLCBpKSB7XG4gICAgICByZXR1cm4gaSA+PSAwICYmIGkgPD0gMjM7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcInNldFwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbihyLCBpLCBhKSB7XG4gICAgICByZXR1cm4gci5zZXRVVENIb3VycyhhLCAwLCAwLCAwKSwgcjtcbiAgICB9XG4gIH1dKSwgbztcbn0oVDApLCBleCA9IC8qIEBfX1BVUkVfXyAqLyBmdW5jdGlvbihlKSB7XG4gIFMwKG8sIGUpO1xuICB2YXIgdCA9IEUwKG8pO1xuICBmdW5jdGlvbiBvKCkge1xuICAgIHZhciBuO1xuICAgIHkwKHRoaXMsIG8pO1xuICAgIGZvciAodmFyIHIgPSBhcmd1bWVudHMubGVuZ3RoLCBpID0gbmV3IEFycmF5KHIpLCBhID0gMDsgYSA8IHI7IGErKylcbiAgICAgIGlbYV0gPSBhcmd1bWVudHNbYV07XG4gICAgcmV0dXJuIG4gPSB0LmNhbGwuYXBwbHkodCwgW3RoaXNdLmNvbmNhdChpKSksIHQwKG8wKG4pLCBcInByaW9yaXR5XCIsIDcwKSwgdDAobzAobiksIFwiaW5jb21wYXRpYmxlVG9rZW5zXCIsIFtcImhcIiwgXCJIXCIsIFwia1wiLCBcInRcIiwgXCJUXCJdKSwgbjtcbiAgfVxuICByZXR1cm4gdzAobywgW3tcbiAgICBrZXk6IFwicGFyc2VcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24ociwgaSwgYSkge1xuICAgICAgc3dpdGNoIChpKSB7XG4gICAgICAgIGNhc2UgXCJLXCI6XG4gICAgICAgICAgcmV0dXJuIG8yKGMyLmhvdXIxMWgsIHIpO1xuICAgICAgICBjYXNlIFwiS29cIjpcbiAgICAgICAgICByZXR1cm4gYS5vcmRpbmFsTnVtYmVyKHIsIHtcbiAgICAgICAgICAgIHVuaXQ6IFwiaG91clwiXG4gICAgICAgICAgfSk7XG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgcmV0dXJuIGkyKGkubGVuZ3RoLCByKTtcbiAgICAgIH1cbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwidmFsaWRhdGVcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24ociwgaSkge1xuICAgICAgcmV0dXJuIGkgPj0gMCAmJiBpIDw9IDExO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJzZXRcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24ociwgaSwgYSkge1xuICAgICAgdmFyIHMgPSByLmdldFVUQ0hvdXJzKCkgPj0gMTI7XG4gICAgICByZXR1cm4gcyAmJiBhIDwgMTIgPyByLnNldFVUQ0hvdXJzKGEgKyAxMiwgMCwgMCwgMCkgOiByLnNldFVUQ0hvdXJzKGEsIDAsIDAsIDApLCByO1xuICAgIH1cbiAgfV0pLCBvO1xufShUMCksIHR4ID0gLyogQF9fUFVSRV9fICovIGZ1bmN0aW9uKGUpIHtcbiAgUzAobywgZSk7XG4gIHZhciB0ID0gRTAobyk7XG4gIGZ1bmN0aW9uIG8oKSB7XG4gICAgdmFyIG47XG4gICAgeTAodGhpcywgbyk7XG4gICAgZm9yICh2YXIgciA9IGFyZ3VtZW50cy5sZW5ndGgsIGkgPSBuZXcgQXJyYXkociksIGEgPSAwOyBhIDwgcjsgYSsrKVxuICAgICAgaVthXSA9IGFyZ3VtZW50c1thXTtcbiAgICByZXR1cm4gbiA9IHQuY2FsbC5hcHBseSh0LCBbdGhpc10uY29uY2F0KGkpKSwgdDAobzAobiksIFwicHJpb3JpdHlcIiwgNzApLCB0MChvMChuKSwgXCJpbmNvbXBhdGlibGVUb2tlbnNcIiwgW1wiYVwiLCBcImJcIiwgXCJoXCIsIFwiSFwiLCBcIktcIiwgXCJ0XCIsIFwiVFwiXSksIG47XG4gIH1cbiAgcmV0dXJuIHcwKG8sIFt7XG4gICAga2V5OiBcInBhcnNlXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uKHIsIGksIGEpIHtcbiAgICAgIHN3aXRjaCAoaSkge1xuICAgICAgICBjYXNlIFwia1wiOlxuICAgICAgICAgIHJldHVybiBvMihjMi5ob3VyMjRoLCByKTtcbiAgICAgICAgY2FzZSBcImtvXCI6XG4gICAgICAgICAgcmV0dXJuIGEub3JkaW5hbE51bWJlcihyLCB7XG4gICAgICAgICAgICB1bml0OiBcImhvdXJcIlxuICAgICAgICAgIH0pO1xuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIHJldHVybiBpMihpLmxlbmd0aCwgcik7XG4gICAgICB9XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcInZhbGlkYXRlXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uKHIsIGkpIHtcbiAgICAgIHJldHVybiBpID49IDEgJiYgaSA8PSAyNDtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwic2V0XCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uKHIsIGksIGEpIHtcbiAgICAgIHZhciBzID0gYSA8PSAyNCA/IGEgJSAyNCA6IGE7XG4gICAgICByZXR1cm4gci5zZXRVVENIb3VycyhzLCAwLCAwLCAwKSwgcjtcbiAgICB9XG4gIH1dKSwgbztcbn0oVDApLCBveCA9IC8qIEBfX1BVUkVfXyAqLyBmdW5jdGlvbihlKSB7XG4gIFMwKG8sIGUpO1xuICB2YXIgdCA9IEUwKG8pO1xuICBmdW5jdGlvbiBvKCkge1xuICAgIHZhciBuO1xuICAgIHkwKHRoaXMsIG8pO1xuICAgIGZvciAodmFyIHIgPSBhcmd1bWVudHMubGVuZ3RoLCBpID0gbmV3IEFycmF5KHIpLCBhID0gMDsgYSA8IHI7IGErKylcbiAgICAgIGlbYV0gPSBhcmd1bWVudHNbYV07XG4gICAgcmV0dXJuIG4gPSB0LmNhbGwuYXBwbHkodCwgW3RoaXNdLmNvbmNhdChpKSksIHQwKG8wKG4pLCBcInByaW9yaXR5XCIsIDYwKSwgdDAobzAobiksIFwiaW5jb21wYXRpYmxlVG9rZW5zXCIsIFtcInRcIiwgXCJUXCJdKSwgbjtcbiAgfVxuICByZXR1cm4gdzAobywgW3tcbiAgICBrZXk6IFwicGFyc2VcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24ociwgaSwgYSkge1xuICAgICAgc3dpdGNoIChpKSB7XG4gICAgICAgIGNhc2UgXCJtXCI6XG4gICAgICAgICAgcmV0dXJuIG8yKGMyLm1pbnV0ZSwgcik7XG4gICAgICAgIGNhc2UgXCJtb1wiOlxuICAgICAgICAgIHJldHVybiBhLm9yZGluYWxOdW1iZXIociwge1xuICAgICAgICAgICAgdW5pdDogXCJtaW51dGVcIlxuICAgICAgICAgIH0pO1xuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIHJldHVybiBpMihpLmxlbmd0aCwgcik7XG4gICAgICB9XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcInZhbGlkYXRlXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uKHIsIGkpIHtcbiAgICAgIHJldHVybiBpID49IDAgJiYgaSA8PSA1OTtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwic2V0XCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uKHIsIGksIGEpIHtcbiAgICAgIHJldHVybiByLnNldFVUQ01pbnV0ZXMoYSwgMCwgMCksIHI7XG4gICAgfVxuICB9XSksIG87XG59KFQwKSwgcnggPSAvKiBAX19QVVJFX18gKi8gZnVuY3Rpb24oZSkge1xuICBTMChvLCBlKTtcbiAgdmFyIHQgPSBFMChvKTtcbiAgZnVuY3Rpb24gbygpIHtcbiAgICB2YXIgbjtcbiAgICB5MCh0aGlzLCBvKTtcbiAgICBmb3IgKHZhciByID0gYXJndW1lbnRzLmxlbmd0aCwgaSA9IG5ldyBBcnJheShyKSwgYSA9IDA7IGEgPCByOyBhKyspXG4gICAgICBpW2FdID0gYXJndW1lbnRzW2FdO1xuICAgIHJldHVybiBuID0gdC5jYWxsLmFwcGx5KHQsIFt0aGlzXS5jb25jYXQoaSkpLCB0MChvMChuKSwgXCJwcmlvcml0eVwiLCA1MCksIHQwKG8wKG4pLCBcImluY29tcGF0aWJsZVRva2Vuc1wiLCBbXCJ0XCIsIFwiVFwiXSksIG47XG4gIH1cbiAgcmV0dXJuIHcwKG8sIFt7XG4gICAga2V5OiBcInBhcnNlXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uKHIsIGksIGEpIHtcbiAgICAgIHN3aXRjaCAoaSkge1xuICAgICAgICBjYXNlIFwic1wiOlxuICAgICAgICAgIHJldHVybiBvMihjMi5zZWNvbmQsIHIpO1xuICAgICAgICBjYXNlIFwic29cIjpcbiAgICAgICAgICByZXR1cm4gYS5vcmRpbmFsTnVtYmVyKHIsIHtcbiAgICAgICAgICAgIHVuaXQ6IFwic2Vjb25kXCJcbiAgICAgICAgICB9KTtcbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICByZXR1cm4gaTIoaS5sZW5ndGgsIHIpO1xuICAgICAgfVxuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJ2YWxpZGF0ZVwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbihyLCBpKSB7XG4gICAgICByZXR1cm4gaSA+PSAwICYmIGkgPD0gNTk7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcInNldFwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbihyLCBpLCBhKSB7XG4gICAgICByZXR1cm4gci5zZXRVVENTZWNvbmRzKGEsIDApLCByO1xuICAgIH1cbiAgfV0pLCBvO1xufShUMCksIG54ID0gLyogQF9fUFVSRV9fICovIGZ1bmN0aW9uKGUpIHtcbiAgUzAobywgZSk7XG4gIHZhciB0ID0gRTAobyk7XG4gIGZ1bmN0aW9uIG8oKSB7XG4gICAgdmFyIG47XG4gICAgeTAodGhpcywgbyk7XG4gICAgZm9yICh2YXIgciA9IGFyZ3VtZW50cy5sZW5ndGgsIGkgPSBuZXcgQXJyYXkociksIGEgPSAwOyBhIDwgcjsgYSsrKVxuICAgICAgaVthXSA9IGFyZ3VtZW50c1thXTtcbiAgICByZXR1cm4gbiA9IHQuY2FsbC5hcHBseSh0LCBbdGhpc10uY29uY2F0KGkpKSwgdDAobzAobiksIFwicHJpb3JpdHlcIiwgMzApLCB0MChvMChuKSwgXCJpbmNvbXBhdGlibGVUb2tlbnNcIiwgW1widFwiLCBcIlRcIl0pLCBuO1xuICB9XG4gIHJldHVybiB3MChvLCBbe1xuICAgIGtleTogXCJwYXJzZVwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbihyLCBpKSB7XG4gICAgICB2YXIgYSA9IGZ1bmN0aW9uKGwpIHtcbiAgICAgICAgcmV0dXJuIE1hdGguZmxvb3IobCAqIE1hdGgucG93KDEwLCAtaS5sZW5ndGggKyAzKSk7XG4gICAgICB9O1xuICAgICAgcmV0dXJuIGwyKGkyKGkubGVuZ3RoLCByKSwgYSk7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcInNldFwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbihyLCBpLCBhKSB7XG4gICAgICByZXR1cm4gci5zZXRVVENNaWxsaXNlY29uZHMoYSksIHI7XG4gICAgfVxuICB9XSksIG87XG59KFQwKSwgaXggPSAvKiBAX19QVVJFX18gKi8gZnVuY3Rpb24oZSkge1xuICBTMChvLCBlKTtcbiAgdmFyIHQgPSBFMChvKTtcbiAgZnVuY3Rpb24gbygpIHtcbiAgICB2YXIgbjtcbiAgICB5MCh0aGlzLCBvKTtcbiAgICBmb3IgKHZhciByID0gYXJndW1lbnRzLmxlbmd0aCwgaSA9IG5ldyBBcnJheShyKSwgYSA9IDA7IGEgPCByOyBhKyspXG4gICAgICBpW2FdID0gYXJndW1lbnRzW2FdO1xuICAgIHJldHVybiBuID0gdC5jYWxsLmFwcGx5KHQsIFt0aGlzXS5jb25jYXQoaSkpLCB0MChvMChuKSwgXCJwcmlvcml0eVwiLCAxMCksIHQwKG8wKG4pLCBcImluY29tcGF0aWJsZVRva2Vuc1wiLCBbXCJ0XCIsIFwiVFwiLCBcInhcIl0pLCBuO1xuICB9XG4gIHJldHVybiB3MChvLCBbe1xuICAgIGtleTogXCJwYXJzZVwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbihyLCBpKSB7XG4gICAgICBzd2l0Y2ggKGkpIHtcbiAgICAgICAgY2FzZSBcIlhcIjpcbiAgICAgICAgICByZXR1cm4gTmUoa2UuYmFzaWNPcHRpb25hbE1pbnV0ZXMsIHIpO1xuICAgICAgICBjYXNlIFwiWFhcIjpcbiAgICAgICAgICByZXR1cm4gTmUoa2UuYmFzaWMsIHIpO1xuICAgICAgICBjYXNlIFwiWFhYWFwiOlxuICAgICAgICAgIHJldHVybiBOZShrZS5iYXNpY09wdGlvbmFsU2Vjb25kcywgcik7XG4gICAgICAgIGNhc2UgXCJYWFhYWFwiOlxuICAgICAgICAgIHJldHVybiBOZShrZS5leHRlbmRlZE9wdGlvbmFsU2Vjb25kcywgcik7XG4gICAgICAgIGNhc2UgXCJYWFhcIjpcbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICByZXR1cm4gTmUoa2UuZXh0ZW5kZWQsIHIpO1xuICAgICAgfVxuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJzZXRcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24ociwgaSwgYSkge1xuICAgICAgcmV0dXJuIGkudGltZXN0YW1wSXNTZXQgPyByIDogbmV3IERhdGUoci5nZXRUaW1lKCkgLSBhKTtcbiAgICB9XG4gIH1dKSwgbztcbn0oVDApLCBheCA9IC8qIEBfX1BVUkVfXyAqLyBmdW5jdGlvbihlKSB7XG4gIFMwKG8sIGUpO1xuICB2YXIgdCA9IEUwKG8pO1xuICBmdW5jdGlvbiBvKCkge1xuICAgIHZhciBuO1xuICAgIHkwKHRoaXMsIG8pO1xuICAgIGZvciAodmFyIHIgPSBhcmd1bWVudHMubGVuZ3RoLCBpID0gbmV3IEFycmF5KHIpLCBhID0gMDsgYSA8IHI7IGErKylcbiAgICAgIGlbYV0gPSBhcmd1bWVudHNbYV07XG4gICAgcmV0dXJuIG4gPSB0LmNhbGwuYXBwbHkodCwgW3RoaXNdLmNvbmNhdChpKSksIHQwKG8wKG4pLCBcInByaW9yaXR5XCIsIDEwKSwgdDAobzAobiksIFwiaW5jb21wYXRpYmxlVG9rZW5zXCIsIFtcInRcIiwgXCJUXCIsIFwiWFwiXSksIG47XG4gIH1cbiAgcmV0dXJuIHcwKG8sIFt7XG4gICAga2V5OiBcInBhcnNlXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uKHIsIGkpIHtcbiAgICAgIHN3aXRjaCAoaSkge1xuICAgICAgICBjYXNlIFwieFwiOlxuICAgICAgICAgIHJldHVybiBOZShrZS5iYXNpY09wdGlvbmFsTWludXRlcywgcik7XG4gICAgICAgIGNhc2UgXCJ4eFwiOlxuICAgICAgICAgIHJldHVybiBOZShrZS5iYXNpYywgcik7XG4gICAgICAgIGNhc2UgXCJ4eHh4XCI6XG4gICAgICAgICAgcmV0dXJuIE5lKGtlLmJhc2ljT3B0aW9uYWxTZWNvbmRzLCByKTtcbiAgICAgICAgY2FzZSBcInh4eHh4XCI6XG4gICAgICAgICAgcmV0dXJuIE5lKGtlLmV4dGVuZGVkT3B0aW9uYWxTZWNvbmRzLCByKTtcbiAgICAgICAgY2FzZSBcInh4eFwiOlxuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIHJldHVybiBOZShrZS5leHRlbmRlZCwgcik7XG4gICAgICB9XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcInNldFwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbihyLCBpLCBhKSB7XG4gICAgICByZXR1cm4gaS50aW1lc3RhbXBJc1NldCA/IHIgOiBuZXcgRGF0ZShyLmdldFRpbWUoKSAtIGEpO1xuICAgIH1cbiAgfV0pLCBvO1xufShUMCksIHN4ID0gLyogQF9fUFVSRV9fICovIGZ1bmN0aW9uKGUpIHtcbiAgUzAobywgZSk7XG4gIHZhciB0ID0gRTAobyk7XG4gIGZ1bmN0aW9uIG8oKSB7XG4gICAgdmFyIG47XG4gICAgeTAodGhpcywgbyk7XG4gICAgZm9yICh2YXIgciA9IGFyZ3VtZW50cy5sZW5ndGgsIGkgPSBuZXcgQXJyYXkociksIGEgPSAwOyBhIDwgcjsgYSsrKVxuICAgICAgaVthXSA9IGFyZ3VtZW50c1thXTtcbiAgICByZXR1cm4gbiA9IHQuY2FsbC5hcHBseSh0LCBbdGhpc10uY29uY2F0KGkpKSwgdDAobzAobiksIFwicHJpb3JpdHlcIiwgNDApLCB0MChvMChuKSwgXCJpbmNvbXBhdGlibGVUb2tlbnNcIiwgXCIqXCIpLCBuO1xuICB9XG4gIHJldHVybiB3MChvLCBbe1xuICAgIGtleTogXCJwYXJzZVwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbihyKSB7XG4gICAgICByZXR1cm4gaXAocik7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcInNldFwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbihyLCBpLCBhKSB7XG4gICAgICByZXR1cm4gW25ldyBEYXRlKGEgKiAxZTMpLCB7XG4gICAgICAgIHRpbWVzdGFtcElzU2V0OiAhMFxuICAgICAgfV07XG4gICAgfVxuICB9XSksIG87XG59KFQwKSwgY3ggPSAvKiBAX19QVVJFX18gKi8gZnVuY3Rpb24oZSkge1xuICBTMChvLCBlKTtcbiAgdmFyIHQgPSBFMChvKTtcbiAgZnVuY3Rpb24gbygpIHtcbiAgICB2YXIgbjtcbiAgICB5MCh0aGlzLCBvKTtcbiAgICBmb3IgKHZhciByID0gYXJndW1lbnRzLmxlbmd0aCwgaSA9IG5ldyBBcnJheShyKSwgYSA9IDA7IGEgPCByOyBhKyspXG4gICAgICBpW2FdID0gYXJndW1lbnRzW2FdO1xuICAgIHJldHVybiBuID0gdC5jYWxsLmFwcGx5KHQsIFt0aGlzXS5jb25jYXQoaSkpLCB0MChvMChuKSwgXCJwcmlvcml0eVwiLCAyMCksIHQwKG8wKG4pLCBcImluY29tcGF0aWJsZVRva2Vuc1wiLCBcIipcIiksIG47XG4gIH1cbiAgcmV0dXJuIHcwKG8sIFt7XG4gICAga2V5OiBcInBhcnNlXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uKHIpIHtcbiAgICAgIHJldHVybiBpcChyKTtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwic2V0XCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uKHIsIGksIGEpIHtcbiAgICAgIHJldHVybiBbbmV3IERhdGUoYSksIHtcbiAgICAgICAgdGltZXN0YW1wSXNTZXQ6ICEwXG4gICAgICB9XTtcbiAgICB9XG4gIH1dKSwgbztcbn0oVDApLCBseCA9IHtcbiAgRzogbmV3IHd3KCksXG4gIHk6IG5ldyB4dygpLFxuICBZOiBuZXcgV3coKSxcbiAgUjogbmV3IFJ3KCksXG4gIHU6IG5ldyBCdygpLFxuICBROiBuZXcgU3coKSxcbiAgcTogbmV3IEV3KCksXG4gIE06IG5ldyBrdygpLFxuICBMOiBuZXcgTncoKSxcbiAgdzogbmV3IEl3KCksXG4gIEk6IG5ldyBIdygpLFxuICBkOiBuZXcgRncoKSxcbiAgRDogbmV3IFh3KCksXG4gIEU6IG5ldyBVdygpLFxuICBlOiBuZXcgWXcoKSxcbiAgYzogbmV3IEd3KCksXG4gIGk6IG5ldyBadygpLFxuICBhOiBuZXcgancoKSxcbiAgYjogbmV3IEt3KCksXG4gIEI6IG5ldyBKdygpLFxuICBoOiBuZXcgX3coKSxcbiAgSDogbmV3ICR3KCksXG4gIEs6IG5ldyBleCgpLFxuICBrOiBuZXcgdHgoKSxcbiAgbTogbmV3IG94KCksXG4gIHM6IG5ldyByeCgpLFxuICBTOiBuZXcgbngoKSxcbiAgWDogbmV3IGl4KCksXG4gIHg6IG5ldyBheCgpLFxuICB0OiBuZXcgc3goKSxcbiAgVDogbmV3IGN4KClcbn0sIHB4ID0gL1t5WVFxTUx3SWREZWNpaEhLa21zXW98KFxcdylcXDEqfCcnfCcoJyd8W14nXSkrKCd8JCl8Li9nLCBkeCA9IC9QK3ArfFArfHArfCcnfCcoJyd8W14nXSkrKCd8JCl8Li9nLCBieCA9IC9eJyhbXl0qPyknPyQvLCBNeCA9IC8nJy9nLCBBeCA9IC9cXFMvLCB1eCA9IC9bYS16QS1aXS87XG5mdW5jdGlvbiB2aShlLCB0LCBvLCBuKSB7XG4gIHZhciByLCBpLCBhLCBzLCBsLCBwLCBkLCBiLCBNLCB1LCBBLCB6LCBmLCBPLCBoLCBnLCB2LCBMO1xuICBRMSgzLCBhcmd1bWVudHMpO1xuICB2YXIgeSA9IFN0cmluZyhlKSwgQiA9IFN0cmluZyh0KSwgWCA9IFh0KCksIEYgPSAociA9IChpID0gbiA9PSBudWxsID8gdm9pZCAwIDogbi5sb2NhbGUpICE9PSBudWxsICYmIGkgIT09IHZvaWQgMCA/IGkgOiBYLmxvY2FsZSkgIT09IG51bGwgJiYgciAhPT0gdm9pZCAwID8gciA6IHI2O1xuICBpZiAoIUYubWF0Y2gpXG4gICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoXCJsb2NhbGUgbXVzdCBjb250YWluIG1hdGNoIHByb3BlcnR5XCIpO1xuICB2YXIgVCA9IHYwKChhID0gKHMgPSAobCA9IChwID0gbiA9PSBudWxsID8gdm9pZCAwIDogbi5maXJzdFdlZWtDb250YWluc0RhdGUpICE9PSBudWxsICYmIHAgIT09IHZvaWQgMCA/IHAgOiBuID09IG51bGwgfHwgKGQgPSBuLmxvY2FsZSkgPT09IG51bGwgfHwgZCA9PT0gdm9pZCAwIHx8IChiID0gZC5vcHRpb25zKSA9PT0gbnVsbCB8fCBiID09PSB2b2lkIDAgPyB2b2lkIDAgOiBiLmZpcnN0V2Vla0NvbnRhaW5zRGF0ZSkgIT09IG51bGwgJiYgbCAhPT0gdm9pZCAwID8gbCA6IFguZmlyc3RXZWVrQ29udGFpbnNEYXRlKSAhPT0gbnVsbCAmJiBzICE9PSB2b2lkIDAgPyBzIDogKE0gPSBYLmxvY2FsZSkgPT09IG51bGwgfHwgTSA9PT0gdm9pZCAwIHx8ICh1ID0gTS5vcHRpb25zKSA9PT0gbnVsbCB8fCB1ID09PSB2b2lkIDAgPyB2b2lkIDAgOiB1LmZpcnN0V2Vla0NvbnRhaW5zRGF0ZSkgIT09IG51bGwgJiYgYSAhPT0gdm9pZCAwID8gYSA6IDEpO1xuICBpZiAoIShUID49IDEgJiYgVCA8PSA3KSlcbiAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcihcImZpcnN0V2Vla0NvbnRhaW5zRGF0ZSBtdXN0IGJlIGJldHdlZW4gMSBhbmQgNyBpbmNsdXNpdmVseVwiKTtcbiAgdmFyIHcgPSB2MCgoQSA9ICh6ID0gKGYgPSAoTyA9IG4gPT0gbnVsbCA/IHZvaWQgMCA6IG4ud2Vla1N0YXJ0c09uKSAhPT0gbnVsbCAmJiBPICE9PSB2b2lkIDAgPyBPIDogbiA9PSBudWxsIHx8IChoID0gbi5sb2NhbGUpID09PSBudWxsIHx8IGggPT09IHZvaWQgMCB8fCAoZyA9IGgub3B0aW9ucykgPT09IG51bGwgfHwgZyA9PT0gdm9pZCAwID8gdm9pZCAwIDogZy53ZWVrU3RhcnRzT24pICE9PSBudWxsICYmIGYgIT09IHZvaWQgMCA/IGYgOiBYLndlZWtTdGFydHNPbikgIT09IG51bGwgJiYgeiAhPT0gdm9pZCAwID8geiA6ICh2ID0gWC5sb2NhbGUpID09PSBudWxsIHx8IHYgPT09IHZvaWQgMCB8fCAoTCA9IHYub3B0aW9ucykgPT09IG51bGwgfHwgTCA9PT0gdm9pZCAwID8gdm9pZCAwIDogTC53ZWVrU3RhcnRzT24pICE9PSBudWxsICYmIEEgIT09IHZvaWQgMCA/IEEgOiAwKTtcbiAgaWYgKCEodyA+PSAwICYmIHcgPD0gNikpXG4gICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoXCJ3ZWVrU3RhcnRzT24gbXVzdCBiZSBiZXR3ZWVuIDAgYW5kIDYgaW5jbHVzaXZlbHlcIik7XG4gIGlmIChCID09PSBcIlwiKVxuICAgIHJldHVybiB5ID09PSBcIlwiID8gajEobykgOiAvKiBAX19QVVJFX18gKi8gbmV3IERhdGUoTmFOKTtcbiAgdmFyIEggPSB7XG4gICAgZmlyc3RXZWVrQ29udGFpbnNEYXRlOiBULFxuICAgIHdlZWtTdGFydHNPbjogdyxcbiAgICBsb2NhbGU6IEZcbiAgfSwgQyA9IFtuZXcgeXcoKV0sIHEgPSBCLm1hdGNoKGR4KS5tYXAoZnVuY3Rpb24oRSkge1xuICAgIHZhciBEID0gRVswXTtcbiAgICBpZiAoRCBpbiBHYSkge1xuICAgICAgdmFyIEcgPSBHYVtEXTtcbiAgICAgIHJldHVybiBHKEUsIEYuZm9ybWF0TG9uZyk7XG4gICAgfVxuICAgIHJldHVybiBFO1xuICB9KS5qb2luKFwiXCIpLm1hdGNoKHB4KSwgbSA9IFtdLCBrID0gRjgocSksIHg7XG4gIHRyeSB7XG4gICAgdmFyIE4gPSBmdW5jdGlvbigpIHtcbiAgICAgIHZhciBEID0geC52YWx1ZTtcbiAgICAgICEobiAhPSBudWxsICYmIG4udXNlQWRkaXRpb25hbFdlZWtZZWFyVG9rZW5zKSAmJiB0cChEKSAmJiBNNChELCBCLCBlKSwgIShuICE9IG51bGwgJiYgbi51c2VBZGRpdGlvbmFsRGF5T2ZZZWFyVG9rZW5zKSAmJiBlcChEKSAmJiBNNChELCBCLCBlKTtcbiAgICAgIHZhciBHID0gRFswXSwgSiA9IGx4W0ddO1xuICAgICAgaWYgKEopIHtcbiAgICAgICAgdmFyIFMgPSBKLmluY29tcGF0aWJsZVRva2VucztcbiAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkoUykpIHtcbiAgICAgICAgICB2YXIgVyA9IG0uZmluZChmdW5jdGlvbihZKSB7XG4gICAgICAgICAgICByZXR1cm4gUy5pbmNsdWRlcyhZLnRva2VuKSB8fCBZLnRva2VuID09PSBHO1xuICAgICAgICAgIH0pO1xuICAgICAgICAgIGlmIChXKVxuICAgICAgICAgICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoXCJUaGUgZm9ybWF0IHN0cmluZyBtdXN0bid0IGNvbnRhaW4gYFwiLmNvbmNhdChXLmZ1bGxUb2tlbiwgXCJgIGFuZCBgXCIpLmNvbmNhdChELCBcImAgYXQgdGhlIHNhbWUgdGltZVwiKSk7XG4gICAgICAgIH0gZWxzZSBpZiAoSi5pbmNvbXBhdGlibGVUb2tlbnMgPT09IFwiKlwiICYmIG0ubGVuZ3RoID4gMClcbiAgICAgICAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcihcIlRoZSBmb3JtYXQgc3RyaW5nIG11c3RuJ3QgY29udGFpbiBgXCIuY29uY2F0KEQsIFwiYCBhbmQgYW55IG90aGVyIHRva2VuIGF0IHRoZSBzYW1lIHRpbWVcIikpO1xuICAgICAgICBtLnB1c2goe1xuICAgICAgICAgIHRva2VuOiBHLFxuICAgICAgICAgIGZ1bGxUb2tlbjogRFxuICAgICAgICB9KTtcbiAgICAgICAgdmFyIFAgPSBKLnJ1bih5LCBELCBGLm1hdGNoLCBIKTtcbiAgICAgICAgaWYgKCFQKVxuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICB2OiAvKiBAX19QVVJFX18gKi8gbmV3IERhdGUoTmFOKVxuICAgICAgICAgIH07XG4gICAgICAgIEMucHVzaChQLnNldHRlciksIHkgPSBQLnJlc3Q7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpZiAoRy5tYXRjaCh1eCkpXG4gICAgICAgICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoXCJGb3JtYXQgc3RyaW5nIGNvbnRhaW5zIGFuIHVuZXNjYXBlZCBsYXRpbiBhbHBoYWJldCBjaGFyYWN0ZXIgYFwiICsgRyArIFwiYFwiKTtcbiAgICAgICAgaWYgKEQgPT09IFwiJydcIiA/IEQgPSBcIidcIiA6IEcgPT09IFwiJ1wiICYmIChEID0gengoRCkpLCB5LmluZGV4T2YoRCkgPT09IDApXG4gICAgICAgICAgeSA9IHkuc2xpY2UoRC5sZW5ndGgpO1xuICAgICAgICBlbHNlXG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHY6IC8qIEBfX1BVUkVfXyAqLyBuZXcgRGF0ZShOYU4pXG4gICAgICAgICAgfTtcbiAgICAgIH1cbiAgICB9O1xuICAgIGZvciAoay5zKCk7ICEoeCA9IGsubigpKS5kb25lOyApIHtcbiAgICAgIHZhciBWID0gTigpO1xuICAgICAgaWYgKE1lKFYpID09PSBcIm9iamVjdFwiKVxuICAgICAgICByZXR1cm4gVi52O1xuICAgIH1cbiAgfSBjYXRjaCAoRSkge1xuICAgIGsuZShFKTtcbiAgfSBmaW5hbGx5IHtcbiAgICBrLmYoKTtcbiAgfVxuICBpZiAoeS5sZW5ndGggPiAwICYmIEF4LnRlc3QoeSkpXG4gICAgcmV0dXJuIC8qIEBfX1BVUkVfXyAqLyBuZXcgRGF0ZShOYU4pO1xuICB2YXIgUiA9IEMubWFwKGZ1bmN0aW9uKEUpIHtcbiAgICByZXR1cm4gRS5wcmlvcml0eTtcbiAgfSkuc29ydChmdW5jdGlvbihFLCBEKSB7XG4gICAgcmV0dXJuIEQgLSBFO1xuICB9KS5maWx0ZXIoZnVuY3Rpb24oRSwgRCwgRykge1xuICAgIHJldHVybiBHLmluZGV4T2YoRSkgPT09IEQ7XG4gIH0pLm1hcChmdW5jdGlvbihFKSB7XG4gICAgcmV0dXJuIEMuZmlsdGVyKGZ1bmN0aW9uKEQpIHtcbiAgICAgIHJldHVybiBELnByaW9yaXR5ID09PSBFO1xuICAgIH0pLnNvcnQoZnVuY3Rpb24oRCwgRykge1xuICAgICAgcmV0dXJuIEcuc3ViUHJpb3JpdHkgLSBELnN1YlByaW9yaXR5O1xuICAgIH0pO1xuICB9KS5tYXAoZnVuY3Rpb24oRSkge1xuICAgIHJldHVybiBFWzBdO1xuICB9KSwgSSA9IGoxKG8pO1xuICBpZiAoaXNOYU4oSS5nZXRUaW1lKCkpKVxuICAgIHJldHVybiAvKiBAX19QVVJFX18gKi8gbmV3IERhdGUoTmFOKTtcbiAgdmFyIGogPSBqbChJLCBqMyhJKSksIFUgPSB7fSwgXyA9IEY4KFIpLCByMTtcbiAgdHJ5IHtcbiAgICBmb3IgKF8ucygpOyAhKHIxID0gXy5uKCkpLmRvbmU7ICkge1xuICAgICAgdmFyIEsgPSByMS52YWx1ZTtcbiAgICAgIGlmICghSy52YWxpZGF0ZShqLCBIKSlcbiAgICAgICAgcmV0dXJuIC8qIEBfX1BVUkVfXyAqLyBuZXcgRGF0ZShOYU4pO1xuICAgICAgdmFyIFEgPSBLLnNldChqLCBVLCBIKTtcbiAgICAgIEFycmF5LmlzQXJyYXkoUSkgPyAoaiA9IFFbMF0sIG42KFUsIFFbMV0pKSA6IGogPSBRO1xuICAgIH1cbiAgfSBjYXRjaCAoRSkge1xuICAgIF8uZShFKTtcbiAgfSBmaW5hbGx5IHtcbiAgICBfLmYoKTtcbiAgfVxuICByZXR1cm4gajtcbn1cbmZ1bmN0aW9uIHp4KGUpIHtcbiAgcmV0dXJuIGUubWF0Y2goYngpWzFdLnJlcGxhY2UoTXgsIFwiJ1wiKTtcbn1cbmZ1bmN0aW9uIGh4KGUsIHQpIHtcbiAgUTEoMiwgYXJndW1lbnRzKTtcbiAgdmFyIG8gPSBqMShlKSwgbiA9IGoxKHQpO1xuICByZXR1cm4gby5nZXRGdWxsWWVhcigpID09PSBuLmdldEZ1bGxZZWFyKCkgJiYgby5nZXRNb250aCgpID09PSBuLmdldE1vbnRoKCk7XG59XG5mdW5jdGlvbiBPeChlLCB0KSB7XG4gIFExKDIsIGFyZ3VtZW50cyk7XG4gIHZhciBvID0gWWEoZSksIG4gPSBZYSh0KTtcbiAgcmV0dXJuIG8uZ2V0VGltZSgpID09PSBuLmdldFRpbWUoKTtcbn1cbmZ1bmN0aW9uIGZ4KGUsIHQpIHtcbiAgUTEoMiwgYXJndW1lbnRzKTtcbiAgdmFyIG8gPSBqMShlKSwgbiA9IGoxKHQpO1xuICByZXR1cm4gby5nZXRGdWxsWWVhcigpID09PSBuLmdldEZ1bGxZZWFyKCk7XG59XG5mdW5jdGlvbiBicihlLCB0KSB7XG4gIFExKDIsIGFyZ3VtZW50cyk7XG4gIHZhciBvID0gajEoZSkuZ2V0VGltZSgpLCBuID0gajEodC5zdGFydCkuZ2V0VGltZSgpLCByID0gajEodC5lbmQpLmdldFRpbWUoKTtcbiAgaWYgKCEobiA8PSByKSlcbiAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcihcIkludmFsaWQgaW50ZXJ2YWxcIik7XG4gIHJldHVybiBvID49IG4gJiYgbyA8PSByO1xufVxuZnVuY3Rpb24gZ3goZSwgdCkge1xuICBRMSgyLCBhcmd1bWVudHMpO1xuICB2YXIgbyA9IHYwKHQpO1xuICByZXR1cm4gYW8oZSwgLW8pO1xufVxuZnVuY3Rpb24gQ3goZSwgdCkge1xuICB2YXIgbztcbiAgUTEoMSwgYXJndW1lbnRzKTtcbiAgdmFyIG4gPSB2MCgobyA9IHQgPT0gbnVsbCA/IHZvaWQgMCA6IHQuYWRkaXRpb25hbERpZ2l0cykgIT09IG51bGwgJiYgbyAhPT0gdm9pZCAwID8gbyA6IDIpO1xuICBpZiAobiAhPT0gMiAmJiBuICE9PSAxICYmIG4gIT09IDApXG4gICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoXCJhZGRpdGlvbmFsRGlnaXRzIG11c3QgYmUgMCwgMSBvciAyXCIpO1xuICBpZiAoISh0eXBlb2YgZSA9PSBcInN0cmluZ1wiIHx8IE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChlKSA9PT0gXCJbb2JqZWN0IFN0cmluZ11cIikpXG4gICAgcmV0dXJuIC8qIEBfX1BVUkVfXyAqLyBuZXcgRGF0ZShOYU4pO1xuICB2YXIgciA9IHF4KGUpLCBpO1xuICBpZiAoci5kYXRlKSB7XG4gICAgdmFyIGEgPSB5eChyLmRhdGUsIG4pO1xuICAgIGkgPSB3eChhLnJlc3REYXRlU3RyaW5nLCBhLnllYXIpO1xuICB9XG4gIGlmICghaSB8fCBpc05hTihpLmdldFRpbWUoKSkpXG4gICAgcmV0dXJuIC8qIEBfX1BVUkVfXyAqLyBuZXcgRGF0ZShOYU4pO1xuICB2YXIgcyA9IGkuZ2V0VGltZSgpLCBsID0gMCwgcDtcbiAgaWYgKHIudGltZSAmJiAobCA9IHh4KHIudGltZSksIGlzTmFOKGwpKSlcbiAgICByZXR1cm4gLyogQF9fUFVSRV9fICovIG5ldyBEYXRlKE5hTik7XG4gIGlmIChyLnRpbWV6b25lKSB7XG4gICAgaWYgKHAgPSBXeChyLnRpbWV6b25lKSwgaXNOYU4ocCkpXG4gICAgICByZXR1cm4gLyogQF9fUFVSRV9fICovIG5ldyBEYXRlKE5hTik7XG4gIH0gZWxzZSB7XG4gICAgdmFyIGQgPSBuZXcgRGF0ZShzICsgbCksIGIgPSAvKiBAX19QVVJFX18gKi8gbmV3IERhdGUoMCk7XG4gICAgcmV0dXJuIGIuc2V0RnVsbFllYXIoZC5nZXRVVENGdWxsWWVhcigpLCBkLmdldFVUQ01vbnRoKCksIGQuZ2V0VVRDRGF0ZSgpKSwgYi5zZXRIb3VycyhkLmdldFVUQ0hvdXJzKCksIGQuZ2V0VVRDTWludXRlcygpLCBkLmdldFVUQ1NlY29uZHMoKSwgZC5nZXRVVENNaWxsaXNlY29uZHMoKSksIGI7XG4gIH1cbiAgcmV0dXJuIG5ldyBEYXRlKHMgKyBsICsgcCk7XG59XG52YXIgYW4gPSB7XG4gIGRhdGVUaW1lRGVsaW1pdGVyOiAvW1QgXS8sXG4gIHRpbWVab25lRGVsaW1pdGVyOiAvW1ogXS9pLFxuICB0aW1lem9uZTogLyhbWistXS4qKSQvXG59LCBteCA9IC9eLT8oPzooXFxkezN9KXwoXFxkezJ9KSg/Oi0/KFxcZHsyfSkpP3xXKFxcZHsyfSkoPzotPyhcXGR7MX0pKT98KSQvLCBMeCA9IC9eKFxcZHsyfSg/OlsuLF1cXGQqKT8pKD86Oj8oXFxkezJ9KD86Wy4sXVxcZCopPykpPyg/Ojo/KFxcZHsyfSg/OlsuLF1cXGQqKT8pKT8kLywgdnggPSAvXihbKy1dKShcXGR7Mn0pKD86Oj8oXFxkezJ9KSk/JC87XG5mdW5jdGlvbiBxeChlKSB7XG4gIHZhciB0ID0ge30sIG8gPSBlLnNwbGl0KGFuLmRhdGVUaW1lRGVsaW1pdGVyKSwgbjtcbiAgaWYgKG8ubGVuZ3RoID4gMilcbiAgICByZXR1cm4gdDtcbiAgaWYgKC86Ly50ZXN0KG9bMF0pID8gbiA9IG9bMF0gOiAodC5kYXRlID0gb1swXSwgbiA9IG9bMV0sIGFuLnRpbWVab25lRGVsaW1pdGVyLnRlc3QodC5kYXRlKSAmJiAodC5kYXRlID0gZS5zcGxpdChhbi50aW1lWm9uZURlbGltaXRlcilbMF0sIG4gPSBlLnN1YnN0cih0LmRhdGUubGVuZ3RoLCBlLmxlbmd0aCkpKSwgbikge1xuICAgIHZhciByID0gYW4udGltZXpvbmUuZXhlYyhuKTtcbiAgICByID8gKHQudGltZSA9IG4ucmVwbGFjZShyWzFdLCBcIlwiKSwgdC50aW1lem9uZSA9IHJbMV0pIDogdC50aW1lID0gbjtcbiAgfVxuICByZXR1cm4gdDtcbn1cbmZ1bmN0aW9uIHl4KGUsIHQpIHtcbiAgdmFyIG8gPSBuZXcgUmVnRXhwKFwiXig/OihcXFxcZHs0fXxbKy1dXFxcXGR7XCIgKyAoNCArIHQpICsgXCJ9KXwoXFxcXGR7Mn18WystXVxcXFxke1wiICsgKDIgKyB0KSArIFwifSkkKVwiKSwgbiA9IGUubWF0Y2gobyk7XG4gIGlmICghbilcbiAgICByZXR1cm4ge1xuICAgICAgeWVhcjogTmFOLFxuICAgICAgcmVzdERhdGVTdHJpbmc6IFwiXCJcbiAgICB9O1xuICB2YXIgciA9IG5bMV0gPyBwYXJzZUludChuWzFdKSA6IG51bGwsIGkgPSBuWzJdID8gcGFyc2VJbnQoblsyXSkgOiBudWxsO1xuICByZXR1cm4ge1xuICAgIHllYXI6IGkgPT09IG51bGwgPyByIDogaSAqIDEwMCxcbiAgICByZXN0RGF0ZVN0cmluZzogZS5zbGljZSgoblsxXSB8fCBuWzJdKS5sZW5ndGgpXG4gIH07XG59XG5mdW5jdGlvbiB3eChlLCB0KSB7XG4gIGlmICh0ID09PSBudWxsKVxuICAgIHJldHVybiAvKiBAX19QVVJFX18gKi8gbmV3IERhdGUoTmFOKTtcbiAgdmFyIG8gPSBlLm1hdGNoKG14KTtcbiAgaWYgKCFvKVxuICAgIHJldHVybiAvKiBAX19QVVJFX18gKi8gbmV3IERhdGUoTmFOKTtcbiAgdmFyIG4gPSAhIW9bNF0sIHIgPSBTbyhvWzFdKSwgaSA9IFNvKG9bMl0pIC0gMSwgYSA9IFNvKG9bM10pLCBzID0gU28ob1s0XSksIGwgPSBTbyhvWzVdKSAtIDE7XG4gIGlmIChuKVxuICAgIHJldHVybiBreCh0LCBzLCBsKSA/IFJ4KHQsIHMsIGwpIDogLyogQF9fUFVSRV9fICovIG5ldyBEYXRlKE5hTik7XG4gIHZhciBwID0gLyogQF9fUFVSRV9fICovIG5ldyBEYXRlKDApO1xuICByZXR1cm4gIVN4KHQsIGksIGEpIHx8ICFFeCh0LCByKSA/IC8qIEBfX1BVUkVfXyAqLyBuZXcgRGF0ZShOYU4pIDogKHAuc2V0VVRDRnVsbFllYXIodCwgaSwgTWF0aC5tYXgociwgYSkpLCBwKTtcbn1cbmZ1bmN0aW9uIFNvKGUpIHtcbiAgcmV0dXJuIGUgPyBwYXJzZUludChlKSA6IDE7XG59XG5mdW5jdGlvbiB4eChlKSB7XG4gIHZhciB0ID0gZS5tYXRjaChMeCk7XG4gIGlmICghdClcbiAgICByZXR1cm4gTmFOO1xuICB2YXIgbyA9IHFpKHRbMV0pLCBuID0gcWkodFsyXSksIHIgPSBxaSh0WzNdKTtcbiAgcmV0dXJuIE54KG8sIG4sIHIpID8gbyAqIHQ2ICsgbiAqIGU2ICsgciAqIDFlMyA6IE5hTjtcbn1cbmZ1bmN0aW9uIHFpKGUpIHtcbiAgcmV0dXJuIGUgJiYgcGFyc2VGbG9hdChlLnJlcGxhY2UoXCIsXCIsIFwiLlwiKSkgfHwgMDtcbn1cbmZ1bmN0aW9uIFd4KGUpIHtcbiAgaWYgKGUgPT09IFwiWlwiKVxuICAgIHJldHVybiAwO1xuICB2YXIgdCA9IGUubWF0Y2godngpO1xuICBpZiAoIXQpXG4gICAgcmV0dXJuIDA7XG4gIHZhciBvID0gdFsxXSA9PT0gXCIrXCIgPyAtMSA6IDEsIG4gPSBwYXJzZUludCh0WzJdKSwgciA9IHRbM10gJiYgcGFyc2VJbnQodFszXSkgfHwgMDtcbiAgcmV0dXJuIFR4KG4sIHIpID8gbyAqIChuICogdDYgKyByICogZTYpIDogTmFOO1xufVxuZnVuY3Rpb24gUngoZSwgdCwgbykge1xuICB2YXIgbiA9IC8qIEBfX1BVUkVfXyAqLyBuZXcgRGF0ZSgwKTtcbiAgbi5zZXRVVENGdWxsWWVhcihlLCAwLCA0KTtcbiAgdmFyIHIgPSBuLmdldFVUQ0RheSgpIHx8IDcsIGkgPSAodCAtIDEpICogNyArIG8gKyAxIC0gcjtcbiAgcmV0dXJuIG4uc2V0VVRDRGF0ZShuLmdldFVUQ0RhdGUoKSArIGkpLCBuO1xufVxudmFyIEJ4ID0gWzMxLCBudWxsLCAzMSwgMzAsIDMxLCAzMCwgMzEsIDMxLCAzMCwgMzEsIDMwLCAzMV07XG5mdW5jdGlvbiBjcChlKSB7XG4gIHJldHVybiBlICUgNDAwID09PSAwIHx8IGUgJSA0ID09PSAwICYmIGUgJSAxMDAgIT09IDA7XG59XG5mdW5jdGlvbiBTeChlLCB0LCBvKSB7XG4gIHJldHVybiB0ID49IDAgJiYgdCA8PSAxMSAmJiBvID49IDEgJiYgbyA8PSAoQnhbdF0gfHwgKGNwKGUpID8gMjkgOiAyOCkpO1xufVxuZnVuY3Rpb24gRXgoZSwgdCkge1xuICByZXR1cm4gdCA+PSAxICYmIHQgPD0gKGNwKGUpID8gMzY2IDogMzY1KTtcbn1cbmZ1bmN0aW9uIGt4KGUsIHQsIG8pIHtcbiAgcmV0dXJuIHQgPj0gMSAmJiB0IDw9IDUzICYmIG8gPj0gMCAmJiBvIDw9IDY7XG59XG5mdW5jdGlvbiBOeChlLCB0LCBvKSB7XG4gIHJldHVybiBlID09PSAyNCA/IHQgPT09IDAgJiYgbyA9PT0gMCA6IG8gPj0gMCAmJiBvIDwgNjAgJiYgdCA+PSAwICYmIHQgPCA2MCAmJiBlID49IDAgJiYgZSA8IDI1O1xufVxuZnVuY3Rpb24gVHgoZSwgdCkge1xuICByZXR1cm4gdCA+PSAwICYmIHQgPD0gNTk7XG59XG5mdW5jdGlvbiBXMihlLCB0KSB7XG4gIFExKDIsIGFyZ3VtZW50cyk7XG4gIHZhciBvID0gajEoZSksIG4gPSB2MCh0KSwgciA9IG8uZ2V0RnVsbFllYXIoKSwgaSA9IG8uZ2V0RGF0ZSgpLCBhID0gLyogQF9fUFVSRV9fICovIG5ldyBEYXRlKDApO1xuICBhLnNldEZ1bGxZZWFyKHIsIG4sIDE1KSwgYS5zZXRIb3VycygwLCAwLCAwLCAwKTtcbiAgdmFyIHMgPSBodyhhKTtcbiAgcmV0dXJuIG8uc2V0TW9udGgobiwgTWF0aC5taW4oaSwgcykpLCBvO1xufVxuZnVuY3Rpb24gSXgoZSwgdCkge1xuICBpZiAoUTEoMiwgYXJndW1lbnRzKSwgTWUodCkgIT09IFwib2JqZWN0XCIgfHwgdCA9PT0gbnVsbClcbiAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcihcInZhbHVlcyBwYXJhbWV0ZXIgbXVzdCBiZSBhbiBvYmplY3RcIik7XG4gIHZhciBvID0gajEoZSk7XG4gIHJldHVybiBpc05hTihvLmdldFRpbWUoKSkgPyAvKiBAX19QVVJFX18gKi8gbmV3IERhdGUoTmFOKSA6ICh0LnllYXIgIT0gbnVsbCAmJiBvLnNldEZ1bGxZZWFyKHQueWVhciksIHQubW9udGggIT0gbnVsbCAmJiAobyA9IFcyKG8sIHQubW9udGgpKSwgdC5kYXRlICE9IG51bGwgJiYgby5zZXREYXRlKHYwKHQuZGF0ZSkpLCB0LmhvdXJzICE9IG51bGwgJiYgby5zZXRIb3Vycyh2MCh0LmhvdXJzKSksIHQubWludXRlcyAhPSBudWxsICYmIG8uc2V0TWludXRlcyh2MCh0Lm1pbnV0ZXMpKSwgdC5zZWNvbmRzICE9IG51bGwgJiYgby5zZXRTZWNvbmRzKHYwKHQuc2Vjb25kcykpLCB0Lm1pbGxpc2Vjb25kcyAhPSBudWxsICYmIG8uc2V0TWlsbGlzZWNvbmRzKHYwKHQubWlsbGlzZWNvbmRzKSksIG8pO1xufVxuZnVuY3Rpb24gVm4oZSwgdCkge1xuICBRMSgyLCBhcmd1bWVudHMpO1xuICB2YXIgbyA9IGoxKGUpLCBuID0gdjAodCk7XG4gIHJldHVybiBvLnNldEhvdXJzKG4pLCBvO1xufVxuZnVuY3Rpb24gUG4oZSwgdCkge1xuICBRMSgyLCBhcmd1bWVudHMpO1xuICB2YXIgbyA9IGoxKGUpLCBuID0gdjAodCk7XG4gIHJldHVybiBvLnNldE1pbnV0ZXMobiksIG87XG59XG5mdW5jdGlvbiB2MyhlLCB0KSB7XG4gIFExKDIsIGFyZ3VtZW50cyk7XG4gIHZhciBvID0gajEoZSksIG4gPSB2MCh0KSwgciA9IE1hdGguZmxvb3Ioby5nZXRNb250aCgpIC8gMykgKyAxLCBpID0gbiAtIHI7XG4gIHJldHVybiBXMihvLCBvLmdldE1vbnRoKCkgKyBpICogMyk7XG59XG5mdW5jdGlvbiBEeChlLCB0KSB7XG4gIFExKDIsIGFyZ3VtZW50cyk7XG4gIHZhciBvID0gajEoZSksIG4gPSB2MCh0KTtcbiAgcmV0dXJuIG8uc2V0U2Vjb25kcyhuKSwgbztcbn1cbmZ1bmN0aW9uIGV0KGUsIHQpIHtcbiAgUTEoMiwgYXJndW1lbnRzKTtcbiAgdmFyIG8gPSBqMShlKSwgbiA9IHYwKHQpO1xuICByZXR1cm4gaXNOYU4oby5nZXRUaW1lKCkpID8gLyogQF9fUFVSRV9fICovIG5ldyBEYXRlKE5hTikgOiAoby5zZXRGdWxsWWVhcihuKSwgbyk7XG59XG5mdW5jdGlvbiBfMyhlLCB0KSB7XG4gIFExKDIsIGFyZ3VtZW50cyk7XG4gIHZhciBvID0gdjAodCk7XG4gIHJldHVybiB2ZShlLCAtbyk7XG59XG5mdW5jdGlvbiBIeChlLCB0KSB7XG4gIFExKDIsIGFyZ3VtZW50cyk7XG4gIHZhciBvID0gdjAodCk7XG4gIHJldHVybiBZbChlLCAtbyk7XG59XG5mdW5jdGlvbiBVOChlLCB0KSB7XG4gIFExKDIsIGFyZ3VtZW50cyk7XG4gIHZhciBvID0gdjAodCk7XG4gIHJldHVybiBwNChlLCAtbyk7XG59XG5mdW5jdGlvbiBNcihlLCB0KSB7XG4gIFExKDIsIGFyZ3VtZW50cyk7XG4gIHZhciBvID0gdjAodCk7XG4gIHJldHVybiBLMyhlLCAtbyk7XG59XG4kLmRpdmBcbiAgcG9zaXRpb246IGFic29sdXRlO1xuICB0b3A6IDIwcHg7XG4gIHRyYW5zZm9ybTogdHJhbnNsYXRlWCgtNTAlKTtcbiAgd2lkdGg6IDIzMHB4O1xuYDtcbmNvbnN0IFk4ID0gJC5kaXZgXG4gICYgKyAmIHtcbiAgICBtYXJnaW46ICR7KHsgdGhlbWU6IHsgc3BhY2luZ3M6IGUgfSB9KSA9PiBlLnNwMTZ9IDAgMDtcbiAgfVxuYDtcbnZhciBaYSA9IHsgZXhwb3J0czoge30gfSwgc24gPSB7IGV4cG9ydHM6IHt9IH0sIEQwID0ge307XG4vKiogQGxpY2Vuc2UgUmVhY3QgdjE2LjEzLjFcbiAqIHJlYWN0LWlzLnByb2R1Y3Rpb24ubWluLmpzXG4gKlxuICogQ29weXJpZ2h0IChjKSBGYWNlYm9vaywgSW5jLiBhbmQgaXRzIGFmZmlsaWF0ZXMuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuXG4gKi9cbnZhciBHODtcbmZ1bmN0aW9uIFZ4KCkge1xuICBpZiAoRzgpXG4gICAgcmV0dXJuIEQwO1xuICBHOCA9IDE7XG4gIHZhciBlID0gdHlwZW9mIFN5bWJvbCA9PSBcImZ1bmN0aW9uXCIgJiYgU3ltYm9sLmZvciwgdCA9IGUgPyBTeW1ib2wuZm9yKFwicmVhY3QuZWxlbWVudFwiKSA6IDYwMTAzLCBvID0gZSA/IFN5bWJvbC5mb3IoXCJyZWFjdC5wb3J0YWxcIikgOiA2MDEwNiwgbiA9IGUgPyBTeW1ib2wuZm9yKFwicmVhY3QuZnJhZ21lbnRcIikgOiA2MDEwNywgciA9IGUgPyBTeW1ib2wuZm9yKFwicmVhY3Quc3RyaWN0X21vZGVcIikgOiA2MDEwOCwgaSA9IGUgPyBTeW1ib2wuZm9yKFwicmVhY3QucHJvZmlsZXJcIikgOiA2MDExNCwgYSA9IGUgPyBTeW1ib2wuZm9yKFwicmVhY3QucHJvdmlkZXJcIikgOiA2MDEwOSwgcyA9IGUgPyBTeW1ib2wuZm9yKFwicmVhY3QuY29udGV4dFwiKSA6IDYwMTEwLCBsID0gZSA/IFN5bWJvbC5mb3IoXCJyZWFjdC5hc3luY19tb2RlXCIpIDogNjAxMTEsIHAgPSBlID8gU3ltYm9sLmZvcihcInJlYWN0LmNvbmN1cnJlbnRfbW9kZVwiKSA6IDYwMTExLCBkID0gZSA/IFN5bWJvbC5mb3IoXCJyZWFjdC5mb3J3YXJkX3JlZlwiKSA6IDYwMTEyLCBiID0gZSA/IFN5bWJvbC5mb3IoXCJyZWFjdC5zdXNwZW5zZVwiKSA6IDYwMTEzLCBNID0gZSA/IFN5bWJvbC5mb3IoXCJyZWFjdC5zdXNwZW5zZV9saXN0XCIpIDogNjAxMjAsIHUgPSBlID8gU3ltYm9sLmZvcihcInJlYWN0Lm1lbW9cIikgOiA2MDExNSwgQSA9IGUgPyBTeW1ib2wuZm9yKFwicmVhY3QubGF6eVwiKSA6IDYwMTE2LCB6ID0gZSA/IFN5bWJvbC5mb3IoXCJyZWFjdC5ibG9ja1wiKSA6IDYwMTIxLCBmID0gZSA/IFN5bWJvbC5mb3IoXCJyZWFjdC5mdW5kYW1lbnRhbFwiKSA6IDYwMTE3LCBPID0gZSA/IFN5bWJvbC5mb3IoXCJyZWFjdC5yZXNwb25kZXJcIikgOiA2MDExOCwgaCA9IGUgPyBTeW1ib2wuZm9yKFwicmVhY3Quc2NvcGVcIikgOiA2MDExOTtcbiAgZnVuY3Rpb24gZyhMKSB7XG4gICAgaWYgKHR5cGVvZiBMID09IFwib2JqZWN0XCIgJiYgTCAhPT0gbnVsbCkge1xuICAgICAgdmFyIHkgPSBMLiQkdHlwZW9mO1xuICAgICAgc3dpdGNoICh5KSB7XG4gICAgICAgIGNhc2UgdDpcbiAgICAgICAgICBzd2l0Y2ggKEwgPSBMLnR5cGUsIEwpIHtcbiAgICAgICAgICAgIGNhc2UgbDpcbiAgICAgICAgICAgIGNhc2UgcDpcbiAgICAgICAgICAgIGNhc2UgbjpcbiAgICAgICAgICAgIGNhc2UgaTpcbiAgICAgICAgICAgIGNhc2UgcjpcbiAgICAgICAgICAgIGNhc2UgYjpcbiAgICAgICAgICAgICAgcmV0dXJuIEw7XG4gICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICBzd2l0Y2ggKEwgPSBMICYmIEwuJCR0eXBlb2YsIEwpIHtcbiAgICAgICAgICAgICAgICBjYXNlIHM6XG4gICAgICAgICAgICAgICAgY2FzZSBkOlxuICAgICAgICAgICAgICAgIGNhc2UgQTpcbiAgICAgICAgICAgICAgICBjYXNlIHU6XG4gICAgICAgICAgICAgICAgY2FzZSBhOlxuICAgICAgICAgICAgICAgICAgcmV0dXJuIEw7XG4gICAgICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICAgIHJldHVybiB5O1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICBjYXNlIG86XG4gICAgICAgICAgcmV0dXJuIHk7XG4gICAgICB9XG4gICAgfVxuICB9XG4gIGZ1bmN0aW9uIHYoTCkge1xuICAgIHJldHVybiBnKEwpID09PSBwO1xuICB9XG4gIHJldHVybiBEMC5Bc3luY01vZGUgPSBsLCBEMC5Db25jdXJyZW50TW9kZSA9IHAsIEQwLkNvbnRleHRDb25zdW1lciA9IHMsIEQwLkNvbnRleHRQcm92aWRlciA9IGEsIEQwLkVsZW1lbnQgPSB0LCBEMC5Gb3J3YXJkUmVmID0gZCwgRDAuRnJhZ21lbnQgPSBuLCBEMC5MYXp5ID0gQSwgRDAuTWVtbyA9IHUsIEQwLlBvcnRhbCA9IG8sIEQwLlByb2ZpbGVyID0gaSwgRDAuU3RyaWN0TW9kZSA9IHIsIEQwLlN1c3BlbnNlID0gYiwgRDAuaXNBc3luY01vZGUgPSBmdW5jdGlvbihMKSB7XG4gICAgcmV0dXJuIHYoTCkgfHwgZyhMKSA9PT0gbDtcbiAgfSwgRDAuaXNDb25jdXJyZW50TW9kZSA9IHYsIEQwLmlzQ29udGV4dENvbnN1bWVyID0gZnVuY3Rpb24oTCkge1xuICAgIHJldHVybiBnKEwpID09PSBzO1xuICB9LCBEMC5pc0NvbnRleHRQcm92aWRlciA9IGZ1bmN0aW9uKEwpIHtcbiAgICByZXR1cm4gZyhMKSA9PT0gYTtcbiAgfSwgRDAuaXNFbGVtZW50ID0gZnVuY3Rpb24oTCkge1xuICAgIHJldHVybiB0eXBlb2YgTCA9PSBcIm9iamVjdFwiICYmIEwgIT09IG51bGwgJiYgTC4kJHR5cGVvZiA9PT0gdDtcbiAgfSwgRDAuaXNGb3J3YXJkUmVmID0gZnVuY3Rpb24oTCkge1xuICAgIHJldHVybiBnKEwpID09PSBkO1xuICB9LCBEMC5pc0ZyYWdtZW50ID0gZnVuY3Rpb24oTCkge1xuICAgIHJldHVybiBnKEwpID09PSBuO1xuICB9LCBEMC5pc0xhenkgPSBmdW5jdGlvbihMKSB7XG4gICAgcmV0dXJuIGcoTCkgPT09IEE7XG4gIH0sIEQwLmlzTWVtbyA9IGZ1bmN0aW9uKEwpIHtcbiAgICByZXR1cm4gZyhMKSA9PT0gdTtcbiAgfSwgRDAuaXNQb3J0YWwgPSBmdW5jdGlvbihMKSB7XG4gICAgcmV0dXJuIGcoTCkgPT09IG87XG4gIH0sIEQwLmlzUHJvZmlsZXIgPSBmdW5jdGlvbihMKSB7XG4gICAgcmV0dXJuIGcoTCkgPT09IGk7XG4gIH0sIEQwLmlzU3RyaWN0TW9kZSA9IGZ1bmN0aW9uKEwpIHtcbiAgICByZXR1cm4gZyhMKSA9PT0gcjtcbiAgfSwgRDAuaXNTdXNwZW5zZSA9IGZ1bmN0aW9uKEwpIHtcbiAgICByZXR1cm4gZyhMKSA9PT0gYjtcbiAgfSwgRDAuaXNWYWxpZEVsZW1lbnRUeXBlID0gZnVuY3Rpb24oTCkge1xuICAgIHJldHVybiB0eXBlb2YgTCA9PSBcInN0cmluZ1wiIHx8IHR5cGVvZiBMID09IFwiZnVuY3Rpb25cIiB8fCBMID09PSBuIHx8IEwgPT09IHAgfHwgTCA9PT0gaSB8fCBMID09PSByIHx8IEwgPT09IGIgfHwgTCA9PT0gTSB8fCB0eXBlb2YgTCA9PSBcIm9iamVjdFwiICYmIEwgIT09IG51bGwgJiYgKEwuJCR0eXBlb2YgPT09IEEgfHwgTC4kJHR5cGVvZiA9PT0gdSB8fCBMLiQkdHlwZW9mID09PSBhIHx8IEwuJCR0eXBlb2YgPT09IHMgfHwgTC4kJHR5cGVvZiA9PT0gZCB8fCBMLiQkdHlwZW9mID09PSBmIHx8IEwuJCR0eXBlb2YgPT09IE8gfHwgTC4kJHR5cGVvZiA9PT0gaCB8fCBMLiQkdHlwZW9mID09PSB6KTtcbiAgfSwgRDAudHlwZU9mID0gZywgRDA7XG59XG52YXIgSDAgPSB7fTtcbi8qKiBAbGljZW5zZSBSZWFjdCB2MTYuMTMuMVxuICogcmVhY3QtaXMuZGV2ZWxvcG1lbnQuanNcbiAqXG4gKiBDb3B5cmlnaHQgKGMpIEZhY2Vib29rLCBJbmMuIGFuZCBpdHMgYWZmaWxpYXRlcy5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS5cbiAqL1xudmFyIFE4O1xuZnVuY3Rpb24gUHgoKSB7XG4gIHJldHVybiBROCB8fCAoUTggPSAxLCBwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIgJiYgZnVuY3Rpb24oKSB7XG4gICAgdmFyIGUgPSB0eXBlb2YgU3ltYm9sID09IFwiZnVuY3Rpb25cIiAmJiBTeW1ib2wuZm9yLCB0ID0gZSA/IFN5bWJvbC5mb3IoXCJyZWFjdC5lbGVtZW50XCIpIDogNjAxMDMsIG8gPSBlID8gU3ltYm9sLmZvcihcInJlYWN0LnBvcnRhbFwiKSA6IDYwMTA2LCBuID0gZSA/IFN5bWJvbC5mb3IoXCJyZWFjdC5mcmFnbWVudFwiKSA6IDYwMTA3LCByID0gZSA/IFN5bWJvbC5mb3IoXCJyZWFjdC5zdHJpY3RfbW9kZVwiKSA6IDYwMTA4LCBpID0gZSA/IFN5bWJvbC5mb3IoXCJyZWFjdC5wcm9maWxlclwiKSA6IDYwMTE0LCBhID0gZSA/IFN5bWJvbC5mb3IoXCJyZWFjdC5wcm92aWRlclwiKSA6IDYwMTA5LCBzID0gZSA/IFN5bWJvbC5mb3IoXCJyZWFjdC5jb250ZXh0XCIpIDogNjAxMTAsIGwgPSBlID8gU3ltYm9sLmZvcihcInJlYWN0LmFzeW5jX21vZGVcIikgOiA2MDExMSwgcCA9IGUgPyBTeW1ib2wuZm9yKFwicmVhY3QuY29uY3VycmVudF9tb2RlXCIpIDogNjAxMTEsIGQgPSBlID8gU3ltYm9sLmZvcihcInJlYWN0LmZvcndhcmRfcmVmXCIpIDogNjAxMTIsIGIgPSBlID8gU3ltYm9sLmZvcihcInJlYWN0LnN1c3BlbnNlXCIpIDogNjAxMTMsIE0gPSBlID8gU3ltYm9sLmZvcihcInJlYWN0LnN1c3BlbnNlX2xpc3RcIikgOiA2MDEyMCwgdSA9IGUgPyBTeW1ib2wuZm9yKFwicmVhY3QubWVtb1wiKSA6IDYwMTE1LCBBID0gZSA/IFN5bWJvbC5mb3IoXCJyZWFjdC5sYXp5XCIpIDogNjAxMTYsIHogPSBlID8gU3ltYm9sLmZvcihcInJlYWN0LmJsb2NrXCIpIDogNjAxMjEsIGYgPSBlID8gU3ltYm9sLmZvcihcInJlYWN0LmZ1bmRhbWVudGFsXCIpIDogNjAxMTcsIE8gPSBlID8gU3ltYm9sLmZvcihcInJlYWN0LnJlc3BvbmRlclwiKSA6IDYwMTE4LCBoID0gZSA/IFN5bWJvbC5mb3IoXCJyZWFjdC5zY29wZVwiKSA6IDYwMTE5O1xuICAgIGZ1bmN0aW9uIGcoUykge1xuICAgICAgcmV0dXJuIHR5cGVvZiBTID09IFwic3RyaW5nXCIgfHwgdHlwZW9mIFMgPT0gXCJmdW5jdGlvblwiIHx8IC8vIE5vdGU6IGl0cyB0eXBlb2YgbWlnaHQgYmUgb3RoZXIgdGhhbiAnc3ltYm9sJyBvciAnbnVtYmVyJyBpZiBpdCdzIGEgcG9seWZpbGwuXG4gICAgICBTID09PSBuIHx8IFMgPT09IHAgfHwgUyA9PT0gaSB8fCBTID09PSByIHx8IFMgPT09IGIgfHwgUyA9PT0gTSB8fCB0eXBlb2YgUyA9PSBcIm9iamVjdFwiICYmIFMgIT09IG51bGwgJiYgKFMuJCR0eXBlb2YgPT09IEEgfHwgUy4kJHR5cGVvZiA9PT0gdSB8fCBTLiQkdHlwZW9mID09PSBhIHx8IFMuJCR0eXBlb2YgPT09IHMgfHwgUy4kJHR5cGVvZiA9PT0gZCB8fCBTLiQkdHlwZW9mID09PSBmIHx8IFMuJCR0eXBlb2YgPT09IE8gfHwgUy4kJHR5cGVvZiA9PT0gaCB8fCBTLiQkdHlwZW9mID09PSB6KTtcbiAgICB9XG4gICAgZnVuY3Rpb24gdihTKSB7XG4gICAgICBpZiAodHlwZW9mIFMgPT0gXCJvYmplY3RcIiAmJiBTICE9PSBudWxsKSB7XG4gICAgICAgIHZhciBXID0gUy4kJHR5cGVvZjtcbiAgICAgICAgc3dpdGNoIChXKSB7XG4gICAgICAgICAgY2FzZSB0OlxuICAgICAgICAgICAgdmFyIFAgPSBTLnR5cGU7XG4gICAgICAgICAgICBzd2l0Y2ggKFApIHtcbiAgICAgICAgICAgICAgY2FzZSBsOlxuICAgICAgICAgICAgICBjYXNlIHA6XG4gICAgICAgICAgICAgIGNhc2UgbjpcbiAgICAgICAgICAgICAgY2FzZSBpOlxuICAgICAgICAgICAgICBjYXNlIHI6XG4gICAgICAgICAgICAgIGNhc2UgYjpcbiAgICAgICAgICAgICAgICByZXR1cm4gUDtcbiAgICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICB2YXIgWSA9IFAgJiYgUC4kJHR5cGVvZjtcbiAgICAgICAgICAgICAgICBzd2l0Y2ggKFkpIHtcbiAgICAgICAgICAgICAgICAgIGNhc2UgczpcbiAgICAgICAgICAgICAgICAgIGNhc2UgZDpcbiAgICAgICAgICAgICAgICAgIGNhc2UgQTpcbiAgICAgICAgICAgICAgICAgIGNhc2UgdTpcbiAgICAgICAgICAgICAgICAgIGNhc2UgYTpcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFk7XG4gICAgICAgICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gVztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgY2FzZSBvOlxuICAgICAgICAgICAgcmV0dXJuIFc7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgdmFyIEwgPSBsLCB5ID0gcCwgQiA9IHMsIFggPSBhLCBGID0gdCwgVCA9IGQsIHcgPSBuLCBIID0gQSwgQyA9IHUsIHEgPSBvLCBtID0gaSwgayA9IHIsIHggPSBiLCBOID0gITE7XG4gICAgZnVuY3Rpb24gVihTKSB7XG4gICAgICByZXR1cm4gTiB8fCAoTiA9ICEwLCBjb25zb2xlLndhcm4oXCJUaGUgUmVhY3RJcy5pc0FzeW5jTW9kZSgpIGFsaWFzIGhhcyBiZWVuIGRlcHJlY2F0ZWQsIGFuZCB3aWxsIGJlIHJlbW92ZWQgaW4gUmVhY3QgMTcrLiBVcGRhdGUgeW91ciBjb2RlIHRvIHVzZSBSZWFjdElzLmlzQ29uY3VycmVudE1vZGUoKSBpbnN0ZWFkLiBJdCBoYXMgdGhlIGV4YWN0IHNhbWUgQVBJLlwiKSksIFIoUykgfHwgdihTKSA9PT0gbDtcbiAgICB9XG4gICAgZnVuY3Rpb24gUihTKSB7XG4gICAgICByZXR1cm4gdihTKSA9PT0gcDtcbiAgICB9XG4gICAgZnVuY3Rpb24gSShTKSB7XG4gICAgICByZXR1cm4gdihTKSA9PT0gcztcbiAgICB9XG4gICAgZnVuY3Rpb24gaihTKSB7XG4gICAgICByZXR1cm4gdihTKSA9PT0gYTtcbiAgICB9XG4gICAgZnVuY3Rpb24gVShTKSB7XG4gICAgICByZXR1cm4gdHlwZW9mIFMgPT0gXCJvYmplY3RcIiAmJiBTICE9PSBudWxsICYmIFMuJCR0eXBlb2YgPT09IHQ7XG4gICAgfVxuICAgIGZ1bmN0aW9uIF8oUykge1xuICAgICAgcmV0dXJuIHYoUykgPT09IGQ7XG4gICAgfVxuICAgIGZ1bmN0aW9uIHIxKFMpIHtcbiAgICAgIHJldHVybiB2KFMpID09PSBuO1xuICAgIH1cbiAgICBmdW5jdGlvbiBLKFMpIHtcbiAgICAgIHJldHVybiB2KFMpID09PSBBO1xuICAgIH1cbiAgICBmdW5jdGlvbiBRKFMpIHtcbiAgICAgIHJldHVybiB2KFMpID09PSB1O1xuICAgIH1cbiAgICBmdW5jdGlvbiBFKFMpIHtcbiAgICAgIHJldHVybiB2KFMpID09PSBvO1xuICAgIH1cbiAgICBmdW5jdGlvbiBEKFMpIHtcbiAgICAgIHJldHVybiB2KFMpID09PSBpO1xuICAgIH1cbiAgICBmdW5jdGlvbiBHKFMpIHtcbiAgICAgIHJldHVybiB2KFMpID09PSByO1xuICAgIH1cbiAgICBmdW5jdGlvbiBKKFMpIHtcbiAgICAgIHJldHVybiB2KFMpID09PSBiO1xuICAgIH1cbiAgICBIMC5Bc3luY01vZGUgPSBMLCBIMC5Db25jdXJyZW50TW9kZSA9IHksIEgwLkNvbnRleHRDb25zdW1lciA9IEIsIEgwLkNvbnRleHRQcm92aWRlciA9IFgsIEgwLkVsZW1lbnQgPSBGLCBIMC5Gb3J3YXJkUmVmID0gVCwgSDAuRnJhZ21lbnQgPSB3LCBIMC5MYXp5ID0gSCwgSDAuTWVtbyA9IEMsIEgwLlBvcnRhbCA9IHEsIEgwLlByb2ZpbGVyID0gbSwgSDAuU3RyaWN0TW9kZSA9IGssIEgwLlN1c3BlbnNlID0geCwgSDAuaXNBc3luY01vZGUgPSBWLCBIMC5pc0NvbmN1cnJlbnRNb2RlID0gUiwgSDAuaXNDb250ZXh0Q29uc3VtZXIgPSBJLCBIMC5pc0NvbnRleHRQcm92aWRlciA9IGosIEgwLmlzRWxlbWVudCA9IFUsIEgwLmlzRm9yd2FyZFJlZiA9IF8sIEgwLmlzRnJhZ21lbnQgPSByMSwgSDAuaXNMYXp5ID0gSywgSDAuaXNNZW1vID0gUSwgSDAuaXNQb3J0YWwgPSBFLCBIMC5pc1Byb2ZpbGVyID0gRCwgSDAuaXNTdHJpY3RNb2RlID0gRywgSDAuaXNTdXNwZW5zZSA9IEosIEgwLmlzVmFsaWRFbGVtZW50VHlwZSA9IGcsIEgwLnR5cGVPZiA9IHY7XG4gIH0oKSksIEgwO1xufVxudmFyIFo4O1xuZnVuY3Rpb24gczYoKSB7XG4gIHJldHVybiBaOCB8fCAoWjggPSAxLCBwcm9jZXNzLmVudi5OT0RFX0VOViA9PT0gXCJwcm9kdWN0aW9uXCIgPyBzbi5leHBvcnRzID0gVngoKSA6IHNuLmV4cG9ydHMgPSBQeCgpKSwgc24uZXhwb3J0cztcbn1cbi8qXG5vYmplY3QtYXNzaWduXG4oYykgU2luZHJlIFNvcmh1c1xuQGxpY2Vuc2UgTUlUXG4qL1xudmFyIHlpLCBqODtcbmZ1bmN0aW9uIEZ4KCkge1xuICBpZiAoajgpXG4gICAgcmV0dXJuIHlpO1xuICBqOCA9IDE7XG4gIHZhciBlID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scywgdCA9IE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHksIG8gPSBPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlO1xuICBmdW5jdGlvbiBuKGkpIHtcbiAgICBpZiAoaSA9PSBudWxsKVxuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIk9iamVjdC5hc3NpZ24gY2Fubm90IGJlIGNhbGxlZCB3aXRoIG51bGwgb3IgdW5kZWZpbmVkXCIpO1xuICAgIHJldHVybiBPYmplY3QoaSk7XG4gIH1cbiAgZnVuY3Rpb24gcigpIHtcbiAgICB0cnkge1xuICAgICAgaWYgKCFPYmplY3QuYXNzaWduKVxuICAgICAgICByZXR1cm4gITE7XG4gICAgICB2YXIgaSA9IG5ldyBTdHJpbmcoXCJhYmNcIik7XG4gICAgICBpZiAoaVs1XSA9IFwiZGVcIiwgT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMoaSlbMF0gPT09IFwiNVwiKVxuICAgICAgICByZXR1cm4gITE7XG4gICAgICBmb3IgKHZhciBhID0ge30sIHMgPSAwOyBzIDwgMTA7IHMrKylcbiAgICAgICAgYVtcIl9cIiArIFN0cmluZy5mcm9tQ2hhckNvZGUocyldID0gcztcbiAgICAgIHZhciBsID0gT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMoYSkubWFwKGZ1bmN0aW9uKGQpIHtcbiAgICAgICAgcmV0dXJuIGFbZF07XG4gICAgICB9KTtcbiAgICAgIGlmIChsLmpvaW4oXCJcIikgIT09IFwiMDEyMzQ1Njc4OVwiKVxuICAgICAgICByZXR1cm4gITE7XG4gICAgICB2YXIgcCA9IHt9O1xuICAgICAgcmV0dXJuIFwiYWJjZGVmZ2hpamtsbW5vcHFyc3RcIi5zcGxpdChcIlwiKS5mb3JFYWNoKGZ1bmN0aW9uKGQpIHtcbiAgICAgICAgcFtkXSA9IGQ7XG4gICAgICB9KSwgT2JqZWN0LmtleXMoT2JqZWN0LmFzc2lnbih7fSwgcCkpLmpvaW4oXCJcIikgPT09IFwiYWJjZGVmZ2hpamtsbW5vcHFyc3RcIjtcbiAgICB9IGNhdGNoIHtcbiAgICAgIHJldHVybiAhMTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHlpID0gcigpID8gT2JqZWN0LmFzc2lnbiA6IGZ1bmN0aW9uKGksIGEpIHtcbiAgICBmb3IgKHZhciBzLCBsID0gbihpKSwgcCwgZCA9IDE7IGQgPCBhcmd1bWVudHMubGVuZ3RoOyBkKyspIHtcbiAgICAgIHMgPSBPYmplY3QoYXJndW1lbnRzW2RdKTtcbiAgICAgIGZvciAodmFyIGIgaW4gcylcbiAgICAgICAgdC5jYWxsKHMsIGIpICYmIChsW2JdID0gc1tiXSk7XG4gICAgICBpZiAoZSkge1xuICAgICAgICBwID0gZShzKTtcbiAgICAgICAgZm9yICh2YXIgTSA9IDA7IE0gPCBwLmxlbmd0aDsgTSsrKVxuICAgICAgICAgIG8uY2FsbChzLCBwW01dKSAmJiAobFtwW01dXSA9IHNbcFtNXV0pO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gbDtcbiAgfSwgeWk7XG59XG52YXIgd2ksIEs4O1xuZnVuY3Rpb24gYzYoKSB7XG4gIGlmIChLOClcbiAgICByZXR1cm4gd2k7XG4gIEs4ID0gMTtcbiAgdmFyIGUgPSBcIlNFQ1JFVF9ET19OT1RfUEFTU19USElTX09SX1lPVV9XSUxMX0JFX0ZJUkVEXCI7XG4gIHJldHVybiB3aSA9IGUsIHdpO1xufVxudmFyIHhpLCBKODtcbmZ1bmN0aW9uIGxwKCkge1xuICByZXR1cm4gSjggfHwgKEo4ID0gMSwgeGkgPSBGdW5jdGlvbi5jYWxsLmJpbmQoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eSkpLCB4aTtcbn1cbnZhciBXaSwgXzg7XG5mdW5jdGlvbiBYeCgpIHtcbiAgaWYgKF84KVxuICAgIHJldHVybiBXaTtcbiAgXzggPSAxO1xuICB2YXIgZSA9IGZ1bmN0aW9uKCkge1xuICB9O1xuICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiKSB7XG4gICAgdmFyIHQgPSBjNigpLCBvID0ge30sIG4gPSBscCgpO1xuICAgIGUgPSBmdW5jdGlvbihpKSB7XG4gICAgICB2YXIgYSA9IFwiV2FybmluZzogXCIgKyBpO1xuICAgICAgdHlwZW9mIGNvbnNvbGUgPCBcInVcIiAmJiBjb25zb2xlLmVycm9yKGEpO1xuICAgICAgdHJ5IHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGEpO1xuICAgICAgfSBjYXRjaCB7XG4gICAgICB9XG4gICAgfTtcbiAgfVxuICBmdW5jdGlvbiByKGksIGEsIHMsIGwsIHApIHtcbiAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiKSB7XG4gICAgICBmb3IgKHZhciBkIGluIGkpXG4gICAgICAgIGlmIChuKGksIGQpKSB7XG4gICAgICAgICAgdmFyIGI7XG4gICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGlmICh0eXBlb2YgaVtkXSAhPSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgICAgICAgICAgdmFyIE0gPSBFcnJvcihcbiAgICAgICAgICAgICAgICAobCB8fCBcIlJlYWN0IGNsYXNzXCIpICsgXCI6IFwiICsgcyArIFwiIHR5cGUgYFwiICsgZCArIFwiYCBpcyBpbnZhbGlkOyBpdCBtdXN0IGJlIGEgZnVuY3Rpb24sIHVzdWFsbHkgZnJvbSB0aGUgYHByb3AtdHlwZXNgIHBhY2thZ2UsIGJ1dCByZWNlaXZlZCBgXCIgKyB0eXBlb2YgaVtkXSArIFwiYC5UaGlzIG9mdGVuIGhhcHBlbnMgYmVjYXVzZSBvZiB0eXBvcyBzdWNoIGFzIGBQcm9wVHlwZXMuZnVuY3Rpb25gIGluc3RlYWQgb2YgYFByb3BUeXBlcy5mdW5jYC5cIlxuICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICB0aHJvdyBNLm5hbWUgPSBcIkludmFyaWFudCBWaW9sYXRpb25cIiwgTTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGIgPSBpW2RdKGEsIGQsIGwsIHMsIG51bGwsIHQpO1xuICAgICAgICAgIH0gY2F0Y2ggKEEpIHtcbiAgICAgICAgICAgIGIgPSBBO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoYiAmJiAhKGIgaW5zdGFuY2VvZiBFcnJvcikgJiYgZShcbiAgICAgICAgICAgIChsIHx8IFwiUmVhY3QgY2xhc3NcIikgKyBcIjogdHlwZSBzcGVjaWZpY2F0aW9uIG9mIFwiICsgcyArIFwiIGBcIiArIGQgKyBcImAgaXMgaW52YWxpZDsgdGhlIHR5cGUgY2hlY2tlciBmdW5jdGlvbiBtdXN0IHJldHVybiBgbnVsbGAgb3IgYW4gYEVycm9yYCBidXQgcmV0dXJuZWQgYSBcIiArIHR5cGVvZiBiICsgXCIuIFlvdSBtYXkgaGF2ZSBmb3Jnb3R0ZW4gdG8gcGFzcyBhbiBhcmd1bWVudCB0byB0aGUgdHlwZSBjaGVja2VyIGNyZWF0b3IgKGFycmF5T2YsIGluc3RhbmNlT2YsIG9iamVjdE9mLCBvbmVPZiwgb25lT2ZUeXBlLCBhbmQgc2hhcGUgYWxsIHJlcXVpcmUgYW4gYXJndW1lbnQpLlwiXG4gICAgICAgICAgKSwgYiBpbnN0YW5jZW9mIEVycm9yICYmICEoYi5tZXNzYWdlIGluIG8pKSB7XG4gICAgICAgICAgICBvW2IubWVzc2FnZV0gPSAhMDtcbiAgICAgICAgICAgIHZhciB1ID0gcCA/IHAoKSA6IFwiXCI7XG4gICAgICAgICAgICBlKFxuICAgICAgICAgICAgICBcIkZhaWxlZCBcIiArIHMgKyBcIiB0eXBlOiBcIiArIGIubWVzc2FnZSArICh1ID8/IFwiXCIpXG4gICAgICAgICAgICApO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbiAgfVxuICByZXR1cm4gci5yZXNldFdhcm5pbmdDYWNoZSA9IGZ1bmN0aW9uKCkge1xuICAgIHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIiAmJiAobyA9IHt9KTtcbiAgfSwgV2kgPSByLCBXaTtcbn1cbnZhciBSaSwgJDg7XG5mdW5jdGlvbiBVeCgpIHtcbiAgaWYgKCQ4KVxuICAgIHJldHVybiBSaTtcbiAgJDggPSAxO1xuICB2YXIgZSA9IHM2KCksIHQgPSBGeCgpLCBvID0gYzYoKSwgbiA9IGxwKCksIHIgPSBYeCgpLCBpID0gZnVuY3Rpb24oKSB7XG4gIH07XG4gIHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIiAmJiAoaSA9IGZ1bmN0aW9uKHMpIHtcbiAgICB2YXIgbCA9IFwiV2FybmluZzogXCIgKyBzO1xuICAgIHR5cGVvZiBjb25zb2xlIDwgXCJ1XCIgJiYgY29uc29sZS5lcnJvcihsKTtcbiAgICB0cnkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGwpO1xuICAgIH0gY2F0Y2gge1xuICAgIH1cbiAgfSk7XG4gIGZ1bmN0aW9uIGEoKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cbiAgcmV0dXJuIFJpID0gZnVuY3Rpb24ocywgbCkge1xuICAgIHZhciBwID0gdHlwZW9mIFN5bWJvbCA9PSBcImZ1bmN0aW9uXCIgJiYgU3ltYm9sLml0ZXJhdG9yLCBkID0gXCJAQGl0ZXJhdG9yXCI7XG4gICAgZnVuY3Rpb24gYihSKSB7XG4gICAgICB2YXIgSSA9IFIgJiYgKHAgJiYgUltwXSB8fCBSW2RdKTtcbiAgICAgIGlmICh0eXBlb2YgSSA9PSBcImZ1bmN0aW9uXCIpXG4gICAgICAgIHJldHVybiBJO1xuICAgIH1cbiAgICB2YXIgTSA9IFwiPDxhbm9ueW1vdXM+PlwiLCB1ID0ge1xuICAgICAgYXJyYXk6IE8oXCJhcnJheVwiKSxcbiAgICAgIGJpZ2ludDogTyhcImJpZ2ludFwiKSxcbiAgICAgIGJvb2w6IE8oXCJib29sZWFuXCIpLFxuICAgICAgZnVuYzogTyhcImZ1bmN0aW9uXCIpLFxuICAgICAgbnVtYmVyOiBPKFwibnVtYmVyXCIpLFxuICAgICAgb2JqZWN0OiBPKFwib2JqZWN0XCIpLFxuICAgICAgc3RyaW5nOiBPKFwic3RyaW5nXCIpLFxuICAgICAgc3ltYm9sOiBPKFwic3ltYm9sXCIpLFxuICAgICAgYW55OiBoKCksXG4gICAgICBhcnJheU9mOiBnLFxuICAgICAgZWxlbWVudDogdigpLFxuICAgICAgZWxlbWVudFR5cGU6IEwoKSxcbiAgICAgIGluc3RhbmNlT2Y6IHksXG4gICAgICBub2RlOiBUKCksXG4gICAgICBvYmplY3RPZjogWCxcbiAgICAgIG9uZU9mOiBCLFxuICAgICAgb25lT2ZUeXBlOiBGLFxuICAgICAgc2hhcGU6IEgsXG4gICAgICBleGFjdDogQ1xuICAgIH07XG4gICAgZnVuY3Rpb24gQShSLCBJKSB7XG4gICAgICByZXR1cm4gUiA9PT0gSSA/IFIgIT09IDAgfHwgMSAvIFIgPT09IDEgLyBJIDogUiAhPT0gUiAmJiBJICE9PSBJO1xuICAgIH1cbiAgICBmdW5jdGlvbiB6KFIsIEkpIHtcbiAgICAgIHRoaXMubWVzc2FnZSA9IFIsIHRoaXMuZGF0YSA9IEkgJiYgdHlwZW9mIEkgPT0gXCJvYmplY3RcIiA/IEkgOiB7fSwgdGhpcy5zdGFjayA9IFwiXCI7XG4gICAgfVxuICAgIHoucHJvdG90eXBlID0gRXJyb3IucHJvdG90eXBlO1xuICAgIGZ1bmN0aW9uIGYoUikge1xuICAgICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIilcbiAgICAgICAgdmFyIEkgPSB7fSwgaiA9IDA7XG4gICAgICBmdW5jdGlvbiBVKHIxLCBLLCBRLCBFLCBELCBHLCBKKSB7XG4gICAgICAgIGlmIChFID0gRSB8fCBNLCBHID0gRyB8fCBRLCBKICE9PSBvKSB7XG4gICAgICAgICAgaWYgKGwpIHtcbiAgICAgICAgICAgIHZhciBTID0gbmV3IEVycm9yKFxuICAgICAgICAgICAgICBcIkNhbGxpbmcgUHJvcFR5cGVzIHZhbGlkYXRvcnMgZGlyZWN0bHkgaXMgbm90IHN1cHBvcnRlZCBieSB0aGUgYHByb3AtdHlwZXNgIHBhY2thZ2UuIFVzZSBgUHJvcFR5cGVzLmNoZWNrUHJvcFR5cGVzKClgIHRvIGNhbGwgdGhlbS4gUmVhZCBtb3JlIGF0IGh0dHA6Ly9mYi5tZS91c2UtY2hlY2stcHJvcC10eXBlc1wiXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgdGhyb3cgUy5uYW1lID0gXCJJbnZhcmlhbnQgVmlvbGF0aW9uXCIsIFM7XG4gICAgICAgICAgfSBlbHNlIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIgJiYgdHlwZW9mIGNvbnNvbGUgPCBcInVcIikge1xuICAgICAgICAgICAgdmFyIFcgPSBFICsgXCI6XCIgKyBRO1xuICAgICAgICAgICAgIUlbV10gJiYgLy8gQXZvaWQgc3BhbW1pbmcgdGhlIGNvbnNvbGUgYmVjYXVzZSB0aGV5IGFyZSBvZnRlbiBub3QgYWN0aW9uYWJsZSBleGNlcHQgZm9yIGxpYiBhdXRob3JzXG4gICAgICAgICAgICBqIDwgMyAmJiAoaShcbiAgICAgICAgICAgICAgXCJZb3UgYXJlIG1hbnVhbGx5IGNhbGxpbmcgYSBSZWFjdC5Qcm9wVHlwZXMgdmFsaWRhdGlvbiBmdW5jdGlvbiBmb3IgdGhlIGBcIiArIEcgKyBcImAgcHJvcCBvbiBgXCIgKyBFICsgXCJgLiBUaGlzIGlzIGRlcHJlY2F0ZWQgYW5kIHdpbGwgdGhyb3cgaW4gdGhlIHN0YW5kYWxvbmUgYHByb3AtdHlwZXNgIHBhY2thZ2UuIFlvdSBtYXkgYmUgc2VlaW5nIHRoaXMgd2FybmluZyBkdWUgdG8gYSB0aGlyZC1wYXJ0eSBQcm9wVHlwZXMgbGlicmFyeS4gU2VlIGh0dHBzOi8vZmIubWUvcmVhY3Qtd2FybmluZy1kb250LWNhbGwtcHJvcHR5cGVzIGZvciBkZXRhaWxzLlwiXG4gICAgICAgICAgICApLCBJW1ddID0gITAsIGorKyk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBLW1FdID09IG51bGwgPyByMSA/IEtbUV0gPT09IG51bGwgPyBuZXcgeihcIlRoZSBcIiArIEQgKyBcIiBgXCIgKyBHICsgXCJgIGlzIG1hcmtlZCBhcyByZXF1aXJlZCBcIiArIChcImluIGBcIiArIEUgKyBcImAsIGJ1dCBpdHMgdmFsdWUgaXMgYG51bGxgLlwiKSkgOiBuZXcgeihcIlRoZSBcIiArIEQgKyBcIiBgXCIgKyBHICsgXCJgIGlzIG1hcmtlZCBhcyByZXF1aXJlZCBpbiBcIiArIChcImBcIiArIEUgKyBcImAsIGJ1dCBpdHMgdmFsdWUgaXMgYHVuZGVmaW5lZGAuXCIpKSA6IG51bGwgOiBSKEssIFEsIEUsIEQsIEcpO1xuICAgICAgfVxuICAgICAgdmFyIF8gPSBVLmJpbmQobnVsbCwgITEpO1xuICAgICAgcmV0dXJuIF8uaXNSZXF1aXJlZCA9IFUuYmluZChudWxsLCAhMCksIF87XG4gICAgfVxuICAgIGZ1bmN0aW9uIE8oUikge1xuICAgICAgZnVuY3Rpb24gSShqLCBVLCBfLCByMSwgSywgUSkge1xuICAgICAgICB2YXIgRSA9IGpbVV0sIEQgPSBrKEUpO1xuICAgICAgICBpZiAoRCAhPT0gUikge1xuICAgICAgICAgIHZhciBHID0geChFKTtcbiAgICAgICAgICByZXR1cm4gbmV3IHooXG4gICAgICAgICAgICBcIkludmFsaWQgXCIgKyByMSArIFwiIGBcIiArIEsgKyBcImAgb2YgdHlwZSBcIiArIChcImBcIiArIEcgKyBcImAgc3VwcGxpZWQgdG8gYFwiICsgXyArIFwiYCwgZXhwZWN0ZWQgXCIpICsgKFwiYFwiICsgUiArIFwiYC5cIiksXG4gICAgICAgICAgICB7IGV4cGVjdGVkVHlwZTogUiB9XG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIH1cbiAgICAgIHJldHVybiBmKEkpO1xuICAgIH1cbiAgICBmdW5jdGlvbiBoKCkge1xuICAgICAgcmV0dXJuIGYoYSk7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGcoUikge1xuICAgICAgZnVuY3Rpb24gSShqLCBVLCBfLCByMSwgSykge1xuICAgICAgICBpZiAodHlwZW9mIFIgIT0gXCJmdW5jdGlvblwiKVxuICAgICAgICAgIHJldHVybiBuZXcgeihcIlByb3BlcnR5IGBcIiArIEsgKyBcImAgb2YgY29tcG9uZW50IGBcIiArIF8gKyBcImAgaGFzIGludmFsaWQgUHJvcFR5cGUgbm90YXRpb24gaW5zaWRlIGFycmF5T2YuXCIpO1xuICAgICAgICB2YXIgUSA9IGpbVV07XG4gICAgICAgIGlmICghQXJyYXkuaXNBcnJheShRKSkge1xuICAgICAgICAgIHZhciBFID0gayhRKTtcbiAgICAgICAgICByZXR1cm4gbmV3IHooXCJJbnZhbGlkIFwiICsgcjEgKyBcIiBgXCIgKyBLICsgXCJgIG9mIHR5cGUgXCIgKyAoXCJgXCIgKyBFICsgXCJgIHN1cHBsaWVkIHRvIGBcIiArIF8gKyBcImAsIGV4cGVjdGVkIGFuIGFycmF5LlwiKSk7XG4gICAgICAgIH1cbiAgICAgICAgZm9yICh2YXIgRCA9IDA7IEQgPCBRLmxlbmd0aDsgRCsrKSB7XG4gICAgICAgICAgdmFyIEcgPSBSKFEsIEQsIF8sIHIxLCBLICsgXCJbXCIgKyBEICsgXCJdXCIsIG8pO1xuICAgICAgICAgIGlmIChHIGluc3RhbmNlb2YgRXJyb3IpXG4gICAgICAgICAgICByZXR1cm4gRztcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIH1cbiAgICAgIHJldHVybiBmKEkpO1xuICAgIH1cbiAgICBmdW5jdGlvbiB2KCkge1xuICAgICAgZnVuY3Rpb24gUihJLCBqLCBVLCBfLCByMSkge1xuICAgICAgICB2YXIgSyA9IElbal07XG4gICAgICAgIGlmICghcyhLKSkge1xuICAgICAgICAgIHZhciBRID0gayhLKTtcbiAgICAgICAgICByZXR1cm4gbmV3IHooXCJJbnZhbGlkIFwiICsgXyArIFwiIGBcIiArIHIxICsgXCJgIG9mIHR5cGUgXCIgKyAoXCJgXCIgKyBRICsgXCJgIHN1cHBsaWVkIHRvIGBcIiArIFUgKyBcImAsIGV4cGVjdGVkIGEgc2luZ2xlIFJlYWN0RWxlbWVudC5cIikpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGYoUik7XG4gICAgfVxuICAgIGZ1bmN0aW9uIEwoKSB7XG4gICAgICBmdW5jdGlvbiBSKEksIGosIFUsIF8sIHIxKSB7XG4gICAgICAgIHZhciBLID0gSVtqXTtcbiAgICAgICAgaWYgKCFlLmlzVmFsaWRFbGVtZW50VHlwZShLKSkge1xuICAgICAgICAgIHZhciBRID0gayhLKTtcbiAgICAgICAgICByZXR1cm4gbmV3IHooXCJJbnZhbGlkIFwiICsgXyArIFwiIGBcIiArIHIxICsgXCJgIG9mIHR5cGUgXCIgKyAoXCJgXCIgKyBRICsgXCJgIHN1cHBsaWVkIHRvIGBcIiArIFUgKyBcImAsIGV4cGVjdGVkIGEgc2luZ2xlIFJlYWN0RWxlbWVudCB0eXBlLlwiKSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICB9XG4gICAgICByZXR1cm4gZihSKTtcbiAgICB9XG4gICAgZnVuY3Rpb24geShSKSB7XG4gICAgICBmdW5jdGlvbiBJKGosIFUsIF8sIHIxLCBLKSB7XG4gICAgICAgIGlmICghKGpbVV0gaW5zdGFuY2VvZiBSKSkge1xuICAgICAgICAgIHZhciBRID0gUi5uYW1lIHx8IE0sIEUgPSBWKGpbVV0pO1xuICAgICAgICAgIHJldHVybiBuZXcgeihcIkludmFsaWQgXCIgKyByMSArIFwiIGBcIiArIEsgKyBcImAgb2YgdHlwZSBcIiArIChcImBcIiArIEUgKyBcImAgc3VwcGxpZWQgdG8gYFwiICsgXyArIFwiYCwgZXhwZWN0ZWQgXCIpICsgKFwiaW5zdGFuY2Ugb2YgYFwiICsgUSArIFwiYC5cIikpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGYoSSk7XG4gICAgfVxuICAgIGZ1bmN0aW9uIEIoUikge1xuICAgICAgaWYgKCFBcnJheS5pc0FycmF5KFIpKVxuICAgICAgICByZXR1cm4gcHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiICYmIChhcmd1bWVudHMubGVuZ3RoID4gMSA/IGkoXG4gICAgICAgICAgXCJJbnZhbGlkIGFyZ3VtZW50cyBzdXBwbGllZCB0byBvbmVPZiwgZXhwZWN0ZWQgYW4gYXJyYXksIGdvdCBcIiArIGFyZ3VtZW50cy5sZW5ndGggKyBcIiBhcmd1bWVudHMuIEEgY29tbW9uIG1pc3Rha2UgaXMgdG8gd3JpdGUgb25lT2YoeCwgeSwgeikgaW5zdGVhZCBvZiBvbmVPZihbeCwgeSwgel0pLlwiXG4gICAgICAgICkgOiBpKFwiSW52YWxpZCBhcmd1bWVudCBzdXBwbGllZCB0byBvbmVPZiwgZXhwZWN0ZWQgYW4gYXJyYXkuXCIpKSwgYTtcbiAgICAgIGZ1bmN0aW9uIEkoaiwgVSwgXywgcjEsIEspIHtcbiAgICAgICAgZm9yICh2YXIgUSA9IGpbVV0sIEUgPSAwOyBFIDwgUi5sZW5ndGg7IEUrKylcbiAgICAgICAgICBpZiAoQShRLCBSW0VdKSlcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB2YXIgRCA9IEpTT04uc3RyaW5naWZ5KFIsIGZ1bmN0aW9uKEosIFMpIHtcbiAgICAgICAgICB2YXIgVyA9IHgoUyk7XG4gICAgICAgICAgcmV0dXJuIFcgPT09IFwic3ltYm9sXCIgPyBTdHJpbmcoUykgOiBTO1xuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIG5ldyB6KFwiSW52YWxpZCBcIiArIHIxICsgXCIgYFwiICsgSyArIFwiYCBvZiB2YWx1ZSBgXCIgKyBTdHJpbmcoUSkgKyBcImAgXCIgKyAoXCJzdXBwbGllZCB0byBgXCIgKyBfICsgXCJgLCBleHBlY3RlZCBvbmUgb2YgXCIgKyBEICsgXCIuXCIpKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBmKEkpO1xuICAgIH1cbiAgICBmdW5jdGlvbiBYKFIpIHtcbiAgICAgIGZ1bmN0aW9uIEkoaiwgVSwgXywgcjEsIEspIHtcbiAgICAgICAgaWYgKHR5cGVvZiBSICE9IFwiZnVuY3Rpb25cIilcbiAgICAgICAgICByZXR1cm4gbmV3IHooXCJQcm9wZXJ0eSBgXCIgKyBLICsgXCJgIG9mIGNvbXBvbmVudCBgXCIgKyBfICsgXCJgIGhhcyBpbnZhbGlkIFByb3BUeXBlIG5vdGF0aW9uIGluc2lkZSBvYmplY3RPZi5cIik7XG4gICAgICAgIHZhciBRID0galtVXSwgRSA9IGsoUSk7XG4gICAgICAgIGlmIChFICE9PSBcIm9iamVjdFwiKVxuICAgICAgICAgIHJldHVybiBuZXcgeihcIkludmFsaWQgXCIgKyByMSArIFwiIGBcIiArIEsgKyBcImAgb2YgdHlwZSBcIiArIChcImBcIiArIEUgKyBcImAgc3VwcGxpZWQgdG8gYFwiICsgXyArIFwiYCwgZXhwZWN0ZWQgYW4gb2JqZWN0LlwiKSk7XG4gICAgICAgIGZvciAodmFyIEQgaW4gUSlcbiAgICAgICAgICBpZiAobihRLCBEKSkge1xuICAgICAgICAgICAgdmFyIEcgPSBSKFEsIEQsIF8sIHIxLCBLICsgXCIuXCIgKyBELCBvKTtcbiAgICAgICAgICAgIGlmIChHIGluc3RhbmNlb2YgRXJyb3IpXG4gICAgICAgICAgICAgIHJldHVybiBHO1xuICAgICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICB9XG4gICAgICByZXR1cm4gZihJKTtcbiAgICB9XG4gICAgZnVuY3Rpb24gRihSKSB7XG4gICAgICBpZiAoIUFycmF5LmlzQXJyYXkoUikpXG4gICAgICAgIHJldHVybiBwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIgJiYgaShcIkludmFsaWQgYXJndW1lbnQgc3VwcGxpZWQgdG8gb25lT2ZUeXBlLCBleHBlY3RlZCBhbiBpbnN0YW5jZSBvZiBhcnJheS5cIiksIGE7XG4gICAgICBmb3IgKHZhciBJID0gMDsgSSA8IFIubGVuZ3RoOyBJKyspIHtcbiAgICAgICAgdmFyIGogPSBSW0ldO1xuICAgICAgICBpZiAodHlwZW9mIGogIT0gXCJmdW5jdGlvblwiKVxuICAgICAgICAgIHJldHVybiBpKFxuICAgICAgICAgICAgXCJJbnZhbGlkIGFyZ3VtZW50IHN1cHBsaWVkIHRvIG9uZU9mVHlwZS4gRXhwZWN0ZWQgYW4gYXJyYXkgb2YgY2hlY2sgZnVuY3Rpb25zLCBidXQgcmVjZWl2ZWQgXCIgKyBOKGopICsgXCIgYXQgaW5kZXggXCIgKyBJICsgXCIuXCJcbiAgICAgICAgICApLCBhO1xuICAgICAgfVxuICAgICAgZnVuY3Rpb24gVShfLCByMSwgSywgUSwgRSkge1xuICAgICAgICBmb3IgKHZhciBEID0gW10sIEcgPSAwOyBHIDwgUi5sZW5ndGg7IEcrKykge1xuICAgICAgICAgIHZhciBKID0gUltHXSwgUyA9IEooXywgcjEsIEssIFEsIEUsIG8pO1xuICAgICAgICAgIGlmIChTID09IG51bGwpXG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgICBTLmRhdGEgJiYgbihTLmRhdGEsIFwiZXhwZWN0ZWRUeXBlXCIpICYmIEQucHVzaChTLmRhdGEuZXhwZWN0ZWRUeXBlKTtcbiAgICAgICAgfVxuICAgICAgICB2YXIgVyA9IEQubGVuZ3RoID4gMCA/IFwiLCBleHBlY3RlZCBvbmUgb2YgdHlwZSBbXCIgKyBELmpvaW4oXCIsIFwiKSArIFwiXVwiIDogXCJcIjtcbiAgICAgICAgcmV0dXJuIG5ldyB6KFwiSW52YWxpZCBcIiArIFEgKyBcIiBgXCIgKyBFICsgXCJgIHN1cHBsaWVkIHRvIFwiICsgKFwiYFwiICsgSyArIFwiYFwiICsgVyArIFwiLlwiKSk7XG4gICAgICB9XG4gICAgICByZXR1cm4gZihVKTtcbiAgICB9XG4gICAgZnVuY3Rpb24gVCgpIHtcbiAgICAgIGZ1bmN0aW9uIFIoSSwgaiwgVSwgXywgcjEpIHtcbiAgICAgICAgcmV0dXJuIHEoSVtqXSkgPyBudWxsIDogbmV3IHooXCJJbnZhbGlkIFwiICsgXyArIFwiIGBcIiArIHIxICsgXCJgIHN1cHBsaWVkIHRvIFwiICsgKFwiYFwiICsgVSArIFwiYCwgZXhwZWN0ZWQgYSBSZWFjdE5vZGUuXCIpKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBmKFIpO1xuICAgIH1cbiAgICBmdW5jdGlvbiB3KFIsIEksIGosIFUsIF8pIHtcbiAgICAgIHJldHVybiBuZXcgeihcbiAgICAgICAgKFIgfHwgXCJSZWFjdCBjbGFzc1wiKSArIFwiOiBcIiArIEkgKyBcIiB0eXBlIGBcIiArIGogKyBcIi5cIiArIFUgKyBcImAgaXMgaW52YWxpZDsgaXQgbXVzdCBiZSBhIGZ1bmN0aW9uLCB1c3VhbGx5IGZyb20gdGhlIGBwcm9wLXR5cGVzYCBwYWNrYWdlLCBidXQgcmVjZWl2ZWQgYFwiICsgXyArIFwiYC5cIlxuICAgICAgKTtcbiAgICB9XG4gICAgZnVuY3Rpb24gSChSKSB7XG4gICAgICBmdW5jdGlvbiBJKGosIFUsIF8sIHIxLCBLKSB7XG4gICAgICAgIHZhciBRID0galtVXSwgRSA9IGsoUSk7XG4gICAgICAgIGlmIChFICE9PSBcIm9iamVjdFwiKVxuICAgICAgICAgIHJldHVybiBuZXcgeihcIkludmFsaWQgXCIgKyByMSArIFwiIGBcIiArIEsgKyBcImAgb2YgdHlwZSBgXCIgKyBFICsgXCJgIFwiICsgKFwic3VwcGxpZWQgdG8gYFwiICsgXyArIFwiYCwgZXhwZWN0ZWQgYG9iamVjdGAuXCIpKTtcbiAgICAgICAgZm9yICh2YXIgRCBpbiBSKSB7XG4gICAgICAgICAgdmFyIEcgPSBSW0RdO1xuICAgICAgICAgIGlmICh0eXBlb2YgRyAhPSBcImZ1bmN0aW9uXCIpXG4gICAgICAgICAgICByZXR1cm4gdyhfLCByMSwgSywgRCwgeChHKSk7XG4gICAgICAgICAgdmFyIEogPSBHKFEsIEQsIF8sIHIxLCBLICsgXCIuXCIgKyBELCBvKTtcbiAgICAgICAgICBpZiAoSilcbiAgICAgICAgICAgIHJldHVybiBKO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGYoSSk7XG4gICAgfVxuICAgIGZ1bmN0aW9uIEMoUikge1xuICAgICAgZnVuY3Rpb24gSShqLCBVLCBfLCByMSwgSykge1xuICAgICAgICB2YXIgUSA9IGpbVV0sIEUgPSBrKFEpO1xuICAgICAgICBpZiAoRSAhPT0gXCJvYmplY3RcIilcbiAgICAgICAgICByZXR1cm4gbmV3IHooXCJJbnZhbGlkIFwiICsgcjEgKyBcIiBgXCIgKyBLICsgXCJgIG9mIHR5cGUgYFwiICsgRSArIFwiYCBcIiArIChcInN1cHBsaWVkIHRvIGBcIiArIF8gKyBcImAsIGV4cGVjdGVkIGBvYmplY3RgLlwiKSk7XG4gICAgICAgIHZhciBEID0gdCh7fSwgaltVXSwgUik7XG4gICAgICAgIGZvciAodmFyIEcgaW4gRCkge1xuICAgICAgICAgIHZhciBKID0gUltHXTtcbiAgICAgICAgICBpZiAobihSLCBHKSAmJiB0eXBlb2YgSiAhPSBcImZ1bmN0aW9uXCIpXG4gICAgICAgICAgICByZXR1cm4gdyhfLCByMSwgSywgRywgeChKKSk7XG4gICAgICAgICAgaWYgKCFKKVxuICAgICAgICAgICAgcmV0dXJuIG5ldyB6KFxuICAgICAgICAgICAgICBcIkludmFsaWQgXCIgKyByMSArIFwiIGBcIiArIEsgKyBcImAga2V5IGBcIiArIEcgKyBcImAgc3VwcGxpZWQgdG8gYFwiICsgXyArIFwiYC5cXG5CYWQgb2JqZWN0OiBcIiArIEpTT04uc3RyaW5naWZ5KGpbVV0sIG51bGwsIFwiICBcIikgKyBgXG5WYWxpZCBrZXlzOiBgICsgSlNPTi5zdHJpbmdpZnkoT2JqZWN0LmtleXMoUiksIG51bGwsIFwiICBcIilcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgdmFyIFMgPSBKKFEsIEcsIF8sIHIxLCBLICsgXCIuXCIgKyBHLCBvKTtcbiAgICAgICAgICBpZiAoUylcbiAgICAgICAgICAgIHJldHVybiBTO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGYoSSk7XG4gICAgfVxuICAgIGZ1bmN0aW9uIHEoUikge1xuICAgICAgc3dpdGNoICh0eXBlb2YgUikge1xuICAgICAgICBjYXNlIFwibnVtYmVyXCI6XG4gICAgICAgIGNhc2UgXCJzdHJpbmdcIjpcbiAgICAgICAgY2FzZSBcInVuZGVmaW5lZFwiOlxuICAgICAgICAgIHJldHVybiAhMDtcbiAgICAgICAgY2FzZSBcImJvb2xlYW5cIjpcbiAgICAgICAgICByZXR1cm4gIVI7XG4gICAgICAgIGNhc2UgXCJvYmplY3RcIjpcbiAgICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShSKSlcbiAgICAgICAgICAgIHJldHVybiBSLmV2ZXJ5KHEpO1xuICAgICAgICAgIGlmIChSID09PSBudWxsIHx8IHMoUikpXG4gICAgICAgICAgICByZXR1cm4gITA7XG4gICAgICAgICAgdmFyIEkgPSBiKFIpO1xuICAgICAgICAgIGlmIChJKSB7XG4gICAgICAgICAgICB2YXIgaiA9IEkuY2FsbChSKSwgVTtcbiAgICAgICAgICAgIGlmIChJICE9PSBSLmVudHJpZXMpIHtcbiAgICAgICAgICAgICAgZm9yICg7ICEoVSA9IGoubmV4dCgpKS5kb25lOyApXG4gICAgICAgICAgICAgICAgaWYgKCFxKFUudmFsdWUpKVxuICAgICAgICAgICAgICAgICAgcmV0dXJuICExO1xuICAgICAgICAgICAgfSBlbHNlXG4gICAgICAgICAgICAgIGZvciAoOyAhKFUgPSBqLm5leHQoKSkuZG9uZTsgKSB7XG4gICAgICAgICAgICAgICAgdmFyIF8gPSBVLnZhbHVlO1xuICAgICAgICAgICAgICAgIGlmIChfICYmICFxKF9bMV0pKVxuICAgICAgICAgICAgICAgICAgcmV0dXJuICExO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgfSBlbHNlXG4gICAgICAgICAgICByZXR1cm4gITE7XG4gICAgICAgICAgcmV0dXJuICEwO1xuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIHJldHVybiAhMTtcbiAgICAgIH1cbiAgICB9XG4gICAgZnVuY3Rpb24gbShSLCBJKSB7XG4gICAgICByZXR1cm4gUiA9PT0gXCJzeW1ib2xcIiA/ICEwIDogSSA/IElbXCJAQHRvU3RyaW5nVGFnXCJdID09PSBcIlN5bWJvbFwiIHx8IHR5cGVvZiBTeW1ib2wgPT0gXCJmdW5jdGlvblwiICYmIEkgaW5zdGFuY2VvZiBTeW1ib2wgOiAhMTtcbiAgICB9XG4gICAgZnVuY3Rpb24gayhSKSB7XG4gICAgICB2YXIgSSA9IHR5cGVvZiBSO1xuICAgICAgcmV0dXJuIEFycmF5LmlzQXJyYXkoUikgPyBcImFycmF5XCIgOiBSIGluc3RhbmNlb2YgUmVnRXhwID8gXCJvYmplY3RcIiA6IG0oSSwgUikgPyBcInN5bWJvbFwiIDogSTtcbiAgICB9XG4gICAgZnVuY3Rpb24geChSKSB7XG4gICAgICBpZiAodHlwZW9mIFIgPiBcInVcIiB8fCBSID09PSBudWxsKVxuICAgICAgICByZXR1cm4gXCJcIiArIFI7XG4gICAgICB2YXIgSSA9IGsoUik7XG4gICAgICBpZiAoSSA9PT0gXCJvYmplY3RcIikge1xuICAgICAgICBpZiAoUiBpbnN0YW5jZW9mIERhdGUpXG4gICAgICAgICAgcmV0dXJuIFwiZGF0ZVwiO1xuICAgICAgICBpZiAoUiBpbnN0YW5jZW9mIFJlZ0V4cClcbiAgICAgICAgICByZXR1cm4gXCJyZWdleHBcIjtcbiAgICAgIH1cbiAgICAgIHJldHVybiBJO1xuICAgIH1cbiAgICBmdW5jdGlvbiBOKFIpIHtcbiAgICAgIHZhciBJID0geChSKTtcbiAgICAgIHN3aXRjaCAoSSkge1xuICAgICAgICBjYXNlIFwiYXJyYXlcIjpcbiAgICAgICAgY2FzZSBcIm9iamVjdFwiOlxuICAgICAgICAgIHJldHVybiBcImFuIFwiICsgSTtcbiAgICAgICAgY2FzZSBcImJvb2xlYW5cIjpcbiAgICAgICAgY2FzZSBcImRhdGVcIjpcbiAgICAgICAgY2FzZSBcInJlZ2V4cFwiOlxuICAgICAgICAgIHJldHVybiBcImEgXCIgKyBJO1xuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIHJldHVybiBJO1xuICAgICAgfVxuICAgIH1cbiAgICBmdW5jdGlvbiBWKFIpIHtcbiAgICAgIHJldHVybiAhUi5jb25zdHJ1Y3RvciB8fCAhUi5jb25zdHJ1Y3Rvci5uYW1lID8gTSA6IFIuY29uc3RydWN0b3IubmFtZTtcbiAgICB9XG4gICAgcmV0dXJuIHUuY2hlY2tQcm9wVHlwZXMgPSByLCB1LnJlc2V0V2FybmluZ0NhY2hlID0gci5yZXNldFdhcm5pbmdDYWNoZSwgdS5Qcm9wVHlwZXMgPSB1LCB1O1xuICB9LCBSaTtcbn1cbnZhciBCaSwgZTc7XG5mdW5jdGlvbiBZeCgpIHtcbiAgaWYgKGU3KVxuICAgIHJldHVybiBCaTtcbiAgZTcgPSAxO1xuICB2YXIgZSA9IGM2KCk7XG4gIGZ1bmN0aW9uIHQoKSB7XG4gIH1cbiAgZnVuY3Rpb24gbygpIHtcbiAgfVxuICByZXR1cm4gby5yZXNldFdhcm5pbmdDYWNoZSA9IHQsIEJpID0gZnVuY3Rpb24oKSB7XG4gICAgZnVuY3Rpb24gbihhLCBzLCBsLCBwLCBkLCBiKSB7XG4gICAgICBpZiAoYiAhPT0gZSkge1xuICAgICAgICB2YXIgTSA9IG5ldyBFcnJvcihcbiAgICAgICAgICBcIkNhbGxpbmcgUHJvcFR5cGVzIHZhbGlkYXRvcnMgZGlyZWN0bHkgaXMgbm90IHN1cHBvcnRlZCBieSB0aGUgYHByb3AtdHlwZXNgIHBhY2thZ2UuIFVzZSBQcm9wVHlwZXMuY2hlY2tQcm9wVHlwZXMoKSB0byBjYWxsIHRoZW0uIFJlYWQgbW9yZSBhdCBodHRwOi8vZmIubWUvdXNlLWNoZWNrLXByb3AtdHlwZXNcIlxuICAgICAgICApO1xuICAgICAgICB0aHJvdyBNLm5hbWUgPSBcIkludmFyaWFudCBWaW9sYXRpb25cIiwgTTtcbiAgICAgIH1cbiAgICB9XG4gICAgbi5pc1JlcXVpcmVkID0gbjtcbiAgICBmdW5jdGlvbiByKCkge1xuICAgICAgcmV0dXJuIG47XG4gICAgfVxuICAgIHZhciBpID0ge1xuICAgICAgYXJyYXk6IG4sXG4gICAgICBiaWdpbnQ6IG4sXG4gICAgICBib29sOiBuLFxuICAgICAgZnVuYzogbixcbiAgICAgIG51bWJlcjogbixcbiAgICAgIG9iamVjdDogbixcbiAgICAgIHN0cmluZzogbixcbiAgICAgIHN5bWJvbDogbixcbiAgICAgIGFueTogbixcbiAgICAgIGFycmF5T2Y6IHIsXG4gICAgICBlbGVtZW50OiBuLFxuICAgICAgZWxlbWVudFR5cGU6IG4sXG4gICAgICBpbnN0YW5jZU9mOiByLFxuICAgICAgbm9kZTogbixcbiAgICAgIG9iamVjdE9mOiByLFxuICAgICAgb25lT2Y6IHIsXG4gICAgICBvbmVPZlR5cGU6IHIsXG4gICAgICBzaGFwZTogcixcbiAgICAgIGV4YWN0OiByLFxuICAgICAgY2hlY2tQcm9wVHlwZXM6IG8sXG4gICAgICByZXNldFdhcm5pbmdDYWNoZTogdFxuICAgIH07XG4gICAgcmV0dXJuIGkuUHJvcFR5cGVzID0gaSwgaTtcbiAgfSwgQmk7XG59XG5pZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiKSB7XG4gIHZhciBHeCA9IHM2KCksIFF4ID0gITA7XG4gIFphLmV4cG9ydHMgPSBVeCgpKEd4LmlzRWxlbWVudCwgUXgpO1xufSBlbHNlXG4gIFphLmV4cG9ydHMgPSBZeCgpKCk7XG52YXIgcHAgPSBaYS5leHBvcnRzO1xuY29uc3QgcTMgPSAvKiBAX19QVVJFX18gKi8gUTIocHApO1xudmFyIGRwID0geyBleHBvcnRzOiB7fSB9O1xuLyohXG5cdENvcHlyaWdodCAoYykgMjAxOCBKZWQgV2F0c29uLlxuXHRMaWNlbnNlZCB1bmRlciB0aGUgTUlUIExpY2Vuc2UgKE1JVCksIHNlZVxuXHRodHRwOi8vamVkd2F0c29uLmdpdGh1Yi5pby9jbGFzc25hbWVzXG4qL1xuKGZ1bmN0aW9uKGUpIHtcbiAgKGZ1bmN0aW9uKCkge1xuICAgIHZhciB0ID0ge30uaGFzT3duUHJvcGVydHk7XG4gICAgZnVuY3Rpb24gbygpIHtcbiAgICAgIGZvciAodmFyIGkgPSBcIlwiLCBhID0gMDsgYSA8IGFyZ3VtZW50cy5sZW5ndGg7IGErKykge1xuICAgICAgICB2YXIgcyA9IGFyZ3VtZW50c1thXTtcbiAgICAgICAgcyAmJiAoaSA9IHIoaSwgbihzKSkpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGk7XG4gICAgfVxuICAgIGZ1bmN0aW9uIG4oaSkge1xuICAgICAgaWYgKHR5cGVvZiBpID09IFwic3RyaW5nXCIgfHwgdHlwZW9mIGkgPT0gXCJudW1iZXJcIilcbiAgICAgICAgcmV0dXJuIGk7XG4gICAgICBpZiAodHlwZW9mIGkgIT0gXCJvYmplY3RcIilcbiAgICAgICAgcmV0dXJuIFwiXCI7XG4gICAgICBpZiAoQXJyYXkuaXNBcnJheShpKSlcbiAgICAgICAgcmV0dXJuIG8uYXBwbHkobnVsbCwgaSk7XG4gICAgICBpZiAoaS50b1N0cmluZyAhPT0gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZyAmJiAhaS50b1N0cmluZy50b1N0cmluZygpLmluY2x1ZGVzKFwiW25hdGl2ZSBjb2RlXVwiKSlcbiAgICAgICAgcmV0dXJuIGkudG9TdHJpbmcoKTtcbiAgICAgIHZhciBhID0gXCJcIjtcbiAgICAgIGZvciAodmFyIHMgaW4gaSlcbiAgICAgICAgdC5jYWxsKGksIHMpICYmIGlbc10gJiYgKGEgPSByKGEsIHMpKTtcbiAgICAgIHJldHVybiBhO1xuICAgIH1cbiAgICBmdW5jdGlvbiByKGksIGEpIHtcbiAgICAgIHJldHVybiBhID8gaSA/IGkgKyBcIiBcIiArIGEgOiBpICsgYSA6IGk7XG4gICAgfVxuICAgIGUuZXhwb3J0cyA/IChvLmRlZmF1bHQgPSBvLCBlLmV4cG9ydHMgPSBvKSA6IHdpbmRvdy5jbGFzc05hbWVzID0gbztcbiAgfSkoKTtcbn0pKGRwKTtcbnZhciBaeCA9IGRwLmV4cG9ydHM7XG5jb25zdCBtMiA9IC8qIEBfX1BVUkVfXyAqLyBRMihaeCk7XG5mdW5jdGlvbiBqeChlLCB0KSB7XG4gIGUucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZSh0LnByb3RvdHlwZSksIGUucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gZSwgamEoZSwgdCk7XG59XG5mdW5jdGlvbiBqYShlLCB0KSB7XG4gIHJldHVybiBqYSA9IE9iamVjdC5zZXRQcm90b3R5cGVPZiB8fCBmdW5jdGlvbihuLCByKSB7XG4gICAgcmV0dXJuIG4uX19wcm90b19fID0gciwgbjtcbiAgfSwgamEoZSwgdCk7XG59XG5mdW5jdGlvbiBLeChlLCB0KSB7XG4gIGlmIChlID09IG51bGwpXG4gICAgcmV0dXJuIHt9O1xuICB2YXIgbyA9IHt9LCBuID0gT2JqZWN0LmtleXMoZSksIHIsIGk7XG4gIGZvciAoaSA9IDA7IGkgPCBuLmxlbmd0aDsgaSsrKVxuICAgIHIgPSBuW2ldLCAhKHQuaW5kZXhPZihyKSA+PSAwKSAmJiAob1tyXSA9IGVbcl0pO1xuICByZXR1cm4gbztcbn1cbmZ1bmN0aW9uIHQ3KGUpIHtcbiAgaWYgKGUgPT09IHZvaWQgMClcbiAgICB0aHJvdyBuZXcgUmVmZXJlbmNlRXJyb3IoXCJ0aGlzIGhhc24ndCBiZWVuIGluaXRpYWxpc2VkIC0gc3VwZXIoKSBoYXNuJ3QgYmVlbiBjYWxsZWRcIik7XG4gIHJldHVybiBlO1xufVxuZnVuY3Rpb24gSngoZSwgdCwgbykge1xuICByZXR1cm4gZSA9PT0gdCA/ICEwIDogZS5jb3JyZXNwb25kaW5nRWxlbWVudCA/IGUuY29ycmVzcG9uZGluZ0VsZW1lbnQuY2xhc3NMaXN0LmNvbnRhaW5zKG8pIDogZS5jbGFzc0xpc3QuY29udGFpbnMobyk7XG59XG5mdW5jdGlvbiBfeChlLCB0LCBvKSB7XG4gIGlmIChlID09PSB0KVxuICAgIHJldHVybiAhMDtcbiAgZm9yICg7IGUucGFyZW50Tm9kZSB8fCBlLmhvc3Q7ICkge1xuICAgIGlmIChlLnBhcmVudE5vZGUgJiYgSngoZSwgdCwgbykpXG4gICAgICByZXR1cm4gITA7XG4gICAgZSA9IGUucGFyZW50Tm9kZSB8fCBlLmhvc3Q7XG4gIH1cbiAgcmV0dXJuIGU7XG59XG5mdW5jdGlvbiAkeChlKSB7XG4gIHJldHVybiBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuY2xpZW50V2lkdGggPD0gZS5jbGllbnRYIHx8IGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5jbGllbnRIZWlnaHQgPD0gZS5jbGllbnRZO1xufVxudmFyIGVXID0gZnVuY3Rpb24oKSB7XG4gIGlmICghKHR5cGVvZiB3aW5kb3cgPiBcInVcIiB8fCB0eXBlb2Ygd2luZG93LmFkZEV2ZW50TGlzdGVuZXIgIT0gXCJmdW5jdGlvblwiKSkge1xuICAgIHZhciB0ID0gITEsIG8gPSBPYmplY3QuZGVmaW5lUHJvcGVydHkoe30sIFwicGFzc2l2ZVwiLCB7XG4gICAgICBnZXQ6IGZ1bmN0aW9uKCkge1xuICAgICAgICB0ID0gITA7XG4gICAgICB9XG4gICAgfSksIG4gPSBmdW5jdGlvbigpIHtcbiAgICB9O1xuICAgIHJldHVybiB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcihcInRlc3RQYXNzaXZlRXZlbnRTdXBwb3J0XCIsIG4sIG8pLCB3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcihcInRlc3RQYXNzaXZlRXZlbnRTdXBwb3J0XCIsIG4sIG8pLCB0O1xuICB9XG59O1xuZnVuY3Rpb24gdFcoZSkge1xuICByZXR1cm4gZSA9PT0gdm9pZCAwICYmIChlID0gMCksIGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiArK2U7XG4gIH07XG59XG52YXIgb1cgPSB0VygpLCBLYSwgY24gPSB7fSwgU2kgPSB7fSwgclcgPSBbXCJ0b3VjaHN0YXJ0XCIsIFwidG91Y2htb3ZlXCJdLCBuVyA9IFwiaWdub3JlLXJlYWN0LW9uY2xpY2tvdXRzaWRlXCI7XG5mdW5jdGlvbiBvNyhlLCB0KSB7XG4gIHZhciBvID0ge30sIG4gPSByVy5pbmRleE9mKHQpICE9PSAtMTtcbiAgcmV0dXJuIG4gJiYgS2EgJiYgKG8ucGFzc2l2ZSA9ICFlLnByb3BzLnByZXZlbnREZWZhdWx0KSwgbztcbn1cbmZ1bmN0aW9uIFg0KGUsIHQpIHtcbiAgdmFyIG8sIG4sIHIgPSBlLmRpc3BsYXlOYW1lIHx8IGUubmFtZSB8fCBcIkNvbXBvbmVudFwiO1xuICByZXR1cm4gbiA9IG8gPSAvKiBAX19QVVJFX18gKi8gZnVuY3Rpb24oaSkge1xuICAgIGp4KGEsIGkpO1xuICAgIGZ1bmN0aW9uIGEobCkge1xuICAgICAgdmFyIHA7XG4gICAgICByZXR1cm4gcCA9IGkuY2FsbCh0aGlzLCBsKSB8fCB0aGlzLCBwLl9fb3V0c2lkZUNsaWNrSGFuZGxlciA9IGZ1bmN0aW9uKGQpIHtcbiAgICAgICAgaWYgKHR5cGVvZiBwLl9fY2xpY2tPdXRzaWRlSGFuZGxlclByb3AgPT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICAgICAgcC5fX2NsaWNrT3V0c2lkZUhhbmRsZXJQcm9wKGQpO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB2YXIgYiA9IHAuZ2V0SW5zdGFuY2UoKTtcbiAgICAgICAgaWYgKHR5cGVvZiBiLnByb3BzLmhhbmRsZUNsaWNrT3V0c2lkZSA9PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgICAgICBiLnByb3BzLmhhbmRsZUNsaWNrT3V0c2lkZShkKTtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHR5cGVvZiBiLmhhbmRsZUNsaWNrT3V0c2lkZSA9PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgICAgICBiLmhhbmRsZUNsaWNrT3V0c2lkZShkKTtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiV3JhcHBlZENvbXBvbmVudDogXCIgKyByICsgXCIgbGFja3MgYSBoYW5kbGVDbGlja091dHNpZGUoZXZlbnQpIGZ1bmN0aW9uIGZvciBwcm9jZXNzaW5nIG91dHNpZGUgY2xpY2sgZXZlbnRzLlwiKTtcbiAgICAgIH0sIHAuX19nZXRDb21wb25lbnROb2RlID0gZnVuY3Rpb24oKSB7XG4gICAgICAgIHZhciBkID0gcC5nZXRJbnN0YW5jZSgpO1xuICAgICAgICByZXR1cm4gdCAmJiB0eXBlb2YgdC5zZXRDbGlja091dHNpZGVSZWYgPT0gXCJmdW5jdGlvblwiID8gdC5zZXRDbGlja091dHNpZGVSZWYoKShkKSA6IHR5cGVvZiBkLnNldENsaWNrT3V0c2lkZVJlZiA9PSBcImZ1bmN0aW9uXCIgPyBkLnNldENsaWNrT3V0c2lkZVJlZigpIDogYUEoZCk7XG4gICAgICB9LCBwLmVuYWJsZU9uQ2xpY2tPdXRzaWRlID0gZnVuY3Rpb24oKSB7XG4gICAgICAgIGlmICghKHR5cGVvZiBkb2N1bWVudCA+IFwidVwiIHx8IFNpW3AuX3VpZF0pKSB7XG4gICAgICAgICAgdHlwZW9mIEthID4gXCJ1XCIgJiYgKEthID0gZVcoKSksIFNpW3AuX3VpZF0gPSAhMDtcbiAgICAgICAgICB2YXIgZCA9IHAucHJvcHMuZXZlbnRUeXBlcztcbiAgICAgICAgICBkLmZvckVhY2ggfHwgKGQgPSBbZF0pLCBjbltwLl91aWRdID0gZnVuY3Rpb24oYikge1xuICAgICAgICAgICAgaWYgKHAuY29tcG9uZW50Tm9kZSAhPT0gbnVsbCAmJiAhKHAuaW5pdFRpbWVTdGFtcCA+IGIudGltZVN0YW1wKSAmJiAocC5wcm9wcy5wcmV2ZW50RGVmYXVsdCAmJiBiLnByZXZlbnREZWZhdWx0KCksIHAucHJvcHMuc3RvcFByb3BhZ2F0aW9uICYmIGIuc3RvcFByb3BhZ2F0aW9uKCksICEocC5wcm9wcy5leGNsdWRlU2Nyb2xsYmFyICYmICR4KGIpKSkpIHtcbiAgICAgICAgICAgICAgdmFyIE0gPSBiLmNvbXBvc2VkICYmIGIuY29tcG9zZWRQYXRoICYmIGIuY29tcG9zZWRQYXRoKCkuc2hpZnQoKSB8fCBiLnRhcmdldDtcbiAgICAgICAgICAgICAgX3goTSwgcC5jb21wb25lbnROb2RlLCBwLnByb3BzLm91dHNpZGVDbGlja0lnbm9yZUNsYXNzKSA9PT0gZG9jdW1lbnQgJiYgcC5fX291dHNpZGVDbGlja0hhbmRsZXIoYik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSwgZC5mb3JFYWNoKGZ1bmN0aW9uKGIpIHtcbiAgICAgICAgICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoYiwgY25bcC5fdWlkXSwgbzcodDcocCksIGIpKTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgfSwgcC5kaXNhYmxlT25DbGlja091dHNpZGUgPSBmdW5jdGlvbigpIHtcbiAgICAgICAgZGVsZXRlIFNpW3AuX3VpZF07XG4gICAgICAgIHZhciBkID0gY25bcC5fdWlkXTtcbiAgICAgICAgaWYgKGQgJiYgdHlwZW9mIGRvY3VtZW50IDwgXCJ1XCIpIHtcbiAgICAgICAgICB2YXIgYiA9IHAucHJvcHMuZXZlbnRUeXBlcztcbiAgICAgICAgICBiLmZvckVhY2ggfHwgKGIgPSBbYl0pLCBiLmZvckVhY2goZnVuY3Rpb24oTSkge1xuICAgICAgICAgICAgcmV0dXJuIGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoTSwgZCwgbzcodDcocCksIE0pKTtcbiAgICAgICAgICB9KSwgZGVsZXRlIGNuW3AuX3VpZF07XG4gICAgICAgIH1cbiAgICAgIH0sIHAuZ2V0UmVmID0gZnVuY3Rpb24oZCkge1xuICAgICAgICByZXR1cm4gcC5pbnN0YW5jZVJlZiA9IGQ7XG4gICAgICB9LCBwLl91aWQgPSBvVygpLCBwLmluaXRUaW1lU3RhbXAgPSBwZXJmb3JtYW5jZS5ub3coKSwgcDtcbiAgICB9XG4gICAgdmFyIHMgPSBhLnByb3RvdHlwZTtcbiAgICByZXR1cm4gcy5nZXRJbnN0YW5jZSA9IGZ1bmN0aW9uKCkge1xuICAgICAgaWYgKGUucHJvdG90eXBlICYmICFlLnByb3RvdHlwZS5pc1JlYWN0Q29tcG9uZW50KVxuICAgICAgICByZXR1cm4gdGhpcztcbiAgICAgIHZhciBwID0gdGhpcy5pbnN0YW5jZVJlZjtcbiAgICAgIHJldHVybiBwLmdldEluc3RhbmNlID8gcC5nZXRJbnN0YW5jZSgpIDogcDtcbiAgICB9LCBzLmNvbXBvbmVudERpZE1vdW50ID0gZnVuY3Rpb24oKSB7XG4gICAgICBpZiAoISh0eXBlb2YgZG9jdW1lbnQgPiBcInVcIiB8fCAhZG9jdW1lbnQuY3JlYXRlRWxlbWVudCkpIHtcbiAgICAgICAgdmFyIHAgPSB0aGlzLmdldEluc3RhbmNlKCk7XG4gICAgICAgIGlmICh0ICYmIHR5cGVvZiB0LmhhbmRsZUNsaWNrT3V0c2lkZSA9PSBcImZ1bmN0aW9uXCIgJiYgKHRoaXMuX19jbGlja091dHNpZGVIYW5kbGVyUHJvcCA9IHQuaGFuZGxlQ2xpY2tPdXRzaWRlKHApLCB0eXBlb2YgdGhpcy5fX2NsaWNrT3V0c2lkZUhhbmRsZXJQcm9wICE9IFwiZnVuY3Rpb25cIikpXG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiV3JhcHBlZENvbXBvbmVudDogXCIgKyByICsgXCIgbGFja3MgYSBmdW5jdGlvbiBmb3IgcHJvY2Vzc2luZyBvdXRzaWRlIGNsaWNrIGV2ZW50cyBzcGVjaWZpZWQgYnkgdGhlIGhhbmRsZUNsaWNrT3V0c2lkZSBjb25maWcgb3B0aW9uLlwiKTtcbiAgICAgICAgdGhpcy5jb21wb25lbnROb2RlID0gdGhpcy5fX2dldENvbXBvbmVudE5vZGUoKSwgIXRoaXMucHJvcHMuZGlzYWJsZU9uQ2xpY2tPdXRzaWRlICYmIHRoaXMuZW5hYmxlT25DbGlja091dHNpZGUoKTtcbiAgICAgIH1cbiAgICB9LCBzLmNvbXBvbmVudERpZFVwZGF0ZSA9IGZ1bmN0aW9uKCkge1xuICAgICAgdGhpcy5jb21wb25lbnROb2RlID0gdGhpcy5fX2dldENvbXBvbmVudE5vZGUoKTtcbiAgICB9LCBzLmNvbXBvbmVudFdpbGxVbm1vdW50ID0gZnVuY3Rpb24oKSB7XG4gICAgICB0aGlzLmRpc2FibGVPbkNsaWNrT3V0c2lkZSgpO1xuICAgIH0sIHMucmVuZGVyID0gZnVuY3Rpb24oKSB7XG4gICAgICB2YXIgcCA9IHRoaXMucHJvcHM7XG4gICAgICBwLmV4Y2x1ZGVTY3JvbGxiYXI7XG4gICAgICB2YXIgZCA9IEt4KHAsIFtcImV4Y2x1ZGVTY3JvbGxiYXJcIl0pO1xuICAgICAgcmV0dXJuIGUucHJvdG90eXBlICYmIGUucHJvdG90eXBlLmlzUmVhY3RDb21wb25lbnQgPyBkLnJlZiA9IHRoaXMuZ2V0UmVmIDogZC53cmFwcGVkUmVmID0gdGhpcy5nZXRSZWYsIGQuZGlzYWJsZU9uQ2xpY2tPdXRzaWRlID0gdGhpcy5kaXNhYmxlT25DbGlja091dHNpZGUsIGQuZW5hYmxlT25DbGlja091dHNpZGUgPSB0aGlzLmVuYWJsZU9uQ2xpY2tPdXRzaWRlLCBjZShlLCBkKTtcbiAgICB9LCBhO1xuICB9KCRNKSwgby5kaXNwbGF5TmFtZSA9IFwiT25DbGlja091dHNpZGUoXCIgKyByICsgXCIpXCIsIG8uZGVmYXVsdFByb3BzID0ge1xuICAgIGV2ZW50VHlwZXM6IFtcIm1vdXNlZG93blwiLCBcInRvdWNoc3RhcnRcIl0sXG4gICAgZXhjbHVkZVNjcm9sbGJhcjogdCAmJiB0LmV4Y2x1ZGVTY3JvbGxiYXIgfHwgITEsXG4gICAgb3V0c2lkZUNsaWNrSWdub3JlQ2xhc3M6IG5XLFxuICAgIHByZXZlbnREZWZhdWx0OiAhMSxcbiAgICBzdG9wUHJvcGFnYXRpb246ICExXG4gIH0sIG8uZ2V0Q2xhc3MgPSBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gZS5nZXRDbGFzcyA/IGUuZ2V0Q2xhc3MoKSA6IGU7XG4gIH0sIG47XG59XG5mdW5jdGlvbiByNyhlLCB0KSB7XG4gIHZhciBvID0gT2JqZWN0LmtleXMoZSk7XG4gIGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7XG4gICAgdmFyIG4gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpO1xuICAgIHQgJiYgKG4gPSBuLmZpbHRlcihmdW5jdGlvbihyKSB7XG4gICAgICByZXR1cm4gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihlLCByKS5lbnVtZXJhYmxlO1xuICAgIH0pKSwgby5wdXNoLmFwcGx5KG8sIG4pO1xuICB9XG4gIHJldHVybiBvO1xufVxuZnVuY3Rpb24gejQoZSkge1xuICBmb3IgKHZhciB0ID0gMTsgdCA8IGFyZ3VtZW50cy5sZW5ndGg7IHQrKykge1xuICAgIHZhciBvID0gYXJndW1lbnRzW3RdICE9IG51bGwgPyBhcmd1bWVudHNbdF0gOiB7fTtcbiAgICB0ICUgMiA/IHI3KE9iamVjdChvKSwgITApLmZvckVhY2goZnVuY3Rpb24obikge1xuICAgICAgejEoZSwgbiwgb1tuXSk7XG4gICAgfSkgOiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyA/IE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKGUsIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzKG8pKSA6IHI3KE9iamVjdChvKSkuZm9yRWFjaChmdW5jdGlvbihuKSB7XG4gICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwgbiwgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihvLCBuKSk7XG4gICAgfSk7XG4gIH1cbiAgcmV0dXJuIGU7XG59XG5mdW5jdGlvbiBKYShlKSB7XG4gIHJldHVybiBKYSA9IHR5cGVvZiBTeW1ib2wgPT0gXCJmdW5jdGlvblwiICYmIHR5cGVvZiBTeW1ib2wuaXRlcmF0b3IgPT0gXCJzeW1ib2xcIiA/IGZ1bmN0aW9uKHQpIHtcbiAgICByZXR1cm4gdHlwZW9mIHQ7XG4gIH0gOiBmdW5jdGlvbih0KSB7XG4gICAgcmV0dXJuIHQgJiYgdHlwZW9mIFN5bWJvbCA9PSBcImZ1bmN0aW9uXCIgJiYgdC5jb25zdHJ1Y3RvciA9PT0gU3ltYm9sICYmIHQgIT09IFN5bWJvbC5wcm90b3R5cGUgPyBcInN5bWJvbFwiIDogdHlwZW9mIHQ7XG4gIH0sIEphKGUpO1xufVxuZnVuY3Rpb24gejIoZSwgdCkge1xuICBpZiAoIShlIGluc3RhbmNlb2YgdCkpXG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvblwiKTtcbn1cbmZ1bmN0aW9uIG43KGUsIHQpIHtcbiAgZm9yICh2YXIgbyA9IDA7IG8gPCB0Lmxlbmd0aDsgbysrKSB7XG4gICAgdmFyIG4gPSB0W29dO1xuICAgIG4uZW51bWVyYWJsZSA9IG4uZW51bWVyYWJsZSB8fCAhMSwgbi5jb25maWd1cmFibGUgPSAhMCwgXCJ2YWx1ZVwiIGluIG4gJiYgKG4ud3JpdGFibGUgPSAhMCksIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCBicChuLmtleSksIG4pO1xuICB9XG59XG5mdW5jdGlvbiBoMihlLCB0LCBvKSB7XG4gIHJldHVybiB0ICYmIG43KGUucHJvdG90eXBlLCB0KSwgbyAmJiBuNyhlLCBvKSwgT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIFwicHJvdG90eXBlXCIsIHsgd3JpdGFibGU6ICExIH0pLCBlO1xufVxuZnVuY3Rpb24gejEoZSwgdCwgbykge1xuICByZXR1cm4gKHQgPSBicCh0KSkgaW4gZSA/IE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCB0LCB7IHZhbHVlOiBvLCBlbnVtZXJhYmxlOiAhMCwgY29uZmlndXJhYmxlOiAhMCwgd3JpdGFibGU6ICEwIH0pIDogZVt0XSA9IG8sIGU7XG59XG5mdW5jdGlvbiAkMygpIHtcbiAgcmV0dXJuICQzID0gT2JqZWN0LmFzc2lnbiA/IE9iamVjdC5hc3NpZ24uYmluZCgpIDogZnVuY3Rpb24oZSkge1xuICAgIGZvciAodmFyIHQgPSAxOyB0IDwgYXJndW1lbnRzLmxlbmd0aDsgdCsrKSB7XG4gICAgICB2YXIgbyA9IGFyZ3VtZW50c1t0XTtcbiAgICAgIGZvciAodmFyIG4gaW4gbylcbiAgICAgICAgT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG8sIG4pICYmIChlW25dID0gb1tuXSk7XG4gICAgfVxuICAgIHJldHVybiBlO1xuICB9LCAkMy5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xufVxuZnVuY3Rpb24gTzIoZSwgdCkge1xuICBpZiAodHlwZW9mIHQgIT0gXCJmdW5jdGlvblwiICYmIHQgIT09IG51bGwpXG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlN1cGVyIGV4cHJlc3Npb24gbXVzdCBlaXRoZXIgYmUgbnVsbCBvciBhIGZ1bmN0aW9uXCIpO1xuICBlLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUodCAmJiB0LnByb3RvdHlwZSwgeyBjb25zdHJ1Y3RvcjogeyB2YWx1ZTogZSwgd3JpdGFibGU6ICEwLCBjb25maWd1cmFibGU6ICEwIH0gfSksIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCBcInByb3RvdHlwZVwiLCB7IHdyaXRhYmxlOiAhMSB9KSwgdCAmJiBfYShlLCB0KTtcbn1cbmZ1bmN0aW9uIGg0KGUpIHtcbiAgcmV0dXJuIGg0ID0gT2JqZWN0LnNldFByb3RvdHlwZU9mID8gT2JqZWN0LmdldFByb3RvdHlwZU9mLmJpbmQoKSA6IGZ1bmN0aW9uKHQpIHtcbiAgICByZXR1cm4gdC5fX3Byb3RvX18gfHwgT2JqZWN0LmdldFByb3RvdHlwZU9mKHQpO1xuICB9LCBoNChlKTtcbn1cbmZ1bmN0aW9uIF9hKGUsIHQpIHtcbiAgcmV0dXJuIF9hID0gT2JqZWN0LnNldFByb3RvdHlwZU9mID8gT2JqZWN0LnNldFByb3RvdHlwZU9mLmJpbmQoKSA6IGZ1bmN0aW9uKG8sIG4pIHtcbiAgICByZXR1cm4gby5fX3Byb3RvX18gPSBuLCBvO1xuICB9LCBfYShlLCB0KTtcbn1cbmZ1bmN0aW9uIGYxKGUpIHtcbiAgaWYgKGUgPT09IHZvaWQgMClcbiAgICB0aHJvdyBuZXcgUmVmZXJlbmNlRXJyb3IoXCJ0aGlzIGhhc24ndCBiZWVuIGluaXRpYWxpc2VkIC0gc3VwZXIoKSBoYXNuJ3QgYmVlbiBjYWxsZWRcIik7XG4gIHJldHVybiBlO1xufVxuZnVuY3Rpb24gZjIoZSkge1xuICB2YXIgdCA9IGZ1bmN0aW9uKCkge1xuICAgIGlmICh0eXBlb2YgUmVmbGVjdCA+IFwidVwiIHx8ICFSZWZsZWN0LmNvbnN0cnVjdCB8fCBSZWZsZWN0LmNvbnN0cnVjdC5zaGFtKVxuICAgICAgcmV0dXJuICExO1xuICAgIGlmICh0eXBlb2YgUHJveHkgPT0gXCJmdW5jdGlvblwiKVxuICAgICAgcmV0dXJuICEwO1xuICAgIHRyeSB7XG4gICAgICByZXR1cm4gQm9vbGVhbi5wcm90b3R5cGUudmFsdWVPZi5jYWxsKFJlZmxlY3QuY29uc3RydWN0KEJvb2xlYW4sIFtdLCBmdW5jdGlvbigpIHtcbiAgICAgIH0pKSwgITA7XG4gICAgfSBjYXRjaCB7XG4gICAgICByZXR1cm4gITE7XG4gICAgfVxuICB9KCk7XG4gIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICB2YXIgbywgbiA9IGg0KGUpO1xuICAgIGlmICh0KSB7XG4gICAgICB2YXIgciA9IGg0KHRoaXMpLmNvbnN0cnVjdG9yO1xuICAgICAgbyA9IFJlZmxlY3QuY29uc3RydWN0KG4sIGFyZ3VtZW50cywgcik7XG4gICAgfSBlbHNlXG4gICAgICBvID0gbi5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICAgIHJldHVybiBmdW5jdGlvbihpLCBhKSB7XG4gICAgICBpZiAoYSAmJiAodHlwZW9mIGEgPT0gXCJvYmplY3RcIiB8fCB0eXBlb2YgYSA9PSBcImZ1bmN0aW9uXCIpKVxuICAgICAgICByZXR1cm4gYTtcbiAgICAgIGlmIChhICE9PSB2b2lkIDApXG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJEZXJpdmVkIGNvbnN0cnVjdG9ycyBtYXkgb25seSByZXR1cm4gb2JqZWN0IG9yIHVuZGVmaW5lZFwiKTtcbiAgICAgIHJldHVybiBmMShpKTtcbiAgICB9KHRoaXMsIG8pO1xuICB9O1xufVxuZnVuY3Rpb24gQXIoZSkge1xuICByZXR1cm4gZnVuY3Rpb24odCkge1xuICAgIGlmIChBcnJheS5pc0FycmF5KHQpKVxuICAgICAgcmV0dXJuIEVpKHQpO1xuICB9KGUpIHx8IGZ1bmN0aW9uKHQpIHtcbiAgICBpZiAodHlwZW9mIFN5bWJvbCA8IFwidVwiICYmIHRbU3ltYm9sLml0ZXJhdG9yXSAhPSBudWxsIHx8IHRbXCJAQGl0ZXJhdG9yXCJdICE9IG51bGwpXG4gICAgICByZXR1cm4gQXJyYXkuZnJvbSh0KTtcbiAgfShlKSB8fCBmdW5jdGlvbih0LCBvKSB7XG4gICAgaWYgKHQpIHtcbiAgICAgIGlmICh0eXBlb2YgdCA9PSBcInN0cmluZ1wiKVxuICAgICAgICByZXR1cm4gRWkodCwgbyk7XG4gICAgICB2YXIgbiA9IE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbCh0KS5zbGljZSg4LCAtMSk7XG4gICAgICBpZiAobiA9PT0gXCJPYmplY3RcIiAmJiB0LmNvbnN0cnVjdG9yICYmIChuID0gdC5jb25zdHJ1Y3Rvci5uYW1lKSwgbiA9PT0gXCJNYXBcIiB8fCBuID09PSBcIlNldFwiKVxuICAgICAgICByZXR1cm4gQXJyYXkuZnJvbSh0KTtcbiAgICAgIGlmIChuID09PSBcIkFyZ3VtZW50c1wiIHx8IC9eKD86VWl8SSludCg/Ojh8MTZ8MzIpKD86Q2xhbXBlZCk/QXJyYXkkLy50ZXN0KG4pKVxuICAgICAgICByZXR1cm4gRWkodCwgbyk7XG4gICAgfVxuICB9KGUpIHx8IGZ1bmN0aW9uKCkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoYEludmFsaWQgYXR0ZW1wdCB0byBzcHJlYWQgbm9uLWl0ZXJhYmxlIGluc3RhbmNlLlxuSW4gb3JkZXIgdG8gYmUgaXRlcmFibGUsIG5vbi1hcnJheSBvYmplY3RzIG11c3QgaGF2ZSBhIFtTeW1ib2wuaXRlcmF0b3JdKCkgbWV0aG9kLmApO1xuICB9KCk7XG59XG5mdW5jdGlvbiBFaShlLCB0KSB7XG4gICh0ID09IG51bGwgfHwgdCA+IGUubGVuZ3RoKSAmJiAodCA9IGUubGVuZ3RoKTtcbiAgZm9yICh2YXIgbyA9IDAsIG4gPSBuZXcgQXJyYXkodCk7IG8gPCB0OyBvKyspXG4gICAgbltvXSA9IGVbb107XG4gIHJldHVybiBuO1xufVxuZnVuY3Rpb24gYnAoZSkge1xuICB2YXIgdCA9IGZ1bmN0aW9uKG8sIG4pIHtcbiAgICBpZiAodHlwZW9mIG8gIT0gXCJvYmplY3RcIiB8fCBvID09PSBudWxsKVxuICAgICAgcmV0dXJuIG87XG4gICAgdmFyIHIgPSBvW1N5bWJvbC50b1ByaW1pdGl2ZV07XG4gICAgaWYgKHIgIT09IHZvaWQgMCkge1xuICAgICAgdmFyIGkgPSByLmNhbGwobywgbiB8fCBcImRlZmF1bHRcIik7XG4gICAgICBpZiAodHlwZW9mIGkgIT0gXCJvYmplY3RcIilcbiAgICAgICAgcmV0dXJuIGk7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS5cIik7XG4gICAgfVxuICAgIHJldHVybiAobiA9PT0gXCJzdHJpbmdcIiA/IFN0cmluZyA6IE51bWJlcikobyk7XG4gIH0oZSwgXCJzdHJpbmdcIik7XG4gIHJldHVybiB0eXBlb2YgdCA9PSBcInN5bWJvbFwiID8gdCA6IFN0cmluZyh0KTtcbn1cbnZhciBpNyA9IGZ1bmN0aW9uKGUsIHQpIHtcbiAgc3dpdGNoIChlKSB7XG4gICAgY2FzZSBcIlBcIjpcbiAgICAgIHJldHVybiB0LmRhdGUoeyB3aWR0aDogXCJzaG9ydFwiIH0pO1xuICAgIGNhc2UgXCJQUFwiOlxuICAgICAgcmV0dXJuIHQuZGF0ZSh7IHdpZHRoOiBcIm1lZGl1bVwiIH0pO1xuICAgIGNhc2UgXCJQUFBcIjpcbiAgICAgIHJldHVybiB0LmRhdGUoeyB3aWR0aDogXCJsb25nXCIgfSk7XG4gICAgZGVmYXVsdDpcbiAgICAgIHJldHVybiB0LmRhdGUoeyB3aWR0aDogXCJmdWxsXCIgfSk7XG4gIH1cbn0sIGE3ID0gZnVuY3Rpb24oZSwgdCkge1xuICBzd2l0Y2ggKGUpIHtcbiAgICBjYXNlIFwicFwiOlxuICAgICAgcmV0dXJuIHQudGltZSh7IHdpZHRoOiBcInNob3J0XCIgfSk7XG4gICAgY2FzZSBcInBwXCI6XG4gICAgICByZXR1cm4gdC50aW1lKHsgd2lkdGg6IFwibWVkaXVtXCIgfSk7XG4gICAgY2FzZSBcInBwcFwiOlxuICAgICAgcmV0dXJuIHQudGltZSh7IHdpZHRoOiBcImxvbmdcIiB9KTtcbiAgICBkZWZhdWx0OlxuICAgICAgcmV0dXJuIHQudGltZSh7IHdpZHRoOiBcImZ1bGxcIiB9KTtcbiAgfVxufSwgaVcgPSB7IHA6IGE3LCBQOiBmdW5jdGlvbihlLCB0KSB7XG4gIHZhciBvLCBuID0gZS5tYXRjaCgvKFArKShwKyk/LykgfHwgW10sIHIgPSBuWzFdLCBpID0gblsyXTtcbiAgaWYgKCFpKVxuICAgIHJldHVybiBpNyhlLCB0KTtcbiAgc3dpdGNoIChyKSB7XG4gICAgY2FzZSBcIlBcIjpcbiAgICAgIG8gPSB0LmRhdGVUaW1lKHsgd2lkdGg6IFwic2hvcnRcIiB9KTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgXCJQUFwiOlxuICAgICAgbyA9IHQuZGF0ZVRpbWUoeyB3aWR0aDogXCJtZWRpdW1cIiB9KTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgXCJQUFBcIjpcbiAgICAgIG8gPSB0LmRhdGVUaW1lKHsgd2lkdGg6IFwibG9uZ1wiIH0pO1xuICAgICAgYnJlYWs7XG4gICAgZGVmYXVsdDpcbiAgICAgIG8gPSB0LmRhdGVUaW1lKHsgd2lkdGg6IFwiZnVsbFwiIH0pO1xuICB9XG4gIHJldHVybiBvLnJlcGxhY2UoXCJ7e2RhdGV9fVwiLCBpNyhyLCB0KSkucmVwbGFjZShcInt7dGltZX19XCIsIGE3KGksIHQpKTtcbn0gfSwgS28gPSAxMiwgYVcgPSAvUCtwK3xQK3xwK3wnJ3wnKCcnfFteJ10pKygnfCQpfC4vZztcbmZ1bmN0aW9uIEcwKGUpIHtcbiAgdmFyIHQgPSBlID8gdHlwZW9mIGUgPT0gXCJzdHJpbmdcIiB8fCBlIGluc3RhbmNlb2YgU3RyaW5nID8gQ3goZSkgOiBqMShlKSA6IC8qIEBfX1BVUkVfXyAqLyBuZXcgRGF0ZSgpO1xuICByZXR1cm4gTHQodCkgPyB0IDogbnVsbDtcbn1cbmZ1bmN0aW9uIEx0KGUsIHQpIHtcbiAgcmV0dXJuIHQgPSB0IHx8IC8qIEBfX1BVUkVfXyAqLyBuZXcgRGF0ZShcIjEvMS8xMDAwXCIpLCBscihlKSAmJiAhdnQoZSwgdCk7XG59XG5mdW5jdGlvbiBlMihlLCB0LCBvKSB7XG4gIGlmIChvID09PSBcImVuXCIpXG4gICAgcmV0dXJuIGRyKGUsIHQsIHsgYXdhcmVPZlVuaWNvZGVUb2tlbnM6ICEwIH0pO1xuICB2YXIgbiA9IFN0KG8pO1xuICByZXR1cm4gbyAmJiAhbiAmJiBjb25zb2xlLndhcm4oJ0EgbG9jYWxlIG9iamVjdCB3YXMgbm90IGZvdW5kIGZvciB0aGUgcHJvdmlkZWQgc3RyaW5nIFtcIicuY29uY2F0KG8sICdcIl0uJykpLCAhbiAmJiBjMygpICYmIFN0KGMzKCkpICYmIChuID0gU3QoYzMoKSkpLCBkcihlLCB0LCB7IGxvY2FsZTogbiB8fCBudWxsLCBhd2FyZU9mVW5pY29kZVRva2VuczogITAgfSk7XG59XG5mdW5jdGlvbiBCZShlLCB0KSB7XG4gIHZhciBvID0gdC5kYXRlRm9ybWF0LCBuID0gdC5sb2NhbGU7XG4gIHJldHVybiBlICYmIGUyKGUsIEFycmF5LmlzQXJyYXkobykgPyBvWzBdIDogbywgbikgfHwgXCJcIjtcbn1cbmZ1bmN0aW9uIHM3KGUsIHQpIHtcbiAgdmFyIG8gPSB0LmhvdXIsIG4gPSBvID09PSB2b2lkIDAgPyAwIDogbywgciA9IHQubWludXRlLCBpID0gciA9PT0gdm9pZCAwID8gMCA6IHIsIGEgPSB0LnNlY29uZDtcbiAgcmV0dXJuIFZuKFBuKER4KGUsIGEgPT09IHZvaWQgMCA/IDAgOiBhKSwgaSksIG4pO1xufVxuZnVuY3Rpb24gWGUoZSwgdCwgbykge1xuICB2YXIgbiA9IFN0KHQgfHwgYzMoKSk7XG4gIHJldHVybiBVbChlLCB7IGxvY2FsZTogbiwgd2Vla1N0YXJ0c09uOiBvIH0pO1xufVxuZnVuY3Rpb24gQnQoZSkge1xuICByZXR1cm4gUWwoZSk7XG59XG5mdW5jdGlvbiBYbyhlKSB7XG4gIHJldHVybiBabChlKTtcbn1cbmZ1bmN0aW9uIGM3KGUpIHtcbiAgcmV0dXJuIFlhKGUpO1xufVxuZnVuY3Rpb24gbDcoKSB7XG4gIHJldHVybiBWZShHMCgpKTtcbn1cbmZ1bmN0aW9uIHF0KGUsIHQpIHtcbiAgcmV0dXJuIGUgJiYgdCA/IGZ4KGUsIHQpIDogIWUgJiYgIXQ7XG59XG5mdW5jdGlvbiBmZShlLCB0KSB7XG4gIHJldHVybiBlICYmIHQgPyBoeChlLCB0KSA6ICFlICYmICF0O1xufVxuZnVuY3Rpb24gTzQoZSwgdCkge1xuICByZXR1cm4gZSAmJiB0ID8gT3goZSwgdCkgOiAhZSAmJiAhdDtcbn1cbmZ1bmN0aW9uIFEwKGUsIHQpIHtcbiAgcmV0dXJuIGUgJiYgdCA/IGV5KGUsIHQpIDogIWUgJiYgIXQ7XG59XG5mdW5jdGlvbiBpMyhlLCB0KSB7XG4gIHJldHVybiBlICYmIHQgPyBndyhlLCB0KSA6ICFlICYmICF0O1xufVxuZnVuY3Rpb24gRm4oZSwgdCwgbykge1xuICB2YXIgbiwgciA9IFZlKHQpLCBpID0gYjQobyk7XG4gIHRyeSB7XG4gICAgbiA9IGJyKGUsIHsgc3RhcnQ6IHIsIGVuZDogaSB9KTtcbiAgfSBjYXRjaCB7XG4gICAgbiA9ICExO1xuICB9XG4gIHJldHVybiBuO1xufVxuZnVuY3Rpb24gYzMoKSB7XG4gIHJldHVybiAodHlwZW9mIHdpbmRvdyA8IFwidVwiID8gd2luZG93IDogZ2xvYmFsVGhpcykuX19sb2NhbGVJZF9fO1xufVxuZnVuY3Rpb24gU3QoZSkge1xuICBpZiAodHlwZW9mIGUgPT0gXCJzdHJpbmdcIikge1xuICAgIHZhciB0ID0gdHlwZW9mIHdpbmRvdyA8IFwidVwiID8gd2luZG93IDogZ2xvYmFsVGhpcztcbiAgICByZXR1cm4gdC5fX2xvY2FsZURhdGFfXyA/IHQuX19sb2NhbGVEYXRhX19bZV0gOiBudWxsO1xuICB9XG4gIHJldHVybiBlO1xufVxuZnVuY3Rpb24gbDYoZSwgdCkge1xuICByZXR1cm4gZTIoVzIoRzAoKSwgZSksIFwiTExMTFwiLCB0KTtcbn1cbmZ1bmN0aW9uIE1wKGUsIHQpIHtcbiAgcmV0dXJuIGUyKFcyKEcwKCksIGUpLCBcIkxMTFwiLCB0KTtcbn1cbmZ1bmN0aW9uIFU0KGUpIHtcbiAgdmFyIHQgPSBhcmd1bWVudHMubGVuZ3RoID4gMSAmJiBhcmd1bWVudHNbMV0gIT09IHZvaWQgMCA/IGFyZ3VtZW50c1sxXSA6IHt9LCBvID0gdC5taW5EYXRlLCBuID0gdC5tYXhEYXRlLCByID0gdC5leGNsdWRlRGF0ZXMsIGkgPSB0LmV4Y2x1ZGVEYXRlSW50ZXJ2YWxzLCBhID0gdC5pbmNsdWRlRGF0ZXMsIHMgPSB0LmluY2x1ZGVEYXRlSW50ZXJ2YWxzLCBsID0gdC5maWx0ZXJEYXRlO1xuICByZXR1cm4gWTQoZSwgeyBtaW5EYXRlOiBvLCBtYXhEYXRlOiBuIH0pIHx8IHIgJiYgci5zb21lKGZ1bmN0aW9uKHApIHtcbiAgICByZXR1cm4gUTAoZSwgcCk7XG4gIH0pIHx8IGkgJiYgaS5zb21lKGZ1bmN0aW9uKHApIHtcbiAgICB2YXIgZCA9IHAuc3RhcnQsIGIgPSBwLmVuZDtcbiAgICByZXR1cm4gYnIoZSwgeyBzdGFydDogZCwgZW5kOiBiIH0pO1xuICB9KSB8fCBhICYmICFhLnNvbWUoZnVuY3Rpb24ocCkge1xuICAgIHJldHVybiBRMChlLCBwKTtcbiAgfSkgfHwgcyAmJiAhcy5zb21lKGZ1bmN0aW9uKHApIHtcbiAgICB2YXIgZCA9IHAuc3RhcnQsIGIgPSBwLmVuZDtcbiAgICByZXR1cm4gYnIoZSwgeyBzdGFydDogZCwgZW5kOiBiIH0pO1xuICB9KSB8fCBsICYmICFsKEcwKGUpKSB8fCAhMTtcbn1cbmZ1bmN0aW9uIHA2KGUpIHtcbiAgdmFyIHQgPSBhcmd1bWVudHMubGVuZ3RoID4gMSAmJiBhcmd1bWVudHNbMV0gIT09IHZvaWQgMCA/IGFyZ3VtZW50c1sxXSA6IHt9LCBvID0gdC5leGNsdWRlRGF0ZXMsIG4gPSB0LmV4Y2x1ZGVEYXRlSW50ZXJ2YWxzO1xuICByZXR1cm4gbiAmJiBuLmxlbmd0aCA+IDAgPyBuLnNvbWUoZnVuY3Rpb24ocikge1xuICAgIHZhciBpID0gci5zdGFydCwgYSA9IHIuZW5kO1xuICAgIHJldHVybiBicihlLCB7IHN0YXJ0OiBpLCBlbmQ6IGEgfSk7XG4gIH0pIDogbyAmJiBvLnNvbWUoZnVuY3Rpb24ocikge1xuICAgIHJldHVybiBRMChlLCByKTtcbiAgfSkgfHwgITE7XG59XG5mdW5jdGlvbiBBcChlKSB7XG4gIHZhciB0ID0gYXJndW1lbnRzLmxlbmd0aCA+IDEgJiYgYXJndW1lbnRzWzFdICE9PSB2b2lkIDAgPyBhcmd1bWVudHNbMV0gOiB7fSwgbyA9IHQubWluRGF0ZSwgbiA9IHQubWF4RGF0ZSwgciA9IHQuZXhjbHVkZURhdGVzLCBpID0gdC5pbmNsdWRlRGF0ZXMsIGEgPSB0LmZpbHRlckRhdGU7XG4gIHJldHVybiBZNChlLCB7IG1pbkRhdGU6IFFsKG8pLCBtYXhEYXRlOiBHbChuKSB9KSB8fCByICYmIHIuc29tZShmdW5jdGlvbihzKSB7XG4gICAgcmV0dXJuIGZlKGUsIHMpO1xuICB9KSB8fCBpICYmICFpLnNvbWUoZnVuY3Rpb24ocykge1xuICAgIHJldHVybiBmZShlLCBzKTtcbiAgfSkgfHwgYSAmJiAhYShHMChlKSkgfHwgITE7XG59XG5mdW5jdGlvbiBraShlLCB0LCBvLCBuKSB7XG4gIHZhciByID0gTDAoZSksIGkgPSBnMihlKSwgYSA9IEwwKHQpLCBzID0gZzIodCksIGwgPSBMMChuKTtcbiAgcmV0dXJuIHIgPT09IGEgJiYgciA9PT0gbCA/IGkgPD0gbyAmJiBvIDw9IHMgOiByIDwgYSA/IGwgPT09IHIgJiYgaSA8PSBvIHx8IGwgPT09IGEgJiYgcyA+PSBvIHx8IGwgPCBhICYmIGwgPiByIDogdm9pZCAwO1xufVxuZnVuY3Rpb24gc1coZSkge1xuICB2YXIgdCA9IGFyZ3VtZW50cy5sZW5ndGggPiAxICYmIGFyZ3VtZW50c1sxXSAhPT0gdm9pZCAwID8gYXJndW1lbnRzWzFdIDoge30sIG8gPSB0Lm1pbkRhdGUsIG4gPSB0Lm1heERhdGUsIHIgPSB0LmV4Y2x1ZGVEYXRlcywgaSA9IHQuaW5jbHVkZURhdGVzLCBhID0gdC5maWx0ZXJEYXRlO1xuICByZXR1cm4gWTQoZSwgeyBtaW5EYXRlOiBvLCBtYXhEYXRlOiBuIH0pIHx8IHIgJiYgci5zb21lKGZ1bmN0aW9uKHMpIHtcbiAgICByZXR1cm4gTzQoZSwgcyk7XG4gIH0pIHx8IGkgJiYgIWkuc29tZShmdW5jdGlvbihzKSB7XG4gICAgcmV0dXJuIE80KGUsIHMpO1xuICB9KSB8fCBhICYmICFhKEcwKGUpKSB8fCAhMTtcbn1cbmZ1bmN0aW9uIE5pKGUsIHQsIG8pIHtcbiAgaWYgKCFscih0KSB8fCAhbHIobykpXG4gICAgcmV0dXJuICExO1xuICB2YXIgbiA9IEwwKHQpLCByID0gTDAobyk7XG4gIHJldHVybiBuIDw9IGUgJiYgciA+PSBlO1xufVxuZnVuY3Rpb24gdXAoZSkge1xuICB2YXIgdCA9IGFyZ3VtZW50cy5sZW5ndGggPiAxICYmIGFyZ3VtZW50c1sxXSAhPT0gdm9pZCAwID8gYXJndW1lbnRzWzFdIDoge30sIG8gPSB0Lm1pbkRhdGUsIG4gPSB0Lm1heERhdGUsIHIgPSB0LmV4Y2x1ZGVEYXRlcywgaSA9IHQuaW5jbHVkZURhdGVzLCBhID0gdC5maWx0ZXJEYXRlLCBzID0gbmV3IERhdGUoZSwgMCwgMSk7XG4gIHJldHVybiBZNChzLCB7IG1pbkRhdGU6IFpsKG8pLCBtYXhEYXRlOiBzeShuKSB9KSB8fCByICYmIHIuc29tZShmdW5jdGlvbihsKSB7XG4gICAgcmV0dXJuIHF0KHMsIGwpO1xuICB9KSB8fCBpICYmICFpLnNvbWUoZnVuY3Rpb24obCkge1xuICAgIHJldHVybiBxdChzLCBsKTtcbiAgfSkgfHwgYSAmJiAhYShHMChzKSkgfHwgITE7XG59XG5mdW5jdGlvbiBUaShlLCB0LCBvLCBuKSB7XG4gIHZhciByID0gTDAoZSksIGkgPSBTMyhlKSwgYSA9IEwwKHQpLCBzID0gUzModCksIGwgPSBMMChuKTtcbiAgcmV0dXJuIHIgPT09IGEgJiYgciA9PT0gbCA/IGkgPD0gbyAmJiBvIDw9IHMgOiByIDwgYSA/IGwgPT09IHIgJiYgaSA8PSBvIHx8IGwgPT09IGEgJiYgcyA+PSBvIHx8IGwgPCBhICYmIGwgPiByIDogdm9pZCAwO1xufVxuZnVuY3Rpb24gWTQoZSkge1xuICB2YXIgdCA9IGFyZ3VtZW50cy5sZW5ndGggPiAxICYmIGFyZ3VtZW50c1sxXSAhPT0gdm9pZCAwID8gYXJndW1lbnRzWzFdIDoge30sIG8gPSB0Lm1pbkRhdGUsIG4gPSB0Lm1heERhdGU7XG4gIHJldHVybiBvICYmIGw0KGUsIG8pIDwgMCB8fCBuICYmIGw0KGUsIG4pID4gMDtcbn1cbmZ1bmN0aW9uIHA3KGUsIHQpIHtcbiAgcmV0dXJuIHQuc29tZShmdW5jdGlvbihvKSB7XG4gICAgcmV0dXJuIFBlKG8pID09PSBQZShlKSAmJiBGZShvKSA9PT0gRmUoZSk7XG4gIH0pO1xufVxuZnVuY3Rpb24gZDcoZSkge1xuICB2YXIgdCA9IGFyZ3VtZW50cy5sZW5ndGggPiAxICYmIGFyZ3VtZW50c1sxXSAhPT0gdm9pZCAwID8gYXJndW1lbnRzWzFdIDoge30sIG8gPSB0LmV4Y2x1ZGVUaW1lcywgbiA9IHQuaW5jbHVkZVRpbWVzLCByID0gdC5maWx0ZXJUaW1lO1xuICByZXR1cm4gbyAmJiBwNyhlLCBvKSB8fCBuICYmICFwNyhlLCBuKSB8fCByICYmICFyKGUpIHx8ICExO1xufVxuZnVuY3Rpb24gYjcoZSwgdCkge1xuICB2YXIgbyA9IHQubWluVGltZSwgbiA9IHQubWF4VGltZTtcbiAgaWYgKCFvIHx8ICFuKVxuICAgIHRocm93IG5ldyBFcnJvcihcIkJvdGggbWluVGltZSBhbmQgbWF4VGltZSBwcm9wcyByZXF1aXJlZFwiKTtcbiAgdmFyIHIsIGkgPSBHMCgpLCBhID0gVm4oUG4oaSwgRmUoZSkpLCBQZShlKSksIHMgPSBWbihQbihpLCBGZShvKSksIFBlKG8pKSwgbCA9IFZuKFBuKGksIEZlKG4pKSwgUGUobikpO1xuICB0cnkge1xuICAgIHIgPSAhYnIoYSwgeyBzdGFydDogcywgZW5kOiBsIH0pO1xuICB9IGNhdGNoIHtcbiAgICByID0gITE7XG4gIH1cbiAgcmV0dXJuIHI7XG59XG5mdW5jdGlvbiBNNyhlKSB7XG4gIHZhciB0ID0gYXJndW1lbnRzLmxlbmd0aCA+IDEgJiYgYXJndW1lbnRzWzFdICE9PSB2b2lkIDAgPyBhcmd1bWVudHNbMV0gOiB7fSwgbyA9IHQubWluRGF0ZSwgbiA9IHQuaW5jbHVkZURhdGVzLCByID0gXzMoZSwgMSk7XG4gIHJldHVybiBvICYmIHByKG8sIHIpID4gMCB8fCBuICYmIG4uZXZlcnkoZnVuY3Rpb24oaSkge1xuICAgIHJldHVybiBwcihpLCByKSA+IDA7XG4gIH0pIHx8ICExO1xufVxuZnVuY3Rpb24gQTcoZSkge1xuICB2YXIgdCA9IGFyZ3VtZW50cy5sZW5ndGggPiAxICYmIGFyZ3VtZW50c1sxXSAhPT0gdm9pZCAwID8gYXJndW1lbnRzWzFdIDoge30sIG8gPSB0Lm1heERhdGUsIG4gPSB0LmluY2x1ZGVEYXRlcywgciA9IHZlKGUsIDEpO1xuICByZXR1cm4gbyAmJiBwcihyLCBvKSA+IDAgfHwgbiAmJiBuLmV2ZXJ5KGZ1bmN0aW9uKGkpIHtcbiAgICByZXR1cm4gcHIociwgaSkgPiAwO1xuICB9KSB8fCAhMTtcbn1cbmZ1bmN0aW9uIHU3KGUpIHtcbiAgdmFyIHQgPSBhcmd1bWVudHMubGVuZ3RoID4gMSAmJiBhcmd1bWVudHNbMV0gIT09IHZvaWQgMCA/IGFyZ3VtZW50c1sxXSA6IHt9LCBvID0gdC5taW5EYXRlLCBuID0gdC5pbmNsdWRlRGF0ZXMsIHIgPSBNcihlLCAxKTtcbiAgcmV0dXJuIG8gJiYgZDQobywgcikgPiAwIHx8IG4gJiYgbi5ldmVyeShmdW5jdGlvbihpKSB7XG4gICAgcmV0dXJuIGQ0KGksIHIpID4gMDtcbiAgfSkgfHwgITE7XG59XG5mdW5jdGlvbiB6NyhlKSB7XG4gIHZhciB0ID0gYXJndW1lbnRzLmxlbmd0aCA+IDEgJiYgYXJndW1lbnRzWzFdICE9PSB2b2lkIDAgPyBhcmd1bWVudHNbMV0gOiB7fSwgbyA9IHQubWF4RGF0ZSwgbiA9IHQuaW5jbHVkZURhdGVzLCByID0gSzMoZSwgMSk7XG4gIHJldHVybiBvICYmIGQ0KHIsIG8pID4gMCB8fCBuICYmIG4uZXZlcnkoZnVuY3Rpb24oaSkge1xuICAgIHJldHVybiBkNChyLCBpKSA+IDA7XG4gIH0pIHx8ICExO1xufVxuZnVuY3Rpb24genAoZSkge1xuICB2YXIgdCA9IGUubWluRGF0ZSwgbyA9IGUuaW5jbHVkZURhdGVzO1xuICBpZiAobyAmJiB0KSB7XG4gICAgdmFyIG4gPSBvLmZpbHRlcihmdW5jdGlvbihyKSB7XG4gICAgICByZXR1cm4gbDQociwgdCkgPj0gMDtcbiAgICB9KTtcbiAgICByZXR1cm4gRTgobik7XG4gIH1cbiAgcmV0dXJuIG8gPyBFOChvKSA6IHQ7XG59XG5mdW5jdGlvbiBocChlKSB7XG4gIHZhciB0ID0gZS5tYXhEYXRlLCBvID0gZS5pbmNsdWRlRGF0ZXM7XG4gIGlmIChvICYmIHQpIHtcbiAgICB2YXIgbiA9IG8uZmlsdGVyKGZ1bmN0aW9uKHIpIHtcbiAgICAgIHJldHVybiBsNChyLCB0KSA8PSAwO1xuICAgIH0pO1xuICAgIHJldHVybiBTOChuKTtcbiAgfVxuICByZXR1cm4gbyA/IFM4KG8pIDogdDtcbn1cbmZ1bmN0aW9uIGg3KCkge1xuICBmb3IgKHZhciBlID0gYXJndW1lbnRzLmxlbmd0aCA+IDAgJiYgYXJndW1lbnRzWzBdICE9PSB2b2lkIDAgPyBhcmd1bWVudHNbMF0gOiBbXSwgdCA9IGFyZ3VtZW50cy5sZW5ndGggPiAxICYmIGFyZ3VtZW50c1sxXSAhPT0gdm9pZCAwID8gYXJndW1lbnRzWzFdIDogXCJyZWFjdC1kYXRlcGlja2VyX19kYXktLWhpZ2hsaWdodGVkXCIsIG8gPSAvKiBAX19QVVJFX18gKi8gbmV3IE1hcCgpLCBuID0gMCwgciA9IGUubGVuZ3RoOyBuIDwgcjsgbisrKSB7XG4gICAgdmFyIGkgPSBlW25dO1xuICAgIGlmIChGNChpKSkge1xuICAgICAgdmFyIGEgPSBlMihpLCBcIk1NLmRkLnl5eXlcIiksIHMgPSBvLmdldChhKSB8fCBbXTtcbiAgICAgIHMuaW5jbHVkZXModCkgfHwgKHMucHVzaCh0KSwgby5zZXQoYSwgcykpO1xuICAgIH0gZWxzZSBpZiAoSmEoaSkgPT09IFwib2JqZWN0XCIpIHtcbiAgICAgIHZhciBsID0gT2JqZWN0LmtleXMoaSksIHAgPSBsWzBdLCBkID0gaVtsWzBdXTtcbiAgICAgIGlmICh0eXBlb2YgcCA9PSBcInN0cmluZ1wiICYmIGQuY29uc3RydWN0b3IgPT09IEFycmF5KVxuICAgICAgICBmb3IgKHZhciBiID0gMCwgTSA9IGQubGVuZ3RoOyBiIDwgTTsgYisrKSB7XG4gICAgICAgICAgdmFyIHUgPSBlMihkW2JdLCBcIk1NLmRkLnl5eXlcIiksIEEgPSBvLmdldCh1KSB8fCBbXTtcbiAgICAgICAgICBBLmluY2x1ZGVzKHApIHx8IChBLnB1c2gocCksIG8uc2V0KHUsIEEpKTtcbiAgICAgICAgfVxuICAgIH1cbiAgfVxuICByZXR1cm4gbztcbn1cbmZ1bmN0aW9uIGNXKCkge1xuICB2YXIgZSA9IGFyZ3VtZW50cy5sZW5ndGggPiAwICYmIGFyZ3VtZW50c1swXSAhPT0gdm9pZCAwID8gYXJndW1lbnRzWzBdIDogW10sIHQgPSBhcmd1bWVudHMubGVuZ3RoID4gMSAmJiBhcmd1bWVudHNbMV0gIT09IHZvaWQgMCA/IGFyZ3VtZW50c1sxXSA6IFwicmVhY3QtZGF0ZXBpY2tlcl9fZGF5LS1ob2xpZGF5c1wiLCBvID0gLyogQF9fUFVSRV9fICovIG5ldyBNYXAoKTtcbiAgcmV0dXJuIGUuZm9yRWFjaChmdW5jdGlvbihuKSB7XG4gICAgdmFyIHIgPSBuLmRhdGUsIGkgPSBuLmhvbGlkYXlOYW1lO1xuICAgIGlmIChGNChyKSkge1xuICAgICAgdmFyIGEgPSBlMihyLCBcIk1NLmRkLnl5eXlcIiksIHMgPSBvLmdldChhKSB8fCB7fTtcbiAgICAgIGlmICghKFwiY2xhc3NOYW1lXCIgaW4gcykgfHwgcy5jbGFzc05hbWUgIT09IHQgfHwgKGwgPSBzLmhvbGlkYXlOYW1lcywgcCA9IFtpXSwgbC5sZW5ndGggIT09IHAubGVuZ3RoIHx8ICFsLmV2ZXJ5KGZ1bmN0aW9uKGIsIE0pIHtcbiAgICAgICAgcmV0dXJuIGIgPT09IHBbTV07XG4gICAgICB9KSkpIHtcbiAgICAgICAgdmFyIGwsIHA7XG4gICAgICAgIHMuY2xhc3NOYW1lID0gdDtcbiAgICAgICAgdmFyIGQgPSBzLmhvbGlkYXlOYW1lcztcbiAgICAgICAgcy5ob2xpZGF5TmFtZXMgPSBkID8gW10uY29uY2F0KEFyKGQpLCBbaV0pIDogW2ldLCBvLnNldChhLCBzKTtcbiAgICAgIH1cbiAgICB9XG4gIH0pLCBvO1xufVxuZnVuY3Rpb24gbFcoZSwgdCwgbywgbiwgcikge1xuICBmb3IgKHZhciBpID0gci5sZW5ndGgsIGEgPSBbXSwgcyA9IDA7IHMgPCBpOyBzKyspIHtcbiAgICB2YXIgbCA9IFVhKFFxKGUsIFBlKHJbc10pKSwgRmUocltzXSkpLCBwID0gVWEoZSwgKG8gKyAxKSAqIG4pO1xuICAgIER0KGwsIHQpICYmIHZ0KGwsIHApICYmIGEucHVzaChyW3NdKTtcbiAgfVxuICByZXR1cm4gYTtcbn1cbmZ1bmN0aW9uIE83KGUpIHtcbiAgcmV0dXJuIGUgPCAxMCA/IFwiMFwiLmNvbmNhdChlKSA6IFwiXCIuY29uY2F0KGUpO1xufVxuZnVuY3Rpb24gRTMoZSkge1xuICB2YXIgdCA9IGFyZ3VtZW50cy5sZW5ndGggPiAxICYmIGFyZ3VtZW50c1sxXSAhPT0gdm9pZCAwID8gYXJndW1lbnRzWzFdIDogS28sIG8gPSBNYXRoLmNlaWwoTDAoZSkgLyB0KSAqIHQ7XG4gIHJldHVybiB7IHN0YXJ0UGVyaW9kOiBvIC0gKHQgLSAxKSwgZW5kUGVyaW9kOiBvIH07XG59XG5mdW5jdGlvbiBmNyhlKSB7XG4gIHZhciB0ID0gZS5nZXRTZWNvbmRzKCksIG8gPSBlLmdldE1pbGxpc2Vjb25kcygpO1xuICByZXR1cm4gajEoZS5nZXRUaW1lKCkgLSAxZTMgKiB0IC0gbyk7XG59XG5mdW5jdGlvbiBwVyhlLCB0LCBvLCBuKSB7XG4gIGZvciAodmFyIHIgPSBbXSwgaSA9IDA7IGkgPCAyICogdCArIDE7IGkrKykge1xuICAgIHZhciBhID0gZSArIHQgLSBpLCBzID0gITA7XG4gICAgbyAmJiAocyA9IEwwKG8pIDw9IGEpLCBuICYmIHMgJiYgKHMgPSBMMChuKSA+PSBhKSwgcyAmJiByLnB1c2goYSk7XG4gIH1cbiAgcmV0dXJuIHI7XG59XG52YXIgZFcgPSBYNChmdW5jdGlvbihlKSB7XG4gIE8yKG8sIG0xLkNvbXBvbmVudCk7XG4gIHZhciB0ID0gZjIobyk7XG4gIGZ1bmN0aW9uIG8obikge1xuICAgIHZhciByO1xuICAgIHoyKHRoaXMsIG8pLCB6MShmMShyID0gdC5jYWxsKHRoaXMsIG4pKSwgXCJyZW5kZXJPcHRpb25zXCIsIGZ1bmN0aW9uKCkge1xuICAgICAgdmFyIGwgPSByLnByb3BzLnllYXIsIHAgPSByLnN0YXRlLnllYXJzTGlzdC5tYXAoZnVuY3Rpb24oTSkge1xuICAgICAgICByZXR1cm4gbTEuY3JlYXRlRWxlbWVudChcImRpdlwiLCB7IGNsYXNzTmFtZTogbCA9PT0gTSA/IFwicmVhY3QtZGF0ZXBpY2tlcl9feWVhci1vcHRpb24gcmVhY3QtZGF0ZXBpY2tlcl9feWVhci1vcHRpb24tLXNlbGVjdGVkX3llYXJcIiA6IFwicmVhY3QtZGF0ZXBpY2tlcl9feWVhci1vcHRpb25cIiwga2V5OiBNLCBvbkNsaWNrOiByLm9uQ2hhbmdlLmJpbmQoZjEociksIE0pLCBcImFyaWEtc2VsZWN0ZWRcIjogbCA9PT0gTSA/IFwidHJ1ZVwiIDogdm9pZCAwIH0sIGwgPT09IE0gPyBtMS5jcmVhdGVFbGVtZW50KFwic3BhblwiLCB7IGNsYXNzTmFtZTogXCJyZWFjdC1kYXRlcGlja2VyX195ZWFyLW9wdGlvbi0tc2VsZWN0ZWRcIiB9LCBcIuKck1wiKSA6IFwiXCIsIE0pO1xuICAgICAgfSksIGQgPSByLnByb3BzLm1pbkRhdGUgPyBMMChyLnByb3BzLm1pbkRhdGUpIDogbnVsbCwgYiA9IHIucHJvcHMubWF4RGF0ZSA/IEwwKHIucHJvcHMubWF4RGF0ZSkgOiBudWxsO1xuICAgICAgcmV0dXJuIGIgJiYgci5zdGF0ZS55ZWFyc0xpc3QuZmluZChmdW5jdGlvbihNKSB7XG4gICAgICAgIHJldHVybiBNID09PSBiO1xuICAgICAgfSkgfHwgcC51bnNoaWZ0KG0xLmNyZWF0ZUVsZW1lbnQoXCJkaXZcIiwgeyBjbGFzc05hbWU6IFwicmVhY3QtZGF0ZXBpY2tlcl9feWVhci1vcHRpb25cIiwga2V5OiBcInVwY29taW5nXCIsIG9uQ2xpY2s6IHIuaW5jcmVtZW50WWVhcnMgfSwgbTEuY3JlYXRlRWxlbWVudChcImFcIiwgeyBjbGFzc05hbWU6IFwicmVhY3QtZGF0ZXBpY2tlcl9fbmF2aWdhdGlvbiByZWFjdC1kYXRlcGlja2VyX19uYXZpZ2F0aW9uLS15ZWFycyByZWFjdC1kYXRlcGlja2VyX19uYXZpZ2F0aW9uLS15ZWFycy11cGNvbWluZ1wiIH0pKSksIGQgJiYgci5zdGF0ZS55ZWFyc0xpc3QuZmluZChmdW5jdGlvbihNKSB7XG4gICAgICAgIHJldHVybiBNID09PSBkO1xuICAgICAgfSkgfHwgcC5wdXNoKG0xLmNyZWF0ZUVsZW1lbnQoXCJkaXZcIiwgeyBjbGFzc05hbWU6IFwicmVhY3QtZGF0ZXBpY2tlcl9feWVhci1vcHRpb25cIiwga2V5OiBcInByZXZpb3VzXCIsIG9uQ2xpY2s6IHIuZGVjcmVtZW50WWVhcnMgfSwgbTEuY3JlYXRlRWxlbWVudChcImFcIiwgeyBjbGFzc05hbWU6IFwicmVhY3QtZGF0ZXBpY2tlcl9fbmF2aWdhdGlvbiByZWFjdC1kYXRlcGlja2VyX19uYXZpZ2F0aW9uLS15ZWFycyByZWFjdC1kYXRlcGlja2VyX19uYXZpZ2F0aW9uLS15ZWFycy1wcmV2aW91c1wiIH0pKSksIHA7XG4gICAgfSksIHoxKGYxKHIpLCBcIm9uQ2hhbmdlXCIsIGZ1bmN0aW9uKGwpIHtcbiAgICAgIHIucHJvcHMub25DaGFuZ2UobCk7XG4gICAgfSksIHoxKGYxKHIpLCBcImhhbmRsZUNsaWNrT3V0c2lkZVwiLCBmdW5jdGlvbigpIHtcbiAgICAgIHIucHJvcHMub25DYW5jZWwoKTtcbiAgICB9KSwgejEoZjEociksIFwic2hpZnRZZWFyc1wiLCBmdW5jdGlvbihsKSB7XG4gICAgICB2YXIgcCA9IHIuc3RhdGUueWVhcnNMaXN0Lm1hcChmdW5jdGlvbihkKSB7XG4gICAgICAgIHJldHVybiBkICsgbDtcbiAgICAgIH0pO1xuICAgICAgci5zZXRTdGF0ZSh7IHllYXJzTGlzdDogcCB9KTtcbiAgICB9KSwgejEoZjEociksIFwiaW5jcmVtZW50WWVhcnNcIiwgZnVuY3Rpb24oKSB7XG4gICAgICByZXR1cm4gci5zaGlmdFllYXJzKDEpO1xuICAgIH0pLCB6MShmMShyKSwgXCJkZWNyZW1lbnRZZWFyc1wiLCBmdW5jdGlvbigpIHtcbiAgICAgIHJldHVybiByLnNoaWZ0WWVhcnMoLTEpO1xuICAgIH0pO1xuICAgIHZhciBpID0gbi55ZWFyRHJvcGRvd25JdGVtTnVtYmVyLCBhID0gbi5zY3JvbGxhYmxlWWVhckRyb3Bkb3duLCBzID0gaSB8fCAoYSA/IDEwIDogNSk7XG4gICAgcmV0dXJuIHIuc3RhdGUgPSB7IHllYXJzTGlzdDogcFcoci5wcm9wcy55ZWFyLCBzLCByLnByb3BzLm1pbkRhdGUsIHIucHJvcHMubWF4RGF0ZSkgfSwgci5kcm9wZG93blJlZiA9IGVBKCksIHI7XG4gIH1cbiAgcmV0dXJuIGgyKG8sIFt7IGtleTogXCJjb21wb25lbnREaWRNb3VudFwiLCB2YWx1ZTogZnVuY3Rpb24oKSB7XG4gICAgdmFyIG4gPSB0aGlzLmRyb3Bkb3duUmVmLmN1cnJlbnQ7XG4gICAgaWYgKG4pIHtcbiAgICAgIHZhciByID0gbi5jaGlsZHJlbiA/IEFycmF5LmZyb20obi5jaGlsZHJlbikgOiBudWxsLCBpID0gciA/IHIuZmluZChmdW5jdGlvbihhKSB7XG4gICAgICAgIHJldHVybiBhLmFyaWFTZWxlY3RlZDtcbiAgICAgIH0pIDogbnVsbDtcbiAgICAgIG4uc2Nyb2xsVG9wID0gaSA/IGkub2Zmc2V0VG9wICsgKGkuY2xpZW50SGVpZ2h0IC0gbi5jbGllbnRIZWlnaHQpIC8gMiA6IChuLnNjcm9sbEhlaWdodCAtIG4uY2xpZW50SGVpZ2h0KSAvIDI7XG4gICAgfVxuICB9IH0sIHsga2V5OiBcInJlbmRlclwiLCB2YWx1ZTogZnVuY3Rpb24oKSB7XG4gICAgdmFyIG4gPSBtMih7IFwicmVhY3QtZGF0ZXBpY2tlcl9feWVhci1kcm9wZG93blwiOiAhMCwgXCJyZWFjdC1kYXRlcGlja2VyX195ZWFyLWRyb3Bkb3duLS1zY3JvbGxhYmxlXCI6IHRoaXMucHJvcHMuc2Nyb2xsYWJsZVllYXJEcm9wZG93biB9KTtcbiAgICByZXR1cm4gbTEuY3JlYXRlRWxlbWVudChcImRpdlwiLCB7IGNsYXNzTmFtZTogbiwgcmVmOiB0aGlzLmRyb3Bkb3duUmVmIH0sIHRoaXMucmVuZGVyT3B0aW9ucygpKTtcbiAgfSB9XSksIG87XG59KCkpLCBiVyA9IGZ1bmN0aW9uKGUpIHtcbiAgTzIobywgbTEuQ29tcG9uZW50KTtcbiAgdmFyIHQgPSBmMihvKTtcbiAgZnVuY3Rpb24gbygpIHtcbiAgICB2YXIgbjtcbiAgICB6Mih0aGlzLCBvKTtcbiAgICBmb3IgKHZhciByID0gYXJndW1lbnRzLmxlbmd0aCwgaSA9IG5ldyBBcnJheShyKSwgYSA9IDA7IGEgPCByOyBhKyspXG4gICAgICBpW2FdID0gYXJndW1lbnRzW2FdO1xuICAgIHJldHVybiB6MShmMShuID0gdC5jYWxsLmFwcGx5KHQsIFt0aGlzXS5jb25jYXQoaSkpKSwgXCJzdGF0ZVwiLCB7IGRyb3Bkb3duVmlzaWJsZTogITEgfSksIHoxKGYxKG4pLCBcInJlbmRlclNlbGVjdE9wdGlvbnNcIiwgZnVuY3Rpb24oKSB7XG4gICAgICBmb3IgKHZhciBzID0gbi5wcm9wcy5taW5EYXRlID8gTDAobi5wcm9wcy5taW5EYXRlKSA6IDE5MDAsIGwgPSBuLnByb3BzLm1heERhdGUgPyBMMChuLnByb3BzLm1heERhdGUpIDogMjEwMCwgcCA9IFtdLCBkID0gczsgZCA8PSBsOyBkKyspXG4gICAgICAgIHAucHVzaChtMS5jcmVhdGVFbGVtZW50KFwib3B0aW9uXCIsIHsga2V5OiBkLCB2YWx1ZTogZCB9LCBkKSk7XG4gICAgICByZXR1cm4gcDtcbiAgICB9KSwgejEoZjEobiksIFwib25TZWxlY3RDaGFuZ2VcIiwgZnVuY3Rpb24ocykge1xuICAgICAgbi5vbkNoYW5nZShzLnRhcmdldC52YWx1ZSk7XG4gICAgfSksIHoxKGYxKG4pLCBcInJlbmRlclNlbGVjdE1vZGVcIiwgZnVuY3Rpb24oKSB7XG4gICAgICByZXR1cm4gbTEuY3JlYXRlRWxlbWVudChcInNlbGVjdFwiLCB7IHZhbHVlOiBuLnByb3BzLnllYXIsIGNsYXNzTmFtZTogXCJyZWFjdC1kYXRlcGlja2VyX195ZWFyLXNlbGVjdFwiLCBvbkNoYW5nZTogbi5vblNlbGVjdENoYW5nZSB9LCBuLnJlbmRlclNlbGVjdE9wdGlvbnMoKSk7XG4gICAgfSksIHoxKGYxKG4pLCBcInJlbmRlclJlYWRWaWV3XCIsIGZ1bmN0aW9uKHMpIHtcbiAgICAgIHJldHVybiBtMS5jcmVhdGVFbGVtZW50KFwiZGl2XCIsIHsga2V5OiBcInJlYWRcIiwgc3R5bGU6IHsgdmlzaWJpbGl0eTogcyA/IFwidmlzaWJsZVwiIDogXCJoaWRkZW5cIiB9LCBjbGFzc05hbWU6IFwicmVhY3QtZGF0ZXBpY2tlcl9feWVhci1yZWFkLXZpZXdcIiwgb25DbGljazogZnVuY3Rpb24obCkge1xuICAgICAgICByZXR1cm4gbi50b2dnbGVEcm9wZG93bihsKTtcbiAgICAgIH0gfSwgbTEuY3JlYXRlRWxlbWVudChcInNwYW5cIiwgeyBjbGFzc05hbWU6IFwicmVhY3QtZGF0ZXBpY2tlcl9feWVhci1yZWFkLXZpZXctLWRvd24tYXJyb3dcIiB9KSwgbTEuY3JlYXRlRWxlbWVudChcInNwYW5cIiwgeyBjbGFzc05hbWU6IFwicmVhY3QtZGF0ZXBpY2tlcl9feWVhci1yZWFkLXZpZXctLXNlbGVjdGVkLXllYXJcIiB9LCBuLnByb3BzLnllYXIpKTtcbiAgICB9KSwgejEoZjEobiksIFwicmVuZGVyRHJvcGRvd25cIiwgZnVuY3Rpb24oKSB7XG4gICAgICByZXR1cm4gbTEuY3JlYXRlRWxlbWVudChkVywgeyBrZXk6IFwiZHJvcGRvd25cIiwgeWVhcjogbi5wcm9wcy55ZWFyLCBvbkNoYW5nZTogbi5vbkNoYW5nZSwgb25DYW5jZWw6IG4udG9nZ2xlRHJvcGRvd24sIG1pbkRhdGU6IG4ucHJvcHMubWluRGF0ZSwgbWF4RGF0ZTogbi5wcm9wcy5tYXhEYXRlLCBzY3JvbGxhYmxlWWVhckRyb3Bkb3duOiBuLnByb3BzLnNjcm9sbGFibGVZZWFyRHJvcGRvd24sIHllYXJEcm9wZG93bkl0ZW1OdW1iZXI6IG4ucHJvcHMueWVhckRyb3Bkb3duSXRlbU51bWJlciB9KTtcbiAgICB9KSwgejEoZjEobiksIFwicmVuZGVyU2Nyb2xsTW9kZVwiLCBmdW5jdGlvbigpIHtcbiAgICAgIHZhciBzID0gbi5zdGF0ZS5kcm9wZG93blZpc2libGUsIGwgPSBbbi5yZW5kZXJSZWFkVmlldyghcyldO1xuICAgICAgcmV0dXJuIHMgJiYgbC51bnNoaWZ0KG4ucmVuZGVyRHJvcGRvd24oKSksIGw7XG4gICAgfSksIHoxKGYxKG4pLCBcIm9uQ2hhbmdlXCIsIGZ1bmN0aW9uKHMpIHtcbiAgICAgIG4udG9nZ2xlRHJvcGRvd24oKSwgcyAhPT0gbi5wcm9wcy55ZWFyICYmIG4ucHJvcHMub25DaGFuZ2Uocyk7XG4gICAgfSksIHoxKGYxKG4pLCBcInRvZ2dsZURyb3Bkb3duXCIsIGZ1bmN0aW9uKHMpIHtcbiAgICAgIG4uc2V0U3RhdGUoeyBkcm9wZG93blZpc2libGU6ICFuLnN0YXRlLmRyb3Bkb3duVmlzaWJsZSB9LCBmdW5jdGlvbigpIHtcbiAgICAgICAgbi5wcm9wcy5hZGp1c3REYXRlT25DaGFuZ2UgJiYgbi5oYW5kbGVZZWFyQ2hhbmdlKG4ucHJvcHMuZGF0ZSwgcyk7XG4gICAgICB9KTtcbiAgICB9KSwgejEoZjEobiksIFwiaGFuZGxlWWVhckNoYW5nZVwiLCBmdW5jdGlvbihzLCBsKSB7XG4gICAgICBuLm9uU2VsZWN0KHMsIGwpLCBuLnNldE9wZW4oKTtcbiAgICB9KSwgejEoZjEobiksIFwib25TZWxlY3RcIiwgZnVuY3Rpb24ocywgbCkge1xuICAgICAgbi5wcm9wcy5vblNlbGVjdCAmJiBuLnByb3BzLm9uU2VsZWN0KHMsIGwpO1xuICAgIH0pLCB6MShmMShuKSwgXCJzZXRPcGVuXCIsIGZ1bmN0aW9uKCkge1xuICAgICAgbi5wcm9wcy5zZXRPcGVuICYmIG4ucHJvcHMuc2V0T3BlbighMCk7XG4gICAgfSksIG47XG4gIH1cbiAgcmV0dXJuIGgyKG8sIFt7IGtleTogXCJyZW5kZXJcIiwgdmFsdWU6IGZ1bmN0aW9uKCkge1xuICAgIHZhciBuO1xuICAgIHN3aXRjaCAodGhpcy5wcm9wcy5kcm9wZG93bk1vZGUpIHtcbiAgICAgIGNhc2UgXCJzY3JvbGxcIjpcbiAgICAgICAgbiA9IHRoaXMucmVuZGVyU2Nyb2xsTW9kZSgpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgXCJzZWxlY3RcIjpcbiAgICAgICAgbiA9IHRoaXMucmVuZGVyU2VsZWN0TW9kZSgpO1xuICAgIH1cbiAgICByZXR1cm4gbTEuY3JlYXRlRWxlbWVudChcImRpdlwiLCB7IGNsYXNzTmFtZTogXCJyZWFjdC1kYXRlcGlja2VyX195ZWFyLWRyb3Bkb3duLWNvbnRhaW5lciByZWFjdC1kYXRlcGlja2VyX195ZWFyLWRyb3Bkb3duLWNvbnRhaW5lci0tXCIuY29uY2F0KHRoaXMucHJvcHMuZHJvcGRvd25Nb2RlKSB9LCBuKTtcbiAgfSB9XSksIG87XG59KCksIE1XID0gWDQoZnVuY3Rpb24oZSkge1xuICBPMihvLCBtMS5Db21wb25lbnQpO1xuICB2YXIgdCA9IGYyKG8pO1xuICBmdW5jdGlvbiBvKCkge1xuICAgIHZhciBuO1xuICAgIHoyKHRoaXMsIG8pO1xuICAgIGZvciAodmFyIHIgPSBhcmd1bWVudHMubGVuZ3RoLCBpID0gbmV3IEFycmF5KHIpLCBhID0gMDsgYSA8IHI7IGErKylcbiAgICAgIGlbYV0gPSBhcmd1bWVudHNbYV07XG4gICAgcmV0dXJuIHoxKGYxKG4gPSB0LmNhbGwuYXBwbHkodCwgW3RoaXNdLmNvbmNhdChpKSkpLCBcImlzU2VsZWN0ZWRNb250aFwiLCBmdW5jdGlvbihzKSB7XG4gICAgICByZXR1cm4gbi5wcm9wcy5tb250aCA9PT0gcztcbiAgICB9KSwgejEoZjEobiksIFwicmVuZGVyT3B0aW9uc1wiLCBmdW5jdGlvbigpIHtcbiAgICAgIHJldHVybiBuLnByb3BzLm1vbnRoTmFtZXMubWFwKGZ1bmN0aW9uKHMsIGwpIHtcbiAgICAgICAgcmV0dXJuIG0xLmNyZWF0ZUVsZW1lbnQoXCJkaXZcIiwgeyBjbGFzc05hbWU6IG4uaXNTZWxlY3RlZE1vbnRoKGwpID8gXCJyZWFjdC1kYXRlcGlja2VyX19tb250aC1vcHRpb24gcmVhY3QtZGF0ZXBpY2tlcl9fbW9udGgtb3B0aW9uLS1zZWxlY3RlZF9tb250aFwiIDogXCJyZWFjdC1kYXRlcGlja2VyX19tb250aC1vcHRpb25cIiwga2V5OiBzLCBvbkNsaWNrOiBuLm9uQ2hhbmdlLmJpbmQoZjEobiksIGwpLCBcImFyaWEtc2VsZWN0ZWRcIjogbi5pc1NlbGVjdGVkTW9udGgobCkgPyBcInRydWVcIiA6IHZvaWQgMCB9LCBuLmlzU2VsZWN0ZWRNb250aChsKSA/IG0xLmNyZWF0ZUVsZW1lbnQoXCJzcGFuXCIsIHsgY2xhc3NOYW1lOiBcInJlYWN0LWRhdGVwaWNrZXJfX21vbnRoLW9wdGlvbi0tc2VsZWN0ZWRcIiB9LCBcIuKck1wiKSA6IFwiXCIsIHMpO1xuICAgICAgfSk7XG4gICAgfSksIHoxKGYxKG4pLCBcIm9uQ2hhbmdlXCIsIGZ1bmN0aW9uKHMpIHtcbiAgICAgIHJldHVybiBuLnByb3BzLm9uQ2hhbmdlKHMpO1xuICAgIH0pLCB6MShmMShuKSwgXCJoYW5kbGVDbGlja091dHNpZGVcIiwgZnVuY3Rpb24oKSB7XG4gICAgICByZXR1cm4gbi5wcm9wcy5vbkNhbmNlbCgpO1xuICAgIH0pLCBuO1xuICB9XG4gIHJldHVybiBoMihvLCBbeyBrZXk6IFwicmVuZGVyXCIsIHZhbHVlOiBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gbTEuY3JlYXRlRWxlbWVudChcImRpdlwiLCB7IGNsYXNzTmFtZTogXCJyZWFjdC1kYXRlcGlja2VyX19tb250aC1kcm9wZG93blwiIH0sIHRoaXMucmVuZGVyT3B0aW9ucygpKTtcbiAgfSB9XSksIG87XG59KCkpLCBBVyA9IGZ1bmN0aW9uKGUpIHtcbiAgTzIobywgbTEuQ29tcG9uZW50KTtcbiAgdmFyIHQgPSBmMihvKTtcbiAgZnVuY3Rpb24gbygpIHtcbiAgICB2YXIgbjtcbiAgICB6Mih0aGlzLCBvKTtcbiAgICBmb3IgKHZhciByID0gYXJndW1lbnRzLmxlbmd0aCwgaSA9IG5ldyBBcnJheShyKSwgYSA9IDA7IGEgPCByOyBhKyspXG4gICAgICBpW2FdID0gYXJndW1lbnRzW2FdO1xuICAgIHJldHVybiB6MShmMShuID0gdC5jYWxsLmFwcGx5KHQsIFt0aGlzXS5jb25jYXQoaSkpKSwgXCJzdGF0ZVwiLCB7IGRyb3Bkb3duVmlzaWJsZTogITEgfSksIHoxKGYxKG4pLCBcInJlbmRlclNlbGVjdE9wdGlvbnNcIiwgZnVuY3Rpb24ocykge1xuICAgICAgcmV0dXJuIHMubWFwKGZ1bmN0aW9uKGwsIHApIHtcbiAgICAgICAgcmV0dXJuIG0xLmNyZWF0ZUVsZW1lbnQoXCJvcHRpb25cIiwgeyBrZXk6IHAsIHZhbHVlOiBwIH0sIGwpO1xuICAgICAgfSk7XG4gICAgfSksIHoxKGYxKG4pLCBcInJlbmRlclNlbGVjdE1vZGVcIiwgZnVuY3Rpb24ocykge1xuICAgICAgcmV0dXJuIG0xLmNyZWF0ZUVsZW1lbnQoXCJzZWxlY3RcIiwgeyB2YWx1ZTogbi5wcm9wcy5tb250aCwgY2xhc3NOYW1lOiBcInJlYWN0LWRhdGVwaWNrZXJfX21vbnRoLXNlbGVjdFwiLCBvbkNoYW5nZTogZnVuY3Rpb24obCkge1xuICAgICAgICByZXR1cm4gbi5vbkNoYW5nZShsLnRhcmdldC52YWx1ZSk7XG4gICAgICB9IH0sIG4ucmVuZGVyU2VsZWN0T3B0aW9ucyhzKSk7XG4gICAgfSksIHoxKGYxKG4pLCBcInJlbmRlclJlYWRWaWV3XCIsIGZ1bmN0aW9uKHMsIGwpIHtcbiAgICAgIHJldHVybiBtMS5jcmVhdGVFbGVtZW50KFwiZGl2XCIsIHsga2V5OiBcInJlYWRcIiwgc3R5bGU6IHsgdmlzaWJpbGl0eTogcyA/IFwidmlzaWJsZVwiIDogXCJoaWRkZW5cIiB9LCBjbGFzc05hbWU6IFwicmVhY3QtZGF0ZXBpY2tlcl9fbW9udGgtcmVhZC12aWV3XCIsIG9uQ2xpY2s6IG4udG9nZ2xlRHJvcGRvd24gfSwgbTEuY3JlYXRlRWxlbWVudChcInNwYW5cIiwgeyBjbGFzc05hbWU6IFwicmVhY3QtZGF0ZXBpY2tlcl9fbW9udGgtcmVhZC12aWV3LS1kb3duLWFycm93XCIgfSksIG0xLmNyZWF0ZUVsZW1lbnQoXCJzcGFuXCIsIHsgY2xhc3NOYW1lOiBcInJlYWN0LWRhdGVwaWNrZXJfX21vbnRoLXJlYWQtdmlldy0tc2VsZWN0ZWQtbW9udGhcIiB9LCBsW24ucHJvcHMubW9udGhdKSk7XG4gICAgfSksIHoxKGYxKG4pLCBcInJlbmRlckRyb3Bkb3duXCIsIGZ1bmN0aW9uKHMpIHtcbiAgICAgIHJldHVybiBtMS5jcmVhdGVFbGVtZW50KE1XLCB7IGtleTogXCJkcm9wZG93blwiLCBtb250aDogbi5wcm9wcy5tb250aCwgbW9udGhOYW1lczogcywgb25DaGFuZ2U6IG4ub25DaGFuZ2UsIG9uQ2FuY2VsOiBuLnRvZ2dsZURyb3Bkb3duIH0pO1xuICAgIH0pLCB6MShmMShuKSwgXCJyZW5kZXJTY3JvbGxNb2RlXCIsIGZ1bmN0aW9uKHMpIHtcbiAgICAgIHZhciBsID0gbi5zdGF0ZS5kcm9wZG93blZpc2libGUsIHAgPSBbbi5yZW5kZXJSZWFkVmlldyghbCwgcyldO1xuICAgICAgcmV0dXJuIGwgJiYgcC51bnNoaWZ0KG4ucmVuZGVyRHJvcGRvd24ocykpLCBwO1xuICAgIH0pLCB6MShmMShuKSwgXCJvbkNoYW5nZVwiLCBmdW5jdGlvbihzKSB7XG4gICAgICBuLnRvZ2dsZURyb3Bkb3duKCksIHMgIT09IG4ucHJvcHMubW9udGggJiYgbi5wcm9wcy5vbkNoYW5nZShzKTtcbiAgICB9KSwgejEoZjEobiksIFwidG9nZ2xlRHJvcGRvd25cIiwgZnVuY3Rpb24oKSB7XG4gICAgICByZXR1cm4gbi5zZXRTdGF0ZSh7IGRyb3Bkb3duVmlzaWJsZTogIW4uc3RhdGUuZHJvcGRvd25WaXNpYmxlIH0pO1xuICAgIH0pLCBuO1xuICB9XG4gIHJldHVybiBoMihvLCBbeyBrZXk6IFwicmVuZGVyXCIsIHZhbHVlOiBmdW5jdGlvbigpIHtcbiAgICB2YXIgbiwgciA9IHRoaXMsIGkgPSBbMCwgMSwgMiwgMywgNCwgNSwgNiwgNywgOCwgOSwgMTAsIDExXS5tYXAodGhpcy5wcm9wcy51c2VTaG9ydE1vbnRoSW5Ecm9wZG93biA/IGZ1bmN0aW9uKGEpIHtcbiAgICAgIHJldHVybiBNcChhLCByLnByb3BzLmxvY2FsZSk7XG4gICAgfSA6IGZ1bmN0aW9uKGEpIHtcbiAgICAgIHJldHVybiBsNihhLCByLnByb3BzLmxvY2FsZSk7XG4gICAgfSk7XG4gICAgc3dpdGNoICh0aGlzLnByb3BzLmRyb3Bkb3duTW9kZSkge1xuICAgICAgY2FzZSBcInNjcm9sbFwiOlxuICAgICAgICBuID0gdGhpcy5yZW5kZXJTY3JvbGxNb2RlKGkpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgXCJzZWxlY3RcIjpcbiAgICAgICAgbiA9IHRoaXMucmVuZGVyU2VsZWN0TW9kZShpKTtcbiAgICB9XG4gICAgcmV0dXJuIG0xLmNyZWF0ZUVsZW1lbnQoXCJkaXZcIiwgeyBjbGFzc05hbWU6IFwicmVhY3QtZGF0ZXBpY2tlcl9fbW9udGgtZHJvcGRvd24tY29udGFpbmVyIHJlYWN0LWRhdGVwaWNrZXJfX21vbnRoLWRyb3Bkb3duLWNvbnRhaW5lci0tXCIuY29uY2F0KHRoaXMucHJvcHMuZHJvcGRvd25Nb2RlKSB9LCBuKTtcbiAgfSB9XSksIG87XG59KCk7XG5mdW5jdGlvbiB1VyhlLCB0KSB7XG4gIGZvciAodmFyIG8gPSBbXSwgbiA9IEJ0KGUpLCByID0gQnQodCk7ICFEdChuLCByKTsgKVxuICAgIG8ucHVzaChHMChuKSksIG4gPSB2ZShuLCAxKTtcbiAgcmV0dXJuIG87XG59XG52YXIgelcgPSBYNChmdW5jdGlvbihlKSB7XG4gIE8yKG8sIG0xLkNvbXBvbmVudCk7XG4gIHZhciB0ID0gZjIobyk7XG4gIGZ1bmN0aW9uIG8obikge1xuICAgIHZhciByO1xuICAgIHJldHVybiB6Mih0aGlzLCBvKSwgejEoZjEociA9IHQuY2FsbCh0aGlzLCBuKSksIFwicmVuZGVyT3B0aW9uc1wiLCBmdW5jdGlvbigpIHtcbiAgICAgIHJldHVybiByLnN0YXRlLm1vbnRoWWVhcnNMaXN0Lm1hcChmdW5jdGlvbihpKSB7XG4gICAgICAgIHZhciBhID0gUWEoaSksIHMgPSBxdChyLnByb3BzLmRhdGUsIGkpICYmIGZlKHIucHJvcHMuZGF0ZSwgaSk7XG4gICAgICAgIHJldHVybiBtMS5jcmVhdGVFbGVtZW50KFwiZGl2XCIsIHsgY2xhc3NOYW1lOiBzID8gXCJyZWFjdC1kYXRlcGlja2VyX19tb250aC15ZWFyLW9wdGlvbi0tc2VsZWN0ZWRfbW9udGgteWVhclwiIDogXCJyZWFjdC1kYXRlcGlja2VyX19tb250aC15ZWFyLW9wdGlvblwiLCBrZXk6IGEsIG9uQ2xpY2s6IHIub25DaGFuZ2UuYmluZChmMShyKSwgYSksIFwiYXJpYS1zZWxlY3RlZFwiOiBzID8gXCJ0cnVlXCIgOiB2b2lkIDAgfSwgcyA/IG0xLmNyZWF0ZUVsZW1lbnQoXCJzcGFuXCIsIHsgY2xhc3NOYW1lOiBcInJlYWN0LWRhdGVwaWNrZXJfX21vbnRoLXllYXItb3B0aW9uLS1zZWxlY3RlZFwiIH0sIFwi4pyTXCIpIDogXCJcIiwgZTIoaSwgci5wcm9wcy5kYXRlRm9ybWF0LCByLnByb3BzLmxvY2FsZSkpO1xuICAgICAgfSk7XG4gICAgfSksIHoxKGYxKHIpLCBcIm9uQ2hhbmdlXCIsIGZ1bmN0aW9uKGkpIHtcbiAgICAgIHJldHVybiByLnByb3BzLm9uQ2hhbmdlKGkpO1xuICAgIH0pLCB6MShmMShyKSwgXCJoYW5kbGVDbGlja091dHNpZGVcIiwgZnVuY3Rpb24oKSB7XG4gICAgICByLnByb3BzLm9uQ2FuY2VsKCk7XG4gICAgfSksIHIuc3RhdGUgPSB7IG1vbnRoWWVhcnNMaXN0OiB1VyhyLnByb3BzLm1pbkRhdGUsIHIucHJvcHMubWF4RGF0ZSkgfSwgcjtcbiAgfVxuICByZXR1cm4gaDIobywgW3sga2V5OiBcInJlbmRlclwiLCB2YWx1ZTogZnVuY3Rpb24oKSB7XG4gICAgdmFyIG4gPSBtMih7IFwicmVhY3QtZGF0ZXBpY2tlcl9fbW9udGgteWVhci1kcm9wZG93blwiOiAhMCwgXCJyZWFjdC1kYXRlcGlja2VyX19tb250aC15ZWFyLWRyb3Bkb3duLS1zY3JvbGxhYmxlXCI6IHRoaXMucHJvcHMuc2Nyb2xsYWJsZU1vbnRoWWVhckRyb3Bkb3duIH0pO1xuICAgIHJldHVybiBtMS5jcmVhdGVFbGVtZW50KFwiZGl2XCIsIHsgY2xhc3NOYW1lOiBuIH0sIHRoaXMucmVuZGVyT3B0aW9ucygpKTtcbiAgfSB9XSksIG87XG59KCkpLCBoVyA9IGZ1bmN0aW9uKGUpIHtcbiAgTzIobywgbTEuQ29tcG9uZW50KTtcbiAgdmFyIHQgPSBmMihvKTtcbiAgZnVuY3Rpb24gbygpIHtcbiAgICB2YXIgbjtcbiAgICB6Mih0aGlzLCBvKTtcbiAgICBmb3IgKHZhciByID0gYXJndW1lbnRzLmxlbmd0aCwgaSA9IG5ldyBBcnJheShyKSwgYSA9IDA7IGEgPCByOyBhKyspXG4gICAgICBpW2FdID0gYXJndW1lbnRzW2FdO1xuICAgIHJldHVybiB6MShmMShuID0gdC5jYWxsLmFwcGx5KHQsIFt0aGlzXS5jb25jYXQoaSkpKSwgXCJzdGF0ZVwiLCB7IGRyb3Bkb3duVmlzaWJsZTogITEgfSksIHoxKGYxKG4pLCBcInJlbmRlclNlbGVjdE9wdGlvbnNcIiwgZnVuY3Rpb24oKSB7XG4gICAgICBmb3IgKHZhciBzID0gQnQobi5wcm9wcy5taW5EYXRlKSwgbCA9IEJ0KG4ucHJvcHMubWF4RGF0ZSksIHAgPSBbXTsgIUR0KHMsIGwpOyApIHtcbiAgICAgICAgdmFyIGQgPSBRYShzKTtcbiAgICAgICAgcC5wdXNoKG0xLmNyZWF0ZUVsZW1lbnQoXCJvcHRpb25cIiwgeyBrZXk6IGQsIHZhbHVlOiBkIH0sIGUyKHMsIG4ucHJvcHMuZGF0ZUZvcm1hdCwgbi5wcm9wcy5sb2NhbGUpKSksIHMgPSB2ZShzLCAxKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBwO1xuICAgIH0pLCB6MShmMShuKSwgXCJvblNlbGVjdENoYW5nZVwiLCBmdW5jdGlvbihzKSB7XG4gICAgICBuLm9uQ2hhbmdlKHMudGFyZ2V0LnZhbHVlKTtcbiAgICB9KSwgejEoZjEobiksIFwicmVuZGVyU2VsZWN0TW9kZVwiLCBmdW5jdGlvbigpIHtcbiAgICAgIHJldHVybiBtMS5jcmVhdGVFbGVtZW50KFwic2VsZWN0XCIsIHsgdmFsdWU6IFFhKEJ0KG4ucHJvcHMuZGF0ZSkpLCBjbGFzc05hbWU6IFwicmVhY3QtZGF0ZXBpY2tlcl9fbW9udGgteWVhci1zZWxlY3RcIiwgb25DaGFuZ2U6IG4ub25TZWxlY3RDaGFuZ2UgfSwgbi5yZW5kZXJTZWxlY3RPcHRpb25zKCkpO1xuICAgIH0pLCB6MShmMShuKSwgXCJyZW5kZXJSZWFkVmlld1wiLCBmdW5jdGlvbihzKSB7XG4gICAgICB2YXIgbCA9IGUyKG4ucHJvcHMuZGF0ZSwgbi5wcm9wcy5kYXRlRm9ybWF0LCBuLnByb3BzLmxvY2FsZSk7XG4gICAgICByZXR1cm4gbTEuY3JlYXRlRWxlbWVudChcImRpdlwiLCB7IGtleTogXCJyZWFkXCIsIHN0eWxlOiB7IHZpc2liaWxpdHk6IHMgPyBcInZpc2libGVcIiA6IFwiaGlkZGVuXCIgfSwgY2xhc3NOYW1lOiBcInJlYWN0LWRhdGVwaWNrZXJfX21vbnRoLXllYXItcmVhZC12aWV3XCIsIG9uQ2xpY2s6IGZ1bmN0aW9uKHApIHtcbiAgICAgICAgcmV0dXJuIG4udG9nZ2xlRHJvcGRvd24ocCk7XG4gICAgICB9IH0sIG0xLmNyZWF0ZUVsZW1lbnQoXCJzcGFuXCIsIHsgY2xhc3NOYW1lOiBcInJlYWN0LWRhdGVwaWNrZXJfX21vbnRoLXllYXItcmVhZC12aWV3LS1kb3duLWFycm93XCIgfSksIG0xLmNyZWF0ZUVsZW1lbnQoXCJzcGFuXCIsIHsgY2xhc3NOYW1lOiBcInJlYWN0LWRhdGVwaWNrZXJfX21vbnRoLXllYXItcmVhZC12aWV3LS1zZWxlY3RlZC1tb250aC15ZWFyXCIgfSwgbCkpO1xuICAgIH0pLCB6MShmMShuKSwgXCJyZW5kZXJEcm9wZG93blwiLCBmdW5jdGlvbigpIHtcbiAgICAgIHJldHVybiBtMS5jcmVhdGVFbGVtZW50KHpXLCB7IGtleTogXCJkcm9wZG93blwiLCBkYXRlOiBuLnByb3BzLmRhdGUsIGRhdGVGb3JtYXQ6IG4ucHJvcHMuZGF0ZUZvcm1hdCwgb25DaGFuZ2U6IG4ub25DaGFuZ2UsIG9uQ2FuY2VsOiBuLnRvZ2dsZURyb3Bkb3duLCBtaW5EYXRlOiBuLnByb3BzLm1pbkRhdGUsIG1heERhdGU6IG4ucHJvcHMubWF4RGF0ZSwgc2Nyb2xsYWJsZU1vbnRoWWVhckRyb3Bkb3duOiBuLnByb3BzLnNjcm9sbGFibGVNb250aFllYXJEcm9wZG93biwgbG9jYWxlOiBuLnByb3BzLmxvY2FsZSB9KTtcbiAgICB9KSwgejEoZjEobiksIFwicmVuZGVyU2Nyb2xsTW9kZVwiLCBmdW5jdGlvbigpIHtcbiAgICAgIHZhciBzID0gbi5zdGF0ZS5kcm9wZG93blZpc2libGUsIGwgPSBbbi5yZW5kZXJSZWFkVmlldyghcyldO1xuICAgICAgcmV0dXJuIHMgJiYgbC51bnNoaWZ0KG4ucmVuZGVyRHJvcGRvd24oKSksIGw7XG4gICAgfSksIHoxKGYxKG4pLCBcIm9uQ2hhbmdlXCIsIGZ1bmN0aW9uKHMpIHtcbiAgICAgIG4udG9nZ2xlRHJvcGRvd24oKTtcbiAgICAgIHZhciBsID0gRzAocGFyc2VJbnQocykpO1xuICAgICAgcXQobi5wcm9wcy5kYXRlLCBsKSAmJiBmZShuLnByb3BzLmRhdGUsIGwpIHx8IG4ucHJvcHMub25DaGFuZ2UobCk7XG4gICAgfSksIHoxKGYxKG4pLCBcInRvZ2dsZURyb3Bkb3duXCIsIGZ1bmN0aW9uKCkge1xuICAgICAgcmV0dXJuIG4uc2V0U3RhdGUoeyBkcm9wZG93blZpc2libGU6ICFuLnN0YXRlLmRyb3Bkb3duVmlzaWJsZSB9KTtcbiAgICB9KSwgbjtcbiAgfVxuICByZXR1cm4gaDIobywgW3sga2V5OiBcInJlbmRlclwiLCB2YWx1ZTogZnVuY3Rpb24oKSB7XG4gICAgdmFyIG47XG4gICAgc3dpdGNoICh0aGlzLnByb3BzLmRyb3Bkb3duTW9kZSkge1xuICAgICAgY2FzZSBcInNjcm9sbFwiOlxuICAgICAgICBuID0gdGhpcy5yZW5kZXJTY3JvbGxNb2RlKCk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBcInNlbGVjdFwiOlxuICAgICAgICBuID0gdGhpcy5yZW5kZXJTZWxlY3RNb2RlKCk7XG4gICAgfVxuICAgIHJldHVybiBtMS5jcmVhdGVFbGVtZW50KFwiZGl2XCIsIHsgY2xhc3NOYW1lOiBcInJlYWN0LWRhdGVwaWNrZXJfX21vbnRoLXllYXItZHJvcGRvd24tY29udGFpbmVyIHJlYWN0LWRhdGVwaWNrZXJfX21vbnRoLXllYXItZHJvcGRvd24tY29udGFpbmVyLS1cIi5jb25jYXQodGhpcy5wcm9wcy5kcm9wZG93bk1vZGUpIH0sIG4pO1xuICB9IH1dKSwgbztcbn0oKSwgT1cgPSBmdW5jdGlvbihlKSB7XG4gIE8yKG8sIG0xLkNvbXBvbmVudCk7XG4gIHZhciB0ID0gZjIobyk7XG4gIGZ1bmN0aW9uIG8oKSB7XG4gICAgdmFyIG47XG4gICAgejIodGhpcywgbyk7XG4gICAgZm9yICh2YXIgciA9IGFyZ3VtZW50cy5sZW5ndGgsIGkgPSBuZXcgQXJyYXkociksIGEgPSAwOyBhIDwgcjsgYSsrKVxuICAgICAgaVthXSA9IGFyZ3VtZW50c1thXTtcbiAgICByZXR1cm4gejEoZjEobiA9IHQuY2FsbC5hcHBseSh0LCBbdGhpc10uY29uY2F0KGkpKSksIFwiZGF5RWxcIiwgbTEuY3JlYXRlUmVmKCkpLCB6MShmMShuKSwgXCJoYW5kbGVDbGlja1wiLCBmdW5jdGlvbihzKSB7XG4gICAgICAhbi5pc0Rpc2FibGVkKCkgJiYgbi5wcm9wcy5vbkNsaWNrICYmIG4ucHJvcHMub25DbGljayhzKTtcbiAgICB9KSwgejEoZjEobiksIFwiaGFuZGxlTW91c2VFbnRlclwiLCBmdW5jdGlvbihzKSB7XG4gICAgICAhbi5pc0Rpc2FibGVkKCkgJiYgbi5wcm9wcy5vbk1vdXNlRW50ZXIgJiYgbi5wcm9wcy5vbk1vdXNlRW50ZXIocyk7XG4gICAgfSksIHoxKGYxKG4pLCBcImhhbmRsZU9uS2V5RG93blwiLCBmdW5jdGlvbihzKSB7XG4gICAgICBzLmtleSA9PT0gXCIgXCIgJiYgKHMucHJldmVudERlZmF1bHQoKSwgcy5rZXkgPSBcIkVudGVyXCIpLCBuLnByb3BzLmhhbmRsZU9uS2V5RG93bihzKTtcbiAgICB9KSwgejEoZjEobiksIFwiaXNTYW1lRGF5XCIsIGZ1bmN0aW9uKHMpIHtcbiAgICAgIHJldHVybiBRMChuLnByb3BzLmRheSwgcyk7XG4gICAgfSksIHoxKGYxKG4pLCBcImlzS2V5Ym9hcmRTZWxlY3RlZFwiLCBmdW5jdGlvbigpIHtcbiAgICAgIHJldHVybiAhbi5wcm9wcy5kaXNhYmxlZEtleWJvYXJkTmF2aWdhdGlvbiAmJiAhKG4uaXNTYW1lRGF5KG4ucHJvcHMuc2VsZWN0ZWQpIHx8IG4uaXNTYW1lV2VlayhuLnByb3BzLnNlbGVjdGVkKSkgJiYgKG4uaXNTYW1lRGF5KG4ucHJvcHMucHJlU2VsZWN0aW9uKSB8fCBuLmlzU2FtZVdlZWsobi5wcm9wcy5wcmVTZWxlY3Rpb24pKTtcbiAgICB9KSwgejEoZjEobiksIFwiaXNEaXNhYmxlZFwiLCBmdW5jdGlvbigpIHtcbiAgICAgIHJldHVybiBVNChuLnByb3BzLmRheSwgbi5wcm9wcyk7XG4gICAgfSksIHoxKGYxKG4pLCBcImlzRXhjbHVkZWRcIiwgZnVuY3Rpb24oKSB7XG4gICAgICByZXR1cm4gcDYobi5wcm9wcy5kYXksIG4ucHJvcHMpO1xuICAgIH0pLCB6MShmMShuKSwgXCJpc1N0YXJ0T2ZXZWVrXCIsIGZ1bmN0aW9uKCkge1xuICAgICAgcmV0dXJuIFEwKG4ucHJvcHMuZGF5LCBYZShuLnByb3BzLmRheSwgbi5wcm9wcy5sb2NhbGUsIG4ucHJvcHMuY2FsZW5kYXJTdGFydERheSkpO1xuICAgIH0pLCB6MShmMShuKSwgXCJpc1NhbWVXZWVrXCIsIGZ1bmN0aW9uKHMpIHtcbiAgICAgIHJldHVybiBuLnByb3BzLnNob3dXZWVrUGlja2VyICYmIFEwKHMsIFhlKG4ucHJvcHMuZGF5LCBuLnByb3BzLmxvY2FsZSwgbi5wcm9wcy5jYWxlbmRhclN0YXJ0RGF5KSk7XG4gICAgfSksIHoxKGYxKG4pLCBcImdldEhpZ2hMaWdodGVkQ2xhc3NcIiwgZnVuY3Rpb24oKSB7XG4gICAgICB2YXIgcyA9IG4ucHJvcHMsIGwgPSBzLmRheSwgcCA9IHMuaGlnaGxpZ2h0RGF0ZXM7XG4gICAgICBpZiAoIXApXG4gICAgICAgIHJldHVybiAhMTtcbiAgICAgIHZhciBkID0gZTIobCwgXCJNTS5kZC55eXl5XCIpO1xuICAgICAgcmV0dXJuIHAuZ2V0KGQpO1xuICAgIH0pLCB6MShmMShuKSwgXCJnZXRIb2xpZGF5c0NsYXNzXCIsIGZ1bmN0aW9uKCkge1xuICAgICAgdmFyIHMgPSBuLnByb3BzLCBsID0gcy5kYXksIHAgPSBzLmhvbGlkYXlzO1xuICAgICAgaWYgKCFwKVxuICAgICAgICByZXR1cm4gITE7XG4gICAgICB2YXIgZCA9IGUyKGwsIFwiTU0uZGQueXl5eVwiKTtcbiAgICAgIHJldHVybiBwLmhhcyhkKSA/IFtwLmdldChkKS5jbGFzc05hbWVdIDogdm9pZCAwO1xuICAgIH0pLCB6MShmMShuKSwgXCJpc0luUmFuZ2VcIiwgZnVuY3Rpb24oKSB7XG4gICAgICB2YXIgcyA9IG4ucHJvcHMsIGwgPSBzLmRheSwgcCA9IHMuc3RhcnREYXRlLCBkID0gcy5lbmREYXRlO1xuICAgICAgcmV0dXJuICEoIXAgfHwgIWQpICYmIEZuKGwsIHAsIGQpO1xuICAgIH0pLCB6MShmMShuKSwgXCJpc0luU2VsZWN0aW5nUmFuZ2VcIiwgZnVuY3Rpb24oKSB7XG4gICAgICB2YXIgcywgbCA9IG4ucHJvcHMsIHAgPSBsLmRheSwgZCA9IGwuc2VsZWN0c1N0YXJ0LCBiID0gbC5zZWxlY3RzRW5kLCBNID0gbC5zZWxlY3RzUmFuZ2UsIHUgPSBsLnNlbGVjdHNEaXNhYmxlZERheXNJblJhbmdlLCBBID0gbC5zdGFydERhdGUsIHogPSBsLmVuZERhdGUsIGYgPSAocyA9IG4ucHJvcHMuc2VsZWN0aW5nRGF0ZSkgIT09IG51bGwgJiYgcyAhPT0gdm9pZCAwID8gcyA6IG4ucHJvcHMucHJlU2VsZWN0aW9uO1xuICAgICAgcmV0dXJuICEoIShkIHx8IGIgfHwgTSkgfHwgIWYgfHwgIXUgJiYgbi5pc0Rpc2FibGVkKCkpICYmIChkICYmIHogJiYgKHZ0KGYsIHopIHx8IGkzKGYsIHopKSA/IEZuKHAsIGYsIHopIDogKGIgJiYgQSAmJiAoRHQoZiwgQSkgfHwgaTMoZiwgQSkpIHx8ICEoIU0gfHwgIUEgfHwgeiB8fCAhRHQoZiwgQSkgJiYgIWkzKGYsIEEpKSkgJiYgRm4ocCwgQSwgZikpO1xuICAgIH0pLCB6MShmMShuKSwgXCJpc1NlbGVjdGluZ1JhbmdlU3RhcnRcIiwgZnVuY3Rpb24oKSB7XG4gICAgICB2YXIgcztcbiAgICAgIGlmICghbi5pc0luU2VsZWN0aW5nUmFuZ2UoKSlcbiAgICAgICAgcmV0dXJuICExO1xuICAgICAgdmFyIGwgPSBuLnByb3BzLCBwID0gbC5kYXksIGQgPSBsLnN0YXJ0RGF0ZSwgYiA9IGwuc2VsZWN0c1N0YXJ0LCBNID0gKHMgPSBuLnByb3BzLnNlbGVjdGluZ0RhdGUpICE9PSBudWxsICYmIHMgIT09IHZvaWQgMCA/IHMgOiBuLnByb3BzLnByZVNlbGVjdGlvbjtcbiAgICAgIHJldHVybiBRMChwLCBiID8gTSA6IGQpO1xuICAgIH0pLCB6MShmMShuKSwgXCJpc1NlbGVjdGluZ1JhbmdlRW5kXCIsIGZ1bmN0aW9uKCkge1xuICAgICAgdmFyIHM7XG4gICAgICBpZiAoIW4uaXNJblNlbGVjdGluZ1JhbmdlKCkpXG4gICAgICAgIHJldHVybiAhMTtcbiAgICAgIHZhciBsID0gbi5wcm9wcywgcCA9IGwuZGF5LCBkID0gbC5lbmREYXRlLCBiID0gbC5zZWxlY3RzRW5kLCBNID0gbC5zZWxlY3RzUmFuZ2UsIHUgPSAocyA9IG4ucHJvcHMuc2VsZWN0aW5nRGF0ZSkgIT09IG51bGwgJiYgcyAhPT0gdm9pZCAwID8gcyA6IG4ucHJvcHMucHJlU2VsZWN0aW9uO1xuICAgICAgcmV0dXJuIFEwKHAsIGIgfHwgTSA/IHUgOiBkKTtcbiAgICB9KSwgejEoZjEobiksIFwiaXNSYW5nZVN0YXJ0XCIsIGZ1bmN0aW9uKCkge1xuICAgICAgdmFyIHMgPSBuLnByb3BzLCBsID0gcy5kYXksIHAgPSBzLnN0YXJ0RGF0ZSwgZCA9IHMuZW5kRGF0ZTtcbiAgICAgIHJldHVybiAhKCFwIHx8ICFkKSAmJiBRMChwLCBsKTtcbiAgICB9KSwgejEoZjEobiksIFwiaXNSYW5nZUVuZFwiLCBmdW5jdGlvbigpIHtcbiAgICAgIHZhciBzID0gbi5wcm9wcywgbCA9IHMuZGF5LCBwID0gcy5zdGFydERhdGUsIGQgPSBzLmVuZERhdGU7XG4gICAgICByZXR1cm4gISghcCB8fCAhZCkgJiYgUTAoZCwgbCk7XG4gICAgfSksIHoxKGYxKG4pLCBcImlzV2Vla2VuZFwiLCBmdW5jdGlvbigpIHtcbiAgICAgIHZhciBzID0gencobi5wcm9wcy5kYXkpO1xuICAgICAgcmV0dXJuIHMgPT09IDAgfHwgcyA9PT0gNjtcbiAgICB9KSwgejEoZjEobiksIFwiaXNBZnRlck1vbnRoXCIsIGZ1bmN0aW9uKCkge1xuICAgICAgcmV0dXJuIG4ucHJvcHMubW9udGggIT09IHZvaWQgMCAmJiAobi5wcm9wcy5tb250aCArIDEpICUgMTIgPT09IGcyKG4ucHJvcHMuZGF5KTtcbiAgICB9KSwgejEoZjEobiksIFwiaXNCZWZvcmVNb250aFwiLCBmdW5jdGlvbigpIHtcbiAgICAgIHJldHVybiBuLnByb3BzLm1vbnRoICE9PSB2b2lkIDAgJiYgKGcyKG4ucHJvcHMuZGF5KSArIDEpICUgMTIgPT09IG4ucHJvcHMubW9udGg7XG4gICAgfSksIHoxKGYxKG4pLCBcImlzQ3VycmVudERheVwiLCBmdW5jdGlvbigpIHtcbiAgICAgIHJldHVybiBuLmlzU2FtZURheShHMCgpKTtcbiAgICB9KSwgejEoZjEobiksIFwiaXNTZWxlY3RlZFwiLCBmdW5jdGlvbigpIHtcbiAgICAgIHJldHVybiBuLmlzU2FtZURheShuLnByb3BzLnNlbGVjdGVkKSB8fCBuLmlzU2FtZVdlZWsobi5wcm9wcy5zZWxlY3RlZCk7XG4gICAgfSksIHoxKGYxKG4pLCBcImdldENsYXNzTmFtZXNcIiwgZnVuY3Rpb24ocykge1xuICAgICAgdmFyIGwsIHAgPSBuLnByb3BzLmRheUNsYXNzTmFtZSA/IG4ucHJvcHMuZGF5Q2xhc3NOYW1lKHMpIDogdm9pZCAwO1xuICAgICAgcmV0dXJuIG0yKFwicmVhY3QtZGF0ZXBpY2tlcl9fZGF5XCIsIHAsIFwicmVhY3QtZGF0ZXBpY2tlcl9fZGF5LS1cIiArIGUyKG4ucHJvcHMuZGF5LCBcImRkZFwiLCBsKSwgeyBcInJlYWN0LWRhdGVwaWNrZXJfX2RheS0tZGlzYWJsZWRcIjogbi5pc0Rpc2FibGVkKCksIFwicmVhY3QtZGF0ZXBpY2tlcl9fZGF5LS1leGNsdWRlZFwiOiBuLmlzRXhjbHVkZWQoKSwgXCJyZWFjdC1kYXRlcGlja2VyX19kYXktLXNlbGVjdGVkXCI6IG4uaXNTZWxlY3RlZCgpLCBcInJlYWN0LWRhdGVwaWNrZXJfX2RheS0ta2V5Ym9hcmQtc2VsZWN0ZWRcIjogbi5pc0tleWJvYXJkU2VsZWN0ZWQoKSwgXCJyZWFjdC1kYXRlcGlja2VyX19kYXktLXJhbmdlLXN0YXJ0XCI6IG4uaXNSYW5nZVN0YXJ0KCksIFwicmVhY3QtZGF0ZXBpY2tlcl9fZGF5LS1yYW5nZS1lbmRcIjogbi5pc1JhbmdlRW5kKCksIFwicmVhY3QtZGF0ZXBpY2tlcl9fZGF5LS1pbi1yYW5nZVwiOiBuLmlzSW5SYW5nZSgpLCBcInJlYWN0LWRhdGVwaWNrZXJfX2RheS0taW4tc2VsZWN0aW5nLXJhbmdlXCI6IG4uaXNJblNlbGVjdGluZ1JhbmdlKCksIFwicmVhY3QtZGF0ZXBpY2tlcl9fZGF5LS1zZWxlY3RpbmctcmFuZ2Utc3RhcnRcIjogbi5pc1NlbGVjdGluZ1JhbmdlU3RhcnQoKSwgXCJyZWFjdC1kYXRlcGlja2VyX19kYXktLXNlbGVjdGluZy1yYW5nZS1lbmRcIjogbi5pc1NlbGVjdGluZ1JhbmdlRW5kKCksIFwicmVhY3QtZGF0ZXBpY2tlcl9fZGF5LS10b2RheVwiOiBuLmlzQ3VycmVudERheSgpLCBcInJlYWN0LWRhdGVwaWNrZXJfX2RheS0td2Vla2VuZFwiOiBuLmlzV2Vla2VuZCgpLCBcInJlYWN0LWRhdGVwaWNrZXJfX2RheS0tb3V0c2lkZS1tb250aFwiOiBuLmlzQWZ0ZXJNb250aCgpIHx8IG4uaXNCZWZvcmVNb250aCgpIH0sIG4uZ2V0SGlnaExpZ2h0ZWRDbGFzcyhcInJlYWN0LWRhdGVwaWNrZXJfX2RheS0taGlnaGxpZ2h0ZWRcIiksIG4uZ2V0SG9saWRheXNDbGFzcygpKTtcbiAgICB9KSwgejEoZjEobiksIFwiZ2V0QXJpYUxhYmVsXCIsIGZ1bmN0aW9uKCkge1xuICAgICAgdmFyIHMgPSBuLnByb3BzLCBsID0gcy5kYXksIHAgPSBzLmFyaWFMYWJlbFByZWZpeFdoZW5FbmFibGVkLCBkID0gcCA9PT0gdm9pZCAwID8gXCJDaG9vc2VcIiA6IHAsIGIgPSBzLmFyaWFMYWJlbFByZWZpeFdoZW5EaXNhYmxlZCwgTSA9IGIgPT09IHZvaWQgMCA/IFwiTm90IGF2YWlsYWJsZVwiIDogYiwgdSA9IG4uaXNEaXNhYmxlZCgpIHx8IG4uaXNFeGNsdWRlZCgpID8gTSA6IGQ7XG4gICAgICByZXR1cm4gXCJcIi5jb25jYXQodSwgXCIgXCIpLmNvbmNhdChlMihsLCBcIlBQUFBcIiwgbi5wcm9wcy5sb2NhbGUpKTtcbiAgICB9KSwgejEoZjEobiksIFwiZ2V0VGl0bGVcIiwgZnVuY3Rpb24oKSB7XG4gICAgICB2YXIgcyA9IG4ucHJvcHMsIGwgPSBzLmRheSwgcCA9IHMuaG9saWRheXMsIGQgPSBwID09PSB2b2lkIDAgPyAvKiBAX19QVVJFX18gKi8gbmV3IE1hcCgpIDogcCwgYiA9IGUyKGwsIFwiTU0uZGQueXl5eVwiKTtcbiAgICAgIHJldHVybiBkLmhhcyhiKSAmJiBkLmdldChiKS5ob2xpZGF5TmFtZXMubGVuZ3RoID4gMCA/IGQuZ2V0KGIpLmhvbGlkYXlOYW1lcy5qb2luKFwiLCBcIikgOiBcIlwiO1xuICAgIH0pLCB6MShmMShuKSwgXCJnZXRUYWJJbmRleFwiLCBmdW5jdGlvbihzLCBsKSB7XG4gICAgICB2YXIgcCA9IHMgfHwgbi5wcm9wcy5zZWxlY3RlZCwgZCA9IGwgfHwgbi5wcm9wcy5wcmVTZWxlY3Rpb247XG4gICAgICByZXR1cm4gKCFuLnByb3BzLnNob3dXZWVrUGlja2VyIHx8ICFuLnByb3BzLnNob3dXZWVrTnVtYmVyICYmIG4uaXNTdGFydE9mV2VlaygpKSAmJiAobi5pc0tleWJvYXJkU2VsZWN0ZWQoKSB8fCBuLmlzU2FtZURheShwKSAmJiBRMChkLCBwKSkgPyAwIDogLTE7XG4gICAgfSksIHoxKGYxKG4pLCBcImhhbmRsZUZvY3VzRGF5XCIsIGZ1bmN0aW9uKCkge1xuICAgICAgdmFyIHMsIGwgPSBhcmd1bWVudHMubGVuZ3RoID4gMCAmJiBhcmd1bWVudHNbMF0gIT09IHZvaWQgMCA/IGFyZ3VtZW50c1swXSA6IHt9LCBwID0gITE7XG4gICAgICBuLmdldFRhYkluZGV4KCkgPT09IDAgJiYgIWwuaXNJbnB1dEZvY3VzZWQgJiYgbi5pc1NhbWVEYXkobi5wcm9wcy5wcmVTZWxlY3Rpb24pICYmIChkb2N1bWVudC5hY3RpdmVFbGVtZW50ICYmIGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQgIT09IGRvY3VtZW50LmJvZHkgfHwgKHAgPSAhMCksIG4ucHJvcHMuaW5saW5lICYmICFuLnByb3BzLnNob3VsZEZvY3VzRGF5SW5saW5lICYmIChwID0gITEpLCBuLnByb3BzLmNvbnRhaW5lclJlZiAmJiBuLnByb3BzLmNvbnRhaW5lclJlZi5jdXJyZW50ICYmIG4ucHJvcHMuY29udGFpbmVyUmVmLmN1cnJlbnQuY29udGFpbnMoZG9jdW1lbnQuYWN0aXZlRWxlbWVudCkgJiYgZG9jdW1lbnQuYWN0aXZlRWxlbWVudC5jbGFzc0xpc3QuY29udGFpbnMoXCJyZWFjdC1kYXRlcGlja2VyX19kYXlcIikgJiYgKHAgPSAhMCksIG4ucHJvcHMubW9udGhTaG93c0R1cGxpY2F0ZURheXNFbmQgJiYgbi5pc0FmdGVyTW9udGgoKSAmJiAocCA9ICExKSwgbi5wcm9wcy5tb250aFNob3dzRHVwbGljYXRlRGF5c1N0YXJ0ICYmIG4uaXNCZWZvcmVNb250aCgpICYmIChwID0gITEpKSwgcCAmJiAoKHMgPSBuLmRheUVsLmN1cnJlbnQpID09PSBudWxsIHx8IHMgPT09IHZvaWQgMCB8fCBzLmZvY3VzKHsgcHJldmVudFNjcm9sbDogITAgfSkpO1xuICAgIH0pLCB6MShmMShuKSwgXCJyZW5kZXJEYXlDb250ZW50c1wiLCBmdW5jdGlvbigpIHtcbiAgICAgIHJldHVybiBuLnByb3BzLm1vbnRoU2hvd3NEdXBsaWNhdGVEYXlzRW5kICYmIG4uaXNBZnRlck1vbnRoKCkgfHwgbi5wcm9wcy5tb250aFNob3dzRHVwbGljYXRlRGF5c1N0YXJ0ICYmIG4uaXNCZWZvcmVNb250aCgpID8gbnVsbCA6IG4ucHJvcHMucmVuZGVyRGF5Q29udGVudHMgPyBuLnByb3BzLnJlbmRlckRheUNvbnRlbnRzKEg4KG4ucHJvcHMuZGF5KSwgbi5wcm9wcy5kYXkpIDogSDgobi5wcm9wcy5kYXkpO1xuICAgIH0pLCB6MShmMShuKSwgXCJyZW5kZXJcIiwgZnVuY3Rpb24oKSB7XG4gICAgICByZXR1cm4gbTEuY3JlYXRlRWxlbWVudChcImRpdlwiLCB7IHJlZjogbi5kYXlFbCwgY2xhc3NOYW1lOiBuLmdldENsYXNzTmFtZXMobi5wcm9wcy5kYXkpLCBvbktleURvd246IG4uaGFuZGxlT25LZXlEb3duLCBvbkNsaWNrOiBuLmhhbmRsZUNsaWNrLCBvbk1vdXNlRW50ZXI6IG4uaGFuZGxlTW91c2VFbnRlciwgdGFiSW5kZXg6IG4uZ2V0VGFiSW5kZXgoKSwgXCJhcmlhLWxhYmVsXCI6IG4uZ2V0QXJpYUxhYmVsKCksIHJvbGU6IFwib3B0aW9uXCIsIHRpdGxlOiBuLmdldFRpdGxlKCksIFwiYXJpYS1kaXNhYmxlZFwiOiBuLmlzRGlzYWJsZWQoKSwgXCJhcmlhLWN1cnJlbnRcIjogbi5pc0N1cnJlbnREYXkoKSA/IFwiZGF0ZVwiIDogdm9pZCAwLCBcImFyaWEtc2VsZWN0ZWRcIjogbi5pc1NlbGVjdGVkKCkgfHwgbi5pc0luUmFuZ2UoKSB9LCBuLnJlbmRlckRheUNvbnRlbnRzKCksIG4uZ2V0VGl0bGUoKSAhPT0gXCJcIiAmJiBtMS5jcmVhdGVFbGVtZW50KFwic3BhblwiLCB7IGNsYXNzTmFtZTogXCJob2xpZGF5LW92ZXJsYXlcIiB9LCBuLmdldFRpdGxlKCkpKTtcbiAgICB9KSwgbjtcbiAgfVxuICByZXR1cm4gaDIobywgW3sga2V5OiBcImNvbXBvbmVudERpZE1vdW50XCIsIHZhbHVlOiBmdW5jdGlvbigpIHtcbiAgICB0aGlzLmhhbmRsZUZvY3VzRGF5KCk7XG4gIH0gfSwgeyBrZXk6IFwiY29tcG9uZW50RGlkVXBkYXRlXCIsIHZhbHVlOiBmdW5jdGlvbihuKSB7XG4gICAgdGhpcy5oYW5kbGVGb2N1c0RheShuKTtcbiAgfSB9XSksIG87XG59KCksIGZXID0gZnVuY3Rpb24oZSkge1xuICBPMihvLCBtMS5Db21wb25lbnQpO1xuICB2YXIgdCA9IGYyKG8pO1xuICBmdW5jdGlvbiBvKCkge1xuICAgIHZhciBuO1xuICAgIHoyKHRoaXMsIG8pO1xuICAgIGZvciAodmFyIHIgPSBhcmd1bWVudHMubGVuZ3RoLCBpID0gbmV3IEFycmF5KHIpLCBhID0gMDsgYSA8IHI7IGErKylcbiAgICAgIGlbYV0gPSBhcmd1bWVudHNbYV07XG4gICAgcmV0dXJuIHoxKGYxKG4gPSB0LmNhbGwuYXBwbHkodCwgW3RoaXNdLmNvbmNhdChpKSkpLCBcIndlZWtOdW1iZXJFbFwiLCBtMS5jcmVhdGVSZWYoKSksIHoxKGYxKG4pLCBcImhhbmRsZUNsaWNrXCIsIGZ1bmN0aW9uKHMpIHtcbiAgICAgIG4ucHJvcHMub25DbGljayAmJiBuLnByb3BzLm9uQ2xpY2socyk7XG4gICAgfSksIHoxKGYxKG4pLCBcImhhbmRsZU9uS2V5RG93blwiLCBmdW5jdGlvbihzKSB7XG4gICAgICBzLmtleSA9PT0gXCIgXCIgJiYgKHMucHJldmVudERlZmF1bHQoKSwgcy5rZXkgPSBcIkVudGVyXCIpLCBuLnByb3BzLmhhbmRsZU9uS2V5RG93bihzKTtcbiAgICB9KSwgejEoZjEobiksIFwiaXNLZXlib2FyZFNlbGVjdGVkXCIsIGZ1bmN0aW9uKCkge1xuICAgICAgcmV0dXJuICFuLnByb3BzLmRpc2FibGVkS2V5Ym9hcmROYXZpZ2F0aW9uICYmICFRMChuLnByb3BzLmRhdGUsIG4ucHJvcHMuc2VsZWN0ZWQpICYmIFEwKG4ucHJvcHMuZGF0ZSwgbi5wcm9wcy5wcmVTZWxlY3Rpb24pO1xuICAgIH0pLCB6MShmMShuKSwgXCJnZXRUYWJJbmRleFwiLCBmdW5jdGlvbigpIHtcbiAgICAgIHJldHVybiBuLnByb3BzLnNob3dXZWVrUGlja2VyICYmIG4ucHJvcHMuc2hvd1dlZWtOdW1iZXIgJiYgKG4uaXNLZXlib2FyZFNlbGVjdGVkKCkgfHwgUTAobi5wcm9wcy5kYXRlLCBuLnByb3BzLnNlbGVjdGVkKSAmJiBRMChuLnByb3BzLnByZVNlbGVjdGlvbiwgbi5wcm9wcy5zZWxlY3RlZCkpID8gMCA6IC0xO1xuICAgIH0pLCB6MShmMShuKSwgXCJoYW5kbGVGb2N1c1dlZWtOdW1iZXJcIiwgZnVuY3Rpb24oKSB7XG4gICAgICB2YXIgcyA9IGFyZ3VtZW50cy5sZW5ndGggPiAwICYmIGFyZ3VtZW50c1swXSAhPT0gdm9pZCAwID8gYXJndW1lbnRzWzBdIDoge30sIGwgPSAhMTtcbiAgICAgIG4uZ2V0VGFiSW5kZXgoKSA9PT0gMCAmJiAhcy5pc0lucHV0Rm9jdXNlZCAmJiBRMChuLnByb3BzLmRhdGUsIG4ucHJvcHMucHJlU2VsZWN0aW9uKSAmJiAoZG9jdW1lbnQuYWN0aXZlRWxlbWVudCAmJiBkb2N1bWVudC5hY3RpdmVFbGVtZW50ICE9PSBkb2N1bWVudC5ib2R5IHx8IChsID0gITApLCBuLnByb3BzLmlubGluZSAmJiAhbi5wcm9wcy5zaG91bGRGb2N1c0RheUlubGluZSAmJiAobCA9ICExKSwgbi5wcm9wcy5jb250YWluZXJSZWYgJiYgbi5wcm9wcy5jb250YWluZXJSZWYuY3VycmVudCAmJiBuLnByb3BzLmNvbnRhaW5lclJlZi5jdXJyZW50LmNvbnRhaW5zKGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQpICYmIGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQgJiYgZG9jdW1lbnQuYWN0aXZlRWxlbWVudC5jbGFzc0xpc3QuY29udGFpbnMoXCJyZWFjdC1kYXRlcGlja2VyX193ZWVrLW51bWJlclwiKSAmJiAobCA9ICEwKSksIGwgJiYgbi53ZWVrTnVtYmVyRWwuY3VycmVudCAmJiBuLndlZWtOdW1iZXJFbC5jdXJyZW50LmZvY3VzKHsgcHJldmVudFNjcm9sbDogITAgfSk7XG4gICAgfSksIG47XG4gIH1cbiAgcmV0dXJuIGgyKG8sIFt7IGtleTogXCJjb21wb25lbnREaWRNb3VudFwiLCB2YWx1ZTogZnVuY3Rpb24oKSB7XG4gICAgdGhpcy5oYW5kbGVGb2N1c1dlZWtOdW1iZXIoKTtcbiAgfSB9LCB7IGtleTogXCJjb21wb25lbnREaWRVcGRhdGVcIiwgdmFsdWU6IGZ1bmN0aW9uKG4pIHtcbiAgICB0aGlzLmhhbmRsZUZvY3VzV2Vla051bWJlcihuKTtcbiAgfSB9LCB7IGtleTogXCJyZW5kZXJcIiwgdmFsdWU6IGZ1bmN0aW9uKCkge1xuICAgIHZhciBuID0gdGhpcy5wcm9wcywgciA9IG4ud2Vla051bWJlciwgaSA9IG4uYXJpYUxhYmVsUHJlZml4LCBhID0gaSA9PT0gdm9pZCAwID8gXCJ3ZWVrIFwiIDogaSwgcyA9IHsgXCJyZWFjdC1kYXRlcGlja2VyX193ZWVrLW51bWJlclwiOiAhMCwgXCJyZWFjdC1kYXRlcGlja2VyX193ZWVrLW51bWJlci0tY2xpY2thYmxlXCI6ICEhbi5vbkNsaWNrLCBcInJlYWN0LWRhdGVwaWNrZXJfX3dlZWstbnVtYmVyLS1zZWxlY3RlZFwiOiBRMCh0aGlzLnByb3BzLmRhdGUsIHRoaXMucHJvcHMuc2VsZWN0ZWQpLCBcInJlYWN0LWRhdGVwaWNrZXJfX3dlZWstbnVtYmVyLS1rZXlib2FyZC1zZWxlY3RlZFwiOiB0aGlzLmlzS2V5Ym9hcmRTZWxlY3RlZCgpIH07XG4gICAgcmV0dXJuIG0xLmNyZWF0ZUVsZW1lbnQoXCJkaXZcIiwgeyByZWY6IHRoaXMud2Vla051bWJlckVsLCBjbGFzc05hbWU6IG0yKHMpLCBcImFyaWEtbGFiZWxcIjogXCJcIi5jb25jYXQoYSwgXCIgXCIpLmNvbmNhdCh0aGlzLnByb3BzLndlZWtOdW1iZXIpLCBvbkNsaWNrOiB0aGlzLmhhbmRsZUNsaWNrLCBvbktleURvd246IHRoaXMuaGFuZGxlT25LZXlEb3duLCB0YWJJbmRleDogdGhpcy5nZXRUYWJJbmRleCgpIH0sIHIpO1xuICB9IH1dLCBbeyBrZXk6IFwiZGVmYXVsdFByb3BzXCIsIGdldDogZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIHsgYXJpYUxhYmVsUHJlZml4OiBcIndlZWsgXCIgfTtcbiAgfSB9XSksIG87XG59KCksIGdXID0gZnVuY3Rpb24oZSkge1xuICBPMihvLCBtMS5Db21wb25lbnQpO1xuICB2YXIgdCA9IGYyKG8pO1xuICBmdW5jdGlvbiBvKCkge1xuICAgIHZhciBuO1xuICAgIHoyKHRoaXMsIG8pO1xuICAgIGZvciAodmFyIHIgPSBhcmd1bWVudHMubGVuZ3RoLCBpID0gbmV3IEFycmF5KHIpLCBhID0gMDsgYSA8IHI7IGErKylcbiAgICAgIGlbYV0gPSBhcmd1bWVudHNbYV07XG4gICAgcmV0dXJuIHoxKGYxKG4gPSB0LmNhbGwuYXBwbHkodCwgW3RoaXNdLmNvbmNhdChpKSkpLCBcImhhbmRsZURheUNsaWNrXCIsIGZ1bmN0aW9uKHMsIGwpIHtcbiAgICAgIG4ucHJvcHMub25EYXlDbGljayAmJiBuLnByb3BzLm9uRGF5Q2xpY2socywgbCk7XG4gICAgfSksIHoxKGYxKG4pLCBcImhhbmRsZURheU1vdXNlRW50ZXJcIiwgZnVuY3Rpb24ocykge1xuICAgICAgbi5wcm9wcy5vbkRheU1vdXNlRW50ZXIgJiYgbi5wcm9wcy5vbkRheU1vdXNlRW50ZXIocyk7XG4gICAgfSksIHoxKGYxKG4pLCBcImhhbmRsZVdlZWtDbGlja1wiLCBmdW5jdGlvbihzLCBsLCBwKSB7XG4gICAgICBpZiAodHlwZW9mIG4ucHJvcHMub25XZWVrU2VsZWN0ID09IFwiZnVuY3Rpb25cIiAmJiBuLnByb3BzLm9uV2Vla1NlbGVjdChzLCBsLCBwKSwgbi5wcm9wcy5zaG93V2Vla1BpY2tlcikge1xuICAgICAgICB2YXIgZCA9IFhlKHMsIG4ucHJvcHMubG9jYWxlLCBuLnByb3BzLmNhbGVuZGFyU3RhcnREYXkpO1xuICAgICAgICBuLmhhbmRsZURheUNsaWNrKGQsIHApO1xuICAgICAgfVxuICAgICAgbi5wcm9wcy5zaG91bGRDbG9zZU9uU2VsZWN0ICYmIG4ucHJvcHMuc2V0T3BlbighMSk7XG4gICAgfSksIHoxKGYxKG4pLCBcImZvcm1hdFdlZWtOdW1iZXJcIiwgZnVuY3Rpb24ocykge1xuICAgICAgcmV0dXJuIG4ucHJvcHMuZm9ybWF0V2Vla051bWJlciA/IG4ucHJvcHMuZm9ybWF0V2Vla051bWJlcihzKSA6IGZ1bmN0aW9uKGwsIHApIHtcbiAgICAgICAgdmFyIGQgPSBwICYmIFN0KHApIHx8IGMzKCkgJiYgU3QoYzMoKSk7XG4gICAgICAgIHJldHVybiBmdyhsLCBkID8geyBsb2NhbGU6IGQgfSA6IG51bGwpO1xuICAgICAgfShzKTtcbiAgICB9KSwgejEoZjEobiksIFwicmVuZGVyRGF5c1wiLCBmdW5jdGlvbigpIHtcbiAgICAgIHZhciBzID0gWGUobi5wcm9wcy5kYXksIG4ucHJvcHMubG9jYWxlLCBuLnByb3BzLmNhbGVuZGFyU3RhcnREYXkpLCBsID0gW10sIHAgPSBuLmZvcm1hdFdlZWtOdW1iZXIocyk7XG4gICAgICBpZiAobi5wcm9wcy5zaG93V2Vla051bWJlcikge1xuICAgICAgICB2YXIgZCA9IG4ucHJvcHMub25XZWVrU2VsZWN0IHx8IG4ucHJvcHMuc2hvd1dlZWtQaWNrZXIgPyBuLmhhbmRsZVdlZWtDbGljay5iaW5kKGYxKG4pLCBzLCBwKSA6IHZvaWQgMDtcbiAgICAgICAgbC5wdXNoKG0xLmNyZWF0ZUVsZW1lbnQoZlcsIHsga2V5OiBcIldcIiwgd2Vla051bWJlcjogcCwgZGF0ZTogcywgb25DbGljazogZCwgc2VsZWN0ZWQ6IG4ucHJvcHMuc2VsZWN0ZWQsIHByZVNlbGVjdGlvbjogbi5wcm9wcy5wcmVTZWxlY3Rpb24sIGFyaWFMYWJlbFByZWZpeDogbi5wcm9wcy5hcmlhTGFiZWxQcmVmaXgsIHNob3dXZWVrUGlja2VyOiBuLnByb3BzLnNob3dXZWVrUGlja2VyLCBzaG93V2Vla051bWJlcjogbi5wcm9wcy5zaG93V2Vla051bWJlciwgZGlzYWJsZWRLZXlib2FyZE5hdmlnYXRpb246IG4ucHJvcHMuZGlzYWJsZWRLZXlib2FyZE5hdmlnYXRpb24sIGhhbmRsZU9uS2V5RG93bjogbi5wcm9wcy5oYW5kbGVPbktleURvd24sIGlzSW5wdXRGb2N1c2VkOiBuLnByb3BzLmlzSW5wdXRGb2N1c2VkLCBjb250YWluZXJSZWY6IG4ucHJvcHMuY29udGFpbmVyUmVmIH0pKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBsLmNvbmNhdChbMCwgMSwgMiwgMywgNCwgNSwgNl0ubWFwKGZ1bmN0aW9uKGIpIHtcbiAgICAgICAgdmFyIE0gPSBhbyhzLCBiKTtcbiAgICAgICAgcmV0dXJuIG0xLmNyZWF0ZUVsZW1lbnQoT1csIHsgYXJpYUxhYmVsUHJlZml4V2hlbkVuYWJsZWQ6IG4ucHJvcHMuY2hvb3NlRGF5QXJpYUxhYmVsUHJlZml4LCBhcmlhTGFiZWxQcmVmaXhXaGVuRGlzYWJsZWQ6IG4ucHJvcHMuZGlzYWJsZWREYXlBcmlhTGFiZWxQcmVmaXgsIGtleTogTS52YWx1ZU9mKCksIGRheTogTSwgbW9udGg6IG4ucHJvcHMubW9udGgsIG9uQ2xpY2s6IG4uaGFuZGxlRGF5Q2xpY2suYmluZChmMShuKSwgTSksIG9uTW91c2VFbnRlcjogbi5oYW5kbGVEYXlNb3VzZUVudGVyLmJpbmQoZjEobiksIE0pLCBtaW5EYXRlOiBuLnByb3BzLm1pbkRhdGUsIG1heERhdGU6IG4ucHJvcHMubWF4RGF0ZSwgZXhjbHVkZURhdGVzOiBuLnByb3BzLmV4Y2x1ZGVEYXRlcywgZXhjbHVkZURhdGVJbnRlcnZhbHM6IG4ucHJvcHMuZXhjbHVkZURhdGVJbnRlcnZhbHMsIGluY2x1ZGVEYXRlczogbi5wcm9wcy5pbmNsdWRlRGF0ZXMsIGluY2x1ZGVEYXRlSW50ZXJ2YWxzOiBuLnByb3BzLmluY2x1ZGVEYXRlSW50ZXJ2YWxzLCBoaWdobGlnaHREYXRlczogbi5wcm9wcy5oaWdobGlnaHREYXRlcywgaG9saWRheXM6IG4ucHJvcHMuaG9saWRheXMsIHNlbGVjdGluZ0RhdGU6IG4ucHJvcHMuc2VsZWN0aW5nRGF0ZSwgZmlsdGVyRGF0ZTogbi5wcm9wcy5maWx0ZXJEYXRlLCBwcmVTZWxlY3Rpb246IG4ucHJvcHMucHJlU2VsZWN0aW9uLCBzZWxlY3RlZDogbi5wcm9wcy5zZWxlY3RlZCwgc2VsZWN0c1N0YXJ0OiBuLnByb3BzLnNlbGVjdHNTdGFydCwgc2VsZWN0c0VuZDogbi5wcm9wcy5zZWxlY3RzRW5kLCBzZWxlY3RzUmFuZ2U6IG4ucHJvcHMuc2VsZWN0c1JhbmdlLCBzaG93V2Vla1BpY2tlcjogbi5wcm9wcy5zaG93V2Vla1BpY2tlciwgc2hvd1dlZWtOdW1iZXI6IG4ucHJvcHMuc2hvd1dlZWtOdW1iZXIsIHNlbGVjdHNEaXNhYmxlZERheXNJblJhbmdlOiBuLnByb3BzLnNlbGVjdHNEaXNhYmxlZERheXNJblJhbmdlLCBzdGFydERhdGU6IG4ucHJvcHMuc3RhcnREYXRlLCBlbmREYXRlOiBuLnByb3BzLmVuZERhdGUsIGRheUNsYXNzTmFtZTogbi5wcm9wcy5kYXlDbGFzc05hbWUsIHJlbmRlckRheUNvbnRlbnRzOiBuLnByb3BzLnJlbmRlckRheUNvbnRlbnRzLCBkaXNhYmxlZEtleWJvYXJkTmF2aWdhdGlvbjogbi5wcm9wcy5kaXNhYmxlZEtleWJvYXJkTmF2aWdhdGlvbiwgaGFuZGxlT25LZXlEb3duOiBuLnByb3BzLmhhbmRsZU9uS2V5RG93biwgaXNJbnB1dEZvY3VzZWQ6IG4ucHJvcHMuaXNJbnB1dEZvY3VzZWQsIGNvbnRhaW5lclJlZjogbi5wcm9wcy5jb250YWluZXJSZWYsIGlubGluZTogbi5wcm9wcy5pbmxpbmUsIHNob3VsZEZvY3VzRGF5SW5saW5lOiBuLnByb3BzLnNob3VsZEZvY3VzRGF5SW5saW5lLCBtb250aFNob3dzRHVwbGljYXRlRGF5c0VuZDogbi5wcm9wcy5tb250aFNob3dzRHVwbGljYXRlRGF5c0VuZCwgbW9udGhTaG93c0R1cGxpY2F0ZURheXNTdGFydDogbi5wcm9wcy5tb250aFNob3dzRHVwbGljYXRlRGF5c1N0YXJ0LCBsb2NhbGU6IG4ucHJvcHMubG9jYWxlIH0pO1xuICAgICAgfSkpO1xuICAgIH0pLCB6MShmMShuKSwgXCJzdGFydE9mV2Vla1wiLCBmdW5jdGlvbigpIHtcbiAgICAgIHJldHVybiBYZShuLnByb3BzLmRheSwgbi5wcm9wcy5sb2NhbGUsIG4ucHJvcHMuY2FsZW5kYXJTdGFydERheSk7XG4gICAgfSksIHoxKGYxKG4pLCBcImlzS2V5Ym9hcmRTZWxlY3RlZFwiLCBmdW5jdGlvbigpIHtcbiAgICAgIHJldHVybiAhbi5wcm9wcy5kaXNhYmxlZEtleWJvYXJkTmF2aWdhdGlvbiAmJiAhUTAobi5zdGFydE9mV2VlaygpLCBuLnByb3BzLnNlbGVjdGVkKSAmJiBRMChuLnN0YXJ0T2ZXZWVrKCksIG4ucHJvcHMucHJlU2VsZWN0aW9uKTtcbiAgICB9KSwgbjtcbiAgfVxuICByZXR1cm4gaDIobywgW3sga2V5OiBcInJlbmRlclwiLCB2YWx1ZTogZnVuY3Rpb24oKSB7XG4gICAgdmFyIG4gPSB7IFwicmVhY3QtZGF0ZXBpY2tlcl9fd2Vla1wiOiAhMCwgXCJyZWFjdC1kYXRlcGlja2VyX193ZWVrLS1zZWxlY3RlZFwiOiBRMCh0aGlzLnN0YXJ0T2ZXZWVrKCksIHRoaXMucHJvcHMuc2VsZWN0ZWQpLCBcInJlYWN0LWRhdGVwaWNrZXJfX3dlZWstLWtleWJvYXJkLXNlbGVjdGVkXCI6IHRoaXMuaXNLZXlib2FyZFNlbGVjdGVkKCkgfTtcbiAgICByZXR1cm4gbTEuY3JlYXRlRWxlbWVudChcImRpdlwiLCB7IGNsYXNzTmFtZTogbTIobikgfSwgdGhpcy5yZW5kZXJEYXlzKCkpO1xuICB9IH1dLCBbeyBrZXk6IFwiZGVmYXVsdFByb3BzXCIsIGdldDogZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIHsgc2hvdWxkQ2xvc2VPblNlbGVjdDogITAgfTtcbiAgfSB9XSksIG87XG59KCksIE9wID0gXCJ0d29fY29sdW1uc1wiLCBmcCA9IFwidGhyZWVfY29sdW1uc1wiLCBncCA9IFwiZm91cl9jb2x1bW5zXCIsIElpID0gejEoejEoejEoe30sIE9wLCB7IGdyaWQ6IFtbMCwgMV0sIFsyLCAzXSwgWzQsIDVdLCBbNiwgN10sIFs4LCA5XSwgWzEwLCAxMV1dLCB2ZXJ0aWNhbE5hdmlnYXRpb25PZmZzZXQ6IDIgfSksIGZwLCB7IGdyaWQ6IFtbMCwgMSwgMl0sIFszLCA0LCA1XSwgWzYsIDcsIDhdLCBbOSwgMTAsIDExXV0sIHZlcnRpY2FsTmF2aWdhdGlvbk9mZnNldDogMyB9KSwgZ3AsIHsgZ3JpZDogW1swLCAxLCAyLCAzXSwgWzQsIDUsIDYsIDddLCBbOCwgOSwgMTAsIDExXV0sIHZlcnRpY2FsTmF2aWdhdGlvbk9mZnNldDogNCB9KTtcbmZ1bmN0aW9uIGc3KGUsIHQpIHtcbiAgcmV0dXJuIGUgPyBncCA6IHQgPyBPcCA6IGZwO1xufVxudmFyIENXID0gZnVuY3Rpb24oZSkge1xuICBPMihvLCBtMS5Db21wb25lbnQpO1xuICB2YXIgdCA9IGYyKG8pO1xuICBmdW5jdGlvbiBvKCkge1xuICAgIHZhciBuO1xuICAgIHoyKHRoaXMsIG8pO1xuICAgIGZvciAodmFyIHIgPSBhcmd1bWVudHMubGVuZ3RoLCBpID0gbmV3IEFycmF5KHIpLCBhID0gMDsgYSA8IHI7IGErKylcbiAgICAgIGlbYV0gPSBhcmd1bWVudHNbYV07XG4gICAgcmV0dXJuIHoxKGYxKG4gPSB0LmNhbGwuYXBwbHkodCwgW3RoaXNdLmNvbmNhdChpKSkpLCBcIk1PTlRIX1JFRlNcIiwgQXIoQXJyYXkoMTIpKS5tYXAoZnVuY3Rpb24oKSB7XG4gICAgICByZXR1cm4gbTEuY3JlYXRlUmVmKCk7XG4gICAgfSkpLCB6MShmMShuKSwgXCJRVUFSVEVSX1JFRlNcIiwgQXIoQXJyYXkoNCkpLm1hcChmdW5jdGlvbigpIHtcbiAgICAgIHJldHVybiBtMS5jcmVhdGVSZWYoKTtcbiAgICB9KSksIHoxKGYxKG4pLCBcImlzRGlzYWJsZWRcIiwgZnVuY3Rpb24ocykge1xuICAgICAgcmV0dXJuIFU0KHMsIG4ucHJvcHMpO1xuICAgIH0pLCB6MShmMShuKSwgXCJpc0V4Y2x1ZGVkXCIsIGZ1bmN0aW9uKHMpIHtcbiAgICAgIHJldHVybiBwNihzLCBuLnByb3BzKTtcbiAgICB9KSwgejEoZjEobiksIFwiaGFuZGxlRGF5Q2xpY2tcIiwgZnVuY3Rpb24ocywgbCkge1xuICAgICAgbi5wcm9wcy5vbkRheUNsaWNrICYmIG4ucHJvcHMub25EYXlDbGljayhzLCBsLCBuLnByb3BzLm9yZGVySW5EaXNwbGF5KTtcbiAgICB9KSwgejEoZjEobiksIFwiaGFuZGxlRGF5TW91c2VFbnRlclwiLCBmdW5jdGlvbihzKSB7XG4gICAgICBuLnByb3BzLm9uRGF5TW91c2VFbnRlciAmJiBuLnByb3BzLm9uRGF5TW91c2VFbnRlcihzKTtcbiAgICB9KSwgejEoZjEobiksIFwiaGFuZGxlTW91c2VMZWF2ZVwiLCBmdW5jdGlvbigpIHtcbiAgICAgIG4ucHJvcHMub25Nb3VzZUxlYXZlICYmIG4ucHJvcHMub25Nb3VzZUxlYXZlKCk7XG4gICAgfSksIHoxKGYxKG4pLCBcImlzUmFuZ2VTdGFydE1vbnRoXCIsIGZ1bmN0aW9uKHMpIHtcbiAgICAgIHZhciBsID0gbi5wcm9wcywgcCA9IGwuZGF5LCBkID0gbC5zdGFydERhdGUsIGIgPSBsLmVuZERhdGU7XG4gICAgICByZXR1cm4gISghZCB8fCAhYikgJiYgZmUoVzIocCwgcyksIGQpO1xuICAgIH0pLCB6MShmMShuKSwgXCJpc1JhbmdlU3RhcnRRdWFydGVyXCIsIGZ1bmN0aW9uKHMpIHtcbiAgICAgIHZhciBsID0gbi5wcm9wcywgcCA9IGwuZGF5LCBkID0gbC5zdGFydERhdGUsIGIgPSBsLmVuZERhdGU7XG4gICAgICByZXR1cm4gISghZCB8fCAhYikgJiYgTzQodjMocCwgcyksIGQpO1xuICAgIH0pLCB6MShmMShuKSwgXCJpc1JhbmdlRW5kTW9udGhcIiwgZnVuY3Rpb24ocykge1xuICAgICAgdmFyIGwgPSBuLnByb3BzLCBwID0gbC5kYXksIGQgPSBsLnN0YXJ0RGF0ZSwgYiA9IGwuZW5kRGF0ZTtcbiAgICAgIHJldHVybiAhKCFkIHx8ICFiKSAmJiBmZShXMihwLCBzKSwgYik7XG4gICAgfSksIHoxKGYxKG4pLCBcImlzUmFuZ2VFbmRRdWFydGVyXCIsIGZ1bmN0aW9uKHMpIHtcbiAgICAgIHZhciBsID0gbi5wcm9wcywgcCA9IGwuZGF5LCBkID0gbC5zdGFydERhdGUsIGIgPSBsLmVuZERhdGU7XG4gICAgICByZXR1cm4gISghZCB8fCAhYikgJiYgTzQodjMocCwgcyksIGIpO1xuICAgIH0pLCB6MShmMShuKSwgXCJpc0luU2VsZWN0aW5nUmFuZ2VNb250aFwiLCBmdW5jdGlvbihzKSB7XG4gICAgICB2YXIgbCwgcCA9IG4ucHJvcHMsIGQgPSBwLmRheSwgYiA9IHAuc2VsZWN0c1N0YXJ0LCBNID0gcC5zZWxlY3RzRW5kLCB1ID0gcC5zZWxlY3RzUmFuZ2UsIEEgPSBwLnN0YXJ0RGF0ZSwgeiA9IHAuZW5kRGF0ZSwgZiA9IChsID0gbi5wcm9wcy5zZWxlY3RpbmdEYXRlKSAhPT0gbnVsbCAmJiBsICE9PSB2b2lkIDAgPyBsIDogbi5wcm9wcy5wcmVTZWxlY3Rpb247XG4gICAgICByZXR1cm4gISghKGIgfHwgTSB8fCB1KSB8fCAhZikgJiYgKGIgJiYgeiA/IGtpKGYsIHosIHMsIGQpIDogKE0gJiYgQSB8fCAhKCF1IHx8ICFBIHx8IHopKSAmJiBraShBLCBmLCBzLCBkKSk7XG4gICAgfSksIHoxKGYxKG4pLCBcImlzU2VsZWN0aW5nTW9udGhSYW5nZVN0YXJ0XCIsIGZ1bmN0aW9uKHMpIHtcbiAgICAgIHZhciBsO1xuICAgICAgaWYgKCFuLmlzSW5TZWxlY3RpbmdSYW5nZU1vbnRoKHMpKVxuICAgICAgICByZXR1cm4gITE7XG4gICAgICB2YXIgcCA9IG4ucHJvcHMsIGQgPSBwLmRheSwgYiA9IHAuc3RhcnREYXRlLCBNID0gcC5zZWxlY3RzU3RhcnQsIHUgPSBXMihkLCBzKSwgQSA9IChsID0gbi5wcm9wcy5zZWxlY3RpbmdEYXRlKSAhPT0gbnVsbCAmJiBsICE9PSB2b2lkIDAgPyBsIDogbi5wcm9wcy5wcmVTZWxlY3Rpb247XG4gICAgICByZXR1cm4gZmUodSwgTSA/IEEgOiBiKTtcbiAgICB9KSwgejEoZjEobiksIFwiaXNTZWxlY3RpbmdNb250aFJhbmdlRW5kXCIsIGZ1bmN0aW9uKHMpIHtcbiAgICAgIHZhciBsO1xuICAgICAgaWYgKCFuLmlzSW5TZWxlY3RpbmdSYW5nZU1vbnRoKHMpKVxuICAgICAgICByZXR1cm4gITE7XG4gICAgICB2YXIgcCA9IG4ucHJvcHMsIGQgPSBwLmRheSwgYiA9IHAuZW5kRGF0ZSwgTSA9IHAuc2VsZWN0c0VuZCwgdSA9IHAuc2VsZWN0c1JhbmdlLCBBID0gVzIoZCwgcyksIHogPSAobCA9IG4ucHJvcHMuc2VsZWN0aW5nRGF0ZSkgIT09IG51bGwgJiYgbCAhPT0gdm9pZCAwID8gbCA6IG4ucHJvcHMucHJlU2VsZWN0aW9uO1xuICAgICAgcmV0dXJuIGZlKEEsIE0gfHwgdSA/IHogOiBiKTtcbiAgICB9KSwgejEoZjEobiksIFwiaXNJblNlbGVjdGluZ1JhbmdlUXVhcnRlclwiLCBmdW5jdGlvbihzKSB7XG4gICAgICB2YXIgbCwgcCA9IG4ucHJvcHMsIGQgPSBwLmRheSwgYiA9IHAuc2VsZWN0c1N0YXJ0LCBNID0gcC5zZWxlY3RzRW5kLCB1ID0gcC5zZWxlY3RzUmFuZ2UsIEEgPSBwLnN0YXJ0RGF0ZSwgeiA9IHAuZW5kRGF0ZSwgZiA9IChsID0gbi5wcm9wcy5zZWxlY3RpbmdEYXRlKSAhPT0gbnVsbCAmJiBsICE9PSB2b2lkIDAgPyBsIDogbi5wcm9wcy5wcmVTZWxlY3Rpb247XG4gICAgICByZXR1cm4gISghKGIgfHwgTSB8fCB1KSB8fCAhZikgJiYgKGIgJiYgeiA/IFRpKGYsIHosIHMsIGQpIDogKE0gJiYgQSB8fCAhKCF1IHx8ICFBIHx8IHopKSAmJiBUaShBLCBmLCBzLCBkKSk7XG4gICAgfSksIHoxKGYxKG4pLCBcImlzV2Vla0luTW9udGhcIiwgZnVuY3Rpb24ocykge1xuICAgICAgdmFyIGwgPSBuLnByb3BzLmRheSwgcCA9IGFvKHMsIDYpO1xuICAgICAgcmV0dXJuIGZlKHMsIGwpIHx8IGZlKHAsIGwpO1xuICAgIH0pLCB6MShmMShuKSwgXCJpc0N1cnJlbnRNb250aFwiLCBmdW5jdGlvbihzLCBsKSB7XG4gICAgICByZXR1cm4gTDAocykgPT09IEwwKEcwKCkpICYmIGwgPT09IGcyKEcwKCkpO1xuICAgIH0pLCB6MShmMShuKSwgXCJpc0N1cnJlbnRRdWFydGVyXCIsIGZ1bmN0aW9uKHMsIGwpIHtcbiAgICAgIHJldHVybiBMMChzKSA9PT0gTDAoRzAoKSkgJiYgbCA9PT0gUzMoRzAoKSk7XG4gICAgfSksIHoxKGYxKG4pLCBcImlzU2VsZWN0ZWRNb250aFwiLCBmdW5jdGlvbihzLCBsLCBwKSB7XG4gICAgICByZXR1cm4gZzIocCkgPT09IGwgJiYgTDAocykgPT09IEwwKHApO1xuICAgIH0pLCB6MShmMShuKSwgXCJpc1NlbGVjdGVkUXVhcnRlclwiLCBmdW5jdGlvbihzLCBsLCBwKSB7XG4gICAgICByZXR1cm4gUzMocykgPT09IGwgJiYgTDAocykgPT09IEwwKHApO1xuICAgIH0pLCB6MShmMShuKSwgXCJyZW5kZXJXZWVrc1wiLCBmdW5jdGlvbigpIHtcbiAgICAgIGZvciAodmFyIHMgPSBbXSwgbCA9IG4ucHJvcHMuZml4ZWRIZWlnaHQsIHAgPSAwLCBkID0gITEsIGIgPSBYZShCdChuLnByb3BzLmRheSksIG4ucHJvcHMubG9jYWxlLCBuLnByb3BzLmNhbGVuZGFyU3RhcnREYXkpOyBzLnB1c2gobTEuY3JlYXRlRWxlbWVudChnVywgeyBhcmlhTGFiZWxQcmVmaXg6IG4ucHJvcHMud2Vla0FyaWFMYWJlbFByZWZpeCwgY2hvb3NlRGF5QXJpYUxhYmVsUHJlZml4OiBuLnByb3BzLmNob29zZURheUFyaWFMYWJlbFByZWZpeCwgZGlzYWJsZWREYXlBcmlhTGFiZWxQcmVmaXg6IG4ucHJvcHMuZGlzYWJsZWREYXlBcmlhTGFiZWxQcmVmaXgsIGtleTogcCwgZGF5OiBiLCBtb250aDogZzIobi5wcm9wcy5kYXkpLCBvbkRheUNsaWNrOiBuLmhhbmRsZURheUNsaWNrLCBvbkRheU1vdXNlRW50ZXI6IG4uaGFuZGxlRGF5TW91c2VFbnRlciwgb25XZWVrU2VsZWN0OiBuLnByb3BzLm9uV2Vla1NlbGVjdCwgZm9ybWF0V2Vla051bWJlcjogbi5wcm9wcy5mb3JtYXRXZWVrTnVtYmVyLCBsb2NhbGU6IG4ucHJvcHMubG9jYWxlLCBtaW5EYXRlOiBuLnByb3BzLm1pbkRhdGUsIG1heERhdGU6IG4ucHJvcHMubWF4RGF0ZSwgZXhjbHVkZURhdGVzOiBuLnByb3BzLmV4Y2x1ZGVEYXRlcywgZXhjbHVkZURhdGVJbnRlcnZhbHM6IG4ucHJvcHMuZXhjbHVkZURhdGVJbnRlcnZhbHMsIGluY2x1ZGVEYXRlczogbi5wcm9wcy5pbmNsdWRlRGF0ZXMsIGluY2x1ZGVEYXRlSW50ZXJ2YWxzOiBuLnByb3BzLmluY2x1ZGVEYXRlSW50ZXJ2YWxzLCBpbmxpbmU6IG4ucHJvcHMuaW5saW5lLCBzaG91bGRGb2N1c0RheUlubGluZTogbi5wcm9wcy5zaG91bGRGb2N1c0RheUlubGluZSwgaGlnaGxpZ2h0RGF0ZXM6IG4ucHJvcHMuaGlnaGxpZ2h0RGF0ZXMsIGhvbGlkYXlzOiBuLnByb3BzLmhvbGlkYXlzLCBzZWxlY3RpbmdEYXRlOiBuLnByb3BzLnNlbGVjdGluZ0RhdGUsIGZpbHRlckRhdGU6IG4ucHJvcHMuZmlsdGVyRGF0ZSwgcHJlU2VsZWN0aW9uOiBuLnByb3BzLnByZVNlbGVjdGlvbiwgc2VsZWN0ZWQ6IG4ucHJvcHMuc2VsZWN0ZWQsIHNlbGVjdHNTdGFydDogbi5wcm9wcy5zZWxlY3RzU3RhcnQsIHNlbGVjdHNFbmQ6IG4ucHJvcHMuc2VsZWN0c0VuZCwgc2VsZWN0c1JhbmdlOiBuLnByb3BzLnNlbGVjdHNSYW5nZSwgc2VsZWN0c0Rpc2FibGVkRGF5c0luUmFuZ2U6IG4ucHJvcHMuc2VsZWN0c0Rpc2FibGVkRGF5c0luUmFuZ2UsIHNob3dXZWVrTnVtYmVyOiBuLnByb3BzLnNob3dXZWVrTnVtYmVycywgc2hvd1dlZWtQaWNrZXI6IG4ucHJvcHMuc2hvd1dlZWtQaWNrZXIsIHN0YXJ0RGF0ZTogbi5wcm9wcy5zdGFydERhdGUsIGVuZERhdGU6IG4ucHJvcHMuZW5kRGF0ZSwgZGF5Q2xhc3NOYW1lOiBuLnByb3BzLmRheUNsYXNzTmFtZSwgc2V0T3Blbjogbi5wcm9wcy5zZXRPcGVuLCBzaG91bGRDbG9zZU9uU2VsZWN0OiBuLnByb3BzLnNob3VsZENsb3NlT25TZWxlY3QsIGRpc2FibGVkS2V5Ym9hcmROYXZpZ2F0aW9uOiBuLnByb3BzLmRpc2FibGVkS2V5Ym9hcmROYXZpZ2F0aW9uLCByZW5kZXJEYXlDb250ZW50czogbi5wcm9wcy5yZW5kZXJEYXlDb250ZW50cywgaGFuZGxlT25LZXlEb3duOiBuLnByb3BzLmhhbmRsZU9uS2V5RG93biwgaXNJbnB1dEZvY3VzZWQ6IG4ucHJvcHMuaXNJbnB1dEZvY3VzZWQsIGNvbnRhaW5lclJlZjogbi5wcm9wcy5jb250YWluZXJSZWYsIGNhbGVuZGFyU3RhcnREYXk6IG4ucHJvcHMuY2FsZW5kYXJTdGFydERheSwgbW9udGhTaG93c0R1cGxpY2F0ZURheXNFbmQ6IG4ucHJvcHMubW9udGhTaG93c0R1cGxpY2F0ZURheXNFbmQsIG1vbnRoU2hvd3NEdXBsaWNhdGVEYXlzU3RhcnQ6IG4ucHJvcHMubW9udGhTaG93c0R1cGxpY2F0ZURheXNTdGFydCB9KSksICFkOyApIHtcbiAgICAgICAgcCsrLCBiID0gcDQoYiwgMSk7XG4gICAgICAgIHZhciBNID0gbCAmJiBwID49IDYsIHUgPSAhbCAmJiAhbi5pc1dlZWtJbk1vbnRoKGIpO1xuICAgICAgICBpZiAoTSB8fCB1KSB7XG4gICAgICAgICAgaWYgKCFuLnByb3BzLnBlZWtOZXh0TW9udGgpXG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBkID0gITA7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiBzO1xuICAgIH0pLCB6MShmMShuKSwgXCJvbk1vbnRoQ2xpY2tcIiwgZnVuY3Rpb24ocywgbCkge1xuICAgICAgbi5oYW5kbGVEYXlDbGljayhCdChXMihuLnByb3BzLmRheSwgbCkpLCBzKTtcbiAgICB9KSwgejEoZjEobiksIFwib25Nb250aE1vdXNlRW50ZXJcIiwgZnVuY3Rpb24ocykge1xuICAgICAgbi5oYW5kbGVEYXlNb3VzZUVudGVyKEJ0KFcyKG4ucHJvcHMuZGF5LCBzKSkpO1xuICAgIH0pLCB6MShmMShuKSwgXCJoYW5kbGVNb250aE5hdmlnYXRpb25cIiwgZnVuY3Rpb24ocywgbCkge1xuICAgICAgbi5pc0Rpc2FibGVkKGwpIHx8IG4uaXNFeGNsdWRlZChsKSB8fCAobi5wcm9wcy5zZXRQcmVTZWxlY3Rpb24obCksIG4uTU9OVEhfUkVGU1tzXS5jdXJyZW50ICYmIG4uTU9OVEhfUkVGU1tzXS5jdXJyZW50LmZvY3VzKCkpO1xuICAgIH0pLCB6MShmMShuKSwgXCJvbk1vbnRoS2V5RG93blwiLCBmdW5jdGlvbihzLCBsKSB7XG4gICAgICB2YXIgcCA9IG4ucHJvcHMsIGQgPSBwLnNlbGVjdGVkLCBiID0gcC5wcmVTZWxlY3Rpb24sIE0gPSBwLmRpc2FibGVkS2V5Ym9hcmROYXZpZ2F0aW9uLCB1ID0gcC5zaG93VHdvQ29sdW1uTW9udGhZZWFyUGlja2VyLCBBID0gcC5zaG93Rm91ckNvbHVtbk1vbnRoWWVhclBpY2tlciwgeiA9IHAuc2V0UHJlU2VsZWN0aW9uLCBmID0gcy5rZXk7XG4gICAgICBpZiAoZiAhPT0gXCJUYWJcIiAmJiBzLnByZXZlbnREZWZhdWx0KCksICFNKSB7XG4gICAgICAgIHZhciBPID0gZzcoQSwgdSksIGggPSBJaVtPXS52ZXJ0aWNhbE5hdmlnYXRpb25PZmZzZXQsIGcgPSBJaVtPXS5ncmlkO1xuICAgICAgICBzd2l0Y2ggKGYpIHtcbiAgICAgICAgICBjYXNlIFwiRW50ZXJcIjpcbiAgICAgICAgICAgIG4ub25Nb250aENsaWNrKHMsIGwpLCB6KGQpO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSBcIkFycm93UmlnaHRcIjpcbiAgICAgICAgICAgIG4uaGFuZGxlTW9udGhOYXZpZ2F0aW9uKGwgPT09IDExID8gMCA6IGwgKyAxLCB2ZShiLCAxKSk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIFwiQXJyb3dMZWZ0XCI6XG4gICAgICAgICAgICBuLmhhbmRsZU1vbnRoTmF2aWdhdGlvbihsID09PSAwID8gMTEgOiBsIC0gMSwgXzMoYiwgMSkpO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSBcIkFycm93VXBcIjpcbiAgICAgICAgICAgIG4uaGFuZGxlTW9udGhOYXZpZ2F0aW9uKGdbMF0uaW5jbHVkZXMobCkgPyBsICsgMTIgLSBoIDogbCAtIGgsIF8zKGIsIGgpKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgXCJBcnJvd0Rvd25cIjpcbiAgICAgICAgICAgIG4uaGFuZGxlTW9udGhOYXZpZ2F0aW9uKGdbZy5sZW5ndGggLSAxXS5pbmNsdWRlcyhsKSA/IGwgLSAxMiArIGggOiBsICsgaCwgdmUoYiwgaCkpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSksIHoxKGYxKG4pLCBcIm9uUXVhcnRlckNsaWNrXCIsIGZ1bmN0aW9uKHMsIGwpIHtcbiAgICAgIG4uaGFuZGxlRGF5Q2xpY2soYzcodjMobi5wcm9wcy5kYXksIGwpKSwgcyk7XG4gICAgfSksIHoxKGYxKG4pLCBcIm9uUXVhcnRlck1vdXNlRW50ZXJcIiwgZnVuY3Rpb24ocykge1xuICAgICAgbi5oYW5kbGVEYXlNb3VzZUVudGVyKGM3KHYzKG4ucHJvcHMuZGF5LCBzKSkpO1xuICAgIH0pLCB6MShmMShuKSwgXCJoYW5kbGVRdWFydGVyTmF2aWdhdGlvblwiLCBmdW5jdGlvbihzLCBsKSB7XG4gICAgICBuLmlzRGlzYWJsZWQobCkgfHwgbi5pc0V4Y2x1ZGVkKGwpIHx8IChuLnByb3BzLnNldFByZVNlbGVjdGlvbihsKSwgbi5RVUFSVEVSX1JFRlNbcyAtIDFdLmN1cnJlbnQgJiYgbi5RVUFSVEVSX1JFRlNbcyAtIDFdLmN1cnJlbnQuZm9jdXMoKSk7XG4gICAgfSksIHoxKGYxKG4pLCBcIm9uUXVhcnRlcktleURvd25cIiwgZnVuY3Rpb24ocywgbCkge1xuICAgICAgdmFyIHAgPSBzLmtleTtcbiAgICAgIGlmICghbi5wcm9wcy5kaXNhYmxlZEtleWJvYXJkTmF2aWdhdGlvbilcbiAgICAgICAgc3dpdGNoIChwKSB7XG4gICAgICAgICAgY2FzZSBcIkVudGVyXCI6XG4gICAgICAgICAgICBuLm9uUXVhcnRlckNsaWNrKHMsIGwpLCBuLnByb3BzLnNldFByZVNlbGVjdGlvbihuLnByb3BzLnNlbGVjdGVkKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgXCJBcnJvd1JpZ2h0XCI6XG4gICAgICAgICAgICBuLmhhbmRsZVF1YXJ0ZXJOYXZpZ2F0aW9uKGwgPT09IDQgPyAxIDogbCArIDEsIFlsKG4ucHJvcHMucHJlU2VsZWN0aW9uLCAxKSk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIFwiQXJyb3dMZWZ0XCI6XG4gICAgICAgICAgICBuLmhhbmRsZVF1YXJ0ZXJOYXZpZ2F0aW9uKGwgPT09IDEgPyA0IDogbCAtIDEsIEh4KG4ucHJvcHMucHJlU2VsZWN0aW9uLCAxKSk7XG4gICAgICAgIH1cbiAgICB9KSwgejEoZjEobiksIFwiZ2V0TW9udGhDbGFzc05hbWVzXCIsIGZ1bmN0aW9uKHMpIHtcbiAgICAgIHZhciBsID0gbi5wcm9wcywgcCA9IGwuZGF5LCBkID0gbC5zdGFydERhdGUsIGIgPSBsLmVuZERhdGUsIE0gPSBsLnNlbGVjdGVkLCB1ID0gbC5taW5EYXRlLCBBID0gbC5tYXhEYXRlLCB6ID0gbC5wcmVTZWxlY3Rpb24sIGYgPSBsLm1vbnRoQ2xhc3NOYW1lLCBPID0gbC5leGNsdWRlRGF0ZXMsIGggPSBsLmluY2x1ZGVEYXRlcywgZyA9IGYgPyBmKFcyKHAsIHMpKSA6IHZvaWQgMCwgdiA9IFcyKHAsIHMpO1xuICAgICAgcmV0dXJuIG0yKFwicmVhY3QtZGF0ZXBpY2tlcl9fbW9udGgtdGV4dFwiLCBcInJlYWN0LWRhdGVwaWNrZXJfX21vbnRoLVwiLmNvbmNhdChzKSwgZywgeyBcInJlYWN0LWRhdGVwaWNrZXJfX21vbnRoLXRleHQtLWRpc2FibGVkXCI6ICh1IHx8IEEgfHwgTyB8fCBoKSAmJiBBcCh2LCBuLnByb3BzKSwgXCJyZWFjdC1kYXRlcGlja2VyX19tb250aC10ZXh0LS1zZWxlY3RlZFwiOiBuLmlzU2VsZWN0ZWRNb250aChwLCBzLCBNKSwgXCJyZWFjdC1kYXRlcGlja2VyX19tb250aC10ZXh0LS1rZXlib2FyZC1zZWxlY3RlZFwiOiAhbi5wcm9wcy5kaXNhYmxlZEtleWJvYXJkTmF2aWdhdGlvbiAmJiBnMih6KSA9PT0gcywgXCJyZWFjdC1kYXRlcGlja2VyX19tb250aC10ZXh0LS1pbi1zZWxlY3RpbmctcmFuZ2VcIjogbi5pc0luU2VsZWN0aW5nUmFuZ2VNb250aChzKSwgXCJyZWFjdC1kYXRlcGlja2VyX19tb250aC10ZXh0LS1pbi1yYW5nZVwiOiBraShkLCBiLCBzLCBwKSwgXCJyZWFjdC1kYXRlcGlja2VyX19tb250aC10ZXh0LS1yYW5nZS1zdGFydFwiOiBuLmlzUmFuZ2VTdGFydE1vbnRoKHMpLCBcInJlYWN0LWRhdGVwaWNrZXJfX21vbnRoLXRleHQtLXJhbmdlLWVuZFwiOiBuLmlzUmFuZ2VFbmRNb250aChzKSwgXCJyZWFjdC1kYXRlcGlja2VyX19tb250aC10ZXh0LS1zZWxlY3RpbmctcmFuZ2Utc3RhcnRcIjogbi5pc1NlbGVjdGluZ01vbnRoUmFuZ2VTdGFydChzKSwgXCJyZWFjdC1kYXRlcGlja2VyX19tb250aC10ZXh0LS1zZWxlY3RpbmctcmFuZ2UtZW5kXCI6IG4uaXNTZWxlY3RpbmdNb250aFJhbmdlRW5kKHMpLCBcInJlYWN0LWRhdGVwaWNrZXJfX21vbnRoLXRleHQtLXRvZGF5XCI6IG4uaXNDdXJyZW50TW9udGgocCwgcykgfSk7XG4gICAgfSksIHoxKGYxKG4pLCBcImdldFRhYkluZGV4XCIsIGZ1bmN0aW9uKHMpIHtcbiAgICAgIHZhciBsID0gZzIobi5wcm9wcy5wcmVTZWxlY3Rpb24pO1xuICAgICAgcmV0dXJuIG4ucHJvcHMuZGlzYWJsZWRLZXlib2FyZE5hdmlnYXRpb24gfHwgcyAhPT0gbCA/IFwiLTFcIiA6IFwiMFwiO1xuICAgIH0pLCB6MShmMShuKSwgXCJnZXRRdWFydGVyVGFiSW5kZXhcIiwgZnVuY3Rpb24ocykge1xuICAgICAgdmFyIGwgPSBTMyhuLnByb3BzLnByZVNlbGVjdGlvbik7XG4gICAgICByZXR1cm4gbi5wcm9wcy5kaXNhYmxlZEtleWJvYXJkTmF2aWdhdGlvbiB8fCBzICE9PSBsID8gXCItMVwiIDogXCIwXCI7XG4gICAgfSksIHoxKGYxKG4pLCBcImdldEFyaWFMYWJlbFwiLCBmdW5jdGlvbihzKSB7XG4gICAgICB2YXIgbCA9IG4ucHJvcHMsIHAgPSBsLmNob29zZURheUFyaWFMYWJlbFByZWZpeCwgZCA9IHAgPT09IHZvaWQgMCA/IFwiQ2hvb3NlXCIgOiBwLCBiID0gbC5kaXNhYmxlZERheUFyaWFMYWJlbFByZWZpeCwgTSA9IGIgPT09IHZvaWQgMCA/IFwiTm90IGF2YWlsYWJsZVwiIDogYiwgdSA9IGwuZGF5LCBBID0gVzIodSwgcyksIHogPSBuLmlzRGlzYWJsZWQoQSkgfHwgbi5pc0V4Y2x1ZGVkKEEpID8gTSA6IGQ7XG4gICAgICByZXR1cm4gXCJcIi5jb25jYXQoeiwgXCIgXCIpLmNvbmNhdChlMihBLCBcIk1NTU0geXl5eVwiKSk7XG4gICAgfSksIHoxKGYxKG4pLCBcImdldFF1YXJ0ZXJDbGFzc05hbWVzXCIsIGZ1bmN0aW9uKHMpIHtcbiAgICAgIHZhciBsID0gbi5wcm9wcywgcCA9IGwuZGF5LCBkID0gbC5zdGFydERhdGUsIGIgPSBsLmVuZERhdGUsIE0gPSBsLnNlbGVjdGVkLCB1ID0gbC5taW5EYXRlLCBBID0gbC5tYXhEYXRlLCB6ID0gbC5wcmVTZWxlY3Rpb24sIGYgPSBsLmRpc2FibGVkS2V5Ym9hcmROYXZpZ2F0aW9uO1xuICAgICAgcmV0dXJuIG0yKFwicmVhY3QtZGF0ZXBpY2tlcl9fcXVhcnRlci10ZXh0XCIsIFwicmVhY3QtZGF0ZXBpY2tlcl9fcXVhcnRlci1cIi5jb25jYXQocyksIHsgXCJyZWFjdC1kYXRlcGlja2VyX19xdWFydGVyLXRleHQtLWRpc2FibGVkXCI6ICh1IHx8IEEpICYmIHNXKHYzKHAsIHMpLCBuLnByb3BzKSwgXCJyZWFjdC1kYXRlcGlja2VyX19xdWFydGVyLXRleHQtLXNlbGVjdGVkXCI6IG4uaXNTZWxlY3RlZFF1YXJ0ZXIocCwgcywgTSksIFwicmVhY3QtZGF0ZXBpY2tlcl9fcXVhcnRlci10ZXh0LS1rZXlib2FyZC1zZWxlY3RlZFwiOiAhZiAmJiBTMyh6KSA9PT0gcywgXCJyZWFjdC1kYXRlcGlja2VyX19xdWFydGVyLXRleHQtLWluLXNlbGVjdGluZy1yYW5nZVwiOiBuLmlzSW5TZWxlY3RpbmdSYW5nZVF1YXJ0ZXIocyksIFwicmVhY3QtZGF0ZXBpY2tlcl9fcXVhcnRlci10ZXh0LS1pbi1yYW5nZVwiOiBUaShkLCBiLCBzLCBwKSwgXCJyZWFjdC1kYXRlcGlja2VyX19xdWFydGVyLXRleHQtLXJhbmdlLXN0YXJ0XCI6IG4uaXNSYW5nZVN0YXJ0UXVhcnRlcihzKSwgXCJyZWFjdC1kYXRlcGlja2VyX19xdWFydGVyLXRleHQtLXJhbmdlLWVuZFwiOiBuLmlzUmFuZ2VFbmRRdWFydGVyKHMpIH0pO1xuICAgIH0pLCB6MShmMShuKSwgXCJnZXRNb250aENvbnRlbnRcIiwgZnVuY3Rpb24ocykge1xuICAgICAgdmFyIGwgPSBuLnByb3BzLCBwID0gbC5zaG93RnVsbE1vbnRoWWVhclBpY2tlciwgZCA9IGwucmVuZGVyTW9udGhDb250ZW50LCBiID0gbC5sb2NhbGUsIE0gPSBsLmRheSwgdSA9IE1wKHMsIGIpLCBBID0gbDYocywgYik7XG4gICAgICByZXR1cm4gZCA/IGQocywgdSwgQSwgTSkgOiBwID8gQSA6IHU7XG4gICAgfSksIHoxKGYxKG4pLCBcImdldFF1YXJ0ZXJDb250ZW50XCIsIGZ1bmN0aW9uKHMpIHtcbiAgICAgIHZhciBsID0gbi5wcm9wcywgcCA9IGwucmVuZGVyUXVhcnRlckNvbnRlbnQsIGQgPSBmdW5jdGlvbihiLCBNKSB7XG4gICAgICAgIHJldHVybiBlMih2MyhHMCgpLCBiKSwgXCJRUVFcIiwgTSk7XG4gICAgICB9KHMsIGwubG9jYWxlKTtcbiAgICAgIHJldHVybiBwID8gcChzLCBkKSA6IGQ7XG4gICAgfSksIHoxKGYxKG4pLCBcInJlbmRlck1vbnRoc1wiLCBmdW5jdGlvbigpIHtcbiAgICAgIHZhciBzID0gbi5wcm9wcywgbCA9IHMuc2hvd1R3b0NvbHVtbk1vbnRoWWVhclBpY2tlciwgcCA9IHMuc2hvd0ZvdXJDb2x1bW5Nb250aFllYXJQaWNrZXIsIGQgPSBzLmRheSwgYiA9IHMuc2VsZWN0ZWQ7XG4gICAgICByZXR1cm4gSWlbZzcocCwgbCldLmdyaWQubWFwKGZ1bmN0aW9uKE0sIHUpIHtcbiAgICAgICAgcmV0dXJuIG0xLmNyZWF0ZUVsZW1lbnQoXCJkaXZcIiwgeyBjbGFzc05hbWU6IFwicmVhY3QtZGF0ZXBpY2tlcl9fbW9udGgtd3JhcHBlclwiLCBrZXk6IHUgfSwgTS5tYXAoZnVuY3Rpb24oQSwgeikge1xuICAgICAgICAgIHJldHVybiBtMS5jcmVhdGVFbGVtZW50KFwiZGl2XCIsIHsgcmVmOiBuLk1PTlRIX1JFRlNbQV0sIGtleTogeiwgb25DbGljazogZnVuY3Rpb24oZikge1xuICAgICAgICAgICAgbi5vbk1vbnRoQ2xpY2soZiwgQSk7XG4gICAgICAgICAgfSwgb25LZXlEb3duOiBmdW5jdGlvbihmKSB7XG4gICAgICAgICAgICBuLm9uTW9udGhLZXlEb3duKGYsIEEpO1xuICAgICAgICAgIH0sIG9uTW91c2VFbnRlcjogZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICByZXR1cm4gbi5vbk1vbnRoTW91c2VFbnRlcihBKTtcbiAgICAgICAgICB9LCB0YWJJbmRleDogbi5nZXRUYWJJbmRleChBKSwgY2xhc3NOYW1lOiBuLmdldE1vbnRoQ2xhc3NOYW1lcyhBKSwgcm9sZTogXCJvcHRpb25cIiwgXCJhcmlhLWxhYmVsXCI6IG4uZ2V0QXJpYUxhYmVsKEEpLCBcImFyaWEtY3VycmVudFwiOiBuLmlzQ3VycmVudE1vbnRoKGQsIEEpID8gXCJkYXRlXCIgOiB2b2lkIDAsIFwiYXJpYS1zZWxlY3RlZFwiOiBuLmlzU2VsZWN0ZWRNb250aChkLCBBLCBiKSB9LCBuLmdldE1vbnRoQ29udGVudChBKSk7XG4gICAgICAgIH0pKTtcbiAgICAgIH0pO1xuICAgIH0pLCB6MShmMShuKSwgXCJyZW5kZXJRdWFydGVyc1wiLCBmdW5jdGlvbigpIHtcbiAgICAgIHZhciBzID0gbi5wcm9wcywgbCA9IHMuZGF5LCBwID0gcy5zZWxlY3RlZDtcbiAgICAgIHJldHVybiBtMS5jcmVhdGVFbGVtZW50KFwiZGl2XCIsIHsgY2xhc3NOYW1lOiBcInJlYWN0LWRhdGVwaWNrZXJfX3F1YXJ0ZXItd3JhcHBlclwiIH0sIFsxLCAyLCAzLCA0XS5tYXAoZnVuY3Rpb24oZCwgYikge1xuICAgICAgICByZXR1cm4gbTEuY3JlYXRlRWxlbWVudChcImRpdlwiLCB7IGtleTogYiwgcmVmOiBuLlFVQVJURVJfUkVGU1tiXSwgcm9sZTogXCJvcHRpb25cIiwgb25DbGljazogZnVuY3Rpb24oTSkge1xuICAgICAgICAgIG4ub25RdWFydGVyQ2xpY2soTSwgZCk7XG4gICAgICAgIH0sIG9uS2V5RG93bjogZnVuY3Rpb24oTSkge1xuICAgICAgICAgIG4ub25RdWFydGVyS2V5RG93bihNLCBkKTtcbiAgICAgICAgfSwgb25Nb3VzZUVudGVyOiBmdW5jdGlvbigpIHtcbiAgICAgICAgICByZXR1cm4gbi5vblF1YXJ0ZXJNb3VzZUVudGVyKGQpO1xuICAgICAgICB9LCBjbGFzc05hbWU6IG4uZ2V0UXVhcnRlckNsYXNzTmFtZXMoZCksIFwiYXJpYS1zZWxlY3RlZFwiOiBuLmlzU2VsZWN0ZWRRdWFydGVyKGwsIGQsIHApLCB0YWJJbmRleDogbi5nZXRRdWFydGVyVGFiSW5kZXgoZCksIFwiYXJpYS1jdXJyZW50XCI6IG4uaXNDdXJyZW50UXVhcnRlcihsLCBkKSA/IFwiZGF0ZVwiIDogdm9pZCAwIH0sIG4uZ2V0UXVhcnRlckNvbnRlbnQoZCkpO1xuICAgICAgfSkpO1xuICAgIH0pLCB6MShmMShuKSwgXCJnZXRDbGFzc05hbWVzXCIsIGZ1bmN0aW9uKCkge1xuICAgICAgdmFyIHMgPSBuLnByb3BzLCBsID0gcy5zZWxlY3RpbmdEYXRlLCBwID0gcy5zZWxlY3RzU3RhcnQsIGQgPSBzLnNlbGVjdHNFbmQsIGIgPSBzLnNob3dNb250aFllYXJQaWNrZXIsIE0gPSBzLnNob3dRdWFydGVyWWVhclBpY2tlciwgdSA9IHMuc2hvd1dlZWtQaWNrZXI7XG4gICAgICByZXR1cm4gbTIoXCJyZWFjdC1kYXRlcGlja2VyX19tb250aFwiLCB7IFwicmVhY3QtZGF0ZXBpY2tlcl9fbW9udGgtLXNlbGVjdGluZy1yYW5nZVwiOiBsICYmIChwIHx8IGQpIH0sIHsgXCJyZWFjdC1kYXRlcGlja2VyX19tb250aFBpY2tlclwiOiBiIH0sIHsgXCJyZWFjdC1kYXRlcGlja2VyX19xdWFydGVyUGlja2VyXCI6IE0gfSwgeyBcInJlYWN0LWRhdGVwaWNrZXJfX3dlZWtQaWNrZXJcIjogdSB9KTtcbiAgICB9KSwgbjtcbiAgfVxuICByZXR1cm4gaDIobywgW3sga2V5OiBcInJlbmRlclwiLCB2YWx1ZTogZnVuY3Rpb24oKSB7XG4gICAgdmFyIG4gPSB0aGlzLnByb3BzLCByID0gbi5zaG93TW9udGhZZWFyUGlja2VyLCBpID0gbi5zaG93UXVhcnRlclllYXJQaWNrZXIsIGEgPSBuLmRheSwgcyA9IG4uYXJpYUxhYmVsUHJlZml4LCBsID0gcyA9PT0gdm9pZCAwID8gXCJtb250aCBcIiA6IHM7XG4gICAgcmV0dXJuIG0xLmNyZWF0ZUVsZW1lbnQoXCJkaXZcIiwgeyBjbGFzc05hbWU6IHRoaXMuZ2V0Q2xhc3NOYW1lcygpLCBvbk1vdXNlTGVhdmU6IHRoaXMuaGFuZGxlTW91c2VMZWF2ZSwgXCJhcmlhLWxhYmVsXCI6IFwiXCIuY29uY2F0KGwsIFwiIFwiKS5jb25jYXQoZTIoYSwgXCJ5eXl5LU1NXCIpKSwgcm9sZTogXCJsaXN0Ym94XCIgfSwgciA/IHRoaXMucmVuZGVyTW9udGhzKCkgOiBpID8gdGhpcy5yZW5kZXJRdWFydGVycygpIDogdGhpcy5yZW5kZXJXZWVrcygpKTtcbiAgfSB9XSksIG87XG59KCksIENwID0gZnVuY3Rpb24oZSkge1xuICBPMihvLCBtMS5Db21wb25lbnQpO1xuICB2YXIgdCA9IGYyKG8pO1xuICBmdW5jdGlvbiBvKCkge1xuICAgIHZhciBuO1xuICAgIHoyKHRoaXMsIG8pO1xuICAgIGZvciAodmFyIHIgPSBhcmd1bWVudHMubGVuZ3RoLCBpID0gbmV3IEFycmF5KHIpLCBhID0gMDsgYSA8IHI7IGErKylcbiAgICAgIGlbYV0gPSBhcmd1bWVudHNbYV07XG4gICAgcmV0dXJuIHoxKGYxKG4gPSB0LmNhbGwuYXBwbHkodCwgW3RoaXNdLmNvbmNhdChpKSkpLCBcInN0YXRlXCIsIHsgaGVpZ2h0OiBudWxsIH0pLCB6MShmMShuKSwgXCJzY3JvbGxUb1RoZVNlbGVjdGVkVGltZVwiLCBmdW5jdGlvbigpIHtcbiAgICAgIHJlcXVlc3RBbmltYXRpb25GcmFtZShmdW5jdGlvbigpIHtcbiAgICAgICAgbi5saXN0ICYmIChuLmxpc3Quc2Nyb2xsVG9wID0gbi5jZW50ZXJMaSAmJiBvLmNhbGNDZW50ZXJQb3NpdGlvbihuLnByb3BzLm1vbnRoUmVmID8gbi5wcm9wcy5tb250aFJlZi5jbGllbnRIZWlnaHQgLSBuLmhlYWRlci5jbGllbnRIZWlnaHQgOiBuLmxpc3QuY2xpZW50SGVpZ2h0LCBuLmNlbnRlckxpKSk7XG4gICAgICB9KTtcbiAgICB9KSwgejEoZjEobiksIFwiaGFuZGxlQ2xpY2tcIiwgZnVuY3Rpb24ocykge1xuICAgICAgKG4ucHJvcHMubWluVGltZSB8fCBuLnByb3BzLm1heFRpbWUpICYmIGI3KHMsIG4ucHJvcHMpIHx8IChuLnByb3BzLmV4Y2x1ZGVUaW1lcyB8fCBuLnByb3BzLmluY2x1ZGVUaW1lcyB8fCBuLnByb3BzLmZpbHRlclRpbWUpICYmIGQ3KHMsIG4ucHJvcHMpIHx8IG4ucHJvcHMub25DaGFuZ2Uocyk7XG4gICAgfSksIHoxKGYxKG4pLCBcImlzU2VsZWN0ZWRUaW1lXCIsIGZ1bmN0aW9uKHMpIHtcbiAgICAgIHJldHVybiBuLnByb3BzLnNlbGVjdGVkICYmIChsID0gbi5wcm9wcy5zZWxlY3RlZCwgcCA9IHMsIGY3KGwpLmdldFRpbWUoKSA9PT0gZjcocCkuZ2V0VGltZSgpKTtcbiAgICAgIHZhciBsLCBwO1xuICAgIH0pLCB6MShmMShuKSwgXCJpc0Rpc2FibGVkVGltZVwiLCBmdW5jdGlvbihzKSB7XG4gICAgICByZXR1cm4gKG4ucHJvcHMubWluVGltZSB8fCBuLnByb3BzLm1heFRpbWUpICYmIGI3KHMsIG4ucHJvcHMpIHx8IChuLnByb3BzLmV4Y2x1ZGVUaW1lcyB8fCBuLnByb3BzLmluY2x1ZGVUaW1lcyB8fCBuLnByb3BzLmZpbHRlclRpbWUpICYmIGQ3KHMsIG4ucHJvcHMpO1xuICAgIH0pLCB6MShmMShuKSwgXCJsaUNsYXNzZXNcIiwgZnVuY3Rpb24ocykge1xuICAgICAgdmFyIGwgPSBbXCJyZWFjdC1kYXRlcGlja2VyX190aW1lLWxpc3QtaXRlbVwiLCBuLnByb3BzLnRpbWVDbGFzc05hbWUgPyBuLnByb3BzLnRpbWVDbGFzc05hbWUocykgOiB2b2lkIDBdO1xuICAgICAgcmV0dXJuIG4uaXNTZWxlY3RlZFRpbWUocykgJiYgbC5wdXNoKFwicmVhY3QtZGF0ZXBpY2tlcl9fdGltZS1saXN0LWl0ZW0tLXNlbGVjdGVkXCIpLCBuLmlzRGlzYWJsZWRUaW1lKHMpICYmIGwucHVzaChcInJlYWN0LWRhdGVwaWNrZXJfX3RpbWUtbGlzdC1pdGVtLS1kaXNhYmxlZFwiKSwgbi5wcm9wcy5pbmplY3RUaW1lcyAmJiAoNjAgKiBQZShzKSArIEZlKHMpKSAlIG4ucHJvcHMuaW50ZXJ2YWxzICE9IDAgJiYgbC5wdXNoKFwicmVhY3QtZGF0ZXBpY2tlcl9fdGltZS1saXN0LWl0ZW0tLWluamVjdGVkXCIpLCBsLmpvaW4oXCIgXCIpO1xuICAgIH0pLCB6MShmMShuKSwgXCJoYW5kbGVPbktleURvd25cIiwgZnVuY3Rpb24ocywgbCkge1xuICAgICAgcy5rZXkgPT09IFwiIFwiICYmIChzLnByZXZlbnREZWZhdWx0KCksIHMua2V5ID0gXCJFbnRlclwiKSwgcy5rZXkgIT09IFwiQXJyb3dVcFwiICYmIHMua2V5ICE9PSBcIkFycm93TGVmdFwiIHx8ICFzLnRhcmdldC5wcmV2aW91c1NpYmxpbmcgfHwgKHMucHJldmVudERlZmF1bHQoKSwgcy50YXJnZXQucHJldmlvdXNTaWJsaW5nLmZvY3VzKCkpLCBzLmtleSAhPT0gXCJBcnJvd0Rvd25cIiAmJiBzLmtleSAhPT0gXCJBcnJvd1JpZ2h0XCIgfHwgIXMudGFyZ2V0Lm5leHRTaWJsaW5nIHx8IChzLnByZXZlbnREZWZhdWx0KCksIHMudGFyZ2V0Lm5leHRTaWJsaW5nLmZvY3VzKCkpLCBzLmtleSA9PT0gXCJFbnRlclwiICYmIG4uaGFuZGxlQ2xpY2sobCksIG4ucHJvcHMuaGFuZGxlT25LZXlEb3duKHMpO1xuICAgIH0pLCB6MShmMShuKSwgXCJyZW5kZXJUaW1lc1wiLCBmdW5jdGlvbigpIHtcbiAgICAgIGZvciAodmFyIHMgPSBbXSwgbCA9IG4ucHJvcHMuZm9ybWF0ID8gbi5wcm9wcy5mb3JtYXQgOiBcInBcIiwgcCA9IG4ucHJvcHMuaW50ZXJ2YWxzLCBkID0gbi5wcm9wcy5zZWxlY3RlZCB8fCBuLnByb3BzLm9wZW5Ub0RhdGUgfHwgRzAoKSwgYiA9IFZlKGQpLCBNID0gbi5wcm9wcy5pbmplY3RUaW1lcyAmJiBuLnByb3BzLmluamVjdFRpbWVzLnNvcnQoZnVuY3Rpb24oZywgdikge1xuICAgICAgICByZXR1cm4gZyAtIHY7XG4gICAgICB9KSwgdSA9IDYwICogZnVuY3Rpb24oZykge1xuICAgICAgICB2YXIgdiA9IG5ldyBEYXRlKGcuZ2V0RnVsbFllYXIoKSwgZy5nZXRNb250aCgpLCBnLmdldERhdGUoKSksIEwgPSBuZXcgRGF0ZShnLmdldEZ1bGxZZWFyKCksIGcuZ2V0TW9udGgoKSwgZy5nZXREYXRlKCksIDI0KTtcbiAgICAgICAgcmV0dXJuIE1hdGgucm91bmQoKCtMIC0gK3YpIC8gMzZlNSk7XG4gICAgICB9KGQpLCBBID0gdSAvIHAsIHogPSAwOyB6IDwgQTsgeisrKSB7XG4gICAgICAgIHZhciBmID0gVWEoYiwgeiAqIHApO1xuICAgICAgICBpZiAocy5wdXNoKGYpLCBNKSB7XG4gICAgICAgICAgdmFyIE8gPSBsVyhiLCBmLCB6LCBwLCBNKTtcbiAgICAgICAgICBzID0gcy5jb25jYXQoTyk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHZhciBoID0gcy5yZWR1Y2UoZnVuY3Rpb24oZywgdikge1xuICAgICAgICByZXR1cm4gdi5nZXRUaW1lKCkgPD0gZC5nZXRUaW1lKCkgPyB2IDogZztcbiAgICAgIH0sIHNbMF0pO1xuICAgICAgcmV0dXJuIHMubWFwKGZ1bmN0aW9uKGcsIHYpIHtcbiAgICAgICAgcmV0dXJuIG0xLmNyZWF0ZUVsZW1lbnQoXCJsaVwiLCB7IGtleTogdiwgb25DbGljazogbi5oYW5kbGVDbGljay5iaW5kKGYxKG4pLCBnKSwgY2xhc3NOYW1lOiBuLmxpQ2xhc3NlcyhnKSwgcmVmOiBmdW5jdGlvbihMKSB7XG4gICAgICAgICAgZyA9PT0gaCAmJiAobi5jZW50ZXJMaSA9IEwpO1xuICAgICAgICB9LCBvbktleURvd246IGZ1bmN0aW9uKEwpIHtcbiAgICAgICAgICBuLmhhbmRsZU9uS2V5RG93bihMLCBnKTtcbiAgICAgICAgfSwgdGFiSW5kZXg6IGcgPT09IGggPyAwIDogLTEsIHJvbGU6IFwib3B0aW9uXCIsIFwiYXJpYS1zZWxlY3RlZFwiOiBuLmlzU2VsZWN0ZWRUaW1lKGcpID8gXCJ0cnVlXCIgOiB2b2lkIDAsIFwiYXJpYS1kaXNhYmxlZFwiOiBuLmlzRGlzYWJsZWRUaW1lKGcpID8gXCJ0cnVlXCIgOiB2b2lkIDAgfSwgZTIoZywgbCwgbi5wcm9wcy5sb2NhbGUpKTtcbiAgICAgIH0pO1xuICAgIH0pLCBuO1xuICB9XG4gIHJldHVybiBoMihvLCBbeyBrZXk6IFwiY29tcG9uZW50RGlkTW91bnRcIiwgdmFsdWU6IGZ1bmN0aW9uKCkge1xuICAgIHRoaXMuc2Nyb2xsVG9UaGVTZWxlY3RlZFRpbWUoKSwgdGhpcy5wcm9wcy5tb250aFJlZiAmJiB0aGlzLmhlYWRlciAmJiB0aGlzLnNldFN0YXRlKHsgaGVpZ2h0OiB0aGlzLnByb3BzLm1vbnRoUmVmLmNsaWVudEhlaWdodCAtIHRoaXMuaGVhZGVyLmNsaWVudEhlaWdodCB9KTtcbiAgfSB9LCB7IGtleTogXCJyZW5kZXJcIiwgdmFsdWU6IGZ1bmN0aW9uKCkge1xuICAgIHZhciBuID0gdGhpcywgciA9IHRoaXMuc3RhdGUuaGVpZ2h0O1xuICAgIHJldHVybiBtMS5jcmVhdGVFbGVtZW50KFwiZGl2XCIsIHsgY2xhc3NOYW1lOiBcInJlYWN0LWRhdGVwaWNrZXJfX3RpbWUtY29udGFpbmVyIFwiLmNvbmNhdCh0aGlzLnByb3BzLnRvZGF5QnV0dG9uID8gXCJyZWFjdC1kYXRlcGlja2VyX190aW1lLWNvbnRhaW5lci0td2l0aC10b2RheS1idXR0b25cIiA6IFwiXCIpIH0sIG0xLmNyZWF0ZUVsZW1lbnQoXCJkaXZcIiwgeyBjbGFzc05hbWU6IFwicmVhY3QtZGF0ZXBpY2tlcl9faGVhZGVyIHJlYWN0LWRhdGVwaWNrZXJfX2hlYWRlci0tdGltZSBcIi5jb25jYXQodGhpcy5wcm9wcy5zaG93VGltZVNlbGVjdE9ubHkgPyBcInJlYWN0LWRhdGVwaWNrZXJfX2hlYWRlci0tdGltZS0tb25seVwiIDogXCJcIiksIHJlZjogZnVuY3Rpb24oaSkge1xuICAgICAgbi5oZWFkZXIgPSBpO1xuICAgIH0gfSwgbTEuY3JlYXRlRWxlbWVudChcImRpdlwiLCB7IGNsYXNzTmFtZTogXCJyZWFjdC1kYXRlcGlja2VyLXRpbWVfX2hlYWRlclwiIH0sIHRoaXMucHJvcHMudGltZUNhcHRpb24pKSwgbTEuY3JlYXRlRWxlbWVudChcImRpdlwiLCB7IGNsYXNzTmFtZTogXCJyZWFjdC1kYXRlcGlja2VyX190aW1lXCIgfSwgbTEuY3JlYXRlRWxlbWVudChcImRpdlwiLCB7IGNsYXNzTmFtZTogXCJyZWFjdC1kYXRlcGlja2VyX190aW1lLWJveFwiIH0sIG0xLmNyZWF0ZUVsZW1lbnQoXCJ1bFwiLCB7IGNsYXNzTmFtZTogXCJyZWFjdC1kYXRlcGlja2VyX190aW1lLWxpc3RcIiwgcmVmOiBmdW5jdGlvbihpKSB7XG4gICAgICBuLmxpc3QgPSBpO1xuICAgIH0sIHN0eWxlOiByID8geyBoZWlnaHQ6IHIgfSA6IHt9LCByb2xlOiBcImxpc3Rib3hcIiwgXCJhcmlhLWxhYmVsXCI6IHRoaXMucHJvcHMudGltZUNhcHRpb24gfSwgdGhpcy5yZW5kZXJUaW1lcygpKSkpKTtcbiAgfSB9XSwgW3sga2V5OiBcImRlZmF1bHRQcm9wc1wiLCBnZXQ6IGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiB7IGludGVydmFsczogMzAsIG9uVGltZUNoYW5nZTogZnVuY3Rpb24oKSB7XG4gICAgfSwgdG9kYXlCdXR0b246IG51bGwsIHRpbWVDYXB0aW9uOiBcIlRpbWVcIiB9O1xuICB9IH1dKSwgbztcbn0oKTtcbnoxKENwLCBcImNhbGNDZW50ZXJQb3NpdGlvblwiLCBmdW5jdGlvbihlLCB0KSB7XG4gIHJldHVybiB0Lm9mZnNldFRvcCAtIChlIC8gMiAtIHQuY2xpZW50SGVpZ2h0IC8gMik7XG59KTtcbnZhciBtVyA9IGZ1bmN0aW9uKGUpIHtcbiAgTzIobywgbTEuQ29tcG9uZW50KTtcbiAgdmFyIHQgPSBmMihvKTtcbiAgZnVuY3Rpb24gbyhuKSB7XG4gICAgdmFyIHI7XG4gICAgcmV0dXJuIHoyKHRoaXMsIG8pLCB6MShmMShyID0gdC5jYWxsKHRoaXMsIG4pKSwgXCJZRUFSX1JFRlNcIiwgQXIoQXJyYXkoci5wcm9wcy55ZWFySXRlbU51bWJlcikpLm1hcChmdW5jdGlvbigpIHtcbiAgICAgIHJldHVybiBtMS5jcmVhdGVSZWYoKTtcbiAgICB9KSksIHoxKGYxKHIpLCBcImlzRGlzYWJsZWRcIiwgZnVuY3Rpb24oaSkge1xuICAgICAgcmV0dXJuIFU0KGksIHIucHJvcHMpO1xuICAgIH0pLCB6MShmMShyKSwgXCJpc0V4Y2x1ZGVkXCIsIGZ1bmN0aW9uKGkpIHtcbiAgICAgIHJldHVybiBwNihpLCByLnByb3BzKTtcbiAgICB9KSwgejEoZjEociksIFwic2VsZWN0aW5nRGF0ZVwiLCBmdW5jdGlvbigpIHtcbiAgICAgIHZhciBpO1xuICAgICAgcmV0dXJuIChpID0gci5wcm9wcy5zZWxlY3RpbmdEYXRlKSAhPT0gbnVsbCAmJiBpICE9PSB2b2lkIDAgPyBpIDogci5wcm9wcy5wcmVTZWxlY3Rpb247XG4gICAgfSksIHoxKGYxKHIpLCBcInVwZGF0ZUZvY3VzT25QYWdpbmF0ZVwiLCBmdW5jdGlvbihpKSB7XG4gICAgICB2YXIgYSA9IChmdW5jdGlvbigpIHtcbiAgICAgICAgdGhpcy5ZRUFSX1JFRlNbaV0uY3VycmVudC5mb2N1cygpO1xuICAgICAgfSkuYmluZChmMShyKSk7XG4gICAgICB3aW5kb3cucmVxdWVzdEFuaW1hdGlvbkZyYW1lKGEpO1xuICAgIH0pLCB6MShmMShyKSwgXCJoYW5kbGVZZWFyQ2xpY2tcIiwgZnVuY3Rpb24oaSwgYSkge1xuICAgICAgci5wcm9wcy5vbkRheUNsaWNrICYmIHIucHJvcHMub25EYXlDbGljayhpLCBhKTtcbiAgICB9KSwgejEoZjEociksIFwiaGFuZGxlWWVhck5hdmlnYXRpb25cIiwgZnVuY3Rpb24oaSwgYSkge1xuICAgICAgdmFyIHMgPSByLnByb3BzLCBsID0gcy5kYXRlLCBwID0gcy55ZWFySXRlbU51bWJlciwgZCA9IEUzKGwsIHApLnN0YXJ0UGVyaW9kO1xuICAgICAgci5pc0Rpc2FibGVkKGEpIHx8IHIuaXNFeGNsdWRlZChhKSB8fCAoci5wcm9wcy5zZXRQcmVTZWxlY3Rpb24oYSksIGkgLSBkID09IC0xID8gci51cGRhdGVGb2N1c09uUGFnaW5hdGUocCAtIDEpIDogaSAtIGQgPT09IHAgPyByLnVwZGF0ZUZvY3VzT25QYWdpbmF0ZSgwKSA6IHIuWUVBUl9SRUZTW2kgLSBkXS5jdXJyZW50LmZvY3VzKCkpO1xuICAgIH0pLCB6MShmMShyKSwgXCJpc1NhbWVEYXlcIiwgZnVuY3Rpb24oaSwgYSkge1xuICAgICAgcmV0dXJuIFEwKGksIGEpO1xuICAgIH0pLCB6MShmMShyKSwgXCJpc0N1cnJlbnRZZWFyXCIsIGZ1bmN0aW9uKGkpIHtcbiAgICAgIHJldHVybiBpID09PSBMMChHMCgpKTtcbiAgICB9KSwgejEoZjEociksIFwiaXNSYW5nZVN0YXJ0XCIsIGZ1bmN0aW9uKGkpIHtcbiAgICAgIHJldHVybiByLnByb3BzLnN0YXJ0RGF0ZSAmJiByLnByb3BzLmVuZERhdGUgJiYgcXQoZXQoRzAoKSwgaSksIHIucHJvcHMuc3RhcnREYXRlKTtcbiAgICB9KSwgejEoZjEociksIFwiaXNSYW5nZUVuZFwiLCBmdW5jdGlvbihpKSB7XG4gICAgICByZXR1cm4gci5wcm9wcy5zdGFydERhdGUgJiYgci5wcm9wcy5lbmREYXRlICYmIHF0KGV0KEcwKCksIGkpLCByLnByb3BzLmVuZERhdGUpO1xuICAgIH0pLCB6MShmMShyKSwgXCJpc0luUmFuZ2VcIiwgZnVuY3Rpb24oaSkge1xuICAgICAgcmV0dXJuIE5pKGksIHIucHJvcHMuc3RhcnREYXRlLCByLnByb3BzLmVuZERhdGUpO1xuICAgIH0pLCB6MShmMShyKSwgXCJpc0luU2VsZWN0aW5nUmFuZ2VcIiwgZnVuY3Rpb24oaSkge1xuICAgICAgdmFyIGEgPSByLnByb3BzLCBzID0gYS5zZWxlY3RzU3RhcnQsIGwgPSBhLnNlbGVjdHNFbmQsIHAgPSBhLnNlbGVjdHNSYW5nZSwgZCA9IGEuc3RhcnREYXRlLCBiID0gYS5lbmREYXRlO1xuICAgICAgcmV0dXJuICEoIShzIHx8IGwgfHwgcCkgfHwgIXIuc2VsZWN0aW5nRGF0ZSgpKSAmJiAocyAmJiBiID8gTmkoaSwgci5zZWxlY3RpbmdEYXRlKCksIGIpIDogKGwgJiYgZCB8fCAhKCFwIHx8ICFkIHx8IGIpKSAmJiBOaShpLCBkLCByLnNlbGVjdGluZ0RhdGUoKSkpO1xuICAgIH0pLCB6MShmMShyKSwgXCJpc1NlbGVjdGluZ1JhbmdlU3RhcnRcIiwgZnVuY3Rpb24oaSkge1xuICAgICAgaWYgKCFyLmlzSW5TZWxlY3RpbmdSYW5nZShpKSlcbiAgICAgICAgcmV0dXJuICExO1xuICAgICAgdmFyIGEgPSByLnByb3BzLCBzID0gYS5zdGFydERhdGUsIGwgPSBhLnNlbGVjdHNTdGFydCwgcCA9IGV0KEcwKCksIGkpO1xuICAgICAgcmV0dXJuIHF0KHAsIGwgPyByLnNlbGVjdGluZ0RhdGUoKSA6IHMpO1xuICAgIH0pLCB6MShmMShyKSwgXCJpc1NlbGVjdGluZ1JhbmdlRW5kXCIsIGZ1bmN0aW9uKGkpIHtcbiAgICAgIGlmICghci5pc0luU2VsZWN0aW5nUmFuZ2UoaSkpXG4gICAgICAgIHJldHVybiAhMTtcbiAgICAgIHZhciBhID0gci5wcm9wcywgcyA9IGEuZW5kRGF0ZSwgbCA9IGEuc2VsZWN0c0VuZCwgcCA9IGEuc2VsZWN0c1JhbmdlLCBkID0gZXQoRzAoKSwgaSk7XG4gICAgICByZXR1cm4gcXQoZCwgbCB8fCBwID8gci5zZWxlY3RpbmdEYXRlKCkgOiBzKTtcbiAgICB9KSwgejEoZjEociksIFwiaXNLZXlib2FyZFNlbGVjdGVkXCIsIGZ1bmN0aW9uKGkpIHtcbiAgICAgIHZhciBhID0gWG8oZXQoci5wcm9wcy5kYXRlLCBpKSk7XG4gICAgICByZXR1cm4gIXIucHJvcHMuZGlzYWJsZWRLZXlib2FyZE5hdmlnYXRpb24gJiYgIXIucHJvcHMuaW5saW5lICYmICFRMChhLCBYbyhyLnByb3BzLnNlbGVjdGVkKSkgJiYgUTAoYSwgWG8oci5wcm9wcy5wcmVTZWxlY3Rpb24pKTtcbiAgICB9KSwgejEoZjEociksIFwib25ZZWFyQ2xpY2tcIiwgZnVuY3Rpb24oaSwgYSkge1xuICAgICAgdmFyIHMgPSByLnByb3BzLmRhdGU7XG4gICAgICByLmhhbmRsZVllYXJDbGljayhYbyhldChzLCBhKSksIGkpO1xuICAgIH0pLCB6MShmMShyKSwgXCJvblllYXJLZXlEb3duXCIsIGZ1bmN0aW9uKGksIGEpIHtcbiAgICAgIHZhciBzID0gaS5rZXk7XG4gICAgICBpZiAoIXIucHJvcHMuZGlzYWJsZWRLZXlib2FyZE5hdmlnYXRpb24pXG4gICAgICAgIHN3aXRjaCAocykge1xuICAgICAgICAgIGNhc2UgXCJFbnRlclwiOlxuICAgICAgICAgICAgci5vblllYXJDbGljayhpLCBhKSwgci5wcm9wcy5zZXRQcmVTZWxlY3Rpb24oci5wcm9wcy5zZWxlY3RlZCk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIFwiQXJyb3dSaWdodFwiOlxuICAgICAgICAgICAgci5oYW5kbGVZZWFyTmF2aWdhdGlvbihhICsgMSwgSzMoci5wcm9wcy5wcmVTZWxlY3Rpb24sIDEpKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgXCJBcnJvd0xlZnRcIjpcbiAgICAgICAgICAgIHIuaGFuZGxlWWVhck5hdmlnYXRpb24oYSAtIDEsIE1yKHIucHJvcHMucHJlU2VsZWN0aW9uLCAxKSk7XG4gICAgICAgIH1cbiAgICB9KSwgejEoZjEociksIFwiZ2V0WWVhckNsYXNzTmFtZXNcIiwgZnVuY3Rpb24oaSkge1xuICAgICAgdmFyIGEgPSByLnByb3BzLCBzID0gYS5taW5EYXRlLCBsID0gYS5tYXhEYXRlLCBwID0gYS5zZWxlY3RlZCwgZCA9IGEuZXhjbHVkZURhdGVzLCBiID0gYS5pbmNsdWRlRGF0ZXMsIE0gPSBhLmZpbHRlckRhdGU7XG4gICAgICByZXR1cm4gbTIoXCJyZWFjdC1kYXRlcGlja2VyX195ZWFyLXRleHRcIiwgeyBcInJlYWN0LWRhdGVwaWNrZXJfX3llYXItdGV4dC0tc2VsZWN0ZWRcIjogaSA9PT0gTDAocCksIFwicmVhY3QtZGF0ZXBpY2tlcl9feWVhci10ZXh0LS1kaXNhYmxlZFwiOiAocyB8fCBsIHx8IGQgfHwgYiB8fCBNKSAmJiB1cChpLCByLnByb3BzKSwgXCJyZWFjdC1kYXRlcGlja2VyX195ZWFyLXRleHQtLWtleWJvYXJkLXNlbGVjdGVkXCI6IHIuaXNLZXlib2FyZFNlbGVjdGVkKGkpLCBcInJlYWN0LWRhdGVwaWNrZXJfX3llYXItdGV4dC0tcmFuZ2Utc3RhcnRcIjogci5pc1JhbmdlU3RhcnQoaSksIFwicmVhY3QtZGF0ZXBpY2tlcl9feWVhci10ZXh0LS1yYW5nZS1lbmRcIjogci5pc1JhbmdlRW5kKGkpLCBcInJlYWN0LWRhdGVwaWNrZXJfX3llYXItdGV4dC0taW4tcmFuZ2VcIjogci5pc0luUmFuZ2UoaSksIFwicmVhY3QtZGF0ZXBpY2tlcl9feWVhci10ZXh0LS1pbi1zZWxlY3RpbmctcmFuZ2VcIjogci5pc0luU2VsZWN0aW5nUmFuZ2UoaSksIFwicmVhY3QtZGF0ZXBpY2tlcl9feWVhci10ZXh0LS1zZWxlY3RpbmctcmFuZ2Utc3RhcnRcIjogci5pc1NlbGVjdGluZ1JhbmdlU3RhcnQoaSksIFwicmVhY3QtZGF0ZXBpY2tlcl9feWVhci10ZXh0LS1zZWxlY3RpbmctcmFuZ2UtZW5kXCI6IHIuaXNTZWxlY3RpbmdSYW5nZUVuZChpKSwgXCJyZWFjdC1kYXRlcGlja2VyX195ZWFyLXRleHQtLXRvZGF5XCI6IHIuaXNDdXJyZW50WWVhcihpKSB9KTtcbiAgICB9KSwgejEoZjEociksIFwiZ2V0WWVhclRhYkluZGV4XCIsIGZ1bmN0aW9uKGkpIHtcbiAgICAgIHJldHVybiByLnByb3BzLmRpc2FibGVkS2V5Ym9hcmROYXZpZ2F0aW9uID8gXCItMVwiIDogaSA9PT0gTDAoci5wcm9wcy5wcmVTZWxlY3Rpb24pID8gXCIwXCIgOiBcIi0xXCI7XG4gICAgfSksIHoxKGYxKHIpLCBcImdldFllYXJDb250YWluZXJDbGFzc05hbWVzXCIsIGZ1bmN0aW9uKCkge1xuICAgICAgdmFyIGkgPSByLnByb3BzLCBhID0gaS5zZWxlY3RpbmdEYXRlLCBzID0gaS5zZWxlY3RzU3RhcnQsIGwgPSBpLnNlbGVjdHNFbmQsIHAgPSBpLnNlbGVjdHNSYW5nZTtcbiAgICAgIHJldHVybiBtMihcInJlYWN0LWRhdGVwaWNrZXJfX3llYXJcIiwgeyBcInJlYWN0LWRhdGVwaWNrZXJfX3llYXItLXNlbGVjdGluZy1yYW5nZVwiOiBhICYmIChzIHx8IGwgfHwgcCkgfSk7XG4gICAgfSksIHoxKGYxKHIpLCBcImdldFllYXJDb250ZW50XCIsIGZ1bmN0aW9uKGkpIHtcbiAgICAgIHJldHVybiByLnByb3BzLnJlbmRlclllYXJDb250ZW50ID8gci5wcm9wcy5yZW5kZXJZZWFyQ29udGVudChpKSA6IGk7XG4gICAgfSksIHI7XG4gIH1cbiAgcmV0dXJuIGgyKG8sIFt7IGtleTogXCJyZW5kZXJcIiwgdmFsdWU6IGZ1bmN0aW9uKCkge1xuICAgIGZvciAodmFyIG4gPSB0aGlzLCByID0gW10sIGkgPSB0aGlzLnByb3BzLCBhID0gaS5kYXRlLCBzID0gaS55ZWFySXRlbU51bWJlciwgbCA9IGkub25ZZWFyTW91c2VFbnRlciwgcCA9IGkub25ZZWFyTW91c2VMZWF2ZSwgZCA9IEUzKGEsIHMpLCBiID0gZC5zdGFydFBlcmlvZCwgTSA9IGQuZW5kUGVyaW9kLCB1ID0gZnVuY3Rpb24oeikge1xuICAgICAgci5wdXNoKG0xLmNyZWF0ZUVsZW1lbnQoXCJkaXZcIiwgeyByZWY6IG4uWUVBUl9SRUZTW3ogLSBiXSwgb25DbGljazogZnVuY3Rpb24oZikge1xuICAgICAgICBuLm9uWWVhckNsaWNrKGYsIHopO1xuICAgICAgfSwgb25LZXlEb3duOiBmdW5jdGlvbihmKSB7XG4gICAgICAgIG4ub25ZZWFyS2V5RG93bihmLCB6KTtcbiAgICAgIH0sIHRhYkluZGV4OiBuLmdldFllYXJUYWJJbmRleCh6KSwgY2xhc3NOYW1lOiBuLmdldFllYXJDbGFzc05hbWVzKHopLCBvbk1vdXNlRW50ZXI6IGZ1bmN0aW9uKGYpIHtcbiAgICAgICAgcmV0dXJuIGwoZiwgeik7XG4gICAgICB9LCBvbk1vdXNlTGVhdmU6IGZ1bmN0aW9uKGYpIHtcbiAgICAgICAgcmV0dXJuIHAoZiwgeik7XG4gICAgICB9LCBrZXk6IHosIFwiYXJpYS1jdXJyZW50XCI6IG4uaXNDdXJyZW50WWVhcih6KSA/IFwiZGF0ZVwiIDogdm9pZCAwIH0sIG4uZ2V0WWVhckNvbnRlbnQoeikpKTtcbiAgICB9LCBBID0gYjsgQSA8PSBNOyBBKyspXG4gICAgICB1KEEpO1xuICAgIHJldHVybiBtMS5jcmVhdGVFbGVtZW50KFwiZGl2XCIsIHsgY2xhc3NOYW1lOiB0aGlzLmdldFllYXJDb250YWluZXJDbGFzc05hbWVzKCkgfSwgbTEuY3JlYXRlRWxlbWVudChcImRpdlwiLCB7IGNsYXNzTmFtZTogXCJyZWFjdC1kYXRlcGlja2VyX195ZWFyLXdyYXBwZXJcIiwgb25Nb3VzZUxlYXZlOiB0aGlzLnByb3BzLmNsZWFyU2VsZWN0aW5nRGF0ZSB9LCByKSk7XG4gIH0gfV0pLCBvO1xufSgpLCBMVyA9IGZ1bmN0aW9uKGUpIHtcbiAgTzIobywgbTEuQ29tcG9uZW50KTtcbiAgdmFyIHQgPSBmMihvKTtcbiAgZnVuY3Rpb24gbyhuKSB7XG4gICAgdmFyIHI7XG4gICAgcmV0dXJuIHoyKHRoaXMsIG8pLCB6MShmMShyID0gdC5jYWxsKHRoaXMsIG4pKSwgXCJvblRpbWVDaGFuZ2VcIiwgZnVuY3Rpb24oaSkge1xuICAgICAgci5zZXRTdGF0ZSh7IHRpbWU6IGkgfSk7XG4gICAgICB2YXIgYSA9IHIucHJvcHMuZGF0ZSwgcyA9IGEgaW5zdGFuY2VvZiBEYXRlICYmICFpc05hTihhKSA/IGEgOiAvKiBAX19QVVJFX18gKi8gbmV3IERhdGUoKTtcbiAgICAgIHMuc2V0SG91cnMoaS5zcGxpdChcIjpcIilbMF0pLCBzLnNldE1pbnV0ZXMoaS5zcGxpdChcIjpcIilbMV0pLCByLnByb3BzLm9uQ2hhbmdlKHMpO1xuICAgIH0pLCB6MShmMShyKSwgXCJyZW5kZXJUaW1lSW5wdXRcIiwgZnVuY3Rpb24oKSB7XG4gICAgICB2YXIgaSA9IHIuc3RhdGUudGltZSwgYSA9IHIucHJvcHMsIHMgPSBhLmRhdGUsIGwgPSBhLnRpbWVTdHJpbmcsIHAgPSBhLmN1c3RvbVRpbWVJbnB1dDtcbiAgICAgIHJldHVybiBwID8gbTEuY2xvbmVFbGVtZW50KHAsIHsgZGF0ZTogcywgdmFsdWU6IGksIG9uQ2hhbmdlOiByLm9uVGltZUNoYW5nZSB9KSA6IG0xLmNyZWF0ZUVsZW1lbnQoXCJpbnB1dFwiLCB7IHR5cGU6IFwidGltZVwiLCBjbGFzc05hbWU6IFwicmVhY3QtZGF0ZXBpY2tlci10aW1lX19pbnB1dFwiLCBwbGFjZWhvbGRlcjogXCJUaW1lXCIsIG5hbWU6IFwidGltZS1pbnB1dFwiLCByZXF1aXJlZDogITAsIHZhbHVlOiBpLCBvbkNoYW5nZTogZnVuY3Rpb24oZCkge1xuICAgICAgICByLm9uVGltZUNoYW5nZShkLnRhcmdldC52YWx1ZSB8fCBsKTtcbiAgICAgIH0gfSk7XG4gICAgfSksIHIuc3RhdGUgPSB7IHRpbWU6IHIucHJvcHMudGltZVN0cmluZyB9LCByO1xuICB9XG4gIHJldHVybiBoMihvLCBbeyBrZXk6IFwicmVuZGVyXCIsIHZhbHVlOiBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gbTEuY3JlYXRlRWxlbWVudChcImRpdlwiLCB7IGNsYXNzTmFtZTogXCJyZWFjdC1kYXRlcGlja2VyX19pbnB1dC10aW1lLWNvbnRhaW5lclwiIH0sIG0xLmNyZWF0ZUVsZW1lbnQoXCJkaXZcIiwgeyBjbGFzc05hbWU6IFwicmVhY3QtZGF0ZXBpY2tlci10aW1lX19jYXB0aW9uXCIgfSwgdGhpcy5wcm9wcy50aW1lSW5wdXRMYWJlbCksIG0xLmNyZWF0ZUVsZW1lbnQoXCJkaXZcIiwgeyBjbGFzc05hbWU6IFwicmVhY3QtZGF0ZXBpY2tlci10aW1lX19pbnB1dC1jb250YWluZXJcIiB9LCBtMS5jcmVhdGVFbGVtZW50KFwiZGl2XCIsIHsgY2xhc3NOYW1lOiBcInJlYWN0LWRhdGVwaWNrZXItdGltZV9faW5wdXRcIiB9LCB0aGlzLnJlbmRlclRpbWVJbnB1dCgpKSkpO1xuICB9IH1dLCBbeyBrZXk6IFwiZ2V0RGVyaXZlZFN0YXRlRnJvbVByb3BzXCIsIHZhbHVlOiBmdW5jdGlvbihuLCByKSB7XG4gICAgcmV0dXJuIG4udGltZVN0cmluZyAhPT0gci50aW1lID8geyB0aW1lOiBuLnRpbWVTdHJpbmcgfSA6IG51bGw7XG4gIH0gfV0pLCBvO1xufSgpO1xuZnVuY3Rpb24gdlcoZSkge1xuICB2YXIgdCA9IGUuY2xhc3NOYW1lLCBvID0gZS5jaGlsZHJlbiwgbiA9IGUuc2hvd1BvcHBlckFycm93LCByID0gZS5hcnJvd1Byb3BzLCBpID0gciA9PT0gdm9pZCAwID8ge30gOiByO1xuICByZXR1cm4gbTEuY3JlYXRlRWxlbWVudChcImRpdlwiLCB7IGNsYXNzTmFtZTogdCB9LCBuICYmIG0xLmNyZWF0ZUVsZW1lbnQoXCJkaXZcIiwgJDMoeyBjbGFzc05hbWU6IFwicmVhY3QtZGF0ZXBpY2tlcl9fdHJpYW5nbGVcIiB9LCBpKSksIG8pO1xufVxudmFyIHFXID0gW1wicmVhY3QtZGF0ZXBpY2tlcl9feWVhci1zZWxlY3RcIiwgXCJyZWFjdC1kYXRlcGlja2VyX19tb250aC1zZWxlY3RcIiwgXCJyZWFjdC1kYXRlcGlja2VyX19tb250aC15ZWFyLXNlbGVjdFwiXSwgeVcgPSBmdW5jdGlvbihlKSB7XG4gIE8yKG8sIG0xLkNvbXBvbmVudCk7XG4gIHZhciB0ID0gZjIobyk7XG4gIGZ1bmN0aW9uIG8obikge1xuICAgIHZhciByO1xuICAgIHJldHVybiB6Mih0aGlzLCBvKSwgejEoZjEociA9IHQuY2FsbCh0aGlzLCBuKSksIFwiaGFuZGxlQ2xpY2tPdXRzaWRlXCIsIGZ1bmN0aW9uKGkpIHtcbiAgICAgIHIucHJvcHMub25DbGlja091dHNpZGUoaSk7XG4gICAgfSksIHoxKGYxKHIpLCBcInNldENsaWNrT3V0c2lkZVJlZlwiLCBmdW5jdGlvbigpIHtcbiAgICAgIHJldHVybiByLmNvbnRhaW5lclJlZi5jdXJyZW50O1xuICAgIH0pLCB6MShmMShyKSwgXCJoYW5kbGVEcm9wZG93bkZvY3VzXCIsIGZ1bmN0aW9uKGkpIHtcbiAgICAgIChmdW5jdGlvbigpIHtcbiAgICAgICAgdmFyIGEgPSAoKGFyZ3VtZW50cy5sZW5ndGggPiAwICYmIGFyZ3VtZW50c1swXSAhPT0gdm9pZCAwID8gYXJndW1lbnRzWzBdIDoge30pLmNsYXNzTmFtZSB8fCBcIlwiKS5zcGxpdCgvXFxzKy8pO1xuICAgICAgICByZXR1cm4gcVcuc29tZShmdW5jdGlvbihzKSB7XG4gICAgICAgICAgcmV0dXJuIGEuaW5kZXhPZihzKSA+PSAwO1xuICAgICAgICB9KTtcbiAgICAgIH0pKGkudGFyZ2V0KSAmJiByLnByb3BzLm9uRHJvcGRvd25Gb2N1cygpO1xuICAgIH0pLCB6MShmMShyKSwgXCJnZXREYXRlSW5WaWV3XCIsIGZ1bmN0aW9uKCkge1xuICAgICAgdmFyIGkgPSByLnByb3BzLCBhID0gaS5wcmVTZWxlY3Rpb24sIHMgPSBpLnNlbGVjdGVkLCBsID0gaS5vcGVuVG9EYXRlLCBwID0genAoci5wcm9wcyksIGQgPSBocChyLnByb3BzKSwgYiA9IEcwKCksIE0gPSBsIHx8IHMgfHwgYTtcbiAgICAgIHJldHVybiBNIHx8IChwICYmIHZ0KGIsIHApID8gcCA6IGQgJiYgRHQoYiwgZCkgPyBkIDogYik7XG4gICAgfSksIHoxKGYxKHIpLCBcImluY3JlYXNlTW9udGhcIiwgZnVuY3Rpb24oKSB7XG4gICAgICByLnNldFN0YXRlKGZ1bmN0aW9uKGkpIHtcbiAgICAgICAgdmFyIGEgPSBpLmRhdGU7XG4gICAgICAgIHJldHVybiB7IGRhdGU6IHZlKGEsIDEpIH07XG4gICAgICB9LCBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIHIuaGFuZGxlTW9udGhDaGFuZ2Uoci5zdGF0ZS5kYXRlKTtcbiAgICAgIH0pO1xuICAgIH0pLCB6MShmMShyKSwgXCJkZWNyZWFzZU1vbnRoXCIsIGZ1bmN0aW9uKCkge1xuICAgICAgci5zZXRTdGF0ZShmdW5jdGlvbihpKSB7XG4gICAgICAgIHZhciBhID0gaS5kYXRlO1xuICAgICAgICByZXR1cm4geyBkYXRlOiBfMyhhLCAxKSB9O1xuICAgICAgfSwgZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiByLmhhbmRsZU1vbnRoQ2hhbmdlKHIuc3RhdGUuZGF0ZSk7XG4gICAgICB9KTtcbiAgICB9KSwgejEoZjEociksIFwiaGFuZGxlRGF5Q2xpY2tcIiwgZnVuY3Rpb24oaSwgYSwgcykge1xuICAgICAgci5wcm9wcy5vblNlbGVjdChpLCBhLCBzKSwgci5wcm9wcy5zZXRQcmVTZWxlY3Rpb24gJiYgci5wcm9wcy5zZXRQcmVTZWxlY3Rpb24oaSk7XG4gICAgfSksIHoxKGYxKHIpLCBcImhhbmRsZURheU1vdXNlRW50ZXJcIiwgZnVuY3Rpb24oaSkge1xuICAgICAgci5zZXRTdGF0ZSh7IHNlbGVjdGluZ0RhdGU6IGkgfSksIHIucHJvcHMub25EYXlNb3VzZUVudGVyICYmIHIucHJvcHMub25EYXlNb3VzZUVudGVyKGkpO1xuICAgIH0pLCB6MShmMShyKSwgXCJoYW5kbGVNb250aE1vdXNlTGVhdmVcIiwgZnVuY3Rpb24oKSB7XG4gICAgICByLnNldFN0YXRlKHsgc2VsZWN0aW5nRGF0ZTogbnVsbCB9KSwgci5wcm9wcy5vbk1vbnRoTW91c2VMZWF2ZSAmJiByLnByb3BzLm9uTW9udGhNb3VzZUxlYXZlKCk7XG4gICAgfSksIHoxKGYxKHIpLCBcImhhbmRsZVllYXJNb3VzZUVudGVyXCIsIGZ1bmN0aW9uKGksIGEpIHtcbiAgICAgIHIuc2V0U3RhdGUoeyBzZWxlY3RpbmdEYXRlOiBldChHMCgpLCBhKSB9KSwgci5wcm9wcy5vblllYXJNb3VzZUVudGVyICYmIHIucHJvcHMub25ZZWFyTW91c2VFbnRlcihpLCBhKTtcbiAgICB9KSwgejEoZjEociksIFwiaGFuZGxlWWVhck1vdXNlTGVhdmVcIiwgZnVuY3Rpb24oaSwgYSkge1xuICAgICAgci5wcm9wcy5vblllYXJNb3VzZUxlYXZlICYmIHIucHJvcHMub25ZZWFyTW91c2VMZWF2ZShpLCBhKTtcbiAgICB9KSwgejEoZjEociksIFwiaGFuZGxlWWVhckNoYW5nZVwiLCBmdW5jdGlvbihpKSB7XG4gICAgICByLnByb3BzLm9uWWVhckNoYW5nZSAmJiAoci5wcm9wcy5vblllYXJDaGFuZ2UoaSksIHIuc2V0U3RhdGUoeyBpc1JlbmRlckFyaWFMaXZlTWVzc2FnZTogITAgfSkpLCByLnByb3BzLmFkanVzdERhdGVPbkNoYW5nZSAmJiAoci5wcm9wcy5vblNlbGVjdCAmJiByLnByb3BzLm9uU2VsZWN0KGkpLCByLnByb3BzLnNldE9wZW4gJiYgci5wcm9wcy5zZXRPcGVuKCEwKSksIHIucHJvcHMuc2V0UHJlU2VsZWN0aW9uICYmIHIucHJvcHMuc2V0UHJlU2VsZWN0aW9uKGkpO1xuICAgIH0pLCB6MShmMShyKSwgXCJoYW5kbGVNb250aENoYW5nZVwiLCBmdW5jdGlvbihpKSB7XG4gICAgICByLmhhbmRsZUN1c3RvbU1vbnRoQ2hhbmdlKGkpLCByLnByb3BzLmFkanVzdERhdGVPbkNoYW5nZSAmJiAoci5wcm9wcy5vblNlbGVjdCAmJiByLnByb3BzLm9uU2VsZWN0KGkpLCByLnByb3BzLnNldE9wZW4gJiYgci5wcm9wcy5zZXRPcGVuKCEwKSksIHIucHJvcHMuc2V0UHJlU2VsZWN0aW9uICYmIHIucHJvcHMuc2V0UHJlU2VsZWN0aW9uKGkpO1xuICAgIH0pLCB6MShmMShyKSwgXCJoYW5kbGVDdXN0b21Nb250aENoYW5nZVwiLCBmdW5jdGlvbihpKSB7XG4gICAgICByLnByb3BzLm9uTW9udGhDaGFuZ2UgJiYgKHIucHJvcHMub25Nb250aENoYW5nZShpKSwgci5zZXRTdGF0ZSh7IGlzUmVuZGVyQXJpYUxpdmVNZXNzYWdlOiAhMCB9KSk7XG4gICAgfSksIHoxKGYxKHIpLCBcImhhbmRsZU1vbnRoWWVhckNoYW5nZVwiLCBmdW5jdGlvbihpKSB7XG4gICAgICByLmhhbmRsZVllYXJDaGFuZ2UoaSksIHIuaGFuZGxlTW9udGhDaGFuZ2UoaSk7XG4gICAgfSksIHoxKGYxKHIpLCBcImNoYW5nZVllYXJcIiwgZnVuY3Rpb24oaSkge1xuICAgICAgci5zZXRTdGF0ZShmdW5jdGlvbihhKSB7XG4gICAgICAgIHZhciBzID0gYS5kYXRlO1xuICAgICAgICByZXR1cm4geyBkYXRlOiBldChzLCBpKSB9O1xuICAgICAgfSwgZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiByLmhhbmRsZVllYXJDaGFuZ2Uoci5zdGF0ZS5kYXRlKTtcbiAgICAgIH0pO1xuICAgIH0pLCB6MShmMShyKSwgXCJjaGFuZ2VNb250aFwiLCBmdW5jdGlvbihpKSB7XG4gICAgICByLnNldFN0YXRlKGZ1bmN0aW9uKGEpIHtcbiAgICAgICAgdmFyIHMgPSBhLmRhdGU7XG4gICAgICAgIHJldHVybiB7IGRhdGU6IFcyKHMsIGkpIH07XG4gICAgICB9LCBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIHIuaGFuZGxlTW9udGhDaGFuZ2Uoci5zdGF0ZS5kYXRlKTtcbiAgICAgIH0pO1xuICAgIH0pLCB6MShmMShyKSwgXCJjaGFuZ2VNb250aFllYXJcIiwgZnVuY3Rpb24oaSkge1xuICAgICAgci5zZXRTdGF0ZShmdW5jdGlvbihhKSB7XG4gICAgICAgIHZhciBzID0gYS5kYXRlO1xuICAgICAgICByZXR1cm4geyBkYXRlOiBldChXMihzLCBnMihpKSksIEwwKGkpKSB9O1xuICAgICAgfSwgZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiByLmhhbmRsZU1vbnRoWWVhckNoYW5nZShyLnN0YXRlLmRhdGUpO1xuICAgICAgfSk7XG4gICAgfSksIHoxKGYxKHIpLCBcImhlYWRlclwiLCBmdW5jdGlvbigpIHtcbiAgICAgIHZhciBpID0gWGUoYXJndW1lbnRzLmxlbmd0aCA+IDAgJiYgYXJndW1lbnRzWzBdICE9PSB2b2lkIDAgPyBhcmd1bWVudHNbMF0gOiByLnN0YXRlLmRhdGUsIHIucHJvcHMubG9jYWxlLCByLnByb3BzLmNhbGVuZGFyU3RhcnREYXkpLCBhID0gW107XG4gICAgICByZXR1cm4gci5wcm9wcy5zaG93V2Vla051bWJlcnMgJiYgYS5wdXNoKG0xLmNyZWF0ZUVsZW1lbnQoXCJkaXZcIiwgeyBrZXk6IFwiV1wiLCBjbGFzc05hbWU6IFwicmVhY3QtZGF0ZXBpY2tlcl9fZGF5LW5hbWVcIiB9LCByLnByb3BzLndlZWtMYWJlbCB8fCBcIiNcIikpLCBhLmNvbmNhdChbMCwgMSwgMiwgMywgNCwgNSwgNl0ubWFwKGZ1bmN0aW9uKHMpIHtcbiAgICAgICAgdmFyIGwgPSBhbyhpLCBzKSwgcCA9IHIuZm9ybWF0V2Vla2RheShsLCByLnByb3BzLmxvY2FsZSksIGQgPSByLnByb3BzLndlZWtEYXlDbGFzc05hbWUgPyByLnByb3BzLndlZWtEYXlDbGFzc05hbWUobCkgOiB2b2lkIDA7XG4gICAgICAgIHJldHVybiBtMS5jcmVhdGVFbGVtZW50KFwiZGl2XCIsIHsga2V5OiBzLCBjbGFzc05hbWU6IG0yKFwicmVhY3QtZGF0ZXBpY2tlcl9fZGF5LW5hbWVcIiwgZCkgfSwgcCk7XG4gICAgICB9KSk7XG4gICAgfSksIHoxKGYxKHIpLCBcImZvcm1hdFdlZWtkYXlcIiwgZnVuY3Rpb24oaSwgYSkge1xuICAgICAgcmV0dXJuIHIucHJvcHMuZm9ybWF0V2Vla0RheSA/IGZ1bmN0aW9uKHMsIGwsIHApIHtcbiAgICAgICAgcmV0dXJuIGwoZTIocywgXCJFRUVFXCIsIHApKTtcbiAgICAgIH0oaSwgci5wcm9wcy5mb3JtYXRXZWVrRGF5LCBhKSA6IHIucHJvcHMudXNlV2Vla2RheXNTaG9ydCA/IGZ1bmN0aW9uKHMsIGwpIHtcbiAgICAgICAgcmV0dXJuIGUyKHMsIFwiRUVFXCIsIGwpO1xuICAgICAgfShpLCBhKSA6IGZ1bmN0aW9uKHMsIGwpIHtcbiAgICAgICAgcmV0dXJuIGUyKHMsIFwiRUVFRUVFXCIsIGwpO1xuICAgICAgfShpLCBhKTtcbiAgICB9KSwgejEoZjEociksIFwiZGVjcmVhc2VZZWFyXCIsIGZ1bmN0aW9uKCkge1xuICAgICAgci5zZXRTdGF0ZShmdW5jdGlvbihpKSB7XG4gICAgICAgIHZhciBhID0gaS5kYXRlO1xuICAgICAgICByZXR1cm4geyBkYXRlOiBNcihhLCByLnByb3BzLnNob3dZZWFyUGlja2VyID8gci5wcm9wcy55ZWFySXRlbU51bWJlciA6IDEpIH07XG4gICAgICB9LCBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIHIuaGFuZGxlWWVhckNoYW5nZShyLnN0YXRlLmRhdGUpO1xuICAgICAgfSk7XG4gICAgfSksIHoxKGYxKHIpLCBcImNsZWFyU2VsZWN0aW5nRGF0ZVwiLCBmdW5jdGlvbigpIHtcbiAgICAgIHIuc2V0U3RhdGUoeyBzZWxlY3RpbmdEYXRlOiBudWxsIH0pO1xuICAgIH0pLCB6MShmMShyKSwgXCJyZW5kZXJQcmV2aW91c0J1dHRvblwiLCBmdW5jdGlvbigpIHtcbiAgICAgIGlmICghci5wcm9wcy5yZW5kZXJDdXN0b21IZWFkZXIpIHtcbiAgICAgICAgdmFyIGk7XG4gICAgICAgIHN3aXRjaCAoITApIHtcbiAgICAgICAgICBjYXNlIHIucHJvcHMuc2hvd01vbnRoWWVhclBpY2tlcjpcbiAgICAgICAgICAgIGkgPSB1NyhyLnN0YXRlLmRhdGUsIHIucHJvcHMpO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSByLnByb3BzLnNob3dZZWFyUGlja2VyOlxuICAgICAgICAgICAgaSA9IGZ1bmN0aW9uKE8pIHtcbiAgICAgICAgICAgICAgdmFyIGggPSBhcmd1bWVudHMubGVuZ3RoID4gMSAmJiBhcmd1bWVudHNbMV0gIT09IHZvaWQgMCA/IGFyZ3VtZW50c1sxXSA6IHt9LCBnID0gaC5taW5EYXRlLCB2ID0gaC55ZWFySXRlbU51bWJlciwgTCA9IHYgPT09IHZvaWQgMCA/IEtvIDogdiwgeSA9IEUzKFhvKE1yKE8sIEwpKSwgTCkuZW5kUGVyaW9kLCBCID0gZyAmJiBMMChnKTtcbiAgICAgICAgICAgICAgcmV0dXJuIEIgJiYgQiA+IHkgfHwgITE7XG4gICAgICAgICAgICB9KHIuc3RhdGUuZGF0ZSwgci5wcm9wcyk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgaSA9IE03KHIuc3RhdGUuZGF0ZSwgci5wcm9wcyk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKChyLnByb3BzLmZvcmNlU2hvd01vbnRoTmF2aWdhdGlvbiB8fCByLnByb3BzLnNob3dEaXNhYmxlZE1vbnRoTmF2aWdhdGlvbiB8fCAhaSkgJiYgIXIucHJvcHMuc2hvd1RpbWVTZWxlY3RPbmx5KSB7XG4gICAgICAgICAgdmFyIGEgPSBbXCJyZWFjdC1kYXRlcGlja2VyX19uYXZpZ2F0aW9uXCIsIFwicmVhY3QtZGF0ZXBpY2tlcl9fbmF2aWdhdGlvbi0tcHJldmlvdXNcIl0sIHMgPSByLmRlY3JlYXNlTW9udGg7XG4gICAgICAgICAgKHIucHJvcHMuc2hvd01vbnRoWWVhclBpY2tlciB8fCByLnByb3BzLnNob3dRdWFydGVyWWVhclBpY2tlciB8fCByLnByb3BzLnNob3dZZWFyUGlja2VyKSAmJiAocyA9IHIuZGVjcmVhc2VZZWFyKSwgaSAmJiByLnByb3BzLnNob3dEaXNhYmxlZE1vbnRoTmF2aWdhdGlvbiAmJiAoYS5wdXNoKFwicmVhY3QtZGF0ZXBpY2tlcl9fbmF2aWdhdGlvbi0tcHJldmlvdXMtLWRpc2FibGVkXCIpLCBzID0gbnVsbCk7XG4gICAgICAgICAgdmFyIGwgPSByLnByb3BzLnNob3dNb250aFllYXJQaWNrZXIgfHwgci5wcm9wcy5zaG93UXVhcnRlclllYXJQaWNrZXIgfHwgci5wcm9wcy5zaG93WWVhclBpY2tlciwgcCA9IHIucHJvcHMsIGQgPSBwLnByZXZpb3VzTW9udGhCdXR0b25MYWJlbCwgYiA9IHAucHJldmlvdXNZZWFyQnV0dG9uTGFiZWwsIE0gPSByLnByb3BzLCB1ID0gTS5wcmV2aW91c01vbnRoQXJpYUxhYmVsLCBBID0gdSA9PT0gdm9pZCAwID8gdHlwZW9mIGQgPT0gXCJzdHJpbmdcIiA/IGQgOiBcIlByZXZpb3VzIE1vbnRoXCIgOiB1LCB6ID0gTS5wcmV2aW91c1llYXJBcmlhTGFiZWwsIGYgPSB6ID09PSB2b2lkIDAgPyB0eXBlb2YgYiA9PSBcInN0cmluZ1wiID8gYiA6IFwiUHJldmlvdXMgWWVhclwiIDogejtcbiAgICAgICAgICByZXR1cm4gbTEuY3JlYXRlRWxlbWVudChcImJ1dHRvblwiLCB7IHR5cGU6IFwiYnV0dG9uXCIsIGNsYXNzTmFtZTogYS5qb2luKFwiIFwiKSwgb25DbGljazogcywgb25LZXlEb3duOiByLnByb3BzLmhhbmRsZU9uS2V5RG93biwgXCJhcmlhLWxhYmVsXCI6IGwgPyBmIDogQSB9LCBtMS5jcmVhdGVFbGVtZW50KFwic3BhblwiLCB7IGNsYXNzTmFtZTogW1wicmVhY3QtZGF0ZXBpY2tlcl9fbmF2aWdhdGlvbi1pY29uXCIsIFwicmVhY3QtZGF0ZXBpY2tlcl9fbmF2aWdhdGlvbi1pY29uLS1wcmV2aW91c1wiXS5qb2luKFwiIFwiKSB9LCBsID8gci5wcm9wcy5wcmV2aW91c1llYXJCdXR0b25MYWJlbCA6IHIucHJvcHMucHJldmlvdXNNb250aEJ1dHRvbkxhYmVsKSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KSwgejEoZjEociksIFwiaW5jcmVhc2VZZWFyXCIsIGZ1bmN0aW9uKCkge1xuICAgICAgci5zZXRTdGF0ZShmdW5jdGlvbihpKSB7XG4gICAgICAgIHZhciBhID0gaS5kYXRlO1xuICAgICAgICByZXR1cm4geyBkYXRlOiBLMyhhLCByLnByb3BzLnNob3dZZWFyUGlja2VyID8gci5wcm9wcy55ZWFySXRlbU51bWJlciA6IDEpIH07XG4gICAgICB9LCBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIHIuaGFuZGxlWWVhckNoYW5nZShyLnN0YXRlLmRhdGUpO1xuICAgICAgfSk7XG4gICAgfSksIHoxKGYxKHIpLCBcInJlbmRlck5leHRCdXR0b25cIiwgZnVuY3Rpb24oKSB7XG4gICAgICBpZiAoIXIucHJvcHMucmVuZGVyQ3VzdG9tSGVhZGVyKSB7XG4gICAgICAgIHZhciBpO1xuICAgICAgICBzd2l0Y2ggKCEwKSB7XG4gICAgICAgICAgY2FzZSByLnByb3BzLnNob3dNb250aFllYXJQaWNrZXI6XG4gICAgICAgICAgICBpID0gejcoci5zdGF0ZS5kYXRlLCByLnByb3BzKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2Ugci5wcm9wcy5zaG93WWVhclBpY2tlcjpcbiAgICAgICAgICAgIGkgPSBmdW5jdGlvbihPKSB7XG4gICAgICAgICAgICAgIHZhciBoID0gYXJndW1lbnRzLmxlbmd0aCA+IDEgJiYgYXJndW1lbnRzWzFdICE9PSB2b2lkIDAgPyBhcmd1bWVudHNbMV0gOiB7fSwgZyA9IGgubWF4RGF0ZSwgdiA9IGgueWVhckl0ZW1OdW1iZXIsIEwgPSB2ID09PSB2b2lkIDAgPyBLbyA6IHYsIHkgPSBFMyhLMyhPLCBMKSwgTCkuc3RhcnRQZXJpb2QsIEIgPSBnICYmIEwwKGcpO1xuICAgICAgICAgICAgICByZXR1cm4gQiAmJiBCIDwgeSB8fCAhMTtcbiAgICAgICAgICAgIH0oci5zdGF0ZS5kYXRlLCByLnByb3BzKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICBpID0gQTcoci5zdGF0ZS5kYXRlLCByLnByb3BzKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoKHIucHJvcHMuZm9yY2VTaG93TW9udGhOYXZpZ2F0aW9uIHx8IHIucHJvcHMuc2hvd0Rpc2FibGVkTW9udGhOYXZpZ2F0aW9uIHx8ICFpKSAmJiAhci5wcm9wcy5zaG93VGltZVNlbGVjdE9ubHkpIHtcbiAgICAgICAgICB2YXIgYSA9IFtcInJlYWN0LWRhdGVwaWNrZXJfX25hdmlnYXRpb25cIiwgXCJyZWFjdC1kYXRlcGlja2VyX19uYXZpZ2F0aW9uLS1uZXh0XCJdO1xuICAgICAgICAgIHIucHJvcHMuc2hvd1RpbWVTZWxlY3QgJiYgYS5wdXNoKFwicmVhY3QtZGF0ZXBpY2tlcl9fbmF2aWdhdGlvbi0tbmV4dC0td2l0aC10aW1lXCIpLCByLnByb3BzLnRvZGF5QnV0dG9uICYmIGEucHVzaChcInJlYWN0LWRhdGVwaWNrZXJfX25hdmlnYXRpb24tLW5leHQtLXdpdGgtdG9kYXktYnV0dG9uXCIpO1xuICAgICAgICAgIHZhciBzID0gci5pbmNyZWFzZU1vbnRoO1xuICAgICAgICAgIChyLnByb3BzLnNob3dNb250aFllYXJQaWNrZXIgfHwgci5wcm9wcy5zaG93UXVhcnRlclllYXJQaWNrZXIgfHwgci5wcm9wcy5zaG93WWVhclBpY2tlcikgJiYgKHMgPSByLmluY3JlYXNlWWVhciksIGkgJiYgci5wcm9wcy5zaG93RGlzYWJsZWRNb250aE5hdmlnYXRpb24gJiYgKGEucHVzaChcInJlYWN0LWRhdGVwaWNrZXJfX25hdmlnYXRpb24tLW5leHQtLWRpc2FibGVkXCIpLCBzID0gbnVsbCk7XG4gICAgICAgICAgdmFyIGwgPSByLnByb3BzLnNob3dNb250aFllYXJQaWNrZXIgfHwgci5wcm9wcy5zaG93UXVhcnRlclllYXJQaWNrZXIgfHwgci5wcm9wcy5zaG93WWVhclBpY2tlciwgcCA9IHIucHJvcHMsIGQgPSBwLm5leHRNb250aEJ1dHRvbkxhYmVsLCBiID0gcC5uZXh0WWVhckJ1dHRvbkxhYmVsLCBNID0gci5wcm9wcywgdSA9IE0ubmV4dE1vbnRoQXJpYUxhYmVsLCBBID0gdSA9PT0gdm9pZCAwID8gdHlwZW9mIGQgPT0gXCJzdHJpbmdcIiA/IGQgOiBcIk5leHQgTW9udGhcIiA6IHUsIHogPSBNLm5leHRZZWFyQXJpYUxhYmVsLCBmID0geiA9PT0gdm9pZCAwID8gdHlwZW9mIGIgPT0gXCJzdHJpbmdcIiA/IGIgOiBcIk5leHQgWWVhclwiIDogejtcbiAgICAgICAgICByZXR1cm4gbTEuY3JlYXRlRWxlbWVudChcImJ1dHRvblwiLCB7IHR5cGU6IFwiYnV0dG9uXCIsIGNsYXNzTmFtZTogYS5qb2luKFwiIFwiKSwgb25DbGljazogcywgb25LZXlEb3duOiByLnByb3BzLmhhbmRsZU9uS2V5RG93biwgXCJhcmlhLWxhYmVsXCI6IGwgPyBmIDogQSB9LCBtMS5jcmVhdGVFbGVtZW50KFwic3BhblwiLCB7IGNsYXNzTmFtZTogW1wicmVhY3QtZGF0ZXBpY2tlcl9fbmF2aWdhdGlvbi1pY29uXCIsIFwicmVhY3QtZGF0ZXBpY2tlcl9fbmF2aWdhdGlvbi1pY29uLS1uZXh0XCJdLmpvaW4oXCIgXCIpIH0sIGwgPyByLnByb3BzLm5leHRZZWFyQnV0dG9uTGFiZWwgOiByLnByb3BzLm5leHRNb250aEJ1dHRvbkxhYmVsKSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KSwgejEoZjEociksIFwicmVuZGVyQ3VycmVudE1vbnRoXCIsIGZ1bmN0aW9uKCkge1xuICAgICAgdmFyIGkgPSBhcmd1bWVudHMubGVuZ3RoID4gMCAmJiBhcmd1bWVudHNbMF0gIT09IHZvaWQgMCA/IGFyZ3VtZW50c1swXSA6IHIuc3RhdGUuZGF0ZSwgYSA9IFtcInJlYWN0LWRhdGVwaWNrZXJfX2N1cnJlbnQtbW9udGhcIl07XG4gICAgICByZXR1cm4gci5wcm9wcy5zaG93WWVhckRyb3Bkb3duICYmIGEucHVzaChcInJlYWN0LWRhdGVwaWNrZXJfX2N1cnJlbnQtbW9udGgtLWhhc1llYXJEcm9wZG93blwiKSwgci5wcm9wcy5zaG93TW9udGhEcm9wZG93biAmJiBhLnB1c2goXCJyZWFjdC1kYXRlcGlja2VyX19jdXJyZW50LW1vbnRoLS1oYXNNb250aERyb3Bkb3duXCIpLCByLnByb3BzLnNob3dNb250aFllYXJEcm9wZG93biAmJiBhLnB1c2goXCJyZWFjdC1kYXRlcGlja2VyX19jdXJyZW50LW1vbnRoLS1oYXNNb250aFllYXJEcm9wZG93blwiKSwgbTEuY3JlYXRlRWxlbWVudChcImRpdlwiLCB7IGNsYXNzTmFtZTogYS5qb2luKFwiIFwiKSB9LCBlMihpLCByLnByb3BzLmRhdGVGb3JtYXQsIHIucHJvcHMubG9jYWxlKSk7XG4gICAgfSksIHoxKGYxKHIpLCBcInJlbmRlclllYXJEcm9wZG93blwiLCBmdW5jdGlvbigpIHtcbiAgICAgIHZhciBpID0gYXJndW1lbnRzLmxlbmd0aCA+IDAgJiYgYXJndW1lbnRzWzBdICE9PSB2b2lkIDAgJiYgYXJndW1lbnRzWzBdO1xuICAgICAgaWYgKHIucHJvcHMuc2hvd1llYXJEcm9wZG93biAmJiAhaSlcbiAgICAgICAgcmV0dXJuIG0xLmNyZWF0ZUVsZW1lbnQoYlcsIHsgYWRqdXN0RGF0ZU9uQ2hhbmdlOiByLnByb3BzLmFkanVzdERhdGVPbkNoYW5nZSwgZGF0ZTogci5zdGF0ZS5kYXRlLCBvblNlbGVjdDogci5wcm9wcy5vblNlbGVjdCwgc2V0T3Blbjogci5wcm9wcy5zZXRPcGVuLCBkcm9wZG93bk1vZGU6IHIucHJvcHMuZHJvcGRvd25Nb2RlLCBvbkNoYW5nZTogci5jaGFuZ2VZZWFyLCBtaW5EYXRlOiByLnByb3BzLm1pbkRhdGUsIG1heERhdGU6IHIucHJvcHMubWF4RGF0ZSwgeWVhcjogTDAoci5zdGF0ZS5kYXRlKSwgc2Nyb2xsYWJsZVllYXJEcm9wZG93bjogci5wcm9wcy5zY3JvbGxhYmxlWWVhckRyb3Bkb3duLCB5ZWFyRHJvcGRvd25JdGVtTnVtYmVyOiByLnByb3BzLnllYXJEcm9wZG93bkl0ZW1OdW1iZXIgfSk7XG4gICAgfSksIHoxKGYxKHIpLCBcInJlbmRlck1vbnRoRHJvcGRvd25cIiwgZnVuY3Rpb24oKSB7XG4gICAgICB2YXIgaSA9IGFyZ3VtZW50cy5sZW5ndGggPiAwICYmIGFyZ3VtZW50c1swXSAhPT0gdm9pZCAwICYmIGFyZ3VtZW50c1swXTtcbiAgICAgIGlmIChyLnByb3BzLnNob3dNb250aERyb3Bkb3duICYmICFpKVxuICAgICAgICByZXR1cm4gbTEuY3JlYXRlRWxlbWVudChBVywgeyBkcm9wZG93bk1vZGU6IHIucHJvcHMuZHJvcGRvd25Nb2RlLCBsb2NhbGU6IHIucHJvcHMubG9jYWxlLCBvbkNoYW5nZTogci5jaGFuZ2VNb250aCwgbW9udGg6IGcyKHIuc3RhdGUuZGF0ZSksIHVzZVNob3J0TW9udGhJbkRyb3Bkb3duOiByLnByb3BzLnVzZVNob3J0TW9udGhJbkRyb3Bkb3duIH0pO1xuICAgIH0pLCB6MShmMShyKSwgXCJyZW5kZXJNb250aFllYXJEcm9wZG93blwiLCBmdW5jdGlvbigpIHtcbiAgICAgIHZhciBpID0gYXJndW1lbnRzLmxlbmd0aCA+IDAgJiYgYXJndW1lbnRzWzBdICE9PSB2b2lkIDAgJiYgYXJndW1lbnRzWzBdO1xuICAgICAgaWYgKHIucHJvcHMuc2hvd01vbnRoWWVhckRyb3Bkb3duICYmICFpKVxuICAgICAgICByZXR1cm4gbTEuY3JlYXRlRWxlbWVudChoVywgeyBkcm9wZG93bk1vZGU6IHIucHJvcHMuZHJvcGRvd25Nb2RlLCBsb2NhbGU6IHIucHJvcHMubG9jYWxlLCBkYXRlRm9ybWF0OiByLnByb3BzLmRhdGVGb3JtYXQsIG9uQ2hhbmdlOiByLmNoYW5nZU1vbnRoWWVhciwgbWluRGF0ZTogci5wcm9wcy5taW5EYXRlLCBtYXhEYXRlOiByLnByb3BzLm1heERhdGUsIGRhdGU6IHIuc3RhdGUuZGF0ZSwgc2Nyb2xsYWJsZU1vbnRoWWVhckRyb3Bkb3duOiByLnByb3BzLnNjcm9sbGFibGVNb250aFllYXJEcm9wZG93biB9KTtcbiAgICB9KSwgejEoZjEociksIFwiaGFuZGxlVG9kYXlCdXR0b25DbGlja1wiLCBmdW5jdGlvbihpKSB7XG4gICAgICByLnByb3BzLm9uU2VsZWN0KGw3KCksIGkpLCByLnByb3BzLnNldFByZVNlbGVjdGlvbiAmJiByLnByb3BzLnNldFByZVNlbGVjdGlvbihsNygpKTtcbiAgICB9KSwgejEoZjEociksIFwicmVuZGVyVG9kYXlCdXR0b25cIiwgZnVuY3Rpb24oKSB7XG4gICAgICBpZiAoci5wcm9wcy50b2RheUJ1dHRvbiAmJiAhci5wcm9wcy5zaG93VGltZVNlbGVjdE9ubHkpXG4gICAgICAgIHJldHVybiBtMS5jcmVhdGVFbGVtZW50KFwiZGl2XCIsIHsgY2xhc3NOYW1lOiBcInJlYWN0LWRhdGVwaWNrZXJfX3RvZGF5LWJ1dHRvblwiLCBvbkNsaWNrOiBmdW5jdGlvbihpKSB7XG4gICAgICAgICAgcmV0dXJuIHIuaGFuZGxlVG9kYXlCdXR0b25DbGljayhpKTtcbiAgICAgICAgfSB9LCByLnByb3BzLnRvZGF5QnV0dG9uKTtcbiAgICB9KSwgejEoZjEociksIFwicmVuZGVyRGVmYXVsdEhlYWRlclwiLCBmdW5jdGlvbihpKSB7XG4gICAgICB2YXIgYSA9IGkubW9udGhEYXRlLCBzID0gaS5pO1xuICAgICAgcmV0dXJuIG0xLmNyZWF0ZUVsZW1lbnQoXCJkaXZcIiwgeyBjbGFzc05hbWU6IFwicmVhY3QtZGF0ZXBpY2tlcl9faGVhZGVyIFwiLmNvbmNhdChyLnByb3BzLnNob3dUaW1lU2VsZWN0ID8gXCJyZWFjdC1kYXRlcGlja2VyX19oZWFkZXItLWhhcy10aW1lLXNlbGVjdFwiIDogXCJcIikgfSwgci5yZW5kZXJDdXJyZW50TW9udGgoYSksIG0xLmNyZWF0ZUVsZW1lbnQoXCJkaXZcIiwgeyBjbGFzc05hbWU6IFwicmVhY3QtZGF0ZXBpY2tlcl9faGVhZGVyX19kcm9wZG93biByZWFjdC1kYXRlcGlja2VyX19oZWFkZXJfX2Ryb3Bkb3duLS1cIi5jb25jYXQoci5wcm9wcy5kcm9wZG93bk1vZGUpLCBvbkZvY3VzOiByLmhhbmRsZURyb3Bkb3duRm9jdXMgfSwgci5yZW5kZXJNb250aERyb3Bkb3duKHMgIT09IDApLCByLnJlbmRlck1vbnRoWWVhckRyb3Bkb3duKHMgIT09IDApLCByLnJlbmRlclllYXJEcm9wZG93bihzICE9PSAwKSksIG0xLmNyZWF0ZUVsZW1lbnQoXCJkaXZcIiwgeyBjbGFzc05hbWU6IFwicmVhY3QtZGF0ZXBpY2tlcl9fZGF5LW5hbWVzXCIgfSwgci5oZWFkZXIoYSkpKTtcbiAgICB9KSwgejEoZjEociksIFwicmVuZGVyQ3VzdG9tSGVhZGVyXCIsIGZ1bmN0aW9uKCkge1xuICAgICAgdmFyIGkgPSBhcmd1bWVudHMubGVuZ3RoID4gMCAmJiBhcmd1bWVudHNbMF0gIT09IHZvaWQgMCA/IGFyZ3VtZW50c1swXSA6IHt9LCBhID0gaS5tb250aERhdGUsIHMgPSBpLmk7XG4gICAgICBpZiAoci5wcm9wcy5zaG93VGltZVNlbGVjdCAmJiAhci5zdGF0ZS5tb250aENvbnRhaW5lciB8fCByLnByb3BzLnNob3dUaW1lU2VsZWN0T25seSlcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICB2YXIgbCA9IE03KHIuc3RhdGUuZGF0ZSwgci5wcm9wcyksIHAgPSBBNyhyLnN0YXRlLmRhdGUsIHIucHJvcHMpLCBkID0gdTcoci5zdGF0ZS5kYXRlLCByLnByb3BzKSwgYiA9IHo3KHIuc3RhdGUuZGF0ZSwgci5wcm9wcyksIE0gPSAhci5wcm9wcy5zaG93TW9udGhZZWFyUGlja2VyICYmICFyLnByb3BzLnNob3dRdWFydGVyWWVhclBpY2tlciAmJiAhci5wcm9wcy5zaG93WWVhclBpY2tlcjtcbiAgICAgIHJldHVybiBtMS5jcmVhdGVFbGVtZW50KFwiZGl2XCIsIHsgY2xhc3NOYW1lOiBcInJlYWN0LWRhdGVwaWNrZXJfX2hlYWRlciByZWFjdC1kYXRlcGlja2VyX19oZWFkZXItLWN1c3RvbVwiLCBvbkZvY3VzOiByLnByb3BzLm9uRHJvcGRvd25Gb2N1cyB9LCByLnByb3BzLnJlbmRlckN1c3RvbUhlYWRlcih6NCh6NCh7fSwgci5zdGF0ZSksIHt9LCB7IGN1c3RvbUhlYWRlckNvdW50OiBzLCBtb250aERhdGU6IGEsIGNoYW5nZU1vbnRoOiByLmNoYW5nZU1vbnRoLCBjaGFuZ2VZZWFyOiByLmNoYW5nZVllYXIsIGRlY3JlYXNlTW9udGg6IHIuZGVjcmVhc2VNb250aCwgaW5jcmVhc2VNb250aDogci5pbmNyZWFzZU1vbnRoLCBkZWNyZWFzZVllYXI6IHIuZGVjcmVhc2VZZWFyLCBpbmNyZWFzZVllYXI6IHIuaW5jcmVhc2VZZWFyLCBwcmV2TW9udGhCdXR0b25EaXNhYmxlZDogbCwgbmV4dE1vbnRoQnV0dG9uRGlzYWJsZWQ6IHAsIHByZXZZZWFyQnV0dG9uRGlzYWJsZWQ6IGQsIG5leHRZZWFyQnV0dG9uRGlzYWJsZWQ6IGIgfSkpLCBNICYmIG0xLmNyZWF0ZUVsZW1lbnQoXCJkaXZcIiwgeyBjbGFzc05hbWU6IFwicmVhY3QtZGF0ZXBpY2tlcl9fZGF5LW5hbWVzXCIgfSwgci5oZWFkZXIoYSkpKTtcbiAgICB9KSwgejEoZjEociksIFwicmVuZGVyWWVhckhlYWRlclwiLCBmdW5jdGlvbigpIHtcbiAgICAgIHZhciBpID0gci5zdGF0ZS5kYXRlLCBhID0gci5wcm9wcywgcyA9IGEuc2hvd1llYXJQaWNrZXIsIGwgPSBFMyhpLCBhLnllYXJJdGVtTnVtYmVyKSwgcCA9IGwuc3RhcnRQZXJpb2QsIGQgPSBsLmVuZFBlcmlvZDtcbiAgICAgIHJldHVybiBtMS5jcmVhdGVFbGVtZW50KFwiZGl2XCIsIHsgY2xhc3NOYW1lOiBcInJlYWN0LWRhdGVwaWNrZXJfX2hlYWRlciByZWFjdC1kYXRlcGlja2VyLXllYXItaGVhZGVyXCIgfSwgcyA/IFwiXCIuY29uY2F0KHAsIFwiIC0gXCIpLmNvbmNhdChkKSA6IEwwKGkpKTtcbiAgICB9KSwgejEoZjEociksIFwicmVuZGVySGVhZGVyXCIsIGZ1bmN0aW9uKGkpIHtcbiAgICAgIHN3aXRjaCAoITApIHtcbiAgICAgICAgY2FzZSByLnByb3BzLnJlbmRlckN1c3RvbUhlYWRlciAhPT0gdm9pZCAwOlxuICAgICAgICAgIHJldHVybiByLnJlbmRlckN1c3RvbUhlYWRlcihpKTtcbiAgICAgICAgY2FzZSAoci5wcm9wcy5zaG93TW9udGhZZWFyUGlja2VyIHx8IHIucHJvcHMuc2hvd1F1YXJ0ZXJZZWFyUGlja2VyIHx8IHIucHJvcHMuc2hvd1llYXJQaWNrZXIpOlxuICAgICAgICAgIHJldHVybiByLnJlbmRlclllYXJIZWFkZXIoaSk7XG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgcmV0dXJuIHIucmVuZGVyRGVmYXVsdEhlYWRlcihpKTtcbiAgICAgIH1cbiAgICB9KSwgejEoZjEociksIFwicmVuZGVyTW9udGhzXCIsIGZ1bmN0aW9uKCkge1xuICAgICAgdmFyIGk7XG4gICAgICBpZiAoIXIucHJvcHMuc2hvd1RpbWVTZWxlY3RPbmx5ICYmICFyLnByb3BzLnNob3dZZWFyUGlja2VyKSB7XG4gICAgICAgIGZvciAodmFyIGEgPSBbXSwgcyA9IHIucHJvcHMuc2hvd1ByZXZpb3VzTW9udGhzID8gci5wcm9wcy5tb250aHNTaG93biAtIDEgOiAwLCBsID0gXzMoci5zdGF0ZS5kYXRlLCBzKSwgcCA9IChpID0gci5wcm9wcy5tb250aFNlbGVjdGVkSW4pICE9PSBudWxsICYmIGkgIT09IHZvaWQgMCA/IGkgOiBzLCBkID0gMDsgZCA8IHIucHJvcHMubW9udGhzU2hvd247ICsrZCkge1xuICAgICAgICAgIHZhciBiID0gdmUobCwgZCAtIHAgKyBzKSwgTSA9IFwibW9udGgtXCIuY29uY2F0KGQpLCB1ID0gZCA8IHIucHJvcHMubW9udGhzU2hvd24gLSAxLCBBID0gZCA+IDA7XG4gICAgICAgICAgYS5wdXNoKG0xLmNyZWF0ZUVsZW1lbnQoXCJkaXZcIiwgeyBrZXk6IE0sIHJlZjogZnVuY3Rpb24oeikge1xuICAgICAgICAgICAgci5tb250aENvbnRhaW5lciA9IHo7XG4gICAgICAgICAgfSwgY2xhc3NOYW1lOiBcInJlYWN0LWRhdGVwaWNrZXJfX21vbnRoLWNvbnRhaW5lclwiIH0sIHIucmVuZGVySGVhZGVyKHsgbW9udGhEYXRlOiBiLCBpOiBkIH0pLCBtMS5jcmVhdGVFbGVtZW50KENXLCB7IGNob29zZURheUFyaWFMYWJlbFByZWZpeDogci5wcm9wcy5jaG9vc2VEYXlBcmlhTGFiZWxQcmVmaXgsIGRpc2FibGVkRGF5QXJpYUxhYmVsUHJlZml4OiByLnByb3BzLmRpc2FibGVkRGF5QXJpYUxhYmVsUHJlZml4LCB3ZWVrQXJpYUxhYmVsUHJlZml4OiByLnByb3BzLndlZWtBcmlhTGFiZWxQcmVmaXgsIGFyaWFMYWJlbFByZWZpeDogci5wcm9wcy5tb250aEFyaWFMYWJlbFByZWZpeCwgb25DaGFuZ2U6IHIuY2hhbmdlTW9udGhZZWFyLCBkYXk6IGIsIGRheUNsYXNzTmFtZTogci5wcm9wcy5kYXlDbGFzc05hbWUsIGNhbGVuZGFyU3RhcnREYXk6IHIucHJvcHMuY2FsZW5kYXJTdGFydERheSwgbW9udGhDbGFzc05hbWU6IHIucHJvcHMubW9udGhDbGFzc05hbWUsIG9uRGF5Q2xpY2s6IHIuaGFuZGxlRGF5Q2xpY2ssIGhhbmRsZU9uS2V5RG93bjogci5wcm9wcy5oYW5kbGVPbkRheUtleURvd24sIG9uRGF5TW91c2VFbnRlcjogci5oYW5kbGVEYXlNb3VzZUVudGVyLCBvbk1vdXNlTGVhdmU6IHIuaGFuZGxlTW9udGhNb3VzZUxlYXZlLCBvbldlZWtTZWxlY3Q6IHIucHJvcHMub25XZWVrU2VsZWN0LCBvcmRlckluRGlzcGxheTogZCwgZm9ybWF0V2Vla051bWJlcjogci5wcm9wcy5mb3JtYXRXZWVrTnVtYmVyLCBsb2NhbGU6IHIucHJvcHMubG9jYWxlLCBtaW5EYXRlOiByLnByb3BzLm1pbkRhdGUsIG1heERhdGU6IHIucHJvcHMubWF4RGF0ZSwgZXhjbHVkZURhdGVzOiByLnByb3BzLmV4Y2x1ZGVEYXRlcywgZXhjbHVkZURhdGVJbnRlcnZhbHM6IHIucHJvcHMuZXhjbHVkZURhdGVJbnRlcnZhbHMsIGhpZ2hsaWdodERhdGVzOiByLnByb3BzLmhpZ2hsaWdodERhdGVzLCBob2xpZGF5czogci5wcm9wcy5ob2xpZGF5cywgc2VsZWN0aW5nRGF0ZTogci5zdGF0ZS5zZWxlY3RpbmdEYXRlLCBpbmNsdWRlRGF0ZXM6IHIucHJvcHMuaW5jbHVkZURhdGVzLCBpbmNsdWRlRGF0ZUludGVydmFsczogci5wcm9wcy5pbmNsdWRlRGF0ZUludGVydmFscywgaW5saW5lOiByLnByb3BzLmlubGluZSwgc2hvdWxkRm9jdXNEYXlJbmxpbmU6IHIucHJvcHMuc2hvdWxkRm9jdXNEYXlJbmxpbmUsIGZpeGVkSGVpZ2h0OiByLnByb3BzLmZpeGVkSGVpZ2h0LCBmaWx0ZXJEYXRlOiByLnByb3BzLmZpbHRlckRhdGUsIHByZVNlbGVjdGlvbjogci5wcm9wcy5wcmVTZWxlY3Rpb24sIHNldFByZVNlbGVjdGlvbjogci5wcm9wcy5zZXRQcmVTZWxlY3Rpb24sIHNlbGVjdGVkOiByLnByb3BzLnNlbGVjdGVkLCBzZWxlY3RzU3RhcnQ6IHIucHJvcHMuc2VsZWN0c1N0YXJ0LCBzZWxlY3RzRW5kOiByLnByb3BzLnNlbGVjdHNFbmQsIHNlbGVjdHNSYW5nZTogci5wcm9wcy5zZWxlY3RzUmFuZ2UsIHNlbGVjdHNEaXNhYmxlZERheXNJblJhbmdlOiByLnByb3BzLnNlbGVjdHNEaXNhYmxlZERheXNJblJhbmdlLCBzaG93V2Vla051bWJlcnM6IHIucHJvcHMuc2hvd1dlZWtOdW1iZXJzLCBzdGFydERhdGU6IHIucHJvcHMuc3RhcnREYXRlLCBlbmREYXRlOiByLnByb3BzLmVuZERhdGUsIHBlZWtOZXh0TW9udGg6IHIucHJvcHMucGVla05leHRNb250aCwgc2V0T3Blbjogci5wcm9wcy5zZXRPcGVuLCBzaG91bGRDbG9zZU9uU2VsZWN0OiByLnByb3BzLnNob3VsZENsb3NlT25TZWxlY3QsIHJlbmRlckRheUNvbnRlbnRzOiByLnByb3BzLnJlbmRlckRheUNvbnRlbnRzLCByZW5kZXJNb250aENvbnRlbnQ6IHIucHJvcHMucmVuZGVyTW9udGhDb250ZW50LCByZW5kZXJRdWFydGVyQ29udGVudDogci5wcm9wcy5yZW5kZXJRdWFydGVyQ29udGVudCwgcmVuZGVyWWVhckNvbnRlbnQ6IHIucHJvcHMucmVuZGVyWWVhckNvbnRlbnQsIGRpc2FibGVkS2V5Ym9hcmROYXZpZ2F0aW9uOiByLnByb3BzLmRpc2FibGVkS2V5Ym9hcmROYXZpZ2F0aW9uLCBzaG93TW9udGhZZWFyUGlja2VyOiByLnByb3BzLnNob3dNb250aFllYXJQaWNrZXIsIHNob3dGdWxsTW9udGhZZWFyUGlja2VyOiByLnByb3BzLnNob3dGdWxsTW9udGhZZWFyUGlja2VyLCBzaG93VHdvQ29sdW1uTW9udGhZZWFyUGlja2VyOiByLnByb3BzLnNob3dUd29Db2x1bW5Nb250aFllYXJQaWNrZXIsIHNob3dGb3VyQ29sdW1uTW9udGhZZWFyUGlja2VyOiByLnByb3BzLnNob3dGb3VyQ29sdW1uTW9udGhZZWFyUGlja2VyLCBzaG93WWVhclBpY2tlcjogci5wcm9wcy5zaG93WWVhclBpY2tlciwgc2hvd1F1YXJ0ZXJZZWFyUGlja2VyOiByLnByb3BzLnNob3dRdWFydGVyWWVhclBpY2tlciwgc2hvd1dlZWtQaWNrZXI6IHIucHJvcHMuc2hvd1dlZWtQaWNrZXIsIGlzSW5wdXRGb2N1c2VkOiByLnByb3BzLmlzSW5wdXRGb2N1c2VkLCBjb250YWluZXJSZWY6IHIuY29udGFpbmVyUmVmLCBtb250aFNob3dzRHVwbGljYXRlRGF5c0VuZDogdSwgbW9udGhTaG93c0R1cGxpY2F0ZURheXNTdGFydDogQSB9KSkpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBhO1xuICAgICAgfVxuICAgIH0pLCB6MShmMShyKSwgXCJyZW5kZXJZZWFyc1wiLCBmdW5jdGlvbigpIHtcbiAgICAgIGlmICghci5wcm9wcy5zaG93VGltZVNlbGVjdE9ubHkpXG4gICAgICAgIHJldHVybiByLnByb3BzLnNob3dZZWFyUGlja2VyID8gbTEuY3JlYXRlRWxlbWVudChcImRpdlwiLCB7IGNsYXNzTmFtZTogXCJyZWFjdC1kYXRlcGlja2VyX195ZWFyLS1jb250YWluZXJcIiB9LCByLnJlbmRlckhlYWRlcigpLCBtMS5jcmVhdGVFbGVtZW50KG1XLCAkMyh7IG9uRGF5Q2xpY2s6IHIuaGFuZGxlRGF5Q2xpY2ssIHNlbGVjdGluZ0RhdGU6IHIuc3RhdGUuc2VsZWN0aW5nRGF0ZSwgY2xlYXJTZWxlY3RpbmdEYXRlOiByLmNsZWFyU2VsZWN0aW5nRGF0ZSwgZGF0ZTogci5zdGF0ZS5kYXRlIH0sIHIucHJvcHMsIHsgb25ZZWFyTW91c2VFbnRlcjogci5oYW5kbGVZZWFyTW91c2VFbnRlciwgb25ZZWFyTW91c2VMZWF2ZTogci5oYW5kbGVZZWFyTW91c2VMZWF2ZSB9KSkpIDogdm9pZCAwO1xuICAgIH0pLCB6MShmMShyKSwgXCJyZW5kZXJUaW1lU2VjdGlvblwiLCBmdW5jdGlvbigpIHtcbiAgICAgIGlmIChyLnByb3BzLnNob3dUaW1lU2VsZWN0ICYmIChyLnN0YXRlLm1vbnRoQ29udGFpbmVyIHx8IHIucHJvcHMuc2hvd1RpbWVTZWxlY3RPbmx5KSlcbiAgICAgICAgcmV0dXJuIG0xLmNyZWF0ZUVsZW1lbnQoQ3AsIHsgc2VsZWN0ZWQ6IHIucHJvcHMuc2VsZWN0ZWQsIG9wZW5Ub0RhdGU6IHIucHJvcHMub3BlblRvRGF0ZSwgb25DaGFuZ2U6IHIucHJvcHMub25UaW1lQ2hhbmdlLCB0aW1lQ2xhc3NOYW1lOiByLnByb3BzLnRpbWVDbGFzc05hbWUsIGZvcm1hdDogci5wcm9wcy50aW1lRm9ybWF0LCBpbmNsdWRlVGltZXM6IHIucHJvcHMuaW5jbHVkZVRpbWVzLCBpbnRlcnZhbHM6IHIucHJvcHMudGltZUludGVydmFscywgbWluVGltZTogci5wcm9wcy5taW5UaW1lLCBtYXhUaW1lOiByLnByb3BzLm1heFRpbWUsIGV4Y2x1ZGVUaW1lczogci5wcm9wcy5leGNsdWRlVGltZXMsIGZpbHRlclRpbWU6IHIucHJvcHMuZmlsdGVyVGltZSwgdGltZUNhcHRpb246IHIucHJvcHMudGltZUNhcHRpb24sIHRvZGF5QnV0dG9uOiByLnByb3BzLnRvZGF5QnV0dG9uLCBzaG93TW9udGhEcm9wZG93bjogci5wcm9wcy5zaG93TW9udGhEcm9wZG93biwgc2hvd01vbnRoWWVhckRyb3Bkb3duOiByLnByb3BzLnNob3dNb250aFllYXJEcm9wZG93biwgc2hvd1llYXJEcm9wZG93bjogci5wcm9wcy5zaG93WWVhckRyb3Bkb3duLCB3aXRoUG9ydGFsOiByLnByb3BzLndpdGhQb3J0YWwsIG1vbnRoUmVmOiByLnN0YXRlLm1vbnRoQ29udGFpbmVyLCBpbmplY3RUaW1lczogci5wcm9wcy5pbmplY3RUaW1lcywgbG9jYWxlOiByLnByb3BzLmxvY2FsZSwgaGFuZGxlT25LZXlEb3duOiByLnByb3BzLmhhbmRsZU9uS2V5RG93biwgc2hvd1RpbWVTZWxlY3RPbmx5OiByLnByb3BzLnNob3dUaW1lU2VsZWN0T25seSB9KTtcbiAgICB9KSwgejEoZjEociksIFwicmVuZGVySW5wdXRUaW1lU2VjdGlvblwiLCBmdW5jdGlvbigpIHtcbiAgICAgIHZhciBpID0gbmV3IERhdGUoci5wcm9wcy5zZWxlY3RlZCksIGEgPSBMdChpKSAmJiByLnByb3BzLnNlbGVjdGVkID8gXCJcIi5jb25jYXQoTzcoaS5nZXRIb3VycygpKSwgXCI6XCIpLmNvbmNhdChPNyhpLmdldE1pbnV0ZXMoKSkpIDogXCJcIjtcbiAgICAgIGlmIChyLnByb3BzLnNob3dUaW1lSW5wdXQpXG4gICAgICAgIHJldHVybiBtMS5jcmVhdGVFbGVtZW50KExXLCB7IGRhdGU6IGksIHRpbWVTdHJpbmc6IGEsIHRpbWVJbnB1dExhYmVsOiByLnByb3BzLnRpbWVJbnB1dExhYmVsLCBvbkNoYW5nZTogci5wcm9wcy5vblRpbWVDaGFuZ2UsIGN1c3RvbVRpbWVJbnB1dDogci5wcm9wcy5jdXN0b21UaW1lSW5wdXQgfSk7XG4gICAgfSksIHoxKGYxKHIpLCBcInJlbmRlckFyaWFMaXZlUmVnaW9uXCIsIGZ1bmN0aW9uKCkge1xuICAgICAgdmFyIGksIGEgPSBFMyhyLnN0YXRlLmRhdGUsIHIucHJvcHMueWVhckl0ZW1OdW1iZXIpLCBzID0gYS5zdGFydFBlcmlvZCwgbCA9IGEuZW5kUGVyaW9kO1xuICAgICAgcmV0dXJuIGkgPSByLnByb3BzLnNob3dZZWFyUGlja2VyID8gXCJcIi5jb25jYXQocywgXCIgLSBcIikuY29uY2F0KGwpIDogci5wcm9wcy5zaG93TW9udGhZZWFyUGlja2VyIHx8IHIucHJvcHMuc2hvd1F1YXJ0ZXJZZWFyUGlja2VyID8gTDAoci5zdGF0ZS5kYXRlKSA6IFwiXCIuY29uY2F0KGw2KGcyKHIuc3RhdGUuZGF0ZSksIHIucHJvcHMubG9jYWxlKSwgXCIgXCIpLmNvbmNhdChMMChyLnN0YXRlLmRhdGUpKSwgbTEuY3JlYXRlRWxlbWVudChcInNwYW5cIiwgeyByb2xlOiBcImFsZXJ0XCIsIFwiYXJpYS1saXZlXCI6IFwicG9saXRlXCIsIGNsYXNzTmFtZTogXCJyZWFjdC1kYXRlcGlja2VyX19hcmlhLWxpdmVcIiB9LCByLnN0YXRlLmlzUmVuZGVyQXJpYUxpdmVNZXNzYWdlICYmIGkpO1xuICAgIH0pLCB6MShmMShyKSwgXCJyZW5kZXJDaGlsZHJlblwiLCBmdW5jdGlvbigpIHtcbiAgICAgIGlmIChyLnByb3BzLmNoaWxkcmVuKVxuICAgICAgICByZXR1cm4gbTEuY3JlYXRlRWxlbWVudChcImRpdlwiLCB7IGNsYXNzTmFtZTogXCJyZWFjdC1kYXRlcGlja2VyX19jaGlsZHJlbi1jb250YWluZXJcIiB9LCByLnByb3BzLmNoaWxkcmVuKTtcbiAgICB9KSwgci5jb250YWluZXJSZWYgPSBtMS5jcmVhdGVSZWYoKSwgci5zdGF0ZSA9IHsgZGF0ZTogci5nZXREYXRlSW5WaWV3KCksIHNlbGVjdGluZ0RhdGU6IG51bGwsIG1vbnRoQ29udGFpbmVyOiBudWxsLCBpc1JlbmRlckFyaWFMaXZlTWVzc2FnZTogITEgfSwgcjtcbiAgfVxuICByZXR1cm4gaDIobywgW3sga2V5OiBcImNvbXBvbmVudERpZE1vdW50XCIsIHZhbHVlOiBmdW5jdGlvbigpIHtcbiAgICB2YXIgbiA9IHRoaXM7XG4gICAgdGhpcy5wcm9wcy5zaG93VGltZVNlbGVjdCAmJiAodGhpcy5hc3NpZ25Nb250aENvbnRhaW5lciA9IHZvaWQgbi5zZXRTdGF0ZSh7IG1vbnRoQ29udGFpbmVyOiBuLm1vbnRoQ29udGFpbmVyIH0pKTtcbiAgfSB9LCB7IGtleTogXCJjb21wb25lbnREaWRVcGRhdGVcIiwgdmFsdWU6IGZ1bmN0aW9uKG4pIHtcbiAgICB2YXIgciA9IHRoaXM7XG4gICAgaWYgKCF0aGlzLnByb3BzLnByZVNlbGVjdGlvbiB8fCBRMCh0aGlzLnByb3BzLnByZVNlbGVjdGlvbiwgbi5wcmVTZWxlY3Rpb24pICYmIHRoaXMucHJvcHMubW9udGhTZWxlY3RlZEluID09PSBuLm1vbnRoU2VsZWN0ZWRJbilcbiAgICAgIHRoaXMucHJvcHMub3BlblRvRGF0ZSAmJiAhUTAodGhpcy5wcm9wcy5vcGVuVG9EYXRlLCBuLm9wZW5Ub0RhdGUpICYmIHRoaXMuc2V0U3RhdGUoeyBkYXRlOiB0aGlzLnByb3BzLm9wZW5Ub0RhdGUgfSk7XG4gICAgZWxzZSB7XG4gICAgICB2YXIgaSA9ICFmZSh0aGlzLnN0YXRlLmRhdGUsIHRoaXMucHJvcHMucHJlU2VsZWN0aW9uKTtcbiAgICAgIHRoaXMuc2V0U3RhdGUoeyBkYXRlOiB0aGlzLnByb3BzLnByZVNlbGVjdGlvbiB9LCBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIGkgJiYgci5oYW5kbGVDdXN0b21Nb250aENoYW5nZShyLnN0YXRlLmRhdGUpO1xuICAgICAgfSk7XG4gICAgfVxuICB9IH0sIHsga2V5OiBcInJlbmRlclwiLCB2YWx1ZTogZnVuY3Rpb24oKSB7XG4gICAgdmFyIG4gPSB0aGlzLnByb3BzLmNvbnRhaW5lciB8fCB2VztcbiAgICByZXR1cm4gbTEuY3JlYXRlRWxlbWVudChcImRpdlwiLCB7IHN0eWxlOiB7IGRpc3BsYXk6IFwiY29udGVudHNcIiB9LCByZWY6IHRoaXMuY29udGFpbmVyUmVmIH0sIG0xLmNyZWF0ZUVsZW1lbnQobiwgeyBjbGFzc05hbWU6IG0yKFwicmVhY3QtZGF0ZXBpY2tlclwiLCB0aGlzLnByb3BzLmNsYXNzTmFtZSwgeyBcInJlYWN0LWRhdGVwaWNrZXItLXRpbWUtb25seVwiOiB0aGlzLnByb3BzLnNob3dUaW1lU2VsZWN0T25seSB9KSwgc2hvd1BvcHBlckFycm93OiB0aGlzLnByb3BzLnNob3dQb3BwZXJBcnJvdywgYXJyb3dQcm9wczogdGhpcy5wcm9wcy5hcnJvd1Byb3BzIH0sIHRoaXMucmVuZGVyQXJpYUxpdmVSZWdpb24oKSwgdGhpcy5yZW5kZXJQcmV2aW91c0J1dHRvbigpLCB0aGlzLnJlbmRlck5leHRCdXR0b24oKSwgdGhpcy5yZW5kZXJNb250aHMoKSwgdGhpcy5yZW5kZXJZZWFycygpLCB0aGlzLnJlbmRlclRvZGF5QnV0dG9uKCksIHRoaXMucmVuZGVyVGltZVNlY3Rpb24oKSwgdGhpcy5yZW5kZXJJbnB1dFRpbWVTZWN0aW9uKCksIHRoaXMucmVuZGVyQ2hpbGRyZW4oKSkpO1xuICB9IH1dLCBbeyBrZXk6IFwiZGVmYXVsdFByb3BzXCIsIGdldDogZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIHsgb25Ecm9wZG93bkZvY3VzOiBmdW5jdGlvbigpIHtcbiAgICB9LCBtb250aHNTaG93bjogMSwgZm9yY2VTaG93TW9udGhOYXZpZ2F0aW9uOiAhMSwgdGltZUNhcHRpb246IFwiVGltZVwiLCBwcmV2aW91c1llYXJCdXR0b25MYWJlbDogXCJQcmV2aW91cyBZZWFyXCIsIG5leHRZZWFyQnV0dG9uTGFiZWw6IFwiTmV4dCBZZWFyXCIsIHByZXZpb3VzTW9udGhCdXR0b25MYWJlbDogXCJQcmV2aW91cyBNb250aFwiLCBuZXh0TW9udGhCdXR0b25MYWJlbDogXCJOZXh0IE1vbnRoXCIsIGN1c3RvbVRpbWVJbnB1dDogbnVsbCwgeWVhckl0ZW1OdW1iZXI6IEtvIH07XG4gIH0gfV0pLCBvO1xufSgpLCB3VyA9IGZ1bmN0aW9uKGUpIHtcbiAgdmFyIHQgPSBlLmljb24sIG8gPSBlLmNsYXNzTmFtZSwgbiA9IG8gPT09IHZvaWQgMCA/IFwiXCIgOiBvLCByID0gZS5vbkNsaWNrLCBpID0gXCJyZWFjdC1kYXRlcGlja2VyX19jYWxlbmRhci1pY29uXCI7XG4gIHJldHVybiBtMS5pc1ZhbGlkRWxlbWVudCh0KSA/IG0xLmNsb25lRWxlbWVudCh0LCB7IGNsYXNzTmFtZTogXCJcIi5jb25jYXQodC5wcm9wcy5jbGFzc05hbWUgfHwgXCJcIiwgXCIgXCIpLmNvbmNhdChpLCBcIiBcIikuY29uY2F0KG4pLCBvbkNsaWNrOiBmdW5jdGlvbihhKSB7XG4gICAgdHlwZW9mIHQucHJvcHMub25DbGljayA9PSBcImZ1bmN0aW9uXCIgJiYgdC5wcm9wcy5vbkNsaWNrKGEpLCB0eXBlb2YgciA9PSBcImZ1bmN0aW9uXCIgJiYgcihhKTtcbiAgfSB9KSA6IHR5cGVvZiB0ID09IFwic3RyaW5nXCIgPyBtMS5jcmVhdGVFbGVtZW50KFwiaVwiLCB7IGNsYXNzTmFtZTogXCJcIi5jb25jYXQoaSwgXCIgXCIpLmNvbmNhdCh0LCBcIiBcIikuY29uY2F0KG4pLCBcImFyaWEtaGlkZGVuXCI6IFwidHJ1ZVwiLCBvbkNsaWNrOiByIH0pIDogbTEuY3JlYXRlRWxlbWVudChcInN2Z1wiLCB7IGNsYXNzTmFtZTogXCJcIi5jb25jYXQoaSwgXCIgXCIpLmNvbmNhdChuKSwgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiwgdmlld0JveDogXCIwIDAgNDQ4IDUxMlwiLCBvbkNsaWNrOiByIH0sIG0xLmNyZWF0ZUVsZW1lbnQoXCJwYXRoXCIsIHsgZDogXCJNOTYgMzJWNjRINDhDMjEuNSA2NCAwIDg1LjUgMCAxMTJ2NDhINDQ4VjExMmMwLTI2LjUtMjEuNS00OC00OC00OEgzNTJWMzJjMC0xNy43LTE0LjMtMzItMzItMzJzLTMyIDE0LjMtMzIgMzJWNjRIMTYwVjMyYzAtMTcuNy0xNC4zLTMyLTMyLTMyUzk2IDE0LjMgOTYgMzJ6TTQ0OCAxOTJIMFY0NjRjMCAyNi41IDIxLjUgNDggNDggNDhINDAwYzI2LjUgMCA0OC0yMS41IDQ4LTQ4VjE5MnpcIiB9KSk7XG59LCBtcCA9IGZ1bmN0aW9uKGUpIHtcbiAgTzIobywgbTEuQ29tcG9uZW50KTtcbiAgdmFyIHQgPSBmMihvKTtcbiAgZnVuY3Rpb24gbyhuKSB7XG4gICAgdmFyIHI7XG4gICAgcmV0dXJuIHoyKHRoaXMsIG8pLCAociA9IHQuY2FsbCh0aGlzLCBuKSkuZWwgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpLCByO1xuICB9XG4gIHJldHVybiBoMihvLCBbeyBrZXk6IFwiY29tcG9uZW50RGlkTW91bnRcIiwgdmFsdWU6IGZ1bmN0aW9uKCkge1xuICAgIHRoaXMucG9ydGFsUm9vdCA9ICh0aGlzLnByb3BzLnBvcnRhbEhvc3QgfHwgZG9jdW1lbnQpLmdldEVsZW1lbnRCeUlkKHRoaXMucHJvcHMucG9ydGFsSWQpLCB0aGlzLnBvcnRhbFJvb3QgfHwgKHRoaXMucG9ydGFsUm9vdCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIiksIHRoaXMucG9ydGFsUm9vdC5zZXRBdHRyaWJ1dGUoXCJpZFwiLCB0aGlzLnByb3BzLnBvcnRhbElkKSwgKHRoaXMucHJvcHMucG9ydGFsSG9zdCB8fCBkb2N1bWVudC5ib2R5KS5hcHBlbmRDaGlsZCh0aGlzLnBvcnRhbFJvb3QpKSwgdGhpcy5wb3J0YWxSb290LmFwcGVuZENoaWxkKHRoaXMuZWwpO1xuICB9IH0sIHsga2V5OiBcImNvbXBvbmVudFdpbGxVbm1vdW50XCIsIHZhbHVlOiBmdW5jdGlvbigpIHtcbiAgICB0aGlzLnBvcnRhbFJvb3QucmVtb3ZlQ2hpbGQodGhpcy5lbCk7XG4gIH0gfSwgeyBrZXk6IFwicmVuZGVyXCIsIHZhbHVlOiBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gbmwuY3JlYXRlUG9ydGFsKHRoaXMucHJvcHMuY2hpbGRyZW4sIHRoaXMuZWwpO1xuICB9IH1dKSwgbztcbn0oKSwgeFcgPSBmdW5jdGlvbihlKSB7XG4gIHJldHVybiAhZS5kaXNhYmxlZCAmJiBlLnRhYkluZGV4ICE9PSAtMTtcbn0sIExwID0gZnVuY3Rpb24oZSkge1xuICBPMihvLCBtMS5Db21wb25lbnQpO1xuICB2YXIgdCA9IGYyKG8pO1xuICBmdW5jdGlvbiBvKG4pIHtcbiAgICB2YXIgcjtcbiAgICByZXR1cm4gejIodGhpcywgbyksIHoxKGYxKHIgPSB0LmNhbGwodGhpcywgbikpLCBcImdldFRhYkNoaWxkcmVuXCIsIGZ1bmN0aW9uKCkge1xuICAgICAgcmV0dXJuIEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKHIudGFiTG9vcFJlZi5jdXJyZW50LnF1ZXJ5U2VsZWN0b3JBbGwoXCJbdGFiaW5kZXhdLCBhLCBidXR0b24sIGlucHV0LCBzZWxlY3QsIHRleHRhcmVhXCIpLCAxLCAtMSkuZmlsdGVyKHhXKTtcbiAgICB9KSwgejEoZjEociksIFwiaGFuZGxlRm9jdXNTdGFydFwiLCBmdW5jdGlvbigpIHtcbiAgICAgIHZhciBpID0gci5nZXRUYWJDaGlsZHJlbigpO1xuICAgICAgaSAmJiBpLmxlbmd0aCA+IDEgJiYgaVtpLmxlbmd0aCAtIDFdLmZvY3VzKCk7XG4gICAgfSksIHoxKGYxKHIpLCBcImhhbmRsZUZvY3VzRW5kXCIsIGZ1bmN0aW9uKCkge1xuICAgICAgdmFyIGkgPSByLmdldFRhYkNoaWxkcmVuKCk7XG4gICAgICBpICYmIGkubGVuZ3RoID4gMSAmJiBpWzBdLmZvY3VzKCk7XG4gICAgfSksIHIudGFiTG9vcFJlZiA9IG0xLmNyZWF0ZVJlZigpLCByO1xuICB9XG4gIHJldHVybiBoMihvLCBbeyBrZXk6IFwicmVuZGVyXCIsIHZhbHVlOiBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gdGhpcy5wcm9wcy5lbmFibGVUYWJMb29wID8gbTEuY3JlYXRlRWxlbWVudChcImRpdlwiLCB7IGNsYXNzTmFtZTogXCJyZWFjdC1kYXRlcGlja2VyX190YWItbG9vcFwiLCByZWY6IHRoaXMudGFiTG9vcFJlZiB9LCBtMS5jcmVhdGVFbGVtZW50KFwiZGl2XCIsIHsgY2xhc3NOYW1lOiBcInJlYWN0LWRhdGVwaWNrZXJfX3RhYi1sb29wX19zdGFydFwiLCB0YWJJbmRleDogXCIwXCIsIG9uRm9jdXM6IHRoaXMuaGFuZGxlRm9jdXNTdGFydCB9KSwgdGhpcy5wcm9wcy5jaGlsZHJlbiwgbTEuY3JlYXRlRWxlbWVudChcImRpdlwiLCB7IGNsYXNzTmFtZTogXCJyZWFjdC1kYXRlcGlja2VyX190YWItbG9vcF9fZW5kXCIsIHRhYkluZGV4OiBcIjBcIiwgb25Gb2N1czogdGhpcy5oYW5kbGVGb2N1c0VuZCB9KSkgOiB0aGlzLnByb3BzLmNoaWxkcmVuO1xuICB9IH1dLCBbeyBrZXk6IFwiZGVmYXVsdFByb3BzXCIsIGdldDogZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIHsgZW5hYmxlVGFiTG9vcDogITAgfTtcbiAgfSB9XSksIG87XG59KCksIFdXID0gZnVuY3Rpb24oZSkge1xuICBPMihvLCBtMS5Db21wb25lbnQpO1xuICB2YXIgdCA9IGYyKG8pO1xuICBmdW5jdGlvbiBvKCkge1xuICAgIHJldHVybiB6Mih0aGlzLCBvKSwgdC5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICB9XG4gIHJldHVybiBoMihvLCBbeyBrZXk6IFwicmVuZGVyXCIsIHZhbHVlOiBmdW5jdGlvbigpIHtcbiAgICB2YXIgbiwgciA9IHRoaXMucHJvcHMsIGkgPSByLmNsYXNzTmFtZSwgYSA9IHIud3JhcHBlckNsYXNzTmFtZSwgcyA9IHIuaGlkZVBvcHBlciwgbCA9IHIucG9wcGVyQ29tcG9uZW50LCBwID0gci5wb3BwZXJNb2RpZmllcnMsIGQgPSByLnBvcHBlclBsYWNlbWVudCwgYiA9IHIucG9wcGVyUHJvcHMsIE0gPSByLnRhcmdldENvbXBvbmVudCwgdSA9IHIuZW5hYmxlVGFiTG9vcCwgQSA9IHIucG9wcGVyT25LZXlEb3duLCB6ID0gci5wb3J0YWxJZCwgZiA9IHIucG9ydGFsSG9zdDtcbiAgICBpZiAoIXMpIHtcbiAgICAgIHZhciBPID0gbTIoXCJyZWFjdC1kYXRlcGlja2VyLXBvcHBlclwiLCBpKTtcbiAgICAgIG4gPSBtMS5jcmVhdGVFbGVtZW50KFdxLCAkMyh7IG1vZGlmaWVyczogcCwgcGxhY2VtZW50OiBkIH0sIGIpLCBmdW5jdGlvbihnKSB7XG4gICAgICAgIHZhciB2ID0gZy5yZWYsIEwgPSBnLnN0eWxlLCB5ID0gZy5wbGFjZW1lbnQsIEIgPSBnLmFycm93UHJvcHM7XG4gICAgICAgIHJldHVybiBtMS5jcmVhdGVFbGVtZW50KExwLCB7IGVuYWJsZVRhYkxvb3A6IHUgfSwgbTEuY3JlYXRlRWxlbWVudChcImRpdlwiLCB7IHJlZjogdiwgc3R5bGU6IEwsIGNsYXNzTmFtZTogTywgXCJkYXRhLXBsYWNlbWVudFwiOiB5LCBvbktleURvd246IEEgfSwgbTEuY2xvbmVFbGVtZW50KGwsIHsgYXJyb3dQcm9wczogQiB9KSkpO1xuICAgICAgfSk7XG4gICAgfVxuICAgIHRoaXMucHJvcHMucG9wcGVyQ29udGFpbmVyICYmIChuID0gbTEuY3JlYXRlRWxlbWVudCh0aGlzLnByb3BzLnBvcHBlckNvbnRhaW5lciwge30sIG4pKSwgeiAmJiAhcyAmJiAobiA9IG0xLmNyZWF0ZUVsZW1lbnQobXAsIHsgcG9ydGFsSWQ6IHosIHBvcnRhbEhvc3Q6IGYgfSwgbikpO1xuICAgIHZhciBoID0gbTIoXCJyZWFjdC1kYXRlcGlja2VyLXdyYXBwZXJcIiwgYSk7XG4gICAgcmV0dXJuIG0xLmNyZWF0ZUVsZW1lbnQoYnYsIHsgY2xhc3NOYW1lOiBcInJlYWN0LWRhdGVwaWNrZXItbWFuYWdlclwiIH0sIG0xLmNyZWF0ZUVsZW1lbnQoa3EsIG51bGwsIGZ1bmN0aW9uKGcpIHtcbiAgICAgIHZhciB2ID0gZy5yZWY7XG4gICAgICByZXR1cm4gbTEuY3JlYXRlRWxlbWVudChcImRpdlwiLCB7IHJlZjogdiwgY2xhc3NOYW1lOiBoIH0sIE0pO1xuICAgIH0pLCBuKTtcbiAgfSB9XSwgW3sga2V5OiBcImRlZmF1bHRQcm9wc1wiLCBnZXQ6IGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiB7IGhpZGVQb3BwZXI6ICEwLCBwb3BwZXJNb2RpZmllcnM6IFtdLCBwb3BwZXJQcm9wczoge30sIHBvcHBlclBsYWNlbWVudDogXCJib3R0b20tc3RhcnRcIiB9O1xuICB9IH1dKSwgbztcbn0oKSwgQzcgPSBcInJlYWN0LWRhdGVwaWNrZXItaWdub3JlLW9uY2xpY2tvdXRzaWRlXCIsIFJXID0gWDQoeVcpLCBEaSA9IFwiRGF0ZSBpbnB1dCBub3QgdmFsaWQuXCIsIHZwID0gZnVuY3Rpb24oZSkge1xuICBPMihvLCBtMS5Db21wb25lbnQpO1xuICB2YXIgdCA9IGYyKG8pO1xuICBmdW5jdGlvbiBvKG4pIHtcbiAgICB2YXIgcjtcbiAgICByZXR1cm4gejIodGhpcywgbyksIHoxKGYxKHIgPSB0LmNhbGwodGhpcywgbikpLCBcImdldFByZVNlbGVjdGlvblwiLCBmdW5jdGlvbigpIHtcbiAgICAgIHJldHVybiByLnByb3BzLm9wZW5Ub0RhdGUgPyByLnByb3BzLm9wZW5Ub0RhdGUgOiByLnByb3BzLnNlbGVjdHNFbmQgJiYgci5wcm9wcy5zdGFydERhdGUgPyByLnByb3BzLnN0YXJ0RGF0ZSA6IHIucHJvcHMuc2VsZWN0c1N0YXJ0ICYmIHIucHJvcHMuZW5kRGF0ZSA/IHIucHJvcHMuZW5kRGF0ZSA6IEcwKCk7XG4gICAgfSksIHoxKGYxKHIpLCBcIm1vZGlmeUhvbGlkYXlzXCIsIGZ1bmN0aW9uKCkge1xuICAgICAgdmFyIGk7XG4gICAgICByZXR1cm4gKGkgPSByLnByb3BzLmhvbGlkYXlzKSA9PT0gbnVsbCB8fCBpID09PSB2b2lkIDAgPyB2b2lkIDAgOiBpLnJlZHVjZShmdW5jdGlvbihhLCBzKSB7XG4gICAgICAgIHZhciBsID0gbmV3IERhdGUocy5kYXRlKTtcbiAgICAgICAgcmV0dXJuIGxyKGwpID8gW10uY29uY2F0KEFyKGEpLCBbejQoejQoe30sIHMpLCB7fSwgeyBkYXRlOiBsIH0pXSkgOiBhO1xuICAgICAgfSwgW10pO1xuICAgIH0pLCB6MShmMShyKSwgXCJjYWxjSW5pdGlhbFN0YXRlXCIsIGZ1bmN0aW9uKCkge1xuICAgICAgdmFyIGksIGEgPSByLmdldFByZVNlbGVjdGlvbigpLCBzID0genAoci5wcm9wcyksIGwgPSBocChyLnByb3BzKSwgcCA9IHMgJiYgdnQoYSwgVmUocykpID8gcyA6IGwgJiYgRHQoYSwgYjQobCkpID8gbCA6IGE7XG4gICAgICByZXR1cm4geyBvcGVuOiByLnByb3BzLnN0YXJ0T3BlbiB8fCAhMSwgcHJldmVudEZvY3VzOiAhMSwgcHJlU2VsZWN0aW9uOiAoaSA9IHIucHJvcHMuc2VsZWN0c1JhbmdlID8gci5wcm9wcy5zdGFydERhdGUgOiByLnByb3BzLnNlbGVjdGVkKSAhPT0gbnVsbCAmJiBpICE9PSB2b2lkIDAgPyBpIDogcCwgaGlnaGxpZ2h0RGF0ZXM6IGg3KHIucHJvcHMuaGlnaGxpZ2h0RGF0ZXMpLCBmb2N1c2VkOiAhMSwgc2hvdWxkRm9jdXNEYXlJbmxpbmU6ICExLCBpc1JlbmRlckFyaWFMaXZlTWVzc2FnZTogITEgfTtcbiAgICB9KSwgejEoZjEociksIFwiY2xlYXJQcmV2ZW50Rm9jdXNUaW1lb3V0XCIsIGZ1bmN0aW9uKCkge1xuICAgICAgci5wcmV2ZW50Rm9jdXNUaW1lb3V0ICYmIGNsZWFyVGltZW91dChyLnByZXZlbnRGb2N1c1RpbWVvdXQpO1xuICAgIH0pLCB6MShmMShyKSwgXCJzZXRGb2N1c1wiLCBmdW5jdGlvbigpIHtcbiAgICAgIHIuaW5wdXQgJiYgci5pbnB1dC5mb2N1cyAmJiByLmlucHV0LmZvY3VzKHsgcHJldmVudFNjcm9sbDogITAgfSk7XG4gICAgfSksIHoxKGYxKHIpLCBcInNldEJsdXJcIiwgZnVuY3Rpb24oKSB7XG4gICAgICByLmlucHV0ICYmIHIuaW5wdXQuYmx1ciAmJiByLmlucHV0LmJsdXIoKSwgci5jYW5jZWxGb2N1c0lucHV0KCk7XG4gICAgfSksIHoxKGYxKHIpLCBcInNldE9wZW5cIiwgZnVuY3Rpb24oaSkge1xuICAgICAgdmFyIGEgPSBhcmd1bWVudHMubGVuZ3RoID4gMSAmJiBhcmd1bWVudHNbMV0gIT09IHZvaWQgMCAmJiBhcmd1bWVudHNbMV07XG4gICAgICByLnNldFN0YXRlKHsgb3BlbjogaSwgcHJlU2VsZWN0aW9uOiBpICYmIHIuc3RhdGUub3BlbiA/IHIuc3RhdGUucHJlU2VsZWN0aW9uIDogci5jYWxjSW5pdGlhbFN0YXRlKCkucHJlU2VsZWN0aW9uLCBsYXN0UHJlU2VsZWN0Q2hhbmdlOiBIaSB9LCBmdW5jdGlvbigpIHtcbiAgICAgICAgaSB8fCByLnNldFN0YXRlKGZ1bmN0aW9uKHMpIHtcbiAgICAgICAgICByZXR1cm4geyBmb2N1c2VkOiAhIWEgJiYgcy5mb2N1c2VkIH07XG4gICAgICAgIH0sIGZ1bmN0aW9uKCkge1xuICAgICAgICAgICFhICYmIHIuc2V0Qmx1cigpLCByLnNldFN0YXRlKHsgaW5wdXRWYWx1ZTogbnVsbCB9KTtcbiAgICAgICAgfSk7XG4gICAgICB9KTtcbiAgICB9KSwgejEoZjEociksIFwiaW5wdXRPa1wiLCBmdW5jdGlvbigpIHtcbiAgICAgIHJldHVybiBGNChyLnN0YXRlLnByZVNlbGVjdGlvbik7XG4gICAgfSksIHoxKGYxKHIpLCBcImlzQ2FsZW5kYXJPcGVuXCIsIGZ1bmN0aW9uKCkge1xuICAgICAgcmV0dXJuIHIucHJvcHMub3BlbiA9PT0gdm9pZCAwID8gci5zdGF0ZS5vcGVuICYmICFyLnByb3BzLmRpc2FibGVkICYmICFyLnByb3BzLnJlYWRPbmx5IDogci5wcm9wcy5vcGVuO1xuICAgIH0pLCB6MShmMShyKSwgXCJoYW5kbGVGb2N1c1wiLCBmdW5jdGlvbihpKSB7XG4gICAgICByLnN0YXRlLnByZXZlbnRGb2N1cyB8fCAoci5wcm9wcy5vbkZvY3VzKGkpLCByLnByb3BzLnByZXZlbnRPcGVuT25Gb2N1cyB8fCByLnByb3BzLnJlYWRPbmx5IHx8IHIuc2V0T3BlbighMCkpLCByLnNldFN0YXRlKHsgZm9jdXNlZDogITAgfSk7XG4gICAgfSksIHoxKGYxKHIpLCBcInNlbmRGb2N1c0JhY2tUb0lucHV0XCIsIGZ1bmN0aW9uKCkge1xuICAgICAgci5wcmV2ZW50Rm9jdXNUaW1lb3V0ICYmIHIuY2xlYXJQcmV2ZW50Rm9jdXNUaW1lb3V0KCksIHIuc2V0U3RhdGUoeyBwcmV2ZW50Rm9jdXM6ICEwIH0sIGZ1bmN0aW9uKCkge1xuICAgICAgICByLnByZXZlbnRGb2N1c1RpbWVvdXQgPSBzZXRUaW1lb3V0KGZ1bmN0aW9uKCkge1xuICAgICAgICAgIHIuc2V0Rm9jdXMoKSwgci5zZXRTdGF0ZSh7IHByZXZlbnRGb2N1czogITEgfSk7XG4gICAgICAgIH0pO1xuICAgICAgfSk7XG4gICAgfSksIHoxKGYxKHIpLCBcImNhbmNlbEZvY3VzSW5wdXRcIiwgZnVuY3Rpb24oKSB7XG4gICAgICBjbGVhclRpbWVvdXQoci5pbnB1dEZvY3VzVGltZW91dCksIHIuaW5wdXRGb2N1c1RpbWVvdXQgPSBudWxsO1xuICAgIH0pLCB6MShmMShyKSwgXCJkZWZlckZvY3VzSW5wdXRcIiwgZnVuY3Rpb24oKSB7XG4gICAgICByLmNhbmNlbEZvY3VzSW5wdXQoKSwgci5pbnB1dEZvY3VzVGltZW91dCA9IHNldFRpbWVvdXQoZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiByLnNldEZvY3VzKCk7XG4gICAgICB9LCAxKTtcbiAgICB9KSwgejEoZjEociksIFwiaGFuZGxlRHJvcGRvd25Gb2N1c1wiLCBmdW5jdGlvbigpIHtcbiAgICAgIHIuY2FuY2VsRm9jdXNJbnB1dCgpO1xuICAgIH0pLCB6MShmMShyKSwgXCJoYW5kbGVCbHVyXCIsIGZ1bmN0aW9uKGkpIHtcbiAgICAgICghci5zdGF0ZS5vcGVuIHx8IHIucHJvcHMud2l0aFBvcnRhbCB8fCByLnByb3BzLnNob3dUaW1lSW5wdXQpICYmIHIucHJvcHMub25CbHVyKGkpLCByLnNldFN0YXRlKHsgZm9jdXNlZDogITEgfSk7XG4gICAgfSksIHoxKGYxKHIpLCBcImhhbmRsZUNhbGVuZGFyQ2xpY2tPdXRzaWRlXCIsIGZ1bmN0aW9uKGkpIHtcbiAgICAgIHIucHJvcHMuaW5saW5lIHx8IHIuc2V0T3BlbighMSksIHIucHJvcHMub25DbGlja091dHNpZGUoaSksIHIucHJvcHMud2l0aFBvcnRhbCAmJiBpLnByZXZlbnREZWZhdWx0KCk7XG4gICAgfSksIHoxKGYxKHIpLCBcImhhbmRsZUNoYW5nZVwiLCBmdW5jdGlvbigpIHtcbiAgICAgIGZvciAodmFyIGkgPSBhcmd1bWVudHMubGVuZ3RoLCBhID0gbmV3IEFycmF5KGkpLCBzID0gMDsgcyA8IGk7IHMrKylcbiAgICAgICAgYVtzXSA9IGFyZ3VtZW50c1tzXTtcbiAgICAgIHZhciBsID0gYVswXTtcbiAgICAgIGlmICghci5wcm9wcy5vbkNoYW5nZVJhdyB8fCAoci5wcm9wcy5vbkNoYW5nZVJhdy5hcHBseShmMShyKSwgYSksIHR5cGVvZiBsLmlzRGVmYXVsdFByZXZlbnRlZCA9PSBcImZ1bmN0aW9uXCIgJiYgIWwuaXNEZWZhdWx0UHJldmVudGVkKCkpKSB7XG4gICAgICAgIHIuc2V0U3RhdGUoeyBpbnB1dFZhbHVlOiBsLnRhcmdldC52YWx1ZSwgbGFzdFByZVNlbGVjdENoYW5nZTogQlcgfSk7XG4gICAgICAgIHZhciBwLCBkLCBiLCBNLCB1LCBBLCB6LCBmLCBPID0gKHAgPSBsLnRhcmdldC52YWx1ZSwgZCA9IHIucHJvcHMuZGF0ZUZvcm1hdCwgYiA9IHIucHJvcHMubG9jYWxlLCBNID0gci5wcm9wcy5zdHJpY3RQYXJzaW5nLCB1ID0gci5wcm9wcy5taW5EYXRlLCBBID0gbnVsbCwgeiA9IFN0KGIpIHx8IFN0KGMzKCkpLCBmID0gITAsIEFycmF5LmlzQXJyYXkoZCkgPyAoZC5mb3JFYWNoKGZ1bmN0aW9uKGgpIHtcbiAgICAgICAgICB2YXIgZyA9IHZpKHAsIGgsIC8qIEBfX1BVUkVfXyAqLyBuZXcgRGF0ZSgpLCB7IGxvY2FsZTogeiB9KTtcbiAgICAgICAgICBNICYmIChmID0gTHQoZywgdSkgJiYgcCA9PT0gZTIoZywgaCwgYikpLCBMdChnLCB1KSAmJiBmICYmIChBID0gZyk7XG4gICAgICAgIH0pLCBBKSA6IChBID0gdmkocCwgZCwgLyogQF9fUFVSRV9fICovIG5ldyBEYXRlKCksIHsgbG9jYWxlOiB6IH0pLCBNID8gZiA9IEx0KEEpICYmIHAgPT09IGUyKEEsIGQsIGIpIDogTHQoQSkgfHwgKGQgPSBkLm1hdGNoKGFXKS5tYXAoZnVuY3Rpb24oaCkge1xuICAgICAgICAgIHZhciBnID0gaFswXTtcbiAgICAgICAgICByZXR1cm4gZyA9PT0gXCJwXCIgfHwgZyA9PT0gXCJQXCIgPyB6ID8gKDAsIGlXW2ddKShoLCB6LmZvcm1hdExvbmcpIDogZyA6IGg7XG4gICAgICAgIH0pLmpvaW4oXCJcIiksIHAubGVuZ3RoID4gMCAmJiAoQSA9IHZpKHAsIGQuc2xpY2UoMCwgcC5sZW5ndGgpLCAvKiBAX19QVVJFX18gKi8gbmV3IERhdGUoKSkpLCBMdChBKSB8fCAoQSA9IG5ldyBEYXRlKHApKSksIEx0KEEpICYmIGYgPyBBIDogbnVsbCkpO1xuICAgICAgICByLnByb3BzLnNob3dUaW1lU2VsZWN0T25seSAmJiByLnByb3BzLnNlbGVjdGVkICYmIE8gJiYgIVEwKE8sIHIucHJvcHMuc2VsZWN0ZWQpICYmIChPID0gSXgoci5wcm9wcy5zZWxlY3RlZCwgeyBob3VyczogUGUoTyksIG1pbnV0ZXM6IEZlKE8pLCBzZWNvbmRzOiBWOChPKSB9KSksICFPICYmIGwudGFyZ2V0LnZhbHVlIHx8IChyLnByb3BzLnNob3dXZWVrUGlja2VyICYmIChPID0gWGUoTywgci5wcm9wcy5sb2NhbGUsIHIucHJvcHMuY2FsZW5kYXJTdGFydERheSkpLCByLnNldFNlbGVjdGVkKE8sIGwsICEwKSk7XG4gICAgICB9XG4gICAgfSksIHoxKGYxKHIpLCBcImhhbmRsZVNlbGVjdFwiLCBmdW5jdGlvbihpLCBhLCBzKSB7XG4gICAgICBpZiAoci5wcm9wcy5zaG91bGRDbG9zZU9uU2VsZWN0ICYmICFyLnByb3BzLnNob3dUaW1lU2VsZWN0ICYmIHIuc2VuZEZvY3VzQmFja1RvSW5wdXQoKSwgci5wcm9wcy5vbkNoYW5nZVJhdyAmJiByLnByb3BzLm9uQ2hhbmdlUmF3KGEpLCByLnByb3BzLnNob3dXZWVrUGlja2VyICYmIChpID0gWGUoaSwgci5wcm9wcy5sb2NhbGUsIHIucHJvcHMuY2FsZW5kYXJTdGFydERheSkpLCByLnNldFNlbGVjdGVkKGksIGEsICExLCBzKSwgci5wcm9wcy5zaG93RGF0ZVNlbGVjdCAmJiByLnNldFN0YXRlKHsgaXNSZW5kZXJBcmlhTGl2ZU1lc3NhZ2U6ICEwIH0pLCAhci5wcm9wcy5zaG91bGRDbG9zZU9uU2VsZWN0IHx8IHIucHJvcHMuc2hvd1RpbWVTZWxlY3QpXG4gICAgICAgIHIuc2V0UHJlU2VsZWN0aW9uKGkpO1xuICAgICAgZWxzZSBpZiAoIXIucHJvcHMuaW5saW5lKSB7XG4gICAgICAgIHIucHJvcHMuc2VsZWN0c1JhbmdlIHx8IHIuc2V0T3BlbighMSk7XG4gICAgICAgIHZhciBsID0gci5wcm9wcywgcCA9IGwuc3RhcnREYXRlLCBkID0gbC5lbmREYXRlO1xuICAgICAgICAhcCB8fCBkIHx8IHZ0KGksIHApIHx8IHIuc2V0T3BlbighMSk7XG4gICAgICB9XG4gICAgfSksIHoxKGYxKHIpLCBcInNldFNlbGVjdGVkXCIsIGZ1bmN0aW9uKGksIGEsIHMsIGwpIHtcbiAgICAgIHZhciBwID0gaTtcbiAgICAgIGlmIChyLnByb3BzLnNob3dZZWFyUGlja2VyKSB7XG4gICAgICAgIGlmIChwICE9PSBudWxsICYmIHVwKEwwKHApLCByLnByb3BzKSlcbiAgICAgICAgICByZXR1cm47XG4gICAgICB9IGVsc2UgaWYgKHIucHJvcHMuc2hvd01vbnRoWWVhclBpY2tlcikge1xuICAgICAgICBpZiAocCAhPT0gbnVsbCAmJiBBcChwLCByLnByb3BzKSlcbiAgICAgICAgICByZXR1cm47XG4gICAgICB9IGVsc2UgaWYgKHAgIT09IG51bGwgJiYgVTQocCwgci5wcm9wcykpXG4gICAgICAgIHJldHVybjtcbiAgICAgIHZhciBkID0gci5wcm9wcywgYiA9IGQub25DaGFuZ2UsIE0gPSBkLnNlbGVjdHNSYW5nZSwgdSA9IGQuc3RhcnREYXRlLCBBID0gZC5lbmREYXRlO1xuICAgICAgaWYgKCFpMyhyLnByb3BzLnNlbGVjdGVkLCBwKSB8fCByLnByb3BzLmFsbG93U2FtZURheSB8fCBNKVxuICAgICAgICBpZiAocCAhPT0gbnVsbCAmJiAoIXIucHJvcHMuc2VsZWN0ZWQgfHwgcyAmJiAoci5wcm9wcy5zaG93VGltZVNlbGVjdCB8fCByLnByb3BzLnNob3dUaW1lU2VsZWN0T25seSB8fCByLnByb3BzLnNob3dUaW1lSW5wdXQpIHx8IChwID0gczcocCwgeyBob3VyOiBQZShyLnByb3BzLnNlbGVjdGVkKSwgbWludXRlOiBGZShyLnByb3BzLnNlbGVjdGVkKSwgc2Vjb25kOiBWOChyLnByb3BzLnNlbGVjdGVkKSB9KSksIHIucHJvcHMuaW5saW5lIHx8IHIuc2V0U3RhdGUoeyBwcmVTZWxlY3Rpb246IHAgfSksIHIucHJvcHMuZm9jdXNTZWxlY3RlZE1vbnRoIHx8IHIuc2V0U3RhdGUoeyBtb250aFNlbGVjdGVkSW46IGwgfSkpLCBNKSB7XG4gICAgICAgICAgdmFyIHogPSB1ICYmICFBLCBmID0gdSAmJiBBO1xuICAgICAgICAgICF1ICYmICFBID8gYihbcCwgbnVsbF0sIGEpIDogeiAmJiAodnQocCwgdSkgPyBiKFtwLCBudWxsXSwgYSkgOiBiKFt1LCBwXSwgYSkpLCBmICYmIGIoW3AsIG51bGxdLCBhKTtcbiAgICAgICAgfSBlbHNlXG4gICAgICAgICAgYihwLCBhKTtcbiAgICAgIHMgfHwgKHIucHJvcHMub25TZWxlY3QocCwgYSksIHIuc2V0U3RhdGUoeyBpbnB1dFZhbHVlOiBudWxsIH0pKTtcbiAgICB9KSwgejEoZjEociksIFwic2V0UHJlU2VsZWN0aW9uXCIsIGZ1bmN0aW9uKGkpIHtcbiAgICAgIHZhciBhID0gci5wcm9wcy5taW5EYXRlICE9PSB2b2lkIDAsIHMgPSByLnByb3BzLm1heERhdGUgIT09IHZvaWQgMCwgbCA9ICEwO1xuICAgICAgaWYgKGkpIHtcbiAgICAgICAgci5wcm9wcy5zaG93V2Vla1BpY2tlciAmJiAoaSA9IFhlKGksIHIucHJvcHMubG9jYWxlLCByLnByb3BzLmNhbGVuZGFyU3RhcnREYXkpKTtcbiAgICAgICAgdmFyIHAgPSBWZShpKTtcbiAgICAgICAgaWYgKGEgJiYgcylcbiAgICAgICAgICBsID0gRm4oaSwgci5wcm9wcy5taW5EYXRlLCByLnByb3BzLm1heERhdGUpO1xuICAgICAgICBlbHNlIGlmIChhKSB7XG4gICAgICAgICAgdmFyIGQgPSBWZShyLnByb3BzLm1pbkRhdGUpO1xuICAgICAgICAgIGwgPSBEdChpLCBkKSB8fCBpMyhwLCBkKTtcbiAgICAgICAgfSBlbHNlIGlmIChzKSB7XG4gICAgICAgICAgdmFyIGIgPSBiNChyLnByb3BzLm1heERhdGUpO1xuICAgICAgICAgIGwgPSB2dChpLCBiKSB8fCBpMyhwLCBiKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgbCAmJiByLnNldFN0YXRlKHsgcHJlU2VsZWN0aW9uOiBpIH0pO1xuICAgIH0pLCB6MShmMShyKSwgXCJ0b2dnbGVDYWxlbmRhclwiLCBmdW5jdGlvbigpIHtcbiAgICAgIHIuc2V0T3Blbighci5zdGF0ZS5vcGVuKTtcbiAgICB9KSwgejEoZjEociksIFwiaGFuZGxlVGltZUNoYW5nZVwiLCBmdW5jdGlvbihpKSB7XG4gICAgICB2YXIgYSA9IHIucHJvcHMuc2VsZWN0ZWQgPyByLnByb3BzLnNlbGVjdGVkIDogci5nZXRQcmVTZWxlY3Rpb24oKSwgcyA9IHIucHJvcHMuc2VsZWN0ZWQgPyBpIDogczcoYSwgeyBob3VyOiBQZShpKSwgbWludXRlOiBGZShpKSB9KTtcbiAgICAgIHIuc2V0U3RhdGUoeyBwcmVTZWxlY3Rpb246IHMgfSksIHIucHJvcHMub25DaGFuZ2UocyksIHIucHJvcHMuc2hvdWxkQ2xvc2VPblNlbGVjdCAmJiAoci5zZW5kRm9jdXNCYWNrVG9JbnB1dCgpLCByLnNldE9wZW4oITEpKSwgci5wcm9wcy5zaG93VGltZUlucHV0ICYmIHIuc2V0T3BlbighMCksIChyLnByb3BzLnNob3dUaW1lU2VsZWN0T25seSB8fCByLnByb3BzLnNob3dUaW1lU2VsZWN0KSAmJiByLnNldFN0YXRlKHsgaXNSZW5kZXJBcmlhTGl2ZU1lc3NhZ2U6ICEwIH0pLCByLnNldFN0YXRlKHsgaW5wdXRWYWx1ZTogbnVsbCB9KTtcbiAgICB9KSwgejEoZjEociksIFwib25JbnB1dENsaWNrXCIsIGZ1bmN0aW9uKCkge1xuICAgICAgci5wcm9wcy5kaXNhYmxlZCB8fCByLnByb3BzLnJlYWRPbmx5IHx8IHIuc2V0T3BlbighMCksIHIucHJvcHMub25JbnB1dENsaWNrKCk7XG4gICAgfSksIHoxKGYxKHIpLCBcIm9uSW5wdXRLZXlEb3duXCIsIGZ1bmN0aW9uKGkpIHtcbiAgICAgIHIucHJvcHMub25LZXlEb3duKGkpO1xuICAgICAgdmFyIGEgPSBpLmtleTtcbiAgICAgIGlmIChyLnN0YXRlLm9wZW4gfHwgci5wcm9wcy5pbmxpbmUgfHwgci5wcm9wcy5wcmV2ZW50T3Blbk9uRm9jdXMpIHtcbiAgICAgICAgaWYgKHIuc3RhdGUub3Blbikge1xuICAgICAgICAgIGlmIChhID09PSBcIkFycm93RG93blwiIHx8IGEgPT09IFwiQXJyb3dVcFwiKSB7XG4gICAgICAgICAgICBpLnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICB2YXIgcyA9IHIucHJvcHMuc2hvd1dlZWtQaWNrZXIgJiYgci5wcm9wcy5zaG93V2Vla051bWJlcnMgPyAnLnJlYWN0LWRhdGVwaWNrZXJfX3dlZWstbnVtYmVyW3RhYmluZGV4PVwiMFwiXScgOiAnLnJlYWN0LWRhdGVwaWNrZXJfX2RheVt0YWJpbmRleD1cIjBcIl0nLCBsID0gci5jYWxlbmRhci5jb21wb25lbnROb2RlICYmIHIuY2FsZW5kYXIuY29tcG9uZW50Tm9kZS5xdWVyeVNlbGVjdG9yKHMpO1xuICAgICAgICAgICAgcmV0dXJuIHZvaWQgKGwgJiYgbC5mb2N1cyh7IHByZXZlbnRTY3JvbGw6ICEwIH0pKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgdmFyIHAgPSBHMChyLnN0YXRlLnByZVNlbGVjdGlvbik7XG4gICAgICAgICAgYSA9PT0gXCJFbnRlclwiID8gKGkucHJldmVudERlZmF1bHQoKSwgci5pbnB1dE9rKCkgJiYgci5zdGF0ZS5sYXN0UHJlU2VsZWN0Q2hhbmdlID09PSBIaSA/IChyLmhhbmRsZVNlbGVjdChwLCBpKSwgIXIucHJvcHMuc2hvdWxkQ2xvc2VPblNlbGVjdCAmJiByLnNldFByZVNlbGVjdGlvbihwKSkgOiByLnNldE9wZW4oITEpKSA6IGEgPT09IFwiRXNjYXBlXCIgPyAoaS5wcmV2ZW50RGVmYXVsdCgpLCByLnNlbmRGb2N1c0JhY2tUb0lucHV0KCksIHIuc2V0T3BlbighMSkpIDogYSA9PT0gXCJUYWJcIiAmJiByLnNldE9wZW4oITEpLCByLmlucHV0T2soKSB8fCByLnByb3BzLm9uSW5wdXRFcnJvcih7IGNvZGU6IDEsIG1zZzogRGkgfSk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZVxuICAgICAgICBhICE9PSBcIkFycm93RG93blwiICYmIGEgIT09IFwiQXJyb3dVcFwiICYmIGEgIT09IFwiRW50ZXJcIiB8fCByLm9uSW5wdXRDbGljaygpO1xuICAgIH0pLCB6MShmMShyKSwgXCJvblBvcnRhbEtleURvd25cIiwgZnVuY3Rpb24oaSkge1xuICAgICAgaS5rZXkgPT09IFwiRXNjYXBlXCIgJiYgKGkucHJldmVudERlZmF1bHQoKSwgci5zZXRTdGF0ZSh7IHByZXZlbnRGb2N1czogITAgfSwgZnVuY3Rpb24oKSB7XG4gICAgICAgIHIuc2V0T3BlbighMSksIHNldFRpbWVvdXQoZnVuY3Rpb24oKSB7XG4gICAgICAgICAgci5zZXRGb2N1cygpLCByLnNldFN0YXRlKHsgcHJldmVudEZvY3VzOiAhMSB9KTtcbiAgICAgICAgfSk7XG4gICAgICB9KSk7XG4gICAgfSksIHoxKGYxKHIpLCBcIm9uRGF5S2V5RG93blwiLCBmdW5jdGlvbihpKSB7XG4gICAgICByLnByb3BzLm9uS2V5RG93bihpKTtcbiAgICAgIHZhciBhID0gaS5rZXksIHMgPSBHMChyLnN0YXRlLnByZVNlbGVjdGlvbik7XG4gICAgICBpZiAoYSA9PT0gXCJFbnRlclwiKVxuICAgICAgICBpLnByZXZlbnREZWZhdWx0KCksIHIuaGFuZGxlU2VsZWN0KHMsIGkpLCAhci5wcm9wcy5zaG91bGRDbG9zZU9uU2VsZWN0ICYmIHIuc2V0UHJlU2VsZWN0aW9uKHMpO1xuICAgICAgZWxzZSBpZiAoYSA9PT0gXCJFc2NhcGVcIilcbiAgICAgICAgaS5wcmV2ZW50RGVmYXVsdCgpLCByLnNldE9wZW4oITEpLCByLmlucHV0T2soKSB8fCByLnByb3BzLm9uSW5wdXRFcnJvcih7IGNvZGU6IDEsIG1zZzogRGkgfSk7XG4gICAgICBlbHNlIGlmICghci5wcm9wcy5kaXNhYmxlZEtleWJvYXJkTmF2aWdhdGlvbikge1xuICAgICAgICB2YXIgbDtcbiAgICAgICAgc3dpdGNoIChhKSB7XG4gICAgICAgICAgY2FzZSBcIkFycm93TGVmdFwiOlxuICAgICAgICAgICAgbCA9IHIucHJvcHMuc2hvd1dlZWtQaWNrZXIgPyBVOChzLCAxKSA6IGd4KHMsIDEpO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSBcIkFycm93UmlnaHRcIjpcbiAgICAgICAgICAgIGwgPSByLnByb3BzLnNob3dXZWVrUGlja2VyID8gcDQocywgMSkgOiBhbyhzLCAxKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgXCJBcnJvd1VwXCI6XG4gICAgICAgICAgICBsID0gVTgocywgMSk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIFwiQXJyb3dEb3duXCI6XG4gICAgICAgICAgICBsID0gcDQocywgMSk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIFwiUGFnZVVwXCI6XG4gICAgICAgICAgICBsID0gXzMocywgMSk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIFwiUGFnZURvd25cIjpcbiAgICAgICAgICAgIGwgPSB2ZShzLCAxKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgXCJIb21lXCI6XG4gICAgICAgICAgICBsID0gTXIocywgMSk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIFwiRW5kXCI6XG4gICAgICAgICAgICBsID0gSzMocywgMSk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgbCA9IG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFsKVxuICAgICAgICAgIHJldHVybiB2b2lkIChyLnByb3BzLm9uSW5wdXRFcnJvciAmJiByLnByb3BzLm9uSW5wdXRFcnJvcih7IGNvZGU6IDEsIG1zZzogRGkgfSkpO1xuICAgICAgICBpZiAoaS5wcmV2ZW50RGVmYXVsdCgpLCByLnNldFN0YXRlKHsgbGFzdFByZVNlbGVjdENoYW5nZTogSGkgfSksIHIucHJvcHMuYWRqdXN0RGF0ZU9uQ2hhbmdlICYmIHIuc2V0U2VsZWN0ZWQobCksIHIuc2V0UHJlU2VsZWN0aW9uKGwpLCByLnByb3BzLmlubGluZSkge1xuICAgICAgICAgIHZhciBwID0gZzIocyksIGQgPSBnMihsKSwgYiA9IEwwKHMpLCBNID0gTDAobCk7XG4gICAgICAgICAgcCAhPT0gZCB8fCBiICE9PSBNID8gci5zZXRTdGF0ZSh7IHNob3VsZEZvY3VzRGF5SW5saW5lOiAhMCB9KSA6IHIuc2V0U3RhdGUoeyBzaG91bGRGb2N1c0RheUlubGluZTogITEgfSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KSwgejEoZjEociksIFwib25Qb3BwZXJLZXlEb3duXCIsIGZ1bmN0aW9uKGkpIHtcbiAgICAgIGkua2V5ID09PSBcIkVzY2FwZVwiICYmIChpLnByZXZlbnREZWZhdWx0KCksIHIuc2VuZEZvY3VzQmFja1RvSW5wdXQoKSk7XG4gICAgfSksIHoxKGYxKHIpLCBcIm9uQ2xlYXJDbGlja1wiLCBmdW5jdGlvbihpKSB7XG4gICAgICBpICYmIGkucHJldmVudERlZmF1bHQgJiYgaS5wcmV2ZW50RGVmYXVsdCgpLCByLnNlbmRGb2N1c0JhY2tUb0lucHV0KCksIHIucHJvcHMuc2VsZWN0c1JhbmdlID8gci5wcm9wcy5vbkNoYW5nZShbbnVsbCwgbnVsbF0sIGkpIDogci5wcm9wcy5vbkNoYW5nZShudWxsLCBpKSwgci5zZXRTdGF0ZSh7IGlucHV0VmFsdWU6IG51bGwgfSk7XG4gICAgfSksIHoxKGYxKHIpLCBcImNsZWFyXCIsIGZ1bmN0aW9uKCkge1xuICAgICAgci5vbkNsZWFyQ2xpY2soKTtcbiAgICB9KSwgejEoZjEociksIFwib25TY3JvbGxcIiwgZnVuY3Rpb24oaSkge1xuICAgICAgdHlwZW9mIHIucHJvcHMuY2xvc2VPblNjcm9sbCA9PSBcImJvb2xlYW5cIiAmJiByLnByb3BzLmNsb3NlT25TY3JvbGwgPyBpLnRhcmdldCAhPT0gZG9jdW1lbnQgJiYgaS50YXJnZXQgIT09IGRvY3VtZW50LmRvY3VtZW50RWxlbWVudCAmJiBpLnRhcmdldCAhPT0gZG9jdW1lbnQuYm9keSB8fCByLnNldE9wZW4oITEpIDogdHlwZW9mIHIucHJvcHMuY2xvc2VPblNjcm9sbCA9PSBcImZ1bmN0aW9uXCIgJiYgci5wcm9wcy5jbG9zZU9uU2Nyb2xsKGkpICYmIHIuc2V0T3BlbighMSk7XG4gICAgfSksIHoxKGYxKHIpLCBcInJlbmRlckNhbGVuZGFyXCIsIGZ1bmN0aW9uKCkge1xuICAgICAgcmV0dXJuIHIucHJvcHMuaW5saW5lIHx8IHIuaXNDYWxlbmRhck9wZW4oKSA/IG0xLmNyZWF0ZUVsZW1lbnQoUlcsIHsgcmVmOiBmdW5jdGlvbihpKSB7XG4gICAgICAgIHIuY2FsZW5kYXIgPSBpO1xuICAgICAgfSwgbG9jYWxlOiByLnByb3BzLmxvY2FsZSwgY2FsZW5kYXJTdGFydERheTogci5wcm9wcy5jYWxlbmRhclN0YXJ0RGF5LCBjaG9vc2VEYXlBcmlhTGFiZWxQcmVmaXg6IHIucHJvcHMuY2hvb3NlRGF5QXJpYUxhYmVsUHJlZml4LCBkaXNhYmxlZERheUFyaWFMYWJlbFByZWZpeDogci5wcm9wcy5kaXNhYmxlZERheUFyaWFMYWJlbFByZWZpeCwgd2Vla0FyaWFMYWJlbFByZWZpeDogci5wcm9wcy53ZWVrQXJpYUxhYmVsUHJlZml4LCBtb250aEFyaWFMYWJlbFByZWZpeDogci5wcm9wcy5tb250aEFyaWFMYWJlbFByZWZpeCwgYWRqdXN0RGF0ZU9uQ2hhbmdlOiByLnByb3BzLmFkanVzdERhdGVPbkNoYW5nZSwgc2V0T3Blbjogci5zZXRPcGVuLCBzaG91bGRDbG9zZU9uU2VsZWN0OiByLnByb3BzLnNob3VsZENsb3NlT25TZWxlY3QsIGRhdGVGb3JtYXQ6IHIucHJvcHMuZGF0ZUZvcm1hdENhbGVuZGFyLCB1c2VXZWVrZGF5c1Nob3J0OiByLnByb3BzLnVzZVdlZWtkYXlzU2hvcnQsIGZvcm1hdFdlZWtEYXk6IHIucHJvcHMuZm9ybWF0V2Vla0RheSwgZHJvcGRvd25Nb2RlOiByLnByb3BzLmRyb3Bkb3duTW9kZSwgc2VsZWN0ZWQ6IHIucHJvcHMuc2VsZWN0ZWQsIHByZVNlbGVjdGlvbjogci5zdGF0ZS5wcmVTZWxlY3Rpb24sIG9uU2VsZWN0OiByLmhhbmRsZVNlbGVjdCwgb25XZWVrU2VsZWN0OiByLnByb3BzLm9uV2Vla1NlbGVjdCwgb3BlblRvRGF0ZTogci5wcm9wcy5vcGVuVG9EYXRlLCBtaW5EYXRlOiByLnByb3BzLm1pbkRhdGUsIG1heERhdGU6IHIucHJvcHMubWF4RGF0ZSwgc2VsZWN0c1N0YXJ0OiByLnByb3BzLnNlbGVjdHNTdGFydCwgc2VsZWN0c0VuZDogci5wcm9wcy5zZWxlY3RzRW5kLCBzZWxlY3RzUmFuZ2U6IHIucHJvcHMuc2VsZWN0c1JhbmdlLCBzdGFydERhdGU6IHIucHJvcHMuc3RhcnREYXRlLCBlbmREYXRlOiByLnByb3BzLmVuZERhdGUsIGV4Y2x1ZGVEYXRlczogci5wcm9wcy5leGNsdWRlRGF0ZXMsIGV4Y2x1ZGVEYXRlSW50ZXJ2YWxzOiByLnByb3BzLmV4Y2x1ZGVEYXRlSW50ZXJ2YWxzLCBmaWx0ZXJEYXRlOiByLnByb3BzLmZpbHRlckRhdGUsIG9uQ2xpY2tPdXRzaWRlOiByLmhhbmRsZUNhbGVuZGFyQ2xpY2tPdXRzaWRlLCBmb3JtYXRXZWVrTnVtYmVyOiByLnByb3BzLmZvcm1hdFdlZWtOdW1iZXIsIGhpZ2hsaWdodERhdGVzOiByLnN0YXRlLmhpZ2hsaWdodERhdGVzLCBob2xpZGF5czogY1coci5tb2RpZnlIb2xpZGF5cygpKSwgaW5jbHVkZURhdGVzOiByLnByb3BzLmluY2x1ZGVEYXRlcywgaW5jbHVkZURhdGVJbnRlcnZhbHM6IHIucHJvcHMuaW5jbHVkZURhdGVJbnRlcnZhbHMsIGluY2x1ZGVUaW1lczogci5wcm9wcy5pbmNsdWRlVGltZXMsIGluamVjdFRpbWVzOiByLnByb3BzLmluamVjdFRpbWVzLCBpbmxpbmU6IHIucHJvcHMuaW5saW5lLCBzaG91bGRGb2N1c0RheUlubGluZTogci5zdGF0ZS5zaG91bGRGb2N1c0RheUlubGluZSwgcGVla05leHRNb250aDogci5wcm9wcy5wZWVrTmV4dE1vbnRoLCBzaG93TW9udGhEcm9wZG93bjogci5wcm9wcy5zaG93TW9udGhEcm9wZG93biwgc2hvd1ByZXZpb3VzTW9udGhzOiByLnByb3BzLnNob3dQcmV2aW91c01vbnRocywgdXNlU2hvcnRNb250aEluRHJvcGRvd246IHIucHJvcHMudXNlU2hvcnRNb250aEluRHJvcGRvd24sIHNob3dNb250aFllYXJEcm9wZG93bjogci5wcm9wcy5zaG93TW9udGhZZWFyRHJvcGRvd24sIHNob3dXZWVrTnVtYmVyczogci5wcm9wcy5zaG93V2Vla051bWJlcnMsIHNob3dZZWFyRHJvcGRvd246IHIucHJvcHMuc2hvd1llYXJEcm9wZG93biwgd2l0aFBvcnRhbDogci5wcm9wcy53aXRoUG9ydGFsLCBmb3JjZVNob3dNb250aE5hdmlnYXRpb246IHIucHJvcHMuZm9yY2VTaG93TW9udGhOYXZpZ2F0aW9uLCBzaG93RGlzYWJsZWRNb250aE5hdmlnYXRpb246IHIucHJvcHMuc2hvd0Rpc2FibGVkTW9udGhOYXZpZ2F0aW9uLCBzY3JvbGxhYmxlWWVhckRyb3Bkb3duOiByLnByb3BzLnNjcm9sbGFibGVZZWFyRHJvcGRvd24sIHNjcm9sbGFibGVNb250aFllYXJEcm9wZG93bjogci5wcm9wcy5zY3JvbGxhYmxlTW9udGhZZWFyRHJvcGRvd24sIHRvZGF5QnV0dG9uOiByLnByb3BzLnRvZGF5QnV0dG9uLCB3ZWVrTGFiZWw6IHIucHJvcHMud2Vla0xhYmVsLCBvdXRzaWRlQ2xpY2tJZ25vcmVDbGFzczogQzcsIGZpeGVkSGVpZ2h0OiByLnByb3BzLmZpeGVkSGVpZ2h0LCBtb250aHNTaG93bjogci5wcm9wcy5tb250aHNTaG93biwgbW9udGhTZWxlY3RlZEluOiByLnN0YXRlLm1vbnRoU2VsZWN0ZWRJbiwgb25Ecm9wZG93bkZvY3VzOiByLmhhbmRsZURyb3Bkb3duRm9jdXMsIG9uTW9udGhDaGFuZ2U6IHIucHJvcHMub25Nb250aENoYW5nZSwgb25ZZWFyQ2hhbmdlOiByLnByb3BzLm9uWWVhckNoYW5nZSwgZGF5Q2xhc3NOYW1lOiByLnByb3BzLmRheUNsYXNzTmFtZSwgd2Vla0RheUNsYXNzTmFtZTogci5wcm9wcy53ZWVrRGF5Q2xhc3NOYW1lLCBtb250aENsYXNzTmFtZTogci5wcm9wcy5tb250aENsYXNzTmFtZSwgdGltZUNsYXNzTmFtZTogci5wcm9wcy50aW1lQ2xhc3NOYW1lLCBzaG93RGF0ZVNlbGVjdDogci5wcm9wcy5zaG93RGF0ZVNlbGVjdCwgc2hvd1RpbWVTZWxlY3Q6IHIucHJvcHMuc2hvd1RpbWVTZWxlY3QsIHNob3dUaW1lU2VsZWN0T25seTogci5wcm9wcy5zaG93VGltZVNlbGVjdE9ubHksIG9uVGltZUNoYW5nZTogci5oYW5kbGVUaW1lQ2hhbmdlLCB0aW1lRm9ybWF0OiByLnByb3BzLnRpbWVGb3JtYXQsIHRpbWVJbnRlcnZhbHM6IHIucHJvcHMudGltZUludGVydmFscywgbWluVGltZTogci5wcm9wcy5taW5UaW1lLCBtYXhUaW1lOiByLnByb3BzLm1heFRpbWUsIGV4Y2x1ZGVUaW1lczogci5wcm9wcy5leGNsdWRlVGltZXMsIGZpbHRlclRpbWU6IHIucHJvcHMuZmlsdGVyVGltZSwgdGltZUNhcHRpb246IHIucHJvcHMudGltZUNhcHRpb24sIGNsYXNzTmFtZTogci5wcm9wcy5jYWxlbmRhckNsYXNzTmFtZSwgY29udGFpbmVyOiByLnByb3BzLmNhbGVuZGFyQ29udGFpbmVyLCB5ZWFySXRlbU51bWJlcjogci5wcm9wcy55ZWFySXRlbU51bWJlciwgeWVhckRyb3Bkb3duSXRlbU51bWJlcjogci5wcm9wcy55ZWFyRHJvcGRvd25JdGVtTnVtYmVyLCBwcmV2aW91c01vbnRoQXJpYUxhYmVsOiByLnByb3BzLnByZXZpb3VzTW9udGhBcmlhTGFiZWwsIHByZXZpb3VzTW9udGhCdXR0b25MYWJlbDogci5wcm9wcy5wcmV2aW91c01vbnRoQnV0dG9uTGFiZWwsIG5leHRNb250aEFyaWFMYWJlbDogci5wcm9wcy5uZXh0TW9udGhBcmlhTGFiZWwsIG5leHRNb250aEJ1dHRvbkxhYmVsOiByLnByb3BzLm5leHRNb250aEJ1dHRvbkxhYmVsLCBwcmV2aW91c1llYXJBcmlhTGFiZWw6IHIucHJvcHMucHJldmlvdXNZZWFyQXJpYUxhYmVsLCBwcmV2aW91c1llYXJCdXR0b25MYWJlbDogci5wcm9wcy5wcmV2aW91c1llYXJCdXR0b25MYWJlbCwgbmV4dFllYXJBcmlhTGFiZWw6IHIucHJvcHMubmV4dFllYXJBcmlhTGFiZWwsIG5leHRZZWFyQnV0dG9uTGFiZWw6IHIucHJvcHMubmV4dFllYXJCdXR0b25MYWJlbCwgdGltZUlucHV0TGFiZWw6IHIucHJvcHMudGltZUlucHV0TGFiZWwsIGRpc2FibGVkS2V5Ym9hcmROYXZpZ2F0aW9uOiByLnByb3BzLmRpc2FibGVkS2V5Ym9hcmROYXZpZ2F0aW9uLCByZW5kZXJDdXN0b21IZWFkZXI6IHIucHJvcHMucmVuZGVyQ3VzdG9tSGVhZGVyLCBwb3BwZXJQcm9wczogci5wcm9wcy5wb3BwZXJQcm9wcywgcmVuZGVyRGF5Q29udGVudHM6IHIucHJvcHMucmVuZGVyRGF5Q29udGVudHMsIHJlbmRlck1vbnRoQ29udGVudDogci5wcm9wcy5yZW5kZXJNb250aENvbnRlbnQsIHJlbmRlclF1YXJ0ZXJDb250ZW50OiByLnByb3BzLnJlbmRlclF1YXJ0ZXJDb250ZW50LCByZW5kZXJZZWFyQ29udGVudDogci5wcm9wcy5yZW5kZXJZZWFyQ29udGVudCwgb25EYXlNb3VzZUVudGVyOiByLnByb3BzLm9uRGF5TW91c2VFbnRlciwgb25Nb250aE1vdXNlTGVhdmU6IHIucHJvcHMub25Nb250aE1vdXNlTGVhdmUsIG9uWWVhck1vdXNlRW50ZXI6IHIucHJvcHMub25ZZWFyTW91c2VFbnRlciwgb25ZZWFyTW91c2VMZWF2ZTogci5wcm9wcy5vblllYXJNb3VzZUxlYXZlLCBzZWxlY3RzRGlzYWJsZWREYXlzSW5SYW5nZTogci5wcm9wcy5zZWxlY3RzRGlzYWJsZWREYXlzSW5SYW5nZSwgc2hvd1RpbWVJbnB1dDogci5wcm9wcy5zaG93VGltZUlucHV0LCBzaG93TW9udGhZZWFyUGlja2VyOiByLnByb3BzLnNob3dNb250aFllYXJQaWNrZXIsIHNob3dGdWxsTW9udGhZZWFyUGlja2VyOiByLnByb3BzLnNob3dGdWxsTW9udGhZZWFyUGlja2VyLCBzaG93VHdvQ29sdW1uTW9udGhZZWFyUGlja2VyOiByLnByb3BzLnNob3dUd29Db2x1bW5Nb250aFllYXJQaWNrZXIsIHNob3dGb3VyQ29sdW1uTW9udGhZZWFyUGlja2VyOiByLnByb3BzLnNob3dGb3VyQ29sdW1uTW9udGhZZWFyUGlja2VyLCBzaG93WWVhclBpY2tlcjogci5wcm9wcy5zaG93WWVhclBpY2tlciwgc2hvd1F1YXJ0ZXJZZWFyUGlja2VyOiByLnByb3BzLnNob3dRdWFydGVyWWVhclBpY2tlciwgc2hvd1dlZWtQaWNrZXI6IHIucHJvcHMuc2hvd1dlZWtQaWNrZXIsIHNob3dQb3BwZXJBcnJvdzogci5wcm9wcy5zaG93UG9wcGVyQXJyb3csIGV4Y2x1ZGVTY3JvbGxiYXI6IHIucHJvcHMuZXhjbHVkZVNjcm9sbGJhciwgaGFuZGxlT25LZXlEb3duOiByLnByb3BzLm9uS2V5RG93biwgaGFuZGxlT25EYXlLZXlEb3duOiByLm9uRGF5S2V5RG93biwgaXNJbnB1dEZvY3VzZWQ6IHIuc3RhdGUuZm9jdXNlZCwgY3VzdG9tVGltZUlucHV0OiByLnByb3BzLmN1c3RvbVRpbWVJbnB1dCwgc2V0UHJlU2VsZWN0aW9uOiByLnNldFByZVNlbGVjdGlvbiB9LCByLnByb3BzLmNoaWxkcmVuKSA6IG51bGw7XG4gICAgfSksIHoxKGYxKHIpLCBcInJlbmRlckFyaWFMaXZlUmVnaW9uXCIsIGZ1bmN0aW9uKCkge1xuICAgICAgdmFyIGksIGEgPSByLnByb3BzLCBzID0gYS5kYXRlRm9ybWF0LCBsID0gYS5sb2NhbGUsIHAgPSByLnByb3BzLnNob3dUaW1lSW5wdXQgfHwgci5wcm9wcy5zaG93VGltZVNlbGVjdCA/IFwiUFBQUHBcIiA6IFwiUFBQUFwiO1xuICAgICAgcmV0dXJuIGkgPSByLnByb3BzLnNlbGVjdHNSYW5nZSA/IFwiU2VsZWN0ZWQgc3RhcnQgZGF0ZTogXCIuY29uY2F0KEJlKHIucHJvcHMuc3RhcnREYXRlLCB7IGRhdGVGb3JtYXQ6IHAsIGxvY2FsZTogbCB9KSwgXCIuIFwiKS5jb25jYXQoci5wcm9wcy5lbmREYXRlID8gXCJFbmQgZGF0ZTogXCIgKyBCZShyLnByb3BzLmVuZERhdGUsIHsgZGF0ZUZvcm1hdDogcCwgbG9jYWxlOiBsIH0pIDogXCJcIikgOiByLnByb3BzLnNob3dUaW1lU2VsZWN0T25seSA/IFwiU2VsZWN0ZWQgdGltZTogXCIuY29uY2F0KEJlKHIucHJvcHMuc2VsZWN0ZWQsIHsgZGF0ZUZvcm1hdDogcywgbG9jYWxlOiBsIH0pKSA6IHIucHJvcHMuc2hvd1llYXJQaWNrZXIgPyBcIlNlbGVjdGVkIHllYXI6IFwiLmNvbmNhdChCZShyLnByb3BzLnNlbGVjdGVkLCB7IGRhdGVGb3JtYXQ6IFwieXl5eVwiLCBsb2NhbGU6IGwgfSkpIDogci5wcm9wcy5zaG93TW9udGhZZWFyUGlja2VyID8gXCJTZWxlY3RlZCBtb250aDogXCIuY29uY2F0KEJlKHIucHJvcHMuc2VsZWN0ZWQsIHsgZGF0ZUZvcm1hdDogXCJNTU1NIHl5eXlcIiwgbG9jYWxlOiBsIH0pKSA6IHIucHJvcHMuc2hvd1F1YXJ0ZXJZZWFyUGlja2VyID8gXCJTZWxlY3RlZCBxdWFydGVyOiBcIi5jb25jYXQoQmUoci5wcm9wcy5zZWxlY3RlZCwgeyBkYXRlRm9ybWF0OiBcInl5eXksIFFRUVwiLCBsb2NhbGU6IGwgfSkpIDogXCJTZWxlY3RlZCBkYXRlOiBcIi5jb25jYXQoQmUoci5wcm9wcy5zZWxlY3RlZCwgeyBkYXRlRm9ybWF0OiBwLCBsb2NhbGU6IGwgfSkpLCBtMS5jcmVhdGVFbGVtZW50KFwic3BhblwiLCB7IHJvbGU6IFwiYWxlcnRcIiwgXCJhcmlhLWxpdmVcIjogXCJwb2xpdGVcIiwgY2xhc3NOYW1lOiBcInJlYWN0LWRhdGVwaWNrZXJfX2FyaWEtbGl2ZVwiIH0sIGkpO1xuICAgIH0pLCB6MShmMShyKSwgXCJyZW5kZXJEYXRlSW5wdXRcIiwgZnVuY3Rpb24oKSB7XG4gICAgICB2YXIgaSwgYSA9IG0yKHIucHJvcHMuY2xhc3NOYW1lLCB6MSh7fSwgQzcsIHIuc3RhdGUub3BlbikpLCBzID0gci5wcm9wcy5jdXN0b21JbnB1dCB8fCBtMS5jcmVhdGVFbGVtZW50KFwiaW5wdXRcIiwgeyB0eXBlOiBcInRleHRcIiB9KSwgbCA9IHIucHJvcHMuY3VzdG9tSW5wdXRSZWYgfHwgXCJyZWZcIiwgcCA9IHR5cGVvZiByLnByb3BzLnZhbHVlID09IFwic3RyaW5nXCIgPyByLnByb3BzLnZhbHVlIDogdHlwZW9mIHIuc3RhdGUuaW5wdXRWYWx1ZSA9PSBcInN0cmluZ1wiID8gci5zdGF0ZS5pbnB1dFZhbHVlIDogci5wcm9wcy5zZWxlY3RzUmFuZ2UgPyBmdW5jdGlvbihkLCBiLCBNKSB7XG4gICAgICAgIGlmICghZClcbiAgICAgICAgICByZXR1cm4gXCJcIjtcbiAgICAgICAgdmFyIHUgPSBCZShkLCBNKSwgQSA9IGIgPyBCZShiLCBNKSA6IFwiXCI7XG4gICAgICAgIHJldHVybiBcIlwiLmNvbmNhdCh1LCBcIiAtIFwiKS5jb25jYXQoQSk7XG4gICAgICB9KHIucHJvcHMuc3RhcnREYXRlLCByLnByb3BzLmVuZERhdGUsIHIucHJvcHMpIDogQmUoci5wcm9wcy5zZWxlY3RlZCwgci5wcm9wcyk7XG4gICAgICByZXR1cm4gbTEuY2xvbmVFbGVtZW50KHMsICh6MSh6MSh6MSh6MSh6MSh6MSh6MSh6MSh6MSh6MShpID0ge30sIGwsIGZ1bmN0aW9uKGQpIHtcbiAgICAgICAgci5pbnB1dCA9IGQ7XG4gICAgICB9KSwgXCJ2YWx1ZVwiLCBwKSwgXCJvbkJsdXJcIiwgci5oYW5kbGVCbHVyKSwgXCJvbkNoYW5nZVwiLCByLmhhbmRsZUNoYW5nZSksIFwib25DbGlja1wiLCByLm9uSW5wdXRDbGljayksIFwib25Gb2N1c1wiLCByLmhhbmRsZUZvY3VzKSwgXCJvbktleURvd25cIiwgci5vbklucHV0S2V5RG93biksIFwiaWRcIiwgci5wcm9wcy5pZCksIFwibmFtZVwiLCByLnByb3BzLm5hbWUpLCBcImZvcm1cIiwgci5wcm9wcy5mb3JtKSwgejEoejEoejEoejEoejEoejEoejEoejEoejEoejEoaSwgXCJhdXRvRm9jdXNcIiwgci5wcm9wcy5hdXRvRm9jdXMpLCBcInBsYWNlaG9sZGVyXCIsIHIucHJvcHMucGxhY2Vob2xkZXJUZXh0KSwgXCJkaXNhYmxlZFwiLCByLnByb3BzLmRpc2FibGVkKSwgXCJhdXRvQ29tcGxldGVcIiwgci5wcm9wcy5hdXRvQ29tcGxldGUpLCBcImNsYXNzTmFtZVwiLCBtMihzLnByb3BzLmNsYXNzTmFtZSwgYSkpLCBcInRpdGxlXCIsIHIucHJvcHMudGl0bGUpLCBcInJlYWRPbmx5XCIsIHIucHJvcHMucmVhZE9ubHkpLCBcInJlcXVpcmVkXCIsIHIucHJvcHMucmVxdWlyZWQpLCBcInRhYkluZGV4XCIsIHIucHJvcHMudGFiSW5kZXgpLCBcImFyaWEtZGVzY3JpYmVkYnlcIiwgci5wcm9wcy5hcmlhRGVzY3JpYmVkQnkpLCB6MSh6MSh6MShpLCBcImFyaWEtaW52YWxpZFwiLCByLnByb3BzLmFyaWFJbnZhbGlkKSwgXCJhcmlhLWxhYmVsbGVkYnlcIiwgci5wcm9wcy5hcmlhTGFiZWxsZWRCeSksIFwiYXJpYS1yZXF1aXJlZFwiLCByLnByb3BzLmFyaWFSZXF1aXJlZCkpKTtcbiAgICB9KSwgejEoZjEociksIFwicmVuZGVyQ2xlYXJCdXR0b25cIiwgZnVuY3Rpb24oKSB7XG4gICAgICB2YXIgaSA9IHIucHJvcHMsIGEgPSBpLmlzQ2xlYXJhYmxlLCBzID0gaS5kaXNhYmxlZCwgbCA9IGkuc2VsZWN0ZWQsIHAgPSBpLnN0YXJ0RGF0ZSwgZCA9IGkuZW5kRGF0ZSwgYiA9IGkuY2xlYXJCdXR0b25UaXRsZSwgTSA9IGkuY2xlYXJCdXR0b25DbGFzc05hbWUsIHUgPSBNID09PSB2b2lkIDAgPyBcIlwiIDogTSwgQSA9IGkuYXJpYUxhYmVsQ2xvc2UsIHogPSBBID09PSB2b2lkIDAgPyBcIkNsb3NlXCIgOiBBO1xuICAgICAgcmV0dXJuICFhIHx8IGwgPT0gbnVsbCAmJiBwID09IG51bGwgJiYgZCA9PSBudWxsID8gbnVsbCA6IG0xLmNyZWF0ZUVsZW1lbnQoXCJidXR0b25cIiwgeyB0eXBlOiBcImJ1dHRvblwiLCBjbGFzc05hbWU6IG0yKFwicmVhY3QtZGF0ZXBpY2tlcl9fY2xvc2UtaWNvblwiLCB1LCB7IFwicmVhY3QtZGF0ZXBpY2tlcl9fY2xvc2UtaWNvbi0tZGlzYWJsZWRcIjogcyB9KSwgZGlzYWJsZWQ6IHMsIFwiYXJpYS1sYWJlbFwiOiB6LCBvbkNsaWNrOiByLm9uQ2xlYXJDbGljaywgdGl0bGU6IGIsIHRhYkluZGV4OiAtMSB9KTtcbiAgICB9KSwgci5zdGF0ZSA9IHIuY2FsY0luaXRpYWxTdGF0ZSgpLCByLnByZXZlbnRGb2N1c1RpbWVvdXQgPSBudWxsLCByO1xuICB9XG4gIHJldHVybiBoMihvLCBbeyBrZXk6IFwiY29tcG9uZW50RGlkTW91bnRcIiwgdmFsdWU6IGZ1bmN0aW9uKCkge1xuICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKFwic2Nyb2xsXCIsIHRoaXMub25TY3JvbGwsICEwKTtcbiAgfSB9LCB7IGtleTogXCJjb21wb25lbnREaWRVcGRhdGVcIiwgdmFsdWU6IGZ1bmN0aW9uKG4sIHIpIHtcbiAgICB2YXIgaSwgYTtcbiAgICBuLmlubGluZSAmJiAoaSA9IG4uc2VsZWN0ZWQsIGEgPSB0aGlzLnByb3BzLnNlbGVjdGVkLCBpICYmIGEgPyBnMihpKSAhPT0gZzIoYSkgfHwgTDAoaSkgIT09IEwwKGEpIDogaSAhPT0gYSkgJiYgdGhpcy5zZXRQcmVTZWxlY3Rpb24odGhpcy5wcm9wcy5zZWxlY3RlZCksIHRoaXMuc3RhdGUubW9udGhTZWxlY3RlZEluICE9PSB2b2lkIDAgJiYgbi5tb250aHNTaG93biAhPT0gdGhpcy5wcm9wcy5tb250aHNTaG93biAmJiB0aGlzLnNldFN0YXRlKHsgbW9udGhTZWxlY3RlZEluOiAwIH0pLCBuLmhpZ2hsaWdodERhdGVzICE9PSB0aGlzLnByb3BzLmhpZ2hsaWdodERhdGVzICYmIHRoaXMuc2V0U3RhdGUoeyBoaWdobGlnaHREYXRlczogaDcodGhpcy5wcm9wcy5oaWdobGlnaHREYXRlcykgfSksIHIuZm9jdXNlZCB8fCBpMyhuLnNlbGVjdGVkLCB0aGlzLnByb3BzLnNlbGVjdGVkKSB8fCB0aGlzLnNldFN0YXRlKHsgaW5wdXRWYWx1ZTogbnVsbCB9KSwgci5vcGVuICE9PSB0aGlzLnN0YXRlLm9wZW4gJiYgKHIub3BlbiA9PT0gITEgJiYgdGhpcy5zdGF0ZS5vcGVuID09PSAhMCAmJiB0aGlzLnByb3BzLm9uQ2FsZW5kYXJPcGVuKCksIHIub3BlbiA9PT0gITAgJiYgdGhpcy5zdGF0ZS5vcGVuID09PSAhMSAmJiB0aGlzLnByb3BzLm9uQ2FsZW5kYXJDbG9zZSgpKTtcbiAgfSB9LCB7IGtleTogXCJjb21wb25lbnRXaWxsVW5tb3VudFwiLCB2YWx1ZTogZnVuY3Rpb24oKSB7XG4gICAgdGhpcy5jbGVhclByZXZlbnRGb2N1c1RpbWVvdXQoKSwgd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJzY3JvbGxcIiwgdGhpcy5vblNjcm9sbCwgITApO1xuICB9IH0sIHsga2V5OiBcInJlbmRlcklucHV0Q29udGFpbmVyXCIsIHZhbHVlOiBmdW5jdGlvbigpIHtcbiAgICB2YXIgbiA9IHRoaXMucHJvcHMsIHIgPSBuLnNob3dJY29uLCBpID0gbi5pY29uLCBhID0gbi5jYWxlbmRhckljb25DbGFzc25hbWUsIHMgPSBuLnRvZ2dsZUNhbGVuZGFyT25JY29uQ2xpY2ssIGwgPSB0aGlzLnN0YXRlLm9wZW47XG4gICAgcmV0dXJuIG0xLmNyZWF0ZUVsZW1lbnQoXCJkaXZcIiwgeyBjbGFzc05hbWU6IFwicmVhY3QtZGF0ZXBpY2tlcl9faW5wdXQtY29udGFpbmVyXCIuY29uY2F0KHIgPyBcIiByZWFjdC1kYXRlcGlja2VyX192aWV3LWNhbGVuZGFyLWljb25cIiA6IFwiXCIpIH0sIHIgJiYgbTEuY3JlYXRlRWxlbWVudCh3VywgJDMoeyBpY29uOiBpLCBjbGFzc05hbWU6IFwiXCIuY29uY2F0KGEsIFwiIFwiKS5jb25jYXQobCAmJiBcInJlYWN0LWRhdGVwaWNrZXItaWdub3JlLW9uY2xpY2tvdXRzaWRlXCIpIH0sIHMgPyB7IG9uQ2xpY2s6IHRoaXMudG9nZ2xlQ2FsZW5kYXIgfSA6IG51bGwpKSwgdGhpcy5zdGF0ZS5pc1JlbmRlckFyaWFMaXZlTWVzc2FnZSAmJiB0aGlzLnJlbmRlckFyaWFMaXZlUmVnaW9uKCksIHRoaXMucmVuZGVyRGF0ZUlucHV0KCksIHRoaXMucmVuZGVyQ2xlYXJCdXR0b24oKSk7XG4gIH0gfSwgeyBrZXk6IFwicmVuZGVyXCIsIHZhbHVlOiBmdW5jdGlvbigpIHtcbiAgICB2YXIgbiA9IHRoaXMucmVuZGVyQ2FsZW5kYXIoKTtcbiAgICBpZiAodGhpcy5wcm9wcy5pbmxpbmUpXG4gICAgICByZXR1cm4gbjtcbiAgICBpZiAodGhpcy5wcm9wcy53aXRoUG9ydGFsKSB7XG4gICAgICB2YXIgciA9IHRoaXMuc3RhdGUub3BlbiA/IG0xLmNyZWF0ZUVsZW1lbnQoTHAsIHsgZW5hYmxlVGFiTG9vcDogdGhpcy5wcm9wcy5lbmFibGVUYWJMb29wIH0sIG0xLmNyZWF0ZUVsZW1lbnQoXCJkaXZcIiwgeyBjbGFzc05hbWU6IFwicmVhY3QtZGF0ZXBpY2tlcl9fcG9ydGFsXCIsIHRhYkluZGV4OiAtMSwgb25LZXlEb3duOiB0aGlzLm9uUG9ydGFsS2V5RG93biB9LCBuKSkgOiBudWxsO1xuICAgICAgcmV0dXJuIHRoaXMuc3RhdGUub3BlbiAmJiB0aGlzLnByb3BzLnBvcnRhbElkICYmIChyID0gbTEuY3JlYXRlRWxlbWVudChtcCwgeyBwb3J0YWxJZDogdGhpcy5wcm9wcy5wb3J0YWxJZCwgcG9ydGFsSG9zdDogdGhpcy5wcm9wcy5wb3J0YWxIb3N0IH0sIHIpKSwgbTEuY3JlYXRlRWxlbWVudChcImRpdlwiLCBudWxsLCB0aGlzLnJlbmRlcklucHV0Q29udGFpbmVyKCksIHIpO1xuICAgIH1cbiAgICByZXR1cm4gbTEuY3JlYXRlRWxlbWVudChXVywgeyBjbGFzc05hbWU6IHRoaXMucHJvcHMucG9wcGVyQ2xhc3NOYW1lLCB3cmFwcGVyQ2xhc3NOYW1lOiB0aGlzLnByb3BzLndyYXBwZXJDbGFzc05hbWUsIGhpZGVQb3BwZXI6ICF0aGlzLmlzQ2FsZW5kYXJPcGVuKCksIHBvcnRhbElkOiB0aGlzLnByb3BzLnBvcnRhbElkLCBwb3J0YWxIb3N0OiB0aGlzLnByb3BzLnBvcnRhbEhvc3QsIHBvcHBlck1vZGlmaWVyczogdGhpcy5wcm9wcy5wb3BwZXJNb2RpZmllcnMsIHRhcmdldENvbXBvbmVudDogdGhpcy5yZW5kZXJJbnB1dENvbnRhaW5lcigpLCBwb3BwZXJDb250YWluZXI6IHRoaXMucHJvcHMucG9wcGVyQ29udGFpbmVyLCBwb3BwZXJDb21wb25lbnQ6IG4sIHBvcHBlclBsYWNlbWVudDogdGhpcy5wcm9wcy5wb3BwZXJQbGFjZW1lbnQsIHBvcHBlclByb3BzOiB0aGlzLnByb3BzLnBvcHBlclByb3BzLCBwb3BwZXJPbktleURvd246IHRoaXMub25Qb3BwZXJLZXlEb3duLCBlbmFibGVUYWJMb29wOiB0aGlzLnByb3BzLmVuYWJsZVRhYkxvb3AgfSk7XG4gIH0gfV0sIFt7IGtleTogXCJkZWZhdWx0UHJvcHNcIiwgZ2V0OiBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4geyBhbGxvd1NhbWVEYXk6ICExLCBkYXRlRm9ybWF0OiBcIk1NL2RkL3l5eXlcIiwgZGF0ZUZvcm1hdENhbGVuZGFyOiBcIkxMTEwgeXl5eVwiLCBvbkNoYW5nZTogZnVuY3Rpb24oKSB7XG4gICAgfSwgZGlzYWJsZWQ6ICExLCBkaXNhYmxlZEtleWJvYXJkTmF2aWdhdGlvbjogITEsIGRyb3Bkb3duTW9kZTogXCJzY3JvbGxcIiwgb25Gb2N1czogZnVuY3Rpb24oKSB7XG4gICAgfSwgb25CbHVyOiBmdW5jdGlvbigpIHtcbiAgICB9LCBvbktleURvd246IGZ1bmN0aW9uKCkge1xuICAgIH0sIG9uSW5wdXRDbGljazogZnVuY3Rpb24oKSB7XG4gICAgfSwgb25TZWxlY3Q6IGZ1bmN0aW9uKCkge1xuICAgIH0sIG9uQ2xpY2tPdXRzaWRlOiBmdW5jdGlvbigpIHtcbiAgICB9LCBvbk1vbnRoQ2hhbmdlOiBmdW5jdGlvbigpIHtcbiAgICB9LCBvbkNhbGVuZGFyT3BlbjogZnVuY3Rpb24oKSB7XG4gICAgfSwgb25DYWxlbmRhckNsb3NlOiBmdW5jdGlvbigpIHtcbiAgICB9LCBwcmV2ZW50T3Blbk9uRm9jdXM6ICExLCBvblllYXJDaGFuZ2U6IGZ1bmN0aW9uKCkge1xuICAgIH0sIG9uSW5wdXRFcnJvcjogZnVuY3Rpb24oKSB7XG4gICAgfSwgbW9udGhzU2hvd246IDEsIHJlYWRPbmx5OiAhMSwgd2l0aFBvcnRhbDogITEsIHNlbGVjdHNEaXNhYmxlZERheXNJblJhbmdlOiAhMSwgc2hvdWxkQ2xvc2VPblNlbGVjdDogITAsIHNob3dUaW1lU2VsZWN0OiAhMSwgc2hvd1RpbWVJbnB1dDogITEsIHNob3dQcmV2aW91c01vbnRoczogITEsIHNob3dNb250aFllYXJQaWNrZXI6ICExLCBzaG93RnVsbE1vbnRoWWVhclBpY2tlcjogITEsIHNob3dUd29Db2x1bW5Nb250aFllYXJQaWNrZXI6ICExLCBzaG93Rm91ckNvbHVtbk1vbnRoWWVhclBpY2tlcjogITEsIHNob3dZZWFyUGlja2VyOiAhMSwgc2hvd1F1YXJ0ZXJZZWFyUGlja2VyOiAhMSwgc2hvd1dlZWtQaWNrZXI6ICExLCBzdHJpY3RQYXJzaW5nOiAhMSwgdGltZUludGVydmFsczogMzAsIHRpbWVDYXB0aW9uOiBcIlRpbWVcIiwgcHJldmlvdXNNb250aEFyaWFMYWJlbDogXCJQcmV2aW91cyBNb250aFwiLCBwcmV2aW91c01vbnRoQnV0dG9uTGFiZWw6IFwiUHJldmlvdXMgTW9udGhcIiwgbmV4dE1vbnRoQXJpYUxhYmVsOiBcIk5leHQgTW9udGhcIiwgbmV4dE1vbnRoQnV0dG9uTGFiZWw6IFwiTmV4dCBNb250aFwiLCBwcmV2aW91c1llYXJBcmlhTGFiZWw6IFwiUHJldmlvdXMgWWVhclwiLCBwcmV2aW91c1llYXJCdXR0b25MYWJlbDogXCJQcmV2aW91cyBZZWFyXCIsIG5leHRZZWFyQXJpYUxhYmVsOiBcIk5leHQgWWVhclwiLCBuZXh0WWVhckJ1dHRvbkxhYmVsOiBcIk5leHQgWWVhclwiLCB0aW1lSW5wdXRMYWJlbDogXCJUaW1lXCIsIGVuYWJsZVRhYkxvb3A6ICEwLCB5ZWFySXRlbU51bWJlcjogS28sIGZvY3VzU2VsZWN0ZWRNb250aDogITEsIHNob3dQb3BwZXJBcnJvdzogITAsIGV4Y2x1ZGVTY3JvbGxiYXI6ICEwLCBjdXN0b21UaW1lSW5wdXQ6IG51bGwsIGNhbGVuZGFyU3RhcnREYXk6IHZvaWQgMCwgdG9nZ2xlQ2FsZW5kYXJPbkljb25DbGljazogITEgfTtcbiAgfSB9XSksIG87XG59KCksIEJXID0gXCJpbnB1dFwiLCBIaSA9IFwibmF2aWdhdGVcIjtcbmNvbnN0IG03ID0gW1xuICBcIkphbnVhcnlcIixcbiAgXCJGZWJydWFyeVwiLFxuICBcIk1hcmNoXCIsXG4gIFwiQXByaWxcIixcbiAgXCJNYXlcIixcbiAgXCJKdW5lXCIsXG4gIFwiSnVseVwiLFxuICBcIkF1Z3VzdFwiLFxuICBcIlNlcHRlbWJlclwiLFxuICBcIk9jdG9iZXJcIixcbiAgXCJOb3ZlbWJlclwiLFxuICBcIkRlY2VtYmVyXCJcbl0sIGY0ID0gJC5kaXYoXG4gICh7XG4gICAgJGNvbHVtblN0YXJ0OiBlID0gXCJcIixcbiAgICAkbWlkZGxlOiB0ID0gITEsXG4gICAgJGNlbnRlcjogbyA9ICExLFxuICAgIGVuZDogbiA9ICExLFxuICAgICRjZWxsSGVpZ2h0OiByID0gMSxcbiAgICAkcm93U3RhcnQ6IGkgPSBcIlwiLFxuICAgIHdpZHRoOiBhID0gMSxcbiAgICBhcmVhOiBzID0gXCJcIlxuICB9KSA9PiBvMWBcbiAgICBncmlkLWNvbHVtbi1lbmQ6ICR7YHNwYW4gJHthfWB9O1xuICAgIGdyaWQtcm93LWVuZDogJHtgc3BhbiAke3J9YH07XG4gICAgZ3JpZC1jb2x1bW4tc3RhcnQ6ICR7ZX07XG4gICAgZ3JpZC1yb3ctc3RhcnQ6ICR7aX07XG4gICAgZ3JpZC1hcmVhOiAke3N9O1xuXG4gICAgJHt0ICYmIG8xYFxuICAgICAgZGlzcGxheTogaW5saW5lLWZsZXg7XG4gICAgICBmbGV4LWZsb3c6IGNvbHVtbiB3cmFwO1xuICAgICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XG4gICAgICBqdXN0aWZ5LXNlbGY6IHN0cmV0Y2g7XG4gICAgYH1cblxuICAgICR7byAmJiBvMWBcbiAgICAgIHRleHQtYWxpZ246IGNlbnRlcjtcbiAgICBgfVxuXG4gICAgJHtuICYmIG8xYFxuICAgICAgdGV4dC1hbGlnbjogZW5kO1xuICAgIGB9XG4gIGBcbiksIFNXID0gXCIxMnB4XCIsIEVXID0gXCIyMHB4XCIsIHNvID0gJC5kaXYoXG4gICh7XG4gICAgdGhlbWU6IGUsXG4gICAgJG1pblJvd0hlaWdodDogdCA9IEVXLFxuICAgICRqdXN0aWZ5Q29udGVudDogbyA9IFwiXCIsXG4gICAgJGFsaWduQ29udGVudDogbiA9IFwiXCIsXG4gICAgYWxpZ25JdGVtczogciA9IFwiXCIsXG4gICAgLy8gQWRkIHRoZSBhbGlnbkl0ZW1zIHByb3Agd2l0aCBhIGRlZmF1bHQgdmFsdWUgb2YgJ2NlbnRlcidcbiAgICBmbG93OiBpID0gXCJyb3dcIixcbiAgICBoZWlnaHQ6IGEgPSBcIlwiLFxuICAgIGFyZWFzOiBzID0gXCJcIixcbiAgICByb3dzOiBsID0gXCJcIixcbiAgICBnYXA6IHAgPSBTVyxcbiAgICBjb2x1bW5zOiBkXG4gIH0pID0+IG8xYFxuICAgIGRpc3BsYXk6IGdyaWQ7XG4gICAgZ3JpZC1nYXA6ICR7cH07XG4gICAgaGVpZ2h0OiAke2F9O1xuICAgIGdyaWQtdGVtcGxhdGUtY29sdW1uczogJHtkICYmIGByZXBlYXQoJHtkfSwgMWZyKWB9O1xuICAgIGdyaWQtYXV0by1yb3dzOiAke2BtaW5tYXgoJHt0fSwgYXV0bylgfTtcbiAgICBncmlkLXRlbXBsYXRlLWFyZWFzOiAke3N9O1xuICAgIGdyaWQtdGVtcGxhdGUtcm93czogJHtsfTtcbiAgICBncmlkLWF1dG8tZmxvdzogJHtpfTtcbiAgICBqdXN0aWZ5LWNvbnRlbnQ6ICR7b307XG4gICAgYWxpZ24tY29udGVudDogJHtufTtcbiAgICBhbGlnbi1pdGVtczogJHtyfTsgLy8gQWRkIGFsaWduLWl0ZW1zIHByb3BlcnR5XG4gIGBcbiksIHFwID0gJC5sYWJlbGBcblxuYCwgWG4gPSAkLmRpdihcbiAgKHsgdGhlbWU6IHsgY29sb3JzOiBlLCB0eXBvZ3JhcGh5OiB0LCBmb250V2VpZ2h0OiBvLCBib3JkZXJSYWRpdXM6IG4gfSB9KSA9PiBvMWBcbiAgICBkaXNwbGF5OiBmbGV4O1xuICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gICAgcGFkZGluZzogMCA4LjQ2cHg7XG4gICAgYmFja2dyb3VuZDogJHtlLmJhY2tncm91bmRzLmJnUHJpbWFyeX07XG4gICAgY29sb3I6JHtlLnRleHRJY29uLnRleHRIaWdoZW1waGFzaXN9O1xuICAgIGJvcmRlci1yYWRpdXM6ICR7bi5iYXNlfTtcbiAgICBmb250LXNpemU6ICR7dC50MTJ9O1xuICAgIGZvbnQtd2VpZ2h0OiAke28ubGlnaHR9O1xuICAgIHRyYW5zaXRpb246IGNvbG9yIDAuMnMsIGJhY2tncm91bmQtY29sb3IgMC4ycztcbiAgICBoZWlnaHQ6IDI0cHg7XG4gICAgLyogbWF4LXdpZHRoOiA2NHB4OyAqL1xuICAgIGN1cnNvcjogcG9pbnRlcjtcbiAgICB3aGl0ZS1zcGFjZTogbm93cmFwO1xuXG4gICAgJjpob3ZlciB7XG4gICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAke2UuYmFja2dyb3VuZHMuYmdIb3ZlclByaW1hcnl9O1xuICAgIH1cbiAgICAmOmZvY3VzLXZpc2libGV7XG4gICAgICBib3gtc2hhZG93OiAwIDAgMCAycHggJHtlLmJvcmRlci5ib3JkZXJGb2N1c2VkfSBpbnNldDtcbiAgICAgIG91dGxpbmU6IG5vbmU7XG4gICAgfVxuICAgICAgXG4gICAgJjphY3RpdmUge1xuICAgICAgYmFja2dyb3VuZC1jb2xvcjogJHtlLmJhY2tncm91bmRzLmJnVGVydGlhcnl9O1xuICAgICAgY29sb3I6ICR7ZS50ZXh0SWNvbi50ZXh0VGVydGlhcnl9O1xuICAgICAgJjpob3ZlciB7XG4gICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAke2UuYmFja2dyb3VuZHMuYmdIb3ZlclNlY29uZGFyeX07XG4gICAgfVxuICAgIH1cblxuICAgICR7bm99IHtcbiAgICAgIG1hcmdpbjogMCA1cHggMCAtMTBweDtcbiAgICB9XG4gIGBcbiksIGtXID0gJC5pbnB1dChcbiAgKHsgdGhlbWU6IHsgY29sb3JzOiBlIH0gfSkgPT4gbzFgXG4gICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgIGxlZnQ6IC05OTk5cHg7XG4gICAgd2lkdGg6IDA7XG4gICAgaGVpZ2h0OiAwO1xuXG4gICAgJjpjaGVja2VkICsgJHtYbn0ge1xuICAgICAgYmFja2dyb3VuZC1jb2xvcjogJHtlLmJhY2tncm91bmRzLmJnVGVydGlhcnl9O1xuICAgICAgY29sb3I6ICR7ZS50ZXh0SWNvbi50ZXh0VGVydGlhcnl9O1xuICAgICAgJjpub3QoOmFjdGl2ZSkge1xuICAgICAgICBcbiAgICAgICY6aG92ZXIge1xuICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAke2UuYmFja2dyb3VuZHMuYmdIb3ZlclNlY29uZGFyeX07O1xuICAgICAgfVxuICAgIH1cbiAgICAmOmFjdGl2ZXtcbiAgICAgICAgYmFja2dyb3VuZDogJHtlLmJhY2tncm91bmRzLmJnUHJlc3NlZH07XG4gICAgICB9XG4gICAgIFxuICAgIH1cbiAgIFxuXG4gICAgJjpkaXNhYmxlZCArICR7WG59IHtcbiAgICAgIGJhY2tncm91bmQtY29sb3I6ICR7ZS5iYWNrZ3JvdW5kcy5iZ1ByaW1hcnl9O1xuICAgICAgY29sb3I6ICR7ZS50ZXh0SWNvbi50ZXh0TG93ZW1waGFzaXN9O1xuICAgICAgY3Vyc29yOiBub3QtYWxsb3dlZDtcbiAgICB9XG5cbiAgICAmOmNoZWNrZWQ6ZGlzYWJsZWQgKyAke1hufSB7XG4gICAgICBjb2xvcjogJHtlLnRvZ2dsZVN3aXRjaC5zd2l0Y2hUZXh0UmVhZG9ubHlBY3RpdmV9O1xuICAgICAgYmFja2dyb3VuZC1jb2xvcjogJHtlLmJhY2tncm91bmRzLmJnUmVhZE9ubHl9O1xuICAgICAgY3Vyc29yOiBub3QtYWxsb3dlZDtcbiAgICB9XG4gIGBcbiksIHlwID0gJC5kaXZgXG4gIGRpc3BsYXk6IGZsZXg7XG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG5cbiAgJHtQdH0ge1xuICAgIG1hcmdpbi1sZWZ0OiAkeyh7IHRoZW1lOiBlIH0pID0+IGUuc3BhY2luZ3Muc3A0fTtcbiAgfVxuYCwgTlcgPSAkLmRpdihcbiAgKHtcbiAgICAkaXNEaXNhYmxlZDogZSxcbiAgICAkaXNFcnJvcjogdCxcbiAgICAkaXNSZWFkT25seTogbyxcbiAgICB0aGVtZTogeyBjb2xvcnM6IG4sIHNwYWNpbmdzOiByLCBib3JkZXJSYWRpdXM6IGkgfVxuICB9KSA9PiBvMWBcbiAgICBkaXNwbGF5OiBmbGV4O1xuICAgIGJhY2tncm91bmQtY29sb3I6ICR7bi53aGl0ZX07XG4gICAgYm9yZGVyOiAxcHggc29saWQgJHtuLmdhaW5zYm9yb307XG4gICAgcGFkZGluZzogM3B4O1xuICAgIGJvcmRlci1yYWRpdXM6ICR7aS5iYXNlfTtcblxuICAgICR7cXB9IHtcbiAgICAgIG1hcmdpbi1yaWdodDogJHtyLnNwNH07XG5cbiAgICAgICY6bGFzdC1jaGlsZCB7XG4gICAgICAgIG1hcmdpbi1yaWdodDogMDtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAke3QgJiYgbzFgXG4gICAgICBib3JkZXItY29sb3I6ICR7bi5yZWR9O1xuICAgIGB9XG5cbiAgICAke2UgJiYgbzFgXG4gICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAke24ud2hpdGV9O1xuICAgICAgYm9yZGVyLWNvbG9yOiAke24uZ2FpbnNib3JvfTtcbiAgICBgfVxuICAgICR7byAmJiBvMWBcbiAgICAgIHdpZHRoOiAxMDAlO1xuICAgIGB9XG4gIGBcbiksIFRXID0gJC5kaXYoXG4gICh7IHRoZW1lOiB7IHR5cG9ncmFwaHk6IGUgfSB9KSA9PiBvMWBcbiAgICBoZWlnaHQ6IDI0cHg7XG4gICAgZm9udC1zaXplOiAke2UudDEyfTtcbiAgICB3aWR0aDogMTAwJTtcbiAgICBkaXNwbGF5OiBmbGV4O1xuICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gICAgcGFkZGluZzogMCA4cHg7XG4gICAgYmFja2dyb3VuZC1jb2xvcjogI2NiYzllMDtcbiAgICBjb2xvcjogI2ZmZmZmZjtcbiAgYFxuKTtcbiQuZGl2YFxuICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gIHRvcDogMjBweDtcbiAgdHJhbnNmb3JtOiB0cmFuc2xhdGVYKC01MCUpO1xuICB3aWR0aDogMzAwcHg7XG5gO1xuY29uc3QgTDcgPSAkLmRpdihcbiAgKHt9KSA9PiBvMWBcbiAgICBkaXNwbGF5OiBmbGV4O1xuICAgIGp1c3RpZnktY29udGVudDogc3BhY2UtYmV0d2VlbjtcbiAgYFxuKSwgdjcgPSAkLmRpdihcbiAgKHt9KSA9PiBvMWBcbiAgICBkaXNwbGF5OiBmbGV4O1xuICAgIGp1c3RpZnktY29udGVudDogZmxleC1lbmQ7XG4gIGBcbiksIHE3ID0gJC5kaXYoXG4gICh7fSkgPT4gbzFgXG4gICAgZGlzcGxheTogZmxleDtcbiAgICBnYXA6IDhweDtcbiAgYFxuKSwgSVcgPSAkLmRpdihcbiAgKHsgdGhlbWU6IGUgfSkgPT4gbzFgXG4gICAgcGFkZGluZzogJHtlLnNwYWNpbmdzLnNwMTZ9O1xuICAgIGJhY2tncm91bmQtY29sb3I6ICR7ZS5jb2xvcnMud2hpdGV9O1xuICAgIGJveC1zaGFkb3c6ICR7ZS5zaGFkb3dzLnNtfTtcbiAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgei1pbmRleDogMTA7XG4gIGBcbiksIERXID0gJC5kaXYoXG4gICh7IHRoZW1lOiB7IHNwYWNpbmdzOiBlLCBjb2xvcnM6IHQgfSB9KSA9PiBvMWBcbiAgICBwYWRkaW5nOiAke2Uuc3A4fSAwO1xuICAgICR7UDJ9IHtcbiAgICAgIGJhY2tncm91bmQtY29sb3I6ICR7dC5MYXZlbmRlck1pc3R9O1xuICAgIH1cbiAgYFxuKSwgeTcgPSAkLmRpdihcbiAgKHsgdGhlbWU6IHsgc3BhY2luZ3M6IGUsIGNvbG9yczogdCB9IH0pID0+IG8xYFxuICAgIHBhZGRpbmc6ICR7ZS5zcDEyfSAwO1xuICAgICR7UDJ9IHtcbiAgICAgIGJhY2tncm91bmQtY29sb3I6ICR7dC5MYXZlbmRlck1pc3R9O1xuICAgIH1cbiAgYFxuKSwgSFcgPSAkLmhlYWRlcihcbiAgKHsgdGhlbWU6IHsgc3BhY2luZ3M6IGUgfSB9KSA9PiBvMWBcbiAgICBkaXNwbGF5OiBmbGV4O1xuICAgIGp1c3RpZnktY29udGVudDogc3BhY2UtYmV0d2VlbjtcbiAgICBhbGlnbi1pdGVtczogY2VudGVyO1xuICAgIHBhZGRpbmctYm90dG9tOiAke2Uuc3A4fTtcbiAgICB1c2VyLXNlbGVjdDogbm9uZTtcbiAgYFxuKSwgVlcgPSAkLmhlYWRlcihcbiAgKHsgdGhlbWU6IHt9IH0pID0+IG8xYFxuICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgZ2FwOiA0cHg7XG4gICAgcGFkZGluZy1sZWZ0OiAxMXB4O1xuICBgXG4pO1xuJC5oZWFkZXIoXG4gICh7IHRoZW1lOiB7IHNwYWNpbmdzOiBlIH0gfSkgPT4gbzFgXG4gICAgbWFyZ2luOiAwIDAgJHtlLnNwOH0gMDtcbiAgYFxuKTtcbmNvbnN0IHc3ID0gJC5kaXYoXG4gICh7IHRoZW1lOiB7IGJvcmRlclJhZGl1czogZSwgdHJhbnNpdGlvbnM6IHQsIGNvbG9yczogbyB9IH0pID0+IG8xYFxuICAgIHBhZGRpbmc6IDEwcHg7XG4gICAgYm9yZGVyLXJhZGl1czogJHtlLmJhc2V9O1xuICAgIHRyYW5zaXRpb246ICR7dC5iYXNlfTtcbiAgICBjdXJzb3I6IHBvaW50ZXI7XG5cbiAgICAmOmhvdmVyIHtcbiAgICAgIGJhY2tncm91bmQtY29sb3I6ICR7by5iYWNrZ3JvdW5kcy53aGl0ZVNtb2tlfTtcbiAgICB9XG5cbiAgICAuaWNvbi1zeXN0ZW0ge1xuICAgICAgY29sb3I6ICR7by50ZXh0SWNvbi50ZXh0UHJpbWFyeX07XG4gICAgfVxuICBgXG4pLCBQVyA9ICQucChcbiAgKHsgdGhlbWU6IGUgfSkgPT4gbzFgXG4gICAgZm9udC1mYW1pbHk6ICR7ZS5mb250RmFtaWx5LmJhc2V9O1xuICAgIGZvbnQtd2VpZ2h0OiAke2UuZm9udFdlaWdodC5yZWd1bGFyfTtcbiAgICBmb250LXNpemU6ICR7ZS50eXBvZ3JhcGh5LnQxNn07XG4gICAgY29sb3I6ICR7ZS5jb2xvcnMuYmxhY2t9O1xuICAgIG1hcmdpbjogMDtcbiAgICB3aWR0aDogMTAwJTtcblxuICAgIC5kcm9wZG93biBkaXYgZGl2IC5pbnB1dF9fbGFiZWwge1xuICAgICAgZGlzcGxheTogbm9uZTtcbiAgICB9XG4gICAgLmlucHV0LWNvbnRhaW5lciB7XG4gICAgICAmOmhhcyguaW5wdXQtY2xlYXItYnRuKSB7XG4gICAgICAgIGlucHV0IHtcbiAgICAgICAgICBwYWRkaW5nLWxlZnQ6ICR7ZS5zcGFjaW5ncy5zcDh9ICFpbXBvcnRhbnQ7XG4gICAgICAgICAgcGFkZGluZy1yaWdodDogMzVweCAhaW1wb3J0YW50O1xuICAgICAgICAgIHdoaXRlLXNwYWNlOiBub3dyYXA7XG4gICAgICAgICAgb3ZlcmZsb3c6IGhpZGRlbjtcbiAgICAgICAgICB0ZXh0LW92ZXJmbG93OiBlbGxpcHNpcztcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaW5wdXQge1xuICAgICAgICBwYWRkaW5nLXJpZ2h0OiAyNXB4ICFpbXBvcnRhbnQ7XG4gICAgICAgIHBhZGRpbmctbGVmdDogJHtlLnNwYWNpbmdzLnNwOH0gIWltcG9ydGFudDtcbiAgICAgIH1cbiAgICAgIC5pbnB1dC1jbGVhci1idG4ge1xuICAgICAgICByaWdodDogMzZweDtcbiAgICAgIH1cbiAgICB9XG4gICAgJHtzb30ge1xuICAgICAgcGFkZGluZzogMDtcbiAgICB9XG4gIGBcbiksIEZXID0gJC5kaXYoXG4gICh7IHRoZW1lOiB7IHNwYWNpbmdzOiBlIH0sICRpc1RpbWU6IHQgfSkgPT4gbzFgXG4gICAgZGlzcGxheTogZmxleDtcbiAgICBqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWJldHdlZW47XG4gICAgJHt0ICYmIG8xYFxuICAgICAgcGFkZGluZy1ib3R0b206ICR7ZS5zcDh9O1xuICAgIGB9XG4gIGBcbiksIFhXID0gJC5zcGFuKFxuICAoeyB0aGVtZTogZSB9KSA9PiBvMWBcbiAgICBmb250LWZhbWlseTogJHtlLmZvbnRGYW1pbHkuYmFzZX07XG4gICAgZm9udC13ZWlnaHQ6ICR7ZS5mb250V2VpZ2h0LmxpZ2h0fTtcbiAgICBmb250LXNpemU6ICR7ZS50eXBvZ3JhcGh5LnQxMn07XG4gICAgY29sb3I6ICR7ZS5jb2xvcnMuZGFya307XG4gIGBcbiksIHg3ID0gJC5kaXYoKHt9KSA9PiBvMWBcbiAgICBkaXNwbGF5OiBmbGV4O1xuICAgIGp1c3RpZnktY29udGVudDogc3BhY2UtYmV0d2VlbjtcbiAgICBwYWRkaW5nLXJpZ2h0OiAyMHB4O1xuICAgIGlucHV0IHtcbiAgICAgIHBhZGRpbmctcmlnaHQ6IDIycHggIWltcG9ydGFudDtcbiAgICAgIHBhZGRpbmctbGVmdDogOHB4ICFpbXBvcnRhbnQ7XG4gICAgfVxuICAgIHN2ZyB7XG4gICAgICB3aWR0aDogMTJweDtcbiAgICB9XG4gIGApLCBXNyA9ICQuc3BhbmBcbiAgcGFkZGluZzogOHB4O1xuYDtcbiQuc3BhbmBcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xuYDtcbmNvbnN0IFI3ID0gJC5kaXZgXG4gIC8qICR7eXB9e1xuICAgIGp1c3RpZnktY29udGVudDogZmxleC1lbmQ7XG4gIH0gKi9cbmAsIEI3ID0gJC5kaXYoKHsgdGhlbWU6IHsgc3BhY2luZ3M6IGUgfSB9KSA9PiBvMWBcbiAgICBwYWRkaW5nLXRvcDogJHtlLnNwOH07XG4gICAgbGFiZWwge1xuICAgICAgZGlzcGxheTogdW5zZXQ7XG4gICAgfVxuICAgIHN2ZyB7XG4gICAgICB0b3A6IDExcHggIWltcG9ydGFudDtcbiAgICB9XG4gIGApLCBTNyA9ICQuZGl2YFxuICBkaXNwbGF5OiBmbGV4O1xuICBqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWJldHdlZW47XG4gIGxhYmVsIHtcbiAgICBkaXNwbGF5OiB1bnNldDtcbiAgfVxuICAke3NvfSB7XG4gICAgcGFkZGluZzogMDtcbiAgfVxuYDtcbiQuZGl2YFxuICBwYWRkaW5nOiA4cHg7XG5cbiAgaGVhZGVyIHtcbiAgICBtYXJnaW46IDBweDtcbiAgfVxuYDtcbiQuZGl2YGA7XG4kLmRpdmBcbiAgaW5wdXQge1xuICAgIHotaW5kZXg6IDEzO1xuICB9XG4gIGxhYmVsIHtcbiAgICBkaXNwbGF5OiB1bnNldDtcbiAgfVxuICAke3NvfSB7XG4gICAgcGFkZGluZzogMDtcbiAgfVxuYDtcbiQuZGl2KFxuICAoe30pID0+IG8xYFxuICAgICAgbGFiZWwge1xuICAgICAgICBkaXNwbGF5OiB1bnNldDtcbiAgICAgIH1cbiAgICAgICR7c299IHtcbiAgICAgICAgcGFkZGluZzogMDtcbiAgICAgIH1cbiAgICBgXG4pO1xuY29uc3QgRTcgPSAkKFkyKWBcbiAgY3Vyc29yOiBwb2ludGVyO1xuICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gICsgKiB7XG4gICAgLmljb24tc3lzdGVtIHtcbiAgICAgIGN1cnNvcjogcG9pbnRlcjtcbiAgICB9XG4gIH1cbmA7XG4kLmRpdihcbiAgKHsgJGlzVGltZTogZSB9KSA9PiBvMWBcbiAgICAke2UgJiYgbzFgXG4gICAgICBkaXNwbGF5OiBmbGV4O1xuICAgICAganVzdGlmeS1jb250ZW50OiBzcGFjZS1iZXR3ZWVuO1xuICAgIGB9XG5cbiAgICBnYXA6OHB4O1xuICAgIHBhZGRpbmc6IDAgMjRweDtcbiAgICBtYXJnaW4tdG9wOiAyNHB4O1xuICAgIGlucHV0IHtcbiAgICAgIHotaW5kZXg6IDExO1xuICAgIH1cbiAgICB3aWR0aDogJHtlID8gXCIzMDhweFwiIDogXCIzMDZweFwifTtcbiAgYFxuKTtcbiQuZGl2KCh7IHRoZW1lOiBlIH0pID0+IG8xYGApO1xuJC5kaXYoKHsgdGhlbWU6IGUgfSkgPT4gbzFgYCk7XG5jb25zdCBVVyA9ICQuZGl2KFxuICAoe30pID0+IG8xYFxuICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICBib3R0b206IDA7XG4gIGBcbiksIHdwID0gJC5kaXYoXG4gICh7IHRoZW1lOiBlLCBpc0Rpc2FibGVkOiB0LCAkaXNUaW1lOiBvIH0pID0+IG8xYFxuICAgIC5yZWFjdC1kYXRlcGlja2VyLXBvcHBlcltkYXRhLXBsYWNlbWVudF49J3RvcCddLFxuICAgIC5yZWFjdC1kYXRlcGlja2VyLXBvcHBlcltkYXRhLXBsYWNlbWVudF49J2JvdHRvbSddLFxuICAgIC5yZWFjdC1kYXRlcGlja2VyLXBvcHBlcltkYXRhLXBsYWNlbWVudF49J2xlZnQnXSxcbiAgICAucmVhY3QtZGF0ZXBpY2tlci1wb3BwZXJbZGF0YS1wbGFjZW1lbnRePSdyaWdodCddIHtcbiAgICAgIHBvc2l0aW9uOiBmaXhlZCAhaW1wb3J0YW50O1xuICAgIH1cbiAgICAuYWxpZ24tY2VudGVyLFxuICAgIC5hbGlnbi1sZWZ0LFxuICAgIC5hbGlnbi1yaWdodCB7XG4gICAgICB0b3A6IDEwMCU7XG4gICAgICBoZWlnaHQ6IGZpdC1jb250ZW50O1xuICAgIH1cblxuICAgIC5yZWFjdC1kYXRlcGlja2VyX19kYXktbmFtZSB7XG4gICAgICB3aWR0aDogMzJweCAhaW1wb3J0YW50O1xuICAgICAgaGVpZ2h0OiAzMnB4ICFpbXBvcnRhbnQ7XG4gICAgICAvKiBwYWRkaW5nOiAxMHB4OyAqL1xuICAgIH1cbiAgICAucmVhY3QtZGF0ZXBpY2tlcl9fZGF5IHtcbiAgICAgIHdpZHRoOiAzMnB4ICFpbXBvcnRhbnQ7XG4gICAgICBoZWlnaHQ6IDMycHggIWltcG9ydGFudDtcbiAgICAgIGZvbnQtc2l6ZTogJHtlLnR5cG9ncmFwaHkudDEyfSAhaW1wb3J0YW50O1xuICAgICAgbGluZS1oZWlnaHQ6ICR7ZS5saW5lSGVpZ2h0LmxoMjB9O1xuICAgIH1cbiAgICAucmVhY3QtZGF0ZXBpY2tlci1wb3BwZXIge1xuICAgICAgd2lkdGg6IG1pbi1jb250ZW50O1xuICAgIH1cbiAgICAke28gJiYgbzFgXG4gICAgICAucmVhY3QtZGF0ZXBpY2tlci13cmFwcGVyIHtcbiAgICAgICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgICAgICB0b3A6IDE2cHg7XG4gICAgICB9XG4gICAgYH1cbiAgICAucmVhY3QtZGF0ZXBpY2tlcl9fYXJpYS1saXZlIHtcbiAgICAgIGRpc3BsYXk6IG5vbmU7XG4gICAgfVxuXG4gICAgLnJlYWN0LWRhdGVwaWNrZXItcG9wcGVyIHtcbiAgICAgIGJhY2tncm91bmQtY29sb3I6ICR7ZS5jb2xvcnMud2hpdGV9O1xuICAgICAgYm94LXNoYWRvdzogJHtlLnNoYWRvd3Muc219O1xuICAgICAgcGFkZGluZzogJHtlLnNwYWNpbmdzLnNwMTZ9O1xuICAgICAgYmFja2dyb3VuZC1jb2xvcjogJHtlLmNvbG9ycy5iYWNrZ3JvdW5kcy5iZ1ByaW1hcnl9O1xuICAgIH1cbiAgICAucmVhY3QtZGF0ZXBpY2tlciB7XG4gICAgICBmb250LWZhbWlseTogJHtlLmZvbnRGYW1pbHkuYmFzZX07XG4gICAgICBmb250LXNpemU6ICR7ZS50eXBvZ3JhcGh5LnQxMn07XG4gICAgICBsaW5lLWhlaWdodDogJHtlLmxpbmVIZWlnaHQubGgyMH07XG4gICAgICBjb2xvcjogJHtlLmNvbG9ycy5ibHVlfTtcbiAgICAgIGJvcmRlcjogbm9uZTtcbiAgICAgIGJhY2tncm91bmQtY29sb3I6ICR7ZS5jb2xvcnMuYmFja2dyb3VuZHMuYmdQcmltYXJ5fTtcbiAgICAgIGJvcmRlci1yYWRpdXM6ICR7ZS5ib3JkZXJSYWRpdXMuYmFzZX07XG4gICAgICBkaXNwbGF5OiBmbGV4O1xuICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbiAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcblxuICAgICAgJl9faGVhZGVyIHtcbiAgICAgICAgdGV4dC1hbGlnbjogY2VudGVyO1xuICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAke2UuY29sb3JzLmJhY2tncm91bmRzLmJnUHJpbWFyeX07XG4gICAgICAgIGJvcmRlci1ib3R0b206IG5vbmU7XG4gICAgICAgIGJvcmRlci10b3AtbGVmdC1yYWRpdXM6ICR7ZS5ib3JkZXJSYWRpdXMuYmFzZX07XG4gICAgICAgIHBhZGRpbmc6IDBweDtcbiAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlO1xuXG4gICAgICAgICY6bm90KC5yZWFjdC1kYXRlcGlja2VyX19oZWFkZXItLWhhcy10aW1lLXNlbGVjdCkge1xuICAgICAgICAgIGJvcmRlci10b3AtcmlnaHQtcmFkaXVzOiAke2UuYm9yZGVyUmFkaXVzLmJhc2V9O1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgICZfX2RheSxcbiAgICAgICZfX2RheS1uYW1lIHtcbiAgICAgICAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuICAgICAgICBtYXJnaW46IDJweDtcbiAgICAgIH1cblxuICAgICAgJl9fZGF5IHtcbiAgICAgICAgb3V0bGluZTogbm9uZTtcbiAgICAgICAgZGlzcGxheTogaW5saW5lLWZsZXg7XG4gICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gICAgICAgIGp1c3RpZnktY29udGVudDogY2VudGVyO1xuICAgICAgICB3aWR0aDogJHtlLml0ZW1TaXplLmxnfTtcbiAgICAgICAgaGVpZ2h0OiAke2UuaXRlbVNpemUubGd9O1xuICAgICAgICBmb250LXNpemU6ICR7ZS50eXBvZ3JhcGh5LnQxNn07XG4gICAgICAgIGZvbnQtd2VpZ2h0OiAke2UuZm9udFdlaWdodC5yZWd1bGFyfTtcbiAgICAgICAgY29sb3I6ICR7ZS5jb2xvcnMudGV4dEljb24udGV4dFNlY29uZGFyeX07XG4gICAgICAgIGJvcmRlci1yYWRpdXM6ICR7ZS5ib3JkZXJSYWRpdXMuYmFzZX07XG4gICAgICAgIHRyYW5zaXRpb246ICR7ZS50cmFuc2l0aW9ucy5iYXNlfTtcblxuICAgICAgICAmOmhvdmVyIHtcbiAgICAgICAgICB0cmFuc2l0aW9uOiAke2UudHJhbnNpdGlvbnMuYmFzZX07XG5cbiAgICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAke2UuY29sb3JzLmJhY2tncm91bmRzLmJnSG92ZXJQcmltYXJ5fTtcbiAgICAgICAgICBjb2xvcjogJHtlLmNvbG9ycy50ZXh0SWNvbi50ZXh0U2Vjb25kYXJ5fTtcbiAgICAgICAgfVxuXG4gICAgICAgICYtbmFtZSB7XG4gICAgICAgICAgZGlzcGxheTogaW5saW5lLWZsZXg7XG4gICAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcbiAgICAgICAgICB3aWR0aDogJHtlLml0ZW1TaXplLmxnfTtcbiAgICAgICAgICBoZWlnaHQ6ICR7ZS5pdGVtU2l6ZS5sZ307XG4gICAgICAgICAgY29sb3I6ICR7ZS5jb2xvcnMudGV4dEljb24udGV4dExvd2VtcGhhc2lzfTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICAmX190cmlhbmdsZSB7XG4gICAgICAgIGRpc3BsYXk6IG5vbmU7XG4gICAgICB9XG4gICAgfVxuICAgIC5yZWFjdC1kYXRlcGlja2VyX19tb250aCB7XG4gICAgICBwYWRkaW5nLWJvdHRvbTogMHB4ICFpbXBvcnRhbnQ7XG4gICAgfVxuICAgIC5yZWFjdC1kYXRlcGlja2VyX19kYXktLXNlbGVjdGVkLFxuICAgIC5yZWFjdC1kYXRlcGlja2VyX19kYXktLWluLXNlbGVjdGluZy1yYW5nZSxcbiAgICAucmVhY3QtZGF0ZXBpY2tlcl9fZGF5LS1pbi1yYW5nZSxcbiAgICAucmVhY3QtZGF0ZXBpY2tlcl9fbW9udGgtdGV4dC0tc2VsZWN0ZWQsXG4gICAgLnJlYWN0LWRhdGVwaWNrZXJfX21vbnRoLXRleHQtLWluLXNlbGVjdGluZy1yYW5nZSxcbiAgICAucmVhY3QtZGF0ZXBpY2tlcl9fbW9udGgtdGV4dC0taW4tcmFuZ2UsXG4gICAgLnJlYWN0LWRhdGVwaWNrZXJfX3F1YXJ0ZXItdGV4dC0tc2VsZWN0ZWQsXG4gICAgLnJlYWN0LWRhdGVwaWNrZXJfX3F1YXJ0ZXItdGV4dC0taW4tc2VsZWN0aW5nLXJhbmdlLFxuICAgIC5yZWFjdC1kYXRlcGlja2VyX19xdWFydGVyLXRleHQtLWluLXJhbmdlLFxuICAgIC5yZWFjdC1kYXRlcGlja2VyX195ZWFyLXRleHQtLXNlbGVjdGVkLFxuICAgIC5yZWFjdC1kYXRlcGlja2VyX195ZWFyLXRleHQtLWluLXNlbGVjdGluZy1yYW5nZSxcbiAgICAucmVhY3QtZGF0ZXBpY2tlcl9feWVhci10ZXh0LS1pbi1yYW5nZSxcbiAgICAucmVhY3QtZGF0ZXBpY2tlcl9fZGF5LS1rZXlib2FyZC1zZWxlY3RlZCxcbiAgICAucmVhY3QtZGF0ZXBpY2tlcl9fbW9udGgtdGV4dC0ta2V5Ym9hcmQtc2VsZWN0ZWQsXG4gICAgLnJlYWN0LWRhdGVwaWNrZXJfX3F1YXJ0ZXItdGV4dC0ta2V5Ym9hcmQtc2VsZWN0ZWQsXG4gICAgLnJlYWN0LWRhdGVwaWNrZXJfX3llYXItdGV4dC0ta2V5Ym9hcmQtc2VsZWN0ZWQge1xuICAgICAgYm9yZGVyLXJhZGl1czogJHtlLmJvcmRlclJhZGl1cy5iYXNlfTtcbiAgICAgIGJhY2tncm91bmQtY29sb3I6ICR7ZS5jb2xvcnMuYmFja2dyb3VuZHMuYmdIb3ZlclNlY29uZGFyeX07XG4gICAgICBjb2xvcjogJHtlLmNvbG9ycy5idXR0b25UZXh0LmJ1dHRvblRleHRQcmltYXJ5UHJlc3NlZH07XG5cbiAgICAgICY6aG92ZXIge1xuICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAke2UuY29sb3JzLmJhY2tncm91bmRzLmJnSG92ZXJTZWNvbmRhcnl9O1xuICAgICAgICBjb2xvcjogJHtlLmNvbG9ycy5idXR0b25UZXh0LmJ1dHRvblRleHRQcmltYXJ5UHJlc3NlZH07XG4gICAgICB9XG4gICAgfVxuXG4gICAgLnJlYWN0LWRhdGVwaWNrZXItcG9wcGVyW2RhdGEtcGxhY2VtZW50Xj0nYm90dG9tJ11cbiAgICAgIC5yZWFjdC1kYXRlcGlja2VyX190cmlhbmdsZSxcbiAgICAucmVhY3QtZGF0ZXBpY2tlci1wb3BwZXJbZGF0YS1wbGFjZW1lbnRePSd0b3AnXSAucmVhY3QtZGF0ZXBpY2tlcl9fdHJpYW5nbGUsXG4gICAgLnJlYWN0LWRhdGVwaWNrZXJfX3llYXItcmVhZC12aWV3LS1kb3duLWFycm93LFxuICAgIC5yZWFjdC1kYXRlcGlja2VyX19tb250aC1yZWFkLXZpZXctLWRvd24tYXJyb3csXG4gICAgLnJlYWN0LWRhdGVwaWNrZXJfX21vbnRoLXllYXItcmVhZC12aWV3LS1kb3duLWFycm93IHtcbiAgICAgIG1hcmdpbi1sZWZ0OiAtOHB4O1xuICAgICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgIH1cblxuICAgIC5yZWFjdC1kYXRlcGlja2VyLXBvcHBlcltkYXRhLXBsYWNlbWVudF49J2JvdHRvbSddXG4gICAgICAucmVhY3QtZGF0ZXBpY2tlcl9fdHJpYW5nbGUsXG4gICAgLnJlYWN0LWRhdGVwaWNrZXItcG9wcGVyW2RhdGEtcGxhY2VtZW50Xj0ndG9wJ10gLnJlYWN0LWRhdGVwaWNrZXJfX3RyaWFuZ2xlLFxuICAgIC5yZWFjdC1kYXRlcGlja2VyX195ZWFyLXJlYWQtdmlldy0tZG93bi1hcnJvdyxcbiAgICAucmVhY3QtZGF0ZXBpY2tlcl9fbW9udGgtcmVhZC12aWV3LS1kb3duLWFycm93LFxuICAgIC5yZWFjdC1kYXRlcGlja2VyX19tb250aC15ZWFyLXJlYWQtdmlldy0tZG93bi1hcnJvdyxcbiAgICAucmVhY3QtZGF0ZXBpY2tlci1wb3BwZXJbZGF0YS1wbGFjZW1lbnRePSdib3R0b20nXVxuICAgICAgLnJlYWN0LWRhdGVwaWNrZXJfX3RyaWFuZ2xlOjpiZWZvcmUsXG4gICAgLnJlYWN0LWRhdGVwaWNrZXItcG9wcGVyW2RhdGEtcGxhY2VtZW50Xj0ndG9wJ11cbiAgICAgIC5yZWFjdC1kYXRlcGlja2VyX190cmlhbmdsZTo6YmVmb3JlLFxuICAgIC5yZWFjdC1kYXRlcGlja2VyX195ZWFyLXJlYWQtdmlldy0tZG93bi1hcnJvdzo6YmVmb3JlLFxuICAgIC5yZWFjdC1kYXRlcGlja2VyX19tb250aC1yZWFkLXZpZXctLWRvd24tYXJyb3c6OmJlZm9yZSxcbiAgICAucmVhY3QtZGF0ZXBpY2tlcl9fbW9udGgteWVhci1yZWFkLXZpZXctLWRvd24tYXJyb3c6OmJlZm9yZSB7XG4gICAgICBib3gtc2l6aW5nOiBjb250ZW50LWJveDtcbiAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICAgIGJvcmRlcjogOHB4IHNvbGlkIHRyYW5zcGFyZW50O1xuICAgICAgaGVpZ2h0OiAwO1xuICAgICAgd2lkdGg6IDFweDtcbiAgICB9XG5cbiAgICAucmVhY3QtZGF0ZXBpY2tlci1wb3BwZXJbZGF0YS1wbGFjZW1lbnRePSdib3R0b20nXVxuICAgICAgLnJlYWN0LWRhdGVwaWNrZXJfX3RyaWFuZ2xlOjpiZWZvcmUsXG4gICAgLnJlYWN0LWRhdGVwaWNrZXItcG9wcGVyW2RhdGEtcGxhY2VtZW50Xj0ndG9wJ11cbiAgICAgIC5yZWFjdC1kYXRlcGlja2VyX190cmlhbmdsZTo6YmVmb3JlLFxuICAgIC5yZWFjdC1kYXRlcGlja2VyX195ZWFyLXJlYWQtdmlldy0tZG93bi1hcnJvdzo6YmVmb3JlLFxuICAgIC5yZWFjdC1kYXRlcGlja2VyX19tb250aC1yZWFkLXZpZXctLWRvd24tYXJyb3c6OmJlZm9yZSxcbiAgICAucmVhY3QtZGF0ZXBpY2tlcl9fbW9udGgteWVhci1yZWFkLXZpZXctLWRvd24tYXJyb3c6OmJlZm9yZSB7XG4gICAgICBjb250ZW50OiAnJztcbiAgICAgIHotaW5kZXg6IC0xO1xuICAgICAgYm9yZGVyLXdpZHRoOiA4cHg7XG4gICAgICBsZWZ0OiAtOHB4O1xuICAgICAgYm9yZGVyLWJvdHRvbS1jb2xvcjogJHtlLmNvbG9ycy5ibGFja307XG4gICAgfVxuXG4gICAgLnJlYWN0LWRhdGVwaWNrZXItcG9wcGVyW2RhdGEtcGxhY2VtZW50Xj0nYm90dG9tJ11cbiAgICAgIC5yZWFjdC1kYXRlcGlja2VyX190cmlhbmdsZSB7XG4gICAgICB0b3A6IDA7XG4gICAgICBtYXJnaW4tdG9wOiAtOHB4O1xuICAgIH1cblxuICAgIC5yZWFjdC1kYXRlcGlja2VyLXBvcHBlcltkYXRhLXBsYWNlbWVudF49J2JvdHRvbSddXG4gICAgICAucmVhY3QtZGF0ZXBpY2tlcl9fdHJpYW5nbGUsXG4gICAgLnJlYWN0LWRhdGVwaWNrZXItcG9wcGVyW2RhdGEtcGxhY2VtZW50Xj0nYm90dG9tJ11cbiAgICAgIC5yZWFjdC1kYXRlcGlja2VyX190cmlhbmdsZTo6YmVmb3JlIHtcbiAgICAgIGJvcmRlci10b3A6IG5vbmU7XG4gICAgICBib3JkZXItYm90dG9tLWNvbG9yOiAke2UuY29sb3JzLndoaXRlfTtcbiAgICB9XG5cbiAgICAucmVhY3QtZGF0ZXBpY2tlci1wb3BwZXJbZGF0YS1wbGFjZW1lbnRePSdib3R0b20nXVxuICAgICAgLnJlYWN0LWRhdGVwaWNrZXJfX3RyaWFuZ2xlOjpiZWZvcmUge1xuICAgICAgdG9wOiAtMXB4O1xuICAgICAgYm9yZGVyLWJvdHRvbS1jb2xvcjogJHtlLmNvbG9ycy53aGl0ZX07XG4gICAgfVxuXG4gICAgLnJlYWN0LWRhdGVwaWNrZXItcG9wcGVyW2RhdGEtcGxhY2VtZW50Xj0ndG9wJ10gLnJlYWN0LWRhdGVwaWNrZXJfX3RyaWFuZ2xlLFxuICAgIC5yZWFjdC1kYXRlcGlja2VyX195ZWFyLXJlYWQtdmlldy0tZG93bi1hcnJvdyxcbiAgICAucmVhY3QtZGF0ZXBpY2tlcl9fbW9udGgtcmVhZC12aWV3LS1kb3duLWFycm93LFxuICAgIC5yZWFjdC1kYXRlcGlja2VyX19tb250aC15ZWFyLXJlYWQtdmlldy0tZG93bi1hcnJvdyB7XG4gICAgICBib3R0b206IDA7XG4gICAgICBtYXJnaW4tYm90dG9tOiAtOHB4O1xuICAgIH1cblxuICAgIC5yZWFjdC1kYXRlcGlja2VyLXBvcHBlcltkYXRhLXBsYWNlbWVudF49J3RvcCddIC5yZWFjdC1kYXRlcGlja2VyX190cmlhbmdsZSxcbiAgICAucmVhY3QtZGF0ZXBpY2tlcl9feWVhci1yZWFkLXZpZXctLWRvd24tYXJyb3csXG4gICAgLnJlYWN0LWRhdGVwaWNrZXJfX21vbnRoLXJlYWQtdmlldy0tZG93bi1hcnJvdyxcbiAgICAucmVhY3QtZGF0ZXBpY2tlcl9fbW9udGgteWVhci1yZWFkLXZpZXctLWRvd24tYXJyb3csXG4gICAgLnJlYWN0LWRhdGVwaWNrZXItcG9wcGVyW2RhdGEtcGxhY2VtZW50Xj0ndG9wJ11cbiAgICAgIC5yZWFjdC1kYXRlcGlja2VyX190cmlhbmdsZTo6YmVmb3JlLFxuICAgIC5yZWFjdC1kYXRlcGlja2VyX195ZWFyLXJlYWQtdmlldy0tZG93bi1hcnJvdzo6YmVmb3JlLFxuICAgIC5yZWFjdC1kYXRlcGlja2VyX19tb250aC1yZWFkLXZpZXctLWRvd24tYXJyb3c6OmJlZm9yZSxcbiAgICAucmVhY3QtZGF0ZXBpY2tlcl9fbW9udGgteWVhci1yZWFkLXZpZXctLWRvd24tYXJyb3c6OmJlZm9yZSB7XG4gICAgICBib3JkZXItYm90dG9tOiBub25lO1xuICAgICAgYm9yZGVyLXRvcC1jb2xvcjogJHtlLmNvbG9ycy53aGl0ZX07XG4gICAgfVxuXG4gICAgLnJlYWN0LWRhdGVwaWNrZXItcG9wcGVyW2RhdGEtcGxhY2VtZW50Xj0ndG9wJ11cbiAgICAgIC5yZWFjdC1kYXRlcGlja2VyX190cmlhbmdsZTo6YmVmb3JlLFxuICAgIC5yZWFjdC1kYXRlcGlja2VyX195ZWFyLXJlYWQtdmlldy0tZG93bi1hcnJvdzo6YmVmb3JlLFxuICAgIC5yZWFjdC1kYXRlcGlja2VyX19tb250aC1yZWFkLXZpZXctLWRvd24tYXJyb3c6OmJlZm9yZSxcbiAgICAucmVhY3QtZGF0ZXBpY2tlcl9fbW9udGgteWVhci1yZWFkLXZpZXctLWRvd24tYXJyb3c6OmJlZm9yZSB7XG4gICAgICBib3R0b206IC0xcHg7XG4gICAgICBib3JkZXItdG9wLWNvbG9yOiAke2UuY29sb3JzLndoaXRlfTtcbiAgICB9XG4gICAgLnJlYWN0LWRhdGVwaWNrZXItLXRpbWUtb25seSAucmVhY3QtZGF0ZXBpY2tlcl9fdHJpYW5nbGUge1xuICAgICAgbGVmdDogMzVweDtcbiAgICB9XG5cbiAgICAucmVhY3QtZGF0ZXBpY2tlci0tdGltZS1vbmx5IC5yZWFjdC1kYXRlcGlja2VyX190aW1lLWNvbnRhaW5lciB7XG4gICAgICBib3JkZXItbGVmdDogMDtcbiAgICB9XG5cbiAgICAucmVhY3QtZGF0ZXBpY2tlcl9feWVhci1vcHRpb246Zmlyc3Qtb2YtdHlwZSxcbiAgICAucmVhY3QtZGF0ZXBpY2tlcl9fbW9udGgtb3B0aW9uOmZpcnN0LW9mLXR5cGUsXG4gICAgLnJlYWN0LWRhdGVwaWNrZXJfX21vbnRoLXllYXItb3B0aW9uOmZpcnN0LW9mLXR5cGUge1xuICAgICAgYm9yZGVyLXRvcC1sZWZ0LXJhZGl1czogJHtlLmJvcmRlclJhZGl1cy5iYXNlfTtcbiAgICAgIGJvcmRlci10b3AtcmlnaHQtcmFkaXVzOiAke2UuYm9yZGVyUmFkaXVzLmJhc2V9O1xuICAgIH1cblxuICAgIC5yZWFjdC1kYXRlcGlja2VyLS10aW1lLW9ubHkgLnJlYWN0LWRhdGVwaWNrZXJfX3RpbWUsXG4gICAgLnJlYWN0LWRhdGVwaWNrZXItLXRpbWUtb25seSAucmVhY3QtZGF0ZXBpY2tlcl9fdGltZS1ib3gge1xuICAgICAgYm9yZGVyLWJvdHRvbS1sZWZ0LXJhZGl1czogJHtlLmJvcmRlclJhZGl1cy5iYXNlfTtcbiAgICAgIGJvcmRlci1ib3R0b20tcmlnaHQtcmFkaXVzOiAke2UuYm9yZGVyUmFkaXVzLmJhc2V9O1xuICAgIH1cblxuICAgIC5yZWFjdC1kYXRlcGlja2VyX19kYXktLXRvZGF5LFxuICAgIC5yZWFjdC1kYXRlcGlja2VyX19tb250aC10ZXh0LS10b2RheSxcbiAgICAucmVhY3QtZGF0ZXBpY2tlcl9fcXVhcnRlci10ZXh0LS10b2RheSxcbiAgICAucmVhY3QtZGF0ZXBpY2tlcl9feWVhci10ZXh0LS10b2RheSB7XG4gICAgICBmb250LXdlaWdodDogJHtlLmZvbnRXZWlnaHQucmVndWxhcn07XG4gICAgfVxuXG4gICAgLnJlYWN0LWRhdGVwaWNrZXItLXRpbWUtb25seSAucmVhY3QtZGF0ZXBpY2tlcl9fdHJpYW5nbGUge1xuICAgICAgbGVmdDogMzVweDtcbiAgICB9XG5cbiAgICAucmVhY3QtZGF0ZXBpY2tlci0tdGltZS1vbmx5IC5yZWFjdC1kYXRlcGlja2VyX190aW1lLWNvbnRhaW5lciB7XG4gICAgICBib3JkZXItbGVmdDogMDtcbiAgICB9XG5cbiAgICAucmVhY3QtZGF0ZXBpY2tlcl9fdHJpYW5nbGUge1xuICAgICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgICAgbGVmdDogNTBweDtcbiAgICB9XG5cbiAgICAucmVhY3QtZGF0ZXBpY2tlci1wb3BwZXIge1xuICAgICAgei1pbmRleDogMTA7XG4gICAgfVxuXG4gICAgLnJlYWN0LWRhdGVwaWNrZXItcG9wcGVyW2RhdGEtcGxhY2VtZW50Xj0nYm90dG9tJ10ge1xuICAgICAgbWFyZ2luLXRvcDogMTBweDtcbiAgICB9XG5cbiAgICAucmVhY3QtZGF0ZXBpY2tlci1wb3BwZXJbZGF0YS1wbGFjZW1lbnQ9J2JvdHRvbS1lbmQnXVxuICAgICAgLnJlYWN0LWRhdGVwaWNrZXJfX3RyaWFuZ2xlLFxuICAgIC5yZWFjdC1kYXRlcGlja2VyLXBvcHBlcltkYXRhLXBsYWNlbWVudD0ndG9wLWVuZCddXG4gICAgICAucmVhY3QtZGF0ZXBpY2tlcl9fdHJpYW5nbGUge1xuICAgICAgbGVmdDogYXV0bztcbiAgICAgIHJpZ2h0OiA1MHB4O1xuICAgIH1cblxuICAgIC5yZWFjdC1kYXRlcGlja2VyLXBvcHBlcltkYXRhLXBsYWNlbWVudF49J3RvcCddIHtcbiAgICAgIG1hcmdpbi1ib3R0b206IDEwcHg7XG4gICAgfVxuXG4gICAgLnJlYWN0LWRhdGVwaWNrZXItcG9wcGVyW2RhdGEtcGxhY2VtZW50Xj0ncmlnaHQnXSB7XG4gICAgICBtYXJnaW4tbGVmdDogOHB4O1xuICAgIH1cblxuICAgIC5yZWFjdC1kYXRlcGlja2VyLXBvcHBlcltkYXRhLXBsYWNlbWVudF49J3JpZ2h0J11cbiAgICAgIC5yZWFjdC1kYXRlcGlja2VyX190cmlhbmdsZSB7XG4gICAgICBsZWZ0OiBhdXRvO1xuICAgICAgcmlnaHQ6IDQycHg7XG4gICAgfVxuXG4gICAgLnJlYWN0LWRhdGVwaWNrZXItcG9wcGVyW2RhdGEtcGxhY2VtZW50Xj0nbGVmdCddIHtcbiAgICAgIG1hcmdpbi1yaWdodDogOHB4O1xuICAgIH1cblxuICAgIC5yZWFjdC1kYXRlcGlja2VyLXBvcHBlcltkYXRhLXBsYWNlbWVudF49J2xlZnQnXVxuICAgICAgLnJlYWN0LWRhdGVwaWNrZXJfX3RyaWFuZ2xlIHtcbiAgICAgIGxlZnQ6IDQycHg7XG4gICAgICByaWdodDogYXV0bztcbiAgICB9XG4gICAgLnJlYWN0LWRhdGVwaWNrZXJfX2hlYWRlci0tdGltZSB7XG4gICAgICBwYWRkaW5nLWJvdHRvbTogOHB4O1xuICAgICAgcGFkZGluZy1sZWZ0OiA1cHg7XG4gICAgICBwYWRkaW5nLXJpZ2h0OiA1cHg7XG4gICAgfVxuXG4gICAgLnJlYWN0LWRhdGVwaWNrZXJfX2hlYWRlci0tdGltZTpub3QoLnJlYWN0LWRhdGVwaWNrZXJfX2hlYWRlci0tdGltZS0tb25seSkge1xuICAgICAgYm9yZGVyLXRvcC1sZWZ0LXJhZGl1czogMDtcbiAgICB9XG5cbiAgICAucmVhY3QtZGF0ZXBpY2tlcl9feWVhci1kcm9wZG93bi1jb250YWluZXItLXNlbGVjdCxcbiAgICAucmVhY3QtZGF0ZXBpY2tlcl9fbW9udGgtZHJvcGRvd24tY29udGFpbmVyLS1zZWxlY3QsXG4gICAgLnJlYWN0LWRhdGVwaWNrZXJfX21vbnRoLXllYXItZHJvcGRvd24tY29udGFpbmVyLS1zZWxlY3QsXG4gICAgLnJlYWN0LWRhdGVwaWNrZXJfX3llYXItZHJvcGRvd24tY29udGFpbmVyLS1zY3JvbGwsXG4gICAgLnJlYWN0LWRhdGVwaWNrZXJfX21vbnRoLWRyb3Bkb3duLWNvbnRhaW5lci0tc2Nyb2xsLFxuICAgIC5yZWFjdC1kYXRlcGlja2VyX19tb250aC15ZWFyLWRyb3Bkb3duLWNvbnRhaW5lci0tc2Nyb2xsIHtcbiAgICAgIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgICAgIG1hcmdpbjogMCAycHg7XG4gICAgfVxuXG4gICAgLnJlYWN0LWRhdGVwaWNrZXJfX2N1cnJlbnQtbW9udGgsXG4gICAgLnJlYWN0LWRhdGVwaWNrZXItdGltZV9faGVhZGVyLFxuICAgIC5yZWFjdC1kYXRlcGlja2VyLXllYXItaGVhZGVyIHtcbiAgICAgIG1hcmdpbi10b3A6IDA7XG4gICAgICBjb2xvcjogJHtlLmNvbG9ycy5ibGFja307XG4gICAgICBmb250LXdlaWdodDogJHtlLmZvbnRXZWlnaHQuYm9sZH07XG4gICAgICBmb250LXNpemU6ICR7ZS50eXBvZ3JhcGh5LnQxNn07XG4gICAgfVxuXG4gICAgLnJlYWN0LWRhdGVwaWNrZXItdGltZV9faGVhZGVyIHtcbiAgICAgIHRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzO1xuICAgICAgd2hpdGUtc3BhY2U6IG5vd3JhcDtcbiAgICAgIG92ZXJmbG93OiBoaWRkZW47XG4gICAgfVxuXG4gICAgLnJlYWN0LWRhdGVwaWNrZXJfX25hdmlnYXRpb24ge1xuICAgICAgYmFja2dyb3VuZDogbm9uZTtcbiAgICAgIGxpbmUtaGVpZ2h0OiAxLjdyZW07XG4gICAgICB0ZXh0LWFsaWduOiBjZW50ZXI7XG4gICAgICBjdXJzb3I6IHBvaW50ZXI7XG4gICAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgICB0b3A6IDEwcHg7XG4gICAgICBwYWRkaW5nOiAwO1xuICAgICAgYm9yZGVyOiAwLjQ1cmVtIHNvbGlkIHRyYW5zcGFyZW50O1xuICAgICAgei1pbmRleDogMTtcbiAgICAgIGhlaWdodDogMTBweDtcbiAgICAgIHdpZHRoOiAxMHB4O1xuICAgICAgdGV4dC1pbmRlbnQ6IC05OTllbTtcbiAgICAgIG92ZXJmbG93OiBoaWRkZW47XG4gICAgfVxuXG4gICAgLnJlYWN0LWRhdGVwaWNrZXJfX25hdmlnYXRpb24tLXByZXZpb3VzIHtcbiAgICAgIGxlZnQ6IDEwcHg7XG4gICAgICBib3JkZXItcmlnaHQtY29sb3I6ICR7ZS5jb2xvcnMuYmxhY2t9O1xuICAgIH1cblxuICAgIC5yZWFjdC1kYXRlcGlja2VyX19uYXZpZ2F0aW9uLS1wcmV2aW91czpob3ZlciB7XG4gICAgICBib3JkZXItcmlnaHQtY29sb3I6ICR7ZS5jb2xvcnMuYmxhY2t9O1xuICAgIH1cblxuICAgIC5yZWFjdC1kYXRlcGlja2VyX19uYXZpZ2F0aW9uLS1wcmV2aW91cy0tZGlzYWJsZWQsXG4gICAgLnJlYWN0LWRhdGVwaWNrZXJfX25hdmlnYXRpb24tLXByZXZpb3VzLS1kaXNhYmxlZDpob3ZlciB7XG4gICAgICBib3JkZXItcmlnaHQtY29sb3I6ICR7ZS5jb2xvcnMuZGFya0dyYXl9O1xuICAgICAgY3Vyc29yOiBkZWZhdWx0O1xuICAgIH1cblxuICAgIC5yZWFjdC1kYXRlcGlja2VyX19uYXZpZ2F0aW9uLS1uZXh0IHtcbiAgICAgIHJpZ2h0OiAxMHB4O1xuICAgICAgYm9yZGVyLWxlZnQtY29sb3I6ICR7ZS5jb2xvcnMuYmxhY2t9O1xuICAgIH1cblxuICAgIC5yZWFjdC1kYXRlcGlja2VyX19uYXZpZ2F0aW9uLS1uZXh0LS13aXRoLXRpbWU6bm90KFxuICAgICAgICAucmVhY3QtZGF0ZXBpY2tlcl9fbmF2aWdhdGlvbi0tbmV4dC0td2l0aC10b2RheS1idXR0b25cbiAgICAgICkge1xuICAgICAgcmlnaHQ6IDk1cHg7XG4gICAgfVxuXG4gICAgLnJlYWN0LWRhdGVwaWNrZXJfX25hdmlnYXRpb24tLW5leHQ6aG92ZXIge1xuICAgICAgYm9yZGVyLWxlZnQtY29sb3I6ICR7ZS5jb2xvcnMuYmxhY2t9O1xuICAgIH1cblxuICAgIC5yZWFjdC1kYXRlcGlja2VyX19uYXZpZ2F0aW9uLS1uZXh0LS1kaXNhYmxlZCxcbiAgICAucmVhY3QtZGF0ZXBpY2tlcl9fbmF2aWdhdGlvbi0tbmV4dC0tZGlzYWJsZWQ6aG92ZXIge1xuICAgICAgYm9yZGVyLWxlZnQtY29sb3I6ICR7ZS5jb2xvcnMuZGFya0dyYXl9O1xuICAgICAgY3Vyc29yOiBkZWZhdWx0O1xuICAgIH1cblxuICAgIC5yZWFjdC1kYXRlcGlja2VyX19uYXZpZ2F0aW9uLS15ZWFycyB7XG4gICAgICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gICAgICB0b3A6IDA7XG4gICAgICBkaXNwbGF5OiBibG9jaztcbiAgICAgIG1hcmdpbi1sZWZ0OiBhdXRvO1xuICAgICAgbWFyZ2luLXJpZ2h0OiBhdXRvO1xuICAgIH1cblxuICAgIC5yZWFjdC1kYXRlcGlja2VyX19uYXZpZ2F0aW9uLS15ZWFycy1wcmV2aW91cyB7XG4gICAgICB0b3A6IDRweDtcbiAgICAgIGJvcmRlci10b3AtY29sb3I6ICR7ZS5jb2xvcnMuYmxhY2t9O1xuICAgIH1cblxuICAgIC5yZWFjdC1kYXRlcGlja2VyX19uYXZpZ2F0aW9uLS15ZWFycy1wcmV2aW91czpob3ZlciB7XG4gICAgICBib3JkZXItdG9wLWNvbG9yOiAke2UuY29sb3JzLmJsYWNrfTtcbiAgICB9XG5cbiAgICAucmVhY3QtZGF0ZXBpY2tlcl9fbmF2aWdhdGlvbi0teWVhcnMtdXBjb21pbmcge1xuICAgICAgdG9wOiAtNHB4O1xuICAgICAgYm9yZGVyLWJvdHRvbS1jb2xvcjogJHtlLmNvbG9ycy5ibGFja307XG4gICAgfVxuXG4gICAgLnJlYWN0LWRhdGVwaWNrZXJfX25hdmlnYXRpb24tLXllYXJzLXVwY29taW5nOmhvdmVyIHtcbiAgICAgIGJvcmRlci1ib3R0b20tY29sb3I6ICR7ZS5jb2xvcnMuYmxhY2t9O1xuICAgIH1cblxuICAgIC5yZWFjdC1kYXRlcGlja2VyX19tb250aC1jb250YWluZXIge1xuICAgICAgZmxvYXQ6IGxlZnQ7XG4gICAgfVxuXG4gICAgLnJlYWN0LWRhdGVwaWNrZXJfX3llYXIge1xuICAgICAgbWFyZ2luOiAwLjRyZW07XG4gICAgICB0ZXh0LWFsaWduOiBjZW50ZXI7XG4gICAgfVxuXG4gICAgLnJlYWN0LWRhdGVwaWNrZXJfX3llYXItd3JhcHBlciB7XG4gICAgICBkaXNwbGF5OiBmbGV4O1xuICAgICAgZmxleC13cmFwOiB3cmFwO1xuICAgICAgbWF4LXdpZHRoOiAxODBweDtcbiAgICB9XG5cbiAgICAucmVhY3QtZGF0ZXBpY2tlcl9feWVhciAucmVhY3QtZGF0ZXBpY2tlcl9feWVhci10ZXh0IHtcbiAgICAgIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgICAgIHdpZHRoOiA0cmVtO1xuICAgICAgbWFyZ2luOiAycHg7XG4gICAgfVxuXG4gICAgLnJlYWN0LWRhdGVwaWNrZXJfX21vbnRoIHtcbiAgICAgIHBhZGRpbmctYm90dG9tOiAxcmVtO1xuICAgICAgdGV4dC1hbGlnbjogY2VudGVyO1xuICAgIH1cblxuICAgIC5yZWFjdC1kYXRlcGlja2VyX19tb250aCAucmVhY3QtZGF0ZXBpY2tlcl9fbW9udGgtdGV4dCxcbiAgICAucmVhY3QtZGF0ZXBpY2tlcl9fbW9udGggLnJlYWN0LWRhdGVwaWNrZXJfX3F1YXJ0ZXItdGV4dCB7XG4gICAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG4gICAgICB3aWR0aDogNHJlbTtcbiAgICAgIG1hcmdpbjogMnB4O1xuICAgIH1cblxuICAgIC5yZWFjdC1kYXRlcGlja2VyX19pbnB1dC10aW1lLWNvbnRhaW5lciB7XG4gICAgICBjbGVhcjogYm90aDtcbiAgICAgIHdpZHRoOiAxMDAlO1xuICAgICAgZmxvYXQ6IGxlZnQ7XG4gICAgICBtYXJnaW46IDVweCAwIDEwcHggMTVweDtcbiAgICAgIHRleHQtYWxpZ246IGxlZnQ7XG4gICAgfVxuXG4gICAgLnJlYWN0LWRhdGVwaWNrZXJfX2lucHV0LXRpbWUtY29udGFpbmVyIC5yZWFjdC1kYXRlcGlja2VyLXRpbWVfX2NhcHRpb24ge1xuICAgICAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuICAgIH1cblxuICAgIC5yZWFjdC1kYXRlcGlja2VyX19pbnB1dC10aW1lLWNvbnRhaW5lclxuICAgICAgLnJlYWN0LWRhdGVwaWNrZXItdGltZV9faW5wdXQtY29udGFpbmVyIHtcbiAgICAgIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgICB9XG5cbiAgICAucmVhY3QtZGF0ZXBpY2tlcl9faW5wdXQtdGltZS1jb250YWluZXJcbiAgICAgIC5yZWFjdC1kYXRlcGlja2VyLXRpbWVfX2lucHV0LWNvbnRhaW5lclxuICAgICAgLnJlYWN0LWRhdGVwaWNrZXItdGltZV9faW5wdXQge1xuICAgICAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuICAgICAgbWFyZ2luLWxlZnQ6IDEwcHg7XG4gICAgfVxuXG4gICAgLnJlYWN0LWRhdGVwaWNrZXJfX2lucHV0LXRpbWUtY29udGFpbmVyXG4gICAgICAucmVhY3QtZGF0ZXBpY2tlci10aW1lX19pbnB1dC1jb250YWluZXJcbiAgICAgIC5yZWFjdC1kYXRlcGlja2VyLXRpbWVfX2lucHV0XG4gICAgICBpbnB1dCB7XG4gICAgICB3aWR0aDogODVweDtcbiAgICB9XG5cbiAgICAucmVhY3QtZGF0ZXBpY2tlcl9faW5wdXQtdGltZS1jb250YWluZXJcbiAgICAgIC5yZWFjdC1kYXRlcGlja2VyLXRpbWVfX2lucHV0LWNvbnRhaW5lclxuICAgICAgLnJlYWN0LWRhdGVwaWNrZXItdGltZV9faW5wdXRcbiAgICAgIGlucHV0W3R5cGU9J3RpbWUnXTo6LXdlYmtpdC1pbm5lci1zcGluLWJ1dHRvbixcbiAgICAucmVhY3QtZGF0ZXBpY2tlcl9faW5wdXQtdGltZS1jb250YWluZXJcbiAgICAgIC5yZWFjdC1kYXRlcGlja2VyLXRpbWVfX2lucHV0LWNvbnRhaW5lclxuICAgICAgLnJlYWN0LWRhdGVwaWNrZXItdGltZV9faW5wdXRcbiAgICAgIGlucHV0W3R5cGU9J3RpbWUnXTo6LXdlYmtpdC1vdXRlci1zcGluLWJ1dHRvbiB7XG4gICAgICAtd2Via2l0LWFwcGVhcmFuY2U6IG5vbmU7XG4gICAgICBtYXJnaW46IDA7XG4gICAgfVxuXG4gICAgLnJlYWN0LWRhdGVwaWNrZXJfX2lucHV0LXRpbWUtY29udGFpbmVyXG4gICAgICAucmVhY3QtZGF0ZXBpY2tlci10aW1lX19pbnB1dC1jb250YWluZXJcbiAgICAgIC5yZWFjdC1kYXRlcGlja2VyLXRpbWVfX2lucHV0XG4gICAgICBpbnB1dFt0eXBlPSd0aW1lJ10ge1xuICAgICAgLW1vei1hcHBlYXJhbmNlOiB0ZXh0ZmllbGQ7XG4gICAgfVxuXG4gICAgLnJlYWN0LWRhdGVwaWNrZXJfX2lucHV0LXRpbWUtY29udGFpbmVyXG4gICAgICAucmVhY3QtZGF0ZXBpY2tlci10aW1lX19pbnB1dC1jb250YWluZXJcbiAgICAgIC5yZWFjdC1kYXRlcGlja2VyLXRpbWVfX2RlbGltaXRlciB7XG4gICAgICBtYXJnaW4tbGVmdDogNXB4O1xuICAgICAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuICAgIH1cblxuICAgIC5yZWFjdC1kYXRlcGlja2VyX190aW1lLWNvbnRhaW5lciB7XG4gICAgICBmbG9hdDogcmlnaHQ7XG4gICAgICBib3JkZXItbGVmdDogbm9uZTtcbiAgICAgIHdpZHRoOiA4NXB4O1xuICAgIH1cblxuICAgIC5yZWFjdC1kYXRlcGlja2VyX190aW1lLWNvbnRhaW5lci0td2l0aC10b2RheS1idXR0b24ge1xuICAgICAgZGlzcGxheTogaW5saW5lO1xuICAgICAgYm9yZGVyOiAxcHggc29saWQgJHtlLmNvbG9ycy5ibGFja307XG4gICAgICBib3JkZXItcmFkaXVzOiAwLjNyZW07XG4gICAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgICByaWdodDogLTcycHg7XG4gICAgICB0b3A6IDA7XG4gICAgfVxuICAgIC5yZWFjdC1kYXRlcGlja2VyX190b2RheS1idXR0b24ge1xuICAgICAgYm9yZGVyLXRvcDogbm9uZSAhaW1wb3J0YW50O1xuICAgICAgdGV4dC1hbGlnbjogbGVmdCAhaW1wb3J0YW50O1xuICAgIH1cblxuICAgIC5yZWFjdC1kYXRlcGlja2VyX190aW1lLWNvbnRhaW5lciAucmVhY3QtZGF0ZXBpY2tlcl9fdGltZSB7XG4gICAgICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gICAgICBiYWNrZ3JvdW5kOiAke2UuY29sb3JzLndoaXRlfTtcbiAgICAgIGJvcmRlci1ib3R0b20tcmlnaHQtcmFkaXVzOiAke2UuYm9yZGVyUmFkaXVzLmJhc2V9O1xuICAgIH1cblxuICAgIC5yZWFjdC1kYXRlcGlja2VyX190aW1lLWNvbnRhaW5lclxuICAgICAgLnJlYWN0LWRhdGVwaWNrZXJfX3RpbWVcbiAgICAgIC5yZWFjdC1kYXRlcGlja2VyX190aW1lLWJveCB7XG4gICAgICB3aWR0aDogODVweDtcbiAgICAgIG92ZXJmbG93LXg6IGhpZGRlbjtcbiAgICAgIG1hcmdpbjogMCBhdXRvO1xuICAgICAgdGV4dC1hbGlnbjogY2VudGVyO1xuICAgICAgYm9yZGVyLWJvdHRvbS1yaWdodC1yYWRpdXM6ICR7ZS5ib3JkZXJSYWRpdXMuYmFzZX07XG4gICAgfVxuXG4gICAgLnJlYWN0LWRhdGVwaWNrZXJfX3RpbWUtY29udGFpbmVyXG4gICAgICAucmVhY3QtZGF0ZXBpY2tlcl9fdGltZVxuICAgICAgLnJlYWN0LWRhdGVwaWNrZXJfX3RpbWUtYm94XG4gICAgICB1bC5yZWFjdC1kYXRlcGlja2VyX190aW1lLWxpc3Qge1xuICAgICAgbGlzdC1zdHlsZTogbm9uZTtcbiAgICAgIG1hcmdpbjogMDtcbiAgICAgIGhlaWdodDogY2FsYygxOTVweCArICgxLjdyZW0gLyAyKSk7XG4gICAgICBvdmVyZmxvdy15OiBzY3JvbGw7XG4gICAgICBwYWRkaW5nLXJpZ2h0OiAwO1xuICAgICAgcGFkZGluZy1sZWZ0OiAwO1xuICAgICAgd2lkdGg6IDEwMCU7XG4gICAgICBib3gtc2l6aW5nOiBjb250ZW50LWJveDtcbiAgICB9XG5cbiAgICAucmVhY3QtZGF0ZXBpY2tlcl9fdGltZS1jb250YWluZXJcbiAgICAgIC5yZWFjdC1kYXRlcGlja2VyX190aW1lXG4gICAgICAucmVhY3QtZGF0ZXBpY2tlcl9fdGltZS1ib3hcbiAgICAgIHVsLnJlYWN0LWRhdGVwaWNrZXJfX3RpbWUtbGlzdFxuICAgICAgbGkucmVhY3QtZGF0ZXBpY2tlcl9fdGltZS1saXN0LWl0ZW0ge1xuICAgICAgaGVpZ2h0OiAzMHB4O1xuICAgICAgcGFkZGluZzogNXB4IDEwcHg7XG4gICAgICB3aGl0ZS1zcGFjZTogbm93cmFwO1xuICAgIH1cblxuICAgIC5yZWFjdC1kYXRlcGlja2VyX190aW1lLWNvbnRhaW5lclxuICAgICAgLnJlYWN0LWRhdGVwaWNrZXJfX3RpbWVcbiAgICAgIC5yZWFjdC1kYXRlcGlja2VyX190aW1lLWJveFxuICAgICAgdWwucmVhY3QtZGF0ZXBpY2tlcl9fdGltZS1saXN0XG4gICAgICBsaS5yZWFjdC1kYXRlcGlja2VyX190aW1lLWxpc3QtaXRlbTpob3ZlciB7XG4gICAgICBjdXJzb3I6IHBvaW50ZXI7XG4gICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAke2UuY29sb3JzLndoaXRlfTtcbiAgICB9XG5cbiAgICAucmVhY3QtZGF0ZXBpY2tlcl9fdGltZS1jb250YWluZXJcbiAgICAgIC5yZWFjdC1kYXRlcGlja2VyX190aW1lXG4gICAgICAucmVhY3QtZGF0ZXBpY2tlcl9fdGltZS1ib3hcbiAgICAgIHVsLnJlYWN0LWRhdGVwaWNrZXJfX3RpbWUtbGlzdFxuICAgICAgbGkucmVhY3QtZGF0ZXBpY2tlcl9fdGltZS1saXN0LWl0ZW0tLXNlbGVjdGVkIHtcbiAgICAgIGJhY2tncm91bmQtY29sb3I6ICR7ZS5jb2xvcnMuYmx1ZX07XG4gICAgICBjb2xvcjogJHtlLmNvbG9ycy53aGl0ZX07XG4gICAgICBmb250LXdlaWdodDogYm9sZDtcbiAgICB9XG5cbiAgICAucmVhY3QtZGF0ZXBpY2tlcl9fdGltZS1jb250YWluZXJcbiAgICAgIC5yZWFjdC1kYXRlcGlja2VyX190aW1lXG4gICAgICAucmVhY3QtZGF0ZXBpY2tlcl9fdGltZS1ib3hcbiAgICAgIHVsLnJlYWN0LWRhdGVwaWNrZXJfX3RpbWUtbGlzdFxuICAgICAgbGkucmVhY3QtZGF0ZXBpY2tlcl9fdGltZS1saXN0LWl0ZW0tLXNlbGVjdGVkOmhvdmVyIHtcbiAgICAgIGJhY2tncm91bmQtY29sb3I6ICR7ZS5jb2xvcnMuYmx1ZX07XG4gICAgfVxuXG4gICAgLnJlYWN0LWRhdGVwaWNrZXJfX3RpbWUtY29udGFpbmVyXG4gICAgICAucmVhY3QtZGF0ZXBpY2tlcl9fdGltZVxuICAgICAgLnJlYWN0LWRhdGVwaWNrZXJfX3RpbWUtYm94XG4gICAgICB1bC5yZWFjdC1kYXRlcGlja2VyX190aW1lLWxpc3RcbiAgICAgIGxpLnJlYWN0LWRhdGVwaWNrZXJfX3RpbWUtbGlzdC1pdGVtLS1kaXNhYmxlZCB7XG4gICAgICBjb2xvcjogJHtlLmNvbG9ycy5kYXJrR3JheX07XG4gICAgfVxuXG4gICAgLnJlYWN0LWRhdGVwaWNrZXJfX3dlZWstbnVtYmVyIHtcbiAgICAgIGNvbG9yOiAke2UuY29sb3JzLmRhcmtHcmF5fTtcbiAgICAgIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgICAgIHdpZHRoOiAxLjdyZW07XG4gICAgICBsaW5lLWhlaWdodDogMS43cmVtO1xuICAgICAgdGV4dC1hbGlnbjogY2VudGVyO1xuICAgICAgbWFyZ2luOiAwLjE2NnJlbTtcbiAgICB9XG5cbiAgICAucmVhY3QtZGF0ZXBpY2tlcl9fd2Vlay1udW1iZXIucmVhY3QtZGF0ZXBpY2tlcl9fd2Vlay1udW1iZXItLWNsaWNrYWJsZSB7XG4gICAgICBjdXJzb3I6IHBvaW50ZXI7XG4gICAgfVxuXG4gICAgLnJlYWN0LWRhdGVwaWNrZXJfX3dlZWstbnVtYmVyLnJlYWN0LWRhdGVwaWNrZXJfX3dlZWstbnVtYmVyLS1jbGlja2FibGU6aG92ZXIge1xuICAgICAgYm9yZGVyLXJhZGl1czogJHtlLmJvcmRlclJhZGl1cy5iYXNlfTtcbiAgICAgIGJhY2tncm91bmQtY29sb3I6ICR7ZS5jb2xvcnMud2hpdGV9O1xuICAgIH1cblxuICAgIC5yZWFjdC1kYXRlcGlja2VyX19kYXktbmFtZXMsXG4gICAgLnJlYWN0LWRhdGVwaWNrZXJfX3dlZWsge1xuICAgICAgd2hpdGUtc3BhY2U6IG5vd3JhcDtcbiAgICAgIHVzZXItc2VsZWN0OiBub25lO1xuICAgIH1cblxuICAgIC5yZWFjdC1kYXRlcGlja2VyX190aW1lLW5hbWUge1xuICAgICAgY29sb3I6ICR7ZS5jb2xvcnMuYmxhY2t9O1xuICAgICAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuICAgICAgd2lkdGg6IDEuN3JlbTtcbiAgICAgIGxpbmUtaGVpZ2h0OiAxLjdyZW07XG4gICAgICB0ZXh0LWFsaWduOiBjZW50ZXI7XG4gICAgICBtYXJnaW46IDAuMTY2cmVtO1xuICAgIH1cblxuICAgIC5yZWFjdC1kYXRlcGlja2VyX19tb250aC0tc2VsZWN0ZWQsXG4gICAgLnJlYWN0LWRhdGVwaWNrZXJfX21vbnRoLS1pbi1zZWxlY3RpbmctcmFuZ2UsXG4gICAgLnJlYWN0LWRhdGVwaWNrZXJfX21vbnRoLS1pbi1yYW5nZSxcbiAgICAucmVhY3QtZGF0ZXBpY2tlcl9fcXVhcnRlci0tc2VsZWN0ZWQsXG4gICAgLnJlYWN0LWRhdGVwaWNrZXJfX3F1YXJ0ZXItLWluLXNlbGVjdGluZy1yYW5nZSxcbiAgICAucmVhY3QtZGF0ZXBpY2tlcl9fcXVhcnRlci0taW4tcmFuZ2Uge1xuICAgICAgYm9yZGVyLXJhZGl1czogJHtlLmJvcmRlclJhZGl1cy5iYXNlfTtcbiAgICAgIGJhY2tncm91bmQtY29sb3I6ICR7ZS5jb2xvcnMuYmx1ZX07XG4gICAgICBjb2xvcjogJHtlLmNvbG9ycy53aGl0ZX07XG4gICAgfVxuXG4gICAgLnJlYWN0LWRhdGVwaWNrZXJfX21vbnRoLS1zZWxlY3RlZDpob3ZlcixcbiAgICAucmVhY3QtZGF0ZXBpY2tlcl9fbW9udGgtLWluLXNlbGVjdGluZy1yYW5nZTpob3ZlcixcbiAgICAucmVhY3QtZGF0ZXBpY2tlcl9fbW9udGgtLWluLXJhbmdlOmhvdmVyLFxuICAgIC5yZWFjdC1kYXRlcGlja2VyX19xdWFydGVyLS1zZWxlY3RlZDpob3ZlcixcbiAgICAucmVhY3QtZGF0ZXBpY2tlcl9fcXVhcnRlci0taW4tc2VsZWN0aW5nLXJhbmdlOmhvdmVyLFxuICAgIC5yZWFjdC1kYXRlcGlja2VyX19xdWFydGVyLS1pbi1yYW5nZTpob3ZlciB7XG4gICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAke2UuY29sb3JzLnNjYW1waX07XG4gICAgfVxuXG4gICAgLnJlYWN0LWRhdGVwaWNrZXJfX21vbnRoLS1kaXNhYmxlZCxcbiAgICAucmVhY3QtZGF0ZXBpY2tlcl9fcXVhcnRlci0tZGlzYWJsZWQge1xuICAgICAgY29sb3I6ICR7ZS5jb2xvcnMuZGFya0dyYXl9O1xuICAgICAgcG9pbnRlci1ldmVudHM6IG5vbmU7XG4gICAgfVxuXG4gICAgLnJlYWN0LWRhdGVwaWNrZXJfX21vbnRoLS1kaXNhYmxlZDpob3ZlcixcbiAgICAucmVhY3QtZGF0ZXBpY2tlcl9fcXVhcnRlci0tZGlzYWJsZWQ6aG92ZXIge1xuICAgICAgY3Vyc29yOiBkZWZhdWx0O1xuICAgICAgYmFja2dyb3VuZC1jb2xvcjogdHJhbnNwYXJlbnQ7XG4gICAgfVxuXG4gICAgLnJlYWN0LWRhdGVwaWNrZXJfX2RheSxcbiAgICAucmVhY3QtZGF0ZXBpY2tlcl9fbW9udGgtdGV4dCxcbiAgICAucmVhY3QtZGF0ZXBpY2tlcl9fcXVhcnRlci10ZXh0LFxuICAgIC5yZWFjdC1kYXRlcGlja2VyX195ZWFyLXRleHQge1xuICAgICAgY3Vyc29yOiBwb2ludGVyO1xuICAgIH1cblxuICAgIC5yZWFjdC1kYXRlcGlja2VyX19tb250aC10ZXh0OmhvdmVyLFxuICAgIC5yZWFjdC1kYXRlcGlja2VyX19xdWFydGVyLXRleHQ6aG92ZXIsXG4gICAgLnJlYWN0LWRhdGVwaWNrZXJfX3llYXItdGV4dDpob3ZlciB7XG4gICAgICBib3JkZXItcmFkaXVzOiAke2UuYm9yZGVyUmFkaXVzLmJhc2V9O1xuICAgICAgYmFja2dyb3VuZC1jb2xvcjogJHtlLmNvbG9ycy53aGl0ZX07XG4gICAgfVxuXG4gICAgLnJlYWN0LWRhdGVwaWNrZXJfX2RheS0taGlnaGxpZ2h0ZWQsXG4gICAgLnJlYWN0LWRhdGVwaWNrZXJfX21vbnRoLXRleHQtLWhpZ2hsaWdodGVkLFxuICAgIC5yZWFjdC1kYXRlcGlja2VyX19xdWFydGVyLXRleHQtLWhpZ2hsaWdodGVkLFxuICAgIC5yZWFjdC1kYXRlcGlja2VyX195ZWFyLXRleHQtLWhpZ2hsaWdodGVkIHtcbiAgICAgIGJvcmRlci1yYWRpdXM6ICR7ZS5ib3JkZXJSYWRpdXMuYmFzZX07XG4gICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAke2UuY29sb3JzLm1lZGl1bVNlYUdyZWVufTtcbiAgICAgIGNvbG9yOiAke2UuY29sb3JzLndoaXRlfTtcbiAgICB9XG5cbiAgICAucmVhY3QtZGF0ZXBpY2tlcl9fZGF5LS1oaWdobGlnaHRlZDpob3ZlcixcbiAgICAucmVhY3QtZGF0ZXBpY2tlcl9fbW9udGgtdGV4dC0taGlnaGxpZ2h0ZWQ6aG92ZXIsXG4gICAgLnJlYWN0LWRhdGVwaWNrZXJfX3F1YXJ0ZXItdGV4dC0taGlnaGxpZ2h0ZWQ6aG92ZXIsXG4gICAgLnJlYWN0LWRhdGVwaWNrZXJfX3llYXItdGV4dC0taGlnaGxpZ2h0ZWQ6aG92ZXIge1xuICAgICAgYmFja2dyb3VuZC1jb2xvcjogJHtlLmNvbG9ycy5tZWRpdW1TZWFHcmVlbn07XG4gICAgfVxuXG4gICAgLnJlYWN0LWRhdGVwaWNrZXJfX2RheS0taGlnaGxpZ2h0ZWQtY3VzdG9tLTEsXG4gICAgLnJlYWN0LWRhdGVwaWNrZXJfX21vbnRoLXRleHQtLWhpZ2hsaWdodGVkLWN1c3RvbS0xLFxuICAgIC5yZWFjdC1kYXRlcGlja2VyX19xdWFydGVyLXRleHQtLWhpZ2hsaWdodGVkLWN1c3RvbS0xLFxuICAgIC5yZWFjdC1kYXRlcGlja2VyX195ZWFyLXRleHQtLWhpZ2hsaWdodGVkLWN1c3RvbS0xIHtcbiAgICAgIGNvbG9yOiAke2UuY29sb3JzLnBpbmt9O1xuICAgIH1cblxuICAgIC5yZWFjdC1kYXRlcGlja2VyX19kYXktLWhpZ2hsaWdodGVkLWN1c3RvbS0yLFxuICAgIC5yZWFjdC1kYXRlcGlja2VyX19tb250aC10ZXh0LS1oaWdobGlnaHRlZC1jdXN0b20tMixcbiAgICAucmVhY3QtZGF0ZXBpY2tlcl9fcXVhcnRlci10ZXh0LS1oaWdobGlnaHRlZC1jdXN0b20tMixcbiAgICAucmVhY3QtZGF0ZXBpY2tlcl9feWVhci10ZXh0LS1oaWdobGlnaHRlZC1jdXN0b20tMiB7XG4gICAgICBjb2xvcjogJHtlLmNvbG9ycy5ncmVlbn07XG4gICAgfVxuXG4gICAgLnJlYWN0LWRhdGVwaWNrZXJfX2RheS0taW4tc2VsZWN0aW5nLXJhbmdlLFxuICAgIC5yZWFjdC1kYXRlcGlja2VyX19tb250aC10ZXh0LS1pbi1zZWxlY3RpbmctcmFuZ2UsXG4gICAgLnJlYWN0LWRhdGVwaWNrZXJfX3F1YXJ0ZXItdGV4dC0taW4tc2VsZWN0aW5nLXJhbmdlLFxuICAgIC5yZWFjdC1kYXRlcGlja2VyX195ZWFyLXRleHQtLWluLXNlbGVjdGluZy1yYW5nZSB7XG4gICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAke2ByZ2JhKCAke2UuY29sb3JzLmJsdWV9LCAwLjUpYH07XG4gICAgfVxuXG4gICAgLnJlYWN0LWRhdGVwaWNrZXJfX21vbnRoLS1zZWxlY3RpbmctcmFuZ2UgLnJlYWN0LWRhdGVwaWNrZXJfX2RheS0taW4tcmFuZ2UsXG4gICAgLnJlYWN0LWRhdGVwaWNrZXJfX21vbnRoLS1zZWxlY3RpbmctcmFuZ2VcbiAgICAgIC5yZWFjdC1kYXRlcGlja2VyX19tb250aC10ZXh0LS1pbi1yYW5nZSxcbiAgICAucmVhY3QtZGF0ZXBpY2tlcl9fbW9udGgtLXNlbGVjdGluZy1yYW5nZVxuICAgICAgLnJlYWN0LWRhdGVwaWNrZXJfX3F1YXJ0ZXItdGV4dC0taW4tcmFuZ2UsXG4gICAgLnJlYWN0LWRhdGVwaWNrZXJfX21vbnRoLS1zZWxlY3RpbmctcmFuZ2VcbiAgICAgIC5yZWFjdC1kYXRlcGlja2VyX195ZWFyLXRleHQtLWluLXJhbmdlIHtcbiAgICAgIGJhY2tncm91bmQtY29sb3I6ICR7ZS5jb2xvcnMubGF2ZW5kZXJHcmV5fTtcbiAgICAgIGNvbG9yOiAke2UuY29sb3JzLmJsYWNrfTtcbiAgICB9XG5cbiAgICAucmVhY3QtZGF0ZXBpY2tlcl9fZGF5LS1kaXNhYmxlZCxcbiAgICAucmVhY3QtZGF0ZXBpY2tlcl9fbW9udGgtdGV4dC0tZGlzYWJsZWQsXG4gICAgLnJlYWN0LWRhdGVwaWNrZXJfX3F1YXJ0ZXItdGV4dC0tZGlzYWJsZWQsXG4gICAgLnJlYWN0LWRhdGVwaWNrZXJfX3llYXItdGV4dC0tZGlzYWJsZWQge1xuICAgICAgY3Vyc29yOiBkZWZhdWx0O1xuICAgICAgY29sb3I6ICR7ZS5jb2xvcnMuZGFya0dyYXl9O1xuICAgIH1cblxuICAgIC5yZWFjdC1kYXRlcGlja2VyX19kYXktLWRpc2FibGVkOmhvdmVyLFxuICAgIC5yZWFjdC1kYXRlcGlja2VyX19tb250aC10ZXh0LS1kaXNhYmxlZDpob3ZlcixcbiAgICAucmVhY3QtZGF0ZXBpY2tlcl9fcXVhcnRlci10ZXh0LS1kaXNhYmxlZDpob3ZlcixcbiAgICAucmVhY3QtZGF0ZXBpY2tlcl9feWVhci10ZXh0LS1kaXNhYmxlZDpob3ZlciB7XG4gICAgICBiYWNrZ3JvdW5kLWNvbG9yOiB0cmFuc3BhcmVudDtcbiAgICB9XG5cbiAgICAucmVhY3QtZGF0ZXBpY2tlcl9fcXVhcnRlci10ZXh0LnJlYWN0LWRhdGVwaWNrZXJfX21vbnRoLS1zZWxlY3RlZDpob3ZlcixcbiAgICAucmVhY3QtZGF0ZXBpY2tlcl9fcXVhcnRlci10ZXh0LnJlYWN0LWRhdGVwaWNrZXJfX21vbnRoLS1pbi1yYW5nZTpob3ZlcixcbiAgICAucmVhY3QtZGF0ZXBpY2tlcl9fcXVhcnRlci10ZXh0LnJlYWN0LWRhdGVwaWNrZXJfX3F1YXJ0ZXItLXNlbGVjdGVkOmhvdmVyLFxuICAgIC5yZWFjdC1kYXRlcGlja2VyX19xdWFydGVyLXRleHQucmVhY3QtZGF0ZXBpY2tlcl9fcXVhcnRlci0taW4tcmFuZ2U6aG92ZXIge1xuICAgICAgYmFja2dyb3VuZC1jb2xvcjogJHtlLmNvbG9ycy5ibHVlfTtcbiAgICB9XG5cbiAgICAucmVhY3QtZGF0ZXBpY2tlcl9fbW9udGgtdGV4dDpob3ZlcixcbiAgICAucmVhY3QtZGF0ZXBpY2tlcl9fcXVhcnRlci10ZXh0OmhvdmVyIHtcbiAgICAgIGJhY2tncm91bmQtY29sb3I6ICR7ZS5jb2xvcnMud2hpdGV9O1xuICAgIH1cblxuICAgIC5yZWFjdC1kYXRlcGlja2VyX19pbnB1dC1jb250YWluZXIge1xuICAgICAgcG9zaXRpb246IHJlbGF0aXZlO1xuICAgICAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuICAgICAgd2lkdGg6IDEwMCU7XG4gICAgfVxuXG4gICAgLnJlYWN0LWRhdGVwaWNrZXJfX3llYXItcmVhZC12aWV3LFxuICAgIC5yZWFjdC1kYXRlcGlja2VyX19tb250aC1yZWFkLXZpZXcsXG4gICAgLnJlYWN0LWRhdGVwaWNrZXJfX21vbnRoLXllYXItcmVhZC12aWV3IHtcbiAgICAgIGJvcmRlcjogMXB4IHNvbGlkIHRyYW5zcGFyZW50O1xuICAgICAgYm9yZGVyLXJhZGl1czogJHtlLmJvcmRlclJhZGl1cy5iYXNlfTtcbiAgICB9XG5cbiAgICAucmVhY3QtZGF0ZXBpY2tlcl9feWVhci1yZWFkLXZpZXc6aG92ZXIsXG4gICAgLnJlYWN0LWRhdGVwaWNrZXJfX21vbnRoLXJlYWQtdmlldzpob3ZlcixcbiAgICAucmVhY3QtZGF0ZXBpY2tlcl9fbW9udGgteWVhci1yZWFkLXZpZXc6aG92ZXIge1xuICAgICAgY3Vyc29yOiBwb2ludGVyO1xuICAgIH1cblxuICAgIC5yZWFjdC1kYXRlcGlja2VyX195ZWFyLXJlYWQtdmlldzpob3ZlclxuICAgICAgLnJlYWN0LWRhdGVwaWNrZXJfX3llYXItcmVhZC12aWV3LS1kb3duLWFycm93LFxuICAgIC5yZWFjdC1kYXRlcGlja2VyX195ZWFyLXJlYWQtdmlldzpob3ZlclxuICAgICAgLnJlYWN0LWRhdGVwaWNrZXJfX21vbnRoLXJlYWQtdmlldy0tZG93bi1hcnJvdyxcbiAgICAucmVhY3QtZGF0ZXBpY2tlcl9fbW9udGgtcmVhZC12aWV3OmhvdmVyXG4gICAgICAucmVhY3QtZGF0ZXBpY2tlcl9feWVhci1yZWFkLXZpZXctLWRvd24tYXJyb3csXG4gICAgLnJlYWN0LWRhdGVwaWNrZXJfX21vbnRoLXJlYWQtdmlldzpob3ZlclxuICAgICAgLnJlYWN0LWRhdGVwaWNrZXJfX21vbnRoLXJlYWQtdmlldy0tZG93bi1hcnJvdyxcbiAgICAucmVhY3QtZGF0ZXBpY2tlcl9fbW9udGgteWVhci1yZWFkLXZpZXc6aG92ZXJcbiAgICAgIC5yZWFjdC1kYXRlcGlja2VyX195ZWFyLXJlYWQtdmlldy0tZG93bi1hcnJvdyxcbiAgICAucmVhY3QtZGF0ZXBpY2tlcl9fbW9udGgteWVhci1yZWFkLXZpZXc6aG92ZXJcbiAgICAgIC5yZWFjdC1kYXRlcGlja2VyX19tb250aC1yZWFkLXZpZXctLWRvd24tYXJyb3cge1xuICAgICAgYm9yZGVyLXRvcC1jb2xvcjogdHJhbnNwYXJlbnQ7XG4gICAgfVxuXG4gICAgLnJlYWN0LWRhdGVwaWNrZXJfX3llYXItcmVhZC12aWV3LS1kb3duLWFycm93LFxuICAgIC5yZWFjdC1kYXRlcGlja2VyX19tb250aC1yZWFkLXZpZXctLWRvd24tYXJyb3csXG4gICAgLnJlYWN0LWRhdGVwaWNrZXJfX21vbnRoLXllYXItcmVhZC12aWV3LS1kb3duLWFycm93IHtcbiAgICAgIGJvcmRlci10b3AtY29sb3I6ICR7ZS5jb2xvcnMuYmxhY2t9O1xuICAgICAgZmxvYXQ6IHJpZ2h0O1xuICAgICAgbWFyZ2luLWxlZnQ6IDIwcHg7XG4gICAgICB0b3A6IDhweDtcbiAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgICAgIGJvcmRlci13aWR0aDogMC40NXJlbTtcbiAgICB9XG5cbiAgICAucmVhY3QtZGF0ZXBpY2tlcl9feWVhci1kcm9wZG93bixcbiAgICAucmVhY3QtZGF0ZXBpY2tlcl9fbW9udGgtZHJvcGRvd24sXG4gICAgLnJlYWN0LWRhdGVwaWNrZXJfX21vbnRoLXllYXItZHJvcGRvd24ge1xuICAgICAgYmFja2dyb3VuZC1jb2xvcjogJHtlLmNvbG9ycy53aGl0ZX07XG4gICAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgICB3aWR0aDogNTAlO1xuICAgICAgbGVmdDogMjUlO1xuICAgICAgdG9wOiAzMHB4O1xuICAgICAgei1pbmRleDogMTtcbiAgICAgIHRleHQtYWxpZ246IGNlbnRlcjtcbiAgICAgIGJvcmRlci1yYWRpdXM6ICR7ZS5ib3JkZXJSYWRpdXMuYmFzZX07XG4gICAgICBib3JkZXI6IDFweCBzb2xpZCAke2UuY29sb3JzLmJsYWNrfTtcbiAgICB9XG5cbiAgICAucmVhY3QtZGF0ZXBpY2tlcl9feWVhci1kcm9wZG93bjpob3ZlcixcbiAgICAucmVhY3QtZGF0ZXBpY2tlcl9fbW9udGgtZHJvcGRvd246aG92ZXIsXG4gICAgLnJlYWN0LWRhdGVwaWNrZXJfX21vbnRoLXllYXItZHJvcGRvd246aG92ZXIge1xuICAgICAgY3Vyc29yOiBwb2ludGVyO1xuICAgIH1cblxuICAgIC5yZWFjdC1kYXRlcGlja2VyX195ZWFyLWRyb3Bkb3duLS1zY3JvbGxhYmxlLFxuICAgIC5yZWFjdC1kYXRlcGlja2VyX19tb250aC1kcm9wZG93bi0tc2Nyb2xsYWJsZSxcbiAgICAucmVhY3QtZGF0ZXBpY2tlcl9fbW9udGgteWVhci1kcm9wZG93bi0tc2Nyb2xsYWJsZSB7XG4gICAgICBoZWlnaHQ6IDE1MHB4O1xuICAgICAgb3ZlcmZsb3cteTogc2Nyb2xsO1xuICAgIH1cblxuICAgIC5yZWFjdC1kYXRlcGlja2VyX195ZWFyLW9wdGlvbixcbiAgICAucmVhY3QtZGF0ZXBpY2tlcl9fbW9udGgtb3B0aW9uLFxuICAgIC5yZWFjdC1kYXRlcGlja2VyX19tb250aC15ZWFyLW9wdGlvbiB7XG4gICAgICBsaW5lLWhlaWdodDogMjBweDtcbiAgICAgIHdpZHRoOiAxMDAlO1xuICAgICAgZGlzcGxheTogYmxvY2s7XG4gICAgICBtYXJnaW4tbGVmdDogYXV0bztcbiAgICAgIG1hcmdpbi1yaWdodDogYXV0bztcbiAgICB9XG5cbiAgICAucmVhY3QtZGF0ZXBpY2tlcl9feWVhci1vcHRpb246bGFzdC1vZi10eXBlLFxuICAgIC5yZWFjdC1kYXRlcGlja2VyX19tb250aC1vcHRpb246bGFzdC1vZi10eXBlLFxuICAgIC5yZWFjdC1kYXRlcGlja2VyX19tb250aC15ZWFyLW9wdGlvbjpsYXN0LW9mLXR5cGUge1xuICAgICAgLXdlYmtpdC11c2VyLXNlbGVjdDogbm9uZTtcbiAgICAgIC1tb3otdXNlci1zZWxlY3Q6IG5vbmU7XG4gICAgICAtbXMtdXNlci1zZWxlY3Q6IG5vbmU7XG4gICAgICB1c2VyLXNlbGVjdDogbm9uZTtcbiAgICAgIGJvcmRlci1ib3R0b20tbGVmdC1yYWRpdXM6ICR7ZS5ib3JkZXJSYWRpdXMuYmFzZX07XG4gICAgICBib3JkZXItYm90dG9tLXJpZ2h0LXJhZGl1czogJHtlLmJvcmRlclJhZGl1cy5iYXNlfTtcbiAgICB9XG5cbiAgICAucmVhY3QtZGF0ZXBpY2tlcl9feWVhci1vcHRpb246aG92ZXIsXG4gICAgLnJlYWN0LWRhdGVwaWNrZXJfX21vbnRoLW9wdGlvbjpob3ZlcixcbiAgICAucmVhY3QtZGF0ZXBpY2tlcl9fbW9udGgteWVhci1vcHRpb246aG92ZXIge1xuICAgICAgYmFja2dyb3VuZC1jb2xvcjogJHtlLmNvbG9ycy5ibGFja307XG4gICAgfVxuXG4gICAgLnJlYWN0LWRhdGVwaWNrZXJfX3llYXItb3B0aW9uOmhvdmVyXG4gICAgICAucmVhY3QtZGF0ZXBpY2tlcl9fbmF2aWdhdGlvbi0teWVhcnMtdXBjb21pbmcsXG4gICAgLnJlYWN0LWRhdGVwaWNrZXJfX21vbnRoLW9wdGlvbjpob3ZlclxuICAgICAgLnJlYWN0LWRhdGVwaWNrZXJfX25hdmlnYXRpb24tLXllYXJzLXVwY29taW5nLFxuICAgIC5yZWFjdC1kYXRlcGlja2VyX19tb250aC15ZWFyLW9wdGlvbjpob3ZlclxuICAgICAgLnJlYWN0LWRhdGVwaWNrZXJfX25hdmlnYXRpb24tLXllYXJzLXVwY29taW5nIHtcbiAgICAgIGJvcmRlci1ib3R0b20tY29sb3I6ICR7ZS5jb2xvcnMuYmxhY2t9O1xuICAgIH1cblxuICAgIC5yZWFjdC1kYXRlcGlja2VyX195ZWFyLW9wdGlvbjpob3ZlclxuICAgICAgLnJlYWN0LWRhdGVwaWNrZXJfX25hdmlnYXRpb24tLXllYXJzLXByZXZpb3VzLFxuICAgIC5yZWFjdC1kYXRlcGlja2VyX19tb250aC1vcHRpb246aG92ZXJcbiAgICAgIC5yZWFjdC1kYXRlcGlja2VyX19uYXZpZ2F0aW9uLS15ZWFycy1wcmV2aW91cyxcbiAgICAucmVhY3QtZGF0ZXBpY2tlcl9fbW9udGgteWVhci1vcHRpb246aG92ZXJcbiAgICAgIC5yZWFjdC1kYXRlcGlja2VyX19uYXZpZ2F0aW9uLS15ZWFycy1wcmV2aW91cyB7XG4gICAgICBib3JkZXItdG9wLWNvbG9yOiAke2UuY29sb3JzLmJsYWNrfTtcbiAgICB9XG5cbiAgICAucmVhY3QtZGF0ZXBpY2tlcl9feWVhci1vcHRpb24tLXNlbGVjdGVkLFxuICAgIC5yZWFjdC1kYXRlcGlja2VyX19tb250aC1vcHRpb24tLXNlbGVjdGVkLFxuICAgIC5yZWFjdC1kYXRlcGlja2VyX19tb250aC15ZWFyLW9wdGlvbi0tc2VsZWN0ZWQge1xuICAgICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgICAgbGVmdDogMTVweDtcbiAgICB9XG5cbiAgICAucmVhY3QtZGF0ZXBpY2tlcl9fY2xvc2UtaWNvbiB7XG4gICAgICBjdXJzb3I6IHBvaW50ZXI7XG4gICAgICBiYWNrZ3JvdW5kLWNvbG9yOiB0cmFuc3BhcmVudDtcbiAgICAgIGJvcmRlcjogMDtcbiAgICAgIG91dGxpbmU6IDA7XG4gICAgICBwYWRkaW5nOiAwIDZweCAwIDA7XG4gICAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgICB0b3A6IDA7XG4gICAgICByaWdodDogMDtcbiAgICAgIGhlaWdodDogMTAwJTtcbiAgICAgIGRpc3BsYXk6IHRhYmxlLWNlbGw7XG4gICAgICB2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlO1xuICAgIH1cblxuICAgIC5yZWFjdC1kYXRlcGlja2VyX190b2RheS1idXR0b24ge1xuICAgICAgYmFja2dyb3VuZDogJHtlLmNvbG9ycy53aGl0ZX07XG4gICAgICBib3JkZXItdG9wOiAxcHggc29saWQgJHtlLmNvbG9ycy5ibGFja307XG4gICAgICBjdXJzb3I6IHBvaW50ZXI7XG4gICAgICB0ZXh0LWFsaWduOiBjZW50ZXI7XG4gICAgICBmb250LXdlaWdodDogYm9sZDtcbiAgICAgIHBhZGRpbmc6IDBweDtcbiAgICAgIGNsZWFyOiBsZWZ0O1xuICAgIH1cblxuICAgIC5yZWFjdC1kYXRlcGlja2VyX19wb3J0YWwge1xuICAgICAgcG9zaXRpb246IGZpeGVkO1xuICAgICAgd2lkdGg6IDEwMHZ3O1xuICAgICAgaGVpZ2h0OiAxMDB2aDtcbiAgICAgIGJhY2tncm91bmQtY29sb3I6ICR7YHJnYmEoJHtlLmNvbG9ycy5ibGFja30sIDAuOClgfTtcbiAgICAgIGxlZnQ6IDA7XG4gICAgICB0b3A6IDA7XG4gICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcbiAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gICAgICBkaXNwbGF5OiBmbGV4O1xuICAgICAgei1pbmRleDogMjE0NzQ4MzY0NztcbiAgICB9XG5cbiAgICAucmVhY3QtZGF0ZXBpY2tlcl9fcG9ydGFsIC5yZWFjdC1kYXRlcGlja2VyX19kYXktbmFtZSxcbiAgICAucmVhY3QtZGF0ZXBpY2tlcl9fcG9ydGFsIC5yZWFjdC1kYXRlcGlja2VyX19kYXksXG4gICAgLnJlYWN0LWRhdGVwaWNrZXJfX3BvcnRhbCAucmVhY3QtZGF0ZXBpY2tlcl9fdGltZS1uYW1lIHtcbiAgICAgIHdpZHRoOiAzcmVtO1xuICAgICAgbGluZS1oZWlnaHQ6IDNyZW07XG4gICAgfVxuXG4gICAgQG1lZGlhIChtYXgtd2lkdGg6IDQwMHB4KSwgKG1heC1oZWlnaHQ6IDU1MHB4KSB7XG4gICAgICAucmVhY3QtZGF0ZXBpY2tlcl9fcG9ydGFsIC5yZWFjdC1kYXRlcGlja2VyX19kYXktbmFtZSxcbiAgICAgIC5yZWFjdC1kYXRlcGlja2VyX19wb3J0YWwgLnJlYWN0LWRhdGVwaWNrZXJfX2RheSxcbiAgICAgIC5yZWFjdC1kYXRlcGlja2VyX19wb3J0YWwgLnJlYWN0LWRhdGVwaWNrZXJfX3RpbWUtbmFtZSB7XG4gICAgICAgIHdpZHRoOiAycmVtO1xuICAgICAgICBsaW5lLWhlaWdodDogMnJlbTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAucmVhY3QtZGF0ZXBpY2tlcl9fcG9ydGFsIC5yZWFjdC1kYXRlcGlja2VyX19jdXJyZW50LW1vbnRoLFxuICAgIC5yZWFjdC1kYXRlcGlja2VyX19wb3J0YWwgLnJlYWN0LWRhdGVwaWNrZXItdGltZV9faGVhZGVyIHtcbiAgICAgIGZvbnQtc2l6ZTogJHtlLnR5cG9ncmFwaHkudDIwfTtcbiAgICB9XG5cbiAgICAucmVhY3QtZGF0ZXBpY2tlcl9fcG9ydGFsIC5yZWFjdC1kYXRlcGlja2VyX19uYXZpZ2F0aW9uIHtcbiAgICAgIGJvcmRlcjogMC44MXJlbSBzb2xpZCB0cmFuc3BhcmVudDtcbiAgICB9XG5cbiAgICAucmVhY3QtZGF0ZXBpY2tlcl9fcG9ydGFsIC5yZWFjdC1kYXRlcGlja2VyX19uYXZpZ2F0aW9uLS1wcmV2aW91cyB7XG4gICAgICBib3JkZXItcmlnaHQtY29sb3I6ICR7ZS5jb2xvcnMuYmxhY2t9O1xuICAgIH1cblxuICAgIC5yZWFjdC1kYXRlcGlja2VyX19wb3J0YWwgLnJlYWN0LWRhdGVwaWNrZXJfX25hdmlnYXRpb24tLXByZXZpb3VzOmhvdmVyIHtcbiAgICAgIGJvcmRlci1yaWdodC1jb2xvcjogdW5zZXQ7XG4gICAgfVxuXG4gICAgLnJlYWN0LWRhdGVwaWNrZXJfX3BvcnRhbCAucmVhY3QtZGF0ZXBpY2tlcl9fbmF2aWdhdGlvbi0tcHJldmlvdXMtLWRpc2FibGVkLFxuICAgIC5yZWFjdC1kYXRlcGlja2VyX19wb3J0YWxcbiAgICAgIC5yZWFjdC1kYXRlcGlja2VyX19uYXZpZ2F0aW9uLS1wcmV2aW91cy0tZGlzYWJsZWQ6aG92ZXIge1xuICAgICAgYm9yZGVyLXJpZ2h0LWNvbG9yOiAke2UuY29sb3JzLmdyZXl9O1xuICAgICAgY3Vyc29yOiBkZWZhdWx0O1xuICAgIH1cblxuICAgIC5yZWFjdC1kYXRlcGlja2VyX19wb3J0YWwgLnJlYWN0LWRhdGVwaWNrZXJfX25hdmlnYXRpb24tLW5leHQge1xuICAgICAgYm9yZGVyLWxlZnQtY29sb3I6ICR7ZS5jb2xvcnMuYmxhY2t9O1xuICAgIH1cblxuICAgIC5yZWFjdC1kYXRlcGlja2VyX19wb3J0YWwgLnJlYWN0LWRhdGVwaWNrZXJfX25hdmlnYXRpb24tLW5leHQ6aG92ZXIge1xuICAgICAgYm9yZGVyLWxlZnQtY29sb3I6IHVuc2V0O1xuICAgIH1cblxuICAgIC5yZWFjdC1kYXRlcGlja2VyX19wb3J0YWwgLnJlYWN0LWRhdGVwaWNrZXJfX25hdmlnYXRpb24tLW5leHQtLWRpc2FibGVkLFxuICAgIC5yZWFjdC1kYXRlcGlja2VyX19wb3J0YWxcbiAgICAgIC5yZWFjdC1kYXRlcGlja2VyX19uYXZpZ2F0aW9uLS1uZXh0LS1kaXNhYmxlZDpob3ZlciB7XG4gICAgICBib3JkZXItbGVmdC1jb2xvcjogJHtlLmNvbG9ycy5ncmV5fTtcbiAgICAgIGN1cnNvcjogZGVmYXVsdDtcbiAgICB9XG5cbiAgICAucmVhY3QtZGF0ZXBpY2tlcl9fZGF5LS1vdXRzaWRlLW1vbnRoIHtcbiAgICAgIGNvbG9yOiAke2UuY29sb3JzLnRleHRJY29uLnRleHREaXNhYmxlZE9uYmd9O1xuICAgIH1cbiAgICAke3QgJiYgbzFgXG4gICAgICAke1Y1fSB7XG4gICAgICAgIGN1cnNvcjogZGVmYXVsdDtcbiAgICAgICAgY29sb3I6ICR7ZS5jb2xvcnMudGV4dEljb24udGV4dERpc2FibGVkTm9iZ307XG4gICAgICAgIGJhY2tncm91bmQtY29sb3I6ICR7ZS5jb2xvcnMuYmFja2dyb3VuZHMuYmdEaXNhYmxlZFByaW1hcnl9O1xuICAgICAgfVxuICAgICAgc3ZnIHtcbiAgICAgICAgY29sb3I6ICM4ZjhmOTU7XG4gICAgICB9XG4gICAgYH1cbiAgYFxuKTtcbiQuZGl2YFxuICB3aWR0aDogMjUwcHg7XG5gO1xuJC5kaXYoKCkgPT4gbzFgXG4gICAgZGlzcGxheTogZmxleDtcbiAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuICAgIGdhcDogOHB4O1xuICBgKTtcbiQuZGl2KCgpID0+IG8xYFxuICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgZ2FwOiA4cHg7XG4gICAganVzdGlmeS1jb250ZW50OiBmbGV4LWVuZDtcbiAgYCk7XG5jb25zdCB4cCA9ICQuZGl2KFxuICAoeyB0aGVtZTogeyBzcGFjaW5nczogZSB9IH0pID0+IG8xYFxuICAgIG1hcmdpbi1ib3R0b206ICR7ZS5zcDh9O1xuICBgXG4pLCBZVyA9ICQuZGl2YFxuICBkaXNwbGF5OiBmbGV4O1xuICBqdXN0aWZ5LWNvbnRlbnQ6IGZsZXgtc3RhcnQ7XG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gIGdhcDogNHB4O1xuICBmbGV4LXdyYXA6IHdyYXA7XG5gO1xuJC5kaXZgXG4gIHdpZHRoOiA0MDBweDtcbmA7XG4kLmRpdihcbiAgKHsgdGhlbWU6IHt9IH0pID0+IG8xYFxuICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbiAgICBnYXA6IDhweDtcbiAgYFxuKTtcbmNvbnN0IEdXID0gJC5kaXYoKHsgdGhlbWU6IHt9IH0pID0+IG8xYGApLCBrNyA9ICQuZGl2KCh7IHRoZW1lOiB7fSB9KSA9PiBvMWBgKTtcbiQuZGl2KFxuICAoeyB0aGVtZToge30gfSkgPT4gbzFgXG4gICAgJHt4cH0ge1xuICAgICAgbGFiZWwge1xuICAgICAgICBkaXNwbGF5OiBub25lO1xuICAgICAgfVxuICAgIH1cbiAgYFxuKTtcbiQuZGl2KFxuICAoeyB0aGVtZTogeyBzcGFjaW5nczogZSB9IH0pID0+IG8xYFxuICAgIG1hcmdpbjogJHtlLnNwOH07XG4gIGBcbik7XG4kLmRpdihcbiAgKHsgdGhlbWU6IHsgc3BhY2luZ3M6IGUgfSB9KSA9PiBvMWBcbiAgICBkaXNwbGF5OiBmbGV4O1xuICAgIGp1c3RpZnktY29udGVudDogZmxleC1lbmQ7XG4gICAgZ2FwOiA4cHg7XG4gICAgcGFkZGluZzogMCAke2Uuc3A4fTtcbiAgYFxuKTtcbmNvbnN0IFZpID0gJChZMikoKHsgaWNvblJpZ2h0OiBlIH0pID0+IG8xYFxuICAgIGN1cnNvcjogcG9pbnRlcjtcbiAgICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gICAgKyAqIHtcbiAgICAgIC5pY29uLXN5c3RlbSB7XG4gICAgICAgIGN1cnNvcjogcG9pbnRlcjtcbiAgICAgIH1cbiAgICB9XG4gICAgJHtlICYmIGUgPT0gXCJDaGV2cm9uVXBcIiAmJiBvMWBcbiAgICAgIGJvcmRlcjogMXB4IHNvbGlkICMzMTI3ODM7XG4gICAgYH1cbiAgYCksIFFXID0gJC5kaXYoXG4gICh7IHRoZW1lOiB7fSB9KSA9PiBvMWBcbiAgICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gICAgaW5wdXQge1xuICAgICAgcGFkZGluZy1yaWdodDogNDhweDtcbiAgICB9XG4gIGBcbik7XG4kLmRpdihcbiAgKHsgaG9yaXpvbnRhbDogZSwgb3V0c2lkZTogdCwgaW5zaWRlOiBvIH0pID0+IG8xYFxuICAgICAgc3ZnIHtcbiAgICAgICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgICAgICByaWdodDogMzJweDtcbiAgICAgICAgdG9wOiAyOHB4O1xuICAgICAgICB6LWluZGV4OiAxO1xuICAgICAgICBvcGFjaXR5OiAwLjI7XG4gICAgICAgIHdpZHRoOiAxMnB4O1xuICAgICAgICBjdXJzb3I6IHBvaW50ZXI7XG4gICAgICB9XG4gICAgICAke2UgJiYgbzFgXG4gICAgICAgIHN2ZyB7XG4gICAgICAgICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgICAgICAgIHJpZ2h0OiAzMHB4O1xuICAgICAgICAgIHRvcDogMTBweDtcbiAgICAgICAgICB6LWluZGV4OiAxO1xuICAgICAgICAgIG9wYWNpdHk6IDAuMjtcbiAgICAgICAgICB3aWR0aDogMTJweDtcbiAgICAgICAgICBjdXJzb3I6IHBvaW50ZXI7XG4gICAgICAgIH1cbiAgICAgIGB9XG4gICAgICAke3QgJiYgbzFgXG4gICAgICAgIHN2ZyB7XG4gICAgICAgICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgICAgICAgIHJpZ2h0OiAzMHB4O1xuICAgICAgICAgIHRvcDogMzBweDtcbiAgICAgICAgICB6LWluZGV4OiAxO1xuICAgICAgICAgIHdpZHRoOiAxMnB4O1xuICAgICAgICAgIG9wYWNpdHk6IDAuMjtcbiAgICAgICAgICBjdXJzb3I6IHBvaW50ZXI7XG4gICAgICAgIH1cbiAgICAgIGB9XG4gICAke28gJiYgbzFgXG4gICAgICAgIHN2ZyB7XG4gICAgICAgICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgICAgICAgIHJpZ2h0OiAzMHB4O1xuICAgICAgICAgIHRvcDogMTBweDtcbiAgICAgICAgICB6LWluZGV4OiAxO1xuICAgICAgICAgIHdpZHRoOiAxMnB4O1xuICAgICAgICAgIG9wYWNpdHk6IDAuMjtcbiAgICAgICAgICBjdXJzb3I6IHBvaW50ZXI7XG4gICAgICAgIH1cbiAgICAgIGB9XG4gICAgYFxuKTtcbmNvbnN0IFpXID0gJC51bGBcbiAgcGFkZGluZy1sZWZ0OiAyMHB4O1xuICBwYWRkaW5nLXJpZ2h0OiAxMHB4O1xuICBtYXJnaW46IDA7XG5gLCBqVyA9ICQoRmwpYFxuICBtYXJnaW4tYm90dG9tOiA1cHg7XG4gIHBhZGRpbmc6IDA7XG4gIGRpc3BsYXk6IGxpc3QtaXRlbTtcbiAgJjpsYXN0LWNoaWxkIHtcbiAgICBtYXJnaW4tYm90dG9tOiAwO1xuICB9XG5gO1xuJC5kaXZgXG4gICAgICAgIHdpZHRoOiAyNTBweDtcbmA7XG5jb25zdCBLVyA9ICQuZGl2KCgpID0+IG8xYFxuICAgICAgICBkaXNwbGF5OiBmbGV4O1xuICAgICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuICAgICAgICBnYXA6OHB4O1xuICAgIGApO1xuJC5kaXYoKCkgPT4gbzFgXG4gICAgICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgICAgIGdhcDo4cHg7XG4gICAgICAgIGp1c3RpZnktY29udGVudDogZmxleC1lbmQ7XG4gICAgYCk7XG4kLmRpdmBcbiAgd2lkdGg6IDUxOHB4O1xuYDtcbmNvbnN0IEpXID0gJC5kaXYoXG4gICh7IHRoZW1lOiB7fSB9KSA9PiBvMWBcbiAgICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gICAgLmlucHV0LWNsZWFyLWJ0biB7XG4gICAgICByaWdodDogMzJweDtcbiAgICB9XG4gICAgLmlucHV0LXdyYXBwZXIgaW5wdXQge1xuICAgICAgcGFkZGluZy1yaWdodDogMzRweDtcbiAgICB9XG4gIGBcbiksIF9XID0gJChZMikoXG4gICh7IHRoZW1lOiB7IGNvbG9yczogZSB9IH0pID0+IG8xYFxuICAgIGJvcmRlci1ib3R0b206IDFweCBzb2xpZCAke2UuYm9yZGVyLmJvcmRlclRlcnRpYXJ5fTtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAke2UuYmFja2dyb3VuZHMuYmdQcmltYXJ5fTtcbiAgICBib3JkZXItcmFkaXVzOiAwcHg7XG4gICAgY29sb3I6ICR7ZS50ZXh0SWNvbi50ZXh0TG93ZW1waGFzaXN9O1xuICAgICY6aG92ZXI6bm90KDpkaXNhYmxlZCk6bm90KDpmb2N1cykge1xuICAgICAgYm9yZGVyOiAxcHggc29saWQgdHJhbnNwYXJlbnQ7XG4gICAgICBib3JkZXItYm90dG9tOiAxcHggc29saWQgJHtlLmJvcmRlci5ib3JkZXJUZXJ0aWFyeX07XG4gICAgfVxuICAgICY6aG92ZXI6Zm9jdXMge1xuICAgICAgYm9yZGVyOiAxcHggc29saWQgdHJhbnNwYXJlbnQ7XG4gICAgICBib3JkZXItYm90dG9tOiAxcHggc29saWQgJHtlLmJvcmRlci5ib3JkZXJUZXJ0aWFyeX07XG4gICAgfVxuICAgICY6aG92ZXIge1xuICAgICAgYm9yZGVyOiAxcHggc29saWQgdHJhbnNwYXJlbnQ7XG4gICAgICBib3JkZXItYm90dG9tOiAxcHggc29saWQgJHtlLmJvcmRlci5ib3JkZXJUZXJ0aWFyeX07XG4gICAgfVxuICAgICY6Zm9jdXMge1xuICAgICAgYm9yZGVyOiAxcHggc29saWQgdHJhbnNwYXJlbnQ7XG4gICAgICBib3JkZXItYm90dG9tOiAxcHggc29saWQgJHtlLmJvcmRlci5ib3JkZXJUZXJ0aWFyeX07XG4gICAgfVxuICBgXG4pO1xuZnVuY3Rpb24gRzQoZSkge1xuICBjb25zdCB0ID0gbjAobnVsbCksIFtvLCBuXSA9IFQxKFwiXCIpLCB7XG4gICAgb25DaGFuZ2U6IHIsXG4gICAgdmFsdWU6IGksXG4gICAgZ2V0VmFsdWU6IGEsXG4gICAgaWNvblNpemU6IHMsXG4gICAgaW5wdXRUeXBlOiBsLFxuICAgIHJlc2V0VmFsdWVzOiBwLFxuICAgIGhhbmRsZUNsZWFyRm46IGQsXG4gICAgLi4uYlxuICB9ID0gZSwgTSA9IF8xKFxuICAgIChBKSA9PiB7XG4gICAgICBjb25zdCB7IHZhbHVlOiB6IH0gPSBBLmN1cnJlbnRUYXJnZXQ7XG4gICAgICBuKHopLCByICYmIHIoQSksIGEgJiYgYSh6KTtcbiAgICB9LFxuICAgIFtuLCByLCBhXVxuICApLCB1ID0gKCkgPT4ge1xuICAgIGQgJiYgZCgpLCBuKFwiXCIpLCBhICYmIGEoXCJcIik7XG4gIH07XG4gIHJldHVybiBQMSgoKSA9PiB7XG4gICAgcCAmJiB1KCk7XG4gIH0sIFtwXSksIFAxKCgpID0+IHtcbiAgICBpICYmIG4oaSk7XG4gIH0sIFtpXSksIC8qIEBfX1BVUkVfXyAqLyBjKEpXLCB7IGNoaWxkcmVuOiBsICE9IFwiYmFzZVwiID8gLyogQF9fUFVSRV9fICovIGMoXG4gICAgX1csXG4gICAge1xuICAgICAgLi4uYixcbiAgICAgIG9uQ2hhbmdlOiBNLFxuICAgICAgY29sb3JJY29uTGVmdDogXCIjNzk3OTgwXCIsXG4gICAgICBpY29uTGVmdDogXCJTZWFyY2hcIixcbiAgICAgIHZhbHVlOiBvLFxuICAgICAgcmVmOiB0LFxuICAgICAgaGFuZGxlQ2xlYXJGbjogdSxcbiAgICAgIGljb25TaXplOiBzIHx8IFwieHhzXCIsXG4gICAgICBsYWJlbDogZS5sYWJlbFxuICAgIH1cbiAgKSA6IC8qIEBfX1BVUkVfXyAqLyBjKFxuICAgIFkyLFxuICAgIHtcbiAgICAgIC4uLmIsXG4gICAgICBvbkNoYW5nZTogTSxcbiAgICAgIGljb25MZWZ0OiBcIlNlYXJjaFwiLFxuICAgICAgY29sb3JJY29uTGVmdDogXCIjNzk3OTgwXCIsXG4gICAgICB2YWx1ZTogbyxcbiAgICAgIHJlZjogdCxcbiAgICAgIGhhbmRsZUNsZWFyRm46IHUsXG4gICAgICBpY29uU2l6ZTogcyB8fCBcInh4c1wiXG4gICAgfVxuICApIH0pO1xufVxuY29uc3QgJFcgPSAkLmRpdihcbiAgKHsgdGhlbWU6IHt9IH0pID0+IG8xYFxuICAgIFxuICAgIHdpZHRoOiAxMDAlO1xuICAgIGhlaWdodDogMTAwJTtcbiAgICBhbGlnbi1zZWxmOiBzdHJldGNoO1xuICAgIGJvcmRlci1yYWRpdXM6IDRweDtcbiAgYFxuKSwgZVIgPSAkLmRpdihcbiAgKHsgdGhlbWU6IHt9IH0pID0+IG8xYFxuICAgIHdpZHRoOiAxMDAlO1xuICAgIGhlaWdodDogMTAwJTtcbiAgICBhbGlnbi1zZWxmOiBzdHJldGNoO1xuICAgIGJvcmRlci1yYWRpdXM6IDRweDtcbiAgYFxuKTtcbiQuZGl2YFxuICB3aWR0aDogMzAwcHg7XG5gO1xudmFyIE43ID0gTnVtYmVyLmlzTmFOIHx8IGZ1bmN0aW9uKHQpIHtcbiAgcmV0dXJuIHR5cGVvZiB0ID09IFwibnVtYmVyXCIgJiYgdCAhPT0gdDtcbn07XG5mdW5jdGlvbiB0UihlLCB0KSB7XG4gIHJldHVybiAhIShlID09PSB0IHx8IE43KGUpICYmIE43KHQpKTtcbn1cbmZ1bmN0aW9uIG9SKGUsIHQpIHtcbiAgaWYgKGUubGVuZ3RoICE9PSB0Lmxlbmd0aClcbiAgICByZXR1cm4gITE7XG4gIGZvciAodmFyIG8gPSAwOyBvIDwgZS5sZW5ndGg7IG8rKylcbiAgICBpZiAoIXRSKGVbb10sIHRbb10pKVxuICAgICAgcmV0dXJuICExO1xuICByZXR1cm4gITA7XG59XG5mdW5jdGlvbiBwMihlLCB0KSB7XG4gIHQgPT09IHZvaWQgMCAmJiAodCA9IG9SKTtcbiAgdmFyIG8sIG4gPSBbXSwgciwgaSA9ICExO1xuICBmdW5jdGlvbiBhKCkge1xuICAgIGZvciAodmFyIHMgPSBbXSwgbCA9IDA7IGwgPCBhcmd1bWVudHMubGVuZ3RoOyBsKyspXG4gICAgICBzW2xdID0gYXJndW1lbnRzW2xdO1xuICAgIHJldHVybiBpICYmIG8gPT09IHRoaXMgJiYgdChzLCBuKSB8fCAociA9IGUuYXBwbHkodGhpcywgcyksIGkgPSAhMCwgbyA9IHRoaXMsIG4gPSBzKSwgcjtcbiAgfVxuICByZXR1cm4gYTtcbn1cbnZhciByUiA9IHR5cGVvZiBwZXJmb3JtYW5jZSA9PSBcIm9iamVjdFwiICYmIHR5cGVvZiBwZXJmb3JtYW5jZS5ub3cgPT0gXCJmdW5jdGlvblwiLCBUNyA9IHJSID8gZnVuY3Rpb24oKSB7XG4gIHJldHVybiBwZXJmb3JtYW5jZS5ub3coKTtcbn0gOiBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIERhdGUubm93KCk7XG59O1xuZnVuY3Rpb24gSTcoZSkge1xuICBjYW5jZWxBbmltYXRpb25GcmFtZShlLmlkKTtcbn1cbmZ1bmN0aW9uIG5SKGUsIHQpIHtcbiAgdmFyIG8gPSBUNygpO1xuICBmdW5jdGlvbiBuKCkge1xuICAgIFQ3KCkgLSBvID49IHQgPyBlLmNhbGwobnVsbCkgOiByLmlkID0gcmVxdWVzdEFuaW1hdGlvbkZyYW1lKG4pO1xuICB9XG4gIHZhciByID0ge1xuICAgIGlkOiByZXF1ZXN0QW5pbWF0aW9uRnJhbWUobilcbiAgfTtcbiAgcmV0dXJuIHI7XG59XG52YXIgUGkgPSAtMTtcbmZ1bmN0aW9uIEQ3KGUpIHtcbiAgaWYgKGUgPT09IHZvaWQgMCAmJiAoZSA9ICExKSwgUGkgPT09IC0xIHx8IGUpIHtcbiAgICB2YXIgdCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIiksIG8gPSB0LnN0eWxlO1xuICAgIG8ud2lkdGggPSBcIjUwcHhcIiwgby5oZWlnaHQgPSBcIjUwcHhcIiwgby5vdmVyZmxvdyA9IFwic2Nyb2xsXCIsIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQodCksIFBpID0gdC5vZmZzZXRXaWR0aCAtIHQuY2xpZW50V2lkdGgsIGRvY3VtZW50LmJvZHkucmVtb3ZlQ2hpbGQodCk7XG4gIH1cbiAgcmV0dXJuIFBpO1xufVxudmFyIHkzID0gbnVsbDtcbmZ1bmN0aW9uIEg3KGUpIHtcbiAgaWYgKGUgPT09IHZvaWQgMCAmJiAoZSA9ICExKSwgeTMgPT09IG51bGwgfHwgZSkge1xuICAgIHZhciB0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImRpdlwiKSwgbyA9IHQuc3R5bGU7XG4gICAgby53aWR0aCA9IFwiNTBweFwiLCBvLmhlaWdodCA9IFwiNTBweFwiLCBvLm92ZXJmbG93ID0gXCJzY3JvbGxcIiwgby5kaXJlY3Rpb24gPSBcInJ0bFwiO1xuICAgIHZhciBuID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImRpdlwiKSwgciA9IG4uc3R5bGU7XG4gICAgcmV0dXJuIHIud2lkdGggPSBcIjEwMHB4XCIsIHIuaGVpZ2h0ID0gXCIxMDBweFwiLCB0LmFwcGVuZENoaWxkKG4pLCBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKHQpLCB0LnNjcm9sbExlZnQgPiAwID8geTMgPSBcInBvc2l0aXZlLWRlc2NlbmRpbmdcIiA6ICh0LnNjcm9sbExlZnQgPSAxLCB0LnNjcm9sbExlZnQgPT09IDAgPyB5MyA9IFwibmVnYXRpdmVcIiA6IHkzID0gXCJwb3NpdGl2ZS1hc2NlbmRpbmdcIiksIGRvY3VtZW50LmJvZHkucmVtb3ZlQ2hpbGQodCksIHkzO1xuICB9XG4gIHJldHVybiB5Mztcbn1cbnByb2Nlc3MuZW52Lk5PREVfRU5WO1xudmFyIGlSID0gMTUwLCBhUiA9IGZ1bmN0aW9uKHQsIG8pIHtcbiAgcmV0dXJuIHQ7XG59LCBVbiA9IG51bGwsIFluID0gbnVsbDtcbnByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIiAmJiB0eXBlb2Ygd2luZG93IDwgXCJ1XCIgJiYgdHlwZW9mIHdpbmRvdy5XZWFrU2V0IDwgXCJ1XCIgJiYgKFVuID0gLyogQF9fUFVSRV9fICovIG5ldyBXZWFrU2V0KCksIFluID0gLyogQF9fUFVSRV9fICovIG5ldyBXZWFrU2V0KCkpO1xuZnVuY3Rpb24gc1IoZSkge1xuICB2YXIgdCwgbyA9IGUuZ2V0SXRlbU9mZnNldCwgbiA9IGUuZ2V0RXN0aW1hdGVkVG90YWxTaXplLCByID0gZS5nZXRJdGVtU2l6ZSwgaSA9IGUuZ2V0T2Zmc2V0Rm9ySW5kZXhBbmRBbGlnbm1lbnQsIGEgPSBlLmdldFN0YXJ0SW5kZXhGb3JPZmZzZXQsIHMgPSBlLmdldFN0b3BJbmRleEZvclN0YXJ0SW5kZXgsIGwgPSBlLmluaXRJbnN0YW5jZVByb3BzLCBwID0gZS5zaG91bGRSZXNldFN0eWxlQ2FjaGVPbkl0ZW1TaXplQ2hhbmdlLCBkID0gZS52YWxpZGF0ZVByb3BzO1xuICByZXR1cm4gdCA9IC8qIEBfX1BVUkVfXyAqLyBmdW5jdGlvbihiKSB7XG4gICAgVjQoTSwgYik7XG4gICAgZnVuY3Rpb24gTShBKSB7XG4gICAgICB2YXIgejtcbiAgICAgIHJldHVybiB6ID0gYi5jYWxsKHRoaXMsIEEpIHx8IHRoaXMsIHouX2luc3RhbmNlUHJvcHMgPSBsKHoucHJvcHMsIG8wKHopKSwgei5fb3V0ZXJSZWYgPSB2b2lkIDAsIHouX3Jlc2V0SXNTY3JvbGxpbmdUaW1lb3V0SWQgPSBudWxsLCB6LnN0YXRlID0ge1xuICAgICAgICBpbnN0YW5jZTogbzAoeiksXG4gICAgICAgIGlzU2Nyb2xsaW5nOiAhMSxcbiAgICAgICAgc2Nyb2xsRGlyZWN0aW9uOiBcImZvcndhcmRcIixcbiAgICAgICAgc2Nyb2xsT2Zmc2V0OiB0eXBlb2Ygei5wcm9wcy5pbml0aWFsU2Nyb2xsT2Zmc2V0ID09IFwibnVtYmVyXCIgPyB6LnByb3BzLmluaXRpYWxTY3JvbGxPZmZzZXQgOiAwLFxuICAgICAgICBzY3JvbGxVcGRhdGVXYXNSZXF1ZXN0ZWQ6ICExXG4gICAgICB9LCB6Ll9jYWxsT25JdGVtc1JlbmRlcmVkID0gdm9pZCAwLCB6Ll9jYWxsT25JdGVtc1JlbmRlcmVkID0gcDIoZnVuY3Rpb24oZiwgTywgaCwgZykge1xuICAgICAgICByZXR1cm4gei5wcm9wcy5vbkl0ZW1zUmVuZGVyZWQoe1xuICAgICAgICAgIG92ZXJzY2FuU3RhcnRJbmRleDogZixcbiAgICAgICAgICBvdmVyc2NhblN0b3BJbmRleDogTyxcbiAgICAgICAgICB2aXNpYmxlU3RhcnRJbmRleDogaCxcbiAgICAgICAgICB2aXNpYmxlU3RvcEluZGV4OiBnXG4gICAgICAgIH0pO1xuICAgICAgfSksIHouX2NhbGxPblNjcm9sbCA9IHZvaWQgMCwgei5fY2FsbE9uU2Nyb2xsID0gcDIoZnVuY3Rpb24oZiwgTywgaCkge1xuICAgICAgICByZXR1cm4gei5wcm9wcy5vblNjcm9sbCh7XG4gICAgICAgICAgc2Nyb2xsRGlyZWN0aW9uOiBmLFxuICAgICAgICAgIHNjcm9sbE9mZnNldDogTyxcbiAgICAgICAgICBzY3JvbGxVcGRhdGVXYXNSZXF1ZXN0ZWQ6IGhcbiAgICAgICAgfSk7XG4gICAgICB9KSwgei5fZ2V0SXRlbVN0eWxlID0gdm9pZCAwLCB6Ll9nZXRJdGVtU3R5bGUgPSBmdW5jdGlvbihmKSB7XG4gICAgICAgIHZhciBPID0gei5wcm9wcywgaCA9IE8uZGlyZWN0aW9uLCBnID0gTy5pdGVtU2l6ZSwgdiA9IE8ubGF5b3V0LCBMID0gei5fZ2V0SXRlbVN0eWxlQ2FjaGUocCAmJiBnLCBwICYmIHYsIHAgJiYgaCksIHk7XG4gICAgICAgIGlmIChMLmhhc093blByb3BlcnR5KGYpKVxuICAgICAgICAgIHkgPSBMW2ZdO1xuICAgICAgICBlbHNlIHtcbiAgICAgICAgICB2YXIgQiA9IG8oei5wcm9wcywgZiwgei5faW5zdGFuY2VQcm9wcyksIFggPSByKHoucHJvcHMsIGYsIHouX2luc3RhbmNlUHJvcHMpLCBGID0gaCA9PT0gXCJob3Jpem9udGFsXCIgfHwgdiA9PT0gXCJob3Jpem9udGFsXCIsIFQgPSBoID09PSBcInJ0bFwiLCB3ID0gRiA/IEIgOiAwO1xuICAgICAgICAgIExbZl0gPSB5ID0ge1xuICAgICAgICAgICAgcG9zaXRpb246IFwiYWJzb2x1dGVcIixcbiAgICAgICAgICAgIGxlZnQ6IFQgPyB2b2lkIDAgOiB3LFxuICAgICAgICAgICAgcmlnaHQ6IFQgPyB3IDogdm9pZCAwLFxuICAgICAgICAgICAgdG9wOiBGID8gMCA6IEIsXG4gICAgICAgICAgICBoZWlnaHQ6IEYgPyBcIjEwMCVcIiA6IFgsXG4gICAgICAgICAgICB3aWR0aDogRiA/IFggOiBcIjEwMCVcIlxuICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHk7XG4gICAgICB9LCB6Ll9nZXRJdGVtU3R5bGVDYWNoZSA9IHZvaWQgMCwgei5fZ2V0SXRlbVN0eWxlQ2FjaGUgPSBwMihmdW5jdGlvbihmLCBPLCBoKSB7XG4gICAgICAgIHJldHVybiB7fTtcbiAgICAgIH0pLCB6Ll9vblNjcm9sbEhvcml6b250YWwgPSBmdW5jdGlvbihmKSB7XG4gICAgICAgIHZhciBPID0gZi5jdXJyZW50VGFyZ2V0LCBoID0gTy5jbGllbnRXaWR0aCwgZyA9IE8uc2Nyb2xsTGVmdCwgdiA9IE8uc2Nyb2xsV2lkdGg7XG4gICAgICAgIHouc2V0U3RhdGUoZnVuY3Rpb24oTCkge1xuICAgICAgICAgIGlmIChMLnNjcm9sbE9mZnNldCA9PT0gZylcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICAgIHZhciB5ID0gei5wcm9wcy5kaXJlY3Rpb24sIEIgPSBnO1xuICAgICAgICAgIGlmICh5ID09PSBcInJ0bFwiKVxuICAgICAgICAgICAgc3dpdGNoIChINygpKSB7XG4gICAgICAgICAgICAgIGNhc2UgXCJuZWdhdGl2ZVwiOlxuICAgICAgICAgICAgICAgIEIgPSAtZztcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgY2FzZSBcInBvc2l0aXZlLWRlc2NlbmRpbmdcIjpcbiAgICAgICAgICAgICAgICBCID0gdiAtIGggLSBnO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiBCID0gTWF0aC5tYXgoMCwgTWF0aC5taW4oQiwgdiAtIGgpKSwge1xuICAgICAgICAgICAgaXNTY3JvbGxpbmc6ICEwLFxuICAgICAgICAgICAgc2Nyb2xsRGlyZWN0aW9uOiBMLnNjcm9sbE9mZnNldCA8IEIgPyBcImZvcndhcmRcIiA6IFwiYmFja3dhcmRcIixcbiAgICAgICAgICAgIHNjcm9sbE9mZnNldDogQixcbiAgICAgICAgICAgIHNjcm9sbFVwZGF0ZVdhc1JlcXVlc3RlZDogITFcbiAgICAgICAgICB9O1xuICAgICAgICB9LCB6Ll9yZXNldElzU2Nyb2xsaW5nRGVib3VuY2VkKTtcbiAgICAgIH0sIHouX29uU2Nyb2xsVmVydGljYWwgPSBmdW5jdGlvbihmKSB7XG4gICAgICAgIHZhciBPID0gZi5jdXJyZW50VGFyZ2V0LCBoID0gTy5jbGllbnRIZWlnaHQsIGcgPSBPLnNjcm9sbEhlaWdodCwgdiA9IE8uc2Nyb2xsVG9wO1xuICAgICAgICB6LnNldFN0YXRlKGZ1bmN0aW9uKEwpIHtcbiAgICAgICAgICBpZiAoTC5zY3JvbGxPZmZzZXQgPT09IHYpXG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgICB2YXIgeSA9IE1hdGgubWF4KDAsIE1hdGgubWluKHYsIGcgLSBoKSk7XG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGlzU2Nyb2xsaW5nOiAhMCxcbiAgICAgICAgICAgIHNjcm9sbERpcmVjdGlvbjogTC5zY3JvbGxPZmZzZXQgPCB5ID8gXCJmb3J3YXJkXCIgOiBcImJhY2t3YXJkXCIsXG4gICAgICAgICAgICBzY3JvbGxPZmZzZXQ6IHksXG4gICAgICAgICAgICBzY3JvbGxVcGRhdGVXYXNSZXF1ZXN0ZWQ6ICExXG4gICAgICAgICAgfTtcbiAgICAgICAgfSwgei5fcmVzZXRJc1Njcm9sbGluZ0RlYm91bmNlZCk7XG4gICAgICB9LCB6Ll9vdXRlclJlZlNldHRlciA9IGZ1bmN0aW9uKGYpIHtcbiAgICAgICAgdmFyIE8gPSB6LnByb3BzLm91dGVyUmVmO1xuICAgICAgICB6Ll9vdXRlclJlZiA9IGYsIHR5cGVvZiBPID09IFwiZnVuY3Rpb25cIiA/IE8oZikgOiBPICE9IG51bGwgJiYgdHlwZW9mIE8gPT0gXCJvYmplY3RcIiAmJiBPLmhhc093blByb3BlcnR5KFwiY3VycmVudFwiKSAmJiAoTy5jdXJyZW50ID0gZik7XG4gICAgICB9LCB6Ll9yZXNldElzU2Nyb2xsaW5nRGVib3VuY2VkID0gZnVuY3Rpb24oKSB7XG4gICAgICAgIHouX3Jlc2V0SXNTY3JvbGxpbmdUaW1lb3V0SWQgIT09IG51bGwgJiYgSTcoei5fcmVzZXRJc1Njcm9sbGluZ1RpbWVvdXRJZCksIHouX3Jlc2V0SXNTY3JvbGxpbmdUaW1lb3V0SWQgPSBuUih6Ll9yZXNldElzU2Nyb2xsaW5nLCBpUik7XG4gICAgICB9LCB6Ll9yZXNldElzU2Nyb2xsaW5nID0gZnVuY3Rpb24oKSB7XG4gICAgICAgIHouX3Jlc2V0SXNTY3JvbGxpbmdUaW1lb3V0SWQgPSBudWxsLCB6LnNldFN0YXRlKHtcbiAgICAgICAgICBpc1Njcm9sbGluZzogITFcbiAgICAgICAgfSwgZnVuY3Rpb24oKSB7XG4gICAgICAgICAgei5fZ2V0SXRlbVN0eWxlQ2FjaGUoLTEsIG51bGwpO1xuICAgICAgICB9KTtcbiAgICAgIH0sIHo7XG4gICAgfVxuICAgIE0uZ2V0RGVyaXZlZFN0YXRlRnJvbVByb3BzID0gZnVuY3Rpb24oeiwgZikge1xuICAgICAgcmV0dXJuIGNSKHosIGYpLCBkKHopLCBudWxsO1xuICAgIH07XG4gICAgdmFyIHUgPSBNLnByb3RvdHlwZTtcbiAgICByZXR1cm4gdS5zY3JvbGxUbyA9IGZ1bmN0aW9uKHopIHtcbiAgICAgIHogPSBNYXRoLm1heCgwLCB6KSwgdGhpcy5zZXRTdGF0ZShmdW5jdGlvbihmKSB7XG4gICAgICAgIHJldHVybiBmLnNjcm9sbE9mZnNldCA9PT0geiA/IG51bGwgOiB7XG4gICAgICAgICAgc2Nyb2xsRGlyZWN0aW9uOiBmLnNjcm9sbE9mZnNldCA8IHogPyBcImZvcndhcmRcIiA6IFwiYmFja3dhcmRcIixcbiAgICAgICAgICBzY3JvbGxPZmZzZXQ6IHosXG4gICAgICAgICAgc2Nyb2xsVXBkYXRlV2FzUmVxdWVzdGVkOiAhMFxuICAgICAgICB9O1xuICAgICAgfSwgdGhpcy5fcmVzZXRJc1Njcm9sbGluZ0RlYm91bmNlZCk7XG4gICAgfSwgdS5zY3JvbGxUb0l0ZW0gPSBmdW5jdGlvbih6LCBmKSB7XG4gICAgICBmID09PSB2b2lkIDAgJiYgKGYgPSBcImF1dG9cIik7XG4gICAgICB2YXIgTyA9IHRoaXMucHJvcHMsIGggPSBPLml0ZW1Db3VudCwgZyA9IE8ubGF5b3V0LCB2ID0gdGhpcy5zdGF0ZS5zY3JvbGxPZmZzZXQ7XG4gICAgICB6ID0gTWF0aC5tYXgoMCwgTWF0aC5taW4oeiwgaCAtIDEpKTtcbiAgICAgIHZhciBMID0gMDtcbiAgICAgIGlmICh0aGlzLl9vdXRlclJlZikge1xuICAgICAgICB2YXIgeSA9IHRoaXMuX291dGVyUmVmO1xuICAgICAgICBnID09PSBcInZlcnRpY2FsXCIgPyBMID0geS5zY3JvbGxXaWR0aCA+IHkuY2xpZW50V2lkdGggPyBENygpIDogMCA6IEwgPSB5LnNjcm9sbEhlaWdodCA+IHkuY2xpZW50SGVpZ2h0ID8gRDcoKSA6IDA7XG4gICAgICB9XG4gICAgICB0aGlzLnNjcm9sbFRvKGkodGhpcy5wcm9wcywgeiwgZiwgdiwgdGhpcy5faW5zdGFuY2VQcm9wcywgTCkpO1xuICAgIH0sIHUuY29tcG9uZW50RGlkTW91bnQgPSBmdW5jdGlvbigpIHtcbiAgICAgIHZhciB6ID0gdGhpcy5wcm9wcywgZiA9IHouZGlyZWN0aW9uLCBPID0gei5pbml0aWFsU2Nyb2xsT2Zmc2V0LCBoID0gei5sYXlvdXQ7XG4gICAgICBpZiAodHlwZW9mIE8gPT0gXCJudW1iZXJcIiAmJiB0aGlzLl9vdXRlclJlZiAhPSBudWxsKSB7XG4gICAgICAgIHZhciBnID0gdGhpcy5fb3V0ZXJSZWY7XG4gICAgICAgIGYgPT09IFwiaG9yaXpvbnRhbFwiIHx8IGggPT09IFwiaG9yaXpvbnRhbFwiID8gZy5zY3JvbGxMZWZ0ID0gTyA6IGcuc2Nyb2xsVG9wID0gTztcbiAgICAgIH1cbiAgICAgIHRoaXMuX2NhbGxQcm9wc0NhbGxiYWNrcygpO1xuICAgIH0sIHUuY29tcG9uZW50RGlkVXBkYXRlID0gZnVuY3Rpb24oKSB7XG4gICAgICB2YXIgeiA9IHRoaXMucHJvcHMsIGYgPSB6LmRpcmVjdGlvbiwgTyA9IHoubGF5b3V0LCBoID0gdGhpcy5zdGF0ZSwgZyA9IGguc2Nyb2xsT2Zmc2V0LCB2ID0gaC5zY3JvbGxVcGRhdGVXYXNSZXF1ZXN0ZWQ7XG4gICAgICBpZiAodiAmJiB0aGlzLl9vdXRlclJlZiAhPSBudWxsKSB7XG4gICAgICAgIHZhciBMID0gdGhpcy5fb3V0ZXJSZWY7XG4gICAgICAgIGlmIChmID09PSBcImhvcml6b250YWxcIiB8fCBPID09PSBcImhvcml6b250YWxcIilcbiAgICAgICAgICBpZiAoZiA9PT0gXCJydGxcIilcbiAgICAgICAgICAgIHN3aXRjaCAoSDcoKSkge1xuICAgICAgICAgICAgICBjYXNlIFwibmVnYXRpdmVcIjpcbiAgICAgICAgICAgICAgICBMLnNjcm9sbExlZnQgPSAtZztcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgY2FzZSBcInBvc2l0aXZlLWFzY2VuZGluZ1wiOlxuICAgICAgICAgICAgICAgIEwuc2Nyb2xsTGVmdCA9IGc7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgdmFyIHkgPSBMLmNsaWVudFdpZHRoLCBCID0gTC5zY3JvbGxXaWR0aDtcbiAgICAgICAgICAgICAgICBMLnNjcm9sbExlZnQgPSBCIC0geSAtIGc7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgZWxzZVxuICAgICAgICAgICAgTC5zY3JvbGxMZWZ0ID0gZztcbiAgICAgICAgZWxzZVxuICAgICAgICAgIEwuc2Nyb2xsVG9wID0gZztcbiAgICAgIH1cbiAgICAgIHRoaXMuX2NhbGxQcm9wc0NhbGxiYWNrcygpO1xuICAgIH0sIHUuY29tcG9uZW50V2lsbFVubW91bnQgPSBmdW5jdGlvbigpIHtcbiAgICAgIHRoaXMuX3Jlc2V0SXNTY3JvbGxpbmdUaW1lb3V0SWQgIT09IG51bGwgJiYgSTcodGhpcy5fcmVzZXRJc1Njcm9sbGluZ1RpbWVvdXRJZCk7XG4gICAgfSwgdS5yZW5kZXIgPSBmdW5jdGlvbigpIHtcbiAgICAgIHZhciB6ID0gdGhpcy5wcm9wcywgZiA9IHouY2hpbGRyZW4sIE8gPSB6LmNsYXNzTmFtZSwgaCA9IHouZGlyZWN0aW9uLCBnID0gei5oZWlnaHQsIHYgPSB6LmlubmVyUmVmLCBMID0gei5pbm5lckVsZW1lbnRUeXBlLCB5ID0gei5pbm5lclRhZ05hbWUsIEIgPSB6Lml0ZW1Db3VudCwgWCA9IHouaXRlbURhdGEsIEYgPSB6Lml0ZW1LZXksIFQgPSBGID09PSB2b2lkIDAgPyBhUiA6IEYsIHcgPSB6LmxheW91dCwgSCA9IHoub3V0ZXJFbGVtZW50VHlwZSwgQyA9IHoub3V0ZXJUYWdOYW1lLCBxID0gei5zdHlsZSwgbSA9IHoudXNlSXNTY3JvbGxpbmcsIGsgPSB6LndpZHRoLCB4ID0gdGhpcy5zdGF0ZS5pc1Njcm9sbGluZywgTiA9IGggPT09IFwiaG9yaXpvbnRhbFwiIHx8IHcgPT09IFwiaG9yaXpvbnRhbFwiLCBWID0gTiA/IHRoaXMuX29uU2Nyb2xsSG9yaXpvbnRhbCA6IHRoaXMuX29uU2Nyb2xsVmVydGljYWwsIFIgPSB0aGlzLl9nZXRSYW5nZVRvUmVuZGVyKCksIEkgPSBSWzBdLCBqID0gUlsxXSwgVSA9IFtdO1xuICAgICAgaWYgKEIgPiAwKVxuICAgICAgICBmb3IgKHZhciBfID0gSTsgXyA8PSBqOyBfKyspXG4gICAgICAgICAgVS5wdXNoKGNlKGYsIHtcbiAgICAgICAgICAgIGRhdGE6IFgsXG4gICAgICAgICAgICBrZXk6IFQoXywgWCksXG4gICAgICAgICAgICBpbmRleDogXyxcbiAgICAgICAgICAgIGlzU2Nyb2xsaW5nOiBtID8geCA6IHZvaWQgMCxcbiAgICAgICAgICAgIHN0eWxlOiB0aGlzLl9nZXRJdGVtU3R5bGUoXylcbiAgICAgICAgICB9KSk7XG4gICAgICB2YXIgcjEgPSBuKHRoaXMucHJvcHMsIHRoaXMuX2luc3RhbmNlUHJvcHMpO1xuICAgICAgcmV0dXJuIGNlKEggfHwgQyB8fCBcImRpdlwiLCB7XG4gICAgICAgIGNsYXNzTmFtZTogTyxcbiAgICAgICAgb25TY3JvbGw6IFYsXG4gICAgICAgIHJlZjogdGhpcy5fb3V0ZXJSZWZTZXR0ZXIsXG4gICAgICAgIHN0eWxlOiBhMCh7XG4gICAgICAgICAgcG9zaXRpb246IFwicmVsYXRpdmVcIixcbiAgICAgICAgICBoZWlnaHQ6IGcsXG4gICAgICAgICAgd2lkdGg6IGssXG4gICAgICAgICAgb3ZlcmZsb3c6IFwiYXV0b1wiLFxuICAgICAgICAgIFdlYmtpdE92ZXJmbG93U2Nyb2xsaW5nOiBcInRvdWNoXCIsXG4gICAgICAgICAgd2lsbENoYW5nZTogXCJ0cmFuc2Zvcm1cIixcbiAgICAgICAgICBkaXJlY3Rpb246IGhcbiAgICAgICAgfSwgcSlcbiAgICAgIH0sIGNlKEwgfHwgeSB8fCBcImRpdlwiLCB7XG4gICAgICAgIGNoaWxkcmVuOiBVLFxuICAgICAgICByZWY6IHYsXG4gICAgICAgIHN0eWxlOiB7XG4gICAgICAgICAgaGVpZ2h0OiBOID8gXCIxMDAlXCIgOiByMSxcbiAgICAgICAgICBwb2ludGVyRXZlbnRzOiB4ID8gXCJub25lXCIgOiB2b2lkIDAsXG4gICAgICAgICAgd2lkdGg6IE4gPyByMSA6IFwiMTAwJVwiXG4gICAgICAgIH1cbiAgICAgIH0pKTtcbiAgICB9LCB1Ll9jYWxsUHJvcHNDYWxsYmFja3MgPSBmdW5jdGlvbigpIHtcbiAgICAgIGlmICh0eXBlb2YgdGhpcy5wcm9wcy5vbkl0ZW1zUmVuZGVyZWQgPT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICAgIHZhciB6ID0gdGhpcy5wcm9wcy5pdGVtQ291bnQ7XG4gICAgICAgIGlmICh6ID4gMCkge1xuICAgICAgICAgIHZhciBmID0gdGhpcy5fZ2V0UmFuZ2VUb1JlbmRlcigpLCBPID0gZlswXSwgaCA9IGZbMV0sIGcgPSBmWzJdLCB2ID0gZlszXTtcbiAgICAgICAgICB0aGlzLl9jYWxsT25JdGVtc1JlbmRlcmVkKE8sIGgsIGcsIHYpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAodHlwZW9mIHRoaXMucHJvcHMub25TY3JvbGwgPT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICAgIHZhciBMID0gdGhpcy5zdGF0ZSwgeSA9IEwuc2Nyb2xsRGlyZWN0aW9uLCBCID0gTC5zY3JvbGxPZmZzZXQsIFggPSBMLnNjcm9sbFVwZGF0ZVdhc1JlcXVlc3RlZDtcbiAgICAgICAgdGhpcy5fY2FsbE9uU2Nyb2xsKHksIEIsIFgpO1xuICAgICAgfVxuICAgIH0sIHUuX2dldFJhbmdlVG9SZW5kZXIgPSBmdW5jdGlvbigpIHtcbiAgICAgIHZhciB6ID0gdGhpcy5wcm9wcywgZiA9IHouaXRlbUNvdW50LCBPID0gei5vdmVyc2NhbkNvdW50LCBoID0gdGhpcy5zdGF0ZSwgZyA9IGguaXNTY3JvbGxpbmcsIHYgPSBoLnNjcm9sbERpcmVjdGlvbiwgTCA9IGguc2Nyb2xsT2Zmc2V0O1xuICAgICAgaWYgKGYgPT09IDApXG4gICAgICAgIHJldHVybiBbMCwgMCwgMCwgMF07XG4gICAgICB2YXIgeSA9IGEodGhpcy5wcm9wcywgTCwgdGhpcy5faW5zdGFuY2VQcm9wcyksIEIgPSBzKHRoaXMucHJvcHMsIHksIEwsIHRoaXMuX2luc3RhbmNlUHJvcHMpLCBYID0gIWcgfHwgdiA9PT0gXCJiYWNrd2FyZFwiID8gTWF0aC5tYXgoMSwgTykgOiAxLCBGID0gIWcgfHwgdiA9PT0gXCJmb3J3YXJkXCIgPyBNYXRoLm1heCgxLCBPKSA6IDE7XG4gICAgICByZXR1cm4gW01hdGgubWF4KDAsIHkgLSBYKSwgTWF0aC5tYXgoMCwgTWF0aC5taW4oZiAtIDEsIEIgKyBGKSksIHksIEJdO1xuICAgIH0sIE07XG4gIH0ob2wpLCB0LmRlZmF1bHRQcm9wcyA9IHtcbiAgICBkaXJlY3Rpb246IFwibHRyXCIsXG4gICAgaXRlbURhdGE6IHZvaWQgMCxcbiAgICBsYXlvdXQ6IFwidmVydGljYWxcIixcbiAgICBvdmVyc2NhbkNvdW50OiAyLFxuICAgIHVzZUlzU2Nyb2xsaW5nOiAhMVxuICB9LCB0O1xufVxudmFyIGNSID0gZnVuY3Rpb24odCwgbykge1xuICB2YXIgbiA9IHQuY2hpbGRyZW4sIHIgPSB0LmRpcmVjdGlvbiwgaSA9IHQuaGVpZ2h0LCBhID0gdC5sYXlvdXQsIHMgPSB0LmlubmVyVGFnTmFtZSwgbCA9IHQub3V0ZXJUYWdOYW1lLCBwID0gdC53aWR0aCwgZCA9IG8uaW5zdGFuY2U7XG4gIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIpIHtcbiAgICAocyAhPSBudWxsIHx8IGwgIT0gbnVsbCkgJiYgWW4gJiYgIVluLmhhcyhkKSAmJiAoWW4uYWRkKGQpLCBjb25zb2xlLndhcm4oXCJUaGUgaW5uZXJUYWdOYW1lIGFuZCBvdXRlclRhZ05hbWUgcHJvcHMgaGF2ZSBiZWVuIGRlcHJlY2F0ZWQuIFBsZWFzZSB1c2UgdGhlIGlubmVyRWxlbWVudFR5cGUgYW5kIG91dGVyRWxlbWVudFR5cGUgcHJvcHMgaW5zdGVhZC5cIikpO1xuICAgIHZhciBiID0gciA9PT0gXCJob3Jpem9udGFsXCIgfHwgYSA9PT0gXCJob3Jpem9udGFsXCI7XG4gICAgc3dpdGNoIChyKSB7XG4gICAgICBjYXNlIFwiaG9yaXpvbnRhbFwiOlxuICAgICAgY2FzZSBcInZlcnRpY2FsXCI6XG4gICAgICAgIFVuICYmICFVbi5oYXMoZCkgJiYgKFVuLmFkZChkKSwgY29uc29sZS53YXJuKCdUaGUgZGlyZWN0aW9uIHByb3Agc2hvdWxkIGJlIGVpdGhlciBcImx0clwiIChkZWZhdWx0KSBvciBcInJ0bFwiLiBQbGVhc2UgdXNlIHRoZSBsYXlvdXQgcHJvcCB0byBzcGVjaWZ5IFwidmVydGljYWxcIiAoZGVmYXVsdCkgb3IgXCJob3Jpem9udGFsXCIgb3JpZW50YXRpb24uJykpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgXCJsdHJcIjpcbiAgICAgIGNhc2UgXCJydGxcIjpcbiAgICAgICAgYnJlYWs7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICB0aHJvdyBFcnJvcignQW4gaW52YWxpZCBcImRpcmVjdGlvblwiIHByb3AgaGFzIGJlZW4gc3BlY2lmaWVkLiBWYWx1ZSBzaG91bGQgYmUgZWl0aGVyIFwibHRyXCIgb3IgXCJydGxcIi4gJyArICgnXCInICsgciArICdcIiB3YXMgc3BlY2lmaWVkLicpKTtcbiAgICB9XG4gICAgc3dpdGNoIChhKSB7XG4gICAgICBjYXNlIFwiaG9yaXpvbnRhbFwiOlxuICAgICAgY2FzZSBcInZlcnRpY2FsXCI6XG4gICAgICAgIGJyZWFrO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgdGhyb3cgRXJyb3IoJ0FuIGludmFsaWQgXCJsYXlvdXRcIiBwcm9wIGhhcyBiZWVuIHNwZWNpZmllZC4gVmFsdWUgc2hvdWxkIGJlIGVpdGhlciBcImhvcml6b250YWxcIiBvciBcInZlcnRpY2FsXCIuICcgKyAoJ1wiJyArIGEgKyAnXCIgd2FzIHNwZWNpZmllZC4nKSk7XG4gICAgfVxuICAgIGlmIChuID09IG51bGwpXG4gICAgICB0aHJvdyBFcnJvcignQW4gaW52YWxpZCBcImNoaWxkcmVuXCIgcHJvcCBoYXMgYmVlbiBzcGVjaWZpZWQuIFZhbHVlIHNob3VsZCBiZSBhIFJlYWN0IGNvbXBvbmVudC4gJyArICgnXCInICsgKG4gPT09IG51bGwgPyBcIm51bGxcIiA6IHR5cGVvZiBuKSArICdcIiB3YXMgc3BlY2lmaWVkLicpKTtcbiAgICBpZiAoYiAmJiB0eXBlb2YgcCAhPSBcIm51bWJlclwiKVxuICAgICAgdGhyb3cgRXJyb3IoJ0FuIGludmFsaWQgXCJ3aWR0aFwiIHByb3AgaGFzIGJlZW4gc3BlY2lmaWVkLiBIb3Jpem9udGFsIGxpc3RzIG11c3Qgc3BlY2lmeSBhIG51bWJlciBmb3Igd2lkdGguICcgKyAoJ1wiJyArIChwID09PSBudWxsID8gXCJudWxsXCIgOiB0eXBlb2YgcCkgKyAnXCIgd2FzIHNwZWNpZmllZC4nKSk7XG4gICAgaWYgKCFiICYmIHR5cGVvZiBpICE9IFwibnVtYmVyXCIpXG4gICAgICB0aHJvdyBFcnJvcignQW4gaW52YWxpZCBcImhlaWdodFwiIHByb3AgaGFzIGJlZW4gc3BlY2lmaWVkLiBWZXJ0aWNhbCBsaXN0cyBtdXN0IHNwZWNpZnkgYSBudW1iZXIgZm9yIGhlaWdodC4gJyArICgnXCInICsgKGkgPT09IG51bGwgPyBcIm51bGxcIiA6IHR5cGVvZiBpKSArICdcIiB3YXMgc3BlY2lmaWVkLicpKTtcbiAgfVxufSwgbFIgPSA1MCwgazMgPSBmdW5jdGlvbih0LCBvLCBuKSB7XG4gIHZhciByID0gdCwgaSA9IHIuaXRlbVNpemUsIGEgPSBuLml0ZW1NZXRhZGF0YU1hcCwgcyA9IG4ubGFzdE1lYXN1cmVkSW5kZXg7XG4gIGlmIChvID4gcykge1xuICAgIHZhciBsID0gMDtcbiAgICBpZiAocyA+PSAwKSB7XG4gICAgICB2YXIgcCA9IGFbc107XG4gICAgICBsID0gcC5vZmZzZXQgKyBwLnNpemU7XG4gICAgfVxuICAgIGZvciAodmFyIGQgPSBzICsgMTsgZCA8PSBvOyBkKyspIHtcbiAgICAgIHZhciBiID0gaShkKTtcbiAgICAgIGFbZF0gPSB7XG4gICAgICAgIG9mZnNldDogbCxcbiAgICAgICAgc2l6ZTogYlxuICAgICAgfSwgbCArPSBiO1xuICAgIH1cbiAgICBuLmxhc3RNZWFzdXJlZEluZGV4ID0gbztcbiAgfVxuICByZXR1cm4gYVtvXTtcbn0sIHBSID0gZnVuY3Rpb24odCwgbywgbikge1xuICB2YXIgciA9IG8uaXRlbU1ldGFkYXRhTWFwLCBpID0gby5sYXN0TWVhc3VyZWRJbmRleCwgYSA9IGkgPiAwID8gcltpXS5vZmZzZXQgOiAwO1xuICByZXR1cm4gYSA+PSBuID8gV3AodCwgbywgaSwgMCwgbikgOiBkUih0LCBvLCBNYXRoLm1heCgwLCBpKSwgbik7XG59LCBXcCA9IGZ1bmN0aW9uKHQsIG8sIG4sIHIsIGkpIHtcbiAgZm9yICg7IHIgPD0gbjsgKSB7XG4gICAgdmFyIGEgPSByICsgTWF0aC5mbG9vcigobiAtIHIpIC8gMiksIHMgPSBrMyh0LCBhLCBvKS5vZmZzZXQ7XG4gICAgaWYgKHMgPT09IGkpXG4gICAgICByZXR1cm4gYTtcbiAgICBzIDwgaSA/IHIgPSBhICsgMSA6IHMgPiBpICYmIChuID0gYSAtIDEpO1xuICB9XG4gIHJldHVybiByID4gMCA/IHIgLSAxIDogMDtcbn0sIGRSID0gZnVuY3Rpb24odCwgbywgbiwgcikge1xuICBmb3IgKHZhciBpID0gdC5pdGVtQ291bnQsIGEgPSAxOyBuIDwgaSAmJiBrMyh0LCBuLCBvKS5vZmZzZXQgPCByOyApXG4gICAgbiArPSBhLCBhICo9IDI7XG4gIHJldHVybiBXcCh0LCBvLCBNYXRoLm1pbihuLCBpIC0gMSksIE1hdGguZmxvb3IobiAvIDIpLCByKTtcbn0sIFY3ID0gZnVuY3Rpb24odCwgbykge1xuICB2YXIgbiA9IHQuaXRlbUNvdW50LCByID0gby5pdGVtTWV0YWRhdGFNYXAsIGkgPSBvLmVzdGltYXRlZEl0ZW1TaXplLCBhID0gby5sYXN0TWVhc3VyZWRJbmRleCwgcyA9IDA7XG4gIGlmIChhID49IG4gJiYgKGEgPSBuIC0gMSksIGEgPj0gMCkge1xuICAgIHZhciBsID0gclthXTtcbiAgICBzID0gbC5vZmZzZXQgKyBsLnNpemU7XG4gIH1cbiAgdmFyIHAgPSBuIC0gYSAtIDEsIGQgPSBwICogaTtcbiAgcmV0dXJuIHMgKyBkO1xufSwgUDcgPSAvKiBAX19QVVJFX18gKi8gc1Ioe1xuICBnZXRJdGVtT2Zmc2V0OiBmdW5jdGlvbih0LCBvLCBuKSB7XG4gICAgcmV0dXJuIGszKHQsIG8sIG4pLm9mZnNldDtcbiAgfSxcbiAgZ2V0SXRlbVNpemU6IGZ1bmN0aW9uKHQsIG8sIG4pIHtcbiAgICByZXR1cm4gbi5pdGVtTWV0YWRhdGFNYXBbb10uc2l6ZTtcbiAgfSxcbiAgZ2V0RXN0aW1hdGVkVG90YWxTaXplOiBWNyxcbiAgZ2V0T2Zmc2V0Rm9ySW5kZXhBbmRBbGlnbm1lbnQ6IGZ1bmN0aW9uKHQsIG8sIG4sIHIsIGksIGEpIHtcbiAgICB2YXIgcyA9IHQuZGlyZWN0aW9uLCBsID0gdC5oZWlnaHQsIHAgPSB0LmxheW91dCwgZCA9IHQud2lkdGgsIGIgPSBzID09PSBcImhvcml6b250YWxcIiB8fCBwID09PSBcImhvcml6b250YWxcIiwgTSA9IGIgPyBkIDogbCwgdSA9IGszKHQsIG8sIGkpLCBBID0gVjcodCwgaSksIHogPSBNYXRoLm1heCgwLCBNYXRoLm1pbihBIC0gTSwgdS5vZmZzZXQpKSwgZiA9IE1hdGgubWF4KDAsIHUub2Zmc2V0IC0gTSArIHUuc2l6ZSArIGEpO1xuICAgIHN3aXRjaCAobiA9PT0gXCJzbWFydFwiICYmIChyID49IGYgLSBNICYmIHIgPD0geiArIE0gPyBuID0gXCJhdXRvXCIgOiBuID0gXCJjZW50ZXJcIiksIG4pIHtcbiAgICAgIGNhc2UgXCJzdGFydFwiOlxuICAgICAgICByZXR1cm4gejtcbiAgICAgIGNhc2UgXCJlbmRcIjpcbiAgICAgICAgcmV0dXJuIGY7XG4gICAgICBjYXNlIFwiY2VudGVyXCI6XG4gICAgICAgIHJldHVybiBNYXRoLnJvdW5kKGYgKyAoeiAtIGYpIC8gMik7XG4gICAgICBjYXNlIFwiYXV0b1wiOlxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuIHIgPj0gZiAmJiByIDw9IHogPyByIDogciA8IGYgPyBmIDogejtcbiAgICB9XG4gIH0sXG4gIGdldFN0YXJ0SW5kZXhGb3JPZmZzZXQ6IGZ1bmN0aW9uKHQsIG8sIG4pIHtcbiAgICByZXR1cm4gcFIodCwgbiwgbyk7XG4gIH0sXG4gIGdldFN0b3BJbmRleEZvclN0YXJ0SW5kZXg6IGZ1bmN0aW9uKHQsIG8sIG4sIHIpIHtcbiAgICBmb3IgKHZhciBpID0gdC5kaXJlY3Rpb24sIGEgPSB0LmhlaWdodCwgcyA9IHQuaXRlbUNvdW50LCBsID0gdC5sYXlvdXQsIHAgPSB0LndpZHRoLCBkID0gaSA9PT0gXCJob3Jpem9udGFsXCIgfHwgbCA9PT0gXCJob3Jpem9udGFsXCIsIGIgPSBkID8gcCA6IGEsIE0gPSBrMyh0LCBvLCByKSwgdSA9IG4gKyBiLCBBID0gTS5vZmZzZXQgKyBNLnNpemUsIHogPSBvOyB6IDwgcyAtIDEgJiYgQSA8IHU7IClcbiAgICAgIHorKywgQSArPSBrMyh0LCB6LCByKS5zaXplO1xuICAgIHJldHVybiB6O1xuICB9LFxuICBpbml0SW5zdGFuY2VQcm9wczogZnVuY3Rpb24odCwgbykge1xuICAgIHZhciBuID0gdCwgciA9IG4uZXN0aW1hdGVkSXRlbVNpemUsIGkgPSB7XG4gICAgICBpdGVtTWV0YWRhdGFNYXA6IHt9LFxuICAgICAgZXN0aW1hdGVkSXRlbVNpemU6IHIgfHwgbFIsXG4gICAgICBsYXN0TWVhc3VyZWRJbmRleDogLTFcbiAgICB9O1xuICAgIHJldHVybiBvLnJlc2V0QWZ0ZXJJbmRleCA9IGZ1bmN0aW9uKGEsIHMpIHtcbiAgICAgIHMgPT09IHZvaWQgMCAmJiAocyA9ICEwKSwgaS5sYXN0TWVhc3VyZWRJbmRleCA9IE1hdGgubWluKGkubGFzdE1lYXN1cmVkSW5kZXgsIGEgLSAxKSwgby5fZ2V0SXRlbVN0eWxlQ2FjaGUoLTEpLCBzICYmIG8uZm9yY2VVcGRhdGUoKTtcbiAgICB9LCBpO1xuICB9LFxuICBzaG91bGRSZXNldFN0eWxlQ2FjaGVPbkl0ZW1TaXplQ2hhbmdlOiAhMSxcbiAgdmFsaWRhdGVQcm9wczogZnVuY3Rpb24odCkge1xuICAgIHZhciBvID0gdC5pdGVtU2l6ZTtcbiAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiICYmIHR5cGVvZiBvICE9IFwiZnVuY3Rpb25cIilcbiAgICAgIHRocm93IEVycm9yKCdBbiBpbnZhbGlkIFwiaXRlbVNpemVcIiBwcm9wIGhhcyBiZWVuIHNwZWNpZmllZC4gVmFsdWUgc2hvdWxkIGJlIGEgZnVuY3Rpb24uICcgKyAoJ1wiJyArIChvID09PSBudWxsID8gXCJudWxsXCIgOiB0eXBlb2YgbykgKyAnXCIgd2FzIHNwZWNpZmllZC4nKSk7XG4gIH1cbn0pO1xuZnVuY3Rpb24gRjcoZSkge1xuICByZXR1cm4gdHlwZW9mIGUgPT0gXCJudW1iZXJcIiAmJiBpc0Zpbml0ZShlKSAmJiBNYXRoLmZsb29yKGUpID09PSBlO1xufVxuZnVuY3Rpb24gYlIoZSkge1xuICB2YXIgdCA9IGUubGFzdFJlbmRlcmVkU3RhcnRJbmRleCwgbyA9IGUubGFzdFJlbmRlcmVkU3RvcEluZGV4LCBuID0gZS5zdGFydEluZGV4LCByID0gZS5zdG9wSW5kZXg7XG4gIHJldHVybiAhKG4gPiBvIHx8IHIgPCB0KTtcbn1cbmZ1bmN0aW9uIE1SKGUpIHtcbiAgZm9yICh2YXIgdCA9IGUuaXNJdGVtTG9hZGVkLCBvID0gZS5pdGVtQ291bnQsIG4gPSBlLm1pbmltdW1CYXRjaFNpemUsIHIgPSBlLnN0YXJ0SW5kZXgsIGkgPSBlLnN0b3BJbmRleCwgYSA9IFtdLCBzID0gbnVsbCwgbCA9IG51bGwsIHAgPSByOyBwIDw9IGk7IHArKykge1xuICAgIHZhciBkID0gdChwKTtcbiAgICBkID8gbCAhPT0gbnVsbCAmJiAoYS5wdXNoKHMsIGwpLCBzID0gbCA9IG51bGwpIDogKGwgPSBwLCBzID09PSBudWxsICYmIChzID0gcCkpO1xuICB9XG4gIGlmIChsICE9PSBudWxsKSB7XG4gICAgZm9yICh2YXIgYiA9IE1hdGgubWluKE1hdGgubWF4KGwsIHMgKyBuIC0gMSksIG8gLSAxKSwgTSA9IGwgKyAxOyBNIDw9IGIgJiYgIXQoTSk7IE0rKylcbiAgICAgIGwgPSBNO1xuICAgIGEucHVzaChzLCBsKTtcbiAgfVxuICBpZiAoYS5sZW5ndGgpXG4gICAgZm9yICg7IGFbMV0gLSBhWzBdICsgMSA8IG4gJiYgYVswXSA+IDA7ICkge1xuICAgICAgdmFyIHUgPSBhWzBdIC0gMTtcbiAgICAgIGlmICghdCh1KSlcbiAgICAgICAgYVswXSA9IHU7XG4gICAgICBlbHNlXG4gICAgICAgIGJyZWFrO1xuICAgIH1cbiAgcmV0dXJuIGE7XG59XG52YXIgQVIgPSBmdW5jdGlvbihlLCB0KSB7XG4gIGlmICghKGUgaW5zdGFuY2VvZiB0KSlcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uXCIpO1xufSwgdVIgPSBmdW5jdGlvbigpIHtcbiAgZnVuY3Rpb24gZSh0LCBvKSB7XG4gICAgZm9yICh2YXIgbiA9IDA7IG4gPCBvLmxlbmd0aDsgbisrKSB7XG4gICAgICB2YXIgciA9IG9bbl07XG4gICAgICByLmVudW1lcmFibGUgPSByLmVudW1lcmFibGUgfHwgITEsIHIuY29uZmlndXJhYmxlID0gITAsIFwidmFsdWVcIiBpbiByICYmIChyLndyaXRhYmxlID0gITApLCBPYmplY3QuZGVmaW5lUHJvcGVydHkodCwgci5rZXksIHIpO1xuICAgIH1cbiAgfVxuICByZXR1cm4gZnVuY3Rpb24odCwgbywgbikge1xuICAgIHJldHVybiBvICYmIGUodC5wcm90b3R5cGUsIG8pLCBuICYmIGUodCwgbiksIHQ7XG4gIH07XG59KCksIHpSID0gZnVuY3Rpb24oZSwgdCkge1xuICBpZiAodHlwZW9mIHQgIT0gXCJmdW5jdGlvblwiICYmIHQgIT09IG51bGwpXG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlN1cGVyIGV4cHJlc3Npb24gbXVzdCBlaXRoZXIgYmUgbnVsbCBvciBhIGZ1bmN0aW9uLCBub3QgXCIgKyB0eXBlb2YgdCk7XG4gIGUucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZSh0ICYmIHQucHJvdG90eXBlLCB7XG4gICAgY29uc3RydWN0b3I6IHtcbiAgICAgIHZhbHVlOiBlLFxuICAgICAgZW51bWVyYWJsZTogITEsXG4gICAgICB3cml0YWJsZTogITAsXG4gICAgICBjb25maWd1cmFibGU6ICEwXG4gICAgfVxuICB9KSwgdCAmJiAoT2JqZWN0LnNldFByb3RvdHlwZU9mID8gT2JqZWN0LnNldFByb3RvdHlwZU9mKGUsIHQpIDogZS5fX3Byb3RvX18gPSB0KTtcbn0sIFg3ID0gZnVuY3Rpb24oZSwgdCkge1xuICBpZiAoIWUpXG4gICAgdGhyb3cgbmV3IFJlZmVyZW5jZUVycm9yKFwidGhpcyBoYXNuJ3QgYmVlbiBpbml0aWFsaXNlZCAtIHN1cGVyKCkgaGFzbid0IGJlZW4gY2FsbGVkXCIpO1xuICByZXR1cm4gdCAmJiAodHlwZW9mIHQgPT0gXCJvYmplY3RcIiB8fCB0eXBlb2YgdCA9PSBcImZ1bmN0aW9uXCIpID8gdCA6IGU7XG59LCBoUiA9IGZ1bmN0aW9uKGUpIHtcbiAgelIodCwgZSk7XG4gIGZ1bmN0aW9uIHQoKSB7XG4gICAgdmFyIG8sIG4sIHIsIGk7XG4gICAgQVIodGhpcywgdCk7XG4gICAgZm9yICh2YXIgYSA9IGFyZ3VtZW50cy5sZW5ndGgsIHMgPSBBcnJheShhKSwgbCA9IDA7IGwgPCBhOyBsKyspXG4gICAgICBzW2xdID0gYXJndW1lbnRzW2xdO1xuICAgIHJldHVybiBpID0gKG4gPSAociA9IFg3KHRoaXMsIChvID0gdC5fX3Byb3RvX18gfHwgT2JqZWN0LmdldFByb3RvdHlwZU9mKHQpKS5jYWxsLmFwcGx5KG8sIFt0aGlzXS5jb25jYXQocykpKSwgciksIHIuX2xhc3RSZW5kZXJlZFN0YXJ0SW5kZXggPSAtMSwgci5fbGFzdFJlbmRlcmVkU3RvcEluZGV4ID0gLTEsIHIuX21lbW9pemVkVW5sb2FkZWRSYW5nZXMgPSBbXSwgci5fb25JdGVtc1JlbmRlcmVkID0gZnVuY3Rpb24ocCkge1xuICAgICAgdmFyIGQgPSBwLnZpc2libGVTdGFydEluZGV4LCBiID0gcC52aXNpYmxlU3RvcEluZGV4O1xuICAgICAgcHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiICYmICgoIUY3KGQpIHx8ICFGNyhiKSkgJiYgY29uc29sZS53YXJuKFwiSW52YWxpZCBvbkl0ZW1zUmVuZGVyZWQgc2lnbmF0dXJlOyBwbGVhc2UgcmVmZXIgdG8gSW5maW5pdGVMb2FkZXIgZG9jdW1lbnRhdGlvbi5cIiksIHR5cGVvZiByLnByb3BzLmxvYWRNb3JlUm93cyA9PSBcImZ1bmN0aW9uXCIgJiYgY29uc29sZS53YXJuKCdJbmZpbml0ZUxvYWRlciBcImxvYWRNb3JlUm93c1wiIHByb3AgaGFzIGJlZW4gcmVuYW1lZCB0byBcImxvYWRNb3JlSXRlbXNcIi4nKSksIHIuX2xhc3RSZW5kZXJlZFN0YXJ0SW5kZXggPSBkLCByLl9sYXN0UmVuZGVyZWRTdG9wSW5kZXggPSBiLCByLl9lbnN1cmVSb3dzTG9hZGVkKGQsIGIpO1xuICAgIH0sIHIuX3NldFJlZiA9IGZ1bmN0aW9uKHApIHtcbiAgICAgIHIuX2xpc3RSZWYgPSBwO1xuICAgIH0sIG4pLCBYNyhyLCBpKTtcbiAgfVxuICByZXR1cm4gdVIodCwgW3tcbiAgICBrZXk6IFwicmVzZXRsb2FkTW9yZUl0ZW1zQ2FjaGVcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24oKSB7XG4gICAgICB2YXIgbiA9IGFyZ3VtZW50cy5sZW5ndGggPiAwICYmIGFyZ3VtZW50c1swXSAhPT0gdm9pZCAwID8gYXJndW1lbnRzWzBdIDogITE7XG4gICAgICB0aGlzLl9tZW1vaXplZFVubG9hZGVkUmFuZ2VzID0gW10sIG4gJiYgdGhpcy5fZW5zdXJlUm93c0xvYWRlZCh0aGlzLl9sYXN0UmVuZGVyZWRTdGFydEluZGV4LCB0aGlzLl9sYXN0UmVuZGVyZWRTdG9wSW5kZXgpO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJjb21wb25lbnREaWRNb3VudFwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbigpIHtcbiAgICAgIHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIiAmJiB0aGlzLl9saXN0UmVmID09IG51bGwgJiYgY29uc29sZS53YXJuKFwiSW52YWxpZCBsaXN0IHJlZjsgcGxlYXNlIHJlZmVyIHRvIEluZmluaXRlTG9hZGVyIGRvY3VtZW50YXRpb24uXCIpO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJyZW5kZXJcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24oKSB7XG4gICAgICB2YXIgbiA9IHRoaXMucHJvcHMuY2hpbGRyZW47XG4gICAgICByZXR1cm4gbih7XG4gICAgICAgIG9uSXRlbXNSZW5kZXJlZDogdGhpcy5fb25JdGVtc1JlbmRlcmVkLFxuICAgICAgICByZWY6IHRoaXMuX3NldFJlZlxuICAgICAgfSk7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcIl9lbnN1cmVSb3dzTG9hZGVkXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uKG4sIHIpIHtcbiAgICAgIHZhciBpID0gdGhpcy5wcm9wcywgYSA9IGkuaXNJdGVtTG9hZGVkLCBzID0gaS5pdGVtQ291bnQsIGwgPSBpLm1pbmltdW1CYXRjaFNpemUsIHAgPSBsID09PSB2b2lkIDAgPyAxMCA6IGwsIGQgPSBpLnRocmVzaG9sZCwgYiA9IGQgPT09IHZvaWQgMCA/IDE1IDogZCwgTSA9IE1SKHtcbiAgICAgICAgaXNJdGVtTG9hZGVkOiBhLFxuICAgICAgICBpdGVtQ291bnQ6IHMsXG4gICAgICAgIG1pbmltdW1CYXRjaFNpemU6IHAsXG4gICAgICAgIHN0YXJ0SW5kZXg6IE1hdGgubWF4KDAsIG4gLSBiKSxcbiAgICAgICAgc3RvcEluZGV4OiBNYXRoLm1pbihzIC0gMSwgciArIGIpXG4gICAgICB9KTtcbiAgICAgICh0aGlzLl9tZW1vaXplZFVubG9hZGVkUmFuZ2VzLmxlbmd0aCAhPT0gTS5sZW5ndGggfHwgdGhpcy5fbWVtb2l6ZWRVbmxvYWRlZFJhbmdlcy5zb21lKGZ1bmN0aW9uKHUsIEEpIHtcbiAgICAgICAgcmV0dXJuIE1bQV0gIT09IHU7XG4gICAgICB9KSkgJiYgKHRoaXMuX21lbW9pemVkVW5sb2FkZWRSYW5nZXMgPSBNLCB0aGlzLl9sb2FkVW5sb2FkZWRSYW5nZXMoTSkpO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJfbG9hZFVubG9hZGVkUmFuZ2VzXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uKG4pIHtcbiAgICAgIGZvciAodmFyIHIgPSB0aGlzLCBpID0gdGhpcy5wcm9wcy5sb2FkTW9yZUl0ZW1zIHx8IHRoaXMucHJvcHMubG9hZE1vcmVSb3dzLCBhID0gZnVuY3Rpb24ocCkge1xuICAgICAgICB2YXIgZCA9IG5bcF0sIGIgPSBuW3AgKyAxXSwgTSA9IGkoZCwgYik7XG4gICAgICAgIE0gIT0gbnVsbCAmJiBNLnRoZW4oZnVuY3Rpb24oKSB7XG4gICAgICAgICAgaWYgKGJSKHtcbiAgICAgICAgICAgIGxhc3RSZW5kZXJlZFN0YXJ0SW5kZXg6IHIuX2xhc3RSZW5kZXJlZFN0YXJ0SW5kZXgsXG4gICAgICAgICAgICBsYXN0UmVuZGVyZWRTdG9wSW5kZXg6IHIuX2xhc3RSZW5kZXJlZFN0b3BJbmRleCxcbiAgICAgICAgICAgIHN0YXJ0SW5kZXg6IGQsXG4gICAgICAgICAgICBzdG9wSW5kZXg6IGJcbiAgICAgICAgICB9KSkge1xuICAgICAgICAgICAgaWYgKHIuX2xpc3RSZWYgPT0gbnVsbClcbiAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgdHlwZW9mIHIuX2xpc3RSZWYucmVzZXRBZnRlckluZGV4ID09IFwiZnVuY3Rpb25cIiA/IHIuX2xpc3RSZWYucmVzZXRBZnRlckluZGV4KGQsICEwKSA6ICh0eXBlb2Ygci5fbGlzdFJlZi5fZ2V0SXRlbVN0eWxlQ2FjaGUgPT0gXCJmdW5jdGlvblwiICYmIHIuX2xpc3RSZWYuX2dldEl0ZW1TdHlsZUNhY2hlKC0xKSwgci5fbGlzdFJlZi5mb3JjZVVwZGF0ZSgpKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfSwgcyA9IDA7IHMgPCBuLmxlbmd0aDsgcyArPSAyKVxuICAgICAgICBhKHMpO1xuICAgIH1cbiAgfV0pLCB0O1xufShvbCk7XG5jb25zdCBScCA9ICQuZGl2KFxuICAoeyB0aGVtZTogeyB0eXBvZ3JhcGh5OiBlLCBsaW5lSGVpZ2h0OiB0LCBjb2xvcnM6IG8sIGZvbnRXZWlnaHQ6IG4gfSB9KSA9PiBvMWBcbiAgICBkaXNwbGF5OiBmbGV4O1xuICAgIGp1c3RpZnktY29udGVudDogZmxleC1zdGFydDtcbiAgICBhbGlnbi1pdGVtczogY2VudGVyO1xuICAgIGZvbnQtc2l6ZTogJHtlLnQxMH07XG4gICAgbGluZS1oZWlnaHQ6ICR7dC5saDIwfTtcbiAgICBjb2xvcjogJHtvLnRleHRJY29uLnRleHRIaWdoZW1waGFzaXN9O1xuICAgIGZvbnQtd2VpZ2h0OiAke24ubGlnaHR9O1xuXG4gICAgJiA+IGRpdjpmaXJzdC1jaGlsZCB7XG4gICAgICBtYXJnaW4tcmlnaHQ6IDhweDtcbiAgICB9XG4gIGBcbiksIE9SID0gJC5kaXZgXG4gIGRpc3BsYXk6IGZsZXg7XG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG5gLCBCcCA9ICQuc3BhbihcbiAgKHsgdGhlbWU6IHsgY29sb3JzOiBlLCB0eXBvZ3JhcGh5OiB0LCBsaW5lSGVpZ2h0OiBvLCBmb250V2VpZ2h0OiBuIH0gfSkgPT4ge1xuICAgIGNvbnN0IHIgPSB0LnQxMjtcbiAgICByZXR1cm4gbzFgXG4gICAgICBtYXJnaW4tbGVmdDogNHB4O1xuICAgICAgZm9udC1zaXplOiAke3J9O1xuICAgICAgZm9udC13ZWlnaHQ6ICR7bi5saWdodH07XG4gICAgICBsaW5lLWhlaWdodDogJHtvLmxoMjB9O1xuICAgICAgY29sb3I6JHtlLnRleHRJY29uLnRleHRQcmltYXJ5fTtcbiAgICBgO1xuICB9XG4pLCBVNyA9IDQsIGxuID0gJC5kaXYoXG4gICh7IHRoZW1lOiB7fSB9KSA9PiBvMWBcbiAgICBpbnB1dCB7XG4gICAgICBjdXJzb3I6IHBvaW50ZXI7XG4gICAgfVxuICBgXG4pLCBwbiA9ICQuZGl2KFxuICAoeyB0aGVtZTogeyBjb2xvcnM6IGUgfSB9KSA9PiBvMWBcbiAgICAuaWNvbi1zeXN0ZW0ge1xuICAgICAgY29sb3I6ICR7ZS50ZXh0SWNvbi50ZXh0UHJpbWFyeX07XG4gICAgfVxuICBgXG4pLCBkbiA9ICQuZGl2KCh7IHRoZW1lOiB7fSB9KSA9PiBvMWBgKSwgWTcgPSAkLmRpdihcbiAgKHsgdGhlbWU6IHsgY29sb3JzOiBlIH0sIGlzQ29udGVudExhcmdlOiB0LCBjb250ZW50SGVpZ2h0OiBvIH0pID0+IG8xYFxuICAgIGJhY2tncm91bmQ6ICR7ZS5iYWNrZ3JvdW5kcy5iZ1ByaW1hcnl9O1xuICAgICR7dCA9PSBcInRydWVcIiAmJiBvMWBcbiAgICAgIC5MaXN0IHtcbiAgICAgICAgaGVpZ2h0OiBmaXQtY29udGVudCAhaW1wb3J0YW50O1xuICAgICAgfVxuICAgICAgLkxpc3QgLkxpc3RXcmFwRGl2IHtcbiAgICAgICAgaGVpZ2h0OiAke28gLSA0fXB4ICFpbXBvcnRhbnQ7XG4gICAgICB9XG4gICAgYH1cbiAgYFxuKSwgRzcgPSAkLmRpdihcbiAgKHsgdGhlbWU6IHsgc3BhY2luZ3M6IGUsIGxpbmVIZWlnaHQ6IHQgfSB9KSA9PiBvMWBcbiAgICBzcGFuIHtcbiAgICAgIG1hcmdpbi1sZWZ0OiAke2Uuc3A4fTtcbiAgICB9XG4gICAgJHtCcH0ge1xuICAgICAgbGluZS1oZWlnaHQ6ICR7dC5saDE2fTtcbiAgICB9XG4gIGBcbiksIFE3ID0gJC5kaXYoXG4gICgpID0+IG8xYFxuICAgIC8qIHBhZGRpbmctYm90dG9tOiAzcHg7ICovXG4gICAgcG9zaXRpb246IHJlbGF0aXZlO1xuICAgIHRvcDogLTNweDtcbiAgICBoZWlnaHQ6IDE2cHg7XG4gIGBcbiksIFo3ID0gJC5kaXYoXG4gICh7IHRoZW1lOiB7IGxpbmVIZWlnaHQ6IGUgfSB9KSA9PiBvMWBcbiAgICAke1JwfSB7XG4gICAgICBsaW5lLWhlaWdodDogJHtlLmxoMTZ9O1xuICAgIH1cbiAgYFxuKSwgZlIgPSAkLmRpdihcbiAgKHsgdGhlbWU6IHsgc3BhY2luZ3M6IGUgfSB9KSA9PiBvMWBcbiAgICBkaXNwbGF5OiBmbGV4O1xuICAgIGhlaWdodDogMjRweDtcbiAgICBhbGlnbi1pdGVtczogY2VudGVyO1xuICAgIGZsZXgtc2hyaW5rOiAwO1xuICAgIGJvcmRlci1yYWRpdXM6IDRweDtcbiAgICBwYWRkaW5nOiAwcHggJHtlLnNwOH07XG4gICAgd2lkdGg6IGF1dG87XG4gIGBcbiksICRhID0gJC5kaXYoXG4gICh7IHRoZW1lOiB7IGNvbG9yczogZSwgc3BhY2luZ3M6IHQgfSwgJHN1YkxhYmVsOiBvLCAkaXNTZWxlY3RlZDogbiwgJGlzU2Nyb2xsOiByIH0pID0+IG8xYFxuICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgaGVpZ2h0OiBhdXRvO1xuICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gICAgZmxleC1zaHJpbms6IDA7XG4gICAgcGFkZGluZzogMy41cHggJHt0LnNwOH07XG4gICAgZ2FwOiAke3Quc3A4fTtcbiAgICB3aWR0aDogYXV0bztcbiAgICBjdXJzb3I6IHBvaW50ZXI7XG5cbiAgICAke3IgJiYgbzFgXG4gICAgICBtYXJnaW4tcmlnaHQ6IDhweDtcbiAgICBgfVxuXG4gICAgJHtvICYmIG8xYFxuICAgICAgaGVpZ2h0OiA0MHB4O1xuICAgIGB9XG5cbiAgICAke24gJiYgbzFgXG4gICAgICBiYWNrZ3JvdW5kOiAke2UuYmFja2dyb3VuZHMuYmdTZWxlY3RlZH07XG4gICAgYH1cbiAgICA6bnRoLWNoaWxkKDApIHtcbiAgICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGZsZXgtZW5kO1xuICAgICAgd2lkdGg6IDEwMCU7XG4gICAgfVxuXG4gICAgJjpob3ZlciB7XG4gICAgICBiYWNrZ3JvdW5kOiAke2UuYmFja2dyb3VuZHMuYmdIb3ZlclByaW1hcnl9O1xuICAgIH1cbiAgICAmOmZvY3VzLXZpc2libGUge1xuICAgICAgYm9yZGVyOiAxcHggc29saWQgJHtlLmJvcmRlci5ib3JkZXJGb2N1c2VkfTtcbiAgICAgIG91dGxpbmU6IG5vbmU7XG4gICAgfVxuICAgICY6aG92ZXIgJHtlNX0ge1xuICAgICAgZGlzcGxheTogYmxvY2s7XG4gICAgfVxuICBgXG4pLCBnUiA9ICQubGFiZWwoXG4gICh7IHRoZW1lOiB7IGZvbnRGYW1pbHk6IGUsIHR5cG9ncmFwaHk6IHQsIGZvbnRXZWlnaHQ6IG8gfSB9KSA9PiBvMWBcbiAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG4gICAgd2hpdGUtc3BhY2U6IG5vd3JhcDtcbiAgICBvdmVyZmxvdzogaGlkZGVuO1xuICAgIHRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzO1xuICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG4gICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XG4gICAgY29sb3I6ICM3OTc5ODA7XG4gICAgZm9udC1mYW1pbHk6ICR7ZS5iYXNlfTtcbiAgICBmb250LXNpemU6ICR7dC50MTJ9O1xuICAgIGZvbnQtd2VpZ2h0OiAke28ubWVkaXVtfTtcbiAgICBsaW5lLWhlaWdodDogMTYuOHB4O1xuICAgIGN1cnNvcjogcG9pbnRlcjtcbiAgYFxuKSwgU2UgPSAkLmxhYmVsKFxuICAoe1xuICAgIHRoZW1lOiB7IGNvbG9yczogZSwgZm9udEZhbWlseTogdCwgdHlwb2dyYXBoeTogbywgbGluZUhlaWdodDogbiwgZm9udFdlaWdodDogciB9XG4gIH0pID0+IG8xYFxuICAgIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgICB3aGl0ZS1zcGFjZTogbm93cmFwO1xuICAgIG92ZXJmbG93OiBoaWRkZW47XG4gICAgdGV4dC1vdmVyZmxvdzogZWxsaXBzaXM7XG4gICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbiAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcbiAgICBmbGV4OiAxIDAgMDtcbiAgICBvdmVyZmxvdzogaGlkZGVuO1xuICAgIGNvbG9yOiAke2UudGV4dEljb24udGV4dFByaW1hcnl9O1xuICAgIHdvcmQtYnJlYWs6IGJyZWFrLWFsbDtcbiAgICBmb250LWZhbWlseTogJHt0LmJhc2V9O1xuICAgIGZvbnQtc2l6ZTogJHtvLnQxMn07XG4gICAgZm9udC13ZWlnaHQ6ICR7ci5saWdodH07XG4gICAgbGluZS1oZWlnaHQ6ICR7bi5saDE3fTtcbiAgICBtYXgtaGVpZ2h0OiAxN3B4O1xuICAgIGN1cnNvcjogcG9pbnRlcjtcbiAgICBsYWJlbCB7XG4gICAgICBjdXJzb3I6IHBvaW50ZXI7XG4gICAgfVxuICBgXG4pLCBqNyA9ICQuZGl2KFxuICAoeyB0aGVtZToge30gfSkgPT4gbzFgXG4gICAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuICAgIHdoaXRlLXNwYWNlOiBub3dyYXA7XG4gICAgb3ZlcmZsb3c6IGhpZGRlbjtcbiAgICB0ZXh0LW92ZXJmbG93OiBlbGxpcHNpcztcblxuICAgIGN1cnNvcjogcG9pbnRlcjtcbiAgICBsYWJlbCB7XG4gICAgICBjdXJzb3I6IHBvaW50ZXI7XG4gICAgfVxuICBgXG4pLCBLNyA9ICQubGFiZWwoXG4gICh7XG4gICAgdGhlbWU6IHsgY29sb3JzOiBlLCBmb250RmFtaWx5OiB0LCB0eXBvZ3JhcGh5OiBvLCBsaW5lSGVpZ2h0OiBuLCBmb250V2VpZ2h0OiByIH1cbiAgfSkgPT4gbzFgXG4gICAgZGlzcGxheTogZmxleDtcbiAgICB3aGl0ZS1zcGFjZTogbm93cmFwO1xuICAgIG92ZXJmbG93OiBoaWRkZW47XG4gICAgdGV4dC1vdmVyZmxvdzogZWxsaXBzaXM7XG4gICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbiAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcbiAgICBmbGV4OiAxIDAgMDtcbiAgICBvdmVyZmxvdzogaGlkZGVuO1xuICAgIGNvbG9yOiAke2UubGlzdC5saXN0VGV4dExvd2VtcGhhc2lzfTtcbiAgICB3b3JkLWJyZWFrOiBicmVhay1hbGw7XG4gICAgZm9udC1mYW1pbHk6ICR7dC5iYXNlfTtcbiAgICBmb250LXNpemU6ICR7by50MTB9O1xuICAgIGZvbnQtd2VpZ2h0OiAke3IubGlnaHR9O1xuICAgIGxpbmUtaGVpZ2h0OiAxNi44cHg7XG4gICAgY3Vyc29yOiBwb2ludGVyO1xuICAgIGxhYmVsIHtcbiAgICAgIGN1cnNvcjogcG9pbnRlcjtcbiAgICB9XG4gIGBcbiksIEo3ID0gJC5sYWJlbChcbiAgKHtcbiAgICB0aGVtZTogeyBjb2xvcnM6IGUsIGZvbnRGYW1pbHk6IHQsIHR5cG9ncmFwaHk6IG8sIGxpbmVIZWlnaHQ6IG4sIGZvbnRXZWlnaHQ6IHIgfVxuICB9KSA9PiBvMWBcbiAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG4gICAgd2hpdGUtc3BhY2U6IG5vd3JhcDtcbiAgICBvdmVyZmxvdzogaGlkZGVuO1xuICAgIHRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzO1xuICAgIGp1c3RpZnktY29udGVudDogY2VudGVyO1xuICAgIG92ZXJmbG93OiBoaWRkZW47XG4gICAgY29sb3I6ICR7ZS50ZXh0SWNvbi50ZXh0UHJpbWFyeX07XG4gICAgd29yZC1icmVhazogYnJlYWstYWxsO1xuICAgIGZvbnQtZmFtaWx5OiAke3QuYmFzZX07XG4gICAgZm9udC1zaXplOiAke28udDEyfTtcbiAgICBmb250LXdlaWdodDogJHtyLmxpZ2h0fTtcbiAgICBsaW5lLWhlaWdodDogJHtuLmxoMjB9O1xuICAgIGN1cnNvcjogcG9pbnRlcjtcbiAgICBsYWJlbCB7XG4gICAgICBjdXJzb3I6IHBvaW50ZXI7XG4gICAgfVxuICBgXG4pLCBDUiA9ICQuZGl2KFxuICAoeyB0aGVtZTogeyBjb2xvcnM6IGUsIGJvcmRlclJhZGl1czogdCB9IH0pID0+IG8xYFxuICAgIDo6LXdlYmtpdC1zY3JvbGxiYXIge1xuICAgICAgaGVpZ2h0OiAke1U3fXB4O1xuICAgICAgd2lkdGg6ICR7VTd9cHg7XG4gICAgfVxuICAgIDo6LXdlYmtpdC1zY3JvbGxiYXItdHJhY2sge1xuICAgICAgYmFja2dyb3VuZC1jb2xvcjogJHtlLnNjcm9sbC5zY3JvbGxCZ1ByaW1hcnl9O1xuICAgICAgYm9yZGVyLXJhZGl1czogJHt0LnhsfTtcbiAgICB9XG5cbiAgICA6Oi13ZWJraXQtc2Nyb2xsYmFyLXRodW1iIHtcbiAgICAgIGJhY2tncm91bmQtY29sb3I6ICR7ZS5zY3JvbGwuc2Nyb2xsQmdEZWZhdWx0fTtcbiAgICB9XG4gICAgLyogSGFuZGxlIG9uIGhvdmVyICovXG4gICAgOjotd2Via2l0LXNjcm9sbGJhci10aHVtYjpob3ZlciB7XG4gICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAke2Uuc2Nyb2xsLnNjcm9sbEJnSG92ZXJ9O1xuICAgIH1cbiAgICA6Oi13ZWJraXQtc2Nyb2xsYmFyLXRodW1iOmFjdGl2ZSB7XG4gICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAke2Uuc2Nyb2xsLnNjcm9sbEJnUHJlc3NlZH07XG4gICAgfVxuICBgXG4pLCBGaSA9ICQuZGl2KCh7IHRoZW1lOiB7fSB9KSA9PiBvMWBgKSwgYm4gPSAkLnNwYW4oXG4gICh7ICR3aWR0aDogZSB9KSA9PiBvMWBcbiAgICAgIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgICAgIHdoaXRlLXNwYWNlOiBub3dyYXA7XG4gICAgICBvdmVyZmxvdzogaGlkZGVuO1xuICAgICAgdGV4dC1vdmVyZmxvdzogZWxsaXBzaXM7XG4gICAgICB3aWR0aDogJHtlID8gXCI0MHB4XCIgOiBcIjE4MHB4XCJ9O1xuICAgICAgbGluZS1oZWlnaHQ6IDE3cHg7XG4gICAgYFxuKSwgTW4gPSAkLnNwYW4oXG4gICh7IHRoZW1lOiB7IGNvbG9yczogZSB9LCBpc1RpbWVab25lOiB0IH0pID0+IG8xYFxuICAgIHBhZGRpbmctbGVmdDogMTZweDtcbiAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG4gICAgd2hpdGUtc3BhY2U6IG5vd3JhcDtcbiAgICBvdmVyZmxvdzogaGlkZGVuO1xuICAgIHRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzO1xuICAgIGxpbmUtaGVpZ2h0OiAxN3B4O1xuXG4gICAgJHshdCAmJiBvMWBcbiAgICAgIGNvbG9yOiAke2UudGV4dEljb24udGV4dExvd2VtcGhhc2lzfTtcbiAgICBgfVxuICAgICR7dCAmJiBvMWBcbiAgICAgIGNvbG9yOiAke2UudGV4dEljb24udGV4dE1lZGl1bWVtcGhhc2lzfTtcbiAgICBgfVxuICBgXG4pLCBfNyA9ICQuZGl2KFxuICAoeyB0aGVtZTogeyBzcGFjaW5nczogZSB9IH0pID0+IG8xYFxuICAgIC5pY29uLWZsYWcge1xuICAgICAgaW1nIHtcbiAgICAgICAgd2lkdGg6ICR7ZS5zcDE2fTtcbiAgICAgICAgaGVpZ2h0OiAke2Uuc3AxNn07XG4gICAgICB9XG4gICAgfVxuICBgXG4pLCBlNSA9ICQuZGl2KFxuICAoeyB0aGVtZToge30gfSkgPT4gbzFgXG4gICAgZGlzcGxheTogbm9uZTtcbiAgICB3aWR0aDogMTAwJTtcbiAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgbGVmdDogMjA3cHg7XG4gICAgei1pbmRleDogMjtcbiAgICB0b3A6IDA7XG4gIGBcbiksIG1SID0gJC5kaXYoXG4gICh7IHRoZW1lOiB7IGNvbG9yczogZSB9IH0pID0+IG8xYFxuICAgIGRpdiB7XG4gICAgICBvdmVyZmxvdzogdmlzaWJsZSAhaW1wb3J0YW50O1xuICAgICAgLyogYmFja2dyb3VuZDogJHtlLmJhY2tncm91bmRzLmJnUHJpbWFyeX07ICovXG4gICAgfVxuICAgICR7JGF9IHtcbiAgICAgIG1hcmdpbi1yaWdodDogMDtcbiAgICB9XG4gIGBcbiksICQ3ID0gJC5kaXYoXG4gICh7IHRoZW1lOiB7IGJvcmRlclJhZGl1czogZSwgY29sb3JzOiB0IH0gfSkgPT4gbzFgXG4gICAgLmxvZ28tc3ZnIHtcbiAgICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgICBwYWRkaW5nOiAyLjY2N3B4O1xuICAgICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XG4gICAgICBhbGlnbi1pdGVtczogY2VudGVyO1xuICAgICAgYmFja2dyb3VuZDogJHt0LndoaXRlfTtcbiAgICAgIGJvcmRlci1yYWRpdXM6ICR7ZS5jaXJjbGV9O1xuICAgICAgYm9yZGVyOiAwLjY2N3B4IHNvbGlkICNmNGY0ZjQ7XG4gICAgICBzdmcge1xuICAgICAgICBib3JkZXItcmFkaXVzOiAke2UuY2lyY2xlfTtcbiAgICAgIH1cbiAgICB9XG4gIGBcbik7XG4kLmRpdihcbiAgKHsgdGhlbWU6IHt9IH0pID0+IG8xYFxuICAgIGJ1dHRvbiB7XG4gICAgICB3aWR0aDogMjBweDtcbiAgICAgIGhlaWdodDogMjBweDtcbiAgICAgIHBhZGRpbmc6IDVweDtcbiAgICAgIGRpdiB7XG4gICAgICAgIHdpZHRoOiBhdXRvO1xuICAgICAgfVxuICAgICAgc3ZnIHtcbiAgICAgICAgd2lkdGg6IDEwcHg7XG4gICAgICAgIGhlaWdodDogMTBweDtcbiAgICAgIH1cbiAgICB9XG4gIGBcbik7XG5jb25zdCBnZSA9ICQuZGl2KFxuICAoeyB0aGVtZTogeyBpdGVtU2l6ZTogZSwgY29sb3JzOiB0LCBib3JkZXJSYWRpdXM6IG8sIHRyYW5zaXRpb25zOiBuLCBzcGFjaW5nczogciB9IH0pID0+IG8xYFxuICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcbiAgICBhbGlnbi1zZWxmOiBzdGFydDtcbiAgICB3aWR0aDogJHtlLnh4c307XG4gICAgaGVpZ2h0OiAke2UueHhzfTtcbiAgICBib3JkZXI6IDFweCBzb2xpZCAke3QuYm9yZGVyLmJvcmRlclByaW1hcnl9O1xuICAgIGJvcmRlci1yYWRpdXM6ICR7by5zbX07XG4gICAgdHJhbnNpdGlvbjogJHtuLmJhc2V9O1xuICAgIGJveC1zaXppbmc6IGJvcmRlci1ib3g7XG4gICAgYmFja2dyb3VuZC1jb2xvcjogJHt0LmJhY2tncm91bmRzLmJnUHJpbWFyeX07XG4gICAgcGFkZGluZzogJHtyLnNwMn07XG4gICAgLmljb24tc3lzdGVtIHtcbiAgICAgIG9wYWNpdHk6IDA7XG4gICAgICBjb2xvcjogJHt0LnRleHRJY29uLnRleHRUZXJ0aWFyeX07XG4gICAgICB0cmFuc2l0aW9uOiAke24uYmFzZX07XG5cbiAgICAgID4gc3ZnIHtcbiAgICAgICAgd2lkdGg6IDlweDtcbiAgICAgIH1cbiAgICB9XG4gIGBcbiksIExSID0gJC5kaXYoKCkgPT4gbzFgYCksIHZSID0gJC5sYWJlbChcbiAgKHsgdGhlbWU6IHsgY29sb3JzOiBlLCBzcGFjaW5nczogdCB9LCAkaXNSZWFkT25seTogbywgJGlzRXJyb3I6IG4sICRpc1J0bDogciB9KSA9PiBvMWBcbiAgICBkaXNwbGF5OiBmbGV4O1xuICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gICAgY3Vyc29yOiBwb2ludGVyO1xuICAgIHdpZHRoOiAxMDAlO1xuICAgIHVzZXItc2VsZWN0OiBub25lO1xuICAgIGdhcDogJHt0LnNwOH07XG4gICAgJjpob3ZlciB7XG4gICAgICAke2dlfSB7XG4gICAgICAgIGJvcmRlci1jb2xvcjogJHtlLmJvcmRlci5ib3JkZXJTZWNvbmRhcnl9O1xuICAgICAgfVxuICAgIH1cblxuICAgICR7byAmJiBvMWBcbiAgICAgICR7ZzR9OmNoZWNrZWQgKyAke2dlfSB7XG4gICAgICAgIGJhY2tncm91bmQtY29sb3I6ICR7ZS5iYWNrZ3JvdW5kcy5iZ1JlYWRPbmx5fTtcbiAgICAgICAgYm9yZGVyLWNvbG9yOiAke2UuYmFja2dyb3VuZHMuYmdSZWFkT25seX07XG4gICAgICAgIC5pY29uLXN5c3RlbSB7XG4gICAgICAgICAgY29sb3I6ICR7ZS50ZXh0SWNvbi50ZXh0VGVydGlhcnl9O1xuICAgICAgICB9XG4gICAgICB9XG4gICAgYH1cblxuICAgICR7biAmJiBvMWBcbiAgICAgICR7Z2V9IHtcbiAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogJHtlLmJhY2tncm91bmRzLmJnUHJpbWFyeX07XG4gICAgICAgIGJvcmRlci1jb2xvcjogJHtlLmJvcmRlci5ib3JkZXJFcnJvcn07XG5cbiAgICAgICAgLmljb24tc3lzdGVtIHtcbiAgICAgICAgICBjb2xvcjogJHtlLnRleHRJY29uLnRleHRUZXJ0aWFyeX07XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICBgfVxuXG4gICAgJHtyICYmIG8xYFxuICAgICAgZmxleC1kaXJlY3Rpb246IHJvdy1yZXZlcnNlO1xuICAgIGB9XG4gIGBcbiksIGU5ID0gJC5zcGFuKFxuICAoeyB0aGVtZTogZSB9KSA9PiBvMWBcbiAgICBmb250LXNpemU6ICR7ZS50eXBvZ3JhcGh5LnQxNH07XG4gICAgZm9udC13ZWlnaHQ6ICR7ZS5mb250V2VpZ2h0LmxpZ2h0fTtcbiAgICBsaW5lLWhlaWdodDogJHtlLmxpbmVIZWlnaHQubGgyMn07XG4gICAgY29sb3I6ICR7ZS5jb2xvcnMudGV4dEljb24udGV4dEhpZ2hlbXBoYXNpc307XG4gICAgcGFkZGluZy1sZWZ0OiAke2Uuc3BhY2luZ3Muc3A0fTtcbiAgICBwYWRkaW5nLXJpZ2h0OiAke2Uuc3BhY2luZ3Muc3A0fTtcbiAgYFxuKSwgcVIgPSAkLnNwYW4oXG4gICh7IHRoZW1lOiBlIH0pID0+IG8xYFxuICAgIGZvbnQtc2l6ZTogJHtlLnR5cG9ncmFwaHkudDEwfTtcbiAgICBmb250LXdlaWdodDogJHtlLmZvbnRXZWlnaHQucmVndWxhcn07XG4gICAgbGluZS1oZWlnaHQ6ICR7ZS5saW5lSGVpZ2h0LmxoMTR9O1xuICAgIGNvbG9yOiAke2UuY29sb3JzLnRleHRJY29uLnRleHRFcnJvcn07XG4gIGBcbiksIHlSID0gJC5kaXYoXG4gICh7fSkgPT4gbzFgXG4gICAgZGlzcGxheTogZmxleDtcbiAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuICAgIGdhcDogNHB4O1xuICBgXG4pLCBnNCA9ICQuaW5wdXQoXG4gICh7IHRoZW1lOiB7IGNvbG9yczogZSwgdHJhbnNpdGlvbnM6IHQgfSwgJGlzRXJyb3I6IG8gfSkgPT4gbzFgXG4gICAgb3BhY2l0eTogMDtcbiAgICBkaXNwbGF5OiBub25lO1xuXG4gICAgJjpjaGVja2VkICsgJHtnZX0ge1xuICAgICAgYmFja2dyb3VuZC1jb2xvcjogJHtlLmJhY2tncm91bmRzLmJnVGVydGlhcnl9O1xuICAgICAgYm9yZGVyLWNvbG9yOiAke2UuYmFja2dyb3VuZHMuYmdUZXJ0aWFyeX07XG4gICAgICB0cmFuc2l0aW9uOiAke3QuYmFzZX07XG5cbiAgICAgIC5pY29uLXN5c3RlbSB7XG4gICAgICAgIG9wYWNpdHk6IDE7XG4gICAgICAgIHRyYW5zaXRpb246ICR7dC5iYXNlfTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAmOmZvY3VzICsgJHtnZX0ge1xuICAgICAgdHJhbnNpdGlvbjogJHt0LmJhc2V9O1xuICAgIH1cblxuICAgICY6ZGlzYWJsZWQge1xuICAgICAgJiB+ICoge1xuICAgICAgICBjdXJzb3I6IGRlZmF1bHQ7XG4gICAgICB9XG5cbiAgICAgICYgKyAke2dlfSB7XG4gICAgICAgIGJhY2tncm91bmQtY29sb3I6ICR7ZS5iYWNrZ3JvdW5kcy5iZ0Rpc2FibGVkUHJpbWFyeX07XG4gICAgICAgIGJvcmRlci1jb2xvcjogJHtlLmJvcmRlci5ib3JkZXJEaXNhYmxlZE9uYmd9OyAvLyAjRDJEMkQ1O1xuXG4gICAgICAgIC5pY29uLXN5c3RlbSxcbiAgICAgICAgKyAke2U5fSwgfiAke2U5fSAke2lyfSB7XG4gICAgICAgICAgY29sb3I6ICR7ZS50ZXh0SWNvbi50ZXh0RGlzYWJsZWRPbmJnfTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgICR7byAmJiBvMWBcbiAgICAgIGJhY2tncm91bmQtY29sb3I6ICR7ZS5iYWNrZ3JvdW5kcy5iZ1ByaW1hcnl9O1xuICAgICAgYm9yZGVyLWNvbG9yOiAke2UuYm9yZGVyLmJvcmRlckVycm9yfTtcblxuICAgICAgJjpjaGVja2VkICsgJHtnZX0ge1xuICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAke2UuYmFja2dyb3VuZHMuYmdQcmltYXJ5fTtcbiAgICAgICAgYm9yZGVyLWNvbG9yOiAke2UuYm9yZGVyLmJvcmRlckVycm9yfTtcbiAgICAgICAgJjo6YWZ0ZXIge1xuICAgICAgICAgIGJhY2tncm91bmQtY29sb3I6ICR7ZS5iYWNrZ3JvdW5kcy5iZ1ByaW1hcnl9O1xuICAgICAgICAgIGJvcmRlci1jb2xvcjogJHtlLmJvcmRlci5ib3JkZXJFcnJvcn07XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICBgfVxuICBgXG4pLCB3UiA9ICQubGFiZWwoXG4gICh7IHRoZW1lOiB7IHR5cG9ncmFwaHk6IGUsIGZvbnRXZWlnaHQ6IHQsIGxpbmVIZWlnaHQ6IG8sIGNvbG9yczogbiB9IH0pID0+IG8xYFxuICAgIGZvbnQtc2l6ZTogJHtlLnQxMH07XG4gICAgZm9udC13ZWlnaHQ6ICR7dC5saWdodH07XG4gICAgbGluZS1oZWlnaHQ6ICR7by5saDE4fTtcbiAgICBjb2xvcjogJHtuLnRleHRJY29uLnRleHRIaWdoZW1waGFzaXN9O1xuICBgXG4pLCBTcCA9IChlKSA9PiB7XG4gIGNvbnN0IHtcbiAgICBsYWJlbDogdCxcbiAgICBjdXN0b21JY29uOiBvLFxuICAgIGlzUmVhZE9ubHk6IG4sXG4gICAgaXNFcnJvcjogcixcbiAgICBpc0Rpc2FibGVkOiBpLFxuICAgIGlzUmVxdWlyZWQ6IGEsXG4gICAgaXNSdGw6IHMsXG4gICAgY2xhc3NOYW1lOiBsLFxuICAgIGlucHV0VHlwZTogcCA9IFwiY2hlY2tib3hcIixcbiAgICAuLi5kXG4gIH0gPSBlO1xuICByZXR1cm4gbiAmJiAoZC5kaXNhYmxlZCA9ICEwKSwgLyogQF9fUFVSRV9fICovIGUxKHlSLCB7IGNoaWxkcmVuOiBbXG4gICAgLyogQF9fUFVSRV9fICovIGUxKFxuICAgICAgdlIsXG4gICAgICB7XG4gICAgICAgICRpc1J0bDogcyxcbiAgICAgICAgJGlzUmVhZE9ubHk6IG4sXG4gICAgICAgICRpc0Vycm9yOiByLFxuICAgICAgICBjbGFzc05hbWU6IGwsXG4gICAgICAgIHJvbGU6IFwiY2hlY2tib3hcIixcbiAgICAgICAgXCJhcmlhLWNoZWNrZWRcIjogZC5jaGVja2VkLFxuICAgICAgICBcImFyaWEtbGFiZWxcIjogdCA9PSBudWxsID8gdm9pZCAwIDogdC50b1N0cmluZygpLFxuICAgICAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0ID09IG51bGwgPyB2b2lkIDAgOiB0LnRvU3RyaW5nKCksXG4gICAgICAgIHRhYkluZGV4OiAwLFxuICAgICAgICBjaGlsZHJlbjogW1xuICAgICAgICAgIC8qIEBfX1BVUkVfXyAqLyBlMShMUiwgeyAkaXNSdGw6IHMsIGNoaWxkcmVuOiBbXG4gICAgICAgICAgICAvKiBAX19QVVJFX18gKi8gYyhcbiAgICAgICAgICAgICAgZzQsXG4gICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBkaXNhYmxlZDogaSxcbiAgICAgICAgICAgICAgICAkaXNFcnJvcjogcixcbiAgICAgICAgICAgICAgICBuYW1lOiB0ID09IG51bGwgPyB2b2lkIDAgOiB0LnRvU3RyaW5nKCksXG4gICAgICAgICAgICAgICAgdHlwZTogcCxcbiAgICAgICAgICAgICAgICBpZDogdCA9PSBudWxsID8gdm9pZCAwIDogdC50b1N0cmluZygpLFxuICAgICAgICAgICAgICAgIC4uLmRcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgKSxcbiAgICAgICAgICAgIC8qIEBfX1BVUkVfXyAqLyBjKGdlLCB7IGNoaWxkcmVuOiBvICYmIC8qIEBfX1BVUkVfXyAqLyBjKFoxLCB7IG5hbWU6IG8sIHNpemU6IFwieHh4c1wiIH0pIH0pXG4gICAgICAgICAgXSB9KSxcbiAgICAgICAgICB0ICYmIC8qIEBfX1BVUkVfXyAqLyBjKHdSLCB7IGh0bWxGb3I6IHQgPT0gbnVsbCA/IHZvaWQgMCA6IHQudG9TdHJpbmcoKSwgY2hpbGRyZW46IHQgfSksXG4gICAgICAgICAgIWEgJiYgLyogQF9fUFVSRV9fICovIGMoXG4gICAgICAgICAgICBucixcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgY29sb3I6IFwiIzc2NzY3NlwiLFxuICAgICAgICAgICAgICB2YXJpYW50OiBcImxhYmVsLXNtLXJlZ3VsYXJcIixcbiAgICAgICAgICAgICAgZWxlbWVudDogXCJsYWJlbFwiLFxuICAgICAgICAgICAgICBjaGlsZHJlbjogXCJPcHRpb25hbFwiXG4gICAgICAgICAgICB9XG4gICAgICAgICAgKVxuICAgICAgICBdXG4gICAgICB9XG4gICAgKSxcbiAgICAoZCA9PSBudWxsID8gdm9pZCAwIDogZC5lcnJvclRleHQpICYmIC8qIEBfX1BVUkVfXyAqLyBjKHFSLCB7IGNoaWxkcmVuOiBkID09IG51bGwgPyB2b2lkIDAgOiBkLmVycm9yVGV4dCB9KVxuICBdIH0pO1xufSwgeFIgPSAoZSwgdCkgPT4ge1xuICBjb25zdCB7IGlzUGFydGx5T25seTogbywgLi4ubiB9ID0gZTtcbiAgcmV0dXJuIC8qIEBfX1BVUkVfXyAqLyBjKFxuICAgIFNwLFxuICAgIHtcbiAgICAgIC4uLm4sXG4gICAgICBjdXN0b21JY29uOiBvID8gXCJNaW51c1wiIDogXCJDaGVja01hcmtcIixcbiAgICAgIHJlZjogdCxcbiAgICAgIGlucHV0VHlwZTogXCJjaGVja2JveFwiXG4gICAgfVxuICApO1xufSwgeXQgPSBCMCh4UiksIFdSID0gJChTcCkoXG4gICh7IHRoZW1lOiB7IGNvbG9yczogZSwgdHJhbnNpdGlvbnM6IHQsIGJvcmRlclJhZGl1czogbyB9IH0pID0+IG8xYFxuICAgICR7Z2V9IHtcbiAgICAgIGJvcmRlci1yYWRpdXM6ICR7by5jaXJjbGV9O1xuICAgICAgcGFkZGluZzogMnB4O1xuXG4gICAgICAmOmFmdGVyIHtcbiAgICAgICAgY29udGVudDogJyc7XG4gICAgICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgICAgICB3aWR0aDogMTAwJTtcbiAgICAgICAgaGVpZ2h0OiAxMDAlO1xuICAgICAgICBvcGFjaXR5OiAwO1xuICAgICAgICBib3JkZXItcmFkaXVzOiAke28uY2lyY2xlfTtcbiAgICAgICAgdHJhbnNpdGlvbjogJHt0LmJhc2V9O1xuICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAke2UuYmFja2dyb3VuZHMuYmdUZXJ0aWFyeX07XG4gICAgICB9XG4gICAgfVxuXG4gICAgJHtnNH06Y2hlY2tlZCArICR7Z2V9IHtcbiAgICAgIGJhY2tncm91bmQtY29sb3I6ICR7ZS5iYWNrZ3JvdW5kcy5iZ1ByaW1hcnl9O1xuXG4gICAgICAmOmFmdGVyIHtcbiAgICAgICAgb3BhY2l0eTogMTtcbiAgICAgICAgdHJhbnNpdGlvbjogJHt0LmJhc2V9O1xuICAgICAgfVxuICAgIH1cblxuICAgICR7ZzR9OmRpc2FibGVkIHtcbiAgICAgICY6Y2hlY2tlZCArICR7Z2V9IHtcbiAgICAgICAgJjphZnRlciB7XG4gICAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogJHtlLmJhY2tncm91bmRzLmJnVGVydGlhcnl9O1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICBgXG4pLCBSUiA9IChlLCB0KSA9PiAvKiBAX19QVVJFX18gKi8gYyhXUiwgeyAuLi5lLCBpbnB1dFR5cGU6IFwicmFkaW9cIiwgcmVmOiB0IH0pLCBBbiA9IEIwKFJSKSwgQlIgPSAoKSA9PiAvKiBAX19QVVJFX18gKi8gZTEoXG4gIFwic3ZnXCIsXG4gIHtcbiAgICB3aWR0aDogXCIyNFwiLFxuICAgIGhlaWdodDogXCIyNFwiLFxuICAgIHZpZXdCb3g6IFwiMCAwIDI0IDI0XCIsXG4gICAgZmlsbDogXCJub25lXCIsXG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB4bWxuc1hsaW5rOiBcImh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmtcIixcbiAgICBjaGlsZHJlbjogW1xuICAgICAgLyogQF9fUFVSRV9fICovIGMoXCJyZWN0XCIsIHsgd2lkdGg6IFwiMjRcIiwgaGVpZ2h0OiBcIjI0XCIsIGZpbGw6IFwidXJsKCNwYXR0ZXJuMClcIiB9KSxcbiAgICAgIC8qIEBfX1BVUkVfXyAqLyBlMShcImRlZnNcIiwgeyBjaGlsZHJlbjogW1xuICAgICAgICAvKiBAX19QVVJFX18gKi8gYyhcbiAgICAgICAgICBcInBhdHRlcm5cIixcbiAgICAgICAgICB7XG4gICAgICAgICAgICBpZDogXCJwYXR0ZXJuMFwiLFxuICAgICAgICAgICAgcGF0dGVybkNvbnRlbnRVbml0czogXCJvYmplY3RCb3VuZGluZ0JveFwiLFxuICAgICAgICAgICAgd2lkdGg6IFwiMVwiLFxuICAgICAgICAgICAgaGVpZ2h0OiBcIjFcIixcbiAgICAgICAgICAgIGNoaWxkcmVuOiAvKiBAX19QVVJFX18gKi8gYyhcInVzZVwiLCB7IHhsaW5rSHJlZjogXCIjaW1hZ2UwXCIsIHRyYW5zZm9ybTogXCJzY2FsZSgwLjAwNClcIiB9KVxuICAgICAgICAgIH1cbiAgICAgICAgKSxcbiAgICAgICAgLyogQF9fUFVSRV9fICovIGMoXG4gICAgICAgICAgXCJpbWFnZVwiLFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGlkOiBcImltYWdlMFwiLFxuICAgICAgICAgICAgd2lkdGg6IFwiMjUwXCIsXG4gICAgICAgICAgICBoZWlnaHQ6IFwiMjUwXCIsXG4gICAgICAgICAgICB4bGlua0hyZWY6IFwiZGF0YTppbWFnZS9wbmc7YmFzZTY0LGlWQk9SdzBLR2dvQUFBQU5TVWhFVWdBQUFQb0FBQUQ2Q0FZQUFBQ0k3Rm85QUFBYWcwbEVRVlI0QWUxZGFaZFZSWmJkYjhoTUJsbUZZSXVLSHdvRjUxSVI2S3BtU0JSRlVRUWh3Yi9VLzZIN1MvK0FBa3l3ZTNWTERtaXRCclJKbHVKcVZLZ3FRTHVFWHVVQW1rMituTjdMWGllR1RDakp6UGZ1Rk9mZXUrOWFLTHgzSStMY2ZXSy9pQnNuNHV4S2F3UXo0RVVFaUVDaEVhZ1crdW40Y0VTQUNCZ0VTSFIyQkNKUUFnUkk5Qkk0bVk5SUJFaDA5Z0VpVUFJRVNQUVNPSm1QU0FSSWRQWUJJbEFDQkVqMEVqaVpqMGdFU0hUMkFTSlFBZ1JJOUJJNG1ZOUlCRWgwOWdFaVVBSUVTUFFTT0ptUFNBUklkUFlCSWxBQ0JFajBFamlaajBnRVNIVDJBU0pRQWdSSTlCSTRtWTlJQkVoMDlnRWlVQUlFU1BRU09KbVBTQVJJZFBZQklsQUNCRWowRWppWmowZ0VTSFQyQVNKUUFnUkk5Qkk0bVk5SUJFaDA5Z0VpVUFJRVNQUVNPSm1QU0FSSWRQWUJJbEFDQkVqMEVqaVpqMGdFU0hUMkFTSlFBZ1JJOUJJNG1ZOUlCRWgwOWdFaVVBSUVTUFFTT0ptUFNBUklkUFlCSWxBQ0JFajBFamlaajBnRVNIVDJBU0pRQWdSSTlCSTRtWTlJQk9xRVlIRUVabWFBVmd2QXpPTDNablpIQmFqVk1tdU5EZVVjQVJLOURRZFdhMEIxQllCS0d6ZG5kVXNMYU4zV1pWSldqODUyT2tlQVJGOEFNeG5KcTNYZ2gxdkF2LzI3SGRBMWNMM1pBbFlzQS9idUFKWldkVTAwRm9DVFh3VkVnRVJ2QS94bURmakhmd0l1ZlFOVXEyNGEzMGE1Tkc2cFZBRDVBYXBWZ2VGL0JucTNBczFSVHVQVHdMcElkWEl4YmdGdkNxbW1Kb0FISHdMNmR0c2I1YjFZeUI3cWo5alUzUVhJcVA3ZWh3RG93UVU4eUs4OEF1d21Ib2w1L2krRXhpUnc4RlU3aWs1TjJSRmRGdWRDL1ptZXRzYWVPQVhjL0N0UTc3YWovRHlQd0krSkFNZUR4ZnFBRUgxbUhOajhOTkM3eWQ1dHlMOVl3UlMvYjgwQU1ySmYrUllZT0F0Z2FkalhpUlFmbFZVbmhBQkg5RGFBbkc0Q2xXWEFvVjMyNXFxQ0ZUbi9ZM04wRUVBVDBHQlRHMUR5bGtBSWtPaHRBRzlJTkFIczZRVWVXZ1VZNGdjbXU0bnJBemo1TWZDbnEwQzFCNUNSbmhjUnVCY0NKUHE5VVBtYnoyVDBuQjRISHY4MXNIT0wvZEtQcUg5emEyYi85Q3Z2dDBhQjkvOWdwKzh6emN5YVowTTVRNEJFYjlkaE1sclc1bGJmaFdoYXJ2NEJvUGwvTnVhdmF2ZWVGb0JvQnhmajJ1MERaZ1FmQTE3N2UrRHhSKzNpVitqM1lqOVZIL2tTT0hjUnFDNEZtb3ArZ05yRmx2ZWxqd0JIOURZeGxsWHU2U2xnMVJwZ1g2OHRwR0g2WHE4QlkrUEErNmZzaklNamVwc09MZGx0SkhvbkRwY0Z1S2FkdnZkMDZWaVVrNDB6Y2gwWkJNWitCT3BkaktsMzR0S3kzRXVpZCtEcFdnVm9OWUIvK0EydzhTbGJVRWI2a0plc0ZZZ05sNzhCUGpqSG1IcElYMmh1bTBUdnhEdEM5R21ndmdMb2U4MFdEUDJlTGxiSXZuZTVqcDEwUjJrRC8vaFlhL2hmVFFpUTZCMTZ3NHpnRThEZVh1RCtGYnFtNzhPZkFGZS9BZW9TVTNkVCtnNGZqN2NYRkFFU3ZVUEh5Z0pjY3h4NFpnT3c0eVZiV011aTNQWHZnWUgvQkxDRTcra2R1clh3dDVQb0VWeHNZdWhkd01IWGJXRU5vNmVQNjVzdHNRMmd3dXd6RVR4YjNDSWtlZ1RmK3BqNi9xM0FJMzluUjgvUWkzSStwbjcyYytDenkwQnRDYWZ2RVZ4YjJDSWtlZ1RYQ3FtYkVsTi9DRGpvRHJyNEJiRUkxU1ZTUkVaMGlhbVBqZ0g5Y3RDbG0zdmZFd0cySUpXUTZCRWRhYWJLTThBN3I5anNMaExQRHIzWTdVZjEvZytCMFIrQnJqclRURVYwYitHS2tlZ1JYU3JUOTVrR3NIVWo4T0lHTzMwUHZTZ25hd1VTN3J0d0dUajdLWUJsUUlzSFhTSjZ1RmpGU1BTSS9wVHB1MnlKWGI0UzJQZEt4RXBTS0ZaeEh2MjlUTjk1RVFHSEFJa2VveXVZRVh3U09MQUxXTkpqODdpRm5yN1B1UGo1NEJuZytuWEcxR080dDFCRlNmUVk3cFRSVTlKTS9lWUo0R1ZGYWFZa2dlVzFHOERRYWJjbGxpZmFZbmk1R0VWSjlCaCtsTkY3V3Q2TGw4NmxtWXBSWFhKRkhiR1B5WW0yQ2FCT0x5ZUhiVTVyWWhlSTZUZ1RWbXNBYjdrMFUyYjFQZkQ4M1cvZytlQU1jT2tLVU9rQi9KUSs1dU95ZUU0UklORmpPczdFMUNlQVI5WUNiKzZ3bFlWZWZaY0JYWDZBR2hQQTBXRzdKZFlmWjQzNXVDeWVVd1JJOUFRY1oyTHFWYUR2VlZ1WjM0NmFRTld4cXpneEJOeitDYWhMVEozdjZySHh6R3NGSkhvQ25qTWp1TVRVTndQUFB1YlNUQVZHVnFidk10czQveFV3OHJsTlYrMm45QWs4TXF2SUdRS0J1MlBPMEpySFhDR1VLTGlzV20yUHI4cHQ4bG5JU3daditRR1MxTlRIWlZFdXNEMGhzV0RiVk81S3JBK1lCQlJUd09IZDl2MjRxV0JIbWwrQTZ4OEdibjFINmFiRW5KM0RpamlpSitRMEdUMjlkTk1PUlRGMStRRzZlaDA0S2RKTnNpV1dDU2tTOG5pK3FpSFJFL1NYVVhDNUR6amt0c1JxU0RQbHQ4U2FjK3JUbEc1SzBOMjVxb3BFVDlCZGh0ampsRzVLRUZKV2xSQUNKSHBDUUVvMVp2RnJIRmkvVHJGMGs2U1pVckIra0NEc3JLb05CRWowTmtEcTZCYXpXMlV1UzZ5bTJQWHhRYUI1MjBvM2FiS3JJM3g1Y3lRRVNQUklzTTFmeU1UVXg0Qlhmd3M4cGsyNjZZczU2U1l1eXMzdnd5SitRNkluN0ZXSm44czU5ZFZyZ1AzS3BKdHVlK21tZXNJUHplclVJMENpcCtFaTJaelNCQTd1QnRSSk53MEJZejlRdWlrTnQydXVrMFJQd1R0R3Vta00yQ2JTVFUvYUJvTHZsSk8xQTVGdStobzRLZEpOakttbjRIbTlWWkxvYWZqR1NUZlZSTHBwdDIxQVEwemRuMHMvS3RKTjNEaVRodWZWMWttaXArUWFzMUZsQW5oVHFYVFROVW8zcGVSNW5kV1M2Q241UlZiZm14UEFjK3VCWG8zU1RTN05sTjhQbnhJTXJGWUpBaVI2aW80d0pPb0dEcmpwdTRhUWxvK2ZlK21tS2xmZ1Urd0JlcW9tMFZQMGhZbXBONEQ5Mi9SSk41MjVZS1dicXBSdVNyRUg2S21hUkUvUkY3TFMzcHgwMGszK29FdGd4R1ZFcDNSVGlrNVhXblhnYnFjVWxRVE44bE5sSTkxVXRjZEVRK2VBbUpWdStnZ1l2VW5wcGdUZHJiWXFFajFsMThqMGZVWmk2cHVBNTljcmsyNjZCSnloZEZQS1BVQkg5U1I2eW43d1cyS1gvUXJZNzVKSGFranJOSHRPZlNCbEFGaTlDZ1JJOUF6Y1lCYmxKcTNFc3BGdWFvWlA0ZVpmS1FaTzN5SGR4Q3l4R2ZTR01FMlE2Qm5nYnFidjQ4QnptcVNiV2xidStkci9Bc05ubkhRVGQ4dGwwQnZDTkVHaVo0UzdTRGZWbHN4Sk42a1lQSjBSUnVTQjBrMFo5WVF3elpEb0dlRnVwSnZHclhUVHc2dmQ2bnZnNVhlL2dVZWtteTVUdWltam5oQ21HUkk5STl4TlRGMmtteDRGOW15M2pZWSs2Q0lEK2kra20xUk1OVEp5U29tYUlkRXpkTFpaQUtzb203Njc1ejh4RE56KzJXNm04UXQxR1VMRHBsSkdnRVJQR2VBN3EvZGJZbituVUxwcDVFdGc1QUtsbSs3MFY1SCtUcUpuNkUyWnZvdDAwK29IN0x1Nk5DMmZoYnhrcGk0L1FKUnVDdW1GOU5zbTBkUEgrSzRXekh2NUZQQ3VRdWttMFdpamROTmQ3aXJNUDBqMGpGMXBwdS9qd09hbmdSMUt6cW5MM25lWldWejVGaGdRNmFhbGxHN0t1RnVrM2h5Sm5qckV2MnhnU25iR2lYVFRMdnRkNk5WM3NjTDhBQUU0TW1nVFc0WitwZmdsYXZ3a0RnSWtlaHowSXBZMXhHN29sVzY2Y2hXbzlRRCtsRnZFeDJReFJRaVE2QUdjWVJhL0pxeDBVKzltYTRBZlVRT1lZNXFVa0ZxdEJ0d2FCWTUvWktmdmxHNEs1WTNrMnlYUms4ZTB2UnJOYnBXNUxMSFFzRkhGMlhCOEdKaDIwazBxN0dvUFVkNjFBQUlrK2dMZ3BQbVZHY0Vid0d0T3VxblpDaTlwN0tmcUl4ZUI4LzhOVkpjQ1loZXYvQ05Bb2dmeW9TeDJUVThDcXg4RTl1MndSbWlZdmt1YUtaRnVrbEVkVEJ3WnFIY2szeXlKbmp5bTdkY29tMlZhUU4vcitxU2JqZzBERFVvM3RlOUw1WGVTNkFFZFpLU2JHbGE2NllVbnJDR2h3MXArUC82bHI0RVBSaWpkRkxCN0pObzBpWjRvbkIxV0p0Sk5VNEJJTjczN3VpMnJJYVkrSzkzMEFjREZ1QTU5cXZSMkVqMndZMHp1dGtsZ3p3NWc1UXE3NXp6MHFPN1BxUTkvQW56OU5WQ1htRG9YNVFMM2xIak5rK2p4OEl0ZFdoYmdtZzNndVExQTcwWmJuVWxTRWJ2bTZCWEk2cnNzeWwzL0hoaHdhYVlvM1JRZFR3MGxTWFFGWGpEdnhTTGQ1S2J2R2taUFk1TnNpWlVzc1EyZ1dsTUFGRTJJakFDSkhobTY1QXFhc05vWXNIOHI4TWdEZHV0cDhPbTcyendqMGswWEx0dVl1b1lmb09SUUwxZE5KTG9DZnd1cG0zSk8vV0diRWxwTTBoSlRIeDBEK29jQWRIUHZ1NEt1RXRrRUVqMHlkTWtXOUZObGtXNFNrc3ZvR1RnbnhleWhsdjRQS2QyVXJMZXpyNDFFeng3emU3WW81QmJwcHEwdkFTOXVzTkpOWGszbG5nVXkrTkQ4MkZTQXp5NEJaMFc2U2M2cE56Tm9tRTBramdDSm5qaWswU3FVNmZ2MEZMQjhKYkRQS2ErR2ZrK1hKL0d2RUVkbFVhN0NzSG8wNzRZdlJhS0g5OEdzQllaVVhycXBHMmhxa0c1eThmT1RUcnFwcThmT05tYU41bDl5Z1FDSnJzaE5NbFdmRWVtbUo0R2RTczZwUzB4ZHpxa2I2U2FtbVZMVVd6b3poVVR2REs5VTc1YkZOeVBkdEhRdXpWU3FEYlpidVF1MXlVRVhURmpSaDNhTDhqNGRDSkRvT3Z3d2E0WFpGZGVZazI2UzgrQ2gzOVY5L1B5RDAwNjZhUW5BblhLekxzdkZYMGgwWlc0eWkzSVR3TnExd0J2YnJIR2hEN3JJZ0M0L1FHTVRnQkZrN0dGQ0NtWGRabEZ6U1BSRklRcHdnMkVXMFBkcWdMWVhhZkxFS1NmZFZPZWkzQ0pRcWZxYVJGZmxEbXVNV1gyWG1Qb1c0Tm5IN2VqcHcxeWh6UFV4OVhNWEtkMFV5Z2R4MmlYUjQ2Q1hVbG1admh2cHB0WEFXeTdOVk9qM2RKbGt5SStOckJuSXFBNzJuSlM4bjA2MWRGYzZ1TWF1MWJ5WFR3R0hGVW8zbmZnUXVQVlhvTjdONlh0c1IyZFVBWW1lRWRDZE5pT2pwOFRVdHp3TmJIZm4xSU5QMzUxMDA1LytBZ3g4VE9tbVRuMGE4bjRTUFNUNmk3UXRDcWVWNWNDN3I5a2JRMC9meFFxZkZPT29sMjVpRDFyRWl6cStwcHQwK09HZVZwanArd1R3K2c1Z3pTcTNKVGJ3a1RhZjUvM2tXZURxTmFERzQ2djM5SjIyRDBsMGJSNjV3eDZacWsrUEF4dldBVHMzMlM5Q1Q5L2xPSzJNNmpkSGdmNC9BSkROTXp6UmRvZlhkUDZWUk5mcGx6bXJYRXo5a0VzejVjK3R6OTBRN20vSEIrZWttelRaRlE0UnZTMlQ2SHA5WXl3ekkzZ0RlRldrbTliYWhCU2hkOHJkSmQxMGtXbW1sSGNoMjQveVlHU1piVFJiWWtXNmFRMndyOWNpb1dINjdxV2JURXlkMGszcXV5aEhkUFV1c2drZjBMVEtxejExSGJuZi9hS2M3SDJuZEpQK1RrU2k2L2NSdkhUVDF1ZUJGNSt5Qm9jT3Rjazd1UVFBTGwwRFRvcDBrNlNab3NpRDJ0NUVvcXQxelIyR09lbW0rZ3JnMEc3N2VlajNkTEZDRWxMSWRWU2ttM2lwUm9CRVYrMmVPZU5Nb3NnSnUvZDk1WDA2cHU5K0JCLzZMK0RhTjA2NlNhSUV2TlFoUUtLcmM4bTlEWklGdU9ZNDhPd0dZTWRMOWg2L1MrM2VKZEwvMUtlWnV2NGRNSGphVHQ4WlUwOGY5eWd0a09oUlVBdFV4c1NxdTRHRExxYnVGOFFDbVdPYmRTUDQ3MDlhNmFZS3BadUN1bU8reGtuMCtaQlIrTG1QcVh2cEpyTWdGbmhMckkrcG4vMGN1UEJIb01aRk9ZVTloNmVLVlRwbFBxTmtwYjBwTWZXSGdRTzc3RjJocCsveVl5TXhkU1BkSkFkZHVQZDlQdmNGL1p3amVsRDRPMi9jVE44QnZQT3lQdW1tNDVSdTZ0eWhHWlVnMFRNQ09xbG1aUG91MGszYk5nRWJuM0RLcTRHOUtLdnZFdTc3bE5KTlNiazU4WG9DZDVIRW42ZndGWm90c1U2NmFlL0w5bkZEYjU0Uks3eE9IS1diZEhaQkVsMm5YeGEweWl6S1RRSjlyd0E5VHJwcHdRSVpmT256dkErY0JhN2ZBQ2pkbEFIb0hUUkJvbmNBbHBaYnpmUmRwSnVlQWw1MjBrMmhGK1ZNVEwwS1hMME9uRHBqWStvcXduOWFuQmJZRGhJOXNBT2lObStrbTVZb2syNXlEMk5FSGlqZEZOVzFxWlFqMFZPQk5mMUt6UWcrYnFXYkhwSTBVd3FsbTZxVWJrcS9JN1RaQW9uZUpsRGFiak9MY2s2NmFjOTJhNTE1ZHc5b3FFbUc0NldiSlBjN3Bac0NldVB1cGtuMHUvSEkxNytFV1ZYZ29KZHVVblNnNU1Rd01QWXpVS2QwazRvK1JhS3JjRU0wSTh3STNnQzJiUWFlZll6U1RkRlFMRWNwRWozSGZwYnB1NUZ1ZWdEWTY5Sk1oWTZwbTBtR2syNlNuWEltTzBXT01TNks2U1I2emoxcEVsQk0yNFFVc2tEWFZKQjYyY2ZValhUVDk1UnUwdERGU0hRTlhvaGhnNSsrYjlFbzNmUS9sRzZLNGRwRWk1TG9pY0lacHJJcGtXNjZEempzcEp0VXBKbHlQY3RzaVczYXZmQmgwR0dyZ2dDSlhvQitZSWc5RHV4eDBrMUdzeTN3T1hXL0srN2t4OENmcndIVkhuc0Fwd0J3NS9JUlNQUmN1dTF1bzJYNkx0Sk42OWNCdlM3TlZQQ1l1cGR1K2hsNFg2U2JsbEs2Nlc2dlpmc3ZFajFidk5OcnpleFdBUTY5WVp2dzU5YlRhN0Q5bXQ4YkFKcTNnYW9JUFNpSzliZi9CUG0vazBUUHZ3L05FNWdSZkF4NDdRN3BwdENoTnA5bTZ2d1h3SGtuM2RRazBZUDBPQkk5Q096Sk4ycTJ4RTRCcXg4RTN0NWg2dzk5b3Mybm1ibzlEc3hLTjVIb3lUdS9qUnBKOURaQXlzMHRzZ0RYQXZwZUI3cTdkT1IrOTR0eVI0WW8zUlN5SDVIb0lkRlB1RzJSYnBwcEFDTGR0UEZKVzNubzZidGZLNkIwVThMTzdyQTZFcjFEd0ZUZkxsbGlwNEN1RlVDZm9waTZaSW1WNjVqa2ZwY3JjT2pQV1ZHcS81SG9CWE8zeWQwMkNieTlFOUFpM2VTbjcwT2ZBRmRGdW9rcG9UUHZkU1I2NXBDbjI2Q3N2b3QwMHpQcjU2U2JWTVRVYThDMzN3RkRsRzVLdHdQTVV6dUpQZzh3ZWY3WUhDb1I2U2Fudk9yRkVJTStrMXR0UHpJQVlCeWdkRk8yM2lEUnM4VTdrOWJNQ040QTltOERIbjRBa0FXeDBJdHlQcVorNWdKdzRUSlFXMEk5OVV3NmcydUVSTThTN1l6YUVsSjc2YWFEcjloR05VemY3NUp1NHQ3M2pIcUQ4MyttcmJHeHpCRHdZYTEzZGdHeWNVYW03NkVYdS8yb2Z2d2pZUFFtMENWcHBqSkRwTndOY1VRdnFQOWxCQmZwcHEwdkFTOXNjTlAzd042ZWxXNzZDdmo0VTN2UXBhVWdVVVpCdThCZGp4WFk5WGZad244a2lJRGZFbnZmU3VCdE4zMFAvWjR1aitlbG00Nkk4bXJvS1VhQ2VHdXZpa1RYN3FFWTlwbjNjaS9kMUtVcnpkVGdHZURHRGFhWml1SGVqb3FTNkIzQmxhK2JaZlNjVVNyZGRPVzZpNmt2czlscjg0VnMvcXdsMGZQbnM3WXRscG14bDI3cTI5VjJzY3h1UENZaUR4TkFuYjB3ZGN3SmNlb1FoMjNBU3pmdDNRazhlTDh5NmFZendCK3ZBSlVldTFnWUZxbGl0MDZpRjl1L1pxUE10Sk51ZXN1ZFV3K2RQRkpDYXZJRE5EWU9ISkZSZlltTzlZTWlkd1VTdmNqZTljOG16THBEdWtsVDdQckVFS1didkp2Uy9EK0puaWE2U3VyMlcySkZ1dW1aZFhielRPaWRjbVlEVHdVWStSSTQvemxRV2NvdHNXbDJGeEk5VFhTVjFDM3hjNjNTVFpLYXVsK203KzdNdWhMSUNtY0dpVjQ0bDk3N2dieDAwK0hkZ0dTaTBTVGRkUHdVOE5OM2pLbmYyM1BKZkVxaUo0T2orbHI4OUgzTE04QjJKYm5mWmUrN3pEYisvQmRBaEI0azk3dUtJN1hxdmRtNWdTUjY1NWpsdG9TUmJsb09ISFo2NnFGWDN3VkluNm5XU3pkcDJLYWJXd2N2WURpSnZnQTRSZnZLRUhzQ2VLTVhXTE5LVjVaWUw5MVU0L0hWVkxvZGlaNEtyRG9ybGVtN1NEZHQrRFhRdThuYUdIcjFYWTdUeXFoKzAwczNMYUYwVXhxOWgwUlBBMVhOZGJZQTFJRStsMmJLbjF2WFlITC9JTkFhYzJtbU5BWDdOWUFUMHdZU1BTYUFlU3RlbFREV0dMRDdkOEJqYTExQ2lzREhSWDFDaXBFdmdITVhnWm9jZENIUkUrMWFKSHFpY09xdlRCYTdwcWVWU2pjMWdILzFNWFVTUGRIT1JLSW5DbWVPS2hQcHB0MUFkMTNIb3B3UHF4bnBwaCtCZWhjUHVpVFptMGowSk5ITVNWMnlZYWJWQUxhOUFMejRsRFU2ZEZqTHg5Uy91Z2FjSEdGTVBlbXVSS0lualdnZTZoT2lUd04xa1c3U0dGT25kRlBpdlloRVR4elNmRlJvUnZCSlFNNnBhNU51R3Y0RStKclNUWWwySkJJOVVUanpVNW5FejBXNjZia051cVNiSlBlN1NEY05lT2ttQ1FmeWlvMEFpUjRid3Z4VzRLV2JEdmlZdWdKUytiaitVY2tTUyttbXhEb1hpWjRZbFBtcnlPeUtHNXVUYnZJTFlpR2Z4TWZVVDM4R2ZDN1NUYklsVnNFUFVFaE1rbWliUkU4Q3haeldJZS9wb3FmK3dNUEFRWmM4VXNXVzJCb3dPZ2IwRHdIZzN2ZEVlaGVKbmdpTSthM0VUNVhmZVVXUGRKTzNxZjlEU2pjbDFiTkk5S1NRekdrOU1vS0xkTk8ybDREbjExTzZLYWR1WE5Sc0VuMVJpSXA5ZzlrU093VXNYd25zYzlQM3dGdmZEZUNVYmtxMjM1SG95ZUtaeTlyTWUva1VjR0FYME5PdFF6bkZSQVJndzJ4R3VvbUxjckg2Rm9rZUM3NWlGRGJTVFEzZytTZUFuZTZjdXMvOEV1b0paZlc5VmdPdTNnQ0d6N2d0c1R6b0V0a2RKSHBrNklwVGNGYTZhUmx3eUUzZlZYREtHWEZzR01Ba3Badmk5RGdTUFE1NkJTcHJSdkFHOEpha21icGZ5VGwxRnovL0QwbzN4ZTVwSkhwc0NJdFJnWW1wVHdDUFBncThxVkM2NmFpTTZwUnVpdHpaU1BUSTBCV3ZvSWxmaTNTVFF1WFZFOFBBMkNoUXIvT2NlcFNlUjZKSFFhMmdaY3pxdTV4VDMyS2xtNW90SVBST3VWbnBwaStBa1F0QVpSbTN4RWJwZmlSNkZOUUtXa2FtNzE2NlNkN1Y1WkxQUWw2eUhpYy9OcEtUL29Ta21XS1BqZVFPd2hZSnR1SVc4dEpONzRwMGt4eGxiWVovVmg5VGYyOFl1RVhwcGtnT0lkRWp3VmJjUW43NmJxU2JOdHJuREQ1OWQ5Sk5WNzRGQmluZEZLbnprZWlSWUN0MklTUGRkQi9RNTArMEJaNitDOXArQTgrUkFRRE44SzhVZWVzQkpIcmVQSmFCdldiNlBnNjhxVlM2NmNvMWQwNWR4YTZlREJ5U1FCTWtlZ0lnRnEwS21hb2I2YVoxbEc0cWltOUo5S0o0TXVubmtORlNzWFJUOHpaZ1ZHYzRxcmZsZVJLOUxaaktkNU5aZ0JQcHB0OEM2NVJKTjUyVG1Qb1hRSlhTVFcxM1RCSzliYWpLZGFNL3A3NTZEYkRQYlluMUMyS2hrSkNkZTVJbDluWURlRjlpNm5VQUhOSGJjZ2VKM2haTUpiMUpWdHRid0VHRjBrMUhoNERHRDVSdWFyZG5rdWp0SWxYQys3eDAwM2FSYm5yU0F0QlZ0K2ZFNWF4NGlEL3lTaUdqdWtnM0RYNEtZQm5nTjlTVTBFVnRQektKM2paVUpieFJwSnVtckhUVElaZjdYWGJLaGZ3ejNaeWJyZi9MVVFEVHdJeUNPTC8yM2lGdk9ieUl3THdJbU54dDR6WWh4Zm1Md05SMCtNMHFzbjR3S1dtcWZ3WGMvQW00ZnluUTRpYWFlWDBvWDFSYUkxek9XQkFoZm1tRzBJb01DVFZGWUZTQUdSbmQ1WWRIa1ZsYVRlR0lydFV6bXV4eTZxc3lUZFoweWNoT2tyZm5FUks5UFp4S2YxZm80NnFsZDBCTUFMZ1lGeE5BRmljQ2VVQ0FSTStEbDJnakVZaUpBSWtlRTBBV0p3SjVRSUJFejRPWGFDTVJpSWtBaVI0VFFCWW5BbmxBZ0VUUGc1ZG9JeEdJaVFDSkhoTkFGaWNDZVVDQVJNK0RsMmdqRVlpSkFJa2VFMEFXSndKNVFJQkV6NE9YYUNNUmlJa0FpUjRUUUJZbkFubEFnRVRQZzVkb0l4R0lpUUNKSGhOQUZpY0NlVUNBUk0rRGwyZ2pFWWlKQUlrZUUwQVdKd0o1UUlCRXo0T1hhQ01SaUlrQWlSNFRRQlluQW5sQWdFVFBnNWRvSXhHSWlRQ0pIaE5BRmljQ2VVQ0FSTStEbDJnakVZaUpBSWtlRTBBV0p3SjVRSUJFejRPWGFDTVJpSWtBaVI0VFFCWW5BbmxBZ0VUUGc1ZG9JeEdJaVFDSkhoTkFGaWNDZVVDQVJNK0RsMmdqRVlpSkFJa2VFMEFXSndKNVFJQkV6NE9YYUNNUmlJa0FpUjRUUUJZbkFubEFnRVRQZzVkb0l4R0lpUUNKSGhOQUZpY0NlVUNBUk0rRGwyZ2pFWWlKQUlrZUUwQVdKd0o1UUlCRXo0T1hhQ01SaUluQS93TmVzZ2plQmNCK3h3QUFBQUJKUlU1RXJrSmdnZz09XCJcbiAgICAgICAgICB9XG4gICAgICAgIClcbiAgICAgIF0gfSlcbiAgICBdXG4gIH1cbiksIFNSID0gKCkgPT4gLyogQF9fUFVSRV9fICovIGUxKFxuICBcInN2Z1wiLFxuICB7XG4gICAgd2lkdGg6IFwiMTYwXCIsXG4gICAgaGVpZ2h0OiBcIjE2MFwiLFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2MCAxNjBcIixcbiAgICBmaWxsOiBcIm5vbmVcIixcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIGNoaWxkcmVuOiBbXG4gICAgICAvKiBAX19QVVJFX18gKi8gYyhcbiAgICAgICAgXCJwYXRoXCIsXG4gICAgICAgIHtcbiAgICAgICAgICBzdHlsZTogeyBtaXhCbGVuZE1vZGU6IFwibXVsdGlwbHlcIiB9LFxuICAgICAgICAgIGQ6IFwiTTIuNjY2MDYgMTAwLjU1N0MzLjA3NTY1IDEwMi4xMDQgMy41MzAwMiAxMDMuNjMxIDQuMDI5MTQgMTA1LjEzOUM0LjQ0MzY4IDEwNi4zOTQgNC44ODg4OSAxMDcuNjM0IDUuMzY0NzcgMTA4Ljg2MlYxMDguODcxQzUuODM5MTcgMTEwLjA5NyA2LjM0Mjc1IDExMS4zMDkgNi44NzU1MSAxMTIuNTA3VjExMi41MTRDOC41NzQ2NSAxMTYuMzMgMTAuNTcxMSAxMjAuMDA2IDEyLjg0NjUgMTIzLjUwOUMxOC4wNjg4IDEyMS44MzggMjkuNDQzMiAxMTcuNTE1IDQ4LjAxMjggMTEyLjM1N0M2Mi40ODIxIDEwOC4zMzggOTQuODM0IDEwMC4zMjMgMTI0LjQ2NyA5My45NTU4QzE0My4zNjMgODkuODk3IDE1My42MzUgODcuMzUyIDE1Ni44MDIgODYuMzE5MkMxNTcuNTQ5IDg2LjA3NSAxNTguODU1IDg1LjUwNzQgMTU5LjUgODQuODk0NUMxNTkuNzM0IDg0LjY2OTUgMTU5Ljg3NSA4NC4zNjU2IDE1OS44OTggODQuMDQyQzE1OS45NjQgODIuNzAzNCAxNTkuOTk4IDgxLjM1NjcgMTU5Ljk5OSA4MC4wMDE4QzE2MC4wMDIgNzMuNzM4MSAxNTkuMjcyIDY3LjQ5NTQgMTU3LjgyNCA2MS40MDE1QzE0My45MzkgNjUuNTcxNSAxMDYuNzExIDczLjI4NjggNzUuNDgwOCA4MC44MDg0QzQyLjI2ODIgODguODEgMTMuNTUyMiA5Ny41NDAzIDIuNjY2MDYgMTAwLjU1N1pcIixcbiAgICAgICAgICBmaWxsOiBcInVybCgjcGFpbnQwX2xpbmVhcilcIlxuICAgICAgICB9XG4gICAgICApLFxuICAgICAgLyogQF9fUFVSRV9fICovIGMoXG4gICAgICAgIFwicGF0aFwiLFxuICAgICAgICB7XG4gICAgICAgICAgc3R5bGU6IHsgbWl4QmxlbmRNb2RlOiBcIm11bHRpcGx5XCIgfSxcbiAgICAgICAgICBkOiBcIk0zLjc1NzU2IDU1LjcxMDVMMy43NDU2OSA1NS43NDkxTDMuNzM0NTYgNTUuNzgyNEMzLjcyMTk1IDU1LjgyMzMgMy43MDkzMyA1NS44NjMzIDMuNjk1OTggNTUuOTA0MUMzLjYzMjE2IDU2LjEwNjkgMy41NjkwOSA1Ni4zMTAzIDMuNTA2NzYgNTYuNTE0MUMzLjUwMzA1IDU2LjUyNDQgMy41MDAwOCA1Ni41MzQ4IDMuNDk3MTIgNTYuNTQ1MkMzLjQ4MDc5IDU2LjU5NzIgMy40NjUyMSA1Ni42NDkxIDMuNDQ5NjMgNTYuNzAxQzMuMzQyNzggNTcuMDUyMiAzLjIzODQgNTcuNDA0IDMuMTM2NSA1Ny43NTYyTDMuMTI2ODUgNTcuNzkwM0MzLjAyMzQ2IDU4LjE0NTUgMi45MjMwNCA1OC41MDIxIDIuODI1NTkgNTguODYwMkMzOC4wNzEzIDUwLjMxMDIgNjIuODc1NCA0My4zMDczIDg0LjI3MTQgMzYuNjE4MkM5Ni44MTE1IDMyLjY5NjggMTA2LjAwNyAyOS4xMzUyIDExMi4yMTEgMjUuOTk4OEMxMTIuMzU0IDI1LjkyNjEgMTEyLjQ5NyAyNS44NTM0IDExMi42MzggMjUuNzgwNkwxMTIuNzY0IDI1LjcxNTNDMTEyLjg2MiAyNS42NjQ5IDExMi45NiAyNS42MTQ0IDExMy4wNTYgMjUuNTY2OUwxMTMuMjEyIDI1LjQ4NTNMMTEzLjQ2NSAyNS4zNTE4TDExMy42MjggMjUuMjY0MkwxMTMuODY1IDI1LjEzNzNMMTE0LjAyOCAyNS4wNDgzTDExNC4yNTggMjQuOTIyMkwxMTQuNDE1IDI0LjgzNTNMMTE0LjY0NiAyNC43MDYyTDExNC43OTQgMjQuNjI0NkwxMTUuMDM3IDI0LjQ4NTlMMTE1LjE2MSAyNC40MTU0TDExNS40ODYgMjQuMjI2MkwxMTUuNTE3IDI0LjIwNzZMMTE1Ljg2NCAyNC4wMDIxTDExNS45NyAyMy45Mzc1QzExNi4wNDUgMjMuODkwOCAxMTYuMTI1IDIzLjg0NCAxMTYuMjAxIDIzLjc5NzNMMTE2LjMyOSAyMy43MTg2TDExNi41MyAyMy41OTMyTDExNi42NjEgMjMuNTEwOUwxMTYuODUxIDIzLjM4OTlDMTE2Ljg5NCAyMy4zNjI1IDExNi45MzcgMjMuMzM1IDExNi45NzkgMjMuMzA2OEMxMTcuMDQyIDIzLjI2NzUgMTE3LjEwMyAyMy4yMjc0IDExNy4xNjMgMjMuMTg3NEwxMTcuMjg3IDIzLjEwNjVMMTE3LjQ3IDIyLjk4NDFMMTE3LjU4NCAyMi45MDk5QzExNy42NSAyMi44NjUzIDExNy43MTUgMjIuODIxNiAxMTcuNzc5IDIyLjc3N0wxMTcuODcxIDIyLjcxMzJDMTE3Ljk2NSAyMi42NDc5IDExOC4wNTggMjIuNTgyOSAxMTguMTQ5IDIyLjUxODFDMTIwLjE4IDIxLjA1OTMgMTIzLjE3IDE4LjQxMjYgMTIyLjk1NSAxNS4yNzE4QzEyMi45NTUgMTUuMjQ0MyAxMjIuOTUgMTUuMjE2OSAxMjIuOTQ4IDE1LjE4OTRDMTIyLjggMTMuNjUyIDEyMS4zOTcgMTEuNDU5NCAxMTcuMTYxIDkuMTM2MjJMMTE2Ljg5MyA4Ljk5NjczTDExNi41NzcgOC44MzJMMTE2LjE1MyA4LjYxNTM0TDExNi4wMDQgOC41NDExNEMxMTUuNjk5IDguMzg2ODEgMTE1LjM5MiA4LjIzNDQ1IDExNS4wODQgOC4wODQwN0wxMTQuODg4IDcuOTg3NjFMMTE0LjQxNCA3Ljc1OTgyTDExNC4xNjkgNy42NDQwN0wxMTMuODAzIDcuNDcxMThMMTEzLjUzNCA3LjM0NzI3TDExMy4yNTUgNy4yMTgxN0wxMTIuOTU4IDcuMDg0NjFMMTEyLjcwNSA2Ljk3MTA4TDExMi4zOTQgNi44MzE1OUwxMTIuMTY1IDYuNzMwNjdMMTExLjgzMSA2LjU4MjI4TDExMS42NTQgNi41MDgwOEMxMTEuMjIxIDYuMzIxMDkgMTEwLjc4NSA2LjEzNzgyIDExMC4zNDggNS45NTgyNkwxMTAuMjMyIDUuOTEwMDNMMTA5LjgyNSA1Ljc0NTMxTDEwOS42ODEgNS42ODc0M0wxMDkuMjcyIDUuNTI1NjdMMTA5LjE0IDUuNDczNzRMMTA4LjcxIDUuMzA2NzlMMTA4LjYzNSA1LjI3ODU5QzEwNy45NiA1LjAxOTM5IDEwNy4yODEgNC43Njk1OCAxMDYuNTk4IDQuNTI5MThMMTA2LjU3MyA0LjUyMDI3QzEwNi40MDkgNC40NjI0IDEwNi4yNDUgNC40MDUyNiAxMDYuMDgxIDQuMzQ4ODdMMTA2LjAyIDQuMzI4MUwxMDUuNTI2IDQuMTU5NjZMMTA1LjQ5NSA0LjE0OTI4QzEwNC42MTUgMy44NTI0OCAxMDMuNzI5IDMuNTcyIDEwMi44MzcgMy4zMDc4NUwxMDIuODE0IDMuMzAxMThMMTAyLjI5NSAzLjE0OTA3TDEwMi4yNTYgMy4xMzc5NEMxMDEuNTA0IDIuOTIwMjkgMTAwLjc0OCAyLjcxMzc2IDk5Ljk4NTggMi41MTgzN0MxMDAuMDM2IDMuMTMwNTIgMTAwLjA1IDMuNjc4ODUgMTAwLjAwNCA0LjA3NjU2Qzk5Ljc4NTUgNS45MjcwOSA5OC44NDM5IDcuNDg5NzMgOTcuMzkwMyA4Ljg2Njg4Qzk0LjM4MDYgMTEuNzE3NiA4OC40MDQ1IDE0LjY4MTkgODAuOTc4NCAxNy4yOTUyQzczLjA0OTkgMjAuMDk0NyA1Ni41NzUgMjUuNTIxNyA0MS45NzE0IDI5LjE4MTJDMzIuMTc2OCAzMS42MzY1IDE5LjI2NTcgMzQuODMwNyAxMy4wNTg3IDM2LjE4MTJDMTIuODE4MyAzNi41NDc3IDEyLjU4MTQgMzYuOTE2MiAxMi4zNDc5IDM3LjI4NjhDMTIuMzM4MiAzNy4zMDE2IDEyLjMyODYgMzcuMzE2NCAxMi4zMTk3IDM3LjMzMTNMMTIuMzA5MyAzNy4zNDY5QzEyLjI3IDM3LjQwOTIgMTIuMjMwNiAzNy40NzA4IDEyLjE5MjEgMzcuNTMzMUMxMi4wOTcxIDM3LjY4NDUgMTIuMDAyNiAzNy44MzYzIDExLjkwODYgMzcuOTg4N0MxMS44OTMgMzguMDEzMiAxMS44NzgyIDM4LjAzNzYgMTEuODYzMyAzOC4wNjI5QzExLjg0ODUgMzguMDg4MSAxMS44Mjc3IDM4LjEyIDExLjgxMDcgMzguMTQ4OUMxMS43OTM2IDM4LjE3NzkgMTEuNzYyNCAzOC4yMjMxIDExLjczNjUgMzguMjY0N0MxMS42NDM3IDM4LjQxMzEgMTEuNTUxIDM4LjU2ODIgMTEuNDU4OSAzOC43MjAzQzExLjQzNTIgMzguNzYwNCAxMS40MTE1IDM4LjgwMDQgMTEuMzg0NyAzOC44NDA1TDExLjI5NzkgMzguOTg4OUMxMS4yMDIgMzkuMTQ3NyAxMS4xMDcyIDM5LjMwNjUgMTEuMDEzNyAzOS40NjUyQzExLjAwNjMgMzkuNDc3MSAxMC45OTk2IDM5LjQ4OSAxMC45OTMgMzkuNTAwOUwxMC45ODg1IDM5LjUwOUMxMC43NzEzIDM5Ljg3OCAxMC41NTcxIDQwLjI0OSAxMC4zNDU5IDQwLjYyMkwxMC4yMTM4IDQwLjg1NUMxMC4xMjQzIDQxLjAxNTMgMTAuMDM1IDQxLjE3NTggOS45NDU5NyA0MS4zMzY2TDkuOTM4NTUgNDEuMzQ5Mkw5LjkxNTU1IDQxLjM5MTVMOS43OTY4MyA0MS42MDU5TDkuNTM0MTUgNDIuMDg4OUM5LjUwMDAyIDQyLjE1MjggOS40NjY2MyA0Mi4yMTY2IDkuNDMyNSA0Mi4yNzk2TDkuMzk3NjIgNDIuMzQ0MkM5LjMwNzEgNDIuNTEzNCA5LjIxNjU3IDQyLjY4MjUgOS4xMjc1MyA0Mi44NTI1TDkuMTIwODUgNDIuODY1OEw5LjExNTY2IDQyLjg3NTVDOC45MDY5IDQzLjI3MTIgOC43MDEzNiA0My42NzE0IDguNDk5MDQgNDQuMDc2TDguMzk5NjEgNDQuMjcyNkM4LjMxMzU0IDQ0LjQ0NDggOC4yMjg5NSA0NC42MTY5IDguMTQ0MzYgNDQuNzkyVjQ0Ljc5OEM4LjEyMTM2IDQ0Ljg0NCA4LjA5OTEgNDQuODkgOC4wNzY4NCA0NC45MzZMOC4wNjc5MyA0NC45NTM4TDguMDIzNDEgNDUuMDQ1QzcuOTM5ODEgNDUuMjE2MiA3Ljg1NjcgNDUuMzg4MSA3Ljc3NDA5IDQ1LjU2MDdMNy42NjI3OSA0NS43OTY3QzcuNTE3ODUgNDYuMTAwOSA3LjM3NTM4IDQ2LjQwNjQgNy4yMzUzOSA0Ni43MTMxVjQ2LjcxNjhDNy4wOTQ0MSA0Ny4wMjMgNi45NTU5IDQ3LjMzMDQgNi44MTk4NiA0Ny42MzkxQzYuODA0MjggNDcuNjczOSA2Ljc4ODcgNDcuNzA4MSA2Ljc3Mzg2IDQ3Ljc0MjJMNi43NTM4MiA0Ny43ODc1QzYuNjczMTkgNDcuOTcyNSA2LjU5MjU2IDQ4LjE1NzcgNi41MTE5MiA0OC4zNDMyTDYuNDg1MjEgNDguNDA1NUM2LjQ2MTQ3IDQ4LjQ2MTkgNi40MzY5OCA0OC41MTc2IDYuNDExMDEgNDguNTc0QzYuMzMyMzYgNDguNzU3NSA2LjI1NDQ1IDQ4Ljk0MTUgNi4xNzcyOCA0OS4xMjZDNi4xNDc1OSA0OS4xOTY1IDYuMTE3OTEgNDkuMjY3IDYuMDg4OTggNDkuMzM4MkM1Ljk1NDQyIDQ5LjY2MDcgNS44MjIxIDQ5Ljk4NDcgNS42OTIgNTAuMzEwMlY1MC4zMTg0VjUwLjMyMzZDNS41NjIzOSA1MC42NDkxIDUuNDM0MjcgNTAuOTc2MSA1LjMwNzYzIDUxLjMwNDVMNS4yNzQyNCA1MS4zOTA2QzUuMjAwMDQgNTEuNTg4NyA1LjEyNTg0IDUxLjc4ODMgNS4wNTE2NCA1MS45ODQyTDQuOTc3NDQgNTIuMTkxMkM0LjkwMzI0IDUyLjM4NTYgNC44MzM0OSA1Mi41ODA3IDQuNzYyOTkgNTIuNzc2Nkw0LjczNDA2IDUyLjg1ODJDNC43MTk5NiA1Mi44OTUzIDQuNzA2NiA1Mi45MzI0IDQuNjkzMjQgNTIuOTcwM0M0LjU3MTU1IDUzLjMwOTYgNC40NTIwOSA1My42NDk3IDQuMzM0ODUgNTMuOTkwNUM0LjMzMzI4IDUzLjk5NDQgNC4zMzIwNCA1My45OTgzIDQuMzMxMTQgNTQuMDAyNEw0LjMyNjY5IDU0LjAxNUM0LjIwODQ2IDU0LjM1ODggNC4wOTI5NSA1NC43MDMxIDMuOTgwMTcgNTUuMDQ3OUwzLjk3NTcyIDU1LjA2MTJWNTUuMDY3OUMzLjk3NDE1IDU1LjA3MTUgMy45NzI5MSA1NS4wNzUyIDMuOTcyMDEgNTUuMDc5QzMuODk1MzMgNTUuMjg4MyAzLjgyMzg1IDU1LjQ5ODggMy43NTc1NiA1NS43MTA1WlwiLFxuICAgICAgICAgIGZpbGw6IFwidXJsKCNwYWludDFfbGluZWFyKVwiXG4gICAgICAgIH1cbiAgICAgICksXG4gICAgICAvKiBAX19QVVJFX18gKi8gYyhcbiAgICAgICAgXCJwYXRoXCIsXG4gICAgICAgIHtcbiAgICAgICAgICBzdHlsZTogeyBtaXhCbGVuZE1vZGU6IFwibXVsdGlwbHlcIiB9LFxuICAgICAgICAgIGQ6IFwiTTMuMDc1NjQgODEuMTY2QzUuMjQ5NzUgODEuMTc3OSAxMC44NjE2IDgwLjg5MDcgMTcuMDkwOCA4MC4yOTQ5QzI3Ljk0MDYgNzkuMjU2MSA0OS42MjgyIDc2LjQzNjYgNzQuMzc0NCA3My4yMzYzQzkzLjYzODYgNzAuNzQ1NSAxMzUuNzkgNjQuNjI5MiAxNTcuODMyIDYxLjQwM0MxNTcuNzk2IDYxLjI0OTIgMTU3Ljc2IDYxLjA5NzUgMTU3LjcyMyA2MC45NDgyQzE1Ny42NTUgNjAuNjY5MiAxNTcuNTg1IDYwLjM5MTIgMTU3LjUxNCA2MC4xMTQyQzE1Ny40ODkgNjAuMDE1NSAxNTcuNDY0IDU5LjkxNzUgMTU3LjQ0IDU5LjgxNzRMMTU3LjQzNiA1OS44MDFDMTU3LjM4NiA1OS42MTIxIDE1Ny4zMzcgNTkuNDIyOSAxNTcuMjg3IDU5LjIzMzRDMTU3LjI2IDU5LjEzMzIgMTU3LjIzMyA1OS4wMzMxIDE1Ny4yMDYgNTguOTM2NkMxNTcuMTQgNTguNjkzMiAxNTcuMDczIDU4LjQ1MDYgMTU3LjAwNCA1OC4yMDg3TDE1Ni45NTYgNTguMDM1OEMxNTYuOSA1Ny44MzkyIDE1Ni44NDIgNTcuNjQ0MSAxNTYuNzg1IDU3LjQ0ODlMMTU2LjczMSA1Ny4yNjU2QzE1Ni43MDIgNTcuMTY2MiAxNTYuNjcyIDU3LjA2NzUgMTU2LjY0MiA1Ni45Njg4QzE1Ni41ODUgNTYuNzc4OSAxNTYuNTI4IDU2LjU4ODkgMTU2LjQ2OSA1Ni4zOTk3QzE1Ni40MzggNTYuMzAwMyAxNTYuNDA4IDU2LjIwMDkgMTU2LjM3NyA1Ni4xMDI5QzE1Ni4zMTIgNTUuODk0NCAxNTYuMjQ1IDU1LjY4NjcgMTU2LjE3OSA1NS40Nzg5TDE1Ni4xNDcgNTUuMzgwMkMxNTYuMTI0IDU1LjMwNiAxNTYuMTAxIDU1LjIzNyAxNTYuMDc4IDU1LjE2NTFDMTU2LjAzMyA1NS4wMjcgMTU1Ljk4NyA1NC44ODkgMTU1Ljk0IDU0Ljc1MUMxNTUuOTA5IDU0LjY1NTMgMTU1Ljg3NyA1NC41NTk2IDE1NS44NDUgNTQuNDYzOUwxNTUuNzQxIDU0LjE1NzRDMTU1Ljc0MSA1NC4xNSAxNTUuNzM2IDU0LjE0MjYgMTU1LjczMyA1NC4xMzUyTDE1NS41NTMgNTMuNjE1OEMxNTUuNTE3IDUzLjUxNDEgMTU1LjQ3OSA1My40MTE3IDE1NS40NDYgNTMuMzEwMUMxNTUuMzYxIDUzLjA3MzEgMTU1LjI3NyA1Mi44MzcyIDE1NS4xOTIgNTIuNjAyMkMxNTUuMTYxIDUyLjUxNjkgMTU1LjEyOSA1Mi40MzE1IDE1NS4wOTcgNTIuMzQ1NUMxNTUuMDczIDUyLjI3OTQgMTU1LjA0OCA1Mi4yMTQxIDE1NS4wMjMgNTIuMTQ4MUMxNTQuOTY4IDUxLjk5OTcgMTU0LjkxNCA1MS44NTY1IDE1NC44NTkgNTEuNzExMUMxNTQuODE5IDUxLjYwMzUgMTU0Ljc3OCA1MS40OTY2IDE1NC43MzcgNTEuMzg5OEMxNTQuNzA5IDUxLjMxNTYgMTU0LjY4MSA1MS4yNDE0IDE1NC42NTMgNTEuMTczMUwxNTQuNTQgNTAuODhDMTU0LjQ5OCA1MC43NzM5IDE1NC40NTYgNTAuNjY3MSAxNTQuNDE0IDUwLjU2MUMxNTQuMzcyIDUwLjQ1NDkgMTU0LjMzNCA1MC4zNjA2IDE1NC4yOTQgNTAuMjY0MkMxNTQuMjQ0IDUwLjEzNjYgMTU0LjE5MyA1MC4wMDg0IDE1NC4xNCA0OS44Nzk4QzE1NC4wOTkgNDkuNzc5NyAxNTQuMDU3IDQ5LjY3OTUgMTU0LjAxNiA0OS41ODNMMTUzLjkzNiA0OS4zOTA5QzE1My44ODQgNDkuMjY0IDE1My44MzIgNDkuMTM3MSAxNTMuNzc4IDQ5LjAxMDJDMTUzLjczMSA0OC44OTg5IDE1My42ODQgNDguNzg3NiAxNTMuNjM2IDQ4LjY3NjNDMTUzLjU2OCA0OC41MTYgMTUzLjQ5OSA0OC4zNTYzIDE1My40MyA0OC4xOTdDMTUzLjM4MSA0OC4wODcyIDE1My4zMzMgNDcuOTc3NiAxNTMuMjg3IDQ3Ljg2ODNDMTUzLjI0NSA0Ny43NzI2IDE1My4yMDIgNDcuNjc2OCAxNTMuMTU5IDQ3LjU4MTFDMTUzLjEwNCA0Ny40NTY1IDE1My4wNDkgNDcuMzMxMSAxNTIuOTkzIDQ3LjIxMDFDMTUyLjk0MyA0Ny4wOTgxIDE1Mi44OTEgNDYuOTg3NSAxNTIuODQgNDYuODc0N0MxNTIuNzg5IDQ2Ljc2MiAxNTIuNzQzIDQ2LjY2MTggMTUyLjY5MiA0Ni41NTU3QzE1Mi42NjEgNDYuNDg4OSAxNTIuNjMgNDYuNDIyMSAxNTIuNiA0Ni4zNTYxQzE1Mi41NDYgNDYuMjQxMSAxNTIuNDkyIDQ2LjEyNjggMTUyLjQzOSA0Ni4wMTE4QzE1Mi4zNzUgNDUuODc0OCAxNTIuMzEgNDUuNzM3NSAxNTIuMjQ0IDQ1LjZMMTUyLjIzNyA0NS41ODY2TDE1Mi4yMjQgNDUuNTU5MkMxNTIuMTcgNDUuNDQ3MiAxNTIuMTE4IDQ1LjMzNjYgMTUyLjA2MyA0NS4yMjQ2QzE1MS45NiA0NS4wMDk5IDE1MS44NTUgNDQuNzk2MiAxNTEuNzUgNDQuNTgzNUMxNTEuNjkgNDQuNDYzMyAxNTEuNjMgNDQuMzQzOCAxNTEuNTcgNDQuMjIzNkwxNTEuNDA3IDQzLjkwMDhMMTUxLjM1OCA0My44MDQ0QzE1MS4zNSA0My43ODU4IDE1MS4zNCA0My43NjczIDE1MS4zMzEgNDMuNzQ5NUwxNTEuMTUxIDQzLjM5ODVMMTUxLjA4NyA0My4yNzUzQzE1MS4wMzQgNDMuMTczNCAxNTAuOTgxIDQzLjA3MTggMTUwLjkyOCA0Mi45NzA0TDE1MC43NSA0Mi42MzEzQzE1MC42MzggNDIuNDE5MSAxNTAuNTI1IDQyLjIwNzQgMTUwLjQxIDQxLjk5NjFMMTUwLjIxMiA0MS42MzMzQzE1MC4xMzggNDEuNTA0MiAxNTAuMDcgNDEuMzc0MyAxNDkuOTk4IDQxLjI0NTJMMTQ5Ljk3MSA0MS4xOTU1TDE0OS43NzMgNDAuODQzMUMxNDkuNzUxIDQwLjgwMjMgMTQ5LjcyOCA0MC43NjIyIDE0OS43MDUgNDAuNzIxNEwxNDkuNTQyIDQwLjQzNTdDMTQ5LjQ3NyA0MC4zMjE1IDE0OS40MTMgNDAuMjA3OSAxNDkuMzQ3IDQwLjA5NDRDMTQ5LjI4MSAzOS45ODA5IDE0OS4yMjcgMzkuODg4MSAxNDkuMTY3IDM5Ljc4NUMxNDkuMDk4IDM5LjY2NjMgMTQ5LjAyOSAzOS41NDY4IDE0OC45NTkgMzkuNDI4OEwxNDguNzM2IDM5LjA1MDRDMTQzLjA5NyAzOS44NjY2IDEzNi4yNDUgNDAuODMxMiAxMjcuODI1IDQxLjk5NjlDMTA5LjMzOCA0NC41NTIzIDg4LjU3MjEgNDcuOTQ2MiA2Ny4zMjY4IDUwLjY5MzhDMzQuNjg1NSA1NC44OTQyIDEzLjMxODQgNTguMDIxNyAyLjgyMjYyIDU4Ljg2NDZDMi43NzcxMSA1OS4wMzE4IDIuNzMyMzQgNTkuMTk4NSAyLjY4ODMxIDU5LjM2NDdDMi42Nzk0MSA1OS4zOTgxIDIuNjcwNSA1OS40MzA4IDIuNjYyMzQgNTkuNDYzNEwyLjYwODkyIDU5LjY2NDVDMi42MDcyNSA1OS42Njk4IDIuNjA2MDEgNTkuNjc1MyAyLjYwNTIxIDU5LjY4MDhDMi41NjYxMyA1OS44MjkyIDIuNTI3MDUgNTkuOTc3NiAyLjQ4Nzk3IDYwLjEyNkMyLjQ1NjggNjAuMjQ3NyAyLjQyNzEyIDYwLjM2OTQgMi4zOTU5NiA2MC40OTExQzIuMzgxODYgNjAuNTQ5IDIuMzY3NzYgNjAuNjA2MSAyLjM1MjkyIDYwLjY2MzJDMi4zNDQwMiA2MC42OTk2IDIuMzM1MTEgNjAuNzM3NCAyLjMyNTQ3IDYwLjc3MjNDMi4zMTU4MiA2MC44MDcyIDIuMzExMzcgNjAuODI5NCAyLjMwNDY5IDYwLjg1NzZDMi4yODM5MSA2MC45NDA3IDIuMjYzODggNjEuMDI0NiAyLjI0Mzg0IDYxLjEwNzdDMC43NTk1MjQgNjcuMjQ4NyAwLjAwNjU5MjM2IDczLjU0MzcgMC4wMDA3MzI0MjIgNzkuODYxNkMwLjAyMjI1MDkgODAuNjg4OSAxLjIxMzE5IDgxLjE1NTYgMy4wNzU2NCA4MS4xNjZaXCIsXG4gICAgICAgICAgZmlsbDogXCJ1cmwoI3BhaW50Ml9saW5lYXIpXCJcbiAgICAgICAgfVxuICAgICAgKSxcbiAgICAgIC8qIEBfX1BVUkVfXyAqLyBjKFxuICAgICAgICBcInBhdGhcIixcbiAgICAgICAge1xuICAgICAgICAgIHN0eWxlOiB7IG1peEJsZW5kTW9kZTogXCJtdWx0aXBseVwiIH0sXG4gICAgICAgICAgZDogXCJNMTQwLjMxOSAxMzIuNTU5QzEzNC45NzYgMTM3LjUzNSAxMTUuODA5IDE0Ni41NTMgOTYuODE4OSAxNTAuMzA0Qzc4Ljg2OTYgMTUzLjg1IDYyLjcxNDQgMTU0LjY0MSA1MS45OTIzIDE1NC42NTRDNTIuMTc3IDE1NC45MTkgNTIuNTg1OSAxNTUuMTY3IDUzLjIzIDE1NS40MTFDNTQuNTE5NiAxNTUuODY5IDU1LjgyNCAxNTYuMjk1IDU3LjE0MzMgMTU2LjY4OEw1Ny4xNzc1IDE1Ni42OTlDNTcuNzQyNCAxNTYuODY3IDU4LjMwOTMgMTU3LjAyOCA1OC44NzgyIDE1Ny4xODNMNTguOTUyNCAxNTcuMjA0QzU5LjIwMzcgMTU3LjI3MiA1OS40NTU1IDE1Ny4zNCA1OS43MDc4IDE1Ny40MDZMNTkuODIyIDE1Ny40MzZDNjAuMDkzNiAxNTcuNTA2IDYwLjM2NTcgMTU3LjU3NSA2MC42MzgyIDE1Ny42NDNMNjAuNzQ4OCAxNTcuNjdDNjAuOTc1NCAxNTcuNzI2IDYxLjIwMjIgMTU3Ljc4MSA2MS40MjkyIDE1Ny44MzVMNjEuNjUxOCAxNTcuODg4QzYxLjg4OTMgMTU3Ljk0NCA2Mi4xMjcyIDE1Ny45OTkgNjIuMzY1NyAxNTguMDUyTDYyLjU1MzQgMTU4LjA5NEM2Mi43NjU2IDE1OC4xNDEgNjIuOTc3OCAxNTguMTg3IDYzLjE5MDggMTU4LjIzM0w2My41MDk4IDE1OC4zMDFMNjMuOTkxNCAxNTguNEw2NC4zMjc1IDE1OC40NjhDNjQuNTUwMSAxNTguNTEyIDY0Ljc2NzYgMTU4LjU1NCA2NC45ODc5IDE1OC41OTZMNjUuNDAwNSAxNTguNjdMNjUuNzQ2MyAxNTguNzMzTDY2LjE5MTUgMTU4LjgxM0w2Ni4zODE0IDE1OC44NDVDNjYuNjk4IDE1OC45IDY3LjAxNTYgMTU4Ljk1MiA2Ny4zMzQyIDE1OS4wMDNMNjcuNTU2OCAxNTkuMDM4TDY4LjA5NCAxNTkuMTJMNjguMTkxMiAxNTkuMTM1QzY4LjU3OTUgMTU5LjE5MiA2OC45Njg2IDE1OS4yNDcgNjkuMzU4NCAxNTkuMjk4TDY5LjQwNTkgMTU5LjMwNUM2OS42MTA3IDE1OS4zMzIgNjkuODE1NSAxNTkuMzU4IDcwLjAyMDMgMTU5LjM4M0w3MC4wNzQ0IDE1OS4zOUM3MC43MDUyIDE1OS40NjggNzEuMzM4MSAxNTkuNTM4IDcxLjk3MzMgMTU5LjYwMkg3MS45ODI5QzcyLjQxMzMgMTU5LjY0NSA3Mi44NDUxIDE1OS42ODUgNzMuMjc4NSAxNTkuNzIxQzc1LjQ5NDEgMTU5LjkwNSA3Ny43MzQ1IDE1OS45OTggNzkuOTk5NiAxNjBDMTA0LjA2NiAxNjAgMTI1LjY1IDE0OS4zNzIgMTQwLjMxNyAxMzIuNTU2TDE0MC4zMTkgMTMyLjU1OVpcIixcbiAgICAgICAgICBmaWxsOiBcInVybCgjcGFpbnQzX2xpbmVhcilcIlxuICAgICAgICB9XG4gICAgICApLFxuICAgICAgLyogQF9fUFVSRV9fICovIGMoXG4gICAgICAgIFwicGF0aFwiLFxuICAgICAgICB7XG4gICAgICAgICAgc3R5bGU6IHsgbWl4QmxlbmRNb2RlOiBcIm11bHRpcGx5XCIgfSxcbiAgICAgICAgICBkOiBcIk0xNDUuNzcgMTA3LjE2M0MxNDMuNzA2IDEwNy4xNjMgMTMxLjgyMSAxMDcuNDQyIDExMi42NDYgMTA5LjI4Qzg3LjUyNzQgMTExLjY4OSA1MC45Mzk0IDExNi45NjUgMzYuMTQ0MyAxMTkuNDg4QzI2Ljk1NTIgMTIxLjA1NSAxOC4zODQ5IDEyMi44ODggMTMuMjEwMSAxMjQuMDUxQzEzLjQ0MjEgMTI0LjQwMyAxMy42NzcxIDEyNC43NTIgMTMuOTE1IDEyNS4wOTlMMTQuMDc1MyAxMjUuMzM0QzE0LjE3NDIgMTI1LjQ4MiAxNC4yNzU5IDEyNS42MjggMTQuMzgwMyAxMjUuNzcyQzE0LjQzNjcgMTI1Ljg1MyAxNC40OTM4IDEyNS45MzQgMTQuNTUwMiAxMjYuMDE0QzE0LjY1NDggMTI2LjE2MyAxNC43NTg3IDEyNi4zMTEgMTQuODY0MSAxMjYuNDZMMTQuOTczOSAxMjYuNjA4QzE1LjE5MSAxMjYuOTExIDE1LjQxMDcgMTI3LjIxMyAxNS42MzI4IDEyNy41MTNDMTUuNjc4OCAxMjcuNTc1IDE1LjcyMzMgMTI3LjYzNiAxNS43NjkzIDEyNy42OTdDMTUuODc5MSAxMjcuODQ2IDE1Ljk5MTkgMTI3Ljk5NCAxNi4xMDE3IDEyOC4xNDJMMTYuMjY2NSAxMjguMzZDMTYuMzc5MyAxMjguNTA4IDE2LjQ5MjggMTI4LjY1NyAxNi42MDcxIDEyOC44MDVMMTYuNzI4IDEyOC45NjFDMTYuOTg0MiAxMjkuMjkxIDE3LjI0MjUgMTI5LjYxOSAxNy41MDI3IDEyOS45NDVMMTcuNTQyNyAxMjkuOTk2QzE3LjY2NjcgMTMwLjE1MSAxNy43OTIxIDEzMC4zMDUgMTcuOTEzNyAxMzAuNDU4TDE4LjA1ODQgMTMwLjYzNkMxOC4xODMxIDEzMC43ODQgMTguMzA3OCAxMzAuOTQgMTguNDMzMiAxMzEuMDlMMTguNTQ2NyAxMzEuMjI3QzE4Ljk2NjcgMTMxLjczIDE5LjM5MjYgMTMyLjIyOCAxOS44MjQ0IDEzMi43MkwxOS45MzI4IDEzMi44NDNDMjAuMDcwOCAxMzMgMjAuMjA5NSAxMzMuMTU2IDIwLjM0OSAxMzMuMzEyQzIwLjM4MDkgMTMzLjM0OCAyMC40MTI5IDEzMy4zODYgMjAuNDQ1NSAxMzMuNDE5QzIwLjkwMzYgMTMzLjkzIDIxLjM2NzggMTM0LjQzNCAyMS44MzgzIDEzNC45MzJMMjEuODg1IDEzNC45ODJDMjIuMDM4NCAxMzUuMTQ0IDIyLjE5MjUgMTM1LjMwNSAyMi4zNDczIDEzNS40NjZMMjIuNDIxNSAxMzUuNTQ1QzIzLjA3NzQgMTM2LjIyNCAyMy43NDUyIDEzNi44OTIgMjQuNDI0OSAxMzcuNTQ4TDI0LjQ3NjEgMTM3LjU5N0MyNS4xNjg3IDEzOC4yNjMgMjUuODcxNCAxMzguOTE3IDI2LjU4NDIgMTM5LjU1OEwyNi42MDg3IDEzOS41OEMyNy4zMzM5IDE0MC4yMyAyOC4wNzA1IDE0MC44NjcgMjguODE4NCAxNDEuNDlDMjkuMjE4MyAxNDEuODI2IDMwLjA5MSAxNDEuODg2IDMyLjgyOTcgMTQxLjM2OEMzOC41NzY2IDE0MC4yODEgNjAuMTAwMyAxMzYuNTQ1IDgzLjk2NSAxMzMuMjc0QzEwNi40MTggMTMwLjE5NyAxMzAuNTI5IDEyOS41NDUgMTMzLjc0MyAxMjkuNTc3QzEzNy45NDEgMTI5LjYyIDE0MS45MTUgMTMwLjU1NSAxNDAuMzE0IDEzMi41NTVDMTQwLjQ5NCAxMzIuMzUgMTQwLjY3MiAxMzIuMTQzIDE0MC44NDkgMTMxLjkzNUwxNDAuODg5IDEzMS44ODlDMTQwLjg5MiAxMzEuODg1IDE0MC44OTUgMTMxLjg4MSAxNDAuODk4IDEzMS44NzdDMTQxLjA2OCAxMzEuNjc5IDE0MS4yMzcgMTMxLjQ3OSAxNDEuNDA1IDEzMS4yNzdMMTQxLjQ0MSAxMzEuMjM1QzE0MS40NSAxMzEuMjIyIDE0MS40NjEgMTMxLjIxMSAxNDEuNDcxIDEzMS4xOThDMTQxLjYzNyAxMzEgMTQxLjgwMyAxMzAuOCAxNDEuOTY4IDEzMC41OTZMMTQyLjAyOCAxMzAuNTIyQzE0Mi4xOTUgMTMwLjMxNiAxNDIuMzYyIDEzMC4xMDkgMTQyLjUyOSAxMjkuOTAxTDE0Mi41NiAxMjkuODYyQzE0My4xODEgMTI5LjA4MyAxNDMuNzg3IDEyOC4yOTMgMTQ0LjM4IDEyNy40OTJMMTQ0LjQwOCAxMjcuNDU1QzE0NS4wMDIgMTI2LjY1MyAxNDUuNTc4IDEyNS44NDEgMTQ2LjEzOCAxMjUuMDE2TDE0Ni4xNDMgMTI1LjAxTDE0Ni4xNTggMTI0Ljk4N0MxNDYuMzExIDEyNC43NjIgMTQ2LjQ2MyAxMjQuNTM3IDE0Ni42MTQgMTI0LjMxMUMxNDYuNjI4IDEyNC4yODkgMTQ2LjY0MiAxMjQuMjY4IDE0Ni42NTcgMTI0LjI0NkMxNDYuODA2IDEyNC4wMjUgMTQ2Ljk1MiAxMjMuODAyIDE0Ny4wOTYgMTIzLjU3OEwxNDcuMTA0IDEyMy41NjdDMTQ3LjExNiAxMjMuNTQ4IDE0Ny4xMjggMTIzLjUyOSAxNDcuMTQgMTIzLjUxMUMxNDcuMjg5IDEyMy4yODQgMTQ3LjQzNSAxMjMuMDU2IDE0Ny41NzkgMTIyLjgyOEMxNDcuNTg4IDEyMi44MTUgMTQ3LjU5NiAxMjIuODAyIDE0Ny42MDQgMTIyLjc4OUMxNDguODQxIDEyMC44NDEgMTQ5Ljk5MiAxMTguODM4IDE1MS4wNTkgMTE2Ljc3OUwxNTEuMDc0IDExNi43NTNDMTUxLjIwMSAxMTYuNTA1IDE1MS4zMjggMTE2LjI1OCAxNTEuNDU0IDExNi4wMTFMMTUxLjQ2NyAxMTUuOTg2TDE1MS40NzcgMTE1Ljk2NkMxNTEuNjAzIDExNS43MTYgMTUxLjcyNyAxMTUuNDY1IDE1MS44NDggMTE1LjIxNEwxNTEuODUzIDExNS4yMDRMMTUxLjg2MiAxMTUuMTg1QzE1Mi44ODggMTEzLjA5MiAxNTMuODI0IDExMC45NDkgMTU0LjY3MSAxMDguNzU2QzE1NC45OCAxMDcuODU5IDE1NC4wMTYgMTA3LjE2MyAxNDUuNzcgMTA3LjE2M1pcIixcbiAgICAgICAgICBmaWxsOiBcInVybCgjcGFpbnQ0X2xpbmVhcilcIlxuICAgICAgICB9XG4gICAgICApLFxuICAgICAgLyogQF9fUFVSRV9fICovIGMoXG4gICAgICAgIFwicGF0aFwiLFxuICAgICAgICB7XG4gICAgICAgICAgc3R5bGU6IHsgbWl4QmxlbmRNb2RlOiBcIm11bHRpcGx5XCIgfSxcbiAgICAgICAgICBkOiBcIk02Ni43MzM5IDkuMjI1OTRDNjcuMzkyIDQuNDU3MTQgNTQuNzUxOCA1LjI0NTE0IDU0LjE5MzggNC4yNTQ1OEM0Ny42NDExIDYuNDg4MjYgNDEuNDA3NCA5LjU2NjI0IDM1LjY1MDEgMTMuNDEwOEMzNS40MDE1IDEzLjU3NDggMzUuMzAxNCAxMy45MzQ2IDM2LjQ1MDcgMTQuMTY5MUMzOC45NTM2IDE0LjY4MTEgNDQuMjQ4NiAxNS4yMzMxIDQ4LjAwNjIgMTUuMjY0M0M1Ni4wMTEgMTUuMzMzMyA2Ni4xMzM2IDEzLjU3OTIgNjYuNzMzOSA5LjIyNTk0WlwiLFxuICAgICAgICAgIGZpbGw6IFwidXJsKCNwYWludDVfbGluZWFyKVwiXG4gICAgICAgIH1cbiAgICAgICksXG4gICAgICAvKiBAX19QVVJFX18gKi8gYyhcbiAgICAgICAgXCJwYXRoXCIsXG4gICAgICAgIHtcbiAgICAgICAgICBzdHlsZTogeyBtaXhCbGVuZE1vZGU6IFwibXVsdGlwbHlcIiB9LFxuICAgICAgICAgIGQ6IFwiTTE1MC4zIDExMS42NzhDMTQ4LjMwMSAxMTIuNDggMTM3LjQ2MyAxMTUuNzcyIDEyNS42MjEgMTIwLjM5NkMxMTMuMjc0IDEyNS4yMTkgMTA0LjU3OSAxMzEuMDcgMTA0LjQ2OCAxMzcuNDY5QzEwNC4zOCAxNDIuNTQ1IDExNC4xMTkgMTQ2LjE1IDExNi4zNDEgMTQ3LjE4NEMxMTguNTYyIDE0OC4yMTcgMTE5LjUxOSAxNDguOTE3IDExOS43NzEgMTQ5LjQzN0MxMzUuNTg2IDE0MC4zNiAxNDguMDA1IDEyNi4wMzUgMTU0LjY1MyAxMDguODM4QzE1NC4wOSAxMTAuMTMxIDE1Mi42ODQgMTEwLjcyIDE1MC4zIDExMS42NzhaXCIsXG4gICAgICAgICAgZmlsbDogXCJ1cmwoI3BhaW50Nl9saW5lYXIpXCJcbiAgICAgICAgfVxuICAgICAgKSxcbiAgICAgIC8qIEBfX1BVUkVfXyAqLyBjKFxuICAgICAgICBcInBhdGhcIixcbiAgICAgICAge1xuICAgICAgICAgIHN0eWxlOiB7IG1peEJsZW5kTW9kZTogXCJtdWx0aXBseVwiIH0sXG4gICAgICAgICAgZDogXCJNMTcuNjE0NyA3MC4xOTU3QzMxLjY2OTkgNjQuMDc1NyA0Ni40MDQ5IDU3LjIzMzEgNTYuMDQyMiA1Mi42OTI4QzcxLjExOTIgNDUuNTg5NyA4NC4yODQgMzYuOTMzNiA4MS40MTkxIDI4LjExNjVDNzguODcxOCAyMC4yNjM5IDY4LjM5MyAyMS4yMDc4IDQ3LjQ4MjMgMjQuOTQ5NkMzNC4wMzE4IDI3LjM1NjcgMTYuMjQ3MiAzMS43ODc5IDEzLjg0OSAzNC45OTYyTDEzLjc1NTUgMzUuMTMzNUMxMy42NTY4IDM1LjI4MTkgMTMuNTU3NCAzNS40MzAzIDEzLjQ1ODcgMzUuNTc4N0M1LjE2MjkzIDQ3Ljk3ODIgMC4yNDA0MDMgNjIuODMzNiAwLjAwODg5NDY0IDc4LjgxOTJDMC4wMDQ0NDI1NCA3OS4xNjU3IDAuMDAwNzMyNDIyIDc5LjUxMjIgMC4wMDA3MzI0MjIgNzkuODU4QzAuMDMxMTU1IDc4LjQzNTYgNS4xMzMyNSA3NS42MzA4IDE3LjYxNDcgNzAuMTk1N1pcIixcbiAgICAgICAgICBmaWxsOiBcInVybCgjcGFpbnQ3X2xpbmVhcilcIlxuICAgICAgICB9XG4gICAgICApLFxuICAgICAgLyogQF9fUFVSRV9fICovIGMoXG4gICAgICAgIFwicGF0aFwiLFxuICAgICAgICB7XG4gICAgICAgICAgc3R5bGU6IHsgbWl4QmxlbmRNb2RlOiBcIm11bHRpcGx5XCIgfSxcbiAgICAgICAgICBkOiBcIk0xMzMuMzggMzcuOTYwNUMxMTYuOTgyIDQwLjM3MTIgOTAuOTU5MiA0NS4xODkgOTMuNDk5MSA2MC41Njc1Qzk1LjQ1NDMgNzIuNDA3NiAxMTkuMTEgNzUuODYwOCAxMjguOTk2IDc3Ljc2N0MxMzYuODQ0IDc5LjI4MTQgMTUyLjIwMiA4MS4zNzM4IDE1OC43NzMgODMuMDE1OEMxNTkuNjUxIDgzLjIzODQgMTU5LjkyNiA4My42NTY5IDE1OS45MDIgODQuMTI4OEMxNTkuOTAyIDg0LjEyMzYgMTU5LjkwMiA4NC4xMTkyIDE1OS45MDIgODQuMTE0QzE1OS45MzYgODMuNDMyOSAxNTkuOTYxIDgyLjc0OTUgMTU5Ljk3NiA4Mi4wNjM5VjgxLjk0MTRDMTU5Ljk5MiA4MS4yOTU5IDE2MCA4MC42NDkxIDE2MCA4MC4wMDExQzE2MCA2NS4yMDIgMTU1Ljk4MSA1MS4zNDMxIDE0OC45NzcgMzkuNDUyNkwxNDguNyAzOS4wMDc0QzE0Ny44NTcgMzcuNjQ0NCAxNDIuMTkgMzYuNjY0OSAxMzMuMzggMzcuOTYwNVpcIixcbiAgICAgICAgICBmaWxsOiBcInVybCgjcGFpbnQ4X2xpbmVhcilcIlxuICAgICAgICB9XG4gICAgICApLFxuICAgICAgLyogQF9fUFVSRV9fICovIGMoXG4gICAgICAgIFwicGF0aFwiLFxuICAgICAgICB7XG4gICAgICAgICAgc3R5bGU6IHsgbWl4QmxlbmRNb2RlOiBcIm11bHRpcGx5XCIgfSxcbiAgICAgICAgICBkOiBcIk05Mi40NDEgOTUuMjU0M0M5MC44NzkxIDg5LjQ2NjcgODIuNDA1MyA4NS4yODEyIDcwLjMxMTIgODUuNTc3MkM1Ny41NDg1IDg1Ljg5MDMgNDQuMjkzMSA4Ny4wOTM4IDI4LjMxNzYgOTAuNjg1OEMxNC4wNDE5IDkzLjg5NTcgNS4zODkyOCA5Ny41OTUzIDQuMDUzNjYgOTguMTQ2NkMyLjgwMTg4IDk4LjY2NiAyLjM3NzQ0IDk5LjM0MjcgMi42MDY3MyAxMDAuMzI1VjEwMC4zMzJDMi42NjI2MiAxMDAuNTQzIDIuNzE4NTIgMTAwLjc1NCAyLjc3NDQyIDEwMC45NjRDMi44NDg2MiAxMDEuMjQgMi45MjI4MiAxMDEuNTE2IDMuMDAzNyAxMDEuNzkxQzMuMDI3NDUgMTAxLjg3NiAzLjA1MTkzIDEwMS45NiAzLjA3NzkgMTAyLjA0NUMzLjE0MTcyIDEwMi4yNjggMy4yMDU1MyAxMDIuNDkgMy4yNzA4MyAxMDIuNzA4QzMuMjg5MzggMTAyLjc3MSAzLjMwNzkzIDEwMi44MzUgMy4zMjcyMiAxMDIuODk5QzMuNDA4MzUgMTAzLjE3IDMuNDkwNDcgMTAzLjQ0IDMuNTczNTcgMTAzLjcwOUMzLjU5ODA2IDEwMy43ODkgMy42MjMyOSAxMDMuODY3IDMuNjQ3NzcgMTAzLjk0N0MzLjcxMzA3IDEwNC4xNTUgMy43Nzk4NSAxMDQuMzY0IDMuODQ2NjMgMTA0LjU3MkwzLjkyNDU0IDEwNC44MTRDNC4wMTExMSAxMDUuMDggNC4wOTkxNyAxMDUuMzQ1IDQuMTg4NyAxMDUuNjFMNC4yNTc3MSAxMDUuODEyQzQuMzMxOTEgMTA2LjAyMSA0LjQwMDkyIDEwNi4yMyA0LjQ3MzY0IDEwNi40MzhMNC41Njg2MSAxMDYuNzA4QzQuNjUzNyAxMDYuOTQ5IDQuNzQwMDIgMTA3LjE4OSA0LjgyNzU4IDEwNy40MjdMNC44OTQzNiAxMDcuNjFDNC45Nzc5NiAxMDcuODM5IDUuMDYzMDQgMTA4LjA2NyA1LjE0OTYxIDEwOC4yOTVMNS4yNTg2OSAxMDguNThDNS4zMzIzOSAxMDguNzc0IDUuNDA2NiAxMDguOTY3IDUuNDgxMjkgMTA5LjE1OUM1LjUxMTcyIDEwOS4yMzYgNS41NDE0IDEwOS4zMTQgNS41NzI1NiAxMDkuMzkyQzUuNjcxNSAxMDkuNjQgNS43NzA0MyAxMDkuODg3IDUuODY5MzcgMTEwLjEzNEM1LjkwODY5IDExMC4yMzMgNS45NDk1IDExMC4zMyA1Ljk4OTU3IDExMC40MzFDNi4wNjA4MSAxMTAuNjAzIDYuMTMyMjkgMTEwLjc3NiA2LjIwNDAyIDExMC45NUw2LjMyODY3IDExMS4yNDdDNi40MzA1OCAxMTEuNDg3IDYuNTMzMjIgMTExLjcyNiA2LjYzNjYxIDExMS45NjRDNi42Nzk2NSAxMTIuMDYzIDYuNzIzNDMgMTEyLjE2MSA2Ljc2NjQ2IDExMi4yNjFDNi44Mzc3IDExMi40MjMgNi45MDk0MiAxMTIuNTg0IDYuOTgxNjUgMTEyLjc0NUw3LjEzMDA1IDExMy4wNzhDNy4yMTIxNyAxMTMuMjU5IDcuMjk1MjcgMTEzLjQ0IDcuMzc5MzcgMTEzLjYyMUM3LjQ0NjE1IDExMy43NjkgNy41MTQ0MSAxMTMuOTEgNy41ODE5NCAxMTQuMDUzQzcuNjU2MTQgMTE0LjIxMSA3LjczMDM0IDExNC4zNjcgNy44MDQ1NCAxMTQuNTIzTDcuOTc4MTcgMTE0Ljg4NEM4LjA0NTcgMTE1LjAyMyA4LjExMzk2IDExNS4xNjIgOC4xODIyMyAxMTUuMzAxQzguMjYzMTEgMTE1LjQ2NSA4LjM0Mzk5IDExNS42MjggOC40MjYzNSAxMTUuNzkxQzguNTA4NzIgMTE1Ljk1NCA4LjU5MTA4IDExNi4xMjEgOC42NzQ5MyAxMTYuMjg1QzguNzQwNzIgMTE2LjQxNCA4LjgwNzAxIDExNi41NDIgOC44NzM3OSAxMTYuNjdDOC45MzQxNCAxMTYuNzg4IDguOTk0OTggMTE2LjkwNSA5LjA1NjMyIDExNy4wMjFDOS4xMjQ1OSAxMTcuMTU0IDkuMTkzNiAxMTcuMjg1IDkuMjYzMzQgMTE3LjQxNkM5LjM2NjI0IDExNy42MTEgOS40NzAxMiAxMTcuODA1IDkuNTc0OTkgMTE3Ljk5OUM5LjY1NTEzIDExOC4xNDcgOS43MzU3NiAxMTguMjk1IDkuODE2ODkgMTE4LjQ0NEM5Ljg3MTMgMTE4LjU0MyA5LjkyNTk2IDExOC42NDIgOS45ODA4NyAxMTguNzQxQzEwLjA2IDExOC44ODQgMTAuMTM5NyAxMTkuMDI3IDEwLjIxOTggMTE5LjE2OUwxMC4zNjIzIDExOS40MjFDMTAuNTEwNyAxMTkuNjg1IDEwLjY2MiAxMTkuOTQ5IDEwLjgxNjQgMTIwLjIxMUMxMC44NjE2IDEyMC4yODUgMTAuOTA2MiAxMjAuMzY1IDEwLjk1MTQgMTIwLjQ0MkMxMS4wNDEgMTIwLjU5NSAxMS4xMzEgMTIwLjc0NyAxMS4yMjE1IDEyMC44OTlMMTEuMzQzMiAxMjEuMTAyQzExLjUzMTcgMTIxLjQxNyAxMS43MjE5IDEyMS43MjkgMTEuOTEzOCAxMjIuMDRMMTEuOTY1IDEyMi4xMjJDMTIuMDY2OSAxMjIuMjg2IDEyLjE2OTEgMTIyLjQ0OSAxMi4yNzE1IDEyMi42MTJMMTIuMzczMSAxMjIuNzczQzEyLjcwMTEgMTIzLjI5IDEzLjAzNDggMTIzLjgwNCAxMy4zNzQxIDEyNC4zMTNMMTMuNDQ4MyAxMjQuNDIxQzEzLjgwNzkgMTI0Ljk1OSAxNC4xNzQ3IDEyNS40OTQgMTQuNTQ4NyAxMjYuMDIzQzE0LjU1MjQgMTI2LjAzIDE0LjU1NjkgMTI2LjAzNiAxNC41NjEzIDEyNi4wNDNDMTcuNTI0NSAxMzAuMjQ2IDIwLjg4MzkgMTM0LjE1NSAyNC41OTM0IDEzNy43MTdDMjQuNzI0NSAxMzcuODQ0IDI0Ljg1NjYgMTM3Ljk3MSAyNC45ODk2IDEzOC4wOTZMMjUuMDgxNiAxMzguMTgzQzI1LjU3NjMgMTM4LjY1MiAyNi4wNzg0IDEzOS4xMTQgMjYuNTg3OSAxMzkuNTdMMjYuNjEwOSAxMzkuNTlDMjcuMTE5OSAxNDAuMDQ3IDI3LjYzNTIgMTQwLjQ5NyAyOC4xNTY1IDE0MC45NEwyOC4yNzA4IDE0MS4wMzhMMjguMjc3NSAxNDEuMDQ1QzI4LjQ2MDUgMTQxLjIgMjguNjQ0NSAxNDEuMzU0IDI4LjgyOTUgMTQxLjUwN0MyOC45MTA3IDE0MS41NzIgMjkuMDAyMyAxNDEuNjIyIDI5LjEwMDQgMTQxLjY1NkMyOC44ODc0IDE0MS41NzMgMjkuMjM3NyAxNDEuMjEgMzAuMzE2NSAxNDAuODAzQzM1LjA2NTQgMTM5LjAyMiA0MS4wNDgzIDEzNi42NTUgNTEuNTk5OCAxMzEuNDNDNjIuMTg0NiAxMjYuMTg4IDY2LjI3NDYgMTIzLjk5MiA3Ny42MzA0IDExNS43MDdDODguMzk0MSAxMDcuODUyIDk0LjUyNjEgMTAyLjk3MSA5Mi40NDEgOTUuMjU0M1pcIixcbiAgICAgICAgICBmaWxsOiBcInVybCgjcGFpbnQ5X2xpbmVhcilcIlxuICAgICAgICB9XG4gICAgICApLFxuICAgICAgLyogQF9fUFVSRV9fICovIGMoXG4gICAgICAgIFwicGF0aFwiLFxuICAgICAgICB7XG4gICAgICAgICAgc3R5bGU6IHsgbWl4QmxlbmRNb2RlOiBcIm11bHRpcGx5XCIgfSxcbiAgICAgICAgICBkOiBcIk04Ni4xNDU3IDE1MC45MzNDODUuMDUyOCAxNDcuNjI2IDc2LjQ3MTQgMTQ2LjQxOSA2Ni4wNjgzIDE0OC41MTJDNjAuMTAyNSAxNDkuNzEyIDU1Ljg1NTIgMTUxLjUyOSA1My45NzM1IDE1Mi41MThDNTEuNDY5MSAxNTMuODMzIDUxLjE3MjMgMTU0LjY0NyA1My4yOTQ1IDE1NS40MzVINTMuMjk5QzUzLjQzMzMgMTU1LjQ4MiA1My41NjkxIDE1NS41MjkgNTMuNzA0MSAxNTUuNTc1TDU0LjA0NjkgMTU1LjY5NEM1NC41OTExIDE1NS44OCA1NS4xNDMxIDE1Ni4wNjMgNTUuNzAzMSAxNTYuMjQxTDU1Ljc0MzIgMTU2LjI1NEM1Ni4yOTkyIDE1Ni40MyA1Ni44NjA5IDE1Ni42MDIgNTcuNDI4MyAxNTYuNzY5QzU3LjYyMTcgMTU2LjgyNiA1Ny44MTU0IDE1Ni44ODMgNTguMDA5MyAxNTYuOTM5TDU4LjEyMTMgMTU2Ljk3QzYzLjMxNzkgMTU4LjQ0MyA2OC42NTA3IDE1OS4zODUgNzQuMDM3NSAxNTkuNzhDNzUuNTU3OSAxNTguMTYxIDg3Ljg2MzUgMTU2LjEzNCA4Ni4xNDU3IDE1MC45MzNaXCIsXG4gICAgICAgICAgZmlsbDogXCJ1cmwoI3BhaW50MTBfbGluZWFyKVwiXG4gICAgICAgIH1cbiAgICAgICksXG4gICAgICAvKiBAX19QVVJFX18gKi8gYyhcbiAgICAgICAgXCJwYXRoXCIsXG4gICAgICAgIHtcbiAgICAgICAgICBzdHlsZTogeyBtaXhCbGVuZE1vZGU6IFwibXVsdGlwbHlcIiB9LFxuICAgICAgICAgIGQ6IFwiTTgyLjQ0NDYgOC41NTI5N0MxMDUuMzIyIDguMjM5ODUgMTE0Ljk3MiAxMC42ODY5IDExOS4zNjMgMTIuMjMzM0MxMjEuOTczIDEzLjE1MzMgMTIyLjY0OCAxNC4wMjk2IDEyMi44MzkgMTQuNjEyMUMxMjIuNDI0IDEzLjEyMzcgMTIwLjg4NSAxMS4xNzMgMTE3LjEzNCA5LjEyMTM0TDExNy4xMiA5LjExMzkyQzEwNi4wMjcgMy4yOTM3MSA5My4zOTk3IDAgODAuMDAzNCAwQzYzLjU5NjcgMCA0OC4zNDQ1IDQuOTM5NDYgMzUuNjUwMSAxMy40MTA4QzQzLjc2NjMgMTEuNzQ2NSA2Mi41NTM0IDguODI0NTQgODIuNDQ0NiA4LjU1Mjk3WlwiLFxuICAgICAgICAgIGZpbGw6IFwidXJsKCNwYWludDExX2xpbmVhcilcIlxuICAgICAgICB9XG4gICAgICApLFxuICAgICAgLyogQF9fUFVSRV9fICovIGMoXG4gICAgICAgIFwicGF0aFwiLFxuICAgICAgICB7XG4gICAgICAgICAgc3R5bGU6IHsgbWl4QmxlbmRNb2RlOiBcIm11bHRpcGx5XCIgfSxcbiAgICAgICAgICBkOiBcIk04Ni4xNDU3IDE1MC45MzNDODUuMDUyOCAxNDcuNjI2IDc2LjQ3MTQgMTQ2LjQxOSA2Ni4wNjgzIDE0OC41MTJDNjAuMTAyNSAxNDkuNzEyIDU1Ljg1NTIgMTUxLjUyOSA1My45NzM1IDE1Mi41MThDNTEuNDY5MSAxNTMuODMzIDUxLjE3MjMgMTU0LjY0NyA1My4yOTQ1IDE1NS40MzVINTMuMjk5QzUzLjQzMzMgMTU1LjQ4MiA1My41NjkxIDE1NS41MjkgNTMuNzA0MSAxNTUuNTc1TDU0LjA0NjkgMTU1LjY5NEM1NC41OTExIDE1NS44OCA1NS4xNDMxIDE1Ni4wNjMgNTUuNzAzMSAxNTYuMjQxTDU1Ljc0MzIgMTU2LjI1NEM1Ni4yOTkyIDE1Ni40MyA1Ni44NjA5IDE1Ni42MDIgNTcuNDI4MyAxNTYuNzY5QzU3LjYyMTcgMTU2LjgyNiA1Ny44MTU0IDE1Ni44ODMgNTguMDA5MyAxNTYuOTM5TDU4LjEyMTMgMTU2Ljk3QzYzLjMxNzkgMTU4LjQ0MyA2OC42NTA3IDE1OS4zODUgNzQuMDM3NSAxNTkuNzhDNzUuNTU3OSAxNTguMTYxIDg3Ljg2MzUgMTU2LjEzNCA4Ni4xNDU3IDE1MC45MzNaXCIsXG4gICAgICAgICAgZmlsbDogXCJ1cmwoI3BhaW50MTJfbGluZWFyKVwiXG4gICAgICAgIH1cbiAgICAgICksXG4gICAgICAvKiBAX19QVVJFX18gKi8gYyhcbiAgICAgICAgXCJwYXRoXCIsXG4gICAgICAgIHtcbiAgICAgICAgICBkOiBcIk04Mi40NDQ2IDguNTUyOTdDMTA1LjMyMiA4LjIzOTg1IDExNC45NzIgMTAuNjg2OSAxMTkuMzYzIDEyLjIzMzNDMTIxLjk3MyAxMy4xNTMzIDEyMi42NDggMTQuMDI5NiAxMjIuODM5IDE0LjYxMjFDMTIyLjQyNCAxMy4xMjM3IDEyMC44ODUgMTEuMTczIDExNy4xMzQgOS4xMjEzNEwxMTcuMTIgOS4xMTM5MkMxMDYuMDI3IDMuMjkzNzEgOTMuMzk5NyAwIDgwLjAwMzQgMEM2My41OTY3IDAgNDguMzQ0NSA0LjkzOTQ2IDM1LjY1MDEgMTMuNDEwOEM0My43NjYzIDExLjc0NjUgNjIuNTUzNCA4LjgyNDU0IDgyLjQ0NDYgOC41NTI5N1pcIixcbiAgICAgICAgICBmaWxsOiBcInVybCgjcGFpbnQxM19saW5lYXIpXCJcbiAgICAgICAgfVxuICAgICAgKSxcbiAgICAgIC8qIEBfX1BVUkVfXyAqLyBjKFxuICAgICAgICBcInBhdGhcIixcbiAgICAgICAge1xuICAgICAgICAgIHN0eWxlOiB7IG1peEJsZW5kTW9kZTogXCJtdWx0aXBseVwiIH0sXG4gICAgICAgICAgZDogXCJNMTcuNjE0NyA3MC4xOTU2QzMxLjY3IDY0LjA3NTYgNDYuNDA0OSA1Ny4yMzI5IDU2LjA0MjIgNTIuNjkyN0M1Ni41NyA1Mi40NDUzIDU3LjA5NTEgNTIuMTk0OCA1Ny42MTc1IDUxLjk0MUMzMC40MSA1NS41MTQ1IDEyLjI0MDMgNTguMTA4NSAyLjgyMzM3IDU4Ljg2NDZDMi44MDAzNyA1OC45NTA3IDIuNzc2NjIgNTkuMDM2NyAyLjc1Mjg4IDU5LjEyMjhMMi42ODgzMiA1OS4zNjQ3QzIuNjg4MzIgNTkuMzc1MSAyLjY4MzEzIDU5LjM4NDcgMi42ODAxNiA1OS4zOTQ0QzIuNjM3ODYgNTkuNTU1NCAyLjU5NTU3IDU5LjcxNTcgMi41NTQwMiA1OS44NzY3QzIuNTQxNCA1OS45MjI3IDIuNTI5NTMgNTkuOTY4NyAyLjUxNzY2IDYwLjAxMzlDMi40NzM2MyA2MC4xODUxIDIuNDMwMzUgNjAuMzU2NSAyLjM4NzggNjAuNTI4MUMyLjM3NjY3IDYwLjU3NDkgMi4zNjQ4IDYwLjYyMDkgMi4zNTI5MyA2MC42NjY5QzIuMzQ4NDggNjAuNjg2OSAyLjM0MzI4IDYwLjcwNjIgMi4zMzg4MyA2MC43MjU1QzIuMjkwNiA2MC45MTk5IDIuMjQzMTEgNjEuMTE1MSAyLjE5NjM3IDYxLjMwOTVDMi4xODQ0OSA2MS4zNTkyIDIuMTcyNjIgNjEuNDA4OSAyLjE2MTQ5IDYxLjQ1NzlDMi4xMTg0NSA2MS42Mzc5IDIuMDc2MTYgNjEuODE4MiAyLjAzNDYxIDYxLjk5ODhDMi4wMjQ5NiA2Mi4wNDAzIDIuMDE1MzEgNjIuMDgxOSAyLjAwNjQxIDYyLjEyMzRDMS45MDQwMSA2Mi41Njg2IDEuODA1MDggNjMuMDE2NSAxLjcwOTYgNjMuNDY3MkMxLjcwMjkyIDYzLjUwMjEgMS42OTU1IDYzLjUzNjkgMS42ODgwOCA2My41NzExQzEuNjQ5NSA2My43NTY2IDEuNjExNDEgNjMuOTQyMyAxLjU3MzgxIDY0LjEyODNDMS41NjM0MyA2NC4xODMyIDEuNTUyMyA2NC4yMzgxIDEuNTQxMTcgNjQuMjkzOEMxLjUwNjA0IDY0LjQ2NzQgMS40NzE5MSA2NC42NDA1IDEuNDM4NzcgNjQuODEzMkwxLjQwOTgzIDY0Ljk2MTZDMS4zNjgyOCA2NS4xNzc1IDEuMzI4MjEgNjUuMzk0OSAxLjI4ODg4IDY1LjYxMjNWNjUuNjIyN0MxLjI0NzMzIDY1Ljg1MjIgMS4yMDY3NiA2Ni4wODIgMS4xNjcxOSA2Ni4zMTJDMS4xNjA1MSA2Ni4zNDc2IDEuMTU0NTggNjYuMzg2MiAxLjE0ODY0IDY2LjQxOTZDMS4xMTY5OCA2Ni42MDU2IDEuMDg1ODIgNjYuNzkyMSAxLjA1NTE1IDY2Ljk3OUwxLjAyNjIxIDY3LjE1NzlDMC45OTg1MDUgNjcuMzI3IDAuOTcxNzkzIDY3LjQ5NjUgMC45NDYwNjkgNjcuNjY2MUMwLjkzNzE2NSA2Ny43MjQ3IDAuOTI3NTE5IDY3Ljc4MzQgMC45MTg2MTUgNjcuODQxMkMwLjg4ODkzNCA2OC4wMzg2IDAuODU5MjUzIDY4LjIzNiAwLjgzMTA1NyA2OC40MzQ4QzAuODI2NjA1IDY4LjQ2MDggMC44MjI4OTUgNjguNDg2IDAuODE5MTg1IDY4LjUwOUMwLjc4NjUzNiA2OC43Mzg2IDAuNzU0NjI5IDY4Ljk2ODMgMC43MjM0NjUgNjkuMTk4NEwwLjcxMDEwOSA2OS4zMDE1QzAuNjgzODkxIDY5LjQ5MDkgMC42NTkxNTcgNjkuNjgwNCAwLjYzNTkwNyA2OS44Njk5QzAuNjI3NzQ1IDY5LjkzMjkgMC42MjAzMjUgNjkuOTk2NyAwLjYxMjE2MyA3MC4wNTk4QzAuNTkxMzg2IDcwLjIyNiAwLjU3MTM1MiA3MC4zOTI1IDAuNTUyMDYgNzAuNTU5MkMwLjU0NDYzOSA3MC42MjM3IDAuNTM2NDc3IDcwLjY4ODMgMC41MjkwNTcgNzAuNzUyOEMwLjUwODI4IDcwLjkzNzggMC40ODc3NTIgNzEuMTIzMSAwLjQ2NzQ3IDcxLjMwODZMMC40NTQxMTQgNzEuNDMwM0MwLjQyOTM4IDcxLjY2MDMgMC40MDQ2NDYgNzEuODkwNiAwLjM3OTkxMiA3Mi4xMjExQzAuMzc5OTEyIDcyLjE1IDAuMzc0NzE4IDcyLjE3OTcgMC4zNzE3NSA3Mi4yMDg2QzAuMzUyNDU3IDcyLjQwNDUgMC4zMzQ2NDkgNzIuNjAxMSAwLjMxNjg0IDcyLjc5NzhDMC4zMTA5MDQgNzIuODYzMSAwLjMwNTcxIDcyLjkyOTEgMC4yOTk3NzQgNzIuOTk0NEMwLjI4NTkyMyA3My4xNTkxIDAuMjcyMDcyIDczLjMyNDEgMC4yNTgyMjEgNzMuNDg5M0MwLjI1MzAyNyA3My41NTgzIDAuMjQ3MDkxIDczLjYyODEgMC4yNDE4OTcgNzMuNjk3OEMwLjIyNzc5OSA3My44NzM3IDAuMjE1MTg0IDc0LjA0OTUgMC4yMDI1NyA3NC4yMjYxTDAuMTkxNDQgNzQuMzgxOUMwLjE3NTExNiA3NC42MTM0IDAuMTYwMjc1IDc0Ljg0NDIgMC4xNDYxNzcgNzUuMDc1N0MwLjE0NjE3NyA3NS4wOTU3IDAuMTQ2MTc3IDc1LjExNTggMC4xNDI0NjcgNzUuMTM1QzAuMTMwNTk1IDc1LjM0MjggMC4xMTg5NyA3NS41NTA2IDAuMTA3NTkyIDc1Ljc1ODNDMC4xMDc1OTIgNzUuODI0NCAwLjEwMDkxNCA3NS44OTExIDAuMDk3OTQ2IDc1Ljk1NzJDMC4wODk3ODM4IDc2LjEyMjYgMC4wODE2MjE4IDc2LjI4NzQgMC4wNzQ5NDM3IDc2LjQ1MjhDMC4wNzQ5NDM3IDc2LjUyNyAwLjA2ODI2NTIgNzYuNTk3NSAwLjA2NTI5NzEgNzYuNjY5NUMwLjA1ODM3MTcgNzYuODQxNiAwLjA1MTk0MTMgNzcuMDE0OCAwLjA0NjAwNTEgNzcuMTg4OUMwLjA0NjAwNTEgNzcuMjQ3NSAwLjA0MTU1MjkgNzcuMzA2MSAwLjA0MDA2ODkgNzcuMzY0N0MwLjAzMjY0ODcgNzcuNTk3NyAwLjAyNTk3MDMgNzcuODMwNyAwLjAyMDAzNDIgNzguMDYzN1Y3OC4wNzI2QzAuMDE0ODQwMSA3OC4yOTUyIDAuMDEwMzg4MSA3OC41MjQ1IDAuMDA3NDIwMDQgNzguNzUwOFY3OC44OTkyQzAuMDA3NDIwMDQgNzkuMjE3NSAwIDc5LjUzNjYgMCA3OS44NTU2QzAuMDMxMTY0NiA3OC40MzU0IDUuMTMzMjYgNzUuNjMwNyAxNy42MTQ3IDcwLjE5NTZaXCIsXG4gICAgICAgICAgZmlsbDogXCJ1cmwoI3BhaW50MTRfbGluZWFyKVwiXG4gICAgICAgIH1cbiAgICAgICksXG4gICAgICAvKiBAX19QVVJFX18gKi8gYyhcbiAgICAgICAgXCJwYXRoXCIsXG4gICAgICAgIHtcbiAgICAgICAgICBzdHlsZTogeyBtaXhCbGVuZE1vZGU6IFwibXVsdGlwbHlcIiB9LFxuICAgICAgICAgIGQ6IFwiTTE0NS43NyAxMDcuMTYzQzE0My43MDYgMTA3LjE2MyAxMzEuODIxIDEwNy40NDIgMTEyLjY0NiAxMDkuMjhDODcuNTI3NCAxMTEuNjg5IDUwLjkzOTQgMTE2Ljk2NSAzNi4xNDQzIDExOS40ODhDMjYuOTU1MiAxMjEuMDU1IDE4LjM4NDkgMTIyLjg4OCAxMy4yMTAxIDEyNC4wNTFDMTMuNDQyMSAxMjQuNDAzIDEzLjY3NzEgMTI0Ljc1MiAxMy45MTUgMTI1LjA5OUwxNC4wNzUzIDEyNS4zMzRDMTQuMTc0MiAxMjUuNDgyIDE0LjI3NTkgMTI1LjYyOCAxNC4zODAzIDEyNS43NzJDMTQuNDM2NyAxMjUuODUzIDE0LjQ5MzggMTI1LjkzNCAxNC41NTAyIDEyNi4wMTRDMTQuNjU0OCAxMjYuMTYzIDE0Ljc1ODcgMTI2LjMxMSAxNC44NjQxIDEyNi40NkwxNC45NzM5IDEyNi42MDhDMTUuMTkxIDEyNi45MTEgMTUuNDEwNyAxMjcuMjEzIDE1LjYzMjggMTI3LjUxM0MxNS42Nzg4IDEyNy41NzUgMTUuNzIzMyAxMjcuNjM2IDE1Ljc2OTMgMTI3LjY5N0MxNS44NzkxIDEyNy44NDYgMTUuOTkxOSAxMjcuOTk0IDE2LjEwMTcgMTI4LjE0MkwxNi4yNjY1IDEyOC4zNkMxNi4zNzkzIDEyOC41MDggMTYuNDkyOCAxMjguNjU3IDE2LjYwNzEgMTI4LjgwNUwxNi43MjggMTI4Ljk2MUMxNi45ODQyIDEyOS4yOTEgMTcuMjQyNSAxMjkuNjE5IDE3LjUwMjcgMTI5Ljk0NUwxNy41NDI3IDEyOS45OTZDMTcuNjY2NyAxMzAuMTUxIDE3Ljc5MjEgMTMwLjMwNSAxNy45MTM3IDEzMC40NThMMTguMDU4NCAxMzAuNjM2QzE4LjE4MzEgMTMwLjc4NCAxOC4zMDc4IDEzMC45NCAxOC40MzMyIDEzMS4wOUwxOC41NDY3IDEzMS4yMjdDMTguOTY2NyAxMzEuNzMgMTkuMzkyNiAxMzIuMjI4IDE5LjgyNDQgMTMyLjcyTDE5LjkzMjggMTMyLjg0M0MyMC4wNzA4IDEzMyAyMC4yMDk1IDEzMy4xNTYgMjAuMzQ5IDEzMy4zMTJDMjAuMzgwOSAxMzMuMzQ4IDIwLjQxMjkgMTMzLjM4NiAyMC40NDU1IDEzMy40MTlDMjAuOTAzNiAxMzMuOTMgMjEuMzY3OCAxMzQuNDM0IDIxLjgzODMgMTM0LjkzMkwyMS44ODUgMTM0Ljk4MkMyMi4wMzg0IDEzNS4xNDQgMjIuMTkyNSAxMzUuMzA1IDIyLjM0NzMgMTM1LjQ2NkwyMi40MjE1IDEzNS41NDVDMjMuMDc3NCAxMzYuMjI0IDIzLjc0NTIgMTM2Ljg5MiAyNC40MjQ5IDEzNy41NDhMMjQuNDc2MSAxMzcuNTk3QzI1LjE2ODcgMTM4LjI2MyAyNS44NzE0IDEzOC45MTcgMjYuNTg0MiAxMzkuNTU4TDI2LjYwODcgMTM5LjU4QzI3LjMzMzkgMTQwLjIzIDI4LjA3MDUgMTQwLjg2NyAyOC44MTg0IDE0MS40OUMyOS4yMTgzIDE0MS44MjYgMzAuMDkxIDE0MS44ODYgMzIuODI5NyAxNDEuMzY4QzM4LjU3NjYgMTQwLjI4MSA2MC4xMDAzIDEzNi41NDUgODMuOTY1IDEzMy4yNzRDMTA2LjQxOCAxMzAuMTk3IDEzMC41MjkgMTI5LjU0NSAxMzMuNzQzIDEyOS41NzdDMTM3Ljk0MSAxMjkuNjIgMTQxLjkxNSAxMzAuNTU1IDE0MC4zMTQgMTMyLjU1NUMxNDAuNDk0IDEzMi4zNSAxNDAuNjcyIDEzMi4xNDMgMTQwLjg0OSAxMzEuOTM1TDE0MC44ODkgMTMxLjg4OUMxNDAuODkyIDEzMS44ODUgMTQwLjg5NSAxMzEuODgxIDE0MC44OTggMTMxLjg3N0MxNDEuMDY4IDEzMS42NzkgMTQxLjIzNyAxMzEuNDc5IDE0MS40MDUgMTMxLjI3N0wxNDEuNDQxIDEzMS4yMzVDMTQxLjQ1IDEzMS4yMjIgMTQxLjQ2MSAxMzEuMjExIDE0MS40NzEgMTMxLjE5OEMxNDEuNjM3IDEzMSAxNDEuODAzIDEzMC44IDE0MS45NjggMTMwLjU5NkwxNDIuMDI4IDEzMC41MjJDMTQyLjE5NSAxMzAuMzE2IDE0Mi4zNjIgMTMwLjEwOSAxNDIuNTI5IDEyOS45MDFMMTQyLjU2IDEyOS44NjJDMTQzLjE4MSAxMjkuMDgzIDE0My43ODcgMTI4LjI5MyAxNDQuMzggMTI3LjQ5MkwxNDQuNDA4IDEyNy40NTVDMTQ1LjAwMiAxMjYuNjUzIDE0NS41NzggMTI1Ljg0MSAxNDYuMTM4IDEyNS4wMTZMMTQ2LjE0MyAxMjUuMDFMMTQ2LjE1OCAxMjQuOTg3QzE0Ni4zMTEgMTI0Ljc2MiAxNDYuNDYzIDEyNC41MzcgMTQ2LjYxNCAxMjQuMzExQzE0Ni42MjggMTI0LjI4OSAxNDYuNjQyIDEyNC4yNjggMTQ2LjY1NyAxMjQuMjQ2QzE0Ni44MDYgMTI0LjAyNSAxNDYuOTUyIDEyMy44MDIgMTQ3LjA5NiAxMjMuNTc4TDE0Ny4xMDQgMTIzLjU2N0MxNDcuMTE2IDEyMy41NDggMTQ3LjEyOCAxMjMuNTI5IDE0Ny4xNCAxMjMuNTExQzE0Ny4yODkgMTIzLjI4NCAxNDcuNDM1IDEyMy4wNTYgMTQ3LjU3OSAxMjIuODI4QzE0Ny41ODggMTIyLjgxNSAxNDcuNTk2IDEyMi44MDIgMTQ3LjYwNCAxMjIuNzg5QzE0OC44NDEgMTIwLjg0MSAxNDkuOTkyIDExOC44MzggMTUxLjA1OSAxMTYuNzc5TDE1MS4wNzQgMTE2Ljc1M0MxNTEuMjAxIDExNi41MDUgMTUxLjMyOCAxMTYuMjU4IDE1MS40NTQgMTE2LjAxMUwxNTEuNDY3IDExNS45ODZMMTUxLjQ3NyAxMTUuOTY2QzE1MS42MDMgMTE1LjcxNiAxNTEuNzI3IDExNS40NjUgMTUxLjg0OCAxMTUuMjE0TDE1MS44NTMgMTE1LjIwNEwxNTEuODYyIDExNS4xODVDMTUyLjg4OCAxMTMuMDkyIDE1My44MjQgMTEwLjk0OSAxNTQuNjcxIDEwOC43NTZDMTU0Ljk4IDEwNy44NTkgMTU0LjAxNiAxMDcuMTYzIDE0NS43NyAxMDcuMTYzWlwiLFxuICAgICAgICAgIGZpbGw6IFwidXJsKCNwYWludDE1X2xpbmVhcilcIlxuICAgICAgICB9XG4gICAgICApLFxuICAgICAgLyogQF9fUFVSRV9fICovIGUxKFwiZGVmc1wiLCB7IGNoaWxkcmVuOiBbXG4gICAgICAgIC8qIEBfX1BVUkVfXyAqLyBlMShcbiAgICAgICAgICBcImxpbmVhckdyYWRpZW50XCIsXG4gICAgICAgICAge1xuICAgICAgICAgICAgaWQ6IFwicGFpbnQwX2xpbmVhclwiLFxuICAgICAgICAgICAgeDE6IFwiMi42NjYwNlwiLFxuICAgICAgICAgICAgeTE6IFwiOTIuNDU1NFwiLFxuICAgICAgICAgICAgeDI6IFwiMTYwLjAwN1wiLFxuICAgICAgICAgICAgeTI6IFwiOTIuNDU1NFwiLFxuICAgICAgICAgICAgZ3JhZGllbnRVbml0czogXCJ1c2VyU3BhY2VPblVzZVwiLFxuICAgICAgICAgICAgY2hpbGRyZW46IFtcbiAgICAgICAgICAgICAgLyogQF9fUFVSRV9fICovIGMoXCJzdG9wXCIsIHsgb2Zmc2V0OiBcIjAuMDNcIiwgc3RvcENvbG9yOiBcIiNFOUY3RkVcIiwgc3RvcE9wYWNpdHk6IFwiMC40XCIgfSksXG4gICAgICAgICAgICAgIC8qIEBfX1BVUkVfXyAqLyBjKFwic3RvcFwiLCB7IG9mZnNldDogXCIwLjMxXCIsIHN0b3BDb2xvcjogXCIjNUVBMUQ3XCIgfSksXG4gICAgICAgICAgICAgIC8qIEBfX1BVUkVfXyAqLyBjKFwic3RvcFwiLCB7IG9mZnNldDogXCIwLjU1XCIsIHN0b3BDb2xvcjogXCIjNERBM0RBXCIgfSksXG4gICAgICAgICAgICAgIC8qIEBfX1BVUkVfXyAqLyBjKFwic3RvcFwiLCB7IG9mZnNldDogXCIwLjg5XCIsIHN0b3BDb2xvcjogXCIjNjQ1RkFBXCIgfSksXG4gICAgICAgICAgICAgIC8qIEBfX1BVUkVfXyAqLyBjKFwic3RvcFwiLCB7IG9mZnNldDogXCIxXCIsIHN0b3BDb2xvcjogXCIjNDE0MDk5XCIgfSlcbiAgICAgICAgICAgIF1cbiAgICAgICAgICB9XG4gICAgICAgICksXG4gICAgICAgIC8qIEBfX1BVUkVfXyAqLyBlMShcbiAgICAgICAgICBcImxpbmVhckdyYWRpZW50XCIsXG4gICAgICAgICAge1xuICAgICAgICAgICAgaWQ6IFwicGFpbnQxX2xpbmVhclwiLFxuICAgICAgICAgICAgeDE6IFwiMjAuODcxNFwiLFxuICAgICAgICAgICAgeTE6IFwiNzQuMjYyNlwiLFxuICAgICAgICAgICAgeDI6IFwiOTguMTgzNVwiLFxuICAgICAgICAgICAgeTI6IFwiLTMuMDUxNzNcIixcbiAgICAgICAgICAgIGdyYWRpZW50VW5pdHM6IFwidXNlclNwYWNlT25Vc2VcIixcbiAgICAgICAgICAgIGNoaWxkcmVuOiBbXG4gICAgICAgICAgICAgIC8qIEBfX1BVUkVfXyAqLyBjKFwic3RvcFwiLCB7IHN0b3BDb2xvcjogXCIjRkZGNzk1XCIsIHN0b3BPcGFjaXR5OiBcIjAuM1wiIH0pLFxuICAgICAgICAgICAgICAvKiBAX19QVVJFX18gKi8gYyhcInN0b3BcIiwgeyBvZmZzZXQ6IFwiMC4zNVwiLCBzdG9wQ29sb3I6IFwiI0YzQzIwNlwiIH0pLFxuICAgICAgICAgICAgICAvKiBAX19QVVJFX18gKi8gYyhcInN0b3BcIiwgeyBvZmZzZXQ6IFwiMC42NVwiLCBzdG9wQ29sb3I6IFwiI0ZGQzIwRVwiIH0pLFxuICAgICAgICAgICAgICAvKiBAX19QVVJFX18gKi8gYyhcInN0b3BcIiwgeyBvZmZzZXQ6IFwiMC45NVwiLCBzdG9wQ29sb3I6IFwiI0Y5OUIxQ1wiIH0pLFxuICAgICAgICAgICAgICAvKiBAX19QVVJFX18gKi8gYyhcInN0b3BcIiwgeyBvZmZzZXQ6IFwiMVwiLCBzdG9wQ29sb3I6IFwiI0Y2ODkxRlwiIH0pXG4gICAgICAgICAgICBdXG4gICAgICAgICAgfVxuICAgICAgICApLFxuICAgICAgICAvKiBAX19QVVJFX18gKi8gZTEoXG4gICAgICAgICAgXCJsaW5lYXJHcmFkaWVudFwiLFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGlkOiBcInBhaW50Ml9saW5lYXJcIixcbiAgICAgICAgICAgIHgxOiBcIjIuMzQ5MjFcIixcbiAgICAgICAgICAgIHkxOiBcIjYwLjA5OTNcIixcbiAgICAgICAgICAgIHgyOiBcIjE1Ni4wMzJcIixcbiAgICAgICAgICAgIHkyOiBcIjYwLjA5OTNcIixcbiAgICAgICAgICAgIGdyYWRpZW50VW5pdHM6IFwidXNlclNwYWNlT25Vc2VcIixcbiAgICAgICAgICAgIGNoaWxkcmVuOiBbXG4gICAgICAgICAgICAgIC8qIEBfX1BVUkVfXyAqLyBjKFwic3RvcFwiLCB7IHN0b3BDb2xvcjogXCIjOTEyQTczXCIgfSksXG4gICAgICAgICAgICAgIC8qIEBfX1BVUkVfXyAqLyBjKFwic3RvcFwiLCB7IG9mZnNldDogXCIwLjE3XCIsIHN0b3BDb2xvcjogXCIjQzYxNjhEXCIgfSksXG4gICAgICAgICAgICAgIC8qIEBfX1BVUkVfXyAqLyBjKFwic3RvcFwiLCB7IG9mZnNldDogXCIwLjUxXCIsIHN0b3BDb2xvcjogXCIjRjE3NUFEXCIgfSksXG4gICAgICAgICAgICAgIC8qIEBfX1BVUkVfXyAqLyBjKFwic3RvcFwiLCB7IG9mZnNldDogXCIwLjc2XCIsIHN0b3BDb2xvcjogXCIjQzU5M0MzXCIgfSksXG4gICAgICAgICAgICAgIC8qIEBfX1BVUkVfXyAqLyBjKFwic3RvcFwiLCB7IG9mZnNldDogXCIxXCIsIHN0b3BDb2xvcjogXCJ3aGl0ZVwiLCBzdG9wT3BhY2l0eTogXCIwLjVcIiB9KVxuICAgICAgICAgICAgXVxuICAgICAgICAgIH1cbiAgICAgICAgKSxcbiAgICAgICAgLyogQF9fUFVSRV9fICovIGUxKFxuICAgICAgICAgIFwibGluZWFyR3JhZGllbnRcIixcbiAgICAgICAgICB7XG4gICAgICAgICAgICBpZDogXCJwYWludDNfbGluZWFyXCIsXG4gICAgICAgICAgICB4MTogXCI2Ny40MTUxXCIsXG4gICAgICAgICAgICB5MTogXCIxNDYuMjgxXCIsXG4gICAgICAgICAgICB4MjogXCIxNTAuNjk3XCIsXG4gICAgICAgICAgICB5MjogXCIxNDYuMjgxXCIsXG4gICAgICAgICAgICBncmFkaWVudFVuaXRzOiBcInVzZXJTcGFjZU9uVXNlXCIsXG4gICAgICAgICAgICBjaGlsZHJlbjogW1xuICAgICAgICAgICAgICAvKiBAX19QVVJFX18gKi8gYyhcInN0b3BcIiwgeyBzdG9wQ29sb3I6IFwiIzcyQkY0NFwiIH0pLFxuICAgICAgICAgICAgICAvKiBAX19QVVJFX18gKi8gYyhcInN0b3BcIiwgeyBvZmZzZXQ6IFwiMC4xOVwiLCBzdG9wQ29sb3I6IFwiIzkxQzgzRFwiIH0pLFxuICAgICAgICAgICAgICAvKiBAX19QVVJFX18gKi8gYyhcInN0b3BcIiwgeyBvZmZzZXQ6IFwiMC4zOFwiLCBzdG9wQ29sb3I6IFwiI0FDRDAzN1wiIH0pLFxuICAgICAgICAgICAgICAvKiBAX19QVVJFX18gKi8gYyhcInN0b3BcIiwgeyBvZmZzZXQ6IFwiMC40N1wiLCBzdG9wQ29sb3I6IFwiIzk5Q0EzQlwiIH0pLFxuICAgICAgICAgICAgICAvKiBAX19QVVJFX18gKi8gYyhcInN0b3BcIiwgeyBvZmZzZXQ6IFwiMC42XCIsIHN0b3BDb2xvcjogXCIjN0RDMjQyXCIgfSksXG4gICAgICAgICAgICAgIC8qIEBfX1BVUkVfXyAqLyBjKFwic3RvcFwiLCB7IG9mZnNldDogXCIwLjcyXCIsIHN0b3BDb2xvcjogXCIjNEZCODQ4XCIgfSksXG4gICAgICAgICAgICAgIC8qIEBfX1BVUkVfXyAqLyBjKFwic3RvcFwiLCB7IG9mZnNldDogXCIwLjg0XCIsIHN0b3BDb2xvcjogXCIjMjRBRTREXCIgfSksXG4gICAgICAgICAgICAgIC8qIEBfX1BVUkVfXyAqLyBjKFwic3RvcFwiLCB7IG9mZnNldDogXCIwLjk0XCIsIHN0b3BDb2xvcjogXCIjMEFBODUwXCIgfSksXG4gICAgICAgICAgICAgIC8qIEBfX1BVUkVfXyAqLyBjKFwic3RvcFwiLCB7IG9mZnNldDogXCIxXCIsIHN0b3BDb2xvcjogXCIjMDBBNjUxXCIgfSlcbiAgICAgICAgICAgIF1cbiAgICAgICAgICB9XG4gICAgICAgICksXG4gICAgICAgIC8qIEBfX1BVUkVfXyAqLyBlMShcbiAgICAgICAgICBcImxpbmVhckdyYWRpZW50XCIsXG4gICAgICAgICAge1xuICAgICAgICAgICAgaWQ6IFwicGFpbnQ0X2xpbmVhclwiLFxuICAgICAgICAgICAgeDE6IFwiMjQuMTExOFwiLFxuICAgICAgICAgICAgeTE6IFwiMTI0LjQ1OFwiLFxuICAgICAgICAgICAgeDI6IFwiMTMxLjQ5OFwiLFxuICAgICAgICAgICAgeTI6IFwiMTI0LjQ1OFwiLFxuICAgICAgICAgICAgZ3JhZGllbnRVbml0czogXCJ1c2VyU3BhY2VPblVzZVwiLFxuICAgICAgICAgICAgY2hpbGRyZW46IFtcbiAgICAgICAgICAgICAgLyogQF9fUFVSRV9fICovIGMoXCJzdG9wXCIsIHsgc3RvcENvbG9yOiBcIiMwMDc3QUNcIiB9KSxcbiAgICAgICAgICAgICAgLyogQF9fUFVSRV9fICovIGMoXCJzdG9wXCIsIHsgb2Zmc2V0OiBcIjAuMjJcIiwgc3RvcENvbG9yOiBcIiMwMDgzQkJcIiB9KSxcbiAgICAgICAgICAgICAgLyogQF9fUFVSRV9fICovIGMoXCJzdG9wXCIsIHsgb2Zmc2V0OiBcIjAuNDRcIiwgc3RvcENvbG9yOiBcIiMwMDk5REFcIiB9KSxcbiAgICAgICAgICAgICAgLyogQF9fUFVSRV9fICovIGMoXCJzdG9wXCIsIHsgb2Zmc2V0OiBcIjAuNjVcIiwgc3RvcENvbG9yOiBcIiMwMEIyRERcIiB9KSxcbiAgICAgICAgICAgICAgLyogQF9fUFVSRV9fICovIGMoXCJzdG9wXCIsIHsgb2Zmc2V0OiBcIjAuNjdcIiwgc3RvcENvbG9yOiBcIiMwMEIxREFcIiB9KSxcbiAgICAgICAgICAgICAgLyogQF9fUFVSRV9fICovIGMoXCJzdG9wXCIsIHsgb2Zmc2V0OiBcIjAuODNcIiwgc3RvcENvbG9yOiBcIiMwMEFDQzZcIiB9KSxcbiAgICAgICAgICAgICAgLyogQF9fUFVSRV9fICovIGMoXCJzdG9wXCIsIHsgb2Zmc2V0OiBcIjAuOTRcIiwgc3RvcENvbG9yOiBcIiMwMEFBQTlcIiB9KSxcbiAgICAgICAgICAgICAgLyogQF9fUFVSRV9fICovIGMoXCJzdG9wXCIsIHsgb2Zmc2V0OiBcIjFcIiwgc3RvcENvbG9yOiBcIiMwMEE5OURcIiB9KVxuICAgICAgICAgICAgXVxuICAgICAgICAgIH1cbiAgICAgICAgKSxcbiAgICAgICAgLyogQF9fUFVSRV9fICovIGUxKFxuICAgICAgICAgIFwibGluZWFyR3JhZGllbnRcIixcbiAgICAgICAgICB7XG4gICAgICAgICAgICBpZDogXCJwYWludDVfbGluZWFyXCIsXG4gICAgICAgICAgICB4MTogXCI0NC4zMTgzXCIsXG4gICAgICAgICAgICB5MTogXCI3LjcxMzc2XCIsXG4gICAgICAgICAgICB4MjogXCI2NC4zNDg5XCIsXG4gICAgICAgICAgICB5MjogXCIxNS45ODc0XCIsXG4gICAgICAgICAgICBncmFkaWVudFVuaXRzOiBcInVzZXJTcGFjZU9uVXNlXCIsXG4gICAgICAgICAgICBjaGlsZHJlbjogW1xuICAgICAgICAgICAgICAvKiBAX19QVVJFX18gKi8gYyhcInN0b3BcIiwgeyBzdG9wQ29sb3I6IFwiI0Y1ODIyMFwiIH0pLFxuICAgICAgICAgICAgICAvKiBAX19QVVJFX18gKi8gYyhcInN0b3BcIiwgeyBvZmZzZXQ6IFwiMVwiLCBzdG9wQ29sb3I6IFwiI0ZDQUYxN1wiIH0pXG4gICAgICAgICAgICBdXG4gICAgICAgICAgfVxuICAgICAgICApLFxuICAgICAgICAvKiBAX19QVVJFX18gKi8gZTEoXG4gICAgICAgICAgXCJsaW5lYXJHcmFkaWVudFwiLFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGlkOiBcInBhaW50Nl9saW5lYXJcIixcbiAgICAgICAgICAgIHgxOiBcIjEwNC40NjhcIixcbiAgICAgICAgICAgIHkxOiBcIjEyOS4xMzdcIixcbiAgICAgICAgICAgIHgyOiBcIjE1NC42NTFcIixcbiAgICAgICAgICAgIHkyOiBcIjEyOS4xMzdcIixcbiAgICAgICAgICAgIGdyYWRpZW50VW5pdHM6IFwidXNlclNwYWNlT25Vc2VcIixcbiAgICAgICAgICAgIGNoaWxkcmVuOiBbXG4gICAgICAgICAgICAgIC8qIEBfX1BVUkVfXyAqLyBjKFwic3RvcFwiLCB7IHN0b3BDb2xvcjogXCIjMDA4QTRCXCIgfSksXG4gICAgICAgICAgICAgIC8qIEBfX1BVUkVfXyAqLyBjKFwic3RvcFwiLCB7IG9mZnNldDogXCIwLjEyXCIsIHN0b3BDb2xvcjogXCIjMTc5NDQ5XCIgfSksXG4gICAgICAgICAgICAgIC8qIEBfX1BVUkVfXyAqLyBjKFwic3RvcFwiLCB7IG9mZnNldDogXCIwLjU2XCIsIHN0b3BDb2xvcjogXCIjNkNCODQyXCIgfSksXG4gICAgICAgICAgICAgIC8qIEBfX1BVUkVfXyAqLyBjKFwic3RvcFwiLCB7IG9mZnNldDogXCIwLjc2XCIsIHN0b3BDb2xvcjogXCIjOERDNjNGXCIgfSksXG4gICAgICAgICAgICAgIC8qIEBfX1BVUkVfXyAqLyBjKFwic3RvcFwiLCB7IG9mZnNldDogXCIxXCIsIHN0b3BDb2xvcjogXCIjMzJBNDQzXCIgfSlcbiAgICAgICAgICAgIF1cbiAgICAgICAgICB9XG4gICAgICAgICksXG4gICAgICAgIC8qIEBfX1BVUkVfXyAqLyBlMShcbiAgICAgICAgICBcImxpbmVhckdyYWRpZW50XCIsXG4gICAgICAgICAge1xuICAgICAgICAgICAgaWQ6IFwicGFpbnQ3X2xpbmVhclwiLFxuICAgICAgICAgICAgeDE6IFwiMC4wMDA3MzI0MjJcIixcbiAgICAgICAgICAgIHkxOiBcIjUxLjAwNFwiLFxuICAgICAgICAgICAgeDI6IFwiODEuODE2MVwiLFxuICAgICAgICAgICAgeTI6IFwiNTEuMDA0XCIsXG4gICAgICAgICAgICBncmFkaWVudFVuaXRzOiBcInVzZXJTcGFjZU9uVXNlXCIsXG4gICAgICAgICAgICBjaGlsZHJlbjogW1xuICAgICAgICAgICAgICAvKiBAX19QVVJFX18gKi8gYyhcInN0b3BcIiwgeyBzdG9wQ29sb3I6IFwiI0ZDQUYxN1wiIH0pLFxuICAgICAgICAgICAgICAvKiBAX19QVVJFX18gKi8gYyhcInN0b3BcIiwgeyBvZmZzZXQ6IFwiMVwiLCBzdG9wQ29sb3I6IFwiI0YwNEUyM1wiIH0pXG4gICAgICAgICAgICBdXG4gICAgICAgICAgfVxuICAgICAgICApLFxuICAgICAgICAvKiBAX19QVVJFX18gKi8gZTEoXG4gICAgICAgICAgXCJsaW5lYXJHcmFkaWVudFwiLFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGlkOiBcInBhaW50OF9saW5lYXJcIixcbiAgICAgICAgICAgIHgxOiBcIjkzLjMyNjJcIixcbiAgICAgICAgICAgIHkxOiBcIjYwLjc0MTlcIixcbiAgICAgICAgICAgIHgyOiBcIjE2My44MDFcIixcbiAgICAgICAgICAgIHkyOiBcIjYwLjc0MTlcIixcbiAgICAgICAgICAgIGdyYWRpZW50VW5pdHM6IFwidXNlclNwYWNlT25Vc2VcIixcbiAgICAgICAgICAgIGNoaWxkcmVuOiBbXG4gICAgICAgICAgICAgIC8qIEBfX1BVUkVfXyAqLyBjKFwic3RvcFwiLCB7IG9mZnNldDogXCIwLjE5XCIsIHN0b3BDb2xvcjogXCIjODEyOTkwXCIgfSksXG4gICAgICAgICAgICAgIC8qIEBfX1BVUkVfXyAqLyBjKFwic3RvcFwiLCB7IG9mZnNldDogXCIwLjMxXCIsIHN0b3BDb2xvcjogXCIjODgyRTkyXCIgfSksXG4gICAgICAgICAgICAgIC8qIEBfX1BVUkVfXyAqLyBjKFwic3RvcFwiLCB7IG9mZnNldDogXCIwLjVcIiwgc3RvcENvbG9yOiBcIiM5QzNCOTdcIiB9KSxcbiAgICAgICAgICAgICAgLyogQF9fUFVSRV9fICovIGMoXCJzdG9wXCIsIHsgb2Zmc2V0OiBcIjAuNzFcIiwgc3RvcENvbG9yOiBcIiNCQzUwOUZcIiB9KSxcbiAgICAgICAgICAgICAgLyogQF9fUFVSRV9fICovIGMoXCJzdG9wXCIsIHsgb2Zmc2V0OiBcIjAuOTVcIiwgc3RvcENvbG9yOiBcIiNFODZEQUFcIiB9KSxcbiAgICAgICAgICAgICAgLyogQF9fUFVSRV9fICovIGMoXCJzdG9wXCIsIHsgb2Zmc2V0OiBcIjFcIiwgc3RvcENvbG9yOiBcIiNGMTczQUNcIiB9KVxuICAgICAgICAgICAgXVxuICAgICAgICAgIH1cbiAgICAgICAgKSxcbiAgICAgICAgLyogQF9fUFVSRV9fICovIGUxKFxuICAgICAgICAgIFwibGluZWFyR3JhZGllbnRcIixcbiAgICAgICAgICB7XG4gICAgICAgICAgICBpZDogXCJwYWludDlfbGluZWFyXCIsXG4gICAgICAgICAgICB4MTogXCIyLjU0NTg4XCIsXG4gICAgICAgICAgICB5MTogXCIxMTMuNjA2XCIsXG4gICAgICAgICAgICB4MjogXCI5Mi44NDU0XCIsXG4gICAgICAgICAgICB5MjogXCIxMTMuNjA2XCIsXG4gICAgICAgICAgICBncmFkaWVudFVuaXRzOiBcInVzZXJTcGFjZU9uVXNlXCIsXG4gICAgICAgICAgICBjaGlsZHJlbjogW1xuICAgICAgICAgICAgICAvKiBAX19QVVJFX18gKi8gYyhcInN0b3BcIiwgeyBzdG9wQ29sb3I6IFwiIzAwODlDRlwiLCBzdG9wT3BhY2l0eTogXCIwLjlcIiB9KSxcbiAgICAgICAgICAgICAgLyogQF9fUFVSRV9fICovIGMoXCJzdG9wXCIsIHsgb2Zmc2V0OiBcIjFcIiwgc3RvcENvbG9yOiBcIiMwMDU0QTZcIiB9KVxuICAgICAgICAgICAgXVxuICAgICAgICAgIH1cbiAgICAgICAgKSxcbiAgICAgICAgLyogQF9fUFVSRV9fICovIGUxKFxuICAgICAgICAgIFwibGluZWFyR3JhZGllbnRcIixcbiAgICAgICAgICB7XG4gICAgICAgICAgICBpZDogXCJwYWludDEwX2xpbmVhclwiLFxuICAgICAgICAgICAgeDE6IFwiODYuNzgwMlwiLFxuICAgICAgICAgICAgeTE6IFwiMTU2Ljg5NFwiLFxuICAgICAgICAgICAgeDI6IFwiNjAuNDk3M1wiLFxuICAgICAgICAgICAgeTI6IFwiMTUwLjA5OVwiLFxuICAgICAgICAgICAgZ3JhZGllbnRVbml0czogXCJ1c2VyU3BhY2VPblVzZVwiLFxuICAgICAgICAgICAgY2hpbGRyZW46IFtcbiAgICAgICAgICAgICAgLyogQF9fUFVSRV9fICovIGMoXCJzdG9wXCIsIHsgc3RvcENvbG9yOiBcIiM5QUNBM0NcIiB9KSxcbiAgICAgICAgICAgICAgLyogQF9fUFVSRV9fICovIGMoXCJzdG9wXCIsIHsgb2Zmc2V0OiBcIjAuMzRcIiwgc3RvcENvbG9yOiBcIiM3QUMzNDBcIiB9KSxcbiAgICAgICAgICAgICAgLyogQF9fUFVSRV9fICovIGMoXCJzdG9wXCIsIHsgb2Zmc2V0OiBcIjFcIiwgc3RvcENvbG9yOiBcIiMzM0I0NEFcIiB9KVxuICAgICAgICAgICAgXVxuICAgICAgICAgIH1cbiAgICAgICAgKSxcbiAgICAgICAgLyogQF9fUFVSRV9fICovIGUxKFxuICAgICAgICAgIFwibGluZWFyR3JhZGllbnRcIixcbiAgICAgICAgICB7XG4gICAgICAgICAgICBpZDogXCJwYWludDExX2xpbmVhclwiLFxuICAgICAgICAgICAgeDE6IFwiNDkuNzc1MVwiLFxuICAgICAgICAgICAgeTE6IFwiNS4xNzY5XCIsXG4gICAgICAgICAgICB4MjogXCIxMDMuODQyXCIsXG4gICAgICAgICAgICB5MjogXCIxMi43NzUzXCIsXG4gICAgICAgICAgICBncmFkaWVudFVuaXRzOiBcInVzZXJTcGFjZU9uVXNlXCIsXG4gICAgICAgICAgICBjaGlsZHJlbjogW1xuICAgICAgICAgICAgICAvKiBAX19QVVJFX18gKi8gYyhcInN0b3BcIiwgeyBzdG9wQ29sb3I6IFwiI0ZEQjUxNVwiIH0pLFxuICAgICAgICAgICAgICAvKiBAX19QVVJFX18gKi8gYyhcInN0b3BcIiwgeyBvZmZzZXQ6IFwiMC4zNlwiLCBzdG9wQ29sb3I6IFwiI0ZGRDEwMFwiIH0pLFxuICAgICAgICAgICAgICAvKiBAX19QVVJFX18gKi8gYyhcInN0b3BcIiwgeyBvZmZzZXQ6IFwiMC41OFwiLCBzdG9wQ29sb3I6IFwiI0ZGQzkwN1wiIH0pLFxuICAgICAgICAgICAgICAvKiBAX19QVVJFX18gKi8gYyhcInN0b3BcIiwgeyBvZmZzZXQ6IFwiMC43XCIsIHN0b3BDb2xvcjogXCIjRkZDMjBFXCIgfSksXG4gICAgICAgICAgICAgIC8qIEBfX1BVUkVfXyAqLyBjKFwic3RvcFwiLCB7IG9mZnNldDogXCIwLjg3XCIsIHN0b3BDb2xvcjogXCIjRkJBNjE3XCIgfSksXG4gICAgICAgICAgICAgIC8qIEBfX1BVUkVfXyAqLyBjKFwic3RvcFwiLCB7IG9mZnNldDogXCIxXCIsIHN0b3BDb2xvcjogXCIjRjc4RTFFXCIgfSlcbiAgICAgICAgICAgIF1cbiAgICAgICAgICB9XG4gICAgICAgICksXG4gICAgICAgIC8qIEBfX1BVUkVfXyAqLyBlMShcbiAgICAgICAgICBcImxpbmVhckdyYWRpZW50XCIsXG4gICAgICAgICAge1xuICAgICAgICAgICAgaWQ6IFwicGFpbnQxMl9saW5lYXJcIixcbiAgICAgICAgICAgIHgxOiBcIjYzLjgzMTFcIixcbiAgICAgICAgICAgIHkxOiBcIjE1OC44NTNcIixcbiAgICAgICAgICAgIHgyOiBcIjc3LjQ3MlwiLFxuICAgICAgICAgICAgeTI6IFwiMTQ1LjIxMlwiLFxuICAgICAgICAgICAgZ3JhZGllbnRVbml0czogXCJ1c2VyU3BhY2VPblVzZVwiLFxuICAgICAgICAgICAgY2hpbGRyZW46IFtcbiAgICAgICAgICAgICAgLyogQF9fUFVSRV9fICovIGMoXCJzdG9wXCIsIHsgc3RvcENvbG9yOiBcIiNCQUQ1MzJcIiB9KSxcbiAgICAgICAgICAgICAgLyogQF9fUFVSRV9fICovIGMoXCJzdG9wXCIsIHsgb2Zmc2V0OiBcIjAuMDNcIiwgc3RvcENvbG9yOiBcIiNCMUQzMzRcIiwgc3RvcE9wYWNpdHk6IFwiMC45M1wiIH0pLFxuICAgICAgICAgICAgICAvKiBAX19QVVJFX18gKi8gYyhcInN0b3BcIiwgeyBvZmZzZXQ6IFwiMC4xMVwiLCBzdG9wQ29sb3I6IFwiIzk0Q0MzOVwiLCBzdG9wT3BhY2l0eTogXCIwLjcyXCIgfSksXG4gICAgICAgICAgICAgIC8qIEBfX1BVUkVfXyAqLyBjKFwic3RvcFwiLCB7IG9mZnNldDogXCIwLjIxXCIsIHN0b3BDb2xvcjogXCIjN0FDNTNEXCIsIHN0b3BPcGFjaXR5OiBcIjAuNTJcIiB9KSxcbiAgICAgICAgICAgICAgLyogQF9fUFVSRV9fICovIGMoXCJzdG9wXCIsIHsgb2Zmc2V0OiBcIjAuMzFcIiwgc3RvcENvbG9yOiBcIiM2NEMwNDFcIiwgc3RvcE9wYWNpdHk6IFwiMC4zNlwiIH0pLFxuICAgICAgICAgICAgICAvKiBAX19QVVJFX18gKi8gYyhcInN0b3BcIiwgeyBvZmZzZXQ6IFwiMC40MVwiLCBzdG9wQ29sb3I6IFwiIzUyQkM0NFwiLCBzdG9wT3BhY2l0eTogXCIwLjIzXCIgfSksXG4gICAgICAgICAgICAgIC8qIEBfX1BVUkVfXyAqLyBjKFwic3RvcFwiLCB7IG9mZnNldDogXCIwLjUzXCIsIHN0b3BDb2xvcjogXCIjNDRCODQ3XCIsIHN0b3BPcGFjaXR5OiBcIjAuMTNcIiB9KSxcbiAgICAgICAgICAgICAgLyogQF9fUFVSRV9fICovIGMoXCJzdG9wXCIsIHsgb2Zmc2V0OiBcIjAuNjVcIiwgc3RvcENvbG9yOiBcIiMzQUI2NDlcIiwgc3RvcE9wYWNpdHk6IFwiMC4wNlwiIH0pLFxuICAgICAgICAgICAgICAvKiBAX19QVVJFX18gKi8gYyhcInN0b3BcIiwgeyBvZmZzZXQ6IFwiMC43OVwiLCBzdG9wQ29sb3I6IFwiIzM1QjQ0QVwiLCBzdG9wT3BhY2l0eTogXCIwLjAxXCIgfSksXG4gICAgICAgICAgICAgIC8qIEBfX1BVUkVfXyAqLyBjKFwic3RvcFwiLCB7IG9mZnNldDogXCIxXCIsIHN0b3BDb2xvcjogXCIjMzNCNDRBXCIsIHN0b3BPcGFjaXR5OiBcIjBcIiB9KVxuICAgICAgICAgICAgXVxuICAgICAgICAgIH1cbiAgICAgICAgKSxcbiAgICAgICAgLyogQF9fUFVSRV9fICovIGUxKFxuICAgICAgICAgIFwibGluZWFyR3JhZGllbnRcIixcbiAgICAgICAgICB7XG4gICAgICAgICAgICBpZDogXCJwYWludDEzX2xpbmVhclwiLFxuICAgICAgICAgICAgeDE6IFwiNTAuMjA1NVwiLFxuICAgICAgICAgICAgeTE6IFwiMTkuNjA3OVwiLFxuICAgICAgICAgICAgeDI6IFwiMTAxLjM1OFwiLFxuICAgICAgICAgICAgeTI6IFwiNS45MDE4NVwiLFxuICAgICAgICAgICAgZ3JhZGllbnRVbml0czogXCJ1c2VyU3BhY2VPblVzZVwiLFxuICAgICAgICAgICAgY2hpbGRyZW46IFtcbiAgICAgICAgICAgICAgLyogQF9fUFVSRV9fICovIGMoXCJzdG9wXCIsIHsgc3RvcENvbG9yOiBcIiNGMTVGMjJcIiwgc3RvcE9wYWNpdHk6IFwiMC44XCIgfSksXG4gICAgICAgICAgICAgIC8qIEBfX1BVUkVfXyAqLyBjKFwic3RvcFwiLCB7IG9mZnNldDogXCIwLjIxXCIsIHN0b3BDb2xvcjogXCIjRjY4NjFBXCIsIHN0b3BPcGFjaXR5OiBcIjAuNDhcIiB9KSxcbiAgICAgICAgICAgICAgLyogQF9fUFVSRV9fICovIGMoXCJzdG9wXCIsIHsgb2Zmc2V0OiBcIjAuMzlcIiwgc3RvcENvbG9yOiBcIiNGQUE1MTRcIiwgc3RvcE9wYWNpdHk6IFwiMC4yMlwiIH0pLFxuICAgICAgICAgICAgICAvKiBAX19QVVJFX18gKi8gYyhcInN0b3BcIiwgeyBvZmZzZXQ6IFwiMC41MlwiLCBzdG9wQ29sb3I6IFwiI0ZEQjkxMFwiLCBzdG9wT3BhY2l0eTogXCIwLjA2XCIgfSksXG4gICAgICAgICAgICAgIC8qIEBfX1BVUkVfXyAqLyBjKFwic3RvcFwiLCB7IG9mZnNldDogXCIwLjU5XCIsIHN0b3BDb2xvcjogXCIjRkVDMDBGXCIsIHN0b3BPcGFjaXR5OiBcIjBcIiB9KSxcbiAgICAgICAgICAgICAgLyogQF9fUFVSRV9fICovIGMoXCJzdG9wXCIsIHsgb2Zmc2V0OiBcIjAuNjVcIiwgc3RvcENvbG9yOiBcIiNGREJDMTBcIiwgc3RvcE9wYWNpdHk6IFwiMC4wNFwiIH0pLFxuICAgICAgICAgICAgICAvKiBAX19QVVJFX18gKi8gYyhcInN0b3BcIiwgeyBvZmZzZXQ6IFwiMC43NVwiLCBzdG9wQ29sb3I6IFwiI0ZDQjMxM1wiLCBzdG9wT3BhY2l0eTogXCIwLjE1XCIgfSksXG4gICAgICAgICAgICAgIC8qIEBfX1BVUkVfXyAqLyBjKFwic3RvcFwiLCB7IG9mZnNldDogXCIwLjg4XCIsIHN0b3BDb2xvcjogXCIjRkFBNDE4XCIsIHN0b3BPcGFjaXR5OiBcIjAuMzJcIiB9KSxcbiAgICAgICAgICAgICAgLyogQF9fUFVSRV9fICovIGMoXCJzdG9wXCIsIHsgb2Zmc2V0OiBcIjFcIiwgc3RvcENvbG9yOiBcIiNGNzk0MURcIiwgc3RvcE9wYWNpdHk6IFwiMC41XCIgfSlcbiAgICAgICAgICAgIF1cbiAgICAgICAgICB9XG4gICAgICAgICksXG4gICAgICAgIC8qIEBfX1BVUkVfXyAqLyBlMShcbiAgICAgICAgICBcImxpbmVhckdyYWRpZW50XCIsXG4gICAgICAgICAge1xuICAgICAgICAgICAgaWQ6IFwicGFpbnQxNF9saW5lYXJcIixcbiAgICAgICAgICAgIHgxOiBcIjIuMzQ5MjJcIixcbiAgICAgICAgICAgIHkxOiBcIjY1LjkwMjRcIixcbiAgICAgICAgICAgIHgyOiBcIjE1Ni4wMzJcIixcbiAgICAgICAgICAgIHkyOiBcIjY1LjkwMjRcIixcbiAgICAgICAgICAgIGdyYWRpZW50VW5pdHM6IFwidXNlclNwYWNlT25Vc2VcIixcbiAgICAgICAgICAgIGNoaWxkcmVuOiBbXG4gICAgICAgICAgICAgIC8qIEBfX1BVUkVfXyAqLyBjKFwic3RvcFwiLCB7IHN0b3BDb2xvcjogXCIjRjRFQUU1XCIsIHN0b3BPcGFjaXR5OiBcIjAuMDZcIiB9KSxcbiAgICAgICAgICAgICAgLyogQF9fUFVSRV9fICovIGMoXCJzdG9wXCIsIHsgb2Zmc2V0OiBcIjAuMTlcIiwgc3RvcENvbG9yOiBcIiNEQUFGQUNcIiwgc3RvcE9wYWNpdHk6IFwiMC4zM1wiIH0pLFxuICAgICAgICAgICAgICAvKiBAX19QVVJFX18gKi8gYyhcInN0b3BcIiwgeyBvZmZzZXQ6IFwiMC42OFwiLCBzdG9wQ29sb3I6IFwiIzk4MUIxRVwiIH0pXG4gICAgICAgICAgICBdXG4gICAgICAgICAgfVxuICAgICAgICApLFxuICAgICAgICAvKiBAX19QVVJFX18gKi8gZTEoXG4gICAgICAgICAgXCJsaW5lYXJHcmFkaWVudFwiLFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGlkOiBcInBhaW50MTVfbGluZWFyXCIsXG4gICAgICAgICAgICB4MTogXCIxMy4yMDk0XCIsXG4gICAgICAgICAgICB5MTogXCIxMjQuNDU4XCIsXG4gICAgICAgICAgICB4MjogXCIxNTQuNzI4XCIsXG4gICAgICAgICAgICB5MjogXCIxMjQuNDU4XCIsXG4gICAgICAgICAgICBncmFkaWVudFVuaXRzOiBcInVzZXJTcGFjZU9uVXNlXCIsXG4gICAgICAgICAgICBjaGlsZHJlbjogW1xuICAgICAgICAgICAgICAvKiBAX19QVVJFX18gKi8gYyhcInN0b3BcIiwgeyBvZmZzZXQ6IFwiMC44NVwiLCBzdG9wQ29sb3I6IFwid2hpdGVcIiwgc3RvcE9wYWNpdHk6IFwiMFwiIH0pLFxuICAgICAgICAgICAgICAvKiBAX19QVVJFX18gKi8gYyhcInN0b3BcIiwgeyBvZmZzZXQ6IFwiMC45MVwiLCBzdG9wQ29sb3I6IFwiI0Q2RDdEOFwiLCBzdG9wT3BhY2l0eTogXCIwLjIzXCIgfSksXG4gICAgICAgICAgICAgIC8qIEBfX1BVUkVfXyAqLyBjKFwic3RvcFwiLCB7IG9mZnNldDogXCIwLjk3XCIsIHN0b3BDb2xvcjogXCIjQjRCNkI4XCIsIHN0b3BPcGFjaXR5OiBcIjAuNDNcIiB9KSxcbiAgICAgICAgICAgICAgLyogQF9fUFVSRV9fICovIGMoXCJzdG9wXCIsIHsgb2Zmc2V0OiBcIjFcIiwgc3RvcENvbG9yOiBcIiNBN0E5QUNcIiwgc3RvcE9wYWNpdHk6IFwiMC41XCIgfSlcbiAgICAgICAgICAgIF1cbiAgICAgICAgICB9XG4gICAgICAgIClcbiAgICAgIF0gfSlcbiAgICBdXG4gIH1cbiksIEVSID0gKCkgPT4gLyogQF9fUFVSRV9fICovIGMoXG4gIFwic3ZnXCIsXG4gIHtcbiAgICB3aWR0aDogXCIxNjBcIixcbiAgICBoZWlnaHQ6IFwiMTYwXCIsXG4gICAgdmlld0JveDogXCIwIDAgMTYwIDE2MFwiLFxuICAgIGZpbGw6IFwibm9uZVwiLFxuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgY2hpbGRyZW46IC8qIEBfX1BVUkVfXyAqLyBjKFxuICAgICAgXCJwYXRoXCIsXG4gICAgICB7XG4gICAgICAgIGQ6IFwiTTE1OS45OTQgODAuOTgyNkMxNTkuOTk4IDgwLjY1NzEgMTYwIDgwLjMzOCAxNjAgODAuMDI1M0MxNjAgNzkuODEyMiAxNjAgNzkuNTk5NCAxNjAgNzkuMzg2OEMxNjAgNzkuMzEzMiAxNjAgNzkuMjM5NSAxNjAgNzkuMTcxMUMxNjAgNzkuMDMxOSAxNjAgNzguODkyNyAxNTkuOTk1IDc4Ljc1NDJDMTU5Ljk5NSA3OC42NjI5IDE1OS45OTUgNzguNTcyNCAxNTkuOTkgNzguNDgxOEMxNTkuOTkgNzguMzYzMiAxNTkuOTg1IDc4LjI0NDcgMTU5Ljk4MiA3OC4xMjU0QzE1OS45ODIgNzguMDI0NSAxNTkuOTc3IDc3LjkyMjkgMTU5Ljk3NSA3Ny44MjEyQzE1OS45NzMgNzcuNzE5NiAxNTkuOTY4IDc3LjYwOTkgMTU5Ljk2NSA3Ny41MDM4TDE1OS45NTQgNzcuMTcwMkMxNTkuOTU0IDc3LjA3OTcgMTU5Ljk0OCA3Ni45ODkxIDE1OS45NDQgNzYuODk4NUMxNTkuOTQgNzYuNzc0MSAxNTkuOTM0IDc2LjY0OTYgMTU5LjkyOSA3Ni41MjUyQzE1OS45MjkgNzYuNDY2MyAxNTkuOTI0IDc2LjQwNzMgMTU5LjkyMSA3Ni4zNDc3QzE1OS44ODggNzUuNjIwMSAxNTkuODQ2IDc0Ljg5MzUgMTU5Ljc5MyA3NC4xNjc5Vjc0LjEzODVDMTU5Ljc3OSA3My45NTE0IDE1OS43NjUgNzMuNzYzNyAxNTkuNzUgNzMuNTc2NlY3My41NDk0QzE1OS40MTUgNjkuMzYwNSAxNTguNzUgNjUuMjA0NyAxNTcuNzYyIDYxLjEyMDRMMTU3LjcyNiA2MC45NjY1TDE1Ny42ODQgNjAuODAwOEMxNTcuNjM3IDYwLjYwNzEgMTU3LjU4OCA2MC40MTQ5IDE1Ny41MzYgNjAuMjIyTDE1Ny41MTQgNjAuMTMxNEMxNTcuNTA5IDYwLjExMzcgMTU3LjUwNSA2MC4wOTYgMTU3LjUgNjAuMDc4NEMxNTcuNDU2IDU5LjkwMzEgMTU3LjQxIDU5LjcyODMgMTU3LjM2MyA1OS41NTRDMTU3LjM2MyA1OS41NDY3IDE1Ny4zNiA1OS41MzkzIDE1Ny4zNTggNTkuNTMxMkMxNTcuMzE5IDU5LjM4MzkgMTU3LjI4IDU5LjIzODEgMTU3LjI0IDU5LjA5MzhMMTU3LjIwMyA1OC45NTI0QzE1Ny4xOTYgNTguOTI5NiAxNTcuMTkgNTguOTA2NyAxNTcuMTg0IDU4Ljg4MzlDMTU3LjE2MyA1OC44MTAzIDE1Ny4xNDMgNTguNzMwNyAxNTcuMTIxIDU4LjY1NDJDMTU3LjA4OSA1OC41Mzc4IDE1Ny4wNTYgNTguNDIxIDE1Ny4wMjMgNTguMzAzNkMxNTcuMDE1IDU4LjI3NzEgMTU3LjAwOSA1OC4yNTA2IDE1Ny4wMDEgNTguMjI0MUwxNTYuOTUyIDU4LjA1MThDMTU2Ljk1MiA1OC4wNDk4IDE1Ni45NTIgNTguMDQ3OCAxNTYuOTUyIDU4LjA0NTlDMTU2Ljg3OCA1Ny43OTcgMTU2LjgwOSA1Ny41NDk2IDE1Ni43MzUgNTcuMzAxNEMxNTYuNzM0IDU3LjI5NDcgMTU2LjczMiA1Ny4yODggMTU2LjczIDU3LjI4MTVMMTU2LjY1NiA1Ny4wNDM3TDE1Ni42MzcgNTYuOTg0VjU2Ljk3NTJDMTU2LjU4NSA1Ni44MDI0IDE1Ni41MzMgNTYuNjI4OCAxNTYuNDc5IDU2LjQ1NDVDMTU2LjQ3NSA1Ni40NDEzIDE1Ni40NzEgNTYuNDI3MyAxNTYuNDY3IDU2LjQxNEwxNTYuNDQ1IDU2LjM0MDRDMTU2LjQzNyA1Ni4zMTU0IDE1Ni40MjkgNTYuMjkwMyAxNTYuNDIyIDU2LjI2NjhDMTU2LjQwNiA1Ni4yMTY3IDE1Ni4zOTEgNTYuMTY2NiAxNTYuMzc1IDU2LjExOTVDMTU2LjMzMiA1NS45ODMgMTU2LjI4OSA1NS44NDcgMTU2LjI0NSA1NS43MTE1QzE1Ni4yMDkgNTUuNTk4MSAxNTYuMTczIDU1LjQ4NDcgMTU2LjEzNiA1NS4zNzEzTDE1Ni4wNzUgNTUuMTgyQzE1Ni4wNjEgNTUuMTM4NiAxNTYuMDQ2IDU1LjA5NTEgMTU2LjAzMiA1NS4wNTE3QzE1NS45OTIgNTQuOTI5NCAxNTUuOTUxIDU0LjgwNjcgMTU1LjkxIDU0LjY4MzVMMTU1LjkwMyA1NC42NTk5QzE1NS44ODMgNTQuNTk5NSAxNTUuODYzIDU0LjUzOTIgMTU1Ljg0MiA1NC40Nzg4TDE1NS44MDMgNTQuMzYxN0wxNTUuNzM0IDU0LjE1OTlWNTQuMTQ5NkMxNTUuNzM0IDU0LjE0NTIgMTU1LjczIDU0LjE0IDE1NS43MjkgNTQuMTM0OUMxNTUuNjY5IDUzLjk1ODYgMTU1LjYwOCA1My43ODI5IDE1NS41NDcgNTMuNjA3NkwxNTUuNTMxIDUzLjU2MjdDMTU1LjUwMyA1My40ODI0IDE1NS40NzUgNTMuNDAxNCAxNTUuNDQ2IDUzLjMyMTFMMTU1LjM5OCA1My4xODQ5QzE1NS4zNTcgNTMuMDcxIDE1NS4zMTYgNTIuOTU2OSAxNTUuMjc1IDUyLjg0MjVDMTU1LjI0NyA1Mi43Njg4IDE1NS4yMiA1Mi42OSAxNTUuMTkyIDUyLjYxNDJDMTU1LjE3MyA1Mi41NjA0IDE1NS4xNTMgNTIuNTA3NCAxNTUuMTMzIDUyLjQ1MzdMMTU1LjEyNCA1Mi40MzAxQzE1NS4xMTggNTIuNDEwMiAxNTUuMTEgNTIuMzkwMyAxNTUuMTAzIDUyLjM3MTJMMTU1LjA5OCA1Mi4zNTY1QzE1NS4wNzcgNTIuMzAwNSAxNTUuMDU3IDUyLjI0NTMgMTU1LjAzNSA1Mi4xODkzTDE1NC45OSA1Mi4wNjc4QzE1NC45NzcgNTIuMDMxNyAxNTQuOTYzIDUxLjk5NDEgMTU0Ljk1IDUxLjk2MDNMMTU0Ljg5MSA1MS44MDEyQzE1NC44ODEgNTEuNzc0NyAxNTQuODcxIDUxLjc0ODIgMTU0Ljg2MSA1MS43MjI0TDE1NC43NSA1MS40Mjc5TDE1NC43MzkgNTEuMzk3N0MxNTQuNzI4IDUxLjM3MDQgMTU0LjcxNyA1MS4zNDI0IDE1NC43MDYgNTEuMzE1MkMxNTQuNjc1IDUxLjIzNDIgMTU0LjY0NCA1MS4xNTM5IDE1NC42MTMgNTEuMDczNkMxNTQuNTg5IDUxLjAxMTggMTU0LjU2NiA1MC45NDk5IDE1NC41MzkgNTAuODg4MUwxNTQuNTEzIDUwLjgyMDNMMTU0LjQxNCA1MC41Njg1QzE1NC4zODIgNTAuNDg3NSAxNTQuMzQ5IDUwLjQwNjUgMTU0LjMxNiA1MC4zMjU1TDE1NC4yNDIgNTAuMTQ5NUwxNTQuMjA3IDUwLjA2MDRDMTU0LjE5NyA1MC4wMzY4IDE1NC4xODggNTAuMDEyNSAxNTQuMTc4IDQ5Ljk4NjdMMTU0LjEzNiA0OS44ODIxTDE1NC4wMzIgNDkuNjI5NkwxNTMuOTc3IDQ5LjQ5NTVDMTUzLjk0NiA0OS40MjE5IDE1My45MTUgNDkuMzQ4MyAxNTMuODg1IDQ5LjI3NDZDMTUzLjg0OCA0OS4xODYyIDE1My44MTEgNDkuMDk3MSAxNTMuNzc1IDQ5LjAwOTVMMTUzLjY5OCA0OC44Mjc2QzE1My42ODkgNDguODA3NyAxNTMuNjggNDguNzg3MSAxNTMuNjcyIDQ4Ljc2NjVDMTUzLjY2NCA0OC43NDU5IDE1My42NDYgNDguNzA1NCAxNTMuNjMzIDQ4LjY3NTJDMTUzLjU4IDQ4LjU1IDE1My41MjYgNDguNDI1MyAxNTMuNDcyIDQ4LjMwMTFDMTUzLjQ1NCA0OC4yNTg0IDE1My40MzUgNDguMjE2NCAxNTMuNDE3IDQ4LjE3NDRMMTUzLjQwMSA0OC4xMzYxTDE1My4yODQgNDcuODY2NkwxNTMuMiA0Ny42NzgxTDE1My4xMTkgNDcuNDk2OUwxNTMuMTEzIDQ3LjQ4MjlMMTUyLjk4OSA0Ny4yMDUzQzE1Mi45NjIgNDcuMTQ0MiAxNTIuOTM0IDQ3LjA4MzggMTUyLjkwNyA0Ny4wMjM0QzE1Mi44OTkgNDcuMDA2NSAxNTIuODkxIDQ2Ljk4OTYgMTUyLjg4NCA0Ni45NzI2QzE1Mi44NzcgNDYuOTU1NyAxNTIuODYzIDQ2LjkyNyAxNTIuODUyIDQ2LjkwNDFMMTUyLjgzNyA0Ni44Njg4TDE1Mi43MDIgNDYuNTc0MkwxNTIuNjU2IDQ2LjQ3NTVMMTUyLjY0MSA0Ni40NDE3QzE1Mi42MzQgNDYuNDI2OSAxNTIuNjI4IDQ2LjQxMjIgMTUyLjYyIDQ2LjM5NzVMMTUyLjU5OCA0Ni4zNDg5TDE1Mi40MzcgNDYuMDA1QzE1Mi40MTcgNDUuOTYyMyAxNTIuMzk3IDQ1LjkxOTYgMTUyLjM3NyA0NS44Nzc2TDE1Mi4zMTMgNDUuNzQxNEMxNTIuMjg4IDQ1LjY5MTMgMTUyLjI2NSA0NS42NDA1IDE1Mi4yMzkgNDUuNTg5N0wxNTIuMTg5IDQ1LjQ4NThDMTUyLjE0NiA0NS4zOTYgMTUyLjEwNCA0NS4zMDYxIDE1Mi4wNiA0NS4yMTYzQzE1MS45OTQgNDUuMDgxMyAxNTEuOTI4IDQ0Ljk0NjUgMTUxLjg2MiA0NC44MTJDMTUxLjgzMiA0NC43NDk0IDE1MS44MDEgNDQuNjg2OCAxNTEuNzcgNDQuNjI0MkMxNTEuNzYzIDQ0LjYwOCAxNTEuNzU1IDQ0LjU5MTggMTUxLjc0NiA0NC41NzU2QzE1MS42OTYgNDQuNDczMyAxNTEuNjQ1IDQ0LjM3MTYgMTUxLjU5NCA0NC4yN0wxNTEuNTY3IDQ0LjIxNjNDMTUxLjU1OSA0NC4yMDA4IDE1MS41NTEgNDQuMTg1MyAxNTEuNTQ0IDQ0LjE3MDZMMTUxLjQxNCA0My45MTIxQzE1MS40MTQgNDMuOTA1NSAxNTEuNDA3IDQzLjg5ODkgMTUxLjQwMyA0My44OTIzTDE1MS4zMyA0My43NDVMMTUxLjI0MSA0My41NzEyQzE1MS4yMTQgNDMuNTE5NiAxNTEuMTg4IDQzLjQ2NzQgMTUxLjE2MSA0My40MTY1TDE1MS4xNSA0My4zOTQ0TDE1MS4wODYgNDMuMjcxNUMxNTEuMDc4IDQzLjI1NiAxNTEuMDcgNDMuMjQxMyAxNTEuMDYyIDQzLjIyNThMMTUwLjg0NyA0Mi44MTJDMTUwLjgxNCA0Mi43NTAxIDE1MC43ODIgNDIuNjg4MiAxNTAuNzQ5IDQyLjYyNjRMMTUwLjY2NSA0Mi40NzAzQzE1MC42MDcgNDIuMzYyMyAxNTAuNTUgNDIuMjU0MiAxNTAuNDkyIDQyLjE0NjJMMTUwLjQwOSA0MS45OTE2QzE1MC4zODMgNDEuOTQzIDE1MC4zNTYgNDEuODk1MSAxNTAuMzMxIDQxLjg0NDNDMTUwLjE3NiA0MS41NjA2IDE1MC4wMiA0MS4yNzc4IDE0OS44NjIgNDAuOTk2TDE0OS43NzIgNDAuODM0N0wxNDkuNzM0IDQwLjc2N0MxNDkuNjcgNDAuNjUzNiAxNDkuNjA1IDQwLjU0MDEgMTQ5LjU0MSA0MC40MjY3TDE0OS40OTcgNDAuMzUzMUwxNDkuMzQ2IDQwLjA4ODdDMTQ5LjM0IDQwLjA3OTIgMTQ5LjMzNCA0MC4wNjg5IDE0OS4zMjkgNDAuMDU4NUwxNDkuMTY1IDM5Ljc3ODdMMTQ5LjA5OSAzOS42NjQ2TDE0OC45NjEgMzkuNDI4OUwxNDguOTU1IDM5LjQxOTNMMTQ4LjczNCAzOS4wNDNDMTQ4LjcxMyAzOS4wMDg3IDE0OC42ODkgMzguOTc2NiAxNDguNjYxIDM4Ljk0NzNDMTQ3Ljg5OSAzNy44NDI3IDE0NS40OTUgMzcuMzkwNiAxNDMuNTg5IDM3LjIwNzJDMTQxLjUyOCAzNy4wMDc2IDEzNy45ODggMzYuOTI4MSAxMzIuODcxIDM3LjY4MDdDMTI2LjY5NCAzOC41ODg3IDExOC42OTUgMzkuOTA5OCAxMTEuNjAzIDQyLjA3OTJDMTA4LjU5NSA0My4wMDA1IDEwNS45MjMgNDQuMDIyNiAxMDMuNjI5IDQ1LjEyODdDOTEuODcxOSA0Ni44ODM1IDc5LjcxODQgNDguNjk3MyA2Ny4zMzY2IDUwLjI5ODlDNjUuMzE4MyA1MC41NjAxIDYzLjM0NDggNTAuODE2NiA2MS40MTYzIDUxLjA2ODVDNjcuNjc5IDQ3Ljg1NTYgNzIuNDQ1NiA0NC44MTU3IDc1Ljg5ODYgNDEuODM3N0M3Ni43ODA3IDQxLjA3ODYgNzcuNjE5IDQwLjI2OTkgNzguNDA5MyAzOS40MTU3QzgwLjQxNjQgMzguODAwNSA4Mi40MTczIDM4LjE4MTUgODQuNDEyMSAzNy41NTg1Qzk2LjQxMzIgMzMuODAyOCAxMDUuNzcgMzAuMjQ3NSAxMTIuMjMgMjYuOThDMTEyLjM3OCAyNi45MDY0IDExMi41MTcgMjYuODMyOCAxMTIuNjU4IDI2Ljc1OTFMMTEyLjc4NSAyNi42OTM2TDExMy4wNzkgMjYuNTQyNkwxMTMuMjM1IDI2LjQ2MDFMMTEzLjQ4OSAyNi4zMjY5TDExMy42NTMgMjYuMjM4NUMxMTMuNzMyIDI2LjE5NjUgMTEzLjgxMiAyNi4xNTM4IDExMy44OSAyNi4xMTExTDExNC4wNTMgMjYuMDIyN0wxMTQuMjg1IDI1Ljg5NjFMMTE0LjQ0MSAyNS44MDkyTDExNC42NzQgMjUuNjc4OEwxMTQuODIxIDI1LjU5NzFMMTE1LjA1MiAyNS40NjUzTDExNS4xOSAyNS4zODY1QzExNS4zMDEgMjUuMzIzMSAxMTUuNDEgMjUuMjU5NiAxMTUuNTE4IDI1LjE5NTdMMTE1LjU0OCAyNS4xNzgxQzExNS42NjcgMjUuMTA4OSAxMTUuNzgyIDI1LjAzOTYgMTE1Ljg5NyAyNC45NzA0TDExNi4wMDQgMjQuOTA2M0wxMTYuMjM3IDI0Ljc2NDJMMTE2LjM2NSAyNC42ODU0TDExNi41NjggMjQuNTU5NUwxMTYuNyAyNC40NzU1TDExNi44OTEgMjQuMzU0TDExNy4wMjIgMjQuMjcwMUwxMTcuMjA4IDI0LjE0OTNMMTE3LjMzMyAyNC4wNjY4TDExNy41MTggMjMuOTQzMUwxMTcuNjMzIDIzLjg2OTVDMTE3LjcgMjMuODI0NiAxMTcuNzY1IDIzLjc3OTYgMTE3LjgzIDIzLjczNEwxMTcuOTI0IDIzLjY2OTlDMTE4LjAyMiAyMy42MDM2IDExOC4xMTYgMjMuNTM3NiAxMTguMjA2IDIzLjQ3MThDMTIwLjYyNSAyMS43NDU3IDEyMy40NjIgMTkuMDAyNiAxMjMuMjM4IDE1LjczOTZDMTIzLjIzOCAxNS43MTUzIDEyMy4yMzUgMTUuNjkxNyAxMjMuMjMzIDE1LjY2NlYxNS42MzczQzEyMy4wOTUgMTQuMTkzOSAxMjIuMDM5IDExLjk5OTQgMTE3LjkxMyA5LjU2NDE1TDExNy44ODkgOS41NTAxNUwxMTcuNzUxIDkuNDY5MTVMMTE3LjY2MyA5LjQxOTA4TDExNy41NjkgOS4zNjUzMkwxMTcuNDI2IDkuMjg0MzFMMTE3LjM3NCA5LjI1NDg2TDExNy4xNzEgOS4xNDIxOUwxMTcuMTQ1IDkuMTI4MkwxMTcuMTM1IDkuMTIzMDRMMTE3LjEyMiA5LjExNTY4QzExNi42OCA4Ljg4NTQzIDExNi4yMzkgOC42NTg4NiAxMTUuNzk3IDguNDM1OThMMTE1Ljc2NyA4LjQyMTI1QzExNS40ODkgOC4yODIwNyAxMTUuMjEgOC4xNDM2MyAxMTQuOTMgOC4wMDgxM0wxMTQuODg4IDcuOTg3NTFMMTE0LjcwMiA3Ljg5NzY3TDExNC40MDggNy43NTcwMkgxMTQuNDAxTDExNC4yMTYgNy42NjkzOEwxMTQuMTU5IDcuNjQyODdMMTE0LjA3MyA3LjYwMTYzTDExMy44NiA3LjUwMTQ4TDExMy43OTMgNy40Njk4MkwxMTMuNTgxIDcuMzcxODhMMTEzLjQ5IDcuMzI5OUwxMTMuNDcxIDcuMzIxMDdMMTEzLjMxNiA3LjI0NzQzTDExMy4yNDMgNy4yMTQyOUwxMTIuOTQ4IDcuMDgxTDExMi44OTQgNy4wNTU5NkwxMTIuNzg1IDcuMDA3MzZMMTEyLjY5NiA2Ljk2Njg2TDExMi4zODQgNi44Mjc2OEwxMTIuMzEgNi43OTQ1NEwxMTIuMjgxIDYuNzgyMDJMMTEyLjE1NSA2LjcyNjA1TDExMS44MjMgNi41Nzg3N0wxMTEuNjQ2IDYuNTA1MTNMMTExLjQ3NiA2LjQzMTQ5TDExMS4xMDggNi4yNzMxN0wxMTAuODIyIDYuMTUzMTNMMTEwLjUyNyA2LjAzMDE1TDExMC4zNDQgNS45NTY1MUwxMTAuMjI3IDUuOTA3OTFDMTEwLjA5MiA1Ljg1MjY4IDEwOS45NTYgNS43OTgxOSAxMDkuODIxIDUuNzQzNjlMMTA5LjY3MyA1LjY4NTUyTDEwOS4yNjUgNS41MjM1MUwxMDkuMTMzIDUuNDcxOTZMMTA4LjcwMiA1LjMwNDhMMTA4LjYyOSA1LjI3NjA4QzEwOC4zOSA1LjE4NDc2IDEwOC4xNDkgNS4wOTQxOSAxMDcuOTA4IDUuMDA0MzVIMTA3LjlDMTA3LjQ2NCA0Ljg0MjM0IDEwNy4wMjYgNC42ODI1NCAxMDYuNTkzIDQuNTMwMUwxMDYuNTY2IDQuNTIwNTNMMTA2LjA3NCA0LjM0ODk1TDEwNi4wMTMgNC4zMjgzM0MxMDUuODQ4IDQuMjcxODcgMTA1LjY4NCA0LjIxNjE1IDEwNS41MjEgNC4xNjExN0wxMDUuNDg3IDQuMTQ5MzhMMTA1LjIzNCA0LjA2NTQzTDEwNS4wMTMgMy45OTE3OUwxMDQuNjUxIDMuODczOTdMMTA0LjM4IDMuNzg3MDdMMTA0LjA1MSAzLjY4MjVMMTAzLjczNCAzLjU4MzA5TDEwMy40MzkgMy40OTE3OEwxMDIuOTA2IDMuMzMwNUwxMDIuODMyIDMuMzA4NDFMMTAyLjgwOCAzLjMwMTA1TDEwMi4yOTIgMy4xNDkzNUgxMDIuMjgxSDEwMi4yNzRMMTAyLjI1MyAzLjE0MzQ2TDEwMi4xMjYgMy4xMDczN0MxMDEuMjI3IDIuODQ5MTQgMTAwLjMyNCAyLjYwNjM4IDk5LjQxNjQgMi4zNzkwN0M4NC40Njk0IC0xLjMzODI2IDY4Ljc2OTggLTAuNjg4MzI3IDU0LjE4MSA0LjI1MTc0TDU0LjE1ODIgNC4yNTk4NEM1My45OTExIDQuMzE3MjggNTMuODIzMiA0LjM3NDcyIDUzLjY1NjEgNC40MzM2NEw1My41MjY1IDQuNDc4NTZDNTMuMzU3MSA0LjUzNzQ3IDUzLjE4ODUgNC41OTc4NSA1My4wMTk5IDQuNjU4MjRMNTIuOTA3MyA0LjY5OEw1Mi4zNzc5IDQuODkwOTRMNTIuMzEwOSA0LjkxNTI0QzQ3Ljg3NjYgNi41NTA5NyA0My41OTY3IDguNTc4NDQgMzkuNTIyIDEwLjk3MzZMMzkuNDgwOCAxMC45OTc5QzM5LjM0NzUgMTEuMDc2IDM5LjIxNDIgMTEuMTU1NSAzOS4wODE3IDExLjIzNUwzOC44NzQxIDExLjM1ODhDMzguNzYwNyAxMS40MjY1IDM4LjY0NzggMTEuNDk0NyAzOC41MzU0IDExLjU2MzVDMzguNDQ1NiAxMS42MTggMzguMzU1NyAxMS42NzI1IDM4LjI2NjcgMTEuNzI3N0MzOC4xNjYgMTEuNzg5MSAzOC4wNjU0IDExLjg1MDkgMzcuOTY0OCAxMS45MTMzQzM3Ljg2NDIgMTEuOTc1NiAzNy43NjE2IDEyLjAzOTQgMzcuNjU3IDEyLjEwNDdMMzcuMzg1MyAxMi4yNzQ4QzM3LjI3MDUgMTIuMzQ3IDM3LjE1NTkgMTIuNDIwNiAzNy4wNDE1IDEyLjQ5NThMMzYuODA1MiAxMi42NDUzQzM2LjY3MDIgMTIuNzMxMiAzNi41MzYyIDEyLjgxNzggMzYuNDAzMiAxMi45MDUyTDM2LjIyMiAxMy4wMjNDMzYuMDI1NyAxMy4xNTEyIDM1LjgzMTEgMTMuMjc5OCAzNS42MzgyIDEzLjQwODlDMzUuMzEyOCAxMy42MjYxIDM1LjE1MjMgMTMuOTc0NSAzNS4yMTkyIDE0LjMxOTFDMzUuMzQyMiAxNC45NTQ2IDM2LjA5ODQgMTUuMTc5OSAzNi42NTcyIDE1LjI5NDFDMzkuMTI0NCAxNS43OTg1IDQ0LjM2ODEgMTYuMzYxMSA0OC4yNDMgMTYuMzkzNUM0OC4zOTQ3IDE2LjM5MzUgNDguNTQ1NyAxNi4zOTM1IDQ4LjY5NzMgMTYuMzkzNUM1Mi45NDM0IDE2LjM5MzUgNTcuMjA2MyAxNS44OTY1IDYwLjQ1NzcgMTUuMDE3OUM2Mi40MTQ3IDE0LjQ4ODUgNjMuOTkxOCAxMy44MzAxIDY1LjE0MTEgMTMuMDU5OEM2Ni4yOTA0IDEyLjI4OTYgNjcuMDI4MSAxMS4zOTYzIDY3LjMyODUgMTAuNDA4OEM3Mi4wODQxIDEwLjA1NDYgNzcuMTY4NyA5LjgwMiA4Mi40Mjc4IDkuNzMwNTdDODcuMjM4MSA5LjY2NDMgOTEuNjc2MSA5LjcxODA1IDk1Ljc0MTcgOS44OTE4NUM5Mi42ODc3IDEyLjI4MzcgODcuNDQ5OSAxNC44NDEyIDgwLjc2MDIgMTcuMTk4NEM3Ni43Mzg3IDE4LjYxMzggNzEuNTgxOSAyMC4zNDM2IDY1Ljk2MTMgMjIuMTIwNUM2MS4xMzM2IDIyLjQ3MTggNTUuMTA0MyAyMy40MjYyIDQ3LjYxNjUgMjQuNzY2NEM0MC4zNDUxIDI2LjA2NjkgMzIuNzQzMiAyNy43ODA1IDI2Ljc1NDQgMjkuNDY2OUMxOS4zNjk3IDMxLjU0NjUgMTUuMDI3OSAzMy40MDA3IDEzLjg1MDYgMzQuOTc4MUwxMy44MzUyIDM1LjAwMDJMMTMuNDQ0MiAzNS41Nzk4QzEzLjMxMjQgMzUuNzc3MSAxMy4xODA2IDM1Ljk3NTIgMTMuMDUxIDM2LjE3MzNDMTMuMDQ3OCAzNi4xNzczIDEzLjA0NDkgMzYuMTgxNSAxMy4wNDIyIDM2LjE4NThDMTIuODE3NiAzNi41Mjc1IDEyLjU4NSAzNi44ODkxIDEyLjMzMDIgMzcuMjkwNEwxMi4yNjU0IDM3LjM5NDJMMTIuMTc3MSAzNy41MzQ5QzEyLjA4MTkgMzcuNjg2NiAxMS45ODc0IDM3LjgzODUgMTEuODkzNiAzNy45OTA3TDExLjg4NjMgMzguMDAyNUwxMS44ODExIDM4LjAxMTNMMTEuNzIzNiAzOC4yNjYxTDExLjUyNTUgMzguNTkyNEMxMS41MTc0IDM4LjYwNDkgMTEuNTEgMzguNjE3NCAxMS41MDI3IDM4LjYyOTlMMTEuNDQ2IDM4LjcyMkwxMS4yNjYzIDM5LjAyMjRDMTEuMjMxNyAzOS4wNzk5IDExLjE5NzkgMzkuMTM4IDExLjE2MzMgMzkuMTk2MkwxMS4xMjQyIDM5LjI2MUwxMS4wMDI3IDM5LjQ2NTdMMTAuOTgyMSAzOS41MDExTDEwLjk3ODUgMzkuNTA4NUMxMC44MDMyIDM5LjgwNjcgMTAuNjI0MyA0MC4xMTYgMTAuNDM3MyA0MC40NDQ0QzEwLjQyMjYgNDAuNDcwMiAxMC40MDc4IDQwLjQ5NiAxMC4zOTM5IDQwLjUxODFDMTAuMzc5OSA0MC41NDAxIDEwLjM1NTYgNDAuNTg0MyAxMC4zMzY0IDQwLjYxODlMMTAuMjg3OCA0MC43MDI5TDEwLjIwMzkgNDAuODUwMkwxMC4wNzg3IDQxLjA3MjZMMTAuMDMwMSA0MS4xNjAyTDkuOTMxNDggNDEuMzM3N0w5Ljg5OTgyIDQxLjM5NTFMOS43ODQyMyA0MS42MTAxQzkuNzY0MzUgNDEuNjQ3IDkuNzQ0NDcgNDEuNjgzOCA5LjcyMzg2IDQxLjcyMDZMOS42OTQ0IDQxLjc3NTFDOS42MzY0OSA0MS44ODExIDkuNTc4ODEgNDEuOTg3MiA5LjUyMTM4IDQyLjA5MzJMOS4zNzQxMyA0Mi4zNjVDOS4yODcyNSA0Mi41MjkyIDkuMTk5NjMgNDIuNjkyNyA5LjExMjAyIDQyLjg1OTFMOS4xMDE3MSA0Mi44Nzk3QzguODk5OTcgNDMuMjYzNCA4LjY5ODI0IDQzLjY1NTkgOC40ODQ3MiA0NC4wOEw4LjM4NTMzIDQ0LjI3NTlDOC4yOTkxOCA0NC40NDgyIDguMjE0NTEgNDQuNjIwNiA4LjEyNjE2IDQ0Ljc5OTVMOC4wMDU0MSA0NS4wNDYyQzcuOTIxOTcgNDUuMjE3NSA3LjgzOTAyIDQ1LjM4OTQgNy43NTY1NiA0NS41NjE3QzcuNzI3ODQgNDUuNjIyMSA3LjY5OTg2IDQ1LjY4MjQgNy42NzExNSA0NS43NDIxTDcuNjQ1MzggNDUuNzk3M0M3LjUwMTgxIDQ2LjA5OTIgNy4zNTgyMyA0Ni40MDc4IDcuMjE3NjEgNDYuNzE0MVY0Ni43MTc4QzcuMDc3NzIgNDcuMDIyNyA2LjkzNzgzIDQ3LjMzMjcgNi44MDE2MiA0Ny42NDA1TDYuNzU4OTIgNDcuNzM3VjQ3Ljc0MjJMNi43MzgzIDQ3Ljc4OTNDNi42NTY1NyA0Ny45NzQxIDYuNTc2MzIgNDguMTU3NSA2LjQ5NjA3IDQ4LjM0Nkw2LjM5NzQxIDQ4LjU3OEM2LjMxODYzIDQ4Ljc2MjEgNi4yNDEzMiA0OC45NDYyIDYuMTY0MDEgNDkuMTMxTDYuMDc1NjYgNDkuMzQyNEM1Ljk0MjQgNDkuNjYyNyA1LjgwOTEzIDQ5Ljk5MDQgNS42ODEwMiA1MC4zMTE1TDUuNjczNjYgNTAuMzI4NEM1LjU0MzM0IDUwLjY1NTQgNS40MTM3NiA1MC45ODUzIDUuMjg4NTkgNTEuMzEwOEw1LjI1NTQ2IDUxLjM5NjJDNS4xODE4NCA1MS41OTQzIDUuMTA4MjEgNTEuNzkzOCA1LjAzMDE2IDUxLjk5MjdMNC45NTY1NCA1Mi4xOTk2QzQuODg0MzggNTIuMzk2IDQuODEyOTcgNTIuNTkyMyA0Ljc0MjI4IDUyLjc4ODdMNC42Njg2NiA1Mi45ODI0QzQuNTQ4NjUgNTMuMzE2NyA0LjQyNzkgNTMuNjU5OSA0LjMxMTU3IDUzLjk5ODZMNC4zMDEyNiA1NC4wMjgxQzQuMTgxOTkgNTQuMzc3MSA0LjA2NDkyIDU0LjcyNCAzLjk1NDQ4IDU1LjA1OUwzLjk1MDggNTUuMDY5NFY1NS4wNzg5TDMuOTQ3MTIgNTUuMDkxNEMzLjg3ODY1IDU1LjI5OTkgMy44MTE2NSA1NS41MDk3IDMuNzQ0NjUgNTUuNzE4OUwzLjY4MzU0IDU1LjkxMThDMy42MTkyMyA1Ni4xMTUxIDMuNTU1OTIgNTYuMzE4NSAzLjQ5MzU4IDU2LjUyMjNMMy40MzY4OSA1Ni43MDg2QzMuMzMxNiA1Ny4wNTU0IDMuMjI2MzEgNTcuNDEwNCAzLjEyMzI0IDU3Ljc2NTNMMy4xMTM2NyA1Ny43OTg1QzMuMDA5MTIgNTguMTYgMi45MDgyNSA1OC41MjAxIDIuODEyNTMgNTguODY5MkMyLjgxMjgyIDU4Ljg3MDQgMi44MTI4MiA1OC44NzE3IDIuODEyNTMgNTguODcyOVY1OC44ODAyQzIuNzY3ODcgNTkuMDQ2MiAyLjcyMzIgNTkuMjEyMSAyLjY3ODUzIDU5LjM3OEwyLjU4MjA4IDU5Ljc0NjJMMi40NzgyNyA2MC4xNDQ2QzIuNDU3NjUgNjAuMjI2NCAyLjQzNzA0IDYwLjMwODEgMi40MTcxNiA2MC4zODk5TDIuMjM0NTcgNjEuMTI2M0MxLjM0NzE3IDY0Ljc5NzMgMC43MjEyNSA2OC41MjY4IDAuMzYxNTA2IDcyLjI4NjRDMC4zNTQ4OCA3Mi4zNTEyIDAuMzQ4OTg5IDcyLjQxNiAwLjM0MzA5OSA3Mi40ODE2QzAuMzI4Mzc0IDcyLjYzNCAwLjMxNTEyMSA3Mi43ODU3IDAuMzAxMTMyIDcyLjkzODFMMC4yNzkwNDUgNzMuMTk2NkMwLjI2ODAwMSA3My4zMjk5IDAuMjU2OTU2IDczLjQ2MzkgMC4yNDY2NDkgNzMuNTk3MkMwLjIzOTI4NiA3My42OSAwLjIzMTE4OCA3My43ODIxIDAuMjI0NTYxIDczLjg3NDhDMC4yMTQyNTMgNzQuMDEwMyAwLjIwNDY4MiA3NC4xNDY2IDAuMTk1MTEgNzQuMjgyMUMwLjE4ODQ4NCA3NC4zNjkgMC4xODE4NTcgNzQuNDU1MSAwLjE3NTk2NyA3NC41NDEzQzAuMTYxOTc4IDc0Ljc0NjcgMC4xNDk0NjIgNzQuOTUyMiAwLjEzNjk0NSA3NS4xNTg0TDAuMTE5Mjc1IDc1LjQ2MjVDMC4xMTI2NDkgNzUuNTgxOCAwLjEwNjAyMiA3NS43MDA0IDAuMTAwMTMyIDc1LjgxODlDMC4wOTQyNDIgNzUuOTI1IDAuMDg5MDg4MiA3Ni4wMzEgMC4wODQ2NzA2IDc2LjEzNzFDMC4wNzg3ODA1IDc2LjI1NDIgMC4wNzM2MjY1IDc2LjM3MTMgMC4wNjg0NzI3IDc2LjQ4NzZDMC4wNjMwNzM0IDc2LjU5MTIgMC4wNTg2NTU4IDc2LjY5NSAwLjA1NTIxOTkgNzYuNzk5MUMwLjA1MDA2NiA3Ni45MjU4IDAuMDQ1NjQ4MyA3Ny4wNTE3IDAuMDQxMjMwNyA3Ny4xNzc2QzAuMDQxMjMwNyA3Ny4yNzExIDAuMDM0NjA0NSA3Ny4zNjQ3IDAuMDMxNjU5NCA3Ny40NTgyQzAuMDI1MDMzIDc3LjY1NzcgMC4wMTk4Nzg5IDc3Ljg1NjYgMC4wMTQ3MjUxIDc4LjA1NjFDMC4wMTQ3MjUxIDc4LjEwOTkgMC4wMTQ3MjUxIDc4LjE2NDQgMC4wMTQ3MjUxIDc4LjIxODJDMC4wMTA3OTgzIDc4LjQwMzIgMC4wMDczNjI0NyA3OC41ODgxIDAuMDA0NDE3NDEgNzguNzcyN0MwLjAwNDQxNzQxIDc4Ljc5NCAwLjAwNDQxNzQxIDc4LjgxNTQgMC4wMDQ0MTc0MSA3OC44Mzc1Vjc4Ljg0MTlDMC4wMDQ0MTc0MSA3OC45Njg1IDAuMDA0NDE3NTkgNzkuMDg3MSAwIDc5LjIwMDVDMCA3OS4yNTU3IDAgNzkuMzExIDAgNzkuMzY2OUMwIDc5LjU0NzQgMCA3OS43MTMgMCA3OS44NzIxVjc5LjkwMjNDMC4wMTQ3MjUzIDgwLjQ2NzkgMC40MDI3MzcgODEuNzg1MyAzLjY3Mzk2IDgxLjgwM0gzLjgwNzk2QzYuMTQ3MDggODEuODAzIDExLjcwNzQgODEuNTA0IDE3LjY0MzEgODAuOTM1NUMyOC4wMDc1IDc5Ljk0MjggNDguMjU3IDc3LjMyNzEgNzEuNzA0MSA3NC4yOTAyTDc0LjUwMTkgNzMuOTI3OUM4MS4xMjgzIDczLjA3MDcgOTAuNDA1MyA3MS43OTIzIDEwMC42MzkgNzAuMzUwNEMxMDIuMzkyIDcxLjM1OTMgMTA0LjM0MiA3Mi4yNDM3IDEwNi4zOSA3My4wMjIxQzk1Ljk5MDYgNzUuMzc4NiA4NS40NTE3IDc3Ljc4NzQgNzUuMzc3NCA4MC4yMTQ1QzY3LjMxNjcgODIuMTU2NCA1OS41MDg2IDg0LjE0NTQgNTIuMTYgODYuMDg0NEM0NC4yODE5IDg2LjkyMjQgMzYuNjE0NSA4OC4yMDc0IDI4LjU4MTEgOTAuMDE0NkMxOS43NTExIDkyLjAwMjkgMTEuMjI2NiA5NC42MTU2IDQuNTc4ODMgOTcuMzc4Nkw0LjQwMjg3IDk3LjQ1MjJDMi45MDE2MiA5OC4wNzE1IDIuMjk0MiA5OS4wNDE0IDIuNTk2MDcgMTAwLjMzNVYxMDAuMzQ1TDIuNTk5NzUgMTAwLjM1OUwyLjY1OTM5IDEwMC41OFYxMDAuNTg5TDIuNzYzMiAxMDAuOTgyVjEwMC45ODdDMi44MzgzIDEwMS4yNjMgMi45MTQ4NyAxMDEuNTM5IDIuOTkyOTIgMTAxLjgxNUMzLjAxNjQ4IDEwMS44OTkgMy4wNDA3OCAxMDEuOTg0IDMuMDY2NTQgMTAyLjA2OUMzLjEyOTg2IDEwMi4yOSAzLjE5NDE2IDEwMi41MTEgMy4yNTk0NSAxMDIuNzMxTDMuMzE1NCAxMDIuOTIzQzMuMzk2MzkgMTAzLjE5NCAzLjQ3ODYxIDEwMy40NjQgMy41NjIwNSAxMDMuNzMzTDMuNjM1NjggMTAzLjk3QzMuNzAxMjEgMTA0LjE3OSAzLjc2NzQ3IDEwNC4zODcgMy44MzQ0NyAxMDQuNTk1TDMuODU4NzcgMTA0LjY2OUMzLjg3NjQ0IDEwNC43MjUgMy44OTQ4NCAxMDQuNzggMy45MTI1MSAxMDQuODM1QzMuOTQ3MTIgMTA0Ljk0MiAzLjk4NjE0IDEwNS4wNDggNC4wMTg1NCAxMDUuMTU1QzQuMDcwMDcgMTA1LjMxMSA0LjEyMTYxIDEwNS40NjggNC4xNzM4OSAxMDUuNjI0TDQuMjQzMSAxMDUuODI3QzQuMzE0NzYgMTA2LjAzNiA0LjM4NjkxIDEwNi4yNDQgNC40NTk1NiAxMDYuNDUzTDQuNTU0NTQgMTA2LjcyM0M0LjYzOTk0IDEwNi45NjMgNC43MjYwOSAxMDcuMjAzIDQuODEyOTcgMTA3LjQ0Mkw0Ljg3OTk3IDEwNy42MjZDNC45NjM5IDEwNy44NTQgNS4wNDkwNiAxMDguMDgyIDUuMTM1NDUgMTA4LjMxQzUuMTcxNTMgMTA4LjQwNSA1LjIwOTA4IDEwOC41IDUuMjQ0NDIgMTA4LjU5NUM1LjI3OTc2IDEwOC42OSA1LjMxODA0IDEwOC43ODUgNS4zNTQxMiAxMDguODhMNS40NjY3NyAxMDkuMTc1TDUuNTAzNTggMTA5LjI2OUM1LjUyMTI1IDEwOS4zMTYgNS41Mzk2NiAxMDkuMzYyIDUuNTU4MDcgMTA5LjQwOUM1LjY1NTk5IDEwOS42NTcgNS43NTYxMiAxMDkuOTA1IDUuODU2MjUgMTEwLjE1Mkw1Ljk1Nzg2IDExMC4zOTlMNS45NzcgMTEwLjQ0NkM2LjA1MDYzIDExMC42MTggNi4xMTk4NCAxMTAuNzkxIDYuMTkxOTkgMTEwLjk2Mkw2LjIyMjE4IDExMS4wMzVMNi4zMTU2OCAxMTEuMjU2QzYuNDE3NzggMTExLjQ5NiA2LjUyMDYxIDExMS43MzQgNi42MjQxOCAxMTEuOTczTDYuNzE0NzQgMTEyLjE3OUw2Ljc1NDUgMTEyLjI2N0M2LjgyODEyIDExMi40MjggNi44OTczMyAxMTIuNTkgNi45Njk0OSAxMTIuNzUxQzcuMDE5NTUgMTEyLjg2MiA3LjA2ODg4IDExMi45NzIgNy4xMTY3NCAxMTMuMDg0QzcuMTk5MiAxMTMuMjY2IDcuMjgyNCAxMTMuNDQ3IDcuMzY2MzMgMTEzLjYyN0M3LjQzMzU4IDExMy43NzUgNy41MDEwNyAxMTMuOTE5IDcuNTY4ODEgMTE0LjA2QzcuNjQyNDMgMTE0LjIxNyA3LjcxNjA2IDExNC4zNzQgNy43ODk2OSAxMTQuNTNDNy44NDcxMiAxMTQuNjUxIDcuOTA1MDQgMTE0Ljc3MSA3Ljk2MzQ1IDExNC44OTFDOC4wMzA0NSAxMTUuMDMgOC4wOTg5MiAxMTUuMTY5IDguMTY3MzkgMTE1LjMwOEM4LjI0NzY0IDExNS40NzIgOC4zMjkzNyAxMTUuNjM1IDguNDExMDkgMTE1Ljc5OUM4LjQ5MjgyIDExNS45NjIgOC41NzYwMiAxMTYuMTI4IDguNjU5OTUgMTE2LjI5MkM4LjcyNTIzIDExNi40MjEgOC43OTEyNSAxMTYuNTUgOC44NTgwMSAxMTYuNjc4QzguOTE5MTIgMTE2Ljc5NiA4Ljk3OTQ5IDExNi45MTMgOS4wNDA2IDExNy4wMjlMOS4wNTkwMSAxMTcuMDY1QzkuMTIxODMgMTE3LjE4NSA5LjE4NDY2IDExNy4zMDUgOS4yNDc0OSAxMTcuNDI0QzkuMzUxMDYgMTE3LjYyMSA5LjQ1NTEyIDExNy44MTUgOS41NTk2NyAxMTguMDA3TDkuODAxMTYgMTE4LjQ0OUM5Ljg1NjM4IDExOC41NDggOS45MTA4NyAxMTguNjQ3IDkuOTY2MDkgMTE4Ljc0M0MxMC4wNDUxIDExOC44ODcgMTAuMTI0NiAxMTkuMDMgMTAuMjA0NiAxMTkuMTcyTDEwLjMwMzMgMTE5LjM0NkwxMC4zNDc1IDExOS40MkMxMC40OTkxIDExOS42ODcgMTAuNjUxNiAxMTkuOTUzIDEwLjgwMTcgMTIwLjIxMUwxMC45MzY1IDEyMC40NDFDMTEuMDI1NiAxMjAuNTk0IDExLjExNjEgMTIwLjc0NyAxMS4yMDY3IDEyMC44OTlMMTEuMzI4OSAxMjEuMTAzQzExLjUxOTYgMTIxLjQyMSAxMS43MTEgMTIxLjczNiAxMS44OTk1IDEyMi4wNEwxMS45NDk2IDEyMi4xMjJDMTIuMDUxMiAxMjIuMjg2IDEyLjE1MzUgMTIyLjQ0OSAxMi4yNTY2IDEyMi42MTJMMTIuMzU4MiAxMjIuNzczQzEyLjM3MDcgMTIyLjc5MyAxMi4zODQgMTIyLjgxMiAxMi4zOTY1IDEyMi44MzNDMTIuNDA5IDEyMi44NTQgMTIuNDI3NCAxMjIuODggMTIuNDQyMSAxMjIuOTA3QzEyLjU2NDQgMTIzLjA5OCAxMi42ODcxIDEyMy4yODkgMTIuODEwMyAxMjMuNDhDMTIuODE3NiAxMjMuNDkyIDEyLjgyNSAxMjMuNTA0IDEyLjgzMzEgMTIzLjUxNkMxMi45NDg3IDEyMy42OTUgMTMuMDY1IDEyMy44NzEgMTMuMTgyMSAxMjQuMDQ4TDEzLjE5MDIgMTI0LjA2MkMxMy40MDc0IDEyNC4zOTIgMTMuNjM4NiAxMjQuNzM0IDEzLjg5NDggMTI1LjExTDEzLjkzMzggMTI1LjE2NkwxNC4wNTUzIDEyNS4zNDVMMTQuMTk3NCAxMjUuNTQ5TDE0LjI5MjQgMTI1LjY4NkwxNC4zNjAxIDEyNS43ODNMMTQuNTE5MiAxMjYuMDExQzE0LjUyMzYgMTI2LjAxNiAxNC41MjczIDEyNi4wMjIgMTQuNTMwOSAxMjYuMDI3TDE0LjU0MzQgMTI2LjA0NEMxNC41NDM0IDEyNi4wNDkgMTQuNTUwMSAxMjYuMDUzIDE0LjU1MyAxMjYuMDU4QzE0LjY1MDIgMTI2LjE5NSAxNC43NDY3IDEyNi4zMzIgMTQuODQ3NSAxMjYuNDY5TDE0Ljk1NjUgMTI2LjYyMUwxNS4wNjYyIDEyNi43NzNMMTUuMTQ3OSAxMjYuODg1QzE1LjMwMTggMTI3LjA5OCAxNS40NTc5IDEyNy4zMTMgMTUuNjE2MiAxMjcuNTI2TDE1LjY2MzMgMTI3LjU5TDE1Ljc1MjQgMTI3LjcxMUMxNS44NjI4IDEyNy44NTggMTUuOTczOCAxMjguMDA2IDE2LjA4NTIgMTI4LjE1M0MxNi4xMzk3IDEyOC4yMjYgMTYuMTk0OSAxMjguMyAxNi4yNDk0IDEyOC4zNzRDMTYuMzYyOCAxMjguNTIxIDE2LjQ3NjQgMTI4LjY2OCAxNi41OTAzIDEyOC44MTZMMTYuNzExIDEyOC45NzJDMTYuOTcxNiAxMjkuMzA4IDE3LjIzMjMgMTI5LjY0IDE3LjQ4NTYgMTI5Ljk1NkwxNy41MjYxIDEzMC4wMDdDMTcuNjQ5NyAxMzAuMTYyIDE3Ljc3NDkgMTMwLjMxNiAxNy45MDAxIDEzMC40N0wxOC4wNDczIDEzMC42NDZDMTguMTcyIDEzMC43OTggMTguMjk3MiAxMzAuOTUgMTguNDIyOCAxMzEuMTAyTDE4LjUzNjIgMTMxLjIzOEMxOC45NTU5IDEzMS43NDEgMTkuMzg1OSAxMzIuMjQ0IDE5LjgxMzYgMTMyLjczMUwxOS45MjE5IDEzMi44NTVDMjAuMDU5OCAxMzMuMDExIDIwLjE5ODcgMTMzLjE2OCAyMC4zMzg2IDEzMy4zMjVMMjAuNDM0MyAxMzMuNDMxQzIwLjg5MyAxMzMuOTQyIDIxLjM2MiAxMzQuNDUyIDIxLjgyODEgMTM0Ljk0NUwyMS44NzQ0IDEzNC45OTRDMjIuMDI3NiAxMzUuMTU2IDIyLjE4MTcgMTM1LjMxOCAyMi4zMzY4IDEzNS40NzlMMjIuNDEwNCAxMzUuNTU3QzIyLjY2NzQgMTM1LjgyMyAyMi45MjU4IDEzNi4wODkgMjMuMTkwOSAxMzYuMzUzTDIzLjIxODkgMTM2LjM4MUMyMy42MTQyIDEzNi43OCAyNC4wMTQgMTM3LjE3NSAyNC40MTQ2IDEzNy41NkwyNC40NjYxIDEzNy42MDlDMjQuNTAyOSAxMzcuNjQ1IDI0LjUzOTcgMTM3LjY4MyAyNC41Nzg3IDEzNy43MTZDMjQuNzEwNSAxMzcuODQzIDI0Ljg0MjMgMTM3Ljk3IDI0Ljk3NDkgMTM4LjA5NUwyNS4wNDg1IDEzOC4xNjRMMjUuMDY0NyAxMzguMThDMjUuMTg5OCAxMzguMjk4IDI1LjMxNjUgMTM4LjQxNiAyNS40NDI0IDEzOC41MzRDMjUuNTE2IDEzOC42MDggMjUuNTg5NiAxMzguNjczIDI1LjY2NjkgMTM4Ljc0MkMyNS43NTM4IDEzOC44MjMgMjUuODQxNCAxMzguOTA0IDI1LjkyODMgMTM4Ljk4M0wyNi4xMTUzIDEzOS4xNTVDMjYuMjY2MyAxMzkuMjkyIDI2LjQxNzIgMTM5LjQyOSAyNi41NjY3IDEzOS41NjNMMjYuNTcxMSAxMzkuNTY3TDI2LjU5NTQgMTM5LjU4OUwyNi42MTIzIDEzOS42MDVDMjYuNzU5NiAxMzkuNzM4IDI2LjkxMDUgMTM5Ljg3MSAyNy4wNjUxIDE0MC4wMDZMMjcuMjQ0OCAxNDAuMTY1TDI3LjUzMzQgMTQwLjQxNkMyNy42NjA4IDE0MC41MjcgMjcuNzg4MSAxNDAuNjM3IDI3LjkxNTUgMTQwLjc0NkMyNy45ODkxIDE0MC44MTEgMjguMDYyNyAxNDAuODc2IDI4LjE0MTUgMTQwLjk0TDI4LjE5NzUgMTQwLjk4OEwyOC4yMzk1IDE0MS4wMjRMMjguMjYyMyAxNDEuMDQ0QzI4LjQwOTUgMTQxLjE3MSAyOC41NjI3IDE0MS4yOTcgMjguNzEzNiAxNDEuNDIzTDI4LjgwNDkgMTQxLjQ5NkwyOC44MTgyIDE0MS41MDdDMjguODUwNiAxNDEuNTMzIDI4Ljg4NDQgMTQxLjU1OCAyOC45MTkgMTQxLjU4QzI5LjAyNiAxNDEuNjUzIDI5LjE0MTggMTQxLjcxMiAyOS4yNjM2IDE0MS43NTZIMjkuMjY5NUgyOS4yNzU0QzI5LjU5NyAxNDEuODU4IDI5LjkzMzYgMTQxLjkwNSAzMC4yNzA4IDE0MS44OTRDMzAuOTY4MSAxNDEuODk0IDMxLjkyOTYgMTQxLjc2NCAzMy4zMDIgMTQxLjUwNUMzNy42NjUxIDE0MC42NzggNTkuMDU4OCAxMzYuODk2IDg0LjAxMDEgMTMzLjQ3OEM5MS40NTMgMTMyLjQ1NyA5OS4wNDA5IDEzMS43MSAxMDUuOTY5IDEzMS4xNjVDMTA0LjQ1MyAxMzMuMDk1IDEwMy42NzEgMTM1LjA0OCAxMDMuNjM3IDEzNy4wMDdDMTAzLjU3NCAxNDAuNjA2IDEwNy43OTMgMTQzLjQwNyAxMTEuMzkgMTQ1LjIyNkMxMDYuNjI3IDE0Ni43ODEgMTAxLjU5OCAxNDguMTQ1IDk2LjU1MDkgMTQ5LjE0MUM5My4yMzc3IDE0OS43OTUgODkuOTkzNyAxNTAuMzU0IDg2LjgzMjIgMTUwLjgzQzg2Ljc5ODUgMTUwLjYxMSA4Ni43NDY2IDE1MC4zOTUgODYuNjc2OCAxNTAuMTg0Qzg2LjA2NTcgMTQ4LjMzNCA4My41NzU3IDE0Ny4wNDMgNzkuNjY0NiAxNDYuNTQ3Qzc1Ljg3NTggMTQ2LjA2OCA3MS4wMzYzIDE0Ni4zNTcgNjYuMDM3OCAxNDcuMzYzQzU5LjI5NTkgMTQ4LjcxOSA1NS4wMjA0IDE1MC43OTQgNTMuODcwMyAxNTEuMzk3QzUyLjEwMzMgMTUyLjMyMyA1MS40MDY4IDE1My4wMjMgNTEuNDU2OCAxNTMuODEzQzUxLjUxMTMgMTU0LjY3MSA1Mi40NDQyIDE1NS4xMjggNTMuMjYyMiAxNTUuNDMzTDUzLjI4MiAxNTUuNDRMNTMuNjM0NyAxNTUuNTYzTDUzLjY4NyAxNTUuNTgyTDU0LjAzMDEgMTU1LjdDNTQuNTg0NSAxNTUuODkgNTUuMTQxOCAxNTYuMDc0IDU1LjY4NDUgMTU2LjI0N0w1NS43MjY0IDE1Ni4yNjFMNTYuMTQ5OCAxNTYuMzkzSDU2LjE1NjRDNTYuNDU5IDE1Ni40ODcgNTYuNzY4MyAxNTYuNTgyIDU3LjA4MTIgMTU2LjY3NUw1Ny4xMjYxIDE1Ni42ODlMNTcuMTYwNyAxNTYuNjk5TDU3LjIxNjYgMTU2LjcxNkw1Ny40MTEgMTU2Ljc3NEM1Ny42MDQ3IDE1Ni44MzEgNTcuNzk4MyAxNTYuODg3IDU3Ljk5MTkgMTU2Ljk0Mkw1OC4xMDQ2IDE1Ni45NzVDNTguNjA3MiAxNTcuMTE4IDU5LjExMTggMTU3LjI1NSA1OS42MTgzIDE1Ny4zODdMNTkuNjkyIDE1Ny40MDZMNTkuODA2MSAxNTcuNDM3TDU5LjgyNDUgMTU3LjQ0MUM2MC4wMjk3IDE1Ny40OTQgNjAuMjM1MSAxNTcuNTQ2IDYwLjQ0MDggMTU3LjU5OEw2MC42MjE5IDE1Ny42NDRMNjAuNzMwOCAxNTcuNjcxTDYwLjc4NTMgMTU3LjY4NEw2MS4zMTg0IDE1Ny44MTNMNjEuNDExMiAxNTcuODM2TDYxLjYzNzIgMTU3Ljg4OUM2MS42Nzg0IDE1Ny44OTkgNjEuNzIwNCAxNTcuOTA4IDYxLjc2MjMgMTU3LjkxN0w2Mi4yMDg1IDE1OC4wMjFMNjIuMzUwNiAxNTguMDUzTDYyLjUzODQgMTU4LjA5NUM2Mi42MTk0IDE1OC4xMTMgNjIuNzAxMSAxNTguMTMgNjIuNzgyOCAxNTguMTQ4QzYyLjg5MzMgMTU4LjE3MiA2My4wMDM3IDE1OC4xOTcgNjMuMTE1NiAxNTguMjIyTDYzLjE3NiAxNTguMjM1TDYzLjQ5NTUgMTU4LjMwM0w2My44NTMzIDE1OC4zNzZMNjQuMDU4OCAxNTguNDE4SDY0LjA3NDJMNjQuMzEyOCAxNTguNDY3QzY0LjUzMzIgMTU4LjUxIDY0Ljc1NCAxNTguNTUzIDY0Ljk3NTQgMTU4LjU5NUw2NS4zODg1IDE1OC42NjlMNjUuNzMzOCAxNTguNzMyTDY1LjkzMjYgMTU4Ljc2N0w2Ni4wMTEzIDE1OC43ODFMNjYuMTgxNCAxNTguODExTDY2LjM3MDYgMTU4Ljg0NEw2Ni45MjU4IDE1OC45MzdMNjcuMDYzNSAxNTguOTU5TDY3LjMyNDEgMTU5LjAwMUw2Ny41NDUgMTU5LjAzNkM2Ny42NzMxIDE1OS4wNTcgNjcuODAxMiAxNTkuMDc2IDY3LjkzIDE1OS4wOTVMNjguMDAzNyAxNTkuMTA2TDY4LjA4NTQgMTU5LjExOUw2OC4xODI2IDE1OS4xMzNDNjguNDI4IDE1OS4xNjggNjguNjcxIDE1OS4yMDMgNjguOTExNSAxNTkuMjM3TDY5LjA4NDUgMTU5LjI2MUw2OS4zNTEgMTU5LjI5N0w2OS4zOTgyIDE1OS4zMDNMNjkuOTI3NSAxNTkuMzcxTDcwLjAwOTMgMTU5LjM4MUw3MC4wNjMgMTU5LjM4OEw3MC40MDgzIDE1OS40MjlDNzEuMDA2MiAxNTkuNSA3MS42MDQ1IDE1OS41NjUgNzIuMjAzMyAxNTkuNjIzQzcyLjQwMzYgMTU5LjY0MiA3Mi42MDM5IDE1OS42NjEgNzIuODA0OCAxNTkuNjc5TDczLjE1NDYgMTU5LjcxTDczLjIzMzQgMTU5LjcxNkw3My4yNjU4IDE1OS43MkM3My40OTYyIDE1OS43MzkgNzMuNzI4MSAxNTkuNzU3IDczLjk2MDEgMTU5Ljc3NEw3NC4wMjEyIDE1OS43NzlDNzYuMDAwMiAxNTkuOTI2IDc4LjAwMjIgMTYwIDc5Ljk4NDkgMTYwQzg1Ljg3NjMgMTYwLjAwMiA5MS43NTAxIDE1OS4zNTcgOTcuNTAwNyAxNTguMDc2QzEwMy4wNzIgMTU2LjgzIDEwOC40OTQgMTU0Ljk4OCAxMTMuNjcxIDE1Mi41ODFDMTE1LjcyNiAxNTEuNjI2IDExNy43NDEgMTUwLjU4MiAxMTkuNzE1IDE0OS40NDlDMTE5LjcyOCAxNDkuNDQyIDExOS43NDEgMTQ5LjQzNyAxMTkuNzU0IDE0OS40M0MxMjAuODExIDE0OC44MjMgMTIxLjg1MiAxNDguMTkzIDEyMi44NzcgMTQ3LjUzOUwxMjIuOTEzIDE0Ny41MTZDMTIzLjE3MyAxNDcuMzUgMTIzLjQzMiAxNDcuMTgzIDEyMy42OSAxNDcuMDE0TDEyMy44NjMgMTQ2LjkwMUMxMjQuMDc2IDE0Ni43NjEgMTI0LjI4NyAxNDYuNjIgMTI0LjQ5OCAxNDYuNDc5TDEyNC43MjggMTQ2LjMyNUMxMjQuOTI0IDE0Ni4xOTIgMTI1LjExOSAxNDYuMDU5IDEyNS4zMTIgMTQ1LjkyNkMxMjUuNDkyIDE0NS44MDIgMTI1LjY3MiAxNDUuNjc2IDEyNS44NTEgMTQ1LjU1QzEyNS45ODggMTQ1LjQ1NCAxMjYuMTI1IDE0NS4zNTkgMTI2LjI2MSAxNDUuMjYyQzEyNi40NDUgMTQ1LjEzMSAxMjYuNjI4IDE0NSAxMjYuODEgMTQ0Ljg2OEwxMjYuOTg5IDE0NC43MzhDMTI3LjE4OSAxNDQuNTkxIDEyNy4zODkgMTQ0LjQ0MyAxMjcuNTg3IDE0NC4yOTZMMTI3LjY3MiAxNDQuMjMzQzEyNy44MDggMTQ0LjEzMyAxMjcuOTQ0IDE0NC4wMzMgMTI4LjA3OSAxNDMuOTMxQzEzMi41MzggMTQwLjU3IDEzNi42MzYgMTM2Ljc1NCAxNDAuMzA2IDEzMi41NDVDMTQwLjQ4NSAxMzIuMzQgMTQwLjY2MyAxMzIuMTM0IDE0MC44NCAxMzEuOTI2TDE0MC44OSAxMzEuODY4QzE0MS4wNiAxMzEuNjY4IDE0MS4yMjkgMTMxLjQ2OCAxNDEuMzk2IDEzMS4yNjlMMTQxLjQ2MyAxMzEuMTg5QzE0MS42MjkgMTMwLjk4OSAxNDEuNzk1IDEzMC43ODggMTQxLjk2IDEzMC41ODdMMTQyLjAxOSAxMzAuNTEzQzE0Mi4xODggMTMwLjMwNyAxNDIuMzU1IDEzMC4xIDE0Mi41MiAxMjkuODkzTDE0Mi41NTIgMTI5Ljg1MkMxNDMuMTY5IDEyOS4wOCAxNDMuNzgxIDEyOC4yODIgMTQ0LjM3MSAxMjcuNDgzTDE0NC4zOTkgMTI3LjQ0NUMxNDQuOTg4IDEyNi42NDYgMTQ1LjU3IDEyNS44MjUgMTQ2LjEyNyAxMjUuMDExTDE0Ni4xMzUgMTI0Ljk5OUwxNDYuMTUxIDEyNC45NzZDMTQ2LjMwNCAxMjQuNzUyIDE0Ni40NTYgMTI0LjUyNyAxNDYuNjA2IDEyNC4zMDFMMTQ2LjY0OSAxMjQuMjM2QzE0Ni43OTYgMTI0LjAxNCAxNDYuOTQzIDEyMy43OTEgMTQ3LjA5IDEyMy41NjdMMTQ3LjEzNCAxMjMuNUMxNDcuMjgxIDEyMy4yNzMgMTQ3LjQyOCAxMjMuMDQ1IDE0Ny41NzYgMTIyLjgxNkwxNDcuNiAxMjIuNzc4QzE0OC44MzMgMTIwLjgzMiAxNDkuOTk2IDExOC44MDkgMTUxLjA2IDExNi43NjFMMTUxLjA2OSAxMTYuNzQ0TDE1MS4wNzQgMTE2LjczNUMxNTEuMjAyIDExNi40ODkgMTUxLjMyOCAxMTYuMjQyIDE1MS40NTMgMTE1Ljk5M0wxNTEuNDc3IDExNS45NDZDMTUxLjYwMyAxMTUuNjk2IDE1MS43MjcgMTE1LjQ0NSAxNTEuODUyIDExNS4xOTNMMTUxLjg2NSAxMTUuMTY1QzE1Mi40NjMgMTEzLjk0NiAxNTMuMDMyIDExMi43MDMgMTUzLjU2OSAxMTEuNDQ5QzE1My42MDYgMTExLjM2MiAxNTMuNjQyIDExMS4yNzYgMTUzLjY4MSAxMTEuMTlDMTUzLjczMiAxMTEuMDY4IDE1My43ODIgMTEwLjk0NiAxNTMuODMzIDExMC44MjJDMTUzLjg5NCAxMTAuNjc0IDE1My45NTUgMTEwLjUyOSAxNTQuMDE2IDExMC4zODRDMTU0LjA2OSAxMTAuMjU0IDE1NC4xMjIgMTEwLjEyMyAxNTQuMTc0IDEwOS45OTNDMTU0LjIyNiAxMDkuODYzIDE1NC4yODUgMTA5LjcyMSAxNTQuMzM5IDEwOS41ODVDMTU0LjM5OSAxMDkuNDMzIDE1NC40NTggMTA5LjI4MyAxNTQuNTE4IDEwOS4xMzFDMTU0LjU1OSAxMDkuMDI2IDE1NC42MDEgMTA4LjkyIDE1NC42NDEgMTA4LjgxNFYxMDguODA5QzE1NC42NTEgMTA4Ljc4MyAxNTQuNjYxIDEwOC43NTcgMTU0LjY3MiAxMDguNzM1QzE1NC42NzIgMTA4LjcyNyAxNTQuNjc4IDEwOC43MTcgMTU0LjY4MSAxMDguNzA3QzE1NC44NTYgMTA4LjE4MyAxNTQuNyAxMDcuODA4IDE1NC41NCAxMDcuNTg0QzE1NC4wNzIgMTA2LjkzNyAxNTIuOTY5IDEwNi4zMDUgMTQ1LjI0NSAxMDYuMzA1QzE0NS4xMzUgMTA2LjMwNSAxMzMuNjU5IDEwNi4zNjIgMTEyLjMxNyAxMDguNDA4QzEwMy43NDYgMTA5LjIzMSA5My43MTc3IDExMC40MDIgODMuNjQxMiAxMTEuNjkxQzg2LjM2NTQgMTA5LjU1NiA4OC42MTQ3IDEwNy41NzggOTAuMjQ0IDEwNS42MDdDOTEuMzc1NyAxMDQuMjM3IDkyLjE4MTkgMTAyLjkwNyA5Mi42OTA2IDEwMS41NjdDMTAzLjEwOSA5OS4xMTA2IDExMy45ODYgOTYuNjM5MiAxMjQuMjQ1IDk0LjQzNTJDMTQwLjUzMiA5MC45MzY1IDE1Mi41NSA4OC4wOTcgMTU2LjM5NCA4Ni44MzkyQzE1Ny4xMTcgODYuNjAyOCAxNTguNTQ0IDg2LjAwOTMgMTU5LjMwNyA4NS4yODM5TDE1OS4zMTIgODUuMjc4OEMxNTkuNTk4IDg1LjAwMiAxNTkuNzkxIDg0LjY0MzcgMTU5Ljg2NSA4NC4yNTNDMTU5Ljg3OSA4NC4yMDUxIDE1OS44ODkgODQuMTU1NyAxNTkuODkyIDg0LjEwNTdWODQuMTAxM1Y4NC4wOTFDMTU5Ljg5MiA4NC4wNjc0IDE1OS44OTIgODQuMDQzOCAxNTkuODkyIDg0LjAxNzNDMTU5Ljg5MiA4NC4wMTAyIDE1OS44OTIgODQuMDAzMSAxNTkuODkyIDgzLjk5NkMxNTkuOTI0IDgzLjM0NTcgMTU5Ljk0OSA4Mi42ODgxIDE1OS45NjUgODIuMDM5M1Y4MS45MTcxQzE1OS45NzIgODEuNjM5NSAxNTkuOTc2IDgxLjM2NDggMTU5Ljk4MSA4MS4wOTE2TDE1OS45OTQgODAuOTgyNlpNNjAuMTI0OSAxMy44MTQ3QzU2Ljg2MjUgMTQuNjk4MyA1Mi41MzMzIDE1LjE4MTQgNDguMjQ2NyAxNS4xNDUzQzQ0Ljg5MzggMTUuMTE3NCA0MC4zNDI5IDE0LjY2NTkgMzcuNzMyOSAxNC4yMjQ4QzQxLjgzMTYgMTMuNDQ1NyA1Mi40NTgyIDExLjU5MzcgNjUuOTI0NSAxMC41MjA3QzY0Ljk3MjUgMTIuMjYwOCA2MS45ODU0IDEzLjMxMjQgNjAuMTI0OSAxMy44MTQ3Wk04MS4xNzE4IDE4LjM4MDRDOTAuOTA0NSAxNC45NTM5IDk1LjQ1NTMgMTEuOTQxMyA5Ny41NjYyIDkuOTg1MzdDMTA2LjcyOCAxMC40NzE0IDExMy44NTIgMTEuNTk3NCAxMTguODM4IDEzLjM1MzdDMTIwLjYgMTMuOTc0NSAxMjEuNjg4IDE0LjY3MjYgMTIxLjkgMTUuMzE5MUMxMjEuOTM4IDE1LjQ1OTggMTIxLjk2NCAxNS42MDM0IDEyMS45NzkgMTUuNzQ4NFYxNS43NzVDMTIxLjk3OSAxNS43ODk3IDEyMS45NzkgMTUuODAzNyAxMjEuOTgyIDE1LjgxOTlDMTIyLjA4NCAxNy4zMDM3IDEyMS4zODQgMTkuNjU4IDExNy40NzIgMjIuNDQ3NUMxMTcuMzg0IDIyLjUxMDggMTE3LjI5NCAyMi41NzQyIDExNy4yMDMgMjIuNjM3NUwxMTcuMTEzIDIyLjY5OTNMMTE2LjkyMyAyMi44MjlMMTE2LjgxMyAyMi45MDI2TDExNi42MzUgMjMuMDIxOUwxMTYuNTE0IDIzLjEwMDdMMTE2LjMzNSAyMy4yMTc4TDExNi4yMDkgMjMuMjk4OEwxMTYuMDI0IDIzLjQxNTlMMTE1Ljg5NiAyMy40OTY5TDExNS42OTkgMjMuNjE5MUwxMTUuNTc1IDIzLjY5MjhMMTE1LjM1IDIzLjgyOTdMMTE1LjI0NSAyMy44OTMxQzExNS4xMzQgMjMuOTYwMyAxMTUuMDIxIDI0LjAyNzYgMTE0LjkwNiAyNC4wOTQ4TDExNC44NzYgMjQuMTEyNUMxMTQuNzcxIDI0LjE3MzkgMTE0LjY2NSAyNC4yMzU1IDExNC41NTcgMjQuMjk3M0wxMTQuNDI0IDI0LjM3MUwxMTQuMTk4IDI0LjQ5OThMMTE0LjA1MSAyNC41ODAxQzExMy45NzggMjQuNjIyMSAxMTMuOTA0IDI0LjY2NDggMTEzLjgyNCAyNC43MDY4TDExMy42NzEgMjQuNzkyMkwxMTMuNDQ1IDI0LjkxNTlMMTEzLjI4NSAyNS4wMDI4QzExMy4yMTEgMjUuMDQ0OCAxMTMuMTMgMjUuMDg2IDExMy4wNTIgMjUuMTI4TDExMi44OTIgMjUuMjEzNEwxMTIuNjQzIDI1LjM0NTJMMTEyLjQ5IDI1LjQyNTVMMTEyLjIwNCAyNS41NzI4TDExMi4wNzkgMjUuNjM2OUMxMTEuOTQgMjUuNzA4NSAxMTEuOCAyNS43OCAxMTEuNjU5IDI1Ljg1MTFDMTA1LjI2IDI5LjA4NzYgOTUuOTY0OCAzMi42MjAyIDg0LjAzMTQgMzYuMzUxNUM4Mi42NDY4IDM2Ljc4NTUgODEuMjU5MSAzNy4yMTYzIDc5Ljg2ODYgMzcuNjQzOUM4MC40MjE5IDM2LjkwOTIgODAuOTA3NiAzNi4xMjU5IDgxLjMxOTggMzUuMzAzNkM4Mi40OTc4IDMyLjkyNSA4Mi43MTg3IDMwLjU3NTkgODEuOTg2OCAyOC4zMjI1QzgxLjMwOCAyNi4yMzA0IDgwLjA5OSAyNC43MDkgNzguMjkxNSAyMy42NzE0Qzc2LjU5MjIgMjIuNjk1NyA3NC4zNDM2IDIyLjE1IDcxLjQxNjMgMjIuMDAzNEM3MS4xMTM0IDIxLjk4ODcgNzAuODAzOSAyMS45Nzc5IDcwLjQ4NzggMjEuOTcxQzc0LjUwMTkgMjAuNjc4NyA3OC4xNTYgMTkuNDQwOCA4MS4xNzE4IDE4LjM3ODlWMTguMzgwNFpNNzQuMzI0NSA3Mi42ODU2TDcxLjUyNjcgNzMuMDQ3OUM0OC4wOTA2IDc2LjA3OTYgMjcuODUwNyA3OC42OTgzIDE3LjUwNjkgNzkuNjg4N0MxMS40OTUzIDgwLjI2MzkgNS44ODY0NCA4MC41NjI5IDMuNjY1MTMgODAuNTUwM0MxLjg4NTU4IDgwLjU0MDggMS4yNzA3OSA4MC4xMDg1IDEuMjM1NDUgNzkuODg3NkMxLjI1ODI4IDc5Ljc2MTYgMS41NDgzNyA3OS4wMjgyIDUuMDY0MDMgNzcuMTAxOEM3LjgwMjIgNzUuNjAxNyAxMi4xNDI1IDczLjU2MTkgMTguMzMzNyA3MC44NjU5QzMyLjE0NzUgNjQuODQ5NSA0Ni43MDI4IDU4LjA5NDUgNTYuNDgxMSA1My40ODY4QzU2Ljk4MTggNTMuMjUxMiA1Ny40NzI5IDUzLjAxNjMgNTcuOTU4MSA1Mi43ODIxQzYxLjAxOCA1Mi4zODA1IDY0LjE5NDUgNTEuOTY2NCA2Ny40ODc1IDUxLjUzOThDNzguNjk5NCA1MC4wODk4IDg5LjcyMjggNDguNDY2IDEwMC40MjggNDYuODY5NUM5OC4wNDQ4IDQ4LjM1NDEgOTYuMTg4NiA0OS45OTYzIDk0Ljg5NzIgNTEuNzY1MUM5Mi45MzIxIDU0LjQ1ODEgOTIuMjEzNSA1Ny41MDkxIDkyLjc2MjEgNjAuODM4M0M5My4zMzc4IDY0LjMyNDUgOTUuNjgxNCA2Ny4wOTc3IDk4Ljk3MDIgNjkuMzIxN0M4OS4zMjg4IDcwLjY3MyA4MC42Mjg0IDcxLjg2ODkgNzQuMzI1MiA3Mi42ODQxTDc0LjMyNDUgNzIuNjg1NlpNMTEzLjE0OSAxNTEuNDkyQzEwOC4wNTMgMTUzLjg2MSAxMDIuNzE3IDE1NS42NzQgOTcuMjMyNyAxNTYuOUM5MS41NzE4IDE1OC4xNjEgODUuNzg5NiAxNTguNzk2IDc5Ljk5MDEgMTU4Ljc5NEM3OC43OTI5IDE1OC43OTQgNzcuNTg4NCAxNTguNzY1IDc2LjM4MjQgMTU4LjcxMUM3Ni44NDcgMTU4LjUzMSA3Ny4zNTM1IDE1OC4zNDMgNzcuODU0OSAxNTguMTZDNzkuODQ5NCAxNTcuNDI4IDgyLjMzMTQgMTU2LjUxNyA4NC4xNTE0IDE1NS4zMjRDODUuNjQwOSAxNTQuMzQ4IDg2LjUyMDcgMTUzLjI4MyA4Ni43ODY1IDE1Mi4xNDFDOTAuMDM5NCAxNTEuNjU0IDkzLjM4MzUgMTUxLjA4MSA5Ni43OTM5IDE1MC40MDdDMTAxLjk4NCAxNDkuMzgyIDEwNy41MTggMTQ3Ljg4NSAxMTMuMDA2IDE0Ni4wNEMxMTMuNzA0IDE0Ni4zNiAxMTQuMzQgMTQ2LjYzNSAxMTQuODY1IDE0Ni44NjNDMTE1LjIzNCAxNDcuMDIyIDExNS41NTIgMTQ3LjE1NyAxMTUuNzc3IDE0Ny4yNjRDMTE3LjI3NiAxNDcuOTYxIDExOC4wNTkgMTQ4LjQ0NyAxMTguNDYzIDE0OC43NjdDMTE2LjcyNiAxNDkuNzQyIDExNC45NTUgMTUwLjY1IDExMy4xNDkgMTUxLjQ5MUwxMTMuMTQ5IDE1MS40OTJaTTExMi40MzkgMTA5LjcwMkMxMzAuMjk4IDEwNy45ODkgMTQyLjQxMiAxMDcuNjA0IDE0NS4yNDcgMTA3LjYwNEMxNDguMjE1IDEwNy42MDQgMTUwLjM0MiAxMDcuNjkzIDE1MS43NDkgMTA3Ljg3OEMxNTMuMDQ4IDEwOC4wNDkgMTUzLjQxNCAxMDguMjY4IDE1My41MDIgMTA4LjM0MVYxMDguMzQ5TDE1My40ODMgMTA4LjRDMTUzLjAzNCAxMDkuNDIyIDE1MS44MSAxMDkuOTUzIDE0OS41MSAxMTAuODc3QzE0OC45MTUgMTExLjExNSAxNDcuNDQ5IDExMS42MDMgMTQ1LjQyIDExMi4yNzZDMTQwLjgzNSAxMTMuOCAxMzMuMTYgMTE2LjM1MSAxMjUuMDI2IDExOS41MjdDMTE4LjUxNCAxMjIuMDcgMTEzLjQgMTI0Ljc1NSAxMDkuODI1IDEyNy40OThDMTA4Ljg3OCAxMjguMjE4IDEwNy45ODQgMTI5LjAwNSAxMDcuMTUxIDEyOS44NTVDOTkuODYxOSAxMzAuNDA4IDkxLjc2ODEgMTMxLjE4NiA4My44NDIyIDEzMi4yNzNDNTguODY1MSAxMzUuNjk3IDM3LjQ0MTMgMTM5LjQ4NCAzMy4wNzE2IDE0MC4zMTFDMzIuNzMyMSAxNDAuMzc1IDMyLjQyNTkgMTQwLjQyOSAzMi4xNDc1IDE0MC40NzVDMzYuNjI5OSAxMzguNzcgNDIuMzcyMSAxMzYuNDI1IDUyLjA4NzEgMTMxLjYxNEM2Mi40MDUxIDEyNi41MDMgNjYuNTU2MiAxMjQuMzEgNzguMDAzNiAxMTUuOTU1Qzc5LjI4NjcgMTE1LjAxOSA4MC41MDYyIDExNC4xMTggODEuNjYyMSAxMTMuMjUyQzkyLjQ0MTggMTExLjg1OCAxMDMuMjc0IDExMC41NzkgMTEyLjQ0IDEwOS43TDExMi40MzkgMTA5LjcwMlpNMTU2LjAwNyA4NS42OTQ4QzE1MC4zNjkgODcuNTM1OCAxMzAuMDcyIDkxLjk0OTEgMTIzLjk4NiA5My4yNTdDMTEzLjk1MSA5NS40MTMxIDEwMy4zMjQgOTcuODIyNiA5My4xMTI1IDEwMC4yMjhDOTMuNDkyNCA5OC41NTYxIDkzLjQzNDMgOTYuODQwMyA5Mi45MzU4IDk0Ljk5MzRDOTIuNTIyIDkzLjQ2MDkgOTEuNjYwNiA5Mi4wMzMgOTAuMzc2NiA5MC43NTAyQzg5LjEyNDkgODkuNDk4NCA4Ny40OTExIDg4LjQxMDcgODUuNTI5NyA4Ny41MjE5QzgxLjQ2NyA4NS42ODA4IDc2LjIyMDQgODQuNzgyNCA3MC4zNTc1IDg0LjkyNjhDNjYuNjc2MiA4NS4wMTczIDYzLjExNzggODUuMTgxNiA1OS42MzM4IDg1LjQyNDZDNjQuODE0OSA4NC4wOTEgNzAuMTc3OSA4Mi43NDkyIDc1LjY1NzEgODEuNDI4OUM4Ni4zNDQ4IDc4Ljg1MTUgOTcuNTU5NiA3Ni4yOTgzIDEwOC41NzYgNzMuODA1NkMxMTQuNjUzIDc1Ljg0NzcgMTIxLjI2NiA3Ny4wNzMgMTI2LjA3IDc3Ljk2MzNDMTI2LjkzNSA3OC4xMjM5IDEyNy43NTIgNzguMjc0OCAxMjguNDg0IDc4LjQxNjJDMTMxLjU3MiA3OS4wMTIgMTM1Ljc3OSA3OS42ODk1IDE0MC4yMzMgODAuNDA0NUMxNDcuMDQxIDgxLjUwMTggMTU0LjA4MSA4Mi42MzU4IDE1Ny45OTggODMuNjE1MkMxNTguNTU1IDgzLjc1NDQgMTU4LjYzNSA4My45MjYgMTU4LjY0NCA4NC4wMzA2QzE1OC42MjMgODQuMTc5NCAxNTguNTUzIDg0LjMxNzEgMTU4LjQ0NSA4NC40MjE2QzE1Ny45NSA4NC44OTQ0IDE1Ni44MiA4NS40MjkgMTU2LjAwNyA4NS42OTQ4SDE1Ni4wMDdaXCIsXG4gICAgICAgIGZpbGw6IFwiY3VycmVudENvbG9yXCJcbiAgICAgIH1cbiAgICApXG4gIH1cbiksIGtSID0gKCkgPT4gLyogQF9fUFVSRV9fICovIGMoXG4gIFwic3ZnXCIsXG4gIHtcbiAgICB3aWR0aDogXCIyMFwiLFxuICAgIGhlaWdodDogXCIyMFwiLFxuICAgIHZpZXdCb3g6IFwiMCAwIDIwIDIwXCIsXG4gICAgZmlsbDogXCJub25lXCIsXG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICBjaGlsZHJlbjogLyogQF9fUFVSRV9fICovIGMoXG4gICAgICBcInBhdGhcIixcbiAgICAgIHtcbiAgICAgICAgZDogXCJNMTkuOTk5MyAxMC4xMjI4QzE5Ljk5OTggMTAuMDgyMSAyMCAxMC4wNDIzIDIwIDEwLjAwMzJDMjAgOS45NzY1MyAyMCA5Ljk0OTkyIDIwIDkuOTIzMzVDMjAgOS45MTQxNSAyMCA5LjkwNDk0IDIwIDkuODk2MzhDMjAgOS44Nzg5OCAyMCA5Ljg2MTU5IDE5Ljk5OTQgOS44NDQyOEMxOS45OTk0IDkuODMyODcgMTkuOTk5NCA5LjgyMTU0IDE5Ljk5ODcgOS44MTAyMkMxOS45OTg3IDkuNzk1NCAxOS45OTgyIDkuNzgwNTggMTkuOTk3OCA5Ljc2NTY3QzE5Ljk5NzggOS43NTMwNiAxOS45OTcxIDkuNzQwMzYgMTkuOTk2OSA5LjcyNzY1QzE5Ljk5NjYgOS43MTQ5NSAxOS45OTYgOS43MDEyMyAxOS45OTU3IDkuNjg3OThMMTkuOTk0MyA5LjY0NjI4QzE5Ljk5NDMgOS42MzQ5NiAxOS45OTM1IDkuNjIzNjQgMTkuOTkzIDkuNjEyMzJDMTkuOTkyNSA5LjU5Njc2IDE5Ljk5MTggOS41ODEyIDE5Ljk5MTIgOS41NjU2NUMxOS45OTEyIDkuNTU4MjggMTkuOTkwNSA5LjU1MDkyIDE5Ljk5MDIgOS41NDM0NkMxOS45ODYgOS40NTI1MiAxOS45ODA3IDkuMzYxNjkgMTkuOTc0MSA5LjI3MDk5VjkuMjY3MzFDMTkuOTcyNCA5LjI0MzkzIDE5Ljk3MDYgOS4yMjA0NiAxOS45Njg3IDkuMTk3MDhWOS4xOTM2N0MxOS45MjY4IDguNjcwMDcgMTkuODQzNyA4LjE1MDU4IDE5LjcyMDIgNy42NDAwNUwxOS43MTU3IDcuNjIwODFMMTkuNzEwNSA3LjYwMDFDMTkuNzA0NiA3LjU3NTg5IDE5LjY5ODUgNy41NTE4NiAxOS42OTIxIDcuNTI3NzVMMTkuNjg5MyA3LjUxNjQyQzE5LjY4ODcgNy41MTQyMSAxOS42ODgxIDcuNTEyIDE5LjY4NzUgNy41MDk4QzE5LjY4MiA3LjQ4Nzg5IDE5LjY3NjMgNy40NjYwNCAxOS42NzA0IDcuNDQ0MjZDMTkuNjcwNCA3LjQ0MzM0IDE5LjY3IDcuNDQyNDEgMTkuNjY5NyA3LjQ0MTRDMTkuNjY0OSA3LjQyMjk5IDE5LjY2IDcuNDA0NzcgMTkuNjU1MSA3LjM4NjcyTDE5LjY1MDQgNy4zNjkwNUMxOS42NDk1IDcuMzY2MiAxOS42NDg4IDcuMzYzMzQgMTkuNjQ4IDcuMzYwNDlDMTkuNjQ1NCA3LjM1MTI4IDE5LjY0MjggNy4zNDEzNCAxOS42NDAyIDcuMzMxNzdDMTkuNjM2MSA3LjMxNzIzIDE5LjYzMiA3LjMwMjYyIDE5LjYyNzggNy4yODc5NUMxOS42MjY5IDcuMjg0NjQgMTkuNjI2MSA3LjI4MTMzIDE5LjYyNTEgNy4yNzgwMUwxOS42MTkgNy4yNTY0N0MxOS42MTkgNy4yNTYyMyAxOS42MTkgNy4yNTU5OCAxOS42MTkgNy4yNTU3NEMxOS42MDk4IDcuMjI0NjIgMTkuNjAxMSA3LjE5MzcgMTkuNTkxOSA3LjE2MjY3QzE5LjU5MTcgNy4xNjE4MyAxOS41OTE1IDcuMTYxIDE5LjU5MTIgNy4xNjAxOUwxOS41ODIgNy4xMzA0NkwxOS41Nzk3IDcuMTIzVjcuMTIxOUMxOS41NzMyIDcuMTAwMjkgMTkuNTY2NiA3LjA3ODYgMTkuNTU5OSA3LjA1NjgyQzE5LjU1OTMgNy4wNTUxNiAxOS41NTg5IDcuMDUzNDEgMTkuNTU4MyA3LjA1MTc1TDE5LjU1NTYgNy4wNDI1NUMxOS41NTQ3IDcuMDM5NDIgMTkuNTUzNiA3LjAzNjI5IDE5LjU1MjcgNy4wMzMzNEMxOS41NTA3IDcuMDI3MDggMTkuNTQ4OSA3LjAyMDgyIDE5LjU0NjggNy4wMTQ5M0MxOS41NDE1IDYuOTk3ODcgMTkuNTM2MSA2Ljk4MDg3IDE5LjUzMDYgNi45NjM5NEMxOS41MjYyIDYuOTQ5NzYgMTkuNTIxNiA2LjkzNTU5IDE5LjUxNyA2LjkyMTQxTDE5LjUwOTQgNi44OTc3NUMxOS41MDc2IDYuODkyMzIgMTkuNTA1OCA2Ljg4Njg5IDE5LjUwMzkgNi44ODE0NkMxOS40OTkgNi44NjYxOCAxOS40OTM5IDYuODUwODQgMTkuNDg4OCA2LjgzNTQ0TDE5LjQ4NzggNi44MzI0OUMxOS40ODU0IDYuODI0OTQgMTkuNDgyOSA2LjgxNzM5IDE5LjQ4MDMgNi44MDk4NUwxOS40NzUzIDYuNzk1MjFMMTkuNDY2OCA2Ljc2OTk5VjYuNzY4N0MxOS40NjY4IDYuNzY4MTUgMTkuNDY2MyA2Ljc2NzUgMTkuNDY2MSA2Ljc2Njg2QzE5LjQ1ODYgNi43NDQ4MyAxOS40NTEgNi43MjI4NiAxOS40NDM0IDYuNzAwOTVMMTkuNDQxNCA2LjY5NTMzQzE5LjQzNzkgNi42ODUzIDE5LjQzNDQgNi42NzUxOCAxOS40MzA4IDYuNjY1MTRMMTkuNDI0NyA2LjY0ODExQzE5LjQxOTcgNi42MzM4OCAxOS40MTQ1IDYuNjE5NjEgMTkuNDA5MyA2LjYwNTMxQzE5LjQwNTggNi41OTYxMSAxOS40MDI1IDYuNTg2MjYgMTkuMzk5IDYuNTc2NzdDMTkuMzk2NiA2LjU3MDA1IDE5LjM5NDEgNi41NjM0MyAxOS4zOTE3IDYuNTU2NzFMMTkuMzkwNiA2LjU1Mzc2QzE5LjM4OTcgNi41NTEyOCAxOS4zODg4IDYuNTQ4NzkgMTkuMzg3OSA2LjU0NjRMMTkuMzg3MiA2LjU0NDU2QzE5LjM4NDcgNi41Mzc1NiAxOS4zODIxIDYuNTMwNjYgMTkuMzc5NCA2LjUyMzY2TDE5LjM3MzggNi41MDg0N0MxOS4zNzIyIDYuNTAzOTYgMTkuMzcwNCA2LjQ5OTI3IDE5LjM2ODcgNi40OTUwM0wxOS4zNjE0IDYuNDc1MTVDMTkuMzYwMSA2LjQ3MTg0IDE5LjM1ODkgNi40Njg1MiAxOS4zNTc2IDYuNDY1M0wxOS4zNDM4IDYuNDI4NDhMMTkuMzQyMyA2LjQyNDcxQzE5LjM0MSA2LjQyMTMgMTkuMzM5NyA2LjQxNzggMTkuMzM4MyA2LjQxNDRDMTkuMzM0NCA2LjQwNDI3IDE5LjMzMDYgNi4zOTQyNCAxOS4zMjY2IDYuMzg0MjFDMTkuMzIzNyA2LjM3NjQ3IDE5LjMyMDcgNi4zNjg3NCAxOS4zMTc0IDYuMzYxMDFMMTkuMzE0MSA2LjM1MjU0TDE5LjMwMTcgNi4zMjEwNkMxOS4yOTc3IDYuMzEwOTMgMTkuMjkzNiA2LjMwMDgxIDE5LjI4OTUgNi4yOTA2OEwxOS4yODAzIDYuMjY4NjhMMTkuMjc1OSA2LjI1NzU0QzE5LjI3NDcgNi4yNTQ2IDE5LjI3MzUgNi4yNTE1NiAxOS4yNzIyIDYuMjQ4MzRMMTkuMjY3IDYuMjM1MjdMMTkuMjU0IDYuMjAzNjlMMTkuMjQ3MSA2LjE4Njk0QzE5LjI0MzMgNi4xNzc3NCAxOS4yMzk0IDYuMTY4NTMgMTkuMjM1NiA2LjE1OTMzQzE5LjIzMTEgNi4xNDgyOCAxOS4yMjY0IDYuMTM3MTQgMTkuMjIxOSA2LjEyNjE5TDE5LjIxMjIgNi4xMDM0NUMxOS4yMTExIDYuMTAwOTcgMTkuMjEgNi4wOTgzOSAxOS4yMDkgNi4wOTU4MUMxOS4yMDggNi4wOTMyMyAxOS4yMDU4IDYuMDg4MTcgMTkuMjA0MSA2LjA4NDRDMTkuMTk3NSA2LjA2ODc1IDE5LjE5MDggNi4wNTMxNiAxOS4xODM5IDYuMDM3NjRDMTkuMTgxNyA2LjAzMjMgMTkuMTc5NCA2LjAyNzA1IDE5LjE3NzEgNi4wMjE4TDE5LjE3NTEgNi4wMTcwMkwxOS4xNjA1IDUuOTgzMzNMMTkuMTUgNS45NTk3NkwxOS4xMzk5IDUuOTM3MTJMMTkuMTM5MSA1LjkzNTM3TDE5LjEyMzcgNS45MDA2N0MxOS4xMjAzIDUuODkzMDMgMTkuMTE2OCA1Ljg4NTQ4IDE5LjExMzQgNS44Nzc5M0MxOS4xMTIzIDUuODc1ODEgMTkuMTExNCA1Ljg3MzY5IDE5LjExMDUgNS44NzE1OEMxOS4xMDk2IDUuODY5NDYgMTkuMTA3OCA1Ljg2NTg3IDE5LjEwNjUgNS44NjMwMkwxOS4xMDQ2IDUuODU4NkwxOS4wODc4IDUuODIxNzhMMTkuMDgyMSA1LjgwOTQ0TDE5LjA4MDEgNS44MDUyMUMxOS4wNzkzIDUuODAzMzcgMTkuMDc4NSA1LjgwMTUzIDE5LjA3NzYgNS43OTk2OUwxOS4wNzQ4IDUuNzkzNjFMMTkuMDU0NiA1Ljc1MDYyQzE5LjA1MjIgNS43NDUyOCAxOS4wNDk3IDUuNzM5OTUgMTkuMDQ3MSA1LjczNDdMMTkuMDM5MSA1LjcxNzY3QzE5LjAzNiA1LjcxMTQxIDE5LjAzMzEgNS43MDUwNiAxOS4wMjk5IDUuNjk4NzFMMTkuMDIzNiA1LjY4NTczQzE5LjAxODMgNS42NzQ1IDE5LjAxMjkgNS42NjMyNyAxOS4wMDc1IDUuNjUyMDRDMTguOTk5MyA1LjYzNTE2IDE4Ljk5MSA1LjYxODMyIDE4Ljk4MjggNS42MDE1QzE4Ljk3OSA1LjU5MzY4IDE4Ljk3NTEgNS41ODU4NSAxOC45NzEzIDUuNTc4MDNDMTguOTcwMyA1LjU3NiAxOC45NjkzIDUuNTczOTggMTguOTY4MyA1LjU3MTk1QzE4Ljk2MiA1LjU1OTE2IDE4Ljk1NTYgNS41NDY0NiAxOC45NDkzIDUuNTMzNzVMMTguOTQ1OSA1LjUyNzAzQzE4Ljk0NDkgNS41MjUxIDE4Ljk0MzkgNS41MjMxNyAxOC45NDMgNS41MjEzM0wxOC45MjY3IDUuNDg5MDJDMTguOTI2NyA1LjQ4ODE5IDE4LjkyNTkgNS40ODczNiAxOC45MjU0IDUuNDg2NTNMMTguOTE2MiA1LjQ2ODEyTDE4LjkwNTEgNS40NDY0QzE4LjkwMTggNS40Mzk5NSAxOC44OTg1IDUuNDMzNDIgMTguODk1MSA1LjQyNzA3TDE4Ljg5MzggNS40MjQzMUwxOC44ODU4IDUuNDA4OTNDMTguODg0NyA1LjQwNyAxOC44ODM3IDUuNDA1MTYgMTguODgyOCA1LjQwMzIzTDE4Ljg1NTggNS4zNTE0OUMxOC44NTE4IDUuMzQzNzYgMTguODQ3NyA1LjMzNjAzIDE4Ljg0MzYgNS4zMjgzTDE4LjgzMzEgNS4zMDg3OEMxOC44MjU5IDUuMjk1MjggMTguODE4NyA1LjI4MTc4IDE4LjgxMTUgNS4yNjgyOEwxOC44MDExIDUuMjQ4OTVDMTguNzk3OSA1LjI0Mjg3IDE4Ljc5NDUgNS4yMzY4OSAxOC43OTEzIDUuMjMwNTRDMTguNzcyIDUuMTk1MDcgMTguNzUyNSA1LjE1OTcyIDE4LjczMjggNS4xMjQ1TDE4LjcyMTUgNS4xMDQzNEwxOC43MTY3IDUuMDk1ODdDMTguNzA4NyA1LjA4MTY5IDE4LjcwMDcgNS4wNjc1MiAxOC42OTI2IDUuMDUzMzRMMTguNjg3MSA1LjA0NDE0TDE4LjY2ODMgNS4wMTEwOUMxOC42Njc1IDUuMDA5OSAxOC42NjY3IDUuMDA4NjEgMTguNjY2MSA1LjAwNzMyTDE4LjY0NTYgNC45NzIzNEwxOC42Mzc0IDQuOTU4MDdMMTguNjIwMSA0LjkyODYyTDE4LjYxOTQgNC45Mjc0MkwxOC41OTE4IDQuODgwMzhDMTguNTg5MiA0Ljg3NjA4IDE4LjU4NjEgNC44NzIwNyAxOC41ODI2IDQuODY4NDFDMTguNDg3NCA0LjczMDM0IDE4LjE4NjkgNC42NzM4MiAxNy45NDg3IDQuNjUwOUMxNy42OTEgNC42MjU5NSAxNy4yNDg1IDQuNjE2MDEgMTYuNjA4OSA0LjcxMDA5QzE1LjgzNjggNC44MjM1OSAxNC44MzY5IDQuOTg4NzIgMTMuOTUwNCA1LjI1OTlDMTMuNTc0MyA1LjM3NTA2IDEzLjI0MDMgNS41MDI4MiAxMi45NTM2IDUuNjQxMDhDMTEuNDg0IDUuODYwNDQgOS45NjQ4IDYuMDg3MTYgOC40MTcwOCA2LjI4NzM3QzguMTY0NzggNi4zMjAwMiA3LjkxODEgNi4zNTIwOCA3LjY3NzA0IDYuMzgzNTZDOC40NTk4NyA1Ljk4MTk1IDkuMDU1NjkgNS42MDE5NiA5LjQ4NzMzIDUuMjI5NzFDOS41OTc1OSA1LjEzNDgyIDkuNzAyMzcgNS4wMzM3NCA5LjgwMTE2IDQuOTI2OTZDMTAuMDUyIDQuODUwMDcgMTAuMzAyMiA0Ljc3MjY4IDEwLjU1MTUgNC42OTQ4MUMxMi4wNTE3IDQuMjI1MzUgMTMuMjIxMiAzLjc4MDkzIDE0LjAyODggMy4zNzI1MUMxNC4wNDcyIDMuMzYzMyAxNC4wNjQ2IDMuMzU0MSAxNC4wODIzIDMuMzQ0ODlMMTQuMDk4MSAzLjMzNjdMMTQuMTM0OSAzLjMxNzgzTDE0LjE1NDQgMy4zMDc1MkwxNC4xODYxIDMuMjkwODZMMTQuMjA2NiAzLjI3OTgxQzE0LjIxNjUgMy4yNzQ1NiAxNC4yMjY1IDMuMjY5MjMgMTQuMjM2MiAzLjI2Mzg5TDE0LjI1NjcgMy4yNTI4NEwxNC4yODU2IDMuMjM3MDFMMTQuMzA1MiAzLjIyNjE1TDE0LjMzNDMgMy4yMDk4NUwxNC4zNTI3IDMuMTk5NjRMMTQuMzgxNiAzLjE4MzE2TDE0LjM5ODggMy4xNzMzMUMxNC40MTI2IDMuMTY1MzkgMTQuNDI2MiAzLjE1NzQ1IDE0LjQzOTcgMy4xNDk0N0wxNC40NDM1IDMuMTQ3MjZDMTQuNDU4MyAzLjEzODYxIDE0LjQ3MjggMy4xMjk5NSAxNC40ODcxIDMuMTIxM0wxNC41MDA1IDMuMTEzMjlMMTQuNTI5NiAzLjA5NTUzTDE0LjU0NTYgMy4wODU2OEwxNC41NzEgMy4wNjk5NEwxNC41ODc1IDMuMDU5NDRMMTQuNjExNCAzLjA0NDI2TDE0LjYyNzggMy4wMzM3NkwxNC42NTA5IDMuMDE4NjdMMTQuNjY2NiAzLjAwODM2TDE0LjY4OTggMi45OTI4OUwxNC43MDQxIDIuOTgzNjlDMTQuNzEyNSAyLjk3ODA3IDE0LjcyMDYgMi45NzI0NiAxNC43Mjg4IDIuOTY2NzVMMTQuNzQwNSAyLjk1ODc0QzE0Ljc1MjggMi45NTA0NiAxNC43NjQ1IDIuOTQyMiAxNC43NzU3IDIuOTMzOThDMTUuMDc4MiAyLjcxODIxIDE1LjQzMjggMi4zNzUzMyAxNS40MDQ4IDEuOTY3NDVDMTUuNDA0OCAxLjk2NDQxIDE1LjQwNDMgMS45NjE0NyAxNS40MDQxIDEuOTU4MjVWMS45NTQ2NkMxNS4zODY4IDEuNzc0MjQgMTUuMjU0OSAxLjQ5OTkzIDE0LjczOTEgMS4xOTU1MkwxNC43MzYyIDEuMTkzNzdMMTQuNzE4OSAxLjE4MzY0TDE0LjcwNzkgMS4xNzczOEwxNC42OTYxIDEuMTcwNjZMMTQuNjc4MyAxLjE2MDU0TDE0LjY3MTcgMS4xNTY4NkwxNC42NDY0IDEuMTQyNzdMMTQuNjQzMSAxLjE0MTAyTDE0LjY0MTkgMS4xNDAzOEwxNC42NDAzIDEuMTM5NDZDMTQuNTg1IDEuMTEwNjggMTQuNTI5OCAxLjA4MjM2IDE0LjQ3NDYgMS4wNTQ1TDE0LjQ3MDkgMS4wNTI2NkMxNC40MzYxIDEuMDM1MjYgMTQuNDAxMyAxLjAxNzk1IDE0LjM2NjIgMS4wMDEwMkwxNC4zNjA5IDAuOTk4NDM5TDE0LjMzNzggMC45ODcyMDlMMTQuMzAwOSAwLjk2OTYyN0gxNC4zMDAxTDE0LjI3NyAwLjk1ODY3M0wxNC4yNjk5IDAuOTU1MzU5TDE0LjI1OTEgMC45NTAyMDRMMTQuMjMyNiAwLjkzNzY4NUwxNC4yMjQxIDAuOTMzNzI3TDE0LjE5NzcgMC45MjE0ODVMMTQuMTg2MyAwLjkxNjIzOEwxNC4xODM5IDAuOTE1MTMzTDE0LjE2NDUgMC45MDU5MjhMMTQuMTU1MyAwLjkwMTc4NkwxNC4xMTg1IDAuODg1MTI1TDE0LjExMTcgMC44ODE5OTVMMTQuMDk4MSAwLjg3NTkyTDE0LjA4NyAwLjg3MDg1N0wxNC4wNDc5IDAuODUzNDZMMTQuMDM4NyAwLjg0OTMxN0wxNC4wMzUxIDAuODQ3NzUzTDE0LjAxOTMgMC44NDA3NTdMMTMuOTc3OSAwLjgyMjM0N0wxMy45NTU3IDAuODEzMTQyTDEzLjkzNDYgMC44MDM5MzdMMTMuODg4NSAwLjc4NDE0NkwxMy44NTI3IDAuNzY5MTQyTDEzLjgxNTkgMC43NTM3NjlMMTMuNzkzIDAuNzQ0NTY0TDEzLjc3ODQgMC43Mzg0ODlDMTMuNzYxNSAwLjczMTU4NSAxMy43NDQ1IDAuNzI0NzczIDEzLjcyNzYgMC43MTc5NjJMMTMuNzA5MiAwLjcxMDY5TDEzLjY1ODEgMC42OTA0MzlMMTMuNjQxNiAwLjY4Mzk5NUwxMy41ODc4IDAuNjYzMUwxMy41Nzg2IDAuNjU5NTFDMTMuNTQ4NyAwLjY0ODA5NSAxMy41MTg3IDAuNjM2NzczIDEzLjQ4ODUgMC42MjU1NDNIMTMuNDg3NkMxMy40MzMgMC42MDUyOTIgMTMuMzc4MyAwLjU4NTMxNyAxMy4zMjQxIDAuNTY2MjYzTDEzLjMyMDggMC41NjUwNjZMMTMuMjU5MiAwLjU0MzYxOUwxMy4yNTE3IDAuNTQxMDQxQzEzLjIzMTEgMC41MzM5ODQgMTMuMjEwNSAwLjUyNzAxOSAxMy4xOTAxIDAuNTIwMTQ2TDEzLjE4NTkgMC41MTg2NzNMMTMuMTU0MiAwLjUwODE3OUwxMy4xMjY2IDAuNDk4OTc0TDEzLjA4MTQgMC40ODQyNDZMMTMuMDQ3NSAwLjQ3MzM4NEwxMy4wMDY0IDAuNDYwMzEzTDEyLjk2NjcgMC40NDc4ODZMMTIuOTI5OSAwLjQzNjQ3MkwxMi44NjMyIDAuNDE2MzEzTDEyLjg1NCAwLjQxMzU1MkwxMi44NTEgMC40MTI2MzFMMTIuNzg2NSAwLjM5MzY2OUgxMi43ODUxSDEyLjc4NDJMMTIuNzgxNyAwLjM5MjkzMkwxMi43NjU3IDAuMzg4NDIyQzEyLjY1MzMgMC4zNTYxNDMgMTIuNTQwNCAwLjMyNTc5NyAxMi40MjcxIDAuMjk3Mzg0QzEwLjU1ODcgLTAuMTY3MjgzIDguNTk2MjMgLTAuMDg2MDQwOSA2Ljc3MjYzIDAuNTMxNDY4TDYuNzY5NzcgMC41MzI0ODFDNi43NDg4OCAwLjUzOTY2IDYuNzI3OSAwLjU0Njg0IDYuNzA3MDEgMC41NTQyMDRMNi42OTA4MSAwLjU1OTgxOUM2LjY2OTY0IDAuNTY3MTgzIDYuNjQ4NTcgMC41NzQ3MzEgNi42Mjc0OSAwLjU4MjI4TDYuNjEzNDEgMC41ODcyNUw2LjU0NzI0IDAuNjExMzY3TDYuNTM4ODYgMC42MTQ0MDVDNS45ODQ1NyAwLjgxODg3MiA1LjQ0OTU5IDEuMDcyMzEgNC45NDAyNSAxLjM3MTdMNC45MzUwOSAxLjM3NDc0QzQuOTE4NDQgMS4zODQ1IDQuOTAxNzggMS4zOTQ0NCA0Ljg4NTIxIDEuNDA0MzhMNC44NTkyNiAxLjQxOTg0QzQuODQ1MDkgMS40MjgzMSA0LjgzMDk3IDEuNDM2ODQgNC44MTY5MiAxLjQ0NTQzQzQuODA1NyAxLjQ1MjI1IDQuNzk0NDcgMS40NTkwNiA0Ljc4MzMzIDEuNDY1OTZDNC43NzA3NSAxLjQ3MzYzIDQuNzU4MTggMS40ODEzNiA0Ljc0NTYgMS40ODkxNkM0LjczMzAyIDEuNDk2OTUgNC43MjAyIDEuNTA0OTMgNC43MDcxMyAxLjUxMzA5TDQuNjczMTcgMS41MzQzNkM0LjY1ODgxIDEuNTQzMzggNC42NDQ0OCAxLjU1MjU4IDQuNjMwMTkgMS41NjE5N0w0LjYwMDY1IDEuNTgwNjZDNC41ODM3NyAxLjU5MTQgNC41NjcwMiAxLjYwMjIzIDQuNTUwNCAxLjYxMzE1TDQuNTI3NzYgMS42Mjc4OEM0LjUwMzIxIDEuNjQzOSA0LjQ3ODg5IDEuNjU5OTcgNC40NTQ3NyAxLjY3NjExQzQuNDE0MDkgMS43MDMyNyA0LjM5NDAzIDEuNzQ2ODEgNC40MDI0MSAxLjc4OTg5QzQuNDE3NzggMS44NjkzMyA0LjUxMjI5IDEuODk3NDkgNC41ODIxNSAxLjkxMTc2QzQuODkwNTUgMS45NzQ4MiA1LjU0NjAxIDIuMDQ1MTQgNi4wMzAzOCAyLjA0OTE5QzYuMDQ5MzQgMi4wNDkxOSA2LjA2ODIxIDIuMDQ5MTkgNi4wODcxNyAyLjA0OTE5QzYuNjE3OTIgMi4wNDkxOSA3LjE1MDc5IDEuOTg3MDYgNy41NTcyMSAxLjg3NzI0QzcuODAxODQgMS44MTEwNiA3Ljk5ODk3IDEuNzI4NzcgOC4xNDI2MyAxLjYzMjQ4QzguMjg2MyAxLjUzNjIgOC4zNzg1MSAxLjQyNDU0IDguNDE2MDYgMS4zMDExQzkuMDEwNTEgMS4yNTY4MiA5LjY0NjA5IDEuMjI1MjUgMTAuMzAzNSAxLjIxNjMyQzEwLjkwNDggMS4yMDgwNCAxMS40NTk1IDEuMjE0NzYgMTEuOTY3NyAxLjIzNjQ4QzExLjU4NiAxLjUzNTQ2IDEwLjkzMTIgMS44NTUxNSAxMC4wOTUgMi4xNDk4QzkuNTkyMzQgMi4zMjY3MiA4Ljk0Nzc0IDIuNTQyOTUgOC4yNDUxNiAyLjc2NTA3QzcuNjQxNyAyLjgwODk3IDYuODg4MDQgMi45MjgyNyA1Ljk1MjA2IDMuMDk1OEM1LjA0MzE0IDMuMjU4MzYgNC4wOTI5IDMuNDcyNTYgMy4zNDQzIDMuNjgzMzZDMi40MjEyMSAzLjk0MzMxIDEuODc4NDkgNC4xNzUwOSAxLjczMTMzIDQuMzcyMjZMMS43MjkzOSA0LjM3NTAzTDEuNjgwNTMgNC40NDc0N0MxLjY2NDA1IDQuNDcyMTQgMS42NDc1OCA0LjQ5NjkgMS42MzEzOCA0LjUyMTY2QzEuNjMwOTggNC41MjIxNiAxLjYzMDYxIDQuNTIyNjggMS42MzAyOCA0LjUyMzIzQzEuNjAyMjEgNC41NjU5NCAxLjU3MzEyIDQuNjExMTMgMS41NDEyOCA0LjY2MTNMMS41MzMxOCA0LjY3NDI4TDEuNTIyMTQgNC42OTE4NkMxLjUxMDIzIDQuNzEwODIgMS40OTg0MiA0LjcyOTgyIDEuNDg2NyA0Ljc0ODg0TDEuNDg1NzggNC43NTAzMUwxLjQ4NTE0IDQuNzUxNDJMMS40NjU0NCA0Ljc4MzI3TDEuNDQwNjkgNC44MjQwNUMxLjQzOTY3IDQuODI1NjEgMS40Mzg3NSA0LjgyNzE4IDEuNDM3ODMgNC44Mjg3NEwxLjQzMDc1IDQuODQwMjVMMS40MDgyOSA0Ljg3NzhDMS40MDM5NyA0Ljg4NDk4IDEuMzk5NzMgNC44OTIyNiAxLjM5NTQxIDQuODk5NTNMMS4zOTA1MyA0LjkwNzYzTDEuMzc1MzQgNC45MzMyMkwxLjM3Mjc3IDQuOTM3NjRMMS4zNzIzMSA0LjkzODU2QzEuMzUwNCA0Ljk3NTg0IDEuMzI4MDQgNS4wMTQ1IDEuMzA0NjYgNS4wNTU1NUMxLjMwMjgyIDUuMDU4NzcgMS4zMDA5OCA1LjA2MiAxLjI5OTIzIDUuMDY0NzZDMS4yOTc0OCA1LjA2NzUyIDEuMjk0NDUgNS4wNzMwNCAxLjI5MjA1IDUuMDc3MzdMMS4yODU5OCA1LjA4Nzg2TDEuMjc1NDkgNS4xMDYyN0wxLjI1OTg0IDUuMTM0MDdMMS4yNTM3NyA1LjE0NTAzTDEuMjQxNDQgNS4xNjcyMUwxLjIzNzQ4IDUuMTc0MzlMMS4yMjMwMyA1LjIwMTI3QzEuMjIwNTQgNS4yMDU4NyAxLjIxODA2IDUuMjEwNDcgMS4yMTU0OCA1LjIxNTA4TDEuMjExOCA1LjIyMTg5QzEuMjA0NTYgNS4yMzUxNCAxLjE5NzM1IDUuMjQ4NCAxLjE5MDE3IDUuMjYxNjVMMS4xNzE3NyA1LjI5NTYyQzEuMTYwOTEgNS4zMTYxNSAxLjE0OTk1IDUuMzM2NTggMS4xMzkgNS4zNTczOUwxLjEzNzcxIDUuMzU5OTZDMS4xMTI1IDUuNDA3OTIgMS4wODcyOCA1LjQ1Njk4IDEuMDYwNTkgNS41MUwxLjA0ODE3IDUuNTM0NDlDMS4wMzc0IDUuNTU2MDMgMS4wMjY4MSA1LjU3NzU3IDEuMDE1NzcgNS41OTk5NEwxLjAwMDY4IDUuNjMwNzdDMC45OTAyNDYgNS42NTIxOSAwLjk3OTg3NyA1LjY3MzY3IDAuOTY5NTY5IDUuNjk1MjFDMC45NjU5OCA1LjcwMjc2IDAuOTYyNDgzIDUuNzEwMzEgMC45NTg4OTMgNS43MTc3NkwwLjk1NTY3MiA1LjcyNDY3QzAuOTM3NzI2IDUuNzYyNDEgMC45MTk3NzkgNS44MDA5NyAwLjkwMjIwMSA1LjgzOTI3VjUuODM5NzNDMC44ODQ3MTUgNS44Nzc4NCAwLjg2NzIyOSA1LjkxNjU5IDAuODUwMjAyIDUuOTU1MDdMMC44NDQ4NjQgNS45NjcxM1Y1Ljk2Nzc3TDAuODQyMjg3IDUuOTczNjZDMC44MzIwNzIgNS45OTY3NyAwLjgyMjA0IDYuMDE5NjkgMC44MTIwMDkgNi4wNDMyNUwwLjc5OTY3NiA2LjA3MjI1QzAuNzg5ODI5IDYuMDk1MjYgMC43ODAxNjUgNi4xMTgyNyAwLjc3MDUwMiA2LjE0MTM4TDAuNzU5NDU4IDYuMTY3OEMwLjc0MjggNi4yMDc4NCAwLjcyNjE0MiA2LjI0ODggMC43MTAxMjggNi4yODg5M0wwLjcwOTIwNyA2LjI5MTA1QzAuNjkyOTE4IDYuMzMxOTIgMC42NzY3MiA2LjM3MzE2IDAuNjYxMDc0IDYuNDEzODVMMC42NTY5MzMgNi40MjQ1MkMwLjY0NzcyOSA2LjQ0OTI5IDAuNjM4NTI2IDYuNDc0MjMgMC42Mjg3NyA2LjQ5OTA4TDAuNjE5NTY3IDYuNTI0OTVDMC42MTA1NDggNi41NDk1IDAuNjAxNjIxIDYuNTc0MDQgMC41OTI3ODYgNi41OTg1OUwwLjU4MzU4MiA2LjYyMjhDMC41Njg1ODEgNi42NjQ1OSAwLjU1MzQ4NyA2LjcwNzQ5IDAuNTM4OTQ2IDYuNzQ5ODNMMC41Mzc2NTggNi43NTM1MUMwLjUyMjc0OCA2Ljc5NzE0IDAuNTA4MTE1IDYuODQwNSAwLjQ5NDMxIDYuODgyMzhMMC40OTM4NSA2Ljg4MzY3VjYuODg0ODdMMC40OTMzOSA2Ljg4NjQzQzAuNDg0ODMxIDYuOTEyNDggMC40NzY0NTYgNi45Mzg3MiAwLjQ2ODA4MSA2Ljk2NDg2TDAuNDYwNDQyIDYuOTg4OThDMC40NTI0MDQgNy4wMTQzOCAwLjQ0NDQ4OSA3LjAzOTgyIDAuNDM2Njk3IDcuMDY1MjhMMC40Mjk2MTEgNy4wODg1N0MwLjQxNjQ1IDcuMTMxOTMgMC40MDMyODkgNy4xNzYzIDAuMzkwNDA1IDcuMjIwNjdMMC4zODkyMDggNy4yMjQ4MUMwLjM3NjEzOSA3LjI3IDAuMzYzNTMxIDcuMzE1MDIgMC4zNTE1NjcgNy4zNTg2NUMwLjM1MTYwMiA3LjM1ODggMC4zNTE2MDIgNy4zNTg5NiAwLjM1MTU2NyA3LjM1OTExVjcuMzYwMDNDMC4zNDU5ODMgNy4zODA3NyAwLjM0MDQgNy40MDE1MSAwLjMzNDgxNyA3LjQyMjI2TDAuMzIyNzYgNy40NjgyOEwwLjMwOTc4NCA3LjUxODA4QzAuMzA3MjA3IDcuNTI4MyAwLjMwNDYzIDcuNTM4NTIgMC4zMDIxNDUgNy41NDg3M0wwLjI3OTMyMSA3LjY0MDc4QzAuMTY4Mzk3IDguMDk5NjcgMC4wOTAxNTYyIDguNTY1ODUgMC4wNDUxODgyIDkuMDM1OEMwLjA0NDM1OTkgOS4wNDM5IDAuMDQzNjIzNyA5LjA1MiAwLjA0Mjg4NzQgOS4wNjAyQzAuMDQxMDQ2NyA5LjA3OTI1IDAuMDM5MzkwMiA5LjA5ODIxIDAuMDM3NjQxNSA5LjExNzI3TDAuMDM0ODgwNiA5LjE0OTU4QzAuMDMzNTAwMSA5LjE2NjI0IDAuMDMyMTE5NiA5LjE4Mjk5IDAuMDMwODMxMSA5LjE5OTY1QzAuMDI5OTEwOCA5LjIxMTI1IDAuMDI4ODk4NCA5LjIyMjc2IDAuMDI4MDcwMSA5LjIzNDM2QzAuMDI2NzgxNyA5LjI1MTI5IDAuMDI1NTg1MiA5LjI2ODMyIDAuMDI0Mzg4OCA5LjI4NTI2QzAuMDIzNTYwNSA5LjI5NjEyIDAuMDIyNzMyMiA5LjMwNjg5IDAuMDIxOTk1OSA5LjMxNzY2QzAuMDIwMjQ3MyA5LjM0MzM0IDAuMDE4NjgyNyA5LjM2OTAzIDAuMDE3MTE4MiA5LjM5NDhMMC4wMTQ5MDk0IDkuNDMyODJDMC4wMTQwODExIDkuNDQ3NzMgMC4wMTMyNTI4IDkuNDYyNTUgMC4wMTI1MTY1IDkuNDc3MzdDMC4wMTE3ODAyIDkuNDkwNjIgMC4wMTExMzYgOS41MDM4OCAwLjAxMDU4MzggOS41MTcxM0MwLjAwOTg0NzU2IDkuNTMxNzcgMC4wMDkyMDMzMiA5LjU0NjQxIDAuMDA4NTU5MDkgOS41NjA5NUMwLjAwNzg4NDE4IDkuNTczOSAwLjAwNzMzMTk3IDkuNTg2ODggMC4wMDY5MDI0OSA5LjU5OTg5QzAuMDA2MjU4MjUgOS42MTU3MiAwLjAwNTcwNjAzIDkuNjMxNDYgMC4wMDUxNTM4MyA5LjY0NzJDMC4wMDUxNTM4MyA5LjY1ODg5IDAuMDA0MzI1NTYgOS42NzA1OCAwLjAwMzk1NzQzIDkuNjgyMjdDMC4wMDMxMjkxMyA5LjcwNzIyIDAuMDAyNDg0ODcgOS43MzIwNyAwLjAwMTg0MDY0IDkuNzU3MDJDMC4wMDE4NDA2NCA5Ljc2Mzc0IDAuMDAxODQwNjQgOS43NzA1NSAwLjAwMTg0MDY0IDkuNzc3MjdDMC4wMDEzNDk3OSA5LjgwMDQgMC4wMDA5MjAzMDkgOS44MjM1MSAwLjAwMDU1MjE3NiA5Ljg0NjU4QzAuMDAwNTUyMTc2IDkuODQ5MjUgMC4wMDA1NTIxNzYgOS44NTE5MiAwLjAwMDU1MjE3NiA5Ljg1NDY4VjkuODU1MjRDMC4wMDA1NTIxNzYgOS44NzEwNyAwLjAwMDU1MjE5OSA5Ljg4NTg5IDAgOS45MDAwNkMwIDkuOTA2OTcgMCA5LjkxMzg3IDAgOS45MjA4N0MwIDkuOTQzNDIgMCA5Ljk2NDEzIDAgOS45ODQwMVY5Ljk4Nzc5QzAuMDAxODQwNjYgMTAuMDU4NSAwLjA1MDM0MjEgMTAuMjIzMiAwLjQ1OTI0NSAxMC4yMjU0SDAuNDc1OTk2QzAuNzY4Mzg1IDEwLjIyNTQgMS40NjM0MiAxMC4xODggMi4yMDUzOSAxMC4xMTY5QzMuNTAwOTQgOS45OTI4NSA2LjAzMjEzIDkuNjY1ODkgOC45NjMwMiA5LjI4NjI3TDkuMzEyNzQgOS4yNDA5OEMxMC4xNDEgOS4xMzM4NCAxMS4zMDA3IDguOTc0MDQgMTIuNTc5OSA4Ljc5MzhDMTIuNzk5MSA4LjkxOTkxIDEzLjA0MjggOS4wMzA0NyAxMy4yOTg3IDkuMTI3NzZDMTEuOTk4OCA5LjQyMjMyIDEwLjY4MTUgOS43MjM0MiA5LjQyMjE3IDEwLjAyNjhDOC40MTQ1OSAxMC4yNjk2IDcuNDM4NTggMTAuNTE4MiA2LjUyIDEwLjc2MDVDNS41MzUyNCAxMC44NjUzIDQuNTc2ODEgMTEuMDI1OSAzLjU3MjY0IDExLjI1MThDMi40Njg4OCAxMS41MDA0IDEuNDAzMzIgMTEuODI3IDAuNTcyMzU0IDEyLjE3MjNMMC41NTAzNTggMTIuMTgxNUMwLjM2MjcwMyAxMi4yNTg5IDAuMjg2Nzc1IDEyLjM4MDIgMC4zMjQ1MDkgMTIuNTQxOVYxMi41NDMxTDAuMzI0OTY5IDEyLjU0NDlMMC4zMzI0MjQgMTIuNTcyNVYxMi41NzM3TDAuMzQ1NCAxMi42MjI3VjEyLjYyMzRDMC4zNTQ3ODggMTIuNjU3OSAwLjM2NDM1OSAxMi42OTI0IDAuMzc0MTE1IDEyLjcyNjhDMC4zNzcwNiAxMi43Mzc0IDAuMzgwMDk3IDEyLjc0OCAwLjM4MzMxOCAxMi43NTg2QzAuMzkxMjMzIDEyLjc4NjIgMC4zOTkyNzEgMTIuODEzOCAwLjQwNzQzMSAxMi44NDE0TDAuNDE0NDI1IDEyLjg2NTRDMC40MjQ1NDkgMTIuODk5MiAwLjQzNDgyNiAxMi45MzMgMC40NDUyNTYgMTIuOTY2NkwwLjQ1NDQ2IDEyLjk5NjNDMC40NjI2NTEgMTMuMDIyNCAwLjQ3MDkzNCAxMy4wNDg0IDAuNDc5MzA5IDEzLjA3NDRMMC40ODIzNDYgMTMuMDgzNkMwLjQ4NDU1NSAxMy4wOTA2IDAuNDg2ODU1IDEzLjA5NzUgMC40ODkwNjQgMTMuMTA0NEMwLjQ5MzM5IDEzLjExNzggMC40OTgyNjggMTMuMTMxIDAuNTAyMzE3IDEzLjE0NDRDMC41MDg3NTkgMTMuMTYzOSAwLjUxNTIwMiAxMy4xODM1IDAuNTIxNzM2IDEzLjIwM0wwLjUzMDM4NyAxMy4yMjgzQzAuNTM5MzQ1IDEzLjI1NDUgMC41NDgzNjQgMTMuMjgwNSAwLjU1NzQ0NSAxMy4zMDY2TDAuNTY5MzE3IDEzLjM0MDNDMC41Nzk5OTMgMTMuMzcwNCAwLjU5MDc2MSAxMy40MDA0IDAuNjAxNjIxIDEzLjQzMDNMMC42MDk5OTYgMTMuNDUzMkMwLjYyMDQ4OCAxMy40ODE3IDAuNjMxMTMzIDEzLjUxMDIgMC42NDE5MzEgMTMuNTM4N0MwLjY0NjQ0MSAxMy41NTA3IDAuNjUxMTM1IDEzLjU2MjYgMC42NTU1NTIgMTMuNTc0NEMwLjY1OTk3IDEzLjU4NjMgMC42NjQ3NTYgMTMuNTk4MiAwLjY2OTI2NSAxMy42MTAxTDAuNjgzMzQ2IDEzLjY0NjlMMC42ODc5NDggMTMuNjU4NkMwLjY5MDE1NyAxMy42NjQ1IDAuNjkyNDU3IDEzLjY3MDMgMC42OTQ3NTggMTMuNjc2MUMwLjcwNjk5OSAxMy43MDcyIDAuNzE5NTE1IDEzLjczODEgMC43MzIwMzIgMTMuNzY5TDAuNzQ0NzMyIDEzLjc5OTlMMC43NDcxMjUgMTMuODA1OEMwLjc1NjMyOCAxMy44MjczIDAuNzY0OTggMTMuODQ4OCAwLjc3Mzk5OSAxMy44NzAyTDAuNzc3NzcyIDEzLjg3OTRMMC43ODk0NiAxMy45MDdDMC44MDIyMjIgMTMuOTM3IDAuODE1MDc2IDEzLjk2NjggMC44MjgwMjIgMTMuOTk2NkwwLjgzOTM0MiAxNC4wMjIzTDAuODQ0MzEyIDE0LjAzMzRDMC44NTM1MTYgMTQuMDUzNiAwLjg2MjE2NyAxNC4wNzM3IDAuODcxMTg2IDE0LjA5MzlDMC44Nzc0NDQgMTQuMTA3OCAwLjg4MzYxIDE0LjEyMTUgMC44ODk1OTMgMTQuMTM1NUMwLjg5OTkgMTQuMTU4MiAwLjkxMDMgMTQuMTgwOSAwLjkyMDc5MiAxNC4yMDM0QzAuOTI5MTk3IDE0LjIyMTggMC45Mzc2MzQgMTQuMjM5OSAwLjk0NjEwMSAxNC4yNTc1QzAuOTU1MzA0IDE0LjI3NzIgMC45NjQ1MDggMTQuMjk2OCAwLjk3MzcxMSAxNC4zMTYzQzAuOTgwODg5IDE0LjMzMTQgMC45ODgxMjkgMTQuMzQ2NCAwLjk5NTQzMSAxNC4zNjE0QzEuMDAzODEgMTQuMzc4OCAxLjAxMjM2IDE0LjM5NjIgMS4wMjA5MiAxNC40MTM1QzEuMDMwOTYgMTQuNDM0IDEuMDQxMTcgMTQuNDU0NCAxLjA1MTM5IDE0LjQ3NDlDMS4wNjE2IDE0LjQ5NTMgMS4wNzIgMTQuNTE2IDEuMDgyNDkgMTQuNTM2NUMxLjA5MDY1IDE0LjU1MjcgMS4wOTg5MSAxNC41Njg4IDEuMTA3MjUgMTQuNTg0OEMxLjExNDg5IDE0LjU5OTUgMS4xMjI0NCAxNC42MTQxIDEuMTMwMDggMTQuNjI4N0wxLjEzMjM4IDE0LjYzMzFDMS4xNDAyMyAxNC42NDgxIDEuMTQ4MDggMTQuNjYzMSAxLjE1NTk0IDE0LjY3OEMxLjE2ODg4IDE0LjcwMjYgMS4xODE4OSAxNC43MjY4IDEuMTk0OTYgMTQuNzUwOEwxLjIyNTE1IDE0LjgwNjFDMS4yMzIwNSAxNC44MTg1IDEuMjM4ODYgMTQuODMwOSAxLjI0NTc2IDE0Ljg0MjlDMS4yNTU2NCAxNC44NjA5IDEuMjY1NTggMTQuODc4NyAxLjI3NTU4IDE0Ljg5NjVMMS4yODc5MSAxNC45MTgzTDEuMjkzNDMgMTQuOTI3NUMxLjMxMjM5IDE0Ljk2MDkgMS4zMzE0NCAxNC45OTQxIDEuMzUwMjIgMTUuMDI2M0wxLjM2NzA2IDE1LjA1NTJDMS4zNzgyIDE1LjA3NDMgMS4zODk1MiAxNS4wOTM0IDEuNDAwODQgMTUuMTEyNEwxLjQxNjExIDE1LjEzNzhDMS40Mzk5NSAxNS4xNzc2IDEuNDYzODggMTUuMjE3IDEuNDg3NDQgMTUuMjU1TDEuNDkzNyAxNS4yNjUyQzEuNTA2NCAxNS4yODU3IDEuNTE5MTkgMTUuMzA2MSAxLjUzMjA4IDE1LjMyNjVMMS41NDQ3OCAxNS4zNDY2QzEuNTQ2MzQgMTUuMzQ5MSAxLjU0OCAxNS4zNTE2IDEuNTQ5NTYgMTUuMzU0MUMxLjU1MTEzIDE1LjM1NjcgMS41NTM0MyAxNS4zNiAxLjU1NTI3IDE1LjM2MzNDMS41NzA1NSAxNS4zODczIDEuNTg1ODggMTUuNDExMiAxLjYwMTI4IDE1LjQzNUMxLjYwMjIxIDE1LjQzNjUgMS42MDMxMyAxNS40MzggMS42MDQxNCAxNS40Mzk1QzEuNjE4NTkgMTUuNDYxOCAxLjYzMzEzIDE1LjQ4MzkgMS42NDc3NiAxNS41MDZMMS42NDg3NyAxNS41MDc4QzEuNjc1OTIgMTUuNTQ5IDEuNzA0ODIgMTUuNTkxOCAxLjczNjg1IDE1LjYzODhMMS43NDE3MyAxNS42NDU3TDEuNzU2OTEgMTUuNjY4MUwxLjc3NDY4IDE1LjY5MzZMMS43ODY1NSAxNS43MTA3TDEuNzk1MDEgMTUuNzIyOUwxLjgxNDg5IDE1Ljc1MTNDMS44MTU0NSAxNS43NTIgMS44MTU5MSAxNS43NTI3IDEuODE2MzcgMTUuNzUzNEwxLjgxNzkzIDE1Ljc1NTVDMS44MTc5MyAxNS43NTYxIDEuODE4NzYgMTUuNzU2NyAxLjgxOTEzIDE1Ljc1NzJDMS44MzEyOCAxNS43NzQ0IDEuODQzMzMgMTUuNzkxNiAxLjg1NTk0IDE1LjgwODdMMS44Njk1NiAxNS44Mjc2TDEuODgzMjcgMTUuODQ2NkwxLjg5MzQ5IDE1Ljg2MDdDMS45MTI3MyAxNS44ODczIDEuOTMyMjQgMTUuOTE0MSAxLjk1MjAyIDE1Ljk0MDhMMS45NTc5MSAxNS45NDg4TDEuOTY5MDUgMTUuOTYzOUMxLjk4Mjg1IDE1Ljk4MjMgMS45OTY3MiAxNi4wMDA3IDIuMDEwNjUgMTYuMDE5MUMyLjAxNzQ2IDE2LjAyODMgMi4wMjQzNiAxNi4wMzc1IDIuMDMxMTcgMTYuMDQ2N0MyLjA0NTM0IDE2LjA2NTEgMi4wNTk1NSAxNi4wODM1IDIuMDczNzggMTYuMTAxOUwyLjA4ODg4IDE2LjEyMTVDMi4xMjE0NiAxNi4xNjM1IDIuMTU0MDQgMTYuMjA1IDIuMTg1NyAxNi4yNDQ0TDIuMTkwNzYgMTYuMjUwOUMyLjIwNjIyIDE2LjI3MDIgMi4yMjE4NiAxNi4yODk1IDIuMjM3NTEgMTYuMzA4N0wyLjI1NTkyIDE2LjMzMDhDMi4yNzE1IDE2LjM0OTggMi4yODcxNSAxNi4zNjg4IDIuMzAyODUgMTYuMzg3OEwyLjMxNzAzIDE2LjQwNDdDMi4zNjk0OSAxNi40Njc2IDIuNDIzMjMgMTYuNTMwNCAyLjQ3NjcgMTYuNTkxNEwyLjQ5MDIzIDE2LjYwNjhDMi41MDc0NyAxNi42MjY0IDIuNTI0ODQgMTYuNjQ2IDIuNTQyMzIgMTYuNjY1NkwyLjU1NDI5IDE2LjY3ODlDMi42MTE2MiAxNi43NDI4IDIuNjcwMjUgMTYuODA2NSAyLjcyODUxIDE2Ljg2ODFMMi43MzQzIDE2Ljg3NDNDMi43NTM0NSAxNi44OTQ1IDIuNzcyNzEgMTYuOTE0NyAyLjc5MjEgMTYuOTM0OEwyLjgwMTMxIDE2Ljk0NDZDMi44MzM0MiAxNi45Nzc5IDIuODY1NzMgMTcuMDExMSAyLjg5ODg2IDE3LjA0NDJMMi45MDIzNiAxNy4wNDc3QzIuOTUxNzggMTcuMDk3NSAzLjAwMTc1IDE3LjE0NjkgMy4wNTE4MiAxNy4xOTVMMy4wNTgyNiAxNy4yMDExQzMuMDYyODYgMTcuMjA1NiAzLjA2NzQ3IDE3LjIxMDMgMy4wNzIzNCAxNy4yMTQ2QzMuMDg4ODIgMTcuMjMwNCAzLjEwNTI5IDE3LjI0NjIgMy4xMjE4NiAxNy4yNjE5TDMuMTMxMDYgMTcuMjcwNUwzLjEzMzA4IDE3LjI3MjVDMy4xNDg3MyAxNy4yODczIDMuMTY0NTYgMTcuMzAyIDMuMTgwMyAxNy4zMTY3QzMuMTg5NSAxNy4zMjU5IDMuMTk4NyAxNy4zMzQxIDMuMjA4MzcgMTcuMzQyOEMzLjIxOTIzIDE3LjM1MjkgMy4yMzAxOCAxNy4zNjI5IDMuMjQxMDQgMTcuMzcyOUwzLjI2NDQyIDE3LjM5NDNDMy4yODMyOCAxNy40MTE1IDMuMzAyMTUgMTcuNDI4NiAzLjMyMDgzIDE3LjQ0NTRMMy4zMjEzOCAxNy40NDU5TDMuMzI0NDIgMTcuNDQ4NkwzLjMyNjU0IDE3LjQ1MDZDMy4zNDQ5NSAxNy40NjcyIDMuMzYzODEgMTcuNDgzOSAzLjM4MzE0IDE3LjUwMDdMMy40MDU1OSAxNy41MjA2TDMuNDQxNjcgMTcuNTUyQzMuNDU3NTkgMTcuNTY1OCAzLjQ3MzUyIDE3LjU3OTYgMy40ODk0NCAxNy41OTMzQzMuNDk4NjQgMTcuNjAxNCAzLjUwNzg0IDE3LjYwOTUgMy41MTc2OSAxNy42MTc1TDMuNTI0NjkgMTcuNjIzNEwzLjUyOTkzIDE3LjYyOEwzLjUzMjc4IDE3LjYzMDVDMy41NTExOSAxNy42NDY0IDMuNTcwMzMgMTcuNjYyMSAzLjU4OTIgMTcuNjc3OEwzLjYwMDYxIDE3LjY4NzFMMy42MDIyNyAxNy42ODgzQzMuNjA2MzIgMTcuNjkxNyAzLjYxMDU1IDE3LjY5NDggMy42MTQ4OCAxNy42OTc1QzMuNjI4MjUgMTcuNzA2NiAzLjY0MjcyIDE3LjcxNCAzLjY1Nzk1IDE3LjcxOTVIMy42NTg2OUgzLjY1OTQyQzMuNjk5NjIgMTcuNzMyMiAzLjc0MTY5IDE3LjczODEgMy43ODM4NSAxNy43MzY4QzMuODcxMDEgMTcuNzM2OCAzLjk5MTIgMTcuNzIwNSA0LjE2Mjc1IDE3LjY4ODFDNC43MDgxNCAxNy41ODQ4IDcuMzgyMzUgMTcuMTEyIDEwLjUwMTMgMTYuNjg0N0MxMS40MzE2IDE2LjU1NzEgMTIuMzgwMSAxNi40NjM4IDEzLjI0NjEgMTYuMzk1N0MxMy4wNTY3IDE2LjYzNjkgMTIuOTU4OCAxNi44ODExIDEyLjk1NDYgMTcuMTI1OEMxMi45NDY4IDE3LjU3NTggMTMuNDc0MSAxNy45MjU4IDEzLjkyMzggMTguMTUzMkMxMy4zMjgzIDE4LjM0NzYgMTIuNjk5NyAxOC41MTgxIDEyLjA2ODkgMTguNjQyNkMxMS42NTQ3IDE4LjcyNDQgMTEuMjQ5MiAxOC43OTQyIDEwLjg1NCAxOC44NTM4QzEwLjg0OTggMTguODI2NCAxMC44NDMzIDE4Ljc5OTMgMTAuODM0NiAxOC43NzNDMTAuNzU4MiAxOC41NDE3IDEwLjQ0NyAxOC4zODA0IDkuOTU4MDggMTguMzE4NEM5LjQ4NDQ4IDE4LjI1ODUgOC44Nzk1NCAxOC4yOTQ3IDguMjU0NzMgMTguNDIwNEM3LjQxMTk4IDE4LjU4OTkgNi44Nzc1NSAxOC44NDkyIDYuNzMzNzkgMTguOTI0NkM2LjUxMjkxIDE5LjA0MDQgNi40MjU4NSAxOS4xMjc4IDYuNDMyMTEgMTkuMjI2NkM2LjQzODkyIDE5LjMzMzggNi41NTU1MiAxOS4zOTEgNi42NTc3NyAxOS40MjkxTDYuNjYwMjYgMTkuNDNMNi43MDQzNCAxOS40NDU0TDYuNzEwODcgMTkuNDQ3N0w2Ljc1Mzc2IDE5LjQ2MjVDNi44MjMwNiAxOS40ODYzIDYuODkyNzMgMTkuNTA5MyA2Ljk2MDU2IDE5LjUzMDlMNi45NjU4MSAxOS41MzI2TDcuMDE4NzIgMTkuNTQ5MUg3LjAxOTU1QzcuMDU3MzggMTkuNTYwOSA3LjA5NjAzIDE5LjU3MjcgNy4xMzUxNSAxOS41ODQ0TDcuMTQwNzYgMTkuNTg2MUw3LjE0NTA5IDE5LjU4NzRMNy4xNTIwOCAxOS41ODk1TDcuMTc2MzggMTkuNTk2N0M3LjIwMDU4IDE5LjYwMzggNy4yMjQ3OSAxOS42MTA5IDcuMjQ4OTkgMTkuNjE3OEw3LjI2MzA3IDE5LjYyMTlDNy4zMjU5IDE5LjYzOTcgNy4zODg5NyAxOS42NTY5IDcuNDUyMjkgMTkuNjczM0w3LjQ2MTUgMTkuNjc1OEw3LjQ3NTc2IDE5LjY3OTZMNy40NzgwNiAxOS42ODAxQzcuNTAzNzEgMTkuNjg2OCA3LjUyOTM5IDE5LjY5MzMgNy41NTUwOSAxOS42OTk3TDcuNTc3NzMgMTkuNzA1NUw3LjU5MTM2IDE5LjcwODhMNy41OTgxNyAxOS43MTA1TDcuNjY0OCAxOS43MjY2TDcuNjc2MzkgMTkuNzI5NUw3LjcwNDY1IDE5LjczNjFDNy43MDk4IDE5LjczNzQgNy43MTUwNSAxOS43Mzg1IDcuNzIwMjkgMTkuNzM5N0w3Ljc3NjA3IDE5Ljc1MjZMNy43OTM4MyAxOS43NTY2TDcuODE3MyAxOS43NjE5QzcuODI3NDIgMTkuNzY0MiA3LjgzNzY0IDE5Ljc2NjMgNy44NDc4NSAxOS43Njg1QzcuODYxNjYgMTkuNzcxNSA3Ljg3NTQ2IDE5Ljc3NDcgNy44ODk0NSAxOS43Nzc3TDcuODk3IDE5Ljc3OTRMNy45MzY5NCAxOS43ODc4TDcuOTgxNjcgMTkuNzk3TDguMDA3MzUgMTkuODAyM0g4LjAwOTI4TDguMDM5MSAxOS44MDg0QzguMDY2NjQgMTkuODEzOCA4LjA5NDI1IDE5LjgxOTIgOC4xMjE5MyAxOS44MjQ0TDguMTczNTYgMTkuODMzNkw4LjIxNjcyIDE5Ljg0MTVMOC4yNDE1NyAxOS44NDU5TDguMjUxNDIgMTkuODQ3N0w4LjI3MjY4IDE5Ljg1MTRMOC4yOTYzMyAxOS44NTU1TDguMzY1NzIgMTkuODY3MUw4LjM4MjkzIDE5Ljg2OThMOC40MTU1MSAxOS44NzUxTDguNDQzMTIgMTkuODc5NUM4LjQ1OTE0IDE5Ljg4MjEgOC40NzUxNSAxOS44ODQ1IDguNDkxMjUgMTkuODg2OUw4LjUwMDQ2IDE5Ljg4ODNMOC41MTA2NyAxOS44ODk4TDguNTIyODIgMTkuODkxNkM4LjU1MzUgMTkuODk2IDguNTgzODcgMTkuOTAwNCA4LjYxMzk0IDE5LjkwNDZMOC42MzU1NiAxOS45MDc2TDguNjY4ODggMTkuOTEyMUw4LjY3NDc3IDE5LjkxMjlMOC43NDA5NCAxOS45MjE0TDguNzUxMTYgMTkuOTIyN0w4Ljc1Nzg4IDE5LjkyMzVMOC44MDEwNCAxOS45Mjg2QzguODc1NzcgMTkuOTM3NSA4Ljk1MDU2IDE5Ljk0NTYgOS4wMjU0MiAxOS45NTI5QzkuMDUwNDUgMTkuOTU1MyA5LjA3NTQ4IDE5Ljk1NzcgOS4xMDA2MSAxOS45NTk5TDkuMTQ0MzIgMTkuOTYzN0w5LjE1NDE3IDE5Ljk2NDZMOS4xNTgyMiAxOS45NjVDOS4xODcwMyAxOS45Njc0IDkuMjE2MDIgMTkuOTY5NiA5LjI0NTAxIDE5Ljk3MTdMOS4yNTI2NSAxOS45NzI0QzkuNTAwMDMgMTkuOTkwOCA5Ljc1MDI3IDIwIDkuOTk4MTEgMjBDMTAuNzM0NSAyMC4wMDAyIDExLjQ2ODggMTkuOTE5NiAxMi4xODc2IDE5Ljc1OTVDMTIuODg0IDE5LjYwMzcgMTMuNTYxNyAxOS4zNzM1IDE0LjIwODkgMTkuMDcyN0MxNC40NjU4IDE4Ljk1MzMgMTQuNzE3NiAxOC44MjI3IDE0Ljk2NDMgMTguNjgxMUMxNC45NjYgMTguNjgwMyAxNC45Njc2IDE4LjY3OTYgMTQuOTY5MiAxOC42Nzg3QzE1LjEwMTQgMTguNjAyOSAxNS4yMzE1IDE4LjUyNDEgMTUuMzU5NiAxOC40NDIzTDE1LjM2NDEgMTguNDM5NUMxNS4zOTY2IDE4LjQxODggMTUuNDI5IDE4LjM5NzkgMTUuNDYxMyAxOC4zNzY4TDE1LjQ4MjggMTguMzYyNkMxNS41MDk1IDE4LjM0NTEgMTUuNTM1OSAxOC4zMjc1IDE1LjU2MjMgMTguMzA5OUwxNS41OTEgMTguMjkwNkMxNS42MTU1IDE4LjI3NDEgMTUuNjM5OCAxOC4yNTc0IDE1LjY2NCAxOC4yNDA3QzE1LjY4NjUgMTguMjI1MiAxNS43MDkgMTguMjA5NSAxNS43MzE0IDE4LjE5MzdDMTUuNzQ4NSAxOC4xODE3IDE1Ljc2NTYgMTguMTY5OSAxNS43ODI2IDE4LjE1NzhDMTUuODA1NiAxOC4xNDE0IDE1LjgyODUgMTguMTI1IDE1Ljg1MTIgMTguMTA4NUwxNS44NzM2IDE4LjA5MjNDMTUuODk4NiAxOC4wNzM4IDE1LjkyMzYgMTguMDU1NCAxNS45NDg0IDE4LjAzN0wxNS45NTkgMTguMDI5MUMxNS45NzU5IDE4LjAxNjYgMTUuOTkzIDE4LjAwNDEgMTYuMDA5OCAxNy45OTE0QzE2LjU2NzIgMTcuNTcxMiAxNy4wNzk1IDE3LjA5NDIgMTcuNTM4MyAxNi41NjgyQzE3LjU2MDYgMTYuNTQyNSAxNy41ODI5IDE2LjUxNjcgMTcuNjA1IDE2LjQ5MDhMMTcuNjExMyAxNi40ODM1QzE3LjYzMjUgMTYuNDU4NSAxNy42NTM2IDE2LjQzMzUgMTcuNjc0NSAxNi40MDg2TDE3LjY4MjkgMTYuMzk4NkMxNy43MDM3IDE2LjM3MzYgMTcuNzI0NCAxNi4zNDg1IDE3Ljc0NSAxNi4zMjMzTDE3Ljc1MjQgMTYuMzE0MUMxNy43NzM1IDE2LjI4ODQgMTcuNzk0MyAxNi4yNjI1IDE3LjgxNDkgMTYuMjM2NkwxNy44MTkgMTYuMjMxNkMxNy44OTYxIDE2LjEzNSAxNy45NzI2IDE2LjAzNTMgMTguMDQ2NCAxNS45MzU0TDE4LjA0OTkgMTUuOTMwNkMxOC4xMjM1IDE1LjgzMDggMTguMTk2MiAxNS43MjgxIDE4LjI2NTkgMTUuNjI2M0wxOC4yNjY5IDE1LjYyNDlMMTguMjY4OSAxNS42MjJDMTguMjg4IDE1LjU5NCAxOC4zMDcgMTUuNTY1OCAxOC4zMjU3IDE1LjUzNzZMMTguMzMxMSAxNS41Mjk1QzE4LjM0OTUgMTUuNTAxNyAxOC4zNjc5IDE1LjQ3MzkgMTguMzg2MyAxNS40NDU5TDE4LjM5MTcgMTUuNDM3NUMxOC40MTAxIDE1LjQwOTIgMTguNDI4NSAxNS4zODA3IDE4LjQ0NjkgMTUuMzUyTDE4LjQ1IDE1LjM0NzJDMTguNjA0MSAxNS4xMDQgMTguNzQ5NSAxNC44NTEyIDE4Ljg4MjUgMTQuNTk1MUwxOC44ODM2IDE0LjU5M0wxOC44ODQyIDE0LjU5MTlDMTguOTAwMiAxNC41NjEyIDE4LjkxNiAxNC41MzAzIDE4LjkzMTYgMTQuNDk5MUwxOC45MzQ2IDE0LjQ5MzNDMTguOTUwNCAxNC40NjIgMTguOTY1OSAxNC40MzA3IDE4Ljk4MTUgMTQuMzk5MUwxOC45ODMxIDE0LjM5NTZDMTkuMDU3OSAxNC4yNDMzIDE5LjEyOSAxNC4wODc5IDE5LjE5NjEgMTMuOTMxMUMxOS4yMDA4IDEzLjkyMDMgMTkuMjA1MyAxMy45MDk1IDE5LjIxMDEgMTMuODk4N0MxOS4yMTY1IDEzLjg4MzUgMTkuMjIyOCAxMy44NjgzIDE5LjIyOTEgMTMuODUyN0MxOS4yMzY3IDEzLjgzNDMgMTkuMjQ0MyAxMy44MTYxIDE5LjI1MiAxMy43OThDMTkuMjU4NyAxMy43ODE3IDE5LjI2NTIgMTMuNzY1NCAxOS4yNzE3IDEzLjc0OTFDMTkuMjc4MyAxMy43MzI5IDE5LjI4NTYgMTMuNzE1MiAxOS4yOTI0IDEzLjY5ODFDMTkuMjk5OSAxMy42NzkyIDE5LjMwNzMgMTMuNjYwMyAxOS4zMTQ3IDEzLjY0MTRDMTkuMzE5OSAxMy42MjgyIDE5LjMyNTEgMTMuNjE1IDE5LjMzMDIgMTMuNjAxOFYxMy42MDExQzE5LjMzMTQgMTMuNTk3OSAxOS4zMzI3IDEzLjU5NDcgMTkuMzM0IDEzLjU5MTlDMTkuMzM0IDEzLjU5MDggMTkuMzM0OCAxMy41ODk2IDE5LjMzNTIgMTMuNTg4NEMxOS4zNTcgMTMuNTIyOSAxOS4zMzc1IDEzLjQ3NTkgMTkuMzE3NSAxMy40NDhDMTkuMjU5IDEzLjM2NzEgMTkuMTIxMiAxMy4yODgxIDE4LjE1NTYgMTMuMjg4MUMxOC4xNDE5IDEzLjI4ODEgMTYuNzA3MyAxMy4yOTUyIDE0LjAzOTYgMTMuNTUxMUMxMi45NjgyIDEzLjY1MzkgMTEuNzE0NyAxMy44MDAyIDEwLjQ1NTIgMTMuOTYxNEMxMC43OTU3IDEzLjY5NDUgMTEuMDc2OCAxMy40NDcyIDExLjI4MDUgMTMuMjAwOUMxMS40MjIgMTMuMDI5NyAxMS41MjI3IDEyLjg2MzMgMTEuNTg2MyAxMi42OTU4QzEyLjg4ODYgMTIuMzg4OCAxNC4yNDgzIDEyLjA3OTkgMTUuNTMwNyAxMS44MDQ0QzE3LjU2NjUgMTEuMzY3MSAxOS4wNjg3IDExLjAxMjEgMTkuNTQ5MiAxMC44NTQ5QzE5LjYzOTYgMTAuODI1NCAxOS44MTgxIDEwLjc1MTIgMTkuOTEzNCAxMC42NjA1TDE5LjkxNCAxMC42NTk4QzE5Ljk0OTcgMTAuNjI1MyAxOS45NzM4IDEwLjU4MDUgMTkuOTgzMSAxMC41MzE2QzE5Ljk4NDkgMTAuNTI1NiAxOS45ODYxIDEwLjUxOTUgMTkuOTg2NSAxMC41MTMyVjEwLjUxMjdWMTAuNTExNEMxOS45ODY1IDEwLjUwODQgMTkuOTg2NSAxMC41MDU1IDE5Ljk4NjUgMTAuNTAyMkMxOS45ODY1IDEwLjUwMTMgMTkuOTg2NSAxMC41MDA0IDE5Ljk4NjUgMTAuNDk5NUMxOS45OTA1IDEwLjQxODIgMTkuOTkzNyAxMC4zMzYgMTkuOTk1NyAxMC4yNTQ5VjEwLjIzOTZDMTkuOTk2NSAxMC4yMDQ5IDE5Ljk5NzEgMTAuMTcwNiAxOS45OTc2IDEwLjEzNjRMMTkuOTk5MyAxMC4xMjI4Wk03LjUxNTYxIDEuNzI2ODNDNy4xMDc4MSAxLjgzNzI5IDYuNTY2NjYgMS44OTc2OCA2LjAzMDg0IDEuODkzMTdDNS42MTE3MiAxLjg4OTY3IDUuMDQyODYgMS44MzMyNCA0LjcxNjYxIDEuNzc4MUM1LjIyODk2IDEuNjgwNzIgNi41NTcyNyAxLjQ0OTIxIDguMjQwNTYgMS4zMTUwOUM4LjEyMTU2IDEuNTMyNjEgNy43NDgxOCAxLjY2NDA1IDcuNTE1NjEgMS43MjY4M1pNMTAuMTQ2NSAyLjI5NzU0QzExLjM2MzEgMS44NjkyMyAxMS45MzE5IDEuNDkyNjYgMTIuMTk1OCAxLjI0ODE3QzEzLjM0MDkgMS4zMDg5MiAxNC4yMzE1IDEuNDQ5NjcgMTQuODU0NyAxLjY2OTIxQzE1LjA3NSAxLjc0NjgxIDE1LjIxMSAxLjgzNDA3IDE1LjIzNzUgMS45MTQ4OUMxNS4yNDIyIDEuOTMyNDggMTUuMjQ1NSAxLjk1MDQzIDE1LjI0NzMgMS45Njg1NlYxLjk3MTg3QzE1LjI0NzMgMS45NzM3MSAxNS4yNDczIDEuOTc1NDYgMTUuMjQ3OCAxLjk3NzQ4QzE1LjI2MDUgMi4xNjI5NyAxNS4xNzMgMi40NTcyNSAxNC42ODQgMi44MDU5NEMxNC42NzI5IDIuODEzODUgMTQuNjYxNyAyLjgyMTc3IDE0LjY1MDQgMi44Mjk2OUwxNC42MzkxIDIuODM3NDJMMTQuNjE1NCAyLjg1MzYyTDE0LjYwMTYgMi44NjI4MkwxNC41NzkzIDIuODc3NzRMMTQuNTY0MiAyLjg4NzU5TDE0LjU0MTkgMi45MDIyMkwxNC41MjYxIDIuOTEyMzVMMTQuNTAzIDIuOTI2OThMMTQuNDg3IDIuOTM3MTFMMTQuNDYyNCAyLjk1MjM5TDE0LjQ0NjkgMi45NjE1OUwxNC40MTg3IDIuOTc4NzJMMTQuNDA1NyAyLjk4NjYzQzE0LjM5MTggMi45OTUwNCAxNC4zNzc3IDMuMDAzNDUgMTQuMzYzMiAzLjAxMTg1TDE0LjM1OTUgMy4wMTQwNkMxNC4zNDY0IDMuMDIxNzMgMTQuMzMzMSAzLjAyOTQ0IDE0LjMxOTYgMy4wMzcxN0wxNC4zMDMgMy4wNDYzN0wxNC4yNzQ4IDMuMDYyNDhMMTQuMjU2NCAzLjA3MjUxQzE0LjI0NzIgMy4wNzc3NiAxNC4yMzggMy4wODMxIDE0LjIyOCAzLjA4ODM1TDE0LjIwODkgMy4wOTkwM0wxNC4xODA3IDMuMTE0NDlMMTQuMTYwNiAzLjEyNTM1QzE0LjE1MTQgMy4xMzA2IDE0LjE0MTMgMy4xMzU3NSAxNC4xMzE1IDMuMTQxTDE0LjExMTQgMy4xNTE2OEwxNC4wODAzIDMuMTY4MTVMMTQuMDYxMiAzLjE3ODE5TDE0LjAyNTUgMy4xOTY2TDE0LjAwOTggMy4yMDQ2MUMxMy45OTI1IDMuMjEzNTcgMTMuOTc1MSAzLjIyMjQ5IDEzLjk1NzQgMy4yMzEzOUMxMy4xNTc1IDMuNjM1OTUgMTEuOTk1NiA0LjA3NzUyIDEwLjUwMzkgNC41NDM5NEMxMC4zMzA4IDQuNTk4MTkgMTAuMTU3NCA0LjY1MjA0IDkuOTgzNTcgNC43MDU0OUMxMC4wNTI3IDQuNjEzNjUgMTAuMTEzNCA0LjUxNTczIDEwLjE2NSA0LjQxMjk1QzEwLjMxMjIgNC4xMTU2MyAxMC4zMzk4IDMuODIxOTkgMTAuMjQ4NCAzLjU0MDMxQzEwLjE2MzUgMy4yNzg4IDEwLjAxMjQgMy4wODg2MiA5Ljc4NjQ0IDIuOTU4OTJDOS41NzQwMyAyLjgzNjk2IDkuMjkyOTYgMi43Njg3NSA4LjkyNzAzIDIuNzUwNDNDOC44ODkxOCAyLjc0ODU5IDguODUwNDkgMi43NDcyNCA4LjgxMDk4IDIuNzQ2MzhDOS4zMTI3NCAyLjU4NDgzIDkuNzY5NSAyLjQzMDEgMTAuMTQ2NSAyLjI5NzM2VjIuMjk3NTRaTTkuMjkwNTYgOS4wODU3TDguOTQwODQgOS4xMzA5OEM2LjAxMTMzIDkuNTA5OTUgMy40ODEzNCA5LjgzNzI5IDIuMTg4MzYgOS45NjEwOUMxLjQzNjkxIDEwLjAzMyAwLjczNTgwNSAxMC4wNzA0IDAuNDU4MTQxIDEwLjA2ODhDMC4yMzU2OTcgMTAuMDY3NiAwLjE1ODg0OSAxMC4wMTM2IDAuMTU0NDMyIDkuOTg1OTVDMC4xNTcyODUgOS45NzAyMSAwLjE5MzU0NiA5Ljg3ODUyIDAuNjMzMDA0IDkuNjM3NzJDMC45NzUyNzUgOS40NTAyMSAxLjUxNzgxIDkuMTk1MjMgMi4yOTE3MiA4Ljg1ODI0QzQuMDE4NDQgOC4xMDYxOSA1LjgzNzg1IDcuMjYxODEgNy4wNjAxNCA2LjY4NTg1QzcuMTIyNzIgNi42NTY0IDcuMTg0MTEgNi42MjcwMyA3LjI0NDc2IDYuNTk3NzZDNy42MjcyNSA2LjU0NzU2IDguMDI0MzEgNi40OTU4IDguNDM1OTQgNi40NDI0N0M5LjgzNzQyIDYuMjYxMjMgMTEuMjE1MyA2LjA1ODI2IDEyLjU1MzUgNS44NTg2OUMxMi4yNTU2IDYuMDQ0MjYgMTIuMDIzNiA2LjI0OTU0IDExLjg2MjIgNi40NzA2NEMxMS42MTY1IDYuODA3MjcgMTEuNTI2NyA3LjE4ODYzIDExLjU5NTMgNy42MDQ3OUMxMS42NjcyIDguMDQwNTYgMTEuOTYwMiA4LjM4NzIyIDEyLjM3MTMgOC42NjUyMUMxMS4xNjYxIDguODM0MTIgMTAuMDc4NiA4Ljk4MzYxIDkuMjkwNjYgOS4wODU1MUw5LjI5MDU2IDkuMDg1N1pNMTQuMTQzNiAxOC45MzY1QzEzLjUwNjYgMTkuMjMyNiAxMi44Mzk2IDE5LjQ1OTIgMTIuMTU0MSAxOS42MTI1QzExLjQ0NjUgMTkuNzcwMSAxMC43MjM3IDE5Ljg0OTUgOS45OTg3NiAxOS44NDkyQzkuODQ5MTEgMTkuODQ5MiA5LjY5ODU1IDE5Ljg0NTYgOS41NDc4IDE5LjgzODlDOS42MDU4NyAxOS44MTY0IDkuNjY5MTkgMTkuNzkyOSA5LjczMTg2IDE5Ljc3MDFDOS45ODExOCAxOS42Nzg2IDEwLjI5MTQgMTkuNTY0NiAxMC41MTg5IDE5LjQxNTVDMTAuNzA1MSAxOS4yOTM1IDEwLjgxNTEgMTkuMTYwMyAxMC44NDgzIDE5LjAxNzZDMTEuMjU0OSAxOC45NTY3IDExLjY3MjkgMTguODg1MSAxMi4wOTkyIDE4LjgwMDlDMTIuNzQ4IDE4LjY3MjcgMTMuNDM5NyAxOC40ODU2IDE0LjEyNTcgMTguMjU1QzE0LjIxMyAxOC4yOTUgMTQuMjkyNSAxOC4zMjk0IDE0LjM1ODIgMTguMzU3OEMxNC40MDQyIDE4LjM3NzggMTQuNDQ0IDE4LjM5NDYgMTQuNDcyMSAxOC40MDhDMTQuNjU5NSAxOC40OTUxIDE0Ljc1NzQgMTguNTU1OCAxNC44MDc5IDE4LjU5NTlDMTQuNTkwOCAxOC43MTc4IDE0LjM2OTQgMTguODMxMyAxNC4xNDM3IDE4LjkzNjRMMTQuMTQzNiAxOC45MzY1Wk0xNC4wNTQ5IDEzLjcxMjdDMTYuMjg3MyAxMy40OTg2IDE3LjgwMTUgMTMuNDUwNCAxOC4xNTU5IDEzLjQ1MDRDMTguNTI2OSAxMy40NTA0IDE4Ljc5MjggMTMuNDYxNyAxOC45Njg2IDEzLjQ4NDhDMTkuMTMxIDEzLjUwNjEgMTkuMTc2OCAxMy41MzM2IDE5LjE4NzggMTMuNTQyNlYxMy41NDM2TDE5LjE4NTMgMTMuNTVDMTkuMTI5MyAxMy42Nzc4IDE4Ljk3NjIgMTMuNzQ0MiAxOC42ODg4IDEzLjg1OTZDMTguNjE0NCAxMy44ODk0IDE4LjQzMTEgMTMuOTUwNCAxOC4xNzc2IDE0LjAzNDVDMTcuNjA0NCAxNC4yMjUgMTYuNjQ1IDE0LjU0MzggMTUuNjI4MiAxNC45NDA4QzE0LjgxNDIgMTUuMjU4OCAxNC4xNzQ5IDE1LjU5NDQgMTMuNzI4MSAxNS45MzczQzEzLjYwOTcgMTYuMDI3MiAxMy40OTggMTYuMTI1NyAxMy4zOTM5IDE2LjIzMThDMTIuNDgyNyAxNi4zMDEgMTEuNDcxIDE2LjM5ODMgMTAuNDgwMyAxNi41MzQxQzcuMzU4MTQgMTYuOTYyMSA0LjY4MDE2IDE3LjQzNTUgNC4xMzM5NSAxNy41Mzg5QzQuMDkxNTIgMTcuNTQ2OSA0LjA1MzIzIDE3LjU1MzcgNC4wMTg0NCAxNy41NTk0QzQuNTc4NzQgMTcuMzQ2MiA1LjI5NjUxIDE3LjA1MzEgNi41MTA4OSAxNi40NTE3QzcuODAwNjQgMTUuODEyOSA4LjMxOTUyIDE1LjUzODggOS43NTA0NSAxNC40OTQ0QzkuOTEwODQgMTQuMzc3NCAxMC4wNjMzIDE0LjI2NDcgMTAuMjA3OCAxNC4xNTY2QzExLjU1NTIgMTMuOTgyMyAxMi45MDkzIDEzLjgyMjQgMTQuMDU1IDEzLjcxMjVMMTQuMDU0OSAxMy43MTI3Wk0xOS41MDA5IDEwLjcxMTlDMTguNzk2MSAxMC45NDIgMTYuMjU5IDExLjQ5MzYgMTUuNDk4MiAxMS42NTcxQzE0LjI0MzkgMTEuOTI2NiAxMi45MTU1IDEyLjIyNzggMTEuNjM5MSAxMi41Mjg1QzExLjY4NjYgMTIuMzE5NSAxMS42NzkzIDEyLjEwNSAxMS42MTcgMTEuODc0MkMxMS41NjUzIDExLjY4MjYgMTEuNDU3NiAxMS41MDQxIDExLjI5NzEgMTEuMzQzOEMxMS4xNDA2IDExLjE4NzMgMTAuOTM2NCAxMS4wNTEzIDEwLjY5MTIgMTAuOTQwMkMxMC4xODM0IDEwLjcxMDEgOS41Mjc1NSAxMC41OTc4IDguNzk0NjkgMTAuNjE1OEM4LjMzNDUyIDEwLjYyNzIgNy44ODk3MyAxMC42NDc3IDcuNDU0MjMgMTAuNjc4MUM4LjEwMTg2IDEwLjUxMTQgOC43NzIyMyAxMC4zNDM3IDkuNDU3MTQgMTAuMTc4NkMxMC43OTMxIDkuODU2NDMgMTIuMTk0OSA5LjUzNzI5IDEzLjU3MTkgOS4yMjU3QzE0LjMzMTcgOS40ODA5NiAxNS4xNTgyIDkuNjM0MTMgMTUuNzU4NyA5Ljc0NTQyQzE1Ljg2NjkgOS43NjU0OSAxNS45NjkgOS43ODQzNiAxNi4wNjA1IDkuODAyMDNDMTYuNDQ2NSA5Ljg3NjUgMTYuOTcyNCA5Ljk2MTE4IDE3LjUyOTEgMTAuMDUwNkMxOC4zODAxIDEwLjE4NzcgMTkuMjYwMSAxMC4zMjk1IDE5Ljc0OTggMTAuNDUxOUMxOS44MTkzIDEwLjQ2OTMgMTkuODI5NCAxMC40OTA4IDE5LjgzMDUgMTAuNTAzOEMxOS44Mjc5IDEwLjUyMjQgMTkuODE5MSAxMC41Mzk2IDE5LjgwNTYgMTAuNTUyN0MxOS43NDM3IDEwLjYxMTggMTkuNjAyNSAxMC42Nzg2IDE5LjUwMDggMTAuNzExOUgxOS41MDA5WlwiLFxuICAgICAgICBmaWxsOiBcIiNmZmZcIlxuICAgICAgfVxuICAgIClcbiAgfVxuKSwgTlIgPSAoKSA9PiAvKiBAX19QVVJFX18gKi8gZTEoXG4gIFwic3ZnXCIsXG4gIHtcbiAgICB3aWR0aDogXCIxNjBcIixcbiAgICBoZWlnaHQ6IFwiMTYwXCIsXG4gICAgdmlld0JveDogXCIwIDAgMTYwIDE2MFwiLFxuICAgIGZpbGw6IFwibm9uZVwiLFxuICAgIGNvbG9yOiBcInRyYW5zcGFyZW50XCIsXG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICBjaGlsZHJlbjogW1xuICAgICAgLyogQF9fUFVSRV9fICovIGMoXCJtYXNrXCIsIHsgaWQ6IFwicGF0aC0xLWluc2lkZS0xXCIsIGZpbGw6IFwid2hpdGVcIiwgY2hpbGRyZW46IC8qIEBfX1BVUkVfXyAqLyBjKFwicGF0aFwiLCB7IGQ6IFwiTTE1OS45OTQgODAuOTgyNkMxNTkuOTk4IDgwLjY1NzEgMTYwIDgwLjMzOCAxNjAgODAuMDI1M0MxNjAgNzkuODEyMiAxNjAgNzkuNTk5NCAxNjAgNzkuMzg2OEMxNjAgNzkuMzEzMiAxNjAgNzkuMjM5NSAxNjAgNzkuMTcxMUMxNjAgNzkuMDMxOSAxNjAgNzguODkyNyAxNTkuOTk1IDc4Ljc1NDJDMTU5Ljk5NSA3OC42NjI5IDE1OS45OTUgNzguNTcyNCAxNTkuOTkgNzguNDgxOEMxNTkuOTkgNzguMzYzMiAxNTkuOTg1IDc4LjI0NDcgMTU5Ljk4MiA3OC4xMjU0QzE1OS45ODIgNzguMDI0NSAxNTkuOTc3IDc3LjkyMjkgMTU5Ljk3NSA3Ny44MjEyQzE1OS45NzMgNzcuNzE5NiAxNTkuOTY4IDc3LjYwOTkgMTU5Ljk2NSA3Ny41MDM4TDE1OS45NTQgNzcuMTcwMkMxNTkuOTU0IDc3LjA3OTcgMTU5Ljk0OCA3Ni45ODkxIDE1OS45NDQgNzYuODk4NUMxNTkuOTQgNzYuNzc0MSAxNTkuOTM0IDc2LjY0OTYgMTU5LjkyOSA3Ni41MjUyQzE1OS45MjkgNzYuNDY2MyAxNTkuOTI0IDc2LjQwNzMgMTU5LjkyMSA3Ni4zNDc3QzE1OS44ODggNzUuNjIwMSAxNTkuODQ2IDc0Ljg5MzUgMTU5Ljc5MyA3NC4xNjc5Vjc0LjEzODVDMTU5Ljc3OSA3My45NTE0IDE1OS43NjUgNzMuNzYzNyAxNTkuNzUgNzMuNTc2NlY3My41NDk0QzE1OS40MTUgNjkuMzYwNSAxNTguNzUgNjUuMjA0NyAxNTcuNzYyIDYxLjEyMDRMMTU3LjcyNiA2MC45NjY1TDE1Ny42ODQgNjAuODAwOEMxNTcuNjM3IDYwLjYwNzEgMTU3LjU4OCA2MC40MTQ5IDE1Ny41MzYgNjAuMjIyTDE1Ny41MTQgNjAuMTMxNEMxNTcuNTA5IDYwLjExMzcgMTU3LjUwNSA2MC4wOTYgMTU3LjUgNjAuMDc4NEMxNTcuNDU2IDU5LjkwMzEgMTU3LjQxIDU5LjcyODMgMTU3LjM2MyA1OS41NTRDMTU3LjM2MyA1OS41NDY3IDE1Ny4zNiA1OS41MzkzIDE1Ny4zNTggNTkuNTMxMkMxNTcuMzE5IDU5LjM4MzkgMTU3LjI4IDU5LjIzODEgMTU3LjI0IDU5LjA5MzhMMTU3LjIwMyA1OC45NTI0QzE1Ny4xOTYgNTguOTI5NiAxNTcuMTkgNTguOTA2NyAxNTcuMTg0IDU4Ljg4MzlDMTU3LjE2MyA1OC44MTAzIDE1Ny4xNDMgNTguNzMwNyAxNTcuMTIxIDU4LjY1NDJDMTU3LjA4OSA1OC41Mzc4IDE1Ny4wNTYgNTguNDIxIDE1Ny4wMjMgNTguMzAzNkMxNTcuMDE1IDU4LjI3NzEgMTU3LjAwOSA1OC4yNTA2IDE1Ny4wMDEgNTguMjI0MUwxNTYuOTUyIDU4LjA1MThDMTU2Ljk1MiA1OC4wNDk4IDE1Ni45NTIgNTguMDQ3OCAxNTYuOTUyIDU4LjA0NTlDMTU2Ljg3OCA1Ny43OTcgMTU2LjgwOSA1Ny41NDk2IDE1Ni43MzUgNTcuMzAxNEMxNTYuNzM0IDU3LjI5NDcgMTU2LjczMiA1Ny4yODggMTU2LjczIDU3LjI4MTVMMTU2LjY1NiA1Ny4wNDM3TDE1Ni42MzcgNTYuOTg0VjU2Ljk3NTJDMTU2LjU4NSA1Ni44MDI0IDE1Ni41MzMgNTYuNjI4OCAxNTYuNDc5IDU2LjQ1NDVDMTU2LjQ3NSA1Ni40NDEzIDE1Ni40NzEgNTYuNDI3MyAxNTYuNDY3IDU2LjQxNEwxNTYuNDQ1IDU2LjM0MDRDMTU2LjQzNyA1Ni4zMTU0IDE1Ni40MjkgNTYuMjkwMyAxNTYuNDIyIDU2LjI2NjhDMTU2LjQwNiA1Ni4yMTY3IDE1Ni4zOTEgNTYuMTY2NiAxNTYuMzc1IDU2LjExOTVDMTU2LjMzMiA1NS45ODMgMTU2LjI4OSA1NS44NDcgMTU2LjI0NSA1NS43MTE1QzE1Ni4yMDkgNTUuNTk4MSAxNTYuMTczIDU1LjQ4NDcgMTU2LjEzNiA1NS4zNzEzTDE1Ni4wNzUgNTUuMTgyQzE1Ni4wNjEgNTUuMTM4NiAxNTYuMDQ2IDU1LjA5NTEgMTU2LjAzMiA1NS4wNTE3QzE1NS45OTIgNTQuOTI5NCAxNTUuOTUxIDU0LjgwNjcgMTU1LjkxIDU0LjY4MzVMMTU1LjkwMyA1NC42NTk5QzE1NS44ODMgNTQuNTk5NSAxNTUuODYzIDU0LjUzOTIgMTU1Ljg0MiA1NC40Nzg4TDE1NS44MDMgNTQuMzYxN0wxNTUuNzM0IDU0LjE1OTlWNTQuMTQ5NkMxNTUuNzM0IDU0LjE0NTIgMTU1LjczIDU0LjE0IDE1NS43MjkgNTQuMTM0OUMxNTUuNjY5IDUzLjk1ODYgMTU1LjYwOCA1My43ODI5IDE1NS41NDcgNTMuNjA3NkwxNTUuNTMxIDUzLjU2MjdDMTU1LjUwMyA1My40ODI0IDE1NS40NzUgNTMuNDAxNCAxNTUuNDQ2IDUzLjMyMTFMMTU1LjM5OCA1My4xODQ5QzE1NS4zNTcgNTMuMDcxIDE1NS4zMTYgNTIuOTU2OSAxNTUuMjc1IDUyLjg0MjVDMTU1LjI0NyA1Mi43Njg4IDE1NS4yMiA1Mi42OSAxNTUuMTkyIDUyLjYxNDJDMTU1LjE3MyA1Mi41NjA0IDE1NS4xNTMgNTIuNTA3NCAxNTUuMTMzIDUyLjQ1MzdMMTU1LjEyNCA1Mi40MzAxQzE1NS4xMTggNTIuNDEwMiAxNTUuMTEgNTIuMzkwMyAxNTUuMTAzIDUyLjM3MTJMMTU1LjA5OCA1Mi4zNTY1QzE1NS4wNzcgNTIuMzAwNSAxNTUuMDU3IDUyLjI0NTMgMTU1LjAzNSA1Mi4xODkzTDE1NC45OSA1Mi4wNjc4QzE1NC45NzcgNTIuMDMxNyAxNTQuOTYzIDUxLjk5NDEgMTU0Ljk1IDUxLjk2MDNMMTU0Ljg5MSA1MS44MDEyQzE1NC44ODEgNTEuNzc0NyAxNTQuODcxIDUxLjc0ODIgMTU0Ljg2MSA1MS43MjI0TDE1NC43NSA1MS40Mjc5TDE1NC43MzkgNTEuMzk3N0MxNTQuNzI4IDUxLjM3MDQgMTU0LjcxNyA1MS4zNDI0IDE1NC43MDYgNTEuMzE1MkMxNTQuNjc1IDUxLjIzNDIgMTU0LjY0NCA1MS4xNTM5IDE1NC42MTMgNTEuMDczNkMxNTQuNTg5IDUxLjAxMTggMTU0LjU2NiA1MC45NDk5IDE1NC41MzkgNTAuODg4MUwxNTQuNTEzIDUwLjgyMDNMMTU0LjQxNCA1MC41Njg1QzE1NC4zODIgNTAuNDg3NSAxNTQuMzQ5IDUwLjQwNjUgMTU0LjMxNiA1MC4zMjU1TDE1NC4yNDIgNTAuMTQ5NUwxNTQuMjA3IDUwLjA2MDRDMTU0LjE5NyA1MC4wMzY4IDE1NC4xODggNTAuMDEyNSAxNTQuMTc4IDQ5Ljk4NjdMMTU0LjEzNiA0OS44ODIxTDE1NC4wMzIgNDkuNjI5NkwxNTMuOTc3IDQ5LjQ5NTVDMTUzLjk0NiA0OS40MjE5IDE1My45MTUgNDkuMzQ4MyAxNTMuODg1IDQ5LjI3NDZDMTUzLjg0OCA0OS4xODYyIDE1My44MTEgNDkuMDk3MSAxNTMuNzc1IDQ5LjAwOTVMMTUzLjY5OCA0OC44Mjc2QzE1My42ODkgNDguODA3NyAxNTMuNjggNDguNzg3MSAxNTMuNjcyIDQ4Ljc2NjVDMTUzLjY2NCA0OC43NDU5IDE1My42NDYgNDguNzA1NCAxNTMuNjMzIDQ4LjY3NTJDMTUzLjU4IDQ4LjU1IDE1My41MjYgNDguNDI1MyAxNTMuNDcyIDQ4LjMwMTFDMTUzLjQ1NCA0OC4yNTg0IDE1My40MzUgNDguMjE2NCAxNTMuNDE3IDQ4LjE3NDRMMTUzLjQwMSA0OC4xMzYxTDE1My4yODQgNDcuODY2NkwxNTMuMiA0Ny42NzgxTDE1My4xMTkgNDcuNDk2OUwxNTMuMTEzIDQ3LjQ4MjlMMTUyLjk4OSA0Ny4yMDUzQzE1Mi45NjIgNDcuMTQ0MiAxNTIuOTM0IDQ3LjA4MzggMTUyLjkwNyA0Ny4wMjM0QzE1Mi44OTkgNDcuMDA2NSAxNTIuODkxIDQ2Ljk4OTYgMTUyLjg4NCA0Ni45NzI2QzE1Mi44NzcgNDYuOTU1NyAxNTIuODYzIDQ2LjkyNyAxNTIuODUyIDQ2LjkwNDFMMTUyLjgzNyA0Ni44Njg4TDE1Mi43MDIgNDYuNTc0MkwxNTIuNjU2IDQ2LjQ3NTVMMTUyLjY0MSA0Ni40NDE3QzE1Mi42MzQgNDYuNDI2OSAxNTIuNjI4IDQ2LjQxMjIgMTUyLjYyIDQ2LjM5NzVMMTUyLjU5OCA0Ni4zNDg5TDE1Mi40MzcgNDYuMDA1QzE1Mi40MTcgNDUuOTYyMyAxNTIuMzk3IDQ1LjkxOTYgMTUyLjM3NyA0NS44Nzc2TDE1Mi4zMTMgNDUuNzQxNEMxNTIuMjg4IDQ1LjY5MTMgMTUyLjI2NSA0NS42NDA1IDE1Mi4yMzkgNDUuNTg5N0wxNTIuMTg5IDQ1LjQ4NThDMTUyLjE0NiA0NS4zOTYgMTUyLjEwNCA0NS4zMDYxIDE1Mi4wNiA0NS4yMTYzQzE1MS45OTQgNDUuMDgxMyAxNTEuOTI4IDQ0Ljk0NjUgMTUxLjg2MiA0NC44MTJDMTUxLjgzMiA0NC43NDk0IDE1MS44MDEgNDQuNjg2OCAxNTEuNzcgNDQuNjI0MkMxNTEuNzYzIDQ0LjYwOCAxNTEuNzU1IDQ0LjU5MTggMTUxLjc0NiA0NC41NzU2QzE1MS42OTYgNDQuNDczMyAxNTEuNjQ1IDQ0LjM3MTYgMTUxLjU5NCA0NC4yN0wxNTEuNTY3IDQ0LjIxNjNDMTUxLjU1OSA0NC4yMDA4IDE1MS41NTEgNDQuMTg1MyAxNTEuNTQ0IDQ0LjE3MDZMMTUxLjQxNCA0My45MTIxQzE1MS40MTQgNDMuOTA1NSAxNTEuNDA3IDQzLjg5ODkgMTUxLjQwMyA0My44OTIzTDE1MS4zMyA0My43NDVMMTUxLjI0MSA0My41NzEyQzE1MS4yMTQgNDMuNTE5NiAxNTEuMTg4IDQzLjQ2NzQgMTUxLjE2MSA0My40MTY1TDE1MS4xNSA0My4zOTQ0TDE1MS4wODYgNDMuMjcxNUMxNTEuMDc4IDQzLjI1NiAxNTEuMDcgNDMuMjQxMyAxNTEuMDYyIDQzLjIyNThMMTUwLjg0NyA0Mi44MTJDMTUwLjgxNCA0Mi43NTAxIDE1MC43ODIgNDIuNjg4MiAxNTAuNzQ5IDQyLjYyNjRMMTUwLjY2NSA0Mi40NzAzQzE1MC42MDcgNDIuMzYyMyAxNTAuNTUgNDIuMjU0MiAxNTAuNDkyIDQyLjE0NjJMMTUwLjQwOSA0MS45OTE2QzE1MC4zODMgNDEuOTQzIDE1MC4zNTYgNDEuODk1MSAxNTAuMzMxIDQxLjg0NDNDMTUwLjE3NiA0MS41NjA2IDE1MC4wMiA0MS4yNzc4IDE0OS44NjIgNDAuOTk2TDE0OS43NzIgNDAuODM0N0wxNDkuNzM0IDQwLjc2N0MxNDkuNjcgNDAuNjUzNiAxNDkuNjA1IDQwLjU0MDEgMTQ5LjU0MSA0MC40MjY3TDE0OS40OTcgNDAuMzUzMUwxNDkuMzQ2IDQwLjA4ODdDMTQ5LjM0IDQwLjA3OTIgMTQ5LjMzNCA0MC4wNjg5IDE0OS4zMjkgNDAuMDU4NUwxNDkuMTY1IDM5Ljc3ODdMMTQ5LjA5OSAzOS42NjQ2TDE0OC45NjEgMzkuNDI4OUwxNDguOTU1IDM5LjQxOTNMMTQ4LjczNCAzOS4wNDNDMTQ4LjcxMyAzOS4wMDg3IDE0OC42ODkgMzguOTc2NiAxNDguNjYxIDM4Ljk0NzNDMTQ3Ljg5OSAzNy44NDI3IDE0NS40OTUgMzcuMzkwNiAxNDMuNTg5IDM3LjIwNzJDMTQxLjUyOCAzNy4wMDc2IDEzNy45ODggMzYuOTI4MSAxMzIuODcxIDM3LjY4MDdDMTI2LjY5NCAzOC41ODg3IDExOC42OTUgMzkuOTA5OCAxMTEuNjAzIDQyLjA3OTJDMTA4LjU5NSA0My4wMDA1IDEwNS45MjMgNDQuMDIyNiAxMDMuNjI5IDQ1LjEyODdDOTEuODcxOSA0Ni44ODM1IDc5LjcxODQgNDguNjk3MyA2Ny4zMzY2IDUwLjI5ODlDNjUuMzE4MyA1MC41NjAxIDYzLjM0NDggNTAuODE2NiA2MS40MTYzIDUxLjA2ODVDNjcuNjc5IDQ3Ljg1NTYgNzIuNDQ1NiA0NC44MTU3IDc1Ljg5ODYgNDEuODM3N0M3Ni43ODA3IDQxLjA3ODYgNzcuNjE5IDQwLjI2OTkgNzguNDA5MyAzOS40MTU3QzgwLjQxNjQgMzguODAwNSA4Mi40MTczIDM4LjE4MTUgODQuNDEyMSAzNy41NTg1Qzk2LjQxMzIgMzMuODAyOCAxMDUuNzcgMzAuMjQ3NSAxMTIuMjMgMjYuOThDMTEyLjM3OCAyNi45MDY0IDExMi41MTcgMjYuODMyOCAxMTIuNjU4IDI2Ljc1OTFMMTEyLjc4NSAyNi42OTM2TDExMy4wNzkgMjYuNTQyNkwxMTMuMjM1IDI2LjQ2MDFMMTEzLjQ4OSAyNi4zMjY5TDExMy42NTMgMjYuMjM4NUMxMTMuNzMyIDI2LjE5NjUgMTEzLjgxMiAyNi4xNTM4IDExMy44OSAyNi4xMTExTDExNC4wNTMgMjYuMDIyN0wxMTQuMjg1IDI1Ljg5NjFMMTE0LjQ0MSAyNS44MDkyTDExNC42NzQgMjUuNjc4OEwxMTQuODIxIDI1LjU5NzFMMTE1LjA1MiAyNS40NjUzTDExNS4xOSAyNS4zODY1QzExNS4zMDEgMjUuMzIzMSAxMTUuNDEgMjUuMjU5NiAxMTUuNTE4IDI1LjE5NTdMMTE1LjU0OCAyNS4xNzgxQzExNS42NjcgMjUuMTA4OSAxMTUuNzgyIDI1LjAzOTYgMTE1Ljg5NyAyNC45NzA0TDExNi4wMDQgMjQuOTA2M0wxMTYuMjM3IDI0Ljc2NDJMMTE2LjM2NSAyNC42ODU0TDExNi41NjggMjQuNTU5NUwxMTYuNyAyNC40NzU1TDExNi44OTEgMjQuMzU0TDExNy4wMjIgMjQuMjcwMUwxMTcuMjA4IDI0LjE0OTNMMTE3LjMzMyAyNC4wNjY4TDExNy41MTggMjMuOTQzMUwxMTcuNjMzIDIzLjg2OTVDMTE3LjcgMjMuODI0NiAxMTcuNzY1IDIzLjc3OTYgMTE3LjgzIDIzLjczNEwxMTcuOTI0IDIzLjY2OTlDMTE4LjAyMiAyMy42MDM2IDExOC4xMTYgMjMuNTM3NiAxMTguMjA2IDIzLjQ3MThDMTIwLjYyNSAyMS43NDU3IDEyMy40NjIgMTkuMDAyNiAxMjMuMjM4IDE1LjczOTZDMTIzLjIzOCAxNS43MTUzIDEyMy4yMzUgMTUuNjkxNyAxMjMuMjMzIDE1LjY2NlYxNS42MzczQzEyMy4wOTUgMTQuMTkzOSAxMjIuMDM5IDExLjk5OTQgMTE3LjkxMyA5LjU2NDE1TDExNy44ODkgOS41NTAxNUwxMTcuNzUxIDkuNDY5MTVMMTE3LjY2MyA5LjQxOTA4TDExNy41NjkgOS4zNjUzMkwxMTcuNDI2IDkuMjg0MzFMMTE3LjM3NCA5LjI1NDg2TDExNy4xNzEgOS4xNDIxOUwxMTcuMTQ1IDkuMTI4MkwxMTcuMTM1IDkuMTIzMDRMMTE3LjEyMiA5LjExNTY4QzExNi42OCA4Ljg4NTQzIDExNi4yMzkgOC42NTg4NiAxMTUuNzk3IDguNDM1OThMMTE1Ljc2NyA4LjQyMTI1QzExNS40ODkgOC4yODIwNyAxMTUuMjEgOC4xNDM2MyAxMTQuOTMgOC4wMDgxM0wxMTQuODg4IDcuOTg3NTFMMTE0LjcwMiA3Ljg5NzY3TDExNC40MDggNy43NTcwMkgxMTQuNDAxTDExNC4yMTYgNy42NjkzOEwxMTQuMTU5IDcuNjQyODdMMTE0LjA3MyA3LjYwMTYzTDExMy44NiA3LjUwMTQ4TDExMy43OTMgNy40Njk4MkwxMTMuNTgxIDcuMzcxODhMMTEzLjQ5IDcuMzI5OUwxMTMuNDcxIDcuMzIxMDdMMTEzLjMxNiA3LjI0NzQzTDExMy4yNDMgNy4yMTQyOUwxMTIuOTQ4IDcuMDgxTDExMi44OTQgNy4wNTU5NkwxMTIuNzg1IDcuMDA3MzZMMTEyLjY5NiA2Ljk2Njg2TDExMi4zODQgNi44Mjc2OEwxMTIuMzEgNi43OTQ1NEwxMTIuMjgxIDYuNzgyMDJMMTEyLjE1NSA2LjcyNjA1TDExMS44MjMgNi41Nzg3N0wxMTEuNjQ2IDYuNTA1MTNMMTExLjQ3NiA2LjQzMTQ5TDExMS4xMDggNi4yNzMxN0wxMTAuODIyIDYuMTUzMTNMMTEwLjUyNyA2LjAzMDE1TDExMC4zNDQgNS45NTY1MUwxMTAuMjI3IDUuOTA3OTFDMTEwLjA5MiA1Ljg1MjY4IDEwOS45NTYgNS43OTgxOSAxMDkuODIxIDUuNzQzNjlMMTA5LjY3MyA1LjY4NTUyTDEwOS4yNjUgNS41MjM1MUwxMDkuMTMzIDUuNDcxOTZMMTA4LjcwMiA1LjMwNDhMMTA4LjYyOSA1LjI3NjA4QzEwOC4zOSA1LjE4NDc2IDEwOC4xNDkgNS4wOTQxOSAxMDcuOTA4IDUuMDA0MzVIMTA3LjlDMTA3LjQ2NCA0Ljg0MjM0IDEwNy4wMjYgNC42ODI1NCAxMDYuNTkzIDQuNTMwMUwxMDYuNTY2IDQuNTIwNTNMMTA2LjA3NCA0LjM0ODk1TDEwNi4wMTMgNC4zMjgzM0MxMDUuODQ4IDQuMjcxODcgMTA1LjY4NCA0LjIxNjE1IDEwNS41MjEgNC4xNjExN0wxMDUuNDg3IDQuMTQ5MzhMMTA1LjIzNCA0LjA2NTQzTDEwNS4wMTMgMy45OTE3OUwxMDQuNjUxIDMuODczOTdMMTA0LjM4IDMuNzg3MDdMMTA0LjA1MSAzLjY4MjVMMTAzLjczNCAzLjU4MzA5TDEwMy40MzkgMy40OTE3OEwxMDIuOTA2IDMuMzMwNUwxMDIuODMyIDMuMzA4NDFMMTAyLjgwOCAzLjMwMTA1TDEwMi4yOTIgMy4xNDkzNUgxMDIuMjgxSDEwMi4yNzRMMTAyLjI1MyAzLjE0MzQ2TDEwMi4xMjYgMy4xMDczN0MxMDEuMjI3IDIuODQ5MTQgMTAwLjMyNCAyLjYwNjM4IDk5LjQxNjQgMi4zNzkwN0M4NC40Njk0IC0xLjMzODI2IDY4Ljc2OTggLTAuNjg4MzI3IDU0LjE4MSA0LjI1MTc0TDU0LjE1ODIgNC4yNTk4NEM1My45OTExIDQuMzE3MjggNTMuODIzMiA0LjM3NDcyIDUzLjY1NjEgNC40MzM2NEw1My41MjY1IDQuNDc4NTZDNTMuMzU3MSA0LjUzNzQ3IDUzLjE4ODUgNC41OTc4NSA1My4wMTk5IDQuNjU4MjRMNTIuOTA3MyA0LjY5OEw1Mi4zNzc5IDQuODkwOTRMNTIuMzEwOSA0LjkxNTI0QzQ3Ljg3NjYgNi41NTA5NyA0My41OTY3IDguNTc4NDQgMzkuNTIyIDEwLjk3MzZMMzkuNDgwOCAxMC45OTc5QzM5LjM0NzUgMTEuMDc2IDM5LjIxNDIgMTEuMTU1NSAzOS4wODE3IDExLjIzNUwzOC44NzQxIDExLjM1ODhDMzguNzYwNyAxMS40MjY1IDM4LjY0NzggMTEuNDk0NyAzOC41MzU0IDExLjU2MzVDMzguNDQ1NiAxMS42MTggMzguMzU1NyAxMS42NzI1IDM4LjI2NjcgMTEuNzI3N0MzOC4xNjYgMTEuNzg5MSAzOC4wNjU0IDExLjg1MDkgMzcuOTY0OCAxMS45MTMzQzM3Ljg2NDIgMTEuOTc1NiAzNy43NjE2IDEyLjAzOTQgMzcuNjU3IDEyLjEwNDdMMzcuMzg1MyAxMi4yNzQ4QzM3LjI3MDUgMTIuMzQ3IDM3LjE1NTkgMTIuNDIwNiAzNy4wNDE1IDEyLjQ5NThMMzYuODA1MiAxMi42NDUzQzM2LjY3MDIgMTIuNzMxMiAzNi41MzYyIDEyLjgxNzggMzYuNDAzMiAxMi45MDUyTDM2LjIyMiAxMy4wMjNDMzYuMDI1NyAxMy4xNTEyIDM1LjgzMTEgMTMuMjc5OCAzNS42MzgyIDEzLjQwODlDMzUuMzEyOCAxMy42MjYxIDM1LjE1MjMgMTMuOTc0NSAzNS4yMTkyIDE0LjMxOTFDMzUuMzQyMiAxNC45NTQ2IDM2LjA5ODQgMTUuMTc5OSAzNi42NTcyIDE1LjI5NDFDMzkuMTI0NCAxNS43OTg1IDQ0LjM2ODEgMTYuMzYxMSA0OC4yNDMgMTYuMzkzNUM0OC4zOTQ3IDE2LjM5MzUgNDguNTQ1NyAxNi4zOTM1IDQ4LjY5NzMgMTYuMzkzNUM1Mi45NDM0IDE2LjM5MzUgNTcuMjA2MyAxNS44OTY1IDYwLjQ1NzcgMTUuMDE3OUM2Mi40MTQ3IDE0LjQ4ODUgNjMuOTkxOCAxMy44MzAxIDY1LjE0MTEgMTMuMDU5OEM2Ni4yOTA0IDEyLjI4OTYgNjcuMDI4MSAxMS4zOTYzIDY3LjMyODUgMTAuNDA4OEM3Mi4wODQxIDEwLjA1NDYgNzcuMTY4NyA5LjgwMiA4Mi40Mjc4IDkuNzMwNTdDODcuMjM4MSA5LjY2NDMgOTEuNjc2MSA5LjcxODA1IDk1Ljc0MTcgOS44OTE4NUM5Mi42ODc3IDEyLjI4MzcgODcuNDQ5OSAxNC44NDEyIDgwLjc2MDIgMTcuMTk4NEM3Ni43Mzg3IDE4LjYxMzggNzEuNTgxOSAyMC4zNDM2IDY1Ljk2MTMgMjIuMTIwNUM2MS4xMzM2IDIyLjQ3MTggNTUuMTA0MyAyMy40MjYyIDQ3LjYxNjUgMjQuNzY2NEM0MC4zNDUxIDI2LjA2NjkgMzIuNzQzMiAyNy43ODA1IDI2Ljc1NDQgMjkuNDY2OUMxOS4zNjk3IDMxLjU0NjUgMTUuMDI3OSAzMy40MDA3IDEzLjg1MDYgMzQuOTc4MUwxMy44MzUyIDM1LjAwMDJMMTMuNDQ0MiAzNS41Nzk4QzEzLjMxMjQgMzUuNzc3MSAxMy4xODA2IDM1Ljk3NTIgMTMuMDUxIDM2LjE3MzNDMTMuMDQ3OCAzNi4xNzczIDEzLjA0NDkgMzYuMTgxNSAxMy4wNDIyIDM2LjE4NThDMTIuODE3NiAzNi41Mjc1IDEyLjU4NSAzNi44ODkxIDEyLjMzMDIgMzcuMjkwNEwxMi4yNjU0IDM3LjM5NDJMMTIuMTc3MSAzNy41MzQ5QzEyLjA4MTkgMzcuNjg2NiAxMS45ODc0IDM3LjgzODUgMTEuODkzNiAzNy45OTA3TDExLjg4NjMgMzguMDAyNUwxMS44ODExIDM4LjAxMTNMMTEuNzIzNiAzOC4yNjYxTDExLjUyNTUgMzguNTkyNEMxMS41MTc0IDM4LjYwNDkgMTEuNTEgMzguNjE3NCAxMS41MDI3IDM4LjYyOTlMMTEuNDQ2IDM4LjcyMkwxMS4yNjYzIDM5LjAyMjRDMTEuMjMxNyAzOS4wNzk5IDExLjE5NzkgMzkuMTM4IDExLjE2MzMgMzkuMTk2MkwxMS4xMjQyIDM5LjI2MUwxMS4wMDI3IDM5LjQ2NTdMMTAuOTgyMSAzOS41MDExTDEwLjk3ODUgMzkuNTA4NUMxMC44MDMyIDM5LjgwNjcgMTAuNjI0MyA0MC4xMTYgMTAuNDM3MyA0MC40NDQ0QzEwLjQyMjYgNDAuNDcwMiAxMC40MDc4IDQwLjQ5NiAxMC4zOTM5IDQwLjUxODFDMTAuMzc5OSA0MC41NDAxIDEwLjM1NTYgNDAuNTg0MyAxMC4zMzY0IDQwLjYxODlMMTAuMjg3OCA0MC43MDI5TDEwLjIwMzkgNDAuODUwMkwxMC4wNzg3IDQxLjA3MjZMMTAuMDMwMSA0MS4xNjAyTDkuOTMxNDggNDEuMzM3N0w5Ljg5OTgyIDQxLjM5NTFMOS43ODQyMyA0MS42MTAxQzkuNzY0MzUgNDEuNjQ3IDkuNzQ0NDcgNDEuNjgzOCA5LjcyMzg2IDQxLjcyMDZMOS42OTQ0IDQxLjc3NTFDOS42MzY0OSA0MS44ODExIDkuNTc4ODEgNDEuOTg3MiA5LjUyMTM4IDQyLjA5MzJMOS4zNzQxMyA0Mi4zNjVDOS4yODcyNSA0Mi41MjkyIDkuMTk5NjMgNDIuNjkyNyA5LjExMjAyIDQyLjg1OTFMOS4xMDE3MSA0Mi44Nzk3QzguODk5OTcgNDMuMjYzNCA4LjY5ODI0IDQzLjY1NTkgOC40ODQ3MiA0NC4wOEw4LjM4NTMzIDQ0LjI3NTlDOC4yOTkxOCA0NC40NDgyIDguMjE0NTEgNDQuNjIwNiA4LjEyNjE2IDQ0Ljc5OTVMOC4wMDU0MSA0NS4wNDYyQzcuOTIxOTcgNDUuMjE3NSA3LjgzOTAyIDQ1LjM4OTQgNy43NTY1NiA0NS41NjE3QzcuNzI3ODQgNDUuNjIyMSA3LjY5OTg2IDQ1LjY4MjQgNy42NzExNSA0NS43NDIxTDcuNjQ1MzggNDUuNzk3M0M3LjUwMTgxIDQ2LjA5OTIgNy4zNTgyMyA0Ni40MDc4IDcuMjE3NjEgNDYuNzE0MVY0Ni43MTc4QzcuMDc3NzIgNDcuMDIyNyA2LjkzNzgzIDQ3LjMzMjcgNi44MDE2MiA0Ny42NDA1TDYuNzU4OTIgNDcuNzM3VjQ3Ljc0MjJMNi43MzgzIDQ3Ljc4OTNDNi42NTY1NyA0Ny45NzQxIDYuNTc2MzIgNDguMTU3NSA2LjQ5NjA3IDQ4LjM0Nkw2LjM5NzQxIDQ4LjU3OEM2LjMxODYzIDQ4Ljc2MjEgNi4yNDEzMiA0OC45NDYyIDYuMTY0MDEgNDkuMTMxTDYuMDc1NjYgNDkuMzQyNEM1Ljk0MjQgNDkuNjYyNyA1LjgwOTEzIDQ5Ljk5MDQgNS42ODEwMiA1MC4zMTE1TDUuNjczNjYgNTAuMzI4NEM1LjU0MzM0IDUwLjY1NTQgNS40MTM3NiA1MC45ODUzIDUuMjg4NTkgNTEuMzEwOEw1LjI1NTQ2IDUxLjM5NjJDNS4xODE4NCA1MS41OTQzIDUuMTA4MjEgNTEuNzkzOCA1LjAzMDE2IDUxLjk5MjdMNC45NTY1NCA1Mi4xOTk2QzQuODg0MzggNTIuMzk2IDQuODEyOTcgNTIuNTkyMyA0Ljc0MjI4IDUyLjc4ODdMNC42Njg2NiA1Mi45ODI0QzQuNTQ4NjUgNTMuMzE2NyA0LjQyNzkgNTMuNjU5OSA0LjMxMTU3IDUzLjk5ODZMNC4zMDEyNiA1NC4wMjgxQzQuMTgxOTkgNTQuMzc3MSA0LjA2NDkyIDU0LjcyNCAzLjk1NDQ4IDU1LjA1OUwzLjk1MDggNTUuMDY5NFY1NS4wNzg5TDMuOTQ3MTIgNTUuMDkxNEMzLjg3ODY1IDU1LjI5OTkgMy44MTE2NSA1NS41MDk3IDMuNzQ0NjUgNTUuNzE4OUwzLjY4MzU0IDU1LjkxMThDMy42MTkyMyA1Ni4xMTUxIDMuNTU1OTIgNTYuMzE4NSAzLjQ5MzU4IDU2LjUyMjNMMy40MzY4OSA1Ni43MDg2QzMuMzMxNiA1Ny4wNTU0IDMuMjI2MzEgNTcuNDEwNCAzLjEyMzI0IDU3Ljc2NTNMMy4xMTM2NyA1Ny43OTg1QzMuMDA5MTIgNTguMTYgMi45MDgyNSA1OC41MjAxIDIuODEyNTMgNTguODY5MkMyLjgxMjgyIDU4Ljg3MDQgMi44MTI4MiA1OC44NzE3IDIuODEyNTMgNTguODcyOVY1OC44ODAyQzIuNzY3ODcgNTkuMDQ2MiAyLjcyMzIgNTkuMjEyMSAyLjY3ODUzIDU5LjM3OEwyLjU4MjA4IDU5Ljc0NjJMMi40NzgyNyA2MC4xNDQ2QzIuNDU3NjUgNjAuMjI2NCAyLjQzNzA0IDYwLjMwODEgMi40MTcxNiA2MC4zODk5TDIuMjM0NTcgNjEuMTI2M0MxLjM0NzE3IDY0Ljc5NzMgMC43MjEyNSA2OC41MjY4IDAuMzYxNTA2IDcyLjI4NjRDMC4zNTQ4OCA3Mi4zNTEyIDAuMzQ4OTg5IDcyLjQxNiAwLjM0MzA5OSA3Mi40ODE2QzAuMzI4Mzc0IDcyLjYzNCAwLjMxNTEyMSA3Mi43ODU3IDAuMzAxMTMyIDcyLjkzODFMMC4yNzkwNDUgNzMuMTk2NkMwLjI2ODAwMSA3My4zMjk5IDAuMjU2OTU2IDczLjQ2MzkgMC4yNDY2NDkgNzMuNTk3MkMwLjIzOTI4NiA3My42OSAwLjIzMTE4OCA3My43ODIxIDAuMjI0NTYxIDczLjg3NDhDMC4yMTQyNTMgNzQuMDEwMyAwLjIwNDY4MiA3NC4xNDY2IDAuMTk1MTEgNzQuMjgyMUMwLjE4ODQ4NCA3NC4zNjkgMC4xODE4NTcgNzQuNDU1MSAwLjE3NTk2NyA3NC41NDEzQzAuMTYxOTc4IDc0Ljc0NjcgMC4xNDk0NjIgNzQuOTUyMiAwLjEzNjk0NSA3NS4xNTg0TDAuMTE5Mjc1IDc1LjQ2MjVDMC4xMTI2NDkgNzUuNTgxOCAwLjEwNjAyMiA3NS43MDA0IDAuMTAwMTMyIDc1LjgxODlDMC4wOTQyNDIgNzUuOTI1IDAuMDg5MDg4MiA3Ni4wMzEgMC4wODQ2NzA2IDc2LjEzNzFDMC4wNzg3ODA1IDc2LjI1NDIgMC4wNzM2MjY1IDc2LjM3MTMgMC4wNjg0NzI3IDc2LjQ4NzZDMC4wNjMwNzM0IDc2LjU5MTIgMC4wNTg2NTU4IDc2LjY5NSAwLjA1NTIxOTkgNzYuNzk5MUMwLjA1MDA2NiA3Ni45MjU4IDAuMDQ1NjQ4MyA3Ny4wNTE3IDAuMDQxMjMwNyA3Ny4xNzc2QzAuMDQxMjMwNyA3Ny4yNzExIDAuMDM0NjA0NSA3Ny4zNjQ3IDAuMDMxNjU5NCA3Ny40NTgyQzAuMDI1MDMzIDc3LjY1NzcgMC4wMTk4Nzg5IDc3Ljg1NjYgMC4wMTQ3MjUxIDc4LjA1NjFDMC4wMTQ3MjUxIDc4LjEwOTkgMC4wMTQ3MjUxIDc4LjE2NDQgMC4wMTQ3MjUxIDc4LjIxODJDMC4wMTA3OTgzIDc4LjQwMzIgMC4wMDczNjI0NyA3OC41ODgxIDAuMDA0NDE3NDEgNzguNzcyN0MwLjAwNDQxNzQxIDc4Ljc5NCAwLjAwNDQxNzQxIDc4LjgxNTQgMC4wMDQ0MTc0MSA3OC44Mzc1Vjc4Ljg0MTlDMC4wMDQ0MTc0MSA3OC45Njg1IDAuMDA0NDE3NTkgNzkuMDg3MSAwIDc5LjIwMDVDMCA3OS4yNTU3IDAgNzkuMzExIDAgNzkuMzY2OUMwIDc5LjU0NzQgMCA3OS43MTMgMCA3OS44NzIxVjc5LjkwMjNDMC4wMTQ3MjUzIDgwLjQ2NzkgMC40MDI3MzcgODEuNzg1MyAzLjY3Mzk2IDgxLjgwM0gzLjgwNzk2QzYuMTQ3MDggODEuODAzIDExLjcwNzQgODEuNTA0IDE3LjY0MzEgODAuOTM1NUMyOC4wMDc1IDc5Ljk0MjggNDguMjU3IDc3LjMyNzEgNzEuNzA0MSA3NC4yOTAyTDc0LjUwMTkgNzMuOTI3OUM4MS4xMjgzIDczLjA3MDcgOTAuNDA1MyA3MS43OTIzIDEwMC42MzkgNzAuMzUwNEMxMDIuMzkyIDcxLjM1OTMgMTA0LjM0MiA3Mi4yNDM3IDEwNi4zOSA3My4wMjIxQzk1Ljk5MDYgNzUuMzc4NiA4NS40NTE3IDc3Ljc4NzQgNzUuMzc3NCA4MC4yMTQ1QzY3LjMxNjcgODIuMTU2NCA1OS41MDg2IDg0LjE0NTQgNTIuMTYgODYuMDg0NEM0NC4yODE5IDg2LjkyMjQgMzYuNjE0NSA4OC4yMDc0IDI4LjU4MTEgOTAuMDE0NkMxOS43NTExIDkyLjAwMjkgMTEuMjI2NiA5NC42MTU2IDQuNTc4ODMgOTcuMzc4Nkw0LjQwMjg3IDk3LjQ1MjJDMi45MDE2MiA5OC4wNzE1IDIuMjk0MiA5OS4wNDE0IDIuNTk2MDcgMTAwLjMzNVYxMDAuMzQ1TDIuNTk5NzUgMTAwLjM1OUwyLjY1OTM5IDEwMC41OFYxMDAuNTg5TDIuNzYzMiAxMDAuOTgyVjEwMC45ODdDMi44MzgzIDEwMS4yNjMgMi45MTQ4NyAxMDEuNTM5IDIuOTkyOTIgMTAxLjgxNUMzLjAxNjQ4IDEwMS44OTkgMy4wNDA3OCAxMDEuOTg0IDMuMDY2NTQgMTAyLjA2OUMzLjEyOTg2IDEwMi4yOSAzLjE5NDE2IDEwMi41MTEgMy4yNTk0NSAxMDIuNzMxTDMuMzE1NCAxMDIuOTIzQzMuMzk2MzkgMTAzLjE5NCAzLjQ3ODYxIDEwMy40NjQgMy41NjIwNSAxMDMuNzMzTDMuNjM1NjggMTAzLjk3QzMuNzAxMjEgMTA0LjE3OSAzLjc2NzQ3IDEwNC4zODcgMy44MzQ0NyAxMDQuNTk1TDMuODU4NzcgMTA0LjY2OUMzLjg3NjQ0IDEwNC43MjUgMy44OTQ4NCAxMDQuNzggMy45MTI1MSAxMDQuODM1QzMuOTQ3MTIgMTA0Ljk0MiAzLjk4NjE0IDEwNS4wNDggNC4wMTg1NCAxMDUuMTU1QzQuMDcwMDcgMTA1LjMxMSA0LjEyMTYxIDEwNS40NjggNC4xNzM4OSAxMDUuNjI0TDQuMjQzMSAxMDUuODI3QzQuMzE0NzYgMTA2LjAzNiA0LjM4NjkxIDEwNi4yNDQgNC40NTk1NiAxMDYuNDUzTDQuNTU0NTQgMTA2LjcyM0M0LjYzOTk0IDEwNi45NjMgNC43MjYwOSAxMDcuMjAzIDQuODEyOTcgMTA3LjQ0Mkw0Ljg3OTk3IDEwNy42MjZDNC45NjM5IDEwNy44NTQgNS4wNDkwNiAxMDguMDgyIDUuMTM1NDUgMTA4LjMxQzUuMTcxNTMgMTA4LjQwNSA1LjIwOTA4IDEwOC41IDUuMjQ0NDIgMTA4LjU5NUM1LjI3OTc2IDEwOC42OSA1LjMxODA0IDEwOC43ODUgNS4zNTQxMiAxMDguODhMNS40NjY3NyAxMDkuMTc1TDUuNTAzNTggMTA5LjI2OUM1LjUyMTI1IDEwOS4zMTYgNS41Mzk2NiAxMDkuMzYyIDUuNTU4MDcgMTA5LjQwOUM1LjY1NTk5IDEwOS42NTcgNS43NTYxMiAxMDkuOTA1IDUuODU2MjUgMTEwLjE1Mkw1Ljk1Nzg2IDExMC4zOTlMNS45NzcgMTEwLjQ0NkM2LjA1MDYzIDExMC42MTggNi4xMTk4NCAxMTAuNzkxIDYuMTkxOTkgMTEwLjk2Mkw2LjIyMjE4IDExMS4wMzVMNi4zMTU2OCAxMTEuMjU2QzYuNDE3NzggMTExLjQ5NiA2LjUyMDYxIDExMS43MzQgNi42MjQxOCAxMTEuOTczTDYuNzE0NzQgMTEyLjE3OUw2Ljc1NDUgMTEyLjI2N0M2LjgyODEyIDExMi40MjggNi44OTczMyAxMTIuNTkgNi45Njk0OSAxMTIuNzUxQzcuMDE5NTUgMTEyLjg2MiA3LjA2ODg4IDExMi45NzIgNy4xMTY3NCAxMTMuMDg0QzcuMTk5MiAxMTMuMjY2IDcuMjgyNCAxMTMuNDQ3IDcuMzY2MzMgMTEzLjYyN0M3LjQzMzU4IDExMy43NzUgNy41MDEwNyAxMTMuOTE5IDcuNTY4ODEgMTE0LjA2QzcuNjQyNDMgMTE0LjIxNyA3LjcxNjA2IDExNC4zNzQgNy43ODk2OSAxMTQuNTNDNy44NDcxMiAxMTQuNjUxIDcuOTA1MDQgMTE0Ljc3MSA3Ljk2MzQ1IDExNC44OTFDOC4wMzA0NSAxMTUuMDMgOC4wOTg5MiAxMTUuMTY5IDguMTY3MzkgMTE1LjMwOEM4LjI0NzY0IDExNS40NzIgOC4zMjkzNyAxMTUuNjM1IDguNDExMDkgMTE1Ljc5OUM4LjQ5MjgyIDExNS45NjIgOC41NzYwMiAxMTYuMTI4IDguNjU5OTUgMTE2LjI5MkM4LjcyNTIzIDExNi40MjEgOC43OTEyNSAxMTYuNTUgOC44NTgwMSAxMTYuNjc4QzguOTE5MTIgMTE2Ljc5NiA4Ljk3OTQ5IDExNi45MTMgOS4wNDA2IDExNy4wMjlMOS4wNTkwMSAxMTcuMDY1QzkuMTIxODMgMTE3LjE4NSA5LjE4NDY2IDExNy4zMDUgOS4yNDc0OSAxMTcuNDI0QzkuMzUxMDYgMTE3LjYyMSA5LjQ1NTEyIDExNy44MTUgOS41NTk2NyAxMTguMDA3TDkuODAxMTYgMTE4LjQ0OUM5Ljg1NjM4IDExOC41NDggOS45MTA4NyAxMTguNjQ3IDkuOTY2MDkgMTE4Ljc0M0MxMC4wNDUxIDExOC44ODcgMTAuMTI0NiAxMTkuMDMgMTAuMjA0NiAxMTkuMTcyTDEwLjMwMzMgMTE5LjM0NkwxMC4zNDc1IDExOS40MkMxMC40OTkxIDExOS42ODcgMTAuNjUxNiAxMTkuOTUzIDEwLjgwMTcgMTIwLjIxMUwxMC45MzY1IDEyMC40NDFDMTEuMDI1NiAxMjAuNTk0IDExLjExNjEgMTIwLjc0NyAxMS4yMDY3IDEyMC44OTlMMTEuMzI4OSAxMjEuMTAzQzExLjUxOTYgMTIxLjQyMSAxMS43MTEgMTIxLjczNiAxMS44OTk1IDEyMi4wNEwxMS45NDk2IDEyMi4xMjJDMTIuMDUxMiAxMjIuMjg2IDEyLjE1MzUgMTIyLjQ0OSAxMi4yNTY2IDEyMi42MTJMMTIuMzU4MiAxMjIuNzczQzEyLjM3MDcgMTIyLjc5MyAxMi4zODQgMTIyLjgxMiAxMi4zOTY1IDEyMi44MzNDMTIuNDA5IDEyMi44NTQgMTIuNDI3NCAxMjIuODggMTIuNDQyMSAxMjIuOTA3QzEyLjU2NDQgMTIzLjA5OCAxMi42ODcxIDEyMy4yODkgMTIuODEwMyAxMjMuNDhDMTIuODE3NiAxMjMuNDkyIDEyLjgyNSAxMjMuNTA0IDEyLjgzMzEgMTIzLjUxNkMxMi45NDg3IDEyMy42OTUgMTMuMDY1IDEyMy44NzEgMTMuMTgyMSAxMjQuMDQ4TDEzLjE5MDIgMTI0LjA2MkMxMy40MDc0IDEyNC4zOTIgMTMuNjM4NiAxMjQuNzM0IDEzLjg5NDggMTI1LjExTDEzLjkzMzggMTI1LjE2NkwxNC4wNTUzIDEyNS4zNDVMMTQuMTk3NCAxMjUuNTQ5TDE0LjI5MjQgMTI1LjY4NkwxNC4zNjAxIDEyNS43ODNMMTQuNTE5MiAxMjYuMDExQzE0LjUyMzYgMTI2LjAxNiAxNC41MjczIDEyNi4wMjIgMTQuNTMwOSAxMjYuMDI3TDE0LjU0MzQgMTI2LjA0NEMxNC41NDM0IDEyNi4wNDkgMTQuNTUwMSAxMjYuMDUzIDE0LjU1MyAxMjYuMDU4QzE0LjY1MDIgMTI2LjE5NSAxNC43NDY3IDEyNi4zMzIgMTQuODQ3NSAxMjYuNDY5TDE0Ljk1NjUgMTI2LjYyMUwxNS4wNjYyIDEyNi43NzNMMTUuMTQ3OSAxMjYuODg1QzE1LjMwMTggMTI3LjA5OCAxNS40NTc5IDEyNy4zMTMgMTUuNjE2MiAxMjcuNTI2TDE1LjY2MzMgMTI3LjU5TDE1Ljc1MjQgMTI3LjcxMUMxNS44NjI4IDEyNy44NTggMTUuOTczOCAxMjguMDA2IDE2LjA4NTIgMTI4LjE1M0MxNi4xMzk3IDEyOC4yMjYgMTYuMTk0OSAxMjguMyAxNi4yNDk0IDEyOC4zNzRDMTYuMzYyOCAxMjguNTIxIDE2LjQ3NjQgMTI4LjY2OCAxNi41OTAzIDEyOC44MTZMMTYuNzExIDEyOC45NzJDMTYuOTcxNiAxMjkuMzA4IDE3LjIzMjMgMTI5LjY0IDE3LjQ4NTYgMTI5Ljk1NkwxNy41MjYxIDEzMC4wMDdDMTcuNjQ5NyAxMzAuMTYyIDE3Ljc3NDkgMTMwLjMxNiAxNy45MDAxIDEzMC40N0wxOC4wNDczIDEzMC42NDZDMTguMTcyIDEzMC43OTggMTguMjk3MiAxMzAuOTUgMTguNDIyOCAxMzEuMTAyTDE4LjUzNjIgMTMxLjIzOEMxOC45NTU5IDEzMS43NDEgMTkuMzg1OSAxMzIuMjQ0IDE5LjgxMzYgMTMyLjczMUwxOS45MjE5IDEzMi44NTVDMjAuMDU5OCAxMzMuMDExIDIwLjE5ODcgMTMzLjE2OCAyMC4zMzg2IDEzMy4zMjVMMjAuNDM0MyAxMzMuNDMxQzIwLjg5MyAxMzMuOTQyIDIxLjM2MiAxMzQuNDUyIDIxLjgyODEgMTM0Ljk0NUwyMS44NzQ0IDEzNC45OTRDMjIuMDI3NiAxMzUuMTU2IDIyLjE4MTcgMTM1LjMxOCAyMi4zMzY4IDEzNS40NzlMMjIuNDEwNCAxMzUuNTU3QzIyLjY2NzQgMTM1LjgyMyAyMi45MjU4IDEzNi4wODkgMjMuMTkwOSAxMzYuMzUzTDIzLjIxODkgMTM2LjM4MUMyMy42MTQyIDEzNi43OCAyNC4wMTQgMTM3LjE3NSAyNC40MTQ2IDEzNy41NkwyNC40NjYxIDEzNy42MDlDMjQuNTAyOSAxMzcuNjQ1IDI0LjUzOTcgMTM3LjY4MyAyNC41Nzg3IDEzNy43MTZDMjQuNzEwNSAxMzcuODQzIDI0Ljg0MjMgMTM3Ljk3IDI0Ljk3NDkgMTM4LjA5NUwyNS4wNDg1IDEzOC4xNjRMMjUuMDY0NyAxMzguMThDMjUuMTg5OCAxMzguMjk4IDI1LjMxNjUgMTM4LjQxNiAyNS40NDI0IDEzOC41MzRDMjUuNTE2IDEzOC42MDggMjUuNTg5NiAxMzguNjczIDI1LjY2NjkgMTM4Ljc0MkMyNS43NTM4IDEzOC44MjMgMjUuODQxNCAxMzguOTA0IDI1LjkyODMgMTM4Ljk4M0wyNi4xMTUzIDEzOS4xNTVDMjYuMjY2MyAxMzkuMjkyIDI2LjQxNzIgMTM5LjQyOSAyNi41NjY3IDEzOS41NjNMMjYuNTcxMSAxMzkuNTY3TDI2LjU5NTQgMTM5LjU4OUwyNi42MTIzIDEzOS42MDVDMjYuNzU5NiAxMzkuNzM4IDI2LjkxMDUgMTM5Ljg3MSAyNy4wNjUxIDE0MC4wMDZMMjcuMjQ0OCAxNDAuMTY1TDI3LjUzMzQgMTQwLjQxNkMyNy42NjA4IDE0MC41MjcgMjcuNzg4MSAxNDAuNjM3IDI3LjkxNTUgMTQwLjc0NkMyNy45ODkxIDE0MC44MTEgMjguMDYyNyAxNDAuODc2IDI4LjE0MTUgMTQwLjk0TDI4LjE5NzUgMTQwLjk4OEwyOC4yMzk1IDE0MS4wMjRMMjguMjYyMyAxNDEuMDQ0QzI4LjQwOTUgMTQxLjE3MSAyOC41NjI3IDE0MS4yOTcgMjguNzEzNiAxNDEuNDIzTDI4LjgwNDkgMTQxLjQ5NkwyOC44MTgyIDE0MS41MDdDMjguODUwNiAxNDEuNTMzIDI4Ljg4NDQgMTQxLjU1OCAyOC45MTkgMTQxLjU4QzI5LjAyNiAxNDEuNjUzIDI5LjE0MTggMTQxLjcxMiAyOS4yNjM2IDE0MS43NTZIMjkuMjY5NUgyOS4yNzU0QzI5LjU5NyAxNDEuODU4IDI5LjkzMzYgMTQxLjkwNSAzMC4yNzA4IDE0MS44OTRDMzAuOTY4MSAxNDEuODk0IDMxLjkyOTYgMTQxLjc2NCAzMy4zMDIgMTQxLjUwNUMzNy42NjUxIDE0MC42NzggNTkuMDU4OCAxMzYuODk2IDg0LjAxMDEgMTMzLjQ3OEM5MS40NTMgMTMyLjQ1NyA5OS4wNDA5IDEzMS43MSAxMDUuOTY5IDEzMS4xNjVDMTA0LjQ1MyAxMzMuMDk1IDEwMy42NzEgMTM1LjA0OCAxMDMuNjM3IDEzNy4wMDdDMTAzLjU3NCAxNDAuNjA2IDEwNy43OTMgMTQzLjQwNyAxMTEuMzkgMTQ1LjIyNkMxMDYuNjI3IDE0Ni43ODEgMTAxLjU5OCAxNDguMTQ1IDk2LjU1MDkgMTQ5LjE0MUM5My4yMzc3IDE0OS43OTUgODkuOTkzNyAxNTAuMzU0IDg2LjgzMjIgMTUwLjgzQzg2Ljc5ODUgMTUwLjYxMSA4Ni43NDY2IDE1MC4zOTUgODYuNjc2OCAxNTAuMTg0Qzg2LjA2NTcgMTQ4LjMzNCA4My41NzU3IDE0Ny4wNDMgNzkuNjY0NiAxNDYuNTQ3Qzc1Ljg3NTggMTQ2LjA2OCA3MS4wMzYzIDE0Ni4zNTcgNjYuMDM3OCAxNDcuMzYzQzU5LjI5NTkgMTQ4LjcxOSA1NS4wMjA0IDE1MC43OTQgNTMuODcwMyAxNTEuMzk3QzUyLjEwMzMgMTUyLjMyMyA1MS40MDY4IDE1My4wMjMgNTEuNDU2OCAxNTMuODEzQzUxLjUxMTMgMTU0LjY3MSA1Mi40NDQyIDE1NS4xMjggNTMuMjYyMiAxNTUuNDMzTDUzLjI4MiAxNTUuNDRMNTMuNjM0NyAxNTUuNTYzTDUzLjY4NyAxNTUuNTgyTDU0LjAzMDEgMTU1LjdDNTQuNTg0NSAxNTUuODkgNTUuMTQxOCAxNTYuMDc0IDU1LjY4NDUgMTU2LjI0N0w1NS43MjY0IDE1Ni4yNjFMNTYuMTQ5OCAxNTYuMzkzSDU2LjE1NjRDNTYuNDU5IDE1Ni40ODcgNTYuNzY4MyAxNTYuNTgyIDU3LjA4MTIgMTU2LjY3NUw1Ny4xMjYxIDE1Ni42ODlMNTcuMTYwNyAxNTYuNjk5TDU3LjIxNjYgMTU2LjcxNkw1Ny40MTEgMTU2Ljc3NEM1Ny42MDQ3IDE1Ni44MzEgNTcuNzk4MyAxNTYuODg3IDU3Ljk5MTkgMTU2Ljk0Mkw1OC4xMDQ2IDE1Ni45NzVDNTguNjA3MiAxNTcuMTE4IDU5LjExMTggMTU3LjI1NSA1OS42MTgzIDE1Ny4zODdMNTkuNjkyIDE1Ny40MDZMNTkuODA2MSAxNTcuNDM3TDU5LjgyNDUgMTU3LjQ0MUM2MC4wMjk3IDE1Ny40OTQgNjAuMjM1MSAxNTcuNTQ2IDYwLjQ0MDggMTU3LjU5OEw2MC42MjE5IDE1Ny42NDRMNjAuNzMwOCAxNTcuNjcxTDYwLjc4NTMgMTU3LjY4NEw2MS4zMTg0IDE1Ny44MTNMNjEuNDExMiAxNTcuODM2TDYxLjYzNzIgMTU3Ljg4OUM2MS42Nzg0IDE1Ny44OTkgNjEuNzIwNCAxNTcuOTA4IDYxLjc2MjMgMTU3LjkxN0w2Mi4yMDg1IDE1OC4wMjFMNjIuMzUwNiAxNTguMDUzTDYyLjUzODQgMTU4LjA5NUM2Mi42MTk0IDE1OC4xMTMgNjIuNzAxMSAxNTguMTMgNjIuNzgyOCAxNTguMTQ4QzYyLjg5MzMgMTU4LjE3MiA2My4wMDM3IDE1OC4xOTcgNjMuMTE1NiAxNTguMjIyTDYzLjE3NiAxNTguMjM1TDYzLjQ5NTUgMTU4LjMwM0w2My44NTMzIDE1OC4zNzZMNjQuMDU4OCAxNTguNDE4SDY0LjA3NDJMNjQuMzEyOCAxNTguNDY3QzY0LjUzMzIgMTU4LjUxIDY0Ljc1NCAxNTguNTUzIDY0Ljk3NTQgMTU4LjU5NUw2NS4zODg1IDE1OC42NjlMNjUuNzMzOCAxNTguNzMyTDY1LjkzMjYgMTU4Ljc2N0w2Ni4wMTEzIDE1OC43ODFMNjYuMTgxNCAxNTguODExTDY2LjM3MDYgMTU4Ljg0NEw2Ni45MjU4IDE1OC45MzdMNjcuMDYzNSAxNTguOTU5TDY3LjMyNDEgMTU5LjAwMUw2Ny41NDUgMTU5LjAzNkM2Ny42NzMxIDE1OS4wNTcgNjcuODAxMiAxNTkuMDc2IDY3LjkzIDE1OS4wOTVMNjguMDAzNyAxNTkuMTA2TDY4LjA4NTQgMTU5LjExOUw2OC4xODI2IDE1OS4xMzNDNjguNDI4IDE1OS4xNjggNjguNjcxIDE1OS4yMDMgNjguOTExNSAxNTkuMjM3TDY5LjA4NDUgMTU5LjI2MUw2OS4zNTEgMTU5LjI5N0w2OS4zOTgyIDE1OS4zMDNMNjkuOTI3NSAxNTkuMzcxTDcwLjAwOTMgMTU5LjM4MUw3MC4wNjMgMTU5LjM4OEw3MC40MDgzIDE1OS40MjlDNzEuMDA2MiAxNTkuNSA3MS42MDQ1IDE1OS41NjUgNzIuMjAzMyAxNTkuNjIzQzcyLjQwMzYgMTU5LjY0MiA3Mi42MDM5IDE1OS42NjEgNzIuODA0OCAxNTkuNjc5TDczLjE1NDYgMTU5LjcxTDczLjIzMzQgMTU5LjcxNkw3My4yNjU4IDE1OS43MkM3My40OTYyIDE1OS43MzkgNzMuNzI4MSAxNTkuNzU3IDczLjk2MDEgMTU5Ljc3NEw3NC4wMjEyIDE1OS43NzlDNzYuMDAwMiAxNTkuOTI2IDc4LjAwMjIgMTYwIDc5Ljk4NDkgMTYwQzg1Ljg3NjMgMTYwLjAwMiA5MS43NTAxIDE1OS4zNTcgOTcuNTAwNyAxNTguMDc2QzEwMy4wNzIgMTU2LjgzIDEwOC40OTQgMTU0Ljk4OCAxMTMuNjcxIDE1Mi41ODFDMTE1LjcyNiAxNTEuNjI2IDExNy43NDEgMTUwLjU4MiAxMTkuNzE1IDE0OS40NDlDMTE5LjcyOCAxNDkuNDQyIDExOS43NDEgMTQ5LjQzNyAxMTkuNzU0IDE0OS40M0MxMjAuODExIDE0OC44MjMgMTIxLjg1MiAxNDguMTkzIDEyMi44NzcgMTQ3LjUzOUwxMjIuOTEzIDE0Ny41MTZDMTIzLjE3MyAxNDcuMzUgMTIzLjQzMiAxNDcuMTgzIDEyMy42OSAxNDcuMDE0TDEyMy44NjMgMTQ2LjkwMUMxMjQuMDc2IDE0Ni43NjEgMTI0LjI4NyAxNDYuNjIgMTI0LjQ5OCAxNDYuNDc5TDEyNC43MjggMTQ2LjMyNUMxMjQuOTI0IDE0Ni4xOTIgMTI1LjExOSAxNDYuMDU5IDEyNS4zMTIgMTQ1LjkyNkMxMjUuNDkyIDE0NS44MDIgMTI1LjY3MiAxNDUuNjc2IDEyNS44NTEgMTQ1LjU1QzEyNS45ODggMTQ1LjQ1NCAxMjYuMTI1IDE0NS4zNTkgMTI2LjI2MSAxNDUuMjYyQzEyNi40NDUgMTQ1LjEzMSAxMjYuNjI4IDE0NSAxMjYuODEgMTQ0Ljg2OEwxMjYuOTg5IDE0NC43MzhDMTI3LjE4OSAxNDQuNTkxIDEyNy4zODkgMTQ0LjQ0MyAxMjcuNTg3IDE0NC4yOTZMMTI3LjY3MiAxNDQuMjMzQzEyNy44MDggMTQ0LjEzMyAxMjcuOTQ0IDE0NC4wMzMgMTI4LjA3OSAxNDMuOTMxQzEzMi41MzggMTQwLjU3IDEzNi42MzYgMTM2Ljc1NCAxNDAuMzA2IDEzMi41NDVDMTQwLjQ4NSAxMzIuMzQgMTQwLjY2MyAxMzIuMTM0IDE0MC44NCAxMzEuOTI2TDE0MC44OSAxMzEuODY4QzE0MS4wNiAxMzEuNjY4IDE0MS4yMjkgMTMxLjQ2OCAxNDEuMzk2IDEzMS4yNjlMMTQxLjQ2MyAxMzEuMTg5QzE0MS42MjkgMTMwLjk4OSAxNDEuNzk1IDEzMC43ODggMTQxLjk2IDEzMC41ODdMMTQyLjAxOSAxMzAuNTEzQzE0Mi4xODggMTMwLjMwNyAxNDIuMzU1IDEzMC4xIDE0Mi41MiAxMjkuODkzTDE0Mi41NTIgMTI5Ljg1MkMxNDMuMTY5IDEyOS4wOCAxNDMuNzgxIDEyOC4yODIgMTQ0LjM3MSAxMjcuNDgzTDE0NC4zOTkgMTI3LjQ0NUMxNDQuOTg4IDEyNi42NDYgMTQ1LjU3IDEyNS44MjUgMTQ2LjEyNyAxMjUuMDExTDE0Ni4xMzUgMTI0Ljk5OUwxNDYuMTUxIDEyNC45NzZDMTQ2LjMwNCAxMjQuNzUyIDE0Ni40NTYgMTI0LjUyNyAxNDYuNjA2IDEyNC4zMDFMMTQ2LjY0OSAxMjQuMjM2QzE0Ni43OTYgMTI0LjAxNCAxNDYuOTQzIDEyMy43OTEgMTQ3LjA5IDEyMy41NjdMMTQ3LjEzNCAxMjMuNUMxNDcuMjgxIDEyMy4yNzMgMTQ3LjQyOCAxMjMuMDQ1IDE0Ny41NzYgMTIyLjgxNkwxNDcuNiAxMjIuNzc4QzE0OC44MzMgMTIwLjgzMiAxNDkuOTk2IDExOC44MDkgMTUxLjA2IDExNi43NjFMMTUxLjA2OSAxMTYuNzQ0TDE1MS4wNzQgMTE2LjczNUMxNTEuMjAyIDExNi40ODkgMTUxLjMyOCAxMTYuMjQyIDE1MS40NTMgMTE1Ljk5M0wxNTEuNDc3IDExNS45NDZDMTUxLjYwMyAxMTUuNjk2IDE1MS43MjcgMTE1LjQ0NSAxNTEuODUyIDExNS4xOTNMMTUxLjg2NSAxMTUuMTY1QzE1Mi40NjMgMTEzLjk0NiAxNTMuMDMyIDExMi43MDMgMTUzLjU2OSAxMTEuNDQ5QzE1My42MDYgMTExLjM2MiAxNTMuNjQyIDExMS4yNzYgMTUzLjY4MSAxMTEuMTlDMTUzLjczMiAxMTEuMDY4IDE1My43ODIgMTEwLjk0NiAxNTMuODMzIDExMC44MjJDMTUzLjg5NCAxMTAuNjc0IDE1My45NTUgMTEwLjUyOSAxNTQuMDE2IDExMC4zODRDMTU0LjA2OSAxMTAuMjU0IDE1NC4xMjIgMTEwLjEyMyAxNTQuMTc0IDEwOS45OTNDMTU0LjIyNiAxMDkuODYzIDE1NC4yODUgMTA5LjcyMSAxNTQuMzM5IDEwOS41ODVDMTU0LjM5OSAxMDkuNDMzIDE1NC40NTggMTA5LjI4MyAxNTQuNTE4IDEwOS4xMzFDMTU0LjU1OSAxMDkuMDI2IDE1NC42MDEgMTA4LjkyIDE1NC42NDEgMTA4LjgxNFYxMDguODA5QzE1NC42NTEgMTA4Ljc4MyAxNTQuNjYxIDEwOC43NTcgMTU0LjY3MiAxMDguNzM1QzE1NC42NzIgMTA4LjcyNyAxNTQuNjc4IDEwOC43MTcgMTU0LjY4MSAxMDguNzA3QzE1NC44NTYgMTA4LjE4MyAxNTQuNyAxMDcuODA4IDE1NC41NCAxMDcuNTg0QzE1NC4wNzIgMTA2LjkzNyAxNTIuOTY5IDEwNi4zMDUgMTQ1LjI0NSAxMDYuMzA1QzE0NS4xMzUgMTA2LjMwNSAxMzMuNjU5IDEwNi4zNjIgMTEyLjMxNyAxMDguNDA4QzEwMy43NDYgMTA5LjIzMSA5My43MTc3IDExMC40MDIgODMuNjQxMiAxMTEuNjkxQzg2LjM2NTQgMTA5LjU1NiA4OC42MTQ3IDEwNy41NzggOTAuMjQ0IDEwNS42MDdDOTEuMzc1NyAxMDQuMjM3IDkyLjE4MTkgMTAyLjkwNyA5Mi42OTA2IDEwMS41NjdDMTAzLjEwOSA5OS4xMTA2IDExMy45ODYgOTYuNjM5MiAxMjQuMjQ1IDk0LjQzNTJDMTQwLjUzMiA5MC45MzY1IDE1Mi41NSA4OC4wOTcgMTU2LjM5NCA4Ni44MzkyQzE1Ny4xMTcgODYuNjAyOCAxNTguNTQ0IDg2LjAwOTMgMTU5LjMwNyA4NS4yODM5TDE1OS4zMTIgODUuMjc4OEMxNTkuNTk4IDg1LjAwMiAxNTkuNzkxIDg0LjY0MzcgMTU5Ljg2NSA4NC4yNTNDMTU5Ljg3OSA4NC4yMDUxIDE1OS44ODkgODQuMTU1NyAxNTkuODkyIDg0LjEwNTdWODQuMTAxM1Y4NC4wOTFDMTU5Ljg5MiA4NC4wNjc0IDE1OS44OTIgODQuMDQzOCAxNTkuODkyIDg0LjAxNzNDMTU5Ljg5MiA4NC4wMTAyIDE1OS44OTIgODQuMDAzMSAxNTkuODkyIDgzLjk5NkMxNTkuOTI0IDgzLjM0NTcgMTU5Ljk0OSA4Mi42ODgxIDE1OS45NjUgODIuMDM5M1Y4MS45MTcxQzE1OS45NzIgODEuNjM5NSAxNTkuOTc2IDgxLjM2NDggMTU5Ljk4MSA4MS4wOTE2TDE1OS45OTQgODAuOTgyNlpNNjAuMTI0OSAxMy44MTQ3QzU2Ljg2MjUgMTQuNjk4MyA1Mi41MzMzIDE1LjE4MTQgNDguMjQ2NyAxNS4xNDUzQzQ0Ljg5MzggMTUuMTE3NCA0MC4zNDI5IDE0LjY2NTkgMzcuNzMyOSAxNC4yMjQ4QzQxLjgzMTYgMTMuNDQ1NyA1Mi40NTgyIDExLjU5MzcgNjUuOTI0NSAxMC41MjA3QzY0Ljk3MjUgMTIuMjYwOCA2MS45ODU0IDEzLjMxMjQgNjAuMTI0OSAxMy44MTQ3Wk04MS4xNzE4IDE4LjM4MDRDOTAuOTA0NSAxNC45NTM5IDk1LjQ1NTMgMTEuOTQxMyA5Ny41NjYyIDkuOTg1MzdDMTA2LjcyOCAxMC40NzE0IDExMy44NTIgMTEuNTk3NCAxMTguODM4IDEzLjM1MzdDMTIwLjYgMTMuOTc0NSAxMjEuNjg4IDE0LjY3MjYgMTIxLjkgMTUuMzE5MUMxMjEuOTM4IDE1LjQ1OTggMTIxLjk2NCAxNS42MDM0IDEyMS45NzkgMTUuNzQ4NFYxNS43NzVDMTIxLjk3OSAxNS43ODk3IDEyMS45NzkgMTUuODAzNyAxMjEuOTgyIDE1LjgxOTlDMTIyLjA4NCAxNy4zMDM3IDEyMS4zODQgMTkuNjU4IDExNy40NzIgMjIuNDQ3NUMxMTcuMzg0IDIyLjUxMDggMTE3LjI5NCAyMi41NzQyIDExNy4yMDMgMjIuNjM3NUwxMTcuMTEzIDIyLjY5OTNMMTE2LjkyMyAyMi44MjlMMTE2LjgxMyAyMi45MDI2TDExNi42MzUgMjMuMDIxOUwxMTYuNTE0IDIzLjEwMDdMMTE2LjMzNSAyMy4yMTc4TDExNi4yMDkgMjMuMjk4OEwxMTYuMDI0IDIzLjQxNTlMMTE1Ljg5NiAyMy40OTY5TDExNS42OTkgMjMuNjE5MUwxMTUuNTc1IDIzLjY5MjhMMTE1LjM1IDIzLjgyOTdMMTE1LjI0NSAyMy44OTMxQzExNS4xMzQgMjMuOTYwMyAxMTUuMDIxIDI0LjAyNzYgMTE0LjkwNiAyNC4wOTQ4TDExNC44NzYgMjQuMTEyNUMxMTQuNzcxIDI0LjE3MzkgMTE0LjY2NSAyNC4yMzU1IDExNC41NTcgMjQuMjk3M0wxMTQuNDI0IDI0LjM3MUwxMTQuMTk4IDI0LjQ5OThMMTE0LjA1MSAyNC41ODAxQzExMy45NzggMjQuNjIyMSAxMTMuOTA0IDI0LjY2NDggMTEzLjgyNCAyNC43MDY4TDExMy42NzEgMjQuNzkyMkwxMTMuNDQ1IDI0LjkxNTlMMTEzLjI4NSAyNS4wMDI4QzExMy4yMTEgMjUuMDQ0OCAxMTMuMTMgMjUuMDg2IDExMy4wNTIgMjUuMTI4TDExMi44OTIgMjUuMjEzNEwxMTIuNjQzIDI1LjM0NTJMMTEyLjQ5IDI1LjQyNTVMMTEyLjIwNCAyNS41NzI4TDExMi4wNzkgMjUuNjM2OUMxMTEuOTQgMjUuNzA4NSAxMTEuOCAyNS43OCAxMTEuNjU5IDI1Ljg1MTFDMTA1LjI2IDI5LjA4NzYgOTUuOTY0OCAzMi42MjAyIDg0LjAzMTQgMzYuMzUxNUM4Mi42NDY4IDM2Ljc4NTUgODEuMjU5MSAzNy4yMTYzIDc5Ljg2ODYgMzcuNjQzOUM4MC40MjE5IDM2LjkwOTIgODAuOTA3NiAzNi4xMjU5IDgxLjMxOTggMzUuMzAzNkM4Mi40OTc4IDMyLjkyNSA4Mi43MTg3IDMwLjU3NTkgODEuOTg2OCAyOC4zMjI1QzgxLjMwOCAyNi4yMzA0IDgwLjA5OSAyNC43MDkgNzguMjkxNSAyMy42NzE0Qzc2LjU5MjIgMjIuNjk1NyA3NC4zNDM2IDIyLjE1IDcxLjQxNjMgMjIuMDAzNEM3MS4xMTM0IDIxLjk4ODcgNzAuODAzOSAyMS45Nzc5IDcwLjQ4NzggMjEuOTcxQzc0LjUwMTkgMjAuNjc4NyA3OC4xNTYgMTkuNDQwOCA4MS4xNzE4IDE4LjM3ODlWMTguMzgwNFpNNzQuMzI0NSA3Mi42ODU2TDcxLjUyNjcgNzMuMDQ3OUM0OC4wOTA2IDc2LjA3OTYgMjcuODUwNyA3OC42OTgzIDE3LjUwNjkgNzkuNjg4N0MxMS40OTUzIDgwLjI2MzkgNS44ODY0NCA4MC41NjI5IDMuNjY1MTMgODAuNTUwM0MxLjg4NTU4IDgwLjU0MDggMS4yNzA3OSA4MC4xMDg1IDEuMjM1NDUgNzkuODg3NkMxLjI1ODI4IDc5Ljc2MTYgMS41NDgzNyA3OS4wMjgyIDUuMDY0MDMgNzcuMTAxOEM3LjgwMjIgNzUuNjAxNyAxMi4xNDI1IDczLjU2MTkgMTguMzMzNyA3MC44NjU5QzMyLjE0NzUgNjQuODQ5NSA0Ni43MDI4IDU4LjA5NDUgNTYuNDgxMSA1My40ODY4QzU2Ljk4MTggNTMuMjUxMiA1Ny40NzI5IDUzLjAxNjMgNTcuOTU4MSA1Mi43ODIxQzYxLjAxOCA1Mi4zODA1IDY0LjE5NDUgNTEuOTY2NCA2Ny40ODc1IDUxLjUzOThDNzguNjk5NCA1MC4wODk4IDg5LjcyMjggNDguNDY2IDEwMC40MjggNDYuODY5NUM5OC4wNDQ4IDQ4LjM1NDEgOTYuMTg4NiA0OS45OTYzIDk0Ljg5NzIgNTEuNzY1MUM5Mi45MzIxIDU0LjQ1ODEgOTIuMjEzNSA1Ny41MDkxIDkyLjc2MjEgNjAuODM4M0M5My4zMzc4IDY0LjMyNDUgOTUuNjgxNCA2Ny4wOTc3IDk4Ljk3MDIgNjkuMzIxN0M4OS4zMjg4IDcwLjY3MyA4MC42Mjg0IDcxLjg2ODkgNzQuMzI1MiA3Mi42ODQxTDc0LjMyNDUgNzIuNjg1NlpNMTEzLjE0OSAxNTEuNDkyQzEwOC4wNTMgMTUzLjg2MSAxMDIuNzE3IDE1NS42NzQgOTcuMjMyNyAxNTYuOUM5MS41NzE4IDE1OC4xNjEgODUuNzg5NiAxNTguNzk2IDc5Ljk5MDEgMTU4Ljc5NEM3OC43OTI5IDE1OC43OTQgNzcuNTg4NCAxNTguNzY1IDc2LjM4MjQgMTU4LjcxMUM3Ni44NDcgMTU4LjUzMSA3Ny4zNTM1IDE1OC4zNDMgNzcuODU0OSAxNTguMTZDNzkuODQ5NCAxNTcuNDI4IDgyLjMzMTQgMTU2LjUxNyA4NC4xNTE0IDE1NS4zMjRDODUuNjQwOSAxNTQuMzQ4IDg2LjUyMDcgMTUzLjI4MyA4Ni43ODY1IDE1Mi4xNDFDOTAuMDM5NCAxNTEuNjU0IDkzLjM4MzUgMTUxLjA4MSA5Ni43OTM5IDE1MC40MDdDMTAxLjk4NCAxNDkuMzgyIDEwNy41MTggMTQ3Ljg4NSAxMTMuMDA2IDE0Ni4wNEMxMTMuNzA0IDE0Ni4zNiAxMTQuMzQgMTQ2LjYzNSAxMTQuODY1IDE0Ni44NjNDMTE1LjIzNCAxNDcuMDIyIDExNS41NTIgMTQ3LjE1NyAxMTUuNzc3IDE0Ny4yNjRDMTE3LjI3NiAxNDcuOTYxIDExOC4wNTkgMTQ4LjQ0NyAxMTguNDYzIDE0OC43NjdDMTE2LjcyNiAxNDkuNzQyIDExNC45NTUgMTUwLjY1IDExMy4xNDkgMTUxLjQ5MUwxMTMuMTQ5IDE1MS40OTJaTTExMi40MzkgMTA5LjcwMkMxMzAuMjk4IDEwNy45ODkgMTQyLjQxMiAxMDcuNjA0IDE0NS4yNDcgMTA3LjYwNEMxNDguMjE1IDEwNy42MDQgMTUwLjM0MiAxMDcuNjkzIDE1MS43NDkgMTA3Ljg3OEMxNTMuMDQ4IDEwOC4wNDkgMTUzLjQxNCAxMDguMjY4IDE1My41MDIgMTA4LjM0MVYxMDguMzQ5TDE1My40ODMgMTA4LjRDMTUzLjAzNCAxMDkuNDIyIDE1MS44MSAxMDkuOTUzIDE0OS41MSAxMTAuODc3QzE0OC45MTUgMTExLjExNSAxNDcuNDQ5IDExMS42MDMgMTQ1LjQyIDExMi4yNzZDMTQwLjgzNSAxMTMuOCAxMzMuMTYgMTE2LjM1MSAxMjUuMDI2IDExOS41MjdDMTE4LjUxNCAxMjIuMDcgMTEzLjQgMTI0Ljc1NSAxMDkuODI1IDEyNy40OThDMTA4Ljg3OCAxMjguMjE4IDEwNy45ODQgMTI5LjAwNSAxMDcuMTUxIDEyOS44NTVDOTkuODYxOSAxMzAuNDA4IDkxLjc2ODEgMTMxLjE4NiA4My44NDIyIDEzMi4yNzNDNTguODY1MSAxMzUuNjk3IDM3LjQ0MTMgMTM5LjQ4NCAzMy4wNzE2IDE0MC4zMTFDMzIuNzMyMSAxNDAuMzc1IDMyLjQyNTkgMTQwLjQyOSAzMi4xNDc1IDE0MC40NzVDMzYuNjI5OSAxMzguNzcgNDIuMzcyMSAxMzYuNDI1IDUyLjA4NzEgMTMxLjYxNEM2Mi40MDUxIDEyNi41MDMgNjYuNTU2MiAxMjQuMzEgNzguMDAzNiAxMTUuOTU1Qzc5LjI4NjcgMTE1LjAxOSA4MC41MDYyIDExNC4xMTggODEuNjYyMSAxMTMuMjUyQzkyLjQ0MTggMTExLjg1OCAxMDMuMjc0IDExMC41NzkgMTEyLjQ0IDEwOS43TDExMi40MzkgMTA5LjcwMlpNMTU2LjAwNyA4NS42OTQ4QzE1MC4zNjkgODcuNTM1OCAxMzAuMDcyIDkxLjk0OTEgMTIzLjk4NiA5My4yNTdDMTEzLjk1MSA5NS40MTMxIDEwMy4zMjQgOTcuODIyNiA5My4xMTI1IDEwMC4yMjhDOTMuNDkyNCA5OC41NTYxIDkzLjQzNDMgOTYuODQwMyA5Mi45MzU4IDk0Ljk5MzRDOTIuNTIyIDkzLjQ2MDkgOTEuNjYwNiA5Mi4wMzMgOTAuMzc2NiA5MC43NTAyQzg5LjEyNDkgODkuNDk4NCA4Ny40OTExIDg4LjQxMDcgODUuNTI5NyA4Ny41MjE5QzgxLjQ2NyA4NS42ODA4IDc2LjIyMDQgODQuNzgyNCA3MC4zNTc1IDg0LjkyNjhDNjYuNjc2MiA4NS4wMTczIDYzLjExNzggODUuMTgxNiA1OS42MzM4IDg1LjQyNDZDNjQuODE0OSA4NC4wOTEgNzAuMTc3OSA4Mi43NDkyIDc1LjY1NzEgODEuNDI4OUM4Ni4zNDQ4IDc4Ljg1MTUgOTcuNTU5NiA3Ni4yOTgzIDEwOC41NzYgNzMuODA1NkMxMTQuNjUzIDc1Ljg0NzcgMTIxLjI2NiA3Ny4wNzMgMTI2LjA3IDc3Ljk2MzNDMTI2LjkzNSA3OC4xMjM5IDEyNy43NTIgNzguMjc0OCAxMjguNDg0IDc4LjQxNjJDMTMxLjU3MiA3OS4wMTIgMTM1Ljc3OSA3OS42ODk1IDE0MC4yMzMgODAuNDA0NUMxNDcuMDQxIDgxLjUwMTggMTU0LjA4MSA4Mi42MzU4IDE1Ny45OTggODMuNjE1MkMxNTguNTU1IDgzLjc1NDQgMTU4LjYzNSA4My45MjYgMTU4LjY0NCA4NC4wMzA2QzE1OC42MjMgODQuMTc5NCAxNTguNTUzIDg0LjMxNzEgMTU4LjQ0NSA4NC40MjE2QzE1Ny45NSA4NC44OTQ0IDE1Ni44MiA4NS40MjkgMTU2LjAwNyA4NS42OTQ4SDE1Ni4wMDdaXCIgfSkgfSksXG4gICAgICAvKiBAX19QVVJFX18gKi8gYyhcbiAgICAgICAgXCJwYXRoXCIsXG4gICAgICAgIHtcbiAgICAgICAgICBkOiBcIk0xNTkuOTk0IDgwLjk4MjZDMTU5Ljk5OCA4MC42NTcxIDE2MCA4MC4zMzggMTYwIDgwLjAyNTNDMTYwIDc5LjgxMjIgMTYwIDc5LjU5OTQgMTYwIDc5LjM4NjhDMTYwIDc5LjMxMzIgMTYwIDc5LjIzOTUgMTYwIDc5LjE3MTFDMTYwIDc5LjAzMTkgMTYwIDc4Ljg5MjcgMTU5Ljk5NSA3OC43NTQyQzE1OS45OTUgNzguNjYyOSAxNTkuOTk1IDc4LjU3MjQgMTU5Ljk5IDc4LjQ4MThDMTU5Ljk5IDc4LjM2MzIgMTU5Ljk4NSA3OC4yNDQ3IDE1OS45ODIgNzguMTI1NEMxNTkuOTgyIDc4LjAyNDUgMTU5Ljk3NyA3Ny45MjI5IDE1OS45NzUgNzcuODIxMkMxNTkuOTczIDc3LjcxOTYgMTU5Ljk2OCA3Ny42MDk5IDE1OS45NjUgNzcuNTAzOEwxNTkuOTU0IDc3LjE3MDJDMTU5Ljk1NCA3Ny4wNzk3IDE1OS45NDggNzYuOTg5MSAxNTkuOTQ0IDc2Ljg5ODVDMTU5Ljk0IDc2Ljc3NDEgMTU5LjkzNCA3Ni42NDk2IDE1OS45MjkgNzYuNTI1MkMxNTkuOTI5IDc2LjQ2NjMgMTU5LjkyNCA3Ni40MDczIDE1OS45MjEgNzYuMzQ3N0MxNTkuODg4IDc1LjYyMDEgMTU5Ljg0NiA3NC44OTM1IDE1OS43OTMgNzQuMTY3OVY3NC4xMzg1QzE1OS43NzkgNzMuOTUxNCAxNTkuNzY1IDczLjc2MzcgMTU5Ljc1IDczLjU3NjZWNzMuNTQ5NEMxNTkuNDE1IDY5LjM2MDUgMTU4Ljc1IDY1LjIwNDcgMTU3Ljc2MiA2MS4xMjA0TDE1Ny43MjYgNjAuOTY2NUwxNTcuNjg0IDYwLjgwMDhDMTU3LjYzNyA2MC42MDcxIDE1Ny41ODggNjAuNDE0OSAxNTcuNTM2IDYwLjIyMkwxNTcuNTE0IDYwLjEzMTRDMTU3LjUwOSA2MC4xMTM3IDE1Ny41MDUgNjAuMDk2IDE1Ny41IDYwLjA3ODRDMTU3LjQ1NiA1OS45MDMxIDE1Ny40MSA1OS43MjgzIDE1Ny4zNjMgNTkuNTU0QzE1Ny4zNjMgNTkuNTQ2NyAxNTcuMzYgNTkuNTM5MyAxNTcuMzU4IDU5LjUzMTJDMTU3LjMxOSA1OS4zODM5IDE1Ny4yOCA1OS4yMzgxIDE1Ny4yNCA1OS4wOTM4TDE1Ny4yMDMgNTguOTUyNEMxNTcuMTk2IDU4LjkyOTYgMTU3LjE5IDU4LjkwNjcgMTU3LjE4NCA1OC44ODM5QzE1Ny4xNjMgNTguODEwMyAxNTcuMTQzIDU4LjczMDcgMTU3LjEyMSA1OC42NTQyQzE1Ny4wODkgNTguNTM3OCAxNTcuMDU2IDU4LjQyMSAxNTcuMDIzIDU4LjMwMzZDMTU3LjAxNSA1OC4yNzcxIDE1Ny4wMDkgNTguMjUwNiAxNTcuMDAxIDU4LjIyNDFMMTU2Ljk1MiA1OC4wNTE4QzE1Ni45NTIgNTguMDQ5OCAxNTYuOTUyIDU4LjA0NzggMTU2Ljk1MiA1OC4wNDU5QzE1Ni44NzggNTcuNzk3IDE1Ni44MDkgNTcuNTQ5NiAxNTYuNzM1IDU3LjMwMTRDMTU2LjczNCA1Ny4yOTQ3IDE1Ni43MzIgNTcuMjg4IDE1Ni43MyA1Ny4yODE1TDE1Ni42NTYgNTcuMDQzN0wxNTYuNjM3IDU2Ljk4NFY1Ni45NzUyQzE1Ni41ODUgNTYuODAyNCAxNTYuNTMzIDU2LjYyODggMTU2LjQ3OSA1Ni40NTQ1QzE1Ni40NzUgNTYuNDQxMyAxNTYuNDcxIDU2LjQyNzMgMTU2LjQ2NyA1Ni40MTRMMTU2LjQ0NSA1Ni4zNDA0QzE1Ni40MzcgNTYuMzE1NCAxNTYuNDI5IDU2LjI5MDMgMTU2LjQyMiA1Ni4yNjY4QzE1Ni40MDYgNTYuMjE2NyAxNTYuMzkxIDU2LjE2NjYgMTU2LjM3NSA1Ni4xMTk1QzE1Ni4zMzIgNTUuOTgzIDE1Ni4yODkgNTUuODQ3IDE1Ni4yNDUgNTUuNzExNUMxNTYuMjA5IDU1LjU5ODEgMTU2LjE3MyA1NS40ODQ3IDE1Ni4xMzYgNTUuMzcxM0wxNTYuMDc1IDU1LjE4MkMxNTYuMDYxIDU1LjEzODYgMTU2LjA0NiA1NS4wOTUxIDE1Ni4wMzIgNTUuMDUxN0MxNTUuOTkyIDU0LjkyOTQgMTU1Ljk1MSA1NC44MDY3IDE1NS45MSA1NC42ODM1TDE1NS45MDMgNTQuNjU5OUMxNTUuODgzIDU0LjU5OTUgMTU1Ljg2MyA1NC41MzkyIDE1NS44NDIgNTQuNDc4OEwxNTUuODAzIDU0LjM2MTdMMTU1LjczNCA1NC4xNTk5VjU0LjE0OTZDMTU1LjczNCA1NC4xNDUyIDE1NS43MyA1NC4xNCAxNTUuNzI5IDU0LjEzNDlDMTU1LjY2OSA1My45NTg2IDE1NS42MDggNTMuNzgyOSAxNTUuNTQ3IDUzLjYwNzZMMTU1LjUzMSA1My41NjI3QzE1NS41MDMgNTMuNDgyNCAxNTUuNDc1IDUzLjQwMTQgMTU1LjQ0NiA1My4zMjExTDE1NS4zOTggNTMuMTg0OUMxNTUuMzU3IDUzLjA3MSAxNTUuMzE2IDUyLjk1NjkgMTU1LjI3NSA1Mi44NDI1QzE1NS4yNDcgNTIuNzY4OCAxNTUuMjIgNTIuNjkgMTU1LjE5MiA1Mi42MTQyQzE1NS4xNzMgNTIuNTYwNCAxNTUuMTUzIDUyLjUwNzQgMTU1LjEzMyA1Mi40NTM3TDE1NS4xMjQgNTIuNDMwMUMxNTUuMTE4IDUyLjQxMDIgMTU1LjExIDUyLjM5MDMgMTU1LjEwMyA1Mi4zNzEyTDE1NS4wOTggNTIuMzU2NUMxNTUuMDc3IDUyLjMwMDUgMTU1LjA1NyA1Mi4yNDUzIDE1NS4wMzUgNTIuMTg5M0wxNTQuOTkgNTIuMDY3OEMxNTQuOTc3IDUyLjAzMTcgMTU0Ljk2MyA1MS45OTQxIDE1NC45NSA1MS45NjAzTDE1NC44OTEgNTEuODAxMkMxNTQuODgxIDUxLjc3NDcgMTU0Ljg3MSA1MS43NDgyIDE1NC44NjEgNTEuNzIyNEwxNTQuNzUgNTEuNDI3OUwxNTQuNzM5IDUxLjM5NzdDMTU0LjcyOCA1MS4zNzA0IDE1NC43MTcgNTEuMzQyNCAxNTQuNzA2IDUxLjMxNTJDMTU0LjY3NSA1MS4yMzQyIDE1NC42NDQgNTEuMTUzOSAxNTQuNjEzIDUxLjA3MzZDMTU0LjU4OSA1MS4wMTE4IDE1NC41NjYgNTAuOTQ5OSAxNTQuNTM5IDUwLjg4ODFMMTU0LjUxMyA1MC44MjAzTDE1NC40MTQgNTAuNTY4NUMxNTQuMzgyIDUwLjQ4NzUgMTU0LjM0OSA1MC40MDY1IDE1NC4zMTYgNTAuMzI1NUwxNTQuMjQyIDUwLjE0OTVMMTU0LjIwNyA1MC4wNjA0QzE1NC4xOTcgNTAuMDM2OCAxNTQuMTg4IDUwLjAxMjUgMTU0LjE3OCA0OS45ODY3TDE1NC4xMzYgNDkuODgyMUwxNTQuMDMyIDQ5LjYyOTZMMTUzLjk3NyA0OS40OTU1QzE1My45NDYgNDkuNDIxOSAxNTMuOTE1IDQ5LjM0ODMgMTUzLjg4NSA0OS4yNzQ2QzE1My44NDggNDkuMTg2MiAxNTMuODExIDQ5LjA5NzEgMTUzLjc3NSA0OS4wMDk1TDE1My42OTggNDguODI3NkMxNTMuNjg5IDQ4LjgwNzcgMTUzLjY4IDQ4Ljc4NzEgMTUzLjY3MiA0OC43NjY1QzE1My42NjQgNDguNzQ1OSAxNTMuNjQ2IDQ4LjcwNTQgMTUzLjYzMyA0OC42NzUyQzE1My41OCA0OC41NSAxNTMuNTI2IDQ4LjQyNTMgMTUzLjQ3MiA0OC4zMDExQzE1My40NTQgNDguMjU4NCAxNTMuNDM1IDQ4LjIxNjQgMTUzLjQxNyA0OC4xNzQ0TDE1My40MDEgNDguMTM2MUwxNTMuMjg0IDQ3Ljg2NjZMMTUzLjIgNDcuNjc4MUwxNTMuMTE5IDQ3LjQ5NjlMMTUzLjExMyA0Ny40ODI5TDE1Mi45ODkgNDcuMjA1M0MxNTIuOTYyIDQ3LjE0NDIgMTUyLjkzNCA0Ny4wODM4IDE1Mi45MDcgNDcuMDIzNEMxNTIuODk5IDQ3LjAwNjUgMTUyLjg5MSA0Ni45ODk2IDE1Mi44ODQgNDYuOTcyNkMxNTIuODc3IDQ2Ljk1NTcgMTUyLjg2MyA0Ni45MjcgMTUyLjg1MiA0Ni45MDQxTDE1Mi44MzcgNDYuODY4OEwxNTIuNzAyIDQ2LjU3NDJMMTUyLjY1NiA0Ni40NzU1TDE1Mi42NDEgNDYuNDQxN0MxNTIuNjM0IDQ2LjQyNjkgMTUyLjYyOCA0Ni40MTIyIDE1Mi42MiA0Ni4zOTc1TDE1Mi41OTggNDYuMzQ4OUwxNTIuNDM3IDQ2LjAwNUMxNTIuNDE3IDQ1Ljk2MjMgMTUyLjM5NyA0NS45MTk2IDE1Mi4zNzcgNDUuODc3NkwxNTIuMzEzIDQ1Ljc0MTRDMTUyLjI4OCA0NS42OTEzIDE1Mi4yNjUgNDUuNjQwNSAxNTIuMjM5IDQ1LjU4OTdMMTUyLjE4OSA0NS40ODU4QzE1Mi4xNDYgNDUuMzk2IDE1Mi4xMDQgNDUuMzA2MSAxNTIuMDYgNDUuMjE2M0MxNTEuOTk0IDQ1LjA4MTMgMTUxLjkyOCA0NC45NDY1IDE1MS44NjIgNDQuODEyQzE1MS44MzIgNDQuNzQ5NCAxNTEuODAxIDQ0LjY4NjggMTUxLjc3IDQ0LjYyNDJDMTUxLjc2MyA0NC42MDggMTUxLjc1NSA0NC41OTE4IDE1MS43NDYgNDQuNTc1NkMxNTEuNjk2IDQ0LjQ3MzMgMTUxLjY0NSA0NC4zNzE2IDE1MS41OTQgNDQuMjdMMTUxLjU2NyA0NC4yMTYzQzE1MS41NTkgNDQuMjAwOCAxNTEuNTUxIDQ0LjE4NTMgMTUxLjU0NCA0NC4xNzA2TDE1MS40MTQgNDMuOTEyMUMxNTEuNDE0IDQzLjkwNTUgMTUxLjQwNyA0My44OTg5IDE1MS40MDMgNDMuODkyM0wxNTEuMzMgNDMuNzQ1TDE1MS4yNDEgNDMuNTcxMkMxNTEuMjE0IDQzLjUxOTYgMTUxLjE4OCA0My40Njc0IDE1MS4xNjEgNDMuNDE2NUwxNTEuMTUgNDMuMzk0NEwxNTEuMDg2IDQzLjI3MTVDMTUxLjA3OCA0My4yNTYgMTUxLjA3IDQzLjI0MTMgMTUxLjA2MiA0My4yMjU4TDE1MC44NDcgNDIuODEyQzE1MC44MTQgNDIuNzUwMSAxNTAuNzgyIDQyLjY4ODIgMTUwLjc0OSA0Mi42MjY0TDE1MC42NjUgNDIuNDcwM0MxNTAuNjA3IDQyLjM2MjMgMTUwLjU1IDQyLjI1NDIgMTUwLjQ5MiA0Mi4xNDYyTDE1MC40MDkgNDEuOTkxNkMxNTAuMzgzIDQxLjk0MyAxNTAuMzU2IDQxLjg5NTEgMTUwLjMzMSA0MS44NDQzQzE1MC4xNzYgNDEuNTYwNiAxNTAuMDIgNDEuMjc3OCAxNDkuODYyIDQwLjk5NkwxNDkuNzcyIDQwLjgzNDdMMTQ5LjczNCA0MC43NjdDMTQ5LjY3IDQwLjY1MzYgMTQ5LjYwNSA0MC41NDAxIDE0OS41NDEgNDAuNDI2N0wxNDkuNDk3IDQwLjM1MzFMMTQ5LjM0NiA0MC4wODg3QzE0OS4zNCA0MC4wNzkyIDE0OS4zMzQgNDAuMDY4OSAxNDkuMzI5IDQwLjA1ODVMMTQ5LjE2NSAzOS43Nzg3TDE0OS4wOTkgMzkuNjY0NkwxNDguOTYxIDM5LjQyODlMMTQ4Ljk1NSAzOS40MTkzTDE0OC43MzQgMzkuMDQzQzE0OC43MTMgMzkuMDA4NyAxNDguNjg5IDM4Ljk3NjYgMTQ4LjY2MSAzOC45NDczQzE0Ny44OTkgMzcuODQyNyAxNDUuNDk1IDM3LjM5MDYgMTQzLjU4OSAzNy4yMDcyQzE0MS41MjggMzcuMDA3NiAxMzcuOTg4IDM2LjkyODEgMTMyLjg3MSAzNy42ODA3QzEyNi42OTQgMzguNTg4NyAxMTguNjk1IDM5LjkwOTggMTExLjYwMyA0Mi4wNzkyQzEwOC41OTUgNDMuMDAwNSAxMDUuOTIzIDQ0LjAyMjYgMTAzLjYyOSA0NS4xMjg3QzkxLjg3MTkgNDYuODgzNSA3OS43MTg0IDQ4LjY5NzMgNjcuMzM2NiA1MC4yOTg5QzY1LjMxODMgNTAuNTYwMSA2My4zNDQ4IDUwLjgxNjYgNjEuNDE2MyA1MS4wNjg1QzY3LjY3OSA0Ny44NTU2IDcyLjQ0NTYgNDQuODE1NyA3NS44OTg2IDQxLjgzNzdDNzYuNzgwNyA0MS4wNzg2IDc3LjYxOSA0MC4yNjk5IDc4LjQwOTMgMzkuNDE1N0M4MC40MTY0IDM4LjgwMDUgODIuNDE3MyAzOC4xODE1IDg0LjQxMjEgMzcuNTU4NUM5Ni40MTMyIDMzLjgwMjggMTA1Ljc3IDMwLjI0NzUgMTEyLjIzIDI2Ljk4QzExMi4zNzggMjYuOTA2NCAxMTIuNTE3IDI2LjgzMjggMTEyLjY1OCAyNi43NTkxTDExMi43ODUgMjYuNjkzNkwxMTMuMDc5IDI2LjU0MjZMMTEzLjIzNSAyNi40NjAxTDExMy40ODkgMjYuMzI2OUwxMTMuNjUzIDI2LjIzODVDMTEzLjczMiAyNi4xOTY1IDExMy44MTIgMjYuMTUzOCAxMTMuODkgMjYuMTExMUwxMTQuMDUzIDI2LjAyMjdMMTE0LjI4NSAyNS44OTYxTDExNC40NDEgMjUuODA5MkwxMTQuNjc0IDI1LjY3ODhMMTE0LjgyMSAyNS41OTcxTDExNS4wNTIgMjUuNDY1M0wxMTUuMTkgMjUuMzg2NUMxMTUuMzAxIDI1LjMyMzEgMTE1LjQxIDI1LjI1OTYgMTE1LjUxOCAyNS4xOTU3TDExNS41NDggMjUuMTc4MUMxMTUuNjY3IDI1LjEwODkgMTE1Ljc4MiAyNS4wMzk2IDExNS44OTcgMjQuOTcwNEwxMTYuMDA0IDI0LjkwNjNMMTE2LjIzNyAyNC43NjQyTDExNi4zNjUgMjQuNjg1NEwxMTYuNTY4IDI0LjU1OTVMMTE2LjcgMjQuNDc1NUwxMTYuODkxIDI0LjM1NEwxMTcuMDIyIDI0LjI3MDFMMTE3LjIwOCAyNC4xNDkzTDExNy4zMzMgMjQuMDY2OEwxMTcuNTE4IDIzLjk0MzFMMTE3LjYzMyAyMy44Njk1QzExNy43IDIzLjgyNDYgMTE3Ljc2NSAyMy43Nzk2IDExNy44MyAyMy43MzRMMTE3LjkyNCAyMy42Njk5QzExOC4wMjIgMjMuNjAzNiAxMTguMTE2IDIzLjUzNzYgMTE4LjIwNiAyMy40NzE4QzEyMC42MjUgMjEuNzQ1NyAxMjMuNDYyIDE5LjAwMjYgMTIzLjIzOCAxNS43Mzk2QzEyMy4yMzggMTUuNzE1MyAxMjMuMjM1IDE1LjY5MTcgMTIzLjIzMyAxNS42NjZWMTUuNjM3M0MxMjMuMDk1IDE0LjE5MzkgMTIyLjAzOSAxMS45OTk0IDExNy45MTMgOS41NjQxNUwxMTcuODg5IDkuNTUwMTVMMTE3Ljc1MSA5LjQ2OTE1TDExNy42NjMgOS40MTkwOEwxMTcuNTY5IDkuMzY1MzJMMTE3LjQyNiA5LjI4NDMxTDExNy4zNzQgOS4yNTQ4NkwxMTcuMTcxIDkuMTQyMTlMMTE3LjE0NSA5LjEyODJMMTE3LjEzNSA5LjEyMzA0TDExNy4xMjIgOS4xMTU2OEMxMTYuNjggOC44ODU0MyAxMTYuMjM5IDguNjU4ODYgMTE1Ljc5NyA4LjQzNTk4TDExNS43NjcgOC40MjEyNUMxMTUuNDg5IDguMjgyMDcgMTE1LjIxIDguMTQzNjMgMTE0LjkzIDguMDA4MTNMMTE0Ljg4OCA3Ljk4NzUxTDExNC43MDIgNy44OTc2N0wxMTQuNDA4IDcuNzU3MDJIMTE0LjQwMUwxMTQuMjE2IDcuNjY5MzhMMTE0LjE1OSA3LjY0Mjg3TDExNC4wNzMgNy42MDE2M0wxMTMuODYgNy41MDE0OEwxMTMuNzkzIDcuNDY5ODJMMTEzLjU4MSA3LjM3MTg4TDExMy40OSA3LjMyOTlMMTEzLjQ3MSA3LjMyMTA3TDExMy4zMTYgNy4yNDc0M0wxMTMuMjQzIDcuMjE0MjlMMTEyLjk0OCA3LjA4MUwxMTIuODk0IDcuMDU1OTZMMTEyLjc4NSA3LjAwNzM2TDExMi42OTYgNi45NjY4NkwxMTIuMzg0IDYuODI3NjhMMTEyLjMxIDYuNzk0NTRMMTEyLjI4MSA2Ljc4MjAyTDExMi4xNTUgNi43MjYwNUwxMTEuODIzIDYuNTc4NzdMMTExLjY0NiA2LjUwNTEzTDExMS40NzYgNi40MzE0OUwxMTEuMTA4IDYuMjczMTdMMTEwLjgyMiA2LjE1MzEzTDExMC41MjcgNi4wMzAxNUwxMTAuMzQ0IDUuOTU2NTFMMTEwLjIyNyA1LjkwNzkxQzExMC4wOTIgNS44NTI2OCAxMDkuOTU2IDUuNzk4MTkgMTA5LjgyMSA1Ljc0MzY5TDEwOS42NzMgNS42ODU1MkwxMDkuMjY1IDUuNTIzNTFMMTA5LjEzMyA1LjQ3MTk2TDEwOC43MDIgNS4zMDQ4TDEwOC42MjkgNS4yNzYwOEMxMDguMzkgNS4xODQ3NiAxMDguMTQ5IDUuMDk0MTkgMTA3LjkwOCA1LjAwNDM1SDEwNy45QzEwNy40NjQgNC44NDIzNCAxMDcuMDI2IDQuNjgyNTQgMTA2LjU5MyA0LjUzMDFMMTA2LjU2NiA0LjUyMDUzTDEwNi4wNzQgNC4zNDg5NUwxMDYuMDEzIDQuMzI4MzNDMTA1Ljg0OCA0LjI3MTg3IDEwNS42ODQgNC4yMTYxNSAxMDUuNTIxIDQuMTYxMTdMMTA1LjQ4NyA0LjE0OTM4TDEwNS4yMzQgNC4wNjU0M0wxMDUuMDEzIDMuOTkxNzlMMTA0LjY1MSAzLjg3Mzk3TDEwNC4zOCAzLjc4NzA3TDEwNC4wNTEgMy42ODI1TDEwMy43MzQgMy41ODMwOUwxMDMuNDM5IDMuNDkxNzhMMTAyLjkwNiAzLjMzMDVMMTAyLjgzMiAzLjMwODQxTDEwMi44MDggMy4zMDEwNUwxMDIuMjkyIDMuMTQ5MzVIMTAyLjI4MUgxMDIuMjc0TDEwMi4yNTMgMy4xNDM0NkwxMDIuMTI2IDMuMTA3MzdDMTAxLjIyNyAyLjg0OTE0IDEwMC4zMjQgMi42MDYzOCA5OS40MTY0IDIuMzc5MDdDODQuNDY5NCAtMS4zMzgyNiA2OC43Njk4IC0wLjY4ODMyNyA1NC4xODEgNC4yNTE3NEw1NC4xNTgyIDQuMjU5ODRDNTMuOTkxMSA0LjMxNzI4IDUzLjgyMzIgNC4zNzQ3MiA1My42NTYxIDQuNDMzNjRMNTMuNTI2NSA0LjQ3ODU2QzUzLjM1NzEgNC41Mzc0NyA1My4xODg1IDQuNTk3ODUgNTMuMDE5OSA0LjY1ODI0TDUyLjkwNzMgNC42OThMNTIuMzc3OSA0Ljg5MDk0TDUyLjMxMDkgNC45MTUyNEM0Ny44NzY2IDYuNTUwOTcgNDMuNTk2NyA4LjU3ODQ0IDM5LjUyMiAxMC45NzM2TDM5LjQ4MDggMTAuOTk3OUMzOS4zNDc1IDExLjA3NiAzOS4yMTQyIDExLjE1NTUgMzkuMDgxNyAxMS4yMzVMMzguODc0MSAxMS4zNTg4QzM4Ljc2MDcgMTEuNDI2NSAzOC42NDc4IDExLjQ5NDcgMzguNTM1NCAxMS41NjM1QzM4LjQ0NTYgMTEuNjE4IDM4LjM1NTcgMTEuNjcyNSAzOC4yNjY3IDExLjcyNzdDMzguMTY2IDExLjc4OTEgMzguMDY1NCAxMS44NTA5IDM3Ljk2NDggMTEuOTEzM0MzNy44NjQyIDExLjk3NTYgMzcuNzYxNiAxMi4wMzk0IDM3LjY1NyAxMi4xMDQ3TDM3LjM4NTMgMTIuMjc0OEMzNy4yNzA1IDEyLjM0NyAzNy4xNTU5IDEyLjQyMDYgMzcuMDQxNSAxMi40OTU4TDM2LjgwNTIgMTIuNjQ1M0MzNi42NzAyIDEyLjczMTIgMzYuNTM2MiAxMi44MTc4IDM2LjQwMzIgMTIuOTA1MkwzNi4yMjIgMTMuMDIzQzM2LjAyNTcgMTMuMTUxMiAzNS44MzExIDEzLjI3OTggMzUuNjM4MiAxMy40MDg5QzM1LjMxMjggMTMuNjI2MSAzNS4xNTIzIDEzLjk3NDUgMzUuMjE5MiAxNC4zMTkxQzM1LjM0MjIgMTQuOTU0NiAzNi4wOTg0IDE1LjE3OTkgMzYuNjU3MiAxNS4yOTQxQzM5LjEyNDQgMTUuNzk4NSA0NC4zNjgxIDE2LjM2MTEgNDguMjQzIDE2LjM5MzVDNDguMzk0NyAxNi4zOTM1IDQ4LjU0NTcgMTYuMzkzNSA0OC42OTczIDE2LjM5MzVDNTIuOTQzNCAxNi4zOTM1IDU3LjIwNjMgMTUuODk2NSA2MC40NTc3IDE1LjAxNzlDNjIuNDE0NyAxNC40ODg1IDYzLjk5MTggMTMuODMwMSA2NS4xNDExIDEzLjA1OThDNjYuMjkwNCAxMi4yODk2IDY3LjAyODEgMTEuMzk2MyA2Ny4zMjg1IDEwLjQwODhDNzIuMDg0MSAxMC4wNTQ2IDc3LjE2ODcgOS44MDIgODIuNDI3OCA5LjczMDU3Qzg3LjIzODEgOS42NjQzIDkxLjY3NjEgOS43MTgwNSA5NS43NDE3IDkuODkxODVDOTIuNjg3NyAxMi4yODM3IDg3LjQ0OTkgMTQuODQxMiA4MC43NjAyIDE3LjE5ODRDNzYuNzM4NyAxOC42MTM4IDcxLjU4MTkgMjAuMzQzNiA2NS45NjEzIDIyLjEyMDVDNjEuMTMzNiAyMi40NzE4IDU1LjEwNDMgMjMuNDI2MiA0Ny42MTY1IDI0Ljc2NjRDNDAuMzQ1MSAyNi4wNjY5IDMyLjc0MzIgMjcuNzgwNSAyNi43NTQ0IDI5LjQ2NjlDMTkuMzY5NyAzMS41NDY1IDE1LjAyNzkgMzMuNDAwNyAxMy44NTA2IDM0Ljk3ODFMMTMuODM1MiAzNS4wMDAyTDEzLjQ0NDIgMzUuNTc5OEMxMy4zMTI0IDM1Ljc3NzEgMTMuMTgwNiAzNS45NzUyIDEzLjA1MSAzNi4xNzMzQzEzLjA0NzggMzYuMTc3MyAxMy4wNDQ5IDM2LjE4MTUgMTMuMDQyMiAzNi4xODU4QzEyLjgxNzYgMzYuNTI3NSAxMi41ODUgMzYuODg5MSAxMi4zMzAyIDM3LjI5MDRMMTIuMjY1NCAzNy4zOTQyTDEyLjE3NzEgMzcuNTM0OUMxMi4wODE5IDM3LjY4NjYgMTEuOTg3NCAzNy44Mzg1IDExLjg5MzYgMzcuOTkwN0wxMS44ODYzIDM4LjAwMjVMMTEuODgxMSAzOC4wMTEzTDExLjcyMzYgMzguMjY2MUwxMS41MjU1IDM4LjU5MjRDMTEuNTE3NCAzOC42MDQ5IDExLjUxIDM4LjYxNzQgMTEuNTAyNyAzOC42Mjk5TDExLjQ0NiAzOC43MjJMMTEuMjY2MyAzOS4wMjI0QzExLjIzMTcgMzkuMDc5OSAxMS4xOTc5IDM5LjEzOCAxMS4xNjMzIDM5LjE5NjJMMTEuMTI0MiAzOS4yNjFMMTEuMDAyNyAzOS40NjU3TDEwLjk4MjEgMzkuNTAxMUwxMC45Nzg1IDM5LjUwODVDMTAuODAzMiAzOS44MDY3IDEwLjYyNDMgNDAuMTE2IDEwLjQzNzMgNDAuNDQ0NEMxMC40MjI2IDQwLjQ3MDIgMTAuNDA3OCA0MC40OTYgMTAuMzkzOSA0MC41MTgxQzEwLjM3OTkgNDAuNTQwMSAxMC4zNTU2IDQwLjU4NDMgMTAuMzM2NCA0MC42MTg5TDEwLjI4NzggNDAuNzAyOUwxMC4yMDM5IDQwLjg1MDJMMTAuMDc4NyA0MS4wNzI2TDEwLjAzMDEgNDEuMTYwMkw5LjkzMTQ4IDQxLjMzNzdMOS44OTk4MiA0MS4zOTUxTDkuNzg0MjMgNDEuNjEwMUM5Ljc2NDM1IDQxLjY0NyA5Ljc0NDQ3IDQxLjY4MzggOS43MjM4NiA0MS43MjA2TDkuNjk0NCA0MS43NzUxQzkuNjM2NDkgNDEuODgxMSA5LjU3ODgxIDQxLjk4NzIgOS41MjEzOCA0Mi4wOTMyTDkuMzc0MTMgNDIuMzY1QzkuMjg3MjUgNDIuNTI5MiA5LjE5OTYzIDQyLjY5MjcgOS4xMTIwMiA0Mi44NTkxTDkuMTAxNzEgNDIuODc5N0M4Ljg5OTk3IDQzLjI2MzQgOC42OTgyNCA0My42NTU5IDguNDg0NzIgNDQuMDhMOC4zODUzMyA0NC4yNzU5QzguMjk5MTggNDQuNDQ4MiA4LjIxNDUxIDQ0LjYyMDYgOC4xMjYxNiA0NC43OTk1TDguMDA1NDEgNDUuMDQ2MkM3LjkyMTk3IDQ1LjIxNzUgNy44MzkwMiA0NS4zODk0IDcuNzU2NTYgNDUuNTYxN0M3LjcyNzg0IDQ1LjYyMjEgNy42OTk4NiA0NS42ODI0IDcuNjcxMTUgNDUuNzQyMUw3LjY0NTM4IDQ1Ljc5NzNDNy41MDE4MSA0Ni4wOTkyIDcuMzU4MjMgNDYuNDA3OCA3LjIxNzYxIDQ2LjcxNDFWNDYuNzE3OEM3LjA3NzcyIDQ3LjAyMjcgNi45Mzc4MyA0Ny4zMzI3IDYuODAxNjIgNDcuNjQwNUw2Ljc1ODkyIDQ3LjczN1Y0Ny43NDIyTDYuNzM4MyA0Ny43ODkzQzYuNjU2NTcgNDcuOTc0MSA2LjU3NjMyIDQ4LjE1NzUgNi40OTYwNyA0OC4zNDZMNi4zOTc0MSA0OC41NzhDNi4zMTg2MyA0OC43NjIxIDYuMjQxMzIgNDguOTQ2MiA2LjE2NDAxIDQ5LjEzMUw2LjA3NTY2IDQ5LjM0MjRDNS45NDI0IDQ5LjY2MjcgNS44MDkxMyA0OS45OTA0IDUuNjgxMDIgNTAuMzExNUw1LjY3MzY2IDUwLjMyODRDNS41NDMzNCA1MC42NTU0IDUuNDEzNzYgNTAuOTg1MyA1LjI4ODU5IDUxLjMxMDhMNS4yNTU0NiA1MS4zOTYyQzUuMTgxODQgNTEuNTk0MyA1LjEwODIxIDUxLjc5MzggNS4wMzAxNiA1MS45OTI3TDQuOTU2NTQgNTIuMTk5NkM0Ljg4NDM4IDUyLjM5NiA0LjgxMjk3IDUyLjU5MjMgNC43NDIyOCA1Mi43ODg3TDQuNjY4NjYgNTIuOTgyNEM0LjU0ODY1IDUzLjMxNjcgNC40Mjc5IDUzLjY1OTkgNC4zMTE1NyA1My45OTg2TDQuMzAxMjYgNTQuMDI4MUM0LjE4MTk5IDU0LjM3NzEgNC4wNjQ5MiA1NC43MjQgMy45NTQ0OCA1NS4wNTlMMy45NTA4IDU1LjA2OTRWNTUuMDc4OUwzLjk0NzEyIDU1LjA5MTRDMy44Nzg2NSA1NS4yOTk5IDMuODExNjUgNTUuNTA5NyAzLjc0NDY1IDU1LjcxODlMMy42ODM1NCA1NS45MTE4QzMuNjE5MjMgNTYuMTE1MSAzLjU1NTkyIDU2LjMxODUgMy40OTM1OCA1Ni41MjIzTDMuNDM2ODkgNTYuNzA4NkMzLjMzMTYgNTcuMDU1NCAzLjIyNjMxIDU3LjQxMDQgMy4xMjMyNCA1Ny43NjUzTDMuMTEzNjcgNTcuNzk4NUMzLjAwOTEyIDU4LjE2IDIuOTA4MjUgNTguNTIwMSAyLjgxMjUzIDU4Ljg2OTJDMi44MTI4MiA1OC44NzA0IDIuODEyODIgNTguODcxNyAyLjgxMjUzIDU4Ljg3MjlWNTguODgwMkMyLjc2Nzg3IDU5LjA0NjIgMi43MjMyIDU5LjIxMjEgMi42Nzg1MyA1OS4zNzhMMi41ODIwOCA1OS43NDYyTDIuNDc4MjcgNjAuMTQ0NkMyLjQ1NzY1IDYwLjIyNjQgMi40MzcwNCA2MC4zMDgxIDIuNDE3MTYgNjAuMzg5OUwyLjIzNDU3IDYxLjEyNjNDMS4zNDcxNyA2NC43OTczIDAuNzIxMjUgNjguNTI2OCAwLjM2MTUwNiA3Mi4yODY0QzAuMzU0ODggNzIuMzUxMiAwLjM0ODk4OSA3Mi40MTYgMC4zNDMwOTkgNzIuNDgxNkMwLjMyODM3NCA3Mi42MzQgMC4zMTUxMjEgNzIuNzg1NyAwLjMwMTEzMiA3Mi45MzgxTDAuMjc5MDQ1IDczLjE5NjZDMC4yNjgwMDEgNzMuMzI5OSAwLjI1Njk1NiA3My40NjM5IDAuMjQ2NjQ5IDczLjU5NzJDMC4yMzkyODYgNzMuNjkgMC4yMzExODggNzMuNzgyMSAwLjIyNDU2MSA3My44NzQ4QzAuMjE0MjUzIDc0LjAxMDMgMC4yMDQ2ODIgNzQuMTQ2NiAwLjE5NTExIDc0LjI4MjFDMC4xODg0ODQgNzQuMzY5IDAuMTgxODU3IDc0LjQ1NTEgMC4xNzU5NjcgNzQuNTQxM0MwLjE2MTk3OCA3NC43NDY3IDAuMTQ5NDYyIDc0Ljk1MjIgMC4xMzY5NDUgNzUuMTU4NEwwLjExOTI3NSA3NS40NjI1QzAuMTEyNjQ5IDc1LjU4MTggMC4xMDYwMjIgNzUuNzAwNCAwLjEwMDEzMiA3NS44MTg5QzAuMDk0MjQyIDc1LjkyNSAwLjA4OTA4ODIgNzYuMDMxIDAuMDg0NjcwNiA3Ni4xMzcxQzAuMDc4NzgwNSA3Ni4yNTQyIDAuMDczNjI2NSA3Ni4zNzEzIDAuMDY4NDcyNyA3Ni40ODc2QzAuMDYzMDczNCA3Ni41OTEyIDAuMDU4NjU1OCA3Ni42OTUgMC4wNTUyMTk5IDc2Ljc5OTFDMC4wNTAwNjYgNzYuOTI1OCAwLjA0NTY0ODMgNzcuMDUxNyAwLjA0MTIzMDcgNzcuMTc3NkMwLjA0MTIzMDcgNzcuMjcxMSAwLjAzNDYwNDUgNzcuMzY0NyAwLjAzMTY1OTQgNzcuNDU4MkMwLjAyNTAzMyA3Ny42NTc3IDAuMDE5ODc4OSA3Ny44NTY2IDAuMDE0NzI1MSA3OC4wNTYxQzAuMDE0NzI1MSA3OC4xMDk5IDAuMDE0NzI1MSA3OC4xNjQ0IDAuMDE0NzI1MSA3OC4yMTgyQzAuMDEwNzk4MyA3OC40MDMyIDAuMDA3MzYyNDcgNzguNTg4MSAwLjAwNDQxNzQxIDc4Ljc3MjdDMC4wMDQ0MTc0MSA3OC43OTQgMC4wMDQ0MTc0MSA3OC44MTU0IDAuMDA0NDE3NDEgNzguODM3NVY3OC44NDE5QzAuMDA0NDE3NDEgNzguOTY4NSAwLjAwNDQxNzU5IDc5LjA4NzEgMCA3OS4yMDA1QzAgNzkuMjU1NyAwIDc5LjMxMSAwIDc5LjM2NjlDMCA3OS41NDc0IDAgNzkuNzEzIDAgNzkuODcyMVY3OS45MDIzQzAuMDE0NzI1MyA4MC40Njc5IDAuNDAyNzM3IDgxLjc4NTMgMy42NzM5NiA4MS44MDNIMy44MDc5NkM2LjE0NzA4IDgxLjgwMyAxMS43MDc0IDgxLjUwNCAxNy42NDMxIDgwLjkzNTVDMjguMDA3NSA3OS45NDI4IDQ4LjI1NyA3Ny4zMjcxIDcxLjcwNDEgNzQuMjkwMkw3NC41MDE5IDczLjkyNzlDODEuMTI4MyA3My4wNzA3IDkwLjQwNTMgNzEuNzkyMyAxMDAuNjM5IDcwLjM1MDRDMTAyLjM5MiA3MS4zNTkzIDEwNC4zNDIgNzIuMjQzNyAxMDYuMzkgNzMuMDIyMUM5NS45OTA2IDc1LjM3ODYgODUuNDUxNyA3Ny43ODc0IDc1LjM3NzQgODAuMjE0NUM2Ny4zMTY3IDgyLjE1NjQgNTkuNTA4NiA4NC4xNDU0IDUyLjE2IDg2LjA4NDRDNDQuMjgxOSA4Ni45MjI0IDM2LjYxNDUgODguMjA3NCAyOC41ODExIDkwLjAxNDZDMTkuNzUxMSA5Mi4wMDI5IDExLjIyNjYgOTQuNjE1NiA0LjU3ODgzIDk3LjM3ODZMNC40MDI4NyA5Ny40NTIyQzIuOTAxNjIgOTguMDcxNSAyLjI5NDIgOTkuMDQxNCAyLjU5NjA3IDEwMC4zMzVWMTAwLjM0NUwyLjU5OTc1IDEwMC4zNTlMMi42NTkzOSAxMDAuNThWMTAwLjU4OUwyLjc2MzIgMTAwLjk4MlYxMDAuOTg3QzIuODM4MyAxMDEuMjYzIDIuOTE0ODcgMTAxLjUzOSAyLjk5MjkyIDEwMS44MTVDMy4wMTY0OCAxMDEuODk5IDMuMDQwNzggMTAxLjk4NCAzLjA2NjU0IDEwMi4wNjlDMy4xMjk4NiAxMDIuMjkgMy4xOTQxNiAxMDIuNTExIDMuMjU5NDUgMTAyLjczMUwzLjMxNTQgMTAyLjkyM0MzLjM5NjM5IDEwMy4xOTQgMy40Nzg2MSAxMDMuNDY0IDMuNTYyMDUgMTAzLjczM0wzLjYzNTY4IDEwMy45N0MzLjcwMTIxIDEwNC4xNzkgMy43Njc0NyAxMDQuMzg3IDMuODM0NDcgMTA0LjU5NUwzLjg1ODc3IDEwNC42NjlDMy44NzY0NCAxMDQuNzI1IDMuODk0ODQgMTA0Ljc4IDMuOTEyNTEgMTA0LjgzNUMzLjk0NzEyIDEwNC45NDIgMy45ODYxNCAxMDUuMDQ4IDQuMDE4NTQgMTA1LjE1NUM0LjA3MDA3IDEwNS4zMTEgNC4xMjE2MSAxMDUuNDY4IDQuMTczODkgMTA1LjYyNEw0LjI0MzEgMTA1LjgyN0M0LjMxNDc2IDEwNi4wMzYgNC4zODY5MSAxMDYuMjQ0IDQuNDU5NTYgMTA2LjQ1M0w0LjU1NDU0IDEwNi43MjNDNC42Mzk5NCAxMDYuOTYzIDQuNzI2MDkgMTA3LjIwMyA0LjgxMjk3IDEwNy40NDJMNC44Nzk5NyAxMDcuNjI2QzQuOTYzOSAxMDcuODU0IDUuMDQ5MDYgMTA4LjA4MiA1LjEzNTQ1IDEwOC4zMUM1LjE3MTUzIDEwOC40MDUgNS4yMDkwOCAxMDguNSA1LjI0NDQyIDEwOC41OTVDNS4yNzk3NiAxMDguNjkgNS4zMTgwNCAxMDguNzg1IDUuMzU0MTIgMTA4Ljg4TDUuNDY2NzcgMTA5LjE3NUw1LjUwMzU4IDEwOS4yNjlDNS41MjEyNSAxMDkuMzE2IDUuNTM5NjYgMTA5LjM2MiA1LjU1ODA3IDEwOS40MDlDNS42NTU5OSAxMDkuNjU3IDUuNzU2MTIgMTA5LjkwNSA1Ljg1NjI1IDExMC4xNTJMNS45NTc4NiAxMTAuMzk5TDUuOTc3IDExMC40NDZDNi4wNTA2MyAxMTAuNjE4IDYuMTE5ODQgMTEwLjc5MSA2LjE5MTk5IDExMC45NjJMNi4yMjIxOCAxMTEuMDM1TDYuMzE1NjggMTExLjI1NkM2LjQxNzc4IDExMS40OTYgNi41MjA2MSAxMTEuNzM0IDYuNjI0MTggMTExLjk3M0w2LjcxNDc0IDExMi4xNzlMNi43NTQ1IDExMi4yNjdDNi44MjgxMiAxMTIuNDI4IDYuODk3MzMgMTEyLjU5IDYuOTY5NDkgMTEyLjc1MUM3LjAxOTU1IDExMi44NjIgNy4wNjg4OCAxMTIuOTcyIDcuMTE2NzQgMTEzLjA4NEM3LjE5OTIgMTEzLjI2NiA3LjI4MjQgMTEzLjQ0NyA3LjM2NjMzIDExMy42MjdDNy40MzM1OCAxMTMuNzc1IDcuNTAxMDcgMTEzLjkxOSA3LjU2ODgxIDExNC4wNkM3LjY0MjQzIDExNC4yMTcgNy43MTYwNiAxMTQuMzc0IDcuNzg5NjkgMTE0LjUzQzcuODQ3MTIgMTE0LjY1MSA3LjkwNTA0IDExNC43NzEgNy45NjM0NSAxMTQuODkxQzguMDMwNDUgMTE1LjAzIDguMDk4OTIgMTE1LjE2OSA4LjE2NzM5IDExNS4zMDhDOC4yNDc2NCAxMTUuNDcyIDguMzI5MzcgMTE1LjYzNSA4LjQxMTA5IDExNS43OTlDOC40OTI4MiAxMTUuOTYyIDguNTc2MDIgMTE2LjEyOCA4LjY1OTk1IDExNi4yOTJDOC43MjUyMyAxMTYuNDIxIDguNzkxMjUgMTE2LjU1IDguODU4MDEgMTE2LjY3OEM4LjkxOTEyIDExNi43OTYgOC45Nzk0OSAxMTYuOTEzIDkuMDQwNiAxMTcuMDI5TDkuMDU5MDEgMTE3LjA2NUM5LjEyMTgzIDExNy4xODUgOS4xODQ2NiAxMTcuMzA1IDkuMjQ3NDkgMTE3LjQyNEM5LjM1MTA2IDExNy42MjEgOS40NTUxMiAxMTcuODE1IDkuNTU5NjcgMTE4LjAwN0w5LjgwMTE2IDExOC40NDlDOS44NTYzOCAxMTguNTQ4IDkuOTEwODcgMTE4LjY0NyA5Ljk2NjA5IDExOC43NDNDMTAuMDQ1MSAxMTguODg3IDEwLjEyNDYgMTE5LjAzIDEwLjIwNDYgMTE5LjE3MkwxMC4zMDMzIDExOS4zNDZMMTAuMzQ3NSAxMTkuNDJDMTAuNDk5MSAxMTkuNjg3IDEwLjY1MTYgMTE5Ljk1MyAxMC44MDE3IDEyMC4yMTFMMTAuOTM2NSAxMjAuNDQxQzExLjAyNTYgMTIwLjU5NCAxMS4xMTYxIDEyMC43NDcgMTEuMjA2NyAxMjAuODk5TDExLjMyODkgMTIxLjEwM0MxMS41MTk2IDEyMS40MjEgMTEuNzExIDEyMS43MzYgMTEuODk5NSAxMjIuMDRMMTEuOTQ5NiAxMjIuMTIyQzEyLjA1MTIgMTIyLjI4NiAxMi4xNTM1IDEyMi40NDkgMTIuMjU2NiAxMjIuNjEyTDEyLjM1ODIgMTIyLjc3M0MxMi4zNzA3IDEyMi43OTMgMTIuMzg0IDEyMi44MTIgMTIuMzk2NSAxMjIuODMzQzEyLjQwOSAxMjIuODU0IDEyLjQyNzQgMTIyLjg4IDEyLjQ0MjEgMTIyLjkwN0MxMi41NjQ0IDEyMy4wOTggMTIuNjg3MSAxMjMuMjg5IDEyLjgxMDMgMTIzLjQ4QzEyLjgxNzYgMTIzLjQ5MiAxMi44MjUgMTIzLjUwNCAxMi44MzMxIDEyMy41MTZDMTIuOTQ4NyAxMjMuNjk1IDEzLjA2NSAxMjMuODcxIDEzLjE4MjEgMTI0LjA0OEwxMy4xOTAyIDEyNC4wNjJDMTMuNDA3NCAxMjQuMzkyIDEzLjYzODYgMTI0LjczNCAxMy44OTQ4IDEyNS4xMUwxMy45MzM4IDEyNS4xNjZMMTQuMDU1MyAxMjUuMzQ1TDE0LjE5NzQgMTI1LjU0OUwxNC4yOTI0IDEyNS42ODZMMTQuMzYwMSAxMjUuNzgzTDE0LjUxOTIgMTI2LjAxMUMxNC41MjM2IDEyNi4wMTYgMTQuNTI3MyAxMjYuMDIyIDE0LjUzMDkgMTI2LjAyN0wxNC41NDM0IDEyNi4wNDRDMTQuNTQzNCAxMjYuMDQ5IDE0LjU1MDEgMTI2LjA1MyAxNC41NTMgMTI2LjA1OEMxNC42NTAyIDEyNi4xOTUgMTQuNzQ2NyAxMjYuMzMyIDE0Ljg0NzUgMTI2LjQ2OUwxNC45NTY1IDEyNi42MjFMMTUuMDY2MiAxMjYuNzczTDE1LjE0NzkgMTI2Ljg4NUMxNS4zMDE4IDEyNy4wOTggMTUuNDU3OSAxMjcuMzEzIDE1LjYxNjIgMTI3LjUyNkwxNS42NjMzIDEyNy41OUwxNS43NTI0IDEyNy43MTFDMTUuODYyOCAxMjcuODU4IDE1Ljk3MzggMTI4LjAwNiAxNi4wODUyIDEyOC4xNTNDMTYuMTM5NyAxMjguMjI2IDE2LjE5NDkgMTI4LjMgMTYuMjQ5NCAxMjguMzc0QzE2LjM2MjggMTI4LjUyMSAxNi40NzY0IDEyOC42NjggMTYuNTkwMyAxMjguODE2TDE2LjcxMSAxMjguOTcyQzE2Ljk3MTYgMTI5LjMwOCAxNy4yMzIzIDEyOS42NCAxNy40ODU2IDEyOS45NTZMMTcuNTI2MSAxMzAuMDA3QzE3LjY0OTcgMTMwLjE2MiAxNy43NzQ5IDEzMC4zMTYgMTcuOTAwMSAxMzAuNDdMMTguMDQ3MyAxMzAuNjQ2QzE4LjE3MiAxMzAuNzk4IDE4LjI5NzIgMTMwLjk1IDE4LjQyMjggMTMxLjEwMkwxOC41MzYyIDEzMS4yMzhDMTguOTU1OSAxMzEuNzQxIDE5LjM4NTkgMTMyLjI0NCAxOS44MTM2IDEzMi43MzFMMTkuOTIxOSAxMzIuODU1QzIwLjA1OTggMTMzLjAxMSAyMC4xOTg3IDEzMy4xNjggMjAuMzM4NiAxMzMuMzI1TDIwLjQzNDMgMTMzLjQzMUMyMC44OTMgMTMzLjk0MiAyMS4zNjIgMTM0LjQ1MiAyMS44MjgxIDEzNC45NDVMMjEuODc0NCAxMzQuOTk0QzIyLjAyNzYgMTM1LjE1NiAyMi4xODE3IDEzNS4zMTggMjIuMzM2OCAxMzUuNDc5TDIyLjQxMDQgMTM1LjU1N0MyMi42Njc0IDEzNS44MjMgMjIuOTI1OCAxMzYuMDg5IDIzLjE5MDkgMTM2LjM1M0wyMy4yMTg5IDEzNi4zODFDMjMuNjE0MiAxMzYuNzggMjQuMDE0IDEzNy4xNzUgMjQuNDE0NiAxMzcuNTZMMjQuNDY2MSAxMzcuNjA5QzI0LjUwMjkgMTM3LjY0NSAyNC41Mzk3IDEzNy42ODMgMjQuNTc4NyAxMzcuNzE2QzI0LjcxMDUgMTM3Ljg0MyAyNC44NDIzIDEzNy45NyAyNC45NzQ5IDEzOC4wOTVMMjUuMDQ4NSAxMzguMTY0TDI1LjA2NDcgMTM4LjE4QzI1LjE4OTggMTM4LjI5OCAyNS4zMTY1IDEzOC40MTYgMjUuNDQyNCAxMzguNTM0QzI1LjUxNiAxMzguNjA4IDI1LjU4OTYgMTM4LjY3MyAyNS42NjY5IDEzOC43NDJDMjUuNzUzOCAxMzguODIzIDI1Ljg0MTQgMTM4LjkwNCAyNS45MjgzIDEzOC45ODNMMjYuMTE1MyAxMzkuMTU1QzI2LjI2NjMgMTM5LjI5MiAyNi40MTcyIDEzOS40MjkgMjYuNTY2NyAxMzkuNTYzTDI2LjU3MTEgMTM5LjU2N0wyNi41OTU0IDEzOS41ODlMMjYuNjEyMyAxMzkuNjA1QzI2Ljc1OTYgMTM5LjczOCAyNi45MTA1IDEzOS44NzEgMjcuMDY1MSAxNDAuMDA2TDI3LjI0NDggMTQwLjE2NUwyNy41MzM0IDE0MC40MTZDMjcuNjYwOCAxNDAuNTI3IDI3Ljc4ODEgMTQwLjYzNyAyNy45MTU1IDE0MC43NDZDMjcuOTg5MSAxNDAuODExIDI4LjA2MjcgMTQwLjg3NiAyOC4xNDE1IDE0MC45NEwyOC4xOTc1IDE0MC45ODhMMjguMjM5NSAxNDEuMDI0TDI4LjI2MjMgMTQxLjA0NEMyOC40MDk1IDE0MS4xNzEgMjguNTYyNyAxNDEuMjk3IDI4LjcxMzYgMTQxLjQyM0wyOC44MDQ5IDE0MS40OTZMMjguODE4MiAxNDEuNTA3QzI4Ljg1MDYgMTQxLjUzMyAyOC44ODQ0IDE0MS41NTggMjguOTE5IDE0MS41OEMyOS4wMjYgMTQxLjY1MyAyOS4xNDE4IDE0MS43MTIgMjkuMjYzNiAxNDEuNzU2SDI5LjI2OTVIMjkuMjc1NEMyOS41OTcgMTQxLjg1OCAyOS45MzM2IDE0MS45MDUgMzAuMjcwOCAxNDEuODk0QzMwLjk2ODEgMTQxLjg5NCAzMS45Mjk2IDE0MS43NjQgMzMuMzAyIDE0MS41MDVDMzcuNjY1MSAxNDAuNjc4IDU5LjA1ODggMTM2Ljg5NiA4NC4wMTAxIDEzMy40NzhDOTEuNDUzIDEzMi40NTcgOTkuMDQwOSAxMzEuNzEgMTA1Ljk2OSAxMzEuMTY1QzEwNC40NTMgMTMzLjA5NSAxMDMuNjcxIDEzNS4wNDggMTAzLjYzNyAxMzcuMDA3QzEwMy41NzQgMTQwLjYwNiAxMDcuNzkzIDE0My40MDcgMTExLjM5IDE0NS4yMjZDMTA2LjYyNyAxNDYuNzgxIDEwMS41OTggMTQ4LjE0NSA5Ni41NTA5IDE0OS4xNDFDOTMuMjM3NyAxNDkuNzk1IDg5Ljk5MzcgMTUwLjM1NCA4Ni44MzIyIDE1MC44M0M4Ni43OTg1IDE1MC42MTEgODYuNzQ2NiAxNTAuMzk1IDg2LjY3NjggMTUwLjE4NEM4Ni4wNjU3IDE0OC4zMzQgODMuNTc1NyAxNDcuMDQzIDc5LjY2NDYgMTQ2LjU0N0M3NS44NzU4IDE0Ni4wNjggNzEuMDM2MyAxNDYuMzU3IDY2LjAzNzggMTQ3LjM2M0M1OS4yOTU5IDE0OC43MTkgNTUuMDIwNCAxNTAuNzk0IDUzLjg3MDMgMTUxLjM5N0M1Mi4xMDMzIDE1Mi4zMjMgNTEuNDA2OCAxNTMuMDIzIDUxLjQ1NjggMTUzLjgxM0M1MS41MTEzIDE1NC42NzEgNTIuNDQ0MiAxNTUuMTI4IDUzLjI2MjIgMTU1LjQzM0w1My4yODIgMTU1LjQ0TDUzLjYzNDcgMTU1LjU2M0w1My42ODcgMTU1LjU4Mkw1NC4wMzAxIDE1NS43QzU0LjU4NDUgMTU1Ljg5IDU1LjE0MTggMTU2LjA3NCA1NS42ODQ1IDE1Ni4yNDdMNTUuNzI2NCAxNTYuMjYxTDU2LjE0OTggMTU2LjM5M0g1Ni4xNTY0QzU2LjQ1OSAxNTYuNDg3IDU2Ljc2ODMgMTU2LjU4MiA1Ny4wODEyIDE1Ni42NzVMNTcuMTI2MSAxNTYuNjg5TDU3LjE2MDcgMTU2LjY5OUw1Ny4yMTY2IDE1Ni43MTZMNTcuNDExIDE1Ni43NzRDNTcuNjA0NyAxNTYuODMxIDU3Ljc5ODMgMTU2Ljg4NyA1Ny45OTE5IDE1Ni45NDJMNTguMTA0NiAxNTYuOTc1QzU4LjYwNzIgMTU3LjExOCA1OS4xMTE4IDE1Ny4yNTUgNTkuNjE4MyAxNTcuMzg3TDU5LjY5MiAxNTcuNDA2TDU5LjgwNjEgMTU3LjQzN0w1OS44MjQ1IDE1Ny40NDFDNjAuMDI5NyAxNTcuNDk0IDYwLjIzNTEgMTU3LjU0NiA2MC40NDA4IDE1Ny41OThMNjAuNjIxOSAxNTcuNjQ0TDYwLjczMDggMTU3LjY3MUw2MC43ODUzIDE1Ny42ODRMNjEuMzE4NCAxNTcuODEzTDYxLjQxMTIgMTU3LjgzNkw2MS42MzcyIDE1Ny44ODlDNjEuNjc4NCAxNTcuODk5IDYxLjcyMDQgMTU3LjkwOCA2MS43NjIzIDE1Ny45MTdMNjIuMjA4NSAxNTguMDIxTDYyLjM1MDYgMTU4LjA1M0w2Mi41Mzg0IDE1OC4wOTVDNjIuNjE5NCAxNTguMTEzIDYyLjcwMTEgMTU4LjEzIDYyLjc4MjggMTU4LjE0OEM2Mi44OTMzIDE1OC4xNzIgNjMuMDAzNyAxNTguMTk3IDYzLjExNTYgMTU4LjIyMkw2My4xNzYgMTU4LjIzNUw2My40OTU1IDE1OC4zMDNMNjMuODUzMyAxNTguMzc2TDY0LjA1ODggMTU4LjQxOEg2NC4wNzQyTDY0LjMxMjggMTU4LjQ2N0M2NC41MzMyIDE1OC41MSA2NC43NTQgMTU4LjU1MyA2NC45NzU0IDE1OC41OTVMNjUuMzg4NSAxNTguNjY5TDY1LjczMzggMTU4LjczMkw2NS45MzI2IDE1OC43NjdMNjYuMDExMyAxNTguNzgxTDY2LjE4MTQgMTU4LjgxMUw2Ni4zNzA2IDE1OC44NDRMNjYuOTI1OCAxNTguOTM3TDY3LjA2MzUgMTU4Ljk1OUw2Ny4zMjQxIDE1OS4wMDFMNjcuNTQ1IDE1OS4wMzZDNjcuNjczMSAxNTkuMDU3IDY3LjgwMTIgMTU5LjA3NiA2Ny45MyAxNTkuMDk1TDY4LjAwMzcgMTU5LjEwNkw2OC4wODU0IDE1OS4xMTlMNjguMTgyNiAxNTkuMTMzQzY4LjQyOCAxNTkuMTY4IDY4LjY3MSAxNTkuMjAzIDY4LjkxMTUgMTU5LjIzN0w2OS4wODQ1IDE1OS4yNjFMNjkuMzUxIDE1OS4yOTdMNjkuMzk4MiAxNTkuMzAzTDY5LjkyNzUgMTU5LjM3MUw3MC4wMDkzIDE1OS4zODFMNzAuMDYzIDE1OS4zODhMNzAuNDA4MyAxNTkuNDI5QzcxLjAwNjIgMTU5LjUgNzEuNjA0NSAxNTkuNTY1IDcyLjIwMzMgMTU5LjYyM0M3Mi40MDM2IDE1OS42NDIgNzIuNjAzOSAxNTkuNjYxIDcyLjgwNDggMTU5LjY3OUw3My4xNTQ2IDE1OS43MUw3My4yMzM0IDE1OS43MTZMNzMuMjY1OCAxNTkuNzJDNzMuNDk2MiAxNTkuNzM5IDczLjcyODEgMTU5Ljc1NyA3My45NjAxIDE1OS43NzRMNzQuMDIxMiAxNTkuNzc5Qzc2LjAwMDIgMTU5LjkyNiA3OC4wMDIyIDE2MCA3OS45ODQ5IDE2MEM4NS44NzYzIDE2MC4wMDIgOTEuNzUwMSAxNTkuMzU3IDk3LjUwMDcgMTU4LjA3NkMxMDMuMDcyIDE1Ni44MyAxMDguNDk0IDE1NC45ODggMTEzLjY3MSAxNTIuNTgxQzExNS43MjYgMTUxLjYyNiAxMTcuNzQxIDE1MC41ODIgMTE5LjcxNSAxNDkuNDQ5QzExOS43MjggMTQ5LjQ0MiAxMTkuNzQxIDE0OS40MzcgMTE5Ljc1NCAxNDkuNDNDMTIwLjgxMSAxNDguODIzIDEyMS44NTIgMTQ4LjE5MyAxMjIuODc3IDE0Ny41MzlMMTIyLjkxMyAxNDcuNTE2QzEyMy4xNzMgMTQ3LjM1IDEyMy40MzIgMTQ3LjE4MyAxMjMuNjkgMTQ3LjAxNEwxMjMuODYzIDE0Ni45MDFDMTI0LjA3NiAxNDYuNzYxIDEyNC4yODcgMTQ2LjYyIDEyNC40OTggMTQ2LjQ3OUwxMjQuNzI4IDE0Ni4zMjVDMTI0LjkyNCAxNDYuMTkyIDEyNS4xMTkgMTQ2LjA1OSAxMjUuMzEyIDE0NS45MjZDMTI1LjQ5MiAxNDUuODAyIDEyNS42NzIgMTQ1LjY3NiAxMjUuODUxIDE0NS41NUMxMjUuOTg4IDE0NS40NTQgMTI2LjEyNSAxNDUuMzU5IDEyNi4yNjEgMTQ1LjI2MkMxMjYuNDQ1IDE0NS4xMzEgMTI2LjYyOCAxNDUgMTI2LjgxIDE0NC44NjhMMTI2Ljk4OSAxNDQuNzM4QzEyNy4xODkgMTQ0LjU5MSAxMjcuMzg5IDE0NC40NDMgMTI3LjU4NyAxNDQuMjk2TDEyNy42NzIgMTQ0LjIzM0MxMjcuODA4IDE0NC4xMzMgMTI3Ljk0NCAxNDQuMDMzIDEyOC4wNzkgMTQzLjkzMUMxMzIuNTM4IDE0MC41NyAxMzYuNjM2IDEzNi43NTQgMTQwLjMwNiAxMzIuNTQ1QzE0MC40ODUgMTMyLjM0IDE0MC42NjMgMTMyLjEzNCAxNDAuODQgMTMxLjkyNkwxNDAuODkgMTMxLjg2OEMxNDEuMDYgMTMxLjY2OCAxNDEuMjI5IDEzMS40NjggMTQxLjM5NiAxMzEuMjY5TDE0MS40NjMgMTMxLjE4OUMxNDEuNjI5IDEzMC45ODkgMTQxLjc5NSAxMzAuNzg4IDE0MS45NiAxMzAuNTg3TDE0Mi4wMTkgMTMwLjUxM0MxNDIuMTg4IDEzMC4zMDcgMTQyLjM1NSAxMzAuMSAxNDIuNTIgMTI5Ljg5M0wxNDIuNTUyIDEyOS44NTJDMTQzLjE2OSAxMjkuMDggMTQzLjc4MSAxMjguMjgyIDE0NC4zNzEgMTI3LjQ4M0wxNDQuMzk5IDEyNy40NDVDMTQ0Ljk4OCAxMjYuNjQ2IDE0NS41NyAxMjUuODI1IDE0Ni4xMjcgMTI1LjAxMUwxNDYuMTM1IDEyNC45OTlMMTQ2LjE1MSAxMjQuOTc2QzE0Ni4zMDQgMTI0Ljc1MiAxNDYuNDU2IDEyNC41MjcgMTQ2LjYwNiAxMjQuMzAxTDE0Ni42NDkgMTI0LjIzNkMxNDYuNzk2IDEyNC4wMTQgMTQ2Ljk0MyAxMjMuNzkxIDE0Ny4wOSAxMjMuNTY3TDE0Ny4xMzQgMTIzLjVDMTQ3LjI4MSAxMjMuMjczIDE0Ny40MjggMTIzLjA0NSAxNDcuNTc2IDEyMi44MTZMMTQ3LjYgMTIyLjc3OEMxNDguODMzIDEyMC44MzIgMTQ5Ljk5NiAxMTguODA5IDE1MS4wNiAxMTYuNzYxTDE1MS4wNjkgMTE2Ljc0NEwxNTEuMDc0IDExNi43MzVDMTUxLjIwMiAxMTYuNDg5IDE1MS4zMjggMTE2LjI0MiAxNTEuNDUzIDExNS45OTNMMTUxLjQ3NyAxMTUuOTQ2QzE1MS42MDMgMTE1LjY5NiAxNTEuNzI3IDExNS40NDUgMTUxLjg1MiAxMTUuMTkzTDE1MS44NjUgMTE1LjE2NUMxNTIuNDYzIDExMy45NDYgMTUzLjAzMiAxMTIuNzAzIDE1My41NjkgMTExLjQ0OUMxNTMuNjA2IDExMS4zNjIgMTUzLjY0MiAxMTEuMjc2IDE1My42ODEgMTExLjE5QzE1My43MzIgMTExLjA2OCAxNTMuNzgyIDExMC45NDYgMTUzLjgzMyAxMTAuODIyQzE1My44OTQgMTEwLjY3NCAxNTMuOTU1IDExMC41MjkgMTU0LjAxNiAxMTAuMzg0QzE1NC4wNjkgMTEwLjI1NCAxNTQuMTIyIDExMC4xMjMgMTU0LjE3NCAxMDkuOTkzQzE1NC4yMjYgMTA5Ljg2MyAxNTQuMjg1IDEwOS43MjEgMTU0LjMzOSAxMDkuNTg1QzE1NC4zOTkgMTA5LjQzMyAxNTQuNDU4IDEwOS4yODMgMTU0LjUxOCAxMDkuMTMxQzE1NC41NTkgMTA5LjAyNiAxNTQuNjAxIDEwOC45MiAxNTQuNjQxIDEwOC44MTRWMTA4LjgwOUMxNTQuNjUxIDEwOC43ODMgMTU0LjY2MSAxMDguNzU3IDE1NC42NzIgMTA4LjczNUMxNTQuNjcyIDEwOC43MjcgMTU0LjY3OCAxMDguNzE3IDE1NC42ODEgMTA4LjcwN0MxNTQuODU2IDEwOC4xODMgMTU0LjcgMTA3LjgwOCAxNTQuNTQgMTA3LjU4NEMxNTQuMDcyIDEwNi45MzcgMTUyLjk2OSAxMDYuMzA1IDE0NS4yNDUgMTA2LjMwNUMxNDUuMTM1IDEwNi4zMDUgMTMzLjY1OSAxMDYuMzYyIDExMi4zMTcgMTA4LjQwOEMxMDMuNzQ2IDEwOS4yMzEgOTMuNzE3NyAxMTAuNDAyIDgzLjY0MTIgMTExLjY5MUM4Ni4zNjU0IDEwOS41NTYgODguNjE0NyAxMDcuNTc4IDkwLjI0NCAxMDUuNjA3QzkxLjM3NTcgMTA0LjIzNyA5Mi4xODE5IDEwMi45MDcgOTIuNjkwNiAxMDEuNTY3QzEwMy4xMDkgOTkuMTEwNiAxMTMuOTg2IDk2LjYzOTIgMTI0LjI0NSA5NC40MzUyQzE0MC41MzIgOTAuOTM2NSAxNTIuNTUgODguMDk3IDE1Ni4zOTQgODYuODM5MkMxNTcuMTE3IDg2LjYwMjggMTU4LjU0NCA4Ni4wMDkzIDE1OS4zMDcgODUuMjgzOUwxNTkuMzEyIDg1LjI3ODhDMTU5LjU5OCA4NS4wMDIgMTU5Ljc5MSA4NC42NDM3IDE1OS44NjUgODQuMjUzQzE1OS44NzkgODQuMjA1MSAxNTkuODg5IDg0LjE1NTcgMTU5Ljg5MiA4NC4xMDU3Vjg0LjEwMTNWODQuMDkxQzE1OS44OTIgODQuMDY3NCAxNTkuODkyIDg0LjA0MzggMTU5Ljg5MiA4NC4wMTczQzE1OS44OTIgODQuMDEwMiAxNTkuODkyIDg0LjAwMzEgMTU5Ljg5MiA4My45OTZDMTU5LjkyNCA4My4zNDU3IDE1OS45NDkgODIuNjg4MSAxNTkuOTY1IDgyLjAzOTNWODEuOTE3MUMxNTkuOTcyIDgxLjYzOTUgMTU5Ljk3NiA4MS4zNjQ4IDE1OS45ODEgODEuMDkxNkwxNTkuOTk0IDgwLjk4MjZaTTYwLjEyNDkgMTMuODE0N0M1Ni44NjI1IDE0LjY5ODMgNTIuNTMzMyAxNS4xODE0IDQ4LjI0NjcgMTUuMTQ1M0M0NC44OTM4IDE1LjExNzQgNDAuMzQyOSAxNC42NjU5IDM3LjczMjkgMTQuMjI0OEM0MS44MzE2IDEzLjQ0NTcgNTIuNDU4MiAxMS41OTM3IDY1LjkyNDUgMTAuNTIwN0M2NC45NzI1IDEyLjI2MDggNjEuOTg1NCAxMy4zMTI0IDYwLjEyNDkgMTMuODE0N1pNODEuMTcxOCAxOC4zODA0QzkwLjkwNDUgMTQuOTUzOSA5NS40NTUzIDExLjk0MTMgOTcuNTY2MiA5Ljk4NTM3QzEwNi43MjggMTAuNDcxNCAxMTMuODUyIDExLjU5NzQgMTE4LjgzOCAxMy4zNTM3QzEyMC42IDEzLjk3NDUgMTIxLjY4OCAxNC42NzI2IDEyMS45IDE1LjMxOTFDMTIxLjkzOCAxNS40NTk4IDEyMS45NjQgMTUuNjAzNCAxMjEuOTc5IDE1Ljc0ODRWMTUuNzc1QzEyMS45NzkgMTUuNzg5NyAxMjEuOTc5IDE1LjgwMzcgMTIxLjk4MiAxNS44MTk5QzEyMi4wODQgMTcuMzAzNyAxMjEuMzg0IDE5LjY1OCAxMTcuNDcyIDIyLjQ0NzVDMTE3LjM4NCAyMi41MTA4IDExNy4yOTQgMjIuNTc0MiAxMTcuMjAzIDIyLjYzNzVMMTE3LjExMyAyMi42OTkzTDExNi45MjMgMjIuODI5TDExNi44MTMgMjIuOTAyNkwxMTYuNjM1IDIzLjAyMTlMMTE2LjUxNCAyMy4xMDA3TDExNi4zMzUgMjMuMjE3OEwxMTYuMjA5IDIzLjI5ODhMMTE2LjAyNCAyMy40MTU5TDExNS44OTYgMjMuNDk2OUwxMTUuNjk5IDIzLjYxOTFMMTE1LjU3NSAyMy42OTI4TDExNS4zNSAyMy44Mjk3TDExNS4yNDUgMjMuODkzMUMxMTUuMTM0IDIzLjk2MDMgMTE1LjAyMSAyNC4wMjc2IDExNC45MDYgMjQuMDk0OEwxMTQuODc2IDI0LjExMjVDMTE0Ljc3MSAyNC4xNzM5IDExNC42NjUgMjQuMjM1NSAxMTQuNTU3IDI0LjI5NzNMMTE0LjQyNCAyNC4zNzFMMTE0LjE5OCAyNC40OTk4TDExNC4wNTEgMjQuNTgwMUMxMTMuOTc4IDI0LjYyMjEgMTEzLjkwNCAyNC42NjQ4IDExMy44MjQgMjQuNzA2OEwxMTMuNjcxIDI0Ljc5MjJMMTEzLjQ0NSAyNC45MTU5TDExMy4yODUgMjUuMDAyOEMxMTMuMjExIDI1LjA0NDggMTEzLjEzIDI1LjA4NiAxMTMuMDUyIDI1LjEyOEwxMTIuODkyIDI1LjIxMzRMMTEyLjY0MyAyNS4zNDUyTDExMi40OSAyNS40MjU1TDExMi4yMDQgMjUuNTcyOEwxMTIuMDc5IDI1LjYzNjlDMTExLjk0IDI1LjcwODUgMTExLjggMjUuNzggMTExLjY1OSAyNS44NTExQzEwNS4yNiAyOS4wODc2IDk1Ljk2NDggMzIuNjIwMiA4NC4wMzE0IDM2LjM1MTVDODIuNjQ2OCAzNi43ODU1IDgxLjI1OTEgMzcuMjE2MyA3OS44Njg2IDM3LjY0MzlDODAuNDIxOSAzNi45MDkyIDgwLjkwNzYgMzYuMTI1OSA4MS4zMTk4IDM1LjMwMzZDODIuNDk3OCAzMi45MjUgODIuNzE4NyAzMC41NzU5IDgxLjk4NjggMjguMzIyNUM4MS4zMDggMjYuMjMwNCA4MC4wOTkgMjQuNzA5IDc4LjI5MTUgMjMuNjcxNEM3Ni41OTIyIDIyLjY5NTcgNzQuMzQzNiAyMi4xNSA3MS40MTYzIDIyLjAwMzRDNzEuMTEzNCAyMS45ODg3IDcwLjgwMzkgMjEuOTc3OSA3MC40ODc4IDIxLjk3MUM3NC41MDE5IDIwLjY3ODcgNzguMTU2IDE5LjQ0MDggODEuMTcxOCAxOC4zNzg5VjE4LjM4MDRaTTc0LjMyNDUgNzIuNjg1Nkw3MS41MjY3IDczLjA0NzlDNDguMDkwNiA3Ni4wNzk2IDI3Ljg1MDcgNzguNjk4MyAxNy41MDY5IDc5LjY4ODdDMTEuNDk1MyA4MC4yNjM5IDUuODg2NDQgODAuNTYyOSAzLjY2NTEzIDgwLjU1MDNDMS44ODU1OCA4MC41NDA4IDEuMjcwNzkgODAuMTA4NSAxLjIzNTQ1IDc5Ljg4NzZDMS4yNTgyOCA3OS43NjE2IDEuNTQ4MzcgNzkuMDI4MiA1LjA2NDAzIDc3LjEwMThDNy44MDIyIDc1LjYwMTcgMTIuMTQyNSA3My41NjE5IDE4LjMzMzcgNzAuODY1OUMzMi4xNDc1IDY0Ljg0OTUgNDYuNzAyOCA1OC4wOTQ1IDU2LjQ4MTEgNTMuNDg2OEM1Ni45ODE4IDUzLjI1MTIgNTcuNDcyOSA1My4wMTYzIDU3Ljk1ODEgNTIuNzgyMUM2MS4wMTggNTIuMzgwNSA2NC4xOTQ1IDUxLjk2NjQgNjcuNDg3NSA1MS41Mzk4Qzc4LjY5OTQgNTAuMDg5OCA4OS43MjI4IDQ4LjQ2NiAxMDAuNDI4IDQ2Ljg2OTVDOTguMDQ0OCA0OC4zNTQxIDk2LjE4ODYgNDkuOTk2MyA5NC44OTcyIDUxLjc2NTFDOTIuOTMyMSA1NC40NTgxIDkyLjIxMzUgNTcuNTA5MSA5Mi43NjIxIDYwLjgzODNDOTMuMzM3OCA2NC4zMjQ1IDk1LjY4MTQgNjcuMDk3NyA5OC45NzAyIDY5LjMyMTdDODkuMzI4OCA3MC42NzMgODAuNjI4NCA3MS44Njg5IDc0LjMyNTIgNzIuNjg0MUw3NC4zMjQ1IDcyLjY4NTZaTTExMy4xNDkgMTUxLjQ5MkMxMDguMDUzIDE1My44NjEgMTAyLjcxNyAxNTUuNjc0IDk3LjIzMjcgMTU2LjlDOTEuNTcxOCAxNTguMTYxIDg1Ljc4OTYgMTU4Ljc5NiA3OS45OTAxIDE1OC43OTRDNzguNzkyOSAxNTguNzk0IDc3LjU4ODQgMTU4Ljc2NSA3Ni4zODI0IDE1OC43MTFDNzYuODQ3IDE1OC41MzEgNzcuMzUzNSAxNTguMzQzIDc3Ljg1NDkgMTU4LjE2Qzc5Ljg0OTQgMTU3LjQyOCA4Mi4zMzE0IDE1Ni41MTcgODQuMTUxNCAxNTUuMzI0Qzg1LjY0MDkgMTU0LjM0OCA4Ni41MjA3IDE1My4yODMgODYuNzg2NSAxNTIuMTQxQzkwLjAzOTQgMTUxLjY1NCA5My4zODM1IDE1MS4wODEgOTYuNzkzOSAxNTAuNDA3QzEwMS45ODQgMTQ5LjM4MiAxMDcuNTE4IDE0Ny44ODUgMTEzLjAwNiAxNDYuMDRDMTEzLjcwNCAxNDYuMzYgMTE0LjM0IDE0Ni42MzUgMTE0Ljg2NSAxNDYuODYzQzExNS4yMzQgMTQ3LjAyMiAxMTUuNTUyIDE0Ny4xNTcgMTE1Ljc3NyAxNDcuMjY0QzExNy4yNzYgMTQ3Ljk2MSAxMTguMDU5IDE0OC40NDcgMTE4LjQ2MyAxNDguNzY3QzExNi43MjYgMTQ5Ljc0MiAxMTQuOTU1IDE1MC42NSAxMTMuMTQ5IDE1MS40OTFMMTEzLjE0OSAxNTEuNDkyWk0xMTIuNDM5IDEwOS43MDJDMTMwLjI5OCAxMDcuOTg5IDE0Mi40MTIgMTA3LjYwNCAxNDUuMjQ3IDEwNy42MDRDMTQ4LjIxNSAxMDcuNjA0IDE1MC4zNDIgMTA3LjY5MyAxNTEuNzQ5IDEwNy44NzhDMTUzLjA0OCAxMDguMDQ5IDE1My40MTQgMTA4LjI2OCAxNTMuNTAyIDEwOC4zNDFWMTA4LjM0OUwxNTMuNDgzIDEwOC40QzE1My4wMzQgMTA5LjQyMiAxNTEuODEgMTA5Ljk1MyAxNDkuNTEgMTEwLjg3N0MxNDguOTE1IDExMS4xMTUgMTQ3LjQ0OSAxMTEuNjAzIDE0NS40MiAxMTIuMjc2QzE0MC44MzUgMTEzLjggMTMzLjE2IDExNi4zNTEgMTI1LjAyNiAxMTkuNTI3QzExOC41MTQgMTIyLjA3IDExMy40IDEyNC43NTUgMTA5LjgyNSAxMjcuNDk4QzEwOC44NzggMTI4LjIxOCAxMDcuOTg0IDEyOS4wMDUgMTA3LjE1MSAxMjkuODU1Qzk5Ljg2MTkgMTMwLjQwOCA5MS43NjgxIDEzMS4xODYgODMuODQyMiAxMzIuMjczQzU4Ljg2NTEgMTM1LjY5NyAzNy40NDEzIDEzOS40ODQgMzMuMDcxNiAxNDAuMzExQzMyLjczMjEgMTQwLjM3NSAzMi40MjU5IDE0MC40MjkgMzIuMTQ3NSAxNDAuNDc1QzM2LjYyOTkgMTM4Ljc3IDQyLjM3MjEgMTM2LjQyNSA1Mi4wODcxIDEzMS42MTRDNjIuNDA1MSAxMjYuNTAzIDY2LjU1NjIgMTI0LjMxIDc4LjAwMzYgMTE1Ljk1NUM3OS4yODY3IDExNS4wMTkgODAuNTA2MiAxMTQuMTE4IDgxLjY2MjEgMTEzLjI1MkM5Mi40NDE4IDExMS44NTggMTAzLjI3NCAxMTAuNTc5IDExMi40NCAxMDkuN0wxMTIuNDM5IDEwOS43MDJaTTE1Ni4wMDcgODUuNjk0OEMxNTAuMzY5IDg3LjUzNTggMTMwLjA3MiA5MS45NDkxIDEyMy45ODYgOTMuMjU3QzExMy45NTEgOTUuNDEzMSAxMDMuMzI0IDk3LjgyMjYgOTMuMTEyNSAxMDAuMjI4QzkzLjQ5MjQgOTguNTU2MSA5My40MzQzIDk2Ljg0MDMgOTIuOTM1OCA5NC45OTM0QzkyLjUyMiA5My40NjA5IDkxLjY2MDYgOTIuMDMzIDkwLjM3NjYgOTAuNzUwMkM4OS4xMjQ5IDg5LjQ5ODQgODcuNDkxMSA4OC40MTA3IDg1LjUyOTcgODcuNTIxOUM4MS40NjcgODUuNjgwOCA3Ni4yMjA0IDg0Ljc4MjQgNzAuMzU3NSA4NC45MjY4QzY2LjY3NjIgODUuMDE3MyA2My4xMTc4IDg1LjE4MTYgNTkuNjMzOCA4NS40MjQ2QzY0LjgxNDkgODQuMDkxIDcwLjE3NzkgODIuNzQ5MiA3NS42NTcxIDgxLjQyODlDODYuMzQ0OCA3OC44NTE1IDk3LjU1OTYgNzYuMjk4MyAxMDguNTc2IDczLjgwNTZDMTE0LjY1MyA3NS44NDc3IDEyMS4yNjYgNzcuMDczIDEyNi4wNyA3Ny45NjMzQzEyNi45MzUgNzguMTIzOSAxMjcuNzUyIDc4LjI3NDggMTI4LjQ4NCA3OC40MTYyQzEzMS41NzIgNzkuMDEyIDEzNS43NzkgNzkuNjg5NSAxNDAuMjMzIDgwLjQwNDVDMTQ3LjA0MSA4MS41MDE4IDE1NC4wODEgODIuNjM1OCAxNTcuOTk4IDgzLjYxNTJDMTU4LjU1NSA4My43NTQ0IDE1OC42MzUgODMuOTI2IDE1OC42NDQgODQuMDMwNkMxNTguNjIzIDg0LjE3OTQgMTU4LjU1MyA4NC4zMTcxIDE1OC40NDUgODQuNDIxNkMxNTcuOTUgODQuODk0NCAxNTYuODIgODUuNDI5IDE1Ni4wMDcgODUuNjk0OEgxNTYuMDA3WlwiLFxuICAgICAgICAgIHN0cm9rZTogXCJibGFja1wiLFxuICAgICAgICAgIHN0cm9rZVdpZHRoOiBcIjJcIixcbiAgICAgICAgICBtYXNrOiBcInVybCgjcGF0aC0xLWluc2lkZS0xKVwiXG4gICAgICAgIH1cbiAgICAgIClcbiAgICBdXG4gIH1cbiksIFRSID0gKCkgPT4gLyogQF9fUFVSRV9fICovIGMoXG4gIFwic3ZnXCIsXG4gIHtcbiAgICB3aWR0aDogXCIxNjBcIixcbiAgICBoZWlnaHQ6IFwiMTYwXCIsXG4gICAgdmlld0JveDogXCIwIDAgMTYwIDE2MFwiLFxuICAgIGZpbGw6IFwibm9uZVwiLFxuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgY2hpbGRyZW46IC8qIEBfX1BVUkVfXyAqLyBjKFxuICAgICAgXCJwYXRoXCIsXG4gICAgICB7XG4gICAgICAgIGQ6IFwiTTE1OS45OTQgODAuOTgzM0MxNTkuOTk4IDgwLjY1NjQgMTYwIDgwLjMzMzggMTYwIDgwLjAxODdWODAuMDAxN0MxNjAgNzkuNzk1NSAxNjAgNzkuNTg5MyAxNjAgNzkuMzgzMUMxNjAgNzkuMzA5NSAxNjAgNzkuMjMgMTYwIDc5LjE1MzRDMTYwIDc5LjAxOTQgMTYwIDc4Ljg4NDYgMTU5Ljk5NSA3OC43NTA2QzE1OS45OTUgNzguNjU2MyAxNTkuOTk1IDc4LjU2MjggMTU5Ljk5IDc4LjQ2ODZDMTU5Ljk5IDc4LjM1MzcgMTU5Ljk4NSA3OC4yMzgxIDE1OS45ODIgNzguMTIzMkMxNTkuOTc5IDc4LjAwODMgMTU5Ljk3NyA3Ny45MTQxIDE1OS45NzQgNzcuODA5NUMxNTkuOTcxIDc3LjcwNDkgMTU5Ljk2OSA3Ny42MDU1IDE1OS45NjUgNzcuNTAzMkwxNTkuOTU0IDc3LjE2QzE1OS45NTQgNzcuMDczMSAxNTkuOTQ4IDc2Ljk4NjkgMTU5Ljk0NSA3Ni45TDE1OS45MjkgNzYuNTE1NkMxNTkuOTI5IDc2LjQ2MjYgMTU5LjkyNCA3Ni40MDk2IDE1OS45MjIgNzYuMzU2NkMxNTkuODg5IDc1LjYyMDIgMTU5Ljg0NSA3NC44ODU4IDE1OS43OTIgNzQuMTUzM1Y3NC4xMzY0QzE1OS43NzkgNzMuOTQ1OSAxNTkuNzY0IDczLjc1NTIgMTU5Ljc0OSA3My41NjQyVjczLjU0ODdDMTU5LjQxNCA2OS4zNTcxIDE1OC43NDkgNjUuMTk4NCAxNTcuNzYxIDYxLjExMTFMMTU3LjcyNSA2MC45NjM5QzE1Ny43MTIgNjAuOTA5NCAxNTcuNjk3IDYwLjg1NDkgMTU3LjY4NCA2MC44MDExQzE1Ny42MzYgNjAuNjA0NSAxNTcuNTg3IDYwLjQwOTQgMTU3LjUzNiA2MC4yMTJDMTU3LjUzIDYwLjE4NCAxNTcuNTIyIDYwLjE1NTMgMTU3LjUxNiA2MC4xMjczTDE1Ny41MDMgNjAuMDc4QzE1Ny40MTcgNTkuNzQ1NiAxNTcuMzMgNTkuNDE0IDE1Ny4yNCA1OS4wODMxQzE1Ny4yMjkgNTkuMDM4MiAxNTcuMjE2IDU4Ljk5MzMgMTU3LjIwNCA1OC45NDg0TDE1Ny4xODYgNTguODgzNkwxNTcuMTIzIDU4LjY1MDFDMTU3LjA5IDU4LjUzMTYgMTU3LjA1NiA1OC40MTMgMTU3LjAyMyA1OC4yOTQ1QzE1Ny4wMTYgNTguMjcwMiAxNTcuMDA5IDU4LjI0NTEgMTU3LjAwMyA1OC4yMjA4TDE1Ni45NTMgNTguMDQ4NVY1OC4wNDQxQzE1Ni44ODIgNTcuNzk0MiAxNTYuODA5IDU3LjU0NDggMTU2LjczMiA1Ny4yOTU5QzE1Ni43MzEgNTcuMjg5OSAxNTYuNzI5IDU3LjI4NCAxNTYuNzI3IDU3LjI3ODJMMTU2LjY1NCA1Ny4wNDA0TDE1Ni42MzUgNTYuOTgwN1Y1Ni45NzU2QzE1Ni41ODIgNTYuNzk4OSAxNTYuNTI5IDU2LjYyMjkgMTU2LjQ3NSA1Ni40NDYxTDE1Ni40NjQgNTYuNDEwOEwxNTYuNDQyIDU2LjMzNzFMMTU2LjQyMiA1Ni4yNzE2TDE1Ni4zNjkgNTYuMTAyMkMxNTYuMzI4IDU1Ljk2OTcgMTU2LjI4NiA1NS44Mzg2IDE1Ni4yNDQgNTUuNzA3NUMxNTYuMjA3IDU1LjU5MDcgMTU2LjE2OSA1NS40NzM5IDE1Ni4xMzEgNTUuMzU3TDE1Ni4wNzIgNTUuMTcyOUwxNTYuMDMgNTUuMDQ2M0MxNTUuOTg5IDU0LjkyMDMgMTU1Ljk0NyA1NC43OTUxIDE1NS45MDYgNTQuNjdMMTU1LjkgNTQuNjUyM0MxNTUuODggNTQuNTkxOSAxNTUuODYgNTQuNTMxNSAxNTUuODM5IDU0LjQ3MTFMMTU1LjgwMSA1NC4zNTc3QzE1NS43MTUgNTQuMTAzOSAxNTUuNjI3IDUzLjg1MDEgMTU1LjUzOSA1My41OTYzTDE1NS41MjQgNTMuNTU1MUMxNTUuNDk2IDUzLjQ3NDggMTU1LjQ2OCA1My4zOTM4IDE1NS40NCA1My4zMTM1QzE1NS40MjQgNTMuMjY5MyAxNTUuNDA4IDUzLjIyNTIgMTU1LjM5MiA1My4xODFDMTU1LjM1IDUzLjA2MzIgMTU1LjMwOSA1Mi45NDY4IDE1NS4yNjYgNTIuODI5N0MxNTUuMjM5IDUyLjc1NjEgMTU1LjIxMyA1Mi42ODI0IDE1NS4xODYgNTIuNjA4OEwxNTUuMTIzIDUyLjQ0OUMxNTUuMTE5IDUyLjQzODcgMTU1LjExNiA1Mi40Mjc3IDE1NS4xMTEgNTIuNDE3M0wxNTUuMDkxIDUyLjM2MjlMMTU1LjA4NiA1Mi4zNDgxQzE1NS4wNjYgNTIuMjkyMiAxNTUuMDQ1IDUyLjIzNjkgMTU1LjAyNCA1Mi4xODFMMTU0Ljk3OSA1Mi4wNTk1TDE1NC45NDIgNTEuOTYyM0MxNTQuOTIxIDUxLjkwNDggMTU0LjkgNTEuODQ3NCAxNTQuODc4IDUxLjc5MDdDMTU0Ljg2OCA1MS43NjQ5IDE1NC44NTkgNTEuNzM5MSAxNTQuODQ5IDUxLjcxN0wxNTQuNzM5IDUxLjQyMjVMMTU0LjcyNyA1MS4zOTIzTDE1NC42OTYgNTEuMzEyOEMxNTQuNjY0IDUxLjIyOTYgMTU0LjYzMSA1MS4xNDYzIDE1NC41OTkgNTEuMDYyNEMxNTQuNTc2IDUxLjAwMjcgMTU0LjU1MyA1MC45NDI0IDE1NC41MjYgNTAuODgyN0wxNTQuNDk5IDUwLjgxNUwxNTQuNDAxIDUwLjU2MzFDMTU0LjM2OCA1MC40ODIxIDE1NC4zMzYgNTAuNDAxMSAxNTQuMzAzIDUwLjMyMDFMMTU0LjIyOSA1MC4xNDQxTDE1NC4xOTcgNTAuMDY0NkMxNTQuMTg2IDUwLjAzNjYgMTU0LjE3NSA1MC4wMDg2IDE1NC4xNjQgNDkuOTgwNkMxNTQuMTUzIDQ5Ljk1MjcgMTU0LjEzNiA0OS45MTIyIDE1NC4xMjIgNDkuODc4M0wxNTQuMDE5IDQ5LjYyNTdMMTUzLjk2NSA0OS40OTU0TDE1My44NjkgNDkuMjY0OUMxNTMuODMzIDQ5LjE3ODcgMTUzLjc5NiA0OS4wOTE4IDE1My43NjIgNDkuMDA1N0MxNTMuNzM3IDQ4Ljk0NiAxNTMuNzExIDQ4Ljg4NzEgMTUzLjY4OCA0OC44MjgyTDE1My42NTkgNDguNzU5TDE1My42MjIgNDguNjcxM0wxNTMuNDY3IDQ4LjMxMkMxNTMuNDQ3IDQ4LjI2MzQgMTUzLjQyNiA0OC4yMTU1IDE1My40MDUgNDguMTY0N0wxNTMuMzkgNDguMTMwMUwxNTMuMjczIDQ3Ljg2MDZDMTUzLjI0NiA0Ny43OTg3IDE1My4yMTggNDcuNzM2OSAxNTMuMTkgNDcuNjc1QzE1My4xNjIgNDcuNjEzMSAxNTMuMTM0IDQ3LjU0OTggMTUzLjEwNiA0Ny40ODY1TDE1My4xMDIgNDcuNDc2OUwxNTIuOTc4IDQ3LjE5OTNMMTUyLjg5NyA0Ny4wMjA0TDE1Mi44NzEgNDYuOTYyMkMxNTIuODYxIDQ2Ljk0MDggMTUyLjg1MiA0Ni45MTk1IDE1Mi44NDEgNDYuODk4MUwxNTIuODI2IDQ2Ljg2MjhMMTUyLjY5MSA0Ni41NjgyTDE1Mi42NDUgNDYuNDY5NUMxNTIuNjQyIDQ2LjQ2MDcgMTUyLjYzNyA0Ni40NTI2IDE1Mi42MzQgNDYuNDQzOEMxNTIuNjMgNDYuNDM0OSAxNTIuNjE3IDQ2LjQwNzcgMTUyLjYwOSA0Ni4zODkzQzE1Mi42MDEgNDYuMzcwOSAxNTIuNTk0IDQ2LjM1ODMgMTUyLjU4NyA0Ni4zNDI5TDE1Mi40MjYgNDUuOTk5QzE1Mi40MDcgNDUuOTU3NyAxNTIuMzg3IDQ1LjkxNjUgMTUyLjM2OCA0NS44NzZDMTUyLjM0OSA0NS44MzU1IDE1Mi4zMjEgNDUuNzc4MSAxNTIuMjk5IDQ1LjcyODdDMTUyLjI3NiA0NS42Nzk0IDE1Mi4yNTIgNDUuNjMyMyAxNTIuMjI5IDQ1LjU4MTVMMTUyLjE3OSA0NS40Nzc2QzE1Mi4xMzcgNDUuMzg3OCAxNTIuMDk0IDQ1LjI5NzkgMTUyLjA1MSA0NS4yMDgxQzE1MS45ODkgNDUuMDgwNyAxNTEuOTI2IDQ0Ljk1NDEgMTUxLjg2NCA0NC44MjY3QzE1MS44MjkgNDQuNzUzIDE1MS43OTUgNDQuNjg0NSAxNTEuNzYgNDQuNjEzOEMxNTEuNzUyIDQ0LjU5ODQgMTUxLjc0NSA0NC41ODI5IDE1MS43MzcgNDQuNTY3NEMxNTEuNjg3IDQ0LjQ2NTEgMTUxLjYzNSA0NC4zNjM1IDE1MS41ODQgNDQuMjYxOEwxNTEuNTU3IDQ0LjIwODFDMTUxLjU1MSA0NC4xOTM0IDE1MS41NDMgNDQuMTc5NCAxNTEuNTM2IDQ0LjE2NTRMMTUxLjQwMyA0My45MDAzTDE1MS4zOTQgNDMuODg0MUwxNTEuMzIgNDMuNzM2OEwxNTEuMjMzIDQzLjU2NzRMMTUxLjE1IDQzLjQwNTRMMTUxLjE0NyA0My4zOTE0TDE1MS4wODQgNDMuMjY5OUMxNTEuMDA0IDQzLjExNTMgMTUwLjkyMyA0Mi45NTk5IDE1MC44NDIgNDIuODA1M0MxNTAuODEgNDIuNzQ0OSAxNTAuNzc4IDQyLjY4MzggMTUwLjc0NiA0Mi42MjM0TDE1MC42NjQgNDIuNDcwMkwxNTAuNDg1IDQyLjEzOTZMMTUwLjQwNCA0MS45ODg2QzE1MC4zNzggNDEuOTQxNSAxNTAuMzUzIDQxLjg5NDQgMTUwLjMzIDQxLjg0NzJDMTUwLjE3NCA0MS41NiAxNTAuMDE2IDQxLjI3MzMgMTQ5Ljg1NSA0MC45ODcxTDE0OS43NyA0MC44MzQ3TDE0OS43MzQgNDAuNzcwNkMxNDkuNjY4IDQwLjY1MzMgMTQ5LjYwMiA0MC41MzY3IDE0OS41MzUgNDAuNDIwOEwxNDkuNDk1IDQwLjM0NzJMMTQ5LjM0NCA0MC4wODI4QzE0OS4zMzggNDAuMDczMyAxNDkuMzMyIDQwLjA2NDQgMTQ5LjMyNyA0MC4wNTQ5TDE0OS4xNSAzOS43NTA3TDE0OS4wOTcgMzkuNjU4N0wxNDguOTU5IDM5LjQyM0wxNDguOTUzIDM5LjQxMzVMMTQ4LjczMiAzOS4wMzcyQzE0OC43MTEgMzkuMDAyOSAxNDguNjg2IDM4Ljk3MDggMTQ4LjY1OSAzOC45NDE0QzE0Ny44OTcgMzcuODM2OSAxNDUuNDkzIDM3LjM4NDcgMTQzLjU4NyAzNy4yMDE0QzE0MS41MjYgMzcuMDAxOCAxMzcuOTg2IDM2LjkyMjMgMTMyLjg2OSAzNy42NzQ5QzEyNi42OTIgMzguNTgyOCAxMTguNjkzIDM5LjkwMzkgMTExLjYwMSA0Mi4wNzMzQzEwOC41OTIgNDIuOTk0NSAxMDUuOTIxIDQ0LjAxNjYgMTAzLjYyNiA0NS4xMjI3QzkxLjg2OTcgNDYuODc3NSA3OS43MTYyIDQ4LjY5MTIgNjcuMzM0NCA1MC4yOTI5QzY1LjMxNjEgNTAuNTU0IDYzLjM0MjYgNTAuODEwNSA2MS40MTQxIDUxLjA2MjRDNjcuNjc2OCA0Ny44NDk1IDcyLjQ0MzMgNDQuODA5NyA3NS44OTY0IDQxLjgzMThDNzYuNzc5MyA0MS4wNzQ2IDc3LjYxODMgNDAuMjY3NyA3OC40MDkzIDM5LjQxNDlDODAuNDE2NCAzOC44MDA4IDgyLjQxNzMgMzguMTgyIDg0LjQxMjEgMzcuNTU4NUM5Ni40MTMyIDMzLjgwMjkgMTA1Ljc3IDMwLjI0NzYgMTEyLjIzIDI2Ljk4MDNDMTEyLjM3OCAyNi45MDY3IDExMi41MTcgMjYuODMzIDExMi42NTggMjYuNzU5NEwxMTIuNzg1IDI2LjY5MzhMMTEzLjA3OSAyNi41NDI5TDExMy4yMzUgMjYuNDYwNEwxMTMuNDg5IDI2LjMyNzFMMTEzLjY1MyAyNi4yMzg3QzExMy43MzIgMjYuMTk2OCAxMTMuODEyIDI2LjE1NDEgMTEzLjg5IDI2LjExMTRMMTE0LjA1MyAyNi4wMjNMMTE0LjI4NSAyNS44OTYzTDExNC40NDEgMjUuODA5NEwxMTQuNjc0IDI1LjY3OTFMMTE0LjgyMSAyNS41OTc0TDExNS4wNTIgMjUuNDY1NUwxMTUuMTkgMjUuMzg2N0MxMTUuMzAxIDI1LjMyMzQgMTE1LjQxIDI1LjI1OTggMTE1LjUxOCAyNS4xOTZMMTE1LjU0OCAyNS4xNzgzQzExNS42NjcgMjUuMTA5MSAxMTUuNzgyIDI1LjAzOTkgMTE1Ljg5NyAyNC45NzA3TDExNi4wMDQgMjQuOTA2NkwxMTYuMjM3IDI0Ljc2NDVMMTE2LjM2NSAyNC42ODU3TDExNi41NjggMjQuNTU5OEwxMTYuNyAyNC40NzU4TDExNi44OTEgMjQuMzU0M0wxMTcuMDIyIDI0LjI3MDRMMTE3LjIwOCAyNC4xNDk2TDExNy4zMzMgMjQuMDY3MUwxMTcuNTE4IDIzLjk0MzRMMTE3LjYzMyAyMy44Njk4QzExNy43IDIzLjgyNDkgMTE3Ljc2NSAyMy43Nzk5IDExNy44MyAyMy43MzQzTDExNy45MjQgMjMuNjcwMkMxMTguMDIyIDIzLjYwMzkgMTE4LjExNiAyMy41Mzc5IDExOC4yMDYgMjMuNDcyMUMxMjAuNjI1IDIxLjc0NiAxMjMuNDYyIDE5LjAwMyAxMjMuMjM4IDE1Ljc0MDFDMTIzLjIzOCAxNS43MTU4IDEyMy4yMzUgMTUuNjkyMiAxMjMuMjMzIDE1LjY2NjRWMTUuNjM3N0MxMjMuMDk1IDE0LjE5NDQgMTIyLjAzOSAxMS45OTk5IDExNy45MTMgOS41NjQ3MUwxMTcuODg5IDkuNTUwNzJMMTE3Ljc1MSA5LjQ2OTcxTDExNy42NjMgOS40MTk2NEwxMTcuNTY5IDkuMzY1ODhMMTE3LjQyNiA5LjI4NDg4TDExNy4zNzQgOS4yNTU0MkwxMTcuMTcxIDkuMTQyNzZMMTE3LjE0NSA5LjEyODc2TDExNy4xMzUgOS4xMjM2MUwxMTcuMTIyIDkuMTE2MjVDMTE2LjY4IDguODg2IDExNi4yMzkgOC42NTk0NCAxMTUuNzk3IDguNDM2NTZMMTE1Ljc2NyA4LjQyMTgzQzExNS40ODkgOC4yODI2NSAxMTUuMjEgOC4xNDQyMSAxMTQuOTMgOC4wMDg3MkwxMTQuODg4IDcuOTg4MUwxMTQuNzAyIDcuODk3NTJMMTE0LjQwOCA3Ljc1Njg3SDExNC40MDFMMTE0LjIxNiA3LjY2OTI0TDExNC4xNTkgNy42NDI3M0wxMTQuMDczIDcuNjAxNDlMMTEzLjg2IDcuNTAxMzVMMTEzLjc5MyA3LjQ2OTY4TDExMy41ODEgNy4zNzE3NEwxMTMuNDkgNy4zMjk3N0wxMTMuNDcxIDcuMzIwOTNMMTEzLjMxNiA3LjI0NzI5TDExMy4yNDMgNy4yMTQxNUwxMTIuOTQ4IDcuMDgwODdMMTEyLjg5NCA3LjA1NTgzTDExMi43ODUgNy4wMDcyM0wxMTIuNjk2IDYuOTY2NzNMMTEyLjM4NCA2LjgyNzU1TDExMi4zMSA2Ljc5NDQxTDExMi4yODEgNi43ODE5TDExMi4xNTUgNi43MjU5M0wxMTEuODIzIDYuNTc4NjVMMTExLjY0NiA2LjUwNTAxTDExMS40NzYgNi40MzEzN0wxMTEuMTA4IDYuMjczMDVMMTEwLjgyMiA2LjE1MzAyTDExMC41MjcgNi4wMzAwNEwxMTAuMzQ0IDUuOTU2NEwxMTAuMjI3IDUuOTA3OEMxMTAuMDkyIDUuODUyNTcgMTA5Ljk1NiA1Ljc5ODA4IDEwOS44MjEgNS43NDM1OUwxMDkuNjczIDUuNjg1NDFMMTA5LjI2NSA1LjUyMzQxTDEwOS4xMzMgNS40NzE4NkwxMDguNzAyIDUuMzA0N0wxMDguNjI5IDUuMjc1OThDMTA4LjM5IDUuMTg0NjcgMTA4LjE0OSA1LjA5NDA5IDEwNy45MDggNS4wMDQyNUgxMDcuOUMxMDcuNDY0IDQuODQyMjUgMTA3LjAyNiA0LjY4MjQ1IDEwNi41OTMgNC41MzAwMkwxMDYuNTY2IDQuNTIwNDVMMTA2LjA3NCA0LjM0ODg3TDEwNi4wMTMgNC4zMjgyNUMxMDUuODQ4IDQuMjcxNzkgMTA1LjY4NCA0LjIxNjA3IDEwNS41MjEgNC4xNjEwOUwxMDUuNDg3IDQuMTQ5MzFMMTA1LjIzNCA0LjA2NTM2TDEwNS4wMTMgMy45OTE3MkwxMDQuNjUxIDMuODczOUwxMDQuMzggMy43ODdMMTA0LjA1MSAzLjY4MjQ0TDEwMy43MzQgMy41ODMwMkwxMDMuNDM5IDMuNDkxNzFMMTAyLjkwNiAzLjMzMDQ0TDEwMi44MzIgMy4zMDgzNUwxMDIuODA4IDMuMzAwOTlMMTAyLjI5MiAzLjE0OTI5SDEwMi4yODFIMTAyLjI3NEwxMDIuMjUzIDMuMTQzNEwxMDIuMTI2IDMuMTA3MzJDMTAxLjIyNyAyLjg0OTA5IDEwMC4zMjQgMi42MDYzMyA5OS40MTY0IDIuMzc5MDNDODQuNDY5NCAtMS4zMzgyNCA2OC43Njk4IC0wLjY4ODMxNSA1NC4xODEgNC4yNTE2N0w1NC4xNTgyIDQuMjU5NzdDNTMuOTkxMSA0LjMxNzIgNTMuODIzMiA0LjM3NDY0IDUzLjY1NjEgNC40MzM1NUw1My41MjY1IDQuNDc4NDdDNTMuMzU3MSA0LjUzNzM4IDUzLjE4ODUgNC41OTc3NyA1My4wMTk5IDQuNjU4MTVMNTIuOTA3MyA0LjY5NzkyTDUyLjM3NzkgNC44OTA4NUw1Mi4zMTA5IDQuOTE1MTVDNDcuODc2NiA2LjU1MDg1IDQzLjU5NjcgOC41NzgyOCAzOS41MjIgMTAuOTczNEwzOS40ODA4IDEwLjk5NzdDMzkuMzQ3NSAxMS4wNzU4IDM5LjIxNDIgMTEuMTU1MyAzOS4wODE3IDExLjIzNDhMMzguODc0MSAxMS4zNTg1QzM4Ljc2MDcgMTEuNDI2MyAzOC42NDc4IDExLjQ5NDUgMzguNTM1NCAxMS41NjMzQzM4LjQ0NTYgMTEuNjE3OCAzOC4zNTU3IDExLjY3MjIgMzguMjY2NyAxMS43Mjc1QzM4LjE2NiAxMS43ODg4IDM4LjA2NTQgMTEuODUwNyAzNy45NjQ4IDExLjkxM0MzNy44NjQyIDExLjk3NTQgMzcuNzYxNiAxMi4wMzkyIDM3LjY1NyAxMi4xMDQ1TDM3LjM4NTMgMTIuMjc0NkMzNy4yNzA1IDEyLjM0NjggMzcuMTU1OSAxMi40MjA0IDM3LjA0MTUgMTIuNDk1NUwzNi44MDUyIDEyLjY0NUMzNi42NzAyIDEyLjczMDkgMzYuNTM2MiAxMi44MTc2IDM2LjQwMzIgMTIuOTA1TDM2LjIyMiAxMy4wMjI4QzM2LjAyNTcgMTMuMTUwOSAzNS44MzExIDEzLjI3OTUgMzUuNjM4MiAxMy40MDg3QzM1LjMxMjggMTMuNjI1OSAzNS4xNTIzIDEzLjk3NDIgMzUuMjE5MiAxNC4zMTg4QzM1LjM0MjIgMTQuOTU0MyAzNi4wOTg0IDE1LjE3OTcgMzYuNjU3MiAxNS4yOTM4QzM5LjEyNDQgMTUuNzk4MiA0NC4zNjgxIDE2LjM2MDggNDguMjQzIDE2LjM5MzJDNDguMzk0NyAxNi4zOTMyIDQ4LjU0NTcgMTYuMzkzMiA0OC42OTczIDE2LjM5MzJDNTIuOTQzNCAxNi4zOTMyIDU3LjIwNjMgMTUuODk2MiA2MC40NTc3IDE1LjAxNzdDNjIuNDE0NyAxNC40ODgyIDYzLjk5MTggMTMuODI5OSA2NS4xNDExIDEzLjA1OTZDNjYuMjkwNCAxMi4yODkzIDY3LjAyODEgMTEuMzk2MSA2Ny4zMjg1IDEwLjQwODZDNzIuMDg0MSAxMC4wNTQ0IDc3LjE2ODcgOS44MDE4MiA4Mi40Mjc4IDkuNzMwMzlDODcuMjM4MSA5LjY2NDEyIDkxLjY3NTYgOS43MTc4OCA5NS43NDAyIDkuODkxNjZDOTIuNjg5OSAxMi4yNzkgODcuNDU2NSAxNC44MzY1IDgwLjc2MzEgMTcuMTkzN0M3Ni43NDE3IDE4LjYwOSA3MS41ODQxIDIwLjMzODggNjUuOTY0MiAyMi4xMTU3QzYxLjEzNjUgMjIuNDY3IDU1LjEwNzIgMjMuNDIxMyA0Ny42MjAyIDI0Ljc2MTZDNDAuMzQ1MSAyNi4wNjY0IDMyLjc0MzIgMjcuNzggMjYuNzU0NCAyOS40NjYzQzE5LjM2OTcgMzEuNTQ1OSAxNS4wMjc5IDMzLjQwMDEgMTMuODUwNiAzNC45Nzc1TDEzLjgzNTIgMzQuOTk5NkwxMy40NDQyIDM1LjU3OTFDMTMuMzEyNCAzNS43NzY0IDEzLjE4MDYgMzUuOTc0NSAxMy4wNTEgMzYuMTcyNkMxMy4wNDc4IDM2LjE3NjYgMTMuMDQ0OSAzNi4xODA4IDEzLjA0MjIgMzYuMTg1MUMxMi44MTc2IDM2LjUyNjggMTIuNTg1IDM2Ljg4ODQgMTIuMzMwMiAzNy4yODk3TDEyLjI2NTQgMzcuMzkzNkwxMi4xNzcxIDM3LjUzNDJDMTIuMDgxOSAzNy42ODU5IDExLjk4NzQgMzcuODM3OCAxMS44OTM2IDM3Ljk5TDExLjg4NjMgMzguMDAxOEwxMS44ODExIDM4LjAxMDZMMTEuNzIzNiAzOC4yNjU0TDExLjUyNTUgMzguNTkxN0MxMS41MTc0IDM4LjYwNDIgMTEuNTEgMzguNjE2NyAxMS41MDI3IDM4LjYyOTJMMTEuNDQ2IDM4LjcyMTNMMTEuMjY2MyAzOS4wMjE3QzExLjIzMTcgMzkuMDc5MSAxMS4xOTc5IDM5LjEzNzMgMTEuMTYzMyAzOS4xOTU1TDExLjEyNDIgMzkuMjYwM0wxMS4wMDI3IDM5LjQ2NUwxMC45ODIxIDM5LjUwMDRMMTAuOTc4NSAzOS41MDc3QzEwLjgwMzIgMzkuODA2IDEwLjYyNDMgNDAuMTE1MiAxMC40MzczIDQwLjQ0MzdDMTAuNDIyNiA0MC40Njk0IDEwLjQwNzggNDAuNDk1MiAxMC4zOTM5IDQwLjUxNzNDMTAuMzc5OSA0MC41Mzk0IDEwLjM1NTYgNDAuNTgzNiAxMC4zMzY0IDQwLjYxODJMMTAuMjg3OCA0MC43MDIxTDEwLjIwMzkgNDAuODQ5NEwxMC4wNzg3IDQxLjA3MThMMTAuMDMwMSA0MS4xNTk0TDkuOTMxNDggNDEuMzM2OUw5Ljg5OTgyIDQxLjM5NDRMOS43ODQyMyA0MS42MDk0QzkuNzY0MzUgNDEuNjQ2MiA5Ljc0NDQ3IDQxLjY4MyA5LjcyMzg2IDQxLjcxOThMOS42OTQ0IDQxLjc3NDNDOS42MzY0OSA0MS44ODA0IDkuNTc4ODEgNDEuOTg2NCA5LjUyMTM4IDQyLjA5MjRMOS4zNzQxMyA0Mi4zNjQyQzkuMjg3MjUgNDIuNTI4NCA5LjE5OTYzIDQyLjY5MTkgOS4xMTIwMiA0Mi44NTgzTDkuMTAxNzEgNDIuODc4OUM4Ljg5OTk3IDQzLjI2MjYgOC42OTgyNCA0My42NTUxIDguNDg0NzIgNDQuMDc5Mkw4LjM4NTMzIDQ0LjI3NTFDOC4yOTkxOCA0NC40NDc0IDguMjE0NTEgNDQuNjE5NyA4LjEyNjE2IDQ0Ljc5ODdMOC4wMDU0MSA0NS4wNDU0QzcuOTIxOTcgNDUuMjE2NyA3LjgzOTAyIDQ1LjM4ODUgNy43NTY1NiA0NS41NjA4QzcuNzI3ODQgNDUuNjIxMiA3LjY5OTg2IDQ1LjY4MTYgNy42NzExNSA0NS43NDEyTDcuNjQ1MzggNDUuNzk2NUM3LjUwMTgxIDQ2LjA5ODQgNy4zNTgyMyA0Ni40MDY5IDcuMjE3NjEgNDYuNzEzM1Y0Ni43MTdDNy4wNzc3MiA0Ny4wMjE4IDYuOTM3ODMgNDcuMzMxOCA2LjgwMTYyIDQ3LjYzOTdMNi43NTg5MiA0Ny43MzYxVjQ3Ljc0MTNMNi43MzgzIDQ3Ljc4ODRDNi42NTY1NyA0Ny45NzMyIDYuNTc2MzIgNDguMTU2NiA2LjQ5NjA3IDQ4LjM0NTFMNi4zOTc0MSA0OC41NzcxQzYuMzE4NjMgNDguNzYxMiA2LjI0MTMyIDQ4Ljk0NTMgNi4xNjQwMSA0OS4xMzAxTDYuMDc1NjYgNDkuMzQxNUM1Ljk0MjQgNDkuNjYxOCA1LjgwOTEzIDQ5Ljk4OTUgNS42ODEwMiA1MC4zMTA1TDUuNjczNjYgNTAuMzI3NUM1LjU0MzM0IDUwLjY1NDQgNS40MTM3NiA1MC45ODQzIDUuMjg4NTkgNTEuMzA5OEw1LjI1NTQ2IDUxLjM5NTJDNS4xODE4NCA1MS41OTMzIDUuMTA4MjEgNTEuNzkyOSA1LjAzMDE2IDUxLjk5MTdMNC45NTY1NCA1Mi4xOTg2QzQuODg0MzggNTIuMzk1IDQuODEyOTcgNTIuNTkxNCA0Ljc0MjI4IDUyLjc4NzhMNC42Njg2NiA1Mi45ODE0QzQuNTQ4NjUgNTMuMzE1NyA0LjQyNzkgNTMuNjU4OSA0LjMxMTU3IDUzLjk5NzZMNC4zMDEyNiA1NC4wMjcxQzQuMTgxOTkgNTQuMzc2MSA0LjA2NDkyIDU0LjcyMyAzLjk1NDQ4IDU1LjA1OEwzLjk1MDggNTUuMDY4M1Y1NS4wNzc5TDMuOTQ3MTIgNTUuMDkwNEMzLjg3ODY1IDU1LjI5ODggMy44MTE2NSA1NS41MDg3IDMuNzQ0NjUgNTUuNzE3OEwzLjY4MzU0IDU1LjkxMDhDMy42MTkyMyA1Ni4xMTQgMy41NTU5MiA1Ni4zMTc1IDMuNDkzNTggNTYuNTIxMkwzLjQzNjg5IDU2LjcwNzVDMy4zMzE2IDU3LjA1NDQgMy4yMjYzMSA1Ny40MDkzIDMuMTIzMjQgNTcuNzY0M0wzLjExMzY3IDU3Ljc5NzRDMy4wMDkxMiA1OC4xNTkgMi45MDgyNSA1OC41MTkxIDIuODEyNTMgNTguODY4MUMyLjgxMjgyIDU4Ljg2OTMgMi44MTI4MiA1OC44NzA2IDIuODEyNTMgNTguODcxOFY1OC44NzkyQzIuNzY3ODcgNTkuMDQ1MSAyLjcyMzIgNTkuMjExIDIuNjc4NTMgNTkuMzc3TDIuNTgyMDggNTkuNzQ1MUwyLjQ3ODI3IDYwLjE0MzVDMi40NTc2NSA2MC4yMjUzIDIuNDM3MDQgNjAuMzA3IDIuNDE3MTYgNjAuMzg4OEwyLjIzNDU3IDYxLjEyNTFDMS4zNDcxNyA2NC43OTYyIDAuNzIxMjUgNjguNTI1NSAwLjM2MTUwNiA3Mi4yODUxQzAuMzU0ODggNzIuMzQ5OSAwLjM0ODk4OSA3Mi40MTQ3IDAuMzQzMDk5IDcyLjQ4MDJDMC4zMjgzNzQgNzIuNjMyNyAwLjMxNTEyMSA3Mi43ODQ0IDAuMzAxMTMyIDcyLjkzNjhMMC4yNzkwNDUgNzMuMTk1M0MwLjI2ODAwMSA3My4zMjg2IDAuMjU2OTU2IDczLjQ2MjYgMC4yNDY2NDkgNzMuNTk1OUMwLjIzOTI4NiA3My42ODg3IDAuMjMxMTg4IDczLjc4MDcgMC4yMjQ1NjEgNzMuODczNUMwLjIxNDI1MyA3NC4wMDkgMC4yMDQ2ODIgNzQuMTQ1MiAwLjE5NTExIDc0LjI4MDdDMC4xODg0ODQgNzQuMzY3NiAwLjE4MTg1NyA3NC40NTM4IDAuMTc1OTY3IDc0LjUzOTlDMC4xNjE5NzggNzQuNzQ1NCAwLjE0OTQ2MiA3NC45NTA4IDAuMTM2OTQ1IDc1LjE1N0wwLjExOTI3NSA3NS40NjExQzAuMTEyNjQ5IDc1LjU4MDQgMC4xMDYwMjIgNzUuNjk5IDAuMTAwMTMyIDc1LjgxNzZDMC4wOTQyNDIgNzUuOTIzNiAwLjA4OTA4ODIgNzYuMDI5NiAwLjA4NDY3MDYgNzYuMTM1N0MwLjA3ODc4MDUgNzYuMjUyOCAwLjA3MzYyNjUgNzYuMzY5OSAwLjA2ODQ3MjcgNzYuNDg2MkMwLjA2MzA3MzQgNzYuNTg5OCAwLjA1ODY1NTggNzYuNjkzNiAwLjA1NTIxOTkgNzYuNzk3N0MwLjA1MDA2NiA3Ni45MjQzIDAuMDQ1NjQ4MyA3Ny4wNTAzIDAuMDQxMjMwNyA3Ny4xNzYyQzAuMDQxMjMwNyA3Ny4yNjk3IDAuMDM0NjA0NSA3Ny4zNjMyIDAuMDMxNjU5NCA3Ny40NTY4QzAuMDI1MDMzIDc3LjY1NjMgMC4wMTk4Nzg5IDc3Ljg1NTEgMC4wMTQ3MjUxIDc4LjA1NDdDMC4wMTQ3MjUxIDc4LjEwODUgMC4wMTQ3MjUxIDc4LjE2MyAwLjAxNDcyNTEgNzguMjE2N0MwLjAxMDc5ODMgNzguNDAxOCAwLjAwNzM2MjQ3IDc4LjU4NjYgMC4wMDQ0MTc0MSA3OC43NzEyQzAuMDA0NDE3NDEgNzguNzkyNiAwLjAwNDQxNzQxIDc4LjgxMzkgMC4wMDQ0MTc0MSA3OC44MzZWNzguODQwNEMwLjAwNDQxNzQxIDc4Ljk2NzEgMC4wMDQ0MTc1OSA3OS4wODU2IDAgNzkuMTk5MUMwIDc5LjI1NDMgMCA3OS4zMDk1IDAgNzkuMzY1NUMwIDc5LjU0NTkgMCA3OS43MTE2IDAgNzkuODcwNlY3OS45MDA4QzAuMDE0NzI1MyA4MC40NjY0IDAuNDAyNzM3IDgxLjc4MzggMy42NzM5NiA4MS44MDE0SDMuODA3OTZDNi4xNDcwOCA4MS44MDE0IDExLjcwNzQgODEuNTAyNSAxNy42NDMxIDgwLjkzNEMyOC4wMDc1IDc5Ljk0MTMgNDguMjU3IDc3LjMyNTcgNzEuNzA0MSA3NC4yODg4TDc0LjUwMTkgNzMuOTI2NUM4MS4xMjgzIDczLjA2OTQgOTAuNDA1MyA3MS43OTEgMTAwLjYzOSA3MC4zNDkxQzEwMi4zOTIgNzEuMzU4IDEwNC4zNDIgNzIuMjQyNCAxMDYuMzkgNzMuMDIwOEM5NS45OTA2IDc1LjM3NzIgODUuNDUxNyA3Ny43ODU5IDc1LjM3NzQgODAuMjEzMUM2Ny4zMTY3IDgyLjE1NDkgNTkuNTA4NiA4NC4xNDM5IDUyLjE2MDcgODYuMDgyOEM0NC4yNzgzIDg2LjkyMDggMzYuNjE0NSA4OC4yMDU4IDI4LjU4MTEgOTAuMDEyOUMxOS43NTExIDkyLjAwMTIgMTEuMjI2NiA5NC42MTM5IDQuNTc4ODMgOTcuMzc2OEw0LjQwMjg3IDk3LjQ1MDRDMi45MDE2MiA5OC4wNjk3IDIuMjk0MiA5OS4wMzk2IDIuNTk2MDcgMTAwLjMzM1YxMDAuMzQzTDIuNTk5NzUgMTAwLjM1N0wyLjY1OTM5IDEwMC41NzhWMTAwLjU4N0wyLjc2MzIgMTAwLjk4VjEwMC45ODVDMi44MzgzIDEwMS4yNjEgMi45MTQ4NyAxMDEuNTM3IDIuOTkyOTIgMTAxLjgxM0MzLjAxNjQ4IDEwMS44OTcgMy4wNDA3OCAxMDEuOTgyIDMuMDY2NTQgMTAyLjA2N0MzLjEyOTg2IDEwMi4yODggMy4xOTQxNiAxMDIuNTA5IDMuMjU5NDUgMTAyLjczTDMuMzE1NCAxMDIuOTIxQzMuMzk2MzkgMTAzLjE5MiAzLjQ3ODYxIDEwMy40NjIgMy41NjIwNSAxMDMuNzMxTDMuNjM1NjggMTAzLjk2OEMzLjcwMTIxIDEwNC4xNzcgMy43Njc0NyAxMDQuMzg1IDMuODM0NDcgMTA0LjU5M0wzLjg1ODc3IDEwNC42NjdDMy44NzY0NCAxMDQuNzIzIDMuODk0ODQgMTA0Ljc3OCAzLjkxMjUxIDEwNC44MzNDMy45NDcxMiAxMDQuOTQgMy45ODYxNCAxMDUuMDQ2IDQuMDE4NTQgMTA1LjE1M0M0LjA3MDA3IDEwNS4zMDkgNC4xMjE2MSAxMDUuNDY2IDQuMTczODkgMTA1LjYyMkw0LjI0MzEgMTA1LjgyNUM0LjMxNDc2IDEwNi4wMzQgNC4zODY5MSAxMDYuMjQyIDQuNDU5NTYgMTA2LjQ1MUw0LjU1NDU0IDEwNi43MjFDNC42Mzk5NCAxMDYuOTYxIDQuNzI2MDkgMTA3LjIwMSA0LjgxMjk3IDEwNy40NEw0Ljg3OTk3IDEwNy42MjRDNC45NjM5IDEwNy44NTIgNS4wNDkwNiAxMDguMDggNS4xMzU0NSAxMDguMzA4QzUuMTcxNTMgMTA4LjQwMyA1LjIwOTA4IDEwOC40OTggNS4yNDQ0MiAxMDguNTkzQzUuMjc5NzYgMTA4LjY4OCA1LjMxODA0IDEwOC43ODMgNS4zNTQxMiAxMDguODc4TDUuNDY2NzcgMTA5LjE3M0w1LjUwMzU4IDEwOS4yNjdDNS41MjEyNSAxMDkuMzE0IDUuNTM5NjYgMTA5LjM2IDUuNTU4MDcgMTA5LjQwN0M1LjY1NTk5IDEwOS42NTUgNS43NTYxMiAxMDkuOTAzIDUuODU2MjUgMTEwLjE1TDUuOTU3ODYgMTEwLjM5N0w1Ljk3NyAxMTAuNDQ0QzYuMDUwNjMgMTEwLjYxNiA2LjExOTg0IDExMC43ODkgNi4xOTE5OSAxMTAuOTU5TDYuMjIyMTggMTExLjAzM0w2LjMxNTY4IDExMS4yNTRDNi40MTc3OCAxMTEuNDk0IDYuNTIwNjEgMTExLjczMiA2LjYyNDE4IDExMS45NzFMNi43MTQ3NCAxMTIuMTc3TDYuNzU0NSAxMTIuMjY1QzYuODI4MTIgMTEyLjQyNiA2Ljg5NzMzIDExMi41ODggNi45Njk0OSAxMTIuNzQ5QzcuMDE5NTUgMTEyLjg2IDcuMDY4ODggMTEyLjk3IDcuMTE2NzQgMTEzLjA4MkM3LjE5OTIgMTEzLjI2NCA3LjI4MjQgMTEzLjQ0NSA3LjM2NjMzIDExMy42MjVDNy40MzM1OCAxMTMuNzcyIDcuNTAxMDcgMTEzLjkxNyA3LjU2ODgxIDExNC4wNThDNy42NDI0MyAxMTQuMjE1IDcuNzE2MDYgMTE0LjM3MiA3Ljc4OTY5IDExNC41MjhDNy44NDcxMiAxMTQuNjQ5IDcuOTA1MDQgMTE0Ljc2OSA3Ljk2MzQ1IDExNC44ODlDOC4wMzA0NSAxMTUuMDI4IDguMDk4OTIgMTE1LjE2NyA4LjE2NzM5IDExNS4zMDZDOC4yNDc2NCAxMTUuNDcgOC4zMjkzNyAxMTUuNjMzIDguNDExMDkgMTE1Ljc5N0M4LjQ5MjgyIDExNS45NiA4LjU3NjAyIDExNi4xMjYgOC42NTk5NSAxMTYuMjlDOC43MjUyMyAxMTYuNDE5IDguNzkxMjUgMTE2LjU0OCA4Ljg1ODAxIDExNi42NzZDOC45MTkxMiAxMTYuNzk0IDguOTc5NDkgMTE2LjkxMSA5LjA0MDYgMTE3LjAyN0w5LjA1OTAxIDExNy4wNjNDOS4xMjE4MyAxMTcuMTgzIDkuMTg0NjYgMTE3LjMwMyA5LjI0NzQ5IDExNy40MjJDOS4zNTEwNiAxMTcuNjE4IDkuNDU1MTIgMTE3LjgxMyA5LjU1OTY3IDExOC4wMDVMOS44MDExNiAxMTguNDQ2QzkuODU2MzggMTE4LjU0NiA5LjkxMDg3IDExOC42NDUgOS45NjYwOSAxMTguNzQxQzEwLjA0NTEgMTE4Ljg4NSAxMC4xMjQ2IDExOS4wMjggMTAuMjA0NiAxMTkuMTY5TDEwLjMwMzMgMTE5LjM0NEwxMC4zNDc1IDExOS40MThDMTAuNDk5MSAxMTkuNjg1IDEwLjY1MTYgMTE5Ljk1MSAxMC44MDE3IDEyMC4yMDlMMTAuOTM2NSAxMjAuNDM5QzExLjAyNTYgMTIwLjU5MiAxMS4xMTYxIDEyMC43NDUgMTEuMjA2NyAxMjAuODk3TDExLjMyODkgMTIxLjFDMTEuNTE5NiAxMjEuNDE4IDExLjcxMSAxMjEuNzM0IDExLjg5OTUgMTIyLjAzOEwxMS45NDk2IDEyMi4xMTlDMTIuMDUxMiAxMjIuMjg0IDEyLjE1MzUgMTIyLjQ0NiAxMi4yNTY2IDEyMi42MUwxMi4zNTgyIDEyMi43N0MxMi4zNzA3IDEyMi43OSAxMi4zODQgMTIyLjgxIDEyLjM5NjUgMTIyLjgzMUMxMi40MDkgMTIyLjg1MSAxMi40Mjc0IDEyMi44NzggMTIuNDQyMSAxMjIuOTA0QzEyLjU2NDQgMTIzLjA5NiAxMi42ODcxIDEyMy4yODcgMTIuODEwMyAxMjMuNDc4QzEyLjgxNzYgMTIzLjQ5IDEyLjgyNSAxMjMuNTAyIDEyLjgzMzEgMTIzLjUxM0MxMi45NDk0IDEyMy42OTIgMTMuMDY2IDEyMy44NyAxMy4xODI4IDEyNC4wNDhDMTMuMTgyOCAxMjQuMDQ4IDEzLjE4NzIgMTI0LjA1NiAxMy4xOTAyIDEyNC4wNkMxMy40MDc0IDEyNC4zOSAxMy42Mzg2IDEyNC43MzIgMTMuODk0OCAxMjUuMTA4TDEzLjkzMzggMTI1LjE2NEwxNC4wNTUzIDEyNS4zNDNMMTQuMTk3NCAxMjUuNTQ3TDE0LjI5MjQgMTI1LjY4NEwxNC4zNjAxIDEyNS43ODFMMTQuNTE5MiAxMjYuMDA4QzE0LjUyMzYgMTI2LjAxMyAxNC41MjczIDEyNi4wMTkgMTQuNTMwOSAxMjYuMDI1TDE0LjU0MzQgMTI2LjA0MUMxNC41NDM0IDEyNi4wNDcgMTQuNTUwMSAxMjYuMDUxIDE0LjU1MyAxMjYuMDU1QzE0LjY1MDIgMTI2LjE5MyAxNC43NDY3IDEyNi4zMyAxNC44NDc1IDEyNi40NjdMMTQuOTU2NSAxMjYuNjE5TDE1LjA2NjIgMTI2Ljc3TDE1LjE0NzkgMTI2Ljg4M0MxNS4zMDE4IDEyNy4wOTYgMTUuNDU3OSAxMjcuMzEgMTUuNjE2MiAxMjcuNTI0TDE1LjY2MzMgMTI3LjU4OEwxNS43NTI0IDEyNy43MDlDMTUuODYyOCAxMjcuODU2IDE1Ljk3MzggMTI4LjAwMyAxNi4wODUyIDEyOC4xNUMxNi4xMzk3IDEyOC4yMjQgMTYuMTk0OSAxMjguMjk4IDE2LjI0OTQgMTI4LjM3MUMxNi4zNjI4IDEyOC41MTkgMTYuNDc2NCAxMjguNjY2IDE2LjU5MDMgMTI4LjgxM0wxNi43MTEgMTI4Ljk2OUMxNi45NzE2IDEyOS4zMDYgMTcuMjMyMyAxMjkuNjM3IDE3LjQ4NTYgMTI5Ljk1M0wxNy41MjYxIDEzMC4wMDVDMTcuNjQ5NyAxMzAuMTU5IDE3Ljc3NDkgMTMwLjMxMyAxNy45MDAxIDEzMC40NjdMMTguMDQ3MyAxMzAuNjQ0QzE4LjE3MiAxMzAuNzk2IDE4LjI5NzIgMTMwLjk0OCAxOC40MjI4IDEzMS4xTDE4LjUzNjIgMTMxLjIzNUMxOC45NTU5IDEzMS43MzggMTkuMzg1OSAxMzIuMjQxIDE5LjgxMzYgMTMyLjcyOUwxOS45MjE5IDEzMi44NTJDMjAuMDU5OCAxMzMuMDA5IDIwLjE5ODcgMTMzLjE2NiAyMC4zMzg2IDEzMy4zMjJMMjAuNDM0MyAxMzMuNDI5QzIwLjg5MyAxMzMuOTQgMjEuMzYyIDEzNC40NSAyMS44MjgxIDEzNC45NDJMMjEuODc0NCAxMzQuOTkyQzIyLjAyNzYgMTM1LjE1NCAyMi4xODE3IDEzNS4zMTUgMjIuMzM2OCAxMzUuNDc2TDIyLjQxMDQgMTM1LjU1NEMyMi42Njc0IDEzNS44MjEgMjIuOTI1OCAxMzYuMDg3IDIzLjE5MDkgMTM2LjM1MUwyMy4yMTg5IDEzNi4zNzlDMjMuNjE0MiAxMzYuNzc3IDI0LjAxNCAxMzcuMTczIDI0LjQxNDYgMTM3LjU1N0wyNC40NjYxIDEzNy42MDZDMjQuNTAyOSAxMzcuNjQzIDI0LjUzOTcgMTM3LjY4IDI0LjU3ODcgMTM3LjcxNEMyNC43MTA1IDEzNy44NDEgMjQuODQyMyAxMzcuOTY3IDI0Ljk3NDkgMTM4LjA5MkwyNS4wNDg1IDEzOC4xNjJMMjUuMDY0NyAxMzguMTc3QzI1LjE4OTggMTM4LjI5NiAyNS4zMTY1IDEzOC40MTMgMjUuNDQyNCAxMzguNTMxQzI1LjUxNiAxMzguNjA1IDI1LjU4OTYgMTM4LjY3MSAyNS42NjY5IDEzOC43NEMyNS43NTM4IDEzOC44MjEgMjUuODQxNCAxMzguOTAxIDI1LjkyODMgMTM4Ljk4MUwyNi4xMTUzIDEzOS4xNTJDMjYuMjY2MyAxMzkuMjkgMjYuNDE3MiAxMzkuNDI2IDI2LjU2NjcgMTM5LjU2MUwyNi41NzExIDEzOS41NjRMMjYuNTk1NCAxMzkuNTg3TDI2LjYxMjMgMTM5LjYwMkMyNi43NTk2IDEzOS43MzUgMjYuOTEwNSAxMzkuODY5IDI3LjA2NTEgMTQwLjAwM0wyNy4yNDQ4IDE0MC4xNjJMMjcuNTMzNCAxNDAuNDE0QzI3LjY2MDggMTQwLjUyNCAyNy43ODgxIDE0MC42MzQgMjcuOTE1NSAxNDAuNzQzQzI3Ljk4OTEgMTQwLjgwOCAyOC4wNjI3IDE0MC44NzMgMjguMTQxNSAxNDAuOTM3TDI4LjE5NzUgMTQwLjk4NUwyOC4yMzk1IDE0MS4wMjFMMjguMjYyMyAxNDEuMDQyQzI4LjQwOTUgMTQxLjE2OCAyOC41NjI3IDE0MS4yOTQgMjguNzEzNiAxNDEuNDJMMjguODA0OSAxNDEuNDk0TDI4LjgxODIgMTQxLjUwNEMyOC44NTA2IDE0MS41MzEgMjguODg0NCAxNDEuNTU2IDI4LjkxOSAxNDEuNTc4QzI5LjAyNiAxNDEuNjUxIDI5LjE0MTggMTQxLjcwOSAyOS4yNjM2IDE0MS43NTNIMjkuMjY5NUgyOS4yNzU0QzI5LjU5NyAxNDEuODU1IDI5LjkzMzYgMTQxLjkwMiAzMC4yNzA4IDE0MS44OTFDMzAuOTY4MSAxNDEuODkxIDMxLjkyOTYgMTQxLjc2MSAzMy4zMDIgMTQxLjUwMkMzNy42NjUxIDE0MC42NzYgNTkuMDU4OCAxMzYuODk0IDg0LjAxMDEgMTMzLjQ3NUM5MS40NTMgMTMyLjQ1NSA5OS4wNDA5IDEzMS43MDggMTA1Ljk2OSAxMzEuMTYzQzEwNC40NTMgMTMzLjA5MiAxMDMuNjcxIDEzNS4wNDYgMTAzLjYzNyAxMzcuMDA0QzEwMy41NzQgMTQwLjYwNCAxMDcuNzkzIDE0My40MDQgMTExLjM5IDE0NS4yMjJDMTA2LjYyNiAxNDYuNzc3IDEwMS41OTggMTQ4LjE0MiA5Ni41NTA5IDE0OS4xMzhDOTMuMjM3NyAxNDkuNzkzIDg5Ljk5MzcgMTUwLjM1IDg2LjgzMjIgMTUwLjgyN0M4Ni43OTg1IDE1MC42MDggODYuNzQ2NiAxNTAuMzkyIDg2LjY3NjggMTUwLjE4MUM4Ni4wNjU3IDE0OC4zMzEgODMuNTc1NyAxNDcuMDQgNzkuNjY0NiAxNDYuNTQ1Qzc1Ljg3NTggMTQ2LjA2NSA3MS4wMzYzIDE0Ni4zNTUgNjYuMDM3OCAxNDcuMzYxQzU5LjI5NTkgMTQ4LjcxNiA1NS4wMjA0IDE1MC43OTEgNTMuODcwMyAxNTEuMzk0QzUyLjEwMzMgMTUyLjMyIDUxLjQwNjggMTUzLjAyIDUxLjQ1NjggMTUzLjgxQzUxLjUxMTMgMTU0LjY2OCA1Mi40NDQyIDE1NS4xMjUgNTMuMjYyMiAxNTUuNDNMNTMuMjgyIDE1NS40MzdMNTMuNjM0NyAxNTUuNTZMNTMuNjg3IDE1NS41NzlMNTQuMDMwMSAxNTUuNjk3QzU0LjU4NDUgMTU1Ljg4NyA1NS4xNDE4IDE1Ni4wNzEgNTUuNjg0NSAxNTYuMjQ0TDU1LjcyNjQgMTU2LjI1OEw1Ni4xNTEzIDE1Ni4zOTFDNTYuNDU1MyAxNTYuNDg2IDU2Ljc2NzUgMTU2LjU4MSA1Ny4wODM0IDE1Ni42NzVMNTcuMTI1NCAxNTYuNjg4TDU3LjE2IDE1Ni42OTlMNTcuMjEzIDE1Ni43MTRMNTcuNDEwMyAxNTYuNzczQzU3LjYwMzkgMTU2LjgzIDU3Ljc5NzYgMTU2Ljg4NyA1Ny45OTEyIDE1Ni45NDJMNTguMTAzOCAxNTYuOTc0QzU4LjYwNzkgMTU3LjExNyA1OS4xMTQyIDE1Ny4yNTUgNTkuNjIyOCAxNTcuMzg3TDU5LjY5MjcgMTU3LjQwNkw1OS44MDY4IDE1Ny40MzZMNTkuODIzIDE1Ny40NEM2MC4wMzAyIDE1Ny40OTQgNjAuMjM3NSAxNTcuNTQ2IDYwLjQ0NTIgMTU3LjU5OEw2MC42MjI2IDE1Ny42NDRMNjAuNzMxNiAxNTcuNjdMNjAuNzgzOSAxNTcuNjgzQzYwLjk2MjUgMTU3LjcyNyA2MS4xNDE5IDE1Ny43NyA2MS4zMjIxIDE1Ny44MTNMNjEuNDExOSAxNTcuODM1TDYxLjYzNzkgMTU3Ljg4OEw2MS43NjAxIDE1Ny45MTZDNjEuOTEwMyAxNTcuOTUxIDYyLjA2MDggMTU3Ljk4NiA2Mi4yMTE1IDE1OC4wMkw2Mi4zNTE0IDE1OC4wNTJMNjIuNTM5MSAxNTguMDk0TDYyLjc3OTEgMTU4LjE0N0w2My4xMTg1IDE1OC4yMkw2My4xNzY3IDE1OC4yMzNMNjMuNDk2MyAxNTguM0w2My44NDg5IDE1OC4zNzRMNjQuMDYxNyAxNTguNDE3SDY0LjA3NUw2NC4zMTM1IDE1OC40NjZDNjQuNTMzOSAxNTguNTEgNjQuNzU0OCAxNTguNTUzIDY0Ljk3NjEgMTU4LjU5NEw2NS4zODkyIDE1OC42NjhMNjUuNzM0NSAxNTguNzMxTDY1LjkyOTYgMTU4Ljc2Nkw2Ni4wMTQzIDE1OC43ODFMNjYuMTgyMiAxNTguODExTDY2LjM3MTQgMTU4Ljg0M0w2Ni45MjQzIDE1OC45MzVMNjcuMDY3OSAxNTguOTU5TDY3LjMyNDggMTU5TDY3LjU0NTcgMTU5LjAzNUw2Ny45MjY0IDE1OS4wOTRMNjggMTU5LjEwNUw2OC4wNzk1IDE1OS4xMThMNjguMTc2NyAxNTkuMTMyQzY4LjQyMjEgMTU5LjE2OCA2OC42NjQzIDE1OS4yMDIgNjguOTAzNCAxNTkuMjM2TDY5LjA4MjMgMTU5LjI2QzY5LjE2OTkgMTU5LjI3MiA2OS4yNTgzIDE1OS4yODUgNjkuMzQ1MSAxNTkuMjk2TDY5LjM5MjMgMTU5LjMwM0w2OS45MTUgMTU5LjM3TDcwLjAwNDggMTU5LjM4MUw3MC4wNTg2IDE1OS4zODhDNzAuMTY1MyAxNTkuNDAxIDcwLjI3MjggMTU5LjQxMyA3MC4zODAzIDE1OS40MjZDNzAuOTg4IDE1OS40OTkgNzEuNTk2NCAxNTkuNTY1IDcyLjIwNTUgMTU5LjYyNEM3Mi40MDE5IDE1OS42NDMgNzIuNTk4MiAxNTkuNjYxIDcyLjc5NDUgMTU5LjY3OUw3My4xNDk0IDE1OS43MUw3My4yMjMxIDE1OS43MTZMNzMuMjU1NCAxNTkuNzJDNzMuNDgzNyAxNTkuNzM5IDczLjcxMTkgMTU5Ljc1NiA3My45NDA5IDE1OS43NzNMNzQuMDE0NSAxNTkuNzc5Qzc1Ljk5MzYgMTU5LjkyNiA3Ny45OTQ4IDE2MCA3OS45NzgzIDE2MEM4NS44Njk3IDE2MC4wMDIgOTEuNzQzNSAxNTkuMzU3IDk3LjQ5NCAxNTguMDc2QzEwMy4wNjYgMTU2LjgzIDEwOC40ODcgMTU0Ljk4OCAxMTMuNjY1IDE1Mi41ODJDMTE1LjcyIDE1MS42MjYgMTE3LjczNCAxNTAuNTgyIDExOS43MDggMTQ5LjQ0OUMxMTkuNzIgMTQ5LjQ0MiAxMTkuNzM0IDE0OS40MzcgMTE5Ljc0NyAxNDkuNDNDMTIwLjgwNCAxNDguODIzIDEyMS44NDYgMTQ4LjE5MiAxMjIuODcyIDE0Ny41MzhMMTIyLjkwMyAxNDcuNTE4QzEyMy4xNjUgMTQ3LjM1MSAxMjMuNDI1IDE0Ny4xODMgMTIzLjY4NSAxNDcuMDEzTDEyMy44NTUgMTQ2LjkwMkMxMjQuMDY4IDE0Ni43NjIgMTI0LjI4MSAxNDYuNjIgMTI0LjQ5NCAxNDYuNDc4TDEyNC43MiAxNDYuMzI1QzEyNC45MTcgMTQ2LjE5MyAxMjUuMTEyIDE0Ni4wNTkgMTI1LjMwOSAxNDUuOTI0QzEyNS40ODMgMTQ1LjgwNCAxMjUuNjU3IDE0NS42ODMgMTI1LjgzIDE0NS41NjJDMTI1Ljk3MiAxNDUuNDYyIDEyNi4xMTUgMTQ1LjM2MyAxMjYuMjU2IDE0NS4yNjJDMTI2LjQ0IDE0NS4xMzIgMTI2LjYyNCAxNDUuMDAxIDEyNi44MDMgMTQ0Ljg2OUMxMjYuODYzIDE0NC44MjUgMTI2LjkyNCAxNDQuNzgyIDEyNi45ODQgMTQ0LjczOEMxMjcuMTg0IDE0NC41OTEgMTI3LjM4MyAxNDQuNDQ0IDEyNy41ODIgMTQ0LjI5N0wxMjcuNjY4IDE0NC4yMzNDMTI3LjgwMiAxNDQuMTMyIDEyNy45MzkgMTQ0LjAzMyAxMjguMDczIDE0My45MzFDMTMyLjUzMyAxNDAuNTcgMTM2LjYzMSAxMzYuNzU0IDE0MC4zMDEgMTMyLjU0NkMxNDAuNDggMTMyLjM0MSAxNDAuNjU4IDEzMi4xMzQgMTQwLjgzNSAxMzEuOTI3TDE0MC44ODUgMTMxLjg2OEMxNDEuMDU1IDEzMS42NjkgMTQxLjIyNCAxMzEuNDY5IDE0MS4zOTEgMTMxLjI2OUwxNDEuNDU4IDEzMS4xOUMxNDEuNjI0IDEzMC45ODkgMTQxLjc5IDEzMC43ODggMTQxLjk1NSAxMzAuNTg3TDE0Mi4wMTQgMTMwLjUxNEMxNDIuMTgzIDEzMC4zMDcgMTQyLjM1IDEzMC4xMDEgMTQyLjUxNCAxMjkuODkzTDE0Mi41NDcgMTI5Ljg1M0MxNDMuMTY0IDEyOS4wODEgMTQzLjc3NiAxMjguMjgzIDE0NC4zNjYgMTI3LjQ4NEwxNDQuMzk0IDEyNy40NDZDMTQ0Ljk4MyAxMjYuNjQ3IDE0NS41NjUgMTI1LjgyNiAxNDYuMTIyIDEyNS4wMTFMMTQ2LjEzIDEyNC45OTlMMTQ2LjE0NiAxMjQuOTc3QzE0Ni4yOTkgMTI0Ljc1MiAxNDYuNDUxIDEyNC41MjcgMTQ2LjYwMSAxMjQuMzAxTDE0Ni42NDMgMTI0LjIzN0MxNDYuNzkxIDEyNC4wMTUgMTQ2LjkzOCAxMjMuNzkyIDE0Ny4wODUgMTIzLjU2OEwxNDcuMTI5IDEyMy41MDFDMTQ3LjI3NiAxMjMuMjc0IDE0Ny40MjMgMTIzLjA0NiAxNDcuNTcgMTIyLjgxN0wxNDcuNTk1IDEyMi43NzlDMTQ4LjgyOCAxMjAuODMzIDE0OS45OTEgMTE4LjgxIDE1MS4wNTUgMTE2Ljc2MUwxNTEuMDY0IDExNi43NDVMMTUxLjA2OCAxMTYuNzM2QzE1MS4xOTYgMTE2LjQ5IDE1MS4zMjMgMTE2LjI0MyAxNTEuNDQ4IDExNS45OTNMMTUxLjQ3MiAxMTUuOTQ3QzE1MS41OTggMTE1LjY5NyAxNTEuNzIyIDExNS40NDYgMTUxLjg0NyAxMTUuMTk0TDE1MS44NiAxMTUuMTY2QzE1Mi40NTUgMTEzLjk1MyAxNTMuMDIgMTEyLjcxNyAxNTMuNTUzIDExMS40N0MxNTMuNTk0IDExMS4zNzYgMTUzLjYzNCAxMTEuMjgzIDE1My42NzQgMTExLjE5QzE1My43MjMgMTExLjA3NCAxNTMuNzcyIDExMC45NTcgMTUzLjgyMSAxMTAuODM5QzE1My44ODUgMTEwLjY5MiAxNTMuOTQ4IDExMC41MzggMTU0LjAxIDExMC4zODdDMTU0LjA2MiAxMTAuMjYxIDE1NC4xMTMgMTEwLjEzNCAxNTQuMTY0IDExMC4wMDdDMTU0LjIyIDEwOS44NjcgMTU0LjI3OCAxMDkuNzI4IDE1NC4zMzQgMTA5LjU4OEMxNTQuMzkgMTA5LjQ0OCAxNTQuNDUgMTA5LjI5NCAxNTQuNTA4IDEwOS4xNDZDMTU0LjU1MSAxMDkuMDM4IDE1NC41OTQgMTA4LjkzMSAxNTQuNjM2IDEwOC44MjJWMTA4LjgxNkMxNTQuNjQ1IDEwOC43OTEgMTU0LjY1NSAxMDguNzY1IDE1NC42NjYgMTA4Ljc0MkMxNTQuNjY2IDEwOC43MzMgMTU0LjY3MiAxMDguNzI0IDE1NC42NzUgMTA4LjcxNEMxNTQuODUgMTA4LjE5IDE1NC42OTQgMTA3LjgxNCAxNTQuNTM0IDEwNy41OTFDMTU0LjA2NiAxMDYuOTQ0IDE1Mi45NjQgMTA2LjMxMSAxNDUuMjM5IDEwNi4zMTFDMTQ1LjEyOSAxMDYuMzExIDEzMy42NTMgMTA2LjM2OSAxMTIuMzExIDEwOC40MTVDMTAzLjc0IDEwOS4yMzggOTMuNzExOCAxMTAuNDA5IDgzLjYzNTMgMTExLjY5OEM4Ni4zNTk1IDEwOS41NjMgODguNjA4OCAxMDcuNTg1IDkwLjIzODEgMTA1LjYxNEM5MS4zNjk4IDEwNC4yNDQgOTIuMTc2IDEwMi45MTQgOTIuNjg0OCAxMDEuNTc0QzEwMy4xMDMgOTkuMTE4NCAxMTMuOTggOTYuNjQ2MyAxMjQuMjQgOTQuNDQyM0MxNDAuNTI2IDkwLjk0MzcgMTUyLjU0NCA4OC4xMDQyIDE1Ni4zODggODYuODQ2NEMxNTcuMTExIDg2LjYxMDEgMTU4LjUzOSA4Ni4wMTY1IDE1OS4zMDEgODUuMjkxMkwxNTkuMzA2IDg1LjI4NkMxNTkuNTkyIDg1LjAwOTMgMTU5Ljc4NCA4NC42NTEzIDE1OS44NTkgODQuMjYxQzE1OS44NzMgODQuMjEzMSAxNTkuODgzIDg0LjE2MzcgMTU5Ljg4NiA4NC4xMTM3Vjg0LjEwOTNWODQuMDk5QzE1OS45MiA4My40MTc4IDE1OS45NDYgODIuNzI4NiAxNTkuOTYzIDgyLjA0ODFWODEuOTI1OUMxNTkuOTcgODEuNjQ2OCAxNTkuOTc0IDgxLjM2OTkgMTU5Ljk3OSA4MS4wOTUzTDE1OS45OTQgODAuOTgzM1pNODIuNDA0MyA4LjQ4NjYzQzYzLjA3NTggOC43NTEgNDYuMDc5MiAxMS40Mzk2IDM5LjA2NyAxMi43MDgzQzUxLjM3ODggNS4xOTg2NiA2NS40NTc3IDEuMjQ3MiA3OS45OTA4IDEuMjQ3MkM5Mi43MTY4IDEuMjI4NjMgMTA1LjI1NiA0LjMwNzY4IDExNi41MjYgMTAuMjE4NkwxMTYuNTM3IDEwLjIyNDVDMTE3LjQyIDEwLjcwNjggMTE4LjYyMyAxMS40MzgxIDExOS42NzggMTIuMzI2OUMxMTkuNTQxIDEyLjI3NDYgMTE5LjM5OSAxMi4yMjIzIDExOS4yNTQgMTIuMTcxNUMxMTEuNjUyIDkuNDkzMjggOTkuMjU0NCA4LjI1MjQ2IDgyLjQwNDMgOC40ODY2M1pNMTQuNDgzOCAzNi4yNzU3TDE0Ljc3ODMgMzUuODM5OEwxNC44NjE1IDM1LjcxNzVDMTUuMjA5IDM1LjI1OTUgMTYuMTk3OCAzNC40ODE5IDE4LjkyOTQgMzMuMzY2MkMyMS4wMDEyIDMyLjUyMDEgMjMuNzQ4MiAzMS42MTM2IDI3LjA5NDYgMzAuNjcxMUMzMy4wNDU4IDI4Ljk5NSA0MC42MDUgMjcuMjkxOCA0Ny44MzI5IDI1Ljk5NzlDNTguMzc3NyAyNC4xMTA2IDY1Ljk5MjkgMjIuOTkzNSA3MS4zNjAzIDIzLjI2M0M3NC4wODQ1IDIzLjM5OTIgNzYuMTUxMiAyMy44OTExIDc3LjY3NTIgMjQuNzY2Qzc5LjE5OTMgMjUuNjQwOCA4MC4yMjQyIDI2LjkzNDYgODAuODAyOSAyOC43MTgyQzgxLjQzOSAzMC42NzcgODEuMjQ0NyAzMi42NTM0IDgwLjIwNDMgMzQuNzU2NUM3OS4yMzU0IDM2LjcyMDUgNzcuNTA4OSAzOC43ODA5IDc1LjA3MzMgNDAuODgxMUM3MC44NTIzIDQ0LjUyMzMgNjQuNTk3IDQ4LjI3MzcgNTUuOTQ4MSA1Mi4zNDg5QzQ2LjE3NzggNTYuOTUyOCAzMS42MzQ0IDYzLjcwMjUgMTcuODM0NiA2OS43MTIyQzcuNzg2NzQgNzQuMDg4NSAzLjE5ODM0IDc2LjQ2NDEgMS4yNTc1NCA3OC4wMjM4QzEuNjEyODggNjMuMTMzOSA2LjIwMDU1IDQ4LjY1MzEgMTQuNDgzOCAzNi4yNzU3Wk01NC40NTQyIDE1Mi41MzlDNTUuNTY3NCAxNTEuOTU1IDU5LjcwODkgMTQ5Ljk0NyA2Ni4yODc0IDE0OC42MjRDNzEuMTU2NCAxNDcuNjQ0IDc1Ljg1MyAxNDcuMzYgNzkuNTEwOCAxNDcuODIzQzgyLjg2NjcgMTQ4LjI0OCA4NS4wNDY3IDE0OS4yNjMgODUuNDkwNyAxNTAuNjFDODUuOTI0NCAxNTEuOTIxIDg1LjI4MTYgMTUzLjA4NSA4My40Njg5IDE1NC4yNzJDODEuNzY5NiAxNTUuMzg3IDc5LjM2MiAxNTYuMjcxIDc3LjQyNzEgMTU2Ljk4MkM3NS42MTc0IDE1Ny42NDQgNzQuNDcxIDE1OC4wOCA3My44NTYyIDE1OC41NTNDNjguNjQyOCAxNTguMTUyIDYzLjQ4MjQgMTU3LjIzMiA1OC40NTE0IDE1NS44MDdMNTguMzM4NyAxNTUuNzc1QzU4LjE0OCAxNTUuNzIgNTcuOTU3MyAxNTUuNjY0IDU3Ljc2NzQgMTU1LjYwOUM1Ny4xOTgyIDE1NS40NDEgNTYuNjQwMSAxNTUuMjcgNTYuMTA3MSAxNTUuMTAxTDU2LjA2ODggMTU1LjA4OEM1NS41MzI4IDE1NC45MTggNTQuOTg0MyAxNTQuNzM2IDU0LjQzODcgMTU0LjU1TDU0LjEwMDggMTU0LjQzM0w1NC4wNDg1IDE1NC40MTRMNTMuNzA5OCAxNTQuMjk3QzUyLjk3MzUgMTU0LjAyMyA1Mi43NzExIDE1My44MjYgNTIuNzIwMyAxNTMuNzYxQzUyLjc2NzQgMTUzLjY1NyA1My4wMzMyIDE1My4yODUgNTQuNDU0MiAxNTIuNTM5Wk0xMDQuODkyIDEzNy4wNkMxMDQuOTg3IDEzMS41NzMgMTEyLjEwNyAxMjUuOTEzIDEyNS40ODIgMTIwLjY4OEMxMzMuNTgxIDExNy41MjEgMTQxLjIzOSAxMTQuOTggMTQ1LjgxNCAxMTMuNDZDMTQ3Ljk0IDExMi43NTMgMTQ5LjM0OCAxMTIuMjg2IDE0OS45NzUgMTEyLjAzM0MxNTAuOTI0IDExMS42NTIgMTUxLjc0NiAxMTEuMzIzIDE1Mi40MzQgMTEwLjk2OEMxNDUuOCAxMjYuNDczIDEzNC4yNCAxMzkuNTc0IDExOS42MTQgMTQ4LjEwN0MxMTkuMTU4IDE0Ny42NDMgMTE4LjI1MiAxNDcuMDI3IDExNi4zMDggMTQ2LjEyM0MxMTYuMDY4IDE0Ni4wMTIgMTE1Ljc0MiAxNDUuODcxIDExNS4zNjYgMTQ1LjcwOEMxMTIuNDgxIDE0NC40NjIgMTA0LjgyMSAxNDEuMTQ4IDEwNC44OTIgMTM3LjA2Wk0xMTEuOTYgNDMuMjY5MkMxMTguOTcyIDQxLjEyNDEgMTI2LjkxMSAzOS44MTMzIDEzMy4wNDQgMzguOTEyQzEzNi4xMTYgMzguNDU5OCAxMzguNTk1IDM4LjMxNDggMTQwLjUxNCAzOC4zMTQ4QzE0MS43MTIgMzguMzE0OCAxNDIuNjkyIDM4LjM3MTUgMTQzLjQ1OSAzOC40NDU5QzE0Ni4zMzEgMzguNzIyNyAxNDcuNDQyIDM5LjM2MTIgMTQ3LjYyOCAzOS42NjAyQzE0Ny43MTggMzkuODA3NCAxNDcuODA4IDM5Ljk1MzIgMTQ3Ljg5NyA0MC4wOTc2QzE1NS4wMjIgNTIuMTkyNSAxNTguNzY5IDY1Ljk3OTEgMTU4Ljc0NiA4MC4wMTcyQzE1OC43NDYgODAuNjMyOCAxNTguNzM4IDgxLjI3NTcgMTU4LjcyMyA4MS45MjgxVjgyLjA0ODlDMTU4LjcyMyA4Mi4yMDc5IDE1OC43MTQgODIuMzY3NyAxNTguNzA5IDgyLjUyNzVDMTU4LjU3NiA4Mi40NzcxIDE1OC40NCA4Mi40MzQ1IDE1OC4zMDIgODIuNDAwMUMxNTQuMzM0IDgxLjQwODIgMTQ3LjI2NiA4MC4yNjk4IDE0MC40MzIgNzkuMTY4OUMxMzUuOTg5IDc4LjQ1MjQgMTMxLjc5MSA3Ny43NzY0IDEyOC43MjYgNzcuMTg0M0MxMjcuOTg5IDc3LjA0MjIgMTI3LjE3IDc2Ljg4OTcgMTI2LjMwMyA3Ni43MjkyQzEyMC43ODEgNzUuNzA2NCAxMTMuMjE0IDc0LjMwNDMgMTA2LjY0IDcxLjc3OTJDMTAzLjA3MSA3MC40MDg4IDEwMC4yMTUgNjguODUwNiA5OC4xNDkzIDY3LjE0NzNDOTUuNzkzMyA2NS4yMDE4IDk0LjM5NDQgNjMuMDA4MSA5NC4wMDM0IDYwLjYyNzNDOTMuNTEwMSA1Ny42NDM1IDk0LjE1MDcgNTQuOTA3OCA5NS45MTMzIDUyLjQ5NjFDOTguNjAwNiA0OC44MTA1IDEwNC4wMDEgNDUuNzA2NiAxMTEuOTYyIDQzLjI3MDdMMTExLjk2IDQzLjI2OTJaTTg5LjI4MzIgMTA0Ljg1MkM4Ni43Mjg0IDEwNy45NDUgODIuNTE0IDExMS4xMTEgNzcuMjcwMyAxMTQuOTRDNjUuOTAyNCAxMjMuMjM3IDYxLjc4IDEyNS40MTUgNTEuNTMwNSAxMzAuNDlDNDAuOTUxOCAxMzUuNzMgMzUuMTExOCAxMzguMDI3IDMwLjQ3MzMgMTM5Ljc2OEMyOS45NDMyIDEzOS45NjggMjkuNTc4IDE0MC4xNTUgMjkuMzI4NCAxNDAuMzI5TDI5LjA5MTMgMTQwLjEyOUwyOS4wNjg1IDE0MC4xMDlMMjguOTU1OCAxNDAuMDEzQzI4LjQ0MDUgMTM5LjU3MSAyNy45MjUxIDEzOS4xMjQgMjcuNDMxOCAxMzguNjgyTDI3LjQxNDggMTM4LjY2NkwyNy40MDgyIDEzOC42NkMyNi45MTg2IDEzOC4yMTggMjYuNDIwMSAxMzcuNzYyIDI1LjkyNjggMTM3LjI5NUwyNS44MzQ4IDEzNy4yMDdDMjUuNzA0NyAxMzcuMDg0IDI1LjU3NDkgMTM2Ljk1OSAyNS40NDUzIDEzNi44MzVDMjEuNzk0NyAxMzMuMzI3IDE4LjQ4NzggMTI5LjQ3OCAxNS41Njk4IDEyNS4zNEwxNS41NTU4IDEyNS4zMjFDMTUuMTkyMSAxMjQuODA1IDE0LjgyNzYgMTI0LjI3MyAxNC40NzI4IDEyMy43NDJMMTQuNDAyOCAxMjMuNjM2QzE0LjA3MDggMTIzLjEzOSAxMy43NDAyIDEyMi42MjggMTMuNDE3IDEyMi4xMTlMMTMuMzE4MyAxMjEuOTY0QzEzLjIxNzIgMTIxLjgwNCAxMy4xMTY2IDEyMS42NDMgMTMuMDE2NCAxMjEuNDgyTDEyLjk2NjQgMTIxLjQwMUMxMi43ODE2IDEyMS4xMDIgMTIuNTkzMSAxMjAuNzkyIDEyLjQwNDYgMTIwLjQ3OEwxMi4yODQ2IDEyMC4yNzhDMTIuMTk1NyAxMjAuMTMgMTIuMTA3MSAxMTkuOTggMTIuMDE4OCAxMTkuODI4TDExLjg4NjMgMTE5LjZDMTEuNzM5IDExOS4zNDcgMTEuNTkxOCAxMTkuMDg1IDExLjQzOTQgMTE4LjgyMkwxMS4zOTQ0IDExOC43NDRMMTEuMjk4NyAxMTguNTc0QzExLjIyMDIgMTE4LjQzNCAxMS4xNDE3IDExOC4yOTMgMTEuMDYzMSAxMTguMTUzTDEwLjkwMTkgMTE3Ljg1OEMxMC44MjI0IDExNy43MTEgMTAuNzQyMSAxMTcuNTYzIDEwLjY2NDEgMTE3LjQyMkMxMC41NjEgMTE3LjIzMiAxMC40NTg2IDExNy4wNCAxMC4zNTcgMTE2Ljg0OEMxMC4yOTQ1IDExNi43MzEgMTAuMjMzNCAxMTYuNjEzIDEwLjE3MTUgMTE2LjQ5NkwxMC4xNTMxIDExNi40Nkw5Ljk3MzQ1IDExNi4xMTRDOS45MDc5MiAxMTUuOTg4IDkuODQyMzkgMTE1Ljg2MiA5Ljc3NzYgMTE1LjczNEM5LjY5NjEyIDExNS41NzMgOS42MTQ2NCAxMTUuNDExIDkuNTMzMTYgMTE1LjI0OEM5LjQ1MjE3IDExNS4wODggOS4zNzI2NiAxMTQuOTI2IDkuMjkzMTQgMTE0Ljc2NUM5LjIyNjE0IDExNC42MjkgOS4xNTg0IDExNC40OTIgOS4wOTIxNCAxMTQuMzU1QzkuMDM0NzEgMTE0LjIzNiA4Ljk3ODAyIDExNC4xMTkgOC45MjEzMyAxMTRDOC44NDc3IDExMy44NDYgOC43NzQwNyAxMTMuNjkyIDguNzAwNDUgMTEzLjUzOEM4LjYzMzQ1IDExMy4zOTUgOC41NjcxOCAxMTMuMjU0IDguNTAwOTIgMTEzLjExMUM4LjQxODQ2IDExMi45MzMgOC4zMzY0OSAxMTIuNzU1IDguMjU1MDEgMTEyLjU3N0M4LjIwNTkyIDExMi40NjcgOC4xNTY4NCAxMTIuMzU3IDguMTA3NzUgMTEyLjI0OUM4LjAzNDEzIDExMi4wOSA3Ljk2NTY1IDExMS45MzIgNy44OTU3MSAxMTEuNzcyTDcuODU1OTUgMTExLjY4M0w3Ljc2NzYgMTExLjQ4MkM3LjY2NTUgMTExLjI0OCA3LjU2NDM5IDExMS4wMTMgNy40NjQyNiAxMTAuNzc3TDcuMzcyOTYgMTEwLjU2TDcuMzQyMDQgMTEwLjQ4NkM3LjI3MTM2IDExMC4zMTcgNy4yMDA5MiAxMTAuMTQ3IDcuMTMwNzMgMTA5Ljk3N0w3LjExMDg1IDEwOS45M0M3LjA3NzcyIDEwOS44NSA3LjA0NDU5IDEwOS43NjkgNy4wMTIxOSAxMDkuNjg4QzYuOTE0MDIgMTA5LjQ0MyA2LjgxNTg1IDEwOS4xOTkgNi43MTc2OCAxMDguOTU3QzYuNzAwMDEgMTA4LjkxMiA2LjY4MzA4IDEwOC44NjcgNi42NjU0MSAxMDguODIzTDYuNjI3ODYgMTA4LjcyN0M2LjU1Mzc0IDEwOC41MzggNi40ODAxMiAxMDguMzQ4IDYuNDA2OTggMTA4LjE1OEM2LjM3MDkgMTA4LjA2NCA2LjMzMzM1IDEwNy45NyA2LjI5OTQ5IDEwNy44NzZDNi4yMTQ1NyAxMDcuNjUyIDYuMTMwODggMTA3LjQyOCA2LjA0ODQyIDEwNy4yMDJMNS45ODIxNiAxMDcuMDIzQzUuODk1NzcgMTA2Ljc4NyA1LjgxMTEgMTA2LjU1MSA1LjcyODE0IDEwNi4zMTRDNS42OTY0OCAxMDYuMjI2IDUuNjY1NTYgMTA2LjEzNyA1LjYzNDY0IDEwNi4wNDhDNS41NjI0OCAxMDUuODQzIDUuNDkxNTYgMTA1LjYzOCA1LjQyMTg2IDEwNS40MzFMNS4zNTMzOCAxMDUuMjMzQzUuMjY1NTIgMTA0Ljk3MiA1LjE3ODg5IDEwNC43MTEgNS4wOTM0OCAxMDQuNDQ5TDUuMDE5ODYgMTA0LjIxQzQuOTUzNTkgMTA0LjAwNiA0Ljg4ODggMTAzLjgwMSA0LjgyNDAxIDEwMy41OTZMNC43NTAzOCAxMDMuMzYyQzQuNjY3OTIgMTAzLjA5NiA0LjU4NjkzIDEwMi44MyA0LjUwNzQyIDEwMi41NjRMNC40NTIyIDEwMi4zNzVDNC4zODc5IDEwMi4xNTggNC4zMjQ1OCAxMDEuOTQxIDQuMjYyMjQgMTAxLjcyM0w0LjE4ODYxIDEwMS40NzNDNC4xMTIwNCAxMDEuMjAzIDQuMDM2OTQgMTAwLjkzMyAzLjk2MzMyIDEwMC42NjNDMy45MDgxIDEwMC40NTYgMy44NTM2MSAxMDAuMjQ5IDMuNzk5MTMgMTAwLjA0QzMuNjkyMzcgOTkuNTgwMSAzLjY5MTYzIDk5LjA5MDQgNC44NjUyNCA5OC42MDY2TDUuMDQ0MTUgOTguNTMyOUMxMS42Mjg2IDk1Ljc5NzIgMjAuMDc5NCA5My4yMDUyIDI4Ljg0MTcgOTEuMjM0NkM0Mi43NzQxIDg4LjA5OSA1NS41ODczIDg2LjU0MzggNzAuMzg5MiA4Ni4xNzU2Qzc2LjA2NSA4Ni4wMzY0IDgxLjEyMTcgODYuODk1IDg1LjAxMzYgODguNjU4N0M4OC42MjY1IDkwLjI5NjQgOTEuMDExMiA5Mi42NjEgOTEuNzI4MyA5NS4zMTcxQzkyLjY1MzggOTguNzQ2NSA5MS44OTk5IDEwMS42ODcgODkuMjgzMiAxMDQuODUzVjEwNC44NTJaXCIsXG4gICAgICAgIGZpbGw6IFwiIzIzMUYyMFwiXG4gICAgICB9XG4gICAgKVxuICB9XG4pLCBJUiA9ICgpID0+IC8qIEBfX1BVUkVfXyAqLyBlMShcbiAgXCJzdmdcIixcbiAge1xuICAgIHdpZHRoOiBcIjE2MFwiLFxuICAgIGhlaWdodDogXCI0OFwiLFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2MCA0OFwiLFxuICAgIGZpbGw6IFwibm9uZVwiLFxuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgY2hpbGRyZW46IFtcbiAgICAgIC8qIEBfX1BVUkVfXyAqLyBjKFxuICAgICAgICBcInBhdGhcIixcbiAgICAgICAge1xuICAgICAgICAgIGQ6IFwiTTU3LjcyMzQgMTIuMjkyNEM1Ny4zNDE4IDEyLjMwMDcgNTYuOTcyNCAxMi4xNTU5IDU2LjY5NiAxMS44ODk2QzU2LjQyMzggMTEuNTkzNSA1Ni4yNzI1IDExLjIwNDEgNTYuMjcyNSAxMC43OTk3QzU2LjI3MjUgMTAuMzk1MyA1Ni40MjM4IDEwLjAwNTkgNTYuNjk2IDkuNzA5ODJDNTYuOTc2MiA5LjQ0OTIzIDU3LjM0MjggOS4zMDQ2MyA1Ny43MjM0IDkuMzA0NjNDNTguMTAzOSA5LjMwNDYzIDU4LjQ3MDYgOS40NDkyMyA1OC43NTA4IDkuNzA5ODJDNTkuMDIzIDEwLjAwNTkgNTkuMTc0MyAxMC4zOTUzIDU5LjE3NDMgMTAuNzk5N0M1OS4xNzQzIDExLjIwNDEgNTkuMDIzIDExLjU5MzUgNTguNzUwOCAxMS44ODk2QzU4LjQ3NDMgMTIuMTU1OSA1OC4xMDUgMTIuMzAwNyA1Ny43MjM0IDEyLjI5MjRaTTU4Ljg1MjQgMjcuMzMwOEg1Ni41OTQ0VjE0LjU5NUg1OC44NTI0VjI3LjMzMDhaXCIsXG4gICAgICAgICAgZmlsbDogXCIjMjMxRjIwXCJcbiAgICAgICAgfVxuICAgICAgKSxcbiAgICAgIC8qIEBfX1BVUkVfXyAqLyBjKFxuICAgICAgICBcInBhdGhcIixcbiAgICAgICAge1xuICAgICAgICAgIGQ6IFwiTTYyLjczMDQgMTQuOTYzNUM2My4yNDc5IDE0LjgzMjEgNjMuOTMzOCAxNC42OTMxIDY0Ljc4OCAxNC41NDY0QzY1Ljc2NDMgMTQuMzg5NSA2Ni43NTE5IDE0LjMxNTkgNjcuNzQwNCAxNC4zMjY1QzY4LjU5MTEgMTQuMjk5NSA2OS40Mzg1IDE0LjQ0NTIgNzAuMjMyNyAxNC43NTVDNzAuODU0IDE1LjAxMTMgNzEuNDAwMSAxNS40MjQ0IDcxLjgxODkgMTUuOTU0OUM3Mi4yMjg1IDE2LjUwMDggNzIuNTEzIDE3LjEzMjIgNzIuNjUxNiAxNy44MDMyQzcyLjgxOTUgMTguNTgzOSA3Mi45MDA5IDE5LjM4MTIgNzIuODk0MyAyMC4xODAxVjI3LjMyMjJINzAuNjM2M1YyMC42Njg2QzcwLjY0NDQgMTkuOTk4NSA3MC41OTE1IDE5LjMyOTEgNzAuNDc4MiAxOC42Njg5QzcwLjQwMTkgMTguMTg3MSA3MC4yMjQ4IDE3LjcyNzQgNjkuOTU4OSAxNy4zMjA0QzY5LjcxNzIgMTYuOTc5NCA2OS4zNzk5IDE2LjcxOTcgNjguOTkwOCAxNi41NzQ4QzY4LjUwNzkgMTYuNDA3NiA2Ny45OTkzIDE2LjMyOTIgNjcuNDg5MiAxNi4zNDM0QzY3LjI0NjQgMTYuMzQzNCA2Ni45OTgxIDE2LjM0MzQgNjYuNzQxMiAxNi4zNjYyQzY2LjQ4NDQgMTYuMzg5MSA2Ni4yMzYgMTYuNDAzNCA2Ni4wMDE3IDE2LjQyOTFDNjUuNzY3NCAxNi40NTQ4IDY1LjU1ODYgMTYuNDgwNSA2NS4zNzIzIDE2LjUxNDhMNjQuOTc0MyAxNi41ODYyVjI3LjMzOTRINjIuNzE2M0w2Mi43MzA0IDE0Ljk2MzVaXCIsXG4gICAgICAgICAgZmlsbDogXCIjMjMxRjIwXCJcbiAgICAgICAgfVxuICAgICAgKSxcbiAgICAgIC8qIEBfX1BVUkVfXyAqLyBjKFxuICAgICAgICBcInBhdGhcIixcbiAgICAgICAge1xuICAgICAgICAgIGQ6IFwiTTc4LjUwODMgMTQuNTk1SDgzLjI3NTVWMTYuNTA2Mkg3OC41MDgzVjIyLjM4MjhDNzguNDk4OCAyMi45MTMzIDc4LjU0OCAyMy40NDMyIDc4LjY1NTEgMjMuOTYyNkM3OC43MjQ0IDI0LjMxODQgNzguODczMSAyNC42NTM2IDc5LjA4OTcgMjQuOTQyNUM3OS4yODAzIDI1LjE3NTUgNzkuNTMxNiAyNS4zNDk2IDc5LjgxNTEgMjUuNDQ1M0M4MC4xNDQxIDI1LjU0ODEgODAuNDg3IDI1LjU5NzMgODAuODMxMiAyNS41OTFDODEuMzg1MSAyNS42MDk3IDgxLjkzOCAyNS41MzE0IDgyLjQ2NTUgMjUuMzU5NkM4Mi44Nzc2IDI1LjIwMjUgODMuMTYyNiAyNS4wOTM5IDgzLjMxMjIgMjUuMDI4Mkw4My43NDk3IDI2LjkxMzdDODMuMzY1OCAyNy4wODY1IDgyLjk2OTUgMjcuMjI5OCA4Mi41NjQzIDI3LjM0MjJDODEuOTM0NiAyNy41MjI1IDgxLjI4MjMgMjcuNjA5MSA4MC42MjggMjcuNTk5M0M3OS45MDgzIDI3LjYyMTIgNzkuMTkwNyAyNy41MDg5IDc4LjUxMTEgMjcuMjY3OUM3Ny45ODI2IDI3LjA2NzMgNzcuNTE4MSAyNi43MjQ1IDc3LjE2NzYgMjYuMjc2NkM3Ni44MTExIDI1Ljc5NTQgNzYuNTY2OSAyNS4yMzg3IDc2LjQ1MzUgMjQuNjQ4MkM3Ni4zMDY5IDIzLjkxMTEgNzYuMjM3OCAyMy4xNjAzIDc2LjI0NzUgMjIuNDA4NVYxMS4wNDRMNzguNTA1NSAxMC42NTI2TDc4LjUwODMgMTQuNTk1WlwiLFxuICAgICAgICAgIGZpbGw6IFwiIzIzMUYyMFwiXG4gICAgICAgIH1cbiAgICAgICksXG4gICAgICAvKiBAX19QVVJFX18gKi8gYyhcbiAgICAgICAgXCJwYXRoXCIsXG4gICAgICAgIHtcbiAgICAgICAgICBkOiBcIk04NS4xODY0IDIwLjk4NTdDODUuMTY1MyAxOS45ODA1IDg1LjMyNzkgMTguOTggODUuNjY2MiAxOC4wMzQ2Qzg1Ljk1MDggMTcuMjU2OSA4Ni4zODY1IDE2LjU0NDkgODYuOTQ3NyAxNS45NDA2Qzg3LjQ2NTcgMTUuMzk1OSA4OC4wOTMzIDE0Ljk3MDIgODguNzg3OSAxNC42OTIxQzg5LjQ2NDcgMTQuNDE3NiA5MC4xODcgMTQuMjc2IDkwLjkxNjEgMTQuMjc1QzkyLjYwOTYgMTQuMjc1IDkzLjkwOCAxNC44MTAyIDk0LjgxMTIgMTUuODgwNkM5NS43MTQ0IDE2Ljk1MDkgOTYuMTY2IDE4LjU3OTMgOTYuMTY2IDIwLjc2NThWMjEuMTQ1N0M5Ni4xNjc2IDIxLjI4ODkgOTYuMTYwMSAyMS40MzIgOTYuMTQzNCAyMS41NzQySDg3LjUzNDdDODcuNjMwNyAyMi44OTYgODguMDA3IDIzLjkwMDcgODguNjYzNyAyNC41ODgyQzg5LjMyMDQgMjUuMjc1NyA5MC4zNTU0IDI1LjYxODYgOTEuNzY4NSAyNS42MTY3QzkyLjQzOTYgMjUuNjI4OSA5My4xMDk2IDI1LjU1ODggOTMuNzY0IDI1LjQwODFDOTQuMTgwNyAyNS4zMSA5NC41ODc4IDI1LjE3NDIgOTQuOTgwNSAyNS4wMDI0TDk1LjI5NjcgMjYuOTEzN0M5NC44MzU3IDI3LjEyMzIgOTQuMzUyOCAyNy4yNzk0IDkzLjg1NzIgMjcuMzc5M0M5My4wOSAyNy41NTE1IDkyLjMwNTkgMjcuNjMzOSA5MS41MjAxIDI3LjYyNUM5MC41NDkzIDI3LjY0NzMgODkuNTgzNiAyNy40NzY1IDg4LjY3NzkgMjcuMTIyMkM4Ny45MjM4IDI2LjgxOTYgODcuMjQ4MSAyNi4zNDY3IDg2LjcwMjEgMjUuNzM5NUM4Ni4xNzY1IDI1LjEzMiA4NS43ODQ5IDI0LjQxODIgODUuNTUzMyAyMy42NDU0Qzg1LjI5OTEgMjIuNzgyNyA4NS4xNzUzIDIxLjg4NiA4NS4xODY0IDIwLjk4NTdaTTkzLjgyNjEgMTkuNzM3M0M5My44Nzg2IDE4LjgyNzcgOTMuNjA4MyAxNy45MjkgOTMuMDY0IDE3LjIwMzNDOTIuODA1OCAxNi44NzcyIDkyLjQ3NTEgMTYuNjE3NCA5Mi4wOTg5IDE2LjQ0NTJDOTEuNzIyNyAxNi4yNzI5IDkxLjMxMTcgMTYuMTkzIDkwLjg5OTIgMTYuMjEyQzkwLjQyNTMgMTYuMjAxMiA4OS45NTU3IDE2LjMwNjEgODkuNTMwMyAxNi41MTc2Qzg5LjE0NjcgMTYuNzEyNSA4OC44MDUyIDE2Ljk4MjQgODguNTI1NCAxNy4zMTE4Qzg4LjI0NzIgMTcuNjQ2NCA4OC4wMzAyIDE4LjAyODUgODcuODg0NyAxOC40NDAzQzg3LjczMzQgMTguODU4OSA4Ny42MzIgMTkuMjk0MyA4Ny41ODI3IDE5LjczNzNIOTMuODI2MVpcIixcbiAgICAgICAgICBmaWxsOiBcIiMyMzFGMjBcIlxuICAgICAgICB9XG4gICAgICApLFxuICAgICAgLyogQF9fUFVSRV9fICovIGMoXG4gICAgICAgIFwicGF0aFwiLFxuICAgICAgICB7XG4gICAgICAgICAgZDogXCJNMTAzLjY5NCAxNC4zMjY0QzEwMy45MTUgMTQuMzI3NSAxMDQuMTM3IDE0LjMzOTkgMTA0LjM1NyAxNC4zNjM2QzEwNC42MDggMTQuMzg2NCAxMDQuODU0IDE0LjQyMDcgMTA1LjA5NiAxNC40NjA3QzEwNS4zMzkgMTQuNTAwNyAxMDUuNTU5IDE0LjU0MDcgMTA1Ljc2MyAxNC41ODM1QzEwNS45MTMgMTQuNjExNSAxMDYuMDYyIDE0LjY0NzggMTA2LjIwOSAxNC42OTIxTDEwNS44MjIgMTYuNjc3NkMxMDUuNTMyIDE2LjU4MTkgMTA1LjIzNyAxNi41MDM3IDEwNC45MzggMTYuNDQzNEMxMDQuNDE2IDE2LjM0NDQgMTAzLjg4NiAxNi4yOTk0IDEwMy4zNTUgMTYuMzA5MUMxMDIuOTM2IDE2LjMwOTUgMTAyLjUxNyAxNi4zNTQ1IDEwMi4xMDcgMTYuNDQzNEMxMDEuNjk1IDE2LjUzNDggMTAxLjQyNyAxNi41OTQ4IDEwMS4yOTcgMTYuNjI5VjI3LjMzMDhIOTkuMDM5M1YxNS4xMzQ5Qzk5LjY4NDcgMTQuOTA1OSAxMDAuMzQ1IDE0LjcyMTYgMTAxLjAxNSAxNC41ODM1QzEwMS44OTYgMTQuNDAyNCAxMDIuNzk0IDE0LjMxNjIgMTAzLjY5NCAxNC4zMjY0WlwiLFxuICAgICAgICAgIGZpbGw6IFwiIzIzMUYyMFwiXG4gICAgICAgIH1cbiAgICAgICksXG4gICAgICAvKiBAX19QVVJFX18gKi8gYyhcbiAgICAgICAgXCJwYXRoXCIsXG4gICAgICAgIHtcbiAgICAgICAgICBkOiBcIk0xMTAuNTA0IDE0LjU5NUgxMTUuMjcyVjE2LjUwNjJIMTEwLjUwNFYyMi4zODI4QzExMC40OTUgMjIuOTEzMyAxMTAuNTQ0IDIzLjQ0MzIgMTEwLjY1MSAyMy45NjI2QzExMC43MiAyNC4zMTg0IDExMC44NjkgMjQuNjUzNiAxMTEuMDg2IDI0Ljk0MjVDMTExLjI3NiAyNS4xNzU1IDExMS41MjggMjUuMzQ5NiAxMTEuODExIDI1LjQ0NTNDMTEyLjE0IDI1LjU0ODEgMTEyLjQ4MyAyNS41OTczIDExMi44MjcgMjUuNTkxQzExMy4zODEgMjUuNjA5NyAxMTMuOTM0IDI1LjUzMTQgMTE0LjQ2MiAyNS4zNTk2QzExNC44NzQgMjUuMjAyNSAxMTUuMTU5IDI1LjA5MzkgMTE1LjMwOCAyNS4wMjgyTDExNS43NDYgMjYuOTEzN0MxMTUuMzYyIDI3LjA4NjUgMTE0Ljk2NiAyNy4yMjk4IDExNC41NiAyNy4zNDIyQzExMy45MzEgMjcuNTIyNSAxMTMuMjc4IDI3LjYwOTEgMTEyLjYyNCAyNy41OTkzQzExMS45MDQgMjcuNjIxMiAxMTEuMTg3IDI3LjUwODkgMTEwLjUwNyAyNy4yNjc5QzEwOS45NzggMjcuMDY4NyAxMDkuNTEzIDI2LjcyNTcgMTA5LjE2NCAyNi4yNzY2QzEwOC44MDcgMjUuNzk1NCAxMDguNTYzIDI1LjIzODcgMTA4LjQ1IDI0LjY0ODJDMTA4LjMwMyAyMy45MTExIDEwOC4yMzQgMjMuMTYwMyAxMDguMjQ0IDIyLjQwODVWMTEuMDQ0TDExMC41MDIgMTAuNjUyNkwxMTAuNTA0IDE0LjU5NVpcIixcbiAgICAgICAgICBmaWxsOiBcIiMyMzFGMjBcIlxuICAgICAgICB9XG4gICAgICApLFxuICAgICAgLyogQF9fUFVSRV9fICovIGMoXG4gICAgICAgIFwicGF0aFwiLFxuICAgICAgICB7XG4gICAgICAgICAgZDogXCJNMTIyLjc2IDE0LjMyNjVDMTIyLjk1MiAxNC4zMjY1IDEyMy4xNzUgMTQuMzI2NSAxMjMuNDI2IDE0LjM2MzZDMTIzLjY3NyAxNC40MDA4IDEyMy45MiAxNC40MjA4IDEyNC4xNjMgMTQuNDYwOEMxMjQuNDA1IDE0LjUwMDggMTI0LjYyNSAxNC41NDA4IDEyNC44MjkgMTQuNTgzNkMxMjQuOTc5IDE0LjYxMTYgMTI1LjEyOCAxNC42NDc4IDEyNS4yNzUgMTQuNjkyMkwxMjQuODk5IDE2LjY3NzdDMTI0LjYxIDE2LjU4MiAxMjQuMzE1IDE2LjUwMzggMTI0LjAxNiAxNi40NDM0QzEyMy40OTQgMTYuMzQ0MyAxMjIuOTYzIDE2LjI5OTMgMTIyLjQzMiAxNi4zMDkxQzEyMi4wMTMgMTYuMzA5NSAxMjEuNTk1IDE2LjM1NDUgMTIxLjE4NSAxNi40NDM0QzEyMC43NzYgMTYuNTM0OCAxMjAuNTA1IDE2LjU5NDggMTIwLjM3NSAxNi42MjkxVjI3LjMzMDhIMTE4LjExN1YxNS4xMzVDMTE4Ljc2MiAxNC45MDYzIDExOS40MjIgMTQuNzIyMSAxMjAuMDkyIDE0LjU4MzZDMTIwLjk3IDE0LjQwMzMgMTIxLjg2NCAxNC4zMTcxIDEyMi43NiAxNC4zMjY1WlwiLFxuICAgICAgICAgIGZpbGw6IFwiIzIzMUYyMFwiXG4gICAgICAgIH1cbiAgICAgICksXG4gICAgICAvKiBAX19QVVJFX18gKi8gYyhcbiAgICAgICAgXCJwYXRoXCIsXG4gICAgICAgIHtcbiAgICAgICAgICBkOiBcIk0xMzcuOTk2IDI2Ljk2MjNDMTM3LjQ4IDI3LjA5MzcgMTM2Ljc5OCAyNy4yMzI3IDEzNS45NDkgMjcuMzc5NEMxMzQuOTc4IDI3LjUzNTIgMTMzLjk5NSAyNy42MDg4IDEzMy4wMTEgMjcuNTk5M0MxMzIuMTc2IDI3LjYyMzggMTMxLjM0NSAyNy40NzgxIDEzMC41NjcgMjcuMTcwOEMxMjkuOTQgMjYuOTEyOSAxMjkuMzkgMjYuNDk1NyAxMjguOTY5IDI1Ljk1OTVDMTI4LjU1MyAyNS40MTEyIDEyOC4yNTYgMjQuNzgwNSAxMjguMDk3IDI0LjEwODNDMTI3LjkxMiAyMy4zMzQ5IDEyNy44MjMgMjIuNTQxMyAxMjcuODMyIDIxLjc0NTdWMTQuNjAzNkgxMzAuMDlWMjEuMjY1N0MxMzAuMDkgMjIuODE2MSAxMzAuMzMyIDIzLjkyNjQgMTMwLjgxNSAyNC41OTY4QzEzMS4yOTkgMjUuMjY3MiAxMzIuMTEzIDI1LjYwMTUgMTMzLjI1OSAyNS41OTk2QzEzMy41MDIgMjUuNTk5NiAxMzMuNzUzIDI1LjU5OTYgMTM0LjAxIDI1LjU3NjdDMTM0LjI2NyAyNS41NTM5IDEzNC41MSAyNS41Mzk2IDEzNC43MzYgMjUuNTEzOUMxMzQuOTYxIDI1LjQ4ODEgMTM1LjE2NyAyNS40NjUzIDEzNS4zNTQgMjUuNDM5NkMxMzUuNDg5IDI1LjQyODMgMTM1LjYyMyAyNS4zOTk1IDEzNS43NTIgMjUuMzUzOVYxNC41OTVIMTM4LjAxTDEzNy45OTYgMjYuOTYyM1pcIixcbiAgICAgICAgICBmaWxsOiBcIiMyMzFGMjBcIlxuICAgICAgICB9XG4gICAgICApLFxuICAgICAgLyogQF9fUFVSRV9fICovIGMoXG4gICAgICAgIFwicGF0aFwiLFxuICAgICAgICB7XG4gICAgICAgICAgZDogXCJNMTQ0Ljc5NSAyNS42ODgxQzE0NS43MTIgMjUuNjg4MSAxNDYuMzk1IDI1LjU2ODEgMTQ2LjgzOSAyNS4zMjI0QzE0Ny4wNSAyNS4yMTI0IDE0Ny4yMjYgMjUuMDQyNiAxNDcuMzQ0IDI0LjgzMzdDMTQ3LjQ2MiAyNC42MjQ4IDE0Ny41MTggMjQuMzg1OCAxNDcuNTA1IDI0LjE0NTRDMTQ3LjUxMiAyMy44ODczIDE0Ny40NTYgMjMuNjMxMyAxNDcuMzQyIDIzLjQwMDVDMTQ3LjIyOCAyMy4xNjk2IDE0Ny4wNTkgMjIuOTcxMSAxNDYuODUgMjIuODIyN0MxNDYuMTc3IDIyLjM3MjQgMTQ1LjQ1NCAyMi4wMDMzIDE0NC42OTYgMjEuNzIyOEMxNDQuMjE0IDIxLjUyNTcgMTQzLjc0OCAyMS4zMjU3IDE0My4zMDUgMjEuMTIyOUMxNDIuODkxIDIwLjkzNjUgMTQyLjUwNCAyMC42OTMyIDE0Mi4xNTYgMjAuNDAwMUMxNDEuODMzIDIwLjEyMTkgMTQxLjU3IDE5Ljc3OTYgMTQxLjM4MyAxOS4zOTQ1QzE0MS4xNzggMTguOTQxNSAxNDEuMDgyIDE4LjQ0NjQgMTQxLjEgMTcuOTQ4OUMxNDEuMDgxIDE3LjQzNTMgMTQxLjE4MyAxNi45MjQ0IDE0MS4zOTggMTYuNDU4NUMxNDEuNjEyIDE1Ljk5MjYgMTQxLjkzMyAxNS41ODQ5IDE0Mi4zMzQgMTUuMjY5MkMxNDMuMTU4IDE0LjYwNjQgMTQ0LjI3OSAxNC4yNzUgMTQ1LjY5OCAxNC4yNzVDMTQ2LjA1NCAxNC4yNzYxIDE0Ni40MDkgMTQuMjk3MSAxNDYuNzYyIDE0LjMzNzlDMTQ3LjExOCAxNC4zNzc5IDE0Ny40NDggMTQuNDI2NCAxNDcuNzU2IDE0LjQ4MzZDMTQ4LjA2MyAxNC41NDA3IDE0OC4zMiAxNC42MDM2IDE0OC41NjYgMTQuNjY5M0MxNDguODExIDE0LjczNSAxNDguOTgxIDE0Ljc4OTIgMTQ5LjExMSAxNC44NDA3TDE0OC42OTkgMTYuODAwNUMxNDguMzM3IDE2LjYyNTUgMTQ3Ljk1OSAxNi40ODk1IDE0Ny41NyAxNi4zOTQ4QzE0Ni45NiAxNi4yNDQ0IDE0Ni4zMzQgMTYuMTc0MyAxNDUuNzA3IDE2LjE4NjJDMTQ1LjEzNSAxNi4xNzIyIDE0NC41NyAxNi4zMDI4IDE0NC4wNjEgMTYuNTY2MkMxNDMuODQyIDE2LjY3MzEgMTQzLjY1OSAxNi44NDI3IDE0My41MzQgMTcuMDUzOUMxNDMuNDA5IDE3LjI2NTEgMTQzLjM0OCAxNy41MDg3IDE0My4zNTggMTcuNzU0N0MxNDMuMzU0IDE4LjAwODUgMTQzLjQwOCAxOC4yNiAxNDMuNTE2IDE4LjQ4ODlDMTQzLjYzNCAxOC43MTI4IDE0My43OTkgMTguOTA3OSAxNDMuOTk5IDE5LjA2MDJDMTQ0LjI1MSAxOS4yNTAzIDE0NC41MjQgMTkuNDEwNCAxNDQuODEyIDE5LjUzNzNDMTQ1LjEzNCAxOS42ODMgMTQ1LjUyIDE5LjgzNzMgMTQ1Ljk3MiAyMC4wMDNDMTQ2LjU2OSAyMC4yMzE1IDE0Ny4xMDEgMjAuNDU1MyAxNDcuNTcgMjAuNjc0M0MxNDguMDAzIDIwLjg3MTkgMTQ4LjQwNiAyMS4xMzE3IDE0OC43NjYgMjEuNDQ1N0MxNDkuMDk1IDIxLjczOTIgMTQ5LjM1NiAyMi4xMDMyIDE0OS41MjggMjIuNTExM0MxNDkuNzE5IDIyLjk5OCAxNDkuODExIDIzLjUxOSAxNDkuNzk3IDI0LjA0MjZDMTQ5Ljc5NyAyNS4yMTU4IDE0OS4zNjUgMjYuMTA1MiAxNDguNTAxIDI2LjcxMDhDMTQ3LjYzNyAyNy4zMTY1IDE0Ni40MDggMjcuNjE5MyAxNDQuODEyIDI3LjYxOTNDMTQzLjkzMiAyNy42NDU5IDE0My4wNTIgMjcuNTQ5OCAxNDIuMTk4IDI3LjMzMzZDMTQxLjU2OCAyNy4xNDMyIDE0MS4xNCAyNy4wMDAzIDE0MC45MTQgMjYuOTA1MUwxNDEuMzI2IDI0Ljk0NTNDMTQxLjU4MyAyNS4wNDI0IDE0MS45OTUgMjUuMTkxIDE0Mi41NiAyNS4zODUzQzE0My4yODQgMjUuNjA2MiAxNDQuMDM5IDI1LjcwODUgMTQ0Ljc5NSAyNS42ODgxWlwiLFxuICAgICAgICAgIGZpbGw6IFwiIzIzMUYyMFwiXG4gICAgICAgIH1cbiAgICAgICksXG4gICAgICAvKiBAX19QVVJFX18gKi8gYyhcbiAgICAgICAgXCJwYXRoXCIsXG4gICAgICAgIHtcbiAgICAgICAgICBkOiBcIk0xNTQuNzYxIDE0LjU5NUgxNTkuNTI5VjE2LjUwNjJIMTU0Ljc2MVYyMi4zODI4QzE1NC43NTIgMjIuOTEzMyAxNTQuODAxIDIzLjQ0MzIgMTU0LjkwOCAyMy45NjI2QzE1NC45NzcgMjQuMzE4NCAxNTUuMTI2IDI0LjY1MzYgMTU1LjM0MyAyNC45NDI1QzE1NS41MzMgMjUuMTc1NSAxNTUuNzg1IDI1LjM0OTYgMTU2LjA2OCAyNS40NDUzQzE1Ni4zOTcgMjUuNTQ4MSAxNTYuNzQgMjUuNTk3MyAxNTcuMDg0IDI1LjU5MUMxNTcuNjM4IDI1LjYwOTcgMTU4LjE5MSAyNS41MzE0IDE1OC43MTkgMjUuMzU5NkwxNTkuNTY1IDI1LjAyODJMMTYwIDI2LjkxMzdDMTU5LjYxNiAyNy4wODY1IDE1OS4yMiAyNy4yMjk4IDE1OC44MTQgMjcuMzQyMkMxNTguMTg1IDI3LjUyMjUgMTU3LjUzMyAyNy42MDkxIDE1Ni44NzggMjcuNTk5M0MxNTYuMTU5IDI3LjYyMTIgMTU1LjQ0MSAyNy41MDg5IDE1NC43NjEgMjcuMjY3OUMxNTQuMjMzIDI3LjA2NzMgMTUzLjc2OCAyNi43MjQ1IDE1My40MTggMjYuMjc2NkMxNTMuMDYxIDI1Ljc5NTQgMTUyLjgxNyAyNS4yMzg3IDE1Mi43MDQgMjQuNjQ4MkMxNTIuNTU3IDIzLjkxMTEgMTUyLjQ4OCAyMy4xNjAzIDE1Mi40OTggMjIuNDA4NVYxMS4wNDRMMTU0Ljc1NiAxMC42NTI2TDE1NC43NjEgMTQuNTk1WlwiLFxuICAgICAgICAgIGZpbGw6IFwiIzIzMUYyMFwiXG4gICAgICAgIH1cbiAgICAgICksXG4gICAgICAvKiBAX19QVVJFX18gKi8gYyhcbiAgICAgICAgXCJwYXRoXCIsXG4gICAgICAgIHtcbiAgICAgICAgICBzdHlsZTogeyBtaXhCbGVuZE1vZGU6IFwibXVsdGlwbHlcIiB9LFxuICAgICAgICAgIGQ6IFwiTTAuNzg3NDc2IDMwLjIwNDhDMC45MDg4NDQgMzAuNjY3NiAxLjA0NDMzIDMxLjEyNzUgMS4xOTM5MiAzMS41Nzg5QzEuMzE4MTEgMzEuOTU2IDEuNDQ3OTQgMzIuMzI3NCAxLjU4OTA3IDMyLjY5NTlDMS43MzAyIDMzLjA2NDUgMS44NzEzMiAzMy40MjczIDIuMDM3ODUgMzMuNzg3M0MyLjU0MjU1IDM0LjkzNzUgMy4xMzYxOCAzNi4wNDU2IDMuODEzMjEgMzcuMTAxMkM1LjM2Mjc4IDM2LjU5ODQgOC43Mzg1MSAzNS4zMDE0IDE0LjI1NjUgMzMuNzUwMUMxOC41NTI0IDMyLjU0NDUgMjguMTUxOCAzMC4xMzYyIDM2Ljk0OTYgMjguMjIyMUM0Mi41NTc5IDI3LjAwNTEgNDUuNjA2MiAyNi4yMzk1IDQ2LjU0NjEgMjUuOTM2N0M0Ni44MzYxIDI1Ljg0NjEgNDcuMTA3IDI1LjcwMTggNDcuMzQ0OSAyNS41MTFDNDcuNDE0NiAyNS40NDMyIDQ3LjQ1NjggMjUuMzUxNSA0Ny40NjM0IDI1LjI1MzlDNDcuNDgzMiAyNC44NTExIDQ3LjQ5NDUgMjQuNDQ1NCA0Ny40OTQ1IDI0LjAzOTdDNDcuNDk1NyAyMi4xNTEgNDcuMjc2OCAyMC4yNjg3IDQ2Ljg0MjUgMTguNDMxOEM0Mi43MjE2IDE5LjY4MzEgMzEuNjcxNSAyMi4wMDI4IDIyLjQwMjMgMjQuMjYyNkMxMi41NDMzIDI2LjY3NjYgNC4wMTkyNiAyOS4yODc3IDAuNzg3NDc2IDMwLjIwNDhaXCIsXG4gICAgICAgICAgZmlsbDogXCJ1cmwoI3BhaW50MF9saW5lYXIpXCJcbiAgICAgICAgfVxuICAgICAgKSxcbiAgICAgIC8qIEBfX1BVUkVfXyAqLyBjKFxuICAgICAgICBcInBhdGhcIixcbiAgICAgICAge1xuICAgICAgICAgIHN0eWxlOiB7IG1peEJsZW5kTW9kZTogXCJtdWx0aXBseVwiIH0sXG4gICAgICAgICAgZDogXCJNMS4xMTE5OCAxNi43MzJWMTYuNzU0OFYxNi43ODkxQzEuMDkyMjIgMTYuODUxOSAxLjA3MjQ3IDE2LjkxMTkgMS4wNTU1MyAxNi45NzQ4VjE3LjAyMDVDMS4wMjE2NiAxNy4xMjcyIDAuOTkwNjE0IDE3LjIzMjkgMC45NjIzODkgMTcuMzM3NkMwLjkzMTM0MSAxNy40NDMzIDAuOTAwMjk1IDE3LjU1MTkgMC44NzIwNyAxNy42NTc2QzExLjMzMjMgMTUuMDg2NCAxOC42OTYzIDEyLjk4NjYgMjUuMDQ2OSAxMC45NzU0QzI4Ljc2NyA5Ljc5ODQyIDMxLjQ5NjQgOC43MjcxIDMzLjMzOTUgNy43ODQzNUwzMy40NjY1IDcuNzIxNUwzMy41MDMyIDcuNzAxNUwzMy41OTA3IDcuNjU1NzlMMzMuNjM1OCA3LjYzMDA4TDMzLjcxMjEgNy41OTAwOEwzMy43MzE4IDcuNTc1OEwzMy44MDI0IDcuNTM4NjZDMzMuODE3NCA3LjUyNzU2IDMzLjgzMzUgNy41MTc5OSAzMy44NTA0IDcuNTEwMDlMMzMuOTE4MSA3LjQ3Mjk1TDMzLjk2NjEgNy40NDcyNEwzNC4wMzM4IDcuNDA3MjVMMzQuMDc2MiA3LjM4NDM5TDM0LjE0OTUgNy4zNDE1NEwzNC4xODYyIDcuMzIxNTRMMzQuMjgyMiA3LjI2NDRMMzQuMzg2NiA3LjIwMTU1TDM0LjQxNzcgNy4xODE1NUwzNC40ODU0IDcuMTQxNTZMMzQuNTI0OSA3LjExNTg1TDM0LjU4NDIgNy4wNzg3MUwzNC42MjA5IDcuMDU1ODVMMzQuNjc3NCA3LjAxODcyTDM0LjcxNjkgNi45OTMwMUwzNC43NzA1IDYuOTU4NzJMMzQuODA3MiA2LjkzMzAxTDM0Ljg2MzYgNi44OTU4N0wzNC44OTc1IDYuODczMDJMMzQuOTU0IDYuODMzMDJMMzQuOTgyMiA2LjgxMzAyTDM1LjA2NCA2Ljc1NTg5QzM1LjY2ODEgNi4zMTg3OSAzNi41NTQzIDUuNTI0NTkgMzYuNDkyMiA0LjU4MTg0QzM2LjQ5MDkgNC41NzMzMiAzNi40OTA5IDQuNTY0NjMgMzYuNDkyMiA0LjU1NjEyQzM2LjQ0NzEgNC4wOTYxNyAzNi4wMzIyIDMuNDM2MjQgMzQuNzczMyAyLjczOTE4TDM0LjY5NDMgMi42OTYzMkwzNC42MDExIDIuNjQ3NzZMMzQuNDc0MSAyLjU4MjA1TDM0LjQyOSAyLjU1OTE5TDM0LjE0NjcgMi40MjIwN0wzNC4wODc1IDIuMzkzNUwzMy45NDYzIDIuMzI0OTNMMzMuODc1OCAyLjI5MDY1TDMzLjc2NTcgMi4yMzkyM0wzMy42ODY2IDIuMTk5MjNMMzMuNjA0OCAyLjE2MjA5TDMzLjUxNzMgMi4xMjIxTDMzLjQ0MTEgMi4wODc4MUwzMy4zNDc5IDIuMDQ0OTZMMzMuMjgwMiAyLjAxNjM5TDMzLjE4MTQgMS45NzA2OUwzMy4xMzA2IDEuOTQ3ODNMMzIuNzQxMSAxLjc4MjEzSDMyLjcwNzJMMzIuNTg1OSAxLjczMzU3TDMyLjU0MzUgMS43MTY0M0wzMi40MjIyIDEuNjY3ODZMMzIuMzgyNiAxLjY1MzU4TDMyLjI1NTYgMS42MDIxNUgzMi4yMzMxTDMxLjYyOSAxLjM3NjQ2TDMxLjQ3MzggMS4yOTA3NkgzMS40NTRMMzEuMzA3MyAxLjIzOTM0QzMxLjA0NDggMS4xNTA3NyAzMC43ODIzIDEuMDY3OTMgMzAuNTE5OCAwLjk4NzkzNEwzMC4zNjc0IDAuOTQyMjIzQzMwLjE0NDQgMC44NzY1MTYgMjkuOTE4NiAwLjgxMzY2OCAyOS42OTI4IDAuNzU2NTMxQzI5LjcwNjcgMC45MTIzODkgMjkuNzA2NyAxLjA2OTE5IDI5LjY5MjggMS4yMjUwNUMyOS42MTA0IDEuNzc5NTcgMjkuMzM1MiAyLjI4NjEgMjguOTE2NiAyLjY1MzQ3QzI4LjAyMTkgMy41MTA1MiAyNi4yNDkzIDQuMzk5IDI0LjA0NDkgNS4xODQ2M0MyMS42OTEgNi4wMjQ1NCAxNi43OTk1IDcuNjU1NzkgMTIuNDcyNiA4Ljc1NTY3QzkuNTYyNiA5LjQ5Mjc0IDUuNzMyNDUgMTAuNDUyNiAzLjg4OTM0IDEwLjg1ODNMMy42Nzc2NSAxMS4xODk3TDMuNjQzNzggMTEuMjQ2OEwzLjU1OTExIDExLjM4NFYxMS40MDRMMy41NDIxNyAxMS40MzI1TDMuNTE5NTkgMTEuNDY2OEMzLjQ5NDE5IDExLjUxMjUgMy40NjU5NiAxMS41NTgyIDMuNDM3NzQgMTEuNjAzOUwzLjQxNzk4IDExLjYzODJMMy4zODk3NSAxMS42ODM5QzMuMzYxNTMgMTEuNzI5NiAzLjMzMzMxIDExLjc3ODIgMy4zMDc5IDExLjgyNjhMMy4xMTU5NyAxMi4xNjFDMy4xMTU5NyAxMi4xODY3IDMuMDkwNTcgMTIuMjA5NiAzLjA3OTI4IDEyLjIzMjRMMi45OTc0MyAxMi4zNzgxTDIuOTYzNTYgMTIuNDQzOEMyLjkzNTMzIDEyLjQ5MjQgMi45MDk5MyAxMi41NDEgMi44ODQ1MyAxMi41ODk1QzIuODU5MTIgMTIuNjM4MSAyLjg2NDc3IDEyLjYyNjcgMi44NTM0OCAxMi42NDY3VjEyLjY2NjdDMi44MjUyNSAxMi43MTUzIDIuNzk5ODUgMTIuNzY2NyAyLjc3MTYyIDEyLjgxODFMMi41ODgxNiAxMy4xODA5QzIuNTg4MTYgMTMuMjAwOSAyLjU2ODQgMTMuMjE4MSAyLjU1OTkzIDEzLjIzODFMMi40ODM3MyAxMy4zOTUyTDIuNDYxMTUgMTMuNDM4TDIuNDQ3MDQgMTMuNDYzN0MyLjQyMTYzIDEzLjUxNTIgMi4zOTYyMyAxMy41NjY2IDIuMzczNjUgMTMuNjIwOUwyLjMzOTc4IDEzLjY4OTRMMi4yMTI3NyAxMy45NzUxQzIuMTcwNDMgMTQuMDY2NSAyLjEyODA5IDE0LjE2MDggMi4wODg1NyAxNC4yNjA4TDIuMDc0NDYgMTQuMjkyMlYxNC4zMDY1TDIuMDAzOSAxNC40NzIyVjE0LjQ5MjJMMS45ODEzMiAxNC41NDM2TDEuOTEzNTggMTQuNzA5M0wxLjg4NTM1IDE0Ljc3MjJDMS44NDU4NCAxNC44NjkzIDEuODA2MzIgMTQuOTY2NCAxLjc2OTYzIDE1LjA1NzlDMS43MzAxMSAxNS4xNTUgMS42OTM0MiAxNS4yNTIxIDEuNjU2NzMgMTUuMzQzNVYxNS4zNjkzQzEuNjM0MTUgMTUuNDI5MiAxLjYxMTU3IDE1LjQ4OTIgMS41OTE4MSAxNS41NDY0TDEuNTY2NDEgMTUuNjA5MkMxLjU0NjY1IDE1LjY2OTIgMS41MjQwNyAxNS43MjY0IDEuNTA0MzIgMTUuNzg2M1YxNS44MDkyVjE1Ljg0MzVDMS40Njc2MiAxNS45NDYzIDEuNDMwOTMgMTYuMDQ5MiAxLjM5NzA2IDE2LjE0OTJDMS4zNjAzNyAxNi4yNTIgMS4zMjY1IDE2LjM1NDkgMS4yOTI2MyAxNi40NjA2TDEuMTExOTggMTYuNzMyWlwiLFxuICAgICAgICAgIGZpbGw6IFwidXJsKCNwYWludDFfbGluZWFyKVwiXG4gICAgICAgIH1cbiAgICAgICksXG4gICAgICAvKiBAX19QVVJFX18gKi8gYyhcbiAgICAgICAgXCJwYXRoXCIsXG4gICAgICAgIHtcbiAgICAgICAgICBzdHlsZTogeyBtaXhCbGVuZE1vZGU6IFwibXVsdGlwbHlcIiB9LFxuICAgICAgICAgIGQ6IFwiTTAuOTA4Nzk1IDI0LjM3OTZDMS41NTUxNSAyNC4zNzk2IDMuMjIwNDMgMjQuMjk2OCA1LjA2OTE4IDI0LjExOTdDOC4yODk2NyAyMy44MDU0IDE0LjcyNzggMjIuOTU5OCAyMi4wNzIgMjEuOTk3QzI3Ljc5MDQgMjEuMjQ4NSA0MC4yOTk4IDE5LjQxMTYgNDYuODQyNCAxOC40NDMxTDQ2LjgxMTQgMTguMzA2QzQ2Ljc5MTYgMTguMjIzMSA0Ni43NjkgMTguMTQwMyA0Ni43NDkzIDE4LjA1NDZDNDYuNzQ5MyAxOC4wMjYgNDYuNzMyMyAxNy45OTc1IDQ2LjcyNjcgMTcuOTY4OUw0Ni42ODQ0IDE3Ljc5NzVMNDYuNjU5IDE3LjcwODlMNDYuNTk5NyAxNy40ODg5QzQ2LjU5MzcgMTcuNDcyMiA0Ni41ODkgMTcuNDU1IDQ2LjU4NTYgMTcuNDM3NUw0Ni41MzQ4IDE3LjI2MDRMNDYuNTE3OCAxNy4yMDYxTDQ2LjQ5MjQgMTcuMTE3NUw0Ni40NDE2IDE2Ljk0NjFDNDYuNDQxNiAxNi45MTQ3IDQ2LjQyMTkgMTYuODg2MSA0Ni40MTM0IDE2Ljg1NDdMNDYuMzU0MSAxNi42NjlWMTYuNjM3NkM0Ni4zNTQxIDE2LjYxNzYgNDYuMzQgMTYuNTk0NyA0Ni4zMzE2IDE2LjU3NDdDNDYuMzIzMSAxNi41NTQ4IDQ2LjMwNjEgMTYuNDkxOSA0Ni4yOTIgMTYuNDQ5QzQ2LjI3NzkgMTYuNDA2MiA0Ni4yNzIzIDE2LjM5MTkgNDYuMjYzOCAxNi4zNjMzTDQ2LjIzMjggMTYuMjcxOUM0Ni4yMTU4IDE2LjIyMDUgNDYuMTk4OSAxNi4xNjkxIDQ2LjE3OTEgMTYuMTE3N0M0Ni4xNTk0IDE2LjA2NjIgNDYuMTU5NCAxNi4wNTQ4IDQ2LjE0ODEgMTYuMDIzNEw0Ni4wNzE5IDE1LjgxMkM0Ni4wNzE5IDE1Ljc4NjMgNDYuMDU0OSAxNS43NjA1IDQ2LjA0MzcgMTUuNzM0OEM0Ni4wMzI0IDE1LjcwOTEgNDYuMDI5NSAxNS42OTQ4IDQ2LjAyMzkgMTUuNjc0OEw0NS45NzMxIDE1LjU0MzRMNDUuOTM5MiAxNS40NDYzTDQ1LjkxMzggMTUuMzgzNEw0NS44Njg3IDE1LjI4OTJDNDUuODU0NSAxNS4yNTc3IDQ1Ljg0MzMgMTUuMjIzNSA0NS44MzIgMTUuMTkyQzQ1LjgyMDcgMTUuMTYwNiA0NS44MDY2IDE1LjEzMiA0NS43OTUzIDE1LjEwMzVDNDUuNzg0IDE1LjA3NDkgNDUuNzY0MiAxNS4wMjYzIDQ1Ljc1MDEgMTQuOTg2M0M0NS43MzYgMTQuOTQ2NCA0NS43MjQ3IDE0LjkyNjQgNDUuNzEzNCAxNC44OTc4TDQ1LjY4OCAxNC44Mzc4TDQ1LjY0MjkgMTQuNzI2NEw0NS42MDA1IDE0LjYyMzVDNDUuNTgwOCAxNC41Nzc4IDQ1LjU1ODIgMTQuNTI5MyA0NS41Mzg0IDE0LjQ4MDdMNDUuNDk2MSAxNC4zODA3TDQ1LjQ1OTQgMTQuMjk1TDQ1LjQwODYgMTQuMTgzNkM0NS4zOTQ1IDE0LjE0OTMgNDUuMzc3NSAxNC4xMTUgNDUuMzYzNCAxNC4wODM2TDQ1LjMyMTEgMTMuOTg2NUM0NS4zMTA1IDEzLjk2NyA0NS4zMDExIDEzLjk0NyA0NS4yOTI5IDEzLjkyNjVMNDUuMjQ0OSAxMy44MjM2QzQ1LjIyNTEgMTMuNzgwOCA0NS4yMDU0IDEzLjc0MDggNDUuMTg4NCAxMy42OTc5QzQ1LjE3MTUgMTMuNjYzNiA0NS4xNTQ2IDEzLjYzMjIgNDUuMTQwNSAxMy41OTc5TDQ1LjA0NzMgMTMuNDA2NUw0NC45OTM3IDEzLjI5OEw0NC45NDU3IDEzLjIwMDhMNDQuOTMxNiAxMy4xNzIzVjEzLjE1NTFDNDQuOTExOCAxMy4xMjA4IDQ0Ljg5NDkgMTMuMDgzNyA0NC44NzggMTMuMDQ5NEM0NC44NzAzIDEzLjAzNzcgNDQuODYzNyAxMy4wMjUyIDQ0Ljg1ODIgMTMuMDEyM0w0NC44MTAyIDEyLjkyMDlMNDQuNzU5NCAxMi44MThMNDQuNjU3OCAxMi42MjY2TDQ0LjU5ODUgMTIuNTE4TDQ0LjUzMzYgMTIuNDAzOFYxMi4zODY2TDQ0LjQ3NDMgMTIuMjgwOUM0NC40NjYxIDEyLjI2OTUgNDQuNDU5NCAxMi4yNTcgNDQuNDU0NiAxMi4yNDM4QzQ0LjQzNzYgMTIuMjE1MiA0NC40MjA3IDEyLjE4NjYgNDQuNDA2NiAxMi4xNTgxTDQ0LjM0NzMgMTIuMDU1Mkw0NC4yOTM3IDExLjk2MzhMNDQuMjMxNiAxMS44NTUzTDQ0LjE2MzkgMTEuNzQzOEM0Mi40OTAxIDExLjk4NjcgNDAuNDU3OSAxMi4yNzgxIDM3Ljk1NDMgMTIuNjI2NkMzMi40NjczIDEzLjM5NTEgMjYuMzA1OCAxNC40MTUgMjAuMDAwMyAxNS4yNDA2QzEwLjMxMDYgMTYuNTA5IDMuOTcxMjMgMTcuNDQ2MSAwLjg1NTE2NyAxNy43MDAzQzAuODU1MTY3IDE3Ljc1MTggMC44MjY5NDIgMTcuODAwMyAwLjgxNTY1MiAxNy44NTE4VjE3Ljg4MDNMMC43OTg3MTcgMTcuOTQwM0wwLjc2NDg0NCAxOC4wNzQ2QzAuNzY0ODQ0IDE4LjExMTcgMC43NDUwODkgMTguMTQ4OSAwLjczNjYyMSAxOC4xODZMMC43MjI1MDggMTguMjM3NFYxOC4yNjg5VjE4LjI5NDZMMC43MDU1NzQgMTguMzY4OEMwLjI2NDk4MSAyMC4yMTQ2IDAuMDQxMzkyNyAyMi4xMDY1IDAuMDM5NDU5NiAyNC4wMDU0QzAuMDAyNzY2ODYgMjQuMjM2OCAwLjM1ODQwNCAyNC4zNzY4IDAuOTA4Nzk1IDI0LjM3OTZaXCIsXG4gICAgICAgICAgZmlsbDogXCJ1cmwoI3BhaW50Ml9saW5lYXIpXCJcbiAgICAgICAgfVxuICAgICAgKSxcbiAgICAgIC8qIEBfX1BVUkVfXyAqLyBjKFxuICAgICAgICBcInBhdGhcIixcbiAgICAgICAge1xuICAgICAgICAgIHN0eWxlOiB7IG1peEJsZW5kTW9kZTogXCJtdWx0aXBseVwiIH0sXG4gICAgICAgICAgZDogXCJNNDEuNjM1IDM5LjgyMDlDNDAuMDQ4NyA0MS4zMTUgMzQuMzU4NSA0NC4wMjMzIDI4LjcyMiA0NS4xNTE4QzI0LjMzODEgNDYuMDE1IDE5Ljg4MjcgNDYuNDUyMiAxNS40MTY2IDQ2LjQ1NzRDMTUuNTE2NSA0Ni41NjU0IDE1LjY0MzIgNDYuNjQ0NCAxNS43ODM2IDQ2LjY4NTlDMTYuMTY3NCA0Ni44MjMgMTYuNTU0MSA0Ni45NTE2IDE2Ljk0NjQgNDcuMDY4N0MxNy4xMTMgNDcuMTIwMSAxNy4yODIzIDQ3LjE2ODcgMTcuNDQ4OCA0Ny4yMTQ0SDE3LjQ3MTRMMTcuNjk3MiA0Ny4yNzQ0SDE3LjczMTFMMTcuOTczOCA0Ny4zMzczSDE4LjAwNDlMMTguMjA4MSA0Ny4zODU4TDE4LjI3MyA0Ny40MDAxTDE4LjQ4NzUgNDcuNDUxNUgxOC41NDExTDE4LjczMDMgNDcuNDk0NEwxOC44MjYyIDQ3LjUxNDRMMTguOTY3NCA0Ny41NDNMMTkuMDY5IDQ3LjU2M0wxOS4yNjM3IDQ3LjYwMjlMMTkuMzg3OSA0Ny42MjU4TDE5LjQ4OTUgNDcuNjQ1OEwxOS42MjIyIDQ3LjY2ODdIMTkuNjc4NkwxOS45NjA5IDQ3LjcxNzJIMjAuMDI4NkwyMC4xODY3IDQ3Ljc0MDFIMjAuMjE0OUwyMC41NjIxIDQ3Ljc4ODZIMjAuNTc2MkwyMC43NTk2IDQ3LjgxMTVMMjEuMzI0MiA0Ny44NzQzTDIxLjcwOCA0Ny45MTE1QzIyLjM2NjYgNDcuOTY2NyAyMy4wMzE4IDQ3Ljk5NDMgMjMuNzAzNSA0Ny45OTQzQzI3LjA5NjIgNDguMDA5OCAzMC40NTI2IDQ3LjI4ODIgMzMuNTQ2IDQ1Ljg3ODJDMzYuNjM5NCA0NC40NjgxIDM5LjM5NzkgNDIuNDAyNSA0MS42MzUgMzkuODIwOVpcIixcbiAgICAgICAgICBmaWxsOiBcInVybCgjcGFpbnQzX2xpbmVhcilcIlxuICAgICAgICB9XG4gICAgICApLFxuICAgICAgLyogQF9fUFVSRV9fICovIGMoXG4gICAgICAgIFwicGF0aFwiLFxuICAgICAgICB7XG4gICAgICAgICAgc3R5bGU6IHsgbWl4QmxlbmRNb2RlOiBcIm11bHRpcGx5XCIgfSxcbiAgICAgICAgICBkOiBcIk00My4yNjM1IDMyLjE5MDJDNDIuNjUxIDMyLjE5MDIgMzkuMTIyOSAzMi4yNzMxIDMzLjQzMjcgMzIuODI3M0MyNS45NzU2IDMzLjU1MDEgMTUuMTE3NCAzNS4xMzU2IDEwLjcyNTUgMzUuODkyN0M3Ljk5NjE0IDM2LjM2NDEgNS40NTMwNSAzNi45MTU1IDMuOTE3NiAzNy4yNjRDMy45ODUzNCAzNy4zNjk3IDQuMDU1OTEgMzcuNDc1NCA0LjEyNjQ3IDM3LjU3ODJMNC4xNzQ0NSAzNy42NDk3TDQuMjY0NzggMzcuNzgxMUw0LjMxNTU4IDM3Ljg1NTNMNC40MDg3MiAzNy45ODY4TDQuNDM5NzcgMzguMDMyNUw0LjYzNzM1IDM4LjMwMzlMNC42NzY4NiAzOC4zNjFMNC43NzU2NSAzOC40OTI0TDQuODIzNjMgMzguNTU4MUw0LjkyNTI0IDM4LjY5MjRDNC45MjUyNCAzOC43MDk1IDQuOTUwNjUgMzguNzIzOCA0Ljk2MTk0IDM4LjczODFMNS4xOTA1NiAzOS4wMjM4TDUuMjA0NjcgMzkuMDM4MUw1LjMxNDc1IDM5LjE3ODFMNS4zNTcwOSAzOS4yMzIzQzUuMzkzNzggMzkuMjc4MSA1LjQzMDQ3IDM5LjMyMzggNS40Njk5OSAzOS4zNjY2TDUuNTAzODYgMzkuNDA5NUM1LjYyODA1IDM5LjU2MDkgNS43NTUwNiAzOS42OTUyIDUuODgyMDggMzkuODU4TDUuOTEzMTIgMzkuODk1MUw2LjAzNzMyIDQwLjAzNTFMNi4wNjU1NCA0MC4wNjY1QzYuMjAxMDIgNDAuMjIwOCA2LjMzOTMyIDQwLjM3MjIgNi40ODA0NSA0MC41MjA4TDYuNDk0NTYgNDAuNTM3OUw2LjYzMDA0IDQwLjY4MzZMNi42NTI2MiA0MC43MDY1QzYuODQ3MzggNDAuOTA5MyA3LjA0NDk1IDQxLjExMjEgNy4yNDgxNyA0MS4zMDkzTDcuMjYyMjkgNDEuMzIzNkM3LjQ2ODMzIDQxLjUyMzUgNy42NzcyIDQxLjcyMDcgNy44ODg4OSA0MS45MTIxQzguMTAzNCA0Mi4xMDkyIDguMzIwNzMgNDIuMzAwNiA4LjU0MzcxIDQyLjQ4MzRDOC42NjIyNSA0Mi41ODYzIDguOTIxOTIgNDIuNjAzNCA5LjczNDgxIDQyLjQ0OTFDMTEuNDI4MyA0Mi4xMjA2IDE3LjgyOTggNDAuOTk3OSAyNC45MTE1IDQwLjAxNTFDMjkuODEyOSAzOS4zNzEgMzQuNzQ1NyAzOS4wMDEgMzkuNjg3NCAzOC45MDY3QzQwLjkzMjEgMzguOTA2NyA0Mi4xMTE5IDM5LjE5MjMgNDEuNjM3NyAzOS44MDA5QzQxLjY5MTMgMzkuNzM4IDQxLjc0MjEgMzkuNjc1MiA0MS43OTU4IDM5LjYxNTJWMzkuNjAwOUw0MS45NDgyIDM5LjQxOEw0Mi4wOTc4IDM5LjIzODFMNDIuMTE0NyAzOS4yMTUyTDQyLjI2NDMgMzkuMDI5NUM0Mi40NDc4IDM4Ljc5NTMgNDIuNjI4NCAzOC41NTgxIDQyLjgwMzQgMzguMzE4MkM0Mi45Nzg0IDM4LjA3NTMgNDMuMTUwNiAzNy44MzI1IDQzLjMxNzEgMzcuNTg0TDQzLjQ1MjYgMzcuMzgxMVYzNy4zNjExTDQzLjU4MjQgMzcuMTYxMVYzNy4xNDRMNDMuNzEyMyAzNi45MzgzQzQ0LjA3OTIgMzYuMzUyNyA0NC40MjM1IDM1Ljc0OTkgNDQuNzM5NyAzNS4xMzI4QzQ0Ljc3OTIgMzUuMDU4NSA0NC44MTU5IDM0Ljk4NDIgNDQuODUyNiAzNC45MDcxTDQ0Ljk2MjYgMzQuNjgxNEM0NS4yNjc1IDM0LjA0OTEgNDUuNTQ1IDMzLjQwNTQgNDUuNzk1MyAzMi43NTAyQzQ1Ljk5NTcgMzIuMzk4OCA0NS43MTA2IDMyLjE5MDIgNDMuMjYzNSAzMi4xOTAyWlwiLFxuICAgICAgICAgIGZpbGw6IFwidXJsKCNwYWludDRfbGluZWFyKVwiXG4gICAgICAgIH1cbiAgICAgICksXG4gICAgICAvKiBAX19QVVJFX18gKi8gYyhcbiAgICAgICAgXCJwYXRoXCIsXG4gICAgICAgIHtcbiAgICAgICAgICBzdHlsZTogeyBtaXhCbGVuZE1vZGU6IFwibXVsdGlwbHlcIiB9LFxuICAgICAgICAgIGQ6IFwiTTE5LjgwNTYgMi43Njc2OEMyMC4wMDAzIDEuMzM5MjcgMTYuMjQ5MiAxLjU3MDY3IDE2LjA4MjcgMS4yNzM1NkMxNC4xMzc5IDEuOTQ1MDkgMTIuMjg3NyAyLjg2OTkgMTAuNTc4OCA0LjAyNDY5QzEwLjUwNTQgNC4wNzYxMiAxMC40NzQzIDQuMTgxODIgMTAuODE1OSA0LjI1MzI0QzExLjk1MjUgNC40NTM2MSAxMy4xMDI5IDQuNTYzNDYgMTQuMjU2NSA0LjU4MTc4QzE2LjYyMTggNC42MDE3OCAxOS42MTkzIDQuMDc2MTIgMTkuODA1NiAyLjc2NzY4WlwiLFxuICAgICAgICAgIGZpbGw6IFwidXJsKCNwYWludDVfbGluZWFyKVwiXG4gICAgICAgIH1cbiAgICAgICksXG4gICAgICAvKiBAX19QVVJFX18gKi8gYyhcbiAgICAgICAgXCJwYXRoXCIsXG4gICAgICAgIHtcbiAgICAgICAgICBzdHlsZTogeyBtaXhCbGVuZE1vZGU6IFwibXVsdGlwbHlcIiB9LFxuICAgICAgICAgIGQ6IFwiTTQ0LjYwNyAzMy41NDczQzQ0LjAxNDMgMzMuNzg3MyA0MC43OTY2IDM0Ljc3ODYgMzcuMjgyNiAzNi4xNjdDMzMuNjEzMyAzNy42MTU0IDMxLjAzNjQgMzkuMzcyNCAzMS4wMDUzIDQxLjI5NUMzMC45NzcxIDQyLjgyMDYgMzMuODY3NCA0My45MDMzIDM0LjUyNzggNDQuMjE0N0MzNS4xODgzIDQ0LjUyNjEgMzUuNDcwNiA0NC43MzQ3IDM1LjU0NjggNDQuODkxOEM0MC4yNzQ3IDQyLjE0MzggNDMuOTI4OCAzNy44MzgyIDQ1Ljg5OTcgMzIuNjkzMUM0NS43MzMyIDMzLjA4MTYgNDUuMzA0MiAzMy4yNTg4IDQ0LjYwNyAzMy41NDczWlwiLFxuICAgICAgICAgIGZpbGw6IFwidXJsKCNwYWludDZfbGluZWFyKVwiXG4gICAgICAgIH1cbiAgICAgICksXG4gICAgICAvKiBAX19QVVJFX18gKi8gYyhcbiAgICAgICAgXCJwYXRoXCIsXG4gICAgICAgIHtcbiAgICAgICAgICBzdHlsZTogeyBtaXhCbGVuZE1vZGU6IFwibXVsdGlwbHlcIiB9LFxuICAgICAgICAgIGQ6IFwiTTUuMjI0NDggMjEuMDg1OEM5LjM5NjE2IDE5LjI0NTkgMTMuNzcxMSAxNy4xOTE5IDE2LjYzMDMgMTUuODI2M0MyMS4xMDY4IDEzLjY5MjMgMjUuMDEzMSAxMS4wOTI1IDI0LjE2MzYgOC40NDQyNEMyMy40MDcxIDYuMDg0NSAyMC4yOTY3IDYuMzY3MzMgMTQuMDkgNy40OTI5MkMxMC4wOTkgOC4yMTU3IDQuODIwODYgOS41NDY5OSA0LjEwOTU4IDEwLjUwOTdMNC4wODEzNiAxMC41NDk3TDMuOTkzODYgMTAuNjg0QzEuNDQ2NiAxNC41MzE3IDAuMDU5MDQyIDE5LjA0NTcgMCAyMy42NzY5QzAgMjMuNzc5NyAwIDIzLjg4NTUgMCAyMy45ODgzQzAuMDA1NjQ1MDMgMjMuNTc0MSAxLjUyMTM0IDIyLjcxNyA1LjIyNDQ4IDIxLjA4NThaXCIsXG4gICAgICAgICAgZmlsbDogXCJ1cmwoI3BhaW50N19saW5lYXIpXCJcbiAgICAgICAgfVxuICAgICAgKSxcbiAgICAgIC8qIEBfX1BVUkVfXyAqLyBjKFxuICAgICAgICBcInBhdGhcIixcbiAgICAgICAge1xuICAgICAgICAgIHN0eWxlOiB7IG1peEJsZW5kTW9kZTogXCJtdWx0aXBseVwiIH0sXG4gICAgICAgICAgZDogXCJNMzkuNTg1OCAxMS40MDFDMzQuNzE5OCAxMi4xMjM4IDI2Ljk5NDYgMTMuNTcyMiAyNy43NDgyIDE4LjE5MTdDMjguMzI5NiAyMS43NDg1IDM1LjM0OTIgMjIuNzg1NSAzOC4yODQ2IDIzLjM1OThDNDAuNjEzMiAyMy44MTQgNDUuMTcxNiAyNC40NDI1IDQ3LjEyMTkgMjQuOTM2N0M0Ny4zODE2IDI1LjAwMjQgNDcuNDYzNSAyNS4xMjgxIDQ3LjQ1NzggMjUuMjcxQzQ3LjQ1NzggMjUuMDY4MiA0Ny40NzQ3IDI0Ljg2MjUgNDcuNDgwNCAyNC42NTY4VjI0LjYxOTZDNDcuNDgwNCAyNC40MjkyIDQ3LjQ4MDQgMjQuMjM4NyA0Ny40ODA0IDI0LjA0ODNDNDcuNDkgMTkuNzYzNSA0Ni4zNjMyIDE1LjU1NDYgNDQuMjE3NiAxMS44NjFMNDQuMTM1NyAxMS43MjY3QzQzLjg5MyAxMS4zMDY4IDQyLjE5OTUgMTEuMDAzOSAzOS41ODU4IDExLjQwMVpcIixcbiAgICAgICAgICBmaWxsOiBcInVybCgjcGFpbnQ4X2xpbmVhcilcIlxuICAgICAgICB9XG4gICAgICApLFxuICAgICAgLyogQF9fUFVSRV9fICovIGMoXG4gICAgICAgIFwicGF0aFwiLFxuICAgICAgICB7XG4gICAgICAgICAgc3R5bGU6IHsgbWl4QmxlbmRNb2RlOiBcIm11bHRpcGx5XCIgfSxcbiAgICAgICAgICBkOiBcIk0yNy40MzQ5IDI4LjYxMzVDMjYuOTcyIDI2Ljg3NjYgMjQuNDU3MSAyNS42MTY3IDIwLjg2NjkgMjUuNzA1M0MxNi42NzE1IDI1Ljc4NzIgMTIuNDk1MiAyNi4zMDEyIDguNDAyNjUgMjcuMjM5NEM1Ljk0MTY1IDI3Ljc3MyAzLjUzMTQ1IDI4LjUyMzQgMS4xOTk1OSAyOS40ODJDMC44MjcwMTQgMjkuNjM2MyAwLjcwMjgyMiAyOS44NDIgMC43NzA1NjIgMzAuMTM2MkwwLjgyMTM2NSAzMC4zMjQ4TDAuODg5MTA3IDMwLjU3MzNDMC44ODkxMDcgMzAuNTk5IDAuOTAzMjIyIDMwLjYyNDcgMC45MDg4NjcgMzAuNjUwNEwwLjk2ODEzNyAzMC44NTA0TDAuOTg1MDcyIDMwLjkwNzZDMS4wMDc2NSAzMC45ODc2IDEuMDMzMDYgMzEuMDcwNCAxLjA1ODQ2IDMxLjE1MDRMMS4wNzgyMiAzMS4yMjE4TDEuMTM3NDkgMzEuNDEwNEMxLjE0NjI5IDMxLjQzMzcgMS4xNTM4MyAzMS40NTc2IDEuMTYwMDcgMzEuNDgxOEMxLjE4ODMgMzEuNTYxOCAxLjIxMzcgMzEuNjQxOCAxLjIzOTEgMzEuNzIxOEMxLjI0Njk1IDMxLjc0MTMgMS4yNTM1NSAzMS43NjE0IDEuMjU4ODYgMzEuNzgxOEMxLjI4MTQ0IDMxLjg0NDYgMS4zMDQwMiAzMS45MDc1IDEuMzIzNzcgMzEuOTcwM0MxLjM0MzUzIDMyLjAzMzIgMS4zNDM1MyAzMi4wMjQ2IDEuMzUyIDMyLjA1MDNMMS40MjgyMSAzMi4yNjc0QzEuNDM2MDMgMzIuMjg1IDEuNDQyNjMgMzIuMzAzMiAxLjQ0Nzk2IDMyLjMyMTdMMS41MjQxNyAzMi41Mjc0TDEuNTU4MDQgMzIuNjEzMUMxLjU3NzggMzIuNjczMSAxLjYwMDM4IDMyLjczMDIgMS42MjI5NiAzMi43ODc0TDEuNjUxMTkgMzIuODU4OEwxLjczODY4IDMzLjA4MTZDMS43Mzg2OCAzMy4xMTAyIDEuNzY0MDkgMzMuMTM4OCAxLjc3NTM4IDMzLjE3MDJMMS44Mzc0NyAzMy4zMjQ0QzEuODUxNTkgMzMuMzUzIDEuODYyODggMzMuMzg0NCAxLjg3Njk5IDMzLjQxM0MxLjkwNTIxIDMzLjQ4NDQgMS45MzYyNiAzMy41NTU5IDEuOTY3MzEgMzMuNjI3M0MxLjk3ODc3IDMzLjY1NzUgMS45OTE5NyAzMy42ODcxIDIuMDA2ODMgMzMuNzE1OEwyLjA2ODkyIDMzLjg2MTVDMi4wODMwMyAzMy44OTU4IDIuMDk5OTcgMzMuOTMwMSAyLjExNDA4IDMzLjk2MTVMMi4xODc0NyAzNC4xMjQ0QzIuMjA3MjIgMzQuMTcwMSAyLjIyNjk4IDM0LjIxMjkgMi4yNDk1NiAzNC4yNTU4QzIuMjcyMTQgMzQuMjk4NiAyLjI5MTkgMzQuMzUwMSAyLjMxNDQ4IDM0LjM5NThMMi4zNjUyOCAzNC41MDQzQzIuMzg1MDQgMzQuNTQ3MiAyLjQwNzYyIDM0LjU4NzIgMi40MjczOCAzNC42M0wyLjQ5Nzk0IDM0Ljc3ODZMMi41NzQxNSAzNC45MjcxQzIuNTkxMDkgMzQuOTY0MyAyLjYxMDg0IDM1LjAwNDMgMi42MzA2IDM1LjA0MTRMMi42ODcwNSAzNS4xNDcxTDIuNzQ2MzIgMzUuMjY3MUwyLjgzOTQ3IDM1LjQ0MTRMMi45MTI4NSAzNS41NzI4QzIuOTI2OTYgMzUuNjA0MiAyLjk0MzkgMzUuNjMyOCAyLjk2MDgzIDM1LjY2NDJMMy4wMzE0IDM1Ljc5MjhMMy4wNzM3NCAzNS44NjdMMy4yMDkyMiAzNi4xMDQxTDMuMjQ4NzMgMzYuMTc1NkwzLjMyNzc2IDM2LjMxMjdDMy4zNDEwMSAzNi4zMzIgMy4zNTMyNSAzNi4zNTIxIDMuMzY0NDYgMzYuMzcyN0wzLjUzMzggMzYuNjU4NEwzLjU0NzkyIDM2LjY4MTJMMy42NDEwNiAzNi44Mjk4TDMuNjY5MjkgMzYuODc4NEMzLjc2ODA4IDM3LjAzMjYgMy44NjY4NiAzNy4xODY5IDMuOTY4NDcgMzcuMzQxMkwzLjk4ODIzIDM3LjM3MjZDNC4wOTU0OSAzNy41MzU0IDQuMjA1NTYgMzcuNjk1NCA0LjMxNTY0IDM3Ljg1NTRDNS4xOTYwNiAzOS4xMTY4IDYuMTkzMTUgNDAuMjkwNiA3LjI5MzQgNDEuMzYwN0w3LjQxMTk0IDQxLjQ3NUw3LjQ0MDE3IDQxLjUwMDdDNy41ODY5NCA0MS42NDM2IDcuNzIyNDIgNDEuNzg2NCA3Ljg4NjEzIDQxLjkxNzhDOC4wMzU3MiA0Mi4wNTQ5IDguMTg4MTQgNDIuMjAzNSA4LjM0MzM4IDQyLjMyMzVMOC4zNzcyNCA0Mi4zNTQ5TDguNTQwOTUgNDIuNDk0OUM4LjU2NDg5IDQyLjUxNDEgOC41OTE1MyA0Mi41Mjk1IDguNjE5OTggNDIuNTQwNkM4LjU1Nzg5IDQyLjUxNDkgOC42NjIzMiA0Mi40MDYzIDguOTgxMjYgNDIuMjgzNUMxMS4xMzY5IDQxLjQ2NDEgMTMuMjQ1OCA0MC41MjM3IDE1LjI5ODEgMzkuNDY2NkMxOC40Mzk1IDM3Ljg5MjUgMTkuNjU2IDM3LjIzMjYgMjMuMDI2MSAzNC43NDQzQzI2LjIzMjUgMzIuMzk4OCAyOC4wNTMgMzAuOTMwNCAyNy40MzQ5IDI4LjYxMzVaXCIsXG4gICAgICAgICAgZmlsbDogXCJ1cmwoI3BhaW50OV9saW5lYXIpXCJcbiAgICAgICAgfVxuICAgICAgKSxcbiAgICAgIC8qIEBfX1BVUkVfXyAqLyBjKFxuICAgICAgICBcInBhdGhcIixcbiAgICAgICAge1xuICAgICAgICAgIHN0eWxlOiB7IG1peEJsZW5kTW9kZTogXCJtdWx0aXBseVwiIH0sXG4gICAgICAgICAgZDogXCJNMjUuNTY2NCA0NS4zNDAzQzI1LjI0MTggNDQuMzQ2MSAyMi42OTU5IDQzLjk4MzMgMTkuNjA4IDQ0LjYxMThDMTguMzYzMyA0NC44NDkxIDE3LjE1NTggNDUuMjU0NiAxNi4wMTc4IDQ1LjgxNzRDMTUuMjcyNiA0Ni4yMTE2IDE1LjE3MSA0Ni40NTczIDE1LjgxNDYgNDYuNjk0NEwxNS45MzMxIDQ2LjczNzNMMTYuMDM0NyA0Ni43NzE2TDE2LjUyODcgNDYuOTM3M0MxNi42OTI0IDQ2Ljk5MjUgMTYuODU4OSA0Ny4wNDM5IDE3LjAyODIgNDcuMDkxNUwxNy4yMDA0IDQ3LjE0M0gxNy4yMzQzQzE4Ljc3NjUgNDcuNTg5NyAyMC4zNTk2IDQ3Ljg3NjggMjEuOTU5MiA0OEMyMi40MjIxIDQ3LjUxMTUgMjYuMDc0NCA0Ni45MDMgMjUuNTY2NCA0NS4zNDAzWlwiLFxuICAgICAgICAgIGZpbGw6IFwidXJsKCNwYWludDEwX2xpbmVhcilcIlxuICAgICAgICB9XG4gICAgICApLFxuICAgICAgLyogQF9fUFVSRV9fICovIGMoXG4gICAgICAgIFwicGF0aFwiLFxuICAgICAgICB7XG4gICAgICAgICAgc3R5bGU6IHsgbWl4QmxlbmRNb2RlOiBcIm11bHRpcGx5XCIgfSxcbiAgICAgICAgICBkOiBcIk0yNC40Njg0IDIuNTY0ODdDMzEuMjQyNSAyLjQ3MDYgMzQuMTIxNCAzLjIwNzY2IDM1LjQyNTQgMy42NzA0N0MzNi4xOTg4IDMuOTU2MTUgMzYuMzk5MiA0LjIxMDQxIDM2LjQ1NTYgNC4zODQ2OEMzNi4zMzQzIDMuOTM5MDEgMzUuODkxMSAzLjM1MzM2IDM0Ljc2MjEgMi43MzYyOEMzMC45ODc4IDAuNzQwMTU5IDI2Ljc1MzIgLTAuMTkzMzQ4IDIyLjUwMDYgMC4wMzMyOTk5QzE4LjI0OCAwLjI1OTk0NyAxNC4xMzM2IDEuNjM4NDMgMTAuNTg3MyA0LjAyNDcxQzE1LjE2NDYgMy4xMzc2MyAxOS44MDg3IDIuNjQ5MjMgMjQuNDY4NCAyLjU2NDg3WlwiLFxuICAgICAgICAgIGZpbGw6IFwidXJsKCNwYWludDExX2xpbmVhcilcIlxuICAgICAgICB9XG4gICAgICApLFxuICAgICAgLyogQF9fUFVSRV9fICovIGMoXG4gICAgICAgIFwicGF0aFwiLFxuICAgICAgICB7XG4gICAgICAgICAgc3R5bGU6IHsgbWl4QmxlbmRNb2RlOiBcIm11bHRpcGx5XCIgfSxcbiAgICAgICAgICBkOiBcIk0yNS41NjY0IDQ1LjM0MDNDMjUuMjQxOCA0NC4zNDYxIDIyLjY5NTkgNDMuOTgzMyAxOS42MDggNDQuNjExOEMxOC4zNjMzIDQ0Ljg0OTEgMTcuMTU1OCA0NS4yNTQ2IDE2LjAxNzggNDUuODE3NEMxNS4yNzI2IDQ2LjIxMTYgMTUuMTcxIDQ2LjQ1NzMgMTUuODE0NiA0Ni42OTQ0TDE1LjkzMzEgNDYuNzM3M0wxNi4wMzQ3IDQ2Ljc3MTZMMTYuNTI4NyA0Ni45MzczQzE2LjY5MjQgNDYuOTkyNSAxNi44NTg5IDQ3LjA0MzkgMTcuMDI4MiA0Ny4wOTE1TDE3LjIwMDQgNDcuMTQzSDE3LjIzNDNDMTguNzc2NSA0Ny41ODk3IDIwLjM1OTYgNDcuODc2OCAyMS45NTkyIDQ4QzIyLjQyMjEgNDcuNTExNSAyNi4wNzQ0IDQ2LjkwMyAyNS41NjY0IDQ1LjM0MDNaXCIsXG4gICAgICAgICAgZmlsbDogXCJ1cmwoI3BhaW50MTJfbGluZWFyKVwiXG4gICAgICAgIH1cbiAgICAgICksXG4gICAgICAvKiBAX19QVVJFX18gKi8gYyhcbiAgICAgICAgXCJwYXRoXCIsXG4gICAgICAgIHtcbiAgICAgICAgICBkOiBcIk0yNC40Njg0IDIuNTY0ODdDMzEuMjQyNSAyLjQ3MDYgMzQuMTIxNCAzLjIwNzY2IDM1LjQyNTQgMy42NzA0N0MzNi4xOTg4IDMuOTU2MTUgMzYuMzk5MiA0LjIxMDQxIDM2LjQ1NTYgNC4zODQ2OEMzNi4zMzQzIDMuOTM5MDEgMzUuODkxMSAzLjM1MzM2IDM0Ljc2MjEgMi43MzYyOEMzMC45ODc4IDAuNzQwMTU5IDI2Ljc1MzIgLTAuMTkzMzQ4IDIyLjUwMDYgMC4wMzMyOTk5QzE4LjI0OCAwLjI1OTk0NyAxNC4xMzM2IDEuNjM4NDMgMTAuNTg3MyA0LjAyNDcxQzE1LjE2NDYgMy4xMzc2MyAxOS44MDg3IDIuNjQ5MjMgMjQuNDY4NCAyLjU2NDg3WlwiLFxuICAgICAgICAgIGZpbGw6IFwidXJsKCNwYWludDEzX2xpbmVhcilcIlxuICAgICAgICB9XG4gICAgICApLFxuICAgICAgLyogQF9fUFVSRV9fICovIGMoXG4gICAgICAgIFwicGF0aFwiLFxuICAgICAgICB7XG4gICAgICAgICAgc3R5bGU6IHsgbWl4QmxlbmRNb2RlOiBcIm11bHRpcGx5XCIgfSxcbiAgICAgICAgICBkOiBcIk01LjIyNDQ2IDIxLjA4NThDOS4zOTYxNCAxOS4yNDYgMTMuNzcxIDE3LjE5MTkgMTYuNjMwMyAxNS44MjYzTDE3LjA5ODggMTUuNjAwNkM5LjAyMzU3IDE2LjY3NDggMy42Mjk3NCAxNy40NTQ3IDAuODM1NDQ4IDE3LjY4MDRDMC44Mjc1NDQgMTcuNzA1OCAwLjgyMDk1MSAxNy43MzE1IDAuODE1NjkzIDE3Ljc1NzZDMC44MDc3OTMgMTcuNzgxOSAwLjgwMTE5NiAxNy44MDY3IDAuNzk1OTMzIDE3LjgzMThDMC43ODE4MjEgMTcuODgwNCAwLjc3MDUyOSAxNy45MjkgMC43NTkyMzkgMTcuOTc3NVYxOC4wMTc1QzAuNzU5MjM5IDE4LjA2OSAwLjczMzgzNyAxOC4xMjA0IDAuNzE5NzI0IDE4LjE3MThWMTguMjE0N1YxOC4yMzE4TDAuNjc3Mzg4IDE4LjQwNjFWMTguNDUxOEMwLjY3NzM4OCAxOC41MDYxIDAuNjUxOTg0IDE4LjU2MDMgMC42NDA2OTQgMTguNjE0NlYxOC42NTE3QzAuNjA5NjQ2IDE4Ljc4NiAwLjU4MTQyMiAxOC45MjAzIDAuNTUzMTk3IDE5LjA1NDZWMTkuMDg2TDAuNTE5MzI4IDE5LjI1NDVWMTkuMzAzMUMwLjUxOTMyOCAxOS4zNTQ1IDAuNDk5NTcgMTkuNDA4OCAwLjQ4ODI4IDE5LjQ2MDJWMTkuNTA1OUwwLjQ1NDQxMSAxOS43MDAyTDAuNDIwNTM4IDE5LjkwODhWMTkuOTQwMkMwLjQyMDUzOCAxOS45OTczIDAuNDAwNzgzIDIwLjA1MTYgMC4zOTIzMTUgMjAuMTA4N1YyMC4xNjNMMC4zNjY5MSAyMC4zMTQ0QzAuMzY1NjY4IDIwLjMzMjUgMC4zNjU2NjggMjAuMzUwNiAwLjM2NjkxIDIwLjM2ODdDMC4zNjY5MSAyMC40Mjg3IDAuMzQ3MTU0IDIwLjQ4NTggMC4zMzg2ODcgMjAuNTQ1OFYyMC41Njg3QzAuMzM4Njg3IDIwLjYzNzMgMC4zMTg5MjggMjAuNzA4NyAwLjMxMDQ2IDIwLjc3NzJWMjAuODA4N0MwLjMxMDQ2IDIwLjg2MjkgMC4yOTM1MjQgMjAuOTIwMSAwLjI4Nzg3OSAyMC45NzcyVjIxLjAzNDNMMC4yNzA5NDUgMjEuMTg1OEMwLjI2OTU2IDIxLjIwNDggMC4yNjk1NiAyMS4yMjM5IDAuMjcwOTQ1IDIxLjI0MjlDMC4yNzA5NDUgMjEuMyAwLjI3MDk0NyAyMS4zNTQzIDAuMjUxMTkgMjEuNDExNVYyMS40NDU3QzAuMjUxMTkgMjEuNTE3MiAwLjIzNzA3NyAyMS41ODU3IDAuMjI4NjA5IDIxLjY1NDNWMjEuNjhDMC4yMjg2MDkgMjEuNzQgMC4yMjg2MDggMjEuOCAwLjIxNDQ5NiAyMS44NTcxQzAuMjEzMTAxIDIxLjg3NzEgMC4yMTMxMDEgMjEuODk3MSAwLjIxNDQ5NiAyMS45MTcxQzAuMjE0NDk2IDIxLjk2NTcgMC4yMTQ0OTUgMjIuMDE3MSAwLjIwMDM4MiAyMi4wNjU3QzAuMTg2MjcgMjIuMTE0MiAwLjIwMDM4MiAyMi4xMDg1IDAuMjAwMzgyIDIyLjEyODVDMC4yMDAzODIgMjIuMTQ4NSAwLjIwMDM4MiAyMi4yMzQyIDAuMjAwMzgyIDIyLjI4NTZDMC4yMDAzODIgMjIuMzM3MSAwLjIwMDM4MiAyMi4zMTcxIDAuMjAwMzgyIDIyLjMzNDJDMC4yMDAzODIgMjIuNDAyOCAwLjIwMDM4MiAyMi40NzEzIDAuMjAwMzgyIDIyLjU0MjhWMjIuNTU5OVYyMi43NDg0QzAuMTk4OTc5IDIyLjc2ODQgMC4xOTg5NzkgMjIuNzg4NSAwLjIwMDM4MiAyMi44MDg0VjIyLjk1N0MwLjIwMTc4OSAyMi45Nzc5IDAuMjAxNzg5IDIyLjk5ODkgMC4yMDAzODIgMjMuMDE5OUMwLjIwMDM4MiAyMy4wNzQxIDAuMjAwMzgyIDIzLjEyNTYgMC4yMDAzODIgMjMuMTc3VjIzLjIyODRWMjMuNDM5OEMwLjIwMDM4MiAyMy41MDU1IDAuMjAwMzgyIDIzLjU3NDEgMC4yMDAzODIgMjMuNjQyNlYyMy42ODgzQzAuMjAwMzgyIDIzLjc4MjYgMC4yMDAzODIgMjMuODc5OCAwLjIwMDM4MiAyMy45NzRDMC4wMDU2Mjg0NyAyMy41NzQxIDEuNTIxMzIgMjIuNzE3IDUuMjI0NDYgMjEuMDg1OFpcIixcbiAgICAgICAgICBmaWxsOiBcInVybCgjcGFpbnQxNF9saW5lYXIpXCJcbiAgICAgICAgfVxuICAgICAgKSxcbiAgICAgIC8qIEBfX1BVUkVfXyAqLyBjKFxuICAgICAgICBcInBhdGhcIixcbiAgICAgICAge1xuICAgICAgICAgIHN0eWxlOiB7IG1peEJsZW5kTW9kZTogXCJtdWx0aXBseVwiIH0sXG4gICAgICAgICAgZDogXCJNNDMuMjYzNSAzMi4xOTAyQzQyLjY1MSAzMi4xOTAyIDM5LjEyMjkgMzIuMjczMSAzMy40MzI3IDMyLjgyNzNDMjUuOTc1NiAzMy41NTAxIDE1LjExNzQgMzUuMTM1NiAxMC43MjU1IDM1Ljg5MjdDNy45OTYxNCAzNi4zNjQxIDUuNDUzMDUgMzYuOTE1NSAzLjkxNzYgMzcuMjY0QzMuOTg1MzQgMzcuMzY5NyA0LjA1NTkxIDM3LjQ3NTQgNC4xMjY0NyAzNy41NzgyTDQuMTc0NDUgMzcuNjQ5N0w0LjI2NDc4IDM3Ljc4MTFMNC4zMTU1OCAzNy44NTUzTDQuNDA4NzIgMzcuOTg2OEw0LjQzOTc3IDM4LjAzMjVMNC42MzczNSAzOC4zMDM5TDQuNjc2ODYgMzguMzYxTDQuNzc1NjUgMzguNDkyNEw0LjgyMzYzIDM4LjU1ODFMNC45MjUyNCAzOC42OTI0QzQuOTI1MjQgMzguNzA5NSA0Ljk1MDY1IDM4LjcyMzggNC45NjE5NCAzOC43MzgxTDUuMTkwNTYgMzkuMDIzOEw1LjIwNDY3IDM5LjAzODFMNS4zMTQ3NSAzOS4xNzgxTDUuMzU3MDkgMzkuMjMyM0M1LjM5Mzc4IDM5LjI3ODEgNS40MzA0NyAzOS4zMjM4IDUuNDY5OTkgMzkuMzY2Nkw1LjUwMzg2IDM5LjQwOTVDNS42MjgwNSAzOS41NjA5IDUuNzU1MDYgMzkuNjk1MiA1Ljg4MjA4IDM5Ljg1OEw1LjkxMzEyIDM5Ljg5NTFMNi4wMzczMiA0MC4wMzUxTDYuMDY1NTQgNDAuMDY2NUM2LjIwMTAyIDQwLjIyMDggNi4zMzkzMiA0MC4zNzIyIDYuNDgwNDUgNDAuNTIwOEw2LjQ5NDU2IDQwLjUzNzlMNi42MzAwNCA0MC42ODM2TDYuNjUyNjIgNDAuNzA2NUM2Ljg0NzM4IDQwLjkwOTMgNy4wNDQ5NSA0MS4xMTIxIDcuMjQ4MTcgNDEuMzA5M0w3LjI2MjI5IDQxLjMyMzZDNy40NjgzMyA0MS41MjM1IDcuNjc3MiA0MS43MjA3IDcuODg4ODkgNDEuOTEyMUM4LjEwMzQgNDIuMTA5MiA4LjMyMDczIDQyLjMwMDYgOC41NDM3MSA0Mi40ODM0QzguNjYyMjUgNDIuNTg2MyA4LjkyMTkyIDQyLjYwMzQgOS43MzQ4MSA0Mi40NDkxQzExLjQyODMgNDIuMTIwNiAxNy44Mjk4IDQwLjk5NzkgMjQuOTExNSA0MC4wMTUxQzI5LjgxMjkgMzkuMzcxIDM0Ljc0NTcgMzkuMDAxIDM5LjY4NzQgMzguOTA2N0M0MC45MzIxIDM4LjkwNjcgNDIuMTExOSAzOS4xOTIzIDQxLjYzNzcgMzkuODAwOUM0MS42OTEzIDM5LjczOCA0MS43NDIxIDM5LjY3NTIgNDEuNzk1OCAzOS42MTUyVjM5LjYwMDlMNDEuOTQ4MiAzOS40MThMNDIuMDk3OCAzOS4yMzgxTDQyLjExNDcgMzkuMjE1Mkw0Mi4yNjQzIDM5LjAyOTVDNDIuNDQ3OCAzOC43OTUzIDQyLjYyODQgMzguNTU4MSA0Mi44MDM0IDM4LjMxODJDNDIuOTc4NCAzOC4wNzUzIDQzLjE1MDYgMzcuODMyNSA0My4zMTcxIDM3LjU4NEw0My40NTI2IDM3LjM4MTFWMzcuMzYxMUw0My41ODI0IDM3LjE2MTFWMzcuMTQ0TDQzLjcxMjMgMzYuOTM4M0M0NC4wNzkyIDM2LjM1MjcgNDQuNDIzNSAzNS43NDk5IDQ0LjczOTcgMzUuMTMyOEM0NC43NzkyIDM1LjA1ODUgNDQuODE1OSAzNC45ODQyIDQ0Ljg1MjYgMzQuOTA3MUw0NC45NjI2IDM0LjY4MTRDNDUuMjY3NSAzNC4wNDkxIDQ1LjU0NSAzMy40MDU0IDQ1Ljc5NTMgMzIuNzUwMkM0NS45OTU3IDMyLjM5ODggNDUuNzEwNiAzMi4xOTAyIDQzLjI2MzUgMzIuMTkwMlpcIixcbiAgICAgICAgICBmaWxsOiBcInVybCgjcGFpbnQxNV9saW5lYXIpXCJcbiAgICAgICAgfVxuICAgICAgKSxcbiAgICAgIC8qIEBfX1BVUkVfXyAqLyBjKFxuICAgICAgICBcInBhdGhcIixcbiAgICAgICAge1xuICAgICAgICAgIGQ6IFwiTTYwLjMzNjkgMzQuMTE4NkM1OS45NzcyIDM0LjA5NTYgNTkuNjE3IDM0LjE1NSA1OS4yODMyIDM0LjI5MjVDNTguOTQ5NCAzNC40MzAxIDU4LjY1MDYgMzQuNjQyMSA1OC40MDkxIDM0LjkxMjhDNTcuOTY2OSAzNS40NDIzIDU3Ljc0NDkgMzYuMTc2NSA1Ny43NDMgMzcuMTE1NUM1Ny43Mzg2IDM3LjUyODcgNTcuNzkyOCAzNy45NDA1IDU3LjkwMzkgMzguMzM4MkM1Ny45OTYxIDM4LjY4MzMgNTguMTU2NSAzOS4wMDU5IDU4LjM3NTIgMzkuMjg2N0M1OC41ODQxIDM5LjU1IDU4Ljg1MDggMzkuNzYwMyA1OS4xNTQyIDM5LjkwMDlDNTkuNDk2NSA0MC4wNTY0IDU5Ljg2ODcgNDAuMTMyNSA2MC4yNDM3IDQwLjEyMzdDNjAuNDY4IDQwLjEyNDkgNjAuNjkyMiA0MC4xMTQ0IDYwLjkxNTUgNDAuMDkyM0M2MS4wNjY5IDQwLjA3OSA2MS4yMTcgNDAuMDUzMiA2MS4zNjQzIDQwLjAxNTFWMzcuMDQ0SDYyLjg0ODlWNDEuMDE3OUM2Mi41MTA3IDQxLjEzMiA2Mi4xNjQ0IDQxLjIxOTkgNjEuODEzIDQxLjI4MDdDNjEuMjU0MiA0MS4zODE5IDYwLjY4NzIgNDEuNDI5NyA2MC4xMTk1IDQxLjQyMzZDNTkuNTY4NSA0MS40MzA4IDU5LjAyMSA0MS4zMzQgNTguNTA1MSA0MS4xMzc5QzU4LjAzMzMgNDAuOTU3MSA1Ny42MDc4IDQwLjY3MSA1Ny4yNjAzIDQwLjMwMDhDNTYuOTA1IDM5LjkxMjUgNTYuNjMzOSAzOS40NTMyIDU2LjQ2NDQgMzguOTUyNEM1Ni4yNjY2IDM4LjM2MTEgNTYuMTcxMSAzNy43Mzk2IDU2LjE4MjEgMzcuMTE1NUM1Ni4xNzA3IDM2LjQ4ODYgNTYuMjc3IDM1Ljg2NTIgNTYuNDk1NCAzNS4yNzg1QzU2LjY4MTYgMzQuNzcyNCA1Ni45NyAzNC4zMTEyIDU3LjM0MjIgMzMuOTI0NEM1Ny43MDA0IDMzLjU0OTEgNTguMTM0NyAzMy4yNTY3IDU4LjYxNTEgMzMuMDY3M0M1OS4xMTEzIDMyLjg3NDUgNTkuNjM4OSAzMi43Nzc2IDYwLjE3MDMgMzIuNzgxNkM2MC41MDc4IDMyLjc3ODQgNjAuODQ0OSAzMi44MDQyIDYxLjE3OCAzMi44NTg4QzYxLjQzNSAzMi45MDEzIDYxLjY4OTQgMzIuOTU4NSA2MS45NDAxIDMzLjAzMDJDNjIuMTIwNCAzMy4wODI3IDYyLjI5NiAzMy4xNTA1IDYyLjQ2NSAzMy4yMzNMNjIuNzQ3MyAzMy4zOTAxTDYyLjI5ODUgMzQuNjE4NkM2Mi4wMjM1IDM0LjQ1NzkgNjEuNzI4MiAzNC4zMzU4IDYxLjQyMDcgMzQuMjU1OEM2MS4wNjcyIDM0LjE2MDYgNjAuNzAyNiAzNC4xMTQ1IDYwLjMzNjkgMzQuMTE4NlpcIixcbiAgICAgICAgICBmaWxsOiBcIiMyMzFGMjBcIlxuICAgICAgICB9XG4gICAgICApLFxuICAgICAgLyogQF9fUFVSRV9fICovIGMoXG4gICAgICAgIFwicGF0aFwiLFxuICAgICAgICB7XG4gICAgICAgICAgZDogXCJNNjguNTU2MSAzMi45MDE2QzY5LjczNTkgMzIuOTAxNiA3MC42MzYzIDMzLjEyMTYgNzEuMjYyOSAzMy41NTg3QzcxLjg4OTUgMzMuOTk1OCA3Mi4xOTk5IDM0LjY2NDMgNzIuMTk5OSAzNS41NTg1QzcyLjE5OTkgMzYuNjgwMyA3MS42NTMzIDM3LjQ0MjEgNzAuNTYwMSAzNy44NDM5QzcwLjcwODcgMzguMDM0NCA3MC44NzgxIDM4LjI1NzIgNzEuMDY4MSAzOC41MTI0QzcxLjI1NzIgMzguNzc1MyA3MS40NDkyIDM5LjA1ODEgNzEuNjMyNiAzOS4zNjk1QzcxLjgxNjEgMzkuNjgwOSA3Mi4wMTkzIDM5Ljk5MjMgNzIuMTk3MSA0MC4zMTIzQzcyLjM3NDkgNDAuNjMyMiA3Mi41Mzg2IDQwLjk1MjIgNzIuNjc5OCA0MS4yNjM2SDcxLjAxNzNDNzAuODY4NyA0MC45NzYgNzAuNzA3OCA0MC42OTAzIDcwLjUzNDcgNDAuNDA2NUM3MC4zNjE2IDQwLjEyMjggNzAuMTg2NiAzOS44MzcxIDcwLjAwOTcgMzkuNTQ5NUM2OS44MzE5IDM5LjI2MzggNjkuNjU2OSAzOS4wMTUyIDY5LjQ4NDcgMzguNzc1M0M2OS4zMTI1IDM4LjUzNTMgNjkuMTUxNiAzOC4zMTUzIDY5LjAwMiAzOC4xMjM5QzY4Ljg5MiAzOC4xMjM5IDY4Ljc5NiAzOC4xMjM5IDY4LjcxOTggMzguMTIzOUg2Ny43NzQyVjQxLjI1NzlINjYuMzAzN1YzMy4xMDQ0QzY2LjY4NDQgMzMuMDI0MyA2Ny4wNzAxIDMyLjk3MDggNjcuNDU4MSAzMi45NDQ1QzY3Ljg2NzQgMzIuOTE1OSA2OC4yMzQzIDMyLjkwMTYgNjguNTU2MSAzMi45MDE2Wk02OC42NjA1IDM0LjIwNDNDNjguMzQ2MyAzNC4yMDQzIDY4LjA1NTYgMzQuMjE1OCA2Ny43ODg0IDM0LjIzODZWMzYuOTEyNkg2OC40NDg4QzY4Ljc2ODggMzYuOTE1MyA2OS4wODg1IDM2Ljg5NTMgNjkuNDA1NyAzNi44NTI2QzY5LjY0NiAzNi44MjMxIDY5Ljg3OTIgMzYuNzUwNiA3MC4wOTQzIDM2LjYzODRDNzAuMjcwNiAzNi41NDMzIDcwLjQxNTcgMzYuMzk4MyA3MC41MTIxIDM2LjIyMTNDNzAuNjEzOCAzNi4wMTM5IDcwLjY2MjMgMzUuNzg0IDcwLjY1MzIgMzUuNTUyOEM3MC42NjEyIDM1LjMyODkgNzAuNjEyNiAzNS4xMDY3IDcwLjUxMjEgMzQuOTA3MUM3MC40MTg1IDM0LjczMTggNzAuMjc3NSAzNC41ODcxIDcwLjEwNTYgMzQuNDlDNjkuOTEwMSAzNC4zODAyIDY5LjY5NzEgMzQuMzA1OCA2OS40NzYyIDM0LjI3QzY5LjIwNjkgMzQuMjIyOCA2OC45MzM4IDM0LjIwMDggNjguNjYwNSAzNC4yMDQzWlwiLFxuICAgICAgICAgIGZpbGw6IFwiIzIzMUYyMFwiXG4gICAgICAgIH1cbiAgICAgICksXG4gICAgICAvKiBAX19QVVJFX18gKi8gYyhcbiAgICAgICAgXCJwYXRoXCIsXG4gICAgICAgIHtcbiAgICAgICAgICBkOiBcIk04Mi45MTQyIDM3LjExNTVDODIuOTI1OCAzNy43NTQ0IDgyLjgxOTUgMzguMzkgODIuNjAxIDM4Ljk4OTVDODIuNDE0NyAzOS40OTU1IDgyLjEyNjMgMzkuOTU2NyA4MS43NTQyIDQwLjM0MzdDODEuMzk4NiA0MC43MDQ1IDgwLjk3MDEgNDAuOTgzMiA4MC40OTgyIDQxLjE2MDdDNzkuNTA2NCA0MS41MjY1IDc4LjQxOSA0MS41MjY1IDc3LjQyNzMgNDEuMTYwN0M3Ni45NTMzIDQwLjk4NCA3Ni41MjI4IDQwLjcwNTIgNzYuMTY1NiA0MC4zNDM3Qzc1Ljc5NDcgMzkuOTU1OCA3NS41MDY1IDM5LjQ5NDkgNzUuMzE4OSAzOC45ODk1Qzc1LjA5NjcgMzguMzkwOCA3NC45ODg1IDM3Ljc1NDkgNzQuOTk5OSAzNy4xMTU1Qzc0Ljk4OCAzNi40Nzc4IDc1LjA5NjIgMzUuODQzNyA3NS4zMTg5IDM1LjI0NzFDNzUuNTEyMiAzNC43NCA3NS44MDczIDM0LjI3ODkgNzYuMTg1NCAzMy44OTI5Qzc2LjU0NTYgMzMuNTMxIDc2Ljk3NzUgMzMuMjUwNiA3Ny40NTI3IDMzLjA3MDJDNzguNDM0NyAzMi43MDQ1IDc5LjUxMzMgMzIuNzA0NSA4MC40OTUzIDMzLjA3MDJDODAuOTY4MiAzMy4yNDg3IDgxLjM5NjggMzMuNTI5NSA4MS43NTE0IDMzLjg5MjlDODIuMTIxIDM0LjI4MTkgODIuNDA5IDM0Ljc0MjUgODIuNTk4MSAzNS4yNDcxQzgyLjgxOTggMzUuODQzOSA4Mi45MjcxIDM2LjQ3OCA4Mi45MTQyIDM3LjExNTVaTTc2LjUzNTQgMzcuMTE1NUM3Ni41Mjk5IDM3LjUzMjcgNzYuNTg1IDM3Ljk0ODYgNzYuNjk5MSAzOC4zNDk2Qzc2Ljc5NTUgMzguNjkyNSA3Ni45NTc2IDM5LjAxMjggNzcuMTc2MSAzOS4yOTI0Qzc3LjM4MTYgMzkuNTQ5MyA3Ny42NDIyIDM5Ljc1NTQgNzcuOTM4MiAzOS44OTUyQzc4LjI1NTkgNDAuMDQyMyA3OC42MDIxIDQwLjExNTUgNzguOTUxNCA0MC4xMDk0Qzc5LjI5NyA0MC4xMTQ1IDc5LjYzOTQgNDAuMDQxMyA3OS45NTM0IDM5Ljg5NTJDODAuMjQ5NCAzOS43NTU0IDgwLjUxIDM5LjU0OTMgODAuNzE1NSAzOS4yOTI0QzgwLjkzNCAzOS4wMTI4IDgxLjA5NjEgMzguNjkyNSA4MS4xOTI1IDM4LjM0OTZDODEuNDEwOCAzNy41NDE3IDgxLjQxMDggMzYuNjg5MiA4MS4xOTI1IDM1Ljg4MTNDODEuMDk2MSAzNS41Mzg0IDgwLjkzNCAzNS4yMTgxIDgwLjcxNTUgMzQuOTM4NkM4MC41MSAzNC42ODE3IDgwLjI0OTQgMzQuNDc1NSA3OS45NTM0IDM0LjMzNThDNzkuNjQwMSAzNC4xODczIDc5LjI5NzQgMzQuMTEzIDc4Ljk1MTQgMzQuMTE4NkM3OC42MDE4IDM0LjExMjEgNzguMjU1MiAzNC4xODY0IDc3LjkzODIgMzQuMzM1OEM3Ny42NDE0IDM0LjQ3NjcgNzcuMzgwNiAzNC42ODQ5IDc3LjE3NjEgMzQuOTQ0M0M3Ni45NTk4IDM1LjIyNTMgNzYuNzk3OSAzNS41NDUxIDc2LjY5OTEgMzUuODg3Qzc2LjU4NDggMzYuMjg2MSA3Ni41Mjk3IDM2LjcgNzYuNTM1NCAzNy4xMTU1WlwiLFxuICAgICAgICAgIGZpbGw6IFwiIzIzMUYyMFwiXG4gICAgICAgIH1cbiAgICAgICksXG4gICAgICAvKiBAX19QVVJFX18gKi8gYyhcbiAgICAgICAgXCJwYXRoXCIsXG4gICAgICAgIHtcbiAgICAgICAgICBkOiBcIk04OS4xMzIyIDQxLjQzNUM4OC42NDE1IDQxLjQ0NzQgODguMTUyOSA0MS4zNjUgODcuNjkyNyA0MS4xOTIxQzg3LjMxMjggNDEuMDQzMSA4Ni45NzE5IDQwLjgwNzUgODYuNjk2NCA0MC41MDM2Qzg2LjQzMDkgNDAuMjA0IDg2LjIzMTcgMzkuODUwNSA4Ni4xMTIxIDM5LjQ2NjZDODUuOTgyOSAzOS4wNDEgODUuOTE5MiAzOC41OTc3IDg1LjkyMyAzOC4xNTI1VjMzLjAwMTZIODcuNDIxOFYzOC4wMjM5Qzg3LjQxNTcgMzguMzQ5MyA4Ny40NTc2IDM4LjY3MzggODcuNTQ2IDM4Ljk4NjdDODcuNjE0IDM5LjIyNjkgODcuNzM0NiAzOS40NDg1IDg3Ljg5ODggMzkuNjM1MkM4OC4wNDc3IDM5LjgwMDggODguMjMzNSAzOS45MjgxIDg4LjQ0MDcgNDAuMDA2NUM4OC42NjYgNDAuMDg4NCA4OC45MDQyIDQwLjEyOCA4OS4xNDM1IDQwLjEyMzdDODkuMzgzOCA0MC4xMjc4IDg5LjYyMjggNDAuMDg4MSA4OS44NDkxIDQwLjAwNjVDOTAuMDU5MSAzOS45Mjg2IDkwLjI0NzcgMzkuODAxMyA5MC4zOTk1IDM5LjYzNTJDOTAuNTYzNSAzOS40NDM4IDkwLjY4MjMgMzkuMjE3MSA5MC43NDY3IDM4Ljk3MjRDOTAuODM1MSAzOC42NTk1IDkwLjg3NjkgMzguMzM1IDkwLjg3MDkgMzguMDA5NlYzMy4wMDE2SDkyLjM2NjhWMzguMTQzOUM5Mi4zNzE3IDM4LjU4OTcgOTIuMzA2IDM5LjAzMzMgOTIuMTcyMSAzOS40NThDOTIuMDUxNSAzOS44NDIxIDkxLjg1MTQgNDAuMTk1NiA5MS41ODUgNDAuNDk1MUM5MS4zMDUzIDQwLjgwMDUgOTAuOTU5NCA0MS4wMzYyIDkwLjU3NDUgNDEuMTgzNkM5MC4xMTM0IDQxLjM1NzUgODkuNjI0MyA0MS40NDI4IDg5LjEzMjIgNDEuNDM1WlwiLFxuICAgICAgICAgIGZpbGw6IFwiIzIzMUYyMFwiXG4gICAgICAgIH1cbiAgICAgICksXG4gICAgICAvKiBAX19QVVJFX18gKi8gYyhcbiAgICAgICAgXCJwYXRoXCIsXG4gICAgICAgIHtcbiAgICAgICAgICBkOiBcIk05OC4yMzc3IDMyLjkwMTZDOTkuNDIzMSAzMi45MDE2IDEwMC4zMzMgMzMuMTIwNiAxMDAuOTY3IDMzLjU1ODdDMTAxLjYwMSAzMy45OTY3IDEwMS45MTcgMzQuNjgxNCAxMDEuOTE1IDM1LjYxMjhDMTAxLjkyNyAzNi4wNDIyIDEwMS44NCAzNi40Njg2IDEwMS42NjEgMzYuODU4M0MxMDEuNDk1IDM3LjIwNSAxMDEuMjQxIDM3LjUwMDcgMTAwLjkyNSAzNy43MTU0QzEwMC41NjQgMzcuOTQ5MSAxMDAuMTY0IDM4LjExMjggOTkuNzQ0OSAzOC4xOTgyQzk5LjIyMTIgMzguMzA3MSA5OC42ODc1IDM4LjM1ODkgOTguMTUzIDM4LjM1MjVIOTcuNDEwN1Y0MS4yNjY0SDk1LjkyNlYzMy4xMDQ0Qzk2LjMwNDUgMzMuMDIyMSA5Ni42ODg1IDMyLjk2ODYgOTcuMDc0OCAzMi45NDQ1Qzk3LjQ5NTMgMzIuOTE1OSA5Ny44ODIgMzIuOTAxNiA5OC4yMzc3IDMyLjkwMTZaTTk4LjM0MjEgMzQuMjA0M0M5Ny45NjU4IDM0LjIwNDMgOTcuNjU1MyAzNC4yMTU4IDk3LjQxMDcgMzQuMjM4NlYzNy4wNTU1SDk4LjEzMDRDOTguNjk2NSAzNy4wODUgOTkuMjYxNyAzNi45ODEzIDk5Ljc4MTYgMzYuNzUyNkMxMDAuMTU4IDM2LjU1MDcgMTAwLjM0NiAzNi4xNjk4IDEwMC4zNDYgMzUuNjA5OUMxMDAuMzU0IDM1LjM3MzggMTAwLjMwMSAzNS4xMzk2IDEwMC4xOTQgMzQuOTNDMTAwLjA5NSAzNC43NDk5IDk5Ljk0ODIgMzQuNjAxNSA5OS43NzAzIDM0LjUwMTRDOTkuNTY5OSAzNC4zOTExIDk5LjM1MjIgMzQuMzE2NiA5OS4xMjY4IDM0LjI4MTVDOTguODY4IDM0LjIzMjMgOTguNjA1NCAzNC4yMDY1IDk4LjM0MjEgMzQuMjA0M1pcIixcbiAgICAgICAgICBmaWxsOiBcIiMyMzFGMjBcIlxuICAgICAgICB9XG4gICAgICApLFxuICAgICAgLyogQF9fUFVSRV9fICovIGUxKFwiZGVmc1wiLCB7IGNoaWxkcmVuOiBbXG4gICAgICAgIC8qIEBfX1BVUkVfXyAqLyBlMShcbiAgICAgICAgICBcImxpbmVhckdyYWRpZW50XCIsXG4gICAgICAgICAge1xuICAgICAgICAgICAgaWQ6IFwicGFpbnQwX2xpbmVhclwiLFxuICAgICAgICAgICAgeDE6IFwiMC43ODc0NzZcIixcbiAgICAgICAgICAgIHkxOiBcIjI3Ljc3MzZcIixcbiAgICAgICAgICAgIHgyOiBcIjQ3LjQ4ODhcIixcbiAgICAgICAgICAgIHkyOiBcIjI3Ljc3MzZcIixcbiAgICAgICAgICAgIGdyYWRpZW50VW5pdHM6IFwidXNlclNwYWNlT25Vc2VcIixcbiAgICAgICAgICAgIGNoaWxkcmVuOiBbXG4gICAgICAgICAgICAgIC8qIEBfX1BVUkVfXyAqLyBjKFwic3RvcFwiLCB7IG9mZnNldDogXCIwLjAzXCIsIHN0b3BDb2xvcjogXCIjRTlGN0ZFXCIsIHN0b3BPcGFjaXR5OiBcIjAuNFwiIH0pLFxuICAgICAgICAgICAgICAvKiBAX19QVVJFX18gKi8gYyhcInN0b3BcIiwgeyBvZmZzZXQ6IFwiMC4zMVwiLCBzdG9wQ29sb3I6IFwiIzVFQTFEN1wiIH0pLFxuICAgICAgICAgICAgICAvKiBAX19QVVJFX18gKi8gYyhcInN0b3BcIiwgeyBvZmZzZXQ6IFwiMC41NVwiLCBzdG9wQ29sb3I6IFwiIzREQTNEQVwiIH0pLFxuICAgICAgICAgICAgICAvKiBAX19QVVJFX18gKi8gYyhcInN0b3BcIiwgeyBvZmZzZXQ6IFwiMC44OVwiLCBzdG9wQ29sb3I6IFwiIzY0NUZBQVwiIH0pLFxuICAgICAgICAgICAgICAvKiBAX19QVVJFX18gKi8gYyhcInN0b3BcIiwgeyBvZmZzZXQ6IFwiMVwiLCBzdG9wQ29sb3I6IFwiIzQxNDA5OVwiIH0pXG4gICAgICAgICAgICBdXG4gICAgICAgICAgfVxuICAgICAgICApLFxuICAgICAgICAvKiBAX19QVVJFX18gKi8gZTEoXG4gICAgICAgICAgXCJsaW5lYXJHcmFkaWVudFwiLFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGlkOiBcInBhaW50MV9saW5lYXJcIixcbiAgICAgICAgICAgIHgxOiBcIjYuMTkyNTFcIixcbiAgICAgICAgICAgIHkxOiBcIjIyLjMwNTdcIixcbiAgICAgICAgICAgIHgyOiBcIjI5LjQxNjlcIixcbiAgICAgICAgICAgIHkyOiBcIi0wLjYzOTczMlwiLFxuICAgICAgICAgICAgZ3JhZGllbnRVbml0czogXCJ1c2VyU3BhY2VPblVzZVwiLFxuICAgICAgICAgICAgY2hpbGRyZW46IFtcbiAgICAgICAgICAgICAgLyogQF9fUFVSRV9fICovIGMoXCJzdG9wXCIsIHsgc3RvcENvbG9yOiBcIiNGRkY3OTVcIiwgc3RvcE9wYWNpdHk6IFwiMC4zXCIgfSksXG4gICAgICAgICAgICAgIC8qIEBfX1BVUkVfXyAqLyBjKFwic3RvcFwiLCB7IG9mZnNldDogXCIwLjM1XCIsIHN0b3BDb2xvcjogXCIjRjNDMjA2XCIgfSksXG4gICAgICAgICAgICAgIC8qIEBfX1BVUkVfXyAqLyBjKFwic3RvcFwiLCB7IG9mZnNldDogXCIwLjY1XCIsIHN0b3BDb2xvcjogXCIjRkZDMjBFXCIgfSksXG4gICAgICAgICAgICAgIC8qIEBfX1BVUkVfXyAqLyBjKFwic3RvcFwiLCB7IG9mZnNldDogXCIwLjk1XCIsIHN0b3BDb2xvcjogXCIjRjk5QjFDXCIgfSksXG4gICAgICAgICAgICAgIC8qIEBfX1BVUkVfXyAqLyBjKFwic3RvcFwiLCB7IG9mZnNldDogXCIxXCIsIHN0b3BDb2xvcjogXCIjRjY4OTFGXCIgfSlcbiAgICAgICAgICAgIF1cbiAgICAgICAgICB9XG4gICAgICAgICksXG4gICAgICAgIC8qIEBfX1BVUkVfXyAqLyBlMShcbiAgICAgICAgICBcImxpbmVhckdyYWRpZW50XCIsXG4gICAgICAgICAge1xuICAgICAgICAgICAgaWQ6IFwicGFpbnQyX2xpbmVhclwiLFxuICAgICAgICAgICAgeDE6IFwiMC42OTQyODNcIixcbiAgICAgICAgICAgIHkxOiBcIjE4LjA1MTdcIixcbiAgICAgICAgICAgIHgyOiBcIjQ2LjMwOVwiLFxuICAgICAgICAgICAgeTI6IFwiMTguMDUxN1wiLFxuICAgICAgICAgICAgZ3JhZGllbnRVbml0czogXCJ1c2VyU3BhY2VPblVzZVwiLFxuICAgICAgICAgICAgY2hpbGRyZW46IFtcbiAgICAgICAgICAgICAgLyogQF9fUFVSRV9fICovIGMoXCJzdG9wXCIsIHsgc3RvcENvbG9yOiBcIiM5MTJBNzNcIiB9KSxcbiAgICAgICAgICAgICAgLyogQF9fUFVSRV9fICovIGMoXCJzdG9wXCIsIHsgb2Zmc2V0OiBcIjAuMTdcIiwgc3RvcENvbG9yOiBcIiNDNjE2OERcIiB9KSxcbiAgICAgICAgICAgICAgLyogQF9fUFVSRV9fICovIGMoXCJzdG9wXCIsIHsgb2Zmc2V0OiBcIjAuNTFcIiwgc3RvcENvbG9yOiBcIiNGMTc1QURcIiB9KSxcbiAgICAgICAgICAgICAgLyogQF9fUFVSRV9fICovIGMoXCJzdG9wXCIsIHsgb2Zmc2V0OiBcIjAuNzZcIiwgc3RvcENvbG9yOiBcIiNDNTkzQzNcIiB9KSxcbiAgICAgICAgICAgICAgLyogQF9fUFVSRV9fICovIGMoXCJzdG9wXCIsIHsgb2Zmc2V0OiBcIjFcIiwgc3RvcENvbG9yOiBcIndoaXRlXCIsIHN0b3BPcGFjaXR5OiBcIjAuNVwiIH0pXG4gICAgICAgICAgICBdXG4gICAgICAgICAgfVxuICAgICAgICApLFxuICAgICAgICAvKiBAX19QVVJFX18gKi8gZTEoXG4gICAgICAgICAgXCJsaW5lYXJHcmFkaWVudFwiLFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGlkOiBcInBhaW50M19saW5lYXJcIixcbiAgICAgICAgICAgIHgxOiBcIjIwLjAwNlwiLFxuICAgICAgICAgICAgeTE6IFwiNDMuOTQzM1wiLFxuICAgICAgICAgICAgeDI6IFwiNDQuNzI1NlwiLFxuICAgICAgICAgICAgeTI6IFwiNDMuOTQzM1wiLFxuICAgICAgICAgICAgZ3JhZGllbnRVbml0czogXCJ1c2VyU3BhY2VPblVzZVwiLFxuICAgICAgICAgICAgY2hpbGRyZW46IFtcbiAgICAgICAgICAgICAgLyogQF9fUFVSRV9fICovIGMoXCJzdG9wXCIsIHsgc3RvcENvbG9yOiBcIiM3MkJGNDRcIiB9KSxcbiAgICAgICAgICAgICAgLyogQF9fUFVSRV9fICovIGMoXCJzdG9wXCIsIHsgb2Zmc2V0OiBcIjAuMTlcIiwgc3RvcENvbG9yOiBcIiM5MUM4M0RcIiB9KSxcbiAgICAgICAgICAgICAgLyogQF9fUFVSRV9fICovIGMoXCJzdG9wXCIsIHsgb2Zmc2V0OiBcIjAuMzhcIiwgc3RvcENvbG9yOiBcIiNBQ0QwMzdcIiB9KSxcbiAgICAgICAgICAgICAgLyogQF9fUFVSRV9fICovIGMoXCJzdG9wXCIsIHsgb2Zmc2V0OiBcIjAuNDdcIiwgc3RvcENvbG9yOiBcIiM5OUNBM0JcIiB9KSxcbiAgICAgICAgICAgICAgLyogQF9fUFVSRV9fICovIGMoXCJzdG9wXCIsIHsgb2Zmc2V0OiBcIjAuNlwiLCBzdG9wQ29sb3I6IFwiIzdEQzI0MlwiIH0pLFxuICAgICAgICAgICAgICAvKiBAX19QVVJFX18gKi8gYyhcInN0b3BcIiwgeyBvZmZzZXQ6IFwiMC43MlwiLCBzdG9wQ29sb3I6IFwiIzRGQjg0OFwiIH0pLFxuICAgICAgICAgICAgICAvKiBAX19QVVJFX18gKi8gYyhcInN0b3BcIiwgeyBvZmZzZXQ6IFwiMC44NFwiLCBzdG9wQ29sb3I6IFwiIzI0QUU0RFwiIH0pLFxuICAgICAgICAgICAgICAvKiBAX19QVVJFX18gKi8gYyhcInN0b3BcIiwgeyBvZmZzZXQ6IFwiMC45NFwiLCBzdG9wQ29sb3I6IFwiIzBBQTg1MFwiIH0pLFxuICAgICAgICAgICAgICAvKiBAX19QVVJFX18gKi8gYyhcInN0b3BcIiwgeyBvZmZzZXQ6IFwiMVwiLCBzdG9wQ29sb3I6IFwiIzAwQTY1MVwiIH0pXG4gICAgICAgICAgICBdXG4gICAgICAgICAgfVxuICAgICAgICApLFxuICAgICAgICAvKiBAX19QVVJFX18gKi8gZTEoXG4gICAgICAgICAgXCJsaW5lYXJHcmFkaWVudFwiLFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGlkOiBcInBhaW50NF9saW5lYXJcIixcbiAgICAgICAgICAgIHgxOiBcIjcuMTU1MDNcIixcbiAgICAgICAgICAgIHkxOiBcIjM3LjM4NjhcIixcbiAgICAgICAgICAgIHgyOiBcIjM5LjAyNjlcIixcbiAgICAgICAgICAgIHkyOiBcIjM3LjM4NjhcIixcbiAgICAgICAgICAgIGdyYWRpZW50VW5pdHM6IFwidXNlclNwYWNlT25Vc2VcIixcbiAgICAgICAgICAgIGNoaWxkcmVuOiBbXG4gICAgICAgICAgICAgIC8qIEBfX1BVUkVfXyAqLyBjKFwic3RvcFwiLCB7IHN0b3BDb2xvcjogXCIjMDA3N0FDXCIgfSksXG4gICAgICAgICAgICAgIC8qIEBfX1BVUkVfXyAqLyBjKFwic3RvcFwiLCB7IG9mZnNldDogXCIwLjIyXCIsIHN0b3BDb2xvcjogXCIjMDA4M0JCXCIgfSksXG4gICAgICAgICAgICAgIC8qIEBfX1BVUkVfXyAqLyBjKFwic3RvcFwiLCB7IG9mZnNldDogXCIwLjQ0XCIsIHN0b3BDb2xvcjogXCIjMDA5OURBXCIgfSksXG4gICAgICAgICAgICAgIC8qIEBfX1BVUkVfXyAqLyBjKFwic3RvcFwiLCB7IG9mZnNldDogXCIwLjY1XCIsIHN0b3BDb2xvcjogXCIjMDBCMkREXCIgfSksXG4gICAgICAgICAgICAgIC8qIEBfX1BVUkVfXyAqLyBjKFwic3RvcFwiLCB7IG9mZnNldDogXCIwLjY3XCIsIHN0b3BDb2xvcjogXCIjMDBCMURBXCIgfSksXG4gICAgICAgICAgICAgIC8qIEBfX1BVUkVfXyAqLyBjKFwic3RvcFwiLCB7IG9mZnNldDogXCIwLjgzXCIsIHN0b3BDb2xvcjogXCIjMDBBQ0M2XCIgfSksXG4gICAgICAgICAgICAgIC8qIEBfX1BVUkVfXyAqLyBjKFwic3RvcFwiLCB7IG9mZnNldDogXCIwLjk0XCIsIHN0b3BDb2xvcjogXCIjMDBBQUE5XCIgfSksXG4gICAgICAgICAgICAgIC8qIEBfX1BVUkVfXyAqLyBjKFwic3RvcFwiLCB7IG9mZnNldDogXCIxXCIsIHN0b3BDb2xvcjogXCIjMDBBOTlEXCIgfSlcbiAgICAgICAgICAgIF1cbiAgICAgICAgICB9XG4gICAgICAgICksXG4gICAgICAgIC8qIEBfX1BVUkVfXyAqLyBlMShcbiAgICAgICAgICBcImxpbmVhckdyYWRpZW50XCIsXG4gICAgICAgICAge1xuICAgICAgICAgICAgaWQ6IFwicGFpbnQ1X2xpbmVhclwiLFxuICAgICAgICAgICAgeDE6IFwiMTMuMTUwMVwiLFxuICAgICAgICAgICAgeTE6IFwiMi4zMTM0NVwiLFxuICAgICAgICAgICAgeDI6IFwiMTkuMTE3OVwiLFxuICAgICAgICAgICAgeTI6IFwiNC43NDgwMVwiLFxuICAgICAgICAgICAgZ3JhZGllbnRVbml0czogXCJ1c2VyU3BhY2VPblVzZVwiLFxuICAgICAgICAgICAgY2hpbGRyZW46IFtcbiAgICAgICAgICAgICAgLyogQF9fUFVSRV9fICovIGMoXCJzdG9wXCIsIHsgc3RvcENvbG9yOiBcIiNGNTgyMjBcIiB9KSxcbiAgICAgICAgICAgICAgLyogQF9fUFVSRV9fICovIGMoXCJzdG9wXCIsIHsgb2Zmc2V0OiBcIjFcIiwgc3RvcENvbG9yOiBcIiNGQ0FGMTdcIiB9KVxuICAgICAgICAgICAgXVxuICAgICAgICAgIH1cbiAgICAgICAgKSxcbiAgICAgICAgLyogQF9fUFVSRV9fICovIGUxKFxuICAgICAgICAgIFwibGluZWFyR3JhZGllbnRcIixcbiAgICAgICAgICB7XG4gICAgICAgICAgICBpZDogXCJwYWludDZfbGluZWFyXCIsXG4gICAgICAgICAgICB4MTogXCIzMS4wMDUzXCIsXG4gICAgICAgICAgICB5MTogXCIzOC43OTI1XCIsXG4gICAgICAgICAgICB4MjogXCI0NS44OTk3XCIsXG4gICAgICAgICAgICB5MjogXCIzOC43OTI1XCIsXG4gICAgICAgICAgICBncmFkaWVudFVuaXRzOiBcInVzZXJTcGFjZU9uVXNlXCIsXG4gICAgICAgICAgICBjaGlsZHJlbjogW1xuICAgICAgICAgICAgICAvKiBAX19QVVJFX18gKi8gYyhcInN0b3BcIiwgeyBzdG9wQ29sb3I6IFwiIzAwOEE0QlwiIH0pLFxuICAgICAgICAgICAgICAvKiBAX19QVVJFX18gKi8gYyhcInN0b3BcIiwgeyBvZmZzZXQ6IFwiMC4xMlwiLCBzdG9wQ29sb3I6IFwiIzE3OTQ0OVwiIH0pLFxuICAgICAgICAgICAgICAvKiBAX19QVVJFX18gKi8gYyhcInN0b3BcIiwgeyBvZmZzZXQ6IFwiMC41NlwiLCBzdG9wQ29sb3I6IFwiIzZDQjg0MlwiIH0pLFxuICAgICAgICAgICAgICAvKiBAX19QVVJFX18gKi8gYyhcInN0b3BcIiwgeyBvZmZzZXQ6IFwiMC43NlwiLCBzdG9wQ29sb3I6IFwiIzhEQzYzRlwiIH0pLFxuICAgICAgICAgICAgICAvKiBAX19QVVJFX18gKi8gYyhcInN0b3BcIiwgeyBvZmZzZXQ6IFwiMVwiLCBzdG9wQ29sb3I6IFwiIzMyQTQ0M1wiIH0pXG4gICAgICAgICAgICBdXG4gICAgICAgICAgfVxuICAgICAgICApLFxuICAgICAgICAvKiBAX19QVVJFX18gKi8gZTEoXG4gICAgICAgICAgXCJsaW5lYXJHcmFkaWVudFwiLFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGlkOiBcInBhaW50N19saW5lYXJcIixcbiAgICAgICAgICAgIHgxOiBcIi0wLjAwMjgyMjUyXCIsXG4gICAgICAgICAgICB5MTogXCIxNS4zMTc4XCIsXG4gICAgICAgICAgICB4MjogXCIyNC4yODIxXCIsXG4gICAgICAgICAgICB5MjogXCIxNS4zMTc4XCIsXG4gICAgICAgICAgICBncmFkaWVudFVuaXRzOiBcInVzZXJTcGFjZU9uVXNlXCIsXG4gICAgICAgICAgICBjaGlsZHJlbjogW1xuICAgICAgICAgICAgICAvKiBAX19QVVJFX18gKi8gYyhcInN0b3BcIiwgeyBzdG9wQ29sb3I6IFwiI0ZDQUYxN1wiIH0pLFxuICAgICAgICAgICAgICAvKiBAX19QVVJFX18gKi8gYyhcInN0b3BcIiwgeyBvZmZzZXQ6IFwiMVwiLCBzdG9wQ29sb3I6IFwiI0YwNEUyM1wiIH0pXG4gICAgICAgICAgICBdXG4gICAgICAgICAgfVxuICAgICAgICApLFxuICAgICAgICAvKiBAX19QVVJFX18gKi8gZTEoXG4gICAgICAgICAgXCJsaW5lYXJHcmFkaWVudFwiLFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGlkOiBcInBhaW50OF9saW5lYXJcIixcbiAgICAgICAgICAgIHgxOiBcIjI3LjY5NzRcIixcbiAgICAgICAgICAgIHkxOiBcIjE4LjI0MzJcIixcbiAgICAgICAgICAgIHgyOiBcIjQ4LjYxNVwiLFxuICAgICAgICAgICAgeTI6IFwiMTguMjQzMlwiLFxuICAgICAgICAgICAgZ3JhZGllbnRVbml0czogXCJ1c2VyU3BhY2VPblVzZVwiLFxuICAgICAgICAgICAgY2hpbGRyZW46IFtcbiAgICAgICAgICAgICAgLyogQF9fUFVSRV9fICovIGMoXCJzdG9wXCIsIHsgb2Zmc2V0OiBcIjAuMTlcIiwgc3RvcENvbG9yOiBcIiM4MTI5OTBcIiB9KSxcbiAgICAgICAgICAgICAgLyogQF9fUFVSRV9fICovIGMoXCJzdG9wXCIsIHsgb2Zmc2V0OiBcIjAuMzFcIiwgc3RvcENvbG9yOiBcIiM4ODJFOTJcIiB9KSxcbiAgICAgICAgICAgICAgLyogQF9fUFVSRV9fICovIGMoXCJzdG9wXCIsIHsgb2Zmc2V0OiBcIjAuNVwiLCBzdG9wQ29sb3I6IFwiIzlDM0I5N1wiIH0pLFxuICAgICAgICAgICAgICAvKiBAX19QVVJFX18gKi8gYyhcInN0b3BcIiwgeyBvZmZzZXQ6IFwiMC43MVwiLCBzdG9wQ29sb3I6IFwiI0JDNTA5RlwiIH0pLFxuICAgICAgICAgICAgICAvKiBAX19QVVJFX18gKi8gYyhcInN0b3BcIiwgeyBvZmZzZXQ6IFwiMC45NVwiLCBzdG9wQ29sb3I6IFwiI0U4NkRBQVwiIH0pLFxuICAgICAgICAgICAgICAvKiBAX19QVVJFX18gKi8gYyhcInN0b3BcIiwgeyBvZmZzZXQ6IFwiMVwiLCBzdG9wQ29sb3I6IFwiI0YxNzNBQ1wiIH0pXG4gICAgICAgICAgICBdXG4gICAgICAgICAgfVxuICAgICAgICApLFxuICAgICAgICAvKiBAX19QVVJFX18gKi8gZTEoXG4gICAgICAgICAgXCJsaW5lYXJHcmFkaWVudFwiLFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGlkOiBcInBhaW50OV9saW5lYXJcIixcbiAgICAgICAgICAgIHgxOiBcIjAuNzUzNjI3XCIsXG4gICAgICAgICAgICB5MTogXCIzNC4xMjcyXCIsXG4gICAgICAgICAgICB4MjogXCIyNy41NTM0XCIsXG4gICAgICAgICAgICB5MjogXCIzNC4xMjcyXCIsXG4gICAgICAgICAgICBncmFkaWVudFVuaXRzOiBcInVzZXJTcGFjZU9uVXNlXCIsXG4gICAgICAgICAgICBjaGlsZHJlbjogW1xuICAgICAgICAgICAgICAvKiBAX19QVVJFX18gKi8gYyhcInN0b3BcIiwgeyBzdG9wQ29sb3I6IFwiIzAwODlDRlwiLCBzdG9wT3BhY2l0eTogXCIwLjlcIiB9KSxcbiAgICAgICAgICAgICAgLyogQF9fUFVSRV9fICovIGMoXCJzdG9wXCIsIHsgb2Zmc2V0OiBcIjFcIiwgc3RvcENvbG9yOiBcIiMwMDU0QTZcIiB9KVxuICAgICAgICAgICAgXVxuICAgICAgICAgIH1cbiAgICAgICAgKSxcbiAgICAgICAgLyogQF9fUFVSRV9fICovIGUxKFxuICAgICAgICAgIFwibGluZWFyR3JhZGllbnRcIixcbiAgICAgICAgICB7XG4gICAgICAgICAgICBpZDogXCJwYWludDEwX2xpbmVhclwiLFxuICAgICAgICAgICAgeDE6IFwiMjUuNzU1NVwiLFxuICAgICAgICAgICAgeTE6IFwiNDcuMTMxNVwiLFxuICAgICAgICAgICAgeDI6IFwiMTcuOTQyM1wiLFxuICAgICAgICAgICAgeTI6IFwiNDUuMTM0N1wiLFxuICAgICAgICAgICAgZ3JhZGllbnRVbml0czogXCJ1c2VyU3BhY2VPblVzZVwiLFxuICAgICAgICAgICAgY2hpbGRyZW46IFtcbiAgICAgICAgICAgICAgLyogQF9fUFVSRV9fICovIGMoXCJzdG9wXCIsIHsgc3RvcENvbG9yOiBcIiM5QUNBM0NcIiB9KSxcbiAgICAgICAgICAgICAgLyogQF9fUFVSRV9fICovIGMoXCJzdG9wXCIsIHsgb2Zmc2V0OiBcIjAuMzRcIiwgc3RvcENvbG9yOiBcIiM3QUMzNDBcIiB9KSxcbiAgICAgICAgICAgICAgLyogQF9fUFVSRV9fICovIGMoXCJzdG9wXCIsIHsgb2Zmc2V0OiBcIjFcIiwgc3RvcENvbG9yOiBcIiMzM0I0NEFcIiB9KVxuICAgICAgICAgICAgXVxuICAgICAgICAgIH1cbiAgICAgICAgKSxcbiAgICAgICAgLyogQF9fUFVSRV9fICovIGUxKFxuICAgICAgICAgIFwibGluZWFyR3JhZGllbnRcIixcbiAgICAgICAgICB7XG4gICAgICAgICAgICBpZDogXCJwYWludDExX2xpbmVhclwiLFxuICAgICAgICAgICAgeDE6IFwiMTQuNzcwMlwiLFxuICAgICAgICAgICAgeTE6IFwiMS41NTA2OVwiLFxuICAgICAgICAgICAgeDI6IFwiMzAuODI2NVwiLFxuICAgICAgICAgICAgeTI6IFwiMy43Nzk4MlwiLFxuICAgICAgICAgICAgZ3JhZGllbnRVbml0czogXCJ1c2VyU3BhY2VPblVzZVwiLFxuICAgICAgICAgICAgY2hpbGRyZW46IFtcbiAgICAgICAgICAgICAgLyogQF9fUFVSRV9fICovIGMoXCJzdG9wXCIsIHsgc3RvcENvbG9yOiBcIiNGREI1MTVcIiB9KSxcbiAgICAgICAgICAgICAgLyogQF9fUFVSRV9fICovIGMoXCJzdG9wXCIsIHsgb2Zmc2V0OiBcIjAuMzZcIiwgc3RvcENvbG9yOiBcIiNGRkQxMDBcIiB9KSxcbiAgICAgICAgICAgICAgLyogQF9fUFVSRV9fICovIGMoXCJzdG9wXCIsIHsgb2Zmc2V0OiBcIjAuNThcIiwgc3RvcENvbG9yOiBcIiNGRkM5MDdcIiB9KSxcbiAgICAgICAgICAgICAgLyogQF9fUFVSRV9fICovIGMoXCJzdG9wXCIsIHsgb2Zmc2V0OiBcIjAuN1wiLCBzdG9wQ29sb3I6IFwiI0ZGQzIwRVwiIH0pLFxuICAgICAgICAgICAgICAvKiBAX19QVVJFX18gKi8gYyhcInN0b3BcIiwgeyBvZmZzZXQ6IFwiMC44N1wiLCBzdG9wQ29sb3I6IFwiI0ZCQTYxN1wiIH0pLFxuICAgICAgICAgICAgICAvKiBAX19QVVJFX18gKi8gYyhcInN0b3BcIiwgeyBvZmZzZXQ6IFwiMVwiLCBzdG9wQ29sb3I6IFwiI0Y3OEUxRVwiIH0pXG4gICAgICAgICAgICBdXG4gICAgICAgICAgfVxuICAgICAgICApLFxuICAgICAgICAvKiBAX19QVVJFX18gKi8gZTEoXG4gICAgICAgICAgXCJsaW5lYXJHcmFkaWVudFwiLFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGlkOiBcInBhaW50MTJfbGluZWFyXCIsXG4gICAgICAgICAgICB4MTogXCIxOC45NDE5XCIsXG4gICAgICAgICAgICB5MTogXCI0Ny43MlwiLFxuICAgICAgICAgICAgeDI6IFwiMjMuMDQxMlwiLFxuICAgICAgICAgICAgeTI6IFwiNDMuNjdcIixcbiAgICAgICAgICAgIGdyYWRpZW50VW5pdHM6IFwidXNlclNwYWNlT25Vc2VcIixcbiAgICAgICAgICAgIGNoaWxkcmVuOiBbXG4gICAgICAgICAgICAgIC8qIEBfX1BVUkVfXyAqLyBjKFwic3RvcFwiLCB7IHN0b3BDb2xvcjogXCIjQkFENTMyXCIgfSksXG4gICAgICAgICAgICAgIC8qIEBfX1BVUkVfXyAqLyBjKFwic3RvcFwiLCB7IG9mZnNldDogXCIwLjAzXCIsIHN0b3BDb2xvcjogXCIjQjFEMzM0XCIsIHN0b3BPcGFjaXR5OiBcIjAuOTNcIiB9KSxcbiAgICAgICAgICAgICAgLyogQF9fUFVSRV9fICovIGMoXCJzdG9wXCIsIHsgb2Zmc2V0OiBcIjAuMTFcIiwgc3RvcENvbG9yOiBcIiM5NENDMzlcIiwgc3RvcE9wYWNpdHk6IFwiMC43MlwiIH0pLFxuICAgICAgICAgICAgICAvKiBAX19QVVJFX18gKi8gYyhcInN0b3BcIiwgeyBvZmZzZXQ6IFwiMC4yMVwiLCBzdG9wQ29sb3I6IFwiIzdBQzUzRFwiLCBzdG9wT3BhY2l0eTogXCIwLjUyXCIgfSksXG4gICAgICAgICAgICAgIC8qIEBfX1BVUkVfXyAqLyBjKFwic3RvcFwiLCB7IG9mZnNldDogXCIwLjMxXCIsIHN0b3BDb2xvcjogXCIjNjRDMDQxXCIsIHN0b3BPcGFjaXR5OiBcIjAuMzZcIiB9KSxcbiAgICAgICAgICAgICAgLyogQF9fUFVSRV9fICovIGMoXCJzdG9wXCIsIHsgb2Zmc2V0OiBcIjAuNDFcIiwgc3RvcENvbG9yOiBcIiM1MkJDNDRcIiwgc3RvcE9wYWNpdHk6IFwiMC4yM1wiIH0pLFxuICAgICAgICAgICAgICAvKiBAX19QVVJFX18gKi8gYyhcInN0b3BcIiwgeyBvZmZzZXQ6IFwiMC41M1wiLCBzdG9wQ29sb3I6IFwiIzQ0Qjg0N1wiLCBzdG9wT3BhY2l0eTogXCIwLjEzXCIgfSksXG4gICAgICAgICAgICAgIC8qIEBfX1BVUkVfXyAqLyBjKFwic3RvcFwiLCB7IG9mZnNldDogXCIwLjY1XCIsIHN0b3BDb2xvcjogXCIjM0FCNjQ5XCIsIHN0b3BPcGFjaXR5OiBcIjAuMDZcIiB9KSxcbiAgICAgICAgICAgICAgLyogQF9fUFVSRV9fICovIGMoXCJzdG9wXCIsIHsgb2Zmc2V0OiBcIjAuNzlcIiwgc3RvcENvbG9yOiBcIiMzNUI0NEFcIiwgc3RvcE9wYWNpdHk6IFwiMC4wMVwiIH0pLFxuICAgICAgICAgICAgICAvKiBAX19QVVJFX18gKi8gYyhcInN0b3BcIiwgeyBvZmZzZXQ6IFwiMVwiLCBzdG9wQ29sb3I6IFwiIzMzQjQ0QVwiLCBzdG9wT3BhY2l0eTogXCIwXCIgfSlcbiAgICAgICAgICAgIF1cbiAgICAgICAgICB9XG4gICAgICAgICksXG4gICAgICAgIC8qIEBfX1BVUkVfXyAqLyBlMShcbiAgICAgICAgICBcImxpbmVhckdyYWRpZW50XCIsXG4gICAgICAgICAge1xuICAgICAgICAgICAgaWQ6IFwicGFpbnQxM19saW5lYXJcIixcbiAgICAgICAgICAgIHgxOiBcIjE0Ljg5NzNcIixcbiAgICAgICAgICAgIHkxOiBcIjUuODg3MzdcIixcbiAgICAgICAgICAgIHgyOiBcIjMwLjEwNjdcIixcbiAgICAgICAgICAgIHkyOiBcIjEuODYyNTVcIixcbiAgICAgICAgICAgIGdyYWRpZW50VW5pdHM6IFwidXNlclNwYWNlT25Vc2VcIixcbiAgICAgICAgICAgIGNoaWxkcmVuOiBbXG4gICAgICAgICAgICAgIC8qIEBfX1BVUkVfXyAqLyBjKFwic3RvcFwiLCB7IHN0b3BDb2xvcjogXCIjRjE1RjIyXCIsIHN0b3BPcGFjaXR5OiBcIjAuOFwiIH0pLFxuICAgICAgICAgICAgICAvKiBAX19QVVJFX18gKi8gYyhcInN0b3BcIiwgeyBvZmZzZXQ6IFwiMC4yMVwiLCBzdG9wQ29sb3I6IFwiI0Y2ODYxQVwiLCBzdG9wT3BhY2l0eTogXCIwLjQ4XCIgfSksXG4gICAgICAgICAgICAgIC8qIEBfX1BVUkVfXyAqLyBjKFwic3RvcFwiLCB7IG9mZnNldDogXCIwLjM5XCIsIHN0b3BDb2xvcjogXCIjRkFBNTE0XCIsIHN0b3BPcGFjaXR5OiBcIjAuMjJcIiB9KSxcbiAgICAgICAgICAgICAgLyogQF9fUFVSRV9fICovIGMoXCJzdG9wXCIsIHsgb2Zmc2V0OiBcIjAuNTJcIiwgc3RvcENvbG9yOiBcIiNGREI5MTBcIiwgc3RvcE9wYWNpdHk6IFwiMC4wNlwiIH0pLFxuICAgICAgICAgICAgICAvKiBAX19QVVJFX18gKi8gYyhcInN0b3BcIiwgeyBvZmZzZXQ6IFwiMC41OVwiLCBzdG9wQ29sb3I6IFwiI0ZFQzAwRlwiLCBzdG9wT3BhY2l0eTogXCIwXCIgfSksXG4gICAgICAgICAgICAgIC8qIEBfX1BVUkVfXyAqLyBjKFwic3RvcFwiLCB7IG9mZnNldDogXCIwLjY1XCIsIHN0b3BDb2xvcjogXCIjRkRCQzEwXCIsIHN0b3BPcGFjaXR5OiBcIjAuMDRcIiB9KSxcbiAgICAgICAgICAgICAgLyogQF9fUFVSRV9fICovIGMoXCJzdG9wXCIsIHsgb2Zmc2V0OiBcIjAuNzVcIiwgc3RvcENvbG9yOiBcIiNGQ0IzMTNcIiwgc3RvcE9wYWNpdHk6IFwiMC4xNVwiIH0pLFxuICAgICAgICAgICAgICAvKiBAX19QVVJFX18gKi8gYyhcInN0b3BcIiwgeyBvZmZzZXQ6IFwiMC44OFwiLCBzdG9wQ29sb3I6IFwiI0ZBQTQxOFwiLCBzdG9wT3BhY2l0eTogXCIwLjMyXCIgfSksXG4gICAgICAgICAgICAgIC8qIEBfX1BVUkVfXyAqLyBjKFwic3RvcFwiLCB7IG9mZnNldDogXCIxXCIsIHN0b3BDb2xvcjogXCIjRjc5NDFEXCIsIHN0b3BPcGFjaXR5OiBcIjAuNVwiIH0pXG4gICAgICAgICAgICBdXG4gICAgICAgICAgfVxuICAgICAgICApLFxuICAgICAgICAvKiBAX19QVVJFX18gKi8gZTEoXG4gICAgICAgICAgXCJsaW5lYXJHcmFkaWVudFwiLFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGlkOiBcInBhaW50MTRfbGluZWFyXCIsXG4gICAgICAgICAgICB4MTogXCIwLjY5NDMyM1wiLFxuICAgICAgICAgICAgeTE6IFwiMTkuNzk0NVwiLFxuICAgICAgICAgICAgeDI6IFwiNDYuMzA5XCIsXG4gICAgICAgICAgICB5MjogXCIxOS43OTQ1XCIsXG4gICAgICAgICAgICBncmFkaWVudFVuaXRzOiBcInVzZXJTcGFjZU9uVXNlXCIsXG4gICAgICAgICAgICBjaGlsZHJlbjogW1xuICAgICAgICAgICAgICAvKiBAX19QVVJFX18gKi8gYyhcInN0b3BcIiwgeyBzdG9wQ29sb3I6IFwiI0Y0RUFFNVwiLCBzdG9wT3BhY2l0eTogXCIwLjA2XCIgfSksXG4gICAgICAgICAgICAgIC8qIEBfX1BVUkVfXyAqLyBjKFwic3RvcFwiLCB7IG9mZnNldDogXCIwLjE5XCIsIHN0b3BDb2xvcjogXCIjREFBRkFDXCIsIHN0b3BPcGFjaXR5OiBcIjAuMzNcIiB9KSxcbiAgICAgICAgICAgICAgLyogQF9fUFVSRV9fICovIGMoXCJzdG9wXCIsIHsgb2Zmc2V0OiBcIjAuNjhcIiwgc3RvcENvbG9yOiBcIiM5ODFCMUVcIiB9KVxuICAgICAgICAgICAgXVxuICAgICAgICAgIH1cbiAgICAgICAgKSxcbiAgICAgICAgLyogQF9fUFVSRV9fICovIGUxKFxuICAgICAgICAgIFwibGluZWFyR3JhZGllbnRcIixcbiAgICAgICAgICB7XG4gICAgICAgICAgICBpZDogXCJwYWludDE1X2xpbmVhclwiLFxuICAgICAgICAgICAgeDE6IFwiMy45MTc2XCIsXG4gICAgICAgICAgICB5MTogXCIzNy4zODY4XCIsXG4gICAgICAgICAgICB4MjogXCI0NS45MjIzXCIsXG4gICAgICAgICAgICB5MjogXCIzNy4zODY4XCIsXG4gICAgICAgICAgICBncmFkaWVudFVuaXRzOiBcInVzZXJTcGFjZU9uVXNlXCIsXG4gICAgICAgICAgICBjaGlsZHJlbjogW1xuICAgICAgICAgICAgICAvKiBAX19QVVJFX18gKi8gYyhcInN0b3BcIiwgeyBvZmZzZXQ6IFwiMC44NVwiLCBzdG9wQ29sb3I6IFwid2hpdGVcIiwgc3RvcE9wYWNpdHk6IFwiMFwiIH0pLFxuICAgICAgICAgICAgICAvKiBAX19QVVJFX18gKi8gYyhcInN0b3BcIiwgeyBvZmZzZXQ6IFwiMC45MVwiLCBzdG9wQ29sb3I6IFwiI0Q2RDdEOFwiLCBzdG9wT3BhY2l0eTogXCIwLjIzXCIgfSksXG4gICAgICAgICAgICAgIC8qIEBfX1BVUkVfXyAqLyBjKFwic3RvcFwiLCB7IG9mZnNldDogXCIwLjk3XCIsIHN0b3BDb2xvcjogXCIjQjRCNkI4XCIsIHN0b3BPcGFjaXR5OiBcIjAuNDNcIiB9KSxcbiAgICAgICAgICAgICAgLyogQF9fUFVSRV9fICovIGMoXCJzdG9wXCIsIHsgb2Zmc2V0OiBcIjFcIiwgc3RvcENvbG9yOiBcIiNBN0E5QUNcIiwgc3RvcE9wYWNpdHk6IFwiMC41XCIgfSlcbiAgICAgICAgICAgIF1cbiAgICAgICAgICB9XG4gICAgICAgIClcbiAgICAgIF0gfSlcbiAgICBdXG4gIH1cbiksIERSID0gKCkgPT4gLyogQF9fUFVSRV9fICovIGUxKFxuICBcInN2Z1wiLFxuICB7XG4gICAgd2lkdGg6IFwiMTYwXCIsXG4gICAgaGVpZ2h0OiBcIjE2MFwiLFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2MCAxNjBcIixcbiAgICBmaWxsOiBcIm5vbmVcIixcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIGNoaWxkcmVuOiBbXG4gICAgICAvKiBAX19QVVJFX18gKi8gYyhcbiAgICAgICAgXCJwYXRoXCIsXG4gICAgICAgIHtcbiAgICAgICAgICBvcGFjaXR5OiBcIjAuNjFcIixcbiAgICAgICAgICBkOiBcIk0xNTQuNjUxIDEwOC45ODdDMTQ4LjAwMiAxMjYuMjA4IDEzNS41ODEgMTQwLjU1MyAxMTkuNzY5IDE0OS42NDJDMTE5LjUxNyAxNDkuMTIyIDExOC41NjMgMTQ4LjQyMiAxMTYuMzM4IDE0Ny4zODZDMTE0LjExMyAxNDYuMzUgMTA0LjM4IDE0Mi43NDEgMTA0LjQ2NiAxMzcuNjU3QzEwNC41NzYgMTMxLjI1IDExMy4yNzEgMTI1LjM4OSAxMjUuNjE5IDEyMC41NjFDMTM3LjQ1OSAxMTUuOTMxIDE0OC4yOTggMTEyLjYzNCAxNTAuMjk3IDExMS44MzFDMTUyLjY4NCAxMTAuODcyIDE1NC4wOSAxMTAuMjgzIDE1NC42NTEgMTA4Ljk4N1pNMTcuNjE0IDcwLjI5MjVDMzEuNjY5NCA2NC4xNjQxIDQ2LjQwNDQgNTcuMzExOSA1Ni4wNDE3IDUyLjc2NTRDNzEuMTE4OCA0NS42NTI1IDg0LjI4MzcgMzYuOTg0NSA4MS40MTg3IDI4LjE1NTJDNzguODcxNCAyMC4yOTE4IDY4LjM5MjYgMjEuMjM2OSA0Ny40ODE4IDI0Ljk4NEMzNC4wMzEyIDI3LjM5NDMgMTYuMjQ2NSAzMS44MzE2IDEzLjg0ODMgMzUuMDQ0NEwxMy43NTQ4IDM1LjE4MTlDMTMuNjU2MSAzNS4zMzA1IDEzLjU1NjcgMzUuNDc5MSAxMy40NTggMzUuNjI3N0M1LjE2MjIyIDQ4LjA0NDMgMC4yMzk2NzIgNjIuOTIwMiAwLjAwODE2MjI1IDc4LjkyNzhDMC4wMDM3MTAxNCA3OS4yNzQ4IDAgNzkuNjIxOCAwIDc5Ljk2OEMwLjAzMDQyMjggNzguNTQzNyA1LjEzMjU0IDc1LjczNTEgMTcuNjE0IDcwLjI5MjVaTTEzMy4zOCAzOC4wMTI4QzExNi45ODEgNDAuNDI2OSA5MC45NTg5IDQ1LjI1MTMgOTMuNDk4OCA2MC42NTExQzk1LjQ1NCA3Mi41MDc0IDExOS4xMSA3NS45NjU0IDEyOC45OTYgNzcuODc0MkMxMzYuODQ0IDc5LjM5MDcgMTUyLjIwMiA4MS40ODYgMTU4Ljc3MyA4My4xMzAzQzE1OS42NTEgODMuMzUzMiAxNTkuOTI2IDgzLjc3MjMgMTU5LjkwMiA4NC4yNDQ5QzE1OS45MDIgODQuMjM5NyAxNTkuOTAyIDg0LjIzNTIgMTU5LjkwMiA4NC4yM0MxNTkuOTM2IDgzLjU0NzkgMTU5Ljk2MSA4Mi44NjM2IDE1OS45NzYgODIuMTc3VjgyLjA1NDRDMTU5Ljk5MiA4MS40MDggMTYwIDgwLjc2MDQgMTYwIDgwLjExMTVDMTYwIDY1LjI5MiAxNTUuOTgxIDUxLjQxMzkgMTQ4Ljk3NyAzOS41MDdMMTQ4LjcgMzkuMDYxMkMxNDcuODU3IDM3LjY5NjMgMTQyLjE5IDM2LjcxNTUgMTMzLjM4IDM4LjAxMjhaTTkyLjQ0MDcgOTUuMzg1N0M5MC44Nzg3IDg5LjU5MDEgODIuNDA0OSA4NS4zOTg4IDcwLjMxMDcgODUuNjk1MkM1Ny41NDggODYuMDA4OCA0NC4yOTI2IDg3LjIxNCAyOC4zMTY5IDkwLjgxMDlDMTQuMDQxMiA5NC4wMjUyIDUuMzg4NTQgOTcuNzI5OSA0LjA1MjkxIDk4LjI4MkMyLjgwMTEyIDk4LjgwMjEgMi4zNzY2OSA5OS40Nzk3IDIuNjA1OTcgMTAwLjQ2M1YxMDAuNDdDMi42NjE4NyAxMDAuNjgyIDIuNzE3NzcgMTAwLjg5MyAyLjc3MzY3IDEwMS4xMDNDMi44NDc4NyAxMDEuMzggMi45MjIwNyAxMDEuNjU2IDMuMDAyOTUgMTAxLjkzMkMzLjAyNjY5IDEwMi4wMTYgMy4wNTExOCAxMDIuMTAxIDMuMDc3MTUgMTAyLjE4NkMzLjE0MDk2IDEwMi40MDkgMy4yMDQ3OCAxMDIuNjMyIDMuMjcwMDggMTAyLjg0OUMzLjI4ODYzIDEwMi45MTMgMy4zMDcxOCAxMDIuOTc3IDMuMzI2NDcgMTAzLjA0MUMzLjQwNzYgMTAzLjMxMiAzLjQ4OTcxIDEwMy41ODMgMy41NzI4MiAxMDMuODUyQzMuNTk3MzEgMTAzLjkzMiAzLjYyMjU0IDEwNC4wMTEgMy42NDcwMiAxMDQuMDlDMy43MTIzMiAxMDQuMjk5IDMuNzc5MSAxMDQuNTA4IDMuODQ1ODggMTA0LjcxNkwzLjkyMzc5IDEwNC45NTlDNC4wMTAzNiAxMDUuMjI1IDQuMDk4NDIgMTA1LjQ5IDQuMTg3OTUgMTA1Ljc1NUw0LjI1Njk2IDEwNS45NThDNC4zMzExNiAxMDYuMTY3IDQuNDAwMTcgMTA2LjM3NiA0LjQ3Mjg5IDEwNi41ODRMNC41Njc4NyAxMDYuODU2QzQuNjUyOTUgMTA3LjA5NiA0LjczOTI3IDEwNy4zMzYgNC44MjY4MyAxMDcuNTc2TDQuODkzNjEgMTA3Ljc1OEM0Ljk3NzIxIDEwNy45ODcgNS4wNjIzIDEwOC4yMTYgNS4xNDg4NyAxMDguNDQ0TDUuMjU3OTQgMTA4LjczQzUuMzMxNjUgMTA4LjkyNCA1LjQwNTg1IDEwOS4xMTcgNS40ODA1NSAxMDkuMzA5QzUuNTEwOTcgMTA5LjM4NyA1LjU0MDY1IDEwOS40NjUgNS41NzE4MiAxMDkuNTQzQzUuNjcwNzUgMTA5Ljc5MSA1Ljc2OTY5IDExMC4wMzggNS44Njg2MyAxMTAuMjg2QzUuOTA3OTUgMTEwLjM4NSA1Ljk0ODc2IDExMC40ODIgNS45ODg4MyAxMTAuNTgzQzYuMDYwMDcgMTEwLjc1NiA2LjEzMTU1IDExMC45MjkgNi4yMDMyOCAxMTEuMTAzTDYuMzI3OTQgMTExLjQwMUM2LjQyOTg0IDExMS42NDEgNi41MzI0OSAxMTEuODggNi42MzU4NyAxMTIuMTE4QzYuNjc4OTEgMTEyLjIxNyA2LjcyMjY5IDExMi4zMTUgNi43NjU3MyAxMTIuNDE2QzYuODM2OTYgMTEyLjU3OCA2LjkwODY5IDExMi43MzkgNi45ODA5MSAxMTIuOUw3LjEyOTMyIDExMy4yMzRDNy4yMTE0MyAxMTMuNDE1IDcuMjk0NTQgMTEzLjU5NiA3LjM3ODYzIDExMy43NzhDNy40NDU0MiAxMTMuOTI2IDcuNTEzNjggMTE0LjA2NyA3LjU4MTIgMTE0LjIxMUM3LjY1NTQxIDExNC4zNjggNy43Mjk2MSAxMTQuNTI1IDcuODAzODEgMTE0LjY4MUw3Ljk3NzQ0IDExNS4wNDJDOC4wNDQ5NyAxMTUuMTgxIDguMTEzMjMgMTE1LjMyMSA4LjE4MTUgMTE1LjQ2QzguMjYyMzggMTE1LjYyNCA4LjM0MzI2IDExNS43ODcgOC40MjU2MiAxMTUuOTUxQzguNTA3OTkgMTE2LjExNCA4LjU5MDM1IDExNi4yODEgOC42NzQyIDExNi40NDVDOC43Mzk5OSAxMTYuNTc0IDguODA2MjggMTE2LjcwMyA4Ljg3MzA2IDExNi44MzFDOC45MzM0MSAxMTYuOTQ5IDguOTk0MjYgMTE3LjA2NiA5LjA1NTYgMTE3LjE4M0M5LjEyMzg2IDExNy4zMTUgOS4xOTI4NyAxMTcuNDQ3IDkuMjYyNjIgMTE3LjU3OEM5LjM2NTUxIDExNy43NzMgOS40Njk0IDExNy45NjcgOS41NzQyNyAxMTguMTYxQzkuNjU0NDEgMTE4LjMxIDkuNzM1MDQgMTE4LjQ1OSA5LjgxNjE3IDExOC42MDdDOS44NzA1OCAxMTguNzA2IDkuOTI1MjQgMTE4LjgwNSA5Ljk4MDE1IDExOC45MDRDMTAuMDU5MyAxMTkuMDQ4IDEwLjEzODkgMTE5LjE5MSAxMC4yMTkxIDExOS4zMzNMMTAuMzYxNSAxMTkuNTg2QzEwLjUxIDExOS44NSAxMC42NjEzIDEyMC4xMTQgMTAuODE1NyAxMjAuMzc3QzEwLjg2MDkgMTIwLjQ1MSAxMC45MDU1IDEyMC41MzEgMTAuOTUwNyAxMjAuNjA4QzExLjA0MDMgMTIwLjc2MSAxMS4xMzAzIDEyMC45MTQgMTEuMjIwOCAxMjEuMDY2TDExLjM0MjUgMTIxLjI2OUMxMS41MzEgMTIxLjU4NCAxMS43MjEyIDEyMS44OTcgMTEuOTEzMSAxMjIuMjA4TDExLjk2NDMgMTIyLjI5QzEyLjA2NjIgMTIyLjQ1NCAxMi4xNjg0IDEyMi42MTggMTIuMjcwOCAxMjIuNzgxTDEyLjM3MjQgMTIyLjk0MkMxMi43MDA0IDEyMy40NiAxMy4wMzQxIDEyMy45NzQgMTMuMzczNCAxMjQuNDg0TDEzLjQ0NzYgMTI0LjU5MkMxMy44MDcyIDEyNS4xMzIgMTQuMTc0IDEyNS42NjcgMTQuNTQ4IDEyNi4xOTdDMTQuNTUxNyAxMjYuMjA0IDE0LjU1NjIgMTI2LjIxIDE0LjU2MDYgMTI2LjIxNkMxNy41MjM4IDEzMC40MjUgMjAuODgzMyAxMzQuMzQgMjQuNTkyNyAxMzcuOTA3QzI0LjcyMzggMTM4LjAzNCAyNC44NTU5IDEzOC4xNjEgMjQuOTg5IDEzOC4yODdMMjUuMDgxIDEzOC4zNzRDMjUuNTc1NyAxMzguODQzIDI2LjA3NzggMTM5LjMwNiAyNi41ODczIDEzOS43NjJMMjYuNjEwMyAxMzkuNzgyQzI3LjExOTMgMTQwLjI0IDI3LjYzNDUgMTQwLjY5MSAyOC4xNTU5IDE0MS4xMzVMMjguMjcwMiAxNDEuMjMzTDI4LjI3NjkgMTQxLjI0QzI4LjQ1OTkgMTQxLjM5NSAyOC42NDM5IDE0MS41NDkgMjguODI4OSAxNDEuNzAyQzI4LjkxMDEgMTQxLjc2NyAyOS4wMDE3IDE0MS44MTcgMjkuMDk5OCAxNDEuODUxQzI4Ljg4NjggMTQxLjc2OSAyOS4yMzcgMTQxLjQwNSAzMC4zMTU5IDE0MC45OTdDMzUuMDY0OCAxMzkuMjE0IDQxLjA0NzcgMTM2Ljg0MyA1MS41OTkyIDEzMS42MTFDNjIuMTg0MSAxMjYuMzYyIDY2LjI3NDEgMTI0LjE2MyA3Ny42MyAxMTUuODY3Qzg4LjM5MzcgMTA4LjAwMSA5NC41MjU4IDEwMy4xMTMgOTIuNDQwNyA5NS4zODU3Wk04Ni4xNDU0IDE1MS4xNDFDODUuMDUyNCAxNDcuODI5IDc2LjQ3MSAxNDYuNjIxIDY2LjA2NzkgMTQ4LjcxN0M2MC4xMDIgMTQ5LjkxOCA1NS44NTQ3IDE1MS43MzggNTMuOTczIDE1Mi43MjlDNTEuNDY4NiAxNTQuMDQ1IDUxLjE3MTggMTU0Ljg2IDUzLjI5NCAxNTUuNjQ5SDUzLjI5ODVDNTMuNDMyOCAxNTUuNjk2IDUzLjU2ODYgMTU1Ljc0MyA1My43MDM2IDE1NS43OUw1NC4wNDY0IDE1NS45MDlDNTQuNTkwNiAxNTYuMDk1IDU1LjE0MjYgMTU2LjI3OCA1NS43MDI2IDE1Ni40NTdMNTUuNzQyNyAxNTYuNDdDNTYuMjk4NyAxNTYuNjQ2IDU2Ljg2MDQgMTU2LjgxOCA1Ny40Mjc4IDE1Ni45ODZDNTcuNjIxMiAxNTcuMDQzIDU3LjgxNDkgMTU3LjA5OSA1OC4wMDg4IDE1Ny4xNTVMNTguMTIwOCAxNTcuMTg3QzYzLjMxNzUgMTU4LjY2MiA2OC42NTAzIDE1OS42MDQgNzQuMDM3MSAxNjBDNzUuNTU3NSAxNTguMzc5IDg3Ljg2MzIgMTU2LjM1IDg2LjE0NTQgMTUxLjE0MVpNODIuNDQ0MiA4LjU2NDc3QzEwNS4zMjIgOC4yNTEyMSAxMTQuOTcxIDEwLjcwMTcgMTE5LjM2MyAxMi4yNTAxQzEyMS45NzMgMTMuMTcxNSAxMjIuNjQ4IDE0LjA0OSAxMjIuODM5IDE0LjYzMjNDMTIyLjQyMyAxMy4xNDE4IDEyMC44ODQgMTEuMTg4NCAxMTcuMTM0IDkuMTMzOTJMMTE3LjEyIDkuMTI2NDlDMTA2LjAyNyAzLjI5ODI2IDkzLjM5OTQgMCA4MC4wMDMgMEM2My41OTYyIDAgNDguMzQ0IDQuOTQ2MjcgMzUuNjQ5NSAxMy40MjkzQzQzLjc2NTggMTEuNzYyNyA2Mi41NTI5IDguODM2NzEgODIuNDQ0MiA4LjU2NDc3WlwiLFxuICAgICAgICAgIGZpbGw6IFwidXJsKCNwYWludDBfbGluZWFyKVwiXG4gICAgICAgIH1cbiAgICAgICksXG4gICAgICAvKiBAX19QVVJFX18gKi8gYyhcbiAgICAgICAgXCJwYXRoXCIsXG4gICAgICAgIHtcbiAgICAgICAgICBkOiBcIk03NS4xNDAxIDgwLjQzODdDMTA2LjIyNiA3Mi45NTE2IDE0My4yODMgNjUuMjcxNyAxNTcuMTAzIDYxLjEyMDhDMTU4LjU0NSA2Ny4xODY4IDE1OS4yNzIgNzMuNDAwOCAxNTkuMjY4IDc5LjYzNTlDMTU5LjI2OCA4MC45ODQ2IDE1OS4yMzUgODIuMzI1MSAxNTkuMTY4IDgzLjY1NzVDMTU5LjE0NSA4My45Nzk3IDE1OS4wMDQgODQuMjgyMiAxNTguNzcyIDg0LjUwNjJDMTU4LjEzIDg1LjExNjIgMTU2LjgzIDg1LjY4MTMgMTU2LjA4NiA4NS45MjQzQzE1Mi45MzQgODYuOTU4MyAxNDIuNzA5IDg5LjQ4NTggMTIzLjkwMSA5My41MjU5Qzk0LjQwMjYgOTkuODYyMyA2Mi4yMDM2IDEwNy44NDEgNDcuNzk4OCAxMTEuODQzQzI5LjMxNDggMTE2Ljk3NSAxNy45OTQ0IDEyMS4yNzkgMTIuNzk0NyAxMjIuOTQzQzEwLjUyOTggMTE5LjQ1NiA4LjU0MjQ5IDExNS43OTYgNi44NTExOSAxMTEuOTk3VjExMS45OTFDNi4zMjA4OCAxMTAuODAxIDUuODE5NjIgMTA5LjU5NCA1LjM0NzQyIDEwOC4zNzJWMTA4LjM2MkM0Ljg3NDcyIDEwNy4xNDEgNC40MzE1NiAxMDUuOTA2IDQuMDE3OTUgMTA0LjY1NkMzLjUyMTYxIDEwMy4xNTYgMy4wNjkzNSAxMDEuNjM1IDIuNjYxMTUgMTAwLjA5NkMxMy40ODg5IDk3LjA5MzMgNDIuMDcyNSA4OC40MDMgNzUuMTQwMSA4MC40Mzg3Wk0zLjczOTUgNTUuNDU1MUwzLjcyNzY4IDU1LjQ5MzVMMy43MTY2IDU1LjUyNjdDMy43MDQwNSA1NS41NjczIDMuNjkxNDkgNTUuNjA3MiAzLjY3ODE5IDU1LjY0NzhDMy42MTQ2OCA1NS44NDk3IDMuNTUxOSA1Ni4wNTIxIDMuNDg5ODUgNTYuMjU1QzMuNDg2MTYgNTYuMjY1MyAzLjQ4MzIxIDU2LjI3NTYgMy40ODAyNSA1Ni4yODZDMy40NjQgNTYuMzM3NyAzLjQ0ODQ5IDU2LjM4OTQgMy40MzI5OCA1Ni40NDExQzMuMzI2NjIgNTYuNzkwNyAzLjIyMjczIDU3LjE0MDggMy4xMjEzIDU3LjQ5MTRMMy4xMTE2OSA1Ny41MjUzQzMuMDA4NzggNTcuODc4OSAyLjkwODgzIDU4LjIzMzkgMi44MTE4MyA1OC41OTA0QzM3Ljg5NSA1MC4wNzk2IDYyLjU4NDcgNDMuMTA4NyA4My44ODIgMzYuNDUwM0M5Ni4zNjQzIDMyLjU0NjkgMTA1LjUxNyAyOS4wMDE2IDExMS42OTIgMjUuODc5NkMxMTEuODM2IDI1LjgwNzIgMTExLjk3NyAyNS43MzQ4IDExMi4xMTggMjUuNjYyNEwxMTIuMjQzIDI1LjU5NzRDMTEyLjM0MSAyNS41NDcyIDExMi40MzggMjUuNDk3IDExMi41MzQgMjUuNDQ5N0wxMTIuNjg5IDI1LjM2ODVMMTEyLjk0MSAyNS4yMzU1TDExMy4xMDMgMjUuMTQ4NEwxMTMuMzM5IDI1LjAyMjFMMTEzLjUwMSAyNC45MzM0TDExMy43MzEgMjQuODA3OUwxMTMuODg3IDI0LjcyMTVMMTE0LjExNiAyNC41OTI5TDExNC4yNjQgMjQuNTExN0wxMTQuNTA2IDI0LjM3MzZMMTE0LjYyOSAyNC4zMDM0TDExNC45NTIgMjQuMTE1MUwxMTQuOTgzIDI0LjA5NjZMMTE1LjMyOSAyMy44OTJMMTE1LjQzNSAyMy44Mjc4QzExNS41MDkgMjMuNzgxMiAxMTUuNTg5IDIzLjczNDcgMTE1LjY2NCAyMy42ODgyTDExNS43OTIgMjMuNjA5OUwxMTUuOTkyIDIzLjQ4NUwxMTYuMTIyIDIzLjQwMzFMMTE2LjMxMSAyMy4yODI3QzExNi4zNTQgMjMuMjU1MyAxMTYuMzk3IDIzLjIyOCAxMTYuNDM5IDIzLjE5OTlDMTE2LjUwMSAyMy4xNjA4IDExNi41NjIgMjMuMTIwOSAxMTYuNjIyIDIzLjA4MUwxMTYuNzQ2IDIzLjAwMDVMMTE2LjkyNyAyMi44Nzg3TDExNy4wNDEgMjIuODA0OEMxMTcuMTA3IDIyLjc2MDUgMTE3LjE3MSAyMi43MTY5IDExNy4yMzUgMjIuNjcyNkwxMTcuMzI3IDIyLjYwOTFDMTE3LjQyMSAyMi41NDQxIDExNy41MTMgMjIuNDc5MyAxMTcuNjAzIDIyLjQxNDhDMTE5LjYyNSAyMC45NjI3IDEyMi42MDEgMTguMzI4MiAxMjIuMzg3IDE1LjIwMTdDMTIyLjM4NyAxNS4xNzQ0IDEyMi4zODMgMTUuMTQ3MSAxMjIuMzgxIDE1LjExOTdDMTIyLjIzMyAxMy41ODk0IDEyMC44MzcgMTEuNDA2OCAxMTYuNjE5IDkuMDk0MjlMMTE2LjM1NCA4Ljk1NTQzTDExNi4wMzggOC43OTE0N0wxMTUuNjE2IDguNTc1OEwxMTUuNDY5IDguNTAxOTRDMTE1LjE2NCA4LjM0ODMxIDExNC44NTkgOC4xOTY2NSAxMTQuNTUzIDguMDQ2OTZMMTE0LjM1NyA3Ljk1MDk1TDExMy44ODUgNy43MjQyTDExMy42NDIgNy42MDg5OEwxMTMuMjc3IDcuNDM2ODlMMTEzLjAxIDcuMzEzNTRMMTEyLjczMiA3LjE4NTAzTDExMi40MzcgNy4wNTIwOEwxMTIuMTg1IDYuOTM5MDdMMTExLjg3NSA2LjgwMDIyTDExMS42NDcgNi42OTk3N0wxMTEuMzE1IDYuNTUyMDVMMTExLjEzOCA2LjQ3ODE5QzExMC43MDcgNi4yOTIwNyAxMTAuMjc0IDYuMTA5NjMgMTA5LjgzOCA1LjkzMDg5TDEwOS43MjIgNS44ODI4OUwxMDkuMzE4IDUuNzE4OTJMMTA5LjE3NCA1LjY2MTMxTDEwOC43NjcgNS41MDAyOUwxMDguNjM2IDUuNDQ4NTlMMTA4LjIwOCA1LjI4MjQxTDEwOC4xMzQgNS4yNTQzNEMxMDcuNDYyIDQuOTk2MzMgMTA2Ljc4NiA0Ljc0NzY3IDEwNi4xMDYgNC41MDgzNkwxMDYuMDggNC40OTk1QzEwNS45MTggNC40NDE4OSAxMDUuNzU0IDQuMzg1MDIgMTA1LjU5MSA0LjMyODg4TDEwNS41MyA0LjMwODJMMTA1LjAzOSA0LjE0MDU0TDEwNS4wMDcgNC4xMzAyQzEwNC4xMzIgMy44MzQ3NyAxMDMuMjUgMy41NTU1OCAxMDIuMzYyIDMuMjkyNjRMMTAyLjM0IDMuMjg1OTlMMTAxLjgyMiAzLjEzNDU4TDEwMS43ODMgMy4xMjM1QzEwMS4wMzUgMi45MDY4NSAxMDAuMjgyIDIuNzAxMjcgOTkuNTI0IDIuNTA2NzdDOTkuNTc0MiAzLjExNjExIDk5LjU4ODIgMy42NjE5MyA5OS41NDE3IDQuMDU3ODJDOTkuMzI0NiA1Ljg5OTg3IDk4LjM4NzMgNy40NTUzNSA5Ni45NDA0IDguODI2MThDOTMuOTQ0NiAxMS42NjM5IDg3Ljk5NiAxNC42MTQ1IDgwLjYwNDIgMTcuMjE1OUM3Mi43MTIzIDIwLjAwMjYgNTYuMzEzMyAyNS40MDQ2IDQxLjc3NzEgMjkuMDQ3NEMzMi4wMjc2IDMxLjQ5MTQgMTkuMTc2MSAzNC42NzEgMTIuOTk3OCAzNi4wMTUzQzEyLjc1ODUgMzYuMzgwMSAxMi41MjI2IDM2Ljc0NyAxMi4yOTAyIDM3LjExNThDMTIuMjgwNiAzNy4xMzA2IDEyLjI3MSAzNy4xNDUzIDEyLjI2MjEgMzcuMTYwMUwxMi4yNTE4IDM3LjE3NTZDMTIuMjEyNiAzNy4yMzc3IDEyLjE3MzUgMzcuMjk5IDEyLjEzNTEgMzcuMzYxQzEyLjA0MDYgMzcuNTExNyAxMS45NDY1IDM3LjY2MjggMTEuODUyOSAzNy44MTQ1QzExLjgzNzQgMzcuODM4OSAxMS44MjI3IDM3Ljg2MzIgMTEuODA3OSAzNy44ODg0QzExLjc5MzEgMzcuOTEzNSAxMS43NzI0IDM3Ljk0NTIgMTEuNzU1NSAzNy45NzRDMTEuNzM4NSAzOC4wMDI4IDExLjcwNzQgMzguMDQ3OSAxMS42ODE2IDM4LjA4OTNDMTEuNTg5MyAzOC4yMzcgMTEuNDk2OSAzOC4zOTEzIDExLjQwNTQgMzguNTQyOEMxMS4zODE3IDM4LjU4MjYgMTEuMzU4MSAzOC42MjI1IDExLjMzMTUgMzguNjYyNEwxMS4yNDUxIDM4LjgxMDFDMTEuMTQ5NiAzOC45NjgyIDExLjA1NTMgMzkuMTI2MiAxMC45NjIyIDM5LjI4NDNDMTAuOTU0OCAzOS4yOTYxIDEwLjk0ODIgMzkuMzA3OSAxMC45NDE1IDM5LjMxOThMMTAuOTM3MSAzOS4zMjc5QzEwLjcyMDkgMzkuNjk1MiAxMC41MDc3IDQwLjA2NDUgMTAuMjk3NSA0MC40MzU4TDEwLjE2NiA0MC42Njc3QzEwLjA3NjkgNDAuODI3MiA5Ljk4OCA0MC45ODcgOS44OTkzNyA0MS4xNDdMOS44OTE5OCA0MS4xNTk2TDkuODY5MDkgNDEuMjAxN0w5Ljc1MDkxIDQxLjQxNTFMOS40ODk0NSA0MS44OTZDOS40NTU0NyA0MS45NTk1IDkuNDIyMjQgNDIuMDIzIDkuMzg4MjYgNDIuMDg1OEw5LjM1MzU1IDQyLjE1QzkuMjYzNDQgNDIuMzE4NCA5LjE3MzMzIDQyLjQ4NjggOS4wODQ3IDQyLjY1Nkw5LjA3ODA1IDQyLjY2OTNMOS4wNzI4OCA0Mi42Nzg5QzguODY1MDkgNDMuMDcyOCA4LjY2MDUgNDMuNDcxMSA4LjQ1OTExIDQzLjg3MzlMOC4zNjAxNCA0NC4wNjk2QzguMjc0NDYgNDQuMjQxIDguMTkwMjYgNDQuNDEyNCA4LjEwNjA2IDQ0LjU4NjdWNDQuNTkyNkM4LjA4MzE3IDQ0LjYzODQgOC4wNjEwMSA0NC42ODQyIDguMDM4ODUgNDQuNzI5OUw4LjAyOTk5IDQ0Ljc0NzdMNy45ODU2NyA0NC44Mzg1QzcuOTAyNDYgNDUuMDA4OSA3LjgxOTc0IDQ1LjE4IDcuNzM3NSA0NS4zNTE4TDcuNjI2NzIgNDUuNTg2N0M3LjQ4MjQ0IDQ1Ljg4OTUgNy4zNDA2MyA0Ni4xOTM2IDcuMjAxMjkgNDYuNDk4OVY0Ni41MDI2QzcuMDYwOTUgNDYuODA3NCA2LjkyMzA4IDQ3LjExMzQgNi43ODc2NyA0Ny40MjA2QzYuNzcyMTYgNDcuNDU1NCA2Ljc1NjY1IDQ3LjQ4OTMgNi43NDE4OCA0Ny41MjMzTDYuNzIxOTQgNDcuNTY4NEM2LjY0MTY4IDQ3Ljc1MjUgNi41NjE0MiA0Ny45MzY5IDYuNDgxMTYgNDguMTIxNkw2LjQ1NDU3IDQ4LjE4MzZDNi40MzA5MyA0OC4yMzk3IDYuNDA2NTYgNDguMjk1MSA2LjM4MDcxIDQ4LjM1MTNDNi4zMDI0MiA0OC41MzQgNi4yMjQ4NiA0OC43MTcxIDYuMTQ4MDUgNDguOTAwOEM2LjExODUxIDQ4Ljk3MSA2LjA4ODk2IDQ5LjA0MTEgNi4wNjAxNiA0OS4xMTJDNS45MjYyMyA0OS40MzMxIDUuNzk0NTEgNDkuNzU1NiA1LjY2NTAxIDUwLjA3OTZWNTAuMDg3N1Y1MC4wOTI5QzUuNTM2IDUwLjQxNjkgNS40MDg0NyA1MC43NDIzIDUuMjgyNDIgNTEuMDY5M0w1LjI0OTE4IDUxLjE1NUM1LjE3NTMyIDUxLjM1MjIgNS4xMDE0NiA1MS41NTA5IDUuMDI3NjEgNTEuNzQ1OEw0Ljk1Mzc1IDUxLjk1MTlDNC44Nzk4OSA1Mi4xNDU0IDQuODEwNDYgNTIuMzM5NyA0Ljc0MDI5IDUyLjUzNDdMNC43MTE0OSA1Mi42MTU5QzQuNjk3NDUgNTIuNjUyOCA0LjY4NDE2IDUyLjY4OTggNC42NzA4NiA1Mi43Mjc0QzQuNTQ5NzQgNTMuMDY1MiA0LjQzMDgyIDUzLjQwMzcgNC4zMTQxMiA1My43NDNDNC4zMTI1NiA1My43NDY4IDQuMzExMzMgNTMuNzUwOCA0LjMxMDQzIDUzLjc1NDhMNC4zMDYgNTMuNzY3NEM0LjE4ODMyIDU0LjEwOTYgNC4wNzMzNCA1NC40NTIzIDMuOTYxMDggNTQuNzk1NUwzLjk1NjY1IDU0LjgwODhWNTQuODE1NEMzLjk1NTA4IDU0LjgxOSAzLjk1Mzg1IDU0LjgyMjcgMy45NTI5NSA1NC44MjY1QzMuODc2NjMgNTUuMDM0OCAzLjgwNTQ4IDU1LjI0NDMgMy43Mzk1IDU1LjQ1NTFaTTMuMDYxNDcgODAuNzk3N0M1LjIyNTU1IDgwLjgwOTUgMTAuODExNSA4MC41MjM3IDE3LjAxMiA3OS45MzA2QzI3LjgxMTcgNzguODk2NSA0OS4zOTkzIDc2LjA4OTkgNzQuMDMxNCA3Mi45MDQzQzkzLjIwNjggNzAuNDI0OSAxMzUuMTY0IDY0LjMzNjcgMTU3LjEwNCA2MS4xMjUyQzE1Ny4wNjggNjAuOTcyMSAxNTcuMDMyIDYwLjgyMTIgMTU2Ljk5NiA2MC42NzI1QzE1Ni45MjggNjAuMzk0OCAxNTYuODU5IDYwLjExODEgMTU2Ljc4OCA1OS44NDIzQzE1Ni43NjMgNTkuNzQ0MSAxNTYuNzM4IDU5LjY0NjYgMTU2LjcxNCA1OS41NDY5TDE1Ni43MSA1OS41MzA2QzE1Ni42NiA1OS4zNDI1IDE1Ni42MTEgNTkuMTU0MiAxNTYuNTYyIDU4Ljk2NTZDMTU2LjUzNSA1OC44NjU5IDE1Ni41MDggNTguNzY2MiAxNTYuNDgxIDU4LjY3MDJDMTU2LjQxNSA1OC40Mjc5IDE1Ni4zNDggNTguMTg2NCAxNTYuMjggNTcuOTQ1NkwxNTYuMjMyIDU3Ljc3MzVDMTU2LjE3NiA1Ny41Nzc4IDE1Ni4xMTkgNTcuMzgzNSAxNTYuMDYyIDU3LjE4OTNMMTU2LjAwOSA1Ny4wMDY5QzE1NS45OCA1Ni45MDc5IDE1NS45NSA1Ni44MDk2IDE1NS45MiA1Ni43MTE0QzE1NS44NjMgNTYuNTIyMyAxNTUuODA2IDU2LjMzMzMgMTU1Ljc0OCA1Ni4xNDQ5QzE1NS43MTcgNTYuMDQ1OSAxNTUuNjg3IDU1Ljk0NyAxNTUuNjU2IDU1Ljg0OTVDMTU1LjU5MSA1NS42NDE5IDE1NS41MjUgNTUuNDM1MSAxNTUuNDU4IDU1LjIyODNMMTU1LjQyNyA1NS4xMzAxQzE1NS40MDQgNTUuMDU2MiAxNTUuMzgxIDU0Ljk4NzUgMTU1LjM1OCA1NC45MTU5QzE1NS4zMTMgNTQuNzc4NSAxNTUuMjY4IDU0LjY0MTEgMTU1LjIyMSA1NC41MDM4QzE1NS4xOSA1NC40MDg1IDE1NS4xNTkgNTQuMzEzMiAxNTUuMTI3IDU0LjIxNzlMMTU1LjAyMyA1My45MTI5QzE1NS4wMjMgNTMuOTA1NSAxNTUuMDE3IDUzLjg5ODEgMTU1LjAxNSA1My44OTA3TDE1NC44MzYgNTMuMzczN0MxNTQuOCA1My4yNzI1IDE1NC43NjIgNTMuMTcwNiAxNTQuNzI5IDUzLjA2OTRDMTU0LjY0NSA1Mi44MzM2IDE1NC41NjEgNTIuNTk4NyAxNTQuNDc2IDUyLjM2NDhDMTU0LjQ0NSA1Mi4yNzk5IDE1NC40MTMgNTIuMTk0OSAxNTQuMzgyIDUyLjEwOTJDMTU0LjM1OCA1Mi4wNDM1IDE1NC4zMzMgNTEuOTc4NSAxNTQuMzA4IDUxLjkxMjhDMTU0LjI1NCA1MS43NjUgMTU0LjIgNTEuNjIyNSAxNTQuMTQ1IDUxLjQ3NzdDMTU0LjEwNSA1MS4zNzA2IDE1NC4wNjQgNTEuMjY0MyAxNTQuMDIzIDUxLjE1NzlDMTUzLjk5NiA1MS4wODQxIDE1My45NjggNTEuMDEwMiAxNTMuOTQgNTAuOTQyM0wxNTMuODI3IDUwLjY1MDVDMTUzLjc4NSA1MC41NDQ5IDE1My43NDQgNTAuNDM4NSAxNTMuNzAyIDUwLjMzMjlDMTUzLjY2IDUwLjIyNzMgMTUzLjYyMiA1MC4xMzM1IDE1My41ODIgNTAuMDM3NUMxNTMuNTMzIDQ5LjkxMDQgMTUzLjQ4MiA0OS43ODI5IDE1My40MjkgNDkuNjU0OUMxNTMuMzg4IDQ5LjU1NTIgMTUzLjM0NyA0OS40NTU1IDE1My4zMDYgNDkuMzU5NUwxNTMuMjI2IDQ5LjE2ODJDMTUzLjE3NCA0OS4wNDE5IDE1My4xMjIgNDguOTE1NiAxNTMuMDY5IDQ4Ljc4OTNDMTUzLjAyMiA0OC42Nzg1IDE1Mi45NzUgNDguNTY3NyAxNTIuOTI4IDQ4LjQ1NjlDMTUyLjg2IDQ4LjI5NzQgMTUyLjc5MiA0OC4xMzgzIDE1Mi43MjMgNDcuOTc5OEMxNTIuNjczIDQ3Ljg3MDQgMTUyLjYyNiA0Ny43NjE0IDE1Mi41OCA0Ny42NTI2QzE1Mi41MzkgNDcuNTU3MyAxNTIuNDk2IDQ3LjQ2MiAxNTIuNDUzIDQ3LjM2NjdDMTUyLjM5OCA0Ny4yNDI2IDE1Mi4zNDMgNDcuMTE3OCAxNTIuMjg4IDQ2Ljk5NzRDMTUyLjIzNyA0Ni44ODU5IDE1Mi4xODYgNDYuNzc1OSAxNTIuMTM1IDQ2LjY2MzZDMTUyLjA4NCA0Ni41NTEzIDE1Mi4wMzkgNDYuNDUxNiAxNTEuOTg4IDQ2LjM0NkMxNTEuOTU3IDQ2LjI3OTUgMTUxLjkyNiA0Ni4yMTMgMTUxLjg5NiA0Ni4xNDczQzE1MS44NDMgNDYuMDMyOCAxNTEuNzg5IDQ1LjkxOTEgMTUxLjczNiA0NS44MDQ2QzE1MS42NzIgNDUuNjY4MiAxNTEuNjA3IDQ1LjUzMTYgMTUxLjU0MiA0NS4zOTQ3TDE1MS41MzUgNDUuMzgxNEwxNTEuNTIyIDQ1LjM1NDFDMTUxLjQ2OSA0NS4yNDI1IDE1MS40MTYgNDUuMTMyNSAxNTEuMzYyIDQ1LjAyMUMxNTEuMjU5IDQ0LjgwNzMgMTUxLjE1NSA0NC41OTQ1IDE1MS4wNSA0NC4zODI4QzE1MC45OTEgNDQuMjYzMiAxNTAuOTMxIDQ0LjE0NDIgMTUwLjg3MSA0NC4wMjQ2TDE1MC43MDkgNDMuNzAzM0wxNTAuNjYgNDMuNjA3M0MxNTAuNjUyIDQzLjU4ODggMTUwLjY0MiA0My41NzA0IDE1MC42MzMgNDMuNTUyNkwxNTAuNDU0IDQzLjIwMzNMMTUwLjM5IDQzLjA4MDdDMTUwLjMzNyA0Mi45NzkyIDE1MC4yODUgNDIuODc4IDE1MC4yMzIgNDIuNzc3MUwxNTAuMDU1IDQyLjQzOTZDMTQ5Ljk0NCA0Mi4yMjgzIDE0OS44MzEgNDIuMDE3NiAxNDkuNzE3IDQxLjgwNzNMMTQ5LjUxOSA0MS40NDYyQzE0OS40NDYgNDEuMzE3NiAxNDkuMzc4IDQxLjE4ODQgMTQ5LjMwNiA0MS4wNTk5TDE0OS4yNzkgNDEuMDEwNEwxNDkuMDgyIDQwLjY1OTZDMTQ5LjA2IDQwLjYxODkgMTQ5LjAzNyA0MC41NzkxIDE0OS4wMTQgNDAuNTM4NEwxNDguODUyIDQwLjI1NDFDMTQ4Ljc4OCA0MC4xNDAzIDE0OC43MjQgNDAuMDI3MyAxNDguNjU4IDM5LjkxNDNDMTQ4LjU5MiAzOS44MDEzIDE0OC41MzkgMzkuNzA5IDE0OC40NzkgMzkuNjA2M0MxNDguNDEgMzkuNDg4MiAxNDguMzQxIDM5LjM2OTIgMTQ4LjI3MiAzOS4yNTE4TDE0OC4wNSAzOC44NzUxQzE0Mi40MzcgMzkuNjg3NiAxMzUuNjE3IDQwLjY0NzcgMTI3LjIzNSA0MS44MDgxQzEwOC44MzQgNDQuMzUxOCA4OC4xNjM3IDQ3LjczMDEgNjcuMDE2MyA1MC40NjUxQzM0LjUyNDggNTQuNjQyNiAxMy4yNTYzIDU3Ljc1NTggMi44MDg4NyA1OC41OTQ4QzIuNzYzNTcgNTguNzYxMyAyLjcxOTAxIDU4LjkyNzIgMi42NzUxOCA1OS4wOTI2QzIuNjY2MzIgNTkuMTI1OSAyLjY1NzQ2IDU5LjE1ODQgMi42NDkzMyA1OS4xOTA5TDIuNTk2MTYgNTkuMzkxQzIuNTk0NSA1OS4zOTYzIDIuNTkzMjYgNTkuNDAxOCAyLjU5MjQ2IDU5LjQwNzNDMi41NTM1NiA1OS41NTUgMi41MTQ2NiA1OS43MDI3IDIuNDc1NzYgNTkuODUwNEMyLjQ0NDc0IDU5Ljk3MTYgMi40MTUyIDYwLjA5MjcgMi4zODQxOCA2MC4yMTM4QzIuMzcwMTUgNjAuMjcxNCAyLjM1NjExIDYwLjMyODMgMi4zNDEzNCA2MC4zODUyQzIuMzMyNDggNjAuNDIxNCAyLjMyMzYxIDYwLjQ1OSAyLjMxNDAxIDYwLjQ5MzdDMi4zMDQ0MSA2MC41Mjg1IDIuMjk5OTggNjAuNTUwNiAyLjI5MzMzIDYwLjU3ODdDMi4yNzI2NSA2MC42NjE0IDIuMjUyNzEgNjAuNzQ0OSAyLjIzMjc3IDYwLjgyNzZDMC43NTUyOTMgNjYuOTQwNSAwLjAwNTgzMjkyIDczLjIwNjYgMCA3OS40OTU1QzAuMDIxNDE5MiA4MC4zMTkxIDEuMjA2ODYgODAuNzgzNiAzLjA2MDczIDgwLjc5NEwzLjA2MTQ3IDgwLjc5NzdaTTEzOS42NzIgMTMxLjk1NUMxMzQuMzU0IDEzNi45MDkgMTE1LjI3NSAxNDUuODg1IDk2LjM3MjQgMTQ5LjYxOEM3OC41MDU4IDE1My4xNDggNjIuNDI1MiAxNTMuOTM2IDUxLjc1MjUgMTUzLjk0OUM1MS45MzY0IDE1NC4yMTIgNTIuMzQzNCAxNTQuNDU5IDUyLjk4NDUgMTU0LjcwMkM1NC4yNjgyIDE1NS4xNTkgNTUuNTY2NiAxNTUuNTgyIDU2Ljg3OTggMTU1Ljk3NEw1Ni45MTM4IDE1NS45ODRDNTcuNDc2MSAxNTYuMTUxIDU4LjA0MDQgMTU2LjMxMiA1OC42MDY2IDE1Ni40NjdMNTguNjgwNSAxNTYuNDg3QzU4LjkzMDYgMTU2LjU1NSA1OS4xODEzIDE1Ni42MjIgNTkuNDMyNCAxNTYuNjg4TDU5LjU0NjEgMTU2LjcxOEM1OS44MTY1IDE1Ni43ODggNjAuMDg3MyAxNTYuODU3IDYwLjM1ODYgMTU2LjkyNEw2MC40Njg2IDE1Ni45NTFDNjAuNjk0MiAxNTcuMDA3IDYwLjkxOTkgMTU3LjA2MSA2MS4xNDU5IDE1Ny4xMTVMNjEuMzY3NSAxNTcuMTY4QzYxLjYwMzkgMTU3LjIyNCA2MS44NDA3IDE1Ny4yNzggNjIuMDc4IDE1Ny4zMzFMNjIuMjY0OSAxNTcuMzczQzYyLjQ3NjEgMTU3LjQyIDYyLjY4NzQgMTU3LjQ2NiA2Mi44OTk0IDE1Ny41MTJMNjMuMjE3IDE1Ny41NzlMNjMuNjk2MyAxNTcuNjc3TDY0LjAzMDkgMTU3Ljc0NUM2NC4yNTI1IDE1Ny43ODkgNjQuNDY4OSAxNTcuODMxIDY0LjY4ODIgMTU3Ljg3M0w2NS4wOTg5IDE1Ny45NDdMNjUuNDQzMSAxNTguMDFMNjUuODg2MiAxNTguMDg5TDY2LjA3NTMgMTU4LjEyMUM2Ni4zOTA0IDE1OC4xNzUgNjYuNzA2NiAxNTguMjI3IDY3LjAyMzcgMTU4LjI3OEw2Ny4yNDUyIDE1OC4zMTNMNjcuNzggMTU4LjM5NEw2Ny44NzY3IDE1OC40MDlDNjguMjYzMyAxNTguNDY2IDY4LjY1MDUgMTU4LjUyIDY5LjAzODUgMTU4LjU3Mkw2OS4wODU4IDE1OC41NzhDNjkuMjg5NyAxNTguNjA1IDY5LjQ5MzUgMTU4LjYzMSA2OS42OTc0IDE1OC42NTdMNjkuNzUxMyAxNTguNjYzQzcwLjM3OTEgMTU4Ljc0IDcxLjAwOTEgMTU4LjgxMSA3MS42NDEzIDE1OC44NzRINzEuNjUwOUM3Mi4wNzkzIDE1OC45MTcgNzIuNTA5MiAxNTguOTU3IDcyLjk0MDUgMTU4Ljk5M0M3NS4xNDYgMTU5LjE3NiA3Ny4zNzYgMTU5LjI2OCA3OS42MzA3IDE1OS4yN0MxMDMuNTg2IDE1OS4yNyAxMjUuMDcgMTQ4LjY5MSAxMzkuNjY5IDEzMS45NTJMMTM5LjY3MiAxMzEuOTU1Wk0xNDUuMDk4IDEwNi42NzZDMTQzLjA0MyAxMDYuNjc2IDEzMS4yMTMgMTA2Ljk1MyAxMTIuMTI3IDEwOC43ODNDODcuMTIzNyAxMTEuMTggNTAuNzA0NCAxMTYuNDMzIDM1Ljk3NzYgMTE4Ljk0NEMyNi44MzA5IDEyMC41MDQgMTguMzAwMSAxMjIuMzI4IDEzLjE0OTIgMTIzLjQ4NkMxMy4zODAxIDEyMy44MzYgMTMuNjE0IDEyNC4xODQgMTMuODUwOCAxMjQuNTI5TDE0LjAxMDQgMTI0Ljc2M0MxNC4xMDg5IDEyNC45MTEgMTQuMjEgMTI1LjA1NiAxNC4zMTM5IDEyNS4xOTlDMTQuMzcwMSAxMjUuMjggMTQuNDI2OSAxMjUuMzYxIDE0LjQ4MzEgMTI1LjQ0QzE0LjU4NzIgMTI1LjU4OCAxNC42OTA2IDEyNS43MzYgMTQuNzk1NSAxMjUuODg0TDE0LjkwNDggMTI2LjAzMUMxNS4xMjEgMTI2LjMzMyAxNS4zMzk2IDEyNi42MzQgMTUuNTYwNyAxMjYuOTMyQzE1LjYwNjUgMTI2Ljk5NCAxNS42NTA4IDEyNy4wNTUgMTUuNjk2NiAxMjcuMTE2QzE1LjgwNTkgMTI3LjI2MyAxNS45MTgyIDEyNy40MTEgMTYuMDI3NSAxMjcuNTU5TDE2LjE5MTQgMTI3Ljc3NUMxNi4zMDM3IDEyNy45MjMgMTYuNDE2NyAxMjguMDcxIDE2LjUzMDUgMTI4LjIxOEwxNi42NTA5IDEyOC4zNzNDMTYuOTA1OSAxMjguNzAyIDE3LjE2MjkgMTI5LjAyOSAxNy40MjE5IDEyOS4zNTRMMTcuNDYxOCAxMjkuNDA0QzE3LjU4NTIgMTI5LjU1OCAxNy43MSAxMjkuNzExIDE3LjgzMTEgMTI5Ljg2NEwxNy45NzUxIDEzMC4wNEMxOC4wOTkyIDEzMC4xODggMTguMjIzMyAxMzAuMzQzIDE4LjM0ODEgMTMwLjQ5M0wxOC40NjExIDEzMC42MjlDMTguODc5MiAxMzEuMTMgMTkuMzAzMSAxMzEuNjI1IDE5LjczMyAxMzIuMTE1TDE5Ljg0MDggMTMyLjIzOEMxOS45NzgyIDEzMi4zOTQgMjAuMTE2MyAxMzIuNTQ5IDIwLjI1NTIgMTMyLjcwNUMyMC4yODY5IDEzMi43NDEgMjAuMzE4NyAxMzIuNzc4IDIwLjM1MTIgMTMyLjgxMkMyMC44MDcyIDEzMy4zMiAyMS4yNjkzIDEzMy44MjIgMjEuNzM3NSAxMzQuMzE4TDIxLjc4NDEgMTM0LjM2N0MyMS45MzY3IDEzNC41MjggMjIuMDkwMSAxMzQuNjg5IDIyLjI0NDIgMTM0Ljg0OUwyMi4zMTgxIDEzNC45MjdDMjIuOTcxIDEzNS42MDQgMjMuNjM1NyAxMzYuMjY4IDI0LjMxMjMgMTM2LjkyMUwyNC4zNjMyIDEzNi45N0MyNS4wNTI2IDEzNy42MzMgMjUuNzUyIDEzOC4yODQgMjYuNDYxNiAxMzguOTIyTDI2LjQ4NiAxMzguOTQ0QzI3LjIwNzggMTM5LjU5MSAyNy45NDEgMTQwLjIyNSAyOC42ODU1IDE0MC44NDVDMjkuMDgzNiAxNDEuMTggMjkuOTUyMiAxNDEuMjQgMzIuNjc4MyAxNDAuNzIzQzM4LjM5ODcgMTM5LjY0MSA1OS44MjMxIDEzNS45MjMgODMuNTc3OCAxMzIuNjY3QzEwNS45MjcgMTI5LjYwNCAxMjkuOTI3IDEyOC45NTUgMTMzLjEyNiAxMjguOTg3QzEzNy4zMDUgMTI5LjAzIDE0MS4yNiAxMjkuOTYgMTM5LjY2NyAxMzEuOTUxQzEzOS44NDYgMTMxLjc0NyAxNDAuMDI0IDEzMS41NDEgMTQwLjIgMTMxLjMzNEwxNDAuMjM5IDEzMS4yODhDMTQwLjI0MiAxMzEuMjg0IDE0MC4yNDYgMTMxLjI4IDE0MC4yNDkgMTMxLjI3NkMxNDAuNDE3IDEzMS4wNzkgMTQwLjU4NiAxMzAuODggMTQwLjc1MyAxMzAuNjc5TDE0MC43ODggMTMwLjYzN0MxNDAuNzk4IDEzMC42MjUgMTQwLjgwOCAxMzAuNjEzIDE0MC44MTkgMTMwLjZDMTQwLjk4NCAxMzAuNDAzIDE0MS4xNDkgMTMwLjIwNCAxNDEuMzEzIDEzMC4wMDFMMTQxLjM3MyAxMjkuOTI3QzE0MS41NCAxMjkuNzIyIDE0MS43MDYgMTI5LjUxNiAxNDEuODcxIDEyOS4zMDlMMTQxLjkwMyAxMjkuMjdDMTQyLjUyIDEyOC40OTUgMTQzLjEyNCAxMjcuNzA5IDE0My43MTQgMTI2LjkxMkwxNDMuNzQyIDEyNi44NzRDMTQ0LjMzMyAxMjYuMDc2IDE0NC45MDcgMTI1LjI2NyAxNDUuNDY1IDEyNC40NDdMMTQ1LjQ2OSAxMjQuNDRMMTQ1LjQ4NCAxMjQuNDE4QzE0NS42MzcgMTI0LjE5NCAxNDUuNzg4IDEyMy45NyAxNDUuOTM4IDEyMy43NDVDMTQ1Ljk1MiAxMjMuNzIzIDE0NS45NjYgMTIzLjcwMiAxNDUuOTgxIDEyMy42OEMxNDYuMTI4IDEyMy40NiAxNDYuMjc0IDEyMy4yMzggMTQ2LjQxOCAxMjMuMDE2TDE0Ni40MjUgMTIzLjAwNEMxNDYuNDM4IDEyMi45ODUgMTQ2LjQ1IDEyMi45NjcgMTQ2LjQ2MiAxMjIuOTQ4QzE0Ni42MDkgMTIyLjcyMiAxNDYuNzU1IDEyMi40OTYgMTQ2Ljg5OCAxMjIuMjY4QzE0Ni45MDcgMTIyLjI1NiAxNDYuOTE1IDEyMi4yNDIgMTQ2LjkyMyAxMjIuMjNDMTQ4LjE1NCAxMjAuMjkxIDE0OS4zMDEgMTE4LjI5NyAxNTAuMzYzIDExNi4yNDdMMTUwLjM3NyAxMTYuMjIxQzE1MC41MDQgMTE1Ljk3NSAxNTAuNjMgMTE1LjcyOSAxNTAuNzU2IDExNS40ODNMMTUwLjc2OCAxMTUuNDU4TDE1MC43NzkgMTE1LjQzOEMxNTAuOTA0IDExNS4xODkgMTUxLjAyNyAxMTQuOTQgMTUxLjE0OCAxMTQuNjlMMTUxLjE1MiAxMTQuNjc5TDE1MS4xNjIgMTE0LjY2MUMxNTIuMTgzIDExMi41NzcgMTUzLjExNSAxMTAuNDQ0IDE1My45NTggMTA4LjI2MkMxNTQuMjY1IDEwNy4zNjUgMTUzLjMwNSAxMDYuNjcyIDE0NS4wOTcgMTA2LjY3MkwxNDUuMDk4IDEwNi42NzZaTTY2LjQyNTQgOS4xODM2NkM2Ny4wODA1IDQuNDM2NzIgNTQuNDk4NiA1LjIyMTExIDUzLjk0MzIgNC4yMzUwOEM0Ny40MjA3IDYuNDU4NTMgNDEuMjE1NyA5LjUyMjQgMzUuNDg1IDEzLjM0OTNDMzUuMjM3NiAxMy41MTI2IDM1LjEzNzggMTMuODcwOCAzNi4yODE5IDE0LjEwNDJDMzguNzczMiAxNC42MTM4IDQ0LjA0MzggMTUuMTYzMyA0Ny43ODQgMTUuMTk0M0M1NS43NTIgMTUuMjYzIDY1LjgyNzkgMTMuNTE3IDY2LjQyNTQgOS4xODM2NlpcIixcbiAgICAgICAgICBmaWxsOiBcInVybCgjcGFpbnQxX2xpbmVhcilcIlxuICAgICAgICB9XG4gICAgICApLFxuICAgICAgLyogQF9fUFVSRV9fICovIGMoXG4gICAgICAgIFwicGF0aFwiLFxuICAgICAgICB7XG4gICAgICAgICAgc3R5bGU6IHsgbWl4QmxlbmRNb2RlOiBcIm11bHRpcGx5XCIgfSxcbiAgICAgICAgICBkOiBcIk0xNTQuNjc1IDEwOC4zMzhDMTQ4LjA1OCAxMjUuNDU3IDEzNS42OTQgMTM5LjcxNiAxMTkuOTU0IDE0OC43NTFDMTE5LjcwNCAxNDguMjM0IDExOC43NTUgMTQ3LjUzOCAxMTYuNTQgMTQ2LjUwOEMxMTQuMzI1IDE0NS40NzkgMTA0LjYzNyAxNDEuODkxIDEwNC43MjIgMTM2LjgzOEMxMDQuODMyIDEzMC40NjggMTEzLjQ4NyAxMjQuNjQzIDEyNS43NzcgMTE5Ljg0M0MxMzcuNTYzIDExNS4yNDEgMTQ4LjM1MiAxMTEuOTYzIDE1MC4zNDIgMTExLjE2NUMxNTIuNzE4IDExMC4yMTIgMTU0LjExNyAxMDkuNjI2IDE1NC42NzUgMTA4LjMzOFpNMTguMjcxMyA2OS44NzM5QzMyLjI2MTggNjMuNzgyIDQ2LjkyODcgNTYuOTcwNyA1Ni41MjE2IDUyLjQ1MTJDNzEuNTI5MSA0NS4zODA3IDg0LjYzMzIgMzYuNzY0MiA4MS43ODE1IDI3Ljk4NzVDNzkuMjQ1OSAyMC4xNzEgNjguODE1NSAyMS4xMTA1IDQ4LjAwMTIgMjQuODM1MkMzNC42MTI3IDI3LjIzMTIgMTYuOTEwMSAzMS42NDIxIDE0LjUyMyAzNC44MzU4TDE0LjQyOTkgMzQuOTcyNEMxNC4zMzE3IDM1LjEyMDEgMTQuMjMyNyAzNS4yNjc4IDE0LjEzNDUgMzUuNDE1NkM1Ljg3Njk4IDQ3Ljc1ODIgMC45NzcxNTIgNjIuNTQ1NiAwLjc0NjcxMSA3OC40NTc4QzAuNzQyMjc5IDc4LjgwMjcgMC43Mzg1ODYgNzkuMTQ3NyAwLjczODU4NiA3OS40OTE4QzAuNzY4ODY5IDc4LjA3NiA1Ljg0NzQ0IDc1LjI4NDEgMTguMjcxMyA2OS44NzM5Wk0xMzMuNTAzIDM3Ljc4NjRDMTE3LjE4IDQwLjE4NjEgOTEuMjc3NiA0NC45ODE4IDkzLjgwNTggNjAuMjg5OUM5NS43NTIgNzIuMDc1NiAxMTkuMjk4IDc1LjUxMyAxMjkuMTM5IDc3LjQxMDVDMTM2Ljk1MSA3OC45MTggMTUyLjIzOCA4MS4wMDA4IDE1OC43NzkgODIuNjM1M0MxNTkuNjUyIDgyLjg1NjkgMTU5LjkyNiA4My4yNzM0IDE1OS45MDMgODMuNzQzMkMxNTkuOTAzIDgzLjczOCAxNTkuOTAzIDgzLjczMzYgMTU5LjkwMyA4My43Mjg0QzE1OS45MzYgODMuMDUwNCAxNTkuOTYxIDgyLjM3MDEgMTU5Ljk3NiA4MS42ODc3VjgxLjU2NThDMTU5Ljk5MiA4MC45MjMyIDE2MCA4MC4yNzk0IDE2MCA3OS42MzQ0QzE2MCA2NC45MDMxIDE1NiA1MS4xMDc3IDE0OS4wMjcgMzkuMjcxN0wxNDguNzUyIDM4LjgyODZDMTQ3LjkxMyAzNy40NzE4IDE0Mi4yNzIgMzYuNDk2OSAxMzMuNTAzIDM3Ljc4NjRaTTkyLjc1MjYgOTQuODE3NkM5MS4xOTc4IDg5LjA1NjYgODIuNzYzMSA4NC44OTAyIDcwLjcyNDcgODUuMTg0OUM1OC4wMjA5IDg1LjQ5NjYgNDQuODI2NyA4Ni42OTQ2IDI4LjkyNDggOTAuMjcwMUMxNC43MTUgOTMuNDY1MyA2LjEwMjI1IDk3LjE0NzkgNC43NzI3OCA5Ny42OTY3QzMuNTI2NzggOTguMjEzNyAzLjEwNDMgOTguODg3MyAzLjMzMjUzIDk5Ljg2NTJWOTkuODcxOEMzLjM4ODE3IDEwMC4wODMgMy40NDM4MSAxMDAuMjkyIDMuNDk5NDUgMTAwLjUwMUMzLjU3MzMxIDEwMC43NzYgMy42NDcxNyAxMDEuMDUxIDMuNzI3NjcgMTAxLjMyNUMzLjc1MTMxIDEwMS40MDkgMy43NzU2OCAxMDEuNDkzIDMuODAxNTMgMTAxLjU3N0MzLjg2NTA1IDEwMS43OTkgMy45Mjg1NyAxMDIuMDIgMy45OTM1NyAxMDIuMjM3QzQuMDEyMDMgMTAyLjMgNC4wMzA1IDEwMi4zNjQgNC4wNDk3IDEwMi40MjdDNC4xMzA0NSAxMDIuNjk3IDQuMjEyMTkgMTAyLjk2NiA0LjI5NDkxIDEwMy4yMzRDNC4zMTkyOSAxMDMuMzEzIDQuMzQ0NCAxMDMuMzkxIDQuMzY4NzcgMTAzLjQ3QzQuNDMzNzcgMTAzLjY3OCA0LjUwMDI0IDEwMy44ODUgNC41NjY3MiAxMDQuMDkyTDQuNjQ0MjcgMTA0LjMzNEM0LjczMDQ0IDEwNC41OTggNC44MTgwOCAxMDQuODYyIDQuOTA3MjEgMTA1LjEyNUw0Ljk3NTkgMTA1LjMyN0M1LjA0OTc2IDEwNS41MzUgNS4xMTg0NCAxMDUuNzQzIDUuMTkwODMgMTA1Ljk1TDUuMjg1MzcgMTA2LjIxOUM1LjM3MDA2IDEwNi40NTkgNS40NTU5OCAxMDYuNjk3IDUuNTQzMTQgMTA2LjkzNUw1LjYwOTYxIDEwNy4xMTdDNS42OTI4MyAxMDcuMzQ0IDUuNzc3NTIgMTA3LjU3MSA1Ljg2MzY5IDEwNy43OThMNS45NzIyNiAxMDguMDgyQzYuMDQ1NjMgMTA4LjI3NSA2LjExOTQ4IDEwOC40NjcgNi4xOTM4NCAxMDguNjU4QzYuMjI0MTIgMTA4LjczNiA2LjI1MzY2IDEwOC44MTMgNi4yODQ2OCAxMDguODkxQzYuMzgzMTYgMTA5LjEzNyA2LjQ4MTY0IDEwOS4zODMgNi41ODAxMiAxMDkuNjI5QzYuNjE5MjcgMTA5LjcyOCA2LjY1OTg5IDEwOS44MjQgNi42OTk3NyAxMDkuOTI1QzYuNzcwNjggMTEwLjA5NiA2Ljg0MTgzIDExMC4yNjkgNi45MTMyMyAxMTAuNDQyTDcuMDM3MzEgMTEwLjczN0M3LjEzODc0IDExMC45NzYgNy4yNDA5MiAxMTEuMjE0IDcuMzQzODMgMTExLjQ1MUM3LjM4NjY3IDExMS41NDkgNy40MzAyNCAxMTEuNjQ3IDcuNDczMDggMTExLjc0NkM3LjU0Mzk5IDExMS45MDcgNy42MTUzOCAxMTIuMDY4IDcuNjg3MjcgMTEyLjIyOEw3LjgzNDk5IDExMi41NTlDNy45MTY3MyAxMTIuNzQgNy45OTk0NSAxMTIuOTIgOC4wODMxNiAxMTMuMUM4LjE0OTYzIDExMy4yNDggOC4yMTc1OCAxMTMuMzg3IDguMjg0NzkgMTEzLjUzMUM4LjM1ODY1IDExMy42ODcgOC40MzI1MSAxMTMuODQzIDguNTA2MzcgMTEzLjk5OEw4LjY3OTIgMTE0LjM1N0M4Ljc0NjQyIDExNC40OTUgOC44MTQzNyAxMTQuNjM0IDguODgyMzIgMTE0Ljc3MkM4Ljk2MjgyIDExNC45MzUgOS4wNDMzMyAxMTUuMDk4IDkuMTI1MzEgMTE1LjI2QzkuMjA3MyAxMTUuNDIzIDkuMjg5MjggMTE1LjU4OCA5LjM3Mjc0IDExNS43NTJDOS40MzgyMyAxMTUuODggOS41MDQyMSAxMTYuMDA4IDkuNTcwNjkgMTE2LjEzNkM5LjYzMDc2IDExNi4yNTIgOS42OTEzMiAxMTYuMzY5IDkuNzUyMzggMTE2LjQ4NUM5LjgyMDMzIDExNi42MTcgOS44ODkwMiAxMTYuNzQ3IDkuOTU4NDUgMTE2Ljg3OEMxMC4wNjA5IDExNy4wNzEgMTAuMTY0MyAxMTcuMjY1IDEwLjI2ODcgMTE3LjQ1OEMxMC4zNDg0IDExNy42MDUgMTAuNDI4NyAxMTcuNzUzIDEwLjUwOTQgMTE3LjkwMUMxMC41NjM2IDExNy45OTkgMTAuNjE4IDExOC4wOTggMTAuNjcyNyAxMTguMTk2QzEwLjc1MTUgMTE4LjMzOSAxMC44MzA3IDExOC40ODEgMTAuOTEwNSAxMTguNjIzTDExLjA1MjMgMTE4Ljg3NEMxMS4yIDExOS4xMzcgMTEuMzUwNyAxMTkuMzk5IDExLjUwNDMgMTE5LjY2QzExLjU0OTQgMTE5LjczNCAxMS41OTM3IDExOS44MTMgMTEuNjM4NyAxMTkuODlDMTEuNzI3OSAxMjAuMDQyIDExLjgxNzUgMTIwLjE5NCAxMS45MDc2IDEyMC4zNDVMMTIuMDI4NyAxMjAuNTQ3QzEyLjIxNjMgMTIwLjg2IDEyLjQwNTcgMTIxLjE3MSAxMi41OTY3IDEyMS40OEwxMi42NDc3IDEyMS41NjJDMTIuNzQ5MSAxMjEuNzI1IDEyLjg1MDggMTIxLjg4OCAxMi45NTI3IDEyMi4wNUwxMy4wNTM5IDEyMi4yMUMxMy4zODA0IDEyMi43MjUgMTMuNzEyNSAxMjMuMjM2IDE0LjA1MDMgMTIzLjc0M0wxNC4xMjQxIDEyMy44NUMxNC40ODIxIDEyNC4zODcgMTQuODQ3MiAxMjQuOTE4IDE1LjIxOTQgMTI1LjQ0NkMxNS4yMjMxIDEyNS40NTIgMTUuMjI3NiAxMjUuNDU4IDE1LjIzMiAxMjUuNDY1QzE4LjE4MTUgMTI5LjY0OSAyMS41MjU0IDEzMy41NCAyNS4yMTc4IDEzNy4wODZDMjUuMzQ4MyAxMzcuMjEyIDI1LjQ3OTcgMTM3LjMzOCAyNS42MTIyIDEzNy40NjNMMjUuNzAzOCAxMzcuNTVDMjYuMTk2MiAxMzguMDE2IDI2LjY5NiAxMzguNDc2IDI3LjIwMzEgMTM4LjkzTDI3LjIyNiAxMzguOTVDMjcuNzMyNyAxMzkuNDA1IDI4LjI0NTUgMTM5Ljg1MyAyOC43NjQ1IDE0MC4yOTRMMjguODc4MyAxNDAuMzkyTDI4Ljg4NDkgMTQwLjM5OEMyOS4wNjcxIDE0MC41NTMgMjkuMjUwMyAxNDAuNzA2IDI5LjQzNDQgMTQwLjg1OUMyOS41MTUyIDE0MC45MjMgMjkuNjA2NCAxNDAuOTczIDI5LjcwNCAxNDEuMDA2QzI5LjQ5MiAxNDAuOTI0IDI5Ljg0MDYgMTQwLjU2MyAzMC45MTQ2IDE0MC4xNThDMzUuNjQxNiAxMzguMzg1IDQxLjU5NjggMTM2LjAyOCA1Mi4wOTk2IDEzMC44MjdDNjIuNjM1NyAxMjUuNjEgNjYuNzA2OCAxMjMuNDIzIDc4LjAxMDIgMTE1LjE3N0M4OC43MjQzIDEwNy4zNTcgOTQuODI4IDEwMi40OTkgOTIuNzUyNiA5NC44MTc2Wk04Ni40ODYzIDE1MC4yNDFDODUuMzk4NCAxNDYuOTQ5IDc2Ljg1NjUgMTQ1Ljc0OCA2Ni41MDE1IDE0Ny44MzFDNjAuNTYzMiAxNDkuMDI1IDU2LjMzNTUgMTUwLjgzNSA1NC40NjI0IDE1MS44MTlDNTEuOTY5NiAxNTMuMTI3IDUxLjY3NDIgMTUzLjkzOCA1My43ODY2IDE1NC43MjJINTMuNzkxQzUzLjkyNDcgMTU0Ljc2OSA1NC4wNTk5IDE1NC44MTYgNTQuMTk0MyAxNTQuODYyTDU0LjUzNTUgMTU0Ljk4MUM1NS4wNzcxIDE1NS4xNjYgNTUuNjI2NyAxNTUuMzQ3IDU2LjE4NDEgMTU1LjUyNUw1Ni4yMjM5IDE1NS41MzhDNTYuNzc3NCAxNTUuNzEzIDU3LjMzNjUgMTU1Ljg4NCA1Ny45MDEzIDE1Ni4wNTFDNTguMDkzOCAxNTYuMTA3IDU4LjI4NjYgMTU2LjE2MyA1OC40Nzk2IDE1Ni4yMTlMNTguNTkxMSAxNTYuMjUxQzYzLjc2MzggMTU3LjcxNyA2OS4wNzIgMTU4LjY1NCA3NC40MzQgMTU5LjA0N0M3NS45NDczIDE1Ny40MzYgODguMTk2MiAxNTUuNDE5IDg2LjQ4NjMgMTUwLjI0MVpNODIuODAyMiA4LjUxMzc3QzEwNS41NzUgOC4yMDIwOCAxMTUuMTc5IDEwLjYzOCAxMTkuNTUgMTIuMTc3MkMxMjIuMTQ5IDEzLjA5MyAxMjIuODIgMTMuOTY1MyAxMjMuMDExIDE0LjU0NTFDMTIyLjU5NyAxMy4wNjM1IDEyMS4wNjUgMTEuMTIxNyAxMTcuMzMxIDkuMDc5NTNMMTE3LjMxOCA5LjA3MjE0QzEwNi4yNzYgMy4yNzg2MiA5My43MDY4IDAgODAuMzcyMyAwQzY0LjA0MTIgMCA0OC44NTk0IDQuOTE2ODIgMzYuMjIzNiAxMy4zNDkzQzQ0LjMwMjMgMTEuNjkyNyA2My4wMDI3IDguNzg0MDkgODIuODAyMiA4LjUxMzc3WlwiLFxuICAgICAgICAgIGZpbGw6IFwidXJsKCNwYWludDJfbGluZWFyKVwiXG4gICAgICAgIH1cbiAgICAgICksXG4gICAgICAvKiBAX19QVVJFX18gKi8gZTEoXCJkZWZzXCIsIHsgY2hpbGRyZW46IFtcbiAgICAgICAgLyogQF9fUFVSRV9fICovIGUxKFxuICAgICAgICAgIFwibGluZWFyR3JhZGllbnRcIixcbiAgICAgICAgICB7XG4gICAgICAgICAgICBpZDogXCJwYWludDBfbGluZWFyXCIsXG4gICAgICAgICAgICB4MTogXCI3LjQxNzk2XCIsXG4gICAgICAgICAgICB5MTogXCIxMTMuODQ3XCIsXG4gICAgICAgICAgICB4MjogXCIxNTIuNTM3XCIsXG4gICAgICAgICAgICB5MjogXCI0Ni4yNjhcIixcbiAgICAgICAgICAgIGdyYWRpZW50VW5pdHM6IFwidXNlclNwYWNlT25Vc2VcIixcbiAgICAgICAgICAgIGNoaWxkcmVuOiBbXG4gICAgICAgICAgICAgIC8qIEBfX1BVUkVfXyAqLyBjKFwic3RvcFwiLCB7IHN0b3BDb2xvcjogXCIjNkQ2RTcxXCIgfSksXG4gICAgICAgICAgICAgIC8qIEBfX1BVUkVfXyAqLyBjKFwic3RvcFwiLCB7IG9mZnNldDogXCIwLjU1XCIsIHN0b3BDb2xvcjogXCIjQjFCM0I2XCIsIHN0b3BPcGFjaXR5OiBcIjAuNlwiIH0pLFxuICAgICAgICAgICAgICAvKiBAX19QVVJFX18gKi8gYyhcInN0b3BcIiwgeyBvZmZzZXQ6IFwiMVwiLCBzdG9wQ29sb3I6IFwiI0Q4RDlEQVwiIH0pXG4gICAgICAgICAgICBdXG4gICAgICAgICAgfVxuICAgICAgICApLFxuICAgICAgICAvKiBAX19QVVJFX18gKi8gZTEoXG4gICAgICAgICAgXCJsaW5lYXJHcmFkaWVudFwiLFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGlkOiBcInBhaW50MV9saW5lYXJcIixcbiAgICAgICAgICAgIHgxOiBcIjEuNDIyNTNcIixcbiAgICAgICAgICAgIHkxOiBcIjkxLjMzNTlcIixcbiAgICAgICAgICAgIHgyOiBcIjE1OC42XCIsXG4gICAgICAgICAgICB5MjogXCI2OS4yNDYxXCIsXG4gICAgICAgICAgICBncmFkaWVudFVuaXRzOiBcInVzZXJTcGFjZU9uVXNlXCIsXG4gICAgICAgICAgICBjaGlsZHJlbjogW1xuICAgICAgICAgICAgICAvKiBAX19QVVJFX18gKi8gYyhcInN0b3BcIiwgeyBzdG9wQ29sb3I6IFwiIzQxNDA0MlwiIH0pLFxuICAgICAgICAgICAgICAvKiBAX19QVVJFX18gKi8gYyhcInN0b3BcIiwgeyBvZmZzZXQ6IFwiMC41MVwiLCBzdG9wQ29sb3I6IFwiI0QzRDVENlwiIH0pLFxuICAgICAgICAgICAgICAvKiBAX19QVVJFX18gKi8gYyhcInN0b3BcIiwgeyBvZmZzZXQ6IFwiMVwiLCBzdG9wQ29sb3I6IFwiIzQxNDA0MlwiIH0pXG4gICAgICAgICAgICBdXG4gICAgICAgICAgfVxuICAgICAgICApLFxuICAgICAgICAvKiBAX19QVVJFX18gKi8gZTEoXG4gICAgICAgICAgXCJsaW5lYXJHcmFkaWVudFwiLFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGlkOiBcInBhaW50Ml9saW5lYXJcIixcbiAgICAgICAgICAgIHgxOiBcIjguMTIyMzFcIixcbiAgICAgICAgICAgIHkxOiBcIjExMy4xNjlcIixcbiAgICAgICAgICAgIHgyOiBcIjE1Mi41MDNcIixcbiAgICAgICAgICAgIHkyOiBcIjQ1Ljg0MzhcIixcbiAgICAgICAgICAgIGdyYWRpZW50VW5pdHM6IFwidXNlclNwYWNlT25Vc2VcIixcbiAgICAgICAgICAgIGNoaWxkcmVuOiBbXG4gICAgICAgICAgICAgIC8qIEBfX1BVUkVfXyAqLyBjKFwic3RvcFwiLCB7IHN0b3BDb2xvcjogXCIjNTE1MjU0XCIgfSksXG4gICAgICAgICAgICAgIC8qIEBfX1BVUkVfXyAqLyBjKFwic3RvcFwiLCB7IG9mZnNldDogXCIwLjA5XCIsIHN0b3BDb2xvcjogXCIjNTk1QTVDXCIgfSksXG4gICAgICAgICAgICAgIC8qIEBfX1BVUkVfXyAqLyBjKFwic3RvcFwiLCB7IG9mZnNldDogXCIwLjIzXCIsIHN0b3BDb2xvcjogXCIjNkU2RjcxXCIgfSksXG4gICAgICAgICAgICAgIC8qIEBfX1BVUkVfXyAqLyBjKFwic3RvcFwiLCB7IG9mZnNldDogXCIwLjQxXCIsIHN0b3BDb2xvcjogXCIjOTA5MTk0XCIgfSksXG4gICAgICAgICAgICAgIC8qIEBfX1BVUkVfXyAqLyBjKFwic3RvcFwiLCB7IG9mZnNldDogXCIwLjU1XCIsIHN0b3BDb2xvcjogXCIjQjFCM0I2XCIgfSksXG4gICAgICAgICAgICAgIC8qIEBfX1BVUkVfXyAqLyBjKFwic3RvcFwiLCB7IG9mZnNldDogXCIxXCIsIHN0b3BDb2xvcjogXCIjM0UzRTNGXCIgfSlcbiAgICAgICAgICAgIF1cbiAgICAgICAgICB9XG4gICAgICAgIClcbiAgICAgIF0gfSlcbiAgICBdXG4gIH1cbiksIEhSID0gKCkgPT4gLyogQF9fUFVSRV9fICovIGUxKFxuICBcInN2Z1wiLFxuICB7XG4gICAgd2lkdGg6IFwiMTYwXCIsXG4gICAgaGVpZ2h0OiBcIjE2MFwiLFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2MCAxNjBcIixcbiAgICBmaWxsOiBcIm5vbmVcIixcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIGNoaWxkcmVuOiBbXG4gICAgICAvKiBAX19QVVJFX18gKi8gYyhcbiAgICAgICAgXCJwYXRoXCIsXG4gICAgICAgIHtcbiAgICAgICAgICBkOiBcIk03NS40ODU0IDgwLjgwNzRDMTA2LjcxNCA3My4yODU5IDE0My45NDEgNjUuNTcwOSAxNTcuODI1IDYxLjQwMUMxNTkuMjc0IDY3LjQ5NDggMTYwLjAwNCA3My43MzcyIDE2MCA4MC4wMDA4QzE2MCA4MS4zNTU3IDE1OS45NjYgODIuNzAyNCAxNTkuODk5IDg0LjA0MDlDMTU5Ljg3NyA4NC4zNjQ1IDE1OS43MzUgODQuNjY4NCAxNTkuNTAxIDg0Ljg5MzRDMTU4Ljg1NyA4NS41MDYzIDE1Ny41NTEgODYuMDczOSAxNTYuODAzIDg2LjMxOEMxNTMuNjM3IDg3LjM1NjggMTQzLjM2NSA4OS44OTU4IDEyNC40NyA5My45NTQ0Qzk0LjgzNjQgMTAwLjMyIDYyLjQ4OTUgMTA4LjMzNSA0OC4wMTg1IDExMi4zNTVDMjkuNDQ5NSAxMTcuNTExIDE4LjA3NyAxMjEuODM1IDEyLjg1MzUgMTIzLjUwNkMxMC41NzgyIDEyMC4wMDMgOC41ODE3NSAxMTYuMzI2IDYuODgyNjggMTEyLjUxMVYxMTIuNTA0QzYuMzQ5OTMgMTExLjMwOCA1Ljg0NjM3IDExMC4wOTYgNS4zNzE5OSAxMDguODY4VjEwOC44NThDNC44OTcxMiAxMDcuNjMyIDQuNDUxOTMgMTA2LjM5MSA0LjAzNjQxIDEwNS4xMzZDMy41Mzc4IDEwMy42MjggMy4wODM0NSAxMDIuMTAxIDIuNjczMzggMTAwLjU1NEMxMy41NTA5IDk3LjUzODIgNDIuMjY1OCA4OC44MDgxIDc1LjQ4NTQgODAuODA3NFpNMy43NTY2OCA1NS43MDkzTDMuNzQ0ODEgNTUuNzQ3OEwzLjczMzY4IDU1Ljc4MTJDMy43MjEwNyA1NS44MjIgMy43MDg0NSA1NS44NjIxIDMuNjk1MSA1NS45MDI5QzMuNjMxMjkgNTYuMTA1NyAzLjU2ODIyIDU2LjMwOSAzLjUwNTg5IDU2LjUxMjhDMy41MDIxOCA1Ni41MjMyIDMuNDk5MjEgNTYuNTMzNiAzLjQ5NjI1IDU2LjU0NEMzLjQ3OTkyIDU2LjU5NTkgMy40NjQzNCA1Ni42NDc5IDMuNDQ4NzYgNTYuNjk5OEMzLjM0MTkxIDU3LjA1MSAzLjIzNzU0IDU3LjQwMjcgMy4xMzU2NCA1Ny43NTQ5TDMuMTI1OTkgNTcuNzg5QzMuMDIyNjEgNTguMTQ0MiAyLjkyMjE5IDU4LjUwMDggMi44MjQ3NSA1OC44NTg5QzM4LjA2OTIgNTAuMzA5MiA2Mi44NzIzIDQzLjMwNjQgODQuMjY3NSAzNi42MTc1Qzk2LjgwNzEgMzIuNjk2MSAxMDYuMDAyIDI5LjEzNDYgMTEyLjIwNiAyNS45OTgzQzExMi4zNSAyNS45MjU2IDExMi40OTIgMjUuODUyOSAxMTIuNjMzIDI1Ljc4MDJMMTEyLjc1OSAyNS43MTQ5QzExMi44NTcgMjUuNjY0NCAxMTIuOTU1IDI1LjYxNCAxMTMuMDUxIDI1LjU2NjVMMTEzLjIwNyAyNS40ODQ5TDExMy40NiAyNS4zNTEzTDExMy42MjMgMjUuMjYzN0wxMTMuODYgMjUuMTM2OUwxMTQuMDIzIDI1LjA0NzhMMTE0LjI1MyAyNC45MjE3TDExNC40MSAyNC44MzQ5TDExNC42NDEgMjQuNzA1OEwxMTQuNzg5IDI0LjYyNDJMMTE1LjAzMiAyNC40ODU0TDExNS4xNTYgMjQuNDE0OUwxMTUuNDgxIDI0LjIyNTdMMTE1LjUxMiAyNC4yMDcyTDExNS44NTkgMjQuMDAxNkwxMTUuOTY1IDIzLjkzNzFDMTE2LjAzOSAyMy44OTAzIDExNi4xMiAyMy44NDM2IDExNi4xOTYgMjMuNzk2OUwxMTYuMzI0IDIzLjcxODJMMTE2LjUyNSAyMy41OTI4TDExNi42NTYgMjMuNTEwNUwxMTYuODQ2IDIzLjM4OTVDMTE2Ljg4OSAyMy4zNjIxIDExNi45MzIgMjMuMzM0NiAxMTYuOTc0IDIzLjMwNjRDMTE3LjAzNyAyMy4yNjcxIDExNy4wOTggMjMuMjI3IDExNy4xNTggMjMuMTg3TDExNy4yODIgMjMuMTA2MUwxMTcuNDY1IDIyLjk4MzdMMTE3LjU3OSAyMi45MDk1QzExNy42NDUgMjIuODY0OSAxMTcuNzEgMjIuODIxMiAxMTcuNzczIDIyLjc3NjZMMTE3Ljg2NiAyMi43MTI4QzExNy45NiAyMi42NDc1IDExOC4wNTMgMjIuNTgyNSAxMTguMTQ0IDIyLjUxNzdDMTIwLjE3NSAyMS4wNTkgMTIzLjE2NSAxOC40MTIzIDEyMi45NSAxNS4yNzE2QzEyMi45NSAxNS4yNDQxIDEyMi45NDUgMTUuMjE2NiAxMjIuOTQzIDE1LjE4OTJDMTIyLjc5NSAxMy42NTE4IDEyMS4zOTIgMTEuNDU5MyAxMTcuMTU1IDkuMTM2MTVMMTE2Ljg4OCA4Ljk5NjY2TDExNi41NzEgOC44MzE5NEwxMTYuMTQ4IDguNjE1MjhMMTE1Ljk5OSA4LjU0MTA4QzExNS42OTQgOC4zODY3NSAxMTUuMzg3IDguMjM0NCAxMTUuMDc5IDguMDg0MDNMMTE0Ljg4MyA3Ljk4NzU3TDExNC40MDkgNy43NTk3OEwxMTQuMTY0IDcuNjQ0MDNMMTEzLjc5OCA3LjQ3MTE1TDExMy41MjkgNy4zNDcyNEwxMTMuMjUgNy4yMTgxNEwxMTIuOTU0IDcuMDg0NTlMMTEyLjcwMSA2Ljk3MTA2TDExMi4zODkgNi44MzE1N0wxMTIuMTYgNi43MzA2NkwxMTEuODI2IDYuNTgyMjdMMTExLjY0OSA2LjUwODA3QzExMS4yMTYgNi4zMjEwOSAxMTAuNzggNi4xMzc4MiAxMTAuMzQzIDUuOTU4MjZMMTEwLjIyNyA1LjkxMDA0TDEwOS44MiA1Ljc0NTMyTDEwOS42NzYgNS42ODc0NEwxMDkuMjY3IDUuNTI1NjlMMTA5LjEzNSA1LjQ3Mzc1TDEwOC43MDUgNS4zMDY4MUwxMDguNjMxIDUuMjc4NjJDMTA3Ljk1NSA1LjAxOTQyIDEwNy4yNzYgNC43Njk2MiAxMDYuNTkzIDQuNTI5MjJMMTA2LjU2OCA0LjUyMDMyQzEwNi40MDUgNC40NjI0NCAxMDYuMjQgNC40MDUzMSAxMDYuMDc2IDQuMzQ4OTJMMTA2LjAxNSA0LjMyODE0TDEwNS41MjIgNC4xNTk3MUwxMDUuNDkgNC4xNDkzM0MxMDQuNjEgMy44NTI1NCAxMDMuNzI1IDMuNTcyMDcgMTAyLjgzMyAzLjMwNzkzTDEwMi44MSAzLjMwMTI1TDEwMi4yOSAzLjE0OTE0TDEwMi4yNTEgMy4xMzgwMUMxMDEuNSAyLjkyMDM3IDEwMC43NDMgMi43MTM4NSA5OS45ODE0IDIuNTE4NDZDMTAwLjAzMiAzLjEzMDU5IDEwMC4wNDYgMy42Nzg5MSA5OS45OTkyIDQuMDc2NjFDOTkuNzgxIDUuOTI3MSA5OC44Mzk0IDcuNDg5NyA5Ny4zODU5IDguODY2ODFDOTQuMzc2NCAxMS43MTc1IDg4LjQwMDQgMTQuNjgxNyA4MC45NzQ2IDE3LjI5NDlDNzMuMDQ2NSAyMC4wOTQ0IDU2LjU3MjEgMjUuNTIxMiA0MS45NjkgMjkuMTgwNkMzMi4xNzQ4IDMxLjYzNTggMTkuMjY0MiAzNC44MyAxMy4wNTc1IDM2LjE4MDRDMTIuODE3MSAzNi41NDcgMTIuNTgwMiAzNi45MTU1IDEyLjM0NjcgMzcuMjg2QzEyLjMzNyAzNy4zMDA4IDEyLjMyNzQgMzcuMzE1NyAxMi4zMTg1IDM3LjMzMDVMMTIuMzA4MSAzNy4zNDYxQzEyLjI2ODggMzcuNDA4NCAxMi4yMjk0IDM3LjQ3IDEyLjE5MDkgMzcuNTMyM0MxMi4wOTU5IDM3LjY4MzcgMTIuMDAxNCAzNy44MzU1IDExLjkwNzQgMzcuOTg3OUMxMS44OTE4IDM4LjAxMjQgMTEuODc3IDM4LjAzNjkgMTEuODYyMiAzOC4wNjIxQzExLjg0NzMgMzguMDg3MyAxMS44MjY1IDM4LjExOTIgMTEuODA5NSAzOC4xNDgyQzExLjc5MjQgMzguMTc3MSAxMS43NjEyIDM4LjIyMjQgMTEuNzM1MyAzOC4yNjM5QzExLjY0MjUgMzguNDEyMyAxMS41NDk4IDM4LjU2NzQgMTEuNDU3OCAzOC43MTk1QzExLjQzNCAzOC43NTk2IDExLjQxMDMgMzguNzk5NiAxMS4zODM2IDM4LjgzOTdMMTEuMjk2OCAzOC45ODgxQzExLjIwMDggMzkuMTQ2OSAxMS4xMDYxIDM5LjMwNTYgMTEuMDEyNiAzOS40NjQ0QzExLjAwNTIgMzkuNDc2MyAxMC45OTg1IDM5LjQ4ODIgMTAuOTkxOCAzOS41TDEwLjk4NzQgMzkuNTA4MkMxMC43NzAyIDM5Ljg3NzIgMTAuNTU2IDQwLjI0ODIgMTAuMzQ0OCA0MC42MjEyTDEwLjIxMjcgNDAuODU0MUMxMC4xMjMyIDQxLjAxNDQgMTAuMDMzOSA0MS4xNzQ5IDkuOTQ0ODYgNDEuMzM1N0w5LjkzNzQ0IDQxLjM0ODNMOS45MTQ0NCA0MS4zOTA2TDkuNzk1NzIgNDEuNjA1TDkuNTMzMDYgNDIuMDg4MUM5LjQ5ODkzIDQyLjE1MTkgOS40NjU1NCA0Mi4yMTU3IDkuNDMxNDEgNDIuMjc4N0w5LjM5NjUzIDQyLjM0MzNDOS4zMDYwMSA0Mi41MTI1IDkuMjE1NDkgNDIuNjgxNiA5LjEyNjQ1IDQyLjg1MTZMOS4xMTk3NyA0Mi44NjQ5TDkuMTE0NTggNDIuODc0NkM4LjkwNTgzIDQzLjI3MDMgOC43MDAzIDQzLjY3MDQgOC40OTc5OCA0NC4wNzUxTDguMzk4NTYgNDQuMjcxN0M4LjMxMjQ5IDQ0LjQ0MzggOC4yMjc5IDQ0LjYxNiA4LjE0MzMxIDQ0Ljc5MTFWNDQuNzk3QzguMTIwMzEgNDQuODQzIDguMDk4MDUgNDQuODg5IDguMDc1NzkgNDQuOTM1TDguMDY2ODkgNDQuOTUyOEw4LjAyMjM3IDQ1LjA0NDFDNy45Mzg3NyA0NS4yMTUyIDcuODU1NjcgNDUuMzg3MSA3Ljc3MzA2IDQ1LjU1OThMNy42NjE3NyA0NS43OTU3QzcuNTE2ODMgNDYuMDk5OSA3LjM3NDM3IDQ2LjQwNTQgNy4yMzQzOCA0Ni43MTIxVjQ2LjcxNThDNy4wOTM0IDQ3LjAyMTkgNi45NTQ5IDQ3LjMyOTQgNi44MTg4NyA0Ny42MzhDNi44MDMyOSA0Ny42NzI5IDYuNzg3NyA0Ny43MDcgNi43NzI4NiA0Ny43NDEyTDYuNzUyODMgNDcuNzg2NEM2LjY3MjIgNDcuOTcxNCA2LjU5MTU3IDQ4LjE1NjcgNi41MTA5NCA0OC4zNDIyTDYuNDg0MjMgNDguNDA0NUM2LjQ2MDQ5IDQ4LjQ2MDkgNi40MzYgNDguNTE2NSA2LjQxMDAzIDQ4LjU3MjlDNi4zMzEzOCA0OC43NTY0IDYuMjUzNDcgNDguOTQwNSA2LjE3NjMxIDQ5LjEyNUM2LjE0NjYzIDQ5LjE5NTQgNi4xMTY5NSA0OS4yNjU5IDYuMDg4MDEgNDkuMzM3MkM1Ljk1MzQ2IDQ5LjY1OTcgNS44MjExNCA0OS45ODM3IDUuNjkxMDUgNTAuMzA5MlY1MC4zMTczVjUwLjMyMjVDNS41NjE0NSA1MC42NDggNS40MzMzMyA1MC45NzUgNS4zMDY3IDUxLjMwMzRMNS4yNzMzMSA1MS4zODk1QzUuMTk5MTEgNTEuNTg3NiA1LjEyNDkxIDUxLjc4NzIgNS4wNTA3MSA1MS45ODMxTDQuOTc2NTEgNTIuMTkwMUM0LjkwMjMxIDUyLjM4NDUgNC44MzI1NyA1Mi41Nzk2IDQuNzYyMDggNTIuNzc1NUw0LjczMzE0IDUyLjg1NzFDNC43MTkwNCA1Mi44OTQyIDQuNzA1NjkgNTIuOTMxMyA0LjY5MjMzIDUyLjk2OTFDNC41NzA2NCA1My4zMDg1IDQuNDUxMTggNTMuNjQ4NSA0LjMzMzk1IDUzLjk4OTRDNC4zMzIzOCA1My45OTMyIDQuMzMxMTQgNTMuOTk3MiA0LjMzMDI0IDU0LjAwMTJMNC4zMjU3OSA1NC4wMTM4QzQuMjA3NTYgNTQuMzU3NiA0LjA5MjA2IDU0LjcwMTkgMy45NzkyOCA1NS4wNDY3TDMuOTc0ODMgNTUuMDZWNTUuMDY2N0MzLjk3MzI2IDU1LjA3MDMgMy45NzIwMiA1NS4wNzQgMy45NzExMiA1NS4wNzc4QzMuODk0NDUgNTUuMjg3MSAzLjgyMjk3IDU1LjQ5NzUgMy43NTY2OCA1NS43MDkzWk0zLjA3NTU0IDgxLjE2NzlDNS4yNDk1NiA4MS4xNzk4IDEwLjg2MTIgODAuODkyNyAxNy4wOTAyIDgwLjI5NjlDMjcuOTM5NSA3OS4yNTgxIDQ5LjYyNjQgNzYuNDM4NiA3NC4zNzE3IDczLjIzODRDOTMuNjM1MSA3MC43NDc2IDEzNS43ODUgNjQuNjMxNSAxNTcuODI2IDYxLjQwNTRDMTU3Ljc5IDYxLjI1MTYgMTU3Ljc1NCA2MS4xIDE1Ny43MTggNjAuOTUwNkMxNTcuNjQ5IDYwLjY3MTYgMTU3LjU4IDYwLjM5MzYgMTU3LjUwOCA2MC4xMTY2QzE1Ny40ODMgNjAuMDE3OSAxNTcuNDU4IDU5LjkyIDE1Ny40MzQgNTkuODE5OEwxNTcuNDMgNTkuODAzNUMxNTcuMzggNTkuNjE0NSAxNTcuMzMxIDU5LjQyNTMgMTU3LjI4MSA1OS4yMzU5QzE1Ny4yNTQgNTkuMTM1NyAxNTcuMjI3IDU5LjAzNTUgMTU3LjIgNTguOTM5MUMxNTcuMTM0IDU4LjY5NTcgMTU3LjA2NyA1OC40NTMxIDE1Ni45OTkgNTguMjExMkwxNTYuOTUgNTguMDM4M0MxNTYuODk0IDU3Ljg0MTcgMTU2LjgzNiA1Ny42NDY2IDE1Ni43NzkgNTcuNDUxNEwxNTYuNzI2IDU3LjI2ODJDMTU2LjY5NyA1Ny4xNjg3IDE1Ni42NjYgNTcuMDcgMTU2LjYzNyA1Ni45NzE0QzE1Ni41NzkgNTYuNzgxNCAxNTYuNTIyIDU2LjU5MTUgMTU2LjQ2NCA1Ni40MDIzQzE1Ni40MzMgNTYuMzAyOCAxNTYuNDAyIDU2LjIwMzQgMTU2LjM3MSA1Ni4xMDU1QzE1Ni4zMDYgNTUuODk3IDE1Ni4yNCA1NS42ODkyIDE1Ni4xNzMgNTUuNDgxNUwxNTYuMTQyIDU1LjM4MjhDMTU2LjExOSA1NS4zMDg2IDE1Ni4wOTUgNTUuMjM5NiAxNTYuMDcyIDU1LjE2NzZDMTU2LjAyNyA1NS4wMjk2IDE1NS45ODEgNTQuODkxNiAxNTUuOTM1IDU0Ljc1MzZDMTU1LjkwMyA1NC42NTc5IDE1NS44NzIgNTQuNTYyMiAxNTUuODQgNTQuNDY2NEwxNTUuNzM1IDU0LjE2QzE1NS43MzUgNTQuMTUyNiAxNTUuNzMgNTQuMTQ1MiAxNTUuNzI4IDU0LjEzNzhMMTU1LjU0NyA1My42MTg0QzE1NS41MTIgNTMuNTE2NyAxNTUuNDczIDUzLjQxNDMgMTU1LjQ0IDUzLjMxMjdDMTU1LjM1NiA1My4wNzU3IDE1NS4yNzEgNTIuODM5OCAxNTUuMTg2IDUyLjYwNDhDMTU1LjE1NSA1Mi41MTk1IDE1NS4xMjMgNTIuNDM0MiAxNTUuMDkxIDUyLjM0ODFDMTU1LjA2NyA1Mi4yODIxIDE1NS4wNDIgNTIuMjE2OCAxNTUuMDE3IDUyLjE1MDdDMTU0Ljk2MyA1Mi4wMDIzIDE1NC45MDggNTEuODU5MSAxNTQuODU0IDUxLjcxMzdDMTU0LjgxMyA1MS42MDYxIDE1NC43NzIgNTEuNDk5MyAxNTQuNzMxIDUxLjM5MjRDMTU0LjcwNCA1MS4zMTgyIDE1NC42NzUgNTEuMjQ0IDE1NC42NDcgNTEuMTc1OEwxNTQuNTM0IDUwLjg4MjdDMTU0LjQ5MiA1MC43NzY2IDE1NC40NTEgNTAuNjY5OCAxNTQuNDA4IDUwLjU2MzdDMTU0LjM2NiA1MC40NTc2IDE1NC4zMjggNTAuMzYzMyAxNTQuMjg4IDUwLjI2NjlDMTU0LjIzOSA1MC4xMzkyIDE1NC4xODcgNTAuMDExMSAxNTQuMTM0IDQ5Ljg4MjVDMTU0LjA5MyA0OS43ODIzIDE1NC4wNTEgNDkuNjgyMiAxNTQuMDExIDQ5LjU4NTdMMTUzLjkzMSA0OS4zOTM2QzE1My44NzggNDkuMjY2NyAxNTMuODI2IDQ5LjEzOTggMTUzLjc3MiA0OS4wMTI5QzE1My43MjUgNDguOTAxNiAxNTMuNjc4IDQ4Ljc5MDMgMTUzLjYzMSA0OC42NzlDMTUzLjU2MiA0OC41MTg4IDE1My40OTQgNDguMzU5IDE1My40MjQgNDguMTk5N0MxNTMuMzc1IDQ4LjA4OTkgMTUzLjMyNyA0Ny45ODAzIDE1My4yODEgNDcuODcxQzE1My4yNCA0Ny43NzUzIDE1My4xOTcgNDcuNjc5NiAxNTMuMTU0IDQ3LjU4MzlDMTUzLjA5OCA0Ny40NTkyIDE1My4wNDMgNDcuMzMzOCAxNTIuOTg3IDQ3LjIxMjlDMTUyLjkzNyA0Ny4xMDA4IDE1Mi44ODYgNDYuOTkwMyAxNTIuODM1IDQ2Ljg3NzVDMTUyLjc4MyA0Ni43NjQ3IDE1Mi43MzcgNDYuNjY0NiAxNTIuNjg2IDQ2LjU1ODVDMTUyLjY1NSA0Ni40OTE3IDE1Mi42MjUgNDYuNDI0OSAxNTIuNTk0IDQ2LjM1ODlDMTUyLjU0MSA0Ni4yNDM5IDE1Mi40ODcgNDYuMTI5NiAxNTIuNDMzIDQ2LjAxNDZDMTUyLjM2OSA0NS44Nzc2IDE1Mi4zMDQgNDUuNzQwMyAxNTIuMjM4IDQ1LjYwMjhMMTUyLjIzMSA0NS41ODk0TDE1Mi4yMTggNDUuNTYyQzE1Mi4xNjUgNDUuNDUgMTUyLjExMiA0NS4zMzk0IDE1Mi4wNTggNDUuMjI3NEMxNTEuOTU0IDQ1LjAxMjcgMTUxLjg0OSA0NC43OTkgMTUxLjc0NCA0NC41ODYzQzE1MS42ODUgNDQuNDY2MSAxNTEuNjI0IDQ0LjM0NjYgMTUxLjU2NCA0NC4yMjY0TDE1MS40MDIgNDMuOTAzN0wxNTEuMzUzIDQzLjgwNzJDMTUxLjM0NCA0My43ODg3IDE1MS4zMzQgNDMuNzcwMSAxNTEuMzI1IDQzLjc1MjNMMTUxLjE0NSA0My40MDE0TDE1MS4wODEgNDMuMjc4MkMxNTEuMDI4IDQzLjE3NjMgMTUwLjk3NSA0My4wNzQ2IDE1MC45MjMgNDIuOTczMkwxNTAuNzQ0IDQyLjYzNDJDMTUwLjYzMyA0Mi40MjIgMTUwLjUxOSA0Mi4yMTAyIDE1MC40MDUgNDEuOTk5TDE1MC4yMDYgNDEuNjM2MkMxNTAuMTMyIDQxLjUwNzEgMTUwLjA2NCA0MS4zNzcyIDE0OS45OTIgNDEuMjQ4MUwxNDkuOTY1IDQxLjE5ODRMMTQ5Ljc2NyA0MC44NDZDMTQ5Ljc0NSA0MC44MDUyIDE0OS43MjIgNDAuNzY1MSAxNDkuNjk5IDQwLjcyNDNMMTQ5LjUzNiA0MC40Mzg2QzE0OS40NzIgNDAuMzI0NCAxNDkuNDA3IDQwLjIxMDkgMTQ5LjM0MSA0MC4wOTczQzE0OS4yNzUgMzkuOTgzOCAxNDkuMjIxIDM5Ljg5MTEgMTQ5LjE2MSAzOS43ODc5QzE0OS4wOTIgMzkuNjY5MiAxNDkuMDIzIDM5LjU0OTggMTQ4Ljk1MyAzOS40MzE4TDE0OC43MzEgMzkuMDUzNEMxNDMuMDkyIDM5Ljg2OTUgMTM2LjI0IDQwLjgzNDEgMTI3LjgyIDQxLjk5OThDMTA5LjMzNCA0NC41NTUxIDg4LjU2ODggNDcuOTQ4OSA2Ny4zMjQyIDUwLjY5NjVDMzQuNjgzNSA1NC44OTMxIDEzLjMxNzIgNTguMDIwNSAyLjgyMTc4IDU4Ljg2MzRDMi43NzYyNyA1OS4wMzA2IDIuNzMxNSA1OS4xOTczIDIuNjg3NDggNTkuMzYzNUMyLjY3ODU4IDU5LjM5NjkgMi42Njk2NyA1OS40Mjk1IDIuNjYxNTEgNTkuNDYyMkwyLjYwODA5IDU5LjY2MzJDMi42MDY0MiA1OS42Njg2IDIuNjA1MTggNTkuNjc0IDIuNjA0MzggNTkuNjc5NkMyLjU2NTMgNTkuODI4IDIuNTI2MjIgNTkuOTc2NCAyLjQ4NzE0IDYwLjEyNDhDMi40NTU5OCA2MC4yNDY0IDIuNDI2MyA2MC4zNjgxIDIuMzk1MTQgNjAuNDg5OEMyLjM4MTA0IDYwLjU0NzcgMi4zNjY5NCA2MC42MDQ4IDIuMzUyMSA2MC42NjE5QzIuMzQzMiA2MC42OTgzIDIuMzM0MjkgNjAuNzM2MSAyLjMyNDY1IDYwLjc3MUMyLjMxNSA2MC44MDU5IDIuMzEwNTUgNjAuODI4MiAyLjMwMzg3IDYwLjg1NjNDMi4yODMxIDYwLjkzOTQgMi4yNjMwNiA2MS4wMjMzIDIuMjQzMDMgNjEuMTA2NEMwLjc1ODc2MyA2Ny4yNDczIDAuMDA1ODU5NzIgNzMuNTQyMSAwIDc5Ljg1OThDMC4wMjE1MTc2IDgwLjY4NzEgMS4yMTI0MSA4MS4xNTM4IDMuMDc0OCA4MS4xNjQyTDMuMDc1NTQgODEuMTY3OVpNMTQwLjMxNCAxMzIuNTU5QzEzNC45NzEgMTM3LjUzNiAxMTUuODA1IDE0Ni41NTMgOTYuODE1MyAxNTAuMzA0Qzc4Ljg2NjYgMTUzLjg1IDYyLjcxMjEgMTU0LjY0MSA1MS45OTAzIDE1NC42NTRDNTIuMTc1MSAxNTQuOTE5IDUyLjU4MzkgMTU1LjE2NyA1My4yMjggMTU1LjQxMUM1NC41MTc1IDE1NS44NjkgNTUuODIyIDE1Ni4yOTUgNTcuMTQxMiAxNTYuNjg5TDU3LjE3NTMgMTU2LjY5OUM1Ny43NDAyIDE1Ni44NjcgNTguMzA3MSAxNTcuMDI4IDU4Ljg3NiAxNTcuMTgzTDU4Ljk1MDIgMTU3LjIwNEM1OS4yMDE1IDE1Ny4yNzIgNTkuNDUzMiAxNTcuMzQgNTkuNzA1NSAxNTcuNDA2TDU5LjgxOTggMTU3LjQzNkM2MC4wOTE0IDE1Ny41MDYgNjAuMzYzNCAxNTcuNTc1IDYwLjYzNiAxNTcuNjQzTDYwLjc0NjUgMTU3LjY3QzYwLjk3MzEgMTU3LjcyNiA2MS4xOTk5IDE1Ny43ODEgNjEuNDI2OSAxNTcuODM1TDYxLjY0OTUgMTU3Ljg4OEM2MS44ODcgMTU3Ljk0NCA2Mi4xMjQ5IDE1Ny45OTkgNjIuMzYzMyAxNTguMDUyTDYyLjU1MSAxNTguMDk0QzYyLjc2MzMgMTU4LjE0MSA2Mi45NzU1IDE1OC4xODcgNjMuMTg4NCAxNTguMjMzTDYzLjUwNzUgMTU4LjMwMUw2My45ODkgMTU4LjRMNjQuMzI1MSAxNTguNDY4QzY0LjU0NzcgMTU4LjUxMiA2NC43NjUxIDE1OC41NTQgNjQuOTg1NSAxNTguNTk2TDY1LjM5ODEgMTU4LjY3TDY1Ljc0MzggMTU4LjczM0w2Ni4xODkgMTU4LjgxM0w2Ni4zNzkgMTU4Ljg0NUM2Ni42OTU1IDE1OC45IDY3LjAxMzEgMTU4Ljk1MiA2Ny4zMzE3IDE1OS4wMDNMNjcuNTU0MyAxNTkuMDM4TDY4LjA5MTUgMTU5LjEyTDY4LjE4ODcgMTU5LjEzNUM2OC41NzcgMTU5LjE5MiA2OC45NjYgMTU5LjI0NyA2OS4zNTU4IDE1OS4yOThMNjkuNDAzMyAxNTkuMzA1QzY5LjYwODEgMTU5LjMzMiA2OS44MTI5IDE1OS4zNTggNzAuMDE3NyAxNTkuMzgzTDcwLjA3MTggMTU5LjM5QzcwLjcwMjUgMTU5LjQ2OCA3MS4zMzU0IDE1OS41MzggNzEuOTcwNiAxNTkuNjAySDcxLjk4MDJDNzIuNDEwNiAxNTkuNjQ1IDcyLjg0MjQgMTU5LjY4NSA3My4yNzU3IDE1OS43MjFDNzUuNDkxMyAxNTkuOTA1IDc3LjczMTYgMTU5Ljk5OCA3OS45OTY3IDE2MEMxMDQuMDYyIDE2MCAxMjUuNjQ1IDE0OS4zNzMgMTQwLjMxMSAxMzIuNTU2TDE0MC4zMTQgMTMyLjU1OVpNMTQ1Ljc2NSAxMDcuMTY1QzE0My43MDEgMTA3LjE2NSAxMzEuODE2IDEwNy40NDMgMTEyLjY0MiAxMDkuMjgxQzg3LjUyNDEgMTExLjY5IDUwLjkzNzUgMTE2Ljk2NiAzNi4xNDMgMTE5LjQ4OUMyNi45NTQyIDEyMS4wNTYgMTguMzg0MiAxMjIuODg5IDEzLjIwOTYgMTI0LjA1MkMxMy40NDE2IDEyNC40MDQgMTMuNjc2NiAxMjQuNzUzIDEzLjkxNDUgMTI1LjFMMTQuMDc0OCAxMjUuMzM1QzE0LjE3MzcgMTI1LjQ4MyAxNC4yNzUzIDEyNS42MjkgMTQuMzc5NyAxMjUuNzczQzE0LjQzNjEgMTI1Ljg1NCAxNC40OTMyIDEyNS45MzUgMTQuNTQ5NiAxMjYuMDE1QzE0LjY1NDMgMTI2LjE2NCAxNC43NTgxIDEyNi4zMTIgMTQuODYzNSAxMjYuNDZMMTQuOTczMyAxMjYuNjA5QzE1LjE5MDUgMTI2LjkxMiAxNS40MTAxIDEyNy4yMTQgMTUuNjMyMiAxMjcuNTE0QzE1LjY3ODIgMTI3LjU3NiAxNS43MjI3IDEyNy42MzcgMTUuNzY4NyAxMjcuNjk4QzE1Ljg3ODUgMTI3Ljg0NiAxNS45OTEzIDEyNy45OTUgMTYuMTAxMSAxMjguMTQzTDE2LjI2NTkgMTI4LjM2MUMxNi4zNzg2IDEyOC41MDkgMTYuNDkyMiAxMjguNjU3IDE2LjYwNjQgMTI4LjgwNkwxNi43Mjc0IDEyOC45NjJDMTYuOTgzNiAxMjkuMjkyIDE3LjI0MTggMTI5LjYyIDE3LjUwMiAxMjkuOTQ2TDE3LjU0MjEgMTI5Ljk5N0MxNy42NjYgMTMwLjE1MiAxNy43OTE0IDEzMC4zMDUgMTcuOTEzMSAxMzAuNDU5TDE4LjA1NzggMTMwLjYzNkMxOC4xODI0IDEzMC43ODUgMTguMzA3MSAxMzAuOTQgMTguNDMyNSAxMzEuMDkxTDE4LjU0NiAxMzEuMjI4QzE4Ljk2NTkgMTMxLjczMSAxOS4zOTE4IDEzMi4yMjggMTkuODIzNyAxMzIuNzJMMTkuOTMyIDEzMi44NDRDMjAuMDcgMTMzLjAwMSAyMC4yMDg4IDEzMy4xNTcgMjAuMzQ4MyAxMzMuMzEzQzIwLjM4MDIgMTMzLjM0OSAyMC40MTIxIDEzMy4zODcgMjAuNDQ0NyAxMzMuNDJDMjAuOTAyOCAxMzMuOTMxIDIxLjM2NyAxMzQuNDM1IDIxLjgzNzQgMTM0LjkzM0wyMS44ODQyIDEzNC45ODNDMjIuMDM3NSAxMzUuMTQ1IDIyLjE5MTYgMTM1LjMwNiAyMi4zNDY0IDEzNS40NjdMMjIuNDIwNiAxMzUuNTQ1QzIzLjA3NjYgMTM2LjIyNSAyMy43NDQzIDEzNi44OTMgMjQuNDI0IDEzNy41NDhMMjQuNDc1MiAxMzcuNTk3QzI1LjE2NzcgMTM4LjI2NCAyNS44NzA0IDEzOC45MTcgMjYuNTgzMiAxMzkuNTU5TDI2LjYwNzcgMTM5LjU4MUMyNy4zMzI4IDE0MC4yMzEgMjguMDY5NCAxNDAuODY3IDI4LjgxNzMgMTQxLjQ5MUMyOS4yMTcyIDE0MS44MjcgMzAuMDg5OCAxNDEuODg3IDMyLjgyODUgMTQxLjM2OEMzOC41NzUyIDE0MC4yODEgNjAuMDk4IDEzNi41NDUgODMuOTYxOCAxMzMuMjc1QzEwNi40MTQgMTMwLjE5OCAxMzAuNTI1IDEyOS41NDYgMTMzLjczOCAxMjkuNTc4QzEzNy45MzYgMTI5LjYyMSAxNDEuOTEgMTMwLjU1NSAxNDAuMzA5IDEzMi41NTZDMTQwLjQ4OSAxMzIuMzUgMTQwLjY2NyAxMzIuMTQ0IDE0MC44NDQgMTMxLjkzNUwxNDAuODgzIDEzMS44ODlDMTQwLjg4NyAxMzEuODg2IDE0MC44OSAxMzEuODgyIDE0MC44OTMgMTMxLjg3OEMxNDEuMDYzIDEzMS42OCAxNDEuMjMyIDEzMS40OCAxNDEuNCAxMzEuMjc3TDE0MS40MzUgMTMxLjIzNkMxNDEuNDQ1IDEzMS4yMjMgMTQxLjQ1NSAxMzEuMjExIDE0MS40NjYgMTMxLjE5OUMxNDEuNjMyIDEzMS4wMDEgMTQxLjc5OCAxMzAuOCAxNDEuOTYyIDEzMC41OTdMMTQyLjAyMiAxMzAuNTIzQzE0Mi4xOSAxMzAuMzE2IDE0Mi4zNTcgMTMwLjEwOSAxNDIuNTIzIDEyOS45MDJMMTQyLjU1NSAxMjkuODYyQzE0My4xNzUgMTI5LjA4NCAxNDMuNzgyIDEyOC4yOTQgMTQ0LjM3NCAxMjcuNDkzTDE0NC40MDMgMTI3LjQ1NUMxNDQuOTk2IDEyNi42NTQgMTQ1LjU3MyAxMjUuODQxIDE0Ni4xMzMgMTI1LjAxN0wxNDYuMTM3IDEyNS4wMTFMMTQ2LjE1MyAxMjQuOTg4QzE0Ni4zMDYgMTI0Ljc2MyAxNDYuNDU4IDEyNC41MzggMTQ2LjYwOSAxMjQuMzEyQzE0Ni42MjMgMTI0LjI5IDE0Ni42MzcgMTI0LjI2OSAxNDYuNjUyIDEyNC4yNDdDMTQ2LjggMTI0LjAyNSAxNDYuOTQ2IDEyMy44MDMgMTQ3LjA5MSAxMjMuNTc5TDE0Ny4wOTggMTIzLjU2N0MxNDcuMTExIDEyMy41NDkgMTQ3LjEyMyAxMjMuNTMgMTQ3LjEzNSAxMjMuNTEyQzE0Ny4yODMgMTIzLjI4NSAxNDcuNDI5IDEyMy4wNTcgMTQ3LjU3MyAxMjIuODI4QzE0Ny41ODIgMTIyLjgxNiAxNDcuNTkgMTIyLjgwMiAxNDcuNTk4IDEyMi43OUMxNDguODM1IDEyMC44NDIgMTQ5Ljk4NyAxMTguODM5IDE1MS4wNTQgMTE2Ljc4TDE1MS4wNjggMTE2Ljc1NEMxNTEuMTk2IDExNi41MDcgMTUxLjMyMiAxMTYuMjU5IDE1MS40NDkgMTE2LjAxMkwxNTEuNDYxIDExNS45ODdMMTUxLjQ3MiAxMTUuOTY3QzE1MS41OTggMTE1LjcxNyAxNTEuNzIxIDExNS40NjYgMTUxLjg0MyAxMTUuMjE1TDE1MS44NDcgMTE1LjIwNUwxNTEuODU3IDExNS4xODZDMTUyLjg4MyAxMTMuMDkzIDE1My44MTkgMTEwLjk1IDE1NC42NjUgMTA4Ljc1OEMxNTQuOTc0IDEwNy44NTcgMTU0LjAwOSAxMDcuMTYxIDE0NS43NjQgMTA3LjE2MUwxNDUuNzY1IDEwNy4xNjVaTTY2LjczMDcgOS4yMjU5M0M2Ny4zODg4IDQuNDU3MjUgNTQuNzQ5IDUuMjQ1MjMgNTQuMTkxMSA0LjI1NDY5QzQ3LjYzODYgNi40ODgzMSA0MS40MDUxIDkuNTY2MjIgMzUuNjQ4MSAxMy40MTA3QzM1LjM5OTUgMTMuNTc0NyAzNS4yOTkzIDEzLjkzNDUgMzYuNDQ4NyAxNC4xNjlDMzguOTUxNCAxNC42ODA5IDQ0LjI0NjIgMTUuMjMzIDQ4LjAwMzYgMTUuMjY0MUM1Ni4wMDgyIDE1LjMzMzEgNjYuMTMwNCAxMy41NzkxIDY2LjczMDcgOS4yMjU5M1pcIixcbiAgICAgICAgICBmaWxsOiBcInVybCgjcGFpbnQwX2xpbmVhcilcIlxuICAgICAgICB9XG4gICAgICApLFxuICAgICAgLyogQF9fUFVSRV9fICovIGMoXG4gICAgICAgIFwicGF0aFwiLFxuICAgICAgICB7XG4gICAgICAgICAgb3BhY2l0eTogXCIwLjM1XCIsXG4gICAgICAgICAgZDogXCJNMTU0LjY0NSAxMDguODM1QzE0Ny45OTcgMTI2LjAzMSAxMzUuNTc2IDE0MC4zNTYgMTE5Ljc2NCAxNDkuNDMzQzExOS41MTIgMTQ4LjkxMyAxMTguNTU5IDE0OC4yMTMgMTE2LjMzNCAxNDcuMTc5QzExNC4xMDkgMTQ2LjE0NSAxMDQuMzc2IDE0Mi41NDEgMTA0LjQ2MiAxMzcuNDY0QzEwNC41NzMgMTMxLjA2NiAxMTMuMjY3IDEyNS4yMTQgMTI1LjYxNCAxMjAuMzkyQzEzNy40NTQgMTE1Ljc2OCAxNDguMjkzIDExMi40NzYgMTUwLjI5MiAxMTEuNjc0QzE1Mi42NzkgMTEwLjcxNyAxNTQuMDg0IDExMC4xMjkgMTU0LjY0NSAxMDguODM1Wk0xNy42MTM4IDcwLjE5MzlDMzEuNjY4NSA2NC4wNzQxIDQ2LjQwMjkgNTcuMjMxNiA1Ni4wMzk4IDUyLjY5MTVDNzEuMTE2MyA0NS41ODg1IDg0LjI4MDYgMzYuOTMyNiA4MS40MTU4IDI4LjExNTdDNzguODY4NiAyMC4yNjM0IDY4LjM5MDIgMjEuMjA3MiA0Ny40ODAzIDI0Ljk0OUMzNC4wMzAzIDI3LjM1NTkgMTYuMjQ2MyAzMS43ODcgMTMuODQ4MiAzNC45OTUzTDEzLjc1NDcgMzUuMTMyNkMxMy42NTYgMzUuMjgxIDEzLjU1NjYgMzUuNDI5NCAxMy40NTc5IDM1LjU3NzhDNS4xNjI1IDQ3Ljk3NjkgMC4yNDAxNSA2Mi44MzIgMC4wMDg2NTAxOSA3OC44MTcyQzAuMDA0MTk4MjcgNzkuMTYzNyAwLjAwMDQ4ODI4MSA3OS41MTAyIDAuMDAwNDg4MjgxIDc5Ljg1NTlDMC4wMzA5MDk4IDc4LjQzMzYgNS4xMzI4MiA3NS42Mjg5IDE3LjYxMzggNzAuMTkzOVpNMTMzLjM3NSAzNy45NTk1QzExNi45NzcgNDAuMzcwMiA5MC45NTU2IDQ1LjE4NzggOTMuNDk1NCA2MC41NjZDOTUuNDUwNSA3Mi40MDU4IDExOS4xMDUgNzUuODU4OSAxMjguOTkxIDc3Ljc2NTFDMTM2LjgzOSA3OS4yNzk0IDE1Mi4xOTYgODEuMzcxOCAxNTguNzY3IDgzLjAxMzhDMTU5LjY0NCA4My4yMzY0IDE1OS45MiA4My42NTQ5IDE1OS44OTYgODQuMTI2OEMxNTkuODk2IDg0LjEyMTYgMTU5Ljg5NiA4NC4xMTcxIDE1OS44OTYgODQuMTExOUMxNTkuOTMgODMuNDMwOCAxNTkuOTU1IDgyLjc0NzQgMTU5Ljk3IDgyLjA2MThWODEuOTM5NEMxNTkuOTg2IDgxLjI5MzkgMTU5Ljk5NCA4MC42NDcxIDE1OS45OTQgNzkuOTk5MUMxNTkuOTk0IDY1LjIwMDQgMTU1Ljk3NSA1MS4zNDE4IDE0OC45NzEgMzkuNDUxNkwxNDguNjk0IDM5LjAwNjRDMTQ3Ljg1MSAzNy42NDM0IDE0Mi4xODUgMzYuNjY0IDEzMy4zNzUgMzcuOTU5NVpNOTIuNDM3MyA5NS4yNTE5QzkwLjg3NTQgODkuNDY0NSA4Mi40MDE5IDg1LjI3OTEgNzAuMzA4MyA4NS41NzUxQzU3LjU0NjEgODUuODg4MiA0NC4yOTEyIDg3LjA5MTcgMjguMzE2MiA5MC42ODM2QzE0LjA0MTEgOTMuODkzNCA1LjM4ODggOTcuNTkyOSA0LjA1MzIzIDk4LjE0NDJDMi44MDE0OSA5OC42NjM2IDIuMzc3MDcgOTkuMzQwMiAyLjYwNjM1IDEwMC4zMjNWMTAwLjMyOUMyLjY2MjI1IDEwMC41NDEgMi43MTgxNCAxMDAuNzUyIDIuNzc0MDQgMTAwLjk2MUMyLjg0ODI0IDEwMS4yMzcgMi45MjI0NCAxMDEuNTEzIDMuMDAzMzEgMTAxLjc4OUMzLjAyNzA2IDEwMS44NzMgMy4wNTE1NCAxMDEuOTU4IDMuMDc3NTEgMTAyLjA0M0MzLjE0MTMyIDEwMi4yNjUgMy4yMDUxMyAxMDIuNDg4IDMuMjcwNDMgMTAyLjcwNUMzLjI4ODk4IDEwMi43NjkgMy4zMDc1MyAxMDIuODMzIDMuMzI2ODIgMTAyLjg5N0MzLjQwNzk0IDEwMy4xNjggMy40OTAwNiAxMDMuNDM4IDMuNTczMTYgMTAzLjcwN0MzLjU5NzY0IDEwMy43ODYgMy42MjI4NyAxMDMuODY1IDMuNjQ3MzYgMTAzLjk0NEMzLjcxMjY1IDEwNC4xNTMgMy43Nzk0MyAxMDQuMzYxIDMuODQ2MjEgMTA0LjU2OUwzLjkyNDEyIDEwNC44MTJDNC4wMTA2OCAxMDUuMDc3IDQuMDk4NzMgMTA1LjM0MiA0LjE4ODI3IDEwNS42MDdMNC4yNTcyNyAxMDUuODFDNC4zMzE0NyAxMDYuMDE4IDQuNDAwNDcgMTA2LjIyNyA0LjQ3MzE5IDEwNi40MzVMNC41NjgxNiAxMDYuNzA2QzQuNjUzMjQgMTA2Ljk0NiA0LjczOTU2IDEwNy4xODYgNC44MjcxMiAxMDcuNDI1TDQuODkzOSAxMDcuNjA3QzQuOTc3NDkgMTA3LjgzNiA1LjA2MjU3IDEwOC4wNjQgNS4xNDkxNCAxMDguMjkyTDUuMjU4MjEgMTA4LjU3N0M1LjMzMTkyIDEwOC43NzEgNS40MDYxMiAxMDguOTY0IDUuNDgwODEgMTA5LjE1NkM1LjUxMTIzIDEwOS4yMzQgNS41NDA5MSAxMDkuMzEyIDUuNTcyMDcgMTA5LjM5QzUuNjcxMDEgMTA5LjYzNyA1Ljc2OTk0IDEwOS44ODQgNS44Njg4NyAxMTAuMTMyQzUuOTA4MTkgMTEwLjIzIDUuOTQ5IDExMC4zMjcgNS45ODkwNyAxMTAuNDI4QzYuMDYwMyAxMTAuNiA2LjEzMTc4IDExMC43NzQgNi4yMDM1MSAxMTAuOTQ4TDYuMzI4MTYgMTExLjI0NUM2LjQzMDA2IDExMS40ODQgNi41MzI3IDExMS43MjMgNi42MzYwOCAxMTEuOTYxQzYuNjc5MTIgMTEyLjA2IDYuNzIyOSAxMTIuMTU4IDYuNzY1OTMgMTEyLjI1OEM2LjgzNzE2IDExMi40MiA2LjkwODg5IDExMi41ODEgNi45ODExMSAxMTIuNzQyTDcuMTI5NTEgMTEzLjA3NUM3LjIxMTYyIDExMy4yNTYgNy4yOTQ3MiAxMTMuNDM3IDcuMzc4ODEgMTEzLjYxOEM3LjQ0NTU5IDExMy43NjYgNy41MTM4NSAxMTMuOTA3IDcuNTgxMzggMTE0LjA1MUM3LjY1NTU3IDExNC4yMDggNy43Mjk3NyAxMTQuMzY1IDcuODAzOTcgMTE0LjUyTDcuOTc3NiAxMTQuODgxQzguMDQ1MTIgMTE1LjAyIDguMTEzMzggMTE1LjE1OSA4LjE4MTY0IDExNS4yOThDOC4yNjI1MiAxMTUuNDYyIDguMzQzNCAxMTUuNjI1IDguNDI1NzYgMTE1Ljc4OEM4LjUwODEyIDExNS45NTIgOC41OTA0OCAxMTYuMTE4IDguNjc0MzIgMTE2LjI4MkM4Ljc0MDExIDExNi40MTEgOC44MDY0IDExNi41MzkgOC44NzMxOCAxMTYuNjY4QzguOTMzNTMgMTE2Ljc4NSA4Ljk5NDM3IDExNi45MDIgOS4wNTU3MSAxMTcuMDE5QzkuMTIzOTcgMTE3LjE1MSA5LjE5Mjk3IDExNy4yODIgOS4yNjI3MiAxMTcuNDEzQzkuMzY1NjEgMTE3LjYwOCA5LjQ2OTQ5IDExNy44MDIgOS41NzQzNiAxMTcuOTk2QzkuNjU0NDkgMTE4LjE0NCA5LjczNTEyIDExOC4yOTMgOS44MTYyNCAxMTguNDQxQzkuODcwNjYgMTE4LjU0IDkuOTI1MzIgMTE4LjYzOSA5Ljk4MDIyIDExOC43MzhDMTAuMDU5NCAxMTguODgxIDEwLjEzOSAxMTkuMDI0IDEwLjIxOTEgMTE5LjE2NkwxMC4zNjE2IDExOS40MThDMTAuNTEgMTE5LjY4MiAxMC42NjE0IDExOS45NDYgMTAuODE1NyAxMjAuMjA4QzEwLjg2MSAxMjAuMjgzIDEwLjkwNTUgMTIwLjM2MiAxMC45NTA3IDEyMC40MzlDMTEuMDQwMyAxMjAuNTkyIDExLjEzMDMgMTIwLjc0NCAxMS4yMjA4IDEyMC44OTZMMTEuMzQyNSAxMjEuMDk5QzExLjUzMSAxMjEuNDE0IDExLjcyMTIgMTIxLjcyNiAxMS45MTMxIDEyMi4wMzdMMTEuOTY0MyAxMjIuMTE5QzEyLjA2NjIgMTIyLjI4MyAxMi4xNjgzIDEyMi40NDYgMTIuMjcwNyAxMjIuNjA5TDEyLjM3MjQgMTIyLjc3QzEyLjcwMDMgMTIzLjI4NyAxMy4wMzQgMTIzLjggMTMuMzczMyAxMjQuMzFMMTMuNDQ3NSAxMjQuNDE4QzEzLjgwNzEgMTI0Ljk1NiAxNC4xNzM5IDEyNS40OSAxNC41NDc5IDEyNi4wMkMxNC41NTE2IDEyNi4wMjcgMTQuNTU2MSAxMjYuMDMzIDE0LjU2MDUgMTI2LjA0QzE3LjUyMzYgMTMwLjI0MyAyMC44ODI5IDEzNC4xNTIgMjQuNTkyMiAxMzcuNzE0QzI0LjcyMzMgMTM3Ljg0MSAyNC44NTUzIDEzNy45NjcgMjQuOTg4NCAxMzguMDkzTDI1LjA4MDQgMTM4LjE4QzI1LjU3NTEgMTM4LjY0OCAyNi4wNzcyIDEzOS4xMSAyNi41ODY2IDEzOS41NjZMMjYuNjA5NiAxMzkuNTg3QzI3LjExODcgMTQwLjA0NCAyNy42MzM4IDE0MC40OTQgMjguMTU1MiAxNDAuOTM3TDI4LjI2OTUgMTQxLjAzNUwyOC4yNzYyIDE0MS4wNDJDMjguNDU5MiAxNDEuMTk2IDI4LjY0MzIgMTQxLjM1IDI4LjgyODIgMTQxLjUwNEMyOC45MDk0IDE0MS41NjggMjkuMDAxIDE0MS42MTggMjkuMDk5IDE0MS42NTJDMjguODg2MSAxNDEuNTcgMjkuMjM2MyAxNDEuMjA3IDMwLjMxNTEgMTQwLjhDMzUuMDYzOSAxMzkuMDE5IDQxLjA0NjUgMTM2LjY1MSA1MS41OTc2IDEzMS40MjZDNjIuMTgyIDEyNi4xODUgNjYuMjcxOSAxMjMuOTg5IDc3LjYyNzIgMTE1LjcwNUM4OC4zOTA1IDEwNy44NDkgOTQuNTIyMyAxMDIuOTY4IDkyLjQzNzMgOTUuMjUxOVpNODYuMTQyMyAxNTAuOTI5Qzg1LjA0OTMgMTQ3LjYyMiA3Ni40NjgzIDE0Ni40MTYgNjYuMDY1NiAxNDguNTA4QzYwLjEgMTQ5LjcwOCA1NS44NTI5IDE1MS41MjYgNTMuOTcxMiAxNTIuNTE1QzUxLjQ2NyAxNTMuODI5IDUxLjE3MDIgMTU0LjY0MyA1My4yOTIzIDE1NS40MzFINTMuMjk2N0M1My40MzEgMTU1LjQ3OCA1My41NjY4IDE1NS41MjUgNTMuNzAxOCAxNTUuNTcyTDU0LjA0NDYgMTU1LjY5QzU0LjU4ODggMTU1Ljg3NiA1NS4xNDA4IDE1Ni4wNTkgNTUuNzAwOCAxNTYuMjM3TDU1Ljc0MDggMTU2LjI1MUM1Ni4yOTY4IDE1Ni40MjYgNTYuODU4NSAxNTYuNTk4IDU3LjQyNTkgMTU2Ljc2NkM1Ny42MTkzIDE1Ni44MjIgNTcuODEzIDE1Ni44NzkgNTguMDA2OSAxNTYuOTM1TDU4LjExODkgMTU2Ljk2N0M2My4zMTUzIDE1OC40NCA2OC42NDc5IDE1OS4zODEgNzQuMDM0NSAxNTkuNzc2Qzc1LjU1NDkgMTU4LjE1NyA4Ny44NiAxNTYuMTMgODYuMTQyMyAxNTAuOTI5Wk04Mi40NDEzIDguNTUyNzZDMTA1LjMxOCA4LjIzOTY1IDExNC45NjcgMTAuNjg2NyAxMTkuMzU4IDEyLjIzM0MxMjEuOTY4IDEzLjE1MyAxMjIuNjQzIDE0LjAyOTMgMTIyLjgzNCAxNC42MTE3QzEyMi40MTkgMTMuMTIzMyAxMjAuODggMTEuMTcyNyAxMTcuMTI5IDkuMTIxMTJMMTE3LjExNiA5LjExMzdDMTA2LjAyMyAzLjI5MzYzIDkzLjM5NiAwIDgwLjAwMDEgMEM2My41OTQgMCA0OC4zNDI1IDQuOTM5MzQgMzUuNjQ4NSAxMy40MTA1QzQzLjc2NDQgMTEuNzQ2MiA2Mi41NTA4IDguODI0MzIgODIuNDQxMyA4LjU1Mjc2WlwiLFxuICAgICAgICAgIGZpbGw6IFwidXJsKCNwYWludDFfbGluZWFyKVwiXG4gICAgICAgIH1cbiAgICAgICksXG4gICAgICAvKiBAX19QVVJFX18gKi8gYyhcbiAgICAgICAgXCJwYXRoXCIsXG4gICAgICAgIHtcbiAgICAgICAgICBzdHlsZTogeyBtaXhCbGVuZE1vZGU6IFwibXVsdGlwbHlcIiB9LFxuICAgICAgICAgIGQ6IFwiTTE1NC42NDUgMTA4LjgzNUMxNDcuOTk3IDEyNi4wMzEgMTM1LjU3NiAxNDAuMzU2IDExOS43NjQgMTQ5LjQzM0MxMTkuNTEyIDE0OC45MTMgMTE4LjU1OSAxNDguMjEzIDExNi4zMzQgMTQ3LjE3OUMxMTQuMTA5IDE0Ni4xNDUgMTA0LjM3NiAxNDIuNTQxIDEwNC40NjIgMTM3LjQ2NEMxMDQuNTczIDEzMS4wNjYgMTEzLjI2NyAxMjUuMjE0IDEyNS42MTQgMTIwLjM5MkMxMzcuNDU0IDExNS43NjggMTQ4LjI5MyAxMTIuNDc2IDE1MC4yOTIgMTExLjY3NEMxNTIuNjc5IDExMC43MTcgMTU0LjA4NCAxMTAuMTI5IDE1NC42NDUgMTA4LjgzNVpNMTcuNjEzOCA3MC4xOTM5QzMxLjY2ODUgNjQuMDc0MSA0Ni40MDI5IDU3LjIzMTYgNTYuMDM5OCA1Mi42OTE1QzcxLjExNjMgNDUuNTg4NSA4NC4yODA2IDM2LjkzMjYgODEuNDE1OCAyOC4xMTU3Qzc4Ljg2ODYgMjAuMjYzNCA2OC4zOTAyIDIxLjIwNzIgNDcuNDgwMyAyNC45NDlDMzQuMDMwMyAyNy4zNTU5IDE2LjI0NjMgMzEuNzg3IDEzLjg0ODIgMzQuOTk1M0wxMy43NTQ3IDM1LjEzMjZDMTMuNjU2IDM1LjI4MSAxMy41NTY2IDM1LjQyOTQgMTMuNDU3OSAzNS41Nzc4QzUuMTYyNSA0Ny45NzY5IDAuMjQwMTUgNjIuODMyIDAuMDA4NjUwMTkgNzguODE3MkMwLjAwNDE5ODI3IDc5LjE2MzcgMC4wMDA0ODgyODEgNzkuNTEwMiAwLjAwMDQ4ODI4MSA3OS44NTU5QzAuMDMwOTA5OCA3OC40MzM2IDUuMTMyODIgNzUuNjI4OSAxNy42MTM4IDcwLjE5MzlaTTEzMy4zNzUgMzcuOTU5NUMxMTYuOTc3IDQwLjM3MDIgOTAuOTU1NiA0NS4xODc4IDkzLjQ5NTQgNjAuNTY2Qzk1LjQ1MDUgNzIuNDA1OCAxMTkuMTA1IDc1Ljg1ODkgMTI4Ljk5MSA3Ny43NjUxQzEzNi44MzkgNzkuMjc5NCAxNTIuMTk2IDgxLjM3MTggMTU4Ljc2NyA4My4wMTM4QzE1OS42NDQgODMuMjM2NCAxNTkuOTIgODMuNjU0OSAxNTkuODk2IDg0LjEyNjhDMTU5Ljg5NiA4NC4xMjE2IDE1OS44OTYgODQuMTE3MSAxNTkuODk2IDg0LjExMTlDMTU5LjkzIDgzLjQzMDggMTU5Ljk1NSA4Mi43NDc0IDE1OS45NyA4Mi4wNjE4VjgxLjkzOTRDMTU5Ljk4NiA4MS4yOTM5IDE1OS45OTQgODAuNjQ3MSAxNTkuOTk0IDc5Ljk5OTFDMTU5Ljk5NCA2NS4yMDA0IDE1NS45NzUgNTEuMzQxOCAxNDguOTcxIDM5LjQ1MTZMMTQ4LjY5NCAzOS4wMDY0QzE0Ny44NTEgMzcuNjQzNCAxNDIuMTg1IDM2LjY2NCAxMzMuMzc1IDM3Ljk1OTVaTTkyLjQzNzMgOTUuMjUxOUM5MC44NzU0IDg5LjQ2NDUgODIuNDAxOSA4NS4yNzkxIDcwLjMwODMgODUuNTc1MUM1Ny41NDYxIDg1Ljg4ODIgNDQuMjkxMiA4Ny4wOTE3IDI4LjMxNjIgOTAuNjgzNkMxNC4wNDExIDkzLjg5MzQgNS4zODg4IDk3LjU5MjkgNC4wNTMyMyA5OC4xNDQyQzIuODAxNDkgOTguNjYzNiAyLjM3NzA3IDk5LjM0MDIgMi42MDYzNSAxMDAuMzIzVjEwMC4zMjlDMi42NjIyNSAxMDAuNTQxIDIuNzE4MTQgMTAwLjc1MiAyLjc3NDA0IDEwMC45NjFDMi44NDgyNCAxMDEuMjM3IDIuOTIyNDQgMTAxLjUxMyAzLjAwMzMxIDEwMS43ODlDMy4wMjcwNiAxMDEuODczIDMuMDUxNTQgMTAxLjk1OCAzLjA3NzUxIDEwMi4wNDNDMy4xNDEzMiAxMDIuMjY1IDMuMjA1MTMgMTAyLjQ4OCAzLjI3MDQzIDEwMi43MDVDMy4yODg5OCAxMDIuNzY5IDMuMzA3NTMgMTAyLjgzMyAzLjMyNjgyIDEwMi44OTdDMy40MDc5NCAxMDMuMTY4IDMuNDkwMDYgMTAzLjQzOCAzLjU3MzE2IDEwMy43MDdDMy41OTc2NCAxMDMuNzg2IDMuNjIyODcgMTAzLjg2NSAzLjY0NzM2IDEwMy45NDRDMy43MTI2NSAxMDQuMTUzIDMuNzc5NDMgMTA0LjM2MSAzLjg0NjIxIDEwNC41NjlMMy45MjQxMiAxMDQuODEyQzQuMDEwNjggMTA1LjA3NyA0LjA5ODczIDEwNS4zNDIgNC4xODgyNyAxMDUuNjA3TDQuMjU3MjcgMTA1LjgxQzQuMzMxNDcgMTA2LjAxOCA0LjQwMDQ3IDEwNi4yMjcgNC40NzMxOSAxMDYuNDM1TDQuNTY4MTYgMTA2LjcwNkM0LjY1MzI0IDEwNi45NDYgNC43Mzk1NiAxMDcuMTg2IDQuODI3MTIgMTA3LjQyNUw0Ljg5MzkgMTA3LjYwN0M0Ljk3NzQ5IDEwNy44MzYgNS4wNjI1NyAxMDguMDY0IDUuMTQ5MTQgMTA4LjI5Mkw1LjI1ODIxIDEwOC41NzdDNS4zMzE5MiAxMDguNzcxIDUuNDA2MTIgMTA4Ljk2NCA1LjQ4MDgxIDEwOS4xNTZDNS41MTEyMyAxMDkuMjM0IDUuNTQwOTEgMTA5LjMxMiA1LjU3MjA3IDEwOS4zOUM1LjY3MTAxIDEwOS42MzcgNS43Njk5NCAxMDkuODg0IDUuODY4ODcgMTEwLjEzMkM1LjkwODE5IDExMC4yMyA1Ljk0OSAxMTAuMzI3IDUuOTg5MDcgMTEwLjQyOEM2LjA2MDMgMTEwLjYgNi4xMzE3OCAxMTAuNzc0IDYuMjAzNTEgMTEwLjk0OEw2LjMyODE2IDExMS4yNDVDNi40MzAwNiAxMTEuNDg0IDYuNTMyNyAxMTEuNzIzIDYuNjM2MDggMTExLjk2MUM2LjY3OTEyIDExMi4wNiA2LjcyMjkgMTEyLjE1OCA2Ljc2NTkzIDExMi4yNThDNi44MzcxNiAxMTIuNDIgNi45MDg4OSAxMTIuNTgxIDYuOTgxMTEgMTEyLjc0Mkw3LjEyOTUxIDExMy4wNzVDNy4yMTE2MiAxMTMuMjU2IDcuMjk0NzIgMTEzLjQzNyA3LjM3ODgxIDExMy42MThDNy40NDU1OSAxMTMuNzY2IDcuNTEzODUgMTEzLjkwNyA3LjU4MTM4IDExNC4wNTFDNy42NTU1NyAxMTQuMjA4IDcuNzI5NzcgMTE0LjM2NSA3LjgwMzk3IDExNC41Mkw3Ljk3NzYgMTE0Ljg4MUM4LjA0NTEyIDExNS4wMiA4LjExMzM4IDExNS4xNTkgOC4xODE2NCAxMTUuMjk4QzguMjYyNTIgMTE1LjQ2MiA4LjM0MzQgMTE1LjYyNSA4LjQyNTc2IDExNS43ODhDOC41MDgxMiAxMTUuOTUyIDguNTkwNDggMTE2LjExOCA4LjY3NDMyIDExNi4yODJDOC43NDAxMSAxMTYuNDExIDguODA2NCAxMTYuNTM5IDguODczMTggMTE2LjY2OEM4LjkzMzUzIDExNi43ODUgOC45OTQzNyAxMTYuOTAyIDkuMDU1NzEgMTE3LjAxOUM5LjEyMzk3IDExNy4xNTEgOS4xOTI5NyAxMTcuMjgyIDkuMjYyNzIgMTE3LjQxM0M5LjM2NTYxIDExNy42MDggOS40Njk0OSAxMTcuODAyIDkuNTc0MzYgMTE3Ljk5NkM5LjY1NDQ5IDExOC4xNDQgOS43MzUxMiAxMTguMjkzIDkuODE2MjQgMTE4LjQ0MUM5Ljg3MDY2IDExOC41NCA5LjkyNTMyIDExOC42MzkgOS45ODAyMiAxMTguNzM4QzEwLjA1OTQgMTE4Ljg4MSAxMC4xMzkgMTE5LjAyNCAxMC4yMTkxIDExOS4xNjZMMTAuMzYxNiAxMTkuNDE4QzEwLjUxIDExOS42ODIgMTAuNjYxNCAxMTkuOTQ2IDEwLjgxNTcgMTIwLjIwOEMxMC44NjEgMTIwLjI4MyAxMC45MDU1IDEyMC4zNjIgMTAuOTUwNyAxMjAuNDM5QzExLjA0MDMgMTIwLjU5MiAxMS4xMzAzIDEyMC43NDQgMTEuMjIwOCAxMjAuODk2TDExLjM0MjUgMTIxLjA5OUMxMS41MzEgMTIxLjQxNCAxMS43MjEyIDEyMS43MjYgMTEuOTEzMSAxMjIuMDM3TDExLjk2NDMgMTIyLjExOUMxMi4wNjYyIDEyMi4yODMgMTIuMTY4MyAxMjIuNDQ2IDEyLjI3MDcgMTIyLjYwOUwxMi4zNzI0IDEyMi43N0MxMi43MDAzIDEyMy4yODcgMTMuMDM0IDEyMy44IDEzLjM3MzMgMTI0LjMxTDEzLjQ0NzUgMTI0LjQxOEMxMy44MDcxIDEyNC45NTYgMTQuMTczOSAxMjUuNDkgMTQuNTQ3OSAxMjYuMDJDMTQuNTUxNiAxMjYuMDI3IDE0LjU1NjEgMTI2LjAzMyAxNC41NjA1IDEyNi4wNEMxNy41MjM2IDEzMC4yNDMgMjAuODgyOSAxMzQuMTUyIDI0LjU5MjIgMTM3LjcxNEMyNC43MjMzIDEzNy44NDEgMjQuODU1MyAxMzcuOTY3IDI0Ljk4ODQgMTM4LjA5M0wyNS4wODA0IDEzOC4xOEMyNS41NzUxIDEzOC42NDggMjYuMDc3MiAxMzkuMTEgMjYuNTg2NiAxMzkuNTY2TDI2LjYwOTYgMTM5LjU4N0MyNy4xMTg3IDE0MC4wNDQgMjcuNjMzOCAxNDAuNDk0IDI4LjE1NTIgMTQwLjkzN0wyOC4yNjk1IDE0MS4wMzVMMjguMjc2MiAxNDEuMDQyQzI4LjQ1OTIgMTQxLjE5NiAyOC42NDMyIDE0MS4zNSAyOC44MjgyIDE0MS41MDRDMjguOTA5NCAxNDEuNTY4IDI5LjAwMSAxNDEuNjE4IDI5LjA5OSAxNDEuNjUyQzI4Ljg4NjEgMTQxLjU3IDI5LjIzNjMgMTQxLjIwNyAzMC4zMTUxIDE0MC44QzM1LjA2MzkgMTM5LjAxOSA0MS4wNDY1IDEzNi42NTEgNTEuNTk3NiAxMzEuNDI2QzYyLjE4MiAxMjYuMTg1IDY2LjI3MTkgMTIzLjk4OSA3Ny42MjcyIDExNS43MDVDODguMzkwNSAxMDcuODQ5IDk0LjUyMjMgMTAyLjk2OCA5Mi40MzczIDk1LjI1MTlaTTg2LjE0MjMgMTUwLjkyOUM4NS4wNDkzIDE0Ny42MjIgNzYuNDY4MyAxNDYuNDE2IDY2LjA2NTYgMTQ4LjUwOEM2MC4xIDE0OS43MDggNTUuODUyOSAxNTEuNTI2IDUzLjk3MTIgMTUyLjUxNUM1MS40NjcgMTUzLjgyOSA1MS4xNzAyIDE1NC42NDMgNTMuMjkyMyAxNTUuNDMxSDUzLjI5NjdDNTMuNDMxIDE1NS40NzggNTMuNTY2OCAxNTUuNTI1IDUzLjcwMTggMTU1LjU3Mkw1NC4wNDQ2IDE1NS42OUM1NC41ODg4IDE1NS44NzYgNTUuMTQwOCAxNTYuMDU5IDU1LjcwMDggMTU2LjIzN0w1NS43NDA4IDE1Ni4yNTFDNTYuMjk2OCAxNTYuNDI2IDU2Ljg1ODUgMTU2LjU5OCA1Ny40MjU5IDE1Ni43NjZDNTcuNjE5MyAxNTYuODIyIDU3LjgxMyAxNTYuODc5IDU4LjAwNjkgMTU2LjkzNUw1OC4xMTg5IDE1Ni45NjdDNjMuMzE1MyAxNTguNDQgNjguNjQ3OSAxNTkuMzgxIDc0LjAzNDUgMTU5Ljc3NkM3NS41NTQ5IDE1OC4xNTcgODcuODYgMTU2LjEzIDg2LjE0MjMgMTUwLjkyOVpNODIuNDQxMyA4LjU1Mjc2QzEwNS4zMTggOC4yMzk2NSAxMTQuOTY3IDEwLjY4NjcgMTE5LjM1OCAxMi4yMzNDMTIxLjk2OCAxMy4xNTMgMTIyLjY0MyAxNC4wMjkzIDEyMi44MzQgMTQuNjExN0MxMjIuNDE5IDEzLjEyMzMgMTIwLjg4IDExLjE3MjcgMTE3LjEyOSA5LjEyMTEyTDExNy4xMTYgOS4xMTM3QzEwNi4wMjMgMy4yOTM2MyA5My4zOTYgMCA4MC4wMDAxIDBDNjMuNTk0IDAgNDguMzQyNSA0LjkzOTM0IDM1LjY0ODUgMTMuNDEwNUM0My43NjQ0IDExLjc0NjIgNjIuNTUwOCA4LjgyNDMyIDgyLjQ0MTMgOC41NTI3NlpcIixcbiAgICAgICAgICBmaWxsOiBcInVybCgjcGFpbnQyX2xpbmVhcilcIlxuICAgICAgICB9XG4gICAgICApLFxuICAgICAgLyogQF9fUFVSRV9fICovIGUxKFwiZGVmc1wiLCB7IGNoaWxkcmVuOiBbXG4gICAgICAgIC8qIEBfX1BVUkVfXyAqLyBlMShcbiAgICAgICAgICBcImxpbmVhckdyYWRpZW50XCIsXG4gICAgICAgICAge1xuICAgICAgICAgICAgaWQ6IFwicGFpbnQwX2xpbmVhclwiLFxuICAgICAgICAgICAgeDE6IFwiMS40MjkwN1wiLFxuICAgICAgICAgICAgeTE6IFwiOTEuNzU0NVwiLFxuICAgICAgICAgICAgeDI6IFwiMTU5LjMyOFwiLFxuICAgICAgICAgICAgeTI6IFwiNjkuNTYyOFwiLFxuICAgICAgICAgICAgZ3JhZGllbnRVbml0czogXCJ1c2VyU3BhY2VPblVzZVwiLFxuICAgICAgICAgICAgY2hpbGRyZW46IFtcbiAgICAgICAgICAgICAgLyogQF9fUFVSRV9fICovIGMoXCJzdG9wXCIsIHsgc3RvcENvbG9yOiBcIiM0MTQwNDJcIiB9KSxcbiAgICAgICAgICAgICAgLyogQF9fUFVSRV9fICovIGMoXCJzdG9wXCIsIHsgb2Zmc2V0OiBcIjAuM1wiLCBzdG9wQ29sb3I6IFwiIzgwODI4NVwiIH0pLFxuICAgICAgICAgICAgICAvKiBAX19QVVJFX18gKi8gYyhcInN0b3BcIiwgeyBvZmZzZXQ6IFwiMC41M1wiLCBzdG9wQ29sb3I6IFwiI0E3QTlBQ1wiIH0pLFxuICAgICAgICAgICAgICAvKiBAX19QVVJFX18gKi8gYyhcInN0b3BcIiwgeyBvZmZzZXQ6IFwiMC43N1wiLCBzdG9wQ29sb3I6IFwiIzgwODI4NVwiIH0pLFxuICAgICAgICAgICAgICAvKiBAX19QVVJFX18gKi8gYyhcInN0b3BcIiwgeyBvZmZzZXQ6IFwiMVwiLCBzdG9wQ29sb3I6IFwiIzQxNDA0MlwiIH0pXG4gICAgICAgICAgICBdXG4gICAgICAgICAgfVxuICAgICAgICApLFxuICAgICAgICAvKiBAX19QVVJFX18gKi8gZTEoXG4gICAgICAgICAgXCJsaW5lYXJHcmFkaWVudFwiLFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGlkOiBcInBhaW50MV9saW5lYXJcIixcbiAgICAgICAgICAgIHgxOiBcIjcuNDE4MTRcIixcbiAgICAgICAgICAgIHkxOiBcIjExMy42ODhcIixcbiAgICAgICAgICAgIHgyOiBcIjE1Mi40NjFcIixcbiAgICAgICAgICAgIHkyOiBcIjQ2LjA1MjFcIixcbiAgICAgICAgICAgIGdyYWRpZW50VW5pdHM6IFwidXNlclNwYWNlT25Vc2VcIixcbiAgICAgICAgICAgIGNoaWxkcmVuOiBbXG4gICAgICAgICAgICAgIC8qIEBfX1BVUkVfXyAqLyBjKFwic3RvcFwiLCB7IHN0b3BDb2xvcjogXCIjNkQ2RTcxXCIgfSksXG4gICAgICAgICAgICAgIC8qIEBfX1BVUkVfXyAqLyBjKFwic3RvcFwiLCB7IG9mZnNldDogXCIwLjEyXCIsIHN0b3BDb2xvcjogXCIjNzU3Njc5XCIgfSksXG4gICAgICAgICAgICAgIC8qIEBfX1BVUkVfXyAqLyBjKFwic3RvcFwiLCB7IG9mZnNldDogXCIwLjNcIiwgc3RvcENvbG9yOiBcIiM4QThCOEVcIiB9KSxcbiAgICAgICAgICAgICAgLyogQF9fUFVSRV9fICovIGMoXCJzdG9wXCIsIHsgb2Zmc2V0OiBcIjAuNTJcIiwgc3RvcENvbG9yOiBcIiNBQ0FFQjFcIiB9KSxcbiAgICAgICAgICAgICAgLyogQF9fUFVSRV9fICovIGMoXCJzdG9wXCIsIHsgb2Zmc2V0OiBcIjAuNTVcIiwgc3RvcENvbG9yOiBcIiNCMUIzQjZcIiB9KSxcbiAgICAgICAgICAgICAgLyogQF9fUFVSRV9fICovIGMoXCJzdG9wXCIsIHsgb2Zmc2V0OiBcIjFcIiwgc3RvcENvbG9yOiBcIiM4MDgyODVcIiB9KVxuICAgICAgICAgICAgXVxuICAgICAgICAgIH1cbiAgICAgICAgKSxcbiAgICAgICAgLyogQF9fUFVSRV9fICovIGUxKFxuICAgICAgICAgIFwibGluZWFyR3JhZGllbnRcIixcbiAgICAgICAgICB7XG4gICAgICAgICAgICBpZDogXCJwYWludDJfbGluZWFyXCIsXG4gICAgICAgICAgICB4MTogXCI3LjQxODE0XCIsXG4gICAgICAgICAgICB5MTogXCIxMTMuNjg4XCIsXG4gICAgICAgICAgICB4MjogXCIxNTIuNDYxXCIsXG4gICAgICAgICAgICB5MjogXCI0Ni4wNTIxXCIsXG4gICAgICAgICAgICBncmFkaWVudFVuaXRzOiBcInVzZXJTcGFjZU9uVXNlXCIsXG4gICAgICAgICAgICBjaGlsZHJlbjogW1xuICAgICAgICAgICAgICAvKiBAX19QVVJFX18gKi8gYyhcInN0b3BcIiwgeyBzdG9wQ29sb3I6IFwiIzZENkU3MVwiIH0pLFxuICAgICAgICAgICAgICAvKiBAX19QVVJFX18gKi8gYyhcInN0b3BcIiwgeyBvZmZzZXQ6IFwiMC4xMlwiLCBzdG9wQ29sb3I6IFwiIzc1NzY3OVwiIH0pLFxuICAgICAgICAgICAgICAvKiBAX19QVVJFX18gKi8gYyhcInN0b3BcIiwgeyBvZmZzZXQ6IFwiMC4zXCIsIHN0b3BDb2xvcjogXCIjOEE4QjhFXCIgfSksXG4gICAgICAgICAgICAgIC8qIEBfX1BVUkVfXyAqLyBjKFwic3RvcFwiLCB7IG9mZnNldDogXCIwLjUyXCIsIHN0b3BDb2xvcjogXCIjQUNBRUIxXCIgfSksXG4gICAgICAgICAgICAgIC8qIEBfX1BVUkVfXyAqLyBjKFwic3RvcFwiLCB7IG9mZnNldDogXCIwLjU1XCIsIHN0b3BDb2xvcjogXCIjQjFCM0I2XCIgfSksXG4gICAgICAgICAgICAgIC8qIEBfX1BVUkVfXyAqLyBjKFwic3RvcFwiLCB7IG9mZnNldDogXCIxXCIsIHN0b3BDb2xvcjogXCIjODA4Mjg1XCIgfSlcbiAgICAgICAgICAgIF1cbiAgICAgICAgICB9XG4gICAgICAgIClcbiAgICAgIF0gfSlcbiAgICBdXG4gIH1cbiksIFZSID0gKCkgPT4gLyogQF9fUFVSRV9fICovIGUxKFxuICBcInN2Z1wiLFxuICB7XG4gICAgd2lkdGg6IFwiMTYwXCIsXG4gICAgaGVpZ2h0OiBcIjEzMFwiLFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2MCAxMzBcIixcbiAgICBmaWxsOiBcIm5vbmVcIixcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIGNoaWxkcmVuOiBbXG4gICAgICAvKiBAX19QVVJFX18gKi8gYyhcbiAgICAgICAgXCJwYXRoXCIsXG4gICAgICAgIHtcbiAgICAgICAgICBkOiBcIk0yLjIzODA1IDg1LjgzMzZDMS42NDk0NiA4NS44NDYyIDEuMDc5NzUgODUuNjI2OSAwLjY1MzI4OCA4NS4yMjM3QzAuMjMzNDE4IDg0Ljc3NTQgMCA4NC4xODU4IDAgODMuNTczNEMwIDgyLjk2MTEgMC4yMzM0MTggODIuMzcxNSAwLjY1MzI4OCA4MS45MjMyQzEuMDg2MjMgODEuNTI4NCAxLjY1MjUzIDgxLjMwOTMgMi4yNDAyMyA4MS4zMDkzQzIuODI3OTMgODEuMzA5MyAzLjM5NDIzIDgxLjUyODQgMy44MjcxNyA4MS45MjMyQzQuMjQ3MDQgODIuMzcxNSA0LjQ4MDQ1IDgyLjk2MTEgNC40ODA0NSA4My41NzM0QzQuNDgwNDUgODQuMTg1OCA0LjI0NzA0IDg0Ljc3NTQgMy44MjcxNyA4NS4yMjM3QzMuMzk5MTEgODUuNjI3MiAyLjgyNzk3IDg1Ljg0NjQgMi4yMzgwNSA4NS44MzM2Wk0zLjk3OTU1IDEwOC42MDRIMC40OTY1NTJWODkuMzJIMy45Nzk1NVYxMDguNjA0WlwiLFxuICAgICAgICAgIGZpbGw6IFwiIzIzMUYyMFwiXG4gICAgICAgIH1cbiAgICAgICksXG4gICAgICAvKiBAX19QVVJFX18gKi8gYyhcbiAgICAgICAgXCJwYXRoXCIsXG4gICAgICAgIHtcbiAgICAgICAgICBkOiBcIk05Ljk2NjA0IDg5Ljg3ODNDMTAuNzYyOCA4OS42NzkzIDExLjgxNjQgODkuNDY3MyAxMy4xMzU2IDg5LjI0NjdDMTQuNjQxNyA4OS4wMTEzIDE2LjE2NDkgODguODk5OSAxNy42ODk2IDg4LjkxMzdDMTkuMDAxOCA4OC44NzI1IDIwLjMwOSA4OS4wOTMxIDIxLjUzMzkgODkuNTYyNUMyMi40OTM2IDg5Ljk0ODIgMjMuMzM2NiA5MC41NzQxIDIzLjk4MDcgOTEuMzc5M0MyNC42MTc2IDkyLjIwNTYgMjUuMDYzNSA5My4xNjExIDI1LjI4NjkgOTQuMTc4QzI1LjU0NDEgOTUuMzYwMyAyNS42NjgyIDk2LjU2NzMgMjUuNjU2OSA5Ny43NzY5VjEwOC41OTFIMjIuMTczOVY5OC41MTY2QzIyLjE4NjUgOTcuNTAyIDIyLjEwNDkgOTYuNDg4NCAyMS45MzAxIDk1LjQ4ODZDMjEuODE0MiA5NC43NiAyMS41NDA5IDk0LjA2NSAyMS4xMjkgOTMuNDUxM0MyMC43NTY0IDkyLjkzMzcgMjAuMjM2MyA5Mi41MzkgMTkuNjM1NyA5Mi4zMTc5QzE4Ljg5MjMgOTIuMDY1MSAxOC4xMDkzIDkxLjk0NjQgMTcuMzIzOSA5MS45Njc2QzE2Ljk0OTQgOTEuOTY3NiAxNi41NjIgOTEuOTY3NiAxNi4xNjU4IDkyLjAwMjJDMTUuNzY5NiA5Mi4wMzY4IDE1LjM4NjQgOTIuMDU4NCAxNS4wMjUxIDkyLjA5NzNDMTQuNjYzNyA5Mi4xMzYzIDE0LjM0MTYgOTIuMTc1MiAxNC4wNTQyIDkyLjIyNzFMMTMuNDQwMyA5Mi4zMzUyVjEwOC42MDRIOS45NTczNEw5Ljk2NjA0IDg5Ljg3ODNaXCIsXG4gICAgICAgICAgZmlsbDogXCIjMjMxRjIwXCJcbiAgICAgICAgfVxuICAgICAgKSxcbiAgICAgIC8qIEBfX1BVUkVfXyAqLyBjKFxuICAgICAgICBcInBhdGhcIixcbiAgICAgICAge1xuICAgICAgICAgIGQ6IFwiTTM0LjMyMDggODkuMzIwMUg0MS42NzQyVjkyLjIxMzlIMzQuMzIwOFYxMDEuMTEyQzM0LjMwNTEgMTAxLjkxNSAzNC4zNzk2IDEwMi43MTcgMzQuNTQyOCAxMDMuNTA0QzM0LjY1MSAxMDQuMDQzIDM0Ljg4MTggMTA0LjU1IDM1LjIxNzYgMTA0Ljk4N0MzNS41MDg2IDEwNS4zNDMgMzUuODk3MyAxMDUuNjA4IDM2LjMzNjYgMTA1Ljc0OUMzNi44NDM5IDEwNS45MDQgMzcuMzczIDEwNS45NzkgMzcuOTAzOSAxMDUuOTY5QzM4Ljc1NjggMTA1Ljk5OCAzOS42MDgyIDEwNS44NzkgNDAuNDIwNCAxMDUuNjE5QzQxLjA1NiAxMDUuMzg1IDQxLjQ5NTcgMTA1LjIxNyA0MS43MjY1IDEwNS4xMTdMNDIuMzk3IDEwNy45NzJDNDEuODA0NyAxMDguMjM0IDQxLjE5MzUgMTA4LjQ1MSA0MC41Njg0IDEwOC42MjFDMzkuNTk3MSAxMDguODk0IDM4LjU5MSAxMDkuMDI1IDM3LjU4MTcgMTA5LjAxQzM2LjQ3MTggMTA5LjA0NSAzNS4zNjUgMTA4Ljg3NiAzNC4zMTY0IDEwOC41MTNDMzMuNTAwNiAxMDguMjA4IDMyLjc4NDEgMTA3LjY4NyAzMi4yNDQgMTA3LjAwOEMzMS42OTQgMTA2LjI3OSAzMS4zMTc0IDEwNS40MzYgMzEuMTQyNSAxMDQuNTQyQzMwLjkxODMgMTAzLjQyNiAzMC44MTE4IDEwMi4yODkgMzAuODI0NyAxMDEuMTUxVjgzLjk0MzNMMzQuMzA3NyA4My4zNTA3TDM0LjMyMDggODkuMzIwMVpcIixcbiAgICAgICAgICBmaWxsOiBcIiMyMzFGMjBcIlxuICAgICAgICB9XG4gICAgICApLFxuICAgICAgLyogQF9fUFVSRV9fICovIGMoXG4gICAgICAgIFwicGF0aFwiLFxuICAgICAgICB7XG4gICAgICAgICAgZDogXCJNNDQuNjA0MyA5OS4wMDEyQzQ0LjU3MjMgOTcuNDc4OCA0NC44MjQ4IDk1Ljk2MzcgNDUuMzQ4NyA5NC41MzI4QzQ1Ljc4NTcgOTMuMzU0MyA0Ni40NTggOTIuMjc1OCA0Ny4zMjUzIDkxLjM2MjFDNDguMTI0MyA5MC41MzYyIDQ5LjA5MjMgODkuODkwMSA1MC4xNjQgODkuNDY3NUM1MS4yMDgzIDg5LjA1MzYgNTIuMzIyMyA4OC44NDA3IDUzLjQ0NjcgODguODQwM0M1Ni4wNTkgODguODQwMyA1OC4wNjE3IDg5LjY0OTIgNTkuNDU5MiA5MS4yNjdDNjAuODU2OCA5Mi44ODQ3IDYxLjU0OSA5NS4zNTQ3IDYxLjU0OSA5OC42NjM4Vjk5LjIzOTFDNjEuNTUwMyA5OS40NTYgNjEuNTM3MiA5OS42NzI3IDYxLjUwOTggOTkuODg3OUg0OC4yMjIyQzQ4LjM3MzEgMTAxLjg4OSA0OC45NTM2IDEwMy40MSA0OS45NjM3IDEwNC40NTFDNTAuOTczOCAxMDUuNDkzIDUyLjU3MDIgMTA2LjAxMiA1NC43NTI4IDEwNi4wMDlDNTUuNzg5NCAxMDYuMDI5IDU2LjgyNDcgMTA1LjkyMyA1Ny44MzUzIDEwNS42OTNDNTguNDc5OCAxMDUuNTQzIDU5LjExMDQgMTA1LjMzOSA1OS43MjA1IDEwNS4wODNMNjAuMjAzNyAxMDcuOTczQzU5LjQ5MzQgMTA4LjI5MiA1OC43NDgzIDEwOC41MjggNTcuOTgzMyAxMDguNjc4QzU2LjgwMTQgMTA4LjkzOCA1NS41OTMzIDEwOS4wNjMgNTQuMzgyOCAxMDkuMDVDNTIuODgzOCAxMDkuMDg0IDUxLjM5MjggMTA4LjgyNSA0OS45OTQyIDEwOC4yODhDNDguODI5OSAxMDcuODMyIDQ3Ljc4NzEgMTA3LjExNiA0Ni45NDY2IDEwNi4xOTVDNDYuMTQ0NCAxMDUuMjc0IDQ1LjU1MDUgMTA0LjE5MyA0NS4yMDUxIDEwMy4wMjRDNDQuNzk5MiAxMDEuNzIxIDQ0LjU5NjYgMTAwLjM2NSA0NC42MDQzIDk5LjAwMTJaTTU3LjkyNjcgOTcuMTA2NkM1OC4wMDg4IDk1LjcyOTEgNTcuNTkxOCA5NC4zNjgxIDU2Ljc1MTIgOTMuMjY5N0M1Ni4zNTI0IDkyLjc3NjUgNTUuODQyMiA5Mi4zODM2IDU1LjI2MiA5Mi4xMjI4QzU0LjY4MTkgOTEuODYyIDU0LjA0OCA5MS43NDA3IDUzLjQxMTkgOTEuNzY4N0M1Mi42NzkzIDkxLjc2MTIgNTEuOTU1NCA5MS45MjczIDUxLjMwMDMgOTIuMjUzMkM1MC43MDkxIDkyLjU0ODggNTAuMTgzNSA5Mi45NTkyIDQ5Ljc1NDcgOTMuNDYwMUM0OS4zMjQ5IDkzLjk2NTMgNDguOTg4OCA5NC41NDI0IDQ4Ljc2MjEgOTUuMTY0NEM0OC41MzA3IDk1Ljc5ODggNDguMzc0MyA5Ni40NTc4IDQ4LjI5NjIgOTcuMTI4Mkw1Ny45MjY3IDk3LjEwNjZaXCIsXG4gICAgICAgICAgZmlsbDogXCIjMjMxRjIwXCJcbiAgICAgICAgfVxuICAgICAgKSxcbiAgICAgIC8qIEBfX1BVUkVfXyAqLyBjKFxuICAgICAgICBcInBhdGhcIixcbiAgICAgICAge1xuICAgICAgICAgIGQ6IFwiTTczLjE0NzYgODguOTEzNkM3My40OTA4IDg4LjkxNTMgNzMuODMzNyA4OC45MzQgNzQuMTc1MSA4OC45Njk5Qzc0LjU1ODIgODkuMDA0NSA3NC45MzcgODkuMDU2NCA3NS4zMTE0IDg5LjExN0M3NS42ODU4IDg5LjE3NzUgNzYuMDI1NCA4OS4yNDI0IDc2LjMzODkgODkuMzAzQzc2LjU3MSA4OS4zNDUzIDc2LjgwMDYgODkuNDAwMiA3Ny4wMjY4IDg5LjQ2NzNMNzYuNDMwMyA5Mi40NzM2Qzc1Ljk4NDkgOTIuMzI5MiA3NS41MzEzIDkyLjIxMDcgNzUuMDcxOSA5Mi4xMTg5Qzc0LjI2NTQgOTEuOTY5MSA3My40NDU2IDkxLjkwMSA3Mi42MjUxIDkxLjkxNTZDNzEuOTc4MyA5MS45MTYyIDcxLjMzMzMgOTEuOTg0NCA3MC43MDA4IDkyLjExODlDNzAuMDY5NSA5Mi4yNTc0IDY5LjY1MTUgOTIuMzQ4MiA2OS40NTEzIDkyLjQwMDFWMTA4LjYwNEg2NS45NjgzVjkwLjEzNzhDNjYuOTY0IDg5Ljc5MTUgNjcuOTgyMiA4OS41MTI2IDY5LjAxNTkgODkuMzAzQzcwLjM3NTQgODkuMDI4NyA3MS43NjA0IDg4Ljg5ODIgNzMuMTQ3NiA4OC45MTM2WlwiLFxuICAgICAgICAgIGZpbGw6IFwiIzIzMUYyMFwiXG4gICAgICAgIH1cbiAgICAgICksXG4gICAgICAvKiBAX19QVVJFX18gKi8gYyhcbiAgICAgICAgXCJwYXRoXCIsXG4gICAgICAgIHtcbiAgICAgICAgICBkOiBcIk04My42MzU0IDg5LjMyMDFIOTAuOTg0NVY5Mi4yMTM5SDgzLjYzNTRWMTAxLjExMkM4My42MTk4IDEwMS45MTUgODMuNjk0MyAxMDIuNzE3IDgzLjg1NzUgMTAzLjUwNEM4My45NjM5IDEwNC4wNDQgODQuMTk0OSAxMDQuNTUxIDg0LjUzMjMgMTA0Ljk4N0M4NC44MjMzIDEwNS4zNDMgODUuMjEyIDEwNS42MDggODUuNjUxMiAxMDUuNzQ5Qzg2LjE1ODUgMTA1LjkwNSA4Ni42ODc2IDEwNS45NzkgODcuMjE4NiAxMDUuOTY5Qzg4LjA3MTQgMTA1Ljk5OCA4OC45MjI4IDEwNS44NzkgODkuNzM1IDEwNS42MTlDOTAuMzcwNyAxMDUuMzg1IDkwLjgxMDQgMTA1LjIxNyA5MS4wNjI5IDEwNS4xMTdMOTEuNzMzNCAxMDcuOTcyQzkxLjE0MTIgMTA4LjIzNCA5MC41Mjk5IDEwOC40NTEgODkuOTA0OCAxMDguNjIxQzg4LjkzMzUgMTA4Ljg5NCA4Ny45Mjc0IDEwOS4wMjUgODYuOTE4MSAxMDkuMDFDODUuODA4MiAxMDkuMDQ1IDg0LjcwMTQgMTA4Ljg3NiA4My42NTI4IDEwOC41MTNDODIuODM3IDEwOC4yMDggODIuMTIwNSAxMDcuNjg3IDgxLjU4MDUgMTA3LjAwOEM4MS4wMzA1IDEwNi4yNzkgODAuNjUzOSAxMDUuNDM2IDgwLjQ3OSAxMDQuNTQyQzgwLjI1NDggMTAzLjQyNiA4MC4xNDgzIDEwMi4yODkgODAuMTYxMSAxMDEuMTUxVjgzLjk0MzNMODMuNjQ0MSA4My4zNTA3TDgzLjYzNTQgODkuMzIwMVpcIixcbiAgICAgICAgICBmaWxsOiBcIiMyMzFGMjBcIlxuICAgICAgICB9XG4gICAgICApLFxuICAgICAgLyogQF9fUFVSRV9fICovIGMoXG4gICAgICAgIFwicGF0aFwiLFxuICAgICAgICB7XG4gICAgICAgICAgZDogXCJNMTAyLjU1NyA4OC45MTM2QzEwMi45IDg4LjkxNTIgMTAzLjI0MyA4OC45MzQgMTAzLjU4NCA4OC45Njk4QzEwMy45NjggODkuMDA0NCAxMDQuMzUxIDg5LjA1NjMgMTA0LjcyMSA4OS4xMTY5QzEwNS4wOTEgODkuMTc3NSAxMDUuNDM5IDg5LjI0MjMgMTA1Ljc0OCA4OS4zMDI5QzEwNS45ODIgODkuMzQ1NCAxMDYuMjEzIDg5LjQwMDIgMTA2LjQ0MSA4OS40NjczTDEwNS44NDQgOTIuNDczNkMxMDQuNjE2IDkyLjA3MDQgMTAzLjMyNyA5MS44ODE2IDEwMi4wMzUgOTEuOTE1NkMxMDEuMzg5IDkxLjkxNTggMTAwLjc0NiA5MS45ODQgMTAwLjExNSA5Mi4xMTg5Qzk5LjQ3ODkgOTIuMjU3MyA5OS4wNjA5IDkyLjM0ODEgOTguODY1IDkyLjQwMDFWMTA4LjYwNEg5NS4zODJWOTAuMTM3N0M5Ni4zNzc4IDg5Ljc5MTUgOTcuMzk2IDg5LjUxMjYgOTguNDI5NiA4OS4zMDI5Qzk5Ljc4NzggODkuMDI4OSAxMDEuMTcxIDg4Ljg5ODQgMTAyLjU1NyA4OC45MTM2WlwiLFxuICAgICAgICAgIGZpbGw6IFwiIzIzMUYyMFwiXG4gICAgICAgIH1cbiAgICAgICksXG4gICAgICAvKiBAX19QVVJFX18gKi8gYyhcbiAgICAgICAgXCJwYXRoXCIsXG4gICAgICAgIHtcbiAgICAgICAgICBkOiBcIk0xMjYuMDU4IDEwOC4wNDZDMTI1LjI2MSAxMDguMjQ1IDEyNC4yMTIgMTA4LjQ1NyAxMjIuOTAyIDEwOC42NzdDMTIxLjQwMyAxMDguOTE0IDExOS44ODcgMTA5LjAyNSAxMTguMzY5IDEwOS4wMUMxMTcuMDgyIDEwOS4wNDcgMTE1Ljc5OSAxMDguODI3IDExNC41OTkgMTA4LjM2MkMxMTMuNjMzIDEwNy45NyAxMTIuNzg1IDEwNy4zMzggMTEyLjEzNSAxMDYuNTI4QzExMS40OTQgMTA1LjY5OSAxMTEuMDM3IDEwNC43NDUgMTEwLjc5NCAxMDMuNzI5QzExMC41MDggMTAyLjU1NyAxMTAuMzY5IDEwMS4zNTQgMTEwLjM4IDEwMC4xNDdWODkuMzMzMkgxMTMuODYzVjk5LjQyMDVDMTEzLjg2MyAxMDEuNzcxIDExNC4yMzYgMTAzLjQ1MiAxMTQuOTgyIDEwNC40NjRDMTE1LjcyOCAxMDUuNDc2IDExNi45ODUgMTA1Ljk4MyAxMTguNzUzIDEwNS45ODNDMTE5LjEyMyAxMDUuOTgzIDExOS41MSAxMDUuOTgzIDExOS45MDYgMTA1Ljk0OEMxMjAuMzAyIDEwNS45MTMgMTIwLjY3NyAxMDUuODkyIDEyMS4wMyAxMDUuODUzQzEyMS4zODIgMTA1LjgxNCAxMjEuNjkxIDEwNS43NzkgMTIxLjk3OSAxMDUuNzQ1QzEyMi4xODkgMTA1LjcyMiAxMjIuMzk2IDEwNS42NzkgMTIyLjU5NyAxMDUuNjE1Vjg5LjMyMDJIMTI2LjA4TDEyNi4wNTggMTA4LjA0NlpcIixcbiAgICAgICAgICBmaWxsOiBcIiMyMzFGMjBcIlxuICAgICAgICB9XG4gICAgICApLFxuICAgICAgLyogQF9fUFVSRV9fICovIGMoXG4gICAgICAgIFwicGF0aFwiLFxuICAgICAgICB7XG4gICAgICAgICAgZDogXCJNMTM2LjU0NyAxMDYuMTIxQzEzNy45NjYgMTA2LjEyMSAxMzkuMDE3IDEwNS45MzUgMTM5LjY5OSAxMDUuNTYzQzE0MC4wMjUgMTA1LjM5NyAxNDAuMjk2IDEwNS4xNCAxNDAuNDc4IDEwNC44MjNDMTQwLjY2MSAxMDQuNTA3IDE0MC43NDcgMTA0LjE0NSAxNDAuNzI2IDEwMy43ODFDMTQwLjczOCAxMDMuMzkxIDE0MC42NTIgMTAzLjAwNCAxNDAuNDc2IDEwMi42NTRDMTQwLjMwMSAxMDIuMzA1IDE0MC4wNDEgMTAyLjAwNCAxMzkuNzIxIDEwMS43NzhDMTM4LjY4MSAxMDEuMDk4IDEzNy41NjcgMTAwLjU0IDEzNi4zOTkgMTAwLjExM0MxMzUuNjUgOTkuODI0NSAxMzQuOTM1IDk5LjUyMTcgMTM0LjI1MiA5OS4yMDQ1QzEzMy42MTMgOTguOTIyMiAxMzMuMDE1IDk4LjU1NCAxMzIuNDc2IDk4LjExMDFDMTMxLjkzNCA5Ny42NTk2IDEzMS41MDMgOTcuMDkwNiAxMzEuMjE4IDk2LjQ0NzZDMTMwLjkzNCA5NS44MDQ1IDEzMC44MDIgOTUuMTA0OCAxMzAuODM1IDk0LjQwM0MxMzAuODA1IDkzLjYyNDcgMTMwLjk2MiA5Mi44NTA0IDEzMS4yOTMgOTIuMTQ0MkMxMzEuNjI0IDkxLjQzOCAxMzIuMTE5IDkwLjgyIDEzMi43MzcgOTAuMzQxM0MxMzQuMDA5IDg5LjMzNzcgMTM1LjczOCA4OC44Mzc0IDEzNy45MjcgODguODQwM0MxMzguNDc1IDg4Ljg0MDMgMTM5LjAyMyA4OC44NzA3IDEzOS41NjggODguOTMxMUMxNDAuMTE3IDg4Ljk5MTcgMTQwLjYyNiA4OS4wNjk1IDE0MS4xMDEgODkuMTUxN0MxNDEuNTc1IDg5LjIzMzkgMTQxLjk3MiA4OS4zMzM0IDE0Mi4zNSA4OS40MzI5QzE0Mi43MjkgODkuNTMyNCAxNDIuOTkgODkuNjE4OSAxNDMuMTkxIDg5LjY5MjRMMTQyLjU1NSA5Mi42NTk4QzE0MS45OTggOTIuMzk0OSAxNDEuNDE0IDkyLjE4OSAxNDAuODE0IDkyLjA0NTZDMTM5Ljg3MyA5MS44MiAxMzguOTA3IDkxLjcxMzkgMTM3Ljk0IDkxLjcyOThDMTM3LjA1OSA5MS43MTA1IDEzNi4xODcgOTEuOTA4MSAxMzUuNDAyIDkyLjMwNTFDMTM1LjA2NCA5Mi40NjcyIDEzNC43ODIgOTIuNzI0MSAxMzQuNTkgOTMuMDQ0QzEzNC4zOTggOTMuMzYzOCAxMzQuMzA1IDkzLjczMjYgMTM0LjMyMiA5NC4xMDQ2QzEzNC4zMTMgOTQuNDg4NiAxMzQuMzk1IDk0Ljg2OTQgMTM0LjU2MiA5NS4yMTYzQzEzNC43NDIgOTUuNTU3IDEzNC45OTggOTUuODUyOCAxMzUuMzEgOTYuMDgxNEMxMzUuNjk3IDk2LjM3MDIgMTM2LjExNiA5Ni42MTI3IDEzNi41NiA5Ni44MDM4QzEzNy4wNTYgOTcuMDI0NCAxMzcuNjUzIDk3LjI2MjMgMTM4LjM0OSA5Ny41MDg4QzEzOS4yNzIgOTcuODU0OSAxNDAuMDkxIDk4LjE5MjMgMTQwLjgxNCA5OC41MjU0QzE0MS40ODEgOTguODI4NyAxNDIuMTA0IDk5LjIyMTcgMTQyLjY2NCA5OS42OTMzQzE0My4xNzEgMTAwLjEzOCAxNDMuNTczIDEwMC42ODkgMTQzLjgzOSAxMDEuMzA3QzE0NC4xMyAxMDIuMDQ1IDE0NC4yNjkgMTAyLjgzMyAxNDQuMjQ5IDEwMy42MjVDMTQ0LjI0OSAxMDUuNDA3IDE0My41ODMgMTA2Ljc1NiAxNDIuMjUgMTA3LjY3QzE0MC45MTggMTA4LjU4NCAxMzkuMDIxIDEwOS4wNDEgMTM2LjU2IDEwOS4wNDFDMTM1LjIwMiAxMDkuMDgxIDEzMy44NDYgMTA4LjkzNSAxMzIuNTI4IDEwOC42MDhDMTMxLjg1OSAxMDguNDI2IDEzMS4xOTkgMTA4LjIwOSAxMzAuNTUyIDEwNy45NkwxMzEuMTgzIDEwNC45OTJDMTMxLjU4NCAxMDUuMTQ0IDEzMi4yMTUgMTA1LjM2NCAxMzMuMDkgMTA1LjY2M0MxMzQuMjExIDEwNS45OTcgMTM1LjM3NyAxMDYuMTUxIDEzNi41NDcgMTA2LjEyMVpcIixcbiAgICAgICAgICBmaWxsOiBcIiMyMzFGMjBcIlxuICAgICAgICB9XG4gICAgICApLFxuICAgICAgLyogQF9fUFVSRV9fICovIGMoXG4gICAgICAgIFwicGF0aFwiLFxuICAgICAgICB7XG4gICAgICAgICAgZDogXCJNMTUxLjkyNCA4OS4zMjAxSDE1OS4yNzNWOTIuMjEzOUgxNTEuOTI0VjEwMS4xMTJDMTUxLjkwOCAxMDEuOTE1IDE1MS45ODMgMTAyLjcxNyAxNTIuMTQ2IDEwMy41MDRDMTUyLjI1NCAxMDQuMDQzIDE1Mi40ODUgMTA0LjU1IDE1Mi44MjEgMTA0Ljk4N0MxNTMuMTEyIDEwNS4zNDMgMTUzLjUgMTA1LjYwOCAxNTMuOTQgMTA1Ljc0OUMxNTQuNDQ3IDEwNS45MDQgMTU0Ljk3NiAxMDUuOTc5IDE1NS41MDcgMTA1Ljk2OUMxNTYuMzYgMTA1Ljk5OCAxNTcuMjExIDEwNS44NzkgMTU4LjAyMyAxMDUuNjE5QzE1OC42NTkgMTA1LjM4NSAxNTkuMDk5IDEwNS4yMTcgMTU5LjMzIDEwNS4xMTdMMTYwIDEwNy45NzJDMTU5LjQwOCAxMDguMjM0IDE1OC43OTcgMTA4LjQ1MSAxNTguMTcxIDEwOC42MjFDMTU3LjIgMTA4Ljg5NCAxNTYuMTk0IDEwOS4wMjUgMTU1LjE4NSAxMDkuMDFDMTU0LjA3NSAxMDkuMDQ1IDE1Mi45NjggMTA4Ljg3NiAxNTEuOTE5IDEwOC41MTNDMTUxLjEwNCAxMDguMjA4IDE1MC4zODcgMTA3LjY4NyAxNDkuODQ3IDEwNy4wMDhDMTQ5LjI5NyAxMDYuMjc5IDE0OC45MjEgMTA1LjQzNiAxNDguNzQ2IDEwNC41NDJDMTQ4LjUyMSAxMDMuNDI2IDE0OC40MTUgMTAyLjI4OSAxNDguNDI4IDEwMS4xNTFWODMuOTQzM0wxNTEuOTExIDgzLjM1MDdMMTUxLjkyNCA4OS4zMjAxWlwiLFxuICAgICAgICAgIGZpbGw6IFwiIzIzMUYyMFwiXG4gICAgICAgIH1cbiAgICAgICksXG4gICAgICAvKiBAX19QVVJFX18gKi8gYyhcbiAgICAgICAgXCJwYXRoXCIsXG4gICAgICAgIHtcbiAgICAgICAgICBzdHlsZTogeyBtaXhCbGVuZE1vZGU6IFwibXVsdGlwbHlcIiB9LFxuICAgICAgICAgIGQ6IFwiTTQ0LjYwNDEgNDUuNzQzN0M0NC43ODk5IDQ2LjQ0NDUgNDQuOTk4OSA0Ny4xMzk1IDQ1LjIzMTEgNDcuODI4N0M0NS40MTgzIDQ4LjM5OTcgNDUuNjIyOSA0OC45NjYzIDQ1Ljg0MDYgNDkuNTI0M0M0Ni4wNTgzIDUwLjA3OCA0Ni4yNzYgNTAuNjMxNyA0Ni41MzI4IDUxLjE3MjRDNDcuMzA4MSA1Mi45MDkyIDQ4LjIyMjQgNTQuNTgxNCA0OS4yNjcgNTYuMTcyOEM1MS42NTcyIDU1LjQxNTggNTYuODY0MyA1My40NDc3IDY1LjM3NTggNTEuMTAzMkM3MS45OTc5IDQ5LjI3MzQgODYuODA5MyA0NS42MjY5IDEwMC4zNzYgNDIuNzMzMUMxMDkuMDI2IDQwLjg4NjEgMTEzLjczMyAzOS43MzExIDExNS4xNzggMzkuMjcyNkMxMTUuNjI1IDM5LjEzMTIgMTE2LjA0MiAzOC45MTE1IDExNi40MSAzOC42MjM3QzExNi41MTkgMzguNTIxNSAxMTYuNTg0IDM4LjM4MjUgMTE2LjU5MyAzOC4yMzQ0QzExNi42MjQgMzcuNjI0NSAxMTYuNjQxIDM3LjAxNDYgMTE2LjY0MSAzNi4zOTZDMTE2LjY0MSAzMy41NDY4IDExNi4zMDcgMzAuNzA3MyAxMTUuNjQ0IDI3LjkzNTFDMTA5LjI4OCAyOS44MzQxIDkyLjI0MjggMzMuMzQyMiA3Ny45NDUxIDM2Ljc2MzdDNjIuNzM3NSA0MC40MDE2IDQ5LjU4OTIgNDQuMzcyNSA0NC42MDQxIDQ1Ljc0MzdaXCIsXG4gICAgICAgICAgZmlsbDogXCJ1cmwoI3BhaW50MF9saW5lYXIpXCJcbiAgICAgICAgfVxuICAgICAgKSxcbiAgICAgIC8qIEBfX1BVUkVfXyAqLyBjKFxuICAgICAgICBcInBhdGhcIixcbiAgICAgICAge1xuICAgICAgICAgIHN0eWxlOiB7IG1peEJsZW5kTW9kZTogXCJtdWx0aXBseVwiIH0sXG4gICAgICAgICAgZDogXCJNNDUuMTA1NCAyNS4zMzk2VjI1LjM5NTlDNDUuMDc5MiAyNS40ODY3IDQ1LjA0ODggMjUuNTc3NSA0NS4wMTgzIDI1LjY3MjdMNDQuOTk2NSAyNS43NDYyQzQ0Ljk0ODYgMjUuOTAyIDQ0LjkwMDggMjYuMDYyIDQ0Ljg1NzIgMjYuMjI2NEM0NC44MDkzIDI2LjM4NjQgNDQuNzYxNCAyNi41NTA4IDQ0LjcxNzkgMjYuNzE1MkM2MC44NTI5IDIyLjgyMjEgNzIuMjExOCAxOS42Mzg0IDgyLjAwMzQgMTYuNTk3NUM4Ny43NDU5IDE0LjgxMSA5MS45NTYgMTMuMTkzMyA5NC43OTkgMTEuNzY1OEw5NC45OTA2IDExLjY2NjNMOTUuMDUxNSAxMS42MzZMOTUuMTgyMiAxMS41NjY4TDk1LjI1NjIgMTEuNTMyMkw5NS4zNjk0IDExLjQ3MTdMOTUuNDQ3NyAxMS40Mjg0TDk1LjU1MjIgMTEuMzcyMkw5NS42MzA2IDExLjMzMzJMOTUuNzM1MSAxMS4yNzI3TDk1LjgwNDcgMTEuMjMzN0w5NS45MTM2IDExLjE3NzVMOTUuOTc4OSAxMS4xMzg2TDk2LjA4NzcgMTEuMDczN0w5Ni4xNDg3IDExLjA0MzRMOTYuMjk2NyAxMC45NTY5TDk2LjQ1MzQgMTAuODY2MUw5Ni41MDU3IDEwLjgzNThMOTYuNjEwMiAxMC43NzA5TDk2LjY2NjggMTAuNzM2M0w5Ni43NTgyIDEwLjY4MDFMOTYuODE5MSAxMC42NDExTDk2LjkwNjIgMTAuNTg0OUw5Ni45NjcyIDEwLjU0Nkw5Ny4wNDk5IDEwLjQ5NDFMOTcuMTA2NSAxMC40NTUxTDk3LjE4OTIgMTAuNDAzMkw5Ny4yNDE1IDEwLjM2NDNMOTcuMzMyOSAxMC4zMDM3TDk3LjM3NjQgMTAuMjc3OEw5Ny41MDI3IDEwLjE4NjlDOTguNDM0NCA5LjUyOTQ1IDk5LjgwMTUgOC4zMjI2IDk5LjcwMTMgNi44OTUxNFY2Ljg2MDU0Qzk5LjYzMTcgNi4xNTk3OSA5OC45OTE3IDUuMTYwNTcgOTcuMDQ5OSA0LjEwNTExTDk2LjkyOCA0LjA0MDIzTDk2Ljc4NDMgMy45NjY2OUw5Ni41ODg0IDMuODY3Mkw5Ni41MTg3IDMuODMyNkw5Ni4wODM0IDMuNjI0OTdMOTUuOTk2MyAzLjU4MTcxTDk1Ljc3ODYgMy40Nzc5TDk1LjY2OTggMy40MjU5OUw5NS41IDMuMzQ4MTNMOTUuMzc4MSAzLjI5MTg5TDk1LjI0NzUgMy4yMzEzNEw5NS4xMTY4IDMuMTcwNzhMOTQuOTk5MyAzLjExODg3TDk0Ljg1NTYgMy4wNTgzMUw5NC43NTExIDMuMDEwNzNMOTQuNTk4OCAyLjk0NTg0TDk0LjUxNiAyLjkxMTI0TDkzLjkxOTYgMi42NjAzNkw5My44NjczIDIuNjM4NzNMOTMuNjgwMSAyLjU2MDg2TDkzLjYxNDggMi41MzQ5MUw5My40Mjc2IDIuNDYxMzdIOTMuMzY2Nkw5My4xNzA3IDIuMzgzNTJIOTMuMTM1OUM5Mi44MjY4IDIuMjY2NzIgOTIuNTE3NyAyLjE1NDI2IDkyLjIwNDIgMi4wNDYxMkw5MS45Nzc4IDEuOTY4MjVIOTEuOTUxN0w5MS43MjUzIDEuODk0NzJDOTEuMzIwNCAxLjc2MDYyIDkwLjkxNTUgMS42MzA4NiA5MC41MDYyIDEuNTA5NzRMOTAuMjcxMSAxLjQ0MDUzQzg5LjkyNzIgMS4zNDEwNCA4OS41ODMyIDEuMjUwMiA4OS4yMzQ5IDEuMTU5MzZDODkuMjU2MyAxLjM5NTM1IDg5LjI1NjMgMS42MzI3OCA4OS4yMzQ5IDEuODY4NzdDODkuMTA5IDIuNzA4NzQgODguNjg0MiAzLjQ3NjA2IDg4LjAzNzcgNC4wMzE1OEM4Ni42NTc1IDUuMzI5MjcgODMuOTIzNCA2LjY3NDU0IDgwLjUyMzEgNy44NjQwOUM3Ni44OTIxIDkuMTM1ODIgNjkuMzQ3IDExLjYwNTggNjIuNjcyNyAxMy4yNzExQzU4LjE4NCAxNC4zODcxIDUyLjI3MTYgMTUuODQwNSA0OS40MzMgMTYuNDU0OEw0OS4xMDY1IDE2Ljk1NjZWMTYuOTc4Mkw0OS4wNTQyIDE3LjA2MDRMNDguOTIzNiAxNy4yNjhWMTcuMzAyNkw0OC45MDE4IDE3LjM0MTVMNDguODY3IDE3LjM5MzRMNDguNzQwOCAxNy42MDExTDQ4LjcwNTkgMTcuNjU3M0w0OC42NjY3IDE3LjcyMjJMNDguNTM2MSAxNy45Mzg1QzQ4LjQzNiAxOC4xMDI4IDQ4LjMzNTkgMTguMjc1OSA0OC4yNDAxIDE4LjQ0NDZDNDguMjQwMSAxOC40NzkyIDQ4LjIwMDkgMTguNTEzOCA0OC4xNzkxIDE4LjU0ODRMNDguMDU3MiAxOC43NjlDNDguMDQgMTguODAxNiA0OC4wMjExIDE4LjgzMzQgNDguMDAwNiAxOC44NjQyTDQ3Ljg4MzEgMTkuMDg0OEw0Ny44MzUyIDE5LjE3MTNWMTkuMjAxNkw0Ny43MTMzIDE5LjQzMDhDNDcuNjE3NSAxOS42MTI1IDQ3LjUyMTcgMTkuNzk0MiA0Ny40MzAzIDE5Ljk3NThMNDcuMzg2NyAyMC4wNjY3TDQ3LjI2OTIgMjAuMzAwM0w0Ny4yMzg3IDIwLjM2MDhWMjAuNDA0MUw0Ny4xMjEyIDIwLjYzNzdDNDcuMTIxMiAyMC42NzIzIDQ3LjA5MDcgMjAuNzA2OSA0Ny4wNzMzIDIwLjc0NThMNDYuODc3MyAyMS4xNzg0QzQ2LjgxMiAyMS4zMTY4IDQ2Ljc0NjcgMjEuNDU1MiA0Ni42ODU4IDIxLjYxMDlMNDYuNjY0IDIxLjY1NDJDNDYuNjI0OCAyMS43NDA3IDQ2LjU5IDIxLjgyMjkgNDYuNTU1MiAyMS45MDk0VjIxLjkzNTRMNDYuNTIwMyAyMi4wMTMyQzQ2LjQ4NTUgMjIuMDk1NCA0Ni40NTA3IDIyLjE4MTkgNDYuNDExNSAyMi4yNjQxTDQ2LjM3MjMgMjIuMzU5M0M0Ni4zMTE0IDIyLjUwNjMgNDYuMjUwNCAyMi42NTM0IDQ2LjE5MzggMjIuNzkxOEM0Ni4xMzI5IDIyLjkzODkgNDYuMDc2MyAyMy4wOTAzIDQ2LjAxOTcgMjMuMjI0NFYyMy4yNjMzTDQ1LjkxNTIgMjMuNTM1OEM0NS45MTUyIDIzLjU2NjEgNDUuODkzNCAyMy41OTY0IDQ1Ljg4MDMgMjMuNjMxTDQ1Ljc4NDYgMjMuODk0OVYyMy45MzM4TDQ1Ljc2MjggMjMuOTg1N0M0NS43MTA1IDI0LjEzNzEgNDUuNjU0IDI0LjI5MjggNDUuNjAxNyAyNC40NDg1QzQ1LjU0NTEgMjQuNjA4NiA0NS40OTI5IDI0Ljc2NDMgNDUuNDQwNiAyNC45Mkw0NS4xMDU0IDI1LjMzOTZaXCIsXG4gICAgICAgICAgZmlsbDogXCJ1cmwoI3BhaW50MV9saW5lYXIpXCJcbiAgICAgICAgfVxuICAgICAgKSxcbiAgICAgIC8qIEBfX1BVUkVfXyAqLyBjKFxuICAgICAgICBcInBhdGhcIixcbiAgICAgICAge1xuICAgICAgICAgIHN0eWxlOiB7IG1peEJsZW5kTW9kZTogXCJtdWx0aXBseVwiIH0sXG4gICAgICAgICAgZDogXCJNNDQuNzkxNSAzNi45MjM5QzQ1Ljc4ODUgMzYuOTIzOSA0OC4zNTcyIDM2Ljc5ODQgNTEuMjA4OSAzNi41MjU5QzU2LjE3NjUgMzYuMDU0NCA2Ni4xMDc0IDM0Ljc2OTcgNzcuNDM1OCAzMy4zMTYzQzg2LjI1NjUgMzIuMTgzIDEwNS41NTIgMjkuMzk3MyAxMTUuNjQ0IDI3LjkzMDlMMTE1LjU5NiAyNy43Mjc2QzExNS41NjIgMjcuNTk3OCAxMTUuNTMxIDI3LjQ3MjQgMTE1LjUwMSAyNy4zNDY5QzExNS41MDEgMjcuMzAzNyAxMTUuNDc1IDI3LjI1NjEgMTE1LjQ2NiAyNy4yMTI4QzExNS40NDQgMjcuMTI2MyAxMTUuNDIyIDI3LjAzOTggMTE1LjM5NiAyNi45NTMzQzExNS4zNyAyNi44NjY4IDExNS4zOTYgMjYuODYyNSAxMTUuMzYxIDI2LjgxOTJMMTE1LjI3IDI2LjQ4NjFDMTE1LjI2MSAyNi40NjA4IDExNS4yNTMgMjYuNDM0NyAxMTUuMjQ4IDI2LjQwODNMMTE1LjE3IDI2LjE0MDFMMTE1LjE0NCAyNi4wNTc5TDExNS4xMDQgMjUuOTIzOEMxMTUuMDc4IDI1LjgzNzMgMTE1LjA1MiAyNS43NTA4IDExNS4wMjIgMjUuNjY0M0wxMTQuOTgzIDI1LjUzMDJMMTE0Ljg5MSAyNS4yNDQ3VjI1LjIwMTRMMTE0Ljg1NiAyNS4xMDE5QzExNC44MzUgMjUuMDQxNCAxMTQuODE3IDI0Ljk3NjUgMTE0Ljc5NSAyNC45MTU5QzExNC43NzQgMjQuODU1NCAxMTQuNzY1IDI0LjgyNTEgMTE0Ljc1MiAyNC43ODE4QzExNC43MzMgMjQuNzM2NiAxMTQuNzE3IDI0LjY5MDQgMTE0LjcwNCAyNC42NDM0QzExNC42NzggMjQuNTYxMiAxMTQuNjQ3IDI0LjQ4MzQgMTE0LjYyMSAyNC40MDU1QzExNC41OTUgMjQuMzI3NiAxMTQuNTkxIDI0LjMxMDMgMTE0LjU3MyAyNC4yNjcxTDExNC40MyAyMy45MDgxTDExNC4zODYgMjMuNzkxM0MxMTQuMzc3IDIzLjc2MTQgMTE0LjM2NSAyMy43MzI1IDExNC4zNTEgMjMuNzA0OEMxMTQuMzI5IDIzLjYzNTUgMTE0LjMwMyAyMy41NzA3IDExNC4yNzcgMjMuNTA1OEMxMTQuMjYxIDIzLjQ1NTggMTE0LjI0MiAyMy40MDY3IDExNC4yMjEgMjMuMzU4N0MxMTQuMjA3IDIzLjMyNjIgMTE0LjE5NSAyMy4yOTMgMTE0LjE4NiAyMy4yNTkyTDExNC4xMzQgMjMuMTI1MUwxMTQuMDczIDIyLjk4MjRMMTE0LjAyIDIyLjg0NEMxMTMuOTk0IDIyLjc4NzcgMTEzLjk3MiAyMi43MjcyIDExMy45NDYgMjIuNjcwOUwxMTMuODk0IDIyLjUzMjVMMTEzLjg1NSAyMi40NDZMMTEzLjc4NSAyMi4yNzNMMTEzLjcyIDIyLjEyMTZDMTEzLjY4NSAyMi4wNDggMTEzLjY1NSAyMS45NzQ1IDExMy42MjQgMjEuOTAxTDExMy41NTkgMjEuNzUzOUwxMTMuNDk4IDIxLjYyNDFDMTEzLjQ3NiAyMS41NjM2IDExMy40NSAyMS41MDczIDExMy40MjQgMjEuNDUxMUMxMTMuMzk4IDIxLjM5NDkgMTEzLjM3NiAyMS4zNTE2IDExMy4zNTQgMjEuMjk5N0MxMTMuMzMyIDIxLjI0NzggMTEzLjMxMSAyMS4yMDAyIDExMy4yODUgMjEuMTUyNkwxMTMuMjQ1IDIxLjA2MThMMTEzLjE3MSAyMC45MDYxTDExMy4wOCAyMC43MjAxQzExMy4wNTggMjAuNjY4MiAxMTMuMDMyIDIwLjYxNjMgMTEzLjAwNiAyMC41NjQ0QzExMi45OCAyMC41MTI0IDExMi45MTQgMjAuMzY5NyAxMTIuODYyIDIwLjI3NDVMMTEyLjc4NCAyMC4xMTAyTDExMi43MDYgMTkuOTYzMVYxOS45MTk4VjE5Ljg5MzlMMTEyLjYyMyAxOS43MzM4TDExMi41OTcgMTkuNjc3NkMxMTIuNTcxIDE5LjYzNDMgMTEyLjU0OSAxOS41ODY4IDExMi41MjMgMTkuNTM5MkMxMTIuNDk4IDE5LjQ4NzMgMTEyLjQ3IDE5LjQzNjggMTEyLjQ0IDE5LjM4NzhMMTEyLjI4OCAxOS4wOThMMTEyLjE5NiAxOC45MzM2QzExMi4xNjEgMTguODczIDExMi4xMzEgMTguODEyNSAxMTIuMDk2IDE4Ljc1NjJWMTguNzM0NkwxMTIuMDA5IDE4LjU3NDZMMTExLjk3NCAxOC41MTgzQzExMS45NTIgMTguNDc1MSAxMTEuOTI2IDE4LjQzMTggMTExLjkgMTguMzg4NkwxMTEuODEzIDE4LjIzMjhMMTExLjczIDE4LjA5MDFMMTExLjYzNCAxNy45M0wxMTEuNTMgMTcuNzU3QzEwOC45NDggMTguMTI5IDEwNS44MTQgMTguNTY1OSAxMDEuOTUyIDE5LjA5OEM5My40ODgxIDIwLjI1NzIgODMuOTgzOSAyMS44MDE1IDc0LjI1MzMgMjMuMDUxNkM1OS4zMTEyIDI0Ljk3MjIgNDkuNTI4MyAyNi4zOTUzIDQ0LjcyNjEgMjYuNzc2TDQ0LjY2MDggMjcuMDA1MlYyNy4wNDg1TDQ0LjYzNDcgMjcuMTQzNkM0NC42MzQ3IDI3LjIxMjggNDQuNTk1NSAyNy4yODIxIDQ0LjU3ODEgMjcuMzUxM0w0NC41Mzg5IDI3LjUxNTZWMjcuNTkzNVYyNy42NDExVjI3LjY4TDQ0LjUxMjggMjcuNzk2OEM0My44MzMyIDMwLjU5IDQzLjQ4ODMgMzMuNDUzMyA0My40ODUzIDM2LjMyNjlDNDMuMzkzOSAzNi43MDMzIDQzLjkzODEgMzYuOTE5NiA0NC43OTE1IDM2LjkyMzlaXCIsXG4gICAgICAgICAgZmlsbDogXCJ1cmwoI3BhaW50Ml9saW5lYXIpXCJcbiAgICAgICAgfVxuICAgICAgKSxcbiAgICAgIC8qIEBfX1BVUkVfXyAqLyBjKFxuICAgICAgICBcInBhdGhcIixcbiAgICAgICAge1xuICAgICAgICAgIHN0eWxlOiB7IG1peEJsZW5kTW9kZTogXCJtdWx0aXBseVwiIH0sXG4gICAgICAgICAgZDogXCJNMTA3LjYyNCA2MC4yOTkzQzEwNS4xODIgNjIuNTY1OSA5Ni40MDQ4IDY2LjY2NjYgODcuNzEwNCA2OC4zNzA5QzgwLjk0NzkgNjkuNjc2NyA3NC4wNzU4IDcwLjM0IDY3LjE4NjggNzAuMzUyMUM2Ny4zNDAzIDcwLjUxNTUgNjcuNTM2MSA3MC42MzM4IDY3Ljc1MjggNzAuNjkzOEM2OC4zNDQ5IDcwLjkwNTcgNjguOTQxNCA3MS4wOTYxIDY5LjU0NjYgNzEuMjc3OEw3MC4zMjU5IDcxLjQ5ODRINzAuMzYwN0w3MC43MDkgNzEuNTg5Mkg3MC43NjEzTDcxLjEzMTMgNzEuNjg0NEg3MS4xODM2TDcxLjQ5NyA3MS43NTc5TDcxLjU5NzIgNzEuNzgzOEw3MS45MjM3IDcxLjg1NzRINzIuMDEwOEw3Mi4zMDI1IDcxLjkyMjNMNzIuNDUwNSA3MS45NTI2TDcyLjY2ODIgNzIuMDAwMUw3Mi44MjQ5IDcyLjAzMDRMNzMuMTI1MyA3Mi4wODY2TDczLjMxMjYgNzIuMTIxMkw3My40NzM2IDcyLjE1MTVMNzMuNjc4MyA3Mi4xODYxSDczLjc2NTNMNzQuMjAwNyA3Mi4yNTUzSDc0LjMwMDhMNzQuNTQ5IDcyLjI5NDNINzQuNTkyNkw3NS4xMjgxIDcyLjM2NzhINzUuMTQ5OEw3NS40Mjg1IDcyLjQwMjRINzUuNDU0NkM3NS43NDYzIDcyLjQzNyA3Ni4wMzM2IDcyLjQ3MTYgNzYuMzI1MyA3Mi40OTc2TDc2LjkxNzUgNzIuNTUzOEM3Ny45MzMzIDcyLjYzNzQgNzguOTU5NCA3Mi42NzkzIDc5Ljk5NTYgNzIuNjc5M0M4NS4yMyA3Mi42ODUgOTAuNDA0NyA3MS41NzM0IDk1LjE2OTIgNjkuNDE5NkM5OS45MzM2IDY3LjI2NTggMTA0LjE3NyA2NC4xMjAxIDEwNy42MTEgNjAuMTk1NUwxMDcuNjI0IDYwLjI5OTNaXCIsXG4gICAgICAgICAgZmlsbDogXCJ1cmwoI3BhaW50M19saW5lYXIpXCJcbiAgICAgICAgfVxuICAgICAgKSxcbiAgICAgIC8qIEBfX1BVUkVfXyAqLyBjKFxuICAgICAgICBcInBhdGhcIixcbiAgICAgICAge1xuICAgICAgICAgIHN0eWxlOiB7IG1peEJsZW5kTW9kZTogXCJtdWx0aXBseVwiIH0sXG4gICAgICAgICAgZDogXCJNMTEwLjEyNCA0OC43NUMxMDkuMTc5IDQ4Ljc1IDEwMy43MzcgNDguODc1NCA5NC45NTUyIDQ5LjcxMDNDODMuNDU2OSA1MC44MDQ3IDY2LjcwMzcgNTMuMjA1NCA1OS45MzM3IDU0LjM1NkM1NS43MjM2IDU1LjA2NTQgNTEuODAwOSA1NS45MDAzIDQ5LjQzMjQgNTYuNDMyM0w0OS43NTQ2IDU2LjkwODFMNDkuODI4NiA1Ny4wMTJDNDkuODcyMiA1Ny4wODEyIDQ5LjkyMDEgNTcuMTQ2IDQ5Ljk2NzkgNTcuMjEwOUw1MC4wNDYzIDU3LjMyMzRMNTAuMTkgNTcuNTI2N0w1MC4yMzc5IDU3LjU5NTlMNTAuNTQyNiA1OC4wMDY4TDUwLjYwMzYgNTguMDg5TDUwLjc1NiA1OC4yOTIzQzUwLjc4MjEgNTguMzIyNiA1MC44MDM5IDU4LjM1NzIgNTAuODMgNTguMzkxOEw1MC45ODY3IDU4LjU5MDhMNTEuMDQzMyA1OC42NjQzTDUxLjM5NiA1OS4wOTY5VjU5LjEyMjlMNTEuNTcwMSA1OS4zMzA1TDUxLjYzNTQgNTkuNDEyN0w1MS44MDUyIDU5LjYyMDNMNTEuODU3NSA1OS42ODA5QzUyLjA1MzQgNTkuOTEwMSA1Mi4yNDUgNjAuMTEzNCA1Mi40NDUyIDYwLjM2TDUyLjQ5MzEgNjAuNDE2Mkw1Mi42ODQ3IDYwLjYyODJMNTIuNzI4MiA2MC42ODAxTDUzLjM2MzkgNjEuMzY3OUw1My4zODU2IDYxLjM4OTVMNTMuNTk5IDYxLjYxMDFMNTMuNjMzOCA2MS42NDQ3QzUzLjkzNDIgNjEuOTU2MSA1NC4yMzkgNjIuMjU4OSA1NC41NTI0IDYyLjU1NzRMNTQuNTc0MiA2Mi41NzlDNTQuODkyIDYyLjg4MTggNTUuMjE0MiA2My4xODAzIDU1LjU0MDcgNjMuNDcwMUM1NS44NzYgNjMuNzY0MyA1Ni4yMTEyIDY0LjA1NDEgNTYuNTU1MiA2NC4zMzUyQzU2LjczOCA2NC40ODY2IDU3LjEzODYgNjQuNTEyNiA1OC4zOTI0IDY0LjI3OUM2MS4wMDQ3IDYzLjc4NTkgNzAuODc0NiA2Mi4wODU5IDgxLjgwMjUgNjAuNTk3OUM4OS4zNzIyIDU5LjYzMTMgOTYuOTg5NyA1OS4wNzk2IDEwNC42MjEgNTguOTQ1NUMxMDYuNTQxIDU4Ljk2NzEgMTA4LjM2IDU5LjM3ODEgMTA3LjYyOSA2MC4yOTk0TDEwNy44NzMgNjAuMDE4M1Y1OS45OTY2TDEwOC4xMDQgNTkuNzI0MVY1OS43MDI1TDEwOC4zMyA1OS40M0wxMDguMzYgNTkuMzk5N0wxMDguNTg3IDU5LjExNDJDMTA4Ljg3IDU4Ljc1OTUgMTA5LjE0OCA1OC40MDA1IDEwOS40MTggNTguMDM3MUMxMDkuNjg4IDU3LjY3MzggMTA5Ljk1NCA1Ny4zMDE4IDExMC4yMTEgNTYuOTI5OEwxMTAuNDIgNTYuNjIyNkwxMTAuNDQxIDU2LjU5NjdMMTEwLjY0MiA1Ni4yODk2VjU2LjI2MzZMMTEwLjg0NiA1NS45NTIyQzExMS40MTIgNTUuMDY1NCAxMTEuOTM5IDU0LjE1NyAxMTIuNDMxIDUzLjIxODRDMTEyLjQ5MiA1My4xMDU5IDExMi41NDkgNTIuOTkzNCAxMTIuNjA1IDUyLjg4MUwxMTIuNzc1IDUyLjUzOTNDMTEzLjI0MSA1MS41ODc2IDExMy42NzIgNTAuNjEgMTE0LjA4MSA0OS42MTUxQzExNC4zMzggNDkuMDY1OCAxMTMuODk4IDQ4Ljc1IDExMC4xMjQgNDguNzVaXCIsXG4gICAgICAgICAgZmlsbDogXCJ1cmwoI3BhaW50NF9saW5lYXIpXCJcbiAgICAgICAgfVxuICAgICAgKSxcbiAgICAgIC8qIEBfX1BVUkVfXyAqLyBjKFxuICAgICAgICBcInBhdGhcIixcbiAgICAgICAge1xuICAgICAgICAgIHN0eWxlOiB7IG1peEJsZW5kTW9kZTogXCJtdWx0aXBseVwiIH0sXG4gICAgICAgICAgZDogXCJNNzMuOTQwMiA0LjE5NjA4Qzc0LjI0NDkgMi4wMzMyNyA2OC40NTQ1IDIuMzg3OTggNjguMjAxOSAxLjkzODExQzY1LjIwMTQgMi45NTMxMSA2Mi4zNDczIDQuMzUzNSA1OS43MTIxIDYuMTAzNjlDNTkuNTk4OSA2LjE3NzIyIDU5LjU1MSA2LjM0MTYgNjAuMDc3OCA2LjQ0NTQxQzYxLjgyNTUgNi43NDc0MSA2My41OTQgNi45MTUxNiA2NS4zNjc2IDYuOTQ3MThDNjkuMDI5MSA2Ljk3NzQ2IDczLjY2MTUgNi4xNzI4OSA3My45NDAyIDQuMTk2MDhaXCIsXG4gICAgICAgICAgZmlsbDogXCJ1cmwoI3BhaW50NV9saW5lYXIpXCJcbiAgICAgICAgfVxuICAgICAgKSxcbiAgICAgIC8qIEBfX1BVUkVfXyAqLyBjKFxuICAgICAgICBcInBhdGhcIixcbiAgICAgICAge1xuICAgICAgICAgIHN0eWxlOiB7IG1peEJsZW5kTW9kZTogXCJtdWx0aXBseVwiIH0sXG4gICAgICAgICAgZDogXCJNMTEyLjE5NiA1MC44MDA1QzExMS4yODIgNTEuMTY4MiAxMDYuMzE5IDUyLjY2NDggMTAwLjg5OCA1NC43NjcxQzk1LjIzODQgNTYuOTYwMiA5MS4yNjM0IDU5LjYyNDggOTEuMjExMiA2Mi41NTMyQzkxLjE3MiA2NC44NTg4IDk1LjYzMDIgNjYuNTAyNSA5Ni42NDkgNjYuOTY5N0M5Ny42Njc4IDY3LjQzNjggOTguMTAzMiA2Ny43NTY5IDk4LjIxNjQgNjcuOTk0OUMxMDUuNTA5IDYzLjgzNTcgMTExLjE0NiA1Ny4zMTc5IDExNC4xODYgNDkuNTI4N0MxMTMuOTMzIDUwLjA5OTcgMTEzLjI4OSA1MC4zNjc5IDExMi4xOTYgNTAuODAwNVpcIixcbiAgICAgICAgICBmaWxsOiBcInVybCgjcGFpbnQ2X2xpbmVhcilcIlxuICAgICAgICB9XG4gICAgICApLFxuICAgICAgLyogQF9fUFVSRV9fICovIGMoXG4gICAgICAgIFwicGF0aFwiLFxuICAgICAgICB7XG4gICAgICAgICAgc3R5bGU6IHsgbWl4QmxlbmRNb2RlOiBcIm11bHRpcGx5XCIgfSxcbiAgICAgICAgICBkOiBcIk01MS40NDgzIDMxLjkzMjJDNTcuODgzMSAyOS4xNDY1IDY0LjYzMTQgMjYuMDM2MyA2OS4wNDE3IDIzLjk2ODdDNzUuOTQ2OCAyMC43Mzc0IDgxLjk3MjQgMTYuODAxMSA4MC42NjE5IDEyLjc5MTNDNzkuNDk1MSA5LjIxODI4IDc0LjY5NzMgOS42NDY1MiA2NS4xMjM0IDExLjM1MDhDNTguOTY3MiAxMi40NDUyIDUwLjgyMTMgMTQuNDYwOSA0OS43MjQyIDE1LjkxODdMNDkuNjg1IDE1Ljk4MzZMNDkuNTQ1NyAxNi4xODI1QzQ1LjYyMSAyMi4wMTAzIDQzLjQ4MjUgMjguODQ0MiA0My4zODk1IDM1Ljg1NTVDNDMuMzg5NSAzNi4wMTU1IDQzLjM4OTUgMzYuMTcxMyA0My4zODk1IDM2LjMzMTNDNDMuMzk4MiAzNS42ODI1IDQ1LjczNjEgMzQuNDA2NCA1MS40NDgzIDMxLjkzMjJaXCIsXG4gICAgICAgICAgZmlsbDogXCJ1cmwoI3BhaW50N19saW5lYXIpXCJcbiAgICAgICAgfVxuICAgICAgKSxcbiAgICAgIC8qIEBfX1BVUkVfXyAqLyBjKFxuICAgICAgICBcInBhdGhcIixcbiAgICAgICAge1xuICAgICAgICAgIHN0eWxlOiB7IG1peEJsZW5kTW9kZTogXCJtdWx0aXBseVwiIH0sXG4gICAgICAgICAgZDogXCJNMTA0LjQ1MSAxNy4yNjgyQzk2Ljk0MTIgMTguMzY2OSA4NS4wMjkzIDIwLjU1NTcgODYuMTkxOCAyNy41NTQ2Qzg3LjA4ODcgMzIuOTQgOTcuOTE2NCAzNC41MTAyIDEwMi40NDQgMzUuMzc1M0MxMDYuMDM2IDM2LjA2MzEgMTEzLjA2NyAzNy4wMTkgMTE2LjA3NiAzNy43NjMxQzExNi40NzYgMzcuODYyNSAxMTYuNjAzIDM4LjA1NzIgMTE2LjU5NCAzOC4yNjkxQzExNi41OTQgMzcuOTU3NyAxMTYuNjIgMzcuNjQ2MyAxMTYuNjI5IDM3LjMzNDhWMzcuMjc4NkMxMTYuNjI5IDM2Ljk5MDIgMTE2LjYyOSAzNi43MDE4IDExNi42MjkgMzYuNDEzNUMxMTYuNjM4IDI5LjkyNzYgMTE0Ljg5NSAyMy41NTgxIDExMS41ODMgMTcuOTY5TDExMS40NTIgMTcuNzY1N0MxMTEuMDc4IDE3LjEyNTUgMTA4LjQ4MyAxNi42Nzk5IDEwNC40NTEgMTcuMjY4MlpcIixcbiAgICAgICAgICBmaWxsOiBcInVybCgjcGFpbnQ4X2xpbmVhcilcIlxuICAgICAgICB9XG4gICAgICApLFxuICAgICAgLyogQF9fUFVSRV9fICovIGMoXG4gICAgICAgIFwicGF0aFwiLFxuICAgICAgICB7XG4gICAgICAgICAgc3R5bGU6IHsgbWl4QmxlbmRNb2RlOiBcIm11bHRpcGx5XCIgfSxcbiAgICAgICAgICBkOiBcIk04NS42OTQ3IDQzLjMzQzg0Ljk3NjMgNDAuNyA4MS4wOTcxIDM4Ljc5MjQgNzUuNTYzNSAzOC45MzA4QzY5LjA5MTggMzkuMDUwNCA2Mi42NDk0IDM5LjgyODcgNTYuMzM3NCA0MS4yNTM3QzUyLjU0MDcgNDIuMDU3NCA0OC44MjI3IDQzLjE5MjMgNDUuMjI2NiA0NC42NDVDNDQuNjUxOSA0NC44ODI5IDQ0LjQ2MDQgNDUuMTkgNDQuNTY0OSA0NS42MzU2QzQ0LjU5MSA0NS43MzA3IDQ0LjYxNzEgNDUuODMwMiA0NC42Mzg5IDQ1LjkyNTRDNDQuNjcwOCA0Ni4wNDk0IDQ0LjcwNTYgNDYuMTc0OCA0NC43NDM0IDQ2LjMwMTdDNDQuNzQzNCA0Ni4zNDA2IDQ0Ljc0MzQgNDYuMzc5NiA0NC43NzM4IDQ2LjQxNDJDNDQuODA0MyA0Ni41MTggNDQuODM0OCA0Ni42MTc1IDQ0Ljg2MDkgNDYuNzE3TDQ0Ljg4NyA0Ni44MDM1QzQ0LjkyNjIgNDYuOTI4OSA0NC45NjU0IDQ3LjA1IDQ1LjAwMDIgNDcuMTcxMkM0NS4wMDAyIDQ3LjIxMDEgNDUuMDI2MyA0Ny4yNDQ3IDQ1LjAzNTEgNDcuMjc5M0w0NS4xMjY1IDQ3LjU2NDhDNDUuMTQwMSA0Ny42MDE3IDQ1LjE1MTcgNDcuNjM5MiA0NS4xNjEzIDQ3LjY3NzNDNDUuMjAwNSA0Ny43OTg0IDQ1LjI0NCA0Ny45MTUyIDQ1LjI4MzIgNDguMDM2M0M0NS4yODMyIDQ4LjA2NjYgNDUuMjgzMiA0OC4wOTY4IDQ1LjMxMzcgNDguMTMxNUw0NS40MTM4IDQ4LjQxMjZDNDUuNDEzOCA0OC40NTU5IDQ1LjQ0NDMgNDguNDk0OCA0NS40NTc0IDQ4LjUzODFMNDUuNTc0OSA0OC44NjI1QzQ1LjU4NyA0OC44OTA2IDQ1LjU5NzIgNDguOTE5NSA0NS42MDU0IDQ4Ljk0OUw0NS43MjMgNDkuMjYwNEw0NS43NzUyIDQ5LjM5MDJDNDUuODA1NyA0OS40NzY3IDQ1Ljg0MDUgNDkuNTYzMiA0NS44NzUzIDQ5LjY0OThDNDUuODg3MiA0OS42ODY4IDQ1LjkwMTggNDkuNzIyOSA0NS45MTg5IDQ5Ljc1NzlDNDUuOTYyNCA0OS44NzA0IDQ2LjAwNiA0OS45ODI4IDQ2LjA1MzggNTAuMDk1M0M0Ni4wNTM4IDUwLjEzODUgNDYuMDg4NyA1MC4xODYxIDQ2LjExMDQgNTAuMjI5NEw0Ni4yMDYyIDUwLjQ2M0w0Ni4yNjI4IDUwLjU5NzFMNDYuNDA2NSA1MC45MjU4QzQ2LjQwNjUgNTAuOTY5MSA0Ni40NDU3IDUxLjAxMjMgNDYuNDYzMSA1MS4wNTk5TDQ2LjU2MzIgNTEuMjgwNUM0Ni41NjMyIDUxLjMyODEgNDYuNjExMSA1MS4zOCA0Ni42MzI5IDUxLjQzMTlMNDYuNzQ2MSA1MS42Nzg1TDQ2LjgzNzUgNTEuODczMUw0Ni45NDIgNTIuMDg5NEw0Ny4wMjA0IDUyLjI1MzhDNDcuMDUwOSA1Mi4zMTQzIDQ3LjA4MTMgNTIuMzc5MiA0Ny4xMTYyIDUyLjQzOThDNDcuMTUxIDUyLjUwMDMgNDcuMTkwMiA1Mi41OTEyIDQ3LjIyNSA1Mi42NjQ3QzQ3LjI1OTggNTIuNzM4MyA0Ny4zMDM0IDUyLjgxNjEgNDcuMzM4MiA1Mi44ODk2TDQ3LjQyOTYgNTMuMDY3QzQ3LjQ2MDEgNTMuMTE4OSA0Ny40ODYyIDUzLjE3MDggNDcuNTEyMyA1My4yMjI3QzQ3LjUzODUgNTMuMjc0NiA0Ny41Nzc2IDUzLjM0MzggNDcuNjA4MSA1My40MDQ0TDQ3Ljc1MTggNTMuNjY4M0w0Ny44NjA2IDUzLjg3MTZMNDcuOTM5IDU0LjAwNTdDNDcuOTczOCA1NC4wNzA1IDQ4LjAwODcgNTQuMTM1NCA0OC4wNDc5IDU0LjIwMDNMNDguMTEzMiA1NC4zMTcxQzQ4LjE4MjggNTQuNDMzOSA0OC4yNDgxIDU0LjU1NSA0OC4zMjIxIDU0LjY3NjFDNDguMzIyMSA1NC43MTA3IDQ4LjM2MTMgNTQuNzQ1MyA0OC4zODMxIDU0Ljc3OTlMNDguNTA1IDU0Ljk4NzZMNDguNTYxNiA1NS4wNzg0TDQ4LjgyMjggNTUuNTExVjU1LjU0OTlMNDguOTY2NSA1NS43NzA1TDQ5LjAxIDU1Ljg0NEM0OS4xNjI0IDU2LjA3NzYgNDkuMzE0OCA1Ni4zMTEyIDQ5LjQ3MTUgNTYuNTQ0OEw0OS41MDIgNTYuNTkyNEM0OS42Njc0IDU2LjgzODkgNDkuODMyOSA1Ny4wODEyIDUwLjAwNyA1Ny4zMjM0QzUxLjM2NSA1OS4yMzQ4IDUyLjkwMyA2MS4wMTM0IDU0LjYwMDIgNjIuNjM1M0w1NC43ODMxIDYyLjgwNEw1NC44MjIzIDYyLjg0NzJDNTUuMDUzIDYzLjA1OTIgNTUuMjc5NCA2My4yNzk4IDU1LjUxNDUgNjMuNDc0NUw1Ni4yMjQyIDY0LjA4ODdMNTYuMjc2NCA2NC4xMzE5TDU2LjUyOSA2NC4zMzk2QzU2LjU2NDEgNjQuMzcxIDU2LjYwNTcgNjQuMzk0NyA1Ni42NTA5IDY0LjQwODhDNTYuNTU1MSA2NC4zNzQyIDU2LjcxNjIgNjQuMjA1NSA1Ny4yMDgxIDY0LjAyMzhDNjAuNTMxNyA2Mi43NzkyIDYzLjc4NDQgNjEuMzU1NCA2Ni45NTE4IDU5Ljc1ODdDNzEuNzk3NSA1Ny4zNzUzIDczLjY2OTYgNTYuMzc2MSA3OC44NzI0IDUyLjYwNDJDODMuODUzIDQ5LjA2MTUgODYuNjYxMiA0Ni44MzM4IDg1LjY5NDcgNDMuMzNaXCIsXG4gICAgICAgICAgZmlsbDogXCJ1cmwoI3BhaW50OV9saW5lYXIpXCJcbiAgICAgICAgfVxuICAgICAgKSxcbiAgICAgIC8qIEBfX1BVUkVfXyAqLyBjKFxuICAgICAgICBcInBhdGhcIixcbiAgICAgICAge1xuICAgICAgICAgIHN0eWxlOiB7IG1peEJsZW5kTW9kZTogXCJtdWx0aXBseVwiIH0sXG4gICAgICAgICAgZDogXCJNODIuODI2MSA2OC42NTY5QzgyLjMyNTQgNjcuMTU1OSA3OC4zOTQgNjYuNjA2NSA3My42MzEgNjcuNTU4MkM3MS43MTIyIDY3LjkxNDMgNjkuODUwOCA2OC41MjY5IDY4LjA5NzQgNjkuMzc5MkM2Ni45NDggNjkuOTc2MiA2Ni44MTMgNzAuMzQ4MiA2Ny43ODM5IDcwLjcwNzJMNjcuOTY2OCA3MC43NzIxTDY4LjEyMzUgNzAuODI0TDY4Ljg4MTEgNzEuMDc0OUg2OC45MDI4TDY5LjY3MzQgNzEuMzEyOEw2OS45MzkgNzEuMzg2M0g2OS45OTEzQzcyLjM2OTUgNzIuMDU1NCA3NC44MDk5IDcyLjQ4MyA3Ny4yNzUxIDcyLjY2MjRDNzcuOTc2IDcxLjk0NDMgODMuNjA5OCA3MS4wMjMgODIuODI2MSA2OC42NTY5WlwiLFxuICAgICAgICAgIGZpbGw6IFwidXJsKCNwYWludDEwX2xpbmVhcilcIlxuICAgICAgICB9XG4gICAgICApLFxuICAgICAgLyogQF9fUFVSRV9fICovIGMoXG4gICAgICAgIFwicGF0aFwiLFxuICAgICAgICB7XG4gICAgICAgICAgc3R5bGU6IHsgbWl4QmxlbmRNb2RlOiBcIm11bHRpcGx5XCIgfSxcbiAgICAgICAgICBkOiBcIk04MS4xMjc5IDMuODkzMzZDOTEuNjAzIDMuNzUwNjIgOTYuMDIyIDQuODYyMzEgOTguMDMzNCA1LjU2NzM4Qzk5LjIyNjQgNS45OTk5NSA5OS41MzU1IDYuMzg0OTMgOTkuNjIyNiA2LjY0ODc5Qzk5LjQzNTMgNS45Njk2NyA5OC43MyA1LjA4MjkxIDk3LjAxMDMgNC4xNDg1OEM5MS4xODc5IDEuMTIyMDEgODQuNjUzNSAtMC4yOTM0MDIgNzguMDkxNSAwLjA1MDU3OEM3MS41Mjk1IDAuMzk0NTU4IDY1LjE4MTMgMi40ODUyNyA1OS43MTE4IDYuMTAzNzZDNjYuNzczMiA0Ljc1NTk4IDczLjkzODQgNC4wMTY0NCA4MS4xMjc5IDMuODkzMzZaXCIsXG4gICAgICAgICAgZmlsbDogXCJ1cmwoI3BhaW50MTFfbGluZWFyKVwiXG4gICAgICAgIH1cbiAgICAgICksXG4gICAgICAvKiBAX19QVVJFX18gKi8gYyhcbiAgICAgICAgXCJwYXRoXCIsXG4gICAgICAgIHtcbiAgICAgICAgICBzdHlsZTogeyBtaXhCbGVuZE1vZGU6IFwibXVsdGlwbHlcIiB9LFxuICAgICAgICAgIGQ6IFwiTTgyLjgyNjEgNjguNjU2OUM4Mi4zMjU0IDY3LjE1NTkgNzguMzk0IDY2LjYwNjUgNzMuNjMxIDY3LjU1ODJDNzEuNzEyMiA2Ny45MTQzIDY5Ljg1MDggNjguNTI2OSA2OC4wOTc0IDY5LjM3OTJDNjYuOTQ4IDY5Ljk3NjIgNjYuODEzIDcwLjM0ODIgNjcuNzgzOSA3MC43MDcyTDY3Ljk2NjggNzAuNzcyMUw2OC4xMjM1IDcwLjgyNEw2OC44ODExIDcxLjA3NDlINjguOTAyOEw2OS42NzM0IDcxLjMxMjhMNjkuOTM5IDcxLjM4NjNINjkuOTkxM0M3Mi4zNjk1IDcyLjA1NTQgNzQuODA5OSA3Mi40ODMgNzcuMjc1MSA3Mi42NjI0Qzc3Ljk3NiA3MS45NDQzIDgzLjYwOTggNzEuMDIzIDgyLjgyNjEgNjguNjU2OVpcIixcbiAgICAgICAgICBmaWxsOiBcInVybCgjcGFpbnQxMl9saW5lYXIpXCJcbiAgICAgICAgfVxuICAgICAgKSxcbiAgICAgIC8qIEBfX1BVUkVfXyAqLyBjKFxuICAgICAgICBcInBhdGhcIixcbiAgICAgICAge1xuICAgICAgICAgIGQ6IFwiTTgxLjEyNzkgMy44OTMzNkM5MS42MDMgMy43NTA2MiA5Ni4wMjIgNC44NjIzMSA5OC4wMzM0IDUuNTY3MzhDOTkuMjI2NCA1Ljk5OTk1IDk5LjUzNTUgNi4zODQ5MyA5OS42MjI2IDYuNjQ4NzlDOTkuNDM1MyA1Ljk2OTY3IDk4LjczIDUuMDgyOTEgOTcuMDEwMyA0LjE0ODU4QzkxLjE4NzkgMS4xMjIwMSA4NC42NTM1IC0wLjI5MzQwMiA3OC4wOTE1IDAuMDUwNTc4QzcxLjUyOTUgMC4zOTQ1NTggNjUuMTgxMyAyLjQ4NTI3IDU5LjcxMTggNi4xMDM3NkM2Ni43NzMyIDQuNzU1OTggNzMuOTM4NCA0LjAxNjQ0IDgxLjEyNzkgMy44OTMzNlpcIixcbiAgICAgICAgICBmaWxsOiBcInVybCgjcGFpbnQxM19saW5lYXIpXCJcbiAgICAgICAgfVxuICAgICAgKSxcbiAgICAgIC8qIEBfX1BVUkVfXyAqLyBjKFxuICAgICAgICBcInBhdGhcIixcbiAgICAgICAge1xuICAgICAgICAgIHN0eWxlOiB7IG1peEJsZW5kTW9kZTogXCJtdWx0aXBseVwiIH0sXG4gICAgICAgICAgZDogXCJNNTEuNDQ4NSAzMS45MzIzQzU3Ljg4MzMgMjkuMTQ2NiA2NC42MzE2IDI2LjAzNjQgNjkuMDQxOSAyMy45Njg4TDY5Ljc2NDcgMjMuNjI3MUM1Ny4zMDg2IDI1LjI1MzUgNDguOTg4NiAyNi40MzQ0IDQ0LjY3ODQgMjYuNzc2MUM0NC42Nzg0IDI2LjgxOTQgNDQuNjU2NiAyNi44NTgzIDQ0LjY0MzYgMjYuODk3MkM0NC42MzU0IDI2LjkzMzggNDQuNjI1MyAyNi45Njk5IDQ0LjYxMzEgMjcuMDA1NEM0NC41OTEzIDI3LjA3ODkgNDQuNTczOSAyNy4xNTI1IDQ0LjU1MjEgMjcuMjI2VjI3LjI4NjZDNDQuNTMwNCAyNy4zNjQ0IDQ0LjUwODYgMjcuNDQyMyA0NC40OTEyIDI3LjUyMDFWMjcuNTg1VjI3LjYxMUw0NC40MjU5IDI3Ljg3OTJWMjcuOTQ0MUM0NC40MjU5IDI4LjAyNjIgNDQuMzg2NyAyOC4xMDg0IDQ0LjM2OTMgMjguMTkwNlYyOC4yNDY4QzQ0LjMyMTQgMjguNDUwMSA0NC4yNzc4IDI4LjY1MzUgNDQuMjM0MyAyOC44NTY4VjI4LjkwNDNMNDQuMTgyMSAyOS4xNTk2VjI5LjIzMzFDNDQuMTgyMSAyOS4zMTUzIDQ0LjE1MTYgMjkuMzkzMSA0NC4xMzQyIDI5LjQ3MVYyOS41NDAyQzQ0LjEzNDIgMjkuNjM5NyA0NC4wOTkzIDI5LjczOTIgNDQuMDc3NiAyOS44Mzg3QzQ0LjA3NzYgMjkuOTQyNSA0NC4wNDI3IDMwLjA0NjMgNDQuMDIxIDMwLjE1MDFWMzAuMjAyQzQ0LjAyMSAzMC4yODQyIDQzLjk5MDUgMzAuMzcwNyA0My45Nzc0IDMwLjQ1MjlWMzAuNTM1MUw0My45MzgyIDMwLjc2ODdWMzAuODQ2NUw0My44OTkxIDMxLjExNDdWMzEuMTUzN0M0My44OTkxIDMxLjI1NzUgNDMuODY4NiAzMS4zNjEzIDQzLjg1NTUgMzEuNDY1MVYzMS41MTI3QzQzLjg1NTUgMzEuNTk5MiA0My44MzM4IDMxLjY4NTcgNDMuODI1IDMxLjc3MjJWMzEuODU4N0w0My43OTg5IDMyLjA4MzdWMzIuMTc0NUw0My43NzI4IDMyLjQyNTRWMzIuNDgxNkM0My43NzI4IDMyLjU4NTUgNDMuNzUxIDMyLjY4OTMgNDMuNzQyMyAzMi43OTMxVjMyLjgzNjNMNDMuNzE2MiAzMy4xMDQ1QzQzLjcxNjIgMzMuMTMwNSA0My43MTYyIDMzLjE2MDggNDMuNzE2MiAzMy4xOTFDNDMuNzE2MiAzMy4yMjEzIDQzLjcxNjIgMzMuMzQyNCA0My42OTQ0IDMzLjQxNkM0My42NzI3IDMzLjQ4OTUgNDMuNjk0NCAzMy40ODA5IDQzLjY5NDQgMzMuNTExMUM0My42OTQ0IDMzLjU0MTQgNDMuNjk0NCAzMy42NzEyIDQzLjY3MjcgMzMuNzUzNEM0My42NzQ4IDMzLjc3NjQgNDMuNjc0OCAzMy43OTk2IDQzLjY3MjcgMzMuODIyNkM0My42NzI3IDMzLjkzMDcgNDMuNjcyNyAzNC4wMzQ1IDQzLjY3MjcgMzQuMTM4M1YzNC4xNjQzQzQzLjY3MjcgMzQuMjU5NSA0My42NzI3IDM0LjM1NDYgNDMuNjcyNyAzNC40NDk4QzQzLjY3NDggMzQuNDggNDMuNjc0OCAzNC41MTA0IDQzLjY3MjcgMzQuNTQwNkM0My42NzI3IDM0LjYxNDIgNDMuNjcyNyAzNC42OTIgNDMuNjcyNyAzNC43NjU2QzQzLjY3MjcgMzQuODM5MSA0My42NzI3IDM0LjgzMDUgNDMuNjcyNyAzNC44NjUxQzQzLjY3MjcgMzQuODk5NyA0My42NzI3IDM1LjAyMDggNDMuNjcyNyAzNS4wOTg2QzQzLjY3NDcgMzUuMTI2IDQzLjY3NDcgMzUuMTUzNSA0My42NzI3IDM1LjE4MDhDNDMuNjcyNyAzNS4yODQ2IDQzLjY3MjcgMzUuMzkyOCA0My42NzI3IDM1LjQ5NjZDNDMuNjcyNyAzNS42MDA0IDQzLjY3MjcgMzUuNzA0MiA0My42NzI3IDM1LjgwMzdWMzUuODcyOUM0My42NzI3IDM2LjAxNTcgNDMuNjcyNyAzNi4xNjI3IDQzLjY3MjcgMzYuMzA1NUM0My4zOTg0IDM1LjY4MjYgNDUuNzM2MyAzNC40MDY1IDUxLjQ0ODUgMzEuOTMyM1pcIixcbiAgICAgICAgICBmaWxsOiBcInVybCgjcGFpbnQxNF9saW5lYXIpXCJcbiAgICAgICAgfVxuICAgICAgKSxcbiAgICAgIC8qIEBfX1BVUkVfXyAqLyBjKFxuICAgICAgICBcInBhdGhcIixcbiAgICAgICAge1xuICAgICAgICAgIHN0eWxlOiB7IG1peEJsZW5kTW9kZTogXCJtdWx0aXBseVwiIH0sXG4gICAgICAgICAgZDogXCJNMTEwLjEyNCA0OC43NUMxMDkuMTc5IDQ4Ljc1IDEwMy43MzcgNDguODc1NCA5NC45NTUyIDQ5LjcxMDNDODMuNDU2OSA1MC44MDQ3IDY2LjcwMzcgNTMuMjA1NCA1OS45MzM3IDU0LjM1NkM1NS43MjM2IDU1LjA2NTQgNTEuODAwOSA1NS45MDAzIDQ5LjQzMjQgNTYuNDMyM0w0OS43NTQ2IDU2LjkwODFMNDkuODI4NiA1Ny4wMTJDNDkuODcyMiA1Ny4wODEyIDQ5LjkyMDEgNTcuMTQ2IDQ5Ljk2NzkgNTcuMjEwOUw1MC4wNDYzIDU3LjMyMzRMNTAuMTkgNTcuNTI2N0w1MC4yMzc5IDU3LjU5NTlMNTAuNTQyNiA1OC4wMDY4TDUwLjYwMzYgNTguMDg5TDUwLjc1NiA1OC4yOTIzQzUwLjc4MjEgNTguMzIyNiA1MC44MDM5IDU4LjM1NzIgNTAuODMgNTguMzkxOEw1MC45ODY3IDU4LjU5MDhMNTEuMDQzMyA1OC42NjQzTDUxLjM5NiA1OS4wOTY5VjU5LjEyMjlMNTEuNTcwMSA1OS4zMzA1TDUxLjYzNTQgNTkuNDEyN0w1MS44MDUyIDU5LjYyMDNMNTEuODU3NSA1OS42ODA5QzUyLjA1MzQgNTkuOTEwMSA1Mi4yNDUgNjAuMTEzNCA1Mi40NDUyIDYwLjM2TDUyLjQ5MzEgNjAuNDE2Mkw1Mi42ODQ3IDYwLjYyODJMNTIuNzI4MiA2MC42ODAxTDUzLjM2MzkgNjEuMzY3OUw1My4zODU2IDYxLjM4OTVMNTMuNTk5IDYxLjYxMDFMNTMuNjMzOCA2MS42NDQ3QzUzLjkzNDIgNjEuOTU2MSA1NC4yMzkgNjIuMjU4OSA1NC41NTI0IDYyLjU1NzRMNTQuNTc0MiA2Mi41NzlDNTQuODkyIDYyLjg4MTggNTUuMjE0MiA2My4xODAzIDU1LjU0MDcgNjMuNDcwMUM1NS44NzYgNjMuNzY0MyA1Ni4yMTEyIDY0LjA1NDEgNTYuNTU1MiA2NC4zMzUyQzU2LjczOCA2NC40ODY2IDU3LjEzODYgNjQuNTEyNiA1OC4zOTI0IDY0LjI3OUM2MS4wMDQ3IDYzLjc4NTkgNzAuODc0NiA2Mi4wODU5IDgxLjgwMjUgNjAuNTk3OUM4OS4zNzIyIDU5LjYzMTMgOTYuOTg5NyA1OS4wNzk2IDEwNC42MjEgNTguOTQ1NUMxMDYuNTQxIDU4Ljk2NzEgMTA4LjM2IDU5LjM3ODEgMTA3LjYyOSA2MC4yOTk0TDEwNy44NzMgNjAuMDE4M1Y1OS45OTY2TDEwOC4xMDQgNTkuNzI0MVY1OS43MDI1TDEwOC4zMyA1OS40M0wxMDguMzYgNTkuMzk5N0wxMDguNTg3IDU5LjExNDJDMTA4Ljg3IDU4Ljc1OTUgMTA5LjE0OCA1OC40MDA1IDEwOS40MTggNTguMDM3MUMxMDkuNjg4IDU3LjY3MzggMTA5Ljk1NCA1Ny4zMDE4IDExMC4yMTEgNTYuOTI5OEwxMTAuNDIgNTYuNjIyNkwxMTAuNDQxIDU2LjU5NjdMMTEwLjY0MiA1Ni4yODk2VjU2LjI2MzZMMTEwLjg0NiA1NS45NTIyQzExMS40MTIgNTUuMDY1NCAxMTEuOTM5IDU0LjE1NyAxMTIuNDMxIDUzLjIxODRDMTEyLjQ5MiA1My4xMDU5IDExMi41NDkgNTIuOTkzNCAxMTIuNjA1IDUyLjg4MUwxMTIuNzc1IDUyLjUzOTNDMTEzLjI0MSA1MS41ODc2IDExMy42NzIgNTAuNjEgMTE0LjA4MSA0OS42MTUxQzExNC4zMzggNDkuMDY1OCAxMTMuODk4IDQ4Ljc1IDExMC4xMjQgNDguNzVaXCIsXG4gICAgICAgICAgZmlsbDogXCJ1cmwoI3BhaW50MTVfbGluZWFyKVwiXG4gICAgICAgIH1cbiAgICAgICksXG4gICAgICAvKiBAX19QVVJFX18gKi8gYyhcbiAgICAgICAgXCJwYXRoXCIsXG4gICAgICAgIHtcbiAgICAgICAgICBkOiBcIk01MS41MTgzIDExOC45MjFDNTAuMjEyMSAxMTguOTIxIDQ5LjIyODIgMTE5LjMxOCA0OC41NDQ3IDEyMC4xMjNDNDcuODYxMSAxMjAuOTI4IDQ3LjUxMjggMTIyLjAzNSA0Ny41MTI4IDEyMy40NTRDNDcuNTA2MyAxMjQuMDgxIDQ3LjU4OTkgMTI0LjcwNiA0Ny43NjEgMTI1LjMwOUM0Ny45MDQyIDEyNS44MzIgNDguMTUxNCAxMjYuMzIgNDguNDg4MSAxMjYuNzQ2QzQ4LjgxMTUgMTI3LjE0MyA0OS4yMjI2IDEyNy40NjEgNDkuNjg5NyAxMjcuNjc2QzUwLjIxODYgMTI3LjkwOCA1MC43OTIzIDEyOC4wMjEgNTEuMzcwMiAxMjguMDA5QzUxLjcxNjEgMTI4LjAxMiA1Mi4wNjIgMTI3Ljk5NyA1Mi40MDY0IDEyNy45NjVDNTIuNjQwNCAxMjcuOTQ2IDUyLjg3MjIgMTI3LjkwNiA1My4wOTg3IDEyNy44NDRWMTIzLjM0Nkg1NS4zODg3VjEyOS4zNjNDNTQuODY3NyAxMjkuNTM3IDU0LjMzMzQgMTI5LjY3MSA1My43OTA5IDEyOS43NjFDNTIuOTI5MiAxMjkuOTE2IDUyLjA1NDQgMTI5Ljk4OCA1MS4xNzg3IDEyOS45NzdDNTAuMzI4NyAxMjkuOTg4IDQ5LjQ4NDEgMTI5Ljg0MSA0OC42ODgzIDEyOS41NDRDNDcuOTYwOSAxMjkuMjcyIDQ3LjMwNDYgMTI4Ljg0IDQ2Ljc2ODMgMTI4LjI4MUM0Ni4yMjExIDEyNy42OTIgNDUuODAzIDEyNi45OTcgNDUuNTQwNiAxMjYuMjM5QzQ1LjIzNzMgMTI1LjM0MiA0NS4wOTAxIDEyNC40IDQ1LjEwNTIgMTIzLjQ1NEM0NS4wODc5IDEyMi41MDUgNDUuMjUxOSAxMjEuNTYxIDQ1LjU4ODUgMTIwLjY3MkM0NS44ODAxIDExOS45MDggNDYuMzI0NCAxMTkuMjExIDQ2Ljg5NDYgMTE4LjYyMkM0Ny40NDkzIDExOC4wNjIgNDguMTE5IDExNy42MjYgNDguODU4MSAxMTcuMzQ2QzQ5LjYyNDEgMTE3LjA1NiA1MC40Mzc0IDExNi45MDkgNTEuMjU3IDExNi45MTNDNTEuNzc3NSAxMTYuOTA5IDUyLjI5NzUgMTE2Ljk0OCA1Mi44MTEzIDExNy4wM0M1My4yMDc5IDExNy4wOTYgNTMuNjAwNCAxMTcuMTg0IDUzLjk4NjggMTE3LjI5NEM1NC4yNjU2IDExNy4zNzIgNTQuNTM2NyAxMTcuNDc0IDU0Ljc5NjYgMTE3LjYwMUw1NS4yMzIgMTE3LjgzNUw1NC41Mzk4IDExOS42OTVDNTQuMTE0NyAxMTkuNDUzIDUzLjY1OTQgMTE5LjI2OSA1My4xODU3IDExOS4xNDVDNTIuNjQyNyAxMTguOTk2IDUyLjA4MTggMTE4LjkyIDUxLjUxODMgMTE4LjkyMVpcIixcbiAgICAgICAgICBmaWxsOiBcIiMyMzFGMjBcIlxuICAgICAgICB9XG4gICAgICApLFxuICAgICAgLyogQF9fUFVSRV9fICovIGMoXG4gICAgICAgIFwicGF0aFwiLFxuICAgICAgICB7XG4gICAgICAgICAgZDogXCJNNjQuMTkxOSAxMTcuMDc4QzY2LjAxMTcgMTE3LjA3OCA2Ny40MDA2IDExNy40MDYgNjguMzY3MSAxMTguMDY4QzY4Ljg0NjUgMTE4LjQxIDY5LjIzMDUgMTE4Ljg2NyA2OS40ODM0IDExOS4zOTdDNjkuNzM2MiAxMTkuOTI2IDY5Ljg0OTUgMTIwLjUxMSA2OS44MTI2IDEyMS4wOTZDNjkuODEyNiAxMjIuNzk4IDY4Ljk2OTQgMTIzLjk1MSA2Ny4yODMgMTI0LjU1N0M2Ny41MTUyIDEyNC44NDUgNjcuNzc2NSAxMjUuMTgzIDY4LjA2NjcgMTI1LjU2OUM2OC4zNTg0IDEyNS45NjcgNjguNjU0NSAxMjYuMzk5IDY4LjkzNzUgMTI2Ljg2N0M2OS4yMjA1IDEyNy4zMzQgNjkuNTMzOSAxMjcuODA1IDY5LjgwODIgMTI4LjI5NEM3MC4wODI1IDEyOC43ODMgNzAuMzM1IDEyOS4yNTkgNzAuNTUyNyAxMjkuNzNINjcuOTg4M0M2Ny43NTkgMTI5LjI5OCA2Ny41MTA5IDEyOC44NjUgNjcuMjQzOCAxMjguNDMzQzY2Ljk3ODMgMTI4IDY2LjcwODMgMTI3LjU2NyA2Ni40MzQxIDEyNy4xMzVDNjYuMTU5OCAxMjYuNzAyIDY1Ljg4OTggMTI2LjMyNiA2NS42MjQzIDEyNS45NThDNjUuMzU4NyAxMjUuNTkxIDY1LjExMDUgMTI1LjI2MiA2NC44Nzk4IDEyNC45NzJDNjQuNzEgMTI0Ljk3MiA2NC41NjE5IDEyNC45NzIgNjQuNDQ0NCAxMjQuOTcySDYzLjAxMlYxMjkuNzA5SDYwLjcxNzZWMTE3LjM4NUM2MS4zMDU4IDExNy4yNiA2MS45MDI0IDExNy4xNzcgNjIuNTAyNiAxMTcuMTM4QzYzLjEyOTYgMTE3LjA5OSA2My42OTU1IDExNy4wNzggNjQuMTkxOSAxMTcuMDc4Wk02NC4zNTczIDExOS4wNDZDNjMuODY5NyAxMTkuMDQ2IDYzLjQyMTMgMTE5LjA0NiA2My4wMTIgMTE5LjEwMlYxMjMuMTQ3SDY0LjAwOUM2NC41MDI0IDEyMy4xNSA2NC45OTU0IDEyMy4xMjEgNjUuNDg0OSAxMjMuMDZDNjUuODU2NSAxMjMuMDE3IDY2LjIxNjcgMTIyLjkwNSA2Ni41NDcyIDEyMi43MzFDNjYuODE5MSAxMjIuNTg3IDY3LjA0MyAxMjIuMzY4IDY3LjE5MTYgMTIyLjFDNjcuMzQ5NSAxMjEuNzg2IDY3LjQyNDUgMTIxLjQzOCA2Ny40MDkzIDEyMS4wODhDNjcuNDIxNiAxMjAuNzUgNjcuMzQ2NyAxMjAuNDE1IDY3LjE5MTYgMTIwLjExNEM2Ny4wNDczIDExOS44NDggNjYuODMgMTE5LjYyNyA2Ni41NjQ3IDExOS40NzhDNjYuMjYzMyAxMTkuMzEyIDY1LjkzNDYgMTE5LjE5OSA2NS41OTM4IDExOS4xNDVDNjUuMTg2NyAxMTkuMDc3IDY0Ljc3NDUgMTE5LjA0NCA2NC4zNjE3IDExOS4wNDZINjQuMzU3M1pcIixcbiAgICAgICAgICBmaWxsOiBcIiMyMzFGMjBcIlxuICAgICAgICB9XG4gICAgICApLFxuICAgICAgLyogQF9fUFVSRV9fICovIGMoXG4gICAgICAgIFwicGF0aFwiLFxuICAgICAgICB7XG4gICAgICAgICAgZDogXCJNODYuMzM5MiAxMjMuNDU0Qzg2LjM1NzcgMTI0LjQyMSA4Ni4xOTM4IDEyNS4zODQgODUuODU2IDEyNi4yOTFDODUuNTcwNyAxMjcuMDU5IDg1LjEyNTYgMTI3Ljc1NyA4NC41NDk4IDEyOC4zNDJDODQuMDAxMSAxMjguODg5IDgzLjM0MDQgMTI5LjMxMiA4Mi42MTI0IDEyOS41ODNDODEuMDgyNyAxMzAuMTM3IDc5LjQwNTMgMTMwLjEzNyA3Ny44NzU2IDEyOS41ODNDNzcuMTQ1IDEyOS4zMTIgNzYuNDgxNCAxMjguODg5IDc1LjkyOTQgMTI4LjM0MkM3NS4zNTU1IDEyNy43NTYgNzQuOTEwNyAxMjcuMDU4IDc0LjYyMzMgMTI2LjI5MUM3My45Njc0IDEyNC40NiA3My45Njc0IDEyMi40NiA3NC42MjMzIDEyMC42MjlDNzQuOTIyNiAxMTkuODYxIDc1LjM3NzYgMTE5LjE2MSA3NS45NTk5IDExOC41NzRDNzYuNTE2MiAxMTguMDI3IDc3LjE4MjMgMTE3LjYwMyA3Ny45MTQ3IDExNy4zMjlDNzkuNDI5NSAxMTYuNzc1IDgxLjA5MzMgMTE2Ljc3NSA4Mi42MDgxIDExNy4zMjlDODMuMzM3NCAxMTcuNTk5IDgzLjk5ODYgMTE4LjAyNCA4NC41NDU1IDExOC41NzRDODUuMTE0OSAxMTkuMTY2IDg1LjU1OSAxMTkuODY0IDg1Ljg1MTYgMTIwLjYyOUM4Ni4xOTMyIDEyMS41MzEgODYuMzU4NyAxMjIuNDkgODYuMzM5MiAxMjMuNDU0Wk03Ni40OTk4IDEyMy40NTRDNzYuNDkxNSAxMjQuMDg3IDc2LjU3NjYgMTI0LjcxOCA3Ni43NTIzIDEyNS4zMjdDNzYuOTAzIDEyNS44NDUgNzcuMTUyOCAxMjYuMzMgNzcuNDg4MSAxMjYuNzU0Qzc3LjgwNjMgMTI3LjE0MiA3OC4yMDggMTI3LjQ1NCA3OC42NjM2IDEyNy42NjdDNzkuMTUzNyAxMjcuODkgNzkuNjg3NyAxMjguMDAxIDgwLjIyNjYgMTI3Ljk5MUM4MC43NTk3IDEyNy45OTkgODEuMjg3OCAxMjcuODg4IDgxLjc3MjEgMTI3LjY2N0M4Mi4yMjc3IDEyNy40NTQgODIuNjI5NCAxMjcuMTQyIDgyLjk0NzcgMTI2Ljc1NEM4My4yODI5IDEyNi4zMyA4My41MzI3IDEyNS44NDUgODMuNjgzNCAxMjUuMzI3Qzg0LjAyIDEyNC4xMDIgODQuMDIgMTIyLjgxIDgzLjY4MzQgMTIxLjU4NUM4My41MzI3IDEyMS4wNjcgODMuMjgyOSAxMjAuNTgyIDgyLjk0NzcgMTIwLjE1OEM4Mi42Mjk0IDExOS43NyA4Mi4yMjc3IDExOS40NTggODEuNzcyMSAxMTkuMjQ1QzgxLjI4NzggMTE5LjAyNCA4MC43NTk3IDExOC45MTMgODAuMjI2NiAxMTguOTIxQzc5LjY4NzcgMTE4LjkxMSA3OS4xNTM3IDExOS4wMjIgNzguNjYzNiAxMTkuMjQ1Qzc4LjIwNTggMTE5LjQ1OCA3Ny44MDM2IDExOS43NzQgNzcuNDg4MSAxMjAuMTY2Qzc3LjE1NDQgMTIwLjU5MiA3Ni45MDQ4IDEyMS4wNzYgNzYuNzUyMyAxMjEuNTk0Qzc2LjU3NjMgMTIyLjE5OCA3Ni40OTEzIDEyMi44MjUgNzYuNDk5OCAxMjMuNDU0WlwiLFxuICAgICAgICAgIGZpbGw6IFwiIzIzMUYyMFwiXG4gICAgICAgIH1cbiAgICAgICksXG4gICAgICAvKiBAX19QVVJFX18gKi8gYyhcbiAgICAgICAgXCJwYXRoXCIsXG4gICAgICAgIHtcbiAgICAgICAgICBkOiBcIk05NS45MzA2IDEyOS45OThDOTUuMTczMyAxMzAuMDE2IDk0LjQxOTcgMTI5Ljg5IDkzLjcxMDEgMTI5LjYyNkM5My4xMjQ0IDEyOS40MDIgOTIuNTk4NSAxMjkuMDQ3IDkyLjE3MzMgMTI4LjU4OEM5MS43NjI4IDEyOC4xMzQgOTEuNDU1NCAxMjcuNTk3IDkxLjI3MiAxMjcuMDE0QzkxLjA3NDMgMTI2LjM3IDkwLjk3NzQgMTI1LjcwMSA5MC45ODQ3IDEyNS4wMjhWMTE3LjIwM0g5My4yOTIyVjEyNC44MTJDOTMuMjgyNiAxMjUuMzAzIDkzLjM0NzEgMTI1Ljc5MyA5My40ODM4IDEyNi4yNjVDOTMuNTkwNCAxMjYuNjMgOTMuNzc2MiAxMjYuOTY2IDk0LjAyOCAxMjcuMjUyQzk0LjI1OTggMTI3LjQ5OSA5NC41NDU4IDEyNy42OSA5NC44NjM5IDEyNy44MUM5NS4yMTEyIDEyNy45MzUgOTUuNTc4NSAxMjcuOTk2IDk1Ljk0OCAxMjcuOTkxQzk2LjMyMDIgMTI3Ljk5NiA5Ni42OTAzIDEyNy45MzQgOTcuMDQwOCAxMjcuODFDOTcuMzYxOSAxMjcuNjkxIDk3LjY1MTEgMTI3LjUgOTcuODg1NCAxMjcuMjUyQzk4LjEzNzIgMTI2Ljk2NiA5OC4zMjI5IDEyNi42MyA5OC40Mjk2IDEyNi4yNjVDOTguNTY2MiAxMjUuNzkzIDk4LjYzMDggMTI1LjMwMyA5OC42MjEyIDEyNC44MTJWMTE3LjIwM0gxMDAuOTMzVjEyNS4wMjhDMTAwLjk0MiAxMjUuNzAxIDEwMC44NDIgMTI2LjM3MiAxMDAuNjM3IDEyNy4wMTRDMTAwLjQ0OSAxMjcuNTk3IDEwMC4xMzkgMTI4LjEzMyA5OS43MjcgMTI4LjU4OEM5OS4yOTYyIDEyOS4wNDggOTguNzY0MyAxMjkuNDA0IDk4LjE3MjcgMTI5LjYyNkM5Ny40NTU0IDEyOS44ODkgOTYuNjk0OCAxMzAuMDE1IDk1LjkzMDYgMTI5Ljk5OFpcIixcbiAgICAgICAgICBmaWxsOiBcIiMyMzFGMjBcIlxuICAgICAgICB9XG4gICAgICApLFxuICAgICAgLyogQF9fUFVSRV9fICovIGMoXG4gICAgICAgIFwicGF0aFwiLFxuICAgICAgICB7XG4gICAgICAgICAgZDogXCJNMTA5Ljk3NiAxMTcuMDc4QzExMS44MDUgMTE3LjA3OCAxMTMuMjA4IDExNy40MDggMTE0LjE4NiAxMTguMDY4QzExNS4xNjEgMTE4LjczNCAxMTUuNjQ5IDExOS43NjggMTE1LjY0OSAxMjEuMTc4QzExNS42NjYgMTIxLjgzIDExNS41MzIgMTIyLjQ3NyAxMTUuMjU3IDEyMy4wNjlDMTE1LjAwMiAxMjMuNTk1IDExNC42MSAxMjQuMDQzIDExNC4xMjEgMTI0LjM2NkMxMTMuNTY2IDEyNC43MjMgMTEyLjk0OSAxMjQuOTcxIDExMi4zMDEgMTI1LjA5N0MxMTEuNDk0IDEyNS4yNjYgMTEwLjY3IDEyNS4zNDYgMTA5Ljg0NSAxMjUuMzM1SDEwOC43VjEyOS43NDNIMTA2LjQxVjExNy4zODVDMTA2Ljk5MyAxMTcuMjU3IDEwNy41ODYgMTE3LjE3NCAxMDguMTgyIDExNy4xMzhDMTA4LjgzMSAxMTcuMDk5IDEwOS40MjcgMTE3LjA3OCAxMDkuOTc2IDExNy4wNzhaTTExMC4xMzcgMTE5LjA0NkMxMDkuNTU4IDExOS4wNDYgMTA5LjA3OSAxMTkuMDQ2IDEwOC43IDExOS4xMDJWMTIzLjM2N0gxMDkuODExQzExMC42ODQgMTIzLjQxMSAxMTEuNTU2IDEyMy4yNTIgMTEyLjM1NyAxMjIuOTA0QzExMi45NSAxMjIuNTk3IDExMy4yNSAxMjIuMDE4IDExMy4yNSAxMjEuMTc0QzExMy4yNjEgMTIwLjgxNiAxMTMuMTc5IDEyMC40NjEgMTEzLjAxMSAxMjAuMTQ1QzExMi44NTYgMTE5Ljg3MiAxMTIuNjMxIDExOS42NDcgMTEyLjM1NyAxMTkuNDkxQzExMi4wNDggMTE5LjMyNCAxMTEuNzEzIDExOS4yMTIgMTExLjM2NSAxMTkuMTU4QzExMC45NiAxMTkuMDg3IDExMC41NDkgMTE5LjA0OSAxMTAuMTM3IDExOS4wNDZaXCIsXG4gICAgICAgICAgZmlsbDogXCIjMjMxRjIwXCJcbiAgICAgICAgfVxuICAgICAgKSxcbiAgICAgIC8qIEBfX1BVUkVfXyAqLyBlMShcImRlZnNcIiwgeyBjaGlsZHJlbjogW1xuICAgICAgICAvKiBAX19QVVJFX18gKi8gZTEoXG4gICAgICAgICAgXCJsaW5lYXJHcmFkaWVudFwiLFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGlkOiBcInBhaW50MF9saW5lYXJcIixcbiAgICAgICAgICAgIHgxOiBcIjQ0LjYwNDFcIixcbiAgICAgICAgICAgIHkxOiBcIjQyLjA1ODNcIixcbiAgICAgICAgICAgIHgyOiBcIjExNi42NDFcIixcbiAgICAgICAgICAgIHkyOiBcIjQyLjA1ODNcIixcbiAgICAgICAgICAgIGdyYWRpZW50VW5pdHM6IFwidXNlclNwYWNlT25Vc2VcIixcbiAgICAgICAgICAgIGNoaWxkcmVuOiBbXG4gICAgICAgICAgICAgIC8qIEBfX1BVUkVfXyAqLyBjKFwic3RvcFwiLCB7IG9mZnNldDogXCIwLjAzXCIsIHN0b3BDb2xvcjogXCIjRTlGN0ZFXCIsIHN0b3BPcGFjaXR5OiBcIjAuNFwiIH0pLFxuICAgICAgICAgICAgICAvKiBAX19QVVJFX18gKi8gYyhcInN0b3BcIiwgeyBvZmZzZXQ6IFwiMC4zMVwiLCBzdG9wQ29sb3I6IFwiIzVFQTFEN1wiIH0pLFxuICAgICAgICAgICAgICAvKiBAX19QVVJFX18gKi8gYyhcInN0b3BcIiwgeyBvZmZzZXQ6IFwiMC41NVwiLCBzdG9wQ29sb3I6IFwiIzREQTNEQVwiIH0pLFxuICAgICAgICAgICAgICAvKiBAX19QVVJFX18gKi8gYyhcInN0b3BcIiwgeyBvZmZzZXQ6IFwiMC44OVwiLCBzdG9wQ29sb3I6IFwiIzY0NUZBQVwiIH0pLFxuICAgICAgICAgICAgICAvKiBAX19QVVJFX18gKi8gYyhcInN0b3BcIiwgeyBvZmZzZXQ6IFwiMVwiLCBzdG9wQ29sb3I6IFwiIzQxNDA5OVwiIH0pXG4gICAgICAgICAgICBdXG4gICAgICAgICAgfVxuICAgICAgICApLFxuICAgICAgICAvKiBAX19QVVJFX18gKi8gZTEoXG4gICAgICAgICAgXCJsaW5lYXJHcmFkaWVudFwiLFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGlkOiBcInBhaW50MV9saW5lYXJcIixcbiAgICAgICAgICAgIHgxOiBcIjUyLjk0MjFcIixcbiAgICAgICAgICAgIHkxOiBcIjMzLjc4MzJcIixcbiAgICAgICAgICAgIHgyOiBcIjg4LjEwODdcIixcbiAgICAgICAgICAgIHkyOiBcIi0xLjYxNjI4XCIsXG4gICAgICAgICAgICBncmFkaWVudFVuaXRzOiBcInVzZXJTcGFjZU9uVXNlXCIsXG4gICAgICAgICAgICBjaGlsZHJlbjogW1xuICAgICAgICAgICAgICAvKiBAX19QVVJFX18gKi8gYyhcInN0b3BcIiwgeyBzdG9wQ29sb3I6IFwiI0ZGRjc5NVwiLCBzdG9wT3BhY2l0eTogXCIwLjNcIiB9KSxcbiAgICAgICAgICAgICAgLyogQF9fUFVSRV9fICovIGMoXCJzdG9wXCIsIHsgb2Zmc2V0OiBcIjAuMzVcIiwgc3RvcENvbG9yOiBcIiNGM0MyMDZcIiB9KSxcbiAgICAgICAgICAgICAgLyogQF9fUFVSRV9fICovIGMoXCJzdG9wXCIsIHsgb2Zmc2V0OiBcIjAuNjVcIiwgc3RvcENvbG9yOiBcIiNGRkMyMEVcIiB9KSxcbiAgICAgICAgICAgICAgLyogQF9fUFVSRV9fICovIGMoXCJzdG9wXCIsIHsgb2Zmc2V0OiBcIjAuOTVcIiwgc3RvcENvbG9yOiBcIiNGOTlCMUNcIiB9KSxcbiAgICAgICAgICAgICAgLyogQF9fUFVSRV9fICovIGMoXCJzdG9wXCIsIHsgb2Zmc2V0OiBcIjFcIiwgc3RvcENvbG9yOiBcIiNGNjg5MUZcIiB9KVxuICAgICAgICAgICAgXVxuICAgICAgICAgIH1cbiAgICAgICAgKSxcbiAgICAgICAgLyogQF9fUFVSRV9fICovIGUxKFxuICAgICAgICAgIFwibGluZWFyR3JhZGllbnRcIixcbiAgICAgICAgICB7XG4gICAgICAgICAgICBpZDogXCJwYWludDJfbGluZWFyXCIsXG4gICAgICAgICAgICB4MTogXCI0NC40NjA2XCIsXG4gICAgICAgICAgICB5MTogXCIyNy4zMzgzXCIsXG4gICAgICAgICAgICB4MjogXCIxMTQuODIxXCIsXG4gICAgICAgICAgICB5MjogXCIyNy4zMzgzXCIsXG4gICAgICAgICAgICBncmFkaWVudFVuaXRzOiBcInVzZXJTcGFjZU9uVXNlXCIsXG4gICAgICAgICAgICBjaGlsZHJlbjogW1xuICAgICAgICAgICAgICAvKiBAX19QVVJFX18gKi8gYyhcInN0b3BcIiwgeyBzdG9wQ29sb3I6IFwiIzkxMkE3M1wiIH0pLFxuICAgICAgICAgICAgICAvKiBAX19QVVJFX18gKi8gYyhcInN0b3BcIiwgeyBvZmZzZXQ6IFwiMC4xN1wiLCBzdG9wQ29sb3I6IFwiI0M2MTY4RFwiIH0pLFxuICAgICAgICAgICAgICAvKiBAX19QVVJFX18gKi8gYyhcInN0b3BcIiwgeyBvZmZzZXQ6IFwiMC41MVwiLCBzdG9wQ29sb3I6IFwiI0YxNzVBRFwiIH0pLFxuICAgICAgICAgICAgICAvKiBAX19QVVJFX18gKi8gYyhcInN0b3BcIiwgeyBvZmZzZXQ6IFwiMC43NlwiLCBzdG9wQ29sb3I6IFwiI0M1OTNDM1wiIH0pLFxuICAgICAgICAgICAgICAvKiBAX19QVVJFX18gKi8gYyhcInN0b3BcIiwgeyBvZmZzZXQ6IFwiMVwiLCBzdG9wQ29sb3I6IFwid2hpdGVcIiwgc3RvcE9wYWNpdHk6IFwiMC41XCIgfSlcbiAgICAgICAgICAgIF1cbiAgICAgICAgICB9XG4gICAgICAgICksXG4gICAgICAgIC8qIEBfX1BVUkVfXyAqLyBlMShcbiAgICAgICAgICBcImxpbmVhckdyYWRpZW50XCIsXG4gICAgICAgICAge1xuICAgICAgICAgICAgaWQ6IFwicGFpbnQzX2xpbmVhclwiLFxuICAgICAgICAgICAgeDE6IFwiNzQuMjQ4NlwiLFxuICAgICAgICAgICAgeTE6IFwiNjYuNTQxMlwiLFxuICAgICAgICAgICAgeDI6IFwiMTEyLjM3OVwiLFxuICAgICAgICAgICAgeTI6IFwiNjYuNTQxMlwiLFxuICAgICAgICAgICAgZ3JhZGllbnRVbml0czogXCJ1c2VyU3BhY2VPblVzZVwiLFxuICAgICAgICAgICAgY2hpbGRyZW46IFtcbiAgICAgICAgICAgICAgLyogQF9fUFVSRV9fICovIGMoXCJzdG9wXCIsIHsgc3RvcENvbG9yOiBcIiM3MkJGNDRcIiB9KSxcbiAgICAgICAgICAgICAgLyogQF9fUFVSRV9fICovIGMoXCJzdG9wXCIsIHsgb2Zmc2V0OiBcIjAuMTlcIiwgc3RvcENvbG9yOiBcIiM5MUM4M0RcIiB9KSxcbiAgICAgICAgICAgICAgLyogQF9fUFVSRV9fICovIGMoXCJzdG9wXCIsIHsgb2Zmc2V0OiBcIjAuMzhcIiwgc3RvcENvbG9yOiBcIiNBQ0QwMzdcIiB9KSxcbiAgICAgICAgICAgICAgLyogQF9fUFVSRV9fICovIGMoXCJzdG9wXCIsIHsgb2Zmc2V0OiBcIjAuNDdcIiwgc3RvcENvbG9yOiBcIiM5OUNBM0JcIiB9KSxcbiAgICAgICAgICAgICAgLyogQF9fUFVSRV9fICovIGMoXCJzdG9wXCIsIHsgb2Zmc2V0OiBcIjAuNlwiLCBzdG9wQ29sb3I6IFwiIzdEQzI0MlwiIH0pLFxuICAgICAgICAgICAgICAvKiBAX19QVVJFX18gKi8gYyhcInN0b3BcIiwgeyBvZmZzZXQ6IFwiMC43MlwiLCBzdG9wQ29sb3I6IFwiIzRGQjg0OFwiIH0pLFxuICAgICAgICAgICAgICAvKiBAX19QVVJFX18gKi8gYyhcInN0b3BcIiwgeyBvZmZzZXQ6IFwiMC44NFwiLCBzdG9wQ29sb3I6IFwiIzI0QUU0RFwiIH0pLFxuICAgICAgICAgICAgICAvKiBAX19QVVJFX18gKi8gYyhcInN0b3BcIiwgeyBvZmZzZXQ6IFwiMC45NFwiLCBzdG9wQ29sb3I6IFwiIzBBQTg1MFwiIH0pLFxuICAgICAgICAgICAgICAvKiBAX19QVVJFX18gKi8gYyhcInN0b3BcIiwgeyBvZmZzZXQ6IFwiMVwiLCBzdG9wQ29sb3I6IFwiIzAwQTY1MVwiIH0pXG4gICAgICAgICAgICBdXG4gICAgICAgICAgfVxuICAgICAgICApLFxuICAgICAgICAvKiBAX19QVVJFX18gKi8gZTEoXG4gICAgICAgICAgXCJsaW5lYXJHcmFkaWVudFwiLFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGlkOiBcInBhaW50NF9saW5lYXJcIixcbiAgICAgICAgICAgIHgxOiBcIjU0LjQyMThcIixcbiAgICAgICAgICAgIHkxOiBcIjU2LjYxNFwiLFxuICAgICAgICAgICAgeDI6IFwiMTAzLjU4OVwiLFxuICAgICAgICAgICAgeTI6IFwiNTYuNjE0XCIsXG4gICAgICAgICAgICBncmFkaWVudFVuaXRzOiBcInVzZXJTcGFjZU9uVXNlXCIsXG4gICAgICAgICAgICBjaGlsZHJlbjogW1xuICAgICAgICAgICAgICAvKiBAX19QVVJFX18gKi8gYyhcInN0b3BcIiwgeyBzdG9wQ29sb3I6IFwiIzAwNzdBQ1wiIH0pLFxuICAgICAgICAgICAgICAvKiBAX19QVVJFX18gKi8gYyhcInN0b3BcIiwgeyBvZmZzZXQ6IFwiMC4yMlwiLCBzdG9wQ29sb3I6IFwiIzAwODNCQlwiIH0pLFxuICAgICAgICAgICAgICAvKiBAX19QVVJFX18gKi8gYyhcInN0b3BcIiwgeyBvZmZzZXQ6IFwiMC40NFwiLCBzdG9wQ29sb3I6IFwiIzAwOTlEQVwiIH0pLFxuICAgICAgICAgICAgICAvKiBAX19QVVJFX18gKi8gYyhcInN0b3BcIiwgeyBvZmZzZXQ6IFwiMC42NVwiLCBzdG9wQ29sb3I6IFwiIzAwQjJERFwiIH0pLFxuICAgICAgICAgICAgICAvKiBAX19QVVJFX18gKi8gYyhcInN0b3BcIiwgeyBvZmZzZXQ6IFwiMC42N1wiLCBzdG9wQ29sb3I6IFwiIzAwQjFEQVwiIH0pLFxuICAgICAgICAgICAgICAvKiBAX19QVVJFX18gKi8gYyhcInN0b3BcIiwgeyBvZmZzZXQ6IFwiMC44M1wiLCBzdG9wQ29sb3I6IFwiIzAwQUNDNlwiIH0pLFxuICAgICAgICAgICAgICAvKiBAX19QVVJFX18gKi8gYyhcInN0b3BcIiwgeyBvZmZzZXQ6IFwiMC45NFwiLCBzdG9wQ29sb3I6IFwiIzAwQUFBOVwiIH0pLFxuICAgICAgICAgICAgICAvKiBAX19QVVJFX18gKi8gYyhcInN0b3BcIiwgeyBvZmZzZXQ6IFwiMVwiLCBzdG9wQ29sb3I6IFwiIzAwQTk5RFwiIH0pXG4gICAgICAgICAgICBdXG4gICAgICAgICAgfVxuICAgICAgICApLFxuICAgICAgICAvKiBAX19QVVJFX18gKi8gZTEoXG4gICAgICAgICAgXCJsaW5lYXJHcmFkaWVudFwiLFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGlkOiBcInBhaW50NV9saW5lYXJcIixcbiAgICAgICAgICAgIHgxOiBcIjYzLjY3NFwiLFxuICAgICAgICAgICAgeTE6IFwiMy41MDgzMVwiLFxuICAgICAgICAgICAgeDI6IFwiNzIuODNcIixcbiAgICAgICAgICAgIHkyOiBcIjcuMzEzNDZcIixcbiAgICAgICAgICAgIGdyYWRpZW50VW5pdHM6IFwidXNlclNwYWNlT25Vc2VcIixcbiAgICAgICAgICAgIGNoaWxkcmVuOiBbXG4gICAgICAgICAgICAgIC8qIEBfX1BVUkVfXyAqLyBjKFwic3RvcFwiLCB7IHN0b3BDb2xvcjogXCIjRjU4MjIwXCIgfSksXG4gICAgICAgICAgICAgIC8qIEBfX1BVUkVfXyAqLyBjKFwic3RvcFwiLCB7IG9mZnNldDogXCIxXCIsIHN0b3BDb2xvcjogXCIjRkNBRjE3XCIgfSlcbiAgICAgICAgICAgIF1cbiAgICAgICAgICB9XG4gICAgICAgICksXG4gICAgICAgIC8qIEBfX1BVUkVfXyAqLyBlMShcbiAgICAgICAgICBcImxpbmVhckdyYWRpZW50XCIsXG4gICAgICAgICAge1xuICAgICAgICAgICAgaWQ6IFwicGFpbnQ2X2xpbmVhclwiLFxuICAgICAgICAgICAgeDE6IFwiOTEuMjExMlwiLFxuICAgICAgICAgICAgeTE6IFwiNTguNzQyM1wiLFxuICAgICAgICAgICAgeDI6IFwiMTE0LjE4NlwiLFxuICAgICAgICAgICAgeTI6IFwiNTguNzQyM1wiLFxuICAgICAgICAgICAgZ3JhZGllbnRVbml0czogXCJ1c2VyU3BhY2VPblVzZVwiLFxuICAgICAgICAgICAgY2hpbGRyZW46IFtcbiAgICAgICAgICAgICAgLyogQF9fUFVSRV9fICovIGMoXCJzdG9wXCIsIHsgc3RvcENvbG9yOiBcIiMwMDhBNEJcIiB9KSxcbiAgICAgICAgICAgICAgLyogQF9fUFVSRV9fICovIGMoXCJzdG9wXCIsIHsgb2Zmc2V0OiBcIjAuMTJcIiwgc3RvcENvbG9yOiBcIiMxNzk0NDlcIiB9KSxcbiAgICAgICAgICAgICAgLyogQF9fUFVSRV9fICovIGMoXCJzdG9wXCIsIHsgb2Zmc2V0OiBcIjAuNTZcIiwgc3RvcENvbG9yOiBcIiM2Q0I4NDJcIiB9KSxcbiAgICAgICAgICAgICAgLyogQF9fUFVSRV9fICovIGMoXCJzdG9wXCIsIHsgb2Zmc2V0OiBcIjAuNzZcIiwgc3RvcENvbG9yOiBcIiM4REM2M0ZcIiB9KSxcbiAgICAgICAgICAgICAgLyogQF9fUFVSRV9fICovIGMoXCJzdG9wXCIsIHsgb2Zmc2V0OiBcIjFcIiwgc3RvcENvbG9yOiBcIiMzMkE0NDNcIiB9KVxuICAgICAgICAgICAgXVxuICAgICAgICAgIH1cbiAgICAgICAgKSxcbiAgICAgICAgLyogQF9fUFVSRV9fICovIGUxKFxuICAgICAgICAgIFwibGluZWFyR3JhZGllbnRcIixcbiAgICAgICAgICB7XG4gICAgICAgICAgICBpZDogXCJwYWludDdfbGluZWFyXCIsXG4gICAgICAgICAgICB4MTogXCI0My4zODUxXCIsXG4gICAgICAgICAgICB5MTogXCIyMy4yMDNcIixcbiAgICAgICAgICAgIHgyOiBcIjgwLjg0MDRcIixcbiAgICAgICAgICAgIHkyOiBcIjIzLjIwM1wiLFxuICAgICAgICAgICAgZ3JhZGllbnRVbml0czogXCJ1c2VyU3BhY2VPblVzZVwiLFxuICAgICAgICAgICAgY2hpbGRyZW46IFtcbiAgICAgICAgICAgICAgLyogQF9fUFVSRV9fICovIGMoXCJzdG9wXCIsIHsgc3RvcENvbG9yOiBcIiNGQ0FGMTdcIiB9KSxcbiAgICAgICAgICAgICAgLyogQF9fUFVSRV9fICovIGMoXCJzdG9wXCIsIHsgb2Zmc2V0OiBcIjFcIiwgc3RvcENvbG9yOiBcIiNGMDRFMjNcIiB9KVxuICAgICAgICAgICAgXVxuICAgICAgICAgIH1cbiAgICAgICAgKSxcbiAgICAgICAgLyogQF9fUFVSRV9fICovIGUxKFxuICAgICAgICAgIFwibGluZWFyR3JhZGllbnRcIixcbiAgICAgICAgICB7XG4gICAgICAgICAgICBpZDogXCJwYWludDhfbGluZWFyXCIsXG4gICAgICAgICAgICB4MTogXCI4Ni4xMTM0XCIsXG4gICAgICAgICAgICB5MTogXCIyNy42MzI0XCIsXG4gICAgICAgICAgICB4MjogXCIxMTguMzc5XCIsXG4gICAgICAgICAgICB5MjogXCIyNy42MzI0XCIsXG4gICAgICAgICAgICBncmFkaWVudFVuaXRzOiBcInVzZXJTcGFjZU9uVXNlXCIsXG4gICAgICAgICAgICBjaGlsZHJlbjogW1xuICAgICAgICAgICAgICAvKiBAX19QVVJFX18gKi8gYyhcInN0b3BcIiwgeyBvZmZzZXQ6IFwiMC4xOVwiLCBzdG9wQ29sb3I6IFwiIzgxMjk5MFwiIH0pLFxuICAgICAgICAgICAgICAvKiBAX19QVVJFX18gKi8gYyhcInN0b3BcIiwgeyBvZmZzZXQ6IFwiMC4zMVwiLCBzdG9wQ29sb3I6IFwiIzg4MkU5MlwiIH0pLFxuICAgICAgICAgICAgICAvKiBAX19QVVJFX18gKi8gYyhcInN0b3BcIiwgeyBvZmZzZXQ6IFwiMC41XCIsIHN0b3BDb2xvcjogXCIjOUMzQjk3XCIgfSksXG4gICAgICAgICAgICAgIC8qIEBfX1BVUkVfXyAqLyBjKFwic3RvcFwiLCB7IG9mZnNldDogXCIwLjcxXCIsIHN0b3BDb2xvcjogXCIjQkM1MDlGXCIgfSksXG4gICAgICAgICAgICAgIC8qIEBfX1BVUkVfXyAqLyBjKFwic3RvcFwiLCB7IG9mZnNldDogXCIwLjk1XCIsIHN0b3BDb2xvcjogXCIjRTg2REFBXCIgfSksXG4gICAgICAgICAgICAgIC8qIEBfX1BVUkVfXyAqLyBjKFwic3RvcFwiLCB7IG9mZnNldDogXCIxXCIsIHN0b3BDb2xvcjogXCIjRjE3M0FDXCIgfSlcbiAgICAgICAgICAgIF1cbiAgICAgICAgICB9XG4gICAgICAgICksXG4gICAgICAgIC8qIEBfX1BVUkVfXyAqLyBlMShcbiAgICAgICAgICBcImxpbmVhckdyYWRpZW50XCIsXG4gICAgICAgICAge1xuICAgICAgICAgICAgaWQ6IFwicGFpbnQ5X2xpbmVhclwiLFxuICAgICAgICAgICAgeDE6IFwiNDQuNTQ3NFwiLFxuICAgICAgICAgICAgeTE6IFwiNTEuNjc4NVwiLFxuICAgICAgICAgICAgeDI6IFwiODUuODkwNlwiLFxuICAgICAgICAgICAgeTI6IFwiNTEuNjc4NVwiLFxuICAgICAgICAgICAgZ3JhZGllbnRVbml0czogXCJ1c2VyU3BhY2VPblVzZVwiLFxuICAgICAgICAgICAgY2hpbGRyZW46IFtcbiAgICAgICAgICAgICAgLyogQF9fUFVSRV9fICovIGMoXCJzdG9wXCIsIHsgc3RvcENvbG9yOiBcIiMwMDg5Q0ZcIiwgc3RvcE9wYWNpdHk6IFwiMC45XCIgfSksXG4gICAgICAgICAgICAgIC8qIEBfX1BVUkVfXyAqLyBjKFwic3RvcFwiLCB7IG9mZnNldDogXCIxXCIsIHN0b3BDb2xvcjogXCIjMDA1NEE2XCIgfSlcbiAgICAgICAgICAgIF1cbiAgICAgICAgICB9XG4gICAgICAgICksXG4gICAgICAgIC8qIEBfX1BVUkVfXyAqLyBlMShcbiAgICAgICAgICBcImxpbmVhckdyYWRpZW50XCIsXG4gICAgICAgICAge1xuICAgICAgICAgICAgaWQ6IFwicGFpbnQxMF9saW5lYXJcIixcbiAgICAgICAgICAgIHgxOiBcIjgzLjExMzRcIixcbiAgICAgICAgICAgIHkxOiBcIjcxLjM2OVwiLFxuICAgICAgICAgICAgeDI6IFwiNzEuMDkzOVwiLFxuICAgICAgICAgICAgeTI6IFwiNjguMjQyOFwiLFxuICAgICAgICAgICAgZ3JhZGllbnRVbml0czogXCJ1c2VyU3BhY2VPblVzZVwiLFxuICAgICAgICAgICAgY2hpbGRyZW46IFtcbiAgICAgICAgICAgICAgLyogQF9fUFVSRV9fICovIGMoXCJzdG9wXCIsIHsgc3RvcENvbG9yOiBcIiM5QUNBM0NcIiB9KSxcbiAgICAgICAgICAgICAgLyogQF9fUFVSRV9fICovIGMoXCJzdG9wXCIsIHsgb2Zmc2V0OiBcIjAuMzRcIiwgc3RvcENvbG9yOiBcIiM3QUMzNDBcIiB9KSxcbiAgICAgICAgICAgICAgLyogQF9fUFVSRV9fICovIGMoXCJzdG9wXCIsIHsgb2Zmc2V0OiBcIjFcIiwgc3RvcENvbG9yOiBcIiMzM0I0NEFcIiB9KVxuICAgICAgICAgICAgXVxuICAgICAgICAgIH1cbiAgICAgICAgKSxcbiAgICAgICAgLyogQF9fUFVSRV9fICovIGUxKFxuICAgICAgICAgIFwibGluZWFyR3JhZGllbnRcIixcbiAgICAgICAgICB7XG4gICAgICAgICAgICBpZDogXCJwYWludDExX2xpbmVhclwiLFxuICAgICAgICAgICAgeDE6IFwiNjYuMTcyN1wiLFxuICAgICAgICAgICAgeTE6IFwiMi4zNTc3N1wiLFxuICAgICAgICAgICAgeDI6IFwiOTAuOTIxOVwiLFxuICAgICAgICAgICAgeTI6IFwiNS44NTgxM1wiLFxuICAgICAgICAgICAgZ3JhZGllbnRVbml0czogXCJ1c2VyU3BhY2VPblVzZVwiLFxuICAgICAgICAgICAgY2hpbGRyZW46IFtcbiAgICAgICAgICAgICAgLyogQF9fUFVSRV9fICovIGMoXCJzdG9wXCIsIHsgc3RvcENvbG9yOiBcIiNGREI1MTVcIiB9KSxcbiAgICAgICAgICAgICAgLyogQF9fUFVSRV9fICovIGMoXCJzdG9wXCIsIHsgb2Zmc2V0OiBcIjAuMzZcIiwgc3RvcENvbG9yOiBcIiNGRkQxMDBcIiB9KSxcbiAgICAgICAgICAgICAgLyogQF9fUFVSRV9fICovIGMoXCJzdG9wXCIsIHsgb2Zmc2V0OiBcIjAuNThcIiwgc3RvcENvbG9yOiBcIiNGRkM5MDdcIiB9KSxcbiAgICAgICAgICAgICAgLyogQF9fUFVSRV9fICovIGMoXCJzdG9wXCIsIHsgb2Zmc2V0OiBcIjAuN1wiLCBzdG9wQ29sb3I6IFwiI0ZGQzIwRVwiIH0pLFxuICAgICAgICAgICAgICAvKiBAX19QVVJFX18gKi8gYyhcInN0b3BcIiwgeyBvZmZzZXQ6IFwiMC44N1wiLCBzdG9wQ29sb3I6IFwiI0ZCQTYxN1wiIH0pLFxuICAgICAgICAgICAgICAvKiBAX19QVVJFX18gKi8gYyhcInN0b3BcIiwgeyBvZmZzZXQ6IFwiMVwiLCBzdG9wQ29sb3I6IFwiI0Y3OEUxRVwiIH0pXG4gICAgICAgICAgICBdXG4gICAgICAgICAgfVxuICAgICAgICApLFxuICAgICAgICAvKiBAX19QVVJFX18gKi8gZTEoXG4gICAgICAgICAgXCJsaW5lYXJHcmFkaWVudFwiLFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGlkOiBcInBhaW50MTJfbGluZWFyXCIsXG4gICAgICAgICAgICB4MTogXCI3Mi42MDc5XCIsXG4gICAgICAgICAgICB5MTogXCI3Mi4yNjAxXCIsXG4gICAgICAgICAgICB4MjogXCI3OC44MTVcIixcbiAgICAgICAgICAgIHkyOiBcIjY2LjAxNjlcIixcbiAgICAgICAgICAgIGdyYWRpZW50VW5pdHM6IFwidXNlclNwYWNlT25Vc2VcIixcbiAgICAgICAgICAgIGNoaWxkcmVuOiBbXG4gICAgICAgICAgICAgIC8qIEBfX1BVUkVfXyAqLyBjKFwic3RvcFwiLCB7IHN0b3BDb2xvcjogXCIjQkFENTMyXCIgfSksXG4gICAgICAgICAgICAgIC8qIEBfX1BVUkVfXyAqLyBjKFwic3RvcFwiLCB7IG9mZnNldDogXCIwLjAzXCIsIHN0b3BDb2xvcjogXCIjQjFEMzM0XCIsIHN0b3BPcGFjaXR5OiBcIjAuOTNcIiB9KSxcbiAgICAgICAgICAgICAgLyogQF9fUFVSRV9fICovIGMoXCJzdG9wXCIsIHsgb2Zmc2V0OiBcIjAuMTFcIiwgc3RvcENvbG9yOiBcIiM5NENDMzlcIiwgc3RvcE9wYWNpdHk6IFwiMC43MlwiIH0pLFxuICAgICAgICAgICAgICAvKiBAX19QVVJFX18gKi8gYyhcInN0b3BcIiwgeyBvZmZzZXQ6IFwiMC4yMVwiLCBzdG9wQ29sb3I6IFwiIzdBQzUzRFwiLCBzdG9wT3BhY2l0eTogXCIwLjUyXCIgfSksXG4gICAgICAgICAgICAgIC8qIEBfX1BVUkVfXyAqLyBjKFwic3RvcFwiLCB7IG9mZnNldDogXCIwLjMxXCIsIHN0b3BDb2xvcjogXCIjNjRDMDQxXCIsIHN0b3BPcGFjaXR5OiBcIjAuMzZcIiB9KSxcbiAgICAgICAgICAgICAgLyogQF9fUFVSRV9fICovIGMoXCJzdG9wXCIsIHsgb2Zmc2V0OiBcIjAuNDFcIiwgc3RvcENvbG9yOiBcIiM1MkJDNDRcIiwgc3RvcE9wYWNpdHk6IFwiMC4yM1wiIH0pLFxuICAgICAgICAgICAgICAvKiBAX19QVVJFX18gKi8gYyhcInN0b3BcIiwgeyBvZmZzZXQ6IFwiMC41M1wiLCBzdG9wQ29sb3I6IFwiIzQ0Qjg0N1wiLCBzdG9wT3BhY2l0eTogXCIwLjEzXCIgfSksXG4gICAgICAgICAgICAgIC8qIEBfX1BVUkVfXyAqLyBjKFwic3RvcFwiLCB7IG9mZnNldDogXCIwLjY1XCIsIHN0b3BDb2xvcjogXCIjM0FCNjQ5XCIsIHN0b3BPcGFjaXR5OiBcIjAuMDZcIiB9KSxcbiAgICAgICAgICAgICAgLyogQF9fUFVSRV9fICovIGMoXCJzdG9wXCIsIHsgb2Zmc2V0OiBcIjAuNzlcIiwgc3RvcENvbG9yOiBcIiMzNUI0NEFcIiwgc3RvcE9wYWNpdHk6IFwiMC4wMVwiIH0pLFxuICAgICAgICAgICAgICAvKiBAX19QVVJFX18gKi8gYyhcInN0b3BcIiwgeyBvZmZzZXQ6IFwiMVwiLCBzdG9wQ29sb3I6IFwiIzMzQjQ0QVwiLCBzdG9wT3BhY2l0eTogXCIwXCIgfSlcbiAgICAgICAgICAgIF1cbiAgICAgICAgICB9XG4gICAgICAgICksXG4gICAgICAgIC8qIEBfX1BVUkVfXyAqLyBlMShcbiAgICAgICAgICBcImxpbmVhckdyYWRpZW50XCIsXG4gICAgICAgICAge1xuICAgICAgICAgICAgaWQ6IFwicGFpbnQxM19saW5lYXJcIixcbiAgICAgICAgICAgIHgxOiBcIjY2LjM2ODdcIixcbiAgICAgICAgICAgIHkxOiBcIjguOTE5NzVcIixcbiAgICAgICAgICAgIHgyOiBcIjg5Ljc2N1wiLFxuICAgICAgICAgICAgeTI6IFwiMi42MTA3NFwiLFxuICAgICAgICAgICAgZ3JhZGllbnRVbml0czogXCJ1c2VyU3BhY2VPblVzZVwiLFxuICAgICAgICAgICAgY2hpbGRyZW46IFtcbiAgICAgICAgICAgICAgLyogQF9fUFVSRV9fICovIGMoXCJzdG9wXCIsIHsgc3RvcENvbG9yOiBcIiNGMTVGMjJcIiwgc3RvcE9wYWNpdHk6IFwiMC44XCIgfSksXG4gICAgICAgICAgICAgIC8qIEBfX1BVUkVfXyAqLyBjKFwic3RvcFwiLCB7IG9mZnNldDogXCIwLjIxXCIsIHN0b3BDb2xvcjogXCIjRjY4NjFBXCIsIHN0b3BPcGFjaXR5OiBcIjAuNDhcIiB9KSxcbiAgICAgICAgICAgICAgLyogQF9fUFVSRV9fICovIGMoXCJzdG9wXCIsIHsgb2Zmc2V0OiBcIjAuMzlcIiwgc3RvcENvbG9yOiBcIiNGQUE1MTRcIiwgc3RvcE9wYWNpdHk6IFwiMC4yMlwiIH0pLFxuICAgICAgICAgICAgICAvKiBAX19QVVJFX18gKi8gYyhcInN0b3BcIiwgeyBvZmZzZXQ6IFwiMC41MlwiLCBzdG9wQ29sb3I6IFwiI0ZEQjkxMFwiLCBzdG9wT3BhY2l0eTogXCIwLjA2XCIgfSksXG4gICAgICAgICAgICAgIC8qIEBfX1BVUkVfXyAqLyBjKFwic3RvcFwiLCB7IG9mZnNldDogXCIwLjU5XCIsIHN0b3BDb2xvcjogXCIjRkVDMDBGXCIsIHN0b3BPcGFjaXR5OiBcIjBcIiB9KSxcbiAgICAgICAgICAgICAgLyogQF9fUFVSRV9fICovIGMoXCJzdG9wXCIsIHsgb2Zmc2V0OiBcIjAuNjVcIiwgc3RvcENvbG9yOiBcIiNGREJDMTBcIiwgc3RvcE9wYWNpdHk6IFwiMC4wNFwiIH0pLFxuICAgICAgICAgICAgICAvKiBAX19QVVJFX18gKi8gYyhcInN0b3BcIiwgeyBvZmZzZXQ6IFwiMC43NVwiLCBzdG9wQ29sb3I6IFwiI0ZDQjMxM1wiLCBzdG9wT3BhY2l0eTogXCIwLjE1XCIgfSksXG4gICAgICAgICAgICAgIC8qIEBfX1BVUkVfXyAqLyBjKFwic3RvcFwiLCB7IG9mZnNldDogXCIwLjg4XCIsIHN0b3BDb2xvcjogXCIjRkFBNDE4XCIsIHN0b3BPcGFjaXR5OiBcIjAuMzJcIiB9KSxcbiAgICAgICAgICAgICAgLyogQF9fUFVSRV9fICovIGMoXCJzdG9wXCIsIHsgb2Zmc2V0OiBcIjFcIiwgc3RvcENvbG9yOiBcIiNGNzk0MURcIiwgc3RvcE9wYWNpdHk6IFwiMC41XCIgfSlcbiAgICAgICAgICAgIF1cbiAgICAgICAgICB9XG4gICAgICAgICksXG4gICAgICAgIC8qIEBfX1BVUkVfXyAqLyBlMShcbiAgICAgICAgICBcImxpbmVhckdyYWRpZW50XCIsXG4gICAgICAgICAge1xuICAgICAgICAgICAgaWQ6IFwicGFpbnQxNF9saW5lYXJcIixcbiAgICAgICAgICAgIHgxOiBcIjQ0LjQ2MDdcIixcbiAgICAgICAgICAgIHkxOiBcIjI5Ljk4MTRcIixcbiAgICAgICAgICAgIHgyOiBcIjExNC44MjJcIixcbiAgICAgICAgICAgIHkyOiBcIjI5Ljk4MTRcIixcbiAgICAgICAgICAgIGdyYWRpZW50VW5pdHM6IFwidXNlclNwYWNlT25Vc2VcIixcbiAgICAgICAgICAgIGNoaWxkcmVuOiBbXG4gICAgICAgICAgICAgIC8qIEBfX1BVUkVfXyAqLyBjKFwic3RvcFwiLCB7IHN0b3BDb2xvcjogXCIjRjRFQUU1XCIsIHN0b3BPcGFjaXR5OiBcIjAuMDZcIiB9KSxcbiAgICAgICAgICAgICAgLyogQF9fUFVSRV9fICovIGMoXCJzdG9wXCIsIHsgb2Zmc2V0OiBcIjAuMTlcIiwgc3RvcENvbG9yOiBcIiNEQUFGQUNcIiwgc3RvcE9wYWNpdHk6IFwiMC4zM1wiIH0pLFxuICAgICAgICAgICAgICAvKiBAX19QVVJFX18gKi8gYyhcInN0b3BcIiwgeyBvZmZzZXQ6IFwiMC42OFwiLCBzdG9wQ29sb3I6IFwiIzk4MUIxRVwiIH0pXG4gICAgICAgICAgICBdXG4gICAgICAgICAgfVxuICAgICAgICApLFxuICAgICAgICAvKiBAX19QVVJFX18gKi8gZTEoXG4gICAgICAgICAgXCJsaW5lYXJHcmFkaWVudFwiLFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGlkOiBcInBhaW50MTVfbGluZWFyXCIsXG4gICAgICAgICAgICB4MTogXCI0OS40MzI0XCIsXG4gICAgICAgICAgICB5MTogXCI1Ni42MTRcIixcbiAgICAgICAgICAgIHgyOiBcIjExNC4yMjVcIixcbiAgICAgICAgICAgIHkyOiBcIjU2LjYxNFwiLFxuICAgICAgICAgICAgZ3JhZGllbnRVbml0czogXCJ1c2VyU3BhY2VPblVzZVwiLFxuICAgICAgICAgICAgY2hpbGRyZW46IFtcbiAgICAgICAgICAgICAgLyogQF9fUFVSRV9fICovIGMoXCJzdG9wXCIsIHsgb2Zmc2V0OiBcIjAuODVcIiwgc3RvcENvbG9yOiBcIndoaXRlXCIsIHN0b3BPcGFjaXR5OiBcIjBcIiB9KSxcbiAgICAgICAgICAgICAgLyogQF9fUFVSRV9fICovIGMoXCJzdG9wXCIsIHsgb2Zmc2V0OiBcIjAuOTFcIiwgc3RvcENvbG9yOiBcIiNENkQ3RDhcIiwgc3RvcE9wYWNpdHk6IFwiMC4yM1wiIH0pLFxuICAgICAgICAgICAgICAvKiBAX19QVVJFX18gKi8gYyhcInN0b3BcIiwgeyBvZmZzZXQ6IFwiMC45N1wiLCBzdG9wQ29sb3I6IFwiI0I0QjZCOFwiLCBzdG9wT3BhY2l0eTogXCIwLjQzXCIgfSksXG4gICAgICAgICAgICAgIC8qIEBfX1BVUkVfXyAqLyBjKFwic3RvcFwiLCB7IG9mZnNldDogXCIxXCIsIHN0b3BDb2xvcjogXCIjQTdBOUFDXCIsIHN0b3BPcGFjaXR5OiBcIjAuNVwiIH0pXG4gICAgICAgICAgICBdXG4gICAgICAgICAgfVxuICAgICAgICApXG4gICAgICBdIH0pXG4gICAgXVxuICB9XG4pLCBQUiA9ICgpID0+IC8qIEBfX1BVUkVfXyAqLyBlMShcbiAgXCJzdmdcIixcbiAge1xuICAgIHdpZHRoOiBcIjIxOVwiLFxuICAgIGhlaWdodDogXCI2M1wiLFxuICAgIHZpZXdCb3g6IFwiMCAwIDIxOSA2M1wiLFxuICAgIGZpbGw6IFwibm9uZVwiLFxuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgeG1sbnNYbGluazogXCJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rXCIsXG4gICAgY2hpbGRyZW46IFtcbiAgICAgIC8qIEBfX1BVUkVfXyAqLyBjKFwicmVjdFwiLCB7IHdpZHRoOiBcIjIxOVwiLCBoZWlnaHQ6IFwiNjNcIiwgZmlsbDogXCJ1cmwoI3BhdHRlcm4wKVwiIH0pLFxuICAgICAgLyogQF9fUFVSRV9fICovIGUxKFwiZGVmc1wiLCB7IGNoaWxkcmVuOiBbXG4gICAgICAgIC8qIEBfX1BVUkVfXyAqLyBjKFxuICAgICAgICAgIFwicGF0dGVyblwiLFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGlkOiBcInBhdHRlcm4wXCIsXG4gICAgICAgICAgICBwYXR0ZXJuQ29udGVudFVuaXRzOiBcIm9iamVjdEJvdW5kaW5nQm94XCIsXG4gICAgICAgICAgICB3aWR0aDogXCIxXCIsXG4gICAgICAgICAgICBoZWlnaHQ6IFwiMVwiLFxuICAgICAgICAgICAgY2hpbGRyZW46IC8qIEBfX1BVUkVfXyAqLyBjKFxuICAgICAgICAgICAgICBcInVzZVwiLFxuICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgeGxpbmtIcmVmOiBcIiNpbWFnZTBfNjYyMl85MTI2M1wiLFxuICAgICAgICAgICAgICAgIHRyYW5zZm9ybTogXCJtYXRyaXgoMC4wMDMzODQzNyAwIDAgMC4wMTE3NjQ3IC0wLjAwNzY1NTEyIDApXCJcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgKVxuICAgICAgICAgIH1cbiAgICAgICAgKSxcbiAgICAgICAgLyogQF9fUFVSRV9fICovIGMoXG4gICAgICAgICAgXCJpbWFnZVwiLFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGlkOiBcImltYWdlMF82NjIyXzkxMjYzXCIsXG4gICAgICAgICAgICB3aWR0aDogXCIzMDBcIixcbiAgICAgICAgICAgIGhlaWdodDogXCI4NVwiLFxuICAgICAgICAgICAgeGxpbmtIcmVmOiBcImRhdGE6aW1hZ2UvcG5nO2Jhc2U2NCxpVkJPUncwS0dnb0FBQUFOU1VoRVVnQUFBU3dBQUFCVkNBWUFBQUR6SjluSUFBQUtxbWxEUTFCSlEwTWdVSEp2Wm1sc1pRQUFTSW1WbHdkUWs5a1dnTy8vLytra3RJUUlTQW05Q2RJSklDWDAwSHV6RVpJQW9ZUVlDQ2gyWlhFRjE0S0tDQ2lDTG9nb3VDcDFMWUFvdGtXeEYzUkJGaEZsWFN6WVVIay9NQVIzMzd6MzVwMlpNK2ViazNQUHVlZk92Wm56QTBDUjU0aEVxYkE4QUduQ1RIR290eHNqT2lhV2dSOENPRUFHSklBQUNvZWJJV0lGQi9zRFZHYnMzK1g5WFFCTjJsdW1rN24rL2ZmL0tnbzhmZ1lYQUNnWTVYaGVCamNONVZPb3Z1Q0t4SmtBSUFkUXYwNTJwbWlTTzFHbWlkRU5vbngva2hPbmVXU1M0NmNZQTZaaXdrUGRVYVlCUUNCek9PSkVBTWdNMU0vSTRpYWllY2l1S0pzTGVRSWh5aUtVbmRQUzBua29IMGZaRUkxQmZlVEovTXo0Ny9Jay9pMW52RFFuaDVNbzVlbGVwb1RnSWNnUXBYSlcvSi9IOGI4bExWVXlVME1mVlhLUzJDY1V0WXJvbWQxUFNmZVRzakErTUdpR0JieXArQ2xPa3ZoRXpEQTN3ejEyaG5rY0R6L3AydFJBL3hsT0VIaXhwWGt5MmVFenpNL3dESnRoY1hxb3RGYUMySjAxd3h6eGJGMUpTb1RVbjhSblMvUG5KSVZIelhDV0lESndoak5Td3Z4bVk5eWxmckVrVkxwL3Z0RGJiYmF1bDdUM3RJenYraFd3cFdzems4SjlwTDF6WnZmUEY3Sm1jMlpFUy9mRzQzdDR6c1pFU09ORm1XN1NXcUxVWUdrOFA5VmI2cy9JQ3BPdXpVUXY1T3phWU9rWkpuTjhnMmNZK0FOdndBQSt3QU9Fb3RZYW9OMW44cGRuVGpiaW5pNWFJUllrSm1VeVdPZ0w0elBZUXE3WlBJYWx1YVVWQUpQdmRmbzZ2S1ZQdlVPSWZtWFd0K1kyQVBhL285QTI2d3ZwQWFBbEZ3RDVvN00rZlF2MEt1MERvTDJkS3hGblRmdW0zaElXL1JlUUF6U2dBalNBRGpBRXBzQVMyQUpINEFvOGdTOElBdUVnQml3QlhKQUUwb0FZWklOVllEM0lBd1ZnTzlnTlNrQTVPQWdPZzJQZ0JHZ0NwMEU3dUFpdWdodmdEbmdFK3NBZ2VBbEd3WHN3RGtFUUhxSkFWRWdGMG9UMElCUElFbUpDenBBbjVBK0ZRakZRSEpRSUNTRUp0QXJhQ0JWQWhWQUpWQUhWUUw5QUxWQTdkQm5xZ1I1QS9kQXc5QWI2RENNd0dhYkI2ckErUEI5bXdpellEdzZIRjhPSjhESTRCODZGdDhMRmNDVjhGRzZFMitHcjhCMjREMzRKanlFQWtVSG9pQlppaWpBUmR5UUlpVVVTRURHeUJzbEhpcEJLcEE1cFJicVFXMGdmTW9KOHd1QXdWQXdEWTRweHhQaGdJakJjekRMTUdzd1dUQW5tTUtZUjA0bTVoZW5IakdLK1lTbFlOYXdKMWdITHhrWmpFN0haMkR4c0ViWUsyNEM5Z0wyREhjUyt4K0Z3ZEp3QnpnN25nNHZCSmVOVzRyYmc5dUhxY1cyNEh0d0FiZ3lQeDZ2Z1RmQk8rQ0E4QjUrSno4UHZ4Ui9GbjhQZnhBL2lQeEprQ0pvRVM0SVhJWllnSkd3Z0ZCR09FTTRTYmhLR0NPTkVlYUllMFlFWVJPUVJWeEMzRVE4Ulc0blhpWVBFY1pJQ3lZRGtSQW9uSlpQV2s0cEpkYVFMcEY3U1d4a1pHVzBaZTVrUUdZSE1PcGxpbWVNeWwyVDZaVDZSRmNuR1pIZnlJcktFdkpWY1RXNGpQeUMvcFZBbytoUlhTaXdsazdLVlVrTTVUM2xDK1NoTGxUV1RaY3Z5Wk5mS2xzbzJ5dDZVZlNWSGxOT1RZOGt0a2N1Uks1STdLWGRkYmtTZUtLOHY3eTdQa1Y4alh5cmZJbjlQZmt5QnFtQ2hFS1NRcHJCRjRZakNaWVhuaW5oRmZVVlBSWjVpcnVKQnhmT0tBMVNFcWtOMXAzS3BHNm1IcUJlb2d6UWN6WURHcGlYVENtakhhTjIwVVNWRkpXdWxTS1hsU3FWS1o1VDY2QWhkbjg2bXA5SzMwVS9RNzlJL3oxR2Z3NXJEbjdONVR0MmNtM00rS005VmRsWG1LK2NyMXl2ZlVmNnN3bER4VkVsUjJhSFNwUEpZRmFOcXJCcWltcTI2WC9XQzZzaGMybHpIdWR5NStYTlB6SDJvQnFzWnE0V3FyVlE3cUhaTmJVeGRROTFiWGFTK1YvMjgrb2dHWGNOVkkxbGpsOFpaaldGTnFxYXpwa0J6bCtZNXpSY01KUWFMa2Nvb1puUXlSclhVdEh5MEpGb1ZXdDFhNDlvRzJoSGFHN1RydFIvcmtIU1lPZ2s2dTNRNmRFWjFOWFVEZEZmcDF1bysxQ1BxTWZXUzlQYm9kZWw5MERmUWo5TGZwTitrLzl4QTJZQnRrR05RYTlCclNERjBNVnhtV0dsNDJ3aG54RFJLTWRwbmRNTVlOcll4VGpJdU5iNXVBcHZZbWdoTTlwbjB6TVBPczU4bm5GYzU3NTRwMlpSbG1tVmFhOXB2Umpmek45dGcxbVQyYXI3dS9OajVPK1ozemY5bWJtT2VhbjdJL0pHRm9vV3Z4UWFMVm9zM2xzYVdYTXRTeTl0V0ZDc3ZxN1ZXelZhdnJVMnMrZGI3cmUvYlVHMENiRGJaZE5oOHRiV3pGZHZXMlE3YjZkckYyWlhaM1dQU21NSE1MY3hMOWxoN04vdTE5cWZ0UHpuWU9tUTZuSEQ0eTlIVU1jWHhpT1B6QlFZTCtBc09MUmh3MG5iaU9GVTQ5VGt6bk9PY0R6ajN1V2k1Y0Z3cVhaNjY2cmp5WEt0Y2gxaEdyR1RXVWRZck4zTTNzVnVEMndkM0IvZlY3bTBlaUllM1I3NUh0NmVpWjRSbmllY1RMMjJ2Uks5YXIxRnZHKytWM20wK1dCOC9ueDArOTlqcWJDNjdoajNxYStlNzJyZlRqK3dYNWxmaTk5VGYyRi9zM3hvQUIvZ0c3QXpvRGRRTEZBWTJCWUVnZHRET29NZkJCc0hMZ244TndZVUVoNVNHUEF1MUNGMFYyaFZHRFZzYWRpVHNmYmhiK0xid1J4R0dFWktJamtpNXlFV1JOWkVmb2p5aUNxUDZvdWRIcjQ2K0dxTWFJNGhwanNYSFJzWld4WTR0OUZ5NGUrSGdJcHRGZVl2dUxqWll2SHp4NVNXcVMxS1huRmtxdDVTejlHUWNOaTRxN2tqY0YwNFFwNUl6RnMrT0w0c2Y1YnB6OTNCZjhseDV1M2pEZkNkK0lYOG93U21oTU9GNW9sUGl6c1RoSkpla29xUVJnYnVnUlBBNjJTZTVQUGxEU2xCS2RjcEVhbFJxZlJvaExTNnRSYWdvVEJGMnBtdWtMMC92RVptSThrUjl5eHlXN1Y0Mkt2WVRWMlZBR1lzem1qTnA2R0IwVFdJbytVSFNuK1djVlpyMU1Uc3krK1J5aGVYQzVkZFdHSy9ZdkdJb3h5dm41NVdZbGR5VkhhdTBWcTFmMWIrYXRicGlEYlFtZmszSFdwMjF1V3NIMTNtdk83eWV0RDVsL1c4YnpEY1VibmkzTVdwamE2NTY3cnJjZ1IrOGY2ak5rODBUNTkzYjVMaXAvRWZNajRJZnV6ZGJiZDY3K1ZzK0wvOUtnWGxCVWNHWExkd3RWMzZ5K0tuNHA0bXRDVnU3dDlsdTI3OGR0MTI0L2U0T2x4MkhDeFVLY3dvSGRnYnNiTnpGMkpXLzY5M3VwYnN2RjFrWGxlOGg3WkhzNlN2MkwyN2VxN3QzKzk0dkpVa2xkMHJkU3V2TDFNbzJsMzNZeDl0M2M3L3IvcnB5OWZLQzhzOEhCQWZ1VjNoWE5GYnFWeFlkeEIzTU92anNVT1NocnArWlA5ZFVxVllWVkgydEZsYjNIUTQ5M0ZsalYxTnpSTzNJdGxxNFZsSTdmSFRSMFJ2SFBJNDExNW5XVmRUVDZ3dU9nK09TNHk5K2lmdmw3Z20vRXgwbm1TZnJUdW1kS211Z051UTNRbzByR2tlYmtwcjZtbU9hZTFwOFd6cGFIVnNiZmpYN3RmcTAxdW5TTTBwbnRwMGxuYzA5TzNFdTU5eFltNmh0cEQyeGZhQmphY2VqODlIbmIzZUdkSFpmOEx0dzZhTFh4Zk5kcks1emw1d3VuYjdzY0xubEN2TkswMVhicTQzWGJLNDEvR2J6VzBPM2JYZmpkYnZyelRmc2I3VDJMT2c1ZTlQbFp2c3RqMXNYYjdOdlg3MFRlS2ZuYnNUZCsvY1czZXU3ejd2Ly9FSHFnOWNQc3g2T1AxclhpKzNOZnl6L3VPaUoycFBLMzQxK3IrK3o3VHZUNzlGLzdXblkwMGNEM0lHWGYyVDg4V1V3OXhubFdkR1E1bEROYzh2bnA0ZTlobSs4V1BoaThLWG81ZmhJM3A4S2Y1YTlNbngxNmkvWHY2Nk5SbzhPdmhhL25uaXo1YTNLMitwMzF1ODZ4b0xIbnJ4UGV6LytJZitqeXNmRG41aWZ1ajVIZlI0YXovNkMvMUw4MWVocjZ6ZS9iNzBUYVJNVElvNllNelVLSUtqQ0NRa0F2S2tHZ0JJREFQVUdBS1NGMC9QMGxFRFQzd0JUQlA0VFQ4L2NVMklMUUowckFFRnRBSGlzQTZBR3RmcW9KYU02T1JLRnV3TFl5a3FxTTdQdjFKdytLUnJvZDBKMk1NQi9yZWhWZHhzRi81RHBHZjY3ZmYvVEFtbld2OWwvQVFxVkJpZnZieXd1QUFBQU9HVllTV1pOVFFBcUFBQUFDQUFCaDJrQUJBQUFBQUVBQUFBYUFBQUFBQUFDb0FJQUJBQUFBQUVBQUFFc29BTUFCQUFBQUFFQUFBQlZBQUFBQU1RMjhjWUFBQ1N2U1VSQlZIZ0I3VjBMZkZURjFUOXpkMGxRS3I2citFQ3NxTFcrUVI1SnRLS2ZxRVVldGtJSUpGQUZRZ0w0cUZidDE0ZUsvVDQvUC9WcmZiUWtKQUdsa29RRUtncG9pN1ZXUlpLQVFsV3NXclgxL1lZVzBTS1E3Tjd6L1dkRHlHWjM3KzdNbmJ1YkRiM3oreVY3Nzh3NVo4NmNPL2ZjTTJmT3pCRDV5WmVBTHdGZkFyNEVmQW40RXZBbDRFdkFsNEF2QVY4Q3ZnUjhDZmdTOENYZ1M4Q1hRSFpMUUhRN2UyZGNmZ0QxYWNzakVzY1I4d0FTOUEzdzFBOS9CeExUQVNURVlmajlDdm1mRXZGSHlQK01XSHlDK3cvSXRqZFNnSjZqdGZWYnU3MGRYalB3Mk5JektHUi9FM0xwRDlMNDQ2L1R1S0pDbFdvcUs2c3ZwNkI0ajl2YVhwZzllL2JlSnhzVklmZ3dlNlVFdWtkaEZaU2NBeVYwTVFtK0NDL2tZQThrK3pab2JDQ2JuNEVTK3kydFh3TGwxc1BTWXc4ZFEzWm9OTnB3UHBUeGVaRExnVjFid050cGJOSFh1dVlsdnF1b3Fua0hEL2FZM2FXZk12SExnc1JMZ3VueDh2TFNKeEpqK2JtK0JMSmZBcGxUV0tkTjZVTmY0NmxRVWxmaVpmeFcra1REWWREL0V4VGlFdHExYXpsdFhMWXRmWFVaVWw1VmZ3aFJZQ0tVMUdSWWtyQXlvYW9jazJ1RjFZVWlFMjBXelBXQ2VzMHJMNy9pelM2Ri9vMHZnU3lYUUpJWHhDUE9oeFVmUlphNGppd3V4ZnVvWkNGNFZITTdHZVlLREtmdXBPYjZkejJsYTBKcytmS0RLZEI2RStReEN5b3FSNDJVTndvcnVpNVlYbiswV056cFcxM1JVdkd2czFrQzZWTlkrWlBQSUdIOUJJMmZrQ1VDV0VZaG5rdnI2MTd0Vm41V052NElDaFJ5RVgzMStGQlhXSlZWMVZET0VkK1hXaFZNVGJiRk44NlpPYk5aRGNHSDhpWFFQUkx3WG1GRmhuNzI3WGhoNXNCNnNMcW5XVTYxY2doODNVTmZpcm0wYWZGMko2aTA1SzlxdkJSRHY3c3g5QnZnanI2NndvcnhZV2xVeHc5eE9GVHFPK28xUk9hRFpsUUMzaXFVdk9MUjhGTzlqcGZ5cXV4VFZsS3VJb2gvMTlOKy9DcmxsVnljRVVtdmZxZ2ZyV2hjRFovYXcrNlZsUjZuQXRPb2VoZ2QwT0l5RVFpK1VsbTVvS0FqeC8vMUpaQk5FdkJHWVkwWUVhU0M0cnZocTFvRlJYVmtOalhRZ1pmK3NQMStENTd2eElnMTRBQmpucjFpNlVocWJYc0ZNc0ZzYU9ZU1kyYkRmVzJpSC95TmF5dXJhbTV4VDhQSDlDV1FIZ21ZS3l6cFZHODlFcjRQOFlQMHNKaE9xdUlHeXM5ZFE4TW1IZVo1TFNzYTdvVGUrQVBrRWhPZTRIbE5jUVRkVzFoZFNNMnRxS3Arb3FLaUl1UDhkK0hDdi9FbEVDVUJNNFdWUCtVVUNvaU5HT29NaWFMWnN5NEY1VlBBMmtCRHA1N2dDZU5MbHdab1JjTVN5T1FHVCtpNUlHSm1ZWFZXaU5pdEM0UVZmQmxEeEZNNmMvMHJYd0xkSndIM0NtdDRjUUVKdXdYRG5hOTNIL3NlMVN6RVVSUU1QMDk1VTg0MW9yaDA2VDdVMi80ZGxGV1JFUjFEWkk4c3JIWXVoRGlTTFg1MlhuVjF2aUZiUHJvdkFXTUp1Rk5ZQlNVallWbXR4WEFuODNGVnhrMTJJQ0FRWm1EeDA1US9lWndEUlBKc2hxTTdsNWRESmhjbUIweC9xVmNXVmdlbjhPQWZnSGl0cHZuemEwWjI1UG0vdmdTNlF3Snkxa3d2eWZncXdvelgzcGlZbWNKWW8rZ21yV3FzZ1dXVm1abkhGUHkxVzFndUp3cVQwTGFKbDgrcnFSazZwN1QwdFNSZzJWMTA5bVQ0NVBoa0NnWGErNzZnVml6bjJreTdjamJUaTRzK3p3cm1DNHFPSUR1QTRHSjdmMnFqTDRpc2Z5SiswRjIvekhTRElvSGlsbHdYM040QmhmMFZoUU9iYWZ2T3pmVEtzbitac3FQWHE0Y1VIVTI5Z2k5Z0dIaXdhY1haaWMvenFhbHVsalp2cXhwdVFDUUJaaHpUbWRUanNMUURSelhZaGtwL1B5RHNRV1ZsWlZzMDBMb1BORy95UmVpdlE5cjlyRUorYk9WaWN1ZkUvQUhncFhKNEM4OVUrbWZYVU5QaURjNElCaVV5WnJHUFBRNHoxdWVBeW9td3prL0M3K0dPRkpsM2dKL05VTGliRVNiekV1QitUN3RhbitpMjVXZFMrWE5rM2F2MFlaK0Y2MEhnNzZBVS9IK0M4ZzhCK3pMYThRSkdOVTlpODRLM0hIRmlDdFFWMXVBeCsxTHZ2bitHVUNIWXZUQXhmMG9pOTNocXV2OUxyZGF0WEhvK3NmMEVIcFM3NGJWeVplb0t5MzNncUJveldOTFRQTHRzWnZiR2FoVk1Ia1ZzVFlQaWtSWnZIN1ZXSllGaWZnY3YxMElLYzQwbkMrdlBMam1kYkxvSi9GMkNXbnNucVZtdGlDT3owUTBrY242cjNYL1ZhdWdLbFY5eUJUSkt3UC81WFF0YzM2M0h4K0YrNHAyTHFXWFpqbVJVMUJWV1FmRWlLS3Z2SnlQbVhSazNvUUhyUVcrMzh1QUFoSE1vdFBJQnlKTi8zNFNDT01hNytpS1VTcWlwdGs2TDVvcWxBekh4c0JGeTBWeG1vMVZMT3pEVGl6UnU0cGtxbU9tMHNLTHEvOFdzc3RMcm8rNjcvMUsrU0lKL2lPZHhjdHFZWVhxQUxHc3VyWDN3UFZkMUZCVGZEUDV1ZFlXYkNpbXlEUk12cGpickRucHU4ZHVwd0xYS0M2YnRSOVI2RlhEa243TVZxRVUwRHZoTERDWHZnMXZtVGd5Qk1SU09UMm9LSzY5a0VzelcrbmgwcjNLZ29HenhDSWx3RXpVdmFWR2lXakRwWk9JQXpIMytEanJBQlVvNFRrRE1MZFJjcHo4THRySlJLdFdoVG1TTjhwbXc1cEZYNCtWWWl6Mi8xdEtvUWd3RjFGSlZWVlYvbTZ3SkdMNk5GNEtHQVV2dE9hdVI3NFFTUEdiV3pKbVBkbVowMDFWZXlhWG9Cd2JMbmx6eC9WTjg0UDVIR1ZQNnBUaUFQcDZoRUNEbVJXU0hiNlYxRGU4bzgrZ0VtRi95SThqM1IraEdHWXJKNHkzUUIxZFRTKzJTV0paU2QrVEJKZjFndEw0SlJIUFRPcloycG51SjdMdU5kMUtRdnJXY0lIYURvSEw4SFJwYmpjTDloZWg4VHlqQWRZS3NiUHdKYm03cnpQRHNhaTNVeSswMFp1THZ2S0JZVWJId1JEaHZiOGFEbmdoNm5rYjFNOUhuT1FGeDNJd1pNLzdwQmErdWFFUldLM1JUekJ2ejQvalF5V0ZuOHBSWGtvOW5pcVZaR1E0Qll2b0hmUlVjNkhveVlWaHhYMFFESUthUVJpVnZZSnBLYmY0NXRkVGRFazI5ZmFZa09pZjJPcGZ2Z0diMVZsa3gvNVoyUVlOdXJQMDR0anBYOTg4M3ZBODhtTnI0S3lqNU9YNnhkWXRxZ25YWFZLZW5yQjV0T0FrK0NHK1ZsUnp5Q1o2RlRmcldxWEt1QWpkNzl2VFhBVmRjVTFQenN6YWJidCt0dUZSUVU4S0ExZ0Z0WWZzZUFFNU5DZXcxUU42RWZlQ3p3V3kxdU1ocjBocjBVbHNjWjAvdER4L25rNkJwN3F2U1lDd0NLaWZIOW0zZEg5ZWY2NktTTkFLQzRvL0FPMEViMXlzRWdWMkhZMUp5UjNIK3BEeVlzRk5pY056Zk11TkxiRitHcjlJRXo1UlZMRGROdFRmamkzQUdzamZGRmlXOHQvbTZoUG5KTW0yeE1GbXhmaG5YUTRFUDgxcFpSZk5SV2xyNjl1eXkwaUxCWWl3c0krWGhaVFNOeE5kaVNrVjE5Ym1KeTlLVWU4NkVROG5LUmRDeVMyVWxaOXVJMzRkUDlBWDh5Zy9FSjY0NEZRcHJOdG4rRFdocktpdmVDdDZlaWZ4UlpEYlFIWCt5VVcyMnJkMjI0U1dESXRFQWJwVVZzL1EvdmIxYnRpL0JMK1hXQWtkWDdacVNXMWdpY0Y5WGNLTTdXREVXSE51TFB6T2lvb0s4dHZZbEdqd21qM0w3eWgwU0xuUkVZVzZrbHZybkhNc1RGYXhvbklac3VUdW9GMmtYSHVvMVVGUlZYaEJUb1ZGZVBtUFZnZ1VMdnRrV3dvc2t4R2dWbkZRd3doYS9Cc3lwcWVBOEtZL0VLQVdmQWkzOUw3OTBtSk45SDF3UUx5YmtSUzdQQ3RqZlFOa3A4TmxLRjROK0hkR0U4eWZMai8ySTZLd2sxM2pCN1YrUmJhM0hNS2c1SVZ6ZTVLSHdhWjRMQlRBYnoyNUFRaGpUeklpUlFvK0RESnpzV2drT2M2cWd0dEE4YWgveGRFV1dVUVk1ZlkrRFJYd2NaRHNJc0dpRGZuZ1VySHFISkxlS2tic3ZlSkdrQTdDNTdnb3ZTR25UeUM5K0VBODNzWlhJNGxScVh2d1haWnFQUDlnSEFZYnZRT2lIS09Na0E3UXc3VDU2b3V3Y0dVK0lrUlh6cTJzV29DMVNBUnNuMkJxWFl1ZlNGY2FFVWhISUwwRnNGRHE4VG1LK244TDJUN1JDRXRwbnhhU2xrQ3l0aCs5enVDTkFmdkV6Nkh2ZmRpenZLSkF1RWpucTBFbDV4ZFB3NHNNSG5HSzFTV3VvZjBJRmtxaXVJUk1PcDV6YzExQjBRS0ppeHp6bW54RzMvakpWU0VJWC9Qd3BPTHNBTVZqSmtwd3hiSzY3SmhyRWlyN3BjbTJKVzdyY3U3OVoyRzNLU3ZMY1hBZi9Dc2RiTUV5UGFDa3JTV3RuN3JXZUtDdG1CSTN6WmQybHJHUlRCSVl6czhwbVRzZmxYSGx2bWxqd3phWTBVdUpMLzZTZXNucUR3bUk0K3NCMExXVWxHWkh4ZU14clV2TGtCQ0FqdnRXVWxaeWgxbE5Xc3M2V09zUXRvUTk3bVhybExBSTVEV1hGZjRSL2JnRDR2MDFMV1VtZW14Zi9DZiszeTB1ZGxGaGg1UmZMWWRSWk9vUWNZSi9BRjJpR1Exbm1zcHZxeXRINWFycFVLSVNlMC94M3RUTFc2dm91TkZ6ZndLb1pWN1RjTmJxSGlJaWx1aFhrUEJqNmkwSHo1eTlJYlUyNDVYMVk4YmVBZXBNNk9yOUYxcTZ6YWQxaUdYcmlMakVpeWQwbWk4WXBvVnJZMTk5dEV2U29XOVE0dlB4aUJJSnErUVJYWTdKcXBOa012d3g0MVV1SkZaYWdNajB5Q2FCbGRQRE9YZnBmamdTa1BNbHFycHU1NTRzcEk0TjFsMXVFZ2pmaTZ5NW5YRXpUUFFnQS9ZMHBFUy94TGJLdlIvUjZZcitPUmtXMjRHSU5jRDNRb0ppbmpDQ2R2Qnk2a0o1ZFpqYTVZR1BuRGJkSjBMRXBVZVU3SXYydGJ0UE8xdFVwVVhOelJFb1lPZndWNHE2VWNKMEFHN0ROK1BqT1c1ZFhxVDhJY2J6SEt5eDVzQ21KNzdsa29STXRqRFZTMlhiRVZsdnJSSmpSLzhEZi9FNUdGYTRlclRzUVVJaWdOazM4RnpyaTh4dE5xWGlOajNXQmJYYkF1aFJENTYrTWFETlBtRHQzYm55Zk1pSUtaT252VUhkZUE1U25VWFBqMzAycnhUQnlFL3JLaDQ1ME9oYjRKZ0lRa2NPQUU1VkU1WWwzbzI3MEwrWDdKV2NUa3lVN0ZQZlN4NFB2dWhKNWg4Zm5KOHpaaGNOY3Z1dkptUWdpL0ZqQ0dwSmt4bmV1UG0xRlNlRFZpcGorTS9LdzFhQXpCL1g4TWt3UDR3ekFscnFIdFNxMWczT2h4RFducG1OcjRKM1lVdjU3ZEZaWlcyeEpOdHhmT1dQR3U5aVdCajQ2OXdsK3NRTy9mc1FSM3NkRkNmNkJNbGNNUjI1ei9RcGwrSlNBN003S1lxR2dBRGduWmZXcEFOaDBXSWd0d3BtNk9MWlRWQ21Yelh5UUFrYXR1S25oSXdCdVVnTnVoNHBYV0NSa1JMVDdKR05ibW1zUmJKcWxxYmxPYjl3c0Q1RWd1dHFEMXR4SVk4YS82UUdkdEpINDdPTVBGMkE1eitzbUZXQzJVTTEzbzFwSjN0UWpBVHBHRlJ6YnhzeFdobFVDWkdjclFJZ2tGaW1uL2pBSk1WQ0poV1JBWVd0bHNtTGFaYlVtTFIvZWV4U0dnNGNsaGVrb2xOYW12ZXYyamx0UGZwTXBYQkh2bE8rcXNBWitKeGNXeU5sR2pOaWV6UzRhc2VFWmNtdklmQWpIOURjYTgxZDFINHhuek9zUnduRE9GaGIvV0E4ckJwbzlXOEhmVGxpRTFSV2dYQ3J6M0lOdnhIQmtkcnV0elhucXZYMkxGeWY2S3ZHR2g3cmVNTEtqMWtoN01jSGdsRkt0SnJGc2RmY1BZOGVLRkxzcE9MSGhtQzlvdFdPWkxlS3NyNjRLNjVDRDh6RDBDVG9TU0ZYQS9ESm1aYnlKM1VwVlZ5Yks1Vkh5N01FRWhPQnJTY3kxTThHeWFSMVl6UHd3MnF3WFRCdGRxUkRIVjFaV1NxdklxNlN1c0lqcnZLcDBENTMyVGVkK0hmRVY3WWsrajB6bjMwU1dmZXNldVBnTEZZV0YxODJxZ2RJNkpoNWRJNGN4SWRIQlcvU3ZIVmxibTRyUTJGUUFlOHJEQWUvbDIxVDdMT2cvRWNNL3JGb3NVMHV3K0xtcmNySm94QjdtWEYySVJhN1FzaFhKRHBSalpuQWZRL2JXSVpMZHUrbG5RMmFVMElXOUdLc1NoaXJCSmdCaUVUd1AyYlVKaXZTelZHS1oycW51cEcxdEQrdFhvSURSVkN1M1ZORkxUSDlHMzFGSmgwSnB0ZEN3NGd0Y24wcmVYUHRMVkNULzlKTGNsNHZwSUVXa0RaNWJyeDBWTjlYS01DcWwxTlhDMGd2S2k2OWdGeTJKeit6Uk9lYitFRXZJR1pnZWxUamN5NTJqZVU4citmUTlseVlYY2syYjhqbzhYdXZGRnJ3bTdIYkJ0WEoxUmhyOXNORDRGUnp1VzlhRlJycHZiQzVRcmtJT3Q3TWdkVlZZVENjWjhMUStiUXVhRFpoeWpicHE2WGg4SWZ1NXhwZUlqRU1wUmhkdU5LTFJEY2l6WjA5N3k4ajVMZ3pYNEhXME9hQzFCQ2M5MnhoMzhLTDcyeDRwcnpkYmFTSGNwcURrZFF3UnJ6WWVKaXJ4Szg1VUFwTkFURm5SajdzcUxFRURsUnNRQzhoMnp4cjJ4UElmZTIrekIxODc2eWV4Wkh2S1BWYnV1TGF5TUJJNndadDI4amVVNmRqOFoyWFlUQUZhTG5ZQ2tiSVQxcjM0ZTRmeVMvNkd2d3BZWGhlbmgyVStWcGx1S0p3Vkg0Uk9oWlUzNlp2S3pDY0VGTzRkdFFucGRXUG1JMHVPaG5YMUgwWWNTT3RxWE9IclJqUzZFWmtKaDh1NlRzS3dMM1ZVTFBwM1hLWDhEUWRmU2dtVGFZREk0UXIyZGE2ckZYUWMrdUVzTEhMK1BSVFhGbGhmQzZoZzh2ZG94T1dHTVlFZEhJa0JIVmNwZmo5WFhrQ2RncEJwY2FmQ3NpeEV1QnNrRHJ4aWdKMWRxTUthQ1liVVhLWk9uQWZJcThYalRqV2tOUi9ublgxc1VzRjk5OTkvcUFsK095NnJPb1NKY25kc05hOHZEUlNhNnU4R1ZmUFp0ZmF0V0taak11UWhiT0d5aGZLTEg2Q3pKNW1GSUJFZnFOWmkxL3RacVpIWGdPcFVXQ1I2YWVERmc3WTgrR0Y4Wm8vTmtRckxJUEVLR2wzMEZ3TUMzWTRxd3NHUFRKakliV3M3MkFRL2dnc3pUNWxHaVA2bERKdHB3S2JhRXZpQVhBK3hFN0RiQjhHZWwyT1ArR2NqUHErOGttdGNXVjJxSnoxeGZBQm5BcDR5a3RYWklkaEFZVEUyRE41Ymt0eWd6M1R2YmNHLzZ1bml5TTBsSTRWbHk0TkFNNW04RG1qMG12Zm0ya3RBOGthdnlZTGVDVkRyOTFCcjZHV1NtKytsSjJYTng2QlRZWmswVkdoOENVM3F5UVN1RFBJMFN2d2FqWm5rSEIxdFJEdHp5Tk9uVC84U20veTU3cWc0clVkOU9PZlVMRUZmT1JYMXlQeW0ycnNvWkorQUtiZDZ6L21YRTJZaTBJeWg0bjlyME42aEJDdXl4eURwVkZqeVNHbVRKTGV1N2VscFZTTjJMQkNuR0RXRHFjZGJWM3ZhajlYTWU2NDFMMnh2T3JuYUN5VjVPM25DMXpSWjdCN3c5ZlZ2WWgrcFlweTdlU29ZV09ZNUUwTDhGQTc2SjBtZXlwd3F5WE1NMVZKcVdtcDBqS0U2RlJaYnJyK21FUzdDUVlYVjZjYjhwcGVBNlVrNGpJTmZkMW1MMHN0a1pxakxMWlNocmZxNHJzMktIRVRnR2oyQ3lNa1dGOGVRM3I5WFpvZWdNZFZyMzhxdHVadHFDeU03ZGpML0FqNHU3M3pBOGtSbVc2ekd1UWI3SnVkTGNUc2g5bWhMOE9UTUtKVjJLaXk3elV4aFdZWkJsa3JzcGhGb1pjTTQrSzYrWlZTRG9JVlVXS2h1RlJoVmxsNWtIRlJodEI3UUNsdGZtSFBJbnlyVHNLMmVwYkE2R3RaYy95NjJHTDRlTzV4Z1MrWHdPUmd1M29XQTQ3OTJGTHYrRldJbzllNmJmSG1VSURYNW12cDBYVGNpSHJGVFlZbXdZUWZqbmo0a3ZEbGVQRm81ak9Ia2ZWb1lXUXdjQ2hrRUVhTmRRb1E4Q0RPdzNsTVdrV0N6QmNUS0ZhVVJjTzJTdFJndTNnZ0ZkaEtGNWE0cExBT1AzM0Jmby9ndTRyYk9jOFJuVXBkdit6WS9qcVF5VmRDcHNGcVcvUk1DTXJHeThIWG9vZW5SeG92d2lnMHk0eDc3Sm8wdGZOdU1SdlpnSTlMZHlOckVMcWJxTDROVHN6bjhybE5SWEw0UTU4Ymw5ZVNNZFhYeWdOL2JNV3c4RWNQR00vRnUzb0svTGZwTkV2L2pqQ1BVbjVFSVpjWDczYW13Wkt1WVhuTnVYSW9TSWRLMGZDQkZ2VjRVMnpUWG5Jd2xBd1QzbWdTbitValhqV0g2aTJ2Y2FNUlcxbG0vbGhVdlZEVDdubDNMY3hTYjZuNU9PNytBRmNtYSs2cmgxS0Q4aWNjbDVFWElnMlFWa3hBakZDSFRDdFpWWVFuaFhtRVJIVXJEcHd4TEs3ZnBJTDZ5NFRzZ085eU1OUFpxSDF2NEp6TWFXWWJOZElGYmpsZ1lmUGlpSzkyNEJCWkZrczNwb21IbFRpT0RKK3dmbmJYWFhXOWM5UlVVMTVXd3VLN1FhcHNJakUwSXZ6UGNuREEvY2VhSXhObVp6UTNHVkdmMlpSVDJLTkJiSDBNenUyK1piak5jaElQMkpUTzdzN3Y1aWJpcnJLNytMcWJkM1ljSk1HOUtSTmRWSHRQVGVEN2ZVTUxOelprQnVGOG93YVliS0hJUXF6emNBUWVwY3N5ZWFydkM0eW1pakYweTBWeS9DUEZXSDhGUnFMYmxDMXZmUmszeEl3REpRMEh4cStCUllmZ3ZUb3dzQlpKK3RtNU1YUzBzMjM3R2lCZExYRTZEWjVvdDhURmlRQk41WllNODhoditBYVAwSWUwVVM0MG9aQnV5TFNZYnNSUVFadjBvdW5MV09YM2M3QkNONkdyTnJ5UEtTdnFQTG9iQ1BiZkxYKzhBZkthR1NaNU5FSHZXcGlOSlRqd2tiSWRmNllnV1c4RFdEYkZabWI3dnFyQmE2cCtIQ1c3aWVPOVB2YmRQejNRalhOVW5ENWRnY1ljcjNHZ2t4cGVyc0RBY25kV1RyK2ZOdS85b25GSDRQYmR0UVB4VzZKRDk5OWNaYWlTdmFydDRBZ0E3a3dQdExoVjBKQ3lQRWlYWTlBUDFUMUtGZEVPWUowdjVyRVpuWHNMV0krcU1pTEUwZE9vSjZ2RGVRM1pWV05MdFR1SXBzMnJFelQzQ3ltb04vUVpmUGZmREhpa2twaDNVVjFTWnlTdTdzRVV3ZkNzQzNHUDdoVHFUZ3BvS3ZWVGdteFp2aDV4cmxSa1E0czYwK3JKa01HWkI4ZSt3NkpqeCszMUh2amlKREJsV2x4ZXAvUkRXN1NsSkpUdmRSNTZNTGM5aVVFMjl3dk5WUVYzQm5UMjFQeUwxWDQzSU4zL3lHYkUwNGp1bVRZL0ZBbW5lOTZQZVg1VnA0bVFXZkdWaklTcDBQd3ZXd2EzZ1g5SjVoVm9XYVUxTnpiRWQ2Tm4yVzFWVmRhb2d1c0tFTDBFNlF6alZtc1M5cXBDQTYwZTVPWGRwd091QjV2WmRqbzk2dTRYRU5NMFJXV0RQVnFja3Q0b3BtSEtXVTdGV1B2UG1sUERNN3llRllTeWVWazdpUE1SMnBXY1VkYzZFUThrT1B3TkQ0cVIyZHNTa1dMYmlGZGFPWUNPK2FHMnhnRnIzVEhmZ3RONVR0SEF5QmJ4cTZaRm9uN2xWeExTTmdxRTdkZGl1ckZ4d1pwdk5xM1Z3TWdscnMvVnIwL3B3N0gyOUtZMDRmTG1NaGVtaHVIeW5EQ0ZLOFlWT1BEUG1oS09TWDFDOEFqN1BUditURUxtT2FKR1ZUWTZsS0dCdmhvVkNERWhXUzZSTXBGajIwMUozUCtEZVRrbG5Ed0JDZUFwS1R0eHo2OFZGL3BTdms1M3pOT1E3SUlwYzNFYUY4UXJyeFVXZlE1Z3JvcEQwTHdYdFN3S0JsQ29MTVBXcG0ySFkzQWdOZm9BWkVXQmJmQnVOS3ZsQ2h3NExuZ01MNUlTSytUWDM2ZUJsQXJaaWZ2V1BJWmR2bTlRRjM5Y2ZFREQ2c1FrTlIxdzdkTDFqV2VLQ0ZmQm5qVTljcEptYk4yRWZEUC9nUzRNUHg2dkVIaWlzNFZQR3FMRWovcDRTanUxclU4SjBBdXlIWVNSMmhvZ2ZzbldDYUZ3Tkt6NEtPcWNKOGswNVd4bXZzQ0wxaUVVYTFUbUI5b2RUTzd0bXoxWTJOT0NsTEhCaVdDUC9QZHFCZmJjMWtqeXJENnVKSTZZMGZxK2FQNzhtenR6VklPY3BLSGdaQ2IrVm5ORXlTbWpYQTBZRWtpR3ZhM2lIYk0xRFhvVllCcVgxdzJSa1U1YmxsVnhLSWdmeGllS0NsTEE2QUVMa0dYM1FwUksxK0E2bEtqbU1ZV3lLMUZ5L0Frcm8wUlJRbmNWQ0hJUjk1OWRnZURpcU05UEZsVHh3SXloZXhuczVVQVU3c2NKcXJwVitMQTBUMGFrcVBPVDhrcWRKQ3JlNzA0cEd2SkJpb2tkc1hJZVp3Vll0V2xid3htaDRCRmZXVjFiV2pJak82NDdyaXVycUM4RExIMHpyaHNQbWJSekMybUJLSnlsK1M5My80cVY2TGlsTWJLRVEvNGZoeS9QYTFzQ3d5Y2VqN3o2R25kNGV4akRsbUZpeW50eXplQWpuRWNLNjBFeHlUM2VSKzF1ODVMdDlQVW53bWQraDVpVXRTU0E2aXdLdDAyRHBiTzNNU0htMUg0WWFqMEcrUzJuSWhNTlRRa2NEeURXTytTVlFWSkVQdi9LSUo3SENrb1NadkhGY1JtSlFjcHBwOEtSRG92bk42UFhLaGgvZzRmN1lrenFabjZXeEU5WDlLYWdVenV4RE1OMWZHbHMvaG9pcnBGOHJOajlUOXhWVkN5NFZIQWtiTUsrUzZiL01pYWhRWURsaGt0clIzSlhVV1hneFhvZ002d3FLblQ5YThoekUvT0tySWgvWm9QVUcrb3laOWRDVmh3UjNjR0FIeGZ1b3I1N2F6MkJNQUJPVFZWQlNTSzF0YnlyekpzVGlHQXJPdDg4dTI0eXQraVk0QXppV1RLQ2MzSStodUdyaHV6N2ZFU3AvOHJjaDM1OEM3blVvdWoraERkcCtia3dLT2FTSXlabnpIcXdTYnhTTjFQUmhIay9yNnpjNjFKaWU3SldOL3d2Q1AvS01PT05FR00zVGNDcXJhbTVIL2YvcHdNTk9KakY5ZHRrTTc1M1ZEaFhLN01ySzZsS3lSSFVTRVBVaVBOdFo1VE9QVlVjd2hCdzJlVEFGcmFkQUJWOTQxK2tUWUg2S0wvTU8vQjZKZm42MEMwcnJzVGg1ZUVLOGd1TDVvRm1Xc013NTh4TllrSnVBSnljWm9EQVpveHk1QzRvRkM0L2xrR2tZckwzam5kRmpTcGorUnJ1Mm5VNXlTWTlPaW9Scm1McUZJak9USDhJdGxCdHBneENINmJBUWdXVzZGOXZ1L0NBYXoxbGhTYWo4a3V1Z0JYOFJqV0I4emZZMTFGeWZmcWZ6dzBzR1VNQ1NYeGRzMCtGUllycVZ4azJjcTBOTitxN0lDbjZRR29lcmRtdy80TnJycmt2L2Zsb1ZWVFYzNDhGMzZRaXArWE9HZ01JdGhNSmQ1Z3lSaHBMaFJRTWcxK1hvbjkxbW9VYUdwODExd3hLMkxyK2tCcnpOU0ZpV2tVd09nYjhoZU5kZWRGV2R0SWFFMVFqY3cxM2hlNEhFT0J1aHVlN3FhRkxPUTBJSjFWejdTelJhUGFnc21yTFR0Unl6eXVuaG9WUFM5MFZlMFhBTkJTSUx1YjFVVnEvcktxdUlDS3lBdEs0VWtpanIzV2ZiSy9PcXFzNVRBSFlGQXVmNnFNcXE2azFlS2l0WUFtc3lycXhrNjZVVHZybDJFUHFuK3BESGxkUWNrT1FwT0xaMXVVTXBqQXAycHlnY0Nlb1dpTXRkS3l0WlZYUDlHbXJkZFNiYThieHV6ZDdBWTFlS1FHdWNtd0Y5TjBXU1kydUxOOEFVVFEyYmdsVFhZZzVIWmhFRnJKYW1Xb3hwRGRPakRhZmc1Um1OcldHdnhwZXRueUcxZUhRT0RLSng0MStJTDNET3FhaXBHU3hzMnVBTWtiaUVpZW9wYlAxODl1enA1bkpCRlZCVTQwRHpaNURMV1lscmRKK0x1S3ZURU1yZzdVZE5seDA1MDBUaUZ2VFJnM1JSdGVHWlAwQTljOUJuVjZiRUxTZ1ppUmNlbGxhYW5QYUpHR0RlaG5mZ1VscFgrM1NpWWxkNUJjVjNRNzZlV2VRcGVGaFBvZkJNV3I4RVErUDRwS2FFQ29ydkJNTTN4S043bEJPWitSSEx5UTQxUnI2Y0ttU2ZlcUEzZmJuZmNVUWhhVVZkQ2Y2MEhYZ3ExVVJnQk0ybE1STnZWWWJmRFZnNXYyWU5sSVQ3ZlpxWU1OVk05OHlhVmZxMGJ0M1YxZFVuaEd3cXhzc3lHUTk1b0M2K0Nqd21FdjU3ZHZuTW0xUmcwdzRqRDZIWVAzY082aW1Gek5FdlBFOXZ3Q0ZkUWR2RkFwTExoWFJTWGpHT2poTlhncS8wRGwrWkhpSEwvaUZGVHB6V1lWQUJka2pSMFpRVHVBNUd4aFMwNDJBRkREMFE1alhvNjFYVVVwZlVsNnVtc0doQ2dQSnpub1hROC9TNDBJYitFbCt1dmtwWUt4cFhRM0FYS2NHYUFERTlSV05mdTRERVhGdUhER2JnTGhHa0VkZVNpampMemRhNEJjL2dmU2lLejdGUzdYTllUZHRFV0Vpbk1VWW5kZzZ4ZGJRbDZCamtqOE9EUFMwVlNhTnlwcFpaNWFYNVJqVFNoZHp1bEMrQ2RUTUI4anJHb0pwTm9MRWFGZ3MrcExWL05xRFRqcHBYZENhTzRyb1dQRTB4cGhWTmdQbEp2QXMvdzE1WjY2S3owM2JkYmpuS051QWNCS0gydnNZenN4UDllU09VRkN4VkJIUEx2ZTBWa3FMQ0FpVVpPay84YWxxMGF5ZWoyYWF3M2lidWZUcU5HL2RsSjR0cVY5SlhCS3Z2VkRYb25nVUZoZmtGaDRPbnpKa3o3ZjJzNTF6dXRpbUg4eGEyd0diTUJyYTdDNDZBcFhCWXBDOHpmWWJadU0wb3d3eWQySVM0cTFmSnRqZFJTNzFldkplT0lPU2F1VkRPU05RbDNSaUR3UWZpcVRSbUtabmx5LzFpNUdWdnRWY2E3YTJsdzNjaTJIWWxuQWZaNFZ4RU9hTXA0S1NQbk84QStVS1p5ZE9BQkcxcC8rV1hVUDRLQW9BaDN6cFhiZ1IxaFNXWmxRczJtZVhpeEgwVDhlNUJYdllvTExsV2tNUXczUkFHS1FPRU1WeU5uM3M5a0VmV2tZQ3lDaUYrN01JNVpXVlBaUjF6UFptaDA2YjBRWkFHRHArQS96VmdINFNYSG4vVzE5Q2tyWGpCL3hsNTZjUDBBYTJ2ZTdVbk45T1U5NkFXZ2FiRkd5aHZDb0xwN0Q5QWUrWm80ZllvWU42SkRqSVNBYUxhVHU5ZkwxaHdESWZzMnp5Zm84Z1MrVmtrcHBhWHpmU1ZsZGZQbzkwdnBqMUI0elViMlU0dmVWaERJdTViRnNQQzRrbUppdmFLUEdZYnc0ZExhV3lScStsY3k3WlBoN0tTWDhhOU1WMWZYbDY2Wkc5c21OK21uaUVCZllVbDI5VlV2eHhqMHZFd1c4TTlvNW1LWERKald4M3J1elI2NHVPS0dIRmdzMmZPWEltdGtPUnMxZDZXcnBsVlZ1cHRFUEhlSmlHL1BXbVhnRHVGSmRscXJuMElqcmFKZTQzU2tzZk15eFg1NHdveGEyR1d5c3RuVmlENnV4aXlnUUxzMlVuNnJHeW1JaWlyKzNwMlMzenU5d1lKdUZkWXN2VVJwY1huNDJwemp4WUcwOGNJamowSGtleHJ2R3FIWEJ1SVhSQkc0b1hmNmhYTlROT1J2TVBCZnNtYzhsSzVSTU5QdmdTNlhRSjZzNFJPN0E2YmRCZ0ZBbkpkbDJsY1R1Wm5DWmxmb0Y3V1JUU3FNQzFLOTFjTEZ4NFJiTE94UlFrTmRSSmZWdVlqN2l2VXl4cDkxZlRwSHlYaWIrblNwWUYvYk4xMkEySytqc0xNOFdlQUNYQkFOTXdwTFgwdEVieWY1MHZBQ3dtWVdWZ2RIS3hmOGlrMUR6d0hmcTBmNGs5dlpYZ0hqZTc0WmFxaHZqdnkwNldzWkpQa0M0OEF5MkY0c2UvcWppYTZxUk84M2dPZUJ6a3BLMGx6eTladEN3WFRSbnp4dG1DU3daTEtLaERtODJTRXZaczZmUnhmQWlvUzhFWmhSV3BDSkxoY0xFMzJ0M0M3V3FYeU9CaU1RZUx5MHBLQkFEYkJnekVFbkVublhZR0kyL1NuMldXbE53cTJ6b0JDeitLcGEzNlpMVG9MdkY2YlRDTFkzNnMvSmhZT0RvZURDUDdqVXlETGx5MmJyeThySzYzRWNxQ2laTGgrbVM4QkV3bDRxTEIyc3lGRDdKdHF2NFBqdE05Rmp0N0xtZTdnSldhNXg5RDNFYkp3Qm8wcE1sOXFvU241OHZMcEw4RnlHUUt0ZkNWZTlJODEwZE1KL2lrVTBBMnp5bWFlTnJ1MGRHT3Fpc0pDSElzNHZMY2tITnB5Rk50aUxENDF6K1B4NGVnRnJ4ZkpwK0xHTC85M2tvRDNDcXREZW5KN2lxYmFJUlNXRy9melV4M1pTWC9UWldISlhVS0p4OUM0b2hPaHFCNU15a01HQ21IQnpQdjA0K1A3WXlieGN2aC91aTl5V2E1UEZEd1ZPeTRjalpuTi8xTnVlaWlFTlhZME1CaHNoWFlTNnpGaDhSQ1dtZndOajAvNlJMM3hpeW96NHdQK08wa2djNTFMSGd2RWRBMkVXNGd1ZmJDRGtMMXp1alBKS1BWYUNnWVgweVdYdmV0UVgxWmt6NSsvNEdLYkVJd3I2REk4a0Q3cFo0b2JNRHl0TEMrZnNjWnRYWElUUUZoVjYrQzkrZ0t4WjcrZk43OW1JaFo3bnc1ZjFtTGY4ZTVXcWo1ZUtnbGtUbUZGYzVKWGNqRmVUbGhlZENGK283Y0NNVkJZQ0IrUU95c0llcElDOUVlNnBPaU42Q3A3d3ZVRER6elErNnRkSWJuVFFpRk1seEhnR2V2SnZFaThCVU8zNTJFTk5kbWg0TUk1YzY2UTJ3TWJwYmx6NTFxSDlUdFMrcm9PZ21YMUw0d0U5NUZuRW1KdnJMOGFFZmFSZlFra2tVRDNLS3hvaHVTcElSYWZqTzFZajhEd1pIOXNrWEZQZExIajlZckd1VkJPdmVCTDJZQTlnRjdwaVFyS3NXMjdDK1M2eElCdEQ4SmlJZXpsTGZkU3dvcCs1c09oSEE1MHhHWCtFRU5OK09jUXJtSFJSbTRMdnRBamRsVndiSkJmNEV1Z1V3TGRyN0E2ZWZHdk5DUXdiOTc5UndjQ2ZCaFFlZ2tSMmhvSzVYenVoZVdrd1lJUDZrdkFsNEF2QVY4Q3ZnUjhDZmdTOENYZ1M4Q1hnQzhCWHdLK0JId0orQkxJbEFUK0gzalg4UFVnRTVqdkFBQUFBRWxGVGtTdVFtQ0NcIlxuICAgICAgICAgIH1cbiAgICAgICAgKVxuICAgICAgXSB9KVxuICAgIF1cbiAgfVxuKSwgRlIgPSAoKSA9PiAvKiBAX19QVVJFX18gKi8gZTEoXG4gIFwic3ZnXCIsXG4gIHtcbiAgICB3aWR0aDogXCIxMzhcIixcbiAgICBoZWlnaHQ6IFwiMzdcIixcbiAgICB2aWV3Qm94OiBcIjAgMCAxMzggMzdcIixcbiAgICBmaWxsOiBcIm5vbmVcIixcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIGNoaWxkcmVuOiBbXG4gICAgICAvKiBAX19QVVJFX18gKi8gZTEoXCJnXCIsIHsgXCJjbGlwLXBhdGhcIjogXCJ1cmwoI2NsaXAwXzY3MzZfNDM5MylcIiwgY2hpbGRyZW46IFtcbiAgICAgICAgLyogQF9fUFVSRV9fICovIGMoXG4gICAgICAgICAgXCJwYXRoXCIsXG4gICAgICAgICAge1xuICAgICAgICAgICAgZDogXCJNOTkuMyAyMi43MDAxQzk5LjMgMjEuOTAwMSA5OS41IDIxLjYwMDEgMTAwLjMgMjEuNjAwMUgxMDIuNEwxMDMuNCAyNS4zMDAxQzEwMy43IDI1LjUwMDEgMTA1LjIgMjYuNjAwMSAxMDcuMyAyNi42MDAxQzExMC4xIDI2LjYwMDEgMTExLjQgMjUuMjAwMSAxMTEuNCAyMy42MDAxQzExMS40IDIyLjEwMDEgMTEwLjMgMjAuOTAwMSAxMDggMjAuMjAwMUMxMDcuMyAyMC4wMDAxIDEwNi40IDE5LjcwMDEgMTA1LjkgMTkuNjAwMUMxMDIuMSAxOC41MDAxIDk5LjMgMTYuNzAwMSA5OS4zIDEyLjgwMDFDOTkuMyA4LjEwMDEgMTAzLjEgNi4yMDAxIDEwNy40IDYuMjAwMUMxMTIgNi4yMDAxIDExNC41IDcuOTAwMSAxMTUuMiA4LjMwMDFWMTMuMDAwMUMxMTUuMiAxMy44MDAxIDExNC45IDE0LjEwMDEgMTE0LjIgMTQuMTAwMUgxMTIuMkwxMTEuMSAxMC4yMDAxQzExMC44IDEwLjAwMDEgMTA5LjYgOS4zMDAxIDEwNy43IDkuMzAwMUMxMDUuNCA5LjMwMDEgMTAzLjkgMTAuMzAwMSAxMDMuOSAxMi4yMDAxQzEwMy45IDE0LjEwMDEgMTA1LjggMTUuMTAwMSAxMDguMiAxNS44MDAxQzEwOC45IDE2LjAwMDEgMTA5LjUgMTYuMjAwMSAxMTAgMTYuMzAwMUMxMTMuNSAxNy4zMDAxIDExNi4yIDE5LjMwMDEgMTE2LjIgMjIuOTAwMUMxMTYuMiAyOC4xMDAxIDExMi4xIDI5LjgwMDEgMTA3LjQgMjkuODAwMUMxMDIuOCAyOS44MDAxIDEwMC4xIDI4LjAwMDEgOTkuNCAyNy41MDAxVjIyLjcwMDFIOTkuM1pNOTYuMiAyMy43MDAxQzk2LjIgMjMuMzAwMSA5NiAyMy4wMDAxIDk1LjYgMjMuMDAwMUM5NS4yIDIzLjAwMDEgOTQuOSAyMy40MDAxIDk0LjUgMjMuODAwMUM5NCAyNC4yMDAxIDkyLjMgMjYuNDAwMSA4OSAyNi40MDAxQzg1LjUgMjYuNDAwMSA4Mi4zIDIzLjIwMDEgODIuMyAxOC4wMDAxQzgyLjMgMTMuMjAwMSA4NC43IDkuNDAwMSA4OSA5LjQwMDFDOTAuNCA5LjQwMDEgOTEuNyA5LjgwMDEgOTIuMSA5LjkwMDFMOTMuMyAxNC4wMDAxSDk1LjNDOTUuOSAxNC4wMDAxIDk2LjMgMTMuODAwMSA5Ni4zIDEyLjkwMDFWOC4yMDAxQzk1LjQgNy42MDAxIDkzLjEgNi4xMDAxIDg5IDYuMTAwMUM4MiA2LjEwMDEgNzcuMyAxMC41MDAxIDc3LjMgMTcuOTAwMUM3Ny4zIDI1LjcwMDEgODIuMSAyOS43MDAxIDg4LjYgMjkuNzAwMUM5Mi43IDI5LjcwMDEgOTUuNCAyOC4wMDAxIDk2LjMgMjcuNDAwMVYyMy43MDAxSDk2LjJaTTEzNy40IDIzLjcwMDFDMTM3LjQgMjMuMzAwMSAxMzcuMiAyMy4wMDAxIDEzNi44IDIzLjAwMDFDMTM2LjQgMjMuMDAwMSAxMzYuMSAyMy40MDAxIDEzNS43IDIzLjgwMDFDMTM1LjIgMjQuMjAwMSAxMzMuNSAyNi40MDAxIDEzMC4yIDI2LjQwMDFDMTI2LjcgMjYuNDAwMSAxMjMuNSAyMy4yMDAxIDEyMy41IDE4LjAwMDFDMTIzLjUgMTMuMjAwMSAxMjUuOSA5LjQwMDEgMTMwLjIgOS40MDAxQzEzMS42IDkuNDAwMSAxMzIuOSA5LjgwMDEgMTMzLjMgOS45MDAxTDEzNC41IDE0LjAwMDFIMTM2LjVDMTM3LjEgMTQuMDAwMSAxMzcuNSAxMy44MDAxIDEzNy41IDEyLjkwMDFWOC4yMDAxQzEzNi42IDcuNjAwMSAxMzQuMyA2LjEwMDEgMTMwLjIgNi4xMDAxQzEyMy4yIDYuMTAwMSAxMTguNSAxMC41MDAxIDExOC41IDE3LjkwMDFDMTE4LjUgMjUuNzAwMSAxMjMuMyAyOS43MDAxIDEyOS44IDI5LjcwMDFDMTMzLjkgMjkuNzAwMSAxMzYuNiAyOC4wMDAxIDEzNy41IDI3LjQwMDFWMjMuNzAwMUgxMzcuNFpcIixcbiAgICAgICAgICAgIGZpbGw6IFwid2hpdGVcIlxuICAgICAgICAgIH1cbiAgICAgICAgKSxcbiAgICAgICAgLyogQF9fUFVSRV9fICovIGMoXG4gICAgICAgICAgXCJwYXRoXCIsXG4gICAgICAgICAge1xuICAgICAgICAgICAgZDogXCJNMTggNy4zMDAxQzIzLjMgNy4zMDAxIDI2LjMgMTAuOTAwMSAyNy4zIDEyLjYwMDFDMjguMiAxMC40MDAxIDMwLjEgNi44MDAxIDMxIDUuNjAwMUMyOS42IDQuMTAwMSAyNS4xIDAuMTAwMDk4IDE4IDAuMTAwMDk4QzcuOSAwLjEwMDA5OCAwIDguMzAwMSAwIDE4LjEwMDFDMCAyOC43MDAxIDguNiAzNS4zMDAxIDE1LjYgMzUuOTAwMVYyOC42MDAxQzExLjggMjcuODAwMSA3LjIgMjQuMTAwMSA3LjIgMTguMTAwMUM3LjIgMTIuMTAwMSAxMi4xIDcuMzAwMSAxOCA3LjMwMDFaXCIsXG4gICAgICAgICAgICBmaWxsOiBcIndoaXRlXCJcbiAgICAgICAgICB9XG4gICAgICAgICksXG4gICAgICAgIC8qIEBfX1BVUkVfXyAqLyBjKFxuICAgICAgICAgIFwicGF0aFwiLFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGQ6IFwiTTUzLjcwMDEgMC4yMDAxOTVWNy41MDAyQzU3LjUgOC4zMDAyIDYyLjEgMTIuMDAwMiA2Mi4xIDE4LjAwMDJDNjIuMSAyNC4wMDAyIDU3LjIgMjguODAwMiA1MS4zIDI4LjgwMDJDNDYgMjguODAwMiA0MyAyNS4yMDAyIDQyIDIzLjUwMDJDNDEuMSAyNS43MDAyIDM5LjIgMjkuMzAwMiAzOC4zIDMwLjUwMDJDMzkuNyAzMi4wMDAyIDQ0LjIgMzYuMDAwMiA1MS4zIDM2LjAwMDJDNjEuNCAzNi4wMDAyIDY5LjMwMDEgMjcuODAwMiA2OS4zMDAxIDE4LjAwMDJDNjkuMzAwMSA3LjQwMDE5IDYwLjYgMC45MDAxOTUgNTMuNzAwMSAwLjIwMDE5NVpcIixcbiAgICAgICAgICAgIGZpbGw6IFwid2hpdGVcIlxuICAgICAgICAgIH1cbiAgICAgICAgKSxcbiAgICAgICAgLyogQF9fUFVSRV9fICovIGMoXG4gICAgICAgICAgXCJwYXRoXCIsXG4gICAgICAgICAge1xuICAgICAgICAgICAgZDogXCJNNDguODk5OSA3LjQwMDFWMC4xMDAwOThDMzcuODk5OSAxLjIwMDEgMzQuMjk5OSA5LjgwMDEgMzEuMjk5OSAxNi42MDAxQzI3LjY5OTkgMjQuOTAwMSAyNS4zOTk5IDI3LjUwMDEgMjAuMzk5OSAyOC42MDAxVjM1LjkwMDFDMzAuOTk5OSAzNC44MDAxIDM0Ljk5OTkgMjYuMjAwMSAzNy44OTk5IDE5LjUwMDFDNDAuNzk5OSAxMi42MDAxIDQzLjA5OTkgOC4zMDAxIDQ4Ljg5OTkgNy40MDAxWlwiLFxuICAgICAgICAgICAgZmlsbDogXCJ3aGl0ZVwiXG4gICAgICAgICAgfVxuICAgICAgICApLFxuICAgICAgICAvKiBAX19QVVJFX18gKi8gYyhcbiAgICAgICAgICBcInBhdGhcIixcbiAgICAgICAgICB7XG4gICAgICAgICAgICBkOiBcIk02NS42IDM0LjAwMDFDNjUuNiAzMy4yMDAxIDY2LjIgMzIuNjAwMSA2Ni45IDMyLjYwMDFDNjcuNiAzMi42MDAxIDY4LjIgMzMuMjAwMSA2OC4yIDM0LjAwMDFDNjguMiAzNC44MDAxIDY3LjYgMzUuNDAwMSA2Ni45IDM1LjQwMDFDNjYuMSAzNS40MDAxIDY1LjYgMzQuODAwMSA2NS42IDM0LjAwMDFaTTY2LjkgMzUuNjAwMUM2Ny44IDM1LjYwMDEgNjguNSAzNC45MDAxIDY4LjUgMzQuMDAwMUM2OC41IDMzLjEwMDEgNjcuNyAzMi40MDAxIDY2LjkgMzIuNDAwMUM2NiAzMi40MDAxIDY1LjIgMzMuMTAwMSA2NS4yIDM0LjAwMDFDNjUuMiAzNC45MDAxIDY2IDM1LjYwMDEgNjYuOSAzNS42MDAxWk02Ni41IDM0LjEwMDFINjYuOEw2Ny4zIDM0LjkwMDFINjcuNkw2Ny4xIDM0LjEwMDFDNjcuNCAzNC4xMDAxIDY3LjYgMzMuOTAwMSA2Ny42IDMzLjYwMDFDNjcuNiAzMy4yMDAxIDY3LjQgMzMuMTAwMSA2Ni45IDMzLjEwMDFINjYuMlYzNS4wMDAxSDY2LjVWMzQuMTAwMVpNNjYuNSAzMy45MDAxVjMzLjMwMDFINjYuOUM2Ny4xIDMzLjMwMDEgNjcuMyAzMy4zMDAxIDY3LjMgMzMuNjAwMUM2Ny4zIDMzLjkwMDEgNjcuMSAzMy45MDAxIDY2LjggMzMuOTAwMUg2Ni41WlwiLFxuICAgICAgICAgICAgZmlsbDogXCJ3aGl0ZVwiXG4gICAgICAgICAgfVxuICAgICAgICApXG4gICAgICBdIH0pLFxuICAgICAgLyogQF9fUFVSRV9fICovIGMoXCJkZWZzXCIsIHsgY2hpbGRyZW46IC8qIEBfX1BVUkVfXyAqLyBjKFwiY2xpcFBhdGhcIiwgeyBpZDogXCJjbGlwMF82NzM2XzQzOTNcIiwgY2hpbGRyZW46IC8qIEBfX1BVUkVfXyAqLyBjKFwicmVjdFwiLCB7IHdpZHRoOiBcIjEzNy40XCIsIGhlaWdodDogXCIzNi4xXCIsIGZpbGw6IFwid2hpdGVcIiB9KSB9KSB9KVxuICAgIF1cbiAgfVxuKSwgWFIgPSAoKSA9PiAvKiBAX19QVVJFX18gKi8gZTEoXG4gIFwic3ZnXCIsXG4gIHtcbiAgICB3aWR0aDogXCI0OFwiLFxuICAgIGhlaWdodDogXCI0OFwiLFxuICAgIHZpZXdCb3g6IFwiMCAwIDQ4IDQ4XCIsXG4gICAgZmlsbDogXCJub25lXCIsXG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICBjaGlsZHJlbjogW1xuICAgICAgLyogQF9fUFVSRV9fICovIGMoXG4gICAgICAgIFwicGF0aFwiLFxuICAgICAgICB7XG4gICAgICAgICAgZDogXCJNMTIuNDY3NCA1LjEzNTY2QzE2LjEzODMgNS4xMzU2NiAxOC4yMTYyIDcuNzAzNDkgMTguOTA4OSA4LjkxNjA3QzE5LjUzMjIgNy4zNDY4NCAyMC44NDgzIDQuNzc5MDEgMjEuNDcxNiAzLjkyMzA3QzIwLjUwMTkgMi44NTMxNCAxNy4zODUxIDAgMTIuNDY3NCAwQzUuNDcxOCAwIDAgNS44NDg5NCAwIDEyLjgzOTFDMCAyMC40IDUuOTU2NjQgMjUuMTA3NyAxMC44MDUxIDI1LjUzNTZWMjAuMzI4NkM4LjE3MzA3IDE5Ljc1OCA0Ljk4Njk2IDE3LjExODkgNC45ODY5NiAxMi44MzkxQzQuOTg2OTYgOC41NTk0MyA4LjM4MDg2IDUuMTM1NjYgMTIuNDY3NCA1LjEzNTY2WlwiLFxuICAgICAgICAgIGZpbGw6IFwiIzAwM0E1Q1wiXG4gICAgICAgIH1cbiAgICAgICksXG4gICAgICAvKiBAX19QVVJFX18gKi8gYyhcbiAgICAgICAgXCJwYXRoXCIsXG4gICAgICAgIHtcbiAgICAgICAgICBkOiBcIk0zNy4xOTQ5IDAuMDcxMjg5MVY1LjI3ODI4QzM5LjgyNjkgNS44NDg5IDQzLjAxMyA4LjQ4ODA2IDQzLjAxMyAxMi43Njc4QzQzLjAxMyAxNy4wNDc1IDM5LjYxOTEgMjAuNDcxMyAzNS41MzI1IDIwLjQ3MTNDMzEuODYxNiAyMC40NzEzIDI5Ljc4MzcgMTcuOTAzNCAyOS4wOTExIDE2LjY5MDhDMjguNDY3NyAxOC4yNjAxIDI3LjE1MTcgMjAuODI3OSAyNi41MjgzIDIxLjY4MzhDMjcuNDk4IDIyLjc1MzggMzAuNjE0OSAyNS42MDY5IDM1LjUzMjUgMjUuNjA2OUM0Mi41MjgxIDI1LjYwNjkgNDcuOTk5OSAxOS43NTggNDcuOTk5OSAxMi43Njc4QzQ3Ljk5OTkgNS4yMDY5NSA0MS45NzQgMC41NzA1ODkgMzcuMTk0OSAwLjA3MTI4OTFaXCIsXG4gICAgICAgICAgZmlsbDogXCIjOTc5OTlCXCJcbiAgICAgICAgfVxuICAgICAgKSxcbiAgICAgIC8qIEBfX1BVUkVfXyAqLyBjKFxuICAgICAgICBcInBhdGhcIixcbiAgICAgICAge1xuICAgICAgICAgIGQ6IFwiTTMzLjg2OTkgNS4yMDY5OVYwQzI2LjI1MSAwLjc4NDYxNCAyMy43NTc1IDYuOTE4ODcgMjEuNjc5NiAxMS43NjkyQzE5LjE4NjEgMTcuNjg5NSAxNy41OTMgMTkuNTQ0IDE0LjEyOTkgMjAuMzI4NlYyNS41MzU2QzIxLjQ3MTggMjQuNzUxIDI0LjI0MjMgMTguNjE2OCAyNi4yNTEgMTMuODM3N0MyOC4yNTk2IDguOTE2MDcgMjkuODUyNyA1Ljg0ODk0IDMzLjg2OTkgNS4yMDY5OVpcIixcbiAgICAgICAgICBmaWxsOiBcIiMwMEIyQTlcIlxuICAgICAgICB9XG4gICAgICApLFxuICAgICAgLyogQF9fUFVSRV9fICovIGMoXG4gICAgICAgIFwicGF0aFwiLFxuICAgICAgICB7XG4gICAgICAgICAgZDogXCJNNDUuNDM2MiAyNC4xODAzQzQ1LjQzNjIgMjMuNjA5NyA0NS44NTE4IDIzLjE4MTcgNDYuMzM2NyAyMy4xODE3QzQ2LjgyMTUgMjMuMTgxNyA0Ny4yMzcxIDIzLjYwOTcgNDcuMjM3MSAyNC4xODAzQzQ3LjIzNzEgMjQuNzUwOSA0Ni44MjE1IDI1LjE3ODkgNDYuMzM2NyAyNS4xNzg5QzQ1Ljc4MjYgMjUuMTc4OSA0NS40MzYyIDI0Ljc1MDkgNDUuNDM2MiAyNC4xODAzWk00Ni4zMzY3IDI1LjMyMTZDNDYuOTYgMjUuMzIxNiA0Ny40NDQ5IDI0LjgyMjMgNDcuNDQ0OSAyNC4xODAzQzQ3LjQ0NDkgMjMuNTM4NCA0Ni44OTA4IDIzLjAzOTEgNDYuMzM2NyAyMy4wMzkxQzQ1LjcxMzMgMjMuMDM5MSA0NS4xNTkyIDIzLjUzODQgNDUuMTU5MiAyNC4xODAzQzQ1LjE1OTIgMjQuODIyMyA0NS43MTMzIDI1LjMyMTYgNDYuMzM2NyAyNS4zMjE2Wk00Ni4wNTk2IDI0LjI1MTZINDYuMjY3NEw0Ni42MTM3IDI0LjgyMjNINDYuODIxNUw0Ni40NzUyIDI0LjI1MTZDNDYuNjgzIDI0LjI1MTYgNDYuODIxNSAyNC4xMDkgNDYuODIxNSAyMy44OTVDNDYuODIxNSAyMy42MDk3IDQ2LjY4MyAyMy41Mzg0IDQ2LjMzNjcgMjMuNTM4NEg0NS44NTE4VjI0Ljg5MzZINDYuMDU5NlYyNC4yNTE2Wk00Ni4wNTk2IDI0LjEwOVYyMy42ODFINDYuMzM2N0M0Ni40NzUyIDIzLjY4MSA0Ni42MTM3IDIzLjY4MSA0Ni42MTM3IDIzLjg5NUM0Ni42MTM3IDI0LjEwOSA0Ni40NzUyIDI0LjEwOSA0Ni4yNjc0IDI0LjEwOUg0Ni4wNTk2WlwiLFxuICAgICAgICAgIGZpbGw6IFwid2hpdGVcIlxuICAgICAgICB9XG4gICAgICApLFxuICAgICAgLyogQF9fUFVSRV9fICovIGMoXG4gICAgICAgIFwicGF0aFwiLFxuICAgICAgICB7XG4gICAgICAgICAgZDogXCJNMTguMjIyMyA0MS44MTExQzE4LjIyMjMgNDEuMjQwNSAxOC4zNjUgNDEuMDI2NSAxOC45MzU2IDQxLjAyNjVIMjAuNDMzNUwyMS4xNDY4IDQzLjY2NTdDMjEuMzYwOCA0My44MDgzIDIyLjQzMDcgNDQuNTkyOSAyMy45Mjg2IDQ0LjU5MjlDMjUuOTI1OCA0NC41OTI5IDI2Ljg1MzEgNDMuNTk0MyAyNi44NTMxIDQyLjQ1MzFDMjYuODUzMSA0MS4zODMyIDI2LjA2ODUgNDAuNTI3MiAyNC40Mjc5IDQwLjAyNzlDMjMuOTI4NiAzOS44ODUzIDIzLjI4NjYgMzkuNjcxMyAyMi45MyAzOS41OTk5QzIwLjIxOTUgMzguODE1MyAxOC4yMjIzIDM3LjUzMTQgMTguMjIyMyAzNC43NDk2QzE4LjIyMjMgMzEuMzk3MiAyMC45MzI4IDMwLjA0MTkgMjMuOTk5OSAzMC4wNDE5QzI3LjI4MSAzMC4wNDE5IDI5LjA2NDMgMzEuMjU0NSAyOS41NjM2IDMxLjUzOThWMzQuODkyM0MyOS41NjM2IDM1LjQ2MjkgMjkuMzQ5NiAzNS42NzY5IDI4Ljg1MDMgMzUuNjc2OUgyNy40MjM3TDI2LjYzOTEgMzIuODk1MUMyNi40MjUxIDMyLjc1MjQgMjUuNTY5MiAzMi4yNTMxIDI0LjIxMzkgMzIuMjUzMUMyMi41NzM0IDMyLjI1MzEgMjEuNTAzNCAzMi45NjY0IDIxLjUwMzQgMzQuMzIxNkMyMS41MDM0IDM1LjY3NjkgMjIuODU4NyAzNi4zOTAyIDI0LjU3MDYgMzYuODg5NUMyNS4wNjk5IDM3LjAzMjEgMjUuNDk3OCAzNy4xNzQ4IDI1Ljg1NDUgMzcuMjQ2MUMyOC4zNTEgMzcuOTU5NCAzMC4yNzY4IDM5LjM4NiAzMC4yNzY4IDQxLjk1MzhDMzAuMjc2OCA0NS42NjI5IDI3LjM1MjQgNDYuODc1NSAyMy45OTk5IDQ2Ljg3NTVDMjAuNzE4OCA0Ni44NzU1IDE4Ljc5MjkgNDUuNTkxNSAxOC4yOTM2IDQ1LjIzNDlWNDEuODExMUgxOC4yMjIzWk0xNi4wMTExIDQyLjUyNDRDMTYuMDExMSA0Mi4yMzkxIDE1Ljg2ODUgNDIuMDI1MSAxNS41ODMyIDQyLjAyNTFDMTUuMjk3OCA0Mi4wMjUxIDE1LjA4MzkgNDIuMzEwNCAxNC43OTg1IDQyLjU5NTdDMTQuNDQxOSA0Mi44ODExIDEzLjIyOTMgNDQuNDUwMyAxMC44NzU1IDQ0LjQ1MDNDOC4zNzg5NyA0NC40NTAzIDYuMDk2NDYgNDIuMTY3OCA2LjA5NjQ2IDM4LjQ1ODdDNi4wOTY0NiAzNS4wMzQ5IDcuODA4MzQgMzIuMzI0NCAxMC44NzU1IDMyLjMyNDRDMTEuODc0MSAzMi4zMjQ0IDEyLjgwMTMgMzIuNjA5NyAxMy4wODY3IDMyLjY4MTFMMTMuOTQyNiAzNS42MDU1SDE1LjM2OTJDMTUuNzk3MSAzNS42MDU1IDE2LjA4MjUgMzUuNDYyOSAxNi4wODI1IDM0LjgyMDlWMzEuNDY4NUMxNS40NDA1IDMxLjA0MDUgMTMuNzk5OSAyOS45NzA2IDEwLjg3NTUgMjkuOTcwNkM1Ljg4MjQ3IDI5Ljk3MDYgMi41MzAwMyAzMy4xMDkgMi41MzAwMyAzOC4zODc0QzIuNTMwMDMgNDMuOTUxIDUuOTUzOCA0Ni44MDQxIDEwLjU5MDIgNDYuODA0MUMxMy41MTQ2IDQ2LjgwNDEgMTUuNDQwNSA0NS41OTE1IDE2LjA4MjUgNDUuMTYzNlY0Mi41MjQ0SDE2LjAxMTFaTTQ1LjM5ODUgNDIuNTI0NEM0NS4zOTg1IDQyLjIzOTEgNDUuMjU1OCA0Mi4wMjUxIDQ0Ljk3MDUgNDIuMDI1MUM0NC42ODUyIDQyLjAyNTEgNDQuNDcxMiA0Mi4zMTA0IDQ0LjE4NTkgNDIuNTk1N0M0My44MjkzIDQyLjg4MTEgNDIuNjE2NyA0NC40NTAzIDQwLjI2MjggNDQuNDUwM0MzNy43NjYzIDQ0LjQ1MDMgMzUuNDgzOCA0Mi4xNjc4IDM1LjQ4MzggMzguNDU4N0MzNS40ODM4IDM1LjAzNDkgMzcuMTk1NyAzMi4zMjQ0IDQwLjI2MjggMzIuMzI0NEM0MS4yNjE0IDMyLjMyNDQgNDIuMTg4NyAzMi42MDk3IDQyLjQ3NCAzMi42ODExTDQzLjMzIDM1LjYwNTVINDQuNzU2NUM0NS4xODQ1IDM1LjYwNTUgNDUuNDY5OCAzNS40NjI5IDQ1LjQ2OTggMzQuODIwOVYzMS40Njg1QzQ0LjgyNzkgMzEuMDQwNSA0My4xODczIDI5Ljk3MDYgNDAuMjYyOCAyOS45NzA2QzM1LjI2OTggMjkuOTcwNiAzMS45MTc0IDMzLjEwOSAzMS45MTc0IDM4LjM4NzRDMzEuOTE3NCA0My45NTEgMzUuMzQxMiA0Ni44MDQxIDM5Ljk3NzUgNDYuODA0MUM0Mi45MDIgNDYuODA0MSA0NC44Mjc5IDQ1LjU5MTUgNDUuNDY5OCA0NS4xNjM2VjQyLjUyNDRINDUuMzk4NVpcIixcbiAgICAgICAgICBmaWxsOiBcIiMwMDNBNUNcIlxuICAgICAgICB9XG4gICAgICApXG4gICAgXVxuICB9XG4pLCBVUiA9ICgpID0+IC8qIEBfX1BVUkVfXyAqLyBlMShcbiAgXCJzdmdcIixcbiAge1xuICAgIHdpZHRoOiBcIjQ4XCIsXG4gICAgaGVpZ2h0OiBcIjQ4XCIsXG4gICAgdmlld0JveDogXCIwIDAgNDggNDhcIixcbiAgICBmaWxsOiBcIm5vbmVcIixcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIGNoaWxkcmVuOiBbXG4gICAgICAvKiBAX19QVVJFX18gKi8gYyhcInJlY3RcIiwgeyB3aWR0aDogXCI0OFwiLCBoZWlnaHQ6IFwiNDhcIiwgZmlsbDogXCJ3aGl0ZVwiIH0pLFxuICAgICAgLyogQF9fUFVSRV9fICovIGMoXG4gICAgICAgIFwicGF0aFwiLFxuICAgICAgICB7XG4gICAgICAgICAgZDogXCJNMTUuNzYyNSAxMC41MjU1QzE4LjM4NDYgMTAuNTI1NSAxOS44Njg4IDEyLjM1OTcgMjAuMzYzNSAxMy4yMjU4QzIwLjgwODggMTIuMTA0OSAyMS43NDg4IDEwLjI3MDggMjIuMTk0IDkuNjU5MzdDMjEuNTAxNCA4Ljg5NTE0IDE5LjI3NTEgNi44NTcxOCAxNS43NjI1IDYuODU3MThDMTAuNzY1NiA2Ljg1NzE4IDYuODU3MTggMTEuMDM1IDYuODU3MTggMTYuMDI4QzYuODU3MTggMjEuNDI4NiAxMS4xMTE5IDI0Ljc5MTIgMTQuNTc1MSAyNS4wOTY5VjIxLjM3NzZDMTIuNjk1MSAyMC45NyAxMC40MTkzIDE5LjA4NDkgMTAuNDE5MyAxNi4wMjhDMTAuNDE5MyAxMi45NzExIDEyLjg0MzUgMTAuNTI1NSAxNS43NjI1IDEwLjUyNTVaXCIsXG4gICAgICAgICAgZmlsbDogXCIjMDAzQTVDXCJcbiAgICAgICAgfVxuICAgICAgKSxcbiAgICAgIC8qIEBfX1BVUkVfXyAqLyBjKFxuICAgICAgICBcInBhdGhcIixcbiAgICAgICAge1xuICAgICAgICAgIGQ6IFwiTTMzLjQyNDkgNi45MDgyVjEwLjYyNzVDMzUuMzA0OSAxMS4wMzUxIDM3LjU4MDcgMTIuOTIwMiAzNy41ODA3IDE1Ljk3NzFDMzcuNTgwNyAxOS4wMzQxIDM1LjE1NjUgMjEuNDc5NiAzMi4yMzc1IDIxLjQ3OTZDMjkuNjE1NCAyMS40Nzk2IDI4LjEzMTIgMTkuNjQ1NCAyNy42MzY0IDE4Ljc3OTNDMjcuMTkxMiAxOS45MDAyIDI2LjI1MTIgMjEuNzM0NCAyNS44MDU5IDIyLjM0NTdDMjYuNDk4NSAyMy4xMSAyOC43MjQ5IDI1LjE0NzkgMzIuMjM3NSAyNS4xNDc5QzM3LjIzNDMgMjUuMTQ3OSA0MS4xNDI4IDIwLjk3MDEgNDEuMTQyOCAxNS45NzcxQzQxLjE0MjggMTAuNTc2NSAzNi44Mzg2IDcuMjY0ODUgMzMuNDI0OSA2LjkwODJaXCIsXG4gICAgICAgICAgZmlsbDogXCIjOTc5OTlCXCJcbiAgICAgICAgfVxuICAgICAgKSxcbiAgICAgIC8qIEBfX1BVUkVfXyAqLyBjKFxuICAgICAgICBcInBhdGhcIixcbiAgICAgICAge1xuICAgICAgICAgIGQ6IFwiTTMxLjA1IDEwLjU3NjVWNi44NTcxOEMyNS42MDc5IDcuNDE3NjIgMjMuODI2OCAxMS43OTkyIDIyLjM0MjYgMTUuMjYzOEMyMC41NjE1IDE5LjQ5MjUgMTkuNDIzNiAyMC44MTcyIDE2Ljk1IDIxLjM3NzZWMjUuMDk2OUMyMi4xOTQyIDI0LjUzNjUgMjQuMTczMSAyMC4xNTQ5IDI1LjYwNzkgMTYuNzQxM0MyNy4wNDI2IDEzLjIyNTggMjguMTgwNSAxMS4wMzUgMzEuMDUgMTAuNTc2NVpcIixcbiAgICAgICAgICBmaWxsOiBcIiMwMEIyQTlcIlxuICAgICAgICB9XG4gICAgICApLFxuICAgICAgLyogQF9fUFVSRV9fICovIGMoXG4gICAgICAgIFwicGF0aFwiLFxuICAgICAgICB7XG4gICAgICAgICAgZDogXCJNMzkuMzExNyAyNC4xMjg5QzM5LjMxMTcgMjMuNzIxMyAzOS42MDg1IDIzLjQxNTYgMzkuOTU0OCAyMy40MTU2QzQwLjMwMTEgMjMuNDE1NiA0MC41OTggMjMuNzIxMyA0MC41OTggMjQuMTI4OUM0MC41OTggMjQuNTM2NSA0MC4zMDExIDI0Ljg0MjIgMzkuOTU0OCAyNC44NDIyQzM5LjU1OSAyNC44NDIyIDM5LjMxMTcgMjQuNTM2NSAzOS4zMTE3IDI0LjEyODlaTTM5Ljk1NDggMjQuOTQ0MUM0MC40MDAxIDI0Ljk0NDEgNDAuNzQ2NCAyNC41ODc0IDQwLjc0NjQgMjQuMTI4OUM0MC43NDY0IDIzLjY3MDQgNDAuMzUwNiAyMy4zMTM3IDM5Ljk1NDggMjMuMzEzN0MzOS41MDk2IDIzLjMxMzcgMzkuMTEzOCAyMy42NzA0IDM5LjExMzggMjQuMTI4OUMzOS4xMTM4IDI0LjU4NzQgMzkuNTA5NiAyNC45NDQxIDM5Ljk1NDggMjQuOTQ0MVpNMzkuNzU2OSAyNC4xNzk5SDM5LjkwNTRMNDAuMTUyNyAyNC41ODc0SDQwLjMwMTFMNDAuMDUzOCAyNC4xNzk5QzQwLjIwMjIgMjQuMTc5OSA0MC4zMDExIDI0LjA3OCA0MC4zMDExIDIzLjkyNTFDNDAuMzAxMSAyMy43MjEzIDQwLjIwMjIgMjMuNjcwNCAzOS45NTQ4IDIzLjY3MDRIMzkuNjA4NVYyNC42Mzg0SDM5Ljc1NjlWMjQuMTc5OVpNMzkuNzU2OSAyNC4wNzhWMjMuNzcyM0gzOS45NTQ4QzQwLjA1MzggMjMuNzcyMyA0MC4xNTI3IDIzLjc3MjMgNDAuMTUyNyAyMy45MjUxQzQwLjE1MjcgMjQuMDc4IDQwLjA1MzggMjQuMDc4IDM5LjkwNTQgMjQuMDc4SDM5Ljc1NjlaXCIsXG4gICAgICAgICAgZmlsbDogXCJ3aGl0ZVwiXG4gICAgICAgIH1cbiAgICAgICksXG4gICAgICAvKiBAX19QVVJFX18gKi8gYyhcbiAgICAgICAgXCJwYXRoXCIsXG4gICAgICAgIHtcbiAgICAgICAgICBkOiBcIk0xOS44NzMxIDM2LjcyMjNDMTkuODczMSAzNi4zMTQ3IDE5Ljk3NSAzNi4xNjE5IDIwLjM4MjYgMzYuMTYxOUgyMS40NTI1TDIxLjk2MiAzOC4wNDdDMjIuMTE0OCAzOC4xNDg5IDIyLjg3OTEgMzguNzA5MyAyMy45NDkgMzguNzA5M0MyNS4zNzU2IDM4LjcwOTMgMjYuMDM3OSAzNy45OTYgMjYuMDM3OSAzNy4xODA4QzI2LjAzNzkgMzYuNDE2NiAyNS40Nzc1IDM1LjgwNTIgMjQuMzA1NiAzNS40NDg2QzIzLjk0OSAzNS4zNDY3IDIzLjQ5MDUgMzUuMTkzOCAyMy4yMzU3IDM1LjE0MjlDMjEuMjk5NyAzNC41ODI0IDE5Ljg3MzEgMzMuNjY1NCAxOS44NzMxIDMxLjY3ODRDMTkuODczMSAyOS4yODM4IDIxLjgwOTEgMjguMzE1NyAyMy45OTk5IDI4LjMxNTdDMjYuMzQzNiAyOC4zMTU3IDI3LjYxNzMgMjkuMTgxOSAyNy45NzQgMjkuMzg1NlYzMS43ODAzQzI3Ljk3NCAzMi4xODc4IDI3LjgyMTEgMzIuMzQwNyAyNy40NjQ1IDMyLjM0MDdIMjYuNDQ1NUwyNS44ODUxIDMwLjM1MzdDMjUuNzMyMiAzMC4yNTE4IDI1LjEyMDggMjkuODk1MSAyNC4xNTI4IDI5Ljg5NTFDMjIuOTgxIDI5Ljg5NTEgMjIuMjE2NyAzMC40MDQ2IDIyLjIxNjcgMzEuMzcyN0MyMi4yMTY3IDMyLjM0MDcgMjMuMTg0OCAzMi44NTAyIDI0LjQwNzUgMzMuMjA2OEMyNC43NjQyIDMzLjMwODcgMjUuMDY5OSAzMy40MTA2IDI1LjMyNDYgMzMuNDYxNkMyNy4xMDc4IDMzLjk3MTEgMjguNDgzNSAzNC45OSAyOC40ODM1IDM2LjgyNDJDMjguNDgzNSAzOS40NzM1IDI2LjM5NDUgNDAuMzM5NyAyMy45OTk5IDQwLjMzOTdDMjEuNjU2MyA0MC4zMzk3IDIwLjI4MDcgMzkuNDIyNiAxOS45MjQgMzkuMTY3OVYzNi43MjIzSDE5Ljg3MzFaTTE4LjI5MzcgMzcuMjMxOEMxOC4yOTM3IDM3LjAyOCAxOC4xOTE4IDM2Ljg3NTEgMTcuOTg4IDM2Ljg3NTFDMTcuNzg0MiAzNi44NzUxIDE3LjYzMTMgMzcuMDc4OSAxNy40Mjc1IDM3LjI4MjdDMTcuMTcyOCAzNy40ODY1IDE2LjMwNjcgMzguNjA3NCAxNC42MjUzIDM4LjYwNzRDMTIuODQyMSAzOC42MDc0IDExLjIxMTggMzYuOTc3IDExLjIxMTggMzQuMzI3N0MxMS4yMTE4IDMxLjg4MjEgMTIuNDM0NSAyOS45NDYxIDE0LjYyNTMgMjkuOTQ2MUMxNS4zMzg2IDI5Ljk0NjEgMTYuMDAxIDMwLjE0OTkgMTYuMjA0OCAzMC4yMDA4TDE2LjgxNjEgMzIuMjg5N0gxNy44MzUxQzE4LjE0MDggMzIuMjg5NyAxOC4zNDQ2IDMyLjE4NzggMTguMzQ0NiAzMS43MjkzVjI5LjMzNDdDMTcuODg2MSAyOS4wMjkgMTYuNzE0MiAyOC4yNjQ4IDE0LjYyNTMgMjguMjY0OEMxMS4wNTg5IDI4LjI2NDggOC42NjQzMSAzMC41MDY1IDguNjY0MzEgMzQuMjc2N0M4LjY2NDMxIDM4LjI1MDggMTEuMTA5OSA0MC4yODg3IDE0LjQyMTUgNDAuMjg4N0MxNi41MTA0IDQwLjI4ODcgMTcuODg2MSAzOS40MjI2IDE4LjM0NDYgMzkuMTE2OVYzNy4yMzE4SDE4LjI5MzdaTTM5LjI4NDYgMzcuMjMxOEMzOS4yODQ2IDM3LjAyOCAzOS4xODI3IDM2Ljg3NTEgMzguOTc4OSAzNi44NzUxQzM4Ljc3NTIgMzYuODc1MSAzOC42MjIzIDM3LjA3ODkgMzguNDE4NSAzNy4yODI3QzM4LjE2MzggMzcuNDg2NSAzNy4yOTc2IDM4LjYwNzQgMzUuNjE2MyAzOC42MDc0QzMzLjgzMzEgMzguNjA3NCAzMi4yMDI3IDM2Ljk3NyAzMi4yMDI3IDM0LjMyNzdDMzIuMjAyNyAzMS44ODIxIDMzLjQyNTUgMjkuOTQ2MSAzNS42MTYzIDI5Ljk0NjFDMzYuMzI5NiAyOS45NDYxIDM2Ljk5MTkgMzAuMTQ5OSAzNy4xOTU3IDMwLjIwMDhMMzcuODA3MSAzMi4yODk3SDM4LjgyNjFDMzkuMTMxOCAzMi4yODk3IDM5LjMzNTYgMzIuMTg3OCAzOS4zMzU2IDMxLjcyOTNWMjkuMzM0N0MzOC44NzcgMjkuMDI5IDM3LjcwNTIgMjguMjY0OCAzNS42MTYzIDI4LjI2NDhDMzIuMDQ5OSAyOC4yNjQ4IDI5LjY1NTMgMzAuNTA2NSAyOS42NTUzIDM0LjI3NjdDMjkuNjU1MyAzOC4yNTA4IDMyLjEwMDggNDAuMjg4NyAzNS40MTI1IDQwLjI4ODdDMzcuNTAxNCA0MC4yODg3IDM4Ljg3NyAzOS40MjI2IDM5LjMzNTYgMzkuMTE2OVYzNy4yMzE4SDM5LjI4NDZaXCIsXG4gICAgICAgICAgZmlsbDogXCIjMDAzQTVDXCJcbiAgICAgICAgfVxuICAgICAgKVxuICAgIF1cbiAgfVxuKSwgWVIgPSAvKiBAX19QVVJFX18gKi8gT2JqZWN0LmZyZWV6ZSgvKiBAX19QVVJFX18gKi8gT2JqZWN0LmRlZmluZVByb3BlcnR5KHtcbiAgX19wcm90b19fOiBudWxsLFxuICBDU0NIb3Jpem9udGFXaGl0ZTogRlIsXG4gIENTQ0hvcml6b250YWw6IFBSLFxuICBDU0NWZXJ0aWNhbDogWFIsXG4gIENTQ1ZlcnRpY2FsRmlsbGVkOiBVUixcbiAgQ2xpZW50OiBCUixcbiAgQ29sb3JlZDogU1IsXG4gIEZpbGxlZDogRVIsXG4gIEZpbGxlZFdoaXRlOiBrUixcbiAgS2V5TGluZTogTlIsXG4gIEtleUxpbmVEYXJrOiBUUixcbiAgTGFuZHNjYXBlOiBJUixcbiAgTW9ubzogRFIsXG4gIE1vbm9EYXJrOiBIUixcbiAgUG9ydHJhaXQ6IFZSXG59LCBTeW1ib2wudG9TdHJpbmdUYWcsIHsgdmFsdWU6IFwiTW9kdWxlXCIgfSkpO1xuZnVuY3Rpb24gR1IoZSkge1xuICByZXR1cm4gLyogQF9fUFVSRV9fICovIGMoQ2wsIHsgY2xhc3NOYW1lOiBcImxvZ28tc3ZnXCIsIC4uLmUgfSk7XG59XG5jb25zdCB1ciA9IFNyKFlSKShHUiksIFFSID0gJC5kaXYoXG4gICh7IHRoZW1lOiB7IGNvbG9yczogZSwgYm9yZGVyUmFkaXVzOiB0LCBpdGVtU2l6ZTogbyB9LCBzaXplOiBuLCAkaGFzVXJsOiByIH0pID0+IHtcbiAgICBsZXQgaTtcbiAgICBzd2l0Y2ggKG4pIHtcbiAgICAgIGNhc2UgbjIuTUVESVVNOlxuICAgICAgICBpID0gby5tZDtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIG4yLkxBUkdFOlxuICAgICAgICBpID0gby5sZztcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIG4yLkVYVFJBX0xBUkdFOlxuICAgICAgICBpID0gby54bDtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIG4yLlNNQUxMOlxuICAgICAgICBpID0gby5zbTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIG4yLlhTTUFMTDpcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIGkgPSBvLnhzO1xuICAgIH1cbiAgICByZXR1cm4gbzFgXG4gICAgICBkaXNwbGF5OiBmbGV4O1xuICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgICAgIGp1c3RpZnktY29udGVudDogY2VudGVyO1xuICAgICAgd2lkdGg6ICR7aX07XG4gICAgICBoZWlnaHQ6ICR7aX07XG4gICAgICBvdmVyZmxvdzogaGlkZGVuO1xuICAgICAgYm9yZGVyLXJhZGl1czogJHt0LmNpcmNsZX07XG4gICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAke3IgPyBcIm5vbmVcIiA6IGUudG9wQmFyLnRvcEJhckJnVGVydGlhcnl9O1xuICAgICAgY29sb3I6ICR7ZS5ncmV5fTtcbiAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcblxuICAgICAgaW1nIHtcbiAgICAgICAgZGlzcGxheTogYmxvY2s7XG4gICAgICAgIG1heC13aWR0aDogMTAwJTtcbiAgICAgICAgbWF4LWhlaWdodDogMTAwJTtcbiAgICAgICAgYm9yZGVyLXJhZGl1czogJHt0LmNpcmNsZX07XG4gICAgICB9XG4gICAgYDtcbiAgfVxuKSwgWlIgPSAkLmRpdihcbiAgKHsgdGhlbWU6IHsgYm9yZGVyUmFkaXVzOiBlIH0gfSkgPT4gbzFgXG4gICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgIC8qIHRvcDogMC4yNXJlbTtcbiAgICByaWdodDogMC4yNXJlbTtcbiAgICBib3R0b206IDAuMjVyZW07XG4gICAgbGVmdDogMC4yNXJlbTsgKi9cbiAgICBkaXNwbGF5OiBmbGV4O1xuICAgIGp1c3RpZnktY29udGVudDogY2VudGVyO1xuICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gICAgb3ZlcmZsb3c6IGhpZGRlbjtcbiAgICBib3JkZXItcmFkaXVzOiAke2UuY2lyY2xlfTtcblxuICAgIC5pY29uLXN5c3RlbSB7XG4gICAgICAvKiBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgICBib3R0b206IC01JTtcbiAgICAgIGxlZnQ6IDUwJTtcbiAgICAgIHJpZ2h0OiAwOyAqL1xuICAgICAgd2lkdGg6IDc1JTtcbiAgICAgIC8qIHRyYW5zZm9ybTogdHJhbnNsYXRlKC01MCUsIDApOyAqL1xuICAgICAgZGlzcGxheTogZmxleDtcbiAgICAgIGp1c3RpZnktY29udGVudDogY2VudGVyO1xuICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcblxuICAgICAgc3ZnIHtcbiAgICAgICAgd2lkdGg6IDc1JTtcbiAgICAgIH1cbiAgICB9XG4gIGBcbiksIGpSID0gJC5kaXZgXG4gIGRpc3BsYXk6IGZsZXg7XG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG5gLCBLUiA9ICQuc3BhbihcbiAgKHsgdGhlbWU6IHsgdHlwb2dyYXBoeTogZSwgZm9udFdlaWdodDogdCwgbGluZUhlaWdodDogbywgY29sb3JzOiBuIH0sIHNpemU6IHIgfSkgPT4ge1xuICAgIGxldCBpO1xuICAgIHN3aXRjaCAocikge1xuICAgICAgY2FzZSBuMi5NRURJVU06XG4gICAgICAgIGkgPSBlLnQxNjtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIG4yLkxBUkdFOlxuICAgICAgICBpID0gZS50MjA7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBuMi5FWFRSQV9MQVJHRTpcbiAgICAgICAgaSA9IGUudDI0O1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgbjIuU01BTEw6XG4gICAgICAgIGkgPSBlLnQxMjtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIG4yLlhTTUFMTDpcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIGkgPSBlLnQxMDtcbiAgICB9XG4gICAgY29uc3QgYSA9IHBhcnNlRmxvYXQoaSkgKiAxMDtcbiAgICByZXR1cm4gbzFgXG4gICAgICBkaXNwbGF5OiBibG9jaztcbiAgICAgIGNvbG9yOiAke24udG9wQmFyLnRvcEJhclRleHRTZWNvbmRhcnl9O1xuICAgICAgZm9udC1zaXplOiAke2l9O1xuICAgICAgZm9udC13ZWlnaHQ6ICR7dC5tZWRpdW19O1xuICAgICAgbGluZS1oZWlnaHQ6ICR7by5saDIwfTtcbiAgICAgIHdoaXRlLXNwYWNlOiBub3dyYXA7XG4gICAgICB0ZXh0LW92ZXJmbG93OiBlbGxpcHNpcztcbiAgICAgIG92ZXJmbG93OiBoaWRkZW47XG4gICAgICBtYXgtd2lkdGg6ICR7YX1yZW07XG4gICAgYDtcbiAgfVxuKSwgSlIgPSAoZSwgdCkgPT4ge1xuICBjb25zdCB7IHNpemU6IG8sIHVybDogbiwgbmFtZTogciB9ID0gZTtcbiAgbGV0IGk7XG4gIGlmIChyICYmICFuKSB7XG4gICAgY29uc3QgYSA9IHIuc3BsaXQoXCIgXCIpLCBzID0gYS5sZW5ndGggPj0gMiA/IGAke2FbMF0uY2hhckF0KDApfSR7YVsxXS5jaGFyQXQoMCl9YC50b1VwcGVyQ2FzZSgpIDogQXJyYXkuZnJvbShyKVswXS50b1VwcGVyQ2FzZSgpO1xuICAgIGkgPSAvKiBAX19QVVJFX18gKi8gYyhLUiwgeyBzaXplOiBvLCBjaGlsZHJlbjogcyB9KTtcbiAgfSBlbHNlXG4gICAgbiA/IGkgPSAvKiBAX19QVVJFX18gKi8gYyhcImltZ1wiLCB7IHNyYzogbiwgYWx0OiByIH0pIDogaSA9IC8qIEBfX1BVUkVfXyAqLyBjKFpSLCB7IGNoaWxkcmVuOiAvKiBAX19QVVJFX18gKi8gYyhaMSwgeyBuYW1lOiBcIlByb2ZpbGVGaWxsZWRcIiwgY29sb3I6IFwiIzFEMTc0RlwiLCBzaXplOiBcInh4c1wiIH0pIH0pO1xuICByZXR1cm4gLyogQF9fUFVSRV9fICovIGMoUVIsIHsgc2l6ZTogbywgJGhhc1VybDogISFuLCByZWY6IHQsIGNoaWxkcmVuOiBpIH0pO1xufSwgdDkgPSBCMChKUiksIF9SID0gKGUsIHQpID0+IHtcbiAgY29uc3QgeyBzaXplOiBvID0gbjIuU01BTEwsIG5hbWU6IG4sIC4uLnIgfSA9IGU7XG4gIHJldHVybiBuID8gLyogQF9fUFVSRV9fICovIGMoalIsIHsgcmVmOiB0LCBjaGlsZHJlbjogLyogQF9fUFVSRV9fICovIGModDksIHsgc2l6ZTogbywgLi4uciwgbmFtZTogbiB9KSB9KSA6IC8qIEBfX1BVUkVfXyAqLyBjKHQ5LCB7IHJlZjogdCwgc2l6ZTogbywgLi4uciB9KTtcbn0sIHpyID0gQjAoX1IpLCAkUiA9IDIsIGVCID0ge1xuICB4czogMTYsXG4gIHNtOiAyNCxcbiAgbWQ6IDQwLFxuICBsZzogNDgsXG4gIHhsOiA2NFxufTtcbmZ1bmN0aW9uIHRCKGUsIHQsIG8pIHtcbiAgcmV0dXJuIG8gfHwgZVt0XTtcbn1cbmZ1bmN0aW9uIG9CKGUpIHtcbiAgY29uc3QgdCA9IHRCKGVCLCBlKSwgbyA9ICRSLCBuID0gKHQgLSBvKSAvIDIsIHIgPSBuICogMiAqIE1hdGguUEk7XG4gIHJldHVybiBbdCwgbywgbiwgcl07XG59XG5jb25zdCByQiA9ICQuc3ZnKFxuICAoeyB0aGVtZTogeyBjb2xvcnM6IGUgfSB9KSA9PiBvMWBcbiAgICBjb2xvcjogJHtlLmJhY2tncm91bmRzLmJnSW5mb3JtYXRpb25hbFByaW1hcnl9O1xuICAgIHN0cm9rZTogY3VycmVudENvbG9yO1xuICAgIHRyYW5zZm9ybTogcm90YXRlKC05MGRlZyk7XG4gICAgZmlsbDogbm9uZTtcbiAgYFxuKSwgbkIgPSAkLmNpcmNsZShcbiAgKHsgdGhlbWU6IHsgY29sb3JzOiBlIH0gfSkgPT4gbzFgXG4gICAgY29sb3I6ICR7ZS5iYWNrZ3JvdW5kcy5iZ0luZm9ybWF0aW9uYWxQcmltYXJ5fTtcbiAgYFxuKSwgaUIgPSAkLmNpcmNsZShcbiAgKHsgdGhlbWU6IHsgY29sb3JzOiBlIH0gfSkgPT4gbzFgXG4gICAgY29sb3I6ICR7ZS5ib3JkZXIuYm9yZGVyUHJpbWFyeX07XG4gIGBcbiksIGFCID0gKGUsIHQpID0+IHtcbiAgY29uc3QgeyBwcm9ncmVzczogbyA9IDAsIHNpemU6IG4gPSBcInhzXCIsIC4uLnIgfSA9IGUsIFtpLCBhLCBzLCBsXSA9IG0wKFxuICAgICgpID0+IG9CKG4pLFxuICAgIFtuXVxuICApLCBwID0gbyA8PSAwID8gMCA6IG8gPiAxMDAgPyAxMDAgOiBOdW1iZXIobyksIGQgPSBsIC0gbCAqIHAgLyAxMDA7XG4gIHJldHVybiAvKiBAX19QVVJFX18gKi8gZTEoXG4gICAgckIsXG4gICAge1xuICAgICAgLi4ucixcbiAgICAgIHdpZHRoOiBpLFxuICAgICAgaGVpZ2h0OiBpLFxuICAgICAgdmlld0JveDogYDAgMCAke2l9ICR7aX1gLFxuICAgICAgcmVmOiB0LFxuICAgICAgY2hpbGRyZW46IFtcbiAgICAgICAgLyogQF9fUFVSRV9fICovIGMoXG4gICAgICAgICAgaUIsXG4gICAgICAgICAge1xuICAgICAgICAgICAgY3g6IGkgLyAyLFxuICAgICAgICAgICAgY3k6IGkgLyAyLFxuICAgICAgICAgICAgcjogcyxcbiAgICAgICAgICAgIHN0cm9rZVdpZHRoOiBhLFxuICAgICAgICAgICAgc3Ryb2tlRGFzaGFycmF5OiBsLFxuICAgICAgICAgICAgc3Ryb2tlRGFzaG9mZnNldDogMFxuICAgICAgICAgIH1cbiAgICAgICAgKSxcbiAgICAgICAgLyogQF9fUFVSRV9fICovIGMoXG4gICAgICAgICAgbkIsXG4gICAgICAgICAge1xuICAgICAgICAgICAgY3g6IGkgLyAyLFxuICAgICAgICAgICAgY3k6IGkgLyAyLFxuICAgICAgICAgICAgcjogcyxcbiAgICAgICAgICAgIHN0cm9rZVdpZHRoOiBhLFxuICAgICAgICAgICAgc3Ryb2tlRGFzaGFycmF5OiBsLFxuICAgICAgICAgICAgc3Ryb2tlRGFzaG9mZnNldDogZFxuICAgICAgICAgIH1cbiAgICAgICAgKVxuICAgICAgXVxuICAgIH1cbiAgKTtcbn0sIHNCID0gQjAoYUIpLCBYaSA9IHtcbiAgQ0lSQ0xFOiBcImNpcmNsZVwiLFxuICBMSU5FQVI6IFwibGluZWFyXCJcbn0sIHQ1ID0ge1xuICBDWUFOOiBcImN5YW5cIixcbiAgQkxVRTogXCJibHVlXCJcbn0sIGNCID0gJC5kaXYoXG4gICh7IHRoZW1lOiB7IGNvbG9yczogZSB9LCBwcm9ncmVzczogdCwgJGJhY2tncm91bmRDb2xvcjogbyB9KSA9PiB7XG4gICAgbGV0IG47XG4gICAgc3dpdGNoIChvKSB7XG4gICAgICBjYXNlIHQ1LkJMVUU6XG4gICAgICAgIG4gPSBlLmJhY2tncm91bmRzLmJnSW5mb3JtYXRpb25hbFByaW1hcnk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSB0NS5DWUFOOlxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgbiA9IGUuYmFja2dyb3VuZHMuYmdJbmZvcm1hdGlvbmFsUHJpbWFyeTtcbiAgICB9XG4gICAgcmV0dXJuIG8xYFxuICAgICAgcG9zaXRpb246IHJlbGF0aXZlO1xuICAgICAgd2lkdGg6IDEwMCU7XG4gICAgICBtaW4td2lkdGg6IDQwcHg7XG4gICAgICBoZWlnaHQ6IDRweDtcbiAgICAgIGJhY2tncm91bmQtY29sb3I6ICR7ZS5ib3JkZXIuYm9yZGVyUHJpbWFyeX07XG4gICAgICBib3JkZXItcmFkaXVzOiAyMHB4O1xuICAgICAgb3ZlcmZsb3c6IGhpZGRlbjtcblxuICAgICAgJjphZnRlciB7XG4gICAgICAgIGNvbnRlbnQ6ICcnO1xuICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgICAgIGhlaWdodDogMTAwJTtcbiAgICAgICAgd2lkdGg6ICR7dH0lO1xuICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAke259O1xuICAgICAgICBib3JkZXItcmFkaXVzOiAyMHB4O1xuICAgICAgICB0cmFuc2l0aW9uOiB3aWR0aCAwLjJzIGxpbmVhcjtcbiAgICAgIH1cbiAgICBgO1xuICB9XG4pO1xuZnVuY3Rpb24gbEIoZSwgdCkge1xuICBjb25zdCB7XG4gICAgcHJvZ3Jlc3M6IG8gPSAwLFxuICAgIGJhY2tncm91bmRDb2xvcjogbiA9IHQ1LkNZQU4sXG4gICAgLi4uclxuICB9ID0gZSwgaSA9IG8gPD0gMCA/IDAgOiBvID4gMTAwID8gMTAwIDogTnVtYmVyKG8pO1xuICByZXR1cm4gLyogQF9fUFVSRV9fICovIGMoXG4gICAgY0IsXG4gICAge1xuICAgICAgcmVmOiB0LFxuICAgICAgcHJvZ3Jlc3M6IGksXG4gICAgICAkYmFja2dyb3VuZENvbG9yOiBuLFxuICAgICAgLi4uclxuICAgIH1cbiAgKTtcbn1cbmNvbnN0IHBCID0gQjAobEIpLCBkQiA9IChlLCB0KSA9PiB7XG4gIGNvbnN0IHsgaGFzTGFiZWw6IG8sIHByb2dyZXNzOiBuLCB0eXBlOiByID0gWGkuQ0lSQ0xFIH0gPSBlO1xuICByZXR1cm4gLyogQF9fUFVSRV9fICovIGUxKE9SLCB7IHJlZjogdCwgY2hpbGRyZW46IFtcbiAgICAoKCkgPT4ge1xuICAgICAgc3dpdGNoIChyKSB7XG4gICAgICAgIGNhc2UgWGkuTElORUFSOlxuICAgICAgICAgIHJldHVybiAvKiBAX19QVVJFX18gKi8gYyhwQiwgeyBwcm9ncmVzczogbiB9KTtcbiAgICAgICAgY2FzZSBYaS5DSVJDTEU6XG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgcmV0dXJuIC8qIEBfX1BVUkVfXyAqLyBjKHNCLCB7IHByb2dyZXNzOiBuIH0pO1xuICAgICAgfVxuICAgIH0pKCksXG4gICAgbyAmJiAvKiBAX19QVVJFX18gKi8gZTEoQnAsIHsgY2hpbGRyZW46IFtcbiAgICAgIE51bWJlcihuKSxcbiAgICAgIFwiJVwiXG4gICAgXSB9KVxuICBdIH0pO1xufSwgQzQgPSBCMChkQiksIFE0ID0gJC5kaXYoXG4gICh7IHRoZW1lOiB7IGJvcmRlclJhZGl1czogZSB9IH0pID0+IG8xYFxuICAgIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgICB3aWR0aDogNnB4O1xuICAgIGhlaWdodDogNnB4O1xuICAgIGJvcmRlci1yYWRpdXM6ICR7ZS5jaXJjbGV9O1xuICBgXG4pLCBiQiA9ICQoUTQpKFxuICAoeyB0aGVtZTogeyBjb2xvcnM6IGUgfSB9KSA9PiBvMWBcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAke2UuYmFja2dyb3VuZHMuYmdTdWNjZXNzUHJpbWFyeX07XG4gIGBcbiksIE1CID0gJChRNCkoXG4gICh7IHRoZW1lOiB7IGNvbG9yczogZSB9IH0pID0+IG8xYFxuICAgIGJhY2tncm91bmQtY29sb3I6ICR7ZS5iYWNrZ3JvdW5kcy5iZ1dhcm5pbmdQcmltYXJ5fTtcbiAgYFxuKSwgRXAgPSAkKFE0KShcbiAgKHsgdGhlbWU6IHsgY29sb3JzOiBlIH0gfSkgPT4gbzFgXG4gICAgYmFja2dyb3VuZC1jb2xvcjogJHtlLmJhY2tncm91bmRzLmJnRXJyb3JQcmltYXJ5fTtcbiAgYFxuKSwgSDMgPSB7XG4gIEFDVElWRTogXCJhY3RpdmVcIixcbiAgUEVORElORzogXCJwZW5kaW5nXCIsXG4gIElOQUNUSVZFOiBcImluYWN0aXZlXCJcbn0sIG85ID0gKHsgdHlwZTogZSwgLi4udCB9KSA9PiB7XG4gIHN3aXRjaCAoZSkge1xuICAgIGNhc2UgSDMuQUNUSVZFOlxuICAgICAgcmV0dXJuIC8qIEBfX1BVUkVfXyAqLyBjKGJCLCB7IC4uLnQgfSk7XG4gICAgY2FzZSBIMy5QRU5ESU5HOlxuICAgICAgcmV0dXJuIC8qIEBfX1BVUkVfXyAqLyBjKE1CLCB7IC4uLnQgfSk7XG4gICAgY2FzZSBIMy5JTkFDVElWRTpcbiAgICBkZWZhdWx0OlxuICAgICAgcmV0dXJuIC8qIEBfX1BVUkVfXyAqLyBjKEVwLCB7IC4uLnQgfSk7XG4gIH1cbn0sIG00ID0gKHtcbiAgdHlwZTogZSxcbiAgaGFzTGFiZWw6IHQgPSAhMCxcbiAgY2hpbGRyZW46IG8sXG4gIGljb25TdHlsZTogbixcbiAgLi4uclxufSkgPT4ge1xuICBpZiAoIXQpXG4gICAgcmV0dXJuIC8qIEBfX1BVUkVfXyAqLyBjKG85LCB7IHR5cGU6IGUgfSk7XG4gIGxldCBpO1xuICBzd2l0Y2ggKGUpIHtcbiAgICBjYXNlIEgzLkFDVElWRTpcbiAgICAgIGkgPSBcIkFjdGl2ZVwiO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSBIMy5QRU5ESU5HOlxuICAgICAgaSA9IFwiUGVuZGluZ1wiO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSBIMy5JTkFDVElWRTpcbiAgICBkZWZhdWx0OlxuICAgICAgaSA9IFwiSW5hY3RpdmVcIjtcbiAgfVxuICByZXR1cm4gLyogQF9fUFVSRV9fICovIGUxKFJwLCB7IC4uLnIsIGNoaWxkcmVuOiBbXG4gICAgLyogQF9fUFVSRV9fICovIGMobzksIHsgdHlwZTogZSwgc3R5bGU6IG4gfSksXG4gICAgbyB8fCBpXG4gIF0gfSk7XG59LCBaNCA9ICQuZGl2KFxuICAoeyB0aGVtZTogeyB0eXBvZ3JhcGh5OiBlLCBmb250V2VpZ2h0OiB0LCBzcGFjaW5nczogbyB9IH0pID0+IG8xYFxuICAgIGRpc3BsYXk6IGlubGluZS1mbGV4O1xuICAgIGp1c3RpZnktY29udGVudDogY2VudGVyO1xuICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gICAgcGFkZGluZzogJHtvLnNwNH0gJHtvLnNwNn07XG4gICAgYm9yZGVyLXJhZGl1czogNTZweDtcbiAgICBmb250LXNpemU6ICR7ZS50MTB9O1xuICAgIGZvbnQtd2VpZ2h0OiAke3QubWVkaXVtfTtcbiAgICBoZWlnaHQ6IDE2cHg7XG4gICAgYm94LXNpemluZzogYm9yZGVyLWJveDtcbiAgICBib3JkZXI6IDFweCBzb2xpZCB0cmFuc3BhcmVudDtcbiAgYFxuKSwgQUIgPSAkKFo0KShcbiAgKHsgdGhlbWU6IHsgY29sb3JzOiBlIH0gfSkgPT4gbzFgXG4gICAgYmFja2dyb3VuZC1jb2xvcjogJHtlLmJhY2tncm91bmRzLmJnU3VjY2Vzc1ByaW1hcnl9O1xuICAgIGJvcmRlci1jb2xvcjogJHtlLmJhY2tncm91bmRzLmJnU3VjY2Vzc1ByaW1hcnl9O1xuICAgIGNvbG9yOiAke2UudGV4dEljb24udGV4dFRlcnRpYXJ5fTtcbiAgYFxuKSwgdUIgPSAkKFo0KShcbiAgKHsgdGhlbWU6IHsgY29sb3JzOiBlIH0gfSkgPT4gbzFgXG4gICAgYmFja2dyb3VuZC1jb2xvcjogJHtlLmJhY2tncm91bmRzLmJnV2FybmluZ1ByaW1hcnl9O1xuICAgIGJvcmRlci1jb2xvcjogJHtlLmJhY2tncm91bmRzLmJnV2FybmluZ1ByaW1hcnl9O1xuICAgIGNvbG9yOiAke2UudGV4dEljb24udGV4dFRlcnRpYXJ5fTtcbiAgYFxuKSwgekIgPSAkKFo0KShcbiAgKHsgdGhlbWU6IHsgY29sb3JzOiBlIH0gfSkgPT4gbzFgXG4gICAgYmFja2dyb3VuZC1jb2xvcjogJHtlLmJhY2tncm91bmRzLmJnRXJyb3JQcmltYXJ5fTtcbiAgICBib3JkZXItY29sb3I6ICR7ZS5iYWNrZ3JvdW5kcy5iZ0Vycm9yUHJpbWFyeX07XG4gICAgY29sb3I6ICR7ZS50ZXh0SWNvbi50ZXh0VGVydGlhcnl9O1xuICBgXG4pLCBoQiA9ICQoWjQpKFxuICAoeyB0aGVtZTogeyBjb2xvcnM6IGUgfSB9KSA9PiBvMWBcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAke2UuYmFja2dyb3VuZHMuYmdFcnJvclNlY29uZGFyeX07XG4gICAgYm9yZGVyLWNvbG9yOiAke2UuYm9yZGVyLmJvcmRlckVycm9yfTtcbiAgICBjb2xvcjogJHtlLnRleHRJY29uLnRleHRFcnJvcn07XG4gIGBcbiksIFVpID0ge1xuICBMT1c6IFwibG93XCIsXG4gIE1FRElVTTogXCJtZWRpdW1cIixcbiAgSElHSDogXCJoaWdoXCIsXG4gIE5PX0dPOiBcIm5vX2dvXCJcbn0sIG81ID0gKHtcbiAgdHlwZTogZSxcbiAgY2hpbGRyZW46IHQsXG4gIC4uLm9cbn0pID0+IHtcbiAgc3dpdGNoIChlKSB7XG4gICAgY2FzZSBVaS5MT1c6XG4gICAgICByZXR1cm4gLyogQF9fUFVSRV9fICovIGMoQUIsIHsgLi4ubywgY2hpbGRyZW46IHQgfHwgXCJMb3dcIiB9KTtcbiAgICBjYXNlIFVpLk1FRElVTTpcbiAgICAgIHJldHVybiAvKiBAX19QVVJFX18gKi8gYyh1QiwgeyAuLi5vLCBjaGlsZHJlbjogdCB8fCBcIk1lZGl1bVwiIH0pO1xuICAgIGNhc2UgVWkuSElHSDpcbiAgICAgIHJldHVybiAvKiBAX19QVVJFX18gKi8gYyh6QiwgeyAuLi5vLCBjaGlsZHJlbjogdCB8fCBcIkhpZ2hcIiB9KTtcbiAgICBkZWZhdWx0OlxuICAgICAgcmV0dXJuIC8qIEBfX1BVUkVfXyAqLyBjKGhCLCB7IC4uLm8sIGNoaWxkcmVuOiB0IHx8IFwiTm8gR29cIiB9KTtcbiAgfVxufTtcbmZ1bmN0aW9uIHVuKHtcbiAgc3R5bGU6IGUsXG4gIGlzR3JvdXA6IHQsXG4gIHJhZGlvQnRuVmFsdWU6IG8sXG4gIGlzUmFkaW9CdXR0b246IG4sXG4gIGRhdGE6IHIsXG4gIGluZGV4OiBpLFxuICBvblNlbGVjdEhhbmRsZTogYSxcbiAgbGFiZWw6IHMsXG4gIHN1YkxhYmVsOiBsLFxuICBpc011bHRpOiBwLFxuICBjaGVja2JveFZhbHVlOiBkLFxuICBncm91cEJ5RGl2aWRlcjogYixcbiAgZGVmYXVsdFZhbHVlczogTSxcbiAgc2VsZWN0ZWRMaXN0czogdSxcbiAgdG9vbHRpcFRleHQ6IEFcbn0pIHtcbiAgdmFyIGcsIHYsIEwsIHksIEIsIFgsIEYsIFQsIHcsIEgsIEMsIHEsIG0sIGssIHgsIE4sIFYsIFIsIEksIGosIFUsIF8sIHIxLCBLLCBRLCBFLCBELCBHLCBKLCBTLCBXLCBQLCBZLCBaLCB0MSwgaTEsIG4xLCBzMSwgZDEsIGIxLCBjMSwgYTEsIGwxLCBwMSwgTTEsIEExLCB1MSwgaDEsIEMxLCBxMSwgVzEsIFIxLCBrMSwgTjEsIHYxLCBTMSwgRDEsIEYxLCBVMSwgaDAsIE8wLCB3MSwgZzEsIEUxLCBCMSwgSzEsIHAwLCBlMCwgSDEsIHgxLCBJMSwgWDEsIEoxLCBmMCwgSTAsIE8xLCBWMSwgRzEsIGkwLCBiMCwgZzAsIHUwLCB6MCwgVjAsIFcwLCBGMCwgYjIsIFoyLCBqMCwgYTIsIEEyLCBPdCwgZnQsIGpyLCBLciwgaG8sIEpyLCBfciwgeGUsIFdlLCBoZSwgT28sICRyLCBZdCwgZm8sIGYzLCBHdCwgUXQsIGczLCBnbywgQ28sIGplLCBndCwgQzMsIG1vLCBMbywgbTMsIHZvLCBxbywgcXMsIHlzLCB3cywgeHMsIFdzLCBScywgQnMsIFNzLCBFcywga3MsIE5zLCBUcywgSXMsIERzLCBIcywgVnMsIFBzLCBGcywgWHMsIFVzLCBZcywgR3MsIFFzLCBacywganMsIEtzLCBKcywgX3MsICRzLCBlOCwgdDgsIG84LCByOCwgbjgsIGk4LCBhOCwgczg7XG4gIGlmICh0KVxuICAgIHJldHVybiBiID8gaSA9PSAwID8gXCJcIiA6IC8qIEBfX1BVUkVfXyAqLyBjKFxuICAgICAgRmksXG4gICAgICB7XG4gICAgICAgIGNsYXNzTmFtZTogYExpc3RJdGVtIGxpc3QtaXRlbS0ke2l9YCxcbiAgICAgICAgc3R5bGU6IGUsXG4gICAgICAgIGNoaWxkcmVuOiAvKiBAX19QVVJFX18gKi8gYyhQMiwgeyAkZGVmYXVsdDogITAgfSlcbiAgICAgIH0sXG4gICAgICAoZyA9IHJbaV0uaXRlbSkgPT0gbnVsbCA/IHZvaWQgMCA6IGcudmFsdWVcbiAgICApIDogLyogQF9fUFVSRV9fICovIGMoXG4gICAgICBGaSxcbiAgICAgIHtcbiAgICAgICAgY2xhc3NOYW1lOiBgTGlzdEl0ZW0gbGlzdC1pdGVtLSR7aX1gLFxuICAgICAgICBzdHlsZTogZSxcbiAgICAgICAgY2hpbGRyZW46IC8qIEBfX1BVUkVfXyAqLyBjKGZSLCB7IGNoaWxkcmVuOiAvKiBAX19QVVJFX18gKi8gYyhnUiwgeyBjaGlsZHJlbjogcyB9KSB9KVxuICAgICAgfSxcbiAgICAgICh2ID0gcltpXS5pdGVtKSAhPSBudWxsICYmIHYudmFsdWUgPyAoTCA9IHJbaV0uaXRlbSkgPT0gbnVsbCA/IHZvaWQgMCA6IEwudmFsdWUgOiBpXG4gICAgKTtcbiAgY29uc3QgeiA9IChTMiwgRTIsIFJlKSA9PiB7XG4gICAgaWYgKChNID09IG51bGwgPyB2b2lkIDAgOiBNLmxlbmd0aCkgPT0gMCkge1xuICAgICAgbGV0IE9lO1xuICAgICAgcmV0dXJuIFMyID09IG51bGwgfHwgUzIuZmlsdGVyKCh3MikgPT4ge1xuICAgICAgICB2YXIgeW87XG4gICAgICAgICh5byA9IEUyW1JlXS5pdGVtKSAhPSBudWxsICYmIHlvLnZhbHVlICYmICh3MiAhPSBudWxsICYmIHcyLnZhbHVlKSAmJiBFMltSZV0uaXRlbS52YWx1ZSA9PSAodzIgPT0gbnVsbCA/IHZvaWQgMCA6IHcyLnZhbHVlKSAmJiAoT2UgPSAhMSk7XG4gICAgICB9KSwgT2U7XG4gICAgfSBlbHNlIHtcbiAgICAgIGxldCBPZTtcbiAgICAgIHJldHVybiBTMiA9PSBudWxsIHx8IFMyLmZpbHRlcigodzIpID0+IHtcbiAgICAgICAgdmFyIHlvLCBjODtcbiAgICAgICAgKHlvID0gRTJbUmVdLml0ZW0pICE9IG51bGwgJiYgeW8udmFsdWUgJiYgKHcyICE9IG51bGwgJiYgdzIudmFsdWUpICYmICgoYzggPSBFMltSZV0uaXRlbSkgPT0gbnVsbCA/IHZvaWQgMCA6IGM4LnZhbHVlKSA9PSAodzIgPT0gbnVsbCA/IHZvaWQgMCA6IHcyLnZhbHVlKSAmJiAoT2UgPSAhMCk7XG4gICAgICB9KSwgT2U7XG4gICAgfVxuICB9LCBmID0gKFMyLCBFMiwgUmUpID0+IHtcbiAgICBsZXQgT2U7XG4gICAgcmV0dXJuIFJlID09IG51bGwgfHwgUmUuZmlsdGVyKCh3MikgPT4ge1xuICAgICAgdzIudmFsdWUgPT0gUzJbRTJdLml0ZW0udmFsdWUgJiYgKE9lID0gITApO1xuICAgIH0pLCBPZTtcbiAgfSwgTyA9IChTMiwgRTIsIFJlKSA9PiB7XG4gICAgbGV0IE9lO1xuICAgIHJldHVybiBSZS52YWx1ZSA9PSBTMltFMl0uaXRlbS52YWx1ZSAmJiAoT2UgPSAhMCksIE9lO1xuICB9O1xuICBsZXQgaCA9IChyID09IG51bGwgPyB2b2lkIDAgOiByWzBdLnR5cGUpID09IFwiaXRlbVwiICYmIChyID09IG51bGwgPyB2b2lkIDAgOiByLmxlbmd0aCkgPiA4ID8gITAgOiAociA9PSBudWxsID8gdm9pZCAwIDogclswXS50eXBlKSAhPSBcIml0ZW1cIiAmJiAociA9PSBudWxsID8gdm9pZCAwIDogci5sZW5ndGgpID4gMTA7XG4gIHJldHVybiAvKiBAX19QVVJFX18gKi8gYyhzMCwgeyBjaGlsZHJlbjogLyogQF9fUFVSRV9fICovIGMoXG4gICAgRmksXG4gICAge1xuICAgICAgY2xhc3NOYW1lOiBgTGlzdEl0ZW0gbGlzdC1pdGVtLSR7aX1gLFxuICAgICAgc3R5bGU6IGUsXG4gICAgICBjaGlsZHJlbjogKHkgPSByW2ldLml0ZW0pICE9IG51bGwgJiYgeS50b29sdGlwVGV4dCA/IC8qIEBfX1BVUkVfXyAqLyBjKFxuICAgICAgICBBMyxcbiAgICAgICAge1xuICAgICAgICAgIHRleHQ6IChCID0gcltpXS5pdGVtKSA9PSBudWxsID8gdm9pZCAwIDogQi50b29sdGlwVGV4dCxcbiAgICAgICAgICBzaXplOiBcIm1pbmlcIixcbiAgICAgICAgICBwbGFjZTogXCJib3R0b21cIixcbiAgICAgICAgICBjaGlsZHJlbjogLyogQF9fUFVSRV9fICovIGUxKFxuICAgICAgICAgICAgJGEsXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIG9uQ2xpY2s6ICgpID0+IHtcbiAgICAgICAgICAgICAgICBhICYmIGEocltpXSwgaSk7XG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICRzdWJMYWJlbDogISEoKFggPSByW2ldLml0ZW0pICE9IG51bGwgJiYgWC5zdWJMYWJlbCksXG4gICAgICAgICAgICAgIHRhYkluZGV4OiAwLFxuICAgICAgICAgICAgICAkaXNTZWxlY3RlZDogTSAhPSBudWxsICYmIE0ubGVuZ3RoID8gZihyLCBpLCBNKSA6IChNID09IG51bGwgPyB2b2lkIDAgOiBNLmxlbmd0aCkgPT0gbnVsbCA/IHooW01dLCByLCBpKSA6ICEodSAhPSBudWxsICYmIHUubGVuZ3RoKSAmJiB1ICE9IG51bGwgPyAodSA9PSBudWxsID8gdm9pZCAwIDogdS52YWx1ZSkgPT09ICgoRiA9IHJbaV0uaXRlbSkgPT0gbnVsbCA/IHZvaWQgMCA6IEYudmFsdWUpIDogISF6KHUsIHIsIGkpLFxuICAgICAgICAgICAgICAkaXNTY3JvbGw6IGgsXG4gICAgICAgICAgICAgIGNoaWxkcmVuOiBbXG4gICAgICAgICAgICAgICAgKChUID0gcltpXS5pdGVtKSA9PSBudWxsID8gdm9pZCAwIDogVC5sZWZ0SWNvbikgJiYgLyogQF9fUFVSRV9fICovIGMoVTIsIHsgY2hpbGRyZW46ICgodyA9IEoyID09IG51bGwgPyB2b2lkIDAgOiBKMi5Db3VudHJpZXMuZmlsdGVyKChTMikgPT4ge1xuICAgICAgICAgICAgICAgICAgdmFyIEUyO1xuICAgICAgICAgICAgICAgICAgcmV0dXJuICgoRTIgPSByW2ldLml0ZW0pID09IG51bGwgPyB2b2lkIDAgOiBFMi5sZWZ0SWNvbi5uYW1lKSA9PSBTMi5Db3VudHJ5TmFtZTtcbiAgICAgICAgICAgICAgICB9KSkgPT0gbnVsbCA/IHZvaWQgMCA6IHcubGVuZ3RoKSA+IDAgPyAvKiBAX19QVVJFX18gKi8gYyhfNywgeyBjaGlsZHJlbjogLyogQF9fUFVSRV9fICovIGMoXG4gICAgICAgICAgICAgICAgICBpNCxcbiAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogKEggPSByW2ldLml0ZW0pID09IG51bGwgPyB2b2lkIDAgOiBILmxlZnRJY29uLm5hbWUsXG4gICAgICAgICAgICAgICAgICAgIHNpemU6IFwieHhzXCIsXG4gICAgICAgICAgICAgICAgICAgIGhpZGVDbGFzc05hbWU6ICEwXG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgKSB9KSA6IC8qIEBfX1BVUkVfXyAqLyBjKHBuLCB7IGNoaWxkcmVuOiAvKiBAX19QVVJFX18gKi8gYyhcbiAgICAgICAgICAgICAgICAgIFoxLFxuICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiAoQyA9IHJbaV0uaXRlbSkgPT0gbnVsbCA/IHZvaWQgMCA6IEMubGVmdEljb24ubmFtZSxcbiAgICAgICAgICAgICAgICAgICAgc2l6ZTogXCJ4eHNcIixcbiAgICAgICAgICAgICAgICAgICAgY29sb3I6IChxID0gcltpXS5pdGVtKSAhPSBudWxsICYmIHEubGVmdEljb24uY29sb3IgPyAobSA9IHJbaV0uaXRlbSkgPT0gbnVsbCA/IHZvaWQgMCA6IG0ubGVmdEljb24uY29sb3IgOiBcIiMyQjJCMzdcIlxuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICkgfSkgfSksXG4gICAgICAgICAgICAgICAgISgoayA9IHJbaV0uaXRlbSkgIT0gbnVsbCAmJiBrLmNvdW50cnlMaXN0KSAmJiAhKCh4ID0gcltpXS5pdGVtKSAhPSBudWxsICYmIHgudGltZVpvbmUpICYmIHAgJiYgKChOID0gcltpXS5pdGVtKSA9PSBudWxsID8gdm9pZCAwIDogTi5yaWdodEljb24pID09IG51bGwgJiYgIW4gJiYgLyogQF9fUFVSRV9fICovIGMobG4sIHsgY2hpbGRyZW46IE0gPyAvKiBAX19QVVJFX18gKi8gYyhcbiAgICAgICAgICAgICAgICAgIHl0LFxuICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICBkZWZhdWx0Q2hlY2tlZDogZihcbiAgICAgICAgICAgICAgICAgICAgICByLFxuICAgICAgICAgICAgICAgICAgICAgIGksXG4gICAgICAgICAgICAgICAgICAgICAgTVxuICAgICAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgICAgICBpZDogKFYgPSByW2ldLml0ZW0pID09IG51bGwgPyB2b2lkIDAgOiBWLnZhbHVlLFxuICAgICAgICAgICAgICAgICAgICBpc1JlcXVpcmVkOiAhMFxuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICkgOiAvKiBAX19QVVJFX18gKi8gYyhcbiAgICAgICAgICAgICAgICAgIHl0LFxuICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICBkZWZhdWx0Q2hlY2tlZDogZFtpXSxcbiAgICAgICAgICAgICAgICAgICAgaWQ6IChSID0gcltpXS5pdGVtKSA9PSBudWxsID8gdm9pZCAwIDogUi52YWx1ZSxcbiAgICAgICAgICAgICAgICAgICAgaXNSZXF1aXJlZDogITBcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICApIH0pLFxuICAgICAgICAgICAgICAgICEoKEkgPSByW2ldLml0ZW0pICE9IG51bGwgJiYgSS5jb3VudHJ5TGlzdCkgJiYgISgoaiA9IHJbaV0uaXRlbSkgIT0gbnVsbCAmJiBqLnRpbWVab25lKSAmJiBuICYmICFwICYmIChNID8gLyogQF9fUFVSRV9fICovIGMoXG4gICAgICAgICAgICAgICAgICBBbixcbiAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJsaXN0XCIsXG4gICAgICAgICAgICAgICAgICAgIGRlZmF1bHRDaGVja2VkOiBPKFxuICAgICAgICAgICAgICAgICAgICAgIHIsXG4gICAgICAgICAgICAgICAgICAgICAgaSxcbiAgICAgICAgICAgICAgICAgICAgICBNXG4gICAgICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgICAgIGlzUmVxdWlyZWQ6ICEwXG4gICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgaVxuICAgICAgICAgICAgICAgICkgOiAvKiBAX19QVVJFX18gKi8gYyhcbiAgICAgICAgICAgICAgICAgIEFuLFxuICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcImxpc3RcIixcbiAgICAgICAgICAgICAgICAgICAgZGVmYXVsdENoZWNrZWQ6IG9baV0sXG4gICAgICAgICAgICAgICAgICAgIGlzUmVxdWlyZWQ6ICEwXG4gICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgaVxuICAgICAgICAgICAgICAgICkpLFxuICAgICAgICAgICAgICAgICgoKFUgPSByW2ldLml0ZW0pID09IG51bGwgPyB2b2lkIDAgOiBVLmF2YXRhcikgfHwgKChfID0gcltpXS5pdGVtKSA9PSBudWxsID8gdm9pZCAwIDogXy5sb2dvTmFtZSkpICYmIC8qIEBfX1BVUkVfXyAqLyBlMSgkNywgeyBjaGlsZHJlbjogW1xuICAgICAgICAgICAgICAgICAgISgocjEgPSByW2ldLml0ZW0pICE9IG51bGwgJiYgcjEuYXZhdGFyKSAmJiAoKEsgPSByW2ldLml0ZW0pID09IG51bGwgPyB2b2lkIDAgOiBLLmxvZ29OYW1lKSAmJiAvKiBAX19QVVJFX18gKi8gYyhcbiAgICAgICAgICAgICAgICAgICAgdXIsXG4gICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICBuYW1lOiAoUSA9IHJbaV0uaXRlbSkgPT0gbnVsbCA/IHZvaWQgMCA6IFEubG9nb05hbWUsXG4gICAgICAgICAgICAgICAgICAgICAgc2l6ZTogXCIxMHB4XCJcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICAgICgoRSA9IHJbaV0uaXRlbSkgPT0gbnVsbCA/IHZvaWQgMCA6IEUuYXZhdGFyKSAmJiAvKiBAX19QVVJFX18gKi8gYyhcbiAgICAgICAgICAgICAgICAgICAgenIsXG4gICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICBzaXplOiBcInhzXCIsXG4gICAgICAgICAgICAgICAgICAgICAgdXJsOiBgJHsoRCA9IHJbaV0uaXRlbSkgPT0gbnVsbCA/IHZvaWQgMCA6IEQuYXZhdGFyLnVybH1gLFxuICAgICAgICAgICAgICAgICAgICAgIG5hbWU6IGAkeyhHID0gcltpXS5pdGVtKSA9PSBudWxsID8gdm9pZCAwIDogRy5hdmF0YXIubmFtZX1gXG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICBdIH0pLFxuICAgICAgICAgICAgICAgICEoKEogPSByW2ldLml0ZW0pICE9IG51bGwgJiYgSi5jb3VudHJ5TGlzdCkgJiYgISgoUyA9IHJbaV0uaXRlbSkgIT0gbnVsbCAmJiBTLnRpbWVab25lKSA/IChXID0gcltpXS5pdGVtKSAhPSBudWxsICYmIFcuc3ViTGFiZWwgPyAvKiBAX19QVVJFX18gKi8gZTEoSzcsIHsgY2hpbGRyZW46IFtcbiAgICAgICAgICAgICAgICAgIC8qIEBfX1BVUkVfXyAqLyBjKEo3LCB7IGNoaWxkcmVuOiBzIH0pLFxuICAgICAgICAgICAgICAgICAgLyogQF9fUFVSRV9fICovIGMoajcsIHsgY2hpbGRyZW46IGwgfSlcbiAgICAgICAgICAgICAgICBdIH0pIDogLyogQF9fUFVSRV9fICovIGMoU2UsIHsgY2hpbGRyZW46IHMgfSkgOiAoUCA9IHJbaV0uaXRlbSkgIT0gbnVsbCAmJiBQLnRpbWVab25lID8gLyogQF9fUFVSRV9fICovIGUxKFNlLCB7IGNoaWxkcmVuOiBbXG4gICAgICAgICAgICAgICAgICAvKiBAX19QVVJFX18gKi8gYyhcbiAgICAgICAgICAgICAgICAgICAgYm4sXG4gICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAkd2lkdGg6ICgodDEgPSAoWiA9IChZID0gcltpXS5pdGVtKSA9PSBudWxsID8gdm9pZCAwIDogWS50aW1lWm9uZSkgPT0gbnVsbCA/IHZvaWQgMCA6IFouem9uZSkgPT0gbnVsbCA/IHZvaWQgMCA6IHQxLmxlbmd0aCkgPD0gNCxcbiAgICAgICAgICAgICAgICAgICAgICBjaGlsZHJlbjogKG4xID0gKGkxID0gcltpXS5pdGVtKSA9PSBudWxsID8gdm9pZCAwIDogaTEudGltZVpvbmUpID09IG51bGwgPyB2b2lkIDAgOiBuMS56b25lXG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgICAvKiBAX19QVVJFX18gKi8gYyhNbiwgeyBpc1RpbWVab25lOiAhMCwgY2hpbGRyZW46IChkMSA9IChzMSA9IHJbaV0uaXRlbSkgPT0gbnVsbCA/IHZvaWQgMCA6IHMxLnRpbWVab25lKSA9PSBudWxsID8gdm9pZCAwIDogZDEudGltZSB9KVxuICAgICAgICAgICAgICAgIF0gfSkgOiAvKiBAX19QVVJFX18gKi8gZTEoU2UsIHsgY2hpbGRyZW46IFtcbiAgICAgICAgICAgICAgICAgIC8qIEBfX1BVUkVfXyAqLyBjKFxuICAgICAgICAgICAgICAgICAgICBibixcbiAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICR3aWR0aDogKChhMSA9IChjMSA9IChiMSA9IHJbaV0uaXRlbSkgPT0gbnVsbCA/IHZvaWQgMCA6IGIxLmNvdW50cnlMaXN0KSA9PSBudWxsID8gdm9pZCAwIDogYzEuY291bnRyeUNvZGUpID09IG51bGwgPyB2b2lkIDAgOiBhMS5sZW5ndGgpIDw9IDQsXG4gICAgICAgICAgICAgICAgICAgICAgY2hpbGRyZW46IChwMSA9IChsMSA9IHJbaV0uaXRlbSkgPT0gbnVsbCA/IHZvaWQgMCA6IGwxLmNvdW50cnlMaXN0KSA9PSBudWxsID8gdm9pZCAwIDogcDEuY291bnRyeUNvZGVcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICAgIC8qIEBfX1BVUkVfXyAqLyBjKE1uLCB7IGlzVGltZVpvbmU6ICExLCBjaGlsZHJlbjogKEExID0gKE0xID0gcltpXS5pdGVtKSA9PSBudWxsID8gdm9pZCAwIDogTTEuY291bnRyeUxpc3QpID09IG51bGwgPyB2b2lkIDAgOiBBMS5jb3VudHJ5TmFtZSB9KVxuICAgICAgICAgICAgICAgIF0gfSksXG4gICAgICAgICAgICAgICAgKCh1MSA9IHJbaV0uaXRlbSkgPT0gbnVsbCA/IHZvaWQgMCA6IHUxLnN1Yk1lbnUpID09ICEwICYmIC8qIEBfX1BVUkVfXyAqLyBjKGU1LCB7IGNoaWxkcmVuOiAvKiBAX19QVVJFX18gKi8gYyhkdCwgeyBkYXRhOiAoaDEgPSByW2ldLml0ZW0pID09IG51bGwgPyB2b2lkIDAgOiBoMS5zdWJNZW51RGF0YSB9KSB9KSxcbiAgICAgICAgICAgICAgICAvKiBAX19QVVJFX18gKi8gZTEobG4sIHsgY2hpbGRyZW46IFtcbiAgICAgICAgICAgICAgICAgICgoQzEgPSByW2ldLml0ZW0pID09IG51bGwgPyB2b2lkIDAgOiBDMS5yaWdodEljb24pICE9IG51bGwgPyAvKiBAX19QVVJFX18gKi8gYyhwbiwgeyBjaGlsZHJlbjogLyogQF9fUFVSRV9fICovIGMoXG4gICAgICAgICAgICAgICAgICAgIFoxLFxuICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgbmFtZTogKFcxID0gKHExID0gcltpXS5pdGVtKSA9PSBudWxsID8gdm9pZCAwIDogcTEucmlnaHRJY29uKSA9PSBudWxsID8gdm9pZCAwIDogVzEubmFtZSxcbiAgICAgICAgICAgICAgICAgICAgICBzaXplOiBcInh4c1wiLFxuICAgICAgICAgICAgICAgICAgICAgIGNvbG9yOiAoUjEgPSByW2ldLml0ZW0pICE9IG51bGwgJiYgUjEucmlnaHRJY29uLmNvbG9yID8gKGsxID0gcltpXS5pdGVtKSA9PSBudWxsID8gdm9pZCAwIDogazEucmlnaHRJY29uLmNvbG9yIDogXCIjMkIyQjM3XCJcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgKSB9KSA6IChOMSA9IHJbaV0uaXRlbSkgIT0gbnVsbCAmJiBOMS5pbmRpY2F0b3IgJiYgKCh2MSA9IHJbaV0uaXRlbSkgPT0gbnVsbCA/IHZvaWQgMCA6IHYxLmluZGljYXRvci5pbmRpY2F0b3JUeXBlLnRvTG93ZXJDYXNlKCkpID09IFwicmlza1wiID8gLyogQF9fUFVSRV9fICovIGMoUTcsIHsgY2hpbGRyZW46IC8qIEBfX1BVUkVfXyAqLyBjKFxuICAgICAgICAgICAgICAgICAgICBvNSxcbiAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgIHR5cGU6IChEMSA9IChTMSA9IHJbaV0uaXRlbSkgPT0gbnVsbCA/IHZvaWQgMCA6IFMxLmluZGljYXRvcikgPT0gbnVsbCA/IHZvaWQgMCA6IEQxLnN0YXR1c1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICApIH0pIDogKChVMSA9IChGMSA9IHJbaV0uaXRlbSkgPT0gbnVsbCA/IHZvaWQgMCA6IEYxLmluZGljYXRvcikgPT0gbnVsbCA/IHZvaWQgMCA6IFUxLmluZGljYXRvclR5cGUudG9Mb3dlckNhc2UoKSkgPT0gXCJzdGF0dXNcIiA/IC8qIEBfX1BVUkVfXyAqLyBjKFo3LCB7IGNoaWxkcmVuOiAvKiBAX19QVVJFX18gKi8gYyhcbiAgICAgICAgICAgICAgICAgICAgbTQsXG4gICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICB0eXBlOiAoTzAgPSAoaDAgPSByW2ldLml0ZW0pID09IG51bGwgPyB2b2lkIDAgOiBoMC5pbmRpY2F0b3IpID09IG51bGwgPyB2b2lkIDAgOiBPMC5zdGF0dXMsXG4gICAgICAgICAgICAgICAgICAgICAgaGFzTGFiZWw6IChnMSA9ICh3MSA9IHJbaV0uaXRlbSkgPT0gbnVsbCA/IHZvaWQgMCA6IHcxLmluZGljYXRvcikgPT0gbnVsbCA/IHZvaWQgMCA6IGcxLmhhc0xhYmVsXG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICkgfSkgOiAoKEIxID0gKEUxID0gcltpXS5pdGVtKSA9PSBudWxsID8gdm9pZCAwIDogRTEuaW5kaWNhdG9yKSA9PSBudWxsID8gdm9pZCAwIDogQjEuaW5kaWNhdG9yVHlwZS50b0xvd2VyQ2FzZSgpKSA9PSBcInByb2dyZXNzXCIgPyAvKiBAX19QVVJFX18gKi8gYyhHNywgeyBjaGlsZHJlbjogLyogQF9fUFVSRV9fICovIGMoXG4gICAgICAgICAgICAgICAgICAgIEM0LFxuICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgcHJvZ3Jlc3M6IChwMCA9IChLMSA9IHJbaV0uaXRlbSkgPT0gbnVsbCA/IHZvaWQgMCA6IEsxLmluZGljYXRvcikgPT0gbnVsbCA/IHZvaWQgMCA6IHAwLnByb2dyZXNzLFxuICAgICAgICAgICAgICAgICAgICAgIHR5cGU6IChIMSA9IChlMCA9IHJbaV0uaXRlbSkgPT0gbnVsbCA/IHZvaWQgMCA6IGUwLmluZGljYXRvcikgPT0gbnVsbCA/IHZvaWQgMCA6IEgxLnN0YXR1cyxcbiAgICAgICAgICAgICAgICAgICAgICBoYXNMYWJlbDogKEkxID0gKHgxID0gcltpXS5pdGVtKSA9PSBudWxsID8gdm9pZCAwIDogeDEuaW5kaWNhdG9yKSA9PSBudWxsID8gdm9pZCAwIDogSTEuaGFzTGFiZWxcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgKSB9KSA6IG51bGwsXG4gICAgICAgICAgICAgICAgICAhKChYMSA9IHJbaV0uaXRlbSkgIT0gbnVsbCAmJiBYMS5pbmRpY2F0b3IpICYmICgoSjEgPSByW2ldLml0ZW0pID09IG51bGwgPyB2b2lkIDAgOiBKMS5pc0Zhdm91cml0ZSkgJiYgLyogQF9fUFVSRV9fICovIGMoWjEsIHsgbmFtZTogXCJTdGFyU29saWRcIiwgc2l6ZTogXCJ4c1wiIH0pLFxuICAgICAgICAgICAgICAgICAgISgoZjAgPSByW2ldLml0ZW0pICE9IG51bGwgJiYgZjAuaW5kaWNhdG9yKSAmJiAhKChJMCA9IHJbaV0uaXRlbSkgIT0gbnVsbCAmJiBJMC5pc0Zhdm91cml0ZSkgJiYgKChPMSA9IHJbaV0uaXRlbSkgPT0gbnVsbCA/IHZvaWQgMCA6IE8xLmlzQWN0aW9uQnV0dG9uKSAmJiAvKiBAX19QVVJFX18gKi8gYyhTZSwgeyBjaGlsZHJlbjogXCJBY3Rpb24gQnRuXCIgfSksXG4gICAgICAgICAgICAgICAgICAhKChWMSA9IHJbaV0uaXRlbSkgIT0gbnVsbCAmJiBWMS5pbmRpY2F0b3IpICYmICEoKEcxID0gcltpXS5pdGVtKSAhPSBudWxsICYmIEcxLmlzRmF2b3VyaXRlKSAmJiAhKChpMCA9IHJbaV0uaXRlbSkgIT0gbnVsbCAmJiBpMC5pc0FjdGlvbkJ1dHRvbikgJiYgKChiMCA9IHJbaV0uaXRlbSkgPT0gbnVsbCA/IHZvaWQgMCA6IGIwLmlzVG9nZ2xlKSAmJiAvKiBAX19QVVJFX18gKi8gYyhTZSwgeyBjaGlsZHJlbjogXCJ0b2dnbGVcIiB9KVxuICAgICAgICAgICAgICAgIF0gfSlcbiAgICAgICAgICAgICAgXVxuICAgICAgICAgICAgfVxuICAgICAgICAgIClcbiAgICAgICAgfVxuICAgICAgKSA6IC8qIEBfX1BVUkVfXyAqLyBlMShcbiAgICAgICAgJGEsXG4gICAgICAgIHtcbiAgICAgICAgICBvbkNsaWNrOiAoKSA9PiB7XG4gICAgICAgICAgICBhICYmIGEocltpXSwgaSk7XG4gICAgICAgICAgfSxcbiAgICAgICAgICAkc3ViTGFiZWw6ICEhKChnMCA9IHJbaV0uaXRlbSkgIT0gbnVsbCAmJiBnMC5zdWJMYWJlbCksXG4gICAgICAgICAgdGFiSW5kZXg6IDAsXG4gICAgICAgICAgJGlzU2VsZWN0ZWQ6IE0gIT0gbnVsbCAmJiBNLmxlbmd0aCA/IGYociwgaSwgTSkgOiAoTSA9PSBudWxsID8gdm9pZCAwIDogTS5sZW5ndGgpID09IG51bGwgPyB6KFtNXSwgciwgaSkgOiAhKHUgIT0gbnVsbCAmJiB1Lmxlbmd0aCkgJiYgdSAhPSBudWxsID8gKHUgPT0gbnVsbCA/IHZvaWQgMCA6IHUudmFsdWUpID09PSAoKHUwID0gcltpXS5pdGVtKSA9PSBudWxsID8gdm9pZCAwIDogdTAudmFsdWUpIDogISF6KHUsIHIsIGkpLFxuICAgICAgICAgICRpc1Njcm9sbDogaCxcbiAgICAgICAgICBjaGlsZHJlbjogW1xuICAgICAgICAgICAgKCh6MCA9IHJbaV0uaXRlbSkgPT0gbnVsbCA/IHZvaWQgMCA6IHowLmxlZnRJY29uKSAmJiAvKiBAX19QVVJFX18gKi8gYyhVMiwgeyBjaGlsZHJlbjogKChWMCA9IEoyID09IG51bGwgPyB2b2lkIDAgOiBKMi5Db3VudHJpZXMuZmlsdGVyKChTMikgPT4ge1xuICAgICAgICAgICAgICB2YXIgRTI7XG4gICAgICAgICAgICAgIHJldHVybiAoKEUyID0gcltpXS5pdGVtKSA9PSBudWxsID8gdm9pZCAwIDogRTIubGVmdEljb24ubmFtZSkgPT0gUzIuQ291bnRyeU5hbWU7XG4gICAgICAgICAgICB9KSkgPT0gbnVsbCA/IHZvaWQgMCA6IFYwLmxlbmd0aCkgPiAwID8gLyogQF9fUFVSRV9fICovIGMoXzcsIHsgY2hpbGRyZW46IC8qIEBfX1BVUkVfXyAqLyBjKFxuICAgICAgICAgICAgICBpNCxcbiAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIG5hbWU6IChXMCA9IHJbaV0uaXRlbSkgPT0gbnVsbCA/IHZvaWQgMCA6IFcwLmxlZnRJY29uLm5hbWUsXG4gICAgICAgICAgICAgICAgc2l6ZTogXCJ4eHNcIixcbiAgICAgICAgICAgICAgICBoaWRlQ2xhc3NOYW1lOiAhMFxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICApIH0pIDogLyogQF9fUFVSRV9fICovIGMocG4sIHsgY2hpbGRyZW46IC8qIEBfX1BVUkVfXyAqLyBjKFxuICAgICAgICAgICAgICBaMSxcbiAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIG5hbWU6IChGMCA9IHJbaV0uaXRlbSkgPT0gbnVsbCA/IHZvaWQgMCA6IEYwLmxlZnRJY29uLm5hbWUsXG4gICAgICAgICAgICAgICAgc2l6ZTogXCJ4eHNcIixcbiAgICAgICAgICAgICAgICBjb2xvcjogKGIyID0gcltpXS5pdGVtKSAhPSBudWxsICYmIGIyLmxlZnRJY29uLmNvbG9yID8gKFoyID0gcltpXS5pdGVtKSA9PSBudWxsID8gdm9pZCAwIDogWjIubGVmdEljb24uY29sb3IgOiBcIiMyQjJCMzdcIlxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICApIH0pIH0pLFxuICAgICAgICAgICAgISgoajAgPSByW2ldLml0ZW0pICE9IG51bGwgJiYgajAuY291bnRyeUxpc3QpICYmICEoKGEyID0gcltpXS5pdGVtKSAhPSBudWxsICYmIGEyLnRpbWVab25lKSAmJiBwICYmICgoQTIgPSByW2ldLml0ZW0pID09IG51bGwgPyB2b2lkIDAgOiBBMi5yaWdodEljb24pID09IG51bGwgJiYgIW4gJiYgLyogQF9fUFVSRV9fICovIGMobG4sIHsgY2hpbGRyZW46IE0gPyAvKiBAX19QVVJFX18gKi8gYyhcbiAgICAgICAgICAgICAgeXQsXG4gICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBkZWZhdWx0Q2hlY2tlZDogZihcbiAgICAgICAgICAgICAgICAgIHIsXG4gICAgICAgICAgICAgICAgICBpLFxuICAgICAgICAgICAgICAgICAgTVxuICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgaWQ6IChPdCA9IHJbaV0uaXRlbSkgPT0gbnVsbCA/IHZvaWQgMCA6IE90LnZhbHVlLFxuICAgICAgICAgICAgICAgIGlzUmVxdWlyZWQ6ICEwXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICkgOiAvKiBAX19QVVJFX18gKi8gYyhcbiAgICAgICAgICAgICAgeXQsXG4gICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBkZWZhdWx0Q2hlY2tlZDogZFtpXSxcbiAgICAgICAgICAgICAgICBpZDogKGZ0ID0gcltpXS5pdGVtKSA9PSBudWxsID8gdm9pZCAwIDogZnQudmFsdWUsXG4gICAgICAgICAgICAgICAgaXNSZXF1aXJlZDogITBcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgKSB9KSxcbiAgICAgICAgICAgICEoKGpyID0gcltpXS5pdGVtKSAhPSBudWxsICYmIGpyLmNvdW50cnlMaXN0KSAmJiAhKChLciA9IHJbaV0uaXRlbSkgIT0gbnVsbCAmJiBLci50aW1lWm9uZSkgJiYgbiAmJiAhcCAmJiAoTSA/IC8qIEBfX1BVUkVfXyAqLyBjKFxuICAgICAgICAgICAgICBBbixcbiAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIG5hbWU6IFwibGlzdFwiLFxuICAgICAgICAgICAgICAgIGRlZmF1bHRDaGVja2VkOiBPKFxuICAgICAgICAgICAgICAgICAgcixcbiAgICAgICAgICAgICAgICAgIGksXG4gICAgICAgICAgICAgICAgICBNXG4gICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICBpc1JlcXVpcmVkOiAhMFxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICBpXG4gICAgICAgICAgICApIDogLyogQF9fUFVSRV9fICovIGMoXG4gICAgICAgICAgICAgIEFuLFxuICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgbmFtZTogXCJsaXN0XCIsXG4gICAgICAgICAgICAgICAgZGVmYXVsdENoZWNrZWQ6IG9baV0sXG4gICAgICAgICAgICAgICAgaXNSZXF1aXJlZDogITBcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgaVxuICAgICAgICAgICAgKSksXG4gICAgICAgICAgICAoKChobyA9IHJbaV0uaXRlbSkgPT0gbnVsbCA/IHZvaWQgMCA6IGhvLmF2YXRhcikgfHwgKChKciA9IHJbaV0uaXRlbSkgPT0gbnVsbCA/IHZvaWQgMCA6IEpyLmxvZ29OYW1lKSkgJiYgLyogQF9fUFVSRV9fICovIGUxKCQ3LCB7IGNoaWxkcmVuOiBbXG4gICAgICAgICAgICAgICEoKF9yID0gcltpXS5pdGVtKSAhPSBudWxsICYmIF9yLmF2YXRhcikgJiYgKCh4ZSA9IHJbaV0uaXRlbSkgPT0gbnVsbCA/IHZvaWQgMCA6IHhlLmxvZ29OYW1lKSAmJiAvKiBAX19QVVJFX18gKi8gYyh1ciwgeyBuYW1lOiAoV2UgPSByW2ldLml0ZW0pID09IG51bGwgPyB2b2lkIDAgOiBXZS5sb2dvTmFtZSwgc2l6ZTogXCIxMHB4XCIgfSksXG4gICAgICAgICAgICAgICgoaGUgPSByW2ldLml0ZW0pID09IG51bGwgPyB2b2lkIDAgOiBoZS5hdmF0YXIpICYmIC8qIEBfX1BVUkVfXyAqLyBjKFxuICAgICAgICAgICAgICAgIHpyLFxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgIHNpemU6IFwieHNcIixcbiAgICAgICAgICAgICAgICAgIHVybDogYCR7KE9vID0gcltpXS5pdGVtKSA9PSBudWxsID8gdm9pZCAwIDogT28uYXZhdGFyLnVybH1gLFxuICAgICAgICAgICAgICAgICAgbmFtZTogYCR7KCRyID0gcltpXS5pdGVtKSA9PSBudWxsID8gdm9pZCAwIDogJHIuYXZhdGFyLm5hbWV9YFxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgXSB9KSxcbiAgICAgICAgICAgICEoKFl0ID0gcltpXS5pdGVtKSAhPSBudWxsICYmIFl0LmNvdW50cnlMaXN0KSAmJiAhKChmbyA9IHJbaV0uaXRlbSkgIT0gbnVsbCAmJiBmby50aW1lWm9uZSkgPyAoZjMgPSByW2ldLml0ZW0pICE9IG51bGwgJiYgZjMuc3ViTGFiZWwgPyAvKiBAX19QVVJFX18gKi8gZTEoSzcsIHsgY2hpbGRyZW46IFtcbiAgICAgICAgICAgICAgLyogQF9fUFVSRV9fICovIGMoSjcsIHsgY2hpbGRyZW46IHMgfSksXG4gICAgICAgICAgICAgIC8qIEBfX1BVUkVfXyAqLyBjKGo3LCB7IGNoaWxkcmVuOiBsIH0pXG4gICAgICAgICAgICBdIH0pIDogLyogQF9fUFVSRV9fICovIGMoU2UsIHsgY2hpbGRyZW46IHMgfSkgOiAoR3QgPSByW2ldLml0ZW0pICE9IG51bGwgJiYgR3QudGltZVpvbmUgPyAvKiBAX19QVVJFX18gKi8gZTEoU2UsIHsgY2hpbGRyZW46IFtcbiAgICAgICAgICAgICAgLyogQF9fUFVSRV9fICovIGMoXG4gICAgICAgICAgICAgICAgYm4sXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgJHdpZHRoOiAoKGdvID0gKGczID0gKFF0ID0gcltpXS5pdGVtKSA9PSBudWxsID8gdm9pZCAwIDogUXQudGltZVpvbmUpID09IG51bGwgPyB2b2lkIDAgOiBnMy56b25lKSA9PSBudWxsID8gdm9pZCAwIDogZ28ubGVuZ3RoKSA8PSA0LFxuICAgICAgICAgICAgICAgICAgY2hpbGRyZW46IChqZSA9IChDbyA9IHJbaV0uaXRlbSkgPT0gbnVsbCA/IHZvaWQgMCA6IENvLnRpbWVab25lKSA9PSBudWxsID8gdm9pZCAwIDogamUuem9uZVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgLyogQF9fUFVSRV9fICovIGMoTW4sIHsgaXNUaW1lWm9uZTogITAsIGNoaWxkcmVuOiAoQzMgPSAoZ3QgPSByW2ldLml0ZW0pID09IG51bGwgPyB2b2lkIDAgOiBndC50aW1lWm9uZSkgPT0gbnVsbCA/IHZvaWQgMCA6IEMzLnRpbWUgfSlcbiAgICAgICAgICAgIF0gfSkgOiAvKiBAX19QVVJFX18gKi8gZTEoU2UsIHsgY2hpbGRyZW46IFtcbiAgICAgICAgICAgICAgLyogQF9fUFVSRV9fICovIGMoXG4gICAgICAgICAgICAgICAgYm4sXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgJHdpZHRoOiAoKG0zID0gKExvID0gKG1vID0gcltpXS5pdGVtKSA9PSBudWxsID8gdm9pZCAwIDogbW8uY291bnRyeUxpc3QpID09IG51bGwgPyB2b2lkIDAgOiBMby5jb3VudHJ5Q29kZSkgPT0gbnVsbCA/IHZvaWQgMCA6IG0zLmxlbmd0aCkgPD0gNCxcbiAgICAgICAgICAgICAgICAgIGNoaWxkcmVuOiAocW8gPSAodm8gPSByW2ldLml0ZW0pID09IG51bGwgPyB2b2lkIDAgOiB2by5jb3VudHJ5TGlzdCkgPT0gbnVsbCA/IHZvaWQgMCA6IHFvLmNvdW50cnlDb2RlXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAvKiBAX19QVVJFX18gKi8gYyhNbiwgeyBpc1RpbWVab25lOiAhMSwgY2hpbGRyZW46ICh5cyA9IChxcyA9IHJbaV0uaXRlbSkgPT0gbnVsbCA/IHZvaWQgMCA6IHFzLmNvdW50cnlMaXN0KSA9PSBudWxsID8gdm9pZCAwIDogeXMuY291bnRyeU5hbWUgfSlcbiAgICAgICAgICAgIF0gfSksXG4gICAgICAgICAgICAoKHdzID0gcltpXS5pdGVtKSA9PSBudWxsID8gdm9pZCAwIDogd3Muc3ViTWVudSkgPT0gITAgJiYgLyogQF9fUFVSRV9fICovIGMoZTUsIHsgY2hpbGRyZW46IC8qIEBfX1BVUkVfXyAqLyBjKGR0LCB7IGRhdGE6ICh4cyA9IHJbaV0uaXRlbSkgPT0gbnVsbCA/IHZvaWQgMCA6IHhzLnN1Yk1lbnVEYXRhIH0pIH0pLFxuICAgICAgICAgICAgLyogQF9fUFVSRV9fICovIGUxKGxuLCB7IGNoaWxkcmVuOiBbXG4gICAgICAgICAgICAgICgoV3MgPSByW2ldLml0ZW0pID09IG51bGwgPyB2b2lkIDAgOiBXcy5yaWdodEljb24pICE9IG51bGwgPyAvKiBAX19QVVJFX18gKi8gYyhwbiwgeyBjaGlsZHJlbjogLyogQF9fUFVSRV9fICovIGMoXG4gICAgICAgICAgICAgICAgWjEsXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgbmFtZTogKEJzID0gKFJzID0gcltpXS5pdGVtKSA9PSBudWxsID8gdm9pZCAwIDogUnMucmlnaHRJY29uKSA9PSBudWxsID8gdm9pZCAwIDogQnMubmFtZSxcbiAgICAgICAgICAgICAgICAgIHNpemU6IFwieHhzXCIsXG4gICAgICAgICAgICAgICAgICBjb2xvcjogKFNzID0gcltpXS5pdGVtKSAhPSBudWxsICYmIFNzLnJpZ2h0SWNvbi5jb2xvciA/IChFcyA9IHJbaV0uaXRlbSkgPT0gbnVsbCA/IHZvaWQgMCA6IEVzLnJpZ2h0SWNvbi5jb2xvciA6IFwiIzJCMkIzN1wiXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICApIH0pIDogKGtzID0gcltpXS5pdGVtKSAhPSBudWxsICYmIGtzLmluZGljYXRvciAmJiAoKE5zID0gcltpXS5pdGVtKSA9PSBudWxsID8gdm9pZCAwIDogTnMuaW5kaWNhdG9yLmluZGljYXRvclR5cGUudG9Mb3dlckNhc2UoKSkgPT0gXCJyaXNrXCIgPyAvKiBAX19QVVJFX18gKi8gYyhRNywgeyBjaGlsZHJlbjogLyogQF9fUFVSRV9fICovIGMoXG4gICAgICAgICAgICAgICAgbzUsXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgdHlwZTogKElzID0gKFRzID0gcltpXS5pdGVtKSA9PSBudWxsID8gdm9pZCAwIDogVHMuaW5kaWNhdG9yKSA9PSBudWxsID8gdm9pZCAwIDogSXMuc3RhdHVzXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICApIH0pIDogKChIcyA9IChEcyA9IHJbaV0uaXRlbSkgPT0gbnVsbCA/IHZvaWQgMCA6IERzLmluZGljYXRvcikgPT0gbnVsbCA/IHZvaWQgMCA6IEhzLmluZGljYXRvclR5cGUudG9Mb3dlckNhc2UoKSkgPT0gXCJzdGF0dXNcIiA/IC8qIEBfX1BVUkVfXyAqLyBjKFo3LCB7IGNoaWxkcmVuOiAvKiBAX19QVVJFX18gKi8gYyhcbiAgICAgICAgICAgICAgICBtNCxcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICB0eXBlOiAoUHMgPSAoVnMgPSByW2ldLml0ZW0pID09IG51bGwgPyB2b2lkIDAgOiBWcy5pbmRpY2F0b3IpID09IG51bGwgPyB2b2lkIDAgOiBQcy5zdGF0dXMsXG4gICAgICAgICAgICAgICAgICBoYXNMYWJlbDogKFhzID0gKEZzID0gcltpXS5pdGVtKSA9PSBudWxsID8gdm9pZCAwIDogRnMuaW5kaWNhdG9yKSA9PSBudWxsID8gdm9pZCAwIDogWHMuaGFzTGFiZWxcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICkgfSkgOiAoKFlzID0gKFVzID0gcltpXS5pdGVtKSA9PSBudWxsID8gdm9pZCAwIDogVXMuaW5kaWNhdG9yKSA9PSBudWxsID8gdm9pZCAwIDogWXMuaW5kaWNhdG9yVHlwZS50b0xvd2VyQ2FzZSgpKSA9PSBcInByb2dyZXNzXCIgPyAvKiBAX19QVVJFX18gKi8gYyhHNywgeyBjaGlsZHJlbjogLyogQF9fUFVSRV9fICovIGMoXG4gICAgICAgICAgICAgICAgQzQsXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgcHJvZ3Jlc3M6IChRcyA9IChHcyA9IHJbaV0uaXRlbSkgPT0gbnVsbCA/IHZvaWQgMCA6IEdzLmluZGljYXRvcikgPT0gbnVsbCA/IHZvaWQgMCA6IFFzLnByb2dyZXNzLFxuICAgICAgICAgICAgICAgICAgdHlwZTogKGpzID0gKFpzID0gcltpXS5pdGVtKSA9PSBudWxsID8gdm9pZCAwIDogWnMuaW5kaWNhdG9yKSA9PSBudWxsID8gdm9pZCAwIDoganMuc3RhdHVzLFxuICAgICAgICAgICAgICAgICAgaGFzTGFiZWw6IChKcyA9IChLcyA9IHJbaV0uaXRlbSkgPT0gbnVsbCA/IHZvaWQgMCA6IEtzLmluZGljYXRvcikgPT0gbnVsbCA/IHZvaWQgMCA6IEpzLmhhc0xhYmVsXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICApIH0pIDogbnVsbCxcbiAgICAgICAgICAgICAgISgoX3MgPSByW2ldLml0ZW0pICE9IG51bGwgJiYgX3MuaW5kaWNhdG9yKSAmJiAoKCRzID0gcltpXS5pdGVtKSA9PSBudWxsID8gdm9pZCAwIDogJHMuaXNGYXZvdXJpdGUpICYmIC8qIEBfX1BVUkVfXyAqLyBjKFoxLCB7IG5hbWU6IFwiU3RhclNvbGlkXCIsIHNpemU6IFwieHNcIiB9KSxcbiAgICAgICAgICAgICAgISgoZTggPSByW2ldLml0ZW0pICE9IG51bGwgJiYgZTguaW5kaWNhdG9yKSAmJiAhKCh0OCA9IHJbaV0uaXRlbSkgIT0gbnVsbCAmJiB0OC5pc0Zhdm91cml0ZSkgJiYgKChvOCA9IHJbaV0uaXRlbSkgPT0gbnVsbCA/IHZvaWQgMCA6IG84LmlzQWN0aW9uQnV0dG9uKSAmJiAvKiBAX19QVVJFX18gKi8gYyhTZSwgeyBjaGlsZHJlbjogXCJBY3Rpb24gQnRuXCIgfSksXG4gICAgICAgICAgICAgICEoKHI4ID0gcltpXS5pdGVtKSAhPSBudWxsICYmIHI4LmluZGljYXRvcikgJiYgISgobjggPSByW2ldLml0ZW0pICE9IG51bGwgJiYgbjguaXNGYXZvdXJpdGUpICYmICEoKGk4ID0gcltpXS5pdGVtKSAhPSBudWxsICYmIGk4LmlzQWN0aW9uQnV0dG9uKSAmJiAoKGE4ID0gcltpXS5pdGVtKSA9PSBudWxsID8gdm9pZCAwIDogYTguaXNUb2dnbGUpICYmIC8qIEBfX1BVUkVfXyAqLyBjKFNlLCB7IGNoaWxkcmVuOiBcInRvZ2dsZVwiIH0pXG4gICAgICAgICAgICBdIH0pXG4gICAgICAgICAgXVxuICAgICAgICB9XG4gICAgICApXG4gICAgfSxcbiAgICAoczggPSByW2ldLml0ZW0pID09IG51bGwgPyB2b2lkIDAgOiBzOC52YWx1ZVxuICApIH0pO1xufVxuY29uc3QgT0IgPSAxLCByNSA9IDI7XG5sZXQgaHIgPSB7fTtcbmNvbnN0IGZCID0gKGUpID0+ICEhaHJbZV0sIGdCID0gKGUsIHQpID0+IHtcbiAgZm9yIChsZXQgbyA9IGU7IG8gPD0gdDsgbysrKVxuICAgIGhyW29dID0gT0I7XG4gIHJldHVybiBuZXcgUHJvbWlzZSgobykgPT4ge1xuICAgIGZvciAobGV0IG4gPSBlOyBuIDw9IHQ7IG4rKylcbiAgICAgIGhyW25dID0gcjU7XG4gICAgbygpO1xuICB9KTtcbn0sIEVvID0gMjg7XG5mdW5jdGlvbiBDQihlKSB7XG4gIGNvbnN0IHtcbiAgICBoaWdoTGlnaHRTZWxlY3RlZE9wdGlvbnM6IHQsXG4gICAgZGF0YTogbyxcbiAgICBpc011bHRpOiBuLFxuICAgIGlzUmFkaW9CdXR0b246IHIsXG4gICAgc2VsZWN0ZWRPcHRpb25zOiBpLFxuICAgIGdyb3VwQnlEaXZpZGVyOiBhLFxuICAgIGRlZmF1bHRWYWx1ZXM6IHMsXG4gICAgbWF4aGVpZ2h0OiBsLFxuICAgIHNlbGVjdGVkTGlzdHM6IHAsXG4gICAgcmVzZXRMaXN0OiBkLFxuICAgIHNob3dTZWxlY3RlZExpc3Q6IGJcbiAgfSA9IGUsIFtNLCB1XSA9IFQxKFtdKSwgW0EsIHpdID0gVDEoW10pLCBbZiwgT10gPSBUMShbXSk7XG4gIGxldCBoID0gMjI1O1xuICBjb25zdCBnID0gbyAmJiAobyA9PSBudWxsID8gdm9pZCAwIDogby5sZW5ndGgpID4gOCA/IGwgfHwgaCA6IG8gJiYgKG8gPT0gbnVsbCA/IHZvaWQgMCA6IG8ubGVuZ3RoKSAqIEVvO1xuICBQMSgoKSA9PiB7XG4gICAgKHMgPT0gbnVsbCA/IHZvaWQgMCA6IHMubGVuZ3RoKSA9PSAwICYmIE8oW10pO1xuICB9LCBbc10pO1xuICBjb25zdCB2ID0gKEYsIFQpID0+IHtcbiAgICB2YXIgSCwgQztcbiAgICBsZXQgdyA9IHtcbiAgICAgIC4uLkYgPT0gbnVsbCA/IHZvaWQgMCA6IEYuaXRlbVxuICAgIH07XG4gICAgaWYgKG4pXG4gICAgICBpZiAoRi5sZW5ndGgpIHtcbiAgICAgICAgbGV0IHEgPSBGO1xuICAgICAgICBjb25zdCBtID0gWy4uLk1dO1xuICAgICAgICBxID09IG51bGwgfHwgcS5tYXAoKHgpID0+IHtcbiAgICAgICAgICBsZXQgTiA9IHgudmFsdWUgLSAxO1xuICAgICAgICAgIG1bTl0gPSAhTVtOXTtcbiAgICAgICAgfSksIHUobSk7XG4gICAgICAgIGxldCBrID0gW107XG4gICAgICAgIHEgPT0gbnVsbCB8fCBxLm1hcCgoeCkgPT4ge1xuICAgICAgICAgIGsucHVzaCh7IGxhYmVsOiB4LmxhYmVsLCB2YWx1ZTogeC52YWx1ZSB9KTtcbiAgICAgICAgfSksIGYucHVzaChrKSwgTyhrKSwgdCAmJiBpICYmIGkoayk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zdCBxID0gWy4uLk1dO1xuICAgICAgICBxW1RdID0gIU1bVF0sIHUocSk7XG4gICAgICAgIGxldCBtO1xuICAgICAgICBvICYmIChtID0geyBsYWJlbDogKEggPSBvW1RdKSA9PSBudWxsID8gdm9pZCAwIDogSC5sYWJlbCwgdmFsdWU6IChDID0gb1tUXSkgPT0gbnVsbCA/IHZvaWQgMCA6IEMudmFsdWUgfSksIGYucHVzaChtKTtcbiAgICAgICAgbGV0IGs7XG4gICAgICAgIGNvbnN0IHggPSBmLnJlZHVjZShcbiAgICAgICAgICAoViwgUikgPT4gKChrID0gVi5maW5kKFxuICAgICAgICAgICAgKEkpID0+IEkudmFsdWUgPT09IFIudmFsdWVcbiAgICAgICAgICApKSA/IGsudGltZXMrKyA6IChSLnRpbWVzID0gMSwgVi5wdXNoKFIpKSwgViksXG4gICAgICAgICAgW11cbiAgICAgICAgKTtcbiAgICAgICAgeCA9PSBudWxsIHx8IHgubWFwKChWLCBSKSA9PiB7XG4gICAgICAgICAgVi50aW1lcyA9PSAyICYmIHguc3BsaWNlKFIsIDEpO1xuICAgICAgICB9KTtcbiAgICAgICAgbGV0IE4gPSBbXTtcbiAgICAgICAgeCA9PSBudWxsIHx8IHgubWFwKChWKSA9PiB7XG4gICAgICAgICAgTi5wdXNoKHsgbGFiZWw6IFYubGFiZWwsIHZhbHVlOiBWLnZhbHVlIH0pO1xuICAgICAgICB9KSwgTyhOKSwgaSAmJiBpKE4pO1xuICAgICAgfVxuICAgIGVsc2UgaWYgKHIpIHtcbiAgICAgIGxldCBxID0gW107XG4gICAgICBpZiAobylcbiAgICAgICAgZm9yIChsZXQgayA9IDA7IGsgPCAobyA9PSBudWxsID8gdm9pZCAwIDogby5sZW5ndGgpOyBrKyspXG4gICAgICAgICAgcVtrXSA9ICExO1xuICAgICAgRiAmJiAocVtUXSA9ICEwKSwgeihxKTtcbiAgICAgIGxldCBtID0ge1xuICAgICAgICB2YWx1ZTogdy52YWx1ZSxcbiAgICAgICAgbGFiZWw6IHcubGFiZWxcbiAgICAgIH07XG4gICAgICBpICYmIGkobSksIE8obSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGxldCBxO1xuICAgICAgdy5jb3VudHJ5TGlzdCA/IHEgPSB7XG4gICAgICAgIGNvdW50cnlMaXN0OiB7IGNvdW50cnlDb2RlOiB3LmNvdW50cnlMaXN0LmNvdW50cnlDb2RlIH0sXG4gICAgICAgIGNvdW50cnlOYW1lOiB3LmNvdW50cnlMaXN0LmNvdW50cnlOYW1lLFxuICAgICAgICB2YWx1ZTogdy52YWx1ZSxcbiAgICAgICAgbGVmdEljb246IHcubGVmdEljb25cbiAgICAgIH0gOiB3LnRpbWVab25lID8gcSA9IHtcbiAgICAgICAgem9uZTogdy50aW1lWm9uZS56b25lLFxuICAgICAgICB0aW1lOiB3LnRpbWVab25lLnRpbWUsXG4gICAgICAgIHZhbHVlOiB3LnZhbHVlXG4gICAgICB9IDogcSA9IHtcbiAgICAgICAgdmFsdWU6IHcudmFsdWUsXG4gICAgICAgIGxhYmVsOiB3LmxhYmVsXG4gICAgICB9LCBpICYmIGkocSksIE8ocSk7XG4gICAgfVxuICB9O1xuICBQMSgoKSA9PiB7XG4gICAgcyAhPSBudWxsICYmIG4gJiYgKG8gPT0gbnVsbCB8fCBvLmZpbHRlcigoRikgPT4ge1xuICAgICAgT2JqZWN0LmtleXMocykuZm9yRWFjaChmdW5jdGlvbihUKSB7XG4gICAgICAgIHZhciB3O1xuICAgICAgICBzW1RdICYmICgodyA9IHNbVF0pICE9IG51bGwgJiYgdy52YWx1ZSkgJiYgRi52YWx1ZSA9PSBzW1RdLnZhbHVlICYmIHYocywgc1tUXS52YWx1ZSAtIDEpO1xuICAgICAgfSk7XG4gICAgfSkpO1xuICB9LCBbXSksIFAxKCgpID0+IHtcbiAgICBkICE9IG51bGwgJiYgZC5sZW5ndGggJiYgdCAmJiAobyA9PSBudWxsIHx8IG8uZmlsdGVyKChGKSA9PiB7XG4gICAgICBPYmplY3Qua2V5cyhkKS5mb3JFYWNoKGZ1bmN0aW9uKFQpIHtcbiAgICAgICAgdmFyIHc7XG4gICAgICAgIGRbVF0gJiYgKCh3ID0gZFtUXSkgIT0gbnVsbCAmJiB3LnZhbHVlKSAmJiBGLnZhbHVlID09IGRbVF0udmFsdWUgJiYgdihkLCBkW1RdLnZhbHVlIC0gMSk7XG4gICAgICB9KTtcbiAgICB9KSk7XG4gIH0sIFtkLCB0XSk7XG4gIGNvbnN0IEwgPSBtMCgoKSA9PiB7XG4gICAgY29uc3QgRiA9IHt9O1xuICAgIGxldCBUID0gITA7XG4gICAgaWYgKG8pXG4gICAgICBmb3IgKGxldCBIID0gMDsgSCA8IChvID09IG51bGwgPyB2b2lkIDAgOiBvLmxlbmd0aCk7IEgrKykge1xuICAgICAgICBjb25zdCBDID0gb1tIXTtcbiAgICAgICAgIShDICE9IG51bGwgJiYgQy5oYXNPd25Qcm9wZXJ0eShcImdyb3VwXCIpKSAmJiBUICYmIChUID0gITEpLCBGW0MgPT0gbnVsbCA/IHZvaWQgMCA6IEMuZ3JvdXBdIHx8IChGW0MgPT0gbnVsbCA/IHZvaWQgMCA6IEMuZ3JvdXBdID0gW10pLCBGW0MgPT0gbnVsbCA/IHZvaWQgMCA6IEMuZ3JvdXBdLnB1c2goQyk7XG4gICAgICB9XG4gICAgcmV0dXJuIE9iamVjdC5lbnRyaWVzKEYpLnJlZHVjZShcbiAgICAgIChILCBbQywgcV0pID0+IChUICYmIEgucHVzaCh7IHR5cGU6IFwiZ3JvdXBcIiwgZ3JvdXA6IEMgfSksIHEuZm9yRWFjaCgobSkgPT4gSC5wdXNoKHsgdHlwZTogXCJpdGVtXCIsIGl0ZW06IG0gfSkpLCBIKSxcbiAgICAgIFtdXG4gICAgKTtcbiAgfSwgW29dKTtcbiAgbGV0IHk7XG4gIGlmIChvKVxuICAgIGZvciAobGV0IEYgPSAwOyBGIDwgKG8gPT0gbnVsbCA/IHZvaWQgMCA6IG8ubGVuZ3RoKTsgRisrKVxuICAgICAgb1tGXS5zdWJNZW51ICYmICh5ID0gITApLCBvW0ZdLnN1YkxhYmVsO1xuICBsZXQgQiA9IG4wKCk7XG4gIFAxKCgpID0+IHtcbiAgICB2YXIgRiwgVCwgdztcbiAgICBpZiAoYiAmJiAoRiA9IEIgPT0gbnVsbCA/IHZvaWQgMCA6IEIuY3VycmVudCkgIT0gbnVsbCAmJiBGLmNoaWxkTm9kZXMpIHtcbiAgICAgIGxldCBIID0gKChUID0gc1swXSkgPT0gbnVsbCA/IHZvaWQgMCA6IFQudmFsdWUpIDw9IDggPyAwIDogMjcsIEMgPSAocyA9PSBudWxsID8gdm9pZCAwIDogcy52YWx1ZSkgPD0gOCA/IDAgOiAyNztcbiAgICAgIEIuY3VycmVudC5jaGlsZE5vZGVzWzBdLnNjcm9sbFRvcCA9IChzID09IG51bGwgPyB2b2lkIDAgOiBzLmxlbmd0aCkgPiAwID8gKCh3ID0gc1swXSkgPT0gbnVsbCA/IHZvaWQgMCA6IHcudmFsdWUpICogSCA6IChzID09IG51bGwgPyB2b2lkIDAgOiBzLnZhbHVlKSAqIEM7XG4gICAgfVxuICB9LCBbYl0pO1xuICBsZXQgWDtcbiAgcmV0dXJuIFAxKCgpID0+IHtcbiAgICB2YXIgRiwgVCwgdztcbiAgICAodyA9IChUID0gKEYgPSBCID09IG51bGwgPyB2b2lkIDAgOiBCLmN1cnJlbnQpID09IG51bGwgPyB2b2lkIDAgOiBGLmNoaWxkcmVuWzBdKSA9PSBudWxsID8gdm9pZCAwIDogVC5jaGlsZHJlblswXSkgIT0gbnVsbCAmJiB3LmNsYXNzTGlzdCAmJiBnICE9IGggJiYgKEIgPT0gbnVsbCB8fCBCLmN1cnJlbnQuY2hpbGRyZW5bMF0uY2hpbGRyZW5bMF0uY2xhc3NMaXN0LmFkZChcbiAgICAgIFwiTGlzdFdyYXBEaXZcIlxuICAgICksIFggPSBCLmN1cnJlbnQuY2hpbGRyZW5bMF0uY2hpbGRyZW5bMF0uY2xpZW50SGVpZ2h0KTtcbiAgfSwgW0IsIGcsIG8sIGhdKSwgLyogQF9fUFVSRV9fICovIGMoVTIsIHsgY2hpbGRyZW46IC8qIEBfX1BVUkVfXyAqLyBjKFxuICAgIGhSLFxuICAgIHtcbiAgICAgIGlzSXRlbUxvYWRlZDogZkIsXG4gICAgICBpdGVtQ291bnQ6IEwubGVuZ3RoLFxuICAgICAgbG9hZE1vcmVJdGVtczogZ0IsXG4gICAgICBjaGlsZHJlbjogKHsgb25JdGVtc1JlbmRlcmVkOiBGLCByZWY6IFQgfSkgPT4gLyogQF9fUFVSRV9fICovIGMoQ1IsIHsgY2hpbGRyZW46IHkgPyAvKiBAX19QVVJFX18gKi8gYyhtUiwgeyBjaGlsZHJlbjogLyogQF9fUFVSRV9fICovIGMoWTcsIHsgY2hpbGRyZW46IC8qIEBfX1BVUkVfXyAqLyBjKFxuICAgICAgICBQNyxcbiAgICAgICAge1xuICAgICAgICAgIGNsYXNzTmFtZTogXCJMaXN0IHN1Ykxpc3RcIixcbiAgICAgICAgICBoZWlnaHQ6IGcsXG4gICAgICAgICAgaXRlbUNvdW50OiBMLmxlbmd0aCxcbiAgICAgICAgICBpdGVtU2l6ZTogKHcpID0+IExbd10udHlwZSA9PT0gXCJncm91cFwiICYmIGEgPyB3ID09IDAgPyAwIDogNiA6IChvID09IG51bGwgPyB2b2lkIDAgOiBvLmxlbmd0aCkgPT0gMSA/IDI0IDogRW8sXG4gICAgICAgICAgb25JdGVtc1JlbmRlcmVkOiBGLFxuICAgICAgICAgIHJlZjogVCxcbiAgICAgICAgICB3aWR0aDogXCJcIixcbiAgICAgICAgICBjaGlsZHJlbjogKHsgaW5kZXg6IHcsIHN0eWxlOiBIIH0pID0+IHtcbiAgICAgICAgICAgIGNvbnN0IEMgPSBMW3ddO1xuICAgICAgICAgICAgaWYgKEMudHlwZSA9PT0gXCJncm91cFwiKVxuICAgICAgICAgICAgICByZXR1cm4gLyogQF9fUFVSRV9fICovIGMoXG4gICAgICAgICAgICAgICAgZG4sXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgc3R5bGU6IHtcbiAgICAgICAgICAgICAgICAgICAgLi4uSCxcbiAgICAgICAgICAgICAgICAgICAgaGVpZ2h0OiB3ID09IEwubGVuZ3RoIC0gMSA/IDI0IDogSC5oZWlnaHRcbiAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICBjaGlsZHJlbjogLyogQF9fUFVSRV9fICovIGMoXG4gICAgICAgICAgICAgICAgICAgIHVuLFxuICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgLi4uZSxcbiAgICAgICAgICAgICAgICAgICAgICBpc0dyb3VwOiBDLnR5cGUgPT09IFwiZ3JvdXBcIixcbiAgICAgICAgICAgICAgICAgICAgICBzdHlsZToge1xuICAgICAgICAgICAgICAgICAgICAgICAgbWFyZ2luQm90dG9tOiBgJHt3ID09IEwubGVuZ3RoIC0gMSA/IFwiMFwiIDogXCI0cHhcIn1gXG4gICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICBkYXRhOiBMLFxuICAgICAgICAgICAgICAgICAgICAgIGluZGV4OiB3LFxuICAgICAgICAgICAgICAgICAgICAgIGxhYmVsOiBDLmdyb3VwLFxuICAgICAgICAgICAgICAgICAgICAgIGdyb3VwQnlEaXZpZGVyOiBhXG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICk7XG4gICAgICAgICAgICBpZiAoQy50eXBlID09PSBcIml0ZW1cIikge1xuICAgICAgICAgICAgICBjb25zdCB7IGl0ZW06IHEgfSA9IEM7XG4gICAgICAgICAgICAgIGxldCBtLCBrO1xuICAgICAgICAgICAgICByZXR1cm4gaHJbd10gPT09IHI1ID8gKG0gPSBgJHtxLmxhYmVsfWAsIG0gPSBgJHtxLnN1YkxhYmVsfWApIDogKG0gPSBcIkxvYWRpbmcuLi5cIiwgayA9IFwiTG9hZGluZy4uLlwiKSwgLyogQF9fUFVSRV9fICovIGMoXG4gICAgICAgICAgICAgICAgZG4sXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgc3R5bGU6IHtcbiAgICAgICAgICAgICAgICAgICAgLi4uSCxcbiAgICAgICAgICAgICAgICAgICAgaGVpZ2h0OiB3ID09IEwubGVuZ3RoIC0gMSA/IDI0IDogSC5oZWlnaHRcbiAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICBjaGlsZHJlbjogLyogQF9fUFVSRV9fICovIGMoXG4gICAgICAgICAgICAgICAgICAgIHVuLFxuICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgLi4uZSxcbiAgICAgICAgICAgICAgICAgICAgICBpc0dyb3VwOiBDLnR5cGUgPT09IFwiZ3JvdXBcIixcbiAgICAgICAgICAgICAgICAgICAgICBzdHlsZToge1xuICAgICAgICAgICAgICAgICAgICAgICAgbWFyZ2luQm90dG9tOiBgJHt3ID09IEwubGVuZ3RoIC0gMSA/IFwiMFwiIDogXCI0cHhcIn1gXG4gICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICBkYXRhOiBMLFxuICAgICAgICAgICAgICAgICAgICAgIGluZGV4OiB3LFxuICAgICAgICAgICAgICAgICAgICAgIG9uU2VsZWN0SGFuZGxlOiB2LFxuICAgICAgICAgICAgICAgICAgICAgIGNoZWNrYm94VmFsdWU6IE0sXG4gICAgICAgICAgICAgICAgICAgICAgbGFiZWw6IG0sXG4gICAgICAgICAgICAgICAgICAgICAgc3ViTGFiZWw6IGssXG4gICAgICAgICAgICAgICAgICAgICAgcmFkaW9CdG5WYWx1ZTogQSxcbiAgICAgICAgICAgICAgICAgICAgICBpc1JhZGlvQnV0dG9uOiByLFxuICAgICAgICAgICAgICAgICAgICAgIGlzTXVsdGk6IG4sXG4gICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdFZhbHVlczogc1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIFwiXCI7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICApIH0pIH0pIDogKFxuICAgICAgICAvL1xuICAgICAgICAvKiBAX19QVVJFX18gKi8gYyhcbiAgICAgICAgICBZNyxcbiAgICAgICAgICB7XG4gICAgICAgICAgICBpc0NvbnRlbnRMYXJnZTogbyAmJiAobyA9PSBudWxsID8gdm9pZCAwIDogby5sZW5ndGgpID4gOCA/IGAke2d9cHhgIDogXCJ0cnVlXCIsXG4gICAgICAgICAgICBjb250ZW50SGVpZ2h0OiAobyA9PSBudWxsID8gdm9pZCAwIDogby5sZW5ndGgpID09IDEgPyAyOCA6IFgsXG4gICAgICAgICAgICByZWY6IEIsXG4gICAgICAgICAgICBjaGlsZHJlbjogLyogQF9fUFVSRV9fICovIGMoXG4gICAgICAgICAgICAgIFA3LFxuICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgY2xhc3NOYW1lOiBcIkxpc3RcIixcbiAgICAgICAgICAgICAgICBoZWlnaHQ6IGcsXG4gICAgICAgICAgICAgICAgaXRlbUNvdW50OiBMLmxlbmd0aCxcbiAgICAgICAgICAgICAgICBpdGVtU2l6ZTogKHcpID0+IExbd10udHlwZSA9PT0gXCJncm91cFwiICYmIGEgPyB3ID09IDAgPyAwIDogNiA6IChvID09IG51bGwgPyB2b2lkIDAgOiBvLmxlbmd0aCkgPT0gMSA/IDI0IDogRW8sXG4gICAgICAgICAgICAgICAgb25JdGVtc1JlbmRlcmVkOiBGLFxuICAgICAgICAgICAgICAgIHJlZjogVCxcbiAgICAgICAgICAgICAgICB3aWR0aDogXCJcIixcbiAgICAgICAgICAgICAgICBjaGlsZHJlbjogKHsgaW5kZXg6IHcsIHN0eWxlOiBIIH0pID0+IHtcbiAgICAgICAgICAgICAgICAgIHZhciBxLCBtO1xuICAgICAgICAgICAgICAgICAgY29uc3QgQyA9IExbd107XG4gICAgICAgICAgICAgICAgICBpZiAoQy50eXBlID09PSBcImdyb3VwXCIpXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiAvKiBAX19QVVJFX18gKi8gYyhcbiAgICAgICAgICAgICAgICAgICAgICBkbixcbiAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICBzdHlsZToge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAuLi5ILFxuICAgICAgICAgICAgICAgICAgICAgICAgICBoZWlnaHQ6IHcgPT0gTC5sZW5ndGggLSAxID8gMjQgOiBILmhlaWdodFxuICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGNoaWxkcmVuOiAvKiBAX19QVVJFX18gKi8gYyhcbiAgICAgICAgICAgICAgICAgICAgICAgICAgdW4sXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAuLi5lLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlzR3JvdXA6IEMudHlwZSA9PT0gXCJncm91cFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0eWxlOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXJnaW5Cb3R0b206IGAke3cgPT0gTC5sZW5ndGggLSAxID8gXCIwXCIgOiBcIjRweFwifWBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGE6IEwsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5kZXg6IHcsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGFiZWw6IEMuZ3JvdXAsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3JvdXBCeURpdmlkZXI6IGFcbiAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgIGlmIChDLnR5cGUgPT09IFwiaXRlbVwiKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHsgaXRlbTogayB9ID0gQztcbiAgICAgICAgICAgICAgICAgICAgbGV0IHgsIE47XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBoclt3XSA9PT0gcjUgPyAoeCA9IGAke2subGFiZWx9YCwgTiA9IGAke2suc3ViTGFiZWx9YCkgOiAoeCA9IFwiTG9hZGluZy4uLlwiLCBOID0gXCJMb2FkaW5nLi4uXCIpLCAvKiBAX19QVVJFX18gKi8gYyhcbiAgICAgICAgICAgICAgICAgICAgICBkbixcbiAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICBzdHlsZToge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAuLi5ILFxuICAgICAgICAgICAgICAgICAgICAgICAgICB0b3A6IChxID0gTFt3XS5pdGVtKSAhPSBudWxsICYmIHEuc3ViTGFiZWwgPyBILnRvcCAqIDEuNSA6IEgudG9wLFxuICAgICAgICAgICAgICAgICAgICAgICAgICBoZWlnaHQ6IChtID0gTFt3XS5pdGVtKSAhPSBudWxsICYmIG0uc3ViTGFiZWwgPyA0MCA6IHcgPT0gTC5sZW5ndGggLSAxID8gMjQgOiBILmhlaWdodFxuICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGNoaWxkcmVuOiAvKiBAX19QVVJFX18gKi8gYyhcbiAgICAgICAgICAgICAgICAgICAgICAgICAgdW4sXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAuLi5lLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlzR3JvdXA6IEMudHlwZSA9PT0gXCJncm91cFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0eWxlOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXJnaW5Cb3R0b206IGAke3cgPT0gTC5sZW5ndGggLSAxID8gXCIwXCIgOiBcIjRweFwifWBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGE6IEwsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5kZXg6IHcsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgb25TZWxlY3RIYW5kbGU6IHYsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hlY2tib3hWYWx1ZTogTSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsYWJlbDogeCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdWJMYWJlbDogTixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByYWRpb0J0blZhbHVlOiBBLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlzUmFkaW9CdXR0b246IHIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaXNNdWx0aTogbixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0VmFsdWVzOiBzLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGVjdGVkTGlzdHM6IGYgfHwgcFxuICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgcmV0dXJuIFwiXCI7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICApXG4gICAgICAgICAgfVxuICAgICAgICApXG4gICAgICApIH0pXG4gICAgfSxcbiAgICBhXG4gICkgfSk7XG59XG52YXIga3AgPSB7IGV4cG9ydHM6IHt9IH07XG4vKiEgcmVhY3QtY2hlY2tib3gtdHJlZSAtIHYxLjguMCB8IDIwMjIgKi9cbihmdW5jdGlvbihlLCB0KSB7XG4gIC8qISBGb3IgbGljZW5zZSBpbmZvcm1hdGlvbiBwbGVhc2Ugc2VlIGluZGV4LmJyb3dzZXIuanMuTElDRU5TRS50eHQgKi9cbiAgKGZ1bmN0aW9uKG8sIG4pIHtcbiAgICBlLmV4cG9ydHMgPSBuKG0xKTtcbiAgfSkoc2VsZiwgKG8pID0+ICgoKSA9PiB7XG4gICAgdmFyIG4gPSB7IDQxODQ6IChzLCBsKSA9PiB7XG4gICAgICB2YXIgcDtcbiAgICAgIChmdW5jdGlvbigpIHtcbiAgICAgICAgdmFyIGQgPSB7fS5oYXNPd25Qcm9wZXJ0eTtcbiAgICAgICAgZnVuY3Rpb24gYigpIHtcbiAgICAgICAgICBmb3IgKHZhciBNID0gW10sIHUgPSAwOyB1IDwgYXJndW1lbnRzLmxlbmd0aDsgdSsrKSB7XG4gICAgICAgICAgICB2YXIgQSA9IGFyZ3VtZW50c1t1XTtcbiAgICAgICAgICAgIGlmIChBKSB7XG4gICAgICAgICAgICAgIHZhciB6ID0gdHlwZW9mIEE7XG4gICAgICAgICAgICAgIGlmICh6ID09PSBcInN0cmluZ1wiIHx8IHogPT09IFwibnVtYmVyXCIpXG4gICAgICAgICAgICAgICAgTS5wdXNoKEEpO1xuICAgICAgICAgICAgICBlbHNlIGlmIChBcnJheS5pc0FycmF5KEEpKSB7XG4gICAgICAgICAgICAgICAgaWYgKEEubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgICB2YXIgZiA9IGIuYXBwbHkobnVsbCwgQSk7XG4gICAgICAgICAgICAgICAgICBmICYmIE0ucHVzaChmKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH0gZWxzZSBpZiAoeiA9PT0gXCJvYmplY3RcIilcbiAgICAgICAgICAgICAgICBpZiAoQS50b1N0cmluZyA9PT0gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZylcbiAgICAgICAgICAgICAgICAgIGZvciAodmFyIE8gaW4gQSlcbiAgICAgICAgICAgICAgICAgICAgZC5jYWxsKEEsIE8pICYmIEFbT10gJiYgTS5wdXNoKE8pO1xuICAgICAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICAgIE0ucHVzaChBLnRvU3RyaW5nKCkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gTS5qb2luKFwiIFwiKTtcbiAgICAgICAgfVxuICAgICAgICBzLmV4cG9ydHMgPyAoYi5kZWZhdWx0ID0gYiwgcy5leHBvcnRzID0gYikgOiAocCA9IChmdW5jdGlvbigpIHtcbiAgICAgICAgICByZXR1cm4gYjtcbiAgICAgICAgfSkuYXBwbHkobCwgW10pKSA9PT0gdm9pZCAwIHx8IChzLmV4cG9ydHMgPSBwKTtcbiAgICAgIH0pKCk7XG4gICAgfSwgODU1MjogKHMsIGwsIHApID0+IHtcbiAgICAgIHZhciBkID0gcCg4NTIpKHAoNTYzOSksIFwiRGF0YVZpZXdcIik7XG4gICAgICBzLmV4cG9ydHMgPSBkO1xuICAgIH0sIDE5ODk6IChzLCBsLCBwKSA9PiB7XG4gICAgICB2YXIgZCA9IHAoMTc4OSksIGIgPSBwKDQwMSksIE0gPSBwKDc2NjcpLCB1ID0gcCgxMzI3KSwgQSA9IHAoMTg2Nik7XG4gICAgICBmdW5jdGlvbiB6KGYpIHtcbiAgICAgICAgdmFyIE8gPSAtMSwgaCA9IGYgPT0gbnVsbCA/IDAgOiBmLmxlbmd0aDtcbiAgICAgICAgZm9yICh0aGlzLmNsZWFyKCk7ICsrTyA8IGg7ICkge1xuICAgICAgICAgIHZhciBnID0gZltPXTtcbiAgICAgICAgICB0aGlzLnNldChnWzBdLCBnWzFdKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgei5wcm90b3R5cGUuY2xlYXIgPSBkLCB6LnByb3RvdHlwZS5kZWxldGUgPSBiLCB6LnByb3RvdHlwZS5nZXQgPSBNLCB6LnByb3RvdHlwZS5oYXMgPSB1LCB6LnByb3RvdHlwZS5zZXQgPSBBLCBzLmV4cG9ydHMgPSB6O1xuICAgIH0sIDg0MDc6IChzLCBsLCBwKSA9PiB7XG4gICAgICB2YXIgZCA9IHAoNzA0MCksIGIgPSBwKDQxMjUpLCBNID0gcCgyMTE3KSwgdSA9IHAoNzUxOCksIEEgPSBwKDQ3MDUpO1xuICAgICAgZnVuY3Rpb24geihmKSB7XG4gICAgICAgIHZhciBPID0gLTEsIGggPSBmID09IG51bGwgPyAwIDogZi5sZW5ndGg7XG4gICAgICAgIGZvciAodGhpcy5jbGVhcigpOyArK08gPCBoOyApIHtcbiAgICAgICAgICB2YXIgZyA9IGZbT107XG4gICAgICAgICAgdGhpcy5zZXQoZ1swXSwgZ1sxXSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHoucHJvdG90eXBlLmNsZWFyID0gZCwgei5wcm90b3R5cGUuZGVsZXRlID0gYiwgei5wcm90b3R5cGUuZ2V0ID0gTSwgei5wcm90b3R5cGUuaGFzID0gdSwgei5wcm90b3R5cGUuc2V0ID0gQSwgcy5leHBvcnRzID0gejtcbiAgICB9LCA3MDcxOiAocywgbCwgcCkgPT4ge1xuICAgICAgdmFyIGQgPSBwKDg1MikocCg1NjM5KSwgXCJNYXBcIik7XG4gICAgICBzLmV4cG9ydHMgPSBkO1xuICAgIH0sIDMzNjk6IChzLCBsLCBwKSA9PiB7XG4gICAgICB2YXIgZCA9IHAoNDc4NSksIGIgPSBwKDEyODUpLCBNID0gcCg2ZTMpLCB1ID0gcCg5OTE2KSwgQSA9IHAoNTI2NSk7XG4gICAgICBmdW5jdGlvbiB6KGYpIHtcbiAgICAgICAgdmFyIE8gPSAtMSwgaCA9IGYgPT0gbnVsbCA/IDAgOiBmLmxlbmd0aDtcbiAgICAgICAgZm9yICh0aGlzLmNsZWFyKCk7ICsrTyA8IGg7ICkge1xuICAgICAgICAgIHZhciBnID0gZltPXTtcbiAgICAgICAgICB0aGlzLnNldChnWzBdLCBnWzFdKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgei5wcm90b3R5cGUuY2xlYXIgPSBkLCB6LnByb3RvdHlwZS5kZWxldGUgPSBiLCB6LnByb3RvdHlwZS5nZXQgPSBNLCB6LnByb3RvdHlwZS5oYXMgPSB1LCB6LnByb3RvdHlwZS5zZXQgPSBBLCBzLmV4cG9ydHMgPSB6O1xuICAgIH0sIDM4MTg6IChzLCBsLCBwKSA9PiB7XG4gICAgICB2YXIgZCA9IHAoODUyKShwKDU2MzkpLCBcIlByb21pc2VcIik7XG4gICAgICBzLmV4cG9ydHMgPSBkO1xuICAgIH0sIDg1MjU6IChzLCBsLCBwKSA9PiB7XG4gICAgICB2YXIgZCA9IHAoODUyKShwKDU2MzkpLCBcIlNldFwiKTtcbiAgICAgIHMuZXhwb3J0cyA9IGQ7XG4gICAgfSwgODY2ODogKHMsIGwsIHApID0+IHtcbiAgICAgIHZhciBkID0gcCgzMzY5KSwgYiA9IHAoNjE5KSwgTSA9IHAoMjM4NSk7XG4gICAgICBmdW5jdGlvbiB1KEEpIHtcbiAgICAgICAgdmFyIHogPSAtMSwgZiA9IEEgPT0gbnVsbCA/IDAgOiBBLmxlbmd0aDtcbiAgICAgICAgZm9yICh0aGlzLl9fZGF0YV9fID0gbmV3IGQoKTsgKyt6IDwgZjsgKVxuICAgICAgICAgIHRoaXMuYWRkKEFbel0pO1xuICAgICAgfVxuICAgICAgdS5wcm90b3R5cGUuYWRkID0gdS5wcm90b3R5cGUucHVzaCA9IGIsIHUucHJvdG90eXBlLmhhcyA9IE0sIHMuZXhwb3J0cyA9IHU7XG4gICAgfSwgNjM4NDogKHMsIGwsIHApID0+IHtcbiAgICAgIHZhciBkID0gcCg4NDA3KSwgYiA9IHAoNzQ2NSksIE0gPSBwKDM3NzkpLCB1ID0gcCg3NTk5KSwgQSA9IHAoNDc1OCksIHogPSBwKDQzMDkpO1xuICAgICAgZnVuY3Rpb24gZihPKSB7XG4gICAgICAgIHZhciBoID0gdGhpcy5fX2RhdGFfXyA9IG5ldyBkKE8pO1xuICAgICAgICB0aGlzLnNpemUgPSBoLnNpemU7XG4gICAgICB9XG4gICAgICBmLnByb3RvdHlwZS5jbGVhciA9IGIsIGYucHJvdG90eXBlLmRlbGV0ZSA9IE0sIGYucHJvdG90eXBlLmdldCA9IHUsIGYucHJvdG90eXBlLmhhcyA9IEEsIGYucHJvdG90eXBlLnNldCA9IHosIHMuZXhwb3J0cyA9IGY7XG4gICAgfSwgMjcwNTogKHMsIGwsIHApID0+IHtcbiAgICAgIHZhciBkID0gcCg1NjM5KS5TeW1ib2w7XG4gICAgICBzLmV4cG9ydHMgPSBkO1xuICAgIH0sIDExNDk6IChzLCBsLCBwKSA9PiB7XG4gICAgICB2YXIgZCA9IHAoNTYzOSkuVWludDhBcnJheTtcbiAgICAgIHMuZXhwb3J0cyA9IGQ7XG4gICAgfSwgNTc3OiAocywgbCwgcCkgPT4ge1xuICAgICAgdmFyIGQgPSBwKDg1MikocCg1NjM5KSwgXCJXZWFrTWFwXCIpO1xuICAgICAgcy5leHBvcnRzID0gZDtcbiAgICB9LCA0OTYzOiAocykgPT4ge1xuICAgICAgcy5leHBvcnRzID0gZnVuY3Rpb24obCwgcCkge1xuICAgICAgICBmb3IgKHZhciBkID0gLTEsIGIgPSBsID09IG51bGwgPyAwIDogbC5sZW5ndGgsIE0gPSAwLCB1ID0gW107ICsrZCA8IGI7ICkge1xuICAgICAgICAgIHZhciBBID0gbFtkXTtcbiAgICAgICAgICBwKEEsIGQsIGwpICYmICh1W00rK10gPSBBKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdTtcbiAgICAgIH07XG4gICAgfSwgNDYzNjogKHMsIGwsIHApID0+IHtcbiAgICAgIHZhciBkID0gcCgyNTQ1KSwgYiA9IHAoNTY5NCksIE0gPSBwKDE0NjkpLCB1ID0gcCg0MTQ0KSwgQSA9IHAoNTc3NiksIHogPSBwKDY3MTkpLCBmID0gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eTtcbiAgICAgIHMuZXhwb3J0cyA9IGZ1bmN0aW9uKE8sIGgpIHtcbiAgICAgICAgdmFyIGcgPSBNKE8pLCB2ID0gIWcgJiYgYihPKSwgTCA9ICFnICYmICF2ICYmIHUoTyksIHkgPSAhZyAmJiAhdiAmJiAhTCAmJiB6KE8pLCBCID0gZyB8fCB2IHx8IEwgfHwgeSwgWCA9IEIgPyBkKE8ubGVuZ3RoLCBTdHJpbmcpIDogW10sIEYgPSBYLmxlbmd0aDtcbiAgICAgICAgZm9yICh2YXIgVCBpbiBPKVxuICAgICAgICAgICFoICYmICFmLmNhbGwoTywgVCkgfHwgQiAmJiAoVCA9PSBcImxlbmd0aFwiIHx8IEwgJiYgKFQgPT0gXCJvZmZzZXRcIiB8fCBUID09IFwicGFyZW50XCIpIHx8IHkgJiYgKFQgPT0gXCJidWZmZXJcIiB8fCBUID09IFwiYnl0ZUxlbmd0aFwiIHx8IFQgPT0gXCJieXRlT2Zmc2V0XCIpIHx8IEEoVCwgRikpIHx8IFgucHVzaChUKTtcbiAgICAgICAgcmV0dXJuIFg7XG4gICAgICB9O1xuICAgIH0sIDI0ODg6IChzKSA9PiB7XG4gICAgICBzLmV4cG9ydHMgPSBmdW5jdGlvbihsLCBwKSB7XG4gICAgICAgIGZvciAodmFyIGQgPSAtMSwgYiA9IHAubGVuZ3RoLCBNID0gbC5sZW5ndGg7ICsrZCA8IGI7IClcbiAgICAgICAgICBsW00gKyBkXSA9IHBbZF07XG4gICAgICAgIHJldHVybiBsO1xuICAgICAgfTtcbiAgICB9LCAyOTA4OiAocykgPT4ge1xuICAgICAgcy5leHBvcnRzID0gZnVuY3Rpb24obCwgcCkge1xuICAgICAgICBmb3IgKHZhciBkID0gLTEsIGIgPSBsID09IG51bGwgPyAwIDogbC5sZW5ndGg7ICsrZCA8IGI7IClcbiAgICAgICAgICBpZiAocChsW2RdLCBkLCBsKSlcbiAgICAgICAgICAgIHJldHVybiAhMDtcbiAgICAgICAgcmV0dXJuICExO1xuICAgICAgfTtcbiAgICB9LCA4NDcwOiAocywgbCwgcCkgPT4ge1xuICAgICAgdmFyIGQgPSBwKDc4MTMpO1xuICAgICAgcy5leHBvcnRzID0gZnVuY3Rpb24oYiwgTSkge1xuICAgICAgICBmb3IgKHZhciB1ID0gYi5sZW5ndGg7IHUtLTsgKVxuICAgICAgICAgIGlmIChkKGJbdV1bMF0sIE0pKVxuICAgICAgICAgICAgcmV0dXJuIHU7XG4gICAgICAgIHJldHVybiAtMTtcbiAgICAgIH07XG4gICAgfSwgODg2NjogKHMsIGwsIHApID0+IHtcbiAgICAgIHZhciBkID0gcCgyNDg4KSwgYiA9IHAoMTQ2OSk7XG4gICAgICBzLmV4cG9ydHMgPSBmdW5jdGlvbihNLCB1LCBBKSB7XG4gICAgICAgIHZhciB6ID0gdShNKTtcbiAgICAgICAgcmV0dXJuIGIoTSkgPyB6IDogZCh6LCBBKE0pKTtcbiAgICAgIH07XG4gICAgfSwgNDIzOTogKHMsIGwsIHApID0+IHtcbiAgICAgIHZhciBkID0gcCgyNzA1KSwgYiA9IHAoOTYwNyksIE0gPSBwKDIzMzMpLCB1ID0gZCA/IGQudG9TdHJpbmdUYWcgOiB2b2lkIDA7XG4gICAgICBzLmV4cG9ydHMgPSBmdW5jdGlvbihBKSB7XG4gICAgICAgIHJldHVybiBBID09IG51bGwgPyBBID09PSB2b2lkIDAgPyBcIltvYmplY3QgVW5kZWZpbmVkXVwiIDogXCJbb2JqZWN0IE51bGxdXCIgOiB1ICYmIHUgaW4gT2JqZWN0KEEpID8gYihBKSA6IE0oQSk7XG4gICAgICB9O1xuICAgIH0sIDk0NTQ6IChzLCBsLCBwKSA9PiB7XG4gICAgICB2YXIgZCA9IHAoNDIzOSksIGIgPSBwKDcwMDUpO1xuICAgICAgcy5leHBvcnRzID0gZnVuY3Rpb24oTSkge1xuICAgICAgICByZXR1cm4gYihNKSAmJiBkKE0pID09IFwiW29iamVjdCBBcmd1bWVudHNdXCI7XG4gICAgICB9O1xuICAgIH0sIDkzOTogKHMsIGwsIHApID0+IHtcbiAgICAgIHZhciBkID0gcCgyNDkyKSwgYiA9IHAoNzAwNSk7XG4gICAgICBzLmV4cG9ydHMgPSBmdW5jdGlvbiBNKHUsIEEsIHosIGYsIE8pIHtcbiAgICAgICAgcmV0dXJuIHUgPT09IEEgfHwgKHUgPT0gbnVsbCB8fCBBID09IG51bGwgfHwgIWIodSkgJiYgIWIoQSkgPyB1ICE9IHUgJiYgQSAhPSBBIDogZCh1LCBBLCB6LCBmLCBNLCBPKSk7XG4gICAgICB9O1xuICAgIH0sIDI0OTI6IChzLCBsLCBwKSA9PiB7XG4gICAgICB2YXIgZCA9IHAoNjM4NCksIGIgPSBwKDcxMTQpLCBNID0gcCg4MzUxKSwgdSA9IHAoNjA5NiksIEEgPSBwKDQxNjApLCB6ID0gcCgxNDY5KSwgZiA9IHAoNDE0NCksIE8gPSBwKDY3MTkpLCBoID0gXCJbb2JqZWN0IEFyZ3VtZW50c11cIiwgZyA9IFwiW29iamVjdCBBcnJheV1cIiwgdiA9IFwiW29iamVjdCBPYmplY3RdXCIsIEwgPSBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5O1xuICAgICAgcy5leHBvcnRzID0gZnVuY3Rpb24oeSwgQiwgWCwgRiwgVCwgdykge1xuICAgICAgICB2YXIgSCA9IHooeSksIEMgPSB6KEIpLCBxID0gSCA/IGcgOiBBKHkpLCBtID0gQyA/IGcgOiBBKEIpLCBrID0gKHEgPSBxID09IGggPyB2IDogcSkgPT0gdiwgeCA9IChtID0gbSA9PSBoID8gdiA6IG0pID09IHYsIE4gPSBxID09IG07XG4gICAgICAgIGlmIChOICYmIGYoeSkpIHtcbiAgICAgICAgICBpZiAoIWYoQikpXG4gICAgICAgICAgICByZXR1cm4gITE7XG4gICAgICAgICAgSCA9ICEwLCBrID0gITE7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKE4gJiYgIWspXG4gICAgICAgICAgcmV0dXJuIHcgfHwgKHcgPSBuZXcgZCgpKSwgSCB8fCBPKHkpID8gYih5LCBCLCBYLCBGLCBULCB3KSA6IE0oeSwgQiwgcSwgWCwgRiwgVCwgdyk7XG4gICAgICAgIGlmICghKDEgJiBYKSkge1xuICAgICAgICAgIHZhciBWID0gayAmJiBMLmNhbGwoeSwgXCJfX3dyYXBwZWRfX1wiKSwgUiA9IHggJiYgTC5jYWxsKEIsIFwiX193cmFwcGVkX19cIik7XG4gICAgICAgICAgaWYgKFYgfHwgUikge1xuICAgICAgICAgICAgdmFyIEkgPSBWID8geS52YWx1ZSgpIDogeSwgaiA9IFIgPyBCLnZhbHVlKCkgOiBCO1xuICAgICAgICAgICAgcmV0dXJuIHcgfHwgKHcgPSBuZXcgZCgpKSwgVChJLCBqLCBYLCBGLCB3KTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuICEhTiAmJiAodyB8fCAodyA9IG5ldyBkKCkpLCB1KHksIEIsIFgsIEYsIFQsIHcpKTtcbiAgICAgIH07XG4gICAgfSwgODQ1ODogKHMsIGwsIHApID0+IHtcbiAgICAgIHZhciBkID0gcCgzNTYwKSwgYiA9IHAoNTM0NiksIE0gPSBwKDMyMTgpLCB1ID0gcCgzNDYpLCBBID0gL15cXFtvYmplY3QgLis/Q29uc3RydWN0b3JcXF0kLywgeiA9IEZ1bmN0aW9uLnByb3RvdHlwZSwgZiA9IE9iamVjdC5wcm90b3R5cGUsIE8gPSB6LnRvU3RyaW5nLCBoID0gZi5oYXNPd25Qcm9wZXJ0eSwgZyA9IFJlZ0V4cChcIl5cIiArIE8uY2FsbChoKS5yZXBsYWNlKC9bXFxcXF4kLiorPygpW1xcXXt9fF0vZywgXCJcXFxcJCZcIikucmVwbGFjZSgvaGFzT3duUHJvcGVydHl8KGZ1bmN0aW9uKS4qPyg/PVxcXFxcXCgpfCBmb3IgLis/KD89XFxcXFxcXSkvZywgXCIkMS4qP1wiKSArIFwiJFwiKTtcbiAgICAgIHMuZXhwb3J0cyA9IGZ1bmN0aW9uKHYpIHtcbiAgICAgICAgcmV0dXJuICEoIU0odikgfHwgYih2KSkgJiYgKGQodikgPyBnIDogQSkudGVzdCh1KHYpKTtcbiAgICAgIH07XG4gICAgfSwgODc0OTogKHMsIGwsIHApID0+IHtcbiAgICAgIHZhciBkID0gcCg0MjM5KSwgYiA9IHAoMTc4MCksIE0gPSBwKDcwMDUpLCB1ID0ge307XG4gICAgICB1W1wiW29iamVjdCBGbG9hdDMyQXJyYXldXCJdID0gdVtcIltvYmplY3QgRmxvYXQ2NEFycmF5XVwiXSA9IHVbXCJbb2JqZWN0IEludDhBcnJheV1cIl0gPSB1W1wiW29iamVjdCBJbnQxNkFycmF5XVwiXSA9IHVbXCJbb2JqZWN0IEludDMyQXJyYXldXCJdID0gdVtcIltvYmplY3QgVWludDhBcnJheV1cIl0gPSB1W1wiW29iamVjdCBVaW50OENsYW1wZWRBcnJheV1cIl0gPSB1W1wiW29iamVjdCBVaW50MTZBcnJheV1cIl0gPSB1W1wiW29iamVjdCBVaW50MzJBcnJheV1cIl0gPSAhMCwgdVtcIltvYmplY3QgQXJndW1lbnRzXVwiXSA9IHVbXCJbb2JqZWN0IEFycmF5XVwiXSA9IHVbXCJbb2JqZWN0IEFycmF5QnVmZmVyXVwiXSA9IHVbXCJbb2JqZWN0IEJvb2xlYW5dXCJdID0gdVtcIltvYmplY3QgRGF0YVZpZXddXCJdID0gdVtcIltvYmplY3QgRGF0ZV1cIl0gPSB1W1wiW29iamVjdCBFcnJvcl1cIl0gPSB1W1wiW29iamVjdCBGdW5jdGlvbl1cIl0gPSB1W1wiW29iamVjdCBNYXBdXCJdID0gdVtcIltvYmplY3QgTnVtYmVyXVwiXSA9IHVbXCJbb2JqZWN0IE9iamVjdF1cIl0gPSB1W1wiW29iamVjdCBSZWdFeHBdXCJdID0gdVtcIltvYmplY3QgU2V0XVwiXSA9IHVbXCJbb2JqZWN0IFN0cmluZ11cIl0gPSB1W1wiW29iamVjdCBXZWFrTWFwXVwiXSA9ICExLCBzLmV4cG9ydHMgPSBmdW5jdGlvbihBKSB7XG4gICAgICAgIHJldHVybiBNKEEpICYmIGIoQS5sZW5ndGgpICYmICEhdVtkKEEpXTtcbiAgICAgIH07XG4gICAgfSwgMjgwOiAocywgbCwgcCkgPT4ge1xuICAgICAgdmFyIGQgPSBwKDU3MjYpLCBiID0gcCg2OTE2KSwgTSA9IE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHk7XG4gICAgICBzLmV4cG9ydHMgPSBmdW5jdGlvbih1KSB7XG4gICAgICAgIGlmICghZCh1KSlcbiAgICAgICAgICByZXR1cm4gYih1KTtcbiAgICAgICAgdmFyIEEgPSBbXTtcbiAgICAgICAgZm9yICh2YXIgeiBpbiBPYmplY3QodSkpXG4gICAgICAgICAgTS5jYWxsKHUsIHopICYmIHogIT0gXCJjb25zdHJ1Y3RvclwiICYmIEEucHVzaCh6KTtcbiAgICAgICAgcmV0dXJuIEE7XG4gICAgICB9O1xuICAgIH0sIDI1NDU6IChzKSA9PiB7XG4gICAgICBzLmV4cG9ydHMgPSBmdW5jdGlvbihsLCBwKSB7XG4gICAgICAgIGZvciAodmFyIGQgPSAtMSwgYiA9IEFycmF5KGwpOyArK2QgPCBsOyApXG4gICAgICAgICAgYltkXSA9IHAoZCk7XG4gICAgICAgIHJldHVybiBiO1xuICAgICAgfTtcbiAgICB9LCAxNzE3OiAocykgPT4ge1xuICAgICAgcy5leHBvcnRzID0gZnVuY3Rpb24obCkge1xuICAgICAgICByZXR1cm4gZnVuY3Rpb24ocCkge1xuICAgICAgICAgIHJldHVybiBsKHApO1xuICAgICAgICB9O1xuICAgICAgfTtcbiAgICB9LCA0NzU3OiAocykgPT4ge1xuICAgICAgcy5leHBvcnRzID0gZnVuY3Rpb24obCwgcCkge1xuICAgICAgICByZXR1cm4gbC5oYXMocCk7XG4gICAgICB9O1xuICAgIH0sIDQ0Mjk6IChzLCBsLCBwKSA9PiB7XG4gICAgICB2YXIgZCA9IHAoNTYzOSlbXCJfX2NvcmUtanNfc2hhcmVkX19cIl07XG4gICAgICBzLmV4cG9ydHMgPSBkO1xuICAgIH0sIDcxMTQ6IChzLCBsLCBwKSA9PiB7XG4gICAgICB2YXIgZCA9IHAoODY2OCksIGIgPSBwKDI5MDgpLCBNID0gcCg0NzU3KTtcbiAgICAgIHMuZXhwb3J0cyA9IGZ1bmN0aW9uKHUsIEEsIHosIGYsIE8sIGgpIHtcbiAgICAgICAgdmFyIGcgPSAxICYgeiwgdiA9IHUubGVuZ3RoLCBMID0gQS5sZW5ndGg7XG4gICAgICAgIGlmICh2ICE9IEwgJiYgIShnICYmIEwgPiB2KSlcbiAgICAgICAgICByZXR1cm4gITE7XG4gICAgICAgIHZhciB5ID0gaC5nZXQodSksIEIgPSBoLmdldChBKTtcbiAgICAgICAgaWYgKHkgJiYgQilcbiAgICAgICAgICByZXR1cm4geSA9PSBBICYmIEIgPT0gdTtcbiAgICAgICAgdmFyIFggPSAtMSwgRiA9ICEwLCBUID0gMiAmIHogPyBuZXcgZCgpIDogdm9pZCAwO1xuICAgICAgICBmb3IgKGguc2V0KHUsIEEpLCBoLnNldChBLCB1KTsgKytYIDwgdjsgKSB7XG4gICAgICAgICAgdmFyIHcgPSB1W1hdLCBIID0gQVtYXTtcbiAgICAgICAgICBpZiAoZilcbiAgICAgICAgICAgIHZhciBDID0gZyA/IGYoSCwgdywgWCwgQSwgdSwgaCkgOiBmKHcsIEgsIFgsIHUsIEEsIGgpO1xuICAgICAgICAgIGlmIChDICE9PSB2b2lkIDApIHtcbiAgICAgICAgICAgIGlmIChDKVxuICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIEYgPSAhMTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoVCkge1xuICAgICAgICAgICAgaWYgKCFiKEEsIGZ1bmN0aW9uKHEsIG0pIHtcbiAgICAgICAgICAgICAgaWYgKCFNKFQsIG0pICYmICh3ID09PSBxIHx8IE8odywgcSwgeiwgZiwgaCkpKVxuICAgICAgICAgICAgICAgIHJldHVybiBULnB1c2gobSk7XG4gICAgICAgICAgICB9KSkge1xuICAgICAgICAgICAgICBGID0gITE7XG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gZWxzZSBpZiAodyAhPT0gSCAmJiAhTyh3LCBILCB6LCBmLCBoKSkge1xuICAgICAgICAgICAgRiA9ICExO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBoLmRlbGV0ZSh1KSwgaC5kZWxldGUoQSksIEY7XG4gICAgICB9O1xuICAgIH0sIDgzNTE6IChzLCBsLCBwKSA9PiB7XG4gICAgICB2YXIgZCA9IHAoMjcwNSksIGIgPSBwKDExNDkpLCBNID0gcCg3ODEzKSwgdSA9IHAoNzExNCksIEEgPSBwKDg3NzYpLCB6ID0gcCgxODE0KSwgZiA9IGQgPyBkLnByb3RvdHlwZSA6IHZvaWQgMCwgTyA9IGYgPyBmLnZhbHVlT2YgOiB2b2lkIDA7XG4gICAgICBzLmV4cG9ydHMgPSBmdW5jdGlvbihoLCBnLCB2LCBMLCB5LCBCLCBYKSB7XG4gICAgICAgIHN3aXRjaCAodikge1xuICAgICAgICAgIGNhc2UgXCJbb2JqZWN0IERhdGFWaWV3XVwiOlxuICAgICAgICAgICAgaWYgKGguYnl0ZUxlbmd0aCAhPSBnLmJ5dGVMZW5ndGggfHwgaC5ieXRlT2Zmc2V0ICE9IGcuYnl0ZU9mZnNldClcbiAgICAgICAgICAgICAgcmV0dXJuICExO1xuICAgICAgICAgICAgaCA9IGguYnVmZmVyLCBnID0gZy5idWZmZXI7XG4gICAgICAgICAgY2FzZSBcIltvYmplY3QgQXJyYXlCdWZmZXJdXCI6XG4gICAgICAgICAgICByZXR1cm4gIShoLmJ5dGVMZW5ndGggIT0gZy5ieXRlTGVuZ3RoIHx8ICFCKG5ldyBiKGgpLCBuZXcgYihnKSkpO1xuICAgICAgICAgIGNhc2UgXCJbb2JqZWN0IEJvb2xlYW5dXCI6XG4gICAgICAgICAgY2FzZSBcIltvYmplY3QgRGF0ZV1cIjpcbiAgICAgICAgICBjYXNlIFwiW29iamVjdCBOdW1iZXJdXCI6XG4gICAgICAgICAgICByZXR1cm4gTSgraCwgK2cpO1xuICAgICAgICAgIGNhc2UgXCJbb2JqZWN0IEVycm9yXVwiOlxuICAgICAgICAgICAgcmV0dXJuIGgubmFtZSA9PSBnLm5hbWUgJiYgaC5tZXNzYWdlID09IGcubWVzc2FnZTtcbiAgICAgICAgICBjYXNlIFwiW29iamVjdCBSZWdFeHBdXCI6XG4gICAgICAgICAgY2FzZSBcIltvYmplY3QgU3RyaW5nXVwiOlxuICAgICAgICAgICAgcmV0dXJuIGggPT0gZyArIFwiXCI7XG4gICAgICAgICAgY2FzZSBcIltvYmplY3QgTWFwXVwiOlxuICAgICAgICAgICAgdmFyIEYgPSBBO1xuICAgICAgICAgIGNhc2UgXCJbb2JqZWN0IFNldF1cIjpcbiAgICAgICAgICAgIHZhciBUID0gMSAmIEw7XG4gICAgICAgICAgICBpZiAoRiB8fCAoRiA9IHopLCBoLnNpemUgIT0gZy5zaXplICYmICFUKVxuICAgICAgICAgICAgICByZXR1cm4gITE7XG4gICAgICAgICAgICB2YXIgdyA9IFguZ2V0KGgpO1xuICAgICAgICAgICAgaWYgKHcpXG4gICAgICAgICAgICAgIHJldHVybiB3ID09IGc7XG4gICAgICAgICAgICBMIHw9IDIsIFguc2V0KGgsIGcpO1xuICAgICAgICAgICAgdmFyIEggPSB1KEYoaCksIEYoZyksIEwsIHksIEIsIFgpO1xuICAgICAgICAgICAgcmV0dXJuIFguZGVsZXRlKGgpLCBIO1xuICAgICAgICAgIGNhc2UgXCJbb2JqZWN0IFN5bWJvbF1cIjpcbiAgICAgICAgICAgIGlmIChPKVxuICAgICAgICAgICAgICByZXR1cm4gTy5jYWxsKGgpID09IE8uY2FsbChnKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gITE7XG4gICAgICB9O1xuICAgIH0sIDYwOTY6IChzLCBsLCBwKSA9PiB7XG4gICAgICB2YXIgZCA9IHAoODIzNCksIGIgPSBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5O1xuICAgICAgcy5leHBvcnRzID0gZnVuY3Rpb24oTSwgdSwgQSwgeiwgZiwgTykge1xuICAgICAgICB2YXIgaCA9IDEgJiBBLCBnID0gZChNKSwgdiA9IGcubGVuZ3RoO1xuICAgICAgICBpZiAodiAhPSBkKHUpLmxlbmd0aCAmJiAhaClcbiAgICAgICAgICByZXR1cm4gITE7XG4gICAgICAgIGZvciAodmFyIEwgPSB2OyBMLS07ICkge1xuICAgICAgICAgIHZhciB5ID0gZ1tMXTtcbiAgICAgICAgICBpZiAoIShoID8geSBpbiB1IDogYi5jYWxsKHUsIHkpKSlcbiAgICAgICAgICAgIHJldHVybiAhMTtcbiAgICAgICAgfVxuICAgICAgICB2YXIgQiA9IE8uZ2V0KE0pLCBYID0gTy5nZXQodSk7XG4gICAgICAgIGlmIChCICYmIFgpXG4gICAgICAgICAgcmV0dXJuIEIgPT0gdSAmJiBYID09IE07XG4gICAgICAgIHZhciBGID0gITA7XG4gICAgICAgIE8uc2V0KE0sIHUpLCBPLnNldCh1LCBNKTtcbiAgICAgICAgZm9yICh2YXIgVCA9IGg7ICsrTCA8IHY7ICkge1xuICAgICAgICAgIHZhciB3ID0gTVt5ID0gZ1tMXV0sIEggPSB1W3ldO1xuICAgICAgICAgIGlmICh6KVxuICAgICAgICAgICAgdmFyIEMgPSBoID8geihILCB3LCB5LCB1LCBNLCBPKSA6IHoodywgSCwgeSwgTSwgdSwgTyk7XG4gICAgICAgICAgaWYgKCEoQyA9PT0gdm9pZCAwID8gdyA9PT0gSCB8fCBmKHcsIEgsIEEsIHosIE8pIDogQykpIHtcbiAgICAgICAgICAgIEYgPSAhMTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cbiAgICAgICAgICBUIHx8IChUID0geSA9PSBcImNvbnN0cnVjdG9yXCIpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChGICYmICFUKSB7XG4gICAgICAgICAgdmFyIHEgPSBNLmNvbnN0cnVjdG9yLCBtID0gdS5jb25zdHJ1Y3RvcjtcbiAgICAgICAgICBxID09IG0gfHwgIShcImNvbnN0cnVjdG9yXCIgaW4gTSkgfHwgIShcImNvbnN0cnVjdG9yXCIgaW4gdSkgfHwgdHlwZW9mIHEgPT0gXCJmdW5jdGlvblwiICYmIHEgaW5zdGFuY2VvZiBxICYmIHR5cGVvZiBtID09IFwiZnVuY3Rpb25cIiAmJiBtIGluc3RhbmNlb2YgbSB8fCAoRiA9ICExKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gTy5kZWxldGUoTSksIE8uZGVsZXRlKHUpLCBGO1xuICAgICAgfTtcbiAgICB9LCAxOTU3OiAocywgbCwgcCkgPT4ge1xuICAgICAgdmFyIGQgPSB0eXBlb2YgcC5nID09IFwib2JqZWN0XCIgJiYgcC5nICYmIHAuZy5PYmplY3QgPT09IE9iamVjdCAmJiBwLmc7XG4gICAgICBzLmV4cG9ydHMgPSBkO1xuICAgIH0sIDgyMzQ6IChzLCBsLCBwKSA9PiB7XG4gICAgICB2YXIgZCA9IHAoODg2NiksIGIgPSBwKDk1NTEpLCBNID0gcCgzNjc0KTtcbiAgICAgIHMuZXhwb3J0cyA9IGZ1bmN0aW9uKHUpIHtcbiAgICAgICAgcmV0dXJuIGQodSwgTSwgYik7XG4gICAgICB9O1xuICAgIH0sIDUwNTA6IChzLCBsLCBwKSA9PiB7XG4gICAgICB2YXIgZCA9IHAoNzAxOSk7XG4gICAgICBzLmV4cG9ydHMgPSBmdW5jdGlvbihiLCBNKSB7XG4gICAgICAgIHZhciB1ID0gYi5fX2RhdGFfXztcbiAgICAgICAgcmV0dXJuIGQoTSkgPyB1W3R5cGVvZiBNID09IFwic3RyaW5nXCIgPyBcInN0cmluZ1wiIDogXCJoYXNoXCJdIDogdS5tYXA7XG4gICAgICB9O1xuICAgIH0sIDg1MjogKHMsIGwsIHApID0+IHtcbiAgICAgIHZhciBkID0gcCg4NDU4KSwgYiA9IHAoNzgwMSk7XG4gICAgICBzLmV4cG9ydHMgPSBmdW5jdGlvbihNLCB1KSB7XG4gICAgICAgIHZhciBBID0gYihNLCB1KTtcbiAgICAgICAgcmV0dXJuIGQoQSkgPyBBIDogdm9pZCAwO1xuICAgICAgfTtcbiAgICB9LCA5NjA3OiAocywgbCwgcCkgPT4ge1xuICAgICAgdmFyIGQgPSBwKDI3MDUpLCBiID0gT2JqZWN0LnByb3RvdHlwZSwgTSA9IGIuaGFzT3duUHJvcGVydHksIHUgPSBiLnRvU3RyaW5nLCBBID0gZCA/IGQudG9TdHJpbmdUYWcgOiB2b2lkIDA7XG4gICAgICBzLmV4cG9ydHMgPSBmdW5jdGlvbih6KSB7XG4gICAgICAgIHZhciBmID0gTS5jYWxsKHosIEEpLCBPID0geltBXTtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICB6W0FdID0gdm9pZCAwO1xuICAgICAgICAgIHZhciBoID0gITA7XG4gICAgICAgIH0gY2F0Y2gge1xuICAgICAgICB9XG4gICAgICAgIHZhciBnID0gdS5jYWxsKHopO1xuICAgICAgICByZXR1cm4gaCAmJiAoZiA/IHpbQV0gPSBPIDogZGVsZXRlIHpbQV0pLCBnO1xuICAgICAgfTtcbiAgICB9LCA5NTUxOiAocywgbCwgcCkgPT4ge1xuICAgICAgdmFyIGQgPSBwKDQ5NjMpLCBiID0gcCg0NzkpLCBNID0gT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZSwgdSA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMsIEEgPSB1ID8gZnVuY3Rpb24oeikge1xuICAgICAgICByZXR1cm4geiA9PSBudWxsID8gW10gOiAoeiA9IE9iamVjdCh6KSwgZCh1KHopLCBmdW5jdGlvbihmKSB7XG4gICAgICAgICAgcmV0dXJuIE0uY2FsbCh6LCBmKTtcbiAgICAgICAgfSkpO1xuICAgICAgfSA6IGI7XG4gICAgICBzLmV4cG9ydHMgPSBBO1xuICAgIH0sIDQxNjA6IChzLCBsLCBwKSA9PiB7XG4gICAgICB2YXIgZCA9IHAoODU1MiksIGIgPSBwKDcwNzEpLCBNID0gcCgzODE4KSwgdSA9IHAoODUyNSksIEEgPSBwKDU3NyksIHogPSBwKDQyMzkpLCBmID0gcCgzNDYpLCBPID0gXCJbb2JqZWN0IE1hcF1cIiwgaCA9IFwiW29iamVjdCBQcm9taXNlXVwiLCBnID0gXCJbb2JqZWN0IFNldF1cIiwgdiA9IFwiW29iamVjdCBXZWFrTWFwXVwiLCBMID0gXCJbb2JqZWN0IERhdGFWaWV3XVwiLCB5ID0gZihkKSwgQiA9IGYoYiksIFggPSBmKE0pLCBGID0gZih1KSwgVCA9IGYoQSksIHcgPSB6O1xuICAgICAgKGQgJiYgdyhuZXcgZChuZXcgQXJyYXlCdWZmZXIoMSkpKSAhPSBMIHx8IGIgJiYgdyhuZXcgYigpKSAhPSBPIHx8IE0gJiYgdyhNLnJlc29sdmUoKSkgIT0gaCB8fCB1ICYmIHcobmV3IHUoKSkgIT0gZyB8fCBBICYmIHcobmV3IEEoKSkgIT0gdikgJiYgKHcgPSBmdW5jdGlvbihIKSB7XG4gICAgICAgIHZhciBDID0geihIKSwgcSA9IEMgPT0gXCJbb2JqZWN0IE9iamVjdF1cIiA/IEguY29uc3RydWN0b3IgOiB2b2lkIDAsIG0gPSBxID8gZihxKSA6IFwiXCI7XG4gICAgICAgIGlmIChtKVxuICAgICAgICAgIHN3aXRjaCAobSkge1xuICAgICAgICAgICAgY2FzZSB5OlxuICAgICAgICAgICAgICByZXR1cm4gTDtcbiAgICAgICAgICAgIGNhc2UgQjpcbiAgICAgICAgICAgICAgcmV0dXJuIE87XG4gICAgICAgICAgICBjYXNlIFg6XG4gICAgICAgICAgICAgIHJldHVybiBoO1xuICAgICAgICAgICAgY2FzZSBGOlxuICAgICAgICAgICAgICByZXR1cm4gZztcbiAgICAgICAgICAgIGNhc2UgVDpcbiAgICAgICAgICAgICAgcmV0dXJuIHY7XG4gICAgICAgICAgfVxuICAgICAgICByZXR1cm4gQztcbiAgICAgIH0pLCBzLmV4cG9ydHMgPSB3O1xuICAgIH0sIDc4MDE6IChzKSA9PiB7XG4gICAgICBzLmV4cG9ydHMgPSBmdW5jdGlvbihsLCBwKSB7XG4gICAgICAgIHJldHVybiBsID09IG51bGwgPyB2b2lkIDAgOiBsW3BdO1xuICAgICAgfTtcbiAgICB9LCAxNzg5OiAocywgbCwgcCkgPT4ge1xuICAgICAgdmFyIGQgPSBwKDQ1MzYpO1xuICAgICAgcy5leHBvcnRzID0gZnVuY3Rpb24oKSB7XG4gICAgICAgIHRoaXMuX19kYXRhX18gPSBkID8gZChudWxsKSA6IHt9LCB0aGlzLnNpemUgPSAwO1xuICAgICAgfTtcbiAgICB9LCA0MDE6IChzKSA9PiB7XG4gICAgICBzLmV4cG9ydHMgPSBmdW5jdGlvbihsKSB7XG4gICAgICAgIHZhciBwID0gdGhpcy5oYXMobCkgJiYgZGVsZXRlIHRoaXMuX19kYXRhX19bbF07XG4gICAgICAgIHJldHVybiB0aGlzLnNpemUgLT0gcCA/IDEgOiAwLCBwO1xuICAgICAgfTtcbiAgICB9LCA3NjY3OiAocywgbCwgcCkgPT4ge1xuICAgICAgdmFyIGQgPSBwKDQ1MzYpLCBiID0gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eTtcbiAgICAgIHMuZXhwb3J0cyA9IGZ1bmN0aW9uKE0pIHtcbiAgICAgICAgdmFyIHUgPSB0aGlzLl9fZGF0YV9fO1xuICAgICAgICBpZiAoZCkge1xuICAgICAgICAgIHZhciBBID0gdVtNXTtcbiAgICAgICAgICByZXR1cm4gQSA9PT0gXCJfX2xvZGFzaF9oYXNoX3VuZGVmaW5lZF9fXCIgPyB2b2lkIDAgOiBBO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBiLmNhbGwodSwgTSkgPyB1W01dIDogdm9pZCAwO1xuICAgICAgfTtcbiAgICB9LCAxMzI3OiAocywgbCwgcCkgPT4ge1xuICAgICAgdmFyIGQgPSBwKDQ1MzYpLCBiID0gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eTtcbiAgICAgIHMuZXhwb3J0cyA9IGZ1bmN0aW9uKE0pIHtcbiAgICAgICAgdmFyIHUgPSB0aGlzLl9fZGF0YV9fO1xuICAgICAgICByZXR1cm4gZCA/IHVbTV0gIT09IHZvaWQgMCA6IGIuY2FsbCh1LCBNKTtcbiAgICAgIH07XG4gICAgfSwgMTg2NjogKHMsIGwsIHApID0+IHtcbiAgICAgIHZhciBkID0gcCg0NTM2KTtcbiAgICAgIHMuZXhwb3J0cyA9IGZ1bmN0aW9uKGIsIE0pIHtcbiAgICAgICAgdmFyIHUgPSB0aGlzLl9fZGF0YV9fO1xuICAgICAgICByZXR1cm4gdGhpcy5zaXplICs9IHRoaXMuaGFzKGIpID8gMCA6IDEsIHVbYl0gPSBkICYmIE0gPT09IHZvaWQgMCA/IFwiX19sb2Rhc2hfaGFzaF91bmRlZmluZWRfX1wiIDogTSwgdGhpcztcbiAgICAgIH07XG4gICAgfSwgNTc3NjogKHMpID0+IHtcbiAgICAgIHZhciBsID0gL14oPzowfFsxLTldXFxkKikkLztcbiAgICAgIHMuZXhwb3J0cyA9IGZ1bmN0aW9uKHAsIGQpIHtcbiAgICAgICAgdmFyIGIgPSB0eXBlb2YgcDtcbiAgICAgICAgcmV0dXJuICEhKGQgPSBkID8/IDkwMDcxOTkyNTQ3NDA5OTEpICYmIChiID09IFwibnVtYmVyXCIgfHwgYiAhPSBcInN5bWJvbFwiICYmIGwudGVzdChwKSkgJiYgcCA+IC0xICYmIHAgJSAxID09IDAgJiYgcCA8IGQ7XG4gICAgICB9O1xuICAgIH0sIDcwMTk6IChzKSA9PiB7XG4gICAgICBzLmV4cG9ydHMgPSBmdW5jdGlvbihsKSB7XG4gICAgICAgIHZhciBwID0gdHlwZW9mIGw7XG4gICAgICAgIHJldHVybiBwID09IFwic3RyaW5nXCIgfHwgcCA9PSBcIm51bWJlclwiIHx8IHAgPT0gXCJzeW1ib2xcIiB8fCBwID09IFwiYm9vbGVhblwiID8gbCAhPT0gXCJfX3Byb3RvX19cIiA6IGwgPT09IG51bGw7XG4gICAgICB9O1xuICAgIH0sIDUzNDY6IChzLCBsLCBwKSA9PiB7XG4gICAgICB2YXIgZCwgYiA9IHAoNDQyOSksIE0gPSAoZCA9IC9bXi5dKyQvLmV4ZWMoYiAmJiBiLmtleXMgJiYgYi5rZXlzLklFX1BST1RPIHx8IFwiXCIpKSA/IFwiU3ltYm9sKHNyYylfMS5cIiArIGQgOiBcIlwiO1xuICAgICAgcy5leHBvcnRzID0gZnVuY3Rpb24odSkge1xuICAgICAgICByZXR1cm4gISFNICYmIE0gaW4gdTtcbiAgICAgIH07XG4gICAgfSwgNTcyNjogKHMpID0+IHtcbiAgICAgIHZhciBsID0gT2JqZWN0LnByb3RvdHlwZTtcbiAgICAgIHMuZXhwb3J0cyA9IGZ1bmN0aW9uKHApIHtcbiAgICAgICAgdmFyIGQgPSBwICYmIHAuY29uc3RydWN0b3I7XG4gICAgICAgIHJldHVybiBwID09PSAodHlwZW9mIGQgPT0gXCJmdW5jdGlvblwiICYmIGQucHJvdG90eXBlIHx8IGwpO1xuICAgICAgfTtcbiAgICB9LCA3MDQwOiAocykgPT4ge1xuICAgICAgcy5leHBvcnRzID0gZnVuY3Rpb24oKSB7XG4gICAgICAgIHRoaXMuX19kYXRhX18gPSBbXSwgdGhpcy5zaXplID0gMDtcbiAgICAgIH07XG4gICAgfSwgNDEyNTogKHMsIGwsIHApID0+IHtcbiAgICAgIHZhciBkID0gcCg4NDcwKSwgYiA9IEFycmF5LnByb3RvdHlwZS5zcGxpY2U7XG4gICAgICBzLmV4cG9ydHMgPSBmdW5jdGlvbihNKSB7XG4gICAgICAgIHZhciB1ID0gdGhpcy5fX2RhdGFfXywgQSA9IGQodSwgTSk7XG4gICAgICAgIHJldHVybiAhKEEgPCAwIHx8IChBID09IHUubGVuZ3RoIC0gMSA/IHUucG9wKCkgOiBiLmNhbGwodSwgQSwgMSksIC0tdGhpcy5zaXplLCAwKSk7XG4gICAgICB9O1xuICAgIH0sIDIxMTc6IChzLCBsLCBwKSA9PiB7XG4gICAgICB2YXIgZCA9IHAoODQ3MCk7XG4gICAgICBzLmV4cG9ydHMgPSBmdW5jdGlvbihiKSB7XG4gICAgICAgIHZhciBNID0gdGhpcy5fX2RhdGFfXywgdSA9IGQoTSwgYik7XG4gICAgICAgIHJldHVybiB1IDwgMCA/IHZvaWQgMCA6IE1bdV1bMV07XG4gICAgICB9O1xuICAgIH0sIDc1MTg6IChzLCBsLCBwKSA9PiB7XG4gICAgICB2YXIgZCA9IHAoODQ3MCk7XG4gICAgICBzLmV4cG9ydHMgPSBmdW5jdGlvbihiKSB7XG4gICAgICAgIHJldHVybiBkKHRoaXMuX19kYXRhX18sIGIpID4gLTE7XG4gICAgICB9O1xuICAgIH0sIDQ3MDU6IChzLCBsLCBwKSA9PiB7XG4gICAgICB2YXIgZCA9IHAoODQ3MCk7XG4gICAgICBzLmV4cG9ydHMgPSBmdW5jdGlvbihiLCBNKSB7XG4gICAgICAgIHZhciB1ID0gdGhpcy5fX2RhdGFfXywgQSA9IGQodSwgYik7XG4gICAgICAgIHJldHVybiBBIDwgMCA/ICgrK3RoaXMuc2l6ZSwgdS5wdXNoKFtiLCBNXSkpIDogdVtBXVsxXSA9IE0sIHRoaXM7XG4gICAgICB9O1xuICAgIH0sIDQ3ODU6IChzLCBsLCBwKSA9PiB7XG4gICAgICB2YXIgZCA9IHAoMTk4OSksIGIgPSBwKDg0MDcpLCBNID0gcCg3MDcxKTtcbiAgICAgIHMuZXhwb3J0cyA9IGZ1bmN0aW9uKCkge1xuICAgICAgICB0aGlzLnNpemUgPSAwLCB0aGlzLl9fZGF0YV9fID0geyBoYXNoOiBuZXcgZCgpLCBtYXA6IG5ldyAoTSB8fCBiKSgpLCBzdHJpbmc6IG5ldyBkKCkgfTtcbiAgICAgIH07XG4gICAgfSwgMTI4NTogKHMsIGwsIHApID0+IHtcbiAgICAgIHZhciBkID0gcCg1MDUwKTtcbiAgICAgIHMuZXhwb3J0cyA9IGZ1bmN0aW9uKGIpIHtcbiAgICAgICAgdmFyIE0gPSBkKHRoaXMsIGIpLmRlbGV0ZShiKTtcbiAgICAgICAgcmV0dXJuIHRoaXMuc2l6ZSAtPSBNID8gMSA6IDAsIE07XG4gICAgICB9O1xuICAgIH0sIDZlMzogKHMsIGwsIHApID0+IHtcbiAgICAgIHZhciBkID0gcCg1MDUwKTtcbiAgICAgIHMuZXhwb3J0cyA9IGZ1bmN0aW9uKGIpIHtcbiAgICAgICAgcmV0dXJuIGQodGhpcywgYikuZ2V0KGIpO1xuICAgICAgfTtcbiAgICB9LCA5OTE2OiAocywgbCwgcCkgPT4ge1xuICAgICAgdmFyIGQgPSBwKDUwNTApO1xuICAgICAgcy5leHBvcnRzID0gZnVuY3Rpb24oYikge1xuICAgICAgICByZXR1cm4gZCh0aGlzLCBiKS5oYXMoYik7XG4gICAgICB9O1xuICAgIH0sIDUyNjU6IChzLCBsLCBwKSA9PiB7XG4gICAgICB2YXIgZCA9IHAoNTA1MCk7XG4gICAgICBzLmV4cG9ydHMgPSBmdW5jdGlvbihiLCBNKSB7XG4gICAgICAgIHZhciB1ID0gZCh0aGlzLCBiKSwgQSA9IHUuc2l6ZTtcbiAgICAgICAgcmV0dXJuIHUuc2V0KGIsIE0pLCB0aGlzLnNpemUgKz0gdS5zaXplID09IEEgPyAwIDogMSwgdGhpcztcbiAgICAgIH07XG4gICAgfSwgODc3NjogKHMpID0+IHtcbiAgICAgIHMuZXhwb3J0cyA9IGZ1bmN0aW9uKGwpIHtcbiAgICAgICAgdmFyIHAgPSAtMSwgZCA9IEFycmF5KGwuc2l6ZSk7XG4gICAgICAgIHJldHVybiBsLmZvckVhY2goZnVuY3Rpb24oYiwgTSkge1xuICAgICAgICAgIGRbKytwXSA9IFtNLCBiXTtcbiAgICAgICAgfSksIGQ7XG4gICAgICB9O1xuICAgIH0sIDQ1MzY6IChzLCBsLCBwKSA9PiB7XG4gICAgICB2YXIgZCA9IHAoODUyKShPYmplY3QsIFwiY3JlYXRlXCIpO1xuICAgICAgcy5leHBvcnRzID0gZDtcbiAgICB9LCA2OTE2OiAocywgbCwgcCkgPT4ge1xuICAgICAgdmFyIGQgPSBwKDU1NjkpKE9iamVjdC5rZXlzLCBPYmplY3QpO1xuICAgICAgcy5leHBvcnRzID0gZDtcbiAgICB9LCAxMTY3OiAocywgbCwgcCkgPT4ge1xuICAgICAgcyA9IHAubm1kKHMpO1xuICAgICAgdmFyIGQgPSBwKDE5NTcpLCBiID0gbCAmJiAhbC5ub2RlVHlwZSAmJiBsLCBNID0gYiAmJiBzICYmICFzLm5vZGVUeXBlICYmIHMsIHUgPSBNICYmIE0uZXhwb3J0cyA9PT0gYiAmJiBkLnByb2Nlc3MsIEEgPSBmdW5jdGlvbigpIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICByZXR1cm4gTSAmJiBNLnJlcXVpcmUgJiYgTS5yZXF1aXJlKFwidXRpbFwiKS50eXBlcyB8fCB1ICYmIHUuYmluZGluZyAmJiB1LmJpbmRpbmcoXCJ1dGlsXCIpO1xuICAgICAgICB9IGNhdGNoIHtcbiAgICAgICAgfVxuICAgICAgfSgpO1xuICAgICAgcy5leHBvcnRzID0gQTtcbiAgICB9LCAyMzMzOiAocykgPT4ge1xuICAgICAgdmFyIGwgPSBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nO1xuICAgICAgcy5leHBvcnRzID0gZnVuY3Rpb24ocCkge1xuICAgICAgICByZXR1cm4gbC5jYWxsKHApO1xuICAgICAgfTtcbiAgICB9LCA1NTY5OiAocykgPT4ge1xuICAgICAgcy5leHBvcnRzID0gZnVuY3Rpb24obCwgcCkge1xuICAgICAgICByZXR1cm4gZnVuY3Rpb24oZCkge1xuICAgICAgICAgIHJldHVybiBsKHAoZCkpO1xuICAgICAgICB9O1xuICAgICAgfTtcbiAgICB9LCA1NjM5OiAocywgbCwgcCkgPT4ge1xuICAgICAgdmFyIGQgPSBwKDE5NTcpLCBiID0gdHlwZW9mIHNlbGYgPT0gXCJvYmplY3RcIiAmJiBzZWxmICYmIHNlbGYuT2JqZWN0ID09PSBPYmplY3QgJiYgc2VsZiwgTSA9IGQgfHwgYiB8fCBGdW5jdGlvbihcInJldHVybiB0aGlzXCIpKCk7XG4gICAgICBzLmV4cG9ydHMgPSBNO1xuICAgIH0sIDYxOTogKHMpID0+IHtcbiAgICAgIHMuZXhwb3J0cyA9IGZ1bmN0aW9uKGwpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX19kYXRhX18uc2V0KGwsIFwiX19sb2Rhc2hfaGFzaF91bmRlZmluZWRfX1wiKSwgdGhpcztcbiAgICAgIH07XG4gICAgfSwgMjM4NTogKHMpID0+IHtcbiAgICAgIHMuZXhwb3J0cyA9IGZ1bmN0aW9uKGwpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX19kYXRhX18uaGFzKGwpO1xuICAgICAgfTtcbiAgICB9LCAxODE0OiAocykgPT4ge1xuICAgICAgcy5leHBvcnRzID0gZnVuY3Rpb24obCkge1xuICAgICAgICB2YXIgcCA9IC0xLCBkID0gQXJyYXkobC5zaXplKTtcbiAgICAgICAgcmV0dXJuIGwuZm9yRWFjaChmdW5jdGlvbihiKSB7XG4gICAgICAgICAgZFsrK3BdID0gYjtcbiAgICAgICAgfSksIGQ7XG4gICAgICB9O1xuICAgIH0sIDc0NjU6IChzLCBsLCBwKSA9PiB7XG4gICAgICB2YXIgZCA9IHAoODQwNyk7XG4gICAgICBzLmV4cG9ydHMgPSBmdW5jdGlvbigpIHtcbiAgICAgICAgdGhpcy5fX2RhdGFfXyA9IG5ldyBkKCksIHRoaXMuc2l6ZSA9IDA7XG4gICAgICB9O1xuICAgIH0sIDM3Nzk6IChzKSA9PiB7XG4gICAgICBzLmV4cG9ydHMgPSBmdW5jdGlvbihsKSB7XG4gICAgICAgIHZhciBwID0gdGhpcy5fX2RhdGFfXywgZCA9IHAuZGVsZXRlKGwpO1xuICAgICAgICByZXR1cm4gdGhpcy5zaXplID0gcC5zaXplLCBkO1xuICAgICAgfTtcbiAgICB9LCA3NTk5OiAocykgPT4ge1xuICAgICAgcy5leHBvcnRzID0gZnVuY3Rpb24obCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fX2RhdGFfXy5nZXQobCk7XG4gICAgICB9O1xuICAgIH0sIDQ3NTg6IChzKSA9PiB7XG4gICAgICBzLmV4cG9ydHMgPSBmdW5jdGlvbihsKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9fZGF0YV9fLmhhcyhsKTtcbiAgICAgIH07XG4gICAgfSwgNDMwOTogKHMsIGwsIHApID0+IHtcbiAgICAgIHZhciBkID0gcCg4NDA3KSwgYiA9IHAoNzA3MSksIE0gPSBwKDMzNjkpO1xuICAgICAgcy5leHBvcnRzID0gZnVuY3Rpb24odSwgQSkge1xuICAgICAgICB2YXIgeiA9IHRoaXMuX19kYXRhX187XG4gICAgICAgIGlmICh6IGluc3RhbmNlb2YgZCkge1xuICAgICAgICAgIHZhciBmID0gei5fX2RhdGFfXztcbiAgICAgICAgICBpZiAoIWIgfHwgZi5sZW5ndGggPCAxOTkpXG4gICAgICAgICAgICByZXR1cm4gZi5wdXNoKFt1LCBBXSksIHRoaXMuc2l6ZSA9ICsrei5zaXplLCB0aGlzO1xuICAgICAgICAgIHogPSB0aGlzLl9fZGF0YV9fID0gbmV3IE0oZik7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHouc2V0KHUsIEEpLCB0aGlzLnNpemUgPSB6LnNpemUsIHRoaXM7XG4gICAgICB9O1xuICAgIH0sIDM0NjogKHMpID0+IHtcbiAgICAgIHZhciBsID0gRnVuY3Rpb24ucHJvdG90eXBlLnRvU3RyaW5nO1xuICAgICAgcy5leHBvcnRzID0gZnVuY3Rpb24ocCkge1xuICAgICAgICBpZiAocCAhPSBudWxsKSB7XG4gICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIHJldHVybiBsLmNhbGwocCk7XG4gICAgICAgICAgfSBjYXRjaCB7XG4gICAgICAgICAgfVxuICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICByZXR1cm4gcCArIFwiXCI7XG4gICAgICAgICAgfSBjYXRjaCB7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBcIlwiO1xuICAgICAgfTtcbiAgICB9LCA3ODEzOiAocykgPT4ge1xuICAgICAgcy5leHBvcnRzID0gZnVuY3Rpb24obCwgcCkge1xuICAgICAgICByZXR1cm4gbCA9PT0gcCB8fCBsICE9IGwgJiYgcCAhPSBwO1xuICAgICAgfTtcbiAgICB9LCA1Njk0OiAocywgbCwgcCkgPT4ge1xuICAgICAgdmFyIGQgPSBwKDk0NTQpLCBiID0gcCg3MDA1KSwgTSA9IE9iamVjdC5wcm90b3R5cGUsIHUgPSBNLmhhc093blByb3BlcnR5LCBBID0gTS5wcm9wZXJ0eUlzRW51bWVyYWJsZSwgeiA9IGQoZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiBhcmd1bWVudHM7XG4gICAgICB9KCkpID8gZCA6IGZ1bmN0aW9uKGYpIHtcbiAgICAgICAgcmV0dXJuIGIoZikgJiYgdS5jYWxsKGYsIFwiY2FsbGVlXCIpICYmICFBLmNhbGwoZiwgXCJjYWxsZWVcIik7XG4gICAgICB9O1xuICAgICAgcy5leHBvcnRzID0gejtcbiAgICB9LCAxNDY5OiAocykgPT4ge1xuICAgICAgdmFyIGwgPSBBcnJheS5pc0FycmF5O1xuICAgICAgcy5leHBvcnRzID0gbDtcbiAgICB9LCA4NjEyOiAocywgbCwgcCkgPT4ge1xuICAgICAgdmFyIGQgPSBwKDM1NjApLCBiID0gcCgxNzgwKTtcbiAgICAgIHMuZXhwb3J0cyA9IGZ1bmN0aW9uKE0pIHtcbiAgICAgICAgcmV0dXJuIE0gIT0gbnVsbCAmJiBiKE0ubGVuZ3RoKSAmJiAhZChNKTtcbiAgICAgIH07XG4gICAgfSwgNDE0NDogKHMsIGwsIHApID0+IHtcbiAgICAgIHMgPSBwLm5tZChzKTtcbiAgICAgIHZhciBkID0gcCg1NjM5KSwgYiA9IHAoNTA2MiksIE0gPSBsICYmICFsLm5vZGVUeXBlICYmIGwsIHUgPSBNICYmIHMgJiYgIXMubm9kZVR5cGUgJiYgcywgQSA9IHUgJiYgdS5leHBvcnRzID09PSBNID8gZC5CdWZmZXIgOiB2b2lkIDAsIHogPSAoQSA/IEEuaXNCdWZmZXIgOiB2b2lkIDApIHx8IGI7XG4gICAgICBzLmV4cG9ydHMgPSB6O1xuICAgIH0sIDg0NDY6IChzLCBsLCBwKSA9PiB7XG4gICAgICB2YXIgZCA9IHAoOTM5KTtcbiAgICAgIHMuZXhwb3J0cyA9IGZ1bmN0aW9uKGIsIE0pIHtcbiAgICAgICAgcmV0dXJuIGQoYiwgTSk7XG4gICAgICB9O1xuICAgIH0sIDM1NjA6IChzLCBsLCBwKSA9PiB7XG4gICAgICB2YXIgZCA9IHAoNDIzOSksIGIgPSBwKDMyMTgpO1xuICAgICAgcy5leHBvcnRzID0gZnVuY3Rpb24oTSkge1xuICAgICAgICBpZiAoIWIoTSkpXG4gICAgICAgICAgcmV0dXJuICExO1xuICAgICAgICB2YXIgdSA9IGQoTSk7XG4gICAgICAgIHJldHVybiB1ID09IFwiW29iamVjdCBGdW5jdGlvbl1cIiB8fCB1ID09IFwiW29iamVjdCBHZW5lcmF0b3JGdW5jdGlvbl1cIiB8fCB1ID09IFwiW29iamVjdCBBc3luY0Z1bmN0aW9uXVwiIHx8IHUgPT0gXCJbb2JqZWN0IFByb3h5XVwiO1xuICAgICAgfTtcbiAgICB9LCAxNzgwOiAocykgPT4ge1xuICAgICAgcy5leHBvcnRzID0gZnVuY3Rpb24obCkge1xuICAgICAgICByZXR1cm4gdHlwZW9mIGwgPT0gXCJudW1iZXJcIiAmJiBsID4gLTEgJiYgbCAlIDEgPT0gMCAmJiBsIDw9IDkwMDcxOTkyNTQ3NDA5OTE7XG4gICAgICB9O1xuICAgIH0sIDMyMTg6IChzKSA9PiB7XG4gICAgICBzLmV4cG9ydHMgPSBmdW5jdGlvbihsKSB7XG4gICAgICAgIHZhciBwID0gdHlwZW9mIGw7XG4gICAgICAgIHJldHVybiBsICE9IG51bGwgJiYgKHAgPT0gXCJvYmplY3RcIiB8fCBwID09IFwiZnVuY3Rpb25cIik7XG4gICAgICB9O1xuICAgIH0sIDcwMDU6IChzKSA9PiB7XG4gICAgICBzLmV4cG9ydHMgPSBmdW5jdGlvbihsKSB7XG4gICAgICAgIHJldHVybiBsICE9IG51bGwgJiYgdHlwZW9mIGwgPT0gXCJvYmplY3RcIjtcbiAgICAgIH07XG4gICAgfSwgNjcxOTogKHMsIGwsIHApID0+IHtcbiAgICAgIHZhciBkID0gcCg4NzQ5KSwgYiA9IHAoMTcxNyksIE0gPSBwKDExNjcpLCB1ID0gTSAmJiBNLmlzVHlwZWRBcnJheSwgQSA9IHUgPyBiKHUpIDogZDtcbiAgICAgIHMuZXhwb3J0cyA9IEE7XG4gICAgfSwgMzY3NDogKHMsIGwsIHApID0+IHtcbiAgICAgIHZhciBkID0gcCg0NjM2KSwgYiA9IHAoMjgwKSwgTSA9IHAoODYxMik7XG4gICAgICBzLmV4cG9ydHMgPSBmdW5jdGlvbih1KSB7XG4gICAgICAgIHJldHVybiBNKHUpID8gZCh1KSA6IGIodSk7XG4gICAgICB9O1xuICAgIH0sIDgzMDY6IChzLCBsLCBwKSA9PiB7XG4gICAgICB2YXIgZCA9IHAoMzM2OSk7XG4gICAgICBmdW5jdGlvbiBiKE0sIHUpIHtcbiAgICAgICAgaWYgKHR5cGVvZiBNICE9IFwiZnVuY3Rpb25cIiB8fCB1ICE9IG51bGwgJiYgdHlwZW9mIHUgIT0gXCJmdW5jdGlvblwiKVxuICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJFeHBlY3RlZCBhIGZ1bmN0aW9uXCIpO1xuICAgICAgICB2YXIgQSA9IGZ1bmN0aW9uKCkge1xuICAgICAgICAgIHZhciB6ID0gYXJndW1lbnRzLCBmID0gdSA/IHUuYXBwbHkodGhpcywgeikgOiB6WzBdLCBPID0gQS5jYWNoZTtcbiAgICAgICAgICBpZiAoTy5oYXMoZikpXG4gICAgICAgICAgICByZXR1cm4gTy5nZXQoZik7XG4gICAgICAgICAgdmFyIGggPSBNLmFwcGx5KHRoaXMsIHopO1xuICAgICAgICAgIHJldHVybiBBLmNhY2hlID0gTy5zZXQoZiwgaCkgfHwgTywgaDtcbiAgICAgICAgfTtcbiAgICAgICAgcmV0dXJuIEEuY2FjaGUgPSBuZXcgKGIuQ2FjaGUgfHwgZCkoKSwgQTtcbiAgICAgIH1cbiAgICAgIGIuQ2FjaGUgPSBkLCBzLmV4cG9ydHMgPSBiO1xuICAgIH0sIDQ3OTogKHMpID0+IHtcbiAgICAgIHMuZXhwb3J0cyA9IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gW107XG4gICAgICB9O1xuICAgIH0sIDUwNjI6IChzKSA9PiB7XG4gICAgICBzLmV4cG9ydHMgPSBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuICExO1xuICAgICAgfTtcbiAgICB9LCAyNzAzOiAocywgbCwgcCkgPT4ge1xuICAgICAgdmFyIGQgPSBwKDQxNCk7XG4gICAgICBmdW5jdGlvbiBiKCkge1xuICAgICAgfVxuICAgICAgZnVuY3Rpb24gTSgpIHtcbiAgICAgIH1cbiAgICAgIE0ucmVzZXRXYXJuaW5nQ2FjaGUgPSBiLCBzLmV4cG9ydHMgPSBmdW5jdGlvbigpIHtcbiAgICAgICAgZnVuY3Rpb24gdShmLCBPLCBoLCBnLCB2LCBMKSB7XG4gICAgICAgICAgaWYgKEwgIT09IGQpIHtcbiAgICAgICAgICAgIHZhciB5ID0gbmV3IEVycm9yKFwiQ2FsbGluZyBQcm9wVHlwZXMgdmFsaWRhdG9ycyBkaXJlY3RseSBpcyBub3Qgc3VwcG9ydGVkIGJ5IHRoZSBgcHJvcC10eXBlc2AgcGFja2FnZS4gVXNlIFByb3BUeXBlcy5jaGVja1Byb3BUeXBlcygpIHRvIGNhbGwgdGhlbS4gUmVhZCBtb3JlIGF0IGh0dHA6Ly9mYi5tZS91c2UtY2hlY2stcHJvcC10eXBlc1wiKTtcbiAgICAgICAgICAgIHRocm93IHkubmFtZSA9IFwiSW52YXJpYW50IFZpb2xhdGlvblwiLCB5O1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBmdW5jdGlvbiBBKCkge1xuICAgICAgICAgIHJldHVybiB1O1xuICAgICAgICB9XG4gICAgICAgIHUuaXNSZXF1aXJlZCA9IHU7XG4gICAgICAgIHZhciB6ID0geyBhcnJheTogdSwgYmlnaW50OiB1LCBib29sOiB1LCBmdW5jOiB1LCBudW1iZXI6IHUsIG9iamVjdDogdSwgc3RyaW5nOiB1LCBzeW1ib2w6IHUsIGFueTogdSwgYXJyYXlPZjogQSwgZWxlbWVudDogdSwgZWxlbWVudFR5cGU6IHUsIGluc3RhbmNlT2Y6IEEsIG5vZGU6IHUsIG9iamVjdE9mOiBBLCBvbmVPZjogQSwgb25lT2ZUeXBlOiBBLCBzaGFwZTogQSwgZXhhY3Q6IEEsIGNoZWNrUHJvcFR5cGVzOiBNLCByZXNldFdhcm5pbmdDYWNoZTogYiB9O1xuICAgICAgICByZXR1cm4gei5Qcm9wVHlwZXMgPSB6LCB6O1xuICAgICAgfTtcbiAgICB9LCA1Njk3OiAocywgbCwgcCkgPT4ge1xuICAgICAgcy5leHBvcnRzID0gcCgyNzAzKSgpO1xuICAgIH0sIDQxNDogKHMpID0+IHtcbiAgICAgIHMuZXhwb3J0cyA9IFwiU0VDUkVUX0RPX05PVF9QQVNTX1RISVNfT1JfWU9VX1dJTExfQkVfRklSRURcIjtcbiAgICB9LCA5Nzg3OiAocykgPT4ge1xuICAgICAgcy5leHBvcnRzID0gbztcbiAgICB9IH0sIHIgPSB7fTtcbiAgICBmdW5jdGlvbiBpKHMpIHtcbiAgICAgIHZhciBsID0gcltzXTtcbiAgICAgIGlmIChsICE9PSB2b2lkIDApXG4gICAgICAgIHJldHVybiBsLmV4cG9ydHM7XG4gICAgICB2YXIgcCA9IHJbc10gPSB7IGlkOiBzLCBsb2FkZWQ6ICExLCBleHBvcnRzOiB7fSB9O1xuICAgICAgcmV0dXJuIG5bc10ocCwgcC5leHBvcnRzLCBpKSwgcC5sb2FkZWQgPSAhMCwgcC5leHBvcnRzO1xuICAgIH1cbiAgICBpLm4gPSAocykgPT4ge1xuICAgICAgdmFyIGwgPSBzICYmIHMuX19lc01vZHVsZSA/ICgpID0+IHMuZGVmYXVsdCA6ICgpID0+IHM7XG4gICAgICByZXR1cm4gaS5kKGwsIHsgYTogbCB9KSwgbDtcbiAgICB9LCBpLmQgPSAocywgbCkgPT4ge1xuICAgICAgZm9yICh2YXIgcCBpbiBsKVxuICAgICAgICBpLm8obCwgcCkgJiYgIWkubyhzLCBwKSAmJiBPYmplY3QuZGVmaW5lUHJvcGVydHkocywgcCwgeyBlbnVtZXJhYmxlOiAhMCwgZ2V0OiBsW3BdIH0pO1xuICAgIH0sIGkuZyA9IGZ1bmN0aW9uKCkge1xuICAgICAgaWYgKHR5cGVvZiBnbG9iYWxUaGlzID09IFwib2JqZWN0XCIpXG4gICAgICAgIHJldHVybiBnbG9iYWxUaGlzO1xuICAgICAgdHJ5IHtcbiAgICAgICAgcmV0dXJuIHRoaXMgfHwgbmV3IEZ1bmN0aW9uKFwicmV0dXJuIHRoaXNcIikoKTtcbiAgICAgIH0gY2F0Y2gge1xuICAgICAgICBpZiAodHlwZW9mIHdpbmRvdyA9PSBcIm9iamVjdFwiKVxuICAgICAgICAgIHJldHVybiB3aW5kb3c7XG4gICAgICB9XG4gICAgfSgpLCBpLm8gPSAocywgbCkgPT4gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHMsIGwpLCBpLnIgPSAocykgPT4ge1xuICAgICAgdHlwZW9mIFN5bWJvbCA8IFwidVwiICYmIFN5bWJvbC50b1N0cmluZ1RhZyAmJiBPYmplY3QuZGVmaW5lUHJvcGVydHkocywgU3ltYm9sLnRvU3RyaW5nVGFnLCB7IHZhbHVlOiBcIk1vZHVsZVwiIH0pLCBPYmplY3QuZGVmaW5lUHJvcGVydHkocywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6ICEwIH0pO1xuICAgIH0sIGkubm1kID0gKHMpID0+IChzLnBhdGhzID0gW10sIHMuY2hpbGRyZW4gfHwgKHMuY2hpbGRyZW4gPSBbXSksIHMpO1xuICAgIHZhciBhID0ge307XG4gICAgcmV0dXJuICgoKSA9PiB7XG4gICAgICBpLnIoYSksIGkuZChhLCB7IGRlZmF1bHQ6ICgpID0+IE8wLCBleHBhbmROb2Rlc1RvTGV2ZWw6ICgpID0+IGgwIH0pO1xuICAgICAgdmFyIHMgPSBpKDQxODQpLCBsID0gaS5uKHMpLCBwID0gaSg4NDQ2KSwgZCA9IGkubihwKSwgYiA9IGkoODMwNiksIE0gPSBpLm4oYik7XG4gICAgICBsZXQgdSA9ICh3MSA9IDIxKSA9PiBjcnlwdG8uZ2V0UmFuZG9tVmFsdWVzKG5ldyBVaW50OEFycmF5KHcxKSkucmVkdWNlKChnMSwgRTEpID0+IGcxICsgKChFMSAmPSA2MykgPCAzNiA/IEUxLnRvU3RyaW5nKDM2KSA6IEUxIDwgNjIgPyAoRTEgLSAyNikudG9TdHJpbmcoMzYpLnRvVXBwZXJDYXNlKCkgOiBFMSA+IDYyID8gXCItXCIgOiBcIl9cIiksIFwiXCIpO1xuICAgICAgdmFyIEEgPSBpKDU2OTcpLCB6ID0gaS5uKEEpLCBmID0gaSg5Nzg3KSwgTyA9IGkubihmKTtcbiAgICAgIGZ1bmN0aW9uIGgodzEpIHtcbiAgICAgICAgcmV0dXJuIGggPSB0eXBlb2YgU3ltYm9sID09IFwiZnVuY3Rpb25cIiAmJiB0eXBlb2YgU3ltYm9sLml0ZXJhdG9yID09IFwic3ltYm9sXCIgPyBmdW5jdGlvbihnMSkge1xuICAgICAgICAgIHJldHVybiB0eXBlb2YgZzE7XG4gICAgICAgIH0gOiBmdW5jdGlvbihnMSkge1xuICAgICAgICAgIHJldHVybiBnMSAmJiB0eXBlb2YgU3ltYm9sID09IFwiZnVuY3Rpb25cIiAmJiBnMS5jb25zdHJ1Y3RvciA9PT0gU3ltYm9sICYmIGcxICE9PSBTeW1ib2wucHJvdG90eXBlID8gXCJzeW1ib2xcIiA6IHR5cGVvZiBnMTtcbiAgICAgICAgfSwgaCh3MSk7XG4gICAgICB9XG4gICAgICB2YXIgZyA9IFtcImNoaWxkcmVuXCIsIFwidGl0bGVcIl07XG4gICAgICBmdW5jdGlvbiB2KCkge1xuICAgICAgICByZXR1cm4gdiA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uKHcxKSB7XG4gICAgICAgICAgZm9yICh2YXIgZzEgPSAxOyBnMSA8IGFyZ3VtZW50cy5sZW5ndGg7IGcxKyspIHtcbiAgICAgICAgICAgIHZhciBFMSA9IGFyZ3VtZW50c1tnMV07XG4gICAgICAgICAgICBmb3IgKHZhciBCMSBpbiBFMSlcbiAgICAgICAgICAgICAgT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKEUxLCBCMSkgJiYgKHcxW0IxXSA9IEUxW0IxXSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiB3MTtcbiAgICAgICAgfSwgdi5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICAgICAgfVxuICAgICAgZnVuY3Rpb24gTCh3MSwgZzEpIHtcbiAgICAgICAgaWYgKCEodzEgaW5zdGFuY2VvZiBnMSkpXG4gICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvblwiKTtcbiAgICAgIH1cbiAgICAgIGZ1bmN0aW9uIHkodzEsIGcxKSB7XG4gICAgICAgIGZvciAodmFyIEUxID0gMDsgRTEgPCBnMS5sZW5ndGg7IEUxKyspIHtcbiAgICAgICAgICB2YXIgQjEgPSBnMVtFMV07XG4gICAgICAgICAgQjEuZW51bWVyYWJsZSA9IEIxLmVudW1lcmFibGUgfHwgITEsIEIxLmNvbmZpZ3VyYWJsZSA9ICEwLCBcInZhbHVlXCIgaW4gQjEgJiYgKEIxLndyaXRhYmxlID0gITApLCBPYmplY3QuZGVmaW5lUHJvcGVydHkodzEsIEIxLmtleSwgQjEpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBmdW5jdGlvbiBCKHcxLCBnMSkge1xuICAgICAgICByZXR1cm4gQiA9IE9iamVjdC5zZXRQcm90b3R5cGVPZiA/IE9iamVjdC5zZXRQcm90b3R5cGVPZi5iaW5kKCkgOiBmdW5jdGlvbihFMSwgQjEpIHtcbiAgICAgICAgICByZXR1cm4gRTEuX19wcm90b19fID0gQjEsIEUxO1xuICAgICAgICB9LCBCKHcxLCBnMSk7XG4gICAgICB9XG4gICAgICBmdW5jdGlvbiBYKHcxLCBnMSkge1xuICAgICAgICBpZiAoZzEgJiYgKGgoZzEpID09PSBcIm9iamVjdFwiIHx8IHR5cGVvZiBnMSA9PSBcImZ1bmN0aW9uXCIpKVxuICAgICAgICAgIHJldHVybiBnMTtcbiAgICAgICAgaWYgKGcxICE9PSB2b2lkIDApXG4gICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkRlcml2ZWQgY29uc3RydWN0b3JzIG1heSBvbmx5IHJldHVybiBvYmplY3Qgb3IgdW5kZWZpbmVkXCIpO1xuICAgICAgICByZXR1cm4gZnVuY3Rpb24oRTEpIHtcbiAgICAgICAgICBpZiAoRTEgPT09IHZvaWQgMClcbiAgICAgICAgICAgIHRocm93IG5ldyBSZWZlcmVuY2VFcnJvcihcInRoaXMgaGFzbid0IGJlZW4gaW5pdGlhbGlzZWQgLSBzdXBlcigpIGhhc24ndCBiZWVuIGNhbGxlZFwiKTtcbiAgICAgICAgICByZXR1cm4gRTE7XG4gICAgICAgIH0odzEpO1xuICAgICAgfVxuICAgICAgZnVuY3Rpb24gRih3MSkge1xuICAgICAgICByZXR1cm4gRiA9IE9iamVjdC5zZXRQcm90b3R5cGVPZiA/IE9iamVjdC5nZXRQcm90b3R5cGVPZi5iaW5kKCkgOiBmdW5jdGlvbihnMSkge1xuICAgICAgICAgIHJldHVybiBnMS5fX3Byb3RvX18gfHwgT2JqZWN0LmdldFByb3RvdHlwZU9mKGcxKTtcbiAgICAgICAgfSwgRih3MSk7XG4gICAgICB9XG4gICAgICBmdW5jdGlvbiBUKHcxLCBnMSwgRTEpIHtcbiAgICAgICAgcmV0dXJuIGcxIGluIHcxID8gT2JqZWN0LmRlZmluZVByb3BlcnR5KHcxLCBnMSwgeyB2YWx1ZTogRTEsIGVudW1lcmFibGU6ICEwLCBjb25maWd1cmFibGU6ICEwLCB3cml0YWJsZTogITAgfSkgOiB3MVtnMV0gPSBFMSwgdzE7XG4gICAgICB9XG4gICAgICB2YXIgdyA9IGZ1bmN0aW9uKHcxKSB7XG4gICAgICAgIChmdW5jdGlvbihIMSwgeDEpIHtcbiAgICAgICAgICBpZiAodHlwZW9mIHgxICE9IFwiZnVuY3Rpb25cIiAmJiB4MSAhPT0gbnVsbClcbiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJTdXBlciBleHByZXNzaW9uIG11c3QgZWl0aGVyIGJlIG51bGwgb3IgYSBmdW5jdGlvblwiKTtcbiAgICAgICAgICBIMS5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKHgxICYmIHgxLnByb3RvdHlwZSwgeyBjb25zdHJ1Y3RvcjogeyB2YWx1ZTogSDEsIHdyaXRhYmxlOiAhMCwgY29uZmlndXJhYmxlOiAhMCB9IH0pLCBPYmplY3QuZGVmaW5lUHJvcGVydHkoSDEsIFwicHJvdG90eXBlXCIsIHsgd3JpdGFibGU6ICExIH0pLCB4MSAmJiBCKEgxLCB4MSk7XG4gICAgICAgIH0pKGUwLCB3MSk7XG4gICAgICAgIHZhciBnMSwgRTEsIEIxLCBLMSwgcDAgPSAoQjEgPSBlMCwgSzEgPSBmdW5jdGlvbigpIHtcbiAgICAgICAgICBpZiAodHlwZW9mIFJlZmxlY3QgPiBcInVcIiB8fCAhUmVmbGVjdC5jb25zdHJ1Y3QgfHwgUmVmbGVjdC5jb25zdHJ1Y3Quc2hhbSlcbiAgICAgICAgICAgIHJldHVybiAhMTtcbiAgICAgICAgICBpZiAodHlwZW9mIFByb3h5ID09IFwiZnVuY3Rpb25cIilcbiAgICAgICAgICAgIHJldHVybiAhMDtcbiAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgcmV0dXJuIEJvb2xlYW4ucHJvdG90eXBlLnZhbHVlT2YuY2FsbChSZWZsZWN0LmNvbnN0cnVjdChCb29sZWFuLCBbXSwgZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICB9KSksICEwO1xuICAgICAgICAgIH0gY2F0Y2gge1xuICAgICAgICAgICAgcmV0dXJuICExO1xuICAgICAgICAgIH1cbiAgICAgICAgfSgpLCBmdW5jdGlvbigpIHtcbiAgICAgICAgICB2YXIgSDEsIHgxID0gRihCMSk7XG4gICAgICAgICAgaWYgKEsxKSB7XG4gICAgICAgICAgICB2YXIgSTEgPSBGKHRoaXMpLmNvbnN0cnVjdG9yO1xuICAgICAgICAgICAgSDEgPSBSZWZsZWN0LmNvbnN0cnVjdCh4MSwgYXJndW1lbnRzLCBJMSk7XG4gICAgICAgICAgfSBlbHNlXG4gICAgICAgICAgICBIMSA9IHgxLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gICAgICAgICAgcmV0dXJuIFgodGhpcywgSDEpO1xuICAgICAgICB9KTtcbiAgICAgICAgZnVuY3Rpb24gZTAoKSB7XG4gICAgICAgICAgcmV0dXJuIEwodGhpcywgZTApLCBwMC5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBnMSA9IGUwLCAoRTEgPSBbeyBrZXk6IFwicmVuZGVyXCIsIHZhbHVlOiBmdW5jdGlvbigpIHtcbiAgICAgICAgICB2YXIgSDEgPSB0aGlzLnByb3BzLCB4MSA9IEgxLmNoaWxkcmVuLCBJMSA9IEgxLnRpdGxlLCBYMSA9IGZ1bmN0aW9uKEoxLCBmMCkge1xuICAgICAgICAgICAgaWYgKEoxID09IG51bGwpXG4gICAgICAgICAgICAgIHJldHVybiB7fTtcbiAgICAgICAgICAgIHZhciBJMCwgTzEsIFYxID0gZnVuY3Rpb24oaTAsIGIwKSB7XG4gICAgICAgICAgICAgIGlmIChpMCA9PSBudWxsKVxuICAgICAgICAgICAgICAgIHJldHVybiB7fTtcbiAgICAgICAgICAgICAgdmFyIGcwLCB1MCwgejAgPSB7fSwgVjAgPSBPYmplY3Qua2V5cyhpMCk7XG4gICAgICAgICAgICAgIGZvciAodTAgPSAwOyB1MCA8IFYwLmxlbmd0aDsgdTArKylcbiAgICAgICAgICAgICAgICBnMCA9IFYwW3UwXSwgYjAuaW5kZXhPZihnMCkgPj0gMCB8fCAoejBbZzBdID0gaTBbZzBdKTtcbiAgICAgICAgICAgICAgcmV0dXJuIHowO1xuICAgICAgICAgICAgfShKMSwgZjApO1xuICAgICAgICAgICAgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHtcbiAgICAgICAgICAgICAgdmFyIEcxID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhKMSk7XG4gICAgICAgICAgICAgIGZvciAoTzEgPSAwOyBPMSA8IEcxLmxlbmd0aDsgTzErKylcbiAgICAgICAgICAgICAgICBJMCA9IEcxW08xXSwgZjAuaW5kZXhPZihJMCkgPj0gMCB8fCBPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoSjEsIEkwKSAmJiAoVjFbSTBdID0gSjFbSTBdKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBWMTtcbiAgICAgICAgICB9KEgxLCBnKTtcbiAgICAgICAgICByZXR1cm4gTygpLmNyZWF0ZUVsZW1lbnQoXCJidXR0b25cIiwgdih7IFwiYXJpYS1sYWJlbFwiOiBJMSwgdGl0bGU6IEkxLCB0eXBlOiBcImJ1dHRvblwiIH0sIFgxKSwgeDEpO1xuICAgICAgICB9IH1dKSAmJiB5KGcxLnByb3RvdHlwZSwgRTEpLCBPYmplY3QuZGVmaW5lUHJvcGVydHkoZzEsIFwicHJvdG90eXBlXCIsIHsgd3JpdGFibGU6ICExIH0pLCBlMDtcbiAgICAgIH0oTygpLlB1cmVDb21wb25lbnQpO1xuICAgICAgVCh3LCBcInByb3BUeXBlc1wiLCB7IGNoaWxkcmVuOiB6KCkubm9kZS5pc1JlcXVpcmVkLCB0aXRsZTogeigpLnN0cmluZyB9KSwgVCh3LCBcImRlZmF1bHRQcm9wc1wiLCB7IHRpdGxlOiBudWxsIH0pO1xuICAgICAgY29uc3QgSCA9IHcsIEMgPSB7IEFMTDogXCJhbGxcIiwgUEFSRU5UOiBcInBhcmVudFwiLCBMRUFGOiBcImxlYWZcIiB9O1xuICAgICAgZnVuY3Rpb24gcSh3MSkge1xuICAgICAgICB0aGlzLm1lc3NhZ2UgPSB3MSwgdGhpcy5zdGFjayA9IEVycm9yKCkuc3RhY2s7XG4gICAgICB9XG4gICAgICBxLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoRXJyb3IucHJvdG90eXBlKSwgcS5wcm90b3R5cGUubmFtZSA9IFwiQ2hlY2tib3hUcmVlRXJyb3JcIjtcbiAgICAgIGNvbnN0IG0gPSBxO1xuICAgICAgZnVuY3Rpb24gayh3MSwgZzEpIHtcbiAgICAgICAgdmFyIEUxID0gT2JqZWN0LmtleXModzEpO1xuICAgICAgICBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykge1xuICAgICAgICAgIHZhciBCMSA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHModzEpO1xuICAgICAgICAgIGcxICYmIChCMSA9IEIxLmZpbHRlcihmdW5jdGlvbihLMSkge1xuICAgICAgICAgICAgcmV0dXJuIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodzEsIEsxKS5lbnVtZXJhYmxlO1xuICAgICAgICAgIH0pKSwgRTEucHVzaC5hcHBseShFMSwgQjEpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBFMTtcbiAgICAgIH1cbiAgICAgIGZ1bmN0aW9uIHgodzEsIGcxLCBFMSkge1xuICAgICAgICByZXR1cm4gZzEgaW4gdzEgPyBPYmplY3QuZGVmaW5lUHJvcGVydHkodzEsIGcxLCB7IHZhbHVlOiBFMSwgZW51bWVyYWJsZTogITAsIGNvbmZpZ3VyYWJsZTogITAsIHdyaXRhYmxlOiAhMCB9KSA6IHcxW2cxXSA9IEUxLCB3MTtcbiAgICAgIH1cbiAgICAgIGZ1bmN0aW9uIE4odzEsIGcxKSB7XG4gICAgICAgIGlmICghKHcxIGluc3RhbmNlb2YgZzEpKVxuICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb25cIik7XG4gICAgICB9XG4gICAgICBmdW5jdGlvbiBWKHcxLCBnMSkge1xuICAgICAgICBmb3IgKHZhciBFMSA9IDA7IEUxIDwgZzEubGVuZ3RoOyBFMSsrKSB7XG4gICAgICAgICAgdmFyIEIxID0gZzFbRTFdO1xuICAgICAgICAgIEIxLmVudW1lcmFibGUgPSBCMS5lbnVtZXJhYmxlIHx8ICExLCBCMS5jb25maWd1cmFibGUgPSAhMCwgXCJ2YWx1ZVwiIGluIEIxICYmIChCMS53cml0YWJsZSA9ICEwKSwgT2JqZWN0LmRlZmluZVByb3BlcnR5KHcxLCBCMS5rZXksIEIxKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgdmFyIFIgPSBDO1xuICAgICAgY29uc3QgSSA9IGZ1bmN0aW9uKCkge1xuICAgICAgICBmdW5jdGlvbiB3MShCMSkge1xuICAgICAgICAgIHZhciBLMSA9IGFyZ3VtZW50cy5sZW5ndGggPiAxICYmIGFyZ3VtZW50c1sxXSAhPT0gdm9pZCAwID8gYXJndW1lbnRzWzFdIDoge307XG4gICAgICAgICAgTih0aGlzLCB3MSksIHRoaXMucHJvcHMgPSBCMSwgdGhpcy5mbGF0Tm9kZXMgPSBLMTtcbiAgICAgICAgfVxuICAgICAgICB2YXIgZzEsIEUxO1xuICAgICAgICByZXR1cm4gZzEgPSB3MSwgRTEgPSBbeyBrZXk6IFwic2V0UHJvcHNcIiwgdmFsdWU6IGZ1bmN0aW9uKEIxKSB7XG4gICAgICAgICAgdGhpcy5wcm9wcyA9IEIxO1xuICAgICAgICB9IH0sIHsga2V5OiBcImNsb25lXCIsIHZhbHVlOiBmdW5jdGlvbigpIHtcbiAgICAgICAgICB2YXIgQjEgPSB0aGlzLCBLMSA9IHt9O1xuICAgICAgICAgIHJldHVybiBPYmplY3Qua2V5cyh0aGlzLmZsYXROb2RlcykuZm9yRWFjaChmdW5jdGlvbihwMCkge1xuICAgICAgICAgICAgdmFyIGUwID0gQjEuZmxhdE5vZGVzW3AwXTtcbiAgICAgICAgICAgIEsxW3AwXSA9IGZ1bmN0aW9uKEgxKSB7XG4gICAgICAgICAgICAgIGZvciAodmFyIHgxID0gMTsgeDEgPCBhcmd1bWVudHMubGVuZ3RoOyB4MSsrKSB7XG4gICAgICAgICAgICAgICAgdmFyIEkxID0gYXJndW1lbnRzW3gxXSAhPSBudWxsID8gYXJndW1lbnRzW3gxXSA6IHt9O1xuICAgICAgICAgICAgICAgIHgxICUgMiA/IGsoT2JqZWN0KEkxKSwgITApLmZvckVhY2goZnVuY3Rpb24oWDEpIHtcbiAgICAgICAgICAgICAgICAgIHgoSDEsIFgxLCBJMVtYMV0pO1xuICAgICAgICAgICAgICAgIH0pIDogT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnMgPyBPYmplY3QuZGVmaW5lUHJvcGVydGllcyhIMSwgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnMoSTEpKSA6IGsoT2JqZWN0KEkxKSkuZm9yRWFjaChmdW5jdGlvbihYMSkge1xuICAgICAgICAgICAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KEgxLCBYMSwgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihJMSwgWDEpKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICByZXR1cm4gSDE7XG4gICAgICAgICAgICB9KHt9LCBlMCk7XG4gICAgICAgICAgfSksIG5ldyB3MSh0aGlzLnByb3BzLCBLMSk7XG4gICAgICAgIH0gfSwgeyBrZXk6IFwiZ2V0Tm9kZVwiLCB2YWx1ZTogZnVuY3Rpb24oQjEpIHtcbiAgICAgICAgICByZXR1cm4gdGhpcy5mbGF0Tm9kZXNbQjFdO1xuICAgICAgICB9IH0sIHsga2V5OiBcInJlc2V0XCIsIHZhbHVlOiBmdW5jdGlvbigpIHtcbiAgICAgICAgICB0aGlzLmZsYXROb2RlcyA9IHt9O1xuICAgICAgICB9IH0sIHsga2V5OiBcImZsYXR0ZW5Ob2Rlc1wiLCB2YWx1ZTogZnVuY3Rpb24oQjEpIHtcbiAgICAgICAgICB2YXIgSzEgPSB0aGlzLCBwMCA9IGFyZ3VtZW50cy5sZW5ndGggPiAxICYmIGFyZ3VtZW50c1sxXSAhPT0gdm9pZCAwID8gYXJndW1lbnRzWzFdIDoge30sIGUwID0gYXJndW1lbnRzLmxlbmd0aCA+IDIgJiYgYXJndW1lbnRzWzJdICE9PSB2b2lkIDAgPyBhcmd1bWVudHNbMl0gOiAwO1xuICAgICAgICAgIGlmIChBcnJheS5pc0FycmF5KEIxKSAmJiBCMS5sZW5ndGggIT09IDApIHtcbiAgICAgICAgICAgIHZhciBIMSA9IHRoaXMucHJvcHMsIHgxID0gSDEuZGlzYWJsZWQsIEkxID0gSDEubm9DYXNjYWRlO1xuICAgICAgICAgICAgQjEuZm9yRWFjaChmdW5jdGlvbihYMSwgSjEpIHtcbiAgICAgICAgICAgICAgdmFyIGYwID0gSzEubm9kZUhhc0NoaWxkcmVuKFgxKTtcbiAgICAgICAgICAgICAgaWYgKEsxLmZsYXROb2Rlc1tYMS52YWx1ZV0gIT09IHZvaWQgMClcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgbShcIkR1cGxpY2F0ZSB2YWx1ZSAnXCIuY29uY2F0KFgxLnZhbHVlLCBcIicgZGV0ZWN0ZWQuIEFsbCBub2RlIHZhbHVlcyBtdXN0IGJlIHVuaXF1ZS5cIikpO1xuICAgICAgICAgICAgICBLMS5mbGF0Tm9kZXNbWDEudmFsdWVdID0geyBsYWJlbDogWDEubGFiZWwsIHZhbHVlOiBYMS52YWx1ZSwgY2hpbGRyZW46IFgxLmNoaWxkcmVuLCBwYXJlbnQ6IHAwLCBpc0NoaWxkOiBwMC52YWx1ZSAhPT0gdm9pZCAwLCBpc1BhcmVudDogZjAsIGlzTGVhZjogIWYwLCBzaG93Q2hlY2tib3g6IFgxLnNob3dDaGVja2JveCA9PT0gdm9pZCAwIHx8IFgxLnNob3dDaGVja2JveCwgZGlzYWJsZWQ6IEsxLmdldERpc2FibGVkU3RhdGUoWDEsIHAwLCB4MSwgSTEpLCB0cmVlRGVwdGg6IGUwLCBpbmRleDogSjEgfSwgSzEuZmxhdHRlbk5vZGVzKFgxLmNoaWxkcmVuLCBYMSwgZTAgKyAxKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH1cbiAgICAgICAgfSB9LCB7IGtleTogXCJub2RlSGFzQ2hpbGRyZW5cIiwgdmFsdWU6IGZ1bmN0aW9uKEIxKSB7XG4gICAgICAgICAgcmV0dXJuIEFycmF5LmlzQXJyYXkoQjEuY2hpbGRyZW4pO1xuICAgICAgICB9IH0sIHsga2V5OiBcImdldERpc2FibGVkU3RhdGVcIiwgdmFsdWU6IGZ1bmN0aW9uKEIxLCBLMSwgcDAsIGUwKSB7XG4gICAgICAgICAgcmV0dXJuICEhcDAgfHwgIShlMCB8fCAhSzEuZGlzYWJsZWQpIHx8ICEhQjEuZGlzYWJsZWQ7XG4gICAgICAgIH0gfSwgeyBrZXk6IFwiZGVzZXJpYWxpemVMaXN0c1wiLCB2YWx1ZTogZnVuY3Rpb24oQjEpIHtcbiAgICAgICAgICB2YXIgSzEgPSB0aGlzLCBwMCA9IFtcImNoZWNrZWRcIiwgXCJleHBhbmRlZFwiXTtcbiAgICAgICAgICBPYmplY3Qua2V5cyh0aGlzLmZsYXROb2RlcykuZm9yRWFjaChmdW5jdGlvbihlMCkge1xuICAgICAgICAgICAgcDAuZm9yRWFjaChmdW5jdGlvbihIMSkge1xuICAgICAgICAgICAgICBLMS5mbGF0Tm9kZXNbZTBdW0gxXSA9ICExO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfSksIHAwLmZvckVhY2goZnVuY3Rpb24oZTApIHtcbiAgICAgICAgICAgIEIxW2UwXS5mb3JFYWNoKGZ1bmN0aW9uKEgxKSB7XG4gICAgICAgICAgICAgIEsxLmZsYXROb2Rlc1tIMV0gIT09IHZvaWQgMCAmJiAoSzEuZmxhdE5vZGVzW0gxXVtlMF0gPSAhMCk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfSB9LCB7IGtleTogXCJzZXJpYWxpemVMaXN0XCIsIHZhbHVlOiBmdW5jdGlvbihCMSkge1xuICAgICAgICAgIHZhciBLMSA9IHRoaXMsIHAwID0gW107XG4gICAgICAgICAgcmV0dXJuIE9iamVjdC5rZXlzKHRoaXMuZmxhdE5vZGVzKS5mb3JFYWNoKGZ1bmN0aW9uKGUwKSB7XG4gICAgICAgICAgICBLMS5mbGF0Tm9kZXNbZTBdW0IxXSAmJiBwMC5wdXNoKGUwKTtcbiAgICAgICAgICB9KSwgcDA7XG4gICAgICAgIH0gfSwgeyBrZXk6IFwiZXhwYW5kQWxsTm9kZXNcIiwgdmFsdWU6IGZ1bmN0aW9uKEIxKSB7XG4gICAgICAgICAgdmFyIEsxID0gdGhpcztcbiAgICAgICAgICByZXR1cm4gT2JqZWN0LmtleXModGhpcy5mbGF0Tm9kZXMpLmZvckVhY2goZnVuY3Rpb24ocDApIHtcbiAgICAgICAgICAgIEsxLmZsYXROb2Rlc1twMF0uaXNQYXJlbnQgJiYgKEsxLmZsYXROb2Rlc1twMF0uZXhwYW5kZWQgPSBCMSk7XG4gICAgICAgICAgfSksIHRoaXM7XG4gICAgICAgIH0gfSwgeyBrZXk6IFwidG9nZ2xlQ2hlY2tlZFwiLCB2YWx1ZTogZnVuY3Rpb24oQjEsIEsxLCBwMCwgZTApIHtcbiAgICAgICAgICB2YXIgSDEgPSB0aGlzLCB4MSA9ICEoYXJndW1lbnRzLmxlbmd0aCA+IDQgJiYgYXJndW1lbnRzWzRdICE9PSB2b2lkIDApIHx8IGFyZ3VtZW50c1s0XSwgSTEgPSB0aGlzLmZsYXROb2Rlc1tCMS52YWx1ZV0sIFgxID0gW1IuUEFSRU5ULCBSLkFMTF0uaW5kZXhPZihwMCkgPiAtMSwgSjEgPSBbUi5MRUFGLCBSLkFMTF0uaW5kZXhPZihwMCkgPiAtMTtcbiAgICAgICAgICBpZiAoSTEuaXNMZWFmIHx8IGUwKSB7XG4gICAgICAgICAgICBpZiAoQjEuZGlzYWJsZWQpXG4gICAgICAgICAgICAgIHJldHVybiB0aGlzO1xuICAgICAgICAgICAgdGhpcy50b2dnbGVOb2RlKEIxLnZhbHVlLCBcImNoZWNrZWRcIiwgSzEpO1xuICAgICAgICAgIH0gZWxzZVxuICAgICAgICAgICAgKFgxIHx8IEkxLmNoaWxkcmVuLmxlbmd0aCA9PT0gMCkgJiYgdGhpcy50b2dnbGVOb2RlKEIxLnZhbHVlLCBcImNoZWNrZWRcIiwgSzEpLCBKMSAmJiBJMS5jaGlsZHJlbi5mb3JFYWNoKGZ1bmN0aW9uKGYwKSB7XG4gICAgICAgICAgICAgIEgxLnRvZ2dsZUNoZWNrZWQoZjAsIEsxLCBwMCwgZTAsICExKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIHJldHVybiB4MSAmJiAhZTAgJiYgSTEuaXNDaGlsZCAmJiBYMSAmJiB0aGlzLnRvZ2dsZVBhcmVudFN0YXR1cyhJMS5wYXJlbnQsIHAwKSwgdGhpcztcbiAgICAgICAgfSB9LCB7IGtleTogXCJ0b2dnbGVQYXJlbnRTdGF0dXNcIiwgdmFsdWU6IGZ1bmN0aW9uKEIxLCBLMSkge1xuICAgICAgICAgIHZhciBwMCA9IHRoaXMuZmxhdE5vZGVzW0IxLnZhbHVlXTtcbiAgICAgICAgICBwMC5pc0NoaWxkID8gKEsxID09PSBSLkFMTCAmJiB0aGlzLnRvZ2dsZU5vZGUoQjEudmFsdWUsIFwiY2hlY2tlZFwiLCB0aGlzLmlzRXZlcnlDaGlsZENoZWNrZWQocDApKSwgdGhpcy50b2dnbGVQYXJlbnRTdGF0dXMocDAucGFyZW50LCBLMSkpIDogdGhpcy50b2dnbGVOb2RlKEIxLnZhbHVlLCBcImNoZWNrZWRcIiwgdGhpcy5pc0V2ZXJ5Q2hpbGRDaGVja2VkKHAwKSk7XG4gICAgICAgIH0gfSwgeyBrZXk6IFwiaXNFdmVyeUNoaWxkQ2hlY2tlZFwiLCB2YWx1ZTogZnVuY3Rpb24oQjEpIHtcbiAgICAgICAgICB2YXIgSzEgPSB0aGlzO1xuICAgICAgICAgIHJldHVybiBCMS5jaGlsZHJlbi5ldmVyeShmdW5jdGlvbihwMCkge1xuICAgICAgICAgICAgcmV0dXJuIEsxLmdldE5vZGUocDAudmFsdWUpLmNoZWNrZWQ7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH0gfSwgeyBrZXk6IFwidG9nZ2xlTm9kZVwiLCB2YWx1ZTogZnVuY3Rpb24oQjEsIEsxLCBwMCkge1xuICAgICAgICAgIHJldHVybiB0aGlzLmZsYXROb2Rlc1tCMV1bSzFdID0gcDAsIHRoaXM7XG4gICAgICAgIH0gfV0sIEUxICYmIFYoZzEucHJvdG90eXBlLCBFMSksIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShnMSwgXCJwcm90b3R5cGVcIiwgeyB3cml0YWJsZTogITEgfSksIHcxO1xuICAgICAgfSgpO1xuICAgICAgZnVuY3Rpb24gaih3MSkge1xuICAgICAgICByZXR1cm4gaiA9IHR5cGVvZiBTeW1ib2wgPT0gXCJmdW5jdGlvblwiICYmIHR5cGVvZiBTeW1ib2wuaXRlcmF0b3IgPT0gXCJzeW1ib2xcIiA/IGZ1bmN0aW9uKGcxKSB7XG4gICAgICAgICAgcmV0dXJuIHR5cGVvZiBnMTtcbiAgICAgICAgfSA6IGZ1bmN0aW9uKGcxKSB7XG4gICAgICAgICAgcmV0dXJuIGcxICYmIHR5cGVvZiBTeW1ib2wgPT0gXCJmdW5jdGlvblwiICYmIGcxLmNvbnN0cnVjdG9yID09PSBTeW1ib2wgJiYgZzEgIT09IFN5bWJvbC5wcm90b3R5cGUgPyBcInN5bWJvbFwiIDogdHlwZW9mIGcxO1xuICAgICAgICB9LCBqKHcxKTtcbiAgICAgIH1cbiAgICAgIGZ1bmN0aW9uIFUoKSB7XG4gICAgICAgIHJldHVybiBVID0gT2JqZWN0LmFzc2lnbiA/IE9iamVjdC5hc3NpZ24uYmluZCgpIDogZnVuY3Rpb24odzEpIHtcbiAgICAgICAgICBmb3IgKHZhciBnMSA9IDE7IGcxIDwgYXJndW1lbnRzLmxlbmd0aDsgZzErKykge1xuICAgICAgICAgICAgdmFyIEUxID0gYXJndW1lbnRzW2cxXTtcbiAgICAgICAgICAgIGZvciAodmFyIEIxIGluIEUxKVxuICAgICAgICAgICAgICBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoRTEsIEIxKSAmJiAodzFbQjFdID0gRTFbQjFdKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIHcxO1xuICAgICAgICB9LCBVLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gICAgICB9XG4gICAgICBmdW5jdGlvbiBfKHcxLCBnMSkge1xuICAgICAgICB2YXIgRTEgPSBPYmplY3Qua2V5cyh3MSk7XG4gICAgICAgIGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7XG4gICAgICAgICAgdmFyIEIxID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyh3MSk7XG4gICAgICAgICAgZzEgJiYgKEIxID0gQjEuZmlsdGVyKGZ1bmN0aW9uKEsxKSB7XG4gICAgICAgICAgICByZXR1cm4gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih3MSwgSzEpLmVudW1lcmFibGU7XG4gICAgICAgICAgfSkpLCBFMS5wdXNoLmFwcGx5KEUxLCBCMSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIEUxO1xuICAgICAgfVxuICAgICAgZnVuY3Rpb24gcjEodzEsIGcxKSB7XG4gICAgICAgIGlmICghKHcxIGluc3RhbmNlb2YgZzEpKVxuICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb25cIik7XG4gICAgICB9XG4gICAgICBmdW5jdGlvbiBLKHcxLCBnMSkge1xuICAgICAgICBmb3IgKHZhciBFMSA9IDA7IEUxIDwgZzEubGVuZ3RoOyBFMSsrKSB7XG4gICAgICAgICAgdmFyIEIxID0gZzFbRTFdO1xuICAgICAgICAgIEIxLmVudW1lcmFibGUgPSBCMS5lbnVtZXJhYmxlIHx8ICExLCBCMS5jb25maWd1cmFibGUgPSAhMCwgXCJ2YWx1ZVwiIGluIEIxICYmIChCMS53cml0YWJsZSA9ICEwKSwgT2JqZWN0LmRlZmluZVByb3BlcnR5KHcxLCBCMS5rZXksIEIxKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgZnVuY3Rpb24gUSh3MSwgZzEpIHtcbiAgICAgICAgcmV0dXJuIFEgPSBPYmplY3Quc2V0UHJvdG90eXBlT2YgPyBPYmplY3Quc2V0UHJvdG90eXBlT2YuYmluZCgpIDogZnVuY3Rpb24oRTEsIEIxKSB7XG4gICAgICAgICAgcmV0dXJuIEUxLl9fcHJvdG9fXyA9IEIxLCBFMTtcbiAgICAgICAgfSwgUSh3MSwgZzEpO1xuICAgICAgfVxuICAgICAgZnVuY3Rpb24gRSh3MSwgZzEpIHtcbiAgICAgICAgaWYgKGcxICYmIChqKGcxKSA9PT0gXCJvYmplY3RcIiB8fCB0eXBlb2YgZzEgPT0gXCJmdW5jdGlvblwiKSlcbiAgICAgICAgICByZXR1cm4gZzE7XG4gICAgICAgIGlmIChnMSAhPT0gdm9pZCAwKVxuICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJEZXJpdmVkIGNvbnN0cnVjdG9ycyBtYXkgb25seSByZXR1cm4gb2JqZWN0IG9yIHVuZGVmaW5lZFwiKTtcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uKEUxKSB7XG4gICAgICAgICAgaWYgKEUxID09PSB2b2lkIDApXG4gICAgICAgICAgICB0aHJvdyBuZXcgUmVmZXJlbmNlRXJyb3IoXCJ0aGlzIGhhc24ndCBiZWVuIGluaXRpYWxpc2VkIC0gc3VwZXIoKSBoYXNuJ3QgYmVlbiBjYWxsZWRcIik7XG4gICAgICAgICAgcmV0dXJuIEUxO1xuICAgICAgICB9KHcxKTtcbiAgICAgIH1cbiAgICAgIGZ1bmN0aW9uIEQodzEpIHtcbiAgICAgICAgcmV0dXJuIEQgPSBPYmplY3Quc2V0UHJvdG90eXBlT2YgPyBPYmplY3QuZ2V0UHJvdG90eXBlT2YuYmluZCgpIDogZnVuY3Rpb24oZzEpIHtcbiAgICAgICAgICByZXR1cm4gZzEuX19wcm90b19fIHx8IE9iamVjdC5nZXRQcm90b3R5cGVPZihnMSk7XG4gICAgICAgIH0sIEQodzEpO1xuICAgICAgfVxuICAgICAgZnVuY3Rpb24gRyh3MSwgZzEsIEUxKSB7XG4gICAgICAgIHJldHVybiBnMSBpbiB3MSA/IE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh3MSwgZzEsIHsgdmFsdWU6IEUxLCBlbnVtZXJhYmxlOiAhMCwgY29uZmlndXJhYmxlOiAhMCwgd3JpdGFibGU6ICEwIH0pIDogdzFbZzFdID0gRTEsIHcxO1xuICAgICAgfVxuICAgICAgdmFyIEogPSBmdW5jdGlvbih3MSkge1xuICAgICAgICAoZnVuY3Rpb24oSDEsIHgxKSB7XG4gICAgICAgICAgaWYgKHR5cGVvZiB4MSAhPSBcImZ1bmN0aW9uXCIgJiYgeDEgIT09IG51bGwpXG4gICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiU3VwZXIgZXhwcmVzc2lvbiBtdXN0IGVpdGhlciBiZSBudWxsIG9yIGEgZnVuY3Rpb25cIik7XG4gICAgICAgICAgSDEucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZSh4MSAmJiB4MS5wcm90b3R5cGUsIHsgY29uc3RydWN0b3I6IHsgdmFsdWU6IEgxLCB3cml0YWJsZTogITAsIGNvbmZpZ3VyYWJsZTogITAgfSB9KSwgT2JqZWN0LmRlZmluZVByb3BlcnR5KEgxLCBcInByb3RvdHlwZVwiLCB7IHdyaXRhYmxlOiAhMSB9KSwgeDEgJiYgUShIMSwgeDEpO1xuICAgICAgICB9KShlMCwgdzEpO1xuICAgICAgICB2YXIgZzEsIEUxLCBCMSwgSzEsIHAwID0gKEIxID0gZTAsIEsxID0gZnVuY3Rpb24oKSB7XG4gICAgICAgICAgaWYgKHR5cGVvZiBSZWZsZWN0ID4gXCJ1XCIgfHwgIVJlZmxlY3QuY29uc3RydWN0IHx8IFJlZmxlY3QuY29uc3RydWN0LnNoYW0pXG4gICAgICAgICAgICByZXR1cm4gITE7XG4gICAgICAgICAgaWYgKHR5cGVvZiBQcm94eSA9PSBcImZ1bmN0aW9uXCIpXG4gICAgICAgICAgICByZXR1cm4gITA7XG4gICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIHJldHVybiBCb29sZWFuLnByb3RvdHlwZS52YWx1ZU9mLmNhbGwoUmVmbGVjdC5jb25zdHJ1Y3QoQm9vbGVhbiwgW10sIGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgfSkpLCAhMDtcbiAgICAgICAgICB9IGNhdGNoIHtcbiAgICAgICAgICAgIHJldHVybiAhMTtcbiAgICAgICAgICB9XG4gICAgICAgIH0oKSwgZnVuY3Rpb24oKSB7XG4gICAgICAgICAgdmFyIEgxLCB4MSA9IEQoQjEpO1xuICAgICAgICAgIGlmIChLMSkge1xuICAgICAgICAgICAgdmFyIEkxID0gRCh0aGlzKS5jb25zdHJ1Y3RvcjtcbiAgICAgICAgICAgIEgxID0gUmVmbGVjdC5jb25zdHJ1Y3QoeDEsIGFyZ3VtZW50cywgSTEpO1xuICAgICAgICAgIH0gZWxzZVxuICAgICAgICAgICAgSDEgPSB4MS5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICAgICAgICAgIHJldHVybiBFKHRoaXMsIEgxKTtcbiAgICAgICAgfSk7XG4gICAgICAgIGZ1bmN0aW9uIGUwKCkge1xuICAgICAgICAgIHJldHVybiByMSh0aGlzLCBlMCksIHAwLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGcxID0gZTAsIEUxID0gW3sga2V5OiBcImNvbXBvbmVudERpZE1vdW50XCIsIHZhbHVlOiBmdW5jdGlvbigpIHtcbiAgICAgICAgICB0aGlzLnVwZGF0ZURldGVybWluYXRlUHJvcGVydHkoKTtcbiAgICAgICAgfSB9LCB7IGtleTogXCJjb21wb25lbnREaWRVcGRhdGVcIiwgdmFsdWU6IGZ1bmN0aW9uKCkge1xuICAgICAgICAgIHRoaXMudXBkYXRlRGV0ZXJtaW5hdGVQcm9wZXJ0eSgpO1xuICAgICAgICB9IH0sIHsga2V5OiBcInVwZGF0ZURldGVybWluYXRlUHJvcGVydHlcIiwgdmFsdWU6IGZ1bmN0aW9uKCkge1xuICAgICAgICAgIHZhciBIMSA9IHRoaXMucHJvcHMuaW5kZXRlcm1pbmF0ZTtcbiAgICAgICAgICB0aGlzLmNoZWNrYm94LmluZGV0ZXJtaW5hdGUgPSBIMTtcbiAgICAgICAgfSB9LCB7IGtleTogXCJyZW5kZXJcIiwgdmFsdWU6IGZ1bmN0aW9uKCkge1xuICAgICAgICAgIHZhciBIMSA9IHRoaXMsIHgxID0gZnVuY3Rpb24oSTEpIHtcbiAgICAgICAgICAgIGZvciAodmFyIFgxID0gMTsgWDEgPCBhcmd1bWVudHMubGVuZ3RoOyBYMSsrKSB7XG4gICAgICAgICAgICAgIHZhciBKMSA9IGFyZ3VtZW50c1tYMV0gIT0gbnVsbCA/IGFyZ3VtZW50c1tYMV0gOiB7fTtcbiAgICAgICAgICAgICAgWDEgJSAyID8gXyhPYmplY3QoSjEpLCAhMCkuZm9yRWFjaChmdW5jdGlvbihmMCkge1xuICAgICAgICAgICAgICAgIEcoSTEsIGYwLCBKMVtmMF0pO1xuICAgICAgICAgICAgICB9KSA6IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzID8gT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoSTEsIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzKEoxKSkgOiBfKE9iamVjdChKMSkpLmZvckVhY2goZnVuY3Rpb24oZjApIHtcbiAgICAgICAgICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoSTEsIGYwLCBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKEoxLCBmMCkpO1xuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBJMTtcbiAgICAgICAgICB9KHt9LCB0aGlzLnByb3BzKTtcbiAgICAgICAgICByZXR1cm4gZGVsZXRlIHgxLmluZGV0ZXJtaW5hdGUsIE8oKS5jcmVhdGVFbGVtZW50KFwiaW5wdXRcIiwgVSh7fSwgeDEsIHsgcmVmOiBmdW5jdGlvbihJMSkge1xuICAgICAgICAgICAgSDEuY2hlY2tib3ggPSBJMTtcbiAgICAgICAgICB9LCB0eXBlOiBcImNoZWNrYm94XCIgfSkpO1xuICAgICAgICB9IH1dLCBFMSAmJiBLKGcxLnByb3RvdHlwZSwgRTEpLCBPYmplY3QuZGVmaW5lUHJvcGVydHkoZzEsIFwicHJvdG90eXBlXCIsIHsgd3JpdGFibGU6ICExIH0pLCBlMDtcbiAgICAgIH0oTygpLlB1cmVDb21wb25lbnQpO1xuICAgICAgRyhKLCBcInByb3BUeXBlc1wiLCB7IGluZGV0ZXJtaW5hdGU6IHooKS5ib29sIH0pLCBHKEosIFwiZGVmYXVsdFByb3BzXCIsIHsgaW5kZXRlcm1pbmF0ZTogITEgfSk7XG4gICAgICBjb25zdCBTID0gSiwgVyA9IHooKS5zaGFwZSh7IGNoZWNrOiB6KCkubm9kZSwgdW5jaGVjazogeigpLm5vZGUsIGhhbGZDaGVjazogeigpLm5vZGUsIGV4cGFuZENsb3NlOiB6KCkubm9kZSwgZXhwYW5kT3BlbjogeigpLm5vZGUsIGV4cGFuZEFsbDogeigpLm5vZGUsIGNvbGxhcHNlQWxsOiB6KCkubm9kZSwgcGFyZW50Q2xvc2U6IHooKS5ub2RlLCBwYXJlbnRPcGVuOiB6KCkubm9kZSwgbGVhZjogeigpLm5vZGUgfSksIFAgPSB6KCkuc2hhcGUoeyBjb2xsYXBzZUFsbDogeigpLnN0cmluZy5pc1JlcXVpcmVkLCBleHBhbmRBbGw6IHooKS5zdHJpbmcuaXNSZXF1aXJlZCwgdG9nZ2xlOiB6KCkuc3RyaW5nLmlzUmVxdWlyZWQgfSk7XG4gICAgICBmdW5jdGlvbiBZKHcxKSB7XG4gICAgICAgIHJldHVybiBZID0gdHlwZW9mIFN5bWJvbCA9PSBcImZ1bmN0aW9uXCIgJiYgdHlwZW9mIFN5bWJvbC5pdGVyYXRvciA9PSBcInN5bWJvbFwiID8gZnVuY3Rpb24oZzEpIHtcbiAgICAgICAgICByZXR1cm4gdHlwZW9mIGcxO1xuICAgICAgICB9IDogZnVuY3Rpb24oZzEpIHtcbiAgICAgICAgICByZXR1cm4gZzEgJiYgdHlwZW9mIFN5bWJvbCA9PSBcImZ1bmN0aW9uXCIgJiYgZzEuY29uc3RydWN0b3IgPT09IFN5bWJvbCAmJiBnMSAhPT0gU3ltYm9sLnByb3RvdHlwZSA/IFwic3ltYm9sXCIgOiB0eXBlb2YgZzE7XG4gICAgICAgIH0sIFkodzEpO1xuICAgICAgfVxuICAgICAgZnVuY3Rpb24gWih3MSwgZzEpIHtcbiAgICAgICAgZm9yICh2YXIgRTEgPSAwOyBFMSA8IGcxLmxlbmd0aDsgRTErKykge1xuICAgICAgICAgIHZhciBCMSA9IGcxW0UxXTtcbiAgICAgICAgICBCMS5lbnVtZXJhYmxlID0gQjEuZW51bWVyYWJsZSB8fCAhMSwgQjEuY29uZmlndXJhYmxlID0gITAsIFwidmFsdWVcIiBpbiBCMSAmJiAoQjEud3JpdGFibGUgPSAhMCksIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh3MSwgQjEua2V5LCBCMSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGZ1bmN0aW9uIHQxKHcxLCBnMSkge1xuICAgICAgICByZXR1cm4gdDEgPSBPYmplY3Quc2V0UHJvdG90eXBlT2YgPyBPYmplY3Quc2V0UHJvdG90eXBlT2YuYmluZCgpIDogZnVuY3Rpb24oRTEsIEIxKSB7XG4gICAgICAgICAgcmV0dXJuIEUxLl9fcHJvdG9fXyA9IEIxLCBFMTtcbiAgICAgICAgfSwgdDEodzEsIGcxKTtcbiAgICAgIH1cbiAgICAgIGZ1bmN0aW9uIGkxKHcxLCBnMSkge1xuICAgICAgICBpZiAoZzEgJiYgKFkoZzEpID09PSBcIm9iamVjdFwiIHx8IHR5cGVvZiBnMSA9PSBcImZ1bmN0aW9uXCIpKVxuICAgICAgICAgIHJldHVybiBnMTtcbiAgICAgICAgaWYgKGcxICE9PSB2b2lkIDApXG4gICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkRlcml2ZWQgY29uc3RydWN0b3JzIG1heSBvbmx5IHJldHVybiBvYmplY3Qgb3IgdW5kZWZpbmVkXCIpO1xuICAgICAgICByZXR1cm4gbjEodzEpO1xuICAgICAgfVxuICAgICAgZnVuY3Rpb24gbjEodzEpIHtcbiAgICAgICAgaWYgKHcxID09PSB2b2lkIDApXG4gICAgICAgICAgdGhyb3cgbmV3IFJlZmVyZW5jZUVycm9yKFwidGhpcyBoYXNuJ3QgYmVlbiBpbml0aWFsaXNlZCAtIHN1cGVyKCkgaGFzbid0IGJlZW4gY2FsbGVkXCIpO1xuICAgICAgICByZXR1cm4gdzE7XG4gICAgICB9XG4gICAgICBmdW5jdGlvbiBzMSh3MSkge1xuICAgICAgICByZXR1cm4gczEgPSBPYmplY3Quc2V0UHJvdG90eXBlT2YgPyBPYmplY3QuZ2V0UHJvdG90eXBlT2YuYmluZCgpIDogZnVuY3Rpb24oZzEpIHtcbiAgICAgICAgICByZXR1cm4gZzEuX19wcm90b19fIHx8IE9iamVjdC5nZXRQcm90b3R5cGVPZihnMSk7XG4gICAgICAgIH0sIHMxKHcxKTtcbiAgICAgIH1cbiAgICAgIGZ1bmN0aW9uIGQxKHcxLCBnMSwgRTEpIHtcbiAgICAgICAgcmV0dXJuIGcxIGluIHcxID8gT2JqZWN0LmRlZmluZVByb3BlcnR5KHcxLCBnMSwgeyB2YWx1ZTogRTEsIGVudW1lcmFibGU6ICEwLCBjb25maWd1cmFibGU6ICEwLCB3cml0YWJsZTogITAgfSkgOiB3MVtnMV0gPSBFMSwgdzE7XG4gICAgICB9XG4gICAgICB2YXIgYjEgPSBmdW5jdGlvbih3MSkge1xuICAgICAgICAoZnVuY3Rpb24oSDEsIHgxKSB7XG4gICAgICAgICAgaWYgKHR5cGVvZiB4MSAhPSBcImZ1bmN0aW9uXCIgJiYgeDEgIT09IG51bGwpXG4gICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiU3VwZXIgZXhwcmVzc2lvbiBtdXN0IGVpdGhlciBiZSBudWxsIG9yIGEgZnVuY3Rpb25cIik7XG4gICAgICAgICAgSDEucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZSh4MSAmJiB4MS5wcm90b3R5cGUsIHsgY29uc3RydWN0b3I6IHsgdmFsdWU6IEgxLCB3cml0YWJsZTogITAsIGNvbmZpZ3VyYWJsZTogITAgfSB9KSwgT2JqZWN0LmRlZmluZVByb3BlcnR5KEgxLCBcInByb3RvdHlwZVwiLCB7IHdyaXRhYmxlOiAhMSB9KSwgeDEgJiYgdDEoSDEsIHgxKTtcbiAgICAgICAgfSkoZTAsIHcxKTtcbiAgICAgICAgdmFyIGcxLCBFMSwgQjEsIEsxLCBwMCA9IChCMSA9IGUwLCBLMSA9IGZ1bmN0aW9uKCkge1xuICAgICAgICAgIGlmICh0eXBlb2YgUmVmbGVjdCA+IFwidVwiIHx8ICFSZWZsZWN0LmNvbnN0cnVjdCB8fCBSZWZsZWN0LmNvbnN0cnVjdC5zaGFtKVxuICAgICAgICAgICAgcmV0dXJuICExO1xuICAgICAgICAgIGlmICh0eXBlb2YgUHJveHkgPT0gXCJmdW5jdGlvblwiKVxuICAgICAgICAgICAgcmV0dXJuICEwO1xuICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICByZXR1cm4gQm9vbGVhbi5wcm90b3R5cGUudmFsdWVPZi5jYWxsKFJlZmxlY3QuY29uc3RydWN0KEJvb2xlYW4sIFtdLCBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgIH0pKSwgITA7XG4gICAgICAgICAgfSBjYXRjaCB7XG4gICAgICAgICAgICByZXR1cm4gITE7XG4gICAgICAgICAgfVxuICAgICAgICB9KCksIGZ1bmN0aW9uKCkge1xuICAgICAgICAgIHZhciBIMSwgeDEgPSBzMShCMSk7XG4gICAgICAgICAgaWYgKEsxKSB7XG4gICAgICAgICAgICB2YXIgSTEgPSBzMSh0aGlzKS5jb25zdHJ1Y3RvcjtcbiAgICAgICAgICAgIEgxID0gUmVmbGVjdC5jb25zdHJ1Y3QoeDEsIGFyZ3VtZW50cywgSTEpO1xuICAgICAgICAgIH0gZWxzZVxuICAgICAgICAgICAgSDEgPSB4MS5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICAgICAgICAgIHJldHVybiBpMSh0aGlzLCBIMSk7XG4gICAgICAgIH0pO1xuICAgICAgICBmdW5jdGlvbiBlMChIMSkge1xuICAgICAgICAgIHZhciB4MTtcbiAgICAgICAgICByZXR1cm4gZnVuY3Rpb24oSTEsIFgxKSB7XG4gICAgICAgICAgICBpZiAoIShJMSBpbnN0YW5jZW9mIFgxKSlcbiAgICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvblwiKTtcbiAgICAgICAgICB9KHRoaXMsIGUwKSwgKHgxID0gcDAuY2FsbCh0aGlzLCBIMSkpLm9uQ2hlY2sgPSB4MS5vbkNoZWNrLmJpbmQobjEoeDEpKSwgeDEub25DaGVja2JveEtleVByZXNzID0geDEub25DaGVja2JveEtleVByZXNzLmJpbmQobjEoeDEpKSwgeDEub25DaGVja2JveEtleVVwID0geDEub25DaGVja2JveEtleVVwLmJpbmQobjEoeDEpKSwgeDEub25DbGljayA9IHgxLm9uQ2xpY2suYmluZChuMSh4MSkpLCB4MS5vbkV4cGFuZCA9IHgxLm9uRXhwYW5kLmJpbmQobjEoeDEpKSwgeDE7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGcxID0gZTAsIChFMSA9IFt7IGtleTogXCJvbkNoZWNrXCIsIHZhbHVlOiBmdW5jdGlvbigpIHtcbiAgICAgICAgICB2YXIgSDEgPSB0aGlzLnByb3BzLCB4MSA9IEgxLnZhbHVlO1xuICAgICAgICAgICgwLCBIMS5vbkNoZWNrKSh7IHZhbHVlOiB4MSwgY2hlY2tlZDogdGhpcy5nZXRDaGVja1N0YXRlKHsgdG9nZ2xlOiAhMCB9KSB9KTtcbiAgICAgICAgfSB9LCB7IGtleTogXCJvbkNoZWNrYm94S2V5UHJlc3NcIiwgdmFsdWU6IGZ1bmN0aW9uKEgxKSB7XG4gICAgICAgICAgSDEud2hpY2ggPT09IDMyICYmIEgxLnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIH0gfSwgeyBrZXk6IFwib25DaGVja2JveEtleVVwXCIsIHZhbHVlOiBmdW5jdGlvbihIMSkge1xuICAgICAgICAgIHZhciB4MSA9IEgxLmtleUNvZGU7XG4gICAgICAgICAgWzEzLCAzMl0uaW5jbHVkZXMoeDEpICYmIHRoaXMub25DaGVjaygpO1xuICAgICAgICB9IH0sIHsga2V5OiBcIm9uQ2xpY2tcIiwgdmFsdWU6IGZ1bmN0aW9uKCkge1xuICAgICAgICAgIHZhciBIMSA9IHRoaXMucHJvcHMsIHgxID0gSDEuZXhwYW5kT25DbGljaywgSTEgPSBIMS5pc1BhcmVudCwgWDEgPSBIMS52YWx1ZSwgSjEgPSBIMS5vbkNsaWNrO1xuICAgICAgICAgIEkxICYmIHgxICYmIHRoaXMub25FeHBhbmQoKSwgSjEoeyB2YWx1ZTogWDEsIGNoZWNrZWQ6IHRoaXMuZ2V0Q2hlY2tTdGF0ZSh7IHRvZ2dsZTogITEgfSkgfSk7XG4gICAgICAgIH0gfSwgeyBrZXk6IFwib25FeHBhbmRcIiwgdmFsdWU6IGZ1bmN0aW9uKCkge1xuICAgICAgICAgIHZhciBIMSA9IHRoaXMucHJvcHMsIHgxID0gSDEuZXhwYW5kZWQsIEkxID0gSDEudmFsdWU7XG4gICAgICAgICAgKDAsIEgxLm9uRXhwYW5kKSh7IHZhbHVlOiBJMSwgZXhwYW5kZWQ6ICF4MSB9KTtcbiAgICAgICAgfSB9LCB7IGtleTogXCJnZXRDaGVja1N0YXRlXCIsIHZhbHVlOiBmdW5jdGlvbihIMSkge1xuICAgICAgICAgIHZhciB4MSA9IEgxLnRvZ2dsZSwgSTEgPSB0aGlzLnByb3BzLCBYMSA9IEkxLmNoZWNrZWQsIEoxID0gSTEub3B0aW1pc3RpY1RvZ2dsZTtcbiAgICAgICAgICByZXR1cm4gIShYMSAhPT0gMCB8fCAheDEpIHx8IFgxID09PSAxICYmICF4MSB8fCBYMSA9PT0gMiAmJiBKMTtcbiAgICAgICAgfSB9LCB7IGtleTogXCJyZW5kZXJDb2xsYXBzZUJ1dHRvblwiLCB2YWx1ZTogZnVuY3Rpb24oKSB7XG4gICAgICAgICAgdmFyIEgxID0gdGhpcy5wcm9wcywgeDEgPSBIMS5leHBhbmREaXNhYmxlZCwgSTEgPSBIMS5pc0xlYWYsIFgxID0gSDEubGFuZztcbiAgICAgICAgICByZXR1cm4gSTEgPyBPKCkuY3JlYXRlRWxlbWVudChcInNwYW5cIiwgeyBjbGFzc05hbWU6IFwicmN0LWNvbGxhcHNlXCIgfSwgTygpLmNyZWF0ZUVsZW1lbnQoXCJzcGFuXCIsIHsgY2xhc3NOYW1lOiBcInJjdC1pY29uXCIgfSkpIDogTygpLmNyZWF0ZUVsZW1lbnQoSCwgeyBjbGFzc05hbWU6IFwicmN0LWNvbGxhcHNlIHJjdC1jb2xsYXBzZS1idG5cIiwgZGlzYWJsZWQ6IHgxLCB0aXRsZTogWDEudG9nZ2xlLCBvbkNsaWNrOiB0aGlzLm9uRXhwYW5kIH0sIHRoaXMucmVuZGVyQ29sbGFwc2VJY29uKCkpO1xuICAgICAgICB9IH0sIHsga2V5OiBcInJlbmRlckNvbGxhcHNlSWNvblwiLCB2YWx1ZTogZnVuY3Rpb24oKSB7XG4gICAgICAgICAgdmFyIEgxID0gdGhpcy5wcm9wcywgeDEgPSBIMS5leHBhbmRlZCwgSTEgPSBIMS5pY29ucywgWDEgPSBJMS5leHBhbmRDbG9zZSwgSjEgPSBJMS5leHBhbmRPcGVuO1xuICAgICAgICAgIHJldHVybiB4MSA/IEoxIDogWDE7XG4gICAgICAgIH0gfSwgeyBrZXk6IFwicmVuZGVyQ2hlY2tib3hJY29uXCIsIHZhbHVlOiBmdW5jdGlvbigpIHtcbiAgICAgICAgICB2YXIgSDEgPSB0aGlzLnByb3BzLCB4MSA9IEgxLmNoZWNrZWQsIEkxID0gSDEuaWNvbnMsIFgxID0gSTEudW5jaGVjaywgSjEgPSBJMS5jaGVjaywgZjAgPSBJMS5oYWxmQ2hlY2s7XG4gICAgICAgICAgcmV0dXJuIHgxID09PSAwID8gWDEgOiB4MSA9PT0gMSA/IEoxIDogZjA7XG4gICAgICAgIH0gfSwgeyBrZXk6IFwicmVuZGVyTm9kZUljb25cIiwgdmFsdWU6IGZ1bmN0aW9uKCkge1xuICAgICAgICAgIHZhciBIMSA9IHRoaXMucHJvcHMsIHgxID0gSDEuZXhwYW5kZWQsIEkxID0gSDEuaWNvbiwgWDEgPSBIMS5pY29ucywgSjEgPSBYMS5sZWFmLCBmMCA9IFgxLnBhcmVudENsb3NlLCBJMCA9IFgxLnBhcmVudE9wZW4sIE8xID0gSDEuaXNMZWFmO1xuICAgICAgICAgIHJldHVybiBJMSAhPT0gbnVsbCA/IEkxIDogTzEgPyBKMSA6IHgxID8gSTAgOiBmMDtcbiAgICAgICAgfSB9LCB7IGtleTogXCJyZW5kZXJCYXJlTGFiZWxcIiwgdmFsdWU6IGZ1bmN0aW9uKEgxKSB7XG4gICAgICAgICAgdmFyIHgxID0gdGhpcy5wcm9wcywgSTEgPSB4MS5vbkNsaWNrLCBYMSA9IHgxLnRpdGxlLCBKMSA9IEkxICE9PSBudWxsO1xuICAgICAgICAgIHJldHVybiBPKCkuY3JlYXRlRWxlbWVudChcInNwYW5cIiwgeyBjbGFzc05hbWU6IFwicmN0LWJhcmUtbGFiZWxcIiwgdGl0bGU6IFgxIH0sIEoxID8gTygpLmNyZWF0ZUVsZW1lbnQoXCJzcGFuXCIsIHsgY2xhc3NOYW1lOiBcInJjdC1ub2RlLWNsaWNrYWJsZVwiLCBvbkNsaWNrOiB0aGlzLm9uQ2xpY2ssIG9uS2V5UHJlc3M6IHRoaXMub25DbGljaywgcm9sZTogXCJidXR0b25cIiwgdGFiSW5kZXg6IDAgfSwgSDEpIDogSDEpO1xuICAgICAgICB9IH0sIHsga2V5OiBcInJlbmRlckNoZWNrYm94TGFiZWxcIiwgdmFsdWU6IGZ1bmN0aW9uKEgxKSB7XG4gICAgICAgICAgdmFyIHgxID0gdGhpcy5wcm9wcywgSTEgPSB4MS5jaGVja2VkLCBYMSA9IHgxLmRpc2FibGVkLCBKMSA9IHgxLnRpdGxlLCBmMCA9IHgxLnRyZWVJZCwgSTAgPSB4MS52YWx1ZSwgTzEgPSB4MS5vbkNsaWNrICE9PSBudWxsLCBWMSA9IFwiXCIuY29uY2F0KGYwLCBcIi1cIikuY29uY2F0KFN0cmluZyhJMCkuc3BsaXQoXCIgXCIpLmpvaW4oXCJfXCIpKSwgRzEgPSBbTygpLmNyZWF0ZUVsZW1lbnQoXCJsYWJlbFwiLCB7IGtleTogMCwgaHRtbEZvcjogVjEsIHRpdGxlOiBKMSB9LCBPKCkuY3JlYXRlRWxlbWVudChTLCB7IGNoZWNrZWQ6IEkxID09PSAxLCBkaXNhYmxlZDogWDEsIGlkOiBWMSwgaW5kZXRlcm1pbmF0ZTogSTEgPT09IDIsIG9uQ2xpY2s6IHRoaXMub25DaGVjaywgb25DaGFuZ2U6IGZ1bmN0aW9uKCkge1xuICAgICAgICAgIH0gfSksIE8oKS5jcmVhdGVFbGVtZW50KFwic3BhblwiLCB7IFwiYXJpYS1jaGVja2VkXCI6IEkxID09PSAxLCBcImFyaWEtZGlzYWJsZWRcIjogWDEsIGNsYXNzTmFtZTogXCJyY3QtY2hlY2tib3hcIiwgcm9sZTogXCJjaGVja2JveFwiLCB0YWJJbmRleDogMCwgb25LZXlQcmVzczogdGhpcy5vbkNoZWNrYm94S2V5UHJlc3MsIG9uS2V5VXA6IHRoaXMub25DaGVja2JveEtleVVwIH0sIHRoaXMucmVuZGVyQ2hlY2tib3hJY29uKCkpLCBPMSA/IG51bGwgOiBIMSldO1xuICAgICAgICAgIHJldHVybiBPMSAmJiBHMS5wdXNoKE8oKS5jcmVhdGVFbGVtZW50KFwic3BhblwiLCB7IGtleTogMSwgY2xhc3NOYW1lOiBcInJjdC1ub2RlLWNsaWNrYWJsZVwiLCBvbkNsaWNrOiB0aGlzLm9uQ2xpY2ssIG9uS2V5UHJlc3M6IHRoaXMub25DbGljaywgcm9sZTogXCJsaW5rXCIsIHRhYkluZGV4OiAwIH0sIEgxKSksIEcxO1xuICAgICAgICB9IH0sIHsga2V5OiBcInJlbmRlckxhYmVsXCIsIHZhbHVlOiBmdW5jdGlvbigpIHtcbiAgICAgICAgICB2YXIgSDEgPSB0aGlzLnByb3BzLCB4MSA9IEgxLmxhYmVsLCBJMSA9IEgxLnNob3dDaGVja2JveCwgWDEgPSBbSDEuc2hvd05vZGVJY29uID8gTygpLmNyZWF0ZUVsZW1lbnQoXCJzcGFuXCIsIHsga2V5OiAwLCBjbGFzc05hbWU6IFwicmN0LW5vZGUtaWNvblwiIH0sIHRoaXMucmVuZGVyTm9kZUljb24oKSkgOiBudWxsLCBPKCkuY3JlYXRlRWxlbWVudChcInNwYW5cIiwgeyBrZXk6IDEsIGNsYXNzTmFtZTogXCJyY3QtdGl0bGVcIiB9LCB4MSldO1xuICAgICAgICAgIHJldHVybiBJMSA/IHRoaXMucmVuZGVyQ2hlY2tib3hMYWJlbChYMSkgOiB0aGlzLnJlbmRlckJhcmVMYWJlbChYMSk7XG4gICAgICAgIH0gfSwgeyBrZXk6IFwicmVuZGVyQ2hpbGRyZW5cIiwgdmFsdWU6IGZ1bmN0aW9uKCkge1xuICAgICAgICAgIHJldHVybiB0aGlzLnByb3BzLmV4cGFuZGVkID8gdGhpcy5wcm9wcy5jaGlsZHJlbiA6IG51bGw7XG4gICAgICAgIH0gfSwgeyBrZXk6IFwicmVuZGVyXCIsIHZhbHVlOiBmdW5jdGlvbigpIHtcbiAgICAgICAgICB2YXIgSDEgPSB0aGlzLnByb3BzLCB4MSA9IEgxLmNsYXNzTmFtZSwgSTEgPSBIMS5kaXNhYmxlZCwgWDEgPSBIMS5leHBhbmRlZCwgSjEgPSBIMS5pc0xlYWYsIGYwID0gbCgpKHsgXCJyY3Qtbm9kZVwiOiAhMCwgXCJyY3Qtbm9kZS1sZWFmXCI6IEoxLCBcInJjdC1ub2RlLXBhcmVudFwiOiAhSjEsIFwicmN0LW5vZGUtZXhwYW5kZWRcIjogIUoxICYmIFgxLCBcInJjdC1ub2RlLWNvbGxhcHNlZFwiOiAhSjEgJiYgIVgxLCBcInJjdC1kaXNhYmxlZFwiOiBJMSB9LCB4MSk7XG4gICAgICAgICAgcmV0dXJuIE8oKS5jcmVhdGVFbGVtZW50KFwibGlcIiwgeyBjbGFzc05hbWU6IGYwIH0sIE8oKS5jcmVhdGVFbGVtZW50KFwic3BhblwiLCB7IGNsYXNzTmFtZTogXCJyY3QtdGV4dFwiIH0sIHRoaXMucmVuZGVyQ29sbGFwc2VCdXR0b24oKSwgdGhpcy5yZW5kZXJMYWJlbCgpKSwgdGhpcy5yZW5kZXJDaGlsZHJlbigpKTtcbiAgICAgICAgfSB9XSkgJiYgWihnMS5wcm90b3R5cGUsIEUxKSwgT2JqZWN0LmRlZmluZVByb3BlcnR5KGcxLCBcInByb3RvdHlwZVwiLCB7IHdyaXRhYmxlOiAhMSB9KSwgZTA7XG4gICAgICB9KE8oKS5QdXJlQ29tcG9uZW50KTtcbiAgICAgIGQxKGIxLCBcInByb3BUeXBlc1wiLCB7IGNoZWNrZWQ6IHooKS5udW1iZXIuaXNSZXF1aXJlZCwgZGlzYWJsZWQ6IHooKS5ib29sLmlzUmVxdWlyZWQsIGV4cGFuZERpc2FibGVkOiB6KCkuYm9vbC5pc1JlcXVpcmVkLCBleHBhbmRlZDogeigpLmJvb2wuaXNSZXF1aXJlZCwgaWNvbnM6IFcuaXNSZXF1aXJlZCwgaXNMZWFmOiB6KCkuYm9vbC5pc1JlcXVpcmVkLCBpc1BhcmVudDogeigpLmJvb2wuaXNSZXF1aXJlZCwgbGFiZWw6IHooKS5ub2RlLmlzUmVxdWlyZWQsIGxhbmc6IFAuaXNSZXF1aXJlZCwgb3B0aW1pc3RpY1RvZ2dsZTogeigpLmJvb2wuaXNSZXF1aXJlZCwgc2hvd05vZGVJY29uOiB6KCkuYm9vbC5pc1JlcXVpcmVkLCB0cmVlSWQ6IHooKS5zdHJpbmcuaXNSZXF1aXJlZCwgdmFsdWU6IHooKS5vbmVPZlR5cGUoW3ooKS5zdHJpbmcsIHooKS5udW1iZXJdKS5pc1JlcXVpcmVkLCBvbkNoZWNrOiB6KCkuZnVuYy5pc1JlcXVpcmVkLCBvbkV4cGFuZDogeigpLmZ1bmMuaXNSZXF1aXJlZCwgY2hpbGRyZW46IHooKS5ub2RlLCBjbGFzc05hbWU6IHooKS5zdHJpbmcsIGV4cGFuZE9uQ2xpY2s6IHooKS5ib29sLCBpY29uOiB6KCkubm9kZSwgc2hvd0NoZWNrYm94OiB6KCkuYm9vbCwgdGl0bGU6IHooKS5zdHJpbmcsIG9uQ2xpY2s6IHooKS5mdW5jIH0pLCBkMShiMSwgXCJkZWZhdWx0UHJvcHNcIiwgeyBjaGlsZHJlbjogbnVsbCwgY2xhc3NOYW1lOiBudWxsLCBleHBhbmRPbkNsaWNrOiAhMSwgaWNvbjogbnVsbCwgc2hvd0NoZWNrYm94OiAhMCwgdGl0bGU6IG51bGwsIG9uQ2xpY2s6IGZ1bmN0aW9uKCkge1xuICAgICAgfSB9KTtcbiAgICAgIGNvbnN0IGMxID0gYjEsIGExID0geigpLm9uZU9mVHlwZShbeigpLmFycmF5T2YoeigpLnN0cmluZyksIHooKS5hcnJheU9mKHooKS5udW1iZXIpXSk7XG4gICAgICBmdW5jdGlvbiBsMSh3MSwgZzEpIHtcbiAgICAgICAgdmFyIEUxID0gT2JqZWN0LmtleXModzEpO1xuICAgICAgICBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykge1xuICAgICAgICAgIHZhciBCMSA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHModzEpO1xuICAgICAgICAgIGcxICYmIChCMSA9IEIxLmZpbHRlcihmdW5jdGlvbihLMSkge1xuICAgICAgICAgICAgcmV0dXJuIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodzEsIEsxKS5lbnVtZXJhYmxlO1xuICAgICAgICAgIH0pKSwgRTEucHVzaC5hcHBseShFMSwgQjEpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBFMTtcbiAgICAgIH1cbiAgICAgIGZ1bmN0aW9uIHAxKHcxKSB7XG4gICAgICAgIGZvciAodmFyIGcxID0gMTsgZzEgPCBhcmd1bWVudHMubGVuZ3RoOyBnMSsrKSB7XG4gICAgICAgICAgdmFyIEUxID0gYXJndW1lbnRzW2cxXSAhPSBudWxsID8gYXJndW1lbnRzW2cxXSA6IHt9O1xuICAgICAgICAgIGcxICUgMiA/IGwxKE9iamVjdChFMSksICEwKS5mb3JFYWNoKGZ1bmN0aW9uKEIxKSB7XG4gICAgICAgICAgICBNMSh3MSwgQjEsIEUxW0IxXSk7XG4gICAgICAgICAgfSkgOiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyA/IE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKHcxLCBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyhFMSkpIDogbDEoT2JqZWN0KEUxKSkuZm9yRWFjaChmdW5jdGlvbihCMSkge1xuICAgICAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHcxLCBCMSwgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihFMSwgQjEpKTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdzE7XG4gICAgICB9XG4gICAgICBmdW5jdGlvbiBNMSh3MSwgZzEsIEUxKSB7XG4gICAgICAgIHJldHVybiBnMSBpbiB3MSA/IE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh3MSwgZzEsIHsgdmFsdWU6IEUxLCBlbnVtZXJhYmxlOiAhMCwgY29uZmlndXJhYmxlOiAhMCwgd3JpdGFibGU6ICEwIH0pIDogdzFbZzFdID0gRTEsIHcxO1xuICAgICAgfVxuICAgICAgdmFyIEExID0geyBsYWJlbDogeigpLm5vZGUuaXNSZXF1aXJlZCwgdmFsdWU6IHooKS5vbmVPZlR5cGUoW3ooKS5zdHJpbmcsIHooKS5udW1iZXJdKS5pc1JlcXVpcmVkLCBkaXNhYmxlZDogeigpLmJvb2wsIGljb246IHooKS5ub2RlLCBzaG93Q2hlY2tib3g6IHooKS5ib29sLCB0aXRsZTogeigpLnN0cmluZyB9O1xuICAgICAgY29uc3QgdTEgPSB6KCkub25lT2ZUeXBlKFt6KCkuc2hhcGUoQTEpLCB6KCkuc2hhcGUocDEocDEoe30sIEExKSwge30sIHsgY2hpbGRyZW46IHooKS5hcnJheU9mKEExKS5pc1JlcXVpcmVkIH0pKV0pO1xuICAgICAgZnVuY3Rpb24gaDEodzEpIHtcbiAgICAgICAgcmV0dXJuIGgxID0gdHlwZW9mIFN5bWJvbCA9PSBcImZ1bmN0aW9uXCIgJiYgdHlwZW9mIFN5bWJvbC5pdGVyYXRvciA9PSBcInN5bWJvbFwiID8gZnVuY3Rpb24oZzEpIHtcbiAgICAgICAgICByZXR1cm4gdHlwZW9mIGcxO1xuICAgICAgICB9IDogZnVuY3Rpb24oZzEpIHtcbiAgICAgICAgICByZXR1cm4gZzEgJiYgdHlwZW9mIFN5bWJvbCA9PSBcImZ1bmN0aW9uXCIgJiYgZzEuY29uc3RydWN0b3IgPT09IFN5bWJvbCAmJiBnMSAhPT0gU3ltYm9sLnByb3RvdHlwZSA/IFwic3ltYm9sXCIgOiB0eXBlb2YgZzE7XG4gICAgICAgIH0sIGgxKHcxKTtcbiAgICAgIH1cbiAgICAgIGZ1bmN0aW9uIEMxKHcxLCBnMSkge1xuICAgICAgICB2YXIgRTEgPSBPYmplY3Qua2V5cyh3MSk7XG4gICAgICAgIGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7XG4gICAgICAgICAgdmFyIEIxID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyh3MSk7XG4gICAgICAgICAgZzEgJiYgKEIxID0gQjEuZmlsdGVyKGZ1bmN0aW9uKEsxKSB7XG4gICAgICAgICAgICByZXR1cm4gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih3MSwgSzEpLmVudW1lcmFibGU7XG4gICAgICAgICAgfSkpLCBFMS5wdXNoLmFwcGx5KEUxLCBCMSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIEUxO1xuICAgICAgfVxuICAgICAgZnVuY3Rpb24gcTEodzEpIHtcbiAgICAgICAgZm9yICh2YXIgZzEgPSAxOyBnMSA8IGFyZ3VtZW50cy5sZW5ndGg7IGcxKyspIHtcbiAgICAgICAgICB2YXIgRTEgPSBhcmd1bWVudHNbZzFdICE9IG51bGwgPyBhcmd1bWVudHNbZzFdIDoge307XG4gICAgICAgICAgZzEgJSAyID8gQzEoT2JqZWN0KEUxKSwgITApLmZvckVhY2goZnVuY3Rpb24oQjEpIHtcbiAgICAgICAgICAgIFMxKHcxLCBCMSwgRTFbQjFdKTtcbiAgICAgICAgICB9KSA6IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzID8gT2JqZWN0LmRlZmluZVByb3BlcnRpZXModzEsIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzKEUxKSkgOiBDMShPYmplY3QoRTEpKS5mb3JFYWNoKGZ1bmN0aW9uKEIxKSB7XG4gICAgICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodzEsIEIxLCBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKEUxLCBCMSkpO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB3MTtcbiAgICAgIH1cbiAgICAgIGZ1bmN0aW9uIFcxKHcxLCBnMSkge1xuICAgICAgICBmb3IgKHZhciBFMSA9IDA7IEUxIDwgZzEubGVuZ3RoOyBFMSsrKSB7XG4gICAgICAgICAgdmFyIEIxID0gZzFbRTFdO1xuICAgICAgICAgIEIxLmVudW1lcmFibGUgPSBCMS5lbnVtZXJhYmxlIHx8ICExLCBCMS5jb25maWd1cmFibGUgPSAhMCwgXCJ2YWx1ZVwiIGluIEIxICYmIChCMS53cml0YWJsZSA9ICEwKSwgT2JqZWN0LmRlZmluZVByb3BlcnR5KHcxLCBCMS5rZXksIEIxKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgZnVuY3Rpb24gUjEodzEsIGcxKSB7XG4gICAgICAgIHJldHVybiBSMSA9IE9iamVjdC5zZXRQcm90b3R5cGVPZiA/IE9iamVjdC5zZXRQcm90b3R5cGVPZi5iaW5kKCkgOiBmdW5jdGlvbihFMSwgQjEpIHtcbiAgICAgICAgICByZXR1cm4gRTEuX19wcm90b19fID0gQjEsIEUxO1xuICAgICAgICB9LCBSMSh3MSwgZzEpO1xuICAgICAgfVxuICAgICAgZnVuY3Rpb24gazEodzEsIGcxKSB7XG4gICAgICAgIGlmIChnMSAmJiAoaDEoZzEpID09PSBcIm9iamVjdFwiIHx8IHR5cGVvZiBnMSA9PSBcImZ1bmN0aW9uXCIpKVxuICAgICAgICAgIHJldHVybiBnMTtcbiAgICAgICAgaWYgKGcxICE9PSB2b2lkIDApXG4gICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkRlcml2ZWQgY29uc3RydWN0b3JzIG1heSBvbmx5IHJldHVybiBvYmplY3Qgb3IgdW5kZWZpbmVkXCIpO1xuICAgICAgICByZXR1cm4gTjEodzEpO1xuICAgICAgfVxuICAgICAgZnVuY3Rpb24gTjEodzEpIHtcbiAgICAgICAgaWYgKHcxID09PSB2b2lkIDApXG4gICAgICAgICAgdGhyb3cgbmV3IFJlZmVyZW5jZUVycm9yKFwidGhpcyBoYXNuJ3QgYmVlbiBpbml0aWFsaXNlZCAtIHN1cGVyKCkgaGFzbid0IGJlZW4gY2FsbGVkXCIpO1xuICAgICAgICByZXR1cm4gdzE7XG4gICAgICB9XG4gICAgICBmdW5jdGlvbiB2MSh3MSkge1xuICAgICAgICByZXR1cm4gdjEgPSBPYmplY3Quc2V0UHJvdG90eXBlT2YgPyBPYmplY3QuZ2V0UHJvdG90eXBlT2YuYmluZCgpIDogZnVuY3Rpb24oZzEpIHtcbiAgICAgICAgICByZXR1cm4gZzEuX19wcm90b19fIHx8IE9iamVjdC5nZXRQcm90b3R5cGVPZihnMSk7XG4gICAgICAgIH0sIHYxKHcxKTtcbiAgICAgIH1cbiAgICAgIGZ1bmN0aW9uIFMxKHcxLCBnMSwgRTEpIHtcbiAgICAgICAgcmV0dXJuIGcxIGluIHcxID8gT2JqZWN0LmRlZmluZVByb3BlcnR5KHcxLCBnMSwgeyB2YWx1ZTogRTEsIGVudW1lcmFibGU6ICEwLCBjb25maWd1cmFibGU6ICEwLCB3cml0YWJsZTogITAgfSkgOiB3MVtnMV0gPSBFMSwgdzE7XG4gICAgICB9XG4gICAgICB2YXIgRDEgPSBmdW5jdGlvbih3MSkge1xuICAgICAgICAoZnVuY3Rpb24oeDEsIEkxKSB7XG4gICAgICAgICAgaWYgKHR5cGVvZiBJMSAhPSBcImZ1bmN0aW9uXCIgJiYgSTEgIT09IG51bGwpXG4gICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiU3VwZXIgZXhwcmVzc2lvbiBtdXN0IGVpdGhlciBiZSBudWxsIG9yIGEgZnVuY3Rpb25cIik7XG4gICAgICAgICAgeDEucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShJMSAmJiBJMS5wcm90b3R5cGUsIHsgY29uc3RydWN0b3I6IHsgdmFsdWU6IHgxLCB3cml0YWJsZTogITAsIGNvbmZpZ3VyYWJsZTogITAgfSB9KSwgT2JqZWN0LmRlZmluZVByb3BlcnR5KHgxLCBcInByb3RvdHlwZVwiLCB7IHdyaXRhYmxlOiAhMSB9KSwgSTEgJiYgUjEoeDEsIEkxKTtcbiAgICAgICAgfSkoSDEsIHcxKTtcbiAgICAgICAgdmFyIGcxLCBFMSwgQjEsIEsxLCBwMCwgZTAgPSAoSzEgPSBIMSwgcDAgPSBmdW5jdGlvbigpIHtcbiAgICAgICAgICBpZiAodHlwZW9mIFJlZmxlY3QgPiBcInVcIiB8fCAhUmVmbGVjdC5jb25zdHJ1Y3QgfHwgUmVmbGVjdC5jb25zdHJ1Y3Quc2hhbSlcbiAgICAgICAgICAgIHJldHVybiAhMTtcbiAgICAgICAgICBpZiAodHlwZW9mIFByb3h5ID09IFwiZnVuY3Rpb25cIilcbiAgICAgICAgICAgIHJldHVybiAhMDtcbiAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgcmV0dXJuIEJvb2xlYW4ucHJvdG90eXBlLnZhbHVlT2YuY2FsbChSZWZsZWN0LmNvbnN0cnVjdChCb29sZWFuLCBbXSwgZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICB9KSksICEwO1xuICAgICAgICAgIH0gY2F0Y2gge1xuICAgICAgICAgICAgcmV0dXJuICExO1xuICAgICAgICAgIH1cbiAgICAgICAgfSgpLCBmdW5jdGlvbigpIHtcbiAgICAgICAgICB2YXIgeDEsIEkxID0gdjEoSzEpO1xuICAgICAgICAgIGlmIChwMCkge1xuICAgICAgICAgICAgdmFyIFgxID0gdjEodGhpcykuY29uc3RydWN0b3I7XG4gICAgICAgICAgICB4MSA9IFJlZmxlY3QuY29uc3RydWN0KEkxLCBhcmd1bWVudHMsIFgxKTtcbiAgICAgICAgICB9IGVsc2VcbiAgICAgICAgICAgIHgxID0gSTEuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgICAgICAgICByZXR1cm4gazEodGhpcywgeDEpO1xuICAgICAgICB9KTtcbiAgICAgICAgZnVuY3Rpb24gSDEoeDEpIHtcbiAgICAgICAgICB2YXIgSTE7XG4gICAgICAgICAgKGZ1bmN0aW9uKEoxLCBmMCkge1xuICAgICAgICAgICAgaWYgKCEoSjEgaW5zdGFuY2VvZiBmMCkpXG4gICAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb25cIik7XG4gICAgICAgICAgfSkodGhpcywgSDEpLCBJMSA9IGUwLmNhbGwodGhpcywgeDEpO1xuICAgICAgICAgIHZhciBYMSA9IG5ldyBJKHgxKTtcbiAgICAgICAgICByZXR1cm4gWDEuZmxhdHRlbk5vZGVzKHgxLm5vZGVzKSwgWDEuZGVzZXJpYWxpemVMaXN0cyh7IGNoZWNrZWQ6IHgxLmNoZWNrZWQsIGV4cGFuZGVkOiB4MS5leHBhbmRlZCB9KSwgSTEuc3RhdGUgPSB7IGlkOiB4MS5pZCB8fCBcInJjdC1cIi5jb25jYXQodSgpKSwgbW9kZWw6IFgxLCBwcmV2UHJvcHM6IHgxIH0sIEkxLm9uQ2hlY2sgPSBJMS5vbkNoZWNrLmJpbmQoTjEoSTEpKSwgSTEub25FeHBhbmQgPSBJMS5vbkV4cGFuZC5iaW5kKE4xKEkxKSksIEkxLm9uTm9kZUNsaWNrID0gSTEub25Ob2RlQ2xpY2suYmluZChOMShJMSkpLCBJMS5vbkV4cGFuZEFsbCA9IEkxLm9uRXhwYW5kQWxsLmJpbmQoTjEoSTEpKSwgSTEub25Db2xsYXBzZUFsbCA9IEkxLm9uQ29sbGFwc2VBbGwuYmluZChOMShJMSkpLCBJMS5jb21iaW5lTWVtb3JpemVkID0gTSgpKGZ1bmN0aW9uKEoxLCBmMCkge1xuICAgICAgICAgICAgcmV0dXJuIHExKHExKHt9LCBKMSksIGYwKTtcbiAgICAgICAgICB9KS5iaW5kKE4xKEkxKSksIEkxO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBnMSA9IEgxLCBFMSA9IFt7IGtleTogXCJvbkNoZWNrXCIsIHZhbHVlOiBmdW5jdGlvbih4MSkge1xuICAgICAgICAgIHZhciBJMSA9IHRoaXMucHJvcHMsIFgxID0gSTEuY2hlY2tNb2RlbCwgSjEgPSBJMS5ub0Nhc2NhZGUsIGYwID0gSTEub25DaGVjaywgSTAgPSB0aGlzLnN0YXRlLm1vZGVsLmNsb25lKCksIE8xID0gSTAuZ2V0Tm9kZSh4MS52YWx1ZSk7XG4gICAgICAgICAgSTAudG9nZ2xlQ2hlY2tlZCh4MSwgeDEuY2hlY2tlZCwgWDEsIEoxKSwgZjAoSTAuc2VyaWFsaXplTGlzdChcImNoZWNrZWRcIiksIHExKHExKHt9LCBPMSksIHgxKSk7XG4gICAgICAgIH0gfSwgeyBrZXk6IFwib25FeHBhbmRcIiwgdmFsdWU6IGZ1bmN0aW9uKHgxKSB7XG4gICAgICAgICAgdmFyIEkxID0gdGhpcy5wcm9wcy5vbkV4cGFuZCwgWDEgPSB0aGlzLnN0YXRlLm1vZGVsLmNsb25lKCksIEoxID0gWDEuZ2V0Tm9kZSh4MS52YWx1ZSk7XG4gICAgICAgICAgWDEudG9nZ2xlTm9kZSh4MS52YWx1ZSwgXCJleHBhbmRlZFwiLCB4MS5leHBhbmRlZCksIEkxKFgxLnNlcmlhbGl6ZUxpc3QoXCJleHBhbmRlZFwiKSwgcTEocTEoe30sIEoxKSwgeDEpKTtcbiAgICAgICAgfSB9LCB7IGtleTogXCJvbk5vZGVDbGlja1wiLCB2YWx1ZTogZnVuY3Rpb24oeDEpIHtcbiAgICAgICAgICAoMCwgdGhpcy5wcm9wcy5vbkNsaWNrKShxMShxMSh7fSwgdGhpcy5zdGF0ZS5tb2RlbC5nZXROb2RlKHgxLnZhbHVlKSksIHgxKSk7XG4gICAgICAgIH0gfSwgeyBrZXk6IFwib25FeHBhbmRBbGxcIiwgdmFsdWU6IGZ1bmN0aW9uKCkge1xuICAgICAgICAgIHRoaXMuZXhwYW5kQWxsTm9kZXMoKTtcbiAgICAgICAgfSB9LCB7IGtleTogXCJvbkNvbGxhcHNlQWxsXCIsIHZhbHVlOiBmdW5jdGlvbigpIHtcbiAgICAgICAgICB0aGlzLmV4cGFuZEFsbE5vZGVzKCExKTtcbiAgICAgICAgfSB9LCB7IGtleTogXCJleHBhbmRBbGxOb2Rlc1wiLCB2YWx1ZTogZnVuY3Rpb24oKSB7XG4gICAgICAgICAgdmFyIHgxID0gIShhcmd1bWVudHMubGVuZ3RoID4gMCAmJiBhcmd1bWVudHNbMF0gIT09IHZvaWQgMCkgfHwgYXJndW1lbnRzWzBdLCBJMSA9IHRoaXMucHJvcHMub25FeHBhbmQ7XG4gICAgICAgICAgSTEodGhpcy5zdGF0ZS5tb2RlbC5jbG9uZSgpLmV4cGFuZEFsbE5vZGVzKHgxKS5zZXJpYWxpemVMaXN0KFwiZXhwYW5kZWRcIikpO1xuICAgICAgICB9IH0sIHsga2V5OiBcImRldGVybWluZVNoYWxsb3dDaGVja1N0YXRlXCIsIHZhbHVlOiBmdW5jdGlvbih4MSwgSTEpIHtcbiAgICAgICAgICB2YXIgWDEgPSB0aGlzLnN0YXRlLm1vZGVsLmdldE5vZGUoeDEudmFsdWUpO1xuICAgICAgICAgIHJldHVybiBYMS5pc0xlYWYgfHwgSTEgfHwgeDEuY2hpbGRyZW4ubGVuZ3RoID09PSAwID8gWDEuY2hlY2tlZCA/IDEgOiAwIDogdGhpcy5pc0V2ZXJ5Q2hpbGRDaGVja2VkKHgxKSA/IDEgOiB0aGlzLmlzU29tZUNoaWxkQ2hlY2tlZCh4MSkgPyAyIDogMDtcbiAgICAgICAgfSB9LCB7IGtleTogXCJpc0V2ZXJ5Q2hpbGRDaGVja2VkXCIsIHZhbHVlOiBmdW5jdGlvbih4MSkge1xuICAgICAgICAgIHZhciBJMSA9IHRoaXM7XG4gICAgICAgICAgcmV0dXJuIHgxLmNoaWxkcmVuLmV2ZXJ5KGZ1bmN0aW9uKFgxKSB7XG4gICAgICAgICAgICByZXR1cm4gSTEuc3RhdGUubW9kZWwuZ2V0Tm9kZShYMS52YWx1ZSkuY2hlY2tTdGF0ZSA9PT0gMTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfSB9LCB7IGtleTogXCJpc1NvbWVDaGlsZENoZWNrZWRcIiwgdmFsdWU6IGZ1bmN0aW9uKHgxKSB7XG4gICAgICAgICAgdmFyIEkxID0gdGhpcztcbiAgICAgICAgICByZXR1cm4geDEuY2hpbGRyZW4uc29tZShmdW5jdGlvbihYMSkge1xuICAgICAgICAgICAgcmV0dXJuIEkxLnN0YXRlLm1vZGVsLmdldE5vZGUoWDEudmFsdWUpLmNoZWNrU3RhdGUgPiAwO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9IH0sIHsga2V5OiBcInJlbmRlclRyZWVOb2Rlc1wiLCB2YWx1ZTogZnVuY3Rpb24oeDEpIHtcbiAgICAgICAgICB2YXIgSTEgPSB0aGlzLCBYMSA9IGFyZ3VtZW50cy5sZW5ndGggPiAxICYmIGFyZ3VtZW50c1sxXSAhPT0gdm9pZCAwID8gYXJndW1lbnRzWzFdIDoge30sIEoxID0gdGhpcy5wcm9wcywgZjAgPSBKMS5leHBhbmREaXNhYmxlZCwgSTAgPSBKMS5leHBhbmRPbkNsaWNrLCBPMSA9IEoxLmljb25zLCBWMSA9IEoxLmxhbmcsIEcxID0gSjEubm9DYXNjYWRlLCBpMCA9IEoxLm9uQ2xpY2ssIGIwID0gSjEub25seUxlYWZDaGVja2JveGVzLCBnMCA9IEoxLm9wdGltaXN0aWNUb2dnbGUsIHUwID0gSjEuc2hvd05vZGVUaXRsZSwgejAgPSBKMS5zaG93Tm9kZUljb24sIFYwID0gdGhpcy5zdGF0ZSwgVzAgPSBWMC5pZCwgRjAgPSBWMC5tb2RlbCwgYjIgPSBIMS5kZWZhdWx0UHJvcHMuaWNvbnMsIFoyID0geDEubWFwKGZ1bmN0aW9uKGowKSB7XG4gICAgICAgICAgICB2YXIgYTIgPSBqMC52YWx1ZSwgQTIgPSBGMC5nZXROb2RlKGowLnZhbHVlKSwgT3QgPSBBMi5pc1BhcmVudCA/IEkxLnJlbmRlclRyZWVOb2RlcyhqMC5jaGlsZHJlbiwgajApIDogbnVsbDtcbiAgICAgICAgICAgIEEyLmNoZWNrU3RhdGUgPSBJMS5kZXRlcm1pbmVTaGFsbG93Q2hlY2tTdGF0ZShqMCwgRzEpO1xuICAgICAgICAgICAgdmFyIGZ0ID0gYjAgPyBBMi5pc0xlYWYgOiBBMi5zaG93Q2hlY2tib3g7XG4gICAgICAgICAgICByZXR1cm4gIVgxLnZhbHVlIHx8IEYwLmdldE5vZGUoWDEudmFsdWUpLmV4cGFuZGVkID8gTygpLmNyZWF0ZUVsZW1lbnQoYzEsIHsga2V5OiBhMiwgY2hlY2tlZDogQTIuY2hlY2tTdGF0ZSwgY2xhc3NOYW1lOiBqMC5jbGFzc05hbWUsIGRpc2FibGVkOiBBMi5kaXNhYmxlZCwgZXhwYW5kRGlzYWJsZWQ6IGYwLCBleHBhbmRPbkNsaWNrOiBJMCwgZXhwYW5kZWQ6IEEyLmV4cGFuZGVkLCBpY29uOiBqMC5pY29uLCBpY29uczogSTEuY29tYmluZU1lbW9yaXplZChiMiwgTzEpLCBsYWJlbDogajAubGFiZWwsIGxhbmc6IFYxLCBvcHRpbWlzdGljVG9nZ2xlOiBnMCwgaXNMZWFmOiBBMi5pc0xlYWYsIGlzUGFyZW50OiBBMi5pc1BhcmVudCwgc2hvd0NoZWNrYm94OiBmdCwgc2hvd05vZGVJY29uOiB6MCwgdGl0bGU6IHUwID8gajAudGl0bGUgfHwgajAubGFiZWwgOiBqMC50aXRsZSwgdHJlZUlkOiBXMCwgdmFsdWU6IGowLnZhbHVlLCBvbkNoZWNrOiBJMS5vbkNoZWNrLCBvbkNsaWNrOiBpMCAmJiBJMS5vbk5vZGVDbGljaywgb25FeHBhbmQ6IEkxLm9uRXhwYW5kIH0sIE90KSA6IG51bGw7XG4gICAgICAgICAgfSk7XG4gICAgICAgICAgcmV0dXJuIE8oKS5jcmVhdGVFbGVtZW50KFwib2xcIiwgbnVsbCwgWjIpO1xuICAgICAgICB9IH0sIHsga2V5OiBcInJlbmRlckV4cGFuZEFsbFwiLCB2YWx1ZTogZnVuY3Rpb24oKSB7XG4gICAgICAgICAgdmFyIHgxID0gdGhpcy5wcm9wcywgSTEgPSB4MS5pY29ucywgWDEgPSBJMS5leHBhbmRBbGwsIEoxID0gSTEuY29sbGFwc2VBbGwsIGYwID0geDEubGFuZztcbiAgICAgICAgICByZXR1cm4geDEuc2hvd0V4cGFuZEFsbCA/IE8oKS5jcmVhdGVFbGVtZW50KFwiZGl2XCIsIHsgY2xhc3NOYW1lOiBcInJjdC1vcHRpb25zXCIgfSwgTygpLmNyZWF0ZUVsZW1lbnQoSCwgeyBjbGFzc05hbWU6IFwicmN0LW9wdGlvbiByY3Qtb3B0aW9uLWV4cGFuZC1hbGxcIiwgdGl0bGU6IGYwLmV4cGFuZEFsbCwgb25DbGljazogdGhpcy5vbkV4cGFuZEFsbCB9LCBYMSksIE8oKS5jcmVhdGVFbGVtZW50KEgsIHsgY2xhc3NOYW1lOiBcInJjdC1vcHRpb24gcmN0LW9wdGlvbi1jb2xsYXBzZS1hbGxcIiwgdGl0bGU6IGYwLmNvbGxhcHNlQWxsLCBvbkNsaWNrOiB0aGlzLm9uQ29sbGFwc2VBbGwgfSwgSjEpKSA6IG51bGw7XG4gICAgICAgIH0gfSwgeyBrZXk6IFwicmVuZGVySGlkZGVuSW5wdXRcIiwgdmFsdWU6IGZ1bmN0aW9uKCkge1xuICAgICAgICAgIHZhciB4MSA9IHRoaXMucHJvcHMsIEkxID0geDEubmFtZSwgWDEgPSB4MS5uYW1lQXNBcnJheTtcbiAgICAgICAgICByZXR1cm4gSTEgPT09IHZvaWQgMCA/IG51bGwgOiBYMSA/IHRoaXMucmVuZGVyQXJyYXlIaWRkZW5JbnB1dCgpIDogdGhpcy5yZW5kZXJKb2luZWRIaWRkZW5JbnB1dCgpO1xuICAgICAgICB9IH0sIHsga2V5OiBcInJlbmRlckFycmF5SGlkZGVuSW5wdXRcIiwgdmFsdWU6IGZ1bmN0aW9uKCkge1xuICAgICAgICAgIHZhciB4MSA9IHRoaXMucHJvcHMsIEkxID0geDEuY2hlY2tlZCwgWDEgPSB4MS5uYW1lO1xuICAgICAgICAgIHJldHVybiBJMS5tYXAoZnVuY3Rpb24oSjEpIHtcbiAgICAgICAgICAgIHZhciBmMCA9IFwiXCIuY29uY2F0KFgxLCBcIltdXCIpO1xuICAgICAgICAgICAgcmV0dXJuIE8oKS5jcmVhdGVFbGVtZW50KFwiaW5wdXRcIiwgeyBrZXk6IEoxLCBuYW1lOiBmMCwgdHlwZTogXCJoaWRkZW5cIiwgdmFsdWU6IEoxIH0pO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9IH0sIHsga2V5OiBcInJlbmRlckpvaW5lZEhpZGRlbklucHV0XCIsIHZhbHVlOiBmdW5jdGlvbigpIHtcbiAgICAgICAgICB2YXIgeDEgPSB0aGlzLnByb3BzLCBJMSA9IHgxLmNoZWNrZWQsIFgxID0geDEubmFtZSwgSjEgPSBJMS5qb2luKFwiLFwiKTtcbiAgICAgICAgICByZXR1cm4gTygpLmNyZWF0ZUVsZW1lbnQoXCJpbnB1dFwiLCB7IG5hbWU6IFgxLCB0eXBlOiBcImhpZGRlblwiLCB2YWx1ZTogSjEgfSk7XG4gICAgICAgIH0gfSwgeyBrZXk6IFwicmVuZGVyXCIsIHZhbHVlOiBmdW5jdGlvbigpIHtcbiAgICAgICAgICB2YXIgeDEsIEkxID0gdGhpcy5wcm9wcywgWDEgPSBJMS5kaXJlY3Rpb24sIEoxID0gSTEuZGlzYWJsZWQsIGYwID0gSTEuaWNvbnNDbGFzcywgSTAgPSBJMS5ub2RlcywgTzEgPSBJMS5uYXRpdmVDaGVja2JveGVzLCBWMSA9IHRoaXMuc3RhdGUuaWQsIEcxID0gdGhpcy5yZW5kZXJUcmVlTm9kZXMoSTApLCBpMCA9IGwoKSgoUzEoeDEgPSB7IFwicmVhY3QtY2hlY2tib3gtdHJlZVwiOiAhMCwgXCJyY3QtZGlzYWJsZWRcIjogSjEgfSwgXCJyY3QtaWNvbnMtXCIuY29uY2F0KGYwKSwgITApLCBTMSh4MSwgXCJyY3QtbmF0aXZlLWRpc3BsYXlcIiwgTzEpLCBTMSh4MSwgXCJyY3QtZGlyZWN0aW9uLXJ0bFwiLCBYMSA9PT0gXCJydGxcIiksIHgxKSk7XG4gICAgICAgICAgcmV0dXJuIE8oKS5jcmVhdGVFbGVtZW50KFwiZGl2XCIsIHsgY2xhc3NOYW1lOiBpMCwgaWQ6IFYxIH0sIHRoaXMucmVuZGVyRXhwYW5kQWxsKCksIHRoaXMucmVuZGVySGlkZGVuSW5wdXQoKSwgRzEpO1xuICAgICAgICB9IH1dLCBCMSA9IFt7IGtleTogXCJnZXREZXJpdmVkU3RhdGVGcm9tUHJvcHNcIiwgdmFsdWU6IGZ1bmN0aW9uKHgxLCBJMSkge1xuICAgICAgICAgIHZhciBYMSA9IEkxLm1vZGVsLCBKMSA9IEkxLnByZXZQcm9wcywgZjAgPSB4MS5kaXNhYmxlZCwgSTAgPSB4MS5pZCwgTzEgPSB4MS5ub2RlcywgVjEgPSBxMShxMSh7fSwgSTEpLCB7fSwgeyBwcmV2UHJvcHM6IHgxIH0pO1xuICAgICAgICAgIHJldHVybiBYMS5zZXRQcm9wcyh4MSksIGQoKShKMS5ub2RlcywgTzEpICYmIEoxLmRpc2FibGVkID09PSBmMCB8fCAoWDEucmVzZXQoKSwgWDEuZmxhdHRlbk5vZGVzKE8xKSksIEkwICE9PSBudWxsICYmIChWMSA9IHExKHExKHt9LCBWMSksIHt9LCB7IGlkOiBJMCB9KSksIFgxLmRlc2VyaWFsaXplTGlzdHMoeyBjaGVja2VkOiB4MS5jaGVja2VkLCBleHBhbmRlZDogeDEuZXhwYW5kZWQgfSksIFYxO1xuICAgICAgICB9IH1dLCBFMSAmJiBXMShnMS5wcm90b3R5cGUsIEUxKSwgQjEgJiYgVzEoZzEsIEIxKSwgT2JqZWN0LmRlZmluZVByb3BlcnR5KGcxLCBcInByb3RvdHlwZVwiLCB7IHdyaXRhYmxlOiAhMSB9KSwgSDE7XG4gICAgICB9KE8oKS5Db21wb25lbnQpO1xuICAgICAgZnVuY3Rpb24gRjEodzEpIHtcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uKGcxKSB7XG4gICAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkoZzEpKVxuICAgICAgICAgICAgcmV0dXJuIFUxKGcxKTtcbiAgICAgICAgfSh3MSkgfHwgZnVuY3Rpb24oZzEpIHtcbiAgICAgICAgICBpZiAodHlwZW9mIFN5bWJvbCA8IFwidVwiICYmIGcxW1N5bWJvbC5pdGVyYXRvcl0gIT0gbnVsbCB8fCBnMVtcIkBAaXRlcmF0b3JcIl0gIT0gbnVsbClcbiAgICAgICAgICAgIHJldHVybiBBcnJheS5mcm9tKGcxKTtcbiAgICAgICAgfSh3MSkgfHwgZnVuY3Rpb24oZzEsIEUxKSB7XG4gICAgICAgICAgaWYgKGcxKSB7XG4gICAgICAgICAgICBpZiAodHlwZW9mIGcxID09IFwic3RyaW5nXCIpXG4gICAgICAgICAgICAgIHJldHVybiBVMShnMSwgRTEpO1xuICAgICAgICAgICAgdmFyIEIxID0gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKGcxKS5zbGljZSg4LCAtMSk7XG4gICAgICAgICAgICByZXR1cm4gQjEgPT09IFwiT2JqZWN0XCIgJiYgZzEuY29uc3RydWN0b3IgJiYgKEIxID0gZzEuY29uc3RydWN0b3IubmFtZSksIEIxID09PSBcIk1hcFwiIHx8IEIxID09PSBcIlNldFwiID8gQXJyYXkuZnJvbShnMSkgOiBCMSA9PT0gXCJBcmd1bWVudHNcIiB8fCAvXig/OlVpfEkpbnQoPzo4fDE2fDMyKSg/OkNsYW1wZWQpP0FycmF5JC8udGVzdChCMSkgPyBVMShnMSwgRTEpIDogdm9pZCAwO1xuICAgICAgICAgIH1cbiAgICAgICAgfSh3MSkgfHwgZnVuY3Rpb24oKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihgSW52YWxpZCBhdHRlbXB0IHRvIHNwcmVhZCBub24taXRlcmFibGUgaW5zdGFuY2UuXG5JbiBvcmRlciB0byBiZSBpdGVyYWJsZSwgbm9uLWFycmF5IG9iamVjdHMgbXVzdCBoYXZlIGEgW1N5bWJvbC5pdGVyYXRvcl0oKSBtZXRob2QuYCk7XG4gICAgICAgIH0oKTtcbiAgICAgIH1cbiAgICAgIGZ1bmN0aW9uIFUxKHcxLCBnMSkge1xuICAgICAgICAoZzEgPT0gbnVsbCB8fCBnMSA+IHcxLmxlbmd0aCkgJiYgKGcxID0gdzEubGVuZ3RoKTtcbiAgICAgICAgZm9yICh2YXIgRTEgPSAwLCBCMSA9IG5ldyBBcnJheShnMSk7IEUxIDwgZzE7IEUxKyspXG4gICAgICAgICAgQjFbRTFdID0gdzFbRTFdO1xuICAgICAgICByZXR1cm4gQjE7XG4gICAgICB9XG4gICAgICBmdW5jdGlvbiBoMCh3MSwgZzEpIHtcbiAgICAgICAgdmFyIEUxID0gYXJndW1lbnRzLmxlbmd0aCA+IDIgJiYgYXJndW1lbnRzWzJdICE9PSB2b2lkIDAgPyBhcmd1bWVudHNbMl0gOiAwO1xuICAgICAgICBpZiAoRTEgPiBnMSlcbiAgICAgICAgICByZXR1cm4gW107XG4gICAgICAgIHZhciBCMSA9IFtdO1xuICAgICAgICByZXR1cm4gdzEuZm9yRWFjaChmdW5jdGlvbihLMSkge1xuICAgICAgICAgIEsxLmNoaWxkcmVuICYmIChCMSA9IFtdLmNvbmNhdChGMShCMSksIFtLMS52YWx1ZV0sIEYxKGgwKEsxLmNoaWxkcmVuLCBnMSwgRTEgKyAxKSkpKTtcbiAgICAgICAgfSksIEIxO1xuICAgICAgfVxuICAgICAgUzEoRDEsIFwicHJvcFR5cGVzXCIsIHsgbm9kZXM6IHooKS5hcnJheU9mKHUxKS5pc1JlcXVpcmVkLCBjaGVja01vZGVsOiB6KCkub25lT2YoW0MuTEVBRiwgQy5BTExdKSwgY2hlY2tlZDogYTEsIGRpcmVjdGlvbjogeigpLnN0cmluZywgZGlzYWJsZWQ6IHooKS5ib29sLCBleHBhbmREaXNhYmxlZDogeigpLmJvb2wsIGV4cGFuZE9uQ2xpY2s6IHooKS5ib29sLCBleHBhbmRlZDogYTEsIGljb25zOiBXLCBpY29uc0NsYXNzOiB6KCkuc3RyaW5nLCBpZDogeigpLnN0cmluZywgbGFuZzogUCwgbmFtZTogeigpLnN0cmluZywgbmFtZUFzQXJyYXk6IHooKS5ib29sLCBuYXRpdmVDaGVja2JveGVzOiB6KCkuYm9vbCwgbm9DYXNjYWRlOiB6KCkuYm9vbCwgb25seUxlYWZDaGVja2JveGVzOiB6KCkuYm9vbCwgb3B0aW1pc3RpY1RvZ2dsZTogeigpLmJvb2wsIHNob3dFeHBhbmRBbGw6IHooKS5ib29sLCBzaG93Tm9kZUljb246IHooKS5ib29sLCBzaG93Tm9kZVRpdGxlOiB6KCkuYm9vbCwgb25DaGVjazogeigpLmZ1bmMsIG9uQ2xpY2s6IHooKS5mdW5jLCBvbkV4cGFuZDogeigpLmZ1bmMgfSksIFMxKEQxLCBcImRlZmF1bHRQcm9wc1wiLCB7IGNoZWNrTW9kZWw6IEMuTEVBRiwgY2hlY2tlZDogW10sIGRpcmVjdGlvbjogXCJsdHJcIiwgZGlzYWJsZWQ6ICExLCBleHBhbmREaXNhYmxlZDogITEsIGV4cGFuZE9uQ2xpY2s6ICExLCBleHBhbmRlZDogW10sIGljb25zOiB7IGNoZWNrOiBPKCkuY3JlYXRlRWxlbWVudChcInNwYW5cIiwgeyBjbGFzc05hbWU6IFwicmN0LWljb24gcmN0LWljb24tY2hlY2tcIiB9KSwgdW5jaGVjazogTygpLmNyZWF0ZUVsZW1lbnQoXCJzcGFuXCIsIHsgY2xhc3NOYW1lOiBcInJjdC1pY29uIHJjdC1pY29uLXVuY2hlY2tcIiB9KSwgaGFsZkNoZWNrOiBPKCkuY3JlYXRlRWxlbWVudChcInNwYW5cIiwgeyBjbGFzc05hbWU6IFwicmN0LWljb24gcmN0LWljb24taGFsZi1jaGVja1wiIH0pLCBleHBhbmRDbG9zZTogTygpLmNyZWF0ZUVsZW1lbnQoXCJzcGFuXCIsIHsgY2xhc3NOYW1lOiBcInJjdC1pY29uIHJjdC1pY29uLWV4cGFuZC1jbG9zZVwiIH0pLCBleHBhbmRPcGVuOiBPKCkuY3JlYXRlRWxlbWVudChcInNwYW5cIiwgeyBjbGFzc05hbWU6IFwicmN0LWljb24gcmN0LWljb24tZXhwYW5kLW9wZW5cIiB9KSwgZXhwYW5kQWxsOiBPKCkuY3JlYXRlRWxlbWVudChcInNwYW5cIiwgeyBjbGFzc05hbWU6IFwicmN0LWljb24gcmN0LWljb24tZXhwYW5kLWFsbFwiIH0pLCBjb2xsYXBzZUFsbDogTygpLmNyZWF0ZUVsZW1lbnQoXCJzcGFuXCIsIHsgY2xhc3NOYW1lOiBcInJjdC1pY29uIHJjdC1pY29uLWNvbGxhcHNlLWFsbFwiIH0pLCBwYXJlbnRDbG9zZTogTygpLmNyZWF0ZUVsZW1lbnQoXCJzcGFuXCIsIHsgY2xhc3NOYW1lOiBcInJjdC1pY29uIHJjdC1pY29uLXBhcmVudC1jbG9zZVwiIH0pLCBwYXJlbnRPcGVuOiBPKCkuY3JlYXRlRWxlbWVudChcInNwYW5cIiwgeyBjbGFzc05hbWU6IFwicmN0LWljb24gcmN0LWljb24tcGFyZW50LW9wZW5cIiB9KSwgbGVhZjogTygpLmNyZWF0ZUVsZW1lbnQoXCJzcGFuXCIsIHsgY2xhc3NOYW1lOiBcInJjdC1pY29uIHJjdC1pY29uLWxlYWZcIiB9KSB9LCBpY29uc0NsYXNzOiBcImZhNFwiLCBpZDogbnVsbCwgbGFuZzogeyBjb2xsYXBzZUFsbDogXCJDb2xsYXBzZSBhbGxcIiwgZXhwYW5kQWxsOiBcIkV4cGFuZCBhbGxcIiwgdG9nZ2xlOiBcIlRvZ2dsZVwiIH0sIG5hbWU6IHZvaWQgMCwgbmFtZUFzQXJyYXk6ICExLCBuYXRpdmVDaGVja2JveGVzOiAhMSwgbm9DYXNjYWRlOiAhMSwgb25seUxlYWZDaGVja2JveGVzOiAhMSwgb3B0aW1pc3RpY1RvZ2dsZTogITAsIHNob3dFeHBhbmRBbGw6ICExLCBzaG93Tm9kZUljb246ICEwLCBzaG93Tm9kZVRpdGxlOiAhMSwgb25DaGVjazogZnVuY3Rpb24oKSB7XG4gICAgICB9LCBvbkNsaWNrOiBudWxsLCBvbkV4cGFuZDogZnVuY3Rpb24oKSB7XG4gICAgICB9IH0pO1xuICAgICAgY29uc3QgTzAgPSBEMTtcbiAgICB9KSgpLCBhO1xuICB9KSgpKTtcbn0pKGtwKTtcbnZhciBtQiA9IGtwLmV4cG9ydHM7XG5jb25zdCBMQiA9IC8qIEBfX1BVUkVfXyAqLyBRMihtQik7XG4kLnNwYW4oXG4gICh7IHRoZW1lOiBlIH0pID0+IG8xYFxuICAgIGZvbnQtc2l6ZTogJHtlLnR5cG9ncmFwaHkudDE0fTtcbiAgICBmb250LXdlaWdodDogJHtlLmZvbnRXZWlnaHQubGlnaHR9O1xuICAgIGxpbmUtaGVpZ2h0OiAke2UubGluZUhlaWdodC5saDIyfTtcbiAgICBjb2xvcjogJHtlLmNvbG9ycy50ZXh0SWNvbi50ZXh0UHJpbWFyeX07XG4gICAgcGFkZGluZy1sZWZ0OiAwLjVyZW07XG4gIGBcbik7XG4kLmRpdihcbiAgKHsgdGhlbWU6IHsgc3BhY2luZ3M6IGUgfSB9KSA9PiBvMWBcbiAgICBkaXNwbGF5OiBmbGV4O1xuICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gICAgcGFkZGluZzogMCAke2Uuc3A4fTtcbiAgYFxuKTtcbmNvbnN0IHZCID0gJC5kaXYoXG4gICh7IHRoZW1lOiBlIH0pID0+IG8xYFxuICAgID4gbGFiZWwge1xuICAgICAgcG9pbnRlci1ldmVudHM6IG5vbmU7XG4gICAgfVxuICBgXG4pO1xuJC5kaXYoXG4gICh7IHRoZW1lOiBlIH0pID0+IG8xYFxuICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgZmxleC1kaXJlY3Rpb246IHJvdztcbiAgICBhbGlnbi1pdGVtczogY2VudGVyO1xuICAgIHdpZHRoOiAyMDBweDtcbiAgICBqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWJldHdlZW47XG4gIGBcbik7XG4kLmRpdihcbiAgKHsgdGhlbWU6IGUgfSkgPT4gbzFgXG4gICAgZGlzcGxheTogZmxleDtcbiAgICBhbGlnbi1pdGVtczogY2VudGVyO1xuICAgIG1pbi13aWR0aDogMjAwcHg7XG4gICAgd2lkdGg6IDE1MHB4O1xuICAgIGdhcDogOHB4O1xuICAgIHdoaXRlLXNwYWNlOiBub3dyYXA7XG4gICAgb3ZlcmZsb3c6IGhpZGRlbjtcbiAgICB0ZXh0LW92ZXJmbG93OiBlbGxpcHNpcztcbiAgYFxuKTtcbmNvbnN0IHFCID0gJC5kaXYoXG4gICh7IHRoZW1lOiB7IGNvbG9yczogZSB9IH0pID0+IG8xYFxuICAgIGN1cnNvcjogcG9pbnRlcjtcbiAgICAuaWNvbi1zeXN0ZW0ge1xuICAgICAgY29sb3I6ICR7ZS50ZXh0SWNvbi50ZXh0UHJpbWFyeX07XG4gICAgfVxuICBgXG4pLCB5QiA9ICQuZGl2KFxuICAoeyB0aGVtZTogeyBjb2xvcnM6IGUgfSB9KSA9PiBvMWBcbiAgICBjdXJzb3I6IHBvaW50ZXI7XG4gICAgLmljb24tc3lzdGVtIHtcbiAgICAgIGNvbG9yOiAke2UudGV4dEljb24udGV4dFByaW1hcnl9O1xuICAgIH1cbiAgYFxuKSwgd0IgPSAkLmRpdihcbiAgKHsgdGhlbWU6IGUsICRoaWRlQ2hlY2s6IHQsIGlzU2VsZWN0ZWQ6IG8sICRleHBhbmRJY29uTmFtZTogbiB9KSA9PiBvMWBcbiAgICBsaSB7XG4gICAgICBsaXN0LXN0eWxlLXR5cGU6IG5vbmU7XG4gICAgfVxuXG4gICAgbGFiZWwgPiBpbnB1dCB7XG4gICAgICBkaXNwbGF5OiBub25lO1xuICAgIH1cbiAgICAucmN0LXRpdGxlIHtcbiAgICAgIHdpZHRoOiAxMDAlO1xuICAgIH1cbiAgICAucmN0LXRleHQgLnJjdC1jaGVja2JveCB7XG4gICAgICBtYXJnaW4tcmlnaHQ6IDRweDtcbiAgICAgICR7dCAmJiBvMWBcbiAgICAgICAgZGlzcGxheTogbm9uZTtcbiAgICAgIGB9XG4gICAgfVxuICAgIC5yY3QtdGV4dCA+IC5yY3QtY29sbGFwc2UtYnRuIHtcbiAgICAgIGJvcmRlcjogbm9uZTtcbiAgICAgIGJhY2tncm91bmQ6IG5vbmU7XG4gICAgfVxuICAgIC5yY3Qtbm9kZS1leHBhbmRlZCB7XG4gICAgICBwYWRkaW5nLWxlZnQ6ICR7RDMuc3A4fTtcbiAgICB9XG4gICAgLnJjdC1ub2RlLWljb24gLmljb24tc3lzdGVtIHtcbiAgICAgIGNvbG9yOiAke2UuY29sb3JzLnRleHRJY29uLnRleHRQcmltYXJ5fTtcbiAgICB9XG4gICAgLnJjdC1ub2RlLWNsaWNrYWJsZTpmb2N1cyB7XG4gICAgICBvdXRsaW5lOiAwO1xuICAgICAgYmFja2dyb3VuZDogbm9uZTtcbiAgICB9XG4gICAgLnJjdC10ZXh0IHtcbiAgICAgIGRpc3BsYXk6IGZsZXggIWltcG9ydGFudDtcbiAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXIgIWltcG9ydGFudDtcbiAgICB9XG4gICAgLnJjdC1ub2RlLWNvbGxhcHNlZCB7XG4gICAgICBwYWRkaW5nLWxlZnQ6ICR7RDMuc3A4fTtcbiAgICB9XG4gICAgLyogLnJjdC1ub2RlIC5yY3QtdGV4dCBsYWJlbCB7XG4gICAgICBkaXNwbGF5OiBmbGV4ICFpbXBvcnRhbnQ7XG4gICAgICBqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWJldHdlZW47XG4gICAgICBhbGlnbi1pdGVtczogY2VudGVyICFpbXBvcnRhbnQ7XG4gICAgICB3aWR0aDogMTAwJTtcbiAgICB9ICovXG4gICAgJiBsYWJlbCB7XG4gICAgICBmb250LXNpemU6ICR7ZS50eXBvZ3JhcGh5LnQxMn07XG4gICAgICBmb250LXdlaWdodDogJHtlLmZvbnRXZWlnaHQubGlnaHR9O1xuICAgICAgbGluZS1oZWlnaHQ6ICR7ZS5saW5lSGVpZ2h0LmxoMjB9O1xuICAgICAgY29sb3I6ICR7ZS5jb2xvcnMudGV4dEljb24udGV4dFByaW1hcnl9O1xuICAgICAgb3ZlcmZsb3c6IGhpZGRlbjtcbiAgICAgIHRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzO1xuICAgIH1cbiAgICAucmN0LW5vZGUtbGVhZiB7XG4gICAgICBwYWRkaW5nLWxlZnQ6ICR7RDMuc3A4fSAhaW1wb3J0YW50O1xuICAgIH1cbiAgICAucmN0LXRleHQge1xuICAgICAgcGFkZGluZzogMnB4O1xuICAgICAgY29sb3I6ICR7ZS5jb2xvcnMudGV4dEljb24udGV4dFByaW1hcnl9O1xuICAgIH1cblxuICAgIC5yY3Qtbm9kZS1sZWFmIC5yY3QtdGV4dCB7XG4gICAgICBiYWNrZ3JvdW5kOiB1bnNldDtcbiAgICB9XG4gICAgLnJlYWN0LWNoZWNrYm94LXRyZWUgbGFiZWw6aG92ZXIge1xuICAgICAgYmFja2dyb3VuZDogdHJhbnNwYXJlbnQ7XG4gICAgfVxuICAgIC5yY3Qtbm9kZS1wYXJlbnQgLnJjdC1ub2RlLWNsaWNrYWJsZSB7XG4gICAgICBhbGlnbi1pdGVtczogY2VudGVyO1xuICAgICAgZ2FwOiA4cHg7XG4gICAgICAke24gJiYgbzFgXG4gICAgICAgIHBhZGRpbmctbGVmdDogMHB4O1xuICAgICAgYH1cbiAgICAgICR7IW4gJiYgbzFgXG4gICAgICAgIHBhZGRpbmctbGVmdDogOHB4O1xuICAgICAgYH1cbiAgICAgICY6aG92ZXIsXG4gICAgICA6Zm9jdXMge1xuICAgICAgICBiYWNrZ3JvdW5kOiB1bnNldDtcbiAgICAgIH1cbiAgICAgIC5yY3QtdGV4dCB7XG4gICAgICAgIGJhY2tncm91bmQ6IHVuc2V0O1xuICAgICAgfVxuICAgIH1cbiAgYFxuKSwgeEIgPSAoZSkgPT4ge1xuICBjb25zdCB7XG4gICAgaWNvbk5hbWU6IHQsXG4gICAgY2hlY2tlZDogbyxcbiAgICBub2RlczogbixcbiAgICBleHBhbmRlZDogcixcbiAgICBvbkNoZWNrOiBpLFxuICAgIG9uQ2xpY2s6IGEsXG4gICAgb25FeHBhbmQ6IHMsXG4gICAgaGlkZUNoZWNrOiBsID0gITAsXG4gICAgc2hvd05vZGVJY29uOiBwLFxuICAgIGV4cGFuZEljb25OYW1lOiBkLFxuICAgIGV4cGFuZEljb246IGIsXG4gICAgZXhwYW5kT25DbGljazogTVxuICB9ID0gZTtcbiAgbGV0IHUgPSBuMCgpO1xuICBjb25zdCBBID0gbTEudXNlQ2FsbGJhY2soXG4gICAgKHsgY2hlY2tlZDogaCA9ICExLCBpc1BhcnRseU9ubHk6IGcgPSAhMSB9KSA9PiAvKiBAX19QVVJFX18gKi8gYyh2QiwgeyBjbGFzc05hbWU6IFwicmN0LWNoZWNrYm94XCIsIGNoaWxkcmVuOiAvKiBAX19QVVJFX18gKi8gYyhcbiAgICAgIHl0LFxuICAgICAge1xuICAgICAgICBpc1JlcXVpcmVkOiAhMCxcbiAgICAgICAgbGFiZWw6IFwiXCIsXG4gICAgICAgIHJlYWRPbmx5OiAhMCxcbiAgICAgICAgY2hlY2tlZDogaCxcbiAgICAgICAgaXNQYXJ0bHlPbmx5OiBnXG4gICAgICB9XG4gICAgKSB9KSxcbiAgICBbXVxuICApO1xuICBQMSgoKSA9PiB7XG4gICAgdmFyIGg7XG4gICAgbiA9PSBudWxsIHx8IG4ubWFwKChnLCB2KSA9PiB7XG4gICAgICB2YXIgTDtcbiAgICAgIChMID0gZG9jdW1lbnQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZShcInJjdC1jb2xsYXBzZS1idG5cIilbdl0pID09IG51bGwgfHwgTC5yZW1vdmVBdHRyaWJ1dGUoXCJ0aXRsZVwiKTtcbiAgICB9KSwgY29uc29sZS5sb2coXCJDaGVja0JveFRyZWVSZWZcIiwgKGggPSB1ID09IG51bGwgPyB2b2lkIDAgOiB1LmN1cnJlbnQpID09IG51bGwgPyB2b2lkIDAgOiBoLm9uTm8pO1xuICB9LCBbbl0pO1xuICBjb25zdCBbeiwgZl0gPSBUMSghMSksIE8gPSAoaCkgPT4ge1xuICAgIGYoIXopO1xuICB9O1xuICByZXR1cm4gLyogQF9fUFVSRV9fICovIGMoXG4gICAgd0IsXG4gICAge1xuICAgICAgJGhpZGVDaGVjazogbCxcbiAgICAgICRleHBhbmRJY29uTmFtZTogZCxcbiAgICAgIGlzU2VsZWN0ZWQ6IHosXG4gICAgICBjaGlsZHJlbjogLyogQF9fUFVSRV9fICovIGMoXG4gICAgICAgIExCLFxuICAgICAgICB7XG4gICAgICAgICAgcmVmOiB1LFxuICAgICAgICAgIG5vZGVzOiBuLFxuICAgICAgICAgIGV4cGFuZE9uQ2xpY2s6IE0sXG4gICAgICAgICAgY2hlY2tlZDogbyxcbiAgICAgICAgICBleHBhbmRlZDogcixcbiAgICAgICAgICBvbkNoZWNrOiBpLFxuICAgICAgICAgIG9uQ2xpY2s6IChoKSA9PiB7XG4gICAgICAgICAgICBPKCksIGEoaCk7XG4gICAgICAgICAgfSxcbiAgICAgICAgICBvbkV4cGFuZDogcyxcbiAgICAgICAgICBzaG93Tm9kZUljb246IHAsXG4gICAgICAgICAgaWNvbnM6IHtcbiAgICAgICAgICAgIGV4cGFuZE9wZW46IGIgPyAvKiBAX19QVVJFX18gKi8gYyhxQiwgeyBjaGlsZHJlbjogLyogQF9fUFVSRV9fICovIGMoXG4gICAgICAgICAgICAgIFoxLFxuICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgY29sb3I6IFwiIzAwMFwiLFxuICAgICAgICAgICAgICAgIG5hbWU6IGQgfHwgXCJDaGV2cm9uRG93blwiLFxuICAgICAgICAgICAgICAgIHNpemU6IFwieHhzXCJcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgKSB9KSA6IG51bGwsXG4gICAgICAgICAgICBleHBhbmRDbG9zZTogYiA/IC8qIEBfX1BVUkVfXyAqLyBjKHlCLCB7IGNoaWxkcmVuOiAvKiBAX19QVVJFX18gKi8gYyhcbiAgICAgICAgICAgICAgWjEsXG4gICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBjb2xvcjogXCIjMDAwXCIsXG4gICAgICAgICAgICAgICAgbmFtZTogZCB8fCBcIkNoZXZyb25SaWdodFwiLFxuICAgICAgICAgICAgICAgIHNpemU6IFwieHhzXCJcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgKSB9KSA6IG51bGwsXG4gICAgICAgICAgICBjaGVjazogLyogQF9fUFVSRV9fICovIGMoQSwgeyBjaGVja2VkOiAhMCB9KSxcbiAgICAgICAgICAgIHVuY2hlY2s6IC8qIEBfX1BVUkVfXyAqLyBjKEEsIHt9KSxcbiAgICAgICAgICAgIGhhbGZDaGVjazogLyogQF9fUFVSRV9fICovIGMoQSwgeyBpc1BhcnRseU9ubHk6ICEwLCBjaGVja2VkOiAhMCB9KVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgKVxuICAgIH1cbiAgKTtcbn07XG4kLmRpdmBcbiAgLyogbWF4LXdpZHRoOiAzNzhweDsgKi9cbiAgbWluLWhlaWdodDogMzUwcHg7XG4gIGhlaWdodDogMjc2cHg7XG4gIHdpZHRoOiAxMDAlO1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAkeyh7IHRoZW1lOiBlIH0pID0+IGUuY29sb3JzLndoaXRlfTtcbiAgcGFkZGluZzogJHsoeyB0aGVtZTogZSB9KSA9PiBlLnNwYWNpbmdzLnNwOH0gMDtcbmA7XG5jb25zdCBXQiA9ICQuZGl2KFxuICAoeyB0aGVtZTogZSB9KSA9PiBvMWBcbiAgICAucmN0LW5vZGUtY2xpY2thYmxlIHtcbiAgICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgfVxuICAgIC5yY3QtdGV4dCB7XG4gICAgICBwYWRkaW5nOiAwO1xuICAgIH1cbiAgICAucmN0LW5vZGUge1xuICAgICAgLnJjdC1ub2RlLWNsaWNrYWJsZSB7XG4gICAgICAgIGN1cnNvcjogcG9pbnRlcjtcbiAgICAgICAgJjpmb2N1cyB7XG4gICAgICAgICAgYmFja2dyb3VuZDogJHtlLmNvbG9ycy5iYWNrZ3JvdW5kcy5iZ1NlbGVjdGVkfTtcbiAgICAgICAgfVxuICAgICAgICAmOmhvdmVyIHtcbiAgICAgICAgICBiYWNrZ3JvdW5kOiAke2UuY29sb3JzLmJhY2tncm91bmRzLmJnSG92ZXJQcmltYXJ5fTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHN2ZyB7XG4gICAgICBoZWlnaHQ6IDEzcHg7XG4gICAgfVxuICAgIC5yY3QtdGl0bGUge1xuICAgICAgb3ZlcmZsb3c6IGhpZGRlbjtcbiAgICAgIHdoaXRlLXNwYWNlOiBub3dyYXA7XG4gICAgICB0ZXh0LW92ZXJmbG93OiBlbGxpcHNpcztcbiAgICAgIGZvbnQtc2l6ZTogJHtlLnR5cG9ncmFwaHkudDEyfTtcbiAgICAgIGZvbnQtd2VpZ2h0OiAke2UuZm9udFdlaWdodC5saWdodH07XG4gICAgICBsaW5lLWhlaWdodDogJHtlLmxpbmVIZWlnaHQubGgxN307XG4gICAgICBjb2xvcjogJHtlLmNvbG9ycy50ZXh0SWNvbi50ZXh0UHJpbWFyeX07XG4gICAgfVxuICAgIGxhYmVsIHtcbiAgICAgIG92ZXJmbG93OiBoaWRkZW47XG4gICAgICB3aGl0ZS1zcGFjZTogbm93cmFwO1xuICAgICAgdGV4dC1vdmVyZmxvdzogZWxsaXBzaXM7XG4gICAgICBmb250LXNpemU6ICR7ZS50eXBvZ3JhcGh5LnQxMn07XG4gICAgICBmb250LXdlaWdodDogJHtlLmZvbnRXZWlnaHQubGlnaHR9O1xuICAgICAgbGluZS1oZWlnaHQ6ICR7ZS5saW5lSGVpZ2h0LmxoMTd9O1xuICAgICAgY29sb3I6ICR7ZS5jb2xvcnMudGV4dEljb24udGV4dFByaW1hcnl9O1xuICAgIH1cbiAgICAucmVhY3QtY2hlY2tib3gtdHJlZSBvbCBvbCB7XG4gICAgICBwYWRkaW5nLWxlZnQ6IDE1cHg7XG4gICAgfVxuICAgIC5yY3Qtbm9kZS1wYXJlbnQgLnJjdC1ub2RlLWNsaWNrYWJsZSB7XG4gICAgICBwYWRkaW5nOiAzLjVweDtcbiAgICB9XG4gICAgLnJjdC1ub2RlLWljb24gPiBkaXYge1xuICAgICAgcGFkZGluZzogMDtcbiAgICB9XG4gICAgLnJjdC1ub2RlIC5yY3Qtbm9kZS1wYXJlbnQgLnJjdC1ub2RlLWV4cGFuZGVkIHtcbiAgICAgIHBhZGRpbmctbGVmdDogMHB4O1xuICAgIH1cbiAgICAucmN0LW5vZGUtZXhwYW5kZWQge1xuICAgICAgcGFkZGluZy1sZWZ0OiAwcHg7XG4gICAgfVxuICAgIC5yY3Qtbm9kZS1jb2xsYXBzZWQge1xuICAgICAgcGFkZGluZy1sZWZ0OiAwcHg7XG4gICAgfVxuICAgIG9sIGxpIHtcbiAgICAgIHBhZGRpbmc6IDRweCAwO1xuICAgIH1cbiAgICAucmN0LWNvbGxhcHNlLFxuICAgIC5yY3QtY2hlY2tib3gsXG4gICAgLnJjdC1ub2RlLWljb24ge1xuICAgICAgcGFkZGluZzogMDtcbiAgICB9XG4gIGBcbik7XG5mdW5jdGlvbiBSQihlKSB7XG4gIGNvbnN0IHsgbm9kZXM6IHQsIHNlbGVjdGVkT3B0aW9uczogbywgZXhwYW5kQWxsOiBuIH0gPSBlLCBbciwgaV0gPSBtMS51c2VTdGF0ZShbXSksIGEgPSAocykgPT4ge1xuICAgIGxldCBsID0gW107XG4gICAgcmV0dXJuIHMgPT0gbnVsbCB8fCBzLmZvckVhY2goKHsgdmFsdWU6IHAsIGNoaWxkcmVuOiBkIH0pID0+IHtcbiAgICAgIGwgPSBbLi4ubCwgcCwgLi4uYShkKV07XG4gICAgfSksIGw7XG4gIH07XG4gIHJldHVybiBQMSgoKSA9PiB7XG4gICAgaShuID8gYSh0KSA6IFtdKTtcbiAgfSwgW25dKSwgLyogQF9fUFVSRV9fICovIGMoV0IsIHsgY2hpbGRyZW46IC8qIEBfX1BVUkVfXyAqLyBjKFxuICAgIHhCLFxuICAgIHtcbiAgICAgIG5vZGVzOiB0LFxuICAgICAgZXhwYW5kZWQ6IHIsXG4gICAgICBvbkNsaWNrOiAocykgPT4ge1xuICAgICAgICBvICYmIG8ocyk7XG4gICAgICB9LFxuICAgICAgb25FeHBhbmQ6IGksXG4gICAgICBleHBhbmRBbGw6IG4sXG4gICAgICAuLi5lXG4gICAgfVxuICApIH0pO1xufVxuZnVuY3Rpb24gZHQoZSkge1xuICBjb25zdCB7IG5lc3RlZExpc3Q6IHQgfSA9IGU7XG4gIHJldHVybiAvKiBAX19QVVJFX18gKi8gYyhVMiwgeyBjaGlsZHJlbjogdCA/IC8qIEBfX1BVUkVfXyAqLyBjKGVSLCB7IGNoaWxkcmVuOiAvKiBAX19QVVJFX18gKi8gYyhSQiwgeyAuLi5lIH0pIH0pIDogLyogQF9fUFVSRV9fICovIGMoJFcsIHsgY2hpbGRyZW46IC8qIEBfX1BVUkVfXyAqLyBjKENCLCB7IC4uLmUgfSkgfSkgfSk7XG59XG5mdW5jdGlvbiBOcChlLCB0KSB7XG4gIGNvbnN0IFtvLCBuXSA9IFQxKGUpO1xuICByZXR1cm4gUDEoKCkgPT4ge1xuICAgIGNvbnN0IHIgPSBzZXRUaW1lb3V0KCgpID0+IG4oZSksIHQgfHwgNTAwKTtcbiAgICByZXR1cm4gKCkgPT4ge1xuICAgICAgY2xlYXJUaW1lb3V0KHIpO1xuICAgIH07XG4gIH0sIFtlLCB0XSksIG87XG59XG5jb25zdCByOSA9IChlKSA9PiB7XG4gIGxldCB0ID0gKGUgPT0gbnVsbCA/IHZvaWQgMCA6IGUuZGF0YSkgPz8gW10sIG8gPSBlID09IG51bGwgPyB2b2lkIDAgOiBlLmlzU2VhcmNoYWJsZTtcbiAgY29uc3QgW24sIHJdID0gVDEodCksIFtpLCBhXSA9IFQxKFwiXCIpLCBbcywgbF0gPSBUMSghMSksIFtwLCBkXSA9IFQxKFwiXCIpLCBiID0gTnAoaSwgNTAwKSwgTSA9ICh6KSA9PiB7XG4gICAgYSh6KSwgbCghcyksIGUgPT0gbnVsbCB8fCBlLnNldFNlYXJjaFZhbHVlKHopO1xuICB9LCB1ID0gKCkgPT4ge1xuICAgIGxldCB6ID0gdCA9PSBudWxsID8gdm9pZCAwIDogdC5maWx0ZXIoXG4gICAgICAoZikgPT4ge1xuICAgICAgICB2YXIgTywgaCwgZztcbiAgICAgICAgcmV0dXJuIChmID09IG51bGwgPyB2b2lkIDAgOiBmLmNvdW50cnlMaXN0KSAhPSBudWxsID8gKGggPSAoTyA9IGYgPT0gbnVsbCA/IHZvaWQgMCA6IGYuY291bnRyeUxpc3QpID09IG51bGwgPyB2b2lkIDAgOiBPLmNvdW50cnlOYW1lKSA9PSBudWxsID8gdm9pZCAwIDogaC50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKGIudG9Mb3dlckNhc2UoKSkgOiAoZiA9PSBudWxsID8gdm9pZCAwIDogZi50aW1lWm9uZSkgIT0gbnVsbCA/IChnID0gZiA9PSBudWxsID8gdm9pZCAwIDogZi50aW1lWm9uZSkgPT0gbnVsbCA/IHZvaWQgMCA6IGcuem9uZS50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKGIudG9Mb3dlckNhc2UoKSkgOiBmID09IG51bGwgPyB2b2lkIDAgOiBmLmxhYmVsLnRvTG93ZXJDYXNlKCkuaW5jbHVkZXMoYi50b0xvd2VyQ2FzZSgpKTtcbiAgICAgIH1cbiAgICApO1xuICAgIHIoeik7XG4gIH07XG4gIFAxKCgpID0+IHtcbiAgICB1KCk7XG4gIH0sIFtiXSk7XG4gIGNvbnN0IEEgPSAoeikgPT4ge1xuICAgICh0eXBlb2YgeiA9PSBcIm9iamVjdFwiICYmIE9iamVjdC5rZXlzKHopLmxlbmd0aCB8fCB6Lmxlbmd0aCA+IDApICYmIChkKHopLCBlLnNlbGVjdGVkVmFsdWUgJiYgZS5zZWxlY3RlZFZhbHVlKHopKTtcbiAgfTtcbiAgcmV0dXJuIC8qIEBfX1BVUkVfXyAqLyBlMShLVywgeyBjaGlsZHJlbjogW1xuICAgIG8gJiYgLyogQF9fUFVSRV9fICovIGMoRzQsIHsgZ2V0VmFsdWU6IE0sIHZhbHVlOiBpLCBwbGFjZWhvbGRlcjogXCJTZWFyY2hcIiB9KSxcbiAgICAvKiBAX19QVVJFX18gKi8gYyhcbiAgICAgIGR0LFxuICAgICAge1xuICAgICAgICAuLi5lLFxuICAgICAgICBkZWZhdWx0VmFsdWVzOiBlID09IG51bGwgPyB2b2lkIDAgOiBlLnZhbHVlcyxcbiAgICAgICAgc2VsZWN0ZWRMaXN0czogcCxcbiAgICAgICAgZGF0YTogbixcbiAgICAgICAgc2VsZWN0ZWRPcHRpb25zOiBBLFxuICAgICAgICBzaG93U2VsZWN0ZWRMaXN0OiBlID09IG51bGwgPyB2b2lkIDAgOiBlLnNob3dTZWxlY3RlZExpc3RcbiAgICAgIH1cbiAgICApXG4gIF0gfSk7XG59LCBCQiA9IDQsIFNCID0ge1xuICB4czogMTQsXG4gIHNtOiAyNCxcbiAgbWQ6IDQwLFxuICBsZzogNDgsXG4gIHhsOiA2NFxufTtcbmZ1bmN0aW9uIEVCKGUsIHQsIG8pIHtcbiAgcmV0dXJuIG8gfHwgZVt0XTtcbn1cbmZ1bmN0aW9uIGtCKGUpIHtcbiAgY29uc3QgdCA9IEVCKFNCLCBlKSwgbyA9IEJCLCBuID0gKHQgLSBvKSAvIDIsIHIgPSBuICogMiAqIE1hdGguUEk7XG4gIHJldHVybiBbdCwgbywgbiwgcl07XG59XG5jb25zdCBOQiA9IHV0YFxuICAwJSB7XG4gICAgdHJhbnNmb3JtOiByb3RhdGUoMGRlZyk7XG4gIH1cbiAgMTAwJSB7XG4gICAgdHJhbnNmb3JtOiByb3RhdGUoMzYwZGVnKTtcbiAgfVxuYCwgVEIgPSAkLnN2ZyhcbiAgKHsgdGhlbWU6IHsgY29sb3JzOiBlIH0gfSkgPT4gbzFgXG4gICAgY29sb3I6ICR7ZS5pbmZvfTtcbiAgICBzdHJva2U6IGN1cnJlbnRDb2xvcjtcbiAgICB0cmFuc2Zvcm06IHJvdGF0ZSgtOTBkZWcpO1xuICAgIGZpbGw6IG5vbmU7XG4gIGBcbiksIElCID0gJC5jaXJjbGUoXG4gICh7IHRoZW1lOiB7IGNvbG9yczogZSB9IH0pID0+IG8xYFxuICAgIGNvbG9yOiAke2UuYmFja2dyb3VuZHMuYmdJbmZvcm1hdGlvbmFsUHJpbWFyeX07XG4gICAgYW5pbWF0aW9uOiAke05CfSAxcyBsaW5lYXIgaW5maW5pdGU7XG4gICAgdHJhbnNmb3JtLW9yaWdpbjogY2VudGVyO1xuICBgXG4pLCBEQiA9ICQuY2lyY2xlKFxuICAoeyB0aGVtZTogeyBjb2xvcnM6IGUgfSB9KSA9PiBvMWBcbiAgICBjb2xvcjogJHtlLmJvcmRlci5ib3JkZXJUZXJ0aWFyeX07XG4gIGBcbiksIEhCID0gKGUsIHQpID0+IHtcbiAgY29uc3QgeyBwcm9ncmVzczogbyA9IDAsIHNpemU6IG4gPSBcIm1kXCIsIC4uLnIgfSA9IGUsIFtpLCBhLCBzLCBsXSA9IG0wKFxuICAgICgpID0+IGtCKG4pLFxuICAgIFtuXVxuICApLCBwID0gbCAtIGwgKiAyNSAvIDEwMDtcbiAgcmV0dXJuIC8qIEBfX1BVUkVfXyAqLyBlMShcbiAgICBUQixcbiAgICB7XG4gICAgICAuLi5yLFxuICAgICAgd2lkdGg6IGksXG4gICAgICBoZWlnaHQ6IGksXG4gICAgICB2aWV3Qm94OiBgMCAwICR7aX0gJHtpfWAsXG4gICAgICByZWY6IHQsXG4gICAgICBjaGlsZHJlbjogW1xuICAgICAgICAvKiBAX19QVVJFX18gKi8gYyhcbiAgICAgICAgICBEQixcbiAgICAgICAgICB7XG4gICAgICAgICAgICBjeDogaSAvIDIsXG4gICAgICAgICAgICBjeTogaSAvIDIsXG4gICAgICAgICAgICByOiBzLFxuICAgICAgICAgICAgc3Ryb2tlV2lkdGg6IGEsXG4gICAgICAgICAgICBzdHJva2VEYXNoYXJyYXk6IGwsXG4gICAgICAgICAgICBzdHJva2VEYXNob2Zmc2V0OiAwXG4gICAgICAgICAgfVxuICAgICAgICApLFxuICAgICAgICAvKiBAX19QVVJFX18gKi8gYyhcbiAgICAgICAgICBJQixcbiAgICAgICAgICB7XG4gICAgICAgICAgICBjeDogaSAvIDIsXG4gICAgICAgICAgICBjeTogaSAvIDIsXG4gICAgICAgICAgICByOiBzLFxuICAgICAgICAgICAgc3Ryb2tlV2lkdGg6IGEsXG4gICAgICAgICAgICBzdHJva2VEYXNoYXJyYXk6IGwsXG4gICAgICAgICAgICBzdHJva2VEYXNob2Zmc2V0OiBwXG4gICAgICAgICAgfVxuICAgICAgICApXG4gICAgICBdXG4gICAgfVxuICApO1xufSwgVkIgPSBCMChIQiksIFlpID0ge1xuICBDSVJDTEU6IFwiY2lyY2xlXCIsXG4gIExJTkVBUjogXCJsaW5lYXJcIlxufSwgbjUgPSB7XG4gIENZQU46IFwiY3lhblwiLFxuICBCTFVFOiBcImJsdWVcIlxufSwgUEIgPSB1dGBcbiAgMCUge1xuICAgIHdpZHRoOiAwO1xuICB9XG4gIDEwMCUge1xuICAgIHdpZHRoOiAxMDAlO1xuICB9XG5gLCBGQiA9ICQuZGl2KFxuICAoeyB0aGVtZTogeyBjb2xvcnM6IGUgfSwgcHJvZ3Jlc3M6IHQsICRiYWNrZ3JvdW5kQ29sb3I6IG8gfSkgPT4ge1xuICAgIGxldCBuO1xuICAgIHN3aXRjaCAobykge1xuICAgICAgY2FzZSBuNS5CTFVFOlxuICAgICAgICBuID0gZS5iYWNrZ3JvdW5kcy5iZ0luZm9ybWF0aW9uYWxQcmltYXJ5O1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgbjUuQ1lBTjpcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIG4gPSBlLmJhY2tncm91bmRzLmJnSW5mb3JtYXRpb25hbFByaW1hcnk7XG4gICAgfVxuICAgIHJldHVybiBvMWBcbiAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgICAgIHdpZHRoOiAxMDAlO1xuICAgICAgbWluLXdpZHRoOiAxMDBweDtcbiAgICAgIGhlaWdodDogNHB4O1xuICAgICAgYmFja2dyb3VuZC1jb2xvcjogJHtlLmJvcmRlci5ib3JkZXJUZXJ0aWFyeX07XG4gICAgICBib3JkZXItcmFkaXVzOiAyMHB4O1xuICAgICAgb3ZlcmZsb3c6IGhpZGRlbjtcblxuICAgICAgJjphZnRlciB7XG4gICAgICAgIGNvbnRlbnQ6ICcnO1xuICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgICAgIGhlaWdodDogMTAwJTtcbiAgICAgICAgd2lkdGg6ICR7dH0lO1xuICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAke259O1xuICAgICAgICBib3JkZXItcmFkaXVzOiAyMHB4O1xuICAgICAgICB0cmFuc2l0aW9uOiB3aWR0aCAwLjJzIGxpbmVhcjtcbiAgICAgICAgYW5pbWF0aW9uOiAke1BCfSAycyBsaW5lYXIgaW5maW5pdGU7XG4gICAgICB9XG4gICAgYDtcbiAgfVxuKTtcbmZ1bmN0aW9uIFhCKGUsIHQpIHtcbiAgY29uc3Qge1xuICAgIHByb2dyZXNzOiBvID0gMCxcbiAgICBiYWNrZ3JvdW5kQ29sb3I6IG4gPSBuNS5DWUFOLFxuICAgIC4uLnJcbiAgfSA9IGU7XG4gIHJldHVybiAvKiBAX19QVVJFX18gKi8gYyhcbiAgICBGQixcbiAgICB7XG4gICAgICByZWY6IHQsXG4gICAgICBwcm9ncmVzczogNSxcbiAgICAgICRiYWNrZ3JvdW5kQ29sb3I6IG4sXG4gICAgICAuLi5yXG4gICAgfVxuICApO1xufVxuY29uc3QgVUIgPSBCMChYQik7XG4kLmRpdmBcbiAgd2lkdGg6IDk3MHB4O1xuYDtcbmNvbnN0IFlCID0gJC5kaXZgXG4gIGRpc3BsYXk6IGZsZXg7XG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG5gLCBHQiA9IChlLCB0KSA9PiB7XG4gIGNvbnN0IHsgcHJvZ3Jlc3M6IG8sIHR5cGU6IG4gPSBZaS5DSVJDTEUgfSA9IGU7XG4gIHJldHVybiAvKiBAX19QVVJFX18gKi8gYyhZQiwgeyByZWY6IHQsIGNoaWxkcmVuOiAoKCkgPT4ge1xuICAgIHN3aXRjaCAobikge1xuICAgICAgY2FzZSBZaS5MSU5FQVI6XG4gICAgICAgIHJldHVybiAvKiBAX19QVVJFX18gKi8gYyhVQiwgeyBwcm9ncmVzczogbyB9KTtcbiAgICAgIGNhc2UgWWkuQ0lSQ0xFOlxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuIC8qIEBfX1BVUkVfXyAqLyBjKFZCLCB7IHByb2dyZXNzOiBvIH0pO1xuICAgIH1cbiAgfSkoKSB9KTtcbn0sIFRwID0gQjAoR0IpLCBRQiA9ICQuZGl2KFxuICAoeyB0aGVtZTogeyB0eXBvZ3JhcGh5OiBlLCBsaW5lSGVpZ2h0OiB0IH0gfSkgPT4gbzFgXG4gICAgJHtYNX0ge1xuICAgICAgZm9udC1zaXplOiAke2UudDEyfTtcbiAgICAgIGxpbmUtaGVpZ2h0OiAke3QubGgyMH07XG4gICAgfVxuXG4gIGBcbiksIGk1ID0gJC5kaXYoXG4gICh7IHRoZW1lOiB7IGNvbG9yczogZSB9IH0pID0+IG8xYFxuICAgIGNvbG9yOiAke2UuZ3JleX07XG4gICAgZGlzcGxheTogZmxleDtcbiAgICB3aWR0aDogMTAwJTtcbiAgICBhbGlnbi1pdGVtczogY2VudGVyO1xuICAgIGJveC1zaXppbmc6IGJvcmRlci1ib3g7XG4gICAgZ2FwOiA4cHg7XG5cbiAgICBzdmcge1xuICAgICAgaGVpZ2h0OiAxMDAlO1xuICAgICAgd2lkdGg6IDE0cHg7XG4gICAgfVxuXG4gIFxuICBgXG4pLCBaQiA9ICQuc3Ryb25nKFxuICAoeyB0aGVtZTogeyBjb2xvcnM6IGUsIGZvbnRXZWlnaHQ6IHQsIHNwYWNpbmdzOiBvIH0gfSkgPT4gbzFgXG4gICAgY29sb3I6ICR7ZS5ncmV5fTtcbiAgICBkaXNwbGF5OiBibG9jaztcbiAgICBmb250LXdlaWdodDogJHt0LnJlZ3VsYXJ9O1xuICAgIG1hcmdpbjogMCAke28uc3A0fSAke28uc3A4fTtcbiAgYFxuKSwgdHQgPSAoZSkgPT4ge1xuICBjb25zdCB7XG4gICAgZGF0YTogdCxcbiAgICBzZWxlY3RlZE9wdGlvbnM6IG8sXG4gICAgaXNNdWx0aTogbixcbiAgICBpc0ZpbHRlcjogcixcbiAgICBBcHBseUZpbHRlcjogaSxcbiAgICBwbGFjZWhvbGRlcjogYSxcbiAgICBsYWJlbDogcyxcbiAgICBsYWJlbFR5cGU6IGwsXG4gICAgZHJvcGRvd25Cb2R5V2lkdGg6IHAsXG4gICAgcG9zaXRpb246IGQsXG4gICAgZ2V0U2VhcmNoVmFsdWU6IGIsXG4gICAgaXNTZWFyY2hhYmxlOiBNLFxuICAgIGlzQm9keUdlbmVyYXRlZDogdSxcbiAgICBkZWZhdWx0VmFsdWVzOiBBLFxuICAgIGF1dG9TZWFyY2g6IHosXG4gICAgaXNSZXF1aXJlZDogZixcbiAgICBpY29uUmlnaHQ6IE8sXG4gICAgc2hvd1NlbGVjdGVkTGlzdDogaCxcbiAgICBpc0hpZGVDbGVhckJ0bjogZyxcbiAgICBoYW5kbGVDbGVhckZuOiB2LFxuICAgIGlzTG9hZGluZzogTCxcbiAgICBpc1Rvb2x0aXA6IHlcbiAgfSA9IGUsIEIgPSBuMChudWxsKSwgW1gsIEZdID0gVDEoITEpLCBbVCwgd10gPSBUMShcIlwiKSwgW0gsIENdID0gVDEoW10pLCBxID0gbjAoKSwgW20sIGtdID0gVDEodCksIFt4LCBOXSA9IFQxKCEwKSwgViA9IChLLCBRKSA9PiB7XG4gICAgbGV0IEUsIEQgPSBbXTtcbiAgICBpZiAoQSAhPSBudWxsKVxuICAgICAgcmV0dXJuIEsgIT0gbnVsbCAmJiBLLmxlbmd0aCA/IChRID09IG51bGwgfHwgUS5maWx0ZXIoKEcpID0+IHtcbiAgICAgICAgSyA9PSBudWxsIHx8IEsubWFwKChKKSA9PiB7XG4gICAgICAgICAgRy5sYWJlbCA9PSAoSiA9PSBudWxsID8gdm9pZCAwIDogSi5sYWJlbCkgJiYgRy52YWx1ZSA9PSAoSiA9PSBudWxsID8gdm9pZCAwIDogSi52YWx1ZSkgJiYgRC5wdXNoKCEwKTtcbiAgICAgICAgfSk7XG4gICAgICB9KSwgRC5sZW5ndGggPT0gKEsgPT0gbnVsbCA/IHZvaWQgMCA6IEsubGVuZ3RoKSkgOiBRICE9IG51bGwgJiYgUS50aW1lWm9uZSA/IChRID09IG51bGwgfHwgUS5maWx0ZXIoKEcpID0+IHtcbiAgICAgICAgRy50aW1lWm9uZS56b25lID09IEsudGltZVpvbmUuem9uZSAmJiBHLnZhbHVlID09IEsudmFsdWUgJiYgKEUgPSAhMCk7XG4gICAgICB9KSwgRSkgOiAoUSA9PSBudWxsIHx8IFEuZmlsdGVyKChHKSA9PiB7XG4gICAgICAgIEcubGFiZWwgPT0gSy5sYWJlbCAmJiBHLnZhbHVlID09IEsudmFsdWUgJiYgKEUgPSAhMCk7XG4gICAgICB9KSwgRSk7XG4gIH07XG4gIFAxKCgpID0+IHtcbiAgICB2YXIgSywgUSwgRTtcbiAgICBpZiAoVihBLCB0KSlcbiAgICAgIGlmIChBICE9IG51bGwgJiYgQS5sZW5ndGgpIHtcbiAgICAgICAgbGV0IEQgPSBbXTtcbiAgICAgICAgQSA9PSBudWxsIHx8IEEubWFwKChHKSA9PiB7XG4gICAgICAgICAgRC5wdXNoKEcubGFiZWwpO1xuICAgICAgICB9KSwgdyhEKSwgQyhBKTtcbiAgICAgIH0gZWxzZSBpZiAoKEsgPSBBID09IG51bGwgPyB2b2lkIDAgOiBBLnRpbWVab25lKSAhPSBudWxsICYmIEsuem9uZSkge1xuICAgICAgICBsZXQgRCA9IGAkeyhRID0gQSA9PSBudWxsID8gdm9pZCAwIDogQS50aW1lWm9uZSkgPT0gbnVsbCA/IHZvaWQgMCA6IFEuem9uZX1gO1xuICAgICAgICBDKEEpLCB3KEQpO1xuICAgICAgfSBlbHNlIGlmIChBICE9IG51bGwgJiYgQS5jb3VudHJ5TGlzdCkge1xuICAgICAgICBsZXQgRCA9IGAkeyhFID0gQSA9PSBudWxsID8gdm9pZCAwIDogQS5jb3VudHJ5TGlzdCkgPT0gbnVsbCA/IHZvaWQgMCA6IEUuY291bnRyeUNvZGV9YDtcbiAgICAgICAgQyhBKSwgdyhEKTtcbiAgICAgIH0gZWxzZVxuICAgICAgICBDKEEpLCB3KEEgPT0gbnVsbCA/IHZvaWQgMCA6IEEubGFiZWwpO1xuICAgIEpTT04uc3RyaW5naWZ5KEEpID09PSBcInt9XCIgJiYgKEMoe30pLCB3KFwiXCIpKSwgKEEgPT0gbnVsbCA/IHZvaWQgMCA6IEEubGVuZ3RoKSA9PSAwICYmIChDKFtdKSwgdyhcIlwiKSk7XG4gIH0sIFtBLCBMLCB0XSk7XG4gIGNvbnN0IFIgPSAoKSA9PiB7XG4gICAgRighWCk7XG4gIH07XG4gIFAxKCgpID0+IHtcbiAgICBBICYmIHogJiYgKGsodCksIE4oITApKTtcbiAgfSwgW0FdKTtcbiAgY29uc3QgSSA9IChLKSA9PiB7XG4gICAgbGV0IFEgPSBLLnRhcmdldC52YWx1ZTtcbiAgICBpZiAoTighMSksIFEubGVuZ3RoID4gMCkge1xuICAgICAgdyhRKTtcbiAgICAgIGxldCBFID0gW107XG4gICAgICB0ID09IG51bGwgfHwgdC5maWx0ZXIoKEQpID0+IHtcbiAgICAgICAgRC5sYWJlbC50b1N0cmluZygpLnRvTG93ZXJDYXNlKCkuaW5jbHVkZXMoUSkgJiYgRS5wdXNoKEQpO1xuICAgICAgfSksIGsoRSk7XG4gICAgfSBlbHNlXG4gICAgICB3KFwiXCIpLCBDKFtdKSwgayh0KTtcbiAgICBGKCEwKTtcbiAgfTtcbiAgVTUoQiwgWCwgUiksIFAxKCgpID0+IHtcbiAgICAhbiAmJiBUICYmIEYoITEpO1xuICB9LCBbbiwgVF0pO1xuICBjb25zdCBqID0gKEspID0+IHtcbiAgICB2YXIgUTtcbiAgICBpZiAoTighMCksIEspIHtcbiAgICAgIGxldCBFID0gW107XG4gICAgICBLLmxlbmd0aCAmJiAoSyA9PSBudWxsIHx8IEsubWFwKChEKSA9PiB7XG4gICAgICAgIEUucHVzaChELmxhYmVsKTtcbiAgICAgIH0pLCB3KEUpLCBDKEspLCBrKFtLXSksIG8gJiYgbyhLKSk7XG4gICAgfVxuICAgIEsgIT0gbnVsbCAmJiBLLmNvdW50cnlMaXN0ICYmICh3KChRID0gSy5jb3VudHJ5TGlzdCkgPT0gbnVsbCA/IHZvaWQgMCA6IFEuY291bnRyeUNvZGUpLCBvICYmIG8oSykpLCBLICE9IG51bGwgJiYgSy56b25lICYmICh3KEsuem9uZSksIG8gJiYgbyhLKSksIEsgIT0gbnVsbCAmJiBLLmxhYmVsICYmICh3KEsubGFiZWwpLCBDKEspLCBrKFtLXSksIG8gJiYgbyhLKSk7XG4gIH0sIFUgPSAoSykgPT4ge1xuICAgIHZhciBRO1xuICAgIGlmIChLICE9IG51bGwgJiYgSy5jb3VudHJ5TGlzdCAmJiAodyhLLmNvdW50cnlDb2RlKSwgbyAmJiBvKEspKSwgSyAhPSBudWxsICYmIEsuem9uZSAmJiAodyhLLnpvbmUpLCBvICYmIG8oSykpLCBLICE9IG51bGwgJiYgSy5sYWJlbCAmJiAodyhLLmxhYmVsKSwgbyAmJiBvKEsubGFiZWwpKSwgSykge1xuICAgICAgbGV0IEUgPSBbXTtcbiAgICAgIEsubGVuZ3RoICYmIChLID09IG51bGwgfHwgSy5tYXAoKEQpID0+IHtcbiAgICAgICAgRS5wdXNoKEQubGFiZWwpO1xuICAgICAgfSksIHcoRSksIG8gJiYgbyhFKSk7XG4gICAgfVxuICAgIEsgJiYgQyhLKSwgKChRID0gT2JqZWN0LmtleXMoSykpID09IG51bGwgPyB2b2lkIDAgOiBRLmxlbmd0aCkgPT09IDAgJiYgKHcoXCJcIiksIEMoSykpLCByICYmIChDKEspLCBvICYmIG8oSykpLCBpICYmIGkoSyk7XG4gIH0sIF8gPSAoSykgPT4ge1xuICAgIGIgJiYgYihLKTtcbiAgfSwgcjEgPSAoKSA9PiB7XG4gICAgdiAmJiB2KCksIHcoXCJcIiksIGsodCksIG4gPyAoQyhbXSksIG8gJiYgbyhbXSksIGkgJiYgaShbXSkpIDogKEMoe30pLCBvICYmIG8oe30pLCBpICYmIGkoe30pKSwgRighMSk7XG4gIH07XG4gIHJldHVybiAvKiBAX19QVVJFX18gKi8gYyhHVywgeyByZWY6IHEsIGNoaWxkcmVuOiAvKiBAX19QVVJFX18gKi8gYyhcbiAgICBpdCxcbiAgICB7XG4gICAgICBpc1Nob3dlZDogWCxcbiAgICAgIGlzQm9keUdlbmVyYXRlZDogdSxcbiAgICAgIGRyb3Bkb3duQm9keVdpZHRoOiBwIHx8IFwiMTAwJVwiLFxuICAgICAgcG9zaXRpb246IGQsXG4gICAgICBib2R5OiAhTCAmJiAhKGUgIT0gbnVsbCAmJiBlLmlzRGlzYWJsZWQpICYmIHQgJiYgdC5sZW5ndGggPiAwID8gLyogQF9fUFVSRV9fICovIGMoazcsIHsgcmVmOiBCLCBjaGlsZHJlbjogeiA/IC8qIEBfX1BVUkVfXyAqLyBjKFxuICAgICAgICBkdCxcbiAgICAgICAge1xuICAgICAgICAgIC4uLmUsXG4gICAgICAgICAgZGVmYXVsdFZhbHVlczogSCxcbiAgICAgICAgICBkYXRhOiBtLFxuICAgICAgICAgIGlzTXVsdGk6ICExLFxuICAgICAgICAgIHNlbGVjdGVkT3B0aW9uczogaixcbiAgICAgICAgICBzaG93U2VsZWN0ZWRMaXN0OiBoXG4gICAgICAgIH1cbiAgICAgICkgOiAvKiBAX19QVVJFX18gKi8gYyhcbiAgICAgICAgcjksXG4gICAgICAgIHtcbiAgICAgICAgICAuLi5lLFxuICAgICAgICAgIHZhbHVlczogSCxcbiAgICAgICAgICBBcHBseUZpbHRlclZhbHVlOiBVLFxuICAgICAgICAgIHNlbGVjdGVkVmFsdWU6IGosXG4gICAgICAgICAgc2V0U2VhcmNoVmFsdWU6IF8sXG4gICAgICAgICAgaXNTZWFyY2hhYmxlOiAhISh0ICYmICh0ID09IG51bGwgPyB2b2lkIDAgOiB0Lmxlbmd0aCkgPiAxMCAmJiBNKSxcbiAgICAgICAgICBzaG93U2VsZWN0ZWRMaXN0OiBoXG4gICAgICAgIH1cbiAgICAgICkgfSkgOiBMICYmICEoZSAhPSBudWxsICYmIGUuaXNEaXNhYmxlZCkgPyAvKiBAX19QVVJFX18gKi8gZTEoaTUsIHsgY2hpbGRyZW46IFtcbiAgICAgICAgLyogQF9fUFVSRV9fICovIGMoVHAsIHsgdHlwZTogXCJjaXJjbGVcIiwgcHJvZ3Jlc3M6IDUwIH0pLFxuICAgICAgICBcIiBMb2FkaW5nXCJcbiAgICAgIF0gfSkgOiAvKiBAX19QVVJFX18gKi8gYyhrNywgeyByZWY6IEIsIGNoaWxkcmVuOiB6ID8gLyogQF9fUFVSRV9fICovIGMoXG4gICAgICAgIGR0LFxuICAgICAgICB7XG4gICAgICAgICAgLi4uZSxcbiAgICAgICAgICBkZWZhdWx0VmFsdWVzOiBILFxuICAgICAgICAgIGRhdGE6IG0sXG4gICAgICAgICAgaXNNdWx0aTogITEsXG4gICAgICAgICAgc2VsZWN0ZWRPcHRpb25zOiBqLFxuICAgICAgICAgIHNob3dTZWxlY3RlZExpc3Q6IGhcbiAgICAgICAgfVxuICAgICAgKSA6IC8qIEBfX1BVUkVfXyAqLyBjKFxuICAgICAgICByOSxcbiAgICAgICAge1xuICAgICAgICAgIC4uLmUsXG4gICAgICAgICAgdmFsdWVzOiBILFxuICAgICAgICAgIEFwcGx5RmlsdGVyVmFsdWU6IFUsXG4gICAgICAgICAgc2VsZWN0ZWRWYWx1ZTogaixcbiAgICAgICAgICBzZXRTZWFyY2hWYWx1ZTogXyxcbiAgICAgICAgICBpc1NlYXJjaGFibGU6ICEhKHQgJiYgKHQgPT0gbnVsbCA/IHZvaWQgMCA6IHQubGVuZ3RoKSA+IDEwICYmIE0pLFxuICAgICAgICAgIHNob3dTZWxlY3RlZExpc3Q6IGhcbiAgICAgICAgfVxuICAgICAgKSB9KSxcbiAgICAgIGNoaWxkcmVuOiAvKiBAX19QVVJFX18gKi8gYyhRVywgeyBjaGlsZHJlbjogeiA/IC8qIEBfX1BVUkVfXyAqLyBjKFxuICAgICAgICBWaSxcbiAgICAgICAge1xuICAgICAgICAgIC4uLmUsXG4gICAgICAgICAgcGxhY2Vob2xkZXI6IGEgfHwgXCJTZWxlY3RcIixcbiAgICAgICAgICBpY29uUmlnaHQ6IE8gfHwgKFggPyBcIkNoZXZyb25VcFwiIDogXCJDaGV2cm9uRG93blwiKSxcbiAgICAgICAgICByZWFkT25seTogITEsXG4gICAgICAgICAgbGFiZWw6IHMsXG4gICAgICAgICAgbGFiZWxUeXBlOiBsLFxuICAgICAgICAgIGlzUmVxdWlyZWQ6IGYgfHwgITEsXG4gICAgICAgICAgaWNvblNpemU6IFwieHh4c1wiLFxuICAgICAgICAgIG9uQ2xpY2s6IFIsXG4gICAgICAgICAgdmFsdWU6IFQsXG4gICAgICAgICAgaGFuZGxlQ2xlYXJGbjogcjEsXG4gICAgICAgICAgb25DaGFuZ2U6IEksXG4gICAgICAgICAgaGlkZUNsZWFyQnV0dG9uOiB4XG4gICAgICAgIH1cbiAgICAgICkgOiAvKiBAX19QVVJFX18gKi8gYyhzMCwgeyBjaGlsZHJlbjogbiAmJiBUICYmIHkgPyAvKiBAX19QVVJFX18gKi8gYyhcbiAgICAgICAgQTMsXG4gICAgICAgIHtcbiAgICAgICAgICBwbGFjZTogXCJyaWdodC1zdGFydFwiLFxuICAgICAgICAgIGZvbGxvd0N1cnNvcjogITAsXG4gICAgICAgICAgdGV4dDogLyogQF9fUFVSRV9fICovIGMoWlcsIHsgY2hpbGRyZW46IFQgPT0gbnVsbCA/IHZvaWQgMCA6IFQubWFwKChLKSA9PiAvKiBAX19QVVJFX18gKi8gYyhqVywgeyBjaGlsZHJlbjogSyB9KSkgfSksXG4gICAgICAgICAgY2hpbGRyZW46IC8qIEBfX1BVUkVfXyAqLyBjKHMwLCB7IGNoaWxkcmVuOiAvKiBAX19QVVJFX18gKi8gYyhcbiAgICAgICAgICAgIFZpLFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAuLi5lLFxuICAgICAgICAgICAgICBwbGFjZWhvbGRlcjogYSB8fCBcIlNlbGVjdFwiLFxuICAgICAgICAgICAgICBpY29uUmlnaHQ6IE8gfHwgKFggPyBcIkNoZXZyb25VcFwiIDogXCJDaGV2cm9uRG93blwiKSxcbiAgICAgICAgICAgICAgcmVhZE9ubHk6ICEwLFxuICAgICAgICAgICAgICBsYWJlbDogcyxcbiAgICAgICAgICAgICAgbGFiZWxUeXBlOiBsLFxuICAgICAgICAgICAgICBpc1JlcXVpcmVkOiBmIHx8ICExLFxuICAgICAgICAgICAgICBpY29uU2l6ZTogXCJ4eHhzXCIsXG4gICAgICAgICAgICAgIG9uQ2xpY2s6IFIsXG4gICAgICAgICAgICAgIG9uSWNvblJpZ2h0Q2xpY2s6IFIsXG4gICAgICAgICAgICAgIHZhbHVlOiBULFxuICAgICAgICAgICAgICBoYW5kbGVDbGVhckZuOiByMSxcbiAgICAgICAgICAgICAgb25DaGFuZ2U6ICgpID0+IG51bGwsXG4gICAgICAgICAgICAgIGhpZGVDbGVhckJ1dHRvbjogZ1xuICAgICAgICAgICAgfVxuICAgICAgICAgICkgfSlcbiAgICAgICAgfVxuICAgICAgKSA6IC8qIEBfX1BVUkVfXyAqLyBjKFxuICAgICAgICBWaSxcbiAgICAgICAge1xuICAgICAgICAgIC4uLmUsXG4gICAgICAgICAgcGxhY2Vob2xkZXI6IGEgfHwgXCJTZWxlY3RcIixcbiAgICAgICAgICBpY29uUmlnaHQ6IE8gfHwgKFggPyBcIkNoZXZyb25VcFwiIDogXCJDaGV2cm9uRG93blwiKSxcbiAgICAgICAgICByZWFkT25seTogITAsXG4gICAgICAgICAgbGFiZWw6IHMsXG4gICAgICAgICAgbGFiZWxUeXBlOiBsLFxuICAgICAgICAgIGlzUmVxdWlyZWQ6IGYgfHwgITEsXG4gICAgICAgICAgaWNvblNpemU6IFwieHh4c1wiLFxuICAgICAgICAgIG9uQ2xpY2s6IFIsXG4gICAgICAgICAgb25JY29uUmlnaHRDbGljazogUixcbiAgICAgICAgICB2YWx1ZTogVCxcbiAgICAgICAgICBoYW5kbGVDbGVhckZuOiByMSxcbiAgICAgICAgICBvbkNoYW5nZTogKCkgPT4gbnVsbCxcbiAgICAgICAgICBoaWRlQ2xlYXJCdXR0b246IGdcbiAgICAgICAgfVxuICAgICAgKSB9KSB9KVxuICAgIH1cbiAgKSB9KTtcbn0sIHpuID0gW1xuICB7XG4gICAgdmFsdWU6IDAsXG4gICAgbGFiZWw6IFwiSmFudWFyeVwiXG4gIH0sXG4gIHtcbiAgICB2YWx1ZTogMSxcbiAgICBsYWJlbDogXCJGZWJydWFyeVwiXG4gIH0sXG4gIHtcbiAgICB2YWx1ZTogMixcbiAgICBsYWJlbDogXCJNYXJjaFwiXG4gIH0sXG4gIHtcbiAgICB2YWx1ZTogMyxcbiAgICBsYWJlbDogXCJBcHJpbFwiXG4gIH0sXG4gIHtcbiAgICB2YWx1ZTogNCxcbiAgICBsYWJlbDogXCJNYXlcIlxuICB9LFxuICB7XG4gICAgdmFsdWU6IDUsXG4gICAgbGFiZWw6IFwiSnVuZVwiXG4gIH0sXG4gIHtcbiAgICB2YWx1ZTogNixcbiAgICBsYWJlbDogXCJKdWx5XCJcbiAgfSxcbiAge1xuICAgIHZhbHVlOiA3LFxuICAgIGxhYmVsOiBcIkF1Z3VzdFwiXG4gIH0sXG4gIHtcbiAgICB2YWx1ZTogOCxcbiAgICBsYWJlbDogXCJTZXB0ZW1iZXJcIlxuICB9LFxuICB7XG4gICAgdmFsdWU6IDksXG4gICAgbGFiZWw6IFwiT2N0b2JlclwiXG4gIH0sXG4gIHtcbiAgICB2YWx1ZTogMTAsXG4gICAgbGFiZWw6IFwiTm92ZW1iZXJcIlxuICB9LFxuICB7XG4gICAgdmFsdWU6IDExLFxuICAgIGxhYmVsOiBcIkRlY2VtYmVyXCJcbiAgfVxuXTtcbmZ1bmN0aW9uIElwKGUpIHtcbiAgY29uc3QgeyBkYXRlOiB0LCBkZWNyZWFzZU1vbnRoOiBvLCBpbmNyZWFzZU1vbnRoOiBuLCBjaGFuZ2VNb250aDogciwgY2hhbmdlWWVhcjogaSB9ID0gZSwgbCA9ICgoTSwgdSwgQSkgPT4ge1xuICAgIHZhciB6LCBmO1xuICAgIHJldHVybiAoZiA9ICh6ID0gbmV3IEFycmF5KHUgLSBNKSkgPT0gbnVsbCA/IHZvaWQgMCA6IHouZmlsbCh7IC4uLkEsIC4uLk0sIC4uLnUgfSkpID09IG51bGwgPyB2b2lkIDAgOiBmLm1hcCgoTywgaCkgPT4gaCArIE0pO1xuICB9KSgxOTAwLCBMMCgvKiBAX19QVVJFX18gKi8gbmV3IERhdGUoKSkgKyAxMDAsIDEpO1xuICBsZXQgcCA9IFtdO1xuICBsLm1hcCgoTSwgdSkgPT4ge1xuICAgIHAucHVzaCh7IHZhbHVlOiB1LCBsYWJlbDogTSB9KTtcbiAgfSk7XG4gIGNvbnN0IGQgPSAoKSA9PiB7XG4gICAgbGV0IE0gPSBbXSwgdSA9IG03W2cyKHQpXTtcbiAgICByZXR1cm4gem4gPT0gbnVsbCB8fCB6bi5tYXAoKEEpID0+IHtcbiAgICAgIEEubGFiZWwgPT0gdSAmJiBNLnB1c2goQSk7XG4gICAgfSksIE07XG4gIH0sIGIgPSAoKSA9PiB7XG4gICAgbGV0IE0gPSBbXSwgdSA9IEwwKHQpO1xuICAgIHJldHVybiBwID09IG51bGwgfHwgcC5tYXAoKEEpID0+IHtcbiAgICAgIEEubGFiZWwgPT0gdSAmJiBNLnB1c2goQSk7XG4gICAgfSksIE07XG4gIH07XG4gIHJldHVybiAvKiBAX19QVVJFX18gKi8gZTEoSFcsIHsgY2hpbGRyZW46IFtcbiAgICAvKiBAX19QVVJFX18gKi8gYyhQVywgeyBjaGlsZHJlbjogLyogQF9fUFVSRV9fICovIGUxKHNvLCB7IGNvbHVtbnM6IDEyLCAkanVzdGlmeUNvbnRlbnQ6IFwic3BhY2UtYmV0d2VlblwiLCBjaGlsZHJlbjogW1xuICAgICAgLyogQF9fUFVSRV9fICovIGMoZjQsIHsgd2lkdGg6IDcsIGNoaWxkcmVuOiAvKiBAX19QVVJFX18gKi8gYyhcbiAgICAgICAgdHQsXG4gICAgICAgIHtcbiAgICAgICAgICBkYXRhOiB6bixcbiAgICAgICAgICBzZWxlY3RlZE9wdGlvbnM6IChNKSA9PiB7XG4gICAgICAgICAgICBpZiAoTS5sYWJlbCkge1xuICAgICAgICAgICAgICBsZXQgdSA9IG03LmluZGV4T2YoTS5sYWJlbCk7XG4gICAgICAgICAgICAgIHIodSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSxcbiAgICAgICAgICBkZWZhdWx0VmFsdWVzOiBkKCksXG4gICAgICAgICAgYXV0b1NlYXJjaDogITAsXG4gICAgICAgICAgZHJvcGRvd25Cb2R5V2lkdGg6IFwiMTE1cHhcIixcbiAgICAgICAgICBzaG93U2VsZWN0ZWRMaXN0OiAhMFxuICAgICAgICB9XG4gICAgICApIH0pLFxuICAgICAgLyogQF9fUFVSRV9fICovIGMoZjQsIHsgd2lkdGg6IDUsIGNoaWxkcmVuOiAvKiBAX19QVVJFX18gKi8gYyhcbiAgICAgICAgdHQsXG4gICAgICAgIHtcbiAgICAgICAgICBkYXRhOiBwLFxuICAgICAgICAgIHNlbGVjdGVkT3B0aW9uczogKE0pID0+IHtcbiAgICAgICAgICAgIGxldCB1ID0gTSA9PSBudWxsID8gdm9pZCAwIDogTS5sYWJlbDtcbiAgICAgICAgICAgIE0ubGFiZWwgJiYgaSh1KTtcbiAgICAgICAgICB9LFxuICAgICAgICAgIGRlZmF1bHRWYWx1ZXM6IGIoKSxcbiAgICAgICAgICBhdXRvU2VhcmNoOiAhMCxcbiAgICAgICAgICBkcm9wZG93bkJvZHlXaWR0aDogXCIxMDRweFwiLFxuICAgICAgICAgIHNob3dTZWxlY3RlZExpc3Q6ICEwXG4gICAgICAgIH1cbiAgICAgICkgfSlcbiAgICBdIH0pIH0pLFxuICAgIC8qIEBfX1BVUkVfXyAqLyBlMShWVywgeyBjaGlsZHJlbjogW1xuICAgICAgLyogQF9fUFVSRV9fICovIGModzcsIHsgb25DbGljazogbywgY2hpbGRyZW46IC8qIEBfX1BVUkVfXyAqLyBjKFoxLCB7IG5hbWU6IFwiQ2hldnJvbkxlZnRcIiwgc2l6ZTogXCJ4eHhzXCIgfSkgfSksXG4gICAgICAvKiBAX19QVVJFX18gKi8gYyh3NywgeyBvbkNsaWNrOiBuLCBjaGlsZHJlbjogLyogQF9fUFVSRV9fICovIGMoWjEsIHsgbmFtZTogXCJDaGV2cm9uUmlnaHRcIiwgc2l6ZTogXCJ4eHhzXCIgfSkgfSlcbiAgICBdIH0pXG4gIF0gfSk7XG59XG5jb25zdCBxMiA9IChlKSA9PiB7XG4gIGxldCB0ID0gZSA9PSBudWxsID8gdm9pZCAwIDogZS5yZXBsYWNlKC8jLywgXCJcIik7XG4gICh0ID09IG51bGwgPyB2b2lkIDAgOiB0Lmxlbmd0aCkgPT09IDMgJiYgKHQgPSB0WzBdICsgdFswXSArIHRbMV0gKyB0WzFdICsgdFsyXSArIHRbMl0pO1xuICBjb25zdCBvID0gcGFyc2VJbnQodCwgMTYpLCBuID0gbyA+PiAxNiAmIDI1NSwgciA9IG8gPj4gOCAmIDI1NSwgaSA9IG8gJiAyNTU7XG4gIHJldHVybiBgJHtufSwke3J9LCR7aX1gO1xufTtcbiQuZGl2YFxuICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gIHRvcDogMjBweDtcbiAgdHJhbnNmb3JtOiB0cmFuc2xhdGVYKC01MCUpO1xuICB3aWR0aDogNDAwcHg7XG5gO1xuY29uc3QgakIgPSAkLmhlYWRlcihcbiAgKHsgdGhlbWU6IHsgY29sb3JzOiBlIH0gfSkgPT4gbzFgXG4gICAgZGl2IHtcbiAgICAgIHJpZ2h0OiAyNnB4O1xuICAgICAgdG9wOiA1MCU7XG4gICAgfVxuICAgIHN2ZyB7XG4gICAgICBiYWNrZ3JvdW5kOiByZ2JhKFxuICAgICAgICAke3EyKGUuYmFja2dyb3VuZHMuYmdUcmFuc3BhcmVuY3lQcmltYXJ5KX0sXG4gICAgICAgIDAuMVxuICAgICAgKTtcbiAgICAgIGJvcmRlci1yYWRpdXM6IDhweDtcbiAgICAgIHdpZHRoOiA2cHggIWltcG9ydGFudDtcbiAgICAgIGhlaWdodDogNnB4ICFpbXBvcnRhbnQ7XG4gICAgICBwYWRkaW5nOiAzcHg7XG4gICAgICBjb2xvcjogd2hpdGU7XG4gICAgICB0cmFuc2l0aW9uOiAwLjNzIGFsbCBlYXNlLWluLW91dDtcbiAgICAgICY6aG92ZXIge1xuICAgICAgICBiYWNrZ3JvdW5kOiAke2UuYmFja2dyb3VuZHMuYmdIb3ZlclNlY29uZGFyeX07XG4gICAgICAgIHRyYW5zaXRpb246IDAuM3MgYWxsIGVhc2UtaW4tb3V0O1xuICAgICAgfVxuICAgIH1cbiAgYFxuKTtcbiQuaGVhZGVyKFxuICAoeyB0aGVtZTogeyBzcGFjaW5nczogZSB9IH0pID0+IG8xYFxuICAgIGRpc3BsYXk6IGZsZXg7XG4gICAganVzdGlmeS1jb250ZW50OiBzcGFjZS1iZXR3ZWVuO1xuICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gICAgcGFkZGluZy1ib3R0b206ICR7ZS5zcDE2fTtcbiAgICB1c2VyLXNlbGVjdDogbm9uZTtcbiAgYFxuKTtcbiQuaGVhZGVyKFxuICAoeyB0aGVtZToge30gfSkgPT4gbzFgXG4gICAgZGlzcGxheTogZmxleDtcbiAgYFxuKTtcbiQuZGl2KFxuICAoeyB0aGVtZTogeyBzcGFjaW5nczogZSwgYm9yZGVyUmFkaXVzOiB0LCB0cmFuc2l0aW9uczogbywgY29sb3JzOiBuIH0gfSkgPT4gbzFgXG4gICAgd2lkdGg6ICR7ZS5zcDEyfTtcbiAgICBoZWlnaHQ6ICR7ZS5zcDEyfTtcbiAgICBwYWRkaW5nOiA2cHggMTBweDtcbiAgICBib3JkZXItcmFkaXVzOiAke3QuYmFzZX07XG4gICAgdHJhbnNpdGlvbjogJHtvLmJhc2V9O1xuICAgIGN1cnNvcjogcG9pbnRlcjtcblxuICAgICY6aG92ZXIge1xuICAgICAgYmFja2dyb3VuZC1jb2xvcjogJHtuLmJhY2tncm91bmRzLndoaXRlU21va2V9O1xuICAgIH1cblxuICAgIC5pY29uLXN5c3RlbSB7XG4gICAgICBjb2xvcjogJHtuLmJsYWNrfTtcbiAgICB9XG4gIGBcbik7XG4kLnAoXG4gICh7IHRoZW1lOiBlIH0pID0+IG8xYFxuICAgIGZvbnQtZmFtaWx5OiAke2UuZm9udEZhbWlseS5iYXNlfTtcbiAgICBmb250LXdlaWdodDogJHtlLmZvbnRXZWlnaHQucmVndWxhcn07XG4gICAgZm9udC1zaXplOiAke2UudHlwb2dyYXBoeS50MTZ9O1xuICAgIGNvbG9yOiAke2UuY29sb3JzLmJsYWNrfTtcbiAgICBtYXJnaW46IDA7XG4gICAgZGlzcGxheTogZmxleDtcbiAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcbiAgICBhbGlnbi1pdGVtczogY2VudGVyO1xuICAgIHdpZHRoOiA1MiU7XG4gIGBcbik7XG4kLmRpdihcbiAgKHsgdGhlbWU6IGUgfSkgPT4gbzFgXG4gICAgZmxleC1iYXNpczogNTElO1xuICAgIGlucHV0IHtcbiAgICAgIGZvbnQtZmFtaWx5OiAke2UuZm9udEZhbWlseS5iYXNlfTtcbiAgICAgIGZvbnQtd2VpZ2h0OiAke2UuZm9udFdlaWdodC5yZWd1bGFyfTtcbiAgICAgIGZvbnQtc2l6ZTogJHtlLnR5cG9ncmFwaHkudDE2fTtcbiAgICAgIGNvbG9yOiAke2UuY29sb3JzLmJsYWNrfTtcbiAgICAgIG1hcmdpbjogMDtcbiAgICAgIGhlaWdodDogMnJlbTtcbiAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICAgIHRvcDogLTE2cHg7XG4gICAgICBib3JkZXI6IG5vbmU7XG4gICAgICBwYWRkaW5nLXJpZ2h0OiAwO1xuICAgICAgcGFkZGluZy1sZWZ0OiAxMHB4O1xuICAgIH1cbiAgICAuaWNvbi1zeXN0ZW0ge1xuICAgICAgc3ZnIHtcbiAgICAgICAgd2lkdGg6IDEuNXJlbTtcbiAgICAgIH1cbiAgICB9XG4gICAgJHtYNX0ge1xuICAgICAgdG9wOiAxNnB4O1xuICAgICAgbGVmdDogLTEwcHg7XG4gICAgfVxuICBgXG4pO1xuJChZMilgXG4gIGN1cnNvcjogcG9pbnRlcjtcbiAgLyogcG9zaXRpb246IHJlbGF0aXZlOyAqL1xuICAvKiB6LWluZGV4OiA5OTsgKi9cbiAgLyogei1pbmRleDogJHsoZSkgPT4gZS5pY29uUmlnaHQgPT09IFwiQ2hldnJvbkRvd25cIiA/IDIgOiAxfTsgKi9cbiAgKyAqIHtcbiAgICAuaWNvbi1zeXN0ZW0ge1xuICAgICAgcG9pbnRlci1ldmVudHM6IG5vbmU7XG4gICAgfVxuICB9XG5gO1xuJC5kaXZgXG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgdG9wOiAkeyhlKSA9PiBlLmlzTGFiZWwgPyBcIjI4cHhcIiA6IGUuY2hlY2tSZXF1aXJlZCA/IFwiNXB4XCIgOiBcIjI4cHhcIn07XG4gIHJpZ2h0OiAzNXB4O1xuICBjdXJzb3I6IHBvaW50ZXI7XG4gIGJhY2tncm91bmQ6ICNmZmZmZmY7XG4gIHotaW5kZXg6IDI7XG5gO1xuY29uc3QgS0IgPSAkLmRpdihcbiAgKHsgdGhlbWU6IGUsIGlzRGlzYWJsZWQ6IHQgfSkgPT4gbzFgXG4gICAgcG9zaXRpb246IHJlbGF0aXZlO1xuICAgIC5hbGlnbi1jZW50ZXIsXG4gICAgLmFsaWduLWxlZnQsXG4gICAgLmFsaWduLXJpZ2h0IHtcbiAgICAgIHRvcDogMTAwJTtcbiAgICAgIGhlaWdodDogZml0LWNvbnRlbnQ7XG4gICAgfVxuICAgIC5yZWFjdC1kYXRlcGlja2VyX19kYXktbmFtZSB7XG4gICAgICB3aWR0aDogMzJweCAhaW1wb3J0YW50O1xuICAgICAgaGVpZ2h0OiAzMnB4ICFpbXBvcnRhbnQ7XG4gICAgICAvKiBwYWRkaW5nOiAxMHB4OyAqL1xuICAgIH1cbiAgICAucmVhY3QtZGF0ZXBpY2tlcl9fZGF5LW5hbWUge1xuICAgICAgd2lkdGg6IDMycHggIWltcG9ydGFudDtcbiAgICAgIGhlaWdodDogMzJweCAhaW1wb3J0YW50O1xuICAgICAgLyogcGFkZGluZzogMTBweDsgKi9cbiAgICB9XG4gICAgLnJlYWN0LWRhdGVwaWNrZXJfX2RheSB7XG4gICAgICB3aWR0aDogMzJweCAhaW1wb3J0YW50O1xuICAgICAgaGVpZ2h0OiAzMnB4ICFpbXBvcnRhbnQ7XG4gICAgICBmb250LXNpemU6ICR7ZS50eXBvZ3JhcGh5LnQxMn0gIWltcG9ydGFudDtcbiAgICAgIGxpbmUtaGVpZ2h0OiAke2UubGluZUhlaWdodC5saDIwfTtcbiAgICB9XG4gICAgLnJlYWN0LWRhdGVwaWNrZXItcG9wcGVyIHtcbiAgICAgIHdpZHRoOiBtaW4tY29udGVudDtcbiAgICB9XG4gICAgLnJlYWN0LWRhdGVwaWNrZXIge1xuICAgICAgZm9udC1mYW1pbHk6ICR7ZS5mb250RmFtaWx5LmJhc2V9O1xuICAgICAgZm9udC1zaXplOiAke2UudHlwb2dyYXBoeS50MTJ9O1xuICAgICAgYmFja2dyb3VuZC1jb2xvcjogJHtlLmNvbG9ycy5iYWNrZ3JvdW5kcy5iZ1ByaW1hcnl9O1xuICAgICAgY29sb3I6ICR7ZS5jb2xvcnMuYmx1ZX07XG4gICAgICBib3JkZXI6IG5vbmU7XG4gICAgICBib3JkZXItcmFkaXVzOiAke2UuYm9yZGVyUmFkaXVzLmJhc2V9O1xuICAgICAgYm94LXNoYWRvdzogJHtlLnNoYWRvd3Muc219O1xuICAgICAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuICAgICAgcG9zaXRpb246IHJlbGF0aXZlO1xuXG4gICAgICAucmVhY3QtZGF0ZXBpY2tlcl9fYXJpYS1saXZlIHtcbiAgICAgICAgZGlzcGxheTogbm9uZTtcbiAgICAgIH1cbiAgICAgICZfX2hlYWRlciB7XG4gICAgICAgIHRleHQtYWxpZ246IGNlbnRlcjtcbiAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogJHtlLmNvbG9ycy5iYWNrZ3JvdW5kcy5iZ1ByaW1hcnl9O1xuICAgICAgICBib3JkZXItYm90dG9tOiBub25lO1xuICAgICAgICBib3JkZXItdG9wLWxlZnQtcmFkaXVzOiAke2UuYm9yZGVyUmFkaXVzLmJhc2V9O1xuICAgICAgICAvKiBwYWRkaW5nOiAwOyAqL1xuICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gICAgICAgIHBhZGRpbmc6ICR7ZS5zcGFjaW5ncy5zcDE2fSAke2Uuc3BhY2luZ3Muc3AxNn0gMDtcblxuICAgICAgICAmOm5vdCgucmVhY3QtZGF0ZXBpY2tlcl9faGVhZGVyLS1oYXMtdGltZS1zZWxlY3QpIHtcbiAgICAgICAgICBib3JkZXItdG9wLXJpZ2h0LXJhZGl1czogJHtlLmJvcmRlclJhZGl1cy5iYXNlfTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICAmX19kYXksXG4gICAgICAmX19kYXktbmFtZSB7XG4gICAgICAgIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgICAgICAgbWFyZ2luOiAycHg7XG4gICAgICB9XG5cbiAgICAgICZfX2RheSB7XG4gICAgICAgIG91dGxpbmU6IG5vbmU7XG4gICAgICAgIGRpc3BsYXk6IGlubGluZS1mbGV4O1xuICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyO1xuICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcbiAgICAgICAgd2lkdGg6ICR7ZS5pdGVtU2l6ZS5sZ307XG4gICAgICAgIGhlaWdodDogJHtlLml0ZW1TaXplLmxnfTtcbiAgICAgICAgZm9udC1zaXplOiAke2UudHlwb2dyYXBoeS50MTZ9O1xuICAgICAgICBmb250LXdlaWdodDogJHtlLmZvbnRXZWlnaHQucmVndWxhcn07XG4gICAgICAgIGNvbG9yOiAke2UuY29sb3JzLnRleHRJY29uLnRleHRTZWNvbmRhcnl9O1xuICAgICAgICBib3JkZXItcmFkaXVzOiAke2UuYm9yZGVyUmFkaXVzLmJhc2V9O1xuICAgICAgICB0cmFuc2l0aW9uOiAke2UudHJhbnNpdGlvbnMuYmFzZX07XG5cbiAgICAgICAgJi0ta2V5Ym9hcmQtc2VsZWN0ZWQsXG4gICAgICAgICYtLXNlbGVjdGVkIHtcbiAgICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAke2UuY29sb3JzLmJhY2tncm91bmRzLmJnVGVydGlhcnl9ICFpbXBvcnRhbnQ7XG4gICAgICAgICAgY29sb3I6ICR7ZS5jb2xvcnMudGV4dEljb24udGV4dFRlcnRpYXJ5fSAhaW1wb3J0YW50O1xuICAgICAgICB9XG5cbiAgICAgICAgJjpob3ZlciB7XG4gICAgICAgICAgdHJhbnNpdGlvbjogJHtlLnRyYW5zaXRpb25zLmJhc2V9O1xuICAgICAgICAgIGJhY2tncm91bmQtY29sb3I6ICR7ZS5jb2xvcnMuYmFja2dyb3VuZHMuYmdIb3ZlclByaW1hcnl9O1xuICAgICAgICAgIGNvbG9yOiAke2UuY29sb3JzLnRleHRJY29uLnRleHRTZWNvbmRhcnl9O1xuICAgICAgICB9XG5cbiAgICAgICAgJi1uYW1lIHtcbiAgICAgICAgICBkaXNwbGF5OiBpbmxpbmUtZmxleDtcbiAgICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyO1xuICAgICAgICAgIGp1c3RpZnktY29udGVudDogY2VudGVyO1xuICAgICAgICAgIHdpZHRoOiAke2UuaXRlbVNpemUubGd9O1xuICAgICAgICAgIGhlaWdodDogJHtlLml0ZW1TaXplLmxnfTtcbiAgICAgICAgICBjb2xvcjogJHtlLmNvbG9ycy50ZXh0SWNvbi50ZXh0TG93ZW1waGFzaXN9O1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgICZfX3RyaWFuZ2xlIHtcbiAgICAgICAgZGlzcGxheTogbm9uZTtcbiAgICAgIH1cbiAgICB9XG4gICAgLnJlYWN0LWRhdGVwaWNrZXJfX2RheS0taW4tcmFuZ2Uge1xuICAgICAgOmhvdmVyIHtcbiAgICAgICAgYmFja2dyb3VuZDogbm9uZTtcbiAgICAgIH1cbiAgICB9XG4gICAgLnJlYWN0LWRhdGVwaWNrZXJfX2RheS0tc2VsZWN0ZWQsXG4gICAgLnJlYWN0LWRhdGVwaWNrZXJfX2RheS0taW4tc2VsZWN0aW5nLXJhbmdlLFxuICAgIC5yZWFjdC1kYXRlcGlja2VyX19kYXktLWluLXJhbmdlLFxuICAgIC5yZWFjdC1kYXRlcGlja2VyX19tb250aC10ZXh0LS1zZWxlY3RlZCxcbiAgICAucmVhY3QtZGF0ZXBpY2tlcl9fbW9udGgtdGV4dC0taW4tc2VsZWN0aW5nLXJhbmdlLFxuICAgIC5yZWFjdC1kYXRlcGlja2VyX19tb250aC10ZXh0LS1pbi1yYW5nZSxcbiAgICAucmVhY3QtZGF0ZXBpY2tlcl9fcXVhcnRlci10ZXh0LS1zZWxlY3RlZCxcbiAgICAucmVhY3QtZGF0ZXBpY2tlcl9fcXVhcnRlci10ZXh0LS1pbi1zZWxlY3RpbmctcmFuZ2UsXG4gICAgLnJlYWN0LWRhdGVwaWNrZXJfX3F1YXJ0ZXItdGV4dC0taW4tcmFuZ2UsXG4gICAgLnJlYWN0LWRhdGVwaWNrZXJfX3llYXItdGV4dC0tc2VsZWN0ZWQsXG4gICAgLnJlYWN0LWRhdGVwaWNrZXJfX3llYXItdGV4dC0taW4tc2VsZWN0aW5nLXJhbmdlLFxuICAgIC5yZWFjdC1kYXRlcGlja2VyX195ZWFyLXRleHQtLWluLXJhbmdlLFxuICAgIC5yZWFjdC1kYXRlcGlja2VyX19kYXktLWtleWJvYXJkLXNlbGVjdGVkLFxuICAgIC5yZWFjdC1kYXRlcGlja2VyX19tb250aC10ZXh0LS1rZXlib2FyZC1zZWxlY3RlZCxcbiAgICAucmVhY3QtZGF0ZXBpY2tlcl9fcXVhcnRlci10ZXh0LS1rZXlib2FyZC1zZWxlY3RlZCxcbiAgICAucmVhY3QtZGF0ZXBpY2tlcl9feWVhci10ZXh0LS1rZXlib2FyZC1zZWxlY3RlZCB7XG4gICAgICBib3JkZXItcmFkaXVzOiAke2UuYm9yZGVyUmFkaXVzLmJhc2V9O1xuICAgICAgYmFja2dyb3VuZC1jb2xvcjogJHtlLmNvbG9ycy5iYWNrZ3JvdW5kcy5iZ0hvdmVyUHJpbWFyeX07XG4gICAgICBjb2xvcjogJHtlLmNvbG9ycy50ZXh0SWNvbi50ZXh0U2Vjb25kYXJ5fTtcblxuICAgICAgLyogJjpob3ZlciB7XG4gICAgICAgIGJhY2tncm91bmQtY29sb3I6ICR7ZS5jb2xvcnMuYmx1ZX07XG4gICAgICB9ICovXG4gICAgfVxuXG4gICAgLnJlYWN0LWRhdGVwaWNrZXItcG9wcGVyW2RhdGEtcGxhY2VtZW50Xj0nYm90dG9tJ11cbiAgICAgIC5yZWFjdC1kYXRlcGlja2VyX190cmlhbmdsZSxcbiAgICAucmVhY3QtZGF0ZXBpY2tlci1wb3BwZXJbZGF0YS1wbGFjZW1lbnRePSd0b3AnXSAucmVhY3QtZGF0ZXBpY2tlcl9fdHJpYW5nbGUsXG4gICAgLnJlYWN0LWRhdGVwaWNrZXJfX3llYXItcmVhZC12aWV3LS1kb3duLWFycm93LFxuICAgIC5yZWFjdC1kYXRlcGlja2VyX19tb250aC1yZWFkLXZpZXctLWRvd24tYXJyb3csXG4gICAgLnJlYWN0LWRhdGVwaWNrZXJfX21vbnRoLXllYXItcmVhZC12aWV3LS1kb3duLWFycm93IHtcbiAgICAgIG1hcmdpbi1sZWZ0OiAtOHB4O1xuICAgICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgIH1cblxuICAgIC5yZWFjdC1kYXRlcGlja2VyLXBvcHBlcltkYXRhLXBsYWNlbWVudF49J2JvdHRvbSddXG4gICAgICAucmVhY3QtZGF0ZXBpY2tlcl9fdHJpYW5nbGUsXG4gICAgLnJlYWN0LWRhdGVwaWNrZXItcG9wcGVyW2RhdGEtcGxhY2VtZW50Xj0ndG9wJ10gLnJlYWN0LWRhdGVwaWNrZXJfX3RyaWFuZ2xlLFxuICAgIC5yZWFjdC1kYXRlcGlja2VyX195ZWFyLXJlYWQtdmlldy0tZG93bi1hcnJvdyxcbiAgICAucmVhY3QtZGF0ZXBpY2tlcl9fbW9udGgtcmVhZC12aWV3LS1kb3duLWFycm93LFxuICAgIC5yZWFjdC1kYXRlcGlja2VyX19tb250aC15ZWFyLXJlYWQtdmlldy0tZG93bi1hcnJvdyxcbiAgICAucmVhY3QtZGF0ZXBpY2tlci1wb3BwZXJbZGF0YS1wbGFjZW1lbnRePSdib3R0b20nXVxuICAgICAgLnJlYWN0LWRhdGVwaWNrZXJfX3RyaWFuZ2xlOjpiZWZvcmUsXG4gICAgLnJlYWN0LWRhdGVwaWNrZXItcG9wcGVyW2RhdGEtcGxhY2VtZW50Xj0ndG9wJ11cbiAgICAgIC5yZWFjdC1kYXRlcGlja2VyX190cmlhbmdsZTo6YmVmb3JlLFxuICAgIC5yZWFjdC1kYXRlcGlja2VyX195ZWFyLXJlYWQtdmlldy0tZG93bi1hcnJvdzo6YmVmb3JlLFxuICAgIC5yZWFjdC1kYXRlcGlja2VyX19tb250aC1yZWFkLXZpZXctLWRvd24tYXJyb3c6OmJlZm9yZSxcbiAgICAucmVhY3QtZGF0ZXBpY2tlcl9fbW9udGgteWVhci1yZWFkLXZpZXctLWRvd24tYXJyb3c6OmJlZm9yZSB7XG4gICAgICBib3gtc2l6aW5nOiBjb250ZW50LWJveDtcbiAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICAgIGJvcmRlcjogOHB4IHNvbGlkIHRyYW5zcGFyZW50O1xuICAgICAgaGVpZ2h0OiAwO1xuICAgICAgd2lkdGg6IDFweDtcbiAgICB9XG5cbiAgICAucmVhY3QtZGF0ZXBpY2tlci1wb3BwZXJbZGF0YS1wbGFjZW1lbnRePSdib3R0b20nXVxuICAgICAgLnJlYWN0LWRhdGVwaWNrZXJfX3RyaWFuZ2xlOjpiZWZvcmUsXG4gICAgLnJlYWN0LWRhdGVwaWNrZXItcG9wcGVyW2RhdGEtcGxhY2VtZW50Xj0ndG9wJ11cbiAgICAgIC5yZWFjdC1kYXRlcGlja2VyX190cmlhbmdsZTo6YmVmb3JlLFxuICAgIC5yZWFjdC1kYXRlcGlja2VyX195ZWFyLXJlYWQtdmlldy0tZG93bi1hcnJvdzo6YmVmb3JlLFxuICAgIC5yZWFjdC1kYXRlcGlja2VyX19tb250aC1yZWFkLXZpZXctLWRvd24tYXJyb3c6OmJlZm9yZSxcbiAgICAucmVhY3QtZGF0ZXBpY2tlcl9fbW9udGgteWVhci1yZWFkLXZpZXctLWRvd24tYXJyb3c6OmJlZm9yZSB7XG4gICAgICBjb250ZW50OiAnJztcbiAgICAgIHotaW5kZXg6IC0xO1xuICAgICAgYm9yZGVyLXdpZHRoOiA4cHg7XG4gICAgICBsZWZ0OiAtOHB4O1xuICAgICAgYm9yZGVyLWJvdHRvbS1jb2xvcjogJHtlLmNvbG9ycy5ibGFja307XG4gICAgfVxuXG4gICAgLnJlYWN0LWRhdGVwaWNrZXItcG9wcGVyW2RhdGEtcGxhY2VtZW50Xj0nYm90dG9tJ11cbiAgICAgIC5yZWFjdC1kYXRlcGlja2VyX190cmlhbmdsZSB7XG4gICAgICB0b3A6IDA7XG4gICAgICBtYXJnaW4tdG9wOiAtOHB4O1xuICAgIH1cblxuICAgIC5yZWFjdC1kYXRlcGlja2VyLXBvcHBlcltkYXRhLXBsYWNlbWVudF49J2JvdHRvbSddXG4gICAgICAucmVhY3QtZGF0ZXBpY2tlcl9fdHJpYW5nbGUsXG4gICAgLnJlYWN0LWRhdGVwaWNrZXItcG9wcGVyW2RhdGEtcGxhY2VtZW50Xj0nYm90dG9tJ11cbiAgICAgIC5yZWFjdC1kYXRlcGlja2VyX190cmlhbmdsZTo6YmVmb3JlIHtcbiAgICAgIGJvcmRlci10b3A6IG5vbmU7XG4gICAgICBib3JkZXItYm90dG9tLWNvbG9yOiAke2UuY29sb3JzLndoaXRlfTtcbiAgICB9XG5cbiAgICAucmVhY3QtZGF0ZXBpY2tlci1wb3BwZXJbZGF0YS1wbGFjZW1lbnRePSdib3R0b20nXVxuICAgICAgLnJlYWN0LWRhdGVwaWNrZXJfX3RyaWFuZ2xlOjpiZWZvcmUge1xuICAgICAgdG9wOiAtMXB4O1xuICAgICAgYm9yZGVyLWJvdHRvbS1jb2xvcjogJHtlLmNvbG9ycy53aGl0ZX07XG4gICAgfVxuXG4gICAgLnJlYWN0LWRhdGVwaWNrZXItcG9wcGVyW2RhdGEtcGxhY2VtZW50Xj0ndG9wJ10gLnJlYWN0LWRhdGVwaWNrZXJfX3RyaWFuZ2xlLFxuICAgIC5yZWFjdC1kYXRlcGlja2VyX195ZWFyLXJlYWQtdmlldy0tZG93bi1hcnJvdyxcbiAgICAucmVhY3QtZGF0ZXBpY2tlcl9fbW9udGgtcmVhZC12aWV3LS1kb3duLWFycm93LFxuICAgIC5yZWFjdC1kYXRlcGlja2VyX19tb250aC15ZWFyLXJlYWQtdmlldy0tZG93bi1hcnJvdyB7XG4gICAgICBib3R0b206IDA7XG4gICAgICBtYXJnaW4tYm90dG9tOiAtOHB4O1xuICAgIH1cblxuICAgIC5yZWFjdC1kYXRlcGlja2VyLXBvcHBlcltkYXRhLXBsYWNlbWVudF49J3RvcCddIC5yZWFjdC1kYXRlcGlja2VyX190cmlhbmdsZSxcbiAgICAucmVhY3QtZGF0ZXBpY2tlcl9feWVhci1yZWFkLXZpZXctLWRvd24tYXJyb3csXG4gICAgLnJlYWN0LWRhdGVwaWNrZXJfX21vbnRoLXJlYWQtdmlldy0tZG93bi1hcnJvdyxcbiAgICAucmVhY3QtZGF0ZXBpY2tlcl9fbW9udGgteWVhci1yZWFkLXZpZXctLWRvd24tYXJyb3csXG4gICAgLnJlYWN0LWRhdGVwaWNrZXItcG9wcGVyW2RhdGEtcGxhY2VtZW50Xj0ndG9wJ11cbiAgICAgIC5yZWFjdC1kYXRlcGlja2VyX190cmlhbmdsZTo6YmVmb3JlLFxuICAgIC5yZWFjdC1kYXRlcGlja2VyX195ZWFyLXJlYWQtdmlldy0tZG93bi1hcnJvdzo6YmVmb3JlLFxuICAgIC5yZWFjdC1kYXRlcGlja2VyX19tb250aC1yZWFkLXZpZXctLWRvd24tYXJyb3c6OmJlZm9yZSxcbiAgICAucmVhY3QtZGF0ZXBpY2tlcl9fbW9udGgteWVhci1yZWFkLXZpZXctLWRvd24tYXJyb3c6OmJlZm9yZSB7XG4gICAgICBib3JkZXItYm90dG9tOiBub25lO1xuICAgICAgYm9yZGVyLXRvcC1jb2xvcjogJHtlLmNvbG9ycy53aGl0ZX07XG4gICAgfVxuXG4gICAgLnJlYWN0LWRhdGVwaWNrZXItcG9wcGVyW2RhdGEtcGxhY2VtZW50Xj0ndG9wJ11cbiAgICAgIC5yZWFjdC1kYXRlcGlja2VyX190cmlhbmdsZTo6YmVmb3JlLFxuICAgIC5yZWFjdC1kYXRlcGlja2VyX195ZWFyLXJlYWQtdmlldy0tZG93bi1hcnJvdzo6YmVmb3JlLFxuICAgIC5yZWFjdC1kYXRlcGlja2VyX19tb250aC1yZWFkLXZpZXctLWRvd24tYXJyb3c6OmJlZm9yZSxcbiAgICAucmVhY3QtZGF0ZXBpY2tlcl9fbW9udGgteWVhci1yZWFkLXZpZXctLWRvd24tYXJyb3c6OmJlZm9yZSB7XG4gICAgICBib3R0b206IC0xcHg7XG4gICAgICBib3JkZXItdG9wLWNvbG9yOiAke2UuY29sb3JzLndoaXRlfTtcbiAgICB9XG5cbiAgICAucmVhY3QtZGF0ZXBpY2tlci13cmFwcGVyIHtcbiAgICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgICBwYWRkaW5nOiAwO1xuICAgICAgYm9yZGVyOiAwO1xuICAgIH1cblxuICAgIC5yZWFjdC1kYXRlcGlja2VyLS10aW1lLW9ubHkgLnJlYWN0LWRhdGVwaWNrZXJfX3RyaWFuZ2xlIHtcbiAgICAgIGxlZnQ6IDM1cHg7XG4gICAgfVxuXG4gICAgLnJlYWN0LWRhdGVwaWNrZXItLXRpbWUtb25seSAucmVhY3QtZGF0ZXBpY2tlcl9fdGltZS1jb250YWluZXIge1xuICAgICAgYm9yZGVyLWxlZnQ6IDA7XG4gICAgfVxuXG4gICAgLnJlYWN0LWRhdGVwaWNrZXJfX3llYXItb3B0aW9uOmZpcnN0LW9mLXR5cGUsXG4gICAgLnJlYWN0LWRhdGVwaWNrZXJfX21vbnRoLW9wdGlvbjpmaXJzdC1vZi10eXBlLFxuICAgIC5yZWFjdC1kYXRlcGlja2VyX19tb250aC15ZWFyLW9wdGlvbjpmaXJzdC1vZi10eXBlIHtcbiAgICAgIGJvcmRlci10b3AtbGVmdC1yYWRpdXM6ICR7ZS5ib3JkZXJSYWRpdXMuYmFzZX07XG4gICAgICBib3JkZXItdG9wLXJpZ2h0LXJhZGl1czogJHtlLmJvcmRlclJhZGl1cy5iYXNlfTtcbiAgICB9XG5cbiAgICAucmVhY3QtZGF0ZXBpY2tlci0tdGltZS1vbmx5IC5yZWFjdC1kYXRlcGlja2VyX190aW1lLFxuICAgIC5yZWFjdC1kYXRlcGlja2VyLS10aW1lLW9ubHkgLnJlYWN0LWRhdGVwaWNrZXJfX3RpbWUtYm94IHtcbiAgICAgIGJvcmRlci1ib3R0b20tbGVmdC1yYWRpdXM6ICR7ZS5ib3JkZXJSYWRpdXMuYmFzZX07XG4gICAgICBib3JkZXItYm90dG9tLXJpZ2h0LXJhZGl1czogJHtlLmJvcmRlclJhZGl1cy5iYXNlfTtcbiAgICB9XG5cbiAgICAucmVhY3QtZGF0ZXBpY2tlcl9fZGF5LS10b2RheSxcbiAgICAucmVhY3QtZGF0ZXBpY2tlcl9fbW9udGgtdGV4dC0tdG9kYXksXG4gICAgLnJlYWN0LWRhdGVwaWNrZXJfX3F1YXJ0ZXItdGV4dC0tdG9kYXksXG4gICAgLnJlYWN0LWRhdGVwaWNrZXJfX3llYXItdGV4dC0tdG9kYXkge1xuICAgICAgZm9udC13ZWlnaHQ6ICR7ZS5mb250V2VpZ2h0LnJlZ3VsYXJ9O1xuICAgIH1cblxuICAgIC5yZWFjdC1kYXRlcGlja2VyLS10aW1lLW9ubHkgLnJlYWN0LWRhdGVwaWNrZXJfX3RyaWFuZ2xlIHtcbiAgICAgIGxlZnQ6IDM1cHg7XG4gICAgfVxuXG4gICAgLnJlYWN0LWRhdGVwaWNrZXItLXRpbWUtb25seSAucmVhY3QtZGF0ZXBpY2tlcl9fdGltZS1jb250YWluZXIge1xuICAgICAgYm9yZGVyLWxlZnQ6IDA7XG4gICAgfVxuXG4gICAgLnJlYWN0LWRhdGVwaWNrZXJfX3RyaWFuZ2xlIHtcbiAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICAgIGxlZnQ6IDUwcHg7XG4gICAgfVxuXG4gICAgLnJlYWN0LWRhdGVwaWNrZXItcG9wcGVyIHtcbiAgICAgIHotaW5kZXg6IDEwO1xuICAgIH1cblxuICAgIC8qIC5yZWFjdC1kYXRlcGlja2VyLXBvcHBlcltkYXRhLXBsYWNlbWVudF49J2JvdHRvbSddIHtcbiAgICAgIG1hcmdpbi10b3A6IDEwcHg7XG4gICAgfSAqL1xuXG4gICAgLnJlYWN0LWRhdGVwaWNrZXItcG9wcGVyW2RhdGEtcGxhY2VtZW50PSdib3R0b20tZW5kJ11cbiAgICAgIC5yZWFjdC1kYXRlcGlja2VyX190cmlhbmdsZSxcbiAgICAucmVhY3QtZGF0ZXBpY2tlci1wb3BwZXJbZGF0YS1wbGFjZW1lbnQ9J3RvcC1lbmQnXVxuICAgICAgLnJlYWN0LWRhdGVwaWNrZXJfX3RyaWFuZ2xlIHtcbiAgICAgIGxlZnQ6IGF1dG87XG4gICAgICByaWdodDogNTBweDtcbiAgICB9XG5cbiAgICAucmVhY3QtZGF0ZXBpY2tlci1wb3BwZXJbZGF0YS1wbGFjZW1lbnRePSd0b3AnXSB7XG4gICAgICBtYXJnaW4tYm90dG9tOiAxMHB4O1xuICAgIH1cblxuICAgIC5yZWFjdC1kYXRlcGlja2VyLXBvcHBlcltkYXRhLXBsYWNlbWVudF49J3JpZ2h0J10ge1xuICAgICAgbWFyZ2luLWxlZnQ6IDhweDtcbiAgICB9XG5cbiAgICAucmVhY3QtZGF0ZXBpY2tlci1wb3BwZXJbZGF0YS1wbGFjZW1lbnRePSdyaWdodCddXG4gICAgICAucmVhY3QtZGF0ZXBpY2tlcl9fdHJpYW5nbGUge1xuICAgICAgbGVmdDogYXV0bztcbiAgICAgIHJpZ2h0OiA0MnB4O1xuICAgIH1cblxuICAgIC5yZWFjdC1kYXRlcGlja2VyLXBvcHBlcltkYXRhLXBsYWNlbWVudF49J2xlZnQnXSB7XG4gICAgICBtYXJnaW4tcmlnaHQ6IDhweDtcbiAgICB9XG5cbiAgICAucmVhY3QtZGF0ZXBpY2tlci1wb3BwZXJbZGF0YS1wbGFjZW1lbnRePSdsZWZ0J11cbiAgICAgIC5yZWFjdC1kYXRlcGlja2VyX190cmlhbmdsZSB7XG4gICAgICBsZWZ0OiA0MnB4O1xuICAgICAgcmlnaHQ6IGF1dG87XG4gICAgfVxuXG4gICAgLnJlYWN0LWRhdGVwaWNrZXJfX2hlYWRlci0tdGltZSB7XG4gICAgICBwYWRkaW5nLWJvdHRvbTogOHB4O1xuICAgICAgcGFkZGluZy1sZWZ0OiA1cHg7XG4gICAgICBwYWRkaW5nLXJpZ2h0OiA1cHg7XG4gICAgfVxuXG4gICAgLnJlYWN0LWRhdGVwaWNrZXJfX2hlYWRlci0tdGltZTpub3QoLnJlYWN0LWRhdGVwaWNrZXJfX2hlYWRlci0tdGltZS0tb25seSkge1xuICAgICAgYm9yZGVyLXRvcC1sZWZ0LXJhZGl1czogMDtcbiAgICB9XG5cbiAgICAucmVhY3QtZGF0ZXBpY2tlcl9feWVhci1kcm9wZG93bi1jb250YWluZXItLXNlbGVjdCxcbiAgICAucmVhY3QtZGF0ZXBpY2tlcl9fbW9udGgtZHJvcGRvd24tY29udGFpbmVyLS1zZWxlY3QsXG4gICAgLnJlYWN0LWRhdGVwaWNrZXJfX21vbnRoLXllYXItZHJvcGRvd24tY29udGFpbmVyLS1zZWxlY3QsXG4gICAgLnJlYWN0LWRhdGVwaWNrZXJfX3llYXItZHJvcGRvd24tY29udGFpbmVyLS1zY3JvbGwsXG4gICAgLnJlYWN0LWRhdGVwaWNrZXJfX21vbnRoLWRyb3Bkb3duLWNvbnRhaW5lci0tc2Nyb2xsLFxuICAgIC5yZWFjdC1kYXRlcGlja2VyX19tb250aC15ZWFyLWRyb3Bkb3duLWNvbnRhaW5lci0tc2Nyb2xsIHtcbiAgICAgIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgICAgIG1hcmdpbjogMCAycHg7XG4gICAgfVxuXG4gICAgLnJlYWN0LWRhdGVwaWNrZXJfX2N1cnJlbnQtbW9udGgsXG4gICAgLnJlYWN0LWRhdGVwaWNrZXItdGltZV9faGVhZGVyLFxuICAgIC5yZWFjdC1kYXRlcGlja2VyLXllYXItaGVhZGVyIHtcbiAgICAgIG1hcmdpbi10b3A6IDA7XG4gICAgICBjb2xvcjogJHtlLmNvbG9ycy5ibGFja307XG4gICAgICBmb250LXdlaWdodDogJHtlLmZvbnRXZWlnaHQuYm9sZH07XG4gICAgICBmb250LXNpemU6ICR7ZS50eXBvZ3JhcGh5LnQxNn07XG4gICAgfVxuXG4gICAgLnJlYWN0LWRhdGVwaWNrZXItdGltZV9faGVhZGVyIHtcbiAgICAgIHRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzO1xuICAgICAgd2hpdGUtc3BhY2U6IG5vd3JhcDtcbiAgICAgIG92ZXJmbG93OiBoaWRkZW47XG4gICAgfVxuXG4gICAgLnJlYWN0LWRhdGVwaWNrZXJfX25hdmlnYXRpb24ge1xuICAgICAgYmFja2dyb3VuZDogbm9uZTtcbiAgICAgIGxpbmUtaGVpZ2h0OiAxLjdyZW07XG4gICAgICB0ZXh0LWFsaWduOiBjZW50ZXI7XG4gICAgICBjdXJzb3I6IHBvaW50ZXI7XG4gICAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgICB0b3A6IDEwcHg7XG4gICAgICBwYWRkaW5nOiAwO1xuICAgICAgYm9yZGVyOiAwLjQ1cmVtIHNvbGlkIHRyYW5zcGFyZW50O1xuICAgICAgei1pbmRleDogMTtcbiAgICAgIGhlaWdodDogMTBweDtcbiAgICAgIHdpZHRoOiAxMHB4O1xuICAgICAgdGV4dC1pbmRlbnQ6IC05OTllbTtcbiAgICAgIG92ZXJmbG93OiBoaWRkZW47XG4gICAgfVxuXG4gICAgLnJlYWN0LWRhdGVwaWNrZXJfX25hdmlnYXRpb24tLXByZXZpb3VzIHtcbiAgICAgIGxlZnQ6IDEwcHg7XG4gICAgICBib3JkZXItcmlnaHQtY29sb3I6ICR7ZS5jb2xvcnMuYmxhY2t9O1xuICAgIH1cblxuICAgIC5yZWFjdC1kYXRlcGlja2VyX19uYXZpZ2F0aW9uLS1wcmV2aW91czpob3ZlciB7XG4gICAgICBib3JkZXItcmlnaHQtY29sb3I6ICR7ZS5jb2xvcnMuYmxhY2t9O1xuICAgIH1cblxuICAgIC5yZWFjdC1kYXRlcGlja2VyX19uYXZpZ2F0aW9uLS1wcmV2aW91cy0tZGlzYWJsZWQsXG4gICAgLnJlYWN0LWRhdGVwaWNrZXJfX25hdmlnYXRpb24tLXByZXZpb3VzLS1kaXNhYmxlZDpob3ZlciB7XG4gICAgICBib3JkZXItcmlnaHQtY29sb3I6ICR7ZS5jb2xvcnMuZGFya0dyYXl9O1xuICAgICAgY3Vyc29yOiBkZWZhdWx0O1xuICAgIH1cblxuICAgIC5yZWFjdC1kYXRlcGlja2VyX19uYXZpZ2F0aW9uLS1uZXh0IHtcbiAgICAgIHJpZ2h0OiAxMHB4O1xuICAgICAgYm9yZGVyLWxlZnQtY29sb3I6ICR7ZS5jb2xvcnMuYmxhY2t9O1xuICAgIH1cblxuICAgIC5yZWFjdC1kYXRlcGlja2VyX19uYXZpZ2F0aW9uLS1uZXh0LS13aXRoLXRpbWU6bm90KFxuICAgICAgICAucmVhY3QtZGF0ZXBpY2tlcl9fbmF2aWdhdGlvbi0tbmV4dC0td2l0aC10b2RheS1idXR0b25cbiAgICAgICkge1xuICAgICAgcmlnaHQ6IDk1cHg7XG4gICAgfVxuXG4gICAgLnJlYWN0LWRhdGVwaWNrZXJfX25hdmlnYXRpb24tLW5leHQ6aG92ZXIge1xuICAgICAgYm9yZGVyLWxlZnQtY29sb3I6ICR7ZS5jb2xvcnMuYmxhY2t9O1xuICAgIH1cblxuICAgIC5yZWFjdC1kYXRlcGlja2VyX19uYXZpZ2F0aW9uLS1uZXh0LS1kaXNhYmxlZCxcbiAgICAucmVhY3QtZGF0ZXBpY2tlcl9fbmF2aWdhdGlvbi0tbmV4dC0tZGlzYWJsZWQ6aG92ZXIge1xuICAgICAgYm9yZGVyLWxlZnQtY29sb3I6ICR7ZS5jb2xvcnMuZGFya0dyYXl9O1xuICAgICAgY3Vyc29yOiBkZWZhdWx0O1xuICAgIH1cblxuICAgIC5yZWFjdC1kYXRlcGlja2VyX19uYXZpZ2F0aW9uLS15ZWFycyB7XG4gICAgICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gICAgICB0b3A6IDA7XG4gICAgICBkaXNwbGF5OiBibG9jaztcbiAgICAgIG1hcmdpbi1sZWZ0OiBhdXRvO1xuICAgICAgbWFyZ2luLXJpZ2h0OiBhdXRvO1xuICAgIH1cblxuICAgIC5yZWFjdC1kYXRlcGlja2VyX19uYXZpZ2F0aW9uLS15ZWFycy1wcmV2aW91cyB7XG4gICAgICB0b3A6IDRweDtcbiAgICAgIGJvcmRlci10b3AtY29sb3I6ICR7ZS5jb2xvcnMuYmxhY2t9O1xuICAgIH1cblxuICAgIC5yZWFjdC1kYXRlcGlja2VyX19uYXZpZ2F0aW9uLS15ZWFycy1wcmV2aW91czpob3ZlciB7XG4gICAgICBib3JkZXItdG9wLWNvbG9yOiAke2UuY29sb3JzLmJsYWNrfTtcbiAgICB9XG5cbiAgICAucmVhY3QtZGF0ZXBpY2tlcl9fbmF2aWdhdGlvbi0teWVhcnMtdXBjb21pbmcge1xuICAgICAgdG9wOiAtNHB4O1xuICAgICAgYm9yZGVyLWJvdHRvbS1jb2xvcjogJHtlLmNvbG9ycy5ibGFja307XG4gICAgfVxuXG4gICAgLnJlYWN0LWRhdGVwaWNrZXJfX25hdmlnYXRpb24tLXllYXJzLXVwY29taW5nOmhvdmVyIHtcbiAgICAgIGJvcmRlci1ib3R0b20tY29sb3I6ICR7ZS5jb2xvcnMuYmxhY2t9O1xuICAgIH1cblxuICAgIC5yZWFjdC1kYXRlcGlja2VyX19tb250aC1jb250YWluZXIge1xuICAgICAgZmxvYXQ6IGxlZnQ7XG4gICAgfVxuXG4gICAgLnJlYWN0LWRhdGVwaWNrZXJfX3llYXIge1xuICAgICAgbWFyZ2luOiAwLjRyZW07XG4gICAgICB0ZXh0LWFsaWduOiBjZW50ZXI7XG4gICAgfVxuXG4gICAgLnJlYWN0LWRhdGVwaWNrZXJfX3llYXItd3JhcHBlciB7XG4gICAgICBkaXNwbGF5OiBmbGV4O1xuICAgICAgZmxleC13cmFwOiB3cmFwO1xuICAgICAgbWF4LXdpZHRoOiAxODBweDtcbiAgICB9XG5cbiAgICAucmVhY3QtZGF0ZXBpY2tlcl9feWVhciAucmVhY3QtZGF0ZXBpY2tlcl9feWVhci10ZXh0IHtcbiAgICAgIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgICAgIHdpZHRoOiA0cmVtO1xuICAgICAgbWFyZ2luOiAycHg7XG4gICAgfVxuXG4gICAgLnJlYWN0LWRhdGVwaWNrZXJfX21vbnRoIHtcbiAgICAgIHBhZGRpbmctYm90dG9tOiAxcmVtO1xuICAgICAgdGV4dC1hbGlnbjogY2VudGVyO1xuICAgIH1cblxuICAgIC5yZWFjdC1kYXRlcGlja2VyX19tb250aCAucmVhY3QtZGF0ZXBpY2tlcl9fbW9udGgtdGV4dCxcbiAgICAucmVhY3QtZGF0ZXBpY2tlcl9fbW9udGggLnJlYWN0LWRhdGVwaWNrZXJfX3F1YXJ0ZXItdGV4dCB7XG4gICAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG4gICAgICB3aWR0aDogNHJlbTtcbiAgICAgIG1hcmdpbjogMnB4O1xuICAgIH1cblxuICAgIC5yZWFjdC1kYXRlcGlja2VyX19pbnB1dC10aW1lLWNvbnRhaW5lciB7XG4gICAgICBjbGVhcjogYm90aDtcbiAgICAgIHdpZHRoOiAxMDAlO1xuICAgICAgZmxvYXQ6IGxlZnQ7XG4gICAgICBtYXJnaW46IDVweCAwIDEwcHggMTVweDtcbiAgICAgIHRleHQtYWxpZ246IGxlZnQ7XG4gICAgfVxuXG4gICAgLnJlYWN0LWRhdGVwaWNrZXJfX2lucHV0LXRpbWUtY29udGFpbmVyIC5yZWFjdC1kYXRlcGlja2VyLXRpbWVfX2NhcHRpb24ge1xuICAgICAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuICAgIH1cblxuICAgIC5yZWFjdC1kYXRlcGlja2VyX19pbnB1dC10aW1lLWNvbnRhaW5lclxuICAgICAgLnJlYWN0LWRhdGVwaWNrZXItdGltZV9faW5wdXQtY29udGFpbmVyIHtcbiAgICAgIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgICB9XG5cbiAgICAucmVhY3QtZGF0ZXBpY2tlcl9faW5wdXQtdGltZS1jb250YWluZXJcbiAgICAgIC5yZWFjdC1kYXRlcGlja2VyLXRpbWVfX2lucHV0LWNvbnRhaW5lclxuICAgICAgLnJlYWN0LWRhdGVwaWNrZXItdGltZV9faW5wdXQge1xuICAgICAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuICAgICAgbWFyZ2luLWxlZnQ6IDEwcHg7XG4gICAgfVxuXG4gICAgLnJlYWN0LWRhdGVwaWNrZXJfX2lucHV0LXRpbWUtY29udGFpbmVyXG4gICAgICAucmVhY3QtZGF0ZXBpY2tlci10aW1lX19pbnB1dC1jb250YWluZXJcbiAgICAgIC5yZWFjdC1kYXRlcGlja2VyLXRpbWVfX2lucHV0XG4gICAgICBpbnB1dCB7XG4gICAgICB3aWR0aDogODVweDtcbiAgICB9XG5cbiAgICAucmVhY3QtZGF0ZXBpY2tlcl9faW5wdXQtdGltZS1jb250YWluZXJcbiAgICAgIC5yZWFjdC1kYXRlcGlja2VyLXRpbWVfX2lucHV0LWNvbnRhaW5lclxuICAgICAgLnJlYWN0LWRhdGVwaWNrZXItdGltZV9faW5wdXRcbiAgICAgIGlucHV0W3R5cGU9J3RpbWUnXTo6LXdlYmtpdC1pbm5lci1zcGluLWJ1dHRvbixcbiAgICAucmVhY3QtZGF0ZXBpY2tlcl9faW5wdXQtdGltZS1jb250YWluZXJcbiAgICAgIC5yZWFjdC1kYXRlcGlja2VyLXRpbWVfX2lucHV0LWNvbnRhaW5lclxuICAgICAgLnJlYWN0LWRhdGVwaWNrZXItdGltZV9faW5wdXRcbiAgICAgIGlucHV0W3R5cGU9J3RpbWUnXTo6LXdlYmtpdC1vdXRlci1zcGluLWJ1dHRvbiB7XG4gICAgICAtd2Via2l0LWFwcGVhcmFuY2U6IG5vbmU7XG4gICAgICBtYXJnaW46IDA7XG4gICAgfVxuXG4gICAgLnJlYWN0LWRhdGVwaWNrZXJfX2lucHV0LXRpbWUtY29udGFpbmVyXG4gICAgICAucmVhY3QtZGF0ZXBpY2tlci10aW1lX19pbnB1dC1jb250YWluZXJcbiAgICAgIC5yZWFjdC1kYXRlcGlja2VyLXRpbWVfX2lucHV0XG4gICAgICBpbnB1dFt0eXBlPSd0aW1lJ10ge1xuICAgICAgLW1vei1hcHBlYXJhbmNlOiB0ZXh0ZmllbGQ7XG4gICAgfVxuXG4gICAgLnJlYWN0LWRhdGVwaWNrZXJfX2lucHV0LXRpbWUtY29udGFpbmVyXG4gICAgICAucmVhY3QtZGF0ZXBpY2tlci10aW1lX19pbnB1dC1jb250YWluZXJcbiAgICAgIC5yZWFjdC1kYXRlcGlja2VyLXRpbWVfX2RlbGltaXRlciB7XG4gICAgICBtYXJnaW4tbGVmdDogNXB4O1xuICAgICAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuICAgIH1cblxuICAgIC5yZWFjdC1kYXRlcGlja2VyX190aW1lLWNvbnRhaW5lciB7XG4gICAgICBmbG9hdDogcmlnaHQ7XG4gICAgICBib3JkZXItbGVmdDogbm9uZTtcbiAgICAgIHdpZHRoOiA4NXB4O1xuICAgIH1cblxuICAgIC5yZWFjdC1kYXRlcGlja2VyX190aW1lLWNvbnRhaW5lci0td2l0aC10b2RheS1idXR0b24ge1xuICAgICAgZGlzcGxheTogaW5saW5lO1xuICAgICAgYm9yZGVyOiAxcHggc29saWQgJHtlLmNvbG9ycy5ibGFja307XG4gICAgICBib3JkZXItcmFkaXVzOiAwLjNyZW07XG4gICAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgICByaWdodDogLTcycHg7XG4gICAgICB0b3A6IDA7XG4gICAgfVxuXG4gICAgLnJlYWN0LWRhdGVwaWNrZXJfX3RpbWUtY29udGFpbmVyIC5yZWFjdC1kYXRlcGlja2VyX190aW1lIHtcbiAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgICAgIGJhY2tncm91bmQ6ICR7ZS5jb2xvcnMud2hpdGV9O1xuICAgICAgYm9yZGVyLWJvdHRvbS1yaWdodC1yYWRpdXM6ICR7ZS5ib3JkZXJSYWRpdXMuYmFzZX07XG4gICAgfVxuXG4gICAgLnJlYWN0LWRhdGVwaWNrZXJfX3RpbWUtY29udGFpbmVyXG4gICAgICAucmVhY3QtZGF0ZXBpY2tlcl9fdGltZVxuICAgICAgLnJlYWN0LWRhdGVwaWNrZXJfX3RpbWUtYm94IHtcbiAgICAgIHdpZHRoOiA4NXB4O1xuICAgICAgb3ZlcmZsb3cteDogaGlkZGVuO1xuICAgICAgbWFyZ2luOiAwIGF1dG87XG4gICAgICB0ZXh0LWFsaWduOiBjZW50ZXI7XG4gICAgICBib3JkZXItYm90dG9tLXJpZ2h0LXJhZGl1czogJHtlLmJvcmRlclJhZGl1cy5iYXNlfTtcbiAgICB9XG5cbiAgICAucmVhY3QtZGF0ZXBpY2tlcl9fdGltZS1jb250YWluZXJcbiAgICAgIC5yZWFjdC1kYXRlcGlja2VyX190aW1lXG4gICAgICAucmVhY3QtZGF0ZXBpY2tlcl9fdGltZS1ib3hcbiAgICAgIHVsLnJlYWN0LWRhdGVwaWNrZXJfX3RpbWUtbGlzdCB7XG4gICAgICBsaXN0LXN0eWxlOiBub25lO1xuICAgICAgbWFyZ2luOiAwO1xuICAgICAgaGVpZ2h0OiBjYWxjKDE5NXB4ICsgKDEuN3JlbSAvIDIpKTtcbiAgICAgIG92ZXJmbG93LXk6IHNjcm9sbDtcbiAgICAgIHBhZGRpbmctcmlnaHQ6IDA7XG4gICAgICBwYWRkaW5nLWxlZnQ6IDA7XG4gICAgICB3aWR0aDogMTAwJTtcbiAgICAgIGJveC1zaXppbmc6IGNvbnRlbnQtYm94O1xuICAgIH1cblxuICAgIC5yZWFjdC1kYXRlcGlja2VyX190aW1lLWNvbnRhaW5lclxuICAgICAgLnJlYWN0LWRhdGVwaWNrZXJfX3RpbWVcbiAgICAgIC5yZWFjdC1kYXRlcGlja2VyX190aW1lLWJveFxuICAgICAgdWwucmVhY3QtZGF0ZXBpY2tlcl9fdGltZS1saXN0XG4gICAgICBsaS5yZWFjdC1kYXRlcGlja2VyX190aW1lLWxpc3QtaXRlbSB7XG4gICAgICBoZWlnaHQ6IDMwcHg7XG4gICAgICBwYWRkaW5nOiA1cHggMTBweDtcbiAgICAgIHdoaXRlLXNwYWNlOiBub3dyYXA7XG4gICAgfVxuXG4gICAgLnJlYWN0LWRhdGVwaWNrZXJfX3RpbWUtY29udGFpbmVyXG4gICAgICAucmVhY3QtZGF0ZXBpY2tlcl9fdGltZVxuICAgICAgLnJlYWN0LWRhdGVwaWNrZXJfX3RpbWUtYm94XG4gICAgICB1bC5yZWFjdC1kYXRlcGlja2VyX190aW1lLWxpc3RcbiAgICAgIGxpLnJlYWN0LWRhdGVwaWNrZXJfX3RpbWUtbGlzdC1pdGVtOmhvdmVyIHtcbiAgICAgIGN1cnNvcjogcG9pbnRlcjtcbiAgICAgIGJhY2tncm91bmQtY29sb3I6ICR7ZS5jb2xvcnMud2hpdGV9O1xuICAgIH1cblxuICAgIC5yZWFjdC1kYXRlcGlja2VyX190aW1lLWNvbnRhaW5lclxuICAgICAgLnJlYWN0LWRhdGVwaWNrZXJfX3RpbWVcbiAgICAgIC5yZWFjdC1kYXRlcGlja2VyX190aW1lLWJveFxuICAgICAgdWwucmVhY3QtZGF0ZXBpY2tlcl9fdGltZS1saXN0XG4gICAgICBsaS5yZWFjdC1kYXRlcGlja2VyX190aW1lLWxpc3QtaXRlbS0tc2VsZWN0ZWQge1xuICAgICAgYmFja2dyb3VuZC1jb2xvcjogJHtlLmNvbG9ycy5ibHVlfTtcbiAgICAgIGNvbG9yOiAke2UuY29sb3JzLndoaXRlfTtcbiAgICAgIGZvbnQtd2VpZ2h0OiBib2xkO1xuICAgIH1cblxuICAgIC5yZWFjdC1kYXRlcGlja2VyX190aW1lLWNvbnRhaW5lclxuICAgICAgLnJlYWN0LWRhdGVwaWNrZXJfX3RpbWVcbiAgICAgIC5yZWFjdC1kYXRlcGlja2VyX190aW1lLWJveFxuICAgICAgdWwucmVhY3QtZGF0ZXBpY2tlcl9fdGltZS1saXN0XG4gICAgICBsaS5yZWFjdC1kYXRlcGlja2VyX190aW1lLWxpc3QtaXRlbS0tc2VsZWN0ZWQ6aG92ZXIge1xuICAgICAgYmFja2dyb3VuZC1jb2xvcjogJHtlLmNvbG9ycy5ibHVlfTtcbiAgICB9XG5cbiAgICAucmVhY3QtZGF0ZXBpY2tlcl9fdGltZS1jb250YWluZXJcbiAgICAgIC5yZWFjdC1kYXRlcGlja2VyX190aW1lXG4gICAgICAucmVhY3QtZGF0ZXBpY2tlcl9fdGltZS1ib3hcbiAgICAgIHVsLnJlYWN0LWRhdGVwaWNrZXJfX3RpbWUtbGlzdFxuICAgICAgbGkucmVhY3QtZGF0ZXBpY2tlcl9fdGltZS1saXN0LWl0ZW0tLWRpc2FibGVkIHtcbiAgICAgIGNvbG9yOiAke2UuY29sb3JzLmRhcmtHcmF5fTtcbiAgICB9XG5cbiAgICAucmVhY3QtZGF0ZXBpY2tlcl9fd2Vlay1udW1iZXIge1xuICAgICAgY29sb3I6ICR7ZS5jb2xvcnMuZGFya0dyYXl9O1xuICAgICAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuICAgICAgd2lkdGg6IDEuN3JlbTtcbiAgICAgIGxpbmUtaGVpZ2h0OiAxLjdyZW07XG4gICAgICB0ZXh0LWFsaWduOiBjZW50ZXI7XG4gICAgICBtYXJnaW46IDAuMTY2cmVtO1xuICAgIH1cblxuICAgIC5yZWFjdC1kYXRlcGlja2VyX193ZWVrLW51bWJlci5yZWFjdC1kYXRlcGlja2VyX193ZWVrLW51bWJlci0tY2xpY2thYmxlIHtcbiAgICAgIGN1cnNvcjogcG9pbnRlcjtcbiAgICB9XG5cbiAgICAucmVhY3QtZGF0ZXBpY2tlcl9fd2Vlay1udW1iZXIucmVhY3QtZGF0ZXBpY2tlcl9fd2Vlay1udW1iZXItLWNsaWNrYWJsZTpob3ZlciB7XG4gICAgICBib3JkZXItcmFkaXVzOiAke2UuYm9yZGVyUmFkaXVzLmJhc2V9O1xuICAgICAgYmFja2dyb3VuZC1jb2xvcjogJHtlLmNvbG9ycy53aGl0ZX07XG4gICAgfVxuXG4gICAgLnJlYWN0LWRhdGVwaWNrZXJfX2RheS1uYW1lcyxcbiAgICAucmVhY3QtZGF0ZXBpY2tlcl9fd2VlayB7XG4gICAgICB3aGl0ZS1zcGFjZTogbm93cmFwO1xuICAgICAgdXNlci1zZWxlY3Q6IG5vbmU7XG4gICAgfVxuXG4gICAgLnJlYWN0LWRhdGVwaWNrZXJfX3RpbWUtbmFtZSB7XG4gICAgICBjb2xvcjogJHtlLmNvbG9ycy5ibGFja307XG4gICAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG4gICAgICB3aWR0aDogMS43cmVtO1xuICAgICAgbGluZS1oZWlnaHQ6IDEuN3JlbTtcbiAgICAgIHRleHQtYWxpZ246IGNlbnRlcjtcbiAgICAgIG1hcmdpbjogMC4xNjZyZW07XG4gICAgfVxuXG4gICAgLnJlYWN0LWRhdGVwaWNrZXJfX21vbnRoLS1zZWxlY3RlZCxcbiAgICAucmVhY3QtZGF0ZXBpY2tlcl9fbW9udGgtLWluLXNlbGVjdGluZy1yYW5nZSxcbiAgICAucmVhY3QtZGF0ZXBpY2tlcl9fbW9udGgtLWluLXJhbmdlLFxuICAgIC5yZWFjdC1kYXRlcGlja2VyX19xdWFydGVyLS1zZWxlY3RlZCxcbiAgICAucmVhY3QtZGF0ZXBpY2tlcl9fcXVhcnRlci0taW4tc2VsZWN0aW5nLXJhbmdlLFxuICAgIC5yZWFjdC1kYXRlcGlja2VyX19xdWFydGVyLS1pbi1yYW5nZSB7XG4gICAgICBib3JkZXItcmFkaXVzOiAke2UuYm9yZGVyUmFkaXVzLmJhc2V9O1xuICAgICAgYmFja2dyb3VuZC1jb2xvcjogJHtlLmNvbG9ycy5ibHVlfTtcbiAgICAgIGNvbG9yOiAke2UuY29sb3JzLndoaXRlfTtcbiAgICB9XG5cbiAgICAucmVhY3QtZGF0ZXBpY2tlcl9fbW9udGgtLXNlbGVjdGVkOmhvdmVyLFxuICAgIC5yZWFjdC1kYXRlcGlja2VyX19tb250aC0taW4tc2VsZWN0aW5nLXJhbmdlOmhvdmVyLFxuICAgIC5yZWFjdC1kYXRlcGlja2VyX19tb250aC0taW4tcmFuZ2U6aG92ZXIsXG4gICAgLnJlYWN0LWRhdGVwaWNrZXJfX3F1YXJ0ZXItLXNlbGVjdGVkOmhvdmVyLFxuICAgIC5yZWFjdC1kYXRlcGlja2VyX19xdWFydGVyLS1pbi1zZWxlY3RpbmctcmFuZ2U6aG92ZXIsXG4gICAgLnJlYWN0LWRhdGVwaWNrZXJfX3F1YXJ0ZXItLWluLXJhbmdlOmhvdmVyIHtcbiAgICAgIGJhY2tncm91bmQtY29sb3I6ICR7ZS5jb2xvcnMuc2NhbXBpfTtcbiAgICB9XG5cbiAgICAucmVhY3QtZGF0ZXBpY2tlcl9fbW9udGgtLWRpc2FibGVkLFxuICAgIC5yZWFjdC1kYXRlcGlja2VyX19xdWFydGVyLS1kaXNhYmxlZCB7XG4gICAgICBjb2xvcjogJHtlLmNvbG9ycy5kYXJrR3JheX07XG4gICAgICBwb2ludGVyLWV2ZW50czogbm9uZTtcbiAgICB9XG5cbiAgICAucmVhY3QtZGF0ZXBpY2tlcl9fbW9udGgtLWRpc2FibGVkOmhvdmVyLFxuICAgIC5yZWFjdC1kYXRlcGlja2VyX19xdWFydGVyLS1kaXNhYmxlZDpob3ZlciB7XG4gICAgICBjdXJzb3I6IGRlZmF1bHQ7XG4gICAgICBiYWNrZ3JvdW5kLWNvbG9yOiB0cmFuc3BhcmVudDtcbiAgICB9XG5cbiAgICAucmVhY3QtZGF0ZXBpY2tlcl9fZGF5LFxuICAgIC5yZWFjdC1kYXRlcGlja2VyX19tb250aC10ZXh0LFxuICAgIC5yZWFjdC1kYXRlcGlja2VyX19xdWFydGVyLXRleHQsXG4gICAgLnJlYWN0LWRhdGVwaWNrZXJfX3llYXItdGV4dCB7XG4gICAgICBjdXJzb3I6IHBvaW50ZXI7XG4gICAgfVxuXG4gICAgLnJlYWN0LWRhdGVwaWNrZXJfX21vbnRoLXRleHQ6aG92ZXIsXG4gICAgLnJlYWN0LWRhdGVwaWNrZXJfX3F1YXJ0ZXItdGV4dDpob3ZlcixcbiAgICAucmVhY3QtZGF0ZXBpY2tlcl9feWVhci10ZXh0OmhvdmVyIHtcbiAgICAgIGJvcmRlci1yYWRpdXM6ICR7ZS5ib3JkZXJSYWRpdXMuYmFzZX07XG4gICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAke2UuY29sb3JzLndoaXRlfTtcbiAgICB9XG5cbiAgICAucmVhY3QtZGF0ZXBpY2tlcl9fZGF5LS1oaWdobGlnaHRlZCxcbiAgICAucmVhY3QtZGF0ZXBpY2tlcl9fbW9udGgtdGV4dC0taGlnaGxpZ2h0ZWQsXG4gICAgLnJlYWN0LWRhdGVwaWNrZXJfX3F1YXJ0ZXItdGV4dC0taGlnaGxpZ2h0ZWQsXG4gICAgLnJlYWN0LWRhdGVwaWNrZXJfX3llYXItdGV4dC0taGlnaGxpZ2h0ZWQge1xuICAgICAgYm9yZGVyLXJhZGl1czogJHtlLmJvcmRlclJhZGl1cy5iYXNlfTtcbiAgICAgIGJhY2tncm91bmQtY29sb3I6ICR7ZS5jb2xvcnMuc3VjY2Vzc307XG4gICAgICBjb2xvcjogJHtlLmNvbG9ycy53aGl0ZX07XG4gICAgfVxuXG4gICAgLnJlYWN0LWRhdGVwaWNrZXJfX2RheS0taGlnaGxpZ2h0ZWQ6aG92ZXIsXG4gICAgLnJlYWN0LWRhdGVwaWNrZXJfX21vbnRoLXRleHQtLWhpZ2hsaWdodGVkOmhvdmVyLFxuICAgIC5yZWFjdC1kYXRlcGlja2VyX19xdWFydGVyLXRleHQtLWhpZ2hsaWdodGVkOmhvdmVyLFxuICAgIC5yZWFjdC1kYXRlcGlja2VyX195ZWFyLXRleHQtLWhpZ2hsaWdodGVkOmhvdmVyIHtcbiAgICAgIGJhY2tncm91bmQtY29sb3I6ICR7ZS5jb2xvcnMuc3VjY2Vzc307XG4gICAgfVxuXG4gICAgLnJlYWN0LWRhdGVwaWNrZXJfX2RheS0taGlnaGxpZ2h0ZWQtY3VzdG9tLTEsXG4gICAgLnJlYWN0LWRhdGVwaWNrZXJfX21vbnRoLXRleHQtLWhpZ2hsaWdodGVkLWN1c3RvbS0xLFxuICAgIC5yZWFjdC1kYXRlcGlja2VyX19xdWFydGVyLXRleHQtLWhpZ2hsaWdodGVkLWN1c3RvbS0xLFxuICAgIC5yZWFjdC1kYXRlcGlja2VyX195ZWFyLXRleHQtLWhpZ2hsaWdodGVkLWN1c3RvbS0xIHtcbiAgICAgIGNvbG9yOiAke2UuY29sb3JzLnBpbmt9O1xuICAgIH1cblxuICAgIC5yZWFjdC1kYXRlcGlja2VyX19kYXktLWhpZ2hsaWdodGVkLWN1c3RvbS0yLFxuICAgIC5yZWFjdC1kYXRlcGlja2VyX19tb250aC10ZXh0LS1oaWdobGlnaHRlZC1jdXN0b20tMixcbiAgICAucmVhY3QtZGF0ZXBpY2tlcl9fcXVhcnRlci10ZXh0LS1oaWdobGlnaHRlZC1jdXN0b20tMixcbiAgICAucmVhY3QtZGF0ZXBpY2tlcl9feWVhci10ZXh0LS1oaWdobGlnaHRlZC1jdXN0b20tMiB7XG4gICAgICBjb2xvcjogJHtlLmNvbG9ycy5ncmVlbn07XG4gICAgfVxuXG4gICAgLnJlYWN0LWRhdGVwaWNrZXJfX2RheS0taW4tc2VsZWN0aW5nLXJhbmdlLFxuICAgIC5yZWFjdC1kYXRlcGlja2VyX19tb250aC10ZXh0LS1pbi1zZWxlY3RpbmctcmFuZ2UsXG4gICAgLnJlYWN0LWRhdGVwaWNrZXJfX3F1YXJ0ZXItdGV4dC0taW4tc2VsZWN0aW5nLXJhbmdlLFxuICAgIC5yZWFjdC1kYXRlcGlja2VyX195ZWFyLXRleHQtLWluLXNlbGVjdGluZy1yYW5nZSB7XG4gICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAke2ByZ2JhKCAke2UuY29sb3JzLmJsdWV9LCAwLjUpYH07XG4gICAgfVxuXG4gICAgLnJlYWN0LWRhdGVwaWNrZXJfX21vbnRoLS1zZWxlY3RpbmctcmFuZ2UgLnJlYWN0LWRhdGVwaWNrZXJfX2RheS0taW4tcmFuZ2UsXG4gICAgLnJlYWN0LWRhdGVwaWNrZXJfX21vbnRoLS1zZWxlY3RpbmctcmFuZ2VcbiAgICAgIC5yZWFjdC1kYXRlcGlja2VyX19tb250aC10ZXh0LS1pbi1yYW5nZSxcbiAgICAucmVhY3QtZGF0ZXBpY2tlcl9fbW9udGgtLXNlbGVjdGluZy1yYW5nZVxuICAgICAgLnJlYWN0LWRhdGVwaWNrZXJfX3F1YXJ0ZXItdGV4dC0taW4tcmFuZ2UsXG4gICAgLnJlYWN0LWRhdGVwaWNrZXJfX21vbnRoLS1zZWxlY3RpbmctcmFuZ2VcbiAgICAgIC5yZWFjdC1kYXRlcGlja2VyX195ZWFyLXRleHQtLWluLXJhbmdlIHtcbiAgICAgIGJhY2tncm91bmQtY29sb3I6ICR7ZS5jb2xvcnMuYmFja2dyb3VuZHMuYmdIb3ZlclByaW1hcnl9O1xuICAgICAgY29sb3I6ICR7ZS5jb2xvcnMuYmxhY2t9O1xuICAgIH1cblxuICAgIC5yZWFjdC1kYXRlcGlja2VyX19kYXktLWRpc2FibGVkLFxuICAgIC5yZWFjdC1kYXRlcGlja2VyX19tb250aC10ZXh0LS1kaXNhYmxlZCxcbiAgICAucmVhY3QtZGF0ZXBpY2tlcl9fcXVhcnRlci10ZXh0LS1kaXNhYmxlZCxcbiAgICAucmVhY3QtZGF0ZXBpY2tlcl9feWVhci10ZXh0LS1kaXNhYmxlZCB7XG4gICAgICBjdXJzb3I6IGRlZmF1bHQ7XG4gICAgICBjb2xvcjogJHtlLmNvbG9ycy5kYXJrR3JheX07XG4gICAgfVxuXG4gICAgLnJlYWN0LWRhdGVwaWNrZXJfX2RheS0tZGlzYWJsZWQ6aG92ZXIsXG4gICAgLnJlYWN0LWRhdGVwaWNrZXJfX21vbnRoLXRleHQtLWRpc2FibGVkOmhvdmVyLFxuICAgIC5yZWFjdC1kYXRlcGlja2VyX19xdWFydGVyLXRleHQtLWRpc2FibGVkOmhvdmVyLFxuICAgIC5yZWFjdC1kYXRlcGlja2VyX195ZWFyLXRleHQtLWRpc2FibGVkOmhvdmVyIHtcbiAgICAgIGJhY2tncm91bmQtY29sb3I6IHRyYW5zcGFyZW50O1xuICAgIH1cblxuICAgIC5yZWFjdC1kYXRlcGlja2VyX19xdWFydGVyLXRleHQucmVhY3QtZGF0ZXBpY2tlcl9fbW9udGgtLXNlbGVjdGVkOmhvdmVyLFxuICAgIC5yZWFjdC1kYXRlcGlja2VyX19xdWFydGVyLXRleHQucmVhY3QtZGF0ZXBpY2tlcl9fbW9udGgtLWluLXJhbmdlOmhvdmVyLFxuICAgIC5yZWFjdC1kYXRlcGlja2VyX19xdWFydGVyLXRleHQucmVhY3QtZGF0ZXBpY2tlcl9fcXVhcnRlci0tc2VsZWN0ZWQ6aG92ZXIsXG4gICAgLnJlYWN0LWRhdGVwaWNrZXJfX3F1YXJ0ZXItdGV4dC5yZWFjdC1kYXRlcGlja2VyX19xdWFydGVyLS1pbi1yYW5nZTpob3ZlciB7XG4gICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAke2UuY29sb3JzLmJsdWV9O1xuICAgIH1cblxuICAgIC5yZWFjdC1kYXRlcGlja2VyX19tb250aC10ZXh0OmhvdmVyLFxuICAgIC5yZWFjdC1kYXRlcGlja2VyX19xdWFydGVyLXRleHQ6aG92ZXIge1xuICAgICAgYmFja2dyb3VuZC1jb2xvcjogJHtlLmNvbG9ycy53aGl0ZX07XG4gICAgfVxuXG4gICAgLnJlYWN0LWRhdGVwaWNrZXJfX2lucHV0LWNvbnRhaW5lciB7XG4gICAgICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gICAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG4gICAgICB3aWR0aDogMTAwJTtcbiAgICAgIC5pbnB1dC13cmFwcGVyIHtcbiAgICAgICAgLyogYmFja2dyb3VuZC1jb2xvcjogJHtlLmNvbG9ycy53aGl0ZX07ICovXG4gICAgICAgIGlucHV0IHtcbiAgICAgICAgICAvKiBiYWNrZ3JvdW5kLWNvbG9yOiB0cmFuc3BhcmVudDsgKi9cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIC5yZWFjdC1kYXRlcGlja2VyX195ZWFyLXJlYWQtdmlldyxcbiAgICAucmVhY3QtZGF0ZXBpY2tlcl9fbW9udGgtcmVhZC12aWV3LFxuICAgIC5yZWFjdC1kYXRlcGlja2VyX19tb250aC15ZWFyLXJlYWQtdmlldyB7XG4gICAgICBib3JkZXI6IDFweCBzb2xpZCB0cmFuc3BhcmVudDtcbiAgICAgIGJvcmRlci1yYWRpdXM6ICR7ZS5ib3JkZXJSYWRpdXMuYmFzZX07XG4gICAgfVxuXG4gICAgLnJlYWN0LWRhdGVwaWNrZXJfX3llYXItcmVhZC12aWV3OmhvdmVyLFxuICAgIC5yZWFjdC1kYXRlcGlja2VyX19tb250aC1yZWFkLXZpZXc6aG92ZXIsXG4gICAgLnJlYWN0LWRhdGVwaWNrZXJfX21vbnRoLXllYXItcmVhZC12aWV3OmhvdmVyIHtcbiAgICAgIGN1cnNvcjogcG9pbnRlcjtcbiAgICB9XG5cbiAgICAucmVhY3QtZGF0ZXBpY2tlcl9feWVhci1yZWFkLXZpZXc6aG92ZXJcbiAgICAgIC5yZWFjdC1kYXRlcGlja2VyX195ZWFyLXJlYWQtdmlldy0tZG93bi1hcnJvdyxcbiAgICAucmVhY3QtZGF0ZXBpY2tlcl9feWVhci1yZWFkLXZpZXc6aG92ZXJcbiAgICAgIC5yZWFjdC1kYXRlcGlja2VyX19tb250aC1yZWFkLXZpZXctLWRvd24tYXJyb3csXG4gICAgLnJlYWN0LWRhdGVwaWNrZXJfX21vbnRoLXJlYWQtdmlldzpob3ZlclxuICAgICAgLnJlYWN0LWRhdGVwaWNrZXJfX3llYXItcmVhZC12aWV3LS1kb3duLWFycm93LFxuICAgIC5yZWFjdC1kYXRlcGlja2VyX19tb250aC1yZWFkLXZpZXc6aG92ZXJcbiAgICAgIC5yZWFjdC1kYXRlcGlja2VyX19tb250aC1yZWFkLXZpZXctLWRvd24tYXJyb3csXG4gICAgLnJlYWN0LWRhdGVwaWNrZXJfX21vbnRoLXllYXItcmVhZC12aWV3OmhvdmVyXG4gICAgICAucmVhY3QtZGF0ZXBpY2tlcl9feWVhci1yZWFkLXZpZXctLWRvd24tYXJyb3csXG4gICAgLnJlYWN0LWRhdGVwaWNrZXJfX21vbnRoLXllYXItcmVhZC12aWV3OmhvdmVyXG4gICAgICAucmVhY3QtZGF0ZXBpY2tlcl9fbW9udGgtcmVhZC12aWV3LS1kb3duLWFycm93IHtcbiAgICAgIGJvcmRlci10b3AtY29sb3I6IHRyYW5zcGFyZW50O1xuICAgIH1cblxuICAgIC5yZWFjdC1kYXRlcGlja2VyX195ZWFyLXJlYWQtdmlldy0tZG93bi1hcnJvdyxcbiAgICAucmVhY3QtZGF0ZXBpY2tlcl9fbW9udGgtcmVhZC12aWV3LS1kb3duLWFycm93LFxuICAgIC5yZWFjdC1kYXRlcGlja2VyX19tb250aC15ZWFyLXJlYWQtdmlldy0tZG93bi1hcnJvdyB7XG4gICAgICBib3JkZXItdG9wLWNvbG9yOiAke2UuY29sb3JzLmJsYWNrfTtcbiAgICAgIGZsb2F0OiByaWdodDtcbiAgICAgIG1hcmdpbi1sZWZ0OiAyMHB4O1xuICAgICAgdG9wOiA4cHg7XG4gICAgICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gICAgICBib3JkZXItd2lkdGg6IDAuNDVyZW07XG4gICAgfVxuXG4gICAgLnJlYWN0LWRhdGVwaWNrZXJfX3llYXItZHJvcGRvd24sXG4gICAgLnJlYWN0LWRhdGVwaWNrZXJfX21vbnRoLWRyb3Bkb3duLFxuICAgIC5yZWFjdC1kYXRlcGlja2VyX19tb250aC15ZWFyLWRyb3Bkb3duIHtcbiAgICAgIGJhY2tncm91bmQtY29sb3I6ICR7ZS5jb2xvcnMud2hpdGV9O1xuICAgICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgICAgd2lkdGg6IDUwJTtcbiAgICAgIGxlZnQ6IDI1JTtcbiAgICAgIHRvcDogMzBweDtcbiAgICAgIHotaW5kZXg6IDE7XG4gICAgICB0ZXh0LWFsaWduOiBjZW50ZXI7XG4gICAgICBib3JkZXItcmFkaXVzOiAke2UuYm9yZGVyUmFkaXVzLmJhc2V9O1xuICAgICAgYm9yZGVyOiAxcHggc29saWQgJHtlLmNvbG9ycy5ibGFja307XG4gICAgfVxuXG4gICAgLnJlYWN0LWRhdGVwaWNrZXJfX3llYXItZHJvcGRvd246aG92ZXIsXG4gICAgLnJlYWN0LWRhdGVwaWNrZXJfX21vbnRoLWRyb3Bkb3duOmhvdmVyLFxuICAgIC5yZWFjdC1kYXRlcGlja2VyX19tb250aC15ZWFyLWRyb3Bkb3duOmhvdmVyIHtcbiAgICAgIGN1cnNvcjogcG9pbnRlcjtcbiAgICB9XG5cbiAgICAucmVhY3QtZGF0ZXBpY2tlcl9feWVhci1kcm9wZG93bi0tc2Nyb2xsYWJsZSxcbiAgICAucmVhY3QtZGF0ZXBpY2tlcl9fbW9udGgtZHJvcGRvd24tLXNjcm9sbGFibGUsXG4gICAgLnJlYWN0LWRhdGVwaWNrZXJfX21vbnRoLXllYXItZHJvcGRvd24tLXNjcm9sbGFibGUge1xuICAgICAgaGVpZ2h0OiAxNTBweDtcbiAgICAgIG92ZXJmbG93LXk6IHNjcm9sbDtcbiAgICB9XG5cbiAgICAucmVhY3QtZGF0ZXBpY2tlcl9feWVhci1vcHRpb24sXG4gICAgLnJlYWN0LWRhdGVwaWNrZXJfX21vbnRoLW9wdGlvbixcbiAgICAucmVhY3QtZGF0ZXBpY2tlcl9fbW9udGgteWVhci1vcHRpb24ge1xuICAgICAgbGluZS1oZWlnaHQ6IDIwcHg7XG4gICAgICB3aWR0aDogMTAwJTtcbiAgICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgICAgbWFyZ2luLWxlZnQ6IGF1dG87XG4gICAgICBtYXJnaW4tcmlnaHQ6IGF1dG87XG4gICAgfVxuXG4gICAgLnJlYWN0LWRhdGVwaWNrZXJfX3llYXItb3B0aW9uOmxhc3Qtb2YtdHlwZSxcbiAgICAucmVhY3QtZGF0ZXBpY2tlcl9fbW9udGgtb3B0aW9uOmxhc3Qtb2YtdHlwZSxcbiAgICAucmVhY3QtZGF0ZXBpY2tlcl9fbW9udGgteWVhci1vcHRpb246bGFzdC1vZi10eXBlIHtcbiAgICAgIC13ZWJraXQtdXNlci1zZWxlY3Q6IG5vbmU7XG4gICAgICAtbW96LXVzZXItc2VsZWN0OiBub25lO1xuICAgICAgLW1zLXVzZXItc2VsZWN0OiBub25lO1xuICAgICAgdXNlci1zZWxlY3Q6IG5vbmU7XG4gICAgICBib3JkZXItYm90dG9tLWxlZnQtcmFkaXVzOiAke2UuYm9yZGVyUmFkaXVzLmJhc2V9O1xuICAgICAgYm9yZGVyLWJvdHRvbS1yaWdodC1yYWRpdXM6ICR7ZS5ib3JkZXJSYWRpdXMuYmFzZX07XG4gICAgfVxuXG4gICAgLnJlYWN0LWRhdGVwaWNrZXJfX3llYXItb3B0aW9uOmhvdmVyLFxuICAgIC5yZWFjdC1kYXRlcGlja2VyX19tb250aC1vcHRpb246aG92ZXIsXG4gICAgLnJlYWN0LWRhdGVwaWNrZXJfX21vbnRoLXllYXItb3B0aW9uOmhvdmVyIHtcbiAgICAgIGJhY2tncm91bmQtY29sb3I6ICR7ZS5jb2xvcnMuYmxhY2t9O1xuICAgIH1cblxuICAgIC5yZWFjdC1kYXRlcGlja2VyX195ZWFyLW9wdGlvbjpob3ZlclxuICAgICAgLnJlYWN0LWRhdGVwaWNrZXJfX25hdmlnYXRpb24tLXllYXJzLXVwY29taW5nLFxuICAgIC5yZWFjdC1kYXRlcGlja2VyX19tb250aC1vcHRpb246aG92ZXJcbiAgICAgIC5yZWFjdC1kYXRlcGlja2VyX19uYXZpZ2F0aW9uLS15ZWFycy11cGNvbWluZyxcbiAgICAucmVhY3QtZGF0ZXBpY2tlcl9fbW9udGgteWVhci1vcHRpb246aG92ZXJcbiAgICAgIC5yZWFjdC1kYXRlcGlja2VyX19uYXZpZ2F0aW9uLS15ZWFycy11cGNvbWluZyB7XG4gICAgICBib3JkZXItYm90dG9tLWNvbG9yOiAke2UuY29sb3JzLmJsYWNrfTtcbiAgICB9XG5cbiAgICAucmVhY3QtZGF0ZXBpY2tlcl9feWVhci1vcHRpb246aG92ZXJcbiAgICAgIC5yZWFjdC1kYXRlcGlja2VyX19uYXZpZ2F0aW9uLS15ZWFycy1wcmV2aW91cyxcbiAgICAucmVhY3QtZGF0ZXBpY2tlcl9fbW9udGgtb3B0aW9uOmhvdmVyXG4gICAgICAucmVhY3QtZGF0ZXBpY2tlcl9fbmF2aWdhdGlvbi0teWVhcnMtcHJldmlvdXMsXG4gICAgLnJlYWN0LWRhdGVwaWNrZXJfX21vbnRoLXllYXItb3B0aW9uOmhvdmVyXG4gICAgICAucmVhY3QtZGF0ZXBpY2tlcl9fbmF2aWdhdGlvbi0teWVhcnMtcHJldmlvdXMge1xuICAgICAgYm9yZGVyLXRvcC1jb2xvcjogJHtlLmNvbG9ycy5ibGFja307XG4gICAgfVxuXG4gICAgLnJlYWN0LWRhdGVwaWNrZXJfX3llYXItb3B0aW9uLS1zZWxlY3RlZCxcbiAgICAucmVhY3QtZGF0ZXBpY2tlcl9fbW9udGgtb3B0aW9uLS1zZWxlY3RlZCxcbiAgICAucmVhY3QtZGF0ZXBpY2tlcl9fbW9udGgteWVhci1vcHRpb24tLXNlbGVjdGVkIHtcbiAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICAgIGxlZnQ6IDE1cHg7XG4gICAgfVxuXG4gICAgLnJlYWN0LWRhdGVwaWNrZXJfX2Nsb3NlLWljb24ge1xuICAgICAgY3Vyc29yOiBwb2ludGVyO1xuICAgICAgYmFja2dyb3VuZC1jb2xvcjogdHJhbnNwYXJlbnQ7XG4gICAgICBib3JkZXI6IDA7XG4gICAgICBvdXRsaW5lOiAwO1xuICAgICAgcGFkZGluZzogMCA2cHggMCAwO1xuICAgICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgICAgdG9wOiAwO1xuICAgICAgcmlnaHQ6IDA7XG4gICAgICBoZWlnaHQ6IDEwMCU7XG4gICAgICBkaXNwbGF5OiB0YWJsZS1jZWxsO1xuICAgICAgdmVydGljYWwtYWxpZ246IG1pZGRsZTtcbiAgICB9XG5cbiAgICAucmVhY3QtZGF0ZXBpY2tlcl9fdG9kYXktYnV0dG9uIHtcbiAgICAgIGJhY2tncm91bmQ6ICR7ZS5jb2xvcnMud2hpdGV9O1xuICAgICAgYm9yZGVyLXRvcDogMXB4IHNvbGlkICR7ZS5jb2xvcnMuYmxhY2t9O1xuICAgICAgY3Vyc29yOiBwb2ludGVyO1xuICAgICAgdGV4dC1hbGlnbjogY2VudGVyO1xuICAgICAgZm9udC13ZWlnaHQ6IGJvbGQ7XG4gICAgICBwYWRkaW5nOiA1cHggMDtcbiAgICAgIGNsZWFyOiBsZWZ0O1xuICAgIH1cblxuICAgIC5yZWFjdC1kYXRlcGlja2VyX19wb3J0YWwge1xuICAgICAgcG9zaXRpb246IGZpeGVkO1xuICAgICAgd2lkdGg6IDEwMHZ3O1xuICAgICAgaGVpZ2h0OiAxMDB2aDtcbiAgICAgIGJhY2tncm91bmQtY29sb3I6ICR7YHJnYmEoJHtlLmNvbG9ycy5ibGFja30sIDAuOClgfTtcbiAgICAgIGxlZnQ6IDA7XG4gICAgICB0b3A6IDA7XG4gICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcbiAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gICAgICBkaXNwbGF5OiBmbGV4O1xuICAgICAgei1pbmRleDogMjE0NzQ4MzY0NztcbiAgICB9XG5cbiAgICAucmVhY3QtZGF0ZXBpY2tlcl9fcG9ydGFsIC5yZWFjdC1kYXRlcGlja2VyX19kYXktbmFtZSxcbiAgICAucmVhY3QtZGF0ZXBpY2tlcl9fcG9ydGFsIC5yZWFjdC1kYXRlcGlja2VyX19kYXksXG4gICAgLnJlYWN0LWRhdGVwaWNrZXJfX3BvcnRhbCAucmVhY3QtZGF0ZXBpY2tlcl9fdGltZS1uYW1lIHtcbiAgICAgIHdpZHRoOiAzcmVtO1xuICAgICAgbGluZS1oZWlnaHQ6IDNyZW07XG4gICAgfVxuXG4gICAgQG1lZGlhIChtYXgtd2lkdGg6IDQwMHB4KSwgKG1heC1oZWlnaHQ6IDU1MHB4KSB7XG4gICAgICAucmVhY3QtZGF0ZXBpY2tlcl9fcG9ydGFsIC5yZWFjdC1kYXRlcGlja2VyX19kYXktbmFtZSxcbiAgICAgIC5yZWFjdC1kYXRlcGlja2VyX19wb3J0YWwgLnJlYWN0LWRhdGVwaWNrZXJfX2RheSxcbiAgICAgIC5yZWFjdC1kYXRlcGlja2VyX19wb3J0YWwgLnJlYWN0LWRhdGVwaWNrZXJfX3RpbWUtbmFtZSB7XG4gICAgICAgIHdpZHRoOiAycmVtO1xuICAgICAgICBsaW5lLWhlaWdodDogMnJlbTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAucmVhY3QtZGF0ZXBpY2tlcl9fcG9ydGFsIC5yZWFjdC1kYXRlcGlja2VyX19jdXJyZW50LW1vbnRoLFxuICAgIC5yZWFjdC1kYXRlcGlja2VyX19wb3J0YWwgLnJlYWN0LWRhdGVwaWNrZXItdGltZV9faGVhZGVyIHtcbiAgICAgIGZvbnQtc2l6ZTogJHtlLnR5cG9ncmFwaHkudDIwfTtcbiAgICB9XG5cbiAgICAucmVhY3QtZGF0ZXBpY2tlcl9fcG9ydGFsIC5yZWFjdC1kYXRlcGlja2VyX19uYXZpZ2F0aW9uIHtcbiAgICAgIGJvcmRlcjogMC44MXJlbSBzb2xpZCB0cmFuc3BhcmVudDtcbiAgICB9XG5cbiAgICAucmVhY3QtZGF0ZXBpY2tlcl9fcG9ydGFsIC5yZWFjdC1kYXRlcGlja2VyX19uYXZpZ2F0aW9uLS1wcmV2aW91cyB7XG4gICAgICBib3JkZXItcmlnaHQtY29sb3I6ICR7ZS5jb2xvcnMuYmxhY2t9O1xuICAgIH1cblxuICAgIC5yZWFjdC1kYXRlcGlja2VyX19wb3J0YWwgLnJlYWN0LWRhdGVwaWNrZXJfX25hdmlnYXRpb24tLXByZXZpb3VzOmhvdmVyIHtcbiAgICAgIGJvcmRlci1yaWdodC1jb2xvcjogdW5zZXQ7XG4gICAgfVxuXG4gICAgLnJlYWN0LWRhdGVwaWNrZXJfX3BvcnRhbCAucmVhY3QtZGF0ZXBpY2tlcl9fbmF2aWdhdGlvbi0tcHJldmlvdXMtLWRpc2FibGVkLFxuICAgIC5yZWFjdC1kYXRlcGlja2VyX19wb3J0YWxcbiAgICAgIC5yZWFjdC1kYXRlcGlja2VyX19uYXZpZ2F0aW9uLS1wcmV2aW91cy0tZGlzYWJsZWQ6aG92ZXIge1xuICAgICAgYm9yZGVyLXJpZ2h0LWNvbG9yOiAke2UuY29sb3JzLmdyZXl9O1xuICAgICAgY3Vyc29yOiBkZWZhdWx0O1xuICAgIH1cblxuICAgIC5yZWFjdC1kYXRlcGlja2VyX19wb3J0YWwgLnJlYWN0LWRhdGVwaWNrZXJfX25hdmlnYXRpb24tLW5leHQge1xuICAgICAgYm9yZGVyLWxlZnQtY29sb3I6ICR7ZS5jb2xvcnMuYmxhY2t9O1xuICAgIH1cblxuICAgIC5yZWFjdC1kYXRlcGlja2VyX19wb3J0YWwgLnJlYWN0LWRhdGVwaWNrZXJfX25hdmlnYXRpb24tLW5leHQ6aG92ZXIge1xuICAgICAgYm9yZGVyLWxlZnQtY29sb3I6IHVuc2V0O1xuICAgIH1cblxuICAgIC5yZWFjdC1kYXRlcGlja2VyX19wb3J0YWwgLnJlYWN0LWRhdGVwaWNrZXJfX25hdmlnYXRpb24tLW5leHQtLWRpc2FibGVkLFxuICAgIC5yZWFjdC1kYXRlcGlja2VyX19wb3J0YWxcbiAgICAgIC5yZWFjdC1kYXRlcGlja2VyX19uYXZpZ2F0aW9uLS1uZXh0LS1kaXNhYmxlZDpob3ZlciB7XG4gICAgICBib3JkZXItbGVmdC1jb2xvcjogJHtlLmNvbG9ycy5ncmV5fTtcbiAgICAgIGN1cnNvcjogZGVmYXVsdDtcbiAgICB9XG5cbiAgICAucmVhY3QtZGF0ZXBpY2tlcl9fZGF5LS1vdXRzaWRlLW1vbnRoIHtcbiAgICAgIGNvbG9yOiAke2UuY29sb3JzLnRleHRJY29uLnRleHREaXNhYmxlZE9uYmd9O1xuICAgIH1cblxuICAgICR7dCAmJiBvMWBcbiAgICAgICR7VjV9IHtcbiAgICAgICAgY3Vyc29yOiBkZWZhdWx0O1xuICAgICAgICBjb2xvcjogJHtlLmNvbG9ycy50ZXh0SWNvbi50ZXh0RGlzYWJsZWROb2JnfTtcbiAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogJHtlLmNvbG9ycy5iYWNrZ3JvdW5kcy5iZ0Rpc2FibGVkUHJpbWFyeX07XG4gICAgICB9XG4gICAgYH1cbiAgYFxuKTtcbmZ1bmN0aW9uIG45KGUpIHtcbiAgY29uc3Qge1xuICAgIGxhYmVsOiB0LFxuICAgIGdldFZhbHVlOiBvLFxuICAgIGlzRGlzYWJsZWQ6IG4sXG4gICAgcGxhY2Vob2xkZXI6IHIsXG4gICAgaXNSZXF1aXJlZDogaSxcbiAgICBpc0Vycm9yOiBhLFxuICAgIGRpc2FibGVDbGVhcjogcyxcbiAgICBoYW5kbGVDbGVhckJ1dHRvbjogbCxcbiAgICBkYXRlRm9ybWF0OiBwID0gXCJkZC9NTS95eXl5XCIsXG4gICAgcG9wcGVyUGxhY2VtZW50OiBkID0gXCJ0b3Atc3RhcnRcIixcbiAgICBtaW5EYXRlOiBiLFxuICAgIG1heERhdGU6IE0sXG4gICAgZGVmYXVsdFZhbHVlOiB1LFxuICAgIC4uLkFcbiAgfSA9IGUsIFt6LCBmXSA9IFQxKG51bGwpLCBbTywgaF0gPSBUMSghMSksIGcgPSBfMShcbiAgICAoSCkgPT4gLyogQF9fUFVSRV9fICovIGMoSXAsIHsgLi4uSCB9KSxcbiAgICBbXVxuICApLCB2ID0gXzEoXG4gICAgKEgpID0+IEguc3Vic3RyKDAsIDEpLFxuICAgIFtdXG4gICksIEwgPSBtMChcbiAgICAoKSA9PiAvKiBAX19QVVJFX18gKi8gYyhcbiAgICAgIFkyLFxuICAgICAge1xuICAgICAgICBwbGFjZWhvbGRlcjogcixcbiAgICAgICAgaWNvbkxlZnQ6IFwiQ2FsZW5kYXJcIixcbiAgICAgICAgaWNvblJpZ2h0OiBPID8gXCJDaGV2cm9uVXBcIiA6IFwiQ2hldnJvbkRvd25cIixcbiAgICAgICAgcmVhZE9ubHk6ICEwLFxuICAgICAgICBsYWJlbDogdCxcbiAgICAgICAgaXNSZXF1aXJlZDogaSxcbiAgICAgICAgaXNFcnJvcjogYSxcbiAgICAgICAgaWNvblNpemU6IFwieHh4c1wiLFxuICAgICAgICBoaWRlQ2xlYXJCdXR0b246ICEwXG4gICAgICB9XG4gICAgKSxcbiAgICBbciwgTywgdCwgaSwgYV1cbiAgKSwgeSA9IF8xKFxuICAgIChIKSA9PiB7XG4gICAgICBmKEgpLCBvICYmIG8oSCksIGgoITEpO1xuICAgIH0sXG4gICAgW2YsIG8sIGhdXG4gICksIEIgPSBfMSgoKSA9PiB7XG4gICAgaCghMCk7XG4gIH0sIFtoXSksIFggPSBfMSgoKSA9PiB7XG4gICAgaCghMSk7XG4gIH0sIFtoXSksIEYgPSAoSCkgPT4ge1xuICAgIEguc3RvcFByb3BhZ2F0aW9uKCksIGYobnVsbCk7XG4gIH0sIFQgPSAoKSA9PiB7XG4gICAgaWYgKGIpXG4gICAgICByZXR1cm4gYjtcbiAgfSwgdyA9ICgpID0+IHtcbiAgICBpZiAoTSlcbiAgICAgIHJldHVybiBNO1xuICB9O1xuICByZXR1cm4gUDEoKCkgPT4ge1xuICAgICgoQSA9PSBudWxsID8gdm9pZCAwIDogQS52YWx1ZSkgPT0gbnVsbCB8fCAoQSA9PSBudWxsID8gdm9pZCAwIDogQS52YWx1ZSkgPT0gXCJcIikgJiYgZihudWxsKTtcbiAgfSwgW0EgPT0gbnVsbCA/IHZvaWQgMCA6IEEudmFsdWVdKSwgLyogQF9fUFVSRV9fICovIGUxKEtCLCB7IGlzRGlzYWJsZWQ6IG4sIGNoaWxkcmVuOiBbXG4gICAgLyogQF9fUFVSRV9fICovIGMoXG4gICAgICB2cCxcbiAgICAgIHtcbiAgICAgICAgLi4uQSxcbiAgICAgICAgY2xvc2VPblNjcm9sbDogITAsXG4gICAgICAgIHJlbmRlckN1c3RvbUhlYWRlcjogZyxcbiAgICAgICAgZm9ybWF0V2Vla0RheTogdixcbiAgICAgICAgb25DaGFuZ2U6IHksXG4gICAgICAgIG9uRm9jdXM6IEIsXG4gICAgICAgIG9uQmx1cjogWCxcbiAgICAgICAgY3VzdG9tSW5wdXQ6IEwsXG4gICAgICAgIHBsYWNlaG9sZGVyVGV4dDogcixcbiAgICAgICAgZGlzYWJsZWQ6IG4sXG4gICAgICAgIHNlbGVjdGVkOiB6IHx8IHUsXG4gICAgICAgIGRhdGVGb3JtYXQ6IHAsXG4gICAgICAgIHBvcHBlckNsYXNzTmFtZTogXCJzb21lLWN1c3RvbS1jbGFzc1wiLFxuICAgICAgICBwb3BwZXJQbGFjZW1lbnQ6IFwiYm90dG9tLXN0YXJ0XCIsXG4gICAgICAgIHBvcHBlck1vZGlmaWVyczogW1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIG5hbWU6IFwib2Zmc2V0XCIsXG4gICAgICAgICAgICBvcHRpb25zOiB7XG4gICAgICAgICAgICAgIG9mZnNldDogWzAsIDBdXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSxcbiAgICAgICAgICB7XG4gICAgICAgICAgICBuYW1lOiBcInByZXZlbnRPdmVyZmxvd1wiLFxuICAgICAgICAgICAgb3B0aW9uczoge1xuICAgICAgICAgICAgICByb290Qm91bmRhcnk6IFwidmlld3BvcnRcIixcbiAgICAgICAgICAgICAgdGV0aGVyOiAhMSxcbiAgICAgICAgICAgICAgYWx0QXhpczogITBcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIF0sXG4gICAgICAgIHBvcHBlclByb3BzOiB7IHN0cmF0ZWd5OiBcImZpeGVkXCIgfSxcbiAgICAgICAgbWluRGF0ZTogVCgpLFxuICAgICAgICBtYXhEYXRlOiB3KClcbiAgICAgIH1cbiAgICApLFxuICAgICh6IHx8IEEudmFsdWUgfHwgdSkgJiYgIXMgJiYgLyogQF9fUFVSRV9fICovIGMoakIsIHsgY2hpbGRyZW46IC8qIEBfX1BVUkVfXyAqLyBjKFxuICAgICAgZmwsXG4gICAgICB7XG4gICAgICAgIG9uQ2xpY2s6IG4gPyAoKSA9PiBudWxsIDogKEgpID0+IHtcbiAgICAgICAgICBsICYmIGwoKSwgRihIKSwgZihudWxsKTtcbiAgICAgICAgfSxcbiAgICAgICAgY2hpbGRyZW46IC8qIEBfX1BVUkVfXyAqLyBjKFxuICAgICAgICAgIFoxLFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIG5hbWU6IFwiQ3Jvc3NcIixcbiAgICAgICAgICAgIHNpemU6IFwieHhzXCIsXG4gICAgICAgICAgICBjb2xvcjogbiA/IFwiI0E2QTZBNlwiIDogXCIjMzEyNzgzXCJcbiAgICAgICAgICB9XG4gICAgICAgIClcbiAgICAgIH1cbiAgICApIH0pXG4gIF0gfSk7XG59XG5mdW5jdGlvbiBKQihlLCB0KSB7XG4gIGNvbnN0IHtcbiAgICBpc0Rpc2FibGVkOiBvLFxuICAgIGhpZGVDbGVhckJ0bjogbixcbiAgICBtaW46IHIsXG4gICAgbWF4OiBpLFxuICAgIG9uQ2hhbmdlOiBhLFxuICAgIGRhdGVGb3JtYXQ6IHMgPSBcImRkL01NL3l5eXlcIixcbiAgICAuLi5sXG4gIH0gPSBlLCBbcCwgZF0gPSBUMSh7XG4gICAgbWluOiByLFxuICAgIG1heDogaVxuICB9KTtcbiAgUDEoKCkgPT4ge1xuICAgIGQoeyBtaW46IHIsIG1heDogaSB9KTtcbiAgfSwgW3IsIGldKSwgUDEoKCkgPT4ge1xuICAgIHIgJiYgIXAubWluICYmIHAubWluICE9IG51bGwgJiYgKGQoeyAuLi5wLCBtaW46IHIgfSksIGEoeyAuLi5wLCBtaW46IHIgfSkpO1xuICB9LCBbciwgYSwgcF0pLCBQMSgoKSA9PiB7XG4gICAgaSAmJiAhcC5tYXggJiYgcC5tYXggIT0gbnVsbCAmJiAoZCh7IC4uLnAsIG1heDogaSB9KSwgYSh7IC4uLnAsIG1heDogaSB9KSk7XG4gIH0sIFtpLCBhLCBwXSksIEJyKHQsICgpID0+ICh7XG4gICAgaGFuZGxlUmVzZXQoZikge1xuICAgICAgZChmKTtcbiAgICB9XG4gIH0pKTtcbiAgY29uc3QgYiA9IF8xKFxuICAgIChmKSA9PiB7XG4gICAgICBkKHsgLi4ucCwgbWluOiBmIH0pLCBhKHsgLi4ucCwgbWluOiBmIH0pO1xuICAgIH0sXG4gICAgW2EsIHBdXG4gICksIE0gPSBfMShcbiAgICAoZikgPT4ge1xuICAgICAgZCh7IC4uLnAsIG1heDogZiB9KSwgYSh7IC4uLnAsIG1heDogZiB9KTtcbiAgICB9LFxuICAgIFthLCBwXVxuICApLCB1ID0ge1xuICAgIHBsYWNlaG9sZGVyOiBcIlNlbGVjdCBhIGRhdGVcIixcbiAgICBzdGFydERhdGU6IHAubWluLFxuICAgIGVuZERhdGU6IHAubWF4LFxuICAgIGlzRGlzYWJsZWQ6IG8sXG4gICAgZGF0ZUZvcm1hdDogc1xuICB9LCBBID0gcC5taW4gJiYgdHlwZW9mIHMgPT0gXCJzdHJpbmdcIiA/IGRyKG5ldyBEYXRlKHAubWluKSwgcykgOiBcIlwiLCB6ID0gcC5tYXggJiYgdHlwZW9mIHMgPT0gXCJzdHJpbmdcIiA/IGRyKG5ldyBEYXRlKHAubWF4KSwgcykgOiBcIlwiO1xuICByZXR1cm4gLyogQF9fUFVSRV9fICovIGUxKFwiZGl2XCIsIHsgY2xhc3NOYW1lOiBcImRhdGUtcmFuZ2UtY29udGFpbmVyXCIsIGNoaWxkcmVuOiBbXG4gICAgLyogQF9fUFVSRV9fICovIGMoWTgsIHsgY2hpbGRyZW46IC8qIEBfX1BVUkVfXyAqLyBjKFxuICAgICAgbjksXG4gICAgICB7XG4gICAgICAgIC4uLnUsXG4gICAgICAgIGxhYmVsOiBcIkZyb21cIixcbiAgICAgICAgZ2V0VmFsdWU6IGIsXG4gICAgICAgIHNlbGVjdGVkOiBwLm1pbixcbiAgICAgICAgbWF4RGF0ZTogcC5tYXggfHwgKGwgPT0gbnVsbCA/IHZvaWQgMCA6IGwubWF4VG9EYXRlKSxcbiAgICAgICAgdmFsdWU6IEEsXG4gICAgICAgIHNlbGVjdHNTdGFydDogITAsXG4gICAgICAgIGlzUmVxdWlyZWQ6ICEwLFxuICAgICAgICBkaXNhYmxlQ2xlYXI6IG4sXG4gICAgICAgIGhhbmRsZUNsZWFyQnV0dG9uOiAoKSA9PiB7XG4gICAgICAgICAgZCh7XG4gICAgICAgICAgICBtaW46IG51bGwsXG4gICAgICAgICAgICBtYXg6IG51bGxcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICkgfSksXG4gICAgLyogQF9fUFVSRV9fICovIGMoWTgsIHsgY2hpbGRyZW46IC8qIEBfX1BVUkVfXyAqLyBjKFxuICAgICAgbjksXG4gICAgICB7XG4gICAgICAgIC4uLnUsXG4gICAgICAgIGxhYmVsOiBcIlRvXCIsXG4gICAgICAgIGdldFZhbHVlOiBNLFxuICAgICAgICBzZWxlY3RlZDogcC5tYXgsXG4gICAgICAgIG1pbkRhdGU6IHAubWluLFxuICAgICAgICBtYXhEYXRlOiBsID09IG51bGwgPyB2b2lkIDAgOiBsLm1heFRvRGF0ZSxcbiAgICAgICAgaXNEaXNhYmxlZDogIXAubWluLFxuICAgICAgICB2YWx1ZTogeixcbiAgICAgICAgc2VsZWN0c0VuZDogITAsXG4gICAgICAgIGRpc2FibGVDbGVhcjogbixcbiAgICAgICAgaGFuZGxlQ2xlYXJCdXR0b246ICgpID0+IHtcbiAgICAgICAgICBkKHtcbiAgICAgICAgICAgIG1pbjogcC5taW4gPyBwLm1pbiA6IG51bGwsXG4gICAgICAgICAgICBtYXg6IG51bGxcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICkgfSlcbiAgXSB9KTtcbn1cbmNvbnN0IERwID0gQjAoSkIpO1xuZnVuY3Rpb24gX0IoZSkge1xuICBjb25zdCB7XG4gICAgb25DbGVhckZpbHRlcjogdCxcbiAgICBvbkFwcGx5RmlsdGVyOiBvLFxuICAgIHZhbHVlOiBuLFxuICAgIGlzRGlzYWJsZWQ6IHIsXG4gICAgYnV0dG9uVGV4dDogaSxcbiAgICBkYXRlRm9ybWF0OiBhID0gXCJkZC9NTS95eXl5XCIsXG4gICAgLi4uc1xuICB9ID0gZSwgW2wsIHBdID0gaW8oITEpLCBkID0gbjAobnVsbCksIFtiLCBNXSA9IFQxKG51bGwpLCBbdSwgQV0gPSBUMSghMSk7XG4gIFAxKCgpID0+IHtcbiAgICBuICYmIE0obik7XG4gIH0sIFtuXSk7XG4gIGNvbnN0IHogPSBfMSgoKSA9PiB7XG4gICAgYiAmJiAobyAmJiBvKGIpLCBwKCkpO1xuICB9LCBbbywgcCwgYl0pLCBmID0gXzEoKCkgPT4ge1xuICAgIGNvbnN0IGcgPSB7XG4gICAgICBtaW46IG51bGwsXG4gICAgICBtYXg6IG51bGxcbiAgICB9O1xuICAgIG8gJiYgbyhnKSwgTShnKSwgZCAhPSBudWxsICYmIGQuY3VycmVudCAmJiBkLmN1cnJlbnQuaGFuZGxlUmVzZXQoZyksIHQgJiYgdCgpLCBwKCk7XG4gIH0sIFtdKTtcbiAgUDEoKCkgPT4ge1xuICAgIEEoXG4gICAgICAoYiA9PSBudWxsID8gdm9pZCAwIDogYi5taW4pICE9PSBudWxsIHx8IChiID09IG51bGwgPyB2b2lkIDAgOiBiLm1heCkgIT09IG51bGwgfHwgKG4gPT0gbnVsbCA/IHZvaWQgMCA6IG4ubWluKSAhPT0gbnVsbCB8fCAobiA9PSBudWxsID8gdm9pZCAwIDogbi5tYXgpICE9PSBudWxsXG4gICAgKTtcbiAgfSwgW24sIGwsIGJdKTtcbiAgY29uc3QgTyA9IG0wKCgpID0+IHtcbiAgICBjb25zdCBnID0gKHkpID0+IGRyKG5ldyBEYXRlKHkpLCBhKSwgdiA9IHtcbiAgICAgIGlzRGlzYWJsZWQ6IHIsXG4gICAgICBpc0FjdGl2ZTogbCxcbiAgICAgIG9uQ2xpY2s6IHBcbiAgICB9O1xuICAgIGlmICghbi5taW4gJiYgIW4ubWF4KVxuICAgICAgcmV0dXJuIC8qIEBfX1BVUkVfXyAqLyBjKGIzLCB7IC4uLnYsIFwiYXJpYS1sYWJlbFwiOiBgJHtpfSBmaWx0ZXJgLCBjaGlsZHJlbjogLyogQF9fUFVSRV9fICovIGUxKEl0LCB7IGNoaWxkcmVuOiBbXG4gICAgICAgIC8qIEBfX1BVUkVfXyAqLyBlMShVZSwgeyBjaGlsZHJlbjogW1xuICAgICAgICAgIFwiIFwiLFxuICAgICAgICAgIGlcbiAgICAgICAgXSB9KSxcbiAgICAgICAgLyogQF9fUFVSRV9fICovIGMoXG4gICAgICAgICAgWjEsXG4gICAgICAgICAge1xuICAgICAgICAgICAgbmFtZTogbCA/IFwiQ2hldnJvblVwRHJvcGRvd25cIiA6IFwiQ2hldnJvbkRvd25Ecm9wZG93blwiLFxuICAgICAgICAgICAgc2l6ZTogXCJ4eHNcIlxuICAgICAgICAgIH1cbiAgICAgICAgKVxuICAgICAgXSB9KSB9KTtcbiAgICBsZXQgTCA9IFtcbiAgICAgIG4gIT0gbnVsbCAmJiBuLm1pbiA/IGAke2cobi5taW4pfSBgIDogXCIuLi5cIixcbiAgICAgIG4gIT0gbnVsbCAmJiBuLm1heCA/IGcobi5tYXgpIDogXCIuLi5cIlxuICAgIF07XG4gICAgcmV0dXJuIC8qIEBfX1BVUkVfXyAqLyBjKFxuICAgICAgYjMsXG4gICAgICB7XG4gICAgICAgIC4uLnYsXG4gICAgICAgIGlzRGlzYWJsZWQ6IHIsXG4gICAgICAgICRpc0FjdGl2ZTogbCxcbiAgICAgICAgb25DbGljazogcCxcbiAgICAgICAgaXNGaWx0ZXJlZDogISEoIWwgJiYgTCksXG4gICAgICAgIGNoaWxkcmVuOiAvKiBAX19QVVJFX18gKi8gZTEoSXQsIHsgY2hpbGRyZW46IFtcbiAgICAgICAgICAvKiBAX19QVVJFX18gKi8gYyhVZSwgeyBjaGlsZHJlbjogTCA/IC8qIEBfX1BVUkVfXyAqLyBlMSh2bCwgeyAkaXNBY3RpdmU6IGwsIGNoaWxkcmVuOiBbXG4gICAgICAgICAgICBMWzBdLFxuICAgICAgICAgICAgLyogQF9fUFVSRV9fICovIGMoQWUsIHsgY291bnQ6IDAsIG5vRGlnaXQ6ICEwIH0pLFxuICAgICAgICAgICAgTFsxXSxcbiAgICAgICAgICAgIFwiIFwiXG4gICAgICAgICAgXSB9KSA6IGkgfSksXG4gICAgICAgICAgbCAmJiBMID8gLyogQF9fUFVSRV9fICovIGMoXG4gICAgICAgICAgICBaMSxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgbmFtZTogbCA/IFwiQ2hldnJvblVwRHJvcGRvd25cIiA6IFwiQ2hldnJvbkRvd25Ecm9wZG93blwiLFxuICAgICAgICAgICAgICBzaXplOiBcInh4c1wiXG4gICAgICAgICAgICB9XG4gICAgICAgICAgKSA6IC8qIEBfX1BVUkVfXyAqLyBjKGQzLCB7IG9uQ2xpY2s6IGYsIGNoaWxkcmVuOiAvKiBAX19QVVJFX18gKi8gYyhaMSwgeyBuYW1lOiBcIkNsb3NlXCIsIGNvbG9yOiBgJHt2Mi5ibGFja31gLCBzaXplOiBcInh4c1wiIH0pIH0pXG4gICAgICAgIF0gfSlcbiAgICAgIH1cbiAgICApO1xuICB9LCBbcCwgbCwgciwgbiwgaV0pO1xuICByZXR1cm4gLyogQF9fUFVSRV9fICovIGMoXG4gICAgRXIsXG4gICAge1xuICAgICAgLi4ucyxcbiAgICAgIGJ1dHRvbjogTyxcbiAgICAgIGlzU2hvd2VkOiBsLFxuICAgICAgaXNGaWx0ZXJWYWx1ZUNoYW5nZWQ6IHUsXG4gICAgICBvbkFwcGx5RmlsdGVyOiB6LFxuICAgICAgb25DbGVhckZpbHRlcjogZixcbiAgICAgIGhhbmRsZURyb3Bkb3duU2hvd2VkOiBwLFxuICAgICAgY2hpbGRyZW46IC8qIEBfX1BVUkVfXyAqLyBjKFxuICAgICAgICBEcCxcbiAgICAgICAge1xuICAgICAgICAgIC4uLnMsXG4gICAgICAgICAgZGF0ZUZvcm1hdDogYSxcbiAgICAgICAgICByZWY6IGQsXG4gICAgICAgICAgb25DaGFuZ2U6ICh7IG1pbjogZywgbWF4OiB2IH0pID0+IHtcbiAgICAgICAgICAgIE0oe1xuICAgICAgICAgICAgICBtaW46IGcsXG4gICAgICAgICAgICAgIG1heDogdlxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfSxcbiAgICAgICAgICBtaW46IGIgIT0gbnVsbCAmJiBiLm1pbiA/IG5ldyBEYXRlKGIubWluKSA6IG51bGwsXG4gICAgICAgICAgbWF4OiBiICE9IG51bGwgJiYgYi5tYXggPyBuZXcgRGF0ZShiLm1heCkgOiBudWxsXG4gICAgICAgIH1cbiAgICAgIClcbiAgICB9XG4gICk7XG59XG5jb25zdCAkQiA9ICQoRjUpKFxuICAoeyB0aGVtZTogeyBjb2xvcnM6IGUsIGZvbnRXZWlnaHQ6IHQsIHR5cG9ncmFwaHk6IG8sIGxpbmVIZWlnaHQ6IG4sIGl0ZW1TaXplOiByIH0gfSkgPT4gbzFgXG4gICAgICBkaXNwbGF5OiBmbGV4O1xuICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgICAgIGp1c3RpZnktY29udGVudDogc3BhY2UtYmV0d2VlbjtcbiAgICAgIGZvbnQtc2l6ZTogJHtvLnQxMn07XG4gICAgICBiYWNrZ3JvdW5kOiAke2UuYmFja2dyb3VuZHMuYmdQcmltYXJ5fTtcbiAgICAgIGJvcmRlci1yYWRpdXM6IDQwcHg7XG4gICAgICBoZWlnaHQ6ICR7ci5tZH07XG4gICAgICB3aGl0ZS1zcGFjZTogbm93cmFwO1xuICAgICAgbWluLXdpZHRoOiBtaW4tY29udGVudDtcbiAgICAgIC8vbmV3XG4gICAgICBjb2xvcjogJHtlLnRleHRJY29uLnRleHRQcmltYXJ5fSAhaW1wb3J0YW50O1xuICAgICAgYm94LXNoYWRvdzogJHskMChlLmJvcmRlci5ib3JkZXJUZXJ0aWFyeSl9O1xuICAgICAgbGluZS1oZWlnaHQ6ICR7bi5saDIwfTtcbiAgICAgIGZvbnQtd2VpZ2h0OiAke3QucmVndWxhcn07XG4gICAgICAmOm5vdCg6ZGlzYWJsZWQpIHtcbiAgICAgICAgJjpub3QoOmFjdGl2ZSkge1xuICAgICAgICAgICY6aG92ZXIge1xuICAgICAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogJHtlLmJhY2tncm91bmRzLmJnSG92ZXJQcmltYXJ5fSAhaW1wb3J0YW50O1xuICAgICAgICAgICAgYm94LXNoYWRvdzogJHskMChlLmJvcmRlci5ib3JkZXJUZXJ0aWFyeSl9O1xuICAgICAgICAgIH1cblxuICAgICAgICAgICY6Zm9jdXMtdmlzaWJsZSB7XG4gICAgICAgICAgICBiYWNrZ3JvdW5kOiAke2UuYmFja2dyb3VuZHMuYmdQcmltYXJ5fSAhaW1wb3J0YW50O1xuICAgICAgICAgICAgY29sb3I6ICR7ZS50ZXh0SWNvbi50ZXh0UHJpbWFyeX0gIWltcG9ydGFudDtcbiAgICAgICAgICAgIGJvcmRlci1jb2xvcjogJHtlLmJvcmRlci5ib3JkZXJGb2N1c2VkfSAhaW1wb3J0YW50O1xuICAgICAgICAgICAgYm94LXNoYWRvdzogJHskMChcbiAgICBlLmJvcmRlci5ib3JkZXJGb2N1c2VkXG4gICl9ICFpbXBvcnRhbnQ7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICBzdmcge1xuICAgICAgICBjb2xvcjogJHtlLnRleHRJY29uLnRleHRQcmltYXJ5fSAhaW1wb3J0YW50O1xuICAgICAgfVxuICAgICAgJjphY3RpdmUge1xuICAgICAgICBiYWNrZ3JvdW5kOiAke2UuYmFja2dyb3VuZHMuYmdQcmVzc2VkfSAhaW1wb3J0YW50O1xuICAgICAgICBjb2xvcjogJHtlLnRleHRJY29uLnRleHRUZXJ0aWFyeX0gIWltcG9ydGFudDtcblxuICAgICAgICBzdmcge1xuICAgICAgICAgIGNvbG9yOiAke2UuYnV0dG9uVGV4dC5idXR0b25UZXh0UHJpbWFyeX0gIWltcG9ydGFudDtcbiAgICAgICAgICAvKiBiYWNrZ3JvdW5kOiAgJHtlLmJhY2tncm91bmRzLmJnVHJhbnNwYXJlbmN5UHJlc3NlZH0gIWltcG9ydGFudDtcbiAgICAgICAgICAgIGJvcmRlci1yYWRpdXM6IDhweDsgKi9cbiAgICAgICAgICBvcGFjaXR5OiB1bnNldDtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIGBcbik7XG5mdW5jdGlvbiBlUyhlKSB7XG4gIHJldHVybiAvKiBAX19QVVJFX18gKi8gY2UoJEIsIHsgLi4uZSwga2V5OiBcImlzQWN0aXZlLVwiICsgZS4kaXNBY3RpdmUgfSk7XG59XG5mdW5jdGlvbiB0UyhlKSB7XG4gIGNvbnN0IHsgaXNEaXNhYmxlZDogdCwgLi4ubyB9ID0gZSwgbiA9IHsgZGlzYWJsZWQ6IHQsIC4uLm8gfTtcbiAgcmV0dXJuIC8qIEBfX1BVUkVfXyAqLyBjKGVTLCB7IC4uLm4gfSk7XG59XG5mdW5jdGlvbiBHbihlKSB7XG4gIGNvbnN0IHtcbiAgICBpc1NlYXJjaGFibGU6IHQsXG4gICAgZ2V0RmlsdGVyZWRWYWx1ZTogbyxcbiAgICBoaWdoTGlnaHRTZWxlY3RlZE9wdGlvbnM6IG4sXG4gICAgdmFsdWVzOiByLFxuICAgIGRhdGE6IGksXG4gICAgaXNNdWx0aTogYSxcbiAgICBwbGFjZWhvbGRlcjogcyxcbiAgICBsYWJlbDogbFxuICB9ID0gZSwgW3AsIGRdID0gVDEoXCJcIiksIFtiLCBNXSA9IFQxKGkpLCBbdSwgQV0gPSBUMSgpLCB6ID0gTnAocCwgNTAwKSwgW2YsIE9dID0gVDEoITEpLCBbaCwgZ10gPSBUMSgpLCB2ID0gXzEoKFgpID0+IHtcbiAgICBkKFgpLCBPKCEhWCk7XG4gIH0sIFtdKTtcbiAgUDEoKCkgPT4ge1xuICAgIChyID09IG51bGwgPyB2b2lkIDAgOiByLmxlbmd0aCkgPT0gMCAmJiBBKFtdKTtcbiAgfSwgW3JdKTtcbiAgY29uc3QgTCA9IF8xKFxuICAgIChYKSA9PiB7XG4gICAgICBpZiAoYSlcbiAgICAgICAgaWYgKCFmKVxuICAgICAgICAgIEEoWCksIG8gJiYgbyhYKTtcbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgbGV0IEYgPSBbLi4uWCwgLi4udV07XG4gICAgICAgICAgRiA9PSBudWxsIHx8IEYubWFwKChULCB3KSA9PiB7XG4gICAgICAgICAgICBUICE9IG51bGwgJiYgVC50aW1lcyAmJiBGLnNwbGljZSh3LCAxKTtcbiAgICAgICAgICB9KSwgQShYKSwgbyAmJiBvKFgpO1xuICAgICAgICB9XG4gICAgICBlbHNlXG4gICAgICAgIEEoWCksIG8gJiYgbyhYKTtcbiAgICB9LFxuICAgIFt1XVxuICApLCB5ID0gKCkgPT4ge1xuICAgIGxldCBYID0gaSA9PSBudWxsID8gdm9pZCAwIDogaS5maWx0ZXIoXG4gICAgICAoRikgPT4ge1xuICAgICAgICB2YXIgVCwgdywgSCwgQywgcTtcbiAgICAgICAgcmV0dXJuIChGID09IG51bGwgPyB2b2lkIDAgOiBGLmNvdW50cnlMaXN0KSAhPSBudWxsID8gKHcgPSAoVCA9IEYgPT0gbnVsbCA/IHZvaWQgMCA6IEYuY291bnRyeUxpc3QpID09IG51bGwgPyB2b2lkIDAgOiBULmNvdW50cnlOYW1lKSA9PSBudWxsID8gdm9pZCAwIDogdy50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKHogPT0gbnVsbCA/IHZvaWQgMCA6IHoudG9Mb3dlckNhc2UoKSkgOiAoRiA9PSBudWxsID8gdm9pZCAwIDogRi50aW1lWm9uZSkgIT0gbnVsbCA/IChDID0gKEggPSBGID09IG51bGwgPyB2b2lkIDAgOiBGLnRpbWVab25lKSA9PSBudWxsID8gdm9pZCAwIDogSC56b25lKSA9PSBudWxsID8gdm9pZCAwIDogQy50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKHogPT0gbnVsbCA/IHZvaWQgMCA6IHoudG9Mb3dlckNhc2UoKSkgOiAocSA9IEYgPT0gbnVsbCA/IHZvaWQgMCA6IEYubGFiZWwpID09IG51bGwgPyB2b2lkIDAgOiBxLnRvTG93ZXJDYXNlKCkuaW5jbHVkZXMoeiA9PSBudWxsID8gdm9pZCAwIDogei50b0xvd2VyQ2FzZSgpKTtcbiAgICAgIH1cbiAgICApO1xuICAgIE0oWCk7XG4gIH07XG4gIFAxKCgpID0+IHtcbiAgICB5KCk7XG4gIH0sIFt6XSk7XG4gIGNvbnN0IEIgPSAoWCwgRikgPT4ge1xuICAgIGxldCBUID0gW107XG4gICAgRiA9PSBudWxsIHx8IEYuZmlsdGVyKCh3KSA9PiB7XG4gICAgICB3LnZhbHVlICE9IFgudmFsdWUgJiYgVC5wdXNoKHcpO1xuICAgIH0pLCBBKFQpLCBvICYmIG8oVCksIGcoVCk7XG4gIH07XG4gIHJldHVybiAvKiBAX19QVVJFX18gKi8gZTEoVTIsIHsgY2hpbGRyZW46IFtcbiAgICB0ICYmIC8qIEBfX1BVUkVfXyAqLyBjKHhwLCB7IGNoaWxkcmVuOiAvKiBAX19QVVJFX18gKi8gYyhcbiAgICAgIEc0LFxuICAgICAge1xuICAgICAgICBsYWJlbDogbCxcbiAgICAgICAgZ2V0VmFsdWU6IHYsXG4gICAgICAgIHZhbHVlOiBwLFxuICAgICAgICBwbGFjZWhvbGRlcjogc1xuICAgICAgfVxuICAgICkgfSksXG4gICAgLyogQF9fUFVSRV9fICovIGMoWVcsIHsgY2hpbGRyZW46IG4gJiYgKHUgPT0gbnVsbCA/IHZvaWQgMCA6IHUubWFwKChYKSA9PiAvKiBAX19QVVJFX18gKi8gYyhKTCwgeyBjaGlsZHJlbjogLyogQF9fUFVSRV9fICovIGModFMsIHsgY2hpbGRyZW46IC8qIEBfX1BVUkVfXyAqLyBlMShJdCwgeyBjaGlsZHJlbjogW1xuICAgICAgLyogQF9fUFVSRV9fICovIGMoVWUsIHsgY2hpbGRyZW46IFgubGFiZWwgfSksXG4gICAgICAoWCA9PSBudWxsID8gdm9pZCAwIDogWC5sYWJlbCkgJiYgLyogQF9fUFVSRV9fICovIGMoXG4gICAgICAgIGQzLFxuICAgICAgICB7XG4gICAgICAgICAgb25DbGljazogKCkgPT4gQihYLCB1KSxcbiAgICAgICAgICBjaGlsZHJlbjogLyogQF9fUFVSRV9fICovIGMoXG4gICAgICAgICAgICBaMSxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgbmFtZTogXCJDbG9zZVwiLFxuICAgICAgICAgICAgICBjb2xvcjogYCR7djIuYmxhY2t9YCxcbiAgICAgICAgICAgICAgc2l6ZTogXCJ4eHNcIlxuICAgICAgICAgICAgfVxuICAgICAgICAgIClcbiAgICAgICAgfVxuICAgICAgKVxuICAgIF0gfSkgfSkgfSkpKSB9KSxcbiAgICAvKiBAX19QVVJFX18gKi8gYyhcbiAgICAgIGR0LFxuICAgICAge1xuICAgICAgICAuLi5lLFxuICAgICAgICBkZWZhdWx0VmFsdWVzOiByLFxuICAgICAgICBzZWxlY3RlZExpc3RzOiB1LFxuICAgICAgICBkYXRhOiBiIHx8IGksXG4gICAgICAgIHNlbGVjdGVkT3B0aW9uczogTCxcbiAgICAgICAgcmVzZXRMaXN0OiBoLFxuICAgICAgICBoaWdoTGlnaHRTZWxlY3RlZE9wdGlvbnM6IG4sXG4gICAgICAgIG1heGhlaWdodDogMjQ1XG4gICAgICB9XG4gICAgKVxuICBdIH0pO1xufVxuZnVuY3Rpb24gR2koZSkge1xuICBjb25zdCB7XG4gICAgb25BcHBseUZpbHRlcjogdCxcbiAgICB2YWx1ZTogbyA9IG51bGwsXG4gICAgZGF0YTogbixcbiAgICBpc0Rpc2FibGVkOiByLFxuICAgIGJ1dHRvblRleHQ6IGksXG4gICAgb25DbGVhckZpbHRlcjogYSxcbiAgICBsYWJlbDogcyxcbiAgICBpc0ZpbHRlckNsZWFyZDogbCxcbiAgICAuLi5wXG4gIH0gPSBlLCBbZCwgYl0gPSBpbyghMSksIFtNLCB1XSA9IFQxKFtdKSwgW0EsIHpdID0gVDEoKSwgW2YsIE9dID0gVDEoITEpLCBoID0gXzEoKCkgPT4ge1xuICAgIHQgJiYgdChBKSwgYigpO1xuICB9LCBbdCwgYiwgTV0pLCBnID0gXzEoKCkgPT4ge1xuICAgIHUoXCJcIiksIHooW10pLCBhICYmIGEoKSwgdCAmJiBlLmlzTXVsdGkgJiYgdChcIlwiKSwgYigpO1xuICB9LCBbYV0pO1xuICBQMSgoKSA9PiB7XG4gICAgbyAmJiB1KG8pO1xuICB9LCBbb10pLCBQMSgoKSA9PiB7XG4gICAgbCB8fCB6KFtdKTtcbiAgfSwgW2xdKSwgUDEoKCkgPT4ge1xuICAgIHZhciBYLCBGO1xuICAgIGxldCBCO1xuICAgIGlmICh0eXBlb2YgTSA9PSBcIm9iamVjdFwiIHx8IHR5cGVvZiBvID09IFwib2JqZWN0XCIpXG4gICAgICBCID0gISEoTSAmJiAoKFggPSBPYmplY3Qua2V5cyhNKSkgPT0gbnVsbCA/IHZvaWQgMCA6IFgubGVuZ3RoKSA+IDAgfHwgbyAmJiAoKEYgPSBPYmplY3Qua2V5cyhvKSkgPT0gbnVsbCA/IHZvaWQgMCA6IEYubGVuZ3RoKSA+IDApO1xuICAgIGVsc2Uge1xuICAgICAgbGV0IFQgPSBvO1xuICAgICAgQiA9ICEhKChNID09IG51bGwgPyB2b2lkIDAgOiBNLmxlbmd0aCkgPiAwIHx8IFQgJiYgKFQgPT0gbnVsbCA/IHZvaWQgMCA6IFQubGVuZ3RoKSA+IDApO1xuICAgIH1cbiAgICBCICE9PSBmICYmIE8oQik7XG4gIH0sIFtvLCBNLCBmXSk7XG4gIGxldCB2ID0gbztcbiAgY29uc3QgTCA9IG0wKFxuICAgICgpID0+IC8qIEBfX1BVUkVfXyAqLyBjKFUyLCB7IGNoaWxkcmVuOiBBICE9IG51bGwgJiYgQS5sZW5ndGggJiYgKG8gIT0gbnVsbCAmJiBvLmxlbmd0aCkgPyAvKiBAX19QVVJFX18gKi8gYyhcbiAgICAgIGIzLFxuICAgICAge1xuICAgICAgICBpc0Rpc2FibGVkOiByLFxuICAgICAgICAkaXNBY3RpdmU6IGQsXG4gICAgICAgIG9uQ2xpY2s6IGIsXG4gICAgICAgIGlzRmlsdGVyZWQ6ICEhKCFkICYmIG8pLFxuICAgICAgICBjaGlsZHJlbjogLyogQF9fUFVSRV9fICovIGUxKEl0LCB7IGNoaWxkcmVuOiBbXG4gICAgICAgICAgLyogQF9fUFVSRV9fICovIGMoVWUsIHsgY2hpbGRyZW46IGkgfSksXG4gICAgICAgICAgLyogQF9fUFVSRV9fICovIGMoRGEsIHsgY2hpbGRyZW46IC8qIEBfX1BVUkVfXyAqLyBjKEFlLCB7IGNvdW50OiBvID09IG51bGwgPyB2b2lkIDAgOiBvLmxlbmd0aCB9KSB9KSxcbiAgICAgICAgICBkID8gLyogQF9fUFVSRV9fICovIGMoXG4gICAgICAgICAgICBaMSxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgbmFtZTogZCA/IFwiQ2hldnJvblVwRHJvcGRvd25cIiA6IFwiQ2hldnJvbkRvd25Ecm9wZG93blwiLFxuICAgICAgICAgICAgICBzaXplOiBcInh4c1wiXG4gICAgICAgICAgICB9XG4gICAgICAgICAgKSA6IC8qIEBfX1BVUkVfXyAqLyBjKGQzLCB7IG9uQ2xpY2s6IGcsIGNoaWxkcmVuOiAvKiBAX19QVVJFX18gKi8gYyhaMSwgeyBuYW1lOiBcIkNsb3NlXCIsIGNvbG9yOiBgJHt2Mi5ibGFja31gLCBzaXplOiBcInh4c1wiIH0pIH0pXG4gICAgICAgIF0gfSlcbiAgICAgIH1cbiAgICApIDogLyogQF9fUFVSRV9fICovIGMoXG4gICAgICBiMyxcbiAgICAgIHtcbiAgICAgICAgaXNEaXNhYmxlZDogcixcbiAgICAgICAgJGlzQWN0aXZlOiBkLFxuICAgICAgICBvbkNsaWNrOiBiLFxuICAgICAgICBpc0ZpbHRlcmVkOiAhISghZCAmJiBvKSxcbiAgICAgICAgY2hpbGRyZW46IC8qIEBfX1BVUkVfXyAqLyBlMShJdCwgeyBjaGlsZHJlbjogW1xuICAgICAgICAgIC8qIEBfX1BVUkVfXyAqLyBjKFVlLCB7IGNoaWxkcmVuOiBvICYmICh2ID09IG51bGwgPyB2b2lkIDAgOiB2LmxhYmVsKSB8fCBpIH0pLFxuICAgICAgICAgIG8gPyAvKiBAX19QVVJFX18gKi8gYyhkMywgeyBvbkNsaWNrOiBnLCBjaGlsZHJlbjogLyogQF9fUFVSRV9fICovIGMoWjEsIHsgbmFtZTogXCJDbG9zZVwiLCBjb2xvcjogYCR7djIuYmxhY2t9YCwgc2l6ZTogXCJ4eHNcIiB9KSB9KSA6IC8qIEBfX1BVUkVfXyAqLyBjKFxuICAgICAgICAgICAgWjEsXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIG5hbWU6IGQgPyBcIkNoZXZyb25VcERyb3Bkb3duXCIgOiBcIkNoZXZyb25Eb3duRHJvcGRvd25cIixcbiAgICAgICAgICAgICAgc2l6ZTogXCJ4eHNcIlxuICAgICAgICAgICAgfVxuICAgICAgICAgIClcbiAgICAgICAgXSB9KVxuICAgICAgfVxuICAgICkgfSksXG4gICAgW2IsIGQsIHIsIG8sIGldXG4gICksIHkgPSBfMShcbiAgICAoQikgPT4ge1xuICAgICAgQi5sZW5ndGggPyAoeihCKSwgdShCKSwgTyghMCkpIDogdHlwZW9mIEIgPT0gXCJvYmplY3RcIiAmJiAoeihCKSwgdShCLmxhYmVsKSwgTyghMCkpO1xuICAgIH0sXG4gICAgW01dXG4gICk7XG4gIHJldHVybiAvKiBAX19QVVJFX18gKi8gYyhcbiAgICBFcixcbiAgICB7XG4gICAgICAuLi5wLFxuICAgICAgYnV0dG9uOiBMLFxuICAgICAgaXNTaG93ZWQ6IGQsXG4gICAgICBpc0ZpbHRlclZhbHVlQ2hhbmdlZDogZixcbiAgICAgIG9uQXBwbHlGaWx0ZXI6IGgsXG4gICAgICBvbkNsZWFyRmlsdGVyOiBnLFxuICAgICAgaGFuZGxlRHJvcGRvd25TaG93ZWQ6IGIsXG4gICAgICBjaGlsZHJlbjogLyogQF9fUFVSRV9fICovIGMoXG4gICAgICAgIEduLFxuICAgICAgICB7XG4gICAgICAgICAgLi4ucCxcbiAgICAgICAgICBkYXRhOiBuLFxuICAgICAgICAgIGdldEZpbHRlcmVkVmFsdWU6IHksXG4gICAgICAgICAgaXNTZWFyY2hhYmxlOiAhMCxcbiAgICAgICAgICB2YWx1ZXM6IEEsXG4gICAgICAgICAgbGFiZWw6IHNcbiAgICAgICAgfVxuICAgICAgKVxuICAgIH1cbiAgKTtcbn1cbmNvbnN0IG9TID0gKHtcbiAgZmlsdGVyRGF0YTogZSxcbiAgaGFuZGxlRmlsdGVyVmFsdWU6IHQsXG4gIGZpbHRlclZhbHVlczogbyxcbiAgY2xlYXJGaWx0ZXI6IG5cbn0pID0+IHtcbiAgZnVuY3Rpb24gcihsKSB7XG4gICAgcmV0dXJuIGwgPT0gbnVsbCA/IHZvaWQgMCA6IGwubWFwKChwKSA9PiAoe1xuICAgICAgdmFsdWU6IHAsXG4gICAgICBsYWJlbDogcFxuICAgIH0pKTtcbiAgfVxuICBjb25zdCBbaSwgYV0gPSBUMSghMSk7XG4gIHJldHVybiBQMSgoKSA9PiB7XG4gICAgSlNPTi5zdHJpbmdpZnkobykgPT0gXCJ7fVwiICYmIGEoITApO1xuICB9LCBbb10pLCAvKiBAX19QVVJFX18gKi8gYyhcImRpdlwiLCB7IGNoaWxkcmVuOiAoKCkgPT4ge1xuICAgIHZhciBsLCBwLCBkLCBiLCBNLCB1LCBBLCB6LCBmLCBPLCBoLCBnLCB2LCBMLCB5O1xuICAgIHN3aXRjaCAoZS50eXBlKSB7XG4gICAgICBjYXNlIFwiaW5wdXRcIjpcbiAgICAgICAgcmV0dXJuIC8qIEBfX1BVUkVfXyAqLyBjKFxuICAgICAgICAgIGg4LFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGxhYmVsOiBlLmZpbHRlckxhYmVsID8gZS5maWx0ZXJMYWJlbCA6IHIyKGUuY29sdW1uSWQpLFxuICAgICAgICAgICAgYnV0dG9uVGV4dDogZS5maWx0ZXJMYWJlbCA/IGUuZmlsdGVyTGFiZWwgOiByMihlLmNvbHVtbklkKSxcbiAgICAgICAgICAgIG9uQXBwbHlGaWx0ZXI6IChCKSA9PiB7XG4gICAgICAgICAgICAgIHQoZS5jb2x1bW5JZCwgQik7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgdmFsdWU6IG9bZS5jb2x1bW5JZF0gfHwgXCJcIixcbiAgICAgICAgICAgIG9uQ2xlYXJGaWx0ZXI6ICgpID0+IG4oZS5jb2x1bW5JZClcbiAgICAgICAgICB9XG4gICAgICAgICk7XG4gICAgICBjYXNlIFwiZHJvcGRvd25cIjpcbiAgICAgICAgcmV0dXJuIC8qIEBfX1BVUkVfXyAqLyBjKHMwLCB7IGNoaWxkcmVuOiAvKiBAX19QVVJFX18gKi8gYyhcbiAgICAgICAgICBHaSxcbiAgICAgICAgICB7XG4gICAgICAgICAgICBidXR0b25UZXh0OiBlLmZpbHRlckxhYmVsID8gZS5maWx0ZXJMYWJlbCA6IHIyKGUuY29sdW1uSWQpLFxuICAgICAgICAgICAgcGxhY2Vob2xkZXI6IGBTZWFyY2ggJHtlLmZpbHRlckxhYmVsID8gZS5maWx0ZXJMYWJlbCA6IHIyKGUuY29sdW1uSWQpfWAsXG4gICAgICAgICAgICBpc1NlYXJjaGFibGU6ICEwLFxuICAgICAgICAgICAgZGF0YTogKGwgPSBlID09IG51bGwgPyB2b2lkIDAgOiBlLnNldHRpbmdzKSA9PSBudWxsID8gdm9pZCAwIDogbC5vcHRpb25zLFxuICAgICAgICAgICAgb25BcHBseUZpbHRlcjogKEIpID0+IHtcbiAgICAgICAgICAgICAgY29uc3QgWCA9IFtCXS5tYXAoXG4gICAgICAgICAgICAgICAgKEYpID0+IEYudmFsdWVcbiAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgdChlLmNvbHVtbklkLCBYKTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB2YWx1ZTogKHAgPSByKFxuICAgICAgICAgICAgICBvW2UuY29sdW1uSWRdXG4gICAgICAgICAgICApKSA9PSBudWxsID8gdm9pZCAwIDogcFswXSxcbiAgICAgICAgICAgIG9uQ2xlYXJGaWx0ZXI6ICgpID0+IG4oZS5jb2x1bW5JZCksXG4gICAgICAgICAgICBpc0ZpbHRlckNsZWFyZDogKChkID0gcihvW2UuY29sdW1uSWRdKSkgPT0gbnVsbCA/IHZvaWQgMCA6IGQubGVuZ3RoKSA+IDBcbiAgICAgICAgICB9XG4gICAgICAgICkgfSk7XG4gICAgICBjYXNlIFwiZGF0ZXJhbmdlXCI6XG4gICAgICAgIHJldHVybiAvKiBAX19QVVJFX18gKi8gYyhzMCwgeyBjaGlsZHJlbjogLyogQF9fUFVSRV9fICovIGMoXG4gICAgICAgICAgX0IsXG4gICAgICAgICAge1xuICAgICAgICAgICAgYnV0dG9uVGV4dDogZS5maWx0ZXJMYWJlbCA/IGUuZmlsdGVyTGFiZWwgOiByMihlLmNvbHVtbklkKSxcbiAgICAgICAgICAgIG9uQXBwbHlGaWx0ZXI6IChCKSA9PiB7XG4gICAgICAgICAgICAgIHQoZS5jb2x1bW5JZCwgW0IubWluLCBCLm1heF0pO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHZhbHVlOiBvW2UuY29sdW1uSWRdID8ge1xuICAgICAgICAgICAgICBtaW46IG9bZS5jb2x1bW5JZF1bMF0sXG4gICAgICAgICAgICAgIG1heDogb1tlLmNvbHVtbklkXVsxXVxuICAgICAgICAgICAgfSA6IHtcbiAgICAgICAgICAgICAgbWluOiBudWxsLFxuICAgICAgICAgICAgICBtYXg6IG51bGxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBvbkNsZWFyRmlsdGVyOiAoKSA9PiBuKGUuY29sdW1uSWQpXG4gICAgICAgICAgfVxuICAgICAgICApIH0pO1xuICAgICAgY2FzZSBcImFtb3VudFwiOlxuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgIC8vIEB0cy1pZ25vcmVcbiAgICAgICAgICAvKiBAX19QVVJFX18gKi8gYyhcbiAgICAgICAgICAgIFlxLFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICBidXR0b25UZXh0OiBlLmZpbHRlckxhYmVsID8gZS5maWx0ZXJMYWJlbCA6IHIyKGUuY29sdW1uSWQpLFxuICAgICAgICAgICAgICBzaG93RGVmYXVsdFZhbHVlOiBpLFxuICAgICAgICAgICAgICB2YWx1ZTogb1tlLmNvbHVtbklkXSB8fCBbMCwgMF0sXG4gICAgICAgICAgICAgIG9uQXBwbHlGaWx0ZXI6IChCKSA9PiB7XG4gICAgICAgICAgICAgICAgdChlLmNvbHVtbklkLCBCKSwgYSghMSk7XG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIG1pbjogKE0gPSAoYiA9IGUgPT0gbnVsbCA/IHZvaWQgMCA6IGUuc2V0dGluZ3MpID09IG51bGwgPyB2b2lkIDAgOiBiLnZhbHVlKSAhPSBudWxsICYmIE0ubWluID8gKEEgPSAodSA9IGUgPT0gbnVsbCA/IHZvaWQgMCA6IGUuc2V0dGluZ3MpID09IG51bGwgPyB2b2lkIDAgOiB1LnZhbHVlKSA9PSBudWxsID8gdm9pZCAwIDogQS5taW4gOiBudWxsLFxuICAgICAgICAgICAgICBtYXg6IChmID0gKHogPSBlID09IG51bGwgPyB2b2lkIDAgOiBlLnNldHRpbmdzKSA9PSBudWxsID8gdm9pZCAwIDogei52YWx1ZSkgIT0gbnVsbCAmJiBmLm1heCA/IChoID0gKE8gPSBlID09IG51bGwgPyB2b2lkIDAgOiBlLnNldHRpbmdzKSA9PSBudWxsID8gdm9pZCAwIDogTy52YWx1ZSkgPT0gbnVsbCA/IHZvaWQgMCA6IGgubWF4IDogbnVsbCxcbiAgICAgICAgICAgICAgb25DbGVhckZpbHRlcjogKCkgPT4ge1xuICAgICAgICAgICAgICAgIG4oZS5jb2x1bW5JZCksIGEoITApO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgKVxuICAgICAgICApO1xuICAgICAgY2FzZSBcImRyb3Bkb3duLW11bHRpXCI6XG4gICAgICAgIHJldHVybiAvKiBAX19QVVJFX18gKi8gYyhzMCwgeyBjaGlsZHJlbjogLyogQF9fUFVSRV9fICovIGMoXG4gICAgICAgICAgR2ksXG4gICAgICAgICAge1xuICAgICAgICAgICAgYnV0dG9uVGV4dDogZS5maWx0ZXJMYWJlbCA/IGUuZmlsdGVyTGFiZWwgOiByMihlLmNvbHVtbklkKSxcbiAgICAgICAgICAgIHBsYWNlaG9sZGVyOiBgU2VhcmNoICR7ZS5maWx0ZXJMYWJlbCA/IGUuZmlsdGVyTGFiZWwgOiByMihlLmNvbHVtbklkKX1gLFxuICAgICAgICAgICAgaXNTZWFyY2hhYmxlOiAhMCxcbiAgICAgICAgICAgIGlzTXVsdGk6ICEwLFxuICAgICAgICAgICAgZGF0YTogKGcgPSBlID09IG51bGwgPyB2b2lkIDAgOiBlLnNldHRpbmdzKSA9PSBudWxsID8gdm9pZCAwIDogZy5vcHRpb25zLFxuICAgICAgICAgICAgb25BcHBseUZpbHRlcjogKEIpID0+IHtcbiAgICAgICAgICAgICAgY29uc3QgWCA9IEIubWFwKFxuICAgICAgICAgICAgICAgIChGKSA9PiBGLnZhbHVlXG4gICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgIHQoZS5jb2x1bW5JZCwgWCk7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgdmFsdWU6IHIoXG4gICAgICAgICAgICAgIG9bZS5jb2x1bW5JZF1cbiAgICAgICAgICAgICksXG4gICAgICAgICAgICBvbkNsZWFyRmlsdGVyOiAoKSA9PiBuKGUuY29sdW1uSWQpLFxuICAgICAgICAgICAgaXNGaWx0ZXJDbGVhcmQ6ICgodiA9IHIob1tlLmNvbHVtbklkXSkpID09IG51bGwgPyB2b2lkIDAgOiB2Lmxlbmd0aCkgPiAwXG4gICAgICAgICAgfVxuICAgICAgICApIH0pO1xuICAgICAgY2FzZSBcImRyb3Bkb3duLW11bHRpLWNoaXBcIjpcbiAgICAgICAgcmV0dXJuIC8qIEBfX1BVUkVfXyAqLyBjKHMwLCB7IGNoaWxkcmVuOiAvKiBAX19QVVJFX18gKi8gYyhcbiAgICAgICAgICBHaSxcbiAgICAgICAgICB7XG4gICAgICAgICAgICBidXR0b25UZXh0OiBlLmZpbHRlckxhYmVsID8gZS5maWx0ZXJMYWJlbCA6IHIyKGUuY29sdW1uSWQpLFxuICAgICAgICAgICAgcGxhY2Vob2xkZXI6IGBTZWFyY2ggJHtlLmZpbHRlckxhYmVsID8gZS5maWx0ZXJMYWJlbCA6IHIyKGUuY29sdW1uSWQpfWAsXG4gICAgICAgICAgICBpc1NlYXJjaGFibGU6ICEwLFxuICAgICAgICAgICAgaXNNdWx0aTogITAsXG4gICAgICAgICAgICBoaWdoTGlnaHRTZWxlY3RlZE9wdGlvbnM6ICEwLFxuICAgICAgICAgICAgZGF0YTogKEwgPSBlID09IG51bGwgPyB2b2lkIDAgOiBlLnNldHRpbmdzKSA9PSBudWxsID8gdm9pZCAwIDogTC5vcHRpb25zLFxuICAgICAgICAgICAgb25BcHBseUZpbHRlcjogKEIpID0+IHtcbiAgICAgICAgICAgICAgY29uc3QgWCA9IEIubWFwKFxuICAgICAgICAgICAgICAgIChGKSA9PiBGLnZhbHVlXG4gICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgIHQoZS5jb2x1bW5JZCwgWCk7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgdmFsdWU6IHIoXG4gICAgICAgICAgICAgIG9bZS5jb2x1bW5JZF1cbiAgICAgICAgICAgICksXG4gICAgICAgICAgICBvbkNsZWFyRmlsdGVyOiAoKSA9PiBuKGUuY29sdW1uSWQpLFxuICAgICAgICAgICAgaXNGaWx0ZXJDbGVhcmQ6ICgoeSA9IHIob1tlLmNvbHVtbklkXSkpID09IG51bGwgPyB2b2lkIDAgOiB5Lmxlbmd0aCkgPiAwXG4gICAgICAgICAgfVxuICAgICAgICApIH0pO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuIC8qIEBfX1BVUkVfXyAqLyBjKFxuICAgICAgICAgIGg4LFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGxhYmVsOiBlLmZpbHRlckxhYmVsID8gZS5maWx0ZXJMYWJlbCA6IHIyKGUuY29sdW1uSWQpLFxuICAgICAgICAgICAgYnV0dG9uVGV4dDogZS5maWx0ZXJMYWJlbCA/IGUuZmlsdGVyTGFiZWwgOiByMihlLmNvbHVtbklkKSxcbiAgICAgICAgICAgIG9uQXBwbHlGaWx0ZXI6IChCKSA9PiB7XG4gICAgICAgICAgICAgIHQoZS5jb2x1bW5JZCwgQik7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgdmFsdWU6IG9bZS5jb2x1bW5JZF0gfHwgXCJcIixcbiAgICAgICAgICAgIG9uQ2xlYXJGaWx0ZXI6ICgpID0+IG4oZS5jb2x1bW5JZClcbiAgICAgICAgICB9XG4gICAgICAgICk7XG4gICAgfVxuICB9KSgpIH0pO1xufSwgclMgPSAkLmRpdmBcbiAgZGlzcGxheTogZmxleDtcbiAgbWFyZ2luLWxlZnQ6IGF1dG87XG4gIGFsaWduLWl0ZW1zOiBmbGV4LXN0YXJ0O1xuXG4gIC5za2VsZXRvbi1jaGlsZC1jb250YWluZXIge1xuICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgbWFyZ2luLWxlZnQ6IGF1dG87XG4gICAgYWxpZ24taXRlbXM6IGZsZXgtc3RhcnQ7XG4gICAgPiAqIHtcbiAgICAgIG1hcmdpbi1sZWZ0OiAkeyh7IHRoZW1lOiBlIH0pID0+IGUuc3BhY2luZ3Muc3A4fTtcbiAgICB9XG4gIH1cbmAsIG5TID0gJC5kaXZgXG4gICR7UHR9IHtcbiAgICBtaW4td2lkdGg6IG1heC1jb250ZW50O1xuICB9XG5gO1xuJC5kaXZgXG4gIHdpZHRoOiAxMDAlO1xuICBkaXNwbGF5OiBmbGV4O1xuICBhbGlnbi1pdGVtczogY2VudGVyO1xuICBtYXJnaW4tYm90dG9tOiAkeyh7IHRoZW1lOiBlIH0pID0+IGUuc3BhY2luZ3Muc3A4fTtcbmA7XG4kLmRpdmBcbiAgZGlzcGxheTogZmxleDtcblxuICA+ICoge1xuICAgIG1hcmdpbi1yaWdodDogJHsoeyB0aGVtZTogZSB9KSA9PiBlLnNwYWNpbmdzLnNwOH07XG4gIH1cbmA7XG4kLnNwYW4oXG4gICh7IHRoZW1lOiBlIH0pID0+IG8xYFxuICAgIGRpc3BsYXk6IGlubGluZS1mbGV4O1xuICAgIGZvbnQtZmFtaWx5OiAke2UuZm9udEZhbWlseS5iYXNlfTtcbiAgICBmb250LXNpemU6ICR7ZS50eXBvZ3JhcGh5LnQxNH07XG4gICAgbGluZS1oZWlnaHQ6ICR7ZS5saW5lSGVpZ2h0LmxoMjJ9O1xuICAgIGNvbG9yOiAke2UuY29sb3JzLmJsdWV9O1xuICAgIHBhZGRpbmc6IDAuMzEyNXJlbSAwLjYyNXJlbTtcbiAgICBjdXJzb3I6IHBvaW50ZXI7XG4gICAgdXNlci1zZWxlY3Q6IG5vbmU7XG4gIGBcbik7XG4kLmRpdmBcbiAgZGlzcGxheTogZmxleDtcbiAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG5gO1xuY29uc3QgaVMgPSAkLmRpdmBcbiAgbWFyZ2luLWJvdHRvbTogOHB4O1xuICA+IGRpdiB7XG4gICAgcGFkZGluZzogMDtcbiAgfVxuXG4gICR7KGUpID0+IGUubG9hZGluZyAmJiBvMWBcbiAgICAgIHBhZGRpbmctbGVmdDogMTBweDtcbiAgICAgIC5za2VsZXRvbi1jb250YWluZXIge1xuICAgICAgICBkaXYge1xuICAgICAgICAgIG9wYWNpdHk6IDA7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICBgfVxuYCwgYVMgPSAkLmRpdmBcbiAgZGlzcGxheTogZmxleDtcbiAganVzdGlmeS1jb250ZW50OiBmbGV4LXN0YXJ0O1xuICBhbGlnbi1pdGVtczogY2VudGVyO1xuICBnYXA6IDRweDtcbiAgcGFkZGluZzogOHB4IDAgMCAwcHg7XG5gLCBzUyA9ICQuZGl2YGAsIGNTID0gJC5kaXZgXG4gID4gZGl2IHtcbiAgICBwYWRkaW5nOiAwO1xuICB9XG5gLCBsUyA9ICQuZGl2YFxuICBkaXNwbGF5OiBmbGV4O1xuICBqdXN0aWZ5LWNvbnRlbnQ6IGZsZXgtc3RhcnQ7XG4gIGdhcDogOHB4O1xuICBhbGlnbi1pdGVtczogc3RyZXRjaDtcbmAsIFFpID0gJC5kaXZgXG4gICR7KGUpID0+IGUuJGl0ZW1zID09PSBcInRhYnNcIiAmJiBvMWBcbiAgICAgIGZsZXgtYmFzaXM6IDEzNnB4O1xuICAgIGB9XG5cbiAgJHsoZSkgPT4gZS4kaXRlbXMgPT09IFwiZGl2aWRlclwiICYmIG8xYFxuICAgICAgZmxleC1iYXNpczogNHB4O1xuICAgIGB9XG5cbiAgICAkeyhlKSA9PiBlLiRpdGVtcyA9PT0gXCJjb250ZW50XCIgJiYgbzFgXG4gICAgICBmbGV4LWdyb3c6IDE7XG4gICAgYH1cblxuICAgICR7KGUpID0+IGUuJHRhYnNNYXhIZWlnaHQgPT0gITAgJiYgbzFgXG4gICAgICAuc2Nyb2xsYmFyLWNvbnRhaW5lciB7XG4gICAgICAgIHBhZGRpbmctcmlnaHQ6IDEwcHg7XG4gICAgICB9XG4gICAgYH1cbmAsIHBTID0gJC5kaXZgXG4gIC5kYXRlLXJhbmdlLWNvbnRhaW5lciB7XG4gICAgZGlzcGxheTogZmxleDtcbiAgICBqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWJldHdlZW47XG5cbiAgICBhbGlnbi1pdGVtczogY2VudGVyO1xuICAgIGdhcDogMTZweDtcbiAgICAmID4gZGl2IHtcbiAgICAgIG1hcmdpbi10b3A6IDA7XG4gICAgfVxuICB9XG5gLCBIcCA9ICQoQjIpKFxuICAoeyB0aGVtZTogeyBib3JkZXJSYWRpdXM6IGUgfSwgc2l6ZTogdCwgYnV0dG9uVHlwZTogbyB9KSA9PiB7XG4gICAgY29uc3QgbiA9IHQgPT09IFA1LlNNQUxMO1xuICAgIHJldHVybiBvMWBcbiAgICAgICR7bm99IHtcbiAgICAgICAgd2lkdGg6ICR7biA/IFwiMTJweFwiIDogXCIxNnB4XCJ9O1xuICAgICAgICBwYWRkaW5nOiAke24gPyBcIjdweFwiIDogXCI5cHhcIn07XG4gICAgICAgICoge1xuICAgICAgICAgIG1heC13aWR0aDogMTAwJTtcbiAgICAgICAgICBoZWlnaHQ6IDEwMCU7XG4gICAgICAgIH1cbiAgICAgICAgYm9yZGVyLXJhZGl1czogJHtlLmJhc2V9O1xuICAgICAgICAke28gPT0gbnQuTUlOSSAmJiBvMWBcbiAgICAgICAgICB3aWR0aDogMTBweDtcbiAgICAgICAgICBwYWRkaW5nOiA1cHg7XG4gICAgICAgICAgJiBzdmcge1xuICAgICAgICAgICAgd2lkdGg6IDEwcHg7XG4gICAgICAgICAgfVxuICAgICAgICBgfVxuICAgICAgfVxuICAgIGA7XG4gIH1cbiksIFYzID0gJChIcCkoXG4gICh7IHRoZW1lOiB7IGNvbG9yczogZSwgc2hhZG93czogdCB9LCBidXR0b25UeXBlOiBvIH0pID0+IG8xYFxuICAgICAgcGFkZGluZzogM3B4O1xuICAgICAgbWluLXdpZHRoOiBhdXRvO1xuICAgICAgJHtvID09IG50Lk1JTkkgJiYgbzFgXG4gICAgICAgIGJhY2tncm91bmQtY29sb3I6ICR7ZS5iYWNrZ3JvdW5kcy5iZ1ByaW1hcnl9O1xuICAgICAgICBjb2xvcjogJHtlLnRleHRJY29uLnRleHRQcmltYXJ5fTtcbiAgICAgICAgcGFkZGluZzogMHB4O1xuICAgICAgICBib3gtc2hhZG93OiBub25lO1xuICAgICAgICBtaW4taGVpZ2h0OiAyMHB4O1xuICAgICAgICBtaW4td2lkdGg6IDIwcHg7XG4gICAgICAgIG1heC1oZWlnaHQ6IDIwcHg7XG4gICAgICAgIG1heC13aWR0aDogMjBweDtcbiAgICAgICAgZGlzcGxheTogYmxvY2s7XG4gICAgICAgIGJveC1zaXppbmc6IGJvcmRlci1ib3g7XG4gICAgICAgICY6bm90KDpkaXNhYmxlZCk6aG92ZXIge1xuICAgICAgICAgIGJhY2tncm91bmQtY29sb3I6ICR7ZS5iYWNrZ3JvdW5kcy5iZ0hvdmVyUHJpbWFyeX07XG4gICAgICAgICAgY29sb3I6ICR7ZS50ZXh0SWNvbi50ZXh0UHJpbWFyeX07XG4gICAgICAgICAgcGFkZGluZzogMHB4O1xuICAgICAgICAgIGJveC1zaGFkb3c6IG5vbmU7XG4gICAgICAgIH1cbiAgICAgICAgJjpub3QoOmRpc2FibGVkKTpmb2N1cyB7XG4gICAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogJHtlLmJhY2tncm91bmRzLmJnUHJpbWFyeX07XG4gICAgICAgICAgY29sb3I6ICR7ZS50ZXh0SWNvbi50ZXh0UHJpbWFyeX07XG4gICAgICAgIH1cbiAgICAgICAgJjpub3QoOmRpc2FibGVkKTphY3RpdmUge1xuICAgICAgICAgIGJhY2tncm91bmQtY29sb3I6ICR7ZS5iYWNrZ3JvdW5kcy5iZ1ByZXNzZWR9O1xuICAgICAgICAgIGNvbG9yOiAke2UudGV4dEljb24udGV4dFRlcnRpYXJ5fTtcbiAgICAgICAgICBwYWRkaW5nOiAwcHg7XG4gICAgICAgICAgYm94LXNoYWRvdzogbm9uZTtcbiAgICAgICAgfVxuICAgICAgICAmW2FyaWEtZGlzYWJsZWQ9J3RydWUnXSB7XG4gICAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogJHtlLmJhY2tncm91bmRzLmJnRGlzYWJsZWRQcmltYXJ5fTtcbiAgICAgICAgICBjb2xvcjogJHtlLnRleHRJY29uLnRleHREaXNhYmxlZE9uYmd9O1xuICAgICAgICB9XG4gICAgICBgfVxuICAgIGBcbik7XG5mdW5jdGlvbiBHMihlKSB7XG4gIGNvbnN0IHtcbiAgICBuYW1lOiB0LFxuICAgIHRvb2x0aXBUZXh0OiBvLFxuICAgIGlzRGlzYWJsZWQ6IG4sXG4gICAgaXNUb29sdGlwOiByLFxuICAgIHRvb2xUaXBQb3NpdGlvbjogaSxcbiAgICBidXR0b25UeXBlOiBhLFxuICAgIC4uLnNcbiAgfSA9IGU7XG4gIHJldHVybiAvKiBAX19QVVJFX18gKi8gZTEoVTIsIHsgY2hpbGRyZW46IFtcbiAgICBhID09IG50Lk1JTkkgJiYgKHIgJiYgIW4gPyAvKiBAX19QVVJFX18gKi8gYyhBMywgeyB0ZXh0OiBvLCBwbGFjZTogaSwgc2l6ZTogXCJtaW5pXCIsIGNoaWxkcmVuOiAvKiBAX19QVVJFX18gKi8gYyhcbiAgICAgIFYzLFxuICAgICAge1xuICAgICAgICBpc0Rpc2FibGVkOiBuLFxuICAgICAgICBidXR0b25UeXBlOiBhLFxuICAgICAgICAuLi5zLFxuICAgICAgICBjaGlsZHJlbjogLyogQF9fUFVSRV9fICovIGMoWjEsIHsgbmFtZTogdCwgc2l6ZTogXCJ4eHhzXCIgfSlcbiAgICAgIH1cbiAgICApIH0pIDogLyogQF9fUFVSRV9fICovIGMoXG4gICAgICBWMyxcbiAgICAgIHtcbiAgICAgICAgaXNEaXNhYmxlZDogbixcbiAgICAgICAgYnV0dG9uVHlwZTogYSxcbiAgICAgICAgLi4ucyxcbiAgICAgICAgY2hpbGRyZW46IC8qIEBfX1BVUkVfXyAqLyBjKFoxLCB7IG5hbWU6IHQgfSlcbiAgICAgIH1cbiAgICApKSxcbiAgICBhICE9IG50Lk1JTkkgJiYgLyogQF9fUFVSRV9fICovIGMoXG4gICAgICBWMyxcbiAgICAgIHtcbiAgICAgICAgaXNEaXNhYmxlZDogbixcbiAgICAgICAgYnV0dG9uVHlwZTogYSxcbiAgICAgICAgLi4ucyxcbiAgICAgICAgY2hpbGRyZW46IC8qIEBfX1BVUkVfXyAqLyBjKFoxLCB7IG5hbWU6IHQgfSlcbiAgICAgIH1cbiAgICApXG4gIF0gfSk7XG59XG5jb25zdCBkUyA9ICQuZGl2KFxuICAoeyB0aGVtZTogeyBjb2xvcnM6IGUgfSB9KSA9PiB7XG4gICAgY29uc3QgdCA9IGByZ2JhKCR7cTIoZS5iYWNrZ3JvdW5kcy5ibGFja092ZXJsYXkpfSwgMC42KWA7XG4gICAgcmV0dXJuIG8xYFxuICAgICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgICAgdG9wOiAwO1xuICAgICAgcmlnaHQ6IDA7XG4gICAgICBib3R0b206IDA7XG4gICAgICBsZWZ0OiAwO1xuICAgICAgYmFja2dyb3VuZC1jb2xvcjogJHt0fTtcbiAgICAgIHotaW5kZXg6IDI7XG4gICAgYDtcbiAgfVxuKTtcbiQuZGl2YFxuICAvKiB3aWR0aDogMzIwcHg7ICovXG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcbmA7XG4kLmRpdmBcbiAgd2lkdGg6IGNhbGMoMTAwJSAtIDQwcHgpO1xuICBoZWlnaHQ6IDUwMHB4O1xuICBtYXJnaW4tYm90dG9tOiAxMHB4O1xuICBwYWRkaW5nOiAyMHB4O1xuICBwb3NpdGlvbjogcmVsYXRpdmU7XG5gO1xuY29uc3QgYlMgPSAoe30sIGUpID0+IC8qIEBfX1BVUkVfXyAqLyBjKGRTLCB7IHJlZjogZSB9KSwgTVMgPSBCMChiUyksIFFuID0ge1xuICBTTUFMTDogbjIuU01BTEwsXG4gIE1FRElVTTogbjIuTUVESVVNLFxuICBMQVJHRTogbjIuTEFSR0Vcbn0sIGk5ID0gNCwgQVMgPSB1dGBcbiAgMCUge1xuICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWSgtMTBweCk7XG4gIH1cbiAgMTAwJSB7XG4gICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKDBweCk7XG4gIH1cbmAsIHVTID0gJC5kaXYoXG4gICh7IHRoZW1lOiB7IGN1YmljQmV6aWVyOiBlLCBhbmltYXRpb25zOiB0LCBzcGFjaW5nczogbyB9IH0pID0+IG8xYFxuICAgIHBvc2l0aW9uOiBmaXhlZDtcbiAgICB6LWluZGV4OiA5O1xuICAgIHRvcDogMDtcbiAgICBib3R0b206IDA7XG4gICAgbGVmdDogMDtcbiAgICByaWdodDogMDtcbiAgICBkaXNwbGF5OiBmbGV4O1xuICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XG4gICAgcGFkZGluZzogJHtvLnNwNDh9O1xuICAgIGFuaW1hdGlvbi1kdXJhdGlvbjogMC4zcztcbiAgICBhbmltYXRpb24tdGltaW5nLWZ1bmN0aW9uOiAke2V9O1xuICAgIGFuaW1hdGlvbi1maWxsLW1vZGU6IGZvcndhcmRzO1xuICAgIGFuaW1hdGlvbi1uYW1lOiAke3QuZmFkZUlufTtcbiAgYFxuKSwgelMgPSAkLmRpdihcbiAgKHtcbiAgICB0aGVtZTogeyBjb2xvcnM6IGUsIGN1YmljQmV6aWVyOiB0LCBzcGFjaW5nczogbyB9LFxuICAgIHNpemU6IG4sXG4gICAgaXNSZXNpemU6IHIsXG4gICAgaXNGaWx0ZXJNb2RhbDogaVxuICB9KSA9PiB7XG4gICAgbGV0IGE7XG4gICAgc3dpdGNoIChuKSB7XG4gICAgICBjYXNlIFFuLkxBUkdFOlxuICAgICAgICBhID0gMTI2NDtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIFFuLk1FRElVTTpcbiAgICAgICAgYSA9IDYxMjtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIFFuLlNNQUxMOlxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgYSA9IDQ2NDtcbiAgICB9XG4gICAgcmV0dXJuIG8xYFxuICAgICAgZGlzcGxheTogZmxleDtcbiAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG4gICAgICBqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWJldHdlZW47XG4gICAgICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gICAgICB6LWluZGV4OiAzO1xuICAgICAgd2lkdGg6ICR7YX1weDtcbiAgICAgIG1heC13aWR0aDogMTAwJTtcbiAgICAgIG1heC1oZWlnaHQ6IDEwMCU7XG4gICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAke2UuYmFja2dyb3VuZHMuYmdQcmltYXJ5fTtcbiAgICAgIGJveC1zaXppbmc6IGJvcmRlci1ib3g7XG4gICAgICBhbmltYXRpb24tZHVyYXRpb246IDEuNXM7XG4gICAgICBhbmltYXRpb24tdGltaW5nLWZ1bmN0aW9uOiAke3R9O1xuICAgICAgYW5pbWF0aW9uLWZpbGwtbW9kZTogZm9yd2FyZHM7XG4gICAgICBhbmltYXRpb24tbmFtZTogJHtBU307XG4gICAgICBib3JkZXItcmFkaXVzOiAke28uc3A4fTtcbiAgICAgIHJlc2l6ZTogJHtyID8gXCJib3RoXCIgOiBcIm5vbmVcIn07XG4gICAgICBoMyB7XG4gICAgICAgIG1hcmdpbjogMDtcbiAgICAgICAgcGFkZGluZzogMTJweCAxMnB4ICR7by5zcDh9ICR7by5zcDE2fTtcbiAgICAgIH1cbiAgICAgIC5jbG9zZS1idG4ge1xuICAgICAgICAuaWNvbi1zeXN0ZW0ge1xuICAgICAgICAgIGNvbG9yOiAke2UudGV4dEljb24udGV4dFByaW1hcnl9O1xuICAgICAgICB9XG4gICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICAgICAgei1pbmRleDogMTtcbiAgICAgICAgdG9wOiAke28uc3AxMn07XG4gICAgICAgIHJpZ2h0OiAke28uc3AxMn07XG4gICAgICAgIGJhY2tncm91bmQtY29sb3I6ICR7ZS5iYWNrZ3JvdW5kcy5iZ1ByaW1hcnl9O1xuICAgICAgICBib3gtc2hhZG93OiBub25lO1xuICAgICAgfVxuICAgICAgJHshaSAmJiBvMWBcbiAgICAgICAgb3ZlcmZsb3cteTogYXV0bztcbiAgICAgIGB9XG4gICAgYDtcbiAgfVxuKSwgaFMgPSAkLmRpdihcbiAgKHsgdGhlbWU6IHsgc3BhY2luZ3M6IGUgfSB9KSA9PiBvMWBcbiAgICBkaXNwbGF5OiBmbGV4O1xuICAgIGp1c3RpZnktY29udGVudDogZmxleC1lbmQ7XG4gICAgZmxleC13cmFwOiB3cmFwO1xuICAgIHBhZGRpbmc6ICR7ZS5zcDEyfTtcbiAgICAke1B0fSB7XG4gICAgICBtYXJnaW4tbGVmdDogJHtlLnNwOH07XG4gICAgfVxuICBgXG4pO1xuJC5wKFxuICAoeyB0aGVtZTogeyBjb2xvcnM6IGUsIGxpbmVIZWlnaHQ6IHQsIHR5cG9ncmFwaHk6IG8gfSB9KSA9PiBvMWBcbiAgICBmb250LXNpemU6ICR7by50MTR9O1xuICAgIGxpbmUtaGVpZ2h0OiAke3QubGgyMn07XG4gICAgY29sb3I6ICR7ZS5ncmV5fTtcbiAgICBtYXJnaW46IDA7XG4gIGBcbik7XG5jb25zdCBPUyA9ICQuaDMoXG4gICh7IHRoZW1lOiB7IGNvbG9yczogZSwgbGluZUhlaWdodDogdCwgdHlwb2dyYXBoeTogbywgZm9udFdlaWdodDogbiB9IH0pID0+IG8xYFxuICAgIGZvbnQtc2l6ZTogJHtvLnQxOH07XG4gICAgbGluZS1oZWlnaHQ6ICR7dC5saDMyfTtcbiAgICBmb250LXdlaWdodDogJHtuLm1lZGl1bX07XG4gICAgY29sb3I6ICR7ZS50ZXh0SWNvbi50ZXh0SGlnaGVtcGhhc2lzfTtcbiAgYFxuKTtcbiQuZGl2YFxuICBkaXNwbGF5OiBmbGV4O1xuICBhbGlnbi1pdGVtczogY2VudGVyO1xuICBqdXN0aWZ5LWNvbnRlbnQ6IGZsZXgtc3RhcnQ7XG5gO1xuJC5kaXZgXG4gIGJvcmRlci1sZWZ0OiAycHggc29saWQgcmdiYSgyMjksIDIyOSwgMjI5LCAxKTtcbiAgaGVpZ2h0OiAyOHB4O1xuICBtYXJnaW46IDEycHg7XG5gO1xuY29uc3QgZlMgPSAkLmRpdihcbiAgKHsgdGhlbWU6IHsgc3BhY2luZ3M6IGUsIGNvbG9yczogdCwgYm9yZGVyUmFkaXVzOiBvIH0gfSkgPT4gbzFgXG4gICAgcGFkZGluZzogJHtlLnNwNn07XG4gICAgbWFyZ2luOiAxMHB4O1xuICAgIG92ZXJmbG93OiBoaWRkZW47XG4gICAgb3ZlcmZsb3cteTogYXV0bztcblxuICAgICY6Oi13ZWJraXQtc2Nyb2xsYmFyIHtcbiAgICAgIGhlaWdodDogJHtpOX1weDtcbiAgICAgIHdpZHRoOiAke2k5fXB4O1xuICAgIH1cbiAgICAmOjotd2Via2l0LXNjcm9sbGJhci10cmFjayB7XG4gICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAke3Quc2Nyb2xsLnNjcm9sbEJnUHJpbWFyeX07XG4gICAgICBib3JkZXItcmFkaXVzOiAke28ueGx9O1xuICAgIH1cblxuICAgICY6Oi13ZWJraXQtc2Nyb2xsYmFyLXRodW1iIHtcbiAgICAgIGJhY2tncm91bmQtY29sb3I6ICR7dC5zY3JvbGwuc2Nyb2xsQmdEZWZhdWx0fTtcbiAgICB9XG4gICAgLyogSGFuZGxlIG9uIGhvdmVyICovXG4gICAgJjo6LXdlYmtpdC1zY3JvbGxiYXItdGh1bWI6aG92ZXIge1xuICAgICAgYmFja2dyb3VuZC1jb2xvcjogJHt0LnNjcm9sbC5zY3JvbGxCZ0hvdmVyfTtcbiAgICB9XG4gICAgJjo6LXdlYmtpdC1zY3JvbGxiYXItdGh1bWI6YWN0aXZlIHtcbiAgICAgIGJhY2tncm91bmQtY29sb3I6ICR7dC5zY3JvbGwuc2Nyb2xsQmdQcmVzc2VkfTtcbiAgICB9XG4gIGBcbik7XG5mdW5jdGlvbiBnUyh7XG4gIGlzT3BlbjogZSA9ICExLFxuICBzaXplOiB0ID0gUW4uU01BTEwsXG4gIGhhc0Nsb3NlQnV0dG9uOiBvID0gITEsXG4gIHByZXZlbnRDbG9zZU9uQ2xpY2tPdXRzaWRlOiBuID0gITEsXG4gIG9uQ2xvc2U6IHIsXG4gIGNoaWxkcmVuOiBpLFxuICBjb250YWluZXI6IGEsXG4gIGFjdGlvbnNHcm91cDogcyxcbiAgdGl0bGU6IGwsXG4gIGlzUmVzaXplOiBwLFxuICBpc0ZpbHRlck1vZGFsOiBkXG59LCBiKSB7XG4gIGNvbnN0IE0gPSBuMChudWxsKTtcbiAgcmV0dXJuIFU1KE0sICFuLCByKSwgUDEoKCkgPT4gKGUgJiYgKHdpbmRvdy5kb2N1bWVudC5ib2R5LnN0eWxlLm92ZXJmbG93ID0gXCJoaWRkZW5cIiksICgpID0+IHtcbiAgICB3aW5kb3cuZG9jdW1lbnQuYm9keS5zdHlsZS5vdmVyZmxvdyA9IFwidmlzaWJsZVwiO1xuICB9KSwgW2VdKSwgZSA/IC8qIEBfX1BVUkVfXyAqLyBjKExsLCB7IGNvbnRhaW5lcjogYSwgY2hpbGRyZW46IC8qIEBfX1BVUkVfXyAqLyBlMSh1UywgeyByZWY6IGIsIGNoaWxkcmVuOiBbXG4gICAgLyogQF9fUFVSRV9fICovIGMoTVMsIHt9KSxcbiAgICAvKiBAX19QVVJFX18gKi8gZTEoXG4gICAgICB6UyxcbiAgICAgIHtcbiAgICAgICAgc2l6ZTogdCxcbiAgICAgICAgcmVmOiBNLFxuICAgICAgICBpc1Jlc2l6ZTogcCxcbiAgICAgICAgaXNGaWx0ZXJNb2RhbDogZCxcbiAgICAgICAgY2hpbGRyZW46IFtcbiAgICAgICAgICAvKiBAX19QVVJFX18gKi8gZTEoXCJkaXZcIiwgeyBjaGlsZHJlbjogW1xuICAgICAgICAgICAgdHlwZW9mIGwgPT0gXCJzdHJpbmdcIiA/IC8qIEBfX1BVUkVfXyAqLyBlMShzMCwgeyBjaGlsZHJlbjogW1xuICAgICAgICAgICAgICAvKiBAX19QVVJFX18gKi8gYyhPUywgeyBjaGlsZHJlbjogbCB9KSxcbiAgICAgICAgICAgICAgLyogQF9fUFVSRV9fICovIGMoUDIsIHsgJGRlZmF1bHQ6ICEwIH0pXG4gICAgICAgICAgICBdIH0pIDogLyogQF9fUFVSRV9fICovIGUxKHMwLCB7IGNoaWxkcmVuOiBbXG4gICAgICAgICAgICAgIGwsXG4gICAgICAgICAgICAgIC8qIEBfX1BVUkVfXyAqLyBjKFAyLCB7ICRkZWZhdWx0OiAhMCB9KVxuICAgICAgICAgICAgXSB9KSxcbiAgICAgICAgICAgIG8gJiYgLyogQF9fUFVSRV9fICovIGMoXG4gICAgICAgICAgICAgIEcyLFxuICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgYnV0dG9uVHlwZTogXCJ0ZXJ0aWFyeVwiLFxuICAgICAgICAgICAgICAgIG5hbWU6IFwiQ3Jvc3NcIixcbiAgICAgICAgICAgICAgICBjbGFzc05hbWU6IFwiY2xvc2UtYnRuXCIsXG4gICAgICAgICAgICAgICAgb25DbGljazogcixcbiAgICAgICAgICAgICAgICBzaXplOiBcInNtXCJcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgKVxuICAgICAgICAgIF0gfSksXG4gICAgICAgICAgLyogQF9fUFVSRV9fICovIGMoZlMsIHsgY2hpbGRyZW46IGkgfSksXG4gICAgICAgICAgLyogQF9fUFVSRV9fICovIGMoXCJkaXZcIiwgeyBjaGlsZHJlbjogcyAmJiAvKiBAX19QVVJFX18gKi8gZTEoczAsIHsgY2hpbGRyZW46IFtcbiAgICAgICAgICAgIC8qIEBfX1BVUkVfXyAqLyBjKFAyLCB7ICRkZWZhdWx0OiAhMCB9KSxcbiAgICAgICAgICAgIC8qIEBfX1BVUkVfXyAqLyBjKGhTLCB7IGNoaWxkcmVuOiBzIH0pXG4gICAgICAgICAgXSB9KSB9KVxuICAgICAgICBdXG4gICAgICB9XG4gICAgKVxuICBdIH0pIH0pIDogbnVsbDtcbn1cbmNvbnN0IENTID0gQjAoZ1MpO1xudmFyIGE1ID0geyBleHBvcnRzOiB7fSB9LCBzNSA9IHsgZXhwb3J0czoge30gfTtcbi8qIVxuICogcGVyZmVjdC1zY3JvbGxiYXIgdjEuNS42XG4gKiBDb3B5cmlnaHQgMjAyNCBIeXVuamUgSnVuLCBNREJvb3RzdHJhcCBhbmQgQ29udHJpYnV0b3JzXG4gKiBMaWNlbnNlZCB1bmRlciBNSVRcbiAqL1xuZnVuY3Rpb24gRGUoZSkge1xuICByZXR1cm4gZ2V0Q29tcHV0ZWRTdHlsZShlKTtcbn1cbmZ1bmN0aW9uIEQyKGUsIHQpIHtcbiAgZm9yICh2YXIgbyBpbiB0KSB7XG4gICAgdmFyIG4gPSB0W29dO1xuICAgIHR5cGVvZiBuID09IFwibnVtYmVyXCIgJiYgKG4gPSBuICsgXCJweFwiKSwgZS5zdHlsZVtvXSA9IG47XG4gIH1cbiAgcmV0dXJuIGU7XG59XG5mdW5jdGlvbiBobihlKSB7XG4gIHZhciB0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImRpdlwiKTtcbiAgcmV0dXJuIHQuY2xhc3NOYW1lID0gZSwgdDtcbn1cbnZhciBhOSA9IHR5cGVvZiBFbGVtZW50IDwgXCJ1XCIgJiYgKEVsZW1lbnQucHJvdG90eXBlLm1hdGNoZXMgfHwgRWxlbWVudC5wcm90b3R5cGUud2Via2l0TWF0Y2hlc1NlbGVjdG9yIHx8IEVsZW1lbnQucHJvdG90eXBlLm1vek1hdGNoZXNTZWxlY3RvciB8fCBFbGVtZW50LnByb3RvdHlwZS5tc01hdGNoZXNTZWxlY3Rvcik7XG5mdW5jdGlvbiB3dChlLCB0KSB7XG4gIGlmICghYTkpXG4gICAgdGhyb3cgbmV3IEVycm9yKFwiTm8gZWxlbWVudCBtYXRjaGluZyBtZXRob2Qgc3VwcG9ydGVkXCIpO1xuICByZXR1cm4gYTkuY2FsbChlLCB0KTtcbn1cbmZ1bmN0aW9uIE4zKGUpIHtcbiAgZS5yZW1vdmUgPyBlLnJlbW92ZSgpIDogZS5wYXJlbnROb2RlICYmIGUucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChlKTtcbn1cbmZ1bmN0aW9uIHM5KGUsIHQpIHtcbiAgcmV0dXJuIEFycmF5LnByb3RvdHlwZS5maWx0ZXIuY2FsbChcbiAgICBlLmNoaWxkcmVuLFxuICAgIGZ1bmN0aW9uKG8pIHtcbiAgICAgIHJldHVybiB3dChvLCB0KTtcbiAgICB9XG4gICk7XG59XG52YXIgZDIgPSB7XG4gIG1haW46IFwicHNcIixcbiAgcnRsOiBcInBzX19ydGxcIixcbiAgZWxlbWVudDoge1xuICAgIHRodW1iOiBmdW5jdGlvbihlKSB7XG4gICAgICByZXR1cm4gXCJwc19fdGh1bWItXCIgKyBlO1xuICAgIH0sXG4gICAgcmFpbDogZnVuY3Rpb24oZSkge1xuICAgICAgcmV0dXJuIFwicHNfX3JhaWwtXCIgKyBlO1xuICAgIH0sXG4gICAgY29uc3VtaW5nOiBcInBzX19jaGlsZC0tY29uc3VtZVwiXG4gIH0sXG4gIHN0YXRlOiB7XG4gICAgZm9jdXM6IFwicHMtLWZvY3VzXCIsXG4gICAgY2xpY2tpbmc6IFwicHMtLWNsaWNraW5nXCIsXG4gICAgYWN0aXZlOiBmdW5jdGlvbihlKSB7XG4gICAgICByZXR1cm4gXCJwcy0tYWN0aXZlLVwiICsgZTtcbiAgICB9LFxuICAgIHNjcm9sbGluZzogZnVuY3Rpb24oZSkge1xuICAgICAgcmV0dXJuIFwicHMtLXNjcm9sbGluZy1cIiArIGU7XG4gICAgfVxuICB9XG59LCBWcCA9IHsgeDogbnVsbCwgeTogbnVsbCB9O1xuZnVuY3Rpb24gUHAoZSwgdCkge1xuICB2YXIgbyA9IGUuZWxlbWVudC5jbGFzc0xpc3QsIG4gPSBkMi5zdGF0ZS5zY3JvbGxpbmcodCk7XG4gIG8uY29udGFpbnMobikgPyBjbGVhclRpbWVvdXQoVnBbdF0pIDogby5hZGQobik7XG59XG5mdW5jdGlvbiBGcChlLCB0KSB7XG4gIFZwW3RdID0gc2V0VGltZW91dChcbiAgICBmdW5jdGlvbigpIHtcbiAgICAgIHJldHVybiBlLmlzQWxpdmUgJiYgZS5lbGVtZW50LmNsYXNzTGlzdC5yZW1vdmUoZDIuc3RhdGUuc2Nyb2xsaW5nKHQpKTtcbiAgICB9LFxuICAgIGUuc2V0dGluZ3Muc2Nyb2xsaW5nVGhyZXNob2xkXG4gICk7XG59XG5mdW5jdGlvbiBtUyhlLCB0KSB7XG4gIFBwKGUsIHQpLCBGcChlLCB0KTtcbn1cbnZhciBUciA9IGZ1bmN0aW9uKHQpIHtcbiAgdGhpcy5lbGVtZW50ID0gdCwgdGhpcy5oYW5kbGVycyA9IHt9O1xufSwgWHAgPSB7IGlzRW1wdHk6IHsgY29uZmlndXJhYmxlOiAhMCB9IH07XG5Uci5wcm90b3R5cGUuYmluZCA9IGZ1bmN0aW9uKHQsIG8pIHtcbiAgdHlwZW9mIHRoaXMuaGFuZGxlcnNbdF0gPiBcInVcIiAmJiAodGhpcy5oYW5kbGVyc1t0XSA9IFtdKSwgdGhpcy5oYW5kbGVyc1t0XS5wdXNoKG8pLCB0aGlzLmVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcih0LCBvLCAhMSk7XG59O1xuVHIucHJvdG90eXBlLnVuYmluZCA9IGZ1bmN0aW9uKHQsIG8pIHtcbiAgdmFyIG4gPSB0aGlzO1xuICB0aGlzLmhhbmRsZXJzW3RdID0gdGhpcy5oYW5kbGVyc1t0XS5maWx0ZXIoZnVuY3Rpb24ocikge1xuICAgIHJldHVybiBvICYmIHIgIT09IG8gPyAhMCA6IChuLmVsZW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcih0LCByLCAhMSksICExKTtcbiAgfSk7XG59O1xuVHIucHJvdG90eXBlLnVuYmluZEFsbCA9IGZ1bmN0aW9uKCkge1xuICBmb3IgKHZhciB0IGluIHRoaXMuaGFuZGxlcnMpXG4gICAgdGhpcy51bmJpbmQodCk7XG59O1xuWHAuaXNFbXB0eS5nZXQgPSBmdW5jdGlvbigpIHtcbiAgdmFyIGUgPSB0aGlzO1xuICByZXR1cm4gT2JqZWN0LmtleXModGhpcy5oYW5kbGVycykuZXZlcnkoXG4gICAgZnVuY3Rpb24odCkge1xuICAgICAgcmV0dXJuIGUuaGFuZGxlcnNbdF0ubGVuZ3RoID09PSAwO1xuICAgIH1cbiAgKTtcbn07XG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhUci5wcm90b3R5cGUsIFhwKTtcbnZhciBjbyA9IGZ1bmN0aW9uKCkge1xuICB0aGlzLmV2ZW50RWxlbWVudHMgPSBbXTtcbn07XG5jby5wcm90b3R5cGUuZXZlbnRFbGVtZW50ID0gZnVuY3Rpb24odCkge1xuICB2YXIgbyA9IHRoaXMuZXZlbnRFbGVtZW50cy5maWx0ZXIoZnVuY3Rpb24obikge1xuICAgIHJldHVybiBuLmVsZW1lbnQgPT09IHQ7XG4gIH0pWzBdO1xuICByZXR1cm4gbyB8fCAobyA9IG5ldyBUcih0KSwgdGhpcy5ldmVudEVsZW1lbnRzLnB1c2gobykpLCBvO1xufTtcbmNvLnByb3RvdHlwZS5iaW5kID0gZnVuY3Rpb24odCwgbywgbikge1xuICB0aGlzLmV2ZW50RWxlbWVudCh0KS5iaW5kKG8sIG4pO1xufTtcbmNvLnByb3RvdHlwZS51bmJpbmQgPSBmdW5jdGlvbih0LCBvLCBuKSB7XG4gIHZhciByID0gdGhpcy5ldmVudEVsZW1lbnQodCk7XG4gIHIudW5iaW5kKG8sIG4pLCByLmlzRW1wdHkgJiYgdGhpcy5ldmVudEVsZW1lbnRzLnNwbGljZSh0aGlzLmV2ZW50RWxlbWVudHMuaW5kZXhPZihyKSwgMSk7XG59O1xuY28ucHJvdG90eXBlLnVuYmluZEFsbCA9IGZ1bmN0aW9uKCkge1xuICB0aGlzLmV2ZW50RWxlbWVudHMuZm9yRWFjaChmdW5jdGlvbih0KSB7XG4gICAgcmV0dXJuIHQudW5iaW5kQWxsKCk7XG4gIH0pLCB0aGlzLmV2ZW50RWxlbWVudHMgPSBbXTtcbn07XG5jby5wcm90b3R5cGUub25jZSA9IGZ1bmN0aW9uKHQsIG8sIG4pIHtcbiAgdmFyIHIgPSB0aGlzLmV2ZW50RWxlbWVudCh0KSwgaSA9IGZ1bmN0aW9uKGEpIHtcbiAgICByLnVuYmluZChvLCBpKSwgbihhKTtcbiAgfTtcbiAgci5iaW5kKG8sIGkpO1xufTtcbmZ1bmN0aW9uIE9uKGUpIHtcbiAgaWYgKHR5cGVvZiB3aW5kb3cuQ3VzdG9tRXZlbnQgPT0gXCJmdW5jdGlvblwiKVxuICAgIHJldHVybiBuZXcgQ3VzdG9tRXZlbnQoZSk7XG4gIHZhciB0ID0gZG9jdW1lbnQuY3JlYXRlRXZlbnQoXCJDdXN0b21FdmVudFwiKTtcbiAgcmV0dXJuIHQuaW5pdEN1c3RvbUV2ZW50KGUsICExLCAhMSwgdm9pZCAwKSwgdDtcbn1cbmZ1bmN0aW9uIEw0KGUsIHQsIG8sIG4sIHIpIHtcbiAgbiA9PT0gdm9pZCAwICYmIChuID0gITApLCByID09PSB2b2lkIDAgJiYgKHIgPSAhMSk7XG4gIHZhciBpO1xuICBpZiAodCA9PT0gXCJ0b3BcIilcbiAgICBpID0gW1wiY29udGVudEhlaWdodFwiLCBcImNvbnRhaW5lckhlaWdodFwiLCBcInNjcm9sbFRvcFwiLCBcInlcIiwgXCJ1cFwiLCBcImRvd25cIl07XG4gIGVsc2UgaWYgKHQgPT09IFwibGVmdFwiKVxuICAgIGkgPSBbXCJjb250ZW50V2lkdGhcIiwgXCJjb250YWluZXJXaWR0aFwiLCBcInNjcm9sbExlZnRcIiwgXCJ4XCIsIFwibGVmdFwiLCBcInJpZ2h0XCJdO1xuICBlbHNlXG4gICAgdGhyb3cgbmV3IEVycm9yKFwiQSBwcm9wZXIgYXhpcyBzaG91bGQgYmUgcHJvdmlkZWRcIik7XG4gIExTKGUsIG8sIGksIG4sIHIpO1xufVxuZnVuY3Rpb24gTFMoZSwgdCwgbywgbiwgcikge1xuICB2YXIgaSA9IG9bMF0sIGEgPSBvWzFdLCBzID0gb1syXSwgbCA9IG9bM10sIHAgPSBvWzRdLCBkID0gb1s1XTtcbiAgbiA9PT0gdm9pZCAwICYmIChuID0gITApLCByID09PSB2b2lkIDAgJiYgKHIgPSAhMSk7XG4gIHZhciBiID0gZS5lbGVtZW50O1xuICBlLnJlYWNoW2xdID0gbnVsbCwgYltzXSA8IDEgJiYgKGUucmVhY2hbbF0gPSBcInN0YXJ0XCIpLCBiW3NdID4gZVtpXSAtIGVbYV0gLSAxICYmIChlLnJlYWNoW2xdID0gXCJlbmRcIiksIHQgJiYgKGIuZGlzcGF0Y2hFdmVudChPbihcInBzLXNjcm9sbC1cIiArIGwpKSwgdCA8IDAgPyBiLmRpc3BhdGNoRXZlbnQoT24oXCJwcy1zY3JvbGwtXCIgKyBwKSkgOiB0ID4gMCAmJiBiLmRpc3BhdGNoRXZlbnQoT24oXCJwcy1zY3JvbGwtXCIgKyBkKSksIG4gJiYgbVMoZSwgbCkpLCBlLnJlYWNoW2xdICYmICh0IHx8IHIpICYmIGIuZGlzcGF0Y2hFdmVudChPbihcInBzLVwiICsgbCArIFwiLXJlYWNoLVwiICsgZS5yZWFjaFtsXSkpO1xufVxuZnVuY3Rpb24gdDIoZSkge1xuICByZXR1cm4gcGFyc2VJbnQoZSwgMTApIHx8IDA7XG59XG5mdW5jdGlvbiB2UyhlKSB7XG4gIHJldHVybiB3dChlLCBcImlucHV0LFtjb250ZW50ZWRpdGFibGVdXCIpIHx8IHd0KGUsIFwic2VsZWN0LFtjb250ZW50ZWRpdGFibGVdXCIpIHx8IHd0KGUsIFwidGV4dGFyZWEsW2NvbnRlbnRlZGl0YWJsZV1cIikgfHwgd3QoZSwgXCJidXR0b24sW2NvbnRlbnRlZGl0YWJsZV1cIik7XG59XG5mdW5jdGlvbiBxUyhlKSB7XG4gIHZhciB0ID0gRGUoZSk7XG4gIHJldHVybiB0Mih0LndpZHRoKSArIHQyKHQucGFkZGluZ0xlZnQpICsgdDIodC5wYWRkaW5nUmlnaHQpICsgdDIodC5ib3JkZXJMZWZ0V2lkdGgpICsgdDIodC5ib3JkZXJSaWdodFdpZHRoKTtcbn1cbnZhciBSMyA9IHtcbiAgaXNXZWJLaXQ6IHR5cGVvZiBkb2N1bWVudCA8IFwidVwiICYmIFwiV2Via2l0QXBwZWFyYW5jZVwiIGluIGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5zdHlsZSxcbiAgc3VwcG9ydHNUb3VjaDogdHlwZW9mIHdpbmRvdyA8IFwidVwiICYmIChcIm9udG91Y2hzdGFydFwiIGluIHdpbmRvdyB8fCBcIm1heFRvdWNoUG9pbnRzXCIgaW4gd2luZG93Lm5hdmlnYXRvciAmJiB3aW5kb3cubmF2aWdhdG9yLm1heFRvdWNoUG9pbnRzID4gMCB8fCB3aW5kb3cuRG9jdW1lbnRUb3VjaCAmJiBkb2N1bWVudCBpbnN0YW5jZW9mIHdpbmRvdy5Eb2N1bWVudFRvdWNoKSxcbiAgc3VwcG9ydHNJZVBvaW50ZXI6IHR5cGVvZiBuYXZpZ2F0b3IgPCBcInVcIiAmJiBuYXZpZ2F0b3IubXNNYXhUb3VjaFBvaW50cyxcbiAgaXNDaHJvbWU6IHR5cGVvZiBuYXZpZ2F0b3IgPCBcInVcIiAmJiAvQ2hyb21lL2kudGVzdChuYXZpZ2F0b3IgJiYgbmF2aWdhdG9yLnVzZXJBZ2VudClcbn07XG5mdW5jdGlvbiBidChlKSB7XG4gIHZhciB0ID0gZS5lbGVtZW50LCBvID0gTWF0aC5mbG9vcih0LnNjcm9sbFRvcCksIG4gPSB0LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICBlLmNvbnRhaW5lcldpZHRoID0gTWF0aC5mbG9vcihuLndpZHRoKSwgZS5jb250YWluZXJIZWlnaHQgPSBNYXRoLmZsb29yKG4uaGVpZ2h0KSwgZS5jb250ZW50V2lkdGggPSB0LnNjcm9sbFdpZHRoLCBlLmNvbnRlbnRIZWlnaHQgPSB0LnNjcm9sbEhlaWdodCwgdC5jb250YWlucyhlLnNjcm9sbGJhclhSYWlsKSB8fCAoczkodCwgZDIuZWxlbWVudC5yYWlsKFwieFwiKSkuZm9yRWFjaChmdW5jdGlvbihyKSB7XG4gICAgcmV0dXJuIE4zKHIpO1xuICB9KSwgdC5hcHBlbmRDaGlsZChlLnNjcm9sbGJhclhSYWlsKSksIHQuY29udGFpbnMoZS5zY3JvbGxiYXJZUmFpbCkgfHwgKHM5KHQsIGQyLmVsZW1lbnQucmFpbChcInlcIikpLmZvckVhY2goZnVuY3Rpb24ocikge1xuICAgIHJldHVybiBOMyhyKTtcbiAgfSksIHQuYXBwZW5kQ2hpbGQoZS5zY3JvbGxiYXJZUmFpbCkpLCAhZS5zZXR0aW5ncy5zdXBwcmVzc1Njcm9sbFggJiYgZS5jb250YWluZXJXaWR0aCArIGUuc2V0dGluZ3Muc2Nyb2xsWE1hcmdpbk9mZnNldCA8IGUuY29udGVudFdpZHRoID8gKGUuc2Nyb2xsYmFyWEFjdGl2ZSA9ICEwLCBlLnJhaWxYV2lkdGggPSBlLmNvbnRhaW5lcldpZHRoIC0gZS5yYWlsWE1hcmdpbldpZHRoLCBlLnJhaWxYUmF0aW8gPSBlLmNvbnRhaW5lcldpZHRoIC8gZS5yYWlsWFdpZHRoLCBlLnNjcm9sbGJhclhXaWR0aCA9IGM5KGUsIHQyKGUucmFpbFhXaWR0aCAqIGUuY29udGFpbmVyV2lkdGggLyBlLmNvbnRlbnRXaWR0aCkpLCBlLnNjcm9sbGJhclhMZWZ0ID0gdDIoXG4gICAgKGUubmVnYXRpdmVTY3JvbGxBZGp1c3RtZW50ICsgdC5zY3JvbGxMZWZ0KSAqIChlLnJhaWxYV2lkdGggLSBlLnNjcm9sbGJhclhXaWR0aCkgLyAoZS5jb250ZW50V2lkdGggLSBlLmNvbnRhaW5lcldpZHRoKVxuICApKSA6IGUuc2Nyb2xsYmFyWEFjdGl2ZSA9ICExLCAhZS5zZXR0aW5ncy5zdXBwcmVzc1Njcm9sbFkgJiYgZS5jb250YWluZXJIZWlnaHQgKyBlLnNldHRpbmdzLnNjcm9sbFlNYXJnaW5PZmZzZXQgPCBlLmNvbnRlbnRIZWlnaHQgPyAoZS5zY3JvbGxiYXJZQWN0aXZlID0gITAsIGUucmFpbFlIZWlnaHQgPSBlLmNvbnRhaW5lckhlaWdodCAtIGUucmFpbFlNYXJnaW5IZWlnaHQsIGUucmFpbFlSYXRpbyA9IGUuY29udGFpbmVySGVpZ2h0IC8gZS5yYWlsWUhlaWdodCwgZS5zY3JvbGxiYXJZSGVpZ2h0ID0gYzkoXG4gICAgZSxcbiAgICB0MihlLnJhaWxZSGVpZ2h0ICogZS5jb250YWluZXJIZWlnaHQgLyBlLmNvbnRlbnRIZWlnaHQpXG4gICksIGUuc2Nyb2xsYmFyWVRvcCA9IHQyKFxuICAgIG8gKiAoZS5yYWlsWUhlaWdodCAtIGUuc2Nyb2xsYmFyWUhlaWdodCkgLyAoZS5jb250ZW50SGVpZ2h0IC0gZS5jb250YWluZXJIZWlnaHQpXG4gICkpIDogZS5zY3JvbGxiYXJZQWN0aXZlID0gITEsIGUuc2Nyb2xsYmFyWExlZnQgPj0gZS5yYWlsWFdpZHRoIC0gZS5zY3JvbGxiYXJYV2lkdGggJiYgKGUuc2Nyb2xsYmFyWExlZnQgPSBlLnJhaWxYV2lkdGggLSBlLnNjcm9sbGJhclhXaWR0aCksIGUuc2Nyb2xsYmFyWVRvcCA+PSBlLnJhaWxZSGVpZ2h0IC0gZS5zY3JvbGxiYXJZSGVpZ2h0ICYmIChlLnNjcm9sbGJhcllUb3AgPSBlLnJhaWxZSGVpZ2h0IC0gZS5zY3JvbGxiYXJZSGVpZ2h0KSwgeVModCwgZSksIGUuc2Nyb2xsYmFyWEFjdGl2ZSA/IHQuY2xhc3NMaXN0LmFkZChkMi5zdGF0ZS5hY3RpdmUoXCJ4XCIpKSA6ICh0LmNsYXNzTGlzdC5yZW1vdmUoZDIuc3RhdGUuYWN0aXZlKFwieFwiKSksIGUuc2Nyb2xsYmFyWFdpZHRoID0gMCwgZS5zY3JvbGxiYXJYTGVmdCA9IDAsIHQuc2Nyb2xsTGVmdCA9IGUuaXNSdGwgPT09ICEwID8gZS5jb250ZW50V2lkdGggOiAwKSwgZS5zY3JvbGxiYXJZQWN0aXZlID8gdC5jbGFzc0xpc3QuYWRkKGQyLnN0YXRlLmFjdGl2ZShcInlcIikpIDogKHQuY2xhc3NMaXN0LnJlbW92ZShkMi5zdGF0ZS5hY3RpdmUoXCJ5XCIpKSwgZS5zY3JvbGxiYXJZSGVpZ2h0ID0gMCwgZS5zY3JvbGxiYXJZVG9wID0gMCwgdC5zY3JvbGxUb3AgPSAwKTtcbn1cbmZ1bmN0aW9uIGM5KGUsIHQpIHtcbiAgcmV0dXJuIGUuc2V0dGluZ3MubWluU2Nyb2xsYmFyTGVuZ3RoICYmICh0ID0gTWF0aC5tYXgodCwgZS5zZXR0aW5ncy5taW5TY3JvbGxiYXJMZW5ndGgpKSwgZS5zZXR0aW5ncy5tYXhTY3JvbGxiYXJMZW5ndGggJiYgKHQgPSBNYXRoLm1pbih0LCBlLnNldHRpbmdzLm1heFNjcm9sbGJhckxlbmd0aCkpLCB0O1xufVxuZnVuY3Rpb24geVMoZSwgdCkge1xuICB2YXIgbyA9IHsgd2lkdGg6IHQucmFpbFhXaWR0aCB9LCBuID0gTWF0aC5mbG9vcihlLnNjcm9sbFRvcCk7XG4gIHQuaXNSdGwgPyBvLmxlZnQgPSB0Lm5lZ2F0aXZlU2Nyb2xsQWRqdXN0bWVudCArIGUuc2Nyb2xsTGVmdCArIHQuY29udGFpbmVyV2lkdGggLSB0LmNvbnRlbnRXaWR0aCA6IG8ubGVmdCA9IGUuc2Nyb2xsTGVmdCwgdC5pc1Njcm9sbGJhclhVc2luZ0JvdHRvbSA/IG8uYm90dG9tID0gdC5zY3JvbGxiYXJYQm90dG9tIC0gbiA6IG8udG9wID0gdC5zY3JvbGxiYXJYVG9wICsgbiwgRDIodC5zY3JvbGxiYXJYUmFpbCwgbyk7XG4gIHZhciByID0geyB0b3A6IG4sIGhlaWdodDogdC5yYWlsWUhlaWdodCB9O1xuICB0LmlzU2Nyb2xsYmFyWVVzaW5nUmlnaHQgPyB0LmlzUnRsID8gci5yaWdodCA9IHQuY29udGVudFdpZHRoIC0gKHQubmVnYXRpdmVTY3JvbGxBZGp1c3RtZW50ICsgZS5zY3JvbGxMZWZ0KSAtIHQuc2Nyb2xsYmFyWVJpZ2h0IC0gdC5zY3JvbGxiYXJZT3V0ZXJXaWR0aCAtIDkgOiByLnJpZ2h0ID0gdC5zY3JvbGxiYXJZUmlnaHQgLSBlLnNjcm9sbExlZnQgOiB0LmlzUnRsID8gci5sZWZ0ID0gdC5uZWdhdGl2ZVNjcm9sbEFkanVzdG1lbnQgKyBlLnNjcm9sbExlZnQgKyB0LmNvbnRhaW5lcldpZHRoICogMiAtIHQuY29udGVudFdpZHRoIC0gdC5zY3JvbGxiYXJZTGVmdCAtIHQuc2Nyb2xsYmFyWU91dGVyV2lkdGggOiByLmxlZnQgPSB0LnNjcm9sbGJhcllMZWZ0ICsgZS5zY3JvbGxMZWZ0LCBEMih0LnNjcm9sbGJhcllSYWlsLCByKSwgRDIodC5zY3JvbGxiYXJYLCB7XG4gICAgbGVmdDogdC5zY3JvbGxiYXJYTGVmdCxcbiAgICB3aWR0aDogdC5zY3JvbGxiYXJYV2lkdGggLSB0LnJhaWxCb3JkZXJYV2lkdGhcbiAgfSksIEQyKHQuc2Nyb2xsYmFyWSwge1xuICAgIHRvcDogdC5zY3JvbGxiYXJZVG9wLFxuICAgIGhlaWdodDogdC5zY3JvbGxiYXJZSGVpZ2h0IC0gdC5yYWlsQm9yZGVyWVdpZHRoXG4gIH0pO1xufVxuZnVuY3Rpb24gd1MoZSkge1xuICBlLmV2ZW50LmJpbmQoZS5zY3JvbGxiYXJZLCBcIm1vdXNlZG93blwiLCBmdW5jdGlvbih0KSB7XG4gICAgcmV0dXJuIHQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gIH0pLCBlLmV2ZW50LmJpbmQoZS5zY3JvbGxiYXJZUmFpbCwgXCJtb3VzZWRvd25cIiwgZnVuY3Rpb24odCkge1xuICAgIHZhciBvID0gdC5wYWdlWSAtIHdpbmRvdy5wYWdlWU9mZnNldCAtIGUuc2Nyb2xsYmFyWVJhaWwuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkudG9wLCBuID0gbyA+IGUuc2Nyb2xsYmFyWVRvcCA/IDEgOiAtMTtcbiAgICBlLmVsZW1lbnQuc2Nyb2xsVG9wICs9IG4gKiBlLmNvbnRhaW5lckhlaWdodCwgYnQoZSksIHQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gIH0pLCBlLmV2ZW50LmJpbmQoZS5zY3JvbGxiYXJYLCBcIm1vdXNlZG93blwiLCBmdW5jdGlvbih0KSB7XG4gICAgcmV0dXJuIHQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gIH0pLCBlLmV2ZW50LmJpbmQoZS5zY3JvbGxiYXJYUmFpbCwgXCJtb3VzZWRvd25cIiwgZnVuY3Rpb24odCkge1xuICAgIHZhciBvID0gdC5wYWdlWCAtIHdpbmRvdy5wYWdlWE9mZnNldCAtIGUuc2Nyb2xsYmFyWFJhaWwuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkubGVmdCwgbiA9IG8gPiBlLnNjcm9sbGJhclhMZWZ0ID8gMSA6IC0xO1xuICAgIGUuZWxlbWVudC5zY3JvbGxMZWZ0ICs9IG4gKiBlLmNvbnRhaW5lcldpZHRoLCBidChlKSwgdC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgfSk7XG59XG52YXIgZm4gPSBudWxsO1xuZnVuY3Rpb24geFMoZSkge1xuICBsOShlLCBbXG4gICAgXCJjb250YWluZXJIZWlnaHRcIixcbiAgICBcImNvbnRlbnRIZWlnaHRcIixcbiAgICBcInBhZ2VZXCIsXG4gICAgXCJyYWlsWUhlaWdodFwiLFxuICAgIFwic2Nyb2xsYmFyWVwiLFxuICAgIFwic2Nyb2xsYmFyWUhlaWdodFwiLFxuICAgIFwic2Nyb2xsVG9wXCIsXG4gICAgXCJ5XCIsXG4gICAgXCJzY3JvbGxiYXJZUmFpbFwiXG4gIF0pLCBsOShlLCBbXG4gICAgXCJjb250YWluZXJXaWR0aFwiLFxuICAgIFwiY29udGVudFdpZHRoXCIsXG4gICAgXCJwYWdlWFwiLFxuICAgIFwicmFpbFhXaWR0aFwiLFxuICAgIFwic2Nyb2xsYmFyWFwiLFxuICAgIFwic2Nyb2xsYmFyWFdpZHRoXCIsXG4gICAgXCJzY3JvbGxMZWZ0XCIsXG4gICAgXCJ4XCIsXG4gICAgXCJzY3JvbGxiYXJYUmFpbFwiXG4gIF0pO1xufVxuZnVuY3Rpb24gbDkoZSwgdCkge1xuICB2YXIgbyA9IHRbMF0sIG4gPSB0WzFdLCByID0gdFsyXSwgaSA9IHRbM10sIGEgPSB0WzRdLCBzID0gdFs1XSwgbCA9IHRbNl0sIHAgPSB0WzddLCBkID0gdFs4XSwgYiA9IGUuZWxlbWVudCwgTSA9IG51bGwsIHUgPSBudWxsLCBBID0gbnVsbDtcbiAgZnVuY3Rpb24geihoKSB7XG4gICAgaC50b3VjaGVzICYmIGgudG91Y2hlc1swXSAmJiAoaFtyXSA9IGgudG91Y2hlc1swXVtcInBhZ2VcIiArIHAudG9VcHBlckNhc2UoKV0pLCBmbiA9PT0gYSAmJiAoYltsXSA9IE0gKyBBICogKGhbcl0gLSB1KSwgUHAoZSwgcCksIGJ0KGUpLCBoLnN0b3BQcm9wYWdhdGlvbigpLCBoLnByZXZlbnREZWZhdWx0KCkpO1xuICB9XG4gIGZ1bmN0aW9uIGYoKSB7XG4gICAgRnAoZSwgcCksIGVbZF0uY2xhc3NMaXN0LnJlbW92ZShkMi5zdGF0ZS5jbGlja2luZyksIGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJtb3VzZW1vdmVcIiwgeiksIGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJtb3VzZXVwXCIsIGYpLCBkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKFwidG91Y2htb3ZlXCIsIHopLCBkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKFwidG91Y2hlbmRcIiwgZiksIGZuID0gbnVsbDtcbiAgfVxuICBmdW5jdGlvbiBPKGgpIHtcbiAgICBmbiA9PT0gbnVsbCAmJiAoZm4gPSBhLCBNID0gYltsXSwgaC50b3VjaGVzICYmIChoW3JdID0gaC50b3VjaGVzWzBdW1wicGFnZVwiICsgcC50b1VwcGVyQ2FzZSgpXSksIHUgPSBoW3JdLCBBID0gKGVbbl0gLSBlW29dKSAvIChlW2ldIC0gZVtzXSksIGgudG91Y2hlcyA/IChkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKFwidG91Y2htb3ZlXCIsIHosIHsgcGFzc2l2ZTogITEgfSksIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoXCJ0b3VjaGVuZFwiLCBmKSkgOiAoZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcihcIm1vdXNlbW92ZVwiLCB6KSwgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcihcIm1vdXNldXBcIiwgZikpLCBlW2RdLmNsYXNzTGlzdC5hZGQoZDIuc3RhdGUuY2xpY2tpbmcpKSwgaC5zdG9wUHJvcGFnYXRpb24oKSwgaC5jYW5jZWxhYmxlICYmIGgucHJldmVudERlZmF1bHQoKTtcbiAgfVxuICBlW2FdLmFkZEV2ZW50TGlzdGVuZXIoXCJtb3VzZWRvd25cIiwgTyksIGVbYV0uYWRkRXZlbnRMaXN0ZW5lcihcInRvdWNoc3RhcnRcIiwgTyk7XG59XG5mdW5jdGlvbiBXUyhlKSB7XG4gIHZhciB0ID0gZS5lbGVtZW50LCBvID0gZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIHd0KHQsIFwiOmhvdmVyXCIpO1xuICB9LCBuID0gZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIHd0KGUuc2Nyb2xsYmFyWCwgXCI6Zm9jdXNcIikgfHwgd3QoZS5zY3JvbGxiYXJZLCBcIjpmb2N1c1wiKTtcbiAgfTtcbiAgZnVuY3Rpb24gcihpLCBhKSB7XG4gICAgdmFyIHMgPSBNYXRoLmZsb29yKHQuc2Nyb2xsVG9wKTtcbiAgICBpZiAoaSA9PT0gMCkge1xuICAgICAgaWYgKCFlLnNjcm9sbGJhcllBY3RpdmUpXG4gICAgICAgIHJldHVybiAhMTtcbiAgICAgIGlmIChzID09PSAwICYmIGEgPiAwIHx8IHMgPj0gZS5jb250ZW50SGVpZ2h0IC0gZS5jb250YWluZXJIZWlnaHQgJiYgYSA8IDApXG4gICAgICAgIHJldHVybiAhZS5zZXR0aW5ncy53aGVlbFByb3BhZ2F0aW9uO1xuICAgIH1cbiAgICB2YXIgbCA9IHQuc2Nyb2xsTGVmdDtcbiAgICBpZiAoYSA9PT0gMCkge1xuICAgICAgaWYgKCFlLnNjcm9sbGJhclhBY3RpdmUpXG4gICAgICAgIHJldHVybiAhMTtcbiAgICAgIGlmIChsID09PSAwICYmIGkgPCAwIHx8IGwgPj0gZS5jb250ZW50V2lkdGggLSBlLmNvbnRhaW5lcldpZHRoICYmIGkgPiAwKVxuICAgICAgICByZXR1cm4gIWUuc2V0dGluZ3Mud2hlZWxQcm9wYWdhdGlvbjtcbiAgICB9XG4gICAgcmV0dXJuICEwO1xuICB9XG4gIGUuZXZlbnQuYmluZChlLm93bmVyRG9jdW1lbnQsIFwia2V5ZG93blwiLCBmdW5jdGlvbihpKSB7XG4gICAgaWYgKCEoaS5pc0RlZmF1bHRQcmV2ZW50ZWQgJiYgaS5pc0RlZmF1bHRQcmV2ZW50ZWQoKSB8fCBpLmRlZmF1bHRQcmV2ZW50ZWQpICYmICEoIW8oKSAmJiAhbigpKSkge1xuICAgICAgdmFyIGEgPSBkb2N1bWVudC5hY3RpdmVFbGVtZW50ID8gZG9jdW1lbnQuYWN0aXZlRWxlbWVudCA6IGUub3duZXJEb2N1bWVudC5hY3RpdmVFbGVtZW50O1xuICAgICAgaWYgKGEpIHtcbiAgICAgICAgaWYgKGEudGFnTmFtZSA9PT0gXCJJRlJBTUVcIilcbiAgICAgICAgICBhID0gYS5jb250ZW50RG9jdW1lbnQuYWN0aXZlRWxlbWVudDtcbiAgICAgICAgZWxzZVxuICAgICAgICAgIGZvciAoOyBhLnNoYWRvd1Jvb3Q7IClcbiAgICAgICAgICAgIGEgPSBhLnNoYWRvd1Jvb3QuYWN0aXZlRWxlbWVudDtcbiAgICAgICAgaWYgKHZTKGEpKVxuICAgICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIHZhciBzID0gMCwgbCA9IDA7XG4gICAgICBzd2l0Y2ggKGkud2hpY2gpIHtcbiAgICAgICAgY2FzZSAzNzpcbiAgICAgICAgICBpLm1ldGFLZXkgPyBzID0gLWUuY29udGVudFdpZHRoIDogaS5hbHRLZXkgPyBzID0gLWUuY29udGFpbmVyV2lkdGggOiBzID0gLTMwO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDM4OlxuICAgICAgICAgIGkubWV0YUtleSA/IGwgPSBlLmNvbnRlbnRIZWlnaHQgOiBpLmFsdEtleSA/IGwgPSBlLmNvbnRhaW5lckhlaWdodCA6IGwgPSAzMDtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAzOTpcbiAgICAgICAgICBpLm1ldGFLZXkgPyBzID0gZS5jb250ZW50V2lkdGggOiBpLmFsdEtleSA/IHMgPSBlLmNvbnRhaW5lcldpZHRoIDogcyA9IDMwO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDQwOlxuICAgICAgICAgIGkubWV0YUtleSA/IGwgPSAtZS5jb250ZW50SGVpZ2h0IDogaS5hbHRLZXkgPyBsID0gLWUuY29udGFpbmVySGVpZ2h0IDogbCA9IC0zMDtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAzMjpcbiAgICAgICAgICBpLnNoaWZ0S2V5ID8gbCA9IGUuY29udGFpbmVySGVpZ2h0IDogbCA9IC1lLmNvbnRhaW5lckhlaWdodDtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAzMzpcbiAgICAgICAgICBsID0gZS5jb250YWluZXJIZWlnaHQ7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgMzQ6XG4gICAgICAgICAgbCA9IC1lLmNvbnRhaW5lckhlaWdodDtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAzNjpcbiAgICAgICAgICBsID0gZS5jb250ZW50SGVpZ2h0O1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDM1OlxuICAgICAgICAgIGwgPSAtZS5jb250ZW50SGVpZ2h0O1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGUuc2V0dGluZ3Muc3VwcHJlc3NTY3JvbGxYICYmIHMgIT09IDAgfHwgZS5zZXR0aW5ncy5zdXBwcmVzc1Njcm9sbFkgJiYgbCAhPT0gMCB8fCAodC5zY3JvbGxUb3AgLT0gbCwgdC5zY3JvbGxMZWZ0ICs9IHMsIGJ0KGUpLCByKHMsIGwpICYmIGkucHJldmVudERlZmF1bHQoKSk7XG4gICAgfVxuICB9KTtcbn1cbmZ1bmN0aW9uIFJTKGUpIHtcbiAgdmFyIHQgPSBlLmVsZW1lbnQ7XG4gIGZ1bmN0aW9uIG8oYSwgcykge1xuICAgIHZhciBsID0gTWF0aC5mbG9vcih0LnNjcm9sbFRvcCksIHAgPSB0LnNjcm9sbFRvcCA9PT0gMCwgZCA9IGwgKyB0Lm9mZnNldEhlaWdodCA9PT0gdC5zY3JvbGxIZWlnaHQsIGIgPSB0LnNjcm9sbExlZnQgPT09IDAsIE0gPSB0LnNjcm9sbExlZnQgKyB0Lm9mZnNldFdpZHRoID09PSB0LnNjcm9sbFdpZHRoLCB1O1xuICAgIHJldHVybiBNYXRoLmFicyhzKSA+IE1hdGguYWJzKGEpID8gdSA9IHAgfHwgZCA6IHUgPSBiIHx8IE0sIHUgPyAhZS5zZXR0aW5ncy53aGVlbFByb3BhZ2F0aW9uIDogITA7XG4gIH1cbiAgZnVuY3Rpb24gbihhKSB7XG4gICAgdmFyIHMgPSBhLmRlbHRhWCwgbCA9IC0xICogYS5kZWx0YVk7XG4gICAgcmV0dXJuICh0eXBlb2YgcyA+IFwidVwiIHx8IHR5cGVvZiBsID4gXCJ1XCIpICYmIChzID0gLTEgKiBhLndoZWVsRGVsdGFYIC8gNiwgbCA9IGEud2hlZWxEZWx0YVkgLyA2KSwgYS5kZWx0YU1vZGUgJiYgYS5kZWx0YU1vZGUgPT09IDEgJiYgKHMgKj0gMTAsIGwgKj0gMTApLCBzICE9PSBzICYmIGwgIT09IGwgJiYgKHMgPSAwLCBsID0gYS53aGVlbERlbHRhKSwgYS5zaGlmdEtleSA/IFstbCwgLXNdIDogW3MsIGxdO1xuICB9XG4gIGZ1bmN0aW9uIHIoYSwgcywgbCkge1xuICAgIGlmICghUjMuaXNXZWJLaXQgJiYgdC5xdWVyeVNlbGVjdG9yKFwic2VsZWN0OmZvY3VzXCIpKVxuICAgICAgcmV0dXJuICEwO1xuICAgIGlmICghdC5jb250YWlucyhhKSlcbiAgICAgIHJldHVybiAhMTtcbiAgICBmb3IgKHZhciBwID0gYTsgcCAmJiBwICE9PSB0OyApIHtcbiAgICAgIGlmIChwLmNsYXNzTGlzdC5jb250YWlucyhkMi5lbGVtZW50LmNvbnN1bWluZykpXG4gICAgICAgIHJldHVybiAhMDtcbiAgICAgIHZhciBkID0gRGUocCk7XG4gICAgICBpZiAobCAmJiBkLm92ZXJmbG93WS5tYXRjaCgvKHNjcm9sbHxhdXRvKS8pKSB7XG4gICAgICAgIHZhciBiID0gcC5zY3JvbGxIZWlnaHQgLSBwLmNsaWVudEhlaWdodDtcbiAgICAgICAgaWYgKGIgPiAwICYmIChwLnNjcm9sbFRvcCA+IDAgJiYgbCA8IDAgfHwgcC5zY3JvbGxUb3AgPCBiICYmIGwgPiAwKSlcbiAgICAgICAgICByZXR1cm4gITA7XG4gICAgICB9XG4gICAgICBpZiAocyAmJiBkLm92ZXJmbG93WC5tYXRjaCgvKHNjcm9sbHxhdXRvKS8pKSB7XG4gICAgICAgIHZhciBNID0gcC5zY3JvbGxXaWR0aCAtIHAuY2xpZW50V2lkdGg7XG4gICAgICAgIGlmIChNID4gMCAmJiAocC5zY3JvbGxMZWZ0ID4gMCAmJiBzIDwgMCB8fCBwLnNjcm9sbExlZnQgPCBNICYmIHMgPiAwKSlcbiAgICAgICAgICByZXR1cm4gITA7XG4gICAgICB9XG4gICAgICBwID0gcC5wYXJlbnROb2RlO1xuICAgIH1cbiAgICByZXR1cm4gITE7XG4gIH1cbiAgZnVuY3Rpb24gaShhKSB7XG4gICAgdmFyIHMgPSBuKGEpLCBsID0gc1swXSwgcCA9IHNbMV07XG4gICAgaWYgKCFyKGEudGFyZ2V0LCBsLCBwKSkge1xuICAgICAgdmFyIGQgPSAhMTtcbiAgICAgIGUuc2V0dGluZ3MudXNlQm90aFdoZWVsQXhlcyA/IGUuc2Nyb2xsYmFyWUFjdGl2ZSAmJiAhZS5zY3JvbGxiYXJYQWN0aXZlID8gKHAgPyB0LnNjcm9sbFRvcCAtPSBwICogZS5zZXR0aW5ncy53aGVlbFNwZWVkIDogdC5zY3JvbGxUb3AgKz0gbCAqIGUuc2V0dGluZ3Mud2hlZWxTcGVlZCwgZCA9ICEwKSA6IGUuc2Nyb2xsYmFyWEFjdGl2ZSAmJiAhZS5zY3JvbGxiYXJZQWN0aXZlICYmIChsID8gdC5zY3JvbGxMZWZ0ICs9IGwgKiBlLnNldHRpbmdzLndoZWVsU3BlZWQgOiB0LnNjcm9sbExlZnQgLT0gcCAqIGUuc2V0dGluZ3Mud2hlZWxTcGVlZCwgZCA9ICEwKSA6ICh0LnNjcm9sbFRvcCAtPSBwICogZS5zZXR0aW5ncy53aGVlbFNwZWVkLCB0LnNjcm9sbExlZnQgKz0gbCAqIGUuc2V0dGluZ3Mud2hlZWxTcGVlZCksIGJ0KGUpLCBkID0gZCB8fCBvKGwsIHApLCBkICYmICFhLmN0cmxLZXkgJiYgKGEuc3RvcFByb3BhZ2F0aW9uKCksIGEucHJldmVudERlZmF1bHQoKSk7XG4gICAgfVxuICB9XG4gIHR5cGVvZiB3aW5kb3cub253aGVlbCA8IFwidVwiID8gZS5ldmVudC5iaW5kKHQsIFwid2hlZWxcIiwgaSkgOiB0eXBlb2Ygd2luZG93Lm9ubW91c2V3aGVlbCA8IFwidVwiICYmIGUuZXZlbnQuYmluZCh0LCBcIm1vdXNld2hlZWxcIiwgaSk7XG59XG5mdW5jdGlvbiBCUyhlKSB7XG4gIGlmICghUjMuc3VwcG9ydHNUb3VjaCAmJiAhUjMuc3VwcG9ydHNJZVBvaW50ZXIpXG4gICAgcmV0dXJuO1xuICB2YXIgdCA9IGUuZWxlbWVudCwgbyA9IHtcbiAgICBzdGFydE9mZnNldDoge30sXG4gICAgc3RhcnRUaW1lOiAwLFxuICAgIHNwZWVkOiB7fSxcbiAgICBlYXNpbmdMb29wOiBudWxsXG4gIH07XG4gIGZ1bmN0aW9uIG4oYiwgTSkge1xuICAgIHZhciB1ID0gTWF0aC5mbG9vcih0LnNjcm9sbFRvcCksIEEgPSB0LnNjcm9sbExlZnQsIHogPSBNYXRoLmFicyhiKSwgZiA9IE1hdGguYWJzKE0pO1xuICAgIGlmIChmID4geikge1xuICAgICAgaWYgKE0gPCAwICYmIHUgPT09IGUuY29udGVudEhlaWdodCAtIGUuY29udGFpbmVySGVpZ2h0IHx8IE0gPiAwICYmIHUgPT09IDApXG4gICAgICAgIHJldHVybiB3aW5kb3cuc2Nyb2xsWSA9PT0gMCAmJiBNID4gMCAmJiBSMy5pc0Nocm9tZTtcbiAgICB9IGVsc2UgaWYgKHogPiBmICYmIChiIDwgMCAmJiBBID09PSBlLmNvbnRlbnRXaWR0aCAtIGUuY29udGFpbmVyV2lkdGggfHwgYiA+IDAgJiYgQSA9PT0gMCkpXG4gICAgICByZXR1cm4gITA7XG4gICAgcmV0dXJuICEwO1xuICB9XG4gIGZ1bmN0aW9uIHIoYiwgTSkge1xuICAgIHQuc2Nyb2xsVG9wIC09IE0sIHQuc2Nyb2xsTGVmdCAtPSBiLCBidChlKTtcbiAgfVxuICBmdW5jdGlvbiBpKGIpIHtcbiAgICByZXR1cm4gYi50YXJnZXRUb3VjaGVzID8gYi50YXJnZXRUb3VjaGVzWzBdIDogYjtcbiAgfVxuICBmdW5jdGlvbiBhKGIpIHtcbiAgICByZXR1cm4gYi50YXJnZXQgPT09IGUuc2Nyb2xsYmFyWCB8fCBiLnRhcmdldCA9PT0gZS5zY3JvbGxiYXJZIHx8IGIucG9pbnRlclR5cGUgJiYgYi5wb2ludGVyVHlwZSA9PT0gXCJwZW5cIiAmJiBiLmJ1dHRvbnMgPT09IDAgPyAhMSA6ICEhKGIudGFyZ2V0VG91Y2hlcyAmJiBiLnRhcmdldFRvdWNoZXMubGVuZ3RoID09PSAxIHx8IGIucG9pbnRlclR5cGUgJiYgYi5wb2ludGVyVHlwZSAhPT0gXCJtb3VzZVwiICYmIGIucG9pbnRlclR5cGUgIT09IGIuTVNQT0lOVEVSX1RZUEVfTU9VU0UpO1xuICB9XG4gIGZ1bmN0aW9uIHMoYikge1xuICAgIGlmIChhKGIpKSB7XG4gICAgICB2YXIgTSA9IGkoYik7XG4gICAgICBvLnN0YXJ0T2Zmc2V0LnBhZ2VYID0gTS5wYWdlWCwgby5zdGFydE9mZnNldC5wYWdlWSA9IE0ucGFnZVksIG8uc3RhcnRUaW1lID0gKC8qIEBfX1BVUkVfXyAqLyBuZXcgRGF0ZSgpKS5nZXRUaW1lKCksIG8uZWFzaW5nTG9vcCAhPT0gbnVsbCAmJiBjbGVhckludGVydmFsKG8uZWFzaW5nTG9vcCk7XG4gICAgfVxuICB9XG4gIGZ1bmN0aW9uIGwoYiwgTSwgdSkge1xuICAgIGlmICghdC5jb250YWlucyhiKSlcbiAgICAgIHJldHVybiAhMTtcbiAgICBmb3IgKHZhciBBID0gYjsgQSAmJiBBICE9PSB0OyApIHtcbiAgICAgIGlmIChBLmNsYXNzTGlzdC5jb250YWlucyhkMi5lbGVtZW50LmNvbnN1bWluZykpXG4gICAgICAgIHJldHVybiAhMDtcbiAgICAgIHZhciB6ID0gRGUoQSk7XG4gICAgICBpZiAodSAmJiB6Lm92ZXJmbG93WS5tYXRjaCgvKHNjcm9sbHxhdXRvKS8pKSB7XG4gICAgICAgIHZhciBmID0gQS5zY3JvbGxIZWlnaHQgLSBBLmNsaWVudEhlaWdodDtcbiAgICAgICAgaWYgKGYgPiAwICYmIChBLnNjcm9sbFRvcCA+IDAgJiYgdSA8IDAgfHwgQS5zY3JvbGxUb3AgPCBmICYmIHUgPiAwKSlcbiAgICAgICAgICByZXR1cm4gITA7XG4gICAgICB9XG4gICAgICBpZiAoTSAmJiB6Lm92ZXJmbG93WC5tYXRjaCgvKHNjcm9sbHxhdXRvKS8pKSB7XG4gICAgICAgIHZhciBPID0gQS5zY3JvbGxXaWR0aCAtIEEuY2xpZW50V2lkdGg7XG4gICAgICAgIGlmIChPID4gMCAmJiAoQS5zY3JvbGxMZWZ0ID4gMCAmJiBNIDwgMCB8fCBBLnNjcm9sbExlZnQgPCBPICYmIE0gPiAwKSlcbiAgICAgICAgICByZXR1cm4gITA7XG4gICAgICB9XG4gICAgICBBID0gQS5wYXJlbnROb2RlO1xuICAgIH1cbiAgICByZXR1cm4gITE7XG4gIH1cbiAgZnVuY3Rpb24gcChiKSB7XG4gICAgaWYgKGEoYikpIHtcbiAgICAgIHZhciBNID0gaShiKSwgdSA9IHsgcGFnZVg6IE0ucGFnZVgsIHBhZ2VZOiBNLnBhZ2VZIH0sIEEgPSB1LnBhZ2VYIC0gby5zdGFydE9mZnNldC5wYWdlWCwgeiA9IHUucGFnZVkgLSBvLnN0YXJ0T2Zmc2V0LnBhZ2VZO1xuICAgICAgaWYgKGwoYi50YXJnZXQsIEEsIHopKVxuICAgICAgICByZXR1cm47XG4gICAgICByKEEsIHopLCBvLnN0YXJ0T2Zmc2V0ID0gdTtcbiAgICAgIHZhciBmID0gKC8qIEBfX1BVUkVfXyAqLyBuZXcgRGF0ZSgpKS5nZXRUaW1lKCksIE8gPSBmIC0gby5zdGFydFRpbWU7XG4gICAgICBPID4gMCAmJiAoby5zcGVlZC54ID0gQSAvIE8sIG8uc3BlZWQueSA9IHogLyBPLCBvLnN0YXJ0VGltZSA9IGYpLCBuKEEsIHopICYmIGIuY2FuY2VsYWJsZSAmJiBiLnByZXZlbnREZWZhdWx0KCk7XG4gICAgfVxuICB9XG4gIGZ1bmN0aW9uIGQoKSB7XG4gICAgZS5zZXR0aW5ncy5zd2lwZUVhc2luZyAmJiAoY2xlYXJJbnRlcnZhbChvLmVhc2luZ0xvb3ApLCBvLmVhc2luZ0xvb3AgPSBzZXRJbnRlcnZhbChmdW5jdGlvbigpIHtcbiAgICAgIGlmIChlLmlzSW5pdGlhbGl6ZWQpIHtcbiAgICAgICAgY2xlYXJJbnRlcnZhbChvLmVhc2luZ0xvb3ApO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBpZiAoIW8uc3BlZWQueCAmJiAhby5zcGVlZC55KSB7XG4gICAgICAgIGNsZWFySW50ZXJ2YWwoby5lYXNpbmdMb29wKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgaWYgKE1hdGguYWJzKG8uc3BlZWQueCkgPCAwLjAxICYmIE1hdGguYWJzKG8uc3BlZWQueSkgPCAwLjAxKSB7XG4gICAgICAgIGNsZWFySW50ZXJ2YWwoby5lYXNpbmdMb29wKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgcihvLnNwZWVkLnggKiAzMCwgby5zcGVlZC55ICogMzApLCBvLnNwZWVkLnggKj0gMC44LCBvLnNwZWVkLnkgKj0gMC44O1xuICAgIH0sIDEwKSk7XG4gIH1cbiAgUjMuc3VwcG9ydHNUb3VjaCA/IChlLmV2ZW50LmJpbmQodCwgXCJ0b3VjaHN0YXJ0XCIsIHMpLCBlLmV2ZW50LmJpbmQodCwgXCJ0b3VjaG1vdmVcIiwgcCksIGUuZXZlbnQuYmluZCh0LCBcInRvdWNoZW5kXCIsIGQpKSA6IFIzLnN1cHBvcnRzSWVQb2ludGVyICYmICh3aW5kb3cuUG9pbnRlckV2ZW50ID8gKGUuZXZlbnQuYmluZCh0LCBcInBvaW50ZXJkb3duXCIsIHMpLCBlLmV2ZW50LmJpbmQodCwgXCJwb2ludGVybW92ZVwiLCBwKSwgZS5ldmVudC5iaW5kKHQsIFwicG9pbnRlcnVwXCIsIGQpKSA6IHdpbmRvdy5NU1BvaW50ZXJFdmVudCAmJiAoZS5ldmVudC5iaW5kKHQsIFwiTVNQb2ludGVyRG93blwiLCBzKSwgZS5ldmVudC5iaW5kKHQsIFwiTVNQb2ludGVyTW92ZVwiLCBwKSwgZS5ldmVudC5iaW5kKHQsIFwiTVNQb2ludGVyVXBcIiwgZCkpKTtcbn1cbnZhciBTUyA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4ge1xuICAgIGhhbmRsZXJzOiBbXCJjbGljay1yYWlsXCIsIFwiZHJhZy10aHVtYlwiLCBcImtleWJvYXJkXCIsIFwid2hlZWxcIiwgXCJ0b3VjaFwiXSxcbiAgICBtYXhTY3JvbGxiYXJMZW5ndGg6IG51bGwsXG4gICAgbWluU2Nyb2xsYmFyTGVuZ3RoOiBudWxsLFxuICAgIHNjcm9sbGluZ1RocmVzaG9sZDogMWUzLFxuICAgIHNjcm9sbFhNYXJnaW5PZmZzZXQ6IDAsXG4gICAgc2Nyb2xsWU1hcmdpbk9mZnNldDogMCxcbiAgICBzdXBwcmVzc1Njcm9sbFg6ICExLFxuICAgIHN1cHByZXNzU2Nyb2xsWTogITEsXG4gICAgc3dpcGVFYXNpbmc6ICEwLFxuICAgIHVzZUJvdGhXaGVlbEF4ZXM6ICExLFxuICAgIHdoZWVsUHJvcGFnYXRpb246ICEwLFxuICAgIHdoZWVsU3BlZWQ6IDFcbiAgfTtcbn0sIEVTID0ge1xuICBcImNsaWNrLXJhaWxcIjogd1MsXG4gIFwiZHJhZy10aHVtYlwiOiB4UyxcbiAga2V5Ym9hcmQ6IFdTLFxuICB3aGVlbDogUlMsXG4gIHRvdWNoOiBCU1xufSwgSXIgPSBmdW5jdGlvbih0LCBvKSB7XG4gIHZhciBuID0gdGhpcztcbiAgaWYgKG8gPT09IHZvaWQgMCAmJiAobyA9IHt9KSwgdHlwZW9mIHQgPT0gXCJzdHJpbmdcIiAmJiAodCA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IodCkpLCAhdCB8fCAhdC5ub2RlTmFtZSlcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCJubyBlbGVtZW50IGlzIHNwZWNpZmllZCB0byBpbml0aWFsaXplIFBlcmZlY3RTY3JvbGxiYXJcIik7XG4gIHRoaXMuZWxlbWVudCA9IHQsIHQuY2xhc3NMaXN0LmFkZChkMi5tYWluKSwgdGhpcy5zZXR0aW5ncyA9IFNTKCk7XG4gIGZvciAodmFyIHIgaW4gbylcbiAgICB0aGlzLnNldHRpbmdzW3JdID0gb1tyXTtcbiAgdGhpcy5jb250YWluZXJXaWR0aCA9IG51bGwsIHRoaXMuY29udGFpbmVySGVpZ2h0ID0gbnVsbCwgdGhpcy5jb250ZW50V2lkdGggPSBudWxsLCB0aGlzLmNvbnRlbnRIZWlnaHQgPSBudWxsO1xuICB2YXIgaSA9IGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiB0LmNsYXNzTGlzdC5hZGQoZDIuc3RhdGUuZm9jdXMpO1xuICB9LCBhID0gZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIHQuY2xhc3NMaXN0LnJlbW92ZShkMi5zdGF0ZS5mb2N1cyk7XG4gIH07XG4gIHRoaXMuaXNSdGwgPSBEZSh0KS5kaXJlY3Rpb24gPT09IFwicnRsXCIsIHRoaXMuaXNSdGwgPT09ICEwICYmIHQuY2xhc3NMaXN0LmFkZChkMi5ydGwpLCB0aGlzLmlzTmVnYXRpdmVTY3JvbGwgPSBmdW5jdGlvbigpIHtcbiAgICB2YXIgcCA9IHQuc2Nyb2xsTGVmdCwgZCA9IG51bGw7XG4gICAgcmV0dXJuIHQuc2Nyb2xsTGVmdCA9IC0xLCBkID0gdC5zY3JvbGxMZWZ0IDwgMCwgdC5zY3JvbGxMZWZ0ID0gcCwgZDtcbiAgfSgpLCB0aGlzLm5lZ2F0aXZlU2Nyb2xsQWRqdXN0bWVudCA9IHRoaXMuaXNOZWdhdGl2ZVNjcm9sbCA/IHQuc2Nyb2xsV2lkdGggLSB0LmNsaWVudFdpZHRoIDogMCwgdGhpcy5ldmVudCA9IG5ldyBjbygpLCB0aGlzLm93bmVyRG9jdW1lbnQgPSB0Lm93bmVyRG9jdW1lbnQgfHwgZG9jdW1lbnQsIHRoaXMuc2Nyb2xsYmFyWFJhaWwgPSBobihkMi5lbGVtZW50LnJhaWwoXCJ4XCIpKSwgdC5hcHBlbmRDaGlsZCh0aGlzLnNjcm9sbGJhclhSYWlsKSwgdGhpcy5zY3JvbGxiYXJYID0gaG4oZDIuZWxlbWVudC50aHVtYihcInhcIikpLCB0aGlzLnNjcm9sbGJhclhSYWlsLmFwcGVuZENoaWxkKHRoaXMuc2Nyb2xsYmFyWCksIHRoaXMuc2Nyb2xsYmFyWC5zZXRBdHRyaWJ1dGUoXCJ0YWJpbmRleFwiLCAwKSwgdGhpcy5ldmVudC5iaW5kKHRoaXMuc2Nyb2xsYmFyWCwgXCJmb2N1c1wiLCBpKSwgdGhpcy5ldmVudC5iaW5kKHRoaXMuc2Nyb2xsYmFyWCwgXCJibHVyXCIsIGEpLCB0aGlzLnNjcm9sbGJhclhBY3RpdmUgPSBudWxsLCB0aGlzLnNjcm9sbGJhclhXaWR0aCA9IG51bGwsIHRoaXMuc2Nyb2xsYmFyWExlZnQgPSBudWxsO1xuICB2YXIgcyA9IERlKHRoaXMuc2Nyb2xsYmFyWFJhaWwpO1xuICB0aGlzLnNjcm9sbGJhclhCb3R0b20gPSBwYXJzZUludChzLmJvdHRvbSwgMTApLCBpc05hTih0aGlzLnNjcm9sbGJhclhCb3R0b20pID8gKHRoaXMuaXNTY3JvbGxiYXJYVXNpbmdCb3R0b20gPSAhMSwgdGhpcy5zY3JvbGxiYXJYVG9wID0gdDIocy50b3ApKSA6IHRoaXMuaXNTY3JvbGxiYXJYVXNpbmdCb3R0b20gPSAhMCwgdGhpcy5yYWlsQm9yZGVyWFdpZHRoID0gdDIocy5ib3JkZXJMZWZ0V2lkdGgpICsgdDIocy5ib3JkZXJSaWdodFdpZHRoKSwgRDIodGhpcy5zY3JvbGxiYXJYUmFpbCwgeyBkaXNwbGF5OiBcImJsb2NrXCIgfSksIHRoaXMucmFpbFhNYXJnaW5XaWR0aCA9IHQyKHMubWFyZ2luTGVmdCkgKyB0MihzLm1hcmdpblJpZ2h0KSwgRDIodGhpcy5zY3JvbGxiYXJYUmFpbCwgeyBkaXNwbGF5OiBcIlwiIH0pLCB0aGlzLnJhaWxYV2lkdGggPSBudWxsLCB0aGlzLnJhaWxYUmF0aW8gPSBudWxsLCB0aGlzLnNjcm9sbGJhcllSYWlsID0gaG4oZDIuZWxlbWVudC5yYWlsKFwieVwiKSksIHQuYXBwZW5kQ2hpbGQodGhpcy5zY3JvbGxiYXJZUmFpbCksIHRoaXMuc2Nyb2xsYmFyWSA9IGhuKGQyLmVsZW1lbnQudGh1bWIoXCJ5XCIpKSwgdGhpcy5zY3JvbGxiYXJZUmFpbC5hcHBlbmRDaGlsZCh0aGlzLnNjcm9sbGJhclkpLCB0aGlzLnNjcm9sbGJhclkuc2V0QXR0cmlidXRlKFwidGFiaW5kZXhcIiwgMCksIHRoaXMuZXZlbnQuYmluZCh0aGlzLnNjcm9sbGJhclksIFwiZm9jdXNcIiwgaSksIHRoaXMuZXZlbnQuYmluZCh0aGlzLnNjcm9sbGJhclksIFwiYmx1clwiLCBhKSwgdGhpcy5zY3JvbGxiYXJZQWN0aXZlID0gbnVsbCwgdGhpcy5zY3JvbGxiYXJZSGVpZ2h0ID0gbnVsbCwgdGhpcy5zY3JvbGxiYXJZVG9wID0gbnVsbDtcbiAgdmFyIGwgPSBEZSh0aGlzLnNjcm9sbGJhcllSYWlsKTtcbiAgdGhpcy5zY3JvbGxiYXJZUmlnaHQgPSBwYXJzZUludChsLnJpZ2h0LCAxMCksIGlzTmFOKHRoaXMuc2Nyb2xsYmFyWVJpZ2h0KSA/ICh0aGlzLmlzU2Nyb2xsYmFyWVVzaW5nUmlnaHQgPSAhMSwgdGhpcy5zY3JvbGxiYXJZTGVmdCA9IHQyKGwubGVmdCkpIDogdGhpcy5pc1Njcm9sbGJhcllVc2luZ1JpZ2h0ID0gITAsIHRoaXMuc2Nyb2xsYmFyWU91dGVyV2lkdGggPSB0aGlzLmlzUnRsID8gcVModGhpcy5zY3JvbGxiYXJZKSA6IG51bGwsIHRoaXMucmFpbEJvcmRlcllXaWR0aCA9IHQyKGwuYm9yZGVyVG9wV2lkdGgpICsgdDIobC5ib3JkZXJCb3R0b21XaWR0aCksIEQyKHRoaXMuc2Nyb2xsYmFyWVJhaWwsIHsgZGlzcGxheTogXCJibG9ja1wiIH0pLCB0aGlzLnJhaWxZTWFyZ2luSGVpZ2h0ID0gdDIobC5tYXJnaW5Ub3ApICsgdDIobC5tYXJnaW5Cb3R0b20pLCBEMih0aGlzLnNjcm9sbGJhcllSYWlsLCB7IGRpc3BsYXk6IFwiXCIgfSksIHRoaXMucmFpbFlIZWlnaHQgPSBudWxsLCB0aGlzLnJhaWxZUmF0aW8gPSBudWxsLCB0aGlzLnJlYWNoID0ge1xuICAgIHg6IHQuc2Nyb2xsTGVmdCA8PSAwID8gXCJzdGFydFwiIDogdC5zY3JvbGxMZWZ0ID49IHRoaXMuY29udGVudFdpZHRoIC0gdGhpcy5jb250YWluZXJXaWR0aCA/IFwiZW5kXCIgOiBudWxsLFxuICAgIHk6IHQuc2Nyb2xsVG9wIDw9IDAgPyBcInN0YXJ0XCIgOiB0LnNjcm9sbFRvcCA+PSB0aGlzLmNvbnRlbnRIZWlnaHQgLSB0aGlzLmNvbnRhaW5lckhlaWdodCA/IFwiZW5kXCIgOiBudWxsXG4gIH0sIHRoaXMuaXNBbGl2ZSA9ICEwLCB0aGlzLnNldHRpbmdzLmhhbmRsZXJzLmZvckVhY2goZnVuY3Rpb24ocCkge1xuICAgIHJldHVybiBFU1twXShuKTtcbiAgfSksIHRoaXMubGFzdFNjcm9sbFRvcCA9IE1hdGguZmxvb3IodC5zY3JvbGxUb3ApLCB0aGlzLmxhc3RTY3JvbGxMZWZ0ID0gdC5zY3JvbGxMZWZ0LCB0aGlzLmV2ZW50LmJpbmQodGhpcy5lbGVtZW50LCBcInNjcm9sbFwiLCBmdW5jdGlvbihwKSB7XG4gICAgcmV0dXJuIG4ub25TY3JvbGwocCk7XG4gIH0pLCBidCh0aGlzKTtcbn07XG5Jci5wcm90b3R5cGUudXBkYXRlID0gZnVuY3Rpb24oKSB7XG4gIHRoaXMuaXNBbGl2ZSAmJiAodGhpcy5uZWdhdGl2ZVNjcm9sbEFkanVzdG1lbnQgPSB0aGlzLmlzTmVnYXRpdmVTY3JvbGwgPyB0aGlzLmVsZW1lbnQuc2Nyb2xsV2lkdGggLSB0aGlzLmVsZW1lbnQuY2xpZW50V2lkdGggOiAwLCBEMih0aGlzLnNjcm9sbGJhclhSYWlsLCB7IGRpc3BsYXk6IFwiYmxvY2tcIiB9KSwgRDIodGhpcy5zY3JvbGxiYXJZUmFpbCwgeyBkaXNwbGF5OiBcImJsb2NrXCIgfSksIHRoaXMucmFpbFhNYXJnaW5XaWR0aCA9IHQyKERlKHRoaXMuc2Nyb2xsYmFyWFJhaWwpLm1hcmdpbkxlZnQpICsgdDIoRGUodGhpcy5zY3JvbGxiYXJYUmFpbCkubWFyZ2luUmlnaHQpLCB0aGlzLnJhaWxZTWFyZ2luSGVpZ2h0ID0gdDIoRGUodGhpcy5zY3JvbGxiYXJZUmFpbCkubWFyZ2luVG9wKSArIHQyKERlKHRoaXMuc2Nyb2xsYmFyWVJhaWwpLm1hcmdpbkJvdHRvbSksIEQyKHRoaXMuc2Nyb2xsYmFyWFJhaWwsIHsgZGlzcGxheTogXCJub25lXCIgfSksIEQyKHRoaXMuc2Nyb2xsYmFyWVJhaWwsIHsgZGlzcGxheTogXCJub25lXCIgfSksIGJ0KHRoaXMpLCBMNCh0aGlzLCBcInRvcFwiLCAwLCAhMSwgITApLCBMNCh0aGlzLCBcImxlZnRcIiwgMCwgITEsICEwKSwgRDIodGhpcy5zY3JvbGxiYXJYUmFpbCwgeyBkaXNwbGF5OiBcIlwiIH0pLCBEMih0aGlzLnNjcm9sbGJhcllSYWlsLCB7IGRpc3BsYXk6IFwiXCIgfSkpO1xufTtcbklyLnByb3RvdHlwZS5vblNjcm9sbCA9IGZ1bmN0aW9uKHQpIHtcbiAgdGhpcy5pc0FsaXZlICYmIChidCh0aGlzKSwgTDQodGhpcywgXCJ0b3BcIiwgdGhpcy5lbGVtZW50LnNjcm9sbFRvcCAtIHRoaXMubGFzdFNjcm9sbFRvcCksIEw0KHRoaXMsIFwibGVmdFwiLCB0aGlzLmVsZW1lbnQuc2Nyb2xsTGVmdCAtIHRoaXMubGFzdFNjcm9sbExlZnQpLCB0aGlzLmxhc3RTY3JvbGxUb3AgPSBNYXRoLmZsb29yKHRoaXMuZWxlbWVudC5zY3JvbGxUb3ApLCB0aGlzLmxhc3RTY3JvbGxMZWZ0ID0gdGhpcy5lbGVtZW50LnNjcm9sbExlZnQpO1xufTtcbklyLnByb3RvdHlwZS5kZXN0cm95ID0gZnVuY3Rpb24oKSB7XG4gIHRoaXMuaXNBbGl2ZSAmJiAodGhpcy5ldmVudC51bmJpbmRBbGwoKSwgTjModGhpcy5zY3JvbGxiYXJYKSwgTjModGhpcy5zY3JvbGxiYXJZKSwgTjModGhpcy5zY3JvbGxiYXJYUmFpbCksIE4zKHRoaXMuc2Nyb2xsYmFyWVJhaWwpLCB0aGlzLnJlbW92ZVBzQ2xhc3NlcygpLCB0aGlzLmVsZW1lbnQgPSBudWxsLCB0aGlzLnNjcm9sbGJhclggPSBudWxsLCB0aGlzLnNjcm9sbGJhclkgPSBudWxsLCB0aGlzLnNjcm9sbGJhclhSYWlsID0gbnVsbCwgdGhpcy5zY3JvbGxiYXJZUmFpbCA9IG51bGwsIHRoaXMuaXNBbGl2ZSA9ICExKTtcbn07XG5Jci5wcm90b3R5cGUucmVtb3ZlUHNDbGFzc2VzID0gZnVuY3Rpb24oKSB7XG4gIHRoaXMuZWxlbWVudC5jbGFzc05hbWUgPSB0aGlzLmVsZW1lbnQuY2xhc3NOYW1lLnNwbGl0KFwiIFwiKS5maWx0ZXIoZnVuY3Rpb24odCkge1xuICAgIHJldHVybiAhdC5tYXRjaCgvXnBzKFstX10uK3wpJC8pO1xuICB9KS5qb2luKFwiIFwiKTtcbn07XG5jb25zdCBrUyA9IC8qIEBfX1BVUkVfXyAqLyBPYmplY3QuZnJlZXplKC8qIEBfX1BVUkVfXyAqLyBPYmplY3QuZGVmaW5lUHJvcGVydHkoe1xuICBfX3Byb3RvX186IG51bGwsXG4gIGRlZmF1bHQ6IElyXG59LCBTeW1ib2wudG9TdHJpbmdUYWcsIHsgdmFsdWU6IFwiTW9kdWxlXCIgfSkpLCBOUyA9IC8qIEBfX1BVUkVfXyAqLyB6bChrUyk7XG4oZnVuY3Rpb24oZSwgdCkge1xuICBPYmplY3QuZGVmaW5lUHJvcGVydHkodCwgXCJfX2VzTW9kdWxlXCIsIHtcbiAgICB2YWx1ZTogITBcbiAgfSk7XG4gIHZhciBvID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbihmKSB7XG4gICAgZm9yICh2YXIgTyA9IDE7IE8gPCBhcmd1bWVudHMubGVuZ3RoOyBPKyspIHtcbiAgICAgIHZhciBoID0gYXJndW1lbnRzW09dO1xuICAgICAgZm9yICh2YXIgZyBpbiBoKVxuICAgICAgICBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoaCwgZykgJiYgKGZbZ10gPSBoW2ddKTtcbiAgICB9XG4gICAgcmV0dXJuIGY7XG4gIH0sIG4gPSBmdW5jdGlvbigpIHtcbiAgICBmdW5jdGlvbiBmKE8sIGgpIHtcbiAgICAgIGZvciAodmFyIGcgPSAwOyBnIDwgaC5sZW5ndGg7IGcrKykge1xuICAgICAgICB2YXIgdiA9IGhbZ107XG4gICAgICAgIHYuZW51bWVyYWJsZSA9IHYuZW51bWVyYWJsZSB8fCAhMSwgdi5jb25maWd1cmFibGUgPSAhMCwgXCJ2YWx1ZVwiIGluIHYgJiYgKHYud3JpdGFibGUgPSAhMCksIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShPLCB2LmtleSwgdik7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBmdW5jdGlvbihPLCBoLCBnKSB7XG4gICAgICByZXR1cm4gaCAmJiBmKE8ucHJvdG90eXBlLCBoKSwgZyAmJiBmKE8sIGcpLCBPO1xuICAgIH07XG4gIH0oKSwgciA9IG0xLCBpID0gcChyKSwgYSA9IHBwLCBzID0gTlMsIGwgPSBwKHMpO1xuICBmdW5jdGlvbiBwKGYpIHtcbiAgICByZXR1cm4gZiAmJiBmLl9fZXNNb2R1bGUgPyBmIDogeyBkZWZhdWx0OiBmIH07XG4gIH1cbiAgZnVuY3Rpb24gZChmLCBPKSB7XG4gICAgdmFyIGggPSB7fTtcbiAgICBmb3IgKHZhciBnIGluIGYpXG4gICAgICBPLmluZGV4T2YoZykgPj0gMCB8fCBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoZiwgZykgJiYgKGhbZ10gPSBmW2ddKTtcbiAgICByZXR1cm4gaDtcbiAgfVxuICBmdW5jdGlvbiBiKGYsIE8pIHtcbiAgICBpZiAoIShmIGluc3RhbmNlb2YgTykpXG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uXCIpO1xuICB9XG4gIGZ1bmN0aW9uIE0oZiwgTykge1xuICAgIGlmICghZilcbiAgICAgIHRocm93IG5ldyBSZWZlcmVuY2VFcnJvcihcInRoaXMgaGFzbid0IGJlZW4gaW5pdGlhbGlzZWQgLSBzdXBlcigpIGhhc24ndCBiZWVuIGNhbGxlZFwiKTtcbiAgICByZXR1cm4gTyAmJiAodHlwZW9mIE8gPT0gXCJvYmplY3RcIiB8fCB0eXBlb2YgTyA9PSBcImZ1bmN0aW9uXCIpID8gTyA6IGY7XG4gIH1cbiAgZnVuY3Rpb24gdShmLCBPKSB7XG4gICAgaWYgKHR5cGVvZiBPICE9IFwiZnVuY3Rpb25cIiAmJiBPICE9PSBudWxsKVxuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlN1cGVyIGV4cHJlc3Npb24gbXVzdCBlaXRoZXIgYmUgbnVsbCBvciBhIGZ1bmN0aW9uLCBub3QgXCIgKyB0eXBlb2YgTyk7XG4gICAgZi5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKE8gJiYgTy5wcm90b3R5cGUsIHsgY29uc3RydWN0b3I6IHsgdmFsdWU6IGYsIGVudW1lcmFibGU6ICExLCB3cml0YWJsZTogITAsIGNvbmZpZ3VyYWJsZTogITAgfSB9KSwgTyAmJiAoT2JqZWN0LnNldFByb3RvdHlwZU9mID8gT2JqZWN0LnNldFByb3RvdHlwZU9mKGYsIE8pIDogZi5fX3Byb3RvX18gPSBPKTtcbiAgfVxuICB2YXIgQSA9IHtcbiAgICBcInBzLXNjcm9sbC15XCI6IFwib25TY3JvbGxZXCIsXG4gICAgXCJwcy1zY3JvbGwteFwiOiBcIm9uU2Nyb2xsWFwiLFxuICAgIFwicHMtc2Nyb2xsLXVwXCI6IFwib25TY3JvbGxVcFwiLFxuICAgIFwicHMtc2Nyb2xsLWRvd25cIjogXCJvblNjcm9sbERvd25cIixcbiAgICBcInBzLXNjcm9sbC1sZWZ0XCI6IFwib25TY3JvbGxMZWZ0XCIsXG4gICAgXCJwcy1zY3JvbGwtcmlnaHRcIjogXCJvblNjcm9sbFJpZ2h0XCIsXG4gICAgXCJwcy15LXJlYWNoLXN0YXJ0XCI6IFwib25ZUmVhY2hTdGFydFwiLFxuICAgIFwicHMteS1yZWFjaC1lbmRcIjogXCJvbllSZWFjaEVuZFwiLFxuICAgIFwicHMteC1yZWFjaC1zdGFydFwiOiBcIm9uWFJlYWNoU3RhcnRcIixcbiAgICBcInBzLXgtcmVhY2gtZW5kXCI6IFwib25YUmVhY2hFbmRcIlxuICB9O1xuICBPYmplY3QuZnJlZXplKEEpO1xuICB2YXIgeiA9IGZ1bmN0aW9uKGYpIHtcbiAgICB1KE8sIGYpO1xuICAgIGZ1bmN0aW9uIE8oaCkge1xuICAgICAgYih0aGlzLCBPKTtcbiAgICAgIHZhciBnID0gTSh0aGlzLCAoTy5fX3Byb3RvX18gfHwgT2JqZWN0LmdldFByb3RvdHlwZU9mKE8pKS5jYWxsKHRoaXMsIGgpKTtcbiAgICAgIHJldHVybiBnLmhhbmRsZVJlZiA9IGcuaGFuZGxlUmVmLmJpbmQoZyksIGcuX2hhbmRsZXJCeUV2ZW50ID0ge30sIGc7XG4gICAgfVxuICAgIHJldHVybiBuKE8sIFt7XG4gICAgICBrZXk6IFwiY29tcG9uZW50RGlkTW91bnRcIixcbiAgICAgIHZhbHVlOiBmdW5jdGlvbigpIHtcbiAgICAgICAgdGhpcy5wcm9wcy5vcHRpb24gJiYgY29uc29sZS53YXJuKCdyZWFjdC1wZXJmZWN0LXNjcm9sbGJhcjogdGhlIFwib3B0aW9uXCIgcHJvcCBoYXMgYmVlbiBkZXByZWNhdGVkIGluIGZhdm9yIG9mIFwib3B0aW9uc1wiJyksIHRoaXMuX3BzID0gbmV3IGwuZGVmYXVsdCh0aGlzLl9jb250YWluZXIsIHRoaXMucHJvcHMub3B0aW9ucyB8fCB0aGlzLnByb3BzLm9wdGlvbiksIHRoaXMuX3VwZGF0ZUV2ZW50SG9vaygpLCB0aGlzLl91cGRhdGVDbGFzc05hbWUoKTtcbiAgICAgIH1cbiAgICB9LCB7XG4gICAgICBrZXk6IFwiY29tcG9uZW50RGlkVXBkYXRlXCIsXG4gICAgICB2YWx1ZTogZnVuY3Rpb24oZykge1xuICAgICAgICB0aGlzLl91cGRhdGVFdmVudEhvb2soZyksIHRoaXMudXBkYXRlU2Nyb2xsKCksIGcuY2xhc3NOYW1lICE9PSB0aGlzLnByb3BzLmNsYXNzTmFtZSAmJiB0aGlzLl91cGRhdGVDbGFzc05hbWUoKTtcbiAgICAgIH1cbiAgICB9LCB7XG4gICAgICBrZXk6IFwiY29tcG9uZW50V2lsbFVubW91bnRcIixcbiAgICAgIHZhbHVlOiBmdW5jdGlvbigpIHtcbiAgICAgICAgdmFyIGcgPSB0aGlzO1xuICAgICAgICBPYmplY3Qua2V5cyh0aGlzLl9oYW5kbGVyQnlFdmVudCkuZm9yRWFjaChmdW5jdGlvbih2KSB7XG4gICAgICAgICAgdmFyIEwgPSBnLl9oYW5kbGVyQnlFdmVudFt2XTtcbiAgICAgICAgICBMICYmIGcuX2NvbnRhaW5lci5yZW1vdmVFdmVudExpc3RlbmVyKHYsIEwsICExKTtcbiAgICAgICAgfSksIHRoaXMuX2hhbmRsZXJCeUV2ZW50ID0ge30sIHRoaXMuX3BzLmRlc3Ryb3koKSwgdGhpcy5fcHMgPSBudWxsO1xuICAgICAgfVxuICAgIH0sIHtcbiAgICAgIGtleTogXCJfdXBkYXRlRXZlbnRIb29rXCIsXG4gICAgICB2YWx1ZTogZnVuY3Rpb24oKSB7XG4gICAgICAgIHZhciBnID0gdGhpcywgdiA9IGFyZ3VtZW50cy5sZW5ndGggPiAwICYmIGFyZ3VtZW50c1swXSAhPT0gdm9pZCAwID8gYXJndW1lbnRzWzBdIDoge307XG4gICAgICAgIE9iamVjdC5rZXlzKEEpLmZvckVhY2goZnVuY3Rpb24oTCkge1xuICAgICAgICAgIHZhciB5ID0gZy5wcm9wc1tBW0xdXSwgQiA9IHZbQVtMXV07XG4gICAgICAgICAgaWYgKHkgIT09IEIpIHtcbiAgICAgICAgICAgIGlmIChCKSB7XG4gICAgICAgICAgICAgIHZhciBYID0gZy5faGFuZGxlckJ5RXZlbnRbTF07XG4gICAgICAgICAgICAgIGcuX2NvbnRhaW5lci5yZW1vdmVFdmVudExpc3RlbmVyKEwsIFgsICExKSwgZy5faGFuZGxlckJ5RXZlbnRbTF0gPSBudWxsO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHkpIHtcbiAgICAgICAgICAgICAgdmFyIEYgPSBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4geShnLl9jb250YWluZXIpO1xuICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICBnLl9jb250YWluZXIuYWRkRXZlbnRMaXN0ZW5lcihMLCBGLCAhMSksIGcuX2hhbmRsZXJCeUV2ZW50W0xdID0gRjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH0sIHtcbiAgICAgIGtleTogXCJfdXBkYXRlQ2xhc3NOYW1lXCIsXG4gICAgICB2YWx1ZTogZnVuY3Rpb24oKSB7XG4gICAgICAgIHZhciBnID0gdGhpcy5wcm9wcy5jbGFzc05hbWUsIHYgPSB0aGlzLl9jb250YWluZXIuY2xhc3NOYW1lLnNwbGl0KFwiIFwiKS5maWx0ZXIoZnVuY3Rpb24oTCkge1xuICAgICAgICAgIHJldHVybiBMLm1hdGNoKC9ecHMoWy1fXS4rfCkkLyk7XG4gICAgICAgIH0pLmpvaW4oXCIgXCIpO1xuICAgICAgICB0aGlzLl9jb250YWluZXIgJiYgKHRoaXMuX2NvbnRhaW5lci5jbGFzc05hbWUgPSBcInNjcm9sbGJhci1jb250YWluZXJcIiArIChnID8gXCIgXCIgKyBnIDogXCJcIikgKyAodiA/IFwiIFwiICsgdiA6IFwiXCIpKTtcbiAgICAgIH1cbiAgICB9LCB7XG4gICAgICBrZXk6IFwidXBkYXRlU2Nyb2xsXCIsXG4gICAgICB2YWx1ZTogZnVuY3Rpb24oKSB7XG4gICAgICAgIHRoaXMucHJvcHMub25TeW5jKHRoaXMuX3BzKTtcbiAgICAgIH1cbiAgICB9LCB7XG4gICAgICBrZXk6IFwiaGFuZGxlUmVmXCIsXG4gICAgICB2YWx1ZTogZnVuY3Rpb24oZykge1xuICAgICAgICB0aGlzLl9jb250YWluZXIgPSBnLCB0aGlzLnByb3BzLmNvbnRhaW5lclJlZihnKTtcbiAgICAgIH1cbiAgICB9LCB7XG4gICAgICBrZXk6IFwicmVuZGVyXCIsXG4gICAgICB2YWx1ZTogZnVuY3Rpb24oKSB7XG4gICAgICAgIHZhciBnID0gdGhpcy5wcm9wcztcbiAgICAgICAgZy5jbGFzc05hbWU7XG4gICAgICAgIHZhciB2ID0gZy5zdHlsZTtcbiAgICAgICAgZy5vcHRpb24sIGcub3B0aW9ucywgZy5jb250YWluZXJSZWYsIGcub25TY3JvbGxZLCBnLm9uU2Nyb2xsWCwgZy5vblNjcm9sbFVwLCBnLm9uU2Nyb2xsRG93biwgZy5vblNjcm9sbExlZnQsIGcub25TY3JvbGxSaWdodCwgZy5vbllSZWFjaFN0YXJ0LCBnLm9uWVJlYWNoRW5kLCBnLm9uWFJlYWNoU3RhcnQsIGcub25YUmVhY2hFbmQ7XG4gICAgICAgIHZhciBMID0gZy5jb21wb25lbnQ7XG4gICAgICAgIGcub25TeW5jO1xuICAgICAgICB2YXIgeSA9IGcuY2hpbGRyZW4sIEIgPSBkKGcsIFtcImNsYXNzTmFtZVwiLCBcInN0eWxlXCIsIFwib3B0aW9uXCIsIFwib3B0aW9uc1wiLCBcImNvbnRhaW5lclJlZlwiLCBcIm9uU2Nyb2xsWVwiLCBcIm9uU2Nyb2xsWFwiLCBcIm9uU2Nyb2xsVXBcIiwgXCJvblNjcm9sbERvd25cIiwgXCJvblNjcm9sbExlZnRcIiwgXCJvblNjcm9sbFJpZ2h0XCIsIFwib25ZUmVhY2hTdGFydFwiLCBcIm9uWVJlYWNoRW5kXCIsIFwib25YUmVhY2hTdGFydFwiLCBcIm9uWFJlYWNoRW5kXCIsIFwiY29tcG9uZW50XCIsIFwib25TeW5jXCIsIFwiY2hpbGRyZW5cIl0pLCBYID0gTDtcbiAgICAgICAgcmV0dXJuIGkuZGVmYXVsdC5jcmVhdGVFbGVtZW50KFxuICAgICAgICAgIFgsXG4gICAgICAgICAgbyh7IHN0eWxlOiB2LCByZWY6IHRoaXMuaGFuZGxlUmVmIH0sIEIpLFxuICAgICAgICAgIHlcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9XSksIE87XG4gIH0oci5Db21wb25lbnQpO1xuICB0LmRlZmF1bHQgPSB6LCB6LmRlZmF1bHRQcm9wcyA9IHtcbiAgICBjbGFzc05hbWU6IFwiXCIsXG4gICAgc3R5bGU6IHZvaWQgMCxcbiAgICBvcHRpb246IHZvaWQgMCxcbiAgICBvcHRpb25zOiB2b2lkIDAsXG4gICAgY29udGFpbmVyUmVmOiBmdW5jdGlvbigpIHtcbiAgICB9LFxuICAgIG9uU2Nyb2xsWTogdm9pZCAwLFxuICAgIG9uU2Nyb2xsWDogdm9pZCAwLFxuICAgIG9uU2Nyb2xsVXA6IHZvaWQgMCxcbiAgICBvblNjcm9sbERvd246IHZvaWQgMCxcbiAgICBvblNjcm9sbExlZnQ6IHZvaWQgMCxcbiAgICBvblNjcm9sbFJpZ2h0OiB2b2lkIDAsXG4gICAgb25ZUmVhY2hTdGFydDogdm9pZCAwLFxuICAgIG9uWVJlYWNoRW5kOiB2b2lkIDAsXG4gICAgb25YUmVhY2hTdGFydDogdm9pZCAwLFxuICAgIG9uWFJlYWNoRW5kOiB2b2lkIDAsXG4gICAgb25TeW5jOiBmdW5jdGlvbihPKSB7XG4gICAgICByZXR1cm4gTy51cGRhdGUoKTtcbiAgICB9LFxuICAgIGNvbXBvbmVudDogXCJkaXZcIlxuICB9LCB6LnByb3BUeXBlcyA9IHtcbiAgICBjaGlsZHJlbjogYS5Qcm9wVHlwZXMubm9kZS5pc1JlcXVpcmVkLFxuICAgIGNsYXNzTmFtZTogYS5Qcm9wVHlwZXMuc3RyaW5nLFxuICAgIHN0eWxlOiBhLlByb3BUeXBlcy5vYmplY3QsXG4gICAgb3B0aW9uOiBhLlByb3BUeXBlcy5vYmplY3QsXG4gICAgb3B0aW9uczogYS5Qcm9wVHlwZXMub2JqZWN0LFxuICAgIGNvbnRhaW5lclJlZjogYS5Qcm9wVHlwZXMuZnVuYyxcbiAgICBvblNjcm9sbFk6IGEuUHJvcFR5cGVzLmZ1bmMsXG4gICAgb25TY3JvbGxYOiBhLlByb3BUeXBlcy5mdW5jLFxuICAgIG9uU2Nyb2xsVXA6IGEuUHJvcFR5cGVzLmZ1bmMsXG4gICAgb25TY3JvbGxEb3duOiBhLlByb3BUeXBlcy5mdW5jLFxuICAgIG9uU2Nyb2xsTGVmdDogYS5Qcm9wVHlwZXMuZnVuYyxcbiAgICBvblNjcm9sbFJpZ2h0OiBhLlByb3BUeXBlcy5mdW5jLFxuICAgIG9uWVJlYWNoU3RhcnQ6IGEuUHJvcFR5cGVzLmZ1bmMsXG4gICAgb25ZUmVhY2hFbmQ6IGEuUHJvcFR5cGVzLmZ1bmMsXG4gICAgb25YUmVhY2hTdGFydDogYS5Qcm9wVHlwZXMuZnVuYyxcbiAgICBvblhSZWFjaEVuZDogYS5Qcm9wVHlwZXMuZnVuYyxcbiAgICBvblN5bmM6IGEuUHJvcFR5cGVzLmZ1bmMsXG4gICAgY29tcG9uZW50OiBhLlByb3BUeXBlcy5zdHJpbmdcbiAgfSwgZS5leHBvcnRzID0gdC5kZWZhdWx0O1xufSkoczUsIHM1LmV4cG9ydHMpO1xudmFyIFRTID0gczUuZXhwb3J0cztcbihmdW5jdGlvbihlLCB0KSB7XG4gIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCBcIl9fZXNNb2R1bGVcIiwge1xuICAgIHZhbHVlOiAhMFxuICB9KTtcbiAgdmFyIG8gPSBUUywgbiA9IHIobyk7XG4gIGZ1bmN0aW9uIHIoaSkge1xuICAgIHJldHVybiBpICYmIGkuX19lc01vZHVsZSA/IGkgOiB7IGRlZmF1bHQ6IGkgfTtcbiAgfVxuICB0LmRlZmF1bHQgPSBuLmRlZmF1bHQsIGUuZXhwb3J0cyA9IHQuZGVmYXVsdDtcbn0pKGE1LCBhNS5leHBvcnRzKTtcbnZhciBJUyA9IGE1LmV4cG9ydHM7XG5jb25zdCBEUyA9IC8qIEBfX1BVUkVfXyAqLyBRMihJUyksIEVlID0gNCwgZ24gPSA4LCBIUyA9ICQuZGl2KFxuICAoeyB0aGVtZTogeyBjb2xvcnM6IGUsIGJvcmRlclJhZGl1czogdCB9IH0pID0+IG8xYFxuICAgIGhlaWdodDogMTAwJTtcblxuICAgIC5wcyB7XG4gICAgICBvdmVyZmxvdzogaGlkZGVuICFpbXBvcnRhbnQ7XG4gICAgICBvdmVyZmxvdy1hbmNob3I6IG5vbmU7XG4gICAgICAtbXMtb3ZlcmZsb3ctc3R5bGU6IG5vbmU7XG4gICAgICB0b3VjaC1hY3Rpb246IGF1dG87XG4gICAgICAtbXMtdG91Y2gtYWN0aW9uOiBhdXRvO1xuICAgIH1cblxuICAgIC5wc19fcmFpbC14IHtcbiAgICAgIGRpc3BsYXk6IG5vbmU7XG4gICAgICBvcGFjaXR5OiAwO1xuICAgICAgdHJhbnNpdGlvbjogYmFja2dyb3VuZC1jb2xvciAwLjJzIGxpbmVhciwgb3BhY2l0eSAwLjJzIGxpbmVhcjtcbiAgICAgIC13ZWJraXQtdHJhbnNpdGlvbjogYmFja2dyb3VuZC1jb2xvciAwLjJzIGxpbmVhciwgb3BhY2l0eSAwLjJzIGxpbmVhcjtcbiAgICAgIGhlaWdodDogJHtFZX1weDtcbiAgICAgIC8qIHRoZXJlIG11c3QgYmUgJ2JvdHRvbScgb3IgJ3RvcCcgZm9yIHBzX19yYWlsLXggKi9cbiAgICAgIGJvdHRvbTogJHtnbn1weDtcbiAgICAgIC8qIHBsZWFzZSBkb24ndCBjaGFuZ2UgJ3Bvc2l0aW9uJyAqL1xuICAgICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgICAgYmFja2dyb3VuZDogJHtlLnNjcm9sbC5zY3JvbGxCZ1ByaW1hcnl9O1xuICAgIH1cblxuICAgIC5wc19fcmFpbC15IHtcbiAgICAgIGRpc3BsYXk6IG5vbmU7XG4gICAgICBvcGFjaXR5OiAwO1xuICAgICAgdHJhbnNpdGlvbjogYmFja2dyb3VuZC1jb2xvciAwLjJzIGxpbmVhciwgb3BhY2l0eSAwLjJzIGxpbmVhcjtcbiAgICAgIC13ZWJraXQtdHJhbnNpdGlvbjogYmFja2dyb3VuZC1jb2xvciAwLjJzIGxpbmVhciwgb3BhY2l0eSAwLjJzIGxpbmVhcjtcbiAgICAgIHdpZHRoOiAke0VlfXB4O1xuICAgICAgLyogdGhlcmUgbXVzdCBiZSAncmlnaHQnIG9yICdsZWZ0JyBmb3IgcHNfX3JhaWwteSAqL1xuICAgICAgcmlnaHQ6ICR7Z259cHg7XG4gICAgICAvKiBwbGVhc2UgZG9uJ3QgY2hhbmdlICdwb3NpdGlvbicgKi9cbiAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICAgIFxuICAgICAgYmFja2dyb3VuZDogJHtlLnNjcm9sbC5zY3JvbGxCZ1ByaW1hcnl9O1xuICAgIH1cblxuICAgIC5wc19fdGh1bWIteCB7XG4gICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAke2Uuc2Nyb2xsLnNjcm9sbEJnRGVmYXVsdH07XG4gICAgICBib3JkZXItcmFkaXVzOiAke3QueGx9O1xuICAgICAgdHJhbnNpdGlvbjogYmFja2dyb3VuZC1jb2xvciAwLjJzIGxpbmVhciwgaGVpZ2h0IDAuMnMgZWFzZS1pbi1vdXQ7XG4gICAgICAtd2Via2l0LXRyYW5zaXRpb246IGJhY2tncm91bmQtY29sb3IgMC4ycyBsaW5lYXIsIGhlaWdodCAwLjJzIGVhc2UtaW4tb3V0O1xuICAgICAgaGVpZ2h0OiAke0VlfXB4O1xuICAgICAgLyogdGhlcmUgbXVzdCBiZSAnYm90dG9tJyBmb3IgcHNfX3RodW1iLXggKi9cbiAgICAgIGJvdHRvbTogMDtcbiAgICAgIC8qIHBsZWFzZSBkb24ndCBjaGFuZ2UgJ3Bvc2l0aW9uJyAqL1xuICAgICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgIH1cblxuICAgIC5wc19fdGh1bWIteSB7XG4gICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAke2Uuc2Nyb2xsLnNjcm9sbEJnRGVmYXVsdH07XG4gICAgICBib3JkZXItcmFkaXVzOiAke3QueGx9O1xuICAgICAgdHJhbnNpdGlvbjogYmFja2dyb3VuZC1jb2xvciAwLjJzIGxpbmVhciwgd2lkdGggMC4ycyBlYXNlLWluLW91dDtcbiAgICAgIC13ZWJraXQtdHJhbnNpdGlvbjogYmFja2dyb3VuZC1jb2xvciAwLjJzIGxpbmVhciwgd2lkdGggMC4ycyBlYXNlLWluLW91dDtcbiAgICAgIHdpZHRoOiAke0VlfXB4O1xuICAgICAgLyogdGhlcmUgbXVzdCBiZSAncmlnaHQnIGZvciBwc19fdGh1bWIteSAqL1xuICAgICAgcmlnaHQ6IDA7XG4gICAgICAvKiBwbGVhc2UgZG9uJ3QgY2hhbmdlICdwb3NpdGlvbicgKi9cbiAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICB9XG5cbiAgICAvKiBNUyBzdXBwb3J0cyAqL1xuICAgIEBzdXBwb3J0cyAoLW1zLW92ZXJmbG93LXN0eWxlOiBub25lKSB7XG4gICAgICAucHMge1xuICAgICAgICBvdmVyZmxvdzogYXV0byAhaW1wb3J0YW50O1xuICAgICAgfVxuICAgIH1cblxuICAgIEBtZWRpYSBzY3JlZW4gYW5kICgtbXMtaGlnaC1jb250cmFzdDogYWN0aXZlKSwgKC1tcy1oaWdoLWNvbnRyYXN0OiBub25lKSB7XG4gICAgICAucHMge1xuICAgICAgICBvdmVyZmxvdzogYXV0byAhaW1wb3J0YW50O1xuICAgICAgfVxuICAgIH1cblxuICAgIC5zY3JvbGxiYXItY29udGFpbmVyIHtcbiAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgICAgIGhlaWdodDogMTAwJTtcbiAgICAgIGJveC1zaXppbmc6IGJvcmRlci1ib3g7XG4gICAgfVxuXG4gICAgLnBzLS1hY3RpdmUteCB7XG4gICAgICBwYWRkaW5nLWJvdHRvbTogJHtFZSArIGduICogMn1weDtcbiAgICB9XG5cbiAgICAucHMtLWFjdGl2ZS15IHtcbiAgICAgIHBhZGRpbmctcmlnaHQ6ICR7RWUgKyBnbiAqIDJ9cHg7XG4gICAgfVxuXG4gICAgLnBzLS1hY3RpdmUteCA+IC5wc19fcmFpbC14LFxuICAgIC5wcy0tYWN0aXZlLXkgPiAucHNfX3JhaWwteSB7XG4gICAgICBkaXNwbGF5OiBibG9jaztcbiAgICAgIGJhY2tncm91bmQtY29sb3I6ICR7ZS5zY3JvbGwuc2Nyb2xsQmdQcmltYXJ5fTtcbiAgICAgIGJvcmRlci1yYWRpdXM6ICR7dC54bH07XG4gICAgfVxuXG4gICAgLnBzOmhvdmVyID4gLnBzX19yYWlsLXgsXG4gICAgLnBzOmhvdmVyID4gLnBzX19yYWlsLXksXG4gICAgLnBzLS1mb2N1cyA+IC5wc19fcmFpbC14LFxuICAgIC5wcy0tZm9jdXMgPiAucHNfX3JhaWwteSxcbiAgICAucHMtLXNjcm9sbGluZy14ID4gLnBzX19yYWlsLXgsXG4gICAgLnBzLS1zY3JvbGxpbmcteSA+IC5wc19fcmFpbC15IHtcbiAgICAgIG9wYWNpdHk6IDE7XG4gICAgfVxuXG4gICAgLnBzIC5wc19fcmFpbC14OmhvdmVyLFxuICAgIC5wcyAucHNfX3JhaWwteTpob3ZlcixcbiAgICAucHMgLnBzX19yYWlsLXg6Zm9jdXMsXG4gICAgLnBzIC5wc19fcmFpbC15OmZvY3VzLFxuICAgIC5wcyAucHNfX3JhaWwteC5wcy0tY2xpY2tpbmcsXG4gICAgLnBzIC5wc19fcmFpbC15LnBzLS1jbGlja2luZyB7XG4gICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAke2Uuc2Nyb2xsLnNjcm9sbEJnUHJpbWFyeX07XG4gICAgICBvcGFjaXR5OiAxO1xuICAgIH1cblxuICAgIC5wc19fcmFpbC15OmhvdmVyID4gLnBzX190aHVtYi15LFxuICAgIC5wc19fcmFpbC15OmZvY3VzID4gLnBzX190aHVtYi15LFxuICAgIC5wc19fcmFpbC15LnBzLS1jbGlja2luZyAucHNfX3RodW1iLXkge1xuICAgICAgYmFja2dyb3VuZC1jb2xvcjogJHtlLnNjcm9sbC5zY3JvbGxCZ1ByZXNzZWR9O1xuICAgICAgd2lkdGg6ICR7RWV9cHg7XG4gICAgfVxuXG4gICAgLnBzX19yYWlsLXk6aG92ZXIgPiAucHNfX3RodW1iLXkge1xuICAgICAgYmFja2dyb3VuZC1jb2xvcjogJHtlLnNjcm9sbC5zY3JvbGxCZ0hvdmVyfTtcbiAgICAgIHdpZHRoOiAke0VlfXB4O1xuICAgIH1cblxuICAgIC5wc19fcmFpbC14OmhvdmVyID4gLnBzX190aHVtYi14LFxuICAgIC5wc19fcmFpbC14OmZvY3VzID4gLnBzX190aHVtYi14LFxuICAgIC5wc19fcmFpbC14LnBzLS1jbGlja2luZyAucHNfX3RodW1iLXgge1xuICAgICAgYmFja2dyb3VuZC1jb2xvcjogJHtlLnNjcm9sbC5zY3JvbGxCZ1ByZXNzZWR9O1xuICAgICAgaGVpZ2h0OiAke0VlfXB4O1xuICAgIH1cblxuICAgIC5wc19fcmFpbC14OmhvdmVyID4gLnBzX190aHVtYi14IHtcbiAgICAgIGJhY2tncm91bmQtY29sb3I6ICR7ZS5zY3JvbGwuc2Nyb2xsQmdIb3Zlcn07XG4gICAgICBoZWlnaHQ6ICR7RWV9cHg7XG4gICAgfVxuXG4gICAgLnBzX19yYWlsLXkge1xuICAgICAgbWFyZ2luLXRvcDogOHB4O1xuICAgIH1cbiAgYFxuKTtcbiQuZGl2YFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAkeyh7IHRoZW1lOiBlIH0pID0+IGUuY29sb3JzLmJhY2tncm91bmRzLndoaXRlU21va2V9O1xuICBoZWlnaHQ6IDEwMCU7XG5gO1xuJC5kaXZgXG4gIHdpZHRoOiA4MDBweDtcbiAgaGVpZ2h0OiA0MDBweDtcbiAgYmFja2dyb3VuZC1jb2xvcjogJHsoeyB0aGVtZTogZSB9KSA9PiBlLmNvbG9ycy5iYWNrZ3JvdW5kcy5iZ1ByaW1hcnl9O1xuICBwYWRkaW5nOiAkeyh7IHRoZW1lOiBlIH0pID0+IGUuc3BhY2luZ3Muc3A4fSAwO1xuYDtcbiQuZGl2YFxuICBoZWlnaHQ6IDEwMDBweDtcbmA7XG4kLmRpdmBcbiAgd2lkdGg6IDgwMHB4O1xuICBoZWlnaHQ6IDQwMHB4O1xuICBwYWRkaW5nOiAwICR7KHsgdGhlbWU6IGUgfSkgPT4gZS5zcGFjaW5ncy5zcDh9O1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAkeyh7IHRoZW1lOiBlIH0pID0+IGUuY29sb3JzLmJhY2tncm91bmRzLmJnUHJpbWFyeX07XG5gO1xuJC5kaXZgXG4gIHdpZHRoOiAxMDAwcHg7XG4gIGhlaWdodDogMTAwJTtcbmA7XG5mdW5jdGlvbiBWUyh7IGNoaWxkcmVuOiBlLCAuLi50IH0sIG8pIHtcbiAgY29uc3QgbiA9IG4wKG51bGwpO1xuICByZXR1cm4gUDEoKCkgPT4ge1xuICAgIG4uY3VycmVudCAmJiBuLmN1cnJlbnQudXBkYXRlU2Nyb2xsKCk7XG4gIH0sIFtdKSwgLyogQF9fUFVSRV9fICovIGMoSFMsIHsgcmVmOiBvLCBjaGlsZHJlbjogLyogQF9fUFVSRV9fICovIGMoRFMsIHsgcmVmOiBuLCAuLi50LCBjaGlsZHJlbjogZSB9KSB9KTtcbn1cbmNvbnN0IGo0ID0gQjAoVlMpLCBkNiA9ICQuYnV0dG9uKFxuICAoe1xuICAgIHRoZW1lOiB7XG4gICAgICBib3JkZXJSYWRpdXM6IGUsXG4gICAgICBsaW5lSGVpZ2h0OiB0LFxuICAgICAgdHlwb2dyYXBoeTogbyxcbiAgICAgIGNvbG9yczogbixcbiAgICAgIHRyYW5zaXRpb25zOiByLFxuICAgICAgbWl4aW5zOiBpLFxuICAgICAgR0xPQkFMX0lURU1fSEVJR0hUX0NPTkRFTlNFRDogYVxuICAgIH0sXG4gICAgaXNBY3RpdmU6IHMsXG4gICAgb3JpZW50YXRpb246IGxcbiAgfSkgPT4ge1xuICAgIGNvbnN0IHAgPSBvMWBcbiAgICAgIHRyYW5zaXRpb246ICR7ci5iYXNlfTtcbiAgICAgIGNvbG9yOiAke24uYmx1ZX07XG5cbiAgICAgICY6YWZ0ZXIge1xuICAgICAgICB0cmFuc2l0aW9uOiAke3IuYmFzZX07XG4gICAgICAgIG9wYWNpdHk6IDE7XG4gICAgICAgIHotaW5kZXg6IDE7XG4gICAgICB9XG4gICAgYCwgZCA9ICgpID0+IHtcbiAgICAgIHN3aXRjaCAobCkge1xuICAgICAgICBjYXNlIEgyLlZFUlRJQ0FMOlxuICAgICAgICAgIHJldHVybiBvMWBcbiAgICAgICAgICAgIHRvcDogNnB4O1xuICAgICAgICAgICAgYm90dG9tOiA2cHg7XG4gICAgICAgICAgICBsZWZ0OiAwO1xuICAgICAgICAgICAgd2lkdGg6IDJweDtcbiAgICAgICAgICAgIGJvcmRlci1yYWRpdXM6ICR7ZS5iYXNlfSAwIDAgJHtlLmJhc2V9O1xuICAgICAgICAgICAgYm94LXNoYWRvdzogMnB4IDAgMCAwICR7bi50YWIudGFiSW5kaWNhdG9yfSBpbnNldDtcbiAgICAgICAgICBgO1xuICAgICAgICBjYXNlIEgyLkhPUklaT05UQUw6XG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgcmV0dXJuIG8xYFxuICAgICAgICAgICAgYm90dG9tOiAwO1xuICAgICAgICAgICAgcmlnaHQ6IDEycHg7XG4gICAgICAgICAgICBsZWZ0OiAxMnB4O1xuICAgICAgICAgICAgaGVpZ2h0OiAycHg7XG4gICAgICAgICAgICBib3JkZXItcmFkaXVzOiAwO1xuICAgICAgICAgICAgYm94LXNoYWRvdzogMCAycHggMCAwICR7bi50YWIudGFiSW5kaWNhdG9yfSBpbnNldDtcbiAgICAgICAgICBgO1xuICAgICAgfVxuICAgIH0sIGIgPSAoKSA9PiB7XG4gICAgICBzd2l0Y2ggKGwpIHtcbiAgICAgICAgY2FzZSBIMi5WRVJUSUNBTDpcbiAgICAgICAgICByZXR1cm4gbzFgXG4gICAgICAgICAgICB0b3A6IDFweDtcbiAgICAgICAgICAgIGJvdHRvbTogMXB4O1xuICAgICAgICAgICAgbGVmdDogMDtcbiAgICAgICAgICAgIHdpZHRoOiAycHg7XG4gICAgICAgICAgICBib3JkZXItcmFkaXVzOiAke2UuYmFzZX0gMCAwICR7ZS5iYXNlfTtcbiAgICAgICAgICAgIGJveC1zaGFkb3c6IDJweCAwIDAgMCAke24udGFiLnRhYkluZGljYXRvcn0gaW5zZXQ7XG4gICAgICAgICAgYDtcbiAgICAgICAgY2FzZSBIMi5IT1JJWk9OVEFMOlxuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIHJldHVybiBvMWBcbiAgICAgICAgICAgIGJvdHRvbTogMDtcbiAgICAgICAgICAgIHJpZ2h0OiAxcHg7XG4gICAgICAgICAgICBsZWZ0OiAxcHg7XG4gICAgICAgICAgICBoZWlnaHQ6IDJweDtcbiAgICAgICAgICAgIGJvcmRlci1yYWRpdXM6IDA7XG4gICAgICAgICAgICBib3gtc2hhZG93OiAwIDJweCAwIDAgJHtuLnRhYi50YWJJbmRpY2F0b3J9IGluc2V0O1xuICAgICAgICAgIGA7XG4gICAgICB9XG4gICAgfTtcbiAgICByZXR1cm4gbzFgXG4gICAgICAke2kuYnV0dG9uUmVzZXR9O1xuXG4gICAgICBwYWRkaW5nOiA2cHggMTJweDtcbiAgICAgIGZvbnQtc2l6ZTogJHtvLnQxNH07XG4gICAgICBsaW5lLWhlaWdodDogJHt0LmxoMjJ9O1xuICAgICAgY29sb3I6ICR7bi5lY2xpcHNlfTtcbiAgICAgIG1pbi13aWR0aDogMTc4cHg7XG4gICAgICB0ZXh0LWFsaWduOiBjZW50ZXI7XG4gICAgICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gICAgICBoZWlnaHQ6ICR7YX07XG4gICAgICB3aGl0ZS1zcGFjZTogbm93cmFwO1xuXG4gICAgICAmOmFmdGVyIHtcbiAgICAgICAgY29udGVudDogJyc7XG4gICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICAgICAgb3BhY2l0eTogMDtcbiAgICAgICAgdHJhbnNpdGlvbjogJHtyLmJhc2V9O1xuICAgICAgICAke2R9O1xuICAgICAgfVxuXG4gICAgICAmOm5vdCg6ZGlzYWJsZWQpIHtcbiAgICAgICAgJjpob3ZlciB7XG4gICAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogJHtuLmJhY2tncm91bmRzLmN1bHR1cmVkfTtcbiAgICAgICAgICB0cmFuc2l0aW9uOiAke3IuYmFzZX07XG4gICAgICAgICAgJHtzICYmIG8xYFxuICAgICAgICAgICAgJjphZnRlciB7XG4gICAgICAgICAgICAgIGNvbnRlbnQ6ICcnO1xuICAgICAgICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgICAgICAgICAgIG9wYWNpdHk6IDE7XG4gICAgICAgICAgICAgIHRyYW5zaXRpb246ICR7ci5iYXNlfTtcbiAgICAgICAgICAgICAgJHtifTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICBgfVxuICAgICAgICB9XG5cbiAgICAgICAgJHtzICYmIG8xYFxuICAgICAgICAgICR7cH1cbiAgICAgICAgYH1cblxuICAgICAgICAmOmFjdGl2ZSB7XG4gICAgICAgICAgJHtwfVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgICY6ZGlzYWJsZWQge1xuICAgICAgICBjb2xvcjogJHtuLmdhaW5zYm9yb307XG4gICAgICAgIGN1cnNvcjogZGVmYXVsdDtcbiAgICAgIH1cbiAgICBgO1xuICB9XG4pLCBiNiA9ICQuc3BhbihcbiAgKHsgdGhlbWU6IHsgdHlwb2dyYXBoeTogZSwgbGluZUhlaWdodDogdCwgY29sb3JzOiBvLCBmb250V2VpZ2h0OiBuIH0gfSkgPT4gbzFgXG4gICAgZm9udC1zaXplOiAke2UudDEyfTtcbiAgICBsaW5lLWhlaWdodDogJHt0LmxoMjB9O1xuICAgIGNvbG9yOiAke28udGV4dEljb24udGV4dE1lZGl1bWVtcGhhc2lzfTtcbiAgICBmb250LXdlaWdodDogJHtuLm1lZGl1bX07XG5cbiAgICAmOm5vdCg6bGFzdC1jaGlsZCkge1xuICAgICAgbWFyZ2luLXJpZ2h0OiAkeyh7IHRoZW1lOiByIH0pID0+IHIuc3BhY2luZ3Muc3AxMn07XG4gICAgfVxuICBgXG4pLCBUMyA9ICQoZDYpKFxuICAoeyB0aGVtZTogeyBjb2xvcnM6IGUsIHNwYWNpbmdzOiB0IH0sIGlzQWN0aXZlOiBvLCBvcmllbnRhdGlvbjogbiB9KSA9PiB7XG4gICAgbzFgXG4gICAgICAke1YyfSB7XG4gICAgICAgIGJhY2tncm91bmQtY29sb3I6ICR7ZS5iYWNrZ3JvdW5kcy5iZ1RlcnRpYXJ5fTtcbiAgICAgIH1cbiAgICAgICY6aG92ZXIge1xuICAgICAgICBiYWNrZ3JvdW5kOiAke2UuYmFja2dyb3VuZHMuYmdIb3ZlclByaW1hcnl9O1xuICAgICAgfVxuICAgIGA7XG4gICAgY29uc3QgciA9IG4gPT09IEgyLlZFUlRJQ0FMO1xuICAgIHJldHVybiBvMWBcbiAgICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgICBhbGlnbi1pdGVtczogY2VudGVyO1xuICAgICAganVzdGlmeS1jb250ZW50OiAke3IgPyBcImZsZXgtc3RhcnRcIiA6IFwiY2VudGVyXCJ9O1xuICAgICAgbWluLXdpZHRoOiAke3IgPyBcIjEwMCVcIiA6IFwiYXV0b1wifTtcbiAgICAgIC5pY29uLXN5c3RlbSB7XG4gICAgICAgIGNvbG9yOiAke2UudGV4dEljb24udGV4dEhpZ2hlbXBoYXNpc307XG4gICAgICB9XG4gICAgICAmOmhvdmVyIHtcbiAgICAgICAgYmFja2dyb3VuZDogJHtlLmJhY2tncm91bmRzLmJnSG92ZXJQcmltYXJ5fSAhaW1wb3J0YW50O1xuICAgICAgfVxuXG4gICAgICAke25vfSB7XG4gICAgICAgICY6bm90KDpmaXJzdC1jaGlsZDpsYXN0LWNoaWxkKSB7XG4gICAgICAgICAgbWFyZ2luLXJpZ2h0OiAke3Quc3A0fTtcbiAgICAgICAgfVxuXG4gICAgICAgICYgKyAke1YyfSB7XG4gICAgICAgICAgJjpub3QoOmZpcnN0LWNoaWxkOmxhc3QtY2hpbGQpIHtcbiAgICAgICAgICAgIG1hcmdpbi1sZWZ0OiAwO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICAke1YyfSB7XG4gICAgICAgICY6bm90KDpmaXJzdC1jaGlsZDpsYXN0LWNoaWxkKSB7XG4gICAgICAgICAgbWFyZ2luLWxlZnQ6ICR7ciA/IFwiYXV0b1wiIDogXCIwXCJ9O1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgICY6ZGlzYWJsZWQge1xuICAgICAgICAke1YyfSB7XG4gICAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogJHtlLmJhY2tncm91bmRzLmJnRGlzYWJsZWRQcmltYXJ5fTtcbiAgICAgICAgfVxuICAgICAgICAke2I2fSB7XG4gICAgICAgICAgY29sb3I6ICR7ZS50ZXh0SWNvbi50ZXh0RGlzYWJsZWROb2JnfSAhaW1wb3J0YW50O1xuICAgICAgICB9XG4gICAgICAgIC5pY29uLXN5c3RlbSB7XG4gICAgICAgICAgY29sb3I6ICR7ZS50ZXh0SWNvbi50ZXh0RGlzYWJsZWROb2JnfSAhaW1wb3J0YW50IDtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIGA7XG4gIH1cbiksIFBTID0gKGUsIHQpID0+IHtcbiAgY29uc3Qge1xuICAgIGNoaWxkcmVuOiBvLFxuICAgIGljb25MZWZ0OiBuLFxuICAgIHRpdGxlOiByLFxuICAgIGJhZGdlOiBpLFxuICAgIGlzRGlzYWJsZWQ6IGEsXG4gICAgbm9EaWdpdDogcyxcbiAgICBiYWRnZVZhcmlhbnQ6IGwsXG4gICAgLi4ucFxuICB9ID0gZSwgZCA9IC8qIEBfX1BVUkVfXyAqLyBlMShcbiAgICBUMyxcbiAgICB7XG4gICAgICByZWY6IHQsXG4gICAgICBkaXNhYmxlZDogYSxcbiAgICAgIHJvbGU6IFwidGFiXCIsXG4gICAgICBcImFyaWEtc2VsZWN0ZWRcIjogcC5pc0FjdGl2ZSxcbiAgICAgIC4uLnAsXG4gICAgICBjaGlsZHJlbjogW1xuICAgICAgICBuICYmIC8qIEBfX1BVUkVfXyAqLyBjKFoxLCB7IG5hbWU6IG4sIHNpemU6IFwieHh4c1wiIH0pLFxuICAgICAgICBvICYmIC8qIEBfX1BVUkVfXyAqLyBjKGI2LCB7IGNoaWxkcmVuOiBvIH0pLFxuICAgICAgICAhIWkgJiYgLyogQF9fUFVSRV9fICovIGMoQWUsIHsgY291bnQ6IGksIG5vRGlnaXQ6IHMsIHZhcmlhbnQ6IGwgfSlcbiAgICAgIF1cbiAgICB9XG4gICk7XG4gIHJldHVybiByID8gLyogQF9fUFVSRV9fICovIGMoQTMsIHsgdGV4dDogciwgcGxhY2U6IFwiYm90dG9tXCIsIGNoaWxkcmVuOiBkIH0pIDogZDtcbn0sIE02ID0gQjAoUFMpLCBGUyA9ICQuZGl2KFxuICAoe1xuICAgIG1heEhlaWdodDogZSxcbiAgICB0aGVtZTogeyBzcGFjaW5nczogdCwgR0xPQkFMX0lURU1fSEVJR0hUX0NPTkRFTlNFRDogbywgbWl4aW5zOiBuIH1cbiAgfSkgPT4ge1xuICAgIGNvbnN0IHIgPSBOdW1iZXIocGFyc2VGbG9hdChvKSkgKiA2O1xuICAgIHJldHVybiBvMWBcbiAgICAgIG92ZXJmbG93OiBhdXRvO1xuXG4gICAgICBiYWNrZ3JvdW5kOiAkeyh7IHRoZW1lOiBpIH0pID0+IGkuY29sb3JzLmJhY2tncm91bmRzLmJnUHJpbWFyeX07XG5cbiAgICAgICR7VDN9IHtcbiAgICAgICAganVzdGlmeS1jb250ZW50OiBmbGV4LXN0YXJ0O1xuXG4gICAgICAgICR7YjZ9IHtcbiAgICAgICAgICAke24uZWxsaXBzaXN9XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgLnNjcm9sbGJhci1jb250YWluZXIge1xuICAgICAgICBwYWRkaW5nOiAwO1xuICAgICAgICBtYXgtaGVpZ2h0OiAke2UgPyBgJHtlfXB4YCA6IGAke3J9cmVtYH07XG5cbiAgICAgICAgLnBzX19yYWlsLXkge1xuICAgICAgICAgIHJpZ2h0OiAwICFpbXBvcnRhbnQ7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICBgO1xuICB9XG4pO1xuJC5kaXZgXG4gIHdpZHRoOiAzMDBweDtcbmA7XG5jb25zdCBYUyA9IChlLCB0KSA9PiB7XG4gIGNvbnN0IHtcbiAgICB0YWJJdGVtczogbyA9IFtdLFxuICAgIGFjdGl2ZVRhYjogbiA9IG51bGwsXG4gICAgb25DaGFuZ2U6IHIsXG4gICAgY3VzdG9tVGFiOiBpLFxuICAgIGlzWkluZGV4UmV2ZXJzZTogYSxcbiAgICBtYXhIZWlnaHQ6IHMsXG4gICAgLi4ubFxuICB9ID0gZTtcbiAgcmV0dXJuIC8qIEBfX1BVUkVfXyAqLyBjKEZTLCB7IHJlZjogdCwgLi4ubCwgbWF4SGVpZ2h0OiBzLCBjaGlsZHJlbjogLyogQF9fUFVSRV9fICovIGMoajQsIHsgY2hpbGRyZW46ICgoKSA9PiBvLm1hcCgoZCwgYikgPT4ge1xuICAgIGNvbnN0IE0gPSAoKSA9PiByKGQpLCB1ID0gKGQgPT0gbnVsbCA/IHZvaWQgMCA6IGQuY2hpbGRyZW4pID09PSAobiA9PSBudWxsID8gdm9pZCAwIDogbi5jaGlsZHJlbik7XG4gICAgcmV0dXJuIGEgJiYgKGQuc3R5bGUgPSB7XG4gICAgICAuLi5kLnN0eWxlLFxuICAgICAgekluZGV4OiBvLmxlbmd0aCAtIGJcbiAgICB9KSwgaSA/IGkoe1xuICAgICAgLi4uZCxcbiAgICAgIGlzQWN0aXZlOiB1LFxuICAgICAga2V5OiAoZCA9PSBudWxsID8gdm9pZCAwIDogZC5jaGlsZHJlbikgKyAodSA/IFwiLXNlbGVjdGVkXCIgOiBcIi1ub3Qtc2VsZWN0ZWRcIikgfHwgYixcbiAgICAgIG9uQ2xpY2s6IE0sXG4gICAgICBvcmllbnRhdGlvbjogSDIuVkVSVElDQUxcbiAgICB9KSA6IC8qIEBfX1BVUkVfXyAqLyBjZShcbiAgICAgIE02LFxuICAgICAge1xuICAgICAgICAuLi5kLFxuICAgICAgICBvcmllbnRhdGlvbjogSDIuVkVSVElDQUwsXG4gICAgICAgIGlzQWN0aXZlOiB1LFxuICAgICAgICBrZXk6IChkID09IG51bGwgPyB2b2lkIDAgOiBkLmNoaWxkcmVuKSArICh1ID8gXCItc2VsZWN0ZWRcIiA6IFwiLW5vdC1zZWxlY3RlZFwiKSB8fCBiLFxuICAgICAgICBvbkNsaWNrOiBNXG4gICAgICB9XG4gICAgKTtcbiAgfSkpKCkgfSkgfSk7XG59LCBVcCA9IEIwKFhTKSwgVVMgPSAoe1xuICBmaWx0ZXJzOiBlLFxuICBmaWx0ZXJWYWx1ZXM6IHQsXG4gIGhhbmRsZUZpbHRlclZhbHVlOiBvLFxuICBjbGVhckZpbHRlcjogbixcbiAgc2V0Q2xlYXJGaWx0ZXJJZDogcixcbiAgbWF4VmlzaWJsZUZpbHRlcnM6IGksXG4gIHRhYnNNYXhIZWlnaHQ6IGEsXG4gIGVuYWJsZUZpbHRlckluZGljYXRvckRvdHM6IHNcbn0pID0+IHtcbiAgY29uc3QgW2wsIHBdID0gVDEoW10pLCBbZCwgYl0gPSBUMShudWxsKSwgW00sIHVdID0gVDEoKSwgQSA9IG4wKG51bGwpLCB6ID0gbjAobnVsbCk7XG4gIFAxKCgpID0+IHtcbiAgICBsLmxlbmd0aCA+IDAgJiYgYihsWzBdKTtcbiAgfSwgW2wubGVuZ3RoXSk7XG4gIGNvbnN0IGYgPSAoVCkgPT4ge1xuICAgIGIoVCk7XG4gIH0sIE8gPSAoVCkgPT4gVC5zbGljZShpKS5tYXAoKHcpID0+ICh7XG4gICAgY2hpbGRyZW46IHcuZmlsdGVyTGFiZWwgPyB3LmZpbHRlckxhYmVsIDogcjIody5jb2x1bW5JZCksXG4gICAgdGl0bGU6IFwiXCIsXG4gICAgbm9EaWdpdDogcyxcbiAgICBiYWRnZTogdFt3LmNvbHVtbklkXSA9PT0gdm9pZCAwID8gMCA6IHcudHlwZSA9PT0gXCJkYXRlcmFuZ2VcIiAmJiBBcnJheS5pc0FycmF5KHRbdy5jb2x1bW5JZF0pID8gdFt3LmNvbHVtbklkXS5sZW5ndGggLSAxIDogQXJyYXkuaXNBcnJheSh0W3cuY29sdW1uSWRdKSA/IHRbdy5jb2x1bW5JZF0ubGVuZ3RoIDogMVxuICB9KSk7XG4gIFAxKCgpID0+IHtcbiAgICBwKE8oZS5maWx0ZXIoKFQpID0+IFQuZW5hYmxlRmlsdGVyKSkpO1xuICB9LCBbZSwgdF0pO1xuICBmdW5jdGlvbiBoKFQsIHcpIHtcbiAgICBmb3IgKGxldCBIIG9mIHcpXG4gICAgICBpZiAoSC5jb2x1bW5JZCA9PT0gVClcbiAgICAgICAgcmV0dXJuIEgudHlwZTtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuICBmdW5jdGlvbiBnKFQsIHcpIHtcbiAgICBmb3IgKGxldCBIIG9mIFQpXG4gICAgICBpZiAoSC5jb2x1bW5JZCA9PT0gdykge1xuICAgICAgICBpZiAoSC50eXBlID09PSBcImlucHV0XCIgfHwgSC50eXBlID09PSBcImFtb3VudFwiKVxuICAgICAgICAgIHJldHVybiBILnNldHRpbmdzLm9wdGlvbnM7XG4gICAgICAgIGlmIChILnR5cGUgPT09IFwiZHJvcGRvd25cIiB8fCBILnR5cGUgPT09IFwiZHJvcGRvd24tbXVsdGlcIiB8fCBILnR5cGUgPT09IFwiZHJvcGRvd24tbXVsdGktY2hpcFwiKVxuICAgICAgICAgIHJldHVybiBILnNldHRpbmdzLm9wdGlvbnM7XG4gICAgICB9XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cbiAgZnVuY3Rpb24gdihULCB3KSB7XG4gICAgZm9yIChsZXQgSCBvZiBUKVxuICAgICAgaWYgKEguY29sdW1uSWQgPT09IHcpXG4gICAgICAgIHJldHVybiBILnNldHRpbmdzLnZhbHVlO1xuICAgIHJldHVybiBudWxsO1xuICB9XG4gIGNvbnN0IEwgPSAoVCkgPT4ge1xuICAgIHIoVCk7XG4gIH07XG4gIGZ1bmN0aW9uIHkoVCkge1xuICAgIHJldHVybiBUID09IG51bGwgPyB2b2lkIDAgOiBULm1hcCgodykgPT4gKHtcbiAgICAgIHZhbHVlOiB3LFxuICAgICAgbGFiZWw6IHdcbiAgICB9KSk7XG4gIH1cbiAgY29uc3QgQiA9IChULCB3LCBILCBDKSA9PiB7XG4gICAgc3dpdGNoIChMKFQpLCB3KSB7XG4gICAgICBjYXNlIFwiaW5wdXRcIjpcbiAgICAgICAgcmV0dXJuIC8qIEBfX1BVUkVfXyAqLyBjKG0xLkZyYWdtZW50LCB7IGNoaWxkcmVuOiAvKiBAX19QVVJFX18gKi8gYyhcbiAgICAgICAgICBJYSxcbiAgICAgICAgICB7XG4gICAgICAgICAgICBsYWJlbDogQyB8fCByMihUKSxcbiAgICAgICAgICAgIGlzUmVxdWlyZWQ6ICExLFxuICAgICAgICAgICAgcGxhY2Vob2xkZXI6IEMgfHwgcjIoVCksXG4gICAgICAgICAgICBvbkNoYW5nZTogKHgpID0+IHtcbiAgICAgICAgICAgICAgbyhULCB4ID09IG51bGwgPyB2b2lkIDAgOiB4LnRhcmdldC52YWx1ZSk7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgdmFsdWU6IHRbVF0gfHwgXCJcIixcbiAgICAgICAgICAgIGhpZGVDbGVhckJ1dHRvbjogITBcbiAgICAgICAgICB9XG4gICAgICAgICkgfSwgVCk7XG4gICAgICBjYXNlIFwiZHJvcGRvd25cIjpcbiAgICAgICAgcmV0dXJuIC8qIEBfX1BVUkVfXyAqLyBjKG0xLkZyYWdtZW50LCB7IGNoaWxkcmVuOiAvKiBAX19QVVJFX18gKi8gYyhcbiAgICAgICAgICBHbixcbiAgICAgICAgICB7XG4gICAgICAgICAgICBwbGFjZWhvbGRlcjogYFNlYXJjaCAke0MgfHwgcjIoVCl9YCxcbiAgICAgICAgICAgIGlzU2VhcmNoYWJsZTogITAsXG4gICAgICAgICAgICBkYXRhOiBnKEgsIFQpLFxuICAgICAgICAgICAgZ2V0RmlsdGVyZWRWYWx1ZTogKHgpID0+IHtcbiAgICAgICAgICAgICAgY29uc3QgTiA9IFt4XS5tYXAoXG4gICAgICAgICAgICAgICAgKFYpID0+IFYudmFsdWVcbiAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgbyhULCBOKSwgdSh4KTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBkZWZhdWx0VmFsdWVzOiBNLFxuICAgICAgICAgICAgdmFsdWVzOiB5KHRbVF0pXG4gICAgICAgICAgfVxuICAgICAgICApIH0sIFQpO1xuICAgICAgY2FzZSBcImRhdGVyYW5nZVwiOlxuICAgICAgICBjb25zdCBxID0ge1xuICAgICAgICAgIG1pbjogbnVsbCxcbiAgICAgICAgICBtYXg6IG51bGxcbiAgICAgICAgfTtcbiAgICAgICAgcmV0dXJuIEEgIT0gbnVsbCAmJiBBLmN1cnJlbnQgJiYgSlNPTi5zdHJpbmdpZnkodCkgPT09IFwie31cIiAmJiBBLmN1cnJlbnQuaGFuZGxlUmVzZXQocSksIC8qIEBfX1BVUkVfXyAqLyBjKHBTLCB7IGNoaWxkcmVuOiAvKiBAX19QVVJFX18gKi8gYyhcbiAgICAgICAgICBEcCxcbiAgICAgICAgICB7XG4gICAgICAgICAgICBvbkNoYW5nZTogKHgpID0+IHtcbiAgICAgICAgICAgICAgbyhULCBbeC5taW4sIHgubWF4XSk7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgdmFsdWU6IHRbVF0gPyB7XG4gICAgICAgICAgICAgIG1pbjogdFtUXVswXSxcbiAgICAgICAgICAgICAgbWF4OiB0W1RdWzFdXG4gICAgICAgICAgICB9IDoge1xuICAgICAgICAgICAgICBtaW46IG51bGwsXG4gICAgICAgICAgICAgIG1heDogbnVsbFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHJlZjogQSxcbiAgICAgICAgICAgIG1pbjogdFtUXSA/IHRbVF1bMF0gOiBudWxsLFxuICAgICAgICAgICAgbWF4OiB0W1RdID8gdFtUXVsxXSA6IG51bGwsXG4gICAgICAgICAgICBoaWRlQ2xlYXJCdG46ICEwXG4gICAgICAgICAgfVxuICAgICAgICApIH0sIFQpO1xuICAgICAgY2FzZSBcImFtb3VudFwiOlxuICAgICAgICBjb25zdCBtID0gdihILCBUKSwgayA9IFswLCAwXTtcbiAgICAgICAgcmV0dXJuIHogIT0gbnVsbCAmJiB6LmN1cnJlbnQgJiYgSlNPTi5zdHJpbmdpZnkodCkgPT09IFwie31cIiAmJiB6LmN1cnJlbnQuaGFuZGxlUmVzZXQoayksIC8qIEBfX1BVUkVfXyAqLyBjKG0xLkZyYWdtZW50LCB7IGNoaWxkcmVuOiAvKiBAX19QVVJFX18gKi8gYyhcbiAgICAgICAgICBYbCxcbiAgICAgICAgICB7XG4gICAgICAgICAgICB2YWx1ZTogdFtUXSB8fCBrLFxuICAgICAgICAgICAgb25DaGFuZ2U6ICh4KSA9PiB7XG4gICAgICAgICAgICAgIG8oVCwgeCk7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgcmVmOiB6LFxuICAgICAgICAgICAgbWluOiBtICE9IG51bGwgJiYgbS5taW4gPyBtID09IG51bGwgPyB2b2lkIDAgOiBtLm1pbiA6IG51bGwsXG4gICAgICAgICAgICBtYXg6IG0gIT0gbnVsbCAmJiBtLm1heCA/IG0gPT0gbnVsbCA/IHZvaWQgMCA6IG0ubWF4IDogbnVsbCxcbiAgICAgICAgICAgIGlzVmFsaWRhdGlvbjogITAsXG4gICAgICAgICAgICBoaWRlQ2xlYXJCdXR0b246ICEwXG4gICAgICAgICAgfVxuICAgICAgICApIH0sIFQpO1xuICAgICAgY2FzZSBcImRyb3Bkb3duLW11bHRpXCI6XG4gICAgICAgIHJldHVybiAvKiBAX19QVVJFX18gKi8gYyhtMS5GcmFnbWVudCwgeyBjaGlsZHJlbjogLyogQF9fUFVSRV9fICovIGMoXG4gICAgICAgICAgR24sXG4gICAgICAgICAge1xuICAgICAgICAgICAgcGxhY2Vob2xkZXI6IGBTZWFyY2ggJHtDIHx8IHIyKFQpfWAsXG4gICAgICAgICAgICBpc1NlYXJjaGFibGU6ICEwLFxuICAgICAgICAgICAgaXNNdWx0aTogITAsXG4gICAgICAgICAgICBkYXRhOiBnKEgsIFQpLFxuICAgICAgICAgICAgZ2V0RmlsdGVyZWRWYWx1ZTogKHgpID0+IHtcbiAgICAgICAgICAgICAgY29uc3QgTiA9IHgubWFwKFxuICAgICAgICAgICAgICAgIChWKSA9PiBWLnZhbHVlXG4gICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgIG8oVCwgTiksIHUoeCk7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgZGVmYXVsdFZhbHVlczogSlNPTi5zdHJpbmdpZnkodCkgPT09IFwie31cIiA/IFtdIDogdSxcbiAgICAgICAgICAgIHZhbHVlczogSlNPTi5zdHJpbmdpZnkodCkgPT09IFwie31cIiA/IFtdIDogeSh0W1RdKVxuICAgICAgICAgIH1cbiAgICAgICAgKSB9LCBUKTtcbiAgICAgIGNhc2UgXCJkcm9wZG93bi1tdWx0aS1jaGlwXCI6XG4gICAgICAgIHJldHVybiAvKiBAX19QVVJFX18gKi8gYyhtMS5GcmFnbWVudCwgeyBjaGlsZHJlbjogLyogQF9fUFVSRV9fICovIGMoXG4gICAgICAgICAgR24sXG4gICAgICAgICAge1xuICAgICAgICAgICAgcGxhY2Vob2xkZXI6IGBTZWFyY2ggJHtDIHx8IHIyKFQpfWAsXG4gICAgICAgICAgICBoaWdoTGlnaHRTZWxlY3RlZE9wdGlvbnM6ICEwLFxuICAgICAgICAgICAgaXNTZWFyY2hhYmxlOiAhMCxcbiAgICAgICAgICAgIGlzTXVsdGk6ICEwLFxuICAgICAgICAgICAgZGF0YTogZyhILCBUKSxcbiAgICAgICAgICAgIGdldEZpbHRlcmVkVmFsdWU6ICh4KSA9PiB7XG4gICAgICAgICAgICAgIGNvbnN0IE4gPSB4Lm1hcChcbiAgICAgICAgICAgICAgICAoVikgPT4gVi52YWx1ZVxuICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICBvKFQsIE4pLCB1KHgpO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGRlZmF1bHRWYWx1ZXM6IEpTT04uc3RyaW5naWZ5KHQpID09PSBcInt9XCIgPyBbXSA6IHUsXG4gICAgICAgICAgICB2YWx1ZXM6IEpTT04uc3RyaW5naWZ5KHQpID09PSBcInt9XCIgPyBbXSA6IHkodFtUXSlcbiAgICAgICAgICB9XG4gICAgICAgICkgfSwgVCk7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm4gLyogQF9fUFVSRV9fICovIGMobTEuRnJhZ21lbnQsIHsgY2hpbGRyZW46IC8qIEBfX1BVUkVfXyAqLyBjKFxuICAgICAgICAgIElhLFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGxhYmVsOiBDIHx8IHIyKFQpLFxuICAgICAgICAgICAgaXNSZXF1aXJlZDogITEsXG4gICAgICAgICAgICBwbGFjZWhvbGRlcjogQyB8fCByMihUKSxcbiAgICAgICAgICAgIG9uQ2hhbmdlOiAoeCkgPT4ge1xuICAgICAgICAgICAgICBvKFQsIHggPT0gbnVsbCA/IHZvaWQgMCA6IHgudGFyZ2V0LnZhbHVlKTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB2YWx1ZTogdFtUXSB8fCBcIlwiLFxuICAgICAgICAgICAgaGlkZUNsZWFyQnV0dG9uOiAhMFxuICAgICAgICAgIH1cbiAgICAgICAgKSB9LCBUKTtcbiAgICB9XG4gIH0sIFggPSAoKSA9PiB7XG4gICAgaWYgKGQpIHtcbiAgICAgIGNvbnN0IFQgPSBkLmNoaWxkcmVuLCB3ID0gZS5maW5kKFxuICAgICAgICAoSCkgPT4gSC5maWx0ZXJMYWJlbCA/IEguZmlsdGVyTGFiZWwgPT09IFQgOiByMihILmNvbHVtbklkKSA9PT0gVFxuICAgICAgKTtcbiAgICAgIGlmICh3KVxuICAgICAgICByZXR1cm4gLyogQF9fUFVSRV9fICovIGMoXCJkaXZcIiwgeyBjaGlsZHJlbjogQihcbiAgICAgICAgICB3LmNvbHVtbklkLFxuICAgICAgICAgIGgody5jb2x1bW5JZCwgZSkgfHwgXCJcIixcbiAgICAgICAgICBlLFxuICAgICAgICAgIHcuZmlsdGVyTGFiZWxcbiAgICAgICAgKSB9KTtcbiAgICB9XG4gICAgcmV0dXJuIG51bGw7XG4gIH07XG4gIGxldCBGID0gYSB8fCA1MDA7XG4gIHJldHVybiAvKiBAX19QVVJFX18gKi8gYyhjUywgeyBjaGlsZHJlbjogLyogQF9fUFVSRV9fICovIGUxKGxTLCB7IGNoaWxkcmVuOiBbXG4gICAgLyogQF9fUFVSRV9fICovIGMoXG4gICAgICBRaSxcbiAgICAgIHtcbiAgICAgICAgJGl0ZW1zOiBcInRhYnNcIixcbiAgICAgICAgJHRhYnNNYXhIZWlnaHQ6IChsID09IG51bGwgPyB2b2lkIDAgOiBsLmxlbmd0aCkgPj0gMTMsXG4gICAgICAgIGNoaWxkcmVuOiAvKiBAX19QVVJFX18gKi8gYyhcbiAgICAgICAgICBVcCxcbiAgICAgICAgICB7XG4gICAgICAgICAgICB0YWJJdGVtczogbCxcbiAgICAgICAgICAgIGFjdGl2ZVRhYjogZCxcbiAgICAgICAgICAgIG9uQ2hhbmdlOiBmLFxuICAgICAgICAgICAgbWF4SGVpZ2h0OiBGXG4gICAgICAgICAgfVxuICAgICAgICApXG4gICAgICB9XG4gICAgKSxcbiAgICAvKiBAX19QVVJFX18gKi8gYyhRaSwgeyAkaXRlbXM6IFwiZGl2aWRlclwiLCBjaGlsZHJlbjogLyogQF9fUFVSRV9fICovIGMoUDIsIHsgJGRlZmF1bHQ6ICEwLCBvcmllbnRhdGlvbjogXCJ2ZXJ0aWNhbFwiLCAkaGFzTWFyZ2luOiAhMCB9KSB9KSxcbiAgICAvKiBAX19QVVJFX18gKi8gYyhRaSwgeyAkaXRlbXM6IFwiY29udGVudFwiLCBjaGlsZHJlbjogWCgpIH0pXG4gIF0gfSkgfSk7XG59O1xuZnVuY3Rpb24gcDkoZSwgdCkge1xuICB2YXIgbyA9IE9iamVjdC5rZXlzKGUpO1xuICBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykge1xuICAgIHZhciBuID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTtcbiAgICB0ICYmIChuID0gbi5maWx0ZXIoZnVuY3Rpb24ocikge1xuICAgICAgcmV0dXJuIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoZSwgcikuZW51bWVyYWJsZTtcbiAgICB9KSksIG8ucHVzaC5hcHBseShvLCBuKTtcbiAgfVxuICByZXR1cm4gbztcbn1cbmZ1bmN0aW9uIGQ5KGUpIHtcbiAgZm9yICh2YXIgdCA9IDE7IHQgPCBhcmd1bWVudHMubGVuZ3RoOyB0KyspIHtcbiAgICB2YXIgbyA9IGFyZ3VtZW50c1t0XSAhPSBudWxsID8gYXJndW1lbnRzW3RdIDoge307XG4gICAgdCAlIDIgPyBwOShPYmplY3QobyksICEwKS5mb3JFYWNoKGZ1bmN0aW9uKG4pIHtcbiAgICAgIHQwKGUsIG4sIG9bbl0pO1xuICAgIH0pIDogT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnMgPyBPYmplY3QuZGVmaW5lUHJvcGVydGllcyhlLCBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyhvKSkgOiBwOShPYmplY3QobykpLmZvckVhY2goZnVuY3Rpb24obikge1xuICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIG4sIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IobywgbikpO1xuICAgIH0pO1xuICB9XG4gIHJldHVybiBlO1xufVxuZnVuY3Rpb24gTjIoZSkge1xuICByZXR1cm4gXCJNaW5pZmllZCBSZWR1eCBlcnJvciAjXCIgKyBlICsgXCI7IHZpc2l0IGh0dHBzOi8vcmVkdXguanMub3JnL0Vycm9ycz9jb2RlPVwiICsgZSArIFwiIGZvciB0aGUgZnVsbCBtZXNzYWdlIG9yIHVzZSB0aGUgbm9uLW1pbmlmaWVkIGRldiBlbnZpcm9ubWVudCBmb3IgZnVsbCBlcnJvcnMuIFwiO1xufVxudmFyIGI5ID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiB0eXBlb2YgU3ltYm9sID09IFwiZnVuY3Rpb25cIiAmJiBTeW1ib2wub2JzZXJ2YWJsZSB8fCBcIkBAb2JzZXJ2YWJsZVwiO1xufSgpLCBaaSA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4gTWF0aC5yYW5kb20oKS50b1N0cmluZygzNikuc3Vic3RyaW5nKDcpLnNwbGl0KFwiXCIpLmpvaW4oXCIuXCIpO1xufSwgTTkgPSB7XG4gIElOSVQ6IFwiQEByZWR1eC9JTklUXCIgKyBaaSgpLFxuICBSRVBMQUNFOiBcIkBAcmVkdXgvUkVQTEFDRVwiICsgWmkoKSxcbiAgUFJPQkVfVU5LTk9XTl9BQ1RJT046IGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiBcIkBAcmVkdXgvUFJPQkVfVU5LTk9XTl9BQ1RJT05cIiArIFppKCk7XG4gIH1cbn07XG5mdW5jdGlvbiBZUyhlKSB7XG4gIGlmICh0eXBlb2YgZSAhPSBcIm9iamVjdFwiIHx8IGUgPT09IG51bGwpXG4gICAgcmV0dXJuICExO1xuICBmb3IgKHZhciB0ID0gZTsgT2JqZWN0LmdldFByb3RvdHlwZU9mKHQpICE9PSBudWxsOyApXG4gICAgdCA9IE9iamVjdC5nZXRQcm90b3R5cGVPZih0KTtcbiAgcmV0dXJuIE9iamVjdC5nZXRQcm90b3R5cGVPZihlKSA9PT0gdDtcbn1cbmZ1bmN0aW9uIEdTKGUpIHtcbiAgaWYgKGUgPT09IHZvaWQgMClcbiAgICByZXR1cm4gXCJ1bmRlZmluZWRcIjtcbiAgaWYgKGUgPT09IG51bGwpXG4gICAgcmV0dXJuIFwibnVsbFwiO1xuICB2YXIgdCA9IHR5cGVvZiBlO1xuICBzd2l0Y2ggKHQpIHtcbiAgICBjYXNlIFwiYm9vbGVhblwiOlxuICAgIGNhc2UgXCJzdHJpbmdcIjpcbiAgICBjYXNlIFwibnVtYmVyXCI6XG4gICAgY2FzZSBcInN5bWJvbFwiOlxuICAgIGNhc2UgXCJmdW5jdGlvblwiOlxuICAgICAgcmV0dXJuIHQ7XG4gIH1cbiAgaWYgKEFycmF5LmlzQXJyYXkoZSkpXG4gICAgcmV0dXJuIFwiYXJyYXlcIjtcbiAgaWYgKGpTKGUpKVxuICAgIHJldHVybiBcImRhdGVcIjtcbiAgaWYgKFpTKGUpKVxuICAgIHJldHVybiBcImVycm9yXCI7XG4gIHZhciBvID0gUVMoZSk7XG4gIHN3aXRjaCAobykge1xuICAgIGNhc2UgXCJTeW1ib2xcIjpcbiAgICBjYXNlIFwiUHJvbWlzZVwiOlxuICAgIGNhc2UgXCJXZWFrTWFwXCI6XG4gICAgY2FzZSBcIldlYWtTZXRcIjpcbiAgICBjYXNlIFwiTWFwXCI6XG4gICAgY2FzZSBcIlNldFwiOlxuICAgICAgcmV0dXJuIG87XG4gIH1cbiAgcmV0dXJuIHQuc2xpY2UoOCwgLTEpLnRvTG93ZXJDYXNlKCkucmVwbGFjZSgvXFxzL2csIFwiXCIpO1xufVxuZnVuY3Rpb24gUVMoZSkge1xuICByZXR1cm4gdHlwZW9mIGUuY29uc3RydWN0b3IgPT0gXCJmdW5jdGlvblwiID8gZS5jb25zdHJ1Y3Rvci5uYW1lIDogbnVsbDtcbn1cbmZ1bmN0aW9uIFpTKGUpIHtcbiAgcmV0dXJuIGUgaW5zdGFuY2VvZiBFcnJvciB8fCB0eXBlb2YgZS5tZXNzYWdlID09IFwic3RyaW5nXCIgJiYgZS5jb25zdHJ1Y3RvciAmJiB0eXBlb2YgZS5jb25zdHJ1Y3Rvci5zdGFja1RyYWNlTGltaXQgPT0gXCJudW1iZXJcIjtcbn1cbmZ1bmN0aW9uIGpTKGUpIHtcbiAgcmV0dXJuIGUgaW5zdGFuY2VvZiBEYXRlID8gITAgOiB0eXBlb2YgZS50b0RhdGVTdHJpbmcgPT0gXCJmdW5jdGlvblwiICYmIHR5cGVvZiBlLmdldERhdGUgPT0gXCJmdW5jdGlvblwiICYmIHR5cGVvZiBlLnNldERhdGUgPT0gXCJmdW5jdGlvblwiO1xufVxuZnVuY3Rpb24gZTMoZSkge1xuICB2YXIgdCA9IHR5cGVvZiBlO1xuICByZXR1cm4gcHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiICYmICh0ID0gR1MoZSkpLCB0O1xufVxuZnVuY3Rpb24gWXAoZSwgdCwgbykge1xuICB2YXIgbjtcbiAgaWYgKHR5cGVvZiB0ID09IFwiZnVuY3Rpb25cIiAmJiB0eXBlb2YgbyA9PSBcImZ1bmN0aW9uXCIgfHwgdHlwZW9mIG8gPT0gXCJmdW5jdGlvblwiICYmIHR5cGVvZiBhcmd1bWVudHNbM10gPT0gXCJmdW5jdGlvblwiKVxuICAgIHRocm93IG5ldyBFcnJvcihwcm9jZXNzLmVudi5OT0RFX0VOViA9PT0gXCJwcm9kdWN0aW9uXCIgPyBOMigwKSA6IFwiSXQgbG9va3MgbGlrZSB5b3UgYXJlIHBhc3Npbmcgc2V2ZXJhbCBzdG9yZSBlbmhhbmNlcnMgdG8gY3JlYXRlU3RvcmUoKS4gVGhpcyBpcyBub3Qgc3VwcG9ydGVkLiBJbnN0ZWFkLCBjb21wb3NlIHRoZW0gdG9nZXRoZXIgdG8gYSBzaW5nbGUgZnVuY3Rpb24uIFNlZSBodHRwczovL3JlZHV4LmpzLm9yZy90dXRvcmlhbHMvZnVuZGFtZW50YWxzL3BhcnQtNC1zdG9yZSNjcmVhdGluZy1hLXN0b3JlLXdpdGgtZW5oYW5jZXJzIGZvciBhbiBleGFtcGxlLlwiKTtcbiAgaWYgKHR5cGVvZiB0ID09IFwiZnVuY3Rpb25cIiAmJiB0eXBlb2YgbyA+IFwidVwiICYmIChvID0gdCwgdCA9IHZvaWQgMCksIHR5cGVvZiBvIDwgXCJ1XCIpIHtcbiAgICBpZiAodHlwZW9mIG8gIT0gXCJmdW5jdGlvblwiKVxuICAgICAgdGhyb3cgbmV3IEVycm9yKHByb2Nlc3MuZW52Lk5PREVfRU5WID09PSBcInByb2R1Y3Rpb25cIiA/IE4yKDEpIDogXCJFeHBlY3RlZCB0aGUgZW5oYW5jZXIgdG8gYmUgYSBmdW5jdGlvbi4gSW5zdGVhZCwgcmVjZWl2ZWQ6ICdcIiArIGUzKG8pICsgXCInXCIpO1xuICAgIHJldHVybiBvKFlwKShlLCB0KTtcbiAgfVxuICBpZiAodHlwZW9mIGUgIT0gXCJmdW5jdGlvblwiKVxuICAgIHRocm93IG5ldyBFcnJvcihwcm9jZXNzLmVudi5OT0RFX0VOViA9PT0gXCJwcm9kdWN0aW9uXCIgPyBOMigyKSA6IFwiRXhwZWN0ZWQgdGhlIHJvb3QgcmVkdWNlciB0byBiZSBhIGZ1bmN0aW9uLiBJbnN0ZWFkLCByZWNlaXZlZDogJ1wiICsgZTMoZSkgKyBcIidcIik7XG4gIHZhciByID0gZSwgaSA9IHQsIGEgPSBbXSwgcyA9IGEsIGwgPSAhMTtcbiAgZnVuY3Rpb24gcCgpIHtcbiAgICBzID09PSBhICYmIChzID0gYS5zbGljZSgpKTtcbiAgfVxuICBmdW5jdGlvbiBkKCkge1xuICAgIGlmIChsKVxuICAgICAgdGhyb3cgbmV3IEVycm9yKHByb2Nlc3MuZW52Lk5PREVfRU5WID09PSBcInByb2R1Y3Rpb25cIiA/IE4yKDMpIDogXCJZb3UgbWF5IG5vdCBjYWxsIHN0b3JlLmdldFN0YXRlKCkgd2hpbGUgdGhlIHJlZHVjZXIgaXMgZXhlY3V0aW5nLiBUaGUgcmVkdWNlciBoYXMgYWxyZWFkeSByZWNlaXZlZCB0aGUgc3RhdGUgYXMgYW4gYXJndW1lbnQuIFBhc3MgaXQgZG93biBmcm9tIHRoZSB0b3AgcmVkdWNlciBpbnN0ZWFkIG9mIHJlYWRpbmcgaXQgZnJvbSB0aGUgc3RvcmUuXCIpO1xuICAgIHJldHVybiBpO1xuICB9XG4gIGZ1bmN0aW9uIGIoeikge1xuICAgIGlmICh0eXBlb2YgeiAhPSBcImZ1bmN0aW9uXCIpXG4gICAgICB0aHJvdyBuZXcgRXJyb3IocHJvY2Vzcy5lbnYuTk9ERV9FTlYgPT09IFwicHJvZHVjdGlvblwiID8gTjIoNCkgOiBcIkV4cGVjdGVkIHRoZSBsaXN0ZW5lciB0byBiZSBhIGZ1bmN0aW9uLiBJbnN0ZWFkLCByZWNlaXZlZDogJ1wiICsgZTMoeikgKyBcIidcIik7XG4gICAgaWYgKGwpXG4gICAgICB0aHJvdyBuZXcgRXJyb3IocHJvY2Vzcy5lbnYuTk9ERV9FTlYgPT09IFwicHJvZHVjdGlvblwiID8gTjIoNSkgOiBcIllvdSBtYXkgbm90IGNhbGwgc3RvcmUuc3Vic2NyaWJlKCkgd2hpbGUgdGhlIHJlZHVjZXIgaXMgZXhlY3V0aW5nLiBJZiB5b3Ugd291bGQgbGlrZSB0byBiZSBub3RpZmllZCBhZnRlciB0aGUgc3RvcmUgaGFzIGJlZW4gdXBkYXRlZCwgc3Vic2NyaWJlIGZyb20gYSBjb21wb25lbnQgYW5kIGludm9rZSBzdG9yZS5nZXRTdGF0ZSgpIGluIHRoZSBjYWxsYmFjayB0byBhY2Nlc3MgdGhlIGxhdGVzdCBzdGF0ZS4gU2VlIGh0dHBzOi8vcmVkdXguanMub3JnL2FwaS9zdG9yZSNzdWJzY3JpYmVsaXN0ZW5lciBmb3IgbW9yZSBkZXRhaWxzLlwiKTtcbiAgICB2YXIgZiA9ICEwO1xuICAgIHJldHVybiBwKCksIHMucHVzaCh6KSwgZnVuY3Rpb24oKSB7XG4gICAgICBpZiAoZikge1xuICAgICAgICBpZiAobClcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IocHJvY2Vzcy5lbnYuTk9ERV9FTlYgPT09IFwicHJvZHVjdGlvblwiID8gTjIoNikgOiBcIllvdSBtYXkgbm90IHVuc3Vic2NyaWJlIGZyb20gYSBzdG9yZSBsaXN0ZW5lciB3aGlsZSB0aGUgcmVkdWNlciBpcyBleGVjdXRpbmcuIFNlZSBodHRwczovL3JlZHV4LmpzLm9yZy9hcGkvc3RvcmUjc3Vic2NyaWJlbGlzdGVuZXIgZm9yIG1vcmUgZGV0YWlscy5cIik7XG4gICAgICAgIGYgPSAhMSwgcCgpO1xuICAgICAgICB2YXIgaCA9IHMuaW5kZXhPZih6KTtcbiAgICAgICAgcy5zcGxpY2UoaCwgMSksIGEgPSBudWxsO1xuICAgICAgfVxuICAgIH07XG4gIH1cbiAgZnVuY3Rpb24gTSh6KSB7XG4gICAgaWYgKCFZUyh6KSlcbiAgICAgIHRocm93IG5ldyBFcnJvcihwcm9jZXNzLmVudi5OT0RFX0VOViA9PT0gXCJwcm9kdWN0aW9uXCIgPyBOMig3KSA6IFwiQWN0aW9ucyBtdXN0IGJlIHBsYWluIG9iamVjdHMuIEluc3RlYWQsIHRoZSBhY3R1YWwgdHlwZSB3YXM6ICdcIiArIGUzKHopICsgXCInLiBZb3UgbWF5IG5lZWQgdG8gYWRkIG1pZGRsZXdhcmUgdG8geW91ciBzdG9yZSBzZXR1cCB0byBoYW5kbGUgZGlzcGF0Y2hpbmcgb3RoZXIgdmFsdWVzLCBzdWNoIGFzICdyZWR1eC10aHVuaycgdG8gaGFuZGxlIGRpc3BhdGNoaW5nIGZ1bmN0aW9ucy4gU2VlIGh0dHBzOi8vcmVkdXguanMub3JnL3R1dG9yaWFscy9mdW5kYW1lbnRhbHMvcGFydC00LXN0b3JlI21pZGRsZXdhcmUgYW5kIGh0dHBzOi8vcmVkdXguanMub3JnL3R1dG9yaWFscy9mdW5kYW1lbnRhbHMvcGFydC02LWFzeW5jLWxvZ2ljI3VzaW5nLXRoZS1yZWR1eC10aHVuay1taWRkbGV3YXJlIGZvciBleGFtcGxlcy5cIik7XG4gICAgaWYgKHR5cGVvZiB6LnR5cGUgPiBcInVcIilcbiAgICAgIHRocm93IG5ldyBFcnJvcihwcm9jZXNzLmVudi5OT0RFX0VOViA9PT0gXCJwcm9kdWN0aW9uXCIgPyBOMig4KSA6ICdBY3Rpb25zIG1heSBub3QgaGF2ZSBhbiB1bmRlZmluZWQgXCJ0eXBlXCIgcHJvcGVydHkuIFlvdSBtYXkgaGF2ZSBtaXNzcGVsbGVkIGFuIGFjdGlvbiB0eXBlIHN0cmluZyBjb25zdGFudC4nKTtcbiAgICBpZiAobClcbiAgICAgIHRocm93IG5ldyBFcnJvcihwcm9jZXNzLmVudi5OT0RFX0VOViA9PT0gXCJwcm9kdWN0aW9uXCIgPyBOMig5KSA6IFwiUmVkdWNlcnMgbWF5IG5vdCBkaXNwYXRjaCBhY3Rpb25zLlwiKTtcbiAgICB0cnkge1xuICAgICAgbCA9ICEwLCBpID0gcihpLCB6KTtcbiAgICB9IGZpbmFsbHkge1xuICAgICAgbCA9ICExO1xuICAgIH1cbiAgICBmb3IgKHZhciBmID0gYSA9IHMsIE8gPSAwOyBPIDwgZi5sZW5ndGg7IE8rKykge1xuICAgICAgdmFyIGggPSBmW09dO1xuICAgICAgaCgpO1xuICAgIH1cbiAgICByZXR1cm4gejtcbiAgfVxuICBmdW5jdGlvbiB1KHopIHtcbiAgICBpZiAodHlwZW9mIHogIT0gXCJmdW5jdGlvblwiKVxuICAgICAgdGhyb3cgbmV3IEVycm9yKHByb2Nlc3MuZW52Lk5PREVfRU5WID09PSBcInByb2R1Y3Rpb25cIiA/IE4yKDEwKSA6IFwiRXhwZWN0ZWQgdGhlIG5leHRSZWR1Y2VyIHRvIGJlIGEgZnVuY3Rpb24uIEluc3RlYWQsIHJlY2VpdmVkOiAnXCIgKyBlMyh6KSk7XG4gICAgciA9IHosIE0oe1xuICAgICAgdHlwZTogTTkuUkVQTEFDRVxuICAgIH0pO1xuICB9XG4gIGZ1bmN0aW9uIEEoKSB7XG4gICAgdmFyIHosIGYgPSBiO1xuICAgIHJldHVybiB6ID0ge1xuICAgICAgLyoqXG4gICAgICAgKiBUaGUgbWluaW1hbCBvYnNlcnZhYmxlIHN1YnNjcmlwdGlvbiBtZXRob2QuXG4gICAgICAgKiBAcGFyYW0ge09iamVjdH0gb2JzZXJ2ZXIgQW55IG9iamVjdCB0aGF0IGNhbiBiZSB1c2VkIGFzIGFuIG9ic2VydmVyLlxuICAgICAgICogVGhlIG9ic2VydmVyIG9iamVjdCBzaG91bGQgaGF2ZSBhIGBuZXh0YCBtZXRob2QuXG4gICAgICAgKiBAcmV0dXJucyB7c3Vic2NyaXB0aW9ufSBBbiBvYmplY3Qgd2l0aCBhbiBgdW5zdWJzY3JpYmVgIG1ldGhvZCB0aGF0IGNhblxuICAgICAgICogYmUgdXNlZCB0byB1bnN1YnNjcmliZSB0aGUgb2JzZXJ2YWJsZSBmcm9tIHRoZSBzdG9yZSwgYW5kIHByZXZlbnQgZnVydGhlclxuICAgICAgICogZW1pc3Npb24gb2YgdmFsdWVzIGZyb20gdGhlIG9ic2VydmFibGUuXG4gICAgICAgKi9cbiAgICAgIHN1YnNjcmliZTogZnVuY3Rpb24oaCkge1xuICAgICAgICBpZiAodHlwZW9mIGggIT0gXCJvYmplY3RcIiB8fCBoID09PSBudWxsKVxuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihwcm9jZXNzLmVudi5OT0RFX0VOViA9PT0gXCJwcm9kdWN0aW9uXCIgPyBOMigxMSkgOiBcIkV4cGVjdGVkIHRoZSBvYnNlcnZlciB0byBiZSBhbiBvYmplY3QuIEluc3RlYWQsIHJlY2VpdmVkOiAnXCIgKyBlMyhoKSArIFwiJ1wiKTtcbiAgICAgICAgZnVuY3Rpb24gZygpIHtcbiAgICAgICAgICBoLm5leHQgJiYgaC5uZXh0KGQoKSk7XG4gICAgICAgIH1cbiAgICAgICAgZygpO1xuICAgICAgICB2YXIgdiA9IGYoZyk7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgdW5zdWJzY3JpYmU6IHZcbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICB9LCB6W2I5XSA9IGZ1bmN0aW9uKCkge1xuICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfSwgejtcbiAgfVxuICByZXR1cm4gTSh7XG4gICAgdHlwZTogTTkuSU5JVFxuICB9KSwgbiA9IHtcbiAgICBkaXNwYXRjaDogTSxcbiAgICBzdWJzY3JpYmU6IGIsXG4gICAgZ2V0U3RhdGU6IGQsXG4gICAgcmVwbGFjZVJlZHVjZXI6IHVcbiAgfSwgbltiOV0gPSBBLCBuO1xufVxuZnVuY3Rpb24gQTkoZSwgdCkge1xuICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIHQoZS5hcHBseSh0aGlzLCBhcmd1bWVudHMpKTtcbiAgfTtcbn1cbmZ1bmN0aW9uIHU5KGUsIHQpIHtcbiAgaWYgKHR5cGVvZiBlID09IFwiZnVuY3Rpb25cIilcbiAgICByZXR1cm4gQTkoZSwgdCk7XG4gIGlmICh0eXBlb2YgZSAhPSBcIm9iamVjdFwiIHx8IGUgPT09IG51bGwpXG4gICAgdGhyb3cgbmV3IEVycm9yKHByb2Nlc3MuZW52Lk5PREVfRU5WID09PSBcInByb2R1Y3Rpb25cIiA/IE4yKDE2KSA6IFwiYmluZEFjdGlvbkNyZWF0b3JzIGV4cGVjdGVkIGFuIG9iamVjdCBvciBhIGZ1bmN0aW9uLCBidXQgaW5zdGVhZCByZWNlaXZlZDogJ1wiICsgZTMoZSkgKyBgJy4gRGlkIHlvdSB3cml0ZSBcImltcG9ydCBBY3Rpb25DcmVhdG9ycyBmcm9tXCIgaW5zdGVhZCBvZiBcImltcG9ydCAqIGFzIEFjdGlvbkNyZWF0b3JzIGZyb21cIj9gKTtcbiAgdmFyIG8gPSB7fTtcbiAgZm9yICh2YXIgbiBpbiBlKSB7XG4gICAgdmFyIHIgPSBlW25dO1xuICAgIHR5cGVvZiByID09IFwiZnVuY3Rpb25cIiAmJiAob1tuXSA9IEE5KHIsIHQpKTtcbiAgfVxuICByZXR1cm4gbztcbn1cbmZ1bmN0aW9uIEdwKCkge1xuICBmb3IgKHZhciBlID0gYXJndW1lbnRzLmxlbmd0aCwgdCA9IG5ldyBBcnJheShlKSwgbyA9IDA7IG8gPCBlOyBvKyspXG4gICAgdFtvXSA9IGFyZ3VtZW50c1tvXTtcbiAgcmV0dXJuIHQubGVuZ3RoID09PSAwID8gZnVuY3Rpb24obikge1xuICAgIHJldHVybiBuO1xuICB9IDogdC5sZW5ndGggPT09IDEgPyB0WzBdIDogdC5yZWR1Y2UoZnVuY3Rpb24obiwgcikge1xuICAgIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICAgIHJldHVybiBuKHIuYXBwbHkodm9pZCAwLCBhcmd1bWVudHMpKTtcbiAgICB9O1xuICB9KTtcbn1cbmZ1bmN0aW9uIEtTKCkge1xuICBmb3IgKHZhciBlID0gYXJndW1lbnRzLmxlbmd0aCwgdCA9IG5ldyBBcnJheShlKSwgbyA9IDA7IG8gPCBlOyBvKyspXG4gICAgdFtvXSA9IGFyZ3VtZW50c1tvXTtcbiAgcmV0dXJuIGZ1bmN0aW9uKG4pIHtcbiAgICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgICB2YXIgciA9IG4uYXBwbHkodm9pZCAwLCBhcmd1bWVudHMpLCBpID0gZnVuY3Rpb24oKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihwcm9jZXNzLmVudi5OT0RFX0VOViA9PT0gXCJwcm9kdWN0aW9uXCIgPyBOMigxNSkgOiBcIkRpc3BhdGNoaW5nIHdoaWxlIGNvbnN0cnVjdGluZyB5b3VyIG1pZGRsZXdhcmUgaXMgbm90IGFsbG93ZWQuIE90aGVyIG1pZGRsZXdhcmUgd291bGQgbm90IGJlIGFwcGxpZWQgdG8gdGhpcyBkaXNwYXRjaC5cIik7XG4gICAgICB9LCBhID0ge1xuICAgICAgICBnZXRTdGF0ZTogci5nZXRTdGF0ZSxcbiAgICAgICAgZGlzcGF0Y2g6IGZ1bmN0aW9uKCkge1xuICAgICAgICAgIHJldHVybiBpLmFwcGx5KHZvaWQgMCwgYXJndW1lbnRzKTtcbiAgICAgICAgfVxuICAgICAgfSwgcyA9IHQubWFwKGZ1bmN0aW9uKGwpIHtcbiAgICAgICAgcmV0dXJuIGwoYSk7XG4gICAgICB9KTtcbiAgICAgIHJldHVybiBpID0gR3AuYXBwbHkodm9pZCAwLCBzKShyLmRpc3BhdGNoKSwgZDkoZDkoe30sIHIpLCB7fSwge1xuICAgICAgICBkaXNwYXRjaDogaVxuICAgICAgfSk7XG4gICAgfTtcbiAgfTtcbn1cbnZhciBBNiA9IC8qIEBfX1BVUkVfXyAqLyBtMS5jcmVhdGVDb250ZXh0KG51bGwpO1xucHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiICYmIChBNi5kaXNwbGF5TmFtZSA9IFwiUmVhY3RSZWR1eFwiKTtcbmZ1bmN0aW9uIEpTKGUpIHtcbiAgZSgpO1xufVxudmFyIFFwID0gSlMsIF9TID0gZnVuY3Rpb24odCkge1xuICByZXR1cm4gUXAgPSB0O1xufSwgJFMgPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIFFwO1xufTtcbmZ1bmN0aW9uIGVFKCkge1xuICB2YXIgZSA9ICRTKCksIHQgPSBudWxsLCBvID0gbnVsbDtcbiAgcmV0dXJuIHtcbiAgICBjbGVhcjogZnVuY3Rpb24oKSB7XG4gICAgICB0ID0gbnVsbCwgbyA9IG51bGw7XG4gICAgfSxcbiAgICBub3RpZnk6IGZ1bmN0aW9uKCkge1xuICAgICAgZShmdW5jdGlvbigpIHtcbiAgICAgICAgZm9yICh2YXIgciA9IHQ7IHI7IClcbiAgICAgICAgICByLmNhbGxiYWNrKCksIHIgPSByLm5leHQ7XG4gICAgICB9KTtcbiAgICB9LFxuICAgIGdldDogZnVuY3Rpb24oKSB7XG4gICAgICBmb3IgKHZhciByID0gW10sIGkgPSB0OyBpOyApXG4gICAgICAgIHIucHVzaChpKSwgaSA9IGkubmV4dDtcbiAgICAgIHJldHVybiByO1xuICAgIH0sXG4gICAgc3Vic2NyaWJlOiBmdW5jdGlvbihyKSB7XG4gICAgICB2YXIgaSA9ICEwLCBhID0gbyA9IHtcbiAgICAgICAgY2FsbGJhY2s6IHIsXG4gICAgICAgIG5leHQ6IG51bGwsXG4gICAgICAgIHByZXY6IG9cbiAgICAgIH07XG4gICAgICByZXR1cm4gYS5wcmV2ID8gYS5wcmV2Lm5leHQgPSBhIDogdCA9IGEsIGZ1bmN0aW9uKCkge1xuICAgICAgICAhaSB8fCB0ID09PSBudWxsIHx8IChpID0gITEsIGEubmV4dCA/IGEubmV4dC5wcmV2ID0gYS5wcmV2IDogbyA9IGEucHJldiwgYS5wcmV2ID8gYS5wcmV2Lm5leHQgPSBhLm5leHQgOiB0ID0gYS5uZXh0KTtcbiAgICAgIH07XG4gICAgfVxuICB9O1xufVxudmFyIHo5ID0ge1xuICBub3RpZnk6IGZ1bmN0aW9uKCkge1xuICB9LFxuICBnZXQ6IGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiBbXTtcbiAgfVxufTtcbmZ1bmN0aW9uIFpwKGUsIHQpIHtcbiAgdmFyIG8sIG4gPSB6OTtcbiAgZnVuY3Rpb24gcihiKSB7XG4gICAgcmV0dXJuIGwoKSwgbi5zdWJzY3JpYmUoYik7XG4gIH1cbiAgZnVuY3Rpb24gaSgpIHtcbiAgICBuLm5vdGlmeSgpO1xuICB9XG4gIGZ1bmN0aW9uIGEoKSB7XG4gICAgZC5vblN0YXRlQ2hhbmdlICYmIGQub25TdGF0ZUNoYW5nZSgpO1xuICB9XG4gIGZ1bmN0aW9uIHMoKSB7XG4gICAgcmV0dXJuICEhbztcbiAgfVxuICBmdW5jdGlvbiBsKCkge1xuICAgIG8gfHwgKG8gPSB0ID8gdC5hZGROZXN0ZWRTdWIoYSkgOiBlLnN1YnNjcmliZShhKSwgbiA9IGVFKCkpO1xuICB9XG4gIGZ1bmN0aW9uIHAoKSB7XG4gICAgbyAmJiAobygpLCBvID0gdm9pZCAwLCBuLmNsZWFyKCksIG4gPSB6OSk7XG4gIH1cbiAgdmFyIGQgPSB7XG4gICAgYWRkTmVzdGVkU3ViOiByLFxuICAgIG5vdGlmeU5lc3RlZFN1YnM6IGksXG4gICAgaGFuZGxlQ2hhbmdlV3JhcHBlcjogYSxcbiAgICBpc1N1YnNjcmliZWQ6IHMsXG4gICAgdHJ5U3Vic2NyaWJlOiBsLFxuICAgIHRyeVVuc3Vic2NyaWJlOiBwLFxuICAgIGdldExpc3RlbmVyczogZnVuY3Rpb24oKSB7XG4gICAgICByZXR1cm4gbjtcbiAgICB9XG4gIH07XG4gIHJldHVybiBkO1xufVxudmFyIGpwID0gdHlwZW9mIHdpbmRvdyA8IFwidVwiICYmIHR5cGVvZiB3aW5kb3cuZG9jdW1lbnQgPCBcInVcIiAmJiB0eXBlb2Ygd2luZG93LmRvY3VtZW50LmNyZWF0ZUVsZW1lbnQgPCBcInVcIiA/IFQ1IDogUDE7XG5mdW5jdGlvbiBLcChlKSB7XG4gIHZhciB0ID0gZS5zdG9yZSwgbyA9IGUuY29udGV4dCwgbiA9IGUuY2hpbGRyZW4sIHIgPSBtMChmdW5jdGlvbigpIHtcbiAgICB2YXIgcyA9IFpwKHQpO1xuICAgIHJldHVybiB7XG4gICAgICBzdG9yZTogdCxcbiAgICAgIHN1YnNjcmlwdGlvbjogc1xuICAgIH07XG4gIH0sIFt0XSksIGkgPSBtMChmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gdC5nZXRTdGF0ZSgpO1xuICB9LCBbdF0pO1xuICBqcChmdW5jdGlvbigpIHtcbiAgICB2YXIgcyA9IHIuc3Vic2NyaXB0aW9uO1xuICAgIHJldHVybiBzLm9uU3RhdGVDaGFuZ2UgPSBzLm5vdGlmeU5lc3RlZFN1YnMsIHMudHJ5U3Vic2NyaWJlKCksIGkgIT09IHQuZ2V0U3RhdGUoKSAmJiBzLm5vdGlmeU5lc3RlZFN1YnMoKSwgZnVuY3Rpb24oKSB7XG4gICAgICBzLnRyeVVuc3Vic2NyaWJlKCksIHMub25TdGF0ZUNoYW5nZSA9IG51bGw7XG4gICAgfTtcbiAgfSwgW3IsIGldKTtcbiAgdmFyIGEgPSBvIHx8IEE2O1xuICByZXR1cm4gLyogQF9fUFVSRV9fICovIG0xLmNyZWF0ZUVsZW1lbnQoYS5Qcm92aWRlciwge1xuICAgIHZhbHVlOiByXG4gIH0sIG4pO1xufVxucHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiICYmIChLcC5wcm9wVHlwZXMgPSB7XG4gIHN0b3JlOiBxMy5zaGFwZSh7XG4gICAgc3Vic2NyaWJlOiBxMy5mdW5jLmlzUmVxdWlyZWQsXG4gICAgZGlzcGF0Y2g6IHEzLmZ1bmMuaXNSZXF1aXJlZCxcbiAgICBnZXRTdGF0ZTogcTMuZnVuYy5pc1JlcXVpcmVkXG4gIH0pLFxuICBjb250ZXh0OiBxMy5vYmplY3QsXG4gIGNoaWxkcmVuOiBxMy5hbnlcbn0pO1xudmFyIHU2ID0gczYoKSwgdEUgPSB7XG4gIGNoaWxkQ29udGV4dFR5cGVzOiAhMCxcbiAgY29udGV4dFR5cGU6ICEwLFxuICBjb250ZXh0VHlwZXM6ICEwLFxuICBkZWZhdWx0UHJvcHM6ICEwLFxuICBkaXNwbGF5TmFtZTogITAsXG4gIGdldERlZmF1bHRQcm9wczogITAsXG4gIGdldERlcml2ZWRTdGF0ZUZyb21FcnJvcjogITAsXG4gIGdldERlcml2ZWRTdGF0ZUZyb21Qcm9wczogITAsXG4gIG1peGluczogITAsXG4gIHByb3BUeXBlczogITAsXG4gIHR5cGU6ICEwXG59LCBvRSA9IHtcbiAgbmFtZTogITAsXG4gIGxlbmd0aDogITAsXG4gIHByb3RvdHlwZTogITAsXG4gIGNhbGxlcjogITAsXG4gIGNhbGxlZTogITAsXG4gIGFyZ3VtZW50czogITAsXG4gIGFyaXR5OiAhMFxufSwgckUgPSB7XG4gICQkdHlwZW9mOiAhMCxcbiAgcmVuZGVyOiAhMCxcbiAgZGVmYXVsdFByb3BzOiAhMCxcbiAgZGlzcGxheU5hbWU6ICEwLFxuICBwcm9wVHlwZXM6ICEwXG59LCBKcCA9IHtcbiAgJCR0eXBlb2Y6ICEwLFxuICBjb21wYXJlOiAhMCxcbiAgZGVmYXVsdFByb3BzOiAhMCxcbiAgZGlzcGxheU5hbWU6ICEwLFxuICBwcm9wVHlwZXM6ICEwLFxuICB0eXBlOiAhMFxufSwgejYgPSB7fTtcbno2W3U2LkZvcndhcmRSZWZdID0gckU7XG56Nlt1Ni5NZW1vXSA9IEpwO1xuZnVuY3Rpb24gaDkoZSkge1xuICByZXR1cm4gdTYuaXNNZW1vKGUpID8gSnAgOiB6NltlLiQkdHlwZW9mXSB8fCB0RTtcbn1cbnZhciBuRSA9IE9iamVjdC5kZWZpbmVQcm9wZXJ0eSwgaUUgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcywgTzkgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzLCBhRSA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IsIHNFID0gT2JqZWN0LmdldFByb3RvdHlwZU9mLCBmOSA9IE9iamVjdC5wcm90b3R5cGU7XG5mdW5jdGlvbiBfcChlLCB0LCBvKSB7XG4gIGlmICh0eXBlb2YgdCAhPSBcInN0cmluZ1wiKSB7XG4gICAgaWYgKGY5KSB7XG4gICAgICB2YXIgbiA9IHNFKHQpO1xuICAgICAgbiAmJiBuICE9PSBmOSAmJiBfcChlLCBuLCBvKTtcbiAgICB9XG4gICAgdmFyIHIgPSBpRSh0KTtcbiAgICBPOSAmJiAociA9IHIuY29uY2F0KE85KHQpKSk7XG4gICAgZm9yICh2YXIgaSA9IGg5KGUpLCBhID0gaDkodCksIHMgPSAwOyBzIDwgci5sZW5ndGg7ICsrcykge1xuICAgICAgdmFyIGwgPSByW3NdO1xuICAgICAgaWYgKCFvRVtsXSAmJiAhKG8gJiYgb1tsXSkgJiYgIShhICYmIGFbbF0pICYmICEoaSAmJiBpW2xdKSkge1xuICAgICAgICB2YXIgcCA9IGFFKHQsIGwpO1xuICAgICAgICB0cnkge1xuICAgICAgICAgIG5FKGUsIGwsIHApO1xuICAgICAgICB9IGNhdGNoIHtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuICByZXR1cm4gZTtcbn1cbnZhciBjRSA9IF9wO1xuY29uc3QgZzkgPSAvKiBAX19QVVJFX18gKi8gUTIoY0UpO1xudmFyIGM1ID0geyBleHBvcnRzOiB7fSB9LCBYMCA9IHt9O1xuLyoqIEBsaWNlbnNlIFJlYWN0IHYxNy4wLjJcbiAqIHJlYWN0LWlzLnByb2R1Y3Rpb24ubWluLmpzXG4gKlxuICogQ29weXJpZ2h0IChjKSBGYWNlYm9vaywgSW5jLiBhbmQgaXRzIGFmZmlsaWF0ZXMuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuXG4gKi9cbnZhciBDOTtcbmZ1bmN0aW9uIGxFKCkge1xuICBpZiAoQzkpXG4gICAgcmV0dXJuIFgwO1xuICBDOSA9IDE7XG4gIHZhciBlID0gNjAxMDMsIHQgPSA2MDEwNiwgbyA9IDYwMTA3LCBuID0gNjAxMDgsIHIgPSA2MDExNCwgaSA9IDYwMTA5LCBhID0gNjAxMTAsIHMgPSA2MDExMiwgbCA9IDYwMTEzLCBwID0gNjAxMjAsIGQgPSA2MDExNSwgYiA9IDYwMTE2LCBNID0gNjAxMjEsIHUgPSA2MDEyMiwgQSA9IDYwMTE3LCB6ID0gNjAxMjksIGYgPSA2MDEzMTtcbiAgaWYgKHR5cGVvZiBTeW1ib2wgPT0gXCJmdW5jdGlvblwiICYmIFN5bWJvbC5mb3IpIHtcbiAgICB2YXIgTyA9IFN5bWJvbC5mb3I7XG4gICAgZSA9IE8oXCJyZWFjdC5lbGVtZW50XCIpLCB0ID0gTyhcInJlYWN0LnBvcnRhbFwiKSwgbyA9IE8oXCJyZWFjdC5mcmFnbWVudFwiKSwgbiA9IE8oXCJyZWFjdC5zdHJpY3RfbW9kZVwiKSwgciA9IE8oXCJyZWFjdC5wcm9maWxlclwiKSwgaSA9IE8oXCJyZWFjdC5wcm92aWRlclwiKSwgYSA9IE8oXCJyZWFjdC5jb250ZXh0XCIpLCBzID0gTyhcInJlYWN0LmZvcndhcmRfcmVmXCIpLCBsID0gTyhcInJlYWN0LnN1c3BlbnNlXCIpLCBwID0gTyhcInJlYWN0LnN1c3BlbnNlX2xpc3RcIiksIGQgPSBPKFwicmVhY3QubWVtb1wiKSwgYiA9IE8oXCJyZWFjdC5sYXp5XCIpLCBNID0gTyhcInJlYWN0LmJsb2NrXCIpLCB1ID0gTyhcInJlYWN0LnNlcnZlci5ibG9ja1wiKSwgQSA9IE8oXCJyZWFjdC5mdW5kYW1lbnRhbFwiKSwgeiA9IE8oXCJyZWFjdC5kZWJ1Z190cmFjZV9tb2RlXCIpLCBmID0gTyhcInJlYWN0LmxlZ2FjeV9oaWRkZW5cIik7XG4gIH1cbiAgZnVuY3Rpb24gaChDKSB7XG4gICAgaWYgKHR5cGVvZiBDID09IFwib2JqZWN0XCIgJiYgQyAhPT0gbnVsbCkge1xuICAgICAgdmFyIHEgPSBDLiQkdHlwZW9mO1xuICAgICAgc3dpdGNoIChxKSB7XG4gICAgICAgIGNhc2UgZTpcbiAgICAgICAgICBzd2l0Y2ggKEMgPSBDLnR5cGUsIEMpIHtcbiAgICAgICAgICAgIGNhc2UgbzpcbiAgICAgICAgICAgIGNhc2UgcjpcbiAgICAgICAgICAgIGNhc2UgbjpcbiAgICAgICAgICAgIGNhc2UgbDpcbiAgICAgICAgICAgIGNhc2UgcDpcbiAgICAgICAgICAgICAgcmV0dXJuIEM7XG4gICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICBzd2l0Y2ggKEMgPSBDICYmIEMuJCR0eXBlb2YsIEMpIHtcbiAgICAgICAgICAgICAgICBjYXNlIGE6XG4gICAgICAgICAgICAgICAgY2FzZSBzOlxuICAgICAgICAgICAgICAgIGNhc2UgYjpcbiAgICAgICAgICAgICAgICBjYXNlIGQ6XG4gICAgICAgICAgICAgICAgY2FzZSBpOlxuICAgICAgICAgICAgICAgICAgcmV0dXJuIEM7XG4gICAgICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICAgIHJldHVybiBxO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICBjYXNlIHQ6XG4gICAgICAgICAgcmV0dXJuIHE7XG4gICAgICB9XG4gICAgfVxuICB9XG4gIHZhciBnID0gaSwgdiA9IGUsIEwgPSBzLCB5ID0gbywgQiA9IGIsIFggPSBkLCBGID0gdCwgVCA9IHIsIHcgPSBuLCBIID0gbDtcbiAgcmV0dXJuIFgwLkNvbnRleHRDb25zdW1lciA9IGEsIFgwLkNvbnRleHRQcm92aWRlciA9IGcsIFgwLkVsZW1lbnQgPSB2LCBYMC5Gb3J3YXJkUmVmID0gTCwgWDAuRnJhZ21lbnQgPSB5LCBYMC5MYXp5ID0gQiwgWDAuTWVtbyA9IFgsIFgwLlBvcnRhbCA9IEYsIFgwLlByb2ZpbGVyID0gVCwgWDAuU3RyaWN0TW9kZSA9IHcsIFgwLlN1c3BlbnNlID0gSCwgWDAuaXNBc3luY01vZGUgPSBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gITE7XG4gIH0sIFgwLmlzQ29uY3VycmVudE1vZGUgPSBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gITE7XG4gIH0sIFgwLmlzQ29udGV4dENvbnN1bWVyID0gZnVuY3Rpb24oQykge1xuICAgIHJldHVybiBoKEMpID09PSBhO1xuICB9LCBYMC5pc0NvbnRleHRQcm92aWRlciA9IGZ1bmN0aW9uKEMpIHtcbiAgICByZXR1cm4gaChDKSA9PT0gaTtcbiAgfSwgWDAuaXNFbGVtZW50ID0gZnVuY3Rpb24oQykge1xuICAgIHJldHVybiB0eXBlb2YgQyA9PSBcIm9iamVjdFwiICYmIEMgIT09IG51bGwgJiYgQy4kJHR5cGVvZiA9PT0gZTtcbiAgfSwgWDAuaXNGb3J3YXJkUmVmID0gZnVuY3Rpb24oQykge1xuICAgIHJldHVybiBoKEMpID09PSBzO1xuICB9LCBYMC5pc0ZyYWdtZW50ID0gZnVuY3Rpb24oQykge1xuICAgIHJldHVybiBoKEMpID09PSBvO1xuICB9LCBYMC5pc0xhenkgPSBmdW5jdGlvbihDKSB7XG4gICAgcmV0dXJuIGgoQykgPT09IGI7XG4gIH0sIFgwLmlzTWVtbyA9IGZ1bmN0aW9uKEMpIHtcbiAgICByZXR1cm4gaChDKSA9PT0gZDtcbiAgfSwgWDAuaXNQb3J0YWwgPSBmdW5jdGlvbihDKSB7XG4gICAgcmV0dXJuIGgoQykgPT09IHQ7XG4gIH0sIFgwLmlzUHJvZmlsZXIgPSBmdW5jdGlvbihDKSB7XG4gICAgcmV0dXJuIGgoQykgPT09IHI7XG4gIH0sIFgwLmlzU3RyaWN0TW9kZSA9IGZ1bmN0aW9uKEMpIHtcbiAgICByZXR1cm4gaChDKSA9PT0gbjtcbiAgfSwgWDAuaXNTdXNwZW5zZSA9IGZ1bmN0aW9uKEMpIHtcbiAgICByZXR1cm4gaChDKSA9PT0gbDtcbiAgfSwgWDAuaXNWYWxpZEVsZW1lbnRUeXBlID0gZnVuY3Rpb24oQykge1xuICAgIHJldHVybiB0eXBlb2YgQyA9PSBcInN0cmluZ1wiIHx8IHR5cGVvZiBDID09IFwiZnVuY3Rpb25cIiB8fCBDID09PSBvIHx8IEMgPT09IHIgfHwgQyA9PT0geiB8fCBDID09PSBuIHx8IEMgPT09IGwgfHwgQyA9PT0gcCB8fCBDID09PSBmIHx8IHR5cGVvZiBDID09IFwib2JqZWN0XCIgJiYgQyAhPT0gbnVsbCAmJiAoQy4kJHR5cGVvZiA9PT0gYiB8fCBDLiQkdHlwZW9mID09PSBkIHx8IEMuJCR0eXBlb2YgPT09IGkgfHwgQy4kJHR5cGVvZiA9PT0gYSB8fCBDLiQkdHlwZW9mID09PSBzIHx8IEMuJCR0eXBlb2YgPT09IEEgfHwgQy4kJHR5cGVvZiA9PT0gTSB8fCBDWzBdID09PSB1KTtcbiAgfSwgWDAudHlwZU9mID0gaCwgWDA7XG59XG52YXIgVTAgPSB7fTtcbi8qKiBAbGljZW5zZSBSZWFjdCB2MTcuMC4yXG4gKiByZWFjdC1pcy5kZXZlbG9wbWVudC5qc1xuICpcbiAqIENvcHlyaWdodCAoYykgRmFjZWJvb2ssIEluYy4gYW5kIGl0cyBhZmZpbGlhdGVzLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLlxuICovXG52YXIgbTk7XG5mdW5jdGlvbiBwRSgpIHtcbiAgcmV0dXJuIG05IHx8IChtOSA9IDEsIHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIiAmJiBmdW5jdGlvbigpIHtcbiAgICB2YXIgZSA9IDYwMTAzLCB0ID0gNjAxMDYsIG8gPSA2MDEwNywgbiA9IDYwMTA4LCByID0gNjAxMTQsIGkgPSA2MDEwOSwgYSA9IDYwMTEwLCBzID0gNjAxMTIsIGwgPSA2MDExMywgcCA9IDYwMTIwLCBkID0gNjAxMTUsIGIgPSA2MDExNiwgTSA9IDYwMTIxLCB1ID0gNjAxMjIsIEEgPSA2MDExNywgeiA9IDYwMTI5LCBmID0gNjAxMzE7XG4gICAgaWYgKHR5cGVvZiBTeW1ib2wgPT0gXCJmdW5jdGlvblwiICYmIFN5bWJvbC5mb3IpIHtcbiAgICAgIHZhciBPID0gU3ltYm9sLmZvcjtcbiAgICAgIGUgPSBPKFwicmVhY3QuZWxlbWVudFwiKSwgdCA9IE8oXCJyZWFjdC5wb3J0YWxcIiksIG8gPSBPKFwicmVhY3QuZnJhZ21lbnRcIiksIG4gPSBPKFwicmVhY3Quc3RyaWN0X21vZGVcIiksIHIgPSBPKFwicmVhY3QucHJvZmlsZXJcIiksIGkgPSBPKFwicmVhY3QucHJvdmlkZXJcIiksIGEgPSBPKFwicmVhY3QuY29udGV4dFwiKSwgcyA9IE8oXCJyZWFjdC5mb3J3YXJkX3JlZlwiKSwgbCA9IE8oXCJyZWFjdC5zdXNwZW5zZVwiKSwgcCA9IE8oXCJyZWFjdC5zdXNwZW5zZV9saXN0XCIpLCBkID0gTyhcInJlYWN0Lm1lbW9cIiksIGIgPSBPKFwicmVhY3QubGF6eVwiKSwgTSA9IE8oXCJyZWFjdC5ibG9ja1wiKSwgdSA9IE8oXCJyZWFjdC5zZXJ2ZXIuYmxvY2tcIiksIEEgPSBPKFwicmVhY3QuZnVuZGFtZW50YWxcIiksIE8oXCJyZWFjdC5zY29wZVwiKSwgTyhcInJlYWN0Lm9wYXF1ZS5pZFwiKSwgeiA9IE8oXCJyZWFjdC5kZWJ1Z190cmFjZV9tb2RlXCIpLCBPKFwicmVhY3Qub2Zmc2NyZWVuXCIpLCBmID0gTyhcInJlYWN0LmxlZ2FjeV9oaWRkZW5cIik7XG4gICAgfVxuICAgIHZhciBoID0gITE7XG4gICAgZnVuY3Rpb24gZyhKKSB7XG4gICAgICByZXR1cm4gISEodHlwZW9mIEogPT0gXCJzdHJpbmdcIiB8fCB0eXBlb2YgSiA9PSBcImZ1bmN0aW9uXCIgfHwgSiA9PT0gbyB8fCBKID09PSByIHx8IEogPT09IHogfHwgSiA9PT0gbiB8fCBKID09PSBsIHx8IEogPT09IHAgfHwgSiA9PT0gZiB8fCBoIHx8IHR5cGVvZiBKID09IFwib2JqZWN0XCIgJiYgSiAhPT0gbnVsbCAmJiAoSi4kJHR5cGVvZiA9PT0gYiB8fCBKLiQkdHlwZW9mID09PSBkIHx8IEouJCR0eXBlb2YgPT09IGkgfHwgSi4kJHR5cGVvZiA9PT0gYSB8fCBKLiQkdHlwZW9mID09PSBzIHx8IEouJCR0eXBlb2YgPT09IEEgfHwgSi4kJHR5cGVvZiA9PT0gTSB8fCBKWzBdID09PSB1KSk7XG4gICAgfVxuICAgIGZ1bmN0aW9uIHYoSikge1xuICAgICAgaWYgKHR5cGVvZiBKID09IFwib2JqZWN0XCIgJiYgSiAhPT0gbnVsbCkge1xuICAgICAgICB2YXIgUyA9IEouJCR0eXBlb2Y7XG4gICAgICAgIHN3aXRjaCAoUykge1xuICAgICAgICAgIGNhc2UgZTpcbiAgICAgICAgICAgIHZhciBXID0gSi50eXBlO1xuICAgICAgICAgICAgc3dpdGNoIChXKSB7XG4gICAgICAgICAgICAgIGNhc2UgbzpcbiAgICAgICAgICAgICAgY2FzZSByOlxuICAgICAgICAgICAgICBjYXNlIG46XG4gICAgICAgICAgICAgIGNhc2UgbDpcbiAgICAgICAgICAgICAgY2FzZSBwOlxuICAgICAgICAgICAgICAgIHJldHVybiBXO1xuICAgICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgIHZhciBQID0gVyAmJiBXLiQkdHlwZW9mO1xuICAgICAgICAgICAgICAgIHN3aXRjaCAoUCkge1xuICAgICAgICAgICAgICAgICAgY2FzZSBhOlxuICAgICAgICAgICAgICAgICAgY2FzZSBzOlxuICAgICAgICAgICAgICAgICAgY2FzZSBiOlxuICAgICAgICAgICAgICAgICAgY2FzZSBkOlxuICAgICAgICAgICAgICAgICAgY2FzZSBpOlxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gUDtcbiAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBTO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICBjYXNlIHQ6XG4gICAgICAgICAgICByZXR1cm4gUztcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICB2YXIgTCA9IGEsIHkgPSBpLCBCID0gZSwgWCA9IHMsIEYgPSBvLCBUID0gYiwgdyA9IGQsIEggPSB0LCBDID0gciwgcSA9IG4sIG0gPSBsLCBrID0gITEsIHggPSAhMTtcbiAgICBmdW5jdGlvbiBOKEopIHtcbiAgICAgIHJldHVybiBrIHx8IChrID0gITAsIGNvbnNvbGUud2FybihcIlRoZSBSZWFjdElzLmlzQXN5bmNNb2RlKCkgYWxpYXMgaGFzIGJlZW4gZGVwcmVjYXRlZCwgYW5kIHdpbGwgYmUgcmVtb3ZlZCBpbiBSZWFjdCAxOCsuXCIpKSwgITE7XG4gICAgfVxuICAgIGZ1bmN0aW9uIFYoSikge1xuICAgICAgcmV0dXJuIHggfHwgKHggPSAhMCwgY29uc29sZS53YXJuKFwiVGhlIFJlYWN0SXMuaXNDb25jdXJyZW50TW9kZSgpIGFsaWFzIGhhcyBiZWVuIGRlcHJlY2F0ZWQsIGFuZCB3aWxsIGJlIHJlbW92ZWQgaW4gUmVhY3QgMTgrLlwiKSksICExO1xuICAgIH1cbiAgICBmdW5jdGlvbiBSKEopIHtcbiAgICAgIHJldHVybiB2KEopID09PSBhO1xuICAgIH1cbiAgICBmdW5jdGlvbiBJKEopIHtcbiAgICAgIHJldHVybiB2KEopID09PSBpO1xuICAgIH1cbiAgICBmdW5jdGlvbiBqKEopIHtcbiAgICAgIHJldHVybiB0eXBlb2YgSiA9PSBcIm9iamVjdFwiICYmIEogIT09IG51bGwgJiYgSi4kJHR5cGVvZiA9PT0gZTtcbiAgICB9XG4gICAgZnVuY3Rpb24gVShKKSB7XG4gICAgICByZXR1cm4gdihKKSA9PT0gcztcbiAgICB9XG4gICAgZnVuY3Rpb24gXyhKKSB7XG4gICAgICByZXR1cm4gdihKKSA9PT0gbztcbiAgICB9XG4gICAgZnVuY3Rpb24gcjEoSikge1xuICAgICAgcmV0dXJuIHYoSikgPT09IGI7XG4gICAgfVxuICAgIGZ1bmN0aW9uIEsoSikge1xuICAgICAgcmV0dXJuIHYoSikgPT09IGQ7XG4gICAgfVxuICAgIGZ1bmN0aW9uIFEoSikge1xuICAgICAgcmV0dXJuIHYoSikgPT09IHQ7XG4gICAgfVxuICAgIGZ1bmN0aW9uIEUoSikge1xuICAgICAgcmV0dXJuIHYoSikgPT09IHI7XG4gICAgfVxuICAgIGZ1bmN0aW9uIEQoSikge1xuICAgICAgcmV0dXJuIHYoSikgPT09IG47XG4gICAgfVxuICAgIGZ1bmN0aW9uIEcoSikge1xuICAgICAgcmV0dXJuIHYoSikgPT09IGw7XG4gICAgfVxuICAgIFUwLkNvbnRleHRDb25zdW1lciA9IEwsIFUwLkNvbnRleHRQcm92aWRlciA9IHksIFUwLkVsZW1lbnQgPSBCLCBVMC5Gb3J3YXJkUmVmID0gWCwgVTAuRnJhZ21lbnQgPSBGLCBVMC5MYXp5ID0gVCwgVTAuTWVtbyA9IHcsIFUwLlBvcnRhbCA9IEgsIFUwLlByb2ZpbGVyID0gQywgVTAuU3RyaWN0TW9kZSA9IHEsIFUwLlN1c3BlbnNlID0gbSwgVTAuaXNBc3luY01vZGUgPSBOLCBVMC5pc0NvbmN1cnJlbnRNb2RlID0gViwgVTAuaXNDb250ZXh0Q29uc3VtZXIgPSBSLCBVMC5pc0NvbnRleHRQcm92aWRlciA9IEksIFUwLmlzRWxlbWVudCA9IGosIFUwLmlzRm9yd2FyZFJlZiA9IFUsIFUwLmlzRnJhZ21lbnQgPSBfLCBVMC5pc0xhenkgPSByMSwgVTAuaXNNZW1vID0gSywgVTAuaXNQb3J0YWwgPSBRLCBVMC5pc1Byb2ZpbGVyID0gRSwgVTAuaXNTdHJpY3RNb2RlID0gRCwgVTAuaXNTdXNwZW5zZSA9IEcsIFUwLmlzVmFsaWRFbGVtZW50VHlwZSA9IGcsIFUwLnR5cGVPZiA9IHY7XG4gIH0oKSksIFUwO1xufVxucHJvY2Vzcy5lbnYuTk9ERV9FTlYgPT09IFwicHJvZHVjdGlvblwiID8gYzUuZXhwb3J0cyA9IGxFKCkgOiBjNS5leHBvcnRzID0gcEUoKTtcbnZhciBMOSA9IGM1LmV4cG9ydHMsIGRFID0gW1wiZ2V0RGlzcGxheU5hbWVcIiwgXCJtZXRob2ROYW1lXCIsIFwicmVuZGVyQ291bnRQcm9wXCIsIFwic2hvdWxkSGFuZGxlU3RhdGVDaGFuZ2VzXCIsIFwic3RvcmVLZXlcIiwgXCJ3aXRoUmVmXCIsIFwiZm9yd2FyZFJlZlwiLCBcImNvbnRleHRcIl0sIGJFID0gW1wicmVhY3RSZWR1eEZvcndhcmRlZFJlZlwiXSwgTUUgPSBbXSwgQUUgPSBbbnVsbCwgbnVsbF0sIHVFID0gZnVuY3Rpb24odCkge1xuICB0cnkge1xuICAgIHJldHVybiBKU09OLnN0cmluZ2lmeSh0KTtcbiAgfSBjYXRjaCB7XG4gICAgcmV0dXJuIFN0cmluZyh0KTtcbiAgfVxufTtcbmZ1bmN0aW9uIHpFKGUsIHQpIHtcbiAgdmFyIG8gPSBlWzFdO1xuICByZXR1cm4gW3QucGF5bG9hZCwgbyArIDFdO1xufVxuZnVuY3Rpb24gdjkoZSwgdCwgbykge1xuICBqcChmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gZS5hcHBseSh2b2lkIDAsIHQpO1xuICB9LCBvKTtcbn1cbmZ1bmN0aW9uIGhFKGUsIHQsIG8sIG4sIHIsIGksIGEpIHtcbiAgZS5jdXJyZW50ID0gbiwgdC5jdXJyZW50ID0gciwgby5jdXJyZW50ID0gITEsIGkuY3VycmVudCAmJiAoaS5jdXJyZW50ID0gbnVsbCwgYSgpKTtcbn1cbmZ1bmN0aW9uIE9FKGUsIHQsIG8sIG4sIHIsIGksIGEsIHMsIGwsIHApIHtcbiAgaWYgKGUpIHtcbiAgICB2YXIgZCA9ICExLCBiID0gbnVsbCwgTSA9IGZ1bmN0aW9uKCkge1xuICAgICAgaWYgKCFkKSB7XG4gICAgICAgIHZhciB6ID0gdC5nZXRTdGF0ZSgpLCBmLCBPO1xuICAgICAgICB0cnkge1xuICAgICAgICAgIGYgPSBuKHosIHIuY3VycmVudCk7XG4gICAgICAgIH0gY2F0Y2ggKGgpIHtcbiAgICAgICAgICBPID0gaCwgYiA9IGg7XG4gICAgICAgIH1cbiAgICAgICAgTyB8fCAoYiA9IG51bGwpLCBmID09PSBpLmN1cnJlbnQgPyBhLmN1cnJlbnQgfHwgbCgpIDogKGkuY3VycmVudCA9IGYsIHMuY3VycmVudCA9IGYsIGEuY3VycmVudCA9ICEwLCBwKHtcbiAgICAgICAgICB0eXBlOiBcIlNUT1JFX1VQREFURURcIixcbiAgICAgICAgICBwYXlsb2FkOiB7XG4gICAgICAgICAgICBlcnJvcjogT1xuICAgICAgICAgIH1cbiAgICAgICAgfSkpO1xuICAgICAgfVxuICAgIH07XG4gICAgby5vblN0YXRlQ2hhbmdlID0gTSwgby50cnlTdWJzY3JpYmUoKSwgTSgpO1xuICAgIHZhciB1ID0gZnVuY3Rpb24oKSB7XG4gICAgICBpZiAoZCA9ICEwLCBvLnRyeVVuc3Vic2NyaWJlKCksIG8ub25TdGF0ZUNoYW5nZSA9IG51bGwsIGIpXG4gICAgICAgIHRocm93IGI7XG4gICAgfTtcbiAgICByZXR1cm4gdTtcbiAgfVxufVxudmFyIGZFID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiBbbnVsbCwgMF07XG59O1xuZnVuY3Rpb24gZ0UoZSwgdCkge1xuICB0ID09PSB2b2lkIDAgJiYgKHQgPSB7fSk7XG4gIHZhciBvID0gdCwgbiA9IG8uZ2V0RGlzcGxheU5hbWUsIHIgPSBuID09PSB2b2lkIDAgPyBmdW5jdGlvbih5KSB7XG4gICAgcmV0dXJuIFwiQ29ubmVjdEFkdmFuY2VkKFwiICsgeSArIFwiKVwiO1xuICB9IDogbiwgaSA9IG8ubWV0aG9kTmFtZSwgYSA9IGkgPT09IHZvaWQgMCA/IFwiY29ubmVjdEFkdmFuY2VkXCIgOiBpLCBzID0gby5yZW5kZXJDb3VudFByb3AsIGwgPSBzID09PSB2b2lkIDAgPyB2b2lkIDAgOiBzLCBwID0gby5zaG91bGRIYW5kbGVTdGF0ZUNoYW5nZXMsIGQgPSBwID09PSB2b2lkIDAgPyAhMCA6IHAsIGIgPSBvLnN0b3JlS2V5LCBNID0gYiA9PT0gdm9pZCAwID8gXCJzdG9yZVwiIDogYiwgdSA9IG8ud2l0aFJlZiwgQSA9IHUgPT09IHZvaWQgMCA/ICExIDogdSwgeiA9IG8uZm9yd2FyZFJlZiwgZiA9IHogPT09IHZvaWQgMCA/ICExIDogeiwgTyA9IG8uY29udGV4dCwgaCA9IE8gPT09IHZvaWQgMCA/IEE2IDogTywgZyA9IGFyKG8sIGRFKTtcbiAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIikge1xuICAgIGlmIChsICE9PSB2b2lkIDApXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJyZW5kZXJDb3VudFByb3AgaXMgcmVtb3ZlZC4gcmVuZGVyIGNvdW50aW5nIGlzIGJ1aWx0IGludG8gdGhlIGxhdGVzdCBSZWFjdCBEZXYgVG9vbHMgcHJvZmlsaW5nIGV4dGVuc2lvblwiKTtcbiAgICBpZiAoQSlcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIndpdGhSZWYgaXMgcmVtb3ZlZC4gVG8gYWNjZXNzIHRoZSB3cmFwcGVkIGluc3RhbmNlLCB1c2UgYSByZWYgb24gdGhlIGNvbm5lY3RlZCBjb21wb25lbnRcIik7XG4gICAgdmFyIHYgPSBcIlRvIHVzZSBhIGN1c3RvbSBSZWR1eCBzdG9yZSBmb3Igc3BlY2lmaWMgY29tcG9uZW50cywgY3JlYXRlIGEgY3VzdG9tIFJlYWN0IGNvbnRleHQgd2l0aCBSZWFjdC5jcmVhdGVDb250ZXh0KCksIGFuZCBwYXNzIHRoZSBjb250ZXh0IG9iamVjdCB0byBSZWFjdCBSZWR1eCdzIFByb3ZpZGVyIGFuZCBzcGVjaWZpYyBjb21wb25lbnRzIGxpa2U6IDxQcm92aWRlciBjb250ZXh0PXtNeUNvbnRleHR9PjxDb25uZWN0ZWRDb21wb25lbnQgY29udGV4dD17TXlDb250ZXh0fSAvPjwvUHJvdmlkZXI+LiBZb3UgbWF5IGFsc28gcGFzcyBhIHtjb250ZXh0IDogTXlDb250ZXh0fSBvcHRpb24gdG8gY29ubmVjdFwiO1xuICAgIGlmIChNICE9PSBcInN0b3JlXCIpXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJzdG9yZUtleSBoYXMgYmVlbiByZW1vdmVkIGFuZCBkb2VzIG5vdCBkbyBhbnl0aGluZy4gXCIgKyB2KTtcbiAgfVxuICB2YXIgTCA9IGg7XG4gIHJldHVybiBmdW5jdGlvbihCKSB7XG4gICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIiAmJiAhTDkuaXNWYWxpZEVsZW1lbnRUeXBlKEIpKVxuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiWW91IG11c3QgcGFzcyBhIGNvbXBvbmVudCB0byB0aGUgZnVuY3Rpb24gcmV0dXJuZWQgYnkgXCIgKyAoYSArIFwiLiBJbnN0ZWFkIHJlY2VpdmVkIFwiICsgdUUoQikpKTtcbiAgICB2YXIgWCA9IEIuZGlzcGxheU5hbWUgfHwgQi5uYW1lIHx8IFwiQ29tcG9uZW50XCIsIEYgPSByKFgpLCBUID0gYTAoe30sIGcsIHtcbiAgICAgIGdldERpc3BsYXlOYW1lOiByLFxuICAgICAgbWV0aG9kTmFtZTogYSxcbiAgICAgIHJlbmRlckNvdW50UHJvcDogbCxcbiAgICAgIHNob3VsZEhhbmRsZVN0YXRlQ2hhbmdlczogZCxcbiAgICAgIHN0b3JlS2V5OiBNLFxuICAgICAgZGlzcGxheU5hbWU6IEYsXG4gICAgICB3cmFwcGVkQ29tcG9uZW50TmFtZTogWCxcbiAgICAgIFdyYXBwZWRDb21wb25lbnQ6IEJcbiAgICB9KSwgdyA9IGcucHVyZTtcbiAgICBmdW5jdGlvbiBIKHgpIHtcbiAgICAgIHJldHVybiBlKHguZGlzcGF0Y2gsIFQpO1xuICAgIH1cbiAgICB2YXIgQyA9IHcgPyBtMCA6IGZ1bmN0aW9uKHgpIHtcbiAgICAgIHJldHVybiB4KCk7XG4gICAgfTtcbiAgICBmdW5jdGlvbiBxKHgpIHtcbiAgICAgIHZhciBOID0gbTAoZnVuY3Rpb24oKSB7XG4gICAgICAgIHZhciBjMSA9IHgucmVhY3RSZWR1eEZvcndhcmRlZFJlZiwgYTEgPSBhcih4LCBiRSk7XG4gICAgICAgIHJldHVybiBbeC5jb250ZXh0LCBjMSwgYTFdO1xuICAgICAgfSwgW3hdKSwgViA9IE5bMF0sIFIgPSBOWzFdLCBJID0gTlsyXSwgaiA9IG0wKGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gViAmJiBWLkNvbnN1bWVyICYmIEw5LmlzQ29udGV4dENvbnN1bWVyKC8qIEBfX1BVUkVfXyAqLyBtMS5jcmVhdGVFbGVtZW50KFYuQ29uc3VtZXIsIG51bGwpKSA/IFYgOiBMO1xuICAgICAgfSwgW1YsIExdKSwgVSA9IEF0KGopLCBfID0gISF4LnN0b3JlICYmICEheC5zdG9yZS5nZXRTdGF0ZSAmJiAhIXguc3RvcmUuZGlzcGF0Y2gsIHIxID0gISFVICYmICEhVS5zdG9yZTtcbiAgICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIgJiYgIV8gJiYgIXIxKVxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0NvdWxkIG5vdCBmaW5kIFwic3RvcmVcIiBpbiB0aGUgY29udGV4dCBvZiAnICsgKCdcIicgKyBGICsgJ1wiLiBFaXRoZXIgd3JhcCB0aGUgcm9vdCBjb21wb25lbnQgaW4gYSA8UHJvdmlkZXI+LCAnKSArIFwib3IgcGFzcyBhIGN1c3RvbSBSZWFjdCBjb250ZXh0IHByb3ZpZGVyIHRvIDxQcm92aWRlcj4gYW5kIHRoZSBjb3JyZXNwb25kaW5nIFwiICsgKFwiUmVhY3QgY29udGV4dCBjb25zdW1lciB0byBcIiArIEYgKyBcIiBpbiBjb25uZWN0IG9wdGlvbnMuXCIpKTtcbiAgICAgIHZhciBLID0gXyA/IHguc3RvcmUgOiBVLnN0b3JlLCBRID0gbTAoZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiBIKEspO1xuICAgICAgfSwgW0tdKSwgRSA9IG0wKGZ1bmN0aW9uKCkge1xuICAgICAgICBpZiAoIWQpXG4gICAgICAgICAgcmV0dXJuIEFFO1xuICAgICAgICB2YXIgYzEgPSBacChLLCBfID8gbnVsbCA6IFUuc3Vic2NyaXB0aW9uKSwgYTEgPSBjMS5ub3RpZnlOZXN0ZWRTdWJzLmJpbmQoYzEpO1xuICAgICAgICByZXR1cm4gW2MxLCBhMV07XG4gICAgICB9LCBbSywgXywgVV0pLCBEID0gRVswXSwgRyA9IEVbMV0sIEogPSBtMChmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIF8gPyBVIDogYTAoe30sIFUsIHtcbiAgICAgICAgICBzdWJzY3JpcHRpb246IERcbiAgICAgICAgfSk7XG4gICAgICB9LCBbXywgVSwgRF0pLCBTID0gdEEoekUsIE1FLCBmRSksIFcgPSBTWzBdLCBQID0gV1swXSwgWSA9IFNbMV07XG4gICAgICBpZiAoUCAmJiBQLmVycm9yKVxuICAgICAgICB0aHJvdyBQLmVycm9yO1xuICAgICAgdmFyIFogPSBuMCgpLCB0MSA9IG4wKEkpLCBpMSA9IG4wKCksIG4xID0gbjAoITEpLCBzMSA9IEMoZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiBpMS5jdXJyZW50ICYmIEkgPT09IHQxLmN1cnJlbnQgPyBpMS5jdXJyZW50IDogUShLLmdldFN0YXRlKCksIEkpO1xuICAgICAgfSwgW0ssIFAsIEldKTtcbiAgICAgIHY5KGhFLCBbdDEsIFosIG4xLCBJLCBzMSwgaTEsIEddKSwgdjkoT0UsIFtkLCBLLCBELCBRLCB0MSwgWiwgbjEsIGkxLCBHLCBZXSwgW0ssIEQsIFFdKTtcbiAgICAgIHZhciBkMSA9IG0wKGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gLyogQF9fUFVSRV9fICovIG0xLmNyZWF0ZUVsZW1lbnQoQiwgYTAoe30sIHMxLCB7XG4gICAgICAgICAgcmVmOiBSXG4gICAgICAgIH0pKTtcbiAgICAgIH0sIFtSLCBCLCBzMV0pLCBiMSA9IG0wKGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gZCA/IC8qIEBfX1BVUkVfXyAqLyBtMS5jcmVhdGVFbGVtZW50KGouUHJvdmlkZXIsIHtcbiAgICAgICAgICB2YWx1ZTogSlxuICAgICAgICB9LCBkMSkgOiBkMTtcbiAgICAgIH0sIFtqLCBkMSwgSl0pO1xuICAgICAgcmV0dXJuIGIxO1xuICAgIH1cbiAgICB2YXIgbSA9IHcgPyBtMS5tZW1vKHEpIDogcTtcbiAgICBpZiAobS5XcmFwcGVkQ29tcG9uZW50ID0gQiwgbS5kaXNwbGF5TmFtZSA9IHEuZGlzcGxheU5hbWUgPSBGLCBmKSB7XG4gICAgICB2YXIgayA9IG0xLmZvcndhcmRSZWYoZnVuY3Rpb24oTiwgVikge1xuICAgICAgICByZXR1cm4gLyogQF9fUFVSRV9fICovIG0xLmNyZWF0ZUVsZW1lbnQobSwgYTAoe30sIE4sIHtcbiAgICAgICAgICByZWFjdFJlZHV4Rm9yd2FyZGVkUmVmOiBWXG4gICAgICAgIH0pKTtcbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIGsuZGlzcGxheU5hbWUgPSBGLCBrLldyYXBwZWRDb21wb25lbnQgPSBCLCBnOShrLCBCKTtcbiAgICB9XG4gICAgcmV0dXJuIGc5KG0sIEIpO1xuICB9O1xufVxuZnVuY3Rpb24gcTkoZSwgdCkge1xuICByZXR1cm4gZSA9PT0gdCA/IGUgIT09IDAgfHwgdCAhPT0gMCB8fCAxIC8gZSA9PT0gMSAvIHQgOiBlICE9PSBlICYmIHQgIT09IHQ7XG59XG5mdW5jdGlvbiBqaShlLCB0KSB7XG4gIGlmIChxOShlLCB0KSlcbiAgICByZXR1cm4gITA7XG4gIGlmICh0eXBlb2YgZSAhPSBcIm9iamVjdFwiIHx8IGUgPT09IG51bGwgfHwgdHlwZW9mIHQgIT0gXCJvYmplY3RcIiB8fCB0ID09PSBudWxsKVxuICAgIHJldHVybiAhMTtcbiAgdmFyIG8gPSBPYmplY3Qua2V5cyhlKSwgbiA9IE9iamVjdC5rZXlzKHQpO1xuICBpZiAoby5sZW5ndGggIT09IG4ubGVuZ3RoKVxuICAgIHJldHVybiAhMTtcbiAgZm9yICh2YXIgciA9IDA7IHIgPCBvLmxlbmd0aDsgcisrKVxuICAgIGlmICghT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIG9bcl0pIHx8ICFxOShlW29bcl1dLCB0W29bcl1dKSlcbiAgICAgIHJldHVybiAhMTtcbiAgcmV0dXJuICEwO1xufVxuZnVuY3Rpb24gQ0UoZSwgdCkge1xuICB2YXIgbyA9IHt9LCBuID0gZnVuY3Rpb24oYSkge1xuICAgIHZhciBzID0gZVthXTtcbiAgICB0eXBlb2YgcyA9PSBcImZ1bmN0aW9uXCIgJiYgKG9bYV0gPSBmdW5jdGlvbigpIHtcbiAgICAgIHJldHVybiB0KHMuYXBwbHkodm9pZCAwLCBhcmd1bWVudHMpKTtcbiAgICB9KTtcbiAgfTtcbiAgZm9yICh2YXIgciBpbiBlKVxuICAgIG4ocik7XG4gIHJldHVybiBvO1xufVxuZnVuY3Rpb24gbUUoZSkge1xuICBpZiAodHlwZW9mIGUgIT0gXCJvYmplY3RcIiB8fCBlID09PSBudWxsKVxuICAgIHJldHVybiAhMTtcbiAgdmFyIHQgPSBPYmplY3QuZ2V0UHJvdG90eXBlT2YoZSk7XG4gIGlmICh0ID09PSBudWxsKVxuICAgIHJldHVybiAhMDtcbiAgZm9yICh2YXIgbyA9IHQ7IE9iamVjdC5nZXRQcm90b3R5cGVPZihvKSAhPT0gbnVsbDsgKVxuICAgIG8gPSBPYmplY3QuZ2V0UHJvdG90eXBlT2Yobyk7XG4gIHJldHVybiB0ID09PSBvO1xufVxuZnVuY3Rpb24gJHAoZSkge1xuICB0eXBlb2YgY29uc29sZSA8IFwidVwiICYmIHR5cGVvZiBjb25zb2xlLmVycm9yID09IFwiZnVuY3Rpb25cIiAmJiBjb25zb2xlLmVycm9yKGUpO1xuICB0cnkge1xuICAgIHRocm93IG5ldyBFcnJvcihlKTtcbiAgfSBjYXRjaCB7XG4gIH1cbn1cbmZ1bmN0aW9uIGVkKGUsIHQsIG8pIHtcbiAgbUUoZSkgfHwgJHAobyArIFwiKCkgaW4gXCIgKyB0ICsgXCIgbXVzdCByZXR1cm4gYSBwbGFpbiBvYmplY3QuIEluc3RlYWQgcmVjZWl2ZWQgXCIgKyBlICsgXCIuXCIpO1xufVxuZnVuY3Rpb24gaDYoZSkge1xuICByZXR1cm4gZnVuY3Rpb24obywgbikge1xuICAgIHZhciByID0gZShvLCBuKTtcbiAgICBmdW5jdGlvbiBpKCkge1xuICAgICAgcmV0dXJuIHI7XG4gICAgfVxuICAgIHJldHVybiBpLmRlcGVuZHNPbk93blByb3BzID0gITEsIGk7XG4gIH07XG59XG5mdW5jdGlvbiB5OShlKSB7XG4gIHJldHVybiBlLmRlcGVuZHNPbk93blByb3BzICE9PSBudWxsICYmIGUuZGVwZW5kc09uT3duUHJvcHMgIT09IHZvaWQgMCA/ICEhZS5kZXBlbmRzT25Pd25Qcm9wcyA6IGUubGVuZ3RoICE9PSAxO1xufVxuZnVuY3Rpb24gdGQoZSwgdCkge1xuICByZXR1cm4gZnVuY3Rpb24obiwgcikge1xuICAgIHZhciBpID0gci5kaXNwbGF5TmFtZSwgYSA9IGZ1bmN0aW9uKGwsIHApIHtcbiAgICAgIHJldHVybiBhLmRlcGVuZHNPbk93blByb3BzID8gYS5tYXBUb1Byb3BzKGwsIHApIDogYS5tYXBUb1Byb3BzKGwpO1xuICAgIH07XG4gICAgcmV0dXJuIGEuZGVwZW5kc09uT3duUHJvcHMgPSAhMCwgYS5tYXBUb1Byb3BzID0gZnVuY3Rpb24obCwgcCkge1xuICAgICAgYS5tYXBUb1Byb3BzID0gZSwgYS5kZXBlbmRzT25Pd25Qcm9wcyA9IHk5KGUpO1xuICAgICAgdmFyIGQgPSBhKGwsIHApO1xuICAgICAgcmV0dXJuIHR5cGVvZiBkID09IFwiZnVuY3Rpb25cIiAmJiAoYS5tYXBUb1Byb3BzID0gZCwgYS5kZXBlbmRzT25Pd25Qcm9wcyA9IHk5KGQpLCBkID0gYShsLCBwKSksIHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIiAmJiBlZChkLCBpLCB0KSwgZDtcbiAgICB9LCBhO1xuICB9O1xufVxuZnVuY3Rpb24gTEUoZSkge1xuICByZXR1cm4gdHlwZW9mIGUgPT0gXCJmdW5jdGlvblwiID8gdGQoZSwgXCJtYXBEaXNwYXRjaFRvUHJvcHNcIikgOiB2b2lkIDA7XG59XG5mdW5jdGlvbiB2RShlKSB7XG4gIHJldHVybiBlID8gdm9pZCAwIDogaDYoZnVuY3Rpb24odCkge1xuICAgIHJldHVybiB7XG4gICAgICBkaXNwYXRjaDogdFxuICAgIH07XG4gIH0pO1xufVxuZnVuY3Rpb24gcUUoZSkge1xuICByZXR1cm4gZSAmJiB0eXBlb2YgZSA9PSBcIm9iamVjdFwiID8gaDYoZnVuY3Rpb24odCkge1xuICAgIHJldHVybiBDRShlLCB0KTtcbiAgfSkgOiB2b2lkIDA7XG59XG5jb25zdCB5RSA9IFtMRSwgdkUsIHFFXTtcbmZ1bmN0aW9uIHdFKGUpIHtcbiAgcmV0dXJuIHR5cGVvZiBlID09IFwiZnVuY3Rpb25cIiA/IHRkKGUsIFwibWFwU3RhdGVUb1Byb3BzXCIpIDogdm9pZCAwO1xufVxuZnVuY3Rpb24geEUoZSkge1xuICByZXR1cm4gZSA/IHZvaWQgMCA6IGg2KGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiB7fTtcbiAgfSk7XG59XG5jb25zdCBXRSA9IFt3RSwgeEVdO1xuZnVuY3Rpb24gUkUoZSwgdCwgbykge1xuICByZXR1cm4gYTAoe30sIG8sIGUsIHQpO1xufVxuZnVuY3Rpb24gQkUoZSkge1xuICByZXR1cm4gZnVuY3Rpb24obywgbikge1xuICAgIHZhciByID0gbi5kaXNwbGF5TmFtZSwgaSA9IG4ucHVyZSwgYSA9IG4uYXJlTWVyZ2VkUHJvcHNFcXVhbCwgcyA9ICExLCBsO1xuICAgIHJldHVybiBmdW5jdGlvbihkLCBiLCBNKSB7XG4gICAgICB2YXIgdSA9IGUoZCwgYiwgTSk7XG4gICAgICByZXR1cm4gcyA/ICghaSB8fCAhYSh1LCBsKSkgJiYgKGwgPSB1KSA6IChzID0gITAsIGwgPSB1LCBwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIgJiYgZWQobCwgciwgXCJtZXJnZVByb3BzXCIpKSwgbDtcbiAgICB9O1xuICB9O1xufVxuZnVuY3Rpb24gU0UoZSkge1xuICByZXR1cm4gdHlwZW9mIGUgPT0gXCJmdW5jdGlvblwiID8gQkUoZSkgOiB2b2lkIDA7XG59XG5mdW5jdGlvbiBFRShlKSB7XG4gIHJldHVybiBlID8gdm9pZCAwIDogZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIFJFO1xuICB9O1xufVxuY29uc3Qga0UgPSBbU0UsIEVFXTtcbmZ1bmN0aW9uIEtpKGUsIHQsIG8pIHtcbiAgaWYgKGUpXG4gICAgKHQgPT09IFwibWFwU3RhdGVUb1Byb3BzXCIgfHwgdCA9PT0gXCJtYXBEaXNwYXRjaFRvUHJvcHNcIikgJiYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChlLCBcImRlcGVuZHNPbk93blByb3BzXCIpIHx8ICRwKFwiVGhlIHNlbGVjdG9yIGZvciBcIiArIHQgKyBcIiBvZiBcIiArIG8gKyBcIiBkaWQgbm90IHNwZWNpZnkgYSB2YWx1ZSBmb3IgZGVwZW5kc09uT3duUHJvcHMuXCIpKTtcbiAgZWxzZVxuICAgIHRocm93IG5ldyBFcnJvcihcIlVuZXhwZWN0ZWQgdmFsdWUgZm9yIFwiICsgdCArIFwiIGluIFwiICsgbyArIFwiLlwiKTtcbn1cbmZ1bmN0aW9uIE5FKGUsIHQsIG8sIG4pIHtcbiAgS2koZSwgXCJtYXBTdGF0ZVRvUHJvcHNcIiwgbiksIEtpKHQsIFwibWFwRGlzcGF0Y2hUb1Byb3BzXCIsIG4pLCBLaShvLCBcIm1lcmdlUHJvcHNcIiwgbik7XG59XG52YXIgVEUgPSBbXCJpbml0TWFwU3RhdGVUb1Byb3BzXCIsIFwiaW5pdE1hcERpc3BhdGNoVG9Qcm9wc1wiLCBcImluaXRNZXJnZVByb3BzXCJdO1xuZnVuY3Rpb24gSUUoZSwgdCwgbywgbikge1xuICByZXR1cm4gZnVuY3Rpb24oaSwgYSkge1xuICAgIHJldHVybiBvKGUoaSwgYSksIHQobiwgYSksIGEpO1xuICB9O1xufVxuZnVuY3Rpb24gREUoZSwgdCwgbywgbiwgcikge1xuICB2YXIgaSA9IHIuYXJlU3RhdGVzRXF1YWwsIGEgPSByLmFyZU93blByb3BzRXF1YWwsIHMgPSByLmFyZVN0YXRlUHJvcHNFcXVhbCwgbCA9ICExLCBwLCBkLCBiLCBNLCB1O1xuICBmdW5jdGlvbiBBKGcsIHYpIHtcbiAgICByZXR1cm4gcCA9IGcsIGQgPSB2LCBiID0gZShwLCBkKSwgTSA9IHQobiwgZCksIHUgPSBvKGIsIE0sIGQpLCBsID0gITAsIHU7XG4gIH1cbiAgZnVuY3Rpb24geigpIHtcbiAgICByZXR1cm4gYiA9IGUocCwgZCksIHQuZGVwZW5kc09uT3duUHJvcHMgJiYgKE0gPSB0KG4sIGQpKSwgdSA9IG8oYiwgTSwgZCksIHU7XG4gIH1cbiAgZnVuY3Rpb24gZigpIHtcbiAgICByZXR1cm4gZS5kZXBlbmRzT25Pd25Qcm9wcyAmJiAoYiA9IGUocCwgZCkpLCB0LmRlcGVuZHNPbk93blByb3BzICYmIChNID0gdChuLCBkKSksIHUgPSBvKGIsIE0sIGQpLCB1O1xuICB9XG4gIGZ1bmN0aW9uIE8oKSB7XG4gICAgdmFyIGcgPSBlKHAsIGQpLCB2ID0gIXMoZywgYik7XG4gICAgcmV0dXJuIGIgPSBnLCB2ICYmICh1ID0gbyhiLCBNLCBkKSksIHU7XG4gIH1cbiAgZnVuY3Rpb24gaChnLCB2KSB7XG4gICAgdmFyIEwgPSAhYSh2LCBkKSwgeSA9ICFpKGcsIHAsIHYsIGQpO1xuICAgIHJldHVybiBwID0gZywgZCA9IHYsIEwgJiYgeSA/IHooKSA6IEwgPyBmKCkgOiB5ID8gTygpIDogdTtcbiAgfVxuICByZXR1cm4gZnVuY3Rpb24odiwgTCkge1xuICAgIHJldHVybiBsID8gaCh2LCBMKSA6IEEodiwgTCk7XG4gIH07XG59XG5mdW5jdGlvbiBIRShlLCB0KSB7XG4gIHZhciBvID0gdC5pbml0TWFwU3RhdGVUb1Byb3BzLCBuID0gdC5pbml0TWFwRGlzcGF0Y2hUb1Byb3BzLCByID0gdC5pbml0TWVyZ2VQcm9wcywgaSA9IGFyKHQsIFRFKSwgYSA9IG8oZSwgaSksIHMgPSBuKGUsIGkpLCBsID0gcihlLCBpKTtcbiAgcHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiICYmIE5FKGEsIHMsIGwsIGkuZGlzcGxheU5hbWUpO1xuICB2YXIgcCA9IGkucHVyZSA/IERFIDogSUU7XG4gIHJldHVybiBwKGEsIHMsIGwsIGUsIGkpO1xufVxudmFyIFZFID0gW1wicHVyZVwiLCBcImFyZVN0YXRlc0VxdWFsXCIsIFwiYXJlT3duUHJvcHNFcXVhbFwiLCBcImFyZVN0YXRlUHJvcHNFcXVhbFwiLCBcImFyZU1lcmdlZFByb3BzRXF1YWxcIl07XG5mdW5jdGlvbiBKaShlLCB0LCBvKSB7XG4gIGZvciAodmFyIG4gPSB0Lmxlbmd0aCAtIDE7IG4gPj0gMDsgbi0tKSB7XG4gICAgdmFyIHIgPSB0W25dKGUpO1xuICAgIGlmIChyKVxuICAgICAgcmV0dXJuIHI7XG4gIH1cbiAgcmV0dXJuIGZ1bmN0aW9uKGksIGEpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCJJbnZhbGlkIHZhbHVlIG9mIHR5cGUgXCIgKyB0eXBlb2YgZSArIFwiIGZvciBcIiArIG8gKyBcIiBhcmd1bWVudCB3aGVuIGNvbm5lY3RpbmcgY29tcG9uZW50IFwiICsgYS53cmFwcGVkQ29tcG9uZW50TmFtZSArIFwiLlwiKTtcbiAgfTtcbn1cbmZ1bmN0aW9uIFBFKGUsIHQpIHtcbiAgcmV0dXJuIGUgPT09IHQ7XG59XG5mdW5jdGlvbiBGRShlKSB7XG4gIHZhciB0ID0gZSA9PT0gdm9pZCAwID8ge30gOiBlLCBvID0gdC5jb25uZWN0SE9DLCBuID0gbyA9PT0gdm9pZCAwID8gZ0UgOiBvLCByID0gdC5tYXBTdGF0ZVRvUHJvcHNGYWN0b3JpZXMsIGkgPSByID09PSB2b2lkIDAgPyBXRSA6IHIsIGEgPSB0Lm1hcERpc3BhdGNoVG9Qcm9wc0ZhY3RvcmllcywgcyA9IGEgPT09IHZvaWQgMCA/IHlFIDogYSwgbCA9IHQubWVyZ2VQcm9wc0ZhY3RvcmllcywgcCA9IGwgPT09IHZvaWQgMCA/IGtFIDogbCwgZCA9IHQuc2VsZWN0b3JGYWN0b3J5LCBiID0gZCA9PT0gdm9pZCAwID8gSEUgOiBkO1xuICByZXR1cm4gZnVuY3Rpb24odSwgQSwgeiwgZikge1xuICAgIGYgPT09IHZvaWQgMCAmJiAoZiA9IHt9KTtcbiAgICB2YXIgTyA9IGYsIGggPSBPLnB1cmUsIGcgPSBoID09PSB2b2lkIDAgPyAhMCA6IGgsIHYgPSBPLmFyZVN0YXRlc0VxdWFsLCBMID0gdiA9PT0gdm9pZCAwID8gUEUgOiB2LCB5ID0gTy5hcmVPd25Qcm9wc0VxdWFsLCBCID0geSA9PT0gdm9pZCAwID8gamkgOiB5LCBYID0gTy5hcmVTdGF0ZVByb3BzRXF1YWwsIEYgPSBYID09PSB2b2lkIDAgPyBqaSA6IFgsIFQgPSBPLmFyZU1lcmdlZFByb3BzRXF1YWwsIHcgPSBUID09PSB2b2lkIDAgPyBqaSA6IFQsIEggPSBhcihPLCBWRSksIEMgPSBKaSh1LCBpLCBcIm1hcFN0YXRlVG9Qcm9wc1wiKSwgcSA9IEppKEEsIHMsIFwibWFwRGlzcGF0Y2hUb1Byb3BzXCIpLCBtID0gSmkoeiwgcCwgXCJtZXJnZVByb3BzXCIpO1xuICAgIHJldHVybiBuKGIsIGEwKHtcbiAgICAgIC8vIHVzZWQgaW4gZXJyb3IgbWVzc2FnZXNcbiAgICAgIG1ldGhvZE5hbWU6IFwiY29ubmVjdFwiLFxuICAgICAgLy8gdXNlZCB0byBjb21wdXRlIENvbm5lY3QncyBkaXNwbGF5TmFtZSBmcm9tIHRoZSB3cmFwcGVkIGNvbXBvbmVudCdzIGRpc3BsYXlOYW1lLlxuICAgICAgZ2V0RGlzcGxheU5hbWU6IGZ1bmN0aW9uKHgpIHtcbiAgICAgICAgcmV0dXJuIFwiQ29ubmVjdChcIiArIHggKyBcIilcIjtcbiAgICAgIH0sXG4gICAgICAvLyBpZiBtYXBTdGF0ZVRvUHJvcHMgaXMgZmFsc3ksIHRoZSBDb25uZWN0IGNvbXBvbmVudCBkb2Vzbid0IHN1YnNjcmliZSB0byBzdG9yZSBzdGF0ZSBjaGFuZ2VzXG4gICAgICBzaG91bGRIYW5kbGVTdGF0ZUNoYW5nZXM6ICEhdSxcbiAgICAgIC8vIHBhc3NlZCB0aHJvdWdoIHRvIHNlbGVjdG9yRmFjdG9yeVxuICAgICAgaW5pdE1hcFN0YXRlVG9Qcm9wczogQyxcbiAgICAgIGluaXRNYXBEaXNwYXRjaFRvUHJvcHM6IHEsXG4gICAgICBpbml0TWVyZ2VQcm9wczogbSxcbiAgICAgIHB1cmU6IGcsXG4gICAgICBhcmVTdGF0ZXNFcXVhbDogTCxcbiAgICAgIGFyZU93blByb3BzRXF1YWw6IEIsXG4gICAgICBhcmVTdGF0ZVByb3BzRXF1YWw6IEYsXG4gICAgICBhcmVNZXJnZWRQcm9wc0VxdWFsOiB3XG4gICAgfSwgSCkpO1xuICB9O1xufVxuY29uc3Qgb2QgPSAvKiBAX19QVVJFX18gKi8gRkUoKTtcbl9TKHNBKTtcbmZ1bmN0aW9uIFhFKGUsIHQpIHtcbiAgaWYgKGUubGVuZ3RoICE9PSB0Lmxlbmd0aClcbiAgICByZXR1cm4gITE7XG4gIGZvciAodmFyIG8gPSAwOyBvIDwgZS5sZW5ndGg7IG8rKylcbiAgICBpZiAoZVtvXSAhPT0gdFtvXSlcbiAgICAgIHJldHVybiAhMTtcbiAgcmV0dXJuICEwO1xufVxuZnVuY3Rpb24gcmQoZSwgdCkge1xuICB2YXIgbyA9IFQxKGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiB7XG4gICAgICBpbnB1dHM6IHQsXG4gICAgICByZXN1bHQ6IGUoKVxuICAgIH07XG4gIH0pWzBdLCBuID0gbjAoITApLCByID0gbjAobyksIGkgPSBuLmN1cnJlbnQgfHwgISEodCAmJiByLmN1cnJlbnQuaW5wdXRzICYmIFhFKHQsIHIuY3VycmVudC5pbnB1dHMpKSwgYSA9IGkgPyByLmN1cnJlbnQgOiB7XG4gICAgaW5wdXRzOiB0LFxuICAgIHJlc3VsdDogZSgpXG4gIH07XG4gIHJldHVybiBQMShmdW5jdGlvbigpIHtcbiAgICBuLmN1cnJlbnQgPSAhMSwgci5jdXJyZW50ID0gYTtcbiAgfSwgW2FdKSwgYS5yZXN1bHQ7XG59XG5mdW5jdGlvbiBVRShlLCB0KSB7XG4gIHJldHVybiByZChmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gZTtcbiAgfSwgdCk7XG59XG52YXIgUjAgPSByZCwgbDAgPSBVRSwgWUUgPSBwcm9jZXNzLmVudi5OT0RFX0VOViA9PT0gXCJwcm9kdWN0aW9uXCIsIF9pID0gXCJJbnZhcmlhbnQgZmFpbGVkXCI7XG5mdW5jdGlvbiB3OShlLCB0KSB7XG4gIGlmICghZSkge1xuICAgIGlmIChZRSlcbiAgICAgIHRocm93IG5ldyBFcnJvcihfaSk7XG4gICAgdmFyIG8gPSB0eXBlb2YgdCA9PSBcImZ1bmN0aW9uXCIgPyB0KCkgOiB0LCBuID0gbyA/IFwiXCIuY29uY2F0KF9pLCBcIjogXCIpLmNvbmNhdChvKSA6IF9pO1xuICAgIHRocm93IG5ldyBFcnJvcihuKTtcbiAgfVxufVxudmFyIENlID0gZnVuY3Rpb24odCkge1xuICB2YXIgbyA9IHQudG9wLCBuID0gdC5yaWdodCwgciA9IHQuYm90dG9tLCBpID0gdC5sZWZ0LCBhID0gbiAtIGksIHMgPSByIC0gbywgbCA9IHtcbiAgICB0b3A6IG8sXG4gICAgcmlnaHQ6IG4sXG4gICAgYm90dG9tOiByLFxuICAgIGxlZnQ6IGksXG4gICAgd2lkdGg6IGEsXG4gICAgaGVpZ2h0OiBzLFxuICAgIHg6IGksXG4gICAgeTogbyxcbiAgICBjZW50ZXI6IHtcbiAgICAgIHg6IChuICsgaSkgLyAyLFxuICAgICAgeTogKHIgKyBvKSAvIDJcbiAgICB9XG4gIH07XG4gIHJldHVybiBsO1xufSwgTzYgPSBmdW5jdGlvbih0LCBvKSB7XG4gIHJldHVybiB7XG4gICAgdG9wOiB0LnRvcCAtIG8udG9wLFxuICAgIGxlZnQ6IHQubGVmdCAtIG8ubGVmdCxcbiAgICBib3R0b206IHQuYm90dG9tICsgby5ib3R0b20sXG4gICAgcmlnaHQ6IHQucmlnaHQgKyBvLnJpZ2h0XG4gIH07XG59LCB4OSA9IGZ1bmN0aW9uKHQsIG8pIHtcbiAgcmV0dXJuIHtcbiAgICB0b3A6IHQudG9wICsgby50b3AsXG4gICAgbGVmdDogdC5sZWZ0ICsgby5sZWZ0LFxuICAgIGJvdHRvbTogdC5ib3R0b20gLSBvLmJvdHRvbSxcbiAgICByaWdodDogdC5yaWdodCAtIG8ucmlnaHRcbiAgfTtcbn0sIEdFID0gZnVuY3Rpb24odCwgbykge1xuICByZXR1cm4ge1xuICAgIHRvcDogdC50b3AgKyBvLnksXG4gICAgbGVmdDogdC5sZWZ0ICsgby54LFxuICAgIGJvdHRvbTogdC5ib3R0b20gKyBvLnksXG4gICAgcmlnaHQ6IHQucmlnaHQgKyBvLnhcbiAgfTtcbn0sICRpID0ge1xuICB0b3A6IDAsXG4gIHJpZ2h0OiAwLFxuICBib3R0b206IDAsXG4gIGxlZnQ6IDBcbn0sIGY2ID0gZnVuY3Rpb24odCkge1xuICB2YXIgbyA9IHQuYm9yZGVyQm94LCBuID0gdC5tYXJnaW4sIHIgPSBuID09PSB2b2lkIDAgPyAkaSA6IG4sIGkgPSB0LmJvcmRlciwgYSA9IGkgPT09IHZvaWQgMCA/ICRpIDogaSwgcyA9IHQucGFkZGluZywgbCA9IHMgPT09IHZvaWQgMCA/ICRpIDogcywgcCA9IENlKE82KG8sIHIpKSwgZCA9IENlKHg5KG8sIGEpKSwgYiA9IENlKHg5KGQsIGwpKTtcbiAgcmV0dXJuIHtcbiAgICBtYXJnaW5Cb3g6IHAsXG4gICAgYm9yZGVyQm94OiBDZShvKSxcbiAgICBwYWRkaW5nQm94OiBkLFxuICAgIGNvbnRlbnRCb3g6IGIsXG4gICAgbWFyZ2luOiByLFxuICAgIGJvcmRlcjogYSxcbiAgICBwYWRkaW5nOiBsXG4gIH07XG59LCBuZSA9IGZ1bmN0aW9uKHQpIHtcbiAgdmFyIG8gPSB0LnNsaWNlKDAsIC0yKSwgbiA9IHQuc2xpY2UoLTIpO1xuICBpZiAobiAhPT0gXCJweFwiKVxuICAgIHJldHVybiAwO1xuICB2YXIgciA9IE51bWJlcihvKTtcbiAgcmV0dXJuIGlzTmFOKHIpICYmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIgPyB3OSghMSwgXCJDb3VsZCBub3QgcGFyc2UgdmFsdWUgW3JhdzogXCIgKyB0ICsgXCIsIHdpdGhvdXQgc3VmZml4OiBcIiArIG8gKyBcIl1cIikgOiB3OSghMSkpLCByO1xufSwgUUUgPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIHtcbiAgICB4OiB3aW5kb3cucGFnZVhPZmZzZXQsXG4gICAgeTogd2luZG93LnBhZ2VZT2Zmc2V0XG4gIH07XG59LCB2NCA9IGZ1bmN0aW9uKHQsIG8pIHtcbiAgdmFyIG4gPSB0LmJvcmRlckJveCwgciA9IHQuYm9yZGVyLCBpID0gdC5tYXJnaW4sIGEgPSB0LnBhZGRpbmcsIHMgPSBHRShuLCBvKTtcbiAgcmV0dXJuIGY2KHtcbiAgICBib3JkZXJCb3g6IHMsXG4gICAgYm9yZGVyOiByLFxuICAgIG1hcmdpbjogaSxcbiAgICBwYWRkaW5nOiBhXG4gIH0pO1xufSwgcTQgPSBmdW5jdGlvbih0LCBvKSB7XG4gIHJldHVybiBvID09PSB2b2lkIDAgJiYgKG8gPSBRRSgpKSwgdjQodCwgbyk7XG59LCBuZCA9IGZ1bmN0aW9uKHQsIG8pIHtcbiAgdmFyIG4gPSB7XG4gICAgdG9wOiBuZShvLm1hcmdpblRvcCksXG4gICAgcmlnaHQ6IG5lKG8ubWFyZ2luUmlnaHQpLFxuICAgIGJvdHRvbTogbmUoby5tYXJnaW5Cb3R0b20pLFxuICAgIGxlZnQ6IG5lKG8ubWFyZ2luTGVmdClcbiAgfSwgciA9IHtcbiAgICB0b3A6IG5lKG8ucGFkZGluZ1RvcCksXG4gICAgcmlnaHQ6IG5lKG8ucGFkZGluZ1JpZ2h0KSxcbiAgICBib3R0b206IG5lKG8ucGFkZGluZ0JvdHRvbSksXG4gICAgbGVmdDogbmUoby5wYWRkaW5nTGVmdClcbiAgfSwgaSA9IHtcbiAgICB0b3A6IG5lKG8uYm9yZGVyVG9wV2lkdGgpLFxuICAgIHJpZ2h0OiBuZShvLmJvcmRlclJpZ2h0V2lkdGgpLFxuICAgIGJvdHRvbTogbmUoby5ib3JkZXJCb3R0b21XaWR0aCksXG4gICAgbGVmdDogbmUoby5ib3JkZXJMZWZ0V2lkdGgpXG4gIH07XG4gIHJldHVybiBmNih7XG4gICAgYm9yZGVyQm94OiB0LFxuICAgIG1hcmdpbjogbixcbiAgICBwYWRkaW5nOiByLFxuICAgIGJvcmRlcjogaVxuICB9KTtcbn0sIGlkID0gZnVuY3Rpb24odCkge1xuICB2YXIgbyA9IHQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCksIG4gPSB3aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZSh0KTtcbiAgcmV0dXJuIG5kKG8sIG4pO1xufSwgWkUgPSBmdW5jdGlvbih0KSB7XG4gIHZhciBvID0gW10sIG4gPSBudWxsLCByID0gZnVuY3Rpb24oKSB7XG4gICAgZm9yICh2YXIgYSA9IGFyZ3VtZW50cy5sZW5ndGgsIHMgPSBuZXcgQXJyYXkoYSksIGwgPSAwOyBsIDwgYTsgbCsrKVxuICAgICAgc1tsXSA9IGFyZ3VtZW50c1tsXTtcbiAgICBvID0gcywgIW4gJiYgKG4gPSByZXF1ZXN0QW5pbWF0aW9uRnJhbWUoZnVuY3Rpb24oKSB7XG4gICAgICBuID0gbnVsbCwgdC5hcHBseSh2b2lkIDAsIG8pO1xuICAgIH0pKTtcbiAgfTtcbiAgcmV0dXJuIHIuY2FuY2VsID0gZnVuY3Rpb24oKSB7XG4gICAgbiAmJiAoY2FuY2VsQW5pbWF0aW9uRnJhbWUobiksIG4gPSBudWxsKTtcbiAgfSwgcjtcbn07XG5jb25zdCBPciA9IFpFO1xudmFyIGpFID0gcHJvY2Vzcy5lbnYuTk9ERV9FTlYgPT09IFwicHJvZHVjdGlvblwiLCBLRSA9IC9bIFxcdF17Mix9L2csIEpFID0gL15bIFxcdF0qL2dtLCBXOSA9IGZ1bmN0aW9uKHQpIHtcbiAgcmV0dXJuIHQucmVwbGFjZShLRSwgXCIgXCIpLnJlcGxhY2UoSkUsIFwiXCIpLnRyaW0oKTtcbn0sIF9FID0gZnVuY3Rpb24odCkge1xuICByZXR1cm4gVzkoYFxuICAlY3JlYWN0LWJlYXV0aWZ1bC1kbmRcblxuICAlY2AgKyBXOSh0KSArIGBcblxuICAlY/CfkbfigI0gVGhpcyBpcyBhIGRldmVsb3BtZW50IG9ubHkgbWVzc2FnZS4gSXQgd2lsbCBiZSByZW1vdmVkIGluIHByb2R1Y3Rpb24gYnVpbGRzLlxuYCk7XG59LCAkRSA9IGZ1bmN0aW9uKHQpIHtcbiAgcmV0dXJuIFtfRSh0KSwgXCJjb2xvcjogIzAwQzU4NDsgZm9udC1zaXplOiAxLjJlbTsgZm9udC13ZWlnaHQ6IGJvbGQ7XCIsIFwibGluZS1oZWlnaHQ6IDEuNVwiLCBcImNvbG9yOiAjNzIzODc0O1wiXTtcbn0sIGVrID0gXCJfX3JlYWN0LWJlYXV0aWZ1bC1kbmQtZGlzYWJsZS1kZXYtd2FybmluZ3NcIjtcbmZ1bmN0aW9uIGFkKGUsIHQpIHtcbiAgdmFyIG87XG4gIGpFIHx8IHR5cGVvZiB3aW5kb3cgPCBcInVcIiAmJiB3aW5kb3dbZWtdIHx8IChvID0gY29uc29sZSlbZV0uYXBwbHkobywgJEUodCkpO1xufVxudmFyIFowID0gYWQuYmluZChudWxsLCBcIndhcm5cIiksIGw1ID0gYWQuYmluZChudWxsLCBcImVycm9yXCIpO1xuZnVuY3Rpb24gRXQoKSB7XG59XG5mdW5jdGlvbiB0ayhlLCB0KSB7XG4gIHJldHVybiBhMCh7fSwgZSwge30sIHQpO1xufVxuZnVuY3Rpb24gc2UoZSwgdCwgbykge1xuICB2YXIgbiA9IHQubWFwKGZ1bmN0aW9uKHIpIHtcbiAgICB2YXIgaSA9IHRrKG8sIHIub3B0aW9ucyk7XG4gICAgcmV0dXJuIGUuYWRkRXZlbnRMaXN0ZW5lcihyLmV2ZW50TmFtZSwgci5mbiwgaSksIGZ1bmN0aW9uKCkge1xuICAgICAgZS5yZW1vdmVFdmVudExpc3RlbmVyKHIuZXZlbnROYW1lLCByLmZuLCBpKTtcbiAgICB9O1xuICB9KTtcbiAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgIG4uZm9yRWFjaChmdW5jdGlvbihpKSB7XG4gICAgICBpKCk7XG4gICAgfSk7XG4gIH07XG59XG52YXIgb2sgPSBwcm9jZXNzLmVudi5OT0RFX0VOViA9PT0gXCJwcm9kdWN0aW9uXCIsIFI5ID0gXCJJbnZhcmlhbnQgZmFpbGVkXCI7XG5mdW5jdGlvbiBmcihlKSB7XG4gIHRoaXMubWVzc2FnZSA9IGU7XG59XG5mci5wcm90b3R5cGUudG9TdHJpbmcgPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIHRoaXMubWVzc2FnZTtcbn07XG5mdW5jdGlvbiB5MShlLCB0KSB7XG4gIGlmICghZSlcbiAgICB0aHJvdyBvayA/IG5ldyBmcihSOSkgOiBuZXcgZnIoUjkgKyBcIjogXCIgKyAodCB8fCBcIlwiKSk7XG59XG52YXIgcmsgPSBmdW5jdGlvbihlKSB7XG4gIFY0KHQsIGUpO1xuICBmdW5jdGlvbiB0KCkge1xuICAgIGZvciAodmFyIG4sIHIgPSBhcmd1bWVudHMubGVuZ3RoLCBpID0gbmV3IEFycmF5KHIpLCBhID0gMDsgYSA8IHI7IGErKylcbiAgICAgIGlbYV0gPSBhcmd1bWVudHNbYV07XG4gICAgcmV0dXJuIG4gPSBlLmNhbGwuYXBwbHkoZSwgW3RoaXNdLmNvbmNhdChpKSkgfHwgdGhpcywgbi5jYWxsYmFja3MgPSBudWxsLCBuLnVuYmluZCA9IEV0LCBuLm9uV2luZG93RXJyb3IgPSBmdW5jdGlvbihzKSB7XG4gICAgICB2YXIgbCA9IG4uZ2V0Q2FsbGJhY2tzKCk7XG4gICAgICBsLmlzRHJhZ2dpbmcoKSAmJiAobC50cnlBYm9ydCgpLCBwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIgJiYgWjAoYFxuICAgICAgICBBbiBlcnJvciB3YXMgY2F1Z2h0IGJ5IG91ciB3aW5kb3cgJ2Vycm9yJyBldmVudCBsaXN0ZW5lciB3aGlsZSBhIGRyYWcgd2FzIG9jY3VycmluZy5cbiAgICAgICAgVGhlIGFjdGl2ZSBkcmFnIGhhcyBiZWVuIGFib3J0ZWQuXG4gICAgICBgKSk7XG4gICAgICB2YXIgcCA9IHMuZXJyb3I7XG4gICAgICBwIGluc3RhbmNlb2YgZnIgJiYgKHMucHJldmVudERlZmF1bHQoKSwgcHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiICYmIGw1KHAubWVzc2FnZSkpO1xuICAgIH0sIG4uZ2V0Q2FsbGJhY2tzID0gZnVuY3Rpb24oKSB7XG4gICAgICBpZiAoIW4uY2FsbGJhY2tzKVxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJVbmFibGUgdG8gZmluZCBBcHBDYWxsYmFja3MgaW4gPEVycm9yQm91bmRhcnkvPlwiKTtcbiAgICAgIHJldHVybiBuLmNhbGxiYWNrcztcbiAgICB9LCBuLnNldENhbGxiYWNrcyA9IGZ1bmN0aW9uKHMpIHtcbiAgICAgIG4uY2FsbGJhY2tzID0gcztcbiAgICB9LCBuO1xuICB9XG4gIHZhciBvID0gdC5wcm90b3R5cGU7XG4gIHJldHVybiBvLmNvbXBvbmVudERpZE1vdW50ID0gZnVuY3Rpb24oKSB7XG4gICAgdGhpcy51bmJpbmQgPSBzZSh3aW5kb3csIFt7XG4gICAgICBldmVudE5hbWU6IFwiZXJyb3JcIixcbiAgICAgIGZuOiB0aGlzLm9uV2luZG93RXJyb3JcbiAgICB9XSk7XG4gIH0sIG8uY29tcG9uZW50RGlkQ2F0Y2ggPSBmdW5jdGlvbihyKSB7XG4gICAgaWYgKHIgaW5zdGFuY2VvZiBmcikge1xuICAgICAgcHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiICYmIGw1KHIubWVzc2FnZSksIHRoaXMuc2V0U3RhdGUoe30pO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0aHJvdyByO1xuICB9LCBvLmNvbXBvbmVudFdpbGxVbm1vdW50ID0gZnVuY3Rpb24oKSB7XG4gICAgdGhpcy51bmJpbmQoKTtcbiAgfSwgby5yZW5kZXIgPSBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gdGhpcy5wcm9wcy5jaGlsZHJlbih0aGlzLnNldENhbGxiYWNrcyk7XG4gIH0sIHQ7XG59KG0xLkNvbXBvbmVudCksIG5rID0gYFxuICBQcmVzcyBzcGFjZSBiYXIgdG8gc3RhcnQgYSBkcmFnLlxuICBXaGVuIGRyYWdnaW5nIHlvdSBjYW4gdXNlIHRoZSBhcnJvdyBrZXlzIHRvIG1vdmUgdGhlIGl0ZW0gYXJvdW5kIGFuZCBlc2NhcGUgdG8gY2FuY2VsLlxuICBTb21lIHNjcmVlbiByZWFkZXJzIG1heSByZXF1aXJlIHlvdSB0byBiZSBpbiBmb2N1cyBtb2RlIG9yIHRvIHVzZSB5b3VyIHBhc3MgdGhyb3VnaCBrZXlcbmAsIHk0ID0gZnVuY3Rpb24odCkge1xuICByZXR1cm4gdCArIDE7XG59LCBpayA9IGZ1bmN0aW9uKHQpIHtcbiAgcmV0dXJuIGBcbiAgWW91IGhhdmUgbGlmdGVkIGFuIGl0ZW0gaW4gcG9zaXRpb24gYCArIHk0KHQuc291cmNlLmluZGV4KSArIGBcbmA7XG59LCBzZCA9IGZ1bmN0aW9uKHQsIG8pIHtcbiAgdmFyIG4gPSB0LmRyb3BwYWJsZUlkID09PSBvLmRyb3BwYWJsZUlkLCByID0geTQodC5pbmRleCksIGkgPSB5NChvLmluZGV4KTtcbiAgcmV0dXJuIG4gPyBgXG4gICAgICBZb3UgaGF2ZSBtb3ZlZCB0aGUgaXRlbSBmcm9tIHBvc2l0aW9uIGAgKyByICsgYFxuICAgICAgdG8gcG9zaXRpb24gYCArIGkgKyBgXG4gICAgYCA6IGBcbiAgICBZb3UgaGF2ZSBtb3ZlZCB0aGUgaXRlbSBmcm9tIHBvc2l0aW9uIGAgKyByICsgYFxuICAgIGluIGxpc3QgYCArIHQuZHJvcHBhYmxlSWQgKyBgXG4gICAgdG8gbGlzdCBgICsgby5kcm9wcGFibGVJZCArIGBcbiAgICBpbiBwb3NpdGlvbiBgICsgaSArIGBcbiAgYDtcbn0sIGNkID0gZnVuY3Rpb24odCwgbywgbikge1xuICB2YXIgciA9IG8uZHJvcHBhYmxlSWQgPT09IG4uZHJvcHBhYmxlSWQ7XG4gIHJldHVybiByID8gYFxuICAgICAgVGhlIGl0ZW0gYCArIHQgKyBgXG4gICAgICBoYXMgYmVlbiBjb21iaW5lZCB3aXRoIGAgKyBuLmRyYWdnYWJsZUlkIDogYFxuICAgICAgVGhlIGl0ZW0gYCArIHQgKyBgXG4gICAgICBpbiBsaXN0IGAgKyBvLmRyb3BwYWJsZUlkICsgYFxuICAgICAgaGFzIGJlZW4gY29tYmluZWQgd2l0aCBgICsgbi5kcmFnZ2FibGVJZCArIGBcbiAgICAgIGluIGxpc3QgYCArIG4uZHJvcHBhYmxlSWQgKyBgXG4gICAgYDtcbn0sIGFrID0gZnVuY3Rpb24odCkge1xuICB2YXIgbyA9IHQuZGVzdGluYXRpb247XG4gIGlmIChvKVxuICAgIHJldHVybiBzZCh0LnNvdXJjZSwgbyk7XG4gIHZhciBuID0gdC5jb21iaW5lO1xuICByZXR1cm4gbiA/IGNkKHQuZHJhZ2dhYmxlSWQsIHQuc291cmNlLCBuKSA6IFwiWW91IGFyZSBvdmVyIGFuIGFyZWEgdGhhdCBjYW5ub3QgYmUgZHJvcHBlZCBvblwiO1xufSwgQjkgPSBmdW5jdGlvbih0KSB7XG4gIHJldHVybiBgXG4gIFRoZSBpdGVtIGhhcyByZXR1cm5lZCB0byBpdHMgc3RhcnRpbmcgcG9zaXRpb25cbiAgb2YgYCArIHk0KHQuaW5kZXgpICsgYFxuYDtcbn0sIHNrID0gZnVuY3Rpb24odCkge1xuICBpZiAodC5yZWFzb24gPT09IFwiQ0FOQ0VMXCIpXG4gICAgcmV0dXJuIGBcbiAgICAgIE1vdmVtZW50IGNhbmNlbGxlZC5cbiAgICAgIGAgKyBCOSh0LnNvdXJjZSkgKyBgXG4gICAgYDtcbiAgdmFyIG8gPSB0LmRlc3RpbmF0aW9uLCBuID0gdC5jb21iaW5lO1xuICByZXR1cm4gbyA/IGBcbiAgICAgIFlvdSBoYXZlIGRyb3BwZWQgdGhlIGl0ZW0uXG4gICAgICBgICsgc2QodC5zb3VyY2UsIG8pICsgYFxuICAgIGAgOiBuID8gYFxuICAgICAgWW91IGhhdmUgZHJvcHBlZCB0aGUgaXRlbS5cbiAgICAgIGAgKyBjZCh0LmRyYWdnYWJsZUlkLCB0LnNvdXJjZSwgbikgKyBgXG4gICAgYCA6IGBcbiAgICBUaGUgaXRlbSBoYXMgYmVlbiBkcm9wcGVkIHdoaWxlIG5vdCBvdmVyIGEgZHJvcCBhcmVhLlxuICAgIGAgKyBCOSh0LnNvdXJjZSkgKyBgXG4gIGA7XG59LCBabiA9IHtcbiAgZHJhZ0hhbmRsZVVzYWdlSW5zdHJ1Y3Rpb25zOiBuayxcbiAgb25EcmFnU3RhcnQ6IGlrLFxuICBvbkRyYWdVcGRhdGU6IGFrLFxuICBvbkRyYWdFbmQ6IHNrXG59LCB1MiA9IHtcbiAgeDogMCxcbiAgeTogMFxufSwgQzIgPSBmdW5jdGlvbih0LCBvKSB7XG4gIHJldHVybiB7XG4gICAgeDogdC54ICsgby54LFxuICAgIHk6IHQueSArIG8ueVxuICB9O1xufSwgXzIgPSBmdW5jdGlvbih0LCBvKSB7XG4gIHJldHVybiB7XG4gICAgeDogdC54IC0gby54LFxuICAgIHk6IHQueSAtIG8ueVxuICB9O1xufSwga3QgPSBmdW5jdGlvbih0LCBvKSB7XG4gIHJldHVybiB0LnggPT09IG8ueCAmJiB0LnkgPT09IG8ueTtcbn0sIGxvID0gZnVuY3Rpb24odCkge1xuICByZXR1cm4ge1xuICAgIHg6IHQueCAhPT0gMCA/IC10LnggOiAwLFxuICAgIHk6IHQueSAhPT0gMCA/IC10LnkgOiAwXG4gIH07XG59LCB6MyA9IGZ1bmN0aW9uKHQsIG8sIG4pIHtcbiAgdmFyIHI7XG4gIHJldHVybiBuID09PSB2b2lkIDAgJiYgKG4gPSAwKSwgciA9IHt9LCByW3RdID0gbywgclt0ID09PSBcInhcIiA/IFwieVwiIDogXCJ4XCJdID0gbiwgcjtcbn0sIGdyID0gZnVuY3Rpb24odCwgbykge1xuICByZXR1cm4gTWF0aC5zcXJ0KE1hdGgucG93KG8ueCAtIHQueCwgMikgKyBNYXRoLnBvdyhvLnkgLSB0LnksIDIpKTtcbn0sIFM5ID0gZnVuY3Rpb24odCwgbykge1xuICByZXR1cm4gTWF0aC5taW4uYXBwbHkoTWF0aCwgby5tYXAoZnVuY3Rpb24obikge1xuICAgIHJldHVybiBncih0LCBuKTtcbiAgfSkpO1xufSwgbGQgPSBmdW5jdGlvbih0KSB7XG4gIHJldHVybiBmdW5jdGlvbihvKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHg6IHQoby54KSxcbiAgICAgIHk6IHQoby55KVxuICAgIH07XG4gIH07XG59LCBjayA9IGZ1bmN0aW9uKGUsIHQpIHtcbiAgdmFyIG8gPSBDZSh7XG4gICAgdG9wOiBNYXRoLm1heCh0LnRvcCwgZS50b3ApLFxuICAgIHJpZ2h0OiBNYXRoLm1pbih0LnJpZ2h0LCBlLnJpZ2h0KSxcbiAgICBib3R0b206IE1hdGgubWluKHQuYm90dG9tLCBlLmJvdHRvbSksXG4gICAgbGVmdDogTWF0aC5tYXgodC5sZWZ0LCBlLmxlZnQpXG4gIH0pO1xuICByZXR1cm4gby53aWR0aCA8PSAwIHx8IG8uaGVpZ2h0IDw9IDAgPyBudWxsIDogbztcbn0sIERyID0gZnVuY3Rpb24odCwgbykge1xuICByZXR1cm4ge1xuICAgIHRvcDogdC50b3AgKyBvLnksXG4gICAgbGVmdDogdC5sZWZ0ICsgby54LFxuICAgIGJvdHRvbTogdC5ib3R0b20gKyBvLnksXG4gICAgcmlnaHQ6IHQucmlnaHQgKyBvLnhcbiAgfTtcbn0sIEU5ID0gZnVuY3Rpb24odCkge1xuICByZXR1cm4gW3tcbiAgICB4OiB0LmxlZnQsXG4gICAgeTogdC50b3BcbiAgfSwge1xuICAgIHg6IHQucmlnaHQsXG4gICAgeTogdC50b3BcbiAgfSwge1xuICAgIHg6IHQubGVmdCxcbiAgICB5OiB0LmJvdHRvbVxuICB9LCB7XG4gICAgeDogdC5yaWdodCxcbiAgICB5OiB0LmJvdHRvbVxuICB9XTtcbn0sIGxrID0ge1xuICB0b3A6IDAsXG4gIHJpZ2h0OiAwLFxuICBib3R0b206IDAsXG4gIGxlZnQ6IDBcbn0sIHBrID0gZnVuY3Rpb24odCwgbykge1xuICByZXR1cm4gbyA/IERyKHQsIG8uc2Nyb2xsLmRpZmYuZGlzcGxhY2VtZW50KSA6IHQ7XG59LCBkayA9IGZ1bmN0aW9uKHQsIG8sIG4pIHtcbiAgaWYgKG4gJiYgbi5pbmNyZWFzZWRCeSkge1xuICAgIHZhciByO1xuICAgIHJldHVybiBhMCh7fSwgdCwgKHIgPSB7fSwgcltvLmVuZF0gPSB0W28uZW5kXSArIG4uaW5jcmVhc2VkQnlbby5saW5lXSwgcikpO1xuICB9XG4gIHJldHVybiB0O1xufSwgYmsgPSBmdW5jdGlvbih0LCBvKSB7XG4gIHJldHVybiBvICYmIG8uc2hvdWxkQ2xpcFN1YmplY3QgPyBjayhvLnBhZ2VNYXJnaW5Cb3gsIHQpIDogQ2UodCk7XG59LCBlbyA9IGZ1bmN0aW9uKGUpIHtcbiAgdmFyIHQgPSBlLnBhZ2UsIG8gPSBlLndpdGhQbGFjZWhvbGRlciwgbiA9IGUuYXhpcywgciA9IGUuZnJhbWUsIGkgPSBwayh0Lm1hcmdpbkJveCwgciksIGEgPSBkayhpLCBuLCBvKSwgcyA9IGJrKGEsIHIpO1xuICByZXR1cm4ge1xuICAgIHBhZ2U6IHQsXG4gICAgd2l0aFBsYWNlaG9sZGVyOiBvLFxuICAgIGFjdGl2ZTogc1xuICB9O1xufSwgZzYgPSBmdW5jdGlvbihlLCB0KSB7XG4gIGUuZnJhbWUgfHwgKHByb2Nlc3MuZW52Lk5PREVfRU5WLCB5MSghMSkpO1xuICB2YXIgbyA9IGUuZnJhbWUsIG4gPSBfMih0LCBvLnNjcm9sbC5pbml0aWFsKSwgciA9IGxvKG4pLCBpID0gYTAoe30sIG8sIHtcbiAgICBzY3JvbGw6IHtcbiAgICAgIGluaXRpYWw6IG8uc2Nyb2xsLmluaXRpYWwsXG4gICAgICBjdXJyZW50OiB0LFxuICAgICAgZGlmZjoge1xuICAgICAgICB2YWx1ZTogbixcbiAgICAgICAgZGlzcGxhY2VtZW50OiByXG4gICAgICB9LFxuICAgICAgbWF4OiBvLnNjcm9sbC5tYXhcbiAgICB9XG4gIH0pLCBhID0gZW8oe1xuICAgIHBhZ2U6IGUuc3ViamVjdC5wYWdlLFxuICAgIHdpdGhQbGFjZWhvbGRlcjogZS5zdWJqZWN0LndpdGhQbGFjZWhvbGRlcixcbiAgICBheGlzOiBlLmF4aXMsXG4gICAgZnJhbWU6IGlcbiAgfSksIHMgPSBhMCh7fSwgZSwge1xuICAgIGZyYW1lOiBpLFxuICAgIHN1YmplY3Q6IGFcbiAgfSk7XG4gIHJldHVybiBzO1xufTtcbmZ1bmN0aW9uIE1rKGUpIHtcbiAgcmV0dXJuIE51bWJlci5pc0ludGVnZXIgPyBOdW1iZXIuaXNJbnRlZ2VyKGUpIDogdHlwZW9mIGUgPT0gXCJudW1iZXJcIiAmJiBpc0Zpbml0ZShlKSAmJiBNYXRoLmZsb29yKGUpID09PSBlO1xufVxuZnVuY3Rpb24gdzQoZSkge1xuICByZXR1cm4gT2JqZWN0LnZhbHVlcyA/IE9iamVjdC52YWx1ZXMoZSkgOiBPYmplY3Qua2V5cyhlKS5tYXAoZnVuY3Rpb24odCkge1xuICAgIHJldHVybiBlW3RdO1xuICB9KTtcbn1cbmZ1bmN0aW9uIEM2KGUsIHQpIHtcbiAgaWYgKGUuZmluZEluZGV4KVxuICAgIHJldHVybiBlLmZpbmRJbmRleCh0KTtcbiAgZm9yICh2YXIgbyA9IDA7IG8gPCBlLmxlbmd0aDsgbysrKVxuICAgIGlmICh0KGVbb10pKVxuICAgICAgcmV0dXJuIG87XG4gIHJldHVybiAtMTtcbn1cbmZ1bmN0aW9uIFV0KGUsIHQpIHtcbiAgaWYgKGUuZmluZClcbiAgICByZXR1cm4gZS5maW5kKHQpO1xuICB2YXIgbyA9IEM2KGUsIHQpO1xuICBpZiAobyAhPT0gLTEpXG4gICAgcmV0dXJuIGVbb107XG59XG5mdW5jdGlvbiBwZChlKSB7XG4gIHJldHVybiBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChlKTtcbn1cbnZhciBkZCA9IHAyKGZ1bmN0aW9uKGUpIHtcbiAgcmV0dXJuIGUucmVkdWNlKGZ1bmN0aW9uKHQsIG8pIHtcbiAgICByZXR1cm4gdFtvLmRlc2NyaXB0b3IuaWRdID0gbywgdDtcbiAgfSwge30pO1xufSksIGJkID0gcDIoZnVuY3Rpb24oZSkge1xuICByZXR1cm4gZS5yZWR1Y2UoZnVuY3Rpb24odCwgbykge1xuICAgIHJldHVybiB0W28uZGVzY3JpcHRvci5pZF0gPSBvLCB0O1xuICB9LCB7fSk7XG59KSwgSzQgPSBwMihmdW5jdGlvbihlKSB7XG4gIHJldHVybiB3NChlKTtcbn0pLCBBayA9IHAyKGZ1bmN0aW9uKGUpIHtcbiAgcmV0dXJuIHc0KGUpO1xufSksIGgzID0gcDIoZnVuY3Rpb24oZSwgdCkge1xuICB2YXIgbyA9IEFrKHQpLmZpbHRlcihmdW5jdGlvbihuKSB7XG4gICAgcmV0dXJuIGUgPT09IG4uZGVzY3JpcHRvci5kcm9wcGFibGVJZDtcbiAgfSkuc29ydChmdW5jdGlvbihuLCByKSB7XG4gICAgcmV0dXJuIG4uZGVzY3JpcHRvci5pbmRleCAtIHIuZGVzY3JpcHRvci5pbmRleDtcbiAgfSk7XG4gIHJldHVybiBvO1xufSk7XG5mdW5jdGlvbiBtNihlKSB7XG4gIHJldHVybiBlLmF0ICYmIGUuYXQudHlwZSA9PT0gXCJSRU9SREVSXCIgPyBlLmF0LmRlc3RpbmF0aW9uIDogbnVsbDtcbn1cbmZ1bmN0aW9uIEo0KGUpIHtcbiAgcmV0dXJuIGUuYXQgJiYgZS5hdC50eXBlID09PSBcIkNPTUJJTkVcIiA/IGUuYXQuY29tYmluZSA6IG51bGw7XG59XG52YXIgXzQgPSBwMihmdW5jdGlvbihlLCB0KSB7XG4gIHJldHVybiB0LmZpbHRlcihmdW5jdGlvbihvKSB7XG4gICAgcmV0dXJuIG8uZGVzY3JpcHRvci5pZCAhPT0gZS5kZXNjcmlwdG9yLmlkO1xuICB9KTtcbn0pLCB1ayA9IGZ1bmN0aW9uKGUpIHtcbiAgdmFyIHQgPSBlLmlzTW92aW5nRm9yd2FyZCwgbyA9IGUuZHJhZ2dhYmxlLCBuID0gZS5kZXN0aW5hdGlvbiwgciA9IGUuaW5zaWRlRGVzdGluYXRpb24sIGkgPSBlLnByZXZpb3VzSW1wYWN0O1xuICBpZiAoIW4uaXNDb21iaW5lRW5hYmxlZClcbiAgICByZXR1cm4gbnVsbDtcbiAgdmFyIGEgPSBtNihpKTtcbiAgaWYgKCFhKVxuICAgIHJldHVybiBudWxsO1xuICBmdW5jdGlvbiBzKHopIHtcbiAgICB2YXIgZiA9IHtcbiAgICAgIHR5cGU6IFwiQ09NQklORVwiLFxuICAgICAgY29tYmluZToge1xuICAgICAgICBkcmFnZ2FibGVJZDogeixcbiAgICAgICAgZHJvcHBhYmxlSWQ6IG4uZGVzY3JpcHRvci5pZFxuICAgICAgfVxuICAgIH07XG4gICAgcmV0dXJuIGEwKHt9LCBpLCB7XG4gICAgICBhdDogZlxuICAgIH0pO1xuICB9XG4gIHZhciBsID0gaS5kaXNwbGFjZWQuYWxsLCBwID0gbC5sZW5ndGggPyBsWzBdIDogbnVsbDtcbiAgaWYgKHQpXG4gICAgcmV0dXJuIHAgPyBzKHApIDogbnVsbDtcbiAgdmFyIGQgPSBfNChvLCByKTtcbiAgaWYgKCFwKSB7XG4gICAgaWYgKCFkLmxlbmd0aClcbiAgICAgIHJldHVybiBudWxsO1xuICAgIHZhciBiID0gZFtkLmxlbmd0aCAtIDFdO1xuICAgIHJldHVybiBzKGIuZGVzY3JpcHRvci5pZCk7XG4gIH1cbiAgdmFyIE0gPSBDNihkLCBmdW5jdGlvbih6KSB7XG4gICAgcmV0dXJuIHouZGVzY3JpcHRvci5pZCA9PT0gcDtcbiAgfSk7XG4gIE0gPT09IC0xICYmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIgPyB5MSghMSwgXCJDb3VsZCBub3QgZmluZCBkaXNwbGFjZWQgaXRlbSBpbiBzZXRcIikgOiB5MSghMSkpO1xuICB2YXIgdSA9IE0gLSAxO1xuICBpZiAodSA8IDApXG4gICAgcmV0dXJuIG51bGw7XG4gIHZhciBBID0gZFt1XTtcbiAgcmV0dXJuIHMoQS5kZXNjcmlwdG9yLmlkKTtcbn0sIHBvID0gZnVuY3Rpb24oZSwgdCkge1xuICByZXR1cm4gZS5kZXNjcmlwdG9yLmRyb3BwYWJsZUlkID09PSB0LmRlc2NyaXB0b3IuaWQ7XG59LCBNZCA9IHtcbiAgcG9pbnQ6IHUyLFxuICB2YWx1ZTogMFxufSwgQ3IgPSB7XG4gIGludmlzaWJsZToge30sXG4gIHZpc2libGU6IHt9LFxuICBhbGw6IFtdXG59LCB6ayA9IHtcbiAgZGlzcGxhY2VkOiBDcixcbiAgZGlzcGxhY2VkQnk6IE1kLFxuICBhdDogbnVsbFxufSwgcGUgPSBmdW5jdGlvbihlLCB0KSB7XG4gIHJldHVybiBmdW5jdGlvbihvKSB7XG4gICAgcmV0dXJuIGUgPD0gbyAmJiBvIDw9IHQ7XG4gIH07XG59LCBBZCA9IGZ1bmN0aW9uKGUpIHtcbiAgdmFyIHQgPSBwZShlLnRvcCwgZS5ib3R0b20pLCBvID0gcGUoZS5sZWZ0LCBlLnJpZ2h0KTtcbiAgcmV0dXJuIGZ1bmN0aW9uKG4pIHtcbiAgICB2YXIgciA9IHQobi50b3ApICYmIHQobi5ib3R0b20pICYmIG8obi5sZWZ0KSAmJiBvKG4ucmlnaHQpO1xuICAgIGlmIChyKVxuICAgICAgcmV0dXJuICEwO1xuICAgIHZhciBpID0gdChuLnRvcCkgfHwgdChuLmJvdHRvbSksIGEgPSBvKG4ubGVmdCkgfHwgbyhuLnJpZ2h0KSwgcyA9IGkgJiYgYTtcbiAgICBpZiAocylcbiAgICAgIHJldHVybiAhMDtcbiAgICB2YXIgbCA9IG4udG9wIDwgZS50b3AgJiYgbi5ib3R0b20gPiBlLmJvdHRvbSwgcCA9IG4ubGVmdCA8IGUubGVmdCAmJiBuLnJpZ2h0ID4gZS5yaWdodCwgZCA9IGwgJiYgcDtcbiAgICBpZiAoZClcbiAgICAgIHJldHVybiAhMDtcbiAgICB2YXIgYiA9IGwgJiYgYSB8fCBwICYmIGk7XG4gICAgcmV0dXJuIGI7XG4gIH07XG59LCBoayA9IGZ1bmN0aW9uKGUpIHtcbiAgdmFyIHQgPSBwZShlLnRvcCwgZS5ib3R0b20pLCBvID0gcGUoZS5sZWZ0LCBlLnJpZ2h0KTtcbiAgcmV0dXJuIGZ1bmN0aW9uKG4pIHtcbiAgICB2YXIgciA9IHQobi50b3ApICYmIHQobi5ib3R0b20pICYmIG8obi5sZWZ0KSAmJiBvKG4ucmlnaHQpO1xuICAgIHJldHVybiByO1xuICB9O1xufSwgTDYgPSB7XG4gIGRpcmVjdGlvbjogXCJ2ZXJ0aWNhbFwiLFxuICBsaW5lOiBcInlcIixcbiAgY3Jvc3NBeGlzTGluZTogXCJ4XCIsXG4gIHN0YXJ0OiBcInRvcFwiLFxuICBlbmQ6IFwiYm90dG9tXCIsXG4gIHNpemU6IFwiaGVpZ2h0XCIsXG4gIGNyb3NzQXhpc1N0YXJ0OiBcImxlZnRcIixcbiAgY3Jvc3NBeGlzRW5kOiBcInJpZ2h0XCIsXG4gIGNyb3NzQXhpc1NpemU6IFwid2lkdGhcIlxufSwgdWQgPSB7XG4gIGRpcmVjdGlvbjogXCJob3Jpem9udGFsXCIsXG4gIGxpbmU6IFwieFwiLFxuICBjcm9zc0F4aXNMaW5lOiBcInlcIixcbiAgc3RhcnQ6IFwibGVmdFwiLFxuICBlbmQ6IFwicmlnaHRcIixcbiAgc2l6ZTogXCJ3aWR0aFwiLFxuICBjcm9zc0F4aXNTdGFydDogXCJ0b3BcIixcbiAgY3Jvc3NBeGlzRW5kOiBcImJvdHRvbVwiLFxuICBjcm9zc0F4aXNTaXplOiBcImhlaWdodFwiXG59LCBPayA9IGZ1bmN0aW9uKGUpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uKHQpIHtcbiAgICB2YXIgbyA9IHBlKHQudG9wLCB0LmJvdHRvbSksIG4gPSBwZSh0LmxlZnQsIHQucmlnaHQpO1xuICAgIHJldHVybiBmdW5jdGlvbihyKSB7XG4gICAgICByZXR1cm4gZSA9PT0gTDYgPyBvKHIudG9wKSAmJiBvKHIuYm90dG9tKSA6IG4oci5sZWZ0KSAmJiBuKHIucmlnaHQpO1xuICAgIH07XG4gIH07XG59LCBmayA9IGZ1bmN0aW9uKHQsIG8pIHtcbiAgdmFyIG4gPSBvLmZyYW1lID8gby5mcmFtZS5zY3JvbGwuZGlmZi5kaXNwbGFjZW1lbnQgOiB1MjtcbiAgcmV0dXJuIERyKHQsIG4pO1xufSwgZ2sgPSBmdW5jdGlvbih0LCBvLCBuKSB7XG4gIHJldHVybiBvLnN1YmplY3QuYWN0aXZlID8gbihvLnN1YmplY3QuYWN0aXZlKSh0KSA6ICExO1xufSwgQ2sgPSBmdW5jdGlvbih0LCBvLCBuKSB7XG4gIHJldHVybiBuKG8pKHQpO1xufSwgdjYgPSBmdW5jdGlvbih0KSB7XG4gIHZhciBvID0gdC50YXJnZXQsIG4gPSB0LmRlc3RpbmF0aW9uLCByID0gdC52aWV3cG9ydCwgaSA9IHQud2l0aERyb3BwYWJsZURpc3BsYWNlbWVudCwgYSA9IHQuaXNWaXNpYmxlVGhyb3VnaEZyYW1lRm4sIHMgPSBpID8gZmsobywgbikgOiBvO1xuICByZXR1cm4gZ2socywgbiwgYSkgJiYgQ2socywgciwgYSk7XG59LCBtayA9IGZ1bmN0aW9uKHQpIHtcbiAgcmV0dXJuIHY2KGEwKHt9LCB0LCB7XG4gICAgaXNWaXNpYmxlVGhyb3VnaEZyYW1lRm46IEFkXG4gIH0pKTtcbn0sIHpkID0gZnVuY3Rpb24odCkge1xuICByZXR1cm4gdjYoYTAoe30sIHQsIHtcbiAgICBpc1Zpc2libGVUaHJvdWdoRnJhbWVGbjogaGtcbiAgfSkpO1xufSwgTGsgPSBmdW5jdGlvbih0KSB7XG4gIHJldHVybiB2NihhMCh7fSwgdCwge1xuICAgIGlzVmlzaWJsZVRocm91Z2hGcmFtZUZuOiBPayh0LmRlc3RpbmF0aW9uLmF4aXMpXG4gIH0pKTtcbn0sIHZrID0gZnVuY3Rpb24odCwgbywgbikge1xuICBpZiAodHlwZW9mIG4gPT0gXCJib29sZWFuXCIpXG4gICAgcmV0dXJuIG47XG4gIGlmICghbylcbiAgICByZXR1cm4gITA7XG4gIHZhciByID0gby5pbnZpc2libGUsIGkgPSBvLnZpc2libGU7XG4gIGlmIChyW3RdKVxuICAgIHJldHVybiAhMTtcbiAgdmFyIGEgPSBpW3RdO1xuICByZXR1cm4gYSA/IGEuc2hvdWxkQW5pbWF0ZSA6ICEwO1xufTtcbmZ1bmN0aW9uIHFrKGUsIHQpIHtcbiAgdmFyIG8gPSBlLnBhZ2UubWFyZ2luQm94LCBuID0ge1xuICAgIHRvcDogdC5wb2ludC55LFxuICAgIHJpZ2h0OiAwLFxuICAgIGJvdHRvbTogMCxcbiAgICBsZWZ0OiB0LnBvaW50LnhcbiAgfTtcbiAgcmV0dXJuIENlKE82KG8sIG4pKTtcbn1cbmZ1bmN0aW9uIG1yKGUpIHtcbiAgdmFyIHQgPSBlLmFmdGVyRHJhZ2dpbmcsIG8gPSBlLmRlc3RpbmF0aW9uLCBuID0gZS5kaXNwbGFjZWRCeSwgciA9IGUudmlld3BvcnQsIGkgPSBlLmZvcmNlU2hvdWxkQW5pbWF0ZSwgYSA9IGUubGFzdDtcbiAgcmV0dXJuIHQucmVkdWNlKGZ1bmN0aW9uKGwsIHApIHtcbiAgICB2YXIgZCA9IHFrKHAsIG4pLCBiID0gcC5kZXNjcmlwdG9yLmlkO1xuICAgIGwuYWxsLnB1c2goYik7XG4gICAgdmFyIE0gPSBtayh7XG4gICAgICB0YXJnZXQ6IGQsXG4gICAgICBkZXN0aW5hdGlvbjogbyxcbiAgICAgIHZpZXdwb3J0OiByLFxuICAgICAgd2l0aERyb3BwYWJsZURpc3BsYWNlbWVudDogITBcbiAgICB9KTtcbiAgICBpZiAoIU0pXG4gICAgICByZXR1cm4gbC5pbnZpc2libGVbcC5kZXNjcmlwdG9yLmlkXSA9ICEwLCBsO1xuICAgIHZhciB1ID0gdmsoYiwgYSwgaSksIEEgPSB7XG4gICAgICBkcmFnZ2FibGVJZDogYixcbiAgICAgIHNob3VsZEFuaW1hdGU6IHVcbiAgICB9O1xuICAgIHJldHVybiBsLnZpc2libGVbYl0gPSBBLCBsO1xuICB9LCB7XG4gICAgYWxsOiBbXSxcbiAgICB2aXNpYmxlOiB7fSxcbiAgICBpbnZpc2libGU6IHt9XG4gIH0pO1xufVxuZnVuY3Rpb24geWsoZSwgdCkge1xuICBpZiAoIWUubGVuZ3RoKVxuICAgIHJldHVybiAwO1xuICB2YXIgbyA9IGVbZS5sZW5ndGggLSAxXS5kZXNjcmlwdG9yLmluZGV4O1xuICByZXR1cm4gdC5pbkhvbWVMaXN0ID8gbyA6IG8gKyAxO1xufVxuZnVuY3Rpb24gazkoZSkge1xuICB2YXIgdCA9IGUuaW5zaWRlRGVzdGluYXRpb24sIG8gPSBlLmluSG9tZUxpc3QsIG4gPSBlLmRpc3BsYWNlZEJ5LCByID0gZS5kZXN0aW5hdGlvbiwgaSA9IHlrKHQsIHtcbiAgICBpbkhvbWVMaXN0OiBvXG4gIH0pO1xuICByZXR1cm4ge1xuICAgIGRpc3BsYWNlZDogQ3IsXG4gICAgZGlzcGxhY2VkQnk6IG4sXG4gICAgYXQ6IHtcbiAgICAgIHR5cGU6IFwiUkVPUkRFUlwiLFxuICAgICAgZGVzdGluYXRpb246IHtcbiAgICAgICAgZHJvcHBhYmxlSWQ6IHIuZGVzY3JpcHRvci5pZCxcbiAgICAgICAgaW5kZXg6IGlcbiAgICAgIH1cbiAgICB9XG4gIH07XG59XG5mdW5jdGlvbiB4NChlKSB7XG4gIHZhciB0ID0gZS5kcmFnZ2FibGUsIG8gPSBlLmluc2lkZURlc3RpbmF0aW9uLCBuID0gZS5kZXN0aW5hdGlvbiwgciA9IGUudmlld3BvcnQsIGkgPSBlLmRpc3BsYWNlZEJ5LCBhID0gZS5sYXN0LCBzID0gZS5pbmRleCwgbCA9IGUuZm9yY2VTaG91bGRBbmltYXRlLCBwID0gcG8odCwgbik7XG4gIGlmIChzID09IG51bGwpXG4gICAgcmV0dXJuIGs5KHtcbiAgICAgIGluc2lkZURlc3RpbmF0aW9uOiBvLFxuICAgICAgaW5Ib21lTGlzdDogcCxcbiAgICAgIGRpc3BsYWNlZEJ5OiBpLFxuICAgICAgZGVzdGluYXRpb246IG5cbiAgICB9KTtcbiAgdmFyIGQgPSBVdChvLCBmdW5jdGlvbih6KSB7XG4gICAgcmV0dXJuIHouZGVzY3JpcHRvci5pbmRleCA9PT0gcztcbiAgfSk7XG4gIGlmICghZClcbiAgICByZXR1cm4gazkoe1xuICAgICAgaW5zaWRlRGVzdGluYXRpb246IG8sXG4gICAgICBpbkhvbWVMaXN0OiBwLFxuICAgICAgZGlzcGxhY2VkQnk6IGksXG4gICAgICBkZXN0aW5hdGlvbjogblxuICAgIH0pO1xuICB2YXIgYiA9IF80KHQsIG8pLCBNID0gby5pbmRleE9mKGQpLCB1ID0gYi5zbGljZShNKSwgQSA9IG1yKHtcbiAgICBhZnRlckRyYWdnaW5nOiB1LFxuICAgIGRlc3RpbmF0aW9uOiBuLFxuICAgIGRpc3BsYWNlZEJ5OiBpLFxuICAgIGxhc3Q6IGEsXG4gICAgdmlld3BvcnQ6IHIuZnJhbWUsXG4gICAgZm9yY2VTaG91bGRBbmltYXRlOiBsXG4gIH0pO1xuICByZXR1cm4ge1xuICAgIGRpc3BsYWNlZDogQSxcbiAgICBkaXNwbGFjZWRCeTogaSxcbiAgICBhdDoge1xuICAgICAgdHlwZTogXCJSRU9SREVSXCIsXG4gICAgICBkZXN0aW5hdGlvbjoge1xuICAgICAgICBkcm9wcGFibGVJZDogbi5kZXNjcmlwdG9yLmlkLFxuICAgICAgICBpbmRleDogc1xuICAgICAgfVxuICAgIH1cbiAgfTtcbn1cbmZ1bmN0aW9uIEh0KGUsIHQpIHtcbiAgcmV0dXJuICEhdC5lZmZlY3RlZFtlXTtcbn1cbnZhciB3ayA9IGZ1bmN0aW9uKGUpIHtcbiAgdmFyIHQgPSBlLmlzTW92aW5nRm9yd2FyZCwgbyA9IGUuZGVzdGluYXRpb24sIG4gPSBlLmRyYWdnYWJsZXMsIHIgPSBlLmNvbWJpbmUsIGkgPSBlLmFmdGVyQ3JpdGljYWw7XG4gIGlmICghby5pc0NvbWJpbmVFbmFibGVkKVxuICAgIHJldHVybiBudWxsO1xuICB2YXIgYSA9IHIuZHJhZ2dhYmxlSWQsIHMgPSBuW2FdLCBsID0gcy5kZXNjcmlwdG9yLmluZGV4LCBwID0gSHQoYSwgaSk7XG4gIHJldHVybiBwID8gdCA/IGwgOiBsIC0gMSA6IHQgPyBsICsgMSA6IGw7XG59LCB4ayA9IGZ1bmN0aW9uKGUpIHtcbiAgdmFyIHQgPSBlLmlzTW92aW5nRm9yd2FyZCwgbyA9IGUuaXNJbkhvbWVMaXN0LCBuID0gZS5pbnNpZGVEZXN0aW5hdGlvbiwgciA9IGUubG9jYXRpb247XG4gIGlmICghbi5sZW5ndGgpXG4gICAgcmV0dXJuIG51bGw7XG4gIHZhciBpID0gci5pbmRleCwgYSA9IHQgPyBpICsgMSA6IGkgLSAxLCBzID0gblswXS5kZXNjcmlwdG9yLmluZGV4LCBsID0gbltuLmxlbmd0aCAtIDFdLmRlc2NyaXB0b3IuaW5kZXgsIHAgPSBvID8gbCA6IGwgKyAxO1xuICByZXR1cm4gYSA8IHMgfHwgYSA+IHAgPyBudWxsIDogYTtcbn0sIFdrID0gZnVuY3Rpb24oZSkge1xuICB2YXIgdCA9IGUuaXNNb3ZpbmdGb3J3YXJkLCBvID0gZS5pc0luSG9tZUxpc3QsIG4gPSBlLmRyYWdnYWJsZSwgciA9IGUuZHJhZ2dhYmxlcywgaSA9IGUuZGVzdGluYXRpb24sIGEgPSBlLmluc2lkZURlc3RpbmF0aW9uLCBzID0gZS5wcmV2aW91c0ltcGFjdCwgbCA9IGUudmlld3BvcnQsIHAgPSBlLmFmdGVyQ3JpdGljYWwsIGQgPSBzLmF0O1xuICBpZiAoZCB8fCAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiID8geTEoITEsIFwiQ2Fubm90IG1vdmUgaW4gZGlyZWN0aW9uIHdpdGhvdXQgcHJldmlvdXMgaW1wYWN0IGxvY2F0aW9uXCIpIDogeTEoITEpKSwgZC50eXBlID09PSBcIlJFT1JERVJcIikge1xuICAgIHZhciBiID0geGsoe1xuICAgICAgaXNNb3ZpbmdGb3J3YXJkOiB0LFxuICAgICAgaXNJbkhvbWVMaXN0OiBvLFxuICAgICAgbG9jYXRpb246IGQuZGVzdGluYXRpb24sXG4gICAgICBpbnNpZGVEZXN0aW5hdGlvbjogYVxuICAgIH0pO1xuICAgIHJldHVybiBiID09IG51bGwgPyBudWxsIDogeDQoe1xuICAgICAgZHJhZ2dhYmxlOiBuLFxuICAgICAgaW5zaWRlRGVzdGluYXRpb246IGEsXG4gICAgICBkZXN0aW5hdGlvbjogaSxcbiAgICAgIHZpZXdwb3J0OiBsLFxuICAgICAgbGFzdDogcy5kaXNwbGFjZWQsXG4gICAgICBkaXNwbGFjZWRCeTogcy5kaXNwbGFjZWRCeSxcbiAgICAgIGluZGV4OiBiXG4gICAgfSk7XG4gIH1cbiAgdmFyIE0gPSB3ayh7XG4gICAgaXNNb3ZpbmdGb3J3YXJkOiB0LFxuICAgIGRlc3RpbmF0aW9uOiBpLFxuICAgIGRpc3BsYWNlZDogcy5kaXNwbGFjZWQsXG4gICAgZHJhZ2dhYmxlczogcixcbiAgICBjb21iaW5lOiBkLmNvbWJpbmUsXG4gICAgYWZ0ZXJDcml0aWNhbDogcFxuICB9KTtcbiAgcmV0dXJuIE0gPT0gbnVsbCA/IG51bGwgOiB4NCh7XG4gICAgZHJhZ2dhYmxlOiBuLFxuICAgIGluc2lkZURlc3RpbmF0aW9uOiBhLFxuICAgIGRlc3RpbmF0aW9uOiBpLFxuICAgIHZpZXdwb3J0OiBsLFxuICAgIGxhc3Q6IHMuZGlzcGxhY2VkLFxuICAgIGRpc3BsYWNlZEJ5OiBzLmRpc3BsYWNlZEJ5LFxuICAgIGluZGV4OiBNXG4gIH0pO1xufSwgUmsgPSBmdW5jdGlvbihlKSB7XG4gIHZhciB0ID0gZS5kaXNwbGFjZWQsIG8gPSBlLmFmdGVyQ3JpdGljYWwsIG4gPSBlLmNvbWJpbmVXaXRoLCByID0gZS5kaXNwbGFjZWRCeSwgaSA9ICEhKHQudmlzaWJsZVtuXSB8fCB0LmludmlzaWJsZVtuXSk7XG4gIHJldHVybiBIdChuLCBvKSA/IGkgPyB1MiA6IGxvKHIucG9pbnQpIDogaSA/IHIucG9pbnQgOiB1Mjtcbn0sIEJrID0gZnVuY3Rpb24oZSkge1xuICB2YXIgdCA9IGUuYWZ0ZXJDcml0aWNhbCwgbyA9IGUuaW1wYWN0LCBuID0gZS5kcmFnZ2FibGVzLCByID0gSjQobyk7XG4gIHIgfHwgKHByb2Nlc3MuZW52Lk5PREVfRU5WLCB5MSghMSkpO1xuICB2YXIgaSA9IHIuZHJhZ2dhYmxlSWQsIGEgPSBuW2ldLnBhZ2UuYm9yZGVyQm94LmNlbnRlciwgcyA9IFJrKHtcbiAgICBkaXNwbGFjZWQ6IG8uZGlzcGxhY2VkLFxuICAgIGFmdGVyQ3JpdGljYWw6IHQsXG4gICAgY29tYmluZVdpdGg6IGksXG4gICAgZGlzcGxhY2VkQnk6IG8uZGlzcGxhY2VkQnlcbiAgfSk7XG4gIHJldHVybiBDMihhLCBzKTtcbn0sIGhkID0gZnVuY3Rpb24odCwgbykge1xuICByZXR1cm4gby5tYXJnaW5bdC5zdGFydF0gKyBvLmJvcmRlckJveFt0LnNpemVdIC8gMjtcbn0sIFNrID0gZnVuY3Rpb24odCwgbykge1xuICByZXR1cm4gby5tYXJnaW5bdC5lbmRdICsgby5ib3JkZXJCb3hbdC5zaXplXSAvIDI7XG59LCBxNiA9IGZ1bmN0aW9uKHQsIG8sIG4pIHtcbiAgcmV0dXJuIG9bdC5jcm9zc0F4aXNTdGFydF0gKyBuLm1hcmdpblt0LmNyb3NzQXhpc1N0YXJ0XSArIG4uYm9yZGVyQm94W3QuY3Jvc3NBeGlzU2l6ZV0gLyAyO1xufSwgTjkgPSBmdW5jdGlvbih0KSB7XG4gIHZhciBvID0gdC5heGlzLCBuID0gdC5tb3ZlUmVsYXRpdmVUbywgciA9IHQuaXNNb3Zpbmc7XG4gIHJldHVybiB6MyhvLmxpbmUsIG4ubWFyZ2luQm94W28uZW5kXSArIGhkKG8sIHIpLCBxNihvLCBuLm1hcmdpbkJveCwgcikpO1xufSwgVDkgPSBmdW5jdGlvbih0KSB7XG4gIHZhciBvID0gdC5heGlzLCBuID0gdC5tb3ZlUmVsYXRpdmVUbywgciA9IHQuaXNNb3Zpbmc7XG4gIHJldHVybiB6MyhvLmxpbmUsIG4ubWFyZ2luQm94W28uc3RhcnRdIC0gU2sobywgciksIHE2KG8sIG4ubWFyZ2luQm94LCByKSk7XG59LCBFayA9IGZ1bmN0aW9uKHQpIHtcbiAgdmFyIG8gPSB0LmF4aXMsIG4gPSB0Lm1vdmVJbnRvLCByID0gdC5pc01vdmluZztcbiAgcmV0dXJuIHozKG8ubGluZSwgbi5jb250ZW50Qm94W28uc3RhcnRdICsgaGQobywgciksIHE2KG8sIG4uY29udGVudEJveCwgcikpO1xufSwga2sgPSBmdW5jdGlvbihlKSB7XG4gIHZhciB0ID0gZS5pbXBhY3QsIG8gPSBlLmRyYWdnYWJsZSwgbiA9IGUuZHJhZ2dhYmxlcywgciA9IGUuZHJvcHBhYmxlLCBpID0gZS5hZnRlckNyaXRpY2FsLCBhID0gaDMoci5kZXNjcmlwdG9yLmlkLCBuKSwgcyA9IG8ucGFnZSwgbCA9IHIuYXhpcztcbiAgaWYgKCFhLmxlbmd0aClcbiAgICByZXR1cm4gRWsoe1xuICAgICAgYXhpczogbCxcbiAgICAgIG1vdmVJbnRvOiByLnBhZ2UsXG4gICAgICBpc01vdmluZzogc1xuICAgIH0pO1xuICB2YXIgcCA9IHQuZGlzcGxhY2VkLCBkID0gdC5kaXNwbGFjZWRCeSwgYiA9IHAuYWxsWzBdO1xuICBpZiAoYikge1xuICAgIHZhciBNID0gbltiXTtcbiAgICBpZiAoSHQoYiwgaSkpXG4gICAgICByZXR1cm4gVDkoe1xuICAgICAgICBheGlzOiBsLFxuICAgICAgICBtb3ZlUmVsYXRpdmVUbzogTS5wYWdlLFxuICAgICAgICBpc01vdmluZzogc1xuICAgICAgfSk7XG4gICAgdmFyIHUgPSB2NChNLnBhZ2UsIGQucG9pbnQpO1xuICAgIHJldHVybiBUOSh7XG4gICAgICBheGlzOiBsLFxuICAgICAgbW92ZVJlbGF0aXZlVG86IHUsXG4gICAgICBpc01vdmluZzogc1xuICAgIH0pO1xuICB9XG4gIHZhciBBID0gYVthLmxlbmd0aCAtIDFdO1xuICBpZiAoQS5kZXNjcmlwdG9yLmlkID09PSBvLmRlc2NyaXB0b3IuaWQpXG4gICAgcmV0dXJuIHMuYm9yZGVyQm94LmNlbnRlcjtcbiAgaWYgKEh0KEEuZGVzY3JpcHRvci5pZCwgaSkpIHtcbiAgICB2YXIgeiA9IHY0KEEucGFnZSwgbG8oaS5kaXNwbGFjZWRCeS5wb2ludCkpO1xuICAgIHJldHVybiBOOSh7XG4gICAgICBheGlzOiBsLFxuICAgICAgbW92ZVJlbGF0aXZlVG86IHosXG4gICAgICBpc01vdmluZzogc1xuICAgIH0pO1xuICB9XG4gIHJldHVybiBOOSh7XG4gICAgYXhpczogbCxcbiAgICBtb3ZlUmVsYXRpdmVUbzogQS5wYWdlLFxuICAgIGlzTW92aW5nOiBzXG4gIH0pO1xufSwgcDUgPSBmdW5jdGlvbihlLCB0KSB7XG4gIHZhciBvID0gZS5mcmFtZTtcbiAgcmV0dXJuIG8gPyBDMih0LCBvLnNjcm9sbC5kaWZmLmRpc3BsYWNlbWVudCkgOiB0O1xufSwgTmsgPSBmdW5jdGlvbih0KSB7XG4gIHZhciBvID0gdC5pbXBhY3QsIG4gPSB0LmRyYWdnYWJsZSwgciA9IHQuZHJvcHBhYmxlLCBpID0gdC5kcmFnZ2FibGVzLCBhID0gdC5hZnRlckNyaXRpY2FsLCBzID0gbi5wYWdlLmJvcmRlckJveC5jZW50ZXIsIGwgPSBvLmF0O1xuICByZXR1cm4gIXIgfHwgIWwgPyBzIDogbC50eXBlID09PSBcIlJFT1JERVJcIiA/IGtrKHtcbiAgICBpbXBhY3Q6IG8sXG4gICAgZHJhZ2dhYmxlOiBuLFxuICAgIGRyYWdnYWJsZXM6IGksXG4gICAgZHJvcHBhYmxlOiByLFxuICAgIGFmdGVyQ3JpdGljYWw6IGFcbiAgfSkgOiBCayh7XG4gICAgaW1wYWN0OiBvLFxuICAgIGRyYWdnYWJsZXM6IGksXG4gICAgYWZ0ZXJDcml0aWNhbDogYVxuICB9KTtcbn0sICQ0ID0gZnVuY3Rpb24oZSkge1xuICB2YXIgdCA9IE5rKGUpLCBvID0gZS5kcm9wcGFibGUsIG4gPSBvID8gcDUobywgdCkgOiB0O1xuICByZXR1cm4gbjtcbn0sIE9kID0gZnVuY3Rpb24oZSwgdCkge1xuICB2YXIgbyA9IF8yKHQsIGUuc2Nyb2xsLmluaXRpYWwpLCBuID0gbG8obyksIHIgPSBDZSh7XG4gICAgdG9wOiB0LnksXG4gICAgYm90dG9tOiB0LnkgKyBlLmZyYW1lLmhlaWdodCxcbiAgICBsZWZ0OiB0LngsXG4gICAgcmlnaHQ6IHQueCArIGUuZnJhbWUud2lkdGhcbiAgfSksIGkgPSB7XG4gICAgZnJhbWU6IHIsXG4gICAgc2Nyb2xsOiB7XG4gICAgICBpbml0aWFsOiBlLnNjcm9sbC5pbml0aWFsLFxuICAgICAgbWF4OiBlLnNjcm9sbC5tYXgsXG4gICAgICBjdXJyZW50OiB0LFxuICAgICAgZGlmZjoge1xuICAgICAgICB2YWx1ZTogbyxcbiAgICAgICAgZGlzcGxhY2VtZW50OiBuXG4gICAgICB9XG4gICAgfVxuICB9O1xuICByZXR1cm4gaTtcbn07XG5mdW5jdGlvbiBJOShlLCB0KSB7XG4gIHJldHVybiBlLm1hcChmdW5jdGlvbihvKSB7XG4gICAgcmV0dXJuIHRbb107XG4gIH0pO1xufVxuZnVuY3Rpb24gVGsoZSwgdCkge1xuICBmb3IgKHZhciBvID0gMDsgbyA8IHQubGVuZ3RoOyBvKyspIHtcbiAgICB2YXIgbiA9IHRbb10udmlzaWJsZVtlXTtcbiAgICBpZiAobilcbiAgICAgIHJldHVybiBuO1xuICB9XG4gIHJldHVybiBudWxsO1xufVxudmFyIElrID0gZnVuY3Rpb24oZSkge1xuICB2YXIgdCA9IGUuaW1wYWN0LCBvID0gZS52aWV3cG9ydCwgbiA9IGUuZGVzdGluYXRpb24sIHIgPSBlLmRyYWdnYWJsZXMsIGkgPSBlLm1heFNjcm9sbENoYW5nZSwgYSA9IE9kKG8sIEMyKG8uc2Nyb2xsLmN1cnJlbnQsIGkpKSwgcyA9IG4uZnJhbWUgPyBnNihuLCBDMihuLmZyYW1lLnNjcm9sbC5jdXJyZW50LCBpKSkgOiBuLCBsID0gdC5kaXNwbGFjZWQsIHAgPSBtcih7XG4gICAgYWZ0ZXJEcmFnZ2luZzogSTkobC5hbGwsIHIpLFxuICAgIGRlc3RpbmF0aW9uOiBuLFxuICAgIGRpc3BsYWNlZEJ5OiB0LmRpc3BsYWNlZEJ5LFxuICAgIHZpZXdwb3J0OiBhLmZyYW1lLFxuICAgIGxhc3Q6IGwsXG4gICAgZm9yY2VTaG91bGRBbmltYXRlOiAhMVxuICB9KSwgZCA9IG1yKHtcbiAgICBhZnRlckRyYWdnaW5nOiBJOShsLmFsbCwgciksXG4gICAgZGVzdGluYXRpb246IHMsXG4gICAgZGlzcGxhY2VkQnk6IHQuZGlzcGxhY2VkQnksXG4gICAgdmlld3BvcnQ6IG8uZnJhbWUsXG4gICAgbGFzdDogbCxcbiAgICBmb3JjZVNob3VsZEFuaW1hdGU6ICExXG4gIH0pLCBiID0ge30sIE0gPSB7fSwgdSA9IFtsLCBwLCBkXTtcbiAgbC5hbGwuZm9yRWFjaChmdW5jdGlvbih6KSB7XG4gICAgdmFyIGYgPSBUayh6LCB1KTtcbiAgICBpZiAoZikge1xuICAgICAgTVt6XSA9IGY7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGJbel0gPSAhMDtcbiAgfSk7XG4gIHZhciBBID0gYTAoe30sIHQsIHtcbiAgICBkaXNwbGFjZWQ6IHtcbiAgICAgIGFsbDogbC5hbGwsXG4gICAgICBpbnZpc2libGU6IGIsXG4gICAgICB2aXNpYmxlOiBNXG4gICAgfVxuICB9KTtcbiAgcmV0dXJuIEE7XG59LCBEayA9IGZ1bmN0aW9uKGUsIHQpIHtcbiAgcmV0dXJuIEMyKGUuc2Nyb2xsLmRpZmYuZGlzcGxhY2VtZW50LCB0KTtcbn0sIHk2ID0gZnVuY3Rpb24oZSkge1xuICB2YXIgdCA9IGUucGFnZUJvcmRlckJveENlbnRlciwgbyA9IGUuZHJhZ2dhYmxlLCBuID0gZS52aWV3cG9ydCwgciA9IERrKG4sIHQpLCBpID0gXzIociwgby5wYWdlLmJvcmRlckJveC5jZW50ZXIpO1xuICByZXR1cm4gQzIoby5jbGllbnQuYm9yZGVyQm94LmNlbnRlciwgaSk7XG59LCBmZCA9IGZ1bmN0aW9uKGUpIHtcbiAgdmFyIHQgPSBlLmRyYWdnYWJsZSwgbyA9IGUuZGVzdGluYXRpb24sIG4gPSBlLm5ld1BhZ2VCb3JkZXJCb3hDZW50ZXIsIHIgPSBlLnZpZXdwb3J0LCBpID0gZS53aXRoRHJvcHBhYmxlRGlzcGxhY2VtZW50LCBhID0gZS5vbmx5T25NYWluQXhpcywgcyA9IGEgPT09IHZvaWQgMCA/ICExIDogYSwgbCA9IF8yKG4sIHQucGFnZS5ib3JkZXJCb3guY2VudGVyKSwgcCA9IERyKHQucGFnZS5ib3JkZXJCb3gsIGwpLCBkID0ge1xuICAgIHRhcmdldDogcCxcbiAgICBkZXN0aW5hdGlvbjogbyxcbiAgICB3aXRoRHJvcHBhYmxlRGlzcGxhY2VtZW50OiBpLFxuICAgIHZpZXdwb3J0OiByXG4gIH07XG4gIHJldHVybiBzID8gTGsoZCkgOiB6ZChkKTtcbn0sIEhrID0gZnVuY3Rpb24oZSkge1xuICB2YXIgdCA9IGUuaXNNb3ZpbmdGb3J3YXJkLCBvID0gZS5kcmFnZ2FibGUsIG4gPSBlLmRlc3RpbmF0aW9uLCByID0gZS5kcmFnZ2FibGVzLCBpID0gZS5wcmV2aW91c0ltcGFjdCwgYSA9IGUudmlld3BvcnQsIHMgPSBlLnByZXZpb3VzUGFnZUJvcmRlckJveENlbnRlciwgbCA9IGUucHJldmlvdXNDbGllbnRTZWxlY3Rpb24sIHAgPSBlLmFmdGVyQ3JpdGljYWw7XG4gIGlmICghbi5pc0VuYWJsZWQpXG4gICAgcmV0dXJuIG51bGw7XG4gIHZhciBkID0gaDMobi5kZXNjcmlwdG9yLmlkLCByKSwgYiA9IHBvKG8sIG4pLCBNID0gdWsoe1xuICAgIGlzTW92aW5nRm9yd2FyZDogdCxcbiAgICBkcmFnZ2FibGU6IG8sXG4gICAgZGVzdGluYXRpb246IG4sXG4gICAgaW5zaWRlRGVzdGluYXRpb246IGQsXG4gICAgcHJldmlvdXNJbXBhY3Q6IGlcbiAgfSkgfHwgV2soe1xuICAgIGlzTW92aW5nRm9yd2FyZDogdCxcbiAgICBpc0luSG9tZUxpc3Q6IGIsXG4gICAgZHJhZ2dhYmxlOiBvLFxuICAgIGRyYWdnYWJsZXM6IHIsXG4gICAgZGVzdGluYXRpb246IG4sXG4gICAgaW5zaWRlRGVzdGluYXRpb246IGQsXG4gICAgcHJldmlvdXNJbXBhY3Q6IGksXG4gICAgdmlld3BvcnQ6IGEsXG4gICAgYWZ0ZXJDcml0aWNhbDogcFxuICB9KTtcbiAgaWYgKCFNKVxuICAgIHJldHVybiBudWxsO1xuICB2YXIgdSA9ICQ0KHtcbiAgICBpbXBhY3Q6IE0sXG4gICAgZHJhZ2dhYmxlOiBvLFxuICAgIGRyb3BwYWJsZTogbixcbiAgICBkcmFnZ2FibGVzOiByLFxuICAgIGFmdGVyQ3JpdGljYWw6IHBcbiAgfSksIEEgPSBmZCh7XG4gICAgZHJhZ2dhYmxlOiBvLFxuICAgIGRlc3RpbmF0aW9uOiBuLFxuICAgIG5ld1BhZ2VCb3JkZXJCb3hDZW50ZXI6IHUsXG4gICAgdmlld3BvcnQ6IGEuZnJhbWUsXG4gICAgd2l0aERyb3BwYWJsZURpc3BsYWNlbWVudDogITEsXG4gICAgb25seU9uTWFpbkF4aXM6ICEwXG4gIH0pO1xuICBpZiAoQSkge1xuICAgIHZhciB6ID0geTYoe1xuICAgICAgcGFnZUJvcmRlckJveENlbnRlcjogdSxcbiAgICAgIGRyYWdnYWJsZTogbyxcbiAgICAgIHZpZXdwb3J0OiBhXG4gICAgfSk7XG4gICAgcmV0dXJuIHtcbiAgICAgIGNsaWVudFNlbGVjdGlvbjogeixcbiAgICAgIGltcGFjdDogTSxcbiAgICAgIHNjcm9sbEp1bXBSZXF1ZXN0OiBudWxsXG4gICAgfTtcbiAgfVxuICB2YXIgZiA9IF8yKHUsIHMpLCBPID0gSWsoe1xuICAgIGltcGFjdDogTSxcbiAgICB2aWV3cG9ydDogYSxcbiAgICBkZXN0aW5hdGlvbjogbixcbiAgICBkcmFnZ2FibGVzOiByLFxuICAgIG1heFNjcm9sbENoYW5nZTogZlxuICB9KTtcbiAgcmV0dXJuIHtcbiAgICBjbGllbnRTZWxlY3Rpb246IGwsXG4gICAgaW1wYWN0OiBPLFxuICAgIHNjcm9sbEp1bXBSZXF1ZXN0OiBmXG4gIH07XG59LCB4MiA9IGZ1bmN0aW9uKHQpIHtcbiAgdmFyIG8gPSB0LnN1YmplY3QuYWN0aXZlO1xuICByZXR1cm4gbyB8fCAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiID8geTEoITEsIFwiQ2Fubm90IGdldCBjbGlwcGVkIGFyZWEgZnJvbSBkcm9wcGFibGVcIikgOiB5MSghMSkpLCBvO1xufSwgVmsgPSBmdW5jdGlvbihlKSB7XG4gIHZhciB0ID0gZS5pc01vdmluZ0ZvcndhcmQsIG8gPSBlLnBhZ2VCb3JkZXJCb3hDZW50ZXIsIG4gPSBlLnNvdXJjZSwgciA9IGUuZHJvcHBhYmxlcywgaSA9IGUudmlld3BvcnQsIGEgPSBuLnN1YmplY3QuYWN0aXZlO1xuICBpZiAoIWEpXG4gICAgcmV0dXJuIG51bGw7XG4gIHZhciBzID0gbi5heGlzLCBsID0gcGUoYVtzLnN0YXJ0XSwgYVtzLmVuZF0pLCBwID0gSzQocikuZmlsdGVyKGZ1bmN0aW9uKGIpIHtcbiAgICByZXR1cm4gYiAhPT0gbjtcbiAgfSkuZmlsdGVyKGZ1bmN0aW9uKGIpIHtcbiAgICByZXR1cm4gYi5pc0VuYWJsZWQ7XG4gIH0pLmZpbHRlcihmdW5jdGlvbihiKSB7XG4gICAgcmV0dXJuICEhYi5zdWJqZWN0LmFjdGl2ZTtcbiAgfSkuZmlsdGVyKGZ1bmN0aW9uKGIpIHtcbiAgICByZXR1cm4gQWQoaS5mcmFtZSkoeDIoYikpO1xuICB9KS5maWx0ZXIoZnVuY3Rpb24oYikge1xuICAgIHZhciBNID0geDIoYik7XG4gICAgcmV0dXJuIHQgPyBhW3MuY3Jvc3NBeGlzRW5kXSA8IE1bcy5jcm9zc0F4aXNFbmRdIDogTVtzLmNyb3NzQXhpc1N0YXJ0XSA8IGFbcy5jcm9zc0F4aXNTdGFydF07XG4gIH0pLmZpbHRlcihmdW5jdGlvbihiKSB7XG4gICAgdmFyIE0gPSB4MihiKSwgdSA9IHBlKE1bcy5zdGFydF0sIE1bcy5lbmRdKTtcbiAgICByZXR1cm4gbChNW3Muc3RhcnRdKSB8fCBsKE1bcy5lbmRdKSB8fCB1KGFbcy5zdGFydF0pIHx8IHUoYVtzLmVuZF0pO1xuICB9KS5zb3J0KGZ1bmN0aW9uKGIsIE0pIHtcbiAgICB2YXIgdSA9IHgyKGIpW3MuY3Jvc3NBeGlzU3RhcnRdLCBBID0geDIoTSlbcy5jcm9zc0F4aXNTdGFydF07XG4gICAgcmV0dXJuIHQgPyB1IC0gQSA6IEEgLSB1O1xuICB9KS5maWx0ZXIoZnVuY3Rpb24oYiwgTSwgdSkge1xuICAgIHJldHVybiB4MihiKVtzLmNyb3NzQXhpc1N0YXJ0XSA9PT0geDIodVswXSlbcy5jcm9zc0F4aXNTdGFydF07XG4gIH0pO1xuICBpZiAoIXAubGVuZ3RoKVxuICAgIHJldHVybiBudWxsO1xuICBpZiAocC5sZW5ndGggPT09IDEpXG4gICAgcmV0dXJuIHBbMF07XG4gIHZhciBkID0gcC5maWx0ZXIoZnVuY3Rpb24oYikge1xuICAgIHZhciBNID0gcGUoeDIoYilbcy5zdGFydF0sIHgyKGIpW3MuZW5kXSk7XG4gICAgcmV0dXJuIE0ob1tzLmxpbmVdKTtcbiAgfSk7XG4gIHJldHVybiBkLmxlbmd0aCA9PT0gMSA/IGRbMF0gOiBkLmxlbmd0aCA+IDEgPyBkLnNvcnQoZnVuY3Rpb24oYiwgTSkge1xuICAgIHJldHVybiB4MihiKVtzLnN0YXJ0XSAtIHgyKE0pW3Muc3RhcnRdO1xuICB9KVswXSA6IHAuc29ydChmdW5jdGlvbihiLCBNKSB7XG4gICAgdmFyIHUgPSBTOShvLCBFOSh4MihiKSkpLCBBID0gUzkobywgRTkoeDIoTSkpKTtcbiAgICByZXR1cm4gdSAhPT0gQSA/IHUgLSBBIDogeDIoYilbcy5zdGFydF0gLSB4MihNKVtzLnN0YXJ0XTtcbiAgfSlbMF07XG59LCBEOSA9IGZ1bmN0aW9uKHQsIG8pIHtcbiAgdmFyIG4gPSB0LnBhZ2UuYm9yZGVyQm94LmNlbnRlcjtcbiAgcmV0dXJuIEh0KHQuZGVzY3JpcHRvci5pZCwgbykgPyBfMihuLCBvLmRpc3BsYWNlZEJ5LnBvaW50KSA6IG47XG59LCBQayA9IGZ1bmN0aW9uKHQsIG8pIHtcbiAgdmFyIG4gPSB0LnBhZ2UuYm9yZGVyQm94O1xuICByZXR1cm4gSHQodC5kZXNjcmlwdG9yLmlkLCBvKSA/IERyKG4sIGxvKG8uZGlzcGxhY2VkQnkucG9pbnQpKSA6IG47XG59LCBGayA9IGZ1bmN0aW9uKGUpIHtcbiAgdmFyIHQgPSBlLnBhZ2VCb3JkZXJCb3hDZW50ZXIsIG8gPSBlLnZpZXdwb3J0LCBuID0gZS5kZXN0aW5hdGlvbiwgciA9IGUuaW5zaWRlRGVzdGluYXRpb24sIGkgPSBlLmFmdGVyQ3JpdGljYWwsIGEgPSByLmZpbHRlcihmdW5jdGlvbihzKSB7XG4gICAgcmV0dXJuIHpkKHtcbiAgICAgIHRhcmdldDogUGsocywgaSksXG4gICAgICBkZXN0aW5hdGlvbjogbixcbiAgICAgIHZpZXdwb3J0OiBvLmZyYW1lLFxuICAgICAgd2l0aERyb3BwYWJsZURpc3BsYWNlbWVudDogITBcbiAgICB9KTtcbiAgfSkuc29ydChmdW5jdGlvbihzLCBsKSB7XG4gICAgdmFyIHAgPSBncih0LCBwNShuLCBEOShzLCBpKSkpLCBkID0gZ3IodCwgcDUobiwgRDkobCwgaSkpKTtcbiAgICByZXR1cm4gcCA8IGQgPyAtMSA6IGQgPCBwID8gMSA6IHMuZGVzY3JpcHRvci5pbmRleCAtIGwuZGVzY3JpcHRvci5pbmRleDtcbiAgfSk7XG4gIHJldHVybiBhWzBdIHx8IG51bGw7XG59LCBIciA9IHAyKGZ1bmN0aW9uKHQsIG8pIHtcbiAgdmFyIG4gPSBvW3QubGluZV07XG4gIHJldHVybiB7XG4gICAgdmFsdWU6IG4sXG4gICAgcG9pbnQ6IHozKHQubGluZSwgbilcbiAgfTtcbn0pLCBYayA9IGZ1bmN0aW9uKHQsIG8sIG4pIHtcbiAgdmFyIHIgPSB0LmF4aXM7XG4gIGlmICh0LmRlc2NyaXB0b3IubW9kZSA9PT0gXCJ2aXJ0dWFsXCIpXG4gICAgcmV0dXJuIHozKHIubGluZSwgb1tyLmxpbmVdKTtcbiAgdmFyIGkgPSB0LnN1YmplY3QucGFnZS5jb250ZW50Qm94W3Iuc2l6ZV0sIGEgPSBoMyh0LmRlc2NyaXB0b3IuaWQsIG4pLCBzID0gYS5yZWR1Y2UoZnVuY3Rpb24oZCwgYikge1xuICAgIHJldHVybiBkICsgYi5jbGllbnQubWFyZ2luQm94W3Iuc2l6ZV07XG4gIH0sIDApLCBsID0gcyArIG9bci5saW5lXSwgcCA9IGwgLSBpO1xuICByZXR1cm4gcCA8PSAwID8gbnVsbCA6IHozKHIubGluZSwgcCk7XG59LCBnZCA9IGZ1bmN0aW9uKHQsIG8pIHtcbiAgcmV0dXJuIGEwKHt9LCB0LCB7XG4gICAgc2Nyb2xsOiBhMCh7fSwgdC5zY3JvbGwsIHtcbiAgICAgIG1heDogb1xuICAgIH0pXG4gIH0pO1xufSwgQ2QgPSBmdW5jdGlvbih0LCBvLCBuKSB7XG4gIHZhciByID0gdC5mcmFtZTtcbiAgcG8obywgdCkgJiYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIiA/IHkxKCExLCBcIlNob3VsZCBub3QgYWRkIHBsYWNlaG9sZGVyIHNwYWNlIHRvIGhvbWUgbGlzdFwiKSA6IHkxKCExKSksIHQuc3ViamVjdC53aXRoUGxhY2Vob2xkZXIgJiYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIiA/IHkxKCExLCBcIkNhbm5vdCBhZGQgcGxhY2Vob2xkZXIgc2l6ZSB0byBhIHN1YmplY3Qgd2hlbiBpdCBhbHJlYWR5IGhhcyBvbmVcIikgOiB5MSghMSkpO1xuICB2YXIgaSA9IEhyKHQuYXhpcywgby5kaXNwbGFjZUJ5KS5wb2ludCwgYSA9IFhrKHQsIGksIG4pLCBzID0ge1xuICAgIHBsYWNlaG9sZGVyU2l6ZTogaSxcbiAgICBpbmNyZWFzZWRCeTogYSxcbiAgICBvbGRGcmFtZU1heFNjcm9sbDogdC5mcmFtZSA/IHQuZnJhbWUuc2Nyb2xsLm1heCA6IG51bGxcbiAgfTtcbiAgaWYgKCFyKSB7XG4gICAgdmFyIGwgPSBlbyh7XG4gICAgICBwYWdlOiB0LnN1YmplY3QucGFnZSxcbiAgICAgIHdpdGhQbGFjZWhvbGRlcjogcyxcbiAgICAgIGF4aXM6IHQuYXhpcyxcbiAgICAgIGZyYW1lOiB0LmZyYW1lXG4gICAgfSk7XG4gICAgcmV0dXJuIGEwKHt9LCB0LCB7XG4gICAgICBzdWJqZWN0OiBsXG4gICAgfSk7XG4gIH1cbiAgdmFyIHAgPSBhID8gQzIoci5zY3JvbGwubWF4LCBhKSA6IHIuc2Nyb2xsLm1heCwgZCA9IGdkKHIsIHApLCBiID0gZW8oe1xuICAgIHBhZ2U6IHQuc3ViamVjdC5wYWdlLFxuICAgIHdpdGhQbGFjZWhvbGRlcjogcyxcbiAgICBheGlzOiB0LmF4aXMsXG4gICAgZnJhbWU6IGRcbiAgfSk7XG4gIHJldHVybiBhMCh7fSwgdCwge1xuICAgIHN1YmplY3Q6IGIsXG4gICAgZnJhbWU6IGRcbiAgfSk7XG59LCBVayA9IGZ1bmN0aW9uKHQpIHtcbiAgdmFyIG8gPSB0LnN1YmplY3Qud2l0aFBsYWNlaG9sZGVyO1xuICBvIHx8IChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIgPyB5MSghMSwgXCJDYW5ub3QgcmVtb3ZlIHBsYWNlaG9sZGVyIGZvcm0gc3ViamVjdCB3aGVuIHRoZXJlIHdhcyBub25lXCIpIDogeTEoITEpKTtcbiAgdmFyIG4gPSB0LmZyYW1lO1xuICBpZiAoIW4pIHtcbiAgICB2YXIgciA9IGVvKHtcbiAgICAgIHBhZ2U6IHQuc3ViamVjdC5wYWdlLFxuICAgICAgYXhpczogdC5heGlzLFxuICAgICAgZnJhbWU6IG51bGwsXG4gICAgICB3aXRoUGxhY2Vob2xkZXI6IG51bGxcbiAgICB9KTtcbiAgICByZXR1cm4gYTAoe30sIHQsIHtcbiAgICAgIHN1YmplY3Q6IHJcbiAgICB9KTtcbiAgfVxuICB2YXIgaSA9IG8ub2xkRnJhbWVNYXhTY3JvbGw7XG4gIGkgfHwgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIiA/IHkxKCExLCBcIkV4cGVjdGVkIGRyb3BwYWJsZSB3aXRoIGZyYW1lIHRvIGhhdmUgb2xkIG1heCBmcmFtZSBzY3JvbGwgd2hlbiByZW1vdmluZyBwbGFjZWhvbGRlclwiKSA6IHkxKCExKSk7XG4gIHZhciBhID0gZ2QobiwgaSksIHMgPSBlbyh7XG4gICAgcGFnZTogdC5zdWJqZWN0LnBhZ2UsXG4gICAgYXhpczogdC5heGlzLFxuICAgIGZyYW1lOiBhLFxuICAgIHdpdGhQbGFjZWhvbGRlcjogbnVsbFxuICB9KTtcbiAgcmV0dXJuIGEwKHt9LCB0LCB7XG4gICAgc3ViamVjdDogcyxcbiAgICBmcmFtZTogYVxuICB9KTtcbn0sIFlrID0gZnVuY3Rpb24oZSkge1xuICB2YXIgdCA9IGUucHJldmlvdXNQYWdlQm9yZGVyQm94Q2VudGVyLCBvID0gZS5tb3ZlUmVsYXRpdmVUbywgbiA9IGUuaW5zaWRlRGVzdGluYXRpb24sIHIgPSBlLmRyYWdnYWJsZSwgaSA9IGUuZHJhZ2dhYmxlcywgYSA9IGUuZGVzdGluYXRpb24sIHMgPSBlLnZpZXdwb3J0LCBsID0gZS5hZnRlckNyaXRpY2FsO1xuICBpZiAoIW8pIHtcbiAgICBpZiAobi5sZW5ndGgpXG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB2YXIgcCA9IHtcbiAgICAgIGRpc3BsYWNlZDogQ3IsXG4gICAgICBkaXNwbGFjZWRCeTogTWQsXG4gICAgICBhdDoge1xuICAgICAgICB0eXBlOiBcIlJFT1JERVJcIixcbiAgICAgICAgZGVzdGluYXRpb246IHtcbiAgICAgICAgICBkcm9wcGFibGVJZDogYS5kZXNjcmlwdG9yLmlkLFxuICAgICAgICAgIGluZGV4OiAwXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9LCBkID0gJDQoe1xuICAgICAgaW1wYWN0OiBwLFxuICAgICAgZHJhZ2dhYmxlOiByLFxuICAgICAgZHJvcHBhYmxlOiBhLFxuICAgICAgZHJhZ2dhYmxlczogaSxcbiAgICAgIGFmdGVyQ3JpdGljYWw6IGxcbiAgICB9KSwgYiA9IHBvKHIsIGEpID8gYSA6IENkKGEsIHIsIGkpLCBNID0gZmQoe1xuICAgICAgZHJhZ2dhYmxlOiByLFxuICAgICAgZGVzdGluYXRpb246IGIsXG4gICAgICBuZXdQYWdlQm9yZGVyQm94Q2VudGVyOiBkLFxuICAgICAgdmlld3BvcnQ6IHMuZnJhbWUsXG4gICAgICB3aXRoRHJvcHBhYmxlRGlzcGxhY2VtZW50OiAhMSxcbiAgICAgIG9ubHlPbk1haW5BeGlzOiAhMFxuICAgIH0pO1xuICAgIHJldHVybiBNID8gcCA6IG51bGw7XG4gIH1cbiAgdmFyIHUgPSB0W2EuYXhpcy5saW5lXSA8PSBvLnBhZ2UuYm9yZGVyQm94LmNlbnRlclthLmF4aXMubGluZV0sIEEgPSBmdW5jdGlvbigpIHtcbiAgICB2YXIgZiA9IG8uZGVzY3JpcHRvci5pbmRleDtcbiAgICByZXR1cm4gby5kZXNjcmlwdG9yLmlkID09PSByLmRlc2NyaXB0b3IuaWQgfHwgdSA/IGYgOiBmICsgMTtcbiAgfSgpLCB6ID0gSHIoYS5heGlzLCByLmRpc3BsYWNlQnkpO1xuICByZXR1cm4geDQoe1xuICAgIGRyYWdnYWJsZTogcixcbiAgICBpbnNpZGVEZXN0aW5hdGlvbjogbixcbiAgICBkZXN0aW5hdGlvbjogYSxcbiAgICB2aWV3cG9ydDogcyxcbiAgICBkaXNwbGFjZWRCeTogeixcbiAgICBsYXN0OiBDcixcbiAgICBpbmRleDogQVxuICB9KTtcbn0sIEdrID0gZnVuY3Rpb24oZSkge1xuICB2YXIgdCA9IGUuaXNNb3ZpbmdGb3J3YXJkLCBvID0gZS5wcmV2aW91c1BhZ2VCb3JkZXJCb3hDZW50ZXIsIG4gPSBlLmRyYWdnYWJsZSwgciA9IGUuaXNPdmVyLCBpID0gZS5kcmFnZ2FibGVzLCBhID0gZS5kcm9wcGFibGVzLCBzID0gZS52aWV3cG9ydCwgbCA9IGUuYWZ0ZXJDcml0aWNhbCwgcCA9IFZrKHtcbiAgICBpc01vdmluZ0ZvcndhcmQ6IHQsXG4gICAgcGFnZUJvcmRlckJveENlbnRlcjogbyxcbiAgICBzb3VyY2U6IHIsXG4gICAgZHJvcHBhYmxlczogYSxcbiAgICB2aWV3cG9ydDogc1xuICB9KTtcbiAgaWYgKCFwKVxuICAgIHJldHVybiBudWxsO1xuICB2YXIgZCA9IGgzKHAuZGVzY3JpcHRvci5pZCwgaSksIGIgPSBGayh7XG4gICAgcGFnZUJvcmRlckJveENlbnRlcjogbyxcbiAgICB2aWV3cG9ydDogcyxcbiAgICBkZXN0aW5hdGlvbjogcCxcbiAgICBpbnNpZGVEZXN0aW5hdGlvbjogZCxcbiAgICBhZnRlckNyaXRpY2FsOiBsXG4gIH0pLCBNID0gWWsoe1xuICAgIHByZXZpb3VzUGFnZUJvcmRlckJveENlbnRlcjogbyxcbiAgICBkZXN0aW5hdGlvbjogcCxcbiAgICBkcmFnZ2FibGU6IG4sXG4gICAgZHJhZ2dhYmxlczogaSxcbiAgICBtb3ZlUmVsYXRpdmVUbzogYixcbiAgICBpbnNpZGVEZXN0aW5hdGlvbjogZCxcbiAgICB2aWV3cG9ydDogcyxcbiAgICBhZnRlckNyaXRpY2FsOiBsXG4gIH0pO1xuICBpZiAoIU0pXG4gICAgcmV0dXJuIG51bGw7XG4gIHZhciB1ID0gJDQoe1xuICAgIGltcGFjdDogTSxcbiAgICBkcmFnZ2FibGU6IG4sXG4gICAgZHJvcHBhYmxlOiBwLFxuICAgIGRyYWdnYWJsZXM6IGksXG4gICAgYWZ0ZXJDcml0aWNhbDogbFxuICB9KSwgQSA9IHk2KHtcbiAgICBwYWdlQm9yZGVyQm94Q2VudGVyOiB1LFxuICAgIGRyYWdnYWJsZTogbixcbiAgICB2aWV3cG9ydDogc1xuICB9KTtcbiAgcmV0dXJuIHtcbiAgICBjbGllbnRTZWxlY3Rpb246IEEsXG4gICAgaW1wYWN0OiBNLFxuICAgIHNjcm9sbEp1bXBSZXF1ZXN0OiBudWxsXG4gIH07XG59LCAkMiA9IGZ1bmN0aW9uKGUpIHtcbiAgdmFyIHQgPSBlLmF0O1xuICByZXR1cm4gdCA/IHQudHlwZSA9PT0gXCJSRU9SREVSXCIgPyB0LmRlc3RpbmF0aW9uLmRyb3BwYWJsZUlkIDogdC5jb21iaW5lLmRyb3BwYWJsZUlkIDogbnVsbDtcbn0sIFFrID0gZnVuY3Rpb24odCwgbykge1xuICB2YXIgbiA9ICQyKHQpO1xuICByZXR1cm4gbiA/IG9bbl0gOiBudWxsO1xufSwgWmsgPSBmdW5jdGlvbihlKSB7XG4gIHZhciB0ID0gZS5zdGF0ZSwgbyA9IGUudHlwZSwgbiA9IFFrKHQuaW1wYWN0LCB0LmRpbWVuc2lvbnMuZHJvcHBhYmxlcyksIHIgPSAhIW4sIGkgPSB0LmRpbWVuc2lvbnMuZHJvcHBhYmxlc1t0LmNyaXRpY2FsLmRyb3BwYWJsZS5pZF0sIGEgPSBuIHx8IGksIHMgPSBhLmF4aXMuZGlyZWN0aW9uLCBsID0gcyA9PT0gXCJ2ZXJ0aWNhbFwiICYmIChvID09PSBcIk1PVkVfVVBcIiB8fCBvID09PSBcIk1PVkVfRE9XTlwiKSB8fCBzID09PSBcImhvcml6b250YWxcIiAmJiAobyA9PT0gXCJNT1ZFX0xFRlRcIiB8fCBvID09PSBcIk1PVkVfUklHSFRcIik7XG4gIGlmIChsICYmICFyKVxuICAgIHJldHVybiBudWxsO1xuICB2YXIgcCA9IG8gPT09IFwiTU9WRV9ET1dOXCIgfHwgbyA9PT0gXCJNT1ZFX1JJR0hUXCIsIGQgPSB0LmRpbWVuc2lvbnMuZHJhZ2dhYmxlc1t0LmNyaXRpY2FsLmRyYWdnYWJsZS5pZF0sIGIgPSB0LmN1cnJlbnQucGFnZS5ib3JkZXJCb3hDZW50ZXIsIE0gPSB0LmRpbWVuc2lvbnMsIHUgPSBNLmRyYWdnYWJsZXMsIEEgPSBNLmRyb3BwYWJsZXM7XG4gIHJldHVybiBsID8gSGsoe1xuICAgIGlzTW92aW5nRm9yd2FyZDogcCxcbiAgICBwcmV2aW91c1BhZ2VCb3JkZXJCb3hDZW50ZXI6IGIsXG4gICAgZHJhZ2dhYmxlOiBkLFxuICAgIGRlc3RpbmF0aW9uOiBhLFxuICAgIGRyYWdnYWJsZXM6IHUsXG4gICAgdmlld3BvcnQ6IHQudmlld3BvcnQsXG4gICAgcHJldmlvdXNDbGllbnRTZWxlY3Rpb246IHQuY3VycmVudC5jbGllbnQuc2VsZWN0aW9uLFxuICAgIHByZXZpb3VzSW1wYWN0OiB0LmltcGFjdCxcbiAgICBhZnRlckNyaXRpY2FsOiB0LmFmdGVyQ3JpdGljYWxcbiAgfSkgOiBHayh7XG4gICAgaXNNb3ZpbmdGb3J3YXJkOiBwLFxuICAgIHByZXZpb3VzUGFnZUJvcmRlckJveENlbnRlcjogYixcbiAgICBkcmFnZ2FibGU6IGQsXG4gICAgaXNPdmVyOiBhLFxuICAgIGRyYWdnYWJsZXM6IHUsXG4gICAgZHJvcHBhYmxlczogQSxcbiAgICB2aWV3cG9ydDogdC52aWV3cG9ydCxcbiAgICBhZnRlckNyaXRpY2FsOiB0LmFmdGVyQ3JpdGljYWxcbiAgfSk7XG59O1xuZnVuY3Rpb24gdDMoZSkge1xuICByZXR1cm4gZS5waGFzZSA9PT0gXCJEUkFHR0lOR1wiIHx8IGUucGhhc2UgPT09IFwiQ09MTEVDVElOR1wiO1xufVxuZnVuY3Rpb24gbWQoZSkge1xuICB2YXIgdCA9IHBlKGUudG9wLCBlLmJvdHRvbSksIG8gPSBwZShlLmxlZnQsIGUucmlnaHQpO1xuICByZXR1cm4gZnVuY3Rpb24ocikge1xuICAgIHJldHVybiB0KHIueSkgJiYgbyhyLngpO1xuICB9O1xufVxuZnVuY3Rpb24gamsoZSwgdCkge1xuICByZXR1cm4gZS5sZWZ0IDwgdC5yaWdodCAmJiBlLnJpZ2h0ID4gdC5sZWZ0ICYmIGUudG9wIDwgdC5ib3R0b20gJiYgZS5ib3R0b20gPiB0LnRvcDtcbn1cbmZ1bmN0aW9uIEtrKGUpIHtcbiAgdmFyIHQgPSBlLnBhZ2VCb3JkZXJCb3gsIG8gPSBlLmRyYWdnYWJsZSwgbiA9IGUuY2FuZGlkYXRlcywgciA9IG8ucGFnZS5ib3JkZXJCb3guY2VudGVyLCBpID0gbi5tYXAoZnVuY3Rpb24oYSkge1xuICAgIHZhciBzID0gYS5heGlzLCBsID0gejMoYS5heGlzLmxpbmUsIHQuY2VudGVyW3MubGluZV0sIGEucGFnZS5ib3JkZXJCb3guY2VudGVyW3MuY3Jvc3NBeGlzTGluZV0pO1xuICAgIHJldHVybiB7XG4gICAgICBpZDogYS5kZXNjcmlwdG9yLmlkLFxuICAgICAgZGlzdGFuY2U6IGdyKHIsIGwpXG4gICAgfTtcbiAgfSkuc29ydChmdW5jdGlvbihhLCBzKSB7XG4gICAgcmV0dXJuIHMuZGlzdGFuY2UgLSBhLmRpc3RhbmNlO1xuICB9KTtcbiAgcmV0dXJuIGlbMF0gPyBpWzBdLmlkIDogbnVsbDtcbn1cbmZ1bmN0aW9uIEprKGUpIHtcbiAgdmFyIHQgPSBlLnBhZ2VCb3JkZXJCb3gsIG8gPSBlLmRyYWdnYWJsZSwgbiA9IGUuZHJvcHBhYmxlcywgciA9IEs0KG4pLmZpbHRlcihmdW5jdGlvbihpKSB7XG4gICAgaWYgKCFpLmlzRW5hYmxlZClcbiAgICAgIHJldHVybiAhMTtcbiAgICB2YXIgYSA9IGkuc3ViamVjdC5hY3RpdmU7XG4gICAgaWYgKCFhIHx8ICFqayh0LCBhKSlcbiAgICAgIHJldHVybiAhMTtcbiAgICBpZiAobWQoYSkodC5jZW50ZXIpKVxuICAgICAgcmV0dXJuICEwO1xuICAgIHZhciBzID0gaS5heGlzLCBsID0gYS5jZW50ZXJbcy5jcm9zc0F4aXNMaW5lXSwgcCA9IHRbcy5jcm9zc0F4aXNTdGFydF0sIGQgPSB0W3MuY3Jvc3NBeGlzRW5kXSwgYiA9IHBlKGFbcy5jcm9zc0F4aXNTdGFydF0sIGFbcy5jcm9zc0F4aXNFbmRdKSwgTSA9IGIocCksIHUgPSBiKGQpO1xuICAgIHJldHVybiAhTSAmJiAhdSA/ICEwIDogTSA/IHAgPCBsIDogZCA+IGw7XG4gIH0pO1xuICByZXR1cm4gci5sZW5ndGggPyByLmxlbmd0aCA9PT0gMSA/IHJbMF0uZGVzY3JpcHRvci5pZCA6IEtrKHtcbiAgICBwYWdlQm9yZGVyQm94OiB0LFxuICAgIGRyYWdnYWJsZTogbyxcbiAgICBjYW5kaWRhdGVzOiByXG4gIH0pIDogbnVsbDtcbn1cbnZhciBMZCA9IGZ1bmN0aW9uKHQsIG8pIHtcbiAgcmV0dXJuIENlKERyKHQsIG8pKTtcbn0sIF9rID0gZnVuY3Rpb24oZSwgdCkge1xuICB2YXIgbyA9IGUuZnJhbWU7XG4gIHJldHVybiBvID8gTGQodCwgby5zY3JvbGwuZGlmZi52YWx1ZSkgOiB0O1xufTtcbmZ1bmN0aW9uIHZkKGUpIHtcbiAgdmFyIHQgPSBlLmRpc3BsYWNlZCwgbyA9IGUuaWQ7XG4gIHJldHVybiAhISh0LnZpc2libGVbb10gfHwgdC5pbnZpc2libGVbb10pO1xufVxuZnVuY3Rpb24gJGsoZSkge1xuICB2YXIgdCA9IGUuZHJhZ2dhYmxlLCBvID0gZS5jbG9zZXN0LCBuID0gZS5pbkhvbWVMaXN0O1xuICByZXR1cm4gbyA/IG4gJiYgby5kZXNjcmlwdG9yLmluZGV4ID4gdC5kZXNjcmlwdG9yLmluZGV4ID8gby5kZXNjcmlwdG9yLmluZGV4IC0gMSA6IG8uZGVzY3JpcHRvci5pbmRleCA6IG51bGw7XG59XG52YXIgZU4gPSBmdW5jdGlvbihlKSB7XG4gIHZhciB0ID0gZS5wYWdlQm9yZGVyQm94V2l0aERyb3BwYWJsZVNjcm9sbCwgbyA9IGUuZHJhZ2dhYmxlLCBuID0gZS5kZXN0aW5hdGlvbiwgciA9IGUuaW5zaWRlRGVzdGluYXRpb24sIGkgPSBlLmxhc3QsIGEgPSBlLnZpZXdwb3J0LCBzID0gZS5hZnRlckNyaXRpY2FsLCBsID0gbi5heGlzLCBwID0gSHIobi5heGlzLCBvLmRpc3BsYWNlQnkpLCBkID0gcC52YWx1ZSwgYiA9IHRbbC5zdGFydF0sIE0gPSB0W2wuZW5kXSwgdSA9IF80KG8sIHIpLCBBID0gVXQodSwgZnVuY3Rpb24oZikge1xuICAgIHZhciBPID0gZi5kZXNjcmlwdG9yLmlkLCBoID0gZi5wYWdlLmJvcmRlckJveC5jZW50ZXJbbC5saW5lXSwgZyA9IEh0KE8sIHMpLCB2ID0gdmQoe1xuICAgICAgZGlzcGxhY2VkOiBpLFxuICAgICAgaWQ6IE9cbiAgICB9KTtcbiAgICByZXR1cm4gZyA/IHYgPyBNIDw9IGggOiBiIDwgaCAtIGQgOiB2ID8gTSA8PSBoICsgZCA6IGIgPCBoO1xuICB9KSwgeiA9ICRrKHtcbiAgICBkcmFnZ2FibGU6IG8sXG4gICAgY2xvc2VzdDogQSxcbiAgICBpbkhvbWVMaXN0OiBwbyhvLCBuKVxuICB9KTtcbiAgcmV0dXJuIHg0KHtcbiAgICBkcmFnZ2FibGU6IG8sXG4gICAgaW5zaWRlRGVzdGluYXRpb246IHIsXG4gICAgZGVzdGluYXRpb246IG4sXG4gICAgdmlld3BvcnQ6IGEsXG4gICAgbGFzdDogaSxcbiAgICBkaXNwbGFjZWRCeTogcCxcbiAgICBpbmRleDogelxuICB9KTtcbn0sIHROID0gNCwgb04gPSBmdW5jdGlvbihlKSB7XG4gIHZhciB0ID0gZS5kcmFnZ2FibGUsIG8gPSBlLnBhZ2VCb3JkZXJCb3hXaXRoRHJvcHBhYmxlU2Nyb2xsLCBuID0gZS5wcmV2aW91c0ltcGFjdCwgciA9IGUuZGVzdGluYXRpb24sIGkgPSBlLmluc2lkZURlc3RpbmF0aW9uLCBhID0gZS5hZnRlckNyaXRpY2FsO1xuICBpZiAoIXIuaXNDb21iaW5lRW5hYmxlZClcbiAgICByZXR1cm4gbnVsbDtcbiAgdmFyIHMgPSByLmF4aXMsIGwgPSBIcihyLmF4aXMsIHQuZGlzcGxhY2VCeSksIHAgPSBsLnZhbHVlLCBkID0gb1tzLnN0YXJ0XSwgYiA9IG9bcy5lbmRdLCBNID0gXzQodCwgaSksIHUgPSBVdChNLCBmdW5jdGlvbih6KSB7XG4gICAgdmFyIGYgPSB6LmRlc2NyaXB0b3IuaWQsIE8gPSB6LnBhZ2UuYm9yZGVyQm94LCBoID0gT1tzLnNpemVdLCBnID0gaCAvIHROLCB2ID0gSHQoZiwgYSksIEwgPSB2ZCh7XG4gICAgICBkaXNwbGFjZWQ6IG4uZGlzcGxhY2VkLFxuICAgICAgaWQ6IGZcbiAgICB9KTtcbiAgICByZXR1cm4gdiA/IEwgPyBiID4gT1tzLnN0YXJ0XSArIGcgJiYgYiA8IE9bcy5lbmRdIC0gZyA6IGQgPiBPW3Muc3RhcnRdIC0gcCArIGcgJiYgZCA8IE9bcy5lbmRdIC0gcCAtIGcgOiBMID8gYiA+IE9bcy5zdGFydF0gKyBwICsgZyAmJiBiIDwgT1tzLmVuZF0gKyBwIC0gZyA6IGQgPiBPW3Muc3RhcnRdICsgZyAmJiBkIDwgT1tzLmVuZF0gLSBnO1xuICB9KTtcbiAgaWYgKCF1KVxuICAgIHJldHVybiBudWxsO1xuICB2YXIgQSA9IHtcbiAgICBkaXNwbGFjZWRCeTogbCxcbiAgICBkaXNwbGFjZWQ6IG4uZGlzcGxhY2VkLFxuICAgIGF0OiB7XG4gICAgICB0eXBlOiBcIkNPTUJJTkVcIixcbiAgICAgIGNvbWJpbmU6IHtcbiAgICAgICAgZHJhZ2dhYmxlSWQ6IHUuZGVzY3JpcHRvci5pZCxcbiAgICAgICAgZHJvcHBhYmxlSWQ6IHIuZGVzY3JpcHRvci5pZFxuICAgICAgfVxuICAgIH1cbiAgfTtcbiAgcmV0dXJuIEE7XG59LCBxZCA9IGZ1bmN0aW9uKGUpIHtcbiAgdmFyIHQgPSBlLnBhZ2VPZmZzZXQsIG8gPSBlLmRyYWdnYWJsZSwgbiA9IGUuZHJhZ2dhYmxlcywgciA9IGUuZHJvcHBhYmxlcywgaSA9IGUucHJldmlvdXNJbXBhY3QsIGEgPSBlLnZpZXdwb3J0LCBzID0gZS5hZnRlckNyaXRpY2FsLCBsID0gTGQoby5wYWdlLmJvcmRlckJveCwgdCksIHAgPSBKayh7XG4gICAgcGFnZUJvcmRlckJveDogbCxcbiAgICBkcmFnZ2FibGU6IG8sXG4gICAgZHJvcHBhYmxlczogclxuICB9KTtcbiAgaWYgKCFwKVxuICAgIHJldHVybiB6aztcbiAgdmFyIGQgPSByW3BdLCBiID0gaDMoZC5kZXNjcmlwdG9yLmlkLCBuKSwgTSA9IF9rKGQsIGwpO1xuICByZXR1cm4gb04oe1xuICAgIHBhZ2VCb3JkZXJCb3hXaXRoRHJvcHBhYmxlU2Nyb2xsOiBNLFxuICAgIGRyYWdnYWJsZTogbyxcbiAgICBwcmV2aW91c0ltcGFjdDogaSxcbiAgICBkZXN0aW5hdGlvbjogZCxcbiAgICBpbnNpZGVEZXN0aW5hdGlvbjogYixcbiAgICBhZnRlckNyaXRpY2FsOiBzXG4gIH0pIHx8IGVOKHtcbiAgICBwYWdlQm9yZGVyQm94V2l0aERyb3BwYWJsZVNjcm9sbDogTSxcbiAgICBkcmFnZ2FibGU6IG8sXG4gICAgZGVzdGluYXRpb246IGQsXG4gICAgaW5zaWRlRGVzdGluYXRpb246IGIsXG4gICAgbGFzdDogaS5kaXNwbGFjZWQsXG4gICAgdmlld3BvcnQ6IGEsXG4gICAgYWZ0ZXJDcml0aWNhbDogc1xuICB9KTtcbn0sIHc2ID0gZnVuY3Rpb24oZSwgdCkge1xuICB2YXIgbztcbiAgcmV0dXJuIGEwKHt9LCBlLCAobyA9IHt9LCBvW3QuZGVzY3JpcHRvci5pZF0gPSB0LCBvKSk7XG59LCByTiA9IGZ1bmN0aW9uKHQpIHtcbiAgdmFyIG8gPSB0LnByZXZpb3VzSW1wYWN0LCBuID0gdC5pbXBhY3QsIHIgPSB0LmRyb3BwYWJsZXMsIGkgPSAkMihvKSwgYSA9ICQyKG4pO1xuICBpZiAoIWkgfHwgaSA9PT0gYSlcbiAgICByZXR1cm4gcjtcbiAgdmFyIHMgPSByW2ldO1xuICBpZiAoIXMuc3ViamVjdC53aXRoUGxhY2Vob2xkZXIpXG4gICAgcmV0dXJuIHI7XG4gIHZhciBsID0gVWsocyk7XG4gIHJldHVybiB3NihyLCBsKTtcbn0sIG5OID0gZnVuY3Rpb24oZSkge1xuICB2YXIgdCA9IGUuZHJhZ2dhYmxlLCBvID0gZS5kcmFnZ2FibGVzLCBuID0gZS5kcm9wcGFibGVzLCByID0gZS5wcmV2aW91c0ltcGFjdCwgaSA9IGUuaW1wYWN0LCBhID0gck4oe1xuICAgIHByZXZpb3VzSW1wYWN0OiByLFxuICAgIGltcGFjdDogaSxcbiAgICBkcm9wcGFibGVzOiBuXG4gIH0pLCBzID0gJDIoaSk7XG4gIGlmICghcylcbiAgICByZXR1cm4gYTtcbiAgdmFyIGwgPSBuW3NdO1xuICBpZiAocG8odCwgbCkgfHwgbC5zdWJqZWN0LndpdGhQbGFjZWhvbGRlcilcbiAgICByZXR1cm4gYTtcbiAgdmFyIHAgPSBDZChsLCB0LCBvKTtcbiAgcmV0dXJuIHc2KGEsIHApO1xufSwgSm8gPSBmdW5jdGlvbihlKSB7XG4gIHZhciB0ID0gZS5zdGF0ZSwgbyA9IGUuY2xpZW50U2VsZWN0aW9uLCBuID0gZS5kaW1lbnNpb25zLCByID0gZS52aWV3cG9ydCwgaSA9IGUuaW1wYWN0LCBhID0gZS5zY3JvbGxKdW1wUmVxdWVzdCwgcyA9IHIgfHwgdC52aWV3cG9ydCwgbCA9IG4gfHwgdC5kaW1lbnNpb25zLCBwID0gbyB8fCB0LmN1cnJlbnQuY2xpZW50LnNlbGVjdGlvbiwgZCA9IF8yKHAsIHQuaW5pdGlhbC5jbGllbnQuc2VsZWN0aW9uKSwgYiA9IHtcbiAgICBvZmZzZXQ6IGQsXG4gICAgc2VsZWN0aW9uOiBwLFxuICAgIGJvcmRlckJveENlbnRlcjogQzIodC5pbml0aWFsLmNsaWVudC5ib3JkZXJCb3hDZW50ZXIsIGQpXG4gIH0sIE0gPSB7XG4gICAgc2VsZWN0aW9uOiBDMihiLnNlbGVjdGlvbiwgcy5zY3JvbGwuY3VycmVudCksXG4gICAgYm9yZGVyQm94Q2VudGVyOiBDMihiLmJvcmRlckJveENlbnRlciwgcy5zY3JvbGwuY3VycmVudCksXG4gICAgb2Zmc2V0OiBDMihiLm9mZnNldCwgcy5zY3JvbGwuZGlmZi52YWx1ZSlcbiAgfSwgdSA9IHtcbiAgICBjbGllbnQ6IGIsXG4gICAgcGFnZTogTVxuICB9O1xuICBpZiAodC5waGFzZSA9PT0gXCJDT0xMRUNUSU5HXCIpXG4gICAgcmV0dXJuIGEwKHtcbiAgICAgIHBoYXNlOiBcIkNPTExFQ1RJTkdcIlxuICAgIH0sIHQsIHtcbiAgICAgIGRpbWVuc2lvbnM6IGwsXG4gICAgICB2aWV3cG9ydDogcyxcbiAgICAgIGN1cnJlbnQ6IHVcbiAgICB9KTtcbiAgdmFyIEEgPSBsLmRyYWdnYWJsZXNbdC5jcml0aWNhbC5kcmFnZ2FibGUuaWRdLCB6ID0gaSB8fCBxZCh7XG4gICAgcGFnZU9mZnNldDogTS5vZmZzZXQsXG4gICAgZHJhZ2dhYmxlOiBBLFxuICAgIGRyYWdnYWJsZXM6IGwuZHJhZ2dhYmxlcyxcbiAgICBkcm9wcGFibGVzOiBsLmRyb3BwYWJsZXMsXG4gICAgcHJldmlvdXNJbXBhY3Q6IHQuaW1wYWN0LFxuICAgIHZpZXdwb3J0OiBzLFxuICAgIGFmdGVyQ3JpdGljYWw6IHQuYWZ0ZXJDcml0aWNhbFxuICB9KSwgZiA9IG5OKHtcbiAgICBkcmFnZ2FibGU6IEEsXG4gICAgaW1wYWN0OiB6LFxuICAgIHByZXZpb3VzSW1wYWN0OiB0LmltcGFjdCxcbiAgICBkcmFnZ2FibGVzOiBsLmRyYWdnYWJsZXMsXG4gICAgZHJvcHBhYmxlczogbC5kcm9wcGFibGVzXG4gIH0pLCBPID0gYTAoe30sIHQsIHtcbiAgICBjdXJyZW50OiB1LFxuICAgIGRpbWVuc2lvbnM6IHtcbiAgICAgIGRyYWdnYWJsZXM6IGwuZHJhZ2dhYmxlcyxcbiAgICAgIGRyb3BwYWJsZXM6IGZcbiAgICB9LFxuICAgIGltcGFjdDogeixcbiAgICB2aWV3cG9ydDogcyxcbiAgICBzY3JvbGxKdW1wUmVxdWVzdDogYSB8fCBudWxsLFxuICAgIGZvcmNlU2hvdWxkQW5pbWF0ZTogYSA/ICExIDogbnVsbFxuICB9KTtcbiAgcmV0dXJuIE87XG59O1xuZnVuY3Rpb24gaU4oZSwgdCkge1xuICByZXR1cm4gZS5tYXAoZnVuY3Rpb24obykge1xuICAgIHJldHVybiB0W29dO1xuICB9KTtcbn1cbnZhciB5ZCA9IGZ1bmN0aW9uKGUpIHtcbiAgdmFyIHQgPSBlLmltcGFjdCwgbyA9IGUudmlld3BvcnQsIG4gPSBlLmRyYWdnYWJsZXMsIHIgPSBlLmRlc3RpbmF0aW9uLCBpID0gZS5mb3JjZVNob3VsZEFuaW1hdGUsIGEgPSB0LmRpc3BsYWNlZCwgcyA9IGlOKGEuYWxsLCBuKSwgbCA9IG1yKHtcbiAgICBhZnRlckRyYWdnaW5nOiBzLFxuICAgIGRlc3RpbmF0aW9uOiByLFxuICAgIGRpc3BsYWNlZEJ5OiB0LmRpc3BsYWNlZEJ5LFxuICAgIHZpZXdwb3J0OiBvLmZyYW1lLFxuICAgIGZvcmNlU2hvdWxkQW5pbWF0ZTogaSxcbiAgICBsYXN0OiBhXG4gIH0pO1xuICByZXR1cm4gYTAoe30sIHQsIHtcbiAgICBkaXNwbGFjZWQ6IGxcbiAgfSk7XG59LCB3ZCA9IGZ1bmN0aW9uKGUpIHtcbiAgdmFyIHQgPSBlLmltcGFjdCwgbyA9IGUuZHJhZ2dhYmxlLCBuID0gZS5kcm9wcGFibGUsIHIgPSBlLmRyYWdnYWJsZXMsIGkgPSBlLnZpZXdwb3J0LCBhID0gZS5hZnRlckNyaXRpY2FsLCBzID0gJDQoe1xuICAgIGltcGFjdDogdCxcbiAgICBkcmFnZ2FibGU6IG8sXG4gICAgZHJhZ2dhYmxlczogcixcbiAgICBkcm9wcGFibGU6IG4sXG4gICAgYWZ0ZXJDcml0aWNhbDogYVxuICB9KTtcbiAgcmV0dXJuIHk2KHtcbiAgICBwYWdlQm9yZGVyQm94Q2VudGVyOiBzLFxuICAgIGRyYWdnYWJsZTogbyxcbiAgICB2aWV3cG9ydDogaVxuICB9KTtcbn0sIHhkID0gZnVuY3Rpb24oZSkge1xuICB2YXIgdCA9IGUuc3RhdGUsIG8gPSBlLmRpbWVuc2lvbnMsIG4gPSBlLnZpZXdwb3J0O1xuICB0Lm1vdmVtZW50TW9kZSAhPT0gXCJTTkFQXCIgJiYgKHByb2Nlc3MuZW52Lk5PREVfRU5WLCB5MSghMSkpO1xuICB2YXIgciA9IHQuaW1wYWN0LCBpID0gbiB8fCB0LnZpZXdwb3J0LCBhID0gbyB8fCB0LmRpbWVuc2lvbnMsIHMgPSBhLmRyYWdnYWJsZXMsIGwgPSBhLmRyb3BwYWJsZXMsIHAgPSBzW3QuY3JpdGljYWwuZHJhZ2dhYmxlLmlkXSwgZCA9ICQyKHIpO1xuICBkIHx8IChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIgPyB5MSghMSwgXCJNdXN0IGJlIG92ZXIgYSBkZXN0aW5hdGlvbiBpbiBTTkFQIG1vdmVtZW50IG1vZGVcIikgOiB5MSghMSkpO1xuICB2YXIgYiA9IGxbZF0sIE0gPSB5ZCh7XG4gICAgaW1wYWN0OiByLFxuICAgIHZpZXdwb3J0OiBpLFxuICAgIGRlc3RpbmF0aW9uOiBiLFxuICAgIGRyYWdnYWJsZXM6IHNcbiAgfSksIHUgPSB3ZCh7XG4gICAgaW1wYWN0OiBNLFxuICAgIGRyYWdnYWJsZTogcCxcbiAgICBkcm9wcGFibGU6IGIsXG4gICAgZHJhZ2dhYmxlczogcyxcbiAgICB2aWV3cG9ydDogaSxcbiAgICBhZnRlckNyaXRpY2FsOiB0LmFmdGVyQ3JpdGljYWxcbiAgfSk7XG4gIHJldHVybiBKbyh7XG4gICAgaW1wYWN0OiBNLFxuICAgIGNsaWVudFNlbGVjdGlvbjogdSxcbiAgICBzdGF0ZTogdCxcbiAgICBkaW1lbnNpb25zOiBhLFxuICAgIHZpZXdwb3J0OiBpXG4gIH0pO1xufSwgYU4gPSBmdW5jdGlvbihlKSB7XG4gIHJldHVybiB7XG4gICAgaW5kZXg6IGUuaW5kZXgsXG4gICAgZHJvcHBhYmxlSWQ6IGUuZHJvcHBhYmxlSWRcbiAgfTtcbn0sIFdkID0gZnVuY3Rpb24oZSkge1xuICB2YXIgdCA9IGUuZHJhZ2dhYmxlLCBvID0gZS5ob21lLCBuID0gZS5kcmFnZ2FibGVzLCByID0gZS52aWV3cG9ydCwgaSA9IEhyKG8uYXhpcywgdC5kaXNwbGFjZUJ5KSwgYSA9IGgzKG8uZGVzY3JpcHRvci5pZCwgbiksIHMgPSBhLmluZGV4T2YodCk7XG4gIHMgPT09IC0xICYmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIgPyB5MSghMSwgXCJFeHBlY3RlZCBkcmFnZ2FibGUgdG8gYmUgaW5zaWRlIGhvbWUgbGlzdFwiKSA6IHkxKCExKSk7XG4gIHZhciBsID0gYS5zbGljZShzICsgMSksIHAgPSBsLnJlZHVjZShmdW5jdGlvbih1LCBBKSB7XG4gICAgcmV0dXJuIHVbQS5kZXNjcmlwdG9yLmlkXSA9ICEwLCB1O1xuICB9LCB7fSksIGQgPSB7XG4gICAgaW5WaXJ0dWFsTGlzdDogby5kZXNjcmlwdG9yLm1vZGUgPT09IFwidmlydHVhbFwiLFxuICAgIGRpc3BsYWNlZEJ5OiBpLFxuICAgIGVmZmVjdGVkOiBwXG4gIH0sIGIgPSBtcih7XG4gICAgYWZ0ZXJEcmFnZ2luZzogbCxcbiAgICBkZXN0aW5hdGlvbjogbyxcbiAgICBkaXNwbGFjZWRCeTogaSxcbiAgICBsYXN0OiBudWxsLFxuICAgIHZpZXdwb3J0OiByLmZyYW1lLFxuICAgIGZvcmNlU2hvdWxkQW5pbWF0ZTogITFcbiAgfSksIE0gPSB7XG4gICAgZGlzcGxhY2VkOiBiLFxuICAgIGRpc3BsYWNlZEJ5OiBpLFxuICAgIGF0OiB7XG4gICAgICB0eXBlOiBcIlJFT1JERVJcIixcbiAgICAgIGRlc3RpbmF0aW9uOiBhTih0LmRlc2NyaXB0b3IpXG4gICAgfVxuICB9O1xuICByZXR1cm4ge1xuICAgIGltcGFjdDogTSxcbiAgICBhZnRlckNyaXRpY2FsOiBkXG4gIH07XG59LCBzTiA9IGZ1bmN0aW9uKGUsIHQpIHtcbiAgcmV0dXJuIHtcbiAgICBkcmFnZ2FibGVzOiBlLmRyYWdnYWJsZXMsXG4gICAgZHJvcHBhYmxlczogdzYoZS5kcm9wcGFibGVzLCB0KVxuICB9O1xufSwgVnIgPSBmdW5jdGlvbih0KSB7XG4gIHByb2Nlc3MuZW52Lk5PREVfRU5WO1xufSwgUHIgPSBmdW5jdGlvbih0KSB7XG4gIHByb2Nlc3MuZW52Lk5PREVfRU5WO1xufSwgY04gPSBmdW5jdGlvbihlKSB7XG4gIHZhciB0ID0gZS5kcmFnZ2FibGUsIG8gPSBlLm9mZnNldCwgbiA9IGUuaW5pdGlhbFdpbmRvd1Njcm9sbCwgciA9IHY0KHQuY2xpZW50LCBvKSwgaSA9IHE0KHIsIG4pLCBhID0gYTAoe30sIHQsIHtcbiAgICBwbGFjZWhvbGRlcjogYTAoe30sIHQucGxhY2Vob2xkZXIsIHtcbiAgICAgIGNsaWVudDogclxuICAgIH0pLFxuICAgIGNsaWVudDogcixcbiAgICBwYWdlOiBpXG4gIH0pO1xuICByZXR1cm4gYTtcbn0sIGxOID0gZnVuY3Rpb24oZSkge1xuICB2YXIgdCA9IGUuZnJhbWU7XG4gIHJldHVybiB0IHx8IChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIgPyB5MSghMSwgXCJFeHBlY3RlZCBEcm9wcGFibGUgdG8gaGF2ZSBhIGZyYW1lXCIpIDogeTEoITEpKSwgdDtcbn0sIHBOID0gZnVuY3Rpb24oZSkge1xuICB2YXIgdCA9IGUuYWRkaXRpb25zLCBvID0gZS51cGRhdGVkRHJvcHBhYmxlcywgbiA9IGUudmlld3BvcnQsIHIgPSBuLnNjcm9sbC5kaWZmLnZhbHVlO1xuICByZXR1cm4gdC5tYXAoZnVuY3Rpb24oaSkge1xuICAgIHZhciBhID0gaS5kZXNjcmlwdG9yLmRyb3BwYWJsZUlkLCBzID0gb1thXSwgbCA9IGxOKHMpLCBwID0gbC5zY3JvbGwuZGlmZi52YWx1ZSwgZCA9IEMyKHIsIHApLCBiID0gY04oe1xuICAgICAgZHJhZ2dhYmxlOiBpLFxuICAgICAgb2Zmc2V0OiBkLFxuICAgICAgaW5pdGlhbFdpbmRvd1Njcm9sbDogbi5zY3JvbGwuaW5pdGlhbFxuICAgIH0pO1xuICAgIHJldHVybiBiO1xuICB9KTtcbn0sIGROID0gZnVuY3Rpb24oZSkge1xuICB2YXIgdCA9IGUuc3RhdGUsIG8gPSBlLnB1Ymxpc2hlZDtcbiAgVnIoKTtcbiAgdmFyIG4gPSBvLm1vZGlmaWVkLm1hcChmdW5jdGlvbihnKSB7XG4gICAgdmFyIHYgPSB0LmRpbWVuc2lvbnMuZHJvcHBhYmxlc1tnLmRyb3BwYWJsZUlkXSwgTCA9IGc2KHYsIGcuc2Nyb2xsKTtcbiAgICByZXR1cm4gTDtcbiAgfSksIHIgPSBhMCh7fSwgdC5kaW1lbnNpb25zLmRyb3BwYWJsZXMsIHt9LCBkZChuKSksIGkgPSBiZChwTih7XG4gICAgYWRkaXRpb25zOiBvLmFkZGl0aW9ucyxcbiAgICB1cGRhdGVkRHJvcHBhYmxlczogcixcbiAgICB2aWV3cG9ydDogdC52aWV3cG9ydFxuICB9KSksIGEgPSBhMCh7fSwgdC5kaW1lbnNpb25zLmRyYWdnYWJsZXMsIHt9LCBpKTtcbiAgby5yZW1vdmFscy5mb3JFYWNoKGZ1bmN0aW9uKGcpIHtcbiAgICBkZWxldGUgYVtnXTtcbiAgfSk7XG4gIHZhciBzID0ge1xuICAgIGRyb3BwYWJsZXM6IHIsXG4gICAgZHJhZ2dhYmxlczogYVxuICB9LCBsID0gJDIodC5pbXBhY3QpLCBwID0gbCA/IHMuZHJvcHBhYmxlc1tsXSA6IG51bGwsIGQgPSBzLmRyYWdnYWJsZXNbdC5jcml0aWNhbC5kcmFnZ2FibGUuaWRdLCBiID0gcy5kcm9wcGFibGVzW3QuY3JpdGljYWwuZHJvcHBhYmxlLmlkXSwgTSA9IFdkKHtcbiAgICBkcmFnZ2FibGU6IGQsXG4gICAgaG9tZTogYixcbiAgICBkcmFnZ2FibGVzOiBhLFxuICAgIHZpZXdwb3J0OiB0LnZpZXdwb3J0XG4gIH0pLCB1ID0gTS5pbXBhY3QsIEEgPSBNLmFmdGVyQ3JpdGljYWwsIHogPSBwICYmIHAuaXNDb21iaW5lRW5hYmxlZCA/IHQuaW1wYWN0IDogdSwgZiA9IHFkKHtcbiAgICBwYWdlT2Zmc2V0OiB0LmN1cnJlbnQucGFnZS5vZmZzZXQsXG4gICAgZHJhZ2dhYmxlOiBzLmRyYWdnYWJsZXNbdC5jcml0aWNhbC5kcmFnZ2FibGUuaWRdLFxuICAgIGRyYWdnYWJsZXM6IHMuZHJhZ2dhYmxlcyxcbiAgICBkcm9wcGFibGVzOiBzLmRyb3BwYWJsZXMsXG4gICAgcHJldmlvdXNJbXBhY3Q6IHosXG4gICAgdmlld3BvcnQ6IHQudmlld3BvcnQsXG4gICAgYWZ0ZXJDcml0aWNhbDogQVxuICB9KTtcbiAgUHIoKTtcbiAgdmFyIE8gPSBhMCh7XG4gICAgcGhhc2U6IFwiRFJBR0dJTkdcIlxuICB9LCB0LCB7XG4gICAgcGhhc2U6IFwiRFJBR0dJTkdcIixcbiAgICBpbXBhY3Q6IGYsXG4gICAgb25MaWZ0SW1wYWN0OiB1LFxuICAgIGRpbWVuc2lvbnM6IHMsXG4gICAgYWZ0ZXJDcml0aWNhbDogQSxcbiAgICBmb3JjZVNob3VsZEFuaW1hdGU6ICExXG4gIH0pO1xuICBpZiAodC5waGFzZSA9PT0gXCJDT0xMRUNUSU5HXCIpXG4gICAgcmV0dXJuIE87XG4gIHZhciBoID0gYTAoe1xuICAgIHBoYXNlOiBcIkRST1BfUEVORElOR1wiXG4gIH0sIE8sIHtcbiAgICBwaGFzZTogXCJEUk9QX1BFTkRJTkdcIixcbiAgICByZWFzb246IHQucmVhc29uLFxuICAgIGlzV2FpdGluZzogITFcbiAgfSk7XG4gIHJldHVybiBoO1xufSwgZDUgPSBmdW5jdGlvbih0KSB7XG4gIHJldHVybiB0Lm1vdmVtZW50TW9kZSA9PT0gXCJTTkFQXCI7XG59LCBlYSA9IGZ1bmN0aW9uKHQsIG8sIG4pIHtcbiAgdmFyIHIgPSBzTih0LmRpbWVuc2lvbnMsIG8pO1xuICByZXR1cm4gIWQ1KHQpIHx8IG4gPyBKbyh7XG4gICAgc3RhdGU6IHQsXG4gICAgZGltZW5zaW9uczogclxuICB9KSA6IHhkKHtcbiAgICBzdGF0ZTogdCxcbiAgICBkaW1lbnNpb25zOiByXG4gIH0pO1xufTtcbmZ1bmN0aW9uIHRhKGUpIHtcbiAgcmV0dXJuIGUuaXNEcmFnZ2luZyAmJiBlLm1vdmVtZW50TW9kZSA9PT0gXCJTTkFQXCIgPyBhMCh7XG4gICAgcGhhc2U6IFwiRFJBR0dJTkdcIlxuICB9LCBlLCB7XG4gICAgc2Nyb2xsSnVtcFJlcXVlc3Q6IG51bGxcbiAgfSkgOiBlO1xufVxudmFyIEg5ID0ge1xuICBwaGFzZTogXCJJRExFXCIsXG4gIGNvbXBsZXRlZDogbnVsbCxcbiAgc2hvdWxkRmx1c2g6ICExXG59LCBiTiA9IGZ1bmN0aW9uKGUsIHQpIHtcbiAgaWYgKGUgPT09IHZvaWQgMCAmJiAoZSA9IEg5KSwgdC50eXBlID09PSBcIkZMVVNIXCIpXG4gICAgcmV0dXJuIGEwKHt9LCBIOSwge1xuICAgICAgc2hvdWxkRmx1c2g6ICEwXG4gICAgfSk7XG4gIGlmICh0LnR5cGUgPT09IFwiSU5JVElBTF9QVUJMSVNIXCIpIHtcbiAgICBlLnBoYXNlICE9PSBcIklETEVcIiAmJiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiID8geTEoITEsIFwiSU5JVElBTF9QVUJMSVNIIG11c3QgY29tZSBhZnRlciBhIElETEUgcGhhc2VcIikgOiB5MSghMSkpO1xuICAgIHZhciBvID0gdC5wYXlsb2FkLCBuID0gby5jcml0aWNhbCwgciA9IG8uY2xpZW50U2VsZWN0aW9uLCBpID0gby52aWV3cG9ydCwgYSA9IG8uZGltZW5zaW9ucywgcyA9IG8ubW92ZW1lbnRNb2RlLCBsID0gYS5kcmFnZ2FibGVzW24uZHJhZ2dhYmxlLmlkXSwgcCA9IGEuZHJvcHBhYmxlc1tuLmRyb3BwYWJsZS5pZF0sIGQgPSB7XG4gICAgICBzZWxlY3Rpb246IHIsXG4gICAgICBib3JkZXJCb3hDZW50ZXI6IGwuY2xpZW50LmJvcmRlckJveC5jZW50ZXIsXG4gICAgICBvZmZzZXQ6IHUyXG4gICAgfSwgYiA9IHtcbiAgICAgIGNsaWVudDogZCxcbiAgICAgIHBhZ2U6IHtcbiAgICAgICAgc2VsZWN0aW9uOiBDMihkLnNlbGVjdGlvbiwgaS5zY3JvbGwuaW5pdGlhbCksXG4gICAgICAgIGJvcmRlckJveENlbnRlcjogQzIoZC5zZWxlY3Rpb24sIGkuc2Nyb2xsLmluaXRpYWwpLFxuICAgICAgICBvZmZzZXQ6IEMyKGQuc2VsZWN0aW9uLCBpLnNjcm9sbC5kaWZmLnZhbHVlKVxuICAgICAgfVxuICAgIH0sIE0gPSBLNChhLmRyb3BwYWJsZXMpLmV2ZXJ5KGZ1bmN0aW9uKEopIHtcbiAgICAgIHJldHVybiAhSi5pc0ZpeGVkT25QYWdlO1xuICAgIH0pLCB1ID0gV2Qoe1xuICAgICAgZHJhZ2dhYmxlOiBsLFxuICAgICAgaG9tZTogcCxcbiAgICAgIGRyYWdnYWJsZXM6IGEuZHJhZ2dhYmxlcyxcbiAgICAgIHZpZXdwb3J0OiBpXG4gICAgfSksIEEgPSB1LmltcGFjdCwgeiA9IHUuYWZ0ZXJDcml0aWNhbCwgZiA9IHtcbiAgICAgIHBoYXNlOiBcIkRSQUdHSU5HXCIsXG4gICAgICBpc0RyYWdnaW5nOiAhMCxcbiAgICAgIGNyaXRpY2FsOiBuLFxuICAgICAgbW92ZW1lbnRNb2RlOiBzLFxuICAgICAgZGltZW5zaW9uczogYSxcbiAgICAgIGluaXRpYWw6IGIsXG4gICAgICBjdXJyZW50OiBiLFxuICAgICAgaXNXaW5kb3dTY3JvbGxBbGxvd2VkOiBNLFxuICAgICAgaW1wYWN0OiBBLFxuICAgICAgYWZ0ZXJDcml0aWNhbDogeixcbiAgICAgIG9uTGlmdEltcGFjdDogQSxcbiAgICAgIHZpZXdwb3J0OiBpLFxuICAgICAgc2Nyb2xsSnVtcFJlcXVlc3Q6IG51bGwsXG4gICAgICBmb3JjZVNob3VsZEFuaW1hdGU6IG51bGxcbiAgICB9O1xuICAgIHJldHVybiBmO1xuICB9XG4gIGlmICh0LnR5cGUgPT09IFwiQ09MTEVDVElPTl9TVEFSVElOR1wiKSB7XG4gICAgaWYgKGUucGhhc2UgPT09IFwiQ09MTEVDVElOR1wiIHx8IGUucGhhc2UgPT09IFwiRFJPUF9QRU5ESU5HXCIpXG4gICAgICByZXR1cm4gZTtcbiAgICBlLnBoYXNlICE9PSBcIkRSQUdHSU5HXCIgJiYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIiA/IHkxKCExLCBcIkNvbGxlY3Rpb24gY2Fubm90IHN0YXJ0IGZyb20gcGhhc2UgXCIgKyBlLnBoYXNlKSA6IHkxKCExKSk7XG4gICAgdmFyIE8gPSBhMCh7XG4gICAgICBwaGFzZTogXCJDT0xMRUNUSU5HXCJcbiAgICB9LCBlLCB7XG4gICAgICBwaGFzZTogXCJDT0xMRUNUSU5HXCJcbiAgICB9KTtcbiAgICByZXR1cm4gTztcbiAgfVxuICBpZiAodC50eXBlID09PSBcIlBVQkxJU0hfV0hJTEVfRFJBR0dJTkdcIilcbiAgICByZXR1cm4gZS5waGFzZSA9PT0gXCJDT0xMRUNUSU5HXCIgfHwgZS5waGFzZSA9PT0gXCJEUk9QX1BFTkRJTkdcIiB8fCAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiID8geTEoITEsIFwiVW5leHBlY3RlZCBcIiArIHQudHlwZSArIFwiIHJlY2VpdmVkIGluIHBoYXNlIFwiICsgZS5waGFzZSkgOiB5MSghMSkpLCBkTih7XG4gICAgICBzdGF0ZTogZSxcbiAgICAgIHB1Ymxpc2hlZDogdC5wYXlsb2FkXG4gICAgfSk7XG4gIGlmICh0LnR5cGUgPT09IFwiTU9WRVwiKSB7XG4gICAgaWYgKGUucGhhc2UgPT09IFwiRFJPUF9QRU5ESU5HXCIpXG4gICAgICByZXR1cm4gZTtcbiAgICB0MyhlKSB8fCAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiID8geTEoITEsIHQudHlwZSArIFwiIG5vdCBwZXJtaXR0ZWQgaW4gcGhhc2UgXCIgKyBlLnBoYXNlKSA6IHkxKCExKSk7XG4gICAgdmFyIGggPSB0LnBheWxvYWQuY2xpZW50O1xuICAgIHJldHVybiBrdChoLCBlLmN1cnJlbnQuY2xpZW50LnNlbGVjdGlvbikgPyBlIDogSm8oe1xuICAgICAgc3RhdGU6IGUsXG4gICAgICBjbGllbnRTZWxlY3Rpb246IGgsXG4gICAgICBpbXBhY3Q6IGQ1KGUpID8gZS5pbXBhY3QgOiBudWxsXG4gICAgfSk7XG4gIH1cbiAgaWYgKHQudHlwZSA9PT0gXCJVUERBVEVfRFJPUFBBQkxFX1NDUk9MTFwiKSB7XG4gICAgaWYgKGUucGhhc2UgPT09IFwiRFJPUF9QRU5ESU5HXCIgfHwgZS5waGFzZSA9PT0gXCJDT0xMRUNUSU5HXCIpXG4gICAgICByZXR1cm4gdGEoZSk7XG4gICAgdDMoZSkgfHwgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIiA/IHkxKCExLCB0LnR5cGUgKyBcIiBub3QgcGVybWl0dGVkIGluIHBoYXNlIFwiICsgZS5waGFzZSkgOiB5MSghMSkpO1xuICAgIHZhciBnID0gdC5wYXlsb2FkLCB2ID0gZy5pZCwgTCA9IGcubmV3U2Nyb2xsLCB5ID0gZS5kaW1lbnNpb25zLmRyb3BwYWJsZXNbdl07XG4gICAgaWYgKCF5KVxuICAgICAgcmV0dXJuIGU7XG4gICAgdmFyIEIgPSBnNih5LCBMKTtcbiAgICByZXR1cm4gZWEoZSwgQiwgITEpO1xuICB9XG4gIGlmICh0LnR5cGUgPT09IFwiVVBEQVRFX0RST1BQQUJMRV9JU19FTkFCTEVEXCIpIHtcbiAgICBpZiAoZS5waGFzZSA9PT0gXCJEUk9QX1BFTkRJTkdcIilcbiAgICAgIHJldHVybiBlO1xuICAgIHQzKGUpIHx8IChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIgPyB5MSghMSwgXCJBdHRlbXB0aW5nIHRvIG1vdmUgaW4gYW4gdW5zdXBwb3J0ZWQgcGhhc2UgXCIgKyBlLnBoYXNlKSA6IHkxKCExKSk7XG4gICAgdmFyIFggPSB0LnBheWxvYWQsIEYgPSBYLmlkLCBUID0gWC5pc0VuYWJsZWQsIHcgPSBlLmRpbWVuc2lvbnMuZHJvcHBhYmxlc1tGXTtcbiAgICB3IHx8IChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIgPyB5MSghMSwgXCJDYW5ub3QgZmluZCBEcm9wcGFibGVbaWQ6IFwiICsgRiArIFwiXSB0byB0b2dnbGUgaXRzIGVuYWJsZWQgc3RhdGVcIikgOiB5MSghMSkpLCB3LmlzRW5hYmxlZCA9PT0gVCAmJiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiID8geTEoITEsIFwiVHJ5aW5nIHRvIHNldCBkcm9wcGFibGUgaXNFbmFibGVkIHRvIFwiICsgU3RyaW5nKFQpICsgYFxuICAgICAgYnV0IGl0IGlzIGFscmVhZHkgYCArIFN0cmluZyh3LmlzRW5hYmxlZCkpIDogeTEoITEpKTtcbiAgICB2YXIgSCA9IGEwKHt9LCB3LCB7XG4gICAgICBpc0VuYWJsZWQ6IFRcbiAgICB9KTtcbiAgICByZXR1cm4gZWEoZSwgSCwgITApO1xuICB9XG4gIGlmICh0LnR5cGUgPT09IFwiVVBEQVRFX0RST1BQQUJMRV9JU19DT01CSU5FX0VOQUJMRURcIikge1xuICAgIGlmIChlLnBoYXNlID09PSBcIkRST1BfUEVORElOR1wiKVxuICAgICAgcmV0dXJuIGU7XG4gICAgdDMoZSkgfHwgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIiA/IHkxKCExLCBcIkF0dGVtcHRpbmcgdG8gbW92ZSBpbiBhbiB1bnN1cHBvcnRlZCBwaGFzZSBcIiArIGUucGhhc2UpIDogeTEoITEpKTtcbiAgICB2YXIgQyA9IHQucGF5bG9hZCwgcSA9IEMuaWQsIG0gPSBDLmlzQ29tYmluZUVuYWJsZWQsIGsgPSBlLmRpbWVuc2lvbnMuZHJvcHBhYmxlc1txXTtcbiAgICBrIHx8IChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIgPyB5MSghMSwgXCJDYW5ub3QgZmluZCBEcm9wcGFibGVbaWQ6IFwiICsgcSArIFwiXSB0byB0b2dnbGUgaXRzIGlzQ29tYmluZUVuYWJsZWQgc3RhdGVcIikgOiB5MSghMSkpLCBrLmlzQ29tYmluZUVuYWJsZWQgPT09IG0gJiYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIiA/IHkxKCExLCBcIlRyeWluZyB0byBzZXQgZHJvcHBhYmxlIGlzQ29tYmluZUVuYWJsZWQgdG8gXCIgKyBTdHJpbmcobSkgKyBgXG4gICAgICBidXQgaXQgaXMgYWxyZWFkeSBgICsgU3RyaW5nKGsuaXNDb21iaW5lRW5hYmxlZCkpIDogeTEoITEpKTtcbiAgICB2YXIgeCA9IGEwKHt9LCBrLCB7XG4gICAgICBpc0NvbWJpbmVFbmFibGVkOiBtXG4gICAgfSk7XG4gICAgcmV0dXJuIGVhKGUsIHgsICEwKTtcbiAgfVxuICBpZiAodC50eXBlID09PSBcIk1PVkVfQllfV0lORE9XX1NDUk9MTFwiKSB7XG4gICAgaWYgKGUucGhhc2UgPT09IFwiRFJPUF9QRU5ESU5HXCIgfHwgZS5waGFzZSA9PT0gXCJEUk9QX0FOSU1BVElOR1wiKVxuICAgICAgcmV0dXJuIGU7XG4gICAgdDMoZSkgfHwgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIiA/IHkxKCExLCBcIkNhbm5vdCBtb3ZlIGJ5IHdpbmRvdyBpbiBwaGFzZSBcIiArIGUucGhhc2UpIDogeTEoITEpKSwgZS5pc1dpbmRvd1Njcm9sbEFsbG93ZWQgfHwgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIiA/IHkxKCExLCBcIldpbmRvdyBzY3JvbGxpbmcgaXMgY3VycmVudGx5IG5vdCBzdXBwb3J0ZWQgZm9yIGZpeGVkIGxpc3RzXCIpIDogeTEoITEpKTtcbiAgICB2YXIgTiA9IHQucGF5bG9hZC5uZXdTY3JvbGw7XG4gICAgaWYgKGt0KGUudmlld3BvcnQuc2Nyb2xsLmN1cnJlbnQsIE4pKVxuICAgICAgcmV0dXJuIHRhKGUpO1xuICAgIHZhciBWID0gT2QoZS52aWV3cG9ydCwgTik7XG4gICAgcmV0dXJuIGQ1KGUpID8geGQoe1xuICAgICAgc3RhdGU6IGUsXG4gICAgICB2aWV3cG9ydDogVlxuICAgIH0pIDogSm8oe1xuICAgICAgc3RhdGU6IGUsXG4gICAgICB2aWV3cG9ydDogVlxuICAgIH0pO1xuICB9XG4gIGlmICh0LnR5cGUgPT09IFwiVVBEQVRFX1ZJRVdQT1JUX01BWF9TQ1JPTExcIikge1xuICAgIGlmICghdDMoZSkpXG4gICAgICByZXR1cm4gZTtcbiAgICB2YXIgUiA9IHQucGF5bG9hZC5tYXhTY3JvbGw7XG4gICAgaWYgKGt0KFIsIGUudmlld3BvcnQuc2Nyb2xsLm1heCkpXG4gICAgICByZXR1cm4gZTtcbiAgICB2YXIgSSA9IGEwKHt9LCBlLnZpZXdwb3J0LCB7XG4gICAgICBzY3JvbGw6IGEwKHt9LCBlLnZpZXdwb3J0LnNjcm9sbCwge1xuICAgICAgICBtYXg6IFJcbiAgICAgIH0pXG4gICAgfSk7XG4gICAgcmV0dXJuIGEwKHtcbiAgICAgIHBoYXNlOiBcIkRSQUdHSU5HXCJcbiAgICB9LCBlLCB7XG4gICAgICB2aWV3cG9ydDogSVxuICAgIH0pO1xuICB9XG4gIGlmICh0LnR5cGUgPT09IFwiTU9WRV9VUFwiIHx8IHQudHlwZSA9PT0gXCJNT1ZFX0RPV05cIiB8fCB0LnR5cGUgPT09IFwiTU9WRV9MRUZUXCIgfHwgdC50eXBlID09PSBcIk1PVkVfUklHSFRcIikge1xuICAgIGlmIChlLnBoYXNlID09PSBcIkNPTExFQ1RJTkdcIiB8fCBlLnBoYXNlID09PSBcIkRST1BfUEVORElOR1wiKVxuICAgICAgcmV0dXJuIGU7XG4gICAgZS5waGFzZSAhPT0gXCJEUkFHR0lOR1wiICYmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIgPyB5MSghMSwgdC50eXBlICsgXCIgcmVjZWl2ZWQgd2hpbGUgbm90IGluIERSQUdHSU5HIHBoYXNlXCIpIDogeTEoITEpKTtcbiAgICB2YXIgaiA9IFprKHtcbiAgICAgIHN0YXRlOiBlLFxuICAgICAgdHlwZTogdC50eXBlXG4gICAgfSk7XG4gICAgcmV0dXJuIGogPyBKbyh7XG4gICAgICBzdGF0ZTogZSxcbiAgICAgIGltcGFjdDogai5pbXBhY3QsXG4gICAgICBjbGllbnRTZWxlY3Rpb246IGouY2xpZW50U2VsZWN0aW9uLFxuICAgICAgc2Nyb2xsSnVtcFJlcXVlc3Q6IGouc2Nyb2xsSnVtcFJlcXVlc3RcbiAgICB9KSA6IGU7XG4gIH1cbiAgaWYgKHQudHlwZSA9PT0gXCJEUk9QX1BFTkRJTkdcIikge1xuICAgIHZhciBVID0gdC5wYXlsb2FkLnJlYXNvbjtcbiAgICBlLnBoYXNlICE9PSBcIkNPTExFQ1RJTkdcIiAmJiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiID8geTEoITEsIFwiQ2FuIG9ubHkgbW92ZSBpbnRvIHRoZSBEUk9QX1BFTkRJTkcgcGhhc2UgZnJvbSB0aGUgQ09MTEVDVElORyBwaGFzZVwiKSA6IHkxKCExKSk7XG4gICAgdmFyIF8gPSBhMCh7XG4gICAgICBwaGFzZTogXCJEUk9QX1BFTkRJTkdcIlxuICAgIH0sIGUsIHtcbiAgICAgIHBoYXNlOiBcIkRST1BfUEVORElOR1wiLFxuICAgICAgaXNXYWl0aW5nOiAhMCxcbiAgICAgIHJlYXNvbjogVVxuICAgIH0pO1xuICAgIHJldHVybiBfO1xuICB9XG4gIGlmICh0LnR5cGUgPT09IFwiRFJPUF9BTklNQVRFXCIpIHtcbiAgICB2YXIgcjEgPSB0LnBheWxvYWQsIEsgPSByMS5jb21wbGV0ZWQsIFEgPSByMS5kcm9wRHVyYXRpb24sIEUgPSByMS5uZXdIb21lQ2xpZW50T2Zmc2V0O1xuICAgIGUucGhhc2UgPT09IFwiRFJBR0dJTkdcIiB8fCBlLnBoYXNlID09PSBcIkRST1BfUEVORElOR1wiIHx8IChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIgPyB5MSghMSwgXCJDYW5ub3QgYW5pbWF0ZSBkcm9wIGZyb20gcGhhc2UgXCIgKyBlLnBoYXNlKSA6IHkxKCExKSk7XG4gICAgdmFyIEQgPSB7XG4gICAgICBwaGFzZTogXCJEUk9QX0FOSU1BVElOR1wiLFxuICAgICAgY29tcGxldGVkOiBLLFxuICAgICAgZHJvcER1cmF0aW9uOiBRLFxuICAgICAgbmV3SG9tZUNsaWVudE9mZnNldDogRSxcbiAgICAgIGRpbWVuc2lvbnM6IGUuZGltZW5zaW9uc1xuICAgIH07XG4gICAgcmV0dXJuIEQ7XG4gIH1cbiAgaWYgKHQudHlwZSA9PT0gXCJEUk9QX0NPTVBMRVRFXCIpIHtcbiAgICB2YXIgRyA9IHQucGF5bG9hZC5jb21wbGV0ZWQ7XG4gICAgcmV0dXJuIHtcbiAgICAgIHBoYXNlOiBcIklETEVcIixcbiAgICAgIGNvbXBsZXRlZDogRyxcbiAgICAgIHNob3VsZEZsdXNoOiAhMVxuICAgIH07XG4gIH1cbiAgcmV0dXJuIGU7XG59LCBNTiA9IGZ1bmN0aW9uKHQpIHtcbiAgcmV0dXJuIHtcbiAgICB0eXBlOiBcIkJFRk9SRV9JTklUSUFMX0NBUFRVUkVcIixcbiAgICBwYXlsb2FkOiB0XG4gIH07XG59LCBBTiA9IGZ1bmN0aW9uKHQpIHtcbiAgcmV0dXJuIHtcbiAgICB0eXBlOiBcIkxJRlRcIixcbiAgICBwYXlsb2FkOiB0XG4gIH07XG59LCB1TiA9IGZ1bmN0aW9uKHQpIHtcbiAgcmV0dXJuIHtcbiAgICB0eXBlOiBcIklOSVRJQUxfUFVCTElTSFwiLFxuICAgIHBheWxvYWQ6IHRcbiAgfTtcbn0sIHpOID0gZnVuY3Rpb24odCkge1xuICByZXR1cm4ge1xuICAgIHR5cGU6IFwiUFVCTElTSF9XSElMRV9EUkFHR0lOR1wiLFxuICAgIHBheWxvYWQ6IHRcbiAgfTtcbn0sIGhOID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiB7XG4gICAgdHlwZTogXCJDT0xMRUNUSU9OX1NUQVJUSU5HXCIsXG4gICAgcGF5bG9hZDogbnVsbFxuICB9O1xufSwgT04gPSBmdW5jdGlvbih0KSB7XG4gIHJldHVybiB7XG4gICAgdHlwZTogXCJVUERBVEVfRFJPUFBBQkxFX1NDUk9MTFwiLFxuICAgIHBheWxvYWQ6IHRcbiAgfTtcbn0sIGZOID0gZnVuY3Rpb24odCkge1xuICByZXR1cm4ge1xuICAgIHR5cGU6IFwiVVBEQVRFX0RST1BQQUJMRV9JU19FTkFCTEVEXCIsXG4gICAgcGF5bG9hZDogdFxuICB9O1xufSwgZ04gPSBmdW5jdGlvbih0KSB7XG4gIHJldHVybiB7XG4gICAgdHlwZTogXCJVUERBVEVfRFJPUFBBQkxFX0lTX0NPTUJJTkVfRU5BQkxFRFwiLFxuICAgIHBheWxvYWQ6IHRcbiAgfTtcbn0sIFJkID0gZnVuY3Rpb24odCkge1xuICByZXR1cm4ge1xuICAgIHR5cGU6IFwiTU9WRVwiLFxuICAgIHBheWxvYWQ6IHRcbiAgfTtcbn0sIENOID0gZnVuY3Rpb24odCkge1xuICByZXR1cm4ge1xuICAgIHR5cGU6IFwiTU9WRV9CWV9XSU5ET1dfU0NST0xMXCIsXG4gICAgcGF5bG9hZDogdFxuICB9O1xufSwgbU4gPSBmdW5jdGlvbih0KSB7XG4gIHJldHVybiB7XG4gICAgdHlwZTogXCJVUERBVEVfVklFV1BPUlRfTUFYX1NDUk9MTFwiLFxuICAgIHBheWxvYWQ6IHRcbiAgfTtcbn0sIExOID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiB7XG4gICAgdHlwZTogXCJNT1ZFX1VQXCIsXG4gICAgcGF5bG9hZDogbnVsbFxuICB9O1xufSwgdk4gPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIHtcbiAgICB0eXBlOiBcIk1PVkVfRE9XTlwiLFxuICAgIHBheWxvYWQ6IG51bGxcbiAgfTtcbn0sIHFOID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiB7XG4gICAgdHlwZTogXCJNT1ZFX1JJR0hUXCIsXG4gICAgcGF5bG9hZDogbnVsbFxuICB9O1xufSwgeU4gPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIHtcbiAgICB0eXBlOiBcIk1PVkVfTEVGVFwiLFxuICAgIHBheWxvYWQ6IG51bGxcbiAgfTtcbn0sIHg2ID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiB7XG4gICAgdHlwZTogXCJGTFVTSFwiLFxuICAgIHBheWxvYWQ6IG51bGxcbiAgfTtcbn0sIHdOID0gZnVuY3Rpb24odCkge1xuICByZXR1cm4ge1xuICAgIHR5cGU6IFwiRFJPUF9BTklNQVRFXCIsXG4gICAgcGF5bG9hZDogdFxuICB9O1xufSwgVzYgPSBmdW5jdGlvbih0KSB7XG4gIHJldHVybiB7XG4gICAgdHlwZTogXCJEUk9QX0NPTVBMRVRFXCIsXG4gICAgcGF5bG9hZDogdFxuICB9O1xufSwgQmQgPSBmdW5jdGlvbih0KSB7XG4gIHJldHVybiB7XG4gICAgdHlwZTogXCJEUk9QXCIsXG4gICAgcGF5bG9hZDogdFxuICB9O1xufSwgeE4gPSBmdW5jdGlvbih0KSB7XG4gIHJldHVybiB7XG4gICAgdHlwZTogXCJEUk9QX1BFTkRJTkdcIixcbiAgICBwYXlsb2FkOiB0XG4gIH07XG59LCBTZCA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4ge1xuICAgIHR5cGU6IFwiRFJPUF9BTklNQVRJT05fRklOSVNIRURcIixcbiAgICBwYXlsb2FkOiBudWxsXG4gIH07XG59O1xuZnVuY3Rpb24gV04oZSkge1xuICBpZiAoIShlLmxlbmd0aCA8PSAxKSkge1xuICAgIGZvciAodmFyIHQgPSBlLm1hcChmdW5jdGlvbihzKSB7XG4gICAgICByZXR1cm4gcy5kZXNjcmlwdG9yLmluZGV4O1xuICAgIH0pLCBvID0ge30sIG4gPSAxOyBuIDwgdC5sZW5ndGg7IG4rKykge1xuICAgICAgdmFyIHIgPSB0W25dLCBpID0gdFtuIC0gMV07XG4gICAgICByICE9PSBpICsgMSAmJiAob1tyXSA9ICEwKTtcbiAgICB9XG4gICAgaWYgKE9iamVjdC5rZXlzKG8pLmxlbmd0aCkge1xuICAgICAgdmFyIGEgPSB0Lm1hcChmdW5jdGlvbihzKSB7XG4gICAgICAgIHZhciBsID0gISFvW3NdO1xuICAgICAgICByZXR1cm4gbCA/IFwiW/CflKVcIiArIHMgKyBcIl1cIiA6IFwiXCIgKyBzO1xuICAgICAgfSkuam9pbihcIiwgXCIpO1xuICAgICAgcHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiICYmIFowKGBcbiAgICBEZXRlY3RlZCBub24tY29uc2VjdXRpdmUgPERyYWdnYWJsZSAvPiBpbmRleGVzLlxuXG4gICAgKFRoaXMgY2FuIGNhdXNlIHVuZXhwZWN0ZWQgYnVncylcblxuICAgIGAgKyBhICsgYFxuICBgKTtcbiAgICB9XG4gIH1cbn1cbmZ1bmN0aW9uIFJOKGUsIHQpIHtcbiAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIikge1xuICAgIHZhciBvID0gaDMoZS5kcm9wcGFibGUuaWQsIHQuZHJhZ2dhYmxlcyk7XG4gICAgV04obyk7XG4gIH1cbn1cbnZhciBCTiA9IGZ1bmN0aW9uKGUpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uKHQpIHtcbiAgICB2YXIgbyA9IHQuZ2V0U3RhdGUsIG4gPSB0LmRpc3BhdGNoO1xuICAgIHJldHVybiBmdW5jdGlvbihyKSB7XG4gICAgICByZXR1cm4gZnVuY3Rpb24oaSkge1xuICAgICAgICBpZiAoaS50eXBlICE9PSBcIkxJRlRcIikge1xuICAgICAgICAgIHIoaSk7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHZhciBhID0gaS5wYXlsb2FkLCBzID0gYS5pZCwgbCA9IGEuY2xpZW50U2VsZWN0aW9uLCBwID0gYS5tb3ZlbWVudE1vZGUsIGQgPSBvKCk7XG4gICAgICAgIGQucGhhc2UgPT09IFwiRFJPUF9BTklNQVRJTkdcIiAmJiBuKFc2KHtcbiAgICAgICAgICBjb21wbGV0ZWQ6IGQuY29tcGxldGVkXG4gICAgICAgIH0pKSwgbygpLnBoYXNlICE9PSBcIklETEVcIiAmJiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiID8geTEoITEsIFwiVW5leHBlY3RlZCBwaGFzZSB0byBzdGFydCBhIGRyYWdcIikgOiB5MSghMSkpLCBuKHg2KCkpLCBuKE1OKHtcbiAgICAgICAgICBkcmFnZ2FibGVJZDogcyxcbiAgICAgICAgICBtb3ZlbWVudE1vZGU6IHBcbiAgICAgICAgfSkpO1xuICAgICAgICB2YXIgYiA9IHtcbiAgICAgICAgICBzaG91bGRQdWJsaXNoSW1tZWRpYXRlbHk6IHAgPT09IFwiU05BUFwiXG4gICAgICAgIH0sIE0gPSB7XG4gICAgICAgICAgZHJhZ2dhYmxlSWQ6IHMsXG4gICAgICAgICAgc2Nyb2xsT3B0aW9uczogYlxuICAgICAgICB9LCB1ID0gZS5zdGFydFB1Ymxpc2hpbmcoTSksIEEgPSB1LmNyaXRpY2FsLCB6ID0gdS5kaW1lbnNpb25zLCBmID0gdS52aWV3cG9ydDtcbiAgICAgICAgUk4oQSwgeiksIG4odU4oe1xuICAgICAgICAgIGNyaXRpY2FsOiBBLFxuICAgICAgICAgIGRpbWVuc2lvbnM6IHosXG4gICAgICAgICAgY2xpZW50U2VsZWN0aW9uOiBsLFxuICAgICAgICAgIG1vdmVtZW50TW9kZTogcCxcbiAgICAgICAgICB2aWV3cG9ydDogZlxuICAgICAgICB9KSk7XG4gICAgICB9O1xuICAgIH07XG4gIH07XG59LCBTTiA9IGZ1bmN0aW9uKGUpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiBmdW5jdGlvbih0KSB7XG4gICAgICByZXR1cm4gZnVuY3Rpb24obykge1xuICAgICAgICBvLnR5cGUgPT09IFwiSU5JVElBTF9QVUJMSVNIXCIgJiYgZS5kcmFnZ2luZygpLCBvLnR5cGUgPT09IFwiRFJPUF9BTklNQVRFXCIgJiYgZS5kcm9wcGluZyhvLnBheWxvYWQuY29tcGxldGVkLnJlc3VsdC5yZWFzb24pLCAoby50eXBlID09PSBcIkZMVVNIXCIgfHwgby50eXBlID09PSBcIkRST1BfQ09NUExFVEVcIikgJiYgZS5yZXN0aW5nKCksIHQobyk7XG4gICAgICB9O1xuICAgIH07XG4gIH07XG59LCBSNiA9IHtcbiAgb3V0T2ZUaGVXYXk6IFwiY3ViaWMtYmV6aWVyKDAuMiwgMCwgMCwgMSlcIixcbiAgZHJvcDogXCJjdWJpYy1iZXppZXIoLjIsMSwuMSwxKVwiXG59LCBMciA9IHtcbiAgb3BhY2l0eToge1xuICAgIGRyb3A6IDAsXG4gICAgY29tYmluaW5nOiAwLjdcbiAgfSxcbiAgc2NhbGU6IHtcbiAgICBkcm9wOiAwLjc1XG4gIH1cbn0sIEI2ID0ge1xuICBvdXRPZlRoZVdheTogMC4yLFxuICBtaW5Ecm9wVGltZTogMC4zMyxcbiAgbWF4RHJvcFRpbWU6IDAuNTVcbn0sIGp0ID0gQjYub3V0T2ZUaGVXYXkgKyBcInMgXCIgKyBSNi5vdXRPZlRoZVdheSwgX28gPSB7XG4gIGZsdWlkOiBcIm9wYWNpdHkgXCIgKyBqdCxcbiAgc25hcDogXCJ0cmFuc2Zvcm0gXCIgKyBqdCArIFwiLCBvcGFjaXR5IFwiICsganQsXG4gIGRyb3A6IGZ1bmN0aW9uKHQpIHtcbiAgICB2YXIgbyA9IHQgKyBcInMgXCIgKyBSNi5kcm9wO1xuICAgIHJldHVybiBcInRyYW5zZm9ybSBcIiArIG8gKyBcIiwgb3BhY2l0eSBcIiArIG87XG4gIH0sXG4gIG91dE9mVGhlV2F5OiBcInRyYW5zZm9ybSBcIiArIGp0LFxuICBwbGFjZWhvbGRlcjogXCJoZWlnaHQgXCIgKyBqdCArIFwiLCB3aWR0aCBcIiArIGp0ICsgXCIsIG1hcmdpbiBcIiArIGp0XG59LCBWOSA9IGZ1bmN0aW9uKHQpIHtcbiAgcmV0dXJuIGt0KHQsIHUyKSA/IG51bGwgOiBcInRyYW5zbGF0ZShcIiArIHQueCArIFwicHgsIFwiICsgdC55ICsgXCJweClcIjtcbn0sIGI1ID0ge1xuICBtb3ZlVG86IFY5LFxuICBkcm9wOiBmdW5jdGlvbih0LCBvKSB7XG4gICAgdmFyIG4gPSBWOSh0KTtcbiAgICByZXR1cm4gbiA/IG8gPyBuICsgXCIgc2NhbGUoXCIgKyBMci5zY2FsZS5kcm9wICsgXCIpXCIgOiBuIDogbnVsbDtcbiAgfVxufSwgTTUgPSBCNi5taW5Ecm9wVGltZSwgRWQgPSBCNi5tYXhEcm9wVGltZSwgRU4gPSBFZCAtIE01LCBQOSA9IDE1MDAsIGtOID0gMC42LCBOTiA9IGZ1bmN0aW9uKGUpIHtcbiAgdmFyIHQgPSBlLmN1cnJlbnQsIG8gPSBlLmRlc3RpbmF0aW9uLCBuID0gZS5yZWFzb24sIHIgPSBncih0LCBvKTtcbiAgaWYgKHIgPD0gMClcbiAgICByZXR1cm4gTTU7XG4gIGlmIChyID49IFA5KVxuICAgIHJldHVybiBFZDtcbiAgdmFyIGkgPSByIC8gUDksIGEgPSBNNSArIEVOICogaSwgcyA9IG4gPT09IFwiQ0FOQ0VMXCIgPyBhICoga04gOiBhO1xuICByZXR1cm4gTnVtYmVyKHMudG9GaXhlZCgyKSk7XG59LCBUTiA9IGZ1bmN0aW9uKGUpIHtcbiAgdmFyIHQgPSBlLmltcGFjdCwgbyA9IGUuZHJhZ2dhYmxlLCBuID0gZS5kaW1lbnNpb25zLCByID0gZS52aWV3cG9ydCwgaSA9IGUuYWZ0ZXJDcml0aWNhbCwgYSA9IG4uZHJhZ2dhYmxlcywgcyA9IG4uZHJvcHBhYmxlcywgbCA9ICQyKHQpLCBwID0gbCA/IHNbbF0gOiBudWxsLCBkID0gc1tvLmRlc2NyaXB0b3IuZHJvcHBhYmxlSWRdLCBiID0gd2Qoe1xuICAgIGltcGFjdDogdCxcbiAgICBkcmFnZ2FibGU6IG8sXG4gICAgZHJhZ2dhYmxlczogYSxcbiAgICBhZnRlckNyaXRpY2FsOiBpLFxuICAgIGRyb3BwYWJsZTogcCB8fCBkLFxuICAgIHZpZXdwb3J0OiByXG4gIH0pLCBNID0gXzIoYiwgby5jbGllbnQuYm9yZGVyQm94LmNlbnRlcik7XG4gIHJldHVybiBNO1xufSwgSU4gPSBmdW5jdGlvbihlKSB7XG4gIHZhciB0ID0gZS5kcmFnZ2FibGVzLCBvID0gZS5yZWFzb24sIG4gPSBlLmxhc3RJbXBhY3QsIHIgPSBlLmhvbWUsIGkgPSBlLnZpZXdwb3J0LCBhID0gZS5vbkxpZnRJbXBhY3Q7XG4gIGlmICghbi5hdCB8fCBvICE9PSBcIkRST1BcIikge1xuICAgIHZhciBzID0geWQoe1xuICAgICAgZHJhZ2dhYmxlczogdCxcbiAgICAgIGltcGFjdDogYSxcbiAgICAgIGRlc3RpbmF0aW9uOiByLFxuICAgICAgdmlld3BvcnQ6IGksXG4gICAgICBmb3JjZVNob3VsZEFuaW1hdGU6ICEwXG4gICAgfSk7XG4gICAgcmV0dXJuIHtcbiAgICAgIGltcGFjdDogcyxcbiAgICAgIGRpZERyb3BJbnNpZGVEcm9wcGFibGU6ICExXG4gICAgfTtcbiAgfVxuICBpZiAobi5hdC50eXBlID09PSBcIlJFT1JERVJcIilcbiAgICByZXR1cm4ge1xuICAgICAgaW1wYWN0OiBuLFxuICAgICAgZGlkRHJvcEluc2lkZURyb3BwYWJsZTogITBcbiAgICB9O1xuICB2YXIgbCA9IGEwKHt9LCBuLCB7XG4gICAgZGlzcGxhY2VkOiBDclxuICB9KTtcbiAgcmV0dXJuIHtcbiAgICBpbXBhY3Q6IGwsXG4gICAgZGlkRHJvcEluc2lkZURyb3BwYWJsZTogITBcbiAgfTtcbn0sIEROID0gZnVuY3Rpb24oZSkge1xuICB2YXIgdCA9IGUuZ2V0U3RhdGUsIG8gPSBlLmRpc3BhdGNoO1xuICByZXR1cm4gZnVuY3Rpb24obikge1xuICAgIHJldHVybiBmdW5jdGlvbihyKSB7XG4gICAgICBpZiAoci50eXBlICE9PSBcIkRST1BcIikge1xuICAgICAgICBuKHIpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICB2YXIgaSA9IHQoKSwgYSA9IHIucGF5bG9hZC5yZWFzb247XG4gICAgICBpZiAoaS5waGFzZSA9PT0gXCJDT0xMRUNUSU5HXCIpIHtcbiAgICAgICAgbyh4Tih7XG4gICAgICAgICAgcmVhc29uOiBhXG4gICAgICAgIH0pKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgaWYgKGkucGhhc2UgIT09IFwiSURMRVwiKSB7XG4gICAgICAgIHZhciBzID0gaS5waGFzZSA9PT0gXCJEUk9QX1BFTkRJTkdcIiAmJiBpLmlzV2FpdGluZztcbiAgICAgICAgcyAmJiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiID8geTEoITEsIFwiQSBEUk9QIGFjdGlvbiBvY2N1cnJlZCB3aGlsZSBEUk9QX1BFTkRJTkcgYW5kIHN0aWxsIHdhaXRpbmdcIikgOiB5MSghMSkpLCBpLnBoYXNlID09PSBcIkRSQUdHSU5HXCIgfHwgaS5waGFzZSA9PT0gXCJEUk9QX1BFTkRJTkdcIiB8fCAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiID8geTEoITEsIFwiQ2Fubm90IGRyb3AgaW4gcGhhc2U6IFwiICsgaS5waGFzZSkgOiB5MSghMSkpO1xuICAgICAgICB2YXIgbCA9IGkuY3JpdGljYWwsIHAgPSBpLmRpbWVuc2lvbnMsIGQgPSBwLmRyYWdnYWJsZXNbaS5jcml0aWNhbC5kcmFnZ2FibGUuaWRdLCBiID0gSU4oe1xuICAgICAgICAgIHJlYXNvbjogYSxcbiAgICAgICAgICBsYXN0SW1wYWN0OiBpLmltcGFjdCxcbiAgICAgICAgICBhZnRlckNyaXRpY2FsOiBpLmFmdGVyQ3JpdGljYWwsXG4gICAgICAgICAgb25MaWZ0SW1wYWN0OiBpLm9uTGlmdEltcGFjdCxcbiAgICAgICAgICBob21lOiBpLmRpbWVuc2lvbnMuZHJvcHBhYmxlc1tpLmNyaXRpY2FsLmRyb3BwYWJsZS5pZF0sXG4gICAgICAgICAgdmlld3BvcnQ6IGkudmlld3BvcnQsXG4gICAgICAgICAgZHJhZ2dhYmxlczogaS5kaW1lbnNpb25zLmRyYWdnYWJsZXNcbiAgICAgICAgfSksIE0gPSBiLmltcGFjdCwgdSA9IGIuZGlkRHJvcEluc2lkZURyb3BwYWJsZSwgQSA9IHUgPyBtNihNKSA6IG51bGwsIHogPSB1ID8gSjQoTSkgOiBudWxsLCBmID0ge1xuICAgICAgICAgIGluZGV4OiBsLmRyYWdnYWJsZS5pbmRleCxcbiAgICAgICAgICBkcm9wcGFibGVJZDogbC5kcm9wcGFibGUuaWRcbiAgICAgICAgfSwgTyA9IHtcbiAgICAgICAgICBkcmFnZ2FibGVJZDogZC5kZXNjcmlwdG9yLmlkLFxuICAgICAgICAgIHR5cGU6IGQuZGVzY3JpcHRvci50eXBlLFxuICAgICAgICAgIHNvdXJjZTogZixcbiAgICAgICAgICByZWFzb246IGEsXG4gICAgICAgICAgbW9kZTogaS5tb3ZlbWVudE1vZGUsXG4gICAgICAgICAgZGVzdGluYXRpb246IEEsXG4gICAgICAgICAgY29tYmluZTogelxuICAgICAgICB9LCBoID0gVE4oe1xuICAgICAgICAgIGltcGFjdDogTSxcbiAgICAgICAgICBkcmFnZ2FibGU6IGQsXG4gICAgICAgICAgZGltZW5zaW9uczogcCxcbiAgICAgICAgICB2aWV3cG9ydDogaS52aWV3cG9ydCxcbiAgICAgICAgICBhZnRlckNyaXRpY2FsOiBpLmFmdGVyQ3JpdGljYWxcbiAgICAgICAgfSksIGcgPSB7XG4gICAgICAgICAgY3JpdGljYWw6IGkuY3JpdGljYWwsXG4gICAgICAgICAgYWZ0ZXJDcml0aWNhbDogaS5hZnRlckNyaXRpY2FsLFxuICAgICAgICAgIHJlc3VsdDogTyxcbiAgICAgICAgICBpbXBhY3Q6IE1cbiAgICAgICAgfSwgdiA9ICFrdChpLmN1cnJlbnQuY2xpZW50Lm9mZnNldCwgaCkgfHwgISFPLmNvbWJpbmU7XG4gICAgICAgIGlmICghdikge1xuICAgICAgICAgIG8oVzYoe1xuICAgICAgICAgICAgY29tcGxldGVkOiBnXG4gICAgICAgICAgfSkpO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB2YXIgTCA9IE5OKHtcbiAgICAgICAgICBjdXJyZW50OiBpLmN1cnJlbnQuY2xpZW50Lm9mZnNldCxcbiAgICAgICAgICBkZXN0aW5hdGlvbjogaCxcbiAgICAgICAgICByZWFzb246IGFcbiAgICAgICAgfSksIHkgPSB7XG4gICAgICAgICAgbmV3SG9tZUNsaWVudE9mZnNldDogaCxcbiAgICAgICAgICBkcm9wRHVyYXRpb246IEwsXG4gICAgICAgICAgY29tcGxldGVkOiBnXG4gICAgICAgIH07XG4gICAgICAgIG8od04oeSkpO1xuICAgICAgfVxuICAgIH07XG4gIH07XG59LCBrZCA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4ge1xuICAgIHg6IHdpbmRvdy5wYWdlWE9mZnNldCxcbiAgICB5OiB3aW5kb3cucGFnZVlPZmZzZXRcbiAgfTtcbn07XG5mdW5jdGlvbiBITihlKSB7XG4gIHJldHVybiB7XG4gICAgZXZlbnROYW1lOiBcInNjcm9sbFwiLFxuICAgIG9wdGlvbnM6IHtcbiAgICAgIHBhc3NpdmU6ICEwLFxuICAgICAgY2FwdHVyZTogITFcbiAgICB9LFxuICAgIGZuOiBmdW5jdGlvbihvKSB7XG4gICAgICBvLnRhcmdldCAhPT0gd2luZG93ICYmIG8udGFyZ2V0ICE9PSB3aW5kb3cuZG9jdW1lbnQgfHwgZSgpO1xuICAgIH1cbiAgfTtcbn1cbmZ1bmN0aW9uIFZOKGUpIHtcbiAgdmFyIHQgPSBlLm9uV2luZG93U2Nyb2xsO1xuICBmdW5jdGlvbiBvKCkge1xuICAgIHQoa2QoKSk7XG4gIH1cbiAgdmFyIG4gPSBPcihvKSwgciA9IEhOKG4pLCBpID0gRXQ7XG4gIGZ1bmN0aW9uIGEoKSB7XG4gICAgcmV0dXJuIGkgIT09IEV0O1xuICB9XG4gIGZ1bmN0aW9uIHMoKSB7XG4gICAgYSgpICYmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIgPyB5MSghMSwgXCJDYW5ub3Qgc3RhcnQgc2Nyb2xsIGxpc3RlbmVyIHdoZW4gYWxyZWFkeSBhY3RpdmVcIikgOiB5MSghMSkpLCBpID0gc2Uod2luZG93LCBbcl0pO1xuICB9XG4gIGZ1bmN0aW9uIGwoKSB7XG4gICAgYSgpIHx8IChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIgPyB5MSghMSwgXCJDYW5ub3Qgc3RvcCBzY3JvbGwgbGlzdGVuZXIgd2hlbiBub3QgYWN0aXZlXCIpIDogeTEoITEpKSwgbi5jYW5jZWwoKSwgaSgpLCBpID0gRXQ7XG4gIH1cbiAgcmV0dXJuIHtcbiAgICBzdGFydDogcyxcbiAgICBzdG9wOiBsLFxuICAgIGlzQWN0aXZlOiBhXG4gIH07XG59XG52YXIgUE4gPSBmdW5jdGlvbih0KSB7XG4gIHJldHVybiB0LnR5cGUgPT09IFwiRFJPUF9DT01QTEVURVwiIHx8IHQudHlwZSA9PT0gXCJEUk9QX0FOSU1BVEVcIiB8fCB0LnR5cGUgPT09IFwiRkxVU0hcIjtcbn0sIEZOID0gZnVuY3Rpb24oZSkge1xuICB2YXIgdCA9IFZOKHtcbiAgICBvbldpbmRvd1Njcm9sbDogZnVuY3Rpb24obikge1xuICAgICAgZS5kaXNwYXRjaChDTih7XG4gICAgICAgIG5ld1Njcm9sbDogblxuICAgICAgfSkpO1xuICAgIH1cbiAgfSk7XG4gIHJldHVybiBmdW5jdGlvbihvKSB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uKG4pIHtcbiAgICAgICF0LmlzQWN0aXZlKCkgJiYgbi50eXBlID09PSBcIklOSVRJQUxfUFVCTElTSFwiICYmIHQuc3RhcnQoKSwgdC5pc0FjdGl2ZSgpICYmIFBOKG4pICYmIHQuc3RvcCgpLCBvKG4pO1xuICAgIH07XG4gIH07XG59LCBYTiA9IGZ1bmN0aW9uKGUpIHtcbiAgdmFyIHQgPSAhMSwgbyA9ICExLCBuID0gc2V0VGltZW91dChmdW5jdGlvbigpIHtcbiAgICBvID0gITA7XG4gIH0pLCByID0gZnVuY3Rpb24oYSkge1xuICAgIGlmICh0KSB7XG4gICAgICBwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIgJiYgWjAoXCJBbm5vdW5jZW1lbnQgYWxyZWFkeSBtYWRlLiBOb3QgbWFraW5nIGEgc2Vjb25kIGFubm91bmNlbWVudFwiKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaWYgKG8pIHtcbiAgICAgIHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIiAmJiBaMChgXG4gICAgICAgIEFubm91bmNlbWVudHMgY2Fubm90IGJlIG1hZGUgYXN5bmNocm9ub3VzbHkuXG4gICAgICAgIERlZmF1bHQgbWVzc2FnZSBoYXMgYWxyZWFkeSBiZWVuIGFubm91bmNlZC5cbiAgICAgIGApO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0ID0gITAsIGUoYSksIGNsZWFyVGltZW91dChuKTtcbiAgfTtcbiAgcmV0dXJuIHIud2FzQ2FsbGVkID0gZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIHQ7XG4gIH0sIHI7XG59LCBVTiA9IGZ1bmN0aW9uKCkge1xuICB2YXIgZSA9IFtdLCB0ID0gZnVuY3Rpb24oaSkge1xuICAgIHZhciBhID0gQzYoZSwgZnVuY3Rpb24ocCkge1xuICAgICAgcmV0dXJuIHAudGltZXJJZCA9PT0gaTtcbiAgICB9KTtcbiAgICBhID09PSAtMSAmJiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiID8geTEoITEsIFwiQ291bGQgbm90IGZpbmQgdGltZXJcIikgOiB5MSghMSkpO1xuICAgIHZhciBzID0gZS5zcGxpY2UoYSwgMSksIGwgPSBzWzBdO1xuICAgIGwuY2FsbGJhY2soKTtcbiAgfSwgbyA9IGZ1bmN0aW9uKGkpIHtcbiAgICB2YXIgYSA9IHNldFRpbWVvdXQoZnVuY3Rpb24oKSB7XG4gICAgICByZXR1cm4gdChhKTtcbiAgICB9KSwgcyA9IHtcbiAgICAgIHRpbWVySWQ6IGEsXG4gICAgICBjYWxsYmFjazogaVxuICAgIH07XG4gICAgZS5wdXNoKHMpO1xuICB9LCBuID0gZnVuY3Rpb24oKSB7XG4gICAgaWYgKGUubGVuZ3RoKSB7XG4gICAgICB2YXIgaSA9IFtdLmNvbmNhdChlKTtcbiAgICAgIGUubGVuZ3RoID0gMCwgaS5mb3JFYWNoKGZ1bmN0aW9uKGEpIHtcbiAgICAgICAgY2xlYXJUaW1lb3V0KGEudGltZXJJZCksIGEuY2FsbGJhY2soKTtcbiAgICAgIH0pO1xuICAgIH1cbiAgfTtcbiAgcmV0dXJuIHtcbiAgICBhZGQ6IG8sXG4gICAgZmx1c2g6IG5cbiAgfTtcbn0sIFlOID0gZnVuY3Rpb24odCwgbykge1xuICByZXR1cm4gdCA9PSBudWxsICYmIG8gPT0gbnVsbCA/ICEwIDogdCA9PSBudWxsIHx8IG8gPT0gbnVsbCA/ICExIDogdC5kcm9wcGFibGVJZCA9PT0gby5kcm9wcGFibGVJZCAmJiB0LmluZGV4ID09PSBvLmluZGV4O1xufSwgR04gPSBmdW5jdGlvbih0LCBvKSB7XG4gIHJldHVybiB0ID09IG51bGwgJiYgbyA9PSBudWxsID8gITAgOiB0ID09IG51bGwgfHwgbyA9PSBudWxsID8gITEgOiB0LmRyYWdnYWJsZUlkID09PSBvLmRyYWdnYWJsZUlkICYmIHQuZHJvcHBhYmxlSWQgPT09IG8uZHJvcHBhYmxlSWQ7XG59LCBRTiA9IGZ1bmN0aW9uKHQsIG8pIHtcbiAgaWYgKHQgPT09IG8pXG4gICAgcmV0dXJuICEwO1xuICB2YXIgbiA9IHQuZHJhZ2dhYmxlLmlkID09PSBvLmRyYWdnYWJsZS5pZCAmJiB0LmRyYWdnYWJsZS5kcm9wcGFibGVJZCA9PT0gby5kcmFnZ2FibGUuZHJvcHBhYmxlSWQgJiYgdC5kcmFnZ2FibGUudHlwZSA9PT0gby5kcmFnZ2FibGUudHlwZSAmJiB0LmRyYWdnYWJsZS5pbmRleCA9PT0gby5kcmFnZ2FibGUuaW5kZXgsIHIgPSB0LmRyb3BwYWJsZS5pZCA9PT0gby5kcm9wcGFibGUuaWQgJiYgdC5kcm9wcGFibGUudHlwZSA9PT0gby5kcm9wcGFibGUudHlwZTtcbiAgcmV0dXJuIG4gJiYgcjtcbn0sIGtvID0gZnVuY3Rpb24odCwgbykge1xuICBWcigpLCBvKCksIFByKCk7XG59LCBDbiA9IGZ1bmN0aW9uKHQsIG8pIHtcbiAgcmV0dXJuIHtcbiAgICBkcmFnZ2FibGVJZDogdC5kcmFnZ2FibGUuaWQsXG4gICAgdHlwZTogdC5kcm9wcGFibGUudHlwZSxcbiAgICBzb3VyY2U6IHtcbiAgICAgIGRyb3BwYWJsZUlkOiB0LmRyb3BwYWJsZS5pZCxcbiAgICAgIGluZGV4OiB0LmRyYWdnYWJsZS5pbmRleFxuICAgIH0sXG4gICAgbW9kZTogb1xuICB9O1xufSwgb2EgPSBmdW5jdGlvbih0LCBvLCBuLCByKSB7XG4gIGlmICghdCkge1xuICAgIG4ocihvKSk7XG4gICAgcmV0dXJuO1xuICB9XG4gIHZhciBpID0gWE4obiksIGEgPSB7XG4gICAgYW5ub3VuY2U6IGlcbiAgfTtcbiAgdChvLCBhKSwgaS53YXNDYWxsZWQoKSB8fCBuKHIobykpO1xufSwgWk4gPSBmdW5jdGlvbihlLCB0KSB7XG4gIHZhciBvID0gVU4oKSwgbiA9IG51bGwsIHIgPSBmdW5jdGlvbihNLCB1KSB7XG4gICAgbiAmJiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiID8geTEoITEsIFwiQ2Fubm90IGZpcmUgb25CZWZvcmVDYXB0dXJlIGFzIGEgZHJhZyBzdGFydCBoYXMgYWxyZWFkeSBiZWVuIHB1Ymxpc2hlZFwiKSA6IHkxKCExKSksIGtvKFwib25CZWZvcmVDYXB0dXJlXCIsIGZ1bmN0aW9uKCkge1xuICAgICAgdmFyIEEgPSBlKCkub25CZWZvcmVDYXB0dXJlO1xuICAgICAgaWYgKEEpIHtcbiAgICAgICAgdmFyIHogPSB7XG4gICAgICAgICAgZHJhZ2dhYmxlSWQ6IE0sXG4gICAgICAgICAgbW9kZTogdVxuICAgICAgICB9O1xuICAgICAgICBBKHopO1xuICAgICAgfVxuICAgIH0pO1xuICB9LCBpID0gZnVuY3Rpb24oTSwgdSkge1xuICAgIG4gJiYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIiA/IHkxKCExLCBcIkNhbm5vdCBmaXJlIG9uQmVmb3JlRHJhZ1N0YXJ0IGFzIGEgZHJhZyBzdGFydCBoYXMgYWxyZWFkeSBiZWVuIHB1Ymxpc2hlZFwiKSA6IHkxKCExKSksIGtvKFwib25CZWZvcmVEcmFnU3RhcnRcIiwgZnVuY3Rpb24oKSB7XG4gICAgICB2YXIgQSA9IGUoKS5vbkJlZm9yZURyYWdTdGFydDtcbiAgICAgIEEgJiYgQShDbihNLCB1KSk7XG4gICAgfSk7XG4gIH0sIGEgPSBmdW5jdGlvbihNLCB1KSB7XG4gICAgbiAmJiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiID8geTEoITEsIFwiQ2Fubm90IGZpcmUgb25CZWZvcmVEcmFnU3RhcnQgYXMgYSBkcmFnIHN0YXJ0IGhhcyBhbHJlYWR5IGJlZW4gcHVibGlzaGVkXCIpIDogeTEoITEpKTtcbiAgICB2YXIgQSA9IENuKE0sIHUpO1xuICAgIG4gPSB7XG4gICAgICBtb2RlOiB1LFxuICAgICAgbGFzdENyaXRpY2FsOiBNLFxuICAgICAgbGFzdExvY2F0aW9uOiBBLnNvdXJjZSxcbiAgICAgIGxhc3RDb21iaW5lOiBudWxsXG4gICAgfSwgby5hZGQoZnVuY3Rpb24oKSB7XG4gICAgICBrbyhcIm9uRHJhZ1N0YXJ0XCIsIGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gb2EoZSgpLm9uRHJhZ1N0YXJ0LCBBLCB0LCBabi5vbkRyYWdTdGFydCk7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfSwgcyA9IGZ1bmN0aW9uKE0sIHUpIHtcbiAgICB2YXIgQSA9IG02KHUpLCB6ID0gSjQodSk7XG4gICAgbiB8fCAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiID8geTEoITEsIFwiQ2Fubm90IGZpcmUgb25EcmFnTW92ZSB3aGVuIG9uRHJhZ1N0YXJ0IGhhcyBub3QgYmVlbiBjYWxsZWRcIikgOiB5MSghMSkpO1xuICAgIHZhciBmID0gIVFOKE0sIG4ubGFzdENyaXRpY2FsKTtcbiAgICBmICYmIChuLmxhc3RDcml0aWNhbCA9IE0pO1xuICAgIHZhciBPID0gIVlOKG4ubGFzdExvY2F0aW9uLCBBKTtcbiAgICBPICYmIChuLmxhc3RMb2NhdGlvbiA9IEEpO1xuICAgIHZhciBoID0gIUdOKG4ubGFzdENvbWJpbmUsIHopO1xuICAgIGlmIChoICYmIChuLmxhc3RDb21iaW5lID0geiksICEoIWYgJiYgIU8gJiYgIWgpKSB7XG4gICAgICB2YXIgZyA9IGEwKHt9LCBDbihNLCBuLm1vZGUpLCB7XG4gICAgICAgIGNvbWJpbmU6IHosXG4gICAgICAgIGRlc3RpbmF0aW9uOiBBXG4gICAgICB9KTtcbiAgICAgIG8uYWRkKGZ1bmN0aW9uKCkge1xuICAgICAgICBrbyhcIm9uRHJhZ1VwZGF0ZVwiLCBmdW5jdGlvbigpIHtcbiAgICAgICAgICByZXR1cm4gb2EoZSgpLm9uRHJhZ1VwZGF0ZSwgZywgdCwgWm4ub25EcmFnVXBkYXRlKTtcbiAgICAgICAgfSk7XG4gICAgICB9KTtcbiAgICB9XG4gIH0sIGwgPSBmdW5jdGlvbigpIHtcbiAgICBuIHx8IChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIgPyB5MSghMSwgXCJDYW4gb25seSBmbHVzaCByZXNwb25kZXJzIHdoaWxlIGRyYWdnaW5nXCIpIDogeTEoITEpKSwgby5mbHVzaCgpO1xuICB9LCBwID0gZnVuY3Rpb24oTSkge1xuICAgIG4gfHwgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIiA/IHkxKCExLCBcIkNhbm5vdCBmaXJlIG9uRHJhZ0VuZCB3aGVuIHRoZXJlIGlzIG5vIG1hdGNoaW5nIG9uRHJhZ1N0YXJ0XCIpIDogeTEoITEpKSwgbiA9IG51bGwsIGtvKFwib25EcmFnRW5kXCIsIGZ1bmN0aW9uKCkge1xuICAgICAgcmV0dXJuIG9hKGUoKS5vbkRyYWdFbmQsIE0sIHQsIFpuLm9uRHJhZ0VuZCk7XG4gICAgfSk7XG4gIH0sIGQgPSBmdW5jdGlvbigpIHtcbiAgICBpZiAobikge1xuICAgICAgdmFyIE0gPSBhMCh7fSwgQ24obi5sYXN0Q3JpdGljYWwsIG4ubW9kZSksIHtcbiAgICAgICAgY29tYmluZTogbnVsbCxcbiAgICAgICAgZGVzdGluYXRpb246IG51bGwsXG4gICAgICAgIHJlYXNvbjogXCJDQU5DRUxcIlxuICAgICAgfSk7XG4gICAgICBwKE0pO1xuICAgIH1cbiAgfTtcbiAgcmV0dXJuIHtcbiAgICBiZWZvcmVDYXB0dXJlOiByLFxuICAgIGJlZm9yZVN0YXJ0OiBpLFxuICAgIHN0YXJ0OiBhLFxuICAgIHVwZGF0ZTogcyxcbiAgICBmbHVzaDogbCxcbiAgICBkcm9wOiBwLFxuICAgIGFib3J0OiBkXG4gIH07XG59LCBqTiA9IGZ1bmN0aW9uKGUsIHQpIHtcbiAgdmFyIG8gPSBaTihlLCB0KTtcbiAgcmV0dXJuIGZ1bmN0aW9uKG4pIHtcbiAgICByZXR1cm4gZnVuY3Rpb24ocikge1xuICAgICAgcmV0dXJuIGZ1bmN0aW9uKGkpIHtcbiAgICAgICAgaWYgKGkudHlwZSA9PT0gXCJCRUZPUkVfSU5JVElBTF9DQVBUVVJFXCIpIHtcbiAgICAgICAgICBvLmJlZm9yZUNhcHR1cmUoaS5wYXlsb2FkLmRyYWdnYWJsZUlkLCBpLnBheWxvYWQubW92ZW1lbnRNb2RlKTtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGkudHlwZSA9PT0gXCJJTklUSUFMX1BVQkxJU0hcIikge1xuICAgICAgICAgIHZhciBhID0gaS5wYXlsb2FkLmNyaXRpY2FsO1xuICAgICAgICAgIG8uYmVmb3JlU3RhcnQoYSwgaS5wYXlsb2FkLm1vdmVtZW50TW9kZSksIHIoaSksIG8uc3RhcnQoYSwgaS5wYXlsb2FkLm1vdmVtZW50TW9kZSk7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGlmIChpLnR5cGUgPT09IFwiRFJPUF9DT01QTEVURVwiKSB7XG4gICAgICAgICAgdmFyIHMgPSBpLnBheWxvYWQuY29tcGxldGVkLnJlc3VsdDtcbiAgICAgICAgICBvLmZsdXNoKCksIHIoaSksIG8uZHJvcChzKTtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHIoaSksIGkudHlwZSA9PT0gXCJGTFVTSFwiKSB7XG4gICAgICAgICAgby5hYm9ydCgpO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB2YXIgbCA9IG4uZ2V0U3RhdGUoKTtcbiAgICAgICAgbC5waGFzZSA9PT0gXCJEUkFHR0lOR1wiICYmIG8udXBkYXRlKGwuY3JpdGljYWwsIGwuaW1wYWN0KTtcbiAgICAgIH07XG4gICAgfTtcbiAgfTtcbn0sIEtOID0gZnVuY3Rpb24oZSkge1xuICByZXR1cm4gZnVuY3Rpb24odCkge1xuICAgIHJldHVybiBmdW5jdGlvbihvKSB7XG4gICAgICBpZiAoby50eXBlICE9PSBcIkRST1BfQU5JTUFUSU9OX0ZJTklTSEVEXCIpIHtcbiAgICAgICAgdChvKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgdmFyIG4gPSBlLmdldFN0YXRlKCk7XG4gICAgICBuLnBoYXNlICE9PSBcIkRST1BfQU5JTUFUSU5HXCIgJiYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIiA/IHkxKCExLCBcIkNhbm5vdCBmaW5pc2ggYSBkcm9wIGFuaW1hdGluZyB3aGVuIG5vIGRyb3AgaXMgb2NjdXJyaW5nXCIpIDogeTEoITEpKSwgZS5kaXNwYXRjaChXNih7XG4gICAgICAgIGNvbXBsZXRlZDogbi5jb21wbGV0ZWRcbiAgICAgIH0pKTtcbiAgICB9O1xuICB9O1xufSwgSk4gPSBmdW5jdGlvbihlKSB7XG4gIHZhciB0ID0gbnVsbCwgbyA9IG51bGw7XG4gIGZ1bmN0aW9uIG4oKSB7XG4gICAgbyAmJiAoY2FuY2VsQW5pbWF0aW9uRnJhbWUobyksIG8gPSBudWxsKSwgdCAmJiAodCgpLCB0ID0gbnVsbCk7XG4gIH1cbiAgcmV0dXJuIGZ1bmN0aW9uKHIpIHtcbiAgICByZXR1cm4gZnVuY3Rpb24oaSkge1xuICAgICAgaWYgKChpLnR5cGUgPT09IFwiRkxVU0hcIiB8fCBpLnR5cGUgPT09IFwiRFJPUF9DT01QTEVURVwiIHx8IGkudHlwZSA9PT0gXCJEUk9QX0FOSU1BVElPTl9GSU5JU0hFRFwiKSAmJiBuKCksIHIoaSksIGkudHlwZSA9PT0gXCJEUk9QX0FOSU1BVEVcIikge1xuICAgICAgICB2YXIgYSA9IHtcbiAgICAgICAgICBldmVudE5hbWU6IFwic2Nyb2xsXCIsXG4gICAgICAgICAgb3B0aW9uczoge1xuICAgICAgICAgICAgY2FwdHVyZTogITAsXG4gICAgICAgICAgICBwYXNzaXZlOiAhMSxcbiAgICAgICAgICAgIG9uY2U6ICEwXG4gICAgICAgICAgfSxcbiAgICAgICAgICBmbjogZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICB2YXIgbCA9IGUuZ2V0U3RhdGUoKTtcbiAgICAgICAgICAgIGwucGhhc2UgPT09IFwiRFJPUF9BTklNQVRJTkdcIiAmJiBlLmRpc3BhdGNoKFNkKCkpO1xuICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICAgICAgbyA9IHJlcXVlc3RBbmltYXRpb25GcmFtZShmdW5jdGlvbigpIHtcbiAgICAgICAgICBvID0gbnVsbCwgdCA9IHNlKHdpbmRvdywgW2FdKTtcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfTtcbiAgfTtcbn0sIF9OID0gZnVuY3Rpb24oZSkge1xuICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uKHQpIHtcbiAgICAgIHJldHVybiBmdW5jdGlvbihvKSB7XG4gICAgICAgIChvLnR5cGUgPT09IFwiRFJPUF9DT01QTEVURVwiIHx8IG8udHlwZSA9PT0gXCJGTFVTSFwiIHx8IG8udHlwZSA9PT0gXCJEUk9QX0FOSU1BVEVcIikgJiYgZS5zdG9wUHVibGlzaGluZygpLCB0KG8pO1xuICAgICAgfTtcbiAgICB9O1xuICB9O1xufSwgJE4gPSBmdW5jdGlvbihlKSB7XG4gIHZhciB0ID0gITE7XG4gIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gZnVuY3Rpb24obykge1xuICAgICAgcmV0dXJuIGZ1bmN0aW9uKG4pIHtcbiAgICAgICAgaWYgKG4udHlwZSA9PT0gXCJJTklUSUFMX1BVQkxJU0hcIikge1xuICAgICAgICAgIHQgPSAhMCwgZS50cnlSZWNvcmRGb2N1cyhuLnBheWxvYWQuY3JpdGljYWwuZHJhZ2dhYmxlLmlkKSwgbyhuKSwgZS50cnlSZXN0b3JlRm9jdXNSZWNvcmRlZCgpO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBpZiAobyhuKSwgISF0KSB7XG4gICAgICAgICAgaWYgKG4udHlwZSA9PT0gXCJGTFVTSFwiKSB7XG4gICAgICAgICAgICB0ID0gITEsIGUudHJ5UmVzdG9yZUZvY3VzUmVjb3JkZWQoKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKG4udHlwZSA9PT0gXCJEUk9QX0NPTVBMRVRFXCIpIHtcbiAgICAgICAgICAgIHQgPSAhMTtcbiAgICAgICAgICAgIHZhciByID0gbi5wYXlsb2FkLmNvbXBsZXRlZC5yZXN1bHQ7XG4gICAgICAgICAgICByLmNvbWJpbmUgJiYgZS50cnlTaGlmdFJlY29yZChyLmRyYWdnYWJsZUlkLCByLmNvbWJpbmUuZHJhZ2dhYmxlSWQpLCBlLnRyeVJlc3RvcmVGb2N1c1JlY29yZGVkKCk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9O1xuICAgIH07XG4gIH07XG59LCBlVCA9IGZ1bmN0aW9uKHQpIHtcbiAgcmV0dXJuIHQudHlwZSA9PT0gXCJEUk9QX0NPTVBMRVRFXCIgfHwgdC50eXBlID09PSBcIkRST1BfQU5JTUFURVwiIHx8IHQudHlwZSA9PT0gXCJGTFVTSFwiO1xufSwgdFQgPSBmdW5jdGlvbihlKSB7XG4gIHJldHVybiBmdW5jdGlvbih0KSB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uKG8pIHtcbiAgICAgIHJldHVybiBmdW5jdGlvbihuKSB7XG4gICAgICAgIGlmIChlVChuKSkge1xuICAgICAgICAgIGUuc3RvcCgpLCBvKG4pO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBpZiAobi50eXBlID09PSBcIklOSVRJQUxfUFVCTElTSFwiKSB7XG4gICAgICAgICAgbyhuKTtcbiAgICAgICAgICB2YXIgciA9IHQuZ2V0U3RhdGUoKTtcbiAgICAgICAgICByLnBoYXNlICE9PSBcIkRSQUdHSU5HXCIgJiYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIiA/IHkxKCExLCBcIkV4cGVjdGVkIHBoYXNlIHRvIGJlIERSQUdHSU5HIGFmdGVyIElOSVRJQUxfUFVCTElTSFwiKSA6IHkxKCExKSksIGUuc3RhcnQocik7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIG8obiksIGUuc2Nyb2xsKHQuZ2V0U3RhdGUoKSk7XG4gICAgICB9O1xuICAgIH07XG4gIH07XG59LCBvVCA9IGZ1bmN0aW9uKGUpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uKHQpIHtcbiAgICByZXR1cm4gZnVuY3Rpb24obykge1xuICAgICAgaWYgKHQobyksIG8udHlwZSA9PT0gXCJQVUJMSVNIX1dISUxFX0RSQUdHSU5HXCIpIHtcbiAgICAgICAgdmFyIG4gPSBlLmdldFN0YXRlKCk7XG4gICAgICAgIG4ucGhhc2UgPT09IFwiRFJPUF9QRU5ESU5HXCIgJiYgKG4uaXNXYWl0aW5nIHx8IGUuZGlzcGF0Y2goQmQoe1xuICAgICAgICAgIHJlYXNvbjogbi5yZWFzb25cbiAgICAgICAgfSkpKTtcbiAgICAgIH1cbiAgICB9O1xuICB9O1xufSwgclQgPSBwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIgJiYgdHlwZW9mIHdpbmRvdyA8IFwidVwiICYmIHdpbmRvdy5fX1JFRFVYX0RFVlRPT0xTX0VYVEVOU0lPTl9DT01QT1NFX18gPyB3aW5kb3cuX19SRURVWF9ERVZUT09MU19FWFRFTlNJT05fQ09NUE9TRV9fKHtcbiAgbmFtZTogXCJyZWFjdC1iZWF1dGlmdWwtZG5kXCJcbn0pIDogR3AsIG5UID0gZnVuY3Rpb24oZSkge1xuICB2YXIgdCA9IGUuZGltZW5zaW9uTWFyc2hhbCwgbyA9IGUuZm9jdXNNYXJzaGFsLCBuID0gZS5zdHlsZU1hcnNoYWwsIHIgPSBlLmdldFJlc3BvbmRlcnMsIGkgPSBlLmFubm91bmNlLCBhID0gZS5hdXRvU2Nyb2xsZXI7XG4gIHJldHVybiBZcChiTiwgclQoS1MoU04obiksIF9OKHQpLCBCTih0KSwgRE4sIEtOLCBKTiwgb1QsIHRUKGEpLCBGTiwgJE4obyksIGpOKHIsIGkpKSkpO1xufSwgcmEgPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIHtcbiAgICBhZGRpdGlvbnM6IHt9LFxuICAgIHJlbW92YWxzOiB7fSxcbiAgICBtb2RpZmllZDoge31cbiAgfTtcbn07XG5mdW5jdGlvbiBpVChlKSB7XG4gIHZhciB0ID0gZS5yZWdpc3RyeSwgbyA9IGUuY2FsbGJhY2tzLCBuID0gcmEoKSwgciA9IG51bGwsIGkgPSBmdW5jdGlvbigpIHtcbiAgICByIHx8IChvLmNvbGxlY3Rpb25TdGFydGluZygpLCByID0gcmVxdWVzdEFuaW1hdGlvbkZyYW1lKGZ1bmN0aW9uKCkge1xuICAgICAgciA9IG51bGwsIFZyKCk7XG4gICAgICB2YXIgZCA9IG4sIGIgPSBkLmFkZGl0aW9ucywgTSA9IGQucmVtb3ZhbHMsIHUgPSBkLm1vZGlmaWVkLCBBID0gT2JqZWN0LmtleXMoYikubWFwKGZ1bmN0aW9uKE8pIHtcbiAgICAgICAgcmV0dXJuIHQuZHJhZ2dhYmxlLmdldEJ5SWQoTykuZ2V0RGltZW5zaW9uKHUyKTtcbiAgICAgIH0pLnNvcnQoZnVuY3Rpb24oTywgaCkge1xuICAgICAgICByZXR1cm4gTy5kZXNjcmlwdG9yLmluZGV4IC0gaC5kZXNjcmlwdG9yLmluZGV4O1xuICAgICAgfSksIHogPSBPYmplY3Qua2V5cyh1KS5tYXAoZnVuY3Rpb24oTykge1xuICAgICAgICB2YXIgaCA9IHQuZHJvcHBhYmxlLmdldEJ5SWQoTyksIGcgPSBoLmNhbGxiYWNrcy5nZXRTY3JvbGxXaGlsZURyYWdnaW5nKCk7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgZHJvcHBhYmxlSWQ6IE8sXG4gICAgICAgICAgc2Nyb2xsOiBnXG4gICAgICAgIH07XG4gICAgICB9KSwgZiA9IHtcbiAgICAgICAgYWRkaXRpb25zOiBBLFxuICAgICAgICByZW1vdmFsczogT2JqZWN0LmtleXMoTSksXG4gICAgICAgIG1vZGlmaWVkOiB6XG4gICAgICB9O1xuICAgICAgbiA9IHJhKCksIFByKCksIG8ucHVibGlzaChmKTtcbiAgICB9KSk7XG4gIH0sIGEgPSBmdW5jdGlvbihkKSB7XG4gICAgdmFyIGIgPSBkLmRlc2NyaXB0b3IuaWQ7XG4gICAgbi5hZGRpdGlvbnNbYl0gPSBkLCBuLm1vZGlmaWVkW2QuZGVzY3JpcHRvci5kcm9wcGFibGVJZF0gPSAhMCwgbi5yZW1vdmFsc1tiXSAmJiBkZWxldGUgbi5yZW1vdmFsc1tiXSwgaSgpO1xuICB9LCBzID0gZnVuY3Rpb24oZCkge1xuICAgIHZhciBiID0gZC5kZXNjcmlwdG9yO1xuICAgIG4ucmVtb3ZhbHNbYi5pZF0gPSAhMCwgbi5tb2RpZmllZFtiLmRyb3BwYWJsZUlkXSA9ICEwLCBuLmFkZGl0aW9uc1tiLmlkXSAmJiBkZWxldGUgbi5hZGRpdGlvbnNbYi5pZF0sIGkoKTtcbiAgfSwgbCA9IGZ1bmN0aW9uKCkge1xuICAgIHIgJiYgKGNhbmNlbEFuaW1hdGlvbkZyYW1lKHIpLCByID0gbnVsbCwgbiA9IHJhKCkpO1xuICB9O1xuICByZXR1cm4ge1xuICAgIGFkZDogYSxcbiAgICByZW1vdmU6IHMsXG4gICAgc3RvcDogbFxuICB9O1xufVxudmFyIE5kID0gZnVuY3Rpb24oZSkge1xuICB2YXIgdCA9IGUuc2Nyb2xsSGVpZ2h0LCBvID0gZS5zY3JvbGxXaWR0aCwgbiA9IGUuaGVpZ2h0LCByID0gZS53aWR0aCwgaSA9IF8yKHtcbiAgICB4OiBvLFxuICAgIHk6IHRcbiAgfSwge1xuICAgIHg6IHIsXG4gICAgeTogblxuICB9KSwgYSA9IHtcbiAgICB4OiBNYXRoLm1heCgwLCBpLngpLFxuICAgIHk6IE1hdGgubWF4KDAsIGkueSlcbiAgfTtcbiAgcmV0dXJuIGE7XG59LCBUZCA9IGZ1bmN0aW9uKCkge1xuICB2YXIgZSA9IGRvY3VtZW50LmRvY3VtZW50RWxlbWVudDtcbiAgcmV0dXJuIGUgfHwgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIiA/IHkxKCExLCBcIkNhbm5vdCBmaW5kIGRvY3VtZW50LmRvY3VtZW50RWxlbWVudFwiKSA6IHkxKCExKSksIGU7XG59LCBJZCA9IGZ1bmN0aW9uKCkge1xuICB2YXIgZSA9IFRkKCksIHQgPSBOZCh7XG4gICAgc2Nyb2xsSGVpZ2h0OiBlLnNjcm9sbEhlaWdodCxcbiAgICBzY3JvbGxXaWR0aDogZS5zY3JvbGxXaWR0aCxcbiAgICB3aWR0aDogZS5jbGllbnRXaWR0aCxcbiAgICBoZWlnaHQ6IGUuY2xpZW50SGVpZ2h0XG4gIH0pO1xuICByZXR1cm4gdDtcbn0sIGFUID0gZnVuY3Rpb24oKSB7XG4gIHZhciBlID0ga2QoKSwgdCA9IElkKCksIG8gPSBlLnksIG4gPSBlLngsIHIgPSBUZCgpLCBpID0gci5jbGllbnRXaWR0aCwgYSA9IHIuY2xpZW50SGVpZ2h0LCBzID0gbiArIGksIGwgPSBvICsgYSwgcCA9IENlKHtcbiAgICB0b3A6IG8sXG4gICAgbGVmdDogbixcbiAgICByaWdodDogcyxcbiAgICBib3R0b206IGxcbiAgfSksIGQgPSB7XG4gICAgZnJhbWU6IHAsXG4gICAgc2Nyb2xsOiB7XG4gICAgICBpbml0aWFsOiBlLFxuICAgICAgY3VycmVudDogZSxcbiAgICAgIG1heDogdCxcbiAgICAgIGRpZmY6IHtcbiAgICAgICAgdmFsdWU6IHUyLFxuICAgICAgICBkaXNwbGFjZW1lbnQ6IHUyXG4gICAgICB9XG4gICAgfVxuICB9O1xuICByZXR1cm4gZDtcbn0sIHNUID0gZnVuY3Rpb24oZSkge1xuICB2YXIgdCA9IGUuY3JpdGljYWwsIG8gPSBlLnNjcm9sbE9wdGlvbnMsIG4gPSBlLnJlZ2lzdHJ5O1xuICBWcigpO1xuICB2YXIgciA9IGFUKCksIGkgPSByLnNjcm9sbC5jdXJyZW50LCBhID0gdC5kcm9wcGFibGUsIHMgPSBuLmRyb3BwYWJsZS5nZXRBbGxCeVR5cGUoYS50eXBlKS5tYXAoZnVuY3Rpb24oYikge1xuICAgIHJldHVybiBiLmNhbGxiYWNrcy5nZXREaW1lbnNpb25BbmRXYXRjaFNjcm9sbChpLCBvKTtcbiAgfSksIGwgPSBuLmRyYWdnYWJsZS5nZXRBbGxCeVR5cGUodC5kcmFnZ2FibGUudHlwZSkubWFwKGZ1bmN0aW9uKGIpIHtcbiAgICByZXR1cm4gYi5nZXREaW1lbnNpb24oaSk7XG4gIH0pLCBwID0ge1xuICAgIGRyYWdnYWJsZXM6IGJkKGwpLFxuICAgIGRyb3BwYWJsZXM6IGRkKHMpXG4gIH07XG4gIFByKCk7XG4gIHZhciBkID0ge1xuICAgIGRpbWVuc2lvbnM6IHAsXG4gICAgY3JpdGljYWw6IHQsXG4gICAgdmlld3BvcnQ6IHJcbiAgfTtcbiAgcmV0dXJuIGQ7XG59O1xuZnVuY3Rpb24gRjkoZSwgdCwgbykge1xuICBpZiAoby5kZXNjcmlwdG9yLmlkID09PSB0LmlkIHx8IG8uZGVzY3JpcHRvci50eXBlICE9PSB0LnR5cGUpXG4gICAgcmV0dXJuICExO1xuICB2YXIgbiA9IGUuZHJvcHBhYmxlLmdldEJ5SWQoby5kZXNjcmlwdG9yLmRyb3BwYWJsZUlkKTtcbiAgcmV0dXJuIG4uZGVzY3JpcHRvci5tb2RlICE9PSBcInZpcnR1YWxcIiA/IChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIgJiYgWjAoYFxuICAgICAgWW91IGFyZSBhdHRlbXB0aW5nIHRvIGFkZCBvciByZW1vdmUgYSBEcmFnZ2FibGUgW2lkOiBgICsgby5kZXNjcmlwdG9yLmlkICsgYF1cbiAgICAgIHdoaWxlIGEgZHJhZyBpcyBvY2N1cnJpbmcuIFRoaXMgaXMgb25seSBzdXBwb3J0ZWQgZm9yIHZpcnR1YWwgbGlzdHMuXG5cbiAgICAgIFNlZSBodHRwczovL2dpdGh1Yi5jb20vYXRsYXNzaWFuL3JlYWN0LWJlYXV0aWZ1bC1kbmQvYmxvYi9tYXN0ZXIvZG9jcy9wYXR0ZXJucy92aXJ0dWFsLWxpc3RzLm1kXG4gICAgYCksICExKSA6ICEwO1xufVxudmFyIGNUID0gZnVuY3Rpb24oZSwgdCkge1xuICB2YXIgbyA9IG51bGwsIG4gPSBpVCh7XG4gICAgY2FsbGJhY2tzOiB7XG4gICAgICBwdWJsaXNoOiB0LnB1Ymxpc2hXaGlsZURyYWdnaW5nLFxuICAgICAgY29sbGVjdGlvblN0YXJ0aW5nOiB0LmNvbGxlY3Rpb25TdGFydGluZ1xuICAgIH0sXG4gICAgcmVnaXN0cnk6IGVcbiAgfSksIHIgPSBmdW5jdGlvbih1LCBBKSB7XG4gICAgZS5kcm9wcGFibGUuZXhpc3RzKHUpIHx8IChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIgPyB5MSghMSwgXCJDYW5ub3QgdXBkYXRlIGlzIGVuYWJsZWQgZmxhZyBvZiBEcm9wcGFibGUgXCIgKyB1ICsgXCIgYXMgaXQgaXMgbm90IHJlZ2lzdGVyZWRcIikgOiB5MSghMSkpLCBvICYmIHQudXBkYXRlRHJvcHBhYmxlSXNFbmFibGVkKHtcbiAgICAgIGlkOiB1LFxuICAgICAgaXNFbmFibGVkOiBBXG4gICAgfSk7XG4gIH0sIGkgPSBmdW5jdGlvbih1LCBBKSB7XG4gICAgbyAmJiAoZS5kcm9wcGFibGUuZXhpc3RzKHUpIHx8IChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIgPyB5MSghMSwgXCJDYW5ub3QgdXBkYXRlIGlzQ29tYmluZUVuYWJsZWQgZmxhZyBvZiBEcm9wcGFibGUgXCIgKyB1ICsgXCIgYXMgaXQgaXMgbm90IHJlZ2lzdGVyZWRcIikgOiB5MSghMSkpLCB0LnVwZGF0ZURyb3BwYWJsZUlzQ29tYmluZUVuYWJsZWQoe1xuICAgICAgaWQ6IHUsXG4gICAgICBpc0NvbWJpbmVFbmFibGVkOiBBXG4gICAgfSkpO1xuICB9LCBhID0gZnVuY3Rpb24odSwgQSkge1xuICAgIG8gJiYgKGUuZHJvcHBhYmxlLmV4aXN0cyh1KSB8fCAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiID8geTEoITEsIFwiQ2Fubm90IHVwZGF0ZSB0aGUgc2Nyb2xsIG9uIERyb3BwYWJsZSBcIiArIHUgKyBcIiBhcyBpdCBpcyBub3QgcmVnaXN0ZXJlZFwiKSA6IHkxKCExKSksIHQudXBkYXRlRHJvcHBhYmxlU2Nyb2xsKHtcbiAgICAgIGlkOiB1LFxuICAgICAgbmV3U2Nyb2xsOiBBXG4gICAgfSkpO1xuICB9LCBzID0gZnVuY3Rpb24odSwgQSkge1xuICAgIG8gJiYgZS5kcm9wcGFibGUuZ2V0QnlJZCh1KS5jYWxsYmFja3Muc2Nyb2xsKEEpO1xuICB9LCBsID0gZnVuY3Rpb24oKSB7XG4gICAgaWYgKG8pIHtcbiAgICAgIG4uc3RvcCgpO1xuICAgICAgdmFyIHUgPSBvLmNyaXRpY2FsLmRyb3BwYWJsZTtcbiAgICAgIGUuZHJvcHBhYmxlLmdldEFsbEJ5VHlwZSh1LnR5cGUpLmZvckVhY2goZnVuY3Rpb24oQSkge1xuICAgICAgICByZXR1cm4gQS5jYWxsYmFja3MuZHJhZ1N0b3BwZWQoKTtcbiAgICAgIH0pLCBvLnVuc3Vic2NyaWJlKCksIG8gPSBudWxsO1xuICAgIH1cbiAgfSwgcCA9IGZ1bmN0aW9uKHUpIHtcbiAgICBvIHx8IChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIgPyB5MSghMSwgXCJTaG91bGQgb25seSBiZSBzdWJzY3JpYmVkIHdoZW4gYSBjb2xsZWN0aW9uIGlzIG9jY3VycmluZ1wiKSA6IHkxKCExKSk7XG4gICAgdmFyIEEgPSBvLmNyaXRpY2FsLmRyYWdnYWJsZTtcbiAgICB1LnR5cGUgPT09IFwiQURESVRJT05cIiAmJiBGOShlLCBBLCB1LnZhbHVlKSAmJiBuLmFkZCh1LnZhbHVlKSwgdS50eXBlID09PSBcIlJFTU9WQUxcIiAmJiBGOShlLCBBLCB1LnZhbHVlKSAmJiBuLnJlbW92ZSh1LnZhbHVlKTtcbiAgfSwgZCA9IGZ1bmN0aW9uKHUpIHtcbiAgICBvICYmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIgPyB5MSghMSwgXCJDYW5ub3Qgc3RhcnQgY2FwdHVyaW5nIGNyaXRpY2FsIGRpbWVuc2lvbnMgYXMgdGhlcmUgaXMgYWxyZWFkeSBhIGNvbGxlY3Rpb25cIikgOiB5MSghMSkpO1xuICAgIHZhciBBID0gZS5kcmFnZ2FibGUuZ2V0QnlJZCh1LmRyYWdnYWJsZUlkKSwgeiA9IGUuZHJvcHBhYmxlLmdldEJ5SWQoQS5kZXNjcmlwdG9yLmRyb3BwYWJsZUlkKSwgZiA9IHtcbiAgICAgIGRyYWdnYWJsZTogQS5kZXNjcmlwdG9yLFxuICAgICAgZHJvcHBhYmxlOiB6LmRlc2NyaXB0b3JcbiAgICB9LCBPID0gZS5zdWJzY3JpYmUocCk7XG4gICAgcmV0dXJuIG8gPSB7XG4gICAgICBjcml0aWNhbDogZixcbiAgICAgIHVuc3Vic2NyaWJlOiBPXG4gICAgfSwgc1Qoe1xuICAgICAgY3JpdGljYWw6IGYsXG4gICAgICByZWdpc3RyeTogZSxcbiAgICAgIHNjcm9sbE9wdGlvbnM6IHUuc2Nyb2xsT3B0aW9uc1xuICAgIH0pO1xuICB9LCBiID0ge1xuICAgIHVwZGF0ZURyb3BwYWJsZUlzRW5hYmxlZDogcixcbiAgICB1cGRhdGVEcm9wcGFibGVJc0NvbWJpbmVFbmFibGVkOiBpLFxuICAgIHNjcm9sbERyb3BwYWJsZTogcyxcbiAgICB1cGRhdGVEcm9wcGFibGVTY3JvbGw6IGEsXG4gICAgc3RhcnRQdWJsaXNoaW5nOiBkLFxuICAgIHN0b3BQdWJsaXNoaW5nOiBsXG4gIH07XG4gIHJldHVybiBiO1xufSwgRGQgPSBmdW5jdGlvbihlLCB0KSB7XG4gIHJldHVybiBlLnBoYXNlID09PSBcIklETEVcIiA/ICEwIDogZS5waGFzZSAhPT0gXCJEUk9QX0FOSU1BVElOR1wiIHx8IGUuY29tcGxldGVkLnJlc3VsdC5kcmFnZ2FibGVJZCA9PT0gdCA/ICExIDogZS5jb21wbGV0ZWQucmVzdWx0LnJlYXNvbiA9PT0gXCJEUk9QXCI7XG59LCBsVCA9IGZ1bmN0aW9uKGUpIHtcbiAgd2luZG93LnNjcm9sbEJ5KGUueCwgZS55KTtcbn0sIHBUID0gcDIoZnVuY3Rpb24oZSkge1xuICByZXR1cm4gSzQoZSkuZmlsdGVyKGZ1bmN0aW9uKHQpIHtcbiAgICByZXR1cm4gISghdC5pc0VuYWJsZWQgfHwgIXQuZnJhbWUpO1xuICB9KTtcbn0pLCBkVCA9IGZ1bmN0aW9uKHQsIG8pIHtcbiAgdmFyIG4gPSBVdChwVChvKSwgZnVuY3Rpb24ocikge1xuICAgIHJldHVybiByLmZyYW1lIHx8IChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIgPyB5MSghMSwgXCJJbnZhbGlkIHJlc3VsdFwiKSA6IHkxKCExKSksIG1kKHIuZnJhbWUucGFnZU1hcmdpbkJveCkodCk7XG4gIH0pO1xuICByZXR1cm4gbjtcbn0sIGJUID0gZnVuY3Rpb24oZSkge1xuICB2YXIgdCA9IGUuY2VudGVyLCBvID0gZS5kZXN0aW5hdGlvbiwgbiA9IGUuZHJvcHBhYmxlcztcbiAgaWYgKG8pIHtcbiAgICB2YXIgciA9IG5bb107XG4gICAgcmV0dXJuIHIuZnJhbWUgPyByIDogbnVsbDtcbiAgfVxuICB2YXIgaSA9IGRUKHQsIG4pO1xuICByZXR1cm4gaTtcbn0sIE50ID0ge1xuICBzdGFydEZyb21QZXJjZW50YWdlOiAwLjI1LFxuICBtYXhTY3JvbGxBdFBlcmNlbnRhZ2U6IDAuMDUsXG4gIG1heFBpeGVsU2Nyb2xsOiAyOCxcbiAgZWFzZTogZnVuY3Rpb24odCkge1xuICAgIHJldHVybiBNYXRoLnBvdyh0LCAyKTtcbiAgfSxcbiAgZHVyYXRpb25EYW1wZW5pbmc6IHtcbiAgICBzdG9wRGFtcGVuaW5nQXQ6IDEyMDAsXG4gICAgYWNjZWxlcmF0ZUF0OiAzNjBcbiAgfVxufSwgTVQgPSBmdW5jdGlvbihlLCB0KSB7XG4gIHZhciBvID0gZVt0LnNpemVdICogTnQuc3RhcnRGcm9tUGVyY2VudGFnZSwgbiA9IGVbdC5zaXplXSAqIE50Lm1heFNjcm9sbEF0UGVyY2VudGFnZSwgciA9IHtcbiAgICBzdGFydFNjcm9sbGluZ0Zyb206IG8sXG4gICAgbWF4U2Nyb2xsVmFsdWVBdDogblxuICB9O1xuICByZXR1cm4gcjtcbn0sIEhkID0gZnVuY3Rpb24oZSkge1xuICB2YXIgdCA9IGUuc3RhcnRPZlJhbmdlLCBvID0gZS5lbmRPZlJhbmdlLCBuID0gZS5jdXJyZW50LCByID0gbyAtIHQ7XG4gIGlmIChyID09PSAwKVxuICAgIHJldHVybiBwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIgJiYgWjAoYFxuICAgICAgRGV0ZWN0ZWQgZGlzdGFuY2UgcmFuZ2Ugb2YgMCBpbiB0aGUgZmx1aWQgYXV0byBzY3JvbGxlclxuICAgICAgVGhpcyBpcyB1bmV4cGVjdGVkIGFuZCB3b3VsZCBjYXVzZSBhIGRpdmlkZSBieSAwIGlzc3VlLlxuICAgICAgTm90IGFsbG93aW5nIGFuIGF1dG8gc2Nyb2xsXG4gICAgYCksIDA7XG4gIHZhciBpID0gbiAtIHQsIGEgPSBpIC8gcjtcbiAgcmV0dXJuIGE7XG59LCBTNiA9IDEsIEFUID0gZnVuY3Rpb24oZSwgdCkge1xuICBpZiAoZSA+IHQuc3RhcnRTY3JvbGxpbmdGcm9tKVxuICAgIHJldHVybiAwO1xuICBpZiAoZSA8PSB0Lm1heFNjcm9sbFZhbHVlQXQpXG4gICAgcmV0dXJuIE50Lm1heFBpeGVsU2Nyb2xsO1xuICBpZiAoZSA9PT0gdC5zdGFydFNjcm9sbGluZ0Zyb20pXG4gICAgcmV0dXJuIFM2O1xuICB2YXIgbyA9IEhkKHtcbiAgICBzdGFydE9mUmFuZ2U6IHQubWF4U2Nyb2xsVmFsdWVBdCxcbiAgICBlbmRPZlJhbmdlOiB0LnN0YXJ0U2Nyb2xsaW5nRnJvbSxcbiAgICBjdXJyZW50OiBlXG4gIH0pLCBuID0gMSAtIG8sIHIgPSBOdC5tYXhQaXhlbFNjcm9sbCAqIE50LmVhc2Uobik7XG4gIHJldHVybiBNYXRoLmNlaWwocik7XG59LCBYOSA9IE50LmR1cmF0aW9uRGFtcGVuaW5nLmFjY2VsZXJhdGVBdCwgVTkgPSBOdC5kdXJhdGlvbkRhbXBlbmluZy5zdG9wRGFtcGVuaW5nQXQsIHVUID0gZnVuY3Rpb24oZSwgdCkge1xuICB2YXIgbyA9IHQsIG4gPSBVOSwgciA9IERhdGUubm93KCksIGkgPSByIC0gbztcbiAgaWYgKGkgPj0gVTkpXG4gICAgcmV0dXJuIGU7XG4gIGlmIChpIDwgWDkpXG4gICAgcmV0dXJuIFM2O1xuICB2YXIgYSA9IEhkKHtcbiAgICBzdGFydE9mUmFuZ2U6IFg5LFxuICAgIGVuZE9mUmFuZ2U6IG4sXG4gICAgY3VycmVudDogaVxuICB9KSwgcyA9IGUgKiBOdC5lYXNlKGEpO1xuICByZXR1cm4gTWF0aC5jZWlsKHMpO1xufSwgWTkgPSBmdW5jdGlvbihlKSB7XG4gIHZhciB0ID0gZS5kaXN0YW5jZVRvRWRnZSwgbyA9IGUudGhyZXNob2xkcywgbiA9IGUuZHJhZ1N0YXJ0VGltZSwgciA9IGUuc2hvdWxkVXNlVGltZURhbXBlbmluZywgaSA9IEFUKHQsIG8pO1xuICByZXR1cm4gaSA9PT0gMCA/IDAgOiByID8gTWF0aC5tYXgodVQoaSwgbiksIFM2KSA6IGk7XG59LCBHOSA9IGZ1bmN0aW9uKGUpIHtcbiAgdmFyIHQgPSBlLmNvbnRhaW5lciwgbyA9IGUuZGlzdGFuY2VUb0VkZ2VzLCBuID0gZS5kcmFnU3RhcnRUaW1lLCByID0gZS5heGlzLCBpID0gZS5zaG91bGRVc2VUaW1lRGFtcGVuaW5nLCBhID0gTVQodCwgciksIHMgPSBvW3IuZW5kXSA8IG9bci5zdGFydF07XG4gIHJldHVybiBzID8gWTkoe1xuICAgIGRpc3RhbmNlVG9FZGdlOiBvW3IuZW5kXSxcbiAgICB0aHJlc2hvbGRzOiBhLFxuICAgIGRyYWdTdGFydFRpbWU6IG4sXG4gICAgc2hvdWxkVXNlVGltZURhbXBlbmluZzogaVxuICB9KSA6IC0xICogWTkoe1xuICAgIGRpc3RhbmNlVG9FZGdlOiBvW3Iuc3RhcnRdLFxuICAgIHRocmVzaG9sZHM6IGEsXG4gICAgZHJhZ1N0YXJ0VGltZTogbixcbiAgICBzaG91bGRVc2VUaW1lRGFtcGVuaW5nOiBpXG4gIH0pO1xufSwgelQgPSBmdW5jdGlvbihlKSB7XG4gIHZhciB0ID0gZS5jb250YWluZXIsIG8gPSBlLnN1YmplY3QsIG4gPSBlLnByb3Bvc2VkU2Nyb2xsLCByID0gby5oZWlnaHQgPiB0LmhlaWdodCwgaSA9IG8ud2lkdGggPiB0LndpZHRoO1xuICByZXR1cm4gIWkgJiYgIXIgPyBuIDogaSAmJiByID8gbnVsbCA6IHtcbiAgICB4OiBpID8gMCA6IG4ueCxcbiAgICB5OiByID8gMCA6IG4ueVxuICB9O1xufSwgaFQgPSBsZChmdW5jdGlvbihlKSB7XG4gIHJldHVybiBlID09PSAwID8gMCA6IGU7XG59KSwgVmQgPSBmdW5jdGlvbihlKSB7XG4gIHZhciB0ID0gZS5kcmFnU3RhcnRUaW1lLCBvID0gZS5jb250YWluZXIsIG4gPSBlLnN1YmplY3QsIHIgPSBlLmNlbnRlciwgaSA9IGUuc2hvdWxkVXNlVGltZURhbXBlbmluZywgYSA9IHtcbiAgICB0b3A6IHIueSAtIG8udG9wLFxuICAgIHJpZ2h0OiBvLnJpZ2h0IC0gci54LFxuICAgIGJvdHRvbTogby5ib3R0b20gLSByLnksXG4gICAgbGVmdDogci54IC0gby5sZWZ0XG4gIH0sIHMgPSBHOSh7XG4gICAgY29udGFpbmVyOiBvLFxuICAgIGRpc3RhbmNlVG9FZGdlczogYSxcbiAgICBkcmFnU3RhcnRUaW1lOiB0LFxuICAgIGF4aXM6IEw2LFxuICAgIHNob3VsZFVzZVRpbWVEYW1wZW5pbmc6IGlcbiAgfSksIGwgPSBHOSh7XG4gICAgY29udGFpbmVyOiBvLFxuICAgIGRpc3RhbmNlVG9FZGdlczogYSxcbiAgICBkcmFnU3RhcnRUaW1lOiB0LFxuICAgIGF4aXM6IHVkLFxuICAgIHNob3VsZFVzZVRpbWVEYW1wZW5pbmc6IGlcbiAgfSksIHAgPSBoVCh7XG4gICAgeDogbCxcbiAgICB5OiBzXG4gIH0pO1xuICBpZiAoa3QocCwgdTIpKVxuICAgIHJldHVybiBudWxsO1xuICB2YXIgZCA9IHpUKHtcbiAgICBjb250YWluZXI6IG8sXG4gICAgc3ViamVjdDogbixcbiAgICBwcm9wb3NlZFNjcm9sbDogcFxuICB9KTtcbiAgcmV0dXJuIGQgPyBrdChkLCB1MikgPyBudWxsIDogZCA6IG51bGw7XG59LCBPVCA9IGxkKGZ1bmN0aW9uKGUpIHtcbiAgcmV0dXJuIGUgPT09IDAgPyAwIDogZSA+IDAgPyAxIDogLTE7XG59KSwgRTYgPSBmdW5jdGlvbigpIHtcbiAgdmFyIGUgPSBmdW5jdGlvbihvLCBuKSB7XG4gICAgcmV0dXJuIG8gPCAwID8gbyA6IG8gPiBuID8gbyAtIG4gOiAwO1xuICB9O1xuICByZXR1cm4gZnVuY3Rpb24odCkge1xuICAgIHZhciBvID0gdC5jdXJyZW50LCBuID0gdC5tYXgsIHIgPSB0LmNoYW5nZSwgaSA9IEMyKG8sIHIpLCBhID0ge1xuICAgICAgeDogZShpLngsIG4ueCksXG4gICAgICB5OiBlKGkueSwgbi55KVxuICAgIH07XG4gICAgcmV0dXJuIGt0KGEsIHUyKSA/IG51bGwgOiBhO1xuICB9O1xufSgpLCBQZCA9IGZ1bmN0aW9uKHQpIHtcbiAgdmFyIG8gPSB0Lm1heCwgbiA9IHQuY3VycmVudCwgciA9IHQuY2hhbmdlLCBpID0ge1xuICAgIHg6IE1hdGgubWF4KG4ueCwgby54KSxcbiAgICB5OiBNYXRoLm1heChuLnksIG8ueSlcbiAgfSwgYSA9IE9UKHIpLCBzID0gRTYoe1xuICAgIG1heDogaSxcbiAgICBjdXJyZW50OiBuLFxuICAgIGNoYW5nZTogYVxuICB9KTtcbiAgcmV0dXJuICFzIHx8IGEueCAhPT0gMCAmJiBzLnggPT09IDAgfHwgYS55ICE9PSAwICYmIHMueSA9PT0gMDtcbn0sIGs2ID0gZnVuY3Rpb24odCwgbykge1xuICByZXR1cm4gUGQoe1xuICAgIGN1cnJlbnQ6IHQuc2Nyb2xsLmN1cnJlbnQsXG4gICAgbWF4OiB0LnNjcm9sbC5tYXgsXG4gICAgY2hhbmdlOiBvXG4gIH0pO1xufSwgZlQgPSBmdW5jdGlvbih0LCBvKSB7XG4gIGlmICghazYodCwgbykpXG4gICAgcmV0dXJuIG51bGw7XG4gIHZhciBuID0gdC5zY3JvbGwubWF4LCByID0gdC5zY3JvbGwuY3VycmVudDtcbiAgcmV0dXJuIEU2KHtcbiAgICBjdXJyZW50OiByLFxuICAgIG1heDogbixcbiAgICBjaGFuZ2U6IG9cbiAgfSk7XG59LCBONiA9IGZ1bmN0aW9uKHQsIG8pIHtcbiAgdmFyIG4gPSB0LmZyYW1lO1xuICByZXR1cm4gbiA/IFBkKHtcbiAgICBjdXJyZW50OiBuLnNjcm9sbC5jdXJyZW50LFxuICAgIG1heDogbi5zY3JvbGwubWF4LFxuICAgIGNoYW5nZTogb1xuICB9KSA6ICExO1xufSwgZ1QgPSBmdW5jdGlvbih0LCBvKSB7XG4gIHZhciBuID0gdC5mcmFtZTtcbiAgcmV0dXJuICFuIHx8ICFONih0LCBvKSA/IG51bGwgOiBFNih7XG4gICAgY3VycmVudDogbi5zY3JvbGwuY3VycmVudCxcbiAgICBtYXg6IG4uc2Nyb2xsLm1heCxcbiAgICBjaGFuZ2U6IG9cbiAgfSk7XG59LCBDVCA9IGZ1bmN0aW9uKGUpIHtcbiAgdmFyIHQgPSBlLnZpZXdwb3J0LCBvID0gZS5zdWJqZWN0LCBuID0gZS5jZW50ZXIsIHIgPSBlLmRyYWdTdGFydFRpbWUsIGkgPSBlLnNob3VsZFVzZVRpbWVEYW1wZW5pbmcsIGEgPSBWZCh7XG4gICAgZHJhZ1N0YXJ0VGltZTogcixcbiAgICBjb250YWluZXI6IHQuZnJhbWUsXG4gICAgc3ViamVjdDogbyxcbiAgICBjZW50ZXI6IG4sXG4gICAgc2hvdWxkVXNlVGltZURhbXBlbmluZzogaVxuICB9KTtcbiAgcmV0dXJuIGEgJiYgazYodCwgYSkgPyBhIDogbnVsbDtcbn0sIG1UID0gZnVuY3Rpb24oZSkge1xuICB2YXIgdCA9IGUuZHJvcHBhYmxlLCBvID0gZS5zdWJqZWN0LCBuID0gZS5jZW50ZXIsIHIgPSBlLmRyYWdTdGFydFRpbWUsIGkgPSBlLnNob3VsZFVzZVRpbWVEYW1wZW5pbmcsIGEgPSB0LmZyYW1lO1xuICBpZiAoIWEpXG4gICAgcmV0dXJuIG51bGw7XG4gIHZhciBzID0gVmQoe1xuICAgIGRyYWdTdGFydFRpbWU6IHIsXG4gICAgY29udGFpbmVyOiBhLnBhZ2VNYXJnaW5Cb3gsXG4gICAgc3ViamVjdDogbyxcbiAgICBjZW50ZXI6IG4sXG4gICAgc2hvdWxkVXNlVGltZURhbXBlbmluZzogaVxuICB9KTtcbiAgcmV0dXJuIHMgJiYgTjYodCwgcykgPyBzIDogbnVsbDtcbn0sIFE5ID0gZnVuY3Rpb24oZSkge1xuICB2YXIgdCA9IGUuc3RhdGUsIG8gPSBlLmRyYWdTdGFydFRpbWUsIG4gPSBlLnNob3VsZFVzZVRpbWVEYW1wZW5pbmcsIHIgPSBlLnNjcm9sbFdpbmRvdywgaSA9IGUuc2Nyb2xsRHJvcHBhYmxlLCBhID0gdC5jdXJyZW50LnBhZ2UuYm9yZGVyQm94Q2VudGVyLCBzID0gdC5kaW1lbnNpb25zLmRyYWdnYWJsZXNbdC5jcml0aWNhbC5kcmFnZ2FibGUuaWRdLCBsID0gcy5wYWdlLm1hcmdpbkJveDtcbiAgaWYgKHQuaXNXaW5kb3dTY3JvbGxBbGxvd2VkKSB7XG4gICAgdmFyIHAgPSB0LnZpZXdwb3J0LCBkID0gQ1Qoe1xuICAgICAgZHJhZ1N0YXJ0VGltZTogbyxcbiAgICAgIHZpZXdwb3J0OiBwLFxuICAgICAgc3ViamVjdDogbCxcbiAgICAgIGNlbnRlcjogYSxcbiAgICAgIHNob3VsZFVzZVRpbWVEYW1wZW5pbmc6IG5cbiAgICB9KTtcbiAgICBpZiAoZCkge1xuICAgICAgcihkKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gIH1cbiAgdmFyIGIgPSBiVCh7XG4gICAgY2VudGVyOiBhLFxuICAgIGRlc3RpbmF0aW9uOiAkMih0LmltcGFjdCksXG4gICAgZHJvcHBhYmxlczogdC5kaW1lbnNpb25zLmRyb3BwYWJsZXNcbiAgfSk7XG4gIGlmIChiKSB7XG4gICAgdmFyIE0gPSBtVCh7XG4gICAgICBkcmFnU3RhcnRUaW1lOiBvLFxuICAgICAgZHJvcHBhYmxlOiBiLFxuICAgICAgc3ViamVjdDogbCxcbiAgICAgIGNlbnRlcjogYSxcbiAgICAgIHNob3VsZFVzZVRpbWVEYW1wZW5pbmc6IG5cbiAgICB9KTtcbiAgICBNICYmIGkoYi5kZXNjcmlwdG9yLmlkLCBNKTtcbiAgfVxufSwgTFQgPSBmdW5jdGlvbihlKSB7XG4gIHZhciB0ID0gZS5zY3JvbGxXaW5kb3csIG8gPSBlLnNjcm9sbERyb3BwYWJsZSwgbiA9IE9yKHQpLCByID0gT3IobyksIGkgPSBudWxsLCBhID0gZnVuY3Rpb24oZCkge1xuICAgIGkgfHwgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIiA/IHkxKCExLCBcIkNhbm5vdCBmbHVpZCBzY3JvbGwgaWYgbm90IGRyYWdnaW5nXCIpIDogeTEoITEpKTtcbiAgICB2YXIgYiA9IGksIE0gPSBiLnNob3VsZFVzZVRpbWVEYW1wZW5pbmcsIHUgPSBiLmRyYWdTdGFydFRpbWU7XG4gICAgUTkoe1xuICAgICAgc3RhdGU6IGQsXG4gICAgICBzY3JvbGxXaW5kb3c6IG4sXG4gICAgICBzY3JvbGxEcm9wcGFibGU6IHIsXG4gICAgICBkcmFnU3RhcnRUaW1lOiB1LFxuICAgICAgc2hvdWxkVXNlVGltZURhbXBlbmluZzogTVxuICAgIH0pO1xuICB9LCBzID0gZnVuY3Rpb24oZCkge1xuICAgIFZyKCksIGkgJiYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIiA/IHkxKCExLCBcIkNhbm5vdCBzdGFydCBhdXRvIHNjcm9sbGluZyB3aGVuIGFscmVhZHkgc3RhcnRlZFwiKSA6IHkxKCExKSk7XG4gICAgdmFyIGIgPSBEYXRlLm5vdygpLCBNID0gITEsIHUgPSBmdW5jdGlvbigpIHtcbiAgICAgIE0gPSAhMDtcbiAgICB9O1xuICAgIFE5KHtcbiAgICAgIHN0YXRlOiBkLFxuICAgICAgZHJhZ1N0YXJ0VGltZTogMCxcbiAgICAgIHNob3VsZFVzZVRpbWVEYW1wZW5pbmc6ICExLFxuICAgICAgc2Nyb2xsV2luZG93OiB1LFxuICAgICAgc2Nyb2xsRHJvcHBhYmxlOiB1XG4gICAgfSksIGkgPSB7XG4gICAgICBkcmFnU3RhcnRUaW1lOiBiLFxuICAgICAgc2hvdWxkVXNlVGltZURhbXBlbmluZzogTVxuICAgIH0sIFByKCksIE0gJiYgYShkKTtcbiAgfSwgbCA9IGZ1bmN0aW9uKCkge1xuICAgIGkgJiYgKG4uY2FuY2VsKCksIHIuY2FuY2VsKCksIGkgPSBudWxsKTtcbiAgfTtcbiAgcmV0dXJuIHtcbiAgICBzdGFydDogcyxcbiAgICBzdG9wOiBsLFxuICAgIHNjcm9sbDogYVxuICB9O1xufSwgdlQgPSBmdW5jdGlvbihlKSB7XG4gIHZhciB0ID0gZS5tb3ZlLCBvID0gZS5zY3JvbGxEcm9wcGFibGUsIG4gPSBlLnNjcm9sbFdpbmRvdywgciA9IGZ1bmN0aW9uKHAsIGQpIHtcbiAgICB2YXIgYiA9IEMyKHAuY3VycmVudC5jbGllbnQuc2VsZWN0aW9uLCBkKTtcbiAgICB0KHtcbiAgICAgIGNsaWVudDogYlxuICAgIH0pO1xuICB9LCBpID0gZnVuY3Rpb24ocCwgZCkge1xuICAgIGlmICghTjYocCwgZCkpXG4gICAgICByZXR1cm4gZDtcbiAgICB2YXIgYiA9IGdUKHAsIGQpO1xuICAgIGlmICghYilcbiAgICAgIHJldHVybiBvKHAuZGVzY3JpcHRvci5pZCwgZCksIG51bGw7XG4gICAgdmFyIE0gPSBfMihkLCBiKTtcbiAgICBvKHAuZGVzY3JpcHRvci5pZCwgTSk7XG4gICAgdmFyIHUgPSBfMihkLCBNKTtcbiAgICByZXR1cm4gdTtcbiAgfSwgYSA9IGZ1bmN0aW9uKHAsIGQsIGIpIHtcbiAgICBpZiAoIXAgfHwgIWs2KGQsIGIpKVxuICAgICAgcmV0dXJuIGI7XG4gICAgdmFyIE0gPSBmVChkLCBiKTtcbiAgICBpZiAoIU0pXG4gICAgICByZXR1cm4gbihiKSwgbnVsbDtcbiAgICB2YXIgdSA9IF8yKGIsIE0pO1xuICAgIG4odSk7XG4gICAgdmFyIEEgPSBfMihiLCB1KTtcbiAgICByZXR1cm4gQTtcbiAgfSwgcyA9IGZ1bmN0aW9uKHApIHtcbiAgICB2YXIgZCA9IHAuc2Nyb2xsSnVtcFJlcXVlc3Q7XG4gICAgaWYgKGQpIHtcbiAgICAgIHZhciBiID0gJDIocC5pbXBhY3QpO1xuICAgICAgYiB8fCAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiID8geTEoITEsIFwiQ2Fubm90IHBlcmZvcm0gYSBqdW1wIHNjcm9sbCB3aGVuIHRoZXJlIGlzIG5vIGRlc3RpbmF0aW9uXCIpIDogeTEoITEpKTtcbiAgICAgIHZhciBNID0gaShwLmRpbWVuc2lvbnMuZHJvcHBhYmxlc1tiXSwgZCk7XG4gICAgICBpZiAoTSkge1xuICAgICAgICB2YXIgdSA9IHAudmlld3BvcnQsIEEgPSBhKHAuaXNXaW5kb3dTY3JvbGxBbGxvd2VkLCB1LCBNKTtcbiAgICAgICAgQSAmJiByKHAsIEEpO1xuICAgICAgfVxuICAgIH1cbiAgfTtcbiAgcmV0dXJuIHM7XG59LCBxVCA9IGZ1bmN0aW9uKGUpIHtcbiAgdmFyIHQgPSBlLnNjcm9sbERyb3BwYWJsZSwgbyA9IGUuc2Nyb2xsV2luZG93LCBuID0gZS5tb3ZlLCByID0gTFQoe1xuICAgIHNjcm9sbFdpbmRvdzogbyxcbiAgICBzY3JvbGxEcm9wcGFibGU6IHRcbiAgfSksIGkgPSB2VCh7XG4gICAgbW92ZTogbixcbiAgICBzY3JvbGxXaW5kb3c6IG8sXG4gICAgc2Nyb2xsRHJvcHBhYmxlOiB0XG4gIH0pLCBhID0gZnVuY3Rpb24ocCkge1xuICAgIGlmIChwLnBoYXNlID09PSBcIkRSQUdHSU5HXCIpIHtcbiAgICAgIGlmIChwLm1vdmVtZW50TW9kZSA9PT0gXCJGTFVJRFwiKSB7XG4gICAgICAgIHIuc2Nyb2xsKHApO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBwLnNjcm9sbEp1bXBSZXF1ZXN0ICYmIGkocCk7XG4gICAgfVxuICB9LCBzID0ge1xuICAgIHNjcm9sbDogYSxcbiAgICBzdGFydDogci5zdGFydCxcbiAgICBzdG9wOiByLnN0b3BcbiAgfTtcbiAgcmV0dXJuIHM7XG59LCB0byA9IFwiZGF0YS1yYmRcIiwgb28gPSBmdW5jdGlvbigpIHtcbiAgdmFyIGUgPSB0byArIFwiLWRyYWctaGFuZGxlXCI7XG4gIHJldHVybiB7XG4gICAgYmFzZTogZSxcbiAgICBkcmFnZ2FibGVJZDogZSArIFwiLWRyYWdnYWJsZS1pZFwiLFxuICAgIGNvbnRleHRJZDogZSArIFwiLWNvbnRleHQtaWRcIlxuICB9O1xufSgpLCBBNSA9IGZ1bmN0aW9uKCkge1xuICB2YXIgZSA9IHRvICsgXCItZHJhZ2dhYmxlXCI7XG4gIHJldHVybiB7XG4gICAgYmFzZTogZSxcbiAgICBjb250ZXh0SWQ6IGUgKyBcIi1jb250ZXh0LWlkXCIsXG4gICAgaWQ6IGUgKyBcIi1pZFwiXG4gIH07XG59KCksIHlUID0gZnVuY3Rpb24oKSB7XG4gIHZhciBlID0gdG8gKyBcIi1kcm9wcGFibGVcIjtcbiAgcmV0dXJuIHtcbiAgICBiYXNlOiBlLFxuICAgIGNvbnRleHRJZDogZSArIFwiLWNvbnRleHQtaWRcIixcbiAgICBpZDogZSArIFwiLWlkXCJcbiAgfTtcbn0oKSwgWjkgPSB7XG4gIGNvbnRleHRJZDogdG8gKyBcIi1zY3JvbGwtY29udGFpbmVyLWNvbnRleHQtaWRcIlxufSwgd1QgPSBmdW5jdGlvbih0KSB7XG4gIHJldHVybiBmdW5jdGlvbihvKSB7XG4gICAgcmV0dXJuIFwiW1wiICsgbyArICc9XCInICsgdCArICdcIl0nO1xuICB9O1xufSwgTm8gPSBmdW5jdGlvbih0LCBvKSB7XG4gIHJldHVybiB0Lm1hcChmdW5jdGlvbihuKSB7XG4gICAgdmFyIHIgPSBuLnN0eWxlc1tvXTtcbiAgICByZXR1cm4gciA/IG4uc2VsZWN0b3IgKyBcIiB7IFwiICsgciArIFwiIH1cIiA6IFwiXCI7XG4gIH0pLmpvaW4oXCIgXCIpO1xufSwgeFQgPSBcInBvaW50ZXItZXZlbnRzOiBub25lO1wiLCBXVCA9IGZ1bmN0aW9uKGUpIHtcbiAgdmFyIHQgPSB3VChlKSwgbyA9IGZ1bmN0aW9uKCkge1xuICAgIHZhciBzID0gYFxuICAgICAgY3Vyc29yOiAtd2Via2l0LWdyYWI7XG4gICAgICBjdXJzb3I6IGdyYWI7XG4gICAgYDtcbiAgICByZXR1cm4ge1xuICAgICAgc2VsZWN0b3I6IHQob28uY29udGV4dElkKSxcbiAgICAgIHN0eWxlczoge1xuICAgICAgICBhbHdheXM6IGBcbiAgICAgICAgICAtd2Via2l0LXRvdWNoLWNhbGxvdXQ6IG5vbmU7XG4gICAgICAgICAgLXdlYmtpdC10YXAtaGlnaGxpZ2h0LWNvbG9yOiByZ2JhKDAsMCwwLDApO1xuICAgICAgICAgIHRvdWNoLWFjdGlvbjogbWFuaXB1bGF0aW9uO1xuICAgICAgICBgLFxuICAgICAgICByZXN0aW5nOiBzLFxuICAgICAgICBkcmFnZ2luZzogeFQsXG4gICAgICAgIGRyb3BBbmltYXRpbmc6IHNcbiAgICAgIH1cbiAgICB9O1xuICB9KCksIG4gPSBmdW5jdGlvbigpIHtcbiAgICB2YXIgcyA9IGBcbiAgICAgIHRyYW5zaXRpb246IGAgKyBfby5vdXRPZlRoZVdheSArIGA7XG4gICAgYDtcbiAgICByZXR1cm4ge1xuICAgICAgc2VsZWN0b3I6IHQoQTUuY29udGV4dElkKSxcbiAgICAgIHN0eWxlczoge1xuICAgICAgICBkcmFnZ2luZzogcyxcbiAgICAgICAgZHJvcEFuaW1hdGluZzogcyxcbiAgICAgICAgdXNlckNhbmNlbDogc1xuICAgICAgfVxuICAgIH07XG4gIH0oKSwgciA9IHtcbiAgICBzZWxlY3RvcjogdCh5VC5jb250ZXh0SWQpLFxuICAgIHN0eWxlczoge1xuICAgICAgYWx3YXlzOiBcIm92ZXJmbG93LWFuY2hvcjogbm9uZTtcIlxuICAgIH1cbiAgfSwgaSA9IHtcbiAgICBzZWxlY3RvcjogXCJib2R5XCIsXG4gICAgc3R5bGVzOiB7XG4gICAgICBkcmFnZ2luZzogYFxuICAgICAgICBjdXJzb3I6IGdyYWJiaW5nO1xuICAgICAgICBjdXJzb3I6IC13ZWJraXQtZ3JhYmJpbmc7XG4gICAgICAgIHVzZXItc2VsZWN0OiBub25lO1xuICAgICAgICAtd2Via2l0LXVzZXItc2VsZWN0OiBub25lO1xuICAgICAgICAtbW96LXVzZXItc2VsZWN0OiBub25lO1xuICAgICAgICAtbXMtdXNlci1zZWxlY3Q6IG5vbmU7XG4gICAgICAgIG92ZXJmbG93LWFuY2hvcjogbm9uZTtcbiAgICAgIGBcbiAgICB9XG4gIH0sIGEgPSBbbiwgbywgciwgaV07XG4gIHJldHVybiB7XG4gICAgYWx3YXlzOiBObyhhLCBcImFsd2F5c1wiKSxcbiAgICByZXN0aW5nOiBObyhhLCBcInJlc3RpbmdcIiksXG4gICAgZHJhZ2dpbmc6IE5vKGEsIFwiZHJhZ2dpbmdcIiksXG4gICAgZHJvcEFuaW1hdGluZzogTm8oYSwgXCJkcm9wQW5pbWF0aW5nXCIpLFxuICAgIHVzZXJDYW5jZWw6IE5vKGEsIFwidXNlckNhbmNlbFwiKVxuICB9O1xufSwgZWUgPSB0eXBlb2Ygd2luZG93IDwgXCJ1XCIgJiYgdHlwZW9mIHdpbmRvdy5kb2N1bWVudCA8IFwidVwiICYmIHR5cGVvZiB3aW5kb3cuZG9jdW1lbnQuY3JlYXRlRWxlbWVudCA8IFwidVwiID8gVDUgOiBQMSwgbmEgPSBmdW5jdGlvbigpIHtcbiAgdmFyIHQgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKFwiaGVhZFwiKTtcbiAgcmV0dXJuIHQgfHwgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIiA/IHkxKCExLCBcIkNhbm5vdCBmaW5kIHRoZSBoZWFkIHRvIGFwcGVuZCBhIHN0eWxlIHRvXCIpIDogeTEoITEpKSwgdDtcbn0sIGo5ID0gZnVuY3Rpb24odCkge1xuICB2YXIgbyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJzdHlsZVwiKTtcbiAgcmV0dXJuIHQgJiYgby5zZXRBdHRyaWJ1dGUoXCJub25jZVwiLCB0KSwgby50eXBlID0gXCJ0ZXh0L2Nzc1wiLCBvO1xufTtcbmZ1bmN0aW9uIFJUKGUsIHQpIHtcbiAgdmFyIG8gPSBSMChmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gV1QoZSk7XG4gIH0sIFtlXSksIG4gPSBuMChudWxsKSwgciA9IG4wKG51bGwpLCBpID0gbDAocDIoZnVuY3Rpb24oYikge1xuICAgIHZhciBNID0gci5jdXJyZW50O1xuICAgIE0gfHwgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIiA/IHkxKCExLCBcIkNhbm5vdCBzZXQgZHluYW1pYyBzdHlsZSBlbGVtZW50IGlmIGl0IGlzIG5vdCBzZXRcIikgOiB5MSghMSkpLCBNLnRleHRDb250ZW50ID0gYjtcbiAgfSksIFtdKSwgYSA9IGwwKGZ1bmN0aW9uKGIpIHtcbiAgICB2YXIgTSA9IG4uY3VycmVudDtcbiAgICBNIHx8IChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIgPyB5MSghMSwgXCJDYW5ub3Qgc2V0IGR5bmFtaWMgc3R5bGUgZWxlbWVudCBpZiBpdCBpcyBub3Qgc2V0XCIpIDogeTEoITEpKSwgTS50ZXh0Q29udGVudCA9IGI7XG4gIH0sIFtdKTtcbiAgZWUoZnVuY3Rpb24oKSB7XG4gICAgIW4uY3VycmVudCAmJiAhci5jdXJyZW50IHx8IChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIgPyB5MSghMSwgXCJzdHlsZSBlbGVtZW50cyBhbHJlYWR5IG1vdW50ZWRcIikgOiB5MSghMSkpO1xuICAgIHZhciBiID0gajkodCksIE0gPSBqOSh0KTtcbiAgICByZXR1cm4gbi5jdXJyZW50ID0gYiwgci5jdXJyZW50ID0gTSwgYi5zZXRBdHRyaWJ1dGUodG8gKyBcIi1hbHdheXNcIiwgZSksIE0uc2V0QXR0cmlidXRlKHRvICsgXCItZHluYW1pY1wiLCBlKSwgbmEoKS5hcHBlbmRDaGlsZChiKSwgbmEoKS5hcHBlbmRDaGlsZChNKSwgYShvLmFsd2F5cyksIGkoby5yZXN0aW5nKSwgZnVuY3Rpb24oKSB7XG4gICAgICB2YXIgdSA9IGZ1bmN0aW9uKHopIHtcbiAgICAgICAgdmFyIGYgPSB6LmN1cnJlbnQ7XG4gICAgICAgIGYgfHwgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIiA/IHkxKCExLCBcIkNhbm5vdCB1bm1vdW50IHJlZiBhcyBpdCBpcyBub3Qgc2V0XCIpIDogeTEoITEpKSwgbmEoKS5yZW1vdmVDaGlsZChmKSwgei5jdXJyZW50ID0gbnVsbDtcbiAgICAgIH07XG4gICAgICB1KG4pLCB1KHIpO1xuICAgIH07XG4gIH0sIFt0LCBhLCBpLCBvLmFsd2F5cywgby5yZXN0aW5nLCBlXSk7XG4gIHZhciBzID0gbDAoZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIGkoby5kcmFnZ2luZyk7XG4gIH0sIFtpLCBvLmRyYWdnaW5nXSksIGwgPSBsMChmdW5jdGlvbihiKSB7XG4gICAgaWYgKGIgPT09IFwiRFJPUFwiKSB7XG4gICAgICBpKG8uZHJvcEFuaW1hdGluZyk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGkoby51c2VyQ2FuY2VsKTtcbiAgfSwgW2ksIG8uZHJvcEFuaW1hdGluZywgby51c2VyQ2FuY2VsXSksIHAgPSBsMChmdW5jdGlvbigpIHtcbiAgICByLmN1cnJlbnQgJiYgaShvLnJlc3RpbmcpO1xuICB9LCBbaSwgby5yZXN0aW5nXSksIGQgPSBSMChmdW5jdGlvbigpIHtcbiAgICByZXR1cm4ge1xuICAgICAgZHJhZ2dpbmc6IHMsXG4gICAgICBkcm9wcGluZzogbCxcbiAgICAgIHJlc3Rpbmc6IHBcbiAgICB9O1xuICB9LCBbcywgbCwgcF0pO1xuICByZXR1cm4gZDtcbn1cbnZhciBGZCA9IGZ1bmN0aW9uKGUpIHtcbiAgcmV0dXJuIGUgJiYgZS5vd25lckRvY3VtZW50ID8gZS5vd25lckRvY3VtZW50LmRlZmF1bHRWaWV3IDogd2luZG93O1xufTtcbmZ1bmN0aW9uIEZyKGUpIHtcbiAgcmV0dXJuIGUgaW5zdGFuY2VvZiBGZChlKS5IVE1MRWxlbWVudDtcbn1cbmZ1bmN0aW9uIFhkKGUsIHQpIHtcbiAgdmFyIG8gPSBcIltcIiArIG9vLmNvbnRleHRJZCArICc9XCInICsgZSArICdcIl0nLCBuID0gcGQoZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbChvKSk7XG4gIGlmICghbi5sZW5ndGgpXG4gICAgcmV0dXJuIHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIiAmJiBaMCgnVW5hYmxlIHRvIGZpbmQgYW55IGRyYWcgaGFuZGxlcyBpbiB0aGUgY29udGV4dCBcIicgKyBlICsgJ1wiJyksIG51bGw7XG4gIHZhciByID0gVXQobiwgZnVuY3Rpb24oaSkge1xuICAgIHJldHVybiBpLmdldEF0dHJpYnV0ZShvby5kcmFnZ2FibGVJZCkgPT09IHQ7XG4gIH0pO1xuICByZXR1cm4gciA/IEZyKHIpID8gciA6IChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIgJiYgWjAoXCJkcmFnIGhhbmRsZSBuZWVkcyB0byBiZSBhIEhUTUxFbGVtZW50XCIpLCBudWxsKSA6IChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIgJiYgWjAoJ1VuYWJsZSB0byBmaW5kIGRyYWcgaGFuZGxlIHdpdGggaWQgXCInICsgdCArICdcIiBhcyBubyBoYW5kbGUgd2l0aCBhIG1hdGNoaW5nIGlkIHdhcyBmb3VuZCcpLCBudWxsKTtcbn1cbmZ1bmN0aW9uIEJUKGUpIHtcbiAgdmFyIHQgPSBuMCh7fSksIG8gPSBuMChudWxsKSwgbiA9IG4wKG51bGwpLCByID0gbjAoITEpLCBpID0gbDAoZnVuY3Rpb24oTSwgdSkge1xuICAgIHZhciBBID0ge1xuICAgICAgaWQ6IE0sXG4gICAgICBmb2N1czogdVxuICAgIH07XG4gICAgcmV0dXJuIHQuY3VycmVudFtNXSA9IEEsIGZ1bmN0aW9uKCkge1xuICAgICAgdmFyIGYgPSB0LmN1cnJlbnQsIE8gPSBmW01dO1xuICAgICAgTyAhPT0gQSAmJiBkZWxldGUgZltNXTtcbiAgICB9O1xuICB9LCBbXSksIGEgPSBsMChmdW5jdGlvbihNKSB7XG4gICAgdmFyIHUgPSBYZChlLCBNKTtcbiAgICB1ICYmIHUgIT09IGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQgJiYgdS5mb2N1cygpO1xuICB9LCBbZV0pLCBzID0gbDAoZnVuY3Rpb24oTSwgdSkge1xuICAgIG8uY3VycmVudCA9PT0gTSAmJiAoby5jdXJyZW50ID0gdSk7XG4gIH0sIFtdKSwgbCA9IGwwKGZ1bmN0aW9uKCkge1xuICAgIG4uY3VycmVudCB8fCByLmN1cnJlbnQgJiYgKG4uY3VycmVudCA9IHJlcXVlc3RBbmltYXRpb25GcmFtZShmdW5jdGlvbigpIHtcbiAgICAgIG4uY3VycmVudCA9IG51bGw7XG4gICAgICB2YXIgTSA9IG8uY3VycmVudDtcbiAgICAgIE0gJiYgYShNKTtcbiAgICB9KSk7XG4gIH0sIFthXSksIHAgPSBsMChmdW5jdGlvbihNKSB7XG4gICAgby5jdXJyZW50ID0gbnVsbDtcbiAgICB2YXIgdSA9IGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQ7XG4gICAgdSAmJiB1LmdldEF0dHJpYnV0ZShvby5kcmFnZ2FibGVJZCkgPT09IE0gJiYgKG8uY3VycmVudCA9IE0pO1xuICB9LCBbXSk7XG4gIGVlKGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiByLmN1cnJlbnQgPSAhMCwgZnVuY3Rpb24oKSB7XG4gICAgICByLmN1cnJlbnQgPSAhMTtcbiAgICAgIHZhciBNID0gbi5jdXJyZW50O1xuICAgICAgTSAmJiBjYW5jZWxBbmltYXRpb25GcmFtZShNKTtcbiAgICB9O1xuICB9LCBbXSk7XG4gIHZhciBkID0gUjAoZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHJlZ2lzdGVyOiBpLFxuICAgICAgdHJ5UmVjb3JkRm9jdXM6IHAsXG4gICAgICB0cnlSZXN0b3JlRm9jdXNSZWNvcmRlZDogbCxcbiAgICAgIHRyeVNoaWZ0UmVjb3JkOiBzXG4gICAgfTtcbiAgfSwgW2ksIHAsIGwsIHNdKTtcbiAgcmV0dXJuIGQ7XG59XG5mdW5jdGlvbiBTVCgpIHtcbiAgdmFyIGUgPSB7XG4gICAgZHJhZ2dhYmxlczoge30sXG4gICAgZHJvcHBhYmxlczoge31cbiAgfSwgdCA9IFtdO1xuICBmdW5jdGlvbiBvKGIpIHtcbiAgICByZXR1cm4gdC5wdXNoKGIpLCBmdW5jdGlvbigpIHtcbiAgICAgIHZhciB1ID0gdC5pbmRleE9mKGIpO1xuICAgICAgdSAhPT0gLTEgJiYgdC5zcGxpY2UodSwgMSk7XG4gICAgfTtcbiAgfVxuICBmdW5jdGlvbiBuKGIpIHtcbiAgICB0Lmxlbmd0aCAmJiB0LmZvckVhY2goZnVuY3Rpb24oTSkge1xuICAgICAgcmV0dXJuIE0oYik7XG4gICAgfSk7XG4gIH1cbiAgZnVuY3Rpb24gcihiKSB7XG4gICAgcmV0dXJuIGUuZHJhZ2dhYmxlc1tiXSB8fCBudWxsO1xuICB9XG4gIGZ1bmN0aW9uIGkoYikge1xuICAgIHZhciBNID0gcihiKTtcbiAgICByZXR1cm4gTSB8fCAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiID8geTEoITEsIFwiQ2Fubm90IGZpbmQgZHJhZ2dhYmxlIGVudHJ5IHdpdGggaWQgW1wiICsgYiArIFwiXVwiKSA6IHkxKCExKSksIE07XG4gIH1cbiAgdmFyIGEgPSB7XG4gICAgcmVnaXN0ZXI6IGZ1bmN0aW9uKE0pIHtcbiAgICAgIGUuZHJhZ2dhYmxlc1tNLmRlc2NyaXB0b3IuaWRdID0gTSwgbih7XG4gICAgICAgIHR5cGU6IFwiQURESVRJT05cIixcbiAgICAgICAgdmFsdWU6IE1cbiAgICAgIH0pO1xuICAgIH0sXG4gICAgdXBkYXRlOiBmdW5jdGlvbihNLCB1KSB7XG4gICAgICB2YXIgQSA9IGUuZHJhZ2dhYmxlc1t1LmRlc2NyaXB0b3IuaWRdO1xuICAgICAgQSAmJiBBLnVuaXF1ZUlkID09PSBNLnVuaXF1ZUlkICYmIChkZWxldGUgZS5kcmFnZ2FibGVzW3UuZGVzY3JpcHRvci5pZF0sIGUuZHJhZ2dhYmxlc1tNLmRlc2NyaXB0b3IuaWRdID0gTSk7XG4gICAgfSxcbiAgICB1bnJlZ2lzdGVyOiBmdW5jdGlvbihNKSB7XG4gICAgICB2YXIgdSA9IE0uZGVzY3JpcHRvci5pZCwgQSA9IHIodSk7XG4gICAgICBBICYmIE0udW5pcXVlSWQgPT09IEEudW5pcXVlSWQgJiYgKGRlbGV0ZSBlLmRyYWdnYWJsZXNbdV0sIG4oe1xuICAgICAgICB0eXBlOiBcIlJFTU9WQUxcIixcbiAgICAgICAgdmFsdWU6IE1cbiAgICAgIH0pKTtcbiAgICB9LFxuICAgIGdldEJ5SWQ6IGksXG4gICAgZmluZEJ5SWQ6IHIsXG4gICAgZXhpc3RzOiBmdW5jdGlvbihNKSB7XG4gICAgICByZXR1cm4gISFyKE0pO1xuICAgIH0sXG4gICAgZ2V0QWxsQnlUeXBlOiBmdW5jdGlvbihNKSB7XG4gICAgICByZXR1cm4gdzQoZS5kcmFnZ2FibGVzKS5maWx0ZXIoZnVuY3Rpb24odSkge1xuICAgICAgICByZXR1cm4gdS5kZXNjcmlwdG9yLnR5cGUgPT09IE07XG4gICAgICB9KTtcbiAgICB9XG4gIH07XG4gIGZ1bmN0aW9uIHMoYikge1xuICAgIHJldHVybiBlLmRyb3BwYWJsZXNbYl0gfHwgbnVsbDtcbiAgfVxuICBmdW5jdGlvbiBsKGIpIHtcbiAgICB2YXIgTSA9IHMoYik7XG4gICAgcmV0dXJuIE0gfHwgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIiA/IHkxKCExLCBcIkNhbm5vdCBmaW5kIGRyb3BwYWJsZSBlbnRyeSB3aXRoIGlkIFtcIiArIGIgKyBcIl1cIikgOiB5MSghMSkpLCBNO1xuICB9XG4gIHZhciBwID0ge1xuICAgIHJlZ2lzdGVyOiBmdW5jdGlvbihNKSB7XG4gICAgICBlLmRyb3BwYWJsZXNbTS5kZXNjcmlwdG9yLmlkXSA9IE07XG4gICAgfSxcbiAgICB1bnJlZ2lzdGVyOiBmdW5jdGlvbihNKSB7XG4gICAgICB2YXIgdSA9IHMoTS5kZXNjcmlwdG9yLmlkKTtcbiAgICAgIHUgJiYgTS51bmlxdWVJZCA9PT0gdS51bmlxdWVJZCAmJiBkZWxldGUgZS5kcm9wcGFibGVzW00uZGVzY3JpcHRvci5pZF07XG4gICAgfSxcbiAgICBnZXRCeUlkOiBsLFxuICAgIGZpbmRCeUlkOiBzLFxuICAgIGV4aXN0czogZnVuY3Rpb24oTSkge1xuICAgICAgcmV0dXJuICEhcyhNKTtcbiAgICB9LFxuICAgIGdldEFsbEJ5VHlwZTogZnVuY3Rpb24oTSkge1xuICAgICAgcmV0dXJuIHc0KGUuZHJvcHBhYmxlcykuZmlsdGVyKGZ1bmN0aW9uKHUpIHtcbiAgICAgICAgcmV0dXJuIHUuZGVzY3JpcHRvci50eXBlID09PSBNO1xuICAgICAgfSk7XG4gICAgfVxuICB9O1xuICBmdW5jdGlvbiBkKCkge1xuICAgIGUuZHJhZ2dhYmxlcyA9IHt9LCBlLmRyb3BwYWJsZXMgPSB7fSwgdC5sZW5ndGggPSAwO1xuICB9XG4gIHJldHVybiB7XG4gICAgZHJhZ2dhYmxlOiBhLFxuICAgIGRyb3BwYWJsZTogcCxcbiAgICBzdWJzY3JpYmU6IG8sXG4gICAgY2xlYW46IGRcbiAgfTtcbn1cbmZ1bmN0aW9uIEVUKCkge1xuICB2YXIgZSA9IFIwKFNULCBbXSk7XG4gIHJldHVybiBQMShmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgICByZXF1ZXN0QW5pbWF0aW9uRnJhbWUoZS5jbGVhbik7XG4gICAgfTtcbiAgfSwgW2VdKSwgZTtcbn1cbnZhciBUNiA9IG0xLmNyZWF0ZUNvbnRleHQobnVsbCksIHZyID0gZnVuY3Rpb24oKSB7XG4gIHZhciBlID0gZG9jdW1lbnQuYm9keTtcbiAgcmV0dXJuIGUgfHwgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIiA/IHkxKCExLCBcIkNhbm5vdCBmaW5kIGRvY3VtZW50LmJvZHlcIikgOiB5MSghMSkpLCBlO1xufSwga1QgPSB7XG4gIHBvc2l0aW9uOiBcImFic29sdXRlXCIsXG4gIHdpZHRoOiBcIjFweFwiLFxuICBoZWlnaHQ6IFwiMXB4XCIsXG4gIG1hcmdpbjogXCItMXB4XCIsXG4gIGJvcmRlcjogXCIwXCIsXG4gIHBhZGRpbmc6IFwiMFwiLFxuICBvdmVyZmxvdzogXCJoaWRkZW5cIixcbiAgY2xpcDogXCJyZWN0KDAgMCAwIDApXCIsXG4gIFwiY2xpcC1wYXRoXCI6IFwiaW5zZXQoMTAwJSlcIlxufSwgTlQgPSBmdW5jdGlvbih0KSB7XG4gIHJldHVybiBcInJiZC1hbm5vdW5jZW1lbnQtXCIgKyB0O1xufTtcbmZ1bmN0aW9uIFRUKGUpIHtcbiAgdmFyIHQgPSBSMChmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gTlQoZSk7XG4gIH0sIFtlXSksIG8gPSBuMChudWxsKTtcbiAgUDEoZnVuY3Rpb24oKSB7XG4gICAgdmFyIGkgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpO1xuICAgIHJldHVybiBvLmN1cnJlbnQgPSBpLCBpLmlkID0gdCwgaS5zZXRBdHRyaWJ1dGUoXCJhcmlhLWxpdmVcIiwgXCJhc3NlcnRpdmVcIiksIGkuc2V0QXR0cmlidXRlKFwiYXJpYS1hdG9taWNcIiwgXCJ0cnVlXCIpLCBhMChpLnN0eWxlLCBrVCksIHZyKCkuYXBwZW5kQ2hpbGQoaSksIGZ1bmN0aW9uKCkge1xuICAgICAgc2V0VGltZW91dChmdW5jdGlvbigpIHtcbiAgICAgICAgdmFyIGwgPSB2cigpO1xuICAgICAgICBsLmNvbnRhaW5zKGkpICYmIGwucmVtb3ZlQ2hpbGQoaSksIGkgPT09IG8uY3VycmVudCAmJiAoby5jdXJyZW50ID0gbnVsbCk7XG4gICAgICB9KTtcbiAgICB9O1xuICB9LCBbdF0pO1xuICB2YXIgbiA9IGwwKGZ1bmN0aW9uKHIpIHtcbiAgICB2YXIgaSA9IG8uY3VycmVudDtcbiAgICBpZiAoaSkge1xuICAgICAgaS50ZXh0Q29udGVudCA9IHI7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIiAmJiBaMChgXG4gICAgICBBIHNjcmVlbiByZWFkZXIgbWVzc2FnZSB3YXMgdHJ5aW5nIHRvIGJlIGFubm91bmNlZCBidXQgaXQgd2FzIHVuYWJsZSB0byBkbyBzby5cbiAgICAgIFRoaXMgY2FuIG9jY3VyIGlmIHlvdSB1bm1vdW50IHlvdXIgPERyYWdEcm9wQ29udGV4dCAvPiBpbiB5b3VyIG9uRHJhZ0VuZC5cbiAgICAgIENvbnNpZGVyIGNhbGxpbmcgcHJvdmlkZWQuYW5ub3VuY2UoKSBiZWZvcmUgdGhlIHVubW91bnQgc28gdGhhdCB0aGUgaW5zdHJ1Y3Rpb24gd2lsbFxuICAgICAgbm90IGJlIGxvc3QgZm9yIHVzZXJzIHJlbHlpbmcgb24gYSBzY3JlZW4gcmVhZGVyLlxuXG4gICAgICBNZXNzYWdlIG5vdCBwYXNzZWQgdG8gc2NyZWVuIHJlYWRlcjpcblxuICAgICAgXCJgICsgciArIGBcIlxuICAgIGApO1xuICB9LCBbXSk7XG4gIHJldHVybiBuO1xufVxudmFyIElUID0gMCwgRFQgPSB7XG4gIHNlcGFyYXRvcjogXCI6OlwiXG59O1xuZnVuY3Rpb24gSTYoZSwgdCkge1xuICByZXR1cm4gdCA9PT0gdm9pZCAwICYmICh0ID0gRFQpLCBSMChmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gXCJcIiArIGUgKyB0LnNlcGFyYXRvciArIElUKys7XG4gIH0sIFt0LnNlcGFyYXRvciwgZV0pO1xufVxuZnVuY3Rpb24gSFQoZSkge1xuICB2YXIgdCA9IGUuY29udGV4dElkLCBvID0gZS51bmlxdWVJZDtcbiAgcmV0dXJuIFwicmJkLWhpZGRlbi10ZXh0LVwiICsgdCArIFwiLVwiICsgbztcbn1cbmZ1bmN0aW9uIFZUKGUpIHtcbiAgdmFyIHQgPSBlLmNvbnRleHRJZCwgbyA9IGUudGV4dCwgbiA9IEk2KFwiaGlkZGVuLXRleHRcIiwge1xuICAgIHNlcGFyYXRvcjogXCItXCJcbiAgfSksIHIgPSBSMChmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gSFQoe1xuICAgICAgY29udGV4dElkOiB0LFxuICAgICAgdW5pcXVlSWQ6IG5cbiAgICB9KTtcbiAgfSwgW24sIHRdKTtcbiAgcmV0dXJuIFAxKGZ1bmN0aW9uKCkge1xuICAgIHZhciBhID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImRpdlwiKTtcbiAgICByZXR1cm4gYS5pZCA9IHIsIGEudGV4dENvbnRlbnQgPSBvLCBhLnN0eWxlLmRpc3BsYXkgPSBcIm5vbmVcIiwgdnIoKS5hcHBlbmRDaGlsZChhKSwgZnVuY3Rpb24oKSB7XG4gICAgICB2YXIgbCA9IHZyKCk7XG4gICAgICBsLmNvbnRhaW5zKGEpICYmIGwucmVtb3ZlQ2hpbGQoYSk7XG4gICAgfTtcbiAgfSwgW3IsIG9dKSwgcjtcbn1cbnZhciBlaSA9IG0xLmNyZWF0ZUNvbnRleHQobnVsbCksIFBUID0ge1xuICByZWFjdDogXCJeMTYuOC41IHx8IF4xNy4wLjAgfHwgXjE4LjAuMFwiLFxuICBcInJlYWN0LWRvbVwiOiBcIl4xNi44LjUgfHwgXjE3LjAuMCB8fCBeMTguMC4wXCJcbn0sIEZUID0gLyhcXGQrKVxcLihcXGQrKVxcLihcXGQrKS8sIEs5ID0gZnVuY3Rpb24odCkge1xuICB2YXIgbyA9IEZULmV4ZWModCk7XG4gIG8gPT0gbnVsbCAmJiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiID8geTEoITEsIFwiVW5hYmxlIHRvIHBhcnNlIFJlYWN0IHZlcnNpb24gXCIgKyB0KSA6IHkxKCExKSk7XG4gIHZhciBuID0gTnVtYmVyKG9bMV0pLCByID0gTnVtYmVyKG9bMl0pLCBpID0gTnVtYmVyKG9bM10pO1xuICByZXR1cm4ge1xuICAgIG1ham9yOiBuLFxuICAgIG1pbm9yOiByLFxuICAgIHBhdGNoOiBpLFxuICAgIHJhdzogdFxuICB9O1xufSwgWFQgPSBmdW5jdGlvbih0LCBvKSB7XG4gIHJldHVybiBvLm1ham9yID4gdC5tYWpvciA/ICEwIDogby5tYWpvciA8IHQubWFqb3IgPyAhMSA6IG8ubWlub3IgPiB0Lm1pbm9yID8gITAgOiBvLm1pbm9yIDwgdC5taW5vciA/ICExIDogby5wYXRjaCA+PSB0LnBhdGNoO1xufSwgVVQgPSBmdW5jdGlvbihlLCB0KSB7XG4gIHZhciBvID0gSzkoZSksIG4gPSBLOSh0KTtcbiAgWFQobywgbikgfHwgcHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiICYmIFowKGBcbiAgICBSZWFjdCB2ZXJzaW9uOiBbYCArIG4ucmF3ICsgYF1cbiAgICBkb2VzIG5vdCBzYXRpc2Z5IGV4cGVjdGVkIHBlZXIgZGVwZW5kZW5jeSB2ZXJzaW9uOiBbYCArIG8ucmF3ICsgYF1cblxuICAgIFRoaXMgY2FuIHJlc3VsdCBpbiBydW4gdGltZSBidWdzLCBhbmQgZXZlbiBmYXRhbCBjcmFzaGVzXG4gIGApO1xufSwgaWEgPSBgXG4gIFdlIGV4cGVjdCBhIGh0bWw1IGRvY3R5cGU6IDwhZG9jdHlwZSBodG1sPlxuICBUaGlzIGlzIHRvIGVuc3VyZSBjb25zaXN0ZW50IGJyb3dzZXIgbGF5b3V0IGFuZCBtZWFzdXJlbWVudFxuXG4gIE1vcmUgaW5mb3JtYXRpb246IGh0dHBzOi8vZ2l0aHViLmNvbS9hdGxhc3NpYW4vcmVhY3QtYmVhdXRpZnVsLWRuZC9ibG9iL21hc3Rlci9kb2NzL2d1aWRlcy9kb2N0eXBlLm1kXG5gLCBZVCA9IGZ1bmN0aW9uKGUpIHtcbiAgdmFyIHQgPSBlLmRvY3R5cGU7XG4gIGlmICghdCkge1xuICAgIHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIiAmJiBaMChgXG4gICAgICBObyA8IWRvY3R5cGUgaHRtbD4gZm91bmQuXG5cbiAgICAgIGAgKyBpYSArIGBcbiAgICBgKTtcbiAgICByZXR1cm47XG4gIH1cbiAgdC5uYW1lLnRvTG93ZXJDYXNlKCkgIT09IFwiaHRtbFwiICYmIHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIiAmJiBaMChgXG4gICAgICBVbmV4cGVjdGVkIDwhZG9jdHlwZT4gZm91bmQ6IChgICsgdC5uYW1lICsgYClcblxuICAgICAgYCArIGlhICsgYFxuICAgIGApLCB0LnB1YmxpY0lkICE9PSBcIlwiICYmIHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIiAmJiBaMChgXG4gICAgICBVbmV4cGVjdGVkIDwhZG9jdHlwZT4gcHVibGljSWQgZm91bmQ6IChgICsgdC5wdWJsaWNJZCArIGApXG4gICAgICBBIGh0bWw1IGRvY3R5cGUgZG9lcyBub3QgaGF2ZSBhIHB1YmxpY0lkXG5cbiAgICAgIGAgKyBpYSArIGBcbiAgICBgKTtcbn07XG5mdW5jdGlvbiBENihlKSB7XG4gIHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIiAmJiBlKCk7XG59XG5mdW5jdGlvbiBYcihlLCB0KSB7XG4gIEQ2KGZ1bmN0aW9uKCkge1xuICAgIFAxKGZ1bmN0aW9uKCkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgZSgpO1xuICAgICAgfSBjYXRjaCAobykge1xuICAgICAgICBsNShgXG4gICAgICAgICAgQSBzZXR1cCBwcm9ibGVtIHdhcyBlbmNvdW50ZXJlZC5cblxuICAgICAgICAgID4gYCArIG8ubWVzc2FnZSArIGBcbiAgICAgICAgYCk7XG4gICAgICB9XG4gICAgfSwgdCk7XG4gIH0pO1xufVxuZnVuY3Rpb24gR1QoKSB7XG4gIFhyKGZ1bmN0aW9uKCkge1xuICAgIFVUKFBULnJlYWN0LCBtMS52ZXJzaW9uKSwgWVQoZG9jdW1lbnQpO1xuICB9LCBbXSk7XG59XG5mdW5jdGlvbiBINihlKSB7XG4gIHZhciB0ID0gbjAoZSk7XG4gIHJldHVybiBQMShmdW5jdGlvbigpIHtcbiAgICB0LmN1cnJlbnQgPSBlO1xuICB9KSwgdDtcbn1cbmZ1bmN0aW9uIFFUKCkge1xuICB2YXIgZSA9IG51bGw7XG4gIGZ1bmN0aW9uIHQoKSB7XG4gICAgcmV0dXJuICEhZTtcbiAgfVxuICBmdW5jdGlvbiBvKGEpIHtcbiAgICByZXR1cm4gYSA9PT0gZTtcbiAgfVxuICBmdW5jdGlvbiBuKGEpIHtcbiAgICBlICYmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIgPyB5MSghMSwgXCJDYW5ub3QgY2xhaW0gbG9jayBhcyBpdCBpcyBhbHJlYWR5IGNsYWltZWRcIikgOiB5MSghMSkpO1xuICAgIHZhciBzID0ge1xuICAgICAgYWJhbmRvbjogYVxuICAgIH07XG4gICAgcmV0dXJuIGUgPSBzLCBzO1xuICB9XG4gIGZ1bmN0aW9uIHIoKSB7XG4gICAgZSB8fCAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiID8geTEoITEsIFwiQ2Fubm90IHJlbGVhc2UgbG9jayB3aGVuIHRoZXJlIGlzIG5vIGxvY2tcIikgOiB5MSghMSkpLCBlID0gbnVsbDtcbiAgfVxuICBmdW5jdGlvbiBpKCkge1xuICAgIGUgJiYgKGUuYWJhbmRvbigpLCByKCkpO1xuICB9XG4gIHJldHVybiB7XG4gICAgaXNDbGFpbWVkOiB0LFxuICAgIGlzQWN0aXZlOiBvLFxuICAgIGNsYWltOiBuLFxuICAgIHJlbGVhc2U6IHIsXG4gICAgdHJ5QWJhbmRvbjogaVxuICB9O1xufVxudmFyIFpUID0gOSwgalQgPSAxMywgVjYgPSAyNywgVWQgPSAzMiwgS1QgPSAzMywgSlQgPSAzNCwgX1QgPSAzNSwgJFQgPSAzNiwgZUkgPSAzNywgdEkgPSAzOCwgb0kgPSAzOSwgckkgPSA0MCwgbW4sIG5JID0gKG1uID0ge30sIG1uW2pUXSA9ICEwLCBtbltaVF0gPSAhMCwgbW4pLCBZZCA9IGZ1bmN0aW9uKGUpIHtcbiAgbklbZS5rZXlDb2RlXSAmJiBlLnByZXZlbnREZWZhdWx0KCk7XG59LCB0aSA9IGZ1bmN0aW9uKCkge1xuICB2YXIgZSA9IFwidmlzaWJpbGl0eWNoYW5nZVwiO1xuICBpZiAodHlwZW9mIGRvY3VtZW50ID4gXCJ1XCIpXG4gICAgcmV0dXJuIGU7XG4gIHZhciB0ID0gW2UsIFwibXNcIiArIGUsIFwid2Via2l0XCIgKyBlLCBcIm1velwiICsgZSwgXCJvXCIgKyBlXSwgbyA9IFV0KHQsIGZ1bmN0aW9uKG4pIHtcbiAgICByZXR1cm4gXCJvblwiICsgbiBpbiBkb2N1bWVudDtcbiAgfSk7XG4gIHJldHVybiBvIHx8IGU7XG59KCksIEdkID0gMCwgSjkgPSA1O1xuZnVuY3Rpb24gaUkoZSwgdCkge1xuICByZXR1cm4gTWF0aC5hYnModC54IC0gZS54KSA+PSBKOSB8fCBNYXRoLmFicyh0LnkgLSBlLnkpID49IEo5O1xufVxudmFyIF85ID0ge1xuICB0eXBlOiBcIklETEVcIlxufTtcbmZ1bmN0aW9uIGFJKGUpIHtcbiAgdmFyIHQgPSBlLmNhbmNlbCwgbyA9IGUuY29tcGxldGVkLCBuID0gZS5nZXRQaGFzZSwgciA9IGUuc2V0UGhhc2U7XG4gIHJldHVybiBbe1xuICAgIGV2ZW50TmFtZTogXCJtb3VzZW1vdmVcIixcbiAgICBmbjogZnVuY3Rpb24oYSkge1xuICAgICAgdmFyIHMgPSBhLmJ1dHRvbiwgbCA9IGEuY2xpZW50WCwgcCA9IGEuY2xpZW50WTtcbiAgICAgIGlmIChzID09PSBHZCkge1xuICAgICAgICB2YXIgZCA9IHtcbiAgICAgICAgICB4OiBsLFxuICAgICAgICAgIHk6IHBcbiAgICAgICAgfSwgYiA9IG4oKTtcbiAgICAgICAgaWYgKGIudHlwZSA9PT0gXCJEUkFHR0lOR1wiKSB7XG4gICAgICAgICAgYS5wcmV2ZW50RGVmYXVsdCgpLCBiLmFjdGlvbnMubW92ZShkKTtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgYi50eXBlICE9PSBcIlBFTkRJTkdcIiAmJiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiID8geTEoITEsIFwiQ2Fubm90IGJlIElETEVcIikgOiB5MSghMSkpO1xuICAgICAgICB2YXIgTSA9IGIucG9pbnQ7XG4gICAgICAgIGlmIChpSShNLCBkKSkge1xuICAgICAgICAgIGEucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICB2YXIgdSA9IGIuYWN0aW9ucy5mbHVpZExpZnQoZCk7XG4gICAgICAgICAgcih7XG4gICAgICAgICAgICB0eXBlOiBcIkRSQUdHSU5HXCIsXG4gICAgICAgICAgICBhY3Rpb25zOiB1XG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH0sIHtcbiAgICBldmVudE5hbWU6IFwibW91c2V1cFwiLFxuICAgIGZuOiBmdW5jdGlvbihhKSB7XG4gICAgICB2YXIgcyA9IG4oKTtcbiAgICAgIGlmIChzLnR5cGUgIT09IFwiRFJBR0dJTkdcIikge1xuICAgICAgICB0KCk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGEucHJldmVudERlZmF1bHQoKSwgcy5hY3Rpb25zLmRyb3Aoe1xuICAgICAgICBzaG91bGRCbG9ja05leHRDbGljazogITBcbiAgICAgIH0pLCBvKCk7XG4gICAgfVxuICB9LCB7XG4gICAgZXZlbnROYW1lOiBcIm1vdXNlZG93blwiLFxuICAgIGZuOiBmdW5jdGlvbihhKSB7XG4gICAgICBuKCkudHlwZSA9PT0gXCJEUkFHR0lOR1wiICYmIGEucHJldmVudERlZmF1bHQoKSwgdCgpO1xuICAgIH1cbiAgfSwge1xuICAgIGV2ZW50TmFtZTogXCJrZXlkb3duXCIsXG4gICAgZm46IGZ1bmN0aW9uKGEpIHtcbiAgICAgIHZhciBzID0gbigpO1xuICAgICAgaWYgKHMudHlwZSA9PT0gXCJQRU5ESU5HXCIpIHtcbiAgICAgICAgdCgpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBpZiAoYS5rZXlDb2RlID09PSBWNikge1xuICAgICAgICBhLnByZXZlbnREZWZhdWx0KCksIHQoKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgWWQoYSk7XG4gICAgfVxuICB9LCB7XG4gICAgZXZlbnROYW1lOiBcInJlc2l6ZVwiLFxuICAgIGZuOiB0XG4gIH0sIHtcbiAgICBldmVudE5hbWU6IFwic2Nyb2xsXCIsXG4gICAgb3B0aW9uczoge1xuICAgICAgcGFzc2l2ZTogITAsXG4gICAgICBjYXB0dXJlOiAhMVxuICAgIH0sXG4gICAgZm46IGZ1bmN0aW9uKCkge1xuICAgICAgbigpLnR5cGUgPT09IFwiUEVORElOR1wiICYmIHQoKTtcbiAgICB9XG4gIH0sIHtcbiAgICBldmVudE5hbWU6IFwid2Via2l0bW91c2Vmb3JjZWRvd25cIixcbiAgICBmbjogZnVuY3Rpb24oYSkge1xuICAgICAgdmFyIHMgPSBuKCk7XG4gICAgICBpZiAocy50eXBlID09PSBcIklETEVcIiAmJiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiID8geTEoITEsIFwiVW5leHBlY3RlZCBwaGFzZVwiKSA6IHkxKCExKSksIHMuYWN0aW9ucy5zaG91bGRSZXNwZWN0Rm9yY2VQcmVzcygpKSB7XG4gICAgICAgIHQoKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgYS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIH1cbiAgfSwge1xuICAgIGV2ZW50TmFtZTogdGksXG4gICAgZm46IHRcbiAgfV07XG59XG5mdW5jdGlvbiBzSShlKSB7XG4gIHZhciB0ID0gbjAoXzkpLCBvID0gbjAoRXQpLCBuID0gUjAoZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGV2ZW50TmFtZTogXCJtb3VzZWRvd25cIixcbiAgICAgIGZuOiBmdW5jdGlvbihiKSB7XG4gICAgICAgIGlmICghYi5kZWZhdWx0UHJldmVudGVkICYmIGIuYnV0dG9uID09PSBHZCAmJiAhKGIuY3RybEtleSB8fCBiLm1ldGFLZXkgfHwgYi5zaGlmdEtleSB8fCBiLmFsdEtleSkpIHtcbiAgICAgICAgICB2YXIgTSA9IGUuZmluZENsb3Nlc3REcmFnZ2FibGVJZChiKTtcbiAgICAgICAgICBpZiAoTSkge1xuICAgICAgICAgICAgdmFyIHUgPSBlLnRyeUdldExvY2soTSwgYSwge1xuICAgICAgICAgICAgICBzb3VyY2VFdmVudDogYlxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBpZiAodSkge1xuICAgICAgICAgICAgICBiLnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICAgIHZhciBBID0ge1xuICAgICAgICAgICAgICAgIHg6IGIuY2xpZW50WCxcbiAgICAgICAgICAgICAgICB5OiBiLmNsaWVudFlcbiAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgby5jdXJyZW50KCksIHAodSwgQSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfTtcbiAgfSwgW2VdKSwgciA9IFIwKGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiB7XG4gICAgICBldmVudE5hbWU6IFwid2Via2l0bW91c2Vmb3JjZXdpbGxiZWdpblwiLFxuICAgICAgZm46IGZ1bmN0aW9uKGIpIHtcbiAgICAgICAgaWYgKCFiLmRlZmF1bHRQcmV2ZW50ZWQpIHtcbiAgICAgICAgICB2YXIgTSA9IGUuZmluZENsb3Nlc3REcmFnZ2FibGVJZChiKTtcbiAgICAgICAgICBpZiAoTSkge1xuICAgICAgICAgICAgdmFyIHUgPSBlLmZpbmRPcHRpb25zRm9yRHJhZ2dhYmxlKE0pO1xuICAgICAgICAgICAgdSAmJiAodS5zaG91bGRSZXNwZWN0Rm9yY2VQcmVzcyB8fCBlLmNhbkdldExvY2soTSkgJiYgYi5wcmV2ZW50RGVmYXVsdCgpKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9O1xuICB9LCBbZV0pLCBpID0gbDAoZnVuY3Rpb24oKSB7XG4gICAgdmFyIGIgPSB7XG4gICAgICBwYXNzaXZlOiAhMSxcbiAgICAgIGNhcHR1cmU6ICEwXG4gICAgfTtcbiAgICBvLmN1cnJlbnQgPSBzZSh3aW5kb3csIFtyLCBuXSwgYik7XG4gIH0sIFtyLCBuXSksIGEgPSBsMChmdW5jdGlvbigpIHtcbiAgICB2YXIgZCA9IHQuY3VycmVudDtcbiAgICBkLnR5cGUgIT09IFwiSURMRVwiICYmICh0LmN1cnJlbnQgPSBfOSwgby5jdXJyZW50KCksIGkoKSk7XG4gIH0sIFtpXSksIHMgPSBsMChmdW5jdGlvbigpIHtcbiAgICB2YXIgZCA9IHQuY3VycmVudDtcbiAgICBhKCksIGQudHlwZSA9PT0gXCJEUkFHR0lOR1wiICYmIGQuYWN0aW9ucy5jYW5jZWwoe1xuICAgICAgc2hvdWxkQmxvY2tOZXh0Q2xpY2s6ICEwXG4gICAgfSksIGQudHlwZSA9PT0gXCJQRU5ESU5HXCIgJiYgZC5hY3Rpb25zLmFib3J0KCk7XG4gIH0sIFthXSksIGwgPSBsMChmdW5jdGlvbigpIHtcbiAgICB2YXIgYiA9IHtcbiAgICAgIGNhcHR1cmU6ICEwLFxuICAgICAgcGFzc2l2ZTogITFcbiAgICB9LCBNID0gYUkoe1xuICAgICAgY2FuY2VsOiBzLFxuICAgICAgY29tcGxldGVkOiBhLFxuICAgICAgZ2V0UGhhc2U6IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gdC5jdXJyZW50O1xuICAgICAgfSxcbiAgICAgIHNldFBoYXNlOiBmdW5jdGlvbihBKSB7XG4gICAgICAgIHQuY3VycmVudCA9IEE7XG4gICAgICB9XG4gICAgfSk7XG4gICAgby5jdXJyZW50ID0gc2Uod2luZG93LCBNLCBiKTtcbiAgfSwgW3MsIGFdKSwgcCA9IGwwKGZ1bmN0aW9uKGIsIE0pIHtcbiAgICB0LmN1cnJlbnQudHlwZSAhPT0gXCJJRExFXCIgJiYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIiA/IHkxKCExLCBcIkV4cGVjdGVkIHRvIG1vdmUgZnJvbSBJRExFIHRvIFBFTkRJTkcgZHJhZ1wiKSA6IHkxKCExKSksIHQuY3VycmVudCA9IHtcbiAgICAgIHR5cGU6IFwiUEVORElOR1wiLFxuICAgICAgcG9pbnQ6IE0sXG4gICAgICBhY3Rpb25zOiBiXG4gICAgfSwgbCgpO1xuICB9LCBbbF0pO1xuICBlZShmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gaSgpLCBmdW5jdGlvbigpIHtcbiAgICAgIG8uY3VycmVudCgpO1xuICAgIH07XG4gIH0sIFtpXSk7XG59XG52YXIgdzM7XG5mdW5jdGlvbiBjSSgpIHtcbn1cbnZhciBsSSA9ICh3MyA9IHt9LCB3M1tKVF0gPSAhMCwgdzNbS1RdID0gITAsIHczWyRUXSA9ICEwLCB3M1tfVF0gPSAhMCwgdzMpO1xuZnVuY3Rpb24gcEkoZSwgdCkge1xuICBmdW5jdGlvbiBvKCkge1xuICAgIHQoKSwgZS5jYW5jZWwoKTtcbiAgfVxuICBmdW5jdGlvbiBuKCkge1xuICAgIHQoKSwgZS5kcm9wKCk7XG4gIH1cbiAgcmV0dXJuIFt7XG4gICAgZXZlbnROYW1lOiBcImtleWRvd25cIixcbiAgICBmbjogZnVuY3Rpb24oaSkge1xuICAgICAgaWYgKGkua2V5Q29kZSA9PT0gVjYpIHtcbiAgICAgICAgaS5wcmV2ZW50RGVmYXVsdCgpLCBvKCk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGlmIChpLmtleUNvZGUgPT09IFVkKSB7XG4gICAgICAgIGkucHJldmVudERlZmF1bHQoKSwgbigpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBpZiAoaS5rZXlDb2RlID09PSBySSkge1xuICAgICAgICBpLnByZXZlbnREZWZhdWx0KCksIGUubW92ZURvd24oKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgaWYgKGkua2V5Q29kZSA9PT0gdEkpIHtcbiAgICAgICAgaS5wcmV2ZW50RGVmYXVsdCgpLCBlLm1vdmVVcCgpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBpZiAoaS5rZXlDb2RlID09PSBvSSkge1xuICAgICAgICBpLnByZXZlbnREZWZhdWx0KCksIGUubW92ZVJpZ2h0KCk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGlmIChpLmtleUNvZGUgPT09IGVJKSB7XG4gICAgICAgIGkucHJldmVudERlZmF1bHQoKSwgZS5tb3ZlTGVmdCgpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBpZiAobElbaS5rZXlDb2RlXSkge1xuICAgICAgICBpLnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIFlkKGkpO1xuICAgIH1cbiAgfSwge1xuICAgIGV2ZW50TmFtZTogXCJtb3VzZWRvd25cIixcbiAgICBmbjogb1xuICB9LCB7XG4gICAgZXZlbnROYW1lOiBcIm1vdXNldXBcIixcbiAgICBmbjogb1xuICB9LCB7XG4gICAgZXZlbnROYW1lOiBcImNsaWNrXCIsXG4gICAgZm46IG9cbiAgfSwge1xuICAgIGV2ZW50TmFtZTogXCJ0b3VjaHN0YXJ0XCIsXG4gICAgZm46IG9cbiAgfSwge1xuICAgIGV2ZW50TmFtZTogXCJyZXNpemVcIixcbiAgICBmbjogb1xuICB9LCB7XG4gICAgZXZlbnROYW1lOiBcIndoZWVsXCIsXG4gICAgZm46IG8sXG4gICAgb3B0aW9uczoge1xuICAgICAgcGFzc2l2ZTogITBcbiAgICB9XG4gIH0sIHtcbiAgICBldmVudE5hbWU6IHRpLFxuICAgIGZuOiBvXG4gIH1dO1xufVxuZnVuY3Rpb24gZEkoZSkge1xuICB2YXIgdCA9IG4wKGNJKSwgbyA9IFIwKGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiB7XG4gICAgICBldmVudE5hbWU6IFwia2V5ZG93blwiLFxuICAgICAgZm46IGZ1bmN0aW9uKGkpIHtcbiAgICAgICAgaWYgKGkuZGVmYXVsdFByZXZlbnRlZCB8fCBpLmtleUNvZGUgIT09IFVkKVxuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgdmFyIGEgPSBlLmZpbmRDbG9zZXN0RHJhZ2dhYmxlSWQoaSk7XG4gICAgICAgIGlmICghYSlcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIHZhciBzID0gZS50cnlHZXRMb2NrKGEsIGQsIHtcbiAgICAgICAgICBzb3VyY2VFdmVudDogaVxuICAgICAgICB9KTtcbiAgICAgICAgaWYgKCFzKVxuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgaS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICB2YXIgbCA9ICEwLCBwID0gcy5zbmFwTGlmdCgpO1xuICAgICAgICB0LmN1cnJlbnQoKTtcbiAgICAgICAgZnVuY3Rpb24gZCgpIHtcbiAgICAgICAgICBsIHx8IChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIgPyB5MSghMSwgXCJDYW5ub3Qgc3RvcCBjYXB0dXJpbmcgYSBrZXlib2FyZCBkcmFnIHdoZW4gbm90IGNhcHR1cmluZ1wiKSA6IHkxKCExKSksIGwgPSAhMSwgdC5jdXJyZW50KCksIG4oKTtcbiAgICAgICAgfVxuICAgICAgICB0LmN1cnJlbnQgPSBzZSh3aW5kb3csIHBJKHAsIGQpLCB7XG4gICAgICAgICAgY2FwdHVyZTogITAsXG4gICAgICAgICAgcGFzc2l2ZTogITFcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfTtcbiAgfSwgW2VdKSwgbiA9IGwwKGZ1bmN0aW9uKCkge1xuICAgIHZhciBpID0ge1xuICAgICAgcGFzc2l2ZTogITEsXG4gICAgICBjYXB0dXJlOiAhMFxuICAgIH07XG4gICAgdC5jdXJyZW50ID0gc2Uod2luZG93LCBbb10sIGkpO1xuICB9LCBbb10pO1xuICBlZShmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gbigpLCBmdW5jdGlvbigpIHtcbiAgICAgIHQuY3VycmVudCgpO1xuICAgIH07XG4gIH0sIFtuXSk7XG59XG52YXIgYWEgPSB7XG4gIHR5cGU6IFwiSURMRVwiXG59LCBiSSA9IDEyMCwgTUkgPSAwLjE1O1xuZnVuY3Rpb24gQUkoZSkge1xuICB2YXIgdCA9IGUuY2FuY2VsLCBvID0gZS5nZXRQaGFzZTtcbiAgcmV0dXJuIFt7XG4gICAgZXZlbnROYW1lOiBcIm9yaWVudGF0aW9uY2hhbmdlXCIsXG4gICAgZm46IHRcbiAgfSwge1xuICAgIGV2ZW50TmFtZTogXCJyZXNpemVcIixcbiAgICBmbjogdFxuICB9LCB7XG4gICAgZXZlbnROYW1lOiBcImNvbnRleHRtZW51XCIsXG4gICAgZm46IGZ1bmN0aW9uKHIpIHtcbiAgICAgIHIucHJldmVudERlZmF1bHQoKTtcbiAgICB9XG4gIH0sIHtcbiAgICBldmVudE5hbWU6IFwia2V5ZG93blwiLFxuICAgIGZuOiBmdW5jdGlvbihyKSB7XG4gICAgICBpZiAobygpLnR5cGUgIT09IFwiRFJBR0dJTkdcIikge1xuICAgICAgICB0KCk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIHIua2V5Q29kZSA9PT0gVjYgJiYgci5wcmV2ZW50RGVmYXVsdCgpLCB0KCk7XG4gICAgfVxuICB9LCB7XG4gICAgZXZlbnROYW1lOiB0aSxcbiAgICBmbjogdFxuICB9XTtcbn1cbmZ1bmN0aW9uIHVJKGUpIHtcbiAgdmFyIHQgPSBlLmNhbmNlbCwgbyA9IGUuY29tcGxldGVkLCBuID0gZS5nZXRQaGFzZTtcbiAgcmV0dXJuIFt7XG4gICAgZXZlbnROYW1lOiBcInRvdWNobW92ZVwiLFxuICAgIG9wdGlvbnM6IHtcbiAgICAgIGNhcHR1cmU6ICExXG4gICAgfSxcbiAgICBmbjogZnVuY3Rpb24oaSkge1xuICAgICAgdmFyIGEgPSBuKCk7XG4gICAgICBpZiAoYS50eXBlICE9PSBcIkRSQUdHSU5HXCIpIHtcbiAgICAgICAgdCgpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBhLmhhc01vdmVkID0gITA7XG4gICAgICB2YXIgcyA9IGkudG91Y2hlc1swXSwgbCA9IHMuY2xpZW50WCwgcCA9IHMuY2xpZW50WSwgZCA9IHtcbiAgICAgICAgeDogbCxcbiAgICAgICAgeTogcFxuICAgICAgfTtcbiAgICAgIGkucHJldmVudERlZmF1bHQoKSwgYS5hY3Rpb25zLm1vdmUoZCk7XG4gICAgfVxuICB9LCB7XG4gICAgZXZlbnROYW1lOiBcInRvdWNoZW5kXCIsXG4gICAgZm46IGZ1bmN0aW9uKGkpIHtcbiAgICAgIHZhciBhID0gbigpO1xuICAgICAgaWYgKGEudHlwZSAhPT0gXCJEUkFHR0lOR1wiKSB7XG4gICAgICAgIHQoKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgaS5wcmV2ZW50RGVmYXVsdCgpLCBhLmFjdGlvbnMuZHJvcCh7XG4gICAgICAgIHNob3VsZEJsb2NrTmV4dENsaWNrOiAhMFxuICAgICAgfSksIG8oKTtcbiAgICB9XG4gIH0sIHtcbiAgICBldmVudE5hbWU6IFwidG91Y2hjYW5jZWxcIixcbiAgICBmbjogZnVuY3Rpb24oaSkge1xuICAgICAgaWYgKG4oKS50eXBlICE9PSBcIkRSQUdHSU5HXCIpIHtcbiAgICAgICAgdCgpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBpLnByZXZlbnREZWZhdWx0KCksIHQoKTtcbiAgICB9XG4gIH0sIHtcbiAgICBldmVudE5hbWU6IFwidG91Y2hmb3JjZWNoYW5nZVwiLFxuICAgIGZuOiBmdW5jdGlvbihpKSB7XG4gICAgICB2YXIgYSA9IG4oKTtcbiAgICAgIGEudHlwZSA9PT0gXCJJRExFXCIgJiYgKHByb2Nlc3MuZW52Lk5PREVfRU5WLCB5MSghMSkpO1xuICAgICAgdmFyIHMgPSBpLnRvdWNoZXNbMF07XG4gICAgICBpZiAocykge1xuICAgICAgICB2YXIgbCA9IHMuZm9yY2UgPj0gTUk7XG4gICAgICAgIGlmIChsKSB7XG4gICAgICAgICAgdmFyIHAgPSBhLmFjdGlvbnMuc2hvdWxkUmVzcGVjdEZvcmNlUHJlc3MoKTtcbiAgICAgICAgICBpZiAoYS50eXBlID09PSBcIlBFTkRJTkdcIikge1xuICAgICAgICAgICAgcCAmJiB0KCk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmIChwKSB7XG4gICAgICAgICAgICBpZiAoYS5oYXNNb3ZlZCkge1xuICAgICAgICAgICAgICBpLnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHQoKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICB9XG4gICAgICAgICAgaS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9LCB7XG4gICAgZXZlbnROYW1lOiB0aSxcbiAgICBmbjogdFxuICB9XTtcbn1cbmZ1bmN0aW9uIHpJKGUpIHtcbiAgdmFyIHQgPSBuMChhYSksIG8gPSBuMChFdCksIG4gPSBsMChmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gdC5jdXJyZW50O1xuICB9LCBbXSksIHIgPSBsMChmdW5jdGlvbih1KSB7XG4gICAgdC5jdXJyZW50ID0gdTtcbiAgfSwgW10pLCBpID0gUjAoZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGV2ZW50TmFtZTogXCJ0b3VjaHN0YXJ0XCIsXG4gICAgICBmbjogZnVuY3Rpb24odSkge1xuICAgICAgICBpZiAoIXUuZGVmYXVsdFByZXZlbnRlZCkge1xuICAgICAgICAgIHZhciBBID0gZS5maW5kQ2xvc2VzdERyYWdnYWJsZUlkKHUpO1xuICAgICAgICAgIGlmIChBKSB7XG4gICAgICAgICAgICB2YXIgeiA9IGUudHJ5R2V0TG9jayhBLCBzLCB7XG4gICAgICAgICAgICAgIHNvdXJjZUV2ZW50OiB1XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGlmICh6KSB7XG4gICAgICAgICAgICAgIHZhciBmID0gdS50b3VjaGVzWzBdLCBPID0gZi5jbGllbnRYLCBoID0gZi5jbGllbnRZLCBnID0ge1xuICAgICAgICAgICAgICAgIHg6IE8sXG4gICAgICAgICAgICAgICAgeTogaFxuICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICBvLmN1cnJlbnQoKSwgYih6LCBnKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9O1xuICB9LCBbZV0pLCBhID0gbDAoZnVuY3Rpb24oKSB7XG4gICAgdmFyIHUgPSB7XG4gICAgICBjYXB0dXJlOiAhMCxcbiAgICAgIHBhc3NpdmU6ICExXG4gICAgfTtcbiAgICBvLmN1cnJlbnQgPSBzZSh3aW5kb3csIFtpXSwgdSk7XG4gIH0sIFtpXSksIHMgPSBsMChmdW5jdGlvbigpIHtcbiAgICB2YXIgTSA9IHQuY3VycmVudDtcbiAgICBNLnR5cGUgIT09IFwiSURMRVwiICYmIChNLnR5cGUgPT09IFwiUEVORElOR1wiICYmIGNsZWFyVGltZW91dChNLmxvbmdQcmVzc1RpbWVySWQpLCByKGFhKSwgby5jdXJyZW50KCksIGEoKSk7XG4gIH0sIFthLCByXSksIGwgPSBsMChmdW5jdGlvbigpIHtcbiAgICB2YXIgTSA9IHQuY3VycmVudDtcbiAgICBzKCksIE0udHlwZSA9PT0gXCJEUkFHR0lOR1wiICYmIE0uYWN0aW9ucy5jYW5jZWwoe1xuICAgICAgc2hvdWxkQmxvY2tOZXh0Q2xpY2s6ICEwXG4gICAgfSksIE0udHlwZSA9PT0gXCJQRU5ESU5HXCIgJiYgTS5hY3Rpb25zLmFib3J0KCk7XG4gIH0sIFtzXSksIHAgPSBsMChmdW5jdGlvbigpIHtcbiAgICB2YXIgdSA9IHtcbiAgICAgIGNhcHR1cmU6ICEwLFxuICAgICAgcGFzc2l2ZTogITFcbiAgICB9LCBBID0ge1xuICAgICAgY2FuY2VsOiBsLFxuICAgICAgY29tcGxldGVkOiBzLFxuICAgICAgZ2V0UGhhc2U6IG5cbiAgICB9LCB6ID0gc2Uod2luZG93LCB1SShBKSwgdSksIGYgPSBzZSh3aW5kb3csIEFJKEEpLCB1KTtcbiAgICBvLmN1cnJlbnQgPSBmdW5jdGlvbigpIHtcbiAgICAgIHooKSwgZigpO1xuICAgIH07XG4gIH0sIFtsLCBuLCBzXSksIGQgPSBsMChmdW5jdGlvbigpIHtcbiAgICB2YXIgdSA9IG4oKTtcbiAgICB1LnR5cGUgIT09IFwiUEVORElOR1wiICYmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIgPyB5MSghMSwgXCJDYW5ub3Qgc3RhcnQgZHJhZ2dpbmcgZnJvbSBwaGFzZSBcIiArIHUudHlwZSkgOiB5MSghMSkpO1xuICAgIHZhciBBID0gdS5hY3Rpb25zLmZsdWlkTGlmdCh1LnBvaW50KTtcbiAgICByKHtcbiAgICAgIHR5cGU6IFwiRFJBR0dJTkdcIixcbiAgICAgIGFjdGlvbnM6IEEsXG4gICAgICBoYXNNb3ZlZDogITFcbiAgICB9KTtcbiAgfSwgW24sIHJdKSwgYiA9IGwwKGZ1bmN0aW9uKHUsIEEpIHtcbiAgICBuKCkudHlwZSAhPT0gXCJJRExFXCIgJiYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIiA/IHkxKCExLCBcIkV4cGVjdGVkIHRvIG1vdmUgZnJvbSBJRExFIHRvIFBFTkRJTkcgZHJhZ1wiKSA6IHkxKCExKSk7XG4gICAgdmFyIHogPSBzZXRUaW1lb3V0KGQsIGJJKTtcbiAgICByKHtcbiAgICAgIHR5cGU6IFwiUEVORElOR1wiLFxuICAgICAgcG9pbnQ6IEEsXG4gICAgICBhY3Rpb25zOiB1LFxuICAgICAgbG9uZ1ByZXNzVGltZXJJZDogelxuICAgIH0pLCBwKCk7XG4gIH0sIFtwLCBuLCByLCBkXSk7XG4gIGVlKGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiBhKCksIGZ1bmN0aW9uKCkge1xuICAgICAgby5jdXJyZW50KCk7XG4gICAgICB2YXIgQSA9IG4oKTtcbiAgICAgIEEudHlwZSA9PT0gXCJQRU5ESU5HXCIgJiYgKGNsZWFyVGltZW91dChBLmxvbmdQcmVzc1RpbWVySWQpLCByKGFhKSk7XG4gICAgfTtcbiAgfSwgW24sIGEsIHJdKSwgZWUoZnVuY3Rpb24oKSB7XG4gICAgdmFyIHUgPSBzZSh3aW5kb3csIFt7XG4gICAgICBldmVudE5hbWU6IFwidG91Y2htb3ZlXCIsXG4gICAgICBmbjogZnVuY3Rpb24oKSB7XG4gICAgICB9LFxuICAgICAgb3B0aW9uczoge1xuICAgICAgICBjYXB0dXJlOiAhMSxcbiAgICAgICAgcGFzc2l2ZTogITFcbiAgICAgIH1cbiAgICB9XSk7XG4gICAgcmV0dXJuIHU7XG4gIH0sIFtdKTtcbn1cbmZ1bmN0aW9uIGhJKGUpIHtcbiAgRDYoZnVuY3Rpb24oKSB7XG4gICAgdmFyIHQgPSBINihlKTtcbiAgICBYcihmdW5jdGlvbigpIHtcbiAgICAgIHQuY3VycmVudC5sZW5ndGggIT09IGUubGVuZ3RoICYmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIgPyB5MSghMSwgXCJDYW5ub3QgY2hhbmdlIHRoZSBhbW91bnQgb2Ygc2Vuc29yIGhvb2tzIGFmdGVyIG1vdW50aW5nXCIpIDogeTEoITEpKTtcbiAgICB9KTtcbiAgfSk7XG59XG52YXIgT0kgPSB7XG4gIGlucHV0OiAhMCxcbiAgYnV0dG9uOiAhMCxcbiAgdGV4dGFyZWE6ICEwLFxuICBzZWxlY3Q6ICEwLFxuICBvcHRpb246ICEwLFxuICBvcHRncm91cDogITAsXG4gIHZpZGVvOiAhMCxcbiAgYXVkaW86ICEwXG59O1xuZnVuY3Rpb24gUWQoZSwgdCkge1xuICBpZiAodCA9PSBudWxsKVxuICAgIHJldHVybiAhMTtcbiAgdmFyIG8gPSAhIU9JW3QudGFnTmFtZS50b0xvd2VyQ2FzZSgpXTtcbiAgaWYgKG8pXG4gICAgcmV0dXJuICEwO1xuICB2YXIgbiA9IHQuZ2V0QXR0cmlidXRlKFwiY29udGVudGVkaXRhYmxlXCIpO1xuICByZXR1cm4gbiA9PT0gXCJ0cnVlXCIgfHwgbiA9PT0gXCJcIiA/ICEwIDogdCA9PT0gZSA/ICExIDogUWQoZSwgdC5wYXJlbnRFbGVtZW50KTtcbn1cbmZ1bmN0aW9uIGZJKGUsIHQpIHtcbiAgdmFyIG8gPSB0LnRhcmdldDtcbiAgcmV0dXJuIEZyKG8pID8gUWQoZSwgbykgOiAhMTtcbn1cbnZhciBnSSA9IGZ1bmN0aW9uKGUpIHtcbiAgcmV0dXJuIENlKGUuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkpLmNlbnRlcjtcbn07XG5mdW5jdGlvbiBDSShlKSB7XG4gIHJldHVybiBlIGluc3RhbmNlb2YgRmQoZSkuRWxlbWVudDtcbn1cbnZhciBtSSA9IGZ1bmN0aW9uKCkge1xuICB2YXIgZSA9IFwibWF0Y2hlc1wiO1xuICBpZiAodHlwZW9mIGRvY3VtZW50ID4gXCJ1XCIpXG4gICAgcmV0dXJuIGU7XG4gIHZhciB0ID0gW2UsIFwibXNNYXRjaGVzU2VsZWN0b3JcIiwgXCJ3ZWJraXRNYXRjaGVzU2VsZWN0b3JcIl0sIG8gPSBVdCh0LCBmdW5jdGlvbihuKSB7XG4gICAgcmV0dXJuIG4gaW4gRWxlbWVudC5wcm90b3R5cGU7XG4gIH0pO1xuICByZXR1cm4gbyB8fCBlO1xufSgpO1xuZnVuY3Rpb24gWmQoZSwgdCkge1xuICByZXR1cm4gZSA9PSBudWxsID8gbnVsbCA6IGVbbUldKHQpID8gZSA6IFpkKGUucGFyZW50RWxlbWVudCwgdCk7XG59XG5mdW5jdGlvbiBMSShlLCB0KSB7XG4gIHJldHVybiBlLmNsb3Nlc3QgPyBlLmNsb3Nlc3QodCkgOiBaZChlLCB0KTtcbn1cbmZ1bmN0aW9uIHZJKGUpIHtcbiAgcmV0dXJuIFwiW1wiICsgb28uY29udGV4dElkICsgJz1cIicgKyBlICsgJ1wiXSc7XG59XG5mdW5jdGlvbiBxSShlLCB0KSB7XG4gIHZhciBvID0gdC50YXJnZXQ7XG4gIGlmICghQ0kobykpXG4gICAgcmV0dXJuIHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIiAmJiBaMChcImV2ZW50LnRhcmdldCBtdXN0IGJlIGEgRWxlbWVudFwiKSwgbnVsbDtcbiAgdmFyIG4gPSB2SShlKSwgciA9IExJKG8sIG4pO1xuICByZXR1cm4gciA/IEZyKHIpID8gciA6IChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIgJiYgWjAoXCJkcmFnIGhhbmRsZSBtdXN0IGJlIGEgSFRNTEVsZW1lbnRcIiksIG51bGwpIDogbnVsbDtcbn1cbmZ1bmN0aW9uIHlJKGUsIHQpIHtcbiAgdmFyIG8gPSBxSShlLCB0KTtcbiAgcmV0dXJuIG8gPyBvLmdldEF0dHJpYnV0ZShvby5kcmFnZ2FibGVJZCkgOiBudWxsO1xufVxuZnVuY3Rpb24gd0koZSwgdCkge1xuICB2YXIgbyA9IFwiW1wiICsgQTUuY29udGV4dElkICsgJz1cIicgKyBlICsgJ1wiXScsIG4gPSBwZChkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKG8pKSwgciA9IFV0KG4sIGZ1bmN0aW9uKGkpIHtcbiAgICByZXR1cm4gaS5nZXRBdHRyaWJ1dGUoQTUuaWQpID09PSB0O1xuICB9KTtcbiAgcmV0dXJuIHIgPyBGcihyKSA/IHIgOiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiICYmIFowKFwiRHJhZ2dhYmxlIGVsZW1lbnQgaXMgbm90IGEgSFRNTEVsZW1lbnRcIiksIG51bGwpIDogbnVsbDtcbn1cbmZ1bmN0aW9uIHhJKGUpIHtcbiAgZS5wcmV2ZW50RGVmYXVsdCgpO1xufVxuZnVuY3Rpb24gTG4oZSkge1xuICB2YXIgdCA9IGUuZXhwZWN0ZWQsIG8gPSBlLnBoYXNlLCBuID0gZS5pc0xvY2tBY3RpdmUsIHIgPSBlLnNob3VsZFdhcm47XG4gIHJldHVybiBuKCkgPyB0ICE9PSBvID8gKHIgJiYgcHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiICYmIFowKGBcbiAgICAgICAgQ2Fubm90IHBlcmZvcm0gYWN0aW9uLlxuICAgICAgICBUaGUgYWN0aW9ucyB5b3UgdXNlZCBiZWxvbmcgdG8gYW4gb3V0ZGF0ZWQgcGhhc2VcblxuICAgICAgICBDdXJyZW50IHBoYXNlOiBgICsgdCArIGBcbiAgICAgICAgWW91IGNhbGxlZCBhbiBhY3Rpb24gZnJvbSBvdXRkYXRlZCBwaGFzZTogYCArIG8gKyBgXG5cbiAgICAgICAgVGlwczpcblxuICAgICAgICAtIERvIG5vdCB1c2UgcHJlRHJhZ0FjdGlvbnMgYWN0aW9ucyBhZnRlciBjYWxsaW5nIHByZURyYWdBY3Rpb25zLmxpZnQoKVxuICAgICAgYCksICExKSA6ICEwIDogKHIgJiYgcHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiICYmIFowKGBcbiAgICAgICAgQ2Fubm90IHBlcmZvcm0gYWN0aW9uLlxuICAgICAgICBUaGUgc2Vuc29yIG5vIGxvbmdlciBoYXMgYW4gYWN0aW9uIGxvY2suXG5cbiAgICAgICAgVGlwczpcblxuICAgICAgICAtIFRocm93IGF3YXkgeW91ciBhY3Rpb24gaGFuZGxlcnMgd2hlbiBmb3JjZVN0b3AoKSBpcyBjYWxsZWRcbiAgICAgICAgLSBDaGVjayBhY3Rpb25zLmlzQWN0aXZlKCkgaWYgeW91IHJlYWxseSBuZWVkIHRvXG4gICAgICBgKSwgITEpO1xufVxuZnVuY3Rpb24gamQoZSkge1xuICB2YXIgdCA9IGUubG9ja0FQSSwgbyA9IGUuc3RvcmUsIG4gPSBlLnJlZ2lzdHJ5LCByID0gZS5kcmFnZ2FibGVJZDtcbiAgaWYgKHQuaXNDbGFpbWVkKCkpXG4gICAgcmV0dXJuICExO1xuICB2YXIgaSA9IG4uZHJhZ2dhYmxlLmZpbmRCeUlkKHIpO1xuICByZXR1cm4gaSA/ICEoIWkub3B0aW9ucy5pc0VuYWJsZWQgfHwgIURkKG8uZ2V0U3RhdGUoKSwgcikpIDogKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIiAmJiBaMChcIlVuYWJsZSB0byBmaW5kIGRyYWdnYWJsZSB3aXRoIGlkOiBcIiArIHIpLCAhMSk7XG59XG5mdW5jdGlvbiBXSShlKSB7XG4gIHZhciB0ID0gZS5sb2NrQVBJLCBvID0gZS5jb250ZXh0SWQsIG4gPSBlLnN0b3JlLCByID0gZS5yZWdpc3RyeSwgaSA9IGUuZHJhZ2dhYmxlSWQsIGEgPSBlLmZvcmNlU2Vuc29yU3RvcCwgcyA9IGUuc291cmNlRXZlbnQsIGwgPSBqZCh7XG4gICAgbG9ja0FQSTogdCxcbiAgICBzdG9yZTogbixcbiAgICByZWdpc3RyeTogcixcbiAgICBkcmFnZ2FibGVJZDogaVxuICB9KTtcbiAgaWYgKCFsKVxuICAgIHJldHVybiBudWxsO1xuICB2YXIgcCA9IHIuZHJhZ2dhYmxlLmdldEJ5SWQoaSksIGQgPSB3SShvLCBwLmRlc2NyaXB0b3IuaWQpO1xuICBpZiAoIWQpXG4gICAgcmV0dXJuIHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIiAmJiBaMChcIlVuYWJsZSB0byBmaW5kIGRyYWdnYWJsZSBlbGVtZW50IHdpdGggaWQ6IFwiICsgaSksIG51bGw7XG4gIGlmIChzICYmICFwLm9wdGlvbnMuY2FuRHJhZ0ludGVyYWN0aXZlRWxlbWVudHMgJiYgZkkoZCwgcykpXG4gICAgcmV0dXJuIG51bGw7XG4gIHZhciBiID0gdC5jbGFpbShhIHx8IEV0KSwgTSA9IFwiUFJFX0RSQUdcIjtcbiAgZnVuY3Rpb24gdSgpIHtcbiAgICByZXR1cm4gcC5vcHRpb25zLnNob3VsZFJlc3BlY3RGb3JjZVByZXNzO1xuICB9XG4gIGZ1bmN0aW9uIEEoKSB7XG4gICAgcmV0dXJuIHQuaXNBY3RpdmUoYik7XG4gIH1cbiAgZnVuY3Rpb24geih5LCBCKSB7XG4gICAgTG4oe1xuICAgICAgZXhwZWN0ZWQ6IHksXG4gICAgICBwaGFzZTogTSxcbiAgICAgIGlzTG9ja0FjdGl2ZTogQSxcbiAgICAgIHNob3VsZFdhcm46ICEwXG4gICAgfSkgJiYgbi5kaXNwYXRjaChCKCkpO1xuICB9XG4gIHZhciBmID0gei5iaW5kKG51bGwsIFwiRFJBR0dJTkdcIik7XG4gIGZ1bmN0aW9uIE8oeSkge1xuICAgIGZ1bmN0aW9uIEIoKSB7XG4gICAgICB0LnJlbGVhc2UoKSwgTSA9IFwiQ09NUExFVEVEXCI7XG4gICAgfVxuICAgIE0gIT09IFwiUFJFX0RSQUdcIiAmJiAoQigpLCBNICE9PSBcIlBSRV9EUkFHXCIgJiYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIiA/IHkxKCExLCBcIkNhbm5vdCBsaWZ0IGluIHBoYXNlIFwiICsgTSkgOiB5MSghMSkpKSwgbi5kaXNwYXRjaChBTih5LmxpZnRBY3Rpb25BcmdzKSksIE0gPSBcIkRSQUdHSU5HXCI7XG4gICAgZnVuY3Rpb24gWChGLCBUKSB7XG4gICAgICBpZiAoVCA9PT0gdm9pZCAwICYmIChUID0ge1xuICAgICAgICBzaG91bGRCbG9ja05leHRDbGljazogITFcbiAgICAgIH0pLCB5LmNsZWFudXAoKSwgVC5zaG91bGRCbG9ja05leHRDbGljaykge1xuICAgICAgICB2YXIgdyA9IHNlKHdpbmRvdywgW3tcbiAgICAgICAgICBldmVudE5hbWU6IFwiY2xpY2tcIixcbiAgICAgICAgICBmbjogeEksXG4gICAgICAgICAgb3B0aW9uczoge1xuICAgICAgICAgICAgb25jZTogITAsXG4gICAgICAgICAgICBwYXNzaXZlOiAhMSxcbiAgICAgICAgICAgIGNhcHR1cmU6ICEwXG4gICAgICAgICAgfVxuICAgICAgICB9XSk7XG4gICAgICAgIHNldFRpbWVvdXQodyk7XG4gICAgICB9XG4gICAgICBCKCksIG4uZGlzcGF0Y2goQmQoe1xuICAgICAgICByZWFzb246IEZcbiAgICAgIH0pKTtcbiAgICB9XG4gICAgcmV0dXJuIGEwKHtcbiAgICAgIGlzQWN0aXZlOiBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIExuKHtcbiAgICAgICAgICBleHBlY3RlZDogXCJEUkFHR0lOR1wiLFxuICAgICAgICAgIHBoYXNlOiBNLFxuICAgICAgICAgIGlzTG9ja0FjdGl2ZTogQSxcbiAgICAgICAgICBzaG91bGRXYXJuOiAhMVxuICAgICAgICB9KTtcbiAgICAgIH0sXG4gICAgICBzaG91bGRSZXNwZWN0Rm9yY2VQcmVzczogdSxcbiAgICAgIGRyb3A6IGZ1bmN0aW9uKFQpIHtcbiAgICAgICAgcmV0dXJuIFgoXCJEUk9QXCIsIFQpO1xuICAgICAgfSxcbiAgICAgIGNhbmNlbDogZnVuY3Rpb24oVCkge1xuICAgICAgICByZXR1cm4gWChcIkNBTkNFTFwiLCBUKTtcbiAgICAgIH1cbiAgICB9LCB5LmFjdGlvbnMpO1xuICB9XG4gIGZ1bmN0aW9uIGgoeSkge1xuICAgIHZhciBCID0gT3IoZnVuY3Rpb24oRikge1xuICAgICAgZihmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIFJkKHtcbiAgICAgICAgICBjbGllbnQ6IEZcbiAgICAgICAgfSk7XG4gICAgICB9KTtcbiAgICB9KSwgWCA9IE8oe1xuICAgICAgbGlmdEFjdGlvbkFyZ3M6IHtcbiAgICAgICAgaWQ6IGksXG4gICAgICAgIGNsaWVudFNlbGVjdGlvbjogeSxcbiAgICAgICAgbW92ZW1lbnRNb2RlOiBcIkZMVUlEXCJcbiAgICAgIH0sXG4gICAgICBjbGVhbnVwOiBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIEIuY2FuY2VsKCk7XG4gICAgICB9LFxuICAgICAgYWN0aW9uczoge1xuICAgICAgICBtb3ZlOiBCXG4gICAgICB9XG4gICAgfSk7XG4gICAgcmV0dXJuIGEwKHt9LCBYLCB7XG4gICAgICBtb3ZlOiBCXG4gICAgfSk7XG4gIH1cbiAgZnVuY3Rpb24gZygpIHtcbiAgICB2YXIgeSA9IHtcbiAgICAgIG1vdmVVcDogZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiBmKExOKTtcbiAgICAgIH0sXG4gICAgICBtb3ZlUmlnaHQ6IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gZihxTik7XG4gICAgICB9LFxuICAgICAgbW92ZURvd246IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gZih2Tik7XG4gICAgICB9LFxuICAgICAgbW92ZUxlZnQ6IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gZih5Tik7XG4gICAgICB9XG4gICAgfTtcbiAgICByZXR1cm4gTyh7XG4gICAgICBsaWZ0QWN0aW9uQXJnczoge1xuICAgICAgICBpZDogaSxcbiAgICAgICAgY2xpZW50U2VsZWN0aW9uOiBnSShkKSxcbiAgICAgICAgbW92ZW1lbnRNb2RlOiBcIlNOQVBcIlxuICAgICAgfSxcbiAgICAgIGNsZWFudXA6IEV0LFxuICAgICAgYWN0aW9uczogeVxuICAgIH0pO1xuICB9XG4gIGZ1bmN0aW9uIHYoKSB7XG4gICAgdmFyIHkgPSBMbih7XG4gICAgICBleHBlY3RlZDogXCJQUkVfRFJBR1wiLFxuICAgICAgcGhhc2U6IE0sXG4gICAgICBpc0xvY2tBY3RpdmU6IEEsXG4gICAgICBzaG91bGRXYXJuOiAhMFxuICAgIH0pO1xuICAgIHkgJiYgdC5yZWxlYXNlKCk7XG4gIH1cbiAgdmFyIEwgPSB7XG4gICAgaXNBY3RpdmU6IGZ1bmN0aW9uKCkge1xuICAgICAgcmV0dXJuIExuKHtcbiAgICAgICAgZXhwZWN0ZWQ6IFwiUFJFX0RSQUdcIixcbiAgICAgICAgcGhhc2U6IE0sXG4gICAgICAgIGlzTG9ja0FjdGl2ZTogQSxcbiAgICAgICAgc2hvdWxkV2FybjogITFcbiAgICAgIH0pO1xuICAgIH0sXG4gICAgc2hvdWxkUmVzcGVjdEZvcmNlUHJlc3M6IHUsXG4gICAgZmx1aWRMaWZ0OiBoLFxuICAgIHNuYXBMaWZ0OiBnLFxuICAgIGFib3J0OiB2XG4gIH07XG4gIHJldHVybiBMO1xufVxudmFyIFJJID0gW3NJLCBkSSwgekldO1xuZnVuY3Rpb24gQkkoZSkge1xuICB2YXIgdCA9IGUuY29udGV4dElkLCBvID0gZS5zdG9yZSwgbiA9IGUucmVnaXN0cnksIHIgPSBlLmN1c3RvbVNlbnNvcnMsIGkgPSBlLmVuYWJsZURlZmF1bHRTZW5zb3JzLCBhID0gW10uY29uY2F0KGkgPyBSSSA6IFtdLCByIHx8IFtdKSwgcyA9IFQxKGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiBRVCgpO1xuICB9KVswXSwgbCA9IGwwKGZ1bmN0aW9uKGgsIGcpIHtcbiAgICBoLmlzRHJhZ2dpbmcgJiYgIWcuaXNEcmFnZ2luZyAmJiBzLnRyeUFiYW5kb24oKTtcbiAgfSwgW3NdKTtcbiAgZWUoZnVuY3Rpb24oKSB7XG4gICAgdmFyIGggPSBvLmdldFN0YXRlKCksIGcgPSBvLnN1YnNjcmliZShmdW5jdGlvbigpIHtcbiAgICAgIHZhciB2ID0gby5nZXRTdGF0ZSgpO1xuICAgICAgbChoLCB2KSwgaCA9IHY7XG4gICAgfSk7XG4gICAgcmV0dXJuIGc7XG4gIH0sIFtzLCBvLCBsXSksIGVlKGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiBzLnRyeUFiYW5kb247XG4gIH0sIFtzLnRyeUFiYW5kb25dKTtcbiAgdmFyIHAgPSBsMChmdW5jdGlvbihPKSB7XG4gICAgcmV0dXJuIGpkKHtcbiAgICAgIGxvY2tBUEk6IHMsXG4gICAgICByZWdpc3RyeTogbixcbiAgICAgIHN0b3JlOiBvLFxuICAgICAgZHJhZ2dhYmxlSWQ6IE9cbiAgICB9KTtcbiAgfSwgW3MsIG4sIG9dKSwgZCA9IGwwKGZ1bmN0aW9uKE8sIGgsIGcpIHtcbiAgICByZXR1cm4gV0koe1xuICAgICAgbG9ja0FQSTogcyxcbiAgICAgIHJlZ2lzdHJ5OiBuLFxuICAgICAgY29udGV4dElkOiB0LFxuICAgICAgc3RvcmU6IG8sXG4gICAgICBkcmFnZ2FibGVJZDogTyxcbiAgICAgIGZvcmNlU2Vuc29yU3RvcDogaCxcbiAgICAgIHNvdXJjZUV2ZW50OiBnICYmIGcuc291cmNlRXZlbnQgPyBnLnNvdXJjZUV2ZW50IDogbnVsbFxuICAgIH0pO1xuICB9LCBbdCwgcywgbiwgb10pLCBiID0gbDAoZnVuY3Rpb24oTykge1xuICAgIHJldHVybiB5SSh0LCBPKTtcbiAgfSwgW3RdKSwgTSA9IGwwKGZ1bmN0aW9uKE8pIHtcbiAgICB2YXIgaCA9IG4uZHJhZ2dhYmxlLmZpbmRCeUlkKE8pO1xuICAgIHJldHVybiBoID8gaC5vcHRpb25zIDogbnVsbDtcbiAgfSwgW24uZHJhZ2dhYmxlXSksIHUgPSBsMChmdW5jdGlvbigpIHtcbiAgICBzLmlzQ2xhaW1lZCgpICYmIChzLnRyeUFiYW5kb24oKSwgby5nZXRTdGF0ZSgpLnBoYXNlICE9PSBcIklETEVcIiAmJiBvLmRpc3BhdGNoKHg2KCkpKTtcbiAgfSwgW3MsIG9dKSwgQSA9IGwwKHMuaXNDbGFpbWVkLCBbc10pLCB6ID0gUjAoZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGNhbkdldExvY2s6IHAsXG4gICAgICB0cnlHZXRMb2NrOiBkLFxuICAgICAgZmluZENsb3Nlc3REcmFnZ2FibGVJZDogYixcbiAgICAgIGZpbmRPcHRpb25zRm9yRHJhZ2dhYmxlOiBNLFxuICAgICAgdHJ5UmVsZWFzZUxvY2s6IHUsXG4gICAgICBpc0xvY2tDbGFpbWVkOiBBXG4gICAgfTtcbiAgfSwgW3AsIGQsIGIsIE0sIHUsIEFdKTtcbiAgaEkoYSk7XG4gIGZvciAodmFyIGYgPSAwOyBmIDwgYS5sZW5ndGg7IGYrKylcbiAgICBhW2ZdKHopO1xufVxudmFyIFNJID0gZnVuY3Rpb24odCkge1xuICByZXR1cm4ge1xuICAgIG9uQmVmb3JlQ2FwdHVyZTogdC5vbkJlZm9yZUNhcHR1cmUsXG4gICAgb25CZWZvcmVEcmFnU3RhcnQ6IHQub25CZWZvcmVEcmFnU3RhcnQsXG4gICAgb25EcmFnU3RhcnQ6IHQub25EcmFnU3RhcnQsXG4gICAgb25EcmFnRW5kOiB0Lm9uRHJhZ0VuZCxcbiAgICBvbkRyYWdVcGRhdGU6IHQub25EcmFnVXBkYXRlXG4gIH07XG59O1xuZnVuY3Rpb24gVG8oZSkge1xuICByZXR1cm4gZS5jdXJyZW50IHx8IChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIgPyB5MSghMSwgXCJDb3VsZCBub3QgZmluZCBzdG9yZSBmcm9tIGxhenkgcmVmXCIpIDogeTEoITEpKSwgZS5jdXJyZW50O1xufVxuZnVuY3Rpb24gRUkoZSkge1xuICB2YXIgdCA9IGUuY29udGV4dElkLCBvID0gZS5zZXRDYWxsYmFja3MsIG4gPSBlLnNlbnNvcnMsIHIgPSBlLm5vbmNlLCBpID0gZS5kcmFnSGFuZGxlVXNhZ2VJbnN0cnVjdGlvbnMsIGEgPSBuMChudWxsKTtcbiAgR1QoKTtcbiAgdmFyIHMgPSBINihlKSwgbCA9IGwwKGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiBTSShzLmN1cnJlbnQpO1xuICB9LCBbc10pLCBwID0gVFQodCksIGQgPSBWVCh7XG4gICAgY29udGV4dElkOiB0LFxuICAgIHRleHQ6IGlcbiAgfSksIGIgPSBSVCh0LCByKSwgTSA9IGwwKGZ1bmN0aW9uKEYpIHtcbiAgICBUbyhhKS5kaXNwYXRjaChGKTtcbiAgfSwgW10pLCB1ID0gUjAoZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIHU5KHtcbiAgICAgIHB1Ymxpc2hXaGlsZURyYWdnaW5nOiB6TixcbiAgICAgIHVwZGF0ZURyb3BwYWJsZVNjcm9sbDogT04sXG4gICAgICB1cGRhdGVEcm9wcGFibGVJc0VuYWJsZWQ6IGZOLFxuICAgICAgdXBkYXRlRHJvcHBhYmxlSXNDb21iaW5lRW5hYmxlZDogZ04sXG4gICAgICBjb2xsZWN0aW9uU3RhcnRpbmc6IGhOXG4gICAgfSwgTSk7XG4gIH0sIFtNXSksIEEgPSBFVCgpLCB6ID0gUjAoZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIGNUKEEsIHUpO1xuICB9LCBbQSwgdV0pLCBmID0gUjAoZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIHFUKGEwKHtcbiAgICAgIHNjcm9sbFdpbmRvdzogbFQsXG4gICAgICBzY3JvbGxEcm9wcGFibGU6IHouc2Nyb2xsRHJvcHBhYmxlXG4gICAgfSwgdTkoe1xuICAgICAgbW92ZTogUmRcbiAgICB9LCBNKSkpO1xuICB9LCBbei5zY3JvbGxEcm9wcGFibGUsIE1dKSwgTyA9IEJUKHQpLCBoID0gUjAoZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIG5UKHtcbiAgICAgIGFubm91bmNlOiBwLFxuICAgICAgYXV0b1Njcm9sbGVyOiBmLFxuICAgICAgZGltZW5zaW9uTWFyc2hhbDogeixcbiAgICAgIGZvY3VzTWFyc2hhbDogTyxcbiAgICAgIGdldFJlc3BvbmRlcnM6IGwsXG4gICAgICBzdHlsZU1hcnNoYWw6IGJcbiAgICB9KTtcbiAgfSwgW3AsIGYsIHosIE8sIGwsIGJdKTtcbiAgcHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiICYmIGEuY3VycmVudCAmJiBhLmN1cnJlbnQgIT09IGggJiYgcHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiICYmIFowKFwidW5leHBlY3RlZCBzdG9yZSBjaGFuZ2VcIiksIGEuY3VycmVudCA9IGg7XG4gIHZhciBnID0gbDAoZnVuY3Rpb24oKSB7XG4gICAgdmFyIEYgPSBUbyhhKSwgVCA9IEYuZ2V0U3RhdGUoKTtcbiAgICBULnBoYXNlICE9PSBcIklETEVcIiAmJiBGLmRpc3BhdGNoKHg2KCkpO1xuICB9LCBbXSksIHYgPSBsMChmdW5jdGlvbigpIHtcbiAgICB2YXIgRiA9IFRvKGEpLmdldFN0YXRlKCk7XG4gICAgcmV0dXJuIEYuaXNEcmFnZ2luZyB8fCBGLnBoYXNlID09PSBcIkRST1BfQU5JTUFUSU5HXCI7XG4gIH0sIFtdKSwgTCA9IFIwKGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiB7XG4gICAgICBpc0RyYWdnaW5nOiB2LFxuICAgICAgdHJ5QWJvcnQ6IGdcbiAgICB9O1xuICB9LCBbdiwgZ10pO1xuICBvKEwpO1xuICB2YXIgeSA9IGwwKGZ1bmN0aW9uKEYpIHtcbiAgICByZXR1cm4gRGQoVG8oYSkuZ2V0U3RhdGUoKSwgRik7XG4gIH0sIFtdKSwgQiA9IGwwKGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiB0MyhUbyhhKS5nZXRTdGF0ZSgpKTtcbiAgfSwgW10pLCBYID0gUjAoZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIG1hcnNoYWw6IHosXG4gICAgICBmb2N1czogTyxcbiAgICAgIGNvbnRleHRJZDogdCxcbiAgICAgIGNhbkxpZnQ6IHksXG4gICAgICBpc01vdmVtZW50QWxsb3dlZDogQixcbiAgICAgIGRyYWdIYW5kbGVVc2FnZUluc3RydWN0aW9uc0lkOiBkLFxuICAgICAgcmVnaXN0cnk6IEFcbiAgICB9O1xuICB9LCBbdCwgeiwgZCwgTywgeSwgQiwgQV0pO1xuICByZXR1cm4gQkkoe1xuICAgIGNvbnRleHRJZDogdCxcbiAgICBzdG9yZTogaCxcbiAgICByZWdpc3RyeTogQSxcbiAgICBjdXN0b21TZW5zb3JzOiBuLFxuICAgIGVuYWJsZURlZmF1bHRTZW5zb3JzOiBlLmVuYWJsZURlZmF1bHRTZW5zb3JzICE9PSAhMVxuICB9KSwgUDEoZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIGc7XG4gIH0sIFtnXSksIG0xLmNyZWF0ZUVsZW1lbnQoZWkuUHJvdmlkZXIsIHtcbiAgICB2YWx1ZTogWFxuICB9LCBtMS5jcmVhdGVFbGVtZW50KEtwLCB7XG4gICAgY29udGV4dDogVDYsXG4gICAgc3RvcmU6IGhcbiAgfSwgZS5jaGlsZHJlbikpO1xufVxudmFyIGtJID0gMDtcbmZ1bmN0aW9uIE5JKCkge1xuICByZXR1cm4gUjAoZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIFwiXCIgKyBrSSsrO1xuICB9LCBbXSk7XG59XG5mdW5jdGlvbiBUSShlKSB7XG4gIHZhciB0ID0gTkkoKSwgbyA9IGUuZHJhZ0hhbmRsZVVzYWdlSW5zdHJ1Y3Rpb25zIHx8IFpuLmRyYWdIYW5kbGVVc2FnZUluc3RydWN0aW9ucztcbiAgcmV0dXJuIG0xLmNyZWF0ZUVsZW1lbnQocmssIG51bGwsIGZ1bmN0aW9uKG4pIHtcbiAgICByZXR1cm4gbTEuY3JlYXRlRWxlbWVudChFSSwge1xuICAgICAgbm9uY2U6IGUubm9uY2UsXG4gICAgICBjb250ZXh0SWQ6IHQsXG4gICAgICBzZXRDYWxsYmFja3M6IG4sXG4gICAgICBkcmFnSGFuZGxlVXNhZ2VJbnN0cnVjdGlvbnM6IG8sXG4gICAgICBlbmFibGVEZWZhdWx0U2Vuc29yczogZS5lbmFibGVEZWZhdWx0U2Vuc29ycyxcbiAgICAgIHNlbnNvcnM6IGUuc2Vuc29ycyxcbiAgICAgIG9uQmVmb3JlQ2FwdHVyZTogZS5vbkJlZm9yZUNhcHR1cmUsXG4gICAgICBvbkJlZm9yZURyYWdTdGFydDogZS5vbkJlZm9yZURyYWdTdGFydCxcbiAgICAgIG9uRHJhZ1N0YXJ0OiBlLm9uRHJhZ1N0YXJ0LFxuICAgICAgb25EcmFnVXBkYXRlOiBlLm9uRHJhZ1VwZGF0ZSxcbiAgICAgIG9uRHJhZ0VuZDogZS5vbkRyYWdFbmRcbiAgICB9LCBlLmNoaWxkcmVuKTtcbiAgfSk7XG59XG52YXIgUDYgPSBmdW5jdGlvbih0KSB7XG4gIHJldHVybiBmdW5jdGlvbihvKSB7XG4gICAgcmV0dXJuIHQgPT09IG87XG4gIH07XG59LCBJSSA9IFA2KFwic2Nyb2xsXCIpLCBESSA9IFA2KFwiYXV0b1wiKSwgSEkgPSBQNihcInZpc2libGVcIiksICQ5ID0gZnVuY3Rpb24odCwgbykge1xuICByZXR1cm4gbyh0Lm92ZXJmbG93WCkgfHwgbyh0Lm92ZXJmbG93WSk7XG59LCBWSSA9IGZ1bmN0aW9uKHQsIG8pIHtcbiAgcmV0dXJuIG8odC5vdmVyZmxvd1gpICYmIG8odC5vdmVyZmxvd1kpO1xufSwgS2QgPSBmdW5jdGlvbih0KSB7XG4gIHZhciBvID0gd2luZG93LmdldENvbXB1dGVkU3R5bGUodCksIG4gPSB7XG4gICAgb3ZlcmZsb3dYOiBvLm92ZXJmbG93WCxcbiAgICBvdmVyZmxvd1k6IG8ub3ZlcmZsb3dZXG4gIH07XG4gIHJldHVybiAkOShuLCBJSSkgfHwgJDkobiwgREkpO1xufSwgUEkgPSBmdW5jdGlvbigpIHtcbiAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WID09PSBcInByb2R1Y3Rpb25cIilcbiAgICByZXR1cm4gITE7XG4gIHZhciB0ID0gdnIoKSwgbyA9IGRvY3VtZW50LmRvY3VtZW50RWxlbWVudDtcbiAgaWYgKG8gfHwgKHByb2Nlc3MuZW52Lk5PREVfRU5WLCB5MSghMSkpLCAhS2QodCkpXG4gICAgcmV0dXJuICExO1xuICB2YXIgbiA9IHdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKG8pLCByID0ge1xuICAgIG92ZXJmbG93WDogbi5vdmVyZmxvd1gsXG4gICAgb3ZlcmZsb3dZOiBuLm92ZXJmbG93WVxuICB9O1xuICByZXR1cm4gVkkociwgSEkpIHx8IHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIiAmJiBaMChgXG4gICAgV2UgaGF2ZSBkZXRlY3RlZCB0aGF0IHlvdXIgPGJvZHk+IGVsZW1lbnQgbWlnaHQgYmUgYSBzY3JvbGwgY29udGFpbmVyLlxuICAgIFdlIGhhdmUgZm91bmQgbm8gcmVsaWFibGUgd2F5IG9mIGRldGVjdGluZyB3aGV0aGVyIHRoZSA8Ym9keT4gZWxlbWVudCBpcyBhIHNjcm9sbCBjb250YWluZXIuXG4gICAgVW5kZXIgbW9zdCBjaXJjdW1zdGFuY2VzIGEgPGJvZHk+IHNjcm9sbCBiYXIgd2lsbCBiZSBvbiB0aGUgPGh0bWw+IGVsZW1lbnQgKGRvY3VtZW50LmRvY3VtZW50RWxlbWVudClcblxuICAgIEJlY2F1c2Ugd2UgY2Fubm90IGRldGVybWluZSBpZiB0aGUgPGJvZHk+IGlzIGEgc2Nyb2xsIGNvbnRhaW5lciwgYW5kIGdlbmVyYWxseSBpdCBpcyBub3Qgb25lLFxuICAgIHdlIHdpbGwgYmUgdHJlYXRpbmcgdGhlIDxib2R5PiBhcyAqbm90KiBhIHNjcm9sbCBjb250YWluZXJcblxuICAgIE1vcmUgaW5mb3JtYXRpb246IGh0dHBzOi8vZ2l0aHViLmNvbS9hdGxhc3NpYW4vcmVhY3QtYmVhdXRpZnVsLWRuZC9ibG9iL21hc3Rlci9kb2NzL2d1aWRlcy9ob3ctd2UtZGV0ZWN0LXNjcm9sbC1jb250YWluZXJzLm1kXG4gIGApLCAhMTtcbn0sIEpkID0gZnVuY3Rpb24gZSh0KSB7XG4gIHJldHVybiB0ID09IG51bGwgPyBudWxsIDogdCA9PT0gZG9jdW1lbnQuYm9keSA/IFBJKCkgPyB0IDogbnVsbCA6IHQgPT09IGRvY3VtZW50LmRvY3VtZW50RWxlbWVudCA/IG51bGwgOiBLZCh0KSA/IHQgOiBlKHQucGFyZW50RWxlbWVudCk7XG59LCBGSSA9IGZ1bmN0aW9uKGUpIHtcbiAgaWYgKGUpIHtcbiAgICB2YXIgdCA9IEpkKGUucGFyZW50RWxlbWVudCk7XG4gICAgdCAmJiBwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIgJiYgWjAoYFxuICAgIERyb3BwYWJsZTogdW5zdXBwb3J0ZWQgbmVzdGVkIHNjcm9sbCBjb250YWluZXIgZGV0ZWN0ZWQuXG4gICAgQSBEcm9wcGFibGUgY2FuIG9ubHkgaGF2ZSBvbmUgc2Nyb2xsIHBhcmVudCAod2hpY2ggY2FuIGJlIGl0c2VsZilcbiAgICBOZXN0ZWQgc2Nyb2xsIGNvbnRhaW5lcnMgYXJlIGN1cnJlbnRseSBub3Qgc3VwcG9ydGVkLlxuXG4gICAgV2UgaG9wZSB0byBzdXBwb3J0IG5lc3RlZCBzY3JvbGwgY29udGFpbmVycyBzb29uOiBodHRwczovL2dpdGh1Yi5jb20vYXRsYXNzaWFuL3JlYWN0LWJlYXV0aWZ1bC1kbmQvaXNzdWVzLzEzMVxuICBgKTtcbiAgfVxufSwgdTUgPSBmdW5jdGlvbihlKSB7XG4gIHJldHVybiB7XG4gICAgeDogZS5zY3JvbGxMZWZ0LFxuICAgIHk6IGUuc2Nyb2xsVG9wXG4gIH07XG59LCBYSSA9IGZ1bmN0aW9uIGUodCkge1xuICBpZiAoIXQpXG4gICAgcmV0dXJuICExO1xuICB2YXIgbyA9IHdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKHQpO1xuICByZXR1cm4gby5wb3NpdGlvbiA9PT0gXCJmaXhlZFwiID8gITAgOiBlKHQucGFyZW50RWxlbWVudCk7XG59LCBVSSA9IGZ1bmN0aW9uKGUpIHtcbiAgdmFyIHQgPSBKZChlKSwgbyA9IFhJKGUpO1xuICByZXR1cm4ge1xuICAgIGNsb3Nlc3RTY3JvbGxhYmxlOiB0LFxuICAgIGlzRml4ZWRPblBhZ2U6IG9cbiAgfTtcbn0sIFlJID0gZnVuY3Rpb24oZSkge1xuICB2YXIgdCA9IGUuZGVzY3JpcHRvciwgbyA9IGUuaXNFbmFibGVkLCBuID0gZS5pc0NvbWJpbmVFbmFibGVkLCByID0gZS5pc0ZpeGVkT25QYWdlLCBpID0gZS5kaXJlY3Rpb24sIGEgPSBlLmNsaWVudCwgcyA9IGUucGFnZSwgbCA9IGUuY2xvc2VzdCwgcCA9IGZ1bmN0aW9uKCkge1xuICAgIGlmICghbClcbiAgICAgIHJldHVybiBudWxsO1xuICAgIHZhciB1ID0gbC5zY3JvbGxTaXplLCBBID0gbC5jbGllbnQsIHogPSBOZCh7XG4gICAgICBzY3JvbGxIZWlnaHQ6IHUuc2Nyb2xsSGVpZ2h0LFxuICAgICAgc2Nyb2xsV2lkdGg6IHUuc2Nyb2xsV2lkdGgsXG4gICAgICBoZWlnaHQ6IEEucGFkZGluZ0JveC5oZWlnaHQsXG4gICAgICB3aWR0aDogQS5wYWRkaW5nQm94LndpZHRoXG4gICAgfSk7XG4gICAgcmV0dXJuIHtcbiAgICAgIHBhZ2VNYXJnaW5Cb3g6IGwucGFnZS5tYXJnaW5Cb3gsXG4gICAgICBmcmFtZUNsaWVudDogQSxcbiAgICAgIHNjcm9sbFNpemU6IHUsXG4gICAgICBzaG91bGRDbGlwU3ViamVjdDogbC5zaG91bGRDbGlwU3ViamVjdCxcbiAgICAgIHNjcm9sbDoge1xuICAgICAgICBpbml0aWFsOiBsLnNjcm9sbCxcbiAgICAgICAgY3VycmVudDogbC5zY3JvbGwsXG4gICAgICAgIG1heDogeixcbiAgICAgICAgZGlmZjoge1xuICAgICAgICAgIHZhbHVlOiB1MixcbiAgICAgICAgICBkaXNwbGFjZW1lbnQ6IHUyXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9O1xuICB9KCksIGQgPSBpID09PSBcInZlcnRpY2FsXCIgPyBMNiA6IHVkLCBiID0gZW8oe1xuICAgIHBhZ2U6IHMsXG4gICAgd2l0aFBsYWNlaG9sZGVyOiBudWxsLFxuICAgIGF4aXM6IGQsXG4gICAgZnJhbWU6IHBcbiAgfSksIE0gPSB7XG4gICAgZGVzY3JpcHRvcjogdCxcbiAgICBpc0NvbWJpbmVFbmFibGVkOiBuLFxuICAgIGlzRml4ZWRPblBhZ2U6IHIsXG4gICAgYXhpczogZCxcbiAgICBpc0VuYWJsZWQ6IG8sXG4gICAgY2xpZW50OiBhLFxuICAgIHBhZ2U6IHMsXG4gICAgZnJhbWU6IHAsXG4gICAgc3ViamVjdDogYlxuICB9O1xuICByZXR1cm4gTTtcbn0sIEdJID0gZnVuY3Rpb24odCwgbykge1xuICB2YXIgbiA9IGlkKHQpO1xuICBpZiAoIW8gfHwgdCAhPT0gbylcbiAgICByZXR1cm4gbjtcbiAgdmFyIHIgPSBuLnBhZGRpbmdCb3gudG9wIC0gby5zY3JvbGxUb3AsIGkgPSBuLnBhZGRpbmdCb3gubGVmdCAtIG8uc2Nyb2xsTGVmdCwgYSA9IHIgKyBvLnNjcm9sbEhlaWdodCwgcyA9IGkgKyBvLnNjcm9sbFdpZHRoLCBsID0ge1xuICAgIHRvcDogcixcbiAgICByaWdodDogcyxcbiAgICBib3R0b206IGEsXG4gICAgbGVmdDogaVxuICB9LCBwID0gTzYobCwgbi5ib3JkZXIpLCBkID0gZjYoe1xuICAgIGJvcmRlckJveDogcCxcbiAgICBtYXJnaW46IG4ubWFyZ2luLFxuICAgIGJvcmRlcjogbi5ib3JkZXIsXG4gICAgcGFkZGluZzogbi5wYWRkaW5nXG4gIH0pO1xuICByZXR1cm4gZDtcbn0sIFFJID0gZnVuY3Rpb24oZSkge1xuICB2YXIgdCA9IGUucmVmLCBvID0gZS5kZXNjcmlwdG9yLCBuID0gZS5lbnYsIHIgPSBlLndpbmRvd1Njcm9sbCwgaSA9IGUuZGlyZWN0aW9uLCBhID0gZS5pc0Ryb3BEaXNhYmxlZCwgcyA9IGUuaXNDb21iaW5lRW5hYmxlZCwgbCA9IGUuc2hvdWxkQ2xpcFN1YmplY3QsIHAgPSBuLmNsb3Nlc3RTY3JvbGxhYmxlLCBkID0gR0kodCwgcCksIGIgPSBxNChkLCByKSwgTSA9IGZ1bmN0aW9uKCkge1xuICAgIGlmICghcClcbiAgICAgIHJldHVybiBudWxsO1xuICAgIHZhciBBID0gaWQocCksIHogPSB7XG4gICAgICBzY3JvbGxIZWlnaHQ6IHAuc2Nyb2xsSGVpZ2h0LFxuICAgICAgc2Nyb2xsV2lkdGg6IHAuc2Nyb2xsV2lkdGhcbiAgICB9O1xuICAgIHJldHVybiB7XG4gICAgICBjbGllbnQ6IEEsXG4gICAgICBwYWdlOiBxNChBLCByKSxcbiAgICAgIHNjcm9sbDogdTUocCksXG4gICAgICBzY3JvbGxTaXplOiB6LFxuICAgICAgc2hvdWxkQ2xpcFN1YmplY3Q6IGxcbiAgICB9O1xuICB9KCksIHUgPSBZSSh7XG4gICAgZGVzY3JpcHRvcjogbyxcbiAgICBpc0VuYWJsZWQ6ICFhLFxuICAgIGlzQ29tYmluZUVuYWJsZWQ6IHMsXG4gICAgaXNGaXhlZE9uUGFnZTogbi5pc0ZpeGVkT25QYWdlLFxuICAgIGRpcmVjdGlvbjogaSxcbiAgICBjbGllbnQ6IGQsXG4gICAgcGFnZTogYixcbiAgICBjbG9zZXN0OiBNXG4gIH0pO1xuICByZXR1cm4gdTtcbn0sIFpJID0ge1xuICBwYXNzaXZlOiAhMVxufSwgakkgPSB7XG4gIHBhc3NpdmU6ICEwXG59LCBlYyA9IGZ1bmN0aW9uKGUpIHtcbiAgcmV0dXJuIGUuc2hvdWxkUHVibGlzaEltbWVkaWF0ZWx5ID8gWkkgOiBqSTtcbn07XG5mdW5jdGlvbiBXNChlKSB7XG4gIHZhciB0ID0gQXQoZSk7XG4gIHJldHVybiB0IHx8IChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIgPyB5MSghMSwgXCJDb3VsZCBub3QgZmluZCByZXF1aXJlZCBjb250ZXh0XCIpIDogeTEoITEpKSwgdDtcbn1cbnZhciB2biA9IGZ1bmN0aW9uKHQpIHtcbiAgcmV0dXJuIHQgJiYgdC5lbnYuY2xvc2VzdFNjcm9sbGFibGUgfHwgbnVsbDtcbn07XG5mdW5jdGlvbiBLSShlKSB7XG4gIHZhciB0ID0gbjAobnVsbCksIG8gPSBXNChlaSksIG4gPSBJNihcImRyb3BwYWJsZVwiKSwgciA9IG8ucmVnaXN0cnksIGkgPSBvLm1hcnNoYWwsIGEgPSBINihlKSwgcyA9IFIwKGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiB7XG4gICAgICBpZDogZS5kcm9wcGFibGVJZCxcbiAgICAgIHR5cGU6IGUudHlwZSxcbiAgICAgIG1vZGU6IGUubW9kZVxuICAgIH07XG4gIH0sIFtlLmRyb3BwYWJsZUlkLCBlLm1vZGUsIGUudHlwZV0pLCBsID0gbjAocyksIHAgPSBSMChmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gcDIoZnVuY3Rpb24odiwgTCkge1xuICAgICAgdC5jdXJyZW50IHx8IChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIgPyB5MSghMSwgXCJDYW4gb25seSB1cGRhdGUgc2Nyb2xsIHdoZW4gZHJhZ2dpbmdcIikgOiB5MSghMSkpO1xuICAgICAgdmFyIHkgPSB7XG4gICAgICAgIHg6IHYsXG4gICAgICAgIHk6IExcbiAgICAgIH07XG4gICAgICBpLnVwZGF0ZURyb3BwYWJsZVNjcm9sbChzLmlkLCB5KTtcbiAgICB9KTtcbiAgfSwgW3MuaWQsIGldKSwgZCA9IGwwKGZ1bmN0aW9uKCkge1xuICAgIHZhciB2ID0gdC5jdXJyZW50O1xuICAgIHJldHVybiAhdiB8fCAhdi5lbnYuY2xvc2VzdFNjcm9sbGFibGUgPyB1MiA6IHU1KHYuZW52LmNsb3Nlc3RTY3JvbGxhYmxlKTtcbiAgfSwgW10pLCBiID0gbDAoZnVuY3Rpb24oKSB7XG4gICAgdmFyIHYgPSBkKCk7XG4gICAgcCh2LngsIHYueSk7XG4gIH0sIFtkLCBwXSksIE0gPSBSMChmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gT3IoYik7XG4gIH0sIFtiXSksIHUgPSBsMChmdW5jdGlvbigpIHtcbiAgICB2YXIgdiA9IHQuY3VycmVudCwgTCA9IHZuKHYpO1xuICAgIHYgJiYgTCB8fCAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiID8geTEoITEsIFwiQ291bGQgbm90IGZpbmQgc2Nyb2xsIG9wdGlvbnMgd2hpbGUgc2Nyb2xsaW5nXCIpIDogeTEoITEpKTtcbiAgICB2YXIgeSA9IHYuc2Nyb2xsT3B0aW9ucztcbiAgICBpZiAoeS5zaG91bGRQdWJsaXNoSW1tZWRpYXRlbHkpIHtcbiAgICAgIGIoKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgTSgpO1xuICB9LCBbTSwgYl0pLCBBID0gbDAoZnVuY3Rpb24odiwgTCkge1xuICAgIHQuY3VycmVudCAmJiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiID8geTEoITEsIFwiQ2Fubm90IGNvbGxlY3QgYSBkcm9wcGFibGUgd2hpbGUgYSBkcmFnIGlzIG9jY3VycmluZ1wiKSA6IHkxKCExKSk7XG4gICAgdmFyIHkgPSBhLmN1cnJlbnQsIEIgPSB5LmdldERyb3BwYWJsZVJlZigpO1xuICAgIEIgfHwgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIiA/IHkxKCExLCBcIkNhbm5vdCBjb2xsZWN0IHdpdGhvdXQgYSBkcm9wcGFibGUgcmVmXCIpIDogeTEoITEpKTtcbiAgICB2YXIgWCA9IFVJKEIpLCBGID0ge1xuICAgICAgcmVmOiBCLFxuICAgICAgZGVzY3JpcHRvcjogcyxcbiAgICAgIGVudjogWCxcbiAgICAgIHNjcm9sbE9wdGlvbnM6IExcbiAgICB9O1xuICAgIHQuY3VycmVudCA9IEY7XG4gICAgdmFyIFQgPSBRSSh7XG4gICAgICByZWY6IEIsXG4gICAgICBkZXNjcmlwdG9yOiBzLFxuICAgICAgZW52OiBYLFxuICAgICAgd2luZG93U2Nyb2xsOiB2LFxuICAgICAgZGlyZWN0aW9uOiB5LmRpcmVjdGlvbixcbiAgICAgIGlzRHJvcERpc2FibGVkOiB5LmlzRHJvcERpc2FibGVkLFxuICAgICAgaXNDb21iaW5lRW5hYmxlZDogeS5pc0NvbWJpbmVFbmFibGVkLFxuICAgICAgc2hvdWxkQ2xpcFN1YmplY3Q6ICF5Lmlnbm9yZUNvbnRhaW5lckNsaXBwaW5nXG4gICAgfSksIHcgPSBYLmNsb3Nlc3RTY3JvbGxhYmxlO1xuICAgIHJldHVybiB3ICYmICh3LnNldEF0dHJpYnV0ZShaOS5jb250ZXh0SWQsIG8uY29udGV4dElkKSwgdy5hZGRFdmVudExpc3RlbmVyKFwic2Nyb2xsXCIsIHUsIGVjKEYuc2Nyb2xsT3B0aW9ucykpLCBwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIgJiYgRkkodykpLCBUO1xuICB9LCBbby5jb250ZXh0SWQsIHMsIHUsIGFdKSwgeiA9IGwwKGZ1bmN0aW9uKCkge1xuICAgIHZhciB2ID0gdC5jdXJyZW50LCBMID0gdm4odik7XG4gICAgcmV0dXJuIHYgJiYgTCB8fCAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiID8geTEoITEsIFwiQ2FuIG9ubHkgcmVjb2xsZWN0IERyb3BwYWJsZSBjbGllbnQgZm9yIERyb3BwYWJsZXMgdGhhdCBoYXZlIGEgc2Nyb2xsIGNvbnRhaW5lclwiKSA6IHkxKCExKSksIHU1KEwpO1xuICB9LCBbXSksIGYgPSBsMChmdW5jdGlvbigpIHtcbiAgICB2YXIgdiA9IHQuY3VycmVudDtcbiAgICB2IHx8IChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIgPyB5MSghMSwgXCJDYW5ub3Qgc3RvcCBkcmFnIHdoZW4gbm8gYWN0aXZlIGRyYWdcIikgOiB5MSghMSkpO1xuICAgIHZhciBMID0gdm4odik7XG4gICAgdC5jdXJyZW50ID0gbnVsbCwgTCAmJiAoTS5jYW5jZWwoKSwgTC5yZW1vdmVBdHRyaWJ1dGUoWjkuY29udGV4dElkKSwgTC5yZW1vdmVFdmVudExpc3RlbmVyKFwic2Nyb2xsXCIsIHUsIGVjKHYuc2Nyb2xsT3B0aW9ucykpKTtcbiAgfSwgW3UsIE1dKSwgTyA9IGwwKGZ1bmN0aW9uKHYpIHtcbiAgICB2YXIgTCA9IHQuY3VycmVudDtcbiAgICBMIHx8IChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIgPyB5MSghMSwgXCJDYW5ub3Qgc2Nyb2xsIHdoZW4gdGhlcmUgaXMgbm8gZHJhZ1wiKSA6IHkxKCExKSk7XG4gICAgdmFyIHkgPSB2bihMKTtcbiAgICB5IHx8IChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIgPyB5MSghMSwgXCJDYW5ub3Qgc2Nyb2xsIGEgZHJvcHBhYmxlIHdpdGggbm8gY2xvc2VzdCBzY3JvbGxhYmxlXCIpIDogeTEoITEpKSwgeS5zY3JvbGxUb3AgKz0gdi55LCB5LnNjcm9sbExlZnQgKz0gdi54O1xuICB9LCBbXSksIGggPSBSMChmdW5jdGlvbigpIHtcbiAgICByZXR1cm4ge1xuICAgICAgZ2V0RGltZW5zaW9uQW5kV2F0Y2hTY3JvbGw6IEEsXG4gICAgICBnZXRTY3JvbGxXaGlsZURyYWdnaW5nOiB6LFxuICAgICAgZHJhZ1N0b3BwZWQ6IGYsXG4gICAgICBzY3JvbGw6IE9cbiAgICB9O1xuICB9LCBbZiwgQSwgeiwgT10pLCBnID0gUjAoZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHVuaXF1ZUlkOiBuLFxuICAgICAgZGVzY3JpcHRvcjogcyxcbiAgICAgIGNhbGxiYWNrczogaFxuICAgIH07XG4gIH0sIFtoLCBzLCBuXSk7XG4gIGVlKGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiBsLmN1cnJlbnQgPSBnLmRlc2NyaXB0b3IsIHIuZHJvcHBhYmxlLnJlZ2lzdGVyKGcpLCBmdW5jdGlvbigpIHtcbiAgICAgIHQuY3VycmVudCAmJiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiICYmIFowKFwiVW5zdXBwb3J0ZWQ6IGNoYW5naW5nIHRoZSBkcm9wcGFibGVJZCBvciB0eXBlIG9mIGEgRHJvcHBhYmxlIGR1cmluZyBhIGRyYWdcIiksIGYoKSksIHIuZHJvcHBhYmxlLnVucmVnaXN0ZXIoZyk7XG4gICAgfTtcbiAgfSwgW2gsIHMsIGYsIGcsIGksIHIuZHJvcHBhYmxlXSksIGVlKGZ1bmN0aW9uKCkge1xuICAgIHQuY3VycmVudCAmJiBpLnVwZGF0ZURyb3BwYWJsZUlzRW5hYmxlZChsLmN1cnJlbnQuaWQsICFlLmlzRHJvcERpc2FibGVkKTtcbiAgfSwgW2UuaXNEcm9wRGlzYWJsZWQsIGldKSwgZWUoZnVuY3Rpb24oKSB7XG4gICAgdC5jdXJyZW50ICYmIGkudXBkYXRlRHJvcHBhYmxlSXNDb21iaW5lRW5hYmxlZChsLmN1cnJlbnQuaWQsIGUuaXNDb21iaW5lRW5hYmxlZCk7XG4gIH0sIFtlLmlzQ29tYmluZUVuYWJsZWQsIGldKTtcbn1cbmZ1bmN0aW9uIHNhKCkge1xufVxudmFyIHRjID0ge1xuICB3aWR0aDogMCxcbiAgaGVpZ2h0OiAwLFxuICBtYXJnaW46IGxrXG59LCBKSSA9IGZ1bmN0aW9uKHQpIHtcbiAgdmFyIG8gPSB0LmlzQW5pbWF0aW5nT3Blbk9uTW91bnQsIG4gPSB0LnBsYWNlaG9sZGVyLCByID0gdC5hbmltYXRlO1xuICByZXR1cm4gbyB8fCByID09PSBcImNsb3NlXCIgPyB0YyA6IHtcbiAgICBoZWlnaHQ6IG4uY2xpZW50LmJvcmRlckJveC5oZWlnaHQsXG4gICAgd2lkdGg6IG4uY2xpZW50LmJvcmRlckJveC53aWR0aCxcbiAgICBtYXJnaW46IG4uY2xpZW50Lm1hcmdpblxuICB9O1xufSwgX0kgPSBmdW5jdGlvbih0KSB7XG4gIHZhciBvID0gdC5pc0FuaW1hdGluZ09wZW5Pbk1vdW50LCBuID0gdC5wbGFjZWhvbGRlciwgciA9IHQuYW5pbWF0ZSwgaSA9IEpJKHtcbiAgICBpc0FuaW1hdGluZ09wZW5Pbk1vdW50OiBvLFxuICAgIHBsYWNlaG9sZGVyOiBuLFxuICAgIGFuaW1hdGU6IHJcbiAgfSk7XG4gIHJldHVybiB7XG4gICAgZGlzcGxheTogbi5kaXNwbGF5LFxuICAgIGJveFNpemluZzogXCJib3JkZXItYm94XCIsXG4gICAgd2lkdGg6IGkud2lkdGgsXG4gICAgaGVpZ2h0OiBpLmhlaWdodCxcbiAgICBtYXJnaW5Ub3A6IGkubWFyZ2luLnRvcCxcbiAgICBtYXJnaW5SaWdodDogaS5tYXJnaW4ucmlnaHQsXG4gICAgbWFyZ2luQm90dG9tOiBpLm1hcmdpbi5ib3R0b20sXG4gICAgbWFyZ2luTGVmdDogaS5tYXJnaW4ubGVmdCxcbiAgICBmbGV4U2hyaW5rOiBcIjBcIixcbiAgICBmbGV4R3JvdzogXCIwXCIsXG4gICAgcG9pbnRlckV2ZW50czogXCJub25lXCIsXG4gICAgdHJhbnNpdGlvbjogciAhPT0gXCJub25lXCIgPyBfby5wbGFjZWhvbGRlciA6IG51bGxcbiAgfTtcbn07XG5mdW5jdGlvbiAkSShlKSB7XG4gIHZhciB0ID0gbjAobnVsbCksIG8gPSBsMChmdW5jdGlvbigpIHtcbiAgICB0LmN1cnJlbnQgJiYgKGNsZWFyVGltZW91dCh0LmN1cnJlbnQpLCB0LmN1cnJlbnQgPSBudWxsKTtcbiAgfSwgW10pLCBuID0gZS5hbmltYXRlLCByID0gZS5vblRyYW5zaXRpb25FbmQsIGkgPSBlLm9uQ2xvc2UsIGEgPSBlLmNvbnRleHRJZCwgcyA9IFQxKGUuYW5pbWF0ZSA9PT0gXCJvcGVuXCIpLCBsID0gc1swXSwgcCA9IHNbMV07XG4gIFAxKGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiBsID8gbiAhPT0gXCJvcGVuXCIgPyAobygpLCBwKCExKSwgc2EpIDogdC5jdXJyZW50ID8gc2EgOiAodC5jdXJyZW50ID0gc2V0VGltZW91dChmdW5jdGlvbigpIHtcbiAgICAgIHQuY3VycmVudCA9IG51bGwsIHAoITEpO1xuICAgIH0pLCBvKSA6IHNhO1xuICB9LCBbbiwgbCwgb10pO1xuICB2YXIgZCA9IGwwKGZ1bmN0aW9uKE0pIHtcbiAgICBNLnByb3BlcnR5TmFtZSA9PT0gXCJoZWlnaHRcIiAmJiAocigpLCBuID09PSBcImNsb3NlXCIgJiYgaSgpKTtcbiAgfSwgW24sIGksIHJdKSwgYiA9IF9JKHtcbiAgICBpc0FuaW1hdGluZ09wZW5Pbk1vdW50OiBsLFxuICAgIGFuaW1hdGU6IGUuYW5pbWF0ZSxcbiAgICBwbGFjZWhvbGRlcjogZS5wbGFjZWhvbGRlclxuICB9KTtcbiAgcmV0dXJuIG0xLmNyZWF0ZUVsZW1lbnQoZS5wbGFjZWhvbGRlci50YWdOYW1lLCB7XG4gICAgc3R5bGU6IGIsXG4gICAgXCJkYXRhLXJiZC1wbGFjZWhvbGRlci1jb250ZXh0LWlkXCI6IGEsXG4gICAgb25UcmFuc2l0aW9uRW5kOiBkLFxuICAgIHJlZjogZS5pbm5lclJlZlxuICB9KTtcbn1cbnZhciBlRCA9IG0xLm1lbW8oJEkpLCBGNiA9IG0xLmNyZWF0ZUNvbnRleHQobnVsbCk7XG5mdW5jdGlvbiBfZChlKSB7XG4gIGUgJiYgRnIoZSkgfHwgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIiA/IHkxKCExLCBgXG4gICAgcHJvdmlkZWQuaW5uZXJSZWYgaGFzIG5vdCBiZWVuIHByb3ZpZGVkIHdpdGggYSBIVE1MRWxlbWVudC5cblxuICAgIFlvdSBjYW4gZmluZCBhIGd1aWRlIG9uIHVzaW5nIHRoZSBpbm5lclJlZiBjYWxsYmFjayBmdW5jdGlvbnMgYXQ6XG4gICAgaHR0cHM6Ly9naXRodWIuY29tL2F0bGFzc2lhbi9yZWFjdC1iZWF1dGlmdWwtZG5kL2Jsb2IvbWFzdGVyL2RvY3MvZ3VpZGVzL3VzaW5nLWlubmVyLXJlZi5tZFxuICBgKSA6IHkxKCExKSk7XG59XG5mdW5jdGlvbiBjYShlKSB7XG4gIHJldHVybiB0eXBlb2YgZSA9PSBcImJvb2xlYW5cIjtcbn1cbmZ1bmN0aW9uIGxhKGUsIHQpIHtcbiAgdC5mb3JFYWNoKGZ1bmN0aW9uKG8pIHtcbiAgICByZXR1cm4gbyhlKTtcbiAgfSk7XG59XG52YXIgdEQgPSBbZnVuY3Rpb24odCkge1xuICB2YXIgbyA9IHQucHJvcHM7XG4gIG8uZHJvcHBhYmxlSWQgfHwgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIiA/IHkxKCExLCBcIkEgRHJvcHBhYmxlIHJlcXVpcmVzIGEgZHJvcHBhYmxlSWQgcHJvcFwiKSA6IHkxKCExKSksIHR5cGVvZiBvLmRyb3BwYWJsZUlkICE9IFwic3RyaW5nXCIgJiYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIiA/IHkxKCExLCBcIkEgRHJvcHBhYmxlIHJlcXVpcmVzIGEgW3N0cmluZ10gZHJvcHBhYmxlSWQuIFByb3ZpZGVkOiBbXCIgKyB0eXBlb2Ygby5kcm9wcGFibGVJZCArIFwiXVwiKSA6IHkxKCExKSk7XG59LCBmdW5jdGlvbih0KSB7XG4gIHZhciBvID0gdC5wcm9wcztcbiAgY2Eoby5pc0Ryb3BEaXNhYmxlZCkgfHwgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIiA/IHkxKCExLCBcImlzRHJvcERpc2FibGVkIG11c3QgYmUgYSBib29sZWFuXCIpIDogeTEoITEpKSwgY2Eoby5pc0NvbWJpbmVFbmFibGVkKSB8fCAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiID8geTEoITEsIFwiaXNDb21iaW5lRW5hYmxlZCBtdXN0IGJlIGEgYm9vbGVhblwiKSA6IHkxKCExKSksIGNhKG8uaWdub3JlQ29udGFpbmVyQ2xpcHBpbmcpIHx8IChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIgPyB5MSghMSwgXCJpZ25vcmVDb250YWluZXJDbGlwcGluZyBtdXN0IGJlIGEgYm9vbGVhblwiKSA6IHkxKCExKSk7XG59LCBmdW5jdGlvbih0KSB7XG4gIHZhciBvID0gdC5nZXREcm9wcGFibGVSZWY7XG4gIF9kKG8oKSk7XG59XSwgb0QgPSBbZnVuY3Rpb24odCkge1xuICB2YXIgbyA9IHQucHJvcHMsIG4gPSB0LmdldFBsYWNlaG9sZGVyUmVmO1xuICBpZiAoby5wbGFjZWhvbGRlcikge1xuICAgIHZhciByID0gbigpO1xuICAgIHIgfHwgcHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiICYmIFowKGBcbiAgICAgIERyb3BwYWJsZSBzZXR1cCBpc3N1ZSBbZHJvcHBhYmxlSWQ6IFwiYCArIG8uZHJvcHBhYmxlSWQgKyBgXCJdOlxuICAgICAgRHJvcHBhYmxlUHJvdmlkZWQgPiBwbGFjZWhvbGRlciBjb3VsZCBub3QgYmUgZm91bmQuXG5cbiAgICAgIFBsZWFzZSBiZSBzdXJlIHRvIGFkZCB0aGUge3Byb3ZpZGVkLnBsYWNlaG9sZGVyfSBSZWFjdCBOb2RlIGFzIGEgY2hpbGQgb2YgeW91ciBEcm9wcGFibGUuXG4gICAgICBNb3JlIGluZm9ybWF0aW9uOiBodHRwczovL2dpdGh1Yi5jb20vYXRsYXNzaWFuL3JlYWN0LWJlYXV0aWZ1bC1kbmQvYmxvYi9tYXN0ZXIvZG9jcy9hcGkvZHJvcHBhYmxlLm1kXG4gICAgYCk7XG4gIH1cbn1dLCByRCA9IFtmdW5jdGlvbih0KSB7XG4gIHZhciBvID0gdC5wcm9wcztcbiAgby5yZW5kZXJDbG9uZSB8fCAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiID8geTEoITEsIFwiTXVzdCBwcm92aWRlIGEgY2xvbmUgcmVuZGVyIGZ1bmN0aW9uIChyZW5kZXJDbG9uZSkgZm9yIHZpcnR1YWwgbGlzdHNcIikgOiB5MSghMSkpO1xufSwgZnVuY3Rpb24odCkge1xuICB2YXIgbyA9IHQuZ2V0UGxhY2Vob2xkZXJSZWY7XG4gIG8oKSAmJiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiID8geTEoITEsIFwiRXhwZWN0ZWQgdmlydHVhbCBsaXN0IHRvIG5vdCBoYXZlIGEgcGxhY2Vob2xkZXJcIikgOiB5MSghMSkpO1xufV07XG5mdW5jdGlvbiBuRChlKSB7XG4gIFhyKGZ1bmN0aW9uKCkge1xuICAgIGxhKGUsIHREKSwgZS5wcm9wcy5tb2RlID09PSBcInN0YW5kYXJkXCIgJiYgbGEoZSwgb0QpLCBlLnByb3BzLm1vZGUgPT09IFwidmlydHVhbFwiICYmIGxhKGUsIHJEKTtcbiAgfSk7XG59XG52YXIgaUQgPSBmdW5jdGlvbihlKSB7XG4gIFY0KHQsIGUpO1xuICBmdW5jdGlvbiB0KCkge1xuICAgIGZvciAodmFyIG4sIHIgPSBhcmd1bWVudHMubGVuZ3RoLCBpID0gbmV3IEFycmF5KHIpLCBhID0gMDsgYSA8IHI7IGErKylcbiAgICAgIGlbYV0gPSBhcmd1bWVudHNbYV07XG4gICAgcmV0dXJuIG4gPSBlLmNhbGwuYXBwbHkoZSwgW3RoaXNdLmNvbmNhdChpKSkgfHwgdGhpcywgbi5zdGF0ZSA9IHtcbiAgICAgIGlzVmlzaWJsZTogISFuLnByb3BzLm9uLFxuICAgICAgZGF0YTogbi5wcm9wcy5vbixcbiAgICAgIGFuaW1hdGU6IG4ucHJvcHMuc2hvdWxkQW5pbWF0ZSAmJiBuLnByb3BzLm9uID8gXCJvcGVuXCIgOiBcIm5vbmVcIlxuICAgIH0sIG4ub25DbG9zZSA9IGZ1bmN0aW9uKCkge1xuICAgICAgbi5zdGF0ZS5hbmltYXRlID09PSBcImNsb3NlXCIgJiYgbi5zZXRTdGF0ZSh7XG4gICAgICAgIGlzVmlzaWJsZTogITFcbiAgICAgIH0pO1xuICAgIH0sIG47XG4gIH1cbiAgdC5nZXREZXJpdmVkU3RhdGVGcm9tUHJvcHMgPSBmdW5jdGlvbihyLCBpKSB7XG4gICAgcmV0dXJuIHIuc2hvdWxkQW5pbWF0ZSA/IHIub24gPyB7XG4gICAgICBpc1Zpc2libGU6ICEwLFxuICAgICAgZGF0YTogci5vbixcbiAgICAgIGFuaW1hdGU6IFwib3BlblwiXG4gICAgfSA6IGkuaXNWaXNpYmxlID8ge1xuICAgICAgaXNWaXNpYmxlOiAhMCxcbiAgICAgIGRhdGE6IGkuZGF0YSxcbiAgICAgIGFuaW1hdGU6IFwiY2xvc2VcIlxuICAgIH0gOiB7XG4gICAgICBpc1Zpc2libGU6ICExLFxuICAgICAgYW5pbWF0ZTogXCJjbG9zZVwiLFxuICAgICAgZGF0YTogbnVsbFxuICAgIH0gOiB7XG4gICAgICBpc1Zpc2libGU6ICEhci5vbixcbiAgICAgIGRhdGE6IHIub24sXG4gICAgICBhbmltYXRlOiBcIm5vbmVcIlxuICAgIH07XG4gIH07XG4gIHZhciBvID0gdC5wcm90b3R5cGU7XG4gIHJldHVybiBvLnJlbmRlciA9IGZ1bmN0aW9uKCkge1xuICAgIGlmICghdGhpcy5zdGF0ZS5pc1Zpc2libGUpXG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB2YXIgciA9IHtcbiAgICAgIG9uQ2xvc2U6IHRoaXMub25DbG9zZSxcbiAgICAgIGRhdGE6IHRoaXMuc3RhdGUuZGF0YSxcbiAgICAgIGFuaW1hdGU6IHRoaXMuc3RhdGUuYW5pbWF0ZVxuICAgIH07XG4gICAgcmV0dXJuIHRoaXMucHJvcHMuY2hpbGRyZW4ocik7XG4gIH0sIHQ7XG59KG0xLlB1cmVDb21wb25lbnQpLCBvYyA9IHtcbiAgZHJhZ2dpbmc6IDVlMyxcbiAgZHJvcEFuaW1hdGluZzogNDUwMFxufSwgYUQgPSBmdW5jdGlvbih0LCBvKSB7XG4gIHJldHVybiBvID8gX28uZHJvcChvLmR1cmF0aW9uKSA6IHQgPyBfby5zbmFwIDogX28uZmx1aWQ7XG59LCBzRCA9IGZ1bmN0aW9uKHQsIG8pIHtcbiAgcmV0dXJuIHQgPyBvID8gTHIub3BhY2l0eS5kcm9wIDogTHIub3BhY2l0eS5jb21iaW5pbmcgOiBudWxsO1xufSwgY0QgPSBmdW5jdGlvbih0KSB7XG4gIHJldHVybiB0LmZvcmNlU2hvdWxkQW5pbWF0ZSAhPSBudWxsID8gdC5mb3JjZVNob3VsZEFuaW1hdGUgOiB0Lm1vZGUgPT09IFwiU05BUFwiO1xufTtcbmZ1bmN0aW9uIGxEKGUpIHtcbiAgdmFyIHQgPSBlLmRpbWVuc2lvbiwgbyA9IHQuY2xpZW50LCBuID0gZS5vZmZzZXQsIHIgPSBlLmNvbWJpbmVXaXRoLCBpID0gZS5kcm9wcGluZywgYSA9ICEhciwgcyA9IGNEKGUpLCBsID0gISFpLCBwID0gbCA/IGI1LmRyb3AobiwgYSkgOiBiNS5tb3ZlVG8obiksIGQgPSB7XG4gICAgcG9zaXRpb246IFwiZml4ZWRcIixcbiAgICB0b3A6IG8ubWFyZ2luQm94LnRvcCxcbiAgICBsZWZ0OiBvLm1hcmdpbkJveC5sZWZ0LFxuICAgIGJveFNpemluZzogXCJib3JkZXItYm94XCIsXG4gICAgd2lkdGg6IG8uYm9yZGVyQm94LndpZHRoLFxuICAgIGhlaWdodDogby5ib3JkZXJCb3guaGVpZ2h0LFxuICAgIHRyYW5zaXRpb246IGFEKHMsIGkpLFxuICAgIHRyYW5zZm9ybTogcCxcbiAgICBvcGFjaXR5OiBzRChhLCBsKSxcbiAgICB6SW5kZXg6IGwgPyBvYy5kcm9wQW5pbWF0aW5nIDogb2MuZHJhZ2dpbmcsXG4gICAgcG9pbnRlckV2ZW50czogXCJub25lXCJcbiAgfTtcbiAgcmV0dXJuIGQ7XG59XG5mdW5jdGlvbiBwRChlKSB7XG4gIHJldHVybiB7XG4gICAgdHJhbnNmb3JtOiBiNS5tb3ZlVG8oZS5vZmZzZXQpLFxuICAgIHRyYW5zaXRpb246IGUuc2hvdWxkQW5pbWF0ZURpc3BsYWNlbWVudCA/IG51bGwgOiBcIm5vbmVcIlxuICB9O1xufVxuZnVuY3Rpb24gZEQoZSkge1xuICByZXR1cm4gZS50eXBlID09PSBcIkRSQUdHSU5HXCIgPyBsRChlKSA6IHBEKGUpO1xufVxuZnVuY3Rpb24gYkQoZSwgdCwgbykge1xuICBvID09PSB2b2lkIDAgJiYgKG8gPSB1Mik7XG4gIHZhciBuID0gd2luZG93LmdldENvbXB1dGVkU3R5bGUodCksIHIgPSB0LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLCBpID0gbmQociwgbiksIGEgPSBxNChpLCBvKSwgcyA9IHtcbiAgICBjbGllbnQ6IGksXG4gICAgdGFnTmFtZTogdC50YWdOYW1lLnRvTG93ZXJDYXNlKCksXG4gICAgZGlzcGxheTogbi5kaXNwbGF5XG4gIH0sIGwgPSB7XG4gICAgeDogaS5tYXJnaW5Cb3gud2lkdGgsXG4gICAgeTogaS5tYXJnaW5Cb3guaGVpZ2h0XG4gIH0sIHAgPSB7XG4gICAgZGVzY3JpcHRvcjogZSxcbiAgICBwbGFjZWhvbGRlcjogcyxcbiAgICBkaXNwbGFjZUJ5OiBsLFxuICAgIGNsaWVudDogaSxcbiAgICBwYWdlOiBhXG4gIH07XG4gIHJldHVybiBwO1xufVxuZnVuY3Rpb24gTUQoZSkge1xuICB2YXIgdCA9IEk2KFwiZHJhZ2dhYmxlXCIpLCBvID0gZS5kZXNjcmlwdG9yLCBuID0gZS5yZWdpc3RyeSwgciA9IGUuZ2V0RHJhZ2dhYmxlUmVmLCBpID0gZS5jYW5EcmFnSW50ZXJhY3RpdmVFbGVtZW50cywgYSA9IGUuc2hvdWxkUmVzcGVjdEZvcmNlUHJlc3MsIHMgPSBlLmlzRW5hYmxlZCwgbCA9IFIwKGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiB7XG4gICAgICBjYW5EcmFnSW50ZXJhY3RpdmVFbGVtZW50czogaSxcbiAgICAgIHNob3VsZFJlc3BlY3RGb3JjZVByZXNzOiBhLFxuICAgICAgaXNFbmFibGVkOiBzXG4gICAgfTtcbiAgfSwgW2ksIHMsIGFdKSwgcCA9IGwwKGZ1bmN0aW9uKHUpIHtcbiAgICB2YXIgQSA9IHIoKTtcbiAgICByZXR1cm4gQSB8fCAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiID8geTEoITEsIFwiQ2Fubm90IGdldCBkaW1lbnNpb24gd2hlbiBubyByZWYgaXMgc2V0XCIpIDogeTEoITEpKSwgYkQobywgQSwgdSk7XG4gIH0sIFtvLCByXSksIGQgPSBSMChmdW5jdGlvbigpIHtcbiAgICByZXR1cm4ge1xuICAgICAgdW5pcXVlSWQ6IHQsXG4gICAgICBkZXNjcmlwdG9yOiBvLFxuICAgICAgb3B0aW9uczogbCxcbiAgICAgIGdldERpbWVuc2lvbjogcFxuICAgIH07XG4gIH0sIFtvLCBwLCBsLCB0XSksIGIgPSBuMChkKSwgTSA9IG4wKCEwKTtcbiAgZWUoZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIG4uZHJhZ2dhYmxlLnJlZ2lzdGVyKGIuY3VycmVudCksIGZ1bmN0aW9uKCkge1xuICAgICAgcmV0dXJuIG4uZHJhZ2dhYmxlLnVucmVnaXN0ZXIoYi5jdXJyZW50KTtcbiAgICB9O1xuICB9LCBbbi5kcmFnZ2FibGVdKSwgZWUoZnVuY3Rpb24oKSB7XG4gICAgaWYgKE0uY3VycmVudCkge1xuICAgICAgTS5jdXJyZW50ID0gITE7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHZhciB1ID0gYi5jdXJyZW50O1xuICAgIGIuY3VycmVudCA9IGQsIG4uZHJhZ2dhYmxlLnVwZGF0ZShkLCB1KTtcbiAgfSwgW2QsIG4uZHJhZ2dhYmxlXSk7XG59XG5mdW5jdGlvbiBBRChlLCB0LCBvKSB7XG4gIFhyKGZ1bmN0aW9uKCkge1xuICAgIGZ1bmN0aW9uIG4oaSkge1xuICAgICAgcmV0dXJuIFwiRHJhZ2dhYmxlW2lkOiBcIiArIGkgKyBcIl06IFwiO1xuICAgIH1cbiAgICB2YXIgciA9IGUuZHJhZ2dhYmxlSWQ7XG4gICAgciB8fCAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiID8geTEoITEsIFwiRHJhZ2dhYmxlIHJlcXVpcmVzIGEgZHJhZ2dhYmxlSWRcIikgOiB5MSghMSkpLCB0eXBlb2YgciAhPSBcInN0cmluZ1wiICYmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIgPyB5MSghMSwgYERyYWdnYWJsZSByZXF1aXJlcyBhIFtzdHJpbmddIGRyYWdnYWJsZUlkLlxuICAgICAgUHJvdmlkZWQ6IFt0eXBlOiBgICsgdHlwZW9mIHIgKyBcIl0gKHZhbHVlOiBcIiArIHIgKyBcIilcIikgOiB5MSghMSkpLCBNayhlLmluZGV4KSB8fCAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiID8geTEoITEsIG4ocikgKyBcIiByZXF1aXJlcyBhbiBpbnRlZ2VyIGluZGV4IHByb3BcIikgOiB5MSghMSkpLCBlLm1hcHBlZC50eXBlICE9PSBcIkRSQUdHSU5HXCIgJiYgKF9kKG8oKSksIGUuaXNFbmFibGVkICYmIChYZCh0LCByKSB8fCAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiID8geTEoITEsIG4ocikgKyBcIiBVbmFibGUgdG8gZmluZCBkcmFnIGhhbmRsZVwiKSA6IHkxKCExKSkpKTtcbiAgfSk7XG59XG5mdW5jdGlvbiB1RChlKSB7XG4gIEQ2KGZ1bmN0aW9uKCkge1xuICAgIHZhciB0ID0gbjAoZSk7XG4gICAgWHIoZnVuY3Rpb24oKSB7XG4gICAgICBlICE9PSB0LmN1cnJlbnQgJiYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIiA/IHkxKCExLCBcIkRyYWdnYWJsZSBpc0Nsb25lIHByb3AgdmFsdWUgY2hhbmdlZCBkdXJpbmcgY29tcG9uZW50IGxpZmVcIikgOiB5MSghMSkpO1xuICAgIH0sIFtlXSk7XG4gIH0pO1xufVxuZnVuY3Rpb24gekQoZSkge1xuICBlLnByZXZlbnREZWZhdWx0KCk7XG59XG5mdW5jdGlvbiBoRChlKSB7XG4gIHZhciB0ID0gbjAobnVsbCksIG8gPSBsMChmdW5jdGlvbihGKSB7XG4gICAgdC5jdXJyZW50ID0gRjtcbiAgfSwgW10pLCBuID0gbDAoZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIHQuY3VycmVudDtcbiAgfSwgW10pLCByID0gVzQoZWkpLCBpID0gci5jb250ZXh0SWQsIGEgPSByLmRyYWdIYW5kbGVVc2FnZUluc3RydWN0aW9uc0lkLCBzID0gci5yZWdpc3RyeSwgbCA9IFc0KEY2KSwgcCA9IGwudHlwZSwgZCA9IGwuZHJvcHBhYmxlSWQsIGIgPSBSMChmdW5jdGlvbigpIHtcbiAgICByZXR1cm4ge1xuICAgICAgaWQ6IGUuZHJhZ2dhYmxlSWQsXG4gICAgICBpbmRleDogZS5pbmRleCxcbiAgICAgIHR5cGU6IHAsXG4gICAgICBkcm9wcGFibGVJZDogZFxuICAgIH07XG4gIH0sIFtlLmRyYWdnYWJsZUlkLCBlLmluZGV4LCBwLCBkXSksIE0gPSBlLmNoaWxkcmVuLCB1ID0gZS5kcmFnZ2FibGVJZCwgQSA9IGUuaXNFbmFibGVkLCB6ID0gZS5zaG91bGRSZXNwZWN0Rm9yY2VQcmVzcywgZiA9IGUuY2FuRHJhZ0ludGVyYWN0aXZlRWxlbWVudHMsIE8gPSBlLmlzQ2xvbmUsIGggPSBlLm1hcHBlZCwgZyA9IGUuZHJvcEFuaW1hdGlvbkZpbmlzaGVkO1xuICBpZiAoQUQoZSwgaSwgbiksIHVEKE8pLCAhTykge1xuICAgIHZhciB2ID0gUjAoZnVuY3Rpb24oKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBkZXNjcmlwdG9yOiBiLFxuICAgICAgICByZWdpc3RyeTogcyxcbiAgICAgICAgZ2V0RHJhZ2dhYmxlUmVmOiBuLFxuICAgICAgICBjYW5EcmFnSW50ZXJhY3RpdmVFbGVtZW50czogZixcbiAgICAgICAgc2hvdWxkUmVzcGVjdEZvcmNlUHJlc3M6IHosXG4gICAgICAgIGlzRW5hYmxlZDogQVxuICAgICAgfTtcbiAgICB9LCBbYiwgcywgbiwgZiwgeiwgQV0pO1xuICAgIE1EKHYpO1xuICB9XG4gIHZhciBMID0gUjAoZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIEEgPyB7XG4gICAgICB0YWJJbmRleDogMCxcbiAgICAgIHJvbGU6IFwiYnV0dG9uXCIsXG4gICAgICBcImFyaWEtZGVzY3JpYmVkYnlcIjogYSxcbiAgICAgIFwiZGF0YS1yYmQtZHJhZy1oYW5kbGUtZHJhZ2dhYmxlLWlkXCI6IHUsXG4gICAgICBcImRhdGEtcmJkLWRyYWctaGFuZGxlLWNvbnRleHQtaWRcIjogaSxcbiAgICAgIGRyYWdnYWJsZTogITEsXG4gICAgICBvbkRyYWdTdGFydDogekRcbiAgICB9IDogbnVsbDtcbiAgfSwgW2ksIGEsIHUsIEFdKSwgeSA9IGwwKGZ1bmN0aW9uKEYpIHtcbiAgICBoLnR5cGUgPT09IFwiRFJBR0dJTkdcIiAmJiBoLmRyb3BwaW5nICYmIEYucHJvcGVydHlOYW1lID09PSBcInRyYW5zZm9ybVwiICYmIGcoKTtcbiAgfSwgW2csIGhdKSwgQiA9IFIwKGZ1bmN0aW9uKCkge1xuICAgIHZhciBGID0gZEQoaCksIFQgPSBoLnR5cGUgPT09IFwiRFJBR0dJTkdcIiAmJiBoLmRyb3BwaW5nID8geSA6IG51bGwsIHcgPSB7XG4gICAgICBpbm5lclJlZjogbyxcbiAgICAgIGRyYWdnYWJsZVByb3BzOiB7XG4gICAgICAgIFwiZGF0YS1yYmQtZHJhZ2dhYmxlLWNvbnRleHQtaWRcIjogaSxcbiAgICAgICAgXCJkYXRhLXJiZC1kcmFnZ2FibGUtaWRcIjogdSxcbiAgICAgICAgc3R5bGU6IEYsXG4gICAgICAgIG9uVHJhbnNpdGlvbkVuZDogVFxuICAgICAgfSxcbiAgICAgIGRyYWdIYW5kbGVQcm9wczogTFxuICAgIH07XG4gICAgcmV0dXJuIHc7XG4gIH0sIFtpLCBMLCB1LCBoLCB5LCBvXSksIFggPSBSMChmdW5jdGlvbigpIHtcbiAgICByZXR1cm4ge1xuICAgICAgZHJhZ2dhYmxlSWQ6IGIuaWQsXG4gICAgICB0eXBlOiBiLnR5cGUsXG4gICAgICBzb3VyY2U6IHtcbiAgICAgICAgaW5kZXg6IGIuaW5kZXgsXG4gICAgICAgIGRyb3BwYWJsZUlkOiBiLmRyb3BwYWJsZUlkXG4gICAgICB9XG4gICAgfTtcbiAgfSwgW2IuZHJvcHBhYmxlSWQsIGIuaWQsIGIuaW5kZXgsIGIudHlwZV0pO1xuICByZXR1cm4gTShCLCBoLnNuYXBzaG90LCBYKTtcbn1cbnZhciAkZCA9IGZ1bmN0aW9uKGUsIHQpIHtcbiAgcmV0dXJuIGUgPT09IHQ7XG59LCBlYiA9IGZ1bmN0aW9uKGUpIHtcbiAgdmFyIHQgPSBlLmNvbWJpbmUsIG8gPSBlLmRlc3RpbmF0aW9uO1xuICByZXR1cm4gbyA/IG8uZHJvcHBhYmxlSWQgOiB0ID8gdC5kcm9wcGFibGVJZCA6IG51bGw7XG59LCBPRCA9IGZ1bmN0aW9uKHQpIHtcbiAgcmV0dXJuIHQuY29tYmluZSA/IHQuY29tYmluZS5kcmFnZ2FibGVJZCA6IG51bGw7XG59LCBmRCA9IGZ1bmN0aW9uKHQpIHtcbiAgcmV0dXJuIHQuYXQgJiYgdC5hdC50eXBlID09PSBcIkNPTUJJTkVcIiA/IHQuYXQuY29tYmluZS5kcmFnZ2FibGVJZCA6IG51bGw7XG59O1xuZnVuY3Rpb24gZ0QoKSB7XG4gIHZhciBlID0gcDIoZnVuY3Rpb24ociwgaSkge1xuICAgIHJldHVybiB7XG4gICAgICB4OiByLFxuICAgICAgeTogaVxuICAgIH07XG4gIH0pLCB0ID0gcDIoZnVuY3Rpb24ociwgaSwgYSwgcywgbCkge1xuICAgIHJldHVybiB7XG4gICAgICBpc0RyYWdnaW5nOiAhMCxcbiAgICAgIGlzQ2xvbmU6IGksXG4gICAgICBpc0Ryb3BBbmltYXRpbmc6ICEhbCxcbiAgICAgIGRyb3BBbmltYXRpb246IGwsXG4gICAgICBtb2RlOiByLFxuICAgICAgZHJhZ2dpbmdPdmVyOiBhLFxuICAgICAgY29tYmluZVdpdGg6IHMsXG4gICAgICBjb21iaW5lVGFyZ2V0Rm9yOiBudWxsXG4gICAgfTtcbiAgfSksIG8gPSBwMihmdW5jdGlvbihyLCBpLCBhLCBzLCBsLCBwLCBkKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIG1hcHBlZDoge1xuICAgICAgICB0eXBlOiBcIkRSQUdHSU5HXCIsXG4gICAgICAgIGRyb3BwaW5nOiBudWxsLFxuICAgICAgICBkcmFnZ2luZ092ZXI6IGwsXG4gICAgICAgIGNvbWJpbmVXaXRoOiBwLFxuICAgICAgICBtb2RlOiBpLFxuICAgICAgICBvZmZzZXQ6IHIsXG4gICAgICAgIGRpbWVuc2lvbjogYSxcbiAgICAgICAgZm9yY2VTaG91bGRBbmltYXRlOiBkLFxuICAgICAgICBzbmFwc2hvdDogdChpLCBzLCBsLCBwLCBudWxsKVxuICAgICAgfVxuICAgIH07XG4gIH0pLCBuID0gZnVuY3Rpb24oaSwgYSkge1xuICAgIGlmIChpLmlzRHJhZ2dpbmcpIHtcbiAgICAgIGlmIChpLmNyaXRpY2FsLmRyYWdnYWJsZS5pZCAhPT0gYS5kcmFnZ2FibGVJZClcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICB2YXIgcyA9IGkuY3VycmVudC5jbGllbnQub2Zmc2V0LCBsID0gaS5kaW1lbnNpb25zLmRyYWdnYWJsZXNbYS5kcmFnZ2FibGVJZF0sIHAgPSAkMihpLmltcGFjdCksIGQgPSBmRChpLmltcGFjdCksIGIgPSBpLmZvcmNlU2hvdWxkQW5pbWF0ZTtcbiAgICAgIHJldHVybiBvKGUocy54LCBzLnkpLCBpLm1vdmVtZW50TW9kZSwgbCwgYS5pc0Nsb25lLCBwLCBkLCBiKTtcbiAgICB9XG4gICAgaWYgKGkucGhhc2UgPT09IFwiRFJPUF9BTklNQVRJTkdcIikge1xuICAgICAgdmFyIE0gPSBpLmNvbXBsZXRlZDtcbiAgICAgIGlmIChNLnJlc3VsdC5kcmFnZ2FibGVJZCAhPT0gYS5kcmFnZ2FibGVJZClcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICB2YXIgdSA9IGEuaXNDbG9uZSwgQSA9IGkuZGltZW5zaW9ucy5kcmFnZ2FibGVzW2EuZHJhZ2dhYmxlSWRdLCB6ID0gTS5yZXN1bHQsIGYgPSB6Lm1vZGUsIE8gPSBlYih6KSwgaCA9IE9EKHopLCBnID0gaS5kcm9wRHVyYXRpb24sIHYgPSB7XG4gICAgICAgIGR1cmF0aW9uOiBnLFxuICAgICAgICBjdXJ2ZTogUjYuZHJvcCxcbiAgICAgICAgbW92ZVRvOiBpLm5ld0hvbWVDbGllbnRPZmZzZXQsXG4gICAgICAgIG9wYWNpdHk6IGggPyBMci5vcGFjaXR5LmRyb3AgOiBudWxsLFxuICAgICAgICBzY2FsZTogaCA/IExyLnNjYWxlLmRyb3AgOiBudWxsXG4gICAgICB9O1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgbWFwcGVkOiB7XG4gICAgICAgICAgdHlwZTogXCJEUkFHR0lOR1wiLFxuICAgICAgICAgIG9mZnNldDogaS5uZXdIb21lQ2xpZW50T2Zmc2V0LFxuICAgICAgICAgIGRpbWVuc2lvbjogQSxcbiAgICAgICAgICBkcm9wcGluZzogdixcbiAgICAgICAgICBkcmFnZ2luZ092ZXI6IE8sXG4gICAgICAgICAgY29tYmluZVdpdGg6IGgsXG4gICAgICAgICAgbW9kZTogZixcbiAgICAgICAgICBmb3JjZVNob3VsZEFuaW1hdGU6IG51bGwsXG4gICAgICAgICAgc25hcHNob3Q6IHQoZiwgdSwgTywgaCwgdilcbiAgICAgICAgfVxuICAgICAgfTtcbiAgICB9XG4gICAgcmV0dXJuIG51bGw7XG4gIH07XG4gIHJldHVybiBuO1xufVxuZnVuY3Rpb24gdGIoZSkge1xuICByZXR1cm4ge1xuICAgIGlzRHJhZ2dpbmc6ICExLFxuICAgIGlzRHJvcEFuaW1hdGluZzogITEsXG4gICAgaXNDbG9uZTogITEsXG4gICAgZHJvcEFuaW1hdGlvbjogbnVsbCxcbiAgICBtb2RlOiBudWxsLFxuICAgIGRyYWdnaW5nT3ZlcjogbnVsbCxcbiAgICBjb21iaW5lVGFyZ2V0Rm9yOiBlLFxuICAgIGNvbWJpbmVXaXRoOiBudWxsXG4gIH07XG59XG52YXIgQ0QgPSB7XG4gIG1hcHBlZDoge1xuICAgIHR5cGU6IFwiU0VDT05EQVJZXCIsXG4gICAgb2Zmc2V0OiB1MixcbiAgICBjb21iaW5lVGFyZ2V0Rm9yOiBudWxsLFxuICAgIHNob3VsZEFuaW1hdGVEaXNwbGFjZW1lbnQ6ICEwLFxuICAgIHNuYXBzaG90OiB0YihudWxsKVxuICB9XG59O1xuZnVuY3Rpb24gbUQoKSB7XG4gIHZhciBlID0gcDIoZnVuY3Rpb24oYSwgcykge1xuICAgIHJldHVybiB7XG4gICAgICB4OiBhLFxuICAgICAgeTogc1xuICAgIH07XG4gIH0pLCB0ID0gcDIodGIpLCBvID0gcDIoZnVuY3Rpb24oYSwgcywgbCkge1xuICAgIHJldHVybiBzID09PSB2b2lkIDAgJiYgKHMgPSBudWxsKSwge1xuICAgICAgbWFwcGVkOiB7XG4gICAgICAgIHR5cGU6IFwiU0VDT05EQVJZXCIsXG4gICAgICAgIG9mZnNldDogYSxcbiAgICAgICAgY29tYmluZVRhcmdldEZvcjogcyxcbiAgICAgICAgc2hvdWxkQW5pbWF0ZURpc3BsYWNlbWVudDogbCxcbiAgICAgICAgc25hcHNob3Q6IHQocylcbiAgICAgIH1cbiAgICB9O1xuICB9KSwgbiA9IGZ1bmN0aW9uKHMpIHtcbiAgICByZXR1cm4gcyA/IG8odTIsIHMsICEwKSA6IG51bGw7XG4gIH0sIHIgPSBmdW5jdGlvbihzLCBsLCBwLCBkKSB7XG4gICAgdmFyIGIgPSBwLmRpc3BsYWNlZC52aXNpYmxlW3NdLCBNID0gISEoZC5pblZpcnR1YWxMaXN0ICYmIGQuZWZmZWN0ZWRbc10pLCB1ID0gSjQocCksIEEgPSB1ICYmIHUuZHJhZ2dhYmxlSWQgPT09IHMgPyBsIDogbnVsbDtcbiAgICBpZiAoIWIpIHtcbiAgICAgIGlmICghTSlcbiAgICAgICAgcmV0dXJuIG4oQSk7XG4gICAgICBpZiAocC5kaXNwbGFjZWQuaW52aXNpYmxlW3NdKVxuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIHZhciB6ID0gbG8oZC5kaXNwbGFjZWRCeS5wb2ludCksIGYgPSBlKHoueCwgei55KTtcbiAgICAgIHJldHVybiBvKGYsIEEsICEwKTtcbiAgICB9XG4gICAgaWYgKE0pXG4gICAgICByZXR1cm4gbihBKTtcbiAgICB2YXIgTyA9IHAuZGlzcGxhY2VkQnkucG9pbnQsIGggPSBlKE8ueCwgTy55KTtcbiAgICByZXR1cm4gbyhoLCBBLCBiLnNob3VsZEFuaW1hdGUpO1xuICB9LCBpID0gZnVuY3Rpb24ocywgbCkge1xuICAgIGlmIChzLmlzRHJhZ2dpbmcpXG4gICAgICByZXR1cm4gcy5jcml0aWNhbC5kcmFnZ2FibGUuaWQgPT09IGwuZHJhZ2dhYmxlSWQgPyBudWxsIDogcihsLmRyYWdnYWJsZUlkLCBzLmNyaXRpY2FsLmRyYWdnYWJsZS5pZCwgcy5pbXBhY3QsIHMuYWZ0ZXJDcml0aWNhbCk7XG4gICAgaWYgKHMucGhhc2UgPT09IFwiRFJPUF9BTklNQVRJTkdcIikge1xuICAgICAgdmFyIHAgPSBzLmNvbXBsZXRlZDtcbiAgICAgIHJldHVybiBwLnJlc3VsdC5kcmFnZ2FibGVJZCA9PT0gbC5kcmFnZ2FibGVJZCA/IG51bGwgOiByKGwuZHJhZ2dhYmxlSWQsIHAucmVzdWx0LmRyYWdnYWJsZUlkLCBwLmltcGFjdCwgcC5hZnRlckNyaXRpY2FsKTtcbiAgICB9XG4gICAgcmV0dXJuIG51bGw7XG4gIH07XG4gIHJldHVybiBpO1xufVxudmFyIExEID0gZnVuY3Rpb24oKSB7XG4gIHZhciB0ID0gZ0QoKSwgbyA9IG1EKCksIG4gPSBmdW5jdGlvbihpLCBhKSB7XG4gICAgcmV0dXJuIHQoaSwgYSkgfHwgbyhpLCBhKSB8fCBDRDtcbiAgfTtcbiAgcmV0dXJuIG47XG59LCB2RCA9IHtcbiAgZHJvcEFuaW1hdGlvbkZpbmlzaGVkOiBTZFxufSwgcUQgPSBvZChMRCwgdkQsIG51bGwsIHtcbiAgY29udGV4dDogVDYsXG4gIHB1cmU6ICEwLFxuICBhcmVTdGF0ZVByb3BzRXF1YWw6ICRkXG59KShoRCk7XG5mdW5jdGlvbiBvYihlKSB7XG4gIHZhciB0ID0gVzQoRjYpLCBvID0gdC5pc1VzaW5nQ2xvbmVGb3I7XG4gIHJldHVybiBvID09PSBlLmRyYWdnYWJsZUlkICYmICFlLmlzQ2xvbmUgPyBudWxsIDogbTEuY3JlYXRlRWxlbWVudChxRCwgZSk7XG59XG5mdW5jdGlvbiB5RChlKSB7XG4gIHZhciB0ID0gdHlwZW9mIGUuaXNEcmFnRGlzYWJsZWQgPT0gXCJib29sZWFuXCIgPyAhZS5pc0RyYWdEaXNhYmxlZCA6ICEwLCBvID0gISFlLmRpc2FibGVJbnRlcmFjdGl2ZUVsZW1lbnRCbG9ja2luZywgbiA9ICEhZS5zaG91bGRSZXNwZWN0Rm9yY2VQcmVzcztcbiAgcmV0dXJuIG0xLmNyZWF0ZUVsZW1lbnQob2IsIGEwKHt9LCBlLCB7XG4gICAgaXNDbG9uZTogITEsXG4gICAgaXNFbmFibGVkOiB0LFxuICAgIGNhbkRyYWdJbnRlcmFjdGl2ZUVsZW1lbnRzOiBvLFxuICAgIHNob3VsZFJlc3BlY3RGb3JjZVByZXNzOiBuXG4gIH0pKTtcbn1cbmZ1bmN0aW9uIHdEKGUpIHtcbiAgdmFyIHQgPSBBdChlaSk7XG4gIHQgfHwgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIiA/IHkxKCExLCBcIkNvdWxkIG5vdCBmaW5kIGFwcCBjb250ZXh0XCIpIDogeTEoITEpKTtcbiAgdmFyIG8gPSB0LmNvbnRleHRJZCwgbiA9IHQuaXNNb3ZlbWVudEFsbG93ZWQsIHIgPSBuMChudWxsKSwgaSA9IG4wKG51bGwpLCBhID0gZS5jaGlsZHJlbiwgcyA9IGUuZHJvcHBhYmxlSWQsIGwgPSBlLnR5cGUsIHAgPSBlLm1vZGUsIGQgPSBlLmRpcmVjdGlvbiwgYiA9IGUuaWdub3JlQ29udGFpbmVyQ2xpcHBpbmcsIE0gPSBlLmlzRHJvcERpc2FibGVkLCB1ID0gZS5pc0NvbWJpbmVFbmFibGVkLCBBID0gZS5zbmFwc2hvdCwgeiA9IGUudXNlQ2xvbmUsIGYgPSBlLnVwZGF0ZVZpZXdwb3J0TWF4U2Nyb2xsLCBPID0gZS5nZXRDb250YWluZXJGb3JDbG9uZSwgaCA9IGwwKGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiByLmN1cnJlbnQ7XG4gIH0sIFtdKSwgZyA9IGwwKGZ1bmN0aW9uKEgpIHtcbiAgICByLmN1cnJlbnQgPSBIO1xuICB9LCBbXSksIHYgPSBsMChmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gaS5jdXJyZW50O1xuICB9LCBbXSksIEwgPSBsMChmdW5jdGlvbihIKSB7XG4gICAgaS5jdXJyZW50ID0gSDtcbiAgfSwgW10pO1xuICBuRCh7XG4gICAgcHJvcHM6IGUsXG4gICAgZ2V0RHJvcHBhYmxlUmVmOiBoLFxuICAgIGdldFBsYWNlaG9sZGVyUmVmOiB2XG4gIH0pO1xuICB2YXIgeSA9IGwwKGZ1bmN0aW9uKCkge1xuICAgIG4oKSAmJiBmKHtcbiAgICAgIG1heFNjcm9sbDogSWQoKVxuICAgIH0pO1xuICB9LCBbbiwgZl0pO1xuICBLSSh7XG4gICAgZHJvcHBhYmxlSWQ6IHMsXG4gICAgdHlwZTogbCxcbiAgICBtb2RlOiBwLFxuICAgIGRpcmVjdGlvbjogZCxcbiAgICBpc0Ryb3BEaXNhYmxlZDogTSxcbiAgICBpc0NvbWJpbmVFbmFibGVkOiB1LFxuICAgIGlnbm9yZUNvbnRhaW5lckNsaXBwaW5nOiBiLFxuICAgIGdldERyb3BwYWJsZVJlZjogaFxuICB9KTtcbiAgdmFyIEIgPSBtMS5jcmVhdGVFbGVtZW50KGlELCB7XG4gICAgb246IGUucGxhY2Vob2xkZXIsXG4gICAgc2hvdWxkQW5pbWF0ZTogZS5zaG91bGRBbmltYXRlUGxhY2Vob2xkZXJcbiAgfSwgZnVuY3Rpb24oSCkge1xuICAgIHZhciBDID0gSC5vbkNsb3NlLCBxID0gSC5kYXRhLCBtID0gSC5hbmltYXRlO1xuICAgIHJldHVybiBtMS5jcmVhdGVFbGVtZW50KGVELCB7XG4gICAgICBwbGFjZWhvbGRlcjogcSxcbiAgICAgIG9uQ2xvc2U6IEMsXG4gICAgICBpbm5lclJlZjogTCxcbiAgICAgIGFuaW1hdGU6IG0sXG4gICAgICBjb250ZXh0SWQ6IG8sXG4gICAgICBvblRyYW5zaXRpb25FbmQ6IHlcbiAgICB9KTtcbiAgfSksIFggPSBSMChmdW5jdGlvbigpIHtcbiAgICByZXR1cm4ge1xuICAgICAgaW5uZXJSZWY6IGcsXG4gICAgICBwbGFjZWhvbGRlcjogQixcbiAgICAgIGRyb3BwYWJsZVByb3BzOiB7XG4gICAgICAgIFwiZGF0YS1yYmQtZHJvcHBhYmxlLWlkXCI6IHMsXG4gICAgICAgIFwiZGF0YS1yYmQtZHJvcHBhYmxlLWNvbnRleHQtaWRcIjogb1xuICAgICAgfVxuICAgIH07XG4gIH0sIFtvLCBzLCBCLCBnXSksIEYgPSB6ID8gei5kcmFnZ2luZy5kcmFnZ2FibGVJZCA6IG51bGwsIFQgPSBSMChmdW5jdGlvbigpIHtcbiAgICByZXR1cm4ge1xuICAgICAgZHJvcHBhYmxlSWQ6IHMsXG4gICAgICB0eXBlOiBsLFxuICAgICAgaXNVc2luZ0Nsb25lRm9yOiBGXG4gICAgfTtcbiAgfSwgW3MsIEYsIGxdKTtcbiAgZnVuY3Rpb24gdygpIHtcbiAgICBpZiAoIXopXG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB2YXIgSCA9IHouZHJhZ2dpbmcsIEMgPSB6LnJlbmRlciwgcSA9IG0xLmNyZWF0ZUVsZW1lbnQob2IsIHtcbiAgICAgIGRyYWdnYWJsZUlkOiBILmRyYWdnYWJsZUlkLFxuICAgICAgaW5kZXg6IEguc291cmNlLmluZGV4LFxuICAgICAgaXNDbG9uZTogITAsXG4gICAgICBpc0VuYWJsZWQ6ICEwLFxuICAgICAgc2hvdWxkUmVzcGVjdEZvcmNlUHJlc3M6ICExLFxuICAgICAgY2FuRHJhZ0ludGVyYWN0aXZlRWxlbWVudHM6ICEwXG4gICAgfSwgZnVuY3Rpb24obSwgaykge1xuICAgICAgcmV0dXJuIEMobSwgaywgSCk7XG4gICAgfSk7XG4gICAgcmV0dXJuIG5sLmNyZWF0ZVBvcnRhbChxLCBPKCkpO1xuICB9XG4gIHJldHVybiBtMS5jcmVhdGVFbGVtZW50KEY2LlByb3ZpZGVyLCB7XG4gICAgdmFsdWU6IFRcbiAgfSwgYShYLCBBKSwgdygpKTtcbn1cbnZhciBwYSA9IGZ1bmN0aW9uKHQsIG8pIHtcbiAgcmV0dXJuIHQgPT09IG8uZHJvcHBhYmxlLnR5cGU7XG59LCByYyA9IGZ1bmN0aW9uKHQsIG8pIHtcbiAgcmV0dXJuIG8uZHJhZ2dhYmxlc1t0LmRyYWdnYWJsZS5pZF07XG59LCB4RCA9IGZ1bmN0aW9uKCkge1xuICB2YXIgdCA9IHtcbiAgICBwbGFjZWhvbGRlcjogbnVsbCxcbiAgICBzaG91bGRBbmltYXRlUGxhY2Vob2xkZXI6ICEwLFxuICAgIHNuYXBzaG90OiB7XG4gICAgICBpc0RyYWdnaW5nT3ZlcjogITEsXG4gICAgICBkcmFnZ2luZ092ZXJXaXRoOiBudWxsLFxuICAgICAgZHJhZ2dpbmdGcm9tVGhpc1dpdGg6IG51bGwsXG4gICAgICBpc1VzaW5nUGxhY2Vob2xkZXI6ICExXG4gICAgfSxcbiAgICB1c2VDbG9uZTogbnVsbFxuICB9LCBvID0gYTAoe30sIHQsIHtcbiAgICBzaG91bGRBbmltYXRlUGxhY2Vob2xkZXI6ICExXG4gIH0pLCBuID0gcDIoZnVuY3Rpb24oYSkge1xuICAgIHJldHVybiB7XG4gICAgICBkcmFnZ2FibGVJZDogYS5pZCxcbiAgICAgIHR5cGU6IGEudHlwZSxcbiAgICAgIHNvdXJjZToge1xuICAgICAgICBpbmRleDogYS5pbmRleCxcbiAgICAgICAgZHJvcHBhYmxlSWQ6IGEuZHJvcHBhYmxlSWRcbiAgICAgIH1cbiAgICB9O1xuICB9KSwgciA9IHAyKGZ1bmN0aW9uKGEsIHMsIGwsIHAsIGQsIGIpIHtcbiAgICB2YXIgTSA9IGQuZGVzY3JpcHRvci5pZCwgdSA9IGQuZGVzY3JpcHRvci5kcm9wcGFibGVJZCA9PT0gYTtcbiAgICBpZiAodSkge1xuICAgICAgdmFyIEEgPSBiID8ge1xuICAgICAgICByZW5kZXI6IGIsXG4gICAgICAgIGRyYWdnaW5nOiBuKGQuZGVzY3JpcHRvcilcbiAgICAgIH0gOiBudWxsLCB6ID0ge1xuICAgICAgICBpc0RyYWdnaW5nT3ZlcjogbCxcbiAgICAgICAgZHJhZ2dpbmdPdmVyV2l0aDogbCA/IE0gOiBudWxsLFxuICAgICAgICBkcmFnZ2luZ0Zyb21UaGlzV2l0aDogTSxcbiAgICAgICAgaXNVc2luZ1BsYWNlaG9sZGVyOiAhMFxuICAgICAgfTtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHBsYWNlaG9sZGVyOiBkLnBsYWNlaG9sZGVyLFxuICAgICAgICBzaG91bGRBbmltYXRlUGxhY2Vob2xkZXI6ICExLFxuICAgICAgICBzbmFwc2hvdDogeixcbiAgICAgICAgdXNlQ2xvbmU6IEFcbiAgICAgIH07XG4gICAgfVxuICAgIGlmICghcylcbiAgICAgIHJldHVybiBvO1xuICAgIGlmICghcClcbiAgICAgIHJldHVybiB0O1xuICAgIHZhciBmID0ge1xuICAgICAgaXNEcmFnZ2luZ092ZXI6IGwsXG4gICAgICBkcmFnZ2luZ092ZXJXaXRoOiBNLFxuICAgICAgZHJhZ2dpbmdGcm9tVGhpc1dpdGg6IG51bGwsXG4gICAgICBpc1VzaW5nUGxhY2Vob2xkZXI6ICEwXG4gICAgfTtcbiAgICByZXR1cm4ge1xuICAgICAgcGxhY2Vob2xkZXI6IGQucGxhY2Vob2xkZXIsXG4gICAgICBzaG91bGRBbmltYXRlUGxhY2Vob2xkZXI6ICEwLFxuICAgICAgc25hcHNob3Q6IGYsXG4gICAgICB1c2VDbG9uZTogbnVsbFxuICAgIH07XG4gIH0pLCBpID0gZnVuY3Rpb24ocywgbCkge1xuICAgIHZhciBwID0gbC5kcm9wcGFibGVJZCwgZCA9IGwudHlwZSwgYiA9ICFsLmlzRHJvcERpc2FibGVkLCBNID0gbC5yZW5kZXJDbG9uZTtcbiAgICBpZiAocy5pc0RyYWdnaW5nKSB7XG4gICAgICB2YXIgdSA9IHMuY3JpdGljYWw7XG4gICAgICBpZiAoIXBhKGQsIHUpKVxuICAgICAgICByZXR1cm4gbztcbiAgICAgIHZhciBBID0gcmModSwgcy5kaW1lbnNpb25zKSwgeiA9ICQyKHMuaW1wYWN0KSA9PT0gcDtcbiAgICAgIHJldHVybiByKHAsIGIsIHosIHosIEEsIE0pO1xuICAgIH1cbiAgICBpZiAocy5waGFzZSA9PT0gXCJEUk9QX0FOSU1BVElOR1wiKSB7XG4gICAgICB2YXIgZiA9IHMuY29tcGxldGVkO1xuICAgICAgaWYgKCFwYShkLCBmLmNyaXRpY2FsKSlcbiAgICAgICAgcmV0dXJuIG87XG4gICAgICB2YXIgTyA9IHJjKGYuY3JpdGljYWwsIHMuZGltZW5zaW9ucyk7XG4gICAgICByZXR1cm4gcihwLCBiLCBlYihmLnJlc3VsdCkgPT09IHAsICQyKGYuaW1wYWN0KSA9PT0gcCwgTywgTSk7XG4gICAgfVxuICAgIGlmIChzLnBoYXNlID09PSBcIklETEVcIiAmJiBzLmNvbXBsZXRlZCAmJiAhcy5zaG91bGRGbHVzaCkge1xuICAgICAgdmFyIGggPSBzLmNvbXBsZXRlZDtcbiAgICAgIGlmICghcGEoZCwgaC5jcml0aWNhbCkpXG4gICAgICAgIHJldHVybiBvO1xuICAgICAgdmFyIGcgPSAkMihoLmltcGFjdCkgPT09IHAsIHYgPSAhIShoLmltcGFjdC5hdCAmJiBoLmltcGFjdC5hdC50eXBlID09PSBcIkNPTUJJTkVcIiksIEwgPSBoLmNyaXRpY2FsLmRyb3BwYWJsZS5pZCA9PT0gcDtcbiAgICAgIHJldHVybiBnID8gdiA/IHQgOiBvIDogTCA/IHQgOiBvO1xuICAgIH1cbiAgICByZXR1cm4gbztcbiAgfTtcbiAgcmV0dXJuIGk7XG59LCBXRCA9IHtcbiAgdXBkYXRlVmlld3BvcnRNYXhTY3JvbGw6IG1OXG59O1xuZnVuY3Rpb24gUkQoKSB7XG4gIHJldHVybiBkb2N1bWVudC5ib2R5IHx8IChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIgPyB5MSghMSwgXCJkb2N1bWVudC5ib2R5IGlzIG5vdCByZWFkeVwiKSA6IHkxKCExKSksIGRvY3VtZW50LmJvZHk7XG59XG52YXIgQkQgPSB7XG4gIG1vZGU6IFwic3RhbmRhcmRcIixcbiAgdHlwZTogXCJERUZBVUxUXCIsXG4gIGRpcmVjdGlvbjogXCJ2ZXJ0aWNhbFwiLFxuICBpc0Ryb3BEaXNhYmxlZDogITEsXG4gIGlzQ29tYmluZUVuYWJsZWQ6ICExLFxuICBpZ25vcmVDb250YWluZXJDbGlwcGluZzogITEsXG4gIHJlbmRlckNsb25lOiBudWxsLFxuICBnZXRDb250YWluZXJGb3JDbG9uZTogUkRcbn0sIHJiID0gb2QoeEQsIFdELCBudWxsLCB7XG4gIGNvbnRleHQ6IFQ2LFxuICBwdXJlOiAhMCxcbiAgYXJlU3RhdGVQcm9wc0VxdWFsOiAkZFxufSkod0QpO1xucmIuZGVmYXVsdFByb3BzID0gQkQ7XG5jb25zdCBTRCA9ICQuZGl2LmF0dHJzKHtcbiAgYXM6IFwiZGl2XCJcbn0pYFxuICAuc2Nyb2xsYmFyLWNvbnRhaW5lciB7XG4gICAgcGFkZGluZy1yaWdodDogMDtcbiAgfVxuICAucHNfX3JhaWwteSB7XG4gICAgcmlnaHQ6IDAgIWltcG9ydGFudDtcbiAgfVxuYCwgRUQgPSAkLmRpdmBcbiAgZGlzcGxheTogZmxleDtcbiAganVzdGlmeS1jb250ZW50OiBzcGFjZS1iZXR3ZWVuO1xuICBhbGlnbi1pdGVtczogY2VudGVyO1xuICB3aWR0aDogMTAwJTtcbiAgYm94LXNpemluZzogYm9yZGVyLWJveDtcbiAgcGFkZGluZzogMnB4IDA7XG4gIGxhYmVsIHtcbiAgICBmb250LXNpemU6IDEycHg7XG4gIH1cbmAsIGtEID0gJC5kaXYuYXR0cnMoe1xuICBhczogXCJkaXZcIlxufSlgYCwgTkQgPSAkLmRpdihcbiAgKHsgdGhlbWU6IHsgY29sb3JzOiBlIH0gfSkgPT4gbzFgXG4gIC5pY29uLXN5c3RlbSB7XG4gICAgY3Vyc29yOiBtb3ZlO1xuICAgIHBhZGRpbmc6IDNweDtcbiAgICBjb2xvcjogJHtlLnRleHRJY29uLnRleHRQcmltYXJ5fTtcbiAgfVxuICBgXG4pLCBURCA9ICQuZGl2YFxuICBtYXgtaGVpZ2h0OiAkeyhlKSA9PiBlLiRoYXNTY3JvbGwgPyBcIjIwMHB4XCIgOiBcIjMzOHB4XCJ9O1xuYCwgSUQgPSAoe1xuICBjb2x1bW5zU3RhdGU6IGUsXG4gIHNlbGVjdGVkQ29sdW1uczogdCxcbiAgaGFuZGxlQ29sdW1uc1N0YXRlQ2hhbmdlOiBvLFxuICBoYW5kbGVDaGVja2JveENvbHVtbnNDaGFuZ2U6IG4sXG4gIHBhZ2VTaXplOiByLFxuICBmaWx0ZXJOYW1lczogaVxufSkgPT4ge1xuICBjb25zdCBhID0gXzEoXG4gICAgKGIsIE0sIHUpID0+IHtcbiAgICAgIGNvbnN0IEEgPSBBcnJheS5mcm9tKGIpLCBbel0gPSBBLnNwbGljZShNLCAxKTtcbiAgICAgIHJldHVybiBBLnNwbGljZSh1LCAwLCB6KSwgbmV3IFNldChBKTtcbiAgICB9LFxuICAgIFtdXG4gICksIHMgPSBfMShcbiAgICAoYikgPT4ge1xuICAgICAgaWYgKCFiLmRlc3RpbmF0aW9uKVxuICAgICAgICByZXR1cm47XG4gICAgICBjb25zdCBNID0gYShcbiAgICAgICAgZS5pdGVtcyxcbiAgICAgICAgYi5zb3VyY2UuaW5kZXgsXG4gICAgICAgIGIuZGVzdGluYXRpb24uaW5kZXhcbiAgICAgICk7XG4gICAgICBvKHtcbiAgICAgICAgaXRlbXM6IE1cbiAgICAgIH0pO1xuICAgIH0sXG4gICAgW2UsIG8sIGFdXG4gICk7XG4gIGZ1bmN0aW9uIGwoYikge1xuICAgIHJldHVybiBiID09IG51bGwgPyB2b2lkIDAgOiBiLnRvTG93ZXJDYXNlKCkucmVwbGFjZSgvXFxzKy9nLCBcIlwiKTtcbiAgfVxuICBmdW5jdGlvbiBwKGIsIE0pIHtcbiAgICBmb3IgKGNvbnN0IHUgb2YgYilcbiAgICAgIGlmIChsKHUpID09PSBsKE0pKVxuICAgICAgICByZXR1cm4gdTtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuICBjb25zdCBkID0gKCkgPT4gLyogQF9fUFVSRV9fICovIGMocmIsIHsgZHJvcHBhYmxlSWQ6IFwiZHJvcHBhYmxlXCIsIGNoaWxkcmVuOiAoYikgPT4gLyogQF9fUFVSRV9fICovIGUxKFwiZGl2XCIsIHsgLi4uYi5kcm9wcGFibGVQcm9wcywgcmVmOiBiLmlubmVyUmVmLCBjaGlsZHJlbjogW1xuICAgIEFycmF5LmZyb20oZS5pdGVtcykubWFwKChNLCB1KSA9PiAoXG4gICAgICAvLyBAdHMtaWdub3JlXG4gICAgICAvKiBAX19QVVJFX18gKi8gYyh5RCwgeyBkcmFnZ2FibGVJZDogTSwgaW5kZXg6IHUsIGNoaWxkcmVuOiAoQSkgPT4gLyogQF9fUFVSRV9fICovIGMoXG4gICAgICAgIGtELFxuICAgICAgICB7XG4gICAgICAgICAgcmVmOiBBLmlubmVyUmVmLFxuICAgICAgICAgIC4uLkEuZHJhZ2dhYmxlUHJvcHMsXG4gICAgICAgICAgLi4uQS5kcmFnSGFuZGxlUHJvcHMsXG4gICAgICAgICAgY2hpbGRyZW46IC8qIEBfX1BVUkVfXyAqLyBlMShFRCwgeyBjaGlsZHJlbjogW1xuICAgICAgICAgICAgLyogQF9fUFVSRV9fICovIGMoXG4gICAgICAgICAgICAgIHl0LFxuICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgbGFiZWw6IHAoaSwgTSkgfHwgcjIoTSksXG4gICAgICAgICAgICAgICAgY2hlY2tlZDogdC5oYXMoTSksXG4gICAgICAgICAgICAgICAgaXNSZXF1aXJlZDogITAsXG4gICAgICAgICAgICAgICAgb25DaGFuZ2U6IG4oTSlcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgKSxcbiAgICAgICAgICAgIC8qIEBfX1BVUkVfXyAqLyBjKE5ELCB7IGNoaWxkcmVuOiAvKiBAX19QVVJFX18gKi8gYyhcbiAgICAgICAgICAgICAgWjEsXG4gICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBuYW1lOiBcIk1vdmVEb3RzXCIsXG4gICAgICAgICAgICAgICAgXCJhcmlhLWxhYmVsXCI6IFwiRHJhZyBMaXN0IEl0ZW1cIixcbiAgICAgICAgICAgICAgICBzaXplOiBcInh4c1wiXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICkgfSlcbiAgICAgICAgICBdIH0pXG4gICAgICAgIH1cbiAgICAgICkgfSwgTSlcbiAgICApKSxcbiAgICBiLnBsYWNlaG9sZGVyXG4gIF0gfSkgfSk7XG4gIHJldHVybiAvKiBAX19QVVJFX18gKi8gYyhTRCwgeyBjaGlsZHJlbjogLyogQF9fUFVSRV9fICovIGMoajQsIHsgb3B0aW9uczogeyBzdXBwcmVzc1Njcm9sbFg6ICEwLCB1c2VCb3RoV2hlZWxBeGVzOiAhMSB9LCBjaGlsZHJlbjogLyogQF9fUFVSRV9fICovIGMoVEQsIHsgJGhhc1Njcm9sbDogISEociAmJiByIDw9IDEwKSwgY2hpbGRyZW46IC8qIEBfX1BVUkVfXyAqLyBjKFRJLCB7IG9uRHJhZ0VuZDogcywgY2hpbGRyZW46IGQoKSB9KSB9KSB9KSB9KTtcbn0sIG5jID0gKGUsIHQpID0+ICFlICYmICF0IHx8IGUuc2l6ZSAhPT0gdC5zaXplID8gITEgOiBTdHJpbmcoQXJyYXkuZnJvbShlKSkgPT09IFN0cmluZyhBcnJheS5mcm9tKHQpKTtcbnZhciBuYiA9IHsgZXhwb3J0czoge30gfTtcbihmdW5jdGlvbihlKSB7XG4gIC8qKlxuICAqIEhpZ2hjaGFydHMgSlMgdjExLjQuOCAoMjAyNC0wOC0yOSlcbiAgKlxuICAqIChjKSAyMDA5LTIwMjQgVG9yc3RlaW4gSG9uc2lcbiAgKlxuICAqIExpY2Vuc2U6IHd3dy5oaWdoY2hhcnRzLmNvbS9saWNlbnNlXG4gICovXG4gIChmdW5jdGlvbih0LCBvKSB7XG4gICAgZS5leHBvcnRzID8gKG8uZGVmYXVsdCA9IG8sIGUuZXhwb3J0cyA9IHQgJiYgdC5kb2N1bWVudCA/IG8odCkgOiBvKSA6ICh0LkhpZ2hjaGFydHMgJiYgdC5IaWdoY2hhcnRzLmVycm9yKDE2LCAhMCksIHQuSGlnaGNoYXJ0cyA9IG8odCkpO1xuICB9KSh0eXBlb2Ygd2luZG93IDwgXCJ1XCIgPyB3aW5kb3cgOiBENSwgZnVuY3Rpb24odCkge1xuICAgIHZhciBvID0ge307XG4gICAgZnVuY3Rpb24gbihyLCBpLCBhLCBzKSB7XG4gICAgICAhci5oYXNPd25Qcm9wZXJ0eShpKSAmJiAocltpXSA9IHMuYXBwbHkobnVsbCwgYSksIHQgJiYgdHlwZW9mIEN1c3RvbUV2ZW50ID09IFwiZnVuY3Rpb25cIiAmJiB0LmRpc3BhdGNoRXZlbnQobmV3IEN1c3RvbUV2ZW50KFwiSGlnaGNoYXJ0c01vZHVsZUxvYWRlZFwiLCB7IGRldGFpbDogeyBwYXRoOiBpLCBtb2R1bGU6IHJbaV0gfSB9KSkpO1xuICAgIH1cbiAgICByZXR1cm4gbihvLCBcIkNvcmUvR2xvYmFscy5qc1wiLCBbXSwgZnVuY3Rpb24oKSB7XG4gICAgICB2YXIgciwgaTtcbiAgICAgIHJldHVybiAoaSA9IHIgfHwgKHIgPSB7fSkpLlNWR19OUyA9IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiwgaS5wcm9kdWN0ID0gXCJIaWdoY2hhcnRzXCIsIGkudmVyc2lvbiA9IFwiMTEuNC44XCIsIGkud2luID0gdCAhPT0gdm9pZCAwID8gdCA6IHt9LCBpLmRvYyA9IGkud2luLmRvY3VtZW50LCBpLnN2ZyA9IGkuZG9jICYmIGkuZG9jLmNyZWF0ZUVsZW1lbnROUyAmJiAhIWkuZG9jLmNyZWF0ZUVsZW1lbnROUyhpLlNWR19OUywgXCJzdmdcIikuY3JlYXRlU1ZHUmVjdCwgaS51c2VyQWdlbnQgPSBpLndpbi5uYXZpZ2F0b3IgJiYgaS53aW4ubmF2aWdhdG9yLnVzZXJBZ2VudCB8fCBcIlwiLCBpLmlzQ2hyb21lID0gaS53aW4uY2hyb21lLCBpLmlzRmlyZWZveCA9IGkudXNlckFnZW50LmluZGV4T2YoXCJGaXJlZm94XCIpICE9PSAtMSwgaS5pc01TID0gLyhlZGdlfG1zaWV8dHJpZGVudCkvaS50ZXN0KGkudXNlckFnZW50KSAmJiAhaS53aW4ub3BlcmEsIGkuaXNTYWZhcmkgPSAhaS5pc0Nocm9tZSAmJiBpLnVzZXJBZ2VudC5pbmRleE9mKFwiU2FmYXJpXCIpICE9PSAtMSwgaS5pc1RvdWNoRGV2aWNlID0gLyhNb2JpbGV8QW5kcm9pZHxXaW5kb3dzIFBob25lKS8udGVzdChpLnVzZXJBZ2VudCksIGkuaXNXZWJLaXQgPSBpLnVzZXJBZ2VudC5pbmRleE9mKFwiQXBwbGVXZWJLaXRcIikgIT09IC0xLCBpLmRlZzJyYWQgPSAyICogTWF0aC5QSSAvIDM2MCwgaS5oYXNCaWRpQnVnID0gaS5pc0ZpcmVmb3ggJiYgNCA+IHBhcnNlSW50KGkudXNlckFnZW50LnNwbGl0KFwiRmlyZWZveC9cIilbMV0sIDEwKSwgaS5tYXJnaW5OYW1lcyA9IFtcInBsb3RUb3BcIiwgXCJtYXJnaW5SaWdodFwiLCBcIm1hcmdpbkJvdHRvbVwiLCBcInBsb3RMZWZ0XCJdLCBpLm5vb3AgPSBmdW5jdGlvbigpIHtcbiAgICAgIH0sIGkuc3VwcG9ydHNQYXNzaXZlRXZlbnRzID0gZnVuY3Rpb24oKSB7XG4gICAgICAgIGxldCBhID0gITE7XG4gICAgICAgIGlmICghaS5pc01TKSB7XG4gICAgICAgICAgbGV0IHMgPSBPYmplY3QuZGVmaW5lUHJvcGVydHkoe30sIFwicGFzc2l2ZVwiLCB7IGdldDogZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICBhID0gITA7XG4gICAgICAgICAgfSB9KTtcbiAgICAgICAgICBpLndpbi5hZGRFdmVudExpc3RlbmVyICYmIGkud2luLnJlbW92ZUV2ZW50TGlzdGVuZXIgJiYgKGkud2luLmFkZEV2ZW50TGlzdGVuZXIoXCJ0ZXN0UGFzc2l2ZVwiLCBpLm5vb3AsIHMpLCBpLndpbi5yZW1vdmVFdmVudExpc3RlbmVyKFwidGVzdFBhc3NpdmVcIiwgaS5ub29wLCBzKSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGE7XG4gICAgICB9KCksIGkuY2hhcnRzID0gW10sIGkuY29tcG9zZWQgPSBbXSwgaS5kYXRlRm9ybWF0cyA9IHt9LCBpLnNlcmllc1R5cGVzID0ge30sIGkuc3ltYm9sU2l6ZXMgPSB7fSwgaS5jaGFydENvdW50ID0gMCwgcjtcbiAgICB9KSwgbihvLCBcIkNvcmUvVXRpbGl0aWVzLmpzXCIsIFtvW1wiQ29yZS9HbG9iYWxzLmpzXCJdXSwgZnVuY3Rpb24ocikge1xuICAgICAgbGV0IGksIHsgY2hhcnRzOiBhLCBkb2M6IHMsIHdpbjogbCB9ID0gcjtcbiAgICAgIGZ1bmN0aW9uIHAocSwgbSwgaywgeCkge1xuICAgICAgICBsZXQgTiA9IG0gPyBcIkhpZ2hjaGFydHMgZXJyb3JcIiA6IFwiSGlnaGNoYXJ0cyB3YXJuaW5nXCI7XG4gICAgICAgIHEgPT09IDMyICYmIChxID0gYCR7Tn06IERlcHJlY2F0ZWQgbWVtYmVyYCk7XG4gICAgICAgIGxldCBWID0gZihxKSwgUiA9IFYgPyBgJHtOfSAjJHtxfTogd3d3LmhpZ2hjaGFydHMuY29tL2Vycm9ycy8ke3F9L2AgOiBxLnRvU3RyaW5nKCk7XG4gICAgICAgIGlmICh4ICE9PSB2b2lkIDApIHtcbiAgICAgICAgICBsZXQgSSA9IFwiXCI7XG4gICAgICAgICAgViAmJiAoUiArPSBcIj9cIiksIFQoeCwgZnVuY3Rpb24oaiwgVSkge1xuICAgICAgICAgICAgSSArPSBgXG4gLSAke1V9OiAke2p9YCwgViAmJiAoUiArPSBlbmNvZGVVUkkoVSkgKyBcIj1cIiArIGVuY29kZVVSSShqKSk7XG4gICAgICAgICAgfSksIFIgKz0gSTtcbiAgICAgICAgfVxuICAgICAgICBIKHIsIFwiZGlzcGxheUVycm9yXCIsIHsgY2hhcnQ6IGssIGNvZGU6IHEsIG1lc3NhZ2U6IFIsIHBhcmFtczogeCB9LCBmdW5jdGlvbigpIHtcbiAgICAgICAgICBpZiAobSlcbiAgICAgICAgICAgIHRocm93IEVycm9yKFIpO1xuICAgICAgICAgIGwuY29uc29sZSAmJiBwLm1lc3NhZ2VzLmluZGV4T2YoUikgPT09IC0xICYmIGNvbnNvbGUud2FybihSKTtcbiAgICAgICAgfSksIHAubWVzc2FnZXMucHVzaChSKTtcbiAgICAgIH1cbiAgICAgIGZ1bmN0aW9uIGQocSwgbSkge1xuICAgICAgICByZXR1cm4gcGFyc2VJbnQocSwgbSB8fCAxMCk7XG4gICAgICB9XG4gICAgICBmdW5jdGlvbiBiKHEpIHtcbiAgICAgICAgcmV0dXJuIHR5cGVvZiBxID09IFwic3RyaW5nXCI7XG4gICAgICB9XG4gICAgICBmdW5jdGlvbiBNKHEpIHtcbiAgICAgICAgbGV0IG0gPSBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwocSk7XG4gICAgICAgIHJldHVybiBtID09PSBcIltvYmplY3QgQXJyYXldXCIgfHwgbSA9PT0gXCJbb2JqZWN0IEFycmF5IEl0ZXJhdG9yXVwiO1xuICAgICAgfVxuICAgICAgZnVuY3Rpb24gdShxLCBtKSB7XG4gICAgICAgIHJldHVybiAhIXEgJiYgdHlwZW9mIHEgPT0gXCJvYmplY3RcIiAmJiAoIW0gfHwgIU0ocSkpO1xuICAgICAgfVxuICAgICAgZnVuY3Rpb24gQShxKSB7XG4gICAgICAgIHJldHVybiB1KHEpICYmIHR5cGVvZiBxLm5vZGVUeXBlID09IFwibnVtYmVyXCI7XG4gICAgICB9XG4gICAgICBmdW5jdGlvbiB6KHEpIHtcbiAgICAgICAgbGV0IG0gPSBxICYmIHEuY29uc3RydWN0b3I7XG4gICAgICAgIHJldHVybiAhISh1KHEsICEwKSAmJiAhQShxKSAmJiBtICYmIG0ubmFtZSAmJiBtLm5hbWUgIT09IFwiT2JqZWN0XCIpO1xuICAgICAgfVxuICAgICAgZnVuY3Rpb24gZihxKSB7XG4gICAgICAgIHJldHVybiB0eXBlb2YgcSA9PSBcIm51bWJlclwiICYmICFpc05hTihxKSAmJiBxIDwgMSAvIDAgJiYgcSA+IC0xIC8gMDtcbiAgICAgIH1cbiAgICAgIGZ1bmN0aW9uIE8ocSkge1xuICAgICAgICByZXR1cm4gcSAhPSBudWxsO1xuICAgICAgfVxuICAgICAgZnVuY3Rpb24gaChxLCBtLCBrKSB7XG4gICAgICAgIGxldCB4LCBOID0gYihtKSAmJiAhTyhrKSwgViA9IChSLCBJKSA9PiB7XG4gICAgICAgICAgTyhSKSA/IHEuc2V0QXR0cmlidXRlKEksIFIpIDogTiA/ICh4ID0gcS5nZXRBdHRyaWJ1dGUoSSkpIHx8IEkgIT09IFwiY2xhc3NcIiB8fCAoeCA9IHEuZ2V0QXR0cmlidXRlKEkgKyBcIk5hbWVcIikpIDogcS5yZW1vdmVBdHRyaWJ1dGUoSSk7XG4gICAgICAgIH07XG4gICAgICAgIHJldHVybiBiKG0pID8gVihrLCBtKSA6IFQobSwgViksIHg7XG4gICAgICB9XG4gICAgICBmdW5jdGlvbiBnKHEpIHtcbiAgICAgICAgcmV0dXJuIE0ocSkgPyBxIDogW3FdO1xuICAgICAgfVxuICAgICAgZnVuY3Rpb24gdihxLCBtKSB7XG4gICAgICAgIGxldCBrO1xuICAgICAgICBmb3IgKGsgaW4gcSB8fCAocSA9IHt9KSwgbSlcbiAgICAgICAgICBxW2tdID0gbVtrXTtcbiAgICAgICAgcmV0dXJuIHE7XG4gICAgICB9XG4gICAgICBmdW5jdGlvbiBMKCkge1xuICAgICAgICBsZXQgcSA9IGFyZ3VtZW50cywgbSA9IHEubGVuZ3RoO1xuICAgICAgICBmb3IgKGxldCBrID0gMDsgayA8IG07IGsrKykge1xuICAgICAgICAgIGxldCB4ID0gcVtrXTtcbiAgICAgICAgICBpZiAoeCAhPSBudWxsKVxuICAgICAgICAgICAgcmV0dXJuIHg7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGZ1bmN0aW9uIHkocSwgbSkge1xuICAgICAgICB2KHEuc3R5bGUsIG0pO1xuICAgICAgfVxuICAgICAgZnVuY3Rpb24gQihxKSB7XG4gICAgICAgIHJldHVybiBNYXRoLnBvdygxMCwgTWF0aC5mbG9vcihNYXRoLmxvZyhxKSAvIE1hdGguTE4xMCkpO1xuICAgICAgfVxuICAgICAgZnVuY3Rpb24gWChxLCBtKSB7XG4gICAgICAgIHJldHVybiBxID4gMWUxNCA/IHEgOiBwYXJzZUZsb2F0KHEudG9QcmVjaXNpb24obSB8fCAxNCkpO1xuICAgICAgfVxuICAgICAgKHAgfHwgKHAgPSB7fSkpLm1lc3NhZ2VzID0gW10sIE1hdGguZWFzZUluT3V0U2luZSA9IGZ1bmN0aW9uKHEpIHtcbiAgICAgICAgcmV0dXJuIC0wLjUgKiAoTWF0aC5jb3MoTWF0aC5QSSAqIHEpIC0gMSk7XG4gICAgICB9O1xuICAgICAgbGV0IEYgPSBBcnJheS5wcm90b3R5cGUuZmluZCA/IGZ1bmN0aW9uKHEsIG0pIHtcbiAgICAgICAgcmV0dXJuIHEuZmluZChtKTtcbiAgICAgIH0gOiBmdW5jdGlvbihxLCBtKSB7XG4gICAgICAgIGxldCBrLCB4ID0gcS5sZW5ndGg7XG4gICAgICAgIGZvciAoayA9IDA7IGsgPCB4OyBrKyspXG4gICAgICAgICAgaWYgKG0ocVtrXSwgaykpXG4gICAgICAgICAgICByZXR1cm4gcVtrXTtcbiAgICAgIH07XG4gICAgICBmdW5jdGlvbiBUKHEsIG0sIGspIHtcbiAgICAgICAgZm9yIChsZXQgeCBpbiBxKVxuICAgICAgICAgIE9iamVjdC5oYXNPd25Qcm9wZXJ0eS5jYWxsKHEsIHgpICYmIG0uY2FsbChrIHx8IHFbeF0sIHFbeF0sIHgsIHEpO1xuICAgICAgfVxuICAgICAgZnVuY3Rpb24gdyhxLCBtLCBrKSB7XG4gICAgICAgIGZ1bmN0aW9uIHgoUiwgSSkge1xuICAgICAgICAgIGxldCBqID0gcS5yZW1vdmVFdmVudExpc3RlbmVyO1xuICAgICAgICAgIGogJiYgai5jYWxsKHEsIFIsIEksICExKTtcbiAgICAgICAgfVxuICAgICAgICBmdW5jdGlvbiBOKFIpIHtcbiAgICAgICAgICBsZXQgSSwgajtcbiAgICAgICAgICBxLm5vZGVOYW1lICYmIChtID8gKEkgPSB7fSlbbV0gPSAhMCA6IEkgPSBSLCBUKEksIGZ1bmN0aW9uKFUsIF8pIHtcbiAgICAgICAgICAgIGlmIChSW19dKVxuICAgICAgICAgICAgICBmb3IgKGogPSBSW19dLmxlbmd0aDsgai0tOyApXG4gICAgICAgICAgICAgICAgeChfLCBSW19dW2pdLmZuKTtcbiAgICAgICAgICB9KSk7XG4gICAgICAgIH1cbiAgICAgICAgbGV0IFYgPSB0eXBlb2YgcSA9PSBcImZ1bmN0aW9uXCIgJiYgcS5wcm90b3R5cGUgfHwgcTtcbiAgICAgICAgaWYgKE9iamVjdC5oYXNPd25Qcm9wZXJ0eS5jYWxsKFYsIFwiaGNFdmVudHNcIikpIHtcbiAgICAgICAgICBsZXQgUiA9IFYuaGNFdmVudHM7XG4gICAgICAgICAgaWYgKG0pIHtcbiAgICAgICAgICAgIGxldCBJID0gUlttXSB8fCBbXTtcbiAgICAgICAgICAgIGsgPyAoUlttXSA9IEkuZmlsdGVyKGZ1bmN0aW9uKGopIHtcbiAgICAgICAgICAgICAgcmV0dXJuIGsgIT09IGouZm47XG4gICAgICAgICAgICB9KSwgeChtLCBrKSkgOiAoTihSKSwgUlttXSA9IFtdKTtcbiAgICAgICAgICB9IGVsc2VcbiAgICAgICAgICAgIE4oUiksIGRlbGV0ZSBWLmhjRXZlbnRzO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBmdW5jdGlvbiBIKHEsIG0sIGssIHgpIHtcbiAgICAgICAgaWYgKGsgPSBrIHx8IHt9LCBzLmNyZWF0ZUV2ZW50ICYmIChxLmRpc3BhdGNoRXZlbnQgfHwgcS5maXJlRXZlbnQgJiYgcSAhPT0gcikpIHtcbiAgICAgICAgICBsZXQgTiA9IHMuY3JlYXRlRXZlbnQoXCJFdmVudHNcIik7XG4gICAgICAgICAgTi5pbml0RXZlbnQobSwgITAsICEwKSwgayA9IHYoTiwgayksIHEuZGlzcGF0Y2hFdmVudCA/IHEuZGlzcGF0Y2hFdmVudChrKSA6IHEuZmlyZUV2ZW50KG0sIGspO1xuICAgICAgICB9IGVsc2UgaWYgKHEuaGNFdmVudHMpIHtcbiAgICAgICAgICBrLnRhcmdldCB8fCB2KGssIHsgcHJldmVudERlZmF1bHQ6IGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgay5kZWZhdWx0UHJldmVudGVkID0gITA7XG4gICAgICAgICAgfSwgdGFyZ2V0OiBxLCB0eXBlOiBtIH0pO1xuICAgICAgICAgIGxldCBOID0gW10sIFYgPSBxLCBSID0gITE7XG4gICAgICAgICAgZm9yICg7IFYuaGNFdmVudHM7IClcbiAgICAgICAgICAgIE9iamVjdC5oYXNPd25Qcm9wZXJ0eS5jYWxsKFYsIFwiaGNFdmVudHNcIikgJiYgVi5oY0V2ZW50c1ttXSAmJiAoTi5sZW5ndGggJiYgKFIgPSAhMCksIE4udW5zaGlmdC5hcHBseShOLCBWLmhjRXZlbnRzW21dKSksIFYgPSBPYmplY3QuZ2V0UHJvdG90eXBlT2YoVik7XG4gICAgICAgICAgUiAmJiBOLnNvcnQoKEksIGopID0+IEkub3JkZXIgLSBqLm9yZGVyKSwgTi5mb3JFYWNoKChJKSA9PiB7XG4gICAgICAgICAgICBJLmZuLmNhbGwocSwgaykgPT09ICExICYmIGsucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICB4ICYmICFrLmRlZmF1bHRQcmV2ZW50ZWQgJiYgeC5jYWxsKHEsIGspO1xuICAgICAgfVxuICAgICAgVCh7IG1hcDogXCJtYXBcIiwgZWFjaDogXCJmb3JFYWNoXCIsIGdyZXA6IFwiZmlsdGVyXCIsIHJlZHVjZTogXCJyZWR1Y2VcIiwgc29tZTogXCJzb21lXCIgfSwgZnVuY3Rpb24ocSwgbSkge1xuICAgICAgICByW21dID0gZnVuY3Rpb24oaykge1xuICAgICAgICAgIHJldHVybiBwKDMyLCAhMSwgdm9pZCAwLCB7IFtgSGlnaGNoYXJ0cy4ke219YF06IGB1c2UgQXJyYXkuJHtxfWAgfSksIEFycmF5LnByb3RvdHlwZVtxXS5hcHBseShrLCBbXS5zbGljZS5jYWxsKGFyZ3VtZW50cywgMSkpO1xuICAgICAgICB9O1xuICAgICAgfSk7XG4gICAgICBsZXQgQyA9IGZ1bmN0aW9uKCkge1xuICAgICAgICBsZXQgcSA9IE1hdGgucmFuZG9tKCkudG9TdHJpbmcoMzYpLnN1YnN0cmluZygyLCA5KSArIFwiLVwiLCBtID0gMDtcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgICAgICAgIHJldHVybiBcImhpZ2hjaGFydHMtXCIgKyAoaSA/IFwiXCIgOiBxKSArIG0rKztcbiAgICAgICAgfTtcbiAgICAgIH0oKTtcbiAgICAgIHJldHVybiBsLmpRdWVyeSAmJiAobC5qUXVlcnkuZm4uaGlnaGNoYXJ0cyA9IGZ1bmN0aW9uKCkge1xuICAgICAgICBsZXQgcSA9IFtdLnNsaWNlLmNhbGwoYXJndW1lbnRzKTtcbiAgICAgICAgaWYgKHRoaXNbMF0pXG4gICAgICAgICAgcmV0dXJuIHFbMF0gPyAobmV3IHJbYihxWzBdKSA/IHEuc2hpZnQoKSA6IFwiQ2hhcnRcIl0odGhpc1swXSwgcVswXSwgcVsxXSksIHRoaXMpIDogYVtoKHRoaXNbMF0sIFwiZGF0YS1oaWdoY2hhcnRzLWNoYXJ0XCIpXTtcbiAgICAgIH0pLCB7IGFkZEV2ZW50OiBmdW5jdGlvbihxLCBtLCBrLCB4ID0ge30pIHtcbiAgICAgICAgbGV0IE4gPSB0eXBlb2YgcSA9PSBcImZ1bmN0aW9uXCIgJiYgcS5wcm90b3R5cGUgfHwgcTtcbiAgICAgICAgT2JqZWN0Lmhhc093blByb3BlcnR5LmNhbGwoTiwgXCJoY0V2ZW50c1wiKSB8fCAoTi5oY0V2ZW50cyA9IHt9KTtcbiAgICAgICAgbGV0IFYgPSBOLmhjRXZlbnRzO1xuICAgICAgICByLlBvaW50ICYmIHEgaW5zdGFuY2VvZiByLlBvaW50ICYmIHEuc2VyaWVzICYmIHEuc2VyaWVzLmNoYXJ0ICYmIChxLnNlcmllcy5jaGFydC5ydW5UcmFja2VyQ2xpY2sgPSAhMCk7XG4gICAgICAgIGxldCBSID0gcS5hZGRFdmVudExpc3RlbmVyO1xuICAgICAgICBSICYmIFIuY2FsbChxLCBtLCBrLCAhIXIuc3VwcG9ydHNQYXNzaXZlRXZlbnRzICYmIHsgcGFzc2l2ZTogeC5wYXNzaXZlID09PSB2b2lkIDAgPyBtLmluZGV4T2YoXCJ0b3VjaFwiKSAhPT0gLTEgOiB4LnBhc3NpdmUsIGNhcHR1cmU6ICExIH0pLCBWW21dIHx8IChWW21dID0gW10pO1xuICAgICAgICBsZXQgSSA9IHsgZm46IGssIG9yZGVyOiB0eXBlb2YgeC5vcmRlciA9PSBcIm51bWJlclwiID8geC5vcmRlciA6IDEgLyAwIH07XG4gICAgICAgIHJldHVybiBWW21dLnB1c2goSSksIFZbbV0uc29ydCgoaiwgVSkgPT4gai5vcmRlciAtIFUub3JkZXIpLCBmdW5jdGlvbigpIHtcbiAgICAgICAgICB3KHEsIG0sIGspO1xuICAgICAgICB9O1xuICAgICAgfSwgYXJyYXlNYXg6IGZ1bmN0aW9uKHEpIHtcbiAgICAgICAgbGV0IG0gPSBxLmxlbmd0aCwgayA9IHFbMF07XG4gICAgICAgIGZvciAoOyBtLS07IClcbiAgICAgICAgICBxW21dID4gayAmJiAoayA9IHFbbV0pO1xuICAgICAgICByZXR1cm4gaztcbiAgICAgIH0sIGFycmF5TWluOiBmdW5jdGlvbihxKSB7XG4gICAgICAgIGxldCBtID0gcS5sZW5ndGgsIGsgPSBxWzBdO1xuICAgICAgICBmb3IgKDsgbS0tOyApXG4gICAgICAgICAgcVttXSA8IGsgJiYgKGsgPSBxW21dKTtcbiAgICAgICAgcmV0dXJuIGs7XG4gICAgICB9LCBhdHRyOiBoLCBjbGFtcDogZnVuY3Rpb24ocSwgbSwgaykge1xuICAgICAgICByZXR1cm4gcSA+IG0gPyBxIDwgayA/IHEgOiBrIDogbTtcbiAgICAgIH0sIGNsZWFyVGltZW91dDogZnVuY3Rpb24ocSkge1xuICAgICAgICBPKHEpICYmIGNsZWFyVGltZW91dChxKTtcbiAgICAgIH0sIGNvcnJlY3RGbG9hdDogWCwgY3JlYXRlRWxlbWVudDogZnVuY3Rpb24ocSwgbSwgaywgeCwgTikge1xuICAgICAgICBsZXQgViA9IHMuY3JlYXRlRWxlbWVudChxKTtcbiAgICAgICAgcmV0dXJuIG0gJiYgdihWLCBtKSwgTiAmJiB5KFYsIHsgcGFkZGluZzogXCIwXCIsIGJvcmRlcjogXCJub25lXCIsIG1hcmdpbjogXCIwXCIgfSksIGsgJiYgeShWLCBrKSwgeCAmJiB4LmFwcGVuZENoaWxkKFYpLCBWO1xuICAgICAgfSwgY3Jpc3A6IChxLCBtID0gMCwgaykgPT4ge1xuICAgICAgICBsZXQgeCA9IG0gJSAyIC8gMiwgTiA9IGsgPyAtMSA6IDE7XG4gICAgICAgIHJldHVybiAoTWF0aC5yb3VuZChxICogTiAtIHgpICsgeCkgKiBOO1xuICAgICAgfSwgY3NzOiB5LCBkZWZpbmVkOiBPLCBkZXN0cm95T2JqZWN0UHJvcGVydGllczogZnVuY3Rpb24ocSwgbSwgaykge1xuICAgICAgICBUKHEsIGZ1bmN0aW9uKHgsIE4pIHtcbiAgICAgICAgICB4ICE9PSBtICYmICh4ICE9IG51bGwgJiYgeC5kZXN0cm95KSAmJiB4LmRlc3Ryb3koKSwgKHggIT0gbnVsbCAmJiB4LmRlc3Ryb3kgfHwgIWspICYmIGRlbGV0ZSBxW05dO1xuICAgICAgICB9KTtcbiAgICAgIH0sIGRpZmZPYmplY3RzOiBmdW5jdGlvbihxLCBtLCBrLCB4KSB7XG4gICAgICAgIGxldCBOID0ge307XG4gICAgICAgIHJldHVybiBmdW5jdGlvbiBWKFIsIEksIGosIFUpIHtcbiAgICAgICAgICBsZXQgXyA9IGsgPyBJIDogUjtcbiAgICAgICAgICBUKFIsIGZ1bmN0aW9uKHIxLCBLKSB7XG4gICAgICAgICAgICBpZiAoIVUgJiYgeCAmJiB4LmluZGV4T2YoSykgPiAtMSAmJiBJW0tdKSB7XG4gICAgICAgICAgICAgIHIxID0gZyhyMSksIGpbS10gPSBbXTtcbiAgICAgICAgICAgICAgZm9yIChsZXQgUSA9IDA7IFEgPCBNYXRoLm1heChyMS5sZW5ndGgsIElbS10ubGVuZ3RoKTsgUSsrKVxuICAgICAgICAgICAgICAgIElbS11bUV0gJiYgKHIxW1FdID09PSB2b2lkIDAgPyBqW0tdW1FdID0gSVtLXVtRXSA6IChqW0tdW1FdID0ge30sIFYocjFbUV0sIElbS11bUV0sIGpbS11bUV0sIFUgKyAxKSkpO1xuICAgICAgICAgICAgfSBlbHNlXG4gICAgICAgICAgICAgIHUocjEsICEwKSAmJiAhcjEubm9kZVR5cGUgPyAoaltLXSA9IE0ocjEpID8gW10gOiB7fSwgVihyMSwgSVtLXSB8fCB7fSwgaltLXSwgVSArIDEpLCBPYmplY3Qua2V5cyhqW0tdKS5sZW5ndGggIT09IDAgfHwgSyA9PT0gXCJjb2xvckF4aXNcIiAmJiBVID09PSAwIHx8IGRlbGV0ZSBqW0tdKSA6IChSW0tdICE9PSBJW0tdIHx8IEsgaW4gUiAmJiAhKEsgaW4gSSkpICYmIEsgIT09IFwiX19wcm90b19fXCIgJiYgSyAhPT0gXCJjb25zdHJ1Y3RvclwiICYmIChqW0tdID0gX1tLXSk7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH0ocSwgbSwgTiwgMCksIE47XG4gICAgICB9LCBkaXNjYXJkRWxlbWVudDogZnVuY3Rpb24ocSkge1xuICAgICAgICBxICYmIHEucGFyZW50RWxlbWVudCAmJiBxLnBhcmVudEVsZW1lbnQucmVtb3ZlQ2hpbGQocSk7XG4gICAgICB9LCBlcmFzZTogZnVuY3Rpb24ocSwgbSkge1xuICAgICAgICBsZXQgayA9IHEubGVuZ3RoO1xuICAgICAgICBmb3IgKDsgay0tOyApXG4gICAgICAgICAgaWYgKHFba10gPT09IG0pIHtcbiAgICAgICAgICAgIHEuc3BsaWNlKGssIDEpO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuICAgICAgfSwgZXJyb3I6IHAsIGV4dGVuZDogdiwgZXh0ZW5kQ2xhc3M6IGZ1bmN0aW9uKHEsIG0pIHtcbiAgICAgICAgbGV0IGsgPSBmdW5jdGlvbigpIHtcbiAgICAgICAgfTtcbiAgICAgICAgcmV0dXJuIGsucHJvdG90eXBlID0gbmV3IHEoKSwgdihrLnByb3RvdHlwZSwgbSksIGs7XG4gICAgICB9LCBmaW5kOiBGLCBmaXJlRXZlbnQ6IEgsIGdldENsb3Nlc3REaXN0YW5jZTogZnVuY3Rpb24ocSwgbSkge1xuICAgICAgICBsZXQgaywgeCwgTiwgViA9ICFtO1xuICAgICAgICByZXR1cm4gcS5mb3JFYWNoKChSKSA9PiB7XG4gICAgICAgICAgaWYgKFIubGVuZ3RoID4gMSlcbiAgICAgICAgICAgIGZvciAoTiA9IFIubGVuZ3RoIC0gMTsgTiA+IDA7IE4tLSlcbiAgICAgICAgICAgICAgKHggPSBSW05dIC0gUltOIC0gMV0pIDwgMCAmJiAhViA/IChtID09IG51bGwgfHwgbSgpLCBtID0gdm9pZCAwKSA6IHggJiYgKGsgPT09IHZvaWQgMCB8fCB4IDwgaykgJiYgKGsgPSB4KTtcbiAgICAgICAgfSksIGs7XG4gICAgICB9LCBnZXRNYWduaXR1ZGU6IEIsIGdldE5lc3RlZFByb3BlcnR5OiBmdW5jdGlvbihxLCBtKSB7XG4gICAgICAgIGxldCBrID0gcS5zcGxpdChcIi5cIik7XG4gICAgICAgIGZvciAoOyBrLmxlbmd0aCAmJiBPKG0pOyApIHtcbiAgICAgICAgICBsZXQgeCA9IGsuc2hpZnQoKTtcbiAgICAgICAgICBpZiAoeCA9PT0gdm9pZCAwIHx8IHggPT09IFwiX19wcm90b19fXCIpXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgaWYgKHggPT09IFwidGhpc1wiKSB7XG4gICAgICAgICAgICBsZXQgVjtcbiAgICAgICAgICAgIHJldHVybiB1KG0pICYmIChWID0gbVtcIkB0aGlzXCJdKSwgViA/PyBtO1xuICAgICAgICAgIH1cbiAgICAgICAgICBsZXQgTiA9IG1beF07XG4gICAgICAgICAgaWYgKCFPKE4pIHx8IHR5cGVvZiBOID09IFwiZnVuY3Rpb25cIiB8fCB0eXBlb2YgTi5ub2RlVHlwZSA9PSBcIm51bWJlclwiIHx8IE4gPT09IGwpXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgbSA9IE47XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG07XG4gICAgICB9LCBnZXRTdHlsZTogZnVuY3Rpb24gcShtLCBrLCB4KSB7XG4gICAgICAgIGxldCBOO1xuICAgICAgICBpZiAoayA9PT0gXCJ3aWR0aFwiKSB7XG4gICAgICAgICAgbGV0IFIgPSBNYXRoLm1pbihtLm9mZnNldFdpZHRoLCBtLnNjcm9sbFdpZHRoKSwgSSA9IG0uZ2V0Qm91bmRpbmdDbGllbnRSZWN0ICYmIG0uZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkud2lkdGg7XG4gICAgICAgICAgcmV0dXJuIEkgPCBSICYmIEkgPj0gUiAtIDEgJiYgKFIgPSBNYXRoLmZsb29yKEkpKSwgTWF0aC5tYXgoMCwgUiAtIChxKG0sIFwicGFkZGluZy1sZWZ0XCIsICEwKSB8fCAwKSAtIChxKG0sIFwicGFkZGluZy1yaWdodFwiLCAhMCkgfHwgMCkpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChrID09PSBcImhlaWdodFwiKVxuICAgICAgICAgIHJldHVybiBNYXRoLm1heCgwLCBNYXRoLm1pbihtLm9mZnNldEhlaWdodCwgbS5zY3JvbGxIZWlnaHQpIC0gKHEobSwgXCJwYWRkaW5nLXRvcFwiLCAhMCkgfHwgMCkgLSAocShtLCBcInBhZGRpbmctYm90dG9tXCIsICEwKSB8fCAwKSk7XG4gICAgICAgIGxldCBWID0gbC5nZXRDb21wdXRlZFN0eWxlKG0sIHZvaWQgMCk7XG4gICAgICAgIHJldHVybiBWICYmIChOID0gVi5nZXRQcm9wZXJ0eVZhbHVlKGspLCBMKHgsIGsgIT09IFwib3BhY2l0eVwiKSAmJiAoTiA9IGQoTikpKSwgTjtcbiAgICAgIH0sIGluQXJyYXk6IGZ1bmN0aW9uKHEsIG0sIGspIHtcbiAgICAgICAgcmV0dXJuIHAoMzIsICExLCB2b2lkIDAsIHsgXCJIaWdoY2hhcnRzLmluQXJyYXlcIjogXCJ1c2UgQXJyYXkuaW5kZXhPZlwiIH0pLCBtLmluZGV4T2YocSwgayk7XG4gICAgICB9LCBpbnNlcnRJdGVtOiBmdW5jdGlvbihxLCBtKSB7XG4gICAgICAgIGxldCBrLCB4ID0gcS5vcHRpb25zLmluZGV4LCBOID0gbS5sZW5ndGg7XG4gICAgICAgIGZvciAoayA9IHEub3B0aW9ucy5pc0ludGVybmFsID8gTiA6IDA7IGsgPCBOICsgMTsgaysrKVxuICAgICAgICAgIGlmICghbVtrXSB8fCBmKHgpICYmIHggPCBMKG1ba10ub3B0aW9ucy5pbmRleCwgbVtrXS5faSkgfHwgbVtrXS5vcHRpb25zLmlzSW50ZXJuYWwpIHtcbiAgICAgICAgICAgIG0uc3BsaWNlKGssIDAsIHEpO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuICAgICAgICByZXR1cm4gaztcbiAgICAgIH0sIGlzQXJyYXk6IE0sIGlzQ2xhc3M6IHosIGlzRE9NRWxlbWVudDogQSwgaXNGdW5jdGlvbjogZnVuY3Rpb24ocSkge1xuICAgICAgICByZXR1cm4gdHlwZW9mIHEgPT0gXCJmdW5jdGlvblwiO1xuICAgICAgfSwgaXNOdW1iZXI6IGYsIGlzT2JqZWN0OiB1LCBpc1N0cmluZzogYiwga2V5czogZnVuY3Rpb24ocSkge1xuICAgICAgICByZXR1cm4gcCgzMiwgITEsIHZvaWQgMCwgeyBcIkhpZ2hjaGFydHMua2V5c1wiOiBcInVzZSBPYmplY3Qua2V5c1wiIH0pLCBPYmplY3Qua2V5cyhxKTtcbiAgICAgIH0sIG1lcmdlOiBmdW5jdGlvbigpIHtcbiAgICAgICAgbGV0IHEsIG0gPSBhcmd1bWVudHMsIGsgPSB7fSwgeCA9IGZ1bmN0aW9uKFYsIFIpIHtcbiAgICAgICAgICByZXR1cm4gdHlwZW9mIFYgIT0gXCJvYmplY3RcIiAmJiAoViA9IHt9KSwgVChSLCBmdW5jdGlvbihJLCBqKSB7XG4gICAgICAgICAgICBqICE9PSBcIl9fcHJvdG9fX1wiICYmIGogIT09IFwiY29uc3RydWN0b3JcIiAmJiAoIXUoSSwgITApIHx8IHooSSkgfHwgQShJKSA/IFZbal0gPSBSW2pdIDogVltqXSA9IHgoVltqXSB8fCB7fSwgSSkpO1xuICAgICAgICAgIH0pLCBWO1xuICAgICAgICB9O1xuICAgICAgICBtWzBdID09PSAhMCAmJiAoayA9IG1bMV0sIG0gPSBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChtLCAyKSk7XG4gICAgICAgIGxldCBOID0gbS5sZW5ndGg7XG4gICAgICAgIGZvciAocSA9IDA7IHEgPCBOOyBxKyspXG4gICAgICAgICAgayA9IHgoaywgbVtxXSk7XG4gICAgICAgIHJldHVybiBrO1xuICAgICAgfSwgbm9ybWFsaXplVGlja0ludGVydmFsOiBmdW5jdGlvbihxLCBtLCBrLCB4LCBOKSB7XG4gICAgICAgIGxldCBWLCBSID0gcTtcbiAgICAgICAgayA9IEwoaywgQihxKSk7XG4gICAgICAgIGxldCBJID0gcSAvIGs7XG4gICAgICAgIGZvciAoIW0gJiYgKG0gPSBOID8gWzEsIDEuMiwgMS41LCAyLCAyLjUsIDMsIDQsIDUsIDYsIDgsIDEwXSA6IFsxLCAyLCAyLjUsIDUsIDEwXSwgeCA9PT0gITEgJiYgKGsgPT09IDEgPyBtID0gbS5maWx0ZXIoZnVuY3Rpb24oaikge1xuICAgICAgICAgIHJldHVybiBqICUgMSA9PSAwO1xuICAgICAgICB9KSA6IGsgPD0gMC4xICYmIChtID0gWzEgLyBrXSkpKSwgViA9IDA7IFYgPCBtLmxlbmd0aCAmJiAoUiA9IG1bVl0sICghTiB8fCAhKFIgKiBrID49IHEpKSAmJiAoTiB8fCAhKEkgPD0gKG1bVl0gKyAobVtWICsgMV0gfHwgbVtWXSkpIC8gMikpKTsgVisrKVxuICAgICAgICAgIDtcbiAgICAgICAgcmV0dXJuIFgoUiAqIGssIC1NYXRoLnJvdW5kKE1hdGgubG9nKDFlLTMpIC8gTWF0aC5MTjEwKSk7XG4gICAgICB9LCBvYmplY3RFYWNoOiBULCBvZmZzZXQ6IGZ1bmN0aW9uKHEpIHtcbiAgICAgICAgbGV0IG0gPSBzLmRvY3VtZW50RWxlbWVudCwgayA9IHEucGFyZW50RWxlbWVudCB8fCBxLnBhcmVudE5vZGUgPyBxLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpIDogeyB0b3A6IDAsIGxlZnQ6IDAsIHdpZHRoOiAwLCBoZWlnaHQ6IDAgfTtcbiAgICAgICAgcmV0dXJuIHsgdG9wOiBrLnRvcCArIChsLnBhZ2VZT2Zmc2V0IHx8IG0uc2Nyb2xsVG9wKSAtIChtLmNsaWVudFRvcCB8fCAwKSwgbGVmdDogay5sZWZ0ICsgKGwucGFnZVhPZmZzZXQgfHwgbS5zY3JvbGxMZWZ0KSAtIChtLmNsaWVudExlZnQgfHwgMCksIHdpZHRoOiBrLndpZHRoLCBoZWlnaHQ6IGsuaGVpZ2h0IH07XG4gICAgICB9LCBwYWQ6IGZ1bmN0aW9uKHEsIG0sIGspIHtcbiAgICAgICAgcmV0dXJuIEFycmF5KChtIHx8IDIpICsgMSAtIFN0cmluZyhxKS5yZXBsYWNlKFwiLVwiLCBcIlwiKS5sZW5ndGgpLmpvaW4oayB8fCBcIjBcIikgKyBxO1xuICAgICAgfSwgcGljazogTCwgcEludDogZCwgcHVzaFVuaXF1ZTogZnVuY3Rpb24ocSwgbSkge1xuICAgICAgICByZXR1cm4gMCA+IHEuaW5kZXhPZihtKSAmJiAhIXEucHVzaChtKTtcbiAgICAgIH0sIHJlbGF0aXZlTGVuZ3RoOiBmdW5jdGlvbihxLCBtLCBrKSB7XG4gICAgICAgIHJldHVybiAvJSQvLnRlc3QocSkgPyBtICogcGFyc2VGbG9hdChxKSAvIDEwMCArIChrIHx8IDApIDogcGFyc2VGbG9hdChxKTtcbiAgICAgIH0sIHJlbW92ZUV2ZW50OiB3LCByZXBsYWNlTmVzdGVkOiBmdW5jdGlvbihxLCAuLi5tKSB7XG4gICAgICAgIGxldCBrLCB4O1xuICAgICAgICBkb1xuICAgICAgICAgIGZvciAoeCBvZiAoayA9IHEsIG0pKVxuICAgICAgICAgICAgcSA9IHEucmVwbGFjZSh4WzBdLCB4WzFdKTtcbiAgICAgICAgd2hpbGUgKHEgIT09IGspO1xuICAgICAgICByZXR1cm4gcTtcbiAgICAgIH0sIHNwbGF0OiBnLCBzdGFibGVTb3J0OiBmdW5jdGlvbihxLCBtKSB7XG4gICAgICAgIGxldCBrLCB4LCBOID0gcS5sZW5ndGg7XG4gICAgICAgIGZvciAoeCA9IDA7IHggPCBOOyB4KyspXG4gICAgICAgICAgcVt4XS5zYWZlSSA9IHg7XG4gICAgICAgIGZvciAocS5zb3J0KGZ1bmN0aW9uKFYsIFIpIHtcbiAgICAgICAgICByZXR1cm4gKGsgPSBtKFYsIFIpKSA9PT0gMCA/IFYuc2FmZUkgLSBSLnNhZmVJIDogaztcbiAgICAgICAgfSksIHggPSAwOyB4IDwgTjsgeCsrKVxuICAgICAgICAgIGRlbGV0ZSBxW3hdLnNhZmVJO1xuICAgICAgfSwgc3luY1RpbWVvdXQ6IGZ1bmN0aW9uKHEsIG0sIGspIHtcbiAgICAgICAgcmV0dXJuIG0gPiAwID8gc2V0VGltZW91dChxLCBtLCBrKSA6IChxLmNhbGwoMCwgayksIC0xKTtcbiAgICAgIH0sIHRpbWVVbml0czogeyBtaWxsaXNlY29uZDogMSwgc2Vjb25kOiAxZTMsIG1pbnV0ZTogNmU0LCBob3VyOiAzNmU1LCBkYXk6IDg2NGU1LCB3ZWVrOiA2MDQ4ZTUsIG1vbnRoOiAyNDE5MmU1LCB5ZWFyOiAzMTQ0OTZlNSB9LCB1bmlxdWVLZXk6IEMsIHVzZVNlcmlhbElkczogZnVuY3Rpb24ocSkge1xuICAgICAgICByZXR1cm4gaSA9IEwocSwgaSk7XG4gICAgICB9LCB3cmFwOiBmdW5jdGlvbihxLCBtLCBrKSB7XG4gICAgICAgIGxldCB4ID0gcVttXTtcbiAgICAgICAgcVttXSA9IGZ1bmN0aW9uKCkge1xuICAgICAgICAgIGxldCBOID0gYXJndW1lbnRzLCBWID0gdGhpcztcbiAgICAgICAgICByZXR1cm4gay5hcHBseSh0aGlzLCBbZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICByZXR1cm4geC5hcHBseShWLCBhcmd1bWVudHMubGVuZ3RoID8gYXJndW1lbnRzIDogTik7XG4gICAgICAgICAgfV0uY29uY2F0KFtdLnNsaWNlLmNhbGwoYXJndW1lbnRzKSkpO1xuICAgICAgICB9O1xuICAgICAgfSB9O1xuICAgIH0pLCBuKG8sIFwiQ29yZS9DaGFydC9DaGFydERlZmF1bHRzLmpzXCIsIFtdLCBmdW5jdGlvbigpIHtcbiAgICAgIHJldHVybiB7IGFsaWduVGhyZXNob2xkczogITEsIHBhbm5pbmc6IHsgZW5hYmxlZDogITEsIHR5cGU6IFwieFwiIH0sIHN0eWxlZE1vZGU6ICExLCBib3JkZXJSYWRpdXM6IDAsIGNvbG9yQ291bnQ6IDEwLCBhbGxvd011dGF0aW5nRGF0YTogITAsIGlnbm9yZUhpZGRlblNlcmllczogITAsIHNwYWNpbmc6IFsxMCwgMTAsIDE1LCAxMF0sIHJlc2V0Wm9vbUJ1dHRvbjogeyB0aGVtZToge30sIHBvc2l0aW9uOiB7fSB9LCByZWZsb3c6ICEwLCB0eXBlOiBcImxpbmVcIiwgem9vbWluZzogeyBzaW5nbGVUb3VjaDogITEsIHJlc2V0QnV0dG9uOiB7IHRoZW1lOiB7IHpJbmRleDogNiB9LCBwb3NpdGlvbjogeyBhbGlnbjogXCJyaWdodFwiLCB4OiAtMTAsIHk6IDEwIH0gfSB9LCB3aWR0aDogbnVsbCwgaGVpZ2h0OiBudWxsLCBib3JkZXJDb2xvcjogXCIjMzM0ZWZmXCIsIGJhY2tncm91bmRDb2xvcjogXCIjZmZmZmZmXCIsIHBsb3RCb3JkZXJDb2xvcjogXCIjY2NjY2NjXCIgfTtcbiAgICB9KSwgbihvLCBcIkNvcmUvQ29sb3IvUGFsZXR0ZXMuanNcIiwgW10sIGZ1bmN0aW9uKCkge1xuICAgICAgcmV0dXJuIHsgY29sb3JzOiBbXCIjMmNhZmZlXCIsIFwiIzU0NGZjNVwiLCBcIiMwMGUyNzJcIiwgXCIjZmU2YTM1XCIsIFwiIzZiOGFiY1wiLCBcIiNkNTY4ZmJcIiwgXCIjMmVlMGNhXCIsIFwiI2ZhNGI0MlwiLCBcIiNmZWI1NmFcIiwgXCIjOTFlOGUxXCJdIH07XG4gICAgfSksIG4obywgXCJDb3JlL1RpbWUuanNcIiwgW29bXCJDb3JlL0dsb2JhbHMuanNcIl0sIG9bXCJDb3JlL1V0aWxpdGllcy5qc1wiXV0sIGZ1bmN0aW9uKHIsIGkpIHtcbiAgICAgIGxldCB7IHdpbjogYSB9ID0gciwgeyBkZWZpbmVkOiBzLCBlcnJvcjogbCwgZXh0ZW5kOiBwLCBpc051bWJlcjogZCwgaXNPYmplY3Q6IGIsIG1lcmdlOiBNLCBvYmplY3RFYWNoOiB1LCBwYWQ6IEEsIHBpY2s6IHosIHNwbGF0OiBmLCB0aW1lVW5pdHM6IE8gfSA9IGksIGggPSByLmlzU2FmYXJpICYmIGEuSW50bCAmJiBhLkludGwuRGF0ZVRpbWVGb3JtYXQucHJvdG90eXBlLmZvcm1hdFJhbmdlLCBnID0gci5pc1NhZmFyaSAmJiBhLkludGwgJiYgIWEuSW50bC5EYXRlVGltZUZvcm1hdC5wcm90b3R5cGUuZm9ybWF0UmFuZ2U7XG4gICAgICBjbGFzcyB2IHtcbiAgICAgICAgY29uc3RydWN0b3IoeSkge1xuICAgICAgICAgIHRoaXMub3B0aW9ucyA9IHt9LCB0aGlzLnVzZVVUQyA9ICExLCB0aGlzLnZhcmlhYmxlVGltZXpvbmUgPSAhMSwgdGhpcy5EYXRlID0gYS5EYXRlLCB0aGlzLmdldFRpbWV6b25lT2Zmc2V0ID0gdGhpcy50aW1lem9uZU9mZnNldEZ1bmN0aW9uKCksIHRoaXMudXBkYXRlKHkpO1xuICAgICAgICB9XG4gICAgICAgIGdldCh5LCBCKSB7XG4gICAgICAgICAgaWYgKHRoaXMudmFyaWFibGVUaW1lem9uZSB8fCB0aGlzLnRpbWV6b25lT2Zmc2V0KSB7XG4gICAgICAgICAgICBsZXQgWCA9IEIuZ2V0VGltZSgpLCBGID0gWCAtIHRoaXMuZ2V0VGltZXpvbmVPZmZzZXQoQik7XG4gICAgICAgICAgICBCLnNldFRpbWUoRik7XG4gICAgICAgICAgICBsZXQgVCA9IEJbXCJnZXRVVENcIiArIHldKCk7XG4gICAgICAgICAgICByZXR1cm4gQi5zZXRUaW1lKFgpLCBUO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gdGhpcy51c2VVVEMgPyBCW1wiZ2V0VVRDXCIgKyB5XSgpIDogQltcImdldFwiICsgeV0oKTtcbiAgICAgICAgfVxuICAgICAgICBzZXQoeSwgQiwgWCkge1xuICAgICAgICAgIGlmICh0aGlzLnZhcmlhYmxlVGltZXpvbmUgfHwgdGhpcy50aW1lem9uZU9mZnNldCkge1xuICAgICAgICAgICAgaWYgKHkgPT09IFwiTWlsbGlzZWNvbmRzXCIgfHwgeSA9PT0gXCJTZWNvbmRzXCIgfHwgeSA9PT0gXCJNaW51dGVzXCIgJiYgdGhpcy5nZXRUaW1lem9uZU9mZnNldChCKSAlIDM2ZTUgPT0gMClcbiAgICAgICAgICAgICAgcmV0dXJuIEJbXCJzZXRVVENcIiArIHldKFgpO1xuICAgICAgICAgICAgbGV0IEYgPSB0aGlzLmdldFRpbWV6b25lT2Zmc2V0KEIpLCBUID0gQi5nZXRUaW1lKCkgLSBGO1xuICAgICAgICAgICAgQi5zZXRUaW1lKFQpLCBCW1wic2V0VVRDXCIgKyB5XShYKTtcbiAgICAgICAgICAgIGxldCB3ID0gdGhpcy5nZXRUaW1lem9uZU9mZnNldChCKTtcbiAgICAgICAgICAgIHJldHVybiBUID0gQi5nZXRUaW1lKCkgKyB3LCBCLnNldFRpbWUoVCk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiB0aGlzLnVzZVVUQyB8fCBoICYmIHkgPT09IFwiRnVsbFllYXJcIiA/IEJbXCJzZXRVVENcIiArIHldKFgpIDogQltcInNldFwiICsgeV0oWCk7XG4gICAgICAgIH1cbiAgICAgICAgdXBkYXRlKHkgPSB7fSkge1xuICAgICAgICAgIGxldCBCID0geih5LnVzZVVUQywgITApO1xuICAgICAgICAgIHRoaXMub3B0aW9ucyA9IHkgPSBNKCEwLCB0aGlzLm9wdGlvbnMsIHkpLCB0aGlzLkRhdGUgPSB5LkRhdGUgfHwgYS5EYXRlIHx8IERhdGUsIHRoaXMudXNlVVRDID0gQiwgdGhpcy50aW1lem9uZU9mZnNldCA9IEIgJiYgeS50aW1lem9uZU9mZnNldCB8fCB2b2lkIDAsIHRoaXMuZ2V0VGltZXpvbmVPZmZzZXQgPSB0aGlzLnRpbWV6b25lT2Zmc2V0RnVuY3Rpb24oKSwgdGhpcy52YXJpYWJsZVRpbWV6b25lID0gQiAmJiAhISh5LmdldFRpbWV6b25lT2Zmc2V0IHx8IHkudGltZXpvbmUpO1xuICAgICAgICB9XG4gICAgICAgIG1ha2VUaW1lKHksIEIsIFgsIEYsIFQsIHcpIHtcbiAgICAgICAgICBsZXQgSCwgQywgcTtcbiAgICAgICAgICByZXR1cm4gdGhpcy51c2VVVEMgPyAoSCA9IHRoaXMuRGF0ZS5VVEMuYXBwbHkoMCwgYXJndW1lbnRzKSwgQyA9IHRoaXMuZ2V0VGltZXpvbmVPZmZzZXQoSCksIEggKz0gQywgQyAhPT0gKHEgPSB0aGlzLmdldFRpbWV6b25lT2Zmc2V0KEgpKSA/IEggKz0gcSAtIEMgOiBDIC0gMzZlNSAhPT0gdGhpcy5nZXRUaW1lem9uZU9mZnNldChIIC0gMzZlNSkgfHwgZyB8fCAoSCAtPSAzNmU1KSkgOiBIID0gbmV3IHRoaXMuRGF0ZSh5LCBCLCB6KFgsIDEpLCB6KEYsIDApLCB6KFQsIDApLCB6KHcsIDApKS5nZXRUaW1lKCksIEg7XG4gICAgICAgIH1cbiAgICAgICAgdGltZXpvbmVPZmZzZXRGdW5jdGlvbigpIHtcbiAgICAgICAgICBsZXQgeSA9IHRoaXMsIEIgPSB0aGlzLm9wdGlvbnMsIFggPSBCLmdldFRpbWV6b25lT2Zmc2V0O1xuICAgICAgICAgIHJldHVybiB0aGlzLnVzZVVUQyA/IEIudGltZXpvbmUgPyAoRikgPT4ge1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgbGV0IFQgPSBgc2hvcnRPZmZzZXQsJHtCLnRpbWV6b25lIHx8IFwiXCJ9YCwgW3csIEgsIEMsIHEsIG0gPSAwXSA9ICh2LmZvcm1hdENhY2hlW1RdID0gdi5mb3JtYXRDYWNoZVtUXSB8fCBJbnRsLkRhdGVUaW1lRm9ybWF0KFwiZW5cIiwgeyB0aW1lWm9uZTogQi50aW1lem9uZSwgdGltZVpvbmVOYW1lOiBcInNob3J0T2Zmc2V0XCIgfSkpLmZvcm1hdChGKS5zcGxpdCgvKEdNVHw6KS8pLm1hcChOdW1iZXIpLCBrID0gLSgzNmU1ICogKEMgKyBtIC8gNjApKTtcbiAgICAgICAgICAgICAgaWYgKGQoaykpXG4gICAgICAgICAgICAgICAgcmV0dXJuIGs7XG4gICAgICAgICAgICB9IGNhdGNoIHtcbiAgICAgICAgICAgICAgbCgzNCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gMDtcbiAgICAgICAgICB9IDogdGhpcy51c2VVVEMgJiYgWCA/IChGKSA9PiA2ZTQgKiBYKEYudmFsdWVPZigpKSA6ICgpID0+IDZlNCAqICh5LnRpbWV6b25lT2Zmc2V0IHx8IDApIDogKEYpID0+IDZlNCAqIG5ldyBEYXRlKEYudG9TdHJpbmcoKSkuZ2V0VGltZXpvbmVPZmZzZXQoKTtcbiAgICAgICAgfVxuICAgICAgICBkYXRlRm9ybWF0KHksIEIsIFgpIHtcbiAgICAgICAgICBpZiAoIXMoQikgfHwgaXNOYU4oQikpXG4gICAgICAgICAgICByZXR1cm4gci5kZWZhdWx0T3B0aW9ucy5sYW5nICYmIHIuZGVmYXVsdE9wdGlvbnMubGFuZy5pbnZhbGlkRGF0ZSB8fCBcIlwiO1xuICAgICAgICAgIHkgPSB6KHksIFwiJVktJW0tJWQgJUg6JU06JVNcIik7XG4gICAgICAgICAgbGV0IEYgPSB0aGlzLCBUID0gbmV3IHRoaXMuRGF0ZShCKSwgdyA9IHRoaXMuZ2V0KFwiSG91cnNcIiwgVCksIEggPSB0aGlzLmdldChcIkRheVwiLCBUKSwgQyA9IHRoaXMuZ2V0KFwiRGF0ZVwiLCBUKSwgcSA9IHRoaXMuZ2V0KFwiTW9udGhcIiwgVCksIG0gPSB0aGlzLmdldChcIkZ1bGxZZWFyXCIsIFQpLCBrID0gci5kZWZhdWx0T3B0aW9ucy5sYW5nLCB4ID0gayAmJiBrLndlZWtkYXlzLCBOID0gayAmJiBrLnNob3J0V2Vla2RheXM7XG4gICAgICAgICAgcmV0dXJuIHUocCh7IGE6IE4gPyBOW0hdIDogeFtIXS5zdWJzdHIoMCwgMyksIEE6IHhbSF0sIGQ6IEEoQyksIGU6IEEoQywgMiwgXCIgXCIpLCB3OiBILCBiOiBrLnNob3J0TW9udGhzW3FdLCBCOiBrLm1vbnRoc1txXSwgbTogQShxICsgMSksIG86IHEgKyAxLCB5OiBtLnRvU3RyaW5nKCkuc3Vic3RyKDIsIDIpLCBZOiBtLCBIOiBBKHcpLCBrOiB3LCBJOiBBKHcgJSAxMiB8fCAxMiksIGw6IHcgJSAxMiB8fCAxMiwgTTogQSh0aGlzLmdldChcIk1pbnV0ZXNcIiwgVCkpLCBwOiB3IDwgMTIgPyBcIkFNXCIgOiBcIlBNXCIsIFA6IHcgPCAxMiA/IFwiYW1cIiA6IFwicG1cIiwgUzogQSh0aGlzLmdldChcIlNlY29uZHNcIiwgVCkpLCBMOiBBKE1hdGguZmxvb3IoQiAlIDFlMyksIDMpIH0sIHIuZGF0ZUZvcm1hdHMpLCBmdW5jdGlvbihWLCBSKSB7XG4gICAgICAgICAgICBmb3IgKDsgeS5pbmRleE9mKFwiJVwiICsgUikgIT09IC0xOyApXG4gICAgICAgICAgICAgIHkgPSB5LnJlcGxhY2UoXCIlXCIgKyBSLCB0eXBlb2YgViA9PSBcImZ1bmN0aW9uXCIgPyBWLmNhbGwoRiwgQikgOiBWKTtcbiAgICAgICAgICB9KSwgWCA/IHkuc3Vic3RyKDAsIDEpLnRvVXBwZXJDYXNlKCkgKyB5LnN1YnN0cigxKSA6IHk7XG4gICAgICAgIH1cbiAgICAgICAgcmVzb2x2ZURUTEZvcm1hdCh5KSB7XG4gICAgICAgICAgcmV0dXJuIGIoeSwgITApID8geSA6IHsgbWFpbjogKHkgPSBmKHkpKVswXSwgZnJvbTogeVsxXSwgdG86IHlbMl0gfTtcbiAgICAgICAgfVxuICAgICAgICBnZXRUaW1lVGlja3MoeSwgQiwgWCwgRikge1xuICAgICAgICAgIGxldCBULCB3LCBILCBDLCBxID0gdGhpcywgbSA9IHEuRGF0ZSwgayA9IFtdLCB4ID0ge30sIE4gPSBuZXcgbShCKSwgViA9IHkudW5pdFJhbmdlLCBSID0geS5jb3VudCB8fCAxO1xuICAgICAgICAgIGlmIChGID0geihGLCAxKSwgcyhCKSkge1xuICAgICAgICAgICAgcS5zZXQoXCJNaWxsaXNlY29uZHNcIiwgTiwgViA+PSBPLnNlY29uZCA/IDAgOiBSICogTWF0aC5mbG9vcihxLmdldChcIk1pbGxpc2Vjb25kc1wiLCBOKSAvIFIpKSwgViA+PSBPLnNlY29uZCAmJiBxLnNldChcIlNlY29uZHNcIiwgTiwgViA+PSBPLm1pbnV0ZSA/IDAgOiBSICogTWF0aC5mbG9vcihxLmdldChcIlNlY29uZHNcIiwgTikgLyBSKSksIFYgPj0gTy5taW51dGUgJiYgcS5zZXQoXCJNaW51dGVzXCIsIE4sIFYgPj0gTy5ob3VyID8gMCA6IFIgKiBNYXRoLmZsb29yKHEuZ2V0KFwiTWludXRlc1wiLCBOKSAvIFIpKSwgViA+PSBPLmhvdXIgJiYgcS5zZXQoXCJIb3Vyc1wiLCBOLCBWID49IE8uZGF5ID8gMCA6IFIgKiBNYXRoLmZsb29yKHEuZ2V0KFwiSG91cnNcIiwgTikgLyBSKSksIFYgPj0gTy5kYXkgJiYgcS5zZXQoXCJEYXRlXCIsIE4sIFYgPj0gTy5tb250aCA/IDEgOiBNYXRoLm1heCgxLCBSICogTWF0aC5mbG9vcihxLmdldChcIkRhdGVcIiwgTikgLyBSKSkpLCBWID49IE8ubW9udGggJiYgKHEuc2V0KFwiTW9udGhcIiwgTiwgViA+PSBPLnllYXIgPyAwIDogUiAqIE1hdGguZmxvb3IocS5nZXQoXCJNb250aFwiLCBOKSAvIFIpKSwgdyA9IHEuZ2V0KFwiRnVsbFllYXJcIiwgTikpLCBWID49IE8ueWVhciAmJiAodyAtPSB3ICUgUiwgcS5zZXQoXCJGdWxsWWVhclwiLCBOLCB3KSksIFYgPT09IE8ud2VlayAmJiAoQyA9IHEuZ2V0KFwiRGF5XCIsIE4pLCBxLnNldChcIkRhdGVcIiwgTiwgcS5nZXQoXCJEYXRlXCIsIE4pIC0gQyArIEYgKyAoQyA8IEYgPyAtNyA6IDApKSksIHcgPSBxLmdldChcIkZ1bGxZZWFyXCIsIE4pO1xuICAgICAgICAgICAgbGV0IEkgPSBxLmdldChcIk1vbnRoXCIsIE4pLCBqID0gcS5nZXQoXCJEYXRlXCIsIE4pLCBVID0gcS5nZXQoXCJIb3Vyc1wiLCBOKTtcbiAgICAgICAgICAgIEIgPSBOLmdldFRpbWUoKSwgKHEudmFyaWFibGVUaW1lem9uZSB8fCAhcS51c2VVVEMpICYmIHMoWCkgJiYgKEggPSBYIC0gQiA+IDQgKiBPLm1vbnRoIHx8IHEuZ2V0VGltZXpvbmVPZmZzZXQoQikgIT09IHEuZ2V0VGltZXpvbmVPZmZzZXQoWCkpO1xuICAgICAgICAgICAgbGV0IF8gPSBOLmdldFRpbWUoKTtcbiAgICAgICAgICAgIGZvciAoVCA9IDE7IF8gPCBYOyApXG4gICAgICAgICAgICAgIGsucHVzaChfKSwgViA9PT0gTy55ZWFyID8gXyA9IHEubWFrZVRpbWUodyArIFQgKiBSLCAwKSA6IFYgPT09IE8ubW9udGggPyBfID0gcS5tYWtlVGltZSh3LCBJICsgVCAqIFIpIDogSCAmJiAoViA9PT0gTy5kYXkgfHwgViA9PT0gTy53ZWVrKSA/IF8gPSBxLm1ha2VUaW1lKHcsIEksIGogKyBUICogUiAqIChWID09PSBPLmRheSA/IDEgOiA3KSkgOiBIICYmIFYgPT09IE8uaG91ciAmJiBSID4gMSA/IF8gPSBxLm1ha2VUaW1lKHcsIEksIGosIFUgKyBUICogUikgOiBfICs9IFYgKiBSLCBUKys7XG4gICAgICAgICAgICBrLnB1c2goXyksIFYgPD0gTy5ob3VyICYmIGsubGVuZ3RoIDwgMWU0ICYmIGsuZm9yRWFjaChmdW5jdGlvbihyMSkge1xuICAgICAgICAgICAgICByMSAlIDE4ZTUgPT0gMCAmJiBxLmRhdGVGb3JtYXQoXCIlSCVNJVMlTFwiLCByMSkgPT09IFwiMDAwMDAwMDAwXCIgJiYgKHhbcjFdID0gXCJkYXlcIik7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIGsuaW5mbyA9IHAoeSwgeyBoaWdoZXJSYW5rczogeCwgdG90YWxSYW5nZTogViAqIFIgfSksIGs7XG4gICAgICAgIH1cbiAgICAgICAgZ2V0RGF0ZUZvcm1hdCh5LCBCLCBYLCBGKSB7XG4gICAgICAgICAgbGV0IFQgPSB0aGlzLmRhdGVGb3JtYXQoXCIlbS0lZCAlSDolTTolUy4lTFwiLCBCKSwgdyA9IFwiMDEtMDEgMDA6MDA6MDAuMDAwXCIsIEggPSB7IG1pbGxpc2Vjb25kOiAxNSwgc2Vjb25kOiAxMiwgbWludXRlOiA5LCBob3VyOiA2LCBkYXk6IDMgfSwgQyA9IFwibWlsbGlzZWNvbmRcIiwgcSA9IEM7XG4gICAgICAgICAgZm9yIChDIGluIE8pIHtcbiAgICAgICAgICAgIGlmICh5ID09PSBPLndlZWsgJiYgK3RoaXMuZGF0ZUZvcm1hdChcIiV3XCIsIEIpID09PSBYICYmIFQuc3Vic3RyKDYpID09PSB3LnN1YnN0cig2KSkge1xuICAgICAgICAgICAgICBDID0gXCJ3ZWVrXCI7XG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKE9bQ10gPiB5KSB7XG4gICAgICAgICAgICAgIEMgPSBxO1xuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChIW0NdICYmIFQuc3Vic3RyKEhbQ10pICE9PSB3LnN1YnN0cihIW0NdKSlcbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBDICE9PSBcIndlZWtcIiAmJiAocSA9IEMpO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gdGhpcy5yZXNvbHZlRFRMRm9ybWF0KEZbQ10pLm1haW47XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiB2LmZvcm1hdENhY2hlID0ge30sIHY7XG4gICAgfSksIG4obywgXCJDb3JlL0RlZmF1bHRzLmpzXCIsIFtvW1wiQ29yZS9DaGFydC9DaGFydERlZmF1bHRzLmpzXCJdLCBvW1wiQ29yZS9HbG9iYWxzLmpzXCJdLCBvW1wiQ29yZS9Db2xvci9QYWxldHRlcy5qc1wiXSwgb1tcIkNvcmUvVGltZS5qc1wiXSwgb1tcIkNvcmUvVXRpbGl0aWVzLmpzXCJdXSwgZnVuY3Rpb24ociwgaSwgYSwgcywgbCkge1xuICAgICAgbGV0IHsgaXNUb3VjaERldmljZTogcCB9ID0gaSwgeyBmaXJlRXZlbnQ6IGQsIG1lcmdlOiBiIH0gPSBsLCBNID0geyBjb2xvcnM6IGEuY29sb3JzLCBzeW1ib2xzOiBbXCJjaXJjbGVcIiwgXCJkaWFtb25kXCIsIFwic3F1YXJlXCIsIFwidHJpYW5nbGVcIiwgXCJ0cmlhbmdsZS1kb3duXCJdLCBsYW5nOiB7IGxvYWRpbmc6IFwiTG9hZGluZy4uLlwiLCBtb250aHM6IFtcIkphbnVhcnlcIiwgXCJGZWJydWFyeVwiLCBcIk1hcmNoXCIsIFwiQXByaWxcIiwgXCJNYXlcIiwgXCJKdW5lXCIsIFwiSnVseVwiLCBcIkF1Z3VzdFwiLCBcIlNlcHRlbWJlclwiLCBcIk9jdG9iZXJcIiwgXCJOb3ZlbWJlclwiLCBcIkRlY2VtYmVyXCJdLCBzaG9ydE1vbnRoczogW1wiSmFuXCIsIFwiRmViXCIsIFwiTWFyXCIsIFwiQXByXCIsIFwiTWF5XCIsIFwiSnVuXCIsIFwiSnVsXCIsIFwiQXVnXCIsIFwiU2VwXCIsIFwiT2N0XCIsIFwiTm92XCIsIFwiRGVjXCJdLCB3ZWVrZGF5czogW1wiU3VuZGF5XCIsIFwiTW9uZGF5XCIsIFwiVHVlc2RheVwiLCBcIldlZG5lc2RheVwiLCBcIlRodXJzZGF5XCIsIFwiRnJpZGF5XCIsIFwiU2F0dXJkYXlcIl0sIGRlY2ltYWxQb2ludDogXCIuXCIsIG51bWVyaWNTeW1ib2xzOiBbXCJrXCIsIFwiTVwiLCBcIkdcIiwgXCJUXCIsIFwiUFwiLCBcIkVcIl0sIHJlc2V0Wm9vbTogXCJSZXNldCB6b29tXCIsIHJlc2V0Wm9vbVRpdGxlOiBcIlJlc2V0IHpvb20gbGV2ZWwgMToxXCIsIHRob3VzYW5kc1NlcDogXCIgXCIgfSwgZ2xvYmFsOiB7IGJ1dHRvblRoZW1lOiB7IGZpbGw6IFwiI2Y3ZjdmN1wiLCBwYWRkaW5nOiA4LCByOiAyLCBzdHJva2U6IFwiI2NjY2NjY1wiLCBcInN0cm9rZS13aWR0aFwiOiAxLCBzdHlsZTogeyBjb2xvcjogXCIjMzMzMzMzXCIsIGN1cnNvcjogXCJwb2ludGVyXCIsIGZvbnRTaXplOiBcIjAuOGVtXCIsIGZvbnRXZWlnaHQ6IFwibm9ybWFsXCIgfSwgc3RhdGVzOiB7IGhvdmVyOiB7IGZpbGw6IFwiI2U2ZTZlNlwiIH0sIHNlbGVjdDogeyBmaWxsOiBcIiNlNmU5ZmZcIiwgc3R5bGU6IHsgY29sb3I6IFwiIzAwMDAwMFwiLCBmb250V2VpZ2h0OiBcImJvbGRcIiB9IH0sIGRpc2FibGVkOiB7IHN0eWxlOiB7IGNvbG9yOiBcIiNjY2NjY2NcIiB9IH0gfSB9IH0sIHRpbWU6IHsgRGF0ZTogdm9pZCAwLCBnZXRUaW1lem9uZU9mZnNldDogdm9pZCAwLCB0aW1lem9uZTogdm9pZCAwLCB0aW1lem9uZU9mZnNldDogMCwgdXNlVVRDOiAhMCB9LCBjaGFydDogciwgdGl0bGU6IHsgc3R5bGU6IHsgY29sb3I6IFwiIzMzMzMzM1wiLCBmb250V2VpZ2h0OiBcImJvbGRcIiB9LCB0ZXh0OiBcIkNoYXJ0IHRpdGxlXCIsIGFsaWduOiBcImNlbnRlclwiLCBtYXJnaW46IDE1LCB3aWR0aEFkanVzdDogLTQ0IH0sIHN1YnRpdGxlOiB7IHN0eWxlOiB7IGNvbG9yOiBcIiM2NjY2NjZcIiwgZm9udFNpemU6IFwiMC44ZW1cIiB9LCB0ZXh0OiBcIlwiLCBhbGlnbjogXCJjZW50ZXJcIiwgd2lkdGhBZGp1c3Q6IC00NCB9LCBjYXB0aW9uOiB7IG1hcmdpbjogMTUsIHN0eWxlOiB7IGNvbG9yOiBcIiM2NjY2NjZcIiwgZm9udFNpemU6IFwiMC44ZW1cIiB9LCB0ZXh0OiBcIlwiLCBhbGlnbjogXCJsZWZ0XCIsIHZlcnRpY2FsQWxpZ246IFwiYm90dG9tXCIgfSwgcGxvdE9wdGlvbnM6IHt9LCBsZWdlbmQ6IHsgZW5hYmxlZDogITAsIGFsaWduOiBcImNlbnRlclwiLCBhbGlnbkNvbHVtbnM6ICEwLCBjbGFzc05hbWU6IFwiaGlnaGNoYXJ0cy1uby10b29sdGlwXCIsIGV2ZW50czoge30sIGxheW91dDogXCJob3Jpem9udGFsXCIsIGl0ZW1NYXJnaW5Cb3R0b206IDIsIGl0ZW1NYXJnaW5Ub3A6IDIsIGxhYmVsRm9ybWF0dGVyOiBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMubmFtZTtcbiAgICAgIH0sIGJvcmRlckNvbG9yOiBcIiM5OTk5OTlcIiwgYm9yZGVyUmFkaXVzOiAwLCBuYXZpZ2F0aW9uOiB7IHN0eWxlOiB7IGZvbnRTaXplOiBcIjAuOGVtXCIgfSwgYWN0aXZlQ29sb3I6IFwiIzAwMjJmZlwiLCBpbmFjdGl2ZUNvbG9yOiBcIiNjY2NjY2NcIiB9LCBpdGVtU3R5bGU6IHsgY29sb3I6IFwiIzMzMzMzM1wiLCBjdXJzb3I6IFwicG9pbnRlclwiLCBmb250U2l6ZTogXCIwLjhlbVwiLCB0ZXh0RGVjb3JhdGlvbjogXCJub25lXCIsIHRleHRPdmVyZmxvdzogXCJlbGxpcHNpc1wiIH0sIGl0ZW1Ib3ZlclN0eWxlOiB7IGNvbG9yOiBcIiMwMDAwMDBcIiB9LCBpdGVtSGlkZGVuU3R5bGU6IHsgY29sb3I6IFwiIzY2NjY2NlwiLCB0ZXh0RGVjb3JhdGlvbjogXCJsaW5lLXRocm91Z2hcIiB9LCBzaGFkb3c6ICExLCBpdGVtQ2hlY2tib3hTdHlsZTogeyBwb3NpdGlvbjogXCJhYnNvbHV0ZVwiLCB3aWR0aDogXCIxM3B4XCIsIGhlaWdodDogXCIxM3B4XCIgfSwgc3F1YXJlU3ltYm9sOiAhMCwgc3ltYm9sUGFkZGluZzogNSwgdmVydGljYWxBbGlnbjogXCJib3R0b21cIiwgeDogMCwgeTogMCwgdGl0bGU6IHsgc3R5bGU6IHsgZm9udFNpemU6IFwiMC44ZW1cIiwgZm9udFdlaWdodDogXCJib2xkXCIgfSB9IH0sIGxvYWRpbmc6IHsgbGFiZWxTdHlsZTogeyBmb250V2VpZ2h0OiBcImJvbGRcIiwgcG9zaXRpb246IFwicmVsYXRpdmVcIiwgdG9wOiBcIjQ1JVwiIH0sIHN0eWxlOiB7IHBvc2l0aW9uOiBcImFic29sdXRlXCIsIGJhY2tncm91bmRDb2xvcjogXCIjZmZmZmZmXCIsIG9wYWNpdHk6IDAuNSwgdGV4dEFsaWduOiBcImNlbnRlclwiIH0gfSwgdG9vbHRpcDogeyBlbmFibGVkOiAhMCwgYW5pbWF0aW9uOiB7IGR1cmF0aW9uOiAzMDAsIGVhc2luZzogKEEpID0+IE1hdGguc3FydCgxIC0gTWF0aC5wb3coQSAtIDEsIDIpKSB9LCBib3JkZXJSYWRpdXM6IDMsIGRhdGVUaW1lTGFiZWxGb3JtYXRzOiB7IG1pbGxpc2Vjb25kOiBcIiVBLCAlZSAlYiwgJUg6JU06JVMuJUxcIiwgc2Vjb25kOiBcIiVBLCAlZSAlYiwgJUg6JU06JVNcIiwgbWludXRlOiBcIiVBLCAlZSAlYiwgJUg6JU1cIiwgaG91cjogXCIlQSwgJWUgJWIsICVIOiVNXCIsIGRheTogXCIlQSwgJWUgJWIgJVlcIiwgd2VlazogXCJXZWVrIGZyb20gJUEsICVlICViICVZXCIsIG1vbnRoOiBcIiVCICVZXCIsIHllYXI6IFwiJVlcIiB9LCBmb290ZXJGb3JtYXQ6IFwiXCIsIGhlYWRlclNoYXBlOiBcImNhbGxvdXRcIiwgaGlkZURlbGF5OiA1MDAsIHBhZGRpbmc6IDgsIHNoYXBlOiBcImNhbGxvdXRcIiwgc2hhcmVkOiAhMSwgc25hcDogcCA/IDI1IDogMTAsIGhlYWRlckZvcm1hdDogJzxzcGFuIHN0eWxlPVwiZm9udC1zaXplOiAwLjhlbVwiPntwb2ludC5rZXl9PC9zcGFuPjxici8+JywgcG9pbnRGb3JtYXQ6ICc8c3BhbiBzdHlsZT1cImNvbG9yOntwb2ludC5jb2xvcn1cIj7il488L3NwYW4+IHtzZXJpZXMubmFtZX06IDxiPntwb2ludC55fTwvYj48YnIvPicsIGJhY2tncm91bmRDb2xvcjogXCIjZmZmZmZmXCIsIGJvcmRlcldpZHRoOiB2b2lkIDAsIHNoYWRvdzogITAsIHN0aWNrT25Db250YWN0OiAhMSwgc3R5bGU6IHsgY29sb3I6IFwiIzMzMzMzM1wiLCBjdXJzb3I6IFwiZGVmYXVsdFwiLCBmb250U2l6ZTogXCIwLjhlbVwiIH0sIHVzZUhUTUw6ICExIH0sIGNyZWRpdHM6IHsgZW5hYmxlZDogITAsIGhyZWY6IFwiaHR0cHM6Ly93d3cuaGlnaGNoYXJ0cy5jb20/Y3JlZGl0c1wiLCBwb3NpdGlvbjogeyBhbGlnbjogXCJyaWdodFwiLCB4OiAtMTAsIHZlcnRpY2FsQWxpZ246IFwiYm90dG9tXCIsIHk6IC01IH0sIHN0eWxlOiB7IGN1cnNvcjogXCJwb2ludGVyXCIsIGNvbG9yOiBcIiM5OTk5OTlcIiwgZm9udFNpemU6IFwiMC42ZW1cIiB9LCB0ZXh0OiBcIkhpZ2hjaGFydHMuY29tXCIgfSB9O1xuICAgICAgTS5jaGFydC5zdHlsZWRNb2RlID0gITE7XG4gICAgICBsZXQgdSA9IG5ldyBzKE0udGltZSk7XG4gICAgICByZXR1cm4geyBkZWZhdWx0T3B0aW9uczogTSwgZGVmYXVsdFRpbWU6IHUsIGdldE9wdGlvbnM6IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gTTtcbiAgICAgIH0sIHNldE9wdGlvbnM6IGZ1bmN0aW9uKEEpIHtcbiAgICAgICAgcmV0dXJuIGQoaSwgXCJzZXRPcHRpb25zXCIsIHsgb3B0aW9uczogQSB9KSwgYighMCwgTSwgQSksIChBLnRpbWUgfHwgQS5nbG9iYWwpICYmIChpLnRpbWUgPyBpLnRpbWUudXBkYXRlKGIoTS5nbG9iYWwsIE0udGltZSwgQS5nbG9iYWwsIEEudGltZSkpIDogaS50aW1lID0gdSksIE07XG4gICAgICB9IH07XG4gICAgfSksIG4obywgXCJDb3JlL0NvbG9yL0NvbG9yLmpzXCIsIFtvW1wiQ29yZS9HbG9iYWxzLmpzXCJdLCBvW1wiQ29yZS9VdGlsaXRpZXMuanNcIl1dLCBmdW5jdGlvbihyLCBpKSB7XG4gICAgICBsZXQgeyBpc051bWJlcjogYSwgbWVyZ2U6IHMsIHBJbnQ6IGwgfSA9IGk7XG4gICAgICBjbGFzcyBwIHtcbiAgICAgICAgc3RhdGljIHBhcnNlKGIpIHtcbiAgICAgICAgICByZXR1cm4gYiA/IG5ldyBwKGIpIDogcC5Ob25lO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0cnVjdG9yKGIpIHtcbiAgICAgICAgICBsZXQgTSwgdSwgQSwgejtcbiAgICAgICAgICB0aGlzLnJnYmEgPSBbTmFOLCBOYU4sIE5hTiwgTmFOXSwgdGhpcy5pbnB1dCA9IGI7XG4gICAgICAgICAgbGV0IGYgPSByLkNvbG9yO1xuICAgICAgICAgIGlmIChmICYmIGYgIT09IHApXG4gICAgICAgICAgICByZXR1cm4gbmV3IGYoYik7XG4gICAgICAgICAgaWYgKHR5cGVvZiBiID09IFwib2JqZWN0XCIgJiYgYi5zdG9wcyAhPT0gdm9pZCAwKVxuICAgICAgICAgICAgdGhpcy5zdG9wcyA9IGIuc3RvcHMubWFwKChPKSA9PiBuZXcgcChPWzFdKSk7XG4gICAgICAgICAgZWxzZSBpZiAodHlwZW9mIGIgPT0gXCJzdHJpbmdcIikge1xuICAgICAgICAgICAgaWYgKHRoaXMuaW5wdXQgPSBiID0gcC5uYW1lc1tiLnRvTG93ZXJDYXNlKCldIHx8IGIsIGIuY2hhckF0KDApID09PSBcIiNcIikge1xuICAgICAgICAgICAgICBsZXQgTyA9IGIubGVuZ3RoLCBoID0gcGFyc2VJbnQoYi5zdWJzdHIoMSksIDE2KTtcbiAgICAgICAgICAgICAgTyA9PT0gNyA/IHUgPSBbKDE2NzExNjgwICYgaCkgPj4gMTYsICg2NTI4MCAmIGgpID4+IDgsIDI1NSAmIGgsIDFdIDogTyA9PT0gNCAmJiAodSA9IFsoMzg0MCAmIGgpID4+IDQgfCAoMzg0MCAmIGgpID4+IDgsICgyNDAgJiBoKSA+PiA0IHwgMjQwICYgaCwgKDE1ICYgaCkgPDwgNCB8IDE1ICYgaCwgMV0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKCF1KVxuICAgICAgICAgICAgICBmb3IgKEEgPSBwLnBhcnNlcnMubGVuZ3RoOyBBLS0gJiYgIXU7IClcbiAgICAgICAgICAgICAgICAoTSA9ICh6ID0gcC5wYXJzZXJzW0FdKS5yZWdleC5leGVjKGIpKSAmJiAodSA9IHoucGFyc2UoTSkpO1xuICAgICAgICAgIH1cbiAgICAgICAgICB1ICYmICh0aGlzLnJnYmEgPSB1KTtcbiAgICAgICAgfVxuICAgICAgICBnZXQoYikge1xuICAgICAgICAgIGxldCBNID0gdGhpcy5pbnB1dCwgdSA9IHRoaXMucmdiYTtcbiAgICAgICAgICBpZiAodHlwZW9mIE0gPT0gXCJvYmplY3RcIiAmJiB0aGlzLnN0b3BzICE9PSB2b2lkIDApIHtcbiAgICAgICAgICAgIGxldCBBID0gcyhNKTtcbiAgICAgICAgICAgIHJldHVybiBBLnN0b3BzID0gW10uc2xpY2UuY2FsbChBLnN0b3BzKSwgdGhpcy5zdG9wcy5mb3JFYWNoKCh6LCBmKSA9PiB7XG4gICAgICAgICAgICAgIEEuc3RvcHNbZl0gPSBbQS5zdG9wc1tmXVswXSwgei5nZXQoYildO1xuICAgICAgICAgICAgfSksIEE7XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiB1ICYmIGEodVswXSkgPyBiICE9PSBcInJnYlwiICYmIChiIHx8IHVbM10gIT09IDEpID8gYiA9PT0gXCJhXCIgPyBgJHt1WzNdfWAgOiBcInJnYmEoXCIgKyB1LmpvaW4oXCIsXCIpICsgXCIpXCIgOiBcInJnYihcIiArIHVbMF0gKyBcIixcIiArIHVbMV0gKyBcIixcIiArIHVbMl0gKyBcIilcIiA6IE07XG4gICAgICAgIH1cbiAgICAgICAgYnJpZ2h0ZW4oYikge1xuICAgICAgICAgIGxldCBNID0gdGhpcy5yZ2JhO1xuICAgICAgICAgIGlmICh0aGlzLnN0b3BzKVxuICAgICAgICAgICAgdGhpcy5zdG9wcy5mb3JFYWNoKGZ1bmN0aW9uKHUpIHtcbiAgICAgICAgICAgICAgdS5icmlnaHRlbihiKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIGVsc2UgaWYgKGEoYikgJiYgYiAhPT0gMClcbiAgICAgICAgICAgIGZvciAobGV0IHUgPSAwOyB1IDwgMzsgdSsrKVxuICAgICAgICAgICAgICBNW3VdICs9IGwoMjU1ICogYiksIE1bdV0gPCAwICYmIChNW3VdID0gMCksIE1bdV0gPiAyNTUgJiYgKE1bdV0gPSAyNTUpO1xuICAgICAgICAgIHJldHVybiB0aGlzO1xuICAgICAgICB9XG4gICAgICAgIHNldE9wYWNpdHkoYikge1xuICAgICAgICAgIHJldHVybiB0aGlzLnJnYmFbM10gPSBiLCB0aGlzO1xuICAgICAgICB9XG4gICAgICAgIHR3ZWVuVG8oYiwgTSkge1xuICAgICAgICAgIGxldCB1ID0gdGhpcy5yZ2JhLCBBID0gYi5yZ2JhO1xuICAgICAgICAgIGlmICghYSh1WzBdKSB8fCAhYShBWzBdKSlcbiAgICAgICAgICAgIHJldHVybiBiLmlucHV0IHx8IFwibm9uZVwiO1xuICAgICAgICAgIGxldCB6ID0gQVszXSAhPT0gMSB8fCB1WzNdICE9PSAxO1xuICAgICAgICAgIHJldHVybiAoeiA/IFwicmdiYShcIiA6IFwicmdiKFwiKSArIE1hdGgucm91bmQoQVswXSArICh1WzBdIC0gQVswXSkgKiAoMSAtIE0pKSArIFwiLFwiICsgTWF0aC5yb3VuZChBWzFdICsgKHVbMV0gLSBBWzFdKSAqICgxIC0gTSkpICsgXCIsXCIgKyBNYXRoLnJvdW5kKEFbMl0gKyAodVsyXSAtIEFbMl0pICogKDEgLSBNKSkgKyAoeiA/IFwiLFwiICsgKEFbM10gKyAodVszXSAtIEFbM10pICogKDEgLSBNKSkgOiBcIlwiKSArIFwiKVwiO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gcC5uYW1lcyA9IHsgd2hpdGU6IFwiI2ZmZmZmZlwiLCBibGFjazogXCIjMDAwMDAwXCIgfSwgcC5wYXJzZXJzID0gW3sgcmVnZXg6IC9yZ2JhXFwoXFxzKihcXGR7MSwzfSlcXHMqLFxccyooXFxkezEsM30pXFxzKixcXHMqKFxcZHsxLDN9KVxccyosXFxzKihcXGQ/KD86XFwuXFxkKyk/KVxccypcXCkvLCBwYXJzZTogZnVuY3Rpb24oZCkge1xuICAgICAgICByZXR1cm4gW2woZFsxXSksIGwoZFsyXSksIGwoZFszXSksIHBhcnNlRmxvYXQoZFs0XSwgMTApXTtcbiAgICAgIH0gfSwgeyByZWdleDogL3JnYlxcKFxccyooXFxkezEsM30pXFxzKixcXHMqKFxcZHsxLDN9KVxccyosXFxzKihcXGR7MSwzfSlcXHMqXFwpLywgcGFyc2U6IGZ1bmN0aW9uKGQpIHtcbiAgICAgICAgcmV0dXJuIFtsKGRbMV0pLCBsKGRbMl0pLCBsKGRbM10pLCAxXTtcbiAgICAgIH0gfV0sIHAuTm9uZSA9IG5ldyBwKFwiXCIpLCBwO1xuICAgIH0pLCBuKG8sIFwiQ29yZS9BbmltYXRpb24vRnguanNcIiwgW29bXCJDb3JlL0NvbG9yL0NvbG9yLmpzXCJdLCBvW1wiQ29yZS9HbG9iYWxzLmpzXCJdLCBvW1wiQ29yZS9VdGlsaXRpZXMuanNcIl1dLCBmdW5jdGlvbihyLCBpLCBhKSB7XG4gICAgICBsZXQgeyBwYXJzZTogcyB9ID0gciwgeyB3aW46IGwgfSA9IGksIHsgaXNOdW1iZXI6IHAsIG9iamVjdEVhY2g6IGQgfSA9IGE7XG4gICAgICBjbGFzcyBiIHtcbiAgICAgICAgY29uc3RydWN0b3IodSwgQSwgeikge1xuICAgICAgICAgIHRoaXMucG9zID0gTmFOLCB0aGlzLm9wdGlvbnMgPSBBLCB0aGlzLmVsZW0gPSB1LCB0aGlzLnByb3AgPSB6O1xuICAgICAgICB9XG4gICAgICAgIGRTZXR0ZXIoKSB7XG4gICAgICAgICAgbGV0IHUgPSB0aGlzLnBhdGhzLCBBID0gdSAmJiB1WzBdLCB6ID0gdSAmJiB1WzFdLCBmID0gdGhpcy5ub3cgfHwgMCwgTyA9IFtdO1xuICAgICAgICAgIGlmIChmICE9PSAxICYmIEEgJiYgeilcbiAgICAgICAgICAgIGlmIChBLmxlbmd0aCA9PT0gei5sZW5ndGggJiYgZiA8IDEpXG4gICAgICAgICAgICAgIGZvciAobGV0IGggPSAwOyBoIDwgei5sZW5ndGg7IGgrKykge1xuICAgICAgICAgICAgICAgIGxldCBnID0gQVtoXSwgdiA9IHpbaF0sIEwgPSBbXTtcbiAgICAgICAgICAgICAgICBmb3IgKGxldCB5ID0gMDsgeSA8IHYubGVuZ3RoOyB5KyspIHtcbiAgICAgICAgICAgICAgICAgIGxldCBCID0gZ1t5XSwgWCA9IHZbeV07XG4gICAgICAgICAgICAgICAgICBwKEIpICYmIHAoWCkgJiYgISh2WzBdID09PSBcIkFcIiAmJiAoeSA9PT0gNCB8fCB5ID09PSA1KSkgPyBMW3ldID0gQiArIGYgKiAoWCAtIEIpIDogTFt5XSA9IFg7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIE8ucHVzaChMKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICBPID0gejtcbiAgICAgICAgICBlbHNlXG4gICAgICAgICAgICBPID0gdGhpcy50b0QgfHwgW107XG4gICAgICAgICAgdGhpcy5lbGVtLmF0dHIoXCJkXCIsIE8sIHZvaWQgMCwgITApO1xuICAgICAgICB9XG4gICAgICAgIHVwZGF0ZSgpIHtcbiAgICAgICAgICBsZXQgdSA9IHRoaXMuZWxlbSwgQSA9IHRoaXMucHJvcCwgeiA9IHRoaXMubm93LCBmID0gdGhpcy5vcHRpb25zLnN0ZXA7XG4gICAgICAgICAgdGhpc1tBICsgXCJTZXR0ZXJcIl0gPyB0aGlzW0EgKyBcIlNldHRlclwiXSgpIDogdS5hdHRyID8gdS5lbGVtZW50ICYmIHUuYXR0cihBLCB6LCBudWxsLCAhMCkgOiB1LnN0eWxlW0FdID0geiArIHRoaXMudW5pdCwgZiAmJiBmLmNhbGwodSwgeiwgdGhpcyk7XG4gICAgICAgIH1cbiAgICAgICAgcnVuKHUsIEEsIHopIHtcbiAgICAgICAgICBsZXQgZiA9IHRoaXMsIE8gPSBmLm9wdGlvbnMsIGggPSBmdW5jdGlvbihMKSB7XG4gICAgICAgICAgICByZXR1cm4gIWguc3RvcHBlZCAmJiBmLnN0ZXAoTCk7XG4gICAgICAgICAgfSwgZyA9IGwucmVxdWVzdEFuaW1hdGlvbkZyYW1lIHx8IGZ1bmN0aW9uKEwpIHtcbiAgICAgICAgICAgIHNldFRpbWVvdXQoTCwgMTMpO1xuICAgICAgICAgIH0sIHYgPSBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgIGZvciAobGV0IEwgPSAwOyBMIDwgYi50aW1lcnMubGVuZ3RoOyBMKyspXG4gICAgICAgICAgICAgIGIudGltZXJzW0xdKCkgfHwgYi50aW1lcnMuc3BsaWNlKEwtLSwgMSk7XG4gICAgICAgICAgICBiLnRpbWVycy5sZW5ndGggJiYgZyh2KTtcbiAgICAgICAgICB9O1xuICAgICAgICAgIHUgIT09IEEgfHwgdGhpcy5lbGVtW1wiZm9yY2VBbmltYXRlOlwiICsgdGhpcy5wcm9wXSA/ICh0aGlzLnN0YXJ0VGltZSA9ICsvKiBAX19QVVJFX18gKi8gbmV3IERhdGUoKSwgdGhpcy5zdGFydCA9IHUsIHRoaXMuZW5kID0gQSwgdGhpcy51bml0ID0geiwgdGhpcy5ub3cgPSB0aGlzLnN0YXJ0LCB0aGlzLnBvcyA9IDAsIGguZWxlbSA9IHRoaXMuZWxlbSwgaC5wcm9wID0gdGhpcy5wcm9wLCBoKCkgJiYgYi50aW1lcnMucHVzaChoKSA9PT0gMSAmJiBnKHYpKSA6IChkZWxldGUgTy5jdXJBbmltW3RoaXMucHJvcF0sIE8uY29tcGxldGUgJiYgT2JqZWN0LmtleXMoTy5jdXJBbmltKS5sZW5ndGggPT09IDAgJiYgTy5jb21wbGV0ZS5jYWxsKHRoaXMuZWxlbSkpO1xuICAgICAgICB9XG4gICAgICAgIHN0ZXAodSkge1xuICAgICAgICAgIGxldCBBLCB6LCBmID0gKy8qIEBfX1BVUkVfXyAqLyBuZXcgRGF0ZSgpLCBPID0gdGhpcy5vcHRpb25zLCBoID0gdGhpcy5lbGVtLCBnID0gTy5jb21wbGV0ZSwgdiA9IE8uZHVyYXRpb24sIEwgPSBPLmN1ckFuaW07XG4gICAgICAgICAgcmV0dXJuIGguYXR0ciAmJiAhaC5lbGVtZW50ID8gQSA9ICExIDogdSB8fCBmID49IHYgKyB0aGlzLnN0YXJ0VGltZSA/ICh0aGlzLm5vdyA9IHRoaXMuZW5kLCB0aGlzLnBvcyA9IDEsIHRoaXMudXBkYXRlKCksIExbdGhpcy5wcm9wXSA9ICEwLCB6ID0gITAsIGQoTCwgZnVuY3Rpb24oeSkge1xuICAgICAgICAgICAgeSAhPT0gITAgJiYgKHogPSAhMSk7XG4gICAgICAgICAgfSksIHogJiYgZyAmJiBnLmNhbGwoaCksIEEgPSAhMSkgOiAodGhpcy5wb3MgPSBPLmVhc2luZygoZiAtIHRoaXMuc3RhcnRUaW1lKSAvIHYpLCB0aGlzLm5vdyA9IHRoaXMuc3RhcnQgKyAodGhpcy5lbmQgLSB0aGlzLnN0YXJ0KSAqIHRoaXMucG9zLCB0aGlzLnVwZGF0ZSgpLCBBID0gITApLCBBO1xuICAgICAgICB9XG4gICAgICAgIGluaXRQYXRoKHUsIEEsIHopIHtcbiAgICAgICAgICBsZXQgZiA9IHUuc3RhcnRYLCBPID0gdS5lbmRYLCBoID0gei5zbGljZSgpLCBnID0gdS5pc0FyZWEsIHYgPSBnID8gMiA6IDEsIEwgPSBBICYmIHoubGVuZ3RoID4gQS5sZW5ndGggJiYgei5oYXNTdGFja2VkQ2xpZmZzLCB5LCBCLCBYLCBGLCBUID0gQSAmJiBBLnNsaWNlKCk7XG4gICAgICAgICAgaWYgKCFUIHx8IEwpXG4gICAgICAgICAgICByZXR1cm4gW2gsIGhdO1xuICAgICAgICAgIGZ1bmN0aW9uIHcoQywgcSkge1xuICAgICAgICAgICAgZm9yICg7IEMubGVuZ3RoIDwgQjsgKSB7XG4gICAgICAgICAgICAgIGxldCBtID0gQ1swXSwgayA9IHFbQiAtIEMubGVuZ3RoXTtcbiAgICAgICAgICAgICAgaWYgKGsgJiYgbVswXSA9PT0gXCJNXCIgJiYgKGtbMF0gPT09IFwiQ1wiID8gQ1swXSA9IFtcIkNcIiwgbVsxXSwgbVsyXSwgbVsxXSwgbVsyXSwgbVsxXSwgbVsyXV0gOiBDWzBdID0gW1wiTFwiLCBtWzFdLCBtWzJdXSksIEMudW5zaGlmdChtKSwgZykge1xuICAgICAgICAgICAgICAgIGxldCB4ID0gQy5wb3AoKTtcbiAgICAgICAgICAgICAgICBDLnB1c2goQ1tDLmxlbmd0aCAtIDFdLCB4KTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICBmdW5jdGlvbiBIKEMpIHtcbiAgICAgICAgICAgIGZvciAoOyBDLmxlbmd0aCA8IEI7ICkge1xuICAgICAgICAgICAgICBsZXQgcSA9IENbTWF0aC5mbG9vcihDLmxlbmd0aCAvIHYpIC0gMV0uc2xpY2UoKTtcbiAgICAgICAgICAgICAgaWYgKHFbMF0gPT09IFwiQ1wiICYmIChxWzFdID0gcVs1XSwgcVsyXSA9IHFbNl0pLCBnKSB7XG4gICAgICAgICAgICAgICAgbGV0IG0gPSBDW01hdGguZmxvb3IoQy5sZW5ndGggLyB2KV0uc2xpY2UoKTtcbiAgICAgICAgICAgICAgICBDLnNwbGljZShDLmxlbmd0aCAvIDIsIDAsIHEsIG0pO1xuICAgICAgICAgICAgICB9IGVsc2VcbiAgICAgICAgICAgICAgICBDLnB1c2gocSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmIChmICYmIE8gJiYgTy5sZW5ndGgpIHtcbiAgICAgICAgICAgIGZvciAoWCA9IDA7IFggPCBmLmxlbmd0aDsgWCsrKSB7XG4gICAgICAgICAgICAgIGlmIChmW1hdID09PSBPWzBdKSB7XG4gICAgICAgICAgICAgICAgeSA9IFg7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgaWYgKGZbMF0gPT09IE9bTy5sZW5ndGggLSBmLmxlbmd0aCArIFhdKSB7XG4gICAgICAgICAgICAgICAgeSA9IFgsIEYgPSAhMDtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBpZiAoZltmLmxlbmd0aCAtIDFdID09PSBPW08ubGVuZ3RoIC0gZi5sZW5ndGggKyBYXSkge1xuICAgICAgICAgICAgICAgIHkgPSBmLmxlbmd0aCAtIFg7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHkgPT09IHZvaWQgMCAmJiAoVCA9IFtdKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIFQubGVuZ3RoICYmIHAoeSkgJiYgKEIgPSBoLmxlbmd0aCArIHkgKiB2LCBGID8gKHcoVCwgaCksIEgoaCkpIDogKHcoaCwgVCksIEgoVCkpKSwgW1QsIGhdO1xuICAgICAgICB9XG4gICAgICAgIGZpbGxTZXR0ZXIoKSB7XG4gICAgICAgICAgYi5wcm90b3R5cGUuc3Ryb2tlU2V0dGVyLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gICAgICAgIH1cbiAgICAgICAgc3Ryb2tlU2V0dGVyKCkge1xuICAgICAgICAgIHRoaXMuZWxlbS5hdHRyKHRoaXMucHJvcCwgcyh0aGlzLnN0YXJ0KS50d2VlblRvKHModGhpcy5lbmQpLCB0aGlzLnBvcyksIHZvaWQgMCwgITApO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gYi50aW1lcnMgPSBbXSwgYjtcbiAgICB9KSwgbihvLCBcIkNvcmUvQW5pbWF0aW9uL0FuaW1hdGlvblV0aWxpdGllcy5qc1wiLCBbb1tcIkNvcmUvQW5pbWF0aW9uL0Z4LmpzXCJdLCBvW1wiQ29yZS9VdGlsaXRpZXMuanNcIl1dLCBmdW5jdGlvbihyLCBpKSB7XG4gICAgICBsZXQgeyBkZWZpbmVkOiBhLCBnZXRTdHlsZTogcywgaXNBcnJheTogbCwgaXNOdW1iZXI6IHAsIGlzT2JqZWN0OiBkLCBtZXJnZTogYiwgb2JqZWN0RWFjaDogTSwgcGljazogdSB9ID0gaTtcbiAgICAgIGZ1bmN0aW9uIEEoZikge1xuICAgICAgICByZXR1cm4gZChmKSA/IGIoeyBkdXJhdGlvbjogNTAwLCBkZWZlcjogMCB9LCBmKSA6IHsgZHVyYXRpb246IGYgPyA1MDAgOiAwLCBkZWZlcjogMCB9O1xuICAgICAgfVxuICAgICAgZnVuY3Rpb24geihmLCBPKSB7XG4gICAgICAgIGxldCBoID0gci50aW1lcnMubGVuZ3RoO1xuICAgICAgICBmb3IgKDsgaC0tOyApXG4gICAgICAgICAgci50aW1lcnNbaF0uZWxlbSAhPT0gZiB8fCBPICYmIE8gIT09IHIudGltZXJzW2hdLnByb3AgfHwgKHIudGltZXJzW2hdLnN0b3BwZWQgPSAhMCk7XG4gICAgICB9XG4gICAgICByZXR1cm4geyBhbmltYXRlOiBmdW5jdGlvbihmLCBPLCBoKSB7XG4gICAgICAgIGxldCBnLCB2ID0gXCJcIiwgTCwgeSwgQjtcbiAgICAgICAgZChoKSB8fCAoQiA9IGFyZ3VtZW50cywgaCA9IHsgZHVyYXRpb246IEJbMl0sIGVhc2luZzogQlszXSwgY29tcGxldGU6IEJbNF0gfSksIHAoaC5kdXJhdGlvbikgfHwgKGguZHVyYXRpb24gPSA0MDApLCBoLmVhc2luZyA9IHR5cGVvZiBoLmVhc2luZyA9PSBcImZ1bmN0aW9uXCIgPyBoLmVhc2luZyA6IE1hdGhbaC5lYXNpbmddIHx8IE1hdGguZWFzZUluT3V0U2luZSwgaC5jdXJBbmltID0gYihPKSwgTShPLCBmdW5jdGlvbihYLCBGKSB7XG4gICAgICAgICAgeihmLCBGKSwgeSA9IG5ldyByKGYsIGgsIEYpLCBMID0gdm9pZCAwLCBGID09PSBcImRcIiAmJiBsKE8uZCkgPyAoeS5wYXRocyA9IHkuaW5pdFBhdGgoZiwgZi5wYXRoQXJyYXksIE8uZCksIHkudG9EID0gTy5kLCBnID0gMCwgTCA9IDEpIDogZi5hdHRyID8gZyA9IGYuYXR0cihGKSA6IChnID0gcGFyc2VGbG9hdChzKGYsIEYpKSB8fCAwLCBGICE9PSBcIm9wYWNpdHlcIiAmJiAodiA9IFwicHhcIikpLCBMIHx8IChMID0gWCksIHR5cGVvZiBMID09IFwic3RyaW5nXCIgJiYgTC5tYXRjaChcInB4XCIpICYmIChMID0gTC5yZXBsYWNlKC9weC9nLCBcIlwiKSksIHkucnVuKGcsIEwsIHYpO1xuICAgICAgICB9KTtcbiAgICAgIH0sIGFuaW1PYmplY3Q6IEEsIGdldERlZmVycmVkQW5pbWF0aW9uOiBmdW5jdGlvbihmLCBPLCBoKSB7XG4gICAgICAgIGxldCBnID0gQShPKSwgdiA9IGggPyBbaF0gOiBmLnNlcmllcywgTCA9IDAsIHkgPSAwO1xuICAgICAgICByZXR1cm4gdi5mb3JFYWNoKChCKSA9PiB7XG4gICAgICAgICAgbGV0IFggPSBBKEIub3B0aW9ucy5hbmltYXRpb24pO1xuICAgICAgICAgIEwgPSBkKE8pICYmIGEoTy5kZWZlcikgPyBnLmRlZmVyIDogTWF0aC5tYXgoTCwgWC5kdXJhdGlvbiArIFguZGVmZXIpLCB5ID0gTWF0aC5taW4oZy5kdXJhdGlvbiwgWC5kdXJhdGlvbik7XG4gICAgICAgIH0pLCBmLnJlbmRlcmVyLmZvckV4cG9ydCAmJiAoTCA9IDApLCB7IGRlZmVyOiBNYXRoLm1heCgwLCBMIC0geSksIGR1cmF0aW9uOiBNYXRoLm1pbihMLCB5KSB9O1xuICAgICAgfSwgc2V0QW5pbWF0aW9uOiBmdW5jdGlvbihmLCBPKSB7XG4gICAgICAgIE8ucmVuZGVyZXIuZ2xvYmFsQW5pbWF0aW9uID0gdShmLCBPLm9wdGlvbnMuY2hhcnQuYW5pbWF0aW9uLCAhMCk7XG4gICAgICB9LCBzdG9wOiB6IH07XG4gICAgfSksIG4obywgXCJDb3JlL1JlbmRlcmVyL0hUTUwvQVNULmpzXCIsIFtvW1wiQ29yZS9HbG9iYWxzLmpzXCJdLCBvW1wiQ29yZS9VdGlsaXRpZXMuanNcIl1dLCBmdW5jdGlvbihyLCBpKSB7XG4gICAgICBsZXQgeyBTVkdfTlM6IGEsIHdpbjogcyB9ID0gciwgeyBhdHRyOiBsLCBjcmVhdGVFbGVtZW50OiBwLCBjc3M6IGQsIGVycm9yOiBiLCBpc0Z1bmN0aW9uOiBNLCBpc1N0cmluZzogdSwgb2JqZWN0RWFjaDogQSwgc3BsYXQ6IHogfSA9IGksIHsgdHJ1c3RlZFR5cGVzOiBmIH0gPSBzLCBPID0gZiAmJiBNKGYuY3JlYXRlUG9saWN5KSAmJiBmLmNyZWF0ZVBvbGljeShcImhpZ2hjaGFydHNcIiwgeyBjcmVhdGVIVE1MOiAoTCkgPT4gTCB9KSwgaCA9IE8gPyBPLmNyZWF0ZUhUTUwoXCJcIikgOiBcIlwiLCBnID0gZnVuY3Rpb24oKSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgcmV0dXJuICEhbmV3IERPTVBhcnNlcigpLnBhcnNlRnJvbVN0cmluZyhoLCBcInRleHQvaHRtbFwiKTtcbiAgICAgICAgfSBjYXRjaCB7XG4gICAgICAgICAgcmV0dXJuICExO1xuICAgICAgICB9XG4gICAgICB9KCk7XG4gICAgICBjbGFzcyB2IHtcbiAgICAgICAgc3RhdGljIGZpbHRlclVzZXJBdHRyaWJ1dGVzKHkpIHtcbiAgICAgICAgICByZXR1cm4gQSh5LCAoQiwgWCkgPT4ge1xuICAgICAgICAgICAgbGV0IEYgPSAhMDtcbiAgICAgICAgICAgIHYuYWxsb3dlZEF0dHJpYnV0ZXMuaW5kZXhPZihYKSA9PT0gLTEgJiYgKEYgPSAhMSksIFtcImJhY2tncm91bmRcIiwgXCJkeW5zcmNcIiwgXCJocmVmXCIsIFwibG93c3JjXCIsIFwic3JjXCJdLmluZGV4T2YoWCkgIT09IC0xICYmIChGID0gdShCKSAmJiB2LmFsbG93ZWRSZWZlcmVuY2VzLnNvbWUoKFQpID0+IEIuaW5kZXhPZihUKSA9PT0gMCkpLCBGIHx8IChiKDMzLCAhMSwgdm9pZCAwLCB7IFwiSW52YWxpZCBhdHRyaWJ1dGUgaW4gY29uZmlnXCI6IGAke1h9YCB9KSwgZGVsZXRlIHlbWF0pLCB1KEIpICYmIHlbWF0gJiYgKHlbWF0gPSBCLnJlcGxhY2UoLzwvZywgXCImbHQ7XCIpKTtcbiAgICAgICAgICB9KSwgeTtcbiAgICAgICAgfVxuICAgICAgICBzdGF0aWMgcGFyc2VTdHlsZSh5KSB7XG4gICAgICAgICAgcmV0dXJuIHkuc3BsaXQoXCI7XCIpLnJlZHVjZSgoQiwgWCkgPT4ge1xuICAgICAgICAgICAgbGV0IEYgPSBYLnNwbGl0KFwiOlwiKS5tYXAoKHcpID0+IHcudHJpbSgpKSwgVCA9IEYuc2hpZnQoKTtcbiAgICAgICAgICAgIHJldHVybiBUICYmIEYubGVuZ3RoICYmIChCW1QucmVwbGFjZSgvLShbYS16XSkvZywgKHcpID0+IHdbMV0udG9VcHBlckNhc2UoKSldID0gRi5qb2luKFwiOlwiKSksIEI7XG4gICAgICAgICAgfSwge30pO1xuICAgICAgICB9XG4gICAgICAgIHN0YXRpYyBzZXRFbGVtZW50SFRNTCh5LCBCKSB7XG4gICAgICAgICAgeS5pbm5lckhUTUwgPSB2LmVtcHR5SFRNTCwgQiAmJiBuZXcgdihCKS5hZGRUb0RPTSh5KTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdHJ1Y3Rvcih5KSB7XG4gICAgICAgICAgdGhpcy5ub2RlcyA9IHR5cGVvZiB5ID09IFwic3RyaW5nXCIgPyB0aGlzLnBhcnNlTWFya3VwKHkpIDogeTtcbiAgICAgICAgfVxuICAgICAgICBhZGRUb0RPTSh5KSB7XG4gICAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIEIoWCwgRikge1xuICAgICAgICAgICAgbGV0IFQ7XG4gICAgICAgICAgICByZXR1cm4geihYKS5mb3JFYWNoKGZ1bmN0aW9uKHcpIHtcbiAgICAgICAgICAgICAgbGV0IEgsIEMgPSB3LnRhZ05hbWUsIHEgPSB3LnRleHRDb250ZW50ID8gci5kb2MuY3JlYXRlVGV4dE5vZGUody50ZXh0Q29udGVudCkgOiB2b2lkIDAsIG0gPSB2LmJ5cGFzc0hUTUxGaWx0ZXJpbmc7XG4gICAgICAgICAgICAgIGlmIChDKVxuICAgICAgICAgICAgICAgIGlmIChDID09PSBcIiN0ZXh0XCIpXG4gICAgICAgICAgICAgICAgICBIID0gcTtcbiAgICAgICAgICAgICAgICBlbHNlIGlmICh2LmFsbG93ZWRUYWdzLmluZGV4T2YoQykgIT09IC0xIHx8IG0pIHtcbiAgICAgICAgICAgICAgICAgIGxldCBrID0gQyA9PT0gXCJzdmdcIiA/IGEgOiBGLm5hbWVzcGFjZVVSSSB8fCBhLCB4ID0gci5kb2MuY3JlYXRlRWxlbWVudE5TKGssIEMpLCBOID0gdy5hdHRyaWJ1dGVzIHx8IHt9O1xuICAgICAgICAgICAgICAgICAgQSh3LCBmdW5jdGlvbihWLCBSKSB7XG4gICAgICAgICAgICAgICAgICAgIFIgIT09IFwidGFnTmFtZVwiICYmIFIgIT09IFwiYXR0cmlidXRlc1wiICYmIFIgIT09IFwiY2hpbGRyZW5cIiAmJiBSICE9PSBcInN0eWxlXCIgJiYgUiAhPT0gXCJ0ZXh0Q29udGVudFwiICYmIChOW1JdID0gVik7XG4gICAgICAgICAgICAgICAgICB9KSwgbCh4LCBtID8gTiA6IHYuZmlsdGVyVXNlckF0dHJpYnV0ZXMoTikpLCB3LnN0eWxlICYmIGQoeCwgdy5zdHlsZSksIHEgJiYgeC5hcHBlbmRDaGlsZChxKSwgQih3LmNoaWxkcmVuIHx8IFtdLCB4KSwgSCA9IHg7XG4gICAgICAgICAgICAgICAgfSBlbHNlXG4gICAgICAgICAgICAgICAgICBiKDMzLCAhMSwgdm9pZCAwLCB7IFwiSW52YWxpZCB0YWdOYW1lIGluIGNvbmZpZ1wiOiBDIH0pO1xuICAgICAgICAgICAgICBIICYmIEYuYXBwZW5kQ2hpbGQoSCksIFQgPSBIO1xuICAgICAgICAgICAgfSksIFQ7XG4gICAgICAgICAgfSh0aGlzLm5vZGVzLCB5KTtcbiAgICAgICAgfVxuICAgICAgICBwYXJzZU1hcmt1cCh5KSB7XG4gICAgICAgICAgbGV0IEIsIFggPSBbXTtcbiAgICAgICAgICBpZiAoeSA9IHkudHJpbSgpLnJlcGxhY2UoLyBzdHlsZT0oW1wiJ10pL2csIFwiIGRhdGEtc3R5bGU9JDFcIiksIGcpXG4gICAgICAgICAgICBCID0gbmV3IERPTVBhcnNlcigpLnBhcnNlRnJvbVN0cmluZyhPID8gTy5jcmVhdGVIVE1MKHkpIDogeSwgXCJ0ZXh0L2h0bWxcIik7XG4gICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBsZXQgVCA9IHAoXCJkaXZcIik7XG4gICAgICAgICAgICBULmlubmVySFRNTCA9IHksIEIgPSB7IGJvZHk6IFQgfTtcbiAgICAgICAgICB9XG4gICAgICAgICAgbGV0IEYgPSAoVCwgdykgPT4ge1xuICAgICAgICAgICAgbGV0IEggPSBULm5vZGVOYW1lLnRvTG93ZXJDYXNlKCksIEMgPSB7IHRhZ05hbWU6IEggfTtcbiAgICAgICAgICAgIEggPT09IFwiI3RleHRcIiAmJiAoQy50ZXh0Q29udGVudCA9IFQudGV4dENvbnRlbnQgfHwgXCJcIik7XG4gICAgICAgICAgICBsZXQgcSA9IFQuYXR0cmlidXRlcztcbiAgICAgICAgICAgIGlmIChxKSB7XG4gICAgICAgICAgICAgIGxldCBtID0ge307XG4gICAgICAgICAgICAgIFtdLmZvckVhY2guY2FsbChxLCAoaykgPT4ge1xuICAgICAgICAgICAgICAgIGsubmFtZSA9PT0gXCJkYXRhLXN0eWxlXCIgPyBDLnN0eWxlID0gdi5wYXJzZVN0eWxlKGsudmFsdWUpIDogbVtrLm5hbWVdID0gay52YWx1ZTtcbiAgICAgICAgICAgICAgfSksIEMuYXR0cmlidXRlcyA9IG07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoVC5jaGlsZE5vZGVzLmxlbmd0aCkge1xuICAgICAgICAgICAgICBsZXQgbSA9IFtdO1xuICAgICAgICAgICAgICBbXS5mb3JFYWNoLmNhbGwoVC5jaGlsZE5vZGVzLCAoaykgPT4ge1xuICAgICAgICAgICAgICAgIEYoaywgbSk7XG4gICAgICAgICAgICAgIH0pLCBtLmxlbmd0aCAmJiAoQy5jaGlsZHJlbiA9IG0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdy5wdXNoKEMpO1xuICAgICAgICAgIH07XG4gICAgICAgICAgcmV0dXJuIFtdLmZvckVhY2guY2FsbChCLmJvZHkuY2hpbGROb2RlcywgKFQpID0+IEYoVCwgWCkpLCBYO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gdi5hbGxvd2VkQXR0cmlidXRlcyA9IFtcImFsdFwiLCBcImFyaWEtY29udHJvbHNcIiwgXCJhcmlhLWRlc2NyaWJlZGJ5XCIsIFwiYXJpYS1leHBhbmRlZFwiLCBcImFyaWEtaGFzcG9wdXBcIiwgXCJhcmlhLWhpZGRlblwiLCBcImFyaWEtbGFiZWxcIiwgXCJhcmlhLWxhYmVsbGVkYnlcIiwgXCJhcmlhLWxpdmVcIiwgXCJhcmlhLXByZXNzZWRcIiwgXCJhcmlhLXJlYWRvbmx5XCIsIFwiYXJpYS1yb2xlZGVzY3JpcHRpb25cIiwgXCJhcmlhLXNlbGVjdGVkXCIsIFwiY2xhc3NcIiwgXCJjbGlwLXBhdGhcIiwgXCJjb2xvclwiLCBcImNvbHNwYW5cIiwgXCJjeFwiLCBcImN5XCIsIFwiZFwiLCBcImR4XCIsIFwiZHlcIiwgXCJkaXNhYmxlZFwiLCBcImZpbGxcIiwgXCJmaWx0ZXJVbml0c1wiLCBcImZsb29kLWNvbG9yXCIsIFwiZmxvb2Qtb3BhY2l0eVwiLCBcImhlaWdodFwiLCBcImhyZWZcIiwgXCJpZFwiLCBcImluXCIsIFwiaW4yXCIsIFwibWFya2VySGVpZ2h0XCIsIFwibWFya2VyV2lkdGhcIiwgXCJvZmZzZXRcIiwgXCJvcGFjaXR5XCIsIFwib3BlcmF0b3JcIiwgXCJvcmllbnRcIiwgXCJwYWRkaW5nXCIsIFwicGFkZGluZ0xlZnRcIiwgXCJwYWRkaW5nUmlnaHRcIiwgXCJwYXR0ZXJuVW5pdHNcIiwgXCJyXCIsIFwicmFkaXVzXCIsIFwicmVmWFwiLCBcInJlZllcIiwgXCJyb2xlXCIsIFwic2NvcGVcIiwgXCJzbG9wZVwiLCBcInNyY1wiLCBcInN0YXJ0T2Zmc2V0XCIsIFwic3RkRGV2aWF0aW9uXCIsIFwic3Ryb2tlXCIsIFwic3Ryb2tlLWxpbmVjYXBcIiwgXCJzdHJva2Utd2lkdGhcIiwgXCJzdHlsZVwiLCBcInRhYmxlVmFsdWVzXCIsIFwicmVzdWx0XCIsIFwicm93c3BhblwiLCBcInN1bW1hcnlcIiwgXCJ0YXJnZXRcIiwgXCJ0YWJpbmRleFwiLCBcInRleHQtYWxpZ25cIiwgXCJ0ZXh0LWFuY2hvclwiLCBcInRleHRBbmNob3JcIiwgXCJ0ZXh0TGVuZ3RoXCIsIFwidGl0bGVcIiwgXCJ0eXBlXCIsIFwidmFsaWduXCIsIFwid2lkdGhcIiwgXCJ4XCIsIFwieDFcIiwgXCJ4MlwiLCBcInhsaW5rOmhyZWZcIiwgXCJ5XCIsIFwieTFcIiwgXCJ5MlwiLCBcInpJbmRleFwiXSwgdi5hbGxvd2VkUmVmZXJlbmNlcyA9IFtcImh0dHBzOi8vXCIsIFwiaHR0cDovL1wiLCBcIm1haWx0bzpcIiwgXCIvXCIsIFwiLi4vXCIsIFwiLi9cIiwgXCIjXCJdLCB2LmFsbG93ZWRUYWdzID0gW1wiYVwiLCBcImFiYnJcIiwgXCJiXCIsIFwiYnJcIiwgXCJidXR0b25cIiwgXCJjYXB0aW9uXCIsIFwiY2lyY2xlXCIsIFwiY2xpcFBhdGhcIiwgXCJjb2RlXCIsIFwiZGRcIiwgXCJkZWZzXCIsIFwiZGl2XCIsIFwiZGxcIiwgXCJkdFwiLCBcImVtXCIsIFwiZmVDb21wb25lbnRUcmFuc2ZlclwiLCBcImZlQ29tcG9zaXRlXCIsIFwiZmVEcm9wU2hhZG93XCIsIFwiZmVGbG9vZFwiLCBcImZlRnVuY0FcIiwgXCJmZUZ1bmNCXCIsIFwiZmVGdW5jR1wiLCBcImZlRnVuY1JcIiwgXCJmZUdhdXNzaWFuQmx1clwiLCBcImZlTW9ycGhvbG9neVwiLCBcImZlT2Zmc2V0XCIsIFwiZmVNZXJnZVwiLCBcImZlTWVyZ2VOb2RlXCIsIFwiZmlsdGVyXCIsIFwiaDFcIiwgXCJoMlwiLCBcImgzXCIsIFwiaDRcIiwgXCJoNVwiLCBcImg2XCIsIFwiaHJcIiwgXCJpXCIsIFwiaW1nXCIsIFwibGlcIiwgXCJsaW5lYXJHcmFkaWVudFwiLCBcIm1hcmtlclwiLCBcIm9sXCIsIFwicFwiLCBcInBhdGhcIiwgXCJwYXR0ZXJuXCIsIFwicHJlXCIsIFwicmVjdFwiLCBcInNtYWxsXCIsIFwic3BhblwiLCBcInN0b3BcIiwgXCJzdHJvbmdcIiwgXCJzdHlsZVwiLCBcInN1YlwiLCBcInN1cFwiLCBcInN2Z1wiLCBcInRhYmxlXCIsIFwidGV4dFwiLCBcInRleHRQYXRoXCIsIFwidGhlYWRcIiwgXCJ0aXRsZVwiLCBcInRib2R5XCIsIFwidHNwYW5cIiwgXCJ0ZFwiLCBcInRoXCIsIFwidHJcIiwgXCJ1XCIsIFwidWxcIiwgXCIjdGV4dFwiXSwgdi5lbXB0eUhUTUwgPSBoLCB2LmJ5cGFzc0hUTUxGaWx0ZXJpbmcgPSAhMSwgdjtcbiAgICB9KSwgbihvLCBcIkNvcmUvVGVtcGxhdGluZy5qc1wiLCBbb1tcIkNvcmUvRGVmYXVsdHMuanNcIl0sIG9bXCJDb3JlL1V0aWxpdGllcy5qc1wiXV0sIGZ1bmN0aW9uKHIsIGkpIHtcbiAgICAgIGxldCB7IGRlZmF1bHRPcHRpb25zOiBhLCBkZWZhdWx0VGltZTogcyB9ID0gciwgeyBleHRlbmQ6IGwsIGdldE5lc3RlZFByb3BlcnR5OiBwLCBpc0FycmF5OiBkLCBpc051bWJlcjogYiwgaXNPYmplY3Q6IE0sIHBpY2s6IHUsIHBJbnQ6IEEgfSA9IGksIHogPSB7IGFkZDogKGgsIGcpID0+IGggKyBnLCBkaXZpZGU6IChoLCBnKSA9PiBnICE9PSAwID8gaCAvIGcgOiBcIlwiLCBlcTogKGgsIGcpID0+IGggPT0gZywgZWFjaDogZnVuY3Rpb24oaCkge1xuICAgICAgICBsZXQgZyA9IGFyZ3VtZW50c1thcmd1bWVudHMubGVuZ3RoIC0gMV07XG4gICAgICAgIHJldHVybiAhIWQoaCkgJiYgaC5tYXAoKHYsIEwpID0+IGYoZy5ib2R5LCBsKE0odikgPyB2IDogeyBcIkB0aGlzXCI6IHYgfSwgeyBcIkBpbmRleFwiOiBMLCBcIkBmaXJzdFwiOiBMID09PSAwLCBcIkBsYXN0XCI6IEwgPT09IGgubGVuZ3RoIC0gMSB9KSkpLmpvaW4oXCJcIik7XG4gICAgICB9LCBnZTogKGgsIGcpID0+IGggPj0gZywgZ3Q6IChoLCBnKSA9PiBoID4gZywgaWY6IChoKSA9PiAhIWgsIGxlOiAoaCwgZykgPT4gaCA8PSBnLCBsdDogKGgsIGcpID0+IGggPCBnLCBtdWx0aXBseTogKGgsIGcpID0+IGggKiBnLCBuZTogKGgsIGcpID0+IGggIT0gZywgc3VidHJhY3Q6IChoLCBnKSA9PiBoIC0gZywgdW5sZXNzOiAoaCkgPT4gIWggfTtcbiAgICAgIGZ1bmN0aW9uIGYoaCA9IFwiXCIsIGcsIHYpIHtcbiAgICAgICAgbGV0IEwgPSAvXFx7KFtcXHdcXDpcXC5cXCw7XFwtXFwvPD4lQFwiJ+KAmT0gI1xcKFxcKV0rKVxcfS9nLCB5ID0gL1xcKChbXFx3XFw6XFwuXFwsO1xcLVxcLzw+JUBcIic9IF0rKVxcKS9nLCBCID0gW10sIFggPSAvZiQvLCBGID0gL1xcLihcXGQpLywgVCA9IGEubGFuZywgdyA9IHYgJiYgdi50aW1lIHx8IHMsIEggPSB2ICYmIHYubnVtYmVyRm9ybWF0dGVyIHx8IE8sIEMgPSAoTiA9IFwiXCIpID0+IHtcbiAgICAgICAgICBsZXQgVjtcbiAgICAgICAgICByZXR1cm4gTiA9PT0gXCJ0cnVlXCIgfHwgTiAhPT0gXCJmYWxzZVwiICYmICgoViA9IE51bWJlcihOKSkudG9TdHJpbmcoKSA9PT0gTiA/IFYgOiBwKE4sIGcpKTtcbiAgICAgICAgfSwgcSwgbSwgayA9IDAsIHg7XG4gICAgICAgIGZvciAoOyAocSA9IEwuZXhlYyhoKSkgIT09IG51bGw7ICkge1xuICAgICAgICAgIGxldCBOID0geS5leGVjKHFbMV0pO1xuICAgICAgICAgIE4gJiYgKHEgPSBOLCB4ID0gITApLCBtICYmIG0uaXNCbG9jayB8fCAobSA9IHsgY3R4OiBnLCBleHByZXNzaW9uOiBxWzFdLCBmaW5kOiBxWzBdLCBpc0Jsb2NrOiBxWzFdLmNoYXJBdCgwKSA9PT0gXCIjXCIsIHN0YXJ0OiBxLmluZGV4LCBzdGFydElubmVyOiBxLmluZGV4ICsgcVswXS5sZW5ndGgsIGxlbmd0aDogcVswXS5sZW5ndGggfSk7XG4gICAgICAgICAgbGV0IFYgPSBxWzFdLnNwbGl0KFwiIFwiKVswXS5yZXBsYWNlKFwiI1wiLCBcIlwiKTtcbiAgICAgICAgICB6W1ZdICYmIChtLmlzQmxvY2sgJiYgViA9PT0gbS5mbiAmJiBrKyssIG0uZm4gfHwgKG0uZm4gPSBWKSk7XG4gICAgICAgICAgbGV0IFIgPSBxWzFdID09PSBcImVsc2VcIjtcbiAgICAgICAgICBpZiAobS5pc0Jsb2NrICYmIG0uZm4gJiYgKHFbMV0gPT09IGAvJHttLmZufWAgfHwgUikpXG4gICAgICAgICAgICBpZiAoaylcbiAgICAgICAgICAgICAgIVIgJiYgay0tO1xuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgIGxldCBJID0gbS5zdGFydElubmVyLCBqID0gaC5zdWJzdHIoSSwgcS5pbmRleCAtIEkpO1xuICAgICAgICAgICAgICBtLmJvZHkgPT09IHZvaWQgMCA/IChtLmJvZHkgPSBqLCBtLnN0YXJ0SW5uZXIgPSBxLmluZGV4ICsgcVswXS5sZW5ndGgpIDogbS5lbHNlQm9keSA9IGosIG0uZmluZCArPSBqICsgcVswXSwgUiB8fCAoQi5wdXNoKG0pLCBtID0gdm9pZCAwKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICBlbHNlXG4gICAgICAgICAgICBtLmlzQmxvY2sgfHwgQi5wdXNoKG0pO1xuICAgICAgICAgIGlmIChOICYmICEobSAhPSBudWxsICYmIG0uaXNCbG9jaykpXG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gQi5mb3JFYWNoKChOKSA9PiB7XG4gICAgICAgICAgbGV0IFYsIFIsIHsgYm9keTogSSwgZWxzZUJvZHk6IGosIGV4cHJlc3Npb246IFUsIGZuOiBfIH0gPSBOO1xuICAgICAgICAgIGlmIChfKSB7XG4gICAgICAgICAgICBsZXQgcjEgPSBbTl0sIEsgPSBVLnNwbGl0KFwiIFwiKTtcbiAgICAgICAgICAgIGZvciAoUiA9IHpbX10ubGVuZ3RoOyBSLS07IClcbiAgICAgICAgICAgICAgcjEudW5zaGlmdChDKEtbUiArIDFdKSk7XG4gICAgICAgICAgICBWID0geltfXS5hcHBseShnLCByMSksIE4uaXNCbG9jayAmJiB0eXBlb2YgViA9PSBcImJvb2xlYW5cIiAmJiAoViA9IGYoViA/IEkgOiBqLCBnLCB2KSk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGxldCByMSA9IFUuc3BsaXQoXCI6XCIpO1xuICAgICAgICAgICAgaWYgKFYgPSBDKHIxLnNoaWZ0KCkgfHwgXCJcIiksIHIxLmxlbmd0aCAmJiB0eXBlb2YgViA9PSBcIm51bWJlclwiKSB7XG4gICAgICAgICAgICAgIGxldCBLID0gcjEuam9pbihcIjpcIik7XG4gICAgICAgICAgICAgIGlmIChYLnRlc3QoSykpIHtcbiAgICAgICAgICAgICAgICBsZXQgUSA9IHBhcnNlSW50KChLLm1hdGNoKEYpIHx8IFtcIlwiLCBcIi0xXCJdKVsxXSwgMTApO1xuICAgICAgICAgICAgICAgIFYgIT09IG51bGwgJiYgKFYgPSBIKFYsIFEsIFQuZGVjaW1hbFBvaW50LCBLLmluZGV4T2YoXCIsXCIpID4gLTEgPyBULnRob3VzYW5kc1NlcCA6IFwiXCIpKTtcbiAgICAgICAgICAgICAgfSBlbHNlXG4gICAgICAgICAgICAgICAgViA9IHcuZGF0ZUZvcm1hdChLLCBWKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgaCA9IGgucmVwbGFjZShOLmZpbmQsIHUoViwgXCJcIikpO1xuICAgICAgICB9KSwgeCA/IGYoaCwgZywgdikgOiBoO1xuICAgICAgfVxuICAgICAgZnVuY3Rpb24gTyhoLCBnLCB2LCBMKSB7XG4gICAgICAgIGxldCB5LCBCO1xuICAgICAgICBoID0gK2ggfHwgMCwgZyA9ICtnO1xuICAgICAgICBsZXQgWCA9IGEubGFuZywgRiA9IChoLnRvU3RyaW5nKCkuc3BsaXQoXCIuXCIpWzFdIHx8IFwiXCIpLnNwbGl0KFwiZVwiKVswXS5sZW5ndGgsIFQgPSBoLnRvU3RyaW5nKCkuc3BsaXQoXCJlXCIpLCB3ID0gZztcbiAgICAgICAgZyA9PT0gLTEgPyBnID0gTWF0aC5taW4oRiwgMjApIDogYihnKSA/IGcgJiYgVFsxXSAmJiBUWzFdIDwgMCAmJiAoKEIgPSBnICsgK1RbMV0pID49IDAgPyAoVFswXSA9ICgrVFswXSkudG9FeHBvbmVudGlhbChCKS5zcGxpdChcImVcIilbMF0sIGcgPSBCKSA6IChUWzBdID0gVFswXS5zcGxpdChcIi5cIilbMF0gfHwgMCwgaCA9IGcgPCAyMCA/IChUWzBdICogTWF0aC5wb3coMTAsIFRbMV0pKS50b0ZpeGVkKGcpIDogMCwgVFsxXSA9IDApKSA6IGcgPSAyO1xuICAgICAgICBsZXQgSCA9IChNYXRoLmFicyhUWzFdID8gVFswXSA6IGgpICsgTWF0aC5wb3coMTAsIC1NYXRoLm1heChnLCBGKSAtIDEpKS50b0ZpeGVkKGcpLCBDID0gU3RyaW5nKEEoSCkpLCBxID0gQy5sZW5ndGggPiAzID8gQy5sZW5ndGggJSAzIDogMDtcbiAgICAgICAgcmV0dXJuIHYgPSB1KHYsIFguZGVjaW1hbFBvaW50KSwgTCA9IHUoTCwgWC50aG91c2FuZHNTZXApLCB5ID0gKGggPCAwID8gXCItXCIgOiBcIlwiKSArIChxID8gQy5zdWJzdHIoMCwgcSkgKyBMIDogXCJcIiksIDAgPiArVFsxXSAmJiAhdyA/IHkgPSBcIjBcIiA6IHkgKz0gQy5zdWJzdHIocSkucmVwbGFjZSgvKFxcZHszfSkoPz1cXGQpL2csIFwiJDFcIiArIEwpLCBnID8geSArPSB2ICsgSC5zbGljZSgtZykgOiAreSA9PSAwICYmICh5ID0gXCIwXCIpLCBUWzFdICYmICt5ICE9IDAgJiYgKHkgKz0gXCJlXCIgKyBUWzFdKSwgeTtcbiAgICAgIH1cbiAgICAgIHJldHVybiB7IGRhdGVGb3JtYXQ6IGZ1bmN0aW9uKGgsIGcsIHYpIHtcbiAgICAgICAgcmV0dXJuIHMuZGF0ZUZvcm1hdChoLCBnLCB2KTtcbiAgICAgIH0sIGZvcm1hdDogZiwgaGVscGVyczogeiwgbnVtYmVyRm9ybWF0OiBPIH07XG4gICAgfSksIG4obywgXCJDb3JlL1JlbmRlcmVyL1JlbmRlcmVyUmVnaXN0cnkuanNcIiwgW29bXCJDb3JlL0dsb2JhbHMuanNcIl1dLCBmdW5jdGlvbihyKSB7XG4gICAgICB2YXIgaSwgYTtcbiAgICAgIGxldCBzO1xuICAgICAgcmV0dXJuIChhID0gaSB8fCAoaSA9IHt9KSkucmVuZGVyZXJUeXBlcyA9IHt9LCBhLmdldFJlbmRlcmVyVHlwZSA9IGZ1bmN0aW9uKGwgPSBzKSB7XG4gICAgICAgIHJldHVybiBhLnJlbmRlcmVyVHlwZXNbbF0gfHwgYS5yZW5kZXJlclR5cGVzW3NdO1xuICAgICAgfSwgYS5yZWdpc3RlclJlbmRlcmVyVHlwZSA9IGZ1bmN0aW9uKGwsIHAsIGQpIHtcbiAgICAgICAgYS5yZW5kZXJlclR5cGVzW2xdID0gcCwgKCFzIHx8IGQpICYmIChzID0gbCwgci5SZW5kZXJlciA9IHApO1xuICAgICAgfSwgaTtcbiAgICB9KSwgbihvLCBcIkNvcmUvUmVuZGVyZXIvUmVuZGVyZXJVdGlsaXRpZXMuanNcIiwgW29bXCJDb3JlL1V0aWxpdGllcy5qc1wiXV0sIGZ1bmN0aW9uKHIpIHtcbiAgICAgIHZhciBpO1xuICAgICAgbGV0IHsgY2xhbXA6IGEsIHBpY2s6IHMsIHB1c2hVbmlxdWU6IGwsIHN0YWJsZVNvcnQ6IHAgfSA9IHI7XG4gICAgICByZXR1cm4gKGkgfHwgKGkgPSB7fSkpLmRpc3RyaWJ1dGUgPSBmdW5jdGlvbiBkKGIsIE0sIHUpIHtcbiAgICAgICAgbGV0IEEgPSBiLCB6ID0gQS5yZWR1Y2VkTGVuIHx8IE0sIGYgPSAoQywgcSkgPT4gQy50YXJnZXQgLSBxLnRhcmdldCwgTyA9IFtdLCBoID0gYi5sZW5ndGgsIGcgPSBbXSwgdiA9IE8ucHVzaCwgTCwgeSwgQiwgWCA9ICEwLCBGLCBULCB3ID0gMCwgSDtcbiAgICAgICAgZm9yIChMID0gaDsgTC0tOyApXG4gICAgICAgICAgdyArPSBiW0xdLnNpemU7XG4gICAgICAgIGlmICh3ID4geikge1xuICAgICAgICAgIGZvciAocChiLCAoQywgcSkgPT4gKHEucmFuayB8fCAwKSAtIChDLnJhbmsgfHwgMCkpLCBCID0gKEggPSBiWzBdLnJhbmsgPT09IGJbYi5sZW5ndGggLSAxXS5yYW5rKSA/IGggLyAyIDogLTEsIHkgPSBIID8gQiA6IGggLSAxOyBCICYmIHcgPiB6OyApXG4gICAgICAgICAgICBGID0gYltMID0gTWF0aC5mbG9vcih5KV0sIGwoZywgTCkgJiYgKHcgLT0gRi5zaXplKSwgeSArPSBCLCBIICYmIHkgPj0gYi5sZW5ndGggJiYgKEIgLz0gMiwgeSA9IEIpO1xuICAgICAgICAgIGcuc29ydCgoQywgcSkgPT4gcSAtIEMpLmZvckVhY2goKEMpID0+IHYuYXBwbHkoTywgYi5zcGxpY2UoQywgMSkpKTtcbiAgICAgICAgfVxuICAgICAgICBmb3IgKHAoYiwgZiksIGIgPSBiLm1hcCgoQykgPT4gKHsgc2l6ZTogQy5zaXplLCB0YXJnZXRzOiBbQy50YXJnZXRdLCBhbGlnbjogcyhDLmFsaWduLCAwLjUpIH0pKTsgWDsgKSB7XG4gICAgICAgICAgZm9yIChMID0gYi5sZW5ndGg7IEwtLTsgKVxuICAgICAgICAgICAgRiA9IGJbTF0sIFQgPSAoTWF0aC5taW4uYXBwbHkoMCwgRi50YXJnZXRzKSArIE1hdGgubWF4LmFwcGx5KDAsIEYudGFyZ2V0cykpIC8gMiwgRi5wb3MgPSBhKFQgLSBGLnNpemUgKiBGLmFsaWduLCAwLCBNIC0gRi5zaXplKTtcbiAgICAgICAgICBmb3IgKEwgPSBiLmxlbmd0aCwgWCA9ICExOyBMLS07IClcbiAgICAgICAgICAgIEwgPiAwICYmIGJbTCAtIDFdLnBvcyArIGJbTCAtIDFdLnNpemUgPiBiW0xdLnBvcyAmJiAoYltMIC0gMV0uc2l6ZSArPSBiW0xdLnNpemUsIGJbTCAtIDFdLnRhcmdldHMgPSBiW0wgLSAxXS50YXJnZXRzLmNvbmNhdChiW0xdLnRhcmdldHMpLCBiW0wgLSAxXS5hbGlnbiA9IDAuNSwgYltMIC0gMV0ucG9zICsgYltMIC0gMV0uc2l6ZSA+IE0gJiYgKGJbTCAtIDFdLnBvcyA9IE0gLSBiW0wgLSAxXS5zaXplKSwgYi5zcGxpY2UoTCwgMSksIFggPSAhMCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHYuYXBwbHkoQSwgTyksIEwgPSAwLCBiLnNvbWUoKEMpID0+IHtcbiAgICAgICAgICBsZXQgcSA9IDA7XG4gICAgICAgICAgcmV0dXJuIChDLnRhcmdldHMgfHwgW10pLnNvbWUoKCkgPT4gKEFbTF0ucG9zID0gQy5wb3MgKyBxLCB1ICE9PSB2b2lkIDAgJiYgTWF0aC5hYnMoQVtMXS5wb3MgLSBBW0xdLnRhcmdldCkgPiB1ID8gKEEuc2xpY2UoMCwgTCArIDEpLmZvckVhY2goKG0pID0+IGRlbGV0ZSBtLnBvcyksIEEucmVkdWNlZExlbiA9IChBLnJlZHVjZWRMZW4gfHwgTSkgLSAwLjEgKiBNLCBBLnJlZHVjZWRMZW4gPiAwLjEgKiBNICYmIGQoQSwgTSwgdSksICEwKSA6IChxICs9IEFbTF0uc2l6ZSwgTCsrLCAhMSkpKTtcbiAgICAgICAgfSksIHAoQSwgZiksIEE7XG4gICAgICB9LCBpO1xuICAgIH0pLCBuKG8sIFwiQ29yZS9SZW5kZXJlci9TVkcvU1ZHRWxlbWVudC5qc1wiLCBbb1tcIkNvcmUvQW5pbWF0aW9uL0FuaW1hdGlvblV0aWxpdGllcy5qc1wiXSwgb1tcIkNvcmUvQ29sb3IvQ29sb3IuanNcIl0sIG9bXCJDb3JlL0dsb2JhbHMuanNcIl0sIG9bXCJDb3JlL1V0aWxpdGllcy5qc1wiXV0sIGZ1bmN0aW9uKHIsIGksIGEsIHMpIHtcbiAgICAgIGxldCB7IGFuaW1hdGU6IGwsIGFuaW1PYmplY3Q6IHAsIHN0b3A6IGQgfSA9IHIsIHsgZGVnMnJhZDogYiwgZG9jOiBNLCBzdmc6IHUsIFNWR19OUzogQSwgd2luOiB6IH0gPSBhLCB7IGFkZEV2ZW50OiBmLCBhdHRyOiBPLCBjcmVhdGVFbGVtZW50OiBoLCBjcmlzcDogZywgY3NzOiB2LCBkZWZpbmVkOiBMLCBlcmFzZTogeSwgZXh0ZW5kOiBCLCBmaXJlRXZlbnQ6IFgsIGlzQXJyYXk6IEYsIGlzRnVuY3Rpb246IFQsIGlzT2JqZWN0OiB3LCBpc1N0cmluZzogSCwgbWVyZ2U6IEMsIG9iamVjdEVhY2g6IHEsIHBpY2s6IG0sIHBJbnQ6IGssIHB1c2hVbmlxdWU6IHgsIHJlcGxhY2VOZXN0ZWQ6IE4sIHN5bmNUaW1lb3V0OiBWLCB1bmlxdWVLZXk6IFIgfSA9IHM7XG4gICAgICBjbGFzcyBJIHtcbiAgICAgICAgX2RlZmF1bHRHZXR0ZXIoVSkge1xuICAgICAgICAgIGxldCBfID0gbSh0aGlzW1UgKyBcIlZhbHVlXCJdLCB0aGlzW1VdLCB0aGlzLmVsZW1lbnQgPyB0aGlzLmVsZW1lbnQuZ2V0QXR0cmlidXRlKFUpIDogbnVsbCwgMCk7XG4gICAgICAgICAgcmV0dXJuIC9eLT9bXFxkXFwuXSskLy50ZXN0KF8pICYmIChfID0gcGFyc2VGbG9hdChfKSksIF87XG4gICAgICAgIH1cbiAgICAgICAgX2RlZmF1bHRTZXR0ZXIoVSwgXywgcjEpIHtcbiAgICAgICAgICByMS5zZXRBdHRyaWJ1dGUoXywgVSk7XG4gICAgICAgIH1cbiAgICAgICAgYWRkKFUpIHtcbiAgICAgICAgICBsZXQgXywgcjEgPSB0aGlzLnJlbmRlcmVyLCBLID0gdGhpcy5lbGVtZW50O1xuICAgICAgICAgIHJldHVybiBVICYmICh0aGlzLnBhcmVudEdyb3VwID0gVSksIHRoaXMudGV4dFN0ciAhPT0gdm9pZCAwICYmIHRoaXMuZWxlbWVudC5ub2RlTmFtZSA9PT0gXCJ0ZXh0XCIgJiYgcjEuYnVpbGRUZXh0KHRoaXMpLCB0aGlzLmFkZGVkID0gITAsICghVSB8fCBVLmhhbmRsZVogfHwgdGhpcy56SW5kZXgpICYmIChfID0gdGhpcy56SW5kZXhTZXR0ZXIoKSksIF8gfHwgKFUgPyBVLmVsZW1lbnQgOiByMS5ib3gpLmFwcGVuZENoaWxkKEspLCB0aGlzLm9uQWRkICYmIHRoaXMub25BZGQoKSwgdGhpcztcbiAgICAgICAgfVxuICAgICAgICBhZGRDbGFzcyhVLCBfKSB7XG4gICAgICAgICAgbGV0IHIxID0gXyA/IFwiXCIgOiB0aGlzLmF0dHIoXCJjbGFzc1wiKSB8fCBcIlwiO1xuICAgICAgICAgIHJldHVybiAoVSA9IChVIHx8IFwiXCIpLnNwbGl0KC8gL2cpLnJlZHVjZShmdW5jdGlvbihLLCBRKSB7XG4gICAgICAgICAgICByZXR1cm4gcjEuaW5kZXhPZihRKSA9PT0gLTEgJiYgSy5wdXNoKFEpLCBLO1xuICAgICAgICAgIH0sIHIxID8gW3IxXSA6IFtdKS5qb2luKFwiIFwiKSkgIT09IHIxICYmIHRoaXMuYXR0cihcImNsYXNzXCIsIFUpLCB0aGlzO1xuICAgICAgICB9XG4gICAgICAgIGFmdGVyU2V0dGVycygpIHtcbiAgICAgICAgICB0aGlzLmRvVHJhbnNmb3JtICYmICh0aGlzLnVwZGF0ZVRyYW5zZm9ybSgpLCB0aGlzLmRvVHJhbnNmb3JtID0gITEpO1xuICAgICAgICB9XG4gICAgICAgIGFsaWduKFUsIF8sIHIxLCBLID0gITApIHtcbiAgICAgICAgICBsZXQgUSwgRSwgRCwgRywgSiA9IHt9LCBTID0gdGhpcy5yZW5kZXJlciwgVyA9IFMuYWxpZ25lZE9iamVjdHMsIFAgPSAhIVU7XG4gICAgICAgICAgVSA/ICh0aGlzLmFsaWduT3B0aW9ucyA9IFUsIHRoaXMuYWxpZ25CeVRyYW5zbGF0ZSA9IF8sIHRoaXMuYWxpZ25UbyA9IHIxKSA6IChVID0gdGhpcy5hbGlnbk9wdGlvbnMgfHwge30sIF8gPSB0aGlzLmFsaWduQnlUcmFuc2xhdGUsIHIxID0gdGhpcy5hbGlnblRvKTtcbiAgICAgICAgICBsZXQgWSA9ICFyMSB8fCBIKHIxKSA/IHIxIHx8IFwicmVuZGVyZXJcIiA6IHZvaWQgMDtcbiAgICAgICAgICBZICYmIChQICYmIHgoVywgdGhpcyksIHIxID0gdm9pZCAwKTtcbiAgICAgICAgICBsZXQgWiA9IG0ocjEsIFNbWV0sIFMpLCB0MSA9IFUuYWxpZ24sIGkxID0gVS52ZXJ0aWNhbEFsaWduO1xuICAgICAgICAgIHJldHVybiBRID0gKFoueCB8fCAwKSArIChVLnggfHwgMCksIEUgPSAoWi55IHx8IDApICsgKFUueSB8fCAwKSwgdDEgPT09IFwicmlnaHRcIiA/IEQgPSAxIDogdDEgPT09IFwiY2VudGVyXCIgJiYgKEQgPSAyKSwgRCAmJiAoUSArPSAoKFoud2lkdGggfHwgMCkgLSAoVS53aWR0aCB8fCAwKSkgLyBEKSwgSltfID8gXCJ0cmFuc2xhdGVYXCIgOiBcInhcIl0gPSBNYXRoLnJvdW5kKFEpLCBpMSA9PT0gXCJib3R0b21cIiA/IEcgPSAxIDogaTEgPT09IFwibWlkZGxlXCIgJiYgKEcgPSAyKSwgRyAmJiAoRSArPSAoKFouaGVpZ2h0IHx8IDApIC0gKFUuaGVpZ2h0IHx8IDApKSAvIEcpLCBKW18gPyBcInRyYW5zbGF0ZVlcIiA6IFwieVwiXSA9IE1hdGgucm91bmQoRSksIEsgJiYgKHRoaXNbdGhpcy5wbGFjZWQgPyBcImFuaW1hdGVcIiA6IFwiYXR0clwiXShKKSwgdGhpcy5wbGFjZWQgPSAhMCksIHRoaXMuYWxpZ25BdHRyID0gSiwgdGhpcztcbiAgICAgICAgfVxuICAgICAgICBhbGlnblNldHRlcihVKSB7XG4gICAgICAgICAgbGV0IF8gPSB7IGxlZnQ6IFwic3RhcnRcIiwgY2VudGVyOiBcIm1pZGRsZVwiLCByaWdodDogXCJlbmRcIiB9O1xuICAgICAgICAgIF9bVV0gJiYgKHRoaXMuYWxpZ25WYWx1ZSA9IFUsIHRoaXMuZWxlbWVudC5zZXRBdHRyaWJ1dGUoXCJ0ZXh0LWFuY2hvclwiLCBfW1VdKSk7XG4gICAgICAgIH1cbiAgICAgICAgYW5pbWF0ZShVLCBfLCByMSkge1xuICAgICAgICAgIGxldCBLID0gcChtKF8sIHRoaXMucmVuZGVyZXIuZ2xvYmFsQW5pbWF0aW9uLCAhMCkpLCBRID0gSy5kZWZlcjtcbiAgICAgICAgICByZXR1cm4gTS5oaWRkZW4gJiYgKEsuZHVyYXRpb24gPSAwKSwgSy5kdXJhdGlvbiAhPT0gMCA/IChyMSAmJiAoSy5jb21wbGV0ZSA9IHIxKSwgVigoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLmVsZW1lbnQgJiYgbCh0aGlzLCBVLCBLKTtcbiAgICAgICAgICB9LCBRKSkgOiAodGhpcy5hdHRyKFUsIHZvaWQgMCwgcjEgfHwgSy5jb21wbGV0ZSksIHEoVSwgZnVuY3Rpb24oRSwgRCkge1xuICAgICAgICAgICAgSy5zdGVwICYmIEsuc3RlcC5jYWxsKHRoaXMsIEUsIHsgcHJvcDogRCwgcG9zOiAxLCBlbGVtOiB0aGlzIH0pO1xuICAgICAgICAgIH0sIHRoaXMpKSwgdGhpcztcbiAgICAgICAgfVxuICAgICAgICBhcHBseVRleHRPdXRsaW5lKFUpIHtcbiAgICAgICAgICBsZXQgXyA9IHRoaXMuZWxlbWVudDtcbiAgICAgICAgICBVLmluZGV4T2YoXCJjb250cmFzdFwiKSAhPT0gLTEgJiYgKFUgPSBVLnJlcGxhY2UoL2NvbnRyYXN0L2csIHRoaXMucmVuZGVyZXIuZ2V0Q29udHJhc3QoXy5zdHlsZS5maWxsKSkpO1xuICAgICAgICAgIGxldCByMSA9IFUuc3BsaXQoXCIgXCIpLCBLID0gcjFbcjEubGVuZ3RoIC0gMV0sIFEgPSByMVswXTtcbiAgICAgICAgICBpZiAoUSAmJiBRICE9PSBcIm5vbmVcIiAmJiBhLnN2Zykge1xuICAgICAgICAgICAgdGhpcy5mYWtlVFMgPSAhMCwgUSA9IFEucmVwbGFjZSgvKF5bXFxkXFwuXSspKC4qPykkL2csIGZ1bmN0aW9uKFMsIFcsIFApIHtcbiAgICAgICAgICAgICAgcmV0dXJuIDIgKiBOdW1iZXIoVykgKyBQO1xuICAgICAgICAgICAgfSksIHRoaXMucmVtb3ZlVGV4dE91dGxpbmUoKTtcbiAgICAgICAgICAgIGxldCBFID0gTS5jcmVhdGVFbGVtZW50TlMoQSwgXCJ0c3BhblwiKTtcbiAgICAgICAgICAgIE8oRSwgeyBjbGFzczogXCJoaWdoY2hhcnRzLXRleHQtb3V0bGluZVwiLCBmaWxsOiBLLCBzdHJva2U6IEssIFwic3Ryb2tlLXdpZHRoXCI6IFEsIFwic3Ryb2tlLWxpbmVqb2luXCI6IFwicm91bmRcIiB9KTtcbiAgICAgICAgICAgIGxldCBEID0gXy5xdWVyeVNlbGVjdG9yKFwidGV4dFBhdGhcIikgfHwgXztcbiAgICAgICAgICAgIFtdLmZvckVhY2guY2FsbChELmNoaWxkTm9kZXMsIChTKSA9PiB7XG4gICAgICAgICAgICAgIGxldCBXID0gUy5jbG9uZU5vZGUoITApO1xuICAgICAgICAgICAgICBXLnJlbW92ZUF0dHJpYnV0ZSAmJiBbXCJmaWxsXCIsIFwic3Ryb2tlXCIsIFwic3Ryb2tlLXdpZHRoXCIsIFwic3Ryb2tlXCJdLmZvckVhY2goKFApID0+IFcucmVtb3ZlQXR0cmlidXRlKFApKSwgRS5hcHBlbmRDaGlsZChXKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgbGV0IEcgPSAwO1xuICAgICAgICAgICAgW10uZm9yRWFjaC5jYWxsKEQucXVlcnlTZWxlY3RvckFsbChcInRleHQgdHNwYW5cIiksIChTKSA9PiB7XG4gICAgICAgICAgICAgIEcgKz0gTnVtYmVyKFMuZ2V0QXR0cmlidXRlKFwiZHlcIikpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBsZXQgSiA9IE0uY3JlYXRlRWxlbWVudE5TKEEsIFwidHNwYW5cIik7XG4gICAgICAgICAgICBKLnRleHRDb250ZW50ID0gXCLigItcIiwgTyhKLCB7IHg6IE51bWJlcihfLmdldEF0dHJpYnV0ZShcInhcIikpLCBkeTogLUcgfSksIEUuYXBwZW5kQ2hpbGQoSiksIEQuaW5zZXJ0QmVmb3JlKEUsIEQuZmlyc3RDaGlsZCk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGF0dHIoVSwgXywgcjEsIEspIHtcbiAgICAgICAgICBsZXQgeyBlbGVtZW50OiBRIH0gPSB0aGlzLCBFID0gSS5zeW1ib2xDdXN0b21BdHRyaWJzLCBELCBHLCBKID0gdGhpcywgUztcbiAgICAgICAgICByZXR1cm4gdHlwZW9mIFUgPT0gXCJzdHJpbmdcIiAmJiBfICE9PSB2b2lkIDAgJiYgKEQgPSBVLCAoVSA9IHt9KVtEXSA9IF8pLCB0eXBlb2YgVSA9PSBcInN0cmluZ1wiID8gSiA9ICh0aGlzW1UgKyBcIkdldHRlclwiXSB8fCB0aGlzLl9kZWZhdWx0R2V0dGVyKS5jYWxsKHRoaXMsIFUsIFEpIDogKHEoVSwgZnVuY3Rpb24oVywgUCkge1xuICAgICAgICAgICAgUyA9ICExLCBLIHx8IGQodGhpcywgUCksIHRoaXMuc3ltYm9sTmFtZSAmJiBFLmluZGV4T2YoUCkgIT09IC0xICYmIChHIHx8ICh0aGlzLnN5bWJvbEF0dHIoVSksIEcgPSAhMCksIFMgPSAhMCksIHRoaXMucm90YXRpb24gJiYgKFAgPT09IFwieFwiIHx8IFAgPT09IFwieVwiKSAmJiAodGhpcy5kb1RyYW5zZm9ybSA9ICEwKSwgUyB8fCAodGhpc1tQICsgXCJTZXR0ZXJcIl0gfHwgdGhpcy5fZGVmYXVsdFNldHRlcikuY2FsbCh0aGlzLCBXLCBQLCBRKTtcbiAgICAgICAgICB9LCB0aGlzKSwgdGhpcy5hZnRlclNldHRlcnMoKSksIHIxICYmIHIxLmNhbGwodGhpcyksIEo7XG4gICAgICAgIH1cbiAgICAgICAgY2xpcChVKSB7XG4gICAgICAgICAgaWYgKFUgJiYgIVUuY2xpcFBhdGgpIHtcbiAgICAgICAgICAgIGxldCBfID0gUigpICsgXCItXCIsIHIxID0gdGhpcy5yZW5kZXJlci5jcmVhdGVFbGVtZW50KFwiY2xpcFBhdGhcIikuYXR0cih7IGlkOiBfIH0pLmFkZCh0aGlzLnJlbmRlcmVyLmRlZnMpO1xuICAgICAgICAgICAgQihVLCB7IGNsaXBQYXRoOiByMSwgaWQ6IF8sIGNvdW50OiAwIH0pLCBVLmFkZChyMSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiB0aGlzLmF0dHIoXCJjbGlwLXBhdGhcIiwgVSA/IGB1cmwoJHt0aGlzLnJlbmRlcmVyLnVybH0jJHtVLmlkfSlgIDogXCJub25lXCIpO1xuICAgICAgICB9XG4gICAgICAgIGNyaXNwKFUsIF8pIHtcbiAgICAgICAgICBfID0gTWF0aC5yb3VuZChfIHx8IFUuc3Ryb2tlV2lkdGggfHwgMCk7XG4gICAgICAgICAgbGV0IHIxID0gVS54IHx8IHRoaXMueCB8fCAwLCBLID0gVS55IHx8IHRoaXMueSB8fCAwLCBRID0gKFUud2lkdGggfHwgdGhpcy53aWR0aCB8fCAwKSArIHIxLCBFID0gKFUuaGVpZ2h0IHx8IHRoaXMuaGVpZ2h0IHx8IDApICsgSywgRCA9IGcocjEsIF8pLCBHID0gZyhLLCBfKTtcbiAgICAgICAgICByZXR1cm4gQihVLCB7IHg6IEQsIHk6IEcsIHdpZHRoOiBnKFEsIF8pIC0gRCwgaGVpZ2h0OiBnKEUsIF8pIC0gRyB9KSwgTChVLnN0cm9rZVdpZHRoKSAmJiAoVS5zdHJva2VXaWR0aCA9IF8pLCBVO1xuICAgICAgICB9XG4gICAgICAgIGNvbXBsZXhDb2xvcihVLCBfLCByMSkge1xuICAgICAgICAgIGxldCBLID0gdGhpcy5yZW5kZXJlciwgUSwgRSwgRCwgRywgSiwgUywgVywgUCwgWSwgWiwgdDEgPSBbXSwgaTE7XG4gICAgICAgICAgWCh0aGlzLnJlbmRlcmVyLCBcImNvbXBsZXhDb2xvclwiLCB7IGFyZ3M6IGFyZ3VtZW50cyB9LCBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgIGlmIChVLnJhZGlhbEdyYWRpZW50ID8gRSA9IFwicmFkaWFsR3JhZGllbnRcIiA6IFUubGluZWFyR3JhZGllbnQgJiYgKEUgPSBcImxpbmVhckdyYWRpZW50XCIpLCBFKSB7XG4gICAgICAgICAgICAgIGlmIChEID0gVVtFXSwgSiA9IEsuZ3JhZGllbnRzLCBTID0gVS5zdG9wcywgWSA9IHIxLnJhZGlhbFJlZmVyZW5jZSwgRihEKSAmJiAoVVtFXSA9IEQgPSB7IHgxOiBEWzBdLCB5MTogRFsxXSwgeDI6IERbMl0sIHkyOiBEWzNdLCBncmFkaWVudFVuaXRzOiBcInVzZXJTcGFjZU9uVXNlXCIgfSksIEUgPT09IFwicmFkaWFsR3JhZGllbnRcIiAmJiBZICYmICFMKEQuZ3JhZGllbnRVbml0cykgJiYgKEcgPSBELCBEID0gQyhELCBLLmdldFJhZGlhbEF0dHIoWSwgRyksIHsgZ3JhZGllbnRVbml0czogXCJ1c2VyU3BhY2VPblVzZVwiIH0pKSwgcShELCBmdW5jdGlvbihuMSwgczEpIHtcbiAgICAgICAgICAgICAgICBzMSAhPT0gXCJpZFwiICYmIHQxLnB1c2goczEsIG4xKTtcbiAgICAgICAgICAgICAgfSksIHEoUywgZnVuY3Rpb24objEpIHtcbiAgICAgICAgICAgICAgICB0MS5wdXNoKG4xKTtcbiAgICAgICAgICAgICAgfSksIEpbdDEgPSB0MS5qb2luKFwiLFwiKV0pXG4gICAgICAgICAgICAgICAgWiA9IEpbdDFdLmF0dHIoXCJpZFwiKTtcbiAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgRC5pZCA9IFogPSBSKCk7XG4gICAgICAgICAgICAgICAgbGV0IG4xID0gSlt0MV0gPSBLLmNyZWF0ZUVsZW1lbnQoRSkuYXR0cihEKS5hZGQoSy5kZWZzKTtcbiAgICAgICAgICAgICAgICBuMS5yYWRBdHRyID0gRywgbjEuc3RvcHMgPSBbXSwgUy5mb3JFYWNoKGZ1bmN0aW9uKHMxKSB7XG4gICAgICAgICAgICAgICAgICBzMVsxXS5pbmRleE9mKFwicmdiYVwiKSA9PT0gMCA/IChXID0gKFEgPSBpLnBhcnNlKHMxWzFdKSkuZ2V0KFwicmdiXCIpLCBQID0gUS5nZXQoXCJhXCIpKSA6IChXID0gczFbMV0sIFAgPSAxKTtcbiAgICAgICAgICAgICAgICAgIGxldCBkMSA9IEsuY3JlYXRlRWxlbWVudChcInN0b3BcIikuYXR0cih7IG9mZnNldDogczFbMF0sIFwic3RvcC1jb2xvclwiOiBXLCBcInN0b3Atb3BhY2l0eVwiOiBQIH0pLmFkZChuMSk7XG4gICAgICAgICAgICAgICAgICBuMS5zdG9wcy5wdXNoKGQxKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBpMSA9IFwidXJsKFwiICsgSy51cmwgKyBcIiNcIiArIFogKyBcIilcIiwgcjEuc2V0QXR0cmlidXRlKF8sIGkxKSwgcjEuZ3JhZGllbnQgPSB0MSwgVS50b1N0cmluZyA9IGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBpMTtcbiAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBjc3MoVSkge1xuICAgICAgICAgIGxldCBfID0gdGhpcy5zdHlsZXMsIHIxID0ge30sIEsgPSB0aGlzLmVsZW1lbnQsIFEsIEUgPSAhXztcbiAgICAgICAgICBpZiAoXyAmJiBxKFUsIGZ1bmN0aW9uKEQsIEcpIHtcbiAgICAgICAgICAgIF8gJiYgX1tHXSAhPT0gRCAmJiAocjFbR10gPSBELCBFID0gITApO1xuICAgICAgICAgIH0pLCBFKSB7XG4gICAgICAgICAgICBfICYmIChVID0gQihfLCByMSkpLCBVLndpZHRoID09PSBudWxsIHx8IFUud2lkdGggPT09IFwiYXV0b1wiID8gZGVsZXRlIHRoaXMudGV4dFdpZHRoIDogSy5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpID09PSBcInRleHRcIiAmJiBVLndpZHRoICYmIChRID0gdGhpcy50ZXh0V2lkdGggPSBrKFUud2lkdGgpKSwgQih0aGlzLnN0eWxlcywgVSksIFEgJiYgIXUgJiYgdGhpcy5yZW5kZXJlci5mb3JFeHBvcnQgJiYgZGVsZXRlIFUud2lkdGg7XG4gICAgICAgICAgICBsZXQgRCA9IEMoVSk7XG4gICAgICAgICAgICBLLm5hbWVzcGFjZVVSSSA9PT0gdGhpcy5TVkdfTlMgJiYgKFtcInRleHRPdXRsaW5lXCIsIFwidGV4dE92ZXJmbG93XCIsIFwid2lkdGhcIl0uZm9yRWFjaCgoRykgPT4gRCAmJiBkZWxldGUgRFtHXSksIEQuY29sb3IgJiYgKEQuZmlsbCA9IEQuY29sb3IpKSwgdihLLCBEKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIHRoaXMuYWRkZWQgJiYgKHRoaXMuZWxlbWVudC5ub2RlTmFtZSA9PT0gXCJ0ZXh0XCIgJiYgdGhpcy5yZW5kZXJlci5idWlsZFRleHQodGhpcyksIFUudGV4dE91dGxpbmUgJiYgdGhpcy5hcHBseVRleHRPdXRsaW5lKFUudGV4dE91dGxpbmUpKSwgdGhpcztcbiAgICAgICAgfVxuICAgICAgICBkYXNoc3R5bGVTZXR0ZXIoVSkge1xuICAgICAgICAgIGxldCBfLCByMSA9IHRoaXNbXCJzdHJva2Utd2lkdGhcIl07XG4gICAgICAgICAgaWYgKHIxID09PSBcImluaGVyaXRcIiAmJiAocjEgPSAxKSwgVSA9IFUgJiYgVS50b0xvd2VyQ2FzZSgpKSB7XG4gICAgICAgICAgICBsZXQgSyA9IFUucmVwbGFjZShcInNob3J0ZGFzaGRvdGRvdFwiLCBcIjMsMSwxLDEsMSwxLFwiKS5yZXBsYWNlKFwic2hvcnRkYXNoZG90XCIsIFwiMywxLDEsMVwiKS5yZXBsYWNlKFwic2hvcnRkb3RcIiwgXCIxLDEsXCIpLnJlcGxhY2UoXCJzaG9ydGRhc2hcIiwgXCIzLDEsXCIpLnJlcGxhY2UoXCJsb25nZGFzaFwiLCBcIjgsMyxcIikucmVwbGFjZSgvZG90L2csIFwiMSwzLFwiKS5yZXBsYWNlKFwiZGFzaFwiLCBcIjQsMyxcIikucmVwbGFjZSgvLCQvLCBcIlwiKS5zcGxpdChcIixcIik7XG4gICAgICAgICAgICBmb3IgKF8gPSBLLmxlbmd0aDsgXy0tOyApXG4gICAgICAgICAgICAgIEtbX10gPSBcIlwiICsgayhLW19dKSAqIG0ocjEsIE5hTik7XG4gICAgICAgICAgICBVID0gSy5qb2luKFwiLFwiKS5yZXBsYWNlKC9OYU4vZywgXCJub25lXCIpLCB0aGlzLmVsZW1lbnQuc2V0QXR0cmlidXRlKFwic3Ryb2tlLWRhc2hhcnJheVwiLCBVKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZGVzdHJveSgpIHtcbiAgICAgICAgICB2YXIgRztcbiAgICAgICAgICBsZXQgVSA9IHRoaXMsIF8gPSBVLmVsZW1lbnQgfHwge30sIHIxID0gVS5yZW5kZXJlciwgSyA9IF8ub3duZXJTVkdFbGVtZW50LCBRID0gXy5ub2RlTmFtZSA9PT0gXCJTUEFOXCIgJiYgVS5wYXJlbnRHcm91cCB8fCB2b2lkIDAsIEUsIEQ7XG4gICAgICAgICAgaWYgKF8ub25jbGljayA9IF8ub25tb3VzZW91dCA9IF8ub25tb3VzZW92ZXIgPSBfLm9ubW91c2Vtb3ZlID0gXy5wb2ludCA9IG51bGwsIGQoVSksIFUuY2xpcFBhdGggJiYgSykge1xuICAgICAgICAgICAgbGV0IEogPSBVLmNsaXBQYXRoO1xuICAgICAgICAgICAgW10uZm9yRWFjaC5jYWxsKEsucXVlcnlTZWxlY3RvckFsbChcIltjbGlwLXBhdGhdLFtDTElQLVBBVEhdXCIpLCBmdW5jdGlvbihTKSB7XG4gICAgICAgICAgICAgIFMuZ2V0QXR0cmlidXRlKFwiY2xpcC1wYXRoXCIpLmluZGV4T2YoSi5lbGVtZW50LmlkKSA+IC0xICYmIFMucmVtb3ZlQXR0cmlidXRlKFwiY2xpcC1wYXRoXCIpO1xuICAgICAgICAgICAgfSksIFUuY2xpcFBhdGggPSBKLmRlc3Ryb3koKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKFUuY29ubmVjdG9yID0gKEcgPSBVLmNvbm5lY3RvcikgPT0gbnVsbCA/IHZvaWQgMCA6IEcuZGVzdHJveSgpLCBVLnN0b3BzKSB7XG4gICAgICAgICAgICBmb3IgKEQgPSAwOyBEIDwgVS5zdG9wcy5sZW5ndGg7IEQrKylcbiAgICAgICAgICAgICAgVS5zdG9wc1tEXS5kZXN0cm95KCk7XG4gICAgICAgICAgICBVLnN0b3BzLmxlbmd0aCA9IDAsIFUuc3RvcHMgPSB2b2lkIDA7XG4gICAgICAgICAgfVxuICAgICAgICAgIGZvciAoVS5zYWZlUmVtb3ZlQ2hpbGQoXyk7IFEgJiYgUS5kaXYgJiYgUS5kaXYuY2hpbGROb2Rlcy5sZW5ndGggPT09IDA7IClcbiAgICAgICAgICAgIEUgPSBRLnBhcmVudEdyb3VwLCBVLnNhZmVSZW1vdmVDaGlsZChRLmRpdiksIGRlbGV0ZSBRLmRpdiwgUSA9IEU7XG4gICAgICAgICAgVS5hbGlnbk9wdGlvbnMgJiYgeShyMS5hbGlnbmVkT2JqZWN0cywgVSksIHEoVSwgZnVuY3Rpb24oSiwgUykge1xuICAgICAgICAgICAgVVtTXSAmJiBVW1NdLnBhcmVudEdyb3VwID09PSBVICYmIFVbU10uZGVzdHJveSAmJiBVW1NdLmRlc3Ryb3koKSwgZGVsZXRlIFVbU107XG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgZFNldHRlcihVLCBfLCByMSkge1xuICAgICAgICAgIEYoVSkgJiYgKHR5cGVvZiBVWzBdID09IFwic3RyaW5nXCIgJiYgKFUgPSB0aGlzLnJlbmRlcmVyLnBhdGhUb1NlZ21lbnRzKFUpKSwgdGhpcy5wYXRoQXJyYXkgPSBVLCBVID0gVS5yZWR1Y2UoKEssIFEsIEUpID0+IFEgJiYgUS5qb2luID8gKEUgPyBLICsgXCIgXCIgOiBcIlwiKSArIFEuam9pbihcIiBcIikgOiAoUSB8fCBcIlwiKS50b1N0cmluZygpLCBcIlwiKSksIC8oTmFOfCB7Mn18XiQpLy50ZXN0KFUpICYmIChVID0gXCJNIDAgMFwiKSwgdGhpc1tfXSAhPT0gVSAmJiAocjEuc2V0QXR0cmlidXRlKF8sIFUpLCB0aGlzW19dID0gVSk7XG4gICAgICAgIH1cbiAgICAgICAgZmlsbFNldHRlcihVLCBfLCByMSkge1xuICAgICAgICAgIHR5cGVvZiBVID09IFwic3RyaW5nXCIgPyByMS5zZXRBdHRyaWJ1dGUoXywgVSkgOiBVICYmIHRoaXMuY29tcGxleENvbG9yKFUsIF8sIHIxKTtcbiAgICAgICAgfVxuICAgICAgICBocmVmU2V0dGVyKFUsIF8sIHIxKSB7XG4gICAgICAgICAgcjEuc2V0QXR0cmlidXRlTlMoXCJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rXCIsIF8sIFUpO1xuICAgICAgICB9XG4gICAgICAgIGdldEJCb3goVSwgXykge1xuICAgICAgICAgIGxldCByMSwgSywgUSwgRSwgeyBhbGlnblZhbHVlOiBELCBlbGVtZW50OiBHLCByZW5kZXJlcjogSiwgc3R5bGVzOiBTLCB0ZXh0U3RyOiBXIH0gPSB0aGlzLCB7IGNhY2hlOiBQLCBjYWNoZUtleXM6IFkgfSA9IEosIFogPSBHLm5hbWVzcGFjZVVSSSA9PT0gdGhpcy5TVkdfTlMsIHQxID0gbShfLCB0aGlzLnJvdGF0aW9uLCAwKSwgaTEgPSBKLnN0eWxlZE1vZGUgPyBHICYmIEkucHJvdG90eXBlLmdldFN0eWxlLmNhbGwoRywgXCJmb250LXNpemVcIikgOiBTLmZvbnRTaXplO1xuICAgICAgICAgIGlmIChMKFcpICYmICgoRSA9IFcudG9TdHJpbmcoKSkuaW5kZXhPZihcIjxcIikgPT09IC0xICYmIChFID0gRS5yZXBsYWNlKC9cXGQvZywgXCIwXCIpKSwgRSArPSBbXCJcIiwgSi5yb290Rm9udFNpemUsIGkxLCB0MSwgdGhpcy50ZXh0V2lkdGgsIEQsIFMudGV4dE92ZXJmbG93LCBTLmZvbnRXZWlnaHRdLmpvaW4oXCIsXCIpKSwgRSAmJiAhVSAmJiAocjEgPSBQW0VdKSwgIXIxIHx8IHIxLnBvbHlnb24pIHtcbiAgICAgICAgICAgIGlmIChaIHx8IEouZm9yRXhwb3J0KSB7XG4gICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgUSA9IHRoaXMuZmFrZVRTICYmIGZ1bmN0aW9uKHMxKSB7XG4gICAgICAgICAgICAgICAgICBsZXQgZDEgPSBHLnF1ZXJ5U2VsZWN0b3IoXCIuaGlnaGNoYXJ0cy10ZXh0LW91dGxpbmVcIik7XG4gICAgICAgICAgICAgICAgICBkMSAmJiB2KGQxLCB7IGRpc3BsYXk6IHMxIH0pO1xuICAgICAgICAgICAgICAgIH0sIFQoUSkgJiYgUShcIm5vbmVcIiksIHIxID0gRy5nZXRCQm94ID8gQih7fSwgRy5nZXRCQm94KCkpIDogeyB3aWR0aDogRy5vZmZzZXRXaWR0aCwgaGVpZ2h0OiBHLm9mZnNldEhlaWdodCwgeDogMCwgeTogMCB9LCBUKFEpICYmIFEoXCJcIik7XG4gICAgICAgICAgICAgIH0gY2F0Y2gge1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICghcjEgfHwgcjEud2lkdGggPCAwKSAmJiAocjEgPSB7IHg6IDAsIHk6IDAsIHdpZHRoOiAwLCBoZWlnaHQ6IDAgfSk7XG4gICAgICAgICAgICB9IGVsc2VcbiAgICAgICAgICAgICAgcjEgPSB0aGlzLmh0bWxHZXRCQm94KCk7XG4gICAgICAgICAgICBLID0gcjEuaGVpZ2h0LCBaICYmIChyMS5oZWlnaHQgPSBLID0geyBcIjExcHgsMTdcIjogMTQsIFwiMTNweCwyMFwiOiAxNiB9W2Ake2kxIHx8IFwiXCJ9LCR7TWF0aC5yb3VuZChLKX1gXSB8fCBLKSwgdDEgJiYgKHIxID0gdGhpcy5nZXRSb3RhdGVkQm94KHIxLCB0MSkpO1xuICAgICAgICAgICAgbGV0IG4xID0geyBiQm94OiByMSB9O1xuICAgICAgICAgICAgWCh0aGlzLCBcImFmdGVyR2V0QkJveFwiLCBuMSksIHIxID0gbjEuYkJveDtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKEUgJiYgKFcgPT09IFwiXCIgfHwgcjEuaGVpZ2h0ID4gMCkpIHtcbiAgICAgICAgICAgIGZvciAoOyBZLmxlbmd0aCA+IDI1MDsgKVxuICAgICAgICAgICAgICBkZWxldGUgUFtZLnNoaWZ0KCldO1xuICAgICAgICAgICAgUFtFXSB8fCBZLnB1c2goRSksIFBbRV0gPSByMTtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIHIxO1xuICAgICAgICB9XG4gICAgICAgIGdldFJvdGF0ZWRCb3goVSwgXykge1xuICAgICAgICAgIGxldCB7IHg6IHIxLCB5OiBLLCB3aWR0aDogUSwgaGVpZ2h0OiBFIH0gPSBVLCB7IGFsaWduVmFsdWU6IEQsIHRyYW5zbGF0ZVk6IEcsIHJvdGF0aW9uT3JpZ2luWDogSiA9IDAsIHJvdGF0aW9uT3JpZ2luWTogUyA9IDAgfSA9IHRoaXMsIFcgPSB7IHJpZ2h0OiAxLCBjZW50ZXI6IDAuNSB9W0QgfHwgMF0gfHwgMCwgUCA9IE51bWJlcih0aGlzLmVsZW1lbnQuZ2V0QXR0cmlidXRlKFwieVwiKSB8fCAwKSAtIChHID8gMCA6IEspLCBZID0gXyAqIGIsIFogPSAoXyAtIDkwKSAqIGIsIHQxID0gTWF0aC5jb3MoWSksIGkxID0gTWF0aC5zaW4oWSksIG4xID0gUSAqIHQxLCBzMSA9IFEgKiBpMSwgZDEgPSBNYXRoLmNvcyhaKSwgYjEgPSBNYXRoLnNpbihaKSwgW1tjMSwgYTFdLCBbbDEsIHAxXV0gPSBbSiwgU10ubWFwKChEMSkgPT4gW0QxIC0gRDEgKiB0MSwgRDEgKiBpMV0pLCBNMSA9IHIxICsgVyAqIChRIC0gbjEpICsgYzEgKyBwMSArIFAgKiBkMSwgQTEgPSBNMSArIG4xLCB1MSA9IEExIC0gRSAqIGQxLCBoMSA9IHUxIC0gbjEsIEMxID0gSyArIFAgLSBXICogczEgLSBhMSArIGwxICsgUCAqIGIxLCBxMSA9IEMxICsgczEsIFcxID0gcTEgLSBFICogYjEsIFIxID0gVzEgLSBzMSwgazEgPSBNYXRoLm1pbihNMSwgQTEsIHUxLCBoMSksIE4xID0gTWF0aC5taW4oQzEsIHExLCBXMSwgUjEpLCB2MSA9IE1hdGgubWF4KE0xLCBBMSwgdTEsIGgxKSAtIGsxLCBTMSA9IE1hdGgubWF4KEMxLCBxMSwgVzEsIFIxKSAtIE4xO1xuICAgICAgICAgIHJldHVybiB7IHg6IGsxLCB5OiBOMSwgd2lkdGg6IHYxLCBoZWlnaHQ6IFMxLCBwb2x5Z29uOiBbW00xLCBDMV0sIFtBMSwgcTFdLCBbdTEsIFcxXSwgW2gxLCBSMV1dIH07XG4gICAgICAgIH1cbiAgICAgICAgZ2V0U3R5bGUoVSkge1xuICAgICAgICAgIHJldHVybiB6LmdldENvbXB1dGVkU3R5bGUodGhpcy5lbGVtZW50IHx8IHRoaXMsIFwiXCIpLmdldFByb3BlcnR5VmFsdWUoVSk7XG4gICAgICAgIH1cbiAgICAgICAgaGFzQ2xhc3MoVSkge1xuICAgICAgICAgIHJldHVybiAoXCJcIiArIHRoaXMuYXR0cihcImNsYXNzXCIpKS5zcGxpdChcIiBcIikuaW5kZXhPZihVKSAhPT0gLTE7XG4gICAgICAgIH1cbiAgICAgICAgaGlkZSgpIHtcbiAgICAgICAgICByZXR1cm4gdGhpcy5hdHRyKHsgdmlzaWJpbGl0eTogXCJoaWRkZW5cIiB9KTtcbiAgICAgICAgfVxuICAgICAgICBodG1sR2V0QkJveCgpIHtcbiAgICAgICAgICByZXR1cm4geyBoZWlnaHQ6IDAsIHdpZHRoOiAwLCB4OiAwLCB5OiAwIH07XG4gICAgICAgIH1cbiAgICAgICAgY29uc3RydWN0b3IoVSwgXykge1xuICAgICAgICAgIHRoaXMub25FdmVudHMgPSB7fSwgdGhpcy5vcGFjaXR5ID0gMSwgdGhpcy5TVkdfTlMgPSBBLCB0aGlzLmVsZW1lbnQgPSBfID09PSBcInNwYW5cIiB8fCBfID09PSBcImJvZHlcIiA/IGgoXykgOiBNLmNyZWF0ZUVsZW1lbnROUyh0aGlzLlNWR19OUywgXyksIHRoaXMucmVuZGVyZXIgPSBVLCB0aGlzLnN0eWxlcyA9IHt9LCBYKHRoaXMsIFwiYWZ0ZXJJbml0XCIpO1xuICAgICAgICB9XG4gICAgICAgIG9uKFUsIF8pIHtcbiAgICAgICAgICBsZXQgeyBvbkV2ZW50czogcjEgfSA9IHRoaXM7XG4gICAgICAgICAgcmV0dXJuIHIxW1VdICYmIHIxW1VdKCksIHIxW1VdID0gZih0aGlzLmVsZW1lbnQsIFUsIF8pLCB0aGlzO1xuICAgICAgICB9XG4gICAgICAgIG9wYWNpdHlTZXR0ZXIoVSwgXywgcjEpIHtcbiAgICAgICAgICBsZXQgSyA9IE51bWJlcihOdW1iZXIoVSkudG9GaXhlZCgzKSk7XG4gICAgICAgICAgdGhpcy5vcGFjaXR5ID0gSywgcjEuc2V0QXR0cmlidXRlKF8sIEspO1xuICAgICAgICB9XG4gICAgICAgIHJlQWxpZ24oKSB7XG4gICAgICAgICAgdmFyIFU7XG4gICAgICAgICAgKFUgPSB0aGlzLmFsaWduT3B0aW9ucykgIT0gbnVsbCAmJiBVLndpZHRoICYmIHRoaXMuYWxpZ25PcHRpb25zLmFsaWduICE9PSBcImxlZnRcIiAmJiAodGhpcy5hbGlnbk9wdGlvbnMud2lkdGggPSB0aGlzLmdldEJCb3goKS53aWR0aCwgdGhpcy5wbGFjZWQgPSAhMSwgdGhpcy5hbGlnbigpKTtcbiAgICAgICAgfVxuICAgICAgICByZW1vdmVDbGFzcyhVKSB7XG4gICAgICAgICAgcmV0dXJuIHRoaXMuYXR0cihcImNsYXNzXCIsIChcIlwiICsgdGhpcy5hdHRyKFwiY2xhc3NcIikpLnJlcGxhY2UoSChVKSA/IFJlZ0V4cChgKF58ICkke1V9KCB8JClgKSA6IFUsIFwiIFwiKS5yZXBsYWNlKC8gKy9nLCBcIiBcIikudHJpbSgpKTtcbiAgICAgICAgfVxuICAgICAgICByZW1vdmVUZXh0T3V0bGluZSgpIHtcbiAgICAgICAgICBsZXQgVSA9IHRoaXMuZWxlbWVudC5xdWVyeVNlbGVjdG9yKFwidHNwYW4uaGlnaGNoYXJ0cy10ZXh0LW91dGxpbmVcIik7XG4gICAgICAgICAgVSAmJiB0aGlzLnNhZmVSZW1vdmVDaGlsZChVKTtcbiAgICAgICAgfVxuICAgICAgICBzYWZlUmVtb3ZlQ2hpbGQoVSkge1xuICAgICAgICAgIGxldCBfID0gVS5wYXJlbnROb2RlO1xuICAgICAgICAgIF8gJiYgXy5yZW1vdmVDaGlsZChVKTtcbiAgICAgICAgfVxuICAgICAgICBzZXRSYWRpYWxSZWZlcmVuY2UoVSkge1xuICAgICAgICAgIGxldCBfID0gdGhpcy5lbGVtZW50LmdyYWRpZW50ICYmIHRoaXMucmVuZGVyZXIuZ3JhZGllbnRzW3RoaXMuZWxlbWVudC5ncmFkaWVudF07XG4gICAgICAgICAgcmV0dXJuIHRoaXMuZWxlbWVudC5yYWRpYWxSZWZlcmVuY2UgPSBVLCBfICYmIF8ucmFkQXR0ciAmJiBfLmFuaW1hdGUodGhpcy5yZW5kZXJlci5nZXRSYWRpYWxBdHRyKFUsIF8ucmFkQXR0cikpLCB0aGlzO1xuICAgICAgICB9XG4gICAgICAgIHNoYWRvdyhVKSB7XG4gICAgICAgICAgdmFyIFE7XG4gICAgICAgICAgbGV0IHsgcmVuZGVyZXI6IF8gfSA9IHRoaXMsIHIxID0gQygoKFEgPSB0aGlzLnBhcmVudEdyb3VwKSA9PSBudWxsID8gdm9pZCAwIDogUS5yb3RhdGlvbikgPT09IDkwID8geyBvZmZzZXRYOiAtMSwgb2Zmc2V0WTogLTEgfSA6IHt9LCB3KFUpID8gVSA6IHt9KSwgSyA9IF8uc2hhZG93RGVmaW5pdGlvbihyMSk7XG4gICAgICAgICAgcmV0dXJuIHRoaXMuYXR0cih7IGZpbHRlcjogVSA/IGB1cmwoJHtfLnVybH0jJHtLfSlgIDogXCJub25lXCIgfSk7XG4gICAgICAgIH1cbiAgICAgICAgc2hvdyhVID0gITApIHtcbiAgICAgICAgICByZXR1cm4gdGhpcy5hdHRyKHsgdmlzaWJpbGl0eTogVSA/IFwiaW5oZXJpdFwiIDogXCJ2aXNpYmxlXCIgfSk7XG4gICAgICAgIH1cbiAgICAgICAgXCJzdHJva2Utd2lkdGhTZXR0ZXJcIihVLCBfLCByMSkge1xuICAgICAgICAgIHRoaXNbX10gPSBVLCByMS5zZXRBdHRyaWJ1dGUoXywgVSk7XG4gICAgICAgIH1cbiAgICAgICAgc3Ryb2tlV2lkdGgoKSB7XG4gICAgICAgICAgaWYgKCF0aGlzLnJlbmRlcmVyLnN0eWxlZE1vZGUpXG4gICAgICAgICAgICByZXR1cm4gdGhpc1tcInN0cm9rZS13aWR0aFwiXSB8fCAwO1xuICAgICAgICAgIGxldCBVID0gdGhpcy5nZXRTdHlsZShcInN0cm9rZS13aWR0aFwiKSwgXyA9IDAsIHIxO1xuICAgICAgICAgIHJldHVybiAvcHgkLy50ZXN0KFUpID8gXyA9IGsoVSkgOiBVICE9PSBcIlwiICYmIChPKHIxID0gTS5jcmVhdGVFbGVtZW50TlMoQSwgXCJyZWN0XCIpLCB7IHdpZHRoOiBVLCBcInN0cm9rZS13aWR0aFwiOiAwIH0pLCB0aGlzLmVsZW1lbnQucGFyZW50Tm9kZS5hcHBlbmRDaGlsZChyMSksIF8gPSByMS5nZXRCQm94KCkud2lkdGgsIHIxLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQocjEpKSwgXztcbiAgICAgICAgfVxuICAgICAgICBzeW1ib2xBdHRyKFUpIHtcbiAgICAgICAgICBsZXQgXyA9IHRoaXM7XG4gICAgICAgICAgSS5zeW1ib2xDdXN0b21BdHRyaWJzLmZvckVhY2goZnVuY3Rpb24ocjEpIHtcbiAgICAgICAgICAgIF9bcjFdID0gbShVW3IxXSwgX1tyMV0pO1xuICAgICAgICAgIH0pLCBfLmF0dHIoeyBkOiBfLnJlbmRlcmVyLnN5bWJvbHNbXy5zeW1ib2xOYW1lXShfLngsIF8ueSwgXy53aWR0aCwgXy5oZWlnaHQsIF8pIH0pO1xuICAgICAgICB9XG4gICAgICAgIHRleHRTZXR0ZXIoVSkge1xuICAgICAgICAgIFUgIT09IHRoaXMudGV4dFN0ciAmJiAoZGVsZXRlIHRoaXMudGV4dFB4TGVuZ3RoLCB0aGlzLnRleHRTdHIgPSBVLCB0aGlzLmFkZGVkICYmIHRoaXMucmVuZGVyZXIuYnVpbGRUZXh0KHRoaXMpLCB0aGlzLnJlQWxpZ24oKSk7XG4gICAgICAgIH1cbiAgICAgICAgdGl0bGVTZXR0ZXIoVSkge1xuICAgICAgICAgIGxldCBfID0gdGhpcy5lbGVtZW50LCByMSA9IF8uZ2V0RWxlbWVudHNCeVRhZ05hbWUoXCJ0aXRsZVwiKVswXSB8fCBNLmNyZWF0ZUVsZW1lbnROUyh0aGlzLlNWR19OUywgXCJ0aXRsZVwiKTtcbiAgICAgICAgICBfLmluc2VydEJlZm9yZSA/IF8uaW5zZXJ0QmVmb3JlKHIxLCBfLmZpcnN0Q2hpbGQpIDogXy5hcHBlbmRDaGlsZChyMSksIHIxLnRleHRDb250ZW50ID0gTihtKFUsIFwiXCIpLCBbLzxbXj5dKj4vZywgXCJcIl0pLnJlcGxhY2UoLyZsdDsvZywgXCI8XCIpLnJlcGxhY2UoLyZndDsvZywgXCI+XCIpO1xuICAgICAgICB9XG4gICAgICAgIHRvRnJvbnQoKSB7XG4gICAgICAgICAgbGV0IFUgPSB0aGlzLmVsZW1lbnQ7XG4gICAgICAgICAgcmV0dXJuIFUucGFyZW50Tm9kZS5hcHBlbmRDaGlsZChVKSwgdGhpcztcbiAgICAgICAgfVxuICAgICAgICB0cmFuc2xhdGUoVSwgXykge1xuICAgICAgICAgIHJldHVybiB0aGlzLmF0dHIoeyB0cmFuc2xhdGVYOiBVLCB0cmFuc2xhdGVZOiBfIH0pO1xuICAgICAgICB9XG4gICAgICAgIHVwZGF0ZVRyYW5zZm9ybShVID0gXCJ0cmFuc2Zvcm1cIikge1xuICAgICAgICAgIHZhciBQO1xuICAgICAgICAgIGxldCB7IGVsZW1lbnQ6IF8sIG1hdHJpeDogcjEsIHJvdGF0aW9uOiBLID0gMCwgcm90YXRpb25PcmlnaW5YOiBRLCByb3RhdGlvbk9yaWdpblk6IEUsIHNjYWxlWDogRCwgc2NhbGVZOiBHLCB0cmFuc2xhdGVYOiBKID0gMCwgdHJhbnNsYXRlWTogUyA9IDAgfSA9IHRoaXMsIFcgPSBbXCJ0cmFuc2xhdGUoXCIgKyBKICsgXCIsXCIgKyBTICsgXCIpXCJdO1xuICAgICAgICAgIEwocjEpICYmIFcucHVzaChcIm1hdHJpeChcIiArIHIxLmpvaW4oXCIsXCIpICsgXCIpXCIpLCBLICYmIChXLnB1c2goXCJyb3RhdGUoXCIgKyBLICsgXCIgXCIgKyBtKFEsIF8uZ2V0QXR0cmlidXRlKFwieFwiKSwgMCkgKyBcIiBcIiArIG0oRSwgXy5nZXRBdHRyaWJ1dGUoXCJ5XCIpIHx8IDApICsgXCIpXCIpLCAoKFAgPSB0aGlzLnRleHQpID09IG51bGwgPyB2b2lkIDAgOiBQLmVsZW1lbnQudGFnTmFtZSkgPT09IFwiU1BBTlwiICYmIHRoaXMudGV4dC5hdHRyKHsgcm90YXRpb246IEssIHJvdGF0aW9uT3JpZ2luWDogKFEgfHwgMCkgLSB0aGlzLnBhZGRpbmcsIHJvdGF0aW9uT3JpZ2luWTogKEUgfHwgMCkgLSB0aGlzLnBhZGRpbmcgfSkpLCAoTChEKSB8fCBMKEcpKSAmJiBXLnB1c2goXCJzY2FsZShcIiArIG0oRCwgMSkgKyBcIiBcIiArIG0oRywgMSkgKyBcIilcIiksIFcubGVuZ3RoICYmICEodGhpcy50ZXh0IHx8IHRoaXMpLnRleHRQYXRoICYmIF8uc2V0QXR0cmlidXRlKFUsIFcuam9pbihcIiBcIikpO1xuICAgICAgICB9XG4gICAgICAgIHZpc2liaWxpdHlTZXR0ZXIoVSwgXywgcjEpIHtcbiAgICAgICAgICBVID09PSBcImluaGVyaXRcIiA/IHIxLnJlbW92ZUF0dHJpYnV0ZShfKSA6IHRoaXNbX10gIT09IFUgJiYgcjEuc2V0QXR0cmlidXRlKF8sIFUpLCB0aGlzW19dID0gVTtcbiAgICAgICAgfVxuICAgICAgICB4R2V0dGVyKFUpIHtcbiAgICAgICAgICByZXR1cm4gdGhpcy5lbGVtZW50Lm5vZGVOYW1lID09PSBcImNpcmNsZVwiICYmIChVID09PSBcInhcIiA/IFUgPSBcImN4XCIgOiBVID09PSBcInlcIiAmJiAoVSA9IFwiY3lcIikpLCB0aGlzLl9kZWZhdWx0R2V0dGVyKFUpO1xuICAgICAgICB9XG4gICAgICAgIHpJbmRleFNldHRlcihVLCBfKSB7XG4gICAgICAgICAgbGV0IHIxID0gdGhpcy5yZW5kZXJlciwgSyA9IHRoaXMucGFyZW50R3JvdXAsIFEgPSAoSyB8fCByMSkuZWxlbWVudCB8fCByMS5ib3gsIEUgPSB0aGlzLmVsZW1lbnQsIEQgPSBRID09PSByMS5ib3gsIEcsIEosIFMsIFcgPSAhMSwgUCwgWSA9IHRoaXMuYWRkZWQsIFo7XG4gICAgICAgICAgaWYgKEwoVSkgPyAoRS5zZXRBdHRyaWJ1dGUoXCJkYXRhLXotaW5kZXhcIiwgVSksIFUgPSArVSwgdGhpc1tfXSA9PT0gVSAmJiAoWSA9ICExKSkgOiBMKHRoaXNbX10pICYmIEUucmVtb3ZlQXR0cmlidXRlKFwiZGF0YS16LWluZGV4XCIpLCB0aGlzW19dID0gVSwgWSkge1xuICAgICAgICAgICAgZm9yICgoVSA9IHRoaXMuekluZGV4KSAmJiBLICYmIChLLmhhbmRsZVogPSAhMCksIFogPSAoRyA9IFEuY2hpbGROb2RlcykubGVuZ3RoIC0gMTsgWiA+PSAwICYmICFXOyBaLS0pXG4gICAgICAgICAgICAgIFAgPSAhTChTID0gKEogPSBHW1pdKS5nZXRBdHRyaWJ1dGUoXCJkYXRhLXotaW5kZXhcIikpLCBKICE9PSBFICYmIChVIDwgMCAmJiBQICYmICFEICYmICFaID8gKFEuaW5zZXJ0QmVmb3JlKEUsIEdbWl0pLCBXID0gITApIDogKGsoUykgPD0gVSB8fCBQICYmICghTChVKSB8fCBVID49IDApKSAmJiAoUS5pbnNlcnRCZWZvcmUoRSwgR1taICsgMV0pLCBXID0gITApKTtcbiAgICAgICAgICAgIFcgfHwgKFEuaW5zZXJ0QmVmb3JlKEUsIEdbRCA/IDMgOiAwXSksIFcgPSAhMCk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiBXO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gSS5zeW1ib2xDdXN0b21BdHRyaWJzID0gW1wiYW5jaG9yWFwiLCBcImFuY2hvcllcIiwgXCJjbG9ja3dpc2VcIiwgXCJlbmRcIiwgXCJoZWlnaHRcIiwgXCJpbm5lclJcIiwgXCJyXCIsIFwic3RhcnRcIiwgXCJ3aWR0aFwiLCBcInhcIiwgXCJ5XCJdLCBJLnByb3RvdHlwZS5zdHJva2VTZXR0ZXIgPSBJLnByb3RvdHlwZS5maWxsU2V0dGVyLCBJLnByb3RvdHlwZS55R2V0dGVyID0gSS5wcm90b3R5cGUueEdldHRlciwgSS5wcm90b3R5cGUubWF0cml4U2V0dGVyID0gSS5wcm90b3R5cGUucm90YXRpb25PcmlnaW5YU2V0dGVyID0gSS5wcm90b3R5cGUucm90YXRpb25PcmlnaW5ZU2V0dGVyID0gSS5wcm90b3R5cGUucm90YXRpb25TZXR0ZXIgPSBJLnByb3RvdHlwZS5zY2FsZVhTZXR0ZXIgPSBJLnByb3RvdHlwZS5zY2FsZVlTZXR0ZXIgPSBJLnByb3RvdHlwZS50cmFuc2xhdGVYU2V0dGVyID0gSS5wcm90b3R5cGUudHJhbnNsYXRlWVNldHRlciA9IEkucHJvdG90eXBlLnZlcnRpY2FsQWxpZ25TZXR0ZXIgPSBmdW5jdGlvbihqLCBVKSB7XG4gICAgICAgIHRoaXNbVV0gPSBqLCB0aGlzLmRvVHJhbnNmb3JtID0gITA7XG4gICAgICB9LCBJO1xuICAgIH0pLCBuKG8sIFwiQ29yZS9SZW5kZXJlci9TVkcvU1ZHTGFiZWwuanNcIiwgW29bXCJDb3JlL1JlbmRlcmVyL1NWRy9TVkdFbGVtZW50LmpzXCJdLCBvW1wiQ29yZS9VdGlsaXRpZXMuanNcIl1dLCBmdW5jdGlvbihyLCBpKSB7XG4gICAgICBsZXQgeyBkZWZpbmVkOiBhLCBleHRlbmQ6IHMsIGlzTnVtYmVyOiBsLCBtZXJnZTogcCwgcGljazogZCwgcmVtb3ZlRXZlbnQ6IGIgfSA9IGk7XG4gICAgICBjbGFzcyBNIGV4dGVuZHMgciB7XG4gICAgICAgIGNvbnN0cnVjdG9yKEEsIHosIGYsIE8sIGgsIGcsIHYsIEwsIHksIEIpIHtcbiAgICAgICAgICBsZXQgWDtcbiAgICAgICAgICBzdXBlcihBLCBcImdcIiksIHRoaXMucGFkZGluZ0xlZnRTZXR0ZXIgPSB0aGlzLnBhZGRpbmdTZXR0ZXIsIHRoaXMucGFkZGluZ1JpZ2h0U2V0dGVyID0gdGhpcy5wYWRkaW5nU2V0dGVyLCB0aGlzLmRvVXBkYXRlID0gITEsIHRoaXMudGV4dFN0ciA9IHosIHRoaXMueCA9IGYsIHRoaXMueSA9IE8sIHRoaXMuYW5jaG9yWCA9IGcsIHRoaXMuYW5jaG9yWSA9IHYsIHRoaXMuYmFzZWxpbmUgPSB5LCB0aGlzLmNsYXNzTmFtZSA9IEIsIHRoaXMuYWRkQ2xhc3MoQiA9PT0gXCJidXR0b25cIiA/IFwiaGlnaGNoYXJ0cy1uby10b29sdGlwXCIgOiBcImhpZ2hjaGFydHMtbGFiZWxcIiksIEIgJiYgdGhpcy5hZGRDbGFzcyhcImhpZ2hjaGFydHMtXCIgKyBCKSwgdGhpcy50ZXh0ID0gQS50ZXh0KHZvaWQgMCwgMCwgMCwgTCkuYXR0cih7IHpJbmRleDogMSB9KSwgdHlwZW9mIGggPT0gXCJzdHJpbmdcIiAmJiAoKFggPSAvXnVybFxcKCguKj8pXFwpJC8udGVzdChoKSkgfHwgdGhpcy5yZW5kZXJlci5zeW1ib2xzW2hdKSAmJiAodGhpcy5zeW1ib2xLZXkgPSBoKSwgdGhpcy5iQm94ID0gTS5lbXB0eUJCb3gsIHRoaXMucGFkZGluZyA9IDMsIHRoaXMuYmFzZWxpbmVPZmZzZXQgPSAwLCB0aGlzLm5lZWRzQm94ID0gQS5zdHlsZWRNb2RlIHx8IFgsIHRoaXMuZGVmZXJyZWRBdHRyID0ge30sIHRoaXMuYWxpZ25GYWN0b3IgPSAwO1xuICAgICAgICB9XG4gICAgICAgIGFsaWduU2V0dGVyKEEpIHtcbiAgICAgICAgICBsZXQgeiA9IHsgbGVmdDogMCwgY2VudGVyOiAwLjUsIHJpZ2h0OiAxIH1bQV07XG4gICAgICAgICAgeiAhPT0gdGhpcy5hbGlnbkZhY3RvciAmJiAodGhpcy5hbGlnbkZhY3RvciA9IHosIHRoaXMuYkJveCAmJiBsKHRoaXMueFNldHRpbmcpICYmIHRoaXMuYXR0cih7IHg6IHRoaXMueFNldHRpbmcgfSkpO1xuICAgICAgICB9XG4gICAgICAgIGFuY2hvclhTZXR0ZXIoQSwgeikge1xuICAgICAgICAgIHRoaXMuYW5jaG9yWCA9IEEsIHRoaXMuYm94QXR0cih6LCBNYXRoLnJvdW5kKEEpIC0gdGhpcy5nZXRDcmlzcEFkanVzdCgpIC0gdGhpcy54U2V0dGluZyk7XG4gICAgICAgIH1cbiAgICAgICAgYW5jaG9yWVNldHRlcihBLCB6KSB7XG4gICAgICAgICAgdGhpcy5hbmNob3JZID0gQSwgdGhpcy5ib3hBdHRyKHosIEEgLSB0aGlzLnlTZXR0aW5nKTtcbiAgICAgICAgfVxuICAgICAgICBib3hBdHRyKEEsIHopIHtcbiAgICAgICAgICB0aGlzLmJveCA/IHRoaXMuYm94LmF0dHIoQSwgeikgOiB0aGlzLmRlZmVycmVkQXR0cltBXSA9IHo7XG4gICAgICAgIH1cbiAgICAgICAgY3NzKEEpIHtcbiAgICAgICAgICBpZiAoQSkge1xuICAgICAgICAgICAgbGV0IHogPSB7fTtcbiAgICAgICAgICAgIEEgPSBwKEEpLCBNLnRleHRQcm9wcy5mb3JFYWNoKChmKSA9PiB7XG4gICAgICAgICAgICAgIEFbZl0gIT09IHZvaWQgMCAmJiAoeltmXSA9IEFbZl0sIGRlbGV0ZSBBW2ZdKTtcbiAgICAgICAgICAgIH0pLCB0aGlzLnRleHQuY3NzKHopLCBcImZvbnRTaXplXCIgaW4geiB8fCBcImZvbnRXZWlnaHRcIiBpbiB6ID8gdGhpcy51cGRhdGVUZXh0UGFkZGluZygpIDogKFwid2lkdGhcIiBpbiB6IHx8IFwidGV4dE92ZXJmbG93XCIgaW4geikgJiYgdGhpcy51cGRhdGVCb3hTaXplKCk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiByLnByb3RvdHlwZS5jc3MuY2FsbCh0aGlzLCBBKTtcbiAgICAgICAgfVxuICAgICAgICBkZXN0cm95KCkge1xuICAgICAgICAgIGIodGhpcy5lbGVtZW50LCBcIm1vdXNlZW50ZXJcIiksIGIodGhpcy5lbGVtZW50LCBcIm1vdXNlbGVhdmVcIiksIHRoaXMudGV4dCAmJiB0aGlzLnRleHQuZGVzdHJveSgpLCB0aGlzLmJveCAmJiAodGhpcy5ib3ggPSB0aGlzLmJveC5kZXN0cm95KCkpLCByLnByb3RvdHlwZS5kZXN0cm95LmNhbGwodGhpcyk7XG4gICAgICAgIH1cbiAgICAgICAgZmlsbFNldHRlcihBLCB6KSB7XG4gICAgICAgICAgQSAmJiAodGhpcy5uZWVkc0JveCA9ICEwKSwgdGhpcy5maWxsID0gQSwgdGhpcy5ib3hBdHRyKHosIEEpO1xuICAgICAgICB9XG4gICAgICAgIGdldEJCb3goQSwgeikge1xuICAgICAgICAgIHRoaXMudGV4dFN0ciAmJiB0aGlzLmJCb3gud2lkdGggPT09IDAgJiYgdGhpcy5iQm94LmhlaWdodCA9PT0gMCAmJiB0aGlzLnVwZGF0ZUJveFNpemUoKTtcbiAgICAgICAgICBsZXQgeyBwYWRkaW5nOiBmLCBoZWlnaHQ6IE8gPSAwLCB0cmFuc2xhdGVYOiBoID0gMCwgdHJhbnNsYXRlWTogZyA9IDAsIHdpZHRoOiB2ID0gMCB9ID0gdGhpcywgTCA9IGQodGhpcy5wYWRkaW5nTGVmdCwgZiksIHkgPSB6ID8/ICh0aGlzLnJvdGF0aW9uIHx8IDApLCBCID0geyB3aWR0aDogdiwgaGVpZ2h0OiBPLCB4OiBoICsgdGhpcy5iQm94LnggLSBMLCB5OiBnICsgdGhpcy5iQm94LnkgLSBmICsgdGhpcy5iYXNlbGluZU9mZnNldCB9O1xuICAgICAgICAgIHJldHVybiB5ICYmIChCID0gdGhpcy5nZXRSb3RhdGVkQm94KEIsIHkpKSwgQjtcbiAgICAgICAgfVxuICAgICAgICBnZXRDcmlzcEFkanVzdCgpIHtcbiAgICAgICAgICByZXR1cm4gKHRoaXMucmVuZGVyZXIuc3R5bGVkTW9kZSAmJiB0aGlzLmJveCA/IHRoaXMuYm94LnN0cm9rZVdpZHRoKCkgOiB0aGlzW1wic3Ryb2tlLXdpZHRoXCJdID8gcGFyc2VJbnQodGhpc1tcInN0cm9rZS13aWR0aFwiXSwgMTApIDogMCkgJSAyIC8gMjtcbiAgICAgICAgfVxuICAgICAgICBoZWlnaHRTZXR0ZXIoQSkge1xuICAgICAgICAgIHRoaXMuaGVpZ2h0U2V0dGluZyA9IEEsIHRoaXMuZG9VcGRhdGUgPSAhMDtcbiAgICAgICAgfVxuICAgICAgICBhZnRlclNldHRlcnMoKSB7XG4gICAgICAgICAgc3VwZXIuYWZ0ZXJTZXR0ZXJzKCksIHRoaXMuZG9VcGRhdGUgJiYgKHRoaXMudXBkYXRlQm94U2l6ZSgpLCB0aGlzLmRvVXBkYXRlID0gITEpO1xuICAgICAgICB9XG4gICAgICAgIG9uQWRkKCkge1xuICAgICAgICAgIHRoaXMudGV4dC5hZGQodGhpcyksIHRoaXMuYXR0cih7IHRleHQ6IGQodGhpcy50ZXh0U3RyLCBcIlwiKSwgeDogdGhpcy54IHx8IDAsIHk6IHRoaXMueSB8fCAwIH0pLCB0aGlzLmJveCAmJiBhKHRoaXMuYW5jaG9yWCkgJiYgdGhpcy5hdHRyKHsgYW5jaG9yWDogdGhpcy5hbmNob3JYLCBhbmNob3JZOiB0aGlzLmFuY2hvclkgfSk7XG4gICAgICAgIH1cbiAgICAgICAgcGFkZGluZ1NldHRlcihBLCB6KSB7XG4gICAgICAgICAgbChBKSA/IEEgIT09IHRoaXNbel0gJiYgKHRoaXNbel0gPSBBLCB0aGlzLnVwZGF0ZVRleHRQYWRkaW5nKCkpIDogdGhpc1t6XSA9IHZvaWQgMDtcbiAgICAgICAgfVxuICAgICAgICByU2V0dGVyKEEsIHopIHtcbiAgICAgICAgICB0aGlzLmJveEF0dHIoeiwgQSk7XG4gICAgICAgIH1cbiAgICAgICAgc3Ryb2tlU2V0dGVyKEEsIHopIHtcbiAgICAgICAgICB0aGlzLnN0cm9rZSA9IEEsIHRoaXMuYm94QXR0cih6LCBBKTtcbiAgICAgICAgfVxuICAgICAgICBcInN0cm9rZS13aWR0aFNldHRlclwiKEEsIHopIHtcbiAgICAgICAgICBBICYmICh0aGlzLm5lZWRzQm94ID0gITApLCB0aGlzW1wic3Ryb2tlLXdpZHRoXCJdID0gQSwgdGhpcy5ib3hBdHRyKHosIEEpO1xuICAgICAgICB9XG4gICAgICAgIFwidGV4dC1hbGlnblNldHRlclwiKEEpIHtcbiAgICAgICAgICB0aGlzLnRleHRBbGlnbiA9IEE7XG4gICAgICAgIH1cbiAgICAgICAgdGV4dFNldHRlcihBKSB7XG4gICAgICAgICAgQSAhPT0gdm9pZCAwICYmIHRoaXMudGV4dC5hdHRyKHsgdGV4dDogQSB9KSwgdGhpcy51cGRhdGVUZXh0UGFkZGluZygpLCB0aGlzLnJlQWxpZ24oKTtcbiAgICAgICAgfVxuICAgICAgICB1cGRhdGVCb3hTaXplKCkge1xuICAgICAgICAgIGxldCBBLCB6ID0gdGhpcy50ZXh0LCBmID0ge30sIE8gPSB0aGlzLnBhZGRpbmcsIGggPSB0aGlzLmJCb3ggPSAoIWwodGhpcy53aWR0aFNldHRpbmcpIHx8ICFsKHRoaXMuaGVpZ2h0U2V0dGluZykgfHwgdGhpcy50ZXh0QWxpZ24pICYmIGEoei50ZXh0U3RyKSA/IHouZ2V0QkJveCh2b2lkIDAsIDApIDogTS5lbXB0eUJCb3g7XG4gICAgICAgICAgdGhpcy53aWR0aCA9IHRoaXMuZ2V0UGFkZGVkV2lkdGgoKSwgdGhpcy5oZWlnaHQgPSAodGhpcy5oZWlnaHRTZXR0aW5nIHx8IGguaGVpZ2h0IHx8IDApICsgMiAqIE87XG4gICAgICAgICAgbGV0IGcgPSB0aGlzLnJlbmRlcmVyLmZvbnRNZXRyaWNzKHopO1xuICAgICAgICAgIGlmICh0aGlzLmJhc2VsaW5lT2Zmc2V0ID0gTyArIE1hdGgubWluKCh0aGlzLnRleHQuZmlyc3RMaW5lTWV0cmljcyB8fCBnKS5iLCBoLmhlaWdodCB8fCAxIC8gMCksIHRoaXMuaGVpZ2h0U2V0dGluZyAmJiAodGhpcy5iYXNlbGluZU9mZnNldCArPSAodGhpcy5oZWlnaHRTZXR0aW5nIC0gZy5oKSAvIDIpLCB0aGlzLm5lZWRzQm94ICYmICF6LnRleHRQYXRoKSB7XG4gICAgICAgICAgICBpZiAoIXRoaXMuYm94KSB7XG4gICAgICAgICAgICAgIGxldCB2ID0gdGhpcy5ib3ggPSB0aGlzLnN5bWJvbEtleSA/IHRoaXMucmVuZGVyZXIuc3ltYm9sKHRoaXMuc3ltYm9sS2V5KSA6IHRoaXMucmVuZGVyZXIucmVjdCgpO1xuICAgICAgICAgICAgICB2LmFkZENsYXNzKCh0aGlzLmNsYXNzTmFtZSA9PT0gXCJidXR0b25cIiA/IFwiXCIgOiBcImhpZ2hjaGFydHMtbGFiZWwtYm94XCIpICsgKHRoaXMuY2xhc3NOYW1lID8gXCIgaGlnaGNoYXJ0cy1cIiArIHRoaXMuY2xhc3NOYW1lICsgXCItYm94XCIgOiBcIlwiKSksIHYuYWRkKHRoaXMpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgQSA9IHRoaXMuZ2V0Q3Jpc3BBZGp1c3QoKSwgZi54ID0gQSwgZi55ID0gKHRoaXMuYmFzZWxpbmUgPyAtdGhpcy5iYXNlbGluZU9mZnNldCA6IDApICsgQSwgZi53aWR0aCA9IE1hdGgucm91bmQodGhpcy53aWR0aCksIGYuaGVpZ2h0ID0gTWF0aC5yb3VuZCh0aGlzLmhlaWdodCksIHRoaXMuYm94LmF0dHIocyhmLCB0aGlzLmRlZmVycmVkQXR0cikpLCB0aGlzLmRlZmVycmVkQXR0ciA9IHt9O1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICB1cGRhdGVUZXh0UGFkZGluZygpIHtcbiAgICAgICAgICBsZXQgQSA9IHRoaXMudGV4dDtcbiAgICAgICAgICBpZiAoIUEudGV4dFBhdGgpIHtcbiAgICAgICAgICAgIHRoaXMudXBkYXRlQm94U2l6ZSgpO1xuICAgICAgICAgICAgbGV0IHogPSB0aGlzLmJhc2VsaW5lID8gMCA6IHRoaXMuYmFzZWxpbmVPZmZzZXQsIGYgPSBkKHRoaXMucGFkZGluZ0xlZnQsIHRoaXMucGFkZGluZyk7XG4gICAgICAgICAgICBhKHRoaXMud2lkdGhTZXR0aW5nKSAmJiB0aGlzLmJCb3ggJiYgKHRoaXMudGV4dEFsaWduID09PSBcImNlbnRlclwiIHx8IHRoaXMudGV4dEFsaWduID09PSBcInJpZ2h0XCIpICYmIChmICs9IHsgY2VudGVyOiAwLjUsIHJpZ2h0OiAxIH1bdGhpcy50ZXh0QWxpZ25dICogKHRoaXMud2lkdGhTZXR0aW5nIC0gdGhpcy5iQm94LndpZHRoKSksIChmICE9PSBBLnggfHwgeiAhPT0gQS55KSAmJiAoQS5hdHRyKFwieFwiLCBmKSwgQS5oYXNCb3hXaWR0aENoYW5nZWQgJiYgKHRoaXMuYkJveCA9IEEuZ2V0QkJveCghMCkpLCB6ICE9PSB2b2lkIDAgJiYgQS5hdHRyKFwieVwiLCB6KSksIEEueCA9IGYsIEEueSA9IHo7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHdpZHRoU2V0dGVyKEEpIHtcbiAgICAgICAgICB0aGlzLndpZHRoU2V0dGluZyA9IGwoQSkgPyBBIDogdm9pZCAwLCB0aGlzLmRvVXBkYXRlID0gITA7XG4gICAgICAgIH1cbiAgICAgICAgZ2V0UGFkZGVkV2lkdGgoKSB7XG4gICAgICAgICAgbGV0IEEgPSB0aGlzLnBhZGRpbmcsIHogPSBkKHRoaXMucGFkZGluZ0xlZnQsIEEpLCBmID0gZCh0aGlzLnBhZGRpbmdSaWdodCwgQSk7XG4gICAgICAgICAgcmV0dXJuICh0aGlzLndpZHRoU2V0dGluZyB8fCB0aGlzLmJCb3gud2lkdGggfHwgMCkgKyB6ICsgZjtcbiAgICAgICAgfVxuICAgICAgICB4U2V0dGVyKEEpIHtcbiAgICAgICAgICB0aGlzLnggPSBBLCB0aGlzLmFsaWduRmFjdG9yICYmIChBIC09IHRoaXMuYWxpZ25GYWN0b3IgKiB0aGlzLmdldFBhZGRlZFdpZHRoKCksIHRoaXNbXCJmb3JjZUFuaW1hdGU6eFwiXSA9ICEwKSwgdGhpcy54U2V0dGluZyA9IE1hdGgucm91bmQoQSksIHRoaXMuYXR0cihcInRyYW5zbGF0ZVhcIiwgdGhpcy54U2V0dGluZyk7XG4gICAgICAgIH1cbiAgICAgICAgeVNldHRlcihBKSB7XG4gICAgICAgICAgdGhpcy55U2V0dGluZyA9IHRoaXMueSA9IE1hdGgucm91bmQoQSksIHRoaXMuYXR0cihcInRyYW5zbGF0ZVlcIiwgdGhpcy55U2V0dGluZyk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiBNLmVtcHR5QkJveCA9IHsgd2lkdGg6IDAsIGhlaWdodDogMCwgeDogMCwgeTogMCB9LCBNLnRleHRQcm9wcyA9IFtcImNvbG9yXCIsIFwiZGlyZWN0aW9uXCIsIFwiZm9udEZhbWlseVwiLCBcImZvbnRTaXplXCIsIFwiZm9udFN0eWxlXCIsIFwiZm9udFdlaWdodFwiLCBcImxpbmVIZWlnaHRcIiwgXCJ0ZXh0QWxpZ25cIiwgXCJ0ZXh0RGVjb3JhdGlvblwiLCBcInRleHRPdXRsaW5lXCIsIFwidGV4dE92ZXJmbG93XCIsIFwid2hpdGVTcGFjZVwiLCBcIndpZHRoXCJdLCBNO1xuICAgIH0pLCBuKG8sIFwiQ29yZS9SZW5kZXJlci9TVkcvU3ltYm9scy5qc1wiLCBbb1tcIkNvcmUvVXRpbGl0aWVzLmpzXCJdXSwgZnVuY3Rpb24ocikge1xuICAgICAgbGV0IHsgZGVmaW5lZDogaSwgaXNOdW1iZXI6IGEsIHBpY2s6IHMgfSA9IHI7XG4gICAgICBmdW5jdGlvbiBsKGIsIE0sIHUsIEEsIHopIHtcbiAgICAgICAgbGV0IGYgPSBbXTtcbiAgICAgICAgaWYgKHopIHtcbiAgICAgICAgICBsZXQgTyA9IHouc3RhcnQgfHwgMCwgaCA9IHMoei5yLCB1KSwgZyA9IHMoei5yLCBBIHx8IHUpLCB2ID0gMmUtNCAvICh6LmJvcmRlclJhZGl1cyA/IDEgOiBNYXRoLm1heChoLCAxKSksIEwgPSBNYXRoLmFicygoei5lbmQgfHwgMCkgLSBPIC0gMiAqIE1hdGguUEkpIDwgdiwgeSA9ICh6LmVuZCB8fCAwKSAtIChMID8gdiA6IDApLCBCID0gei5pbm5lclIsIFggPSBzKHoub3BlbiwgTCksIEYgPSBNYXRoLmNvcyhPKSwgVCA9IE1hdGguc2luKE8pLCB3ID0gTWF0aC5jb3MoeSksIEggPSBNYXRoLnNpbih5KSwgQyA9IHMoei5sb25nQXJjLCB5IC0gTyAtIE1hdGguUEkgPCB2ID8gMCA6IDEpLCBxID0gW1wiQVwiLCBoLCBnLCAwLCBDLCBzKHouY2xvY2t3aXNlLCAxKSwgYiArIGggKiB3LCBNICsgZyAqIEhdO1xuICAgICAgICAgIHEucGFyYW1zID0geyBzdGFydDogTywgZW5kOiB5LCBjeDogYiwgY3k6IE0gfSwgZi5wdXNoKFtcIk1cIiwgYiArIGggKiBGLCBNICsgZyAqIFRdLCBxKSwgaShCKSAmJiAoKHEgPSBbXCJBXCIsIEIsIEIsIDAsIEMsIGkoei5jbG9ja3dpc2UpID8gMSAtIHouY2xvY2t3aXNlIDogMCwgYiArIEIgKiBGLCBNICsgQiAqIFRdKS5wYXJhbXMgPSB7IHN0YXJ0OiB5LCBlbmQ6IE8sIGN4OiBiLCBjeTogTSB9LCBmLnB1c2goWCA/IFtcIk1cIiwgYiArIEIgKiB3LCBNICsgQiAqIEhdIDogW1wiTFwiLCBiICsgQiAqIHcsIE0gKyBCICogSF0sIHEpKSwgWCB8fCBmLnB1c2goW1wiWlwiXSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGY7XG4gICAgICB9XG4gICAgICBmdW5jdGlvbiBwKGIsIE0sIHUsIEEsIHopIHtcbiAgICAgICAgcmV0dXJuIHogJiYgei5yID8gZChiLCBNLCB1LCBBLCB6KSA6IFtbXCJNXCIsIGIsIE1dLCBbXCJMXCIsIGIgKyB1LCBNXSwgW1wiTFwiLCBiICsgdSwgTSArIEFdLCBbXCJMXCIsIGIsIE0gKyBBXSwgW1wiWlwiXV07XG4gICAgICB9XG4gICAgICBmdW5jdGlvbiBkKGIsIE0sIHUsIEEsIHopIHtcbiAgICAgICAgbGV0IGYgPSAoeiA9PSBudWxsID8gdm9pZCAwIDogei5yKSB8fCAwO1xuICAgICAgICByZXR1cm4gW1tcIk1cIiwgYiArIGYsIE1dLCBbXCJMXCIsIGIgKyB1IC0gZiwgTV0sIFtcIkFcIiwgZiwgZiwgMCwgMCwgMSwgYiArIHUsIE0gKyBmXSwgW1wiTFwiLCBiICsgdSwgTSArIEEgLSBmXSwgW1wiQVwiLCBmLCBmLCAwLCAwLCAxLCBiICsgdSAtIGYsIE0gKyBBXSwgW1wiTFwiLCBiICsgZiwgTSArIEFdLCBbXCJBXCIsIGYsIGYsIDAsIDAsIDEsIGIsIE0gKyBBIC0gZl0sIFtcIkxcIiwgYiwgTSArIGZdLCBbXCJBXCIsIGYsIGYsIDAsIDAsIDEsIGIgKyBmLCBNXSwgW1wiWlwiXV07XG4gICAgICB9XG4gICAgICByZXR1cm4geyBhcmM6IGwsIGNhbGxvdXQ6IGZ1bmN0aW9uKGIsIE0sIHUsIEEsIHopIHtcbiAgICAgICAgbGV0IGYgPSBNYXRoLm1pbih6ICYmIHouciB8fCAwLCB1LCBBKSwgTyA9IGYgKyA2LCBoID0geiAmJiB6LmFuY2hvclgsIGcgPSB6ICYmIHouYW5jaG9yWSB8fCAwLCB2ID0gZChiLCBNLCB1LCBBLCB7IHI6IGYgfSk7XG4gICAgICAgIGlmICghYShoKSB8fCBoIDwgdSAmJiBoID4gMCAmJiBnIDwgQSAmJiBnID4gMClcbiAgICAgICAgICByZXR1cm4gdjtcbiAgICAgICAgaWYgKGIgKyBoID4gdSAtIE8pXG4gICAgICAgICAgaWYgKGcgPiBNICsgTyAmJiBnIDwgTSArIEEgLSBPKVxuICAgICAgICAgICAgdi5zcGxpY2UoMywgMSwgW1wiTFwiLCBiICsgdSwgZyAtIDZdLCBbXCJMXCIsIGIgKyB1ICsgNiwgZ10sIFtcIkxcIiwgYiArIHUsIGcgKyA2XSwgW1wiTFwiLCBiICsgdSwgTSArIEEgLSBmXSk7XG4gICAgICAgICAgZWxzZSBpZiAoaCA8IHUpIHtcbiAgICAgICAgICAgIGxldCBMID0gZyA8IE0gKyBPLCB5ID0gTCA/IE0gOiBNICsgQTtcbiAgICAgICAgICAgIHYuc3BsaWNlKEwgPyAyIDogNSwgMCwgW1wiTFwiLCBoLCBnXSwgW1wiTFwiLCBiICsgdSAtIGYsIHldKTtcbiAgICAgICAgICB9IGVsc2VcbiAgICAgICAgICAgIHYuc3BsaWNlKDMsIDEsIFtcIkxcIiwgYiArIHUsIEEgLyAyXSwgW1wiTFwiLCBoLCBnXSwgW1wiTFwiLCBiICsgdSwgQSAvIDJdLCBbXCJMXCIsIGIgKyB1LCBNICsgQSAtIGZdKTtcbiAgICAgICAgZWxzZSBpZiAoYiArIGggPCBPKVxuICAgICAgICAgIGlmIChnID4gTSArIE8gJiYgZyA8IE0gKyBBIC0gTylcbiAgICAgICAgICAgIHYuc3BsaWNlKDcsIDEsIFtcIkxcIiwgYiwgZyArIDZdLCBbXCJMXCIsIGIgLSA2LCBnXSwgW1wiTFwiLCBiLCBnIC0gNl0sIFtcIkxcIiwgYiwgTSArIGZdKTtcbiAgICAgICAgICBlbHNlIGlmIChoID4gMCkge1xuICAgICAgICAgICAgbGV0IEwgPSBnIDwgTSArIE8sIHkgPSBMID8gTSA6IE0gKyBBO1xuICAgICAgICAgICAgdi5zcGxpY2UoTCA/IDEgOiA2LCAwLCBbXCJMXCIsIGgsIGddLCBbXCJMXCIsIGIgKyBmLCB5XSk7XG4gICAgICAgICAgfSBlbHNlXG4gICAgICAgICAgICB2LnNwbGljZSg3LCAxLCBbXCJMXCIsIGIsIEEgLyAyXSwgW1wiTFwiLCBoLCBnXSwgW1wiTFwiLCBiLCBBIC8gMl0sIFtcIkxcIiwgYiwgTSArIGZdKTtcbiAgICAgICAgZWxzZVxuICAgICAgICAgIGcgPiBBICYmIGggPCB1IC0gTyA/IHYuc3BsaWNlKDUsIDEsIFtcIkxcIiwgaCArIDYsIE0gKyBBXSwgW1wiTFwiLCBoLCBNICsgQSArIDZdLCBbXCJMXCIsIGggLSA2LCBNICsgQV0sIFtcIkxcIiwgYiArIGYsIE0gKyBBXSkgOiBnIDwgMCAmJiBoID4gTyAmJiB2LnNwbGljZSgxLCAxLCBbXCJMXCIsIGggLSA2LCBNXSwgW1wiTFwiLCBoLCBNIC0gNl0sIFtcIkxcIiwgaCArIDYsIE1dLCBbXCJMXCIsIHUgLSBmLCBNXSk7XG4gICAgICAgIHJldHVybiB2O1xuICAgICAgfSwgY2lyY2xlOiBmdW5jdGlvbihiLCBNLCB1LCBBKSB7XG4gICAgICAgIHJldHVybiBsKGIgKyB1IC8gMiwgTSArIEEgLyAyLCB1IC8gMiwgQSAvIDIsIHsgc3RhcnQ6IDAuNSAqIE1hdGguUEksIGVuZDogMi41ICogTWF0aC5QSSwgb3BlbjogITEgfSk7XG4gICAgICB9LCBkaWFtb25kOiBmdW5jdGlvbihiLCBNLCB1LCBBKSB7XG4gICAgICAgIHJldHVybiBbW1wiTVwiLCBiICsgdSAvIDIsIE1dLCBbXCJMXCIsIGIgKyB1LCBNICsgQSAvIDJdLCBbXCJMXCIsIGIgKyB1IC8gMiwgTSArIEFdLCBbXCJMXCIsIGIsIE0gKyBBIC8gMl0sIFtcIlpcIl1dO1xuICAgICAgfSwgcmVjdDogcCwgcm91bmRlZFJlY3Q6IGQsIHNxdWFyZTogcCwgdHJpYW5nbGU6IGZ1bmN0aW9uKGIsIE0sIHUsIEEpIHtcbiAgICAgICAgcmV0dXJuIFtbXCJNXCIsIGIgKyB1IC8gMiwgTV0sIFtcIkxcIiwgYiArIHUsIE0gKyBBXSwgW1wiTFwiLCBiLCBNICsgQV0sIFtcIlpcIl1dO1xuICAgICAgfSwgXCJ0cmlhbmdsZS1kb3duXCI6IGZ1bmN0aW9uKGIsIE0sIHUsIEEpIHtcbiAgICAgICAgcmV0dXJuIFtbXCJNXCIsIGIsIE1dLCBbXCJMXCIsIGIgKyB1LCBNXSwgW1wiTFwiLCBiICsgdSAvIDIsIE0gKyBBXSwgW1wiWlwiXV07XG4gICAgICB9IH07XG4gICAgfSksIG4obywgXCJDb3JlL1JlbmRlcmVyL1NWRy9UZXh0QnVpbGRlci5qc1wiLCBbb1tcIkNvcmUvUmVuZGVyZXIvSFRNTC9BU1QuanNcIl0sIG9bXCJDb3JlL0dsb2JhbHMuanNcIl0sIG9bXCJDb3JlL1V0aWxpdGllcy5qc1wiXV0sIGZ1bmN0aW9uKHIsIGksIGEpIHtcbiAgICAgIGxldCB7IGRvYzogcywgU1ZHX05TOiBsLCB3aW46IHAgfSA9IGksIHsgYXR0cjogZCwgZXh0ZW5kOiBiLCBmaXJlRXZlbnQ6IE0sIGlzU3RyaW5nOiB1LCBvYmplY3RFYWNoOiBBLCBwaWNrOiB6IH0gPSBhO1xuICAgICAgcmV0dXJuIGNsYXNzIHtcbiAgICAgICAgY29uc3RydWN0b3IoZikge1xuICAgICAgICAgIGxldCBPID0gZi5zdHlsZXM7XG4gICAgICAgICAgdGhpcy5yZW5kZXJlciA9IGYucmVuZGVyZXIsIHRoaXMuc3ZnRWxlbWVudCA9IGYsIHRoaXMud2lkdGggPSBmLnRleHRXaWR0aCwgdGhpcy50ZXh0TGluZUhlaWdodCA9IE8gJiYgTy5saW5lSGVpZ2h0LCB0aGlzLnRleHRPdXRsaW5lID0gTyAmJiBPLnRleHRPdXRsaW5lLCB0aGlzLmVsbGlwc2lzID0gISEoTyAmJiBPLnRleHRPdmVyZmxvdyA9PT0gXCJlbGxpcHNpc1wiKSwgdGhpcy5ub1dyYXAgPSAhIShPICYmIE8ud2hpdGVTcGFjZSA9PT0gXCJub3dyYXBcIik7XG4gICAgICAgIH1cbiAgICAgICAgYnVpbGRTVkcoKSB7XG4gICAgICAgICAgbGV0IGYgPSB0aGlzLnN2Z0VsZW1lbnQsIE8gPSBmLmVsZW1lbnQsIGggPSBmLnJlbmRlcmVyLCBnID0geihmLnRleHRTdHIsIFwiXCIpLnRvU3RyaW5nKCksIHYgPSBnLmluZGV4T2YoXCI8XCIpICE9PSAtMSwgTCA9IE8uY2hpbGROb2RlcywgeSA9ICFmLmFkZGVkICYmIGguYm94LCBCID0gW2csIHRoaXMuZWxsaXBzaXMsIHRoaXMubm9XcmFwLCB0aGlzLnRleHRMaW5lSGVpZ2h0LCB0aGlzLnRleHRPdXRsaW5lLCBmLmdldFN0eWxlKFwiZm9udC1zaXplXCIpLCB0aGlzLndpZHRoXS5qb2luKFwiLFwiKTtcbiAgICAgICAgICBpZiAoQiAhPT0gZi50ZXh0Q2FjaGUpIHtcbiAgICAgICAgICAgIGYudGV4dENhY2hlID0gQiwgZGVsZXRlIGYuYWN0dWFsV2lkdGg7XG4gICAgICAgICAgICBmb3IgKGxldCBYID0gTC5sZW5ndGg7IFgtLTsgKVxuICAgICAgICAgICAgICBPLnJlbW92ZUNoaWxkKExbWF0pO1xuICAgICAgICAgICAgaWYgKHYgfHwgdGhpcy5lbGxpcHNpcyB8fCB0aGlzLndpZHRoIHx8IGYudGV4dFBhdGggfHwgZy5pbmRleE9mKFwiIFwiKSAhPT0gLTEgJiYgKCF0aGlzLm5vV3JhcCB8fCAvPGJyLio/Pi9nLnRlc3QoZykpKSB7XG4gICAgICAgICAgICAgIGlmIChnICE9PSBcIlwiKSB7XG4gICAgICAgICAgICAgICAgeSAmJiB5LmFwcGVuZENoaWxkKE8pO1xuICAgICAgICAgICAgICAgIGxldCBYID0gbmV3IHIoZyk7XG4gICAgICAgICAgICAgICAgdGhpcy5tb2RpZnlUcmVlKFgubm9kZXMpLCBYLmFkZFRvRE9NKE8pLCB0aGlzLm1vZGlmeURPTSgpLCB0aGlzLmVsbGlwc2lzICYmIChPLnRleHRDb250ZW50IHx8IFwiXCIpLmluZGV4T2YoXCLigKZcIikgIT09IC0xICYmIGYuYXR0cihcInRpdGxlXCIsIHRoaXMudW5lc2NhcGVFbnRpdGllcyhmLnRleHRTdHIgfHwgXCJcIiwgW1wiJmx0O1wiLCBcIiZndDtcIl0pKSwgeSAmJiB5LnJlbW92ZUNoaWxkKE8pO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2VcbiAgICAgICAgICAgICAgTy5hcHBlbmRDaGlsZChzLmNyZWF0ZVRleHROb2RlKHRoaXMudW5lc2NhcGVFbnRpdGllcyhnKSkpO1xuICAgICAgICAgICAgdSh0aGlzLnRleHRPdXRsaW5lKSAmJiBmLmFwcGx5VGV4dE91dGxpbmUgJiYgZi5hcHBseVRleHRPdXRsaW5lKHRoaXMudGV4dE91dGxpbmUpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBtb2RpZnlET00oKSB7XG4gICAgICAgICAgbGV0IGYsIE8gPSB0aGlzLnN2Z0VsZW1lbnQsIGggPSBkKE8uZWxlbWVudCwgXCJ4XCIpO1xuICAgICAgICAgIGZvciAoTy5maXJzdExpbmVNZXRyaWNzID0gdm9pZCAwOyAoZiA9IE8uZWxlbWVudC5maXJzdENoaWxkKSAmJiAvXltcXHNcXHUyMDBCXSokLy50ZXN0KGYudGV4dENvbnRlbnQgfHwgXCIgXCIpOyApXG4gICAgICAgICAgICBPLmVsZW1lbnQucmVtb3ZlQ2hpbGQoZik7XG4gICAgICAgICAgW10uZm9yRWFjaC5jYWxsKE8uZWxlbWVudC5xdWVyeVNlbGVjdG9yQWxsKFwidHNwYW4uaGlnaGNoYXJ0cy1iclwiKSwgKHksIEIpID0+IHtcbiAgICAgICAgICAgIHkubmV4dFNpYmxpbmcgJiYgeS5wcmV2aW91c1NpYmxpbmcgJiYgKEIgPT09IDAgJiYgeS5wcmV2aW91c1NpYmxpbmcubm9kZVR5cGUgPT09IDEgJiYgKE8uZmlyc3RMaW5lTWV0cmljcyA9IE8ucmVuZGVyZXIuZm9udE1ldHJpY3MoeS5wcmV2aW91c1NpYmxpbmcpKSwgZCh5LCB7IGR5OiB0aGlzLmdldExpbmVIZWlnaHQoeS5uZXh0U2libGluZyksIHg6IGggfSkpO1xuICAgICAgICAgIH0pO1xuICAgICAgICAgIGxldCBnID0gdGhpcy53aWR0aCB8fCAwO1xuICAgICAgICAgIGlmICghZylcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICBsZXQgdiA9ICh5LCBCKSA9PiB7XG4gICAgICAgICAgICBsZXQgWCA9IHkudGV4dENvbnRlbnQgfHwgXCJcIiwgRiA9IFgucmVwbGFjZSgvKFteXFxeXSktL2csIFwiJDEtIFwiKS5zcGxpdChcIiBcIiksIFQgPSAhdGhpcy5ub1dyYXAgJiYgKEYubGVuZ3RoID4gMSB8fCBPLmVsZW1lbnQuY2hpbGROb2Rlcy5sZW5ndGggPiAxKSwgdyA9IHRoaXMuZ2V0TGluZUhlaWdodChCKSwgSCA9IDAsIEMgPSBPLmFjdHVhbFdpZHRoO1xuICAgICAgICAgICAgaWYgKHRoaXMuZWxsaXBzaXMpXG4gICAgICAgICAgICAgIFggJiYgdGhpcy50cnVuY2F0ZSh5LCBYLCB2b2lkIDAsIDAsIE1hdGgubWF4KDAsIGcgLSAwLjggKiB3KSwgKHEsIG0pID0+IHEuc3Vic3RyaW5nKDAsIG0pICsgXCLigKZcIik7XG4gICAgICAgICAgICBlbHNlIGlmIChUKSB7XG4gICAgICAgICAgICAgIGxldCBxID0gW10sIG0gPSBbXTtcbiAgICAgICAgICAgICAgZm9yICg7IEIuZmlyc3RDaGlsZCAmJiBCLmZpcnN0Q2hpbGQgIT09IHk7IClcbiAgICAgICAgICAgICAgICBtLnB1c2goQi5maXJzdENoaWxkKSwgQi5yZW1vdmVDaGlsZChCLmZpcnN0Q2hpbGQpO1xuICAgICAgICAgICAgICBmb3IgKDsgRi5sZW5ndGg7IClcbiAgICAgICAgICAgICAgICBGLmxlbmd0aCAmJiAhdGhpcy5ub1dyYXAgJiYgSCA+IDAgJiYgKHEucHVzaCh5LnRleHRDb250ZW50IHx8IFwiXCIpLCB5LnRleHRDb250ZW50ID0gRi5qb2luKFwiIFwiKS5yZXBsYWNlKC8tIC9nLCBcIi1cIikpLCB0aGlzLnRydW5jYXRlKHksIHZvaWQgMCwgRiwgSCA9PT0gMCAmJiBDIHx8IDAsIGcsIChrLCB4KSA9PiBGLnNsaWNlKDAsIHgpLmpvaW4oXCIgXCIpLnJlcGxhY2UoLy0gL2csIFwiLVwiKSksIEMgPSBPLmFjdHVhbFdpZHRoLCBIKys7XG4gICAgICAgICAgICAgIG0uZm9yRWFjaCgoaykgPT4ge1xuICAgICAgICAgICAgICAgIEIuaW5zZXJ0QmVmb3JlKGssIHkpO1xuICAgICAgICAgICAgICB9KSwgcS5mb3JFYWNoKChrKSA9PiB7XG4gICAgICAgICAgICAgICAgQi5pbnNlcnRCZWZvcmUocy5jcmVhdGVUZXh0Tm9kZShrKSwgeSk7XG4gICAgICAgICAgICAgICAgbGV0IHggPSBzLmNyZWF0ZUVsZW1lbnROUyhsLCBcInRzcGFuXCIpO1xuICAgICAgICAgICAgICAgIHgudGV4dENvbnRlbnQgPSBcIuKAi1wiLCBkKHgsIHsgZHk6IHcsIHg6IGggfSksIEIuaW5zZXJ0QmVmb3JlKHgsIHkpO1xuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9LCBMID0gKHkpID0+IHtcbiAgICAgICAgICAgIFtdLnNsaWNlLmNhbGwoeS5jaGlsZE5vZGVzKS5mb3JFYWNoKChCKSA9PiB7XG4gICAgICAgICAgICAgIEIubm9kZVR5cGUgPT09IHAuTm9kZS5URVhUX05PREUgPyB2KEIsIHkpIDogKEIuY2xhc3NOYW1lLmJhc2VWYWwuaW5kZXhPZihcImhpZ2hjaGFydHMtYnJcIikgIT09IC0xICYmIChPLmFjdHVhbFdpZHRoID0gMCksIEwoQikpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfTtcbiAgICAgICAgICBMKE8uZWxlbWVudCk7XG4gICAgICAgIH1cbiAgICAgICAgZ2V0TGluZUhlaWdodChmKSB7XG4gICAgICAgICAgbGV0IE8gPSBmLm5vZGVUeXBlID09PSBwLk5vZGUuVEVYVF9OT0RFID8gZi5wYXJlbnRFbGVtZW50IDogZjtcbiAgICAgICAgICByZXR1cm4gdGhpcy50ZXh0TGluZUhlaWdodCA/IHBhcnNlSW50KHRoaXMudGV4dExpbmVIZWlnaHQudG9TdHJpbmcoKSwgMTApIDogdGhpcy5yZW5kZXJlci5mb250TWV0cmljcyhPIHx8IHRoaXMuc3ZnRWxlbWVudC5lbGVtZW50KS5oO1xuICAgICAgICB9XG4gICAgICAgIG1vZGlmeVRyZWUoZikge1xuICAgICAgICAgIGxldCBPID0gKGgsIGcpID0+IHtcbiAgICAgICAgICAgIGxldCB7IGF0dHJpYnV0ZXM6IHYgPSB7fSwgY2hpbGRyZW46IEwsIHN0eWxlOiB5ID0ge30sIHRhZ05hbWU6IEIgfSA9IGgsIFggPSB0aGlzLnJlbmRlcmVyLnN0eWxlZE1vZGU7XG4gICAgICAgICAgICBpZiAoQiA9PT0gXCJiXCIgfHwgQiA9PT0gXCJzdHJvbmdcIiA/IFggPyB2LmNsYXNzID0gXCJoaWdoY2hhcnRzLXN0cm9uZ1wiIDogeS5mb250V2VpZ2h0ID0gXCJib2xkXCIgOiAoQiA9PT0gXCJpXCIgfHwgQiA9PT0gXCJlbVwiKSAmJiAoWCA/IHYuY2xhc3MgPSBcImhpZ2hjaGFydHMtZW1waGFzaXplZFwiIDogeS5mb250U3R5bGUgPSBcIml0YWxpY1wiKSwgeSAmJiB5LmNvbG9yICYmICh5LmZpbGwgPSB5LmNvbG9yKSwgQiA9PT0gXCJiclwiKSB7XG4gICAgICAgICAgICAgIHYuY2xhc3MgPSBcImhpZ2hjaGFydHMtYnJcIiwgaC50ZXh0Q29udGVudCA9IFwi4oCLXCI7XG4gICAgICAgICAgICAgIGxldCBGID0gZltnICsgMV07XG4gICAgICAgICAgICAgIEYgJiYgRi50ZXh0Q29udGVudCAmJiAoRi50ZXh0Q29udGVudCA9IEYudGV4dENvbnRlbnQucmVwbGFjZSgvXiArL2dtLCBcIlwiKSk7XG4gICAgICAgICAgICB9IGVsc2VcbiAgICAgICAgICAgICAgQiA9PT0gXCJhXCIgJiYgTCAmJiBMLnNvbWUoKEYpID0+IEYudGFnTmFtZSA9PT0gXCIjdGV4dFwiKSAmJiAoaC5jaGlsZHJlbiA9IFt7IGNoaWxkcmVuOiBMLCB0YWdOYW1lOiBcInRzcGFuXCIgfV0pO1xuICAgICAgICAgICAgQiAhPT0gXCIjdGV4dFwiICYmIEIgIT09IFwiYVwiICYmIChoLnRhZ05hbWUgPSBcInRzcGFuXCIpLCBiKGgsIHsgYXR0cmlidXRlczogdiwgc3R5bGU6IHkgfSksIEwgJiYgTC5maWx0ZXIoKEYpID0+IEYudGFnTmFtZSAhPT0gXCIjdGV4dFwiKS5mb3JFYWNoKE8pO1xuICAgICAgICAgIH07XG4gICAgICAgICAgZi5mb3JFYWNoKE8pLCBNKHRoaXMuc3ZnRWxlbWVudCwgXCJhZnRlck1vZGlmeVRyZWVcIiwgeyBub2RlczogZiB9KTtcbiAgICAgICAgfVxuICAgICAgICB0cnVuY2F0ZShmLCBPLCBoLCBnLCB2LCBMKSB7XG4gICAgICAgICAgbGV0IHksIEIsIFggPSB0aGlzLnN2Z0VsZW1lbnQsIHsgcm90YXRpb246IEYgfSA9IFgsIFQgPSBbXSwgdyA9IGggPyAxIDogMCwgSCA9IChPIHx8IGggfHwgXCJcIikubGVuZ3RoLCBDID0gSCwgcSA9IGZ1bmN0aW9uKG0sIGspIHtcbiAgICAgICAgICAgIGxldCB4ID0gayB8fCBtLCBOID0gZi5wYXJlbnROb2RlO1xuICAgICAgICAgICAgaWYgKE4gJiYgVFt4XSA9PT0gdm9pZCAwICYmIE4uZ2V0U3ViU3RyaW5nTGVuZ3RoKVxuICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIFRbeF0gPSBnICsgTi5nZXRTdWJTdHJpbmdMZW5ndGgoMCwgaCA/IHggKyAxIDogeCk7XG4gICAgICAgICAgICAgIH0gY2F0Y2gge1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gVFt4XTtcbiAgICAgICAgICB9O1xuICAgICAgICAgIGlmIChYLnJvdGF0aW9uID0gMCwgZyArIChCID0gcShmLnRleHRDb250ZW50Lmxlbmd0aCkpID4gdikge1xuICAgICAgICAgICAgZm9yICg7IHcgPD0gSDsgKVxuICAgICAgICAgICAgICBDID0gTWF0aC5jZWlsKCh3ICsgSCkgLyAyKSwgaCAmJiAoeSA9IEwoaCwgQykpLCBCID0gcShDLCB5ICYmIHkubGVuZ3RoIC0gMSksIHcgPT09IEggPyB3ID0gSCArIDEgOiBCID4gdiA/IEggPSBDIC0gMSA6IHcgPSBDO1xuICAgICAgICAgICAgSCA9PT0gMCA/IGYudGV4dENvbnRlbnQgPSBcIlwiIDogTyAmJiBIID09PSBPLmxlbmd0aCAtIDEgfHwgKGYudGV4dENvbnRlbnQgPSB5IHx8IEwoTyB8fCBoLCBDKSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGggJiYgaC5zcGxpY2UoMCwgQyksIFguYWN0dWFsV2lkdGggPSBCLCBYLnJvdGF0aW9uID0gRjtcbiAgICAgICAgfVxuICAgICAgICB1bmVzY2FwZUVudGl0aWVzKGYsIE8pIHtcbiAgICAgICAgICByZXR1cm4gQSh0aGlzLnJlbmRlcmVyLmVzY2FwZXMsIGZ1bmN0aW9uKGgsIGcpIHtcbiAgICAgICAgICAgIE8gJiYgTy5pbmRleE9mKGgpICE9PSAtMSB8fCAoZiA9IGYudG9TdHJpbmcoKS5yZXBsYWNlKFJlZ0V4cChoLCBcImdcIiksIGcpKTtcbiAgICAgICAgICB9KSwgZjtcbiAgICAgICAgfVxuICAgICAgfTtcbiAgICB9KSwgbihvLCBcIkNvcmUvUmVuZGVyZXIvU1ZHL1NWR1JlbmRlcmVyLmpzXCIsIFtvW1wiQ29yZS9SZW5kZXJlci9IVE1ML0FTVC5qc1wiXSwgb1tcIkNvcmUvRGVmYXVsdHMuanNcIl0sIG9bXCJDb3JlL0NvbG9yL0NvbG9yLmpzXCJdLCBvW1wiQ29yZS9HbG9iYWxzLmpzXCJdLCBvW1wiQ29yZS9SZW5kZXJlci9SZW5kZXJlclJlZ2lzdHJ5LmpzXCJdLCBvW1wiQ29yZS9SZW5kZXJlci9TVkcvU1ZHRWxlbWVudC5qc1wiXSwgb1tcIkNvcmUvUmVuZGVyZXIvU1ZHL1NWR0xhYmVsLmpzXCJdLCBvW1wiQ29yZS9SZW5kZXJlci9TVkcvU3ltYm9scy5qc1wiXSwgb1tcIkNvcmUvUmVuZGVyZXIvU1ZHL1RleHRCdWlsZGVyLmpzXCJdLCBvW1wiQ29yZS9VdGlsaXRpZXMuanNcIl1dLCBmdW5jdGlvbihyLCBpLCBhLCBzLCBsLCBwLCBkLCBiLCBNLCB1KSB7XG4gICAgICBsZXQgQSwgeyBkZWZhdWx0T3B0aW9uczogeiB9ID0gaSwgeyBjaGFydHM6IGYsIGRlZzJyYWQ6IE8sIGRvYzogaCwgaXNGaXJlZm94OiBnLCBpc01TOiB2LCBpc1dlYktpdDogTCwgbm9vcDogeSwgU1ZHX05TOiBCLCBzeW1ib2xTaXplczogWCwgd2luOiBGIH0gPSBzLCB7IGFkZEV2ZW50OiBULCBhdHRyOiB3LCBjcmVhdGVFbGVtZW50OiBILCBjcmlzcDogQywgY3NzOiBxLCBkZWZpbmVkOiBtLCBkZXN0cm95T2JqZWN0UHJvcGVydGllczogaywgZXh0ZW5kOiB4LCBpc0FycmF5OiBOLCBpc051bWJlcjogViwgaXNPYmplY3Q6IFIsIGlzU3RyaW5nOiBJLCBtZXJnZTogaiwgcGljazogVSwgcEludDogXywgcmVwbGFjZU5lc3RlZDogcjEsIHVuaXF1ZUtleTogSyB9ID0gdTtcbiAgICAgIGNsYXNzIFEge1xuICAgICAgICBjb25zdHJ1Y3RvcihELCBHLCBKLCBTLCBXLCBQLCBZKSB7XG4gICAgICAgICAgbGV0IFosIHQxLCBpMSA9IHRoaXMuY3JlYXRlRWxlbWVudChcInN2Z1wiKS5hdHRyKHsgdmVyc2lvbjogXCIxLjFcIiwgY2xhc3M6IFwiaGlnaGNoYXJ0cy1yb290XCIgfSksIG4xID0gaTEuZWxlbWVudDtcbiAgICAgICAgICBZIHx8IGkxLmNzcyh0aGlzLmdldFN0eWxlKFMgfHwge30pKSwgRC5hcHBlbmRDaGlsZChuMSksIHcoRCwgXCJkaXJcIiwgXCJsdHJcIiksIEQuaW5uZXJIVE1MLmluZGV4T2YoXCJ4bWxuc1wiKSA9PT0gLTEgJiYgdyhuMSwgXCJ4bWxuc1wiLCB0aGlzLlNWR19OUyksIHRoaXMuYm94ID0gbjEsIHRoaXMuYm94V3JhcHBlciA9IGkxLCB0aGlzLmFsaWduZWRPYmplY3RzID0gW10sIHRoaXMudXJsID0gdGhpcy5nZXRSZWZlcmVuY2VVUkwoKSwgdGhpcy5jcmVhdGVFbGVtZW50KFwiZGVzY1wiKS5hZGQoKS5lbGVtZW50LmFwcGVuZENoaWxkKGguY3JlYXRlVGV4dE5vZGUoXCJDcmVhdGVkIHdpdGggSGlnaGNoYXJ0cyAxMS40LjhcIikpLCB0aGlzLmRlZnMgPSB0aGlzLmNyZWF0ZUVsZW1lbnQoXCJkZWZzXCIpLmFkZCgpLCB0aGlzLmFsbG93SFRNTCA9IFAsIHRoaXMuZm9yRXhwb3J0ID0gVywgdGhpcy5zdHlsZWRNb2RlID0gWSwgdGhpcy5ncmFkaWVudHMgPSB7fSwgdGhpcy5jYWNoZSA9IHt9LCB0aGlzLmNhY2hlS2V5cyA9IFtdLCB0aGlzLmltZ0NvdW50ID0gMCwgdGhpcy5yb290Rm9udFNpemUgPSBpMS5nZXRTdHlsZShcImZvbnQtc2l6ZVwiKSwgdGhpcy5zZXRTaXplKEcsIEosICExKSwgZyAmJiBELmdldEJvdW5kaW5nQ2xpZW50UmVjdCAmJiAoKFogPSBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgIHEoRCwgeyBsZWZ0OiAwLCB0b3A6IDAgfSksIHQxID0gRC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSwgcShELCB7IGxlZnQ6IE1hdGguY2VpbCh0MS5sZWZ0KSAtIHQxLmxlZnQgKyBcInB4XCIsIHRvcDogTWF0aC5jZWlsKHQxLnRvcCkgLSB0MS50b3AgKyBcInB4XCIgfSk7XG4gICAgICAgICAgfSkoKSwgdGhpcy51blN1YlBpeGVsRml4ID0gVChGLCBcInJlc2l6ZVwiLCBaKSk7XG4gICAgICAgIH1cbiAgICAgICAgZGVmaW5pdGlvbihEKSB7XG4gICAgICAgICAgcmV0dXJuIG5ldyByKFtEXSkuYWRkVG9ET00odGhpcy5kZWZzLmVsZW1lbnQpO1xuICAgICAgICB9XG4gICAgICAgIGdldFJlZmVyZW5jZVVSTCgpIHtcbiAgICAgICAgICBpZiAoKGcgfHwgTCkgJiYgaC5nZXRFbGVtZW50c0J5VGFnTmFtZShcImJhc2VcIikubGVuZ3RoKSB7XG4gICAgICAgICAgICBpZiAoIW0oQSkpIHtcbiAgICAgICAgICAgICAgbGV0IEQgPSBLKCksIEcgPSBuZXcgcihbeyB0YWdOYW1lOiBcInN2Z1wiLCBhdHRyaWJ1dGVzOiB7IHdpZHRoOiA4LCBoZWlnaHQ6IDggfSwgY2hpbGRyZW46IFt7IHRhZ05hbWU6IFwiZGVmc1wiLCBjaGlsZHJlbjogW3sgdGFnTmFtZTogXCJjbGlwUGF0aFwiLCBhdHRyaWJ1dGVzOiB7IGlkOiBEIH0sIGNoaWxkcmVuOiBbeyB0YWdOYW1lOiBcInJlY3RcIiwgYXR0cmlidXRlczogeyB3aWR0aDogNCwgaGVpZ2h0OiA0IH0gfV0gfV0gfSwgeyB0YWdOYW1lOiBcInJlY3RcIiwgYXR0cmlidXRlczogeyBpZDogXCJoaXRtZVwiLCB3aWR0aDogOCwgaGVpZ2h0OiA4LCBcImNsaXAtcGF0aFwiOiBgdXJsKCMke0R9KWAsIGZpbGw6IFwicmdiYSgwLDAsMCwwLjAwMSlcIiB9IH1dIH1dKS5hZGRUb0RPTShoLmJvZHkpO1xuICAgICAgICAgICAgICBxKEcsIHsgcG9zaXRpb246IFwiZml4ZWRcIiwgdG9wOiAwLCBsZWZ0OiAwLCB6SW5kZXg6IDllNSB9KTtcbiAgICAgICAgICAgICAgbGV0IEogPSBoLmVsZW1lbnRGcm9tUG9pbnQoNiwgNik7XG4gICAgICAgICAgICAgIEEgPSAoSiAmJiBKLmlkKSA9PT0gXCJoaXRtZVwiLCBoLmJvZHkucmVtb3ZlQ2hpbGQoRyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoQSlcbiAgICAgICAgICAgICAgcmV0dXJuIHIxKEYubG9jYXRpb24uaHJlZi5zcGxpdChcIiNcIilbMF0sIFsvPFtePl0qPi9nLCBcIlwiXSwgWy8oW1xcKCdcXCldKS9nLCBcIlxcXFwkMVwiXSwgWy8gL2csIFwiJTIwXCJdKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIFwiXCI7XG4gICAgICAgIH1cbiAgICAgICAgZ2V0U3R5bGUoRCkge1xuICAgICAgICAgIHJldHVybiB0aGlzLnN0eWxlID0geCh7IGZvbnRGYW1pbHk6IFwiSGVsdmV0aWNhLCBBcmlhbCwgc2Fucy1zZXJpZlwiLCBmb250U2l6ZTogXCIxcmVtXCIgfSwgRCksIHRoaXMuc3R5bGU7XG4gICAgICAgIH1cbiAgICAgICAgc2V0U3R5bGUoRCkge1xuICAgICAgICAgIHRoaXMuYm94V3JhcHBlci5jc3ModGhpcy5nZXRTdHlsZShEKSk7XG4gICAgICAgIH1cbiAgICAgICAgaXNIaWRkZW4oKSB7XG4gICAgICAgICAgcmV0dXJuICF0aGlzLmJveFdyYXBwZXIuZ2V0QkJveCgpLndpZHRoO1xuICAgICAgICB9XG4gICAgICAgIGRlc3Ryb3koKSB7XG4gICAgICAgICAgbGV0IEQgPSB0aGlzLmRlZnM7XG4gICAgICAgICAgcmV0dXJuIHRoaXMuYm94ID0gbnVsbCwgdGhpcy5ib3hXcmFwcGVyID0gdGhpcy5ib3hXcmFwcGVyLmRlc3Ryb3koKSwgayh0aGlzLmdyYWRpZW50cyB8fCB7fSksIHRoaXMuZ3JhZGllbnRzID0gbnVsbCwgdGhpcy5kZWZzID0gRC5kZXN0cm95KCksIHRoaXMudW5TdWJQaXhlbEZpeCAmJiB0aGlzLnVuU3ViUGl4ZWxGaXgoKSwgdGhpcy5hbGlnbmVkT2JqZWN0cyA9IG51bGwsIG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgY3JlYXRlRWxlbWVudChEKSB7XG4gICAgICAgICAgcmV0dXJuIG5ldyB0aGlzLkVsZW1lbnQodGhpcywgRCk7XG4gICAgICAgIH1cbiAgICAgICAgZ2V0UmFkaWFsQXR0cihELCBHKSB7XG4gICAgICAgICAgcmV0dXJuIHsgY3g6IERbMF0gLSBEWzJdIC8gMiArIChHLmN4IHx8IDApICogRFsyXSwgY3k6IERbMV0gLSBEWzJdIC8gMiArIChHLmN5IHx8IDApICogRFsyXSwgcjogKEcuciB8fCAwKSAqIERbMl0gfTtcbiAgICAgICAgfVxuICAgICAgICBzaGFkb3dEZWZpbml0aW9uKEQpIHtcbiAgICAgICAgICBsZXQgRyA9IFtgaGlnaGNoYXJ0cy1kcm9wLXNoYWRvdy0ke3RoaXMuY2hhcnRJbmRleH1gLCAuLi5PYmplY3Qua2V5cyhEKS5tYXAoKFMpID0+IGAke1N9LSR7RFtTXX1gKV0uam9pbihcIi1cIikudG9Mb3dlckNhc2UoKS5yZXBsYWNlKC9bXmEtelxcZFxcLV0vZywgXCJcIiksIEogPSBqKHsgY29sb3I6IFwiIzAwMDAwMFwiLCBvZmZzZXRYOiAxLCBvZmZzZXRZOiAxLCBvcGFjaXR5OiAwLjE1LCB3aWR0aDogNSB9LCBEKTtcbiAgICAgICAgICByZXR1cm4gdGhpcy5kZWZzLmVsZW1lbnQucXVlcnlTZWxlY3RvcihgIyR7R31gKSB8fCB0aGlzLmRlZmluaXRpb24oeyB0YWdOYW1lOiBcImZpbHRlclwiLCBhdHRyaWJ1dGVzOiB7IGlkOiBHLCBmaWx0ZXJVbml0czogSi5maWx0ZXJVbml0cyB9LCBjaGlsZHJlbjogdGhpcy5nZXRTaGFkb3dGaWx0ZXJDb250ZW50KEopIH0pLCBHO1xuICAgICAgICB9XG4gICAgICAgIGdldFNoYWRvd0ZpbHRlckNvbnRlbnQoRCkge1xuICAgICAgICAgIHJldHVybiBbeyB0YWdOYW1lOiBcImZlRHJvcFNoYWRvd1wiLCBhdHRyaWJ1dGVzOiB7IGR4OiBELm9mZnNldFgsIGR5OiBELm9mZnNldFksIFwiZmxvb2QtY29sb3JcIjogRC5jb2xvciwgXCJmbG9vZC1vcGFjaXR5XCI6IE1hdGgubWluKDUgKiBELm9wYWNpdHksIDEpLCBzdGREZXZpYXRpb246IEQud2lkdGggLyAyIH0gfV07XG4gICAgICAgIH1cbiAgICAgICAgYnVpbGRUZXh0KEQpIHtcbiAgICAgICAgICBuZXcgTShEKS5idWlsZFNWRygpO1xuICAgICAgICB9XG4gICAgICAgIGdldENvbnRyYXN0KEQpIHtcbiAgICAgICAgICBsZXQgRyA9IGEucGFyc2UoRCkucmdiYS5tYXAoKFMpID0+IHtcbiAgICAgICAgICAgIGxldCBXID0gUyAvIDI1NTtcbiAgICAgICAgICAgIHJldHVybiBXIDw9IDAuMDM5MjggPyBXIC8gMTIuOTIgOiBNYXRoLnBvdygoVyArIDAuMDU1KSAvIDEuMDU1LCAyLjQpO1xuICAgICAgICAgIH0pLCBKID0gMC4yMTI2ICogR1swXSArIDAuNzE1MiAqIEdbMV0gKyAwLjA3MjIgKiBHWzJdO1xuICAgICAgICAgIHJldHVybiAxLjA1IC8gKEogKyAwLjA1KSA+IChKICsgMC4wNSkgLyAwLjA1ID8gXCIjRkZGRkZGXCIgOiBcIiMwMDAwMDBcIjtcbiAgICAgICAgfVxuICAgICAgICBidXR0b24oRCwgRywgSiwgUywgVyA9IHt9LCBQLCBZLCBaLCB0MSwgaTEpIHtcbiAgICAgICAgICBsZXQgbjEgPSB0aGlzLmxhYmVsKEQsIEcsIEosIHQxLCB2b2lkIDAsIHZvaWQgMCwgaTEsIHZvaWQgMCwgXCJidXR0b25cIiksIHMxID0gdGhpcy5zdHlsZWRNb2RlLCBkMSA9IGFyZ3VtZW50cywgYjEgPSAwO1xuICAgICAgICAgIFcgPSBqKHouZ2xvYmFsLmJ1dHRvblRoZW1lLCBXKSwgczEgJiYgKGRlbGV0ZSBXLmZpbGwsIGRlbGV0ZSBXLnN0cm9rZSwgZGVsZXRlIFdbXCJzdHJva2Utd2lkdGhcIl0pO1xuICAgICAgICAgIGxldCBjMSA9IFcuc3RhdGVzIHx8IHt9LCBhMSA9IFcuc3R5bGUgfHwge307XG4gICAgICAgICAgZGVsZXRlIFcuc3RhdGVzLCBkZWxldGUgVy5zdHlsZTtcbiAgICAgICAgICBsZXQgbDEgPSBbci5maWx0ZXJVc2VyQXR0cmlidXRlcyhXKV0sIHAxID0gW2ExXTtcbiAgICAgICAgICByZXR1cm4gczEgfHwgW1wiaG92ZXJcIiwgXCJzZWxlY3RcIiwgXCJkaXNhYmxlZFwiXS5mb3JFYWNoKChNMSwgQTEpID0+IHtcbiAgICAgICAgICAgIGwxLnB1c2goaihsMVswXSwgci5maWx0ZXJVc2VyQXR0cmlidXRlcyhkMVtBMSArIDVdIHx8IGMxW00xXSB8fCB7fSkpKSwgcDEucHVzaChsMVtBMSArIDFdLnN0eWxlKSwgZGVsZXRlIGwxW0ExICsgMV0uc3R5bGU7XG4gICAgICAgICAgfSksIFQobjEuZWxlbWVudCwgdiA/IFwibW91c2VvdmVyXCIgOiBcIm1vdXNlZW50ZXJcIiwgZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICBiMSAhPT0gMyAmJiBuMS5zZXRTdGF0ZSgxKTtcbiAgICAgICAgICB9KSwgVChuMS5lbGVtZW50LCB2ID8gXCJtb3VzZW91dFwiIDogXCJtb3VzZWxlYXZlXCIsIGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgYjEgIT09IDMgJiYgbjEuc2V0U3RhdGUoYjEpO1xuICAgICAgICAgIH0pLCBuMS5zZXRTdGF0ZSA9IChNMSA9IDApID0+IHtcbiAgICAgICAgICAgIGlmIChNMSAhPT0gMSAmJiAobjEuc3RhdGUgPSBiMSA9IE0xKSwgbjEucmVtb3ZlQ2xhc3MoL2hpZ2hjaGFydHMtYnV0dG9uLShub3JtYWx8aG92ZXJ8cHJlc3NlZHxkaXNhYmxlZCkvKS5hZGRDbGFzcyhcImhpZ2hjaGFydHMtYnV0dG9uLVwiICsgW1wibm9ybWFsXCIsIFwiaG92ZXJcIiwgXCJwcmVzc2VkXCIsIFwiZGlzYWJsZWRcIl1bTTFdKSwgIXMxKSB7XG4gICAgICAgICAgICAgIG4xLmF0dHIobDFbTTFdKTtcbiAgICAgICAgICAgICAgbGV0IEExID0gcDFbTTFdO1xuICAgICAgICAgICAgICBSKEExKSAmJiBuMS5jc3MoQTEpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0sIG4xLmF0dHIobDFbMF0pLCAhczEgJiYgKG4xLmNzcyh4KHsgY3Vyc29yOiBcImRlZmF1bHRcIiB9LCBhMSkpLCBpMSAmJiBuMS50ZXh0LmNzcyh7IHBvaW50ZXJFdmVudHM6IFwibm9uZVwiIH0pKSwgbjEub24oXCJ0b3VjaHN0YXJ0XCIsIChNMSkgPT4gTTEuc3RvcFByb3BhZ2F0aW9uKCkpLm9uKFwiY2xpY2tcIiwgZnVuY3Rpb24oTTEpIHtcbiAgICAgICAgICAgIGIxICE9PSAzICYmIFMuY2FsbChuMSwgTTEpO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIGNyaXNwTGluZShELCBHKSB7XG4gICAgICAgICAgbGV0IFtKLCBTXSA9IEQ7XG4gICAgICAgICAgcmV0dXJuIG0oSlsxXSkgJiYgSlsxXSA9PT0gU1sxXSAmJiAoSlsxXSA9IFNbMV0gPSBDKEpbMV0sIEcpKSwgbShKWzJdKSAmJiBKWzJdID09PSBTWzJdICYmIChKWzJdID0gU1syXSA9IEMoSlsyXSwgRykpLCBEO1xuICAgICAgICB9XG4gICAgICAgIHBhdGgoRCkge1xuICAgICAgICAgIGxldCBHID0gdGhpcy5zdHlsZWRNb2RlID8ge30gOiB7IGZpbGw6IFwibm9uZVwiIH07XG4gICAgICAgICAgcmV0dXJuIE4oRCkgPyBHLmQgPSBEIDogUihEKSAmJiB4KEcsIEQpLCB0aGlzLmNyZWF0ZUVsZW1lbnQoXCJwYXRoXCIpLmF0dHIoRyk7XG4gICAgICAgIH1cbiAgICAgICAgY2lyY2xlKEQsIEcsIEopIHtcbiAgICAgICAgICBsZXQgUyA9IFIoRCkgPyBEIDogRCA9PT0gdm9pZCAwID8ge30gOiB7IHg6IEQsIHk6IEcsIHI6IEogfSwgVyA9IHRoaXMuY3JlYXRlRWxlbWVudChcImNpcmNsZVwiKTtcbiAgICAgICAgICByZXR1cm4gVy54U2V0dGVyID0gVy55U2V0dGVyID0gZnVuY3Rpb24oUCwgWSwgWikge1xuICAgICAgICAgICAgWi5zZXRBdHRyaWJ1dGUoXCJjXCIgKyBZLCBQKTtcbiAgICAgICAgICB9LCBXLmF0dHIoUyk7XG4gICAgICAgIH1cbiAgICAgICAgYXJjKEQsIEcsIEosIFMsIFcsIFApIHtcbiAgICAgICAgICBsZXQgWTtcbiAgICAgICAgICBSKEQpID8gKEcgPSAoWSA9IEQpLnksIEogPSBZLnIsIFMgPSBZLmlubmVyUiwgVyA9IFkuc3RhcnQsIFAgPSBZLmVuZCwgRCA9IFkueCkgOiBZID0geyBpbm5lclI6IFMsIHN0YXJ0OiBXLCBlbmQ6IFAgfTtcbiAgICAgICAgICBsZXQgWiA9IHRoaXMuc3ltYm9sKFwiYXJjXCIsIEQsIEcsIEosIEosIFkpO1xuICAgICAgICAgIHJldHVybiBaLnIgPSBKLCBaO1xuICAgICAgICB9XG4gICAgICAgIHJlY3QoRCwgRywgSiwgUywgVywgUCkge1xuICAgICAgICAgIGxldCBZID0gUihEKSA/IEQgOiBEID09PSB2b2lkIDAgPyB7fSA6IHsgeDogRCwgeTogRywgcjogVywgd2lkdGg6IE1hdGgubWF4KEogfHwgMCwgMCksIGhlaWdodDogTWF0aC5tYXgoUyB8fCAwLCAwKSB9LCBaID0gdGhpcy5jcmVhdGVFbGVtZW50KFwicmVjdFwiKTtcbiAgICAgICAgICByZXR1cm4gdGhpcy5zdHlsZWRNb2RlIHx8IChQICE9PSB2b2lkIDAgJiYgKFlbXCJzdHJva2Utd2lkdGhcIl0gPSBQLCB4KFksIFouY3Jpc3AoWSkpKSwgWS5maWxsID0gXCJub25lXCIpLCBaLnJTZXR0ZXIgPSBmdW5jdGlvbih0MSwgaTEsIG4xKSB7XG4gICAgICAgICAgICBaLnIgPSB0MSwgdyhuMSwgeyByeDogdDEsIHJ5OiB0MSB9KTtcbiAgICAgICAgICB9LCBaLnJHZXR0ZXIgPSBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgIHJldHVybiBaLnIgfHwgMDtcbiAgICAgICAgICB9LCBaLmF0dHIoWSk7XG4gICAgICAgIH1cbiAgICAgICAgcm91bmRlZFJlY3QoRCkge1xuICAgICAgICAgIHJldHVybiB0aGlzLnN5bWJvbChcInJvdW5kZWRSZWN0XCIpLmF0dHIoRCk7XG4gICAgICAgIH1cbiAgICAgICAgc2V0U2l6ZShELCBHLCBKKSB7XG4gICAgICAgICAgdGhpcy53aWR0aCA9IEQsIHRoaXMuaGVpZ2h0ID0gRywgdGhpcy5ib3hXcmFwcGVyLmFuaW1hdGUoeyB3aWR0aDogRCwgaGVpZ2h0OiBHIH0sIHsgc3RlcDogZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICB0aGlzLmF0dHIoeyB2aWV3Qm94OiBcIjAgMCBcIiArIHRoaXMuYXR0cihcIndpZHRoXCIpICsgXCIgXCIgKyB0aGlzLmF0dHIoXCJoZWlnaHRcIikgfSk7XG4gICAgICAgICAgfSwgZHVyYXRpb246IFUoSiwgITApID8gdm9pZCAwIDogMCB9KSwgdGhpcy5hbGlnbkVsZW1lbnRzKCk7XG4gICAgICAgIH1cbiAgICAgICAgZyhEKSB7XG4gICAgICAgICAgbGV0IEcgPSB0aGlzLmNyZWF0ZUVsZW1lbnQoXCJnXCIpO1xuICAgICAgICAgIHJldHVybiBEID8gRy5hdHRyKHsgY2xhc3M6IFwiaGlnaGNoYXJ0cy1cIiArIEQgfSkgOiBHO1xuICAgICAgICB9XG4gICAgICAgIGltYWdlKEQsIEcsIEosIFMsIFcsIFApIHtcbiAgICAgICAgICBsZXQgWSA9IHsgcHJlc2VydmVBc3BlY3RSYXRpbzogXCJub25lXCIgfTtcbiAgICAgICAgICBWKEcpICYmIChZLnggPSBHKSwgVihKKSAmJiAoWS55ID0gSiksIFYoUykgJiYgKFkud2lkdGggPSBTKSwgVihXKSAmJiAoWS5oZWlnaHQgPSBXKTtcbiAgICAgICAgICBsZXQgWiA9IHRoaXMuY3JlYXRlRWxlbWVudChcImltYWdlXCIpLmF0dHIoWSksIHQxID0gZnVuY3Rpb24oaTEpIHtcbiAgICAgICAgICAgIFouYXR0cih7IGhyZWY6IEQgfSksIFAuY2FsbChaLCBpMSk7XG4gICAgICAgICAgfTtcbiAgICAgICAgICBpZiAoUCkge1xuICAgICAgICAgICAgWi5hdHRyKHsgaHJlZjogXCJkYXRhOmltYWdlL2dpZjtiYXNlNjQsUjBsR09EbGhBUUFCQUFBQUFDSDVCQUVLQUFFQUxBQUFBQUFCQUFFQUFBSUNUQUVBT3c9PVwiIH0pO1xuICAgICAgICAgICAgbGV0IGkxID0gbmV3IEYuSW1hZ2UoKTtcbiAgICAgICAgICAgIFQoaTEsIFwibG9hZFwiLCB0MSksIGkxLnNyYyA9IEQsIGkxLmNvbXBsZXRlICYmIHQxKHt9KTtcbiAgICAgICAgICB9IGVsc2VcbiAgICAgICAgICAgIFouYXR0cih7IGhyZWY6IEQgfSk7XG4gICAgICAgICAgcmV0dXJuIFo7XG4gICAgICAgIH1cbiAgICAgICAgc3ltYm9sKEQsIEcsIEosIFMsIFcsIFApIHtcbiAgICAgICAgICBsZXQgWSwgWiwgdDEsIGkxLCBuMSA9IHRoaXMsIHMxID0gL151cmxcXCgoLio/KVxcKSQvLCBkMSA9IHMxLnRlc3QoRCksIGIxID0gIWQxICYmICh0aGlzLnN5bWJvbHNbRF0gPyBEIDogXCJjaXJjbGVcIiksIGMxID0gYjEgJiYgdGhpcy5zeW1ib2xzW2IxXTtcbiAgICAgICAgICBpZiAoYzEpXG4gICAgICAgICAgICB0eXBlb2YgRyA9PSBcIm51bWJlclwiICYmIChaID0gYzEuY2FsbCh0aGlzLnN5bWJvbHMsIEcgfHwgMCwgSiB8fCAwLCBTIHx8IDAsIFcgfHwgMCwgUCkpLCBZID0gdGhpcy5wYXRoKFopLCBuMS5zdHlsZWRNb2RlIHx8IFkuYXR0cihcImZpbGxcIiwgXCJub25lXCIpLCB4KFksIHsgc3ltYm9sTmFtZTogYjEgfHwgdm9pZCAwLCB4OiBHLCB5OiBKLCB3aWR0aDogUywgaGVpZ2h0OiBXIH0pLCBQICYmIHgoWSwgUCk7XG4gICAgICAgICAgZWxzZSBpZiAoZDEpIHtcbiAgICAgICAgICAgIHQxID0gRC5tYXRjaChzMSlbMV07XG4gICAgICAgICAgICBsZXQgYTEgPSBZID0gdGhpcy5pbWFnZSh0MSk7XG4gICAgICAgICAgICBhMS5pbWd3aWR0aCA9IFUoUCAmJiBQLndpZHRoLCBYW3QxXSAmJiBYW3QxXS53aWR0aCksIGExLmltZ2hlaWdodCA9IFUoUCAmJiBQLmhlaWdodCwgWFt0MV0gJiYgWFt0MV0uaGVpZ2h0KSwgaTEgPSAobDEpID0+IGwxLmF0dHIoeyB3aWR0aDogbDEud2lkdGgsIGhlaWdodDogbDEuaGVpZ2h0IH0pLCBbXCJ3aWR0aFwiLCBcImhlaWdodFwiXS5mb3JFYWNoKChsMSkgPT4ge1xuICAgICAgICAgICAgICBhMVtgJHtsMX1TZXR0ZXJgXSA9IGZ1bmN0aW9uKHAxLCBNMSkge1xuICAgICAgICAgICAgICAgIHRoaXNbTTFdID0gcDE7XG4gICAgICAgICAgICAgICAgbGV0IHsgYWxpZ25CeVRyYW5zbGF0ZTogQTEsIGVsZW1lbnQ6IHUxLCB3aWR0aDogaDEsIGhlaWdodDogQzEsIGltZ3dpZHRoOiBxMSwgaW1naGVpZ2h0OiBXMSB9ID0gdGhpcywgUjEgPSBNMSA9PT0gXCJ3aWR0aFwiID8gcTEgOiBXMSwgazEgPSAxO1xuICAgICAgICAgICAgICAgIFAgJiYgUC5iYWNrZ3JvdW5kU2l6ZSA9PT0gXCJ3aXRoaW5cIiAmJiBoMSAmJiBDMSAmJiBxMSAmJiBXMSA/IChrMSA9IE1hdGgubWluKGgxIC8gcTEsIEMxIC8gVzEpLCB3KHUxLCB7IHdpZHRoOiBNYXRoLnJvdW5kKHExICogazEpLCBoZWlnaHQ6IE1hdGgucm91bmQoVzEgKiBrMSkgfSkpIDogdTEgJiYgUjEgJiYgdTEuc2V0QXR0cmlidXRlKE0xLCBSMSksICFBMSAmJiBxMSAmJiBXMSAmJiB0aGlzLnRyYW5zbGF0ZSgoKGgxIHx8IDApIC0gcTEgKiBrMSkgLyAyLCAoKEMxIHx8IDApIC0gVzEgKiBrMSkgLyAyKTtcbiAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH0pLCBtKEcpICYmIGExLmF0dHIoeyB4OiBHLCB5OiBKIH0pLCBhMS5pc0ltZyA9ICEwLCBhMS5zeW1ib2xVcmwgPSBELCBtKGExLmltZ3dpZHRoKSAmJiBtKGExLmltZ2hlaWdodCkgPyBpMShhMSkgOiAoYTEuYXR0cih7IHdpZHRoOiAwLCBoZWlnaHQ6IDAgfSksIEgoXCJpbWdcIiwgeyBvbmxvYWQ6IGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgICBsZXQgbDEgPSBmW24xLmNoYXJ0SW5kZXhdO1xuICAgICAgICAgICAgICB0aGlzLndpZHRoID09PSAwICYmIChxKHRoaXMsIHsgcG9zaXRpb246IFwiYWJzb2x1dGVcIiwgdG9wOiBcIi05OTllbVwiIH0pLCBoLmJvZHkuYXBwZW5kQ2hpbGQodGhpcykpLCBYW3QxXSA9IHsgd2lkdGg6IHRoaXMud2lkdGgsIGhlaWdodDogdGhpcy5oZWlnaHQgfSwgYTEuaW1nd2lkdGggPSB0aGlzLndpZHRoLCBhMS5pbWdoZWlnaHQgPSB0aGlzLmhlaWdodCwgYTEuZWxlbWVudCAmJiBpMShhMSksIHRoaXMucGFyZW50Tm9kZSAmJiB0aGlzLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQodGhpcyksIG4xLmltZ0NvdW50LS0sIG4xLmltZ0NvdW50IHx8ICFsMSB8fCBsMS5oYXNMb2FkZWQgfHwgbDEub25sb2FkKCk7XG4gICAgICAgICAgICB9LCBzcmM6IHQxIH0pLCB0aGlzLmltZ0NvdW50KyspO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gWTtcbiAgICAgICAgfVxuICAgICAgICBjbGlwUmVjdChELCBHLCBKLCBTKSB7XG4gICAgICAgICAgcmV0dXJuIHRoaXMucmVjdChELCBHLCBKLCBTLCAwKTtcbiAgICAgICAgfVxuICAgICAgICB0ZXh0KEQsIEcsIEosIFMpIHtcbiAgICAgICAgICBsZXQgVyA9IHt9O1xuICAgICAgICAgIGlmIChTICYmICh0aGlzLmFsbG93SFRNTCB8fCAhdGhpcy5mb3JFeHBvcnQpKVxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuaHRtbChELCBHLCBKKTtcbiAgICAgICAgICBXLnggPSBNYXRoLnJvdW5kKEcgfHwgMCksIEogJiYgKFcueSA9IE1hdGgucm91bmQoSikpLCBtKEQpICYmIChXLnRleHQgPSBEKTtcbiAgICAgICAgICBsZXQgUCA9IHRoaXMuY3JlYXRlRWxlbWVudChcInRleHRcIikuYXR0cihXKTtcbiAgICAgICAgICByZXR1cm4gUyAmJiAoIXRoaXMuZm9yRXhwb3J0IHx8IHRoaXMuYWxsb3dIVE1MKSB8fCAoUC54U2V0dGVyID0gZnVuY3Rpb24oWSwgWiwgdDEpIHtcbiAgICAgICAgICAgIGxldCBpMSA9IHQxLmdldEVsZW1lbnRzQnlUYWdOYW1lKFwidHNwYW5cIiksIG4xID0gdDEuZ2V0QXR0cmlidXRlKFopO1xuICAgICAgICAgICAgZm9yIChsZXQgczEgPSAwLCBkMTsgczEgPCBpMS5sZW5ndGg7IHMxKyspXG4gICAgICAgICAgICAgIChkMSA9IGkxW3MxXSkuZ2V0QXR0cmlidXRlKFopID09PSBuMSAmJiBkMS5zZXRBdHRyaWJ1dGUoWiwgWSk7XG4gICAgICAgICAgICB0MS5zZXRBdHRyaWJ1dGUoWiwgWSk7XG4gICAgICAgICAgfSksIFA7XG4gICAgICAgIH1cbiAgICAgICAgZm9udE1ldHJpY3MoRCkge1xuICAgICAgICAgIGxldCBHID0gXyhwLnByb3RvdHlwZS5nZXRTdHlsZS5jYWxsKEQsIFwiZm9udC1zaXplXCIpIHx8IDApLCBKID0gRyA8IDI0ID8gRyArIDMgOiBNYXRoLnJvdW5kKDEuMiAqIEcpLCBTID0gTWF0aC5yb3VuZCgwLjggKiBKKTtcbiAgICAgICAgICByZXR1cm4geyBoOiBKLCBiOiBTLCBmOiBHIH07XG4gICAgICAgIH1cbiAgICAgICAgcm90Q29ycihELCBHLCBKKSB7XG4gICAgICAgICAgbGV0IFMgPSBEO1xuICAgICAgICAgIHJldHVybiBHICYmIEogJiYgKFMgPSBNYXRoLm1heChTICogTWF0aC5jb3MoRyAqIE8pLCA0KSksIHsgeDogLUQgLyAzICogTWF0aC5zaW4oRyAqIE8pLCB5OiBTIH07XG4gICAgICAgIH1cbiAgICAgICAgcGF0aFRvU2VnbWVudHMoRCkge1xuICAgICAgICAgIGxldCBHID0gW10sIEogPSBbXSwgUyA9IHsgQTogOCwgQzogNywgSDogMiwgTDogMywgTTogMywgUTogNSwgUzogNSwgVDogMywgVjogMiB9O1xuICAgICAgICAgIGZvciAobGV0IFcgPSAwOyBXIDwgRC5sZW5ndGg7IFcrKylcbiAgICAgICAgICAgIEkoSlswXSkgJiYgVihEW1ddKSAmJiBKLmxlbmd0aCA9PT0gU1tKWzBdLnRvVXBwZXJDYXNlKCldICYmIEQuc3BsaWNlKFcsIDAsIEpbMF0ucmVwbGFjZShcIk1cIiwgXCJMXCIpLnJlcGxhY2UoXCJtXCIsIFwibFwiKSksIHR5cGVvZiBEW1ddID09IFwic3RyaW5nXCIgJiYgKEoubGVuZ3RoICYmIEcucHVzaChKLnNsaWNlKDApKSwgSi5sZW5ndGggPSAwKSwgSi5wdXNoKERbV10pO1xuICAgICAgICAgIHJldHVybiBHLnB1c2goSi5zbGljZSgwKSksIEc7XG4gICAgICAgIH1cbiAgICAgICAgbGFiZWwoRCwgRywgSiwgUywgVywgUCwgWSwgWiwgdDEpIHtcbiAgICAgICAgICByZXR1cm4gbmV3IGQodGhpcywgRCwgRywgSiwgUywgVywgUCwgWSwgWiwgdDEpO1xuICAgICAgICB9XG4gICAgICAgIGFsaWduRWxlbWVudHMoKSB7XG4gICAgICAgICAgdGhpcy5hbGlnbmVkT2JqZWN0cy5mb3JFYWNoKChEKSA9PiBELmFsaWduKCkpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4geChRLnByb3RvdHlwZSwgeyBFbGVtZW50OiBwLCBTVkdfTlM6IEIsIGVzY2FwZXM6IHsgXCImXCI6IFwiJmFtcDtcIiwgXCI8XCI6IFwiJmx0O1wiLCBcIj5cIjogXCImZ3Q7XCIsIFwiJ1wiOiBcIiYjMzk7XCIsICdcIic6IFwiJnF1b3Q7XCIgfSwgc3ltYm9sczogYiwgZHJhdzogeSB9KSwgbC5yZWdpc3RlclJlbmRlcmVyVHlwZShcInN2Z1wiLCBRLCAhMCksIFE7XG4gICAgfSksIG4obywgXCJDb3JlL1JlbmRlcmVyL0hUTUwvSFRNTEVsZW1lbnQuanNcIiwgW29bXCJDb3JlL1JlbmRlcmVyL0hUTUwvQVNULmpzXCJdLCBvW1wiQ29yZS9HbG9iYWxzLmpzXCJdLCBvW1wiQ29yZS9SZW5kZXJlci9TVkcvU1ZHRWxlbWVudC5qc1wiXSwgb1tcIkNvcmUvVXRpbGl0aWVzLmpzXCJdXSwgZnVuY3Rpb24ociwgaSwgYSwgcykge1xuICAgICAgbGV0IHsgY29tcG9zZWQ6IGwgfSA9IGksIHsgYXR0cjogcCwgY3NzOiBkLCBjcmVhdGVFbGVtZW50OiBiLCBkZWZpbmVkOiBNLCBleHRlbmQ6IHUsIHBJbnQ6IEEsIHB1c2hVbmlxdWU6IHogfSA9IHM7XG4gICAgICBmdW5jdGlvbiBmKHYsIEwsIHkpIHtcbiAgICAgICAgdmFyIFg7XG4gICAgICAgIGxldCBCID0gKChYID0gdGhpcy5kaXYpID09IG51bGwgPyB2b2lkIDAgOiBYLnN0eWxlKSB8fCB5LnN0eWxlO1xuICAgICAgICBhLnByb3RvdHlwZVtgJHtMfVNldHRlcmBdLmNhbGwodGhpcywgdiwgTCwgeSksIEIgJiYgKEJbTF0gPSB2KTtcbiAgICAgIH1cbiAgICAgIGxldCBPID0gKHYsIEwpID0+IHtcbiAgICAgICAgdmFyIHk7XG4gICAgICAgIGlmICghdi5kaXYpIHtcbiAgICAgICAgICBsZXQgQiA9IHAodi5lbGVtZW50LCBcImNsYXNzXCIpLCBYID0gdi5jc3MsIEYgPSBiKFwiZGl2XCIsIEIgPyB7IGNsYXNzTmFtZTogQiB9IDogdm9pZCAwLCB7IHBvc2l0aW9uOiBcImFic29sdXRlXCIsIGxlZnQ6IGAke3YudHJhbnNsYXRlWCB8fCAwfXB4YCwgdG9wOiBgJHt2LnRyYW5zbGF0ZVkgfHwgMH1weGAsIC4uLnYuc3R5bGVzLCBkaXNwbGF5OiB2LmRpc3BsYXksIG9wYWNpdHk6IHYub3BhY2l0eSwgdmlzaWJpbGl0eTogdi52aXNpYmlsaXR5IH0sICgoeSA9IHYucGFyZW50R3JvdXApID09IG51bGwgPyB2b2lkIDAgOiB5LmRpdikgfHwgTCk7XG4gICAgICAgICAgdi5jbGFzc1NldHRlciA9IChULCB3LCBIKSA9PiB7XG4gICAgICAgICAgICBILnNldEF0dHJpYnV0ZShcImNsYXNzXCIsIFQpLCBGLmNsYXNzTmFtZSA9IFQ7XG4gICAgICAgICAgfSwgdi50cmFuc2xhdGVYU2V0dGVyID0gdi50cmFuc2xhdGVZU2V0dGVyID0gKFQsIHcpID0+IHtcbiAgICAgICAgICAgIHZbd10gPSBULCBGLnN0eWxlW3cgPT09IFwidHJhbnNsYXRlWFwiID8gXCJsZWZ0XCIgOiBcInRvcFwiXSA9IGAke1R9cHhgLCB2LmRvVHJhbnNmb3JtID0gITA7XG4gICAgICAgICAgfSwgdi5vcGFjaXR5U2V0dGVyID0gdi52aXNpYmlsaXR5U2V0dGVyID0gZiwgdi5jc3MgPSAoVCkgPT4gKFguY2FsbCh2LCBUKSwgVC5jdXJzb3IgJiYgKEYuc3R5bGUuY3Vyc29yID0gVC5jdXJzb3IpLCBULnBvaW50ZXJFdmVudHMgJiYgKEYuc3R5bGUucG9pbnRlckV2ZW50cyA9IFQucG9pbnRlckV2ZW50cyksIHYpLCB2Lm9uID0gZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICByZXR1cm4gYS5wcm90b3R5cGUub24uYXBwbHkoeyBlbGVtZW50OiBGLCBvbkV2ZW50czogdi5vbkV2ZW50cyB9LCBhcmd1bWVudHMpLCB2O1xuICAgICAgICAgIH0sIHYuZGl2ID0gRjtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdi5kaXY7XG4gICAgICB9O1xuICAgICAgY2xhc3MgaCBleHRlbmRzIGEge1xuICAgICAgICBzdGF0aWMgY29tcG9zZShMKSB7XG4gICAgICAgICAgeihsLCB0aGlzLmNvbXBvc2UpICYmIChMLnByb3RvdHlwZS5odG1sID0gZnVuY3Rpb24oeSwgQiwgWCkge1xuICAgICAgICAgICAgcmV0dXJuIG5ldyBoKHRoaXMsIFwic3BhblwiKS5hdHRyKHsgdGV4dDogeSwgeDogTWF0aC5yb3VuZChCKSwgeTogTWF0aC5yb3VuZChYKSB9KTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdHJ1Y3RvcihMLCB5KSB7XG4gICAgICAgICAgc3VwZXIoTCwgeSksIHRoaXMuY3NzKHsgcG9zaXRpb246IFwiYWJzb2x1dGVcIiwgLi4uTC5zdHlsZWRNb2RlID8ge30gOiB7IGZvbnRGYW1pbHk6IEwuc3R5bGUuZm9udEZhbWlseSwgZm9udFNpemU6IEwuc3R5bGUuZm9udFNpemUgfSB9KSwgdGhpcy5lbGVtZW50LnN0eWxlLndoaXRlU3BhY2UgPSBcIm5vd3JhcFwiO1xuICAgICAgICB9XG4gICAgICAgIGdldFNwYW5Db3JyZWN0aW9uKEwsIHksIEIpIHtcbiAgICAgICAgICB0aGlzLnhDb3JyID0gLUwgKiBCLCB0aGlzLnlDb3JyID0gLXk7XG4gICAgICAgIH1cbiAgICAgICAgY3NzKEwpIHtcbiAgICAgICAgICBsZXQgeSwgeyBlbGVtZW50OiBCIH0gPSB0aGlzLCBYID0gQi50YWdOYW1lID09PSBcIlNQQU5cIiAmJiBMICYmIFwid2lkdGhcIiBpbiBMLCBGID0gWCAmJiBMLndpZHRoO1xuICAgICAgICAgIHJldHVybiBYICYmIChkZWxldGUgTC53aWR0aCwgdGhpcy50ZXh0V2lkdGggPSBBKEYpIHx8IHZvaWQgMCwgeSA9ICEwKSwgKEwgPT0gbnVsbCA/IHZvaWQgMCA6IEwudGV4dE92ZXJmbG93KSA9PT0gXCJlbGxpcHNpc1wiICYmIChMLndoaXRlU3BhY2UgPSBcIm5vd3JhcFwiLCBMLm92ZXJmbG93ID0gXCJoaWRkZW5cIiksIHUodGhpcy5zdHlsZXMsIEwpLCBkKEIsIEwpLCB5ICYmIHRoaXMudXBkYXRlVHJhbnNmb3JtKCksIHRoaXM7XG4gICAgICAgIH1cbiAgICAgICAgaHRtbEdldEJCb3goKSB7XG4gICAgICAgICAgbGV0IHsgZWxlbWVudDogTCB9ID0gdGhpcztcbiAgICAgICAgICByZXR1cm4geyB4OiBMLm9mZnNldExlZnQsIHk6IEwub2Zmc2V0VG9wLCB3aWR0aDogTC5vZmZzZXRXaWR0aCwgaGVpZ2h0OiBMLm9mZnNldEhlaWdodCB9O1xuICAgICAgICB9XG4gICAgICAgIHVwZGF0ZVRyYW5zZm9ybSgpIHtcbiAgICAgICAgICB2YXIgVjtcbiAgICAgICAgICBpZiAoIXRoaXMuYWRkZWQpIHtcbiAgICAgICAgICAgIHRoaXMuYWxpZ25PbkFkZCA9ICEwO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgIH1cbiAgICAgICAgICBsZXQgeyBlbGVtZW50OiBMLCByZW5kZXJlcjogeSwgcm90YXRpb246IEIsIHJvdGF0aW9uT3JpZ2luWDogWCwgcm90YXRpb25PcmlnaW5ZOiBGLCBzdHlsZXM6IFQsIHRleHRBbGlnbjogdyA9IFwibGVmdFwiLCB0ZXh0V2lkdGg6IEgsIHRyYW5zbGF0ZVg6IEMgPSAwLCB0cmFuc2xhdGVZOiBxID0gMCwgeDogbSA9IDAsIHk6IGsgPSAwIH0gPSB0aGlzLCB4ID0geyBsZWZ0OiAwLCBjZW50ZXI6IDAuNSwgcmlnaHQ6IDEgfVt3XSwgTiA9IFQud2hpdGVTcGFjZTtcbiAgICAgICAgICBpZiAoZChMLCB7IG1hcmdpbkxlZnQ6IGAke0N9cHhgLCBtYXJnaW5Ub3A6IGAke3F9cHhgIH0pLCBMLnRhZ05hbWUgPT09IFwiU1BBTlwiKSB7XG4gICAgICAgICAgICBsZXQgUiA9IFtCLCB3LCBMLmlubmVySFRNTCwgSCwgdGhpcy50ZXh0QWxpZ25dLmpvaW4oXCIsXCIpLCBJID0gLSgoKFYgPSB0aGlzLnBhcmVudEdyb3VwKSA9PSBudWxsID8gdm9pZCAwIDogVi5wYWRkaW5nKSAqIDEpIHx8IDAsIGosIFUgPSAhMTtcbiAgICAgICAgICAgIGlmIChIICE9PSB0aGlzLm9sZFRleHRXaWR0aCkge1xuICAgICAgICAgICAgICBsZXQgRSA9IHRoaXMudGV4dFB4TGVuZ3RoID8gdGhpcy50ZXh0UHhMZW5ndGggOiAoZChMLCB7IHdpZHRoOiBcIlwiLCB3aGl0ZVNwYWNlOiBOIHx8IFwibm93cmFwXCIgfSksIEwub2Zmc2V0V2lkdGgpLCBEID0gSCB8fCAwO1xuICAgICAgICAgICAgICAoRCA+IHRoaXMub2xkVGV4dFdpZHRoIHx8IEUgPiBEKSAmJiAoL1sgXFwtXS8udGVzdChMLnRleHRDb250ZW50IHx8IEwuaW5uZXJUZXh0KSB8fCBMLnN0eWxlLnRleHRPdmVyZmxvdyA9PT0gXCJlbGxpcHNpc1wiKSAmJiAoZChMLCB7IHdpZHRoOiBFID4gRCB8fCBCID8gSCArIFwicHhcIiA6IFwiYXV0b1wiLCBkaXNwbGF5OiBcImJsb2NrXCIsIHdoaXRlU3BhY2U6IE4gfHwgXCJub3JtYWxcIiB9KSwgdGhpcy5vbGRUZXh0V2lkdGggPSBILCBVID0gITApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5oYXNCb3hXaWR0aENoYW5nZWQgPSBVLCBSICE9PSB0aGlzLmNUVCAmJiAoaiA9IHkuZm9udE1ldHJpY3MoTCkuYiwgTShCKSAmJiAoQiAhPT0gKHRoaXMub2xkUm90YXRpb24gfHwgMCkgfHwgdyAhPT0gdGhpcy5vbGRBbGlnbikgJiYgdGhpcy5zZXRTcGFuUm90YXRpb24oQiwgSSwgSSksIHRoaXMuZ2V0U3BhbkNvcnJlY3Rpb24oIU0oQikgJiYgdGhpcy50ZXh0UHhMZW5ndGggfHwgTC5vZmZzZXRXaWR0aCwgaiwgeCkpO1xuICAgICAgICAgICAgbGV0IHsgeENvcnI6IF8gPSAwLCB5Q29ycjogcjEgPSAwIH0gPSB0aGlzLCBLID0gKFggPz8gbSkgLSBfIC0gbSAtIEksIFEgPSAoRiA/PyBrKSAtIHIxIC0gayAtIEk7XG4gICAgICAgICAgICBkKEwsIHsgbGVmdDogYCR7bSArIF99cHhgLCB0b3A6IGAke2sgKyByMX1weGAsIHRyYW5zZm9ybU9yaWdpbjogYCR7S31weCAke1F9cHhgIH0pLCB0aGlzLmNUVCA9IFIsIHRoaXMub2xkUm90YXRpb24gPSBCLCB0aGlzLm9sZEFsaWduID0gdztcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgc2V0U3BhblJvdGF0aW9uKEwsIHksIEIpIHtcbiAgICAgICAgICBkKHRoaXMuZWxlbWVudCwgeyB0cmFuc2Zvcm06IGByb3RhdGUoJHtMfWRlZylgLCB0cmFuc2Zvcm1PcmlnaW46IGAke3l9JSAke0J9cHhgIH0pO1xuICAgICAgICB9XG4gICAgICAgIGFkZChMKSB7XG4gICAgICAgICAgbGV0IHksIEIgPSB0aGlzLnJlbmRlcmVyLmJveC5wYXJlbnROb2RlLCBYID0gW107XG4gICAgICAgICAgaWYgKHRoaXMucGFyZW50R3JvdXAgPSBMLCBMICYmICEoeSA9IEwuZGl2KSkge1xuICAgICAgICAgICAgbGV0IEYgPSBMO1xuICAgICAgICAgICAgZm9yICg7IEY7IClcbiAgICAgICAgICAgICAgWC5wdXNoKEYpLCBGID0gRi5wYXJlbnRHcm91cDtcbiAgICAgICAgICAgIGZvciAobGV0IFQgb2YgWC5yZXZlcnNlKCkpXG4gICAgICAgICAgICAgIHkgPSBPKFQsIEIpO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gKHkgfHwgQikuYXBwZW5kQ2hpbGQodGhpcy5lbGVtZW50KSwgdGhpcy5hZGRlZCA9ICEwLCB0aGlzLmFsaWduT25BZGQgJiYgdGhpcy51cGRhdGVUcmFuc2Zvcm0oKSwgdGhpcztcbiAgICAgICAgfVxuICAgICAgICB0ZXh0U2V0dGVyKEwpIHtcbiAgICAgICAgICBMICE9PSB0aGlzLnRleHRTdHIgJiYgKGRlbGV0ZSB0aGlzLmJCb3gsIGRlbGV0ZSB0aGlzLm9sZFRleHRXaWR0aCwgci5zZXRFbGVtZW50SFRNTCh0aGlzLmVsZW1lbnQsIEwgPz8gXCJcIiksIHRoaXMudGV4dFN0ciA9IEwsIHRoaXMuZG9UcmFuc2Zvcm0gPSAhMCk7XG4gICAgICAgIH1cbiAgICAgICAgYWxpZ25TZXR0ZXIoTCkge1xuICAgICAgICAgIHRoaXMuYWxpZ25WYWx1ZSA9IHRoaXMudGV4dEFsaWduID0gTCwgdGhpcy5kb1RyYW5zZm9ybSA9ICEwO1xuICAgICAgICB9XG4gICAgICAgIHhTZXR0ZXIoTCwgeSkge1xuICAgICAgICAgIHRoaXNbeV0gPSBMLCB0aGlzLmRvVHJhbnNmb3JtID0gITA7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGxldCBnID0gaC5wcm90b3R5cGU7XG4gICAgICByZXR1cm4gZy52aXNpYmlsaXR5U2V0dGVyID0gZy5vcGFjaXR5U2V0dGVyID0gZiwgZy55U2V0dGVyID0gZy5yb3RhdGlvblNldHRlciA9IGcucm90YXRpb25PcmlnaW5YU2V0dGVyID0gZy5yb3RhdGlvbk9yaWdpbllTZXR0ZXIgPSBnLnhTZXR0ZXIsIGg7XG4gICAgfSksIG4obywgXCJDb3JlL0F4aXMvQXhpc0RlZmF1bHRzLmpzXCIsIFtdLCBmdW5jdGlvbigpIHtcbiAgICAgIHZhciByLCBpO1xuICAgICAgcmV0dXJuIChpID0gciB8fCAociA9IHt9KSkueEF4aXMgPSB7IGFsaWduVGlja3M6ICEwLCBhbGxvd0RlY2ltYWxzOiB2b2lkIDAsIHBhbm5pbmdFbmFibGVkOiAhMCwgekluZGV4OiAyLCB6b29tRW5hYmxlZDogITAsIGRhdGVUaW1lTGFiZWxGb3JtYXRzOiB7IG1pbGxpc2Vjb25kOiB7IG1haW46IFwiJUg6JU06JVMuJUxcIiwgcmFuZ2U6ICExIH0sIHNlY29uZDogeyBtYWluOiBcIiVIOiVNOiVTXCIsIHJhbmdlOiAhMSB9LCBtaW51dGU6IHsgbWFpbjogXCIlSDolTVwiLCByYW5nZTogITEgfSwgaG91cjogeyBtYWluOiBcIiVIOiVNXCIsIHJhbmdlOiAhMSB9LCBkYXk6IHsgbWFpbjogXCIlZSAlYlwiIH0sIHdlZWs6IHsgbWFpbjogXCIlZSAlYlwiIH0sIG1vbnRoOiB7IG1haW46IFwiJWIgJyV5XCIgfSwgeWVhcjogeyBtYWluOiBcIiVZXCIgfSB9LCBlbmRPblRpY2s6ICExLCBncmlkTGluZURhc2hTdHlsZTogXCJTb2xpZFwiLCBncmlkWkluZGV4OiAxLCBsYWJlbHM6IHsgYXV0b1JvdGF0aW9uTGltaXQ6IDgwLCBkaXN0YW5jZTogMTUsIGVuYWJsZWQ6ICEwLCBpbmRlbnRhdGlvbjogMTAsIG92ZXJmbG93OiBcImp1c3RpZnlcIiwgcmVzZXJ2ZVNwYWNlOiB2b2lkIDAsIHJvdGF0aW9uOiB2b2lkIDAsIHN0YWdnZXJMaW5lczogMCwgc3RlcDogMCwgdXNlSFRNTDogITEsIHpJbmRleDogNywgc3R5bGU6IHsgY29sb3I6IFwiIzMzMzMzM1wiLCBjdXJzb3I6IFwiZGVmYXVsdFwiLCBmb250U2l6ZTogXCIwLjhlbVwiIH0gfSwgbWF4UGFkZGluZzogMC4wMSwgbWlub3JHcmlkTGluZURhc2hTdHlsZTogXCJTb2xpZFwiLCBtaW5vclRpY2tMZW5ndGg6IDIsIG1pbm9yVGlja1Bvc2l0aW9uOiBcIm91dHNpZGVcIiwgbWlub3JUaWNrc1Blck1ham9yOiA1LCBtaW5QYWRkaW5nOiAwLjAxLCBvZmZzZXQ6IHZvaWQgMCwgcmV2ZXJzZWQ6IHZvaWQgMCwgcmV2ZXJzZWRTdGFja3M6ICExLCBzaG93RW1wdHk6ICEwLCBzaG93Rmlyc3RMYWJlbDogITAsIHNob3dMYXN0TGFiZWw6ICEwLCBzdGFydE9mV2VlazogMSwgc3RhcnRPblRpY2s6ICExLCB0aWNrTGVuZ3RoOiAxMCwgdGlja1BpeGVsSW50ZXJ2YWw6IDEwMCwgdGlja21hcmtQbGFjZW1lbnQ6IFwiYmV0d2VlblwiLCB0aWNrUG9zaXRpb246IFwib3V0c2lkZVwiLCB0aXRsZTogeyBhbGlnbjogXCJtaWRkbGVcIiwgdXNlSFRNTDogITEsIHg6IDAsIHk6IDAsIHN0eWxlOiB7IGNvbG9yOiBcIiM2NjY2NjZcIiwgZm9udFNpemU6IFwiMC44ZW1cIiB9IH0sIHZpc2libGU6ICEwLCBtaW5vckdyaWRMaW5lQ29sb3I6IFwiI2YyZjJmMlwiLCBtaW5vckdyaWRMaW5lV2lkdGg6IDEsIG1pbm9yVGlja0NvbG9yOiBcIiM5OTk5OTlcIiwgbGluZUNvbG9yOiBcIiMzMzMzMzNcIiwgbGluZVdpZHRoOiAxLCBncmlkTGluZUNvbG9yOiBcIiNlNmU2ZTZcIiwgZ3JpZExpbmVXaWR0aDogdm9pZCAwLCB0aWNrQ29sb3I6IFwiIzMzMzMzM1wiIH0sIGkueUF4aXMgPSB7IHJldmVyc2VkU3RhY2tzOiAhMCwgZW5kT25UaWNrOiAhMCwgbWF4UGFkZGluZzogMC4wNSwgbWluUGFkZGluZzogMC4wNSwgdGlja1BpeGVsSW50ZXJ2YWw6IDcyLCBzaG93TGFzdExhYmVsOiAhMCwgbGFiZWxzOiB7IHg6IHZvaWQgMCB9LCBzdGFydE9uVGljazogITAsIHRpdGxlOiB7IHRleHQ6IFwiVmFsdWVzXCIgfSwgc3RhY2tMYWJlbHM6IHsgYW5pbWF0aW9uOiB7fSwgYWxsb3dPdmVybGFwOiAhMSwgZW5hYmxlZDogITEsIGNyb3A6ICEwLCBvdmVyZmxvdzogXCJqdXN0aWZ5XCIsIGZvcm1hdHRlcjogZnVuY3Rpb24oKSB7XG4gICAgICAgIGxldCB7IG51bWJlckZvcm1hdHRlcjogYSB9ID0gdGhpcy5heGlzLmNoYXJ0O1xuICAgICAgICByZXR1cm4gYSh0aGlzLnRvdGFsIHx8IDAsIC0xKTtcbiAgICAgIH0sIHN0eWxlOiB7IGNvbG9yOiBcIiMwMDAwMDBcIiwgZm9udFNpemU6IFwiMC43ZW1cIiwgZm9udFdlaWdodDogXCJib2xkXCIsIHRleHRPdXRsaW5lOiBcIjFweCBjb250cmFzdFwiIH0gfSwgZ3JpZExpbmVXaWR0aDogMSwgbGluZVdpZHRoOiAwIH0sIHI7XG4gICAgfSksIG4obywgXCJDb3JlL0ZvdW5kYXRpb24uanNcIiwgW29bXCJDb3JlL1V0aWxpdGllcy5qc1wiXV0sIGZ1bmN0aW9uKHIpIHtcbiAgICAgIHZhciBpO1xuICAgICAgbGV0IHsgYWRkRXZlbnQ6IGEsIGlzRnVuY3Rpb246IHMsIG9iamVjdEVhY2g6IGwsIHJlbW92ZUV2ZW50OiBwIH0gPSByO1xuICAgICAgcmV0dXJuIChpIHx8IChpID0ge30pKS5yZWdpc3RlckV2ZW50T3B0aW9ucyA9IGZ1bmN0aW9uKGQsIGIpIHtcbiAgICAgICAgZC5ldmVudE9wdGlvbnMgPSBkLmV2ZW50T3B0aW9ucyB8fCB7fSwgbChiLmV2ZW50cywgZnVuY3Rpb24oTSwgdSkge1xuICAgICAgICAgIGQuZXZlbnRPcHRpb25zW3VdICE9PSBNICYmIChkLmV2ZW50T3B0aW9uc1t1XSAmJiAocChkLCB1LCBkLmV2ZW50T3B0aW9uc1t1XSksIGRlbGV0ZSBkLmV2ZW50T3B0aW9uc1t1XSksIHMoTSkgJiYgKGQuZXZlbnRPcHRpb25zW3VdID0gTSwgYShkLCB1LCBNLCB7IG9yZGVyOiAwIH0pKSk7XG4gICAgICAgIH0pO1xuICAgICAgfSwgaTtcbiAgICB9KSwgbihvLCBcIkNvcmUvQXhpcy9UaWNrLmpzXCIsIFtvW1wiQ29yZS9UZW1wbGF0aW5nLmpzXCJdLCBvW1wiQ29yZS9HbG9iYWxzLmpzXCJdLCBvW1wiQ29yZS9VdGlsaXRpZXMuanNcIl1dLCBmdW5jdGlvbihyLCBpLCBhKSB7XG4gICAgICBsZXQgeyBkZWcycmFkOiBzIH0gPSBpLCB7IGNsYW1wOiBsLCBjb3JyZWN0RmxvYXQ6IHAsIGRlZmluZWQ6IGQsIGRlc3Ryb3lPYmplY3RQcm9wZXJ0aWVzOiBiLCBleHRlbmQ6IE0sIGZpcmVFdmVudDogdSwgaXNOdW1iZXI6IEEsIG1lcmdlOiB6LCBvYmplY3RFYWNoOiBmLCBwaWNrOiBPIH0gPSBhO1xuICAgICAgcmV0dXJuIGNsYXNzIHtcbiAgICAgICAgY29uc3RydWN0b3IoaCwgZywgdiwgTCwgeSkge1xuICAgICAgICAgIHRoaXMuaXNOZXcgPSAhMCwgdGhpcy5pc05ld0xhYmVsID0gITAsIHRoaXMuYXhpcyA9IGgsIHRoaXMucG9zID0gZywgdGhpcy50eXBlID0gdiB8fCBcIlwiLCB0aGlzLnBhcmFtZXRlcnMgPSB5IHx8IHt9LCB0aGlzLnRpY2ttYXJrT2Zmc2V0ID0gdGhpcy5wYXJhbWV0ZXJzLnRpY2ttYXJrT2Zmc2V0LCB0aGlzLm9wdGlvbnMgPSB0aGlzLnBhcmFtZXRlcnMub3B0aW9ucywgdSh0aGlzLCBcImluaXRcIiksIHYgfHwgTCB8fCB0aGlzLmFkZExhYmVsKCk7XG4gICAgICAgIH1cbiAgICAgICAgYWRkTGFiZWwoKSB7XG4gICAgICAgICAgbGV0IGggPSB0aGlzLCBnID0gaC5heGlzLCB2ID0gZy5vcHRpb25zLCBMID0gZy5jaGFydCwgeSA9IGcuY2F0ZWdvcmllcywgQiA9IGcubG9nYXJpdGhtaWMsIFggPSBnLm5hbWVzLCBGID0gaC5wb3MsIFQgPSBPKGgub3B0aW9ucyAmJiBoLm9wdGlvbnMubGFiZWxzLCB2LmxhYmVscyksIHcgPSBnLnRpY2tQb3NpdGlvbnMsIEggPSBGID09PSB3WzBdLCBDID0gRiA9PT0gd1t3Lmxlbmd0aCAtIDFdLCBxID0gKCFULnN0ZXAgfHwgVC5zdGVwID09PSAxKSAmJiBnLnRpY2tJbnRlcnZhbCA9PT0gMSwgbSA9IHcuaW5mbywgayA9IGgubGFiZWwsIHgsIE4sIFYsIFIgPSB0aGlzLnBhcmFtZXRlcnMuY2F0ZWdvcnkgfHwgKHkgPyBPKHlbRl0sIFhbRl0sIEYpIDogRik7XG4gICAgICAgICAgQiAmJiBBKFIpICYmIChSID0gcChCLmxpbjJsb2coUikpKSwgZy5kYXRlVGltZSAmJiAobSA/IHggPSAoTiA9IEwudGltZS5yZXNvbHZlRFRMRm9ybWF0KHYuZGF0ZVRpbWVMYWJlbEZvcm1hdHNbIXYuZ3JpZCAmJiBtLmhpZ2hlclJhbmtzW0ZdIHx8IG0udW5pdE5hbWVdKSkubWFpbiA6IEEoUikgJiYgKHggPSBnLmRhdGVUaW1lLmdldFhEYXRlRm9ybWF0KFIsIHYuZGF0ZVRpbWVMYWJlbEZvcm1hdHMgfHwge30pKSksIGguaXNGaXJzdCA9IEgsIGguaXNMYXN0ID0gQztcbiAgICAgICAgICBsZXQgSSA9IHsgYXhpczogZywgY2hhcnQ6IEwsIGRhdGVUaW1lTGFiZWxGb3JtYXQ6IHgsIGlzRmlyc3Q6IEgsIGlzTGFzdDogQywgcG9zOiBGLCB0aWNrOiBoLCB0aWNrUG9zaXRpb25JbmZvOiBtLCB2YWx1ZTogUiB9O1xuICAgICAgICAgIHUodGhpcywgXCJsYWJlbEZvcm1hdFwiLCBJKTtcbiAgICAgICAgICBsZXQgaiA9IChyMSkgPT4gVC5mb3JtYXR0ZXIgPyBULmZvcm1hdHRlci5jYWxsKHIxLCByMSkgOiBULmZvcm1hdCA/IChyMS50ZXh0ID0gZy5kZWZhdWx0TGFiZWxGb3JtYXR0ZXIuY2FsbChyMSksIHIuZm9ybWF0KFQuZm9ybWF0LCByMSwgTCkpIDogZy5kZWZhdWx0TGFiZWxGb3JtYXR0ZXIuY2FsbChyMSksIFUgPSBqLmNhbGwoSSwgSSksIF8gPSBOICYmIE4ubGlzdDtcbiAgICAgICAgICBfID8gaC5zaG9ydGVuTGFiZWwgPSBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgIGZvciAoViA9IDA7IFYgPCBfLmxlbmd0aDsgVisrKVxuICAgICAgICAgICAgICBpZiAoTShJLCB7IGRhdGVUaW1lTGFiZWxGb3JtYXQ6IF9bVl0gfSksIGsuYXR0cih7IHRleHQ6IGouY2FsbChJLCBJKSB9KSwgay5nZXRCQm94KCkud2lkdGggPCBnLmdldFNsb3RXaWR0aChoKSAtIDIgKiAoVC5wYWRkaW5nIHx8IDApKVxuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIGsuYXR0cih7IHRleHQ6IFwiXCIgfSk7XG4gICAgICAgICAgfSA6IGguc2hvcnRlbkxhYmVsID0gdm9pZCAwLCBxICYmIGcuX2FkZGVkUGxvdExCICYmIGgubW92ZUxhYmVsKFUsIFQpLCBkKGspIHx8IGgubW92ZWRMYWJlbCA/IGsgJiYgay50ZXh0U3RyICE9PSBVICYmICFxICYmICghay50ZXh0V2lkdGggfHwgVC5zdHlsZS53aWR0aCB8fCBrLnN0eWxlcy53aWR0aCB8fCBrLmNzcyh7IHdpZHRoOiBudWxsIH0pLCBrLmF0dHIoeyB0ZXh0OiBVIH0pLCBrLnRleHRQeExlbmd0aCA9IGsuZ2V0QkJveCgpLndpZHRoKSA6IChoLmxhYmVsID0gayA9IGguY3JlYXRlTGFiZWwoVSwgVCksIGgucm90YXRpb24gPSAwKTtcbiAgICAgICAgfVxuICAgICAgICBjcmVhdGVMYWJlbChoLCBnLCB2KSB7XG4gICAgICAgICAgbGV0IEwgPSB0aGlzLmF4aXMsIHkgPSBMLmNoYXJ0LCBCID0gZChoKSAmJiBnLmVuYWJsZWQgPyB5LnJlbmRlcmVyLnRleHQoaCwgdiA9PSBudWxsID8gdm9pZCAwIDogdi54LCB2ID09IG51bGwgPyB2b2lkIDAgOiB2LnksIGcudXNlSFRNTCkuYWRkKEwubGFiZWxHcm91cCkgOiB2b2lkIDA7XG4gICAgICAgICAgcmV0dXJuIEIgJiYgKHkuc3R5bGVkTW9kZSB8fCBCLmNzcyh6KGcuc3R5bGUpKSwgQi50ZXh0UHhMZW5ndGggPSBCLmdldEJCb3goKS53aWR0aCksIEI7XG4gICAgICAgIH1cbiAgICAgICAgZGVzdHJveSgpIHtcbiAgICAgICAgICBiKHRoaXMsIHRoaXMuYXhpcyk7XG4gICAgICAgIH1cbiAgICAgICAgZ2V0UG9zaXRpb24oaCwgZywgdiwgTCkge1xuICAgICAgICAgIGxldCB5ID0gdGhpcy5heGlzLCBCID0geS5jaGFydCwgWCA9IEwgJiYgQi5vbGRDaGFydEhlaWdodCB8fCBCLmNoYXJ0SGVpZ2h0LCBGID0geyB4OiBoID8gcCh5LnRyYW5zbGF0ZShnICsgdiwgdm9pZCAwLCB2b2lkIDAsIEwpICsgeS50cmFuc0IpIDogeS5sZWZ0ICsgeS5vZmZzZXQgKyAoeS5vcHBvc2l0ZSA/IChMICYmIEIub2xkQ2hhcnRXaWR0aCB8fCBCLmNoYXJ0V2lkdGgpIC0geS5yaWdodCAtIHkubGVmdCA6IDApLCB5OiBoID8gWCAtIHkuYm90dG9tICsgeS5vZmZzZXQgLSAoeS5vcHBvc2l0ZSA/IHkuaGVpZ2h0IDogMCkgOiBwKFggLSB5LnRyYW5zbGF0ZShnICsgdiwgdm9pZCAwLCB2b2lkIDAsIEwpIC0geS50cmFuc0IpIH07XG4gICAgICAgICAgcmV0dXJuIEYueSA9IGwoRi55LCAtMWU5LCAxZTkpLCB1KHRoaXMsIFwiYWZ0ZXJHZXRQb3NpdGlvblwiLCB7IHBvczogRiB9KSwgRjtcbiAgICAgICAgfVxuICAgICAgICBnZXRMYWJlbFBvc2l0aW9uKGgsIGcsIHYsIEwsIHksIEIsIFgsIEYpIHtcbiAgICAgICAgICBsZXQgVCwgdywgSCA9IHRoaXMuYXhpcywgQyA9IEgudHJhbnNBLCBxID0gSC5pc0xpbmtlZCAmJiBILmxpbmtlZFBhcmVudCA/IEgubGlua2VkUGFyZW50LnJldmVyc2VkIDogSC5yZXZlcnNlZCwgbSA9IEguc3RhZ2dlckxpbmVzLCBrID0gSC50aWNrUm90Q29yciB8fCB7IHg6IDAsIHk6IDAgfSwgeCA9IEwgfHwgSC5yZXNlcnZlU3BhY2VEZWZhdWx0ID8gMCA6IC1ILmxhYmVsT2Zmc2V0ICogKEgubGFiZWxBbGlnbiA9PT0gXCJjZW50ZXJcIiA/IDAuNSA6IDEpLCBOID0geS5kaXN0YW5jZSwgViA9IHt9O1xuICAgICAgICAgIHJldHVybiBUID0gSC5zaWRlID09PSAwID8gdi5yb3RhdGlvbiA/IC1OIDogLXYuZ2V0QkJveCgpLmhlaWdodCA6IEguc2lkZSA9PT0gMiA/IGsueSArIE4gOiBNYXRoLmNvcyh2LnJvdGF0aW9uICogcykgKiAoay55IC0gdi5nZXRCQm94KCExLCAwKS5oZWlnaHQgLyAyKSwgZCh5LnkpICYmIChUID0gSC5zaWRlID09PSAwICYmIEguaG9yaXogPyB5LnkgKyBUIDogeS55KSwgaCA9IGggKyBPKHkueCwgWzAsIDEsIDAsIC0xXVtILnNpZGVdICogTikgKyB4ICsgay54IC0gKEIgJiYgTCA/IEIgKiBDICogKHEgPyAtMSA6IDEpIDogMCksIGcgPSBnICsgVCAtIChCICYmICFMID8gQiAqIEMgKiAocSA/IDEgOiAtMSkgOiAwKSwgbSAmJiAodyA9IFggLyAoRiB8fCAxKSAlIG0sIEgub3Bwb3NpdGUgJiYgKHcgPSBtIC0gdyAtIDEpLCBnICs9IHcgKiAoSC5sYWJlbE9mZnNldCAvIG0pKSwgVi54ID0gaCwgVi55ID0gTWF0aC5yb3VuZChnKSwgdSh0aGlzLCBcImFmdGVyR2V0TGFiZWxQb3NpdGlvblwiLCB7IHBvczogViwgdGlja21hcmtPZmZzZXQ6IEIsIGluZGV4OiBYIH0pLCBWO1xuICAgICAgICB9XG4gICAgICAgIGdldExhYmVsU2l6ZSgpIHtcbiAgICAgICAgICByZXR1cm4gdGhpcy5sYWJlbCA/IHRoaXMubGFiZWwuZ2V0QkJveCgpW3RoaXMuYXhpcy5ob3JpeiA/IFwiaGVpZ2h0XCIgOiBcIndpZHRoXCJdIDogMDtcbiAgICAgICAgfVxuICAgICAgICBnZXRNYXJrUGF0aChoLCBnLCB2LCBMLCB5ID0gITEsIEIpIHtcbiAgICAgICAgICByZXR1cm4gQi5jcmlzcExpbmUoW1tcIk1cIiwgaCwgZ10sIFtcIkxcIiwgaCArICh5ID8gMCA6IC12KSwgZyArICh5ID8gdiA6IDApXV0sIEwpO1xuICAgICAgICB9XG4gICAgICAgIGhhbmRsZU92ZXJmbG93KGgpIHtcbiAgICAgICAgICBsZXQgZyA9IHRoaXMuYXhpcywgdiA9IGcub3B0aW9ucy5sYWJlbHMsIEwgPSBoLngsIHkgPSBnLmNoYXJ0LmNoYXJ0V2lkdGgsIEIgPSBnLmNoYXJ0LnNwYWNpbmcsIFggPSBPKGcubGFiZWxMZWZ0LCBNYXRoLm1pbihnLnBvcywgQlszXSkpLCBGID0gTyhnLmxhYmVsUmlnaHQsIE1hdGgubWF4KGcuaXNSYWRpYWwgPyAwIDogZy5wb3MgKyBnLmxlbiwgeSAtIEJbMV0pKSwgVCA9IHRoaXMubGFiZWwsIHcgPSB0aGlzLnJvdGF0aW9uLCBIID0geyBsZWZ0OiAwLCBjZW50ZXI6IDAuNSwgcmlnaHQ6IDEgfVtnLmxhYmVsQWxpZ24gfHwgVC5hdHRyKFwiYWxpZ25cIildLCBDID0gVC5nZXRCQm94KCkud2lkdGgsIHEgPSBnLmdldFNsb3RXaWR0aCh0aGlzKSwgbSA9IHt9LCBrID0gcSwgeCA9IDEsIE4sIFYsIFI7XG4gICAgICAgICAgdyB8fCB2Lm92ZXJmbG93ICE9PSBcImp1c3RpZnlcIiA/IHcgPCAwICYmIEwgLSBIICogQyA8IFggPyBSID0gTWF0aC5yb3VuZChMIC8gTWF0aC5jb3ModyAqIHMpIC0gWCkgOiB3ID4gMCAmJiBMICsgSCAqIEMgPiBGICYmIChSID0gTWF0aC5yb3VuZCgoeSAtIEwpIC8gTWF0aC5jb3ModyAqIHMpKSkgOiAoTiA9IEwgLSBIICogQywgViA9IEwgKyAoMSAtIEgpICogQywgTiA8IFggPyBrID0gaC54ICsgayAqICgxIC0gSCkgLSBYIDogViA+IEYgJiYgKGsgPSBGIC0gaC54ICsgayAqIEgsIHggPSAtMSksIChrID0gTWF0aC5taW4ocSwgaykpIDwgcSAmJiBnLmxhYmVsQWxpZ24gPT09IFwiY2VudGVyXCIgJiYgKGgueCArPSB4ICogKHEgLSBrIC0gSCAqIChxIC0gTWF0aC5taW4oQywgaykpKSksIChDID4gayB8fCBnLmF1dG9Sb3RhdGlvbiAmJiAoVC5zdHlsZXMgfHwge30pLndpZHRoKSAmJiAoUiA9IGspKSwgUiAmJiAodGhpcy5zaG9ydGVuTGFiZWwgPyB0aGlzLnNob3J0ZW5MYWJlbCgpIDogKG0ud2lkdGggPSBNYXRoLmZsb29yKFIpICsgXCJweFwiLCAodi5zdHlsZSB8fCB7fSkudGV4dE92ZXJmbG93IHx8IChtLnRleHRPdmVyZmxvdyA9IFwiZWxsaXBzaXNcIiksIFQuY3NzKG0pKSk7XG4gICAgICAgIH1cbiAgICAgICAgbW92ZUxhYmVsKGgsIGcpIHtcbiAgICAgICAgICBsZXQgdiA9IHRoaXMsIEwgPSB2LmxhYmVsLCB5ID0gdi5heGlzLCBCID0gITEsIFg7XG4gICAgICAgICAgTCAmJiBMLnRleHRTdHIgPT09IGggPyAodi5tb3ZlZExhYmVsID0gTCwgQiA9ICEwLCBkZWxldGUgdi5sYWJlbCkgOiBmKHkudGlja3MsIGZ1bmN0aW9uKEYpIHtcbiAgICAgICAgICAgIEIgfHwgRi5pc05ldyB8fCBGID09PSB2IHx8ICFGLmxhYmVsIHx8IEYubGFiZWwudGV4dFN0ciAhPT0gaCB8fCAodi5tb3ZlZExhYmVsID0gRi5sYWJlbCwgQiA9ICEwLCBGLmxhYmVsUG9zID0gdi5tb3ZlZExhYmVsLnh5LCBkZWxldGUgRi5sYWJlbCk7XG4gICAgICAgICAgfSksICFCICYmICh2LmxhYmVsUG9zIHx8IEwpICYmIChYID0gdi5sYWJlbFBvcyB8fCBMLnh5LCB2Lm1vdmVkTGFiZWwgPSB2LmNyZWF0ZUxhYmVsKGgsIGcsIFgpLCB2Lm1vdmVkTGFiZWwgJiYgdi5tb3ZlZExhYmVsLmF0dHIoeyBvcGFjaXR5OiAwIH0pKTtcbiAgICAgICAgfVxuICAgICAgICByZW5kZXIoaCwgZywgdikge1xuICAgICAgICAgIGxldCBMID0gdGhpcy5heGlzLCB5ID0gTC5ob3JpeiwgQiA9IHRoaXMucG9zLCBYID0gTyh0aGlzLnRpY2ttYXJrT2Zmc2V0LCBMLnRpY2ttYXJrT2Zmc2V0KSwgRiA9IHRoaXMuZ2V0UG9zaXRpb24oeSwgQiwgWCwgZyksIFQgPSBGLngsIHcgPSBGLnksIEggPSBMLnBvcywgQyA9IEggKyBMLmxlbiwgcSA9IHkgPyBUIDogdztcbiAgICAgICAgICAhTC5jaGFydC5wb2xhciAmJiB0aGlzLmlzTmV3ICYmIChwKHEpIDwgSCB8fCBxID4gQykgJiYgKHYgPSAwKTtcbiAgICAgICAgICBsZXQgbSA9IE8odiwgdGhpcy5sYWJlbCAmJiB0aGlzLmxhYmVsLm5ld09wYWNpdHksIDEpO1xuICAgICAgICAgIHYgPSBPKHYsIDEpLCB0aGlzLmlzQWN0aXZlID0gITAsIHRoaXMucmVuZGVyR3JpZExpbmUoZywgdiksIHRoaXMucmVuZGVyTWFyayhGLCB2KSwgdGhpcy5yZW5kZXJMYWJlbChGLCBnLCBtLCBoKSwgdGhpcy5pc05ldyA9ICExLCB1KHRoaXMsIFwiYWZ0ZXJSZW5kZXJcIik7XG4gICAgICAgIH1cbiAgICAgICAgcmVuZGVyR3JpZExpbmUoaCwgZykge1xuICAgICAgICAgIGxldCB2ID0gdGhpcy5heGlzLCBMID0gdi5vcHRpb25zLCB5ID0ge30sIEIgPSB0aGlzLnBvcywgWCA9IHRoaXMudHlwZSwgRiA9IE8odGhpcy50aWNrbWFya09mZnNldCwgdi50aWNrbWFya09mZnNldCksIFQgPSB2LmNoYXJ0LnJlbmRlcmVyLCB3ID0gdGhpcy5ncmlkTGluZSwgSCwgQyA9IEwuZ3JpZExpbmVXaWR0aCwgcSA9IEwuZ3JpZExpbmVDb2xvciwgbSA9IEwuZ3JpZExpbmVEYXNoU3R5bGU7XG4gICAgICAgICAgdGhpcy50eXBlID09PSBcIm1pbm9yXCIgJiYgKEMgPSBMLm1pbm9yR3JpZExpbmVXaWR0aCwgcSA9IEwubWlub3JHcmlkTGluZUNvbG9yLCBtID0gTC5taW5vckdyaWRMaW5lRGFzaFN0eWxlKSwgdyB8fCAodi5jaGFydC5zdHlsZWRNb2RlIHx8ICh5LnN0cm9rZSA9IHEsIHlbXCJzdHJva2Utd2lkdGhcIl0gPSBDIHx8IDAsIHkuZGFzaHN0eWxlID0gbSksIFggfHwgKHkuekluZGV4ID0gMSksIGggJiYgKGcgPSAwKSwgdGhpcy5ncmlkTGluZSA9IHcgPSBULnBhdGgoKS5hdHRyKHkpLmFkZENsYXNzKFwiaGlnaGNoYXJ0cy1cIiArIChYID8gWCArIFwiLVwiIDogXCJcIikgKyBcImdyaWQtbGluZVwiKS5hZGQodi5ncmlkR3JvdXApKSwgdyAmJiAoSCA9IHYuZ2V0UGxvdExpbmVQYXRoKHsgdmFsdWU6IEIgKyBGLCBsaW5lV2lkdGg6IHcuc3Ryb2tlV2lkdGgoKSwgZm9yY2U6IFwicGFzc1wiLCBvbGQ6IGgsIGFjcm9zc1BhbmVzOiAhMSB9KSkgJiYgd1toIHx8IHRoaXMuaXNOZXcgPyBcImF0dHJcIiA6IFwiYW5pbWF0ZVwiXSh7IGQ6IEgsIG9wYWNpdHk6IGcgfSk7XG4gICAgICAgIH1cbiAgICAgICAgcmVuZGVyTWFyayhoLCBnKSB7XG4gICAgICAgICAgbGV0IHYgPSB0aGlzLmF4aXMsIEwgPSB2Lm9wdGlvbnMsIHkgPSB2LmNoYXJ0LnJlbmRlcmVyLCBCID0gdGhpcy50eXBlLCBYID0gdi50aWNrU2l6ZShCID8gQiArIFwiVGlja1wiIDogXCJ0aWNrXCIpLCBGID0gaC54LCBUID0gaC55LCB3ID0gTyhMW0IgIT09IFwibWlub3JcIiA/IFwidGlja1dpZHRoXCIgOiBcIm1pbm9yVGlja1dpZHRoXCJdLCAhQiAmJiB2LmlzWEF4aXMgPyAxIDogMCksIEggPSBMW0IgIT09IFwibWlub3JcIiA/IFwidGlja0NvbG9yXCIgOiBcIm1pbm9yVGlja0NvbG9yXCJdLCBDID0gdGhpcy5tYXJrLCBxID0gIUM7XG4gICAgICAgICAgWCAmJiAodi5vcHBvc2l0ZSAmJiAoWFswXSA9IC1YWzBdKSwgQyB8fCAodGhpcy5tYXJrID0gQyA9IHkucGF0aCgpLmFkZENsYXNzKFwiaGlnaGNoYXJ0cy1cIiArIChCID8gQiArIFwiLVwiIDogXCJcIikgKyBcInRpY2tcIikuYWRkKHYuYXhpc0dyb3VwKSwgdi5jaGFydC5zdHlsZWRNb2RlIHx8IEMuYXR0cih7IHN0cm9rZTogSCwgXCJzdHJva2Utd2lkdGhcIjogdyB9KSksIENbcSA/IFwiYXR0clwiIDogXCJhbmltYXRlXCJdKHsgZDogdGhpcy5nZXRNYXJrUGF0aChGLCBULCBYWzBdLCBDLnN0cm9rZVdpZHRoKCksIHYuaG9yaXosIHkpLCBvcGFjaXR5OiBnIH0pKTtcbiAgICAgICAgfVxuICAgICAgICByZW5kZXJMYWJlbChoLCBnLCB2LCBMKSB7XG4gICAgICAgICAgbGV0IHkgPSB0aGlzLmF4aXMsIEIgPSB5Lmhvcml6LCBYID0geS5vcHRpb25zLCBGID0gdGhpcy5sYWJlbCwgVCA9IFgubGFiZWxzLCB3ID0gVC5zdGVwLCBIID0gTyh0aGlzLnRpY2ttYXJrT2Zmc2V0LCB5LnRpY2ttYXJrT2Zmc2V0KSwgQyA9IGgueCwgcSA9IGgueSwgbSA9ICEwO1xuICAgICAgICAgIEYgJiYgQShDKSAmJiAoRi54eSA9IGggPSB0aGlzLmdldExhYmVsUG9zaXRpb24oQywgcSwgRiwgQiwgVCwgSCwgTCwgdyksICghdGhpcy5pc0ZpcnN0IHx8IHRoaXMuaXNMYXN0IHx8IFguc2hvd0ZpcnN0TGFiZWwpICYmICghdGhpcy5pc0xhc3QgfHwgdGhpcy5pc0ZpcnN0IHx8IFguc2hvd0xhc3RMYWJlbCkgPyAhQiB8fCBULnN0ZXAgfHwgVC5yb3RhdGlvbiB8fCBnIHx8IHYgPT09IDAgfHwgdGhpcy5oYW5kbGVPdmVyZmxvdyhoKSA6IG0gPSAhMSwgdyAmJiBMICUgdyAmJiAobSA9ICExKSwgbSAmJiBBKGgueSkgPyAoaC5vcGFjaXR5ID0gdiwgRlt0aGlzLmlzTmV3TGFiZWwgPyBcImF0dHJcIiA6IFwiYW5pbWF0ZVwiXShoKS5zaG93KCEwKSwgdGhpcy5pc05ld0xhYmVsID0gITEpIDogKEYuaGlkZSgpLCB0aGlzLmlzTmV3TGFiZWwgPSAhMCkpO1xuICAgICAgICB9XG4gICAgICAgIHJlcGxhY2VNb3ZlZExhYmVsKCkge1xuICAgICAgICAgIGxldCBoID0gdGhpcy5sYWJlbCwgZyA9IHRoaXMuYXhpcztcbiAgICAgICAgICBoICYmICF0aGlzLmlzTmV3ICYmIChoLmFuaW1hdGUoeyBvcGFjaXR5OiAwIH0sIHZvaWQgMCwgaC5kZXN0cm95KSwgZGVsZXRlIHRoaXMubGFiZWwpLCBnLmlzRGlydHkgPSAhMCwgdGhpcy5sYWJlbCA9IHRoaXMubW92ZWRMYWJlbCwgZGVsZXRlIHRoaXMubW92ZWRMYWJlbDtcbiAgICAgICAgfVxuICAgICAgfTtcbiAgICB9KSwgbihvLCBcIkNvcmUvQXhpcy9BeGlzLmpzXCIsIFtvW1wiQ29yZS9BbmltYXRpb24vQW5pbWF0aW9uVXRpbGl0aWVzLmpzXCJdLCBvW1wiQ29yZS9BeGlzL0F4aXNEZWZhdWx0cy5qc1wiXSwgb1tcIkNvcmUvQ29sb3IvQ29sb3IuanNcIl0sIG9bXCJDb3JlL0RlZmF1bHRzLmpzXCJdLCBvW1wiQ29yZS9Gb3VuZGF0aW9uLmpzXCJdLCBvW1wiQ29yZS9HbG9iYWxzLmpzXCJdLCBvW1wiQ29yZS9BeGlzL1RpY2suanNcIl0sIG9bXCJDb3JlL1V0aWxpdGllcy5qc1wiXV0sIGZ1bmN0aW9uKHIsIGksIGEsIHMsIGwsIHAsIGQsIGIpIHtcbiAgICAgIGxldCB7IGFuaW1PYmplY3Q6IE0gfSA9IHIsIHsgeEF4aXM6IHUsIHlBeGlzOiBBIH0gPSBpLCB7IGRlZmF1bHRPcHRpb25zOiB6IH0gPSBzLCB7IHJlZ2lzdGVyRXZlbnRPcHRpb25zOiBmIH0gPSBsLCB7IGRlZzJyYWQ6IE8gfSA9IHAsIHsgYXJyYXlNYXg6IGgsIGFycmF5TWluOiBnLCBjbGFtcDogdiwgY29ycmVjdEZsb2F0OiBMLCBkZWZpbmVkOiB5LCBkZXN0cm95T2JqZWN0UHJvcGVydGllczogQiwgZXJhc2U6IFgsIGVycm9yOiBGLCBleHRlbmQ6IFQsIGZpcmVFdmVudDogdywgZ2V0Q2xvc2VzdERpc3RhbmNlOiBILCBpbnNlcnRJdGVtOiBDLCBpc0FycmF5OiBxLCBpc051bWJlcjogbSwgaXNTdHJpbmc6IGssIG1lcmdlOiB4LCBub3JtYWxpemVUaWNrSW50ZXJ2YWw6IE4sIG9iamVjdEVhY2g6IFYsIHBpY2s6IFIsIHJlbGF0aXZlTGVuZ3RoOiBJLCByZW1vdmVFdmVudDogaiwgc3BsYXQ6IFUsIHN5bmNUaW1lb3V0OiBfIH0gPSBiLCByMSA9IChRLCBFKSA9PiBOKEUsIHZvaWQgMCwgdm9pZCAwLCBSKFEub3B0aW9ucy5hbGxvd0RlY2ltYWxzLCBFIDwgMC41IHx8IFEudGlja0Ftb3VudCAhPT0gdm9pZCAwKSwgISFRLnRpY2tBbW91bnQpO1xuICAgICAgVCh6LCB7IHhBeGlzOiB1LCB5QXhpczogeCh1LCBBKSB9KTtcbiAgICAgIGNsYXNzIEsge1xuICAgICAgICBjb25zdHJ1Y3RvcihFLCBELCBHKSB7XG4gICAgICAgICAgdGhpcy5pbml0KEUsIEQsIEcpO1xuICAgICAgICB9XG4gICAgICAgIGluaXQoRSwgRCwgRyA9IHRoaXMuY29sbCkge1xuICAgICAgICAgIGxldCBKID0gRyA9PT0gXCJ4QXhpc1wiLCBTID0gdGhpcy5pc1pBeGlzIHx8IChFLmludmVydGVkID8gIUogOiBKKTtcbiAgICAgICAgICB0aGlzLmNoYXJ0ID0gRSwgdGhpcy5ob3JpeiA9IFMsIHRoaXMuaXNYQXhpcyA9IEosIHRoaXMuY29sbCA9IEcsIHcodGhpcywgXCJpbml0XCIsIHsgdXNlck9wdGlvbnM6IEQgfSksIHRoaXMub3Bwb3NpdGUgPSBSKEQub3Bwb3NpdGUsIHRoaXMub3Bwb3NpdGUpLCB0aGlzLnNpZGUgPSBSKEQuc2lkZSwgdGhpcy5zaWRlLCBTID8gdGhpcy5vcHBvc2l0ZSA/IDAgOiAyIDogdGhpcy5vcHBvc2l0ZSA/IDEgOiAzKSwgdGhpcy5zZXRPcHRpb25zKEQpO1xuICAgICAgICAgIGxldCBXID0gdGhpcy5vcHRpb25zLCBQID0gVy5sYWJlbHM7XG4gICAgICAgICAgdGhpcy50eXBlID8/ICh0aGlzLnR5cGUgPSBXLnR5cGUgfHwgXCJsaW5lYXJcIiksIHRoaXMudW5pcXVlTmFtZXMgPz8gKHRoaXMudW5pcXVlTmFtZXMgPSBXLnVuaXF1ZU5hbWVzID8/ICEwKSwgdyh0aGlzLCBcImFmdGVyU2V0VHlwZVwiKSwgdGhpcy51c2VyT3B0aW9ucyA9IEQsIHRoaXMubWluUGl4ZWxQYWRkaW5nID0gMCwgdGhpcy5yZXZlcnNlZCA9IFIoVy5yZXZlcnNlZCwgdGhpcy5yZXZlcnNlZCksIHRoaXMudmlzaWJsZSA9IFcudmlzaWJsZSwgdGhpcy56b29tRW5hYmxlZCA9IFcuem9vbUVuYWJsZWQsIHRoaXMuaGFzTmFtZXMgPSB0aGlzLnR5cGUgPT09IFwiY2F0ZWdvcnlcIiB8fCBXLmNhdGVnb3JpZXMgPT09ICEwLCB0aGlzLmNhdGVnb3JpZXMgPSBxKFcuY2F0ZWdvcmllcykgJiYgVy5jYXRlZ29yaWVzIHx8ICh0aGlzLmhhc05hbWVzID8gW10gOiB2b2lkIDApLCB0aGlzLm5hbWVzIHx8ICh0aGlzLm5hbWVzID0gW10sIHRoaXMubmFtZXMua2V5cyA9IHt9KSwgdGhpcy5wbG90TGluZXNBbmRCYW5kc0dyb3VwcyA9IHt9LCB0aGlzLnBvc2l0aXZlVmFsdWVzT25seSA9ICEhdGhpcy5sb2dhcml0aG1pYywgdGhpcy5pc0xpbmtlZCA9IHkoVy5saW5rZWRUbyksIHRoaXMudGlja3MgPSB7fSwgdGhpcy5sYWJlbEVkZ2UgPSBbXSwgdGhpcy5taW5vclRpY2tzID0ge30sIHRoaXMucGxvdExpbmVzQW5kQmFuZHMgPSBbXSwgdGhpcy5hbHRlcm5hdGVCYW5kcyA9IHt9LCB0aGlzLmxlbiA/PyAodGhpcy5sZW4gPSAwKSwgdGhpcy5taW5SYW5nZSA9IHRoaXMudXNlck1pblJhbmdlID0gVy5taW5SYW5nZSB8fCBXLm1heFpvb20sIHRoaXMucmFuZ2UgPSBXLnJhbmdlLCB0aGlzLm9mZnNldCA9IFcub2Zmc2V0IHx8IDAsIHRoaXMubWF4ID0gdm9pZCAwLCB0aGlzLm1pbiA9IHZvaWQgMDtcbiAgICAgICAgICBsZXQgWSA9IFIoVy5jcm9zc2hhaXIsIFUoRS5vcHRpb25zLnRvb2x0aXAuY3Jvc3NoYWlycylbSiA/IDAgOiAxXSk7XG4gICAgICAgICAgdGhpcy5jcm9zc2hhaXIgPSBZID09PSAhMCA/IHt9IDogWSwgRS5heGVzLmluZGV4T2YodGhpcykgPT09IC0xICYmIChKID8gRS5heGVzLnNwbGljZShFLnhBeGlzLmxlbmd0aCwgMCwgdGhpcykgOiBFLmF4ZXMucHVzaCh0aGlzKSwgQyh0aGlzLCBFW3RoaXMuY29sbF0pKSwgRS5vcmRlckl0ZW1zKHRoaXMuY29sbCksIHRoaXMuc2VyaWVzID0gdGhpcy5zZXJpZXMgfHwgW10sIEUuaW52ZXJ0ZWQgJiYgIXRoaXMuaXNaQXhpcyAmJiBKICYmICF5KHRoaXMucmV2ZXJzZWQpICYmICh0aGlzLnJldmVyc2VkID0gITApLCB0aGlzLmxhYmVsUm90YXRpb24gPSBtKFAucm90YXRpb24pID8gUC5yb3RhdGlvbiA6IHZvaWQgMCwgZih0aGlzLCBXKSwgdyh0aGlzLCBcImFmdGVySW5pdFwiKTtcbiAgICAgICAgfVxuICAgICAgICBzZXRPcHRpb25zKEUpIHtcbiAgICAgICAgICBsZXQgRCA9IHRoaXMuaG9yaXogPyB7IGxhYmVsczogeyBhdXRvUm90YXRpb246IFstNDVdLCBwYWRkaW5nOiA0IH0sIG1hcmdpbjogMTUgfSA6IHsgbGFiZWxzOiB7IHBhZGRpbmc6IDEgfSwgdGl0bGU6IHsgcm90YXRpb246IDkwICogdGhpcy5zaWRlIH0gfTtcbiAgICAgICAgICB0aGlzLm9wdGlvbnMgPSB4KEQsIHpbdGhpcy5jb2xsXSwgRSksIHcodGhpcywgXCJhZnRlclNldE9wdGlvbnNcIiwgeyB1c2VyT3B0aW9uczogRSB9KTtcbiAgICAgICAgfVxuICAgICAgICBkZWZhdWx0TGFiZWxGb3JtYXR0ZXIoKSB7XG4gICAgICAgICAgbGV0IEUgPSB0aGlzLmF4aXMsIHsgbnVtYmVyRm9ybWF0dGVyOiBEIH0gPSB0aGlzLmNoYXJ0LCBHID0gbSh0aGlzLnZhbHVlKSA/IHRoaXMudmFsdWUgOiBOYU4sIEogPSBFLmNoYXJ0LnRpbWUsIFMgPSBFLmNhdGVnb3JpZXMsIFcgPSB0aGlzLmRhdGVUaW1lTGFiZWxGb3JtYXQsIFAgPSB6LmxhbmcsIFkgPSBQLm51bWVyaWNTeW1ib2xzLCBaID0gUC5udW1lcmljU3ltYm9sTWFnbml0dWRlIHx8IDFlMywgdDEgPSBFLmxvZ2FyaXRobWljID8gTWF0aC5hYnMoRykgOiBFLnRpY2tJbnRlcnZhbCwgaTEgPSBZICYmIFkubGVuZ3RoLCBuMSwgczE7XG4gICAgICAgICAgaWYgKFMpXG4gICAgICAgICAgICBzMSA9IGAke3RoaXMudmFsdWV9YDtcbiAgICAgICAgICBlbHNlIGlmIChXKVxuICAgICAgICAgICAgczEgPSBKLmRhdGVGb3JtYXQoVywgRyk7XG4gICAgICAgICAgZWxzZSBpZiAoaTEgJiYgWSAmJiB0MSA+PSAxZTMpXG4gICAgICAgICAgICBmb3IgKDsgaTEtLSAmJiBzMSA9PT0gdm9pZCAwOyApXG4gICAgICAgICAgICAgIHQxID49IChuMSA9IE1hdGgucG93KFosIGkxICsgMSkpICYmIDEwICogRyAlIG4xID09IDAgJiYgWVtpMV0gIT09IG51bGwgJiYgRyAhPT0gMCAmJiAoczEgPSBEKEcgLyBuMSwgLTEpICsgWVtpMV0pO1xuICAgICAgICAgIHJldHVybiBzMSA9PT0gdm9pZCAwICYmIChzMSA9IE1hdGguYWJzKEcpID49IDFlNCA/IEQoRywgLTEpIDogRChHLCAtMSwgdm9pZCAwLCBcIlwiKSksIHMxO1xuICAgICAgICB9XG4gICAgICAgIGdldFNlcmllc0V4dHJlbWVzKCkge1xuICAgICAgICAgIGxldCBFLCBEID0gdGhpcztcbiAgICAgICAgICB3KHRoaXMsIFwiZ2V0U2VyaWVzRXh0cmVtZXNcIiwgbnVsbCwgZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICBELmhhc1Zpc2libGVTZXJpZXMgPSAhMSwgRC5kYXRhTWluID0gRC5kYXRhTWF4ID0gRC50aHJlc2hvbGQgPSB2b2lkIDAsIEQuc29mdFRocmVzaG9sZCA9ICFELmlzWEF4aXMsIEQuc2VyaWVzLmZvckVhY2goKEcpID0+IHtcbiAgICAgICAgICAgICAgaWYgKEcucmVzZXJ2ZVNwYWNlKCkpIHtcbiAgICAgICAgICAgICAgICBsZXQgSiA9IEcub3B0aW9ucywgUywgVyA9IEoudGhyZXNob2xkLCBQLCBZO1xuICAgICAgICAgICAgICAgIGlmIChELmhhc1Zpc2libGVTZXJpZXMgPSAhMCwgRC5wb3NpdGl2ZVZhbHVlc09ubHkgJiYgMCA+PSAoVyB8fCAwKSAmJiAoVyA9IHZvaWQgMCksIEQuaXNYQXhpcylcbiAgICAgICAgICAgICAgICAgIChTID0gRy54RGF0YSkgJiYgUy5sZW5ndGggJiYgKFMgPSBELmxvZ2FyaXRobWljID8gUy5maWx0ZXIoKFopID0+IFogPiAwKSA6IFMsIFAgPSAoRSA9IEcuZ2V0WEV4dHJlbWVzKFMpKS5taW4sIFkgPSBFLm1heCwgbShQKSB8fCBQIGluc3RhbmNlb2YgRGF0ZSB8fCAoUyA9IFMuZmlsdGVyKG0pLCBQID0gKEUgPSBHLmdldFhFeHRyZW1lcyhTKSkubWluLCBZID0gRS5tYXgpLCBTLmxlbmd0aCAmJiAoRC5kYXRhTWluID0gTWF0aC5taW4oUihELmRhdGFNaW4sIFApLCBQKSwgRC5kYXRhTWF4ID0gTWF0aC5tYXgoUihELmRhdGFNYXgsIFkpLCBZKSkpO1xuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgbGV0IFogPSBHLmFwcGx5RXh0cmVtZXMoKTtcbiAgICAgICAgICAgICAgICAgIG0oWi5kYXRhTWluKSAmJiAoUCA9IFouZGF0YU1pbiwgRC5kYXRhTWluID0gTWF0aC5taW4oUihELmRhdGFNaW4sIFApLCBQKSksIG0oWi5kYXRhTWF4KSAmJiAoWSA9IFouZGF0YU1heCwgRC5kYXRhTWF4ID0gTWF0aC5tYXgoUihELmRhdGFNYXgsIFkpLCBZKSksIHkoVykgJiYgKEQudGhyZXNob2xkID0gVyksICghSi5zb2Z0VGhyZXNob2xkIHx8IEQucG9zaXRpdmVWYWx1ZXNPbmx5KSAmJiAoRC5zb2Z0VGhyZXNob2xkID0gITEpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfSksIHcodGhpcywgXCJhZnRlckdldFNlcmllc0V4dHJlbWVzXCIpO1xuICAgICAgICB9XG4gICAgICAgIHRyYW5zbGF0ZShFLCBELCBHLCBKLCBTLCBXKSB7XG4gICAgICAgICAgdmFyIGIxO1xuICAgICAgICAgIGxldCBQID0gdGhpcy5saW5rZWRQYXJlbnQgfHwgdGhpcywgWSA9IEogJiYgUC5vbGQgPyBQLm9sZC5taW4gOiBQLm1pbjtcbiAgICAgICAgICBpZiAoIW0oWSkpXG4gICAgICAgICAgICByZXR1cm4gTmFOO1xuICAgICAgICAgIGxldCBaID0gUC5taW5QaXhlbFBhZGRpbmcsIHQxID0gKFAuaXNPcmRpbmFsIHx8ICgoYjEgPSBQLmJyb2tlbkF4aXMpID09IG51bGwgPyB2b2lkIDAgOiBiMS5oYXNCcmVha3MpIHx8IFAubG9nYXJpdGhtaWMgJiYgUykgJiYgUC5saW4ydmFsLCBpMSA9IDEsIG4xID0gMCwgczEgPSBKICYmIFAub2xkID8gUC5vbGQudHJhbnNBIDogUC50cmFuc0EsIGQxID0gMDtcbiAgICAgICAgICByZXR1cm4gczEgfHwgKHMxID0gUC50cmFuc0EpLCBHICYmIChpMSAqPSAtMSwgbjEgPSBQLmxlbiksIFAucmV2ZXJzZWQgJiYgKGkxICo9IC0xLCBuMSAtPSBpMSAqIChQLnNlY3RvciB8fCBQLmxlbikpLCBEID8gKGQxID0gKEUgPSBFICogaTEgKyBuMSAtIFopIC8gczEgKyBZLCB0MSAmJiAoZDEgPSBQLmxpbjJ2YWwoZDEpKSkgOiAodDEgJiYgKEUgPSBQLnZhbDJsaW4oRSkpLCBkMSA9IGkxICogKEUgLSBZKSAqIHMxICsgbjEgKyBpMSAqIFogKyAobShXKSA/IHMxICogVyA6IDApLCBQLmlzUmFkaWFsIHx8IChkMSA9IEwoZDEpKSksIGQxO1xuICAgICAgICB9XG4gICAgICAgIHRvUGl4ZWxzKEUsIEQpIHtcbiAgICAgICAgICByZXR1cm4gdGhpcy50cmFuc2xhdGUoRSwgITEsICF0aGlzLmhvcml6LCB2b2lkIDAsICEwKSArIChEID8gMCA6IHRoaXMucG9zKTtcbiAgICAgICAgfVxuICAgICAgICB0b1ZhbHVlKEUsIEQpIHtcbiAgICAgICAgICByZXR1cm4gdGhpcy50cmFuc2xhdGUoRSAtIChEID8gMCA6IHRoaXMucG9zKSwgITAsICF0aGlzLmhvcml6LCB2b2lkIDAsICEwKTtcbiAgICAgICAgfVxuICAgICAgICBnZXRQbG90TGluZVBhdGgoRSkge1xuICAgICAgICAgIGxldCBEID0gdGhpcywgRyA9IEQuY2hhcnQsIEogPSBELmxlZnQsIFMgPSBELnRvcCwgVyA9IEUub2xkLCBQID0gRS52YWx1ZSwgWSA9IEUubGluZVdpZHRoLCBaID0gVyAmJiBHLm9sZENoYXJ0SGVpZ2h0IHx8IEcuY2hhcnRIZWlnaHQsIHQxID0gVyAmJiBHLm9sZENoYXJ0V2lkdGggfHwgRy5jaGFydFdpZHRoLCBpMSA9IEQudHJhbnNCLCBuMSA9IEUudHJhbnNsYXRlZFZhbHVlLCBzMSA9IEUuZm9yY2UsIGQxLCBiMSwgYzEsIGExLCBsMTtcbiAgICAgICAgICBmdW5jdGlvbiBwMShBMSwgdTEsIGgxKSB7XG4gICAgICAgICAgICByZXR1cm4gczEgIT09IFwicGFzc1wiICYmIChBMSA8IHUxIHx8IEExID4gaDEpICYmIChzMSA/IEExID0gdihBMSwgdTEsIGgxKSA6IGwxID0gITApLCBBMTtcbiAgICAgICAgICB9XG4gICAgICAgICAgbGV0IE0xID0geyB2YWx1ZTogUCwgbGluZVdpZHRoOiBZLCBvbGQ6IFcsIGZvcmNlOiBzMSwgYWNyb3NzUGFuZXM6IEUuYWNyb3NzUGFuZXMsIHRyYW5zbGF0ZWRWYWx1ZTogbjEgfTtcbiAgICAgICAgICByZXR1cm4gdyh0aGlzLCBcImdldFBsb3RMaW5lUGF0aFwiLCBNMSwgZnVuY3Rpb24oQTEpIHtcbiAgICAgICAgICAgIGQxID0gYzEgPSAobjEgPSB2KG4xID0gUihuMSwgRC50cmFuc2xhdGUoUCwgdm9pZCAwLCB2b2lkIDAsIFcpKSwgLTFlOSwgMWU5KSkgKyBpMSwgYjEgPSBhMSA9IFogLSBuMSAtIGkxLCBtKG4xKSA/IEQuaG9yaXogPyAoYjEgPSBTLCBhMSA9IFogLSBELmJvdHRvbSArIChELm9wdGlvbnMuaXNJbnRlcm5hbCA/IDAgOiBHLnNjcm9sbGFibGVQaXhlbHNZIHx8IDApLCBkMSA9IGMxID0gcDEoZDEsIEosIEogKyBELndpZHRoKSkgOiAoZDEgPSBKLCBjMSA9IHQxIC0gRC5yaWdodCArIChHLnNjcm9sbGFibGVQaXhlbHNYIHx8IDApLCBiMSA9IGExID0gcDEoYjEsIFMsIFMgKyBELmhlaWdodCkpIDogKGwxID0gITAsIHMxID0gITEpLCBBMS5wYXRoID0gbDEgJiYgIXMxID8gdm9pZCAwIDogRy5yZW5kZXJlci5jcmlzcExpbmUoW1tcIk1cIiwgZDEsIGIxXSwgW1wiTFwiLCBjMSwgYTFdXSwgWSB8fCAxKTtcbiAgICAgICAgICB9KSwgTTEucGF0aDtcbiAgICAgICAgfVxuICAgICAgICBnZXRMaW5lYXJUaWNrUG9zaXRpb25zKEUsIEQsIEcpIHtcbiAgICAgICAgICBsZXQgSiwgUywgVywgUCA9IEwoTWF0aC5mbG9vcihEIC8gRSkgKiBFKSwgWSA9IEwoTWF0aC5jZWlsKEcgLyBFKSAqIEUpLCBaID0gW107XG4gICAgICAgICAgaWYgKEwoUCArIEUpID09PSBQICYmIChXID0gMjApLCB0aGlzLnNpbmdsZSlcbiAgICAgICAgICAgIHJldHVybiBbRF07XG4gICAgICAgICAgZm9yIChKID0gUDsgSiA8PSBZICYmIChaLnB1c2goSiksIChKID0gTChKICsgRSwgVykpICE9PSBTKTsgKVxuICAgICAgICAgICAgUyA9IEo7XG4gICAgICAgICAgcmV0dXJuIFo7XG4gICAgICAgIH1cbiAgICAgICAgZ2V0TWlub3JUaWNrSW50ZXJ2YWwoKSB7XG4gICAgICAgICAgbGV0IHsgbWlub3JUaWNrczogRSwgbWlub3JUaWNrSW50ZXJ2YWw6IEQgfSA9IHRoaXMub3B0aW9ucztcbiAgICAgICAgICByZXR1cm4gRSA9PT0gITAgPyBSKEQsIFwiYXV0b1wiKSA6IEUgIT09ICExID8gRCA6IHZvaWQgMDtcbiAgICAgICAgfVxuICAgICAgICBnZXRNaW5vclRpY2tQb3NpdGlvbnMoKSB7XG4gICAgICAgICAgbGV0IEUgPSB0aGlzLm9wdGlvbnMsIEQgPSB0aGlzLnRpY2tQb3NpdGlvbnMsIEcgPSB0aGlzLm1pbm9yVGlja0ludGVydmFsLCBKID0gdGhpcy5wb2ludFJhbmdlUGFkZGluZyB8fCAwLCBTID0gKHRoaXMubWluIHx8IDApIC0gSiwgVyA9ICh0aGlzLm1heCB8fCAwKSArIEosIFAgPSBXIC0gUywgWSA9IFtdLCBaO1xuICAgICAgICAgIGlmIChQICYmIFAgLyBHIDwgdGhpcy5sZW4gLyAzKSB7XG4gICAgICAgICAgICBsZXQgdDEgPSB0aGlzLmxvZ2FyaXRobWljO1xuICAgICAgICAgICAgaWYgKHQxKVxuICAgICAgICAgICAgICB0aGlzLnBhZGRlZFRpY2tzLmZvckVhY2goZnVuY3Rpb24oaTEsIG4xLCBzMSkge1xuICAgICAgICAgICAgICAgIG4xICYmIFkucHVzaC5hcHBseShZLCB0MS5nZXRMb2dUaWNrUG9zaXRpb25zKEcsIHMxW24xIC0gMV0sIHMxW24xXSwgITApKTtcbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBlbHNlIGlmICh0aGlzLmRhdGVUaW1lICYmIHRoaXMuZ2V0TWlub3JUaWNrSW50ZXJ2YWwoKSA9PT0gXCJhdXRvXCIpXG4gICAgICAgICAgICAgIFkgPSBZLmNvbmNhdCh0aGlzLmdldFRpbWVUaWNrcyh0aGlzLmRhdGVUaW1lLm5vcm1hbGl6ZVRpbWVUaWNrSW50ZXJ2YWwoRyksIFMsIFcsIEUuc3RhcnRPZldlZWspKTtcbiAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgZm9yIChaID0gUyArIChEWzBdIC0gUykgJSBHOyBaIDw9IFcgJiYgWiAhPT0gWVswXTsgWiArPSBHKVxuICAgICAgICAgICAgICAgIFkucHVzaChaKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIFkubGVuZ3RoICE9PSAwICYmIHRoaXMudHJpbVRpY2tzKFkpLCBZO1xuICAgICAgICB9XG4gICAgICAgIGFkanVzdEZvck1pblJhbmdlKCkge1xuICAgICAgICAgIGxldCBFID0gdGhpcy5vcHRpb25zLCBEID0gdGhpcy5sb2dhcml0aG1pYywgeyBtYXg6IEcsIG1pbjogSiwgbWluUmFuZ2U6IFMgfSA9IHRoaXMsIFcsIFAsIFksIFo7XG4gICAgICAgICAgdGhpcy5pc1hBeGlzICYmIFMgPT09IHZvaWQgMCAmJiAhRCAmJiAoUyA9IHkoRS5taW4pIHx8IHkoRS5tYXgpIHx8IHkoRS5mbG9vcikgfHwgeShFLmNlaWxpbmcpID8gbnVsbCA6IE1hdGgubWluKDUgKiAoSCh0aGlzLnNlcmllcy5tYXAoKHQxKSA9PiB7XG4gICAgICAgICAgICB2YXIgaTE7XG4gICAgICAgICAgICByZXR1cm4gKHQxLnhJbmNyZW1lbnQgPyAoaTEgPSB0MS54RGF0YSkgPT0gbnVsbCA/IHZvaWQgMCA6IGkxLnNsaWNlKDAsIDIpIDogdDEueERhdGEpIHx8IFtdO1xuICAgICAgICAgIH0pKSB8fCAwKSwgdGhpcy5kYXRhTWF4IC0gdGhpcy5kYXRhTWluKSksIG0oRykgJiYgbShKKSAmJiBtKFMpICYmIEcgLSBKIDwgUyAmJiAoUCA9IHRoaXMuZGF0YU1heCAtIHRoaXMuZGF0YU1pbiA+PSBTLCBXID0gKFMgLSBHICsgSikgLyAyLCBZID0gW0ogLSBXLCBSKEUubWluLCBKIC0gVyldLCBQICYmIChZWzJdID0gRCA/IEQubG9nMmxpbih0aGlzLmRhdGFNaW4pIDogdGhpcy5kYXRhTWluKSwgWiA9IFsoSiA9IGgoWSkpICsgUywgUihFLm1heCwgSiArIFMpXSwgUCAmJiAoWlsyXSA9IEQgPyBELmxvZzJsaW4odGhpcy5kYXRhTWF4KSA6IHRoaXMuZGF0YU1heCksIChHID0gZyhaKSkgLSBKIDwgUyAmJiAoWVswXSA9IEcgLSBTLCBZWzFdID0gUihFLm1pbiwgRyAtIFMpLCBKID0gaChZKSkpLCB0aGlzLm1pblJhbmdlID0gUywgdGhpcy5taW4gPSBKLCB0aGlzLm1heCA9IEc7XG4gICAgICAgIH1cbiAgICAgICAgZ2V0Q2xvc2VzdCgpIHtcbiAgICAgICAgICBsZXQgRSwgRDtcbiAgICAgICAgICBpZiAodGhpcy5jYXRlZ29yaWVzKVxuICAgICAgICAgICAgRCA9IDE7XG4gICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBsZXQgRyA9IFtdO1xuICAgICAgICAgICAgdGhpcy5zZXJpZXMuZm9yRWFjaChmdW5jdGlvbihKKSB7XG4gICAgICAgICAgICAgIHZhciBXO1xuICAgICAgICAgICAgICBsZXQgUyA9IEouY2xvc2VzdFBvaW50UmFuZ2U7XG4gICAgICAgICAgICAgICgoVyA9IEoueERhdGEpID09IG51bGwgPyB2b2lkIDAgOiBXLmxlbmd0aCkgPT09IDEgPyBHLnB1c2goSi54RGF0YVswXSkgOiAhSi5ub1NoYXJlZFRvb2x0aXAgJiYgeShTKSAmJiBKLnJlc2VydmVTcGFjZSgpICYmIChEID0geShEKSA/IE1hdGgubWluKEQsIFMpIDogUyk7XG4gICAgICAgICAgICB9KSwgRy5sZW5ndGggJiYgKEcuc29ydCgoSiwgUykgPT4gSiAtIFMpLCBFID0gSChbR10pKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIEUgJiYgRCA/IE1hdGgubWluKEUsIEQpIDogRSB8fCBEO1xuICAgICAgICB9XG4gICAgICAgIG5hbWVUb1goRSkge1xuICAgICAgICAgIGxldCBEID0gcSh0aGlzLm9wdGlvbnMuY2F0ZWdvcmllcyksIEcgPSBEID8gdGhpcy5jYXRlZ29yaWVzIDogdGhpcy5uYW1lcywgSiA9IEUub3B0aW9ucy54LCBTO1xuICAgICAgICAgIHJldHVybiBFLnNlcmllcy5yZXF1aXJlU29ydGluZyA9ICExLCB5KEopIHx8IChKID0gdGhpcy51bmlxdWVOYW1lcyAmJiBHID8gRCA/IEcuaW5kZXhPZihFLm5hbWUpIDogUihHLmtleXNbRS5uYW1lXSwgLTEpIDogRS5zZXJpZXMuYXV0b0luY3JlbWVudCgpKSwgSiA9PT0gLTEgPyAhRCAmJiBHICYmIChTID0gRy5sZW5ndGgpIDogUyA9IEosIFMgIT09IHZvaWQgMCA/ICh0aGlzLm5hbWVzW1NdID0gRS5uYW1lLCB0aGlzLm5hbWVzLmtleXNbRS5uYW1lXSA9IFMpIDogRS54ICYmIChTID0gRS54KSwgUztcbiAgICAgICAgfVxuICAgICAgICB1cGRhdGVOYW1lcygpIHtcbiAgICAgICAgICBsZXQgRSA9IHRoaXMsIEQgPSB0aGlzLm5hbWVzO1xuICAgICAgICAgIEQubGVuZ3RoID4gMCAmJiAoT2JqZWN0LmtleXMoRC5rZXlzKS5mb3JFYWNoKGZ1bmN0aW9uKEcpIHtcbiAgICAgICAgICAgIGRlbGV0ZSBELmtleXNbR107XG4gICAgICAgICAgfSksIEQubGVuZ3RoID0gMCwgdGhpcy5taW5SYW5nZSA9IHRoaXMudXNlck1pblJhbmdlLCAodGhpcy5zZXJpZXMgfHwgW10pLmZvckVhY2goKEcpID0+IHtcbiAgICAgICAgICAgIEcueEluY3JlbWVudCA9IG51bGwsICghRy5wb2ludHMgfHwgRy5pc0RpcnR5RGF0YSkgJiYgKEUubWF4ID0gTWF0aC5tYXgoRS5tYXgsIEcueERhdGEubGVuZ3RoIC0gMSksIEcucHJvY2Vzc0RhdGEoKSwgRy5nZW5lcmF0ZVBvaW50cygpKSwgRy5kYXRhLmZvckVhY2goZnVuY3Rpb24oSiwgUykge1xuICAgICAgICAgICAgICBsZXQgVztcbiAgICAgICAgICAgICAgSiAhPSBudWxsICYmIEoub3B0aW9ucyAmJiBKLm5hbWUgIT09IHZvaWQgMCAmJiAoVyA9IEUubmFtZVRvWChKKSkgIT09IHZvaWQgMCAmJiBXICE9PSBKLnggJiYgKEoueCA9IFcsIEcueERhdGFbU10gPSBXKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH0pKTtcbiAgICAgICAgfVxuICAgICAgICBzZXRBeGlzVHJhbnNsYXRpb24oKSB7XG4gICAgICAgICAgbGV0IEUgPSB0aGlzLCBEID0gRS5tYXggLSBFLm1pbiwgRyA9IEUubGlua2VkUGFyZW50LCBKID0gISFFLmNhdGVnb3JpZXMsIFMgPSBFLmlzWEF4aXMsIFcgPSBFLmF4aXNQb2ludFJhbmdlIHx8IDAsIFAsIFkgPSAwLCBaID0gMCwgdDEsIGkxID0gRS50cmFuc0E7XG4gICAgICAgICAgKFMgfHwgSiB8fCBXKSAmJiAoUCA9IEUuZ2V0Q2xvc2VzdCgpLCBHID8gKFkgPSBHLm1pblBvaW50T2Zmc2V0LCBaID0gRy5wb2ludFJhbmdlUGFkZGluZykgOiBFLnNlcmllcy5mb3JFYWNoKGZ1bmN0aW9uKG4xKSB7XG4gICAgICAgICAgICBsZXQgczEgPSBKID8gMSA6IFMgPyBSKG4xLm9wdGlvbnMucG9pbnRSYW5nZSwgUCwgMCkgOiBFLmF4aXNQb2ludFJhbmdlIHx8IDAsIGQxID0gbjEub3B0aW9ucy5wb2ludFBsYWNlbWVudDtcbiAgICAgICAgICAgIGlmIChXID0gTWF0aC5tYXgoVywgczEpLCAhRS5zaW5nbGUgfHwgSikge1xuICAgICAgICAgICAgICBsZXQgYjEgPSBuMS5pcyhcInhyYW5nZVwiKSA/ICFTIDogUztcbiAgICAgICAgICAgICAgWSA9IE1hdGgubWF4KFksIGIxICYmIGsoZDEpID8gMCA6IHMxIC8gMiksIFogPSBNYXRoLm1heChaLCBiMSAmJiBkMSA9PT0gXCJvblwiID8gMCA6IHMxKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KSwgdDEgPSBFLm9yZGluYWwgJiYgRS5vcmRpbmFsLnNsb3BlICYmIFAgPyBFLm9yZGluYWwuc2xvcGUgLyBQIDogMSwgRS5taW5Qb2ludE9mZnNldCA9IFkgKj0gdDEsIEUucG9pbnRSYW5nZVBhZGRpbmcgPSBaICo9IHQxLCBFLnBvaW50UmFuZ2UgPSBNYXRoLm1pbihXLCBFLnNpbmdsZSAmJiBKID8gMSA6IEQpLCBTICYmIFAgJiYgKEUuY2xvc2VzdFBvaW50UmFuZ2UgPSBQKSksIEUudHJhbnNsYXRpb25TbG9wZSA9IEUudHJhbnNBID0gaTEgPSBFLnN0YXRpY1NjYWxlIHx8IEUubGVuIC8gKEQgKyBaIHx8IDEpLCBFLnRyYW5zQiA9IEUuaG9yaXogPyBFLmxlZnQgOiBFLmJvdHRvbSwgRS5taW5QaXhlbFBhZGRpbmcgPSBpMSAqIFksIHcodGhpcywgXCJhZnRlclNldEF4aXNUcmFuc2xhdGlvblwiKTtcbiAgICAgICAgfVxuICAgICAgICBtaW5Gcm9tUmFuZ2UoKSB7XG4gICAgICAgICAgbGV0IHsgbWF4OiBFLCBtaW46IEQgfSA9IHRoaXM7XG4gICAgICAgICAgcmV0dXJuIG0oRSkgJiYgbShEKSAmJiBFIC0gRCB8fCB2b2lkIDA7XG4gICAgICAgIH1cbiAgICAgICAgc2V0VGlja0ludGVydmFsKEUpIHtcbiAgICAgICAgICB2YXIgdjEsIFMxLCBEMSwgRjE7XG4gICAgICAgICAgbGV0IHsgY2F0ZWdvcmllczogRCwgY2hhcnQ6IEcsIGRhdGFNYXg6IEosIGRhdGFNaW46IFMsIGRhdGVUaW1lOiBXLCBpc1hBeGlzOiBQLCBsb2dhcml0aG1pYzogWSwgb3B0aW9uczogWiwgc29mdFRocmVzaG9sZDogdDEgfSA9IHRoaXMsIGkxID0gbSh0aGlzLnRocmVzaG9sZCkgPyB0aGlzLnRocmVzaG9sZCA6IHZvaWQgMCwgbjEgPSB0aGlzLm1pblJhbmdlIHx8IDAsIHsgY2VpbGluZzogczEsIGZsb29yOiBkMSwgbGlua2VkVG86IGIxLCBzb2Z0TWF4OiBjMSwgc29mdE1pbjogYTEgfSA9IFosIGwxID0gbShiMSkgJiYgKCh2MSA9IEdbdGhpcy5jb2xsXSkgPT0gbnVsbCA/IHZvaWQgMCA6IHYxW2IxXSksIHAxID0gWi50aWNrUGl4ZWxJbnRlcnZhbCwgTTEgPSBaLm1heFBhZGRpbmcsIEExID0gWi5taW5QYWRkaW5nLCB1MSA9IDAsIGgxLCBDMSA9IG0oWi50aWNrSW50ZXJ2YWwpICYmIFoudGlja0ludGVydmFsID49IDAgPyBaLnRpY2tJbnRlcnZhbCA6IHZvaWQgMCwgcTEsIFcxLCBSMSwgazE7XG4gICAgICAgICAgaWYgKFcgfHwgRCB8fCBsMSB8fCB0aGlzLmdldFRpY2tBbW91bnQoKSwgUjEgPSBSKHRoaXMudXNlck1pbiwgWi5taW4pLCBrMSA9IFIodGhpcy51c2VyTWF4LCBaLm1heCksIGwxID8gKHRoaXMubGlua2VkUGFyZW50ID0gbDEsIGgxID0gbDEuZ2V0RXh0cmVtZXMoKSwgdGhpcy5taW4gPSBSKGgxLm1pbiwgaDEuZGF0YU1pbiksIHRoaXMubWF4ID0gUihoMS5tYXgsIGgxLmRhdGFNYXgpLCB0aGlzLnR5cGUgIT09IGwxLnR5cGUgJiYgRigxMSwgITAsIEcpKSA6ICh0MSAmJiB5KGkxKSAmJiBtKEopICYmIG0oUykgJiYgKFMgPj0gaTEgPyAocTEgPSBpMSwgQTEgPSAwKSA6IEogPD0gaTEgJiYgKFcxID0gaTEsIE0xID0gMCkpLCB0aGlzLm1pbiA9IFIoUjEsIHExLCBTKSwgdGhpcy5tYXggPSBSKGsxLCBXMSwgSikpLCBtKHRoaXMubWF4KSAmJiBtKHRoaXMubWluKSAmJiAoWSAmJiAodGhpcy5wb3NpdGl2ZVZhbHVlc09ubHkgJiYgIUUgJiYgMCA+PSBNYXRoLm1pbih0aGlzLm1pbiwgUihTLCB0aGlzLm1pbikpICYmIEYoMTAsICEwLCBHKSwgdGhpcy5taW4gPSBMKFkubG9nMmxpbih0aGlzLm1pbiksIDE2KSwgdGhpcy5tYXggPSBMKFkubG9nMmxpbih0aGlzLm1heCksIDE2KSksIHRoaXMucmFuZ2UgJiYgbShTKSAmJiAodGhpcy51c2VyTWluID0gdGhpcy5taW4gPSBSMSA9IE1hdGgubWF4KFMsIHRoaXMubWluRnJvbVJhbmdlKCkgfHwgMCksIHRoaXMudXNlck1heCA9IGsxID0gdGhpcy5tYXgsIHRoaXMucmFuZ2UgPSB2b2lkIDApKSwgdyh0aGlzLCBcImZvdW5kRXh0cmVtZXNcIiksIHRoaXMuYWRqdXN0Rm9yTWluUmFuZ2UoKSwgbSh0aGlzLm1pbikgJiYgbSh0aGlzLm1heCkpIHtcbiAgICAgICAgICAgIGlmICghbSh0aGlzLnVzZXJNaW4pICYmIG0oYTEpICYmIGExIDwgdGhpcy5taW4gJiYgKHRoaXMubWluID0gUjEgPSBhMSksICFtKHRoaXMudXNlck1heCkgJiYgbShjMSkgJiYgYzEgPiB0aGlzLm1heCAmJiAodGhpcy5tYXggPSBrMSA9IGMxKSwgRCB8fCB0aGlzLmF4aXNQb2ludFJhbmdlIHx8IChTMSA9IHRoaXMuc3RhY2tpbmcpICE9IG51bGwgJiYgUzEudXNlUGVyY2VudGFnZSB8fCBsMSB8fCAhKHUxID0gdGhpcy5tYXggLSB0aGlzLm1pbikgfHwgKCF5KFIxKSAmJiBBMSAmJiAodGhpcy5taW4gLT0gdTEgKiBBMSksIHkoazEpIHx8ICFNMSB8fCAodGhpcy5tYXggKz0gdTEgKiBNMSkpLCAhbSh0aGlzLnVzZXJNaW4pICYmIG0oZDEpICYmICh0aGlzLm1pbiA9IE1hdGgubWF4KHRoaXMubWluLCBkMSkpLCAhbSh0aGlzLnVzZXJNYXgpICYmIG0oczEpICYmICh0aGlzLm1heCA9IE1hdGgubWluKHRoaXMubWF4LCBzMSkpLCB0MSAmJiBtKFMpICYmIG0oSikpIHtcbiAgICAgICAgICAgICAgbGV0IFUxID0gaTEgfHwgMDtcbiAgICAgICAgICAgICAgIXkoUjEpICYmIHRoaXMubWluIDwgVTEgJiYgUyA+PSBVMSA/IHRoaXMubWluID0gWi5taW5SYW5nZSA/IE1hdGgubWluKFUxLCB0aGlzLm1heCAtIG4xKSA6IFUxIDogIXkoazEpICYmIHRoaXMubWF4ID4gVTEgJiYgSiA8PSBVMSAmJiAodGhpcy5tYXggPSBaLm1pblJhbmdlID8gTWF0aC5tYXgoVTEsIHRoaXMubWluICsgbjEpIDogVTEpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgIUcucG9sYXIgJiYgdGhpcy5taW4gPiB0aGlzLm1heCAmJiAoeShaLm1pbikgPyB0aGlzLm1heCA9IHRoaXMubWluIDogeShaLm1heCkgJiYgKHRoaXMubWluID0gdGhpcy5tYXgpKSwgdTEgPSB0aGlzLm1heCAtIHRoaXMubWluO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAodGhpcy5taW4gIT09IHRoaXMubWF4ICYmIG0odGhpcy5taW4pICYmIG0odGhpcy5tYXgpID8gbDEgJiYgIUMxICYmIHAxID09PSBsMS5vcHRpb25zLnRpY2tQaXhlbEludGVydmFsID8gdGhpcy50aWNrSW50ZXJ2YWwgPSBDMSA9IGwxLnRpY2tJbnRlcnZhbCA6IHRoaXMudGlja0ludGVydmFsID0gUihDMSwgdGhpcy50aWNrQW1vdW50ID8gdTEgLyBNYXRoLm1heCh0aGlzLnRpY2tBbW91bnQgLSAxLCAxKSA6IHZvaWQgMCwgRCA/IDEgOiB1MSAqIHAxIC8gTWF0aC5tYXgodGhpcy5sZW4sIHAxKSkgOiB0aGlzLnRpY2tJbnRlcnZhbCA9IDEsIFAgJiYgIUUpIHtcbiAgICAgICAgICAgIGxldCBVMSA9IHRoaXMubWluICE9PSAoKEQxID0gdGhpcy5vbGQpID09IG51bGwgPyB2b2lkIDAgOiBEMS5taW4pIHx8IHRoaXMubWF4ICE9PSAoKEYxID0gdGhpcy5vbGQpID09IG51bGwgPyB2b2lkIDAgOiBGMS5tYXgpO1xuICAgICAgICAgICAgdGhpcy5zZXJpZXMuZm9yRWFjaChmdW5jdGlvbihoMCkge1xuICAgICAgICAgICAgICB2YXIgTzA7XG4gICAgICAgICAgICAgIGgwLmZvcmNlQ3JvcCA9IChPMCA9IGgwLmZvcmNlQ3JvcHBpbmcpID09IG51bGwgPyB2b2lkIDAgOiBPMC5jYWxsKGgwKSwgaDAucHJvY2Vzc0RhdGEoVTEpO1xuICAgICAgICAgICAgfSksIHcodGhpcywgXCJwb3N0UHJvY2Vzc0RhdGFcIiwgeyBoYXNFeHRyZW1lc0NoYW5nZWQ6IFUxIH0pO1xuICAgICAgICAgIH1cbiAgICAgICAgICB0aGlzLnNldEF4aXNUcmFuc2xhdGlvbigpLCB3KHRoaXMsIFwiaW5pdGlhbEF4aXNUcmFuc2xhdGlvblwiKSwgdGhpcy5wb2ludFJhbmdlICYmICFDMSAmJiAodGhpcy50aWNrSW50ZXJ2YWwgPSBNYXRoLm1heCh0aGlzLnBvaW50UmFuZ2UsIHRoaXMudGlja0ludGVydmFsKSk7XG4gICAgICAgICAgbGV0IE4xID0gUihaLm1pblRpY2tJbnRlcnZhbCwgVyAmJiAhdGhpcy5zZXJpZXMuc29tZSgoVTEpID0+IFUxLm5vU2hhcmVkVG9vbHRpcCkgPyB0aGlzLmNsb3Nlc3RQb2ludFJhbmdlIDogMCk7XG4gICAgICAgICAgIUMxICYmIHRoaXMudGlja0ludGVydmFsIDwgTjEgJiYgKHRoaXMudGlja0ludGVydmFsID0gTjEpLCBXIHx8IFkgfHwgQzEgfHwgKHRoaXMudGlja0ludGVydmFsID0gcjEodGhpcywgdGhpcy50aWNrSW50ZXJ2YWwpKSwgdGhpcy50aWNrQW1vdW50IHx8ICh0aGlzLnRpY2tJbnRlcnZhbCA9IHRoaXMudW5zcXVpc2goKSksIHRoaXMuc2V0VGlja1Bvc2l0aW9ucygpO1xuICAgICAgICB9XG4gICAgICAgIHNldFRpY2tQb3NpdGlvbnMoKSB7XG4gICAgICAgICAgdmFyIHQxLCBpMTtcbiAgICAgICAgICBsZXQgRSA9IHRoaXMub3B0aW9ucywgRCA9IEUudGlja1Bvc2l0aW9ucywgRyA9IEUudGlja1Bvc2l0aW9uZXIsIEogPSB0aGlzLmdldE1pbm9yVGlja0ludGVydmFsKCksIFMgPSAhdGhpcy5pc1Bhbm5pbmcsIFcgPSBTICYmIEUuc3RhcnRPblRpY2ssIFAgPSBTICYmIEUuZW5kT25UaWNrLCBZID0gW10sIFo7XG4gICAgICAgICAgaWYgKHRoaXMudGlja21hcmtPZmZzZXQgPSB0aGlzLmNhdGVnb3JpZXMgJiYgRS50aWNrbWFya1BsYWNlbWVudCA9PT0gXCJiZXR3ZWVuXCIgJiYgdGhpcy50aWNrSW50ZXJ2YWwgPT09IDEgPyAwLjUgOiAwLCB0aGlzLnNpbmdsZSA9IHRoaXMubWluID09PSB0aGlzLm1heCAmJiB5KHRoaXMubWluKSAmJiAhdGhpcy50aWNrQW1vdW50ICYmICh0aGlzLm1pbiAlIDEgPT0gMCB8fCBFLmFsbG93RGVjaW1hbHMgIT09ICExKSwgRClcbiAgICAgICAgICAgIFkgPSBELnNsaWNlKCk7XG4gICAgICAgICAgZWxzZSBpZiAobSh0aGlzLm1pbikgJiYgbSh0aGlzLm1heCkpIHtcbiAgICAgICAgICAgIGlmICghKCh0MSA9IHRoaXMub3JkaW5hbCkgIT0gbnVsbCAmJiB0MS5wb3NpdGlvbnMpICYmICh0aGlzLm1heCAtIHRoaXMubWluKSAvIHRoaXMudGlja0ludGVydmFsID4gTWF0aC5tYXgoMiAqIHRoaXMubGVuLCAyMDApKVxuICAgICAgICAgICAgICBZID0gW3RoaXMubWluLCB0aGlzLm1heF0sIEYoMTksICExLCB0aGlzLmNoYXJ0KTtcbiAgICAgICAgICAgIGVsc2UgaWYgKHRoaXMuZGF0ZVRpbWUpXG4gICAgICAgICAgICAgIFkgPSB0aGlzLmdldFRpbWVUaWNrcyh0aGlzLmRhdGVUaW1lLm5vcm1hbGl6ZVRpbWVUaWNrSW50ZXJ2YWwodGhpcy50aWNrSW50ZXJ2YWwsIEUudW5pdHMpLCB0aGlzLm1pbiwgdGhpcy5tYXgsIEUuc3RhcnRPZldlZWssIChpMSA9IHRoaXMub3JkaW5hbCkgPT0gbnVsbCA/IHZvaWQgMCA6IGkxLnBvc2l0aW9ucywgdGhpcy5jbG9zZXN0UG9pbnRSYW5nZSwgITApO1xuICAgICAgICAgICAgZWxzZSBpZiAodGhpcy5sb2dhcml0aG1pYylcbiAgICAgICAgICAgICAgWSA9IHRoaXMubG9nYXJpdGhtaWMuZ2V0TG9nVGlja1Bvc2l0aW9ucyh0aGlzLnRpY2tJbnRlcnZhbCwgdGhpcy5taW4sIHRoaXMubWF4KTtcbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICBsZXQgbjEgPSB0aGlzLnRpY2tJbnRlcnZhbCwgczEgPSBuMTtcbiAgICAgICAgICAgICAgZm9yICg7IHMxIDw9IDIgKiBuMSAmJiAoWSA9IHRoaXMuZ2V0TGluZWFyVGlja1Bvc2l0aW9ucyh0aGlzLnRpY2tJbnRlcnZhbCwgdGhpcy5taW4sIHRoaXMubWF4KSwgdGhpcy50aWNrQW1vdW50ICYmIFkubGVuZ3RoID4gdGhpcy50aWNrQW1vdW50KTsgKVxuICAgICAgICAgICAgICAgIHRoaXMudGlja0ludGVydmFsID0gcjEodGhpcywgczEgKj0gMS4xKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIFkubGVuZ3RoID4gdGhpcy5sZW4gJiYgKFkgPSBbWVswXSwgWVtZLmxlbmd0aCAtIDFdXSlbMF0gPT09IFlbMV0gJiYgKFkubGVuZ3RoID0gMSksIEcgJiYgKHRoaXMudGlja1Bvc2l0aW9ucyA9IFksIChaID0gRy5hcHBseSh0aGlzLCBbdGhpcy5taW4sIHRoaXMubWF4XSkpICYmIChZID0gWikpO1xuICAgICAgICAgIH1cbiAgICAgICAgICB0aGlzLnRpY2tQb3NpdGlvbnMgPSBZLCB0aGlzLm1pbm9yVGlja0ludGVydmFsID0gSiA9PT0gXCJhdXRvXCIgJiYgdGhpcy50aWNrSW50ZXJ2YWwgPyB0aGlzLnRpY2tJbnRlcnZhbCAvIEUubWlub3JUaWNrc1Blck1ham9yIDogSiwgdGhpcy5wYWRkZWRUaWNrcyA9IFkuc2xpY2UoMCksIHRoaXMudHJpbVRpY2tzKFksIFcsIFApLCAhdGhpcy5pc0xpbmtlZCAmJiBtKHRoaXMubWluKSAmJiBtKHRoaXMubWF4KSAmJiAodGhpcy5zaW5nbGUgJiYgWS5sZW5ndGggPCAyICYmICF0aGlzLmNhdGVnb3JpZXMgJiYgIXRoaXMuc2VyaWVzLnNvbWUoKG4xKSA9PiBuMS5pcyhcImhlYXRtYXBcIikgJiYgbjEub3B0aW9ucy5wb2ludFBsYWNlbWVudCA9PT0gXCJiZXR3ZWVuXCIpICYmICh0aGlzLm1pbiAtPSAwLjUsIHRoaXMubWF4ICs9IDAuNSksIEQgfHwgWiB8fCB0aGlzLmFkanVzdFRpY2tBbW91bnQoKSksIHcodGhpcywgXCJhZnRlclNldFRpY2tQb3NpdGlvbnNcIik7XG4gICAgICAgIH1cbiAgICAgICAgdHJpbVRpY2tzKEUsIEQsIEcpIHtcbiAgICAgICAgICBsZXQgSiA9IEVbMF0sIFMgPSBFW0UubGVuZ3RoIC0gMV0sIFcgPSAhdGhpcy5pc09yZGluYWwgJiYgdGhpcy5taW5Qb2ludE9mZnNldCB8fCAwO1xuICAgICAgICAgIGlmICh3KHRoaXMsIFwidHJpbVRpY2tzXCIpLCAhdGhpcy5pc0xpbmtlZCkge1xuICAgICAgICAgICAgaWYgKEQgJiYgSiAhPT0gLTEgLyAwKVxuICAgICAgICAgICAgICB0aGlzLm1pbiA9IEo7XG4gICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgIGZvciAoOyB0aGlzLm1pbiAtIFcgPiBFWzBdOyApXG4gICAgICAgICAgICAgICAgRS5zaGlmdCgpO1xuICAgICAgICAgICAgaWYgKEcpXG4gICAgICAgICAgICAgIHRoaXMubWF4ID0gUztcbiAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgZm9yICg7IHRoaXMubWF4ICsgVyA8IEVbRS5sZW5ndGggLSAxXTsgKVxuICAgICAgICAgICAgICAgIEUucG9wKCk7XG4gICAgICAgICAgICBFLmxlbmd0aCA9PT0gMCAmJiB5KEopICYmICF0aGlzLm9wdGlvbnMudGlja1Bvc2l0aW9ucyAmJiBFLnB1c2goKFMgKyBKKSAvIDIpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBhbGlnblRvT3RoZXJzKCkge1xuICAgICAgICAgIGxldCBFLCBEID0gdGhpcywgRyA9IEQuY2hhcnQsIEogPSBbdGhpc10sIFMgPSBELm9wdGlvbnMsIFcgPSBHLm9wdGlvbnMuY2hhcnQsIFAgPSB0aGlzLmNvbGwgPT09IFwieUF4aXNcIiAmJiBXLmFsaWduVGhyZXNob2xkcywgWSA9IFtdO1xuICAgICAgICAgIGlmIChELnRocmVzaG9sZEFsaWdubWVudCA9IHZvaWQgMCwgKFcuYWxpZ25UaWNrcyAhPT0gITEgJiYgUy5hbGlnblRpY2tzIHx8IFApICYmIFMuc3RhcnRPblRpY2sgIT09ICExICYmIFMuZW5kT25UaWNrICE9PSAhMSAmJiAhRC5sb2dhcml0aG1pYykge1xuICAgICAgICAgICAgbGV0IFogPSAoaTEpID0+IHtcbiAgICAgICAgICAgICAgbGV0IHsgaG9yaXo6IG4xLCBvcHRpb25zOiBzMSB9ID0gaTE7XG4gICAgICAgICAgICAgIHJldHVybiBbbjEgPyBzMS5sZWZ0IDogczEudG9wLCBzMS53aWR0aCwgczEuaGVpZ2h0LCBzMS5wYW5lXS5qb2luKFwiLFwiKTtcbiAgICAgICAgICAgIH0sIHQxID0gWih0aGlzKTtcbiAgICAgICAgICAgIEdbdGhpcy5jb2xsXS5mb3JFYWNoKGZ1bmN0aW9uKGkxKSB7XG4gICAgICAgICAgICAgIGxldCB7IHNlcmllczogbjEgfSA9IGkxO1xuICAgICAgICAgICAgICBuMS5sZW5ndGggJiYgbjEuc29tZSgoczEpID0+IHMxLnZpc2libGUpICYmIGkxICE9PSBEICYmIFooaTEpID09PSB0MSAmJiAoRSA9ICEwLCBKLnB1c2goaTEpKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoRSAmJiBQKSB7XG4gICAgICAgICAgICBKLmZvckVhY2goKHQxKSA9PiB7XG4gICAgICAgICAgICAgIGxldCBpMSA9IHQxLmdldFRocmVzaG9sZEFsaWdubWVudChEKTtcbiAgICAgICAgICAgICAgbShpMSkgJiYgWS5wdXNoKGkxKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgbGV0IFogPSBZLmxlbmd0aCA+IDEgPyBZLnJlZHVjZSgodDEsIGkxKSA9PiB0MSArPSBpMSwgMCkgLyBZLmxlbmd0aCA6IHZvaWQgMDtcbiAgICAgICAgICAgIEouZm9yRWFjaCgodDEpID0+IHtcbiAgICAgICAgICAgICAgdDEudGhyZXNob2xkQWxpZ25tZW50ID0gWjtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gRTtcbiAgICAgICAgfVxuICAgICAgICBnZXRUaHJlc2hvbGRBbGlnbm1lbnQoRSkge1xuICAgICAgICAgIGlmICgoIW0odGhpcy5kYXRhTWluKSB8fCB0aGlzICE9PSBFICYmIHRoaXMuc2VyaWVzLnNvbWUoKEQpID0+IEQuaXNEaXJ0eSB8fCBELmlzRGlydHlEYXRhKSkgJiYgdGhpcy5nZXRTZXJpZXNFeHRyZW1lcygpLCBtKHRoaXMudGhyZXNob2xkKSkge1xuICAgICAgICAgICAgbGV0IEQgPSB2KCh0aGlzLnRocmVzaG9sZCAtICh0aGlzLmRhdGFNaW4gfHwgMCkpIC8gKCh0aGlzLmRhdGFNYXggfHwgMCkgLSAodGhpcy5kYXRhTWluIHx8IDApKSwgMCwgMSk7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5vcHRpb25zLnJldmVyc2VkICYmIChEID0gMSAtIEQpLCBEO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBnZXRUaWNrQW1vdW50KCkge1xuICAgICAgICAgIGxldCBFID0gdGhpcy5vcHRpb25zLCBEID0gRS50aWNrUGl4ZWxJbnRlcnZhbCwgRyA9IEUudGlja0Ftb3VudDtcbiAgICAgICAgICB5KEUudGlja0ludGVydmFsKSB8fCBHIHx8ICEodGhpcy5sZW4gPCBEKSB8fCB0aGlzLmlzUmFkaWFsIHx8IHRoaXMubG9nYXJpdGhtaWMgfHwgIUUuc3RhcnRPblRpY2sgfHwgIUUuZW5kT25UaWNrIHx8IChHID0gMiksICFHICYmIHRoaXMuYWxpZ25Ub090aGVycygpICYmIChHID0gTWF0aC5jZWlsKHRoaXMubGVuIC8gRCkgKyAxKSwgRyA8IDQgJiYgKHRoaXMuZmluYWxUaWNrQW10ID0gRywgRyA9IDUpLCB0aGlzLnRpY2tBbW91bnQgPSBHO1xuICAgICAgICB9XG4gICAgICAgIGFkanVzdFRpY2tBbW91bnQoKSB7XG4gICAgICAgICAgbGV0IEUgPSB0aGlzLCB7IGZpbmFsVGlja0FtdDogRCwgbWF4OiBHLCBtaW46IEosIG9wdGlvbnM6IFMsIHRpY2tQb3NpdGlvbnM6IFcsIHRpY2tBbW91bnQ6IFAsIHRocmVzaG9sZEFsaWdubWVudDogWSB9ID0gRSwgWiA9IFcgPT0gbnVsbCA/IHZvaWQgMCA6IFcubGVuZ3RoLCB0MSA9IFIoRS50aHJlc2hvbGQsIEUuc29mdFRocmVzaG9sZCA/IDAgOiBudWxsKSwgaTEsIG4xLCBzMSA9IEUudGlja0ludGVydmFsLCBkMSwgYjEgPSAoKSA9PiBXLnB1c2goTChXW1cubGVuZ3RoIC0gMV0gKyBzMSkpLCBjMSA9ICgpID0+IFcudW5zaGlmdChMKFdbMF0gLSBzMSkpO1xuICAgICAgICAgIGlmIChtKFkpICYmIChkMSA9IFkgPCAwLjUgPyBNYXRoLmNlaWwoWSAqIChQIC0gMSkpIDogTWF0aC5mbG9vcihZICogKFAgLSAxKSksIFMucmV2ZXJzZWQgJiYgKGQxID0gUCAtIDEgLSBkMSkpLCBFLmhhc0RhdGEoKSAmJiBtKEopICYmIG0oRykpIHtcbiAgICAgICAgICAgIGxldCBhMSA9ICgpID0+IHtcbiAgICAgICAgICAgICAgRS50cmFuc0EgKj0gKFogLSAxKSAvIChQIC0gMSksIEUubWluID0gUy5zdGFydE9uVGljayA/IFdbMF0gOiBNYXRoLm1pbihKLCBXWzBdKSwgRS5tYXggPSBTLmVuZE9uVGljayA/IFdbVy5sZW5ndGggLSAxXSA6IE1hdGgubWF4KEcsIFdbVy5sZW5ndGggLSAxXSk7XG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgaWYgKG0oZDEpICYmIG0oRS50aHJlc2hvbGQpKSB7XG4gICAgICAgICAgICAgIGZvciAoOyBXW2QxXSAhPT0gdDEgfHwgVy5sZW5ndGggIT09IFAgfHwgV1swXSA+IEogfHwgV1tXLmxlbmd0aCAtIDFdIDwgRzsgKSB7XG4gICAgICAgICAgICAgICAgZm9yIChXLmxlbmd0aCA9IDAsIFcucHVzaChFLnRocmVzaG9sZCk7IFcubGVuZ3RoIDwgUDsgKVxuICAgICAgICAgICAgICAgICAgV1tkMV0gPT09IHZvaWQgMCB8fCBXW2QxXSA+IEUudGhyZXNob2xkID8gYzEoKSA6IGIxKCk7XG4gICAgICAgICAgICAgICAgaWYgKHMxID4gOCAqIEUudGlja0ludGVydmFsKVxuICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgczEgKj0gMjtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBhMSgpO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChaIDwgUCkge1xuICAgICAgICAgICAgICBmb3IgKDsgVy5sZW5ndGggPCBQOyApXG4gICAgICAgICAgICAgICAgVy5sZW5ndGggJSAyIHx8IEogPT09IHQxID8gYjEoKSA6IGMxKCk7XG4gICAgICAgICAgICAgIGExKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoeShEKSkge1xuICAgICAgICAgICAgICBmb3IgKG4xID0gaTEgPSBXLmxlbmd0aDsgbjEtLTsgKVxuICAgICAgICAgICAgICAgIChEID09PSAzICYmIG4xICUgMiA9PSAxIHx8IEQgPD0gMiAmJiBuMSA+IDAgJiYgbjEgPCBpMSAtIDEpICYmIFcuc3BsaWNlKG4xLCAxKTtcbiAgICAgICAgICAgICAgRS5maW5hbFRpY2tBbXQgPSB2b2lkIDA7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHNldFNjYWxlKCkge1xuICAgICAgICAgIHZhciBXLCBQO1xuICAgICAgICAgIGxldCB7IGNvbGw6IEUsIHN0YWNraW5nOiBEIH0gPSB0aGlzLCBHID0gITEsIEogPSAhMTtcbiAgICAgICAgICB0aGlzLnNlcmllcy5mb3JFYWNoKChZKSA9PiB7XG4gICAgICAgICAgICBHID0gRyB8fCBZLmlzRGlydHlEYXRhIHx8IFkuaXNEaXJ0eSwgSiA9IEogfHwgWS54QXhpcyAmJiBZLnhBeGlzLmlzRGlydHkgfHwgITE7XG4gICAgICAgICAgfSksIHRoaXMuc2V0QXhpc1NpemUoKTtcbiAgICAgICAgICBsZXQgUyA9IHRoaXMubGVuICE9PSAodGhpcy5vbGQgJiYgdGhpcy5vbGQubGVuKTtcbiAgICAgICAgICBTIHx8IEcgfHwgSiB8fCB0aGlzLmlzTGlua2VkIHx8IHRoaXMuZm9yY2VSZWRyYXcgfHwgdGhpcy51c2VyTWluICE9PSAodGhpcy5vbGQgJiYgdGhpcy5vbGQudXNlck1pbikgfHwgdGhpcy51c2VyTWF4ICE9PSAodGhpcy5vbGQgJiYgdGhpcy5vbGQudXNlck1heCkgfHwgdGhpcy5hbGlnblRvT3RoZXJzKCkgPyAoRCAmJiBFID09PSBcInlBeGlzXCIgJiYgRC5idWlsZFN0YWNrcygpLCB0aGlzLmZvcmNlUmVkcmF3ID0gITEsIHRoaXMudXNlck1pblJhbmdlIHx8ICh0aGlzLm1pblJhbmdlID0gdm9pZCAwKSwgdGhpcy5nZXRTZXJpZXNFeHRyZW1lcygpLCB0aGlzLnNldFRpY2tJbnRlcnZhbCgpLCBEICYmIEUgPT09IFwieEF4aXNcIiAmJiBELmJ1aWxkU3RhY2tzKCksIHRoaXMuaXNEaXJ0eSB8fCAodGhpcy5pc0RpcnR5ID0gUyB8fCB0aGlzLm1pbiAhPT0gKChXID0gdGhpcy5vbGQpID09IG51bGwgPyB2b2lkIDAgOiBXLm1pbikgfHwgdGhpcy5tYXggIT09ICgoUCA9IHRoaXMub2xkKSA9PSBudWxsID8gdm9pZCAwIDogUC5tYXgpKSkgOiBEICYmIEQuY2xlYW5TdGFja3MoKSwgRyAmJiBkZWxldGUgdGhpcy5hbGxFeHRyZW1lcywgdyh0aGlzLCBcImFmdGVyU2V0U2NhbGVcIik7XG4gICAgICAgIH1cbiAgICAgICAgc2V0RXh0cmVtZXMoRSwgRCwgRyA9ICEwLCBKLCBTKSB7XG4gICAgICAgICAgdGhpcy5zZXJpZXMuZm9yRWFjaCgoVykgPT4ge1xuICAgICAgICAgICAgZGVsZXRlIFcua2RUcmVlO1xuICAgICAgICAgIH0pLCB3KHRoaXMsIFwic2V0RXh0cmVtZXNcIiwgUyA9IFQoUywgeyBtaW46IEUsIG1heDogRCB9KSwgKFcpID0+IHtcbiAgICAgICAgICAgIHRoaXMudXNlck1pbiA9IFcubWluLCB0aGlzLnVzZXJNYXggPSBXLm1heCwgdGhpcy5ldmVudEFyZ3MgPSBXLCBHICYmIHRoaXMuY2hhcnQucmVkcmF3KEopO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIHNldEF4aXNTaXplKCkge1xuICAgICAgICAgIGxldCBFID0gdGhpcy5jaGFydCwgRCA9IHRoaXMub3B0aW9ucywgRyA9IEQub2Zmc2V0cyB8fCBbMCwgMCwgMCwgMF0sIEogPSB0aGlzLmhvcml6LCBTID0gdGhpcy53aWR0aCA9IE1hdGgucm91bmQoSShSKEQud2lkdGgsIEUucGxvdFdpZHRoIC0gR1szXSArIEdbMV0pLCBFLnBsb3RXaWR0aCkpLCBXID0gdGhpcy5oZWlnaHQgPSBNYXRoLnJvdW5kKEkoUihELmhlaWdodCwgRS5wbG90SGVpZ2h0IC0gR1swXSArIEdbMl0pLCBFLnBsb3RIZWlnaHQpKSwgUCA9IHRoaXMudG9wID0gTWF0aC5yb3VuZChJKFIoRC50b3AsIEUucGxvdFRvcCArIEdbMF0pLCBFLnBsb3RIZWlnaHQsIEUucGxvdFRvcCkpLCBZID0gdGhpcy5sZWZ0ID0gTWF0aC5yb3VuZChJKFIoRC5sZWZ0LCBFLnBsb3RMZWZ0ICsgR1szXSksIEUucGxvdFdpZHRoLCBFLnBsb3RMZWZ0KSk7XG4gICAgICAgICAgdGhpcy5ib3R0b20gPSBFLmNoYXJ0SGVpZ2h0IC0gVyAtIFAsIHRoaXMucmlnaHQgPSBFLmNoYXJ0V2lkdGggLSBTIC0gWSwgdGhpcy5sZW4gPSBNYXRoLm1heChKID8gUyA6IFcsIDApLCB0aGlzLnBvcyA9IEogPyBZIDogUDtcbiAgICAgICAgfVxuICAgICAgICBnZXRFeHRyZW1lcygpIHtcbiAgICAgICAgICBsZXQgRSA9IHRoaXMubG9nYXJpdGhtaWM7XG4gICAgICAgICAgcmV0dXJuIHsgbWluOiBFID8gTChFLmxpbjJsb2codGhpcy5taW4pKSA6IHRoaXMubWluLCBtYXg6IEUgPyBMKEUubGluMmxvZyh0aGlzLm1heCkpIDogdGhpcy5tYXgsIGRhdGFNaW46IHRoaXMuZGF0YU1pbiwgZGF0YU1heDogdGhpcy5kYXRhTWF4LCB1c2VyTWluOiB0aGlzLnVzZXJNaW4sIHVzZXJNYXg6IHRoaXMudXNlck1heCB9O1xuICAgICAgICB9XG4gICAgICAgIGdldFRocmVzaG9sZChFKSB7XG4gICAgICAgICAgbGV0IEQgPSB0aGlzLmxvZ2FyaXRobWljLCBHID0gRCA/IEQubGluMmxvZyh0aGlzLm1pbikgOiB0aGlzLm1pbiwgSiA9IEQgPyBELmxpbjJsb2codGhpcy5tYXgpIDogdGhpcy5tYXg7XG4gICAgICAgICAgcmV0dXJuIEUgPT09IG51bGwgfHwgRSA9PT0gLTEgLyAwID8gRSA9IEcgOiBFID09PSAxIC8gMCA/IEUgPSBKIDogRyA+IEUgPyBFID0gRyA6IEogPCBFICYmIChFID0gSiksIHRoaXMudHJhbnNsYXRlKEUsIDAsIDEsIDAsIDEpO1xuICAgICAgICB9XG4gICAgICAgIGF1dG9MYWJlbEFsaWduKEUpIHtcbiAgICAgICAgICBsZXQgRCA9IChSKEUsIDApIC0gOTAgKiB0aGlzLnNpZGUgKyA3MjApICUgMzYwLCBHID0geyBhbGlnbjogXCJjZW50ZXJcIiB9O1xuICAgICAgICAgIHJldHVybiB3KHRoaXMsIFwiYXV0b0xhYmVsQWxpZ25cIiwgRywgZnVuY3Rpb24oSikge1xuICAgICAgICAgICAgRCA+IDE1ICYmIEQgPCAxNjUgPyBKLmFsaWduID0gXCJyaWdodFwiIDogRCA+IDE5NSAmJiBEIDwgMzQ1ICYmIChKLmFsaWduID0gXCJsZWZ0XCIpO1xuICAgICAgICAgIH0pLCBHLmFsaWduO1xuICAgICAgICB9XG4gICAgICAgIHRpY2tTaXplKEUpIHtcbiAgICAgICAgICBsZXQgRCA9IHRoaXMub3B0aW9ucywgRyA9IFIoRFtFID09PSBcInRpY2tcIiA/IFwidGlja1dpZHRoXCIgOiBcIm1pbm9yVGlja1dpZHRoXCJdLCBFID09PSBcInRpY2tcIiAmJiB0aGlzLmlzWEF4aXMgJiYgIXRoaXMuY2F0ZWdvcmllcyA/IDEgOiAwKSwgSiA9IERbRSA9PT0gXCJ0aWNrXCIgPyBcInRpY2tMZW5ndGhcIiA6IFwibWlub3JUaWNrTGVuZ3RoXCJdLCBTO1xuICAgICAgICAgIEcgJiYgSiAmJiAoRFtFICsgXCJQb3NpdGlvblwiXSA9PT0gXCJpbnNpZGVcIiAmJiAoSiA9IC1KKSwgUyA9IFtKLCBHXSk7XG4gICAgICAgICAgbGV0IFcgPSB7IHRpY2tTaXplOiBTIH07XG4gICAgICAgICAgcmV0dXJuIHcodGhpcywgXCJhZnRlclRpY2tTaXplXCIsIFcpLCBXLnRpY2tTaXplO1xuICAgICAgICB9XG4gICAgICAgIGxhYmVsTWV0cmljcygpIHtcbiAgICAgICAgICBsZXQgRSA9IHRoaXMuY2hhcnQucmVuZGVyZXIsIEQgPSB0aGlzLnRpY2tzLCBHID0gRFtPYmplY3Qua2V5cyhEKVswXV0gfHwge307XG4gICAgICAgICAgcmV0dXJuIHRoaXMuY2hhcnQucmVuZGVyZXIuZm9udE1ldHJpY3MoRy5sYWJlbCB8fCBHLm1vdmVkTGFiZWwgfHwgRS5ib3gpO1xuICAgICAgICB9XG4gICAgICAgIHVuc3F1aXNoKCkge1xuICAgICAgICAgIGxldCBFID0gdGhpcy5vcHRpb25zLmxhYmVscywgRCA9IEUucGFkZGluZyB8fCAwLCBHID0gdGhpcy5ob3JpeiwgSiA9IHRoaXMudGlja0ludGVydmFsLCBTID0gdGhpcy5sZW4gLyAoKCh0aGlzLmNhdGVnb3JpZXMgPyAxIDogMCkgKyB0aGlzLm1heCAtIHRoaXMubWluKSAvIEopLCBXID0gRS5yb3RhdGlvbiwgUCA9IEwoMC44ICogdGhpcy5sYWJlbE1ldHJpY3MoKS5oKSwgWSA9IE1hdGgubWF4KHRoaXMubWF4IC0gdGhpcy5taW4sIDApLCBaID0gZnVuY3Rpb24oZDEpIHtcbiAgICAgICAgICAgIGxldCBiMSA9IChkMSArIDIgKiBEKSAvIChTIHx8IDEpO1xuICAgICAgICAgICAgcmV0dXJuIChiMSA9IGIxID4gMSA/IE1hdGguY2VpbChiMSkgOiAxKSAqIEogPiBZICYmIGQxICE9PSAxIC8gMCAmJiBTICE9PSAxIC8gMCAmJiBZICYmIChiMSA9IE1hdGguY2VpbChZIC8gSikpLCBMKGIxICogSik7XG4gICAgICAgICAgfSwgdDEgPSBKLCBpMSwgbjEgPSBOdW1iZXIuTUFYX1ZBTFVFLCBzMTtcbiAgICAgICAgICBpZiAoRykge1xuICAgICAgICAgICAgaWYgKCFFLnN0YWdnZXJMaW5lcyAmJiAobShXKSA/IHMxID0gW1ddIDogUyA8IEUuYXV0b1JvdGF0aW9uTGltaXQgJiYgKHMxID0gRS5hdXRvUm90YXRpb24pKSwgczEpIHtcbiAgICAgICAgICAgICAgbGV0IGQxLCBiMTtcbiAgICAgICAgICAgICAgZm9yIChsZXQgYzEgb2YgczEpXG4gICAgICAgICAgICAgICAgKGMxID09PSBXIHx8IGMxICYmIGMxID49IC05MCAmJiBjMSA8PSA5MCkgJiYgKGIxID0gKGQxID0gWihNYXRoLmFicyhQIC8gTWF0aC5zaW4oTyAqIGMxKSkpKSArIE1hdGguYWJzKGMxIC8gMzYwKSkgPCBuMSAmJiAobjEgPSBiMSwgaTEgPSBjMSwgdDEgPSBkMSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBlbHNlXG4gICAgICAgICAgICB0MSA9IFooMC43NSAqIFApO1xuICAgICAgICAgIHJldHVybiB0aGlzLmF1dG9Sb3RhdGlvbiA9IHMxLCB0aGlzLmxhYmVsUm90YXRpb24gPSBSKGkxLCBtKFcpID8gVyA6IDApLCBFLnN0ZXAgPyBKIDogdDE7XG4gICAgICAgIH1cbiAgICAgICAgZ2V0U2xvdFdpZHRoKEUpIHtcbiAgICAgICAgICBsZXQgRCA9IHRoaXMuY2hhcnQsIEcgPSB0aGlzLmhvcml6LCBKID0gdGhpcy5vcHRpb25zLmxhYmVscywgUyA9IE1hdGgubWF4KHRoaXMudGlja1Bvc2l0aW9ucy5sZW5ndGggLSAodGhpcy5jYXRlZ29yaWVzID8gMCA6IDEpLCAxKSwgVyA9IEQubWFyZ2luWzNdO1xuICAgICAgICAgIGlmIChFICYmIG0oRS5zbG90V2lkdGgpKVxuICAgICAgICAgICAgcmV0dXJuIEUuc2xvdFdpZHRoO1xuICAgICAgICAgIGlmIChHICYmIEouc3RlcCA8IDIpXG4gICAgICAgICAgICByZXR1cm4gSi5yb3RhdGlvbiA/IDAgOiAodGhpcy5zdGFnZ2VyTGluZXMgfHwgMSkgKiB0aGlzLmxlbiAvIFM7XG4gICAgICAgICAgaWYgKCFHKSB7XG4gICAgICAgICAgICBsZXQgUCA9IEouc3R5bGUud2lkdGg7XG4gICAgICAgICAgICBpZiAoUCAhPT0gdm9pZCAwKVxuICAgICAgICAgICAgICByZXR1cm4gcGFyc2VJbnQoU3RyaW5nKFApLCAxMCk7XG4gICAgICAgICAgICBpZiAoVylcbiAgICAgICAgICAgICAgcmV0dXJuIFcgLSBELnNwYWNpbmdbM107XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiAwLjMzICogRC5jaGFydFdpZHRoO1xuICAgICAgICB9XG4gICAgICAgIHJlbmRlclVuc3F1aXNoKCkge1xuICAgICAgICAgIGxldCBFID0gdGhpcy5jaGFydCwgRCA9IEUucmVuZGVyZXIsIEcgPSB0aGlzLnRpY2tQb3NpdGlvbnMsIEogPSB0aGlzLnRpY2tzLCBTID0gdGhpcy5vcHRpb25zLmxhYmVscywgVyA9IFMuc3R5bGUsIFAgPSB0aGlzLmhvcml6LCBZID0gdGhpcy5nZXRTbG90V2lkdGgoKSwgWiA9IE1hdGgubWF4KDEsIE1hdGgucm91bmQoWSAtIChQID8gMiAqIChTLnBhZGRpbmcgfHwgMCkgOiBTLmRpc3RhbmNlIHx8IDApKSksIHQxID0ge30sIGkxID0gdGhpcy5sYWJlbE1ldHJpY3MoKSwgbjEgPSBXLnRleHRPdmVyZmxvdywgczEsIGQxLCBiMSA9IDAsIGMxLCBhMTtcbiAgICAgICAgICBpZiAoayhTLnJvdGF0aW9uKSB8fCAodDEucm90YXRpb24gPSBTLnJvdGF0aW9uIHx8IDApLCBHLmZvckVhY2goZnVuY3Rpb24obDEpIHtcbiAgICAgICAgICAgIGxldCBwMSA9IEpbbDFdO1xuICAgICAgICAgICAgcDEubW92ZWRMYWJlbCAmJiBwMS5yZXBsYWNlTW92ZWRMYWJlbCgpLCBwMSAmJiBwMS5sYWJlbCAmJiBwMS5sYWJlbC50ZXh0UHhMZW5ndGggPiBiMSAmJiAoYjEgPSBwMS5sYWJlbC50ZXh0UHhMZW5ndGgpO1xuICAgICAgICAgIH0pLCB0aGlzLm1heExhYmVsTGVuZ3RoID0gYjEsIHRoaXMuYXV0b1JvdGF0aW9uKVxuICAgICAgICAgICAgYjEgPiBaICYmIGIxID4gaTEuaCA/IHQxLnJvdGF0aW9uID0gdGhpcy5sYWJlbFJvdGF0aW9uIDogdGhpcy5sYWJlbFJvdGF0aW9uID0gMDtcbiAgICAgICAgICBlbHNlIGlmIChZICYmIChzMSA9IFosICFuMSkpXG4gICAgICAgICAgICBmb3IgKGQxID0gXCJjbGlwXCIsIGExID0gRy5sZW5ndGg7ICFQICYmIGExLS07IClcbiAgICAgICAgICAgICAgKGMxID0gSltHW2ExXV0ubGFiZWwpICYmIChjMS5zdHlsZXMudGV4dE92ZXJmbG93ID09PSBcImVsbGlwc2lzXCIgPyBjMS5jc3MoeyB0ZXh0T3ZlcmZsb3c6IFwiY2xpcFwiIH0pIDogYzEudGV4dFB4TGVuZ3RoID4gWSAmJiBjMS5jc3MoeyB3aWR0aDogWSArIFwicHhcIiB9KSwgYzEuZ2V0QkJveCgpLmhlaWdodCA+IHRoaXMubGVuIC8gRy5sZW5ndGggLSAoaTEuaCAtIGkxLmYpICYmIChjMS5zcGVjaWZpY1RleHRPdmVyZmxvdyA9IFwiZWxsaXBzaXNcIikpO1xuICAgICAgICAgIHQxLnJvdGF0aW9uICYmIChzMSA9IGIxID4gMC41ICogRS5jaGFydEhlaWdodCA/IDAuMzMgKiBFLmNoYXJ0SGVpZ2h0IDogYjEsIG4xIHx8IChkMSA9IFwiZWxsaXBzaXNcIikpLCB0aGlzLmxhYmVsQWxpZ24gPSBTLmFsaWduIHx8IHRoaXMuYXV0b0xhYmVsQWxpZ24odGhpcy5sYWJlbFJvdGF0aW9uKSwgdGhpcy5sYWJlbEFsaWduICYmICh0MS5hbGlnbiA9IHRoaXMubGFiZWxBbGlnbiksIEcuZm9yRWFjaChmdW5jdGlvbihsMSkge1xuICAgICAgICAgICAgbGV0IHAxID0gSltsMV0sIE0xID0gcDEgJiYgcDEubGFiZWwsIEExID0gVy53aWR0aCwgdTEgPSB7fTtcbiAgICAgICAgICAgIE0xICYmIChNMS5hdHRyKHQxKSwgcDEuc2hvcnRlbkxhYmVsID8gcDEuc2hvcnRlbkxhYmVsKCkgOiBzMSAmJiAhQTEgJiYgVy53aGl0ZVNwYWNlICE9PSBcIm5vd3JhcFwiICYmIChzMSA8IE0xLnRleHRQeExlbmd0aCB8fCBNMS5lbGVtZW50LnRhZ05hbWUgPT09IFwiU1BBTlwiKSA/ICh1MS53aWR0aCA9IHMxICsgXCJweFwiLCBuMSB8fCAodTEudGV4dE92ZXJmbG93ID0gTTEuc3BlY2lmaWNUZXh0T3ZlcmZsb3cgfHwgZDEpLCBNMS5jc3ModTEpKSA6ICFNMS5zdHlsZXMud2lkdGggfHwgdTEud2lkdGggfHwgQTEgfHwgTTEuY3NzKHsgd2lkdGg6IG51bGwgfSksIGRlbGV0ZSBNMS5zcGVjaWZpY1RleHRPdmVyZmxvdywgcDEucm90YXRpb24gPSB0MS5yb3RhdGlvbik7XG4gICAgICAgICAgfSwgdGhpcyksIHRoaXMudGlja1JvdENvcnIgPSBELnJvdENvcnIoaTEuYiwgdGhpcy5sYWJlbFJvdGF0aW9uIHx8IDAsIHRoaXMuc2lkZSAhPT0gMCk7XG4gICAgICAgIH1cbiAgICAgICAgaGFzRGF0YSgpIHtcbiAgICAgICAgICByZXR1cm4gdGhpcy5zZXJpZXMuc29tZShmdW5jdGlvbihFKSB7XG4gICAgICAgICAgICByZXR1cm4gRS5oYXNEYXRhKCk7XG4gICAgICAgICAgfSkgfHwgdGhpcy5vcHRpb25zLnNob3dFbXB0eSAmJiB5KHRoaXMubWluKSAmJiB5KHRoaXMubWF4KTtcbiAgICAgICAgfVxuICAgICAgICBhZGRUaXRsZShFKSB7XG4gICAgICAgICAgbGV0IEQsIEcgPSB0aGlzLmNoYXJ0LnJlbmRlcmVyLCBKID0gdGhpcy5ob3JpeiwgUyA9IHRoaXMub3Bwb3NpdGUsIFcgPSB0aGlzLm9wdGlvbnMudGl0bGUsIFAgPSB0aGlzLmNoYXJ0LnN0eWxlZE1vZGU7XG4gICAgICAgICAgdGhpcy5heGlzVGl0bGUgfHwgKChEID0gVy50ZXh0QWxpZ24pIHx8IChEID0gKEogPyB7IGxvdzogXCJsZWZ0XCIsIG1pZGRsZTogXCJjZW50ZXJcIiwgaGlnaDogXCJyaWdodFwiIH0gOiB7IGxvdzogUyA/IFwicmlnaHRcIiA6IFwibGVmdFwiLCBtaWRkbGU6IFwiY2VudGVyXCIsIGhpZ2g6IFMgPyBcImxlZnRcIiA6IFwicmlnaHRcIiB9KVtXLmFsaWduXSksIHRoaXMuYXhpc1RpdGxlID0gRy50ZXh0KFcudGV4dCB8fCBcIlwiLCAwLCAwLCBXLnVzZUhUTUwpLmF0dHIoeyB6SW5kZXg6IDcsIHJvdGF0aW9uOiBXLnJvdGF0aW9uIHx8IDAsIGFsaWduOiBEIH0pLmFkZENsYXNzKFwiaGlnaGNoYXJ0cy1heGlzLXRpdGxlXCIpLCBQIHx8IHRoaXMuYXhpc1RpdGxlLmNzcyh4KFcuc3R5bGUpKSwgdGhpcy5heGlzVGl0bGUuYWRkKHRoaXMuYXhpc0dyb3VwKSwgdGhpcy5heGlzVGl0bGUuaXNOZXcgPSAhMCksIFAgfHwgVy5zdHlsZS53aWR0aCB8fCB0aGlzLmlzUmFkaWFsIHx8IHRoaXMuYXhpc1RpdGxlLmNzcyh7IHdpZHRoOiB0aGlzLmxlbiArIFwicHhcIiB9KSwgdGhpcy5heGlzVGl0bGVbRSA/IFwic2hvd1wiIDogXCJoaWRlXCJdKEUpO1xuICAgICAgICB9XG4gICAgICAgIGdlbmVyYXRlVGljayhFKSB7XG4gICAgICAgICAgbGV0IEQgPSB0aGlzLnRpY2tzO1xuICAgICAgICAgIERbRV0gPyBEW0VdLmFkZExhYmVsKCkgOiBEW0VdID0gbmV3IGQodGhpcywgRSk7XG4gICAgICAgIH1cbiAgICAgICAgY3JlYXRlR3JvdXBzKCkge1xuICAgICAgICAgIGxldCB7IGF4aXNQYXJlbnQ6IEUsIGNoYXJ0OiBELCBjb2xsOiBHLCBvcHRpb25zOiBKIH0gPSB0aGlzLCBTID0gRC5yZW5kZXJlciwgVyA9IChQLCBZLCBaKSA9PiBTLmcoUCkuYXR0cih7IHpJbmRleDogWiB9KS5hZGRDbGFzcyhgaGlnaGNoYXJ0cy0ke0cudG9Mb3dlckNhc2UoKX0ke1l9IGAgKyAodGhpcy5pc1JhZGlhbCA/IGBoaWdoY2hhcnRzLXJhZGlhbC1heGlzJHtZfSBgIDogXCJcIikgKyAoSi5jbGFzc05hbWUgfHwgXCJcIikpLmFkZChFKTtcbiAgICAgICAgICB0aGlzLmF4aXNHcm91cCB8fCAodGhpcy5ncmlkR3JvdXAgPSBXKFwiZ3JpZFwiLCBcIi1ncmlkXCIsIEouZ3JpZFpJbmRleCksIHRoaXMuYXhpc0dyb3VwID0gVyhcImF4aXNcIiwgXCJcIiwgSi56SW5kZXgpLCB0aGlzLmxhYmVsR3JvdXAgPSBXKFwiYXhpcy1sYWJlbHNcIiwgXCItbGFiZWxzXCIsIEoubGFiZWxzLnpJbmRleCkpO1xuICAgICAgICB9XG4gICAgICAgIGdldE9mZnNldCgpIHtcbiAgICAgICAgICBsZXQgRSA9IHRoaXMsIHsgY2hhcnQ6IEQsIGhvcml6OiBHLCBvcHRpb25zOiBKLCBzaWRlOiBTLCB0aWNrczogVywgdGlja1Bvc2l0aW9uczogUCwgY29sbDogWSB9ID0gRSwgWiA9IEQuaW52ZXJ0ZWQgJiYgIUUuaXNaQXhpcyA/IFsxLCAwLCAzLCAyXVtTXSA6IFMsIHQxID0gRS5oYXNEYXRhKCksIGkxID0gSi50aXRsZSwgbjEgPSBKLmxhYmVscywgczEgPSBtKEouY3Jvc3NpbmcpLCBkMSA9IEQuYXhpc09mZnNldCwgYjEgPSBELmNsaXBPZmZzZXQsIGMxID0gWy0xLCAxLCAxLCAtMV1bU10sIGExLCBsMSA9IDAsIHAxLCBNMSA9IDAsIEExID0gMCwgdTEsIGgxO1xuICAgICAgICAgIGlmIChFLnNob3dBeGlzID0gYTEgPSB0MSB8fCBKLnNob3dFbXB0eSwgRS5zdGFnZ2VyTGluZXMgPSBFLmhvcml6ICYmIG4xLnN0YWdnZXJMaW5lcyB8fCB2b2lkIDAsIEUuY3JlYXRlR3JvdXBzKCksIHQxIHx8IEUuaXNMaW5rZWQgPyAoUC5mb3JFYWNoKGZ1bmN0aW9uKEMxKSB7XG4gICAgICAgICAgICBFLmdlbmVyYXRlVGljayhDMSk7XG4gICAgICAgICAgfSksIEUucmVuZGVyVW5zcXVpc2goKSwgRS5yZXNlcnZlU3BhY2VEZWZhdWx0ID0gUyA9PT0gMCB8fCBTID09PSAyIHx8IHsgMTogXCJsZWZ0XCIsIDM6IFwicmlnaHRcIiB9W1NdID09PSBFLmxhYmVsQWxpZ24sIFIobjEucmVzZXJ2ZVNwYWNlLCAhczEgJiYgbnVsbCwgRS5sYWJlbEFsaWduID09PSBcImNlbnRlclwiIHx8IG51bGwsIEUucmVzZXJ2ZVNwYWNlRGVmYXVsdCkgJiYgUC5mb3JFYWNoKGZ1bmN0aW9uKEMxKSB7XG4gICAgICAgICAgICBBMSA9IE1hdGgubWF4KFdbQzFdLmdldExhYmVsU2l6ZSgpLCBBMSk7XG4gICAgICAgICAgfSksIEUuc3RhZ2dlckxpbmVzICYmIChBMSAqPSBFLnN0YWdnZXJMaW5lcyksIEUubGFiZWxPZmZzZXQgPSBBMSAqIChFLm9wcG9zaXRlID8gLTEgOiAxKSkgOiBWKFcsIGZ1bmN0aW9uKEMxLCBxMSkge1xuICAgICAgICAgICAgQzEuZGVzdHJveSgpLCBkZWxldGUgV1txMV07XG4gICAgICAgICAgfSksIGkxICE9IG51bGwgJiYgaTEudGV4dCAmJiBpMS5lbmFibGVkICE9PSAhMSAmJiAoRS5hZGRUaXRsZShhMSksIGExICYmICFzMSAmJiBpMS5yZXNlcnZlU3BhY2UgIT09ICExICYmIChFLnRpdGxlT2Zmc2V0ID0gbDEgPSBFLmF4aXNUaXRsZS5nZXRCQm94KClbRyA/IFwiaGVpZ2h0XCIgOiBcIndpZHRoXCJdLCBNMSA9IHkocDEgPSBpMS5vZmZzZXQpID8gMCA6IFIoaTEubWFyZ2luLCBHID8gNSA6IDEwKSkpLCBFLnJlbmRlckxpbmUoKSwgRS5vZmZzZXQgPSBjMSAqIFIoSi5vZmZzZXQsIGQxW1NdID8gZDFbU10gKyAoSi5tYXJnaW4gfHwgMCkgOiAwKSwgRS50aWNrUm90Q29yciA9IEUudGlja1JvdENvcnIgfHwgeyB4OiAwLCB5OiAwIH0sIGgxID0gUyA9PT0gMCA/IC1FLmxhYmVsTWV0cmljcygpLmggOiBTID09PSAyID8gRS50aWNrUm90Q29yci55IDogMCwgdTEgPSBNYXRoLmFicyhBMSkgKyBNMSwgQTEgJiYgKHUxIC09IGgxLCB1MSArPSBjMSAqIChHID8gUihuMS55LCBFLnRpY2tSb3RDb3JyLnkgKyBjMSAqIG4xLmRpc3RhbmNlKSA6IFIobjEueCwgYzEgKiBuMS5kaXN0YW5jZSkpKSwgRS5heGlzVGl0bGVNYXJnaW4gPSBSKHAxLCB1MSksIEUuZ2V0TWF4TGFiZWxEaW1lbnNpb25zICYmIChFLm1heExhYmVsRGltZW5zaW9ucyA9IEUuZ2V0TWF4TGFiZWxEaW1lbnNpb25zKFcsIFApKSwgWSAhPT0gXCJjb2xvckF4aXNcIiAmJiBiMSkge1xuICAgICAgICAgICAgbGV0IEMxID0gdGhpcy50aWNrU2l6ZShcInRpY2tcIik7XG4gICAgICAgICAgICBkMVtTXSA9IE1hdGgubWF4KGQxW1NdLCAoRS5heGlzVGl0bGVNYXJnaW4gfHwgMCkgKyBsMSArIGMxICogRS5vZmZzZXQsIHUxLCBQICYmIFAubGVuZ3RoICYmIEMxID8gQzFbMF0gKyBjMSAqIEUub2Zmc2V0IDogMCk7XG4gICAgICAgICAgICBsZXQgcTEgPSAhRS5heGlzTGluZSB8fCBKLm9mZnNldCA/IDAgOiBFLmF4aXNMaW5lLnN0cm9rZVdpZHRoKCkgLyAyO1xuICAgICAgICAgICAgYjFbWl0gPSBNYXRoLm1heChiMVtaXSwgcTEpO1xuICAgICAgICAgIH1cbiAgICAgICAgICB3KHRoaXMsIFwiYWZ0ZXJHZXRPZmZzZXRcIik7XG4gICAgICAgIH1cbiAgICAgICAgZ2V0TGluZVBhdGgoRSkge1xuICAgICAgICAgIGxldCBEID0gdGhpcy5jaGFydCwgRyA9IHRoaXMub3Bwb3NpdGUsIEogPSB0aGlzLm9mZnNldCwgUyA9IHRoaXMuaG9yaXosIFcgPSB0aGlzLmxlZnQgKyAoRyA/IHRoaXMud2lkdGggOiAwKSArIEosIFAgPSBELmNoYXJ0SGVpZ2h0IC0gdGhpcy5ib3R0b20gLSAoRyA/IHRoaXMuaGVpZ2h0IDogMCkgKyBKO1xuICAgICAgICAgIHJldHVybiBHICYmIChFICo9IC0xKSwgRC5yZW5kZXJlci5jcmlzcExpbmUoW1tcIk1cIiwgUyA/IHRoaXMubGVmdCA6IFcsIFMgPyBQIDogdGhpcy50b3BdLCBbXCJMXCIsIFMgPyBELmNoYXJ0V2lkdGggLSB0aGlzLnJpZ2h0IDogVywgUyA/IFAgOiBELmNoYXJ0SGVpZ2h0IC0gdGhpcy5ib3R0b21dXSwgRSk7XG4gICAgICAgIH1cbiAgICAgICAgcmVuZGVyTGluZSgpIHtcbiAgICAgICAgICB0aGlzLmF4aXNMaW5lIHx8ICh0aGlzLmF4aXNMaW5lID0gdGhpcy5jaGFydC5yZW5kZXJlci5wYXRoKCkuYWRkQ2xhc3MoXCJoaWdoY2hhcnRzLWF4aXMtbGluZVwiKS5hZGQodGhpcy5heGlzR3JvdXApLCB0aGlzLmNoYXJ0LnN0eWxlZE1vZGUgfHwgdGhpcy5heGlzTGluZS5hdHRyKHsgc3Ryb2tlOiB0aGlzLm9wdGlvbnMubGluZUNvbG9yLCBcInN0cm9rZS13aWR0aFwiOiB0aGlzLm9wdGlvbnMubGluZVdpZHRoLCB6SW5kZXg6IDcgfSkpO1xuICAgICAgICB9XG4gICAgICAgIGdldFRpdGxlUG9zaXRpb24oRSkge1xuICAgICAgICAgIGxldCBEID0gdGhpcy5ob3JpeiwgRyA9IHRoaXMubGVmdCwgSiA9IHRoaXMudG9wLCBTID0gdGhpcy5sZW4sIFcgPSB0aGlzLm9wdGlvbnMudGl0bGUsIFAgPSBEID8gRyA6IEosIFkgPSB0aGlzLm9wcG9zaXRlLCBaID0gdGhpcy5vZmZzZXQsIHQxID0gVy54LCBpMSA9IFcueSwgbjEgPSB0aGlzLmNoYXJ0LnJlbmRlcmVyLmZvbnRNZXRyaWNzKEUpLCBzMSA9IEUgPyBNYXRoLm1heChFLmdldEJCb3goITEsIDApLmhlaWdodCAtIG4xLmggLSAxLCAwKSA6IDAsIGQxID0geyBsb3c6IFAgKyAoRCA/IDAgOiBTKSwgbWlkZGxlOiBQICsgUyAvIDIsIGhpZ2g6IFAgKyAoRCA/IFMgOiAwKSB9W1cuYWxpZ25dLCBiMSA9IChEID8gSiArIHRoaXMuaGVpZ2h0IDogRykgKyAoRCA/IDEgOiAtMSkgKiAoWSA/IC0xIDogMSkgKiAodGhpcy5heGlzVGl0bGVNYXJnaW4gfHwgMCkgKyBbLXMxLCBzMSwgbjEuZiwgLXMxXVt0aGlzLnNpZGVdLCBjMSA9IHsgeDogRCA/IGQxICsgdDEgOiBiMSArIChZID8gdGhpcy53aWR0aCA6IDApICsgWiArIHQxLCB5OiBEID8gYjEgKyBpMSAtIChZID8gdGhpcy5oZWlnaHQgOiAwKSArIFogOiBkMSArIGkxIH07XG4gICAgICAgICAgcmV0dXJuIHcodGhpcywgXCJhZnRlckdldFRpdGxlUG9zaXRpb25cIiwgeyB0aXRsZVBvc2l0aW9uOiBjMSB9KSwgYzE7XG4gICAgICAgIH1cbiAgICAgICAgcmVuZGVyTWlub3JUaWNrKEUsIEQpIHtcbiAgICAgICAgICBsZXQgRyA9IHRoaXMubWlub3JUaWNrcztcbiAgICAgICAgICBHW0VdIHx8IChHW0VdID0gbmV3IGQodGhpcywgRSwgXCJtaW5vclwiKSksIEQgJiYgR1tFXS5pc05ldyAmJiBHW0VdLnJlbmRlcihudWxsLCAhMCksIEdbRV0ucmVuZGVyKG51bGwsICExLCAxKTtcbiAgICAgICAgfVxuICAgICAgICByZW5kZXJUaWNrKEUsIEQsIEcpIHtcbiAgICAgICAgICBsZXQgSiA9IHRoaXMuaXNMaW5rZWQsIFMgPSB0aGlzLnRpY2tzO1xuICAgICAgICAgICghSiB8fCBFID49IHRoaXMubWluICYmIEUgPD0gdGhpcy5tYXggfHwgdGhpcy5ncmlkICYmIHRoaXMuZ3JpZC5pc0NvbHVtbikgJiYgKFNbRV0gfHwgKFNbRV0gPSBuZXcgZCh0aGlzLCBFKSksIEcgJiYgU1tFXS5pc05ldyAmJiBTW0VdLnJlbmRlcihELCAhMCwgLTEpLCBTW0VdLnJlbmRlcihEKSk7XG4gICAgICAgIH1cbiAgICAgICAgcmVuZGVyKCkge1xuICAgICAgICAgIGxldCBFLCBELCBHID0gdGhpcywgSiA9IEcuY2hhcnQsIFMgPSBHLmxvZ2FyaXRobWljLCBXID0gSi5yZW5kZXJlciwgUCA9IEcub3B0aW9ucywgWSA9IEcuaXNMaW5rZWQsIFogPSBHLnRpY2tQb3NpdGlvbnMsIHQxID0gRy5heGlzVGl0bGUsIGkxID0gRy50aWNrcywgbjEgPSBHLm1pbm9yVGlja3MsIHMxID0gRy5hbHRlcm5hdGVCYW5kcywgZDEgPSBQLnN0YWNrTGFiZWxzLCBiMSA9IFAuYWx0ZXJuYXRlR3JpZENvbG9yLCBjMSA9IFAuY3Jvc3NpbmcsIGExID0gRy50aWNrbWFya09mZnNldCwgbDEgPSBHLmF4aXNMaW5lLCBwMSA9IEcuc2hvd0F4aXMsIE0xID0gTShXLmdsb2JhbEFuaW1hdGlvbik7XG4gICAgICAgICAgaWYgKEcubGFiZWxFZGdlLmxlbmd0aCA9IDAsIEcub3ZlcmxhcCA9ICExLCBbaTEsIG4xLCBzMV0uZm9yRWFjaChmdW5jdGlvbihBMSkge1xuICAgICAgICAgICAgVihBMSwgZnVuY3Rpb24odTEpIHtcbiAgICAgICAgICAgICAgdTEuaXNBY3RpdmUgPSAhMTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH0pLCBtKGMxKSkge1xuICAgICAgICAgICAgbGV0IEExID0gdGhpcy5pc1hBeGlzID8gSi55QXhpc1swXSA6IEoueEF4aXNbMF0sIHUxID0gWzEsIC0xLCAtMSwgMV1bdGhpcy5zaWRlXTtcbiAgICAgICAgICAgIGlmIChBMSkge1xuICAgICAgICAgICAgICBsZXQgaDEgPSBBMS50b1BpeGVscyhjMSwgITApO1xuICAgICAgICAgICAgICBHLmhvcml6ICYmIChoMSA9IEExLmxlbiAtIGgxKSwgRy5vZmZzZXQgPSB1MSAqIGgxO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoRy5oYXNEYXRhKCkgfHwgWSkge1xuICAgICAgICAgICAgbGV0IEExID0gRy5jaGFydC5oYXNSZW5kZXJlZCAmJiBHLm9sZCAmJiBtKEcub2xkLm1pbik7XG4gICAgICAgICAgICBHLm1pbm9yVGlja0ludGVydmFsICYmICFHLmNhdGVnb3JpZXMgJiYgRy5nZXRNaW5vclRpY2tQb3NpdGlvbnMoKS5mb3JFYWNoKGZ1bmN0aW9uKHUxKSB7XG4gICAgICAgICAgICAgIEcucmVuZGVyTWlub3JUaWNrKHUxLCBBMSk7XG4gICAgICAgICAgICB9KSwgWi5sZW5ndGggJiYgKFouZm9yRWFjaChmdW5jdGlvbih1MSwgaDEpIHtcbiAgICAgICAgICAgICAgRy5yZW5kZXJUaWNrKHUxLCBoMSwgQTEpO1xuICAgICAgICAgICAgfSksIGExICYmIChHLm1pbiA9PT0gMCB8fCBHLnNpbmdsZSkgJiYgKGkxWy0xXSB8fCAoaTFbLTFdID0gbmV3IGQoRywgLTEsIG51bGwsICEwKSksIGkxWy0xXS5yZW5kZXIoLTEpKSksIGIxICYmIFouZm9yRWFjaChmdW5jdGlvbih1MSwgaDEpIHtcbiAgICAgICAgICAgICAgRCA9IFpbaDEgKyAxXSAhPT0gdm9pZCAwID8gWltoMSArIDFdICsgYTEgOiBHLm1heCAtIGExLCBoMSAlIDIgPT0gMCAmJiB1MSA8IEcubWF4ICYmIEQgPD0gRy5tYXggKyAoSi5wb2xhciA/IC1hMSA6IGExKSAmJiAoczFbdTFdIHx8IChzMVt1MV0gPSBuZXcgcC5QbG90TGluZU9yQmFuZChHLCB7fSkpLCBFID0gdTEgKyBhMSwgczFbdTFdLm9wdGlvbnMgPSB7IGZyb206IFMgPyBTLmxpbjJsb2coRSkgOiBFLCB0bzogUyA/IFMubGluMmxvZyhEKSA6IEQsIGNvbG9yOiBiMSwgY2xhc3NOYW1lOiBcImhpZ2hjaGFydHMtYWx0ZXJuYXRlLWdyaWRcIiB9LCBzMVt1MV0ucmVuZGVyKCksIHMxW3UxXS5pc0FjdGl2ZSA9ICEwKTtcbiAgICAgICAgICAgIH0pLCBHLl9hZGRlZFBsb3RMQiB8fCAoRy5fYWRkZWRQbG90TEIgPSAhMCwgKFAucGxvdExpbmVzIHx8IFtdKS5jb25jYXQoUC5wbG90QmFuZHMgfHwgW10pLmZvckVhY2goZnVuY3Rpb24odTEpIHtcbiAgICAgICAgICAgICAgRy5hZGRQbG90QmFuZE9yTGluZSh1MSk7XG4gICAgICAgICAgICB9KSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIFtpMSwgbjEsIHMxXS5mb3JFYWNoKGZ1bmN0aW9uKEExKSB7XG4gICAgICAgICAgICBsZXQgdTEgPSBbXSwgaDEgPSBNMS5kdXJhdGlvbjtcbiAgICAgICAgICAgIFYoQTEsIGZ1bmN0aW9uKEMxLCBxMSkge1xuICAgICAgICAgICAgICBDMS5pc0FjdGl2ZSB8fCAoQzEucmVuZGVyKHExLCAhMSwgMCksIEMxLmlzQWN0aXZlID0gITEsIHUxLnB1c2gocTEpKTtcbiAgICAgICAgICAgIH0pLCBfKGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgICBsZXQgQzEgPSB1MS5sZW5ndGg7XG4gICAgICAgICAgICAgIGZvciAoOyBDMS0tOyApXG4gICAgICAgICAgICAgICAgQTFbdTFbQzFdXSAmJiAhQTFbdTFbQzFdXS5pc0FjdGl2ZSAmJiAoQTFbdTFbQzFdXS5kZXN0cm95KCksIGRlbGV0ZSBBMVt1MVtDMV1dKTtcbiAgICAgICAgICAgIH0sIEExICE9PSBzMSAmJiBKLmhhc1JlbmRlcmVkICYmIGgxID8gaDEgOiAwKTtcbiAgICAgICAgICB9KSwgbDEgJiYgKGwxW2wxLmlzUGxhY2VkID8gXCJhbmltYXRlXCIgOiBcImF0dHJcIl0oeyBkOiB0aGlzLmdldExpbmVQYXRoKGwxLnN0cm9rZVdpZHRoKCkpIH0pLCBsMS5pc1BsYWNlZCA9ICEwLCBsMVtwMSA/IFwic2hvd1wiIDogXCJoaWRlXCJdKHAxKSksIHQxICYmIHAxICYmICh0MVt0MS5pc05ldyA/IFwiYXR0clwiIDogXCJhbmltYXRlXCJdKEcuZ2V0VGl0bGVQb3NpdGlvbih0MSkpLCB0MS5pc05ldyA9ICExKSwgZDEgJiYgZDEuZW5hYmxlZCAmJiBHLnN0YWNraW5nICYmIEcuc3RhY2tpbmcucmVuZGVyU3RhY2tUb3RhbHMoKSwgRy5vbGQgPSB7IGxlbjogRy5sZW4sIG1heDogRy5tYXgsIG1pbjogRy5taW4sIHRyYW5zQTogRy50cmFuc0EsIHVzZXJNYXg6IEcudXNlck1heCwgdXNlck1pbjogRy51c2VyTWluIH0sIEcuaXNEaXJ0eSA9ICExLCB3KHRoaXMsIFwiYWZ0ZXJSZW5kZXJcIik7XG4gICAgICAgIH1cbiAgICAgICAgcmVkcmF3KCkge1xuICAgICAgICAgIHRoaXMudmlzaWJsZSAmJiAodGhpcy5yZW5kZXIoKSwgdGhpcy5wbG90TGluZXNBbmRCYW5kcy5mb3JFYWNoKGZ1bmN0aW9uKEUpIHtcbiAgICAgICAgICAgIEUucmVuZGVyKCk7XG4gICAgICAgICAgfSkpLCB0aGlzLnNlcmllcy5mb3JFYWNoKGZ1bmN0aW9uKEUpIHtcbiAgICAgICAgICAgIEUuaXNEaXJ0eSA9ICEwO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIGdldEtlZXBQcm9wcygpIHtcbiAgICAgICAgICByZXR1cm4gdGhpcy5rZWVwUHJvcHMgfHwgSy5rZWVwUHJvcHM7XG4gICAgICAgIH1cbiAgICAgICAgZGVzdHJveShFKSB7XG4gICAgICAgICAgbGV0IEQgPSB0aGlzLCBHID0gRC5wbG90TGluZXNBbmRCYW5kcywgSiA9IHRoaXMuZXZlbnRPcHRpb25zO1xuICAgICAgICAgIGlmICh3KHRoaXMsIFwiZGVzdHJveVwiLCB7IGtlZXBFdmVudHM6IEUgfSksIEUgfHwgaihEKSwgW0QudGlja3MsIEQubWlub3JUaWNrcywgRC5hbHRlcm5hdGVCYW5kc10uZm9yRWFjaChmdW5jdGlvbihTKSB7XG4gICAgICAgICAgICBCKFMpO1xuICAgICAgICAgIH0pLCBHKSB7XG4gICAgICAgICAgICBsZXQgUyA9IEcubGVuZ3RoO1xuICAgICAgICAgICAgZm9yICg7IFMtLTsgKVxuICAgICAgICAgICAgICBHW1NdLmRlc3Ryb3koKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgZm9yIChsZXQgUyBpbiBbXCJheGlzTGluZVwiLCBcImF4aXNUaXRsZVwiLCBcImF4aXNHcm91cFwiLCBcImdyaWRHcm91cFwiLCBcImxhYmVsR3JvdXBcIiwgXCJjcm9zc1wiLCBcInNjcm9sbGJhclwiXS5mb3JFYWNoKGZ1bmN0aW9uKFcpIHtcbiAgICAgICAgICAgIERbV10gJiYgKERbV10gPSBEW1ddLmRlc3Ryb3koKSk7XG4gICAgICAgICAgfSksIEQucGxvdExpbmVzQW5kQmFuZHNHcm91cHMpXG4gICAgICAgICAgICBELnBsb3RMaW5lc0FuZEJhbmRzR3JvdXBzW1NdID0gRC5wbG90TGluZXNBbmRCYW5kc0dyb3Vwc1tTXS5kZXN0cm95KCk7XG4gICAgICAgICAgVihELCBmdW5jdGlvbihTLCBXKSB7XG4gICAgICAgICAgICBELmdldEtlZXBQcm9wcygpLmluZGV4T2YoVykgPT09IC0xICYmIGRlbGV0ZSBEW1ddO1xuICAgICAgICAgIH0pLCB0aGlzLmV2ZW50T3B0aW9ucyA9IEo7XG4gICAgICAgIH1cbiAgICAgICAgZHJhd0Nyb3NzaGFpcihFLCBEKSB7XG4gICAgICAgICAgbGV0IEcgPSB0aGlzLmNyb3NzaGFpciwgSiA9IFIoRyAmJiBHLnNuYXAsICEwKSwgUyA9IHRoaXMuY2hhcnQsIFcsIFAsIFksIFogPSB0aGlzLmNyb3NzLCB0MTtcbiAgICAgICAgICBpZiAodyh0aGlzLCBcImRyYXdDcm9zc2hhaXJcIiwgeyBlOiBFLCBwb2ludDogRCB9KSwgRSB8fCAoRSA9IHRoaXMuY3Jvc3MgJiYgdGhpcy5jcm9zcy5lKSwgRyAmJiAoeShEKSB8fCAhSikgIT09ICExKSB7XG4gICAgICAgICAgICBpZiAoSiA/IHkoRCkgJiYgKFAgPSBSKHRoaXMuY29sbCAhPT0gXCJjb2xvckF4aXNcIiA/IEQuY3Jvc3NoYWlyUG9zIDogbnVsbCwgdGhpcy5pc1hBeGlzID8gRC5wbG90WCA6IHRoaXMubGVuIC0gRC5wbG90WSkpIDogUCA9IEUgJiYgKHRoaXMuaG9yaXogPyBFLmNoYXJ0WCAtIHRoaXMucG9zIDogdGhpcy5sZW4gLSBFLmNoYXJ0WSArIHRoaXMucG9zKSwgeShQKSAmJiAodDEgPSB7IHZhbHVlOiBEICYmICh0aGlzLmlzWEF4aXMgPyBELnggOiBSKEQuc3RhY2tZLCBELnkpKSwgdHJhbnNsYXRlZFZhbHVlOiBQIH0sIFMucG9sYXIgJiYgVCh0MSwgeyBpc0Nyb3NzaGFpcjogITAsIGNoYXJ0WDogRSAmJiBFLmNoYXJ0WCwgY2hhcnRZOiBFICYmIEUuY2hhcnRZLCBwb2ludDogRCB9KSwgVyA9IHRoaXMuZ2V0UGxvdExpbmVQYXRoKHQxKSB8fCBudWxsKSwgIXkoVykpIHtcbiAgICAgICAgICAgICAgdGhpcy5oaWRlQ3Jvc3NoYWlyKCk7XG4gICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIFkgPSB0aGlzLmNhdGVnb3JpZXMgJiYgIXRoaXMuaXNSYWRpYWwsIFogfHwgKHRoaXMuY3Jvc3MgPSBaID0gUy5yZW5kZXJlci5wYXRoKCkuYWRkQ2xhc3MoXCJoaWdoY2hhcnRzLWNyb3NzaGFpciBoaWdoY2hhcnRzLWNyb3NzaGFpci1cIiArIChZID8gXCJjYXRlZ29yeSBcIiA6IFwidGhpbiBcIikgKyAoRy5jbGFzc05hbWUgfHwgXCJcIikpLmF0dHIoeyB6SW5kZXg6IFIoRy56SW5kZXgsIDIpIH0pLmFkZCgpLCAhUy5zdHlsZWRNb2RlICYmIChaLmF0dHIoeyBzdHJva2U6IEcuY29sb3IgfHwgKFkgPyBhLnBhcnNlKFwiI2NjZDNmZlwiKS5zZXRPcGFjaXR5KDAuMjUpLmdldCgpIDogXCIjY2NjY2NjXCIpLCBcInN0cm9rZS13aWR0aFwiOiBSKEcud2lkdGgsIDEpIH0pLmNzcyh7IFwicG9pbnRlci1ldmVudHNcIjogXCJub25lXCIgfSksIEcuZGFzaFN0eWxlICYmIFouYXR0cih7IGRhc2hzdHlsZTogRy5kYXNoU3R5bGUgfSkpKSwgWi5zaG93KCkuYXR0cih7IGQ6IFcgfSksIFkgJiYgIUcud2lkdGggJiYgWi5hdHRyKHsgXCJzdHJva2Utd2lkdGhcIjogdGhpcy50cmFuc0EgfSksIHRoaXMuY3Jvc3MuZSA9IEU7XG4gICAgICAgICAgfSBlbHNlXG4gICAgICAgICAgICB0aGlzLmhpZGVDcm9zc2hhaXIoKTtcbiAgICAgICAgICB3KHRoaXMsIFwiYWZ0ZXJEcmF3Q3Jvc3NoYWlyXCIsIHsgZTogRSwgcG9pbnQ6IEQgfSk7XG4gICAgICAgIH1cbiAgICAgICAgaGlkZUNyb3NzaGFpcigpIHtcbiAgICAgICAgICB0aGlzLmNyb3NzICYmIHRoaXMuY3Jvc3MuaGlkZSgpLCB3KHRoaXMsIFwiYWZ0ZXJIaWRlQ3Jvc3NoYWlyXCIpO1xuICAgICAgICB9XG4gICAgICAgIHVwZGF0ZShFLCBEKSB7XG4gICAgICAgICAgbGV0IEcgPSB0aGlzLmNoYXJ0O1xuICAgICAgICAgIEUgPSB4KHRoaXMudXNlck9wdGlvbnMsIEUpLCB0aGlzLmRlc3Ryb3koITApLCB0aGlzLmluaXQoRywgRSksIEcuaXNEaXJ0eUJveCA9ICEwLCBSKEQsICEwKSAmJiBHLnJlZHJhdygpO1xuICAgICAgICB9XG4gICAgICAgIHJlbW92ZShFKSB7XG4gICAgICAgICAgbGV0IEQgPSB0aGlzLmNoYXJ0LCBHID0gdGhpcy5jb2xsLCBKID0gdGhpcy5zZXJpZXMsIFMgPSBKLmxlbmd0aDtcbiAgICAgICAgICBmb3IgKDsgUy0tOyApXG4gICAgICAgICAgICBKW1NdICYmIEpbU10ucmVtb3ZlKCExKTtcbiAgICAgICAgICBYKEQuYXhlcywgdGhpcyksIFgoRFtHXSB8fCBbXSwgdGhpcyksIEQub3JkZXJJdGVtcyhHKSwgdGhpcy5kZXN0cm95KCksIEQuaXNEaXJ0eUJveCA9ICEwLCBSKEUsICEwKSAmJiBELnJlZHJhdygpO1xuICAgICAgICB9XG4gICAgICAgIHNldFRpdGxlKEUsIEQpIHtcbiAgICAgICAgICB0aGlzLnVwZGF0ZSh7IHRpdGxlOiBFIH0sIEQpO1xuICAgICAgICB9XG4gICAgICAgIHNldENhdGVnb3JpZXMoRSwgRCkge1xuICAgICAgICAgIHRoaXMudXBkYXRlKHsgY2F0ZWdvcmllczogRSB9LCBEKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIEsua2VlcFByb3BzID0gW1wiY29sbFwiLCBcImV4dEtleVwiLCBcImhjRXZlbnRzXCIsIFwibGVuXCIsIFwibmFtZXNcIiwgXCJzZXJpZXNcIiwgXCJ1c2VyTWF4XCIsIFwidXNlck1pblwiXSwgSztcbiAgICB9KSwgbihvLCBcIkNvcmUvQXhpcy9EYXRlVGltZUF4aXMuanNcIiwgW29bXCJDb3JlL1V0aWxpdGllcy5qc1wiXV0sIGZ1bmN0aW9uKHIpIHtcbiAgICAgIHZhciBpO1xuICAgICAgbGV0IHsgYWRkRXZlbnQ6IGEsIGdldE1hZ25pdHVkZTogcywgbm9ybWFsaXplVGlja0ludGVydmFsOiBsLCB0aW1lVW5pdHM6IHAgfSA9IHI7XG4gICAgICByZXR1cm4gZnVuY3Rpb24oZCkge1xuICAgICAgICBmdW5jdGlvbiBiKCkge1xuICAgICAgICAgIHJldHVybiB0aGlzLmNoYXJ0LnRpbWUuZ2V0VGltZVRpY2tzLmFwcGx5KHRoaXMuY2hhcnQudGltZSwgYXJndW1lbnRzKTtcbiAgICAgICAgfVxuICAgICAgICBmdW5jdGlvbiBNKCkge1xuICAgICAgICAgIGlmICh0aGlzLnR5cGUgIT09IFwiZGF0ZXRpbWVcIikge1xuICAgICAgICAgICAgdGhpcy5kYXRlVGltZSA9IHZvaWQgMDtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICB9XG4gICAgICAgICAgdGhpcy5kYXRlVGltZSB8fCAodGhpcy5kYXRlVGltZSA9IG5ldyB1KHRoaXMpKTtcbiAgICAgICAgfVxuICAgICAgICBkLmNvbXBvc2UgPSBmdW5jdGlvbihBKSB7XG4gICAgICAgICAgcmV0dXJuIEEua2VlcFByb3BzLmluY2x1ZGVzKFwiZGF0ZVRpbWVcIikgfHwgKEEua2VlcFByb3BzLnB1c2goXCJkYXRlVGltZVwiKSwgQS5wcm90b3R5cGUuZ2V0VGltZVRpY2tzID0gYiwgYShBLCBcImFmdGVyU2V0VHlwZVwiLCBNKSksIEE7XG4gICAgICAgIH07XG4gICAgICAgIGNsYXNzIHUge1xuICAgICAgICAgIGNvbnN0cnVjdG9yKHopIHtcbiAgICAgICAgICAgIHRoaXMuYXhpcyA9IHo7XG4gICAgICAgICAgfVxuICAgICAgICAgIG5vcm1hbGl6ZVRpbWVUaWNrSW50ZXJ2YWwoeiwgZikge1xuICAgICAgICAgICAgbGV0IE8gPSBmIHx8IFtbXCJtaWxsaXNlY29uZFwiLCBbMSwgMiwgNSwgMTAsIDIwLCAyNSwgNTAsIDEwMCwgMjAwLCA1MDBdXSwgW1wic2Vjb25kXCIsIFsxLCAyLCA1LCAxMCwgMTUsIDMwXV0sIFtcIm1pbnV0ZVwiLCBbMSwgMiwgNSwgMTAsIDE1LCAzMF1dLCBbXCJob3VyXCIsIFsxLCAyLCAzLCA0LCA2LCA4LCAxMl1dLCBbXCJkYXlcIiwgWzEsIDJdXSwgW1wid2Vla1wiLCBbMSwgMl1dLCBbXCJtb250aFwiLCBbMSwgMiwgMywgNCwgNl1dLCBbXCJ5ZWFyXCIsIG51bGxdXSwgaCA9IE9bTy5sZW5ndGggLSAxXSwgZyA9IHBbaFswXV0sIHYgPSBoWzFdLCBMO1xuICAgICAgICAgICAgZm9yIChMID0gMDsgTCA8IE8ubGVuZ3RoICYmIChnID0gcFsoaCA9IE9bTF0pWzBdXSwgdiA9IGhbMV0sICFPW0wgKyAxXSB8fCAhKHogPD0gKGcgKiB2W3YubGVuZ3RoIC0gMV0gKyBwW09bTCArIDFdWzBdXSkgLyAyKSk7IEwrKylcbiAgICAgICAgICAgICAgO1xuICAgICAgICAgICAgZyA9PT0gcC55ZWFyICYmIHogPCA1ICogZyAmJiAodiA9IFsxLCAyLCA1XSk7XG4gICAgICAgICAgICBsZXQgeSA9IGwoeiAvIGcsIHYsIGhbMF0gPT09IFwieWVhclwiID8gTWF0aC5tYXgocyh6IC8gZyksIDEpIDogMSk7XG4gICAgICAgICAgICByZXR1cm4geyB1bml0UmFuZ2U6IGcsIGNvdW50OiB5LCB1bml0TmFtZTogaFswXSB9O1xuICAgICAgICAgIH1cbiAgICAgICAgICBnZXRYRGF0ZUZvcm1hdCh6LCBmKSB7XG4gICAgICAgICAgICBsZXQgeyBheGlzOiBPIH0gPSB0aGlzLCBoID0gTy5jaGFydC50aW1lO1xuICAgICAgICAgICAgcmV0dXJuIE8uY2xvc2VzdFBvaW50UmFuZ2UgPyBoLmdldERhdGVGb3JtYXQoTy5jbG9zZXN0UG9pbnRSYW5nZSwgeiwgTy5vcHRpb25zLnN0YXJ0T2ZXZWVrLCBmKSB8fCBoLnJlc29sdmVEVExGb3JtYXQoZi55ZWFyKS5tYWluIDogaC5yZXNvbHZlRFRMRm9ybWF0KGYuZGF5KS5tYWluO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBkLkFkZGl0aW9ucyA9IHU7XG4gICAgICB9KGkgfHwgKGkgPSB7fSkpLCBpO1xuICAgIH0pLCBuKG8sIFwiQ29yZS9BeGlzL0xvZ2FyaXRobWljQXhpcy5qc1wiLCBbb1tcIkNvcmUvVXRpbGl0aWVzLmpzXCJdXSwgZnVuY3Rpb24ocikge1xuICAgICAgdmFyIGk7XG4gICAgICBsZXQgeyBhZGRFdmVudDogYSwgbm9ybWFsaXplVGlja0ludGVydmFsOiBzLCBwaWNrOiBsIH0gPSByO1xuICAgICAgcmV0dXJuIGZ1bmN0aW9uKHApIHtcbiAgICAgICAgZnVuY3Rpb24gZCgpIHtcbiAgICAgICAgICB0aGlzLnR5cGUgIT09IFwibG9nYXJpdGhtaWNcIiA/IHRoaXMubG9nYXJpdGhtaWMgPSB2b2lkIDAgOiB0aGlzLmxvZ2FyaXRobWljID8/ICh0aGlzLmxvZ2FyaXRobWljID0gbmV3IE0odGhpcykpO1xuICAgICAgICB9XG4gICAgICAgIGZ1bmN0aW9uIGIoKSB7XG4gICAgICAgICAgbGV0IHUgPSB0aGlzLmxvZ2FyaXRobWljO1xuICAgICAgICAgIHUgJiYgKHRoaXMubGluMnZhbCA9IGZ1bmN0aW9uKEEpIHtcbiAgICAgICAgICAgIHJldHVybiB1LmxpbjJsb2coQSk7XG4gICAgICAgICAgfSwgdGhpcy52YWwybGluID0gZnVuY3Rpb24oQSkge1xuICAgICAgICAgICAgcmV0dXJuIHUubG9nMmxpbihBKTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBwLmNvbXBvc2UgPSBmdW5jdGlvbih1KSB7XG4gICAgICAgICAgcmV0dXJuIHUua2VlcFByb3BzLmluY2x1ZGVzKFwibG9nYXJpdGhtaWNcIikgfHwgKHUua2VlcFByb3BzLnB1c2goXCJsb2dhcml0aG1pY1wiKSwgYSh1LCBcImFmdGVyU2V0VHlwZVwiLCBkKSwgYSh1LCBcImFmdGVySW5pdFwiLCBiKSksIHU7XG4gICAgICAgIH07XG4gICAgICAgIGNsYXNzIE0ge1xuICAgICAgICAgIGNvbnN0cnVjdG9yKEEpIHtcbiAgICAgICAgICAgIHRoaXMuYXhpcyA9IEE7XG4gICAgICAgICAgfVxuICAgICAgICAgIGdldExvZ1RpY2tQb3NpdGlvbnMoQSwgeiwgZiwgTykge1xuICAgICAgICAgICAgbGV0IGggPSB0aGlzLmF4aXMsIGcgPSBoLmxlbiwgdiA9IGgub3B0aW9ucywgTCA9IFtdO1xuICAgICAgICAgICAgaWYgKE8gfHwgKHRoaXMubWlub3JBdXRvSW50ZXJ2YWwgPSB2b2lkIDApLCBBID49IDAuNSlcbiAgICAgICAgICAgICAgQSA9IE1hdGgucm91bmQoQSksIEwgPSBoLmdldExpbmVhclRpY2tQb3NpdGlvbnMoQSwgeiwgZik7XG4gICAgICAgICAgICBlbHNlIGlmIChBID49IDAuMDgpIHtcbiAgICAgICAgICAgICAgbGV0IHksIEIsIFgsIEYsIFQsIHcsIEgsIEMgPSBNYXRoLmZsb29yKHopO1xuICAgICAgICAgICAgICBmb3IgKHkgPSBBID4gMC4zID8gWzEsIDIsIDRdIDogQSA+IDAuMTUgPyBbMSwgMiwgNCwgNiwgOF0gOiBbMSwgMiwgMywgNCwgNSwgNiwgNywgOCwgOV0sIEIgPSBDOyBCIDwgZiArIDEgJiYgIUg7IEIrKylcbiAgICAgICAgICAgICAgICBmb3IgKFggPSAwLCBGID0geS5sZW5ndGg7IFggPCBGICYmICFIOyBYKyspXG4gICAgICAgICAgICAgICAgICAoVCA9IHRoaXMubG9nMmxpbih0aGlzLmxpbjJsb2coQikgKiB5W1hdKSkgPiB6ICYmICghTyB8fCB3IDw9IGYpICYmIHcgIT09IHZvaWQgMCAmJiBMLnB1c2godyksIHcgPiBmICYmIChIID0gITApLCB3ID0gVDtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIGxldCB5ID0gdGhpcy5saW4ybG9nKHopLCBCID0gdGhpcy5saW4ybG9nKGYpLCBYID0gTyA/IGguZ2V0TWlub3JUaWNrSW50ZXJ2YWwoKSA6IHYudGlja0ludGVydmFsLCBGID0gdi50aWNrUGl4ZWxJbnRlcnZhbCAvIChPID8gNSA6IDEpLCBUID0gTyA/IGcgLyBoLnRpY2tQb3NpdGlvbnMubGVuZ3RoIDogZztcbiAgICAgICAgICAgICAgQSA9IHMoQSA9IGwoWCA9PT0gXCJhdXRvXCIgPyBudWxsIDogWCwgdGhpcy5taW5vckF1dG9JbnRlcnZhbCwgKEIgLSB5KSAqIEYgLyAoVCB8fCAxKSkpLCBMID0gaC5nZXRMaW5lYXJUaWNrUG9zaXRpb25zKEEsIHksIEIpLm1hcCh0aGlzLmxvZzJsaW4pLCBPIHx8ICh0aGlzLm1pbm9yQXV0b0ludGVydmFsID0gQSAvIDUpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIE8gfHwgKGgudGlja0ludGVydmFsID0gQSksIEw7XG4gICAgICAgICAgfVxuICAgICAgICAgIGxpbjJsb2coQSkge1xuICAgICAgICAgICAgcmV0dXJuIE1hdGgucG93KDEwLCBBKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgbG9nMmxpbihBKSB7XG4gICAgICAgICAgICByZXR1cm4gTWF0aC5sb2coQSkgLyBNYXRoLkxOMTA7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHAuQWRkaXRpb25zID0gTTtcbiAgICAgIH0oaSB8fCAoaSA9IHt9KSksIGk7XG4gICAgfSksIG4obywgXCJDb3JlL0F4aXMvUGxvdExpbmVPckJhbmQvUGxvdExpbmVPckJhbmRBeGlzLmpzXCIsIFtvW1wiQ29yZS9VdGlsaXRpZXMuanNcIl1dLCBmdW5jdGlvbihyKSB7XG4gICAgICB2YXIgaTtcbiAgICAgIGxldCB7IGVyYXNlOiBhLCBleHRlbmQ6IHMsIGlzTnVtYmVyOiBsIH0gPSByO1xuICAgICAgcmV0dXJuIGZ1bmN0aW9uKHApIHtcbiAgICAgICAgbGV0IGQ7XG4gICAgICAgIGZ1bmN0aW9uIGIoaCkge1xuICAgICAgICAgIHJldHVybiB0aGlzLmFkZFBsb3RCYW5kT3JMaW5lKGgsIFwicGxvdEJhbmRzXCIpO1xuICAgICAgICB9XG4gICAgICAgIGZ1bmN0aW9uIE0oaCwgZykge1xuICAgICAgICAgIGxldCB2ID0gdGhpcy51c2VyT3B0aW9ucywgTCA9IG5ldyBkKHRoaXMsIGgpO1xuICAgICAgICAgIGlmICh0aGlzLnZpc2libGUgJiYgKEwgPSBMLnJlbmRlcigpKSwgTCkge1xuICAgICAgICAgICAgaWYgKHRoaXMuX2FkZGVkUGxvdExCIHx8ICh0aGlzLl9hZGRlZFBsb3RMQiA9ICEwLCAodi5wbG90TGluZXMgfHwgW10pLmNvbmNhdCh2LnBsb3RCYW5kcyB8fCBbXSkuZm9yRWFjaCgoeSkgPT4ge1xuICAgICAgICAgICAgICB0aGlzLmFkZFBsb3RCYW5kT3JMaW5lKHkpO1xuICAgICAgICAgICAgfSkpLCBnKSB7XG4gICAgICAgICAgICAgIGxldCB5ID0gdltnXSB8fCBbXTtcbiAgICAgICAgICAgICAgeS5wdXNoKGgpLCB2W2ddID0geTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMucGxvdExpbmVzQW5kQmFuZHMucHVzaChMKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIEw7XG4gICAgICAgIH1cbiAgICAgICAgZnVuY3Rpb24gdShoKSB7XG4gICAgICAgICAgcmV0dXJuIHRoaXMuYWRkUGxvdEJhbmRPckxpbmUoaCwgXCJwbG90TGluZXNcIik7XG4gICAgICAgIH1cbiAgICAgICAgZnVuY3Rpb24gQShoLCBnLCB2KSB7XG4gICAgICAgICAgdiA9IHYgfHwgdGhpcy5vcHRpb25zO1xuICAgICAgICAgIGxldCBMID0gdGhpcy5nZXRQbG90TGluZVBhdGgoeyB2YWx1ZTogZywgZm9yY2U6ICEwLCBhY3Jvc3NQYW5lczogdi5hY3Jvc3NQYW5lcyB9KSwgeSA9IFtdLCBCID0gdGhpcy5ob3JpeiwgWCA9ICFsKHRoaXMubWluKSB8fCAhbCh0aGlzLm1heCkgfHwgaCA8IHRoaXMubWluICYmIGcgPCB0aGlzLm1pbiB8fCBoID4gdGhpcy5tYXggJiYgZyA+IHRoaXMubWF4LCBGID0gdGhpcy5nZXRQbG90TGluZVBhdGgoeyB2YWx1ZTogaCwgZm9yY2U6ICEwLCBhY3Jvc3NQYW5lczogdi5hY3Jvc3NQYW5lcyB9KSwgVCwgdyA9IDEsIEg7XG4gICAgICAgICAgaWYgKEYgJiYgTClcbiAgICAgICAgICAgIGZvciAoWCAmJiAoSCA9IEYudG9TdHJpbmcoKSA9PT0gTC50b1N0cmluZygpLCB3ID0gMCksIFQgPSAwOyBUIDwgRi5sZW5ndGg7IFQgKz0gMikge1xuICAgICAgICAgICAgICBsZXQgQyA9IEZbVF0sIHEgPSBGW1QgKyAxXSwgbSA9IExbVF0sIGsgPSBMW1QgKyAxXTtcbiAgICAgICAgICAgICAgKENbMF0gPT09IFwiTVwiIHx8IENbMF0gPT09IFwiTFwiKSAmJiAocVswXSA9PT0gXCJNXCIgfHwgcVswXSA9PT0gXCJMXCIpICYmIChtWzBdID09PSBcIk1cIiB8fCBtWzBdID09PSBcIkxcIikgJiYgKGtbMF0gPT09IFwiTVwiIHx8IGtbMF0gPT09IFwiTFwiKSAmJiAoQiAmJiBtWzFdID09PSBDWzFdID8gKG1bMV0gKz0gdywga1sxXSArPSB3KSA6IEIgfHwgbVsyXSAhPT0gQ1syXSB8fCAobVsyXSArPSB3LCBrWzJdICs9IHcpLCB5LnB1c2goW1wiTVwiLCBDWzFdLCBDWzJdXSwgW1wiTFwiLCBxWzFdLCBxWzJdXSwgW1wiTFwiLCBrWzFdLCBrWzJdXSwgW1wiTFwiLCBtWzFdLCBtWzJdXSwgW1wiWlwiXSkpLCB5LmlzRmxhdCA9IEg7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIHk7XG4gICAgICAgIH1cbiAgICAgICAgZnVuY3Rpb24geihoKSB7XG4gICAgICAgICAgdGhpcy5yZW1vdmVQbG90QmFuZE9yTGluZShoKTtcbiAgICAgICAgfVxuICAgICAgICBmdW5jdGlvbiBmKGgpIHtcbiAgICAgICAgICBsZXQgZyA9IHRoaXMucGxvdExpbmVzQW5kQmFuZHMsIHYgPSB0aGlzLm9wdGlvbnMsIEwgPSB0aGlzLnVzZXJPcHRpb25zO1xuICAgICAgICAgIGlmIChnKSB7XG4gICAgICAgICAgICBsZXQgeSA9IGcubGVuZ3RoO1xuICAgICAgICAgICAgZm9yICg7IHktLTsgKVxuICAgICAgICAgICAgICBnW3ldLmlkID09PSBoICYmIGdbeV0uZGVzdHJveSgpO1xuICAgICAgICAgICAgW3YucGxvdExpbmVzIHx8IFtdLCBMLnBsb3RMaW5lcyB8fCBbXSwgdi5wbG90QmFuZHMgfHwgW10sIEwucGxvdEJhbmRzIHx8IFtdXS5mb3JFYWNoKGZ1bmN0aW9uKEIpIHtcbiAgICAgICAgICAgICAgZm9yICh5ID0gQi5sZW5ndGg7IHktLTsgKVxuICAgICAgICAgICAgICAgIChCW3ldIHx8IHt9KS5pZCA9PT0gaCAmJiBhKEIsIEJbeV0pO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGZ1bmN0aW9uIE8oaCkge1xuICAgICAgICAgIHRoaXMucmVtb3ZlUGxvdEJhbmRPckxpbmUoaCk7XG4gICAgICAgIH1cbiAgICAgICAgcC5jb21wb3NlID0gZnVuY3Rpb24oaCwgZykge1xuICAgICAgICAgIGxldCB2ID0gZy5wcm90b3R5cGU7XG4gICAgICAgICAgcmV0dXJuIHYuYWRkUGxvdEJhbmQgfHwgKGQgPSBoLCBzKHYsIHsgYWRkUGxvdEJhbmQ6IGIsIGFkZFBsb3RMaW5lOiB1LCBhZGRQbG90QmFuZE9yTGluZTogTSwgZ2V0UGxvdEJhbmRQYXRoOiBBLCByZW1vdmVQbG90QmFuZDogeiwgcmVtb3ZlUGxvdExpbmU6IE8sIHJlbW92ZVBsb3RCYW5kT3JMaW5lOiBmIH0pKSwgZztcbiAgICAgICAgfTtcbiAgICAgIH0oaSB8fCAoaSA9IHt9KSksIGk7XG4gICAgfSksIG4obywgXCJDb3JlL0F4aXMvUGxvdExpbmVPckJhbmQvUGxvdExpbmVPckJhbmQuanNcIiwgW29bXCJDb3JlL0F4aXMvUGxvdExpbmVPckJhbmQvUGxvdExpbmVPckJhbmRBeGlzLmpzXCJdLCBvW1wiQ29yZS9VdGlsaXRpZXMuanNcIl1dLCBmdW5jdGlvbihyLCBpKSB7XG4gICAgICBsZXQgeyBhZGRFdmVudDogYSwgYXJyYXlNYXg6IHMsIGFycmF5TWluOiBsLCBkZWZpbmVkOiBwLCBkZXN0cm95T2JqZWN0UHJvcGVydGllczogZCwgZXJhc2U6IGIsIGZpcmVFdmVudDogTSwgbWVyZ2U6IHUsIG9iamVjdEVhY2g6IEEsIHBpY2s6IHogfSA9IGk7XG4gICAgICBjbGFzcyBmIHtcbiAgICAgICAgc3RhdGljIGNvbXBvc2UoaCwgZykge1xuICAgICAgICAgIHJldHVybiBhKGgsIFwiYWZ0ZXJJbml0XCIsIGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgdGhpcy5sYWJlbENvbGxlY3RvcnMucHVzaCgoKSA9PiB7XG4gICAgICAgICAgICAgIHZhciBMO1xuICAgICAgICAgICAgICBsZXQgdiA9IFtdO1xuICAgICAgICAgICAgICBmb3IgKGxldCB5IG9mIHRoaXMuYXhlcylcbiAgICAgICAgICAgICAgICBmb3IgKGxldCB7IGxhYmVsOiBCLCBvcHRpb25zOiBYIH0gb2YgeS5wbG90TGluZXNBbmRCYW5kcylcbiAgICAgICAgICAgICAgICAgIEIgJiYgISgoTCA9IFggPT0gbnVsbCA/IHZvaWQgMCA6IFgubGFiZWwpICE9IG51bGwgJiYgTC5hbGxvd092ZXJsYXApICYmIHYucHVzaChCKTtcbiAgICAgICAgICAgICAgcmV0dXJuIHY7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9KSwgci5jb21wb3NlKGYsIGcpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0cnVjdG9yKGgsIGcpIHtcbiAgICAgICAgICB0aGlzLmF4aXMgPSBoLCB0aGlzLm9wdGlvbnMgPSBnLCB0aGlzLmlkID0gZy5pZDtcbiAgICAgICAgfVxuICAgICAgICByZW5kZXIoKSB7XG4gICAgICAgICAgTSh0aGlzLCBcInJlbmRlclwiKTtcbiAgICAgICAgICBsZXQgeyBheGlzOiBoLCBvcHRpb25zOiBnIH0gPSB0aGlzLCB7IGhvcml6OiB2LCBsb2dhcml0aG1pYzogTCB9ID0gaCwgeyBjb2xvcjogeSwgZXZlbnRzOiBCLCB6SW5kZXg6IFggPSAwIH0gPSBnLCBGID0ge30sIFQgPSBoLmNoYXJ0LnJlbmRlcmVyLCB3ID0gZy50bywgSCA9IGcuZnJvbSwgQyA9IGcudmFsdWUsIHEgPSBnLmJvcmRlcldpZHRoLCBtID0gZy5sYWJlbCwgeyBsYWJlbDogaywgc3ZnRWxlbTogeCB9ID0gdGhpcywgTiA9IFtdLCBWLCBSID0gcChIKSAmJiBwKHcpLCBJID0gcChDKSwgaiA9ICF4LCBVID0geyBjbGFzczogXCJoaWdoY2hhcnRzLXBsb3QtXCIgKyAoUiA/IFwiYmFuZCBcIiA6IFwibGluZSBcIikgKyAoZy5jbGFzc05hbWUgfHwgXCJcIikgfSwgXyA9IFIgPyBcImJhbmRzXCIgOiBcImxpbmVzXCI7XG4gICAgICAgICAgaWYgKCFoLmNoYXJ0LnN0eWxlZE1vZGUgJiYgKEkgPyAoVS5zdHJva2UgPSB5IHx8IFwiIzk5OTk5OVwiLCBVW1wic3Ryb2tlLXdpZHRoXCJdID0geihnLndpZHRoLCAxKSwgZy5kYXNoU3R5bGUgJiYgKFUuZGFzaHN0eWxlID0gZy5kYXNoU3R5bGUpKSA6IFIgJiYgKFUuZmlsbCA9IHkgfHwgXCIjZTZlOWZmXCIsIHEgJiYgKFUuc3Ryb2tlID0gZy5ib3JkZXJDb2xvciwgVVtcInN0cm9rZS13aWR0aFwiXSA9IHEpKSksIEYuekluZGV4ID0gWCwgXyArPSBcIi1cIiArIFgsIChWID0gaC5wbG90TGluZXNBbmRCYW5kc0dyb3Vwc1tfXSkgfHwgKGgucGxvdExpbmVzQW5kQmFuZHNHcm91cHNbX10gPSBWID0gVC5nKFwicGxvdC1cIiArIF8pLmF0dHIoRikuYWRkKCkpLCB4IHx8ICh0aGlzLnN2Z0VsZW0gPSB4ID0gVC5wYXRoKCkuYXR0cihVKS5hZGQoVikpLCBwKEMpKVxuICAgICAgICAgICAgTiA9IGguZ2V0UGxvdExpbmVQYXRoKHsgdmFsdWU6IChMID09IG51bGwgPyB2b2lkIDAgOiBMLmxvZzJsaW4oQykpID8/IEMsIGxpbmVXaWR0aDogeC5zdHJva2VXaWR0aCgpLCBhY3Jvc3NQYW5lczogZy5hY3Jvc3NQYW5lcyB9KTtcbiAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGlmICghKHAoSCkgJiYgcCh3KSkpXG4gICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIE4gPSBoLmdldFBsb3RCYW5kUGF0aCgoTCA9PSBudWxsID8gdm9pZCAwIDogTC5sb2cybGluKEgpKSA/PyBILCAoTCA9PSBudWxsID8gdm9pZCAwIDogTC5sb2cybGluKHcpKSA/PyB3LCBnKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuICF0aGlzLmV2ZW50c0FkZGVkICYmIEIgJiYgKEEoQiwgKHIxLCBLKSA9PiB7XG4gICAgICAgICAgICB4ID09IG51bGwgfHwgeC5vbihLLCAoUSkgPT4ge1xuICAgICAgICAgICAgICBCW0tdLmFwcGx5KHRoaXMsIFtRXSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9KSwgdGhpcy5ldmVudHNBZGRlZCA9ICEwKSwgKGogfHwgIXguZCkgJiYgKE4gIT0gbnVsbCAmJiBOLmxlbmd0aCkgPyB4LmF0dHIoeyBkOiBOIH0pIDogeCAmJiAoTiA/ICh4LnNob3coKSwgeC5hbmltYXRlKHsgZDogTiB9KSkgOiB4LmQgJiYgKHguaGlkZSgpLCBrICYmICh0aGlzLmxhYmVsID0gayA9IGsuZGVzdHJveSgpKSkpLCBtICYmIChwKG0udGV4dCkgfHwgcChtLmZvcm1hdHRlcikpICYmIChOICE9IG51bGwgJiYgTi5sZW5ndGgpICYmIGgud2lkdGggPiAwICYmIGguaGVpZ2h0ID4gMCAmJiAhTi5pc0ZsYXQgPyAobSA9IHUoeyBhbGlnbjogdiAmJiBSID8gXCJjZW50ZXJcIiA6IHZvaWQgMCwgeDogdiA/ICFSICYmIDQgOiAxMCwgdmVydGljYWxBbGlnbjogIXYgJiYgUiA/IFwibWlkZGxlXCIgOiB2b2lkIDAsIHk6IHYgPyBSID8gMTYgOiAxMCA6IFIgPyA2IDogLTQsIHJvdGF0aW9uOiB2ICYmICFSID8gOTAgOiAwLCAuLi5SID8geyBpbnNpZGU6ICEwIH0gOiB7fSB9LCBtKSwgdGhpcy5yZW5kZXJMYWJlbChtLCBOLCBSLCBYKSkgOiBrICYmIGsuaGlkZSgpLCB0aGlzO1xuICAgICAgICB9XG4gICAgICAgIHJlbmRlckxhYmVsKGgsIGcsIHYsIEwpIHtcbiAgICAgICAgICB2YXIgbTtcbiAgICAgICAgICBsZXQgeSA9IHRoaXMuYXhpcywgQiA9IHkuY2hhcnQucmVuZGVyZXIsIFggPSBoLmluc2lkZSwgRiA9IHRoaXMubGFiZWw7XG4gICAgICAgICAgRiB8fCAodGhpcy5sYWJlbCA9IEYgPSBCLnRleHQodGhpcy5nZXRMYWJlbFRleHQoaCksIDAsIDAsIGgudXNlSFRNTCkuYXR0cih7IGFsaWduOiBoLnRleHRBbGlnbiB8fCBoLmFsaWduLCByb3RhdGlvbjogaC5yb3RhdGlvbiwgY2xhc3M6IFwiaGlnaGNoYXJ0cy1wbG90LVwiICsgKHYgPyBcImJhbmRcIiA6IFwibGluZVwiKSArIFwiLWxhYmVsIFwiICsgKGguY2xhc3NOYW1lIHx8IFwiXCIpLCB6SW5kZXg6IEwgfSksIHkuY2hhcnQuc3R5bGVkTW9kZSB8fCBGLmNzcyh1KHsgZm9udFNpemU6IFwiMC44ZW1cIiwgdGV4dE92ZXJmbG93OiB2ICYmICFYID8gXCJcIiA6IFwiZWxsaXBzaXNcIiB9LCBoLnN0eWxlKSksIEYuYWRkKCkpO1xuICAgICAgICAgIGxldCBUID0gZy54Qm91bmRzIHx8IFtnWzBdWzFdLCBnWzFdWzFdLCB2ID8gZ1syXVsxXSA6IGdbMF1bMV1dLCB3ID0gZy55Qm91bmRzIHx8IFtnWzBdWzJdLCBnWzFdWzJdLCB2ID8gZ1syXVsyXSA6IGdbMF1bMl1dLCBIID0gbChUKSwgQyA9IGwodyksIHEgPSBzKFQpIC0gSDtcbiAgICAgICAgICBGLmFsaWduKGgsICExLCB7IHg6IEgsIHk6IEMsIHdpZHRoOiBxLCBoZWlnaHQ6IHModykgLSBDIH0pLCAoIUYuYWxpZ25WYWx1ZSB8fCBGLmFsaWduVmFsdWUgPT09IFwibGVmdFwiIHx8IHAoWCkpICYmIEYuY3NzKHsgd2lkdGg6ICgoKG0gPSBoLnN0eWxlKSA9PSBudWxsID8gdm9pZCAwIDogbS53aWR0aCkgfHwgKHYgJiYgWCA/IHEgOiBGLnJvdGF0aW9uID09PSA5MCA/IHkuaGVpZ2h0IC0gKEYuYWxpZ25BdHRyLnkgLSB5LnRvcCkgOiAoaC5jbGlwID8geS53aWR0aCA6IHkuY2hhcnQuY2hhcnRXaWR0aCkgLSAoRi5hbGlnbkF0dHIueCAtIHkubGVmdCkpKSArIFwicHhcIiB9KSwgRi5zaG93KCEwKTtcbiAgICAgICAgfVxuICAgICAgICBnZXRMYWJlbFRleHQoaCkge1xuICAgICAgICAgIHJldHVybiBwKGguZm9ybWF0dGVyKSA/IGguZm9ybWF0dGVyLmNhbGwodGhpcykgOiBoLnRleHQ7XG4gICAgICAgIH1cbiAgICAgICAgZGVzdHJveSgpIHtcbiAgICAgICAgICBiKHRoaXMuYXhpcy5wbG90TGluZXNBbmRCYW5kcywgdGhpcyksIGRlbGV0ZSB0aGlzLmF4aXMsIGQodGhpcyk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiBmO1xuICAgIH0pLCBuKG8sIFwiQ29yZS9Ub29sdGlwLmpzXCIsIFtvW1wiQ29yZS9BbmltYXRpb24vQW5pbWF0aW9uVXRpbGl0aWVzLmpzXCJdLCBvW1wiQ29yZS9UZW1wbGF0aW5nLmpzXCJdLCBvW1wiQ29yZS9HbG9iYWxzLmpzXCJdLCBvW1wiQ29yZS9SZW5kZXJlci9SZW5kZXJlclV0aWxpdGllcy5qc1wiXSwgb1tcIkNvcmUvUmVuZGVyZXIvUmVuZGVyZXJSZWdpc3RyeS5qc1wiXSwgb1tcIkNvcmUvVXRpbGl0aWVzLmpzXCJdXSwgZnVuY3Rpb24ociwgaSwgYSwgcywgbCwgcCkge1xuICAgICAgdmFyIGQ7XG4gICAgICBsZXQgeyBhbmltT2JqZWN0OiBiIH0gPSByLCB7IGZvcm1hdDogTSB9ID0gaSwgeyBjb21wb3NlZDogdSwgZG9jOiBBLCBpc1NhZmFyaTogeiB9ID0gYSwgeyBkaXN0cmlidXRlOiBmIH0gPSBzLCB7IGFkZEV2ZW50OiBPLCBjbGFtcDogaCwgY3NzOiBnLCBkaXNjYXJkRWxlbWVudDogdiwgZXh0ZW5kOiBMLCBmaXJlRXZlbnQ6IHksIGlzQXJyYXk6IEIsIGlzTnVtYmVyOiBYLCBpc1N0cmluZzogRiwgbWVyZ2U6IFQsIHBpY2s6IHcsIHB1c2hVbmlxdWU6IEgsIHNwbGF0OiBDLCBzeW5jVGltZW91dDogcSB9ID0gcDtcbiAgICAgIGNsYXNzIG0ge1xuICAgICAgICBjb25zdHJ1Y3Rvcih4LCBOLCBWKSB7XG4gICAgICAgICAgdGhpcy5hbGxvd1NoYXJlZCA9ICEwLCB0aGlzLmNyb3NzaGFpcnMgPSBbXSwgdGhpcy5kaXN0YW5jZSA9IDAsIHRoaXMuaXNIaWRkZW4gPSAhMCwgdGhpcy5pc1N0aWNreSA9ICExLCB0aGlzLm9wdGlvbnMgPSB7fSwgdGhpcy5vdXRzaWRlID0gITEsIHRoaXMuY2hhcnQgPSB4LCB0aGlzLmluaXQoeCwgTiksIHRoaXMucG9pbnRlciA9IFY7XG4gICAgICAgIH1cbiAgICAgICAgYm9keUZvcm1hdHRlcih4KSB7XG4gICAgICAgICAgcmV0dXJuIHgubWFwKGZ1bmN0aW9uKE4pIHtcbiAgICAgICAgICAgIGxldCBWID0gTi5zZXJpZXMudG9vbHRpcE9wdGlvbnM7XG4gICAgICAgICAgICByZXR1cm4gKFZbKE4ucG9pbnQuZm9ybWF0UHJlZml4IHx8IFwicG9pbnRcIikgKyBcIkZvcm1hdHRlclwiXSB8fCBOLnBvaW50LnRvb2x0aXBGb3JtYXR0ZXIpLmNhbGwoTi5wb2ludCwgVlsoTi5wb2ludC5mb3JtYXRQcmVmaXggfHwgXCJwb2ludFwiKSArIFwiRm9ybWF0XCJdIHx8IFwiXCIpO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIGNsZWFuU3BsaXQoeCkge1xuICAgICAgICAgIHRoaXMuY2hhcnQuc2VyaWVzLmZvckVhY2goZnVuY3Rpb24oTikge1xuICAgICAgICAgICAgbGV0IFYgPSBOICYmIE4udHQ7XG4gICAgICAgICAgICBWICYmICghVi5pc0FjdGl2ZSB8fCB4ID8gTi50dCA9IFYuZGVzdHJveSgpIDogVi5pc0FjdGl2ZSA9ICExKTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBkZWZhdWx0Rm9ybWF0dGVyKHgpIHtcbiAgICAgICAgICBsZXQgTiwgViA9IHRoaXMucG9pbnRzIHx8IEModGhpcyk7XG4gICAgICAgICAgcmV0dXJuIChOID0gKE4gPSBbeC50b29sdGlwRm9vdGVySGVhZGVyRm9ybWF0dGVyKFZbMF0pXSkuY29uY2F0KHguYm9keUZvcm1hdHRlcihWKSkpLnB1c2goeC50b29sdGlwRm9vdGVySGVhZGVyRm9ybWF0dGVyKFZbMF0sICEwKSksIE47XG4gICAgICAgIH1cbiAgICAgICAgZGVzdHJveSgpIHtcbiAgICAgICAgICB0aGlzLmxhYmVsICYmICh0aGlzLmxhYmVsID0gdGhpcy5sYWJlbC5kZXN0cm95KCkpLCB0aGlzLnNwbGl0ICYmICh0aGlzLmNsZWFuU3BsaXQoITApLCB0aGlzLnR0ICYmICh0aGlzLnR0ID0gdGhpcy50dC5kZXN0cm95KCkpKSwgdGhpcy5yZW5kZXJlciAmJiAodGhpcy5yZW5kZXJlciA9IHRoaXMucmVuZGVyZXIuZGVzdHJveSgpLCB2KHRoaXMuY29udGFpbmVyKSksIHAuY2xlYXJUaW1lb3V0KHRoaXMuaGlkZVRpbWVyKTtcbiAgICAgICAgfVxuICAgICAgICBnZXRBbmNob3IoeCwgTikge1xuICAgICAgICAgIGxldCBWLCB7IGNoYXJ0OiBSLCBwb2ludGVyOiBJIH0gPSB0aGlzLCBqID0gUi5pbnZlcnRlZCwgVSA9IFIucGxvdFRvcCwgXyA9IFIucGxvdExlZnQ7XG4gICAgICAgICAgaWYgKCh4ID0gQyh4KSlbMF0uc2VyaWVzICYmIHhbMF0uc2VyaWVzLnlBeGlzICYmICF4WzBdLnNlcmllcy55QXhpcy5vcHRpb25zLnJldmVyc2VkU3RhY2tzICYmICh4ID0geC5zbGljZSgpLnJldmVyc2UoKSksIHRoaXMuZm9sbG93UG9pbnRlciAmJiBOKVxuICAgICAgICAgICAgTi5jaGFydFggPT09IHZvaWQgMCAmJiAoTiA9IEkubm9ybWFsaXplKE4pKSwgViA9IFtOLmNoYXJ0WCAtIF8sIE4uY2hhcnRZIC0gVV07XG4gICAgICAgICAgZWxzZSBpZiAoeFswXS50b29sdGlwUG9zKVxuICAgICAgICAgICAgViA9IHhbMF0udG9vbHRpcFBvcztcbiAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGxldCByMSA9IDAsIEsgPSAwO1xuICAgICAgICAgICAgeC5mb3JFYWNoKGZ1bmN0aW9uKFEpIHtcbiAgICAgICAgICAgICAgbGV0IEUgPSBRLnBvcyghMCk7XG4gICAgICAgICAgICAgIEUgJiYgKHIxICs9IEVbMF0sIEsgKz0gRVsxXSk7XG4gICAgICAgICAgICB9KSwgcjEgLz0geC5sZW5ndGgsIEsgLz0geC5sZW5ndGgsIHRoaXMuc2hhcmVkICYmIHgubGVuZ3RoID4gMSAmJiBOICYmIChqID8gcjEgPSBOLmNoYXJ0WCA6IEsgPSBOLmNoYXJ0WSksIFYgPSBbcjEgLSBfLCBLIC0gVV07XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiBWLm1hcChNYXRoLnJvdW5kKTtcbiAgICAgICAgfVxuICAgICAgICBnZXRDbGFzc05hbWUoeCwgTiwgVikge1xuICAgICAgICAgIGxldCBSID0gdGhpcy5vcHRpb25zLCBJID0geC5zZXJpZXMsIGogPSBJLm9wdGlvbnM7XG4gICAgICAgICAgcmV0dXJuIFtSLmNsYXNzTmFtZSwgXCJoaWdoY2hhcnRzLWxhYmVsXCIsIFYgJiYgXCJoaWdoY2hhcnRzLXRvb2x0aXAtaGVhZGVyXCIsIE4gPyBcImhpZ2hjaGFydHMtdG9vbHRpcC1ib3hcIiA6IFwiaGlnaGNoYXJ0cy10b29sdGlwXCIsICFWICYmIFwiaGlnaGNoYXJ0cy1jb2xvci1cIiArIHcoeC5jb2xvckluZGV4LCBJLmNvbG9ySW5kZXgpLCBqICYmIGouY2xhc3NOYW1lXS5maWx0ZXIoRikuam9pbihcIiBcIik7XG4gICAgICAgIH1cbiAgICAgICAgZ2V0TGFiZWwoeyBhbmNob3JYOiB4LCBhbmNob3JZOiBOIH0gPSB7IGFuY2hvclg6IDAsIGFuY2hvclk6IDAgfSkge1xuICAgICAgICAgIGxldCBWID0gdGhpcywgUiA9IHRoaXMuY2hhcnQuc3R5bGVkTW9kZSwgSSA9IHRoaXMub3B0aW9ucywgaiA9IHRoaXMuc3BsaXQgJiYgdGhpcy5hbGxvd1NoYXJlZCwgVSA9IHRoaXMuY29udGFpbmVyLCBfID0gdGhpcy5jaGFydC5yZW5kZXJlcjtcbiAgICAgICAgICBpZiAodGhpcy5sYWJlbCkge1xuICAgICAgICAgICAgbGV0IHIxID0gIXRoaXMubGFiZWwuaGFzQ2xhc3MoXCJoaWdoY2hhcnRzLWxhYmVsXCIpO1xuICAgICAgICAgICAgKCFqICYmIHIxIHx8IGogJiYgIXIxKSAmJiB0aGlzLmRlc3Ryb3koKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKCF0aGlzLmxhYmVsKSB7XG4gICAgICAgICAgICBpZiAodGhpcy5vdXRzaWRlKSB7XG4gICAgICAgICAgICAgIGxldCByMSA9IHRoaXMuY2hhcnQub3B0aW9ucy5jaGFydC5zdHlsZSwgSyA9IGwuZ2V0UmVuZGVyZXJUeXBlKCk7XG4gICAgICAgICAgICAgIHRoaXMuY29udGFpbmVyID0gVSA9IGEuZG9jLmNyZWF0ZUVsZW1lbnQoXCJkaXZcIiksIFUuY2xhc3NOYW1lID0gXCJoaWdoY2hhcnRzLXRvb2x0aXAtY29udGFpbmVyXCIsIGcoVSwgeyBwb3NpdGlvbjogXCJhYnNvbHV0ZVwiLCB0b3A6IFwiMXB4XCIsIHBvaW50ZXJFdmVudHM6IFwibm9uZVwiLCB6SW5kZXg6IE1hdGgubWF4KHRoaXMub3B0aW9ucy5zdHlsZS56SW5kZXggfHwgMCwgKHIxICYmIHIxLnpJbmRleCB8fCAwKSArIDMpIH0pLCB0aGlzLnJlbmRlcmVyID0gXyA9IG5ldyBLKFUsIDAsIDAsIHIxLCB2b2lkIDAsIHZvaWQgMCwgXy5zdHlsZWRNb2RlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChqID8gdGhpcy5sYWJlbCA9IF8uZyhcInRvb2x0aXBcIikgOiAodGhpcy5sYWJlbCA9IF8ubGFiZWwoXCJcIiwgeCwgTiwgSS5zaGFwZSwgdm9pZCAwLCB2b2lkIDAsIEkudXNlSFRNTCwgdm9pZCAwLCBcInRvb2x0aXBcIikuYXR0cih7IHBhZGRpbmc6IEkucGFkZGluZywgcjogSS5ib3JkZXJSYWRpdXMgfSksIFIgfHwgdGhpcy5sYWJlbC5hdHRyKHsgZmlsbDogSS5iYWNrZ3JvdW5kQ29sb3IsIFwic3Ryb2tlLXdpZHRoXCI6IEkuYm9yZGVyV2lkdGggfHwgMCB9KS5jc3MoSS5zdHlsZSkuY3NzKHsgcG9pbnRlckV2ZW50czogSS5zdHlsZS5wb2ludGVyRXZlbnRzIHx8ICh0aGlzLnNob3VsZFN0aWNrT25Db250YWN0KCkgPyBcImF1dG9cIiA6IFwibm9uZVwiKSB9KSksIFYub3V0c2lkZSkge1xuICAgICAgICAgICAgICBsZXQgcjEgPSB0aGlzLmxhYmVsO1xuICAgICAgICAgICAgICBbcjEueFNldHRlciwgcjEueVNldHRlcl0uZm9yRWFjaCgoSywgUSkgPT4ge1xuICAgICAgICAgICAgICAgIHIxW1EgPyBcInlTZXR0ZXJcIiA6IFwieFNldHRlclwiXSA9IChFKSA9PiB7XG4gICAgICAgICAgICAgICAgICBLLmNhbGwocjEsIFYuZGlzdGFuY2UpLCByMVtRID8gXCJ5XCIgOiBcInhcIl0gPSBFLCBVICYmIChVLnN0eWxlW1EgPyBcInRvcFwiIDogXCJsZWZ0XCJdID0gYCR7RX1weGApO1xuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5sYWJlbC5hdHRyKHsgekluZGV4OiA4IH0pLnNoYWRvdyhJLnNoYWRvdykuYWRkKCk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiBVICYmICFVLnBhcmVudEVsZW1lbnQgJiYgYS5kb2MuYm9keS5hcHBlbmRDaGlsZChVKSwgdGhpcy5sYWJlbDtcbiAgICAgICAgfVxuICAgICAgICBnZXRQbGF5aW5nRmllbGQoKSB7XG4gICAgICAgICAgbGV0IHsgYm9keTogeCwgZG9jdW1lbnRFbGVtZW50OiBOIH0gPSBBLCB7IGNoYXJ0OiBWLCBkaXN0YW5jZTogUiwgb3V0c2lkZTogSSB9ID0gdGhpcztcbiAgICAgICAgICByZXR1cm4geyB3aWR0aDogSSA/IE1hdGgubWF4KHguc2Nyb2xsV2lkdGgsIE4uc2Nyb2xsV2lkdGgsIHgub2Zmc2V0V2lkdGgsIE4ub2Zmc2V0V2lkdGgsIE4uY2xpZW50V2lkdGgpIC0gMiAqIFIgOiBWLmNoYXJ0V2lkdGgsIGhlaWdodDogSSA/IE1hdGgubWF4KHguc2Nyb2xsSGVpZ2h0LCBOLnNjcm9sbEhlaWdodCwgeC5vZmZzZXRIZWlnaHQsIE4ub2Zmc2V0SGVpZ2h0LCBOLmNsaWVudEhlaWdodCkgOiBWLmNoYXJ0SGVpZ2h0IH07XG4gICAgICAgIH1cbiAgICAgICAgZ2V0UG9zaXRpb24oeCwgTiwgVikge1xuICAgICAgICAgIHZhciBNMSwgQTE7XG4gICAgICAgICAgbGV0IHsgZGlzdGFuY2U6IFIsIGNoYXJ0OiBJLCBvdXRzaWRlOiBqLCBwb2ludGVyOiBVIH0gPSB0aGlzLCB7IGludmVydGVkOiBfLCBwbG90TGVmdDogcjEsIHBsb3RUb3A6IEssIHBvbGFyOiBRIH0gPSBJLCB7IHBsb3RYOiBFID0gMCwgcGxvdFk6IEQgPSAwIH0gPSBWLCBHID0ge30sIEogPSBfICYmIFYuaCB8fCAwLCB7IGhlaWdodDogUywgd2lkdGg6IFcgfSA9IHRoaXMuZ2V0UGxheWluZ0ZpZWxkKCksIFAgPSBVLmdldENoYXJ0UG9zaXRpb24oKSwgWSA9ICh1MSkgPT4gdTEgKiBQLnNjYWxlWCwgWiA9ICh1MSkgPT4gdTEgKiBQLnNjYWxlWSwgdDEgPSAodTEpID0+IHtcbiAgICAgICAgICAgIGxldCBoMSA9IHUxID09PSBcInhcIjtcbiAgICAgICAgICAgIHJldHVybiBbdTEsIGgxID8gVyA6IFMsIGgxID8geCA6IE5dLmNvbmNhdChqID8gW2gxID8gWSh4KSA6IFooTiksIGgxID8gUC5sZWZ0IC0gUiArIFkoRSArIHIxKSA6IFAudG9wIC0gUiArIFooRCArIEspLCAwLCBoMSA/IFcgOiBTXSA6IFtoMSA/IHggOiBOLCBoMSA/IEUgKyByMSA6IEQgKyBLLCBoMSA/IHIxIDogSywgaDEgPyByMSArIEkucGxvdFdpZHRoIDogSyArIEkucGxvdEhlaWdodF0pO1xuICAgICAgICAgIH0sIGkxID0gdDEoXCJ5XCIpLCBuMSA9IHQxKFwieFwiKSwgczEsIGQxID0gISFWLm5lZ2F0aXZlO1xuICAgICAgICAgICFRICYmICgoQTEgPSAoTTEgPSBJLmhvdmVyU2VyaWVzKSA9PSBudWxsID8gdm9pZCAwIDogTTEueUF4aXMpICE9IG51bGwgJiYgQTEucmV2ZXJzZWQpICYmIChkMSA9ICFkMSk7XG4gICAgICAgICAgbGV0IGIxID0gIXRoaXMuZm9sbG93UG9pbnRlciAmJiB3KFYudHRCZWxvdywgIVEgJiYgIV8gPT09IGQxKSwgYzEgPSBmdW5jdGlvbih1MSwgaDEsIEMxLCBxMSwgVzEsIFIxLCBrMSkge1xuICAgICAgICAgICAgbGV0IE4xID0gaiA/IHUxID09PSBcInlcIiA/IFooUikgOiBZKFIpIDogUiwgdjEgPSAoQzEgLSBxMSkgLyAyLCBTMSA9IHExIDwgVzEgLSBSLCBEMSA9IFcxICsgUiArIHExIDwgaDEsIEYxID0gVzEgLSBOMSAtIEMxICsgdjEsIFUxID0gVzEgKyBOMSAtIHYxO1xuICAgICAgICAgICAgaWYgKGIxICYmIEQxKVxuICAgICAgICAgICAgICBHW3UxXSA9IFUxO1xuICAgICAgICAgICAgZWxzZSBpZiAoIWIxICYmIFMxKVxuICAgICAgICAgICAgICBHW3UxXSA9IEYxO1xuICAgICAgICAgICAgZWxzZSBpZiAoUzEpXG4gICAgICAgICAgICAgIEdbdTFdID0gTWF0aC5taW4oazEgLSBxMSwgRjEgLSBKIDwgMCA/IEYxIDogRjEgLSBKKTtcbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICBpZiAoIUQxKVxuICAgICAgICAgICAgICAgIHJldHVybiAhMTtcbiAgICAgICAgICAgICAgR1t1MV0gPSBNYXRoLm1heChSMSwgVTEgKyBKICsgQzEgPiBoMSA/IFUxIDogVTEgKyBKKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9LCBhMSA9IGZ1bmN0aW9uKHUxLCBoMSwgQzEsIHExLCBXMSkge1xuICAgICAgICAgICAgaWYgKFcxIDwgUiB8fCBXMSA+IGgxIC0gUilcbiAgICAgICAgICAgICAgcmV0dXJuICExO1xuICAgICAgICAgICAgVzEgPCBDMSAvIDIgPyBHW3UxXSA9IDEgOiBXMSA+IGgxIC0gcTEgLyAyID8gR1t1MV0gPSBoMSAtIHExIC0gMiA6IEdbdTFdID0gVzEgLSBDMSAvIDI7XG4gICAgICAgICAgfSwgbDEgPSBmdW5jdGlvbih1MSkge1xuICAgICAgICAgICAgW2kxLCBuMV0gPSBbbjEsIGkxXSwgczEgPSB1MTtcbiAgICAgICAgICB9LCBwMSA9ICgpID0+IHtcbiAgICAgICAgICAgIGMxLmFwcGx5KDAsIGkxKSAhPT0gITEgPyBhMS5hcHBseSgwLCBuMSkgIT09ICExIHx8IHMxIHx8IChsMSghMCksIHAxKCkpIDogczEgPyBHLnggPSBHLnkgPSAwIDogKGwxKCEwKSwgcDEoKSk7XG4gICAgICAgICAgfTtcbiAgICAgICAgICByZXR1cm4gKF8gJiYgIVEgfHwgdGhpcy5sZW4gPiAxKSAmJiBsMSgpLCBwMSgpLCBHO1xuICAgICAgICB9XG4gICAgICAgIGhpZGUoeCkge1xuICAgICAgICAgIGxldCBOID0gdGhpcztcbiAgICAgICAgICBwLmNsZWFyVGltZW91dCh0aGlzLmhpZGVUaW1lciksIHggPSB3KHgsIHRoaXMub3B0aW9ucy5oaWRlRGVsYXkpLCB0aGlzLmlzSGlkZGVuIHx8ICh0aGlzLmhpZGVUaW1lciA9IHEoZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICBsZXQgViA9IE4uZ2V0TGFiZWwoKTtcbiAgICAgICAgICAgIE4uZ2V0TGFiZWwoKS5hbmltYXRlKHsgb3BhY2l0eTogMCB9LCB7IGR1cmF0aW9uOiB4ICYmIDE1MCwgY29tcGxldGU6ICgpID0+IHtcbiAgICAgICAgICAgICAgVi5oaWRlKCksIE4uY29udGFpbmVyICYmIE4uY29udGFpbmVyLnJlbW92ZSgpO1xuICAgICAgICAgICAgfSB9KSwgTi5pc0hpZGRlbiA9ICEwO1xuICAgICAgICAgIH0sIHgpKTtcbiAgICAgICAgfVxuICAgICAgICBpbml0KHgsIE4pIHtcbiAgICAgICAgICB0aGlzLmNoYXJ0ID0geCwgdGhpcy5vcHRpb25zID0gTiwgdGhpcy5jcm9zc2hhaXJzID0gW10sIHRoaXMuaXNIaWRkZW4gPSAhMCwgdGhpcy5zcGxpdCA9IE4uc3BsaXQgJiYgIXguaW52ZXJ0ZWQgJiYgIXgucG9sYXIsIHRoaXMuc2hhcmVkID0gTi5zaGFyZWQgfHwgdGhpcy5zcGxpdCwgdGhpcy5vdXRzaWRlID0gdyhOLm91dHNpZGUsICEhKHguc2Nyb2xsYWJsZVBpeGVsc1ggfHwgeC5zY3JvbGxhYmxlUGl4ZWxzWSkpO1xuICAgICAgICB9XG4gICAgICAgIHNob3VsZFN0aWNrT25Db250YWN0KHgpIHtcbiAgICAgICAgICByZXR1cm4gISEoIXRoaXMuZm9sbG93UG9pbnRlciAmJiB0aGlzLm9wdGlvbnMuc3RpY2tPbkNvbnRhY3QgJiYgKCF4IHx8IHRoaXMucG9pbnRlci5pbkNsYXNzKHgudGFyZ2V0LCBcImhpZ2hjaGFydHMtdG9vbHRpcFwiKSkpO1xuICAgICAgICB9XG4gICAgICAgIG1vdmUoeCwgTiwgViwgUikge1xuICAgICAgICAgIGxldCBJID0gdGhpcywgaiA9IGIoIUkuaXNIaWRkZW4gJiYgSS5vcHRpb25zLmFuaW1hdGlvbiksIFUgPSBJLmZvbGxvd1BvaW50ZXIgfHwgKEkubGVuIHx8IDApID4gMSwgXyA9IHsgeCwgeTogTiB9O1xuICAgICAgICAgIFUgfHwgKF8uYW5jaG9yWCA9IFYsIF8uYW5jaG9yWSA9IFIpLCBqLnN0ZXAgPSAoKSA9PiBJLmRyYXdUcmFja2VyKCksIEkuZ2V0TGFiZWwoKS5hbmltYXRlKF8sIGopO1xuICAgICAgICB9XG4gICAgICAgIHJlZnJlc2goeCwgTikge1xuICAgICAgICAgIGxldCB7IGNoYXJ0OiBWLCBvcHRpb25zOiBSLCBwb2ludGVyOiBJLCBzaGFyZWQ6IGogfSA9IHRoaXMsIFUgPSBDKHgpLCBfID0gVVswXSwgcjEgPSBbXSwgSyA9IFIuZm9ybWF0LCBRID0gUi5mb3JtYXR0ZXIgfHwgdGhpcy5kZWZhdWx0Rm9ybWF0dGVyLCBFID0gVi5zdHlsZWRNb2RlLCBEID0ge30sIEcgPSB0aGlzLmFsbG93U2hhcmVkO1xuICAgICAgICAgIGlmICghUi5lbmFibGVkIHx8ICFfLnNlcmllcylcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICBwLmNsZWFyVGltZW91dCh0aGlzLmhpZGVUaW1lciksIHRoaXMuYWxsb3dTaGFyZWQgPSAhKCFCKHgpICYmIHguc2VyaWVzICYmIHguc2VyaWVzLm5vU2hhcmVkVG9vbHRpcCksIEcgPSBHICYmICF0aGlzLmFsbG93U2hhcmVkLCB0aGlzLmZvbGxvd1BvaW50ZXIgPSAhdGhpcy5zcGxpdCAmJiBfLnNlcmllcy50b29sdGlwT3B0aW9ucy5mb2xsb3dQb2ludGVyO1xuICAgICAgICAgIGxldCBKID0gdGhpcy5nZXRBbmNob3IoeCwgTiksIFMgPSBKWzBdLCBXID0gSlsxXTtcbiAgICAgICAgICBqICYmIHRoaXMuYWxsb3dTaGFyZWQgPyAoSS5hcHBseUluYWN0aXZlU3RhdGUoVSksIFUuZm9yRWFjaChmdW5jdGlvbihaKSB7XG4gICAgICAgICAgICBaLnNldFN0YXRlKFwiaG92ZXJcIiksIHIxLnB1c2goWi5nZXRMYWJlbENvbmZpZygpKTtcbiAgICAgICAgICB9KSwgKEQgPSBfLmdldExhYmVsQ29uZmlnKCkpLnBvaW50cyA9IHIxKSA6IEQgPSBfLmdldExhYmVsQ29uZmlnKCksIHRoaXMubGVuID0gcjEubGVuZ3RoO1xuICAgICAgICAgIGxldCBQID0gRihLKSA/IE0oSywgRCwgVikgOiBRLmNhbGwoRCwgdGhpcyksIFkgPSBfLnNlcmllcztcbiAgICAgICAgICBpZiAodGhpcy5kaXN0YW5jZSA9IHcoWS50b29sdGlwT3B0aW9ucy5kaXN0YW5jZSwgMTYpLCBQID09PSAhMSlcbiAgICAgICAgICAgIHRoaXMuaGlkZSgpO1xuICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgaWYgKHRoaXMuc3BsaXQgJiYgdGhpcy5hbGxvd1NoYXJlZClcbiAgICAgICAgICAgICAgdGhpcy5yZW5kZXJTcGxpdChQLCBVKTtcbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICBsZXQgWiA9IFMsIHQxID0gVztcbiAgICAgICAgICAgICAgaWYgKE4gJiYgSS5pc0RpcmVjdFRvdWNoICYmIChaID0gTi5jaGFydFggLSBWLnBsb3RMZWZ0LCB0MSA9IE4uY2hhcnRZIC0gVi5wbG90VG9wKSwgVi5wb2xhciB8fCBZLm9wdGlvbnMuY2xpcCA9PT0gITEgfHwgVS5zb21lKChpMSkgPT4gSS5pc0RpcmVjdFRvdWNoIHx8IGkxLnNlcmllcy5zaG91bGRTaG93VG9vbHRpcChaLCB0MSkpKSB7XG4gICAgICAgICAgICAgICAgbGV0IGkxID0gdGhpcy5nZXRMYWJlbChHICYmIHRoaXMudHQgfHwge30pO1xuICAgICAgICAgICAgICAgICghUi5zdHlsZS53aWR0aCB8fCBFKSAmJiBpMS5jc3MoeyB3aWR0aDogKHRoaXMub3V0c2lkZSA/IHRoaXMuZ2V0UGxheWluZ0ZpZWxkKCkgOiBWLnNwYWNpbmdCb3gpLndpZHRoICsgXCJweFwiIH0pLCBpMS5hdHRyKHsgY2xhc3M6IHRoaXMuZ2V0Q2xhc3NOYW1lKF8pLCB0ZXh0OiBQICYmIFAuam9pbiA/IFAuam9pbihcIlwiKSA6IFAgfSksIHRoaXMub3V0c2lkZSAmJiBpMS5hdHRyKHsgeDogaChpMS54IHx8IDAsIDAsIHRoaXMuZ2V0UGxheWluZ0ZpZWxkKCkud2lkdGggLSAoaTEud2lkdGggfHwgMCkpIH0pLCBFIHx8IGkxLmF0dHIoeyBzdHJva2U6IFIuYm9yZGVyQ29sb3IgfHwgXy5jb2xvciB8fCBZLmNvbG9yIHx8IFwiIzY2NjY2NlwiIH0pLCB0aGlzLnVwZGF0ZVBvc2l0aW9uKHsgcGxvdFg6IFMsIHBsb3RZOiBXLCBuZWdhdGl2ZTogXy5uZWdhdGl2ZSwgdHRCZWxvdzogXy50dEJlbG93LCBoOiBKWzJdIHx8IDAgfSk7XG4gICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhpcy5oaWRlKCk7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLmlzSGlkZGVuICYmIHRoaXMubGFiZWwgJiYgdGhpcy5sYWJlbC5hdHRyKHsgb3BhY2l0eTogMSB9KS5zaG93KCksIHRoaXMuaXNIaWRkZW4gPSAhMTtcbiAgICAgICAgICB9XG4gICAgICAgICAgeSh0aGlzLCBcInJlZnJlc2hcIik7XG4gICAgICAgIH1cbiAgICAgICAgcmVuZGVyU3BsaXQoeCwgTikge1xuICAgICAgICAgIHZhciBoMTtcbiAgICAgICAgICBsZXQgViA9IHRoaXMsIHsgY2hhcnQ6IFIsIGNoYXJ0OiB7IGNoYXJ0V2lkdGg6IEksIGNoYXJ0SGVpZ2h0OiBqLCBwbG90SGVpZ2h0OiBVLCBwbG90TGVmdDogXywgcGxvdFRvcDogcjEsIHNjcm9sbGFibGVQaXhlbHNZOiBLID0gMCwgc2Nyb2xsYWJsZVBpeGVsc1g6IFEsIHN0eWxlZE1vZGU6IEUgfSwgZGlzdGFuY2U6IEQsIG9wdGlvbnM6IEcsIG9wdGlvbnM6IHsgcG9zaXRpb25lcjogSiB9LCBwb2ludGVyOiBTIH0gPSBWLCB7IHNjcm9sbExlZnQ6IFcgPSAwLCBzY3JvbGxUb3A6IFAgPSAwIH0gPSAoKGgxID0gUi5zY3JvbGxhYmxlUGxvdEFyZWEpID09IG51bGwgPyB2b2lkIDAgOiBoMS5zY3JvbGxpbmdDb250YWluZXIpIHx8IHt9LCBZID0gVi5vdXRzaWRlICYmIHR5cGVvZiBRICE9IFwibnVtYmVyXCIgPyBBLmRvY3VtZW50RWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSA6IHsgbGVmdDogVywgcmlnaHQ6IFcgKyBJLCB0b3A6IFAsIGJvdHRvbTogUCArIGogfSwgWiA9IFYuZ2V0TGFiZWwoKSwgdDEgPSB0aGlzLnJlbmRlcmVyIHx8IFIucmVuZGVyZXIsIGkxID0gISEoUi54QXhpc1swXSAmJiBSLnhBeGlzWzBdLm9wcG9zaXRlKSwgeyBsZWZ0OiBuMSwgdG9wOiBzMSB9ID0gUy5nZXRDaGFydFBvc2l0aW9uKCksIGQxID0gcjEgKyBQLCBiMSA9IDAsIGMxID0gVSAtIEs7XG4gICAgICAgICAgZnVuY3Rpb24gYTEoQzEsIHExLCBXMSwgUjEsIGsxID0gITApIHtcbiAgICAgICAgICAgIGxldCBOMSwgdjE7XG4gICAgICAgICAgICByZXR1cm4gVzEgPyAoTjEgPSBpMSA/IDAgOiBjMSwgdjEgPSBoKEMxIC0gUjEgLyAyLCBZLmxlZnQsIFkucmlnaHQgLSBSMSAtIChWLm91dHNpZGUgPyBuMSA6IDApKSkgOiAoTjEgPSBxMSAtIGQxLCB2MSA9IGgodjEgPSBrMSA/IEMxIC0gUjEgLSBEIDogQzEgKyBELCBrMSA/IHYxIDogWS5sZWZ0LCBZLnJpZ2h0KSksIHsgeDogdjEsIHk6IE4xIH07XG4gICAgICAgICAgfVxuICAgICAgICAgIEYoeCkgJiYgKHggPSBbITEsIHhdKTtcbiAgICAgICAgICBsZXQgbDEgPSB4LnNsaWNlKDAsIE4ubGVuZ3RoICsgMSkucmVkdWNlKGZ1bmN0aW9uKEMxLCBxMSwgVzEpIHtcbiAgICAgICAgICAgIGlmIChxMSAhPT0gITEgJiYgcTEgIT09IFwiXCIpIHtcbiAgICAgICAgICAgICAgbGV0IFIxID0gTltXMSAtIDFdIHx8IHsgaXNIZWFkZXI6ICEwLCBwbG90WDogTlswXS5wbG90WCwgcGxvdFk6IFUsIHNlcmllczoge30gfSwgazEgPSBSMS5pc0hlYWRlciwgTjEgPSBrMSA/IFYgOiBSMS5zZXJpZXMsIHYxID0gTjEudHQgPSBmdW5jdGlvbihoMCwgTzAsIHcxKSB7XG4gICAgICAgICAgICAgICAgbGV0IGcxID0gaDAsIHsgaXNIZWFkZXI6IEUxLCBzZXJpZXM6IEIxIH0gPSBPMDtcbiAgICAgICAgICAgICAgICBpZiAoIWcxKSB7XG4gICAgICAgICAgICAgICAgICBsZXQgSzEgPSB7IHBhZGRpbmc6IEcucGFkZGluZywgcjogRy5ib3JkZXJSYWRpdXMgfTtcbiAgICAgICAgICAgICAgICAgIEUgfHwgKEsxLmZpbGwgPSBHLmJhY2tncm91bmRDb2xvciwgSzFbXCJzdHJva2Utd2lkdGhcIl0gPSBHLmJvcmRlcldpZHRoID8/IDEpLCBnMSA9IHQxLmxhYmVsKFwiXCIsIDAsIDAsIEdbRTEgPyBcImhlYWRlclNoYXBlXCIgOiBcInNoYXBlXCJdLCB2b2lkIDAsIHZvaWQgMCwgRy51c2VIVE1MKS5hZGRDbGFzcyhWLmdldENsYXNzTmFtZShPMCwgITAsIEUxKSkuYXR0cihLMSkuYWRkKFopO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gZzEuaXNBY3RpdmUgPSAhMCwgZzEuYXR0cih7IHRleHQ6IHcxIH0pLCBFIHx8IGcxLmNzcyhHLnN0eWxlKS5hdHRyKHsgc3Ryb2tlOiBHLmJvcmRlckNvbG9yIHx8IE8wLmNvbG9yIHx8IEIxLmNvbG9yIHx8IFwiIzMzMzMzM1wiIH0pLCBnMTtcbiAgICAgICAgICAgICAgfShOMS50dCwgUjEsIHExLnRvU3RyaW5nKCkpLCBTMSA9IHYxLmdldEJCb3goKSwgRDEgPSBTMS53aWR0aCArIHYxLnN0cm9rZVdpZHRoKCk7XG4gICAgICAgICAgICAgIGsxICYmIChiMSA9IFMxLmhlaWdodCwgYzEgKz0gYjEsIGkxICYmIChkMSAtPSBiMSkpO1xuICAgICAgICAgICAgICBsZXQgeyBhbmNob3JYOiBGMSwgYW5jaG9yWTogVTEgfSA9IGZ1bmN0aW9uKGgwKSB7XG4gICAgICAgICAgICAgICAgbGV0IE8wLCB3MSwgeyBpc0hlYWRlcjogZzEsIHBsb3RYOiBFMSA9IDAsIHBsb3RZOiBCMSA9IDAsIHNlcmllczogSzEgfSA9IGgwO1xuICAgICAgICAgICAgICAgIGlmIChnMSlcbiAgICAgICAgICAgICAgICAgIE8wID0gTWF0aC5tYXgoXyArIEUxLCBfKSwgdzEgPSByMSArIFUgLyAyO1xuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgbGV0IHsgeEF4aXM6IHAwLCB5QXhpczogZTAgfSA9IEsxO1xuICAgICAgICAgICAgICAgICAgTzAgPSBwMC5wb3MgKyBoKEUxLCAtRCwgcDAubGVuICsgRCksIEsxLnNob3VsZFNob3dUb29sdGlwKDAsIGUwLnBvcyAtIHIxICsgQjEsIHsgaWdub3JlWDogITAgfSkgJiYgKHcxID0gZTAucG9zICsgQjEpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4geyBhbmNob3JYOiBPMCA9IGgoTzAsIFkubGVmdCAtIEQsIFkucmlnaHQgKyBEKSwgYW5jaG9yWTogdzEgfTtcbiAgICAgICAgICAgICAgfShSMSk7XG4gICAgICAgICAgICAgIGlmICh0eXBlb2YgVTEgPT0gXCJudW1iZXJcIikge1xuICAgICAgICAgICAgICAgIGxldCBoMCA9IFMxLmhlaWdodCArIDEsIE8wID0gSiA/IEouY2FsbChWLCBEMSwgaDAsIFIxKSA6IGExKEYxLCBVMSwgazEsIEQxKTtcbiAgICAgICAgICAgICAgICBDMS5wdXNoKHsgYWxpZ246IEogPyAwIDogdm9pZCAwLCBhbmNob3JYOiBGMSwgYW5jaG9yWTogVTEsIGJveFdpZHRoOiBEMSwgcG9pbnQ6IFIxLCByYW5rOiB3KE8wLnJhbmssIGsxID8gMSA6IDApLCBzaXplOiBoMCwgdGFyZ2V0OiBPMC55LCB0dDogdjEsIHg6IE8wLnggfSk7XG4gICAgICAgICAgICAgIH0gZWxzZVxuICAgICAgICAgICAgICAgIHYxLmlzQWN0aXZlID0gITE7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gQzE7XG4gICAgICAgICAgfSwgW10pO1xuICAgICAgICAgICFKICYmIGwxLnNvbWUoKEMxKSA9PiB7XG4gICAgICAgICAgICBsZXQgeyBvdXRzaWRlOiBxMSB9ID0gViwgVzEgPSAocTEgPyBuMSA6IDApICsgQzEuYW5jaG9yWDtcbiAgICAgICAgICAgIHJldHVybiBXMSA8IFkubGVmdCAmJiBXMSArIEMxLmJveFdpZHRoIDwgWS5yaWdodCB8fCBXMSA8IG4xIC0gWS5sZWZ0ICsgQzEuYm94V2lkdGggJiYgWS5yaWdodCAtIFcxID4gVzE7XG4gICAgICAgICAgfSkgJiYgKGwxID0gbDEubWFwKChDMSkgPT4ge1xuICAgICAgICAgICAgbGV0IHsgeDogcTEsIHk6IFcxIH0gPSBhMShDMS5hbmNob3JYLCBDMS5hbmNob3JZLCBDMS5wb2ludC5pc0hlYWRlciwgQzEuYm94V2lkdGgsICExKTtcbiAgICAgICAgICAgIHJldHVybiBMKEMxLCB7IHRhcmdldDogVzEsIHg6IHExIH0pO1xuICAgICAgICAgIH0pKSwgVi5jbGVhblNwbGl0KCksIGYobDEsIGMxKTtcbiAgICAgICAgICBsZXQgcDEgPSB7IGxlZnQ6IG4xLCByaWdodDogbjEgfTtcbiAgICAgICAgICBsMS5mb3JFYWNoKGZ1bmN0aW9uKEMxKSB7XG4gICAgICAgICAgICBsZXQgeyB4OiBxMSwgYm94V2lkdGg6IFcxLCBpc0hlYWRlcjogUjEgfSA9IEMxO1xuICAgICAgICAgICAgIVIxICYmIChWLm91dHNpZGUgJiYgbjEgKyBxMSA8IHAxLmxlZnQgJiYgKHAxLmxlZnQgPSBuMSArIHExKSwgIVIxICYmIFYub3V0c2lkZSAmJiBwMS5sZWZ0ICsgVzEgPiBwMS5yaWdodCAmJiAocDEucmlnaHQgPSBuMSArIHExKSk7XG4gICAgICAgICAgfSksIGwxLmZvckVhY2goZnVuY3Rpb24oQzEpIHtcbiAgICAgICAgICAgIGxldCB7IHg6IHExLCBhbmNob3JYOiBXMSwgYW5jaG9yWTogUjEsIHBvczogazEsIHBvaW50OiB7IGlzSGVhZGVyOiBOMSB9IH0gPSBDMSwgdjEgPSB7IHZpc2liaWxpdHk6IGsxID09PSB2b2lkIDAgPyBcImhpZGRlblwiIDogXCJpbmhlcml0XCIsIHg6IHExLCB5OiAoazEgfHwgMCkgKyBkMSwgYW5jaG9yWDogVzEsIGFuY2hvclk6IFIxIH07XG4gICAgICAgICAgICBpZiAoVi5vdXRzaWRlICYmIHExIDwgVzEpIHtcbiAgICAgICAgICAgICAgbGV0IFMxID0gbjEgLSBwMS5sZWZ0O1xuICAgICAgICAgICAgICBTMSA+IDAgJiYgKE4xIHx8ICh2MS54ID0gcTEgKyBTMSwgdjEuYW5jaG9yWCA9IFcxICsgUzEpLCBOMSAmJiAodjEueCA9IChwMS5yaWdodCAtIHAxLmxlZnQpIC8gMiwgdjEuYW5jaG9yWCA9IFcxICsgUzEpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIEMxLnR0LmF0dHIodjEpO1xuICAgICAgICAgIH0pO1xuICAgICAgICAgIGxldCB7IGNvbnRhaW5lcjogTTEsIG91dHNpZGU6IEExLCByZW5kZXJlcjogdTEgfSA9IFY7XG4gICAgICAgICAgaWYgKEExICYmIE0xICYmIHUxKSB7XG4gICAgICAgICAgICBsZXQgeyB3aWR0aDogQzEsIGhlaWdodDogcTEsIHg6IFcxLCB5OiBSMSB9ID0gWi5nZXRCQm94KCk7XG4gICAgICAgICAgICB1MS5zZXRTaXplKEMxICsgVzEsIHExICsgUjEsICExKSwgTTEuc3R5bGUubGVmdCA9IHAxLmxlZnQgKyBcInB4XCIsIE0xLnN0eWxlLnRvcCA9IHMxICsgXCJweFwiO1xuICAgICAgICAgIH1cbiAgICAgICAgICB6ICYmIFouYXR0cih7IG9wYWNpdHk6IFoub3BhY2l0eSA9PT0gMSA/IDAuOTk5IDogMSB9KTtcbiAgICAgICAgfVxuICAgICAgICBkcmF3VHJhY2tlcigpIHtcbiAgICAgICAgICBpZiAoIXRoaXMuc2hvdWxkU3RpY2tPbkNvbnRhY3QoKSkge1xuICAgICAgICAgICAgdGhpcy50cmFja2VyICYmICh0aGlzLnRyYWNrZXIgPSB0aGlzLnRyYWNrZXIuZGVzdHJveSgpKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICB9XG4gICAgICAgICAgbGV0IHggPSB0aGlzLmNoYXJ0LCBOID0gdGhpcy5sYWJlbCwgViA9IHRoaXMuc2hhcmVkID8geC5ob3ZlclBvaW50cyA6IHguaG92ZXJQb2ludDtcbiAgICAgICAgICBpZiAoIU4gfHwgIVYpXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgbGV0IFIgPSB7IHg6IDAsIHk6IDAsIHdpZHRoOiAwLCBoZWlnaHQ6IDAgfSwgSSA9IHRoaXMuZ2V0QW5jaG9yKFYpLCBqID0gTi5nZXRCQm94KCk7XG4gICAgICAgICAgSVswXSArPSB4LnBsb3RMZWZ0IC0gKE4udHJhbnNsYXRlWCB8fCAwKSwgSVsxXSArPSB4LnBsb3RUb3AgLSAoTi50cmFuc2xhdGVZIHx8IDApLCBSLnggPSBNYXRoLm1pbigwLCBJWzBdKSwgUi55ID0gTWF0aC5taW4oMCwgSVsxXSksIFIud2lkdGggPSBJWzBdIDwgMCA/IE1hdGgubWF4KE1hdGguYWJzKElbMF0pLCBqLndpZHRoIC0gSVswXSkgOiBNYXRoLm1heChNYXRoLmFicyhJWzBdKSwgai53aWR0aCksIFIuaGVpZ2h0ID0gSVsxXSA8IDAgPyBNYXRoLm1heChNYXRoLmFicyhJWzFdKSwgai5oZWlnaHQgLSBNYXRoLmFicyhJWzFdKSkgOiBNYXRoLm1heChNYXRoLmFicyhJWzFdKSwgai5oZWlnaHQpLCB0aGlzLnRyYWNrZXIgPyB0aGlzLnRyYWNrZXIuYXR0cihSKSA6ICh0aGlzLnRyYWNrZXIgPSBOLnJlbmRlcmVyLnJlY3QoUikuYWRkQ2xhc3MoXCJoaWdoY2hhcnRzLXRyYWNrZXJcIikuYWRkKE4pLCB4LnN0eWxlZE1vZGUgfHwgdGhpcy50cmFja2VyLmF0dHIoeyBmaWxsOiBcInJnYmEoMCwwLDAsMClcIiB9KSk7XG4gICAgICAgIH1cbiAgICAgICAgc3R5bGVkTW9kZUZvcm1hdCh4KSB7XG4gICAgICAgICAgcmV0dXJuIHgucmVwbGFjZSgnc3R5bGU9XCJmb250LXNpemU6IDAuOGVtXCInLCAnY2xhc3M9XCJoaWdoY2hhcnRzLWhlYWRlclwiJykucmVwbGFjZSgvc3R5bGU9XCJjb2xvcjp7KHBvaW50fHNlcmllcylcXC5jb2xvcn1cIi9nLCAnY2xhc3M9XCJoaWdoY2hhcnRzLWNvbG9yLXskMS5jb2xvckluZGV4fSB7c2VyaWVzLm9wdGlvbnMuY2xhc3NOYW1lfSB7cG9pbnQub3B0aW9ucy5jbGFzc05hbWV9XCInKTtcbiAgICAgICAgfVxuICAgICAgICB0b29sdGlwRm9vdGVySGVhZGVyRm9ybWF0dGVyKHgsIE4pIHtcbiAgICAgICAgICBsZXQgViA9IHguc2VyaWVzLCBSID0gVi50b29sdGlwT3B0aW9ucywgSSA9IFYueEF4aXMsIGogPSBJICYmIEkuZGF0ZVRpbWUsIFUgPSB7IGlzRm9vdGVyOiBOLCBsYWJlbENvbmZpZzogeCB9LCBfID0gUi54RGF0ZUZvcm1hdCwgcjEgPSBSW04gPyBcImZvb3RlckZvcm1hdFwiIDogXCJoZWFkZXJGb3JtYXRcIl07XG4gICAgICAgICAgcmV0dXJuIHkodGhpcywgXCJoZWFkZXJGb3JtYXR0ZXJcIiwgVSwgZnVuY3Rpb24oSykge1xuICAgICAgICAgICAgaiAmJiAhXyAmJiBYKHgua2V5KSAmJiAoXyA9IGouZ2V0WERhdGVGb3JtYXQoeC5rZXksIFIuZGF0ZVRpbWVMYWJlbEZvcm1hdHMpKSwgaiAmJiBfICYmICh4LnBvaW50ICYmIHgucG9pbnQudG9vbHRpcERhdGVLZXlzIHx8IFtcImtleVwiXSkuZm9yRWFjaChmdW5jdGlvbihRKSB7XG4gICAgICAgICAgICAgIHIxID0gcjEucmVwbGFjZShcIntwb2ludC5cIiArIFEgKyBcIn1cIiwgXCJ7cG9pbnQuXCIgKyBRICsgXCI6XCIgKyBfICsgXCJ9XCIpO1xuICAgICAgICAgICAgfSksIFYuY2hhcnQuc3R5bGVkTW9kZSAmJiAocjEgPSB0aGlzLnN0eWxlZE1vZGVGb3JtYXQocjEpKSwgSy50ZXh0ID0gTShyMSwgeyBwb2ludDogeCwgc2VyaWVzOiBWIH0sIHRoaXMuY2hhcnQpO1xuICAgICAgICAgIH0pLCBVLnRleHQ7XG4gICAgICAgIH1cbiAgICAgICAgdXBkYXRlKHgpIHtcbiAgICAgICAgICB0aGlzLmRlc3Ryb3koKSwgdGhpcy5pbml0KHRoaXMuY2hhcnQsIFQoITAsIHRoaXMub3B0aW9ucywgeCkpO1xuICAgICAgICB9XG4gICAgICAgIHVwZGF0ZVBvc2l0aW9uKHgpIHtcbiAgICAgICAgICBsZXQgeyBjaGFydDogTiwgY29udGFpbmVyOiBWLCBkaXN0YW5jZTogUiwgb3B0aW9uczogSSwgcG9pbnRlcjogaiwgcmVuZGVyZXI6IFUgfSA9IHRoaXMsIHsgaGVpZ2h0OiBfID0gMCwgd2lkdGg6IHIxID0gMCB9ID0gdGhpcy5nZXRMYWJlbCgpLCB7IGxlZnQ6IEssIHRvcDogUSwgc2NhbGVYOiBFLCBzY2FsZVk6IEQgfSA9IGouZ2V0Q2hhcnRQb3NpdGlvbigpLCBHID0gKEkucG9zaXRpb25lciB8fCB0aGlzLmdldFBvc2l0aW9uKS5jYWxsKHRoaXMsIHIxLCBfLCB4KSwgSiA9ICh4LnBsb3RYIHx8IDApICsgTi5wbG90TGVmdCwgUyA9ICh4LnBsb3RZIHx8IDApICsgTi5wbG90VG9wLCBXO1xuICAgICAgICAgIFUgJiYgViAmJiAoSS5wb3NpdGlvbmVyICYmIChHLnggKz0gSyAtIFIsIEcueSArPSBRIC0gUiksIFcgPSAoSS5ib3JkZXJXaWR0aCB8fCAwKSArIDIgKiBSICsgMiwgVS5zZXRTaXplKHIxICsgVywgXyArIFcsICExKSwgKEUgIT09IDEgfHwgRCAhPT0gMSkgJiYgKGcoViwgeyB0cmFuc2Zvcm06IGBzY2FsZSgke0V9LCAke0R9KWAgfSksIEogKj0gRSwgUyAqPSBEKSwgSiArPSBLIC0gRy54LCBTICs9IFEgLSBHLnkpLCB0aGlzLm1vdmUoTWF0aC5yb3VuZChHLngpLCBNYXRoLnJvdW5kKEcueSB8fCAwKSwgSiwgUyk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiAoZCA9IG0gfHwgKG0gPSB7fSkpLmNvbXBvc2UgPSBmdW5jdGlvbihrKSB7XG4gICAgICAgIEgodSwgXCJDb3JlLlRvb2x0aXBcIikgJiYgTyhrLCBcImFmdGVySW5pdFwiLCBmdW5jdGlvbigpIHtcbiAgICAgICAgICBsZXQgeCA9IHRoaXMuY2hhcnQ7XG4gICAgICAgICAgeC5vcHRpb25zLnRvb2x0aXAgJiYgKHgudG9vbHRpcCA9IG5ldyBkKHgsIHgub3B0aW9ucy50b29sdGlwLCB0aGlzKSk7XG4gICAgICAgIH0pO1xuICAgICAgfSwgbTtcbiAgICB9KSwgbihvLCBcIkNvcmUvU2VyaWVzL1BvaW50LmpzXCIsIFtvW1wiQ29yZS9SZW5kZXJlci9IVE1ML0FTVC5qc1wiXSwgb1tcIkNvcmUvQW5pbWF0aW9uL0FuaW1hdGlvblV0aWxpdGllcy5qc1wiXSwgb1tcIkNvcmUvRGVmYXVsdHMuanNcIl0sIG9bXCJDb3JlL1RlbXBsYXRpbmcuanNcIl0sIG9bXCJDb3JlL1V0aWxpdGllcy5qc1wiXV0sIGZ1bmN0aW9uKHIsIGksIGEsIHMsIGwpIHtcbiAgICAgIGxldCB7IGFuaW1PYmplY3Q6IHAgfSA9IGksIHsgZGVmYXVsdE9wdGlvbnM6IGQgfSA9IGEsIHsgZm9ybWF0OiBiIH0gPSBzLCB7IGFkZEV2ZW50OiBNLCBjcmlzcDogdSwgZXJhc2U6IEEsIGV4dGVuZDogeiwgZmlyZUV2ZW50OiBmLCBnZXROZXN0ZWRQcm9wZXJ0eTogTywgaXNBcnJheTogaCwgaXNGdW5jdGlvbjogZywgaXNOdW1iZXI6IHYsIGlzT2JqZWN0OiBMLCBtZXJnZTogeSwgcGljazogQiwgc3luY1RpbWVvdXQ6IFgsIHJlbW92ZUV2ZW50OiBGLCB1bmlxdWVLZXk6IFQgfSA9IGw7XG4gICAgICBjbGFzcyB3IHtcbiAgICAgICAgYW5pbWF0ZUJlZm9yZURlc3Ryb3koKSB7XG4gICAgICAgICAgbGV0IEMgPSB0aGlzLCBxID0geyB4OiBDLnN0YXJ0WFBvcywgb3BhY2l0eTogMCB9LCBtID0gQy5nZXRHcmFwaGljYWxQcm9wcygpO1xuICAgICAgICAgIG0uc2luZ3VsYXIuZm9yRWFjaChmdW5jdGlvbihrKSB7XG4gICAgICAgICAgICBDW2tdID0gQ1trXS5hbmltYXRlKGsgPT09IFwiZGF0YUxhYmVsXCIgPyB7IHg6IENba10uc3RhcnRYUG9zLCB5OiBDW2tdLnN0YXJ0WVBvcywgb3BhY2l0eTogMCB9IDogcSk7XG4gICAgICAgICAgfSksIG0ucGx1cmFsLmZvckVhY2goZnVuY3Rpb24oaykge1xuICAgICAgICAgICAgQ1trXS5mb3JFYWNoKGZ1bmN0aW9uKHgpIHtcbiAgICAgICAgICAgICAgeC5lbGVtZW50ICYmIHguYW5pbWF0ZSh6KHsgeDogQy5zdGFydFhQb3MgfSwgeC5zdGFydFlQb3MgPyB7IHg6IHguc3RhcnRYUG9zLCB5OiB4LnN0YXJ0WVBvcyB9IDoge30pKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIGFwcGx5T3B0aW9ucyhDLCBxKSB7XG4gICAgICAgICAgbGV0IG0gPSB0aGlzLnNlcmllcywgayA9IG0ub3B0aW9ucy5wb2ludFZhbEtleSB8fCBtLnBvaW50VmFsS2V5O1xuICAgICAgICAgIHJldHVybiB6KHRoaXMsIEMgPSB3LnByb3RvdHlwZS5vcHRpb25zVG9PYmplY3QuY2FsbCh0aGlzLCBDKSksIHRoaXMub3B0aW9ucyA9IHRoaXMub3B0aW9ucyA/IHoodGhpcy5vcHRpb25zLCBDKSA6IEMsIEMuZ3JvdXAgJiYgZGVsZXRlIHRoaXMuZ3JvdXAsIEMuZGF0YUxhYmVscyAmJiBkZWxldGUgdGhpcy5kYXRhTGFiZWxzLCBrICYmICh0aGlzLnkgPSB3LnByb3RvdHlwZS5nZXROZXN0ZWRQcm9wZXJ0eS5jYWxsKHRoaXMsIGspKSwgdGhpcy5zZWxlY3RlZCAmJiAodGhpcy5zdGF0ZSA9IFwic2VsZWN0XCIpLCBcIm5hbWVcIiBpbiB0aGlzICYmIHEgPT09IHZvaWQgMCAmJiBtLnhBeGlzICYmIG0ueEF4aXMuaGFzTmFtZXMgJiYgKHRoaXMueCA9IG0ueEF4aXMubmFtZVRvWCh0aGlzKSksIHRoaXMueCA9PT0gdm9pZCAwICYmIG0gPyB0aGlzLnggPSBxID8/IG0uYXV0b0luY3JlbWVudCgpIDogdihDLngpICYmIG0ub3B0aW9ucy5yZWxhdGl2ZVhWYWx1ZSAmJiAodGhpcy54ID0gbS5hdXRvSW5jcmVtZW50KEMueCkpLCB0aGlzLmlzTnVsbCA9IHRoaXMuaXNWYWxpZCAmJiAhdGhpcy5pc1ZhbGlkKCksIHRoaXMuZm9ybWF0UHJlZml4ID0gdGhpcy5pc051bGwgPyBcIm51bGxcIiA6IFwicG9pbnRcIiwgdGhpcztcbiAgICAgICAgfVxuICAgICAgICBkZXN0cm95KCkge1xuICAgICAgICAgIGlmICghdGhpcy5kZXN0cm95ZWQpIHtcbiAgICAgICAgICAgIGxldCBDID0gdGhpcywgcSA9IEMuc2VyaWVzLCBtID0gcS5jaGFydCwgayA9IHEub3B0aW9ucy5kYXRhU29ydGluZywgeCA9IG0uaG92ZXJQb2ludHMsIE4gPSBwKEMuc2VyaWVzLmNoYXJ0LnJlbmRlcmVyLmdsb2JhbEFuaW1hdGlvbiksIFYgPSAoKSA9PiB7XG4gICAgICAgICAgICAgIGZvciAobGV0IFIgaW4gKEMuZ3JhcGhpYyB8fCBDLmdyYXBoaWNzIHx8IEMuZGF0YUxhYmVsIHx8IEMuZGF0YUxhYmVscykgJiYgKEYoQyksIEMuZGVzdHJveUVsZW1lbnRzKCkpLCBDKVxuICAgICAgICAgICAgICAgIGRlbGV0ZSBDW1JdO1xuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIEMubGVnZW5kSXRlbSAmJiBtLmxlZ2VuZC5kZXN0cm95SXRlbShDKSwgeCAmJiAoQy5zZXRTdGF0ZSgpLCBBKHgsIEMpLCB4Lmxlbmd0aCB8fCAobS5ob3ZlclBvaW50cyA9IG51bGwpKSwgQyA9PT0gbS5ob3ZlclBvaW50ICYmIEMub25Nb3VzZU91dCgpLCBrICYmIGsuZW5hYmxlZCA/ICh0aGlzLmFuaW1hdGVCZWZvcmVEZXN0cm95KCksIFgoViwgTi5kdXJhdGlvbikpIDogVigpLCBtLnBvaW50Q291bnQtLTtcbiAgICAgICAgICB9XG4gICAgICAgICAgdGhpcy5kZXN0cm95ZWQgPSAhMDtcbiAgICAgICAgfVxuICAgICAgICBkZXN0cm95RWxlbWVudHMoQykge1xuICAgICAgICAgIGxldCBxID0gdGhpcywgbSA9IHEuZ2V0R3JhcGhpY2FsUHJvcHMoQyk7XG4gICAgICAgICAgbS5zaW5ndWxhci5mb3JFYWNoKGZ1bmN0aW9uKGspIHtcbiAgICAgICAgICAgIHFba10gPSBxW2tdLmRlc3Ryb3koKTtcbiAgICAgICAgICB9KSwgbS5wbHVyYWwuZm9yRWFjaChmdW5jdGlvbihrKSB7XG4gICAgICAgICAgICBxW2tdLmZvckVhY2goZnVuY3Rpb24oeCkge1xuICAgICAgICAgICAgICB4ICYmIHguZWxlbWVudCAmJiB4LmRlc3Ryb3koKTtcbiAgICAgICAgICAgIH0pLCBkZWxldGUgcVtrXTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBmaXJlUG9pbnRFdmVudChDLCBxLCBtKSB7XG4gICAgICAgICAgbGV0IGsgPSB0aGlzLCB4ID0gdGhpcy5zZXJpZXMub3B0aW9ucztcbiAgICAgICAgICBrLm1hbmFnZUV2ZW50KEMpLCBDID09PSBcImNsaWNrXCIgJiYgeC5hbGxvd1BvaW50U2VsZWN0ICYmIChtID0gZnVuY3Rpb24oTikge1xuICAgICAgICAgICAgIWsuZGVzdHJveWVkICYmIGsuc2VsZWN0ICYmIGsuc2VsZWN0KG51bGwsIE4uY3RybEtleSB8fCBOLm1ldGFLZXkgfHwgTi5zaGlmdEtleSk7XG4gICAgICAgICAgfSksIGYoaywgQywgcSwgbSk7XG4gICAgICAgIH1cbiAgICAgICAgZ2V0Q2xhc3NOYW1lKCkge1xuICAgICAgICAgIHJldHVybiBcImhpZ2hjaGFydHMtcG9pbnRcIiArICh0aGlzLnNlbGVjdGVkID8gXCIgaGlnaGNoYXJ0cy1wb2ludC1zZWxlY3RcIiA6IFwiXCIpICsgKHRoaXMubmVnYXRpdmUgPyBcIiBoaWdoY2hhcnRzLW5lZ2F0aXZlXCIgOiBcIlwiKSArICh0aGlzLmlzTnVsbCA/IFwiIGhpZ2hjaGFydHMtbnVsbC1wb2ludFwiIDogXCJcIikgKyAodGhpcy5jb2xvckluZGV4ICE9PSB2b2lkIDAgPyBcIiBoaWdoY2hhcnRzLWNvbG9yLVwiICsgdGhpcy5jb2xvckluZGV4IDogXCJcIikgKyAodGhpcy5vcHRpb25zLmNsYXNzTmFtZSA/IFwiIFwiICsgdGhpcy5vcHRpb25zLmNsYXNzTmFtZSA6IFwiXCIpICsgKHRoaXMuem9uZSAmJiB0aGlzLnpvbmUuY2xhc3NOYW1lID8gXCIgXCIgKyB0aGlzLnpvbmUuY2xhc3NOYW1lLnJlcGxhY2UoXCJoaWdoY2hhcnRzLW5lZ2F0aXZlXCIsIFwiXCIpIDogXCJcIik7XG4gICAgICAgIH1cbiAgICAgICAgZ2V0R3JhcGhpY2FsUHJvcHMoQykge1xuICAgICAgICAgIGxldCBxLCBtLCBrID0gdGhpcywgeCA9IFtdLCBOID0geyBzaW5ndWxhcjogW10sIHBsdXJhbDogW10gfTtcbiAgICAgICAgICBmb3IgKChDID0gQyB8fCB7IGdyYXBoaWM6IDEsIGRhdGFMYWJlbDogMSB9KS5ncmFwaGljICYmIHgucHVzaChcImdyYXBoaWNcIiwgXCJjb25uZWN0b3JcIiksIEMuZGF0YUxhYmVsICYmIHgucHVzaChcImRhdGFMYWJlbFwiLCBcImRhdGFMYWJlbFBhdGhcIiwgXCJkYXRhTGFiZWxVcHBlclwiKSwgbSA9IHgubGVuZ3RoOyBtLS07IClcbiAgICAgICAgICAgIGtbcSA9IHhbbV1dICYmIE4uc2luZ3VsYXIucHVzaChxKTtcbiAgICAgICAgICByZXR1cm4gW1wiZ3JhcGhpY1wiLCBcImRhdGFMYWJlbFwiXS5mb3JFYWNoKGZ1bmN0aW9uKFYpIHtcbiAgICAgICAgICAgIGxldCBSID0gViArIFwic1wiO1xuICAgICAgICAgICAgQ1tWXSAmJiBrW1JdICYmIE4ucGx1cmFsLnB1c2goUik7XG4gICAgICAgICAgfSksIE47XG4gICAgICAgIH1cbiAgICAgICAgZ2V0TGFiZWxDb25maWcoKSB7XG4gICAgICAgICAgcmV0dXJuIHsgeDogdGhpcy5jYXRlZ29yeSwgeTogdGhpcy55LCBjb2xvcjogdGhpcy5jb2xvciwgY29sb3JJbmRleDogdGhpcy5jb2xvckluZGV4LCBrZXk6IHRoaXMubmFtZSB8fCB0aGlzLmNhdGVnb3J5LCBzZXJpZXM6IHRoaXMuc2VyaWVzLCBwb2ludDogdGhpcywgcGVyY2VudGFnZTogdGhpcy5wZXJjZW50YWdlLCB0b3RhbDogdGhpcy50b3RhbCB8fCB0aGlzLnN0YWNrVG90YWwgfTtcbiAgICAgICAgfVxuICAgICAgICBnZXROZXN0ZWRQcm9wZXJ0eShDKSB7XG4gICAgICAgICAgcmV0dXJuIEMgPyBDLmluZGV4T2YoXCJjdXN0b20uXCIpID09PSAwID8gTyhDLCB0aGlzLm9wdGlvbnMpIDogdGhpc1tDXSA6IHZvaWQgMDtcbiAgICAgICAgfVxuICAgICAgICBnZXRab25lKCkge1xuICAgICAgICAgIGxldCBDID0gdGhpcy5zZXJpZXMsIHEgPSBDLnpvbmVzLCBtID0gQy56b25lQXhpcyB8fCBcInlcIiwgaywgeCA9IDA7XG4gICAgICAgICAgZm9yIChrID0gcVswXTsgdGhpc1ttXSA+PSBrLnZhbHVlOyApXG4gICAgICAgICAgICBrID0gcVsrK3hdO1xuICAgICAgICAgIHJldHVybiB0aGlzLm5vblpvbmVkQ29sb3IgfHwgKHRoaXMubm9uWm9uZWRDb2xvciA9IHRoaXMuY29sb3IpLCBrICYmIGsuY29sb3IgJiYgIXRoaXMub3B0aW9ucy5jb2xvciA/IHRoaXMuY29sb3IgPSBrLmNvbG9yIDogdGhpcy5jb2xvciA9IHRoaXMubm9uWm9uZWRDb2xvciwgaztcbiAgICAgICAgfVxuICAgICAgICBoYXNOZXdTaGFwZVR5cGUoKSB7XG4gICAgICAgICAgcmV0dXJuICh0aGlzLmdyYXBoaWMgJiYgKHRoaXMuZ3JhcGhpYy5zeW1ib2xOYW1lIHx8IHRoaXMuZ3JhcGhpYy5lbGVtZW50Lm5vZGVOYW1lKSkgIT09IHRoaXMuc2hhcGVUeXBlO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0cnVjdG9yKEMsIHEsIG0pIHtcbiAgICAgICAgICB0aGlzLmZvcm1hdFByZWZpeCA9IFwicG9pbnRcIiwgdGhpcy52aXNpYmxlID0gITAsIHRoaXMuc2VyaWVzID0gQywgdGhpcy5hcHBseU9wdGlvbnMocSwgbSksIHRoaXMuaWQgPz8gKHRoaXMuaWQgPSBUKCkpLCB0aGlzLnJlc29sdmVDb2xvcigpLCBDLmNoYXJ0LnBvaW50Q291bnQrKywgZih0aGlzLCBcImFmdGVySW5pdFwiKTtcbiAgICAgICAgfVxuICAgICAgICBpc1ZhbGlkKCkge1xuICAgICAgICAgIHJldHVybiAodih0aGlzLngpIHx8IHRoaXMueCBpbnN0YW5jZW9mIERhdGUpICYmIHYodGhpcy55KTtcbiAgICAgICAgfVxuICAgICAgICBvcHRpb25zVG9PYmplY3QoQykge1xuICAgICAgICAgIGxldCBxID0gdGhpcy5zZXJpZXMsIG0gPSBxLm9wdGlvbnMua2V5cywgayA9IG0gfHwgcS5wb2ludEFycmF5TWFwIHx8IFtcInlcIl0sIHggPSBrLmxlbmd0aCwgTiA9IHt9LCBWLCBSID0gMCwgSSA9IDA7XG4gICAgICAgICAgaWYgKHYoQykgfHwgQyA9PT0gbnVsbClcbiAgICAgICAgICAgIE5ba1swXV0gPSBDO1xuICAgICAgICAgIGVsc2UgaWYgKGgoQykpXG4gICAgICAgICAgICBmb3IgKCFtICYmIEMubGVuZ3RoID4geCAmJiAoKFYgPSB0eXBlb2YgQ1swXSkgPT0gXCJzdHJpbmdcIiA/IE4ubmFtZSA9IENbMF0gOiBWID09PSBcIm51bWJlclwiICYmIChOLnggPSBDWzBdKSwgUisrKTsgSSA8IHg7IClcbiAgICAgICAgICAgICAgbSAmJiBDW1JdID09PSB2b2lkIDAgfHwgKGtbSV0uaW5kZXhPZihcIi5cIikgPiAwID8gdy5wcm90b3R5cGUuc2V0TmVzdGVkUHJvcGVydHkoTiwgQ1tSXSwga1tJXSkgOiBOW2tbSV1dID0gQ1tSXSksIFIrKywgSSsrO1xuICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgIHR5cGVvZiBDID09IFwib2JqZWN0XCIgJiYgKE4gPSBDLCBDLmRhdGFMYWJlbHMgJiYgKHEuaGFzRGF0YUxhYmVscyA9ICgpID0+ICEwKSwgQy5tYXJrZXIgJiYgKHEuX2hhc1BvaW50TWFya2VycyA9ICEwKSk7XG4gICAgICAgICAgcmV0dXJuIE47XG4gICAgICAgIH1cbiAgICAgICAgcG9zKEMsIHEgPSB0aGlzLnBsb3RZKSB7XG4gICAgICAgICAgaWYgKCF0aGlzLmRlc3Ryb3llZCkge1xuICAgICAgICAgICAgbGV0IHsgcGxvdFg6IG0sIHNlcmllczogayB9ID0gdGhpcywgeyBjaGFydDogeCwgeEF4aXM6IE4sIHlBeGlzOiBWIH0gPSBrLCBSID0gMCwgSSA9IDA7XG4gICAgICAgICAgICBpZiAodihtKSAmJiB2KHEpKVxuICAgICAgICAgICAgICByZXR1cm4gQyAmJiAoUiA9IE4gPyBOLnBvcyA6IHgucGxvdExlZnQsIEkgPSBWID8gVi5wb3MgOiB4LnBsb3RUb3ApLCB4LmludmVydGVkICYmIE4gJiYgViA/IFtWLmxlbiAtIHEgKyBJLCBOLmxlbiAtIG0gKyBSXSA6IFttICsgUiwgcSArIEldO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXNvbHZlQ29sb3IoKSB7XG4gICAgICAgICAgbGV0IEMgPSB0aGlzLnNlcmllcywgcSA9IEMuY2hhcnQub3B0aW9ucy5jaGFydCwgbSA9IEMuY2hhcnQuc3R5bGVkTW9kZSwgaywgeCwgTiA9IHEuY29sb3JDb3VudCwgVjtcbiAgICAgICAgICBkZWxldGUgdGhpcy5ub25ab25lZENvbG9yLCBDLm9wdGlvbnMuY29sb3JCeVBvaW50ID8gKG0gfHwgKGsgPSAoeCA9IEMub3B0aW9ucy5jb2xvcnMgfHwgQy5jaGFydC5vcHRpb25zLmNvbG9ycylbQy5jb2xvckNvdW50ZXJdLCBOID0geC5sZW5ndGgpLCBWID0gQy5jb2xvckNvdW50ZXIsIEMuY29sb3JDb3VudGVyKyssIEMuY29sb3JDb3VudGVyID09PSBOICYmIChDLmNvbG9yQ291bnRlciA9IDApKSA6IChtIHx8IChrID0gQy5jb2xvciksIFYgPSBDLmNvbG9ySW5kZXgpLCB0aGlzLmNvbG9ySW5kZXggPSBCKHRoaXMub3B0aW9ucy5jb2xvckluZGV4LCBWKSwgdGhpcy5jb2xvciA9IEIodGhpcy5vcHRpb25zLmNvbG9yLCBrKTtcbiAgICAgICAgfVxuICAgICAgICBzZXROZXN0ZWRQcm9wZXJ0eShDLCBxLCBtKSB7XG4gICAgICAgICAgcmV0dXJuIG0uc3BsaXQoXCIuXCIpLnJlZHVjZShmdW5jdGlvbihrLCB4LCBOLCBWKSB7XG4gICAgICAgICAgICBsZXQgUiA9IFYubGVuZ3RoIC0gMSA9PT0gTjtcbiAgICAgICAgICAgIHJldHVybiBrW3hdID0gUiA/IHEgOiBMKGtbeF0sICEwKSA/IGtbeF0gOiB7fSwga1t4XTtcbiAgICAgICAgICB9LCBDKSwgQztcbiAgICAgICAgfVxuICAgICAgICBzaG91bGREcmF3KCkge1xuICAgICAgICAgIHJldHVybiAhdGhpcy5pc051bGw7XG4gICAgICAgIH1cbiAgICAgICAgdG9vbHRpcEZvcm1hdHRlcihDKSB7XG4gICAgICAgICAgbGV0IHEgPSB0aGlzLnNlcmllcywgbSA9IHEudG9vbHRpcE9wdGlvbnMsIGsgPSBCKG0udmFsdWVEZWNpbWFscywgXCJcIiksIHggPSBtLnZhbHVlUHJlZml4IHx8IFwiXCIsIE4gPSBtLnZhbHVlU3VmZml4IHx8IFwiXCI7XG4gICAgICAgICAgcmV0dXJuIHEuY2hhcnQuc3R5bGVkTW9kZSAmJiAoQyA9IHEuY2hhcnQudG9vbHRpcC5zdHlsZWRNb2RlRm9ybWF0KEMpKSwgKHEucG9pbnRBcnJheU1hcCB8fCBbXCJ5XCJdKS5mb3JFYWNoKGZ1bmN0aW9uKFYpIHtcbiAgICAgICAgICAgIFYgPSBcIntwb2ludC5cIiArIFYsICh4IHx8IE4pICYmIChDID0gQy5yZXBsYWNlKFJlZ0V4cChWICsgXCJ9XCIsIFwiZ1wiKSwgeCArIFYgKyBcIn1cIiArIE4pKSwgQyA9IEMucmVwbGFjZShSZWdFeHAoViArIFwifVwiLCBcImdcIiksIFYgKyBcIjosLlwiICsgayArIFwiZn1cIik7XG4gICAgICAgICAgfSksIGIoQywgeyBwb2ludDogdGhpcywgc2VyaWVzOiB0aGlzLnNlcmllcyB9LCBxLmNoYXJ0KTtcbiAgICAgICAgfVxuICAgICAgICB1cGRhdGUoQywgcSwgbSwgaykge1xuICAgICAgICAgIGxldCB4LCBOID0gdGhpcywgViA9IE4uc2VyaWVzLCBSID0gTi5ncmFwaGljLCBJID0gVi5jaGFydCwgaiA9IFYub3B0aW9ucztcbiAgICAgICAgICBmdW5jdGlvbiBVKCkge1xuICAgICAgICAgICAgTi5hcHBseU9wdGlvbnMoQyk7XG4gICAgICAgICAgICBsZXQgXyA9IFIgJiYgTi5oYXNNb2NrR3JhcGhpYywgcjEgPSBOLnkgPT09IG51bGwgPyAhXyA6IF87XG4gICAgICAgICAgICBSICYmIHIxICYmIChOLmdyYXBoaWMgPSBSLmRlc3Ryb3koKSwgZGVsZXRlIE4uaGFzTW9ja0dyYXBoaWMpLCBMKEMsICEwKSAmJiAoUiAmJiBSLmVsZW1lbnQgJiYgQyAmJiBDLm1hcmtlciAmJiBDLm1hcmtlci5zeW1ib2wgIT09IHZvaWQgMCAmJiAoTi5ncmFwaGljID0gUi5kZXN0cm95KCkpLCBDICE9IG51bGwgJiYgQy5kYXRhTGFiZWxzICYmIE4uZGF0YUxhYmVsICYmIChOLmRhdGFMYWJlbCA9IE4uZGF0YUxhYmVsLmRlc3Ryb3koKSkpLCB4ID0gTi5pbmRleCwgVi51cGRhdGVQYXJhbGxlbEFycmF5cyhOLCB4KSwgai5kYXRhW3hdID0gTChqLmRhdGFbeF0sICEwKSB8fCBMKEMsICEwKSA/IE4ub3B0aW9ucyA6IEIoQywgai5kYXRhW3hdKSwgVi5pc0RpcnR5ID0gVi5pc0RpcnR5RGF0YSA9ICEwLCAhVi5maXhlZEJveCAmJiBWLmhhc0NhcnRlc2lhblNlcmllcyAmJiAoSS5pc0RpcnR5Qm94ID0gITApLCBqLmxlZ2VuZFR5cGUgPT09IFwicG9pbnRcIiAmJiAoSS5pc0RpcnR5TGVnZW5kID0gITApLCBxICYmIEkucmVkcmF3KG0pO1xuICAgICAgICAgIH1cbiAgICAgICAgICBxID0gQihxLCAhMCksIGsgPT09ICExID8gVSgpIDogTi5maXJlUG9pbnRFdmVudChcInVwZGF0ZVwiLCB7IG9wdGlvbnM6IEMgfSwgVSk7XG4gICAgICAgIH1cbiAgICAgICAgcmVtb3ZlKEMsIHEpIHtcbiAgICAgICAgICB0aGlzLnNlcmllcy5yZW1vdmVQb2ludCh0aGlzLnNlcmllcy5kYXRhLmluZGV4T2YodGhpcyksIEMsIHEpO1xuICAgICAgICB9XG4gICAgICAgIHNlbGVjdChDLCBxKSB7XG4gICAgICAgICAgbGV0IG0gPSB0aGlzLCBrID0gbS5zZXJpZXMsIHggPSBrLmNoYXJ0O1xuICAgICAgICAgIEMgPSBCKEMsICFtLnNlbGVjdGVkKSwgdGhpcy5zZWxlY3RlZFN0YWdpbmcgPSBDLCBtLmZpcmVQb2ludEV2ZW50KEMgPyBcInNlbGVjdFwiIDogXCJ1bnNlbGVjdFwiLCB7IGFjY3VtdWxhdGU6IHEgfSwgZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICBtLnNlbGVjdGVkID0gbS5vcHRpb25zLnNlbGVjdGVkID0gQywgay5vcHRpb25zLmRhdGFbay5kYXRhLmluZGV4T2YobSldID0gbS5vcHRpb25zLCBtLnNldFN0YXRlKEMgJiYgXCJzZWxlY3RcIiksIHEgfHwgeC5nZXRTZWxlY3RlZFBvaW50cygpLmZvckVhY2goZnVuY3Rpb24oTikge1xuICAgICAgICAgICAgICBsZXQgViA9IE4uc2VyaWVzO1xuICAgICAgICAgICAgICBOLnNlbGVjdGVkICYmIE4gIT09IG0gJiYgKE4uc2VsZWN0ZWQgPSBOLm9wdGlvbnMuc2VsZWN0ZWQgPSAhMSwgVi5vcHRpb25zLmRhdGFbVi5kYXRhLmluZGV4T2YoTildID0gTi5vcHRpb25zLCBOLnNldFN0YXRlKHguaG92ZXJQb2ludHMgJiYgVi5vcHRpb25zLmluYWN0aXZlT3RoZXJQb2ludHMgPyBcImluYWN0aXZlXCIgOiBcIlwiKSwgTi5maXJlUG9pbnRFdmVudChcInVuc2VsZWN0XCIpKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH0pLCBkZWxldGUgdGhpcy5zZWxlY3RlZFN0YWdpbmc7XG4gICAgICAgIH1cbiAgICAgICAgb25Nb3VzZU92ZXIoQykge1xuICAgICAgICAgIGxldCB7IGludmVydGVkOiBxLCBwb2ludGVyOiBtIH0gPSB0aGlzLnNlcmllcy5jaGFydDtcbiAgICAgICAgICBtICYmIChDID0gQyA/IG0ubm9ybWFsaXplKEMpIDogbS5nZXRDaGFydENvb3JkaW5hdGVzRnJvbVBvaW50KHRoaXMsIHEpLCBtLnJ1blBvaW50QWN0aW9ucyhDLCB0aGlzKSk7XG4gICAgICAgIH1cbiAgICAgICAgb25Nb3VzZU91dCgpIHtcbiAgICAgICAgICBsZXQgQyA9IHRoaXMuc2VyaWVzLmNoYXJ0O1xuICAgICAgICAgIHRoaXMuZmlyZVBvaW50RXZlbnQoXCJtb3VzZU91dFwiKSwgdGhpcy5zZXJpZXMub3B0aW9ucy5pbmFjdGl2ZU90aGVyUG9pbnRzIHx8IChDLmhvdmVyUG9pbnRzIHx8IFtdKS5mb3JFYWNoKGZ1bmN0aW9uKHEpIHtcbiAgICAgICAgICAgIHEuc2V0U3RhdGUoKTtcbiAgICAgICAgICB9KSwgQy5ob3ZlclBvaW50cyA9IEMuaG92ZXJQb2ludCA9IG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgbWFuYWdlRXZlbnQoQykge1xuICAgICAgICAgIHZhciBrLCB4LCBOLCBWLCBSLCBJO1xuICAgICAgICAgIGxldCBxID0geSh0aGlzLnNlcmllcy5vcHRpb25zLnBvaW50LCB0aGlzLm9wdGlvbnMpLCBtID0gKGsgPSBxLmV2ZW50cykgPT0gbnVsbCA/IHZvaWQgMCA6IGtbQ107XG4gICAgICAgICAgZyhtKSAmJiAoISgoeCA9IHRoaXMuaGNFdmVudHMpICE9IG51bGwgJiYgeFtDXSkgfHwgKChWID0gKE4gPSB0aGlzLmhjRXZlbnRzKSA9PSBudWxsID8gdm9pZCAwIDogTltDXSkgPT0gbnVsbCA/IHZvaWQgMCA6IFYubWFwKChqKSA9PiBqLmZuKS5pbmRleE9mKG0pKSA9PT0gLTEpID8gKChSID0gdGhpcy5pbXBvcnRlZFVzZXJFdmVudCkgPT0gbnVsbCB8fCBSLmNhbGwodGhpcyksIHRoaXMuaW1wb3J0ZWRVc2VyRXZlbnQgPSBNKHRoaXMsIEMsIG0pKSA6IHRoaXMuaW1wb3J0ZWRVc2VyRXZlbnQgJiYgIW0gJiYgKChJID0gdGhpcy5oY0V2ZW50cykgIT0gbnVsbCAmJiBJW0NdKSAmJiAoRih0aGlzLCBDKSwgZGVsZXRlIHRoaXMuaGNFdmVudHNbQ10sIE9iamVjdC5rZXlzKHRoaXMuaGNFdmVudHMpIHx8IGRlbGV0ZSB0aGlzLmltcG9ydGVkVXNlckV2ZW50KTtcbiAgICAgICAgfVxuICAgICAgICBzZXRTdGF0ZShDLCBxKSB7XG4gICAgICAgICAgdmFyIFA7XG4gICAgICAgICAgbGV0IG0gPSB0aGlzLnNlcmllcywgayA9IHRoaXMuc3RhdGUsIHggPSBtLm9wdGlvbnMuc3RhdGVzW0MgfHwgXCJub3JtYWxcIl0gfHwge30sIE4gPSBkLnBsb3RPcHRpb25zW20udHlwZV0ubWFya2VyICYmIG0ub3B0aW9ucy5tYXJrZXIsIFYgPSBOICYmIE4uZW5hYmxlZCA9PT0gITEsIFIgPSBOICYmIE4uc3RhdGVzICYmIE4uc3RhdGVzW0MgfHwgXCJub3JtYWxcIl0gfHwge30sIEkgPSBSLmVuYWJsZWQgPT09ICExLCBqID0gdGhpcy5tYXJrZXIgfHwge30sIFUgPSBtLmNoYXJ0LCBfID0gTiAmJiBtLm1hcmtlckF0dHJpYnMsIHIxID0gbS5oYWxvLCBLLCBRLCBFLCBEID0gbS5zdGF0ZU1hcmtlckdyYXBoaWMsIEc7XG4gICAgICAgICAgaWYgKChDID0gQyB8fCBcIlwiKSA9PT0gdGhpcy5zdGF0ZSAmJiAhcSB8fCB0aGlzLnNlbGVjdGVkICYmIEMgIT09IFwic2VsZWN0XCIgfHwgeC5lbmFibGVkID09PSAhMSB8fCBDICYmIChJIHx8IFYgJiYgUi5lbmFibGVkID09PSAhMSkgfHwgQyAmJiBqLnN0YXRlcyAmJiBqLnN0YXRlc1tDXSAmJiBqLnN0YXRlc1tDXS5lbmFibGVkID09PSAhMSlcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICBpZiAodGhpcy5zdGF0ZSA9IEMsIF8gJiYgKEsgPSBtLm1hcmtlckF0dHJpYnModGhpcywgQykpLCB0aGlzLmdyYXBoaWMgJiYgIXRoaXMuaGFzTW9ja0dyYXBoaWMpIHtcbiAgICAgICAgICAgIGlmIChrICYmIHRoaXMuZ3JhcGhpYy5yZW1vdmVDbGFzcyhcImhpZ2hjaGFydHMtcG9pbnQtXCIgKyBrKSwgQyAmJiB0aGlzLmdyYXBoaWMuYWRkQ2xhc3MoXCJoaWdoY2hhcnRzLXBvaW50LVwiICsgQyksICFVLnN0eWxlZE1vZGUpIHtcbiAgICAgICAgICAgICAgUSA9IG0ucG9pbnRBdHRyaWJzKHRoaXMsIEMpLCBFID0gQihVLm9wdGlvbnMuY2hhcnQuYW5pbWF0aW9uLCB4LmFuaW1hdGlvbik7XG4gICAgICAgICAgICAgIGxldCBZID0gUS5vcGFjaXR5O1xuICAgICAgICAgICAgICBtLm9wdGlvbnMuaW5hY3RpdmVPdGhlclBvaW50cyAmJiB2KFkpICYmICh0aGlzLmRhdGFMYWJlbHMgfHwgW10pLmZvckVhY2goZnVuY3Rpb24oWikge1xuICAgICAgICAgICAgICAgIFogJiYgIVouaGFzQ2xhc3MoXCJoaWdoY2hhcnRzLWRhdGEtbGFiZWwtaGlkZGVuXCIpICYmIChaLmFuaW1hdGUoeyBvcGFjaXR5OiBZIH0sIEUpLCBaLmNvbm5lY3RvciAmJiBaLmNvbm5lY3Rvci5hbmltYXRlKHsgb3BhY2l0eTogWSB9LCBFKSk7XG4gICAgICAgICAgICAgIH0pLCB0aGlzLmdyYXBoaWMuYW5pbWF0ZShRLCBFKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIEsgJiYgdGhpcy5ncmFwaGljLmFuaW1hdGUoSywgQihVLm9wdGlvbnMuY2hhcnQuYW5pbWF0aW9uLCBSLmFuaW1hdGlvbiwgTi5hbmltYXRpb24pKSwgRCAmJiBELmhpZGUoKTtcbiAgICAgICAgICB9IGVsc2VcbiAgICAgICAgICAgIEMgJiYgUiAmJiAoRyA9IGouc3ltYm9sIHx8IG0uc3ltYm9sLCBEICYmIEQuY3VycmVudFN5bWJvbCAhPT0gRyAmJiAoRCA9IEQuZGVzdHJveSgpKSwgSyAmJiAoRCA/IERbcSA/IFwiYW5pbWF0ZVwiIDogXCJhdHRyXCJdKHsgeDogSy54LCB5OiBLLnkgfSkgOiBHICYmIChtLnN0YXRlTWFya2VyR3JhcGhpYyA9IEQgPSBVLnJlbmRlcmVyLnN5bWJvbChHLCBLLngsIEsueSwgSy53aWR0aCwgSy5oZWlnaHQpLmFkZChtLm1hcmtlckdyb3VwKSwgRC5jdXJyZW50U3ltYm9sID0gRykpLCAhVS5zdHlsZWRNb2RlICYmIEQgJiYgdGhpcy5zdGF0ZSAhPT0gXCJpbmFjdGl2ZVwiICYmIEQuYXR0cihtLnBvaW50QXR0cmlicyh0aGlzLCBDKSkpLCBEICYmIChEW0MgJiYgdGhpcy5pc0luc2lkZSA/IFwic2hvd1wiIDogXCJoaWRlXCJdKCksIEQuZWxlbWVudC5wb2ludCA9IHRoaXMsIEQuYWRkQ2xhc3ModGhpcy5nZXRDbGFzc05hbWUoKSwgITApKTtcbiAgICAgICAgICBsZXQgSiA9IHguaGFsbywgUyA9IHRoaXMuZ3JhcGhpYyB8fCBELCBXID0gUyAmJiBTLnZpc2liaWxpdHkgfHwgXCJpbmhlcml0XCI7XG4gICAgICAgICAgSiAmJiBKLnNpemUgJiYgUyAmJiBXICE9PSBcImhpZGRlblwiICYmICF0aGlzLmlzQ2x1c3RlciA/IChyMSB8fCAobS5oYWxvID0gcjEgPSBVLnJlbmRlcmVyLnBhdGgoKS5hZGQoUy5wYXJlbnRHcm91cCkpLCByMS5zaG93KClbcSA/IFwiYW5pbWF0ZVwiIDogXCJhdHRyXCJdKHsgZDogdGhpcy5oYWxvUGF0aChKLnNpemUpIH0pLCByMS5hdHRyKHsgY2xhc3M6IFwiaGlnaGNoYXJ0cy1oYWxvIGhpZ2hjaGFydHMtY29sb3ItXCIgKyBCKHRoaXMuY29sb3JJbmRleCwgbS5jb2xvckluZGV4KSArICh0aGlzLmNsYXNzTmFtZSA/IFwiIFwiICsgdGhpcy5jbGFzc05hbWUgOiBcIlwiKSwgdmlzaWJpbGl0eTogVywgekluZGV4OiAtMSB9KSwgcjEucG9pbnQgPSB0aGlzLCBVLnN0eWxlZE1vZGUgfHwgcjEuYXR0cih6KHsgZmlsbDogdGhpcy5jb2xvciB8fCBtLmNvbG9yLCBcImZpbGwtb3BhY2l0eVwiOiBKLm9wYWNpdHkgfSwgci5maWx0ZXJVc2VyQXR0cmlidXRlcyhKLmF0dHJpYnV0ZXMgfHwge30pKSkpIDogKFAgPSByMSA9PSBudWxsID8gdm9pZCAwIDogcjEucG9pbnQpICE9IG51bGwgJiYgUC5oYWxvUGF0aCAmJiAhcjEucG9pbnQuZGVzdHJveWVkICYmIHIxLmFuaW1hdGUoeyBkOiByMS5wb2ludC5oYWxvUGF0aCgwKSB9LCBudWxsLCByMS5oaWRlKSwgZih0aGlzLCBcImFmdGVyU2V0U3RhdGVcIiwgeyBzdGF0ZTogQyB9KTtcbiAgICAgICAgfVxuICAgICAgICBoYWxvUGF0aChDKSB7XG4gICAgICAgICAgbGV0IHEgPSB0aGlzLnBvcygpO1xuICAgICAgICAgIHJldHVybiBxID8gdGhpcy5zZXJpZXMuY2hhcnQucmVuZGVyZXIuc3ltYm9scy5jaXJjbGUodShxWzBdLCAxKSAtIEMsIHFbMV0gLSBDLCAyICogQywgMiAqIEMpIDogW107XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiB3O1xuICAgIH0pLCBuKG8sIFwiQ29yZS9Qb2ludGVyLmpzXCIsIFtvW1wiQ29yZS9Db2xvci9Db2xvci5qc1wiXSwgb1tcIkNvcmUvR2xvYmFscy5qc1wiXSwgb1tcIkNvcmUvVXRpbGl0aWVzLmpzXCJdXSwgZnVuY3Rpb24ociwgaSwgYSkge1xuICAgICAgdmFyIHM7XG4gICAgICBsZXQgeyBwYXJzZTogbCB9ID0gciwgeyBjaGFydHM6IHAsIGNvbXBvc2VkOiBkLCBpc1RvdWNoRGV2aWNlOiBiIH0gPSBpLCB7IGFkZEV2ZW50OiBNLCBhdHRyOiB1LCBjc3M6IEEsIGV4dGVuZDogeiwgZmluZDogZiwgZmlyZUV2ZW50OiBPLCBpc051bWJlcjogaCwgaXNPYmplY3Q6IGcsIG9iamVjdEVhY2g6IHYsIG9mZnNldDogTCwgcGljazogeSwgcHVzaFVuaXF1ZTogQiwgc3BsYXQ6IFggfSA9IGE7XG4gICAgICBjbGFzcyBGIHtcbiAgICAgICAgYXBwbHlJbmFjdGl2ZVN0YXRlKHcpIHtcbiAgICAgICAgICBsZXQgSCA9IFtdLCBDO1xuICAgICAgICAgICh3IHx8IFtdKS5mb3JFYWNoKGZ1bmN0aW9uKHEpIHtcbiAgICAgICAgICAgIEMgPSBxLnNlcmllcywgSC5wdXNoKEMpLCBDLmxpbmtlZFBhcmVudCAmJiBILnB1c2goQy5saW5rZWRQYXJlbnQpLCBDLmxpbmtlZFNlcmllcyAmJiAoSCA9IEguY29uY2F0KEMubGlua2VkU2VyaWVzKSksIEMubmF2aWdhdG9yU2VyaWVzICYmIEgucHVzaChDLm5hdmlnYXRvclNlcmllcyk7XG4gICAgICAgICAgfSksIHRoaXMuY2hhcnQuc2VyaWVzLmZvckVhY2goZnVuY3Rpb24ocSkge1xuICAgICAgICAgICAgSC5pbmRleE9mKHEpID09PSAtMSA/IHEuc2V0U3RhdGUoXCJpbmFjdGl2ZVwiLCAhMCkgOiBxLm9wdGlvbnMuaW5hY3RpdmVPdGhlclBvaW50cyAmJiBxLnNldEFsbFBvaW50c1RvU3RhdGUoXCJpbmFjdGl2ZVwiKTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBkZXN0cm95KCkge1xuICAgICAgICAgIGxldCB3ID0gdGhpcztcbiAgICAgICAgICB0aGlzLmV2ZW50c1RvVW5iaW5kLmZvckVhY2goKEgpID0+IEgoKSksIHRoaXMuZXZlbnRzVG9VbmJpbmQgPSBbXSwgIWkuY2hhcnRDb3VudCAmJiAoRi51bmJpbmREb2N1bWVudE1vdXNlVXAgJiYgRi51bmJpbmREb2N1bWVudE1vdXNlVXAuZm9yRWFjaCgoSCkgPT4gSCgpKSwgRi51bmJpbmREb2N1bWVudFRvdWNoRW5kICYmIChGLnVuYmluZERvY3VtZW50VG91Y2hFbmQgPSBGLnVuYmluZERvY3VtZW50VG91Y2hFbmQoKSkpLCBjbGVhckludGVydmFsKHcudG9vbHRpcFRpbWVvdXQpLCB2KHcsIGZ1bmN0aW9uKEgsIEMpIHtcbiAgICAgICAgICAgIHdbQ10gPSB2b2lkIDA7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgZ2V0U2VsZWN0aW9uTWFya2VyQXR0cnModywgSCkge1xuICAgICAgICAgIGxldCBDID0geyBhcmdzOiB7IGNoYXJ0WDogdywgY2hhcnRZOiBIIH0sIGF0dHJzOiB7fSwgc2hhcGVUeXBlOiBcInJlY3RcIiB9O1xuICAgICAgICAgIHJldHVybiBPKHRoaXMsIFwiZ2V0U2VsZWN0aW9uTWFya2VyQXR0cnNcIiwgQywgKHEpID0+IHtcbiAgICAgICAgICAgIGxldCBtLCB7IGNoYXJ0OiBrLCB6b29tSG9yOiB4LCB6b29tVmVydDogTiB9ID0gdGhpcywgeyBtb3VzZURvd25YOiBWID0gMCwgbW91c2VEb3duWTogUiA9IDAgfSA9IGssIEkgPSBxLmF0dHJzO1xuICAgICAgICAgICAgSS54ID0gay5wbG90TGVmdCwgSS55ID0gay5wbG90VG9wLCBJLndpZHRoID0geCA/IDEgOiBrLnBsb3RXaWR0aCwgSS5oZWlnaHQgPSBOID8gMSA6IGsucGxvdEhlaWdodCwgeCAmJiAobSA9IHcgLSBWLCBJLndpZHRoID0gTWF0aC5tYXgoMSwgTWF0aC5hYnMobSkpLCBJLnggPSAobSA+IDAgPyAwIDogbSkgKyBWKSwgTiAmJiAobSA9IEggLSBSLCBJLmhlaWdodCA9IE1hdGgubWF4KDEsIE1hdGguYWJzKG0pKSwgSS55ID0gKG0gPiAwID8gMCA6IG0pICsgUik7XG4gICAgICAgICAgfSksIEM7XG4gICAgICAgIH1cbiAgICAgICAgZHJhZyh3KSB7XG4gICAgICAgICAgbGV0IHsgY2hhcnQ6IEggfSA9IHRoaXMsIHsgbW91c2VEb3duWDogQyA9IDAsIG1vdXNlRG93blk6IHEgPSAwIH0gPSBILCB7IHBhbm5pbmc6IG0sIHBhbktleTogaywgc2VsZWN0aW9uTWFya2VyRmlsbDogeCB9ID0gSC5vcHRpb25zLmNoYXJ0LCBOID0gSC5wbG90TGVmdCwgViA9IEgucGxvdFRvcCwgUiA9IEgucGxvdFdpZHRoLCBJID0gSC5wbG90SGVpZ2h0LCBqID0gZyhtKSA/IG0uZW5hYmxlZCA6IG0sIFUgPSBrICYmIHdbYCR7a31LZXlgXSwgXyA9IHcuY2hhcnRYLCByMSA9IHcuY2hhcnRZLCBLLCBRID0gdGhpcy5zZWxlY3Rpb25NYXJrZXI7XG4gICAgICAgICAgaWYgKCghUSB8fCAhUS50b3VjaCkgJiYgKF8gPCBOID8gXyA9IE4gOiBfID4gTiArIFIgJiYgKF8gPSBOICsgUiksIHIxIDwgViA/IHIxID0gViA6IHIxID4gViArIEkgJiYgKHIxID0gViArIEkpLCB0aGlzLmhhc0RyYWdnZWQgPSBNYXRoLnNxcnQoTWF0aC5wb3coQyAtIF8sIDIpICsgTWF0aC5wb3cocSAtIHIxLCAyKSksIHRoaXMuaGFzRHJhZ2dlZCA+IDEwKSkge1xuICAgICAgICAgICAgSyA9IEguaXNJbnNpZGVQbG90KEMgLSBOLCBxIC0gViwgeyB2aXNpYmxlUGxvdE9ubHk6ICEwIH0pO1xuICAgICAgICAgICAgbGV0IHsgc2hhcGVUeXBlOiBFLCBhdHRyczogRCB9ID0gdGhpcy5nZXRTZWxlY3Rpb25NYXJrZXJBdHRycyhfLCByMSk7XG4gICAgICAgICAgICAoSC5oYXNDYXJ0ZXNpYW5TZXJpZXMgfHwgSC5tYXBWaWV3KSAmJiB0aGlzLmhhc1pvb20gJiYgSyAmJiAhVSAmJiAhUSAmJiAodGhpcy5zZWxlY3Rpb25NYXJrZXIgPSBRID0gSC5yZW5kZXJlcltFXSgpLCBRLmF0dHIoeyBjbGFzczogXCJoaWdoY2hhcnRzLXNlbGVjdGlvbi1tYXJrZXJcIiwgekluZGV4OiA3IH0pLmFkZCgpLCBILnN0eWxlZE1vZGUgfHwgUS5hdHRyKHsgZmlsbDogeCB8fCBsKFwiIzMzNGVmZlwiKS5zZXRPcGFjaXR5KDAuMjUpLmdldCgpIH0pKSwgUSAmJiBRLmF0dHIoRCksIEsgJiYgIVEgJiYgaiAmJiBILnBhbih3LCBtKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZHJhZ1N0YXJ0KHcpIHtcbiAgICAgICAgICBsZXQgSCA9IHRoaXMuY2hhcnQ7XG4gICAgICAgICAgSC5tb3VzZUlzRG93biA9IHcudHlwZSwgSC5jYW5jZWxDbGljayA9ICExLCBILm1vdXNlRG93blggPSB3LmNoYXJ0WCwgSC5tb3VzZURvd25ZID0gdy5jaGFydFk7XG4gICAgICAgIH1cbiAgICAgICAgZ2V0U2VsZWN0aW9uQm94KHcpIHtcbiAgICAgICAgICBsZXQgSCA9IHsgYXJnczogeyBtYXJrZXI6IHcgfSwgcmVzdWx0OiB3LmdldEJCb3goKSB9O1xuICAgICAgICAgIHJldHVybiBPKHRoaXMsIFwiZ2V0U2VsZWN0aW9uQm94XCIsIEgpLCBILnJlc3VsdDtcbiAgICAgICAgfVxuICAgICAgICBkcm9wKHcpIHtcbiAgICAgICAgICBsZXQgSCwgeyBjaGFydDogQywgc2VsZWN0aW9uTWFya2VyOiBxIH0gPSB0aGlzO1xuICAgICAgICAgIGZvciAobGV0IG0gb2YgQy5heGVzKVxuICAgICAgICAgICAgbS5pc1Bhbm5pbmcgJiYgKG0uaXNQYW5uaW5nID0gITEsIChtLm9wdGlvbnMuc3RhcnRPblRpY2sgfHwgbS5vcHRpb25zLmVuZE9uVGljayB8fCBtLnNlcmllcy5zb21lKChrKSA9PiBrLmJvb3N0ZWQpKSAmJiAobS5mb3JjZVJlZHJhdyA9ICEwLCBtLnNldEV4dHJlbWVzKG0udXNlck1pbiwgbS51c2VyTWF4LCAhMSksIEggPSAhMCkpO1xuICAgICAgICAgIGlmIChIICYmIEMucmVkcmF3KCksIHEgJiYgdykge1xuICAgICAgICAgICAgaWYgKHRoaXMuaGFzRHJhZ2dlZCkge1xuICAgICAgICAgICAgICBsZXQgbSA9IHRoaXMuZ2V0U2VsZWN0aW9uQm94KHEpO1xuICAgICAgICAgICAgICBDLnRyYW5zZm9ybSh7IGF4ZXM6IEMuYXhlcy5maWx0ZXIoKGspID0+IGsuem9vbUVuYWJsZWQgJiYgKGsuY29sbCA9PT0gXCJ4QXhpc1wiICYmIHRoaXMuem9vbVggfHwgay5jb2xsID09PSBcInlBeGlzXCIgJiYgdGhpcy56b29tWSkpLCBzZWxlY3Rpb246IHsgb3JpZ2luYWxFdmVudDogdywgeEF4aXM6IFtdLCB5QXhpczogW10sIC4uLm0gfSwgZnJvbTogbSB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGgoQy5pbmRleCkgJiYgKHRoaXMuc2VsZWN0aW9uTWFya2VyID0gcS5kZXN0cm95KCkpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBDICYmIGgoQy5pbmRleCkgJiYgKEEoQy5jb250YWluZXIsIHsgY3Vyc29yOiBDLl9jdXJzb3IgfSksIEMuY2FuY2VsQ2xpY2sgPSB0aGlzLmhhc0RyYWdnZWQgPiAxMCwgQy5tb3VzZUlzRG93biA9ICExLCB0aGlzLmhhc0RyYWdnZWQgPSAwLCB0aGlzLnBpbmNoRG93biA9IFtdKTtcbiAgICAgICAgfVxuICAgICAgICBmaW5kTmVhcmVzdEtEUG9pbnQodywgSCwgQykge1xuICAgICAgICAgIGxldCBxO1xuICAgICAgICAgIHJldHVybiB3LmZvckVhY2goZnVuY3Rpb24obSkge1xuICAgICAgICAgICAgbGV0IGsgPSAhKG0ubm9TaGFyZWRUb29sdGlwICYmIEgpICYmIDAgPiBtLm9wdGlvbnMuZmluZE5lYXJlc3RQb2ludEJ5LmluZGV4T2YoXCJ5XCIpLCB4ID0gbS5zZWFyY2hQb2ludChDLCBrKTtcbiAgICAgICAgICAgIGcoeCwgITApICYmIHguc2VyaWVzICYmICghZyhxLCAhMCkgfHwgZnVuY3Rpb24oTiwgVikge1xuICAgICAgICAgICAgICB2YXIgVSwgXztcbiAgICAgICAgICAgICAgbGV0IFIgPSBOLmRpc3RYIC0gVi5kaXN0WCwgSSA9IE4uZGlzdCAtIFYuZGlzdCwgaiA9ICgoVSA9IFYuc2VyaWVzLmdyb3VwKSA9PSBudWxsID8gdm9pZCAwIDogVS56SW5kZXgpIC0gKChfID0gTi5zZXJpZXMuZ3JvdXApID09IG51bGwgPyB2b2lkIDAgOiBfLnpJbmRleCk7XG4gICAgICAgICAgICAgIHJldHVybiBSICE9PSAwICYmIEggPyBSIDogSSAhPT0gMCA/IEkgOiBqICE9PSAwID8gaiA6IE4uc2VyaWVzLmluZGV4ID4gVi5zZXJpZXMuaW5kZXggPyAtMSA6IDE7XG4gICAgICAgICAgICB9KHEsIHgpID4gMCkgJiYgKHEgPSB4KTtcbiAgICAgICAgICB9KSwgcTtcbiAgICAgICAgfVxuICAgICAgICBnZXRDaGFydENvb3JkaW5hdGVzRnJvbVBvaW50KHcsIEgpIHtcbiAgICAgICAgICBsZXQgeyB4QXhpczogQywgeUF4aXM6IHEgfSA9IHcuc2VyaWVzLCBtID0gdy5zaGFwZUFyZ3M7XG4gICAgICAgICAgaWYgKEMgJiYgcSkge1xuICAgICAgICAgICAgbGV0IGsgPSB3LmNsaWVudFggPz8gdy5wbG90WCA/PyAwLCB4ID0gdy5wbG90WSB8fCAwO1xuICAgICAgICAgICAgcmV0dXJuIHcuaXNOb2RlICYmIG0gJiYgaChtLngpICYmIGgobS55KSAmJiAoayA9IG0ueCwgeCA9IG0ueSksIEggPyB7IGNoYXJ0WDogcS5sZW4gKyBxLnBvcyAtIHgsIGNoYXJ0WTogQy5sZW4gKyBDLnBvcyAtIGsgfSA6IHsgY2hhcnRYOiBrICsgQy5wb3MsIGNoYXJ0WTogeCArIHEucG9zIH07XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmIChtICYmIG0ueCAmJiBtLnkpXG4gICAgICAgICAgICByZXR1cm4geyBjaGFydFg6IG0ueCwgY2hhcnRZOiBtLnkgfTtcbiAgICAgICAgfVxuICAgICAgICBnZXRDaGFydFBvc2l0aW9uKCkge1xuICAgICAgICAgIGlmICh0aGlzLmNoYXJ0UG9zaXRpb24pXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5jaGFydFBvc2l0aW9uO1xuICAgICAgICAgIGxldCB7IGNvbnRhaW5lcjogdyB9ID0gdGhpcy5jaGFydCwgSCA9IEwodyk7XG4gICAgICAgICAgdGhpcy5jaGFydFBvc2l0aW9uID0geyBsZWZ0OiBILmxlZnQsIHRvcDogSC50b3AsIHNjYWxlWDogMSwgc2NhbGVZOiAxIH07XG4gICAgICAgICAgbGV0IHsgb2Zmc2V0SGVpZ2h0OiBDLCBvZmZzZXRXaWR0aDogcSB9ID0gdztcbiAgICAgICAgICByZXR1cm4gcSA+IDIgJiYgQyA+IDIgJiYgKHRoaXMuY2hhcnRQb3NpdGlvbi5zY2FsZVggPSBILndpZHRoIC8gcSwgdGhpcy5jaGFydFBvc2l0aW9uLnNjYWxlWSA9IEguaGVpZ2h0IC8gQyksIHRoaXMuY2hhcnRQb3NpdGlvbjtcbiAgICAgICAgfVxuICAgICAgICBnZXRDb29yZGluYXRlcyh3KSB7XG4gICAgICAgICAgbGV0IEggPSB7IHhBeGlzOiBbXSwgeUF4aXM6IFtdIH07XG4gICAgICAgICAgZm9yIChsZXQgQyBvZiB0aGlzLmNoYXJ0LmF4ZXMpXG4gICAgICAgICAgICBIW0MuaXNYQXhpcyA/IFwieEF4aXNcIiA6IFwieUF4aXNcIl0ucHVzaCh7IGF4aXM6IEMsIHZhbHVlOiBDLnRvVmFsdWUod1tDLmhvcml6ID8gXCJjaGFydFhcIiA6IFwiY2hhcnRZXCJdKSB9KTtcbiAgICAgICAgICByZXR1cm4gSDtcbiAgICAgICAgfVxuICAgICAgICBnZXRIb3ZlckRhdGEodywgSCwgQywgcSwgbSwgaykge1xuICAgICAgICAgIGxldCB4ID0gW10sIE4gPSBmdW5jdGlvbihVKSB7XG4gICAgICAgICAgICByZXR1cm4gVS52aXNpYmxlICYmICEoIW0gJiYgVS5kaXJlY3RUb3VjaCkgJiYgeShVLm9wdGlvbnMuZW5hYmxlTW91c2VUcmFja2luZywgITApO1xuICAgICAgICAgIH0sIFYgPSBILCBSLCBJID0geyBjaGFydFg6IGsgPyBrLmNoYXJ0WCA6IHZvaWQgMCwgY2hhcnRZOiBrID8gay5jaGFydFkgOiB2b2lkIDAsIHNoYXJlZDogbSB9O1xuICAgICAgICAgIE8odGhpcywgXCJiZWZvcmVHZXRIb3ZlckRhdGFcIiwgSSksIFIgPSBWICYmICFWLnN0aWNreVRyYWNraW5nID8gW1ZdIDogQy5maWx0ZXIoKFUpID0+IFUuc3RpY2t5VHJhY2tpbmcgJiYgKEkuZmlsdGVyIHx8IE4pKFUpKTtcbiAgICAgICAgICBsZXQgaiA9IHEgJiYgdyB8fCAhayA/IHcgOiB0aGlzLmZpbmROZWFyZXN0S0RQb2ludChSLCBtLCBrKTtcbiAgICAgICAgICByZXR1cm4gViA9IGogJiYgai5zZXJpZXMsIGogJiYgKG0gJiYgIVYubm9TaGFyZWRUb29sdGlwID8gKFIgPSBDLmZpbHRlcihmdW5jdGlvbihVKSB7XG4gICAgICAgICAgICByZXR1cm4gSS5maWx0ZXIgPyBJLmZpbHRlcihVKSA6IE4oVSkgJiYgIVUubm9TaGFyZWRUb29sdGlwO1xuICAgICAgICAgIH0pKS5mb3JFYWNoKGZ1bmN0aW9uKFUpIHtcbiAgICAgICAgICAgIGxldCBfID0gZihVLnBvaW50cywgZnVuY3Rpb24ocjEpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIHIxLnggPT09IGoueCAmJiAhcjEuaXNOdWxsO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBnKF8pICYmIChVLmJvb3N0ZWQgJiYgVS5ib29zdCAmJiAoXyA9IFUuYm9vc3QuZ2V0UG9pbnQoXykpLCB4LnB1c2goXykpO1xuICAgICAgICAgIH0pIDogeC5wdXNoKGopKSwgTyh0aGlzLCBcImFmdGVyR2V0SG92ZXJEYXRhXCIsIEkgPSB7IGhvdmVyUG9pbnQ6IGogfSksIHsgaG92ZXJQb2ludDogSS5ob3ZlclBvaW50LCBob3ZlclNlcmllczogViwgaG92ZXJQb2ludHM6IHggfTtcbiAgICAgICAgfVxuICAgICAgICBnZXRQb2ludEZyb21FdmVudCh3KSB7XG4gICAgICAgICAgbGV0IEggPSB3LnRhcmdldCwgQztcbiAgICAgICAgICBmb3IgKDsgSCAmJiAhQzsgKVxuICAgICAgICAgICAgQyA9IEgucG9pbnQsIEggPSBILnBhcmVudE5vZGU7XG4gICAgICAgICAgcmV0dXJuIEM7XG4gICAgICAgIH1cbiAgICAgICAgb25UcmFja2VyTW91c2VPdXQodykge1xuICAgICAgICAgIGxldCBIID0gdGhpcy5jaGFydCwgQyA9IHcucmVsYXRlZFRhcmdldCwgcSA9IEguaG92ZXJTZXJpZXM7XG4gICAgICAgICAgdGhpcy5pc0RpcmVjdFRvdWNoID0gITEsICFxIHx8ICFDIHx8IHEuc3RpY2t5VHJhY2tpbmcgfHwgdGhpcy5pbkNsYXNzKEMsIFwiaGlnaGNoYXJ0cy10b29sdGlwXCIpIHx8IHRoaXMuaW5DbGFzcyhDLCBcImhpZ2hjaGFydHMtc2VyaWVzLVwiICsgcS5pbmRleCkgJiYgdGhpcy5pbkNsYXNzKEMsIFwiaGlnaGNoYXJ0cy10cmFja2VyXCIpIHx8IHEub25Nb3VzZU91dCgpO1xuICAgICAgICB9XG4gICAgICAgIGluQ2xhc3ModywgSCkge1xuICAgICAgICAgIGxldCBDID0gdywgcTtcbiAgICAgICAgICBmb3IgKDsgQzsgKSB7XG4gICAgICAgICAgICBpZiAocSA9IHUoQywgXCJjbGFzc1wiKSkge1xuICAgICAgICAgICAgICBpZiAocS5pbmRleE9mKEgpICE9PSAtMSlcbiAgICAgICAgICAgICAgICByZXR1cm4gITA7XG4gICAgICAgICAgICAgIGlmIChxLmluZGV4T2YoXCJoaWdoY2hhcnRzLWNvbnRhaW5lclwiKSAhPT0gLTEpXG4gICAgICAgICAgICAgICAgcmV0dXJuICExO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgQyA9IEMucGFyZW50RWxlbWVudDtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgY29uc3RydWN0b3IodywgSCkge1xuICAgICAgICAgIHZhciBDO1xuICAgICAgICAgIHRoaXMuaGFzRHJhZ2dlZCA9IDAsIHRoaXMucG9pbnRlckNhcHR1cmVFdmVudHNUb1VuYmluZCA9IFtdLCB0aGlzLmV2ZW50c1RvVW5iaW5kID0gW10sIHRoaXMub3B0aW9ucyA9IEgsIHRoaXMuY2hhcnQgPSB3LCB0aGlzLnJ1bkNoYXJ0Q2xpY2sgPSAhISgoQyA9IEguY2hhcnQuZXZlbnRzKSAhPSBudWxsICYmIEMuY2xpY2spLCB0aGlzLnBpbmNoRG93biA9IFtdLCB0aGlzLnNldERPTUV2ZW50cygpLCBPKHRoaXMsIFwiYWZ0ZXJJbml0XCIpO1xuICAgICAgICB9XG4gICAgICAgIG5vcm1hbGl6ZSh3LCBIKSB7XG4gICAgICAgICAgbGV0IEMgPSB3LnRvdWNoZXMsIHEgPSBDID8gQy5sZW5ndGggPyBDLml0ZW0oMCkgOiB5KEMuY2hhbmdlZFRvdWNoZXMsIHcuY2hhbmdlZFRvdWNoZXMpWzBdIDogdztcbiAgICAgICAgICBIIHx8IChIID0gdGhpcy5nZXRDaGFydFBvc2l0aW9uKCkpO1xuICAgICAgICAgIGxldCBtID0gcS5wYWdlWCAtIEgubGVmdCwgayA9IHEucGFnZVkgLSBILnRvcDtcbiAgICAgICAgICByZXR1cm4geih3LCB7IGNoYXJ0WDogTWF0aC5yb3VuZChtIC89IEguc2NhbGVYKSwgY2hhcnRZOiBNYXRoLnJvdW5kKGsgLz0gSC5zY2FsZVkpIH0pO1xuICAgICAgICB9XG4gICAgICAgIG9uQ29udGFpbmVyQ2xpY2sodykge1xuICAgICAgICAgIGxldCBIID0gdGhpcy5jaGFydCwgQyA9IEguaG92ZXJQb2ludCwgcSA9IHRoaXMubm9ybWFsaXplKHcpLCBtID0gSC5wbG90TGVmdCwgayA9IEgucGxvdFRvcDtcbiAgICAgICAgICAhSC5jYW5jZWxDbGljayAmJiAoQyAmJiB0aGlzLmluQ2xhc3MocS50YXJnZXQsIFwiaGlnaGNoYXJ0cy10cmFja2VyXCIpID8gKE8oQy5zZXJpZXMsIFwiY2xpY2tcIiwgeihxLCB7IHBvaW50OiBDIH0pKSwgSC5ob3ZlclBvaW50ICYmIEMuZmlyZVBvaW50RXZlbnQoXCJjbGlja1wiLCBxKSkgOiAoeihxLCB0aGlzLmdldENvb3JkaW5hdGVzKHEpKSwgSC5pc0luc2lkZVBsb3QocS5jaGFydFggLSBtLCBxLmNoYXJ0WSAtIGssIHsgdmlzaWJsZVBsb3RPbmx5OiAhMCB9KSAmJiBPKEgsIFwiY2xpY2tcIiwgcSkpKTtcbiAgICAgICAgfVxuICAgICAgICBvbkNvbnRhaW5lck1vdXNlRG93bih3KSB7XG4gICAgICAgICAgdmFyIEM7XG4gICAgICAgICAgbGV0IEggPSAoMSAmICh3LmJ1dHRvbnMgfHwgdy5idXR0b24pKSA9PSAxO1xuICAgICAgICAgIHcgPSB0aGlzLm5vcm1hbGl6ZSh3KSwgaS5pc0ZpcmVmb3ggJiYgdy5idXR0b24gIT09IDAgJiYgdGhpcy5vbkNvbnRhaW5lck1vdXNlTW92ZSh3KSwgKHcuYnV0dG9uID09PSB2b2lkIDAgfHwgSCkgJiYgKHRoaXMuem9vbU9wdGlvbih3KSwgSCAmJiAoKEMgPSB3LnByZXZlbnREZWZhdWx0KSA9PSBudWxsIHx8IEMuY2FsbCh3KSksIHRoaXMuZHJhZ1N0YXJ0KHcpKTtcbiAgICAgICAgfVxuICAgICAgICBvbkNvbnRhaW5lck1vdXNlTGVhdmUodykge1xuICAgICAgICAgIGxldCB7IHBvaW50ZXI6IEggfSA9IHBbeShGLmhvdmVyQ2hhcnRJbmRleCwgLTEpXSB8fCB7fTtcbiAgICAgICAgICB3ID0gdGhpcy5ub3JtYWxpemUodyksIHRoaXMub25Db250YWluZXJNb3VzZU1vdmUodyksIEggJiYgIXRoaXMuaW5DbGFzcyh3LnJlbGF0ZWRUYXJnZXQsIFwiaGlnaGNoYXJ0cy10b29sdGlwXCIpICYmIChILnJlc2V0KCksIEguY2hhcnRQb3NpdGlvbiA9IHZvaWQgMCk7XG4gICAgICAgIH1cbiAgICAgICAgb25Db250YWluZXJNb3VzZUVudGVyKCkge1xuICAgICAgICAgIGRlbGV0ZSB0aGlzLmNoYXJ0UG9zaXRpb247XG4gICAgICAgIH1cbiAgICAgICAgb25Db250YWluZXJNb3VzZU1vdmUodykge1xuICAgICAgICAgIGxldCBIID0gdGhpcy5jaGFydCwgQyA9IEgudG9vbHRpcCwgcSA9IHRoaXMubm9ybWFsaXplKHcpO1xuICAgICAgICAgIHRoaXMuc2V0SG92ZXJDaGFydEluZGV4KHcpLCAoSC5tb3VzZUlzRG93biA9PT0gXCJtb3VzZWRvd25cIiB8fCB0aGlzLnRvdWNoU2VsZWN0KHEpKSAmJiB0aGlzLmRyYWcocSksICFILm9wZW5NZW51ICYmICh0aGlzLmluQ2xhc3MocS50YXJnZXQsIFwiaGlnaGNoYXJ0cy10cmFja2VyXCIpIHx8IEguaXNJbnNpZGVQbG90KHEuY2hhcnRYIC0gSC5wbG90TGVmdCwgcS5jaGFydFkgLSBILnBsb3RUb3AsIHsgdmlzaWJsZVBsb3RPbmx5OiAhMCB9KSkgJiYgIShDICYmIEMuc2hvdWxkU3RpY2tPbkNvbnRhY3QocSkpICYmICh0aGlzLmluQ2xhc3MocS50YXJnZXQsIFwiaGlnaGNoYXJ0cy1uby10b29sdGlwXCIpID8gdGhpcy5yZXNldCghMSwgMCkgOiB0aGlzLnJ1blBvaW50QWN0aW9ucyhxKSk7XG4gICAgICAgIH1cbiAgICAgICAgb25Eb2N1bWVudFRvdWNoRW5kKHcpIHtcbiAgICAgICAgICB0aGlzLm9uRG9jdW1lbnRNb3VzZVVwKHcpO1xuICAgICAgICB9XG4gICAgICAgIG9uQ29udGFpbmVyVG91Y2hNb3ZlKHcpIHtcbiAgICAgICAgICB0aGlzLnRvdWNoU2VsZWN0KHcpID8gdGhpcy5vbkNvbnRhaW5lck1vdXNlTW92ZSh3KSA6IHRoaXMudG91Y2godyk7XG4gICAgICAgIH1cbiAgICAgICAgb25Db250YWluZXJUb3VjaFN0YXJ0KHcpIHtcbiAgICAgICAgICB0aGlzLnRvdWNoU2VsZWN0KHcpID8gdGhpcy5vbkNvbnRhaW5lck1vdXNlRG93bih3KSA6ICh0aGlzLnpvb21PcHRpb24odyksIHRoaXMudG91Y2godywgITApKTtcbiAgICAgICAgfVxuICAgICAgICBvbkRvY3VtZW50TW91c2VNb3ZlKHcpIHtcbiAgICAgICAgICBsZXQgSCA9IHRoaXMuY2hhcnQsIEMgPSBILnRvb2x0aXAsIHEgPSB0aGlzLmNoYXJ0UG9zaXRpb24sIG0gPSB0aGlzLm5vcm1hbGl6ZSh3LCBxKTtcbiAgICAgICAgICAhcSB8fCBILmlzSW5zaWRlUGxvdChtLmNoYXJ0WCAtIEgucGxvdExlZnQsIG0uY2hhcnRZIC0gSC5wbG90VG9wLCB7IHZpc2libGVQbG90T25seTogITAgfSkgfHwgQyAmJiBDLnNob3VsZFN0aWNrT25Db250YWN0KG0pIHx8IG0udGFyZ2V0ICE9PSBILmNvbnRhaW5lci5vd25lckRvY3VtZW50ICYmIHRoaXMuaW5DbGFzcyhtLnRhcmdldCwgXCJoaWdoY2hhcnRzLXRyYWNrZXJcIikgfHwgdGhpcy5yZXNldCgpO1xuICAgICAgICB9XG4gICAgICAgIG9uRG9jdW1lbnRNb3VzZVVwKHcpIHtcbiAgICAgICAgICB2YXIgSCwgQztcbiAgICAgICAgICAoQyA9IChIID0gcFt5KEYuaG92ZXJDaGFydEluZGV4LCAtMSldKSA9PSBudWxsID8gdm9pZCAwIDogSC5wb2ludGVyKSA9PSBudWxsIHx8IEMuZHJvcCh3KTtcbiAgICAgICAgfVxuICAgICAgICBwaW5jaCh3KSB7XG4gICAgICAgICAgbGV0IEggPSB0aGlzLCB7IGNoYXJ0OiBDLCBoYXNab29tOiBxLCBsYXN0VG91Y2hlczogbSB9ID0gSCwgayA9IFtdLm1hcC5jYWxsKHcudG91Y2hlcyB8fCBbXSwgKEkpID0+IEgubm9ybWFsaXplKEkpKSwgeCA9IGsubGVuZ3RoLCBOID0geCA9PT0gMSAmJiAoSC5pbkNsYXNzKHcudGFyZ2V0LCBcImhpZ2hjaGFydHMtdHJhY2tlclwiKSAmJiBDLnJ1blRyYWNrZXJDbGljayB8fCBILnJ1bkNoYXJ0Q2xpY2spLCBWID0gQy50b29sdGlwLCBSID0geCA9PT0gMSAmJiB5KFYgPT0gbnVsbCA/IHZvaWQgMCA6IFYub3B0aW9ucy5mb2xsb3dUb3VjaE1vdmUsICEwKTtcbiAgICAgICAgICB4ID4gMSA/IEguaW5pdGlhdGVkID0gITAgOiBSICYmIChILmluaXRpYXRlZCA9ICExKSwgcSAmJiBILmluaXRpYXRlZCAmJiAhTiAmJiB3LmNhbmNlbGFibGUgIT09ICExICYmIHcucHJldmVudERlZmF1bHQoKSwgdy50eXBlID09PSBcInRvdWNoc3RhcnRcIiA/IChILnBpbmNoRG93biA9IGssIEgucmVzID0gITAsIEMubW91c2VEb3duWCA9IHcuY2hhcnRYKSA6IFIgPyB0aGlzLnJ1blBvaW50QWN0aW9ucyhILm5vcm1hbGl6ZSh3KSkgOiBtICYmIChPKEMsIFwidG91Y2hwYW5cIiwgeyBvcmlnaW5hbEV2ZW50OiB3LCB0b3VjaGVzOiBrIH0sICgpID0+IHtcbiAgICAgICAgICAgIGxldCBJID0gKGopID0+IHtcbiAgICAgICAgICAgICAgbGV0IFUgPSBqWzBdLCBfID0galsxXSB8fCBVO1xuICAgICAgICAgICAgICByZXR1cm4geyB4OiBVLmNoYXJ0WCwgeTogVS5jaGFydFksIHdpZHRoOiBfLmNoYXJ0WCAtIFUuY2hhcnRYLCBoZWlnaHQ6IF8uY2hhcnRZIC0gVS5jaGFydFkgfTtcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICBDLnRyYW5zZm9ybSh7IGF4ZXM6IEMuYXhlcy5maWx0ZXIoKGopID0+IGouem9vbUVuYWJsZWQgJiYgKHRoaXMuem9vbUhvciAmJiBqLmhvcml6IHx8IHRoaXMuem9vbVZlcnQgJiYgIWouaG9yaXopKSwgdG86IEkoayksIGZyb206IEkobSksIHRyaWdnZXI6IHcudHlwZSB9KTtcbiAgICAgICAgICB9KSwgSC5yZXMgJiYgKEgucmVzID0gITEsIHRoaXMucmVzZXQoITEsIDApKSksIEgubGFzdFRvdWNoZXMgPSBrO1xuICAgICAgICB9XG4gICAgICAgIHJlc2V0KHcsIEgpIHtcbiAgICAgICAgICBsZXQgQyA9IHRoaXMuY2hhcnQsIHEgPSBDLmhvdmVyU2VyaWVzLCBtID0gQy5ob3ZlclBvaW50LCBrID0gQy5ob3ZlclBvaW50cywgeCA9IEMudG9vbHRpcCwgTiA9IHggJiYgeC5zaGFyZWQgPyBrIDogbTtcbiAgICAgICAgICB3ICYmIE4gJiYgWChOKS5mb3JFYWNoKGZ1bmN0aW9uKFYpIHtcbiAgICAgICAgICAgIFYuc2VyaWVzLmlzQ2FydGVzaWFuICYmIFYucGxvdFggPT09IHZvaWQgMCAmJiAodyA9ICExKTtcbiAgICAgICAgICB9KSwgdyA/IHggJiYgTiAmJiBYKE4pLmxlbmd0aCAmJiAoeC5yZWZyZXNoKE4pLCB4LnNoYXJlZCAmJiBrID8gay5mb3JFYWNoKGZ1bmN0aW9uKFYpIHtcbiAgICAgICAgICAgIFYuc2V0U3RhdGUoVi5zdGF0ZSwgITApLCBWLnNlcmllcy5pc0NhcnRlc2lhbiAmJiAoVi5zZXJpZXMueEF4aXMuY3Jvc3NoYWlyICYmIFYuc2VyaWVzLnhBeGlzLmRyYXdDcm9zc2hhaXIobnVsbCwgViksIFYuc2VyaWVzLnlBeGlzLmNyb3NzaGFpciAmJiBWLnNlcmllcy55QXhpcy5kcmF3Q3Jvc3NoYWlyKG51bGwsIFYpKTtcbiAgICAgICAgICB9KSA6IG0gJiYgKG0uc2V0U3RhdGUobS5zdGF0ZSwgITApLCBDLmF4ZXMuZm9yRWFjaChmdW5jdGlvbihWKSB7XG4gICAgICAgICAgICBWLmNyb3NzaGFpciAmJiBtLnNlcmllc1tWLmNvbGxdID09PSBWICYmIFYuZHJhd0Nyb3NzaGFpcihudWxsLCBtKTtcbiAgICAgICAgICB9KSkpIDogKG0gJiYgbS5vbk1vdXNlT3V0KCksIGsgJiYgay5mb3JFYWNoKGZ1bmN0aW9uKFYpIHtcbiAgICAgICAgICAgIFYuc2V0U3RhdGUoKTtcbiAgICAgICAgICB9KSwgcSAmJiBxLm9uTW91c2VPdXQoKSwgeCAmJiB4LmhpZGUoSCksIHRoaXMudW5Eb2NNb3VzZU1vdmUgJiYgKHRoaXMudW5Eb2NNb3VzZU1vdmUgPSB0aGlzLnVuRG9jTW91c2VNb3ZlKCkpLCBDLmF4ZXMuZm9yRWFjaChmdW5jdGlvbihWKSB7XG4gICAgICAgICAgICBWLmhpZGVDcm9zc2hhaXIoKTtcbiAgICAgICAgICB9KSwgQy5ob3ZlclBvaW50cyA9IEMuaG92ZXJQb2ludCA9IHZvaWQgMCk7XG4gICAgICAgIH1cbiAgICAgICAgcnVuUG9pbnRBY3Rpb25zKHcsIEgsIEMpIHtcbiAgICAgICAgICBsZXQgcSA9IHRoaXMuY2hhcnQsIG0gPSBxLnNlcmllcywgayA9IHEudG9vbHRpcCAmJiBxLnRvb2x0aXAub3B0aW9ucy5lbmFibGVkID8gcS50b29sdGlwIDogdm9pZCAwLCB4ID0gISFrICYmIGsuc2hhcmVkLCBOID0gSCB8fCBxLmhvdmVyUG9pbnQsIFYgPSBOICYmIE4uc2VyaWVzIHx8IHEuaG92ZXJTZXJpZXMsIFIgPSAoIXcgfHwgdy50eXBlICE9PSBcInRvdWNobW92ZVwiKSAmJiAoISFIIHx8IFYgJiYgVi5kaXJlY3RUb3VjaCAmJiB0aGlzLmlzRGlyZWN0VG91Y2gpLCBJID0gdGhpcy5nZXRIb3ZlckRhdGEoTiwgViwgbSwgUiwgeCwgdyk7XG4gICAgICAgICAgTiA9IEkuaG92ZXJQb2ludCwgViA9IEkuaG92ZXJTZXJpZXM7XG4gICAgICAgICAgbGV0IGogPSBJLmhvdmVyUG9pbnRzLCBVID0gViAmJiBWLnRvb2x0aXBPcHRpb25zLmZvbGxvd1BvaW50ZXIgJiYgIVYudG9vbHRpcE9wdGlvbnMuc3BsaXQsIF8gPSB4ICYmIFYgJiYgIVYubm9TaGFyZWRUb29sdGlwO1xuICAgICAgICAgIGlmIChOICYmIChDIHx8IE4gIT09IHEuaG92ZXJQb2ludCB8fCBrICYmIGsuaXNIaWRkZW4pKSB7XG4gICAgICAgICAgICBpZiAoKHEuaG92ZXJQb2ludHMgfHwgW10pLmZvckVhY2goZnVuY3Rpb24ocjEpIHtcbiAgICAgICAgICAgICAgai5pbmRleE9mKHIxKSA9PT0gLTEgJiYgcjEuc2V0U3RhdGUoKTtcbiAgICAgICAgICAgIH0pLCBxLmhvdmVyU2VyaWVzICE9PSBWICYmIFYub25Nb3VzZU92ZXIoKSwgdGhpcy5hcHBseUluYWN0aXZlU3RhdGUoaiksIChqIHx8IFtdKS5mb3JFYWNoKGZ1bmN0aW9uKHIxKSB7XG4gICAgICAgICAgICAgIHIxLnNldFN0YXRlKFwiaG92ZXJcIik7XG4gICAgICAgICAgICB9KSwgcS5ob3ZlclBvaW50ICYmIHEuaG92ZXJQb2ludC5maXJlUG9pbnRFdmVudChcIm1vdXNlT3V0XCIpLCAhTi5zZXJpZXMpXG4gICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIHEuaG92ZXJQb2ludHMgPSBqLCBxLmhvdmVyUG9pbnQgPSBOLCBOLmZpcmVQb2ludEV2ZW50KFwibW91c2VPdmVyXCIsIHZvaWQgMCwgKCkgPT4ge1xuICAgICAgICAgICAgICBrICYmIE4gJiYgay5yZWZyZXNoKF8gPyBqIDogTiwgdyk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9IGVsc2UgaWYgKFUgJiYgayAmJiAhay5pc0hpZGRlbikge1xuICAgICAgICAgICAgbGV0IHIxID0gay5nZXRBbmNob3IoW3t9XSwgdyk7XG4gICAgICAgICAgICBxLmlzSW5zaWRlUGxvdChyMVswXSwgcjFbMV0sIHsgdmlzaWJsZVBsb3RPbmx5OiAhMCB9KSAmJiBrLnVwZGF0ZVBvc2l0aW9uKHsgcGxvdFg6IHIxWzBdLCBwbG90WTogcjFbMV0gfSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHRoaXMudW5Eb2NNb3VzZU1vdmUgfHwgKHRoaXMudW5Eb2NNb3VzZU1vdmUgPSBNKHEuY29udGFpbmVyLm93bmVyRG9jdW1lbnQsIFwibW91c2Vtb3ZlXCIsIChyMSkgPT4ge1xuICAgICAgICAgICAgdmFyIEssIFE7XG4gICAgICAgICAgICByZXR1cm4gKFEgPSAoSyA9IHBbRi5ob3ZlckNoYXJ0SW5kZXggPz8gLTFdKSA9PSBudWxsID8gdm9pZCAwIDogSy5wb2ludGVyKSA9PSBudWxsID8gdm9pZCAwIDogUS5vbkRvY3VtZW50TW91c2VNb3ZlKHIxKTtcbiAgICAgICAgICB9KSwgdGhpcy5ldmVudHNUb1VuYmluZC5wdXNoKHRoaXMudW5Eb2NNb3VzZU1vdmUpKSwgcS5heGVzLmZvckVhY2goZnVuY3Rpb24ocjEpIHtcbiAgICAgICAgICAgIGxldCBLLCBRID0geSgocjEuY3Jvc3NoYWlyIHx8IHt9KS5zbmFwLCAhMCk7XG4gICAgICAgICAgICAhUSB8fCAoSyA9IHEuaG92ZXJQb2ludCkgJiYgSy5zZXJpZXNbcjEuY29sbF0gPT09IHIxIHx8IChLID0gZihqLCAoRSkgPT4gRS5zZXJpZXMgJiYgRS5zZXJpZXNbcjEuY29sbF0gPT09IHIxKSksIEsgfHwgIVEgPyByMS5kcmF3Q3Jvc3NoYWlyKHcsIEspIDogcjEuaGlkZUNyb3NzaGFpcigpO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIHNldERPTUV2ZW50cygpIHtcbiAgICAgICAgICBsZXQgdyA9IHRoaXMuY2hhcnQuY29udGFpbmVyLCBIID0gdy5vd25lckRvY3VtZW50O1xuICAgICAgICAgIHcub25tb3VzZWRvd24gPSB0aGlzLm9uQ29udGFpbmVyTW91c2VEb3duLmJpbmQodGhpcyksIHcub25tb3VzZW1vdmUgPSB0aGlzLm9uQ29udGFpbmVyTW91c2VNb3ZlLmJpbmQodGhpcyksIHcub25jbGljayA9IHRoaXMub25Db250YWluZXJDbGljay5iaW5kKHRoaXMpLCB0aGlzLmV2ZW50c1RvVW5iaW5kLnB1c2goTSh3LCBcIm1vdXNlZW50ZXJcIiwgdGhpcy5vbkNvbnRhaW5lck1vdXNlRW50ZXIuYmluZCh0aGlzKSksIE0odywgXCJtb3VzZWxlYXZlXCIsIHRoaXMub25Db250YWluZXJNb3VzZUxlYXZlLmJpbmQodGhpcykpKSwgRi51bmJpbmREb2N1bWVudE1vdXNlVXAgfHwgKEYudW5iaW5kRG9jdW1lbnRNb3VzZVVwID0gW10pLCBGLnVuYmluZERvY3VtZW50TW91c2VVcC5wdXNoKE0oSCwgXCJtb3VzZXVwXCIsIHRoaXMub25Eb2N1bWVudE1vdXNlVXAuYmluZCh0aGlzKSkpO1xuICAgICAgICAgIGxldCBDID0gdGhpcy5jaGFydC5yZW5kZXJUby5wYXJlbnRFbGVtZW50O1xuICAgICAgICAgIGZvciAoOyBDICYmIEMudGFnTmFtZSAhPT0gXCJCT0RZXCI7IClcbiAgICAgICAgICAgIHRoaXMuZXZlbnRzVG9VbmJpbmQucHVzaChNKEMsIFwic2Nyb2xsXCIsICgpID0+IHtcbiAgICAgICAgICAgICAgZGVsZXRlIHRoaXMuY2hhcnRQb3NpdGlvbjtcbiAgICAgICAgICAgIH0pKSwgQyA9IEMucGFyZW50RWxlbWVudDtcbiAgICAgICAgICB0aGlzLmV2ZW50c1RvVW5iaW5kLnB1c2goTSh3LCBcInRvdWNoc3RhcnRcIiwgdGhpcy5vbkNvbnRhaW5lclRvdWNoU3RhcnQuYmluZCh0aGlzKSwgeyBwYXNzaXZlOiAhMSB9KSwgTSh3LCBcInRvdWNobW92ZVwiLCB0aGlzLm9uQ29udGFpbmVyVG91Y2hNb3ZlLmJpbmQodGhpcyksIHsgcGFzc2l2ZTogITEgfSkpLCBGLnVuYmluZERvY3VtZW50VG91Y2hFbmQgfHwgKEYudW5iaW5kRG9jdW1lbnRUb3VjaEVuZCA9IE0oSCwgXCJ0b3VjaGVuZFwiLCB0aGlzLm9uRG9jdW1lbnRUb3VjaEVuZC5iaW5kKHRoaXMpLCB7IHBhc3NpdmU6ICExIH0pKSwgdGhpcy5zZXRQb2ludGVyQ2FwdHVyZSgpLCBNKHRoaXMuY2hhcnQsIFwicmVkcmF3XCIsIHRoaXMuc2V0UG9pbnRlckNhcHR1cmUuYmluZCh0aGlzKSk7XG4gICAgICAgIH1cbiAgICAgICAgc2V0UG9pbnRlckNhcHR1cmUoKSB7XG4gICAgICAgICAgdmFyIG0sIGs7XG4gICAgICAgICAgaWYgKCFiKVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgIGxldCB3ID0gdGhpcy5wb2ludGVyQ2FwdHVyZUV2ZW50c1RvVW5iaW5kLCBIID0gdGhpcy5jaGFydCwgQyA9IEguY29udGFpbmVyLCBxID0geSgobSA9IEgub3B0aW9ucy50b29sdGlwKSA9PSBudWxsID8gdm9pZCAwIDogbS5mb2xsb3dUb3VjaE1vdmUsICEwKSAmJiBILnNlcmllcy5zb21lKCh4KSA9PiB4Lm9wdGlvbnMuZmluZE5lYXJlc3RQb2ludEJ5LmluZGV4T2YoXCJ5XCIpID4gLTEpO1xuICAgICAgICAgICF0aGlzLmhhc1BvaW50ZXJDYXB0dXJlICYmIHEgPyAody5wdXNoKE0oQywgXCJwb2ludGVyZG93blwiLCAoeCkgPT4ge1xuICAgICAgICAgICAgdmFyIE4sIFY7XG4gICAgICAgICAgICAoTiA9IHgudGFyZ2V0KSAhPSBudWxsICYmIE4uaGFzUG9pbnRlckNhcHR1cmUoeC5wb2ludGVySWQpICYmICgoViA9IHgudGFyZ2V0KSA9PSBudWxsIHx8IFYucmVsZWFzZVBvaW50ZXJDYXB0dXJlKHgucG9pbnRlcklkKSk7XG4gICAgICAgICAgfSksIE0oQywgXCJwb2ludGVybW92ZVwiLCAoeCkgPT4ge1xuICAgICAgICAgICAgdmFyIE4sIFY7XG4gICAgICAgICAgICAoViA9IChOID0gSC5wb2ludGVyKSA9PSBudWxsID8gdm9pZCAwIDogTi5nZXRQb2ludEZyb21FdmVudCh4KSkgPT0gbnVsbCB8fCBWLm9uTW91c2VPdmVyKHgpO1xuICAgICAgICAgIH0pKSwgSC5zdHlsZWRNb2RlIHx8IEEoQywgeyBcInRvdWNoLWFjdGlvblwiOiBcIm5vbmVcIiB9KSwgQy5jbGFzc05hbWUgKz0gXCIgaGlnaGNoYXJ0cy1uby10b3VjaC1hY3Rpb25cIiwgdGhpcy5oYXNQb2ludGVyQ2FwdHVyZSA9ICEwKSA6IHRoaXMuaGFzUG9pbnRlckNhcHR1cmUgJiYgIXEgJiYgKHcuZm9yRWFjaCgoeCkgPT4geCgpKSwgdy5sZW5ndGggPSAwLCBILnN0eWxlZE1vZGUgfHwgQShDLCB7IFwidG91Y2gtYWN0aW9uXCI6IHkoKGsgPSBILm9wdGlvbnMuY2hhcnQuc3R5bGUpID09IG51bGwgPyB2b2lkIDAgOiBrW1widG91Y2gtYWN0aW9uXCJdLCBcIm1hbmlwdWxhdGlvblwiKSB9KSwgQy5jbGFzc05hbWUgPSBDLmNsYXNzTmFtZS5yZXBsYWNlKFwiIGhpZ2hjaGFydHMtbm8tdG91Y2gtYWN0aW9uXCIsIFwiXCIpLCB0aGlzLmhhc1BvaW50ZXJDYXB0dXJlID0gITEpO1xuICAgICAgICB9XG4gICAgICAgIHNldEhvdmVyQ2hhcnRJbmRleCh3KSB7XG4gICAgICAgICAgdmFyIHE7XG4gICAgICAgICAgbGV0IEggPSB0aGlzLmNoYXJ0LCBDID0gaS5jaGFydHNbeShGLmhvdmVyQ2hhcnRJbmRleCwgLTEpXTtcbiAgICAgICAgICBpZiAoQyAmJiBDICE9PSBIKSB7XG4gICAgICAgICAgICBsZXQgbSA9IHsgcmVsYXRlZFRhcmdldDogSC5jb250YWluZXIgfTtcbiAgICAgICAgICAgIHcgJiYgISh3ICE9IG51bGwgJiYgdy5yZWxhdGVkVGFyZ2V0KSAmJiAodyA9IHsgLi4ubSwgLi4udyB9KSwgKHEgPSBDLnBvaW50ZXIpID09IG51bGwgfHwgcS5vbkNvbnRhaW5lck1vdXNlTGVhdmUodyB8fCBtKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgQyAmJiBDLm1vdXNlSXNEb3duIHx8IChGLmhvdmVyQ2hhcnRJbmRleCA9IEguaW5kZXgpO1xuICAgICAgICB9XG4gICAgICAgIHRvdWNoKHcsIEgpIHtcbiAgICAgICAgICBsZXQgQywgeyBjaGFydDogcSwgcGluY2hEb3duOiBtID0gW10gfSA9IHRoaXM7XG4gICAgICAgICAgdGhpcy5zZXRIb3ZlckNoYXJ0SW5kZXgoKSwgKHcgPSB0aGlzLm5vcm1hbGl6ZSh3KSkudG91Y2hlcy5sZW5ndGggPT09IDEgPyBxLmlzSW5zaWRlUGxvdCh3LmNoYXJ0WCAtIHEucGxvdExlZnQsIHcuY2hhcnRZIC0gcS5wbG90VG9wLCB7IHZpc2libGVQbG90T25seTogITAgfSkgJiYgIXEub3Blbk1lbnUgPyAoSCAmJiB0aGlzLnJ1blBvaW50QWN0aW9ucyh3KSwgdy50eXBlID09PSBcInRvdWNobW92ZVwiICYmIChDID0gISFtWzBdICYmIE1hdGgucG93KG1bMF0uY2hhcnRYIC0gdy5jaGFydFgsIDIpICsgTWF0aC5wb3cobVswXS5jaGFydFkgLSB3LmNoYXJ0WSwgMikgPj0gMTYpLCB5KEMsICEwKSAmJiB0aGlzLnBpbmNoKHcpKSA6IEggJiYgdGhpcy5yZXNldCgpIDogdy50b3VjaGVzLmxlbmd0aCA9PT0gMiAmJiB0aGlzLnBpbmNoKHcpO1xuICAgICAgICB9XG4gICAgICAgIHRvdWNoU2VsZWN0KHcpIHtcbiAgICAgICAgICByZXR1cm4gISEodGhpcy5jaGFydC56b29taW5nLnNpbmdsZVRvdWNoICYmIHcudG91Y2hlcyAmJiB3LnRvdWNoZXMubGVuZ3RoID09PSAxKTtcbiAgICAgICAgfVxuICAgICAgICB6b29tT3B0aW9uKHcpIHtcbiAgICAgICAgICBsZXQgSCA9IHRoaXMuY2hhcnQsIEMgPSBILmludmVydGVkLCBxID0gSC56b29taW5nLnR5cGUgfHwgXCJcIiwgbSwgaztcbiAgICAgICAgICAvdG91Y2gvLnRlc3Qody50eXBlKSAmJiAocSA9IHkoSC56b29taW5nLnBpbmNoVHlwZSwgcSkpLCB0aGlzLnpvb21YID0gbSA9IC94Ly50ZXN0KHEpLCB0aGlzLnpvb21ZID0gayA9IC95Ly50ZXN0KHEpLCB0aGlzLnpvb21Ib3IgPSBtICYmICFDIHx8IGsgJiYgQywgdGhpcy56b29tVmVydCA9IGsgJiYgIUMgfHwgbSAmJiBDLCB0aGlzLmhhc1pvb20gPSBtIHx8IGs7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiAocyA9IEYgfHwgKEYgPSB7fSkpLmNvbXBvc2UgPSBmdW5jdGlvbihUKSB7XG4gICAgICAgIEIoZCwgXCJDb3JlLlBvaW50ZXJcIikgJiYgTShULCBcImJlZm9yZVJlbmRlclwiLCBmdW5jdGlvbigpIHtcbiAgICAgICAgICB0aGlzLnBvaW50ZXIgPSBuZXcgcyh0aGlzLCB0aGlzLm9wdGlvbnMpO1xuICAgICAgICB9KTtcbiAgICAgIH0sIEY7XG4gICAgfSksIG4obywgXCJDb3JlL0xlZ2VuZC9MZWdlbmRTeW1ib2wuanNcIiwgW29bXCJDb3JlL1V0aWxpdGllcy5qc1wiXV0sIGZ1bmN0aW9uKHIpIHtcbiAgICAgIHZhciBpO1xuICAgICAgbGV0IHsgZXh0ZW5kOiBhLCBtZXJnZTogcywgcGljazogbCB9ID0gcjtcbiAgICAgIHJldHVybiBmdW5jdGlvbihwKSB7XG4gICAgICAgIGZ1bmN0aW9uIGQoYiwgTSwgdSkge1xuICAgICAgICAgIHZhciBDLCBxO1xuICAgICAgICAgIGxldCBBID0gdGhpcy5sZWdlbmRJdGVtID0gdGhpcy5sZWdlbmRJdGVtIHx8IHt9LCB7IGNoYXJ0OiB6LCBvcHRpb25zOiBmIH0gPSB0aGlzLCB7IGJhc2VsaW5lOiBPID0gMCwgc3ltYm9sV2lkdGg6IGgsIHN5bWJvbEhlaWdodDogZyB9ID0gYiwgdiA9IHRoaXMuc3ltYm9sIHx8IFwiY2lyY2xlXCIsIEwgPSBnIC8gMiwgeSA9IHoucmVuZGVyZXIsIEIgPSBBLmdyb3VwLCBYID0gTyAtIE1hdGgucm91bmQoKCgoQyA9IGIuZm9udE1ldHJpY3MpID09IG51bGwgPyB2b2lkIDAgOiBDLmIpIHx8IGcpICogKHUgPyAwLjQgOiAwLjMpKSwgRiA9IHt9LCBULCB3ID0gZi5tYXJrZXIsIEggPSAwO1xuICAgICAgICAgIGlmICh6LnN0eWxlZE1vZGUgfHwgKEZbXCJzdHJva2Utd2lkdGhcIl0gPSBNYXRoLm1pbihmLmxpbmVXaWR0aCB8fCAwLCAyNCksIGYuZGFzaFN0eWxlID8gRi5kYXNoc3R5bGUgPSBmLmRhc2hTdHlsZSA6IGYubGluZWNhcCA9PT0gXCJzcXVhcmVcIiB8fCAoRltcInN0cm9rZS1saW5lY2FwXCJdID0gXCJyb3VuZFwiKSksIEEubGluZSA9IHkucGF0aCgpLmFkZENsYXNzKFwiaGlnaGNoYXJ0cy1ncmFwaFwiKS5hdHRyKEYpLmFkZChCKSwgdSAmJiAoQS5hcmVhID0geS5wYXRoKCkuYWRkQ2xhc3MoXCJoaWdoY2hhcnRzLWFyZWFcIikuYWRkKEIpKSwgRltcInN0cm9rZS1saW5lY2FwXCJdICYmIChIID0gTWF0aC5taW4oQS5saW5lLnN0cm9rZVdpZHRoKCksIGgpIC8gMiksIGgpIHtcbiAgICAgICAgICAgIGxldCBtID0gW1tcIk1cIiwgSCwgWF0sIFtcIkxcIiwgaCAtIEgsIFhdXTtcbiAgICAgICAgICAgIEEubGluZS5hdHRyKHsgZDogbSB9KSwgKHEgPSBBLmFyZWEpID09IG51bGwgfHwgcS5hdHRyKHsgZDogWy4uLm0sIFtcIkxcIiwgaCAtIEgsIE9dLCBbXCJMXCIsIEgsIE9dXSB9KTtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKHcgJiYgdy5lbmFibGVkICE9PSAhMSAmJiBoKSB7XG4gICAgICAgICAgICBsZXQgbSA9IE1hdGgubWluKGwody5yYWRpdXMsIEwpLCBMKTtcbiAgICAgICAgICAgIHYuaW5kZXhPZihcInVybFwiKSA9PT0gMCAmJiAodyA9IHModywgeyB3aWR0aDogZywgaGVpZ2h0OiBnIH0pLCBtID0gMCksIEEuc3ltYm9sID0gVCA9IHkuc3ltYm9sKHYsIGggLyAyIC0gbSwgWCAtIG0sIDIgKiBtLCAyICogbSwgYSh7IGNvbnRleHQ6IFwibGVnZW5kXCIgfSwgdykpLmFkZENsYXNzKFwiaGlnaGNoYXJ0cy1wb2ludFwiKS5hZGQoQiksIFQuaXNNYXJrZXIgPSAhMDtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcC5hcmVhTWFya2VyID0gZnVuY3Rpb24oYiwgTSkge1xuICAgICAgICAgIGQuY2FsbCh0aGlzLCBiLCBNLCAhMCk7XG4gICAgICAgIH0sIHAubGluZU1hcmtlciA9IGQsIHAucmVjdGFuZ2xlID0gZnVuY3Rpb24oYiwgTSkge1xuICAgICAgICAgIGxldCB1ID0gTS5sZWdlbmRJdGVtIHx8IHt9LCBBID0gYi5vcHRpb25zLCB6ID0gYi5zeW1ib2xIZWlnaHQsIGYgPSBBLnNxdWFyZVN5bWJvbCwgTyA9IGYgPyB6IDogYi5zeW1ib2xXaWR0aDtcbiAgICAgICAgICB1LnN5bWJvbCA9IHRoaXMuY2hhcnQucmVuZGVyZXIucmVjdChmID8gKGIuc3ltYm9sV2lkdGggLSB6KSAvIDIgOiAwLCBiLmJhc2VsaW5lIC0geiArIDEsIE8sIHosIGwoYi5vcHRpb25zLnN5bWJvbFJhZGl1cywgeiAvIDIpKS5hZGRDbGFzcyhcImhpZ2hjaGFydHMtcG9pbnRcIikuYXR0cih7IHpJbmRleDogMyB9KS5hZGQodS5ncm91cCk7XG4gICAgICAgIH07XG4gICAgICB9KGkgfHwgKGkgPSB7fSkpLCBpO1xuICAgIH0pLCBuKG8sIFwiQ29yZS9TZXJpZXMvU2VyaWVzRGVmYXVsdHMuanNcIiwgW10sIGZ1bmN0aW9uKCkge1xuICAgICAgcmV0dXJuIHsgbGluZVdpZHRoOiAyLCBhbGxvd1BvaW50U2VsZWN0OiAhMSwgY3Jpc3A6ICEwLCBzaG93Q2hlY2tib3g6ICExLCBhbmltYXRpb246IHsgZHVyYXRpb246IDFlMyB9LCBlbmFibGVNb3VzZVRyYWNraW5nOiAhMCwgZXZlbnRzOiB7fSwgbWFya2VyOiB7IGVuYWJsZWRUaHJlc2hvbGQ6IDIsIGxpbmVDb2xvcjogXCIjZmZmZmZmXCIsIGxpbmVXaWR0aDogMCwgcmFkaXVzOiA0LCBzdGF0ZXM6IHsgbm9ybWFsOiB7IGFuaW1hdGlvbjogITAgfSwgaG92ZXI6IHsgYW5pbWF0aW9uOiB7IGR1cmF0aW9uOiAxNTAgfSwgZW5hYmxlZDogITAsIHJhZGl1c1BsdXM6IDIsIGxpbmVXaWR0aFBsdXM6IDEgfSwgc2VsZWN0OiB7IGZpbGxDb2xvcjogXCIjY2NjY2NjXCIsIGxpbmVDb2xvcjogXCIjMDAwMDAwXCIsIGxpbmVXaWR0aDogMiB9IH0gfSwgcG9pbnQ6IHsgZXZlbnRzOiB7fSB9LCBkYXRhTGFiZWxzOiB7IGFuaW1hdGlvbjoge30sIGFsaWduOiBcImNlbnRlclwiLCBib3JkZXJXaWR0aDogMCwgZGVmZXI6ICEwLCBmb3JtYXR0ZXI6IGZ1bmN0aW9uKCkge1xuICAgICAgICBsZXQgeyBudW1iZXJGb3JtYXR0ZXI6IHIgfSA9IHRoaXMuc2VyaWVzLmNoYXJ0O1xuICAgICAgICByZXR1cm4gdHlwZW9mIHRoaXMueSAhPSBcIm51bWJlclwiID8gXCJcIiA6IHIodGhpcy55LCAtMSk7XG4gICAgICB9LCBwYWRkaW5nOiA1LCBzdHlsZTogeyBmb250U2l6ZTogXCIwLjdlbVwiLCBmb250V2VpZ2h0OiBcImJvbGRcIiwgY29sb3I6IFwiY29udHJhc3RcIiwgdGV4dE91dGxpbmU6IFwiMXB4IGNvbnRyYXN0XCIgfSwgdmVydGljYWxBbGlnbjogXCJib3R0b21cIiwgeDogMCwgeTogMCB9LCBjcm9wVGhyZXNob2xkOiAzMDAsIG9wYWNpdHk6IDEsIHBvaW50UmFuZ2U6IDAsIHNvZnRUaHJlc2hvbGQ6ICEwLCBzdGF0ZXM6IHsgbm9ybWFsOiB7IGFuaW1hdGlvbjogITAgfSwgaG92ZXI6IHsgYW5pbWF0aW9uOiB7IGR1cmF0aW9uOiAxNTAgfSwgbGluZVdpZHRoUGx1czogMSwgbWFya2VyOiB7fSwgaGFsbzogeyBzaXplOiAxMCwgb3BhY2l0eTogMC4yNSB9IH0sIHNlbGVjdDogeyBhbmltYXRpb246IHsgZHVyYXRpb246IDAgfSB9LCBpbmFjdGl2ZTogeyBhbmltYXRpb246IHsgZHVyYXRpb246IDE1MCB9LCBvcGFjaXR5OiAwLjIgfSB9LCBzdGlja3lUcmFja2luZzogITAsIHR1cmJvVGhyZXNob2xkOiAxZTMsIGZpbmROZWFyZXN0UG9pbnRCeTogXCJ4XCIgfTtcbiAgICB9KSwgbihvLCBcIkNvcmUvU2VyaWVzL1Nlcmllc1JlZ2lzdHJ5LmpzXCIsIFtvW1wiQ29yZS9HbG9iYWxzLmpzXCJdLCBvW1wiQ29yZS9EZWZhdWx0cy5qc1wiXSwgb1tcIkNvcmUvU2VyaWVzL1BvaW50LmpzXCJdLCBvW1wiQ29yZS9VdGlsaXRpZXMuanNcIl1dLCBmdW5jdGlvbihyLCBpLCBhLCBzKSB7XG4gICAgICB2YXIgbDtcbiAgICAgIGxldCB7IGRlZmF1bHRPcHRpb25zOiBwIH0gPSBpLCB7IGV4dGVuZDogZCwgZXh0ZW5kQ2xhc3M6IGIsIG1lcmdlOiBNIH0gPSBzO1xuICAgICAgcmV0dXJuIGZ1bmN0aW9uKHUpIHtcbiAgICAgICAgZnVuY3Rpb24gQSh6LCBmKSB7XG4gICAgICAgICAgbGV0IE8gPSBwLnBsb3RPcHRpb25zIHx8IHt9LCBoID0gZi5kZWZhdWx0T3B0aW9ucywgZyA9IGYucHJvdG90eXBlO1xuICAgICAgICAgIHJldHVybiBnLnR5cGUgPSB6LCBnLnBvaW50Q2xhc3MgfHwgKGcucG9pbnRDbGFzcyA9IGEpLCAhdS5zZXJpZXNUeXBlc1t6XSAmJiAoaCAmJiAoT1t6XSA9IGgpLCB1LnNlcmllc1R5cGVzW3pdID0gZiwgITApO1xuICAgICAgICB9XG4gICAgICAgIHUuc2VyaWVzVHlwZXMgPSByLnNlcmllc1R5cGVzLCB1LnJlZ2lzdGVyU2VyaWVzVHlwZSA9IEEsIHUuc2VyaWVzVHlwZSA9IGZ1bmN0aW9uKHosIGYsIE8sIGgsIGcpIHtcbiAgICAgICAgICBsZXQgdiA9IHAucGxvdE9wdGlvbnMgfHwge307XG4gICAgICAgICAgaWYgKGYgPSBmIHx8IFwiXCIsIHZbel0gPSBNKHZbZl0sIE8pLCBkZWxldGUgdS5zZXJpZXNUeXBlc1t6XSwgQSh6LCBiKHUuc2VyaWVzVHlwZXNbZl0gfHwgZnVuY3Rpb24oKSB7XG4gICAgICAgICAgfSwgaCkpLCB1LnNlcmllc1R5cGVzW3pdLnByb3RvdHlwZS50eXBlID0geiwgZykge1xuICAgICAgICAgICAgY2xhc3MgTCBleHRlbmRzIGEge1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZChMLnByb3RvdHlwZSwgZyksIHUuc2VyaWVzVHlwZXNbel0ucHJvdG90eXBlLnBvaW50Q2xhc3MgPSBMO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gdS5zZXJpZXNUeXBlc1t6XTtcbiAgICAgICAgfTtcbiAgICAgIH0obCB8fCAobCA9IHt9KSksIGw7XG4gICAgfSksIG4obywgXCJDb3JlL1Nlcmllcy9TZXJpZXMuanNcIiwgW29bXCJDb3JlL0FuaW1hdGlvbi9BbmltYXRpb25VdGlsaXRpZXMuanNcIl0sIG9bXCJDb3JlL0RlZmF1bHRzLmpzXCJdLCBvW1wiQ29yZS9Gb3VuZGF0aW9uLmpzXCJdLCBvW1wiQ29yZS9HbG9iYWxzLmpzXCJdLCBvW1wiQ29yZS9MZWdlbmQvTGVnZW5kU3ltYm9sLmpzXCJdLCBvW1wiQ29yZS9TZXJpZXMvUG9pbnQuanNcIl0sIG9bXCJDb3JlL1Nlcmllcy9TZXJpZXNEZWZhdWx0cy5qc1wiXSwgb1tcIkNvcmUvU2VyaWVzL1Nlcmllc1JlZ2lzdHJ5LmpzXCJdLCBvW1wiQ29yZS9SZW5kZXJlci9TVkcvU1ZHRWxlbWVudC5qc1wiXSwgb1tcIkNvcmUvVXRpbGl0aWVzLmpzXCJdXSwgZnVuY3Rpb24ociwgaSwgYSwgcywgbCwgcCwgZCwgYiwgTSwgdSkge1xuICAgICAgbGV0IHsgYW5pbU9iamVjdDogQSwgc2V0QW5pbWF0aW9uOiB6IH0gPSByLCB7IGRlZmF1bHRPcHRpb25zOiBmIH0gPSBpLCB7IHJlZ2lzdGVyRXZlbnRPcHRpb25zOiBPIH0gPSBhLCB7IHN2ZzogaCwgd2luOiBnIH0gPSBzLCB7IHNlcmllc1R5cGVzOiB2IH0gPSBiLCB7IGFycmF5TWF4OiBMLCBhcnJheU1pbjogeSwgY2xhbXA6IEIsIGNvcnJlY3RGbG9hdDogWCwgY3Jpc3A6IEYsIGRlZmluZWQ6IFQsIGRlc3Ryb3lPYmplY3RQcm9wZXJ0aWVzOiB3LCBkaWZmT2JqZWN0czogSCwgZXJhc2U6IEMsIGVycm9yOiBxLCBleHRlbmQ6IG0sIGZpbmQ6IGssIGZpcmVFdmVudDogeCwgZ2V0Q2xvc2VzdERpc3RhbmNlOiBOLCBnZXROZXN0ZWRQcm9wZXJ0eTogViwgaW5zZXJ0SXRlbTogUiwgaXNBcnJheTogSSwgaXNOdW1iZXI6IGosIGlzU3RyaW5nOiBVLCBtZXJnZTogXywgb2JqZWN0RWFjaDogcjEsIHBpY2s6IEssIHJlbW92ZUV2ZW50OiBRLCBzcGxhdDogRSwgc3luY1RpbWVvdXQ6IEQgfSA9IHU7XG4gICAgICBjbGFzcyBHIHtcbiAgICAgICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgICAgdGhpcy56b25lQXhpcyA9IFwieVwiO1xuICAgICAgICB9XG4gICAgICAgIGluaXQoUywgVykge1xuICAgICAgICAgIGxldCBQO1xuICAgICAgICAgIHgodGhpcywgXCJpbml0XCIsIHsgb3B0aW9uczogVyB9KTtcbiAgICAgICAgICBsZXQgWSA9IHRoaXMsIFogPSBTLnNlcmllcztcbiAgICAgICAgICB0aGlzLmV2ZW50c1RvVW5iaW5kID0gW10sIFkuY2hhcnQgPSBTLCBZLm9wdGlvbnMgPSBZLnNldE9wdGlvbnMoVyk7XG4gICAgICAgICAgbGV0IHQxID0gWS5vcHRpb25zLCBpMSA9IHQxLnZpc2libGUgIT09ICExO1xuICAgICAgICAgIFkubGlua2VkU2VyaWVzID0gW10sIFkuYmluZEF4ZXMoKSwgbShZLCB7IG5hbWU6IHQxLm5hbWUsIHN0YXRlOiBcIlwiLCB2aXNpYmxlOiBpMSwgc2VsZWN0ZWQ6IHQxLnNlbGVjdGVkID09PSAhMCB9KSwgTyh0aGlzLCB0MSk7XG4gICAgICAgICAgbGV0IG4xID0gdDEuZXZlbnRzO1xuICAgICAgICAgIChuMSAmJiBuMS5jbGljayB8fCB0MS5wb2ludCAmJiB0MS5wb2ludC5ldmVudHMgJiYgdDEucG9pbnQuZXZlbnRzLmNsaWNrIHx8IHQxLmFsbG93UG9pbnRTZWxlY3QpICYmIChTLnJ1blRyYWNrZXJDbGljayA9ICEwKSwgWS5nZXRDb2xvcigpLCBZLmdldFN5bWJvbCgpLCBZLnBhcmFsbGVsQXJyYXlzLmZvckVhY2goZnVuY3Rpb24oczEpIHtcbiAgICAgICAgICAgIFlbczEgKyBcIkRhdGFcIl0gfHwgKFlbczEgKyBcIkRhdGFcIl0gPSBbXSk7XG4gICAgICAgICAgfSksIFkuaXNDYXJ0ZXNpYW4gJiYgKFMuaGFzQ2FydGVzaWFuU2VyaWVzID0gITApLCBaLmxlbmd0aCAmJiAoUCA9IFpbWi5sZW5ndGggLSAxXSksIFkuX2kgPSBLKFAgJiYgUC5faSwgLTEpICsgMSwgWS5vcGFjaXR5ID0gWS5vcHRpb25zLm9wYWNpdHksIFMub3JkZXJJdGVtcyhcInNlcmllc1wiLCBSKHRoaXMsIFopKSwgdDEuZGF0YVNvcnRpbmcgJiYgdDEuZGF0YVNvcnRpbmcuZW5hYmxlZCA/IFkuc2V0RGF0YVNvcnRpbmdPcHRpb25zKCkgOiBZLnBvaW50cyB8fCBZLmRhdGEgfHwgWS5zZXREYXRhKHQxLmRhdGEsICExKSwgeCh0aGlzLCBcImFmdGVySW5pdFwiKTtcbiAgICAgICAgfVxuICAgICAgICBpcyhTKSB7XG4gICAgICAgICAgcmV0dXJuIHZbU10gJiYgdGhpcyBpbnN0YW5jZW9mIHZbU107XG4gICAgICAgIH1cbiAgICAgICAgYmluZEF4ZXMoKSB7XG4gICAgICAgICAgbGV0IFMsIFcgPSB0aGlzLCBQID0gVy5vcHRpb25zLCBZID0gVy5jaGFydDtcbiAgICAgICAgICB4KHRoaXMsIFwiYmluZEF4ZXNcIiwgbnVsbCwgZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICAoVy5heGlzVHlwZXMgfHwgW10pLmZvckVhY2goZnVuY3Rpb24oWikge1xuICAgICAgICAgICAgICAoWVtaXSB8fCBbXSkuZm9yRWFjaChmdW5jdGlvbih0MSkge1xuICAgICAgICAgICAgICAgIFMgPSB0MS5vcHRpb25zLCAoSyhQW1pdLCAwKSA9PT0gdDEuaW5kZXggfHwgUFtaXSAhPT0gdm9pZCAwICYmIFBbWl0gPT09IFMuaWQpICYmIChSKFcsIHQxLnNlcmllcyksIFdbWl0gPSB0MSwgdDEuaXNEaXJ0eSA9ICEwKTtcbiAgICAgICAgICAgICAgfSksIFdbWl0gfHwgVy5vcHRpb25hbEF4aXMgPT09IFogfHwgcSgxOCwgITAsIFkpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfSksIHgodGhpcywgXCJhZnRlckJpbmRBeGVzXCIpO1xuICAgICAgICB9XG4gICAgICAgIHVwZGF0ZVBhcmFsbGVsQXJyYXlzKFMsIFcsIFApIHtcbiAgICAgICAgICBsZXQgWSA9IFMuc2VyaWVzLCBaID0gaihXKSA/IGZ1bmN0aW9uKHQxKSB7XG4gICAgICAgICAgICBsZXQgaTEgPSB0MSA9PT0gXCJ5XCIgJiYgWS50b1lEYXRhID8gWS50b1lEYXRhKFMpIDogU1t0MV07XG4gICAgICAgICAgICBZW3QxICsgXCJEYXRhXCJdW1ddID0gaTE7XG4gICAgICAgICAgfSA6IGZ1bmN0aW9uKHQxKSB7XG4gICAgICAgICAgICBBcnJheS5wcm90b3R5cGVbV10uYXBwbHkoWVt0MSArIFwiRGF0YVwiXSwgUCk7XG4gICAgICAgICAgfTtcbiAgICAgICAgICBZLnBhcmFsbGVsQXJyYXlzLmZvckVhY2goWik7XG4gICAgICAgIH1cbiAgICAgICAgaGFzRGF0YSgpIHtcbiAgICAgICAgICByZXR1cm4gdGhpcy52aXNpYmxlICYmIHRoaXMuZGF0YU1heCAhPT0gdm9pZCAwICYmIHRoaXMuZGF0YU1pbiAhPT0gdm9pZCAwIHx8IHRoaXMudmlzaWJsZSAmJiB0aGlzLnlEYXRhICYmIHRoaXMueURhdGEubGVuZ3RoID4gMDtcbiAgICAgICAgfVxuICAgICAgICBoYXNNYXJrZXJDaGFuZ2VkKFMsIFcpIHtcbiAgICAgICAgICBsZXQgUCA9IFMubWFya2VyLCBZID0gVy5tYXJrZXIgfHwge307XG4gICAgICAgICAgcmV0dXJuIFAgJiYgKFkuZW5hYmxlZCAmJiAhUC5lbmFibGVkIHx8IFkuc3ltYm9sICE9PSBQLnN5bWJvbCB8fCBZLmhlaWdodCAhPT0gUC5oZWlnaHQgfHwgWS53aWR0aCAhPT0gUC53aWR0aCk7XG4gICAgICAgIH1cbiAgICAgICAgYXV0b0luY3JlbWVudChTKSB7XG4gICAgICAgICAgbGV0IFcgPSB0aGlzLm9wdGlvbnMsIFAgPSBXLnBvaW50SW50ZXJ2YWxVbml0LCBZID0gVy5yZWxhdGl2ZVhWYWx1ZSwgWiA9IHRoaXMuY2hhcnQudGltZSwgdDEgPSB0aGlzLnhJbmNyZW1lbnQsIGkxLCBuMTtcbiAgICAgICAgICByZXR1cm4gdDEgPSBLKHQxLCBXLnBvaW50U3RhcnQsIDApLCB0aGlzLnBvaW50SW50ZXJ2YWwgPSBuMSA9IEsodGhpcy5wb2ludEludGVydmFsLCBXLnBvaW50SW50ZXJ2YWwsIDEpLCBZICYmIGooUykgJiYgKG4xICo9IFMpLCBQICYmIChpMSA9IG5ldyBaLkRhdGUodDEpLCBQID09PSBcImRheVwiID8gWi5zZXQoXCJEYXRlXCIsIGkxLCBaLmdldChcIkRhdGVcIiwgaTEpICsgbjEpIDogUCA9PT0gXCJtb250aFwiID8gWi5zZXQoXCJNb250aFwiLCBpMSwgWi5nZXQoXCJNb250aFwiLCBpMSkgKyBuMSkgOiBQID09PSBcInllYXJcIiAmJiBaLnNldChcIkZ1bGxZZWFyXCIsIGkxLCBaLmdldChcIkZ1bGxZZWFyXCIsIGkxKSArIG4xKSwgbjEgPSBpMS5nZXRUaW1lKCkgLSB0MSksIFkgJiYgaihTKSA/IHQxICsgbjEgOiAodGhpcy54SW5jcmVtZW50ID0gdDEgKyBuMSwgdDEpO1xuICAgICAgICB9XG4gICAgICAgIHNldERhdGFTb3J0aW5nT3B0aW9ucygpIHtcbiAgICAgICAgICBsZXQgUyA9IHRoaXMub3B0aW9ucztcbiAgICAgICAgICBtKHRoaXMsIHsgcmVxdWlyZVNvcnRpbmc6ICExLCBzb3J0ZWQ6ICExLCBlbmFibGVkRGF0YVNvcnRpbmc6ICEwLCBhbGxvd0RHOiAhMSB9KSwgVChTLnBvaW50UmFuZ2UpIHx8IChTLnBvaW50UmFuZ2UgPSAxKTtcbiAgICAgICAgfVxuICAgICAgICBzZXRPcHRpb25zKFMpIHtcbiAgICAgICAgICB2YXIgTTEsIEExO1xuICAgICAgICAgIGxldCBXLCBQID0gdGhpcy5jaGFydCwgWSA9IFAub3B0aW9ucy5wbG90T3B0aW9ucywgWiA9IFAudXNlck9wdGlvbnMgfHwge30sIHQxID0gXyhTKSwgaTEgPSBQLnN0eWxlZE1vZGUsIG4xID0geyBwbG90T3B0aW9uczogWSwgdXNlck9wdGlvbnM6IHQxIH07XG4gICAgICAgICAgeCh0aGlzLCBcInNldE9wdGlvbnNcIiwgbjEpO1xuICAgICAgICAgIGxldCBzMSA9IG4xLnBsb3RPcHRpb25zW3RoaXMudHlwZV0sIGQxID0gWi5wbG90T3B0aW9ucyB8fCB7fSwgYjEgPSBkMS5zZXJpZXMgfHwge30sIGMxID0gZi5wbG90T3B0aW9uc1t0aGlzLnR5cGVdIHx8IHt9LCBhMSA9IGQxW3RoaXMudHlwZV0gfHwge307XG4gICAgICAgICAgdGhpcy51c2VyT3B0aW9ucyA9IG4xLnVzZXJPcHRpb25zO1xuICAgICAgICAgIGxldCBsMSA9IF8oczEsIFkuc2VyaWVzLCBhMSwgdDEpO1xuICAgICAgICAgIHRoaXMudG9vbHRpcE9wdGlvbnMgPSBfKGYudG9vbHRpcCwgKE0xID0gZi5wbG90T3B0aW9ucy5zZXJpZXMpID09IG51bGwgPyB2b2lkIDAgOiBNMS50b29sdGlwLCBjMSA9PSBudWxsID8gdm9pZCAwIDogYzEudG9vbHRpcCwgUC51c2VyT3B0aW9ucy50b29sdGlwLCAoQTEgPSBkMS5zZXJpZXMpID09IG51bGwgPyB2b2lkIDAgOiBBMS50b29sdGlwLCBhMS50b29sdGlwLCB0MS50b29sdGlwKSwgdGhpcy5zdGlja3lUcmFja2luZyA9IEsodDEuc3RpY2t5VHJhY2tpbmcsIGExLnN0aWNreVRyYWNraW5nLCBiMS5zdGlja3lUcmFja2luZywgISF0aGlzLnRvb2x0aXBPcHRpb25zLnNoYXJlZCAmJiAhdGhpcy5ub1NoYXJlZFRvb2x0aXAgfHwgbDEuc3RpY2t5VHJhY2tpbmcpLCBzMS5tYXJrZXIgPT09IG51bGwgJiYgZGVsZXRlIGwxLm1hcmtlciwgdGhpcy56b25lQXhpcyA9IGwxLnpvbmVBeGlzIHx8IFwieVwiO1xuICAgICAgICAgIGxldCBwMSA9IHRoaXMuem9uZXMgPSAobDEuem9uZXMgfHwgW10pLm1hcCgodTEpID0+ICh7IC4uLnUxIH0pKTtcbiAgICAgICAgICByZXR1cm4gKGwxLm5lZ2F0aXZlQ29sb3IgfHwgbDEubmVnYXRpdmVGaWxsQ29sb3IpICYmICFsMS56b25lcyAmJiAoVyA9IHsgdmFsdWU6IGwxW3RoaXMuem9uZUF4aXMgKyBcIlRocmVzaG9sZFwiXSB8fCBsMS50aHJlc2hvbGQgfHwgMCwgY2xhc3NOYW1lOiBcImhpZ2hjaGFydHMtbmVnYXRpdmVcIiB9LCBpMSB8fCAoVy5jb2xvciA9IGwxLm5lZ2F0aXZlQ29sb3IsIFcuZmlsbENvbG9yID0gbDEubmVnYXRpdmVGaWxsQ29sb3IpLCBwMS5wdXNoKFcpKSwgcDEubGVuZ3RoICYmIFQocDFbcDEubGVuZ3RoIC0gMV0udmFsdWUpICYmIHAxLnB1c2goaTEgPyB7fSA6IHsgY29sb3I6IHRoaXMuY29sb3IsIGZpbGxDb2xvcjogdGhpcy5maWxsQ29sb3IgfSksIHgodGhpcywgXCJhZnRlclNldE9wdGlvbnNcIiwgeyBvcHRpb25zOiBsMSB9KSwgbDE7XG4gICAgICAgIH1cbiAgICAgICAgZ2V0TmFtZSgpIHtcbiAgICAgICAgICByZXR1cm4gSyh0aGlzLm9wdGlvbnMubmFtZSwgXCJTZXJpZXMgXCIgKyAodGhpcy5pbmRleCArIDEpKTtcbiAgICAgICAgfVxuICAgICAgICBnZXRDeWNsaWMoUywgVywgUCkge1xuICAgICAgICAgIGxldCBZLCBaLCB0MSA9IHRoaXMuY2hhcnQsIGkxID0gYCR7U31JbmRleGAsIG4xID0gYCR7U31Db3VudGVyYCwgczEgPSAoUCA9PSBudWxsID8gdm9pZCAwIDogUC5sZW5ndGgpIHx8IHQxLm9wdGlvbnMuY2hhcnQuY29sb3JDb3VudDtcbiAgICAgICAgICAhVyAmJiAoVChaID0gSyhTID09PSBcImNvbG9yXCIgPyB0aGlzLm9wdGlvbnMuY29sb3JJbmRleCA6IHZvaWQgMCwgdGhpc1tpMV0pKSA/IFkgPSBaIDogKHQxLnNlcmllcy5sZW5ndGggfHwgKHQxW24xXSA9IDApLCBZID0gdDFbbjFdICUgczEsIHQxW24xXSArPSAxKSwgUCAmJiAoVyA9IFBbWV0pKSwgWSAhPT0gdm9pZCAwICYmICh0aGlzW2kxXSA9IFkpLCB0aGlzW1NdID0gVztcbiAgICAgICAgfVxuICAgICAgICBnZXRDb2xvcigpIHtcbiAgICAgICAgICB0aGlzLmNoYXJ0LnN0eWxlZE1vZGUgPyB0aGlzLmdldEN5Y2xpYyhcImNvbG9yXCIpIDogdGhpcy5vcHRpb25zLmNvbG9yQnlQb2ludCA/IHRoaXMuY29sb3IgPSBcIiNjY2NjY2NcIiA6IHRoaXMuZ2V0Q3ljbGljKFwiY29sb3JcIiwgdGhpcy5vcHRpb25zLmNvbG9yIHx8IGYucGxvdE9wdGlvbnNbdGhpcy50eXBlXS5jb2xvciwgdGhpcy5jaGFydC5vcHRpb25zLmNvbG9ycyk7XG4gICAgICAgIH1cbiAgICAgICAgZ2V0UG9pbnRzQ29sbGVjdGlvbigpIHtcbiAgICAgICAgICByZXR1cm4gKHRoaXMuaGFzR3JvdXBlZERhdGEgPyB0aGlzLnBvaW50cyA6IHRoaXMuZGF0YSkgfHwgW107XG4gICAgICAgIH1cbiAgICAgICAgZ2V0U3ltYm9sKCkge1xuICAgICAgICAgIGxldCBTID0gdGhpcy5vcHRpb25zLm1hcmtlcjtcbiAgICAgICAgICB0aGlzLmdldEN5Y2xpYyhcInN5bWJvbFwiLCBTLnN5bWJvbCwgdGhpcy5jaGFydC5vcHRpb25zLnN5bWJvbHMpO1xuICAgICAgICB9XG4gICAgICAgIGZpbmRQb2ludEluZGV4KFMsIFcpIHtcbiAgICAgICAgICBsZXQgUCwgWSwgWiwgdDEgPSBTLmlkLCBpMSA9IFMueCwgbjEgPSB0aGlzLnBvaW50cywgczEgPSB0aGlzLm9wdGlvbnMuZGF0YVNvcnRpbmc7XG4gICAgICAgICAgaWYgKHQxKSB7XG4gICAgICAgICAgICBsZXQgZDEgPSB0aGlzLmNoYXJ0LmdldCh0MSk7XG4gICAgICAgICAgICBkMSBpbnN0YW5jZW9mIHAgJiYgKFAgPSBkMSk7XG4gICAgICAgICAgfSBlbHNlIGlmICh0aGlzLmxpbmtlZFBhcmVudCB8fCB0aGlzLmVuYWJsZWREYXRhU29ydGluZyB8fCB0aGlzLm9wdGlvbnMucmVsYXRpdmVYVmFsdWUpIHtcbiAgICAgICAgICAgIGxldCBkMSA9IChiMSkgPT4gIWIxLnRvdWNoZWQgJiYgYjEuaW5kZXggPT09IFMuaW5kZXg7XG4gICAgICAgICAgICBpZiAoczEgJiYgczEubWF0Y2hCeU5hbWUgPyBkMSA9IChiMSkgPT4gIWIxLnRvdWNoZWQgJiYgYjEubmFtZSA9PT0gUy5uYW1lIDogdGhpcy5vcHRpb25zLnJlbGF0aXZlWFZhbHVlICYmIChkMSA9IChiMSkgPT4gIWIxLnRvdWNoZWQgJiYgYjEub3B0aW9ucy54ID09PSBTLngpLCAhKFAgPSBrKG4xLCBkMSkpKVxuICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiBQICYmIChaID0gUCAmJiBQLmluZGV4KSAhPT0gdm9pZCAwICYmIChZID0gITApLCBaID09PSB2b2lkIDAgJiYgaihpMSkgJiYgKFogPSB0aGlzLnhEYXRhLmluZGV4T2YoaTEsIFcpKSwgWiAhPT0gLTEgJiYgWiAhPT0gdm9pZCAwICYmIHRoaXMuY3JvcHBlZCAmJiAoWiA9IFogPj0gdGhpcy5jcm9wU3RhcnQgPyBaIC0gdGhpcy5jcm9wU3RhcnQgOiBaKSwgIVkgJiYgaihaKSAmJiBuMVtaXSAmJiBuMVtaXS50b3VjaGVkICYmIChaID0gdm9pZCAwKSwgWjtcbiAgICAgICAgfVxuICAgICAgICB1cGRhdGVEYXRhKFMsIFcpIHtcbiAgICAgICAgICBsZXQgUCA9IHRoaXMub3B0aW9ucywgWSA9IFAuZGF0YVNvcnRpbmcsIFogPSB0aGlzLnBvaW50cywgdDEgPSBbXSwgaTEgPSB0aGlzLnJlcXVpcmVTb3J0aW5nLCBuMSA9IFMubGVuZ3RoID09PSBaLmxlbmd0aCwgczEsIGQxLCBiMSwgYzEsIGExID0gITA7XG4gICAgICAgICAgaWYgKHRoaXMueEluY3JlbWVudCA9IG51bGwsIFMuZm9yRWFjaChmdW5jdGlvbihsMSwgcDEpIHtcbiAgICAgICAgICAgIGxldCBNMSwgQTEgPSBUKGwxKSAmJiB0aGlzLnBvaW50Q2xhc3MucHJvdG90eXBlLm9wdGlvbnNUb09iamVjdC5jYWxsKHsgc2VyaWVzOiB0aGlzIH0sIGwxKSB8fCB7fSwgdTEgPSBBMS54O1xuICAgICAgICAgICAgQTEuaWQgfHwgaih1MSkgPyAoKE0xID0gdGhpcy5maW5kUG9pbnRJbmRleChBMSwgYzEpKSA9PT0gLTEgfHwgTTEgPT09IHZvaWQgMCA/IHQxLnB1c2gobDEpIDogWltNMV0gJiYgbDEgIT09IFAuZGF0YVtNMV0gPyAoWltNMV0udXBkYXRlKGwxLCAhMSwgbnVsbCwgITEpLCBaW00xXS50b3VjaGVkID0gITAsIGkxICYmIChjMSA9IE0xICsgMSkpIDogWltNMV0gJiYgKFpbTTFdLnRvdWNoZWQgPSAhMCksICghbjEgfHwgcDEgIT09IE0xIHx8IFkgJiYgWS5lbmFibGVkIHx8IHRoaXMuaGFzRGVyaXZlZERhdGEpICYmIChzMSA9ICEwKSkgOiB0MS5wdXNoKGwxKTtcbiAgICAgICAgICB9LCB0aGlzKSwgczEpXG4gICAgICAgICAgICBmb3IgKGQxID0gWi5sZW5ndGg7IGQxLS07IClcbiAgICAgICAgICAgICAgKGIxID0gWltkMV0pICYmICFiMS50b3VjaGVkICYmIGIxLnJlbW92ZSAmJiBiMS5yZW1vdmUoITEsIFcpO1xuICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICFuMSB8fCBZICYmIFkuZW5hYmxlZCA/IGExID0gITEgOiAoUy5mb3JFYWNoKGZ1bmN0aW9uKGwxLCBwMSkge1xuICAgICAgICAgICAgICBsMSA9PT0gWltwMV0ueSB8fCBaW3AxXS5kZXN0cm95ZWQgfHwgWltwMV0udXBkYXRlKGwxLCAhMSwgbnVsbCwgITEpO1xuICAgICAgICAgICAgfSksIHQxLmxlbmd0aCA9IDApO1xuICAgICAgICAgIHJldHVybiBaLmZvckVhY2goZnVuY3Rpb24obDEpIHtcbiAgICAgICAgICAgIGwxICYmIChsMS50b3VjaGVkID0gITEpO1xuICAgICAgICAgIH0pLCAhIWExICYmICh0MS5mb3JFYWNoKGZ1bmN0aW9uKGwxKSB7XG4gICAgICAgICAgICB0aGlzLmFkZFBvaW50KGwxLCAhMSwgbnVsbCwgbnVsbCwgITEpO1xuICAgICAgICAgIH0sIHRoaXMpLCB0aGlzLnhJbmNyZW1lbnQgPT09IG51bGwgJiYgdGhpcy54RGF0YSAmJiB0aGlzLnhEYXRhLmxlbmd0aCAmJiAodGhpcy54SW5jcmVtZW50ID0gTCh0aGlzLnhEYXRhKSwgdGhpcy5hdXRvSW5jcmVtZW50KCkpLCAhMCk7XG4gICAgICAgIH1cbiAgICAgICAgc2V0RGF0YShTLCBXID0gITAsIFAsIFkpIHtcbiAgICAgICAgICB2YXIgTjE7XG4gICAgICAgICAgbGV0IFogPSB0aGlzLCB0MSA9IFoucG9pbnRzLCBpMSA9IHQxICYmIHQxLmxlbmd0aCB8fCAwLCBuMSA9IFoub3B0aW9ucywgczEgPSBaLmNoYXJ0LCBkMSA9IG4xLmRhdGFTb3J0aW5nLCBiMSA9IFoueEF4aXMsIGMxID0gbjEudHVyYm9UaHJlc2hvbGQsIGExID0gdGhpcy54RGF0YSwgbDEgPSB0aGlzLnlEYXRhLCBwMSA9IFoucG9pbnRBcnJheU1hcCwgTTEgPSBwMSAmJiBwMS5sZW5ndGgsIEExID0gbjEua2V5cywgdTEsIGgxLCBDMSwgcTEgPSAwLCBXMSA9IDEsIFIxO1xuICAgICAgICAgIHMxLm9wdGlvbnMuY2hhcnQuYWxsb3dNdXRhdGluZ0RhdGEgfHwgKG4xLmRhdGEgJiYgZGVsZXRlIFoub3B0aW9ucy5kYXRhLCBaLnVzZXJPcHRpb25zLmRhdGEgJiYgZGVsZXRlIFoudXNlck9wdGlvbnMuZGF0YSwgUjEgPSBfKCEwLCBTKSk7XG4gICAgICAgICAgbGV0IGsxID0gKFMgPSBSMSB8fCBTIHx8IFtdKS5sZW5ndGg7XG4gICAgICAgICAgaWYgKGQxICYmIGQxLmVuYWJsZWQgJiYgKFMgPSB0aGlzLnNvcnREYXRhKFMpKSwgczEub3B0aW9ucy5jaGFydC5hbGxvd011dGF0aW5nRGF0YSAmJiBZICE9PSAhMSAmJiBrMSAmJiBpMSAmJiAhWi5jcm9wcGVkICYmICFaLmhhc0dyb3VwZWREYXRhICYmIFoudmlzaWJsZSAmJiAhWi5ib29zdGVkICYmIChDMSA9IHRoaXMudXBkYXRlRGF0YShTLCBQKSksICFDMSkge1xuICAgICAgICAgICAgWi54SW5jcmVtZW50ID0gbnVsbCwgWi5jb2xvckNvdW50ZXIgPSAwLCB0aGlzLnBhcmFsbGVsQXJyYXlzLmZvckVhY2goZnVuY3Rpb24oUzEpIHtcbiAgICAgICAgICAgICAgWltTMSArIFwiRGF0YVwiXS5sZW5ndGggPSAwO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBsZXQgdjEgPSBjMSAmJiBrMSA+IGMxO1xuICAgICAgICAgICAgaWYgKHYxKSB7XG4gICAgICAgICAgICAgIGxldCBTMSA9IFouZ2V0Rmlyc3RWYWxpZFBvaW50KFMpLCBEMSA9IFouZ2V0Rmlyc3RWYWxpZFBvaW50KFMsIGsxIC0gMSwgLTEpLCBGMSA9IChVMSkgPT4gISEoSShVMSkgJiYgKEExIHx8IGooVTFbMF0pKSk7XG4gICAgICAgICAgICAgIGlmIChqKFMxKSAmJiBqKEQxKSlcbiAgICAgICAgICAgICAgICBmb3IgKHUxID0gMDsgdTEgPCBrMTsgdTErKylcbiAgICAgICAgICAgICAgICAgIGExW3UxXSA9IHRoaXMuYXV0b0luY3JlbWVudCgpLCBsMVt1MV0gPSBTW3UxXTtcbiAgICAgICAgICAgICAgZWxzZSBpZiAoRjEoUzEpICYmIEYxKEQxKSlcbiAgICAgICAgICAgICAgICBpZiAoTTEpXG4gICAgICAgICAgICAgICAgICBpZiAoUzEubGVuZ3RoID09PSBNMSlcbiAgICAgICAgICAgICAgICAgICAgZm9yICh1MSA9IDA7IHUxIDwgazE7IHUxKyspXG4gICAgICAgICAgICAgICAgICAgICAgYTFbdTFdID0gdGhpcy5hdXRvSW5jcmVtZW50KCksIGwxW3UxXSA9IFNbdTFdO1xuICAgICAgICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgICAgICBmb3IgKHUxID0gMDsgdTEgPCBrMTsgdTErKylcbiAgICAgICAgICAgICAgICAgICAgICBoMSA9IFNbdTFdLCBhMVt1MV0gPSBoMVswXSwgbDFbdTFdID0gaDEuc2xpY2UoMSwgTTEgKyAxKTtcbiAgICAgICAgICAgICAgICBlbHNlIGlmIChBMSAmJiAocTEgPSBBMS5pbmRleE9mKFwieFwiKSwgVzEgPSBBMS5pbmRleE9mKFwieVwiKSwgcTEgPSBxMSA+PSAwID8gcTEgOiAwLCBXMSA9IFcxID49IDAgPyBXMSA6IDEpLCBTMS5sZW5ndGggPT09IDEgJiYgKFcxID0gMCksIHExID09PSBXMSlcbiAgICAgICAgICAgICAgICAgIGZvciAodTEgPSAwOyB1MSA8IGsxOyB1MSsrKVxuICAgICAgICAgICAgICAgICAgICBhMVt1MV0gPSB0aGlzLmF1dG9JbmNyZW1lbnQoKSwgbDFbdTFdID0gU1t1MV1bVzFdO1xuICAgICAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICAgIGZvciAodTEgPSAwOyB1MSA8IGsxOyB1MSsrKVxuICAgICAgICAgICAgICAgICAgICBoMSA9IFNbdTFdLCBhMVt1MV0gPSBoMVtxMV0sIGwxW3UxXSA9IGgxW1cxXTtcbiAgICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgIHYxID0gITE7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoIXYxKVxuICAgICAgICAgICAgICBmb3IgKHUxID0gMDsgdTEgPCBrMTsgdTErKylcbiAgICAgICAgICAgICAgICBoMSA9IHsgc2VyaWVzOiBaIH0sIFoucG9pbnRDbGFzcy5wcm90b3R5cGUuYXBwbHlPcHRpb25zLmFwcGx5KGgxLCBbU1t1MV1dKSwgWi51cGRhdGVQYXJhbGxlbEFycmF5cyhoMSwgdTEpO1xuICAgICAgICAgICAgZm9yIChsMSAmJiBVKGwxWzBdKSAmJiBxKDE0LCAhMCwgczEpLCBaLmRhdGEgPSBbXSwgWi5vcHRpb25zLmRhdGEgPSBaLnVzZXJPcHRpb25zLmRhdGEgPSBTLCB1MSA9IGkxOyB1MS0tOyApXG4gICAgICAgICAgICAgIChOMSA9IHQxW3UxXSkgPT0gbnVsbCB8fCBOMS5kZXN0cm95KCk7XG4gICAgICAgICAgICBiMSAmJiAoYjEubWluUmFuZ2UgPSBiMS51c2VyTWluUmFuZ2UpLCBaLmlzRGlydHkgPSBzMS5pc0RpcnR5Qm94ID0gITAsIFouaXNEaXJ0eURhdGEgPSAhIXQxLCBQID0gITE7XG4gICAgICAgICAgfVxuICAgICAgICAgIG4xLmxlZ2VuZFR5cGUgPT09IFwicG9pbnRcIiAmJiAodGhpcy5wcm9jZXNzRGF0YSgpLCB0aGlzLmdlbmVyYXRlUG9pbnRzKCkpLCBXICYmIHMxLnJlZHJhdyhQKTtcbiAgICAgICAgfVxuICAgICAgICBzb3J0RGF0YShTKSB7XG4gICAgICAgICAgbGV0IFcgPSB0aGlzLCBQID0gVy5vcHRpb25zLmRhdGFTb3J0aW5nLnNvcnRLZXkgfHwgXCJ5XCIsIFkgPSBmdW5jdGlvbihaLCB0MSkge1xuICAgICAgICAgICAgcmV0dXJuIFQodDEpICYmIFoucG9pbnRDbGFzcy5wcm90b3R5cGUub3B0aW9uc1RvT2JqZWN0LmNhbGwoeyBzZXJpZXM6IFogfSwgdDEpIHx8IHt9O1xuICAgICAgICAgIH07XG4gICAgICAgICAgcmV0dXJuIFMuZm9yRWFjaChmdW5jdGlvbihaLCB0MSkge1xuICAgICAgICAgICAgU1t0MV0gPSBZKFcsIFopLCBTW3QxXS5pbmRleCA9IHQxO1xuICAgICAgICAgIH0sIHRoaXMpLCBTLmNvbmNhdCgpLnNvcnQoKFosIHQxKSA9PiB7XG4gICAgICAgICAgICBsZXQgaTEgPSBWKFAsIFopLCBuMSA9IFYoUCwgdDEpO1xuICAgICAgICAgICAgcmV0dXJuIG4xIDwgaTEgPyAtMSA6IG4xID4gaTEgPyAxIDogMDtcbiAgICAgICAgICB9KS5mb3JFYWNoKGZ1bmN0aW9uKFosIHQxKSB7XG4gICAgICAgICAgICBaLnggPSB0MTtcbiAgICAgICAgICB9LCB0aGlzKSwgVy5saW5rZWRTZXJpZXMgJiYgVy5saW5rZWRTZXJpZXMuZm9yRWFjaChmdW5jdGlvbihaKSB7XG4gICAgICAgICAgICBsZXQgdDEgPSBaLm9wdGlvbnMsIGkxID0gdDEuZGF0YTtcbiAgICAgICAgICAgIHQxLmRhdGFTb3J0aW5nICYmIHQxLmRhdGFTb3J0aW5nLmVuYWJsZWQgfHwgIWkxIHx8IChpMS5mb3JFYWNoKGZ1bmN0aW9uKG4xLCBzMSkge1xuICAgICAgICAgICAgICBpMVtzMV0gPSBZKFosIG4xKSwgU1tzMV0gJiYgKGkxW3MxXS54ID0gU1tzMV0ueCwgaTFbczFdLmluZGV4ID0gczEpO1xuICAgICAgICAgICAgfSksIFouc2V0RGF0YShpMSwgITEpKTtcbiAgICAgICAgICB9KSwgUztcbiAgICAgICAgfVxuICAgICAgICBnZXRQcm9jZXNzZWREYXRhKFMpIHtcbiAgICAgICAgICBsZXQgVyA9IHRoaXMsIFAgPSBXLnhBeGlzLCBZID0gVy5vcHRpb25zLmNyb3BUaHJlc2hvbGQsIFogPSBQID09IG51bGwgPyB2b2lkIDAgOiBQLmxvZ2FyaXRobWljLCB0MSA9IFcuaXNDYXJ0ZXNpYW4sIGkxLCBuMSwgczEgPSAwLCBkMSwgYjEsIGMxLCBhMSA9IFcueERhdGEsIGwxID0gVy55RGF0YSwgcDEgPSAhMSwgTTEgPSBhMS5sZW5ndGg7XG4gICAgICAgICAgUCAmJiAoYjEgPSAoZDEgPSBQLmdldEV4dHJlbWVzKCkpLm1pbiwgYzEgPSBkMS5tYXgsIHAxID0gISEoUC5jYXRlZ29yaWVzICYmICFQLm5hbWVzLmxlbmd0aCkpLCB0MSAmJiBXLnNvcnRlZCAmJiAhUyAmJiAoIVkgfHwgTTEgPiBZIHx8IFcuZm9yY2VDcm9wKSAmJiAoYTFbTTEgLSAxXSA8IGIxIHx8IGExWzBdID4gYzEgPyAoYTEgPSBbXSwgbDEgPSBbXSkgOiBXLnlEYXRhICYmIChhMVswXSA8IGIxIHx8IGExW00xIC0gMV0gPiBjMSkgJiYgKGExID0gKGkxID0gdGhpcy5jcm9wRGF0YShXLnhEYXRhLCBXLnlEYXRhLCBiMSwgYzEpKS54RGF0YSwgbDEgPSBpMS55RGF0YSwgczEgPSBpMS5zdGFydCwgbjEgPSAhMCkpO1xuICAgICAgICAgIGxldCBBMSA9IE4oW1ogPyBhMS5tYXAoWi5sb2cybGluKSA6IGExXSwgKCkgPT4gVy5yZXF1aXJlU29ydGluZyAmJiAhcDEgJiYgcSgxNSwgITEsIFcuY2hhcnQpKTtcbiAgICAgICAgICByZXR1cm4geyB4RGF0YTogYTEsIHlEYXRhOiBsMSwgY3JvcHBlZDogbjEsIGNyb3BTdGFydDogczEsIGNsb3Nlc3RQb2ludFJhbmdlOiBBMSB9O1xuICAgICAgICB9XG4gICAgICAgIHByb2Nlc3NEYXRhKFMpIHtcbiAgICAgICAgICBsZXQgVyA9IHRoaXMueEF4aXM7XG4gICAgICAgICAgaWYgKHRoaXMuaXNDYXJ0ZXNpYW4gJiYgIXRoaXMuaXNEaXJ0eSAmJiAhVy5pc0RpcnR5ICYmICF0aGlzLnlBeGlzLmlzRGlydHkgJiYgIVMpXG4gICAgICAgICAgICByZXR1cm4gITE7XG4gICAgICAgICAgbGV0IFAgPSB0aGlzLmdldFByb2Nlc3NlZERhdGEoKTtcbiAgICAgICAgICB0aGlzLmNyb3BwZWQgPSBQLmNyb3BwZWQsIHRoaXMuY3JvcFN0YXJ0ID0gUC5jcm9wU3RhcnQsIHRoaXMucHJvY2Vzc2VkWERhdGEgPSBQLnhEYXRhLCB0aGlzLnByb2Nlc3NlZFlEYXRhID0gUC55RGF0YSwgdGhpcy5jbG9zZXN0UG9pbnRSYW5nZSA9IHRoaXMuYmFzZVBvaW50UmFuZ2UgPSBQLmNsb3Nlc3RQb2ludFJhbmdlLCB4KHRoaXMsIFwiYWZ0ZXJQcm9jZXNzRGF0YVwiKTtcbiAgICAgICAgfVxuICAgICAgICBjcm9wRGF0YShTLCBXLCBQLCBZKSB7XG4gICAgICAgICAgbGV0IFogPSBTLmxlbmd0aCwgdDEsIGkxLCBuMSA9IDAsIHMxID0gWjtcbiAgICAgICAgICBmb3IgKHQxID0gMDsgdDEgPCBaOyB0MSsrKVxuICAgICAgICAgICAgaWYgKFNbdDFdID49IFApIHtcbiAgICAgICAgICAgICAgbjEgPSBNYXRoLm1heCgwLCB0MSAtIDEpO1xuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICBmb3IgKGkxID0gdDE7IGkxIDwgWjsgaTErKylcbiAgICAgICAgICAgIGlmIChTW2kxXSA+IFkpIHtcbiAgICAgICAgICAgICAgczEgPSBpMSArIDE7XG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiB7IHhEYXRhOiBTLnNsaWNlKG4xLCBzMSksIHlEYXRhOiBXLnNsaWNlKG4xLCBzMSksIHN0YXJ0OiBuMSwgZW5kOiBzMSB9O1xuICAgICAgICB9XG4gICAgICAgIGdlbmVyYXRlUG9pbnRzKCkge1xuICAgICAgICAgIGxldCBTID0gdGhpcy5vcHRpb25zLCBXID0gdGhpcy5wcm9jZXNzZWREYXRhIHx8IFMuZGF0YSwgUCA9IHRoaXMucHJvY2Vzc2VkWERhdGEsIFkgPSB0aGlzLnByb2Nlc3NlZFlEYXRhLCBaID0gdGhpcy5wb2ludENsYXNzLCB0MSA9IFAubGVuZ3RoLCBpMSA9IHRoaXMuY3JvcFN0YXJ0IHx8IDAsIG4xID0gdGhpcy5oYXNHcm91cGVkRGF0YSwgczEgPSBTLmtleXMsIGQxID0gW10sIGIxID0gUy5kYXRhR3JvdXBpbmcgJiYgUy5kYXRhR3JvdXBpbmcuZ3JvdXBBbGwgPyBpMSA6IDAsIGMxLCBhMSwgbDEsIHAxLCBNMSA9IHRoaXMuZGF0YTtcbiAgICAgICAgICBpZiAoIU0xICYmICFuMSkge1xuICAgICAgICAgICAgbGV0IEExID0gW107XG4gICAgICAgICAgICBBMS5sZW5ndGggPSBXLmxlbmd0aCwgTTEgPSB0aGlzLmRhdGEgPSBBMTtcbiAgICAgICAgICB9XG4gICAgICAgICAgZm9yIChzMSAmJiBuMSAmJiAodGhpcy5vcHRpb25zLmtleXMgPSAhMSksIHAxID0gMDsgcDEgPCB0MTsgcDErKylcbiAgICAgICAgICAgIGExID0gaTEgKyBwMSwgbjEgPyAoKGwxID0gbmV3IFoodGhpcywgW1BbcDFdXS5jb25jYXQoRShZW3AxXSkpKSkuZGF0YUdyb3VwID0gdGhpcy5ncm91cE1hcFtiMSArIHAxXSwgbDEuZGF0YUdyb3VwLm9wdGlvbnMgJiYgKGwxLm9wdGlvbnMgPSBsMS5kYXRhR3JvdXAub3B0aW9ucywgbShsMSwgbDEuZGF0YUdyb3VwLm9wdGlvbnMpLCBkZWxldGUgbDEuZGF0YUxhYmVscykpIDogKGwxID0gTTFbYTFdKSB8fCBXW2ExXSA9PT0gdm9pZCAwIHx8IChNMVthMV0gPSBsMSA9IG5ldyBaKHRoaXMsIFdbYTFdLCBQW3AxXSkpLCBsMSAmJiAobDEuaW5kZXggPSBuMSA/IGIxICsgcDEgOiBhMSwgZDFbcDFdID0gbDEpO1xuICAgICAgICAgIGlmICh0aGlzLm9wdGlvbnMua2V5cyA9IHMxLCBNMSAmJiAodDEgIT09IChjMSA9IE0xLmxlbmd0aCkgfHwgbjEpKVxuICAgICAgICAgICAgZm9yIChwMSA9IDA7IHAxIDwgYzE7IHAxKyspXG4gICAgICAgICAgICAgIHAxICE9PSBpMSB8fCBuMSB8fCAocDEgKz0gdDEpLCBNMVtwMV0gJiYgKE0xW3AxXS5kZXN0cm95RWxlbWVudHMoKSwgTTFbcDFdLnBsb3RYID0gdm9pZCAwKTtcbiAgICAgICAgICB0aGlzLmRhdGEgPSBNMSwgdGhpcy5wb2ludHMgPSBkMSwgeCh0aGlzLCBcImFmdGVyR2VuZXJhdGVQb2ludHNcIik7XG4gICAgICAgIH1cbiAgICAgICAgZ2V0WEV4dHJlbWVzKFMpIHtcbiAgICAgICAgICByZXR1cm4geyBtaW46IHkoUyksIG1heDogTChTKSB9O1xuICAgICAgICB9XG4gICAgICAgIGdldEV4dHJlbWVzKFMsIFcpIHtcbiAgICAgICAgICBsZXQgUCA9IHRoaXMueEF4aXMsIFkgPSB0aGlzLnlBeGlzLCBaID0gW10sIHQxID0gdGhpcy5yZXF1aXJlU29ydGluZyAmJiAhdGhpcy5pcyhcImNvbHVtblwiKSA/IDEgOiAwLCBpMSA9ICEhWSAmJiBZLnBvc2l0aXZlVmFsdWVzT25seSwgbjEgPSBXIHx8IHRoaXMuZ2V0RXh0cmVtZXNGcm9tQWxsIHx8IHRoaXMub3B0aW9ucy5nZXRFeHRyZW1lc0Zyb21BbGwsIHsgcHJvY2Vzc2VkWERhdGE6IHMxLCBwcm9jZXNzZWRZRGF0YTogZDEgfSA9IHRoaXMsIGIxLCBjMSwgYTEsIGwxLCBwMSwgTTEsIEExLCB1MSA9IDAsIGgxID0gMCwgQzEgPSAwO1xuICAgICAgICAgIGlmICh0aGlzLmNyb3BwZWQgJiYgbjEpIHtcbiAgICAgICAgICAgIGxldCBrMSA9IHRoaXMuZ2V0UHJvY2Vzc2VkRGF0YSghMCk7XG4gICAgICAgICAgICBzMSA9IGsxLnhEYXRhLCBkMSA9IGsxLnlEYXRhO1xuICAgICAgICAgIH1cbiAgICAgICAgICBsZXQgcTEgPSAoUyA9IFMgfHwgdGhpcy5zdGFja2VkWURhdGEgfHwgZDEgfHwgW10pLmxlbmd0aCwgVzEgPSBzMSB8fCB0aGlzLnhEYXRhO1xuICAgICAgICAgIGZvciAoUCAmJiAodTEgPSAoYjEgPSBQLmdldEV4dHJlbWVzKCkpLm1pbiwgaDEgPSBiMS5tYXgpLCBNMSA9IDA7IE0xIDwgcTE7IE0xKyspXG4gICAgICAgICAgICBpZiAobDEgPSBXMVtNMV0sIGMxID0gKGoocDEgPSBTW00xXSkgfHwgSShwMSkpICYmICgoaihwMSkgPyBwMSA+IDAgOiBwMS5sZW5ndGgpIHx8ICFpMSksIGExID0gVyB8fCB0aGlzLmdldEV4dHJlbWVzRnJvbUFsbCB8fCB0aGlzLm9wdGlvbnMuZ2V0RXh0cmVtZXNGcm9tQWxsIHx8IHRoaXMuY3JvcHBlZCB8fCAhUCB8fCAoVzFbTTEgKyB0MV0gfHwgbDEpID49IHUxICYmIChXMVtNMSAtIHQxXSB8fCBsMSkgPD0gaDEsIGMxICYmIGExKVxuICAgICAgICAgICAgICBpZiAoQTEgPSBwMS5sZW5ndGgpXG4gICAgICAgICAgICAgICAgZm9yICg7IEExLS07IClcbiAgICAgICAgICAgICAgICAgIGoocDFbQTFdKSAmJiAoWltDMSsrXSA9IHAxW0ExXSk7XG4gICAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICBaW0MxKytdID0gcDE7XG4gICAgICAgICAgbGV0IFIxID0geyBhY3RpdmVZRGF0YTogWiwgZGF0YU1pbjogeShaKSwgZGF0YU1heDogTChaKSB9O1xuICAgICAgICAgIHJldHVybiB4KHRoaXMsIFwiYWZ0ZXJHZXRFeHRyZW1lc1wiLCB7IGRhdGFFeHRyZW1lczogUjEgfSksIFIxO1xuICAgICAgICB9XG4gICAgICAgIGFwcGx5RXh0cmVtZXMoKSB7XG4gICAgICAgICAgbGV0IFMgPSB0aGlzLmdldEV4dHJlbWVzKCk7XG4gICAgICAgICAgcmV0dXJuIHRoaXMuZGF0YU1pbiA9IFMuZGF0YU1pbiwgdGhpcy5kYXRhTWF4ID0gUy5kYXRhTWF4LCBTO1xuICAgICAgICB9XG4gICAgICAgIGdldEZpcnN0VmFsaWRQb2ludChTLCBXID0gMCwgUCA9IDEpIHtcbiAgICAgICAgICBsZXQgWSA9IFMubGVuZ3RoLCBaID0gVztcbiAgICAgICAgICBmb3IgKDsgWiA+PSAwICYmIFogPCBZOyApIHtcbiAgICAgICAgICAgIGlmIChUKFNbWl0pKVxuICAgICAgICAgICAgICByZXR1cm4gU1taXTtcbiAgICAgICAgICAgIFogKz0gUDtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgdHJhbnNsYXRlKCkge1xuICAgICAgICAgIHZhciBoMTtcbiAgICAgICAgICB0aGlzLnByb2Nlc3NlZFhEYXRhIHx8IHRoaXMucHJvY2Vzc0RhdGEoKSwgdGhpcy5nZW5lcmF0ZVBvaW50cygpO1xuICAgICAgICAgIGxldCBTID0gdGhpcy5vcHRpb25zLCBXID0gUy5zdGFja2luZywgUCA9IHRoaXMueEF4aXMsIFkgPSBQLmNhdGVnb3JpZXMsIFogPSB0aGlzLmVuYWJsZWREYXRhU29ydGluZywgdDEgPSB0aGlzLnlBeGlzLCBpMSA9IHRoaXMucG9pbnRzLCBuMSA9IGkxLmxlbmd0aCwgczEgPSB0aGlzLnBvaW50UGxhY2VtZW50VG9YVmFsdWUoKSwgZDEgPSAhIXMxLCBiMSA9IFMudGhyZXNob2xkLCBjMSA9IFMuc3RhcnRGcm9tVGhyZXNob2xkID8gYjEgOiAwLCBhMSwgbDEsIHAxLCBNMSwgQTEgPSBOdW1iZXIuTUFYX1ZBTFVFO1xuICAgICAgICAgIGZ1bmN0aW9uIHUxKEMxKSB7XG4gICAgICAgICAgICByZXR1cm4gQihDMSwgLTFlOSwgMWU5KTtcbiAgICAgICAgICB9XG4gICAgICAgICAgZm9yIChhMSA9IDA7IGExIDwgbjE7IGExKyspIHtcbiAgICAgICAgICAgIGxldCBDMSwgcTEgPSBpMVthMV0sIFcxID0gcTEueCwgUjEsIGsxLCBOMSA9IHExLnksIHYxID0gcTEubG93LCBTMSA9IFcgJiYgKChoMSA9IHQxLnN0YWNraW5nKSA9PSBudWxsID8gdm9pZCAwIDogaDEuc3RhY2tzWyh0aGlzLm5lZ1N0YWNrcyAmJiBOMSA8IChjMSA/IDAgOiBiMSkgPyBcIi1cIiA6IFwiXCIpICsgdGhpcy5zdGFja0tleV0pO1xuICAgICAgICAgICAgbDEgPSBQLnRyYW5zbGF0ZShXMSwgITEsICExLCAhMSwgITAsIHMxKSwgcTEucGxvdFggPSBqKGwxKSA/IFgodTEobDEpKSA6IHZvaWQgMCwgVyAmJiB0aGlzLnZpc2libGUgJiYgUzEgJiYgUzFbVzFdICYmIChNMSA9IHRoaXMuZ2V0U3RhY2tJbmRpY2F0b3IoTTEsIFcxLCB0aGlzLmluZGV4KSwgIXExLmlzTnVsbCAmJiBNMS5rZXkgJiYgKGsxID0gKFIxID0gUzFbVzFdKS5wb2ludHNbTTEua2V5XSksIFIxICYmIEkoazEpICYmICh2MSA9IGsxWzBdLCBOMSA9IGsxWzFdLCB2MSA9PT0gYzEgJiYgTTEua2V5ID09PSBTMVtXMV0uYmFzZSAmJiAodjEgPSBLKGooYjEpID8gYjEgOiB0MS5taW4pKSwgdDEucG9zaXRpdmVWYWx1ZXNPbmx5ICYmIFQodjEpICYmIHYxIDw9IDAgJiYgKHYxID0gdm9pZCAwKSwgcTEudG90YWwgPSBxMS5zdGFja1RvdGFsID0gSyhSMS50b3RhbCksIHExLnBlcmNlbnRhZ2UgPSBUKHExLnkpICYmIFIxLnRvdGFsID8gcTEueSAvIFIxLnRvdGFsICogMTAwIDogdm9pZCAwLCBxMS5zdGFja1kgPSBOMSwgdGhpcy5pcnJlZ3VsYXJXaWR0aHMgfHwgUjEuc2V0T2Zmc2V0KHRoaXMucG9pbnRYT2Zmc2V0IHx8IDAsIHRoaXMuYmFyVyB8fCAwLCB2b2lkIDAsIHZvaWQgMCwgdm9pZCAwLCB0aGlzLnhBeGlzKSkpLCBxMS55Qm90dG9tID0gVCh2MSkgPyB1MSh0MS50cmFuc2xhdGUodjEsICExLCAhMCwgITEsICEwKSkgOiB2b2lkIDAsIHRoaXMuZGF0YU1vZGlmeSAmJiAoTjEgPSB0aGlzLmRhdGFNb2RpZnkubW9kaWZ5VmFsdWUoTjEsIGExKSksIGooTjEpICYmIHExLnBsb3RYICE9PSB2b2lkIDAgJiYgKEMxID0gaihDMSA9IHQxLnRyYW5zbGF0ZShOMSwgITEsICEwLCAhMSwgITApKSA/IHUxKEMxKSA6IHZvaWQgMCksIHExLnBsb3RZID0gQzEsIHExLmlzSW5zaWRlID0gdGhpcy5pc1BvaW50SW5zaWRlKHExKSwgcTEuY2xpZW50WCA9IGQxID8gWChQLnRyYW5zbGF0ZShXMSwgITEsICExLCAhMSwgITAsIHMxKSkgOiBsMSwgcTEubmVnYXRpdmUgPSAocTEueSB8fCAwKSA8IChiMSB8fCAwKSwgcTEuY2F0ZWdvcnkgPSBLKFkgJiYgWVtxMS54XSwgcTEueCksIHExLmlzTnVsbCB8fCBxMS52aXNpYmxlID09PSAhMSB8fCAocDEgIT09IHZvaWQgMCAmJiAoQTEgPSBNYXRoLm1pbihBMSwgTWF0aC5hYnMobDEgLSBwMSkpKSwgcDEgPSBsMSksIHExLnpvbmUgPSB0aGlzLnpvbmVzLmxlbmd0aCA/IHExLmdldFpvbmUoKSA6IHZvaWQgMCwgIXExLmdyYXBoaWMgJiYgdGhpcy5ncm91cCAmJiBaICYmIChxMS5pc05ldyA9ICEwKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgdGhpcy5jbG9zZXN0UG9pbnRSYW5nZVB4ID0gQTEsIHgodGhpcywgXCJhZnRlclRyYW5zbGF0ZVwiKTtcbiAgICAgICAgfVxuICAgICAgICBnZXRWYWxpZFBvaW50cyhTLCBXLCBQKSB7XG4gICAgICAgICAgbGV0IFkgPSB0aGlzLmNoYXJ0O1xuICAgICAgICAgIHJldHVybiAoUyB8fCB0aGlzLnBvaW50cyB8fCBbXSkuZmlsdGVyKGZ1bmN0aW9uKFopIHtcbiAgICAgICAgICAgIGxldCB7IHBsb3RYOiB0MSwgcGxvdFk6IGkxIH0gPSBaO1xuICAgICAgICAgICAgcmV0dXJuICEhKChQIHx8ICFaLmlzTnVsbCAmJiBqKGkxKSkgJiYgKCFXIHx8IFkuaXNJbnNpZGVQbG90KHQxLCBpMSwgeyBpbnZlcnRlZDogWS5pbnZlcnRlZCB9KSkpICYmIFoudmlzaWJsZSAhPT0gITE7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgZ2V0Q2xpcEJveCgpIHtcbiAgICAgICAgICBsZXQgeyBjaGFydDogUywgeEF4aXM6IFcsIHlBeGlzOiBQIH0gPSB0aGlzLCB7IHg6IFksIHk6IFosIHdpZHRoOiB0MSwgaGVpZ2h0OiBpMSB9ID0gXyhTLmNsaXBCb3gpO1xuICAgICAgICAgIHJldHVybiBXICYmIFcubGVuICE9PSBTLnBsb3RTaXplWCAmJiAodDEgPSBXLmxlbiksIFAgJiYgUC5sZW4gIT09IFMucGxvdFNpemVZICYmIChpMSA9IFAubGVuKSwgUy5pbnZlcnRlZCAmJiAhdGhpcy5pbnZlcnRpYmxlICYmIChbdDEsIGkxXSA9IFtpMSwgdDFdKSwgeyB4OiBZLCB5OiBaLCB3aWR0aDogdDEsIGhlaWdodDogaTEgfTtcbiAgICAgICAgfVxuICAgICAgICBnZXRTaGFyZWRDbGlwS2V5KCkge1xuICAgICAgICAgIHJldHVybiB0aGlzLnNoYXJlZENsaXBLZXkgPSAodGhpcy5vcHRpb25zLnhBeGlzIHx8IDApICsgXCIsXCIgKyAodGhpcy5vcHRpb25zLnlBeGlzIHx8IDApLCB0aGlzLnNoYXJlZENsaXBLZXk7XG4gICAgICAgIH1cbiAgICAgICAgc2V0Q2xpcCgpIHtcbiAgICAgICAgICBsZXQgeyBjaGFydDogUywgZ3JvdXA6IFcsIG1hcmtlckdyb3VwOiBQIH0gPSB0aGlzLCBZID0gUy5zaGFyZWRDbGlwcywgWiA9IFMucmVuZGVyZXIsIHQxID0gdGhpcy5nZXRDbGlwQm94KCksIGkxID0gdGhpcy5nZXRTaGFyZWRDbGlwS2V5KCksIG4xID0gWVtpMV07XG4gICAgICAgICAgbjEgPyBuMS5hbmltYXRlKHQxKSA6IFlbaTFdID0gbjEgPSBaLmNsaXBSZWN0KHQxKSwgVyAmJiBXLmNsaXAodGhpcy5vcHRpb25zLmNsaXAgPT09ICExID8gdm9pZCAwIDogbjEpLCBQICYmIFAuY2xpcCgpO1xuICAgICAgICB9XG4gICAgICAgIGFuaW1hdGUoUykge1xuICAgICAgICAgIGxldCB7IGNoYXJ0OiBXLCBncm91cDogUCwgbWFya2VyR3JvdXA6IFkgfSA9IHRoaXMsIFogPSBXLmludmVydGVkLCB0MSA9IEEodGhpcy5vcHRpb25zLmFuaW1hdGlvbiksIGkxID0gW3RoaXMuZ2V0U2hhcmVkQ2xpcEtleSgpLCB0MS5kdXJhdGlvbiwgdDEuZWFzaW5nLCB0MS5kZWZlcl0uam9pbihcIixcIiksIG4xID0gVy5zaGFyZWRDbGlwc1tpMV0sIHMxID0gVy5zaGFyZWRDbGlwc1tpMSArIFwibVwiXTtcbiAgICAgICAgICBpZiAoUyAmJiBQKSB7XG4gICAgICAgICAgICBsZXQgZDEgPSB0aGlzLmdldENsaXBCb3goKTtcbiAgICAgICAgICAgIGlmIChuMSlcbiAgICAgICAgICAgICAgbjEuYXR0cihcImhlaWdodFwiLCBkMS5oZWlnaHQpO1xuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgIGQxLndpZHRoID0gMCwgWiAmJiAoZDEueCA9IFcucGxvdEhlaWdodCksIG4xID0gVy5yZW5kZXJlci5jbGlwUmVjdChkMSksIFcuc2hhcmVkQ2xpcHNbaTFdID0gbjE7XG4gICAgICAgICAgICAgIGxldCBiMSA9IHsgeDogLTk5LCB5OiAtOTksIHdpZHRoOiBaID8gVy5wbG90V2lkdGggKyAxOTkgOiA5OSwgaGVpZ2h0OiBaID8gOTkgOiBXLnBsb3RIZWlnaHQgKyAxOTkgfTtcbiAgICAgICAgICAgICAgczEgPSBXLnJlbmRlcmVyLmNsaXBSZWN0KGIxKSwgVy5zaGFyZWRDbGlwc1tpMSArIFwibVwiXSA9IHMxO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgUC5jbGlwKG4xKSwgWSA9PSBudWxsIHx8IFkuY2xpcChzMSk7XG4gICAgICAgICAgfSBlbHNlIGlmIChuMSAmJiAhbjEuaGFzQ2xhc3MoXCJoaWdoY2hhcnRzLWFuaW1hdGluZ1wiKSkge1xuICAgICAgICAgICAgbGV0IGQxID0gdGhpcy5nZXRDbGlwQm94KCksIGIxID0gdDEuc3RlcDtcbiAgICAgICAgICAgIChZICE9IG51bGwgJiYgWS5lbGVtZW50LmNoaWxkTm9kZXMubGVuZ3RoIHx8IFcuc2VyaWVzLmxlbmd0aCA+IDEpICYmICh0MS5zdGVwID0gZnVuY3Rpb24oYzEsIGExKSB7XG4gICAgICAgICAgICAgIGIxICYmIGIxLmFwcGx5KGExLCBhcmd1bWVudHMpLCBhMS5wcm9wID09PSBcIndpZHRoXCIgJiYgKHMxICE9IG51bGwgJiYgczEuZWxlbWVudCkgJiYgczEuYXR0cihaID8gXCJoZWlnaHRcIiA6IFwid2lkdGhcIiwgYzEgKyA5OSk7XG4gICAgICAgICAgICB9KSwgbjEuYWRkQ2xhc3MoXCJoaWdoY2hhcnRzLWFuaW1hdGluZ1wiKS5hbmltYXRlKGQxLCB0MSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGFmdGVyQW5pbWF0ZSgpIHtcbiAgICAgICAgICB0aGlzLnNldENsaXAoKSwgcjEodGhpcy5jaGFydC5zaGFyZWRDbGlwcywgKFMsIFcsIFApID0+IHtcbiAgICAgICAgICAgIFMgJiYgIXRoaXMuY2hhcnQuY29udGFpbmVyLnF1ZXJ5U2VsZWN0b3IoYFtjbGlwLXBhdGg9XCJ1cmwoIyR7Uy5pZH0pXCJdYCkgJiYgKFMuZGVzdHJveSgpLCBkZWxldGUgUFtXXSk7XG4gICAgICAgICAgfSksIHRoaXMuZmluaXNoZWRBbmltYXRpbmcgPSAhMCwgeCh0aGlzLCBcImFmdGVyQW5pbWF0ZVwiKTtcbiAgICAgICAgfVxuICAgICAgICBkcmF3UG9pbnRzKFMgPSB0aGlzLnBvaW50cykge1xuICAgICAgICAgIGxldCBXLCBQLCBZLCBaLCB0MSwgaTEsIG4xLCBzMSA9IHRoaXMuY2hhcnQsIGQxID0gczEuc3R5bGVkTW9kZSwgeyBjb2xvckF4aXM6IGIxLCBvcHRpb25zOiBjMSB9ID0gdGhpcywgYTEgPSBjMS5tYXJrZXIsIGwxID0gdGhpc1t0aGlzLnNwZWNpYWxHcm91cCB8fCBcIm1hcmtlckdyb3VwXCJdLCBwMSA9IHRoaXMueEF4aXMsIE0xID0gSyhhMS5lbmFibGVkLCAhcDEgfHwgISFwMS5pc1JhZGlhbCB8fCBudWxsLCB0aGlzLmNsb3Nlc3RQb2ludFJhbmdlUHggPj0gYTEuZW5hYmxlZFRocmVzaG9sZCAqIGExLnJhZGl1cyk7XG4gICAgICAgICAgaWYgKGExLmVuYWJsZWQgIT09ICExIHx8IHRoaXMuX2hhc1BvaW50TWFya2VycylcbiAgICAgICAgICAgIGZvciAoVyA9IDA7IFcgPCBTLmxlbmd0aDsgVysrKVxuICAgICAgICAgICAgICBpZiAoWiA9IChZID0gKFAgPSBTW1ddKS5ncmFwaGljKSA/IFwiYW5pbWF0ZVwiIDogXCJhdHRyXCIsIHQxID0gUC5tYXJrZXIgfHwge30sIGkxID0gISFQLm1hcmtlciwgKE0xICYmIHQxLmVuYWJsZWQgPT09IHZvaWQgMCB8fCB0MS5lbmFibGVkKSAmJiAhUC5pc051bGwgJiYgUC52aXNpYmxlICE9PSAhMSkge1xuICAgICAgICAgICAgICAgIGxldCBBMSA9IEsodDEuc3ltYm9sLCB0aGlzLnN5bWJvbCwgXCJyZWN0XCIpO1xuICAgICAgICAgICAgICAgIG4xID0gdGhpcy5tYXJrZXJBdHRyaWJzKFAsIFAuc2VsZWN0ZWQgJiYgXCJzZWxlY3RcIiksIHRoaXMuZW5hYmxlZERhdGFTb3J0aW5nICYmIChQLnN0YXJ0WFBvcyA9IHAxLnJldmVyc2VkID8gLShuMS53aWR0aCB8fCAwKSA6IHAxLndpZHRoKTtcbiAgICAgICAgICAgICAgICBsZXQgdTEgPSBQLmlzSW5zaWRlICE9PSAhMTtcbiAgICAgICAgICAgICAgICBpZiAoIVkgJiYgdTEgJiYgKChuMS53aWR0aCB8fCAwKSA+IDAgfHwgUC5oYXNJbWFnZSkgJiYgKFAuZ3JhcGhpYyA9IFkgPSBzMS5yZW5kZXJlci5zeW1ib2woQTEsIG4xLngsIG4xLnksIG4xLndpZHRoLCBuMS5oZWlnaHQsIGkxID8gdDEgOiBhMSkuYWRkKGwxKSwgdGhpcy5lbmFibGVkRGF0YVNvcnRpbmcgJiYgczEuaGFzUmVuZGVyZWQgJiYgKFkuYXR0cih7IHg6IFAuc3RhcnRYUG9zIH0pLCBaID0gXCJhbmltYXRlXCIpKSwgWSAmJiBaID09PSBcImFuaW1hdGVcIiAmJiBZW3UxID8gXCJzaG93XCIgOiBcImhpZGVcIl0odTEpLmFuaW1hdGUobjEpLCBZKSB7XG4gICAgICAgICAgICAgICAgICBsZXQgaDEgPSB0aGlzLnBvaW50QXR0cmlicyhQLCBkMSB8fCAhUC5zZWxlY3RlZCA/IHZvaWQgMCA6IFwic2VsZWN0XCIpO1xuICAgICAgICAgICAgICAgICAgZDEgPyBiMSAmJiBZLmNzcyh7IGZpbGw6IGgxLmZpbGwgfSkgOiBZW1pdKGgxKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgWSAmJiBZLmFkZENsYXNzKFAuZ2V0Q2xhc3NOYW1lKCksICEwKTtcbiAgICAgICAgICAgICAgfSBlbHNlXG4gICAgICAgICAgICAgICAgWSAmJiAoUC5ncmFwaGljID0gWS5kZXN0cm95KCkpO1xuICAgICAgICB9XG4gICAgICAgIG1hcmtlckF0dHJpYnMoUywgVykge1xuICAgICAgICAgIGxldCBQID0gdGhpcy5vcHRpb25zLCBZID0gUC5tYXJrZXIsIFogPSBTLm1hcmtlciB8fCB7fSwgdDEgPSBaLnN5bWJvbCB8fCBZLnN5bWJvbCwgaTEgPSB7fSwgbjEsIHMxLCBkMSA9IEsoWi5yYWRpdXMsIFkgJiYgWS5yYWRpdXMpO1xuICAgICAgICAgIFcgJiYgKG4xID0gWS5zdGF0ZXNbV10sIGQxID0gSygoczEgPSBaLnN0YXRlcyAmJiBaLnN0YXRlc1tXXSkgJiYgczEucmFkaXVzLCBuMSAmJiBuMS5yYWRpdXMsIGQxICYmIGQxICsgKG4xICYmIG4xLnJhZGl1c1BsdXMgfHwgMCkpKSwgUy5oYXNJbWFnZSA9IHQxICYmIHQxLmluZGV4T2YoXCJ1cmxcIikgPT09IDAsIFMuaGFzSW1hZ2UgJiYgKGQxID0gMCk7XG4gICAgICAgICAgbGV0IGIxID0gUy5wb3MoKTtcbiAgICAgICAgICByZXR1cm4gaihkMSkgJiYgYjEgJiYgKFAuY3Jpc3AgJiYgKGIxWzBdID0gRihiMVswXSwgUy5oYXNJbWFnZSA/IDAgOiB0MSA9PT0gXCJyZWN0XCIgPyAoWSA9PSBudWxsID8gdm9pZCAwIDogWS5saW5lV2lkdGgpIHx8IDAgOiAxKSksIGkxLnggPSBiMVswXSAtIGQxLCBpMS55ID0gYjFbMV0gLSBkMSksIGQxICYmIChpMS53aWR0aCA9IGkxLmhlaWdodCA9IDIgKiBkMSksIGkxO1xuICAgICAgICB9XG4gICAgICAgIHBvaW50QXR0cmlicyhTLCBXKSB7XG4gICAgICAgICAgbGV0IFAgPSB0aGlzLm9wdGlvbnMubWFya2VyLCBZID0gUyAmJiBTLm9wdGlvbnMsIFogPSBZICYmIFkubWFya2VyIHx8IHt9LCB0MSA9IFkgJiYgWS5jb2xvciwgaTEgPSBTICYmIFMuY29sb3IsIG4xID0gUyAmJiBTLnpvbmUgJiYgUy56b25lLmNvbG9yLCBzMSwgZDEsIGIxID0gdGhpcy5jb2xvciwgYzEsIGExLCBsMSA9IEsoWi5saW5lV2lkdGgsIFAubGluZVdpZHRoKSwgcDEgPSAxO1xuICAgICAgICAgIHJldHVybiBiMSA9IHQxIHx8IG4xIHx8IGkxIHx8IGIxLCBjMSA9IFouZmlsbENvbG9yIHx8IFAuZmlsbENvbG9yIHx8IGIxLCBhMSA9IFoubGluZUNvbG9yIHx8IFAubGluZUNvbG9yIHx8IGIxLCBXID0gVyB8fCBcIm5vcm1hbFwiLCBzMSA9IFAuc3RhdGVzW1ddIHx8IHt9LCBsMSA9IEsoKGQxID0gWi5zdGF0ZXMgJiYgWi5zdGF0ZXNbV10gfHwge30pLmxpbmVXaWR0aCwgczEubGluZVdpZHRoLCBsMSArIEsoZDEubGluZVdpZHRoUGx1cywgczEubGluZVdpZHRoUGx1cywgMCkpLCBjMSA9IGQxLmZpbGxDb2xvciB8fCBzMS5maWxsQ29sb3IgfHwgYzEsIHsgc3Ryb2tlOiBhMSA9IGQxLmxpbmVDb2xvciB8fCBzMS5saW5lQ29sb3IgfHwgYTEsIFwic3Ryb2tlLXdpZHRoXCI6IGwxLCBmaWxsOiBjMSwgb3BhY2l0eTogcDEgPSBLKGQxLm9wYWNpdHksIHMxLm9wYWNpdHksIHAxKSB9O1xuICAgICAgICB9XG4gICAgICAgIGRlc3Ryb3koUykge1xuICAgICAgICAgIGxldCBXLCBQLCBZLCBaID0gdGhpcywgdDEgPSBaLmNoYXJ0LCBpMSA9IC9BcHBsZVdlYktpdFxcLzUzMy8udGVzdChnLm5hdmlnYXRvci51c2VyQWdlbnQpLCBuMSA9IFouZGF0YSB8fCBbXTtcbiAgICAgICAgICBmb3IgKHgoWiwgXCJkZXN0cm95XCIsIHsga2VlcEV2ZW50c0ZvclVwZGF0ZTogUyB9KSwgdGhpcy5yZW1vdmVFdmVudHMoUyksIChaLmF4aXNUeXBlcyB8fCBbXSkuZm9yRWFjaChmdW5jdGlvbihzMSkge1xuICAgICAgICAgICAgKFkgPSBaW3MxXSkgJiYgWS5zZXJpZXMgJiYgKEMoWS5zZXJpZXMsIFopLCBZLmlzRGlydHkgPSBZLmZvcmNlUmVkcmF3ID0gITApO1xuICAgICAgICAgIH0pLCBaLmxlZ2VuZEl0ZW0gJiYgWi5jaGFydC5sZWdlbmQuZGVzdHJveUl0ZW0oWiksIFcgPSBuMS5sZW5ndGg7IFctLTsgKVxuICAgICAgICAgICAgKFAgPSBuMVtXXSkgJiYgUC5kZXN0cm95ICYmIFAuZGVzdHJveSgpO1xuICAgICAgICAgIGZvciAobGV0IHMxIG9mIFouem9uZXMpXG4gICAgICAgICAgICB3KHMxLCB2b2lkIDAsICEwKTtcbiAgICAgICAgICB1LmNsZWFyVGltZW91dChaLmFuaW1hdGlvblRpbWVvdXQpLCByMShaLCBmdW5jdGlvbihzMSwgZDEpIHtcbiAgICAgICAgICAgIHMxIGluc3RhbmNlb2YgTSAmJiAhczEuc3Vydml2ZSAmJiBzMVtpMSAmJiBkMSA9PT0gXCJncm91cFwiID8gXCJoaWRlXCIgOiBcImRlc3Ryb3lcIl0oKTtcbiAgICAgICAgICB9KSwgdDEuaG92ZXJTZXJpZXMgPT09IFogJiYgKHQxLmhvdmVyU2VyaWVzID0gdm9pZCAwKSwgQyh0MS5zZXJpZXMsIFopLCB0MS5vcmRlckl0ZW1zKFwic2VyaWVzXCIpLCByMShaLCBmdW5jdGlvbihzMSwgZDEpIHtcbiAgICAgICAgICAgIFMgJiYgZDEgPT09IFwiaGNFdmVudHNcIiB8fCBkZWxldGUgWltkMV07XG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgYXBwbHlab25lcygpIHtcbiAgICAgICAgICBsZXQgeyBhcmVhOiBTLCBjaGFydDogVywgZ3JhcGg6IFAsIHpvbmVzOiBZLCBwb2ludHM6IFosIHhBeGlzOiB0MSwgeUF4aXM6IGkxLCB6b25lQXhpczogbjEgfSA9IHRoaXMsIHsgaW52ZXJ0ZWQ6IHMxLCByZW5kZXJlcjogZDEgfSA9IFcsIGIxID0gdGhpc1tgJHtuMX1BeGlzYF0sIHsgaXNYQXhpczogYzEsIGxlbjogYTEgPSAwIH0gPSBiMSB8fCB7fSwgbDEgPSAoKFAgPT0gbnVsbCA/IHZvaWQgMCA6IFAuc3Ryb2tlV2lkdGgoKSkgfHwgMCkgLyAyICsgMSwgcDEgPSAoTTEsIEExID0gMCwgdTEgPSAwKSA9PiB7XG4gICAgICAgICAgICBzMSAmJiAodTEgPSBhMSAtIHUxKTtcbiAgICAgICAgICAgIGxldCB7IHRyYW5zbGF0ZWQ6IGgxID0gMCwgbGluZUNsaXA6IEMxIH0gPSBNMSwgcTEgPSB1MSAtIGgxO1xuICAgICAgICAgICAgQzEgPT0gbnVsbCB8fCBDMS5wdXNoKFtcIkxcIiwgQTEsIE1hdGguYWJzKHExKSA8IGwxID8gdTEgLSBsMSAqIChxMSA8PSAwID8gLTEgOiAxKSA6IGgxXSk7XG4gICAgICAgICAgfTtcbiAgICAgICAgICBpZiAoWS5sZW5ndGggJiYgKFAgfHwgUykgJiYgYjEgJiYgaihiMS5taW4pKSB7XG4gICAgICAgICAgICBsZXQgTTEgPSBiMS5nZXRFeHRyZW1lcygpLm1heCwgQTEgPSAoQzEpID0+IHtcbiAgICAgICAgICAgICAgQzEuZm9yRWFjaCgocTEsIFcxKSA9PiB7XG4gICAgICAgICAgICAgICAgKHExWzBdID09PSBcIk1cIiB8fCBxMVswXSA9PT0gXCJMXCIpICYmIChDMVtXMV0gPSBbcTFbMF0sIGMxID8gYTEgLSBxMVsxXSA6IHExWzFdLCBjMSA/IHExWzJdIDogYTEgLSBxMVsyXV0pO1xuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICBpZiAoWS5mb3JFYWNoKChDMSkgPT4ge1xuICAgICAgICAgICAgICBDMS5saW5lQ2xpcCA9IFtdLCBDMS50cmFuc2xhdGVkID0gQihiMS50b1BpeGVscyhLKEMxLnZhbHVlLCBNMSksICEwKSB8fCAwLCAwLCBhMSk7XG4gICAgICAgICAgICB9KSwgUCAmJiAhdGhpcy5zaG93TGluZSAmJiBQLmhpZGUoKSwgUyAmJiBTLmhpZGUoKSwgbjEgPT09IFwieVwiICYmIFoubGVuZ3RoIDwgdDEubGVuKVxuICAgICAgICAgICAgICBmb3IgKGxldCBDMSBvZiBaKSB7XG4gICAgICAgICAgICAgICAgbGV0IHsgcGxvdFg6IHExLCBwbG90WTogVzEsIHpvbmU6IFIxIH0gPSBDMSwgazEgPSBSMSAmJiBZW1kuaW5kZXhPZihSMSkgLSAxXTtcbiAgICAgICAgICAgICAgICBSMSAmJiBwMShSMSwgcTEsIFcxKSwgazEgJiYgcDEoazEsIHExLCBXMSk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGxldCB1MSA9IFtdLCBoMSA9IGIxLnRvUGl4ZWxzKGIxLmdldEV4dHJlbWVzKCkubWluLCAhMCk7XG4gICAgICAgICAgICBZLmZvckVhY2goKEMxKSA9PiB7XG4gICAgICAgICAgICAgIHZhciBoMCwgTzA7XG4gICAgICAgICAgICAgIGxldCBxMSA9IEMxLmxpbmVDbGlwIHx8IFtdLCBXMSA9IE1hdGgucm91bmQoQzEudHJhbnNsYXRlZCB8fCAwKTtcbiAgICAgICAgICAgICAgdDEucmV2ZXJzZWQgJiYgcTEucmV2ZXJzZSgpO1xuICAgICAgICAgICAgICBsZXQgeyBjbGlwOiBSMSwgc2ltcGxlQ2xpcDogazEgfSA9IEMxLCBOMSA9IDAsIHYxID0gMCwgUzEgPSB0MS5sZW4sIEQxID0gaTEubGVuO1xuICAgICAgICAgICAgICBjMSA/IChOMSA9IFcxLCBTMSA9IGgxKSA6ICh2MSA9IFcxLCBEMSA9IGgxKTtcbiAgICAgICAgICAgICAgbGV0IEYxID0gW1tcIk1cIiwgTjEsIHYxXSwgW1wiTFwiLCBTMSwgdjFdLCBbXCJMXCIsIFMxLCBEMV0sIFtcIkxcIiwgTjEsIEQxXSwgW1wiWlwiXV0sIFUxID0gW0YxWzBdLCAuLi5xMSwgRjFbMV0sIEYxWzJdLCAuLi51MSwgRjFbM10sIEYxWzRdXTtcbiAgICAgICAgICAgICAgdTEgPSBxMS5yZXZlcnNlKCksIGgxID0gVzEsIHMxICYmIChBMShVMSksIFMgJiYgQTEoRjEpKSwgUjEgPyAoUjEuYW5pbWF0ZSh7IGQ6IFUxIH0pLCBrMSA9PSBudWxsIHx8IGsxLmFuaW1hdGUoeyBkOiBGMSB9KSkgOiAoUjEgPSBDMS5jbGlwID0gZDEucGF0aChVMSksIFMgJiYgKGsxID0gQzEuc2ltcGxlQ2xpcCA9IGQxLnBhdGgoRjEpKSksIFAgJiYgKChoMCA9IEMxLmdyYXBoKSA9PSBudWxsIHx8IGgwLmNsaXAoUjEpKSwgUyAmJiAoKE8wID0gQzEuYXJlYSkgPT0gbnVsbCB8fCBPMC5jbGlwKGsxKSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9IGVsc2VcbiAgICAgICAgICAgIHRoaXMudmlzaWJsZSAmJiAoUCAmJiBQLnNob3coKSwgUyAmJiBTLnNob3coKSk7XG4gICAgICAgIH1cbiAgICAgICAgcGxvdEdyb3VwKFMsIFcsIFAsIFksIFopIHtcbiAgICAgICAgICBsZXQgdDEgPSB0aGlzW1NdLCBpMSA9ICF0MSwgbjEgPSB7IHZpc2liaWxpdHk6IFAsIHpJbmRleDogWSB8fCAwLjEgfTtcbiAgICAgICAgICByZXR1cm4gVCh0aGlzLm9wYWNpdHkpICYmICF0aGlzLmNoYXJ0LnN0eWxlZE1vZGUgJiYgdGhpcy5zdGF0ZSAhPT0gXCJpbmFjdGl2ZVwiICYmIChuMS5vcGFjaXR5ID0gdGhpcy5vcGFjaXR5KSwgdDEgfHwgKHRoaXNbU10gPSB0MSA9IHRoaXMuY2hhcnQucmVuZGVyZXIuZygpLmFkZChaKSksIHQxLmFkZENsYXNzKFwiaGlnaGNoYXJ0cy1cIiArIFcgKyBcIiBoaWdoY2hhcnRzLXNlcmllcy1cIiArIHRoaXMuaW5kZXggKyBcIiBoaWdoY2hhcnRzLVwiICsgdGhpcy50eXBlICsgXCItc2VyaWVzIFwiICsgKFQodGhpcy5jb2xvckluZGV4KSA/IFwiaGlnaGNoYXJ0cy1jb2xvci1cIiArIHRoaXMuY29sb3JJbmRleCArIFwiIFwiIDogXCJcIikgKyAodGhpcy5vcHRpb25zLmNsYXNzTmFtZSB8fCBcIlwiKSArICh0MS5oYXNDbGFzcyhcImhpZ2hjaGFydHMtdHJhY2tlclwiKSA/IFwiIGhpZ2hjaGFydHMtdHJhY2tlclwiIDogXCJcIiksICEwKSwgdDEuYXR0cihuMSlbaTEgPyBcImF0dHJcIiA6IFwiYW5pbWF0ZVwiXSh0aGlzLmdldFBsb3RCb3goVykpLCB0MTtcbiAgICAgICAgfVxuICAgICAgICBnZXRQbG90Qm94KFMpIHtcbiAgICAgICAgICBsZXQgVyA9IHRoaXMueEF4aXMsIFAgPSB0aGlzLnlBeGlzLCBZID0gdGhpcy5jaGFydCwgWiA9IFkuaW52ZXJ0ZWQgJiYgIVkucG9sYXIgJiYgVyAmJiB0aGlzLmludmVydGlibGUgJiYgUyA9PT0gXCJzZXJpZXNcIjtcbiAgICAgICAgICByZXR1cm4gWS5pbnZlcnRlZCAmJiAoVyA9IFAsIFAgPSB0aGlzLnhBeGlzKSwgeyB0cmFuc2xhdGVYOiBXID8gVy5sZWZ0IDogWS5wbG90TGVmdCwgdHJhbnNsYXRlWTogUCA/IFAudG9wIDogWS5wbG90VG9wLCByb3RhdGlvbjogWiA/IDkwIDogMCwgcm90YXRpb25PcmlnaW5YOiBaID8gKFcubGVuIC0gUC5sZW4pIC8gMiA6IDAsIHJvdGF0aW9uT3JpZ2luWTogWiA/IChXLmxlbiArIFAubGVuKSAvIDIgOiAwLCBzY2FsZVg6IFogPyAtMSA6IDEsIHNjYWxlWTogMSB9O1xuICAgICAgICB9XG4gICAgICAgIHJlbW92ZUV2ZW50cyhTKSB7XG4gICAgICAgICAgbGV0IHsgZXZlbnRzVG9VbmJpbmQ6IFcgfSA9IHRoaXM7XG4gICAgICAgICAgUyB8fCBRKHRoaXMpLCBXLmxlbmd0aCAmJiAoVy5mb3JFYWNoKChQKSA9PiB7XG4gICAgICAgICAgICBQKCk7XG4gICAgICAgICAgfSksIFcubGVuZ3RoID0gMCk7XG4gICAgICAgIH1cbiAgICAgICAgcmVuZGVyKCkge1xuICAgICAgICAgIHZhciBkMSwgYjEsIGMxLCBhMSwgbDE7XG4gICAgICAgICAgbGV0IFMgPSB0aGlzLCB7IGNoYXJ0OiBXLCBvcHRpb25zOiBQLCBoYXNSZW5kZXJlZDogWSB9ID0gUywgWiA9IEEoUC5hbmltYXRpb24pLCB0MSA9IFMudmlzaWJsZSA/IFwiaW5oZXJpdFwiIDogXCJoaWRkZW5cIiwgaTEgPSBQLnpJbmRleCwgbjEgPSBXLnNlcmllc0dyb3VwLCBzMSA9IFMuZmluaXNoZWRBbmltYXRpbmcgPyAwIDogWi5kdXJhdGlvbjtcbiAgICAgICAgICB4KHRoaXMsIFwicmVuZGVyXCIpLCBTLnBsb3RHcm91cChcImdyb3VwXCIsIFwic2VyaWVzXCIsIHQxLCBpMSwgbjEpLCBTLm1hcmtlckdyb3VwID0gUy5wbG90R3JvdXAoXCJtYXJrZXJHcm91cFwiLCBcIm1hcmtlcnNcIiwgdDEsIGkxLCBuMSksIFAuY2xpcCAhPT0gITEgJiYgUy5zZXRDbGlwKCksIHMxICYmICgoZDEgPSBTLmFuaW1hdGUpID09IG51bGwgfHwgZDEuY2FsbChTLCAhMCkpLCBTLmRyYXdHcmFwaCAmJiAoUy5kcmF3R3JhcGgoKSwgUy5hcHBseVpvbmVzKCkpLCBTLnZpc2libGUgJiYgUy5kcmF3UG9pbnRzKCksIChiMSA9IFMuZHJhd0RhdGFMYWJlbHMpID09IG51bGwgfHwgYjEuY2FsbChTKSwgKGMxID0gUy5yZWRyYXdQb2ludHMpID09IG51bGwgfHwgYzEuY2FsbChTKSwgUC5lbmFibGVNb3VzZVRyYWNraW5nICYmICgoYTEgPSBTLmRyYXdUcmFja2VyKSA9PSBudWxsIHx8IGExLmNhbGwoUykpLCBzMSAmJiAoKGwxID0gUy5hbmltYXRlKSA9PSBudWxsIHx8IGwxLmNhbGwoUykpLCBZIHx8IChzMSAmJiBaLmRlZmVyICYmIChzMSArPSBaLmRlZmVyKSwgUy5hbmltYXRpb25UaW1lb3V0ID0gRCgoKSA9PiB7XG4gICAgICAgICAgICBTLmFmdGVyQW5pbWF0ZSgpO1xuICAgICAgICAgIH0sIHMxIHx8IDApKSwgUy5pc0RpcnR5ID0gITEsIFMuaGFzUmVuZGVyZWQgPSAhMCwgeChTLCBcImFmdGVyUmVuZGVyXCIpO1xuICAgICAgICB9XG4gICAgICAgIHJlZHJhdygpIHtcbiAgICAgICAgICBsZXQgUyA9IHRoaXMuaXNEaXJ0eSB8fCB0aGlzLmlzRGlydHlEYXRhO1xuICAgICAgICAgIHRoaXMudHJhbnNsYXRlKCksIHRoaXMucmVuZGVyKCksIFMgJiYgZGVsZXRlIHRoaXMua2RUcmVlO1xuICAgICAgICB9XG4gICAgICAgIHJlc2VydmVTcGFjZSgpIHtcbiAgICAgICAgICByZXR1cm4gdGhpcy52aXNpYmxlIHx8ICF0aGlzLmNoYXJ0Lm9wdGlvbnMuY2hhcnQuaWdub3JlSGlkZGVuU2VyaWVzO1xuICAgICAgICB9XG4gICAgICAgIHNlYXJjaFBvaW50KFMsIFcpIHtcbiAgICAgICAgICBsZXQgeyB4QXhpczogUCwgeUF4aXM6IFkgfSA9IHRoaXMsIFogPSB0aGlzLmNoYXJ0LmludmVydGVkO1xuICAgICAgICAgIHJldHVybiB0aGlzLnNlYXJjaEtEVHJlZSh7IGNsaWVudFg6IFogPyBQLmxlbiAtIFMuY2hhcnRZICsgUC5wb3MgOiBTLmNoYXJ0WCAtIFAucG9zLCBwbG90WTogWiA/IFkubGVuIC0gUy5jaGFydFggKyBZLnBvcyA6IFMuY2hhcnRZIC0gWS5wb3MgfSwgVywgUyk7XG4gICAgICAgIH1cbiAgICAgICAgYnVpbGRLRFRyZWUoUykge1xuICAgICAgICAgIHRoaXMuYnVpbGRpbmdLZFRyZWUgPSAhMDtcbiAgICAgICAgICBsZXQgVyA9IHRoaXMsIFAgPSBXLm9wdGlvbnMuZmluZE5lYXJlc3RQb2ludEJ5LmluZGV4T2YoXCJ5XCIpID4gLTEgPyAyIDogMTtcbiAgICAgICAgICBkZWxldGUgVy5rZFRyZWUsIEQoZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICBXLmtkVHJlZSA9IGZ1bmN0aW9uIFkoWiwgdDEsIGkxKSB7XG4gICAgICAgICAgICAgIGxldCBuMSwgczEsIGQxID0gWiA9PSBudWxsID8gdm9pZCAwIDogWi5sZW5ndGg7XG4gICAgICAgICAgICAgIGlmIChkMSlcbiAgICAgICAgICAgICAgICByZXR1cm4gbjEgPSBXLmtkQXhpc0FycmF5W3QxICUgaTFdLCBaLnNvcnQoKGIxLCBjMSkgPT4gKGIxW24xXSB8fCAwKSAtIChjMVtuMV0gfHwgMCkpLCB7IHBvaW50OiBaW3MxID0gTWF0aC5mbG9vcihkMSAvIDIpXSwgbGVmdDogWShaLnNsaWNlKDAsIHMxKSwgdDEgKyAxLCBpMSksIHJpZ2h0OiBZKFouc2xpY2UoczEgKyAxKSwgdDEgKyAxLCBpMSkgfTtcbiAgICAgICAgICAgIH0oVy5nZXRWYWxpZFBvaW50cyh2b2lkIDAsICFXLmRpcmVjdFRvdWNoKSwgUCwgUCksIFcuYnVpbGRpbmdLZFRyZWUgPSAhMTtcbiAgICAgICAgICB9LCBXLm9wdGlvbnMua2ROb3cgfHwgKFMgPT0gbnVsbCA/IHZvaWQgMCA6IFMudHlwZSkgPT09IFwidG91Y2hzdGFydFwiID8gMCA6IDEpO1xuICAgICAgICB9XG4gICAgICAgIHNlYXJjaEtEVHJlZShTLCBXLCBQKSB7XG4gICAgICAgICAgbGV0IFkgPSB0aGlzLCBbWiwgdDFdID0gdGhpcy5rZEF4aXNBcnJheSwgaTEgPSBXID8gXCJkaXN0WFwiIDogXCJkaXN0XCIsIG4xID0gKFkub3B0aW9ucy5maW5kTmVhcmVzdFBvaW50QnkgfHwgXCJcIikuaW5kZXhPZihcInlcIikgPiAtMSA/IDIgOiAxLCBzMSA9ICEhWS5pc0J1YmJsZTtcbiAgICAgICAgICBpZiAodGhpcy5rZFRyZWUgfHwgdGhpcy5idWlsZGluZ0tkVHJlZSB8fCB0aGlzLmJ1aWxkS0RUcmVlKFApLCB0aGlzLmtkVHJlZSlcbiAgICAgICAgICAgIHJldHVybiBmdW5jdGlvbiBkMShiMSwgYzEsIGExLCBsMSkge1xuICAgICAgICAgICAgICB2YXIgUjE7XG4gICAgICAgICAgICAgIGxldCBwMSA9IGMxLnBvaW50LCBNMSA9IFkua2RBeGlzQXJyYXlbYTEgJSBsMV0sIEExLCB1MSwgaDEgPSBwMTtcbiAgICAgICAgICAgICAgKGZ1bmN0aW9uKGsxLCBOMSkge1xuICAgICAgICAgICAgICAgIHZhciB3MTtcbiAgICAgICAgICAgICAgICBsZXQgdjEgPSBrMVtaXSwgUzEgPSBOMVtaXSwgRDEgPSBUKHYxKSAmJiBUKFMxKSA/IHYxIC0gUzEgOiBudWxsLCBGMSA9IGsxW3QxXSwgVTEgPSBOMVt0MV0sIGgwID0gVChGMSkgJiYgVChVMSkgPyBGMSAtIFUxIDogMCwgTzAgPSBzMSAmJiAoKHcxID0gTjEubWFya2VyKSA9PSBudWxsID8gdm9pZCAwIDogdzEucmFkaXVzKSB8fCAwO1xuICAgICAgICAgICAgICAgIE4xLmRpc3QgPSBNYXRoLnNxcnQoKEQxICYmIEQxICogRDEgfHwgMCkgKyBoMCAqIGgwKSAtIE8wLCBOMS5kaXN0WCA9IFQoRDEpID8gTWF0aC5hYnMoRDEpIC0gTzAgOiBOdW1iZXIuTUFYX1ZBTFVFO1xuICAgICAgICAgICAgICB9KShiMSwgcDEpO1xuICAgICAgICAgICAgICBsZXQgQzEgPSAoYjFbTTFdIHx8IDApIC0gKHAxW00xXSB8fCAwKSArIChzMSAmJiAoKFIxID0gcDEubWFya2VyKSA9PSBudWxsID8gdm9pZCAwIDogUjEucmFkaXVzKSB8fCAwKSwgcTEgPSBDMSA8IDAgPyBcImxlZnRcIiA6IFwicmlnaHRcIiwgVzEgPSBDMSA8IDAgPyBcInJpZ2h0XCIgOiBcImxlZnRcIjtcbiAgICAgICAgICAgICAgcmV0dXJuIGMxW3ExXSAmJiAoaDEgPSAoQTEgPSBkMShiMSwgYzFbcTFdLCBhMSArIDEsIGwxKSlbaTFdIDwgaDFbaTFdID8gQTEgOiBwMSksIGMxW1cxXSAmJiBNYXRoLnNxcnQoQzEgKiBDMSkgPCBoMVtpMV0gJiYgKGgxID0gKHUxID0gZDEoYjEsIGMxW1cxXSwgYTEgKyAxLCBsMSkpW2kxXSA8IGgxW2kxXSA/IHUxIDogaDEpLCBoMTtcbiAgICAgICAgICAgIH0oUywgdGhpcy5rZFRyZWUsIG4xLCBuMSk7XG4gICAgICAgIH1cbiAgICAgICAgcG9pbnRQbGFjZW1lbnRUb1hWYWx1ZSgpIHtcbiAgICAgICAgICBsZXQgeyBvcHRpb25zOiBTLCB4QXhpczogVyB9ID0gdGhpcywgUCA9IFMucG9pbnRQbGFjZW1lbnQ7XG4gICAgICAgICAgcmV0dXJuIFAgPT09IFwiYmV0d2VlblwiICYmIChQID0gVy5yZXZlcnNlZCA/IC0wLjUgOiAwLjUpLCBqKFApID8gUCAqIChTLnBvaW50UmFuZ2UgfHwgVy5wb2ludFJhbmdlKSA6IDA7XG4gICAgICAgIH1cbiAgICAgICAgaXNQb2ludEluc2lkZShTKSB7XG4gICAgICAgICAgbGV0IHsgY2hhcnQ6IFcsIHhBeGlzOiBQLCB5QXhpczogWSB9ID0gdGhpcywgeyBwbG90WDogWiA9IC0xLCBwbG90WTogdDEgPSAtMSB9ID0gUztcbiAgICAgICAgICByZXR1cm4gdDEgPj0gMCAmJiB0MSA8PSAoWSA/IFkubGVuIDogVy5wbG90SGVpZ2h0KSAmJiBaID49IDAgJiYgWiA8PSAoUCA/IFAubGVuIDogVy5wbG90V2lkdGgpO1xuICAgICAgICB9XG4gICAgICAgIGRyYXdUcmFja2VyKCkge1xuICAgICAgICAgIHZhciBjMTtcbiAgICAgICAgICBsZXQgUyA9IHRoaXMsIFcgPSBTLm9wdGlvbnMsIFAgPSBXLnRyYWNrQnlBcmVhLCBZID0gW10uY29uY2F0KChQID8gUy5hcmVhUGF0aCA6IFMuZ3JhcGhQYXRoKSB8fCBbXSksIFogPSBTLmNoYXJ0LCB0MSA9IFoucG9pbnRlciwgaTEgPSBaLnJlbmRlcmVyLCBuMSA9ICgoYzEgPSBaLm9wdGlvbnMudG9vbHRpcCkgPT0gbnVsbCA/IHZvaWQgMCA6IGMxLnNuYXApIHx8IDAsIHMxID0gKCkgPT4ge1xuICAgICAgICAgICAgVy5lbmFibGVNb3VzZVRyYWNraW5nICYmIFouaG92ZXJTZXJpZXMgIT09IFMgJiYgUy5vbk1vdXNlT3ZlcigpO1xuICAgICAgICAgIH0sIGQxID0gXCJyZ2JhKDE5MiwxOTIsMTkyLFwiICsgKGggPyAxZS00IDogMmUtMykgKyBcIilcIiwgYjEgPSBTLnRyYWNrZXI7XG4gICAgICAgICAgYjEgPyBiMS5hdHRyKHsgZDogWSB9KSA6IFMuZ3JhcGggJiYgKFMudHJhY2tlciA9IGIxID0gaTEucGF0aChZKS5hdHRyKHsgdmlzaWJpbGl0eTogUy52aXNpYmxlID8gXCJpbmhlcml0XCIgOiBcImhpZGRlblwiLCB6SW5kZXg6IDIgfSkuYWRkQ2xhc3MoUCA/IFwiaGlnaGNoYXJ0cy10cmFja2VyLWFyZWFcIiA6IFwiaGlnaGNoYXJ0cy10cmFja2VyLWxpbmVcIikuYWRkKFMuZ3JvdXApLCBaLnN0eWxlZE1vZGUgfHwgYjEuYXR0cih7IFwic3Ryb2tlLWxpbmVjYXBcIjogXCJyb3VuZFwiLCBcInN0cm9rZS1saW5lam9pblwiOiBcInJvdW5kXCIsIHN0cm9rZTogZDEsIGZpbGw6IFAgPyBkMSA6IFwibm9uZVwiLCBcInN0cm9rZS13aWR0aFwiOiBTLmdyYXBoLnN0cm9rZVdpZHRoKCkgKyAoUCA/IDAgOiAyICogbjEpIH0pLCBbUy50cmFja2VyLCBTLm1hcmtlckdyb3VwLCBTLmRhdGFMYWJlbHNHcm91cF0uZm9yRWFjaCgoYTEpID0+IHtcbiAgICAgICAgICAgIGExICYmIChhMS5hZGRDbGFzcyhcImhpZ2hjaGFydHMtdHJhY2tlclwiKS5vbihcIm1vdXNlb3ZlclwiLCBzMSkub24oXCJtb3VzZW91dFwiLCAobDEpID0+IHtcbiAgICAgICAgICAgICAgdDEgPT0gbnVsbCB8fCB0MS5vblRyYWNrZXJNb3VzZU91dChsMSk7XG4gICAgICAgICAgICB9KSwgVy5jdXJzb3IgJiYgIVouc3R5bGVkTW9kZSAmJiBhMS5jc3MoeyBjdXJzb3I6IFcuY3Vyc29yIH0pLCBhMS5vbihcInRvdWNoc3RhcnRcIiwgczEpKTtcbiAgICAgICAgICB9KSksIHgodGhpcywgXCJhZnRlckRyYXdUcmFja2VyXCIpO1xuICAgICAgICB9XG4gICAgICAgIGFkZFBvaW50KFMsIFcsIFAsIFksIFopIHtcbiAgICAgICAgICBsZXQgdDEsIGkxLCBuMSA9IHRoaXMub3B0aW9ucywgczEgPSB0aGlzLmRhdGEsIGQxID0gdGhpcy5jaGFydCwgYjEgPSB0aGlzLnhBeGlzLCBjMSA9IGIxICYmIGIxLmhhc05hbWVzICYmIGIxLm5hbWVzLCBhMSA9IG4xLmRhdGEsIGwxID0gdGhpcy54RGF0YTtcbiAgICAgICAgICBXID0gSyhXLCAhMCk7XG4gICAgICAgICAgbGV0IHAxID0geyBzZXJpZXM6IHRoaXMgfTtcbiAgICAgICAgICB0aGlzLnBvaW50Q2xhc3MucHJvdG90eXBlLmFwcGx5T3B0aW9ucy5hcHBseShwMSwgW1NdKTtcbiAgICAgICAgICBsZXQgTTEgPSBwMS54O1xuICAgICAgICAgIGlmIChpMSA9IGwxLmxlbmd0aCwgdGhpcy5yZXF1aXJlU29ydGluZyAmJiBNMSA8IGwxW2kxIC0gMV0pXG4gICAgICAgICAgICBmb3IgKHQxID0gITA7IGkxICYmIGwxW2kxIC0gMV0gPiBNMTsgKVxuICAgICAgICAgICAgICBpMS0tO1xuICAgICAgICAgIHRoaXMudXBkYXRlUGFyYWxsZWxBcnJheXMocDEsIFwic3BsaWNlXCIsIFtpMSwgMCwgMF0pLCB0aGlzLnVwZGF0ZVBhcmFsbGVsQXJyYXlzKHAxLCBpMSksIGMxICYmIHAxLm5hbWUgJiYgKGMxW00xXSA9IHAxLm5hbWUpLCBhMS5zcGxpY2UoaTEsIDAsIFMpLCAodDEgfHwgdGhpcy5wcm9jZXNzZWREYXRhKSAmJiAodGhpcy5kYXRhLnNwbGljZShpMSwgMCwgbnVsbCksIHRoaXMucHJvY2Vzc0RhdGEoKSksIG4xLmxlZ2VuZFR5cGUgPT09IFwicG9pbnRcIiAmJiB0aGlzLmdlbmVyYXRlUG9pbnRzKCksIFAgJiYgKHMxWzBdICYmIHMxWzBdLnJlbW92ZSA/IHMxWzBdLnJlbW92ZSghMSkgOiAoczEuc2hpZnQoKSwgdGhpcy51cGRhdGVQYXJhbGxlbEFycmF5cyhwMSwgXCJzaGlmdFwiKSwgYTEuc2hpZnQoKSkpLCBaICE9PSAhMSAmJiB4KHRoaXMsIFwiYWRkUG9pbnRcIiwgeyBwb2ludDogcDEgfSksIHRoaXMuaXNEaXJ0eSA9ICEwLCB0aGlzLmlzRGlydHlEYXRhID0gITAsIFcgJiYgZDEucmVkcmF3KFkpO1xuICAgICAgICB9XG4gICAgICAgIHJlbW92ZVBvaW50KFMsIFcsIFApIHtcbiAgICAgICAgICBsZXQgWSA9IHRoaXMsIFogPSBZLmRhdGEsIHQxID0gWltTXSwgaTEgPSBZLnBvaW50cywgbjEgPSBZLmNoYXJ0LCBzMSA9IGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgaTEgJiYgaTEubGVuZ3RoID09PSBaLmxlbmd0aCAmJiBpMS5zcGxpY2UoUywgMSksIFouc3BsaWNlKFMsIDEpLCBZLm9wdGlvbnMuZGF0YS5zcGxpY2UoUywgMSksIFkudXBkYXRlUGFyYWxsZWxBcnJheXModDEgfHwgeyBzZXJpZXM6IFkgfSwgXCJzcGxpY2VcIiwgW1MsIDFdKSwgdDEgJiYgdDEuZGVzdHJveSgpLCBZLmlzRGlydHkgPSAhMCwgWS5pc0RpcnR5RGF0YSA9ICEwLCBXICYmIG4xLnJlZHJhdygpO1xuICAgICAgICAgIH07XG4gICAgICAgICAgeihQLCBuMSksIFcgPSBLKFcsICEwKSwgdDEgPyB0MS5maXJlUG9pbnRFdmVudChcInJlbW92ZVwiLCBudWxsLCBzMSkgOiBzMSgpO1xuICAgICAgICB9XG4gICAgICAgIHJlbW92ZShTLCBXLCBQLCBZKSB7XG4gICAgICAgICAgbGV0IFogPSB0aGlzLCB0MSA9IFouY2hhcnQ7XG4gICAgICAgICAgZnVuY3Rpb24gaTEoKSB7XG4gICAgICAgICAgICBaLmRlc3Ryb3koWSksIHQxLmlzRGlydHlMZWdlbmQgPSB0MS5pc0RpcnR5Qm94ID0gITAsIHQxLmxpbmtTZXJpZXMoWSksIEsoUywgITApICYmIHQxLnJlZHJhdyhXKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgUCAhPT0gITEgPyB4KFosIFwicmVtb3ZlXCIsIG51bGwsIGkxKSA6IGkxKCk7XG4gICAgICAgIH1cbiAgICAgICAgdXBkYXRlKFMsIFcpIHtcbiAgICAgICAgICB2YXIgQTEsIHUxLCBoMTtcbiAgICAgICAgICB4KHRoaXMsIFwidXBkYXRlXCIsIHsgb3B0aW9uczogUyA9IEgoUywgdGhpcy51c2VyT3B0aW9ucykgfSk7XG4gICAgICAgICAgbGV0IFAgPSB0aGlzLCBZID0gUC5jaGFydCwgWiA9IFAudXNlck9wdGlvbnMsIHQxID0gUC5pbml0aWFsVHlwZSB8fCBQLnR5cGUsIGkxID0gWS5vcHRpb25zLnBsb3RPcHRpb25zLCBuMSA9IHZbdDFdLnByb3RvdHlwZSwgczEgPSBQLmZpbmlzaGVkQW5pbWF0aW5nICYmIHsgYW5pbWF0aW9uOiAhMSB9LCBkMSA9IHt9LCBiMSwgYzEsIGExID0gW1wiY29sb3JJbmRleFwiLCBcImV2ZW50T3B0aW9uc1wiLCBcIm5hdmlnYXRvclNlcmllc1wiLCBcInN5bWJvbEluZGV4XCIsIFwiYmFzZVNlcmllc1wiXSwgbDEgPSBTLnR5cGUgfHwgWi50eXBlIHx8IFkub3B0aW9ucy5jaGFydC50eXBlLCBwMSA9ICEodGhpcy5oYXNEZXJpdmVkRGF0YSB8fCBsMSAmJiBsMSAhPT0gdGhpcy50eXBlIHx8IFMucG9pbnRTdGFydCAhPT0gdm9pZCAwIHx8IFMucG9pbnRJbnRlcnZhbCAhPT0gdm9pZCAwIHx8IFMucmVsYXRpdmVYVmFsdWUgIT09IHZvaWQgMCB8fCBTLmpvaW5CeSB8fCBTLm1hcERhdGEgfHwgW1wiZGF0YUdyb3VwaW5nXCIsIFwicG9pbnRTdGFydFwiLCBcInBvaW50SW50ZXJ2YWxcIiwgXCJwb2ludEludGVydmFsVW5pdFwiLCBcImtleXNcIl0uc29tZSgoQzEpID0+IFAuaGFzT3B0aW9uQ2hhbmdlZChDMSkpKTtcbiAgICAgICAgICBsMSA9IGwxIHx8IHQxLCBwMSAmJiAoYTEucHVzaChcImRhdGFcIiwgXCJpc0RpcnR5RGF0YVwiLCBcImlzRGlydHlDYW52YXNcIiwgXCJwb2ludHNcIiwgXCJwcm9jZXNzZWREYXRhXCIsIFwicHJvY2Vzc2VkWERhdGFcIiwgXCJwcm9jZXNzZWRZRGF0YVwiLCBcInhJbmNyZW1lbnRcIiwgXCJjcm9wcGVkXCIsIFwiX2hhc1BvaW50TWFya2Vyc1wiLCBcImhhc0RhdGFMYWJlbHNcIiwgXCJub2Rlc1wiLCBcImxheW91dFwiLCBcImxldmVsXCIsIFwibWFwTWFwXCIsIFwibWFwRGF0YVwiLCBcIm1pbllcIiwgXCJtYXhZXCIsIFwibWluWFwiLCBcIm1heFhcIiwgXCJ0cmFuc2Zvcm1Hcm91cHNcIiksIFMudmlzaWJsZSAhPT0gITEgJiYgYTEucHVzaChcImFyZWFcIiwgXCJncmFwaFwiKSwgUC5wYXJhbGxlbEFycmF5cy5mb3JFYWNoKGZ1bmN0aW9uKEMxKSB7XG4gICAgICAgICAgICBhMS5wdXNoKEMxICsgXCJEYXRhXCIpO1xuICAgICAgICAgIH0pLCBTLmRhdGEgJiYgKFMuZGF0YVNvcnRpbmcgJiYgbShQLm9wdGlvbnMuZGF0YVNvcnRpbmcsIFMuZGF0YVNvcnRpbmcpLCB0aGlzLnNldERhdGEoUy5kYXRhLCAhMSkpKSwgUyA9IF8oWiwgeyBpbmRleDogWi5pbmRleCA9PT0gdm9pZCAwID8gUC5pbmRleCA6IFouaW5kZXgsIHBvaW50U3RhcnQ6ICgoQTEgPSBpMSA9PSBudWxsID8gdm9pZCAwIDogaTEuc2VyaWVzKSA9PSBudWxsID8gdm9pZCAwIDogQTEucG9pbnRTdGFydCkgPz8gWi5wb2ludFN0YXJ0ID8/ICgodTEgPSBQLnhEYXRhKSA9PSBudWxsID8gdm9pZCAwIDogdTFbMF0pIH0sICFwMSAmJiB7IGRhdGE6IFAub3B0aW9ucy5kYXRhIH0sIFMsIHMxKSwgcDEgJiYgUy5kYXRhICYmIChTLmRhdGEgPSBQLm9wdGlvbnMuZGF0YSksIChhMSA9IFtcImdyb3VwXCIsIFwibWFya2VyR3JvdXBcIiwgXCJkYXRhTGFiZWxzR3JvdXBcIiwgXCJ0cmFuc2Zvcm1Hcm91cFwiXS5jb25jYXQoYTEpKS5mb3JFYWNoKGZ1bmN0aW9uKEMxKSB7XG4gICAgICAgICAgICBhMVtDMV0gPSBQW0MxXSwgZGVsZXRlIFBbQzFdO1xuICAgICAgICAgIH0pO1xuICAgICAgICAgIGxldCBNMSA9ICExO1xuICAgICAgICAgIGlmICh2W2wxXSkge1xuICAgICAgICAgICAgaWYgKE0xID0gbDEgIT09IFAudHlwZSwgUC5yZW1vdmUoITEsICExLCAhMSwgITApLCBNMSlcbiAgICAgICAgICAgICAgaWYgKFkucHJvcEZyb21TZXJpZXMoKSwgT2JqZWN0LnNldFByb3RvdHlwZU9mKVxuICAgICAgICAgICAgICAgIE9iamVjdC5zZXRQcm90b3R5cGVPZihQLCB2W2wxXS5wcm90b3R5cGUpO1xuICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBsZXQgQzEgPSBPYmplY3QuaGFzT3duUHJvcGVydHkuY2FsbChQLCBcImhjRXZlbnRzXCIpICYmIFAuaGNFdmVudHM7XG4gICAgICAgICAgICAgICAgZm9yIChjMSBpbiBuMSlcbiAgICAgICAgICAgICAgICAgIFBbYzFdID0gdm9pZCAwO1xuICAgICAgICAgICAgICAgIG0oUCwgdltsMV0ucHJvdG90eXBlKSwgQzEgPyBQLmhjRXZlbnRzID0gQzEgOiBkZWxldGUgUC5oY0V2ZW50cztcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgIH0gZWxzZVxuICAgICAgICAgICAgcSgxNywgITAsIFksIHsgbWlzc2luZ01vZHVsZUZvcjogbDEgfSk7XG4gICAgICAgICAgaWYgKGExLmZvckVhY2goZnVuY3Rpb24oQzEpIHtcbiAgICAgICAgICAgIFBbQzFdID0gYTFbQzFdO1xuICAgICAgICAgIH0pLCBQLmluaXQoWSwgUyksIHAxICYmIHRoaXMucG9pbnRzKVxuICAgICAgICAgICAgZm9yIChsZXQgQzEgb2YgKChiMSA9IFAub3B0aW9ucykudmlzaWJsZSA9PT0gITEgPyAoZDEuZ3JhcGhpYyA9IDEsIGQxLmRhdGFMYWJlbCA9IDEpIDogKHRoaXMuaGFzTWFya2VyQ2hhbmdlZChiMSwgWikgJiYgKGQxLmdyYXBoaWMgPSAxKSwgKGgxID0gUC5oYXNEYXRhTGFiZWxzKSAhPSBudWxsICYmIGgxLmNhbGwoUCkgfHwgKGQxLmRhdGFMYWJlbCA9IDEpKSwgdGhpcy5wb2ludHMpKVxuICAgICAgICAgICAgICBDMSAmJiBDMS5zZXJpZXMgJiYgKEMxLnJlc29sdmVDb2xvcigpLCBPYmplY3Qua2V5cyhkMSkubGVuZ3RoICYmIEMxLmRlc3Ryb3lFbGVtZW50cyhkMSksIGIxLnNob3dJbkxlZ2VuZCA9PT0gITEgJiYgQzEubGVnZW5kSXRlbSAmJiBZLmxlZ2VuZC5kZXN0cm95SXRlbShDMSkpO1xuICAgICAgICAgIFAuaW5pdGlhbFR5cGUgPSB0MSwgWS5saW5rU2VyaWVzKCksIFkuc2V0U29ydGVkRGF0YSgpLCBNMSAmJiBQLmxpbmtlZFNlcmllcy5sZW5ndGggJiYgKFAuaXNEaXJ0eURhdGEgPSAhMCksIHgodGhpcywgXCJhZnRlclVwZGF0ZVwiKSwgSyhXLCAhMCkgJiYgWS5yZWRyYXcoISFwMSAmJiB2b2lkIDApO1xuICAgICAgICB9XG4gICAgICAgIHNldE5hbWUoUykge1xuICAgICAgICAgIHRoaXMubmFtZSA9IHRoaXMub3B0aW9ucy5uYW1lID0gdGhpcy51c2VyT3B0aW9ucy5uYW1lID0gUywgdGhpcy5jaGFydC5pc0RpcnR5TGVnZW5kID0gITA7XG4gICAgICAgIH1cbiAgICAgICAgaGFzT3B0aW9uQ2hhbmdlZChTKSB7XG4gICAgICAgICAgdmFyIGkxLCBuMTtcbiAgICAgICAgICBsZXQgVyA9IHRoaXMuY2hhcnQsIFAgPSB0aGlzLm9wdGlvbnNbU10sIFkgPSBXLm9wdGlvbnMucGxvdE9wdGlvbnMsIFogPSB0aGlzLnVzZXJPcHRpb25zW1NdLCB0MSA9IEsoKGkxID0gWSA9PSBudWxsID8gdm9pZCAwIDogWVt0aGlzLnR5cGVdKSA9PSBudWxsID8gdm9pZCAwIDogaTFbU10sIChuMSA9IFkgPT0gbnVsbCA/IHZvaWQgMCA6IFkuc2VyaWVzKSA9PSBudWxsID8gdm9pZCAwIDogbjFbU10pO1xuICAgICAgICAgIHJldHVybiBaICYmICFUKHQxKSA/IFAgIT09IFogOiBQICE9PSBLKHQxLCBQKTtcbiAgICAgICAgfVxuICAgICAgICBvbk1vdXNlT3ZlcigpIHtcbiAgICAgICAgICBsZXQgUyA9IHRoaXMuY2hhcnQsIFcgPSBTLmhvdmVyU2VyaWVzLCBQID0gUy5wb2ludGVyO1xuICAgICAgICAgIFAgPT0gbnVsbCB8fCBQLnNldEhvdmVyQ2hhcnRJbmRleCgpLCBXICYmIFcgIT09IHRoaXMgJiYgVy5vbk1vdXNlT3V0KCksIHRoaXMub3B0aW9ucy5ldmVudHMubW91c2VPdmVyICYmIHgodGhpcywgXCJtb3VzZU92ZXJcIiksIHRoaXMuc2V0U3RhdGUoXCJob3ZlclwiKSwgUy5ob3ZlclNlcmllcyA9IHRoaXM7XG4gICAgICAgIH1cbiAgICAgICAgb25Nb3VzZU91dCgpIHtcbiAgICAgICAgICBsZXQgUyA9IHRoaXMub3B0aW9ucywgVyA9IHRoaXMuY2hhcnQsIFAgPSBXLnRvb2x0aXAsIFkgPSBXLmhvdmVyUG9pbnQ7XG4gICAgICAgICAgVy5ob3ZlclNlcmllcyA9IG51bGwsIFkgJiYgWS5vbk1vdXNlT3V0KCksIHRoaXMgJiYgUy5ldmVudHMubW91c2VPdXQgJiYgeCh0aGlzLCBcIm1vdXNlT3V0XCIpLCBQICYmICF0aGlzLnN0aWNreVRyYWNraW5nICYmICghUC5zaGFyZWQgfHwgdGhpcy5ub1NoYXJlZFRvb2x0aXApICYmIFAuaGlkZSgpLCBXLnNlcmllcy5mb3JFYWNoKGZ1bmN0aW9uKFopIHtcbiAgICAgICAgICAgIFouc2V0U3RhdGUoXCJcIiwgITApO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIHNldFN0YXRlKFMsIFcpIHtcbiAgICAgICAgICBsZXQgUCA9IHRoaXMsIFkgPSBQLm9wdGlvbnMsIFogPSBQLmdyYXBoLCB0MSA9IFkuaW5hY3RpdmVPdGhlclBvaW50cywgaTEgPSBZLnN0YXRlcywgbjEgPSBLKGkxW1MgfHwgXCJub3JtYWxcIl0gJiYgaTFbUyB8fCBcIm5vcm1hbFwiXS5hbmltYXRpb24sIFAuY2hhcnQub3B0aW9ucy5jaGFydC5hbmltYXRpb24pLCBzMSA9IFkubGluZVdpZHRoLCBkMSA9IFkub3BhY2l0eTtcbiAgICAgICAgICBpZiAoUyA9IFMgfHwgXCJcIiwgUC5zdGF0ZSAhPT0gUyAmJiAoW1AuZ3JvdXAsIFAubWFya2VyR3JvdXAsIFAuZGF0YUxhYmVsc0dyb3VwXS5mb3JFYWNoKGZ1bmN0aW9uKGIxKSB7XG4gICAgICAgICAgICBiMSAmJiAoUC5zdGF0ZSAmJiBiMS5yZW1vdmVDbGFzcyhcImhpZ2hjaGFydHMtc2VyaWVzLVwiICsgUC5zdGF0ZSksIFMgJiYgYjEuYWRkQ2xhc3MoXCJoaWdoY2hhcnRzLXNlcmllcy1cIiArIFMpKTtcbiAgICAgICAgICB9KSwgUC5zdGF0ZSA9IFMsICFQLmNoYXJ0LnN0eWxlZE1vZGUpKSB7XG4gICAgICAgICAgICBpZiAoaTFbU10gJiYgaTFbU10uZW5hYmxlZCA9PT0gITEpXG4gICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIGlmIChTICYmIChzMSA9IGkxW1NdLmxpbmVXaWR0aCB8fCBzMSArIChpMVtTXS5saW5lV2lkdGhQbHVzIHx8IDApLCBkMSA9IEsoaTFbU10ub3BhY2l0eSwgZDEpKSwgWiAmJiAhWi5kYXNoc3R5bGUgJiYgaihzMSkpXG4gICAgICAgICAgICAgIGZvciAobGV0IGIxIG9mIFtaLCAuLi50aGlzLnpvbmVzLm1hcCgoYzEpID0+IGMxLmdyYXBoKV0pXG4gICAgICAgICAgICAgICAgYjEgPT0gbnVsbCB8fCBiMS5hbmltYXRlKHsgXCJzdHJva2Utd2lkdGhcIjogczEgfSwgbjEpO1xuICAgICAgICAgICAgdDEgfHwgW1AuZ3JvdXAsIFAubWFya2VyR3JvdXAsIFAuZGF0YUxhYmVsc0dyb3VwLCBQLmxhYmVsQnlTZXJpZXNdLmZvckVhY2goZnVuY3Rpb24oYjEpIHtcbiAgICAgICAgICAgICAgYjEgJiYgYjEuYW5pbWF0ZSh7IG9wYWNpdHk6IGQxIH0sIG4xKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH1cbiAgICAgICAgICBXICYmIHQxICYmIFAucG9pbnRzICYmIFAuc2V0QWxsUG9pbnRzVG9TdGF0ZShTIHx8IHZvaWQgMCk7XG4gICAgICAgIH1cbiAgICAgICAgc2V0QWxsUG9pbnRzVG9TdGF0ZShTKSB7XG4gICAgICAgICAgdGhpcy5wb2ludHMuZm9yRWFjaChmdW5jdGlvbihXKSB7XG4gICAgICAgICAgICBXLnNldFN0YXRlICYmIFcuc2V0U3RhdGUoUyk7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgc2V0VmlzaWJsZShTLCBXKSB7XG4gICAgICAgICAgdmFyIG4xO1xuICAgICAgICAgIGxldCBQID0gdGhpcywgWSA9IFAuY2hhcnQsIFogPSBZLm9wdGlvbnMuY2hhcnQuaWdub3JlSGlkZGVuU2VyaWVzLCB0MSA9IFAudmlzaWJsZTtcbiAgICAgICAgICBQLnZpc2libGUgPSBTID0gUC5vcHRpb25zLnZpc2libGUgPSBQLnVzZXJPcHRpb25zLnZpc2libGUgPSBTID09PSB2b2lkIDAgPyAhdDEgOiBTO1xuICAgICAgICAgIGxldCBpMSA9IFMgPyBcInNob3dcIiA6IFwiaGlkZVwiO1xuICAgICAgICAgIFtcImdyb3VwXCIsIFwiZGF0YUxhYmVsc0dyb3VwXCIsIFwibWFya2VyR3JvdXBcIiwgXCJ0cmFja2VyXCIsIFwidHRcIl0uZm9yRWFjaCgoczEpID0+IHtcbiAgICAgICAgICAgIHZhciBkMTtcbiAgICAgICAgICAgIChkMSA9IFBbczFdKSA9PSBudWxsIHx8IGQxW2kxXSgpO1xuICAgICAgICAgIH0pLCAoWS5ob3ZlclNlcmllcyA9PT0gUCB8fCAoKG4xID0gWS5ob3ZlclBvaW50KSA9PSBudWxsID8gdm9pZCAwIDogbjEuc2VyaWVzKSA9PT0gUCkgJiYgUC5vbk1vdXNlT3V0KCksIFAubGVnZW5kSXRlbSAmJiBZLmxlZ2VuZC5jb2xvcml6ZUl0ZW0oUCwgUyksIFAuaXNEaXJ0eSA9ICEwLCBQLm9wdGlvbnMuc3RhY2tpbmcgJiYgWS5zZXJpZXMuZm9yRWFjaCgoczEpID0+IHtcbiAgICAgICAgICAgIHMxLm9wdGlvbnMuc3RhY2tpbmcgJiYgczEudmlzaWJsZSAmJiAoczEuaXNEaXJ0eSA9ICEwKTtcbiAgICAgICAgICB9KSwgUC5saW5rZWRTZXJpZXMuZm9yRWFjaCgoczEpID0+IHtcbiAgICAgICAgICAgIHMxLnNldFZpc2libGUoUywgITEpO1xuICAgICAgICAgIH0pLCBaICYmIChZLmlzRGlydHlCb3ggPSAhMCksIHgoUCwgaTEpLCBXICE9PSAhMSAmJiBZLnJlZHJhdygpO1xuICAgICAgICB9XG4gICAgICAgIHNob3coKSB7XG4gICAgICAgICAgdGhpcy5zZXRWaXNpYmxlKCEwKTtcbiAgICAgICAgfVxuICAgICAgICBoaWRlKCkge1xuICAgICAgICAgIHRoaXMuc2V0VmlzaWJsZSghMSk7XG4gICAgICAgIH1cbiAgICAgICAgc2VsZWN0KFMpIHtcbiAgICAgICAgICB0aGlzLnNlbGVjdGVkID0gUyA9IHRoaXMub3B0aW9ucy5zZWxlY3RlZCA9IFMgPT09IHZvaWQgMCA/ICF0aGlzLnNlbGVjdGVkIDogUywgdGhpcy5jaGVja2JveCAmJiAodGhpcy5jaGVja2JveC5jaGVja2VkID0gUyksIHgodGhpcywgUyA/IFwic2VsZWN0XCIgOiBcInVuc2VsZWN0XCIpO1xuICAgICAgICB9XG4gICAgICAgIHNob3VsZFNob3dUb29sdGlwKFMsIFcsIFAgPSB7fSkge1xuICAgICAgICAgIHJldHVybiBQLnNlcmllcyA9IHRoaXMsIFAudmlzaWJsZVBsb3RPbmx5ID0gITAsIHRoaXMuY2hhcnQuaXNJbnNpZGVQbG90KFMsIFcsIFApO1xuICAgICAgICB9XG4gICAgICAgIGRyYXdMZWdlbmRTeW1ib2woUywgVykge1xuICAgICAgICAgIHZhciBQO1xuICAgICAgICAgIChQID0gbFt0aGlzLm9wdGlvbnMubGVnZW5kU3ltYm9sIHx8IFwicmVjdGFuZ2xlXCJdKSA9PSBudWxsIHx8IFAuY2FsbCh0aGlzLCBTLCBXKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIEcuZGVmYXVsdE9wdGlvbnMgPSBkLCBHLnR5cGVzID0gYi5zZXJpZXNUeXBlcywgRy5yZWdpc3RlclR5cGUgPSBiLnJlZ2lzdGVyU2VyaWVzVHlwZSwgbShHLnByb3RvdHlwZSwgeyBheGlzVHlwZXM6IFtcInhBeGlzXCIsIFwieUF4aXNcIl0sIGNvbGw6IFwic2VyaWVzXCIsIGNvbG9yQ291bnRlcjogMCwgZGlyZWN0VG91Y2g6ICExLCBpbnZlcnRpYmxlOiAhMCwgaXNDYXJ0ZXNpYW46ICEwLCBrZEF4aXNBcnJheTogW1wiY2xpZW50WFwiLCBcInBsb3RZXCJdLCBwYXJhbGxlbEFycmF5czogW1wieFwiLCBcInlcIl0sIHBvaW50Q2xhc3M6IHAsIHJlcXVpcmVTb3J0aW5nOiAhMCwgc29ydGVkOiAhMCB9KSwgYi5zZXJpZXMgPSBHLCBHO1xuICAgIH0pLCBuKG8sIFwiQ29yZS9MZWdlbmQvTGVnZW5kLmpzXCIsIFtvW1wiQ29yZS9BbmltYXRpb24vQW5pbWF0aW9uVXRpbGl0aWVzLmpzXCJdLCBvW1wiQ29yZS9Gb3VuZGF0aW9uLmpzXCJdLCBvW1wiQ29yZS9HbG9iYWxzLmpzXCJdLCBvW1wiQ29yZS9TZXJpZXMvU2VyaWVzLmpzXCJdLCBvW1wiQ29yZS9TZXJpZXMvUG9pbnQuanNcIl0sIG9bXCJDb3JlL1JlbmRlcmVyL1JlbmRlcmVyVXRpbGl0aWVzLmpzXCJdLCBvW1wiQ29yZS9UZW1wbGF0aW5nLmpzXCJdLCBvW1wiQ29yZS9VdGlsaXRpZXMuanNcIl1dLCBmdW5jdGlvbihyLCBpLCBhLCBzLCBsLCBwLCBkLCBiKSB7XG4gICAgICB2YXIgTTtcbiAgICAgIGxldCB7IGFuaW1PYmplY3Q6IHUsIHNldEFuaW1hdGlvbjogQSB9ID0gciwgeyByZWdpc3RlckV2ZW50T3B0aW9uczogeiB9ID0gaSwgeyBjb21wb3NlZDogZiwgbWFyZ2luTmFtZXM6IE8gfSA9IGEsIHsgZGlzdHJpYnV0ZTogaCB9ID0gcCwgeyBmb3JtYXQ6IGcgfSA9IGQsIHsgYWRkRXZlbnQ6IHYsIGNyZWF0ZUVsZW1lbnQ6IEwsIGNzczogeSwgZGVmaW5lZDogQiwgZGlzY2FyZEVsZW1lbnQ6IFgsIGZpbmQ6IEYsIGZpcmVFdmVudDogVCwgaXNOdW1iZXI6IHcsIG1lcmdlOiBILCBwaWNrOiBDLCBwdXNoVW5pcXVlOiBxLCByZWxhdGl2ZUxlbmd0aDogbSwgc3RhYmxlU29ydDogaywgc3luY1RpbWVvdXQ6IHggfSA9IGI7XG4gICAgICBjbGFzcyBOIHtcbiAgICAgICAgY29uc3RydWN0b3IoUiwgSSkge1xuICAgICAgICAgIHRoaXMuYWxsSXRlbXMgPSBbXSwgdGhpcy5pbml0aWFsSXRlbVkgPSAwLCB0aGlzLml0ZW1IZWlnaHQgPSAwLCB0aGlzLml0ZW1NYXJnaW5Cb3R0b20gPSAwLCB0aGlzLml0ZW1NYXJnaW5Ub3AgPSAwLCB0aGlzLml0ZW1YID0gMCwgdGhpcy5pdGVtWSA9IDAsIHRoaXMubGFzdEl0ZW1ZID0gMCwgdGhpcy5sYXN0TGluZUhlaWdodCA9IDAsIHRoaXMubGVnZW5kSGVpZ2h0ID0gMCwgdGhpcy5sZWdlbmRXaWR0aCA9IDAsIHRoaXMubWF4SXRlbVdpZHRoID0gMCwgdGhpcy5tYXhMZWdlbmRXaWR0aCA9IDAsIHRoaXMub2Zmc2V0V2lkdGggPSAwLCB0aGlzLnBhZGRpbmcgPSAwLCB0aGlzLnBhZ2VzID0gW10sIHRoaXMuc3ltYm9sSGVpZ2h0ID0gMCwgdGhpcy5zeW1ib2xXaWR0aCA9IDAsIHRoaXMudGl0bGVIZWlnaHQgPSAwLCB0aGlzLnRvdGFsSXRlbVdpZHRoID0gMCwgdGhpcy53aWR0aE9wdGlvbiA9IDAsIHRoaXMuY2hhcnQgPSBSLCB0aGlzLnNldE9wdGlvbnMoSSksIEkuZW5hYmxlZCAmJiAodGhpcy5yZW5kZXIoKSwgeih0aGlzLCBJKSwgdih0aGlzLmNoYXJ0LCBcImVuZFJlc2l6ZVwiLCBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgIHRoaXMubGVnZW5kLnBvc2l0aW9uQ2hlY2tib3hlcygpO1xuICAgICAgICAgIH0pKSwgdih0aGlzLmNoYXJ0LCBcInJlbmRlclwiLCAoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLm9wdGlvbnMuZW5hYmxlZCAmJiB0aGlzLnByb3hpbWF0ZSAmJiAodGhpcy5wcm94aW1hdGVQb3NpdGlvbnMoKSwgdGhpcy5wb3NpdGlvbkl0ZW1zKCkpO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIHNldE9wdGlvbnMoUikge1xuICAgICAgICAgIGxldCBJID0gQyhSLnBhZGRpbmcsIDgpO1xuICAgICAgICAgIHRoaXMub3B0aW9ucyA9IFIsIHRoaXMuY2hhcnQuc3R5bGVkTW9kZSB8fCAodGhpcy5pdGVtU3R5bGUgPSBSLml0ZW1TdHlsZSwgdGhpcy5pdGVtSGlkZGVuU3R5bGUgPSBIKHRoaXMuaXRlbVN0eWxlLCBSLml0ZW1IaWRkZW5TdHlsZSkpLCB0aGlzLml0ZW1NYXJnaW5Ub3AgPSBSLml0ZW1NYXJnaW5Ub3AsIHRoaXMuaXRlbU1hcmdpbkJvdHRvbSA9IFIuaXRlbU1hcmdpbkJvdHRvbSwgdGhpcy5wYWRkaW5nID0gSSwgdGhpcy5pbml0aWFsSXRlbVkgPSBJIC0gNSwgdGhpcy5zeW1ib2xXaWR0aCA9IEMoUi5zeW1ib2xXaWR0aCwgMTYpLCB0aGlzLnBhZ2VzID0gW10sIHRoaXMucHJveGltYXRlID0gUi5sYXlvdXQgPT09IFwicHJveGltYXRlXCIgJiYgIXRoaXMuY2hhcnQuaW52ZXJ0ZWQsIHRoaXMuYmFzZWxpbmUgPSB2b2lkIDA7XG4gICAgICAgIH1cbiAgICAgICAgdXBkYXRlKFIsIEkpIHtcbiAgICAgICAgICBsZXQgaiA9IHRoaXMuY2hhcnQ7XG4gICAgICAgICAgdGhpcy5zZXRPcHRpb25zKEgoITAsIHRoaXMub3B0aW9ucywgUikpLCBcImV2ZW50c1wiIGluIHRoaXMub3B0aW9ucyAmJiB6KHRoaXMsIHRoaXMub3B0aW9ucyksIHRoaXMuZGVzdHJveSgpLCBqLmlzRGlydHlMZWdlbmQgPSBqLmlzRGlydHlCb3ggPSAhMCwgQyhJLCAhMCkgJiYgai5yZWRyYXcoKSwgVCh0aGlzLCBcImFmdGVyVXBkYXRlXCIsIHsgcmVkcmF3OiBJIH0pO1xuICAgICAgICB9XG4gICAgICAgIGNvbG9yaXplSXRlbShSLCBJKSB7XG4gICAgICAgICAgbGV0IHsgYXJlYTogaiwgZ3JvdXA6IFUsIGxhYmVsOiBfLCBsaW5lOiByMSwgc3ltYm9sOiBLIH0gPSBSLmxlZ2VuZEl0ZW0gfHwge307XG4gICAgICAgICAgaWYgKFUgPT0gbnVsbCB8fCBVW0kgPyBcInJlbW92ZUNsYXNzXCIgOiBcImFkZENsYXNzXCJdKFwiaGlnaGNoYXJ0cy1sZWdlbmQtaXRlbS1oaWRkZW5cIiksICF0aGlzLmNoYXJ0LnN0eWxlZE1vZGUpIHtcbiAgICAgICAgICAgIGxldCB7IGl0ZW1IaWRkZW5TdHlsZTogUSA9IHt9IH0gPSB0aGlzLCBFID0gUS5jb2xvciwgeyBmaWxsQ29sb3I6IEQsIGZpbGxPcGFjaXR5OiBHLCBsaW5lQ29sb3I6IEosIG1hcmtlcjogUyB9ID0gUi5vcHRpb25zLCBXID0gKFApID0+ICghSSAmJiAoUC5maWxsICYmIChQLmZpbGwgPSBFKSwgUC5zdHJva2UgJiYgKFAuc3Ryb2tlID0gRSkpLCBQKTtcbiAgICAgICAgICAgIF8gPT0gbnVsbCB8fCBfLmNzcyhIKEkgPyB0aGlzLml0ZW1TdHlsZSA6IFEpKSwgcjEgPT0gbnVsbCB8fCByMS5hdHRyKFcoeyBzdHJva2U6IEogfHwgUi5jb2xvciB9KSksIEsgJiYgSy5hdHRyKFcoUyAmJiBLLmlzTWFya2VyID8gUi5wb2ludEF0dHJpYnMoKSA6IHsgZmlsbDogUi5jb2xvciB9KSksIGogPT0gbnVsbCB8fCBqLmF0dHIoVyh7IGZpbGw6IEQgfHwgUi5jb2xvciwgXCJmaWxsLW9wYWNpdHlcIjogRCA/IDEgOiBHID8/IDAuNzUgfSkpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBUKHRoaXMsIFwiYWZ0ZXJDb2xvcml6ZUl0ZW1cIiwgeyBpdGVtOiBSLCB2aXNpYmxlOiBJIH0pO1xuICAgICAgICB9XG4gICAgICAgIHBvc2l0aW9uSXRlbXMoKSB7XG4gICAgICAgICAgdGhpcy5hbGxJdGVtcy5mb3JFYWNoKHRoaXMucG9zaXRpb25JdGVtLCB0aGlzKSwgdGhpcy5jaGFydC5pc1Jlc2l6aW5nIHx8IHRoaXMucG9zaXRpb25DaGVja2JveGVzKCk7XG4gICAgICAgIH1cbiAgICAgICAgcG9zaXRpb25JdGVtKFIpIHtcbiAgICAgICAgICBsZXQgeyBncm91cDogSSwgeDogaiA9IDAsIHk6IFUgPSAwIH0gPSBSLmxlZ2VuZEl0ZW0gfHwge30sIF8gPSB0aGlzLm9wdGlvbnMsIHIxID0gXy5zeW1ib2xQYWRkaW5nLCBLID0gIV8ucnRsLCBRID0gUi5jaGVja2JveDtcbiAgICAgICAgICBpZiAoSSAmJiBJLmVsZW1lbnQpIHtcbiAgICAgICAgICAgIGxldCBFID0geyB0cmFuc2xhdGVYOiBLID8gaiA6IHRoaXMubGVnZW5kV2lkdGggLSBqIC0gMiAqIHIxIC0gNCwgdHJhbnNsYXRlWTogVSB9O1xuICAgICAgICAgICAgSVtCKEkudHJhbnNsYXRlWSkgPyBcImFuaW1hdGVcIiA6IFwiYXR0clwiXShFLCB2b2lkIDAsICgpID0+IHtcbiAgICAgICAgICAgICAgVCh0aGlzLCBcImFmdGVyUG9zaXRpb25JdGVtXCIsIHsgaXRlbTogUiB9KTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH1cbiAgICAgICAgICBRICYmIChRLnggPSBqLCBRLnkgPSBVKTtcbiAgICAgICAgfVxuICAgICAgICBkZXN0cm95SXRlbShSKSB7XG4gICAgICAgICAgbGV0IEkgPSBSLmNoZWNrYm94LCBqID0gUi5sZWdlbmRJdGVtIHx8IHt9O1xuICAgICAgICAgIGZvciAobGV0IFUgb2YgW1wiZ3JvdXBcIiwgXCJsYWJlbFwiLCBcImxpbmVcIiwgXCJzeW1ib2xcIl0pXG4gICAgICAgICAgICBqW1VdICYmIChqW1VdID0galtVXS5kZXN0cm95KCkpO1xuICAgICAgICAgIEkgJiYgWChJKSwgUi5sZWdlbmRJdGVtID0gdm9pZCAwO1xuICAgICAgICB9XG4gICAgICAgIGRlc3Ryb3koKSB7XG4gICAgICAgICAgZm9yIChsZXQgUiBvZiB0aGlzLmdldEFsbEl0ZW1zKCkpXG4gICAgICAgICAgICB0aGlzLmRlc3Ryb3lJdGVtKFIpO1xuICAgICAgICAgIGZvciAobGV0IFIgb2YgW1wiY2xpcFJlY3RcIiwgXCJ1cFwiLCBcImRvd25cIiwgXCJwYWdlclwiLCBcIm5hdlwiLCBcImJveFwiLCBcInRpdGxlXCIsIFwiZ3JvdXBcIl0pXG4gICAgICAgICAgICB0aGlzW1JdICYmICh0aGlzW1JdID0gdGhpc1tSXS5kZXN0cm95KCkpO1xuICAgICAgICAgIHRoaXMuZGlzcGxheSA9IG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgcG9zaXRpb25DaGVja2JveGVzKCkge1xuICAgICAgICAgIGxldCBSLCBJID0gdGhpcy5ncm91cCAmJiB0aGlzLmdyb3VwLmFsaWduQXR0ciwgaiA9IHRoaXMuY2xpcEhlaWdodCB8fCB0aGlzLmxlZ2VuZEhlaWdodCwgVSA9IHRoaXMudGl0bGVIZWlnaHQ7XG4gICAgICAgICAgSSAmJiAoUiA9IEkudHJhbnNsYXRlWSwgdGhpcy5hbGxJdGVtcy5mb3JFYWNoKGZ1bmN0aW9uKF8pIHtcbiAgICAgICAgICAgIGxldCByMSwgSyA9IF8uY2hlY2tib3g7XG4gICAgICAgICAgICBLICYmIChyMSA9IFIgKyBVICsgSy55ICsgKHRoaXMuc2Nyb2xsT2Zmc2V0IHx8IDApICsgMywgeShLLCB7IGxlZnQ6IEkudHJhbnNsYXRlWCArIF8uY2hlY2tib3hPZmZzZXQgKyBLLnggLSAyMCArIFwicHhcIiwgdG9wOiByMSArIFwicHhcIiwgZGlzcGxheTogdGhpcy5wcm94aW1hdGUgfHwgcjEgPiBSIC0gNiAmJiByMSA8IFIgKyBqIC0gNiA/IFwiXCIgOiBcIm5vbmVcIiB9KSk7XG4gICAgICAgICAgfSwgdGhpcykpO1xuICAgICAgICB9XG4gICAgICAgIHJlbmRlclRpdGxlKCkge1xuICAgICAgICAgIGxldCBSID0gdGhpcy5vcHRpb25zLCBJID0gdGhpcy5wYWRkaW5nLCBqID0gUi50aXRsZSwgVSwgXyA9IDA7XG4gICAgICAgICAgai50ZXh0ICYmICh0aGlzLnRpdGxlIHx8ICh0aGlzLnRpdGxlID0gdGhpcy5jaGFydC5yZW5kZXJlci5sYWJlbChqLnRleHQsIEkgLSAzLCBJIC0gNCwgdm9pZCAwLCB2b2lkIDAsIHZvaWQgMCwgUi51c2VIVE1MLCB2b2lkIDAsIFwibGVnZW5kLXRpdGxlXCIpLmF0dHIoeyB6SW5kZXg6IDEgfSksIHRoaXMuY2hhcnQuc3R5bGVkTW9kZSB8fCB0aGlzLnRpdGxlLmNzcyhqLnN0eWxlKSwgdGhpcy50aXRsZS5hZGQodGhpcy5ncm91cCkpLCBqLndpZHRoIHx8IHRoaXMudGl0bGUuY3NzKHsgd2lkdGg6IHRoaXMubWF4TGVnZW5kV2lkdGggKyBcInB4XCIgfSksIF8gPSAoVSA9IHRoaXMudGl0bGUuZ2V0QkJveCgpKS5oZWlnaHQsIHRoaXMub2Zmc2V0V2lkdGggPSBVLndpZHRoLCB0aGlzLmNvbnRlbnRHcm91cC5hdHRyKHsgdHJhbnNsYXRlWTogXyB9KSksIHRoaXMudGl0bGVIZWlnaHQgPSBfO1xuICAgICAgICB9XG4gICAgICAgIHNldFRleHQoUikge1xuICAgICAgICAgIGxldCBJID0gdGhpcy5vcHRpb25zO1xuICAgICAgICAgIFIubGVnZW5kSXRlbS5sYWJlbC5hdHRyKHsgdGV4dDogSS5sYWJlbEZvcm1hdCA/IGcoSS5sYWJlbEZvcm1hdCwgUiwgdGhpcy5jaGFydCkgOiBJLmxhYmVsRm9ybWF0dGVyLmNhbGwoUikgfSk7XG4gICAgICAgIH1cbiAgICAgICAgcmVuZGVySXRlbShSKSB7XG4gICAgICAgICAgbGV0IEkgPSBSLmxlZ2VuZEl0ZW0gPSBSLmxlZ2VuZEl0ZW0gfHwge30sIGogPSB0aGlzLmNoYXJ0LCBVID0gai5yZW5kZXJlciwgXyA9IHRoaXMub3B0aW9ucywgcjEgPSBfLmxheW91dCA9PT0gXCJob3Jpem9udGFsXCIsIEsgPSB0aGlzLnN5bWJvbFdpZHRoLCBRID0gXy5zeW1ib2xQYWRkaW5nIHx8IDAsIEUgPSB0aGlzLml0ZW1TdHlsZSwgRCA9IHRoaXMuaXRlbUhpZGRlblN0eWxlLCBHID0gcjEgPyBDKF8uaXRlbURpc3RhbmNlLCAyMCkgOiAwLCBKID0gIV8ucnRsLCBTID0gIVIuc2VyaWVzLCBXID0gIVMgJiYgUi5zZXJpZXMuZHJhd0xlZ2VuZFN5bWJvbCA/IFIuc2VyaWVzIDogUiwgUCA9IFcub3B0aW9ucywgWSA9ICEhdGhpcy5jcmVhdGVDaGVja2JveEZvckl0ZW0gJiYgUCAmJiBQLnNob3dDaGVja2JveCwgWiA9IF8udXNlSFRNTCwgdDEgPSBSLm9wdGlvbnMuY2xhc3NOYW1lLCBpMSA9IEkubGFiZWwsIG4xID0gSyArIFEgKyBHICsgKFkgPyAyMCA6IDApO1xuICAgICAgICAgICFpMSAmJiAoSS5ncm91cCA9IFUuZyhcImxlZ2VuZC1pdGVtXCIpLmFkZENsYXNzKFwiaGlnaGNoYXJ0cy1cIiArIFcudHlwZSArIFwiLXNlcmllcyBoaWdoY2hhcnRzLWNvbG9yLVwiICsgUi5jb2xvckluZGV4ICsgKHQxID8gXCIgXCIgKyB0MSA6IFwiXCIpICsgKFMgPyBcIiBoaWdoY2hhcnRzLXNlcmllcy1cIiArIFIuaW5kZXggOiBcIlwiKSkuYXR0cih7IHpJbmRleDogMSB9KS5hZGQodGhpcy5zY3JvbGxHcm91cCksIEkubGFiZWwgPSBpMSA9IFUudGV4dChcIlwiLCBKID8gSyArIFEgOiAtUSwgdGhpcy5iYXNlbGluZSB8fCAwLCBaKSwgai5zdHlsZWRNb2RlIHx8IGkxLmNzcyhIKFIudmlzaWJsZSA/IEUgOiBEKSksIGkxLmF0dHIoeyBhbGlnbjogSiA/IFwibGVmdFwiIDogXCJyaWdodFwiLCB6SW5kZXg6IDIgfSkuYWRkKEkuZ3JvdXApLCAhdGhpcy5iYXNlbGluZSAmJiAodGhpcy5mb250TWV0cmljcyA9IFUuZm9udE1ldHJpY3MoaTEpLCB0aGlzLmJhc2VsaW5lID0gdGhpcy5mb250TWV0cmljcy5mICsgMyArIHRoaXMuaXRlbU1hcmdpblRvcCwgaTEuYXR0cihcInlcIiwgdGhpcy5iYXNlbGluZSksIHRoaXMuc3ltYm9sSGVpZ2h0ID0gQyhfLnN5bWJvbEhlaWdodCwgdGhpcy5mb250TWV0cmljcy5mKSwgXy5zcXVhcmVTeW1ib2wgJiYgKHRoaXMuc3ltYm9sV2lkdGggPSBDKF8uc3ltYm9sV2lkdGgsIE1hdGgubWF4KHRoaXMuc3ltYm9sSGVpZ2h0LCAxNikpLCBuMSA9IHRoaXMuc3ltYm9sV2lkdGggKyBRICsgRyArIChZID8gMjAgOiAwKSwgSiAmJiBpMS5hdHRyKFwieFwiLCB0aGlzLnN5bWJvbFdpZHRoICsgUSkpKSwgVy5kcmF3TGVnZW5kU3ltYm9sKHRoaXMsIFIpLCB0aGlzLnNldEl0ZW1FdmVudHMgJiYgdGhpcy5zZXRJdGVtRXZlbnRzKFIsIGkxLCBaKSksIFkgJiYgIVIuY2hlY2tib3ggJiYgdGhpcy5jcmVhdGVDaGVja2JveEZvckl0ZW0gJiYgdGhpcy5jcmVhdGVDaGVja2JveEZvckl0ZW0oUiksIHRoaXMuY29sb3JpemVJdGVtKFIsIFIudmlzaWJsZSksIChqLnN0eWxlZE1vZGUgfHwgIUUud2lkdGgpICYmIGkxLmNzcyh7IHdpZHRoOiAoXy5pdGVtV2lkdGggfHwgdGhpcy53aWR0aE9wdGlvbiB8fCBqLnNwYWNpbmdCb3gud2lkdGgpIC0gbjEgKyBcInB4XCIgfSksIHRoaXMuc2V0VGV4dChSKTtcbiAgICAgICAgICBsZXQgczEgPSBpMS5nZXRCQm94KCksIGQxID0gdGhpcy5mb250TWV0cmljcyAmJiB0aGlzLmZvbnRNZXRyaWNzLmggfHwgMDtcbiAgICAgICAgICBSLml0ZW1XaWR0aCA9IFIuY2hlY2tib3hPZmZzZXQgPSBfLml0ZW1XaWR0aCB8fCBJLmxhYmVsV2lkdGggfHwgczEud2lkdGggKyBuMSwgdGhpcy5tYXhJdGVtV2lkdGggPSBNYXRoLm1heCh0aGlzLm1heEl0ZW1XaWR0aCwgUi5pdGVtV2lkdGgpLCB0aGlzLnRvdGFsSXRlbVdpZHRoICs9IFIuaXRlbVdpZHRoLCB0aGlzLml0ZW1IZWlnaHQgPSBSLml0ZW1IZWlnaHQgPSBNYXRoLnJvdW5kKEkubGFiZWxIZWlnaHQgfHwgKHMxLmhlaWdodCA+IDEuNSAqIGQxID8gczEuaGVpZ2h0IDogZDEpKTtcbiAgICAgICAgfVxuICAgICAgICBsYXlvdXRJdGVtKFIpIHtcbiAgICAgICAgICBsZXQgSSA9IHRoaXMub3B0aW9ucywgaiA9IHRoaXMucGFkZGluZywgVSA9IEkubGF5b3V0ID09PSBcImhvcml6b250YWxcIiwgXyA9IFIuaXRlbUhlaWdodCwgcjEgPSB0aGlzLml0ZW1NYXJnaW5Cb3R0b20sIEsgPSB0aGlzLml0ZW1NYXJnaW5Ub3AsIFEgPSBVID8gQyhJLml0ZW1EaXN0YW5jZSwgMjApIDogMCwgRSA9IHRoaXMubWF4TGVnZW5kV2lkdGgsIEQgPSBJLmFsaWduQ29sdW1ucyAmJiB0aGlzLnRvdGFsSXRlbVdpZHRoID4gRSA/IHRoaXMubWF4SXRlbVdpZHRoIDogUi5pdGVtV2lkdGgsIEcgPSBSLmxlZ2VuZEl0ZW0gfHwge307XG4gICAgICAgICAgVSAmJiB0aGlzLml0ZW1YIC0gaiArIEQgPiBFICYmICh0aGlzLml0ZW1YID0gaiwgdGhpcy5sYXN0TGluZUhlaWdodCAmJiAodGhpcy5pdGVtWSArPSBLICsgdGhpcy5sYXN0TGluZUhlaWdodCArIHIxKSwgdGhpcy5sYXN0TGluZUhlaWdodCA9IDApLCB0aGlzLmxhc3RJdGVtWSA9IEsgKyB0aGlzLml0ZW1ZICsgcjEsIHRoaXMubGFzdExpbmVIZWlnaHQgPSBNYXRoLm1heChfLCB0aGlzLmxhc3RMaW5lSGVpZ2h0KSwgRy54ID0gdGhpcy5pdGVtWCwgRy55ID0gdGhpcy5pdGVtWSwgVSA/IHRoaXMuaXRlbVggKz0gRCA6ICh0aGlzLml0ZW1ZICs9IEsgKyBfICsgcjEsIHRoaXMubGFzdExpbmVIZWlnaHQgPSBfKSwgdGhpcy5vZmZzZXRXaWR0aCA9IHRoaXMud2lkdGhPcHRpb24gfHwgTWF0aC5tYXgoKFUgPyB0aGlzLml0ZW1YIC0gaiAtIChSLmNoZWNrYm94ID8gMCA6IFEpIDogRCkgKyBqLCB0aGlzLm9mZnNldFdpZHRoKTtcbiAgICAgICAgfVxuICAgICAgICBnZXRBbGxJdGVtcygpIHtcbiAgICAgICAgICBsZXQgUiA9IFtdO1xuICAgICAgICAgIHJldHVybiB0aGlzLmNoYXJ0LnNlcmllcy5mb3JFYWNoKGZ1bmN0aW9uKEkpIHtcbiAgICAgICAgICAgIGxldCBqID0gSSAmJiBJLm9wdGlvbnM7XG4gICAgICAgICAgICBJICYmIEMoai5zaG93SW5MZWdlbmQsICFCKGoubGlua2VkVG8pICYmIHZvaWQgMCwgITApICYmIChSID0gUi5jb25jYXQoKEkubGVnZW5kSXRlbSB8fCB7fSkubGFiZWxzIHx8IChqLmxlZ2VuZFR5cGUgPT09IFwicG9pbnRcIiA/IEkuZGF0YSA6IEkpKSk7XG4gICAgICAgICAgfSksIFQodGhpcywgXCJhZnRlckdldEFsbEl0ZW1zXCIsIHsgYWxsSXRlbXM6IFIgfSksIFI7XG4gICAgICAgIH1cbiAgICAgICAgZ2V0QWxpZ25tZW50KCkge1xuICAgICAgICAgIGxldCBSID0gdGhpcy5vcHRpb25zO1xuICAgICAgICAgIHJldHVybiB0aGlzLnByb3hpbWF0ZSA/IFIuYWxpZ24uY2hhckF0KDApICsgXCJ0dlwiIDogUi5mbG9hdGluZyA/IFwiXCIgOiBSLmFsaWduLmNoYXJBdCgwKSArIFIudmVydGljYWxBbGlnbi5jaGFyQXQoMCkgKyBSLmxheW91dC5jaGFyQXQoMCk7XG4gICAgICAgIH1cbiAgICAgICAgYWRqdXN0TWFyZ2lucyhSLCBJKSB7XG4gICAgICAgICAgbGV0IGogPSB0aGlzLmNoYXJ0LCBVID0gdGhpcy5vcHRpb25zLCBfID0gdGhpcy5nZXRBbGlnbm1lbnQoKTtcbiAgICAgICAgICBfICYmIFsvKGx0aHxjdHxydGgpLywgLyhydHZ8cm18cmJ2KS8sIC8ocmJofGNifGxiaCkvLCAvKGxidnxsbXxsdHYpL10uZm9yRWFjaChmdW5jdGlvbihyMSwgSykge1xuICAgICAgICAgICAgcjEudGVzdChfKSAmJiAhQihSW0tdKSAmJiAoaltPW0tdXSA9IE1hdGgubWF4KGpbT1tLXV0sIGoubGVnZW5kWyhLICsgMSkgJSAyID8gXCJsZWdlbmRIZWlnaHRcIiA6IFwibGVnZW5kV2lkdGhcIl0gKyBbMSwgLTEsIC0xLCAxXVtLXSAqIFVbSyAlIDIgPyBcInhcIiA6IFwieVwiXSArIEMoVS5tYXJnaW4sIDEyKSArIElbS10gKyAoai50aXRsZU9mZnNldFtLXSB8fCAwKSkpO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIHByb3hpbWF0ZVBvc2l0aW9ucygpIHtcbiAgICAgICAgICBsZXQgUiwgSSA9IHRoaXMuY2hhcnQsIGogPSBbXSwgVSA9IHRoaXMub3B0aW9ucy5hbGlnbiA9PT0gXCJsZWZ0XCI7XG4gICAgICAgICAgZm9yIChsZXQgXyBvZiAodGhpcy5hbGxJdGVtcy5mb3JFYWNoKGZ1bmN0aW9uKHIxKSB7XG4gICAgICAgICAgICBsZXQgSywgUSwgRSA9IFUsIEQsIEc7XG4gICAgICAgICAgICByMS55QXhpcyAmJiAocjEueEF4aXMub3B0aW9ucy5yZXZlcnNlZCAmJiAoRSA9ICFFKSwgcjEucG9pbnRzICYmIChLID0gRihFID8gcjEucG9pbnRzIDogcjEucG9pbnRzLnNsaWNlKDApLnJldmVyc2UoKSwgZnVuY3Rpb24oSikge1xuICAgICAgICAgICAgICByZXR1cm4gdyhKLnBsb3RZKTtcbiAgICAgICAgICAgIH0pKSwgUSA9IHRoaXMuaXRlbU1hcmdpblRvcCArIHIxLmxlZ2VuZEl0ZW0ubGFiZWwuZ2V0QkJveCgpLmhlaWdodCArIHRoaXMuaXRlbU1hcmdpbkJvdHRvbSwgRyA9IHIxLnlBeGlzLnRvcCAtIEkucGxvdFRvcCwgRCA9IHIxLnZpc2libGUgPyAoSyA/IEsucGxvdFkgOiByMS55QXhpcy5oZWlnaHQpICsgKEcgLSAwLjMgKiBRKSA6IEcgKyByMS55QXhpcy5oZWlnaHQsIGoucHVzaCh7IHRhcmdldDogRCwgc2l6ZTogUSwgaXRlbTogcjEgfSkpO1xuICAgICAgICAgIH0sIHRoaXMpLCBoKGosIEkucGxvdEhlaWdodCkpKVxuICAgICAgICAgICAgUiA9IF8uaXRlbS5sZWdlbmRJdGVtIHx8IHt9LCB3KF8ucG9zKSAmJiAoUi55ID0gSS5wbG90VG9wIC0gSS5zcGFjaW5nWzBdICsgXy5wb3MpO1xuICAgICAgICB9XG4gICAgICAgIHJlbmRlcigpIHtcbiAgICAgICAgICBsZXQgUiA9IHRoaXMuY2hhcnQsIEkgPSBSLnJlbmRlcmVyLCBqID0gdGhpcy5vcHRpb25zLCBVID0gdGhpcy5wYWRkaW5nLCBfID0gdGhpcy5nZXRBbGxJdGVtcygpLCByMSwgSywgUSwgRSA9IHRoaXMuZ3JvdXAsIEQsIEcgPSB0aGlzLmJveDtcbiAgICAgICAgICB0aGlzLml0ZW1YID0gVSwgdGhpcy5pdGVtWSA9IHRoaXMuaW5pdGlhbEl0ZW1ZLCB0aGlzLm9mZnNldFdpZHRoID0gMCwgdGhpcy5sYXN0SXRlbVkgPSAwLCB0aGlzLndpZHRoT3B0aW9uID0gbShqLndpZHRoLCBSLnNwYWNpbmdCb3gud2lkdGggLSBVKSwgRCA9IFIuc3BhY2luZ0JveC53aWR0aCAtIDIgKiBVIC0gai54LCBbXCJybVwiLCBcImxtXCJdLmluZGV4T2YodGhpcy5nZXRBbGlnbm1lbnQoKS5zdWJzdHJpbmcoMCwgMikpID4gLTEgJiYgKEQgLz0gMiksIHRoaXMubWF4TGVnZW5kV2lkdGggPSB0aGlzLndpZHRoT3B0aW9uIHx8IEQsIEUgfHwgKHRoaXMuZ3JvdXAgPSBFID0gSS5nKFwibGVnZW5kXCIpLmFkZENsYXNzKGouY2xhc3NOYW1lIHx8IFwiXCIpLmF0dHIoeyB6SW5kZXg6IDcgfSkuYWRkKCksIHRoaXMuY29udGVudEdyb3VwID0gSS5nKCkuYXR0cih7IHpJbmRleDogMSB9KS5hZGQoRSksIHRoaXMuc2Nyb2xsR3JvdXAgPSBJLmcoKS5hZGQodGhpcy5jb250ZW50R3JvdXApKSwgdGhpcy5yZW5kZXJUaXRsZSgpLCBrKF8sIChKLCBTKSA9PiAoSi5vcHRpb25zICYmIEoub3B0aW9ucy5sZWdlbmRJbmRleCB8fCAwKSAtIChTLm9wdGlvbnMgJiYgUy5vcHRpb25zLmxlZ2VuZEluZGV4IHx8IDApKSwgai5yZXZlcnNlZCAmJiBfLnJldmVyc2UoKSwgdGhpcy5hbGxJdGVtcyA9IF8sIHRoaXMuZGlzcGxheSA9IHIxID0gISFfLmxlbmd0aCwgdGhpcy5sYXN0TGluZUhlaWdodCA9IDAsIHRoaXMubWF4SXRlbVdpZHRoID0gMCwgdGhpcy50b3RhbEl0ZW1XaWR0aCA9IDAsIHRoaXMuaXRlbUhlaWdodCA9IDAsIF8uZm9yRWFjaCh0aGlzLnJlbmRlckl0ZW0sIHRoaXMpLCBfLmZvckVhY2godGhpcy5sYXlvdXRJdGVtLCB0aGlzKSwgSyA9ICh0aGlzLndpZHRoT3B0aW9uIHx8IHRoaXMub2Zmc2V0V2lkdGgpICsgVSwgUSA9IHRoaXMubGFzdEl0ZW1ZICsgdGhpcy5sYXN0TGluZUhlaWdodCArIHRoaXMudGl0bGVIZWlnaHQsIFEgPSB0aGlzLmhhbmRsZU92ZXJmbG93KFEpICsgVSwgRyB8fCAodGhpcy5ib3ggPSBHID0gSS5yZWN0KCkuYWRkQ2xhc3MoXCJoaWdoY2hhcnRzLWxlZ2VuZC1ib3hcIikuYXR0cih7IHI6IGouYm9yZGVyUmFkaXVzIH0pLmFkZChFKSksIFIuc3R5bGVkTW9kZSB8fCBHLmF0dHIoeyBzdHJva2U6IGouYm9yZGVyQ29sb3IsIFwic3Ryb2tlLXdpZHRoXCI6IGouYm9yZGVyV2lkdGggfHwgMCwgZmlsbDogai5iYWNrZ3JvdW5kQ29sb3IgfHwgXCJub25lXCIgfSkuc2hhZG93KGouc2hhZG93KSwgSyA+IDAgJiYgUSA+IDAgJiYgR1tHLnBsYWNlZCA/IFwiYW5pbWF0ZVwiIDogXCJhdHRyXCJdKEcuY3Jpc3AuY2FsbCh7fSwgeyB4OiAwLCB5OiAwLCB3aWR0aDogSywgaGVpZ2h0OiBRIH0sIEcuc3Ryb2tlV2lkdGgoKSkpLCBFW3IxID8gXCJzaG93XCIgOiBcImhpZGVcIl0oKSwgUi5zdHlsZWRNb2RlICYmIEUuZ2V0U3R5bGUoXCJkaXNwbGF5XCIpID09PSBcIm5vbmVcIiAmJiAoSyA9IFEgPSAwKSwgdGhpcy5sZWdlbmRXaWR0aCA9IEssIHRoaXMubGVnZW5kSGVpZ2h0ID0gUSwgcjEgJiYgdGhpcy5hbGlnbigpLCB0aGlzLnByb3hpbWF0ZSB8fCB0aGlzLnBvc2l0aW9uSXRlbXMoKSwgVCh0aGlzLCBcImFmdGVyUmVuZGVyXCIpO1xuICAgICAgICB9XG4gICAgICAgIGFsaWduKFIgPSB0aGlzLmNoYXJ0LnNwYWNpbmdCb3gpIHtcbiAgICAgICAgICBsZXQgSSA9IHRoaXMuY2hhcnQsIGogPSB0aGlzLm9wdGlvbnMsIFUgPSBSLnk7XG4gICAgICAgICAgLyhsdGh8Y3R8cnRoKS8udGVzdCh0aGlzLmdldEFsaWdubWVudCgpKSAmJiBJLnRpdGxlT2Zmc2V0WzBdID4gMCA/IFUgKz0gSS50aXRsZU9mZnNldFswXSA6IC8obGJofGNifHJiaCkvLnRlc3QodGhpcy5nZXRBbGlnbm1lbnQoKSkgJiYgSS50aXRsZU9mZnNldFsyXSA+IDAgJiYgKFUgLT0gSS50aXRsZU9mZnNldFsyXSksIFUgIT09IFIueSAmJiAoUiA9IEgoUiwgeyB5OiBVIH0pKSwgSS5oYXNSZW5kZXJlZCB8fCAodGhpcy5ncm91cC5wbGFjZWQgPSAhMSksIHRoaXMuZ3JvdXAuYWxpZ24oSChqLCB7IHdpZHRoOiB0aGlzLmxlZ2VuZFdpZHRoLCBoZWlnaHQ6IHRoaXMubGVnZW5kSGVpZ2h0LCB2ZXJ0aWNhbEFsaWduOiB0aGlzLnByb3hpbWF0ZSA/IFwidG9wXCIgOiBqLnZlcnRpY2FsQWxpZ24gfSksICEwLCBSKTtcbiAgICAgICAgfVxuICAgICAgICBoYW5kbGVPdmVyZmxvdyhSKSB7XG4gICAgICAgICAgbGV0IEkgPSB0aGlzLCBqID0gdGhpcy5jaGFydCwgVSA9IGoucmVuZGVyZXIsIF8gPSB0aGlzLm9wdGlvbnMsIHIxID0gXy55LCBLID0gXy52ZXJ0aWNhbEFsaWduID09PSBcInRvcFwiLCBRID0gdGhpcy5wYWRkaW5nLCBFID0gXy5tYXhIZWlnaHQsIEQgPSBfLm5hdmlnYXRpb24sIEcgPSBDKEQuYW5pbWF0aW9uLCAhMCksIEogPSBELmFycm93U2l6ZSB8fCAxMiwgUyA9IHRoaXMucGFnZXMsIFcgPSB0aGlzLmFsbEl0ZW1zLCBQID0gZnVuY3Rpb24oYjEpIHtcbiAgICAgICAgICAgIHR5cGVvZiBiMSA9PSBcIm51bWJlclwiID8gZDEuYXR0cih7IGhlaWdodDogYjEgfSkgOiBkMSAmJiAoSS5jbGlwUmVjdCA9IGQxLmRlc3Ryb3koKSwgSS5jb250ZW50R3JvdXAuY2xpcCgpKSwgSS5jb250ZW50R3JvdXAuZGl2ICYmIChJLmNvbnRlbnRHcm91cC5kaXYuc3R5bGUuY2xpcCA9IGIxID8gXCJyZWN0KFwiICsgUSArIFwicHgsOTk5OXB4LFwiICsgKFEgKyBiMSkgKyBcInB4LDApXCIgOiBcImF1dG9cIik7XG4gICAgICAgICAgfSwgWSA9IGZ1bmN0aW9uKGIxKSB7XG4gICAgICAgICAgICByZXR1cm4gSVtiMV0gPSBVLmNpcmNsZSgwLCAwLCAxLjMgKiBKKS50cmFuc2xhdGUoSiAvIDIsIEogLyAyKS5hZGQoczEpLCBqLnN0eWxlZE1vZGUgfHwgSVtiMV0uYXR0cihcImZpbGxcIiwgXCJyZ2JhKDAsMCwwLDAuMDAwMSlcIiksIElbYjFdO1xuICAgICAgICAgIH0sIFosIHQxLCBpMSwgbjEgPSBqLnNwYWNpbmdCb3guaGVpZ2h0ICsgKEsgPyAtcjEgOiByMSkgLSBRLCBzMSA9IHRoaXMubmF2LCBkMSA9IHRoaXMuY2xpcFJlY3Q7XG4gICAgICAgICAgcmV0dXJuIF8ubGF5b3V0ICE9PSBcImhvcml6b250YWxcIiB8fCBfLnZlcnRpY2FsQWxpZ24gPT09IFwibWlkZGxlXCIgfHwgXy5mbG9hdGluZyB8fCAobjEgLz0gMiksIEUgJiYgKG4xID0gTWF0aC5taW4objEsIEUpKSwgUy5sZW5ndGggPSAwLCBSICYmIG4xID4gMCAmJiBSID4gbjEgJiYgRC5lbmFibGVkICE9PSAhMSA/ICh0aGlzLmNsaXBIZWlnaHQgPSBaID0gTWF0aC5tYXgobjEgLSAyMCAtIHRoaXMudGl0bGVIZWlnaHQgLSBRLCAwKSwgdGhpcy5jdXJyZW50UGFnZSA9IEModGhpcy5jdXJyZW50UGFnZSwgMSksIHRoaXMuZnVsbEhlaWdodCA9IFIsIFcuZm9yRWFjaCgoYjEsIGMxKSA9PiB7XG4gICAgICAgICAgICBsZXQgYTEgPSAoaTEgPSBiMS5sZWdlbmRJdGVtIHx8IHt9KS55IHx8IDAsIGwxID0gTWF0aC5yb3VuZChpMS5sYWJlbC5nZXRCQm94KCkuaGVpZ2h0KSwgcDEgPSBTLmxlbmd0aDtcbiAgICAgICAgICAgICghcDEgfHwgYTEgLSBTW3AxIC0gMV0gPiBaICYmICh0MSB8fCBhMSkgIT09IFNbcDEgLSAxXSkgJiYgKFMucHVzaCh0MSB8fCBhMSksIHAxKyspLCBpMS5wYWdlSXggPSBwMSAtIDEsIHQxICYmICgoV1tjMSAtIDFdLmxlZ2VuZEl0ZW0gfHwge30pLnBhZ2VJeCA9IHAxIC0gMSksIGMxID09PSBXLmxlbmd0aCAtIDEgJiYgYTEgKyBsMSAtIFNbcDEgLSAxXSA+IFogJiYgYTEgPiBTW3AxIC0gMV0gJiYgKFMucHVzaChhMSksIGkxLnBhZ2VJeCA9IHAxKSwgYTEgIT09IHQxICYmICh0MSA9IGExKTtcbiAgICAgICAgICB9KSwgZDEgfHwgKGQxID0gSS5jbGlwUmVjdCA9IFUuY2xpcFJlY3QoMCwgUSAtIDIsIDk5OTksIDApLCBJLmNvbnRlbnRHcm91cC5jbGlwKGQxKSksIFAoWiksIHMxIHx8ICh0aGlzLm5hdiA9IHMxID0gVS5nKCkuYXR0cih7IHpJbmRleDogMSB9KS5hZGQodGhpcy5ncm91cCksIHRoaXMudXAgPSBVLnN5bWJvbChcInRyaWFuZ2xlXCIsIDAsIDAsIEosIEopLmFkZChzMSksIFkoXCJ1cFRyYWNrZXJcIikub24oXCJjbGlja1wiLCBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgIEkuc2Nyb2xsKC0xLCBHKTtcbiAgICAgICAgICB9KSwgdGhpcy5wYWdlciA9IFUudGV4dChcIlwiLCAxNSwgMTApLmFkZENsYXNzKFwiaGlnaGNoYXJ0cy1sZWdlbmQtbmF2aWdhdGlvblwiKSwgIWouc3R5bGVkTW9kZSAmJiBELnN0eWxlICYmIHRoaXMucGFnZXIuY3NzKEQuc3R5bGUpLCB0aGlzLnBhZ2VyLmFkZChzMSksIHRoaXMuZG93biA9IFUuc3ltYm9sKFwidHJpYW5nbGUtZG93blwiLCAwLCAwLCBKLCBKKS5hZGQoczEpLCBZKFwiZG93blRyYWNrZXJcIikub24oXCJjbGlja1wiLCBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgIEkuc2Nyb2xsKDEsIEcpO1xuICAgICAgICAgIH0pKSwgSS5zY3JvbGwoMCksIFIgPSBuMSkgOiBzMSAmJiAoUCgpLCB0aGlzLm5hdiA9IHMxLmRlc3Ryb3koKSwgdGhpcy5zY3JvbGxHcm91cC5hdHRyKHsgdHJhbnNsYXRlWTogMSB9KSwgdGhpcy5jbGlwSGVpZ2h0ID0gMCksIFI7XG4gICAgICAgIH1cbiAgICAgICAgc2Nyb2xsKFIsIEkpIHtcbiAgICAgICAgICBsZXQgaiA9IHRoaXMuY2hhcnQsIFUgPSB0aGlzLnBhZ2VzLCBfID0gVS5sZW5ndGgsIHIxID0gdGhpcy5jbGlwSGVpZ2h0LCBLID0gdGhpcy5vcHRpb25zLm5hdmlnYXRpb24sIFEgPSB0aGlzLnBhZ2VyLCBFID0gdGhpcy5wYWRkaW5nLCBEID0gdGhpcy5jdXJyZW50UGFnZSArIFI7XG4gICAgICAgICAgRCA+IF8gJiYgKEQgPSBfKSwgRCA+IDAgJiYgKEkgIT09IHZvaWQgMCAmJiBBKEksIGopLCB0aGlzLm5hdi5hdHRyKHsgdHJhbnNsYXRlWDogRSwgdHJhbnNsYXRlWTogcjEgKyB0aGlzLnBhZGRpbmcgKyA3ICsgdGhpcy50aXRsZUhlaWdodCwgdmlzaWJpbGl0eTogXCJpbmhlcml0XCIgfSksIFt0aGlzLnVwLCB0aGlzLnVwVHJhY2tlcl0uZm9yRWFjaChmdW5jdGlvbihHKSB7XG4gICAgICAgICAgICBHLmF0dHIoeyBjbGFzczogRCA9PT0gMSA/IFwiaGlnaGNoYXJ0cy1sZWdlbmQtbmF2LWluYWN0aXZlXCIgOiBcImhpZ2hjaGFydHMtbGVnZW5kLW5hdi1hY3RpdmVcIiB9KTtcbiAgICAgICAgICB9KSwgUS5hdHRyKHsgdGV4dDogRCArIFwiL1wiICsgXyB9KSwgW3RoaXMuZG93biwgdGhpcy5kb3duVHJhY2tlcl0uZm9yRWFjaChmdW5jdGlvbihHKSB7XG4gICAgICAgICAgICBHLmF0dHIoeyB4OiAxOCArIHRoaXMucGFnZXIuZ2V0QkJveCgpLndpZHRoLCBjbGFzczogRCA9PT0gXyA/IFwiaGlnaGNoYXJ0cy1sZWdlbmQtbmF2LWluYWN0aXZlXCIgOiBcImhpZ2hjaGFydHMtbGVnZW5kLW5hdi1hY3RpdmVcIiB9KTtcbiAgICAgICAgICB9LCB0aGlzKSwgai5zdHlsZWRNb2RlIHx8ICh0aGlzLnVwLmF0dHIoeyBmaWxsOiBEID09PSAxID8gSy5pbmFjdGl2ZUNvbG9yIDogSy5hY3RpdmVDb2xvciB9KSwgdGhpcy51cFRyYWNrZXIuY3NzKHsgY3Vyc29yOiBEID09PSAxID8gXCJkZWZhdWx0XCIgOiBcInBvaW50ZXJcIiB9KSwgdGhpcy5kb3duLmF0dHIoeyBmaWxsOiBEID09PSBfID8gSy5pbmFjdGl2ZUNvbG9yIDogSy5hY3RpdmVDb2xvciB9KSwgdGhpcy5kb3duVHJhY2tlci5jc3MoeyBjdXJzb3I6IEQgPT09IF8gPyBcImRlZmF1bHRcIiA6IFwicG9pbnRlclwiIH0pKSwgdGhpcy5zY3JvbGxPZmZzZXQgPSAtVVtEIC0gMV0gKyB0aGlzLmluaXRpYWxJdGVtWSwgdGhpcy5zY3JvbGxHcm91cC5hbmltYXRlKHsgdHJhbnNsYXRlWTogdGhpcy5zY3JvbGxPZmZzZXQgfSksIHRoaXMuY3VycmVudFBhZ2UgPSBELCB0aGlzLnBvc2l0aW9uQ2hlY2tib3hlcygpLCB4KCgpID0+IHtcbiAgICAgICAgICAgIFQodGhpcywgXCJhZnRlclNjcm9sbFwiLCB7IGN1cnJlbnRQYWdlOiBEIH0pO1xuICAgICAgICAgIH0sIHUoQyhJLCBqLnJlbmRlcmVyLmdsb2JhbEFuaW1hdGlvbiwgITApKS5kdXJhdGlvbikpO1xuICAgICAgICB9XG4gICAgICAgIHNldEl0ZW1FdmVudHMoUiwgSSwgaikge1xuICAgICAgICAgIGxldCBVID0gdGhpcywgXyA9IFIubGVnZW5kSXRlbSB8fCB7fSwgcjEgPSBVLmNoYXJ0LnJlbmRlcmVyLmJveFdyYXBwZXIsIEsgPSBSIGluc3RhbmNlb2YgbCwgUSA9IFIgaW5zdGFuY2VvZiBzLCBFID0gXCJoaWdoY2hhcnRzLWxlZ2VuZC1cIiArIChLID8gXCJwb2ludFwiIDogXCJzZXJpZXNcIikgKyBcIi1hY3RpdmVcIiwgRCA9IFUuY2hhcnQuc3R5bGVkTW9kZSwgRyA9IGogPyBbSSwgXy5zeW1ib2xdIDogW18uZ3JvdXBdLCBKID0gKFMpID0+IHtcbiAgICAgICAgICAgIFUuYWxsSXRlbXMuZm9yRWFjaCgoVykgPT4ge1xuICAgICAgICAgICAgICBSICE9PSBXICYmIFtXXS5jb25jYXQoVy5saW5rZWRTZXJpZXMgfHwgW10pLmZvckVhY2goKFApID0+IHtcbiAgICAgICAgICAgICAgICBQLnNldFN0YXRlKFMsICFLKTtcbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9O1xuICAgICAgICAgIGZvciAobGV0IFMgb2YgRylcbiAgICAgICAgICAgIFMgJiYgUy5vbihcIm1vdXNlb3ZlclwiLCBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgUi52aXNpYmxlICYmIEooXCJpbmFjdGl2ZVwiKSwgUi5zZXRTdGF0ZShcImhvdmVyXCIpLCBSLnZpc2libGUgJiYgcjEuYWRkQ2xhc3MoRSksIEQgfHwgSS5jc3MoVS5vcHRpb25zLml0ZW1Ib3ZlclN0eWxlKTtcbiAgICAgICAgICAgIH0pLm9uKFwibW91c2VvdXRcIiwgZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICAgIFUuY2hhcnQuc3R5bGVkTW9kZSB8fCBJLmNzcyhIKFIudmlzaWJsZSA/IFUuaXRlbVN0eWxlIDogVS5pdGVtSGlkZGVuU3R5bGUpKSwgSihcIlwiKSwgcjEucmVtb3ZlQ2xhc3MoRSksIFIuc2V0U3RhdGUoKTtcbiAgICAgICAgICAgIH0pLm9uKFwiY2xpY2tcIiwgZnVuY3Rpb24oVykge1xuICAgICAgICAgICAgICBsZXQgUCA9IGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgICAgIFIuc2V0VmlzaWJsZSAmJiBSLnNldFZpc2libGUoKSwgSihSLnZpc2libGUgPyBcImluYWN0aXZlXCIgOiBcIlwiKTtcbiAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgcjEucmVtb3ZlQ2xhc3MoRSksIFQoVSwgXCJpdGVtQ2xpY2tcIiwgeyBicm93c2VyRXZlbnQ6IFcsIGxlZ2VuZEl0ZW06IFIgfSwgUCksIEsgPyBSLmZpcmVQb2ludEV2ZW50KFwibGVnZW5kSXRlbUNsaWNrXCIsIHsgYnJvd3NlckV2ZW50OiBXIH0pIDogUSAmJiBUKFIsIFwibGVnZW5kSXRlbUNsaWNrXCIsIHsgYnJvd3NlckV2ZW50OiBXIH0pO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgY3JlYXRlQ2hlY2tib3hGb3JJdGVtKFIpIHtcbiAgICAgICAgICBSLmNoZWNrYm94ID0gTChcImlucHV0XCIsIHsgdHlwZTogXCJjaGVja2JveFwiLCBjbGFzc05hbWU6IFwiaGlnaGNoYXJ0cy1sZWdlbmQtY2hlY2tib3hcIiwgY2hlY2tlZDogUi5zZWxlY3RlZCwgZGVmYXVsdENoZWNrZWQ6IFIuc2VsZWN0ZWQgfSwgdGhpcy5vcHRpb25zLml0ZW1DaGVja2JveFN0eWxlLCB0aGlzLmNoYXJ0LmNvbnRhaW5lciksIHYoUi5jaGVja2JveCwgXCJjbGlja1wiLCBmdW5jdGlvbihJKSB7XG4gICAgICAgICAgICBsZXQgaiA9IEkudGFyZ2V0O1xuICAgICAgICAgICAgVChSLnNlcmllcyB8fCBSLCBcImNoZWNrYm94Q2xpY2tcIiwgeyBjaGVja2VkOiBqLmNoZWNrZWQsIGl0ZW06IFIgfSwgZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICAgIFIuc2VsZWN0KCk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIChNID0gTiB8fCAoTiA9IHt9KSkuY29tcG9zZSA9IGZ1bmN0aW9uKFYpIHtcbiAgICAgICAgcShmLCBcIkNvcmUuTGVnZW5kXCIpICYmIHYoViwgXCJiZWZvcmVNYXJnaW5zXCIsIGZ1bmN0aW9uKCkge1xuICAgICAgICAgIHRoaXMubGVnZW5kID0gbmV3IE0odGhpcywgdGhpcy5vcHRpb25zLmxlZ2VuZCk7XG4gICAgICAgIH0pO1xuICAgICAgfSwgTjtcbiAgICB9KSwgbihvLCBcIkNvcmUvQ2hhcnQvQ2hhcnQuanNcIiwgW29bXCJDb3JlL0FuaW1hdGlvbi9BbmltYXRpb25VdGlsaXRpZXMuanNcIl0sIG9bXCJDb3JlL0F4aXMvQXhpcy5qc1wiXSwgb1tcIkNvcmUvRGVmYXVsdHMuanNcIl0sIG9bXCJDb3JlL1RlbXBsYXRpbmcuanNcIl0sIG9bXCJDb3JlL0ZvdW5kYXRpb24uanNcIl0sIG9bXCJDb3JlL0dsb2JhbHMuanNcIl0sIG9bXCJDb3JlL1JlbmRlcmVyL1JlbmRlcmVyUmVnaXN0cnkuanNcIl0sIG9bXCJDb3JlL1Nlcmllcy9TZXJpZXMuanNcIl0sIG9bXCJDb3JlL1Nlcmllcy9TZXJpZXNSZWdpc3RyeS5qc1wiXSwgb1tcIkNvcmUvUmVuZGVyZXIvU1ZHL1NWR1JlbmRlcmVyLmpzXCJdLCBvW1wiQ29yZS9UaW1lLmpzXCJdLCBvW1wiQ29yZS9VdGlsaXRpZXMuanNcIl0sIG9bXCJDb3JlL1JlbmRlcmVyL0hUTUwvQVNULmpzXCJdLCBvW1wiQ29yZS9BeGlzL1RpY2suanNcIl1dLCBmdW5jdGlvbihyLCBpLCBhLCBzLCBsLCBwLCBkLCBiLCBNLCB1LCBBLCB6LCBmLCBPKSB7XG4gICAgICBsZXQgeyBhbmltYXRlOiBoLCBhbmltT2JqZWN0OiBnLCBzZXRBbmltYXRpb246IHYgfSA9IHIsIHsgZGVmYXVsdE9wdGlvbnM6IEwsIGRlZmF1bHRUaW1lOiB5IH0gPSBhLCB7IG51bWJlckZvcm1hdDogQiB9ID0gcywgeyByZWdpc3RlckV2ZW50T3B0aW9uczogWCB9ID0gbCwgeyBjaGFydHM6IEYsIGRvYzogVCwgbWFyZ2luTmFtZXM6IHcsIHN2ZzogSCwgd2luOiBDIH0gPSBwLCB7IHNlcmllc1R5cGVzOiBxIH0gPSBNLCB7IGFkZEV2ZW50OiBtLCBhdHRyOiBrLCBjcmVhdGVFbGVtZW50OiB4LCBjc3M6IE4sIGRlZmluZWQ6IFYsIGRpZmZPYmplY3RzOiBSLCBkaXNjYXJkRWxlbWVudDogSSwgZXJhc2U6IGosIGVycm9yOiBVLCBleHRlbmQ6IF8sIGZpbmQ6IHIxLCBmaXJlRXZlbnQ6IEssIGdldFN0eWxlOiBRLCBpc0FycmF5OiBFLCBpc051bWJlcjogRCwgaXNPYmplY3Q6IEcsIGlzU3RyaW5nOiBKLCBtZXJnZTogUywgb2JqZWN0RWFjaDogVywgcGljazogUCwgcEludDogWSwgcmVsYXRpdmVMZW5ndGg6IFosIHJlbW92ZUV2ZW50OiB0MSwgc3BsYXQ6IGkxLCBzeW5jVGltZW91dDogbjEsIHVuaXF1ZUtleTogczEgfSA9IHo7XG4gICAgICBjbGFzcyBkMSB7XG4gICAgICAgIHN0YXRpYyBjaGFydChjMSwgYTEsIGwxKSB7XG4gICAgICAgICAgcmV0dXJuIG5ldyBkMShjMSwgYTEsIGwxKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdHJ1Y3RvcihjMSwgYTEsIGwxKSB7XG4gICAgICAgICAgdGhpcy5zaGFyZWRDbGlwcyA9IHt9O1xuICAgICAgICAgIGxldCBwMSA9IFsuLi5hcmd1bWVudHNdO1xuICAgICAgICAgIChKKGMxKSB8fCBjMS5ub2RlTmFtZSkgJiYgKHRoaXMucmVuZGVyVG8gPSBwMS5zaGlmdCgpKSwgdGhpcy5pbml0KHAxWzBdLCBwMVsxXSk7XG4gICAgICAgIH1cbiAgICAgICAgc2V0Wm9vbU9wdGlvbnMoKSB7XG4gICAgICAgICAgbGV0IGMxID0gdGhpcy5vcHRpb25zLmNoYXJ0LCBhMSA9IGMxLnpvb21pbmc7XG4gICAgICAgICAgdGhpcy56b29taW5nID0geyAuLi5hMSwgdHlwZTogUChjMS56b29tVHlwZSwgYTEudHlwZSksIGtleTogUChjMS56b29tS2V5LCBhMS5rZXkpLCBwaW5jaFR5cGU6IFAoYzEucGluY2hUeXBlLCBhMS5waW5jaFR5cGUpLCBzaW5nbGVUb3VjaDogUChjMS56b29tQnlTaW5nbGVUb3VjaCwgYTEuc2luZ2xlVG91Y2gsICExKSwgcmVzZXRCdXR0b246IFMoYTEucmVzZXRCdXR0b24sIGMxLnJlc2V0Wm9vbUJ1dHRvbikgfTtcbiAgICAgICAgfVxuICAgICAgICBpbml0KGMxLCBhMSkge1xuICAgICAgICAgIEsodGhpcywgXCJpbml0XCIsIHsgYXJnczogYXJndW1lbnRzIH0sIGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgbGV0IGwxID0gUyhMLCBjMSksIHAxID0gbDEuY2hhcnQ7XG4gICAgICAgICAgICB0aGlzLnVzZXJPcHRpb25zID0gXyh7fSwgYzEpLCB0aGlzLm1hcmdpbiA9IFtdLCB0aGlzLnNwYWNpbmcgPSBbXSwgdGhpcy5sYWJlbENvbGxlY3RvcnMgPSBbXSwgdGhpcy5jYWxsYmFjayA9IGExLCB0aGlzLmlzUmVzaXppbmcgPSAwLCB0aGlzLm9wdGlvbnMgPSBsMSwgdGhpcy5heGVzID0gW10sIHRoaXMuc2VyaWVzID0gW10sIHRoaXMudGltZSA9IGMxLnRpbWUgJiYgT2JqZWN0LmtleXMoYzEudGltZSkubGVuZ3RoID8gbmV3IEEoYzEudGltZSkgOiBwLnRpbWUsIHRoaXMubnVtYmVyRm9ybWF0dGVyID0gcDEubnVtYmVyRm9ybWF0dGVyIHx8IEIsIHRoaXMuc3R5bGVkTW9kZSA9IHAxLnN0eWxlZE1vZGUsIHRoaXMuaGFzQ2FydGVzaWFuU2VyaWVzID0gcDEuc2hvd0F4ZXMsIHRoaXMuaW5kZXggPSBGLmxlbmd0aCwgRi5wdXNoKHRoaXMpLCBwLmNoYXJ0Q291bnQrKywgWCh0aGlzLCBwMSksIHRoaXMueEF4aXMgPSBbXSwgdGhpcy55QXhpcyA9IFtdLCB0aGlzLnBvaW50Q291bnQgPSB0aGlzLmNvbG9yQ291bnRlciA9IHRoaXMuc3ltYm9sQ291bnRlciA9IDAsIHRoaXMuc2V0Wm9vbU9wdGlvbnMoKSwgSyh0aGlzLCBcImFmdGVySW5pdFwiKSwgdGhpcy5maXJzdFJlbmRlcigpO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIGluaXRTZXJpZXMoYzEpIHtcbiAgICAgICAgICBsZXQgYTEgPSB0aGlzLm9wdGlvbnMuY2hhcnQsIGwxID0gYzEudHlwZSB8fCBhMS50eXBlLCBwMSA9IHFbbDFdO1xuICAgICAgICAgIHAxIHx8IFUoMTcsICEwLCB0aGlzLCB7IG1pc3NpbmdNb2R1bGVGb3I6IGwxIH0pO1xuICAgICAgICAgIGxldCBNMSA9IG5ldyBwMSgpO1xuICAgICAgICAgIHJldHVybiB0eXBlb2YgTTEuaW5pdCA9PSBcImZ1bmN0aW9uXCIgJiYgTTEuaW5pdCh0aGlzLCBjMSksIE0xO1xuICAgICAgICB9XG4gICAgICAgIHNldFNvcnRlZERhdGEoKSB7XG4gICAgICAgICAgdGhpcy5nZXRTZXJpZXNPcmRlckJ5TGlua3MoKS5mb3JFYWNoKGZ1bmN0aW9uKGMxKSB7XG4gICAgICAgICAgICBjMS5wb2ludHMgfHwgYzEuZGF0YSB8fCAhYzEuZW5hYmxlZERhdGFTb3J0aW5nIHx8IGMxLnNldERhdGEoYzEub3B0aW9ucy5kYXRhLCAhMSk7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgZ2V0U2VyaWVzT3JkZXJCeUxpbmtzKCkge1xuICAgICAgICAgIHJldHVybiB0aGlzLnNlcmllcy5jb25jYXQoKS5zb3J0KGZ1bmN0aW9uKGMxLCBhMSkge1xuICAgICAgICAgICAgcmV0dXJuIGMxLmxpbmtlZFNlcmllcy5sZW5ndGggfHwgYTEubGlua2VkU2VyaWVzLmxlbmd0aCA/IGExLmxpbmtlZFNlcmllcy5sZW5ndGggLSBjMS5saW5rZWRTZXJpZXMubGVuZ3RoIDogMDtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBvcmRlckl0ZW1zKGMxLCBhMSA9IDApIHtcbiAgICAgICAgICBsZXQgbDEgPSB0aGlzW2MxXSwgcDEgPSB0aGlzLm9wdGlvbnNbYzFdID0gaTEodGhpcy5vcHRpb25zW2MxXSkuc2xpY2UoKSwgTTEgPSB0aGlzLnVzZXJPcHRpb25zW2MxXSA9IHRoaXMudXNlck9wdGlvbnNbYzFdID8gaTEodGhpcy51c2VyT3B0aW9uc1tjMV0pLnNsaWNlKCkgOiBbXTtcbiAgICAgICAgICBpZiAodGhpcy5oYXNSZW5kZXJlZCAmJiAocDEuc3BsaWNlKGExKSwgTTEuc3BsaWNlKGExKSksIGwxKVxuICAgICAgICAgICAgZm9yIChsZXQgQTEgPSBhMSwgdTEgPSBsMS5sZW5ndGg7IEExIDwgdTE7ICsrQTEpIHtcbiAgICAgICAgICAgICAgbGV0IGgxID0gbDFbQTFdO1xuICAgICAgICAgICAgICBoMSAmJiAoaDEuaW5kZXggPSBBMSwgaDEgaW5zdGFuY2VvZiBiICYmIChoMS5uYW1lID0gaDEuZ2V0TmFtZSgpKSwgaDEub3B0aW9ucy5pc0ludGVybmFsIHx8IChwMVtBMV0gPSBoMS5vcHRpb25zLCBNMVtBMV0gPSBoMS51c2VyT3B0aW9ucykpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlzSW5zaWRlUGxvdChjMSwgYTEsIGwxID0ge30pIHtcbiAgICAgICAgICB2YXIgUzE7XG4gICAgICAgICAgbGV0IHsgaW52ZXJ0ZWQ6IHAxLCBwbG90Qm94OiBNMSwgcGxvdExlZnQ6IEExLCBwbG90VG9wOiB1MSwgc2Nyb2xsYWJsZVBsb3RCb3g6IGgxIH0gPSB0aGlzLCB7IHNjcm9sbExlZnQ6IEMxID0gMCwgc2Nyb2xsVG9wOiBxMSA9IDAgfSA9IGwxLnZpc2libGVQbG90T25seSAmJiAoKFMxID0gdGhpcy5zY3JvbGxhYmxlUGxvdEFyZWEpID09IG51bGwgPyB2b2lkIDAgOiBTMS5zY3JvbGxpbmdDb250YWluZXIpIHx8IHt9LCBXMSA9IGwxLnNlcmllcywgUjEgPSBsMS52aXNpYmxlUGxvdE9ubHkgJiYgaDEgfHwgTTEsIGsxID0gbDEuaW52ZXJ0ZWQgPyBhMSA6IGMxLCBOMSA9IGwxLmludmVydGVkID8gYzEgOiBhMSwgdjEgPSB7IHg6IGsxLCB5OiBOMSwgaXNJbnNpZGVQbG90OiAhMCwgb3B0aW9uczogbDEgfTtcbiAgICAgICAgICBpZiAoIWwxLmlnbm9yZVgpIHtcbiAgICAgICAgICAgIGxldCBEMSA9IFcxICYmIChwMSAmJiAhdGhpcy5wb2xhciA/IFcxLnlBeGlzIDogVzEueEF4aXMpIHx8IHsgcG9zOiBBMSwgbGVuOiAxIC8gMCB9LCBGMSA9IGwxLnBhbmVDb29yZGluYXRlcyA/IEQxLnBvcyArIGsxIDogQTEgKyBrMTtcbiAgICAgICAgICAgIEYxID49IE1hdGgubWF4KEMxICsgQTEsIEQxLnBvcykgJiYgRjEgPD0gTWF0aC5taW4oQzEgKyBBMSArIFIxLndpZHRoLCBEMS5wb3MgKyBEMS5sZW4pIHx8ICh2MS5pc0luc2lkZVBsb3QgPSAhMSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmICghbDEuaWdub3JlWSAmJiB2MS5pc0luc2lkZVBsb3QpIHtcbiAgICAgICAgICAgIGxldCBEMSA9ICFwMSAmJiBsMS5heGlzICYmICFsMS5heGlzLmlzWEF4aXMgJiYgbDEuYXhpcyB8fCBXMSAmJiAocDEgPyBXMS54QXhpcyA6IFcxLnlBeGlzKSB8fCB7IHBvczogdTEsIGxlbjogMSAvIDAgfSwgRjEgPSBsMS5wYW5lQ29vcmRpbmF0ZXMgPyBEMS5wb3MgKyBOMSA6IHUxICsgTjE7XG4gICAgICAgICAgICBGMSA+PSBNYXRoLm1heChxMSArIHUxLCBEMS5wb3MpICYmIEYxIDw9IE1hdGgubWluKHExICsgdTEgKyBSMS5oZWlnaHQsIEQxLnBvcyArIEQxLmxlbikgfHwgKHYxLmlzSW5zaWRlUGxvdCA9ICExKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIEsodGhpcywgXCJhZnRlcklzSW5zaWRlUGxvdFwiLCB2MSksIHYxLmlzSW5zaWRlUGxvdDtcbiAgICAgICAgfVxuICAgICAgICByZWRyYXcoYzEpIHtcbiAgICAgICAgICBLKHRoaXMsIFwiYmVmb3JlUmVkcmF3XCIpO1xuICAgICAgICAgIGxldCBhMSA9IHRoaXMuaGFzQ2FydGVzaWFuU2VyaWVzID8gdGhpcy5heGVzIDogdGhpcy5jb2xvckF4aXMgfHwgW10sIGwxID0gdGhpcy5zZXJpZXMsIHAxID0gdGhpcy5wb2ludGVyLCBNMSA9IHRoaXMubGVnZW5kLCBBMSA9IHRoaXMudXNlck9wdGlvbnMubGVnZW5kLCB1MSA9IHRoaXMucmVuZGVyZXIsIGgxID0gdTEuaXNIaWRkZW4oKSwgQzEgPSBbXSwgcTEsIFcxLCBSMSwgazEgPSB0aGlzLmlzRGlydHlCb3gsIE4xID0gdGhpcy5pc0RpcnR5TGVnZW5kLCB2MTtcbiAgICAgICAgICBmb3IgKHUxLnJvb3RGb250U2l6ZSA9IHUxLmJveFdyYXBwZXIuZ2V0U3R5bGUoXCJmb250LXNpemVcIiksIHRoaXMuc2V0UmVzcG9uc2l2ZSAmJiB0aGlzLnNldFJlc3BvbnNpdmUoITEpLCB2KCEhdGhpcy5oYXNSZW5kZXJlZCAmJiBjMSwgdGhpcyksIGgxICYmIHRoaXMudGVtcG9yYXJ5RGlzcGxheSgpLCB0aGlzLmxheU91dFRpdGxlcyghMSksIFIxID0gbDEubGVuZ3RoOyBSMS0tOyApXG4gICAgICAgICAgICBpZiAoKCh2MSA9IGwxW1IxXSkub3B0aW9ucy5zdGFja2luZyB8fCB2MS5vcHRpb25zLmNlbnRlckluQ2F0ZWdvcnkpICYmIChXMSA9ICEwLCB2MS5pc0RpcnR5KSkge1xuICAgICAgICAgICAgICBxMSA9ICEwO1xuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICBpZiAocTEpXG4gICAgICAgICAgICBmb3IgKFIxID0gbDEubGVuZ3RoOyBSMS0tOyApXG4gICAgICAgICAgICAgICh2MSA9IGwxW1IxXSkub3B0aW9ucy5zdGFja2luZyAmJiAodjEuaXNEaXJ0eSA9ICEwKTtcbiAgICAgICAgICBsMS5mb3JFYWNoKGZ1bmN0aW9uKFMxKSB7XG4gICAgICAgICAgICBTMS5pc0RpcnR5ICYmIChTMS5vcHRpb25zLmxlZ2VuZFR5cGUgPT09IFwicG9pbnRcIiA/ICh0eXBlb2YgUzEudXBkYXRlVG90YWxzID09IFwiZnVuY3Rpb25cIiAmJiBTMS51cGRhdGVUb3RhbHMoKSwgTjEgPSAhMCkgOiBBMSAmJiAoQTEubGFiZWxGb3JtYXR0ZXIgfHwgQTEubGFiZWxGb3JtYXQpICYmIChOMSA9ICEwKSksIFMxLmlzRGlydHlEYXRhICYmIEsoUzEsIFwidXBkYXRlZERhdGFcIik7XG4gICAgICAgICAgfSksIE4xICYmIE0xICYmIE0xLm9wdGlvbnMuZW5hYmxlZCAmJiAoTTEucmVuZGVyKCksIHRoaXMuaXNEaXJ0eUxlZ2VuZCA9ICExKSwgVzEgJiYgdGhpcy5nZXRTdGFja3MoKSwgYTEuZm9yRWFjaChmdW5jdGlvbihTMSkge1xuICAgICAgICAgICAgUzEudXBkYXRlTmFtZXMoKSwgUzEuc2V0U2NhbGUoKTtcbiAgICAgICAgICB9KSwgdGhpcy5nZXRNYXJnaW5zKCksIGExLmZvckVhY2goZnVuY3Rpb24oUzEpIHtcbiAgICAgICAgICAgIFMxLmlzRGlydHkgJiYgKGsxID0gITApO1xuICAgICAgICAgIH0pLCBhMS5mb3JFYWNoKGZ1bmN0aW9uKFMxKSB7XG4gICAgICAgICAgICBsZXQgRDEgPSBTMS5taW4gKyBcIixcIiArIFMxLm1heDtcbiAgICAgICAgICAgIFMxLmV4dEtleSAhPT0gRDEgJiYgKFMxLmV4dEtleSA9IEQxLCBDMS5wdXNoKGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgICBLKFMxLCBcImFmdGVyU2V0RXh0cmVtZXNcIiwgXyhTMS5ldmVudEFyZ3MsIFMxLmdldEV4dHJlbWVzKCkpKSwgZGVsZXRlIFMxLmV2ZW50QXJncztcbiAgICAgICAgICAgIH0pKSwgKGsxIHx8IFcxKSAmJiBTMS5yZWRyYXcoKTtcbiAgICAgICAgICB9KSwgazEgJiYgdGhpcy5kcmF3Q2hhcnRCb3goKSwgSyh0aGlzLCBcInByZWRyYXdcIiksIGwxLmZvckVhY2goZnVuY3Rpb24oUzEpIHtcbiAgICAgICAgICAgIChrMSB8fCBTMS5pc0RpcnR5KSAmJiBTMS52aXNpYmxlICYmIFMxLnJlZHJhdygpLCBTMS5pc0RpcnR5RGF0YSA9ICExO1xuICAgICAgICAgIH0pLCBwMSAmJiBwMS5yZXNldCghMCksIHUxLmRyYXcoKSwgSyh0aGlzLCBcInJlZHJhd1wiKSwgSyh0aGlzLCBcInJlbmRlclwiKSwgaDEgJiYgdGhpcy50ZW1wb3JhcnlEaXNwbGF5KCEwKSwgQzEuZm9yRWFjaChmdW5jdGlvbihTMSkge1xuICAgICAgICAgICAgUzEuY2FsbCgpO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIGdldChjMSkge1xuICAgICAgICAgIGxldCBhMSA9IHRoaXMuc2VyaWVzO1xuICAgICAgICAgIGZ1bmN0aW9uIGwxKE0xKSB7XG4gICAgICAgICAgICByZXR1cm4gTTEuaWQgPT09IGMxIHx8IE0xLm9wdGlvbnMgJiYgTTEub3B0aW9ucy5pZCA9PT0gYzE7XG4gICAgICAgICAgfVxuICAgICAgICAgIGxldCBwMSA9IHIxKHRoaXMuYXhlcywgbDEpIHx8IHIxKHRoaXMuc2VyaWVzLCBsMSk7XG4gICAgICAgICAgZm9yIChsZXQgTTEgPSAwOyAhcDEgJiYgTTEgPCBhMS5sZW5ndGg7IE0xKyspXG4gICAgICAgICAgICBwMSA9IHIxKGExW00xXS5wb2ludHMgfHwgW10sIGwxKTtcbiAgICAgICAgICByZXR1cm4gcDE7XG4gICAgICAgIH1cbiAgICAgICAgZ2V0QXhlcygpIHtcbiAgICAgICAgICBsZXQgYzEgPSB0aGlzLnVzZXJPcHRpb25zO1xuICAgICAgICAgIGZvciAobGV0IGExIG9mIChLKHRoaXMsIFwiZ2V0QXhlc1wiKSwgW1wieEF4aXNcIiwgXCJ5QXhpc1wiXSkpXG4gICAgICAgICAgICBmb3IgKGxldCBsMSBvZiBjMVthMV0gPSBpMShjMVthMV0gfHwge30pKVxuICAgICAgICAgICAgICBuZXcgaSh0aGlzLCBsMSwgYTEpO1xuICAgICAgICAgIEsodGhpcywgXCJhZnRlckdldEF4ZXNcIik7XG4gICAgICAgIH1cbiAgICAgICAgZ2V0U2VsZWN0ZWRQb2ludHMoKSB7XG4gICAgICAgICAgcmV0dXJuIHRoaXMuc2VyaWVzLnJlZHVjZSgoYzEsIGExKSA9PiAoYTEuZ2V0UG9pbnRzQ29sbGVjdGlvbigpLmZvckVhY2goKGwxKSA9PiB7XG4gICAgICAgICAgICBQKGwxLnNlbGVjdGVkU3RhZ2luZywgbDEuc2VsZWN0ZWQpICYmIGMxLnB1c2gobDEpO1xuICAgICAgICAgIH0pLCBjMSksIFtdKTtcbiAgICAgICAgfVxuICAgICAgICBnZXRTZWxlY3RlZFNlcmllcygpIHtcbiAgICAgICAgICByZXR1cm4gdGhpcy5zZXJpZXMuZmlsdGVyKGZ1bmN0aW9uKGMxKSB7XG4gICAgICAgICAgICByZXR1cm4gYzEuc2VsZWN0ZWQ7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgc2V0VGl0bGUoYzEsIGExLCBsMSkge1xuICAgICAgICAgIHRoaXMuYXBwbHlEZXNjcmlwdGlvbihcInRpdGxlXCIsIGMxKSwgdGhpcy5hcHBseURlc2NyaXB0aW9uKFwic3VidGl0bGVcIiwgYTEpLCB0aGlzLmFwcGx5RGVzY3JpcHRpb24oXCJjYXB0aW9uXCIsIHZvaWQgMCksIHRoaXMubGF5T3V0VGl0bGVzKGwxKTtcbiAgICAgICAgfVxuICAgICAgICBhcHBseURlc2NyaXB0aW9uKGMxLCBhMSkge1xuICAgICAgICAgIGxldCBsMSA9IHRoaXMsIHAxID0gdGhpcy5vcHRpb25zW2MxXSA9IFModGhpcy5vcHRpb25zW2MxXSwgYTEpLCBNMSA9IHRoaXNbYzFdO1xuICAgICAgICAgIE0xICYmIGExICYmICh0aGlzW2MxXSA9IE0xID0gTTEuZGVzdHJveSgpKSwgcDEgJiYgIU0xICYmICgoTTEgPSB0aGlzLnJlbmRlcmVyLnRleHQocDEudGV4dCwgMCwgMCwgcDEudXNlSFRNTCkuYXR0cih7IGFsaWduOiBwMS5hbGlnbiwgY2xhc3M6IFwiaGlnaGNoYXJ0cy1cIiArIGMxLCB6SW5kZXg6IHAxLnpJbmRleCB8fCA0IH0pLmFkZCgpKS51cGRhdGUgPSBmdW5jdGlvbihBMSwgdTEpIHtcbiAgICAgICAgICAgIGwxLmFwcGx5RGVzY3JpcHRpb24oYzEsIEExKSwgbDEubGF5T3V0VGl0bGVzKHUxKTtcbiAgICAgICAgICB9LCB0aGlzLnN0eWxlZE1vZGUgfHwgTTEuY3NzKF8oYzEgPT09IFwidGl0bGVcIiA/IHsgZm9udFNpemU6IHRoaXMub3B0aW9ucy5pc1N0b2NrID8gXCIxZW1cIiA6IFwiMS4yZW1cIiB9IDoge30sIHAxLnN0eWxlKSksIHRoaXNbYzFdID0gTTEpO1xuICAgICAgICB9XG4gICAgICAgIGxheU91dFRpdGxlcyhjMSA9ICEwKSB7XG4gICAgICAgICAgbGV0IGExID0gWzAsIDAsIDBdLCBsMSA9IHRoaXMucmVuZGVyZXIsIHAxID0gdGhpcy5zcGFjaW5nQm94O1xuICAgICAgICAgIFtcInRpdGxlXCIsIFwic3VidGl0bGVcIiwgXCJjYXB0aW9uXCJdLmZvckVhY2goZnVuY3Rpb24oQTEpIHtcbiAgICAgICAgICAgIGxldCB1MSA9IHRoaXNbQTFdLCBoMSA9IHRoaXMub3B0aW9uc1tBMV0sIEMxID0gaDEudmVydGljYWxBbGlnbiB8fCBcInRvcFwiLCBxMSA9IEExID09PSBcInRpdGxlXCIgPyBDMSA9PT0gXCJ0b3BcIiA/IC0zIDogMCA6IEMxID09PSBcInRvcFwiID8gYTFbMF0gKyAyIDogMDtcbiAgICAgICAgICAgIGlmICh1MSkge1xuICAgICAgICAgICAgICB1MS5jc3MoeyB3aWR0aDogKGgxLndpZHRoIHx8IHAxLndpZHRoICsgKGgxLndpZHRoQWRqdXN0IHx8IDApKSArIFwicHhcIiB9KTtcbiAgICAgICAgICAgICAgbGV0IFcxID0gbDEuZm9udE1ldHJpY3ModTEpLmIsIFIxID0gTWF0aC5yb3VuZCh1MS5nZXRCQm94KGgxLnVzZUhUTUwpLmhlaWdodCk7XG4gICAgICAgICAgICAgIHUxLmFsaWduKF8oeyB5OiBDMSA9PT0gXCJib3R0b21cIiA/IFcxIDogcTEgKyBXMSwgaGVpZ2h0OiBSMSB9LCBoMSksICExLCBcInNwYWNpbmdCb3hcIiksIGgxLmZsb2F0aW5nIHx8IChDMSA9PT0gXCJ0b3BcIiA/IGExWzBdID0gTWF0aC5jZWlsKGExWzBdICsgUjEpIDogQzEgPT09IFwiYm90dG9tXCIgJiYgKGExWzJdID0gTWF0aC5jZWlsKGExWzJdICsgUjEpKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSwgdGhpcyksIGExWzBdICYmICh0aGlzLm9wdGlvbnMudGl0bGUudmVydGljYWxBbGlnbiB8fCBcInRvcFwiKSA9PT0gXCJ0b3BcIiAmJiAoYTFbMF0gKz0gdGhpcy5vcHRpb25zLnRpdGxlLm1hcmdpbiksIGExWzJdICYmIHRoaXMub3B0aW9ucy5jYXB0aW9uLnZlcnRpY2FsQWxpZ24gPT09IFwiYm90dG9tXCIgJiYgKGExWzJdICs9IHRoaXMub3B0aW9ucy5jYXB0aW9uLm1hcmdpbik7XG4gICAgICAgICAgbGV0IE0xID0gIXRoaXMudGl0bGVPZmZzZXQgfHwgdGhpcy50aXRsZU9mZnNldC5qb2luKFwiLFwiKSAhPT0gYTEuam9pbihcIixcIik7XG4gICAgICAgICAgdGhpcy50aXRsZU9mZnNldCA9IGExLCBLKHRoaXMsIFwiYWZ0ZXJMYXlPdXRUaXRsZXNcIiksICF0aGlzLmlzRGlydHlCb3ggJiYgTTEgJiYgKHRoaXMuaXNEaXJ0eUJveCA9IHRoaXMuaXNEaXJ0eUxlZ2VuZCA9IE0xLCB0aGlzLmhhc1JlbmRlcmVkICYmIGMxICYmIHRoaXMuaXNEaXJ0eUJveCAmJiB0aGlzLnJlZHJhdygpKTtcbiAgICAgICAgfVxuICAgICAgICBnZXRDb250YWluZXJCb3goKSB7XG4gICAgICAgICAgbGV0IGMxID0gW10ubWFwLmNhbGwodGhpcy5yZW5kZXJUby5jaGlsZHJlbiwgKGwxKSA9PiB7XG4gICAgICAgICAgICBpZiAobDEgIT09IHRoaXMuY29udGFpbmVyKSB7XG4gICAgICAgICAgICAgIGxldCBwMSA9IGwxLnN0eWxlLmRpc3BsYXk7XG4gICAgICAgICAgICAgIHJldHVybiBsMS5zdHlsZS5kaXNwbGF5ID0gXCJub25lXCIsIFtsMSwgcDFdO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pLCBhMSA9IHsgd2lkdGg6IFEodGhpcy5yZW5kZXJUbywgXCJ3aWR0aFwiLCAhMCkgfHwgMCwgaGVpZ2h0OiBRKHRoaXMucmVuZGVyVG8sIFwiaGVpZ2h0XCIsICEwKSB8fCAwIH07XG4gICAgICAgICAgcmV0dXJuIGMxLmZpbHRlcihCb29sZWFuKS5mb3JFYWNoKChbbDEsIHAxXSkgPT4ge1xuICAgICAgICAgICAgbDEuc3R5bGUuZGlzcGxheSA9IHAxO1xuICAgICAgICAgIH0pLCBhMTtcbiAgICAgICAgfVxuICAgICAgICBnZXRDaGFydFNpemUoKSB7XG4gICAgICAgICAgdmFyIEExO1xuICAgICAgICAgIGxldCBjMSA9IHRoaXMub3B0aW9ucy5jaGFydCwgYTEgPSBjMS53aWR0aCwgbDEgPSBjMS5oZWlnaHQsIHAxID0gdGhpcy5nZXRDb250YWluZXJCb3goKSwgTTEgPSBwMS5oZWlnaHQgPiAxICYmICEoISgoQTEgPSB0aGlzLnJlbmRlclRvLnBhcmVudEVsZW1lbnQpICE9IG51bGwgJiYgQTEuc3R5bGUuaGVpZ2h0KSAmJiB0aGlzLnJlbmRlclRvLnN0eWxlLmhlaWdodCA9PT0gXCIxMDAlXCIpO1xuICAgICAgICAgIHRoaXMuY2hhcnRXaWR0aCA9IE1hdGgubWF4KDAsIGExIHx8IHAxLndpZHRoIHx8IDYwMCksIHRoaXMuY2hhcnRIZWlnaHQgPSBNYXRoLm1heCgwLCBaKGwxLCB0aGlzLmNoYXJ0V2lkdGgpIHx8IChNMSA/IHAxLmhlaWdodCA6IDQwMCkpLCB0aGlzLmNvbnRhaW5lckJveCA9IHAxO1xuICAgICAgICB9XG4gICAgICAgIHRlbXBvcmFyeURpc3BsYXkoYzEpIHtcbiAgICAgICAgICBsZXQgYTEgPSB0aGlzLnJlbmRlclRvLCBsMTtcbiAgICAgICAgICBpZiAoYzEpXG4gICAgICAgICAgICBmb3IgKDsgYTEgJiYgYTEuc3R5bGU7IClcbiAgICAgICAgICAgICAgYTEuaGNPcmlnU3R5bGUgJiYgKE4oYTEsIGExLmhjT3JpZ1N0eWxlKSwgZGVsZXRlIGExLmhjT3JpZ1N0eWxlKSwgYTEuaGNPcmlnRGV0YWNoZWQgJiYgKFQuYm9keS5yZW1vdmVDaGlsZChhMSksIGExLmhjT3JpZ0RldGFjaGVkID0gITEpLCBhMSA9IGExLnBhcmVudE5vZGU7XG4gICAgICAgICAgZWxzZVxuICAgICAgICAgICAgZm9yICg7IGExICYmIGExLnN0eWxlICYmIChULmJvZHkuY29udGFpbnMoYTEpIHx8IGExLnBhcmVudE5vZGUgfHwgKGExLmhjT3JpZ0RldGFjaGVkID0gITAsIFQuYm9keS5hcHBlbmRDaGlsZChhMSkpLCAoUShhMSwgXCJkaXNwbGF5XCIsICExKSA9PT0gXCJub25lXCIgfHwgYTEuaGNPcmljRGV0YWNoZWQpICYmIChhMS5oY09yaWdTdHlsZSA9IHsgZGlzcGxheTogYTEuc3R5bGUuZGlzcGxheSwgaGVpZ2h0OiBhMS5zdHlsZS5oZWlnaHQsIG92ZXJmbG93OiBhMS5zdHlsZS5vdmVyZmxvdyB9LCBsMSA9IHsgZGlzcGxheTogXCJibG9ja1wiLCBvdmVyZmxvdzogXCJoaWRkZW5cIiB9LCBhMSAhPT0gdGhpcy5yZW5kZXJUbyAmJiAobDEuaGVpZ2h0ID0gMCksIE4oYTEsIGwxKSwgYTEub2Zmc2V0V2lkdGggfHwgYTEuc3R5bGUuc2V0UHJvcGVydHkoXCJkaXNwbGF5XCIsIFwiYmxvY2tcIiwgXCJpbXBvcnRhbnRcIikpLCAoYTEgPSBhMS5wYXJlbnROb2RlKSAhPT0gVC5ib2R5KTsgKVxuICAgICAgICAgICAgICA7XG4gICAgICAgIH1cbiAgICAgICAgc2V0Q2xhc3NOYW1lKGMxKSB7XG4gICAgICAgICAgdGhpcy5jb250YWluZXIuY2xhc3NOYW1lID0gXCJoaWdoY2hhcnRzLWNvbnRhaW5lciBcIiArIChjMSB8fCBcIlwiKTtcbiAgICAgICAgfVxuICAgICAgICBnZXRDb250YWluZXIoKSB7XG4gICAgICAgICAgdmFyIFIxO1xuICAgICAgICAgIGxldCBjMSA9IHRoaXMub3B0aW9ucywgYTEgPSBjMS5jaGFydCwgbDEgPSBcImRhdGEtaGlnaGNoYXJ0cy1jaGFydFwiLCBwMSA9IHMxKCksIE0xLCBBMSA9IHRoaXMucmVuZGVyVG87XG4gICAgICAgICAgQTEgfHwgKHRoaXMucmVuZGVyVG8gPSBBMSA9IGExLnJlbmRlclRvKSwgSihBMSkgJiYgKHRoaXMucmVuZGVyVG8gPSBBMSA9IFQuZ2V0RWxlbWVudEJ5SWQoQTEpKSwgQTEgfHwgVSgxMywgITAsIHRoaXMpO1xuICAgICAgICAgIGxldCB1MSA9IFkoayhBMSwgbDEpKTtcbiAgICAgICAgICBEKHUxKSAmJiBGW3UxXSAmJiBGW3UxXS5oYXNSZW5kZXJlZCAmJiBGW3UxXS5kZXN0cm95KCksIGsoQTEsIGwxLCB0aGlzLmluZGV4KSwgQTEuaW5uZXJIVE1MID0gZi5lbXB0eUhUTUwsIGExLnNraXBDbG9uZSB8fCBBMS5vZmZzZXRXaWR0aCB8fCB0aGlzLnRlbXBvcmFyeURpc3BsYXkoKSwgdGhpcy5nZXRDaGFydFNpemUoKTtcbiAgICAgICAgICBsZXQgaDEgPSB0aGlzLmNoYXJ0SGVpZ2h0LCBDMSA9IHRoaXMuY2hhcnRXaWR0aDtcbiAgICAgICAgICBOKEExLCB7IG92ZXJmbG93OiBcImhpZGRlblwiIH0pLCB0aGlzLnN0eWxlZE1vZGUgfHwgKE0xID0gXyh7IHBvc2l0aW9uOiBcInJlbGF0aXZlXCIsIG92ZXJmbG93OiBcImhpZGRlblwiLCB3aWR0aDogQzEgKyBcInB4XCIsIGhlaWdodDogaDEgKyBcInB4XCIsIHRleHRBbGlnbjogXCJsZWZ0XCIsIGxpbmVIZWlnaHQ6IFwibm9ybWFsXCIsIHpJbmRleDogMCwgXCItd2Via2l0LXRhcC1oaWdobGlnaHQtY29sb3JcIjogXCJyZ2JhKDAsMCwwLDApXCIsIHVzZXJTZWxlY3Q6IFwibm9uZVwiLCBcInRvdWNoLWFjdGlvblwiOiBcIm1hbmlwdWxhdGlvblwiLCBvdXRsaW5lOiBcIm5vbmVcIiwgcGFkZGluZzogXCIwcHhcIiB9LCBhMS5zdHlsZSB8fCB7fSkpO1xuICAgICAgICAgIGxldCBxMSA9IHgoXCJkaXZcIiwgeyBpZDogcDEgfSwgTTEsIEExKTtcbiAgICAgICAgICB0aGlzLmNvbnRhaW5lciA9IHExLCB0aGlzLmdldENoYXJ0U2l6ZSgpLCBDMSA9PT0gdGhpcy5jaGFydFdpZHRoIHx8IChDMSA9IHRoaXMuY2hhcnRXaWR0aCwgdGhpcy5zdHlsZWRNb2RlIHx8IE4ocTEsIHsgd2lkdGg6IFAoKFIxID0gYTEuc3R5bGUpID09IG51bGwgPyB2b2lkIDAgOiBSMS53aWR0aCwgQzEgKyBcInB4XCIpIH0pKSwgdGhpcy5jb250YWluZXJCb3ggPSB0aGlzLmdldENvbnRhaW5lckJveCgpLCB0aGlzLl9jdXJzb3IgPSBxMS5zdHlsZS5jdXJzb3I7XG4gICAgICAgICAgbGV0IFcxID0gYTEucmVuZGVyZXIgfHwgIUggPyBkLmdldFJlbmRlcmVyVHlwZShhMS5yZW5kZXJlcikgOiB1O1xuICAgICAgICAgIGlmICh0aGlzLnJlbmRlcmVyID0gbmV3IFcxKHExLCBDMSwgaDEsIHZvaWQgMCwgYTEuZm9yRXhwb3J0LCBjMS5leHBvcnRpbmcgJiYgYzEuZXhwb3J0aW5nLmFsbG93SFRNTCwgdGhpcy5zdHlsZWRNb2RlKSwgdih2b2lkIDAsIHRoaXMpLCB0aGlzLnNldENsYXNzTmFtZShhMS5jbGFzc05hbWUpLCB0aGlzLnN0eWxlZE1vZGUpXG4gICAgICAgICAgICBmb3IgKGxldCBrMSBpbiBjMS5kZWZzKVxuICAgICAgICAgICAgICB0aGlzLnJlbmRlcmVyLmRlZmluaXRpb24oYzEuZGVmc1trMV0pO1xuICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgIHRoaXMucmVuZGVyZXIuc2V0U3R5bGUoYTEuc3R5bGUpO1xuICAgICAgICAgIHRoaXMucmVuZGVyZXIuY2hhcnRJbmRleCA9IHRoaXMuaW5kZXgsIEsodGhpcywgXCJhZnRlckdldENvbnRhaW5lclwiKTtcbiAgICAgICAgfVxuICAgICAgICBnZXRNYXJnaW5zKGMxKSB7XG4gICAgICAgICAgbGV0IHsgc3BhY2luZzogYTEsIG1hcmdpbjogbDEsIHRpdGxlT2Zmc2V0OiBwMSB9ID0gdGhpcztcbiAgICAgICAgICB0aGlzLnJlc2V0TWFyZ2lucygpLCBwMVswXSAmJiAhVihsMVswXSkgJiYgKHRoaXMucGxvdFRvcCA9IE1hdGgubWF4KHRoaXMucGxvdFRvcCwgcDFbMF0gKyBhMVswXSkpLCBwMVsyXSAmJiAhVihsMVsyXSkgJiYgKHRoaXMubWFyZ2luQm90dG9tID0gTWF0aC5tYXgodGhpcy5tYXJnaW5Cb3R0b20sIHAxWzJdICsgYTFbMl0pKSwgdGhpcy5sZWdlbmQgJiYgdGhpcy5sZWdlbmQuZGlzcGxheSAmJiB0aGlzLmxlZ2VuZC5hZGp1c3RNYXJnaW5zKGwxLCBhMSksIEsodGhpcywgXCJnZXRNYXJnaW5zXCIpLCBjMSB8fCB0aGlzLmdldEF4aXNNYXJnaW5zKCk7XG4gICAgICAgIH1cbiAgICAgICAgZ2V0QXhpc01hcmdpbnMoKSB7XG4gICAgICAgICAgbGV0IGMxID0gdGhpcywgYTEgPSBjMS5heGlzT2Zmc2V0ID0gWzAsIDAsIDAsIDBdLCBsMSA9IGMxLmNvbG9yQXhpcywgcDEgPSBjMS5tYXJnaW4sIE0xID0gZnVuY3Rpb24oQTEpIHtcbiAgICAgICAgICAgIEExLmZvckVhY2goZnVuY3Rpb24odTEpIHtcbiAgICAgICAgICAgICAgdTEudmlzaWJsZSAmJiB1MS5nZXRPZmZzZXQoKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH07XG4gICAgICAgICAgYzEuaGFzQ2FydGVzaWFuU2VyaWVzID8gTTEoYzEuYXhlcykgOiBsMSAmJiBsMS5sZW5ndGggJiYgTTEobDEpLCB3LmZvckVhY2goZnVuY3Rpb24oQTEsIHUxKSB7XG4gICAgICAgICAgICBWKHAxW3UxXSkgfHwgKGMxW0ExXSArPSBhMVt1MV0pO1xuICAgICAgICAgIH0pLCBjMS5zZXRDaGFydFNpemUoKTtcbiAgICAgICAgfVxuICAgICAgICBnZXRPcHRpb25zKCkge1xuICAgICAgICAgIHJldHVybiBSKHRoaXMudXNlck9wdGlvbnMsIEwpO1xuICAgICAgICB9XG4gICAgICAgIHJlZmxvdyhjMSkge1xuICAgICAgICAgIHZhciBNMTtcbiAgICAgICAgICBsZXQgYTEgPSB0aGlzLCBsMSA9IGExLmNvbnRhaW5lckJveCwgcDEgPSBhMS5nZXRDb250YWluZXJCb3goKTtcbiAgICAgICAgICAoTTEgPSBhMS5wb2ludGVyKSA9PSBudWxsIHx8IGRlbGV0ZSBNMS5jaGFydFBvc2l0aW9uLCAhYTEuaXNQcmludGluZyAmJiAhYTEuaXNSZXNpemluZyAmJiBsMSAmJiBwMS53aWR0aCAmJiAoKHAxLndpZHRoICE9PSBsMS53aWR0aCB8fCBwMS5oZWlnaHQgIT09IGwxLmhlaWdodCkgJiYgKHouY2xlYXJUaW1lb3V0KGExLnJlZmxvd1RpbWVvdXQpLCBhMS5yZWZsb3dUaW1lb3V0ID0gbjEoZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICBhMS5jb250YWluZXIgJiYgYTEuc2V0U2l6ZSh2b2lkIDAsIHZvaWQgMCwgITEpO1xuICAgICAgICAgIH0sIGMxID8gMTAwIDogMCkpLCBhMS5jb250YWluZXJCb3ggPSBwMSk7XG4gICAgICAgIH1cbiAgICAgICAgc2V0UmVmbG93KCkge1xuICAgICAgICAgIGxldCBjMSA9IHRoaXMsIGExID0gKGwxKSA9PiB7XG4gICAgICAgICAgICB2YXIgcDE7XG4gICAgICAgICAgICAocDEgPSBjMS5vcHRpb25zKSAhPSBudWxsICYmIHAxLmNoYXJ0LnJlZmxvdyAmJiBjMS5oYXNMb2FkZWQgJiYgYzEucmVmbG93KGwxKTtcbiAgICAgICAgICB9O1xuICAgICAgICAgIGlmICh0eXBlb2YgUmVzaXplT2JzZXJ2ZXIgPT0gXCJmdW5jdGlvblwiKVxuICAgICAgICAgICAgbmV3IFJlc2l6ZU9ic2VydmVyKGExKS5vYnNlcnZlKGMxLnJlbmRlclRvKTtcbiAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGxldCBsMSA9IG0oQywgXCJyZXNpemVcIiwgYTEpO1xuICAgICAgICAgICAgbSh0aGlzLCBcImRlc3Ryb3lcIiwgbDEpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBzZXRTaXplKGMxLCBhMSwgbDEpIHtcbiAgICAgICAgICBsZXQgcDEgPSB0aGlzLCBNMSA9IHAxLnJlbmRlcmVyO1xuICAgICAgICAgIHAxLmlzUmVzaXppbmcgKz0gMSwgdihsMSwgcDEpO1xuICAgICAgICAgIGxldCBBMSA9IE0xLmdsb2JhbEFuaW1hdGlvbjtcbiAgICAgICAgICBwMS5vbGRDaGFydEhlaWdodCA9IHAxLmNoYXJ0SGVpZ2h0LCBwMS5vbGRDaGFydFdpZHRoID0gcDEuY2hhcnRXaWR0aCwgYzEgIT09IHZvaWQgMCAmJiAocDEub3B0aW9ucy5jaGFydC53aWR0aCA9IGMxKSwgYTEgIT09IHZvaWQgMCAmJiAocDEub3B0aW9ucy5jaGFydC5oZWlnaHQgPSBhMSksIHAxLmdldENoYXJ0U2l6ZSgpO1xuICAgICAgICAgIGxldCB7IGNoYXJ0V2lkdGg6IHUxLCBjaGFydEhlaWdodDogaDEsIHNjcm9sbGFibGVQaXhlbHNYOiBDMSA9IDAsIHNjcm9sbGFibGVQaXhlbHNZOiBxMSA9IDAgfSA9IHAxO1xuICAgICAgICAgIChwMS5pc0RpcnR5Qm94IHx8IHUxICE9PSBwMS5vbGRDaGFydFdpZHRoIHx8IGgxICE9PSBwMS5vbGRDaGFydEhlaWdodCkgJiYgKHAxLnN0eWxlZE1vZGUgfHwgKEExID8gaCA6IE4pKHAxLmNvbnRhaW5lciwgeyB3aWR0aDogYCR7dTEgKyBDMX1weGAsIGhlaWdodDogYCR7aDEgKyBxMX1weGAgfSwgQTEpLCBwMS5zZXRDaGFydFNpemUoITApLCBNMS5zZXRTaXplKHUxLCBoMSwgQTEpLCBwMS5heGVzLmZvckVhY2goZnVuY3Rpb24oVzEpIHtcbiAgICAgICAgICAgIFcxLmlzRGlydHkgPSAhMCwgVzEuc2V0U2NhbGUoKTtcbiAgICAgICAgICB9KSwgcDEuaXNEaXJ0eUxlZ2VuZCA9ICEwLCBwMS5pc0RpcnR5Qm94ID0gITAsIHAxLmxheU91dFRpdGxlcygpLCBwMS5nZXRNYXJnaW5zKCksIHAxLnJlZHJhdyhBMSksIHAxLm9sZENoYXJ0SGVpZ2h0ID0gdm9pZCAwLCBLKHAxLCBcInJlc2l6ZVwiKSwgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICBwMSAmJiBLKHAxLCBcImVuZFJlc2l6ZVwiKTtcbiAgICAgICAgICB9LCBnKEExKS5kdXJhdGlvbikpLCBwMS5pc1Jlc2l6aW5nIC09IDE7XG4gICAgICAgIH1cbiAgICAgICAgc2V0Q2hhcnRTaXplKGMxKSB7XG4gICAgICAgICAgbGV0IGExLCBsMSwgcDEsIE0xLCB7IGNoYXJ0SGVpZ2h0OiBBMSwgY2hhcnRXaWR0aDogdTEsIGludmVydGVkOiBoMSwgc3BhY2luZzogQzEsIHJlbmRlcmVyOiBxMSB9ID0gdGhpcywgVzEgPSB0aGlzLmNsaXBPZmZzZXQsIFIxID0gTWF0aFtoMSA/IFwiZmxvb3JcIiA6IFwicm91bmRcIl07XG4gICAgICAgICAgdGhpcy5wbG90TGVmdCA9IGExID0gTWF0aC5yb3VuZCh0aGlzLnBsb3RMZWZ0KSwgdGhpcy5wbG90VG9wID0gbDEgPSBNYXRoLnJvdW5kKHRoaXMucGxvdFRvcCksIHRoaXMucGxvdFdpZHRoID0gcDEgPSBNYXRoLm1heCgwLCBNYXRoLnJvdW5kKHUxIC0gYTEgLSB0aGlzLm1hcmdpblJpZ2h0KSksIHRoaXMucGxvdEhlaWdodCA9IE0xID0gTWF0aC5tYXgoMCwgTWF0aC5yb3VuZChBMSAtIGwxIC0gdGhpcy5tYXJnaW5Cb3R0b20pKSwgdGhpcy5wbG90U2l6ZVggPSBoMSA/IE0xIDogcDEsIHRoaXMucGxvdFNpemVZID0gaDEgPyBwMSA6IE0xLCB0aGlzLnNwYWNpbmdCb3ggPSBxMS5zcGFjaW5nQm94ID0geyB4OiBDMVszXSwgeTogQzFbMF0sIHdpZHRoOiB1MSAtIEMxWzNdIC0gQzFbMV0sIGhlaWdodDogQTEgLSBDMVswXSAtIEMxWzJdIH0sIHRoaXMucGxvdEJveCA9IHExLnBsb3RCb3ggPSB7IHg6IGExLCB5OiBsMSwgd2lkdGg6IHAxLCBoZWlnaHQ6IE0xIH0sIFcxICYmICh0aGlzLmNsaXBCb3ggPSB7IHg6IFIxKFcxWzNdKSwgeTogUjEoVzFbMF0pLCB3aWR0aDogUjEodGhpcy5wbG90U2l6ZVggLSBXMVsxXSAtIFcxWzNdKSwgaGVpZ2h0OiBSMSh0aGlzLnBsb3RTaXplWSAtIFcxWzBdIC0gVzFbMl0pIH0pLCBjMSB8fCAodGhpcy5heGVzLmZvckVhY2goZnVuY3Rpb24oazEpIHtcbiAgICAgICAgICAgIGsxLnNldEF4aXNTaXplKCksIGsxLnNldEF4aXNUcmFuc2xhdGlvbigpO1xuICAgICAgICAgIH0pLCBxMS5hbGlnbkVsZW1lbnRzKCkpLCBLKHRoaXMsIFwiYWZ0ZXJTZXRDaGFydFNpemVcIiwgeyBza2lwQXhlczogYzEgfSk7XG4gICAgICAgIH1cbiAgICAgICAgcmVzZXRNYXJnaW5zKCkge1xuICAgICAgICAgIEsodGhpcywgXCJyZXNldE1hcmdpbnNcIik7XG4gICAgICAgICAgbGV0IGMxID0gdGhpcywgYTEgPSBjMS5vcHRpb25zLmNoYXJ0LCBsMSA9IGExLnBsb3RCb3JkZXJXaWR0aCB8fCAwLCBwMSA9IGwxIC8gMjtcbiAgICAgICAgICBbXCJtYXJnaW5cIiwgXCJzcGFjaW5nXCJdLmZvckVhY2goZnVuY3Rpb24oTTEpIHtcbiAgICAgICAgICAgIGxldCBBMSA9IGExW00xXSwgdTEgPSBHKEExKSA/IEExIDogW0ExLCBBMSwgQTEsIEExXTtcbiAgICAgICAgICAgIFtcIlRvcFwiLCBcIlJpZ2h0XCIsIFwiQm90dG9tXCIsIFwiTGVmdFwiXS5mb3JFYWNoKGZ1bmN0aW9uKGgxLCBDMSkge1xuICAgICAgICAgICAgICBjMVtNMV1bQzFdID0gUChhMVtNMSArIGgxXSwgdTFbQzFdKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH0pLCB3LmZvckVhY2goZnVuY3Rpb24oTTEsIEExKSB7XG4gICAgICAgICAgICBjMVtNMV0gPSBQKGMxLm1hcmdpbltBMV0sIGMxLnNwYWNpbmdbQTFdKTtcbiAgICAgICAgICB9KSwgYzEuYXhpc09mZnNldCA9IFswLCAwLCAwLCAwXSwgYzEuY2xpcE9mZnNldCA9IFtwMSwgcDEsIHAxLCBwMV0sIGMxLnBsb3RCb3JkZXJXaWR0aCA9IGwxO1xuICAgICAgICB9XG4gICAgICAgIGRyYXdDaGFydEJveCgpIHtcbiAgICAgICAgICBsZXQgYzEgPSB0aGlzLm9wdGlvbnMuY2hhcnQsIGExID0gdGhpcy5yZW5kZXJlciwgbDEgPSB0aGlzLmNoYXJ0V2lkdGgsIHAxID0gdGhpcy5jaGFydEhlaWdodCwgTTEgPSB0aGlzLnN0eWxlZE1vZGUsIEExID0gdGhpcy5wbG90QkdJbWFnZSwgdTEgPSBjMS5iYWNrZ3JvdW5kQ29sb3IsIGgxID0gYzEucGxvdEJhY2tncm91bmRDb2xvciwgQzEgPSBjMS5wbG90QmFja2dyb3VuZEltYWdlLCBxMSA9IHRoaXMucGxvdExlZnQsIFcxID0gdGhpcy5wbG90VG9wLCBSMSA9IHRoaXMucGxvdFdpZHRoLCBrMSA9IHRoaXMucGxvdEhlaWdodCwgTjEgPSB0aGlzLnBsb3RCb3gsIHYxID0gdGhpcy5jbGlwUmVjdCwgUzEgPSB0aGlzLmNsaXBCb3gsIEQxID0gdGhpcy5jaGFydEJhY2tncm91bmQsIEYxID0gdGhpcy5wbG90QmFja2dyb3VuZCwgVTEgPSB0aGlzLnBsb3RCb3JkZXIsIGgwLCBPMCwgdzEsIGcxID0gXCJhbmltYXRlXCI7XG4gICAgICAgICAgRDEgfHwgKHRoaXMuY2hhcnRCYWNrZ3JvdW5kID0gRDEgPSBhMS5yZWN0KCkuYWRkQ2xhc3MoXCJoaWdoY2hhcnRzLWJhY2tncm91bmRcIikuYWRkKCksIGcxID0gXCJhdHRyXCIpLCBNMSA/IGgwID0gTzAgPSBEMS5zdHJva2VXaWR0aCgpIDogKE8wID0gKGgwID0gYzEuYm9yZGVyV2lkdGggfHwgMCkgKyAoYzEuc2hhZG93ID8gOCA6IDApLCB3MSA9IHsgZmlsbDogdTEgfHwgXCJub25lXCIgfSwgKGgwIHx8IEQxW1wic3Ryb2tlLXdpZHRoXCJdKSAmJiAodzEuc3Ryb2tlID0gYzEuYm9yZGVyQ29sb3IsIHcxW1wic3Ryb2tlLXdpZHRoXCJdID0gaDApLCBEMS5hdHRyKHcxKS5zaGFkb3coYzEuc2hhZG93KSksIEQxW2cxXSh7IHg6IE8wIC8gMiwgeTogTzAgLyAyLCB3aWR0aDogbDEgLSBPMCAtIGgwICUgMiwgaGVpZ2h0OiBwMSAtIE8wIC0gaDAgJSAyLCByOiBjMS5ib3JkZXJSYWRpdXMgfSksIGcxID0gXCJhbmltYXRlXCIsIEYxIHx8IChnMSA9IFwiYXR0clwiLCB0aGlzLnBsb3RCYWNrZ3JvdW5kID0gRjEgPSBhMS5yZWN0KCkuYWRkQ2xhc3MoXCJoaWdoY2hhcnRzLXBsb3QtYmFja2dyb3VuZFwiKS5hZGQoKSksIEYxW2cxXShOMSksICFNMSAmJiAoRjEuYXR0cih7IGZpbGw6IGgxIHx8IFwibm9uZVwiIH0pLnNoYWRvdyhjMS5wbG90U2hhZG93KSwgQzEgJiYgKEExID8gKEMxICE9PSBBMS5hdHRyKFwiaHJlZlwiKSAmJiBBMS5hdHRyKFwiaHJlZlwiLCBDMSksIEExLmFuaW1hdGUoTjEpKSA6IHRoaXMucGxvdEJHSW1hZ2UgPSBhMS5pbWFnZShDMSwgcTEsIFcxLCBSMSwgazEpLmFkZCgpKSksIHYxID8gdjEuYW5pbWF0ZSh7IHdpZHRoOiBTMS53aWR0aCwgaGVpZ2h0OiBTMS5oZWlnaHQgfSkgOiB0aGlzLmNsaXBSZWN0ID0gYTEuY2xpcFJlY3QoUzEpLCBnMSA9IFwiYW5pbWF0ZVwiLCBVMSB8fCAoZzEgPSBcImF0dHJcIiwgdGhpcy5wbG90Qm9yZGVyID0gVTEgPSBhMS5yZWN0KCkuYWRkQ2xhc3MoXCJoaWdoY2hhcnRzLXBsb3QtYm9yZGVyXCIpLmF0dHIoeyB6SW5kZXg6IDEgfSkuYWRkKCkpLCBNMSB8fCBVMS5hdHRyKHsgc3Ryb2tlOiBjMS5wbG90Qm9yZGVyQ29sb3IsIFwic3Ryb2tlLXdpZHRoXCI6IGMxLnBsb3RCb3JkZXJXaWR0aCB8fCAwLCBmaWxsOiBcIm5vbmVcIiB9KSwgVTFbZzFdKFUxLmNyaXNwKHsgeDogcTEsIHk6IFcxLCB3aWR0aDogUjEsIGhlaWdodDogazEgfSwgLVUxLnN0cm9rZVdpZHRoKCkpKSwgdGhpcy5pc0RpcnR5Qm94ID0gITEsIEsodGhpcywgXCJhZnRlckRyYXdDaGFydEJveFwiKTtcbiAgICAgICAgfVxuICAgICAgICBwcm9wRnJvbVNlcmllcygpIHtcbiAgICAgICAgICBsZXQgYzEsIGExLCBsMSwgcDEgPSB0aGlzLCBNMSA9IHAxLm9wdGlvbnMuY2hhcnQsIEExID0gcDEub3B0aW9ucy5zZXJpZXM7XG4gICAgICAgICAgW1wiaW52ZXJ0ZWRcIiwgXCJhbmd1bGFyXCIsIFwicG9sYXJcIl0uZm9yRWFjaChmdW5jdGlvbih1MSkge1xuICAgICAgICAgICAgZm9yIChhMSA9IHFbTTEudHlwZV0sIGwxID0gTTFbdTFdIHx8IGExICYmIGExLnByb3RvdHlwZVt1MV0sIGMxID0gQTEgJiYgQTEubGVuZ3RoOyAhbDEgJiYgYzEtLTsgKVxuICAgICAgICAgICAgICAoYTEgPSBxW0ExW2MxXS50eXBlXSkgJiYgYTEucHJvdG90eXBlW3UxXSAmJiAobDEgPSAhMCk7XG4gICAgICAgICAgICBwMVt1MV0gPSBsMTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBsaW5rU2VyaWVzKGMxKSB7XG4gICAgICAgICAgbGV0IGExID0gdGhpcywgbDEgPSBhMS5zZXJpZXM7XG4gICAgICAgICAgbDEuZm9yRWFjaChmdW5jdGlvbihwMSkge1xuICAgICAgICAgICAgcDEubGlua2VkU2VyaWVzLmxlbmd0aCA9IDA7XG4gICAgICAgICAgfSksIGwxLmZvckVhY2goZnVuY3Rpb24ocDEpIHtcbiAgICAgICAgICAgIGxldCB7IGxpbmtlZFRvOiBNMSB9ID0gcDEub3B0aW9ucztcbiAgICAgICAgICAgIGlmIChKKE0xKSkge1xuICAgICAgICAgICAgICBsZXQgQTE7XG4gICAgICAgICAgICAgIChBMSA9IE0xID09PSBcIjpwcmV2aW91c1wiID8gYTEuc2VyaWVzW3AxLmluZGV4IC0gMV0gOiBhMS5nZXQoTTEpKSAmJiBBMS5saW5rZWRQYXJlbnQgIT09IHAxICYmIChBMS5saW5rZWRTZXJpZXMucHVzaChwMSksIHAxLmxpbmtlZFBhcmVudCA9IEExLCBBMS5lbmFibGVkRGF0YVNvcnRpbmcgJiYgcDEuc2V0RGF0YVNvcnRpbmdPcHRpb25zKCksIHAxLnZpc2libGUgPSBQKHAxLm9wdGlvbnMudmlzaWJsZSwgQTEub3B0aW9ucy52aXNpYmxlLCBwMS52aXNpYmxlKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSksIEsodGhpcywgXCJhZnRlckxpbmtTZXJpZXNcIiwgeyBpc1VwZGF0aW5nOiBjMSB9KTtcbiAgICAgICAgfVxuICAgICAgICByZW5kZXJTZXJpZXMoKSB7XG4gICAgICAgICAgdGhpcy5zZXJpZXMuZm9yRWFjaChmdW5jdGlvbihjMSkge1xuICAgICAgICAgICAgYzEudHJhbnNsYXRlKCksIGMxLnJlbmRlcigpO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIHJlbmRlcigpIHtcbiAgICAgICAgICB2YXIgcTE7XG4gICAgICAgICAgbGV0IGMxID0gdGhpcy5heGVzLCBhMSA9IHRoaXMuY29sb3JBeGlzLCBsMSA9IHRoaXMucmVuZGVyZXIsIHAxID0gdGhpcy5vcHRpb25zLmNoYXJ0LmF4aXNMYXlvdXRSdW5zIHx8IDIsIE0xID0gKFcxKSA9PiB7XG4gICAgICAgICAgICBXMS5mb3JFYWNoKChSMSkgPT4ge1xuICAgICAgICAgICAgICBSMS52aXNpYmxlICYmIFIxLnJlbmRlcigpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfSwgQTEgPSAwLCB1MSA9ICEwLCBoMSwgQzEgPSAwO1xuICAgICAgICAgIGZvciAobGV0IFcxIG9mICh0aGlzLnNldFRpdGxlKCksIEsodGhpcywgXCJiZWZvcmVNYXJnaW5zXCIpLCAocTEgPSB0aGlzLmdldFN0YWNrcykgPT0gbnVsbCB8fCBxMS5jYWxsKHRoaXMpLCB0aGlzLmdldE1hcmdpbnMoITApLCB0aGlzLnNldENoYXJ0U2l6ZSgpLCBjMSkpIHtcbiAgICAgICAgICAgIGxldCB7IG9wdGlvbnM6IFIxIH0gPSBXMSwgeyBsYWJlbHM6IGsxIH0gPSBSMTtcbiAgICAgICAgICAgIGlmICh0aGlzLmhhc0NhcnRlc2lhblNlcmllcyAmJiBXMS5ob3JpeiAmJiBXMS52aXNpYmxlICYmIGsxLmVuYWJsZWQgJiYgVzEuc2VyaWVzLmxlbmd0aCAmJiBXMS5jb2xsICE9PSBcImNvbG9yQXhpc1wiICYmICF0aGlzLnBvbGFyKSB7XG4gICAgICAgICAgICAgIEExID0gUjEudGlja0xlbmd0aCwgVzEuY3JlYXRlR3JvdXBzKCk7XG4gICAgICAgICAgICAgIGxldCBOMSA9IG5ldyBPKFcxLCAwLCBcIlwiLCAhMCksIHYxID0gTjEuY3JlYXRlTGFiZWwoXCJ4XCIsIGsxKTtcbiAgICAgICAgICAgICAgaWYgKE4xLmRlc3Ryb3koKSwgdjEgJiYgUChrMS5yZXNlcnZlU3BhY2UsICFEKFIxLmNyb3NzaW5nKSkgJiYgKEExID0gdjEuZ2V0QkJveCgpLmhlaWdodCArIGsxLmRpc3RhbmNlICsgTWF0aC5tYXgoUjEub2Zmc2V0IHx8IDAsIDApKSwgQTEpIHtcbiAgICAgICAgICAgICAgICB2MSA9PSBudWxsIHx8IHYxLmRlc3Ryb3koKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICBmb3IgKHRoaXMucGxvdEhlaWdodCA9IE1hdGgubWF4KHRoaXMucGxvdEhlaWdodCAtIEExLCAwKTsgKHUxIHx8IGgxIHx8IHAxID4gMSkgJiYgQzEgPCBwMTsgKSB7XG4gICAgICAgICAgICBsZXQgVzEgPSB0aGlzLnBsb3RXaWR0aCwgUjEgPSB0aGlzLnBsb3RIZWlnaHQ7XG4gICAgICAgICAgICBmb3IgKGxldCBrMSBvZiBjMSlcbiAgICAgICAgICAgICAgQzEgPT09IDAgPyBrMS5zZXRTY2FsZSgpIDogKGsxLmhvcml6ICYmIHUxIHx8ICFrMS5ob3JpeiAmJiBoMSkgJiYgazEuc2V0VGlja0ludGVydmFsKCEwKTtcbiAgICAgICAgICAgIEMxID09PSAwID8gdGhpcy5nZXRBeGlzTWFyZ2lucygpIDogdGhpcy5nZXRNYXJnaW5zKCksIHUxID0gVzEgLyB0aGlzLnBsb3RXaWR0aCA+IChDMSA/IDEgOiAxLjEpLCBoMSA9IFIxIC8gdGhpcy5wbG90SGVpZ2h0ID4gKEMxID8gMSA6IDEuMDUpLCBDMSsrO1xuICAgICAgICAgIH1cbiAgICAgICAgICB0aGlzLmRyYXdDaGFydEJveCgpLCB0aGlzLmhhc0NhcnRlc2lhblNlcmllcyA/IE0xKGMxKSA6IGExICYmIGExLmxlbmd0aCAmJiBNMShhMSksIHRoaXMuc2VyaWVzR3JvdXAgfHwgKHRoaXMuc2VyaWVzR3JvdXAgPSBsMS5nKFwic2VyaWVzLWdyb3VwXCIpLmF0dHIoeyB6SW5kZXg6IDMgfSkuc2hhZG93KHRoaXMub3B0aW9ucy5jaGFydC5zZXJpZXNHcm91cFNoYWRvdykuYWRkKCkpLCB0aGlzLnJlbmRlclNlcmllcygpLCB0aGlzLmFkZENyZWRpdHMoKSwgdGhpcy5zZXRSZXNwb25zaXZlICYmIHRoaXMuc2V0UmVzcG9uc2l2ZSgpLCB0aGlzLmhhc1JlbmRlcmVkID0gITA7XG4gICAgICAgIH1cbiAgICAgICAgYWRkQ3JlZGl0cyhjMSkge1xuICAgICAgICAgIGxldCBhMSA9IHRoaXMsIGwxID0gUyghMCwgdGhpcy5vcHRpb25zLmNyZWRpdHMsIGMxKTtcbiAgICAgICAgICBsMS5lbmFibGVkICYmICF0aGlzLmNyZWRpdHMgJiYgKHRoaXMuY3JlZGl0cyA9IHRoaXMucmVuZGVyZXIudGV4dChsMS50ZXh0ICsgKHRoaXMubWFwQ3JlZGl0cyB8fCBcIlwiKSwgMCwgMCkuYWRkQ2xhc3MoXCJoaWdoY2hhcnRzLWNyZWRpdHNcIikub24oXCJjbGlja1wiLCBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgIGwxLmhyZWYgJiYgKEMubG9jYXRpb24uaHJlZiA9IGwxLmhyZWYpO1xuICAgICAgICAgIH0pLmF0dHIoeyBhbGlnbjogbDEucG9zaXRpb24uYWxpZ24sIHpJbmRleDogOCB9KSwgYTEuc3R5bGVkTW9kZSB8fCB0aGlzLmNyZWRpdHMuY3NzKGwxLnN0eWxlKSwgdGhpcy5jcmVkaXRzLmFkZCgpLmFsaWduKGwxLnBvc2l0aW9uKSwgdGhpcy5jcmVkaXRzLnVwZGF0ZSA9IGZ1bmN0aW9uKHAxKSB7XG4gICAgICAgICAgICBhMS5jcmVkaXRzID0gYTEuY3JlZGl0cy5kZXN0cm95KCksIGExLmFkZENyZWRpdHMocDEpO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIGRlc3Ryb3koKSB7XG4gICAgICAgICAgbGV0IGMxLCBhMSA9IHRoaXMsIGwxID0gYTEuYXhlcywgcDEgPSBhMS5zZXJpZXMsIE0xID0gYTEuY29udGFpbmVyLCBBMSA9IE0xICYmIE0xLnBhcmVudE5vZGU7XG4gICAgICAgICAgZm9yIChLKGExLCBcImRlc3Ryb3lcIiksIGExLnJlbmRlcmVyLmZvckV4cG9ydCA/IGooRiwgYTEpIDogRlthMS5pbmRleF0gPSB2b2lkIDAsIHAuY2hhcnRDb3VudC0tLCBhMS5yZW5kZXJUby5yZW1vdmVBdHRyaWJ1dGUoXCJkYXRhLWhpZ2hjaGFydHMtY2hhcnRcIiksIHQxKGExKSwgYzEgPSBsMS5sZW5ndGg7IGMxLS07IClcbiAgICAgICAgICAgIGwxW2MxXSA9IGwxW2MxXS5kZXN0cm95KCk7XG4gICAgICAgICAgZm9yICh0aGlzLnNjcm9sbGVyICYmIHRoaXMuc2Nyb2xsZXIuZGVzdHJveSAmJiB0aGlzLnNjcm9sbGVyLmRlc3Ryb3koKSwgYzEgPSBwMS5sZW5ndGg7IGMxLS07IClcbiAgICAgICAgICAgIHAxW2MxXSA9IHAxW2MxXS5kZXN0cm95KCk7XG4gICAgICAgICAgW1widGl0bGVcIiwgXCJzdWJ0aXRsZVwiLCBcImNoYXJ0QmFja2dyb3VuZFwiLCBcInBsb3RCYWNrZ3JvdW5kXCIsIFwicGxvdEJHSW1hZ2VcIiwgXCJwbG90Qm9yZGVyXCIsIFwic2VyaWVzR3JvdXBcIiwgXCJjbGlwUmVjdFwiLCBcImNyZWRpdHNcIiwgXCJwb2ludGVyXCIsIFwicmFuZ2VTZWxlY3RvclwiLCBcImxlZ2VuZFwiLCBcInJlc2V0Wm9vbUJ1dHRvblwiLCBcInRvb2x0aXBcIiwgXCJyZW5kZXJlclwiXS5mb3JFYWNoKGZ1bmN0aW9uKHUxKSB7XG4gICAgICAgICAgICBsZXQgaDEgPSBhMVt1MV07XG4gICAgICAgICAgICBoMSAmJiBoMS5kZXN0cm95ICYmIChhMVt1MV0gPSBoMS5kZXN0cm95KCkpO1xuICAgICAgICAgIH0pLCBNMSAmJiAoTTEuaW5uZXJIVE1MID0gZi5lbXB0eUhUTUwsIHQxKE0xKSwgQTEgJiYgSShNMSkpLCBXKGExLCBmdW5jdGlvbih1MSwgaDEpIHtcbiAgICAgICAgICAgIGRlbGV0ZSBhMVtoMV07XG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgZmlyc3RSZW5kZXIoKSB7XG4gICAgICAgICAgdmFyIHAxO1xuICAgICAgICAgIGxldCBjMSA9IHRoaXMsIGExID0gYzEub3B0aW9ucztcbiAgICAgICAgICBjMS5nZXRDb250YWluZXIoKSwgYzEucmVzZXRNYXJnaW5zKCksIGMxLnNldENoYXJ0U2l6ZSgpLCBjMS5wcm9wRnJvbVNlcmllcygpLCBjMS5nZXRBeGVzKCk7XG4gICAgICAgICAgbGV0IGwxID0gRShhMS5zZXJpZXMpID8gYTEuc2VyaWVzIDogW107XG4gICAgICAgICAgYTEuc2VyaWVzID0gW10sIGwxLmZvckVhY2goZnVuY3Rpb24oTTEpIHtcbiAgICAgICAgICAgIGMxLmluaXRTZXJpZXMoTTEpO1xuICAgICAgICAgIH0pLCBjMS5saW5rU2VyaWVzKCksIGMxLnNldFNvcnRlZERhdGEoKSwgSyhjMSwgXCJiZWZvcmVSZW5kZXJcIiksIGMxLnJlbmRlcigpLCAocDEgPSBjMS5wb2ludGVyKSA9PSBudWxsIHx8IHAxLmdldENoYXJ0UG9zaXRpb24oKSwgYzEucmVuZGVyZXIuaW1nQ291bnQgfHwgYzEuaGFzTG9hZGVkIHx8IGMxLm9ubG9hZCgpLCBjMS50ZW1wb3JhcnlEaXNwbGF5KCEwKTtcbiAgICAgICAgfVxuICAgICAgICBvbmxvYWQoKSB7XG4gICAgICAgICAgdGhpcy5jYWxsYmFja3MuY29uY2F0KFt0aGlzLmNhbGxiYWNrXSkuZm9yRWFjaChmdW5jdGlvbihjMSkge1xuICAgICAgICAgICAgYzEgJiYgdGhpcy5pbmRleCAhPT0gdm9pZCAwICYmIGMxLmFwcGx5KHRoaXMsIFt0aGlzXSk7XG4gICAgICAgICAgfSwgdGhpcyksIEsodGhpcywgXCJsb2FkXCIpLCBLKHRoaXMsIFwicmVuZGVyXCIpLCBWKHRoaXMuaW5kZXgpICYmIHRoaXMuc2V0UmVmbG93KCksIHRoaXMud2FybklmQTExeU1vZHVsZU5vdExvYWRlZCgpLCB0aGlzLmhhc0xvYWRlZCA9ICEwO1xuICAgICAgICB9XG4gICAgICAgIHdhcm5JZkExMXlNb2R1bGVOb3RMb2FkZWQoKSB7XG4gICAgICAgICAgbGV0IHsgb3B0aW9uczogYzEsIHRpdGxlOiBhMSB9ID0gdGhpcztcbiAgICAgICAgICAhYzEgfHwgdGhpcy5hY2Nlc3NpYmlsaXR5IHx8ICh0aGlzLnJlbmRlcmVyLmJveFdyYXBwZXIuYXR0cih7IHJvbGU6IFwiaW1nXCIsIFwiYXJpYS1sYWJlbFwiOiAoYTEgJiYgYTEuZWxlbWVudC50ZXh0Q29udGVudCB8fCBcIlwiKS5yZXBsYWNlKC88L2csIFwiJmx0O1wiKSB9KSwgYzEuYWNjZXNzaWJpbGl0eSAmJiBjMS5hY2Nlc3NpYmlsaXR5LmVuYWJsZWQgPT09ICExIHx8IFUoJ0hpZ2hjaGFydHMgd2FybmluZzogQ29uc2lkZXIgaW5jbHVkaW5nIHRoZSBcImFjY2Vzc2liaWxpdHkuanNcIiBtb2R1bGUgdG8gbWFrZSB5b3VyIGNoYXJ0IG1vcmUgdXNhYmxlIGZvciBwZW9wbGUgd2l0aCBkaXNhYmlsaXRpZXMuIFNldCB0aGUgXCJhY2Nlc3NpYmlsaXR5LmVuYWJsZWRcIiBvcHRpb24gdG8gZmFsc2UgdG8gcmVtb3ZlIHRoaXMgd2FybmluZy4gU2VlIGh0dHBzOi8vd3d3LmhpZ2hjaGFydHMuY29tL2RvY3MvYWNjZXNzaWJpbGl0eS9hY2Nlc3NpYmlsaXR5LW1vZHVsZS4nLCAhMSwgdGhpcykpO1xuICAgICAgICB9XG4gICAgICAgIGFkZFNlcmllcyhjMSwgYTEsIGwxKSB7XG4gICAgICAgICAgbGV0IHAxLCBNMSA9IHRoaXM7XG4gICAgICAgICAgcmV0dXJuIGMxICYmIChhMSA9IFAoYTEsICEwKSwgSyhNMSwgXCJhZGRTZXJpZXNcIiwgeyBvcHRpb25zOiBjMSB9LCBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgIHAxID0gTTEuaW5pdFNlcmllcyhjMSksIE0xLmlzRGlydHlMZWdlbmQgPSAhMCwgTTEubGlua1NlcmllcygpLCBwMS5lbmFibGVkRGF0YVNvcnRpbmcgJiYgcDEuc2V0RGF0YShjMS5kYXRhLCAhMSksIEsoTTEsIFwiYWZ0ZXJBZGRTZXJpZXNcIiwgeyBzZXJpZXM6IHAxIH0pLCBhMSAmJiBNMS5yZWRyYXcobDEpO1xuICAgICAgICAgIH0pKSwgcDE7XG4gICAgICAgIH1cbiAgICAgICAgYWRkQXhpcyhjMSwgYTEsIGwxLCBwMSkge1xuICAgICAgICAgIHJldHVybiB0aGlzLmNyZWF0ZUF4aXMoYTEgPyBcInhBeGlzXCIgOiBcInlBeGlzXCIsIHsgYXhpczogYzEsIHJlZHJhdzogbDEsIGFuaW1hdGlvbjogcDEgfSk7XG4gICAgICAgIH1cbiAgICAgICAgYWRkQ29sb3JBeGlzKGMxLCBhMSwgbDEpIHtcbiAgICAgICAgICByZXR1cm4gdGhpcy5jcmVhdGVBeGlzKFwiY29sb3JBeGlzXCIsIHsgYXhpczogYzEsIHJlZHJhdzogYTEsIGFuaW1hdGlvbjogbDEgfSk7XG4gICAgICAgIH1cbiAgICAgICAgY3JlYXRlQXhpcyhjMSwgYTEpIHtcbiAgICAgICAgICBsZXQgbDEgPSBuZXcgaSh0aGlzLCBhMS5heGlzLCBjMSk7XG4gICAgICAgICAgcmV0dXJuIFAoYTEucmVkcmF3LCAhMCkgJiYgdGhpcy5yZWRyYXcoYTEuYW5pbWF0aW9uKSwgbDE7XG4gICAgICAgIH1cbiAgICAgICAgc2hvd0xvYWRpbmcoYzEpIHtcbiAgICAgICAgICBsZXQgYTEgPSB0aGlzLCBsMSA9IGExLm9wdGlvbnMsIHAxID0gbDEubG9hZGluZywgTTEgPSBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgIEExICYmIE4oQTEsIHsgbGVmdDogYTEucGxvdExlZnQgKyBcInB4XCIsIHRvcDogYTEucGxvdFRvcCArIFwicHhcIiwgd2lkdGg6IGExLnBsb3RXaWR0aCArIFwicHhcIiwgaGVpZ2h0OiBhMS5wbG90SGVpZ2h0ICsgXCJweFwiIH0pO1xuICAgICAgICAgIH0sIEExID0gYTEubG9hZGluZ0RpdiwgdTEgPSBhMS5sb2FkaW5nU3BhbjtcbiAgICAgICAgICBBMSB8fCAoYTEubG9hZGluZ0RpdiA9IEExID0geChcImRpdlwiLCB7IGNsYXNzTmFtZTogXCJoaWdoY2hhcnRzLWxvYWRpbmcgaGlnaGNoYXJ0cy1sb2FkaW5nLWhpZGRlblwiIH0sIG51bGwsIGExLmNvbnRhaW5lcikpLCB1MSB8fCAoYTEubG9hZGluZ1NwYW4gPSB1MSA9IHgoXCJzcGFuXCIsIHsgY2xhc3NOYW1lOiBcImhpZ2hjaGFydHMtbG9hZGluZy1pbm5lclwiIH0sIG51bGwsIEExKSwgbShhMSwgXCJyZWRyYXdcIiwgTTEpKSwgQTEuY2xhc3NOYW1lID0gXCJoaWdoY2hhcnRzLWxvYWRpbmdcIiwgZi5zZXRFbGVtZW50SFRNTCh1MSwgUChjMSwgbDEubGFuZy5sb2FkaW5nLCBcIlwiKSksIGExLnN0eWxlZE1vZGUgfHwgKE4oQTEsIF8ocDEuc3R5bGUsIHsgekluZGV4OiAxMCB9KSksIE4odTEsIHAxLmxhYmVsU3R5bGUpLCBhMS5sb2FkaW5nU2hvd24gfHwgKE4oQTEsIHsgb3BhY2l0eTogMCwgZGlzcGxheTogXCJcIiB9KSwgaChBMSwgeyBvcGFjaXR5OiBwMS5zdHlsZS5vcGFjaXR5IHx8IDAuNSB9LCB7IGR1cmF0aW9uOiBwMS5zaG93RHVyYXRpb24gfHwgMCB9KSkpLCBhMS5sb2FkaW5nU2hvd24gPSAhMCwgTTEoKTtcbiAgICAgICAgfVxuICAgICAgICBoaWRlTG9hZGluZygpIHtcbiAgICAgICAgICBsZXQgYzEgPSB0aGlzLm9wdGlvbnMsIGExID0gdGhpcy5sb2FkaW5nRGl2O1xuICAgICAgICAgIGExICYmIChhMS5jbGFzc05hbWUgPSBcImhpZ2hjaGFydHMtbG9hZGluZyBoaWdoY2hhcnRzLWxvYWRpbmctaGlkZGVuXCIsIHRoaXMuc3R5bGVkTW9kZSB8fCBoKGExLCB7IG9wYWNpdHk6IDAgfSwgeyBkdXJhdGlvbjogYzEubG9hZGluZy5oaWRlRHVyYXRpb24gfHwgMTAwLCBjb21wbGV0ZTogZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICBOKGExLCB7IGRpc3BsYXk6IFwibm9uZVwiIH0pO1xuICAgICAgICAgIH0gfSkpLCB0aGlzLmxvYWRpbmdTaG93biA9ICExO1xuICAgICAgICB9XG4gICAgICAgIHVwZGF0ZShjMSwgYTEsIGwxLCBwMSkge1xuICAgICAgICAgIGxldCBNMSwgQTEsIHUxLCBoMSA9IHRoaXMsIEMxID0geyBjcmVkaXRzOiBcImFkZENyZWRpdHNcIiwgdGl0bGU6IFwic2V0VGl0bGVcIiwgc3VidGl0bGU6IFwic2V0U3VidGl0bGVcIiwgY2FwdGlvbjogXCJzZXRDYXB0aW9uXCIgfSwgcTEgPSBjMS5pc1Jlc3BvbnNpdmVPcHRpb25zLCBXMSA9IFtdO1xuICAgICAgICAgIEsoaDEsIFwidXBkYXRlXCIsIHsgb3B0aW9uczogYzEgfSksIHExIHx8IGgxLnNldFJlc3BvbnNpdmUoITEsICEwKSwgYzEgPSBSKGMxLCBoMS5vcHRpb25zKSwgaDEudXNlck9wdGlvbnMgPSBTKGgxLnVzZXJPcHRpb25zLCBjMSk7XG4gICAgICAgICAgbGV0IFIxID0gYzEuY2hhcnQ7XG4gICAgICAgICAgUjEgJiYgKFMoITAsIGgxLm9wdGlvbnMuY2hhcnQsIFIxKSwgdGhpcy5zZXRab29tT3B0aW9ucygpLCBcImNsYXNzTmFtZVwiIGluIFIxICYmIGgxLnNldENsYXNzTmFtZShSMS5jbGFzc05hbWUpLCAoXCJpbnZlcnRlZFwiIGluIFIxIHx8IFwicG9sYXJcIiBpbiBSMSB8fCBcInR5cGVcIiBpbiBSMSkgJiYgKGgxLnByb3BGcm9tU2VyaWVzKCksIE0xID0gITApLCBcImFsaWduVGlja3NcIiBpbiBSMSAmJiAoTTEgPSAhMCksIFwiZXZlbnRzXCIgaW4gUjEgJiYgWCh0aGlzLCBSMSksIFcoUjEsIGZ1bmN0aW9uKHYxLCBTMSkge1xuICAgICAgICAgICAgaDEucHJvcHNSZXF1aXJlVXBkYXRlU2VyaWVzLmluZGV4T2YoXCJjaGFydC5cIiArIFMxKSAhPT0gLTEgJiYgKEExID0gITApLCBoMS5wcm9wc1JlcXVpcmVEaXJ0eUJveC5pbmRleE9mKFMxKSAhPT0gLTEgJiYgKGgxLmlzRGlydHlCb3ggPSAhMCksIGgxLnByb3BzUmVxdWlyZVJlZmxvdy5pbmRleE9mKFMxKSA9PT0gLTEgfHwgKGgxLmlzRGlydHlCb3ggPSAhMCwgcTEgfHwgKHUxID0gITApKTtcbiAgICAgICAgICB9KSwgIWgxLnN0eWxlZE1vZGUgJiYgUjEuc3R5bGUgJiYgaDEucmVuZGVyZXIuc2V0U3R5bGUoaDEub3B0aW9ucy5jaGFydC5zdHlsZSB8fCB7fSkpLCAhaDEuc3R5bGVkTW9kZSAmJiBjMS5jb2xvcnMgJiYgKHRoaXMub3B0aW9ucy5jb2xvcnMgPSBjMS5jb2xvcnMpLCBjMS50aW1lICYmICh0aGlzLnRpbWUgPT09IHkgJiYgKHRoaXMudGltZSA9IG5ldyBBKGMxLnRpbWUpKSwgUyghMCwgaDEub3B0aW9ucy50aW1lLCBjMS50aW1lKSksIFcoYzEsIGZ1bmN0aW9uKHYxLCBTMSkge1xuICAgICAgICAgICAgaDFbUzFdICYmIHR5cGVvZiBoMVtTMV0udXBkYXRlID09IFwiZnVuY3Rpb25cIiA/IGgxW1MxXS51cGRhdGUodjEsICExKSA6IHR5cGVvZiBoMVtDMVtTMV1dID09IFwiZnVuY3Rpb25cIiA/IGgxW0MxW1MxXV0odjEpIDogUzEgIT09IFwiY29sb3JzXCIgJiYgaDEuY29sbGVjdGlvbnNXaXRoVXBkYXRlLmluZGV4T2YoUzEpID09PSAtMSAmJiBTKCEwLCBoMS5vcHRpb25zW1MxXSwgYzFbUzFdKSwgUzEgIT09IFwiY2hhcnRcIiAmJiBoMS5wcm9wc1JlcXVpcmVVcGRhdGVTZXJpZXMuaW5kZXhPZihTMSkgIT09IC0xICYmIChBMSA9ICEwKTtcbiAgICAgICAgICB9KSwgdGhpcy5jb2xsZWN0aW9uc1dpdGhVcGRhdGUuZm9yRWFjaChmdW5jdGlvbih2MSkge1xuICAgICAgICAgICAgYzFbdjFdICYmIChpMShjMVt2MV0pLmZvckVhY2goZnVuY3Rpb24oUzEsIEQxKSB7XG4gICAgICAgICAgICAgIGxldCBGMSwgVTEgPSBWKFMxLmlkKTtcbiAgICAgICAgICAgICAgVTEgJiYgKEYxID0gaDEuZ2V0KFMxLmlkKSksICFGMSAmJiBoMVt2MV0gJiYgKEYxID0gaDFbdjFdW1AoUzEuaW5kZXgsIEQxKV0pICYmIChVMSAmJiBWKEYxLm9wdGlvbnMuaWQpIHx8IEYxLm9wdGlvbnMuaXNJbnRlcm5hbCkgJiYgKEYxID0gdm9pZCAwKSwgRjEgJiYgRjEuY29sbCA9PT0gdjEgJiYgKEYxLnVwZGF0ZShTMSwgITEpLCBsMSAmJiAoRjEudG91Y2hlZCA9ICEwKSksICFGMSAmJiBsMSAmJiBoMS5jb2xsZWN0aW9uc1dpdGhJbml0W3YxXSAmJiAoaDEuY29sbGVjdGlvbnNXaXRoSW5pdFt2MV1bMF0uYXBwbHkoaDEsIFtTMV0uY29uY2F0KGgxLmNvbGxlY3Rpb25zV2l0aEluaXRbdjFdWzFdIHx8IFtdKS5jb25jYXQoWyExXSkpLnRvdWNoZWQgPSAhMCk7XG4gICAgICAgICAgICB9KSwgbDEgJiYgaDFbdjFdLmZvckVhY2goZnVuY3Rpb24oUzEpIHtcbiAgICAgICAgICAgICAgUzEudG91Y2hlZCB8fCBTMS5vcHRpb25zLmlzSW50ZXJuYWwgPyBkZWxldGUgUzEudG91Y2hlZCA6IFcxLnB1c2goUzEpO1xuICAgICAgICAgICAgfSkpO1xuICAgICAgICAgIH0pLCBXMS5mb3JFYWNoKGZ1bmN0aW9uKHYxKSB7XG4gICAgICAgICAgICB2MS5jaGFydCAmJiB2MS5yZW1vdmUgJiYgdjEucmVtb3ZlKCExKTtcbiAgICAgICAgICB9KSwgTTEgJiYgaDEuYXhlcy5mb3JFYWNoKGZ1bmN0aW9uKHYxKSB7XG4gICAgICAgICAgICB2MS51cGRhdGUoe30sICExKTtcbiAgICAgICAgICB9KSwgQTEgJiYgaDEuZ2V0U2VyaWVzT3JkZXJCeUxpbmtzKCkuZm9yRWFjaChmdW5jdGlvbih2MSkge1xuICAgICAgICAgICAgdjEuY2hhcnQgJiYgdjEudXBkYXRlKHt9LCAhMSk7XG4gICAgICAgICAgfSwgdGhpcyk7XG4gICAgICAgICAgbGV0IGsxID0gUjEgJiYgUjEud2lkdGgsIE4xID0gUjEgJiYgKEooUjEuaGVpZ2h0KSA/IFooUjEuaGVpZ2h0LCBrMSB8fCBoMS5jaGFydFdpZHRoKSA6IFIxLmhlaWdodCk7XG4gICAgICAgICAgdTEgfHwgRChrMSkgJiYgazEgIT09IGgxLmNoYXJ0V2lkdGggfHwgRChOMSkgJiYgTjEgIT09IGgxLmNoYXJ0SGVpZ2h0ID8gaDEuc2V0U2l6ZShrMSwgTjEsIHAxKSA6IFAoYTEsICEwKSAmJiBoMS5yZWRyYXcocDEpLCBLKGgxLCBcImFmdGVyVXBkYXRlXCIsIHsgb3B0aW9uczogYzEsIHJlZHJhdzogYTEsIGFuaW1hdGlvbjogcDEgfSk7XG4gICAgICAgIH1cbiAgICAgICAgc2V0U3VidGl0bGUoYzEsIGExKSB7XG4gICAgICAgICAgdGhpcy5hcHBseURlc2NyaXB0aW9uKFwic3VidGl0bGVcIiwgYzEpLCB0aGlzLmxheU91dFRpdGxlcyhhMSk7XG4gICAgICAgIH1cbiAgICAgICAgc2V0Q2FwdGlvbihjMSwgYTEpIHtcbiAgICAgICAgICB0aGlzLmFwcGx5RGVzY3JpcHRpb24oXCJjYXB0aW9uXCIsIGMxKSwgdGhpcy5sYXlPdXRUaXRsZXMoYTEpO1xuICAgICAgICB9XG4gICAgICAgIHNob3dSZXNldFpvb20oKSB7XG4gICAgICAgICAgbGV0IGMxID0gdGhpcywgYTEgPSBMLmxhbmcsIGwxID0gYzEuem9vbWluZy5yZXNldEJ1dHRvbiwgcDEgPSBsMS50aGVtZSwgTTEgPSBsMS5yZWxhdGl2ZVRvID09PSBcImNoYXJ0XCIgfHwgbDEucmVsYXRpdmVUbyA9PT0gXCJzcGFjaW5nQm94XCIgPyBudWxsIDogXCJwbG90Qm94XCI7XG4gICAgICAgICAgZnVuY3Rpb24gQTEoKSB7XG4gICAgICAgICAgICBjMS56b29tT3V0KCk7XG4gICAgICAgICAgfVxuICAgICAgICAgIEsodGhpcywgXCJiZWZvcmVTaG93UmVzZXRab29tXCIsIG51bGwsIGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgYzEucmVzZXRab29tQnV0dG9uID0gYzEucmVuZGVyZXIuYnV0dG9uKGExLnJlc2V0Wm9vbSwgbnVsbCwgbnVsbCwgQTEsIHAxKS5hdHRyKHsgYWxpZ246IGwxLnBvc2l0aW9uLmFsaWduLCB0aXRsZTogYTEucmVzZXRab29tVGl0bGUgfSkuYWRkQ2xhc3MoXCJoaWdoY2hhcnRzLXJlc2V0LXpvb21cIikuYWRkKCkuYWxpZ24obDEucG9zaXRpb24sICExLCBNMSk7XG4gICAgICAgICAgfSksIEsodGhpcywgXCJhZnRlclNob3dSZXNldFpvb21cIik7XG4gICAgICAgIH1cbiAgICAgICAgem9vbU91dCgpIHtcbiAgICAgICAgICBLKHRoaXMsIFwic2VsZWN0aW9uXCIsIHsgcmVzZXRTZWxlY3Rpb246ICEwIH0sICgpID0+IHRoaXMudHJhbnNmb3JtKHsgcmVzZXQ6ICEwLCB0cmlnZ2VyOiBcInpvb21cIiB9KSk7XG4gICAgICAgIH1cbiAgICAgICAgcGFuKGMxLCBhMSkge1xuICAgICAgICAgIGxldCBsMSA9IHRoaXMsIHAxID0gdHlwZW9mIGExID09IFwib2JqZWN0XCIgPyBhMSA6IHsgZW5hYmxlZDogYTEsIHR5cGU6IFwieFwiIH0sIE0xID0gcDEudHlwZSwgQTEgPSBNMSAmJiBsMVt7IHg6IFwieEF4aXNcIiwgeHk6IFwiYXhlc1wiLCB5OiBcInlBeGlzXCIgfVtNMV1dLmZpbHRlcigoaDEpID0+IGgxLm9wdGlvbnMucGFubmluZ0VuYWJsZWQgJiYgIWgxLm9wdGlvbnMuaXNJbnRlcm5hbCksIHUxID0gbDEub3B0aW9ucy5jaGFydDtcbiAgICAgICAgICB1MSAhPSBudWxsICYmIHUxLnBhbm5pbmcgJiYgKHUxLnBhbm5pbmcgPSBwMSksIEsodGhpcywgXCJwYW5cIiwgeyBvcmlnaW5hbEV2ZW50OiBjMSB9LCAoKSA9PiB7XG4gICAgICAgICAgICBsMS50cmFuc2Zvcm0oeyBheGVzOiBBMSwgZXZlbnQ6IGMxLCB0bzogeyB4OiBjMS5jaGFydFggLSAobDEubW91c2VEb3duWCB8fCAwKSwgeTogYzEuY2hhcnRZIC0gKGwxLm1vdXNlRG93blkgfHwgMCkgfSwgdHJpZ2dlcjogXCJwYW5cIiB9KSwgTihsMS5jb250YWluZXIsIHsgY3Vyc29yOiBcIm1vdmVcIiB9KTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICB0cmFuc2Zvcm0oYzEpIHtcbiAgICAgICAgICB2YXIgazE7XG4gICAgICAgICAgbGV0IHsgYXhlczogYTEgPSB0aGlzLmF4ZXMsIGV2ZW50OiBsMSwgZnJvbTogcDEgPSB7fSwgcmVzZXQ6IE0xLCBzZWxlY3Rpb246IEExLCB0bzogdTEgPSB7fSwgdHJpZ2dlcjogaDEgfSA9IGMxLCB7IGludmVydGVkOiBDMSB9ID0gdGhpcywgcTEgPSAhMSwgVzEsIFIxO1xuICAgICAgICAgIGZvciAobGV0IE4xIG9mICgoazEgPSB0aGlzLmhvdmVyUG9pbnRzKSA9PSBudWxsIHx8IGsxLmZvckVhY2goKHYxKSA9PiB2MS5zZXRTdGF0ZSgpKSwgYTEpKSB7XG4gICAgICAgICAgICBsZXQgeyBob3JpejogdjEsIGxlbjogUzEsIG1pblBvaW50T2Zmc2V0OiBEMSA9IDAsIG9wdGlvbnM6IEYxLCByZXZlcnNlZDogVTEgfSA9IE4xLCBoMCA9IHYxID8gXCJ3aWR0aFwiIDogXCJoZWlnaHRcIiwgTzAgPSB2MSA/IFwieFwiIDogXCJ5XCIsIHcxID0gUCh1MVtoMF0sIE4xLmxlbiksIGcxID0gUChwMVtoMF0sIE4xLmxlbiksIEUxID0gMTAgPiBNYXRoLmFicyh3MSkgPyAxIDogdzEgLyBnMSwgQjEgPSAocDFbTzBdIHx8IDApICsgZzEgLyAyIC0gTjEucG9zLCBLMSA9IEIxIC0gKCh1MVtPMF0gPz8gTjEucG9zKSArIHcxIC8gMiAtIE4xLnBvcykgLyBFMSwgcDAgPSBVMSAmJiAhQzEgfHwgIVUxICYmIEMxID8gLTEgOiAxO1xuICAgICAgICAgICAgaWYgKCFNMSAmJiAoQjEgPCAwIHx8IEIxID4gTjEubGVuKSlcbiAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICBsZXQgZTAgPSBOMS50b1ZhbHVlKEsxLCAhMCkgKyAoQTEgfHwgTjEuaXNPcmRpbmFsID8gMCA6IEQxICogcDApLCBIMSA9IE4xLnRvVmFsdWUoSzEgKyBTMSAvIEUxLCAhMCkgLSAoQTEgfHwgTjEuaXNPcmRpbmFsID8gMCA6IEQxICogcDAgfHwgMCksIHgxID0gTjEuYWxsRXh0cmVtZXM7XG4gICAgICAgICAgICBpZiAoZTAgPiBIMSAmJiAoW2UwLCBIMV0gPSBbSDEsIGUwXSksIEUxID09PSAxICYmICFNMSAmJiBOMS5jb2xsID09PSBcInlBeGlzXCIgJiYgIXgxKSB7XG4gICAgICAgICAgICAgIGZvciAobGV0IFYwIG9mIE4xLnNlcmllcykge1xuICAgICAgICAgICAgICAgIGxldCBXMCA9IFYwLmdldEV4dHJlbWVzKFYwLmdldFByb2Nlc3NlZERhdGEoITApLnlEYXRhLCAhMCk7XG4gICAgICAgICAgICAgICAgeDEgPz8gKHgxID0geyBkYXRhTWluOiBOdW1iZXIuTUFYX1ZBTFVFLCBkYXRhTWF4OiAtTnVtYmVyLk1BWF9WQUxVRSB9KSwgRChXMC5kYXRhTWluKSAmJiBEKFcwLmRhdGFNYXgpICYmICh4MS5kYXRhTWluID0gTWF0aC5taW4oVzAuZGF0YU1pbiwgeDEuZGF0YU1pbiksIHgxLmRhdGFNYXggPSBNYXRoLm1heChXMC5kYXRhTWF4LCB4MS5kYXRhTWF4KSk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgTjEuYWxsRXh0cmVtZXMgPSB4MTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGxldCB7IGRhdGFNaW46IEkxLCBkYXRhTWF4OiBYMSwgbWluOiBKMSwgbWF4OiBmMCB9ID0gXyhOMS5nZXRFeHRyZW1lcygpLCB4MSB8fCB7fSksIEkwID0gSTEgPz8gRjEubWluLCBPMSA9IFgxID8/IEYxLm1heCwgVjEgPSBIMSAtIGUwLCBHMSA9IE4xLmNhdGVnb3JpZXMgPyAwIDogTWF0aC5taW4oVjEsIE8xIC0gSTApLCBpMCA9IEkwIC0gRzEgKiAoVihGMS5taW4pID8gMCA6IEYxLm1pblBhZGRpbmcpLCBiMCA9IE8xICsgRzEgKiAoVihGMS5tYXgpID8gMCA6IEYxLm1heFBhZGRpbmcpLCBnMCA9IE4xLmFsbG93Wm9vbU91dHNpZGUgfHwgRTEgPT09IDEgfHwgaDEgIT09IFwiem9vbVwiICYmIEUxID4gMSwgdTAgPSBNYXRoLm1pbihGMS5taW4gPz8gaTAsIGkwLCBnMCA/IEoxIDogaTApLCB6MCA9IE1hdGgubWF4KEYxLm1heCA/PyBiMCwgYjAsIGcwID8gZjAgOiBiMCk7XG4gICAgICAgICAgICAoIU4xLmlzT3JkaW5hbCB8fCBOMS5vcHRpb25zLm92ZXJzY3JvbGwgfHwgRTEgIT09IDEgfHwgTTEpICYmIChlMCA8IHUwICYmIChlMCA9IHUwLCBFMSA+PSAxICYmIChIMSA9IGUwICsgVjEpKSwgSDEgPiB6MCAmJiAoSDEgPSB6MCwgRTEgPj0gMSAmJiAoZTAgPSBIMSAtIFYxKSksIChNMSB8fCBOMS5zZXJpZXMubGVuZ3RoICYmIChlMCAhPT0gSjEgfHwgSDEgIT09IGYwKSAmJiBlMCA+PSB1MCAmJiBIMSA8PSB6MCkgJiYgKEExID8gQTFbTjEuY29sbF0ucHVzaCh7IGF4aXM6IE4xLCBtaW46IGUwLCBtYXg6IEgxIH0pIDogKE4xLmlzUGFubmluZyA9IGgxICE9PSBcInpvb21cIiwgTjEuaXNQYW5uaW5nICYmIChSMSA9ICEwKSwgTjEuc2V0RXh0cmVtZXMoTTEgPyB2b2lkIDAgOiBlMCwgTTEgPyB2b2lkIDAgOiBIMSwgITEsICExLCB7IG1vdmU6IEsxLCB0cmlnZ2VyOiBoMSwgc2NhbGU6IEUxIH0pLCAhTTEgJiYgKGUwID4gdTAgfHwgSDEgPCB6MCkgJiYgaDEgIT09IFwibW91c2V3aGVlbFwiICYmIChXMSA9ICEwKSksIHExID0gITApLCBsMSAmJiAodGhpc1t2MSA/IFwibW91c2VEb3duWFwiIDogXCJtb3VzZURvd25ZXCJdID0gbDFbdjEgPyBcImNoYXJ0WFwiIDogXCJjaGFydFlcIl0pKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIHExICYmIChBMSA/IEsodGhpcywgXCJzZWxlY3Rpb25cIiwgQTEsICgpID0+IHtcbiAgICAgICAgICAgIGRlbGV0ZSBjMS5zZWxlY3Rpb24sIGMxLnRyaWdnZXIgPSBcInpvb21cIiwgdGhpcy50cmFuc2Zvcm0oYzEpO1xuICAgICAgICAgIH0pIDogKCFXMSB8fCBSMSB8fCB0aGlzLnJlc2V0Wm9vbUJ1dHRvbiA/ICFXMSAmJiB0aGlzLnJlc2V0Wm9vbUJ1dHRvbiAmJiAodGhpcy5yZXNldFpvb21CdXR0b24gPSB0aGlzLnJlc2V0Wm9vbUJ1dHRvbi5kZXN0cm95KCkpIDogdGhpcy5zaG93UmVzZXRab29tKCksIHRoaXMucmVkcmF3KGgxID09PSBcInpvb21cIiAmJiAodGhpcy5vcHRpb25zLmNoYXJ0LmFuaW1hdGlvbiA/PyB0aGlzLnBvaW50Q291bnQgPCAxMDApKSkpLCBxMTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIF8oZDEucHJvdG90eXBlLCB7IGNhbGxiYWNrczogW10sIGNvbGxlY3Rpb25zV2l0aEluaXQ6IHsgeEF4aXM6IFtkMS5wcm90b3R5cGUuYWRkQXhpcywgWyEwXV0sIHlBeGlzOiBbZDEucHJvdG90eXBlLmFkZEF4aXMsIFshMV1dLCBzZXJpZXM6IFtkMS5wcm90b3R5cGUuYWRkU2VyaWVzXSB9LCBjb2xsZWN0aW9uc1dpdGhVcGRhdGU6IFtcInhBeGlzXCIsIFwieUF4aXNcIiwgXCJzZXJpZXNcIl0sIHByb3BzUmVxdWlyZURpcnR5Qm94OiBbXCJiYWNrZ3JvdW5kQ29sb3JcIiwgXCJib3JkZXJDb2xvclwiLCBcImJvcmRlcldpZHRoXCIsIFwiYm9yZGVyUmFkaXVzXCIsIFwicGxvdEJhY2tncm91bmRDb2xvclwiLCBcInBsb3RCYWNrZ3JvdW5kSW1hZ2VcIiwgXCJwbG90Qm9yZGVyQ29sb3JcIiwgXCJwbG90Qm9yZGVyV2lkdGhcIiwgXCJwbG90U2hhZG93XCIsIFwic2hhZG93XCJdLCBwcm9wc1JlcXVpcmVSZWZsb3c6IFtcIm1hcmdpblwiLCBcIm1hcmdpblRvcFwiLCBcIm1hcmdpblJpZ2h0XCIsIFwibWFyZ2luQm90dG9tXCIsIFwibWFyZ2luTGVmdFwiLCBcInNwYWNpbmdcIiwgXCJzcGFjaW5nVG9wXCIsIFwic3BhY2luZ1JpZ2h0XCIsIFwic3BhY2luZ0JvdHRvbVwiLCBcInNwYWNpbmdMZWZ0XCJdLCBwcm9wc1JlcXVpcmVVcGRhdGVTZXJpZXM6IFtcImNoYXJ0LmludmVydGVkXCIsIFwiY2hhcnQucG9sYXJcIiwgXCJjaGFydC5pZ25vcmVIaWRkZW5TZXJpZXNcIiwgXCJjaGFydC50eXBlXCIsIFwiY29sb3JzXCIsIFwicGxvdE9wdGlvbnNcIiwgXCJ0aW1lXCIsIFwidG9vbHRpcFwiXSB9KSwgZDE7XG4gICAgfSksIG4obywgXCJFeHRlbnNpb25zL1Njcm9sbGFibGVQbG90QXJlYS5qc1wiLCBbb1tcIkNvcmUvQW5pbWF0aW9uL0FuaW1hdGlvblV0aWxpdGllcy5qc1wiXSwgb1tcIkNvcmUvR2xvYmFscy5qc1wiXSwgb1tcIkNvcmUvUmVuZGVyZXIvUmVuZGVyZXJSZWdpc3RyeS5qc1wiXSwgb1tcIkNvcmUvVXRpbGl0aWVzLmpzXCJdXSwgZnVuY3Rpb24ociwgaSwgYSwgcykge1xuICAgICAgbGV0IHsgc3RvcDogbCB9ID0gciwgeyBjb21wb3NlZDogcCB9ID0gaSwgeyBhZGRFdmVudDogZCwgY3JlYXRlRWxlbWVudDogYiwgY3NzOiBNLCBkZWZpbmVkOiB1LCBtZXJnZTogQSwgcHVzaFVuaXF1ZTogeiB9ID0gcztcbiAgICAgIGZ1bmN0aW9uIGYoKSB7XG4gICAgICAgIGxldCBnID0gdGhpcy5zY3JvbGxhYmxlUGxvdEFyZWE7XG4gICAgICAgICh0aGlzLnNjcm9sbGFibGVQaXhlbHNYIHx8IHRoaXMuc2Nyb2xsYWJsZVBpeGVsc1kpICYmICFnICYmICh0aGlzLnNjcm9sbGFibGVQbG90QXJlYSA9IGcgPSBuZXcgaCh0aGlzKSksIGcgPT0gbnVsbCB8fCBnLmFwcGx5Rml4ZWQoKTtcbiAgICAgIH1cbiAgICAgIGZ1bmN0aW9uIE8oKSB7XG4gICAgICAgIHRoaXMuY2hhcnQuc2Nyb2xsYWJsZVBsb3RBcmVhICYmICh0aGlzLmNoYXJ0LnNjcm9sbGFibGVQbG90QXJlYS5pc0RpcnR5ID0gITApO1xuICAgICAgfVxuICAgICAgY2xhc3MgaCB7XG4gICAgICAgIHN0YXRpYyBjb21wb3NlKHYsIEwsIHkpIHtcbiAgICAgICAgICB6KHAsIHRoaXMuY29tcG9zZSkgJiYgKGQodiwgXCJhZnRlckluaXRcIiwgTyksIGQoTCwgXCJhZnRlclNldENoYXJ0U2l6ZVwiLCAoQikgPT4gdGhpcy5hZnRlclNldFNpemUoQi50YXJnZXQsIEIpKSwgZChMLCBcInJlbmRlclwiLCBmKSwgZCh5LCBcInNob3dcIiwgTykpO1xuICAgICAgICB9XG4gICAgICAgIHN0YXRpYyBhZnRlclNldFNpemUodiwgTCkge1xuICAgICAgICAgIGxldCB5LCBCLCBYLCB7IG1pbldpZHRoOiBGLCBtaW5IZWlnaHQ6IFQgfSA9IHYub3B0aW9ucy5jaGFydC5zY3JvbGxhYmxlUGxvdEFyZWEgfHwge30sIHsgY2xpcEJveDogdywgcGxvdEJveDogSCwgaW52ZXJ0ZWQ6IEMsIHJlbmRlcmVyOiBxIH0gPSB2O1xuICAgICAgICAgIGlmICghcS5mb3JFeHBvcnQgJiYgKEYgPyAodi5zY3JvbGxhYmxlUGl4ZWxzWCA9IHkgPSBNYXRoLm1heCgwLCBGIC0gdi5jaGFydFdpZHRoKSwgeSAmJiAodi5zY3JvbGxhYmxlUGxvdEJveCA9IEEodi5wbG90Qm94KSwgSC53aWR0aCA9IHYucGxvdFdpZHRoICs9IHksIHdbQyA/IFwiaGVpZ2h0XCIgOiBcIndpZHRoXCJdICs9IHksIFggPSAhMCkpIDogVCAmJiAodi5zY3JvbGxhYmxlUGl4ZWxzWSA9IEIgPSBNYXRoLm1heCgwLCBUIC0gdi5jaGFydEhlaWdodCksIHUoQikgJiYgKHYuc2Nyb2xsYWJsZVBsb3RCb3ggPSBBKHYucGxvdEJveCksIEguaGVpZ2h0ID0gdi5wbG90SGVpZ2h0ICs9IEIsIHdbQyA/IFwid2lkdGhcIiA6IFwiaGVpZ2h0XCJdICs9IEIsIFggPSAhMSkpLCB1KFgpICYmICFMLnNraXBBeGVzKSlcbiAgICAgICAgICAgIGZvciAobGV0IG0gb2Ygdi5heGVzKVxuICAgICAgICAgICAgICBtLmhvcml6ID09PSBYICYmIChtLnNldEF4aXNTaXplKCksIG0uc2V0QXhpc1RyYW5zbGF0aW9uKCkpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0cnVjdG9yKHYpIHtcbiAgICAgICAgICB2YXIgaztcbiAgICAgICAgICBsZXQgTCwgeSA9IHYub3B0aW9ucy5jaGFydCwgQiA9IGEuZ2V0UmVuZGVyZXJUeXBlKCksIFggPSB5LnNjcm9sbGFibGVQbG90QXJlYSB8fCB7fSwgRiA9IHRoaXMubW92ZUZpeGVkRWxlbWVudHMuYmluZCh0aGlzKSwgVCA9IHsgV2Via2l0T3ZlcmZsb3dTY3JvbGxpbmc6IFwidG91Y2hcIiwgb3ZlcmZsb3dYOiBcImhpZGRlblwiLCBvdmVyZmxvd1k6IFwiaGlkZGVuXCIgfTtcbiAgICAgICAgICB2LnNjcm9sbGFibGVQaXhlbHNYICYmIChULm92ZXJmbG93WCA9IFwiYXV0b1wiKSwgdi5zY3JvbGxhYmxlUGl4ZWxzWSAmJiAoVC5vdmVyZmxvd1kgPSBcImF1dG9cIiksIHRoaXMuY2hhcnQgPSB2O1xuICAgICAgICAgIGxldCB3ID0gdGhpcy5wYXJlbnREaXYgPSBiKFwiZGl2XCIsIHsgY2xhc3NOYW1lOiBcImhpZ2hjaGFydHMtc2Nyb2xsaW5nLXBhcmVudFwiIH0sIHsgcG9zaXRpb246IFwicmVsYXRpdmVcIiB9LCB2LnJlbmRlclRvKSwgSCA9IHRoaXMuc2Nyb2xsaW5nQ29udGFpbmVyID0gYihcImRpdlwiLCB7IGNsYXNzTmFtZTogXCJoaWdoY2hhcnRzLXNjcm9sbGluZ1wiIH0sIFQsIHcpLCBDID0gdGhpcy5pbm5lckNvbnRhaW5lciA9IGIoXCJkaXZcIiwgeyBjbGFzc05hbWU6IFwiaGlnaGNoYXJ0cy1pbm5lci1jb250YWluZXJcIiB9LCB2b2lkIDAsIEgpLCBxID0gdGhpcy5maXhlZERpdiA9IGIoXCJkaXZcIiwgeyBjbGFzc05hbWU6IFwiaGlnaGNoYXJ0cy1maXhlZFwiIH0sIHsgcG9zaXRpb246IFwiYWJzb2x1dGVcIiwgb3ZlcmZsb3c6IFwiaGlkZGVuXCIsIHBvaW50ZXJFdmVudHM6IFwibm9uZVwiLCB6SW5kZXg6ICgoKGsgPSB5LnN0eWxlKSA9PSBudWxsID8gdm9pZCAwIDogay56SW5kZXgpIHx8IDApICsgMiwgdG9wOiAwIH0sIHZvaWQgMCwgITApLCBtID0gdGhpcy5maXhlZFJlbmRlcmVyID0gbmV3IEIocSwgdi5jaGFydFdpZHRoLCB2LmNoYXJ0SGVpZ2h0LCB5LnN0eWxlKTtcbiAgICAgICAgICB0aGlzLm1hc2sgPSBtLnBhdGgoKS5hdHRyKHsgZmlsbDogeS5iYWNrZ3JvdW5kQ29sb3IgfHwgXCIjZmZmXCIsIFwiZmlsbC1vcGFjaXR5XCI6IFgub3BhY2l0eSA/PyAwLjg1LCB6SW5kZXg6IC0xIH0pLmFkZENsYXNzKFwiaGlnaGNoYXJ0cy1zY3JvbGxhYmxlLW1hc2tcIikuYWRkKCksIEgucGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUocSwgSCksIE0odi5yZW5kZXJUbywgeyBvdmVyZmxvdzogXCJ2aXNpYmxlXCIgfSksIGQodiwgXCJhZnRlclNob3dSZXNldFpvb21cIiwgRiksIGQodiwgXCJhZnRlckFwcGx5RHJpbGxkb3duXCIsIEYpLCBkKHYsIFwiYWZ0ZXJMYXlPdXRUaXRsZXNcIiwgRiksIGQoSCwgXCJzY3JvbGxcIiwgKCkgPT4ge1xuICAgICAgICAgICAgbGV0IHsgcG9pbnRlcjogeCwgaG92ZXJQb2ludDogTiB9ID0gdjtcbiAgICAgICAgICAgIHggJiYgKGRlbGV0ZSB4LmNoYXJ0UG9zaXRpb24sIE4gJiYgKEwgPSBOKSwgeC5ydW5Qb2ludEFjdGlvbnModm9pZCAwLCBMLCAhMCkpO1xuICAgICAgICAgIH0pLCBDLmFwcGVuZENoaWxkKHYuY29udGFpbmVyKTtcbiAgICAgICAgfVxuICAgICAgICBhcHBseUZpeGVkKCkge1xuICAgICAgICAgIHZhciBEO1xuICAgICAgICAgIGxldCB7IGNoYXJ0OiB2LCBmaXhlZFJlbmRlcmVyOiBMLCBpc0RpcnR5OiB5LCBzY3JvbGxpbmdDb250YWluZXI6IEIgfSA9IHRoaXMsIHsgYXhpc09mZnNldDogWCwgY2hhcnRXaWR0aDogRiwgY2hhcnRIZWlnaHQ6IFQsIGNvbnRhaW5lcjogdywgcGxvdEhlaWdodDogSCwgcGxvdExlZnQ6IEMsIHBsb3RUb3A6IHEsIHBsb3RXaWR0aDogbSwgc2Nyb2xsYWJsZVBpeGVsc1g6IGsgPSAwLCBzY3JvbGxhYmxlUGl4ZWxzWTogeCA9IDAgfSA9IHYsIHsgc2Nyb2xsUG9zaXRpb25YOiBOID0gMCwgc2Nyb2xsUG9zaXRpb25ZOiBWID0gMCB9ID0gdi5vcHRpb25zLmNoYXJ0LnNjcm9sbGFibGVQbG90QXJlYSB8fCB7fSwgUiA9IEYgKyBrLCBJID0gVCArIHg7XG4gICAgICAgICAgTC5zZXRTaXplKEYsIFQpLCAoeSA/PyAhMCkgJiYgKHRoaXMuaXNEaXJ0eSA9ICExLCB0aGlzLm1vdmVGaXhlZEVsZW1lbnRzKCkpLCBsKHYuY29udGFpbmVyKSwgTSh3LCB7IHdpZHRoOiBgJHtSfXB4YCwgaGVpZ2h0OiBgJHtJfXB4YCB9KSwgdi5yZW5kZXJlci5ib3hXcmFwcGVyLmF0dHIoeyB3aWR0aDogUiwgaGVpZ2h0OiBJLCB2aWV3Qm94OiBbMCwgMCwgUiwgSV0uam9pbihcIiBcIikgfSksIChEID0gdi5jaGFydEJhY2tncm91bmQpID09IG51bGwgfHwgRC5hdHRyKHsgd2lkdGg6IFIsIGhlaWdodDogSSB9KSwgTShCLCB7IHdpZHRoOiBgJHtGfXB4YCwgaGVpZ2h0OiBgJHtUfXB4YCB9KSwgdSh5KSB8fCAoQi5zY3JvbGxMZWZ0ID0gayAqIE4sIEIuc2Nyb2xsVG9wID0geCAqIFYpO1xuICAgICAgICAgIGxldCBqID0gcSAtIFhbMF0gLSAxLCBVID0gQyAtIFhbM10gLSAxLCBfID0gcSArIEggKyBYWzJdICsgMSwgcjEgPSBDICsgbSArIFhbMV0gKyAxLCBLID0gQyArIG0gLSBrLCBRID0gcSArIEggLSB4LCBFID0gW1tcIk1cIiwgMCwgMF1dO1xuICAgICAgICAgIGsgPyBFID0gW1tcIk1cIiwgMCwgal0sIFtcIkxcIiwgQyAtIDEsIGpdLCBbXCJMXCIsIEMgLSAxLCBfXSwgW1wiTFwiLCAwLCBfXSwgW1wiWlwiXSwgW1wiTVwiLCBLLCBqXSwgW1wiTFwiLCBGLCBqXSwgW1wiTFwiLCBGLCBfXSwgW1wiTFwiLCBLLCBfXSwgW1wiWlwiXV0gOiB4ICYmIChFID0gW1tcIk1cIiwgVSwgMF0sIFtcIkxcIiwgVSwgcSAtIDFdLCBbXCJMXCIsIHIxLCBxIC0gMV0sIFtcIkxcIiwgcjEsIDBdLCBbXCJaXCJdLCBbXCJNXCIsIFUsIFFdLCBbXCJMXCIsIFUsIFRdLCBbXCJMXCIsIHIxLCBUXSwgW1wiTFwiLCByMSwgUV0sIFtcIlpcIl1dKSwgdi5yZWRyYXdUcmlnZ2VyICE9PSBcImFkanVzdEhlaWdodFwiICYmIHRoaXMubWFzay5hdHRyKHsgZDogRSB9KTtcbiAgICAgICAgfVxuICAgICAgICBtb3ZlRml4ZWRFbGVtZW50cygpIHtcbiAgICAgICAgICBsZXQgdiwgeyBjb250YWluZXI6IEwsIGludmVydGVkOiB5LCBzY3JvbGxhYmxlUGl4ZWxzWDogQiwgc2Nyb2xsYWJsZVBpeGVsc1k6IFggfSA9IHRoaXMuY2hhcnQsIEYgPSB0aGlzLmZpeGVkUmVuZGVyZXIsIFQgPSBoLmZpeGVkU2VsZWN0b3JzO1xuICAgICAgICAgIGZvciAobGV0IHcgb2YgKEIgJiYgIXkgPyB2ID0gXCIuaGlnaGNoYXJ0cy15YXhpc1wiIDogQiAmJiB5IHx8IFggJiYgIXkgPyB2ID0gXCIuaGlnaGNoYXJ0cy14YXhpc1wiIDogWCAmJiB5ICYmICh2ID0gXCIuaGlnaGNoYXJ0cy15YXhpc1wiKSwgdiAmJiBULnB1c2goYCR7dn06bm90KC5oaWdoY2hhcnRzLXJhZGlhbC1heGlzKWAsIGAke3Z9LWxhYmVsczpub3QoLmhpZ2hjaGFydHMtcmFkaWFsLWF4aXMtbGFiZWxzKWApLCBUKSlcbiAgICAgICAgICAgIFtdLmZvckVhY2guY2FsbChMLnF1ZXJ5U2VsZWN0b3JBbGwodyksIChIKSA9PiB7XG4gICAgICAgICAgICAgIChILm5hbWVzcGFjZVVSSSA9PT0gRi5TVkdfTlMgPyBGLmJveCA6IEYuYm94LnBhcmVudE5vZGUpLmFwcGVuZENoaWxkKEgpLCBILnN0eWxlLnBvaW50ZXJFdmVudHMgPSBcImF1dG9cIjtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gaC5maXhlZFNlbGVjdG9ycyA9IFtcIi5oaWdoY2hhcnRzLWJyZWFkY3J1bWJzLWdyb3VwXCIsIFwiLmhpZ2hjaGFydHMtY29udGV4dGJ1dHRvblwiLCBcIi5oaWdoY2hhcnRzLWNhcHRpb25cIiwgXCIuaGlnaGNoYXJ0cy1jcmVkaXRzXCIsIFwiLmhpZ2hjaGFydHMtZHJpbGx1cC1idXR0b25cIiwgXCIuaGlnaGNoYXJ0cy1sZWdlbmRcIiwgXCIuaGlnaGNoYXJ0cy1sZWdlbmQtY2hlY2tib3hcIiwgXCIuaGlnaGNoYXJ0cy1uYXZpZ2F0b3Itc2VyaWVzXCIsIFwiLmhpZ2hjaGFydHMtbmF2aWdhdG9yLXhheGlzXCIsIFwiLmhpZ2hjaGFydHMtbmF2aWdhdG9yLXlheGlzXCIsIFwiLmhpZ2hjaGFydHMtbmF2aWdhdG9yXCIsIFwiLmhpZ2hjaGFydHMtcmFuZ2Utc2VsZWN0b3ItZ3JvdXBcIiwgXCIuaGlnaGNoYXJ0cy1yZXNldC16b29tXCIsIFwiLmhpZ2hjaGFydHMtc2Nyb2xsYmFyXCIsIFwiLmhpZ2hjaGFydHMtc3VidGl0bGVcIiwgXCIuaGlnaGNoYXJ0cy10aXRsZVwiXSwgaDtcbiAgICB9KSwgbihvLCBcIkNvcmUvQXhpcy9TdGFja2luZy9TdGFja0l0ZW0uanNcIiwgW29bXCJDb3JlL1RlbXBsYXRpbmcuanNcIl0sIG9bXCJDb3JlL1Nlcmllcy9TZXJpZXNSZWdpc3RyeS5qc1wiXSwgb1tcIkNvcmUvVXRpbGl0aWVzLmpzXCJdXSwgZnVuY3Rpb24ociwgaSwgYSkge1xuICAgICAgbGV0IHsgZm9ybWF0OiBzIH0gPSByLCB7IHNlcmllczogbCB9ID0gaSwgeyBkZXN0cm95T2JqZWN0UHJvcGVydGllczogcCwgZmlyZUV2ZW50OiBkLCBpc051bWJlcjogYiwgcGljazogTSB9ID0gYTtcbiAgICAgIHJldHVybiBjbGFzcyB7XG4gICAgICAgIGNvbnN0cnVjdG9yKHUsIEEsIHosIGYsIE8pIHtcbiAgICAgICAgICBsZXQgaCA9IHUuY2hhcnQuaW52ZXJ0ZWQsIGcgPSB1LnJldmVyc2VkO1xuICAgICAgICAgIHRoaXMuYXhpcyA9IHU7XG4gICAgICAgICAgbGV0IHYgPSB0aGlzLmlzTmVnYXRpdmUgPSAhIXogIT0gISFnO1xuICAgICAgICAgIHRoaXMub3B0aW9ucyA9IEEgPSBBIHx8IHt9LCB0aGlzLnggPSBmLCB0aGlzLnRvdGFsID0gbnVsbCwgdGhpcy5jdW11bGF0aXZlID0gbnVsbCwgdGhpcy5wb2ludHMgPSB7fSwgdGhpcy5oYXNWYWxpZFBvaW50cyA9ICExLCB0aGlzLnN0YWNrID0gTywgdGhpcy5sZWZ0Q2xpZmYgPSAwLCB0aGlzLnJpZ2h0Q2xpZmYgPSAwLCB0aGlzLmFsaWduT3B0aW9ucyA9IHsgYWxpZ246IEEuYWxpZ24gfHwgKGggPyB2ID8gXCJsZWZ0XCIgOiBcInJpZ2h0XCIgOiBcImNlbnRlclwiKSwgdmVydGljYWxBbGlnbjogQS52ZXJ0aWNhbEFsaWduIHx8IChoID8gXCJtaWRkbGVcIiA6IHYgPyBcImJvdHRvbVwiIDogXCJ0b3BcIiksIHk6IEEueSwgeDogQS54IH0sIHRoaXMudGV4dEFsaWduID0gQS50ZXh0QWxpZ24gfHwgKGggPyB2ID8gXCJyaWdodFwiIDogXCJsZWZ0XCIgOiBcImNlbnRlclwiKTtcbiAgICAgICAgfVxuICAgICAgICBkZXN0cm95KCkge1xuICAgICAgICAgIHAodGhpcywgdGhpcy5heGlzKTtcbiAgICAgICAgfVxuICAgICAgICByZW5kZXIodSkge1xuICAgICAgICAgIGxldCBBID0gdGhpcy5heGlzLmNoYXJ0LCB6ID0gdGhpcy5vcHRpb25zLCBmID0gei5mb3JtYXQsIE8gPSBmID8gcyhmLCB0aGlzLCBBKSA6IHouZm9ybWF0dGVyLmNhbGwodGhpcyk7XG4gICAgICAgICAgaWYgKHRoaXMubGFiZWwpXG4gICAgICAgICAgICB0aGlzLmxhYmVsLmF0dHIoeyB0ZXh0OiBPLCB2aXNpYmlsaXR5OiBcImhpZGRlblwiIH0pO1xuICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5sYWJlbCA9IEEucmVuZGVyZXIubGFiZWwoTywgbnVsbCwgdm9pZCAwLCB6LnNoYXBlLCB2b2lkIDAsIHZvaWQgMCwgei51c2VIVE1MLCAhMSwgXCJzdGFjay1sYWJlbHNcIik7XG4gICAgICAgICAgICBsZXQgaCA9IHsgcjogei5ib3JkZXJSYWRpdXMgfHwgMCwgdGV4dDogTywgcGFkZGluZzogTSh6LnBhZGRpbmcsIDUpLCB2aXNpYmlsaXR5OiBcImhpZGRlblwiIH07XG4gICAgICAgICAgICBBLnN0eWxlZE1vZGUgfHwgKGguZmlsbCA9IHouYmFja2dyb3VuZENvbG9yLCBoLnN0cm9rZSA9IHouYm9yZGVyQ29sb3IsIGhbXCJzdHJva2Utd2lkdGhcIl0gPSB6LmJvcmRlcldpZHRoLCB0aGlzLmxhYmVsLmNzcyh6LnN0eWxlIHx8IHt9KSksIHRoaXMubGFiZWwuYXR0cihoKSwgdGhpcy5sYWJlbC5hZGRlZCB8fCB0aGlzLmxhYmVsLmFkZCh1KTtcbiAgICAgICAgICB9XG4gICAgICAgICAgdGhpcy5sYWJlbC5sYWJlbHJhbmsgPSBBLnBsb3RTaXplWSwgZCh0aGlzLCBcImFmdGVyUmVuZGVyXCIpO1xuICAgICAgICB9XG4gICAgICAgIHNldE9mZnNldCh1LCBBLCB6LCBmLCBPLCBoKSB7XG4gICAgICAgICAgbGV0IHsgYWxpZ25PcHRpb25zOiBnLCBheGlzOiB2LCBsYWJlbDogTCwgb3B0aW9uczogeSwgdGV4dEFsaWduOiBCIH0gPSB0aGlzLCBYID0gdi5jaGFydCwgRiA9IHRoaXMuZ2V0U3RhY2tCb3goeyB4T2Zmc2V0OiB1LCB3aWR0aDogQSwgYm94Qm90dG9tOiB6LCBib3hUb3A6IGYsIGRlZmF1bHRYOiBPLCB4QXhpczogaCB9KSwgeyB2ZXJ0aWNhbEFsaWduOiBUIH0gPSBnO1xuICAgICAgICAgIGlmIChMICYmIEYpIHtcbiAgICAgICAgICAgIGxldCB3ID0gTC5nZXRCQm94KHZvaWQgMCwgMCksIEggPSBMLnBhZGRpbmcsIEMgPSBNKHkub3ZlcmZsb3csIFwianVzdGlmeVwiKSA9PT0gXCJqdXN0aWZ5XCIsIHE7XG4gICAgICAgICAgICBnLnggPSB5LnggfHwgMCwgZy55ID0geS55IHx8IDA7XG4gICAgICAgICAgICBsZXQgeyB4OiBtLCB5OiBrIH0gPSB0aGlzLmFkanVzdFN0YWNrUG9zaXRpb24oeyBsYWJlbEJveDogdywgdmVydGljYWxBbGlnbjogVCwgdGV4dEFsaWduOiBCIH0pO1xuICAgICAgICAgICAgRi54IC09IG0sIEYueSAtPSBrLCBMLmFsaWduKGcsICExLCBGKSwgKHEgPSBYLmlzSW5zaWRlUGxvdChMLmFsaWduQXR0ci54ICsgZy54ICsgbSwgTC5hbGlnbkF0dHIueSArIGcueSArIGspKSB8fCAoQyA9ICExKSwgQyAmJiBsLnByb3RvdHlwZS5qdXN0aWZ5RGF0YUxhYmVsLmNhbGwodiwgTCwgZywgTC5hbGlnbkF0dHIsIHcsIEYpLCBMLmF0dHIoeyB4OiBMLmFsaWduQXR0ci54LCB5OiBMLmFsaWduQXR0ci55LCByb3RhdGlvbjogeS5yb3RhdGlvbiwgcm90YXRpb25PcmlnaW5YOiB3LndpZHRoICogeyBsZWZ0OiAwLCBjZW50ZXI6IDAuNSwgcmlnaHQ6IDEgfVt5LnRleHRBbGlnbiB8fCBcImNlbnRlclwiXSwgcm90YXRpb25PcmlnaW5ZOiB3LmhlaWdodCAvIDIgfSksIE0oIUMgJiYgeS5jcm9wLCAhMCkgJiYgKHEgPSBiKEwueCkgJiYgYihMLnkpICYmIFguaXNJbnNpZGVQbG90KEwueCAtIEggKyAoTC53aWR0aCB8fCAwKSwgTC55KSAmJiBYLmlzSW5zaWRlUGxvdChMLnggKyBILCBMLnkpKSwgTFtxID8gXCJzaG93XCIgOiBcImhpZGVcIl0oKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgZCh0aGlzLCBcImFmdGVyU2V0T2Zmc2V0XCIsIHsgeE9mZnNldDogdSwgd2lkdGg6IEEgfSk7XG4gICAgICAgIH1cbiAgICAgICAgYWRqdXN0U3RhY2tQb3NpdGlvbih7IGxhYmVsQm94OiB1LCB2ZXJ0aWNhbEFsaWduOiBBLCB0ZXh0QWxpZ246IHogfSkge1xuICAgICAgICAgIGxldCBmID0geyBib3R0b206IDAsIG1pZGRsZTogMSwgdG9wOiAyLCByaWdodDogMSwgY2VudGVyOiAwLCBsZWZ0OiAtMSB9LCBPID0gZltBXSwgaCA9IGZbel07XG4gICAgICAgICAgcmV0dXJuIHsgeDogdS53aWR0aCAvIDIgKyB1LndpZHRoIC8gMiAqIGgsIHk6IHUuaGVpZ2h0IC8gMiAqIE8gfTtcbiAgICAgICAgfVxuICAgICAgICBnZXRTdGFja0JveCh1KSB7XG4gICAgICAgICAgbGV0IEEgPSB0aGlzLmF4aXMsIHogPSBBLmNoYXJ0LCB7IGJveFRvcDogZiwgZGVmYXVsdFg6IE8sIHhPZmZzZXQ6IGgsIHdpZHRoOiBnLCBib3hCb3R0b206IHYgfSA9IHUsIEwgPSBBLnN0YWNraW5nLnVzZVBlcmNlbnRhZ2UgPyAxMDAgOiBNKGYsIHRoaXMudG90YWwsIDApLCB5ID0gQS50b1BpeGVscyhMKSwgQiA9IHUueEF4aXMgfHwgei54QXhpc1swXSwgWCA9IE0oTywgQi50cmFuc2xhdGUodGhpcy54KSkgKyBoLCBGID0gTWF0aC5hYnMoeSAtIEEudG9QaXhlbHModiB8fCBiKEEubWluKSAmJiBBLmxvZ2FyaXRobWljICYmIEEubG9nYXJpdGhtaWMubGluMmxvZyhBLm1pbikgfHwgMCkpLCBUID0gei5pbnZlcnRlZCwgdyA9IHRoaXMuaXNOZWdhdGl2ZTtcbiAgICAgICAgICByZXR1cm4gVCA/IHsgeDogKHcgPyB5IDogeSAtIEYpIC0gei5wbG90TGVmdCwgeTogQi5oZWlnaHQgLSBYIC0gZyArIEIudG9wIC0gei5wbG90VG9wLCB3aWR0aDogRiwgaGVpZ2h0OiBnIH0gOiB7IHg6IFggKyBCLnRyYW5zQiAtIHoucGxvdExlZnQsIHk6ICh3ID8geSAtIEYgOiB5KSAtIHoucGxvdFRvcCwgd2lkdGg6IGcsIGhlaWdodDogRiB9O1xuICAgICAgICB9XG4gICAgICB9O1xuICAgIH0pLCBuKG8sIFwiQ29yZS9BeGlzL1N0YWNraW5nL1N0YWNraW5nQXhpcy5qc1wiLCBbb1tcIkNvcmUvQW5pbWF0aW9uL0FuaW1hdGlvblV0aWxpdGllcy5qc1wiXSwgb1tcIkNvcmUvQXhpcy9BeGlzLmpzXCJdLCBvW1wiQ29yZS9TZXJpZXMvU2VyaWVzUmVnaXN0cnkuanNcIl0sIG9bXCJDb3JlL0F4aXMvU3RhY2tpbmcvU3RhY2tJdGVtLmpzXCJdLCBvW1wiQ29yZS9VdGlsaXRpZXMuanNcIl1dLCBmdW5jdGlvbihyLCBpLCBhLCBzLCBsKSB7XG4gICAgICB2YXIgcDtcbiAgICAgIGxldCB7IGdldERlZmVycmVkQW5pbWF0aW9uOiBkIH0gPSByLCB7IHNlcmllczogeyBwcm90b3R5cGU6IGIgfSB9ID0gYSwgeyBhZGRFdmVudDogTSwgY29ycmVjdEZsb2F0OiB1LCBkZWZpbmVkOiBBLCBkZXN0cm95T2JqZWN0UHJvcGVydGllczogeiwgZmlyZUV2ZW50OiBmLCBpc0FycmF5OiBPLCBpc051bWJlcjogaCwgb2JqZWN0RWFjaDogZywgcGljazogdiB9ID0gbDtcbiAgICAgIGZ1bmN0aW9uIEwoKSB7XG4gICAgICAgIGxldCBxID0gdGhpcy5pbnZlcnRlZDtcbiAgICAgICAgdGhpcy5heGVzLmZvckVhY2goKG0pID0+IHtcbiAgICAgICAgICBtLnN0YWNraW5nICYmIG0uc3RhY2tpbmcuc3RhY2tzICYmIG0uaGFzVmlzaWJsZVNlcmllcyAmJiAobS5zdGFja2luZy5vbGRTdGFja3MgPSBtLnN0YWNraW5nLnN0YWNrcyk7XG4gICAgICAgIH0pLCB0aGlzLnNlcmllcy5mb3JFYWNoKChtKSA9PiB7XG4gICAgICAgICAgbGV0IGsgPSBtLnhBeGlzICYmIG0ueEF4aXMub3B0aW9ucyB8fCB7fTtcbiAgICAgICAgICBtLm9wdGlvbnMuc3RhY2tpbmcgJiYgbS5yZXNlcnZlU3BhY2UoKSAmJiAobS5zdGFja0tleSA9IFttLnR5cGUsIHYobS5vcHRpb25zLnN0YWNrLCBcIlwiKSwgcSA/IGsudG9wIDogay5sZWZ0LCBxID8gay5oZWlnaHQgOiBrLndpZHRoXS5qb2luKFwiLFwiKSk7XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgICAgZnVuY3Rpb24geSgpIHtcbiAgICAgICAgdmFyIG07XG4gICAgICAgIGxldCBxID0gdGhpcy5zdGFja2luZztcbiAgICAgICAgaWYgKHEpIHtcbiAgICAgICAgICBsZXQgayA9IHEuc3RhY2tzO1xuICAgICAgICAgIGcoaywgKHgsIE4pID0+IHtcbiAgICAgICAgICAgIHooeCksIGRlbGV0ZSBrW05dO1xuICAgICAgICAgIH0pLCAobSA9IHEuc3RhY2tUb3RhbEdyb3VwKSA9PSBudWxsIHx8IG0uZGVzdHJveSgpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBmdW5jdGlvbiBCKCkge1xuICAgICAgICB0aGlzLnN0YWNraW5nIHx8ICh0aGlzLnN0YWNraW5nID0gbmV3IEModGhpcykpO1xuICAgICAgfVxuICAgICAgZnVuY3Rpb24gWChxLCBtLCBrLCB4KSB7XG4gICAgICAgIHJldHVybiAhQShxKSB8fCBxLnggIT09IG0gfHwgeCAmJiBxLnN0YWNrS2V5ICE9PSB4ID8gcSA9IHsgeDogbSwgaW5kZXg6IDAsIGtleTogeCwgc3RhY2tLZXk6IHggfSA6IHEuaW5kZXgrKywgcS5rZXkgPSBbaywgbSwgcS5pbmRleF0uam9pbihcIixcIiksIHE7XG4gICAgICB9XG4gICAgICBmdW5jdGlvbiBGKCkge1xuICAgICAgICBsZXQgcSwgbSA9IHRoaXMsIGsgPSBtLnlBeGlzLCB4ID0gbS5zdGFja0tleSB8fCBcIlwiLCBOID0gay5zdGFja2luZy5zdGFja3MsIFYgPSBtLnByb2Nlc3NlZFhEYXRhLCBSID0gbS5vcHRpb25zLnN0YWNraW5nLCBJID0gbVtSICsgXCJTdGFja2VyXCJdO1xuICAgICAgICBJICYmIFt4LCBcIi1cIiArIHhdLmZvckVhY2goKGopID0+IHtcbiAgICAgICAgICB2YXIgUTtcbiAgICAgICAgICBsZXQgVSA9IFYubGVuZ3RoLCBfLCByMSwgSztcbiAgICAgICAgICBmb3IgKDsgVS0tOyApXG4gICAgICAgICAgICBfID0gVltVXSwgcSA9IG0uZ2V0U3RhY2tJbmRpY2F0b3IocSwgXywgbS5pbmRleCwgaiksIHIxID0gKFEgPSBOW2pdKSA9PSBudWxsID8gdm9pZCAwIDogUVtfXSwgKEsgPSByMSA9PSBudWxsID8gdm9pZCAwIDogcjEucG9pbnRzW3Eua2V5IHx8IFwiXCJdKSAmJiBJLmNhbGwobSwgSywgcjEsIFUpO1xuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICAgIGZ1bmN0aW9uIFQocSwgbSwgaykge1xuICAgICAgICBsZXQgeCA9IG0udG90YWwgPyAxMDAgLyBtLnRvdGFsIDogMDtcbiAgICAgICAgcVswXSA9IHUocVswXSAqIHgpLCBxWzFdID0gdShxWzFdICogeCksIHRoaXMuc3RhY2tlZFlEYXRhW2tdID0gcVsxXTtcbiAgICAgIH1cbiAgICAgIGZ1bmN0aW9uIHcocSkge1xuICAgICAgICAodGhpcy5pcyhcImNvbHVtblwiKSB8fCB0aGlzLmlzKFwiY29sdW1ucmFuZ2VcIikpICYmICh0aGlzLm9wdGlvbnMuY2VudGVySW5DYXRlZ29yeSAmJiAhdGhpcy5vcHRpb25zLnN0YWNraW5nICYmIHRoaXMuY2hhcnQuc2VyaWVzLmxlbmd0aCA+IDEgPyBiLnNldFN0YWNrZWRQb2ludHMuY2FsbCh0aGlzLCBxLCBcImdyb3VwXCIpIDogcS5zdGFja2luZy5yZXNldFN0YWNrcygpKTtcbiAgICAgIH1cbiAgICAgIGZ1bmN0aW9uIEgocSwgbSkge1xuICAgICAgICB2YXIgczEsIGQxO1xuICAgICAgICBsZXQgaywgeCwgTiwgViwgUiwgSSwgaiwgVSwgXywgcjEgPSBtIHx8IHRoaXMub3B0aW9ucy5zdGFja2luZztcbiAgICAgICAgaWYgKCFyMSB8fCAhdGhpcy5yZXNlcnZlU3BhY2UoKSB8fCAoeyBncm91cDogXCJ4QXhpc1wiIH1bcjFdIHx8IFwieUF4aXNcIikgIT09IHEuY29sbClcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIGxldCBLID0gdGhpcy5wcm9jZXNzZWRYRGF0YSwgUSA9IHRoaXMucHJvY2Vzc2VkWURhdGEsIEUgPSBbXSwgRCA9IFEubGVuZ3RoLCBHID0gdGhpcy5vcHRpb25zLCBKID0gRy50aHJlc2hvbGQgfHwgMCwgUyA9IEcuc3RhcnRGcm9tVGhyZXNob2xkID8gSiA6IDAsIFcgPSBHLnN0YWNrLCBQID0gbSA/IGAke3RoaXMudHlwZX0sJHtyMX1gIDogdGhpcy5zdGFja0tleSB8fCBcIlwiLCBZID0gXCItXCIgKyBQLCBaID0gdGhpcy5uZWdTdGFja3MsIHQxID0gcS5zdGFja2luZywgaTEgPSB0MS5zdGFja3MsIG4xID0gdDEub2xkU3RhY2tzO1xuICAgICAgICBmb3IgKHQxLnN0YWNrc1RvdWNoZWQgKz0gMSwgaiA9IDA7IGogPCBEOyBqKyspIHtcbiAgICAgICAgICBVID0gS1tqXSwgXyA9IFFbal0sIEkgPSAoayA9IHRoaXMuZ2V0U3RhY2tJbmRpY2F0b3IoaywgVSwgdGhpcy5pbmRleCkpLmtleSB8fCBcIlwiLCBpMVtSID0gKHggPSBaICYmIF8gPCAoUyA/IDAgOiBKKSkgPyBZIDogUF0gfHwgKGkxW1JdID0ge30pLCBpMVtSXVtVXSB8fCAoKHMxID0gbjFbUl0pICE9IG51bGwgJiYgczFbVV0gPyAoaTFbUl1bVV0gPSBuMVtSXVtVXSwgaTFbUl1bVV0udG90YWwgPSBudWxsKSA6IGkxW1JdW1VdID0gbmV3IHMocSwgcS5vcHRpb25zLnN0YWNrTGFiZWxzLCAhIXgsIFUsIFcpKSwgTiA9IGkxW1JdW1VdLCBfICE9PSBudWxsID8gKE4ucG9pbnRzW0ldID0gTi5wb2ludHNbdGhpcy5pbmRleF0gPSBbdihOLmN1bXVsYXRpdmUsIFMpXSwgQShOLmN1bXVsYXRpdmUpIHx8IChOLmJhc2UgPSBJKSwgTi50b3VjaGVkID0gdDEuc3RhY2tzVG91Y2hlZCwgay5pbmRleCA+IDAgJiYgdGhpcy5zaW5nbGVTdGFja3MgPT09ICExICYmIChOLnBvaW50c1tJXVswXSA9IE4ucG9pbnRzW3RoaXMuaW5kZXggKyBcIixcIiArIFUgKyBcIiwwXCJdWzBdKSkgOiAoZGVsZXRlIE4ucG9pbnRzW0ldLCBkZWxldGUgTi5wb2ludHNbdGhpcy5pbmRleF0pO1xuICAgICAgICAgIGxldCBiMSA9IE4udG90YWwgfHwgMDtcbiAgICAgICAgICByMSA9PT0gXCJwZXJjZW50XCIgPyAoViA9IHggPyBQIDogWSwgYjEgPSBaICYmICgoZDEgPSBpMVtWXSkgIT0gbnVsbCAmJiBkMVtVXSkgPyAoViA9IGkxW1ZdW1VdKS50b3RhbCA9IE1hdGgubWF4KFYudG90YWwgfHwgMCwgYjEpICsgTWF0aC5hYnMoXykgfHwgMCA6IHUoYjEgKyAoTWF0aC5hYnMoXykgfHwgMCkpKSA6IHIxID09PSBcImdyb3VwXCIgPyAoTyhfKSAmJiAoXyA9IF9bMF0pLCBfICE9PSBudWxsICYmIGIxKyspIDogYjEgPSB1KGIxICsgKF8gfHwgMCkpLCByMSA9PT0gXCJncm91cFwiID8gTi5jdW11bGF0aXZlID0gKGIxIHx8IDEpIC0gMSA6IE4uY3VtdWxhdGl2ZSA9IHUodihOLmN1bXVsYXRpdmUsIFMpICsgKF8gfHwgMCkpLCBOLnRvdGFsID0gYjEsIF8gIT09IG51bGwgJiYgKE4ucG9pbnRzW0ldLnB1c2goTi5jdW11bGF0aXZlKSwgRVtqXSA9IE4uY3VtdWxhdGl2ZSwgTi5oYXNWYWxpZFBvaW50cyA9ICEwKTtcbiAgICAgICAgfVxuICAgICAgICByMSA9PT0gXCJwZXJjZW50XCIgJiYgKHQxLnVzZVBlcmNlbnRhZ2UgPSAhMCksIHIxICE9PSBcImdyb3VwXCIgJiYgKHRoaXMuc3RhY2tlZFlEYXRhID0gRSksIHQxLm9sZFN0YWNrcyA9IHt9O1xuICAgICAgfVxuICAgICAgY2xhc3MgQyB7XG4gICAgICAgIGNvbnN0cnVjdG9yKG0pIHtcbiAgICAgICAgICB0aGlzLm9sZFN0YWNrcyA9IHt9LCB0aGlzLnN0YWNrcyA9IHt9LCB0aGlzLnN0YWNrc1RvdWNoZWQgPSAwLCB0aGlzLmF4aXMgPSBtO1xuICAgICAgICB9XG4gICAgICAgIGJ1aWxkU3RhY2tzKCkge1xuICAgICAgICAgIGxldCBtLCBrLCB4ID0gdGhpcy5heGlzLCBOID0geC5zZXJpZXMsIFYgPSB4LmNvbGwgPT09IFwieEF4aXNcIiwgUiA9IHgub3B0aW9ucy5yZXZlcnNlZFN0YWNrcywgSSA9IE4ubGVuZ3RoO1xuICAgICAgICAgIGZvciAodGhpcy5yZXNldFN0YWNrcygpLCB0aGlzLnVzZVBlcmNlbnRhZ2UgPSAhMSwgayA9IEk7IGstLTsgKVxuICAgICAgICAgICAgbSA9IE5bUiA/IGsgOiBJIC0gayAtIDFdLCBWICYmIG0uc2V0R3JvdXBlZFBvaW50cyh4KSwgbS5zZXRTdGFja2VkUG9pbnRzKHgpO1xuICAgICAgICAgIGlmICghVilcbiAgICAgICAgICAgIGZvciAoayA9IDA7IGsgPCBJOyBrKyspXG4gICAgICAgICAgICAgIE5ba10ubW9kaWZ5U3RhY2tzKCk7XG4gICAgICAgICAgZih4LCBcImFmdGVyQnVpbGRTdGFja3NcIik7XG4gICAgICAgIH1cbiAgICAgICAgY2xlYW5TdGFja3MoKSB7XG4gICAgICAgICAgdGhpcy5vbGRTdGFja3MgJiYgKHRoaXMuc3RhY2tzID0gdGhpcy5vbGRTdGFja3MsIGcodGhpcy5zdGFja3MsIChtKSA9PiB7XG4gICAgICAgICAgICBnKG0sIChrKSA9PiB7XG4gICAgICAgICAgICAgIGsuY3VtdWxhdGl2ZSA9IGsudG90YWw7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9KSk7XG4gICAgICAgIH1cbiAgICAgICAgcmVzZXRTdGFja3MoKSB7XG4gICAgICAgICAgZyh0aGlzLnN0YWNrcywgKG0pID0+IHtcbiAgICAgICAgICAgIGcobSwgKGssIHgpID0+IHtcbiAgICAgICAgICAgICAgaChrLnRvdWNoZWQpICYmIGsudG91Y2hlZCA8IHRoaXMuc3RhY2tzVG91Y2hlZCA/IChrLmRlc3Ryb3koKSwgZGVsZXRlIG1beF0pIDogKGsudG90YWwgPSBudWxsLCBrLmN1bXVsYXRpdmUgPSBudWxsKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIHJlbmRlclN0YWNrVG90YWxzKCkge1xuICAgICAgICAgIHZhciBJO1xuICAgICAgICAgIGxldCBtID0gdGhpcy5heGlzLCBrID0gbS5jaGFydCwgeCA9IGsucmVuZGVyZXIsIE4gPSB0aGlzLnN0YWNrcywgViA9IGQoaywgKChJID0gbS5vcHRpb25zLnN0YWNrTGFiZWxzKSA9PSBudWxsID8gdm9pZCAwIDogSS5hbmltYXRpb24pIHx8ICExKSwgUiA9IHRoaXMuc3RhY2tUb3RhbEdyb3VwID0gdGhpcy5zdGFja1RvdGFsR3JvdXAgfHwgeC5nKFwic3RhY2stbGFiZWxzXCIpLmF0dHIoeyB6SW5kZXg6IDYsIG9wYWNpdHk6IDAgfSkuYWRkKCk7XG4gICAgICAgICAgUi50cmFuc2xhdGUoay5wbG90TGVmdCwgay5wbG90VG9wKSwgZyhOLCAoaikgPT4ge1xuICAgICAgICAgICAgZyhqLCAoVSkgPT4ge1xuICAgICAgICAgICAgICBVLnJlbmRlcihSKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH0pLCBSLmFuaW1hdGUoeyBvcGFjaXR5OiAxIH0sIFYpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gKHAgfHwgKHAgPSB7fSkpLmNvbXBvc2UgPSBmdW5jdGlvbihxLCBtLCBrKSB7XG4gICAgICAgIGxldCB4ID0gbS5wcm90b3R5cGUsIE4gPSBrLnByb3RvdHlwZTtcbiAgICAgICAgeC5nZXRTdGFja3MgfHwgKE0ocSwgXCJpbml0XCIsIEIpLCBNKHEsIFwiZGVzdHJveVwiLCB5KSwgeC5nZXRTdGFja3MgPSBMLCBOLmdldFN0YWNrSW5kaWNhdG9yID0gWCwgTi5tb2RpZnlTdGFja3MgPSBGLCBOLnBlcmNlbnRTdGFja2VyID0gVCwgTi5zZXRHcm91cGVkUG9pbnRzID0gdywgTi5zZXRTdGFja2VkUG9pbnRzID0gSCk7XG4gICAgICB9LCBwO1xuICAgIH0pLCBuKG8sIFwiU2VyaWVzL0xpbmUvTGluZVNlcmllcy5qc1wiLCBbb1tcIkNvcmUvU2VyaWVzL1Nlcmllcy5qc1wiXSwgb1tcIkNvcmUvU2VyaWVzL1Nlcmllc1JlZ2lzdHJ5LmpzXCJdLCBvW1wiQ29yZS9VdGlsaXRpZXMuanNcIl1dLCBmdW5jdGlvbihyLCBpLCBhKSB7XG4gICAgICBsZXQgeyBkZWZpbmVkOiBzLCBtZXJnZTogbCwgaXNPYmplY3Q6IHAgfSA9IGE7XG4gICAgICBjbGFzcyBkIGV4dGVuZHMgciB7XG4gICAgICAgIGRyYXdHcmFwaCgpIHtcbiAgICAgICAgICBsZXQgTSA9IHRoaXMub3B0aW9ucywgdSA9ICh0aGlzLmdhcHBlZFBhdGggfHwgdGhpcy5nZXRHcmFwaFBhdGgpLmNhbGwodGhpcyksIEEgPSB0aGlzLmNoYXJ0LnN0eWxlZE1vZGU7XG4gICAgICAgICAgW3RoaXMsIC4uLnRoaXMuem9uZXNdLmZvckVhY2goKHosIGYpID0+IHtcbiAgICAgICAgICAgIGxldCBPLCBoID0gei5ncmFwaCwgZyA9IGggPyBcImFuaW1hdGVcIiA6IFwiYXR0clwiLCB2ID0gei5kYXNoU3R5bGUgfHwgTS5kYXNoU3R5bGU7XG4gICAgICAgICAgICBoID8gKGguZW5kWCA9IHRoaXMucHJldmVudEdyYXBoQW5pbWF0aW9uID8gbnVsbCA6IHUueE1hcCwgaC5hbmltYXRlKHsgZDogdSB9KSkgOiB1Lmxlbmd0aCAmJiAoei5ncmFwaCA9IGggPSB0aGlzLmNoYXJ0LnJlbmRlcmVyLnBhdGgodSkuYWRkQ2xhc3MoXCJoaWdoY2hhcnRzLWdyYXBoXCIgKyAoZiA/IGAgaGlnaGNoYXJ0cy16b25lLWdyYXBoLSR7ZiAtIDF9IGAgOiBcIiBcIikgKyAoZiAmJiB6LmNsYXNzTmFtZSB8fCBcIlwiKSkuYXR0cih7IHpJbmRleDogMSB9KS5hZGQodGhpcy5ncm91cCkpLCBoICYmICFBICYmIChPID0geyBzdHJva2U6ICFmICYmIE0ubGluZUNvbG9yIHx8IHouY29sb3IgfHwgdGhpcy5jb2xvciB8fCBcIiNjY2NjY2NcIiwgXCJzdHJva2Utd2lkdGhcIjogTS5saW5lV2lkdGggfHwgMCwgZmlsbDogdGhpcy5maWxsR3JhcGggJiYgdGhpcy5jb2xvciB8fCBcIm5vbmVcIiB9LCB2ID8gTy5kYXNoc3R5bGUgPSB2IDogTS5saW5lY2FwICE9PSBcInNxdWFyZVwiICYmIChPW1wic3Ryb2tlLWxpbmVjYXBcIl0gPSBPW1wic3Ryb2tlLWxpbmVqb2luXCJdID0gXCJyb3VuZFwiKSwgaFtnXShPKS5zaGFkb3coZiA8IDIgJiYgTS5zaGFkb3cgJiYgbCh7IGZpbHRlclVuaXRzOiBcInVzZXJTcGFjZU9uVXNlXCIgfSwgcChNLnNoYWRvdykgPyBNLnNoYWRvdyA6IHt9KSkpLCBoICYmIChoLnN0YXJ0WCA9IHUueE1hcCwgaC5pc0FyZWEgPSB1LmlzQXJlYSk7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgZ2V0R3JhcGhQYXRoKE0sIHUsIEEpIHtcbiAgICAgICAgICBsZXQgeiA9IHRoaXMsIGYgPSB6Lm9wdGlvbnMsIE8gPSBbXSwgaCA9IFtdLCBnLCB2ID0gZi5zdGVwLCBMID0gKE0gPSBNIHx8IHoucG9pbnRzKS5yZXZlcnNlZDtcbiAgICAgICAgICByZXR1cm4gTCAmJiBNLnJldmVyc2UoKSwgKHYgPSB7IHJpZ2h0OiAxLCBjZW50ZXI6IDIgfVt2XSB8fCB2ICYmIDMpICYmIEwgJiYgKHYgPSA0IC0gdiksIChNID0gdGhpcy5nZXRWYWxpZFBvaW50cyhNLCAhMSwgIShmLmNvbm5lY3ROdWxscyAmJiAhdSAmJiAhQSkpKS5mb3JFYWNoKGZ1bmN0aW9uKHksIEIpIHtcbiAgICAgICAgICAgIGxldCBYLCBGID0geS5wbG90WCwgVCA9IHkucGxvdFksIHcgPSBNW0IgLSAxXSwgSCA9IHkuaXNOdWxsIHx8IHR5cGVvZiBUICE9IFwibnVtYmVyXCI7XG4gICAgICAgICAgICAoeS5sZWZ0Q2xpZmYgfHwgdyAmJiB3LnJpZ2h0Q2xpZmYpICYmICFBICYmIChnID0gITApLCBIICYmICFzKHUpICYmIEIgPiAwID8gZyA9ICFmLmNvbm5lY3ROdWxscyA6IEggJiYgIXUgPyBnID0gITAgOiAoQiA9PT0gMCB8fCBnID8gWCA9IFtbXCJNXCIsIHkucGxvdFgsIHkucGxvdFldXSA6IHouZ2V0UG9pbnRTcGxpbmUgPyBYID0gW3ouZ2V0UG9pbnRTcGxpbmUoTSwgeSwgQildIDogdiA/IChYID0gdiA9PT0gMSA/IFtbXCJMXCIsIHcucGxvdFgsIFRdXSA6IHYgPT09IDIgPyBbW1wiTFwiLCAody5wbG90WCArIEYpIC8gMiwgdy5wbG90WV0sIFtcIkxcIiwgKHcucGxvdFggKyBGKSAvIDIsIFRdXSA6IFtbXCJMXCIsIEYsIHcucGxvdFldXSkucHVzaChbXCJMXCIsIEYsIFRdKSA6IFggPSBbW1wiTFwiLCBGLCBUXV0sIGgucHVzaCh5LngpLCB2ICYmIChoLnB1c2goeS54KSwgdiA9PT0gMiAmJiBoLnB1c2goeS54KSksIE8ucHVzaC5hcHBseShPLCBYKSwgZyA9ICExKTtcbiAgICAgICAgICB9KSwgTy54TWFwID0gaCwgei5ncmFwaFBhdGggPSBPLCBPO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gZC5kZWZhdWx0T3B0aW9ucyA9IGwoci5kZWZhdWx0T3B0aW9ucywgeyBsZWdlbmRTeW1ib2w6IFwibGluZU1hcmtlclwiIH0pLCBpLnJlZ2lzdGVyU2VyaWVzVHlwZShcImxpbmVcIiwgZCksIGQ7XG4gICAgfSksIG4obywgXCJTZXJpZXMvQXJlYS9BcmVhU2VyaWVzRGVmYXVsdHMuanNcIiwgW10sIGZ1bmN0aW9uKCkge1xuICAgICAgcmV0dXJuIHsgdGhyZXNob2xkOiAwLCBsZWdlbmRTeW1ib2w6IFwiYXJlYU1hcmtlclwiIH07XG4gICAgfSksIG4obywgXCJTZXJpZXMvQXJlYS9BcmVhU2VyaWVzLmpzXCIsIFtvW1wiU2VyaWVzL0FyZWEvQXJlYVNlcmllc0RlZmF1bHRzLmpzXCJdLCBvW1wiQ29yZS9TZXJpZXMvU2VyaWVzUmVnaXN0cnkuanNcIl0sIG9bXCJDb3JlL1V0aWxpdGllcy5qc1wiXV0sIGZ1bmN0aW9uKHIsIGksIGEpIHtcbiAgICAgIGxldCB7IHNlcmllc1R5cGVzOiB7IGxpbmU6IHMgfSB9ID0gaSwgeyBleHRlbmQ6IGwsIG1lcmdlOiBwLCBvYmplY3RFYWNoOiBkLCBwaWNrOiBiIH0gPSBhO1xuICAgICAgY2xhc3MgTSBleHRlbmRzIHMge1xuICAgICAgICBkcmF3R3JhcGgoKSB7XG4gICAgICAgICAgdGhpcy5hcmVhUGF0aCA9IFtdLCBzdXBlci5kcmF3R3JhcGguYXBwbHkodGhpcyk7XG4gICAgICAgICAgbGV0IHsgYXJlYVBhdGg6IEEsIG9wdGlvbnM6IHogfSA9IHRoaXM7XG4gICAgICAgICAgW3RoaXMsIC4uLnRoaXMuem9uZXNdLmZvckVhY2goKGYsIE8pID0+IHtcbiAgICAgICAgICAgIGxldCBoID0ge30sIGcgPSBmLmZpbGxDb2xvciB8fCB6LmZpbGxDb2xvciwgdiA9IGYuYXJlYSwgTCA9IHYgPyBcImFuaW1hdGVcIiA6IFwiYXR0clwiO1xuICAgICAgICAgICAgdiA/ICh2LmVuZFggPSB0aGlzLnByZXZlbnRHcmFwaEFuaW1hdGlvbiA/IG51bGwgOiBBLnhNYXAsIHYuYW5pbWF0ZSh7IGQ6IEEgfSkpIDogKGguekluZGV4ID0gMCwgKHYgPSBmLmFyZWEgPSB0aGlzLmNoYXJ0LnJlbmRlcmVyLnBhdGgoQSkuYWRkQ2xhc3MoXCJoaWdoY2hhcnRzLWFyZWFcIiArIChPID8gYCBoaWdoY2hhcnRzLXpvbmUtYXJlYS0ke08gLSAxfSBgIDogXCIgXCIpICsgKE8gJiYgZi5jbGFzc05hbWUgfHwgXCJcIikpLmFkZCh0aGlzLmdyb3VwKSkuaXNBcmVhID0gITApLCB0aGlzLmNoYXJ0LnN0eWxlZE1vZGUgfHwgKGguZmlsbCA9IGcgfHwgZi5jb2xvciB8fCB0aGlzLmNvbG9yLCBoW1wiZmlsbC1vcGFjaXR5XCJdID0gZyA/IDEgOiB6LmZpbGxPcGFjaXR5ID8/IDAuNzUsIHYuY3NzKHsgcG9pbnRlckV2ZW50czogdGhpcy5zdGlja3lUcmFja2luZyA/IFwibm9uZVwiIDogXCJhdXRvXCIgfSkpLCB2W0xdKGgpLCB2LnN0YXJ0WCA9IEEueE1hcCwgdi5zaGlmdFVuaXQgPSB6LnN0ZXAgPyAyIDogMTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBnZXRHcmFwaFBhdGgoQSkge1xuICAgICAgICAgIGxldCB6LCBmLCBPLCBoID0gcy5wcm90b3R5cGUuZ2V0R3JhcGhQYXRoLCBnID0gdGhpcy5vcHRpb25zLCB2ID0gZy5zdGFja2luZywgTCA9IHRoaXMueUF4aXMsIHkgPSBbXSwgQiA9IFtdLCBYID0gdGhpcy5pbmRleCwgRiA9IEwuc3RhY2tpbmcuc3RhY2tzW3RoaXMuc3RhY2tLZXldLCBUID0gZy50aHJlc2hvbGQsIHcgPSBNYXRoLnJvdW5kKEwuZ2V0VGhyZXNob2xkKGcudGhyZXNob2xkKSksIEggPSBiKGcuY29ubmVjdE51bGxzLCB2ID09PSBcInBlcmNlbnRcIiksIEMgPSBmdW5jdGlvbihWLCBSLCBJKSB7XG4gICAgICAgICAgICBsZXQgaiA9IEFbVl0sIFUgPSB2ICYmIEZbai54XS5wb2ludHNbWF0sIF8gPSBqW0kgKyBcIk51bGxcIl0gfHwgMCwgcjEgPSBqW0kgKyBcIkNsaWZmXCJdIHx8IDAsIEssIFEsIEUgPSAhMDtcbiAgICAgICAgICAgIHIxIHx8IF8gPyAoSyA9IChfID8gVVswXSA6IFVbMV0pICsgcjEsIFEgPSBVWzBdICsgcjEsIEUgPSAhIV8pIDogIXYgJiYgQVtSXSAmJiBBW1JdLmlzTnVsbCAmJiAoSyA9IFEgPSBUKSwgSyAhPT0gdm9pZCAwICYmIChCLnB1c2goeyBwbG90WDogeiwgcGxvdFk6IEsgPT09IG51bGwgPyB3IDogTC5nZXRUaHJlc2hvbGQoSyksIGlzTnVsbDogRSwgaXNDbGlmZjogITAgfSksIHkucHVzaCh7IHBsb3RYOiB6LCBwbG90WTogUSA9PT0gbnVsbCA/IHcgOiBMLmdldFRocmVzaG9sZChRKSwgZG9DdXJ2ZTogITEgfSkpO1xuICAgICAgICAgIH07XG4gICAgICAgICAgQSA9IEEgfHwgdGhpcy5wb2ludHMsIHYgJiYgKEEgPSB0aGlzLmdldFN0YWNrUG9pbnRzKEEpKTtcbiAgICAgICAgICBmb3IgKGxldCBWID0gMCwgUiA9IEEubGVuZ3RoOyBWIDwgUjsgKytWKVxuICAgICAgICAgICAgdiB8fCAoQVtWXS5sZWZ0Q2xpZmYgPSBBW1ZdLnJpZ2h0Q2xpZmYgPSBBW1ZdLmxlZnROdWxsID0gQVtWXS5yaWdodE51bGwgPSB2b2lkIDApLCBmID0gQVtWXS5pc051bGwsIHogPSBiKEFbVl0ucmVjdFBsb3RYLCBBW1ZdLnBsb3RYKSwgTyA9IHYgPyBiKEFbVl0ueUJvdHRvbSwgdykgOiB3LCBmICYmICFIIHx8IChIIHx8IEMoViwgViAtIDEsIFwibGVmdFwiKSwgZiAmJiAhdiAmJiBIIHx8IChCLnB1c2goQVtWXSksIHkucHVzaCh7IHg6IFYsIHBsb3RYOiB6LCBwbG90WTogTyB9KSksIEggfHwgQyhWLCBWICsgMSwgXCJyaWdodFwiKSk7XG4gICAgICAgICAgbGV0IHEgPSBoLmNhbGwodGhpcywgQiwgITAsICEwKTtcbiAgICAgICAgICB5LnJldmVyc2VkID0gITA7XG4gICAgICAgICAgbGV0IG0gPSBoLmNhbGwodGhpcywgeSwgITAsICEwKSwgayA9IG1bMF07XG4gICAgICAgICAgayAmJiBrWzBdID09PSBcIk1cIiAmJiAobVswXSA9IFtcIkxcIiwga1sxXSwga1syXV0pO1xuICAgICAgICAgIGxldCB4ID0gcS5jb25jYXQobSk7XG4gICAgICAgICAgeC5sZW5ndGggJiYgeC5wdXNoKFtcIlpcIl0pO1xuICAgICAgICAgIGxldCBOID0gaC5jYWxsKHRoaXMsIEIsICExLCBIKTtcbiAgICAgICAgICByZXR1cm4gdGhpcy5jaGFydC5zZXJpZXMubGVuZ3RoID4gMSAmJiB2ICYmIEIuc29tZSgoVikgPT4gVi5pc0NsaWZmKSAmJiAoeC5oYXNTdGFja2VkQ2xpZmZzID0gTi5oYXNTdGFja2VkQ2xpZmZzID0gITApLCB4LnhNYXAgPSBxLnhNYXAsIHRoaXMuYXJlYVBhdGggPSB4LCBOO1xuICAgICAgICB9XG4gICAgICAgIGdldFN0YWNrUG9pbnRzKEEpIHtcbiAgICAgICAgICBsZXQgeiA9IHRoaXMsIGYgPSBbXSwgTyA9IFtdLCBoID0gdGhpcy54QXhpcywgZyA9IHRoaXMueUF4aXMsIHYgPSBnLnN0YWNraW5nLnN0YWNrc1t0aGlzLnN0YWNrS2V5XSwgTCA9IHt9LCB5ID0gZy5zZXJpZXMsIEIgPSB5Lmxlbmd0aCwgWCA9IGcub3B0aW9ucy5yZXZlcnNlZFN0YWNrcyA/IDEgOiAtMSwgRiA9IHkuaW5kZXhPZih6KTtcbiAgICAgICAgICBpZiAoQSA9IEEgfHwgdGhpcy5wb2ludHMsIHRoaXMub3B0aW9ucy5zdGFja2luZykge1xuICAgICAgICAgICAgZm9yIChsZXQgdyA9IDA7IHcgPCBBLmxlbmd0aDsgdysrKVxuICAgICAgICAgICAgICBBW3ddLmxlZnROdWxsID0gQVt3XS5yaWdodE51bGwgPSB2b2lkIDAsIExbQVt3XS54XSA9IEFbd107XG4gICAgICAgICAgICBkKHYsIGZ1bmN0aW9uKHcsIEgpIHtcbiAgICAgICAgICAgICAgdy50b3RhbCAhPT0gbnVsbCAmJiBPLnB1c2goSCk7XG4gICAgICAgICAgICB9KSwgTy5zb3J0KGZ1bmN0aW9uKHcsIEgpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIHcgLSBIO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBsZXQgVCA9IHkubWFwKCh3KSA9PiB3LnZpc2libGUpO1xuICAgICAgICAgICAgTy5mb3JFYWNoKGZ1bmN0aW9uKHcsIEgpIHtcbiAgICAgICAgICAgICAgbGV0IEMgPSAwLCBxLCBtO1xuICAgICAgICAgICAgICBpZiAoTFt3XSAmJiAhTFt3XS5pc051bGwpXG4gICAgICAgICAgICAgICAgZi5wdXNoKExbd10pLCBbLTEsIDFdLmZvckVhY2goZnVuY3Rpb24oaykge1xuICAgICAgICAgICAgICAgICAgbGV0IHggPSBrID09PSAxID8gXCJyaWdodE51bGxcIiA6IFwibGVmdE51bGxcIiwgTiA9IHZbT1tIICsga11dLCBWID0gMDtcbiAgICAgICAgICAgICAgICAgIGlmIChOKSB7XG4gICAgICAgICAgICAgICAgICAgIGxldCBSID0gRjtcbiAgICAgICAgICAgICAgICAgICAgZm9yICg7IFIgPj0gMCAmJiBSIDwgQjsgKSB7XG4gICAgICAgICAgICAgICAgICAgICAgbGV0IEkgPSB5W1JdLmluZGV4O1xuICAgICAgICAgICAgICAgICAgICAgICEocSA9IE4ucG9pbnRzW0ldKSAmJiAoSSA9PT0gei5pbmRleCA/IExbd11beF0gPSAhMCA6IFRbUl0gJiYgKG0gPSB2W3ddLnBvaW50c1tJXSkgJiYgKFYgLT0gbVsxXSAtIG1bMF0pKSwgUiArPSBYO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICBMW3ddW2sgPT09IDEgPyBcInJpZ2h0Q2xpZmZcIiA6IFwibGVmdENsaWZmXCJdID0gVjtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgbGV0IGsgPSBGO1xuICAgICAgICAgICAgICAgIGZvciAoOyBrID49IDAgJiYgayA8IEI7ICkge1xuICAgICAgICAgICAgICAgICAgbGV0IHggPSB5W2tdLmluZGV4O1xuICAgICAgICAgICAgICAgICAgaWYgKHEgPSB2W3ddLnBvaW50c1t4XSkge1xuICAgICAgICAgICAgICAgICAgICBDID0gcVsxXTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICBrICs9IFg7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIEMgPSBiKEMsIDApLCBDID0gZy50cmFuc2xhdGUoQywgMCwgMSwgMCwgMSksIGYucHVzaCh7IGlzTnVsbDogITAsIHBsb3RYOiBoLnRyYW5zbGF0ZSh3LCAwLCAwLCAwLCAxKSwgeDogdywgcGxvdFk6IEMsIHlCb3R0b206IEMgfSk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gZjtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIE0uZGVmYXVsdE9wdGlvbnMgPSBwKHMuZGVmYXVsdE9wdGlvbnMsIHIpLCBsKE0ucHJvdG90eXBlLCB7IHNpbmdsZVN0YWNrczogITEgfSksIGkucmVnaXN0ZXJTZXJpZXNUeXBlKFwiYXJlYVwiLCBNKSwgTTtcbiAgICB9KSwgbihvLCBcIlNlcmllcy9TcGxpbmUvU3BsaW5lU2VyaWVzLmpzXCIsIFtvW1wiQ29yZS9TZXJpZXMvU2VyaWVzUmVnaXN0cnkuanNcIl0sIG9bXCJDb3JlL1V0aWxpdGllcy5qc1wiXV0sIGZ1bmN0aW9uKHIsIGkpIHtcbiAgICAgIGxldCB7IGxpbmU6IGEgfSA9IHIuc2VyaWVzVHlwZXMsIHsgbWVyZ2U6IHMsIHBpY2s6IGwgfSA9IGk7XG4gICAgICBjbGFzcyBwIGV4dGVuZHMgYSB7XG4gICAgICAgIGdldFBvaW50U3BsaW5lKGIsIE0sIHUpIHtcbiAgICAgICAgICBsZXQgQSwgeiwgZiwgTywgaCA9IE0ucGxvdFggfHwgMCwgZyA9IE0ucGxvdFkgfHwgMCwgdiA9IGJbdSAtIDFdLCBMID0gYlt1ICsgMV07XG4gICAgICAgICAgZnVuY3Rpb24geShYKSB7XG4gICAgICAgICAgICByZXR1cm4gWCAmJiAhWC5pc051bGwgJiYgWC5kb0N1cnZlICE9PSAhMSAmJiAhTS5pc0NsaWZmO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoeSh2KSAmJiB5KEwpKSB7XG4gICAgICAgICAgICBsZXQgWCA9IHYucGxvdFggfHwgMCwgRiA9IHYucGxvdFkgfHwgMCwgVCA9IEwucGxvdFggfHwgMCwgdyA9IEwucGxvdFkgfHwgMCwgSCA9IDA7XG4gICAgICAgICAgICBBID0gKDEuNSAqIGggKyBYKSAvIDIuNSwgeiA9ICgxLjUgKiBnICsgRikgLyAyLjUsIGYgPSAoMS41ICogaCArIFQpIC8gMi41LCBPID0gKDEuNSAqIGcgKyB3KSAvIDIuNSwgZiAhPT0gQSAmJiAoSCA9IChPIC0geikgKiAoZiAtIGgpIC8gKGYgLSBBKSArIGcgLSBPKSwgeiArPSBILCBPICs9IEgsIHogPiBGICYmIHogPiBnID8gKHogPSBNYXRoLm1heChGLCBnKSwgTyA9IDIgKiBnIC0geikgOiB6IDwgRiAmJiB6IDwgZyAmJiAoeiA9IE1hdGgubWluKEYsIGcpLCBPID0gMiAqIGcgLSB6KSwgTyA+IHcgJiYgTyA+IGcgPyAoTyA9IE1hdGgubWF4KHcsIGcpLCB6ID0gMiAqIGcgLSBPKSA6IE8gPCB3ICYmIE8gPCBnICYmIChPID0gTWF0aC5taW4odywgZyksIHogPSAyICogZyAtIE8pLCBNLnJpZ2h0Q29udFggPSBmLCBNLnJpZ2h0Q29udFkgPSBPLCBNLmNvbnRyb2xQb2ludHMgPSB7IGxvdzogW0EsIHpdLCBoaWdoOiBbZiwgT10gfTtcbiAgICAgICAgICB9XG4gICAgICAgICAgbGV0IEIgPSBbXCJDXCIsIGwodi5yaWdodENvbnRYLCB2LnBsb3RYLCAwKSwgbCh2LnJpZ2h0Q29udFksIHYucGxvdFksIDApLCBsKEEsIGgsIDApLCBsKHosIGcsIDApLCBoLCBnXTtcbiAgICAgICAgICByZXR1cm4gdi5yaWdodENvbnRYID0gdi5yaWdodENvbnRZID0gdm9pZCAwLCBCO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gcC5kZWZhdWx0T3B0aW9ucyA9IHMoYS5kZWZhdWx0T3B0aW9ucyksIHIucmVnaXN0ZXJTZXJpZXNUeXBlKFwic3BsaW5lXCIsIHApLCBwO1xuICAgIH0pLCBuKG8sIFwiU2VyaWVzL0FyZWFTcGxpbmUvQXJlYVNwbGluZVNlcmllcy5qc1wiLCBbb1tcIlNlcmllcy9TcGxpbmUvU3BsaW5lU2VyaWVzLmpzXCJdLCBvW1wiQ29yZS9TZXJpZXMvU2VyaWVzUmVnaXN0cnkuanNcIl0sIG9bXCJDb3JlL1V0aWxpdGllcy5qc1wiXV0sIGZ1bmN0aW9uKHIsIGksIGEpIHtcbiAgICAgIGxldCB7IGFyZWE6IHMsIGFyZWE6IHsgcHJvdG90eXBlOiBsIH0gfSA9IGkuc2VyaWVzVHlwZXMsIHsgZXh0ZW5kOiBwLCBtZXJnZTogZCB9ID0gYTtcbiAgICAgIGNsYXNzIGIgZXh0ZW5kcyByIHtcbiAgICAgIH1cbiAgICAgIHJldHVybiBiLmRlZmF1bHRPcHRpb25zID0gZChyLmRlZmF1bHRPcHRpb25zLCBzLmRlZmF1bHRPcHRpb25zKSwgcChiLnByb3RvdHlwZSwgeyBnZXRHcmFwaFBhdGg6IGwuZ2V0R3JhcGhQYXRoLCBnZXRTdGFja1BvaW50czogbC5nZXRTdGFja1BvaW50cywgZHJhd0dyYXBoOiBsLmRyYXdHcmFwaCB9KSwgaS5yZWdpc3RlclNlcmllc1R5cGUoXCJhcmVhc3BsaW5lXCIsIGIpLCBiO1xuICAgIH0pLCBuKG8sIFwiU2VyaWVzL0NvbHVtbi9Db2x1bW5TZXJpZXNEZWZhdWx0cy5qc1wiLCBbXSwgZnVuY3Rpb24oKSB7XG4gICAgICByZXR1cm4geyBib3JkZXJSYWRpdXM6IDMsIGNlbnRlckluQ2F0ZWdvcnk6ICExLCBncm91cFBhZGRpbmc6IDAuMiwgbWFya2VyOiBudWxsLCBwb2ludFBhZGRpbmc6IDAuMSwgbWluUG9pbnRMZW5ndGg6IDAsIGNyb3BUaHJlc2hvbGQ6IDUwLCBwb2ludFJhbmdlOiBudWxsLCBzdGF0ZXM6IHsgaG92ZXI6IHsgaGFsbzogITEsIGJyaWdodG5lc3M6IDAuMSB9LCBzZWxlY3Q6IHsgY29sb3I6IFwiI2NjY2NjY1wiLCBib3JkZXJDb2xvcjogXCIjMDAwMDAwXCIgfSB9LCBkYXRhTGFiZWxzOiB7IGFsaWduOiB2b2lkIDAsIHZlcnRpY2FsQWxpZ246IHZvaWQgMCwgeTogdm9pZCAwIH0sIHN0YXJ0RnJvbVRocmVzaG9sZDogITAsIHN0aWNreVRyYWNraW5nOiAhMSwgdG9vbHRpcDogeyBkaXN0YW5jZTogNiB9LCB0aHJlc2hvbGQ6IDAsIGJvcmRlckNvbG9yOiBcIiNmZmZmZmZcIiB9O1xuICAgIH0pLCBuKG8sIFwiU2VyaWVzL0NvbHVtbi9Db2x1bW5TZXJpZXMuanNcIiwgW29bXCJDb3JlL0FuaW1hdGlvbi9BbmltYXRpb25VdGlsaXRpZXMuanNcIl0sIG9bXCJDb3JlL0NvbG9yL0NvbG9yLmpzXCJdLCBvW1wiU2VyaWVzL0NvbHVtbi9Db2x1bW5TZXJpZXNEZWZhdWx0cy5qc1wiXSwgb1tcIkNvcmUvR2xvYmFscy5qc1wiXSwgb1tcIkNvcmUvU2VyaWVzL1Nlcmllcy5qc1wiXSwgb1tcIkNvcmUvU2VyaWVzL1Nlcmllc1JlZ2lzdHJ5LmpzXCJdLCBvW1wiQ29yZS9VdGlsaXRpZXMuanNcIl1dLCBmdW5jdGlvbihyLCBpLCBhLCBzLCBsLCBwLCBkKSB7XG4gICAgICBsZXQgeyBhbmltT2JqZWN0OiBiIH0gPSByLCB7IHBhcnNlOiBNIH0gPSBpLCB7IG5vb3A6IHUgfSA9IHMsIHsgY2xhbXA6IEEsIGNyaXNwOiB6LCBkZWZpbmVkOiBmLCBleHRlbmQ6IE8sIGZpcmVFdmVudDogaCwgaXNBcnJheTogZywgaXNOdW1iZXI6IHYsIG1lcmdlOiBMLCBwaWNrOiB5LCBvYmplY3RFYWNoOiBCIH0gPSBkO1xuICAgICAgY2xhc3MgWCBleHRlbmRzIGwge1xuICAgICAgICBhbmltYXRlKFQpIHtcbiAgICAgICAgICBsZXQgdywgSCwgQyA9IHRoaXMsIHEgPSB0aGlzLnlBeGlzLCBtID0gcS5wb3MsIGsgPSBxLnJldmVyc2VkLCB4ID0gQy5vcHRpb25zLCB7IGNsaXBPZmZzZXQ6IE4sIGludmVydGVkOiBWIH0gPSB0aGlzLmNoYXJ0LCBSID0ge30sIEkgPSBWID8gXCJ0cmFuc2xhdGVYXCIgOiBcInRyYW5zbGF0ZVlcIjtcbiAgICAgICAgICBUICYmIE4gPyAoUi5zY2FsZVkgPSAxZS0zLCBIID0gQShxLnRvUGl4ZWxzKHgudGhyZXNob2xkKSwgbSwgbSArIHEubGVuKSwgViA/IChIICs9IGsgPyAtTWF0aC5mbG9vcihOWzBdKSA6IE1hdGguY2VpbChOWzJdKSwgUi50cmFuc2xhdGVYID0gSCAtIHEubGVuKSA6IChIICs9IGsgPyBNYXRoLmNlaWwoTlswXSkgOiAtTWF0aC5mbG9vcihOWzJdKSwgUi50cmFuc2xhdGVZID0gSCksIEMuY2xpcEJveCAmJiBDLnNldENsaXAoKSwgQy5ncm91cC5hdHRyKFIpKSA6ICh3ID0gTnVtYmVyKEMuZ3JvdXAuYXR0cihJKSksIEMuZ3JvdXAuYW5pbWF0ZSh7IHNjYWxlWTogMSB9LCBPKGIoQy5vcHRpb25zLmFuaW1hdGlvbiksIHsgc3RlcDogZnVuY3Rpb24oaiwgVSkge1xuICAgICAgICAgICAgQy5ncm91cCAmJiAoUltJXSA9IHcgKyBVLnBvcyAqIChtIC0gdyksIEMuZ3JvdXAuYXR0cihSKSk7XG4gICAgICAgICAgfSB9KSkpO1xuICAgICAgICB9XG4gICAgICAgIGluaXQoVCwgdykge1xuICAgICAgICAgIHN1cGVyLmluaXQuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgICAgICAgICBsZXQgSCA9IHRoaXM7XG4gICAgICAgICAgKFQgPSBILmNoYXJ0KS5oYXNSZW5kZXJlZCAmJiBULnNlcmllcy5mb3JFYWNoKGZ1bmN0aW9uKEMpIHtcbiAgICAgICAgICAgIEMudHlwZSA9PT0gSC50eXBlICYmIChDLmlzRGlydHkgPSAhMCk7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgZ2V0Q29sdW1uTWV0cmljcygpIHtcbiAgICAgICAgICB2YXIgXywgcjE7XG4gICAgICAgICAgbGV0IFQgPSB0aGlzLCB3ID0gVC5vcHRpb25zLCBIID0gVC54QXhpcywgQyA9IFQueUF4aXMsIHEgPSBILm9wdGlvbnMucmV2ZXJzZWRTdGFja3MsIG0gPSBILnJldmVyc2VkICYmICFxIHx8ICFILnJldmVyc2VkICYmIHEsIGsgPSB7fSwgeCwgTiA9IDA7XG4gICAgICAgICAgdy5ncm91cGluZyA9PT0gITEgPyBOID0gMSA6IFQuY2hhcnQuc2VyaWVzLmZvckVhY2goZnVuY3Rpb24oSykge1xuICAgICAgICAgICAgbGV0IFEsIEUgPSBLLnlBeGlzLCBEID0gSy5vcHRpb25zO1xuICAgICAgICAgICAgSy50eXBlID09PSBULnR5cGUgJiYgSy5yZXNlcnZlU3BhY2UoKSAmJiBDLmxlbiA9PT0gRS5sZW4gJiYgQy5wb3MgPT09IEUucG9zICYmIChELnN0YWNraW5nICYmIEQuc3RhY2tpbmcgIT09IFwiZ3JvdXBcIiA/IChrW3ggPSBLLnN0YWNrS2V5XSA9PT0gdm9pZCAwICYmIChrW3hdID0gTisrKSwgUSA9IGtbeF0pIDogRC5ncm91cGluZyAhPT0gITEgJiYgKFEgPSBOKyspLCBLLmNvbHVtbkluZGV4ID0gUSk7XG4gICAgICAgICAgfSk7XG4gICAgICAgICAgbGV0IFYgPSBNYXRoLm1pbihNYXRoLmFicyhILnRyYW5zQSkgKiAoISgoXyA9IEguYnJva2VuQXhpcykgIT0gbnVsbCAmJiBfLmhhc0JyZWFrcykgJiYgKChyMSA9IEgub3JkaW5hbCkgPT0gbnVsbCA/IHZvaWQgMCA6IHIxLnNsb3BlKSB8fCB3LnBvaW50UmFuZ2UgfHwgSC5jbG9zZXN0UG9pbnRSYW5nZSB8fCBILnRpY2tJbnRlcnZhbCB8fCAxKSwgSC5sZW4pLCBSID0gViAqIHcuZ3JvdXBQYWRkaW5nLCBJID0gKFYgLSAyICogUikgLyAoTiB8fCAxKSwgaiA9IE1hdGgubWluKHcubWF4UG9pbnRXaWR0aCB8fCBILmxlbiwgeSh3LnBvaW50V2lkdGgsIEkgKiAoMSAtIDIgKiB3LnBvaW50UGFkZGluZykpKSwgVSA9IChULmNvbHVtbkluZGV4IHx8IDApICsgKG0gPyAxIDogMCk7XG4gICAgICAgICAgcmV0dXJuIFQuY29sdW1uTWV0cmljcyA9IHsgd2lkdGg6IGosIG9mZnNldDogKEkgLSBqKSAvIDIgKyAoUiArIFUgKiBJIC0gViAvIDIpICogKG0gPyAtMSA6IDEpLCBwYWRkZWRXaWR0aDogSSwgY29sdW1uQ291bnQ6IE4gfSwgVC5jb2x1bW5NZXRyaWNzO1xuICAgICAgICB9XG4gICAgICAgIGNyaXNwQ29sKFQsIHcsIEgsIEMpIHtcbiAgICAgICAgICBsZXQgcSA9IHRoaXMuYm9yZGVyV2lkdGgsIG0gPSB0aGlzLmNoYXJ0LmludmVydGVkO1xuICAgICAgICAgIHJldHVybiBDID0geih3ICsgQywgcSwgbSkgLSAodyA9IHoodywgcSwgbSkpLCB0aGlzLm9wdGlvbnMuY3Jpc3AgJiYgKEggPSB6KFQgKyBILCBxKSAtIChUID0geihULCBxKSkpLCB7IHg6IFQsIHk6IHcsIHdpZHRoOiBILCBoZWlnaHQ6IEMgfTtcbiAgICAgICAgfVxuICAgICAgICBhZGp1c3RGb3JNaXNzaW5nQ29sdW1ucyhULCB3LCBILCBDKSB7XG4gICAgICAgICAgdmFyIHE7XG4gICAgICAgICAgaWYgKCFILmlzTnVsbCAmJiBDLmNvbHVtbkNvdW50ID4gMSkge1xuICAgICAgICAgICAgbGV0IG0gPSB0aGlzLnhBeGlzLnNlcmllcy5maWx0ZXIoKFYpID0+IFYudmlzaWJsZSkubWFwKChWKSA9PiBWLmluZGV4KSwgayA9IDAsIHggPSAwO1xuICAgICAgICAgICAgQigocSA9IHRoaXMueEF4aXMuc3RhY2tpbmcpID09IG51bGwgPyB2b2lkIDAgOiBxLnN0YWNrcywgKFYpID0+IHtcbiAgICAgICAgICAgICAgaWYgKHR5cGVvZiBILnggPT0gXCJudW1iZXJcIikge1xuICAgICAgICAgICAgICAgIGxldCBSID0gVltILngudG9TdHJpbmcoKV07XG4gICAgICAgICAgICAgICAgaWYgKFIgJiYgZyhSLnBvaW50c1t0aGlzLmluZGV4XSkpIHtcbiAgICAgICAgICAgICAgICAgIGxldCBJID0gT2JqZWN0LmtleXMoUi5wb2ludHMpLmZpbHRlcigoaikgPT4gIWoubWF0Y2goXCIsXCIpICYmIFIucG9pbnRzW2pdICYmIFIucG9pbnRzW2pdLmxlbmd0aCA+IDEpLm1hcChwYXJzZUZsb2F0KS5maWx0ZXIoKGopID0+IG0uaW5kZXhPZihqKSAhPT0gLTEpLnNvcnQoKGosIFUpID0+IFUgLSBqKTtcbiAgICAgICAgICAgICAgICAgIGsgPSBJLmluZGV4T2YodGhpcy5pbmRleCksIHggPSBJLmxlbmd0aDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pLCBrID0gdGhpcy54QXhpcy5yZXZlcnNlZCA/IHggLSAxIC0gayA6IGs7XG4gICAgICAgICAgICBsZXQgTiA9ICh4IC0gMSkgKiBDLnBhZGRlZFdpZHRoICsgdztcbiAgICAgICAgICAgIFQgPSAoSC5wbG90WCB8fCAwKSArIE4gLyAyIC0gdyAtIGsgKiBDLnBhZGRlZFdpZHRoO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gVDtcbiAgICAgICAgfVxuICAgICAgICB0cmFuc2xhdGUoKSB7XG4gICAgICAgICAgbGV0IFQgPSB0aGlzLCB3ID0gVC5jaGFydCwgSCA9IFQub3B0aW9ucywgQyA9IFQuZGVuc2UgPSBULmNsb3Nlc3RQb2ludFJhbmdlICogVC54QXhpcy50cmFuc0EgPCAyLCBxID0gVC5ib3JkZXJXaWR0aCA9IHkoSC5ib3JkZXJXaWR0aCwgQyA/IDAgOiAxKSwgbSA9IFQueEF4aXMsIGsgPSBULnlBeGlzLCB4ID0gSC50aHJlc2hvbGQsIE4gPSB5KEgubWluUG9pbnRMZW5ndGgsIDUpLCBWID0gVC5nZXRDb2x1bW5NZXRyaWNzKCksIFIgPSBWLndpZHRoLCBJID0gVC5wb2ludFhPZmZzZXQgPSBWLm9mZnNldCwgaiA9IFQuZGF0YU1pbiwgVSA9IFQuZGF0YU1heCwgXyA9IFQudHJhbnNsYXRlZFRocmVzaG9sZCA9IGsuZ2V0VGhyZXNob2xkKHgpLCByMSA9IFQuYmFyVyA9IE1hdGgubWF4KFIsIDEgKyAyICogcSk7XG4gICAgICAgICAgSC5wb2ludFBhZGRpbmcgJiYgKHIxID0gTWF0aC5jZWlsKHIxKSksIGwucHJvdG90eXBlLnRyYW5zbGF0ZS5hcHBseShUKSwgVC5wb2ludHMuZm9yRWFjaChmdW5jdGlvbihLKSB7XG4gICAgICAgICAgICBsZXQgUSA9IHkoSy55Qm90dG9tLCBfKSwgRSA9IDk5OSArIE1hdGguYWJzKFEpLCBEID0gSy5wbG90WCB8fCAwLCBHID0gQShLLnBsb3RZLCAtRSwgay5sZW4gKyBFKSwgSiwgUyA9IE1hdGgubWluKEcsIFEpLCBXID0gTWF0aC5tYXgoRywgUSkgLSBTLCBQID0gUiwgWSA9IEQgKyBJLCBaID0gcjE7XG4gICAgICAgICAgICBOICYmIE1hdGguYWJzKFcpIDwgTiAmJiAoVyA9IE4sIEogPSAhay5yZXZlcnNlZCAmJiAhSy5uZWdhdGl2ZSB8fCBrLnJldmVyc2VkICYmIEsubmVnYXRpdmUsIHYoeCkgJiYgdihVKSAmJiBLLnkgPT09IHggJiYgVSA8PSB4ICYmIChrLm1pbiB8fCAwKSA8IHggJiYgKGogIT09IFUgfHwgKGsubWF4IHx8IDApIDw9IHgpICYmIChKID0gIUosIEsubmVnYXRpdmUgPSAhSy5uZWdhdGl2ZSksIFMgPSBNYXRoLmFicyhTIC0gXykgPiBOID8gUSAtIE4gOiBfIC0gKEogPyBOIDogMCkpLCBmKEsub3B0aW9ucy5wb2ludFdpZHRoKSAmJiAoWSAtPSBNYXRoLnJvdW5kKCgoUCA9IFogPSBNYXRoLmNlaWwoSy5vcHRpb25zLnBvaW50V2lkdGgpKSAtIFIpIC8gMikpLCBILmNlbnRlckluQ2F0ZWdvcnkgJiYgIUguc3RhY2tpbmcgJiYgKFkgPSBULmFkanVzdEZvck1pc3NpbmdDb2x1bW5zKFksIFAsIEssIFYpKSwgSy5iYXJYID0gWSwgSy5wb2ludFdpZHRoID0gUCwgSy50b29sdGlwUG9zID0gdy5pbnZlcnRlZCA/IFtBKGsubGVuICsgay5wb3MgLSB3LnBsb3RMZWZ0IC0gRywgay5wb3MgLSB3LnBsb3RMZWZ0LCBrLmxlbiArIGsucG9zIC0gdy5wbG90TGVmdCksIG0ubGVuICsgbS5wb3MgLSB3LnBsb3RUb3AgLSBZIC0gWiAvIDIsIFddIDogW20ubGVmdCAtIHcucGxvdExlZnQgKyBZICsgWiAvIDIsIEEoRyArIGsucG9zIC0gdy5wbG90VG9wLCBrLnBvcyAtIHcucGxvdFRvcCwgay5sZW4gKyBrLnBvcyAtIHcucGxvdFRvcCksIFddLCBLLnNoYXBlVHlwZSA9IFQucG9pbnRDbGFzcy5wcm90b3R5cGUuc2hhcGVUeXBlIHx8IFwicm91bmRlZFJlY3RcIiwgSy5zaGFwZUFyZ3MgPSBULmNyaXNwQ29sKFksIEsuaXNOdWxsID8gXyA6IFMsIFosIEsuaXNOdWxsID8gMCA6IFcpO1xuICAgICAgICAgIH0pLCBoKHRoaXMsIFwiYWZ0ZXJDb2x1bW5UcmFuc2xhdGVcIik7XG4gICAgICAgIH1cbiAgICAgICAgZHJhd0dyYXBoKCkge1xuICAgICAgICAgIHRoaXMuZ3JvdXBbdGhpcy5kZW5zZSA/IFwiYWRkQ2xhc3NcIiA6IFwicmVtb3ZlQ2xhc3NcIl0oXCJoaWdoY2hhcnRzLWRlbnNlLWRhdGFcIik7XG4gICAgICAgIH1cbiAgICAgICAgcG9pbnRBdHRyaWJzKFQsIHcpIHtcbiAgICAgICAgICBsZXQgSCA9IHRoaXMub3B0aW9ucywgQyA9IHRoaXMucG9pbnRBdHRyVG9PcHRpb25zIHx8IHt9LCBxID0gQy5zdHJva2UgfHwgXCJib3JkZXJDb2xvclwiLCBtID0gQ1tcInN0cm9rZS13aWR0aFwiXSB8fCBcImJvcmRlcldpZHRoXCIsIGssIHgsIE4sIFYgPSBUICYmIFQuY29sb3IgfHwgdGhpcy5jb2xvciwgUiA9IFQgJiYgVFtxXSB8fCBIW3FdIHx8IFYsIEkgPSBUICYmIFQub3B0aW9ucy5kYXNoU3R5bGUgfHwgSC5kYXNoU3R5bGUsIGogPSBUICYmIFRbbV0gfHwgSFttXSB8fCB0aGlzW21dIHx8IDAsIFUgPSB5KFQgJiYgVC5vcGFjaXR5LCBILm9wYWNpdHksIDEpO1xuICAgICAgICAgIFQgJiYgdGhpcy56b25lcy5sZW5ndGggJiYgKHggPSBULmdldFpvbmUoKSwgViA9IFQub3B0aW9ucy5jb2xvciB8fCB4ICYmICh4LmNvbG9yIHx8IFQubm9uWm9uZWRDb2xvcikgfHwgdGhpcy5jb2xvciwgeCAmJiAoUiA9IHguYm9yZGVyQ29sb3IgfHwgUiwgSSA9IHguZGFzaFN0eWxlIHx8IEksIGogPSB4LmJvcmRlcldpZHRoIHx8IGopKSwgdyAmJiBUICYmIChOID0gKGsgPSBMKEguc3RhdGVzW3ddLCBULm9wdGlvbnMuc3RhdGVzICYmIFQub3B0aW9ucy5zdGF0ZXNbd10gfHwge30pKS5icmlnaHRuZXNzLCBWID0gay5jb2xvciB8fCBOICE9PSB2b2lkIDAgJiYgTShWKS5icmlnaHRlbihrLmJyaWdodG5lc3MpLmdldCgpIHx8IFYsIFIgPSBrW3FdIHx8IFIsIGogPSBrW21dIHx8IGosIEkgPSBrLmRhc2hTdHlsZSB8fCBJLCBVID0geShrLm9wYWNpdHksIFUpKTtcbiAgICAgICAgICBsZXQgXyA9IHsgZmlsbDogViwgc3Ryb2tlOiBSLCBcInN0cm9rZS13aWR0aFwiOiBqLCBvcGFjaXR5OiBVIH07XG4gICAgICAgICAgcmV0dXJuIEkgJiYgKF8uZGFzaHN0eWxlID0gSSksIF87XG4gICAgICAgIH1cbiAgICAgICAgZHJhd1BvaW50cyhUID0gdGhpcy5wb2ludHMpIHtcbiAgICAgICAgICBsZXQgdywgSCA9IHRoaXMsIEMgPSB0aGlzLmNoYXJ0LCBxID0gSC5vcHRpb25zLCBtID0gQy5yZW5kZXJlciwgayA9IHEuYW5pbWF0aW9uTGltaXQgfHwgMjUwO1xuICAgICAgICAgIFQuZm9yRWFjaChmdW5jdGlvbih4KSB7XG4gICAgICAgICAgICBsZXQgTiA9IHgucGxvdFksIFYgPSB4LmdyYXBoaWMsIFIgPSAhIVYsIEkgPSBWICYmIEMucG9pbnRDb3VudCA8IGsgPyBcImFuaW1hdGVcIiA6IFwiYXR0clwiO1xuICAgICAgICAgICAgdihOKSAmJiB4LnkgIT09IG51bGwgPyAodyA9IHguc2hhcGVBcmdzLCBWICYmIHguaGFzTmV3U2hhcGVUeXBlKCkgJiYgKFYgPSBWLmRlc3Ryb3koKSksIEguZW5hYmxlZERhdGFTb3J0aW5nICYmICh4LnN0YXJ0WFBvcyA9IEgueEF4aXMucmV2ZXJzZWQgPyAtKHcgJiYgdy53aWR0aCB8fCAwKSA6IEgueEF4aXMud2lkdGgpLCAhViAmJiAoeC5ncmFwaGljID0gViA9IG1beC5zaGFwZVR5cGVdKHcpLmFkZCh4Lmdyb3VwIHx8IEguZ3JvdXApLCBWICYmIEguZW5hYmxlZERhdGFTb3J0aW5nICYmIEMuaGFzUmVuZGVyZWQgJiYgQy5wb2ludENvdW50IDwgayAmJiAoVi5hdHRyKHsgeDogeC5zdGFydFhQb3MgfSksIFIgPSAhMCwgSSA9IFwiYW5pbWF0ZVwiKSksIFYgJiYgUiAmJiBWW0ldKEwodykpLCBDLnN0eWxlZE1vZGUgfHwgVltJXShILnBvaW50QXR0cmlicyh4LCB4LnNlbGVjdGVkICYmIFwic2VsZWN0XCIpKS5zaGFkb3coeC5hbGxvd1NoYWRvdyAhPT0gITEgJiYgcS5zaGFkb3cpLCBWICYmIChWLmFkZENsYXNzKHguZ2V0Q2xhc3NOYW1lKCksICEwKSwgVi5hdHRyKHsgdmlzaWJpbGl0eTogeC52aXNpYmxlID8gXCJpbmhlcml0XCIgOiBcImhpZGRlblwiIH0pKSkgOiBWICYmICh4LmdyYXBoaWMgPSBWLmRlc3Ryb3koKSk7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgZHJhd1RyYWNrZXIoVCA9IHRoaXMucG9pbnRzKSB7XG4gICAgICAgICAgbGV0IHcsIEggPSB0aGlzLCBDID0gSC5jaGFydCwgcSA9IEMucG9pbnRlciwgbSA9IGZ1bmN0aW9uKGspIHtcbiAgICAgICAgICAgIGxldCB4ID0gcSA9PSBudWxsID8gdm9pZCAwIDogcS5nZXRQb2ludEZyb21FdmVudChrKTtcbiAgICAgICAgICAgIHEgJiYgeCAmJiBILm9wdGlvbnMuZW5hYmxlTW91c2VUcmFja2luZyAmJiAocS5pc0RpcmVjdFRvdWNoID0gITAsIHgub25Nb3VzZU92ZXIoaykpO1xuICAgICAgICAgIH07XG4gICAgICAgICAgVC5mb3JFYWNoKGZ1bmN0aW9uKGspIHtcbiAgICAgICAgICAgIHcgPSBnKGsuZGF0YUxhYmVscykgPyBrLmRhdGFMYWJlbHMgOiBrLmRhdGFMYWJlbCA/IFtrLmRhdGFMYWJlbF0gOiBbXSwgay5ncmFwaGljICYmIChrLmdyYXBoaWMuZWxlbWVudC5wb2ludCA9IGspLCB3LmZvckVhY2goZnVuY3Rpb24oeCkge1xuICAgICAgICAgICAgICAoeC5kaXYgfHwgeC5lbGVtZW50KS5wb2ludCA9IGs7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9KSwgSC5faGFzVHJhY2tpbmcgfHwgKEgudHJhY2tlckdyb3Vwcy5mb3JFYWNoKGZ1bmN0aW9uKGspIHtcbiAgICAgICAgICAgIEhba10gJiYgKEhba10uYWRkQ2xhc3MoXCJoaWdoY2hhcnRzLXRyYWNrZXJcIikub24oXCJtb3VzZW92ZXJcIiwgbSkub24oXCJtb3VzZW91dFwiLCBmdW5jdGlvbih4KSB7XG4gICAgICAgICAgICAgIHEgPT0gbnVsbCB8fCBxLm9uVHJhY2tlck1vdXNlT3V0KHgpO1xuICAgICAgICAgICAgfSkub24oXCJ0b3VjaHN0YXJ0XCIsIG0pLCAhQy5zdHlsZWRNb2RlICYmIEgub3B0aW9ucy5jdXJzb3IgJiYgSFtrXS5jc3MoeyBjdXJzb3I6IEgub3B0aW9ucy5jdXJzb3IgfSkpO1xuICAgICAgICAgIH0pLCBILl9oYXNUcmFja2luZyA9ICEwKSwgaCh0aGlzLCBcImFmdGVyRHJhd1RyYWNrZXJcIik7XG4gICAgICAgIH1cbiAgICAgICAgcmVtb3ZlKCkge1xuICAgICAgICAgIGxldCBUID0gdGhpcywgdyA9IFQuY2hhcnQ7XG4gICAgICAgICAgdy5oYXNSZW5kZXJlZCAmJiB3LnNlcmllcy5mb3JFYWNoKGZ1bmN0aW9uKEgpIHtcbiAgICAgICAgICAgIEgudHlwZSA9PT0gVC50eXBlICYmIChILmlzRGlydHkgPSAhMCk7XG4gICAgICAgICAgfSksIGwucHJvdG90eXBlLnJlbW92ZS5hcHBseShULCBhcmd1bWVudHMpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gWC5kZWZhdWx0T3B0aW9ucyA9IEwobC5kZWZhdWx0T3B0aW9ucywgYSksIE8oWC5wcm90b3R5cGUsIHsgZGlyZWN0VG91Y2g6ICEwLCBnZXRTeW1ib2w6IHUsIG5lZ1N0YWNrczogITAsIHRyYWNrZXJHcm91cHM6IFtcImdyb3VwXCIsIFwiZGF0YUxhYmVsc0dyb3VwXCJdIH0pLCBwLnJlZ2lzdGVyU2VyaWVzVHlwZShcImNvbHVtblwiLCBYKSwgWDtcbiAgICB9KSwgbihvLCBcIkNvcmUvU2VyaWVzL0RhdGFMYWJlbC5qc1wiLCBbb1tcIkNvcmUvQW5pbWF0aW9uL0FuaW1hdGlvblV0aWxpdGllcy5qc1wiXSwgb1tcIkNvcmUvVGVtcGxhdGluZy5qc1wiXSwgb1tcIkNvcmUvVXRpbGl0aWVzLmpzXCJdXSwgZnVuY3Rpb24ociwgaSwgYSkge1xuICAgICAgdmFyIHM7XG4gICAgICBsZXQgeyBnZXREZWZlcnJlZEFuaW1hdGlvbjogbCB9ID0gciwgeyBmb3JtYXQ6IHAgfSA9IGksIHsgZGVmaW5lZDogZCwgZXh0ZW5kOiBiLCBmaXJlRXZlbnQ6IE0sIGlzQXJyYXk6IHUsIGlzU3RyaW5nOiBBLCBtZXJnZTogeiwgb2JqZWN0RWFjaDogZiwgcGljazogTywgcEludDogaCwgc3BsYXQ6IGcgfSA9IGE7XG4gICAgICByZXR1cm4gZnVuY3Rpb24odikge1xuICAgICAgICBmdW5jdGlvbiBMKCkge1xuICAgICAgICAgIHJldHVybiBIKHRoaXMpLnNvbWUoKHEpID0+IHEgPT0gbnVsbCA/IHZvaWQgMCA6IHEuZW5hYmxlZCk7XG4gICAgICAgIH1cbiAgICAgICAgZnVuY3Rpb24geShxLCBtLCBrLCB4LCBOKSB7XG4gICAgICAgICAgdmFyIEc7XG4gICAgICAgICAgbGV0IHsgY2hhcnQ6IFYsIGVuYWJsZWREYXRhU29ydGluZzogUiB9ID0gdGhpcywgSSA9IHRoaXMuaXNDYXJ0ZXNpYW4gJiYgVi5pbnZlcnRlZCwgaiA9IHEucGxvdFgsIFUgPSBxLnBsb3RZLCBfID0gay5yb3RhdGlvbiB8fCAwLCByMSA9IGQoaikgJiYgZChVKSAmJiBWLmlzSW5zaWRlUGxvdChqLCBNYXRoLnJvdW5kKFUpLCB7IGludmVydGVkOiBJLCBwYW5lQ29vcmRpbmF0ZXM6ICEwLCBzZXJpZXM6IHRoaXMgfSksIEsgPSBfID09PSAwICYmIE8oay5vdmVyZmxvdywgUiA/IFwibm9uZVwiIDogXCJqdXN0aWZ5XCIpID09PSBcImp1c3RpZnlcIiwgUSA9IHRoaXMudmlzaWJsZSAmJiBxLnZpc2libGUgIT09ICExICYmIGQoaikgJiYgKHEuc2VyaWVzLmZvcmNlREwgfHwgUiAmJiAhSyB8fCByMSB8fCBPKGsuaW5zaWRlLCAhIXRoaXMub3B0aW9ucy5zdGFja2luZykgJiYgeCAmJiBWLmlzSW5zaWRlUGxvdChqLCBJID8geC54ICsgMSA6IHgueSArIHguaGVpZ2h0IC0gMSwgeyBpbnZlcnRlZDogSSwgcGFuZUNvb3JkaW5hdGVzOiAhMCwgc2VyaWVzOiB0aGlzIH0pKSwgRSA9IHEucG9zKCk7XG4gICAgICAgICAgaWYgKFEgJiYgRSkge1xuICAgICAgICAgICAgdmFyIEQ7XG4gICAgICAgICAgICBsZXQgSiA9IG0uZ2V0QkJveCgpLCBTID0gbS5nZXRCQm94KHZvaWQgMCwgMCksIFcgPSB7IHJpZ2h0OiAxLCBjZW50ZXI6IDAuNSB9W2suYWxpZ24gfHwgMF0gfHwgMCwgUCA9IHsgYm90dG9tOiAxLCBtaWRkbGU6IDAuNSB9W2sudmVydGljYWxBbGlnbiB8fCAwXSB8fCAwO1xuICAgICAgICAgICAgaWYgKHggPSBiKHsgeDogRVswXSwgeTogTWF0aC5yb3VuZChFWzFdKSwgd2lkdGg6IDAsIGhlaWdodDogMCB9LCB4IHx8IHt9KSwgay5hbGlnblRvID09PSBcInBsb3RFZGdlc1wiICYmIHRoaXMuaXNDYXJ0ZXNpYW4gJiYgKHhbSSA/IFwieFwiIDogXCJ5XCJdID0gMCwgeFtJID8gXCJ3aWR0aFwiIDogXCJoZWlnaHRcIl0gPSAoKEcgPSB0aGlzLnlBeGlzKSA9PSBudWxsID8gdm9pZCAwIDogRy5sZW4pIHx8IDApLCBiKGssIHsgd2lkdGg6IEoud2lkdGgsIGhlaWdodDogSi5oZWlnaHQgfSksIEQgPSB4LCBSICYmIHRoaXMueEF4aXMgJiYgIUsgJiYgdGhpcy5zZXREYXRhTGFiZWxTdGFydFBvcyhxLCBtLCBOLCByMSwgRCksIG0uYWxpZ24oeihrLCB7IHdpZHRoOiBTLndpZHRoLCBoZWlnaHQ6IFMuaGVpZ2h0IH0pLCAhMSwgeCwgITEpLCBtLmFsaWduQXR0ci54ICs9IFcgKiAoUy53aWR0aCAtIEoud2lkdGgpLCBtLmFsaWduQXR0ci55ICs9IFAgKiAoUy5oZWlnaHQgLSBKLmhlaWdodCksIG1bbS5wbGFjZWQgPyBcImFuaW1hdGVcIiA6IFwiYXR0clwiXSh7IHg6IG0uYWxpZ25BdHRyLnggKyAoSi53aWR0aCAtIFMud2lkdGgpIC8gMiwgeTogbS5hbGlnbkF0dHIueSArIChKLmhlaWdodCAtIFMuaGVpZ2h0KSAvIDIsIHJvdGF0aW9uT3JpZ2luWDogKG0ud2lkdGggfHwgMCkgLyAyLCByb3RhdGlvbk9yaWdpblk6IChtLmhlaWdodCB8fCAwKSAvIDIgfSksIEsgJiYgeC5oZWlnaHQgPj0gMClcbiAgICAgICAgICAgICAgdGhpcy5qdXN0aWZ5RGF0YUxhYmVsKG0sIGssIG0uYWxpZ25BdHRyLCBKLCB4LCBOKTtcbiAgICAgICAgICAgIGVsc2UgaWYgKE8oay5jcm9wLCAhMCkpIHtcbiAgICAgICAgICAgICAgbGV0IHsgeDogWSwgeTogWiB9ID0gbS5hbGlnbkF0dHI7XG4gICAgICAgICAgICAgIFEgPSBWLmlzSW5zaWRlUGxvdChZLCBaLCB7IHBhbmVDb29yZGluYXRlczogITAsIHNlcmllczogdGhpcyB9KSAmJiBWLmlzSW5zaWRlUGxvdChZICsgSi53aWR0aCAtIDEsIFogKyBKLmhlaWdodCAtIDEsIHsgcGFuZUNvb3JkaW5hdGVzOiAhMCwgc2VyaWVzOiB0aGlzIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgay5zaGFwZSAmJiAhXyAmJiBtW04gPyBcImF0dHJcIiA6IFwiYW5pbWF0ZVwiXSh7IGFuY2hvclg6IEVbMF0sIGFuY2hvclk6IEVbMV0gfSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIE4gJiYgUiAmJiAobS5wbGFjZWQgPSAhMSksIFEgfHwgUiAmJiAhSyA/IChtLnNob3coKSwgbS5wbGFjZWQgPSAhMCkgOiAobS5oaWRlKCksIG0ucGxhY2VkID0gITEpO1xuICAgICAgICB9XG4gICAgICAgIGZ1bmN0aW9uIEIoKSB7XG4gICAgICAgICAgcmV0dXJuIHRoaXMucGxvdEdyb3VwKFwiZGF0YUxhYmVsc0dyb3VwXCIsIFwiZGF0YS1sYWJlbHNcIiwgdGhpcy5oYXNSZW5kZXJlZCA/IFwiaW5oZXJpdFwiIDogXCJoaWRkZW5cIiwgdGhpcy5vcHRpb25zLmRhdGFMYWJlbHMuekluZGV4IHx8IDYpO1xuICAgICAgICB9XG4gICAgICAgIGZ1bmN0aW9uIFgocSkge1xuICAgICAgICAgIGxldCBtID0gdGhpcy5oYXNSZW5kZXJlZCB8fCAwLCBrID0gdGhpcy5pbml0RGF0YUxhYmVsc0dyb3VwKCkuYXR0cih7IG9wYWNpdHk6ICttIH0pO1xuICAgICAgICAgIHJldHVybiAhbSAmJiBrICYmICh0aGlzLnZpc2libGUgJiYgay5zaG93KCksIHRoaXMub3B0aW9ucy5hbmltYXRpb24gPyBrLmFuaW1hdGUoeyBvcGFjaXR5OiAxIH0sIHEpIDogay5hdHRyKHsgb3BhY2l0eTogMSB9KSksIGs7XG4gICAgICAgIH1cbiAgICAgICAgZnVuY3Rpb24gRihxKSB7XG4gICAgICAgICAgdmFyIFE7XG4gICAgICAgICAgbGV0IG07XG4gICAgICAgICAgcSA9IHEgfHwgdGhpcy5wb2ludHM7XG4gICAgICAgICAgbGV0IGsgPSB0aGlzLCB4ID0gay5jaGFydCwgTiA9IGsub3B0aW9ucywgViA9IHgucmVuZGVyZXIsIHsgYmFja2dyb3VuZENvbG9yOiBSLCBwbG90QmFja2dyb3VuZENvbG9yOiBJIH0gPSB4Lm9wdGlvbnMuY2hhcnQsIGogPSBWLmdldENvbnRyYXN0KEEoSSkgJiYgSSB8fCBBKFIpICYmIFIgfHwgXCIjMDAwMDAwXCIpLCBVID0gSChrKSwgeyBhbmltYXRpb246IF8sIGRlZmVyOiByMSB9ID0gVVswXSwgSyA9IHIxID8gbCh4LCBfLCBrKSA6IHsgZGVmZXI6IDAsIGR1cmF0aW9uOiAwIH07XG4gICAgICAgICAgTSh0aGlzLCBcImRyYXdEYXRhTGFiZWxzXCIpLCAoUSA9IGsuaGFzRGF0YUxhYmVscykgIT0gbnVsbCAmJiBRLmNhbGwoaykgJiYgKG0gPSB0aGlzLmluaXREYXRhTGFiZWxzKEspLCBxLmZvckVhY2goKEUpID0+IHtcbiAgICAgICAgICAgIHZhciBKLCBTO1xuICAgICAgICAgICAgbGV0IEQgPSBFLmRhdGFMYWJlbHMgfHwgW107XG4gICAgICAgICAgICBnKHcoVSwgRS5kbE9wdGlvbnMgfHwgKChKID0gRS5vcHRpb25zKSA9PSBudWxsID8gdm9pZCAwIDogSi5kYXRhTGFiZWxzKSkpLmZvckVhY2goKFcsIFApID0+IHtcbiAgICAgICAgICAgICAgbGV0IFkgPSBXLmVuYWJsZWQgJiYgKEUudmlzaWJsZSB8fCBFLmRhdGFMYWJlbE9uSGlkZGVuKSAmJiAoIUUuaXNOdWxsIHx8IEUuZGF0YUxhYmVsT25OdWxsKSAmJiBmdW5jdGlvbihBMSwgdTEpIHtcbiAgICAgICAgICAgICAgICBsZXQgaDEgPSB1MS5maWx0ZXI7XG4gICAgICAgICAgICAgICAgaWYgKGgxKSB7XG4gICAgICAgICAgICAgICAgICBsZXQgQzEgPSBoMS5vcGVyYXRvciwgcTEgPSBBMVtoMS5wcm9wZXJ0eV0sIFcxID0gaDEudmFsdWU7XG4gICAgICAgICAgICAgICAgICByZXR1cm4gQzEgPT09IFwiPlwiICYmIHExID4gVzEgfHwgQzEgPT09IFwiPFwiICYmIHExIDwgVzEgfHwgQzEgPT09IFwiPj1cIiAmJiBxMSA+PSBXMSB8fCBDMSA9PT0gXCI8PVwiICYmIHExIDw9IFcxIHx8IEMxID09PSBcIj09XCIgJiYgcTEgPT0gVzEgfHwgQzEgPT09IFwiPT09XCIgJiYgcTEgPT09IFcxIHx8IEMxID09PSBcIiE9XCIgJiYgcTEgIT0gVzEgfHwgQzEgPT09IFwiIT09XCIgJiYgcTEgIT09IFcxO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gITA7XG4gICAgICAgICAgICAgIH0oRSwgVyksIHsgYmFja2dyb3VuZENvbG9yOiBaLCBib3JkZXJDb2xvcjogdDEsIGRpc3RhbmNlOiBpMSwgc3R5bGU6IG4xID0ge30gfSA9IFcsIHMxLCBkMSwgYjEsIGMxLCBhMSA9IHt9LCBsMSA9IERbUF0sIHAxID0gIWwxLCBNMTtcbiAgICAgICAgICAgICAgWSAmJiAoZDEgPSBPKFdbRS5mb3JtYXRQcmVmaXggKyBcIkZvcm1hdFwiXSwgVy5mb3JtYXQpLCBzMSA9IEUuZ2V0TGFiZWxDb25maWcoKSwgYjEgPSBkKGQxKSA/IHAoZDEsIHMxLCB4KSA6IChXW0UuZm9ybWF0UHJlZml4ICsgXCJGb3JtYXR0ZXJcIl0gfHwgVy5mb3JtYXR0ZXIpLmNhbGwoczEsIFcpLCBjMSA9IFcucm90YXRpb24sICF4LnN0eWxlZE1vZGUgJiYgKG4xLmNvbG9yID0gTyhXLmNvbG9yLCBuMS5jb2xvciwgQShrLmNvbG9yKSA/IGsuY29sb3IgOiB2b2lkIDAsIFwiIzAwMDAwMFwiKSwgbjEuY29sb3IgPT09IFwiY29udHJhc3RcIiA/IChaICE9PSBcIm5vbmVcIiAmJiAoTTEgPSBaKSwgRS5jb250cmFzdENvbG9yID0gVi5nZXRDb250cmFzdChNMSAhPT0gXCJhdXRvXCIgJiYgTTEgfHwgRS5jb2xvciB8fCBrLmNvbG9yKSwgbjEuY29sb3IgPSBNMSB8fCAhZChpMSkgJiYgVy5pbnNpZGUgfHwgMCA+IGgoaTEgfHwgMCkgfHwgTi5zdGFja2luZyA/IEUuY29udHJhc3RDb2xvciA6IGopIDogZGVsZXRlIEUuY29udHJhc3RDb2xvciwgTi5jdXJzb3IgJiYgKG4xLmN1cnNvciA9IE4uY3Vyc29yKSksIGExID0geyByOiBXLmJvcmRlclJhZGl1cyB8fCAwLCByb3RhdGlvbjogYzEsIHBhZGRpbmc6IFcucGFkZGluZywgekluZGV4OiAxIH0sIHguc3R5bGVkTW9kZSB8fCAoYTEuZmlsbCA9IFogPT09IFwiYXV0b1wiID8gRS5jb2xvciA6IFosIGExLnN0cm9rZSA9IHQxID09PSBcImF1dG9cIiA/IEUuY29sb3IgOiB0MSwgYTFbXCJzdHJva2Utd2lkdGhcIl0gPSBXLmJvcmRlcldpZHRoKSwgZihhMSwgKEExLCB1MSkgPT4ge1xuICAgICAgICAgICAgICAgIEExID09PSB2b2lkIDAgJiYgZGVsZXRlIGExW3UxXTtcbiAgICAgICAgICAgICAgfSkpLCAhbDEgfHwgWSAmJiBkKGIxKSAmJiAhIWwxLmRpdiA9PSAhIVcudXNlSFRNTCAmJiAobDEucm90YXRpb24gJiYgVy5yb3RhdGlvbiB8fCBsMS5yb3RhdGlvbiA9PT0gVy5yb3RhdGlvbikgfHwgKGwxID0gdm9pZCAwLCBwMSA9ICEwKSwgWSAmJiBkKGIxKSAmJiAobDEgPyBhMS50ZXh0ID0gYjEgOiAobDEgPSBWLmxhYmVsKGIxLCAwLCAwLCBXLnNoYXBlLCB2b2lkIDAsIHZvaWQgMCwgVy51c2VIVE1MLCB2b2lkIDAsIFwiZGF0YS1sYWJlbFwiKSkuYWRkQ2xhc3MoXCIgaGlnaGNoYXJ0cy1kYXRhLWxhYmVsLWNvbG9yLVwiICsgRS5jb2xvckluZGV4ICsgXCIgXCIgKyAoVy5jbGFzc05hbWUgfHwgXCJcIikgKyAoVy51c2VIVE1MID8gXCIgaGlnaGNoYXJ0cy10cmFja2VyXCIgOiBcIlwiKSksIGwxICYmIChsMS5vcHRpb25zID0gVywgbDEuYXR0cihhMSksIHguc3R5bGVkTW9kZSA/IG4xLndpZHRoICYmIGwxLmNzcyh7IHdpZHRoOiBuMS53aWR0aCwgdGV4dE92ZXJmbG93OiBuMS50ZXh0T3ZlcmZsb3cgfSkgOiBsMS5jc3MobjEpLnNoYWRvdyhXLnNoYWRvdyksIE0obDEsIFwiYmVmb3JlQWRkaW5nRGF0YUxhYmVsXCIsIHsgbGFiZWxPcHRpb25zOiBXLCBwb2ludDogRSB9KSwgbDEuYWRkZWQgfHwgbDEuYWRkKG0pLCBrLmFsaWduRGF0YUxhYmVsKEUsIGwxLCBXLCB2b2lkIDAsIHAxKSwgbDEuaXNBY3RpdmUgPSAhMCwgRFtQXSAmJiBEW1BdICE9PSBsMSAmJiBEW1BdLmRlc3Ryb3koKSwgRFtQXSA9IGwxKSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGxldCBHID0gRC5sZW5ndGg7XG4gICAgICAgICAgICBmb3IgKDsgRy0tOyApXG4gICAgICAgICAgICAgIERbR10gJiYgRFtHXS5pc0FjdGl2ZSA/IERbR10uaXNBY3RpdmUgPSAhMSA6ICgoUyA9IERbR10pID09IG51bGwgfHwgUy5kZXN0cm95KCksIEQuc3BsaWNlKEcsIDEpKTtcbiAgICAgICAgICAgIEUuZGF0YUxhYmVsID0gRFswXSwgRS5kYXRhTGFiZWxzID0gRDtcbiAgICAgICAgICB9KSksIE0odGhpcywgXCJhZnRlckRyYXdEYXRhTGFiZWxzXCIpO1xuICAgICAgICB9XG4gICAgICAgIGZ1bmN0aW9uIFQocSwgbSwgaywgeCwgTiwgVikge1xuICAgICAgICAgIGxldCBSID0gdGhpcy5jaGFydCwgSSA9IG0uYWxpZ24sIGogPSBtLnZlcnRpY2FsQWxpZ24sIFUgPSBxLmJveCA/IDAgOiBxLnBhZGRpbmcgfHwgMCwgXyA9IFIuaW52ZXJ0ZWQgPyB0aGlzLnlBeGlzIDogdGhpcy54QXhpcywgcjEgPSBfID8gXy5sZWZ0IC0gUi5wbG90TGVmdCA6IDAsIEsgPSBSLmludmVydGVkID8gdGhpcy54QXhpcyA6IHRoaXMueUF4aXMsIFEgPSBLID8gSy50b3AgLSBSLnBsb3RUb3AgOiAwLCB7IHg6IEUgPSAwLCB5OiBEID0gMCB9ID0gbSwgRywgSjtcbiAgICAgICAgICByZXR1cm4gKEcgPSAoay54IHx8IDApICsgVSArIHIxKSA8IDAgJiYgKEkgPT09IFwicmlnaHRcIiAmJiBFID49IDAgPyAobS5hbGlnbiA9IFwibGVmdFwiLCBtLmluc2lkZSA9ICEwKSA6IEUgLT0gRywgSiA9ICEwKSwgKEcgPSAoay54IHx8IDApICsgeC53aWR0aCAtIFUgKyByMSkgPiBSLnBsb3RXaWR0aCAmJiAoSSA9PT0gXCJsZWZ0XCIgJiYgRSA8PSAwID8gKG0uYWxpZ24gPSBcInJpZ2h0XCIsIG0uaW5zaWRlID0gITApIDogRSArPSBSLnBsb3RXaWR0aCAtIEcsIEogPSAhMCksIChHID0gay55ICsgVSArIFEpIDwgMCAmJiAoaiA9PT0gXCJib3R0b21cIiAmJiBEID49IDAgPyAobS52ZXJ0aWNhbEFsaWduID0gXCJ0b3BcIiwgbS5pbnNpZGUgPSAhMCkgOiBEIC09IEcsIEogPSAhMCksIChHID0gKGsueSB8fCAwKSArIHguaGVpZ2h0IC0gVSArIFEpID4gUi5wbG90SGVpZ2h0ICYmIChqID09PSBcInRvcFwiICYmIEQgPD0gMCA/IChtLnZlcnRpY2FsQWxpZ24gPSBcImJvdHRvbVwiLCBtLmluc2lkZSA9ICEwKSA6IEQgKz0gUi5wbG90SGVpZ2h0IC0gRywgSiA9ICEwKSwgSiAmJiAobS54ID0gRSwgbS55ID0gRCwgcS5wbGFjZWQgPSAhViwgcS5hbGlnbihtLCB2b2lkIDAsIE4pKSwgSjtcbiAgICAgICAgfVxuICAgICAgICBmdW5jdGlvbiB3KHEsIG0pIHtcbiAgICAgICAgICBsZXQgayA9IFtdLCB4O1xuICAgICAgICAgIGlmICh1KHEpICYmICF1KG0pKVxuICAgICAgICAgICAgayA9IHEubWFwKGZ1bmN0aW9uKE4pIHtcbiAgICAgICAgICAgICAgcmV0dXJuIHooTiwgbSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICBlbHNlIGlmICh1KG0pICYmICF1KHEpKVxuICAgICAgICAgICAgayA9IG0ubWFwKGZ1bmN0aW9uKE4pIHtcbiAgICAgICAgICAgICAgcmV0dXJuIHoocSwgTik7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICBlbHNlIGlmICh1KHEpIHx8IHUobSkpIHtcbiAgICAgICAgICAgIGlmICh1KHEpICYmIHUobSkpXG4gICAgICAgICAgICAgIGZvciAoeCA9IE1hdGgubWF4KHEubGVuZ3RoLCBtLmxlbmd0aCk7IHgtLTsgKVxuICAgICAgICAgICAgICAgIGtbeF0gPSB6KHFbeF0sIG1beF0pO1xuICAgICAgICAgIH0gZWxzZVxuICAgICAgICAgICAgayA9IHoocSwgbSk7XG4gICAgICAgICAgcmV0dXJuIGs7XG4gICAgICAgIH1cbiAgICAgICAgZnVuY3Rpb24gSChxKSB7XG4gICAgICAgICAgdmFyIGssIHg7XG4gICAgICAgICAgbGV0IG0gPSBxLmNoYXJ0Lm9wdGlvbnMucGxvdE9wdGlvbnM7XG4gICAgICAgICAgcmV0dXJuIGcodyh3KChrID0gbSA9PSBudWxsID8gdm9pZCAwIDogbS5zZXJpZXMpID09IG51bGwgPyB2b2lkIDAgOiBrLmRhdGFMYWJlbHMsICh4ID0gbSA9PSBudWxsID8gdm9pZCAwIDogbVtxLnR5cGVdKSA9PSBudWxsID8gdm9pZCAwIDogeC5kYXRhTGFiZWxzKSwgcS5vcHRpb25zLmRhdGFMYWJlbHMpKTtcbiAgICAgICAgfVxuICAgICAgICBmdW5jdGlvbiBDKHEsIG0sIGssIHgsIE4pIHtcbiAgICAgICAgICBsZXQgViA9IHRoaXMuY2hhcnQsIFIgPSBWLmludmVydGVkLCBJID0gdGhpcy54QXhpcywgaiA9IEkucmV2ZXJzZWQsIFUgPSAoKFIgPyBtLmhlaWdodCA6IG0ud2lkdGgpIHx8IDApIC8gMiwgXyA9IHEucG9pbnRXaWR0aCwgcjEgPSBfID8gXyAvIDIgOiAwO1xuICAgICAgICAgIG0uc3RhcnRYUG9zID0gUiA/IE4ueCA6IGogPyAtVSAtIHIxIDogSS53aWR0aCAtIFUgKyByMSwgbS5zdGFydFlQb3MgPSBSID8gaiA/IHRoaXMueUF4aXMuaGVpZ2h0IC0gVSArIHIxIDogLVUgLSByMSA6IE4ueSwgeCA/IG0udmlzaWJpbGl0eSA9PT0gXCJoaWRkZW5cIiAmJiAobS5zaG93KCksIG0uYXR0cih7IG9wYWNpdHk6IDAgfSkuYW5pbWF0ZSh7IG9wYWNpdHk6IDEgfSkpIDogbS5hdHRyKHsgb3BhY2l0eTogMSB9KS5hbmltYXRlKHsgb3BhY2l0eTogMCB9LCB2b2lkIDAsIG0uaGlkZSksIFYuaGFzUmVuZGVyZWQgJiYgKGsgJiYgbS5hdHRyKHsgeDogbS5zdGFydFhQb3MsIHk6IG0uc3RhcnRZUG9zIH0pLCBtLnBsYWNlZCA9ICEwKTtcbiAgICAgICAgfVxuICAgICAgICB2LmNvbXBvc2UgPSBmdW5jdGlvbihxKSB7XG4gICAgICAgICAgbGV0IG0gPSBxLnByb3RvdHlwZTtcbiAgICAgICAgICBtLmluaXREYXRhTGFiZWxzIHx8IChtLmluaXREYXRhTGFiZWxzID0gWCwgbS5pbml0RGF0YUxhYmVsc0dyb3VwID0gQiwgbS5hbGlnbkRhdGFMYWJlbCA9IHksIG0uZHJhd0RhdGFMYWJlbHMgPSBGLCBtLmp1c3RpZnlEYXRhTGFiZWwgPSBULCBtLnNldERhdGFMYWJlbFN0YXJ0UG9zID0gQywgbS5oYXNEYXRhTGFiZWxzID0gTCk7XG4gICAgICAgIH07XG4gICAgICB9KHMgfHwgKHMgPSB7fSkpLCBzO1xuICAgIH0pLCBuKG8sIFwiU2VyaWVzL0NvbHVtbi9Db2x1bW5EYXRhTGFiZWwuanNcIiwgW29bXCJDb3JlL1Nlcmllcy9EYXRhTGFiZWwuanNcIl0sIG9bXCJDb3JlL0dsb2JhbHMuanNcIl0sIG9bXCJDb3JlL1Nlcmllcy9TZXJpZXNSZWdpc3RyeS5qc1wiXSwgb1tcIkNvcmUvVXRpbGl0aWVzLmpzXCJdXSwgZnVuY3Rpb24ociwgaSwgYSwgcykge1xuICAgICAgdmFyIGw7XG4gICAgICBsZXQgeyBjb21wb3NlZDogcCB9ID0gaSwgeyBzZXJpZXM6IGQgfSA9IGEsIHsgbWVyZ2U6IGIsIHBpY2s6IE0sIHB1c2hVbmlxdWU6IHUgfSA9IHM7XG4gICAgICByZXR1cm4gZnVuY3Rpb24oQSkge1xuICAgICAgICBmdW5jdGlvbiB6KGYsIE8sIGgsIGcsIHYpIHtcbiAgICAgICAgICBsZXQgTCA9IHRoaXMuY2hhcnQuaW52ZXJ0ZWQsIHkgPSBmLnNlcmllcywgQiA9ICh5LnhBeGlzID8geS54QXhpcy5sZW4gOiB0aGlzLmNoYXJ0LnBsb3RTaXplWCkgfHwgMCwgWCA9ICh5LnlBeGlzID8geS55QXhpcy5sZW4gOiB0aGlzLmNoYXJ0LnBsb3RTaXplWSkgfHwgMCwgRiA9IGYuZGxCb3ggfHwgZi5zaGFwZUFyZ3MsIFQgPSBNKGYuYmVsb3csIGYucGxvdFkgPiBNKHRoaXMudHJhbnNsYXRlZFRocmVzaG9sZCwgWCkpLCB3ID0gTShoLmluc2lkZSwgISF0aGlzLm9wdGlvbnMuc3RhY2tpbmcpO1xuICAgICAgICAgIGlmIChGKSB7XG4gICAgICAgICAgICBpZiAoZyA9IGIoRiksICEoaC5vdmVyZmxvdyA9PT0gXCJhbGxvd1wiICYmIGguY3JvcCA9PT0gITEpKSB7XG4gICAgICAgICAgICAgIGcueSA8IDAgJiYgKGcuaGVpZ2h0ICs9IGcueSwgZy55ID0gMCk7XG4gICAgICAgICAgICAgIGxldCBIID0gZy55ICsgZy5oZWlnaHQgLSBYO1xuICAgICAgICAgICAgICBIID4gMCAmJiBIIDwgZy5oZWlnaHQgLSAxICYmIChnLmhlaWdodCAtPSBIKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIEwgJiYgKGcgPSB7IHg6IFggLSBnLnkgLSBnLmhlaWdodCwgeTogQiAtIGcueCAtIGcud2lkdGgsIHdpZHRoOiBnLmhlaWdodCwgaGVpZ2h0OiBnLndpZHRoIH0pLCB3IHx8IChMID8gKGcueCArPSBUID8gMCA6IGcud2lkdGgsIGcud2lkdGggPSAwKSA6IChnLnkgKz0gVCA/IGcuaGVpZ2h0IDogMCwgZy5oZWlnaHQgPSAwKSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGguYWxpZ24gPSBNKGguYWxpZ24sICFMIHx8IHcgPyBcImNlbnRlclwiIDogVCA/IFwicmlnaHRcIiA6IFwibGVmdFwiKSwgaC52ZXJ0aWNhbEFsaWduID0gTShoLnZlcnRpY2FsQWxpZ24sIEwgfHwgdyA/IFwibWlkZGxlXCIgOiBUID8gXCJ0b3BcIiA6IFwiYm90dG9tXCIpLCBkLnByb3RvdHlwZS5hbGlnbkRhdGFMYWJlbC5jYWxsKHRoaXMsIGYsIE8sIGgsIGcsIHYpLCBoLmluc2lkZSAmJiBmLmNvbnRyYXN0Q29sb3IgJiYgTy5jc3MoeyBjb2xvcjogZi5jb250cmFzdENvbG9yIH0pO1xuICAgICAgICB9XG4gICAgICAgIEEuY29tcG9zZSA9IGZ1bmN0aW9uKGYpIHtcbiAgICAgICAgICByLmNvbXBvc2UoZCksIHUocCwgXCJDb2x1bW5EYXRhTGFiZWxcIikgJiYgKGYucHJvdG90eXBlLmFsaWduRGF0YUxhYmVsID0geik7XG4gICAgICAgIH07XG4gICAgICB9KGwgfHwgKGwgPSB7fSkpLCBsO1xuICAgIH0pLCBuKG8sIFwiU2VyaWVzL0Jhci9CYXJTZXJpZXMuanNcIiwgW29bXCJTZXJpZXMvQ29sdW1uL0NvbHVtblNlcmllcy5qc1wiXSwgb1tcIkNvcmUvU2VyaWVzL1Nlcmllc1JlZ2lzdHJ5LmpzXCJdLCBvW1wiQ29yZS9VdGlsaXRpZXMuanNcIl1dLCBmdW5jdGlvbihyLCBpLCBhKSB7XG4gICAgICBsZXQgeyBleHRlbmQ6IHMsIG1lcmdlOiBsIH0gPSBhO1xuICAgICAgY2xhc3MgcCBleHRlbmRzIHIge1xuICAgICAgfVxuICAgICAgcmV0dXJuIHAuZGVmYXVsdE9wdGlvbnMgPSBsKHIuZGVmYXVsdE9wdGlvbnMsIHt9KSwgcyhwLnByb3RvdHlwZSwgeyBpbnZlcnRlZDogITAgfSksIGkucmVnaXN0ZXJTZXJpZXNUeXBlKFwiYmFyXCIsIHApLCBwO1xuICAgIH0pLCBuKG8sIFwiU2VyaWVzL1NjYXR0ZXIvU2NhdHRlclNlcmllc0RlZmF1bHRzLmpzXCIsIFtdLCBmdW5jdGlvbigpIHtcbiAgICAgIHJldHVybiB7IGxpbmVXaWR0aDogMCwgZmluZE5lYXJlc3RQb2ludEJ5OiBcInh5XCIsIGppdHRlcjogeyB4OiAwLCB5OiAwIH0sIG1hcmtlcjogeyBlbmFibGVkOiAhMCB9LCB0b29sdGlwOiB7IGhlYWRlckZvcm1hdDogJzxzcGFuIHN0eWxlPVwiY29sb3I6e3BvaW50LmNvbG9yfVwiPuKXjzwvc3Bhbj4gPHNwYW4gc3R5bGU9XCJmb250LXNpemU6IDAuOGVtXCI+IHtzZXJpZXMubmFtZX08L3NwYW4+PGJyLz4nLCBwb2ludEZvcm1hdDogXCJ4OiA8Yj57cG9pbnQueH08L2I+PGJyLz55OiA8Yj57cG9pbnQueX08L2I+PGJyLz5cIiB9IH07XG4gICAgfSksIG4obywgXCJTZXJpZXMvU2NhdHRlci9TY2F0dGVyU2VyaWVzLmpzXCIsIFtvW1wiU2VyaWVzL1NjYXR0ZXIvU2NhdHRlclNlcmllc0RlZmF1bHRzLmpzXCJdLCBvW1wiQ29yZS9TZXJpZXMvU2VyaWVzUmVnaXN0cnkuanNcIl0sIG9bXCJDb3JlL1V0aWxpdGllcy5qc1wiXV0sIGZ1bmN0aW9uKHIsIGksIGEpIHtcbiAgICAgIGxldCB7IGNvbHVtbjogcywgbGluZTogbCB9ID0gaS5zZXJpZXNUeXBlcywgeyBhZGRFdmVudDogcCwgZXh0ZW5kOiBkLCBtZXJnZTogYiB9ID0gYTtcbiAgICAgIGNsYXNzIE0gZXh0ZW5kcyBsIHtcbiAgICAgICAgYXBwbHlKaXR0ZXIoKSB7XG4gICAgICAgICAgbGV0IEEgPSB0aGlzLCB6ID0gdGhpcy5vcHRpb25zLmppdHRlciwgZiA9IHRoaXMucG9pbnRzLmxlbmd0aDtcbiAgICAgICAgICB6ICYmIHRoaXMucG9pbnRzLmZvckVhY2goZnVuY3Rpb24oTywgaCkge1xuICAgICAgICAgICAgW1wieFwiLCBcInlcIl0uZm9yRWFjaChmdW5jdGlvbihnLCB2KSB7XG4gICAgICAgICAgICAgIGlmICh6W2ddICYmICFPLmlzTnVsbCkge1xuICAgICAgICAgICAgICAgIGxldCBMID0gYHBsb3Qke2cudG9VcHBlckNhc2UoKX1gLCB5ID0gQVtgJHtnfUF4aXNgXSwgQiA9IHpbZ10gKiB5LnRyYW5zQTtcbiAgICAgICAgICAgICAgICBpZiAoeSAmJiAheS5sb2dhcml0aG1pYykge1xuICAgICAgICAgICAgICAgICAgbGV0IFggPSBNYXRoLm1heCgwLCAoT1tMXSB8fCAwKSAtIEIpLCBGID0gTWF0aC5taW4oeS5sZW4sIChPW0xdIHx8IDApICsgQik7XG4gICAgICAgICAgICAgICAgICBPW0xdID0gWCArIChGIC0gWCkgKiBmdW5jdGlvbihUKSB7XG4gICAgICAgICAgICAgICAgICAgIGxldCB3ID0gMWU0ICogTWF0aC5zaW4oVCk7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB3IC0gTWF0aC5mbG9vcih3KTtcbiAgICAgICAgICAgICAgICAgIH0oaCArIHYgKiBmKSwgZyA9PT0gXCJ4XCIgJiYgKE8uY2xpZW50WCA9IE8ucGxvdFgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgZHJhd0dyYXBoKCkge1xuICAgICAgICAgIHRoaXMub3B0aW9ucy5saW5lV2lkdGggPyBzdXBlci5kcmF3R3JhcGgoKSA6IHRoaXMuZ3JhcGggJiYgKHRoaXMuZ3JhcGggPSB0aGlzLmdyYXBoLmRlc3Ryb3koKSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiBNLmRlZmF1bHRPcHRpb25zID0gYihsLmRlZmF1bHRPcHRpb25zLCByKSwgZChNLnByb3RvdHlwZSwgeyBkcmF3VHJhY2tlcjogcy5wcm90b3R5cGUuZHJhd1RyYWNrZXIsIHNvcnRlZDogITEsIHJlcXVpcmVTb3J0aW5nOiAhMSwgbm9TaGFyZWRUb29sdGlwOiAhMCwgdHJhY2tlckdyb3VwczogW1wiZ3JvdXBcIiwgXCJtYXJrZXJHcm91cFwiLCBcImRhdGFMYWJlbHNHcm91cFwiXSB9KSwgcChNLCBcImFmdGVyVHJhbnNsYXRlXCIsIGZ1bmN0aW9uKCkge1xuICAgICAgICB0aGlzLmFwcGx5Sml0dGVyKCk7XG4gICAgICB9KSwgaS5yZWdpc3RlclNlcmllc1R5cGUoXCJzY2F0dGVyXCIsIE0pLCBNO1xuICAgIH0pLCBuKG8sIFwiU2VyaWVzL0NlbnRlcmVkVXRpbGl0aWVzLmpzXCIsIFtvW1wiQ29yZS9HbG9iYWxzLmpzXCJdLCBvW1wiQ29yZS9TZXJpZXMvU2VyaWVzLmpzXCJdLCBvW1wiQ29yZS9VdGlsaXRpZXMuanNcIl1dLCBmdW5jdGlvbihyLCBpLCBhKSB7XG4gICAgICB2YXIgcywgbDtcbiAgICAgIGxldCB7IGRlZzJyYWQ6IHAgfSA9IHIsIHsgZmlyZUV2ZW50OiBkLCBpc051bWJlcjogYiwgcGljazogTSwgcmVsYXRpdmVMZW5ndGg6IHUgfSA9IGE7XG4gICAgICByZXR1cm4gKGwgPSBzIHx8IChzID0ge30pKS5nZXRDZW50ZXIgPSBmdW5jdGlvbigpIHtcbiAgICAgICAgbGV0IEEgPSB0aGlzLm9wdGlvbnMsIHogPSB0aGlzLmNoYXJ0LCBmID0gMiAqIChBLnNsaWNlZE9mZnNldCB8fCAwKSwgTyA9IHoucGxvdFdpZHRoIC0gMiAqIGYsIGggPSB6LnBsb3RIZWlnaHQgLSAyICogZiwgZyA9IEEuY2VudGVyLCB2ID0gTWF0aC5taW4oTywgaCksIEwgPSBBLnRoaWNrbmVzcywgeSwgQiA9IEEuc2l6ZSwgWCA9IEEuaW5uZXJTaXplIHx8IDAsIEYsIFQ7XG4gICAgICAgIHR5cGVvZiBCID09IFwic3RyaW5nXCIgJiYgKEIgPSBwYXJzZUZsb2F0KEIpKSwgdHlwZW9mIFggPT0gXCJzdHJpbmdcIiAmJiAoWCA9IHBhcnNlRmxvYXQoWCkpO1xuICAgICAgICBsZXQgdyA9IFtNKGdbMF0sIFwiNTAlXCIpLCBNKGdbMV0sIFwiNTAlXCIpLCBNKEIgJiYgQiA8IDAgPyB2b2lkIDAgOiBBLnNpemUsIFwiMTAwJVwiKSwgTShYICYmIFggPCAwID8gdm9pZCAwIDogQS5pbm5lclNpemUgfHwgMCwgXCIwJVwiKV07XG4gICAgICAgIGZvciAoIXouYW5ndWxhciB8fCB0aGlzIGluc3RhbmNlb2YgaSB8fCAod1szXSA9IDApLCBGID0gMDsgRiA8IDQ7ICsrRilcbiAgICAgICAgICBUID0gd1tGXSwgeSA9IEYgPCAyIHx8IEYgPT09IDIgJiYgLyUkLy50ZXN0KFQpLCB3W0ZdID0gdShULCBbTywgaCwgdiwgd1syXV1bRl0pICsgKHkgPyBmIDogMCk7XG4gICAgICAgIHJldHVybiB3WzNdID4gd1syXSAmJiAod1szXSA9IHdbMl0pLCBiKEwpICYmIDIgKiBMIDwgd1syXSAmJiBMID4gMCAmJiAod1szXSA9IHdbMl0gLSAyICogTCksIGQodGhpcywgXCJhZnRlckdldENlbnRlclwiLCB7IHBvc2l0aW9uczogdyB9KSwgdztcbiAgICAgIH0sIGwuZ2V0U3RhcnRBbmRFbmRSYWRpYW5zID0gZnVuY3Rpb24oQSwgeikge1xuICAgICAgICBsZXQgZiA9IGIoQSkgPyBBIDogMCwgTyA9IGIoeikgJiYgeiA+IGYgJiYgeiAtIGYgPCAzNjAgPyB6IDogZiArIDM2MDtcbiAgICAgICAgcmV0dXJuIHsgc3RhcnQ6IHAgKiAoZiArIC05MCksIGVuZDogcCAqIChPICsgLTkwKSB9O1xuICAgICAgfSwgcztcbiAgICB9KSwgbihvLCBcIlNlcmllcy9QaWUvUGllUG9pbnQuanNcIiwgW29bXCJDb3JlL0FuaW1hdGlvbi9BbmltYXRpb25VdGlsaXRpZXMuanNcIl0sIG9bXCJDb3JlL1Nlcmllcy9Qb2ludC5qc1wiXSwgb1tcIkNvcmUvVXRpbGl0aWVzLmpzXCJdXSwgZnVuY3Rpb24ociwgaSwgYSkge1xuICAgICAgbGV0IHsgc2V0QW5pbWF0aW9uOiBzIH0gPSByLCB7IGFkZEV2ZW50OiBsLCBkZWZpbmVkOiBwLCBleHRlbmQ6IGQsIGlzTnVtYmVyOiBiLCBwaWNrOiBNLCByZWxhdGl2ZUxlbmd0aDogdSB9ID0gYTtcbiAgICAgIGNsYXNzIEEgZXh0ZW5kcyBpIHtcbiAgICAgICAgZ2V0Q29ubmVjdG9yUGF0aChmKSB7XG4gICAgICAgICAgbGV0IE8gPSBmLmRhdGFMYWJlbFBvc2l0aW9uLCBoID0gZi5vcHRpb25zIHx8IHt9LCBnID0gaC5jb25uZWN0b3JTaGFwZSwgdiA9IHRoaXMuY29ubmVjdG9yU2hhcGVzW2ddIHx8IGc7XG4gICAgICAgICAgcmV0dXJuIE8gJiYgdi5jYWxsKHRoaXMsIHsgLi4uTy5jb21wdXRlZCwgYWxpZ25tZW50OiBPLmFsaWdubWVudCB9LCBPLmNvbm5lY3RvclBvc2l0aW9uLCBoKSB8fCBbXTtcbiAgICAgICAgfVxuICAgICAgICBnZXRUcmFuc2xhdGUoKSB7XG4gICAgICAgICAgcmV0dXJuIHRoaXMuc2xpY2VkICYmIHRoaXMuc2xpY2VkVHJhbnNsYXRpb24gfHwgeyB0cmFuc2xhdGVYOiAwLCB0cmFuc2xhdGVZOiAwIH07XG4gICAgICAgIH1cbiAgICAgICAgaGFsb1BhdGgoZikge1xuICAgICAgICAgIGxldCBPID0gdGhpcy5zaGFwZUFyZ3M7XG4gICAgICAgICAgcmV0dXJuIHRoaXMuc2xpY2VkIHx8ICF0aGlzLnZpc2libGUgPyBbXSA6IHRoaXMuc2VyaWVzLmNoYXJ0LnJlbmRlcmVyLnN5bWJvbHMuYXJjKE8ueCwgTy55LCBPLnIgKyBmLCBPLnIgKyBmLCB7IGlubmVyUjogTy5yIC0gMSwgc3RhcnQ6IE8uc3RhcnQsIGVuZDogTy5lbmQsIGJvcmRlclJhZGl1czogTy5ib3JkZXJSYWRpdXMgfSk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3RydWN0b3IoZiwgTywgaCkge1xuICAgICAgICAgIHN1cGVyKGYsIE8sIGgpLCB0aGlzLmhhbGYgPSAwLCB0aGlzLm5hbWUgPz8gKHRoaXMubmFtZSA9IFwiU2xpY2VcIik7XG4gICAgICAgICAgbGV0IGcgPSAodikgPT4ge1xuICAgICAgICAgICAgdGhpcy5zbGljZSh2LnR5cGUgPT09IFwic2VsZWN0XCIpO1xuICAgICAgICAgIH07XG4gICAgICAgICAgbCh0aGlzLCBcInNlbGVjdFwiLCBnKSwgbCh0aGlzLCBcInVuc2VsZWN0XCIsIGcpO1xuICAgICAgICB9XG4gICAgICAgIGlzVmFsaWQoKSB7XG4gICAgICAgICAgcmV0dXJuIGIodGhpcy55KSAmJiB0aGlzLnkgPj0gMDtcbiAgICAgICAgfVxuICAgICAgICBzZXRWaXNpYmxlKGYsIE8gPSAhMCkge1xuICAgICAgICAgIGYgIT09IHRoaXMudmlzaWJsZSAmJiB0aGlzLnVwZGF0ZSh7IHZpc2libGU6IGYgPz8gIXRoaXMudmlzaWJsZSB9LCBPLCB2b2lkIDAsICExKTtcbiAgICAgICAgfVxuICAgICAgICBzbGljZShmLCBPLCBoKSB7XG4gICAgICAgICAgbGV0IGcgPSB0aGlzLnNlcmllcztcbiAgICAgICAgICBzKGgsIGcuY2hhcnQpLCBPID0gTShPLCAhMCksIHRoaXMuc2xpY2VkID0gdGhpcy5vcHRpb25zLnNsaWNlZCA9IGYgPSBwKGYpID8gZiA6ICF0aGlzLnNsaWNlZCwgZy5vcHRpb25zLmRhdGFbZy5kYXRhLmluZGV4T2YodGhpcyldID0gdGhpcy5vcHRpb25zLCB0aGlzLmdyYXBoaWMgJiYgdGhpcy5ncmFwaGljLmFuaW1hdGUodGhpcy5nZXRUcmFuc2xhdGUoKSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiBkKEEucHJvdG90eXBlLCB7IGNvbm5lY3RvclNoYXBlczogeyBmaXhlZE9mZnNldDogZnVuY3Rpb24oeiwgZiwgTykge1xuICAgICAgICBsZXQgaCA9IGYuYnJlYWtBdCwgZyA9IGYudG91Y2hpbmdTbGljZUF0LCB2ID0gTy5zb2Z0Q29ubmVjdG9yID8gW1wiQ1wiLCB6LnggKyAoei5hbGlnbm1lbnQgPT09IFwibGVmdFwiID8gLTUgOiA1KSwgei55LCAyICogaC54IC0gZy54LCAyICogaC55IC0gZy55LCBoLngsIGgueV0gOiBbXCJMXCIsIGgueCwgaC55XTtcbiAgICAgICAgcmV0dXJuIFtbXCJNXCIsIHoueCwgei55XSwgdiwgW1wiTFwiLCBnLngsIGcueV1dO1xuICAgICAgfSwgc3RyYWlnaHQ6IGZ1bmN0aW9uKHosIGYpIHtcbiAgICAgICAgbGV0IE8gPSBmLnRvdWNoaW5nU2xpY2VBdDtcbiAgICAgICAgcmV0dXJuIFtbXCJNXCIsIHoueCwgei55XSwgW1wiTFwiLCBPLngsIE8ueV1dO1xuICAgICAgfSwgY3Jvb2tlZExpbmU6IGZ1bmN0aW9uKHosIGYsIE8pIHtcbiAgICAgICAgbGV0IHsgYnJlYWtBdDogaCwgdG91Y2hpbmdTbGljZUF0OiBnIH0gPSBmLCB7IHNlcmllczogdiB9ID0gdGhpcywgW0wsIHksIEJdID0gdi5jZW50ZXIsIFggPSBCIC8gMiwgeyBwbG90TGVmdDogRiwgcGxvdFdpZHRoOiBUIH0gPSB2LmNoYXJ0LCB3ID0gei5hbGlnbm1lbnQgPT09IFwibGVmdFwiLCB7IHg6IEgsIHk6IEMgfSA9IHosIHEgPSBoLng7XG4gICAgICAgIGlmIChPLmNyb29rRGlzdGFuY2UpIHtcbiAgICAgICAgICBsZXQgayA9IHUoTy5jcm9va0Rpc3RhbmNlLCAxKTtcbiAgICAgICAgICBxID0gdyA/IEwgKyBYICsgKFQgKyBGIC0gTCAtIFgpICogKDEgLSBrKSA6IEYgKyAoTCAtIFgpICogaztcbiAgICAgICAgfSBlbHNlXG4gICAgICAgICAgcSA9IEwgKyAoeSAtIEMpICogTWF0aC50YW4oKHRoaXMuYW5nbGUgfHwgMCkgLSBNYXRoLlBJIC8gMik7XG4gICAgICAgIGxldCBtID0gW1tcIk1cIiwgSCwgQ11dO1xuICAgICAgICByZXR1cm4gKHcgPyBxIDw9IEggJiYgcSA+PSBoLnggOiBxID49IEggJiYgcSA8PSBoLngpICYmIG0ucHVzaChbXCJMXCIsIHEsIENdKSwgbS5wdXNoKFtcIkxcIiwgaC54LCBoLnldLCBbXCJMXCIsIGcueCwgZy55XSksIG07XG4gICAgICB9IH0gfSksIEE7XG4gICAgfSksIG4obywgXCJTZXJpZXMvUGllL1BpZVNlcmllc0RlZmF1bHRzLmpzXCIsIFtdLCBmdW5jdGlvbigpIHtcbiAgICAgIHJldHVybiB7IGJvcmRlclJhZGl1czogMywgY2VudGVyOiBbbnVsbCwgbnVsbF0sIGNsaXA6ICExLCBjb2xvckJ5UG9pbnQ6ICEwLCBkYXRhTGFiZWxzOiB7IGNvbm5lY3RvclBhZGRpbmc6IDUsIGNvbm5lY3RvclNoYXBlOiBcImNyb29rZWRMaW5lXCIsIGNyb29rRGlzdGFuY2U6IHZvaWQgMCwgZGlzdGFuY2U6IDMwLCBlbmFibGVkOiAhMCwgZm9ybWF0dGVyOiBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMucG9pbnQuaXNOdWxsID8gdm9pZCAwIDogdGhpcy5wb2ludC5uYW1lO1xuICAgICAgfSwgc29mdENvbm5lY3RvcjogITAsIHg6IDAgfSwgZmlsbENvbG9yOiB2b2lkIDAsIGlnbm9yZUhpZGRlblBvaW50OiAhMCwgaW5hY3RpdmVPdGhlclBvaW50czogITAsIGxlZ2VuZFR5cGU6IFwicG9pbnRcIiwgbWFya2VyOiBudWxsLCBzaXplOiBudWxsLCBzaG93SW5MZWdlbmQ6ICExLCBzbGljZWRPZmZzZXQ6IDEwLCBzdGlja3lUcmFja2luZzogITEsIHRvb2x0aXA6IHsgZm9sbG93UG9pbnRlcjogITAgfSwgYm9yZGVyQ29sb3I6IFwiI2ZmZmZmZlwiLCBib3JkZXJXaWR0aDogMSwgbGluZVdpZHRoOiB2b2lkIDAsIHN0YXRlczogeyBob3ZlcjogeyBicmlnaHRuZXNzOiAwLjEgfSB9IH07XG4gICAgfSksIG4obywgXCJTZXJpZXMvUGllL1BpZVNlcmllcy5qc1wiLCBbb1tcIlNlcmllcy9DZW50ZXJlZFV0aWxpdGllcy5qc1wiXSwgb1tcIlNlcmllcy9Db2x1bW4vQ29sdW1uU2VyaWVzLmpzXCJdLCBvW1wiQ29yZS9HbG9iYWxzLmpzXCJdLCBvW1wiU2VyaWVzL1BpZS9QaWVQb2ludC5qc1wiXSwgb1tcIlNlcmllcy9QaWUvUGllU2VyaWVzRGVmYXVsdHMuanNcIl0sIG9bXCJDb3JlL1Nlcmllcy9TZXJpZXMuanNcIl0sIG9bXCJDb3JlL1Nlcmllcy9TZXJpZXNSZWdpc3RyeS5qc1wiXSwgb1tcIkNvcmUvUmVuZGVyZXIvU1ZHL1N5bWJvbHMuanNcIl0sIG9bXCJDb3JlL1V0aWxpdGllcy5qc1wiXV0sIGZ1bmN0aW9uKHIsIGksIGEsIHMsIGwsIHAsIGQsIGIsIE0pIHtcbiAgICAgIGxldCB7IGdldFN0YXJ0QW5kRW5kUmFkaWFuczogdSB9ID0gciwgeyBub29wOiBBIH0gPSBhLCB7IGNsYW1wOiB6LCBleHRlbmQ6IGYsIGZpcmVFdmVudDogTywgbWVyZ2U6IGgsIHBpY2s6IGcgfSA9IE07XG4gICAgICBjbGFzcyB2IGV4dGVuZHMgcCB7XG4gICAgICAgIGFuaW1hdGUoeSkge1xuICAgICAgICAgIGxldCBCID0gdGhpcywgWCA9IEIucG9pbnRzLCBGID0gQi5zdGFydEFuZ2xlUmFkO1xuICAgICAgICAgIHkgfHwgWC5mb3JFYWNoKGZ1bmN0aW9uKFQpIHtcbiAgICAgICAgICAgIGxldCB3ID0gVC5ncmFwaGljLCBIID0gVC5zaGFwZUFyZ3M7XG4gICAgICAgICAgICB3ICYmIEggJiYgKHcuYXR0cih7IHI6IGcoVC5zdGFydFIsIEIuY2VudGVyICYmIEIuY2VudGVyWzNdIC8gMiksIHN0YXJ0OiBGLCBlbmQ6IEYgfSksIHcuYW5pbWF0ZSh7IHI6IEguciwgc3RhcnQ6IEguc3RhcnQsIGVuZDogSC5lbmQgfSwgQi5vcHRpb25zLmFuaW1hdGlvbikpO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIGRyYXdFbXB0eSgpIHtcbiAgICAgICAgICBsZXQgeSwgQiwgWCA9IHRoaXMuc3RhcnRBbmdsZVJhZCwgRiA9IHRoaXMuZW5kQW5nbGVSYWQsIFQgPSB0aGlzLm9wdGlvbnM7XG4gICAgICAgICAgdGhpcy50b3RhbCA9PT0gMCAmJiB0aGlzLmNlbnRlciA/ICh5ID0gdGhpcy5jZW50ZXJbMF0sIEIgPSB0aGlzLmNlbnRlclsxXSwgdGhpcy5ncmFwaCB8fCAodGhpcy5ncmFwaCA9IHRoaXMuY2hhcnQucmVuZGVyZXIuYXJjKHksIEIsIHRoaXMuY2VudGVyWzFdIC8gMiwgMCwgWCwgRikuYWRkQ2xhc3MoXCJoaWdoY2hhcnRzLWVtcHR5LXNlcmllc1wiKS5hZGQodGhpcy5ncm91cCkpLCB0aGlzLmdyYXBoLmF0dHIoeyBkOiBiLmFyYyh5LCBCLCB0aGlzLmNlbnRlclsyXSAvIDIsIDAsIHsgc3RhcnQ6IFgsIGVuZDogRiwgaW5uZXJSOiB0aGlzLmNlbnRlclszXSAvIDIgfSkgfSksIHRoaXMuY2hhcnQuc3R5bGVkTW9kZSB8fCB0aGlzLmdyYXBoLmF0dHIoeyBcInN0cm9rZS13aWR0aFwiOiBULmJvcmRlcldpZHRoLCBmaWxsOiBULmZpbGxDb2xvciB8fCBcIm5vbmVcIiwgc3Ryb2tlOiBULmNvbG9yIHx8IFwiI2NjY2NjY1wiIH0pKSA6IHRoaXMuZ3JhcGggJiYgKHRoaXMuZ3JhcGggPSB0aGlzLmdyYXBoLmRlc3Ryb3koKSk7XG4gICAgICAgIH1cbiAgICAgICAgZHJhd1BvaW50cygpIHtcbiAgICAgICAgICBsZXQgeSA9IHRoaXMuY2hhcnQucmVuZGVyZXI7XG4gICAgICAgICAgdGhpcy5wb2ludHMuZm9yRWFjaChmdW5jdGlvbihCKSB7XG4gICAgICAgICAgICBCLmdyYXBoaWMgJiYgQi5oYXNOZXdTaGFwZVR5cGUoKSAmJiAoQi5ncmFwaGljID0gQi5ncmFwaGljLmRlc3Ryb3koKSksIEIuZ3JhcGhpYyB8fCAoQi5ncmFwaGljID0geVtCLnNoYXBlVHlwZV0oQi5zaGFwZUFyZ3MpLmFkZChCLnNlcmllcy5ncm91cCksIEIuZGVsYXllZFJlbmRlcmluZyA9ICEwKTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBnZW5lcmF0ZVBvaW50cygpIHtcbiAgICAgICAgICBzdXBlci5nZW5lcmF0ZVBvaW50cygpLCB0aGlzLnVwZGF0ZVRvdGFscygpO1xuICAgICAgICB9XG4gICAgICAgIGdldFgoeSwgQiwgWCwgRikge1xuICAgICAgICAgIGxldCBUID0gdGhpcy5jZW50ZXIsIHcgPSB0aGlzLnJhZGlpID8gdGhpcy5yYWRpaVtYLmluZGV4XSB8fCAwIDogVFsyXSAvIDIsIEggPSBGLmRhdGFMYWJlbFBvc2l0aW9uLCBDID0gKEggPT0gbnVsbCA/IHZvaWQgMCA6IEguZGlzdGFuY2UpIHx8IDAsIHEgPSBNYXRoLmFzaW4oeigoeSAtIFRbMV0pIC8gKHcgKyBDKSwgLTEsIDEpKTtcbiAgICAgICAgICByZXR1cm4gVFswXSArIE1hdGguY29zKHEpICogKHcgKyBDKSAqIChCID8gLTEgOiAxKSArIChDID4gMCA/IChCID8gLTEgOiAxKSAqIChGLnBhZGRpbmcgfHwgMCkgOiAwKTtcbiAgICAgICAgfVxuICAgICAgICBoYXNEYXRhKCkge1xuICAgICAgICAgIHJldHVybiAhIXRoaXMucHJvY2Vzc2VkWERhdGEubGVuZ3RoO1xuICAgICAgICB9XG4gICAgICAgIHJlZHJhd1BvaW50cygpIHtcbiAgICAgICAgICBsZXQgeSwgQiwgWCwgRiwgVCA9IHRoaXMsIHcgPSBULmNoYXJ0O1xuICAgICAgICAgIHRoaXMuZHJhd0VtcHR5KCksIFQuZ3JvdXAgJiYgIXcuc3R5bGVkTW9kZSAmJiBULmdyb3VwLnNoYWRvdyhULm9wdGlvbnMuc2hhZG93KSwgVC5wb2ludHMuZm9yRWFjaChmdW5jdGlvbihIKSB7XG4gICAgICAgICAgICBsZXQgQyA9IHt9O1xuICAgICAgICAgICAgQiA9IEguZ3JhcGhpYywgIUguaXNOdWxsICYmIEIgPyAoRiA9IEguc2hhcGVBcmdzLCB5ID0gSC5nZXRUcmFuc2xhdGUoKSwgdy5zdHlsZWRNb2RlIHx8IChYID0gVC5wb2ludEF0dHJpYnMoSCwgSC5zZWxlY3RlZCAmJiBcInNlbGVjdFwiKSksIEguZGVsYXllZFJlbmRlcmluZyA/IChCLnNldFJhZGlhbFJlZmVyZW5jZShULmNlbnRlcikuYXR0cihGKS5hdHRyKHkpLCB3LnN0eWxlZE1vZGUgfHwgQi5hdHRyKFgpLmF0dHIoeyBcInN0cm9rZS1saW5lam9pblwiOiBcInJvdW5kXCIgfSksIEguZGVsYXllZFJlbmRlcmluZyA9ICExKSA6IChCLnNldFJhZGlhbFJlZmVyZW5jZShULmNlbnRlciksIHcuc3R5bGVkTW9kZSB8fCBoKCEwLCBDLCBYKSwgaCghMCwgQywgRiwgeSksIEIuYW5pbWF0ZShDKSksIEIuYXR0cih7IHZpc2liaWxpdHk6IEgudmlzaWJsZSA/IFwiaW5oZXJpdFwiIDogXCJoaWRkZW5cIiB9KSwgQi5hZGRDbGFzcyhILmdldENsYXNzTmFtZSgpLCAhMCkpIDogQiAmJiAoSC5ncmFwaGljID0gQi5kZXN0cm95KCkpO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIHNvcnRCeUFuZ2xlKHksIEIpIHtcbiAgICAgICAgICB5LnNvcnQoZnVuY3Rpb24oWCwgRikge1xuICAgICAgICAgICAgcmV0dXJuIFguYW5nbGUgIT09IHZvaWQgMCAmJiAoRi5hbmdsZSAtIFguYW5nbGUpICogQjtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICB0cmFuc2xhdGUoeSkge1xuICAgICAgICAgIE8odGhpcywgXCJ0cmFuc2xhdGVcIiksIHRoaXMuZ2VuZXJhdGVQb2ludHMoKTtcbiAgICAgICAgICBsZXQgQiA9IHRoaXMub3B0aW9ucywgWCA9IEIuc2xpY2VkT2Zmc2V0LCBGID0gdShCLnN0YXJ0QW5nbGUsIEIuZW5kQW5nbGUpLCBUID0gdGhpcy5zdGFydEFuZ2xlUmFkID0gRi5zdGFydCwgdyA9ICh0aGlzLmVuZEFuZ2xlUmFkID0gRi5lbmQpIC0gVCwgSCA9IHRoaXMucG9pbnRzLCBDID0gQi5pZ25vcmVIaWRkZW5Qb2ludCwgcSA9IEgubGVuZ3RoLCBtLCBrLCB4LCBOLCBWLCBSLCBJLCBqID0gMDtcbiAgICAgICAgICBmb3IgKHkgfHwgKHRoaXMuY2VudGVyID0geSA9IHRoaXMuZ2V0Q2VudGVyKCkpLCBSID0gMDsgUiA8IHE7IFIrKykge1xuICAgICAgICAgICAgSSA9IEhbUl0sIG0gPSBUICsgaiAqIHcsIEkuaXNWYWxpZCgpICYmICghQyB8fCBJLnZpc2libGUpICYmIChqICs9IEkucGVyY2VudGFnZSAvIDEwMCksIGsgPSBUICsgaiAqIHc7XG4gICAgICAgICAgICBsZXQgVSA9IHsgeDogeVswXSwgeTogeVsxXSwgcjogeVsyXSAvIDIsIGlubmVyUjogeVszXSAvIDIsIHN0YXJ0OiBNYXRoLnJvdW5kKDFlMyAqIG0pIC8gMWUzLCBlbmQ6IE1hdGgucm91bmQoMWUzICogaykgLyAxZTMgfTtcbiAgICAgICAgICAgIEkuc2hhcGVUeXBlID0gXCJhcmNcIiwgSS5zaGFwZUFyZ3MgPSBVLCAoeCA9IChrICsgbSkgLyAyKSA+IDEuNSAqIE1hdGguUEkgPyB4IC09IDIgKiBNYXRoLlBJIDogeCA8IC1NYXRoLlBJIC8gMiAmJiAoeCArPSAyICogTWF0aC5QSSksIEkuc2xpY2VkVHJhbnNsYXRpb24gPSB7IHRyYW5zbGF0ZVg6IE1hdGgucm91bmQoTWF0aC5jb3MoeCkgKiBYKSwgdHJhbnNsYXRlWTogTWF0aC5yb3VuZChNYXRoLnNpbih4KSAqIFgpIH0sIE4gPSBNYXRoLmNvcyh4KSAqIHlbMl0gLyAyLCBWID0gTWF0aC5zaW4oeCkgKiB5WzJdIC8gMiwgSS50b29sdGlwUG9zID0gW3lbMF0gKyAwLjcgKiBOLCB5WzFdICsgMC43ICogVl0sIEkuaGFsZiA9IHggPCAtTWF0aC5QSSAvIDIgfHwgeCA+IE1hdGguUEkgLyAyID8gMSA6IDAsIEkuYW5nbGUgPSB4O1xuICAgICAgICAgIH1cbiAgICAgICAgICBPKHRoaXMsIFwiYWZ0ZXJUcmFuc2xhdGVcIik7XG4gICAgICAgIH1cbiAgICAgICAgdXBkYXRlVG90YWxzKCkge1xuICAgICAgICAgIGxldCB5ID0gdGhpcy5wb2ludHMsIEIgPSB5Lmxlbmd0aCwgWCA9IHRoaXMub3B0aW9ucy5pZ25vcmVIaWRkZW5Qb2ludCwgRiwgVCwgdyA9IDA7XG4gICAgICAgICAgZm9yIChGID0gMDsgRiA8IEI7IEYrKylcbiAgICAgICAgICAgIChUID0geVtGXSkuaXNWYWxpZCgpICYmICghWCB8fCBULnZpc2libGUpICYmICh3ICs9IFQueSk7XG4gICAgICAgICAgZm9yIChGID0gMCwgdGhpcy50b3RhbCA9IHc7IEYgPCBCOyBGKyspXG4gICAgICAgICAgICAoVCA9IHlbRl0pLnBlcmNlbnRhZ2UgPSB3ID4gMCAmJiAoVC52aXNpYmxlIHx8ICFYKSA/IFQueSAvIHcgKiAxMDAgOiAwLCBULnRvdGFsID0gdztcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIHYuZGVmYXVsdE9wdGlvbnMgPSBoKHAuZGVmYXVsdE9wdGlvbnMsIGwpLCBmKHYucHJvdG90eXBlLCB7IGF4aXNUeXBlczogW10sIGRpcmVjdFRvdWNoOiAhMCwgZHJhd0dyYXBoOiB2b2lkIDAsIGRyYXdUcmFja2VyOiBpLnByb3RvdHlwZS5kcmF3VHJhY2tlciwgZ2V0Q2VudGVyOiByLmdldENlbnRlciwgZ2V0U3ltYm9sOiBBLCBpbnZlcnRpYmxlOiAhMSwgaXNDYXJ0ZXNpYW46ICExLCBub1NoYXJlZFRvb2x0aXA6ICEwLCBwb2ludEF0dHJpYnM6IGkucHJvdG90eXBlLnBvaW50QXR0cmlicywgcG9pbnRDbGFzczogcywgcmVxdWlyZVNvcnRpbmc6ICExLCBzZWFyY2hQb2ludDogQSwgdHJhY2tlckdyb3VwczogW1wiZ3JvdXBcIiwgXCJkYXRhTGFiZWxzR3JvdXBcIl0gfSksIGQucmVnaXN0ZXJTZXJpZXNUeXBlKFwicGllXCIsIHYpLCB2O1xuICAgIH0pLCBuKG8sIFwiU2VyaWVzL1BpZS9QaWVEYXRhTGFiZWwuanNcIiwgW29bXCJDb3JlL1Nlcmllcy9EYXRhTGFiZWwuanNcIl0sIG9bXCJDb3JlL0dsb2JhbHMuanNcIl0sIG9bXCJDb3JlL1JlbmRlcmVyL1JlbmRlcmVyVXRpbGl0aWVzLmpzXCJdLCBvW1wiQ29yZS9TZXJpZXMvU2VyaWVzUmVnaXN0cnkuanNcIl0sIG9bXCJDb3JlL1V0aWxpdGllcy5qc1wiXV0sIGZ1bmN0aW9uKHIsIGksIGEsIHMsIGwpIHtcbiAgICAgIHZhciBwO1xuICAgICAgbGV0IHsgY29tcG9zZWQ6IGQsIG5vb3A6IGIgfSA9IGksIHsgZGlzdHJpYnV0ZTogTSB9ID0gYSwgeyBzZXJpZXM6IHUgfSA9IHMsIHsgYXJyYXlNYXg6IEEsIGNsYW1wOiB6LCBkZWZpbmVkOiBmLCBwaWNrOiBPLCBwdXNoVW5pcXVlOiBoLCByZWxhdGl2ZUxlbmd0aDogZyB9ID0gbDtcbiAgICAgIHJldHVybiBmdW5jdGlvbih2KSB7XG4gICAgICAgIGxldCBMID0geyByYWRpYWxEaXN0cmlidXRpb25ZOiBmdW5jdGlvbihULCB3KSB7XG4gICAgICAgICAgdmFyIEg7XG4gICAgICAgICAgcmV0dXJuICgoKEggPSB3LmRhdGFMYWJlbFBvc2l0aW9uKSA9PSBudWxsID8gdm9pZCAwIDogSC50b3ApIHx8IDApICsgVC5kaXN0cmlidXRlQm94LnBvcztcbiAgICAgICAgfSwgcmFkaWFsRGlzdHJpYnV0aW9uWDogZnVuY3Rpb24oVCwgdywgSCwgQywgcSkge1xuICAgICAgICAgIGxldCBtID0gcS5kYXRhTGFiZWxQb3NpdGlvbjtcbiAgICAgICAgICByZXR1cm4gVC5nZXRYKEggPCAoKG0gPT0gbnVsbCA/IHZvaWQgMCA6IG0udG9wKSB8fCAwKSArIDIgfHwgSCA+ICgobSA9PSBudWxsID8gdm9pZCAwIDogbS5ib3R0b20pIHx8IDApIC0gMiA/IEMgOiBILCB3LmhhbGYsIHcsIHEpO1xuICAgICAgICB9LCBqdXN0aWZ5OiBmdW5jdGlvbihULCB3LCBILCBDKSB7XG4gICAgICAgICAgdmFyIHE7XG4gICAgICAgICAgcmV0dXJuIENbMF0gKyAoVC5oYWxmID8gLTEgOiAxKSAqIChIICsgKCgocSA9IHcuZGF0YUxhYmVsUG9zaXRpb24pID09IG51bGwgPyB2b2lkIDAgOiBxLmRpc3RhbmNlKSB8fCAwKSk7XG4gICAgICAgIH0sIGFsaWduVG9QbG90RWRnZXM6IGZ1bmN0aW9uKFQsIHcsIEgsIEMpIHtcbiAgICAgICAgICBsZXQgcSA9IFQuZ2V0QkJveCgpLndpZHRoO1xuICAgICAgICAgIHJldHVybiB3ID8gcSArIEMgOiBIIC0gcSAtIEM7XG4gICAgICAgIH0sIGFsaWduVG9Db25uZWN0b3JzOiBmdW5jdGlvbihULCB3LCBILCBDKSB7XG4gICAgICAgICAgbGV0IHEgPSAwLCBtO1xuICAgICAgICAgIHJldHVybiBULmZvckVhY2goZnVuY3Rpb24oaykge1xuICAgICAgICAgICAgKG0gPSBrLmRhdGFMYWJlbC5nZXRCQm94KCkud2lkdGgpID4gcSAmJiAocSA9IG0pO1xuICAgICAgICAgIH0pLCB3ID8gcSArIEMgOiBIIC0gcSAtIEM7XG4gICAgICAgIH0gfTtcbiAgICAgICAgZnVuY3Rpb24geShULCB3KSB7XG4gICAgICAgICAgbGV0IHsgY2VudGVyOiBILCBvcHRpb25zOiBDIH0gPSB0aGlzLCBxID0gSFsyXSAvIDIsIG0gPSBULmFuZ2xlIHx8IDAsIGsgPSBNYXRoLmNvcyhtKSwgeCA9IE1hdGguc2luKG0pLCBOID0gSFswXSArIGsgKiBxLCBWID0gSFsxXSArIHggKiBxLCBSID0gTWF0aC5taW4oKEMuc2xpY2VkT2Zmc2V0IHx8IDApICsgKEMuYm9yZGVyV2lkdGggfHwgMCksIHcgLyA1KTtcbiAgICAgICAgICByZXR1cm4geyBuYXR1cmFsOiB7IHg6IE4gKyBrICogdywgeTogViArIHggKiB3IH0sIGNvbXB1dGVkOiB7fSwgYWxpZ25tZW50OiB3IDwgMCA/IFwiY2VudGVyXCIgOiBULmhhbGYgPyBcInJpZ2h0XCIgOiBcImxlZnRcIiwgY29ubmVjdG9yUG9zaXRpb246IHsgYnJlYWtBdDogeyB4OiBOICsgayAqIFIsIHk6IFYgKyB4ICogUiB9LCB0b3VjaGluZ1NsaWNlQXQ6IHsgeDogTiwgeTogViB9IH0sIGRpc3RhbmNlOiB3IH07XG4gICAgICAgIH1cbiAgICAgICAgZnVuY3Rpb24gQigpIHtcbiAgICAgICAgICB2YXIgUTtcbiAgICAgICAgICBsZXQgVCA9IHRoaXMsIHcgPSBULnBvaW50cywgSCA9IFQuY2hhcnQsIEMgPSBILnBsb3RXaWR0aCwgcSA9IEgucGxvdEhlaWdodCwgbSA9IEgucGxvdExlZnQsIGsgPSBNYXRoLnJvdW5kKEguY2hhcnRXaWR0aCAvIDMpLCB4ID0gVC5jZW50ZXIsIE4gPSB4WzJdIC8gMiwgViA9IHhbMV0sIFIgPSBbW10sIFtdXSwgSSA9IFswLCAwLCAwLCAwXSwgaiA9IFQuZGF0YUxhYmVsUG9zaXRpb25lcnMsIFUsIF8sIHIxLCBLID0gMDtcbiAgICAgICAgICBULnZpc2libGUgJiYgKChRID0gVC5oYXNEYXRhTGFiZWxzKSAhPSBudWxsICYmIFEuY2FsbChUKSkgJiYgKHcuZm9yRWFjaCgoRSkgPT4ge1xuICAgICAgICAgICAgKEUuZGF0YUxhYmVscyB8fCBbXSkuZm9yRWFjaCgoRCkgPT4ge1xuICAgICAgICAgICAgICBELnNob3J0ZW5lZCAmJiAoRC5hdHRyKHsgd2lkdGg6IFwiYXV0b1wiIH0pLmNzcyh7IHdpZHRoOiBcImF1dG9cIiwgdGV4dE92ZXJmbG93OiBcImNsaXBcIiB9KSwgRC5zaG9ydGVuZWQgPSAhMSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9KSwgdS5wcm90b3R5cGUuZHJhd0RhdGFMYWJlbHMuYXBwbHkoVCksIHcuZm9yRWFjaCgoRSkgPT4ge1xuICAgICAgICAgICAgKEUuZGF0YUxhYmVscyB8fCBbXSkuZm9yRWFjaCgoRCwgRykgPT4ge1xuICAgICAgICAgICAgICB2YXIgUDtcbiAgICAgICAgICAgICAgbGV0IEogPSB4WzJdIC8gMiwgUyA9IEQub3B0aW9ucywgVyA9IGcoKFMgPT0gbnVsbCA/IHZvaWQgMCA6IFMuZGlzdGFuY2UpIHx8IDAsIEopO1xuICAgICAgICAgICAgICBHID09PSAwICYmIFJbRS5oYWxmXS5wdXNoKEUpLCAhZigoUCA9IFMgPT0gbnVsbCA/IHZvaWQgMCA6IFMuc3R5bGUpID09IG51bGwgPyB2b2lkIDAgOiBQLndpZHRoKSAmJiBELmdldEJCb3goKS53aWR0aCA+IGsgJiYgKEQuY3NzKHsgd2lkdGg6IE1hdGgucm91bmQoMC43ICogaykgKyBcInB4XCIgfSksIEQuc2hvcnRlbmVkID0gITApLCBELmRhdGFMYWJlbFBvc2l0aW9uID0gdGhpcy5nZXREYXRhTGFiZWxQb3NpdGlvbihFLCBXKSwgSyA9IE1hdGgubWF4KEssIFcpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfSksIFIuZm9yRWFjaCgoRSwgRCkgPT4ge1xuICAgICAgICAgICAgbGV0IEcgPSBFLmxlbmd0aCwgSiA9IFtdLCBTLCBXLCBQID0gMCwgWTtcbiAgICAgICAgICAgIEcgJiYgKFQuc29ydEJ5QW5nbGUoRSwgRCAtIDAuNSksIEsgPiAwICYmIChTID0gTWF0aC5tYXgoMCwgViAtIE4gLSBLKSwgVyA9IE1hdGgubWluKFYgKyBOICsgSywgSC5wbG90SGVpZ2h0KSwgRS5mb3JFYWNoKChaKSA9PiB7XG4gICAgICAgICAgICAgIChaLmRhdGFMYWJlbHMgfHwgW10pLmZvckVhY2goKHQxKSA9PiB7XG4gICAgICAgICAgICAgICAgdmFyIG4xO1xuICAgICAgICAgICAgICAgIGxldCBpMSA9IHQxLmRhdGFMYWJlbFBvc2l0aW9uO1xuICAgICAgICAgICAgICAgIGkxICYmIGkxLmRpc3RhbmNlID4gMCAmJiAoaTEudG9wID0gTWF0aC5tYXgoMCwgViAtIE4gLSBpMS5kaXN0YW5jZSksIGkxLmJvdHRvbSA9IE1hdGgubWluKFYgKyBOICsgaTEuZGlzdGFuY2UsIEgucGxvdEhlaWdodCksIFAgPSB0MS5nZXRCQm94KCkuaGVpZ2h0IHx8IDIxLCB0MS5saW5lSGVpZ2h0ID0gSC5yZW5kZXJlci5mb250TWV0cmljcyh0MS50ZXh0IHx8IHQxKS5oICsgMiAqIHQxLnBhZGRpbmcsIFouZGlzdHJpYnV0ZUJveCA9IHsgdGFyZ2V0OiAoKChuMSA9IHQxLmRhdGFMYWJlbFBvc2l0aW9uKSA9PSBudWxsID8gdm9pZCAwIDogbjEubmF0dXJhbC55KSB8fCAwKSAtIGkxLnRvcCArIHQxLmxpbmVIZWlnaHQgLyAyLCBzaXplOiBQLCByYW5rOiBaLnkgfSwgSi5wdXNoKFouZGlzdHJpYnV0ZUJveCkpO1xuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0pLCBNKEosIFkgPSBXICsgUCAtIFMsIFkgLyA1KSksIEUuZm9yRWFjaCgoWikgPT4ge1xuICAgICAgICAgICAgICAoWi5kYXRhTGFiZWxzIHx8IFtdKS5mb3JFYWNoKCh0MSkgPT4ge1xuICAgICAgICAgICAgICAgIGxldCBpMSA9IHQxLm9wdGlvbnMgfHwge30sIG4xID0gWi5kaXN0cmlidXRlQm94LCBzMSA9IHQxLmRhdGFMYWJlbFBvc2l0aW9uLCBkMSA9IChzMSA9PSBudWxsID8gdm9pZCAwIDogczEubmF0dXJhbC55KSB8fCAwLCBiMSA9IGkxLmNvbm5lY3RvclBhZGRpbmcgfHwgMCwgYzEgPSB0MS5saW5lSGVpZ2h0IHx8IDIxLCBhMSA9IChjMSAtIHQxLmdldEJCb3goKS5oZWlnaHQpIC8gMiwgbDEgPSAwLCBwMSA9IGQxLCBNMSA9IFwiaW5oZXJpdFwiO1xuICAgICAgICAgICAgICAgIGlmIChzMSkge1xuICAgICAgICAgICAgICAgICAgaWYgKEogJiYgZihuMSkgJiYgczEuZGlzdGFuY2UgPiAwICYmIChuMS5wb3MgPT09IHZvaWQgMCA/IE0xID0gXCJoaWRkZW5cIiA6IChyMSA9IG4xLnNpemUsIHAxID0gai5yYWRpYWxEaXN0cmlidXRpb25ZKFosIHQxKSkpLCBpMS5qdXN0aWZ5KVxuICAgICAgICAgICAgICAgICAgICBsMSA9IGouanVzdGlmeShaLCB0MSwgTiwgeCk7XG4gICAgICAgICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgICAgIHN3aXRjaCAoaTEuYWxpZ25Ubykge1xuICAgICAgICAgICAgICAgICAgICAgIGNhc2UgXCJjb25uZWN0b3JzXCI6XG4gICAgICAgICAgICAgICAgICAgICAgICBsMSA9IGouYWxpZ25Ub0Nvbm5lY3RvcnMoRSwgRCwgQywgbSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICBjYXNlIFwicGxvdEVkZ2VzXCI6XG4gICAgICAgICAgICAgICAgICAgICAgICBsMSA9IGouYWxpZ25Ub1Bsb3RFZGdlcyh0MSwgRCwgQywgbSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgICAgICAgICAgbDEgPSBqLnJhZGlhbERpc3RyaWJ1dGlvblgoVCwgWiwgcDEgLSBhMSwgZDEsIHQxKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgaWYgKHMxLmF0dHJpYnMgPSB7IHZpc2liaWxpdHk6IE0xLCBhbGlnbjogczEuYWxpZ25tZW50IH0sIHMxLnBvc0F0dHJpYnMgPSB7IHg6IGwxICsgKGkxLnggfHwgMCkgKyAoeyBsZWZ0OiBiMSwgcmlnaHQ6IC1iMSB9W3MxLmFsaWdubWVudF0gfHwgMCksIHk6IHAxICsgKGkxLnkgfHwgMCkgLSBjMSAvIDIgfSwgczEuY29tcHV0ZWQueCA9IGwxLCBzMS5jb21wdXRlZC55ID0gcDEgLSBhMSwgTyhpMS5jcm9wLCAhMCkpIHtcbiAgICAgICAgICAgICAgICAgICAgbGV0IEExO1xuICAgICAgICAgICAgICAgICAgICBsMSAtIChfID0gdDEuZ2V0QkJveCgpLndpZHRoKSA8IGIxICYmIEQgPT09IDEgPyAoQTEgPSBNYXRoLnJvdW5kKF8gLSBsMSArIGIxKSwgSVszXSA9IE1hdGgubWF4KEExLCBJWzNdKSkgOiBsMSArIF8gPiBDIC0gYjEgJiYgRCA9PT0gMCAmJiAoQTEgPSBNYXRoLnJvdW5kKGwxICsgXyAtIEMgKyBiMSksIElbMV0gPSBNYXRoLm1heChBMSwgSVsxXSkpLCBwMSAtIHIxIC8gMiA8IDAgPyBJWzBdID0gTWF0aC5tYXgoTWF0aC5yb3VuZCgtcDEgKyByMSAvIDIpLCBJWzBdKSA6IHAxICsgcjEgLyAyID4gcSAmJiAoSVsyXSA9IE1hdGgubWF4KE1hdGgucm91bmQocDEgKyByMSAvIDIgLSBxKSwgSVsyXSkpLCBzMS5zaWRlT3ZlcmZsb3cgPSBBMTtcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSkpO1xuICAgICAgICAgIH0pLCAoQShJKSA9PT0gMCB8fCB0aGlzLnZlcmlmeURhdGFMYWJlbE92ZXJmbG93KEkpKSAmJiAodGhpcy5wbGFjZURhdGFMYWJlbHMoKSwgdGhpcy5wb2ludHMuZm9yRWFjaCgoRSkgPT4ge1xuICAgICAgICAgICAgKEUuZGF0YUxhYmVscyB8fCBbXSkuZm9yRWFjaCgoRCkgPT4ge1xuICAgICAgICAgICAgICB2YXIgVztcbiAgICAgICAgICAgICAgbGV0IHsgY29ubmVjdG9yQ29sb3I6IEcsIGNvbm5lY3RvcldpZHRoOiBKID0gMSB9ID0gRC5vcHRpb25zIHx8IHt9LCBTID0gRC5kYXRhTGFiZWxQb3NpdGlvbjtcbiAgICAgICAgICAgICAgaWYgKEopIHtcbiAgICAgICAgICAgICAgICBsZXQgUDtcbiAgICAgICAgICAgICAgICBVID0gRC5jb25uZWN0b3IsIFMgJiYgUy5kaXN0YW5jZSA+IDAgPyAoUCA9ICFVLCBVIHx8IChELmNvbm5lY3RvciA9IFUgPSBILnJlbmRlcmVyLnBhdGgoKS5hZGRDbGFzcyhcImhpZ2hjaGFydHMtZGF0YS1sYWJlbC1jb25uZWN0b3IgIGhpZ2hjaGFydHMtY29sb3ItXCIgKyBFLmNvbG9ySW5kZXggKyAoRS5jbGFzc05hbWUgPyBcIiBcIiArIEUuY2xhc3NOYW1lIDogXCJcIikpLmFkZChULmRhdGFMYWJlbHNHcm91cCkpLCBILnN0eWxlZE1vZGUgfHwgVS5hdHRyKHsgXCJzdHJva2Utd2lkdGhcIjogSiwgc3Ryb2tlOiBHIHx8IEUuY29sb3IgfHwgXCIjNjY2NjY2XCIgfSksIFVbUCA/IFwiYXR0clwiIDogXCJhbmltYXRlXCJdKHsgZDogRS5nZXRDb25uZWN0b3JQYXRoKEQpIH0pLCBVLmF0dHIoeyB2aXNpYmlsaXR5OiAoVyA9IFMuYXR0cmlicykgPT0gbnVsbCA/IHZvaWQgMCA6IFcudmlzaWJpbGl0eSB9KSkgOiBVICYmIChELmNvbm5lY3RvciA9IFUuZGVzdHJveSgpKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfSkpKTtcbiAgICAgICAgfVxuICAgICAgICBmdW5jdGlvbiBYKCkge1xuICAgICAgICAgIHRoaXMucG9pbnRzLmZvckVhY2goKFQpID0+IHtcbiAgICAgICAgICAgIChULmRhdGFMYWJlbHMgfHwgW10pLmZvckVhY2goKHcpID0+IHtcbiAgICAgICAgICAgICAgdmFyIEM7XG4gICAgICAgICAgICAgIGxldCBIID0gdy5kYXRhTGFiZWxQb3NpdGlvbjtcbiAgICAgICAgICAgICAgSCA/IChILnNpZGVPdmVyZmxvdyAmJiAody5jc3MoeyB3aWR0aDogTWF0aC5tYXgody5nZXRCQm94KCkud2lkdGggLSBILnNpZGVPdmVyZmxvdywgMCkgKyBcInB4XCIsIHRleHRPdmVyZmxvdzogKCgoQyA9IHcub3B0aW9ucykgPT0gbnVsbCA/IHZvaWQgMCA6IEMuc3R5bGUpIHx8IHt9KS50ZXh0T3ZlcmZsb3cgfHwgXCJlbGxpcHNpc1wiIH0pLCB3LnNob3J0ZW5lZCA9ICEwKSwgdy5hdHRyKEguYXR0cmlicyksIHdbdy5tb3ZlZCA/IFwiYW5pbWF0ZVwiIDogXCJhdHRyXCJdKEgucG9zQXR0cmlicyksIHcubW92ZWQgPSAhMCkgOiB3ICYmIHcuYXR0cih7IHk6IC05OTk5IH0pO1xuICAgICAgICAgICAgfSksIGRlbGV0ZSBULmRpc3RyaWJ1dGVCb3g7XG4gICAgICAgICAgfSwgdGhpcyk7XG4gICAgICAgIH1cbiAgICAgICAgZnVuY3Rpb24gRihUKSB7XG4gICAgICAgICAgbGV0IHcgPSB0aGlzLmNlbnRlciwgSCA9IHRoaXMub3B0aW9ucywgQyA9IEguY2VudGVyLCBxID0gSC5taW5TaXplIHx8IDgwLCBtID0gcSwgayA9IEguc2l6ZSAhPT0gbnVsbDtcbiAgICAgICAgICByZXR1cm4gIWsgJiYgKENbMF0gIT09IG51bGwgPyBtID0gTWF0aC5tYXgod1syXSAtIE1hdGgubWF4KFRbMV0sIFRbM10pLCBxKSA6IChtID0gTWF0aC5tYXgod1syXSAtIFRbMV0gLSBUWzNdLCBxKSwgd1swXSArPSAoVFszXSAtIFRbMV0pIC8gMiksIENbMV0gIT09IG51bGwgPyBtID0geihtLCBxLCB3WzJdIC0gTWF0aC5tYXgoVFswXSwgVFsyXSkpIDogKG0gPSB6KG0sIHEsIHdbMl0gLSBUWzBdIC0gVFsyXSksIHdbMV0gKz0gKFRbMF0gLSBUWzJdKSAvIDIpLCBtIDwgd1syXSA/ICh3WzJdID0gbSwgd1szXSA9IE1hdGgubWluKEgudGhpY2tuZXNzID8gTWF0aC5tYXgoMCwgbSAtIDIgKiBILnRoaWNrbmVzcykgOiBNYXRoLm1heCgwLCBnKEguaW5uZXJTaXplIHx8IDAsIG0pKSwgbSksIHRoaXMudHJhbnNsYXRlKHcpLCB0aGlzLmRyYXdEYXRhTGFiZWxzICYmIHRoaXMuZHJhd0RhdGFMYWJlbHMoKSkgOiBrID0gITApLCBrO1xuICAgICAgICB9XG4gICAgICAgIHYuY29tcG9zZSA9IGZ1bmN0aW9uKFQpIHtcbiAgICAgICAgICBpZiAoci5jb21wb3NlKHUpLCBoKGQsIFwiUGllRGF0YUxhYmVsXCIpKSB7XG4gICAgICAgICAgICBsZXQgdyA9IFQucHJvdG90eXBlO1xuICAgICAgICAgICAgdy5kYXRhTGFiZWxQb3NpdGlvbmVycyA9IEwsIHcuYWxpZ25EYXRhTGFiZWwgPSBiLCB3LmRyYXdEYXRhTGFiZWxzID0gQiwgdy5nZXREYXRhTGFiZWxQb3NpdGlvbiA9IHksIHcucGxhY2VEYXRhTGFiZWxzID0gWCwgdy52ZXJpZnlEYXRhTGFiZWxPdmVyZmxvdyA9IEY7XG4gICAgICAgICAgfVxuICAgICAgICB9O1xuICAgICAgfShwIHx8IChwID0ge30pKSwgcDtcbiAgICB9KSwgbihvLCBcIkNvcmUvR2VvbWV0cnkvR2VvbWV0cnlVdGlsaXRpZXMuanNcIiwgW10sIGZ1bmN0aW9uKCkge1xuICAgICAgdmFyIHIsIGk7XG4gICAgICByZXR1cm4gKGkgPSByIHx8IChyID0ge30pKS5nZXRDZW50ZXJPZlBvaW50cyA9IGZ1bmN0aW9uKGEpIHtcbiAgICAgICAgbGV0IHMgPSBhLnJlZHVjZSgobCwgcCkgPT4gKGwueCArPSBwLngsIGwueSArPSBwLnksIGwpLCB7IHg6IDAsIHk6IDAgfSk7XG4gICAgICAgIHJldHVybiB7IHg6IHMueCAvIGEubGVuZ3RoLCB5OiBzLnkgLyBhLmxlbmd0aCB9O1xuICAgICAgfSwgaS5nZXREaXN0YW5jZUJldHdlZW5Qb2ludHMgPSBmdW5jdGlvbihhLCBzKSB7XG4gICAgICAgIHJldHVybiBNYXRoLnNxcnQoTWF0aC5wb3cocy54IC0gYS54LCAyKSArIE1hdGgucG93KHMueSAtIGEueSwgMikpO1xuICAgICAgfSwgaS5nZXRBbmdsZUJldHdlZW5Qb2ludHMgPSBmdW5jdGlvbihhLCBzKSB7XG4gICAgICAgIHJldHVybiBNYXRoLmF0YW4yKHMueCAtIGEueCwgcy55IC0gYS55KTtcbiAgICAgIH0sIGkucG9pbnRJblBvbHlnb24gPSBmdW5jdGlvbih7IHg6IGEsIHk6IHMgfSwgbCkge1xuICAgICAgICBsZXQgcCA9IGwubGVuZ3RoLCBkLCBiLCBNID0gITE7XG4gICAgICAgIGZvciAoZCA9IDAsIGIgPSBwIC0gMTsgZCA8IHA7IGIgPSBkKyspIHtcbiAgICAgICAgICBsZXQgW3UsIEFdID0gbFtkXSwgW3osIGZdID0gbFtiXTtcbiAgICAgICAgICBBID4gcyAhPSBmID4gcyAmJiBhIDwgKHogLSB1KSAqIChzIC0gQSkgLyAoZiAtIEEpICsgdSAmJiAoTSA9ICFNKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gTTtcbiAgICAgIH0sIHI7XG4gICAgfSksIG4obywgXCJFeHRlbnNpb25zL092ZXJsYXBwaW5nRGF0YUxhYmVscy5qc1wiLCBbb1tcIkNvcmUvR2VvbWV0cnkvR2VvbWV0cnlVdGlsaXRpZXMuanNcIl0sIG9bXCJDb3JlL1V0aWxpdGllcy5qc1wiXV0sIGZ1bmN0aW9uKHIsIGkpIHtcbiAgICAgIGxldCB7IHBvaW50SW5Qb2x5Z29uOiBhIH0gPSByLCB7IGFkZEV2ZW50OiBzLCBmaXJlRXZlbnQ6IGwsIG9iamVjdEVhY2g6IHAsIHBpY2s6IGQgfSA9IGk7XG4gICAgICBmdW5jdGlvbiBiKEEpIHtcbiAgICAgICAgbGV0IHogPSBBLmxlbmd0aCwgZiA9IChYLCBGKSA9PiAhKEYueCA+PSBYLnggKyBYLndpZHRoIHx8IEYueCArIEYud2lkdGggPD0gWC54IHx8IEYueSA+PSBYLnkgKyBYLmhlaWdodCB8fCBGLnkgKyBGLmhlaWdodCA8PSBYLnkpLCBPID0gKFgsIEYpID0+IHtcbiAgICAgICAgICBmb3IgKGxldCBUIG9mIFgpXG4gICAgICAgICAgICBpZiAoYSh7IHg6IFRbMF0sIHk6IFRbMV0gfSwgRikpXG4gICAgICAgICAgICAgIHJldHVybiAhMDtcbiAgICAgICAgICByZXR1cm4gITE7XG4gICAgICAgIH0sIGgsIGcsIHYsIEwsIHksIEIgPSAhMTtcbiAgICAgICAgZm9yIChsZXQgWCA9IDA7IFggPCB6OyBYKyspXG4gICAgICAgICAgKGggPSBBW1hdKSAmJiAoaC5vbGRPcGFjaXR5ID0gaC5vcGFjaXR5LCBoLm5ld09wYWNpdHkgPSAxLCBoLmFic29sdXRlQm94ID0gZnVuY3Rpb24oRikge1xuICAgICAgICAgICAgdmFyIFQsIHc7XG4gICAgICAgICAgICBpZiAoRiAmJiAoIUYuYWxpZ25BdHRyIHx8IEYucGxhY2VkKSkge1xuICAgICAgICAgICAgICBsZXQgSCA9IEYuYm94ID8gMCA6IEYucGFkZGluZyB8fCAwLCBDID0gRi5hbGlnbkF0dHIgfHwgeyB4OiBGLmF0dHIoXCJ4XCIpLCB5OiBGLmF0dHIoXCJ5XCIpIH0sIHEgPSBGLmdldEJCb3goKTtcbiAgICAgICAgICAgICAgcmV0dXJuIEYud2lkdGggPSBxLndpZHRoLCBGLmhlaWdodCA9IHEuaGVpZ2h0LCB7IHg6IEMueCArICgoKFQgPSBGLnBhcmVudEdyb3VwKSA9PSBudWxsID8gdm9pZCAwIDogVC50cmFuc2xhdGVYKSB8fCAwKSArIEgsIHk6IEMueSArICgoKHcgPSBGLnBhcmVudEdyb3VwKSA9PSBudWxsID8gdm9pZCAwIDogdy50cmFuc2xhdGVZKSB8fCAwKSArIEgsIHdpZHRoOiAoRi53aWR0aCB8fCAwKSAtIDIgKiBILCBoZWlnaHQ6IChGLmhlaWdodCB8fCAwKSAtIDIgKiBILCBwb2x5Z29uOiBxID09IG51bGwgPyB2b2lkIDAgOiBxLnBvbHlnb24gfTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KGgpKTtcbiAgICAgICAgQS5zb3J0KChYLCBGKSA9PiAoRi5sYWJlbHJhbmsgfHwgMCkgLSAoWC5sYWJlbHJhbmsgfHwgMCkpO1xuICAgICAgICBmb3IgKGxldCBYID0gMDsgWCA8IHo7ICsrWCkge1xuICAgICAgICAgIEwgPSAoZyA9IEFbWF0pICYmIGcuYWJzb2x1dGVCb3g7XG4gICAgICAgICAgbGV0IEYgPSBMID09IG51bGwgPyB2b2lkIDAgOiBMLnBvbHlnb247XG4gICAgICAgICAgZm9yIChsZXQgVCA9IFggKyAxOyBUIDwgejsgKytUKSB7XG4gICAgICAgICAgICB5ID0gKHYgPSBBW1RdKSAmJiB2LmFic29sdXRlQm94O1xuICAgICAgICAgICAgbGV0IHcgPSAhMTtcbiAgICAgICAgICAgIGlmIChMICYmIHkgJiYgZyAhPT0gdiAmJiBnLm5ld09wYWNpdHkgIT09IDAgJiYgdi5uZXdPcGFjaXR5ICE9PSAwICYmIGcudmlzaWJpbGl0eSAhPT0gXCJoaWRkZW5cIiAmJiB2LnZpc2liaWxpdHkgIT09IFwiaGlkZGVuXCIpIHtcbiAgICAgICAgICAgICAgbGV0IEggPSB5LnBvbHlnb247XG4gICAgICAgICAgICAgIGlmIChGICYmIEggJiYgRiAhPT0gSCA/IE8oRiwgSCkgJiYgKHcgPSAhMCkgOiBmKEwsIHkpICYmICh3ID0gITApLCB3KSB7XG4gICAgICAgICAgICAgICAgbGV0IEMgPSBnLmxhYmVscmFuayA8IHYubGFiZWxyYW5rID8gZyA6IHYsIHEgPSBDLnRleHQ7XG4gICAgICAgICAgICAgICAgQy5uZXdPcGFjaXR5ID0gMCwgcSAhPSBudWxsICYmIHEuZWxlbWVudC5xdWVyeVNlbGVjdG9yKFwidGV4dFBhdGhcIikgJiYgcS5oaWRlKCk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZm9yIChsZXQgWCBvZiBBKVxuICAgICAgICAgIE0oWCwgdGhpcykgJiYgKEIgPSAhMCk7XG4gICAgICAgIEIgJiYgbCh0aGlzLCBcImFmdGVySGlkZUFsbE92ZXJsYXBwaW5nTGFiZWxzXCIpO1xuICAgICAgfVxuICAgICAgZnVuY3Rpb24gTShBLCB6KSB7XG4gICAgICAgIGxldCBmLCBPLCBoID0gITE7XG4gICAgICAgIHJldHVybiBBICYmIChPID0gQS5uZXdPcGFjaXR5LCBBLm9sZE9wYWNpdHkgIT09IE8gJiYgKEEuaGFzQ2xhc3MoXCJoaWdoY2hhcnRzLWRhdGEtbGFiZWxcIikgPyAoQVtPID8gXCJyZW1vdmVDbGFzc1wiIDogXCJhZGRDbGFzc1wiXShcImhpZ2hjaGFydHMtZGF0YS1sYWJlbC1oaWRkZW5cIiksIGYgPSBmdW5jdGlvbigpIHtcbiAgICAgICAgICB6LnN0eWxlZE1vZGUgfHwgQS5jc3MoeyBwb2ludGVyRXZlbnRzOiBPID8gXCJhdXRvXCIgOiBcIm5vbmVcIiB9KTtcbiAgICAgICAgfSwgaCA9ICEwLCBBW0EuaXNPbGQgPyBcImFuaW1hdGVcIiA6IFwiYXR0clwiXSh7IG9wYWNpdHk6IE8gfSwgdm9pZCAwLCBmKSwgbCh6LCBcImFmdGVySGlkZU92ZXJsYXBwaW5nTGFiZWxcIikpIDogQS5hdHRyKHsgb3BhY2l0eTogTyB9KSksIEEuaXNPbGQgPSAhMCksIGg7XG4gICAgICB9XG4gICAgICBmdW5jdGlvbiB1KCkge1xuICAgICAgICB2YXIgZjtcbiAgICAgICAgbGV0IEEgPSB0aGlzLCB6ID0gW107XG4gICAgICAgIGZvciAobGV0IE8gb2YgQS5sYWJlbENvbGxlY3RvcnMgfHwgW10pXG4gICAgICAgICAgeiA9IHouY29uY2F0KE8oKSk7XG4gICAgICAgIGZvciAobGV0IE8gb2YgQS55QXhpcyB8fCBbXSlcbiAgICAgICAgICBPLnN0YWNraW5nICYmIE8ub3B0aW9ucy5zdGFja0xhYmVscyAmJiAhTy5vcHRpb25zLnN0YWNrTGFiZWxzLmFsbG93T3ZlcmxhcCAmJiBwKE8uc3RhY2tpbmcuc3RhY2tzLCAoaCkgPT4ge1xuICAgICAgICAgICAgcChoLCAoZykgPT4ge1xuICAgICAgICAgICAgICBnLmxhYmVsICYmIHoucHVzaChnLmxhYmVsKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH0pO1xuICAgICAgICBmb3IgKGxldCBPIG9mIEEuc2VyaWVzIHx8IFtdKVxuICAgICAgICAgIGlmIChPLnZpc2libGUgJiYgKChmID0gTy5oYXNEYXRhTGFiZWxzKSAhPSBudWxsICYmIGYuY2FsbChPKSkpIHtcbiAgICAgICAgICAgIGxldCBoID0gKGcpID0+IHtcbiAgICAgICAgICAgICAgZm9yIChsZXQgdiBvZiBnKVxuICAgICAgICAgICAgICAgIHYudmlzaWJsZSAmJiAodi5kYXRhTGFiZWxzIHx8IFtdKS5mb3JFYWNoKChMKSA9PiB7XG4gICAgICAgICAgICAgICAgICB2YXIgQjtcbiAgICAgICAgICAgICAgICAgIGxldCB5ID0gTC5vcHRpb25zIHx8IHt9O1xuICAgICAgICAgICAgICAgICAgTC5sYWJlbHJhbmsgPSBkKHkubGFiZWxyYW5rLCB2LmxhYmVscmFuaywgKEIgPSB2LnNoYXBlQXJncykgPT0gbnVsbCA/IHZvaWQgMCA6IEIuaGVpZ2h0KSwgeS5hbGxvd092ZXJsYXAgPz8gTnVtYmVyKHkuZGlzdGFuY2UpID4gMCA/IChMLm9sZE9wYWNpdHkgPSBMLm9wYWNpdHksIEwubmV3T3BhY2l0eSA9IDEsIE0oTCwgQSkpIDogei5wdXNoKEwpO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIGgoTy5ub2RlcyB8fCBbXSksIGgoTy5wb2ludHMpO1xuICAgICAgICAgIH1cbiAgICAgICAgdGhpcy5oaWRlT3ZlcmxhcHBpbmdMYWJlbHMoeik7XG4gICAgICB9XG4gICAgICByZXR1cm4geyBjb21wb3NlOiBmdW5jdGlvbihBKSB7XG4gICAgICAgIGxldCB6ID0gQS5wcm90b3R5cGU7XG4gICAgICAgIHouaGlkZU92ZXJsYXBwaW5nTGFiZWxzIHx8ICh6LmhpZGVPdmVybGFwcGluZ0xhYmVscyA9IGIsIHMoQSwgXCJyZW5kZXJcIiwgdSkpO1xuICAgICAgfSB9O1xuICAgIH0pLCBuKG8sIFwiRXh0ZW5zaW9ucy9Cb3JkZXJSYWRpdXMuanNcIiwgW29bXCJDb3JlL0RlZmF1bHRzLmpzXCJdLCBvW1wiQ29yZS9HbG9iYWxzLmpzXCJdLCBvW1wiQ29yZS9VdGlsaXRpZXMuanNcIl1dLCBmdW5jdGlvbihyLCBpLCBhKSB7XG4gICAgICBsZXQgeyBkZWZhdWx0T3B0aW9uczogcyB9ID0gciwgeyBub29wOiBsIH0gPSBpLCB7IGFkZEV2ZW50OiBwLCBleHRlbmQ6IGQsIGlzT2JqZWN0OiBiLCBtZXJnZTogTSwgcmVsYXRpdmVMZW5ndGg6IHUgfSA9IGEsIEEgPSB7IHJhZGl1czogMCwgc2NvcGU6IFwic3RhY2tcIiwgd2hlcmU6IHZvaWQgMCB9LCB6ID0gbCwgZiA9IGw7XG4gICAgICBmdW5jdGlvbiBPKHksIEIsIFgsIEYsIFQgPSB7fSkge1xuICAgICAgICBsZXQgdyA9IHooeSwgQiwgWCwgRiwgVCksIHsgaW5uZXJSOiBIID0gMCwgcjogQyA9IFgsIHN0YXJ0OiBxID0gMCwgZW5kOiBtID0gMCB9ID0gVDtcbiAgICAgICAgaWYgKFQub3BlbiB8fCAhVC5ib3JkZXJSYWRpdXMpXG4gICAgICAgICAgcmV0dXJuIHc7XG4gICAgICAgIGxldCBrID0gbSAtIHEsIHggPSBNYXRoLnNpbihrIC8gMiksIE4gPSBNYXRoLm1heChNYXRoLm1pbih1KFQuYm9yZGVyUmFkaXVzIHx8IDAsIEMgLSBIKSwgKEMgLSBIKSAvIDIsIEMgKiB4IC8gKDEgKyB4KSksIDApLCBWID0gTWF0aC5taW4oTiwgayAvIE1hdGguUEkgKiAyICogSCksIFIgPSB3Lmxlbmd0aCAtIDE7XG4gICAgICAgIGZvciAoOyBSLS07IClcbiAgICAgICAgICAoZnVuY3Rpb24oSSwgaiwgVSkge1xuICAgICAgICAgICAgbGV0IF8sIHIxLCBLLCBRID0gSVtqXSwgRSA9IElbaiArIDFdO1xuICAgICAgICAgICAgaWYgKEVbMF0gPT09IFwiWlwiICYmIChFID0gSVswXSksIChRWzBdID09PSBcIk1cIiB8fCBRWzBdID09PSBcIkxcIikgJiYgRVswXSA9PT0gXCJBXCIgPyAoXyA9IFEsIHIxID0gRSwgSyA9ICEwKSA6IFFbMF0gPT09IFwiQVwiICYmIChFWzBdID09PSBcIk1cIiB8fCBFWzBdID09PSBcIkxcIikgJiYgKF8gPSBFLCByMSA9IFEpLCBfICYmIHIxICYmIHIxLnBhcmFtcykge1xuICAgICAgICAgICAgICBsZXQgRCA9IHIxWzFdLCBHID0gcjFbNV0sIEogPSByMS5wYXJhbXMsIHsgc3RhcnQ6IFMsIGVuZDogVywgY3g6IFAsIGN5OiBZIH0gPSBKLCBaID0gRyA/IEQgLSBVIDogRCArIFUsIHQxID0gWiA/IE1hdGguYXNpbihVIC8gWikgOiAwLCBpMSA9IEcgPyB0MSA6IC10MSwgbjEgPSBNYXRoLmNvcyh0MSkgKiBaO1xuICAgICAgICAgICAgICBLID8gKEouc3RhcnQgPSBTICsgaTEsIF9bMV0gPSBQICsgbjEgKiBNYXRoLmNvcyhTKSwgX1syXSA9IFkgKyBuMSAqIE1hdGguc2luKFMpLCBJLnNwbGljZShqICsgMSwgMCwgW1wiQVwiLCBVLCBVLCAwLCAwLCAxLCBQICsgRCAqIE1hdGguY29zKEouc3RhcnQpLCBZICsgRCAqIE1hdGguc2luKEouc3RhcnQpXSkpIDogKEouZW5kID0gVyAtIGkxLCByMVs2XSA9IFAgKyBEICogTWF0aC5jb3MoSi5lbmQpLCByMVs3XSA9IFkgKyBEICogTWF0aC5zaW4oSi5lbmQpLCBJLnNwbGljZShqICsgMSwgMCwgW1wiQVwiLCBVLCBVLCAwLCAwLCAxLCBQICsgbjEgKiBNYXRoLmNvcyhXKSwgWSArIG4xICogTWF0aC5zaW4oVyldKSksIHIxWzRdID0gTWF0aC5hYnMoSi5lbmQgLSBKLnN0YXJ0KSA8IE1hdGguUEkgPyAwIDogMTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KSh3LCBSLCBSID4gMSA/IFYgOiBOKTtcbiAgICAgICAgcmV0dXJuIHc7XG4gICAgICB9XG4gICAgICBmdW5jdGlvbiBoKCkge1xuICAgICAgICB2YXIgeSwgQjtcbiAgICAgICAgaWYgKHRoaXMub3B0aW9ucy5ib3JkZXJSYWRpdXMgJiYgISh0aGlzLmNoYXJ0LmlzM2QgJiYgdGhpcy5jaGFydC5pczNkKCkpKSB7XG4gICAgICAgICAgbGV0IHsgb3B0aW9uczogWCwgeUF4aXM6IEYgfSA9IHRoaXMsIFQgPSBYLnN0YWNraW5nID09PSBcInBlcmNlbnRcIiwgdyA9IChCID0gKHkgPSBzLnBsb3RPcHRpb25zKSA9PSBudWxsID8gdm9pZCAwIDogeVt0aGlzLnR5cGVdKSA9PSBudWxsID8gdm9pZCAwIDogQi5ib3JkZXJSYWRpdXMsIEggPSBnKFguYm9yZGVyUmFkaXVzLCBiKHcpID8gdyA6IHt9KSwgQyA9IEYub3B0aW9ucy5yZXZlcnNlZDtcbiAgICAgICAgICBmb3IgKGxldCBxIG9mIHRoaXMucG9pbnRzKSB7XG4gICAgICAgICAgICBsZXQgeyBzaGFwZUFyZ3M6IG0gfSA9IHE7XG4gICAgICAgICAgICBpZiAocS5zaGFwZVR5cGUgPT09IFwicm91bmRlZFJlY3RcIiAmJiBtKSB7XG4gICAgICAgICAgICAgIGxldCB7IHdpZHRoOiBrID0gMCwgaGVpZ2h0OiB4ID0gMCwgeTogTiA9IDAgfSA9IG0sIFYgPSBOLCBSID0geDtcbiAgICAgICAgICAgICAgaWYgKEguc2NvcGUgPT09IFwic3RhY2tcIiAmJiBxLnN0YWNrVG90YWwpIHtcbiAgICAgICAgICAgICAgICBsZXQgXyA9IEYudHJhbnNsYXRlKFQgPyAxMDAgOiBxLnN0YWNrVG90YWwsICExLCAhMCwgITEsICEwKSwgcjEgPSBGLnRyYW5zbGF0ZShYLnRocmVzaG9sZCB8fCAwLCAhMSwgITAsICExLCAhMCksIEsgPSB0aGlzLmNyaXNwQ29sKDAsIE1hdGgubWluKF8sIHIxKSwgMCwgTWF0aC5hYnMoXyAtIHIxKSk7XG4gICAgICAgICAgICAgICAgViA9IEsueSwgUiA9IEsuaGVpZ2h0O1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGxldCBJID0gKHEubmVnYXRpdmUgPyAtMSA6IDEpICogKEMgPyAtMSA6IDEpID09IC0xLCBqID0gSC53aGVyZTtcbiAgICAgICAgICAgICAgIWogJiYgdGhpcy5pcyhcIndhdGVyZmFsbFwiKSAmJiBNYXRoLmFicygocS55Qm90dG9tIHx8IDApIC0gKHRoaXMudHJhbnNsYXRlZFRocmVzaG9sZCB8fCAwKSkgPiB0aGlzLmJvcmRlcldpZHRoICYmIChqID0gXCJhbGxcIiksIGogfHwgKGogPSBcImVuZFwiKTtcbiAgICAgICAgICAgICAgbGV0IFUgPSBNYXRoLm1pbih1KEgucmFkaXVzLCBrKSwgayAvIDIsIGogPT09IFwiYWxsXCIgPyB4IC8gMiA6IDEgLyAwKSB8fCAwO1xuICAgICAgICAgICAgICBqID09PSBcImVuZFwiICYmIChJICYmIChWIC09IFUpLCBSICs9IFUpLCBkKG0sIHsgYnJCb3hIZWlnaHQ6IFIsIGJyQm94WTogViwgcjogVSB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGZ1bmN0aW9uIGcoeSwgQikge1xuICAgICAgICByZXR1cm4gYih5KSB8fCAoeSA9IHsgcmFkaXVzOiB5IHx8IDAgfSksIE0oQSwgQiwgeSk7XG4gICAgICB9XG4gICAgICBmdW5jdGlvbiB2KCkge1xuICAgICAgICBsZXQgeSA9IGcodGhpcy5vcHRpb25zLmJvcmRlclJhZGl1cyk7XG4gICAgICAgIGZvciAobGV0IEIgb2YgdGhpcy5wb2ludHMpIHtcbiAgICAgICAgICBsZXQgWCA9IEIuc2hhcGVBcmdzO1xuICAgICAgICAgIFggJiYgKFguYm9yZGVyUmFkaXVzID0gdSh5LnJhZGl1cywgKFguciB8fCAwKSAtIChYLmlubmVyUiB8fCAwKSkpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBmdW5jdGlvbiBMKHksIEIsIFgsIEYsIFQgPSB7fSkge1xuICAgICAgICBsZXQgdyA9IGYoeSwgQiwgWCwgRiwgVCksIHsgcjogSCA9IDAsIGJyQm94SGVpZ2h0OiBDID0gRiwgYnJCb3hZOiBxID0gQiB9ID0gVCwgbSA9IEIgLSBxLCBrID0gcSArIEMgLSAoQiArIEYpLCB4ID0gbSAtIEggPiAtMC4xID8gMCA6IEgsIE4gPSBrIC0gSCA+IC0wLjEgPyAwIDogSCwgViA9IE1hdGgubWF4KHggJiYgbSwgMCksIFIgPSBNYXRoLm1heChOICYmIGssIDApLCBJID0gW3kgKyB4LCBCXSwgaiA9IFt5ICsgWCAtIHgsIEJdLCBVID0gW3kgKyBYLCBCICsgeF0sIF8gPSBbeSArIFgsIEIgKyBGIC0gTl0sIHIxID0gW3kgKyBYIC0gTiwgQiArIEZdLCBLID0gW3kgKyBOLCBCICsgRl0sIFEgPSBbeSwgQiArIEYgLSBOXSwgRSA9IFt5LCBCICsgeF0sIEQgPSAoRywgSikgPT4gTWF0aC5zcXJ0KE1hdGgucG93KEcsIDIpIC0gTWF0aC5wb3coSiwgMikpO1xuICAgICAgICBpZiAoVikge1xuICAgICAgICAgIGxldCBHID0gRCh4LCB4IC0gVik7XG4gICAgICAgICAgSVswXSAtPSBHLCBqWzBdICs9IEcsIFVbMV0gPSBFWzFdID0gQiArIHggLSBWO1xuICAgICAgICB9XG4gICAgICAgIGlmIChGIDwgeCAtIFYpIHtcbiAgICAgICAgICBsZXQgRyA9IEQoeCwgeCAtIFYgLSBGKTtcbiAgICAgICAgICBVWzBdID0gX1swXSA9IHkgKyBYIC0geCArIEcsIHIxWzBdID0gTWF0aC5taW4oVVswXSwgcjFbMF0pLCBLWzBdID0gTWF0aC5tYXgoX1swXSwgS1swXSksIFFbMF0gPSBFWzBdID0geSArIHggLSBHLCBVWzFdID0gRVsxXSA9IEIgKyBGO1xuICAgICAgICB9XG4gICAgICAgIGlmIChSKSB7XG4gICAgICAgICAgbGV0IEcgPSBEKE4sIE4gLSBSKTtcbiAgICAgICAgICByMVswXSArPSBHLCBLWzBdIC09IEcsIF9bMV0gPSBRWzFdID0gQiArIEYgLSBOICsgUjtcbiAgICAgICAgfVxuICAgICAgICBpZiAoRiA8IE4gLSBSKSB7XG4gICAgICAgICAgbGV0IEcgPSBEKE4sIE4gLSBSIC0gRik7XG4gICAgICAgICAgVVswXSA9IF9bMF0gPSB5ICsgWCAtIE4gKyBHLCBqWzBdID0gTWF0aC5taW4oVVswXSwgalswXSksIElbMF0gPSBNYXRoLm1heChfWzBdLCBJWzBdKSwgUVswXSA9IEVbMF0gPSB5ICsgTiAtIEcsIF9bMV0gPSBRWzFdID0gQjtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdy5sZW5ndGggPSAwLCB3LnB1c2goW1wiTVwiLCAuLi5JXSwgW1wiTFwiLCAuLi5qXSwgW1wiQVwiLCB4LCB4LCAwLCAwLCAxLCAuLi5VXSwgW1wiTFwiLCAuLi5fXSwgW1wiQVwiLCBOLCBOLCAwLCAwLCAxLCAuLi5yMV0sIFtcIkxcIiwgLi4uS10sIFtcIkFcIiwgTiwgTiwgMCwgMCwgMSwgLi4uUV0sIFtcIkxcIiwgLi4uRV0sIFtcIkFcIiwgeCwgeCwgMCwgMCwgMSwgLi4uSV0sIFtcIlpcIl0pLCB3O1xuICAgICAgfVxuICAgICAgcmV0dXJuIHsgY29tcG9zZTogZnVuY3Rpb24oeSwgQiwgWCkge1xuICAgICAgICBsZXQgRiA9IHkudHlwZXMucGllO1xuICAgICAgICBpZiAoIUIuc3ltYm9sQ3VzdG9tQXR0cmlicy5pbmNsdWRlcyhcImJvcmRlclJhZGl1c1wiKSkge1xuICAgICAgICAgIGxldCBUID0gWC5wcm90b3R5cGUuc3ltYm9scztcbiAgICAgICAgICBwKHksIFwiYWZ0ZXJDb2x1bW5UcmFuc2xhdGVcIiwgaCwgeyBvcmRlcjogOSB9KSwgcChGLCBcImFmdGVyVHJhbnNsYXRlXCIsIHYpLCBCLnN5bWJvbEN1c3RvbUF0dHJpYnMucHVzaChcImJvcmRlclJhZGl1c1wiLCBcImJyQm94SGVpZ2h0XCIsIFwiYnJCb3hZXCIpLCB6ID0gVC5hcmMsIGYgPSBULnJvdW5kZWRSZWN0LCBULmFyYyA9IE8sIFQucm91bmRlZFJlY3QgPSBMO1xuICAgICAgICB9XG4gICAgICB9LCBvcHRpb25zVG9PYmplY3Q6IGcgfTtcbiAgICB9KSwgbihvLCBcIkNvcmUvUmVzcG9uc2l2ZS5qc1wiLCBbb1tcIkNvcmUvVXRpbGl0aWVzLmpzXCJdXSwgZnVuY3Rpb24ocikge1xuICAgICAgdmFyIGk7XG4gICAgICBsZXQgeyBkaWZmT2JqZWN0czogYSwgZXh0ZW5kOiBzLCBmaW5kOiBsLCBtZXJnZTogcCwgcGljazogZCwgdW5pcXVlS2V5OiBiIH0gPSByO1xuICAgICAgcmV0dXJuIGZ1bmN0aW9uKE0pIHtcbiAgICAgICAgZnVuY3Rpb24gdSh6LCBmKSB7XG4gICAgICAgICAgbGV0IE8gPSB6LmNvbmRpdGlvbjtcbiAgICAgICAgICAoTy5jYWxsYmFjayB8fCBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmNoYXJ0V2lkdGggPD0gZChPLm1heFdpZHRoLCBOdW1iZXIuTUFYX1ZBTFVFKSAmJiB0aGlzLmNoYXJ0SGVpZ2h0IDw9IGQoTy5tYXhIZWlnaHQsIE51bWJlci5NQVhfVkFMVUUpICYmIHRoaXMuY2hhcnRXaWR0aCA+PSBkKE8ubWluV2lkdGgsIDApICYmIHRoaXMuY2hhcnRIZWlnaHQgPj0gZChPLm1pbkhlaWdodCwgMCk7XG4gICAgICAgICAgfSkuY2FsbCh0aGlzKSAmJiBmLnB1c2goei5faWQpO1xuICAgICAgICB9XG4gICAgICAgIGZ1bmN0aW9uIEEoeiwgZikge1xuICAgICAgICAgIGxldCBPID0gdGhpcy5vcHRpb25zLnJlc3BvbnNpdmUsIGggPSB0aGlzLmN1cnJlbnRSZXNwb25zaXZlLCBnID0gW10sIHY7XG4gICAgICAgICAgIWYgJiYgTyAmJiBPLnJ1bGVzICYmIE8ucnVsZXMuZm9yRWFjaCgoQikgPT4ge1xuICAgICAgICAgICAgQi5faWQgPT09IHZvaWQgMCAmJiAoQi5faWQgPSBiKCkpLCB0aGlzLm1hdGNoUmVzcG9uc2l2ZVJ1bGUoQiwgZyk7XG4gICAgICAgICAgfSwgdGhpcyk7XG4gICAgICAgICAgbGV0IEwgPSBwKC4uLmcubWFwKChCKSA9PiBsKChPIHx8IHt9KS5ydWxlcyB8fCBbXSwgKFgpID0+IFguX2lkID09PSBCKSkubWFwKChCKSA9PiBCICYmIEIuY2hhcnRPcHRpb25zKSk7XG4gICAgICAgICAgTC5pc1Jlc3BvbnNpdmVPcHRpb25zID0gITAsIGcgPSBnLnRvU3RyaW5nKCkgfHwgdm9pZCAwO1xuICAgICAgICAgIGxldCB5ID0gaCAmJiBoLnJ1bGVJZHM7XG4gICAgICAgICAgZyA9PT0geSB8fCAoaCAmJiAodGhpcy5jdXJyZW50UmVzcG9uc2l2ZSA9IHZvaWQgMCwgdGhpcy51cGRhdGluZ1Jlc3BvbnNpdmUgPSAhMCwgdGhpcy51cGRhdGUoaC51bmRvT3B0aW9ucywgeiwgITApLCB0aGlzLnVwZGF0aW5nUmVzcG9uc2l2ZSA9ICExKSwgZyA/ICgodiA9IGEoTCwgdGhpcy5vcHRpb25zLCAhMCwgdGhpcy5jb2xsZWN0aW9uc1dpdGhVcGRhdGUpKS5pc1Jlc3BvbnNpdmVPcHRpb25zID0gITAsIHRoaXMuY3VycmVudFJlc3BvbnNpdmUgPSB7IHJ1bGVJZHM6IGcsIG1lcmdlZE9wdGlvbnM6IEwsIHVuZG9PcHRpb25zOiB2IH0sIHRoaXMudXBkYXRpbmdSZXNwb25zaXZlIHx8IHRoaXMudXBkYXRlKEwsIHosICEwKSkgOiB0aGlzLmN1cnJlbnRSZXNwb25zaXZlID0gdm9pZCAwKTtcbiAgICAgICAgfVxuICAgICAgICBNLmNvbXBvc2UgPSBmdW5jdGlvbih6KSB7XG4gICAgICAgICAgbGV0IGYgPSB6LnByb3RvdHlwZTtcbiAgICAgICAgICByZXR1cm4gZi5tYXRjaFJlc3BvbnNpdmVSdWxlIHx8IHMoZiwgeyBtYXRjaFJlc3BvbnNpdmVSdWxlOiB1LCBzZXRSZXNwb25zaXZlOiBBIH0pLCB6O1xuICAgICAgICB9O1xuICAgICAgfShpIHx8IChpID0ge30pKSwgaTtcbiAgICB9KSwgbihvLCBcIm1hc3RlcnMvaGlnaGNoYXJ0cy5zcmMuanNcIiwgW29bXCJDb3JlL0dsb2JhbHMuanNcIl0sIG9bXCJDb3JlL1V0aWxpdGllcy5qc1wiXSwgb1tcIkNvcmUvRGVmYXVsdHMuanNcIl0sIG9bXCJDb3JlL0FuaW1hdGlvbi9GeC5qc1wiXSwgb1tcIkNvcmUvQW5pbWF0aW9uL0FuaW1hdGlvblV0aWxpdGllcy5qc1wiXSwgb1tcIkNvcmUvUmVuZGVyZXIvSFRNTC9BU1QuanNcIl0sIG9bXCJDb3JlL1RlbXBsYXRpbmcuanNcIl0sIG9bXCJDb3JlL1JlbmRlcmVyL1JlbmRlcmVyUmVnaXN0cnkuanNcIl0sIG9bXCJDb3JlL1JlbmRlcmVyL1JlbmRlcmVyVXRpbGl0aWVzLmpzXCJdLCBvW1wiQ29yZS9SZW5kZXJlci9TVkcvU1ZHRWxlbWVudC5qc1wiXSwgb1tcIkNvcmUvUmVuZGVyZXIvU1ZHL1NWR1JlbmRlcmVyLmpzXCJdLCBvW1wiQ29yZS9SZW5kZXJlci9IVE1ML0hUTUxFbGVtZW50LmpzXCJdLCBvW1wiQ29yZS9BeGlzL0F4aXMuanNcIl0sIG9bXCJDb3JlL0F4aXMvRGF0ZVRpbWVBeGlzLmpzXCJdLCBvW1wiQ29yZS9BeGlzL0xvZ2FyaXRobWljQXhpcy5qc1wiXSwgb1tcIkNvcmUvQXhpcy9QbG90TGluZU9yQmFuZC9QbG90TGluZU9yQmFuZC5qc1wiXSwgb1tcIkNvcmUvQXhpcy9UaWNrLmpzXCJdLCBvW1wiQ29yZS9Ub29sdGlwLmpzXCJdLCBvW1wiQ29yZS9TZXJpZXMvUG9pbnQuanNcIl0sIG9bXCJDb3JlL1BvaW50ZXIuanNcIl0sIG9bXCJDb3JlL0xlZ2VuZC9MZWdlbmQuanNcIl0sIG9bXCJDb3JlL0xlZ2VuZC9MZWdlbmRTeW1ib2wuanNcIl0sIG9bXCJDb3JlL0NoYXJ0L0NoYXJ0LmpzXCJdLCBvW1wiRXh0ZW5zaW9ucy9TY3JvbGxhYmxlUGxvdEFyZWEuanNcIl0sIG9bXCJDb3JlL0F4aXMvU3RhY2tpbmcvU3RhY2tpbmdBeGlzLmpzXCJdLCBvW1wiQ29yZS9BeGlzL1N0YWNraW5nL1N0YWNrSXRlbS5qc1wiXSwgb1tcIkNvcmUvU2VyaWVzL1Nlcmllcy5qc1wiXSwgb1tcIkNvcmUvU2VyaWVzL1Nlcmllc1JlZ2lzdHJ5LmpzXCJdLCBvW1wiU2VyaWVzL0NvbHVtbi9Db2x1bW5EYXRhTGFiZWwuanNcIl0sIG9bXCJTZXJpZXMvUGllL1BpZURhdGFMYWJlbC5qc1wiXSwgb1tcIkNvcmUvU2VyaWVzL0RhdGFMYWJlbC5qc1wiXSwgb1tcIkV4dGVuc2lvbnMvT3ZlcmxhcHBpbmdEYXRhTGFiZWxzLmpzXCJdLCBvW1wiRXh0ZW5zaW9ucy9Cb3JkZXJSYWRpdXMuanNcIl0sIG9bXCJDb3JlL1Jlc3BvbnNpdmUuanNcIl0sIG9bXCJDb3JlL0NvbG9yL0NvbG9yLmpzXCJdLCBvW1wiQ29yZS9UaW1lLmpzXCJdXSwgZnVuY3Rpb24ociwgaSwgYSwgcywgbCwgcCwgZCwgYiwgTSwgdSwgQSwgeiwgZiwgTywgaCwgZywgdiwgTCwgeSwgQiwgWCwgRiwgVCwgdywgSCwgQywgcSwgbSwgaywgeCwgTiwgViwgUiwgSSwgaiwgVSkge1xuICAgICAgcmV0dXJuIHIuQVNUID0gcCwgci5BeGlzID0gZiwgci5DaGFydCA9IFQsIHIuQ29sb3IgPSBqLCByLkRhdGFMYWJlbCA9IE4sIHIuRnggPSBzLCByLkhUTUxFbGVtZW50ID0geiwgci5MZWdlbmQgPSBYLCByLkxlZ2VuZFN5bWJvbCA9IEYsIHIuT3ZlcmxhcHBpbmdEYXRhTGFiZWxzID0gci5PdmVybGFwcGluZ0RhdGFMYWJlbHMgfHwgViwgci5QbG90TGluZU9yQmFuZCA9IGcsIHIuUG9pbnQgPSB5LCByLlBvaW50ZXIgPSBCLCByLlJlbmRlcmVyUmVnaXN0cnkgPSBiLCByLlNlcmllcyA9IHEsIHIuU2VyaWVzUmVnaXN0cnkgPSBtLCByLlN0YWNrSXRlbSA9IEMsIHIuU1ZHRWxlbWVudCA9IHUsIHIuU1ZHUmVuZGVyZXIgPSBBLCByLlRlbXBsYXRpbmcgPSBkLCByLlRpY2sgPSB2LCByLlRpbWUgPSBVLCByLlRvb2x0aXAgPSBMLCByLmFuaW1hdGUgPSBsLmFuaW1hdGUsIHIuYW5pbU9iamVjdCA9IGwuYW5pbU9iamVjdCwgci5jaGFydCA9IFQuY2hhcnQsIHIuY29sb3IgPSBqLnBhcnNlLCByLmRhdGVGb3JtYXQgPSBkLmRhdGVGb3JtYXQsIHIuZGVmYXVsdE9wdGlvbnMgPSBhLmRlZmF1bHRPcHRpb25zLCByLmRpc3RyaWJ1dGUgPSBNLmRpc3RyaWJ1dGUsIHIuZm9ybWF0ID0gZC5mb3JtYXQsIHIuZ2V0RGVmZXJyZWRBbmltYXRpb24gPSBsLmdldERlZmVycmVkQW5pbWF0aW9uLCByLmdldE9wdGlvbnMgPSBhLmdldE9wdGlvbnMsIHIubnVtYmVyRm9ybWF0ID0gZC5udW1iZXJGb3JtYXQsIHIuc2VyaWVzVHlwZSA9IG0uc2VyaWVzVHlwZSwgci5zZXRBbmltYXRpb24gPSBsLnNldEFuaW1hdGlvbiwgci5zZXRPcHRpb25zID0gYS5zZXRPcHRpb25zLCByLnN0b3AgPSBsLnN0b3AsIHIudGltZSA9IGEuZGVmYXVsdFRpbWUsIHIudGltZXJzID0gcy50aW1lcnMsIFIuY29tcG9zZShyLlNlcmllcywgci5TVkdFbGVtZW50LCByLlNWR1JlbmRlcmVyKSwgay5jb21wb3NlKHIuU2VyaWVzLnR5cGVzLmNvbHVtbiksIE4uY29tcG9zZShyLlNlcmllcyksIE8uY29tcG9zZShyLkF4aXMpLCB6LmNvbXBvc2Uoci5TVkdSZW5kZXJlciksIFguY29tcG9zZShyLkNoYXJ0KSwgaC5jb21wb3NlKHIuQXhpcyksIFYuY29tcG9zZShyLkNoYXJ0KSwgeC5jb21wb3NlKHIuU2VyaWVzLnR5cGVzLnBpZSksIGcuY29tcG9zZShyLkNoYXJ0LCByLkF4aXMpLCBCLmNvbXBvc2Uoci5DaGFydCksIEkuY29tcG9zZShyLkNoYXJ0KSwgdy5jb21wb3NlKHIuQXhpcywgci5DaGFydCwgci5TZXJpZXMpLCBILmNvbXBvc2Uoci5BeGlzLCByLkNoYXJ0LCByLlNlcmllcyksIEwuY29tcG9zZShyLlBvaW50ZXIpLCBpLmV4dGVuZChyLCBpKSwgcjtcbiAgICB9KSwgb1tcIm1hc3RlcnMvaGlnaGNoYXJ0cy5zcmMuanNcIl0uX21vZHVsZXMgPSBvLCBvW1wibWFzdGVycy9oaWdoY2hhcnRzLnNyYy5qc1wiXTtcbiAgfSk7XG59KShuYik7XG52YXIgREQgPSBuYi5leHBvcnRzO1xuY29uc3QgbDMgPSAvKiBAX19QVVJFX18gKi8gUTIoREQpLCBIRCA9IFtcIiMzMTI3ODNcIiwgXCIjMDA5RkUzXCIsIFwiIzgzMUY4MlwiLCBcIiNFQzYxOUZcIiwgXCIjRkYwMDAwXCIsIFwiI0YzOTIwMFwiXTtcbnZhciBpYiA9IHsgZXhwb3J0czoge30gfTtcbihmdW5jdGlvbihlKSB7XG4gIC8qKlxuICAqIEhpZ2hjaGFydHMgSlMgdjExLjQuOCAoMjAyNC0wOC0yOSlcbiAgKlxuICAqIFZhcmlhYmxlIFBpZSBtb2R1bGUgZm9yIEhpZ2hjaGFydHNcbiAgKlxuICAqIChjKSAyMDEwLTIwMjQgR3J6ZWdvcnogQmxhY2hsacWEc2tpXG4gICpcbiAgKiBMaWNlbnNlOiB3d3cuaGlnaGNoYXJ0cy5jb20vbGljZW5zZVxuICAqL1xuICAoZnVuY3Rpb24odCkge1xuICAgIGUuZXhwb3J0cyA/ICh0LmRlZmF1bHQgPSB0LCBlLmV4cG9ydHMgPSB0KSA6IHQodHlwZW9mIEhpZ2hjaGFydHMgPCBcInVcIiA/IEhpZ2hjaGFydHMgOiB2b2lkIDApO1xuICB9KShmdW5jdGlvbih0KSB7XG4gICAgdmFyIG8gPSB0ID8gdC5fbW9kdWxlcyA6IHt9O1xuICAgIGZ1bmN0aW9uIG4ociwgaSwgYSwgcykge1xuICAgICAgci5oYXNPd25Qcm9wZXJ0eShpKSB8fCAocltpXSA9IHMuYXBwbHkobnVsbCwgYSksIHR5cGVvZiBDdXN0b21FdmVudCA9PSBcImZ1bmN0aW9uXCIgJiYgdC53aW4uZGlzcGF0Y2hFdmVudChuZXcgQ3VzdG9tRXZlbnQoXCJIaWdoY2hhcnRzTW9kdWxlTG9hZGVkXCIsIHsgZGV0YWlsOiB7IHBhdGg6IGksIG1vZHVsZTogcltpXSB9IH0pKSk7XG4gICAgfVxuICAgIG4obywgXCJTZXJpZXMvVmFyaWFibGVQaWUvVmFyaWFibGVQaWVTZXJpZXNEZWZhdWx0cy5qc1wiLCBbXSwgZnVuY3Rpb24oKSB7XG4gICAgICByZXR1cm4geyBtaW5Qb2ludFNpemU6IFwiMTAlXCIsIG1heFBvaW50U2l6ZTogXCIxMDAlXCIsIHpNaW46IHZvaWQgMCwgek1heDogdm9pZCAwLCBzaXplQnk6IFwiYXJlYVwiLCB0b29sdGlwOiB7IHBvaW50Rm9ybWF0OiAnPHNwYW4gc3R5bGU9XCJjb2xvcjp7cG9pbnQuY29sb3J9XCI+4pePPC9zcGFuPiB7c2VyaWVzLm5hbWV9PGJyLz5WYWx1ZToge3BvaW50Lnl9PGJyLz5TaXplOiB7cG9pbnQuen08YnIvPicgfSB9O1xuICAgIH0pLCBuKG8sIFwiU2VyaWVzL1ZhcmlhYmxlUGllL1ZhcmlhYmxlUGllU2VyaWVzLmpzXCIsIFtvW1wiQ29yZS9TZXJpZXMvU2VyaWVzUmVnaXN0cnkuanNcIl0sIG9bXCJDb3JlL1V0aWxpdGllcy5qc1wiXSwgb1tcIlNlcmllcy9WYXJpYWJsZVBpZS9WYXJpYWJsZVBpZVNlcmllc0RlZmF1bHRzLmpzXCJdXSwgZnVuY3Rpb24ociwgaSwgYSkge1xuICAgICAgbGV0IHsgcGllOiBzIH0gPSByLnNlcmllc1R5cGVzLCB7IGFycmF5TWF4OiBsLCBhcnJheU1pbjogcCwgY2xhbXA6IGQsIGV4dGVuZDogYiwgZmlyZUV2ZW50OiBNLCBtZXJnZTogdSwgcGljazogQSB9ID0gaTtcbiAgICAgIGNsYXNzIHogZXh0ZW5kcyBzIHtcbiAgICAgICAgY2FsY3VsYXRlRXh0cmVtZXMoKSB7XG4gICAgICAgICAgbGV0IE8sIGgsIGcgPSB0aGlzLmNoYXJ0LCB2ID0gZy5wbG90V2lkdGgsIEwgPSBnLnBsb3RIZWlnaHQsIHkgPSB0aGlzLm9wdGlvbnMsIEIgPSAyICogKHkuc2xpY2VkT2Zmc2V0IHx8IDApLCBYID0gdGhpcy56RGF0YSwgRiA9IE1hdGgubWluKHYsIEwpIC0gQiwgVCA9IHt9LCB3ID0gdGhpcy5jZW50ZXIgfHwgdGhpcy5nZXRDZW50ZXIoKTtcbiAgICAgICAgICBmb3IgKGxldCBIIG9mIFtcIm1pblBvaW50U2l6ZVwiLCBcIm1heFBvaW50U2l6ZVwiXSkge1xuICAgICAgICAgICAgbGV0IEMgPSB5W0hdLCBxID0gLyUkLy50ZXN0KEMpO1xuICAgICAgICAgICAgQyA9IHBhcnNlSW50KEMsIDEwKSwgVFtIXSA9IHEgPyBGICogQyAvIDEwMCA6IDIgKiBDO1xuICAgICAgICAgIH1cbiAgICAgICAgICB0aGlzLm1pblB4U2l6ZSA9IHdbM10gKyBULm1pblBvaW50U2l6ZSwgdGhpcy5tYXhQeFNpemUgPSBkKHdbMl0sIHdbM10gKyBULm1pblBvaW50U2l6ZSwgVC5tYXhQb2ludFNpemUpLCBYLmxlbmd0aCAmJiAoTyA9IEEoeS56TWluLCBwKFguZmlsdGVyKHRoaXMuelZhbEV2YWwpKSksIGggPSBBKHkuek1heCwgbChYLmZpbHRlcih0aGlzLnpWYWxFdmFsKSkpLCB0aGlzLmdldFJhZGlpKE8sIGgsIHRoaXMubWluUHhTaXplLCB0aGlzLm1heFB4U2l6ZSkpO1xuICAgICAgICB9XG4gICAgICAgIGdldFJhZGlpKE8sIGgsIGcsIHYpIHtcbiAgICAgICAgICBsZXQgTCwgeSwgQiwgWCA9IHRoaXMuekRhdGEsIEYgPSBbXSwgVCA9IHRoaXMub3B0aW9ucy5zaXplQnkgIT09IFwicmFkaXVzXCIsIHcgPSBoIC0gTztcbiAgICAgICAgICBmb3IgKGxldCBIID0gMDsgSCA8IFgubGVuZ3RoOyBIKyspXG4gICAgICAgICAgICAoeSA9IHRoaXMuelZhbEV2YWwoWFtIXSkgPyBYW0hdIDogTykgPD0gTyA/IEIgPSBnIC8gMiA6IHkgPj0gaCA/IEIgPSB2IC8gMiA6IChMID0gdyA+IDAgPyAoeSAtIE8pIC8gdyA6IDAuNSwgVCAmJiAoTCA9IE1hdGguc3FydChMKSksIEIgPSBNYXRoLmNlaWwoZyArIEwgKiAodiAtIGcpKSAvIDIpLCBGLnB1c2goQik7XG4gICAgICAgICAgdGhpcy5yYWRpaSA9IEY7XG4gICAgICAgIH1cbiAgICAgICAgcmVkcmF3KCkge1xuICAgICAgICAgIHRoaXMuY2VudGVyID0gbnVsbCwgc3VwZXIucmVkcmF3KCk7XG4gICAgICAgIH1cbiAgICAgICAgZ2V0RGF0YUxhYmVsUG9zaXRpb24oTywgaCkge1xuICAgICAgICAgIGxldCB7IGNlbnRlcjogZywgb3B0aW9uczogdiB9ID0gdGhpcywgTCA9IE8uYW5nbGUgfHwgMCwgeSA9IHRoaXMucmFkaWlbTy5pbmRleF0sIEIgPSBnWzBdICsgTWF0aC5jb3MoTCkgKiB5LCBYID0gZ1sxXSArIE1hdGguc2luKEwpICogeSwgRiA9IE1hdGgubWluKCh2LnNsaWNlZE9mZnNldCB8fCAwKSArICh2LmJvcmRlcldpZHRoIHx8IDApLCBoIC8gNSk7XG4gICAgICAgICAgcmV0dXJuIHsgZGlzdGFuY2U6IGgsIG5hdHVyYWw6IHsgeDogQiArIE1hdGguY29zKEwpICogaCwgeTogWCArIE1hdGguc2luKEwpICogaCB9LCBjb21wdXRlZDoge30sIGFsaWdubWVudDogTy5oYWxmID8gXCJyaWdodFwiIDogXCJsZWZ0XCIsIGNvbm5lY3RvclBvc2l0aW9uOiB7IGJyZWFrQXQ6IHsgeDogQiArIE1hdGguY29zKEwpICogRiwgeTogWCArIE1hdGguc2luKEwpICogRiB9LCB0b3VjaGluZ1NsaWNlQXQ6IHsgeDogQiwgeTogWCB9IH0gfTtcbiAgICAgICAgfVxuICAgICAgICB0cmFuc2xhdGUoTykge1xuICAgICAgICAgIHRoaXMuZ2VuZXJhdGVQb2ludHMoKTtcbiAgICAgICAgICBsZXQgaCA9IHRoaXMub3B0aW9ucywgZyA9IGguc2xpY2VkT2Zmc2V0LCB2ID0gaC5zdGFydEFuZ2xlIHx8IDAsIEwgPSBNYXRoLlBJIC8gMTgwICogKHYgLSA5MCksIHkgPSBNYXRoLlBJIC8gMTgwICogKEEoaC5lbmRBbmdsZSwgdiArIDM2MCkgLSA5MCksIEIgPSB5IC0gTCwgWCA9IHRoaXMucG9pbnRzLCBGID0gaC5pZ25vcmVIaWRkZW5Qb2ludCwgVCA9IDAsIHcsIEgsIEMsIHEsIG0sIGssIHg7XG4gICAgICAgICAgdGhpcy5zdGFydEFuZ2xlUmFkID0gTCwgdGhpcy5lbmRBbmdsZVJhZCA9IHksIHRoaXMuY2FsY3VsYXRlRXh0cmVtZXMoKSwgTyB8fCAodGhpcy5jZW50ZXIgPSBPID0gdGhpcy5nZXRDZW50ZXIoKSk7XG4gICAgICAgICAgZm9yIChsZXQgTiA9IDA7IE4gPCBYLmxlbmd0aDsgTisrKVxuICAgICAgICAgICAgayA9IFhbTl0sIHggPSB0aGlzLnJhZGlpW05dLCB3ID0gTCArIFQgKiBCLCAoIUYgfHwgay52aXNpYmxlKSAmJiAoVCArPSBrLnBlcmNlbnRhZ2UgLyAxMDApLCBIID0gTCArIFQgKiBCLCBrLnNoYXBlVHlwZSA9IFwiYXJjXCIsIGsuc2hhcGVBcmdzID0geyB4OiBPWzBdLCB5OiBPWzFdLCByOiB4LCBpbm5lclI6IE9bM10gLyAyLCBzdGFydDogTWF0aC5yb3VuZCgxZTMgKiB3KSAvIDFlMywgZW5kOiBNYXRoLnJvdW5kKDFlMyAqIEgpIC8gMWUzIH0sIChDID0gKEggKyB3KSAvIDIpID4gMS41ICogTWF0aC5QSSA/IEMgLT0gMiAqIE1hdGguUEkgOiBDIDwgLU1hdGguUEkgLyAyICYmIChDICs9IDIgKiBNYXRoLlBJKSwgay5zbGljZWRUcmFuc2xhdGlvbiA9IHsgdHJhbnNsYXRlWDogTWF0aC5yb3VuZChNYXRoLmNvcyhDKSAqIGcpLCB0cmFuc2xhdGVZOiBNYXRoLnJvdW5kKE1hdGguc2luKEMpICogZykgfSwgcSA9IE1hdGguY29zKEMpICogT1syXSAvIDIsIG0gPSBNYXRoLnNpbihDKSAqIE9bMl0gLyAyLCBrLnRvb2x0aXBQb3MgPSBbT1swXSArIDAuNyAqIHEsIE9bMV0gKyAwLjcgKiBtXSwgay5oYWxmID0gQyA8IC1NYXRoLlBJIC8gMiB8fCBDID4gTWF0aC5QSSAvIDIgPyAxIDogMCwgay5hbmdsZSA9IEM7XG4gICAgICAgICAgTSh0aGlzLCBcImFmdGVyVHJhbnNsYXRlXCIpO1xuICAgICAgICB9XG4gICAgICAgIHpWYWxFdmFsKE8pIHtcbiAgICAgICAgICByZXR1cm4gISh0eXBlb2YgTyAhPSBcIm51bWJlclwiIHx8IGlzTmFOKE8pKSB8fCBudWxsO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gei5kZWZhdWx0T3B0aW9ucyA9IHUocy5kZWZhdWx0T3B0aW9ucywgYSksIGIoei5wcm90b3R5cGUsIHsgcG9pbnRBcnJheU1hcDogW1wieVwiLCBcInpcIl0sIHBhcmFsbGVsQXJyYXlzOiBbXCJ4XCIsIFwieVwiLCBcInpcIl0gfSksIHIucmVnaXN0ZXJTZXJpZXNUeXBlKFwidmFyaWFibGVwaWVcIiwgeiksIHo7XG4gICAgfSksIG4obywgXCJtYXN0ZXJzL21vZHVsZXMvdmFyaWFibGUtcGllLnNyYy5qc1wiLCBbb1tcIkNvcmUvR2xvYmFscy5qc1wiXV0sIGZ1bmN0aW9uKHIpIHtcbiAgICAgIHJldHVybiByO1xuICAgIH0pO1xuICB9KTtcbn0pKGliKTtcbnZhciBWRCA9IGliLmV4cG9ydHM7XG5jb25zdCBQRCA9IC8qIEBfX1BVUkVfXyAqLyBRMihWRCk7XG52YXIgYWIgPSB7IGV4cG9ydHM6IHt9IH07XG4oZnVuY3Rpb24oZSkge1xuICAvKipcbiAgKiBIaWdoY2hhcnRzIEpTIHYxMS40LjggKDIwMjQtMDgtMjkpXG4gICpcbiAgKiAoYykgMjAwOS0yMDI0IFRvcnN0ZWluIEhvbnNpXG4gICpcbiAgKiBMaWNlbnNlOiB3d3cuaGlnaGNoYXJ0cy5jb20vbGljZW5zZVxuICAqL1xuICAoZnVuY3Rpb24odCkge1xuICAgIGUuZXhwb3J0cyA/ICh0LmRlZmF1bHQgPSB0LCBlLmV4cG9ydHMgPSB0KSA6IHQodHlwZW9mIEhpZ2hjaGFydHMgPCBcInVcIiA/IEhpZ2hjaGFydHMgOiB2b2lkIDApO1xuICB9KShmdW5jdGlvbih0KSB7XG4gICAgdmFyIG8gPSB0ID8gdC5fbW9kdWxlcyA6IHt9O1xuICAgIGZ1bmN0aW9uIG4ociwgaSwgYSwgcykge1xuICAgICAgci5oYXNPd25Qcm9wZXJ0eShpKSB8fCAocltpXSA9IHMuYXBwbHkobnVsbCwgYSksIHR5cGVvZiBDdXN0b21FdmVudCA9PSBcImZ1bmN0aW9uXCIgJiYgdC53aW4uZGlzcGF0Y2hFdmVudChuZXcgQ3VzdG9tRXZlbnQoXCJIaWdoY2hhcnRzTW9kdWxlTG9hZGVkXCIsIHsgZGV0YWlsOiB7IHBhdGg6IGksIG1vZHVsZTogcltpXSB9IH0pKSk7XG4gICAgfVxuICAgIG4obywgXCJFeHRlbnNpb25zL1BhbmUvUGFuZUNvbXBvc2l0aW9uLmpzXCIsIFtvW1wiQ29yZS9VdGlsaXRpZXMuanNcIl1dLCBmdW5jdGlvbihyKSB7XG4gICAgICBsZXQgeyBhZGRFdmVudDogaSwgY29ycmVjdEZsb2F0OiBhLCBkZWZpbmVkOiBzLCBwaWNrOiBsIH0gPSByO1xuICAgICAgZnVuY3Rpb24gcChBKSB7XG4gICAgICAgIGxldCB6LCBmID0gdGhpcztcbiAgICAgICAgcmV0dXJuIEEgJiYgZi5wYW5lLmZvckVhY2goKE8pID0+IHtcbiAgICAgICAgICBkKEEuY2hhcnRYIC0gZi5wbG90TGVmdCwgQS5jaGFydFkgLSBmLnBsb3RUb3AsIE8uY2VudGVyKSAmJiAoeiA9IE8pO1xuICAgICAgICB9KSwgejtcbiAgICAgIH1cbiAgICAgIGZ1bmN0aW9uIGQoQSwgeiwgZiwgTywgaCkge1xuICAgICAgICBsZXQgZyA9ICEwLCB2ID0gZlswXSwgTCA9IGZbMV0sIHkgPSBNYXRoLnNxcnQoTWF0aC5wb3coQSAtIHYsIDIpICsgTWF0aC5wb3coeiAtIEwsIDIpKTtcbiAgICAgICAgaWYgKHMoTykgJiYgcyhoKSkge1xuICAgICAgICAgIGxldCBCID0gTWF0aC5hdGFuMihhKHogLSBMLCA4KSwgYShBIC0gdiwgOCkpO1xuICAgICAgICAgIGggIT09IE8gJiYgKGcgPSBPID4gaCA/IEIgPj0gTyAmJiBCIDw9IE1hdGguUEkgfHwgQiA8PSBoICYmIEIgPj0gLU1hdGguUEkgOiBCID49IE8gJiYgQiA8PSBhKGgsIDgpKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4geSA8PSBNYXRoLmNlaWwoZlsyXSAvIDIpICYmIGc7XG4gICAgICB9XG4gICAgICBmdW5jdGlvbiBiKEEpIHtcbiAgICAgICAgdGhpcy5wb2xhciAmJiAoQS5vcHRpb25zLmludmVydGVkICYmIChbQS54LCBBLnldID0gW0EueSwgQS54XSksIEEuaXNJbnNpZGVQbG90ID0gdGhpcy5wYW5lLnNvbWUoKHopID0+IGQoQS54LCBBLnksIHouY2VudGVyLCB6LmF4aXMgJiYgei5heGlzLm5vcm1hbGl6ZWRTdGFydEFuZ2xlUmFkLCB6LmF4aXMgJiYgei5heGlzLm5vcm1hbGl6ZWRFbmRBbmdsZVJhZCkpKTtcbiAgICAgIH1cbiAgICAgIGZ1bmN0aW9uIE0oQSkge1xuICAgICAgICBsZXQgeiA9IHRoaXMuY2hhcnQ7XG4gICAgICAgIEEuaG92ZXJQb2ludCAmJiBBLmhvdmVyUG9pbnQucGxvdFggJiYgQS5ob3ZlclBvaW50LnBsb3RZICYmIHouaG92ZXJQYW5lICYmICFkKEEuaG92ZXJQb2ludC5wbG90WCwgQS5ob3ZlclBvaW50LnBsb3RZLCB6LmhvdmVyUGFuZS5jZW50ZXIpICYmIChBLmhvdmVyUG9pbnQgPSB2b2lkIDApO1xuICAgICAgfVxuICAgICAgZnVuY3Rpb24gdShBKSB7XG4gICAgICAgIGxldCB6ID0gdGhpcy5jaGFydDtcbiAgICAgICAgei5wb2xhciA/ICh6LmhvdmVyUGFuZSA9IHouZ2V0SG92ZXJQYW5lKEEpLCBBLmZpbHRlciA9IGZ1bmN0aW9uKGYpIHtcbiAgICAgICAgICByZXR1cm4gZi52aXNpYmxlICYmICEoIUEuc2hhcmVkICYmIGYuZGlyZWN0VG91Y2gpICYmIGwoZi5vcHRpb25zLmVuYWJsZU1vdXNlVHJhY2tpbmcsICEwKSAmJiAoIXouaG92ZXJQYW5lIHx8IGYueEF4aXMucGFuZSA9PT0gei5ob3ZlclBhbmUpO1xuICAgICAgICB9KSA6IHouaG92ZXJQYW5lID0gdm9pZCAwO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHsgY29tcG9zZTogZnVuY3Rpb24oQSwgeikge1xuICAgICAgICBsZXQgZiA9IEEucHJvdG90eXBlO1xuICAgICAgICBmLmdldEhvdmVyUGFuZSB8fCAoZi5jb2xsZWN0aW9uc1dpdGhVcGRhdGUucHVzaChcInBhbmVcIiksIGYuZ2V0SG92ZXJQYW5lID0gcCwgaShBLCBcImFmdGVySXNJbnNpZGVQbG90XCIsIGIpLCBpKHosIFwiYWZ0ZXJHZXRIb3ZlckRhdGFcIiwgTSksIGkoeiwgXCJiZWZvcmVHZXRIb3ZlckRhdGFcIiwgdSkpO1xuICAgICAgfSB9O1xuICAgIH0pLCBuKG8sIFwiRXh0ZW5zaW9ucy9QYW5lL1BhbmVEZWZhdWx0cy5qc1wiLCBbXSwgZnVuY3Rpb24oKSB7XG4gICAgICByZXR1cm4geyBwYW5lOiB7IGNlbnRlcjogW1wiNTAlXCIsIFwiNTAlXCJdLCBzaXplOiBcIjg1JVwiLCBpbm5lclNpemU6IFwiMCVcIiwgc3RhcnRBbmdsZTogMCB9LCBiYWNrZ3JvdW5kOiB7IHNoYXBlOiBcImNpcmNsZVwiLCBib3JkZXJSYWRpdXM6IDAsIGJvcmRlcldpZHRoOiAxLCBib3JkZXJDb2xvcjogXCIjY2NjY2NjXCIsIGJhY2tncm91bmRDb2xvcjogeyBsaW5lYXJHcmFkaWVudDogeyB4MTogMCwgeTE6IDAsIHgyOiAwLCB5MjogMSB9LCBzdG9wczogW1swLCBcIiNmZmZmZmZcIl0sIFsxLCBcIiNlNmU2ZTZcIl1dIH0sIGZyb206IC1OdW1iZXIuTUFYX1ZBTFVFLCBpbm5lclJhZGl1czogMCwgdG86IE51bWJlci5NQVhfVkFMVUUsIG91dGVyUmFkaXVzOiBcIjEwNSVcIiB9IH07XG4gICAgfSksIG4obywgXCJFeHRlbnNpb25zL1BhbmUvUGFuZS5qc1wiLCBbb1tcIlNlcmllcy9DZW50ZXJlZFV0aWxpdGllcy5qc1wiXSwgb1tcIkV4dGVuc2lvbnMvUGFuZS9QYW5lQ29tcG9zaXRpb24uanNcIl0sIG9bXCJFeHRlbnNpb25zL1BhbmUvUGFuZURlZmF1bHRzLmpzXCJdLCBvW1wiQ29yZS9VdGlsaXRpZXMuanNcIl1dLCBmdW5jdGlvbihyLCBpLCBhLCBzKSB7XG4gICAgICBsZXQgeyBleHRlbmQ6IGwsIG1lcmdlOiBwLCBzcGxhdDogZCB9ID0gcztcbiAgICAgIGNsYXNzIGIge1xuICAgICAgICBjb25zdHJ1Y3Rvcih1LCBBKSB7XG4gICAgICAgICAgdGhpcy5jb2xsID0gXCJwYW5lXCIsIHRoaXMuaW5pdCh1LCBBKTtcbiAgICAgICAgfVxuICAgICAgICBpbml0KHUsIEEpIHtcbiAgICAgICAgICB0aGlzLmNoYXJ0ID0gQSwgdGhpcy5iYWNrZ3JvdW5kID0gW10sIEEucGFuZS5wdXNoKHRoaXMpLCB0aGlzLnNldE9wdGlvbnModSk7XG4gICAgICAgIH1cbiAgICAgICAgc2V0T3B0aW9ucyh1KSB7XG4gICAgICAgICAgdGhpcy5vcHRpb25zID0gdSA9IHAoYS5wYW5lLCB0aGlzLmNoYXJ0LmFuZ3VsYXIgPyB7IGJhY2tncm91bmQ6IHt9IH0gOiB2b2lkIDAsIHUpO1xuICAgICAgICB9XG4gICAgICAgIHJlbmRlcigpIHtcbiAgICAgICAgICBsZXQgdSA9IHRoaXMub3B0aW9ucywgQSA9IHRoaXMuY2hhcnQucmVuZGVyZXI7XG4gICAgICAgICAgdGhpcy5ncm91cCB8fCAodGhpcy5ncm91cCA9IEEuZyhcInBhbmUtZ3JvdXBcIikuYXR0cih7IHpJbmRleDogdS56SW5kZXggfHwgMCB9KS5hZGQoKSksIHRoaXMudXBkYXRlQ2VudGVyKCk7XG4gICAgICAgICAgbGV0IHogPSB0aGlzLm9wdGlvbnMuYmFja2dyb3VuZDtcbiAgICAgICAgICBpZiAoeikge1xuICAgICAgICAgICAgbGV0IGYgPSBNYXRoLm1heCgoeiA9IGQoeikpLmxlbmd0aCwgdGhpcy5iYWNrZ3JvdW5kLmxlbmd0aCB8fCAwKTtcbiAgICAgICAgICAgIGZvciAobGV0IE8gPSAwOyBPIDwgZjsgTysrKVxuICAgICAgICAgICAgICB6W09dICYmIHRoaXMuYXhpcyA/IHRoaXMucmVuZGVyQmFja2dyb3VuZChwKGEuYmFja2dyb3VuZCwgeltPXSksIE8pIDogdGhpcy5iYWNrZ3JvdW5kW09dICYmICh0aGlzLmJhY2tncm91bmRbT10gPSB0aGlzLmJhY2tncm91bmRbT10uZGVzdHJveSgpLCB0aGlzLmJhY2tncm91bmQuc3BsaWNlKE8sIDEpKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmVuZGVyQmFja2dyb3VuZCh1LCBBKSB7XG4gICAgICAgICAgbGV0IHogPSB7IGNsYXNzOiBcImhpZ2hjaGFydHMtcGFuZSBcIiArICh1LmNsYXNzTmFtZSB8fCBcIlwiKSB9LCBmID0gXCJhbmltYXRlXCI7XG4gICAgICAgICAgdGhpcy5jaGFydC5zdHlsZWRNb2RlIHx8IGwoeiwgeyBmaWxsOiB1LmJhY2tncm91bmRDb2xvciwgc3Ryb2tlOiB1LmJvcmRlckNvbG9yLCBcInN0cm9rZS13aWR0aFwiOiB1LmJvcmRlcldpZHRoIH0pLCB0aGlzLmJhY2tncm91bmRbQV0gfHwgKHRoaXMuYmFja2dyb3VuZFtBXSA9IHRoaXMuY2hhcnQucmVuZGVyZXIucGF0aCgpLmFkZCh0aGlzLmdyb3VwKSwgZiA9IFwiYXR0clwiKSwgdGhpcy5iYWNrZ3JvdW5kW0FdW2ZdKHsgZDogdGhpcy5heGlzLmdldFBsb3RCYW5kUGF0aCh1LmZyb20sIHUudG8sIHUpIH0pLmF0dHIoeik7XG4gICAgICAgIH1cbiAgICAgICAgdXBkYXRlQ2VudGVyKHUpIHtcbiAgICAgICAgICB0aGlzLmNlbnRlciA9ICh1IHx8IHRoaXMuYXhpcyB8fCB7fSkuY2VudGVyID0gci5nZXRDZW50ZXIuY2FsbCh0aGlzKTtcbiAgICAgICAgfVxuICAgICAgICB1cGRhdGUodSwgQSkge1xuICAgICAgICAgIHAoITAsIHRoaXMub3B0aW9ucywgdSksIHRoaXMuc2V0T3B0aW9ucyh0aGlzLm9wdGlvbnMpLCB0aGlzLnJlbmRlcigpLCB0aGlzLmNoYXJ0LmF4ZXMuZm9yRWFjaChmdW5jdGlvbih6KSB7XG4gICAgICAgICAgICB6LnBhbmUgPT09IHRoaXMgJiYgKHoucGFuZSA9IG51bGwsIHoudXBkYXRlKHt9LCBBKSk7XG4gICAgICAgICAgfSwgdGhpcyk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiBiLmNvbXBvc2UgPSBpLmNvbXBvc2UsIGI7XG4gICAgfSksIG4obywgXCJTZXJpZXMvQXJlYVJhbmdlL0FyZWFSYW5nZVBvaW50LmpzXCIsIFtvW1wiQ29yZS9TZXJpZXMvU2VyaWVzUmVnaXN0cnkuanNcIl0sIG9bXCJDb3JlL1V0aWxpdGllcy5qc1wiXV0sIGZ1bmN0aW9uKHIsIGkpIHtcbiAgICAgIGxldCB7IGFyZWE6IHsgcHJvdG90eXBlOiB7IHBvaW50Q2xhc3M6IGEsIHBvaW50Q2xhc3M6IHsgcHJvdG90eXBlOiBzIH0gfSB9IH0gPSByLnNlcmllc1R5cGVzLCB7IGRlZmluZWQ6IGwsIGlzTnVtYmVyOiBwIH0gPSBpO1xuICAgICAgcmV0dXJuIGNsYXNzIGV4dGVuZHMgYSB7XG4gICAgICAgIHNldFN0YXRlKCkge1xuICAgICAgICAgIGxldCBkID0gdGhpcy5zdGF0ZSwgYiA9IHRoaXMuc2VyaWVzLCBNID0gYi5jaGFydC5wb2xhcjtcbiAgICAgICAgICBsKHRoaXMucGxvdEhpZ2gpIHx8ICh0aGlzLnBsb3RIaWdoID0gYi55QXhpcy50b1BpeGVscyh0aGlzLmhpZ2gsICEwKSksIGwodGhpcy5wbG90TG93KSB8fCAodGhpcy5wbG90TG93ID0gdGhpcy5wbG90WSA9IGIueUF4aXMudG9QaXhlbHModGhpcy5sb3csICEwKSksIGIubG93ZXJTdGF0ZU1hcmtlckdyYXBoaWMgPSBiLnN0YXRlTWFya2VyR3JhcGhpYywgYi5zdGF0ZU1hcmtlckdyYXBoaWMgPSBiLnVwcGVyU3RhdGVNYXJrZXJHcmFwaGljLCB0aGlzLmdyYXBoaWMgPSB0aGlzLmdyYXBoaWNzICYmIHRoaXMuZ3JhcGhpY3NbMV0sIHRoaXMucGxvdFkgPSB0aGlzLnBsb3RIaWdoLCBNICYmIHAodGhpcy5wbG90SGlnaFgpICYmICh0aGlzLnBsb3RYID0gdGhpcy5wbG90SGlnaFgpLCBzLnNldFN0YXRlLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyksIHRoaXMuc3RhdGUgPSBkLCB0aGlzLnBsb3RZID0gdGhpcy5wbG90TG93LCB0aGlzLmdyYXBoaWMgPSB0aGlzLmdyYXBoaWNzICYmIHRoaXMuZ3JhcGhpY3NbMF0sIE0gJiYgcCh0aGlzLnBsb3RMb3dYKSAmJiAodGhpcy5wbG90WCA9IHRoaXMucGxvdExvd1gpLCBiLnVwcGVyU3RhdGVNYXJrZXJHcmFwaGljID0gYi5zdGF0ZU1hcmtlckdyYXBoaWMsIGIuc3RhdGVNYXJrZXJHcmFwaGljID0gYi5sb3dlclN0YXRlTWFya2VyR3JhcGhpYywgYi5sb3dlclN0YXRlTWFya2VyR3JhcGhpYyA9IHZvaWQgMDtcbiAgICAgICAgICBsZXQgdSA9IGIubW9kaWZ5TWFya2VyU2V0dGluZ3MoKTtcbiAgICAgICAgICBzLnNldFN0YXRlLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyksIGIucmVzdG9yZU1hcmtlclNldHRpbmdzKHUpO1xuICAgICAgICB9XG4gICAgICAgIGhhbG9QYXRoKCkge1xuICAgICAgICAgIGxldCBkID0gdGhpcy5zZXJpZXMuY2hhcnQucG9sYXIsIGIgPSBbXTtcbiAgICAgICAgICByZXR1cm4gdGhpcy5wbG90WSA9IHRoaXMucGxvdExvdywgZCAmJiBwKHRoaXMucGxvdExvd1gpICYmICh0aGlzLnBsb3RYID0gdGhpcy5wbG90TG93WCksIHRoaXMuaXNJbnNpZGUgJiYgKGIgPSBzLmhhbG9QYXRoLmFwcGx5KHRoaXMsIGFyZ3VtZW50cykpLCB0aGlzLnBsb3RZID0gdGhpcy5wbG90SGlnaCwgZCAmJiBwKHRoaXMucGxvdEhpZ2hYKSAmJiAodGhpcy5wbG90WCA9IHRoaXMucGxvdEhpZ2hYKSwgdGhpcy5pc1RvcEluc2lkZSAmJiAoYiA9IGIuY29uY2F0KHMuaGFsb1BhdGguYXBwbHkodGhpcywgYXJndW1lbnRzKSkpLCBiO1xuICAgICAgICB9XG4gICAgICAgIGlzVmFsaWQoKSB7XG4gICAgICAgICAgcmV0dXJuIHAodGhpcy5sb3cpICYmIHAodGhpcy5oaWdoKTtcbiAgICAgICAgfVxuICAgICAgfTtcbiAgICB9KSwgbihvLCBcIlNlcmllcy9BcmVhUmFuZ2UvQXJlYVJhbmdlU2VyaWVzLmpzXCIsIFtvW1wiU2VyaWVzL0FyZWFSYW5nZS9BcmVhUmFuZ2VQb2ludC5qc1wiXSwgb1tcIkNvcmUvR2xvYmFscy5qc1wiXSwgb1tcIkNvcmUvU2VyaWVzL1Nlcmllc1JlZ2lzdHJ5LmpzXCJdLCBvW1wiQ29yZS9VdGlsaXRpZXMuanNcIl1dLCBmdW5jdGlvbihyLCBpLCBhLCBzKSB7XG4gICAgICBsZXQgeyBub29wOiBsIH0gPSBpLCB7IGFyZWE6IHAsIGFyZWE6IHsgcHJvdG90eXBlOiBkIH0sIGNvbHVtbjogeyBwcm90b3R5cGU6IGIgfSB9ID0gYS5zZXJpZXNUeXBlcywgeyBhZGRFdmVudDogTSwgZGVmaW5lZDogdSwgZXh0ZW5kOiBBLCBpc0FycmF5OiB6LCBpc051bWJlcjogZiwgcGljazogTywgbWVyZ2U6IGggfSA9IHM7XG4gICAgICBjbGFzcyBnIGV4dGVuZHMgcCB7XG4gICAgICAgIHRvWURhdGEoTCkge1xuICAgICAgICAgIHJldHVybiBbTC5sb3csIEwuaGlnaF07XG4gICAgICAgIH1cbiAgICAgICAgaGlnaFRvWFkoTCkge1xuICAgICAgICAgIGxldCB5ID0gdGhpcy5jaGFydCwgQiA9IHRoaXMueEF4aXMucG9zdFRyYW5zbGF0ZShMLnJlY3RQbG90WCB8fCAwLCB0aGlzLnlBeGlzLmxlbiAtIChMLnBsb3RIaWdoIHx8IDApKTtcbiAgICAgICAgICBMLnBsb3RIaWdoWCA9IEIueCAtIHkucGxvdExlZnQsIEwucGxvdEhpZ2ggPSBCLnkgLSB5LnBsb3RUb3AsIEwucGxvdExvd1ggPSBMLnBsb3RYO1xuICAgICAgICB9XG4gICAgICAgIGdldEdyYXBoUGF0aChMKSB7XG4gICAgICAgICAgbGV0IHkgPSBbXSwgQiA9IFtdLCBYID0gZC5nZXRHcmFwaFBhdGgsIEYgPSB0aGlzLm9wdGlvbnMsIFQgPSB0aGlzLmNoYXJ0LnBvbGFyLCB3ID0gVCAmJiBGLmNvbm5lY3RFbmRzICE9PSAhMSwgSCA9IEYuY29ubmVjdE51bGxzLCBDLCBxLCBtLCBrID0gRi5zdGVwO1xuICAgICAgICAgIGZvciAoQyA9IChMID0gTCB8fCB0aGlzLnBvaW50cykubGVuZ3RoOyBDLS07ICkge1xuICAgICAgICAgICAgcSA9IExbQ107XG4gICAgICAgICAgICBsZXQgSSA9IFQgPyB7IHBsb3RYOiBxLnJlY3RQbG90WCwgcGxvdFk6IHEueUJvdHRvbSwgZG9DdXJ2ZTogITEgfSA6IHsgcGxvdFg6IHEucGxvdFgsIHBsb3RZOiBxLnBsb3RZLCBkb0N1cnZlOiAhMSB9O1xuICAgICAgICAgICAgcS5pc051bGwgfHwgdyB8fCBIIHx8IExbQyArIDFdICYmICFMW0MgKyAxXS5pc051bGwgfHwgQi5wdXNoKEkpLCBtID0geyBwb2xhclBsb3RZOiBxLnBvbGFyUGxvdFksIHJlY3RQbG90WDogcS5yZWN0UGxvdFgsIHlCb3R0b206IHEueUJvdHRvbSwgcGxvdFg6IE8ocS5wbG90SGlnaFgsIHEucGxvdFgpLCBwbG90WTogcS5wbG90SGlnaCwgaXNOdWxsOiBxLmlzTnVsbCB9LCBCLnB1c2gobSksIHkucHVzaChtKSwgcS5pc051bGwgfHwgdyB8fCBIIHx8IExbQyAtIDFdICYmICFMW0MgLSAxXS5pc051bGwgfHwgQi5wdXNoKEkpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBsZXQgeCA9IFguY2FsbCh0aGlzLCBMKTtcbiAgICAgICAgICBrICYmIChrID09PSAhMCAmJiAoayA9IFwibGVmdFwiKSwgRi5zdGVwID0geyBsZWZ0OiBcInJpZ2h0XCIsIGNlbnRlcjogXCJjZW50ZXJcIiwgcmlnaHQ6IFwibGVmdFwiIH1ba10pO1xuICAgICAgICAgIGxldCBOID0gWC5jYWxsKHRoaXMsIHkpLCBWID0gWC5jYWxsKHRoaXMsIEIpO1xuICAgICAgICAgIEYuc3RlcCA9IGs7XG4gICAgICAgICAgbGV0IFIgPSBbXS5jb25jYXQoeCwgTik7XG4gICAgICAgICAgcmV0dXJuICF0aGlzLmNoYXJ0LnBvbGFyICYmIFZbMF0gJiYgVlswXVswXSA9PT0gXCJNXCIgJiYgKFZbMF0gPSBbXCJMXCIsIFZbMF1bMV0sIFZbMF1bMl1dKSwgdGhpcy5ncmFwaFBhdGggPSBSLCB0aGlzLmFyZWFQYXRoID0geC5jb25jYXQoViksIFIuaXNBcmVhID0gITAsIFIueE1hcCA9IHgueE1hcCwgdGhpcy5hcmVhUGF0aC54TWFwID0geC54TWFwLCBSO1xuICAgICAgICB9XG4gICAgICAgIGRyYXdEYXRhTGFiZWxzKCkge1xuICAgICAgICAgIHZhciBtLCBrO1xuICAgICAgICAgIGxldCBMLCB5LCBCLCBYLCBGLCBUID0gdGhpcy5wb2ludHMsIHcgPSBULmxlbmd0aCwgSCA9IFtdLCBDID0gdGhpcy5vcHRpb25zLmRhdGFMYWJlbHMsIHEgPSB0aGlzLmNoYXJ0LmludmVydGVkO1xuICAgICAgICAgIGlmIChDKSB7XG4gICAgICAgICAgICBpZiAoeihDKSA/IChYID0gQ1swXSB8fCB7IGVuYWJsZWQ6ICExIH0sIEYgPSBDWzFdIHx8IHsgZW5hYmxlZDogITEgfSkgOiAoKFggPSBBKHt9LCBDKSkueCA9IEMueEhpZ2gsIFgueSA9IEMueUhpZ2gsIChGID0gQSh7fSwgQykpLnggPSBDLnhMb3csIEYueSA9IEMueUxvdyksIFguZW5hYmxlZCB8fCAoKG0gPSB0aGlzLmhhc0RhdGFMYWJlbHMpID09IG51bGwgPyB2b2lkIDAgOiBtLmNhbGwodGhpcykpKSB7XG4gICAgICAgICAgICAgIGZvciAoTCA9IHc7IEwtLTsgKVxuICAgICAgICAgICAgICAgIGlmICh5ID0gVFtMXSkge1xuICAgICAgICAgICAgICAgICAgbGV0IHsgcGxvdEhpZ2g6IHggPSAwLCBwbG90TG93OiBOID0gMCB9ID0geTtcbiAgICAgICAgICAgICAgICAgIEIgPSBYLmluc2lkZSA/IHggPCBOIDogeCA+IE4sIHkueSA9IHkuaGlnaCwgeS5fcGxvdFkgPSB5LnBsb3RZLCB5LnBsb3RZID0geCwgSFtMXSA9IHkuZGF0YUxhYmVsLCB5LmRhdGFMYWJlbCA9IHkuZGF0YUxhYmVsVXBwZXIsIHkuYmVsb3cgPSBCLCBxID8gWC5hbGlnbiB8fCAoWC5hbGlnbiA9IEIgPyBcInJpZ2h0XCIgOiBcImxlZnRcIikgOiBYLnZlcnRpY2FsQWxpZ24gfHwgKFgudmVydGljYWxBbGlnbiA9IEIgPyBcInRvcFwiIDogXCJib3R0b21cIik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBmb3IgKHRoaXMub3B0aW9ucy5kYXRhTGFiZWxzID0gWCwgZC5kcmF3RGF0YUxhYmVscyAmJiBkLmRyYXdEYXRhTGFiZWxzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyksIEwgPSB3OyBMLS07IClcbiAgICAgICAgICAgICAgICAoeSA9IFRbTF0pICYmICh5LmRhdGFMYWJlbFVwcGVyID0geS5kYXRhTGFiZWwsIHkuZGF0YUxhYmVsID0gSFtMXSwgZGVsZXRlIHkuZGF0YUxhYmVscywgeS55ID0geS5sb3csIHkucGxvdFkgPSB5Ll9wbG90WSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoRi5lbmFibGVkIHx8IChrID0gdGhpcy5oYXNEYXRhTGFiZWxzKSAhPSBudWxsICYmIGsuY2FsbCh0aGlzKSkge1xuICAgICAgICAgICAgICBmb3IgKEwgPSB3OyBMLS07IClcbiAgICAgICAgICAgICAgICBpZiAoeSA9IFRbTF0pIHtcbiAgICAgICAgICAgICAgICAgIGxldCB7IHBsb3RIaWdoOiB4ID0gMCwgcGxvdExvdzogTiA9IDAgfSA9IHk7XG4gICAgICAgICAgICAgICAgICBCID0gRi5pbnNpZGUgPyB4IDwgTiA6IHggPiBOLCB5LmJlbG93ID0gIUIsIHEgPyBGLmFsaWduIHx8IChGLmFsaWduID0gQiA/IFwibGVmdFwiIDogXCJyaWdodFwiKSA6IEYudmVydGljYWxBbGlnbiB8fCAoRi52ZXJ0aWNhbEFsaWduID0gQiA/IFwiYm90dG9tXCIgOiBcInRvcFwiKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIHRoaXMub3B0aW9ucy5kYXRhTGFiZWxzID0gRiwgZC5kcmF3RGF0YUxhYmVscyAmJiBkLmRyYXdEYXRhTGFiZWxzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoWC5lbmFibGVkKVxuICAgICAgICAgICAgICBmb3IgKEwgPSB3OyBMLS07IClcbiAgICAgICAgICAgICAgICAoeSA9IFRbTF0pICYmICh5LmRhdGFMYWJlbHMgPSBbeS5kYXRhTGFiZWxVcHBlciwgeS5kYXRhTGFiZWxdLmZpbHRlcihmdW5jdGlvbih4KSB7XG4gICAgICAgICAgICAgICAgICByZXR1cm4gISF4O1xuICAgICAgICAgICAgICAgIH0pKTtcbiAgICAgICAgICAgIHRoaXMub3B0aW9ucy5kYXRhTGFiZWxzID0gQztcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgYWxpZ25EYXRhTGFiZWwoKSB7XG4gICAgICAgICAgYi5hbGlnbkRhdGFMYWJlbC5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICAgICAgICB9XG4gICAgICAgIG1vZGlmeU1hcmtlclNldHRpbmdzKCkge1xuICAgICAgICAgIGxldCBMID0geyBtYXJrZXI6IHRoaXMub3B0aW9ucy5tYXJrZXIsIHN5bWJvbDogdGhpcy5zeW1ib2wgfTtcbiAgICAgICAgICBpZiAodGhpcy5vcHRpb25zLmxvd01hcmtlcikge1xuICAgICAgICAgICAgbGV0IHsgb3B0aW9uczogeyBtYXJrZXI6IHksIGxvd01hcmtlcjogQiB9IH0gPSB0aGlzO1xuICAgICAgICAgICAgdGhpcy5vcHRpb25zLm1hcmtlciA9IGgoeSwgQiksIEIuc3ltYm9sICYmICh0aGlzLnN5bWJvbCA9IEIuc3ltYm9sKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIEw7XG4gICAgICAgIH1cbiAgICAgICAgcmVzdG9yZU1hcmtlclNldHRpbmdzKEwpIHtcbiAgICAgICAgICB0aGlzLm9wdGlvbnMubWFya2VyID0gTC5tYXJrZXIsIHRoaXMuc3ltYm9sID0gTC5zeW1ib2w7XG4gICAgICAgIH1cbiAgICAgICAgZHJhd1BvaW50cygpIHtcbiAgICAgICAgICBsZXQgTCwgeSwgQiA9IHRoaXMucG9pbnRzLmxlbmd0aCwgWCA9IHRoaXMubW9kaWZ5TWFya2VyU2V0dGluZ3MoKTtcbiAgICAgICAgICBmb3IgKGQuZHJhd1BvaW50cy5hcHBseSh0aGlzLCBhcmd1bWVudHMpLCB0aGlzLnJlc3RvcmVNYXJrZXJTZXR0aW5ncyhYKSwgTCA9IDA7IEwgPCBCOyApXG4gICAgICAgICAgICAoeSA9IHRoaXMucG9pbnRzW0xdKS5ncmFwaGljcyA9IHkuZ3JhcGhpY3MgfHwgW10sIHkub3JpZ1Byb3BzID0geyBwbG90WTogeS5wbG90WSwgcGxvdFg6IHkucGxvdFgsIGlzSW5zaWRlOiB5LmlzSW5zaWRlLCBuZWdhdGl2ZTogeS5uZWdhdGl2ZSwgem9uZTogeS56b25lLCB5OiB5LnkgfSwgKHkuZ3JhcGhpYyB8fCB5LmdyYXBoaWNzWzBdKSAmJiAoeS5ncmFwaGljc1swXSA9IHkuZ3JhcGhpYyksIHkuZ3JhcGhpYyA9IHkuZ3JhcGhpY3NbMV0sIHkucGxvdFkgPSB5LnBsb3RIaWdoLCB1KHkucGxvdEhpZ2hYKSAmJiAoeS5wbG90WCA9IHkucGxvdEhpZ2hYKSwgeS55ID0gTyh5LmhpZ2gsIHkub3JpZ1Byb3BzLnkpLCB5Lm5lZ2F0aXZlID0geS55IDwgKHRoaXMub3B0aW9ucy50aHJlc2hvbGQgfHwgMCksIHRoaXMuem9uZXMubGVuZ3RoICYmICh5LnpvbmUgPSB5LmdldFpvbmUoKSksIHRoaXMuY2hhcnQucG9sYXIgfHwgKHkuaXNJbnNpZGUgPSB5LmlzVG9wSW5zaWRlID0geS5wbG90WSAhPT0gdm9pZCAwICYmIHkucGxvdFkgPj0gMCAmJiB5LnBsb3RZIDw9IHRoaXMueUF4aXMubGVuICYmIHkucGxvdFggPj0gMCAmJiB5LnBsb3RYIDw9IHRoaXMueEF4aXMubGVuKSwgTCsrO1xuICAgICAgICAgIGZvciAoZC5kcmF3UG9pbnRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyksIEwgPSAwOyBMIDwgQjsgKVxuICAgICAgICAgICAgKHkgPSB0aGlzLnBvaW50c1tMXSkuZ3JhcGhpY3MgPSB5LmdyYXBoaWNzIHx8IFtdLCAoeS5ncmFwaGljIHx8IHkuZ3JhcGhpY3NbMV0pICYmICh5LmdyYXBoaWNzWzFdID0geS5ncmFwaGljKSwgeS5ncmFwaGljID0geS5ncmFwaGljc1swXSwgeS5vcmlnUHJvcHMgJiYgKEEoeSwgeS5vcmlnUHJvcHMpLCBkZWxldGUgeS5vcmlnUHJvcHMpLCBMKys7XG4gICAgICAgIH1cbiAgICAgICAgaGFzTWFya2VyQ2hhbmdlZChMLCB5KSB7XG4gICAgICAgICAgbGV0IEIgPSBMLmxvd01hcmtlciwgWCA9IHkubG93TWFya2VyIHx8IHt9O1xuICAgICAgICAgIHJldHVybiBCICYmIChCLmVuYWJsZWQgPT09ICExIHx8IFguc3ltYm9sICE9PSBCLnN5bWJvbCB8fCBYLmhlaWdodCAhPT0gQi5oZWlnaHQgfHwgWC53aWR0aCAhPT0gQi53aWR0aCkgfHwgc3VwZXIuaGFzTWFya2VyQ2hhbmdlZChMLCB5KTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIGcuZGVmYXVsdE9wdGlvbnMgPSBoKHAuZGVmYXVsdE9wdGlvbnMsIHsgbGluZVdpZHRoOiAxLCB0aHJlc2hvbGQ6IG51bGwsIHRvb2x0aXA6IHsgcG9pbnRGb3JtYXQ6ICc8c3BhbiBzdHlsZT1cImNvbG9yOntzZXJpZXMuY29sb3J9XCI+4pePPC9zcGFuPiB7c2VyaWVzLm5hbWV9OiA8Yj57cG9pbnQubG93fTwvYj4gLSA8Yj57cG9pbnQuaGlnaH08L2I+PGJyLz4nIH0sIHRyYWNrQnlBcmVhOiAhMCwgZGF0YUxhYmVsczogeyBhbGlnbjogdm9pZCAwLCB2ZXJ0aWNhbEFsaWduOiB2b2lkIDAsIHhMb3c6IDAsIHhIaWdoOiAwLCB5TG93OiAwLCB5SGlnaDogMCB9IH0pLCBNKGcsIFwiYWZ0ZXJUcmFuc2xhdGVcIiwgZnVuY3Rpb24oKSB7XG4gICAgICAgIHRoaXMucG9pbnRBcnJheU1hcC5qb2luKFwiLFwiKSA9PT0gXCJsb3csaGlnaFwiICYmIHRoaXMucG9pbnRzLmZvckVhY2goKHYpID0+IHtcbiAgICAgICAgICBsZXQgTCA9IHYuaGlnaCwgeSA9IHYucGxvdFk7XG4gICAgICAgICAgdi5pc051bGwgPyB2LnBsb3RZID0gdm9pZCAwIDogKHYucGxvdExvdyA9IHksIHYucGxvdEhpZ2ggPSBmKEwpID8gdGhpcy55QXhpcy50cmFuc2xhdGUodGhpcy5kYXRhTW9kaWZ5ID8gdGhpcy5kYXRhTW9kaWZ5Lm1vZGlmeVZhbHVlKEwpIDogTCwgITEsICEwLCB2b2lkIDAsICEwKSA6IHZvaWQgMCwgdGhpcy5kYXRhTW9kaWZ5ICYmICh2LnlCb3R0b20gPSB2LnBsb3RIaWdoKSk7XG4gICAgICAgIH0pO1xuICAgICAgfSwgeyBvcmRlcjogMCB9KSwgTShnLCBcImFmdGVyVHJhbnNsYXRlXCIsIGZ1bmN0aW9uKCkge1xuICAgICAgICB0aGlzLnBvaW50cy5mb3JFYWNoKCh2KSA9PiB7XG4gICAgICAgICAgaWYgKHRoaXMuY2hhcnQucG9sYXIpXG4gICAgICAgICAgICB0aGlzLmhpZ2hUb1hZKHYpLCB2LnBsb3RMb3cgPSB2LnBsb3RZLCB2LnRvb2x0aXBQb3MgPSBbKCh2LnBsb3RIaWdoWCB8fCAwKSArICh2LnBsb3RMb3dYIHx8IDApKSAvIDIsICgodi5wbG90SGlnaCB8fCAwKSArICh2LnBsb3RMb3cgfHwgMCkpIC8gMl07XG4gICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBsZXQgTCA9IHYucG9zKCExLCB2LnBsb3RMb3cpLCB5ID0gdi5wb3MoITEsIHYucGxvdEhpZ2gpO1xuICAgICAgICAgICAgTCAmJiB5ICYmIChMWzBdID0gKExbMF0gKyB5WzBdKSAvIDIsIExbMV0gPSAoTFsxXSArIHlbMV0pIC8gMiksIHYudG9vbHRpcFBvcyA9IEw7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH0sIHsgb3JkZXI6IDMgfSksIEEoZy5wcm90b3R5cGUsIHsgZGVmZXJUcmFuc2xhdGVQb2xhcjogITAsIHBvaW50QXJyYXlNYXA6IFtcImxvd1wiLCBcImhpZ2hcIl0sIHBvaW50Q2xhc3M6IHIsIHBvaW50VmFsS2V5OiBcImxvd1wiLCBzZXRTdGFja2VkUG9pbnRzOiBsIH0pLCBhLnJlZ2lzdGVyU2VyaWVzVHlwZShcImFyZWFyYW5nZVwiLCBnKSwgZztcbiAgICB9KSwgbihvLCBcIlNlcmllcy9BcmVhU3BsaW5lUmFuZ2UvQXJlYVNwbGluZVJhbmdlU2VyaWVzLmpzXCIsIFtvW1wiU2VyaWVzL0FyZWFSYW5nZS9BcmVhUmFuZ2VTZXJpZXMuanNcIl0sIG9bXCJDb3JlL1Nlcmllcy9TZXJpZXNSZWdpc3RyeS5qc1wiXSwgb1tcIkNvcmUvVXRpbGl0aWVzLmpzXCJdXSwgZnVuY3Rpb24ociwgaSwgYSkge1xuICAgICAgbGV0IHsgc3BsaW5lOiB7IHByb3RvdHlwZTogcyB9IH0gPSBpLnNlcmllc1R5cGVzLCB7IG1lcmdlOiBsLCBleHRlbmQ6IHAgfSA9IGE7XG4gICAgICBjbGFzcyBkIGV4dGVuZHMgciB7XG4gICAgICB9XG4gICAgICByZXR1cm4gZC5kZWZhdWx0T3B0aW9ucyA9IGwoci5kZWZhdWx0T3B0aW9ucyksIHAoZC5wcm90b3R5cGUsIHsgZ2V0UG9pbnRTcGxpbmU6IHMuZ2V0UG9pbnRTcGxpbmUgfSksIGkucmVnaXN0ZXJTZXJpZXNUeXBlKFwiYXJlYXNwbGluZXJhbmdlXCIsIGQpLCBkO1xuICAgIH0pLCBuKG8sIFwiU2VyaWVzL0JveFBsb3QvQm94UGxvdFNlcmllc0RlZmF1bHRzLmpzXCIsIFtdLCBmdW5jdGlvbigpIHtcbiAgICAgIHJldHVybiB7IHRocmVzaG9sZDogbnVsbCwgdG9vbHRpcDogeyBwb2ludEZvcm1hdDogJzxzcGFuIHN0eWxlPVwiY29sb3I6e3BvaW50LmNvbG9yfVwiPuKXjzwvc3Bhbj4gPGI+e3Nlcmllcy5uYW1lfTwvYj48YnIvPk1heGltdW06IHtwb2ludC5oaWdofTxici8+VXBwZXIgcXVhcnRpbGU6IHtwb2ludC5xM308YnIvPk1lZGlhbjoge3BvaW50Lm1lZGlhbn08YnIvPkxvd2VyIHF1YXJ0aWxlOiB7cG9pbnQucTF9PGJyLz5NaW5pbXVtOiB7cG9pbnQubG93fTxici8+JyB9LCB3aGlza2VyTGVuZ3RoOiBcIjUwJVwiLCBmaWxsQ29sb3I6IFwiI2ZmZmZmZlwiLCBsaW5lV2lkdGg6IDEsIG1lZGlhbldpZHRoOiAyLCB3aGlza2VyV2lkdGg6IDIgfTtcbiAgICB9KSwgbihvLCBcIlNlcmllcy9Cb3hQbG90L0JveFBsb3RTZXJpZXMuanNcIiwgW29bXCJTZXJpZXMvQm94UGxvdC9Cb3hQbG90U2VyaWVzRGVmYXVsdHMuanNcIl0sIG9bXCJTZXJpZXMvQ29sdW1uL0NvbHVtblNlcmllcy5qc1wiXSwgb1tcIkNvcmUvR2xvYmFscy5qc1wiXSwgb1tcIkNvcmUvU2VyaWVzL1Nlcmllc1JlZ2lzdHJ5LmpzXCJdLCBvW1wiQ29yZS9VdGlsaXRpZXMuanNcIl1dLCBmdW5jdGlvbihyLCBpLCBhLCBzLCBsKSB7XG4gICAgICBsZXQgeyBub29wOiBwIH0gPSBhLCB7IGNyaXNwOiBkLCBleHRlbmQ6IGIsIG1lcmdlOiBNLCBwaWNrOiB1IH0gPSBsO1xuICAgICAgY2xhc3MgQSBleHRlbmRzIGkge1xuICAgICAgICBwb2ludEF0dHJpYnMoKSB7XG4gICAgICAgICAgcmV0dXJuIHt9O1xuICAgICAgICB9XG4gICAgICAgIHRyYW5zbGF0ZSgpIHtcbiAgICAgICAgICBsZXQgZiA9IHRoaXMueUF4aXMsIE8gPSB0aGlzLnBvaW50QXJyYXlNYXA7XG4gICAgICAgICAgc3VwZXIudHJhbnNsYXRlLmFwcGx5KHRoaXMpLCB0aGlzLnBvaW50cy5mb3JFYWNoKGZ1bmN0aW9uKGgpIHtcbiAgICAgICAgICAgIE8uZm9yRWFjaChmdW5jdGlvbihnKSB7XG4gICAgICAgICAgICAgIGhbZ10gIT09IG51bGwgJiYgKGhbZyArIFwiUGxvdFwiXSA9IGYudHJhbnNsYXRlKGhbZ10sIDAsIDEsIDAsIDEpKTtcbiAgICAgICAgICAgIH0pLCBoLnBsb3RIaWdoID0gaC5oaWdoUGxvdDtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBkcmF3UG9pbnRzKCkge1xuICAgICAgICAgIGxldCBmLCBPLCBoLCBnLCB2LCBMLCB5LCBCLCBYLCBGLCBULCB3LCBILCBDID0gdGhpcy5wb2ludHMsIHEgPSB0aGlzLm9wdGlvbnMsIG0gPSB0aGlzLmNoYXJ0LCBrID0gbS5yZW5kZXJlciwgeCA9IHRoaXMuZG9RdWFydGlsZXMgIT09ICExLCBOID0gdGhpcy5vcHRpb25zLndoaXNrZXJMZW5ndGg7XG4gICAgICAgICAgZm9yIChsZXQgViBvZiBDKSB7XG4gICAgICAgICAgICBsZXQgUiA9IChCID0gVi5ncmFwaGljKSA/IFwiYW5pbWF0ZVwiIDogXCJhdHRyXCIsIEkgPSBWLnNoYXBlQXJncywgaiA9IHt9LCBVID0ge30sIF8gPSB7fSwgcjEgPSB7fSwgSyA9IFYuY29sb3IgfHwgdGhpcy5jb2xvcjtcbiAgICAgICAgICAgIGlmIChWLnBsb3RZICE9PSB2b2lkIDApIHtcbiAgICAgICAgICAgICAgbGV0IFE7XG4gICAgICAgICAgICAgIFggPSBJLndpZHRoLCBUID0gKEYgPSBJLngpICsgWCwgdyA9IFggLyAyLCBmID0geCA/IFYucTFQbG90IDogVi5sb3dQbG90LCBPID0geCA/IFYucTNQbG90IDogVi5sb3dQbG90LCBoID0gVi5oaWdoUGxvdCwgZyA9IFYubG93UGxvdCwgQiB8fCAoVi5ncmFwaGljID0gQiA9IGsuZyhcInBvaW50XCIpLmFkZCh0aGlzLmdyb3VwKSwgVi5zdGVtID0gay5wYXRoKCkuYWRkQ2xhc3MoXCJoaWdoY2hhcnRzLWJveHBsb3Qtc3RlbVwiKS5hZGQoQiksIE4gJiYgKFYud2hpc2tlcnMgPSBrLnBhdGgoKS5hZGRDbGFzcyhcImhpZ2hjaGFydHMtYm94cGxvdC13aGlza2VyXCIpLmFkZChCKSksIHggJiYgKFYuYm94ID0gay5wYXRoKHkpLmFkZENsYXNzKFwiaGlnaGNoYXJ0cy1ib3hwbG90LWJveFwiKS5hZGQoQikpLCBWLm1lZGlhblNoYXBlID0gay5wYXRoKEwpLmFkZENsYXNzKFwiaGlnaGNoYXJ0cy1ib3hwbG90LW1lZGlhblwiKS5hZGQoQikpLCBtLnN0eWxlZE1vZGUgfHwgKFUuc3Ryb2tlID0gVi5zdGVtQ29sb3IgfHwgcS5zdGVtQ29sb3IgfHwgSywgVVtcInN0cm9rZS13aWR0aFwiXSA9IHUoVi5zdGVtV2lkdGgsIHEuc3RlbVdpZHRoLCBxLmxpbmVXaWR0aCksIFUuZGFzaHN0eWxlID0gVi5zdGVtRGFzaFN0eWxlIHx8IHEuc3RlbURhc2hTdHlsZSB8fCBxLmRhc2hTdHlsZSwgVi5zdGVtLmF0dHIoVSksIE4gJiYgKF8uc3Ryb2tlID0gVi53aGlza2VyQ29sb3IgfHwgcS53aGlza2VyQ29sb3IgfHwgSywgX1tcInN0cm9rZS13aWR0aFwiXSA9IHUoVi53aGlza2VyV2lkdGgsIHEud2hpc2tlcldpZHRoLCBxLmxpbmVXaWR0aCksIF8uZGFzaHN0eWxlID0gVi53aGlza2VyRGFzaFN0eWxlIHx8IHEud2hpc2tlckRhc2hTdHlsZSB8fCBxLmRhc2hTdHlsZSwgVi53aGlza2Vycy5hdHRyKF8pKSwgeCAmJiAoai5maWxsID0gVi5maWxsQ29sb3IgfHwgcS5maWxsQ29sb3IgfHwgSywgai5zdHJva2UgPSBxLmxpbmVDb2xvciB8fCBLLCBqW1wic3Ryb2tlLXdpZHRoXCJdID0gcS5saW5lV2lkdGggfHwgMCwgai5kYXNoc3R5bGUgPSBWLmJveERhc2hTdHlsZSB8fCBxLmJveERhc2hTdHlsZSB8fCBxLmRhc2hTdHlsZSwgVi5ib3guYXR0cihqKSksIHIxLnN0cm9rZSA9IFYubWVkaWFuQ29sb3IgfHwgcS5tZWRpYW5Db2xvciB8fCBLLCByMVtcInN0cm9rZS13aWR0aFwiXSA9IHUoVi5tZWRpYW5XaWR0aCwgcS5tZWRpYW5XaWR0aCwgcS5saW5lV2lkdGgpLCByMS5kYXNoc3R5bGUgPSBWLm1lZGlhbkRhc2hTdHlsZSB8fCBxLm1lZGlhbkRhc2hTdHlsZSB8fCBxLmRhc2hTdHlsZSwgVi5tZWRpYW5TaGFwZS5hdHRyKHIxKSk7XG4gICAgICAgICAgICAgIGxldCBFID0gZCgoVi5wbG90WCB8fCAwKSArICh0aGlzLnBvaW50WE9mZnNldCB8fCAwKSArICh0aGlzLmJhclcgfHwgMCkgLyAyLCBWLnN0ZW0uc3Ryb2tlV2lkdGgoKSk7XG4gICAgICAgICAgICAgIGlmIChRID0gW1tcIk1cIiwgRSwgT10sIFtcIkxcIiwgRSwgaF0sIFtcIk1cIiwgRSwgZl0sIFtcIkxcIiwgRSwgZ11dLCBWLnN0ZW1bUl0oeyBkOiBRIH0pLCB4KSB7XG4gICAgICAgICAgICAgICAgbGV0IEQgPSBWLmJveC5zdHJva2VXaWR0aCgpO1xuICAgICAgICAgICAgICAgIGYgPSBkKGYsIEQpLCBPID0gZChPLCBEKSwgUSA9IFtbXCJNXCIsIEYgPSBkKEYsIEQpLCBPXSwgW1wiTFwiLCBGLCBmXSwgW1wiTFwiLCBUID0gZChULCBEKSwgZl0sIFtcIkxcIiwgVCwgT10sIFtcIkxcIiwgRiwgT10sIFtcIlpcIl1dLCBWLmJveFtSXSh7IGQ6IFEgfSk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgaWYgKE4pIHtcbiAgICAgICAgICAgICAgICBsZXQgRCA9IFYud2hpc2tlcnMuc3Ryb2tlV2lkdGgoKTtcbiAgICAgICAgICAgICAgICBoID0gZChWLmhpZ2hQbG90LCBEKSwgZyA9IGQoVi5sb3dQbG90LCBEKSwgUSA9IFtbXCJNXCIsIGQoRSAtIChIID0gdHlwZW9mIE4gPT0gXCJzdHJpbmdcIiAmJiAvJSQvLnRlc3QoTikgPyB3ICogcGFyc2VGbG9hdChOKSAvIDEwMCA6IE51bWJlcihOKSAvIDIpKSwgaF0sIFtcIkxcIiwgZChFICsgSCksIGhdLCBbXCJNXCIsIGQoRSAtIEgpLCBnXSwgW1wiTFwiLCBkKEUgKyBIKSwgZ11dLCBWLndoaXNrZXJzW1JdKHsgZDogUSB9KTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBRID0gW1tcIk1cIiwgRiwgdiA9IGQoVi5tZWRpYW5QbG90LCBWLm1lZGlhblNoYXBlLnN0cm9rZVdpZHRoKCkpXSwgW1wiTFwiLCBULCB2XV0sIFYubWVkaWFuU2hhcGVbUl0oeyBkOiBRIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICB0b1lEYXRhKGYpIHtcbiAgICAgICAgICByZXR1cm4gW2YubG93LCBmLnExLCBmLm1lZGlhbiwgZi5xMywgZi5oaWdoXTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIEEuZGVmYXVsdE9wdGlvbnMgPSBNKGkuZGVmYXVsdE9wdGlvbnMsIHIpLCBiKEEucHJvdG90eXBlLCB7IHBvaW50QXJyYXlNYXA6IFtcImxvd1wiLCBcInExXCIsIFwibWVkaWFuXCIsIFwicTNcIiwgXCJoaWdoXCJdLCBwb2ludFZhbEtleTogXCJoaWdoXCIsIGRyYXdEYXRhTGFiZWxzOiBwLCBzZXRTdGFja2VkUG9pbnRzOiBwIH0pLCBzLnJlZ2lzdGVyU2VyaWVzVHlwZShcImJveHBsb3RcIiwgQSksIEE7XG4gICAgfSksIG4obywgXCJTZXJpZXMvQnViYmxlL0J1YmJsZUxlZ2VuZERlZmF1bHRzLmpzXCIsIFtdLCBmdW5jdGlvbigpIHtcbiAgICAgIHJldHVybiB7IGJvcmRlckNvbG9yOiB2b2lkIDAsIGJvcmRlcldpZHRoOiAyLCBjbGFzc05hbWU6IHZvaWQgMCwgY29sb3I6IHZvaWQgMCwgY29ubmVjdG9yQ2xhc3NOYW1lOiB2b2lkIDAsIGNvbm5lY3RvckNvbG9yOiB2b2lkIDAsIGNvbm5lY3RvckRpc3RhbmNlOiA2MCwgY29ubmVjdG9yV2lkdGg6IDEsIGVuYWJsZWQ6ICExLCBsYWJlbHM6IHsgY2xhc3NOYW1lOiB2b2lkIDAsIGFsbG93T3ZlcmxhcDogITEsIGZvcm1hdDogXCJcIiwgZm9ybWF0dGVyOiB2b2lkIDAsIGFsaWduOiBcInJpZ2h0XCIsIHN0eWxlOiB7IGZvbnRTaXplOiBcIjAuOWVtXCIsIGNvbG9yOiBcIiMwMDAwMDBcIiB9LCB4OiAwLCB5OiAwIH0sIG1heFNpemU6IDYwLCBtaW5TaXplOiAxMCwgbGVnZW5kSW5kZXg6IDAsIHJhbmdlczogeyB2YWx1ZTogdm9pZCAwLCBib3JkZXJDb2xvcjogdm9pZCAwLCBjb2xvcjogdm9pZCAwLCBjb25uZWN0b3JDb2xvcjogdm9pZCAwIH0sIHNpemVCeTogXCJhcmVhXCIsIHNpemVCeUFic29sdXRlVmFsdWU6ICExLCB6SW5kZXg6IDEsIHpUaHJlc2hvbGQ6IDAgfTtcbiAgICB9KSwgbihvLCBcIlNlcmllcy9CdWJibGUvQnViYmxlTGVnZW5kSXRlbS5qc1wiLCBbb1tcIkNvcmUvQ29sb3IvQ29sb3IuanNcIl0sIG9bXCJDb3JlL1RlbXBsYXRpbmcuanNcIl0sIG9bXCJDb3JlL0dsb2JhbHMuanNcIl0sIG9bXCJDb3JlL1V0aWxpdGllcy5qc1wiXV0sIGZ1bmN0aW9uKHIsIGksIGEsIHMpIHtcbiAgICAgIGxldCB7IHBhcnNlOiBsIH0gPSByLCB7IG5vb3A6IHAgfSA9IGEsIHsgYXJyYXlNYXg6IGQsIGFycmF5TWluOiBiLCBpc051bWJlcjogTSwgbWVyZ2U6IHUsIHBpY2s6IEEsIHN0YWJsZVNvcnQ6IHogfSA9IHM7XG4gICAgICByZXR1cm4gY2xhc3Mge1xuICAgICAgICBjb25zdHJ1Y3RvcihmLCBPKSB7XG4gICAgICAgICAgdGhpcy5zZXRTdGF0ZSA9IHAsIHRoaXMuaW5pdChmLCBPKTtcbiAgICAgICAgfVxuICAgICAgICBpbml0KGYsIE8pIHtcbiAgICAgICAgICB0aGlzLm9wdGlvbnMgPSBmLCB0aGlzLnZpc2libGUgPSAhMCwgdGhpcy5jaGFydCA9IE8uY2hhcnQsIHRoaXMubGVnZW5kID0gTztcbiAgICAgICAgfVxuICAgICAgICBhZGRUb0xlZ2VuZChmKSB7XG4gICAgICAgICAgZi5zcGxpY2UodGhpcy5vcHRpb25zLmxlZ2VuZEluZGV4LCAwLCB0aGlzKTtcbiAgICAgICAgfVxuICAgICAgICBkcmF3TGVnZW5kU3ltYm9sKGYpIHtcbiAgICAgICAgICBsZXQgTywgaCA9IEEoZi5vcHRpb25zLml0ZW1EaXN0YW5jZSwgMjApLCBnID0gdGhpcy5sZWdlbmRJdGVtIHx8IHt9LCB2ID0gdGhpcy5vcHRpb25zLCBMID0gdi5yYW5nZXMsIHkgPSB2LmNvbm5lY3RvckRpc3RhbmNlO1xuICAgICAgICAgIGlmICghTCB8fCAhTC5sZW5ndGggfHwgIU0oTFswXS52YWx1ZSkpIHtcbiAgICAgICAgICAgIGYub3B0aW9ucy5idWJibGVMZWdlbmQuYXV0b1JhbmdlcyA9ICEwO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgIH1cbiAgICAgICAgICB6KEwsIGZ1bmN0aW9uKFQsIHcpIHtcbiAgICAgICAgICAgIHJldHVybiB3LnZhbHVlIC0gVC52YWx1ZTtcbiAgICAgICAgICB9KSwgdGhpcy5yYW5nZXMgPSBMLCB0aGlzLnNldE9wdGlvbnMoKSwgdGhpcy5yZW5kZXIoKTtcbiAgICAgICAgICBsZXQgQiA9IHRoaXMuZ2V0TWF4TGFiZWxTaXplKCksIFggPSB0aGlzLnJhbmdlc1swXS5yYWRpdXMsIEYgPSAyICogWDtcbiAgICAgICAgICBPID0gKE8gPSB5IC0gWCArIEIud2lkdGgpID4gMCA/IE8gOiAwLCB0aGlzLm1heExhYmVsID0gQiwgdGhpcy5tb3ZlbWVudFggPSB2LmxhYmVscy5hbGlnbiA9PT0gXCJsZWZ0XCIgPyBPIDogMCwgZy5sYWJlbFdpZHRoID0gRiArIE8gKyBoLCBnLmxhYmVsSGVpZ2h0ID0gRiArIEIuaGVpZ2h0IC8gMjtcbiAgICAgICAgfVxuICAgICAgICBzZXRPcHRpb25zKCkge1xuICAgICAgICAgIGxldCBmID0gdGhpcy5yYW5nZXMsIE8gPSB0aGlzLm9wdGlvbnMsIGggPSB0aGlzLmNoYXJ0LnNlcmllc1tPLnNlcmllc0luZGV4XSwgZyA9IHRoaXMubGVnZW5kLmJhc2VsaW5lLCB2ID0geyB6SW5kZXg6IE8uekluZGV4LCBcInN0cm9rZS13aWR0aFwiOiBPLmJvcmRlcldpZHRoIH0sIEwgPSB7IHpJbmRleDogTy56SW5kZXgsIFwic3Ryb2tlLXdpZHRoXCI6IE8uY29ubmVjdG9yV2lkdGggfSwgeSA9IHsgYWxpZ246IHRoaXMubGVnZW5kLm9wdGlvbnMucnRsIHx8IE8ubGFiZWxzLmFsaWduID09PSBcImxlZnRcIiA/IFwicmlnaHRcIiA6IFwibGVmdFwiLCB6SW5kZXg6IE8uekluZGV4IH0sIEIgPSBoLm9wdGlvbnMubWFya2VyLmZpbGxPcGFjaXR5LCBYID0gdGhpcy5jaGFydC5zdHlsZWRNb2RlO1xuICAgICAgICAgIGYuZm9yRWFjaChmdW5jdGlvbihGLCBUKSB7XG4gICAgICAgICAgICBYIHx8ICh2LnN0cm9rZSA9IEEoRi5ib3JkZXJDb2xvciwgTy5ib3JkZXJDb2xvciwgaC5jb2xvciksIHYuZmlsbCA9IEEoRi5jb2xvciwgTy5jb2xvciwgQiAhPT0gMSA/IGwoaC5jb2xvcikuc2V0T3BhY2l0eShCKS5nZXQoXCJyZ2JhXCIpIDogaC5jb2xvciksIEwuc3Ryb2tlID0gQShGLmNvbm5lY3RvckNvbG9yLCBPLmNvbm5lY3RvckNvbG9yLCBoLmNvbG9yKSksIGZbVF0ucmFkaXVzID0gdGhpcy5nZXRSYW5nZVJhZGl1cyhGLnZhbHVlKSwgZltUXSA9IHUoZltUXSwgeyBjZW50ZXI6IGZbMF0ucmFkaXVzIC0gZltUXS5yYWRpdXMgKyBnIH0pLCBYIHx8IHUoITAsIGZbVF0sIHsgYnViYmxlQXR0cmliczogdSh2KSwgY29ubmVjdG9yQXR0cmliczogdShMKSwgbGFiZWxBdHRyaWJzOiB5IH0pO1xuICAgICAgICAgIH0sIHRoaXMpO1xuICAgICAgICB9XG4gICAgICAgIGdldFJhbmdlUmFkaXVzKGYpIHtcbiAgICAgICAgICBsZXQgTyA9IHRoaXMub3B0aW9ucywgaCA9IHRoaXMub3B0aW9ucy5zZXJpZXNJbmRleCwgZyA9IHRoaXMuY2hhcnQuc2VyaWVzW2hdLCB2ID0gTy5yYW5nZXNbMF0udmFsdWUsIEwgPSBPLnJhbmdlc1tPLnJhbmdlcy5sZW5ndGggLSAxXS52YWx1ZSwgeSA9IE8ubWluU2l6ZSwgQiA9IE8ubWF4U2l6ZTtcbiAgICAgICAgICByZXR1cm4gZy5nZXRSYWRpdXMuY2FsbCh0aGlzLCBMLCB2LCB5LCBCLCBmKTtcbiAgICAgICAgfVxuICAgICAgICByZW5kZXIoKSB7XG4gICAgICAgICAgbGV0IGYgPSB0aGlzLmxlZ2VuZEl0ZW0gfHwge30sIE8gPSB0aGlzLmNoYXJ0LnJlbmRlcmVyLCBoID0gdGhpcy5vcHRpb25zLnpUaHJlc2hvbGQ7XG4gICAgICAgICAgZm9yIChsZXQgZyBvZiAodGhpcy5zeW1ib2xzIHx8ICh0aGlzLnN5bWJvbHMgPSB7IGNvbm5lY3RvcnM6IFtdLCBidWJibGVJdGVtczogW10sIGxhYmVsczogW10gfSksIGYuc3ltYm9sID0gTy5nKFwiYnViYmxlLWxlZ2VuZFwiKSwgZi5sYWJlbCA9IE8uZyhcImJ1YmJsZS1sZWdlbmQtaXRlbVwiKS5jc3ModGhpcy5sZWdlbmQuaXRlbVN0eWxlIHx8IHt9KSwgZi5zeW1ib2wudHJhbnNsYXRlWCA9IDAsIGYuc3ltYm9sLnRyYW5zbGF0ZVkgPSAwLCBmLnN5bWJvbC5hZGQoZi5sYWJlbCksIGYubGFiZWwuYWRkKGYuZ3JvdXApLCB0aGlzLnJhbmdlcykpXG4gICAgICAgICAgICBnLnZhbHVlID49IGggJiYgdGhpcy5yZW5kZXJSYW5nZShnKTtcbiAgICAgICAgICB0aGlzLmhpZGVPdmVybGFwcGluZ0xhYmVscygpO1xuICAgICAgICB9XG4gICAgICAgIHJlbmRlclJhbmdlKGYpIHtcbiAgICAgICAgICBsZXQgTyA9IHRoaXMucmFuZ2VzWzBdLCBoID0gdGhpcy5sZWdlbmQsIGcgPSB0aGlzLm9wdGlvbnMsIHYgPSBnLmxhYmVscywgTCA9IHRoaXMuY2hhcnQsIHkgPSBMLnNlcmllc1tnLnNlcmllc0luZGV4XSwgQiA9IEwucmVuZGVyZXIsIFggPSB0aGlzLnN5bWJvbHMsIEYgPSBYLmxhYmVscywgVCA9IGYuY2VudGVyLCB3ID0gTWF0aC5hYnMoZi5yYWRpdXMpLCBIID0gZy5jb25uZWN0b3JEaXN0YW5jZSB8fCAwLCBDID0gdi5hbGlnbiwgcSA9IGgub3B0aW9ucy5ydGwsIG0gPSBnLmJvcmRlcldpZHRoLCBrID0gZy5jb25uZWN0b3JXaWR0aCwgeCA9IE8ucmFkaXVzIHx8IDAsIE4gPSBUIC0gdyAtIG0gLyAyICsgayAvIDIsIFYgPSAoTiAlIDEgPyAxIDogMC41KSAtIChrICUgMiA/IDAgOiAwLjUpLCBSID0gQi5zdHlsZWRNb2RlLCBJID0gcSB8fCBDID09PSBcImxlZnRcIiA/IC1IIDogSDtcbiAgICAgICAgICBDID09PSBcImNlbnRlclwiICYmIChJID0gMCwgZy5jb25uZWN0b3JEaXN0YW5jZSA9IDAsIGYubGFiZWxBdHRyaWJzLmFsaWduID0gXCJjZW50ZXJcIiksIFguYnViYmxlSXRlbXMucHVzaChCLmNpcmNsZSh4LCBUICsgViwgdykuYXR0cihSID8ge30gOiBmLmJ1YmJsZUF0dHJpYnMpLmFkZENsYXNzKChSID8gXCJoaWdoY2hhcnRzLWNvbG9yLVwiICsgeS5jb2xvckluZGV4ICsgXCIgXCIgOiBcIlwiKSArIFwiaGlnaGNoYXJ0cy1idWJibGUtbGVnZW5kLXN5bWJvbCBcIiArIChnLmNsYXNzTmFtZSB8fCBcIlwiKSkuYWRkKHRoaXMubGVnZW5kSXRlbS5zeW1ib2wpKSwgWC5jb25uZWN0b3JzLnB1c2goQi5wYXRoKEIuY3Jpc3BMaW5lKFtbXCJNXCIsIHgsIE5dLCBbXCJMXCIsIHggKyBJLCBOXV0sIGcuY29ubmVjdG9yV2lkdGgpKS5hdHRyKFIgPyB7fSA6IGYuY29ubmVjdG9yQXR0cmlicykuYWRkQ2xhc3MoKFIgPyBcImhpZ2hjaGFydHMtY29sb3ItXCIgKyB0aGlzLm9wdGlvbnMuc2VyaWVzSW5kZXggKyBcIiBcIiA6IFwiXCIpICsgXCJoaWdoY2hhcnRzLWJ1YmJsZS1sZWdlbmQtY29ubmVjdG9ycyBcIiArIChnLmNvbm5lY3RvckNsYXNzTmFtZSB8fCBcIlwiKSkuYWRkKHRoaXMubGVnZW5kSXRlbS5zeW1ib2wpKTtcbiAgICAgICAgICBsZXQgaiA9IEIudGV4dCh0aGlzLmZvcm1hdExhYmVsKGYpKS5hdHRyKFIgPyB7fSA6IGYubGFiZWxBdHRyaWJzKS5jc3MoUiA/IHt9IDogdi5zdHlsZSkuYWRkQ2xhc3MoXCJoaWdoY2hhcnRzLWJ1YmJsZS1sZWdlbmQtbGFiZWxzIFwiICsgKGcubGFiZWxzLmNsYXNzTmFtZSB8fCBcIlwiKSkuYWRkKHRoaXMubGVnZW5kSXRlbS5zeW1ib2wpLCBVID0geyB4OiB4ICsgSSArIGcubGFiZWxzLngsIHk6IE4gKyBnLmxhYmVscy55ICsgMC40ICogai5nZXRCQm94KCkuaGVpZ2h0IH07XG4gICAgICAgICAgai5hdHRyKFUpLCBGLnB1c2goaiksIGoucGxhY2VkID0gITAsIGouYWxpZ25BdHRyID0gVTtcbiAgICAgICAgfVxuICAgICAgICBnZXRNYXhMYWJlbFNpemUoKSB7XG4gICAgICAgICAgbGV0IGYsIE87XG4gICAgICAgICAgcmV0dXJuIHRoaXMuc3ltYm9scy5sYWJlbHMuZm9yRWFjaChmdW5jdGlvbihoKSB7XG4gICAgICAgICAgICBPID0gaC5nZXRCQm94KCEwKSwgZiA9IGYgPyBPLndpZHRoID4gZi53aWR0aCA/IE8gOiBmIDogTztcbiAgICAgICAgICB9KSwgZiB8fCB7fTtcbiAgICAgICAgfVxuICAgICAgICBmb3JtYXRMYWJlbChmKSB7XG4gICAgICAgICAgbGV0IE8gPSB0aGlzLm9wdGlvbnMsIGggPSBPLmxhYmVscy5mb3JtYXR0ZXIsIGcgPSBPLmxhYmVscy5mb3JtYXQsIHsgbnVtYmVyRm9ybWF0dGVyOiB2IH0gPSB0aGlzLmNoYXJ0O1xuICAgICAgICAgIHJldHVybiBnID8gaS5mb3JtYXQoZywgZikgOiBoID8gaC5jYWxsKGYpIDogdihmLnZhbHVlLCAxKTtcbiAgICAgICAgfVxuICAgICAgICBoaWRlT3ZlcmxhcHBpbmdMYWJlbHMoKSB7XG4gICAgICAgICAgbGV0IGYgPSB0aGlzLmNoYXJ0LCBPID0gdGhpcy5vcHRpb25zLmxhYmVscy5hbGxvd092ZXJsYXAsIGggPSB0aGlzLnN5bWJvbHM7XG4gICAgICAgICAgIU8gJiYgaCAmJiAoZi5oaWRlT3ZlcmxhcHBpbmdMYWJlbHMoaC5sYWJlbHMpLCBoLmxhYmVscy5mb3JFYWNoKGZ1bmN0aW9uKGcsIHYpIHtcbiAgICAgICAgICAgIGcubmV3T3BhY2l0eSA/IGcubmV3T3BhY2l0eSAhPT0gZy5vbGRPcGFjaXR5ICYmIGguY29ubmVjdG9yc1t2XS5zaG93KCkgOiBoLmNvbm5lY3RvcnNbdl0uaGlkZSgpO1xuICAgICAgICAgIH0pKTtcbiAgICAgICAgfVxuICAgICAgICBnZXRSYW5nZXMoKSB7XG4gICAgICAgICAgbGV0IGYgPSB0aGlzLmxlZ2VuZC5idWJibGVMZWdlbmQsIE8gPSBmLmNoYXJ0LnNlcmllcywgaCA9IGYub3B0aW9ucy5yYW5nZXMsIGcsIHYsIEwgPSBOdW1iZXIuTUFYX1ZBTFVFLCB5ID0gLU51bWJlci5NQVhfVkFMVUU7XG4gICAgICAgICAgcmV0dXJuIE8uZm9yRWFjaChmdW5jdGlvbihCKSB7XG4gICAgICAgICAgICBCLmlzQnViYmxlICYmICFCLmlnbm9yZVNlcmllcyAmJiAodiA9IEIuekRhdGEuZmlsdGVyKE0pKS5sZW5ndGggJiYgKEwgPSBBKEIub3B0aW9ucy56TWluLCBNYXRoLm1pbihMLCBNYXRoLm1heChiKHYpLCBCLm9wdGlvbnMuZGlzcGxheU5lZ2F0aXZlID09PSAhMSA/IEIub3B0aW9ucy56VGhyZXNob2xkIDogLU51bWJlci5NQVhfVkFMVUUpKSksIHkgPSBBKEIub3B0aW9ucy56TWF4LCBNYXRoLm1heCh5LCBkKHYpKSkpO1xuICAgICAgICAgIH0pLCBnID0gTCA9PT0geSA/IFt7IHZhbHVlOiB5IH1dIDogW3sgdmFsdWU6IEwgfSwgeyB2YWx1ZTogKEwgKyB5KSAvIDIgfSwgeyB2YWx1ZTogeSwgYXV0b1JhbmdlczogITAgfV0sIGgubGVuZ3RoICYmIGhbMF0ucmFkaXVzICYmIGcucmV2ZXJzZSgpLCBnLmZvckVhY2goZnVuY3Rpb24oQiwgWCkge1xuICAgICAgICAgICAgaCAmJiBoW1hdICYmIChnW1hdID0gdShoW1hdLCBCKSk7XG4gICAgICAgICAgfSksIGc7XG4gICAgICAgIH1cbiAgICAgICAgcHJlZGljdEJ1YmJsZVNpemVzKCkge1xuICAgICAgICAgIGxldCBmID0gdGhpcy5jaGFydCwgTyA9IGYubGVnZW5kLm9wdGlvbnMsIGggPSBPLmZsb2F0aW5nLCBnID0gTy5sYXlvdXQgPT09IFwiaG9yaXpvbnRhbFwiLCB2ID0gZyA/IGYubGVnZW5kLmxhc3RMaW5lSGVpZ2h0IDogMCwgTCA9IGYucGxvdFNpemVYLCB5ID0gZi5wbG90U2l6ZVksIEIgPSBmLnNlcmllc1t0aGlzLm9wdGlvbnMuc2VyaWVzSW5kZXhdLCBYID0gQi5nZXRQeEV4dHJlbWVzKCksIEYgPSBNYXRoLmNlaWwoWC5taW5QeFNpemUpLCBUID0gTWF0aC5jZWlsKFgubWF4UHhTaXplKSwgdyA9IE1hdGgubWluKHksIEwpLCBILCBDID0gQi5vcHRpb25zLm1heFNpemU7XG4gICAgICAgICAgcmV0dXJuIGggfHwgIS8lJC8udGVzdChDKSA/IEggPSBUIDogKEggPSAodyArIHYpICogKEMgPSBwYXJzZUZsb2F0KEMpKSAvIDEwMCAvIChDIC8gMTAwICsgMSksIChnICYmIHkgLSBIID49IEwgfHwgIWcgJiYgTCAtIEggPj0geSkgJiYgKEggPSBUKSksIFtGLCBNYXRoLmNlaWwoSCldO1xuICAgICAgICB9XG4gICAgICAgIHVwZGF0ZVJhbmdlcyhmLCBPKSB7XG4gICAgICAgICAgbGV0IGggPSB0aGlzLmxlZ2VuZC5vcHRpb25zLmJ1YmJsZUxlZ2VuZDtcbiAgICAgICAgICBoLm1pblNpemUgPSBmLCBoLm1heFNpemUgPSBPLCBoLnJhbmdlcyA9IHRoaXMuZ2V0UmFuZ2VzKCk7XG4gICAgICAgIH1cbiAgICAgICAgY29ycmVjdFNpemVzKCkge1xuICAgICAgICAgIGxldCBmID0gdGhpcy5sZWdlbmQsIE8gPSB0aGlzLmNoYXJ0LnNlcmllc1t0aGlzLm9wdGlvbnMuc2VyaWVzSW5kZXhdLmdldFB4RXh0cmVtZXMoKTtcbiAgICAgICAgICBNYXRoLmFicyhNYXRoLmNlaWwoTy5tYXhQeFNpemUpIC0gdGhpcy5vcHRpb25zLm1heFNpemUpID4gMSAmJiAodGhpcy51cGRhdGVSYW5nZXModGhpcy5vcHRpb25zLm1pblNpemUsIE8ubWF4UHhTaXplKSwgZi5yZW5kZXIoKSk7XG4gICAgICAgIH1cbiAgICAgIH07XG4gICAgfSksIG4obywgXCJTZXJpZXMvQnViYmxlL0J1YmJsZUxlZ2VuZENvbXBvc2l0aW9uLmpzXCIsIFtvW1wiU2VyaWVzL0J1YmJsZS9CdWJibGVMZWdlbmREZWZhdWx0cy5qc1wiXSwgb1tcIlNlcmllcy9CdWJibGUvQnViYmxlTGVnZW5kSXRlbS5qc1wiXSwgb1tcIkNvcmUvRGVmYXVsdHMuanNcIl0sIG9bXCJDb3JlL0dsb2JhbHMuanNcIl0sIG9bXCJDb3JlL1V0aWxpdGllcy5qc1wiXV0sIGZ1bmN0aW9uKHIsIGksIGEsIHMsIGwpIHtcbiAgICAgIGxldCB7IHNldE9wdGlvbnM6IHAgfSA9IGEsIHsgY29tcG9zZWQ6IGQgfSA9IHMsIHsgYWRkRXZlbnQ6IGIsIG9iamVjdEVhY2g6IE0sIHB1c2hVbmlxdWU6IHUsIHdyYXA6IEEgfSA9IGw7XG4gICAgICBmdW5jdGlvbiB6KEwsIHksIEIpIHtcbiAgICAgICAgbGV0IFgsIEYsIFQsIHcgPSB0aGlzLmxlZ2VuZCwgSCA9IGYodGhpcykgPj0gMDtcbiAgICAgICAgdyAmJiB3Lm9wdGlvbnMuZW5hYmxlZCAmJiB3LmJ1YmJsZUxlZ2VuZCAmJiB3Lm9wdGlvbnMuYnViYmxlTGVnZW5kLmF1dG9SYW5nZXMgJiYgSCA/IChYID0gdy5idWJibGVMZWdlbmQub3B0aW9ucywgRiA9IHcuYnViYmxlTGVnZW5kLnByZWRpY3RCdWJibGVTaXplcygpLCB3LmJ1YmJsZUxlZ2VuZC51cGRhdGVSYW5nZXMoRlswXSwgRlsxXSksIFgucGxhY2VkIHx8ICh3Lmdyb3VwLnBsYWNlZCA9ICExLCB3LmFsbEl0ZW1zLmZvckVhY2goKEMpID0+IHtcbiAgICAgICAgICAoVCA9IEMubGVnZW5kSXRlbSB8fCB7fSkuZ3JvdXAgJiYgKFQuZ3JvdXAudHJhbnNsYXRlWSA9IHZvaWQgMCk7XG4gICAgICAgIH0pKSwgdy5yZW5kZXIoKSwgWC5wbGFjZWQgfHwgKHRoaXMuZ2V0TWFyZ2lucygpLCB0aGlzLmF4ZXMuZm9yRWFjaChmdW5jdGlvbihDKSB7XG4gICAgICAgICAgQy52aXNpYmxlICYmIEMucmVuZGVyKCksIFgucGxhY2VkIHx8IChDLnNldFNjYWxlKCksIEMudXBkYXRlTmFtZXMoKSwgTShDLnRpY2tzLCBmdW5jdGlvbihxKSB7XG4gICAgICAgICAgICBxLmlzTmV3ID0gITAsIHEuaXNOZXdMYWJlbCA9ICEwO1xuICAgICAgICAgIH0pKTtcbiAgICAgICAgfSksIHRoaXMuZ2V0TWFyZ2lucygpKSwgWC5wbGFjZWQgPSAhMCwgTC5jYWxsKHRoaXMsIHksIEIpLCB3LmJ1YmJsZUxlZ2VuZC5jb3JyZWN0U2l6ZXMoKSwgdih3LCBPKHcpKSkgOiAoTC5jYWxsKHRoaXMsIHksIEIpLCB3ICYmIHcub3B0aW9ucy5lbmFibGVkICYmIHcuYnViYmxlTGVnZW5kICYmICh3LnJlbmRlcigpLCB2KHcsIE8odykpKSk7XG4gICAgICB9XG4gICAgICBmdW5jdGlvbiBmKEwpIHtcbiAgICAgICAgbGV0IHkgPSBMLnNlcmllcywgQiA9IDA7XG4gICAgICAgIGZvciAoOyBCIDwgeS5sZW5ndGg7ICkge1xuICAgICAgICAgIGlmICh5W0JdICYmIHlbQl0uaXNCdWJibGUgJiYgeVtCXS52aXNpYmxlICYmIHlbQl0uekRhdGEubGVuZ3RoKVxuICAgICAgICAgICAgcmV0dXJuIEI7XG4gICAgICAgICAgQisrO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiAtMTtcbiAgICAgIH1cbiAgICAgIGZ1bmN0aW9uIE8oTCkge1xuICAgICAgICBsZXQgeSA9IEwuYWxsSXRlbXMsIEIgPSBbXSwgWCA9IHkubGVuZ3RoLCBGLCBULCB3LCBIID0gMCwgQyA9IDA7XG4gICAgICAgIGZvciAoSCA9IDA7IEggPCBYOyBIKyspXG4gICAgICAgICAgaWYgKFQgPSB5W0hdLmxlZ2VuZEl0ZW0gfHwge30sIHcgPSAoeVtIICsgMV0gfHwge30pLmxlZ2VuZEl0ZW0gfHwge30sIFQubGFiZWxIZWlnaHQgJiYgKHlbSF0uaXRlbUhlaWdodCA9IFQubGFiZWxIZWlnaHQpLCB5W0hdID09PSB5W1ggLSAxXSB8fCBULnkgIT09IHcueSkge1xuICAgICAgICAgICAgZm9yIChCLnB1c2goeyBoZWlnaHQ6IDAgfSksIEYgPSBCW0IubGVuZ3RoIC0gMV07IEMgPD0gSDsgQysrKVxuICAgICAgICAgICAgICB5W0NdLml0ZW1IZWlnaHQgPiBGLmhlaWdodCAmJiAoRi5oZWlnaHQgPSB5W0NdLml0ZW1IZWlnaHQpO1xuICAgICAgICAgICAgRi5zdGVwID0gSDtcbiAgICAgICAgICB9XG4gICAgICAgIHJldHVybiBCO1xuICAgICAgfVxuICAgICAgZnVuY3Rpb24gaChMKSB7XG4gICAgICAgIGxldCB5ID0gdGhpcy5idWJibGVMZWdlbmQsIEIgPSB0aGlzLm9wdGlvbnMsIFggPSBCLmJ1YmJsZUxlZ2VuZCwgRiA9IGYodGhpcy5jaGFydCk7XG4gICAgICAgIHkgJiYgeS5yYW5nZXMgJiYgeS5yYW5nZXMubGVuZ3RoICYmIChYLnJhbmdlcy5sZW5ndGggJiYgKFguYXV0b1JhbmdlcyA9ICEhWC5yYW5nZXNbMF0uYXV0b1JhbmdlcyksIHRoaXMuZGVzdHJveUl0ZW0oeSkpLCBGID49IDAgJiYgQi5lbmFibGVkICYmIFguZW5hYmxlZCAmJiAoWC5zZXJpZXNJbmRleCA9IEYsIHRoaXMuYnViYmxlTGVnZW5kID0gbmV3IGkoWCwgdGhpcyksIHRoaXMuYnViYmxlTGVnZW5kLmFkZFRvTGVnZW5kKEwuYWxsSXRlbXMpKTtcbiAgICAgIH1cbiAgICAgIGZ1bmN0aW9uIGcoTCkge1xuICAgICAgICBsZXQgeTtcbiAgICAgICAgaWYgKEwuZGVmYXVsdFByZXZlbnRlZClcbiAgICAgICAgICByZXR1cm4gITE7XG4gICAgICAgIGxldCBCID0gTC5sZWdlbmRJdGVtLCBYID0gdGhpcy5jaGFydCwgRiA9IEIudmlzaWJsZTtcbiAgICAgICAgdGhpcyAmJiB0aGlzLmJ1YmJsZUxlZ2VuZCAmJiAoQi52aXNpYmxlID0gIUYsIEIuaWdub3JlU2VyaWVzID0gRiwgeSA9IGYoWCkgPj0gMCwgdGhpcy5idWJibGVMZWdlbmQudmlzaWJsZSAhPT0geSAmJiAodGhpcy51cGRhdGUoeyBidWJibGVMZWdlbmQ6IHsgZW5hYmxlZDogeSB9IH0pLCB0aGlzLmJ1YmJsZUxlZ2VuZC52aXNpYmxlID0geSksIEIudmlzaWJsZSA9IEYpO1xuICAgICAgfVxuICAgICAgZnVuY3Rpb24gdihMLCB5KSB7XG4gICAgICAgIGxldCBCID0gTC5hbGxJdGVtcywgWCA9IEwub3B0aW9ucy5ydGwsIEYsIFQsIHcsIEgsIEMgPSAwO1xuICAgICAgICBCLmZvckVhY2goKHEsIG0pID0+IHtcbiAgICAgICAgICAoSCA9IHEubGVnZW5kSXRlbSB8fCB7fSkuZ3JvdXAgJiYgKEYgPSBILmdyb3VwLnRyYW5zbGF0ZVggfHwgMCwgVCA9IEgueSB8fCAwLCAoKHcgPSBxLm1vdmVtZW50WCkgfHwgWCAmJiBxLnJhbmdlcykgJiYgKHcgPSBYID8gRiAtIHEub3B0aW9ucy5tYXhTaXplIC8gMiA6IEYgKyB3LCBILmdyb3VwLmF0dHIoeyB0cmFuc2xhdGVYOiB3IH0pKSwgbSA+IHlbQ10uc3RlcCAmJiBDKyssIEguZ3JvdXAuYXR0cih7IHRyYW5zbGF0ZVk6IE1hdGgucm91bmQoVCArIHlbQ10uaGVpZ2h0IC8gMikgfSksIEgueSA9IFQgKyB5W0NdLmhlaWdodCAvIDIpO1xuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICAgIHJldHVybiB7IGNvbXBvc2U6IGZ1bmN0aW9uKEwsIHkpIHtcbiAgICAgICAgdShkLCBcIlNlcmllcy5CdWJibGVMZWdlbmRcIikgJiYgKHAoeyBsZWdlbmQ6IHsgYnViYmxlTGVnZW5kOiByIH0gfSksIEEoTC5wcm90b3R5cGUsIFwiZHJhd0NoYXJ0Qm94XCIsIHopLCBiKHksIFwiYWZ0ZXJHZXRBbGxJdGVtc1wiLCBoKSwgYih5LCBcIml0ZW1DbGlja1wiLCBnKSk7XG4gICAgICB9IH07XG4gICAgfSksIG4obywgXCJTZXJpZXMvQnViYmxlL0J1YmJsZVBvaW50LmpzXCIsIFtvW1wiQ29yZS9TZXJpZXMvUG9pbnQuanNcIl0sIG9bXCJDb3JlL1Nlcmllcy9TZXJpZXNSZWdpc3RyeS5qc1wiXSwgb1tcIkNvcmUvVXRpbGl0aWVzLmpzXCJdXSwgZnVuY3Rpb24ociwgaSwgYSkge1xuICAgICAgbGV0IHsgc2VyaWVzVHlwZXM6IHsgc2NhdHRlcjogeyBwcm90b3R5cGU6IHsgcG9pbnRDbGFzczogcyB9IH0gfSB9ID0gaSwgeyBleHRlbmQ6IGwgfSA9IGE7XG4gICAgICBjbGFzcyBwIGV4dGVuZHMgcyB7XG4gICAgICAgIGhhbG9QYXRoKGIpIHtcbiAgICAgICAgICBsZXQgTSA9IChiICYmIHRoaXMubWFya2VyICYmIHRoaXMubWFya2VyLnJhZGl1cyB8fCAwKSArIGI7XG4gICAgICAgICAgaWYgKHRoaXMuc2VyaWVzLmNoYXJ0LmludmVydGVkKSB7XG4gICAgICAgICAgICBsZXQgdSA9IHRoaXMucG9zKCkgfHwgWzAsIDBdLCB7IHhBeGlzOiBBLCB5QXhpczogeiwgY2hhcnQ6IGYgfSA9IHRoaXMuc2VyaWVzO1xuICAgICAgICAgICAgcmV0dXJuIGYucmVuZGVyZXIuc3ltYm9scy5jaXJjbGUoQS5sZW4gLSB1WzFdIC0gTSwgei5sZW4gLSB1WzBdIC0gTSwgMiAqIE0sIDIgKiBNKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIHIucHJvdG90eXBlLmhhbG9QYXRoLmNhbGwodGhpcywgTSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiBsKHAucHJvdG90eXBlLCB7IHR0QmVsb3c6ICExIH0pLCBwO1xuICAgIH0pLCBuKG8sIFwiU2VyaWVzL0J1YmJsZS9CdWJibGVTZXJpZXMuanNcIiwgW29bXCJTZXJpZXMvQnViYmxlL0J1YmJsZUxlZ2VuZENvbXBvc2l0aW9uLmpzXCJdLCBvW1wiU2VyaWVzL0J1YmJsZS9CdWJibGVQb2ludC5qc1wiXSwgb1tcIkNvcmUvQ29sb3IvQ29sb3IuanNcIl0sIG9bXCJDb3JlL0dsb2JhbHMuanNcIl0sIG9bXCJDb3JlL1Nlcmllcy9TZXJpZXNSZWdpc3RyeS5qc1wiXSwgb1tcIkNvcmUvVXRpbGl0aWVzLmpzXCJdXSwgZnVuY3Rpb24ociwgaSwgYSwgcywgbCwgcCkge1xuICAgICAgbGV0IHsgcGFyc2U6IGQgfSA9IGEsIHsgY29tcG9zZWQ6IGIsIG5vb3A6IE0gfSA9IHMsIHsgc2VyaWVzOiB1LCBzZXJpZXNUeXBlczogeyBjb2x1bW46IHsgcHJvdG90eXBlOiBBIH0sIHNjYXR0ZXI6IHogfSB9ID0gbCwgeyBhZGRFdmVudDogZiwgYXJyYXlNYXg6IE8sIGFycmF5TWluOiBoLCBjbGFtcDogZywgZXh0ZW5kOiB2LCBpc051bWJlcjogTCwgbWVyZ2U6IHksIHBpY2s6IEIsIHB1c2hVbmlxdWU6IFggfSA9IHA7XG4gICAgICBmdW5jdGlvbiBGKCkge1xuICAgICAgICBsZXQgdyA9IHRoaXMubGVuLCB7IGNvbGw6IEgsIGlzWEF4aXM6IEMsIG1pbjogcSB9ID0gdGhpcywgbSA9IEMgPyBcInhEYXRhXCIgOiBcInlEYXRhXCIsIGsgPSAodGhpcy5tYXggfHwgMCkgLSAocSB8fCAwKSwgeCA9IDAsIE4gPSB3LCBWID0gdyAvIGssIFI7XG4gICAgICAgIChIID09PSBcInhBeGlzXCIgfHwgSCA9PT0gXCJ5QXhpc1wiKSAmJiAodGhpcy5zZXJpZXMuZm9yRWFjaCgoSSkgPT4ge1xuICAgICAgICAgIGlmIChJLmJ1YmJsZVBhZGRpbmcgJiYgSS5yZXNlcnZlU3BhY2UoKSkge1xuICAgICAgICAgICAgdGhpcy5hbGxvd1pvb21PdXRzaWRlID0gITAsIFIgPSAhMDtcbiAgICAgICAgICAgIGxldCBqID0gSVttXTtcbiAgICAgICAgICAgIGlmIChDICYmICgoSS5vblBvaW50IHx8IEkpLmdldFJhZGlpKDAsIDAsIEkpLCBJLm9uUG9pbnQgJiYgKEkucmFkaWkgPSBJLm9uUG9pbnQucmFkaWkpKSwgayA+IDApIHtcbiAgICAgICAgICAgICAgbGV0IFUgPSBqLmxlbmd0aDtcbiAgICAgICAgICAgICAgZm9yICg7IFUtLTsgKVxuICAgICAgICAgICAgICAgIGlmIChMKGpbVV0pICYmIHRoaXMuZGF0YU1pbiA8PSBqW1VdICYmIGpbVV0gPD0gdGhpcy5tYXgpIHtcbiAgICAgICAgICAgICAgICAgIGxldCBfID0gSS5yYWRpaSAmJiBJLnJhZGlpW1VdIHx8IDA7XG4gICAgICAgICAgICAgICAgICB4ID0gTWF0aC5taW4oKGpbVV0gLSBxKSAqIFYgLSBfLCB4KSwgTiA9IE1hdGgubWF4KChqW1VdIC0gcSkgKiBWICsgXywgTik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfSksIFIgJiYgayA+IDAgJiYgIXRoaXMubG9nYXJpdGhtaWMgJiYgKE4gLT0gdywgViAqPSAodyArIE1hdGgubWF4KDAsIHgpIC0gTWF0aC5taW4oTiwgdykpIC8gdywgW1tcIm1pblwiLCBcInVzZXJNaW5cIiwgeF0sIFtcIm1heFwiLCBcInVzZXJNYXhcIiwgTl1dLmZvckVhY2goKEkpID0+IHtcbiAgICAgICAgICBCKHRoaXMub3B0aW9uc1tJWzBdXSwgdGhpc1tJWzFdXSkgPT09IHZvaWQgMCAmJiAodGhpc1tJWzBdXSArPSBJWzJdIC8gVik7XG4gICAgICAgIH0pKSk7XG4gICAgICB9XG4gICAgICBjbGFzcyBUIGV4dGVuZHMgeiB7XG4gICAgICAgIHN0YXRpYyBjb21wb3NlKEgsIEMsIHEpIHtcbiAgICAgICAgICByLmNvbXBvc2UoQywgcSksIFgoYiwgXCJTZXJpZXMuQnViYmxlXCIpICYmIGYoSCwgXCJmb3VuZEV4dHJlbWVzXCIsIEYpO1xuICAgICAgICB9XG4gICAgICAgIGFuaW1hdGUoSCkge1xuICAgICAgICAgICFIICYmIHRoaXMucG9pbnRzLmxlbmd0aCA8IHRoaXMub3B0aW9ucy5hbmltYXRpb25MaW1pdCAmJiB0aGlzLnBvaW50cy5mb3JFYWNoKGZ1bmN0aW9uKEMpIHtcbiAgICAgICAgICAgIGxldCB7IGdyYXBoaWM6IHEsIHBsb3RYOiBtID0gMCwgcGxvdFk6IGsgPSAwIH0gPSBDO1xuICAgICAgICAgICAgcSAmJiBxLndpZHRoICYmICh0aGlzLmhhc1JlbmRlcmVkIHx8IHEuYXR0cih7IHg6IG0sIHk6IGssIHdpZHRoOiAxLCBoZWlnaHQ6IDEgfSksIHEuYW5pbWF0ZSh0aGlzLm1hcmtlckF0dHJpYnMoQyksIHRoaXMub3B0aW9ucy5hbmltYXRpb24pKTtcbiAgICAgICAgICB9LCB0aGlzKTtcbiAgICAgICAgfVxuICAgICAgICBnZXRSYWRpaSgpIHtcbiAgICAgICAgICBsZXQgSCA9IHRoaXMuekRhdGEsIEMgPSB0aGlzLnlEYXRhLCBxID0gW10sIG0sIGssIHgsIE4gPSB0aGlzLmNoYXJ0LmJ1YmJsZVpFeHRyZW1lcywgeyBtaW5QeFNpemU6IFYsIG1heFB4U2l6ZTogUiB9ID0gdGhpcy5nZXRQeEV4dHJlbWVzKCk7XG4gICAgICAgICAgaWYgKCFOKSB7XG4gICAgICAgICAgICBsZXQgSSwgaiA9IE51bWJlci5NQVhfVkFMVUUsIFUgPSAtTnVtYmVyLk1BWF9WQUxVRTtcbiAgICAgICAgICAgIHRoaXMuY2hhcnQuc2VyaWVzLmZvckVhY2goKF8pID0+IHtcbiAgICAgICAgICAgICAgaWYgKF8uYnViYmxlUGFkZGluZyAmJiBfLnJlc2VydmVTcGFjZSgpKSB7XG4gICAgICAgICAgICAgICAgbGV0IHIxID0gKF8ub25Qb2ludCB8fCBfKS5nZXRaRXh0cmVtZXMoKTtcbiAgICAgICAgICAgICAgICByMSAmJiAoaiA9IE1hdGgubWluKEIoaiwgcjEuek1pbiksIHIxLnpNaW4pLCBVID0gTWF0aC5tYXgoQihVLCByMS56TWF4KSwgcjEuek1heCksIEkgPSAhMCk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pLCBJID8gKE4gPSB7IHpNaW46IGosIHpNYXg6IFUgfSwgdGhpcy5jaGFydC5idWJibGVaRXh0cmVtZXMgPSBOKSA6IE4gPSB7IHpNaW46IDAsIHpNYXg6IDAgfTtcbiAgICAgICAgICB9XG4gICAgICAgICAgZm9yIChrID0gMCwgbSA9IEgubGVuZ3RoOyBrIDwgbTsgaysrKVxuICAgICAgICAgICAgeCA9IEhba10sIHEucHVzaCh0aGlzLmdldFJhZGl1cyhOLnpNaW4sIE4uek1heCwgViwgUiwgeCwgQyAmJiBDW2tdKSk7XG4gICAgICAgICAgdGhpcy5yYWRpaSA9IHE7XG4gICAgICAgIH1cbiAgICAgICAgZ2V0UmFkaXVzKEgsIEMsIHEsIG0sIGssIHgpIHtcbiAgICAgICAgICBsZXQgTiA9IHRoaXMub3B0aW9ucywgViA9IE4uc2l6ZUJ5ICE9PSBcIndpZHRoXCIsIFIgPSBOLnpUaHJlc2hvbGQsIEkgPSBDIC0gSCwgaiA9IDAuNTtcbiAgICAgICAgICBpZiAoeCA9PT0gbnVsbCB8fCBrID09PSBudWxsKVxuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgICAgaWYgKEwoaykpIHtcbiAgICAgICAgICAgIGlmIChOLnNpemVCeUFic29sdXRlVmFsdWUgJiYgKGsgPSBNYXRoLmFicyhrIC0gUiksIEMgPSBJID0gTWF0aC5tYXgoQyAtIFIsIE1hdGguYWJzKEggLSBSKSksIEggPSAwKSwgayA8IEgpXG4gICAgICAgICAgICAgIHJldHVybiBxIC8gMiAtIDE7XG4gICAgICAgICAgICBJID4gMCAmJiAoaiA9IChrIC0gSCkgLyBJKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIFYgJiYgaiA+PSAwICYmIChqID0gTWF0aC5zcXJ0KGopKSwgTWF0aC5jZWlsKHEgKyBqICogKG0gLSBxKSkgLyAyO1xuICAgICAgICB9XG4gICAgICAgIGhhc0RhdGEoKSB7XG4gICAgICAgICAgcmV0dXJuICEhdGhpcy5wcm9jZXNzZWRYRGF0YS5sZW5ndGg7XG4gICAgICAgIH1cbiAgICAgICAgbWFya2VyQXR0cmlicyhILCBDKSB7XG4gICAgICAgICAgbGV0IHEgPSBzdXBlci5tYXJrZXJBdHRyaWJzKEgsIEMpLCB7IGhlaWdodDogbSA9IDAsIHdpZHRoOiBrID0gMCB9ID0gcTtcbiAgICAgICAgICByZXR1cm4gdGhpcy5jaGFydC5pbnZlcnRlZCA/IHYocSwgeyB4OiAoSC5wbG90WCB8fCAwKSAtIGsgLyAyLCB5OiAoSC5wbG90WSB8fCAwKSAtIG0gLyAyIH0pIDogcTtcbiAgICAgICAgfVxuICAgICAgICBwb2ludEF0dHJpYnMoSCwgQykge1xuICAgICAgICAgIGxldCBxID0gdGhpcy5vcHRpb25zLm1hcmtlci5maWxsT3BhY2l0eSwgbSA9IHUucHJvdG90eXBlLnBvaW50QXR0cmlicy5jYWxsKHRoaXMsIEgsIEMpO1xuICAgICAgICAgIHJldHVybiBxICE9PSAxICYmIChtLmZpbGwgPSBkKG0uZmlsbCkuc2V0T3BhY2l0eShxKS5nZXQoXCJyZ2JhXCIpKSwgbTtcbiAgICAgICAgfVxuICAgICAgICB0cmFuc2xhdGUoKSB7XG4gICAgICAgICAgc3VwZXIudHJhbnNsYXRlLmNhbGwodGhpcyksIHRoaXMuZ2V0UmFkaWkoKSwgdGhpcy50cmFuc2xhdGVCdWJibGUoKTtcbiAgICAgICAgfVxuICAgICAgICB0cmFuc2xhdGVCdWJibGUoKSB7XG4gICAgICAgICAgbGV0IHsgZGF0YTogSCwgb3B0aW9uczogQywgcmFkaWk6IHEgfSA9IHRoaXMsIHsgbWluUHhTaXplOiBtIH0gPSB0aGlzLmdldFB4RXh0cmVtZXMoKSwgayA9IEgubGVuZ3RoO1xuICAgICAgICAgIGZvciAoOyBrLS07ICkge1xuICAgICAgICAgICAgbGV0IHggPSBIW2tdLCBOID0gcSA/IHFba10gOiAwO1xuICAgICAgICAgICAgdGhpcy56b25lQXhpcyA9PT0gXCJ6XCIgJiYgKHgubmVnYXRpdmUgPSAoeC56IHx8IDApIDwgKEMuelRocmVzaG9sZCB8fCAwKSksIEwoTikgJiYgTiA+PSBtIC8gMiA/ICh4Lm1hcmtlciA9IHYoeC5tYXJrZXIsIHsgcmFkaXVzOiBOLCB3aWR0aDogMiAqIE4sIGhlaWdodDogMiAqIE4gfSksIHguZGxCb3ggPSB7IHg6IHgucGxvdFggLSBOLCB5OiB4LnBsb3RZIC0gTiwgd2lkdGg6IDIgKiBOLCBoZWlnaHQ6IDIgKiBOIH0pIDogKHguc2hhcGVBcmdzID0geC5wbG90WSA9IHguZGxCb3ggPSB2b2lkIDAsIHguaXNJbnNpZGUgPSAhMSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGdldFB4RXh0cmVtZXMoKSB7XG4gICAgICAgICAgbGV0IEggPSBNYXRoLm1pbih0aGlzLmNoYXJ0LnBsb3RXaWR0aCwgdGhpcy5jaGFydC5wbG90SGVpZ2h0KSwgQyA9IChrKSA9PiB7XG4gICAgICAgICAgICBsZXQgeDtcbiAgICAgICAgICAgIHJldHVybiB0eXBlb2YgayA9PSBcInN0cmluZ1wiICYmICh4ID0gLyUkLy50ZXN0KGspLCBrID0gcGFyc2VJbnQoaywgMTApKSwgeCA/IEggKiBrIC8gMTAwIDogaztcbiAgICAgICAgICB9LCBxID0gQyhCKHRoaXMub3B0aW9ucy5taW5TaXplLCA4KSksIG0gPSBNYXRoLm1heChDKEIodGhpcy5vcHRpb25zLm1heFNpemUsIFwiMjAlXCIpKSwgcSk7XG4gICAgICAgICAgcmV0dXJuIHsgbWluUHhTaXplOiBxLCBtYXhQeFNpemU6IG0gfTtcbiAgICAgICAgfVxuICAgICAgICBnZXRaRXh0cmVtZXMoKSB7XG4gICAgICAgICAgbGV0IEggPSB0aGlzLm9wdGlvbnMsIEMgPSAodGhpcy56RGF0YSB8fCBbXSkuZmlsdGVyKEwpO1xuICAgICAgICAgIGlmIChDLmxlbmd0aCkge1xuICAgICAgICAgICAgbGV0IHEgPSBCKEguek1pbiwgZyhoKEMpLCBILmRpc3BsYXlOZWdhdGl2ZSA9PT0gITEgPyBILnpUaHJlc2hvbGQgfHwgMCA6IC1OdW1iZXIuTUFYX1ZBTFVFLCBOdW1iZXIuTUFYX1ZBTFVFKSksIG0gPSBCKEguek1heCwgTyhDKSk7XG4gICAgICAgICAgICBpZiAoTChxKSAmJiBMKG0pKVxuICAgICAgICAgICAgICByZXR1cm4geyB6TWluOiBxLCB6TWF4OiBtIH07XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gVC5kZWZhdWx0T3B0aW9ucyA9IHkoei5kZWZhdWx0T3B0aW9ucywgeyBkYXRhTGFiZWxzOiB7IGZvcm1hdHRlcjogZnVuY3Rpb24oKSB7XG4gICAgICAgIGxldCB7IG51bWJlckZvcm1hdHRlcjogdyB9ID0gdGhpcy5zZXJpZXMuY2hhcnQsIHsgejogSCB9ID0gdGhpcy5wb2ludDtcbiAgICAgICAgcmV0dXJuIEwoSCkgPyB3KEgsIC0xKSA6IFwiXCI7XG4gICAgICB9LCBpbnNpZGU6ICEwLCB2ZXJ0aWNhbEFsaWduOiBcIm1pZGRsZVwiIH0sIGFuaW1hdGlvbkxpbWl0OiAyNTAsIG1hcmtlcjogeyBsaW5lQ29sb3I6IG51bGwsIGxpbmVXaWR0aDogMSwgZmlsbE9wYWNpdHk6IDAuNSwgcmFkaXVzOiBudWxsLCBzdGF0ZXM6IHsgaG92ZXI6IHsgcmFkaXVzUGx1czogMCB9IH0sIHN5bWJvbDogXCJjaXJjbGVcIiB9LCBtaW5TaXplOiA4LCBtYXhTaXplOiBcIjIwJVwiLCBzb2Z0VGhyZXNob2xkOiAhMSwgc3RhdGVzOiB7IGhvdmVyOiB7IGhhbG86IHsgc2l6ZTogNSB9IH0gfSwgdG9vbHRpcDogeyBwb2ludEZvcm1hdDogXCIoe3BvaW50Lnh9LCB7cG9pbnQueX0pLCBTaXplOiB7cG9pbnQuen1cIiB9LCB0dXJib1RocmVzaG9sZDogMCwgelRocmVzaG9sZDogMCwgem9uZUF4aXM6IFwielwiIH0pLCB2KFQucHJvdG90eXBlLCB7IGFsaWduRGF0YUxhYmVsOiBBLmFsaWduRGF0YUxhYmVsLCBhcHBseVpvbmVzOiBNLCBidWJibGVQYWRkaW5nOiAhMCwgaXNCdWJibGU6ICEwLCBwb2ludEFycmF5TWFwOiBbXCJ5XCIsIFwielwiXSwgcG9pbnRDbGFzczogaSwgcGFyYWxsZWxBcnJheXM6IFtcInhcIiwgXCJ5XCIsIFwielwiXSwgdHJhY2tlckdyb3VwczogW1wiZ3JvdXBcIiwgXCJkYXRhTGFiZWxzR3JvdXBcIl0sIHNwZWNpYWxHcm91cDogXCJncm91cFwiLCB6b25lQXhpczogXCJ6XCIgfSksIGYoVCwgXCJ1cGRhdGVkRGF0YVwiLCAodykgPT4ge1xuICAgICAgICBkZWxldGUgdy50YXJnZXQuY2hhcnQuYnViYmxlWkV4dHJlbWVzO1xuICAgICAgfSksIGYoVCwgXCJyZW1vdmVcIiwgKHcpID0+IHtcbiAgICAgICAgZGVsZXRlIHcudGFyZ2V0LmNoYXJ0LmJ1YmJsZVpFeHRyZW1lcztcbiAgICAgIH0pLCBsLnJlZ2lzdGVyU2VyaWVzVHlwZShcImJ1YmJsZVwiLCBUKSwgVDtcbiAgICB9KSwgbihvLCBcIlNlcmllcy9Db2x1bW5SYW5nZS9Db2x1bW5SYW5nZVBvaW50LmpzXCIsIFtvW1wiQ29yZS9TZXJpZXMvU2VyaWVzUmVnaXN0cnkuanNcIl0sIG9bXCJDb3JlL1V0aWxpdGllcy5qc1wiXV0sIGZ1bmN0aW9uKHIsIGkpIHtcbiAgICAgIGxldCB7IHNlcmllc1R5cGVzOiB7IGNvbHVtbjogeyBwcm90b3R5cGU6IHsgcG9pbnRDbGFzczogeyBwcm90b3R5cGU6IGEgfSB9IH0sIGFyZWFyYW5nZTogeyBwcm90b3R5cGU6IHsgcG9pbnRDbGFzczogcyB9IH0gfSB9ID0gciwgeyBleHRlbmQ6IGwsIGlzTnVtYmVyOiBwIH0gPSBpO1xuICAgICAgY2xhc3MgZCBleHRlbmRzIHMge1xuICAgICAgICBpc1ZhbGlkKCkge1xuICAgICAgICAgIHJldHVybiBwKHRoaXMubG93KTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIGwoZC5wcm90b3R5cGUsIHsgc2V0U3RhdGU6IGEuc2V0U3RhdGUgfSksIGQ7XG4gICAgfSksIG4obywgXCJTZXJpZXMvQ29sdW1uUmFuZ2UvQ29sdW1uUmFuZ2VTZXJpZXMuanNcIiwgW29bXCJTZXJpZXMvQ29sdW1uUmFuZ2UvQ29sdW1uUmFuZ2VQb2ludC5qc1wiXSwgb1tcIkNvcmUvR2xvYmFscy5qc1wiXSwgb1tcIkNvcmUvU2VyaWVzL1Nlcmllc1JlZ2lzdHJ5LmpzXCJdLCBvW1wiQ29yZS9VdGlsaXRpZXMuanNcIl1dLCBmdW5jdGlvbihyLCBpLCBhLCBzKSB7XG4gICAgICBsZXQgeyBub29wOiBsIH0gPSBpLCB7IHNlcmllc1R5cGVzOiB7IGFyZWFyYW5nZTogcCwgY29sdW1uOiBkLCBjb2x1bW46IHsgcHJvdG90eXBlOiBiIH0gfSB9ID0gYSwgeyBhZGRFdmVudDogTSwgY2xhbXA6IHUsIGV4dGVuZDogQSwgaXNOdW1iZXI6IHosIG1lcmdlOiBmLCBwaWNrOiBPIH0gPSBzO1xuICAgICAgY2xhc3MgaCBleHRlbmRzIHAge1xuICAgICAgICBzZXRPcHRpb25zKCkge1xuICAgICAgICAgIHJldHVybiBmKCEwLCBhcmd1bWVudHNbMF0sIHsgc3RhY2tpbmc6IHZvaWQgMCB9KSwgcC5wcm90b3R5cGUuc2V0T3B0aW9ucy5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICAgICAgICB9XG4gICAgICAgIHRyYW5zbGF0ZSgpIHtcbiAgICAgICAgICByZXR1cm4gYi50cmFuc2xhdGUuYXBwbHkodGhpcyk7XG4gICAgICAgIH1cbiAgICAgICAgcG9pbnRBdHRyaWJzKCkge1xuICAgICAgICAgIHJldHVybiBiLnBvaW50QXR0cmlicy5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICAgICAgICB9XG4gICAgICAgIHRyYW5zbGF0ZTNkUG9pbnRzKCkge1xuICAgICAgICAgIHJldHVybiBiLnRyYW5zbGF0ZTNkUG9pbnRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gICAgICAgIH1cbiAgICAgICAgdHJhbnNsYXRlM2RTaGFwZXMoKSB7XG4gICAgICAgICAgcmV0dXJuIGIudHJhbnNsYXRlM2RTaGFwZXMuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgICAgICAgfVxuICAgICAgICBhZnRlckNvbHVtblRyYW5zbGF0ZSgpIHtcbiAgICAgICAgICBsZXQgdiwgTCwgeSwgQiwgWCA9IHRoaXMueUF4aXMsIEYgPSB0aGlzLnhBeGlzLCBUID0gRi5zdGFydEFuZ2xlUmFkLCB3ID0gdGhpcy5jaGFydCwgSCA9IHRoaXMueEF4aXMuaXNSYWRpYWwsIEMgPSBNYXRoLm1heCh3LmNoYXJ0V2lkdGgsIHcuY2hhcnRIZWlnaHQpICsgOTk5O1xuICAgICAgICAgIHRoaXMucG9pbnRzLmZvckVhY2goKHEpID0+IHtcbiAgICAgICAgICAgIGxldCBtID0gcS5zaGFwZUFyZ3MgfHwge30sIGsgPSB0aGlzLm9wdGlvbnMubWluUG9pbnRMZW5ndGgsIHggPSBxLnBsb3RZLCBOID0gWC50cmFuc2xhdGUocS5oaWdoLCAwLCAxLCAwLCAxKTtcbiAgICAgICAgICAgIGlmICh6KE4pICYmIHooeCkpXG4gICAgICAgICAgICAgIGlmIChxLnBsb3RIaWdoID0gdShOLCAtQywgQyksIHEucGxvdExvdyA9IHUoeCwgLUMsIEMpLCBCID0gcS5wbG90SGlnaCwgTWF0aC5hYnModiA9IE8ocS5yZWN0UGxvdFksIHEucGxvdFkpIC0gcS5wbG90SGlnaCkgPCBrID8gKEwgPSBrIC0gdiwgdiArPSBMLCBCIC09IEwgLyAyKSA6IHYgPCAwICYmICh2ICo9IC0xLCBCIC09IHYpLCBIICYmIHRoaXMucG9sYXIpXG4gICAgICAgICAgICAgICAgeSA9IHEuYmFyWCArIFQsIHEuc2hhcGVUeXBlID0gXCJhcmNcIiwgcS5zaGFwZUFyZ3MgPSB0aGlzLnBvbGFyLmFyYyhCICsgdiwgQiwgeSwgeSArIHEucG9pbnRXaWR0aCk7XG4gICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIG0uaGVpZ2h0ID0gdiwgbS55ID0gQjtcbiAgICAgICAgICAgICAgICBsZXQgeyB4OiBWID0gMCwgd2lkdGg6IFIgPSAwIH0gPSBtO1xuICAgICAgICAgICAgICAgIHEuc2hhcGVBcmdzID0gZihxLnNoYXBlQXJncywgdGhpcy5jcmlzcENvbChWLCBCLCBSLCB2KSksIHEudG9vbHRpcFBvcyA9IHcuaW52ZXJ0ZWQgPyBbWC5sZW4gKyBYLnBvcyAtIHcucGxvdExlZnQgLSBCIC0gdiAvIDIsIEYubGVuICsgRi5wb3MgLSB3LnBsb3RUb3AgLSBWIC0gUiAvIDIsIHZdIDogW0YubGVmdCAtIHcucGxvdExlZnQgKyBWICsgUiAvIDIsIFgucG9zIC0gdy5wbG90VG9wICsgQiArIHYgLyAyLCB2XTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gaC5kZWZhdWx0T3B0aW9ucyA9IGYoZC5kZWZhdWx0T3B0aW9ucywgcC5kZWZhdWx0T3B0aW9ucywgeyBib3JkZXJSYWRpdXM6IHsgd2hlcmU6IFwiYWxsXCIgfSwgcG9pbnRSYW5nZTogbnVsbCwgbGVnZW5kU3ltYm9sOiBcInJlY3RhbmdsZVwiLCBtYXJrZXI6IG51bGwsIHN0YXRlczogeyBob3ZlcjogeyBoYWxvOiAhMSB9IH0gfSksIE0oaCwgXCJhZnRlckNvbHVtblRyYW5zbGF0ZVwiLCBmdW5jdGlvbigpIHtcbiAgICAgICAgaC5wcm90b3R5cGUuYWZ0ZXJDb2x1bW5UcmFuc2xhdGUuYXBwbHkodGhpcyk7XG4gICAgICB9LCB7IG9yZGVyOiA1IH0pLCBBKGgucHJvdG90eXBlLCB7IGRpcmVjdFRvdWNoOiAhMCwgcG9pbnRDbGFzczogciwgdHJhY2tlckdyb3VwczogW1wiZ3JvdXBcIiwgXCJkYXRhTGFiZWxzR3JvdXBcIl0sIGFkanVzdEZvck1pc3NpbmdDb2x1bW5zOiBiLmFkanVzdEZvck1pc3NpbmdDb2x1bW5zLCBhbmltYXRlOiBiLmFuaW1hdGUsIGNyaXNwQ29sOiBiLmNyaXNwQ29sLCBkcmF3R3JhcGg6IGwsIGRyYXdQb2ludHM6IGIuZHJhd1BvaW50cywgZ2V0U3ltYm9sOiBsLCBkcmF3VHJhY2tlcjogYi5kcmF3VHJhY2tlciwgZ2V0Q29sdW1uTWV0cmljczogYi5nZXRDb2x1bW5NZXRyaWNzIH0pLCBhLnJlZ2lzdGVyU2VyaWVzVHlwZShcImNvbHVtbnJhbmdlXCIsIGgpLCBoO1xuICAgIH0pLCBuKG8sIFwiU2VyaWVzL0NvbHVtblB5cmFtaWQvQ29sdW1uUHlyYW1pZFNlcmllc0RlZmF1bHRzLmpzXCIsIFtdLCBmdW5jdGlvbigpIHtcbiAgICAgIHJldHVybiB7fTtcbiAgICB9KSwgbihvLCBcIlNlcmllcy9Db2x1bW5QeXJhbWlkL0NvbHVtblB5cmFtaWRTZXJpZXMuanNcIiwgW29bXCJTZXJpZXMvQ29sdW1uUHlyYW1pZC9Db2x1bW5QeXJhbWlkU2VyaWVzRGVmYXVsdHMuanNcIl0sIG9bXCJDb3JlL1Nlcmllcy9TZXJpZXNSZWdpc3RyeS5qc1wiXSwgb1tcIkNvcmUvVXRpbGl0aWVzLmpzXCJdXSwgZnVuY3Rpb24ociwgaSwgYSkge1xuICAgICAgbGV0IHsgY29sdW1uOiBzIH0gPSBpLnNlcmllc1R5cGVzLCB7IGNsYW1wOiBsLCBtZXJnZTogcCwgcGljazogZCB9ID0gYTtcbiAgICAgIGNsYXNzIGIgZXh0ZW5kcyBzIHtcbiAgICAgICAgdHJhbnNsYXRlKCkge1xuICAgICAgICAgIGxldCB1ID0gdGhpcy5jaGFydCwgQSA9IHRoaXMub3B0aW9ucywgeiA9IHRoaXMuZGVuc2UgPSB0aGlzLmNsb3Nlc3RQb2ludFJhbmdlICogdGhpcy54QXhpcy50cmFuc0EgPCAyLCBmID0gdGhpcy5ib3JkZXJXaWR0aCA9IGQoQS5ib3JkZXJXaWR0aCwgeiA/IDAgOiAxKSwgTyA9IHRoaXMueUF4aXMsIGggPSBBLnRocmVzaG9sZCwgZyA9IGQoQS5taW5Qb2ludExlbmd0aCwgNSksIHYgPSB0aGlzLmdldENvbHVtbk1ldHJpY3MoKSwgTCA9IHYud2lkdGgsIHkgPSB0aGlzLnBvaW50WE9mZnNldCA9IHYub2Zmc2V0LCBCID0gdGhpcy50cmFuc2xhdGVkVGhyZXNob2xkID0gTy5nZXRUaHJlc2hvbGQoaCksIFggPSB0aGlzLmJhclcgPSBNYXRoLm1heChMLCAxICsgMiAqIGYpO1xuICAgICAgICAgIGZvciAobGV0IEYgb2YgKHUuaW52ZXJ0ZWQgJiYgKEIgLT0gMC41KSwgQS5wb2ludFBhZGRpbmcgJiYgKFggPSBNYXRoLmNlaWwoWCkpLCBzdXBlci50cmFuc2xhdGUoKSwgdGhpcy5wb2ludHMpKSB7XG4gICAgICAgICAgICBsZXQgVCA9IGQoRi55Qm90dG9tLCBCKSwgdyA9IDk5OSArIE1hdGguYWJzKFQpLCBIID0gbChGLnBsb3RZLCAtdywgTy5sZW4gKyB3KSwgQyA9IFggLyAyLCBxID0gTWF0aC5taW4oSCwgVCksIG0gPSBNYXRoLm1heChILCBUKSAtIHEsIGsgPSBGLnBsb3RYICsgeSwgeCwgTiwgViwgUiwgSSwgaiwgVSwgXywgcjEsIEssIFE7XG4gICAgICAgICAgICBBLmNlbnRlckluQ2F0ZWdvcnkgJiYgKGsgPSB0aGlzLmFkanVzdEZvck1pc3NpbmdDb2x1bW5zKGssIEwsIEYsIHYpKSwgRi5iYXJYID0gaywgRi5wb2ludFdpZHRoID0gTCwgRi50b29sdGlwUG9zID0gdS5pbnZlcnRlZCA/IFtPLmxlbiArIE8ucG9zIC0gdS5wbG90TGVmdCAtIEgsIHRoaXMueEF4aXMubGVuIC0gayAtIEMsIG1dIDogW2sgKyBDLCBIICsgTy5wb3MgLSB1LnBsb3RUb3AsIG1dLCB4ID0gaCArIChGLnRvdGFsIHx8IEYueSksIEEuc3RhY2tpbmcgPT09IFwicGVyY2VudFwiICYmICh4ID0gaCArIChGLnkgPCAwKSA/IC0xMDAgOiAxMDApO1xuICAgICAgICAgICAgbGV0IEUgPSBPLnRvUGl4ZWxzKHgsICEwKTtcbiAgICAgICAgICAgIFYgPSAoTiA9IHUucGxvdEhlaWdodCAtIEUgLSAodS5wbG90SGVpZ2h0IC0gQikpID8gQyAqIChxIC0gRSkgLyBOIDogMCwgUiA9IE4gPyBDICogKHEgKyBtIC0gRSkgLyBOIDogMCwgaiA9IGsgLSBWICsgQywgVSA9IGsgKyBWICsgQywgXyA9IGsgKyBSICsgQywgcjEgPSBrIC0gUiArIEMsIEsgPSBxIC0gZywgUSA9IHEgKyBtLCBGLnkgPCAwICYmIChLID0gcSwgUSA9IHEgKyBtICsgZyksIHUuaW52ZXJ0ZWQgJiYgKEkgPSBPLndpZHRoIC0gcSwgTiA9IEUgLSAoTy53aWR0aCAtIEIpLCBWID0gQyAqIChFIC0gSSkgLyBOLCBSID0gQyAqIChFIC0gKEkgLSBtKSkgLyBOLCBVID0gKGogPSBrICsgQyArIFYpIC0gMiAqIFYsIF8gPSBrIC0gUiArIEMsIHIxID0gayArIFIgKyBDLCBLID0gcSwgUSA9IHEgKyBtIC0gZywgRi55IDwgMCAmJiAoUSA9IHEgKyBtICsgZykpLCBGLnNoYXBlVHlwZSA9IFwicGF0aFwiLCBGLnNoYXBlQXJncyA9IHsgeDogaiwgeTogSywgd2lkdGg6IFUgLSBqLCBoZWlnaHQ6IG0sIGQ6IFtbXCJNXCIsIGosIEtdLCBbXCJMXCIsIFUsIEtdLCBbXCJMXCIsIF8sIFFdLCBbXCJMXCIsIHIxLCBRXSwgW1wiWlwiXV0gfTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiBiLmRlZmF1bHRPcHRpb25zID0gcChzLmRlZmF1bHRPcHRpb25zLCByKSwgaS5yZWdpc3RlclNlcmllc1R5cGUoXCJjb2x1bW5weXJhbWlkXCIsIGIpLCBiO1xuICAgIH0pLCBuKG8sIFwiU2VyaWVzL0Vycm9yQmFyL0Vycm9yQmFyU2VyaWVzRGVmYXVsdHMuanNcIiwgW10sIGZ1bmN0aW9uKCkge1xuICAgICAgcmV0dXJuIHsgY29sb3I6IFwiIzAwMDAwMFwiLCBncm91cGluZzogITEsIGxpbmtlZFRvOiBcIjpwcmV2aW91c1wiLCB0b29sdGlwOiB7IHBvaW50Rm9ybWF0OiAnPHNwYW4gc3R5bGU9XCJjb2xvcjp7cG9pbnQuY29sb3J9XCI+4pePPC9zcGFuPiB7c2VyaWVzLm5hbWV9OiA8Yj57cG9pbnQubG93fTwvYj4gLSA8Yj57cG9pbnQuaGlnaH08L2I+PGJyLz4nIH0sIHdoaXNrZXJXaWR0aDogbnVsbCB9O1xuICAgIH0pLCBuKG8sIFwiU2VyaWVzL0Vycm9yQmFyL0Vycm9yQmFyU2VyaWVzLmpzXCIsIFtvW1wiU2VyaWVzL0JveFBsb3QvQm94UGxvdFNlcmllcy5qc1wiXSwgb1tcIlNlcmllcy9Db2x1bW4vQ29sdW1uU2VyaWVzLmpzXCJdLCBvW1wiU2VyaWVzL0Vycm9yQmFyL0Vycm9yQmFyU2VyaWVzRGVmYXVsdHMuanNcIl0sIG9bXCJDb3JlL1Nlcmllcy9TZXJpZXNSZWdpc3RyeS5qc1wiXSwgb1tcIkNvcmUvVXRpbGl0aWVzLmpzXCJdXSwgZnVuY3Rpb24ociwgaSwgYSwgcywgbCkge1xuICAgICAgbGV0IHsgYXJlYXJhbmdlOiBwIH0gPSBzLnNlcmllc1R5cGVzLCB7IGFkZEV2ZW50OiBkLCBtZXJnZTogYiwgZXh0ZW5kOiBNIH0gPSBsO1xuICAgICAgY2xhc3MgdSBleHRlbmRzIHIge1xuICAgICAgICBnZXRDb2x1bW5NZXRyaWNzKCkge1xuICAgICAgICAgIHJldHVybiB0aGlzLmxpbmtlZFBhcmVudCAmJiB0aGlzLmxpbmtlZFBhcmVudC5jb2x1bW5NZXRyaWNzIHx8IGkucHJvdG90eXBlLmdldENvbHVtbk1ldHJpY3MuY2FsbCh0aGlzKTtcbiAgICAgICAgfVxuICAgICAgICBkcmF3RGF0YUxhYmVscygpIHtcbiAgICAgICAgICBsZXQgeiA9IHRoaXMucG9pbnRWYWxLZXk7XG4gICAgICAgICAgaWYgKHApXG4gICAgICAgICAgICBmb3IgKGxldCBmIG9mIChwLnByb3RvdHlwZS5kcmF3RGF0YUxhYmVscy5jYWxsKHRoaXMpLCB0aGlzLnBvaW50cykpXG4gICAgICAgICAgICAgIGYueSA9IGZbel07XG4gICAgICAgIH1cbiAgICAgICAgdG9ZRGF0YSh6KSB7XG4gICAgICAgICAgcmV0dXJuIFt6Lmxvdywgei5oaWdoXTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIHUuZGVmYXVsdE9wdGlvbnMgPSBiKHIuZGVmYXVsdE9wdGlvbnMsIGEpLCBkKHUsIFwiYWZ0ZXJUcmFuc2xhdGVcIiwgZnVuY3Rpb24oKSB7XG4gICAgICAgIGZvciAobGV0IEEgb2YgdGhpcy5wb2ludHMpXG4gICAgICAgICAgQS5wbG90TG93ID0gQS5wbG90WTtcbiAgICAgIH0sIHsgb3JkZXI6IDAgfSksIE0odS5wcm90b3R5cGUsIHsgcG9pbnRBcnJheU1hcDogW1wibG93XCIsIFwiaGlnaFwiXSwgcG9pbnRWYWxLZXk6IFwiaGlnaFwiLCBkb1F1YXJ0aWxlczogITEgfSksIHMucmVnaXN0ZXJTZXJpZXNUeXBlKFwiZXJyb3JiYXJcIiwgdSksIHU7XG4gICAgfSksIG4obywgXCJTZXJpZXMvR2F1Z2UvR2F1Z2VQb2ludC5qc1wiLCBbb1tcIkNvcmUvU2VyaWVzL1Nlcmllc1JlZ2lzdHJ5LmpzXCJdXSwgZnVuY3Rpb24ocikge1xuICAgICAgbGV0IHsgc2VyaWVzOiB7IHByb3RvdHlwZTogeyBwb2ludENsYXNzOiBpIH0gfSB9ID0gcjtcbiAgICAgIHJldHVybiBjbGFzcyBleHRlbmRzIGkge1xuICAgICAgICBzZXRTdGF0ZShhKSB7XG4gICAgICAgICAgdGhpcy5zdGF0ZSA9IGE7XG4gICAgICAgIH1cbiAgICAgIH07XG4gICAgfSksIG4obywgXCJTZXJpZXMvR2F1Z2UvR2F1Z2VTZXJpZXMuanNcIiwgW29bXCJTZXJpZXMvR2F1Z2UvR2F1Z2VQb2ludC5qc1wiXSwgb1tcIkNvcmUvR2xvYmFscy5qc1wiXSwgb1tcIkNvcmUvU2VyaWVzL1Nlcmllc1JlZ2lzdHJ5LmpzXCJdLCBvW1wiQ29yZS9VdGlsaXRpZXMuanNcIl1dLCBmdW5jdGlvbihyLCBpLCBhLCBzKSB7XG4gICAgICBsZXQgeyBub29wOiBsIH0gPSBpLCB7IHNlcmllczogcCwgc2VyaWVzVHlwZXM6IHsgY29sdW1uOiBkIH0gfSA9IGEsIHsgY2xhbXA6IGIsIGlzTnVtYmVyOiBNLCBleHRlbmQ6IHUsIG1lcmdlOiBBLCBwaWNrOiB6LCBwSW50OiBmLCBkZWZpbmVkOiBPIH0gPSBzO1xuICAgICAgY2xhc3MgaCBleHRlbmRzIHAge1xuICAgICAgICB0cmFuc2xhdGUoKSB7XG4gICAgICAgICAgbGV0IHYgPSB0aGlzLnlBeGlzLCBMID0gdGhpcy5vcHRpb25zLCB5ID0gdi5jZW50ZXI7XG4gICAgICAgICAgdGhpcy5nZW5lcmF0ZVBvaW50cygpLCB0aGlzLnBvaW50cy5mb3JFYWNoKChCKSA9PiB7XG4gICAgICAgICAgICBsZXQgWCA9IEEoTC5kaWFsLCBCLmRpYWwpLCBGID0gZihYLnJhZGl1cykgKiB5WzJdIC8gMjAwLCBUID0gZihYLmJhc2VMZW5ndGgpICogRiAvIDEwMCwgdyA9IGYoWC5yZWFyTGVuZ3RoKSAqIEYgLyAxMDAsIEggPSBYLmJhc2VXaWR0aCwgQyA9IFgudG9wV2lkdGgsIHEgPSBMLm92ZXJzaG9vdCwgbSA9IHYuc3RhcnRBbmdsZVJhZCArIHYudHJhbnNsYXRlKEIueSwgdm9pZCAwLCB2b2lkIDAsIHZvaWQgMCwgITApO1xuICAgICAgICAgICAgKE0ocSkgfHwgTC53cmFwID09PSAhMSkgJiYgKHEgPSBNKHEpID8gcSAvIDE4MCAqIE1hdGguUEkgOiAwLCBtID0gYihtLCB2LnN0YXJ0QW5nbGVSYWQgLSBxLCB2LmVuZEFuZ2xlUmFkICsgcSkpLCBtID0gMTgwICogbSAvIE1hdGguUEksIEIuc2hhcGVUeXBlID0gXCJwYXRoXCI7XG4gICAgICAgICAgICBsZXQgayA9IFgucGF0aCB8fCBbW1wiTVwiLCAtdywgLUggLyAyXSwgW1wiTFwiLCBULCAtSCAvIDJdLCBbXCJMXCIsIEYsIC1DIC8gMl0sIFtcIkxcIiwgRiwgQyAvIDJdLCBbXCJMXCIsIFQsIEggLyAyXSwgW1wiTFwiLCAtdywgSCAvIDJdLCBbXCJaXCJdXTtcbiAgICAgICAgICAgIEIuc2hhcGVBcmdzID0geyBkOiBrLCB0cmFuc2xhdGVYOiB5WzBdLCB0cmFuc2xhdGVZOiB5WzFdLCByb3RhdGlvbjogbSB9LCBCLnBsb3RYID0geVswXSwgQi5wbG90WSA9IHlbMV0sIE8oQi55KSAmJiB2Lm1heCAtIHYubWluICYmIChCLnBlcmNlbnRhZ2UgPSAoQi55IC0gdi5taW4pIC8gKHYubWF4IC0gdi5taW4pICogMTAwKTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBkcmF3UG9pbnRzKCkge1xuICAgICAgICAgIGxldCB2ID0gdGhpcywgTCA9IHYuY2hhcnQsIHkgPSB2LnlBeGlzLmNlbnRlciwgQiA9IHYucGl2b3QsIFggPSB2Lm9wdGlvbnMsIEYgPSBYLnBpdm90LCBUID0gTC5yZW5kZXJlcjtcbiAgICAgICAgICB2LnBvaW50cy5mb3JFYWNoKCh3KSA9PiB7XG4gICAgICAgICAgICBsZXQgSCA9IHcuZ3JhcGhpYywgQyA9IHcuc2hhcGVBcmdzLCBxID0gQy5kLCBtID0gQShYLmRpYWwsIHcuZGlhbCk7XG4gICAgICAgICAgICBIID8gKEguYW5pbWF0ZShDKSwgQy5kID0gcSkgOiB3LmdyYXBoaWMgPSBUW3cuc2hhcGVUeXBlXShDKS5hZGRDbGFzcyhcImhpZ2hjaGFydHMtZGlhbFwiKS5hZGQodi5ncm91cCksIEwuc3R5bGVkTW9kZSB8fCB3LmdyYXBoaWNbSCA/IFwiYW5pbWF0ZVwiIDogXCJhdHRyXCJdKHsgc3Ryb2tlOiBtLmJvcmRlckNvbG9yLCBcInN0cm9rZS13aWR0aFwiOiBtLmJvcmRlcldpZHRoLCBmaWxsOiBtLmJhY2tncm91bmRDb2xvciB9KTtcbiAgICAgICAgICB9KSwgQiA/IEIuYW5pbWF0ZSh7IHRyYW5zbGF0ZVg6IHlbMF0sIHRyYW5zbGF0ZVk6IHlbMV0gfSkgOiBGICYmICh2LnBpdm90ID0gVC5jaXJjbGUoMCwgMCwgRi5yYWRpdXMpLmF0dHIoeyB6SW5kZXg6IDIgfSkuYWRkQ2xhc3MoXCJoaWdoY2hhcnRzLXBpdm90XCIpLnRyYW5zbGF0ZSh5WzBdLCB5WzFdKS5hZGQodi5ncm91cCksIEwuc3R5bGVkTW9kZSB8fCB2LnBpdm90LmF0dHIoeyBmaWxsOiBGLmJhY2tncm91bmRDb2xvciwgc3Ryb2tlOiBGLmJvcmRlckNvbG9yLCBcInN0cm9rZS13aWR0aFwiOiBGLmJvcmRlcldpZHRoIH0pKTtcbiAgICAgICAgfVxuICAgICAgICBhbmltYXRlKHYpIHtcbiAgICAgICAgICBsZXQgTCA9IHRoaXM7XG4gICAgICAgICAgdiB8fCBMLnBvaW50cy5mb3JFYWNoKCh5KSA9PiB7XG4gICAgICAgICAgICBsZXQgQiA9IHkuZ3JhcGhpYztcbiAgICAgICAgICAgIEIgJiYgKEIuYXR0cih7IHJvdGF0aW9uOiAxODAgKiBMLnlBeGlzLnN0YXJ0QW5nbGVSYWQgLyBNYXRoLlBJIH0pLCBCLmFuaW1hdGUoeyByb3RhdGlvbjogeS5zaGFwZUFyZ3Mucm90YXRpb24gfSwgTC5vcHRpb25zLmFuaW1hdGlvbikpO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIHJlbmRlcigpIHtcbiAgICAgICAgICB0aGlzLmdyb3VwID0gdGhpcy5wbG90R3JvdXAoXCJncm91cFwiLCBcInNlcmllc1wiLCB0aGlzLnZpc2libGUgPyBcImluaGVyaXRcIiA6IFwiaGlkZGVuXCIsIHRoaXMub3B0aW9ucy56SW5kZXgsIHRoaXMuY2hhcnQuc2VyaWVzR3JvdXApLCBwLnByb3RvdHlwZS5yZW5kZXIuY2FsbCh0aGlzKSwgdGhpcy5ncm91cC5jbGlwKHRoaXMuY2hhcnQuY2xpcFJlY3QpO1xuICAgICAgICB9XG4gICAgICAgIHNldERhdGEodiwgTCkge1xuICAgICAgICAgIHAucHJvdG90eXBlLnNldERhdGEuY2FsbCh0aGlzLCB2LCAhMSksIHRoaXMucHJvY2Vzc0RhdGEoKSwgdGhpcy5nZW5lcmF0ZVBvaW50cygpLCB6KEwsICEwKSAmJiB0aGlzLmNoYXJ0LnJlZHJhdygpO1xuICAgICAgICB9XG4gICAgICAgIGhhc0RhdGEoKSB7XG4gICAgICAgICAgcmV0dXJuICEhdGhpcy5wb2ludHMubGVuZ3RoO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gaC5kZWZhdWx0T3B0aW9ucyA9IEEocC5kZWZhdWx0T3B0aW9ucywgeyBkYXRhTGFiZWxzOiB7IGJvcmRlckNvbG9yOiBcIiNjY2NjY2NcIiwgYm9yZGVyUmFkaXVzOiAzLCBib3JkZXJXaWR0aDogMSwgY3JvcDogITEsIGRlZmVyOiAhMSwgZW5hYmxlZDogITAsIHZlcnRpY2FsQWxpZ246IFwidG9wXCIsIHk6IDE1LCB6SW5kZXg6IDIgfSwgZGlhbDogeyBiYWNrZ3JvdW5kQ29sb3I6IFwiIzAwMDAwMFwiLCBiYXNlTGVuZ3RoOiBcIjcwJVwiLCBiYXNlV2lkdGg6IDMsIGJvcmRlckNvbG9yOiBcIiNjY2NjY2NcIiwgYm9yZGVyV2lkdGg6IDAsIHJhZGl1czogXCI4MCVcIiwgcmVhckxlbmd0aDogXCIxMCVcIiwgdG9wV2lkdGg6IDEgfSwgcGl2b3Q6IHsgcmFkaXVzOiA1LCBib3JkZXJXaWR0aDogMCwgYm9yZGVyQ29sb3I6IFwiI2NjY2NjY1wiLCBiYWNrZ3JvdW5kQ29sb3I6IFwiIzAwMDAwMFwiIH0sIHRvb2x0aXA6IHsgaGVhZGVyRm9ybWF0OiBcIlwiIH0sIHNob3dJbkxlZ2VuZDogITEgfSksIHUoaC5wcm90b3R5cGUsIHsgYW5ndWxhcjogITAsIGRpcmVjdFRvdWNoOiAhMCwgZHJhd0dyYXBoOiBsLCBkcmF3VHJhY2tlcjogZC5wcm90b3R5cGUuZHJhd1RyYWNrZXIsIGZpeGVkQm94OiAhMCwgZm9yY2VETDogITAsIG5vU2hhcmVkVG9vbHRpcDogITAsIHBvaW50Q2xhc3M6IHIsIHRyYWNrZXJHcm91cHM6IFtcImdyb3VwXCIsIFwiZGF0YUxhYmVsc0dyb3VwXCJdIH0pLCBhLnJlZ2lzdGVyU2VyaWVzVHlwZShcImdhdWdlXCIsIGgpLCBoO1xuICAgIH0pLCBuKG8sIFwiU2VyaWVzL0RyYWdOb2Rlc0NvbXBvc2l0aW9uLmpzXCIsIFtvW1wiQ29yZS9HbG9iYWxzLmpzXCJdLCBvW1wiQ29yZS9VdGlsaXRpZXMuanNcIl1dLCBmdW5jdGlvbihyLCBpKSB7XG4gICAgICBsZXQgeyBjb21wb3NlZDogYSB9ID0gciwgeyBhZGRFdmVudDogcywgcHVzaFVuaXF1ZTogbCB9ID0gaTtcbiAgICAgIGZ1bmN0aW9uIHAoKSB7XG4gICAgICAgIGxldCBkLCBiLCBNLCB1ID0gdGhpcztcbiAgICAgICAgdS5jb250YWluZXIgJiYgKGQgPSBzKHUuY29udGFpbmVyLCBcIm1vdXNlZG93blwiLCAoQSkgPT4ge1xuICAgICAgICAgIGxldCB6ID0gdS5ob3ZlclBvaW50O1xuICAgICAgICAgIHogJiYgei5zZXJpZXMgJiYgei5zZXJpZXMuaGFzRHJhZ2dhYmxlTm9kZXMgJiYgei5zZXJpZXMub3B0aW9ucy5kcmFnZ2FibGUgJiYgKHouc2VyaWVzLm9uTW91c2VEb3duKHosIEEpLCBiID0gcyh1LmNvbnRhaW5lciwgXCJtb3VzZW1vdmVcIiwgKGYpID0+IHogJiYgei5zZXJpZXMgJiYgei5zZXJpZXMub25Nb3VzZU1vdmUoeiwgZikpLCBNID0gcyh1LmNvbnRhaW5lci5vd25lckRvY3VtZW50LCBcIm1vdXNldXBcIiwgKGYpID0+IChiKCksIE0oKSwgeiAmJiB6LnNlcmllcyAmJiB6LnNlcmllcy5vbk1vdXNlVXAoeiwgZikpKSk7XG4gICAgICAgIH0pKSwgcyh1LCBcImRlc3Ryb3lcIiwgZnVuY3Rpb24oKSB7XG4gICAgICAgICAgZCgpO1xuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICAgIHJldHVybiB7IGNvbXBvc2U6IGZ1bmN0aW9uKGQpIHtcbiAgICAgICAgbChhLCBcIkRyYWdOb2Rlc1wiKSAmJiBzKGQsIFwibG9hZFwiLCBwKTtcbiAgICAgIH0sIG9uTW91c2VEb3duOiBmdW5jdGlvbihkLCBiKSB7XG4gICAgICAgIHZhciB1O1xuICAgICAgICBsZXQgTSA9ICgodSA9IHRoaXMuY2hhcnQucG9pbnRlcikgPT0gbnVsbCA/IHZvaWQgMCA6IHUubm9ybWFsaXplKGIpKSB8fCBiO1xuICAgICAgICBkLmZpeGVkUG9zaXRpb24gPSB7IGNoYXJ0WDogTS5jaGFydFgsIGNoYXJ0WTogTS5jaGFydFksIHBsb3RYOiBkLnBsb3RYLCBwbG90WTogZC5wbG90WSB9LCBkLmluRHJhZ01vZGUgPSAhMDtcbiAgICAgIH0sIG9uTW91c2VNb3ZlOiBmdW5jdGlvbihkLCBiKSB7XG4gICAgICAgIHZhciBNO1xuICAgICAgICBpZiAoZC5maXhlZFBvc2l0aW9uICYmIGQuaW5EcmFnTW9kZSkge1xuICAgICAgICAgIGxldCB1LCBBLCB6ID0gdGhpcy5jaGFydCwgZiA9ICgoTSA9IHoucG9pbnRlcikgPT0gbnVsbCA/IHZvaWQgMCA6IE0ubm9ybWFsaXplKGIpKSB8fCBiLCBPID0gZC5maXhlZFBvc2l0aW9uLmNoYXJ0WCAtIGYuY2hhcnRYLCBoID0gZC5maXhlZFBvc2l0aW9uLmNoYXJ0WSAtIGYuY2hhcnRZLCBnID0gei5ncmFwaExheW91dHNMb29rdXA7XG4gICAgICAgICAgKE1hdGguYWJzKE8pID4gNSB8fCBNYXRoLmFicyhoKSA+IDUpICYmICh1ID0gZC5maXhlZFBvc2l0aW9uLnBsb3RYIC0gTywgQSA9IGQuZml4ZWRQb3NpdGlvbi5wbG90WSAtIGgsIHouaXNJbnNpZGVQbG90KHUsIEEpICYmIChkLnBsb3RYID0gdSwgZC5wbG90WSA9IEEsIGQuaGFzRHJhZ2dlZCA9ICEwLCB0aGlzLnJlZHJhd0hhbG8oZCksIGcuZm9yRWFjaCgodikgPT4ge1xuICAgICAgICAgICAgdi5yZXN0YXJ0U2ltdWxhdGlvbigpO1xuICAgICAgICAgIH0pKSk7XG4gICAgICAgIH1cbiAgICAgIH0sIG9uTW91c2VVcDogZnVuY3Rpb24oZCkge1xuICAgICAgICBkLmZpeGVkUG9zaXRpb24gJiYgKGQuaGFzRHJhZ2dlZCAmJiAodGhpcy5sYXlvdXQuZW5hYmxlU2ltdWxhdGlvbiA/IHRoaXMubGF5b3V0LnN0YXJ0KCkgOiB0aGlzLmNoYXJ0LnJlZHJhdygpKSwgZC5pbkRyYWdNb2RlID0gZC5oYXNEcmFnZ2VkID0gITEsIHRoaXMub3B0aW9ucy5maXhlZERyYWdnYWJsZSB8fCBkZWxldGUgZC5maXhlZFBvc2l0aW9uKTtcbiAgICAgIH0sIHJlZHJhd0hhbG86IGZ1bmN0aW9uKGQpIHtcbiAgICAgICAgZCAmJiB0aGlzLmhhbG8gJiYgdGhpcy5oYWxvLmF0dHIoeyBkOiBkLmhhbG9QYXRoKHRoaXMub3B0aW9ucy5zdGF0ZXMuaG92ZXIuaGFsby5zaXplKSB9KTtcbiAgICAgIH0gfTtcbiAgICB9KSwgbihvLCBcIlNlcmllcy9HcmFwaExheW91dENvbXBvc2l0aW9uLmpzXCIsIFtvW1wiQ29yZS9BbmltYXRpb24vQW5pbWF0aW9uVXRpbGl0aWVzLmpzXCJdLCBvW1wiQ29yZS9HbG9iYWxzLmpzXCJdLCBvW1wiQ29yZS9VdGlsaXRpZXMuanNcIl1dLCBmdW5jdGlvbihyLCBpLCBhKSB7XG4gICAgICBsZXQgeyBzZXRBbmltYXRpb246IHMgfSA9IHIsIHsgY29tcG9zZWQ6IGwgfSA9IGksIHsgYWRkRXZlbnQ6IHAsIHB1c2hVbmlxdWU6IGQgfSA9IGE7XG4gICAgICBmdW5jdGlvbiBiKCkge1xuICAgICAgICB0aGlzLmdyYXBoTGF5b3V0c0xvb2t1cCAmJiAodGhpcy5ncmFwaExheW91dHNMb29rdXAuZm9yRWFjaCgoeikgPT4ge1xuICAgICAgICAgIHoudXBkYXRlU2ltdWxhdGlvbigpO1xuICAgICAgICB9KSwgdGhpcy5yZWRyYXcoKSk7XG4gICAgICB9XG4gICAgICBmdW5jdGlvbiBNKCkge1xuICAgICAgICB0aGlzLmdyYXBoTGF5b3V0c0xvb2t1cCAmJiAodGhpcy5ncmFwaExheW91dHNMb29rdXAuZm9yRWFjaCgoeikgPT4ge1xuICAgICAgICAgIHoudXBkYXRlU2ltdWxhdGlvbighMSk7XG4gICAgICAgIH0pLCB0aGlzLnJlZHJhdygpKTtcbiAgICAgIH1cbiAgICAgIGZ1bmN0aW9uIHUoKSB7XG4gICAgICAgIHRoaXMuZ3JhcGhMYXlvdXRzTG9va3VwICYmIHRoaXMuZ3JhcGhMYXlvdXRzTG9va3VwLmZvckVhY2goKHopID0+IHtcbiAgICAgICAgICB6LnN0b3AoKTtcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgICBmdW5jdGlvbiBBKCkge1xuICAgICAgICBsZXQgeiwgZiA9ICExLCBPID0gKGgpID0+IHtcbiAgICAgICAgICBoLm1heEl0ZXJhdGlvbnMtLSAmJiBpc0Zpbml0ZShoLnRlbXBlcmF0dXJlKSAmJiAhaC5pc1N0YWJsZSgpICYmICFoLmVuYWJsZVNpbXVsYXRpb24gJiYgKGguYmVmb3JlU3RlcCAmJiBoLmJlZm9yZVN0ZXAoKSwgaC5zdGVwKCksIHogPSAhMSwgZiA9ICEwKTtcbiAgICAgICAgfTtcbiAgICAgICAgaWYgKHRoaXMuZ3JhcGhMYXlvdXRzTG9va3VwKSB7XG4gICAgICAgICAgZm9yIChzKCExLCB0aGlzKSwgdGhpcy5ncmFwaExheW91dHNMb29rdXAuZm9yRWFjaCgoaCkgPT4gaC5zdGFydCgpKTsgIXo7IClcbiAgICAgICAgICAgIHogPSAhMCwgdGhpcy5ncmFwaExheW91dHNMb29rdXAuZm9yRWFjaChPKTtcbiAgICAgICAgICBmICYmIHRoaXMuc2VyaWVzLmZvckVhY2goKGgpID0+IHtcbiAgICAgICAgICAgIGggJiYgaC5sYXlvdXQgJiYgaC5yZW5kZXIoKTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIHsgY29tcG9zZTogZnVuY3Rpb24oeikge1xuICAgICAgICBkKGwsIFwiR3JhcGhMYXlvdXRcIikgJiYgKHAoeiwgXCJhZnRlclByaW50XCIsIGIpLCBwKHosIFwiYmVmb3JlUHJpbnRcIiwgTSksIHAoeiwgXCJwcmVkcmF3XCIsIHUpLCBwKHosIFwicmVuZGVyXCIsIEEpKTtcbiAgICAgIH0sIGludGVncmF0aW9uczoge30sIGxheW91dHM6IHt9IH07XG4gICAgfSksIG4obywgXCJTZXJpZXMvUGFja2VkQnViYmxlL1BhY2tlZEJ1YmJsZVBvaW50LmpzXCIsIFtvW1wiQ29yZS9DaGFydC9DaGFydC5qc1wiXSwgb1tcIkNvcmUvU2VyaWVzL1BvaW50LmpzXCJdLCBvW1wiQ29yZS9TZXJpZXMvU2VyaWVzUmVnaXN0cnkuanNcIl1dLCBmdW5jdGlvbihyLCBpLCBhKSB7XG4gICAgICBsZXQgeyBzZXJpZXNUeXBlczogeyBidWJibGU6IHsgcHJvdG90eXBlOiB7IHBvaW50Q2xhc3M6IHMgfSB9IH0gfSA9IGE7XG4gICAgICByZXR1cm4gY2xhc3MgZXh0ZW5kcyBzIHtcbiAgICAgICAgZGVzdHJveSgpIHtcbiAgICAgICAgICB2YXIgbDtcbiAgICAgICAgICByZXR1cm4gKGwgPSB0aGlzLnNlcmllcykgIT0gbnVsbCAmJiBsLmxheW91dCAmJiB0aGlzLnNlcmllcy5sYXlvdXQucmVtb3ZlRWxlbWVudEZyb21Db2xsZWN0aW9uKHRoaXMsIHRoaXMuc2VyaWVzLmxheW91dC5ub2RlcyksIGkucHJvdG90eXBlLmRlc3Ryb3kuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgICAgICAgfVxuICAgICAgICBmaXJlUG9pbnRFdmVudCgpIHtcbiAgICAgICAgICBsZXQgbCA9IHRoaXMuc2VyaWVzLm9wdGlvbnM7XG4gICAgICAgICAgaWYgKHRoaXMuaXNQYXJlbnROb2RlICYmIGwucGFyZW50Tm9kZSkge1xuICAgICAgICAgICAgbGV0IHAgPSBsLmFsbG93UG9pbnRTZWxlY3Q7XG4gICAgICAgICAgICBsLmFsbG93UG9pbnRTZWxlY3QgPSBsLnBhcmVudE5vZGUuYWxsb3dQb2ludFNlbGVjdCwgaS5wcm90b3R5cGUuZmlyZVBvaW50RXZlbnQuYXBwbHkodGhpcywgYXJndW1lbnRzKSwgbC5hbGxvd1BvaW50U2VsZWN0ID0gcDtcbiAgICAgICAgICB9IGVsc2VcbiAgICAgICAgICAgIGkucHJvdG90eXBlLmZpcmVQb2ludEV2ZW50LmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gICAgICAgIH1cbiAgICAgICAgc2VsZWN0KCkge1xuICAgICAgICAgIGxldCBsID0gdGhpcy5zZXJpZXMuY2hhcnQ7XG4gICAgICAgICAgdGhpcy5pc1BhcmVudE5vZGUgPyAobC5nZXRTZWxlY3RlZFBvaW50cyA9IGwuZ2V0U2VsZWN0ZWRQYXJlbnROb2RlcywgaS5wcm90b3R5cGUuc2VsZWN0LmFwcGx5KHRoaXMsIGFyZ3VtZW50cyksIGwuZ2V0U2VsZWN0ZWRQb2ludHMgPSByLnByb3RvdHlwZS5nZXRTZWxlY3RlZFBvaW50cykgOiBpLnByb3RvdHlwZS5zZWxlY3QuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgICAgICAgfVxuICAgICAgfTtcbiAgICB9KSwgbihvLCBcIlNlcmllcy9QYWNrZWRCdWJibGUvUGFja2VkQnViYmxlU2VyaWVzRGVmYXVsdHMuanNcIiwgW29bXCJDb3JlL1V0aWxpdGllcy5qc1wiXV0sIGZ1bmN0aW9uKHIpIHtcbiAgICAgIGxldCB7IGlzTnVtYmVyOiBpIH0gPSByO1xuICAgICAgcmV0dXJuIHsgbWluU2l6ZTogXCIxMCVcIiwgbWF4U2l6ZTogXCI1MCVcIiwgc2l6ZUJ5OiBcImFyZWFcIiwgem9uZUF4aXM6IFwieVwiLCBjcmlzcDogITEsIHRvb2x0aXA6IHsgcG9pbnRGb3JtYXQ6IFwiVmFsdWU6IHtwb2ludC52YWx1ZX1cIiB9LCBkcmFnZ2FibGU6ICEwLCB1c2VTaW11bGF0aW9uOiAhMCwgcGFyZW50Tm9kZTogeyBhbGxvd1BvaW50U2VsZWN0OiAhMSB9LCBkYXRhTGFiZWxzOiB7IGZvcm1hdHRlcjogZnVuY3Rpb24oKSB7XG4gICAgICAgIGxldCB7IG51bWJlckZvcm1hdHRlcjogYSB9ID0gdGhpcy5zZXJpZXMuY2hhcnQsIHsgdmFsdWU6IHMgfSA9IHRoaXMucG9pbnQ7XG4gICAgICAgIHJldHVybiBpKHMpID8gYShzLCAtMSkgOiBcIlwiO1xuICAgICAgfSwgcGFyZW50Tm9kZUZvcm1hdHRlcjogZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiB0aGlzLm5hbWU7XG4gICAgICB9LCBwYXJlbnROb2RlVGV4dFBhdGg6IHsgZW5hYmxlZDogITAgfSwgcGFkZGluZzogMCwgc3R5bGU6IHsgdHJhbnNpdGlvbjogXCJvcGFjaXR5IDIwMDBtc1wiIH0gfSwgbGF5b3V0QWxnb3JpdGhtOiB7IGluaXRpYWxQb3NpdGlvbnM6IFwiY2lyY2xlXCIsIGluaXRpYWxQb3NpdGlvblJhZGl1czogMjAsIGJ1YmJsZVBhZGRpbmc6IDUsIHBhcmVudE5vZGVMaW1pdDogITEsIHNlcmllc0ludGVyYWN0aW9uOiAhMCwgZHJhZ0JldHdlZW5TZXJpZXM6ICExLCBwYXJlbnROb2RlT3B0aW9uczogeyBtYXhJdGVyYXRpb25zOiA0MDAsIGdyYXZpdGF0aW9uYWxDb25zdGFudDogMC4wMywgbWF4U3BlZWQ6IDUwLCBpbml0aWFsUG9zaXRpb25SYWRpdXM6IDEwMCwgc2VyaWVzSW50ZXJhY3Rpb246ICEwLCBtYXJrZXI6IHsgZmlsbENvbG9yOiBudWxsLCBmaWxsT3BhY2l0eTogMSwgbGluZVdpZHRoOiBudWxsLCBsaW5lQ29sb3I6IG51bGwsIHN5bWJvbDogXCJjaXJjbGVcIiB9IH0sIGVuYWJsZVNpbXVsYXRpb246ICEwLCB0eXBlOiBcInBhY2tlZGJ1YmJsZVwiLCBpbnRlZ3JhdGlvbjogXCJwYWNrZWRidWJibGVcIiwgbWF4SXRlcmF0aW9uczogMWUzLCBzcGxpdFNlcmllczogITEsIG1heFNwZWVkOiA1LCBncmF2aXRhdGlvbmFsQ29uc3RhbnQ6IDAuMDEsIGZyaWN0aW9uOiAtMC45ODEgfSB9O1xuICAgIH0pLCBuKG8sIFwiU2VyaWVzL05ldHdvcmtncmFwaC9WZXJsZXRJbnRlZ3JhdGlvbi5qc1wiLCBbXSwgZnVuY3Rpb24oKSB7XG4gICAgICByZXR1cm4geyBhdHRyYWN0aXZlOiBmdW5jdGlvbihyLCBpLCBhKSB7XG4gICAgICAgIGxldCBzID0gci5nZXRNYXNzKCksIGwgPSAtYS54ICogaSAqIHRoaXMuZGlmZlRlbXBlcmF0dXJlLCBwID0gLWEueSAqIGkgKiB0aGlzLmRpZmZUZW1wZXJhdHVyZTtcbiAgICAgICAgci5mcm9tTm9kZS5maXhlZFBvc2l0aW9uIHx8IChyLmZyb21Ob2RlLnBsb3RYIC09IGwgKiBzLmZyb21Ob2RlIC8gci5mcm9tTm9kZS5kZWdyZWUsIHIuZnJvbU5vZGUucGxvdFkgLT0gcCAqIHMuZnJvbU5vZGUgLyByLmZyb21Ob2RlLmRlZ3JlZSksIHIudG9Ob2RlLmZpeGVkUG9zaXRpb24gfHwgKHIudG9Ob2RlLnBsb3RYICs9IGwgKiBzLnRvTm9kZSAvIHIudG9Ob2RlLmRlZ3JlZSwgci50b05vZGUucGxvdFkgKz0gcCAqIHMudG9Ob2RlIC8gci50b05vZGUuZGVncmVlKTtcbiAgICAgIH0sIGF0dHJhY3RpdmVGb3JjZUZ1bmN0aW9uOiBmdW5jdGlvbihyLCBpKSB7XG4gICAgICAgIHJldHVybiAoaSAtIHIpIC8gcjtcbiAgICAgIH0sIGJhcnljZW50ZXI6IGZ1bmN0aW9uKCkge1xuICAgICAgICBsZXQgciA9IHRoaXMub3B0aW9ucy5ncmF2aXRhdGlvbmFsQ29uc3RhbnQgfHwgMCwgaSA9ICh0aGlzLmJhcnljZW50ZXIueEZhY3RvciAtICh0aGlzLmJveC5sZWZ0ICsgdGhpcy5ib3gud2lkdGgpIC8gMikgKiByLCBhID0gKHRoaXMuYmFyeWNlbnRlci55RmFjdG9yIC0gKHRoaXMuYm94LnRvcCArIHRoaXMuYm94LmhlaWdodCkgLyAyKSAqIHI7XG4gICAgICAgIHRoaXMubm9kZXMuZm9yRWFjaChmdW5jdGlvbihzKSB7XG4gICAgICAgICAgcy5maXhlZFBvc2l0aW9uIHx8IChzLnBsb3RYIC09IGkgLyBzLm1hc3MgLyBzLmRlZ3JlZSwgcy5wbG90WSAtPSBhIC8gcy5tYXNzIC8gcy5kZWdyZWUpO1xuICAgICAgICB9KTtcbiAgICAgIH0sIGdldEs6IGZ1bmN0aW9uKHIpIHtcbiAgICAgICAgcmV0dXJuIE1hdGgucG93KHIuYm94LndpZHRoICogci5ib3guaGVpZ2h0IC8gci5ub2Rlcy5sZW5ndGgsIDAuNSk7XG4gICAgICB9LCBpbnRlZ3JhdGU6IGZ1bmN0aW9uKHIsIGkpIHtcbiAgICAgICAgbGV0IGEgPSAtci5vcHRpb25zLmZyaWN0aW9uLCBzID0gci5vcHRpb25zLm1heFNwZWVkLCBsID0gaS5wcmV2WCwgcCA9IGkucHJldlksIGQgPSAoaS5wbG90WCArIGkuZGlzcFggLSBsKSAqIGEsIGIgPSAoaS5wbG90WSArIGkuZGlzcFkgLSBwKSAqIGEsIE0gPSBNYXRoLmFicywgdSA9IE0oZCkgLyAoZCB8fCAxKSwgQSA9IE0oYikgLyAoYiB8fCAxKSwgeiA9IHUgKiBNYXRoLm1pbihzLCBNYXRoLmFicyhkKSksIGYgPSBBICogTWF0aC5taW4ocywgTWF0aC5hYnMoYikpO1xuICAgICAgICBpLnByZXZYID0gaS5wbG90WCArIGkuZGlzcFgsIGkucHJldlkgPSBpLnBsb3RZICsgaS5kaXNwWSwgaS5wbG90WCArPSB6LCBpLnBsb3RZICs9IGYsIGkudGVtcGVyYXR1cmUgPSByLnZlY3Rvckxlbmd0aCh7IHg6IHosIHk6IGYgfSk7XG4gICAgICB9LCByZXB1bHNpdmU6IGZ1bmN0aW9uKHIsIGksIGEpIHtcbiAgICAgICAgbGV0IHMgPSBpICogdGhpcy5kaWZmVGVtcGVyYXR1cmUgLyByLm1hc3MgLyByLmRlZ3JlZTtcbiAgICAgICAgci5maXhlZFBvc2l0aW9uIHx8IChyLnBsb3RYICs9IGEueCAqIHMsIHIucGxvdFkgKz0gYS55ICogcyk7XG4gICAgICB9LCByZXB1bHNpdmVGb3JjZUZ1bmN0aW9uOiBmdW5jdGlvbihyLCBpKSB7XG4gICAgICAgIHJldHVybiAoaSAtIHIpIC8gciAqIChpID4gciA/IDEgOiAwKTtcbiAgICAgIH0gfTtcbiAgICB9KSwgbihvLCBcIlNlcmllcy9QYWNrZWRCdWJibGUvUGFja2VkQnViYmxlSW50ZWdyYXRpb24uanNcIiwgW29bXCJDb3JlL0dsb2JhbHMuanNcIl0sIG9bXCJTZXJpZXMvTmV0d29ya2dyYXBoL1ZlcmxldEludGVncmF0aW9uLmpzXCJdXSwgZnVuY3Rpb24ociwgaSkge1xuICAgICAgbGV0IHsgbm9vcDogYSB9ID0gcjtcbiAgICAgIHJldHVybiB7IGJhcnljZW50ZXI6IGZ1bmN0aW9uKCkge1xuICAgICAgICBsZXQgcywgbCwgcCA9IHRoaXMub3B0aW9ucy5ncmF2aXRhdGlvbmFsQ29uc3RhbnQsIGQgPSB0aGlzLmJveCwgYiA9IHRoaXMubm9kZXM7XG4gICAgICAgIGZvciAobGV0IE0gb2YgYilcbiAgICAgICAgICB0aGlzLm9wdGlvbnMuc3BsaXRTZXJpZXMgJiYgIU0uaXNQYXJlbnROb2RlID8gKHMgPSBNLnNlcmllcy5wYXJlbnROb2RlLnBsb3RYLCBsID0gTS5zZXJpZXMucGFyZW50Tm9kZS5wbG90WSkgOiAocyA9IGQud2lkdGggLyAyLCBsID0gZC5oZWlnaHQgLyAyKSwgTS5maXhlZFBvc2l0aW9uIHx8IChNLnBsb3RYIC09IChNLnBsb3RYIC0gcykgKiBwIC8gKE0ubWFzcyAqIE1hdGguc3FydChiLmxlbmd0aCkpLCBNLnBsb3RZIC09IChNLnBsb3RZIC0gbCkgKiBwIC8gKE0ubWFzcyAqIE1hdGguc3FydChiLmxlbmd0aCkpKTtcbiAgICAgIH0sIGdldEs6IGEsIGludGVncmF0ZTogaS5pbnRlZ3JhdGUsIHJlcHVsc2l2ZTogZnVuY3Rpb24ocywgbCwgcCwgZCkge1xuICAgICAgICBsZXQgYiA9IGwgKiB0aGlzLmRpZmZUZW1wZXJhdHVyZSAvIHMubWFzcyAvIHMuZGVncmVlLCBNID0gcC54ICogYiwgdSA9IHAueSAqIGI7XG4gICAgICAgIHMuZml4ZWRQb3NpdGlvbiB8fCAocy5wbG90WCArPSBNLCBzLnBsb3RZICs9IHUpLCBkLmZpeGVkUG9zaXRpb24gfHwgKGQucGxvdFggLT0gTSwgZC5wbG90WSAtPSB1KTtcbiAgICAgIH0sIHJlcHVsc2l2ZUZvcmNlRnVuY3Rpb246IGZ1bmN0aW9uKHMsIGwsIHAsIGQpIHtcbiAgICAgICAgcmV0dXJuIE1hdGgubWluKHMsIChwLm1hcmtlci5yYWRpdXMgKyBkLm1hcmtlci5yYWRpdXMpIC8gMik7XG4gICAgICB9IH07XG4gICAgfSksIG4obywgXCJTZXJpZXMvTmV0d29ya2dyYXBoL0V1bGVySW50ZWdyYXRpb24uanNcIiwgW10sIGZ1bmN0aW9uKCkge1xuICAgICAgcmV0dXJuIHsgYXR0cmFjdGl2ZTogZnVuY3Rpb24ociwgaSwgYSwgcykge1xuICAgICAgICBsZXQgbCA9IHIuZ2V0TWFzcygpLCBwID0gYS54IC8gcyAqIGksIGQgPSBhLnkgLyBzICogaTtcbiAgICAgICAgci5mcm9tTm9kZS5maXhlZFBvc2l0aW9uIHx8IChyLmZyb21Ob2RlLmRpc3BYIC09IHAgKiBsLmZyb21Ob2RlIC8gci5mcm9tTm9kZS5kZWdyZWUsIHIuZnJvbU5vZGUuZGlzcFkgLT0gZCAqIGwuZnJvbU5vZGUgLyByLmZyb21Ob2RlLmRlZ3JlZSksIHIudG9Ob2RlLmZpeGVkUG9zaXRpb24gfHwgKHIudG9Ob2RlLmRpc3BYICs9IHAgKiBsLnRvTm9kZSAvIHIudG9Ob2RlLmRlZ3JlZSwgci50b05vZGUuZGlzcFkgKz0gZCAqIGwudG9Ob2RlIC8gci50b05vZGUuZGVncmVlKTtcbiAgICAgIH0sIGF0dHJhY3RpdmVGb3JjZUZ1bmN0aW9uOiBmdW5jdGlvbihyLCBpKSB7XG4gICAgICAgIHJldHVybiByICogciAvIGk7XG4gICAgICB9LCBiYXJ5Y2VudGVyOiBmdW5jdGlvbigpIHtcbiAgICAgICAgbGV0IHIgPSB0aGlzLm9wdGlvbnMuZ3Jhdml0YXRpb25hbENvbnN0YW50LCBpID0gdGhpcy5iYXJ5Y2VudGVyLnhGYWN0b3IsIGEgPSB0aGlzLmJhcnljZW50ZXIueUZhY3RvcjtcbiAgICAgICAgdGhpcy5ub2Rlcy5mb3JFYWNoKGZ1bmN0aW9uKHMpIHtcbiAgICAgICAgICBpZiAoIXMuZml4ZWRQb3NpdGlvbikge1xuICAgICAgICAgICAgbGV0IGwgPSBzLmdldERlZ3JlZSgpLCBwID0gbCAqICgxICsgbCAvIDIpO1xuICAgICAgICAgICAgcy5kaXNwWCArPSAoaSAtIHMucGxvdFgpICogciAqIHAgLyBzLmRlZ3JlZSwgcy5kaXNwWSArPSAoYSAtIHMucGxvdFkpICogciAqIHAgLyBzLmRlZ3JlZTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfSwgZ2V0SzogZnVuY3Rpb24ocikge1xuICAgICAgICByZXR1cm4gTWF0aC5wb3coci5ib3gud2lkdGggKiByLmJveC5oZWlnaHQgLyByLm5vZGVzLmxlbmd0aCwgMC4zKTtcbiAgICAgIH0sIGludGVncmF0ZTogZnVuY3Rpb24ociwgaSkge1xuICAgICAgICBpLmRpc3BYICs9IGkuZGlzcFggKiByLm9wdGlvbnMuZnJpY3Rpb24sIGkuZGlzcFkgKz0gaS5kaXNwWSAqIHIub3B0aW9ucy5mcmljdGlvbjtcbiAgICAgICAgbGV0IGEgPSBpLnRlbXBlcmF0dXJlID0gci52ZWN0b3JMZW5ndGgoeyB4OiBpLmRpc3BYLCB5OiBpLmRpc3BZIH0pO1xuICAgICAgICBhICE9PSAwICYmIChpLnBsb3RYICs9IGkuZGlzcFggLyBhICogTWF0aC5taW4oTWF0aC5hYnMoaS5kaXNwWCksIHIudGVtcGVyYXR1cmUpLCBpLnBsb3RZICs9IGkuZGlzcFkgLyBhICogTWF0aC5taW4oTWF0aC5hYnMoaS5kaXNwWSksIHIudGVtcGVyYXR1cmUpKTtcbiAgICAgIH0sIHJlcHVsc2l2ZTogZnVuY3Rpb24ociwgaSwgYSwgcykge1xuICAgICAgICByLmRpc3BYICs9IGEueCAvIHMgKiBpIC8gci5kZWdyZWUsIHIuZGlzcFkgKz0gYS55IC8gcyAqIGkgLyByLmRlZ3JlZTtcbiAgICAgIH0sIHJlcHVsc2l2ZUZvcmNlRnVuY3Rpb246IGZ1bmN0aW9uKHIsIGkpIHtcbiAgICAgICAgcmV0dXJuIGkgKiBpIC8gcjtcbiAgICAgIH0gfTtcbiAgICB9KSwgbihvLCBcIlNlcmllcy9OZXR3b3JrZ3JhcGgvUXVhZFRyZWVOb2RlLmpzXCIsIFtdLCBmdW5jdGlvbigpIHtcbiAgICAgIGNsYXNzIHIge1xuICAgICAgICBjb25zdHJ1Y3RvcihhKSB7XG4gICAgICAgICAgdGhpcy5ib2R5ID0gITEsIHRoaXMuaXNFbXB0eSA9ICExLCB0aGlzLmlzSW50ZXJuYWwgPSAhMSwgdGhpcy5ub2RlcyA9IFtdLCB0aGlzLmJveCA9IGEsIHRoaXMuYm94U2l6ZSA9IE1hdGgubWluKGEud2lkdGgsIGEuaGVpZ2h0KTtcbiAgICAgICAgfVxuICAgICAgICBkaXZpZGVCb3goKSB7XG4gICAgICAgICAgbGV0IGEgPSB0aGlzLmJveC53aWR0aCAvIDIsIHMgPSB0aGlzLmJveC5oZWlnaHQgLyAyO1xuICAgICAgICAgIHRoaXMubm9kZXNbMF0gPSBuZXcgcih7IGxlZnQ6IHRoaXMuYm94LmxlZnQsIHRvcDogdGhpcy5ib3gudG9wLCB3aWR0aDogYSwgaGVpZ2h0OiBzIH0pLCB0aGlzLm5vZGVzWzFdID0gbmV3IHIoeyBsZWZ0OiB0aGlzLmJveC5sZWZ0ICsgYSwgdG9wOiB0aGlzLmJveC50b3AsIHdpZHRoOiBhLCBoZWlnaHQ6IHMgfSksIHRoaXMubm9kZXNbMl0gPSBuZXcgcih7IGxlZnQ6IHRoaXMuYm94LmxlZnQgKyBhLCB0b3A6IHRoaXMuYm94LnRvcCArIHMsIHdpZHRoOiBhLCBoZWlnaHQ6IHMgfSksIHRoaXMubm9kZXNbM10gPSBuZXcgcih7IGxlZnQ6IHRoaXMuYm94LmxlZnQsIHRvcDogdGhpcy5ib3gudG9wICsgcywgd2lkdGg6IGEsIGhlaWdodDogcyB9KTtcbiAgICAgICAgfVxuICAgICAgICBnZXRCb3hQb3NpdGlvbihhKSB7XG4gICAgICAgICAgbGV0IHMgPSBhLnBsb3RYIDwgdGhpcy5ib3gubGVmdCArIHRoaXMuYm94LndpZHRoIC8gMiwgbCA9IGEucGxvdFkgPCB0aGlzLmJveC50b3AgKyB0aGlzLmJveC5oZWlnaHQgLyAyO1xuICAgICAgICAgIHJldHVybiBzID8gbCA/IDAgOiAzIDogbCA/IDEgOiAyO1xuICAgICAgICB9XG4gICAgICAgIGluc2VydChhLCBzKSB7XG4gICAgICAgICAgbGV0IGw7XG4gICAgICAgICAgdGhpcy5pc0ludGVybmFsID8gdGhpcy5ub2Rlc1t0aGlzLmdldEJveFBvc2l0aW9uKGEpXS5pbnNlcnQoYSwgcyAtIDEpIDogKHRoaXMuaXNFbXB0eSA9ICExLCB0aGlzLmJvZHkgPyBzID8gKHRoaXMuaXNJbnRlcm5hbCA9ICEwLCB0aGlzLmRpdmlkZUJveCgpLCB0aGlzLmJvZHkgIT09ICEwICYmICh0aGlzLm5vZGVzW3RoaXMuZ2V0Qm94UG9zaXRpb24odGhpcy5ib2R5KV0uaW5zZXJ0KHRoaXMuYm9keSwgcyAtIDEpLCB0aGlzLmJvZHkgPSAhMCksIHRoaXMubm9kZXNbdGhpcy5nZXRCb3hQb3NpdGlvbihhKV0uaW5zZXJ0KGEsIHMgLSAxKSkgOiAoKGwgPSBuZXcgcih7IHRvcDogYS5wbG90WCB8fCBOYU4sIGxlZnQ6IGEucGxvdFkgfHwgTmFOLCB3aWR0aDogMC4xLCBoZWlnaHQ6IDAuMSB9KSkuYm9keSA9IGEsIGwuaXNJbnRlcm5hbCA9ICExLCB0aGlzLm5vZGVzLnB1c2gobCkpIDogKHRoaXMuaXNJbnRlcm5hbCA9ICExLCB0aGlzLmJvZHkgPSBhKSk7XG4gICAgICAgIH1cbiAgICAgICAgdXBkYXRlTWFzc0FuZENlbnRlcigpIHtcbiAgICAgICAgICBsZXQgYSA9IDAsIHMgPSAwLCBsID0gMDtcbiAgICAgICAgICBpZiAodGhpcy5pc0ludGVybmFsKSB7XG4gICAgICAgICAgICBmb3IgKGxldCBwIG9mIHRoaXMubm9kZXMpXG4gICAgICAgICAgICAgIHAuaXNFbXB0eSB8fCAoYSArPSBwLm1hc3MsIHMgKz0gcC5wbG90WCAqIHAubWFzcywgbCArPSBwLnBsb3RZICogcC5tYXNzKTtcbiAgICAgICAgICAgIHMgLz0gYSwgbCAvPSBhO1xuICAgICAgICAgIH0gZWxzZVxuICAgICAgICAgICAgdGhpcy5ib2R5ICYmIChhID0gdGhpcy5ib2R5Lm1hc3MsIHMgPSB0aGlzLmJvZHkucGxvdFgsIGwgPSB0aGlzLmJvZHkucGxvdFkpO1xuICAgICAgICAgIHRoaXMubWFzcyA9IGEsIHRoaXMucGxvdFggPSBzLCB0aGlzLnBsb3RZID0gbDtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIHI7XG4gICAgfSksIG4obywgXCJTZXJpZXMvTmV0d29ya2dyYXBoL1F1YWRUcmVlLmpzXCIsIFtvW1wiU2VyaWVzL05ldHdvcmtncmFwaC9RdWFkVHJlZU5vZGUuanNcIl1dLCBmdW5jdGlvbihyKSB7XG4gICAgICByZXR1cm4gY2xhc3Mge1xuICAgICAgICBjb25zdHJ1Y3RvcihpLCBhLCBzLCBsKSB7XG4gICAgICAgICAgdGhpcy5ib3ggPSB7IGxlZnQ6IGksIHRvcDogYSwgd2lkdGg6IHMsIGhlaWdodDogbCB9LCB0aGlzLm1heERlcHRoID0gMjUsIHRoaXMucm9vdCA9IG5ldyByKHRoaXMuYm94KSwgdGhpcy5yb290LmlzSW50ZXJuYWwgPSAhMCwgdGhpcy5yb290LmlzUm9vdCA9ICEwLCB0aGlzLnJvb3QuZGl2aWRlQm94KCk7XG4gICAgICAgIH1cbiAgICAgICAgY2FsY3VsYXRlTWFzc0FuZENlbnRlcigpIHtcbiAgICAgICAgICB0aGlzLnZpc2l0Tm9kZVJlY3Vyc2l2ZShudWxsLCBudWxsLCBmdW5jdGlvbihpKSB7XG4gICAgICAgICAgICBpLnVwZGF0ZU1hc3NBbmRDZW50ZXIoKTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBpbnNlcnROb2RlcyhpKSB7XG4gICAgICAgICAgZm9yIChsZXQgYSBvZiBpKVxuICAgICAgICAgICAgdGhpcy5yb290Lmluc2VydChhLCB0aGlzLm1heERlcHRoKTtcbiAgICAgICAgfVxuICAgICAgICB2aXNpdE5vZGVSZWN1cnNpdmUoaSwgYSwgcykge1xuICAgICAgICAgIGxldCBsO1xuICAgICAgICAgIGlmIChpIHx8IChpID0gdGhpcy5yb290KSwgaSA9PT0gdGhpcy5yb290ICYmIGEgJiYgKGwgPSBhKGkpKSwgbCAhPT0gITEpIHtcbiAgICAgICAgICAgIGZvciAobGV0IHAgb2YgaS5ub2Rlcykge1xuICAgICAgICAgICAgICBpZiAocC5pc0ludGVybmFsKSB7XG4gICAgICAgICAgICAgICAgaWYgKGEgJiYgKGwgPSBhKHApKSwgbCA9PT0gITEpXG4gICAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgICAgICB0aGlzLnZpc2l0Tm9kZVJlY3Vyc2l2ZShwLCBhLCBzKTtcbiAgICAgICAgICAgICAgfSBlbHNlXG4gICAgICAgICAgICAgICAgcC5ib2R5ICYmIGEgJiYgYShwLmJvZHkpO1xuICAgICAgICAgICAgICBzICYmIHMocCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpID09PSB0aGlzLnJvb3QgJiYgcyAmJiBzKGkpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfTtcbiAgICB9KSwgbihvLCBcIlNlcmllcy9OZXR3b3JrZ3JhcGgvUmVpbmdvbGRGcnVjaHRlcm1hbkxheW91dC5qc1wiLCBbb1tcIlNlcmllcy9OZXR3b3JrZ3JhcGgvRXVsZXJJbnRlZ3JhdGlvbi5qc1wiXSwgb1tcIkNvcmUvR2xvYmFscy5qc1wiXSwgb1tcIlNlcmllcy9HcmFwaExheW91dENvbXBvc2l0aW9uLmpzXCJdLCBvW1wiU2VyaWVzL05ldHdvcmtncmFwaC9RdWFkVHJlZS5qc1wiXSwgb1tcIkNvcmUvVXRpbGl0aWVzLmpzXCJdLCBvW1wiU2VyaWVzL05ldHdvcmtncmFwaC9WZXJsZXRJbnRlZ3JhdGlvbi5qc1wiXV0sIGZ1bmN0aW9uKHIsIGksIGEsIHMsIGwsIHApIHtcbiAgICAgIGxldCB7IHdpbjogZCB9ID0gaSwgeyBjbGFtcDogYiwgZGVmaW5lZDogTSwgaXNGdW5jdGlvbjogdSwgZmlyZUV2ZW50OiBBLCBwaWNrOiB6IH0gPSBsO1xuICAgICAgY2xhc3MgZiB7XG4gICAgICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICAgIHRoaXMuYm94ID0ge30sIHRoaXMuY3VycmVudFN0ZXAgPSAwLCB0aGlzLmluaXRpYWxSZW5kZXJpbmcgPSAhMCwgdGhpcy5saW5rcyA9IFtdLCB0aGlzLm5vZGVzID0gW10sIHRoaXMuc2VyaWVzID0gW10sIHRoaXMuc2ltdWxhdGlvbiA9ICExO1xuICAgICAgICB9XG4gICAgICAgIHN0YXRpYyBjb21wb3NlKGgpIHtcbiAgICAgICAgICBhLmNvbXBvc2UoaCksIGEuaW50ZWdyYXRpb25zLmV1bGVyID0gciwgYS5pbnRlZ3JhdGlvbnMudmVybGV0ID0gcCwgYS5sYXlvdXRzW1wicmVpbmdvbGQtZnJ1Y2h0ZXJtYW5cIl0gPSBmO1xuICAgICAgICB9XG4gICAgICAgIGluaXQoaCkge1xuICAgICAgICAgIHRoaXMub3B0aW9ucyA9IGgsIHRoaXMubm9kZXMgPSBbXSwgdGhpcy5saW5rcyA9IFtdLCB0aGlzLnNlcmllcyA9IFtdLCB0aGlzLmJveCA9IHsgeDogMCwgeTogMCwgd2lkdGg6IDAsIGhlaWdodDogMCB9LCB0aGlzLnNldEluaXRpYWxSZW5kZXJpbmcoITApLCB0aGlzLmludGVncmF0aW9uID0gYS5pbnRlZ3JhdGlvbnNbaC5pbnRlZ3JhdGlvbl0sIHRoaXMuZW5hYmxlU2ltdWxhdGlvbiA9IGguZW5hYmxlU2ltdWxhdGlvbiwgdGhpcy5hdHRyYWN0aXZlRm9yY2UgPSB6KGguYXR0cmFjdGl2ZUZvcmNlLCB0aGlzLmludGVncmF0aW9uLmF0dHJhY3RpdmVGb3JjZUZ1bmN0aW9uKSwgdGhpcy5yZXB1bHNpdmVGb3JjZSA9IHooaC5yZXB1bHNpdmVGb3JjZSwgdGhpcy5pbnRlZ3JhdGlvbi5yZXB1bHNpdmVGb3JjZUZ1bmN0aW9uKSwgdGhpcy5hcHByb3hpbWF0aW9uID0gaC5hcHByb3hpbWF0aW9uO1xuICAgICAgICB9XG4gICAgICAgIHVwZGF0ZVNpbXVsYXRpb24oaCkge1xuICAgICAgICAgIHRoaXMuZW5hYmxlU2ltdWxhdGlvbiA9IHooaCwgdGhpcy5vcHRpb25zLmVuYWJsZVNpbXVsYXRpb24pO1xuICAgICAgICB9XG4gICAgICAgIHN0YXJ0KCkge1xuICAgICAgICAgIGxldCBoID0gdGhpcy5zZXJpZXMsIGcgPSB0aGlzLm9wdGlvbnM7XG4gICAgICAgICAgdGhpcy5jdXJyZW50U3RlcCA9IDAsIHRoaXMuZm9yY2VzID0gaFswXSAmJiBoWzBdLmZvcmNlcyB8fCBbXSwgdGhpcy5jaGFydCA9IGhbMF0gJiYgaFswXS5jaGFydCwgdGhpcy5pbml0aWFsUmVuZGVyaW5nICYmICh0aGlzLmluaXRQb3NpdGlvbnMoKSwgaC5mb3JFYWNoKGZ1bmN0aW9uKHYpIHtcbiAgICAgICAgICAgIHYuZmluaXNoZWRBbmltYXRpbmcgPSAhMCwgdi5yZW5kZXIoKTtcbiAgICAgICAgICB9KSksIHRoaXMuc2V0SygpLCB0aGlzLnJlc2V0U2ltdWxhdGlvbihnKSwgdGhpcy5lbmFibGVTaW11bGF0aW9uICYmIHRoaXMuc3RlcCgpO1xuICAgICAgICB9XG4gICAgICAgIHN0ZXAoKSB7XG4gICAgICAgICAgbGV0IGggPSB0aGlzLnNlcmllcztcbiAgICAgICAgICBmb3IgKGxldCBnIG9mICh0aGlzLmN1cnJlbnRTdGVwKyssIHRoaXMuYXBwcm94aW1hdGlvbiA9PT0gXCJiYXJuZXMtaHV0XCIgJiYgKHRoaXMuY3JlYXRlUXVhZFRyZWUoKSwgdGhpcy5xdWFkVHJlZS5jYWxjdWxhdGVNYXNzQW5kQ2VudGVyKCkpLCB0aGlzLmZvcmNlcyB8fCBbXSkpXG4gICAgICAgICAgICB0aGlzW2cgKyBcIkZvcmNlc1wiXSh0aGlzLnRlbXBlcmF0dXJlKTtcbiAgICAgICAgICBpZiAodGhpcy5hcHBseUxpbWl0cygpLCB0aGlzLnRlbXBlcmF0dXJlID0gdGhpcy5jb29sRG93bih0aGlzLnN0YXJ0VGVtcGVyYXR1cmUsIHRoaXMuZGlmZlRlbXBlcmF0dXJlLCB0aGlzLmN1cnJlbnRTdGVwKSwgdGhpcy5wcmV2U3lzdGVtVGVtcGVyYXR1cmUgPSB0aGlzLnN5c3RlbVRlbXBlcmF0dXJlLCB0aGlzLnN5c3RlbVRlbXBlcmF0dXJlID0gdGhpcy5nZXRTeXN0ZW1UZW1wZXJhdHVyZSgpLCB0aGlzLmVuYWJsZVNpbXVsYXRpb24pIHtcbiAgICAgICAgICAgIGZvciAobGV0IGcgb2YgaClcbiAgICAgICAgICAgICAgZy5jaGFydCAmJiBnLnJlbmRlcigpO1xuICAgICAgICAgICAgdGhpcy5tYXhJdGVyYXRpb25zLS0gJiYgaXNGaW5pdGUodGhpcy50ZW1wZXJhdHVyZSkgJiYgIXRoaXMuaXNTdGFibGUoKSA/ICh0aGlzLnNpbXVsYXRpb24gJiYgZC5jYW5jZWxBbmltYXRpb25GcmFtZSh0aGlzLnNpbXVsYXRpb24pLCB0aGlzLnNpbXVsYXRpb24gPSBkLnJlcXVlc3RBbmltYXRpb25GcmFtZSgoKSA9PiB0aGlzLnN0ZXAoKSkpIDogKHRoaXMuc2ltdWxhdGlvbiA9ICExLCB0aGlzLnNlcmllcy5mb3JFYWNoKChnKSA9PiB7XG4gICAgICAgICAgICAgIEEoZywgXCJhZnRlclNpbXVsYXRpb25cIik7XG4gICAgICAgICAgICB9KSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHN0b3AoKSB7XG4gICAgICAgICAgdGhpcy5zaW11bGF0aW9uICYmIGQuY2FuY2VsQW5pbWF0aW9uRnJhbWUodGhpcy5zaW11bGF0aW9uKTtcbiAgICAgICAgfVxuICAgICAgICBzZXRBcmVhKGgsIGcsIHYsIEwpIHtcbiAgICAgICAgICB0aGlzLmJveCA9IHsgbGVmdDogaCwgdG9wOiBnLCB3aWR0aDogdiwgaGVpZ2h0OiBMIH07XG4gICAgICAgIH1cbiAgICAgICAgc2V0SygpIHtcbiAgICAgICAgICB0aGlzLmsgPSB0aGlzLm9wdGlvbnMubGlua0xlbmd0aCB8fCB0aGlzLmludGVncmF0aW9uLmdldEsodGhpcyk7XG4gICAgICAgIH1cbiAgICAgICAgYWRkRWxlbWVudHNUb0NvbGxlY3Rpb24oaCwgZykge1xuICAgICAgICAgIGZvciAobGV0IHYgb2YgaClcbiAgICAgICAgICAgIGcuaW5kZXhPZih2KSA9PT0gLTEgJiYgZy5wdXNoKHYpO1xuICAgICAgICB9XG4gICAgICAgIHJlbW92ZUVsZW1lbnRGcm9tQ29sbGVjdGlvbihoLCBnKSB7XG4gICAgICAgICAgbGV0IHYgPSBnLmluZGV4T2YoaCk7XG4gICAgICAgICAgdiAhPT0gLTEgJiYgZy5zcGxpY2UodiwgMSk7XG4gICAgICAgIH1cbiAgICAgICAgY2xlYXIoKSB7XG4gICAgICAgICAgdGhpcy5ub2Rlcy5sZW5ndGggPSAwLCB0aGlzLmxpbmtzLmxlbmd0aCA9IDAsIHRoaXMuc2VyaWVzLmxlbmd0aCA9IDAsIHRoaXMucmVzZXRTaW11bGF0aW9uKCk7XG4gICAgICAgIH1cbiAgICAgICAgcmVzZXRTaW11bGF0aW9uKCkge1xuICAgICAgICAgIHRoaXMuZm9yY2VkU3RvcCA9ICExLCB0aGlzLnN5c3RlbVRlbXBlcmF0dXJlID0gMCwgdGhpcy5zZXRNYXhJdGVyYXRpb25zKCksIHRoaXMuc2V0VGVtcGVyYXR1cmUoKSwgdGhpcy5zZXREaWZmVGVtcGVyYXR1cmUoKTtcbiAgICAgICAgfVxuICAgICAgICByZXN0YXJ0U2ltdWxhdGlvbigpIHtcbiAgICAgICAgICB0aGlzLnNpbXVsYXRpb24gPyB0aGlzLnJlc2V0U2ltdWxhdGlvbigpIDogKHRoaXMuc2V0SW5pdGlhbFJlbmRlcmluZyghMSksIHRoaXMuZW5hYmxlU2ltdWxhdGlvbiA/IHRoaXMuc3RhcnQoKSA6IHRoaXMuc2V0TWF4SXRlcmF0aW9ucygxKSwgdGhpcy5jaGFydCAmJiB0aGlzLmNoYXJ0LnJlZHJhdygpLCB0aGlzLnNldEluaXRpYWxSZW5kZXJpbmcoITApKTtcbiAgICAgICAgfVxuICAgICAgICBzZXRNYXhJdGVyYXRpb25zKGgpIHtcbiAgICAgICAgICB0aGlzLm1heEl0ZXJhdGlvbnMgPSB6KGgsIHRoaXMub3B0aW9ucy5tYXhJdGVyYXRpb25zKTtcbiAgICAgICAgfVxuICAgICAgICBzZXRUZW1wZXJhdHVyZSgpIHtcbiAgICAgICAgICB0aGlzLnRlbXBlcmF0dXJlID0gdGhpcy5zdGFydFRlbXBlcmF0dXJlID0gTWF0aC5zcXJ0KHRoaXMubm9kZXMubGVuZ3RoKTtcbiAgICAgICAgfVxuICAgICAgICBzZXREaWZmVGVtcGVyYXR1cmUoKSB7XG4gICAgICAgICAgdGhpcy5kaWZmVGVtcGVyYXR1cmUgPSB0aGlzLnN0YXJ0VGVtcGVyYXR1cmUgLyAodGhpcy5vcHRpb25zLm1heEl0ZXJhdGlvbnMgKyAxKTtcbiAgICAgICAgfVxuICAgICAgICBzZXRJbml0aWFsUmVuZGVyaW5nKGgpIHtcbiAgICAgICAgICB0aGlzLmluaXRpYWxSZW5kZXJpbmcgPSBoO1xuICAgICAgICB9XG4gICAgICAgIGNyZWF0ZVF1YWRUcmVlKCkge1xuICAgICAgICAgIHRoaXMucXVhZFRyZWUgPSBuZXcgcyh0aGlzLmJveC5sZWZ0LCB0aGlzLmJveC50b3AsIHRoaXMuYm94LndpZHRoLCB0aGlzLmJveC5oZWlnaHQpLCB0aGlzLnF1YWRUcmVlLmluc2VydE5vZGVzKHRoaXMubm9kZXMpO1xuICAgICAgICB9XG4gICAgICAgIGluaXRQb3NpdGlvbnMoKSB7XG4gICAgICAgICAgbGV0IGggPSB0aGlzLm9wdGlvbnMuaW5pdGlhbFBvc2l0aW9ucztcbiAgICAgICAgICBpZiAodShoKSlcbiAgICAgICAgICAgIGZvciAobGV0IGcgb2YgKGguY2FsbCh0aGlzKSwgdGhpcy5ub2RlcykpXG4gICAgICAgICAgICAgIE0oZy5wcmV2WCkgfHwgKGcucHJldlggPSBnLnBsb3RYKSwgTShnLnByZXZZKSB8fCAoZy5wcmV2WSA9IGcucGxvdFkpLCBnLmRpc3BYID0gMCwgZy5kaXNwWSA9IDA7XG4gICAgICAgICAgZWxzZVxuICAgICAgICAgICAgaCA9PT0gXCJjaXJjbGVcIiA/IHRoaXMuc2V0Q2lyY3VsYXJQb3NpdGlvbnMoKSA6IHRoaXMuc2V0UmFuZG9tUG9zaXRpb25zKCk7XG4gICAgICAgIH1cbiAgICAgICAgc2V0Q2lyY3VsYXJQb3NpdGlvbnMoKSB7XG4gICAgICAgICAgbGV0IGgsIGcgPSB0aGlzLmJveCwgdiA9IHRoaXMubm9kZXMsIEwgPSAyICogTWF0aC5QSSAvICh2Lmxlbmd0aCArIDEpLCB5ID0gdi5maWx0ZXIoZnVuY3Rpb24odykge1xuICAgICAgICAgICAgcmV0dXJuIHcubGlua3NUby5sZW5ndGggPT09IDA7XG4gICAgICAgICAgfSksIEIgPSB7fSwgWCA9IHRoaXMub3B0aW9ucy5pbml0aWFsUG9zaXRpb25SYWRpdXMsIEYgPSAodykgPT4ge1xuICAgICAgICAgICAgZm9yIChsZXQgSCBvZiB3LmxpbmtzRnJvbSB8fCBbXSlcbiAgICAgICAgICAgICAgQltILnRvTm9kZS5pZF0gfHwgKEJbSC50b05vZGUuaWRdID0gITAsIFQucHVzaChILnRvTm9kZSksIEYoSC50b05vZGUpKTtcbiAgICAgICAgICB9LCBUID0gW107XG4gICAgICAgICAgZm9yIChsZXQgdyBvZiB5KVxuICAgICAgICAgICAgVC5wdXNoKHcpLCBGKHcpO1xuICAgICAgICAgIGlmIChULmxlbmd0aClcbiAgICAgICAgICAgIGZvciAobGV0IHcgb2YgdilcbiAgICAgICAgICAgICAgVC5pbmRleE9mKHcpID09PSAtMSAmJiBULnB1c2godyk7XG4gICAgICAgICAgZWxzZVxuICAgICAgICAgICAgVCA9IHY7XG4gICAgICAgICAgZm9yIChsZXQgdyA9IDAsIEggPSBULmxlbmd0aDsgdyA8IEg7ICsrdylcbiAgICAgICAgICAgIChoID0gVFt3XSkucGxvdFggPSBoLnByZXZYID0geihoLnBsb3RYLCBnLndpZHRoIC8gMiArIFggKiBNYXRoLmNvcyh3ICogTCkpLCBoLnBsb3RZID0gaC5wcmV2WSA9IHooaC5wbG90WSwgZy5oZWlnaHQgLyAyICsgWCAqIE1hdGguc2luKHcgKiBMKSksIGguZGlzcFggPSAwLCBoLmRpc3BZID0gMDtcbiAgICAgICAgfVxuICAgICAgICBzZXRSYW5kb21Qb3NpdGlvbnMoKSB7XG4gICAgICAgICAgbGV0IGgsIGcgPSB0aGlzLmJveCwgdiA9IHRoaXMubm9kZXMsIEwgPSB2Lmxlbmd0aCArIDEsIHkgPSAoQikgPT4ge1xuICAgICAgICAgICAgbGV0IFggPSBCICogQiAvIE1hdGguUEk7XG4gICAgICAgICAgICByZXR1cm4gWCAtIE1hdGguZmxvb3IoWCk7XG4gICAgICAgICAgfTtcbiAgICAgICAgICBmb3IgKGxldCBCID0gMCwgWCA9IHYubGVuZ3RoOyBCIDwgWDsgKytCKVxuICAgICAgICAgICAgKGggPSB2W0JdKS5wbG90WCA9IGgucHJldlggPSB6KGgucGxvdFgsIGcud2lkdGggKiB5KEIpKSwgaC5wbG90WSA9IGgucHJldlkgPSB6KGgucGxvdFksIGcuaGVpZ2h0ICogeShMICsgQikpLCBoLmRpc3BYID0gMCwgaC5kaXNwWSA9IDA7XG4gICAgICAgIH1cbiAgICAgICAgZm9yY2UoaCwgLi4uZykge1xuICAgICAgICAgIHRoaXMuaW50ZWdyYXRpb25baF0uYXBwbHkodGhpcywgZyk7XG4gICAgICAgIH1cbiAgICAgICAgYmFyeWNlbnRlckZvcmNlcygpIHtcbiAgICAgICAgICB0aGlzLmdldEJhcnljZW50ZXIoKSwgdGhpcy5mb3JjZShcImJhcnljZW50ZXJcIik7XG4gICAgICAgIH1cbiAgICAgICAgZ2V0QmFyeWNlbnRlcigpIHtcbiAgICAgICAgICBsZXQgaCA9IDAsIGcgPSAwLCB2ID0gMDtcbiAgICAgICAgICBmb3IgKGxldCBMIG9mIHRoaXMubm9kZXMpXG4gICAgICAgICAgICBnICs9IEwucGxvdFggKiBMLm1hc3MsIHYgKz0gTC5wbG90WSAqIEwubWFzcywgaCArPSBMLm1hc3M7XG4gICAgICAgICAgcmV0dXJuIHRoaXMuYmFyeWNlbnRlciA9IHsgeDogZywgeTogdiwgeEZhY3RvcjogZyAvIGgsIHlGYWN0b3I6IHYgLyBoIH0sIHRoaXMuYmFyeWNlbnRlcjtcbiAgICAgICAgfVxuICAgICAgICBiYXJuZXNIdXRBcHByb3hpbWF0aW9uKGgsIGcpIHtcbiAgICAgICAgICBsZXQgdiwgTCwgeSA9IHRoaXMuZ2V0RGlzdFhZKGgsIGcpLCBCID0gdGhpcy52ZWN0b3JMZW5ndGgoeSk7XG4gICAgICAgICAgcmV0dXJuIGggIT09IGcgJiYgQiAhPT0gMCAmJiAoZy5pc0ludGVybmFsID8gZy5ib3hTaXplIC8gQiA8IHRoaXMub3B0aW9ucy50aGV0YSAmJiBCICE9PSAwID8gKEwgPSB0aGlzLnJlcHVsc2l2ZUZvcmNlKEIsIHRoaXMuayksIHRoaXMuZm9yY2UoXCJyZXB1bHNpdmVcIiwgaCwgTCAqIGcubWFzcywgeSwgQiksIHYgPSAhMSkgOiB2ID0gITAgOiAoTCA9IHRoaXMucmVwdWxzaXZlRm9yY2UoQiwgdGhpcy5rKSwgdGhpcy5mb3JjZShcInJlcHVsc2l2ZVwiLCBoLCBMICogZy5tYXNzLCB5LCBCKSkpLCB2O1xuICAgICAgICB9XG4gICAgICAgIHJlcHVsc2l2ZUZvcmNlcygpIHtcbiAgICAgICAgICBpZiAodGhpcy5hcHByb3hpbWF0aW9uID09PSBcImJhcm5lcy1odXRcIilcbiAgICAgICAgICAgIGZvciAobGV0IGggb2YgdGhpcy5ub2RlcylcbiAgICAgICAgICAgICAgdGhpcy5xdWFkVHJlZS52aXNpdE5vZGVSZWN1cnNpdmUobnVsbCwgKGcpID0+IHRoaXMuYmFybmVzSHV0QXBwcm94aW1hdGlvbihoLCBnKSk7XG4gICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBsZXQgaCwgZywgdjtcbiAgICAgICAgICAgIGZvciAobGV0IEwgb2YgdGhpcy5ub2RlcylcbiAgICAgICAgICAgICAgZm9yIChsZXQgeSBvZiB0aGlzLm5vZGVzKVxuICAgICAgICAgICAgICAgIEwgPT09IHkgfHwgTC5maXhlZFBvc2l0aW9uIHx8ICh2ID0gdGhpcy5nZXREaXN0WFkoTCwgeSksIChnID0gdGhpcy52ZWN0b3JMZW5ndGgodikpICE9PSAwICYmIChoID0gdGhpcy5yZXB1bHNpdmVGb3JjZShnLCB0aGlzLmspLCB0aGlzLmZvcmNlKFwicmVwdWxzaXZlXCIsIEwsIGggKiB5Lm1hc3MsIHYsIGcpKSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGF0dHJhY3RpdmVGb3JjZXMoKSB7XG4gICAgICAgICAgbGV0IGgsIGcsIHY7XG4gICAgICAgICAgZm9yIChsZXQgTCBvZiB0aGlzLmxpbmtzKVxuICAgICAgICAgICAgTC5mcm9tTm9kZSAmJiBMLnRvTm9kZSAmJiAoaCA9IHRoaXMuZ2V0RGlzdFhZKEwuZnJvbU5vZGUsIEwudG9Ob2RlKSwgKGcgPSB0aGlzLnZlY3Rvckxlbmd0aChoKSkgIT09IDAgJiYgKHYgPSB0aGlzLmF0dHJhY3RpdmVGb3JjZShnLCB0aGlzLmspLCB0aGlzLmZvcmNlKFwiYXR0cmFjdGl2ZVwiLCBMLCB2LCBoLCBnKSkpO1xuICAgICAgICB9XG4gICAgICAgIGFwcGx5TGltaXRzKCkge1xuICAgICAgICAgIGZvciAobGV0IGggb2YgdGhpcy5ub2RlcylcbiAgICAgICAgICAgIGguZml4ZWRQb3NpdGlvbiB8fCAodGhpcy5pbnRlZ3JhdGlvbi5pbnRlZ3JhdGUodGhpcywgaCksIHRoaXMuYXBwbHlMaW1pdEJveChoLCB0aGlzLmJveCksIGguZGlzcFggPSAwLCBoLmRpc3BZID0gMCk7XG4gICAgICAgIH1cbiAgICAgICAgYXBwbHlMaW1pdEJveChoLCBnKSB7XG4gICAgICAgICAgbGV0IHYgPSBoLnJhZGl1cztcbiAgICAgICAgICBoLnBsb3RYID0gYihoLnBsb3RYLCBnLmxlZnQgKyB2LCBnLndpZHRoIC0gdiksIGgucGxvdFkgPSBiKGgucGxvdFksIGcudG9wICsgdiwgZy5oZWlnaHQgLSB2KTtcbiAgICAgICAgfVxuICAgICAgICBjb29sRG93bihoLCBnLCB2KSB7XG4gICAgICAgICAgcmV0dXJuIGggLSBnICogdjtcbiAgICAgICAgfVxuICAgICAgICBpc1N0YWJsZSgpIHtcbiAgICAgICAgICByZXR1cm4gMWUtNSA+IE1hdGguYWJzKHRoaXMuc3lzdGVtVGVtcGVyYXR1cmUgLSB0aGlzLnByZXZTeXN0ZW1UZW1wZXJhdHVyZSkgfHwgdGhpcy50ZW1wZXJhdHVyZSA8PSAwO1xuICAgICAgICB9XG4gICAgICAgIGdldFN5c3RlbVRlbXBlcmF0dXJlKCkge1xuICAgICAgICAgIGxldCBoID0gMDtcbiAgICAgICAgICBmb3IgKGxldCBnIG9mIHRoaXMubm9kZXMpXG4gICAgICAgICAgICBoICs9IGcudGVtcGVyYXR1cmU7XG4gICAgICAgICAgcmV0dXJuIGg7XG4gICAgICAgIH1cbiAgICAgICAgdmVjdG9yTGVuZ3RoKGgpIHtcbiAgICAgICAgICByZXR1cm4gTWF0aC5zcXJ0KGgueCAqIGgueCArIGgueSAqIGgueSk7XG4gICAgICAgIH1cbiAgICAgICAgZ2V0RGlzdFIoaCwgZykge1xuICAgICAgICAgIGxldCB2ID0gdGhpcy5nZXREaXN0WFkoaCwgZyk7XG4gICAgICAgICAgcmV0dXJuIHRoaXMudmVjdG9yTGVuZ3RoKHYpO1xuICAgICAgICB9XG4gICAgICAgIGdldERpc3RYWShoLCBnKSB7XG4gICAgICAgICAgbGV0IHYgPSBoLnBsb3RYIC0gZy5wbG90WCwgTCA9IGgucGxvdFkgLSBnLnBsb3RZO1xuICAgICAgICAgIHJldHVybiB7IHg6IHYsIHk6IEwsIGFic1g6IE1hdGguYWJzKHYpLCBhYnNZOiBNYXRoLmFicyhMKSB9O1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gZjtcbiAgICB9KSwgbihvLCBcIlNlcmllcy9QYWNrZWRCdWJibGUvUGFja2VkQnViYmxlTGF5b3V0LmpzXCIsIFtvW1wiU2VyaWVzL0dyYXBoTGF5b3V0Q29tcG9zaXRpb24uanNcIl0sIG9bXCJTZXJpZXMvUGFja2VkQnViYmxlL1BhY2tlZEJ1YmJsZUludGVncmF0aW9uLmpzXCJdLCBvW1wiU2VyaWVzL05ldHdvcmtncmFwaC9SZWluZ29sZEZydWNodGVybWFuTGF5b3V0LmpzXCJdLCBvW1wiQ29yZS9VdGlsaXRpZXMuanNcIl1dLCBmdW5jdGlvbihyLCBpLCBhLCBzKSB7XG4gICAgICBsZXQgeyBhZGRFdmVudDogbCwgcGljazogcCB9ID0gcztcbiAgICAgIGZ1bmN0aW9uIGQoKSB7XG4gICAgICAgIGxldCB1ID0gdGhpcy5zZXJpZXMsIEEgPSBbXTtcbiAgICAgICAgcmV0dXJuIHUuZm9yRWFjaCgoeikgPT4ge1xuICAgICAgICAgIHoucGFyZW50Tm9kZSAmJiB6LnBhcmVudE5vZGUuc2VsZWN0ZWQgJiYgQS5wdXNoKHoucGFyZW50Tm9kZSk7XG4gICAgICAgIH0pLCBBO1xuICAgICAgfVxuICAgICAgZnVuY3Rpb24gYigpIHtcbiAgICAgICAgdGhpcy5hbGxEYXRhUG9pbnRzICYmIGRlbGV0ZSB0aGlzLmFsbERhdGFQb2ludHM7XG4gICAgICB9XG4gICAgICBjbGFzcyBNIGV4dGVuZHMgYSB7XG4gICAgICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICAgIHN1cGVyKC4uLmFyZ3VtZW50cyksIHRoaXMuaW5kZXggPSBOYU4sIHRoaXMubm9kZXMgPSBbXSwgdGhpcy5zZXJpZXMgPSBbXTtcbiAgICAgICAgfVxuICAgICAgICBzdGF0aWMgY29tcG9zZShBKSB7XG4gICAgICAgICAgYS5jb21wb3NlKEEpLCByLmludGVncmF0aW9ucy5wYWNrZWRidWJibGUgPSBpLCByLmxheW91dHMucGFja2VkYnViYmxlID0gTTtcbiAgICAgICAgICBsZXQgeiA9IEEucHJvdG90eXBlO1xuICAgICAgICAgIHouZ2V0U2VsZWN0ZWRQYXJlbnROb2RlcyB8fCAobChBLCBcImJlZm9yZVJlZHJhd1wiLCBiKSwgei5nZXRTZWxlY3RlZFBhcmVudE5vZGVzID0gZCk7XG4gICAgICAgIH1cbiAgICAgICAgYmVmb3JlU3RlcCgpIHtcbiAgICAgICAgICB0aGlzLm9wdGlvbnMubWFya2VyICYmIHRoaXMuc2VyaWVzLmZvckVhY2goKEEpID0+IHtcbiAgICAgICAgICAgIEEgJiYgQS5jYWxjdWxhdGVQYXJlbnRSYWRpdXMoKTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBpc1N0YWJsZSgpIHtcbiAgICAgICAgICBsZXQgQSA9IE1hdGguYWJzKHRoaXMucHJldlN5c3RlbVRlbXBlcmF0dXJlIC0gdGhpcy5zeXN0ZW1UZW1wZXJhdHVyZSk7XG4gICAgICAgICAgcmV0dXJuIDEgPiBNYXRoLmFicygxMCAqIHRoaXMuc3lzdGVtVGVtcGVyYXR1cmUgLyBNYXRoLnNxcnQodGhpcy5ub2Rlcy5sZW5ndGgpKSAmJiBBIDwgMWUtNSB8fCB0aGlzLnRlbXBlcmF0dXJlIDw9IDA7XG4gICAgICAgIH1cbiAgICAgICAgc2V0Q2lyY3VsYXJQb3NpdGlvbnMoKSB7XG4gICAgICAgICAgbGV0IEEgPSB0aGlzLmJveCwgeiA9IHRoaXMubm9kZXMsIGYgPSAyICogTWF0aC5QSSAvICh6Lmxlbmd0aCArIDEpLCBPID0gdGhpcy5vcHRpb25zLmluaXRpYWxQb3NpdGlvblJhZGl1cywgaCwgZywgdiA9IDA7XG4gICAgICAgICAgZm9yIChsZXQgTCBvZiB6KVxuICAgICAgICAgICAgdGhpcy5vcHRpb25zLnNwbGl0U2VyaWVzICYmICFMLmlzUGFyZW50Tm9kZSA/IChoID0gTC5zZXJpZXMucGFyZW50Tm9kZS5wbG90WCwgZyA9IEwuc2VyaWVzLnBhcmVudE5vZGUucGxvdFkpIDogKGggPSBBLndpZHRoIC8gMiwgZyA9IEEuaGVpZ2h0IC8gMiksIEwucGxvdFggPSBMLnByZXZYID0gcChMLnBsb3RYLCBoICsgTyAqIE1hdGguY29zKEwuaW5kZXggfHwgdiAqIGYpKSwgTC5wbG90WSA9IEwucHJldlkgPSBwKEwucGxvdFksIGcgKyBPICogTWF0aC5zaW4oTC5pbmRleCB8fCB2ICogZikpLCBMLmRpc3BYID0gMCwgTC5kaXNwWSA9IDAsIHYrKztcbiAgICAgICAgfVxuICAgICAgICByZXB1bHNpdmVGb3JjZXMoKSB7XG4gICAgICAgICAgbGV0IEEsIHosIGYsIE8gPSB0aGlzLCBoID0gTy5vcHRpb25zLmJ1YmJsZVBhZGRpbmcsIGcgPSBPLm5vZGVzO1xuICAgICAgICAgIGcuZm9yRWFjaCgodikgPT4ge1xuICAgICAgICAgICAgdi5kZWdyZWUgPSB2Lm1hc3MsIHYubmVpZ2hib3VycyA9IDAsIGcuZm9yRWFjaCgoTCkgPT4ge1xuICAgICAgICAgICAgICBBID0gMCwgdiAhPT0gTCAmJiAhdi5maXhlZFBvc2l0aW9uICYmIChPLm9wdGlvbnMuc2VyaWVzSW50ZXJhY3Rpb24gfHwgdi5zZXJpZXMgPT09IEwuc2VyaWVzKSAmJiAoZiA9IE8uZ2V0RGlzdFhZKHYsIEwpLCAoeiA9IE8udmVjdG9yTGVuZ3RoKGYpIC0gKHYubWFya2VyLnJhZGl1cyArIEwubWFya2VyLnJhZGl1cyArIGgpKSA8IDAgJiYgKHYuZGVncmVlICs9IDAuMDEsIHYubmVpZ2hib3VycysrLCBBID0gTy5yZXB1bHNpdmVGb3JjZSgteiAvIE1hdGguc3FydCh2Lm5laWdoYm91cnMpLCBPLmssIHYsIEwpKSwgTy5mb3JjZShcInJlcHVsc2l2ZVwiLCB2LCBBICogTC5tYXNzLCBmLCBMLCB6KSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBhcHBseUxpbWl0Qm94KEEsIHopIHtcbiAgICAgICAgICBsZXQgZiwgTztcbiAgICAgICAgICB0aGlzLm9wdGlvbnMuc3BsaXRTZXJpZXMgJiYgIUEuaXNQYXJlbnROb2RlICYmIHRoaXMub3B0aW9ucy5wYXJlbnROb2RlTGltaXQgJiYgKGYgPSB0aGlzLmdldERpc3RYWShBLCBBLnNlcmllcy5wYXJlbnROb2RlKSwgKE8gPSBBLnNlcmllcy5wYXJlbnROb2RlUmFkaXVzIC0gQS5tYXJrZXIucmFkaXVzIC0gdGhpcy52ZWN0b3JMZW5ndGgoZikpIDwgMCAmJiBPID4gLTIgKiBBLm1hcmtlci5yYWRpdXMgJiYgKEEucGxvdFggLT0gMC4wMSAqIGYueCwgQS5wbG90WSAtPSAwLjAxICogZi55KSksIHN1cGVyLmFwcGx5TGltaXRCb3goQSwgeik7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiByLmxheW91dHMucGFja2VkYnViYmxlID0gTSwgTTtcbiAgICB9KSwgbihvLCBcIlNlcmllcy9TaW11bGF0aW9uU2VyaWVzVXRpbGl0aWVzLmpzXCIsIFtvW1wiQ29yZS9VdGlsaXRpZXMuanNcIl0sIG9bXCJDb3JlL0FuaW1hdGlvbi9BbmltYXRpb25VdGlsaXRpZXMuanNcIl1dLCBmdW5jdGlvbihyLCBpKSB7XG4gICAgICBsZXQgeyBtZXJnZTogYSwgc3luY1RpbWVvdXQ6IHMgfSA9IHIsIHsgYW5pbU9iamVjdDogbCB9ID0gaTtcbiAgICAgIHJldHVybiB7IGluaXREYXRhTGFiZWxzOiBmdW5jdGlvbigpIHtcbiAgICAgICAgbGV0IHAgPSB0aGlzLm9wdGlvbnMuZGF0YUxhYmVscztcbiAgICAgICAgaWYgKCF0aGlzLmRhdGFMYWJlbHNHcm91cCkge1xuICAgICAgICAgIGxldCBkID0gdGhpcy5pbml0RGF0YUxhYmVsc0dyb3VwKCk7XG4gICAgICAgICAgcmV0dXJuICF0aGlzLmNoYXJ0LnN0eWxlZE1vZGUgJiYgKHAgIT0gbnVsbCAmJiBwLnN0eWxlKSAmJiBkLmNzcyhwLnN0eWxlKSwgZC5hdHRyKHsgb3BhY2l0eTogMCB9KSwgdGhpcy52aXNpYmxlICYmIGQuc2hvdygpLCBkO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzLmRhdGFMYWJlbHNHcm91cC5hdHRyKGEoeyBvcGFjaXR5OiAxIH0sIHRoaXMuZ2V0UGxvdEJveChcImRhdGEtbGFiZWxzXCIpKSksIHRoaXMuZGF0YUxhYmVsc0dyb3VwO1xuICAgICAgfSwgaW5pdERhdGFMYWJlbHNEZWZlcjogZnVuY3Rpb24oKSB7XG4gICAgICAgIHZhciBkO1xuICAgICAgICBsZXQgcCA9IHRoaXMub3B0aW9ucy5kYXRhTGFiZWxzO1xuICAgICAgICBwICE9IG51bGwgJiYgcC5kZWZlciAmJiAoKGQgPSB0aGlzLm9wdGlvbnMubGF5b3V0QWxnb3JpdGhtKSAhPSBudWxsICYmIGQuZW5hYmxlU2ltdWxhdGlvbikgPyBzKCgpID0+IHtcbiAgICAgICAgICB0aGlzLmRlZmVyRGF0YUxhYmVscyA9ICExO1xuICAgICAgICB9LCBwID8gbChwLmFuaW1hdGlvbikuZGVmZXIgOiAwKSA6IHRoaXMuZGVmZXJEYXRhTGFiZWxzID0gITE7XG4gICAgICB9IH07XG4gICAgfSksIG4obywgXCJFeHRlbnNpb25zL1RleHRQYXRoLmpzXCIsIFtvW1wiQ29yZS9HbG9iYWxzLmpzXCJdLCBvW1wiQ29yZS9VdGlsaXRpZXMuanNcIl1dLCBmdW5jdGlvbihyLCBpKSB7XG4gICAgICBsZXQgeyBkZWcycmFkOiBhIH0gPSByLCB7IGFkZEV2ZW50OiBzLCBtZXJnZTogbCwgdW5pcXVlS2V5OiBwLCBkZWZpbmVkOiBkLCBleHRlbmQ6IGIgfSA9IGk7XG4gICAgICBmdW5jdGlvbiBNKHosIGYpIHtcbiAgICAgICAgZiA9IGwoITAsIHsgZW5hYmxlZDogITAsIGF0dHJpYnV0ZXM6IHsgZHk6IC01LCBzdGFydE9mZnNldDogXCI1MCVcIiwgdGV4dEFuY2hvcjogXCJtaWRkbGVcIiB9IH0sIGYpO1xuICAgICAgICBsZXQgTyA9IHRoaXMucmVuZGVyZXIudXJsLCBoID0gdGhpcy50ZXh0IHx8IHRoaXMsIGcgPSBoLnRleHRQYXRoLCB7IGF0dHJpYnV0ZXM6IHYsIGVuYWJsZWQ6IEwgfSA9IGY7XG4gICAgICAgIGlmICh6ID0geiB8fCBnICYmIGcucGF0aCwgZyAmJiBnLnVuZG8oKSwgeiAmJiBMKSB7XG4gICAgICAgICAgbGV0IHkgPSBzKGgsIFwiYWZ0ZXJNb2RpZnlUcmVlXCIsIChCKSA9PiB7XG4gICAgICAgICAgICBpZiAoeiAmJiBMKSB7XG4gICAgICAgICAgICAgIGxldCBYID0gei5hdHRyKFwiaWRcIik7XG4gICAgICAgICAgICAgIFggfHwgei5hdHRyKFwiaWRcIiwgWCA9IHAoKSk7XG4gICAgICAgICAgICAgIGxldCBGID0geyB4OiAwLCB5OiAwIH07XG4gICAgICAgICAgICAgIGQodi5keCkgJiYgKEYuZHggPSB2LmR4LCBkZWxldGUgdi5keCksIGQodi5keSkgJiYgKEYuZHkgPSB2LmR5LCBkZWxldGUgdi5keSksIGguYXR0cihGKSwgdGhpcy5hdHRyKHsgdHJhbnNmb3JtOiBcIlwiIH0pLCB0aGlzLmJveCAmJiAodGhpcy5ib3ggPSB0aGlzLmJveC5kZXN0cm95KCkpO1xuICAgICAgICAgICAgICBsZXQgVCA9IEIubm9kZXMuc2xpY2UoMCk7XG4gICAgICAgICAgICAgIEIubm9kZXMubGVuZ3RoID0gMCwgQi5ub2Rlc1swXSA9IHsgdGFnTmFtZTogXCJ0ZXh0UGF0aFwiLCBhdHRyaWJ1dGVzOiBiKHYsIHsgXCJ0ZXh0LWFuY2hvclwiOiB2LnRleHRBbmNob3IsIGhyZWY6IGAke099IyR7WH1gIH0pLCBjaGlsZHJlbjogVCB9O1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pO1xuICAgICAgICAgIGgudGV4dFBhdGggPSB7IHBhdGg6IHosIHVuZG86IHkgfTtcbiAgICAgICAgfSBlbHNlXG4gICAgICAgICAgaC5hdHRyKHsgZHg6IDAsIGR5OiAwIH0pLCBkZWxldGUgaC50ZXh0UGF0aDtcbiAgICAgICAgcmV0dXJuIHRoaXMuYWRkZWQgJiYgKGgudGV4dENhY2hlID0gXCJcIiwgdGhpcy5yZW5kZXJlci5idWlsZFRleHQoaCkpLCB0aGlzO1xuICAgICAgfVxuICAgICAgZnVuY3Rpb24gdSh6KSB7XG4gICAgICAgIHZhciBoO1xuICAgICAgICBsZXQgZiA9IHouYkJveCwgTyA9IChoID0gdGhpcy5lbGVtZW50KSA9PSBudWxsID8gdm9pZCAwIDogaC5xdWVyeVNlbGVjdG9yKFwidGV4dFBhdGhcIik7XG4gICAgICAgIGlmIChPKSB7XG4gICAgICAgICAgbGV0IGcgPSBbXSwgeyBiOiB2LCBoOiBMIH0gPSB0aGlzLnJlbmRlcmVyLmZvbnRNZXRyaWNzKHRoaXMuZWxlbWVudCksIHkgPSBMIC0gdiwgQiA9IFJlZ0V4cCgnKDx0c3Bhbj58PHRzcGFuKD8hXFxcXHNjbGFzcz1cImhpZ2hjaGFydHMtYnJcIilbXj5dKj58PFxcXFwvdHNwYW4+KScsIFwiZ1wiKSwgWCA9IE8uaW5uZXJIVE1MLnJlcGxhY2UoQiwgXCJcIikuc3BsaXQoLzx0c3BhbiBjbGFzcz1cImhpZ2hjaGFydHMtYnJcIltePl0qPi8pLCBGID0gWC5sZW5ndGgsIFQgPSAodywgSCkgPT4ge1xuICAgICAgICAgICAgbGV0IHsgeDogQywgeTogcSB9ID0gSCwgbSA9IChPLmdldFJvdGF0aW9uT2ZDaGFyKHcpIC0gOTApICogYSwgayA9IE1hdGguY29zKG0pLCB4ID0gTWF0aC5zaW4obSk7XG4gICAgICAgICAgICByZXR1cm4gW1tDIC0geSAqIGssIHEgLSB5ICogeF0sIFtDICsgdiAqIGssIHEgKyB2ICogeF1dO1xuICAgICAgICAgIH07XG4gICAgICAgICAgZm9yIChsZXQgdyA9IDAsIEggPSAwOyBIIDwgRjsgSCsrKSB7XG4gICAgICAgICAgICBsZXQgQyA9IFhbSF0ubGVuZ3RoO1xuICAgICAgICAgICAgZm9yIChsZXQgcSA9IDA7IHEgPCBDOyBxICs9IDUpXG4gICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgbGV0IG0gPSB3ICsgcSArIEgsIFtrLCB4XSA9IFQobSwgTy5nZXRTdGFydFBvc2l0aW9uT2ZDaGFyKG0pKTtcbiAgICAgICAgICAgICAgICBxID09PSAwID8gKGcucHVzaCh4KSwgZy5wdXNoKGspKSA6IChIID09PSAwICYmIGcudW5zaGlmdCh4KSwgSCA9PT0gRiAtIDEgJiYgZy5wdXNoKGspKTtcbiAgICAgICAgICAgICAgfSBjYXRjaCB7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHcgKz0gQyAtIDE7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICBsZXQgcSA9IHcgKyBILCBtID0gTy5nZXRFbmRQb3NpdGlvbk9mQ2hhcihxKSwgW2ssIHhdID0gVChxLCBtKTtcbiAgICAgICAgICAgICAgZy51bnNoaWZ0KHgpLCBnLnVuc2hpZnQoayk7XG4gICAgICAgICAgICB9IGNhdGNoIHtcbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIGcubGVuZ3RoICYmIGcucHVzaChnWzBdLnNsaWNlKCkpLCBmLnBvbHlnb24gPSBnO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBmO1xuICAgICAgfVxuICAgICAgZnVuY3Rpb24gQSh6KSB7XG4gICAgICAgIHZhciBnO1xuICAgICAgICBsZXQgZiA9IHoubGFiZWxPcHRpb25zLCBPID0gei5wb2ludCwgaCA9IGZbTy5mb3JtYXRQcmVmaXggKyBcIlRleHRQYXRoXCJdIHx8IGYudGV4dFBhdGg7XG4gICAgICAgIGggJiYgIWYudXNlSFRNTCAmJiAodGhpcy5zZXRUZXh0UGF0aCgoKGcgPSBPLmdldERhdGFMYWJlbFBhdGgpID09IG51bGwgPyB2b2lkIDAgOiBnLmNhbGwoTywgdGhpcykpIHx8IE8uZ3JhcGhpYywgaCksIE8uZGF0YUxhYmVsUGF0aCAmJiAhaC5lbmFibGVkICYmIChPLmRhdGFMYWJlbFBhdGggPSBPLmRhdGFMYWJlbFBhdGguZGVzdHJveSgpKSk7XG4gICAgICB9XG4gICAgICByZXR1cm4geyBjb21wb3NlOiBmdW5jdGlvbih6KSB7XG4gICAgICAgIHMoeiwgXCJhZnRlckdldEJCb3hcIiwgdSksIHMoeiwgXCJiZWZvcmVBZGRpbmdEYXRhTGFiZWxcIiwgQSk7XG4gICAgICAgIGxldCBmID0gei5wcm90b3R5cGU7XG4gICAgICAgIGYuc2V0VGV4dFBhdGggfHwgKGYuc2V0VGV4dFBhdGggPSBNKTtcbiAgICAgIH0gfTtcbiAgICB9KSwgbihvLCBcIlNlcmllcy9QYWNrZWRCdWJibGUvUGFja2VkQnViYmxlU2VyaWVzLmpzXCIsIFtvW1wiQ29yZS9Db2xvci9Db2xvci5qc1wiXSwgb1tcIlNlcmllcy9EcmFnTm9kZXNDb21wb3NpdGlvbi5qc1wiXSwgb1tcIlNlcmllcy9HcmFwaExheW91dENvbXBvc2l0aW9uLmpzXCJdLCBvW1wiQ29yZS9HbG9iYWxzLmpzXCJdLCBvW1wiU2VyaWVzL1BhY2tlZEJ1YmJsZS9QYWNrZWRCdWJibGVQb2ludC5qc1wiXSwgb1tcIlNlcmllcy9QYWNrZWRCdWJibGUvUGFja2VkQnViYmxlU2VyaWVzRGVmYXVsdHMuanNcIl0sIG9bXCJTZXJpZXMvUGFja2VkQnViYmxlL1BhY2tlZEJ1YmJsZUxheW91dC5qc1wiXSwgb1tcIkNvcmUvU2VyaWVzL1Nlcmllc1JlZ2lzdHJ5LmpzXCJdLCBvW1wiU2VyaWVzL1NpbXVsYXRpb25TZXJpZXNVdGlsaXRpZXMuanNcIl0sIG9bXCJDb3JlL1V0aWxpdGllcy5qc1wiXSwgb1tcIkNvcmUvUmVuZGVyZXIvU1ZHL1NWR0VsZW1lbnQuanNcIl0sIG9bXCJFeHRlbnNpb25zL1RleHRQYXRoLmpzXCJdXSwgZnVuY3Rpb24ociwgaSwgYSwgcywgbCwgcCwgZCwgYiwgTSwgdSwgQSwgeikge1xuICAgICAgbGV0IHsgcGFyc2U6IGYgfSA9IHIsIHsgbm9vcDogTyB9ID0gcywgeyBzZXJpZXM6IHsgcHJvdG90eXBlOiBoIH0sIHNlcmllc1R5cGVzOiB7IGJ1YmJsZTogZyB9IH0gPSBiLCB7IGluaXREYXRhTGFiZWxzOiB2LCBpbml0RGF0YUxhYmVsc0RlZmVyOiBMIH0gPSBNLCB7IGFkZEV2ZW50OiB5LCBjbGFtcDogQiwgZGVmaW5lZDogWCwgZXh0ZW5kOiBGLCBmaXJlRXZlbnQ6IFQsIGlzQXJyYXk6IHcsIGlzTnVtYmVyOiBILCBtZXJnZTogQywgcGljazogcSB9ID0gdTtcbiAgICAgIHouY29tcG9zZShBKTtcbiAgICAgIGNsYXNzIG0gZXh0ZW5kcyBnIHtcbiAgICAgICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgICAgc3VwZXIoLi4uYXJndW1lbnRzKSwgdGhpcy5wYXJlbnROb2RlTWFzcyA9IDAsIHRoaXMuZGVmZXJEYXRhTGFiZWxzID0gITA7XG4gICAgICAgIH1cbiAgICAgICAgc3RhdGljIGNvbXBvc2UoeCwgTiwgVikge1xuICAgICAgICAgIGcuY29tcG9zZSh4LCBOLCBWKSwgaS5jb21wb3NlKE4pLCBkLmNvbXBvc2UoTik7XG4gICAgICAgIH1cbiAgICAgICAgYWNjdW11bGF0ZUFsbFBvaW50cygpIHtcbiAgICAgICAgICBsZXQgeCwgTiA9IHRoaXMuY2hhcnQsIFYgPSBbXTtcbiAgICAgICAgICBmb3IgKGxldCBSIG9mIE4uc2VyaWVzKVxuICAgICAgICAgICAgaWYgKFIuaXMoXCJwYWNrZWRidWJibGVcIikgJiYgUi5yZXNlcnZlU3BhY2UoKSkge1xuICAgICAgICAgICAgICB4ID0gUi55RGF0YSB8fCBbXTtcbiAgICAgICAgICAgICAgZm9yIChsZXQgSSA9IDA7IEkgPCB4Lmxlbmd0aDsgSSsrKVxuICAgICAgICAgICAgICAgIFYucHVzaChbbnVsbCwgbnVsbCwgeFtJXSwgUi5pbmRleCwgSSwgeyBpZDogSSwgbWFya2VyOiB7IHJhZGl1czogMCB9IH1dKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gVjtcbiAgICAgICAgfVxuICAgICAgICBhZGRMYXlvdXQoKSB7XG4gICAgICAgICAgbGV0IHggPSB0aGlzLm9wdGlvbnMubGF5b3V0QWxnb3JpdGhtID0gdGhpcy5vcHRpb25zLmxheW91dEFsZ29yaXRobSB8fCB7fSwgTiA9IHgudHlwZSB8fCBcInBhY2tlZGJ1YmJsZVwiLCBWID0gdGhpcy5jaGFydC5vcHRpb25zLmNoYXJ0LCBSID0gdGhpcy5jaGFydC5ncmFwaExheW91dHNTdG9yYWdlLCBJID0gdGhpcy5jaGFydC5ncmFwaExheW91dHNMb29rdXAsIGo7XG4gICAgICAgICAgUiB8fCAodGhpcy5jaGFydC5ncmFwaExheW91dHNTdG9yYWdlID0gUiA9IHt9LCB0aGlzLmNoYXJ0LmdyYXBoTGF5b3V0c0xvb2t1cCA9IEkgPSBbXSksIChqID0gUltOXSkgfHwgKHguZW5hYmxlU2ltdWxhdGlvbiA9IFgoVi5mb3JFeHBvcnQpID8gIVYuZm9yRXhwb3J0IDogeC5lbmFibGVTaW11bGF0aW9uLCBSW05dID0gaiA9IG5ldyBhLmxheW91dHNbTl0oKSwgai5pbml0KHgpLCBJLnNwbGljZShqLmluZGV4LCAwLCBqKSksIHRoaXMubGF5b3V0ID0gaiwgdGhpcy5wb2ludHMuZm9yRWFjaCgoVSkgPT4ge1xuICAgICAgICAgICAgVS5tYXNzID0gMiwgVS5kZWdyZWUgPSAxLCBVLmNvbGxpc2lvbk5tYiA9IDE7XG4gICAgICAgICAgfSksIGouc2V0QXJlYSgwLCAwLCB0aGlzLmNoYXJ0LnBsb3RXaWR0aCwgdGhpcy5jaGFydC5wbG90SGVpZ2h0KSwgai5hZGRFbGVtZW50c1RvQ29sbGVjdGlvbihbdGhpc10sIGouc2VyaWVzKSwgai5hZGRFbGVtZW50c1RvQ29sbGVjdGlvbih0aGlzLnBvaW50cywgai5ub2Rlcyk7XG4gICAgICAgIH1cbiAgICAgICAgYWRkU2VyaWVzTGF5b3V0KCkge1xuICAgICAgICAgIGxldCB4ID0gdGhpcy5vcHRpb25zLmxheW91dEFsZ29yaXRobSA9IHRoaXMub3B0aW9ucy5sYXlvdXRBbGdvcml0aG0gfHwge30sIE4gPSB4LnR5cGUgfHwgXCJwYWNrZWRidWJibGVcIiwgViA9IHRoaXMuY2hhcnQuZ3JhcGhMYXlvdXRzU3RvcmFnZSwgUiA9IHRoaXMuY2hhcnQuZ3JhcGhMYXlvdXRzTG9va3VwLCBJID0gQyh4LCB4LnBhcmVudE5vZGVPcHRpb25zLCB7IGVuYWJsZVNpbXVsYXRpb246IHRoaXMubGF5b3V0Lm9wdGlvbnMuZW5hYmxlU2ltdWxhdGlvbiB9KSwgaiA9IFZbTiArIFwiLXNlcmllc1wiXTtcbiAgICAgICAgICBqIHx8IChWW04gKyBcIi1zZXJpZXNcIl0gPSBqID0gbmV3IGEubGF5b3V0c1tOXSgpLCBqLmluaXQoSSksIFIuc3BsaWNlKGouaW5kZXgsIDAsIGopKSwgdGhpcy5wYXJlbnROb2RlTGF5b3V0ID0gaiwgdGhpcy5jcmVhdGVQYXJlbnROb2RlcygpO1xuICAgICAgICB9XG4gICAgICAgIGNhbGN1bGF0ZVBhcmVudFJhZGl1cygpIHtcbiAgICAgICAgICBsZXQgeCA9IHRoaXMuc2VyaWVzQm94KCk7XG4gICAgICAgICAgdGhpcy5wYXJlbnROb2RlUmFkaXVzID0gQihNYXRoLnNxcnQoMiAqIHRoaXMucGFyZW50Tm9kZU1hc3MgLyBNYXRoLlBJKSArIDIwLCAyMCwgeCA/IE1hdGgubWF4KE1hdGguc3FydChNYXRoLnBvdyh4LndpZHRoLCAyKSArIE1hdGgucG93KHguaGVpZ2h0LCAyKSkgLyAyICsgMjAsIDIwKSA6IE1hdGguc3FydCgyICogdGhpcy5wYXJlbnROb2RlTWFzcyAvIE1hdGguUEkpICsgMjApLCB0aGlzLnBhcmVudE5vZGUgJiYgKHRoaXMucGFyZW50Tm9kZS5tYXJrZXIucmFkaXVzID0gdGhpcy5wYXJlbnROb2RlLnJhZGl1cyA9IHRoaXMucGFyZW50Tm9kZVJhZGl1cyk7XG4gICAgICAgIH1cbiAgICAgICAgY2FsY3VsYXRlWkV4dHJlbWVzKCkge1xuICAgICAgICAgIGxldCB4ID0gdGhpcy5jaGFydC5zZXJpZXMsIE4gPSB0aGlzLm9wdGlvbnMuek1pbiwgViA9IHRoaXMub3B0aW9ucy56TWF4LCBSID0gMSAvIDAsIEkgPSAtMSAvIDA7XG4gICAgICAgICAgcmV0dXJuIE4gJiYgViA/IFtOLCBWXSA6ICh4LmZvckVhY2goKGopID0+IHtcbiAgICAgICAgICAgIGoueURhdGEuZm9yRWFjaCgoVSkgPT4ge1xuICAgICAgICAgICAgICBYKFUpICYmIChVID4gSSAmJiAoSSA9IFUpLCBVIDwgUiAmJiAoUiA9IFUpKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH0pLCBbTiA9IHEoTiwgUiksIFYgPSBxKFYsIEkpXSk7XG4gICAgICAgIH1cbiAgICAgICAgY2hlY2tPdmVybGFwKHgsIE4pIHtcbiAgICAgICAgICBsZXQgViA9IHhbMF0gLSBOWzBdLCBSID0geFsxXSAtIE5bMV07XG4gICAgICAgICAgcmV0dXJuIE1hdGguc3FydChWICogViArIFIgKiBSKSAtIE1hdGguYWJzKHhbMl0gKyBOWzJdKSA8IC0xZS0zO1xuICAgICAgICB9XG4gICAgICAgIGNyZWF0ZVBhcmVudE5vZGVzKCkge1xuICAgICAgICAgIGxldCB4ID0gdGhpcy5wb2ludENsYXNzLCBOID0gdGhpcy5jaGFydCwgViA9IHRoaXMucGFyZW50Tm9kZUxheW91dCwgUiA9IHRoaXMubGF5b3V0Lm9wdGlvbnMsIEksIGogPSB0aGlzLnBhcmVudE5vZGUsIFUgPSB7IHJhZGl1czogdGhpcy5wYXJlbnROb2RlUmFkaXVzLCBsaW5lQ29sb3I6IHRoaXMuY29sb3IsIGZpbGxDb2xvcjogZih0aGlzLmNvbG9yKS5icmlnaHRlbigwLjQpLmdldCgpIH07XG4gICAgICAgICAgUi5wYXJlbnROb2RlT3B0aW9ucyAmJiAoVSA9IEMoUi5wYXJlbnROb2RlT3B0aW9ucy5tYXJrZXIgfHwge30sIFUpKSwgdGhpcy5wYXJlbnROb2RlTWFzcyA9IDAsIHRoaXMucG9pbnRzLmZvckVhY2goKF8pID0+IHtcbiAgICAgICAgICAgIHRoaXMucGFyZW50Tm9kZU1hc3MgKz0gTWF0aC5QSSAqIE1hdGgucG93KF8ubWFya2VyLnJhZGl1cywgMik7XG4gICAgICAgICAgfSksIHRoaXMuY2FsY3VsYXRlUGFyZW50UmFkaXVzKCksIFYubm9kZXMuZm9yRWFjaCgoXykgPT4ge1xuICAgICAgICAgICAgXy5zZXJpZXNJbmRleCA9PT0gdGhpcy5pbmRleCAmJiAoSSA9ICEwKTtcbiAgICAgICAgICB9KSwgVi5zZXRBcmVhKDAsIDAsIE4ucGxvdFdpZHRoLCBOLnBsb3RIZWlnaHQpLCBJIHx8IChqIHx8IChqID0gbmV3IHgodGhpcywgeyBtYXNzOiB0aGlzLnBhcmVudE5vZGVSYWRpdXMgLyAyLCBtYXJrZXI6IFUsIGRhdGFMYWJlbHM6IHsgaW5zaWRlOiAhMSB9LCBzdGF0ZXM6IHsgbm9ybWFsOiB7IG1hcmtlcjogVSB9LCBob3ZlcjogeyBtYXJrZXI6IFUgfSB9LCBkYXRhTGFiZWxPbk51bGw6ICEwLCBkZWdyZWU6IHRoaXMucGFyZW50Tm9kZVJhZGl1cywgaXNQYXJlbnROb2RlOiAhMCwgc2VyaWVzSW5kZXg6IHRoaXMuaW5kZXggfSkpLCB0aGlzLnBhcmVudE5vZGUgJiYgKGoucGxvdFggPSB0aGlzLnBhcmVudE5vZGUucGxvdFgsIGoucGxvdFkgPSB0aGlzLnBhcmVudE5vZGUucGxvdFkpLCB0aGlzLnBhcmVudE5vZGUgPSBqLCBWLmFkZEVsZW1lbnRzVG9Db2xsZWN0aW9uKFt0aGlzXSwgVi5zZXJpZXMpLCBWLmFkZEVsZW1lbnRzVG9Db2xsZWN0aW9uKFtqXSwgVi5ub2RlcykpO1xuICAgICAgICB9XG4gICAgICAgIGRlZmVyTGF5b3V0KCkge1xuICAgICAgICAgIGxldCB4ID0gdGhpcy5vcHRpb25zLmxheW91dEFsZ29yaXRobTtcbiAgICAgICAgICB0aGlzLnZpc2libGUgJiYgKHRoaXMuYWRkTGF5b3V0KCksIHguc3BsaXRTZXJpZXMgJiYgdGhpcy5hZGRTZXJpZXNMYXlvdXQoKSk7XG4gICAgICAgIH1cbiAgICAgICAgZGVzdHJveSgpIHtcbiAgICAgICAgICB0aGlzLmNoYXJ0LmdyYXBoTGF5b3V0c0xvb2t1cCAmJiB0aGlzLmNoYXJ0LmdyYXBoTGF5b3V0c0xvb2t1cC5mb3JFYWNoKCh4KSA9PiB7XG4gICAgICAgICAgICB4LnJlbW92ZUVsZW1lbnRGcm9tQ29sbGVjdGlvbih0aGlzLCB4LnNlcmllcyk7XG4gICAgICAgICAgfSwgdGhpcyksIHRoaXMucGFyZW50Tm9kZSAmJiB0aGlzLnBhcmVudE5vZGVMYXlvdXQgJiYgKHRoaXMucGFyZW50Tm9kZUxheW91dC5yZW1vdmVFbGVtZW50RnJvbUNvbGxlY3Rpb24odGhpcy5wYXJlbnROb2RlLCB0aGlzLnBhcmVudE5vZGVMYXlvdXQubm9kZXMpLCB0aGlzLnBhcmVudE5vZGUuZGF0YUxhYmVsICYmICh0aGlzLnBhcmVudE5vZGUuZGF0YUxhYmVsID0gdGhpcy5wYXJlbnROb2RlLmRhdGFMYWJlbC5kZXN0cm95KCkpKSwgaC5kZXN0cm95LmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gICAgICAgIH1cbiAgICAgICAgZHJhd0RhdGFMYWJlbHMoKSB7XG4gICAgICAgICAgIXRoaXMuZGVmZXJEYXRhTGFiZWxzICYmIChoLmRyYXdEYXRhTGFiZWxzLmNhbGwodGhpcywgdGhpcy5wb2ludHMpLCB0aGlzLnBhcmVudE5vZGUgJiYgKHRoaXMucGFyZW50Tm9kZS5mb3JtYXRQcmVmaXggPSBcInBhcmVudE5vZGVcIiwgaC5kcmF3RGF0YUxhYmVscy5jYWxsKHRoaXMsIFt0aGlzLnBhcmVudE5vZGVdKSkpO1xuICAgICAgICB9XG4gICAgICAgIGRyYXdHcmFwaCgpIHtcbiAgICAgICAgICB2YXIgSTtcbiAgICAgICAgICBpZiAoIXRoaXMubGF5b3V0IHx8ICF0aGlzLmxheW91dC5vcHRpb25zLnNwbGl0U2VyaWVzKVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgIGxldCB4ID0gdGhpcy5jaGFydCwgTiA9IHRoaXMubGF5b3V0Lm9wdGlvbnMucGFyZW50Tm9kZU9wdGlvbnMubWFya2VyLCBWID0geyBmaWxsOiBOLmZpbGxDb2xvciB8fCBmKHRoaXMuY29sb3IpLmJyaWdodGVuKDAuNCkuZ2V0KCksIG9wYWNpdHk6IE4uZmlsbE9wYWNpdHksIHN0cm9rZTogTi5saW5lQ29sb3IgfHwgdGhpcy5jb2xvciwgXCJzdHJva2Utd2lkdGhcIjogcShOLmxpbmVXaWR0aCwgdGhpcy5vcHRpb25zLmxpbmVXaWR0aCkgfSwgUiA9IHt9O1xuICAgICAgICAgIHRoaXMucGFyZW50Tm9kZXNHcm91cCA9IHRoaXMucGxvdEdyb3VwKFwicGFyZW50Tm9kZXNHcm91cFwiLCBcInBhcmVudE5vZGVcIiwgdGhpcy52aXNpYmxlID8gXCJpbmhlcml0XCIgOiBcImhpZGRlblwiLCAwLjEsIHguc2VyaWVzR3JvdXApLCAoSSA9IHRoaXMuZ3JvdXApID09IG51bGwgfHwgSS5hdHRyKHsgekluZGV4OiAyIH0pLCB0aGlzLmNhbGN1bGF0ZVBhcmVudFJhZGl1cygpLCB0aGlzLnBhcmVudE5vZGUgJiYgWCh0aGlzLnBhcmVudE5vZGUucGxvdFgpICYmIFgodGhpcy5wYXJlbnROb2RlLnBsb3RZKSAmJiBYKHRoaXMucGFyZW50Tm9kZVJhZGl1cykgJiYgKFIgPSBDKHsgeDogdGhpcy5wYXJlbnROb2RlLnBsb3RYIC0gdGhpcy5wYXJlbnROb2RlUmFkaXVzLCB5OiB0aGlzLnBhcmVudE5vZGUucGxvdFkgLSB0aGlzLnBhcmVudE5vZGVSYWRpdXMsIHdpZHRoOiAyICogdGhpcy5wYXJlbnROb2RlUmFkaXVzLCBoZWlnaHQ6IDIgKiB0aGlzLnBhcmVudE5vZGVSYWRpdXMgfSwgViksIHRoaXMucGFyZW50Tm9kZS5ncmFwaGljIHx8ICh0aGlzLmdyYXBoID0gdGhpcy5wYXJlbnROb2RlLmdyYXBoaWMgPSB4LnJlbmRlcmVyLnN5bWJvbChWLnN5bWJvbCkuYWRkKHRoaXMucGFyZW50Tm9kZXNHcm91cCkpLCB0aGlzLnBhcmVudE5vZGUuZ3JhcGhpYy5hdHRyKFIpKTtcbiAgICAgICAgfVxuICAgICAgICBkcmF3VHJhY2tlcigpIHtcbiAgICAgICAgICBsZXQgeCwgTiA9IHRoaXMucGFyZW50Tm9kZTtcbiAgICAgICAgICBzdXBlci5kcmF3VHJhY2tlcigpLCBOICYmICh4ID0gdyhOLmRhdGFMYWJlbHMpID8gTi5kYXRhTGFiZWxzIDogTi5kYXRhTGFiZWwgPyBbTi5kYXRhTGFiZWxdIDogW10sIE4uZ3JhcGhpYyAmJiAoTi5ncmFwaGljLmVsZW1lbnQucG9pbnQgPSBOKSwgeC5mb3JFYWNoKChWKSA9PiB7XG4gICAgICAgICAgICAoVi5kaXYgfHwgVi5lbGVtZW50KS5wb2ludCA9IE47XG4gICAgICAgICAgfSkpO1xuICAgICAgICB9XG4gICAgICAgIGdldFBvaW50UmFkaXVzKCkge1xuICAgICAgICAgIGxldCB4LCBOLCBWLCBSLCBJID0gdGhpcy5jaGFydCwgaiA9IEkucGxvdFdpZHRoLCBVID0gSS5wbG90SGVpZ2h0LCBfID0gdGhpcy5vcHRpb25zLCByMSA9IF8udXNlU2ltdWxhdGlvbiwgSyA9IE1hdGgubWluKGosIFUpLCBRID0ge30sIEUgPSBbXSwgRCA9IEkuYWxsRGF0YVBvaW50cyB8fCBbXSwgRyA9IEQubGVuZ3RoO1xuICAgICAgICAgIFtcIm1pblNpemVcIiwgXCJtYXhTaXplXCJdLmZvckVhY2goKFMpID0+IHtcbiAgICAgICAgICAgIGxldCBXID0gcGFyc2VJbnQoX1tTXSwgMTApLCBQID0gLyUkLy50ZXN0KF9bU10pO1xuICAgICAgICAgICAgUVtTXSA9IFAgPyBLICogVyAvIDEwMCA6IFcgKiBNYXRoLnNxcnQoRyk7XG4gICAgICAgICAgfSksIEkubWluUmFkaXVzID0geCA9IFEubWluU2l6ZSAvIE1hdGguc3FydChHKSwgSS5tYXhSYWRpdXMgPSBOID0gUS5tYXhTaXplIC8gTWF0aC5zcXJ0KEcpO1xuICAgICAgICAgIGxldCBKID0gcjEgPyB0aGlzLmNhbGN1bGF0ZVpFeHRyZW1lcygpIDogW3gsIE5dO1xuICAgICAgICAgIEQuZm9yRWFjaCgoUywgVykgPT4ge1xuICAgICAgICAgICAgViA9IHIxID8gQihTWzJdLCBKWzBdLCBKWzFdKSA6IFNbMl0sIChSID0gdGhpcy5nZXRSYWRpdXMoSlswXSwgSlsxXSwgeCwgTiwgVikpID09PSAwICYmIChSID0gbnVsbCksIERbV11bMl0gPSBSLCBFLnB1c2goUik7XG4gICAgICAgICAgfSksIHRoaXMucmFkaWkgPSBFO1xuICAgICAgICB9XG4gICAgICAgIGluaXQoKSB7XG4gICAgICAgICAgcmV0dXJuIGguaW5pdC5hcHBseSh0aGlzLCBhcmd1bWVudHMpLCBMLmNhbGwodGhpcyksIHRoaXMuZXZlbnRzVG9VbmJpbmQucHVzaCh5KHRoaXMsIFwidXBkYXRlZERhdGFcIiwgZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICB0aGlzLmNoYXJ0LnNlcmllcy5mb3JFYWNoKCh4KSA9PiB7XG4gICAgICAgICAgICAgIHgudHlwZSA9PT0gdGhpcy50eXBlICYmICh4LmlzRGlydHkgPSAhMCk7XG4gICAgICAgICAgICB9LCB0aGlzKTtcbiAgICAgICAgICB9KSksIHRoaXM7XG4gICAgICAgIH1cbiAgICAgICAgb25Nb3VzZVVwKHgpIHtcbiAgICAgICAgICBpZiAoeC5maXhlZFBvc2l0aW9uICYmICF4LnJlbW92ZWQpIHtcbiAgICAgICAgICAgIGxldCBOLCBWID0gdGhpcy5sYXlvdXQsIFIgPSB0aGlzLnBhcmVudE5vZGVMYXlvdXQ7XG4gICAgICAgICAgICBSICYmIFYub3B0aW9ucy5kcmFnQmV0d2VlblNlcmllcyAmJiBSLm5vZGVzLmZvckVhY2goKEkpID0+IHtcbiAgICAgICAgICAgICAgeCAmJiB4Lm1hcmtlciAmJiBJICE9PSB4LnNlcmllcy5wYXJlbnROb2RlICYmIChOID0gVi5nZXREaXN0WFkoeCwgSSksIFYudmVjdG9yTGVuZ3RoKE4pIC0gSS5tYXJrZXIucmFkaXVzIC0geC5tYXJrZXIucmFkaXVzIDwgMCAmJiAoSS5zZXJpZXMuYWRkUG9pbnQoQyh4Lm9wdGlvbnMsIHsgcGxvdFg6IHgucGxvdFgsIHBsb3RZOiB4LnBsb3RZIH0pLCAhMSksIFYucmVtb3ZlRWxlbWVudEZyb21Db2xsZWN0aW9uKHgsIFYubm9kZXMpLCB4LnJlbW92ZSgpKSk7XG4gICAgICAgICAgICB9KSwgaS5vbk1vdXNlVXAuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcGxhY2VCdWJibGVzKHgpIHtcbiAgICAgICAgICBsZXQgTiA9IHRoaXMuY2hlY2tPdmVybGFwLCBWID0gdGhpcy5wb3NpdGlvbkJ1YmJsZSwgUiA9IFtdLCBJID0gMSwgaiA9IDAsIFUgPSAwLCBfLCByMSA9IFtdLCBLLCBRID0geC5zb3J0KChFLCBEKSA9PiBEWzJdIC0gRVsyXSk7XG4gICAgICAgICAgaWYgKFEubGVuZ3RoKSB7XG4gICAgICAgICAgICBpZiAoUi5wdXNoKFtbMCwgMCwgUVswXVsyXSwgUVswXVszXSwgUVswXVs0XV1dKSwgUS5sZW5ndGggPiAxKVxuICAgICAgICAgICAgICBmb3IgKFIucHVzaChbWzAsIDAgLSBRWzFdWzJdIC0gUVswXVsyXSwgUVsxXVsyXSwgUVsxXVszXSwgUVsxXVs0XV1dKSwgSyA9IDI7IEsgPCBRLmxlbmd0aDsgSysrKVxuICAgICAgICAgICAgICAgIFFbS11bMl0gPSBRW0tdWzJdIHx8IDEsIE4oXyA9IFYoUltJXVtqXSwgUltJIC0gMV1bVV0sIFFbS10pLCBSW0ldWzBdKSA/IChSLnB1c2goW10pLCBVID0gMCwgUltJICsgMV0ucHVzaChWKFJbSV1bal0sIFJbSV1bMF0sIFFbS10pKSwgSSsrLCBqID0gMCkgOiBJID4gMSAmJiBSW0kgLSAxXVtVICsgMV0gJiYgTihfLCBSW0kgLSAxXVtVICsgMV0pID8gKFUrKywgUltJXS5wdXNoKFYoUltJXVtqXSwgUltJIC0gMV1bVV0sIFFbS10pKSwgaisrKSA6IChqKyssIFJbSV0ucHVzaChfKSk7XG4gICAgICAgICAgICB0aGlzLmNoYXJ0LnN0YWdlcyA9IFIsIHRoaXMuY2hhcnQucmF3UG9zaXRpb25zID0gW10uY29uY2F0LmFwcGx5KFtdLCBSKSwgdGhpcy5yZXNpemVSYWRpdXMoKSwgcjEgPSB0aGlzLmNoYXJ0LnJhd1Bvc2l0aW9ucztcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIHIxO1xuICAgICAgICB9XG4gICAgICAgIHBvaW50QXR0cmlicyh4LCBOKSB7XG4gICAgICAgICAgbGV0IFYgPSB0aGlzLm9wdGlvbnMsIFIgPSB4ICYmIHguaXNQYXJlbnROb2RlLCBJID0gVi5tYXJrZXI7XG4gICAgICAgICAgUiAmJiBWLmxheW91dEFsZ29yaXRobSAmJiBWLmxheW91dEFsZ29yaXRobS5wYXJlbnROb2RlT3B0aW9ucyAmJiAoSSA9IFYubGF5b3V0QWxnb3JpdGhtLnBhcmVudE5vZGVPcHRpb25zLm1hcmtlcik7XG4gICAgICAgICAgbGV0IGogPSBJLmZpbGxPcGFjaXR5LCBVID0gaC5wb2ludEF0dHJpYnMuY2FsbCh0aGlzLCB4LCBOKTtcbiAgICAgICAgICByZXR1cm4gaiAhPT0gMSAmJiAoVVtcImZpbGwtb3BhY2l0eVwiXSA9IGopLCBVO1xuICAgICAgICB9XG4gICAgICAgIHBvc2l0aW9uQnViYmxlKHgsIE4sIFYpIHtcbiAgICAgICAgICBsZXQgUiA9IE1hdGguYXNpbiwgSSA9IE1hdGguYWNvcywgaiA9IE1hdGgucG93LCBVID0gTWF0aC5hYnMsIF8gPSAoMCwgTWF0aC5zcXJ0KShqKHhbMF0gLSBOWzBdLCAyKSArIGooeFsxXSAtIE5bMV0sIDIpKSwgcjEgPSBJKChqKF8sIDIpICsgaihWWzJdICsgTlsyXSwgMikgLSBqKFZbMl0gKyB4WzJdLCAyKSkgLyAoMiAqIChWWzJdICsgTlsyXSkgKiBfKSksIEsgPSBSKFUoeFswXSAtIE5bMF0pIC8gXyksIFEgPSAoeFsxXSAtIE5bMV0gPCAwID8gMCA6IE1hdGguUEkpICsgcjEgKyBLICogKCh4WzBdIC0gTlswXSkgKiAoeFsxXSAtIE5bMV0pIDwgMCA/IDEgOiAtMSksIEUgPSBNYXRoLmNvcyhRKSwgRCA9IE1hdGguc2luKFEpO1xuICAgICAgICAgIHJldHVybiBbTlswXSArIChOWzJdICsgVlsyXSkgKiBELCBOWzFdIC0gKE5bMl0gKyBWWzJdKSAqIEUsIFZbMl0sIFZbM10sIFZbNF1dO1xuICAgICAgICB9XG4gICAgICAgIHJlbmRlcigpIHtcbiAgICAgICAgICBsZXQgeCA9IFtdO1xuICAgICAgICAgIGgucmVuZGVyLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyksICF0aGlzLm9wdGlvbnMuZGF0YUxhYmVscy5hbGxvd092ZXJsYXAgJiYgKHRoaXMuZGF0YS5mb3JFYWNoKChOKSA9PiB7XG4gICAgICAgICAgICB3KE4uZGF0YUxhYmVscykgJiYgTi5kYXRhTGFiZWxzLmZvckVhY2goKFYpID0+IHtcbiAgICAgICAgICAgICAgeC5wdXNoKFYpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfSksIHRoaXMub3B0aW9ucy51c2VTaW11bGF0aW9uICYmIHRoaXMuY2hhcnQuaGlkZU92ZXJsYXBwaW5nTGFiZWxzKHgpKTtcbiAgICAgICAgfVxuICAgICAgICByZXNpemVSYWRpdXMoKSB7XG4gICAgICAgICAgbGV0IHgsIE4sIFYsIFIsIEksIGogPSB0aGlzLmNoYXJ0LCBVID0gai5yYXdQb3NpdGlvbnMsIF8gPSBNYXRoLm1pbiwgcjEgPSBNYXRoLm1heCwgSyA9IGoucGxvdExlZnQsIFEgPSBqLnBsb3RUb3AsIEUgPSBqLnBsb3RIZWlnaHQsIEQgPSBqLnBsb3RXaWR0aDtcbiAgICAgICAgICBmb3IgKGxldCBXIG9mICh4ID0gViA9IE51bWJlci5QT1NJVElWRV9JTkZJTklUWSwgTiA9IFIgPSBOdW1iZXIuTkVHQVRJVkVfSU5GSU5JVFksIFUpKVxuICAgICAgICAgICAgSSA9IFdbMl0sIHggPSBfKHgsIFdbMF0gLSBJKSwgTiA9IHIxKE4sIFdbMF0gKyBJKSwgViA9IF8oViwgV1sxXSAtIEkpLCBSID0gcjEoUiwgV1sxXSArIEkpO1xuICAgICAgICAgIGxldCBHID0gW04gLSB4LCBSIC0gVl0sIEogPSBbKEQgLSBLKSAvIEdbMF0sIChFIC0gUSkgLyBHWzFdXSwgUyA9IF8uYXBwbHkoW10sIEopO1xuICAgICAgICAgIGlmIChNYXRoLmFicyhTIC0gMSkgPiAxZS0xMCkge1xuICAgICAgICAgICAgZm9yIChsZXQgVyBvZiBVKVxuICAgICAgICAgICAgICBXWzJdICo9IFM7XG4gICAgICAgICAgICB0aGlzLnBsYWNlQnViYmxlcyhVKTtcbiAgICAgICAgICB9IGVsc2VcbiAgICAgICAgICAgIGouZGlmZlkgPSBFIC8gMiArIFEgLSBWIC0gKFIgLSBWKSAvIDIsIGouZGlmZlggPSBEIC8gMiArIEsgLSB4IC0gKE4gLSB4KSAvIDI7XG4gICAgICAgIH1cbiAgICAgICAgc2VyaWVzQm94KCkge1xuICAgICAgICAgIGxldCB4LCBOID0gdGhpcy5jaGFydCwgViA9IHRoaXMuZGF0YSwgUiA9IE1hdGgubWF4LCBJID0gTWF0aC5taW4sIGogPSBbTi5wbG90TGVmdCwgTi5wbG90TGVmdCArIE4ucGxvdFdpZHRoLCBOLnBsb3RUb3AsIE4ucGxvdFRvcCArIE4ucGxvdEhlaWdodF07XG4gICAgICAgICAgcmV0dXJuIFYuZm9yRWFjaCgoVSkgPT4ge1xuICAgICAgICAgICAgWChVLnBsb3RYKSAmJiBYKFUucGxvdFkpICYmIFUubWFya2VyLnJhZGl1cyAmJiAoeCA9IFUubWFya2VyLnJhZGl1cywgalswXSA9IEkoalswXSwgVS5wbG90WCAtIHgpLCBqWzFdID0gUihqWzFdLCBVLnBsb3RYICsgeCksIGpbMl0gPSBJKGpbMl0sIFUucGxvdFkgLSB4KSwgalszXSA9IFIoalszXSwgVS5wbG90WSArIHgpKTtcbiAgICAgICAgICB9KSwgSChqLndpZHRoIC8gai5oZWlnaHQpID8gaiA6IG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgc2V0VmlzaWJsZSgpIHtcbiAgICAgICAgICBsZXQgeCA9IHRoaXM7XG4gICAgICAgICAgaC5zZXRWaXNpYmxlLmFwcGx5KHgsIGFyZ3VtZW50cyksIHgucGFyZW50Tm9kZUxheW91dCAmJiB4LmdyYXBoID8geC52aXNpYmxlID8gKHguZ3JhcGguc2hvdygpLCB4LnBhcmVudE5vZGUuZGF0YUxhYmVsICYmIHgucGFyZW50Tm9kZS5kYXRhTGFiZWwuc2hvdygpKSA6ICh4LmdyYXBoLmhpZGUoKSwgeC5wYXJlbnROb2RlTGF5b3V0LnJlbW92ZUVsZW1lbnRGcm9tQ29sbGVjdGlvbih4LnBhcmVudE5vZGUsIHgucGFyZW50Tm9kZUxheW91dC5ub2RlcyksIHgucGFyZW50Tm9kZS5kYXRhTGFiZWwgJiYgeC5wYXJlbnROb2RlLmRhdGFMYWJlbC5oaWRlKCkpIDogeC5sYXlvdXQgJiYgKHgudmlzaWJsZSA/IHgubGF5b3V0LmFkZEVsZW1lbnRzVG9Db2xsZWN0aW9uKHgucG9pbnRzLCB4LmxheW91dC5ub2RlcykgOiB4LnBvaW50cy5mb3JFYWNoKChOKSA9PiB7XG4gICAgICAgICAgICB4LmxheW91dC5yZW1vdmVFbGVtZW50RnJvbUNvbGxlY3Rpb24oTiwgeC5sYXlvdXQubm9kZXMpO1xuICAgICAgICAgIH0pKTtcbiAgICAgICAgfVxuICAgICAgICB0cmFuc2xhdGUoKSB7XG4gICAgICAgICAgbGV0IHgsIE4sIFYsIFIgPSB0aGlzLmNoYXJ0LCBJID0gdGhpcy5kYXRhLCBqID0gdGhpcy5pbmRleCwgVSA9IHRoaXMub3B0aW9ucy51c2VTaW11bGF0aW9uO1xuICAgICAgICAgIGZvciAobGV0IF8gb2YgKHRoaXMucHJvY2Vzc2VkWERhdGEgPSB0aGlzLnhEYXRhLCB0aGlzLmdlbmVyYXRlUG9pbnRzKCksIFgoUi5hbGxEYXRhUG9pbnRzKSB8fCAoUi5hbGxEYXRhUG9pbnRzID0gdGhpcy5hY2N1bXVsYXRlQWxsUG9pbnRzKCksIHRoaXMuZ2V0UG9pbnRSYWRpdXMoKSksIFUgPyBWID0gUi5hbGxEYXRhUG9pbnRzIDogKFYgPSB0aGlzLnBsYWNlQnViYmxlcyhSLmFsbERhdGFQb2ludHMpLCB0aGlzLm9wdGlvbnMuZHJhZ2dhYmxlID0gITEpLCBWKSlcbiAgICAgICAgICAgIF9bM10gPT09IGogJiYgKHggPSBJW19bNF1dLCBOID0gcShfWzJdLCB2b2lkIDApLCBVIHx8ICh4LnBsb3RYID0gX1swXSAtIFIucGxvdExlZnQgKyBSLmRpZmZYLCB4LnBsb3RZID0gX1sxXSAtIFIucGxvdFRvcCArIFIuZGlmZlkpLCBIKE4pICYmICh4Lm1hcmtlciA9IEYoeC5tYXJrZXIsIHsgcmFkaXVzOiBOLCB3aWR0aDogMiAqIE4sIGhlaWdodDogMiAqIE4gfSksIHgucmFkaXVzID0gTikpO1xuICAgICAgICAgIFUgJiYgdGhpcy5kZWZlckxheW91dCgpLCBUKHRoaXMsIFwiYWZ0ZXJUcmFuc2xhdGVcIik7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiBtLmRlZmF1bHRPcHRpb25zID0gQyhnLmRlZmF1bHRPcHRpb25zLCBwKSwgRihtLnByb3RvdHlwZSwgeyBwb2ludENsYXNzOiBsLCBheGlzVHlwZXM6IFtdLCBkaXJlY3RUb3VjaDogITAsIGZvcmNlczogW1wiYmFyeWNlbnRlclwiLCBcInJlcHVsc2l2ZVwiXSwgaGFzRHJhZ2dhYmxlTm9kZXM6ICEwLCBpbnZlcnRpYmxlOiAhMSwgaXNDYXJ0ZXNpYW46ICExLCBub1NoYXJlZFRvb2x0aXA6ICEwLCBwb2ludEFycmF5TWFwOiBbXCJ2YWx1ZVwiXSwgcG9pbnRWYWxLZXk6IFwidmFsdWVcIiwgcmVxdWlyZVNvcnRpbmc6ICExLCB0cmFja2VyR3JvdXBzOiBbXCJncm91cFwiLCBcImRhdGFMYWJlbHNHcm91cFwiLCBcInBhcmVudE5vZGVzR3JvdXBcIl0sIGluaXREYXRhTGFiZWxzOiB2LCBhbGlnbkRhdGFMYWJlbDogaC5hbGlnbkRhdGFMYWJlbCwgaW5kZXhhdGVOb2RlczogTywgb25Nb3VzZURvd246IGkub25Nb3VzZURvd24sIG9uTW91c2VNb3ZlOiBpLm9uTW91c2VNb3ZlLCByZWRyYXdIYWxvOiBpLnJlZHJhd0hhbG8sIHNlYXJjaFBvaW50OiBPIH0pLCBiLnJlZ2lzdGVyU2VyaWVzVHlwZShcInBhY2tlZGJ1YmJsZVwiLCBtKSwgbTtcbiAgICB9KSwgbihvLCBcIlNlcmllcy9Qb2x5Z29uL1BvbHlnb25TZXJpZXNEZWZhdWx0cy5qc1wiLCBbXSwgZnVuY3Rpb24oKSB7XG4gICAgICByZXR1cm4geyBtYXJrZXI6IHsgZW5hYmxlZDogITEsIHN0YXRlczogeyBob3ZlcjogeyBlbmFibGVkOiAhMSB9IH0gfSwgc3RpY2t5VHJhY2tpbmc6ICExLCB0b29sdGlwOiB7IGZvbGxvd1BvaW50ZXI6ICEwLCBwb2ludEZvcm1hdDogXCJcIiB9LCB0cmFja0J5QXJlYTogITAsIGxlZ2VuZFN5bWJvbDogXCJyZWN0YW5nbGVcIiB9O1xuICAgIH0pLCBuKG8sIFwiU2VyaWVzL1BvbHlnb24vUG9seWdvblNlcmllcy5qc1wiLCBbb1tcIkNvcmUvR2xvYmFscy5qc1wiXSwgb1tcIlNlcmllcy9Qb2x5Z29uL1BvbHlnb25TZXJpZXNEZWZhdWx0cy5qc1wiXSwgb1tcIkNvcmUvU2VyaWVzL1Nlcmllc1JlZ2lzdHJ5LmpzXCJdLCBvW1wiQ29yZS9VdGlsaXRpZXMuanNcIl1dLCBmdW5jdGlvbihyLCBpLCBhLCBzKSB7XG4gICAgICBsZXQgeyBub29wOiBsIH0gPSByLCB7IGFyZWE6IHAsIGxpbmU6IGQsIHNjYXR0ZXI6IGIgfSA9IGEuc2VyaWVzVHlwZXMsIHsgZXh0ZW5kOiBNLCBtZXJnZTogdSB9ID0gcztcbiAgICAgIGNsYXNzIEEgZXh0ZW5kcyBiIHtcbiAgICAgICAgZ2V0R3JhcGhQYXRoKCkge1xuICAgICAgICAgIGxldCBmID0gZC5wcm90b3R5cGUuZ2V0R3JhcGhQYXRoLmNhbGwodGhpcyksIE8gPSBmLmxlbmd0aCArIDE7XG4gICAgICAgICAgZm9yICg7IE8tLTsgKVxuICAgICAgICAgICAgKE8gPT09IGYubGVuZ3RoIHx8IGZbT11bMF0gPT09IFwiTVwiKSAmJiBPID4gMCAmJiBmLnNwbGljZShPLCAwLCBbXCJaXCJdKTtcbiAgICAgICAgICByZXR1cm4gdGhpcy5hcmVhUGF0aCA9IGYsIGY7XG4gICAgICAgIH1cbiAgICAgICAgZHJhd0dyYXBoKCkge1xuICAgICAgICAgIHRoaXMub3B0aW9ucy5maWxsQ29sb3IgPSB0aGlzLmNvbG9yLCBwLnByb3RvdHlwZS5kcmF3R3JhcGguY2FsbCh0aGlzKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIEEuZGVmYXVsdE9wdGlvbnMgPSB1KGIuZGVmYXVsdE9wdGlvbnMsIGkpLCBNKEEucHJvdG90eXBlLCB7IHR5cGU6IFwicG9seWdvblwiLCBkcmF3VHJhY2tlcjogZC5wcm90b3R5cGUuZHJhd1RyYWNrZXIsIHNldFN0YWNrZWRQb2ludHM6IGwgfSksIGEucmVnaXN0ZXJTZXJpZXNUeXBlKFwicG9seWdvblwiLCBBKSwgQTtcbiAgICB9KSwgbihvLCBcIkNvcmUvQXhpcy9SYWRpYWxBeGlzRGVmYXVsdHMuanNcIiwgW10sIGZ1bmN0aW9uKCkge1xuICAgICAgcmV0dXJuIHsgY2lyY3VsYXI6IHsgZ3JpZExpbmVXaWR0aDogMSwgbGFiZWxzOiB7IGFsaWduOiB2b2lkIDAsIHg6IDAsIHk6IHZvaWQgMCwgc3R5bGU6IHsgdGV4dE92ZXJmbG93OiBcIm5vbmVcIiB9IH0sIG1heFBhZGRpbmc6IDAsIG1pblBhZGRpbmc6IDAsIHNob3dMYXN0TGFiZWw6ICExLCB0aWNrTGVuZ3RoOiAwIH0sIHJhZGlhbDogeyBncmlkTGluZUludGVycG9sYXRpb246IFwiY2lyY2xlXCIsIGdyaWRMaW5lV2lkdGg6IDEsIGxhYmVsczogeyBhbGlnbjogXCJyaWdodFwiLCBwYWRkaW5nOiA1LCB4OiAtMywgeTogLTIgfSwgc2hvd0xhc3RMYWJlbDogITEsIHRpdGxlOiB7IHg6IDQsIHRleHQ6IG51bGwsIHJvdGF0aW9uOiA5MCB9IH0sIHJhZGlhbEdhdWdlOiB7IGVuZE9uVGljazogITEsIGdyaWRMaW5lV2lkdGg6IDAsIGxhYmVsczogeyBhbGlnbjogXCJjZW50ZXJcIiwgZGlzdGFuY2U6IC0yNSwgeDogMCwgeTogdm9pZCAwIH0sIGxpbmVXaWR0aDogMSwgbWlub3JHcmlkTGluZVdpZHRoOiAwLCBtaW5vclRpY2tJbnRlcnZhbDogXCJhdXRvXCIsIG1pbm9yVGlja0xlbmd0aDogMTAsIG1pbm9yVGlja1Bvc2l0aW9uOiBcImluc2lkZVwiLCBtaW5vclRpY2tXaWR0aDogMSwgc3RhcnRPblRpY2s6ICExLCB0aWNrTGVuZ3RoOiAxMCwgdGlja1BpeGVsSW50ZXJ2YWw6IDEwMCwgdGlja1Bvc2l0aW9uOiBcImluc2lkZVwiLCB0aWNrV2lkdGg6IDIsIHRpdGxlOiB7IHJvdGF0aW9uOiAwLCB0ZXh0OiBcIlwiIH0sIHpJbmRleDogMiB9IH07XG4gICAgfSksIG4obywgXCJDb3JlL0F4aXMvUmFkaWFsQXhpcy5qc1wiLCBbb1tcIkNvcmUvQXhpcy9SYWRpYWxBeGlzRGVmYXVsdHMuanNcIl0sIG9bXCJDb3JlL0RlZmF1bHRzLmpzXCJdLCBvW1wiQ29yZS9HbG9iYWxzLmpzXCJdLCBvW1wiQ29yZS9VdGlsaXRpZXMuanNcIl1dLCBmdW5jdGlvbihyLCBpLCBhLCBzKSB7XG4gICAgICB2YXIgbDtcbiAgICAgIGxldCB7IGRlZmF1bHRPcHRpb25zOiBwIH0gPSBpLCB7IGNvbXBvc2VkOiBkLCBub29wOiBiIH0gPSBhLCB7IGFkZEV2ZW50OiBNLCBjb3JyZWN0RmxvYXQ6IHUsIGRlZmluZWQ6IEEsIGV4dGVuZDogeiwgZmlyZUV2ZW50OiBmLCBpc09iamVjdDogTywgbWVyZ2U6IGgsIHBpY2s6IGcsIHB1c2hVbmlxdWU6IHYsIHJlbGF0aXZlTGVuZ3RoOiBMLCB3cmFwOiB5IH0gPSBzO1xuICAgICAgcmV0dXJuIGZ1bmN0aW9uKEIpIHtcbiAgICAgICAgZnVuY3Rpb24gWCgpIHtcbiAgICAgICAgICB0aGlzLmF1dG9Db25uZWN0ID0gdGhpcy5pc0NpcmN1bGFyICYmIGcodGhpcy51c2VyTWF4LCB0aGlzLm9wdGlvbnMubWF4KSA9PT0gdm9pZCAwICYmIHUodGhpcy5lbmRBbmdsZVJhZCAtIHRoaXMuc3RhcnRBbmdsZVJhZCkgPT09IHUoMiAqIE1hdGguUEkpLCAhdGhpcy5pc0NpcmN1bGFyICYmIHRoaXMuY2hhcnQuaW52ZXJ0ZWQgJiYgdGhpcy5tYXgrKywgdGhpcy5hdXRvQ29ubmVjdCAmJiAodGhpcy5tYXggKz0gdGhpcy5jYXRlZ29yaWVzICYmIDEgfHwgdGhpcy5wb2ludFJhbmdlIHx8IHRoaXMuY2xvc2VzdFBvaW50UmFuZ2UgfHwgMCk7XG4gICAgICAgIH1cbiAgICAgICAgZnVuY3Rpb24gRigpIHtcbiAgICAgICAgICByZXR1cm4gKCkgPT4ge1xuICAgICAgICAgICAgaWYgKHRoaXMuaXNSYWRpYWwgJiYgdGhpcy50aWNrUG9zaXRpb25zICYmIHRoaXMub3B0aW9ucy5sYWJlbHMgJiYgdGhpcy5vcHRpb25zLmxhYmVscy5hbGxvd092ZXJsYXAgIT09ICEwKVxuICAgICAgICAgICAgICByZXR1cm4gdGhpcy50aWNrUG9zaXRpb25zLm1hcCgoVykgPT4gdGhpcy50aWNrc1tXXSAmJiB0aGlzLnRpY2tzW1ddLmxhYmVsKS5maWx0ZXIoKFcpID0+ICEhVyk7XG4gICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgICBmdW5jdGlvbiBUKCkge1xuICAgICAgICAgIHJldHVybiBiO1xuICAgICAgICB9XG4gICAgICAgIGZ1bmN0aW9uIHcoVywgUCwgWSkge1xuICAgICAgICAgIGxldCBaID0gdGhpcy5wYW5lLmNlbnRlciwgdDEgPSBXLnZhbHVlLCBpMSwgbjEsIHMxO1xuICAgICAgICAgIHJldHVybiB0aGlzLmlzQ2lyY3VsYXIgPyAoQSh0MSkgPyBXLnBvaW50ICYmIChXLnBvaW50LnNoYXBlQXJncyB8fCB7fSkuc3RhcnQgJiYgKHQxID0gdGhpcy5jaGFydC5pbnZlcnRlZCA/IHRoaXMudHJhbnNsYXRlKFcucG9pbnQucmVjdFBsb3RZLCAhMCkgOiBXLnBvaW50LngpIDogKG4xID0gVy5jaGFydFggfHwgMCwgczEgPSBXLmNoYXJ0WSB8fCAwLCB0MSA9IHRoaXMudHJhbnNsYXRlKE1hdGguYXRhbjIoczEgLSBZLCBuMSAtIFApIC0gdGhpcy5zdGFydEFuZ2xlUmFkLCAhMCkpLCBuMSA9IChpMSA9IHRoaXMuZ2V0UG9zaXRpb24odDEpKS54LCBzMSA9IGkxLnkpIDogKEEodDEpIHx8IChuMSA9IFcuY2hhcnRYLCBzMSA9IFcuY2hhcnRZKSwgQShuMSkgJiYgQShzMSkgJiYgKFkgPSBaWzFdICsgdGhpcy5jaGFydC5wbG90VG9wLCB0MSA9IHRoaXMudHJhbnNsYXRlKE1hdGgubWluKE1hdGguc3FydChNYXRoLnBvdyhuMSAtIFAsIDIpICsgTWF0aC5wb3coczEgLSBZLCAyKSksIFpbMl0gLyAyKSAtIFpbM10gLyAyLCAhMCkpKSwgW3QxLCBuMSB8fCAwLCBzMSB8fCAwXTtcbiAgICAgICAgfVxuICAgICAgICBmdW5jdGlvbiBIKFcsIFAsIFkpIHtcbiAgICAgICAgICBsZXQgWiA9IHRoaXMucGFuZS5jZW50ZXIsIHQxID0gdGhpcy5jaGFydCwgaTEgPSB0aGlzLmxlZnQgfHwgMCwgbjEgPSB0aGlzLnRvcCB8fCAwLCBzMSwgZDEgPSBnKFAsIFpbMl0gLyAyIC0gdGhpcy5vZmZzZXQpLCBiMTtcbiAgICAgICAgICByZXR1cm4gWSA9PT0gdm9pZCAwICYmIChZID0gdGhpcy5ob3JpeiA/IDAgOiB0aGlzLmNlbnRlciAmJiAtdGhpcy5jZW50ZXJbM10gLyAyKSwgWSAmJiAoZDEgKz0gWSksIHRoaXMuaXNDaXJjdWxhciB8fCBQICE9PSB2b2lkIDAgPyAoKGIxID0gdGhpcy5jaGFydC5yZW5kZXJlci5zeW1ib2xzLmFyYyhpMSArIFpbMF0sIG4xICsgWlsxXSwgZDEsIGQxLCB7IHN0YXJ0OiB0aGlzLnN0YXJ0QW5nbGVSYWQsIGVuZDogdGhpcy5lbmRBbmdsZVJhZCwgb3BlbjogITAsIGlubmVyUjogMCB9KSkueEJvdW5kcyA9IFtpMSArIFpbMF1dLCBiMS55Qm91bmRzID0gW24xICsgWlsxXSAtIGQxXSkgOiAoczEgPSB0aGlzLnBvc3RUcmFuc2xhdGUodGhpcy5hbmdsZVJhZCwgZDEpLCBiMSA9IFtbXCJNXCIsIHRoaXMuY2VudGVyWzBdICsgdDEucGxvdExlZnQsIHRoaXMuY2VudGVyWzFdICsgdDEucGxvdFRvcF0sIFtcIkxcIiwgczEueCwgczEueV1dKSwgYjE7XG4gICAgICAgIH1cbiAgICAgICAgZnVuY3Rpb24gQygpIHtcbiAgICAgICAgICB0aGlzLmNvbnN0cnVjdG9yLnByb3RvdHlwZS5nZXRPZmZzZXQuY2FsbCh0aGlzKSwgdGhpcy5jaGFydC5heGlzT2Zmc2V0W3RoaXMuc2lkZV0gPSAwO1xuICAgICAgICB9XG4gICAgICAgIGZ1bmN0aW9uIHEoVywgUCwgWSkge1xuICAgICAgICAgIGxldCBaID0gdGhpcy5jaGFydCwgdDEgPSAoazEpID0+IHtcbiAgICAgICAgICAgIGlmICh0eXBlb2YgazEgPT0gXCJzdHJpbmdcIikge1xuICAgICAgICAgICAgICBsZXQgTjEgPSBwYXJzZUludChrMSwgMTApO1xuICAgICAgICAgICAgICByZXR1cm4gYTEudGVzdChrMSkgJiYgKE4xID0gTjEgKiBzMSAvIDEwMCksIE4xO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIGsxO1xuICAgICAgICAgIH0sIGkxID0gdGhpcy5jZW50ZXIsIG4xID0gdGhpcy5zdGFydEFuZ2xlUmFkLCBzMSA9IGkxWzJdIC8gMiwgZDEgPSBNYXRoLm1pbih0aGlzLm9mZnNldCwgMCksIGIxID0gdGhpcy5sZWZ0IHx8IDAsIGMxID0gdGhpcy50b3AgfHwgMCwgYTEgPSAvJSQvLCBsMSA9IHRoaXMuaXNDaXJjdWxhciwgcDEsIE0xLCBBMSwgdTEsIGgxLCBDMSwgcTEgPSBnKHQxKFkub3V0ZXJSYWRpdXMpLCBzMSksIFcxID0gdDEoWS5pbm5lclJhZGl1cyksIFIxID0gZyh0MShZLnRoaWNrbmVzcyksIDEwKTtcbiAgICAgICAgICBpZiAodGhpcy5vcHRpb25zLmdyaWRMaW5lSW50ZXJwb2xhdGlvbiA9PT0gXCJwb2x5Z29uXCIpXG4gICAgICAgICAgICBDMSA9IHRoaXMuZ2V0UGxvdExpbmVQYXRoKHsgdmFsdWU6IFcgfSkuY29uY2F0KHRoaXMuZ2V0UGxvdExpbmVQYXRoKHsgdmFsdWU6IFAsIHJldmVyc2U6ICEwIH0pKTtcbiAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIFcgPSBNYXRoLm1heChXLCB0aGlzLm1pbiksIFAgPSBNYXRoLm1pbihQLCB0aGlzLm1heCk7XG4gICAgICAgICAgICBsZXQgazEgPSB0aGlzLnRyYW5zbGF0ZShXKSwgTjEgPSB0aGlzLnRyYW5zbGF0ZShQKTtcbiAgICAgICAgICAgIGwxIHx8IChxMSA9IGsxIHx8IDAsIFcxID0gTjEgfHwgMCksIFkuc2hhcGUgIT09IFwiY2lyY2xlXCIgJiYgbDEgPyAocDEgPSBuMSArIChrMSB8fCAwKSwgTTEgPSBuMSArIChOMSB8fCAwKSkgOiAocDEgPSAtTWF0aC5QSSAvIDIsIE0xID0gMS41ICogTWF0aC5QSSwgaDEgPSAhMCksIHExIC09IGQxLCBSMSAtPSBkMSwgQzEgPSBaLnJlbmRlcmVyLnN5bWJvbHMuYXJjKGIxICsgaTFbMF0sIGMxICsgaTFbMV0sIHExLCBxMSwgeyBzdGFydDogTWF0aC5taW4ocDEsIE0xKSwgZW5kOiBNYXRoLm1heChwMSwgTTEpLCBpbm5lclI6IGcoVzEsIHExIC0gUjEpLCBvcGVuOiBoMSwgYm9yZGVyUmFkaXVzOiBZLmJvcmRlclJhZGl1cyB9KSwgbDEgJiYgKEExID0gKE0xICsgcDEpIC8gMiwgdTEgPSBiMSArIGkxWzBdICsgaTFbMl0gLyAyICogTWF0aC5jb3MoQTEpLCBDMS54Qm91bmRzID0gQTEgPiAtTWF0aC5QSSAvIDIgJiYgQTEgPCBNYXRoLlBJIC8gMiA/IFt1MSwgWi5wbG90V2lkdGhdIDogWzAsIHUxXSwgQzEueUJvdW5kcyA9IFtjMSArIGkxWzFdICsgaTFbMl0gLyAyICogTWF0aC5zaW4oQTEpXSwgQzEueUJvdW5kc1swXSArPSBBMSA+IC1NYXRoLlBJICYmIEExIDwgMCB8fCBBMSA+IE1hdGguUEkgPyAtMTAgOiAxMCk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiBDMTtcbiAgICAgICAgfVxuICAgICAgICBmdW5jdGlvbiBtKFcpIHtcbiAgICAgICAgICBsZXQgUCA9IHRoaXMucGFuZS5jZW50ZXIsIFkgPSB0aGlzLmNoYXJ0LCBaID0gWS5pbnZlcnRlZCwgdDEgPSBXLnJldmVyc2UsIGkxID0gdGhpcy5wYW5lLm9wdGlvbnMuYmFja2dyb3VuZCA/IHRoaXMucGFuZS5vcHRpb25zLmJhY2tncm91bmRbMF0gfHwgdGhpcy5wYW5lLm9wdGlvbnMuYmFja2dyb3VuZCA6IHt9LCBuMSA9IGkxLmlubmVyUmFkaXVzIHx8IFwiMCVcIiwgczEgPSBpMS5vdXRlclJhZGl1cyB8fCBcIjEwMCVcIiwgZDEgPSBQWzBdICsgWS5wbG90TGVmdCwgYjEgPSBQWzFdICsgWS5wbG90VG9wLCBjMSA9IHRoaXMuaGVpZ2h0LCBhMSA9IFcuaXNDcm9zc2hhaXIsIGwxID0gUFszXSAvIDIsIHAxID0gVy52YWx1ZSwgTTEsIEExLCB1MSwgaDEsIEMxLCBxMSwgVzEsIFIxLCBrMSwgTjEgPSB0aGlzLmdldFBvc2l0aW9uKHAxKSwgdjEgPSBOMS54LCBTMSA9IE4xLnk7XG4gICAgICAgICAgaWYgKGExICYmIChwMSA9IChSMSA9IHRoaXMuZ2V0Q3Jvc3NoYWlyUG9zaXRpb24oVywgZDEsIGIxKSlbMF0sIHYxID0gUjFbMV0sIFMxID0gUjFbMl0pLCB0aGlzLmlzQ2lyY3VsYXIpXG4gICAgICAgICAgICBBMSA9IE1hdGguc3FydChNYXRoLnBvdyh2MSAtIGQxLCAyKSArIE1hdGgucG93KFMxIC0gYjEsIDIpKSwgdTEgPSB0eXBlb2YgbjEgPT0gXCJzdHJpbmdcIiA/IEwobjEsIDEpIDogbjEgLyBBMSwgaDEgPSB0eXBlb2YgczEgPT0gXCJzdHJpbmdcIiA/IEwoczEsIDEpIDogczEgLyBBMSwgUCAmJiBsMSAmJiAodTEgPCAoTTEgPSBsMSAvIEExKSAmJiAodTEgPSBNMSksIGgxIDwgTTEgJiYgKGgxID0gTTEpKSwgazEgPSBbW1wiTVwiLCBkMSArIHUxICogKHYxIC0gZDEpLCBiMSAtIHUxICogKGIxIC0gUzEpXSwgW1wiTFwiLCB2MSAtICgxIC0gaDEpICogKHYxIC0gZDEpLCBTMSArICgxIC0gaDEpICogKGIxIC0gUzEpXV07XG4gICAgICAgICAgZWxzZSBpZiAoKHAxID0gdGhpcy50cmFuc2xhdGUocDEpKSAmJiAocDEgPCAwIHx8IHAxID4gYzEpICYmIChwMSA9IDApLCB0aGlzLm9wdGlvbnMuZ3JpZExpbmVJbnRlcnBvbGF0aW9uID09PSBcImNpcmNsZVwiKVxuICAgICAgICAgICAgazEgPSB0aGlzLmdldExpbmVQYXRoKDAsIHAxLCBsMSk7XG4gICAgICAgICAgZWxzZSBpZiAoazEgPSBbXSwgWVtaID8gXCJ5QXhpc1wiIDogXCJ4QXhpc1wiXS5mb3JFYWNoKChEMSkgPT4ge1xuICAgICAgICAgICAgRDEucGFuZSA9PT0gdGhpcy5wYW5lICYmIChDMSA9IEQxKTtcbiAgICAgICAgICB9KSwgQzEpIHtcbiAgICAgICAgICAgIFcxID0gQzEudGlja1Bvc2l0aW9ucywgQzEuYXV0b0Nvbm5lY3QgJiYgKFcxID0gVzEuY29uY2F0KFtXMVswXV0pKSwgdDEgJiYgKFcxID0gVzEuc2xpY2UoKS5yZXZlcnNlKCkpLCBwMSAmJiAocDEgKz0gbDEpO1xuICAgICAgICAgICAgZm9yIChsZXQgRDEgPSAwOyBEMSA8IFcxLmxlbmd0aDsgRDErKylcbiAgICAgICAgICAgICAgcTEgPSBDMS5nZXRQb3NpdGlvbihXMVtEMV0sIHAxKSwgazEucHVzaChEMSA/IFtcIkxcIiwgcTEueCwgcTEueV0gOiBbXCJNXCIsIHExLngsIHExLnldKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIGsxO1xuICAgICAgICB9XG4gICAgICAgIGZ1bmN0aW9uIGsoVywgUCkge1xuICAgICAgICAgIGxldCBZID0gdGhpcy50cmFuc2xhdGUoVyk7XG4gICAgICAgICAgcmV0dXJuIHRoaXMucG9zdFRyYW5zbGF0ZSh0aGlzLmlzQ2lyY3VsYXIgPyBZIDogdGhpcy5hbmdsZVJhZCwgZyh0aGlzLmlzQ2lyY3VsYXIgPyBQIDogWSA8IDAgPyAwIDogWSwgdGhpcy5jZW50ZXJbMl0gLyAyKSAtIHRoaXMub2Zmc2V0KTtcbiAgICAgICAgfVxuICAgICAgICBmdW5jdGlvbiB4KCkge1xuICAgICAgICAgIGxldCBXID0gdGhpcy5jZW50ZXIsIFAgPSB0aGlzLmNoYXJ0LCBZID0gdGhpcy5vcHRpb25zLnRpdGxlO1xuICAgICAgICAgIHJldHVybiB7IHg6IFAucGxvdExlZnQgKyBXWzBdICsgKFkueCB8fCAwKSwgeTogUC5wbG90VG9wICsgV1sxXSAtIHsgaGlnaDogMC41LCBtaWRkbGU6IDAuMjUsIGxvdzogMCB9W1kuYWxpZ25dICogV1syXSArIChZLnkgfHwgMCkgfTtcbiAgICAgICAgfVxuICAgICAgICBmdW5jdGlvbiBOKFcpIHtcbiAgICAgICAgICBXLmJlZm9yZVNldFRpY2tQb3NpdGlvbnMgPSBYLCBXLmNyZWF0ZUxhYmVsQ29sbGVjdG9yID0gRiwgVy5nZXRDcm9zc2hhaXJQb3NpdGlvbiA9IHcsIFcuZ2V0TGluZVBhdGggPSBILCBXLmdldE9mZnNldCA9IEMsIFcuZ2V0UGxvdEJhbmRQYXRoID0gcSwgVy5nZXRQbG90TGluZVBhdGggPSBtLCBXLmdldFBvc2l0aW9uID0gaywgVy5nZXRUaXRsZVBvc2l0aW9uID0geCwgVy5wb3N0VHJhbnNsYXRlID0gUSwgVy5zZXRBeGlzU2l6ZSA9IEQsIFcuc2V0QXhpc1RyYW5zbGF0aW9uID0gRywgVy5zZXRPcHRpb25zID0gSjtcbiAgICAgICAgfVxuICAgICAgICBmdW5jdGlvbiBWKCkge1xuICAgICAgICAgIGxldCBXID0gdGhpcy5jaGFydCwgUCA9IHRoaXMub3B0aW9ucywgWSA9IFcuYW5ndWxhciAmJiB0aGlzLmlzWEF4aXMsIFogPSB0aGlzLnBhbmUsIHQxID0gWiAmJiBaLm9wdGlvbnM7XG4gICAgICAgICAgaWYgKCFZICYmIFogJiYgKFcuYW5ndWxhciB8fCBXLnBvbGFyKSkge1xuICAgICAgICAgICAgbGV0IGkxID0gMiAqIE1hdGguUEksIG4xID0gKGcodDEuc3RhcnRBbmdsZSwgMCkgLSA5MCkgKiBNYXRoLlBJIC8gMTgwLCBzMSA9IChnKHQxLmVuZEFuZ2xlLCBnKHQxLnN0YXJ0QW5nbGUsIDApICsgMzYwKSAtIDkwKSAqIE1hdGguUEkgLyAxODA7XG4gICAgICAgICAgICB0aGlzLmFuZ2xlUmFkID0gKFAuYW5nbGUgfHwgMCkgKiBNYXRoLlBJIC8gMTgwLCB0aGlzLnN0YXJ0QW5nbGVSYWQgPSBuMSwgdGhpcy5lbmRBbmdsZVJhZCA9IHMxLCB0aGlzLm9mZnNldCA9IFAub2Zmc2V0IHx8IDA7XG4gICAgICAgICAgICBsZXQgZDEgPSAobjEgJSBpMSArIGkxKSAlIGkxLCBiMSA9IChzMSAlIGkxICsgaTEpICUgaTE7XG4gICAgICAgICAgICBkMSA+IE1hdGguUEkgJiYgKGQxIC09IGkxKSwgYjEgPiBNYXRoLlBJICYmIChiMSAtPSBpMSksIHRoaXMubm9ybWFsaXplZFN0YXJ0QW5nbGVSYWQgPSBkMSwgdGhpcy5ub3JtYWxpemVkRW5kQW5nbGVSYWQgPSBiMTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZnVuY3Rpb24gUihXKSB7XG4gICAgICAgICAgdGhpcy5pc1JhZGlhbCAmJiAoVy5hbGlnbiA9IHZvaWQgMCwgVy5wcmV2ZW50RGVmYXVsdCgpKTtcbiAgICAgICAgfVxuICAgICAgICBmdW5jdGlvbiBJKCkge1xuICAgICAgICAgIGlmICh0aGlzLmNoYXJ0ICYmIHRoaXMuY2hhcnQubGFiZWxDb2xsZWN0b3JzKSB7XG4gICAgICAgICAgICBsZXQgVyA9IHRoaXMubGFiZWxDb2xsZWN0b3IgPyB0aGlzLmNoYXJ0LmxhYmVsQ29sbGVjdG9ycy5pbmRleE9mKHRoaXMubGFiZWxDb2xsZWN0b3IpIDogLTE7XG4gICAgICAgICAgICBXID49IDAgJiYgdGhpcy5jaGFydC5sYWJlbENvbGxlY3RvcnMuc3BsaWNlKFcsIDEpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBmdW5jdGlvbiBqKFcpIHtcbiAgICAgICAgICBsZXQgUCwgWSA9IHRoaXMuY2hhcnQsIFogPSBZLmFuZ3VsYXIsIHQxID0gWS5wb2xhciwgaTEgPSB0aGlzLmlzWEF4aXMsIG4xID0gdGhpcy5jb2xsLCBzMSA9IFcudXNlck9wdGlvbnMucGFuZSB8fCAwLCBkMSA9IHRoaXMucGFuZSA9IFkucGFuZSAmJiBZLnBhbmVbczFdO1xuICAgICAgICAgIGlmIChuMSA9PT0gXCJjb2xvckF4aXNcIikge1xuICAgICAgICAgICAgdGhpcy5pc1JhZGlhbCA9ICExO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgIH1cbiAgICAgICAgICBaID8gKFogJiYgaTEgPyAodGhpcy5pc0hpZGRlbiA9ICEwLCB0aGlzLmNyZWF0ZUxhYmVsQ29sbGVjdG9yID0gVCwgdGhpcy5nZXRPZmZzZXQgPSBiLCB0aGlzLnJlZHJhdyA9IEUsIHRoaXMucmVuZGVyID0gRSwgdGhpcy5zZXRTY2FsZSA9IGIsIHRoaXMuc2V0Q2F0ZWdvcmllcyA9IGIsIHRoaXMuc2V0VGl0bGUgPSBiKSA6IE4odGhpcyksIFAgPSAhaTEpIDogdDEgJiYgKE4odGhpcyksIFAgPSB0aGlzLmhvcml6KSwgWiB8fCB0MSA/ICh0aGlzLmlzUmFkaWFsID0gITAsIHRoaXMubGFiZWxDb2xsZWN0b3IgfHwgKHRoaXMubGFiZWxDb2xsZWN0b3IgPSB0aGlzLmNyZWF0ZUxhYmVsQ29sbGVjdG9yKCkpLCB0aGlzLmxhYmVsQ29sbGVjdG9yICYmIFkubGFiZWxDb2xsZWN0b3JzLnB1c2godGhpcy5sYWJlbENvbGxlY3RvcikpIDogdGhpcy5pc1JhZGlhbCA9ICExLCBkMSAmJiBQICYmIChkMS5heGlzID0gdGhpcyksIHRoaXMuaXNDaXJjdWxhciA9IFA7XG4gICAgICAgIH1cbiAgICAgICAgZnVuY3Rpb24gVSgpIHtcbiAgICAgICAgICB0aGlzLmlzUmFkaWFsICYmIHRoaXMuYmVmb3JlU2V0VGlja1Bvc2l0aW9ucygpO1xuICAgICAgICB9XG4gICAgICAgIGZ1bmN0aW9uIF8oVykge1xuICAgICAgICAgIGxldCBQID0gdGhpcy5sYWJlbDtcbiAgICAgICAgICBpZiAoIVApXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgbGV0IFkgPSB0aGlzLmF4aXMsIFogPSBQLmdldEJCb3goKSwgdDEgPSBZLm9wdGlvbnMubGFiZWxzLCBpMSA9IChZLnRyYW5zbGF0ZSh0aGlzLnBvcykgKyBZLnN0YXJ0QW5nbGVSYWQgKyBNYXRoLlBJIC8gMikgLyBNYXRoLlBJICogMTgwICUgMzYwLCBuMSA9IE1hdGgucm91bmQoaTEpLCBzMSA9IEEodDEueSkgPyAwIDogLSgwLjMgKiBaLmhlaWdodCksIGQxID0gdDEueSwgYjEsIGMxID0gMjAsIGExID0gdDEuYWxpZ24sIGwxID0gXCJlbmRcIiwgcDEgPSBuMSA8IDAgPyBuMSArIDM2MCA6IG4xLCBNMSA9IHAxLCBBMSA9IDAsIHUxID0gMDtcbiAgICAgICAgICBZLmlzUmFkaWFsICYmIChiMSA9IFkuZ2V0UG9zaXRpb24odGhpcy5wb3MsIFkuY2VudGVyWzJdIC8gMiArIEwoZyh0MS5kaXN0YW5jZSwgLTI1KSwgWS5jZW50ZXJbMl0gLyAyLCAtWS5jZW50ZXJbMl0gLyAyKSksIHQxLnJvdGF0aW9uID09PSBcImF1dG9cIiA/IFAuYXR0cih7IHJvdGF0aW9uOiBpMSB9KSA6IEEoZDEpIHx8IChkMSA9IFkuY2hhcnQucmVuZGVyZXIuZm9udE1ldHJpY3MoUCkuYiAtIFouaGVpZ2h0IC8gMiksIEEoYTEpIHx8IChZLmlzQ2lyY3VsYXIgPyAoWi53aWR0aCA+IFkubGVuICogWS50aWNrSW50ZXJ2YWwgLyAoWS5tYXggLSBZLm1pbikgJiYgKGMxID0gMCksIGExID0gaTEgPiBjMSAmJiBpMSA8IDE4MCAtIGMxID8gXCJsZWZ0XCIgOiBpMSA+IDE4MCArIGMxICYmIGkxIDwgMzYwIC0gYzEgPyBcInJpZ2h0XCIgOiBcImNlbnRlclwiKSA6IGExID0gXCJjZW50ZXJcIiwgUC5hdHRyKHsgYWxpZ246IGExIH0pKSwgYTEgPT09IFwiYXV0b1wiICYmIFkudGlja1Bvc2l0aW9ucy5sZW5ndGggPT09IDIgJiYgWS5pc0NpcmN1bGFyICYmIChwMSA+IDkwICYmIHAxIDwgMTgwID8gcDEgPSAxODAgLSBwMSA6IHAxID4gMjcwICYmIHAxIDw9IDM2MCAmJiAocDEgPSA1NDAgLSBwMSksIE0xID4gMTgwICYmIE0xIDw9IDM2MCAmJiAoTTEgPSAzNjAgLSBNMSksIChZLnBhbmUub3B0aW9ucy5zdGFydEFuZ2xlID09PSBuMSB8fCBZLnBhbmUub3B0aW9ucy5zdGFydEFuZ2xlID09PSBuMSArIDM2MCB8fCBZLnBhbmUub3B0aW9ucy5zdGFydEFuZ2xlID09PSBuMSAtIDM2MCkgJiYgKGwxID0gXCJzdGFydFwiKSwgYTEgPSBuMSA+PSAtOTAgJiYgbjEgPD0gOTAgfHwgbjEgPj0gLTM2MCAmJiBuMSA8PSAtMjcwIHx8IG4xID49IDI3MCAmJiBuMSA8PSAzNjAgPyBsMSA9PT0gXCJzdGFydFwiID8gXCJyaWdodFwiIDogXCJsZWZ0XCIgOiBsMSA9PT0gXCJzdGFydFwiID8gXCJsZWZ0XCIgOiBcInJpZ2h0XCIsIE0xID4gNzAgJiYgTTEgPCAxMTAgJiYgKGExID0gXCJjZW50ZXJcIiksIHAxIDwgMTUgfHwgcDEgPj0gMTgwICYmIHAxIDwgMTk1ID8gQTEgPSAwLjMgKiBaLmhlaWdodCA6IHAxID49IDE1ICYmIHAxIDw9IDM1ID8gQTEgPSBsMSA9PT0gXCJzdGFydFwiID8gMCA6IDAuNzUgKiBaLmhlaWdodCA6IHAxID49IDE5NSAmJiBwMSA8PSAyMTUgPyBBMSA9IGwxID09PSBcInN0YXJ0XCIgPyAwLjc1ICogWi5oZWlnaHQgOiAwIDogcDEgPiAzNSAmJiBwMSA8PSA5MCA/IEExID0gbDEgPT09IFwic3RhcnRcIiA/IC0oMC4yNSAqIFouaGVpZ2h0KSA6IFouaGVpZ2h0IDogcDEgPiAyMTUgJiYgcDEgPD0gMjcwICYmIChBMSA9IGwxID09PSBcInN0YXJ0XCIgPyBaLmhlaWdodCA6IC0oMC4yNSAqIFouaGVpZ2h0KSksIE0xIDwgMTUgPyB1MSA9IGwxID09PSBcInN0YXJ0XCIgPyAtKDAuMTUgKiBaLmhlaWdodCkgOiAwLjE1ICogWi5oZWlnaHQgOiBNMSA+IDE2NSAmJiBNMSA8PSAxODAgJiYgKHUxID0gbDEgPT09IFwic3RhcnRcIiA/IDAuMTUgKiBaLmhlaWdodCA6IC0oMC4xNSAqIFouaGVpZ2h0KSksIFAuYXR0cih7IGFsaWduOiBhMSB9KSwgUC50cmFuc2xhdGUodTEsIEExICsgczEpKSwgVy5wb3MueCA9IGIxLnggKyAodDEueCB8fCAwKSwgVy5wb3MueSA9IGIxLnkgKyAoZDEgfHwgMCkpO1xuICAgICAgICB9XG4gICAgICAgIGZ1bmN0aW9uIHIxKFcpIHtcbiAgICAgICAgICB0aGlzLmF4aXMuZ2V0UG9zaXRpb24gJiYgeihXLnBvcywgdGhpcy5heGlzLmdldFBvc2l0aW9uKHRoaXMucG9zKSk7XG4gICAgICAgIH1cbiAgICAgICAgZnVuY3Rpb24gSyh7IG9wdGlvbnM6IFcgfSkge1xuICAgICAgICAgIFcueEF4aXMgJiYgaCghMCwgQi5yYWRpYWxEZWZhdWx0T3B0aW9ucy5jaXJjdWxhciwgVy54QXhpcyksIFcueUF4aXMgJiYgaCghMCwgQi5yYWRpYWxEZWZhdWx0T3B0aW9ucy5yYWRpYWxHYXVnZSwgVy55QXhpcyk7XG4gICAgICAgIH1cbiAgICAgICAgZnVuY3Rpb24gUShXLCBQKSB7XG4gICAgICAgICAgbGV0IFkgPSB0aGlzLmNoYXJ0LCBaID0gdGhpcy5jZW50ZXI7XG4gICAgICAgICAgcmV0dXJuIFcgPSB0aGlzLnN0YXJ0QW5nbGVSYWQgKyBXLCB7IHg6IFkucGxvdExlZnQgKyBaWzBdICsgTWF0aC5jb3MoVykgKiBQLCB5OiBZLnBsb3RUb3AgKyBaWzFdICsgTWF0aC5zaW4oVykgKiBQIH07XG4gICAgICAgIH1cbiAgICAgICAgZnVuY3Rpb24gRSgpIHtcbiAgICAgICAgICB0aGlzLmlzRGlydHkgPSAhMTtcbiAgICAgICAgfVxuICAgICAgICBmdW5jdGlvbiBEKCkge1xuICAgICAgICAgIGxldCBXLCBQO1xuICAgICAgICAgIHRoaXMuY29uc3RydWN0b3IucHJvdG90eXBlLnNldEF4aXNTaXplLmNhbGwodGhpcyksIHRoaXMuaXNSYWRpYWwgJiYgKHRoaXMucGFuZS51cGRhdGVDZW50ZXIodGhpcyksIFcgPSB0aGlzLmNlbnRlciA9IHRoaXMucGFuZS5jZW50ZXIuc2xpY2UoKSwgdGhpcy5pc0NpcmN1bGFyID8gdGhpcy5zZWN0b3IgPSB0aGlzLmVuZEFuZ2xlUmFkIC0gdGhpcy5zdGFydEFuZ2xlUmFkIDogKFAgPSB0aGlzLnBvc3RUcmFuc2xhdGUodGhpcy5hbmdsZVJhZCwgV1szXSAvIDIpLCBXWzBdID0gUC54IC0gdGhpcy5jaGFydC5wbG90TGVmdCwgV1sxXSA9IFAueSAtIHRoaXMuY2hhcnQucGxvdFRvcCksIHRoaXMubGVuID0gdGhpcy53aWR0aCA9IHRoaXMuaGVpZ2h0ID0gKFdbMl0gLSBXWzNdKSAqIGcodGhpcy5zZWN0b3IsIDEpIC8gMik7XG4gICAgICAgIH1cbiAgICAgICAgZnVuY3Rpb24gRygpIHtcbiAgICAgICAgICB0aGlzLmNvbnN0cnVjdG9yLnByb3RvdHlwZS5zZXRBeGlzVHJhbnNsYXRpb24uY2FsbCh0aGlzKSwgdGhpcy5jZW50ZXIgJiYgKHRoaXMuaXNDaXJjdWxhciA/IHRoaXMudHJhbnNBID0gKHRoaXMuZW5kQW5nbGVSYWQgLSB0aGlzLnN0YXJ0QW5nbGVSYWQpIC8gKHRoaXMubWF4IC0gdGhpcy5taW4gfHwgMSkgOiB0aGlzLnRyYW5zQSA9ICh0aGlzLmNlbnRlclsyXSAtIHRoaXMuY2VudGVyWzNdKSAvIDIgLyAodGhpcy5tYXggLSB0aGlzLm1pbiB8fCAxKSwgdGhpcy5pc1hBeGlzID8gdGhpcy5taW5QaXhlbFBhZGRpbmcgPSB0aGlzLnRyYW5zQSAqIHRoaXMubWluUG9pbnRPZmZzZXQgOiB0aGlzLm1pblBpeGVsUGFkZGluZyA9IDApO1xuICAgICAgICB9XG4gICAgICAgIGZ1bmN0aW9uIEooVykge1xuICAgICAgICAgIGxldCB7IGNvbGw6IFAgfSA9IHRoaXMsIHsgYW5ndWxhcjogWSwgaW52ZXJ0ZWQ6IFosIHBvbGFyOiB0MSB9ID0gdGhpcy5jaGFydCwgaTEgPSB7fTtcbiAgICAgICAgICBZID8gdGhpcy5pc1hBeGlzIHx8IChpMSA9IGgocC55QXhpcywgQi5yYWRpYWxEZWZhdWx0T3B0aW9ucy5yYWRpYWxHYXVnZSkpIDogdDEgJiYgKGkxID0gdGhpcy5ob3JpeiA/IGgocC54QXhpcywgQi5yYWRpYWxEZWZhdWx0T3B0aW9ucy5jaXJjdWxhcikgOiBoKFAgPT09IFwieEF4aXNcIiA/IHAueEF4aXMgOiBwLnlBeGlzLCBCLnJhZGlhbERlZmF1bHRPcHRpb25zLnJhZGlhbCkpLCBaICYmIFAgPT09IFwieUF4aXNcIiAmJiAoaTEuc3RhY2tMYWJlbHMgPSBPKHAueUF4aXMsICEwKSA/IHAueUF4aXMuc3RhY2tMYWJlbHMgOiB7fSwgaTEucmV2ZXJzZWRTdGFja3MgPSAhMCk7XG4gICAgICAgICAgbGV0IG4xID0gdGhpcy5vcHRpb25zID0gaChpMSwgVyk7XG4gICAgICAgICAgbjEucGxvdEJhbmRzIHx8IChuMS5wbG90QmFuZHMgPSBbXSksIGYodGhpcywgXCJhZnRlclNldE9wdGlvbnNcIik7XG4gICAgICAgIH1cbiAgICAgICAgZnVuY3Rpb24gUyhXLCBQLCBZLCBaLCB0MSwgaTEsIG4xKSB7XG4gICAgICAgICAgbGV0IHMxLCBkMSA9IHRoaXMuYXhpcztcbiAgICAgICAgICByZXR1cm4gZDEuaXNSYWRpYWwgPyBbXCJNXCIsIFAsIFksIFwiTFwiLCAoczEgPSBkMS5nZXRQb3NpdGlvbih0aGlzLnBvcywgZDEuY2VudGVyWzJdIC8gMiArIFopKS54LCBzMS55XSA6IFcuY2FsbCh0aGlzLCBQLCBZLCBaLCB0MSwgaTEsIG4xKTtcbiAgICAgICAgfVxuICAgICAgICBCLnJhZGlhbERlZmF1bHRPcHRpb25zID0gaChyKSwgQi5jb21wb3NlID0gZnVuY3Rpb24oVywgUCkge1xuICAgICAgICAgIHJldHVybiB2KGQsIFwiQXhpcy5SYWRpYWxcIikgJiYgKE0oVywgXCJhZnRlckluaXRcIiwgViksIE0oVywgXCJhdXRvTGFiZWxBbGlnblwiLCBSKSwgTShXLCBcImRlc3Ryb3lcIiwgSSksIE0oVywgXCJpbml0XCIsIGopLCBNKFcsIFwiaW5pdGlhbEF4aXNUcmFuc2xhdGlvblwiLCBVKSwgTShQLCBcImFmdGVyR2V0TGFiZWxQb3NpdGlvblwiLCBfKSwgTShQLCBcImFmdGVyR2V0UG9zaXRpb25cIiwgcjEpLCBNKGEsIFwic2V0T3B0aW9uc1wiLCBLKSwgeShQLnByb3RvdHlwZSwgXCJnZXRNYXJrUGF0aFwiLCBTKSksIFc7XG4gICAgICAgIH07XG4gICAgICB9KGwgfHwgKGwgPSB7fSkpLCBsO1xuICAgIH0pLCBuKG8sIFwiU2VyaWVzL1BvbGFyQ29tcG9zaXRpb24uanNcIiwgW29bXCJDb3JlL0FuaW1hdGlvbi9BbmltYXRpb25VdGlsaXRpZXMuanNcIl0sIG9bXCJDb3JlL0dsb2JhbHMuanNcIl0sIG9bXCJDb3JlL1Nlcmllcy9TZXJpZXMuanNcIl0sIG9bXCJFeHRlbnNpb25zL1BhbmUvUGFuZS5qc1wiXSwgb1tcIkNvcmUvQXhpcy9SYWRpYWxBeGlzLmpzXCJdLCBvW1wiQ29yZS9VdGlsaXRpZXMuanNcIl1dLCBmdW5jdGlvbihyLCBpLCBhLCBzLCBsLCBwKSB7XG4gICAgICBsZXQgeyBhbmltT2JqZWN0OiBkIH0gPSByLCB7IGNvbXBvc2VkOiBiIH0gPSBpLCB7IGFkZEV2ZW50OiBNLCBkZWZpbmVkOiB1LCBmaW5kOiBBLCBpc051bWJlcjogeiwgbWVyZ2U6IGYsIHBpY2s6IE8sIHB1c2hVbmlxdWU6IGgsIHJlbGF0aXZlTGVuZ3RoOiBnLCBzcGxhdDogdiwgdW5pcXVlS2V5OiBMLCB3cmFwOiB5IH0gPSBwO1xuICAgICAgZnVuY3Rpb24gQigpIHtcbiAgICAgICAgKHRoaXMucGFuZSB8fCBbXSkuZm9yRWFjaCgoSykgPT4ge1xuICAgICAgICAgIEsucmVuZGVyKCk7XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgICAgZnVuY3Rpb24gWChLKSB7XG4gICAgICAgIGxldCBRID0gSy5hcmdzWzBdLnhBeGlzLCBFID0gSy5hcmdzWzBdLnlBeGlzLCBEID0gSy5hcmdzWzBdLmNoYXJ0O1xuICAgICAgICBRICYmIEUgJiYgKEUuZ3JpZExpbmVJbnRlcnBvbGF0aW9uID09PSBcInBvbHlnb25cIiA/IChRLnN0YXJ0T25UaWNrID0gITAsIFEuZW5kT25UaWNrID0gITApIDogUS5ncmlkTGluZUludGVycG9sYXRpb24gPT09IFwicG9seWdvblwiICYmIEQuaW52ZXJ0ZWQgJiYgKEUuc3RhcnRPblRpY2sgPSAhMCwgRS5lbmRPblRpY2sgPSAhMCkpO1xuICAgICAgfVxuICAgICAgZnVuY3Rpb24gRigpIHtcbiAgICAgICAgdGhpcy5wYW5lIHx8ICh0aGlzLnBhbmUgPSBbXSksIHRoaXMub3B0aW9ucy5wYW5lID0gdih0aGlzLm9wdGlvbnMucGFuZSksIHRoaXMub3B0aW9ucy5wYW5lLmZvckVhY2goKEspID0+IHtcbiAgICAgICAgICBuZXcgcyhLLCB0aGlzKTtcbiAgICAgICAgfSwgdGhpcyk7XG4gICAgICB9XG4gICAgICBmdW5jdGlvbiBUKEspIHtcbiAgICAgICAgbGV0IFEgPSBLLmFyZ3MubWFya2VyLCBFID0gdGhpcy5jaGFydC54QXhpc1swXSwgRCA9IHRoaXMuY2hhcnQueUF4aXNbMF0sIEcgPSB0aGlzLmNoYXJ0LmludmVydGVkLCBKID0gRyA/IEQgOiBFLCBTID0gRyA/IEUgOiBEO1xuICAgICAgICBpZiAodGhpcy5jaGFydC5wb2xhcikge1xuICAgICAgICAgIEsucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICBsZXQgVyA9IChRLmF0dHIgPyBRLmF0dHIoXCJzdGFydFwiKSA6IFEuc3RhcnQpIC0gSi5zdGFydEFuZ2xlUmFkLCBQID0gUS5hdHRyID8gUS5hdHRyKFwiclwiKSA6IFEuciwgWSA9IChRLmF0dHIgPyBRLmF0dHIoXCJlbmRcIikgOiBRLmVuZCkgLSBKLnN0YXJ0QW5nbGVSYWQsIFogPSBRLmF0dHIgPyBRLmF0dHIoXCJpbm5lclJcIikgOiBRLmlubmVyUjtcbiAgICAgICAgICBLLnJlc3VsdC54ID0gVyArIEoucG9zLCBLLnJlc3VsdC53aWR0aCA9IFkgLSBXLCBLLnJlc3VsdC55ID0gUy5sZW4gKyBTLnBvcyAtIFAsIEsucmVzdWx0LmhlaWdodCA9IFAgLSBaO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBmdW5jdGlvbiB3KEspIHtcbiAgICAgICAgbGV0IFEgPSB0aGlzLmNoYXJ0O1xuICAgICAgICBpZiAoUS5wb2xhciAmJiBRLmhvdmVyUGFuZSAmJiBRLmhvdmVyUGFuZS5heGlzKSB7XG4gICAgICAgICAgSy5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgIGxldCBFID0gUS5ob3ZlclBhbmUuY2VudGVyLCBEID0gUS5tb3VzZURvd25YIHx8IDAsIEcgPSBRLm1vdXNlRG93blkgfHwgMCwgSiA9IEsuYXJncy5jaGFydFksIFMgPSBLLmFyZ3MuY2hhcnRYLCBXID0gMiAqIE1hdGguUEksIFAgPSBRLmhvdmVyUGFuZS5heGlzLnN0YXJ0QW5nbGVSYWQsIFkgPSBRLmhvdmVyUGFuZS5heGlzLmVuZEFuZ2xlUmFkLCBaID0gUS5pbnZlcnRlZCA/IFEueEF4aXNbMF0gOiBRLnlBeGlzWzBdLCB0MSA9IHt9LCBpMSA9IFwiYXJjXCI7XG4gICAgICAgICAgaWYgKHQxLnggPSBFWzBdICsgUS5wbG90TGVmdCwgdDEueSA9IEVbMV0gKyBRLnBsb3RUb3AsIHRoaXMuem9vbUhvcikge1xuICAgICAgICAgICAgbGV0IG4xID0gUCA+IDAgPyBZIC0gUCA6IE1hdGguYWJzKFApICsgTWF0aC5hYnMoWSksIHMxID0gTWF0aC5hdGFuMihHIC0gUS5wbG90VG9wIC0gRVsxXSwgRCAtIFEucGxvdExlZnQgLSBFWzBdKSAtIFAsIGQxID0gTWF0aC5hdGFuMihKIC0gUS5wbG90VG9wIC0gRVsxXSwgUyAtIFEucGxvdExlZnQgLSBFWzBdKSAtIFA7XG4gICAgICAgICAgICB0MS5yID0gRVsyXSAvIDIsIHQxLmlubmVyUiA9IEVbM10gLyAyLCBzMSA8PSAwICYmIChzMSArPSBXKSwgZDEgPD0gMCAmJiAoZDEgKz0gVyksIGQxIDwgczEgJiYgKGQxID0gW3MxLCBzMSA9IGQxXVswXSksIG4xIDwgVyAmJiBQICsgZDEgPiBZICsgKFcgLSBuMSkgLyAyICYmIChkMSA9IHMxLCBzMSA9IFAgPD0gMCA/IFAgOiAwKTtcbiAgICAgICAgICAgIGxldCBiMSA9IHQxLnN0YXJ0ID0gTWF0aC5tYXgoczEgKyBQLCBQKSwgYzEgPSB0MS5lbmQgPSBNYXRoLm1pbihkMSArIFAsIFkpO1xuICAgICAgICAgICAgaWYgKFoub3B0aW9ucy5ncmlkTGluZUludGVycG9sYXRpb24gPT09IFwicG9seWdvblwiKSB7XG4gICAgICAgICAgICAgIGxldCBhMSA9IFEuaG92ZXJQYW5lLmF4aXMsIGwxID0gYjEgLSBhMS5zdGFydEFuZ2xlUmFkICsgYTEucG9zLCBwMSA9IFouZ2V0UGxvdExpbmVQYXRoKHsgdmFsdWU6IFoubWF4IH0pLCBNMSA9IGExLnRvVmFsdWUobDEpLCBBMSA9IGExLnRvVmFsdWUobDEgKyAoYzEgLSBiMSkpO1xuICAgICAgICAgICAgICBpZiAoTTEgPCBhMS5nZXRFeHRyZW1lcygpLm1pbikge1xuICAgICAgICAgICAgICAgIGxldCB7IG1pbjogdTEsIG1heDogaDEgfSA9IGExLmdldEV4dHJlbWVzKCk7XG4gICAgICAgICAgICAgICAgTTEgPSBoMSAtICh1MSAtIE0xKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBpZiAoQTEgPCBhMS5nZXRFeHRyZW1lcygpLm1pbikge1xuICAgICAgICAgICAgICAgIGxldCB7IG1pbjogdTEsIG1heDogaDEgfSA9IGExLmdldEV4dHJlbWVzKCk7XG4gICAgICAgICAgICAgICAgQTEgPSBoMSAtICh1MSAtIEExKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBBMSA8IE0xICYmIChBMSA9IFtNMSwgTTEgPSBBMV1bMF0pLCAocDEgPSBtKHAxLCBNMSwgQTEsIGExKSkucHVzaChbXCJMXCIsIEVbMF0gKyBRLnBsb3RMZWZ0LCBRLnBsb3RUb3AgKyBFWzFdXSksIHQxLmQgPSBwMSwgaTEgPSBcInBhdGhcIjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKHRoaXMuem9vbVZlcnQpIHtcbiAgICAgICAgICAgIGxldCBuMSA9IFEuaW52ZXJ0ZWQgPyBRLnhBeGlzWzBdIDogUS55QXhpc1swXSwgczEgPSBNYXRoLnNxcnQoTWF0aC5wb3coRCAtIFEucGxvdExlZnQgLSBFWzBdLCAyKSArIE1hdGgucG93KEcgLSBRLnBsb3RUb3AgLSBFWzFdLCAyKSksIGQxID0gTWF0aC5zcXJ0KE1hdGgucG93KFMgLSBRLnBsb3RMZWZ0IC0gRVswXSwgMikgKyBNYXRoLnBvdyhKIC0gUS5wbG90VG9wIC0gRVsxXSwgMikpO1xuICAgICAgICAgICAgaWYgKGQxIDwgczEgJiYgKHMxID0gW2QxLCBkMSA9IHMxXVswXSksIGQxID4gRVsyXSAvIDIgJiYgKGQxID0gRVsyXSAvIDIpLCBzMSA8IEVbM10gLyAyICYmIChzMSA9IEVbM10gLyAyKSwgdGhpcy56b29tSG9yIHx8ICh0MS5zdGFydCA9IFAsIHQxLmVuZCA9IFkpLCB0MS5yID0gZDEsIHQxLmlubmVyUiA9IHMxLCBuMS5vcHRpb25zLmdyaWRMaW5lSW50ZXJwb2xhdGlvbiA9PT0gXCJwb2x5Z29uXCIpIHtcbiAgICAgICAgICAgICAgbGV0IGIxID0gbjEudG9WYWx1ZShuMS5sZW4gKyBuMS5wb3MgLSBzMSksIGMxID0gbjEudG9WYWx1ZShuMS5sZW4gKyBuMS5wb3MgLSBkMSksIGExID0gbjEuZ2V0UGxvdExpbmVQYXRoKHsgdmFsdWU6IGMxIH0pLmNvbmNhdChuMS5nZXRQbG90TGluZVBhdGgoeyB2YWx1ZTogYjEsIHJldmVyc2U6ICEwIH0pKTtcbiAgICAgICAgICAgICAgdDEuZCA9IGExLCBpMSA9IFwicGF0aFwiO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAodGhpcy56b29tSG9yICYmIHRoaXMuem9vbVZlcnQgJiYgWi5vcHRpb25zLmdyaWRMaW5lSW50ZXJwb2xhdGlvbiA9PT0gXCJwb2x5Z29uXCIpIHtcbiAgICAgICAgICAgIGxldCBuMSA9IFEuaG92ZXJQYW5lLmF4aXMsIHMxID0gdDEuc3RhcnQgfHwgMCwgZDEgPSB0MS5lbmQgfHwgMCwgYjEgPSBzMSAtIG4xLnN0YXJ0QW5nbGVSYWQgKyBuMS5wb3MsIGMxID0gbjEudG9WYWx1ZShiMSksIGExID0gbjEudG9WYWx1ZShiMSArIChkMSAtIHMxKSk7XG4gICAgICAgICAgICBpZiAodDEuZCBpbnN0YW5jZW9mIEFycmF5KSB7XG4gICAgICAgICAgICAgIGxldCBsMSA9IHQxLmQuc2xpY2UoMCwgdDEuZC5sZW5ndGggLyAyKSwgcDEgPSB0MS5kLnNsaWNlKHQxLmQubGVuZ3RoIC8gMiwgdDEuZC5sZW5ndGgpO1xuICAgICAgICAgICAgICBwMSA9IFsuLi5wMV0ucmV2ZXJzZSgpO1xuICAgICAgICAgICAgICBsZXQgTTEgPSBRLmhvdmVyUGFuZS5heGlzO1xuICAgICAgICAgICAgICBsMSA9IG0obDEsIGMxLCBhMSwgTTEpLCAocDEgPSBtKHAxLCBjMSwgYTEsIE0xKSkgJiYgKHAxWzBdWzBdID0gXCJMXCIpLCBwMSA9IFsuLi5wMV0ucmV2ZXJzZSgpLCB0MS5kID0gbDEuY29uY2F0KHAxKSwgaTEgPSBcInBhdGhcIjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgSy5hdHRycyA9IHQxLCBLLnNoYXBlVHlwZSA9IGkxO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBmdW5jdGlvbiBIKCkge1xuICAgICAgICBsZXQgSyA9IHRoaXMuY2hhcnQ7XG4gICAgICAgIEsucG9sYXIgJiYgKHRoaXMucG9sYXIgPSBuZXcgcjEodGhpcyksIEsuaW52ZXJ0ZWQgJiYgKHRoaXMuaXNSYWRpYWxTZXJpZXMgPSAhMCwgdGhpcy5pcyhcImNvbHVtblwiKSAmJiAodGhpcy5pc1JhZGlhbEJhciA9ICEwKSkpO1xuICAgICAgfVxuICAgICAgZnVuY3Rpb24gQygpIHtcbiAgICAgICAgaWYgKHRoaXMuY2hhcnQucG9sYXIgJiYgdGhpcy54QXhpcykge1xuICAgICAgICAgIGxldCB7IHhBeGlzOiBLLCB5QXhpczogUSB9ID0gdGhpcywgRSA9IHRoaXMuY2hhcnQ7XG4gICAgICAgICAgdGhpcy5rZEJ5QW5nbGUgPSBFLnRvb2x0aXAgJiYgRS50b29sdGlwLnNoYXJlZCwgdGhpcy5rZEJ5QW5nbGUgfHwgRS5pbnZlcnRlZCA/IHRoaXMuc2VhcmNoUG9pbnQgPSBxIDogdGhpcy5vcHRpb25zLmZpbmROZWFyZXN0UG9pbnRCeSA9IFwieHlcIjtcbiAgICAgICAgICBsZXQgRCA9IHRoaXMucG9pbnRzLCBHID0gRC5sZW5ndGg7XG4gICAgICAgICAgZm9yICg7IEctLTsgKVxuICAgICAgICAgICAgdGhpcy5pcyhcImNvbHVtblwiKSB8fCB0aGlzLmlzKFwiY29sdW1ucmFuZ2VcIikgfHwgdGhpcy5wb2xhci50b1hZKERbR10pLCBFLmhhc1BhcmFsbGVsQ29vcmRpbmF0ZXMgfHwgdGhpcy55QXhpcy5yZXZlcnNlZCB8fCAoTyhEW0ddLnksIE51bWJlci5NSU5fVkFMVUUpIDwgUS5taW4gfHwgRFtHXS54IDwgSy5taW4gfHwgRFtHXS54ID4gSy5tYXggPyAoRFtHXS5pc051bGwgPSAhMCwgRFtHXS5wbG90WSA9IE5hTikgOiBEW0ddLmlzTnVsbCA9IERbR10uaXNWYWxpZCAmJiAhRFtHXS5pc1ZhbGlkKCkpO1xuICAgICAgICAgIHRoaXMuaGFzQ2xpcENpcmNsZVNldHRlciB8fCAodGhpcy5oYXNDbGlwQ2lyY2xlU2V0dGVyID0gISF0aGlzLmV2ZW50c1RvVW5iaW5kLnB1c2goTSh0aGlzLCBcImFmdGVyUmVuZGVyXCIsIGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgbGV0IEo7XG4gICAgICAgICAgICBFLnBvbGFyICYmIHRoaXMub3B0aW9ucy5jbGlwICE9PSAhMSAmJiAoSiA9IHRoaXMueUF4aXMucGFuZS5jZW50ZXIsIHRoaXMuY2xpcENpcmNsZSA/IHRoaXMuY2xpcENpcmNsZS5hbmltYXRlKHsgeDogSlswXSwgeTogSlsxXSwgcjogSlsyXSAvIDIsIGlubmVyUjogSlszXSAvIDIgfSkgOiB0aGlzLmNsaXBDaXJjbGUgPSBmdW5jdGlvbihTLCBXLCBQLCBZLCBaKSB7XG4gICAgICAgICAgICAgIGxldCB0MSA9IEwoKSwgaTEgPSBTLmNyZWF0ZUVsZW1lbnQoXCJjbGlwUGF0aFwiKS5hdHRyKHsgaWQ6IHQxIH0pLmFkZChTLmRlZnMpLCBuMSA9IFogPyBTLmFyYyhXLCBQLCBZLCBaLCAwLCAyICogTWF0aC5QSSkuYWRkKGkxKSA6IFMuY2lyY2xlKFcsIFAsIFkpLmFkZChpMSk7XG4gICAgICAgICAgICAgIHJldHVybiBuMS5pZCA9IHQxLCBuMS5jbGlwUGF0aCA9IGkxLCBuMTtcbiAgICAgICAgICAgIH0oRS5yZW5kZXJlciwgSlswXSwgSlsxXSwgSlsyXSAvIDIsIEpbM10gLyAyKSwgdGhpcy5ncm91cC5jbGlwKHRoaXMuY2xpcENpcmNsZSksIHRoaXMuc2V0Q2xpcCA9IGkubm9vcCk7XG4gICAgICAgICAgfSkpKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgZnVuY3Rpb24gcShLKSB7XG4gICAgICAgIGxldCBRID0gdGhpcy5jaGFydCwgRSA9IHRoaXMueEF4aXMsIEQgPSB0aGlzLnlBeGlzLCBHID0gRS5wYW5lICYmIEUucGFuZS5jZW50ZXIsIEogPSBLLmNoYXJ0WCAtIChHICYmIEdbMF0gfHwgMCkgLSBRLnBsb3RMZWZ0LCBTID0gSy5jaGFydFkgLSAoRyAmJiBHWzFdIHx8IDApIC0gUS5wbG90VG9wLCBXID0gUS5pbnZlcnRlZCA/IHsgY2xpZW50WDogSy5jaGFydFggLSBELnBvcywgcGxvdFk6IEsuY2hhcnRZIC0gRS5wb3MgfSA6IHsgY2xpZW50WDogMTgwICsgLTE4MCAvIE1hdGguUEkgKiBNYXRoLmF0YW4yKEosIFMpIH07XG4gICAgICAgIHJldHVybiB0aGlzLnNlYXJjaEtEVHJlZShXKTtcbiAgICAgIH1cbiAgICAgIGZ1bmN0aW9uIG0oSywgUSwgRSwgRCkge1xuICAgICAgICBsZXQgRyA9IEQudGlja0ludGVydmFsLCBKID0gRC50aWNrUG9zaXRpb25zLCBTID0gQShKLCAoUCkgPT4gUCA+PSBFKSwgVyA9IEEoWy4uLkpdLnJldmVyc2UoKSwgKFApID0+IFAgPD0gUSk7XG4gICAgICAgIHJldHVybiB1KFMpIHx8IChTID0gSltKLmxlbmd0aCAtIDFdKSwgdShXKSB8fCAoVyA9IEpbMF0sIFMgKz0gRywgS1swXVswXSA9IFwiTFwiLCBLLnVuc2hpZnQoS1tLLmxlbmd0aCAtIDNdKSksIChLID0gSy5zbGljZShKLmluZGV4T2YoVyksIEouaW5kZXhPZihTKSArIDEpKVswXVswXSA9IFwiTVwiLCBLO1xuICAgICAgfVxuICAgICAgZnVuY3Rpb24gayhLLCBRKSB7XG4gICAgICAgIHJldHVybiBBKHRoaXMucGFuZSB8fCBbXSwgKEUpID0+IEUub3B0aW9ucy5pZCA9PT0gUSkgfHwgSy5jYWxsKHRoaXMsIFEpO1xuICAgICAgfVxuICAgICAgZnVuY3Rpb24geChLLCBRLCBFLCBELCBHLCBKKSB7XG4gICAgICAgIGxldCBTLCBXLCBQLCBZID0gdGhpcy5jaGFydCwgWiA9IE8oRC5pbnNpZGUsICEhdGhpcy5vcHRpb25zLnN0YWNraW5nKTtcbiAgICAgICAgaWYgKFkucG9sYXIpIHtcbiAgICAgICAgICBpZiAoUyA9IFEucmVjdFBsb3RYIC8gTWF0aC5QSSAqIDE4MCwgWS5pbnZlcnRlZClcbiAgICAgICAgICAgIHRoaXMuZm9yY2VETCA9IFkuaXNJbnNpZGVQbG90KFEucGxvdFgsIFEucGxvdFkpLCBaICYmIFEuc2hhcGVBcmdzID8gKFcgPSBRLnNoYXBlQXJncywgRyA9IGYoRywgeyB4OiAoUCA9IHRoaXMueUF4aXMucG9zdFRyYW5zbGF0ZSgoKFcuc3RhcnQgfHwgMCkgKyAoVy5lbmQgfHwgMCkpIC8gMiAtIHRoaXMueEF4aXMuc3RhcnRBbmdsZVJhZCwgUS5iYXJYICsgUS5wb2ludFdpZHRoIC8gMikpLnggLSBZLnBsb3RMZWZ0LCB5OiBQLnkgLSBZLnBsb3RUb3AgfSkpIDogUS50b29sdGlwUG9zICYmIChHID0gZihHLCB7IHg6IFEudG9vbHRpcFBvc1swXSwgeTogUS50b29sdGlwUG9zWzFdIH0pKSwgRC5hbGlnbiA9IE8oRC5hbGlnbiwgXCJjZW50ZXJcIiksIEQudmVydGljYWxBbGlnbiA9IE8oRC52ZXJ0aWNhbEFsaWduLCBcIm1pZGRsZVwiKTtcbiAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHZhciB0MTtcbiAgICAgICAgICAgIGxldCBpMSwgbjE7XG4gICAgICAgICAgICAodDEgPSBEKS5hbGlnbiA9PT0gbnVsbCAmJiAoaTEgPSBTID4gMjAgJiYgUyA8IDE2MCA/IFwibGVmdFwiIDogUyA+IDIwMCAmJiBTIDwgMzQwID8gXCJyaWdodFwiIDogXCJjZW50ZXJcIiwgdDEuYWxpZ24gPSBpMSksIHQxLnZlcnRpY2FsQWxpZ24gPT09IG51bGwgJiYgKG4xID0gUyA8IDQ1IHx8IFMgPiAzMTUgPyBcImJvdHRvbVwiIDogUyA+IDEzNSAmJiBTIDwgMjI1ID8gXCJ0b3BcIiA6IFwibWlkZGxlXCIsIHQxLnZlcnRpY2FsQWxpZ24gPSBuMSksIEQgPSB0MTtcbiAgICAgICAgICB9XG4gICAgICAgICAgYS5wcm90b3R5cGUuYWxpZ25EYXRhTGFiZWwuY2FsbCh0aGlzLCBRLCBFLCBELCBHLCBKKSwgdGhpcy5pc1JhZGlhbEJhciAmJiBRLnNoYXBlQXJncyAmJiBRLnNoYXBlQXJncy5zdGFydCA9PT0gUS5zaGFwZUFyZ3MuZW5kID8gRS5oaWRlKCkgOiBFLnNob3coKTtcbiAgICAgICAgfSBlbHNlXG4gICAgICAgICAgSy5jYWxsKHRoaXMsIFEsIEUsIEQsIEcsIEopO1xuICAgICAgfVxuICAgICAgZnVuY3Rpb24gTigpIHtcbiAgICAgICAgbGV0IEsgPSB0aGlzLm9wdGlvbnMsIFEgPSBLLnN0YWNraW5nLCBFID0gdGhpcy5jaGFydCwgRCA9IHRoaXMueEF4aXMsIEcgPSB0aGlzLnlBeGlzLCBKID0gRy5yZXZlcnNlZCwgUyA9IEcuY2VudGVyLCBXID0gRC5zdGFydEFuZ2xlUmFkLCBQID0gRC5lbmRBbmdsZVJhZCAtIFcsIFkgPSBLLnRocmVzaG9sZCwgWiA9IDAsIHQxLCBpMSwgbjEsIHMxLCBkMSwgYjEgPSAwLCBjMSA9IDAsIGExLCBsMSwgcDEsIE0xLCBBMSwgdTEsIGgxLCBDMTtcbiAgICAgICAgaWYgKEQuaXNSYWRpYWwpXG4gICAgICAgICAgZm9yIChuMSA9ICh0MSA9IHRoaXMucG9pbnRzKS5sZW5ndGgsIHMxID0gRy50cmFuc2xhdGUoRy5taW4pLCBkMSA9IEcudHJhbnNsYXRlKEcubWF4KSwgWSA9IEsudGhyZXNob2xkIHx8IDAsIEUuaW52ZXJ0ZWQgJiYgeihZKSAmJiB1KFogPSBHLnRyYW5zbGF0ZShZKSkgJiYgKFogPCAwID8gWiA9IDAgOiBaID4gUCAmJiAoWiA9IFApLCB0aGlzLnRyYW5zbGF0ZWRUaHJlc2hvbGQgPSBaICsgVyk7IG4xLS07ICkge1xuICAgICAgICAgICAgaWYgKHUxID0gKGkxID0gdDFbbjFdKS5iYXJYLCBsMSA9IGkxLngsIHAxID0gaTEueSwgaTEuc2hhcGVUeXBlID0gXCJhcmNcIiwgRS5pbnZlcnRlZCkge1xuICAgICAgICAgICAgICBpMS5wbG90WSA9IEcudHJhbnNsYXRlKHAxKSwgUSAmJiBHLnN0YWNraW5nID8gKEExID0gRy5zdGFja2luZy5zdGFja3NbKHAxIDwgMCA/IFwiLVwiIDogXCJcIikgKyB0aGlzLnN0YWNrS2V5XSwgdGhpcy52aXNpYmxlICYmIEExICYmIEExW2wxXSAmJiAhaTEuaXNOdWxsICYmIChNMSA9IEExW2wxXS5wb2ludHNbdGhpcy5nZXRTdGFja0luZGljYXRvcih2b2lkIDAsIGwxLCB0aGlzLmluZGV4KS5rZXldLCBiMSA9IEcudHJhbnNsYXRlKE0xWzBdKSwgYzEgPSBHLnRyYW5zbGF0ZShNMVsxXSksIHUoYjEpICYmIChiMSA9IHAuY2xhbXAoYjEsIDAsIFApKSkpIDogKGIxID0gWiwgYzEgPSBpMS5wbG90WSksIGIxID4gYzEgJiYgKGMxID0gW2IxLCBiMSA9IGMxXVswXSksIEogPyBjMSA+IHMxID8gYzEgPSBzMSA6IGIxIDwgZDEgPyBiMSA9IGQxIDogKGIxID4gczEgfHwgYzEgPCBkMSkgJiYgKGIxID0gYzEgPSBQKSA6IGIxIDwgczEgPyBiMSA9IHMxIDogYzEgPiBkMSA/IGMxID0gZDEgOiAoYzEgPCBzMSB8fCBiMSA+IGQxKSAmJiAoYjEgPSBjMSA9IDApLCBHLm1pbiA+IEcubWF4ICYmIChiMSA9IGMxID0gSiA/IFAgOiAwKSwgYjEgKz0gVywgYzEgKz0gVywgUyAmJiAoaTEuYmFyWCA9IHUxICs9IFNbM10gLyAyKSwgaDEgPSBNYXRoLm1heCh1MSwgMCksIEMxID0gTWF0aC5tYXgodTEgKyBpMS5wb2ludFdpZHRoLCAwKTtcbiAgICAgICAgICAgICAgbGV0IHExID0gSy5ib3JkZXJSYWRpdXMsIFcxID0gZygodHlwZW9mIHExID09IFwib2JqZWN0XCIgPyBxMS5yYWRpdXMgOiBxMSkgfHwgMCwgQzEgLSBoMSk7XG4gICAgICAgICAgICAgIGkxLnNoYXBlQXJncyA9IHsgeDogU1swXSwgeTogU1sxXSwgcjogQzEsIGlubmVyUjogaDEsIHN0YXJ0OiBiMSwgZW5kOiBjMSwgYm9yZGVyUmFkaXVzOiBXMSB9LCBpMS5vcGFjaXR5ID0gYjEgPT09IGMxID8gMCA6IHZvaWQgMCwgaTEucGxvdFkgPSAodSh0aGlzLnRyYW5zbGF0ZWRUaHJlc2hvbGQpICYmIChiMSA8IHRoaXMudHJhbnNsYXRlZFRocmVzaG9sZCA/IGIxIDogYzEpKSAtIFc7XG4gICAgICAgICAgICB9IGVsc2VcbiAgICAgICAgICAgICAgYjEgPSB1MSArIFcsIGkxLnNoYXBlQXJncyA9IHRoaXMucG9sYXIuYXJjKGkxLnlCb3R0b20sIGkxLnBsb3RZLCBiMSwgYjEgKyBpMS5wb2ludFdpZHRoKSwgaTEuc2hhcGVBcmdzLmJvcmRlclJhZGl1cyA9IDA7XG4gICAgICAgICAgICB0aGlzLnBvbGFyLnRvWFkoaTEpLCBFLmludmVydGVkID8gKGExID0gRy5wb3N0VHJhbnNsYXRlKGkxLnJlY3RQbG90WSwgdTEgKyBpMS5wb2ludFdpZHRoIC8gMiksIGkxLnRvb2x0aXBQb3MgPSBbYTEueCAtIEUucGxvdExlZnQsIGExLnkgLSBFLnBsb3RUb3BdKSA6IGkxLnRvb2x0aXBQb3MgPSBbaTEucGxvdFgsIGkxLnBsb3RZXSwgUyAmJiAoaTEudHRCZWxvdyA9IGkxLnBsb3RZID4gU1sxXSk7XG4gICAgICAgICAgfVxuICAgICAgfVxuICAgICAgZnVuY3Rpb24gVihLLCBRKSB7XG4gICAgICAgIGxldCBFLCBELCBHID0gdGhpcztcbiAgICAgICAgaWYgKHRoaXMuY2hhcnQucG9sYXIpIHtcbiAgICAgICAgICBRID0gUSB8fCB0aGlzLnBvaW50cztcbiAgICAgICAgICBmb3IgKGxldCBTID0gMDsgUyA8IFEubGVuZ3RoOyBTKyspXG4gICAgICAgICAgICBpZiAoIVFbU10uaXNOdWxsKSB7XG4gICAgICAgICAgICAgIEUgPSBTO1xuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB0aGlzLm9wdGlvbnMuY29ubmVjdEVuZHMgIT09ICExICYmIEUgIT09IHZvaWQgMCAmJiAodGhpcy5jb25uZWN0RW5kcyA9ICEwLCBRLnNwbGljZShRLmxlbmd0aCwgMCwgUVtFXSksIEQgPSAhMCksIFEuZm9yRWFjaCgoUykgPT4ge1xuICAgICAgICAgICAgUy5wb2xhclBsb3RZID09PSB2b2lkIDAgJiYgRy5wb2xhci50b1hZKFMpO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIGxldCBKID0gSy5hcHBseSh0aGlzLCBbXS5zbGljZS5jYWxsKGFyZ3VtZW50cywgMSkpO1xuICAgICAgICByZXR1cm4gRCAmJiBRLnBvcCgpLCBKO1xuICAgICAgfVxuICAgICAgZnVuY3Rpb24gUihLLCBRKSB7XG4gICAgICAgIGxldCBFID0gdGhpcy5jaGFydCwgRCA9IHsgeEF4aXM6IFtdLCB5QXhpczogW10gfTtcbiAgICAgICAgcmV0dXJuIEUucG9sYXIgPyBFLmF4ZXMuZm9yRWFjaCgoRykgPT4ge1xuICAgICAgICAgIGlmIChHLmNvbGwgPT09IFwiY29sb3JBeGlzXCIpXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgbGV0IEogPSBHLmlzWEF4aXMsIFMgPSBHLmNlbnRlciwgVyA9IFEuY2hhcnRYIC0gU1swXSAtIEUucGxvdExlZnQsIFAgPSBRLmNoYXJ0WSAtIFNbMV0gLSBFLnBsb3RUb3A7XG4gICAgICAgICAgRFtKID8gXCJ4QXhpc1wiIDogXCJ5QXhpc1wiXS5wdXNoKHsgYXhpczogRywgdmFsdWU6IEcudHJhbnNsYXRlKEogPyBNYXRoLlBJIC0gTWF0aC5hdGFuMihXLCBQKSA6IE1hdGguc3FydChNYXRoLnBvdyhXLCAyKSArIE1hdGgucG93KFAsIDIpKSwgITApIH0pO1xuICAgICAgICB9KSA6IEQgPSBLLmNhbGwodGhpcywgUSksIEQ7XG4gICAgICB9XG4gICAgICBmdW5jdGlvbiBJKEssIFEpIHtcbiAgICAgICAgdGhpcy5jaGFydC5wb2xhciB8fCBLLmNhbGwodGhpcywgUSk7XG4gICAgICB9XG4gICAgICBmdW5jdGlvbiBqKEssIFEpIHtcbiAgICAgICAgbGV0IEUgPSB0aGlzLCBEID0gdGhpcy5jaGFydCwgRyA9IHRoaXMuZ3JvdXAsIEogPSB0aGlzLm1hcmtlckdyb3VwLCBTID0gdGhpcy54QXhpcyAmJiB0aGlzLnhBeGlzLmNlbnRlciwgVyA9IEQucGxvdExlZnQsIFAgPSBELnBsb3RUb3AsIFkgPSB0aGlzLm9wdGlvbnMuYW5pbWF0aW9uLCBaLCB0MSwgaTEsIG4xLCBzMSwgZDE7XG4gICAgICAgIEQucG9sYXIgPyBFLmlzUmFkaWFsQmFyID8gUSB8fCAoRS5zdGFydEFuZ2xlUmFkID0gTyhFLnRyYW5zbGF0ZWRUaHJlc2hvbGQsIEUueEF4aXMuc3RhcnRBbmdsZVJhZCksIGkuc2VyaWVzVHlwZXMucGllLnByb3RvdHlwZS5hbmltYXRlLmNhbGwoRSwgUSkpIDogKFkgPSBkKFkpLCBFLmlzKFwiY29sdW1uXCIpID8gUSB8fCAodDEgPSBTWzNdIC8gMiwgRS5wb2ludHMuZm9yRWFjaCgoYjEpID0+IHtcbiAgICAgICAgICBpMSA9IGIxLmdyYXBoaWMsIHMxID0gKG4xID0gYjEuc2hhcGVBcmdzKSAmJiBuMS5yLCBkMSA9IG4xICYmIG4xLmlubmVyUiwgaTEgJiYgbjEgJiYgKGkxLmF0dHIoeyByOiB0MSwgaW5uZXJSOiB0MSB9KSwgaTEuYW5pbWF0ZSh7IHI6IHMxLCBpbm5lclI6IGQxIH0sIEUub3B0aW9ucy5hbmltYXRpb24pKTtcbiAgICAgICAgfSkpIDogUSA/IChaID0geyB0cmFuc2xhdGVYOiBTWzBdICsgVywgdHJhbnNsYXRlWTogU1sxXSArIFAsIHNjYWxlWDogMWUtMywgc2NhbGVZOiAxZS0zIH0sIEcuYXR0cihaKSwgSiAmJiBKLmF0dHIoWikpIDogKFogPSB7IHRyYW5zbGF0ZVg6IFcsIHRyYW5zbGF0ZVk6IFAsIHNjYWxlWDogMSwgc2NhbGVZOiAxIH0sIEcuYW5pbWF0ZShaLCBZKSwgSiAmJiBKLmFuaW1hdGUoWiwgWSkpKSA6IEsuY2FsbCh0aGlzLCBRKTtcbiAgICAgIH1cbiAgICAgIGZ1bmN0aW9uIFUoSywgUSwgRSwgRCkge1xuICAgICAgICBsZXQgRywgSjtcbiAgICAgICAgaWYgKHRoaXMuY2hhcnQucG9sYXIpXG4gICAgICAgICAgaWYgKEQpIHtcbiAgICAgICAgICAgIGxldCBTID0gKEogPSBmdW5jdGlvbiBQKFksIFosIHQxLCBpMSkge1xuICAgICAgICAgICAgICBsZXQgbjEsIHMxLCBkMSwgYjEsIGMxLCBhMSwgbDEgPSBpMSA/IDEgOiAwLCBwMSA9IChuMSA9IFogPj0gMCAmJiBaIDw9IFkubGVuZ3RoIC0gMSA/IFogOiBaIDwgMCA/IFkubGVuZ3RoIC0gMSArIFogOiAwKSAtIDEgPCAwID8gWS5sZW5ndGggLSAoMSArIGwxKSA6IG4xIC0gMSwgTTEgPSBuMSArIDEgPiBZLmxlbmd0aCAtIDEgPyBsMSA6IG4xICsgMSwgQTEgPSBZW3AxXSwgdTEgPSBZW00xXSwgaDEgPSBBMS5wbG90WCwgQzEgPSBBMS5wbG90WSwgcTEgPSB1MS5wbG90WCwgVzEgPSB1MS5wbG90WSwgUjEgPSBZW24xXS5wbG90WCwgazEgPSBZW24xXS5wbG90WTtcbiAgICAgICAgICAgICAgczEgPSAoMS41ICogUjEgKyBoMSkgLyAyLjUsIGQxID0gKDEuNSAqIGsxICsgQzEpIC8gMi41LCBiMSA9ICgxLjUgKiBSMSArIHExKSAvIDIuNSwgYzEgPSAoMS41ICogazEgKyBXMSkgLyAyLjU7XG4gICAgICAgICAgICAgIGxldCBOMSA9IE1hdGguc3FydChNYXRoLnBvdyhzMSAtIFIxLCAyKSArIE1hdGgucG93KGQxIC0gazEsIDIpKSwgdjEgPSBNYXRoLnNxcnQoTWF0aC5wb3coYjEgLSBSMSwgMikgKyBNYXRoLnBvdyhjMSAtIGsxLCAyKSksIFMxID0gTWF0aC5hdGFuMihkMSAtIGsxLCBzMSAtIFIxKTtcbiAgICAgICAgICAgICAgYTEgPSBNYXRoLlBJIC8gMiArIChTMSArIE1hdGguYXRhbjIoYzEgLSBrMSwgYjEgLSBSMSkpIC8gMiwgTWF0aC5hYnMoUzEgLSBhMSkgPiBNYXRoLlBJIC8gMiAmJiAoYTEgLT0gTWF0aC5QSSksIHMxID0gUjEgKyBNYXRoLmNvcyhhMSkgKiBOMSwgZDEgPSBrMSArIE1hdGguc2luKGExKSAqIE4xO1xuICAgICAgICAgICAgICBsZXQgRDEgPSB7IHJpZ2h0Q29udFg6IGIxID0gUjEgKyBNYXRoLmNvcyhNYXRoLlBJICsgYTEpICogdjEsIHJpZ2h0Q29udFk6IGMxID0gazEgKyBNYXRoLnNpbihNYXRoLlBJICsgYTEpICogdjEsIGxlZnRDb250WDogczEsIGxlZnRDb250WTogZDEsIHBsb3RYOiBSMSwgcGxvdFk6IGsxIH07XG4gICAgICAgICAgICAgIHJldHVybiB0MSAmJiAoRDEucHJldlBvaW50Q29udCA9IFAoWSwgcDEsICExLCBpMSkpLCBEMTtcbiAgICAgICAgICAgIH0oUSwgRCwgITAsIHRoaXMuY29ubmVjdEVuZHMpKS5wcmV2UG9pbnRDb250ICYmIEoucHJldlBvaW50Q29udC5yaWdodENvbnRYLCBXID0gSi5wcmV2UG9pbnRDb250ICYmIEoucHJldlBvaW50Q29udC5yaWdodENvbnRZO1xuICAgICAgICAgICAgRyA9IFtcIkNcIiwgeihTKSA/IFMgOiBKLnBsb3RYLCB6KFcpID8gVyA6IEoucGxvdFksIHooSi5sZWZ0Q29udFgpID8gSi5sZWZ0Q29udFggOiBKLnBsb3RYLCB6KEoubGVmdENvbnRZKSA/IEoubGVmdENvbnRZIDogSi5wbG90WSwgSi5wbG90WCwgSi5wbG90WV07XG4gICAgICAgICAgfSBlbHNlXG4gICAgICAgICAgICBHID0gW1wiTVwiLCBFLnBsb3RYLCBFLnBsb3RZXTtcbiAgICAgICAgZWxzZVxuICAgICAgICAgIEcgPSBLLmNhbGwodGhpcywgUSwgRSwgRCk7XG4gICAgICAgIHJldHVybiBHO1xuICAgICAgfVxuICAgICAgZnVuY3Rpb24gXyhLLCBRLCBFID0gdGhpcy5wbG90WSkge1xuICAgICAgICBpZiAoIXRoaXMuZGVzdHJveWVkKSB7XG4gICAgICAgICAgbGV0IHsgcGxvdFg6IEQsIHNlcmllczogRyB9ID0gdGhpcywgeyBjaGFydDogSiB9ID0gRztcbiAgICAgICAgICByZXR1cm4gSi5wb2xhciAmJiB6KEQpICYmIHooRSkgPyBbRCArIChRID8gSi5wbG90TGVmdCA6IDApLCBFICsgKFEgPyBKLnBsb3RUb3AgOiAwKV0gOiBLLmNhbGwodGhpcywgUSwgRSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGNsYXNzIHIxIHtcbiAgICAgICAgc3RhdGljIGNvbXBvc2UoUSwgRSwgRCwgRywgSiwgUywgVywgUCwgWSwgWikge1xuICAgICAgICAgIGlmIChzLmNvbXBvc2UoRSwgRCksIGwuY29tcG9zZShRLCBKKSwgaChiLCBcIlBvbGFyXCIpKSB7XG4gICAgICAgICAgICBsZXQgdDEgPSBFLnByb3RvdHlwZSwgaTEgPSBTLnByb3RvdHlwZSwgbjEgPSBELnByb3RvdHlwZSwgczEgPSBHLnByb3RvdHlwZTtcbiAgICAgICAgICAgIGlmIChNKEUsIFwiYWZ0ZXJEcmF3Q2hhcnRCb3hcIiwgQiksIE0oRSwgXCJnZXRBeGVzXCIsIEYpLCBNKEUsIFwiaW5pdFwiLCBYKSwgeSh0MSwgXCJnZXRcIiwgayksIHkobjEsIFwiZ2V0Q29vcmRpbmF0ZXNcIiwgUiksIHkobjEsIFwicGluY2hcIiwgSSksIE0oRCwgXCJnZXRTZWxlY3Rpb25NYXJrZXJBdHRyc1wiLCB3KSwgTShELCBcImdldFNlbGVjdGlvbkJveFwiLCBUKSwgTShHLCBcImFmdGVySW5pdFwiLCBIKSwgTShHLCBcImFmdGVyVHJhbnNsYXRlXCIsIEMsIHsgb3JkZXI6IDIgfSksIE0oRywgXCJhZnRlckNvbHVtblRyYW5zbGF0ZVwiLCBOLCB7IG9yZGVyOiA0IH0pLCB5KHMxLCBcImFuaW1hdGVcIiwgaiksIHkoaTEsIFwicG9zXCIsIF8pLCBQKSB7XG4gICAgICAgICAgICAgIGxldCBkMSA9IFAucHJvdG90eXBlO1xuICAgICAgICAgICAgICB5KGQxLCBcImFsaWduRGF0YUxhYmVsXCIsIHgpLCB5KGQxLCBcImFuaW1hdGVcIiwgaik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoWSAmJiB5KFkucHJvdG90eXBlLCBcImdldEdyYXBoUGF0aFwiLCBWKSwgWikge1xuICAgICAgICAgICAgICBsZXQgZDEgPSBaLnByb3RvdHlwZTtcbiAgICAgICAgICAgICAgeShkMSwgXCJnZXRQb2ludFNwbGluZVwiLCBVKSwgVyAmJiAoVy5wcm90b3R5cGUuZ2V0UG9pbnRTcGxpbmUgPSBkMS5nZXRQb2ludFNwbGluZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGNvbnN0cnVjdG9yKFEpIHtcbiAgICAgICAgICB0aGlzLnNlcmllcyA9IFE7XG4gICAgICAgIH1cbiAgICAgICAgYXJjKFEsIEUsIEQsIEcpIHtcbiAgICAgICAgICBsZXQgSiA9IHRoaXMuc2VyaWVzLCBTID0gSi54QXhpcy5jZW50ZXIsIFcgPSBKLnlBeGlzLmxlbiwgUCA9IFNbM10gLyAyLCBZID0gVyAtIEUgKyBQLCBaID0gVyAtIE8oUSwgVykgKyBQO1xuICAgICAgICAgIHJldHVybiBKLnlBeGlzLnJldmVyc2VkICYmIChZIDwgMCAmJiAoWSA9IFApLCBaIDwgMCAmJiAoWiA9IFApKSwgeyB4OiBTWzBdLCB5OiBTWzFdLCByOiBZLCBpbm5lclI6IFosIHN0YXJ0OiBELCBlbmQ6IEcgfTtcbiAgICAgICAgfVxuICAgICAgICB0b1hZKFEpIHtcbiAgICAgICAgICBsZXQgRSA9IHRoaXMuc2VyaWVzLCBEID0gRS5jaGFydCwgRyA9IEUueEF4aXMsIEogPSBFLnlBeGlzLCBTID0gUS5wbG90WCwgVyA9IEQuaW52ZXJ0ZWQsIFAgPSBRLnksIFkgPSBRLnBsb3RZLCBaID0gVyA/IFMgOiBKLmxlbiAtIFksIHQxO1xuICAgICAgICAgIGlmIChXICYmIEUgJiYgIUUuaXNSYWRpYWxCYXIgJiYgKFEucGxvdFkgPSBZID0geihQKSA/IEoudHJhbnNsYXRlKFApIDogMCksIFEucmVjdFBsb3RYID0gUywgUS5yZWN0UGxvdFkgPSBZLCBKLmNlbnRlciAmJiAoWiArPSBKLmNlbnRlclszXSAvIDIpLCB6KFkpKSB7XG4gICAgICAgICAgICBsZXQgaTEgPSBXID8gSi5wb3N0VHJhbnNsYXRlKFksIFopIDogRy5wb3N0VHJhbnNsYXRlKFMsIFopO1xuICAgICAgICAgICAgUS5wbG90WCA9IFEucG9sYXJQbG90WCA9IGkxLnggLSBELnBsb3RMZWZ0LCBRLnBsb3RZID0gUS5wb2xhclBsb3RZID0gaTEueSAtIEQucGxvdFRvcDtcbiAgICAgICAgICB9XG4gICAgICAgICAgRS5rZEJ5QW5nbGUgPyAoKHQxID0gKFMgLyBNYXRoLlBJICogMTgwICsgRy5wYW5lLm9wdGlvbnMuc3RhcnRBbmdsZSkgJSAzNjApIDwgMCAmJiAodDEgKz0gMzYwKSwgUS5jbGllbnRYID0gdDEpIDogUS5jbGllbnRYID0gUS5wbG90WDtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIHIxO1xuICAgIH0pLCBuKG8sIFwiQ29yZS9BeGlzL1dhdGVyZmFsbEF4aXMuanNcIiwgW29bXCJDb3JlL0dsb2JhbHMuanNcIl0sIG9bXCJDb3JlL0F4aXMvU3RhY2tpbmcvU3RhY2tJdGVtLmpzXCJdLCBvW1wiQ29yZS9VdGlsaXRpZXMuanNcIl1dLCBmdW5jdGlvbihyLCBpLCBhKSB7XG4gICAgICB2YXIgcztcbiAgICAgIGxldCB7IGNvbXBvc2VkOiBsIH0gPSByLCB7IGFkZEV2ZW50OiBwLCBvYmplY3RFYWNoOiBkLCBwdXNoVW5pcXVlOiBiIH0gPSBhO1xuICAgICAgcmV0dXJuIGZ1bmN0aW9uKE0pIHtcbiAgICAgICAgZnVuY3Rpb24gdSgpIHtcbiAgICAgICAgICBsZXQgaCA9IHRoaXMud2F0ZXJmYWxsLnN0YWNrcztcbiAgICAgICAgICBoICYmIChoLmNoYW5nZWQgPSAhMSwgZGVsZXRlIGguYWxyZWFkeUNoYW5nZWQpO1xuICAgICAgICB9XG4gICAgICAgIGZ1bmN0aW9uIEEoKSB7XG4gICAgICAgICAgbGV0IGggPSB0aGlzLm9wdGlvbnMuc3RhY2tMYWJlbHM7XG4gICAgICAgICAgaCAmJiBoLmVuYWJsZWQgJiYgdGhpcy53YXRlcmZhbGwuc3RhY2tzICYmIHRoaXMud2F0ZXJmYWxsLnJlbmRlclN0YWNrVG90YWxzKCk7XG4gICAgICAgIH1cbiAgICAgICAgZnVuY3Rpb24geigpIHtcbiAgICAgICAgICB0aGlzLndhdGVyZmFsbCB8fCAodGhpcy53YXRlcmZhbGwgPSBuZXcgTyh0aGlzKSk7XG4gICAgICAgIH1cbiAgICAgICAgZnVuY3Rpb24gZigpIHtcbiAgICAgICAgICBsZXQgaCA9IHRoaXMuYXhlcztcbiAgICAgICAgICBmb3IgKGxldCBnIG9mIHRoaXMuc2VyaWVzKVxuICAgICAgICAgICAgaWYgKGcub3B0aW9ucy5zdGFja2luZykge1xuICAgICAgICAgICAgICBmb3IgKGxldCB2IG9mIGgpXG4gICAgICAgICAgICAgICAgdi5pc1hBeGlzIHx8ICh2LndhdGVyZmFsbC5zdGFja3MuY2hhbmdlZCA9ICEwKTtcbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgTS5jb21wb3NlID0gZnVuY3Rpb24oaCwgZykge1xuICAgICAgICAgIGIobCwgXCJBeGlzLldhdGVyZmFsbFwiKSAmJiAocChoLCBcImluaXRcIiwgeiksIHAoaCwgXCJhZnRlckJ1aWxkU3RhY2tzXCIsIHUpLCBwKGgsIFwiYWZ0ZXJSZW5kZXJcIiwgQSksIHAoZywgXCJiZWZvcmVSZWRyYXdcIiwgZikpO1xuICAgICAgICB9O1xuICAgICAgICBjbGFzcyBPIHtcbiAgICAgICAgICBjb25zdHJ1Y3RvcihnKSB7XG4gICAgICAgICAgICB0aGlzLmF4aXMgPSBnLCB0aGlzLnN0YWNrcyA9IHsgY2hhbmdlZDogITEgfTtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmVuZGVyU3RhY2tUb3RhbHMoKSB7XG4gICAgICAgICAgICBsZXQgZyA9IHRoaXMuYXhpcywgdiA9IGcud2F0ZXJmYWxsLnN0YWNrcywgTCA9IGcuc3RhY2tpbmcgJiYgZy5zdGFja2luZy5zdGFja1RvdGFsR3JvdXAsIHkgPSBuZXcgaShnLCBnLm9wdGlvbnMuc3RhY2tMYWJlbHMgfHwge30sICExLCAwLCB2b2lkIDApO1xuICAgICAgICAgICAgdGhpcy5kdW1teVN0YWNrSXRlbSA9IHksIEwgJiYgZCh2LCAoQikgPT4ge1xuICAgICAgICAgICAgICBkKEIsIChYLCBGKSA9PiB7XG4gICAgICAgICAgICAgICAgeS50b3RhbCA9IFguc3RhY2tUb3RhbCwgeS54ID0gK0YsIFgubGFiZWwgJiYgKHkubGFiZWwgPSBYLmxhYmVsKSwgaS5wcm90b3R5cGUucmVuZGVyLmNhbGwoeSwgTCksIFgubGFiZWwgPSB5LmxhYmVsLCBkZWxldGUgeS5sYWJlbDtcbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9KSwgeS50b3RhbCA9IG51bGw7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIE0uQ29tcG9zaXRpb24gPSBPO1xuICAgICAgfShzIHx8IChzID0ge30pKSwgcztcbiAgICB9KSwgbihvLCBcIlNlcmllcy9XYXRlcmZhbGwvV2F0ZXJmYWxsUG9pbnQuanNcIiwgW29bXCJTZXJpZXMvQ29sdW1uL0NvbHVtblNlcmllcy5qc1wiXSwgb1tcIkNvcmUvU2VyaWVzL1BvaW50LmpzXCJdLCBvW1wiQ29yZS9VdGlsaXRpZXMuanNcIl1dLCBmdW5jdGlvbihyLCBpLCBhKSB7XG4gICAgICBsZXQgeyBpc051bWJlcjogcyB9ID0gYTtcbiAgICAgIGNsYXNzIGwgZXh0ZW5kcyByLnByb3RvdHlwZS5wb2ludENsYXNzIHtcbiAgICAgICAgZ2V0Q2xhc3NOYW1lKCkge1xuICAgICAgICAgIGxldCBkID0gaS5wcm90b3R5cGUuZ2V0Q2xhc3NOYW1lLmNhbGwodGhpcyk7XG4gICAgICAgICAgcmV0dXJuIHRoaXMuaXNTdW0gPyBkICs9IFwiIGhpZ2hjaGFydHMtc3VtXCIgOiB0aGlzLmlzSW50ZXJtZWRpYXRlU3VtICYmIChkICs9IFwiIGhpZ2hjaGFydHMtaW50ZXJtZWRpYXRlLXN1bVwiKSwgZDtcbiAgICAgICAgfVxuICAgICAgICBpc1ZhbGlkKCkge1xuICAgICAgICAgIHJldHVybiBzKHRoaXMueSkgfHwgdGhpcy5pc1N1bSB8fCAhIXRoaXMuaXNJbnRlcm1lZGlhdGVTdW07XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiBsO1xuICAgIH0pLCBuKG8sIFwiU2VyaWVzL1dhdGVyZmFsbC9XYXRlcmZhbGxTZXJpZXNEZWZhdWx0cy5qc1wiLCBbXSwgZnVuY3Rpb24oKSB7XG4gICAgICByZXR1cm4geyBkYXRhTGFiZWxzOiB7IGluc2lkZTogITAgfSwgbGluZVdpZHRoOiAxLCBsaW5lQ29sb3I6IFwiIzMzMzMzM1wiLCBkYXNoU3R5bGU6IFwiRG90XCIsIGJvcmRlckNvbG9yOiBcIiMzMzMzMzNcIiwgc3RhdGVzOiB7IGhvdmVyOiB7IGxpbmVXaWR0aFBsdXM6IDAgfSB9IH07XG4gICAgfSksIG4obywgXCJTZXJpZXMvV2F0ZXJmYWxsL1dhdGVyZmFsbFNlcmllcy5qc1wiLCBbb1tcIkNvcmUvU2VyaWVzL1Nlcmllc1JlZ2lzdHJ5LmpzXCJdLCBvW1wiQ29yZS9VdGlsaXRpZXMuanNcIl0sIG9bXCJDb3JlL0F4aXMvV2F0ZXJmYWxsQXhpcy5qc1wiXSwgb1tcIlNlcmllcy9XYXRlcmZhbGwvV2F0ZXJmYWxsUG9pbnQuanNcIl0sIG9bXCJTZXJpZXMvV2F0ZXJmYWxsL1dhdGVyZmFsbFNlcmllc0RlZmF1bHRzLmpzXCJdXSwgZnVuY3Rpb24ociwgaSwgYSwgcywgbCkge1xuICAgICAgbGV0IHsgY29sdW1uOiBwLCBsaW5lOiBkIH0gPSByLnNlcmllc1R5cGVzLCB7IGFkZEV2ZW50OiBiLCBhcnJheU1heDogTSwgYXJyYXlNaW46IHUsIGNvcnJlY3RGbG9hdDogQSwgY3Jpc3A6IHosIGV4dGVuZDogZiwgaXNOdW1iZXI6IE8sIG1lcmdlOiBoLCBvYmplY3RFYWNoOiBnLCBwaWNrOiB2IH0gPSBpO1xuICAgICAgZnVuY3Rpb24gTChCLCBYKSB7XG4gICAgICAgIHJldHVybiBPYmplY3QuaGFzT3duUHJvcGVydHkuY2FsbChCLCBYKTtcbiAgICAgIH1cbiAgICAgIGNsYXNzIHkgZXh0ZW5kcyBwIHtcbiAgICAgICAgZ2VuZXJhdGVQb2ludHMoKSB7XG4gICAgICAgICAgcC5wcm90b3R5cGUuZ2VuZXJhdGVQb2ludHMuYXBwbHkodGhpcyk7XG4gICAgICAgICAgZm9yIChsZXQgWCA9IDAsIEYgPSB0aGlzLnBvaW50cy5sZW5ndGg7IFggPCBGOyBYKyspIHtcbiAgICAgICAgICAgIGxldCBUID0gdGhpcy5wb2ludHNbWF0sIHcgPSB0aGlzLnByb2Nlc3NlZFlEYXRhW1hdO1xuICAgICAgICAgICAgTyh3KSAmJiAoVC5pc0ludGVybWVkaWF0ZVN1bSB8fCBULmlzU3VtKSAmJiAoVC55ID0gQSh3KSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHByb2Nlc3NEYXRhKFgpIHtcbiAgICAgICAgICBsZXQgRiwgVCwgdywgSCwgQywgcSwgbSA9IHRoaXMub3B0aW9ucywgayA9IHRoaXMueURhdGEsIHggPSBtLmRhdGEsIE4gPSBrLmxlbmd0aCwgViA9IG0udGhyZXNob2xkIHx8IDA7XG4gICAgICAgICAgdyA9IFQgPSBIID0gQyA9IDA7XG4gICAgICAgICAgZm9yIChsZXQgUiA9IDA7IFIgPCBOOyBSKyspXG4gICAgICAgICAgICBxID0ga1tSXSwgRiA9IHggJiYgeFtSXSA/IHhbUl0gOiB7fSwgcSA9PT0gXCJzdW1cIiB8fCBGLmlzU3VtID8ga1tSXSA9IEEodykgOiBxID09PSBcImludGVybWVkaWF0ZVN1bVwiIHx8IEYuaXNJbnRlcm1lZGlhdGVTdW0gPyAoa1tSXSA9IEEoVCksIFQgPSAwKSA6ICh3ICs9IHEsIFQgKz0gcSksIEggPSBNYXRoLm1pbih3LCBIKSwgQyA9IE1hdGgubWF4KHcsIEMpO1xuICAgICAgICAgIHN1cGVyLnByb2Nlc3NEYXRhLmNhbGwodGhpcywgWCksIG0uc3RhY2tpbmcgfHwgKHRoaXMuZGF0YU1pbiA9IEggKyBWLCB0aGlzLmRhdGFNYXggPSBDKTtcbiAgICAgICAgfVxuICAgICAgICB0b1lEYXRhKFgpIHtcbiAgICAgICAgICByZXR1cm4gWC5pc1N1bSA/IFwic3VtXCIgOiBYLmlzSW50ZXJtZWRpYXRlU3VtID8gXCJpbnRlcm1lZGlhdGVTdW1cIiA6IFgueTtcbiAgICAgICAgfVxuICAgICAgICB1cGRhdGVQYXJhbGxlbEFycmF5cyhYLCBGKSB7XG4gICAgICAgICAgc3VwZXIudXBkYXRlUGFyYWxsZWxBcnJheXMuY2FsbCh0aGlzLCBYLCBGKSwgKHRoaXMueURhdGFbMF0gPT09IFwic3VtXCIgfHwgdGhpcy55RGF0YVswXSA9PT0gXCJpbnRlcm1lZGlhdGVTdW1cIikgJiYgKHRoaXMueURhdGFbMF0gPSBudWxsKTtcbiAgICAgICAgfVxuICAgICAgICBwb2ludEF0dHJpYnMoWCwgRikge1xuICAgICAgICAgIGxldCBUID0gdGhpcy5vcHRpb25zLnVwQ29sb3I7XG4gICAgICAgICAgVCAmJiAhWC5vcHRpb25zLmNvbG9yICYmIE8oWC55KSAmJiAoWC5jb2xvciA9IFgueSA+IDAgPyBUIDogdm9pZCAwKTtcbiAgICAgICAgICBsZXQgdyA9IHAucHJvdG90eXBlLnBvaW50QXR0cmlicy5jYWxsKHRoaXMsIFgsIEYpO1xuICAgICAgICAgIHJldHVybiBkZWxldGUgdy5kYXNoc3R5bGUsIHc7XG4gICAgICAgIH1cbiAgICAgICAgZ2V0R3JhcGhQYXRoKCkge1xuICAgICAgICAgIHJldHVybiBbW1wiTVwiLCAwLCAwXV07XG4gICAgICAgIH1cbiAgICAgICAgZ2V0Q3Jpc3BQYXRoKCkge1xuICAgICAgICAgIHZhciBrO1xuICAgICAgICAgIGxldCBYID0gdGhpcy5kYXRhLmZpbHRlcigoeCkgPT4gTyh4LnkpKSwgRiA9IHRoaXMueUF4aXMsIFQgPSBYLmxlbmd0aCwgdyA9ICgoayA9IHRoaXMuZ3JhcGgpID09IG51bGwgPyB2b2lkIDAgOiBrLnN0cm9rZVdpZHRoKCkpIHx8IDAsIEggPSB0aGlzLnhBeGlzLnJldmVyc2VkLCBDID0gdGhpcy55QXhpcy5yZXZlcnNlZCwgcSA9IHRoaXMub3B0aW9ucy5zdGFja2luZywgbSA9IFtdO1xuICAgICAgICAgIGZvciAobGV0IHggPSAxOyB4IDwgVDsgeCsrKSB7XG4gICAgICAgICAgICBpZiAoISh0aGlzLm9wdGlvbnMuY29ubmVjdE51bGxzIHx8IE8odGhpcy5kYXRhW1hbeF0uaW5kZXggLSAxXS55KSkpXG4gICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgbGV0IE4gPSBYW3hdLmJveCwgViA9IFhbeCAtIDFdLCBSID0gVi55IHx8IDAsIEkgPSBYW3ggLSAxXS5ib3g7XG4gICAgICAgICAgICBpZiAoIU4gfHwgIUkpXG4gICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgbGV0IGogPSBGLndhdGVyZmFsbC5zdGFja3NbdGhpcy5zdGFja0tleV0sIFUgPSBSID4gMCA/IC1JLmhlaWdodCA6IDA7XG4gICAgICAgICAgICBpZiAoaiAmJiBJICYmIE4pIHtcbiAgICAgICAgICAgICAgbGV0IF8sIHIxID0galt4IC0gMV07XG4gICAgICAgICAgICAgIGlmIChxKSB7XG4gICAgICAgICAgICAgICAgbGV0IEsgPSByMS5jb25uZWN0b3JUaHJlc2hvbGQ7XG4gICAgICAgICAgICAgICAgXyA9IHooRi50cmFuc2xhdGUoSywgITEsICEwLCAhMSwgITApICsgKEMgPyBVIDogMCksIHcpO1xuICAgICAgICAgICAgICB9IGVsc2VcbiAgICAgICAgICAgICAgICBfID0geihJLnkgKyAoVi5taW5Qb2ludExlbmd0aE9mZnNldCB8fCAwKSwgdyk7XG4gICAgICAgICAgICAgIG0ucHVzaChbXCJNXCIsIChJLnggfHwgMCkgKyAoSCA/IDAgOiBJLndpZHRoIHx8IDApLCBfXSwgW1wiTFwiLCAoTi54IHx8IDApICsgKEggJiYgTi53aWR0aCB8fCAwKSwgX10pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKEkgJiYgbS5sZW5ndGggJiYgKCFxICYmIFIgPCAwICYmICFDIHx8IFIgPiAwICYmIEMpKSB7XG4gICAgICAgICAgICAgIGxldCBfID0gbVttLmxlbmd0aCAtIDJdO1xuICAgICAgICAgICAgICBfICYmIHR5cGVvZiBfWzJdID09IFwibnVtYmVyXCIgJiYgKF9bMl0gKz0gSS5oZWlnaHQgfHwgMCk7XG4gICAgICAgICAgICAgIGxldCByMSA9IG1bbS5sZW5ndGggLSAxXTtcbiAgICAgICAgICAgICAgcjEgJiYgdHlwZW9mIHIxWzJdID09IFwibnVtYmVyXCIgJiYgKHIxWzJdICs9IEkuaGVpZ2h0IHx8IDApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gbTtcbiAgICAgICAgfVxuICAgICAgICBkcmF3R3JhcGgoKSB7XG4gICAgICAgICAgZC5wcm90b3R5cGUuZHJhd0dyYXBoLmNhbGwodGhpcyksIHRoaXMuZ3JhcGggJiYgdGhpcy5ncmFwaC5hdHRyKHsgZDogdGhpcy5nZXRDcmlzcFBhdGgoKSB9KTtcbiAgICAgICAgfVxuICAgICAgICBzZXRTdGFja2VkUG9pbnRzKFgpIHtcbiAgICAgICAgICB2YXIgRztcbiAgICAgICAgICBsZXQgRiA9IHRoaXMub3B0aW9ucywgVCA9IChHID0gWC53YXRlcmZhbGwpID09IG51bGwgPyB2b2lkIDAgOiBHLnN0YWNrcywgdyA9IEYudGhyZXNob2xkIHx8IDAsIEggPSB0aGlzLnN0YWNrS2V5LCBDID0gdGhpcy54RGF0YSwgcSA9IEMubGVuZ3RoLCBtID0gdywgayA9IG0sIHgsIE4gPSAwLCBWID0gMCwgUiA9IDAsIEksIGosIFUsIF8sIHIxLCBLLCBRLCBFLCBEID0gKEosIFMsIFcsIFApID0+IHtcbiAgICAgICAgICAgIGlmICh4KSB7XG4gICAgICAgICAgICAgIGlmIChJKVxuICAgICAgICAgICAgICAgIGZvciAoOyBXIDwgSTsgVysrKVxuICAgICAgICAgICAgICAgICAgeC5zdGFja1N0YXRlW1ddICs9IFA7XG4gICAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICB4LnN0YWNrU3RhdGVbMF0gPSBKLCBJID0geC5zdGFja1N0YXRlLmxlbmd0aDtcbiAgICAgICAgICAgICAgeC5zdGFja1N0YXRlLnB1c2goeC5zdGFja1N0YXRlW0kgLSAxXSArIFMpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH07XG4gICAgICAgICAgaWYgKFguc3RhY2tpbmcgJiYgVCAmJiB0aGlzLnJlc2VydmVTcGFjZSgpKSB7XG4gICAgICAgICAgICBFID0gVC5jaGFuZ2VkLCAoUSA9IFQuYWxyZWFkeUNoYW5nZWQpICYmIDAgPiBRLmluZGV4T2YoSCkgJiYgKEUgPSAhMCksIFRbSF0gfHwgKFRbSF0gPSB7fSk7XG4gICAgICAgICAgICBsZXQgSiA9IFRbSF07XG4gICAgICAgICAgICBpZiAoSilcbiAgICAgICAgICAgICAgZm9yIChsZXQgUyA9IDA7IFMgPCBxOyBTKyspXG4gICAgICAgICAgICAgICAgKCFKW0sgPSBDW1NdXSB8fCBFKSAmJiAoSltLXSA9IHsgbmVnVG90YWw6IDAsIHBvc1RvdGFsOiAwLCBzdGFja1RvdGFsOiAwLCB0aHJlc2hvbGQ6IDAsIHN0YXRlSW5kZXg6IDAsIHN0YWNrU3RhdGU6IFtdLCBsYWJlbDogRSAmJiBKW0tdID8gSltLXS5sYWJlbCA6IHZvaWQgMCB9KSwgeCA9IEpbS10sIChyMSA9IHRoaXMueURhdGFbU10pID49IDAgPyB4LnBvc1RvdGFsICs9IHIxIDogeC5uZWdUb3RhbCArPSByMSwgXyA9IEYuZGF0YVtTXSwgaiA9IHguYWJzb2x1dGVQb3MgPSB4LnBvc1RvdGFsLCBVID0geC5hYnNvbHV0ZU5lZyA9IHgubmVnVG90YWwsIHguc3RhY2tUb3RhbCA9IGogKyBVLCBJID0geC5zdGFja1N0YXRlLmxlbmd0aCwgXyAmJiBfLmlzSW50ZXJtZWRpYXRlU3VtID8gKEQoUiwgViwgMCwgUiksIFIgPSBWLCBWID0gdywgbSBePSBrLCBrIF49IG0sIG0gXj0gaykgOiBfICYmIF8uaXNTdW0gPyAoRCh3LCBOLCBJLCAwKSwgbSA9IHcpIDogKEQobSwgcjEsIDAsIE4pLCBfICYmIChOICs9IHIxLCBWICs9IHIxKSksIHguc3RhdGVJbmRleCsrLCB4LnRocmVzaG9sZCA9IG0sIG0gKz0geC5zdGFja1RvdGFsO1xuICAgICAgICAgICAgVC5jaGFuZ2VkID0gITEsIFQuYWxyZWFkeUNoYW5nZWQgfHwgKFQuYWxyZWFkeUNoYW5nZWQgPSBbXSksIFQuYWxyZWFkeUNoYW5nZWQucHVzaChIKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZ2V0RXh0cmVtZXMoKSB7XG4gICAgICAgICAgbGV0IFgsIEYsIFQsIHcgPSB0aGlzLm9wdGlvbnMuc3RhY2tpbmc7XG4gICAgICAgICAgcmV0dXJuIHcgPyAoWCA9IHRoaXMueUF4aXMud2F0ZXJmYWxsLnN0YWNrcywgRiA9IHRoaXMuc3RhY2tlZFlOZWcgPSBbXSwgVCA9IHRoaXMuc3RhY2tlZFlQb3MgPSBbXSwgdyA9PT0gXCJvdmVybGFwXCIgPyBnKFhbdGhpcy5zdGFja0tleV0sIGZ1bmN0aW9uKEgpIHtcbiAgICAgICAgICAgIEYucHVzaCh1KEguc3RhY2tTdGF0ZSkpLCBULnB1c2goTShILnN0YWNrU3RhdGUpKTtcbiAgICAgICAgICB9KSA6IGcoWFt0aGlzLnN0YWNrS2V5XSwgZnVuY3Rpb24oSCkge1xuICAgICAgICAgICAgRi5wdXNoKEgubmVnVG90YWwgKyBILnRocmVzaG9sZCksIFQucHVzaChILnBvc1RvdGFsICsgSC50aHJlc2hvbGQpO1xuICAgICAgICAgIH0pLCB7IGRhdGFNaW46IHUoRiksIGRhdGFNYXg6IE0oVCkgfSkgOiB7IGRhdGFNaW46IHRoaXMuZGF0YU1pbiwgZGF0YU1heDogdGhpcy5kYXRhTWF4IH07XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiB5LmRlZmF1bHRPcHRpb25zID0gaChwLmRlZmF1bHRPcHRpb25zLCBsKSwgeS5jb21wb3NlID0gYS5jb21wb3NlLCBmKHkucHJvdG90eXBlLCB7IHBvaW50VmFsS2V5OiBcInlcIiwgc2hvd0xpbmU6ICEwLCBwb2ludENsYXNzOiBzIH0pLCBiKHksIFwiYWZ0ZXJDb2x1bW5UcmFuc2xhdGVcIiwgZnVuY3Rpb24oKSB7XG4gICAgICAgIGxldCB7IG9wdGlvbnM6IEIsIHBvaW50czogWCwgeUF4aXM6IEYgfSA9IHRoaXMsIFQgPSB2KEIubWluUG9pbnRMZW5ndGgsIDUpLCB3ID0gVCAvIDIsIEggPSBCLnRocmVzaG9sZCB8fCAwLCBDID0gQi5zdGFja2luZywgcSA9IEYud2F0ZXJmYWxsLnN0YWNrc1t0aGlzLnN0YWNrS2V5XSwgbSA9IEgsIGsgPSBILCB4LCBOLCBWLCBSO1xuICAgICAgICBmb3IgKGxldCBJID0gMDsgSSA8IFgubGVuZ3RoOyBJKyspIHtcbiAgICAgICAgICBsZXQgaiA9IFhbSV0sIFUgPSB0aGlzLnByb2Nlc3NlZFlEYXRhW0ldLCBfID0gZih7IHg6IDAsIHk6IDAsIHdpZHRoOiAwLCBoZWlnaHQ6IDAgfSwgai5zaGFwZUFyZ3MgfHwge30pO1xuICAgICAgICAgIGouYm94ID0gXztcbiAgICAgICAgICBsZXQgcjEgPSBbMCwgVV0sIEsgPSBqLnkgfHwgMDtcbiAgICAgICAgICBpZiAoQykge1xuICAgICAgICAgICAgaWYgKHEpIHtcbiAgICAgICAgICAgICAgbGV0IEQgPSBxW0ldO1xuICAgICAgICAgICAgICBDID09PSBcIm92ZXJsYXBcIiA/IChOID0gRC5zdGFja1N0YXRlW0Quc3RhdGVJbmRleC0tXSwgeCA9IEsgPj0gMCA/IE4gOiBOIC0gSywgTChELCBcImFic29sdXRlUG9zXCIpICYmIGRlbGV0ZSBELmFic29sdXRlUG9zLCBMKEQsIFwiYWJzb2x1dGVOZWdcIikgJiYgZGVsZXRlIEQuYWJzb2x1dGVOZWcpIDogKEsgPj0gMCA/IChOID0gRC50aHJlc2hvbGQgKyBELnBvc1RvdGFsLCBELnBvc1RvdGFsIC09IEssIHggPSBOKSA6IChOID0gRC50aHJlc2hvbGQgKyBELm5lZ1RvdGFsLCBELm5lZ1RvdGFsIC09IEssIHggPSBOIC0gSyksICFELnBvc1RvdGFsICYmIE8oRC5hYnNvbHV0ZVBvcykgJiYgTChELCBcImFic29sdXRlUG9zXCIpICYmIChELnBvc1RvdGFsID0gRC5hYnNvbHV0ZVBvcywgZGVsZXRlIEQuYWJzb2x1dGVQb3MpLCAhRC5uZWdUb3RhbCAmJiBPKEQuYWJzb2x1dGVOZWcpICYmIEwoRCwgXCJhYnNvbHV0ZU5lZ1wiKSAmJiAoRC5uZWdUb3RhbCA9IEQuYWJzb2x1dGVOZWcsIGRlbGV0ZSBELmFic29sdXRlTmVnKSksIGouaXNTdW0gfHwgKEQuY29ubmVjdG9yVGhyZXNob2xkID0gRC50aHJlc2hvbGQgKyBELnN0YWNrVG90YWwpLCBGLnJldmVyc2VkID8gKFYgPSBLID49IDAgPyB4IC0gSyA6IHggKyBLLCBSID0geCkgOiAoViA9IHgsIFIgPSB4IC0gSyksIGouYmVsb3cgPSBWIDw9IEgsIF8ueSA9IEYudHJhbnNsYXRlKFYsICExLCAhMCwgITEsICEwKSwgXy5oZWlnaHQgPSBNYXRoLmFicyhfLnkgLSBGLnRyYW5zbGF0ZShSLCAhMSwgITAsICExLCAhMCkpO1xuICAgICAgICAgICAgICBsZXQgRyA9IEYud2F0ZXJmYWxsLmR1bW15U3RhY2tJdGVtO1xuICAgICAgICAgICAgICBHICYmIChHLnggPSBJLCBHLmxhYmVsID0gcVtJXS5sYWJlbCwgRy5zZXRPZmZzZXQodGhpcy5wb2ludFhPZmZzZXQgfHwgMCwgdGhpcy5iYXJXIHx8IDAsIHRoaXMuc3RhY2tlZFlOZWdbSV0sIHRoaXMuc3RhY2tlZFlQb3NbSV0sIHZvaWQgMCwgdGhpcy54QXhpcykpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gZWxzZVxuICAgICAgICAgICAgeCA9IE1hdGgubWF4KGssIGsgKyBLKSArIHIxWzBdLCBfLnkgPSBGLnRyYW5zbGF0ZSh4LCAhMSwgITAsICExLCAhMCksIGouaXNTdW0gPyAoXy55ID0gRi50cmFuc2xhdGUocjFbMV0sICExLCAhMCwgITEsICEwKSwgXy5oZWlnaHQgPSBNYXRoLm1pbihGLnRyYW5zbGF0ZShyMVswXSwgITEsICEwLCAhMSwgITApLCBGLmxlbikgLSBfLnksIGouYmVsb3cgPSByMVsxXSA8PSBIKSA6IGouaXNJbnRlcm1lZGlhdGVTdW0gPyAoSyA+PSAwID8gKFYgPSByMVsxXSArIG0sIFIgPSBtKSA6IChWID0gbSwgUiA9IHIxWzFdICsgbSksIEYucmV2ZXJzZWQgJiYgKFYgXj0gUiwgUiBePSBWLCBWIF49IFIpLCBfLnkgPSBGLnRyYW5zbGF0ZShWLCAhMSwgITAsICExLCAhMCksIF8uaGVpZ2h0ID0gTWF0aC5hYnMoXy55IC0gTWF0aC5taW4oRi50cmFuc2xhdGUoUiwgITEsICEwLCAhMSwgITApLCBGLmxlbikpLCBtICs9IHIxWzFdLCBqLmJlbG93ID0gViA8PSBIKSA6IChfLmhlaWdodCA9IFUgPiAwID8gRi50cmFuc2xhdGUoaywgITEsICEwLCAhMSwgITApIC0gXy55IDogRi50cmFuc2xhdGUoaywgITEsICEwLCAhMSwgITApIC0gRi50cmFuc2xhdGUoayAtIFUsICExLCAhMCwgITEsICEwKSwgayArPSBVLCBqLmJlbG93ID0gayA8IEgpLCBfLmhlaWdodCA8IDAgJiYgKF8ueSArPSBfLmhlaWdodCwgXy5oZWlnaHQgKj0gLTEpO1xuICAgICAgICAgIGoucGxvdFkgPSBfLnksIGoueUJvdHRvbSA9IF8ueSArIF8uaGVpZ2h0LCBfLmhlaWdodCA8PSBUICYmICFqLmlzTnVsbCA/IChfLmhlaWdodCA9IFQsIF8ueSAtPSB3LCBqLnlCb3R0b20gPSBfLnkgKyBfLmhlaWdodCwgai5wbG90WSA9IF8ueSwgSyA8IDAgPyBqLm1pblBvaW50TGVuZ3RoT2Zmc2V0ID0gLXcgOiBqLm1pblBvaW50TGVuZ3RoT2Zmc2V0ID0gdykgOiAoai5pc051bGwgJiYgKF8ud2lkdGggPSAwKSwgai5taW5Qb2ludExlbmd0aE9mZnNldCA9IDApO1xuICAgICAgICAgIGxldCBRID0gai5wbG90WSArIChqLm5lZ2F0aXZlID8gXy5oZWlnaHQgOiAwKTtcbiAgICAgICAgICBqLmJlbG93ICYmIChqLnBsb3RZICs9IF8uaGVpZ2h0KSwgai50b29sdGlwUG9zICYmICh0aGlzLmNoYXJ0LmludmVydGVkID8gai50b29sdGlwUG9zWzBdID0gRi5sZW4gLSBRIDogai50b29sdGlwUG9zWzFdID0gUSksIGouaXNJbnNpZGUgPSB0aGlzLmlzUG9pbnRJbnNpZGUoaik7XG4gICAgICAgICAgbGV0IEUgPSB6KGoueUJvdHRvbSwgdGhpcy5ib3JkZXJXaWR0aCk7XG4gICAgICAgICAgXy55ID0geihfLnksIHRoaXMuYm9yZGVyV2lkdGgpLCBfLmhlaWdodCA9IEUgLSBfLnksIGgoITAsIGouc2hhcGVBcmdzLCBfKTtcbiAgICAgICAgfVxuICAgICAgfSwgeyBvcmRlcjogMiB9KSwgci5yZWdpc3RlclNlcmllc1R5cGUoXCJ3YXRlcmZhbGxcIiwgeSksIHk7XG4gICAgfSksIG4obywgXCJtYXN0ZXJzL2hpZ2hjaGFydHMtbW9yZS5zcmMuanNcIiwgW29bXCJDb3JlL0dsb2JhbHMuanNcIl0sIG9bXCJDb3JlL1Nlcmllcy9TZXJpZXNSZWdpc3RyeS5qc1wiXSwgb1tcIkV4dGVuc2lvbnMvUGFuZS9QYW5lLmpzXCJdLCBvW1wiU2VyaWVzL0J1YmJsZS9CdWJibGVTZXJpZXMuanNcIl0sIG9bXCJTZXJpZXMvUGFja2VkQnViYmxlL1BhY2tlZEJ1YmJsZVNlcmllcy5qc1wiXSwgb1tcIlNlcmllcy9Qb2xhckNvbXBvc2l0aW9uLmpzXCJdLCBvW1wiQ29yZS9BeGlzL1JhZGlhbEF4aXMuanNcIl0sIG9bXCJTZXJpZXMvV2F0ZXJmYWxsL1dhdGVyZmFsbFNlcmllcy5qc1wiXV0sIGZ1bmN0aW9uKHIsIGksIGEsIHMsIGwsIHAsIGQsIGIpIHtcbiAgICAgIHJldHVybiByLlJhZGlhbEF4aXMgPSBkLCBzLmNvbXBvc2Uoci5BeGlzLCByLkNoYXJ0LCByLkxlZ2VuZCksIGwuY29tcG9zZShyLkF4aXMsIHIuQ2hhcnQsIHIuTGVnZW5kKSwgYS5jb21wb3NlKHIuQ2hhcnQsIHIuUG9pbnRlciksIHAuY29tcG9zZShyLkF4aXMsIHIuQ2hhcnQsIHIuUG9pbnRlciwgci5TZXJpZXMsIHIuVGljaywgci5Qb2ludCwgaS5zZXJpZXNUeXBlcy5hcmVhc3BsaW5lcmFuZ2UsIGkuc2VyaWVzVHlwZXMuY29sdW1uLCBpLnNlcmllc1R5cGVzLmxpbmUsIGkuc2VyaWVzVHlwZXMuc3BsaW5lKSwgYi5jb21wb3NlKHIuQXhpcywgci5DaGFydCksIHI7XG4gICAgfSk7XG4gIH0pO1xufSkoYWIpO1xudmFyIEZEID0gYWIuZXhwb3J0cztcbmNvbnN0IFhEID0gLyogQF9fUFVSRV9fICovIFEyKEZEKTtcbmxldCBVRCA9IHtcbiAgY3JlZGl0czoge1xuICAgIGVuYWJsZWQ6ICExXG4gIH1cbn07XG5jb25zdCBzYiA9IEk1KHtcbiAgSGlnaGNoYXJ0czogbDNcbn0pLCBZRCA9ICh7IGNoaWxkcmVuOiBlIH0pID0+IHtcbiAgY29uc3QgW3QsIG9dID0gVDEoITEpLCBuID0gXzEoXG4gICAgKHIpID0+IHtcbiAgICAgIHZhciBpID0gci5yZWxhdGl2ZUxlbmd0aDtcbiAgICAgIHIuU2VyaWVzLnByb3RvdHlwZS5kcmF3TGVnZW5kU3ltYm9sID0gci5zZXJpZXNUeXBlcy5jb2x1bW4ucHJvdG90eXBlLmRyYXdMZWdlbmRTeW1ib2wsIHIud3JhcChcbiAgICAgICAgci5zZXJpZXNUeXBlcy5jb2x1bW4ucHJvdG90eXBlLFxuICAgICAgICBcInRyYW5zbGF0ZVwiLFxuICAgICAgICBmdW5jdGlvbihhKSB7XG4gICAgICAgICAgdmFyIHMgPSB0aGlzLm9wdGlvbnMsIGwgPSBzLnRvcE1hcmdpbiB8fCAwLCBwID0gcy5ib3R0b21NYXJnaW4gfHwgMDtcbiAgICAgICAgICBhLmNhbGwodGhpcyksIHRoaXMucG9pbnRzLmZvckVhY2goZnVuY3Rpb24oZCkge1xuICAgICAgICAgICAgdmFyIGIgPSBkLnNoYXBlQXJncywgTSA9IGIud2lkdGgsIHUgPSBiLmhlaWdodCwgQSA9IGIueCwgeiA9IGIueSwgZiA9IGkocy5ib3JkZXJSYWRpdXNUb3BMZWZ0IHx8IDAsIE0pLCBPID0gaShzLmJvcmRlclJhZGl1c1RvcFJpZ2h0IHx8IDAsIE0pLCBoID0gaShzLmJvcmRlclJhZGl1c0JvdHRvbVJpZ2h0IHx8IDAsIE0pLCBnID0gaShzLmJvcmRlclJhZGl1c0JvdHRvbUxlZnQgfHwgMCwgTSk7XG4gICAgICAgICAgICBpZiAoKGQgPT0gbnVsbCA/IHZvaWQgMCA6IGQueSkgPCAwICYmIChmID4gMCAmJiAoZyA9IGYsIGYgPSAwKSwgTyA+IDAgJiYgKGggPSBPLCBPID0gMCkpLCBmIHx8IE8gfHwgaCB8fCBnKSB7XG4gICAgICAgICAgICAgIHZhciB2ID0gTWF0aC5taW4oTSwgdSkgLyAyO1xuICAgICAgICAgICAgICBmID4gdiAmJiAoZiA9IHYpLCBPID4gdiAmJiAoTyA9IHYpLCBoID4gdiAmJiAoaCA9IHYpLCBnID4gdiAmJiAoZyA9IHYpLCBkLmRsQm94ID0gZC5zaGFwZUFyZ3MsIGQuc2hhcGVUeXBlID0gXCJwYXRoXCIsIGQuc2hhcGVBcmdzID0ge1xuICAgICAgICAgICAgICAgIGQ6IFtcbiAgICAgICAgICAgICAgICAgIFtcIk1cIiwgQSArIGYsIHogKyBsXSxcbiAgICAgICAgICAgICAgICAgIC8vIHRvcCBzaWRlXG4gICAgICAgICAgICAgICAgICBbXCJMXCIsIEEgKyBNIC0gTywgeiArIGxdLFxuICAgICAgICAgICAgICAgICAgLy8gdG9wIHJpZ2h0IGNvcm5lclxuICAgICAgICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgICAgICBcIkNcIixcbiAgICAgICAgICAgICAgICAgICAgQSArIE0gLSBPIC8gMixcbiAgICAgICAgICAgICAgICAgICAgeixcbiAgICAgICAgICAgICAgICAgICAgQSArIE0sXG4gICAgICAgICAgICAgICAgICAgIHogKyBPIC8gMixcbiAgICAgICAgICAgICAgICAgICAgQSArIE0sXG4gICAgICAgICAgICAgICAgICAgIHogKyBPXG4gICAgICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgICAgICAgLy8gcmlnaHQgc2lkZVxuICAgICAgICAgICAgICAgICAgW1wiTFwiLCBBICsgTSwgeiArIHUgLSBoXSxcbiAgICAgICAgICAgICAgICAgIC8vIGJvdHRvbSByaWdodCBjb3JuZXJcbiAgICAgICAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICAgICAgXCJDXCIsXG4gICAgICAgICAgICAgICAgICAgIEEgKyBNLFxuICAgICAgICAgICAgICAgICAgICB6ICsgdSAtIGggLyAyLFxuICAgICAgICAgICAgICAgICAgICBBICsgTSAtIGggLyAyLFxuICAgICAgICAgICAgICAgICAgICB6ICsgdSxcbiAgICAgICAgICAgICAgICAgICAgQSArIE0gLSBoLFxuICAgICAgICAgICAgICAgICAgICB6ICsgdSArIHBcbiAgICAgICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAgICAgICAvLyBib3R0b20gc2lkZVxuICAgICAgICAgICAgICAgICAgW1wiTFwiLCBBICsgZywgeiArIHUgKyBwXSxcbiAgICAgICAgICAgICAgICAgIC8vIGJvdHRvbSBsZWZ0IGNvcm5lclxuICAgICAgICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgICAgICBcIkNcIixcbiAgICAgICAgICAgICAgICAgICAgQSArIGcgLyAyLFxuICAgICAgICAgICAgICAgICAgICB6ICsgdSxcbiAgICAgICAgICAgICAgICAgICAgQSxcbiAgICAgICAgICAgICAgICAgICAgeiArIHUgLSBnIC8gMixcbiAgICAgICAgICAgICAgICAgICAgQSxcbiAgICAgICAgICAgICAgICAgICAgeiArIHUgLSBnXG4gICAgICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgICAgICAgLy8gbGVmdCBzaWRlXG4gICAgICAgICAgICAgICAgICBbXCJMXCIsIEEsIHogKyBmXSxcbiAgICAgICAgICAgICAgICAgIC8vIHRvcCBsZWZ0IGNvcm5lclxuICAgICAgICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgICAgICBcIkNcIixcbiAgICAgICAgICAgICAgICAgICAgQSxcbiAgICAgICAgICAgICAgICAgICAgeiArIGYgLyAyLFxuICAgICAgICAgICAgICAgICAgICBBICsgZiAvIDIsXG4gICAgICAgICAgICAgICAgICAgIHosXG4gICAgICAgICAgICAgICAgICAgIEEgKyBmLFxuICAgICAgICAgICAgICAgICAgICB6XG4gICAgICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgICAgICAgW1wiWlwiXVxuICAgICAgICAgICAgICAgIF1cbiAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgKSwgbyghMCk7XG4gICAgfSxcbiAgICBbbDMsIHRdXG4gICk7XG4gIHJldHVybiBQMSgoKSA9PiB7XG4gICAgbihsMyk7XG4gIH0sIFtdKSwgLyogQF9fUFVSRV9fICovIGMoXG4gICAgc2IuUHJvdmlkZXIsXG4gICAge1xuICAgICAgdmFsdWU6IHtcbiAgICAgICAgaXNSZW5kZXJDaGFydDogdCxcbiAgICAgICAgSGlnaGNoYXJ0czogbDMsXG4gICAgICAgIGRlZmF1bHRTZXR0aW5nOiBVRFxuICAgICAgfSxcbiAgICAgIGNoaWxkcmVuOiBlXG4gICAgfVxuICApO1xufTtcblhEKGwzKTtcbmwzLnNldE9wdGlvbnMoe1xuICBjb2xvcnM6IEhEXG59KTtcblBEKGwzKTtcbmNvbnN0IGJvID0gKCkgPT4ge1xuICBjb25zdCBlID0gQXQoc2IpO1xuICBpZiAoZSA9PT0gdm9pZCAwKVxuICAgIHRocm93IG5ldyBFcnJvcihcIk5lZWQgdG8gaGF2ZSBQcm92aWRlciB3cmFwcGVkLlwiKTtcbiAgcmV0dXJuIGU7XG59LCBHRCA9IChlKSA9PiB0eXBlb2YgZSA9PSBcIm51bWJlclwiICYmIE51bWJlcihlKS50b0ZpeGVkKDIpLCBRRCA9IChlLCB0KSA9PiAodCA/IE51bWJlcihlKSA6IE51bWJlcihlKS50b0ZpeGVkKDIpKS50b1N0cmluZygpLnJlcGxhY2UoL1xcQig/PShcXGR7M30pKyg/IVxcZCkpL2csIFwiLFwiKTtcbiQuZGl2YFxuICB3aWR0aDogMTAwJTtcbmA7XG5jb25zdCBaRCA9IHV0YFxuICB0byB7XG4gICAgYmFja2dyb3VuZC1wb3NpdGlvbjogMTAwJTtcbiAgfVxuYCwgakQgPSAkLmRpdihcbiAgKHtcbiAgICB0aGVtZTogeyBjb2xvcnM6IGUgfSxcbiAgICByYWRpdXM6IHQsXG4gICAgd2lkdGg6IG8sXG4gICAgaGVpZ2h0OiBuLFxuICAgIGNpcmNsZTogcixcbiAgICAkYW5pbWF0ZTogaSxcbiAgICAkdmlzaWJsZTogYVxuICB9KSA9PiBvMWBcbiAgICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgICAgcG9zaXRpb246IHJlbGF0aXZlO1xuICAgICAgb3ZlcmZsb3c6ICR7YSA/IFwiaGlkZGVuXCIgOiBcIm5vbmVcIn07XG4gICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAke2UuZGF0YVRhYmxlLmRhdGFUYWJsZUxvYWRlckJnfTtcbiAgICAgIGJvcmRlci1yYWRpdXM6ICR7ciA/IFwiNTAlXCIgOiBgJHt0fXB4YCB8fCBcIjRweFwifTtcbiAgICAgIGhlaWdodDogJHt0eXBlb2YgbiA9PSBcIm51bWJlclwiID8gYCR7bn1weGAgOiBuIHx8IFwiYXV0b1wifTtcbiAgICAgIHdpZHRoOiAke2Ake299cHhgIHx8IFwiMTAwJVwifTtcblxuICAgICAgJHtpICYmIG8xYFxuICAgICAgICAmOmFmdGVyIHtcbiAgICAgICAgICBjb250ZW50OiAnJztcbiAgICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgICAgICAgdG9wOiAwO1xuICAgICAgICAgIGxlZnQ6IDA7XG4gICAgICAgICAgYm90dG9tOiAwO1xuICAgICAgICAgIHJpZ2h0OiAwO1xuICAgICAgICAgIGJhY2tncm91bmQ6IGxpbmVhci1ncmFkaWVudChcbiAgICAgICAgICAgICAgMC4yNXR1cm4sXG4gICAgICAgICAgICAgIHRyYW5zcGFyZW50LFxuICAgICAgICAgICAgICAke2UuZGF0YVRhYmxlLmRhdGFUYWJsZUxvYWRlckdyYWRpZW50fSxcbiAgICAgICAgICAgICAgdHJhbnNwYXJlbnRcbiAgICAgICAgICAgICksXG4gICAgICAgICAgICBsaW5lYXItZ3JhZGllbnQoXG4gICAgICAgICAgICAgICR7ZS5kYXRhVGFibGUuZGF0YVRhYmxlTG9hZGVyQmd9LFxuICAgICAgICAgICAgICAke2UuZGF0YVRhYmxlLmRhdGFUYWJsZUxvYWRlckJnfVxuICAgICAgICAgICAgKSxcbiAgICAgICAgICAgIHJhZGlhbC1ncmFkaWVudChcbiAgICAgICAgICAgICAgMzhweCBjaXJjbGUgYXQgMTlweCAxOXB4LFxuICAgICAgICAgICAgICAke2UuZGF0YVRhYmxlLmRhdGFUYWJsZUxvYWRlckdyYWRpZW50fSA1MCUsXG4gICAgICAgICAgICAgIHRyYW5zcGFyZW50IDUxJVxuICAgICAgICAgICAgKSxcbiAgICAgICAgICAgIGxpbmVhci1ncmFkaWVudChcbiAgICAgICAgICAgICAgJHtlLmRhdGFUYWJsZS5kYXRhVGFibGVMb2FkZXJCZ30sXG4gICAgICAgICAgICAgICR7ZS5kYXRhVGFibGUuZGF0YVRhYmxlTG9hZGVyQmd9XG4gICAgICAgICAgICApO1xuICAgICAgICAgIGJhY2tncm91bmQtcmVwZWF0OiBuby1yZXBlYXQ7XG4gICAgICAgICAgYmFja2dyb3VuZC1zaXplOiA1MHB4O1xuICAgICAgICAgIGJhY2tncm91bmQtcG9zaXRpb246IC0zNTBweDtcbiAgICAgICAgICBhbmltYXRpb246ICR7WkR9IDEuN3MgaW5maW5pdGUgbGluZWFyO1xuICAgICAgICB9XG4gICAgICBgfVxuXG4gICAgICAkeyFhICYmIG8xYFxuICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiB0cmFuc3BhcmVudDtcbiAgICAgICAgJjphZnRlciB7XG4gICAgICAgICAgY29udGVudDogbm9uZTtcbiAgICAgICAgfVxuICAgICAgYH1cbiAgICBgXG4pLCBLRCA9ICQuZGl2YFxuICB2aXNpYmlsaXR5OiAkeyhlKSA9PiBlLiR2aXNpYmxlID8gXCJoaWRkZW5cIiA6IFwidmlzaWJsZVwifTtcbmAsIGllID0gKHtcbiAgdmlzaWJsZTogZSA9ICEwLFxuICBhbmltYXRlOiB0ID0gITAsXG4gIGNoaWxkcmVuOiBvLFxuICAuLi5uXG59KSA9PiAvKiBAX19QVVJFX18gKi8gYyhcbiAgakQsXG4gIHtcbiAgICAuLi5uLFxuICAgICR2aXNpYmxlOiBlLFxuICAgICRhbmltYXRlOiB0LFxuICAgIGNsYXNzTmFtZTogXCJza2VsZXRvbi1jb250YWluZXJcIixcbiAgICBjaGlsZHJlbjogLyogQF9fUFVSRV9fICovIGMoS0QsIHsgJHZpc2libGU6IGUsIGNsYXNzTmFtZTogXCJza2VsZXRvbi1jaGlsZC1jb250YWluZXJcIiwgY2hpbGRyZW46IG8gfSlcbiAgfVxuKSwgSkQgPSAoe1xuICBzZXRDb2x1bW5GaWx0ZXJzOiBlLFxuICB0YWJsZURhdGE6IHQsXG4gIG1heFZpc2libGVGaWx0ZXJzOiBvID0gNSxcbiAgZGVmYXVsdENvbHVtbnNTdGF0ZTogbixcbiAgYWxsQ29sdW1uc1N0YXRlOiByLFxuICBjb2x1bW5zU3RhdGU6IGksXG4gIGhhbmRsZUNoYW5nZUNvbHVtbk9yZGVyOiBhLFxuICBoYW5kbGVDb2x1bW5zU3RhdGVDaGFuZ2U6IHMsXG4gIGhhbmRsZVJlc2V0Q29sdW1uT3JkZXI6IGwsXG4gIHJlc2V0Q29sdW1uc1N0YXRlOiBwLFxuICBoYW5kbGVDb2x1bW5zSGlkZTogZCxcbiAgcmlnaHRTaWRlQ29udGFpbmVyOiBiLFxuICBjb2x1bW5GaWx0ZXJzOiBNLFxuICB0YWJsZUNvbmZpZzogdSxcbiAgbG9hZGluZzogQSxcbiAgY29sdW1uVmlzaWJpbGl0eTogeixcbiAgc2hvd1JpZ2h0U2lkZUNvbnRlbnQ6IGYsXG4gIHRhYnNNYXhIZWlnaHQ6IE8sXG4gIGNvbHVtbkNob29zZXJBY3Rpb25MYWJlbDogaCxcbiAgZW5hYmxlRmlsdGVySW5kaWNhdG9yRG90czogZ1xufSkgPT4ge1xuICB2YXIgRSwgRCwgRywgSjtcbiAgY29uc3QgW3YsIExdID0gVDEoe30pLCBbeSwgQl0gPSBUMSghMSksIFtYLCBGXSA9IFQxKFwiXCIpLCBbVCwgd10gPSBUMShuKSwgW0gsIENdID0gVDEoITEpLCBbcSwgbV0gPSBpbyghMSk7XG4gIFAxKCgpID0+IHtcbiAgICBuICYmIGkgJiYgciAmJiAoIW5jKHIsIGkpIHx8ICFuYyhuLCBUKSkgJiYgQyghMCk7XG4gIH0sIFtpLCBuLCBULCByXSk7XG4gIGNvbnN0IGsgPSAoUykgPT4ge1xuICAgIGNvbnN0IFcgPSBuZXcgU2V0KFQpO1xuICAgIE9iamVjdC5lbnRyaWVzKFMpLmZvckVhY2goKFtQLCBZXSkgPT4ge1xuICAgICAgWSA/IFcuYWRkKFApIDogVy5kZWxldGUoUCk7XG4gICAgfSksIHcoVyk7XG4gIH07XG4gIFAxKCgpID0+IHtcbiAgICBrKHopO1xuICB9LCBbel0pO1xuICBjb25zdCB4ID0gXzEoXG4gICAgKFMpID0+ICgpID0+IHtcbiAgICAgIGNvbnN0IFcgPSBuZXcgU2V0KFQpO1xuICAgICAgVy5oYXMoUykgPyBXLmRlbGV0ZShTKSA6IFcuYWRkKFMpLCB3KFcpO1xuICAgIH0sXG4gICAgW1RdXG4gICksIE4gPSBfMSgoKSA9PiB7XG4gICAgYSgpO1xuICAgIGNvbnN0IFMgPSB7fTtcbiAgICBpLml0ZW1zLmZvckVhY2goKFcpID0+IHtcbiAgICAgIFNbV10gPSBULmhhcyhXKTtcbiAgICB9KSwgZChTKSwgbSgpO1xuICB9LCBbXG4gICAgaSxcbiAgICBhLFxuICAgIGQsXG4gICAgVCxcbiAgICBtXG4gIF0pLCBWID0gXzEoKCkgPT4ge1xuICAgIHcobiksIGwoKSwgcCgpO1xuICB9LCBbbiwgbCwgcF0pLCBSID0gKFMsIFcpID0+IHtcbiAgICBMKChQKSA9PiAoe1xuICAgICAgLi4uUCxcbiAgICAgIFtTXTogV1xuICAgIH0pKTtcbiAgfSwgSSA9IChTKSA9PiB7XG4gICAgY29uc3QgVyA9IHsgLi4udiB9O1xuICAgIGRlbGV0ZSBXW1NdLCBMKFcpO1xuICB9LCBqID0gKFMgPSB2KSA9PiB7XG4gICAgY29uc3QgVyA9IE9iamVjdC5lbnRyaWVzKFMpLm1hcCgoW1AsIFldKSA9PiAoe1xuICAgICAgaWQ6IFAsXG4gICAgICB2YWx1ZTogWVxuICAgIH0pKTtcbiAgICBlKFcpO1xuICB9LCBVID0gKFMsIFcpID0+IHtcbiAgICBMKChaKSA9PiAoe1xuICAgICAgLi4uWixcbiAgICAgIFtTXTogV1xuICAgIH0pKTtcbiAgICBjb25zdCBQID0ge1xuICAgICAgLi4udixcbiAgICAgIFtTXTogV1xuICAgIH0sIFkgPSBPYmplY3QuZW50cmllcyhQKS5tYXAoXG4gICAgICAoW1osIHQxXSkgPT4gKHtcbiAgICAgICAgaWQ6IFosXG4gICAgICAgIHZhbHVlOiB0MVxuICAgICAgfSlcbiAgICApO1xuICAgIGUoWSk7XG4gIH0sIF8gPSAvKiBAX19QVVJFX18gKi8gZTEoczAsIHsgY2hpbGRyZW46IFtcbiAgICAvKiBAX19QVVJFX18gKi8gYyhcbiAgICAgIEIyLFxuICAgICAge1xuICAgICAgICBidXR0b25UeXBlOiBcImxpbmtcIixcbiAgICAgICAgc2l6ZTogXCJzbVwiLFxuICAgICAgICBvbkNsaWNrOiAoKSA9PiBJKFgpLFxuICAgICAgICBpc0Rpc2FibGVkOiAhdltYXSxcbiAgICAgICAgY2hpbGRyZW46IFwiQ2xlYXJcIlxuICAgICAgfVxuICAgICksXG4gICAgLyogQF9fUFVSRV9fICovIGMoXG4gICAgICBCMixcbiAgICAgIHtcbiAgICAgICAgc2l6ZTogXCJzbVwiLFxuICAgICAgICBvbkNsaWNrOiAoKSA9PiB7XG4gICAgICAgICAgaigpLCBCKCExKTtcbiAgICAgICAgfSxcbiAgICAgICAgY2hpbGRyZW46IFwiQXBwbHlcIlxuICAgICAgfVxuICAgIClcbiAgXSB9KSwgcjEgPSAoKEQgPSAoRSA9IHUgPT0gbnVsbCA/IHZvaWQgMCA6IHUub3B0aW9ucykgPT0gbnVsbCA/IHZvaWQgMCA6IEUuZGF0YSkgPT0gbnVsbCA/IHZvaWQgMCA6IEQubGVuZ3RoKSA+IDAgfHwgKE0gPT0gbnVsbCA/IHZvaWQgMCA6IE0ubGVuZ3RoKSAhPT0gMCwgSyA9IHQuc2xpY2UobykubGVuZ3RoIDwgMSwgUSA9IHUuZ2V0QWxsQ29sdW1ucygpLmZpbHRlcigoUykgPT4ge1xuICAgIHZhciBXO1xuICAgIHJldHVybiAhKChXID0gUyA9PSBudWxsID8gdm9pZCAwIDogUy5jb2x1bW5EZWYpICE9IG51bGwgJiYgVy5oaWRlRnJvbUNvbHVtbkNob29zZXIpO1xuICB9KS5tYXAoKFMpID0+IHtcbiAgICB2YXIgVztcbiAgICByZXR1cm4gKFcgPSBTLmNvbHVtbkRlZikgPT0gbnVsbCA/IHZvaWQgMCA6IFcuZmlsdGVyTGFiZWw7XG4gIH0pO1xuICByZXR1cm4gLyogQF9fUFVSRV9fICovIGUxKGlTLCB7IGNsYXNzTmFtZTogXCJhY3Rpb24tYmFyLWNvbnRhaW5lclwiLCBsb2FkaW5nOiBBLCBjaGlsZHJlbjogW1xuICAgIC8qIEBfX1BVUkVfXyAqLyBlMShzbywgeyBjb2x1bW5zOiAxMiwgYWxpZ25JdGVtczogXCJlbmRcIiwgY2hpbGRyZW46IFtcbiAgICAgIC8qIEBfX1BVUkVfXyAqLyBjKGY0LCB7IHdpZHRoOiA2LCBjaGlsZHJlbjogcjEgPyAvKiBAX19QVVJFX18gKi8gZTEoYVMsIHsgY2hpbGRyZW46IFtcbiAgICAgICAgLyogQF9fUFVSRV9fICovIGMoXG4gICAgICAgICAgaWUsXG4gICAgICAgICAge1xuICAgICAgICAgICAgcmFkaXVzOiA0LFxuICAgICAgICAgICAgaGVpZ2h0OiBBID8gSzIgOiBcImF1dG9cIixcbiAgICAgICAgICAgIHZpc2libGU6IEEsXG4gICAgICAgICAgICBjaGlsZHJlbjogIUsgJiYgLyogQF9fUFVSRV9fICovIGMoXG4gICAgICAgICAgICAgIEcyLFxuICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgbmFtZTogXCJGaWx0ZXJzXCIsXG4gICAgICAgICAgICAgICAgc2l6ZTogXCJzbVwiLFxuICAgICAgICAgICAgICAgIGJ1dHRvblR5cGU6IFwidGVydGlhcnlcIixcbiAgICAgICAgICAgICAgICBvbkNsaWNrOiAoKSA9PiBCKCEwKSxcbiAgICAgICAgICAgICAgICBpc0Rpc2FibGVkOiBLXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIClcbiAgICAgICAgICB9XG4gICAgICAgICksXG4gICAgICAgIHQuc2xpY2UoMCwgbykubWFwKChTKSA9PiBTLmVuYWJsZUZpbHRlciA/IC8qIEBfX1BVUkVfXyAqLyBjKHNTLCB7IGNoaWxkcmVuOiAvKiBAX19QVVJFX18gKi8gYyhcbiAgICAgICAgICBpZSxcbiAgICAgICAgICB7XG4gICAgICAgICAgICByYWRpdXM6IDQsXG4gICAgICAgICAgICBoZWlnaHQ6IEEgPyBLMiA6IFwiYXV0b1wiLFxuICAgICAgICAgICAgdmlzaWJsZTogQSxcbiAgICAgICAgICAgIGNoaWxkcmVuOiAvKiBAX19QVVJFX18gKi8gYyhcbiAgICAgICAgICAgICAgb1MsXG4gICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBmaWx0ZXJEYXRhOiBTLFxuICAgICAgICAgICAgICAgIGhhbmRsZUZpbHRlclZhbHVlOiBVLFxuICAgICAgICAgICAgICAgIGZpbHRlclZhbHVlczogdixcbiAgICAgICAgICAgICAgICBjbGVhckZpbHRlcjogSVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICApXG4gICAgICAgICAgfVxuICAgICAgICApIH0sIFMuY29sdW1uSWQpIDogbnVsbCksXG4gICAgICAgIC8qIEBfX1BVUkVfXyAqLyBjKFxuICAgICAgICAgIGllLFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIHJhZGl1czogNCxcbiAgICAgICAgICAgIGhlaWdodDogQSA/IEsyIDogXCJhdXRvXCIsXG4gICAgICAgICAgICB2aXNpYmxlOiBBLFxuICAgICAgICAgICAgY2hpbGRyZW46IE0ubGVuZ3RoICE9PSAwICYmIC8qIEBfX1BVUkVfXyAqLyBjKG5TLCB7IGNoaWxkcmVuOiAvKiBAX19QVVJFX18gKi8gYyhcbiAgICAgICAgICAgICAgQjIsXG4gICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBidXR0b25UeXBlOiBcImxpbmtcIixcbiAgICAgICAgICAgICAgICBjaGlsZHJlbjogXCJDbGVhciBhbGxcIixcbiAgICAgICAgICAgICAgICBzaXplOiBcInNtXCIsXG4gICAgICAgICAgICAgICAgb25DbGljazogKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgTCh7fSksIGUoW10pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgKSB9KVxuICAgICAgICAgIH1cbiAgICAgICAgKVxuICAgICAgXSB9KSA6IG51bGwgfSksXG4gICAgICAvKiBAX19QVVJFX18gKi8gYyhmNCwgeyB3aWR0aDogNiwgJG1pZGRsZTogITAsIGVuZDogITAsIGNoaWxkcmVuOiAvKiBAX19QVVJFX18gKi8gZTEoclMsIHsgY2hpbGRyZW46IFtcbiAgICAgICAgcjEgPyAvKiBAX19QVVJFX18gKi8gYyhcbiAgICAgICAgICBpZSxcbiAgICAgICAgICB7XG4gICAgICAgICAgICByYWRpdXM6IDQsXG4gICAgICAgICAgICBoZWlnaHQ6IEEgPyBLMiA6IFwiYXV0b1wiLFxuICAgICAgICAgICAgdmlzaWJsZTogQSxcbiAgICAgICAgICAgIGNoaWxkcmVuOiBiICYmIGJcbiAgICAgICAgICB9XG4gICAgICAgICkgOiBmID8gLyogQF9fUFVSRV9fICovIGMoXG4gICAgICAgICAgaWUsXG4gICAgICAgICAge1xuICAgICAgICAgICAgcmFkaXVzOiA0LFxuICAgICAgICAgICAgaGVpZ2h0OiBBID8gSzIgOiBcImF1dG9cIixcbiAgICAgICAgICAgIHZpc2libGU6IEEsXG4gICAgICAgICAgICBjaGlsZHJlbjogYiAmJiBiXG4gICAgICAgICAgfVxuICAgICAgICApIDogbnVsbCxcbiAgICAgICAgLyogQF9fUFVSRV9fICovIGMoczAsIHsgY2hpbGRyZW46IHIxID8gLyogQF9fUFVSRV9fICovIGMoczAsIHsgY2hpbGRyZW46ICEhaSAmJiAvKiBAX19QVVJFX18gKi8gYyhcbiAgICAgICAgICBpZSxcbiAgICAgICAgICB7XG4gICAgICAgICAgICByYWRpdXM6IDQsXG4gICAgICAgICAgICBoZWlnaHQ6IEEgPyBLMiA6IFwiYXV0b1wiLFxuICAgICAgICAgICAgdmlzaWJsZTogQSxcbiAgICAgICAgICAgIGNoaWxkcmVuOiAvKiBAX19QVVJFX18gKi8gYyhcbiAgICAgICAgICAgICAgRXIsXG4gICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBidXR0b246IC8qIEBfX1BVUkVfXyAqLyBjKFxuICAgICAgICAgICAgICAgICAgRzIsXG4gICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIHNpemU6IFwic21cIixcbiAgICAgICAgICAgICAgICAgICAgYnV0dG9uVHlwZTogXCJ0ZXJ0aWFyeVwiLFxuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIkNvbHVtbk9wdGlvbnNcIixcbiAgICAgICAgICAgICAgICAgICAgb25DbGljazogbSxcbiAgICAgICAgICAgICAgICAgICAgXCJhcmlhLWxhYmVsXCI6IFwiT3BlbiBEcmFnZ2FibGUgc29ydCBjb2x1bW4gTGlzdFwiXG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICBwb3NpdGlvbjogXCJyaWdodFwiLFxuICAgICAgICAgICAgICAgIGlzU2hvd2VkOiBxLFxuICAgICAgICAgICAgICAgIGlzRmlsdGVyVmFsdWVDaGFuZ2VkOiBILFxuICAgICAgICAgICAgICAgIGFwcGx5VGV4dDogXCJBcHBseVwiLFxuICAgICAgICAgICAgICAgIGNsZWFyVGV4dDogaCxcbiAgICAgICAgICAgICAgICB3aWR0aDogMzUyLFxuICAgICAgICAgICAgICAgIG9uQXBwbHlGaWx0ZXI6IE4sXG4gICAgICAgICAgICAgICAgb25DbGVhckZpbHRlcjogVixcbiAgICAgICAgICAgICAgICBoYW5kbGVEcm9wZG93blNob3dlZDogbSxcbiAgICAgICAgICAgICAgICBjaGlsZHJlbjogLyogQF9fUFVSRV9fICovIGMoXG4gICAgICAgICAgICAgICAgICBJRCxcbiAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgZmlsdGVyTmFtZXM6IFEsXG4gICAgICAgICAgICAgICAgICAgIGNvbHVtbnNTdGF0ZTogaSxcbiAgICAgICAgICAgICAgICAgICAgc2VsZWN0ZWRDb2x1bW5zOiBULFxuICAgICAgICAgICAgICAgICAgICBoYW5kbGVDb2x1bW5zU3RhdGVDaGFuZ2U6IHMsXG4gICAgICAgICAgICAgICAgICAgIGhhbmRsZUNoZWNrYm94Q29sdW1uc0NoYW5nZTogeCxcbiAgICAgICAgICAgICAgICAgICAgcGFnZVNpemU6IChKID0gKEcgPSB1ID09IG51bGwgPyB2b2lkIDAgOiB1LmdldFBhZ2luYXRpb25Sb3dNb2RlbCgpKSA9PSBudWxsID8gdm9pZCAwIDogRy5yb3dzKSA9PSBudWxsID8gdm9pZCAwIDogSi5sZW5ndGhcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIClcbiAgICAgICAgICB9XG4gICAgICAgICkgfSkgOiBudWxsIH0pXG4gICAgICBdIH0pIH0pXG4gICAgXSB9KSxcbiAgICAvKiBAX19QVVJFX18gKi8gYyhcbiAgICAgIENTLFxuICAgICAge1xuICAgICAgICBpc09wZW46IHksXG4gICAgICAgIG9uQ2xvc2U6ICgpID0+IEIoITEpLFxuICAgICAgICB0aXRsZTogXCJNb3JlIGZpbHRlcnNcIixcbiAgICAgICAgc2l6ZTogXCJtZFwiLFxuICAgICAgICBoYXNDbG9zZUJ1dHRvbjogITAsXG4gICAgICAgIGFjdGlvbnNHcm91cDogXyxcbiAgICAgICAgaXNGaWx0ZXJNb2RhbDogITAsXG4gICAgICAgIGNoaWxkcmVuOiAvKiBAX19QVVJFX18gKi8gYyhzMCwgeyBjaGlsZHJlbjogLyogQF9fUFVSRV9fICovIGMoXG4gICAgICAgICAgVVMsXG4gICAgICAgICAge1xuICAgICAgICAgICAgZmlsdGVyczogdCxcbiAgICAgICAgICAgIGhhbmRsZUZpbHRlclZhbHVlOiBSLFxuICAgICAgICAgICAgZmlsdGVyVmFsdWVzOiB2LFxuICAgICAgICAgICAgY2xlYXJGaWx0ZXI6IEksXG4gICAgICAgICAgICBzZXRDbGVhckZpbHRlcklkOiBGLFxuICAgICAgICAgICAgbWF4VmlzaWJsZUZpbHRlcnM6IG8sXG4gICAgICAgICAgICB0YWJzTWF4SGVpZ2h0OiBPLFxuICAgICAgICAgICAgZW5hYmxlRmlsdGVySW5kaWNhdG9yRG90czogZ1xuICAgICAgICAgIH1cbiAgICAgICAgKSB9KVxuICAgICAgfVxuICAgIClcbiAgXSB9KTtcbn0sIF9EID0gJC5idXR0b24oKHsgdGhlbWU6IHsgY29sb3JzOiBlLCBib3JkZXJSYWRpdXM6IHQsIHNwYWNpbmdzOiBvIH0sICRpc0Rpc2FibGU6IG4sICRpc0Ryb3Bkb3duOiByIH0pID0+IG8xYFxuICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgICBtYXgtd2lkdGg6IDEwMCU7XG4gICAgYmFja2dyb3VuZC1jb2xvcjogdHJhbnNwYXJlbnQ7XG4gICAgYm9yZGVyOiBub25lO1xuICAgIHBhZGRpbmc6IDA7XG4gICAgYm9yZGVyLXJhZGl1czogMnB4O1xuICAgICY6Zm9jdXMtdmlzaWJsZSB7XG4gICAgICBvdXRsaW5lOiAke2UuYm9yZGVyLmJvcmRlckZvY3VzZWR9IHNvbGlkIDFweDtcbiAgICB9XG4gICAgJHtyICYmIG8xYFxuICAgICAgJHtvdH0ge1xuICAgICAgICBib3JkZXItdG9wLWxlZnQtcmFkaXVzOiAke3Quc219O1xuICAgICAgICBib3JkZXItYm90dG9tLWxlZnQtcmFkaXVzOiAke3Quc219O1xuICAgICAgICBwYWRkaW5nOiAke28uc3A2fSAke28uc3A0fSAke28uc3A2fSAke28uc3A4fTtcbiAgICAgICAgYm9yZGVyLXRvcC1yaWdodC1yYWRpdXM6IDBweDtcbiAgICAgICAgYm9yZGVyLWJvdHRvbS1yaWdodC1yYWRpdXM6IDBweDtcbiAgICAgIH1cbiAgICAgICR7bzN9IHtcbiAgICAgICAgYm9yZGVyLXRvcC1yaWdodC1yYWRpdXM6ICR7dC5zbX07XG4gICAgICAgIGJvcmRlci1ib3R0b20tcmlnaHQtcmFkaXVzOiAke3Quc219O1xuICAgICAgfVxuICAgIGB9XG4gICAgJHshciAmJiBvMWBcbiAgICAgICR7b3R9IHtcbiAgICAgICAgYm9yZGVyLXJhZGl1czogJHt0LnNtfTtcbiAgICAgICAgcGFkZGluZzogNnB4IDhweDtcbiAgICAgIH1cbiAgICAgICR7bzN9IHtcbiAgICAgICAgYm9yZGVyLXJhZGl1czogbm9uZTtcbiAgICAgIH1cbiAgICBgfVxuICAgICR7b3R9IHtcbiAgICAgIGN1cnNvcjogcG9pbnRlcjtcbiAgICAgICY6aG92ZXIge1xuICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAke2UuYWN0aW9uQnV0dG9uLmFjdGlvbkJ1dHRvbkJnSG92ZXJCdXR0b259O1xuICAgICAgfVxuICAgICAgJjphY3RpdmUge1xuICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAke2UuYWN0aW9uQnV0dG9uLmFjdGlvbkJ1dHRvbkJnUHJlc3NlZEJ1dHRvbn07XG4gICAgICB9XG4gICAgfVxuXG4gICAgJHtuICYmIG8xYFxuICAgICAgJHtvdH0ge1xuICAgICAgICBwb2ludGVyLWV2ZW50czogbm9uZTtcbiAgICAgICAgY29sb3I6ICR7ZS50ZXh0SWNvbi50ZXh0RGlzYWJsZWRPbmJnfTtcbiAgICAgICAgY3Vyc29yOiBub25lO1xuICAgICAgfVxuXG4gICAgICAke28zfSB7XG4gICAgICAgIHBvaW50ZXItZXZlbnRzOiBub25lO1xuICAgICAgICBjb2xvcjogJHtlLnRleHRJY29uLnRleHREaXNhYmxlZE9uYmd9O1xuICAgICAgICBzdmcge1xuICAgICAgICAgIGNvbG9yOiAke2UudGV4dEljb24udGV4dERpc2FibGVkT25iZ30gIWltcG9ydGFudDtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIGB9XG4gICAgJjpoYXMoJHtvM306aG92ZXIpIHtcbiAgICAgICR7b3R9e1xuICAgICAgYmFja2dyb3VuZC1jb2xvcjogJHtlLmFjdGlvbkJ1dHRvbi5hY3Rpb25CdXR0b25CZ0hvdmVyRHJvcGRvd259O1xuICAgICAgfVxuICAgIH1cblxuICAgICY6aGFzKCR7b3R9OmhvdmVyKSB7XG4gICAgICAke28zfXtcbiAgICAgIGJhY2tncm91bmQtY29sb3I6ICR7ZS5hY3Rpb25CdXR0b24uYWN0aW9uQnV0dG9uQmdIb3ZlckRyb3Bkb3dufTtcbiAgICB9XG4gIH1cbiAgICAke28zfSB7XG4gICAgICBjdXJzb3I6IHBvaW50ZXI7XG4gICAgICBzdmcge1xuICAgICAgICBjb2xvcjogJHtlLnRleHRJY29uLnRleHRMb3dlbXBoYXNpc307XG4gICAgICB9XG4gICAgICAmOmhvdmVyIHtcbiAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogICR7ZS5iYWNrZ3JvdW5kcy5iZ0hvdmVyUHJpbWFyeX07XG4gICAgICB9XG4gICAgICAmOmFjdGl2ZSB7XG4gICAgICAgIGJhY2tncm91bmQtY29sb3I6ICR7ZS5hY3Rpb25CdXR0b24uYWN0aW9uQnV0dG9uQmdQcmVzc2VkRHJvcGRvd259O1xuICAgICAgICBzdmcge1xuICAgICAgICAgIGNvbG9yOiAke2UudGV4dEljb24udGV4dFByaW1hcnl9O1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICBgKTtcbiQuZGl2YFxuICBwYWRkaW5nOiAwO1xuYDtcbiQuZGl2KCh7IHRoZW1lOiB7IHNwYWNpbmdzOiBlIH0gfSkgPT4gbzFgXG4gICAgZGlzcGxheTogZmxleDtcbiAgICBhbGlnbi1pdGVtczogY2VudGVyO1xuICAgIGdhcDogJHtlLnNwNH07XG4gIGApO1xuY29uc3QgbzMgPSAkLmRpdigoeyB0aGVtZTogeyBzcGFjaW5nczogZSwgY29sb3JzOiB0IH0gfSkgPT4gbzFgXG4gICAgcGFkZGluZzogJHtlLnNwMTJ9IDZweDtcbiAgYCksIG90ID0gJC5kaXYoXG4gICh7IHRoZW1lOiB7IGNvbG9yczogZSwgdHlwb2dyYXBoeTogdCwgbGluZUhlaWdodDogbywgZm9udFdlaWdodDogbiB9LCAkaWNvbkJ1dHRvbjogciB9KSA9PiBvMWBcbiAgICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgICBhbGlnbi1pdGVtczogY2VudGVyO1xuICAgICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XG4gICAgICBnYXA6IDRweDtcbiAgICAgIG1heC13aWR0aDogMTAwJTtcbiAgICAgIGZvbnQtc2l6ZTogJHt0LnQxMn07XG4gICAgICBsaW5lLWhlaWdodDogJHtvLmxoMjB9O1xuICAgICAgZm9udC13ZWlnaHQ6ICR7bi5yZWd1bGFyfTtcbiAgICAgIGJvcmRlcjogbm9uZTtcbiAgICAgIGJhY2tncm91bmQtY29sb3I6IHRyYW5zcGFyZW50O1xuICAgICAgY29sb3I6ICR7ZS50ZXh0SWNvbi50ZXh0UHJpbWFyeX07XG4gICAgICBib3JkZXItcmFkaXVzOiAycHg7XG4gICAgICBib3gtc2l6aW5nOiBib3JkZXItYm94O1xuXG4gICAgICAke3IgJiYgbzFgXG4gICAgICAgIGhlaWdodDogMzJweDtcbiAgICAgICAgd2lkdGg6IDMycHg7XG4gICAgICBgfVxuICAgIGBcbiksICREID0gJC5kaXYoKHsgdGhlbWU6IHt9IH0pID0+IG8xYFxuICAgIGRpc3BsYXk6IGZsZXg7XG4gIGApLCBZXyA9ICh7XG4gIGljb25OYW1lOiBlLFxuICB0ZXh0OiB0LFxuICBpc0Rpc2FibGU6IG8sXG4gIGNvdW50OiBuLFxuICBkcm9wRG93bjogcixcbiAgaWNvblJpZ2h0OiBpLFxuICBpY29uTGVmdDogYSxcbiAgZHJvcERvd25Cb2R5OiBzLFxuICBvbkNsaWNrOiBsLFxuICAuLi5wXG59KSA9PiAvKiBAX19QVVJFX18gKi8gYyhfRCwgeyAkaXNEaXNhYmxlOiBvLCAkaXNEcm9wZG93bjogciwgY2hpbGRyZW46IGUgJiYgIXIgJiYgIXQgJiYgIWEgJiYgIWkgPyBuID8gLyogQF9fUFVSRV9fICovIGMob3QsIHsgb25DbGljazogbCwgJGljb25CdXR0b246ICEwLCBjaGlsZHJlbjogLyogQF9fUFVSRV9fICovIGMoQWUsIHsgLi4ucCwgY291bnQ6IG4sIGNoaWxkcmVuOiAvKiBAX19QVVJFX18gKi8gYyhaMSwgeyBuYW1lOiBlLCBzaXplOiBcInh4eHNcIiB9KSB9KSB9KSA6IC8qIEBfX1BVUkVfXyAqLyBjKG90LCB7IG9uQ2xpY2s6IGwsICRpY29uQnV0dG9uOiAhMCwgY2hpbGRyZW46IC8qIEBfX1BVUkVfXyAqLyBjKFoxLCB7IG5hbWU6IGUsIHNpemU6IFwieHh4c1wiIH0pIH0pIDogLyogQF9fUFVSRV9fICovIGUxKCRELCB7IGNsYXNzTmFtZTogXCJhY3Rpb25CdG5Ecm9wZG93blwiLCBjaGlsZHJlbjogW1xuICAvKiBAX19QVVJFX18gKi8gZTEob3QsIHsgb25DbGljazogbCwgY2hpbGRyZW46IFtcbiAgICAhaSAmJiBhICYmIC8qIEBfX1BVUkVfXyAqLyBjKFoxLCB7IG5hbWU6IGUsIHNpemU6IFwieHh4c1wiIH0pLFxuICAgIHQsXG4gICAgIWEgJiYgaSAmJiAhciAmJiAvKiBAX19QVVJFX18gKi8gYyhaMSwgeyBuYW1lOiBlLCBzaXplOiBcInh4eHNcIiB9KVxuICBdIH0pLFxuICByICYmICFpICYmIGEgJiYgLyogQF9fUFVSRV9fICovIGMoXG4gICAgaXQsXG4gICAge1xuICAgICAgYm9keTogcyxcbiAgICAgIHBvc2l0aW9uOiBcInJpZ2h0XCIsXG4gICAgICBkcm9wZG93bkJvZHlXaWR0aDogXCIxNzVweFwiLFxuICAgICAgY2hpbGRyZW46IC8qIEBfX1BVUkVfXyAqLyBjKG8zLCB7IGNoaWxkcmVuOiAvKiBAX19QVVJFX18gKi8gYyhaMSwgeyBuYW1lOiBcIkNoZXZyb25Eb3duRHJvcGRvd25cIiwgc2l6ZTogXCJ4eHh4c1wiIH0pIH0pXG4gICAgfVxuICApXG5dIH0pIH0pLCBydCA9IHtcbiAgSU5GTzogXCJpbmZvXCIsXG4gIFNVQ0NFU1M6IFwic3VjY2Vzc1wiLFxuICBFUlJPUjogXCJlcnJvclwiLFxuICBXQVJOSU5HOiBcIndhcm5pbmdcIlxufSwgZUggPSAkLmRpdigoeyB0aGVtZTogZSwgdHlwZTogdCB9KSA9PiB7XG4gIGNvbnN0IHsgY29sb3JzOiBvLCB0eXBvZ3JhcGh5OiBuLCBsaW5lSGVpZ2h0OiByLCBib3JkZXJSYWRpdXM6IGksIHNwYWNpbmdzOiBhIH0gPSBlO1xuICBsZXQgcywgbDtcbiAgc3dpdGNoICh0KSB7XG4gICAgY2FzZSBydC5TVUNDRVNTOlxuICAgICAgcyA9IG8udGV4dEljb24udGV4dEFsZXJ0U3VjY2VzcywgbCA9IG8uYmFja2dyb3VuZHMuYmdTdWNjZXNzU2Vjb25kYXJ5O1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSBydC5XQVJOSU5HOlxuICAgICAgcyA9IG8udGV4dEljb24udGV4dEFsZXJ0V2FybmluZywgbCA9IG8uYmFja2dyb3VuZHMuYmdXYXJuaW5nU2Vjb25kYXJ5O1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSBydC5FUlJPUjpcbiAgICAgIHMgPSBvLnRleHRJY29uLnRleHRBbGVydEVycm9yLCBsID0gby5iYWNrZ3JvdW5kcy5iZ0Vycm9yU2Vjb25kYXJ5O1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSBydC5JTkZPOlxuICAgIGRlZmF1bHQ6XG4gICAgICBzID0gby50ZXh0SWNvbi50ZXh0QWxlcnRJbmZvcm1hdGlvbmFsLCBsID0gby5iYWNrZ3JvdW5kcy5iZ0luZm9ybWF0aW9uYWxTZWNvbmRhcnk7XG4gIH1cbiAgcmV0dXJuIG8xYFxuICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgICBnYXA6IDhweDtcbiAgICB3aWR0aDogNDQ0cHg7XG4gICAgbWF4LXdpZHRoOiAxMDAlO1xuICAgIGJvcmRlci1yYWRpdXM6ICR7aS5iYXNlfTtcbiAgICBmb250LXNpemU6ICR7bi50MTJ9O1xuICAgIGxpbmUtaGVpZ2h0OiAke3IubGgyMn07XG4gICAgY29sb3I6ICR7c307XG4gICAgYmFja2dyb3VuZC1jb2xvcjogJHtsfTtcbiAgICBwYWRkaW5nOiA1cHggJHthLnNwOH07XG4gIGA7XG59KTtcbiQuZGl2YFxuICBwYWRkaW5nOiAzMnB4O1xuYDtcbmNvbnN0IHRIID0gKHsgdGV4dDogZSwgdHlwZTogdCA9IHJ0LklORk8gfSwgbykgPT4gLyogQF9fUFVSRV9fICovIGUxKGVILCB7IHJlZjogbywgdHlwZTogdCwgY2hpbGRyZW46IFtcbiAgLyogQF9fUFVSRV9fICovIGMoWjEsIHsgbmFtZTogKCgpID0+IHtcbiAgICBzd2l0Y2ggKHQpIHtcbiAgICAgIGNhc2UgcnQuU1VDQ0VTUzpcbiAgICAgICAgcmV0dXJuIFwiU3VjY2Vzc1wiO1xuICAgICAgY2FzZSBydC5FUlJPUjpcbiAgICAgICAgcmV0dXJuIFwiRXJyb3JcIjtcbiAgICAgIGNhc2UgcnQuV0FSTklORzpcbiAgICAgICAgcmV0dXJuIFwiQWxlcnRcIjtcbiAgICAgIGNhc2UgcnQuSU5GTzpcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiBcIkluZm9cIjtcbiAgICB9XG4gIH0pKCksIHNpemU6IFwieHNcIiB9KSxcbiAgZVxuXSB9KSwgR18gPSBCMCh0SCksIGNiID0gJC5idXR0b25gXG4gIC5pY29uLXN5c3RlbSB7XG4gICAgbWFyZ2luLXRvcDogMXB4O1xuICB9XG5gLCBvSCA9ICQuc3BhbmBgLCBsYiA9ICQubGlgYCwgckggPSAkLnVsKFxuICAoe1xuICAgIHRoZW1lOiB7XG4gICAgICB0eXBvZ3JhcGh5OiBlLFxuICAgICAgbGluZUhlaWdodDogdCxcbiAgICAgIGZvbnRXZWlnaHQ6IG8sXG4gICAgICBjb2xvcnM6IG4sXG4gICAgICBtaXhpbnM6IHIsXG4gICAgICBmb250RmFtaWx5OiBpLFxuICAgICAgdHJhbnNpdGlvbnM6IGFcbiAgICB9XG4gIH0pID0+IHtcbiAgICBjb25zdCBzID0gbi50ZXh0SWNvbi50ZXh0U2Vjb25kYXJ5LCBsID0gbi50ZXh0SWNvbi50ZXh0TG93ZW1waGFzaXMsIHAgPSBuLnRleHRJY29uLnRleHRMb3dlbXBoYXNpcywgZCA9IG4udGV4dEljb24udGV4dExvd2VtcGhhc2lzO1xuICAgIHJldHVybiBvMWBcbiAgICAgICR7ci5saXN0UmVzZXR9O1xuICAgICAgZGlzcGxheTogZmxleDtcbiAgICAgIGZsZXgtd3JhcDogd3JhcDtcbiAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gICAgICBjb2xvcjogJHtzfTtcbiAgICAgICR7bGJ9IHtcbiAgICAgICAgZm9udC1zaXplOiAke2UudDEwfTtcbiAgICAgICAgbGluZS1oZWlnaHQ6ICR7dC5saDE4fTtcbiAgICAgICAgZm9udC13ZWlnaHQ6ICR7by5yZWd1bGFyfTtcbiAgICAgICAgZm9udC1mYW1pbHk6ICR7aS5iYXNlfTtcbiAgICAgICAgY29sb3I6ICR7bi50ZXh0SWNvbi50ZXh0U2Vjb25kYXJ5fTtcbiAgICAgICAgdHJhbnNpdGlvbjogJHthLmJhc2V9O1xuICAgICAgICAmOmhvdmVyIHtcbiAgICAgICAgICB0ZXh0LXNoYWRvdzogMHB4IDBweCAwcHggJHtuLnRleHRJY29uLnRleHRTZWNvbmRhcnl9O1xuICAgICAgICAgIGZvbnQtd2VpZ2h0OiAke28ubWVkaXVtfTtcbiAgICAgICAgICB0cmFuc2l0aW9uOiAke2EuYmFzZX07XG4gICAgICAgIH1cbiAgICAgICAgJjphY3RpdmUge1xuICAgICAgICAgIHRleHQtc2hhZG93OiAwcHggMHB4IDBweCAke24udGV4dEljb24udGV4dFNlY29uZGFyeX07XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgICR7Y2J9IHtcbiAgICAgICAgZGlzcGxheTogZmxleDtcbiAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgICAgICAgY29sb3I6ICR7bH07XG4gICAgICAgIHRleHQtZGVjb3JhdGlvbjogbm9uZTtcbiAgICAgICAgY3Vyc29yOiBwb2ludGVyO1xuICAgICAgICBib3JkZXI6IG5vbmU7XG4gICAgICAgIHBhZGRpbmc6IDNweCAwO1xuICAgICAgICBiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudDtcbiAgICAgICAgZm9udC1mYW1pbHk6ICR7aS5iYXNlfTtcbiAgICAgICAgZm9udC1zaXplOiAke2UudDEwfTtcbiAgICAgICAgbGluZS1oZWlnaHQ6ICR7dC5saDE4fTtcbiAgICAgICAgZm9udC13ZWlnaHQ6ICR7by5yZWd1bGFyfTtcbiAgICAgICAgdHJhbnNpdGlvbjogJHthLmJhc2V9O1xuICAgICAgICAmOmhvdmVyIHtcbiAgICAgICAgICBjb2xvcjogJHtwfTtcbiAgICAgICAgICB0ZXh0LXNoYWRvdzogMHB4IDBweCAwcHggIzc5Nzk4MDtcbiAgICAgICAgICB0cmFuc2l0aW9uOiAke2EuYmFzZX07XG4gICAgICAgICAgZm9udC13ZWlnaHQ6ICR7by5tZWRpdW19O1xuICAgICAgICB9XG4gICAgICAgICY6aG92ZXIge1xuICAgICAgICAgIGNvbG9yOiAke3B9O1xuICAgICAgICAgIHRleHQtc2hhZG93OiAwcHggMHB4IDBweCAjNzk3OTgwO1xuICAgICAgICAgIHRyYW5zaXRpb246ICR7YS5iYXNlfTtcbiAgICAgICAgfVxuICAgICAgICAmOmZvY3VzIHtcbiAgICAgICAgICBjb2xvcjogJHtwfTtcbiAgICAgICAgICB0ZXh0LWRlY29yYXRpb246IG5vbmU7XG4gICAgICAgIH1cbiAgICAgICAgJjphY3RpdmUge1xuICAgICAgICAgIGNvbG9yOiAke2R9O1xuICAgICAgICB9XG4gICAgICAgIC5pY29uLXN5c3RlbSB7XG4gICAgICAgICAgd2lkdGg6IDlweDtcbiAgICAgICAgICBwYWRkaW5nOiAzLjVweDtcbiAgICAgICAgICBjb2xvcjogJHtuLnRleHRJY29uLnRleHRMb3dlbXBoYXNpc307XG4gICAgICAgICAgc3ZnIHtcbiAgICAgICAgICAgIHdpZHRoOiA5cHg7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgYDtcbiAgfVxuKSwgbkggPSAoeyBuYW1lOiBlLCB0bzogdCB9KSA9PiAvKiBAX19QVVJFX18gKi8gZTEoY2IsIHsgb25DbGljazogdCwgXCJkYXRhLXRleHRcIjogZSwgY2hpbGRyZW46IFtcbiAgZSxcbiAgLyogQF9fUFVSRV9fICovIGMoWjEsIHsgc2l6ZTogXCJ4c1wiLCBuYW1lOiBcIkNoZXZyb25SaWdodFwiIH0pXG5dIH0pLCBpSCA9IChlLCB0KSA9PiB7XG4gIGNvbnN0IHsgaXRlbXNMaXN0OiBvID0gW10gfSA9IGU7XG4gIHJldHVybiAvKiBAX19QVVJFX18gKi8gYyhySCwgeyByZWY6IHQsIGNoaWxkcmVuOiAoKCkgPT4gby5tYXAoKHIsIGkpID0+IHtcbiAgICBjb25zdCB7IG5hbWU6IGEsIHRvOiBzIH0gPSByO1xuICAgIHJldHVybiAvKiBAX19QVVJFX18gKi8gYyhsYiwgeyBjaGlsZHJlbjogKCgpID0+IGkgIT09IG8ubGVuZ3RoIC0gMSA/IC8qIEBfX1BVUkVfXyAqLyBjKG5ILCB7IG5hbWU6IGEsIHRvOiBzIH0pIDogLyogQF9fUFVSRV9fICovIGMob0gsIHsgY2hpbGRyZW46IGEgfSkpKCkgfSwgYSk7XG4gIH0pKSgpIH0pO1xufSwgYUggPSBCMChpSCk7XG4kLmRpdmBgO1xuY29uc3QgejUgPSAkLnNwYW5gYCwgc0ggPSAkKEhwKShcbiAgKHsgdGhlbWU6IHsgc3BhY2luZ3M6IGUgfSwgJGljb25SaWdodDogdCwgJGljb25MZWZ0OiBvLCBzaXplOiBuIH0pID0+IG8xYFxuICAgICAgZGlzcGxheTogZmxleDtcbiAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gICAgICBqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWJldHdlZW47XG5cbiAgICAgICR7ISF0ICYmIG8xYFxuICAgICAgICAke3o1fSB7XG4gICAgICAgICAgcGFkZGluZy1yaWdodDogJHtuID09IFwic21cIiA/IFwiMTBweFwiIDogYCR7ZS5zcDEyfWB9O1xuICAgICAgICB9XG4gICAgICAgIC5pY29uLXN5c3RlbSB7XG4gICAgICAgICAgcGFkZGluZzogMHB4O1xuXG4gICAgICAgICAgaGVpZ2h0OiAke24gIT0gXCJzbVwiID8gXCIxNnB4XCIgOiBcIjEycHhcIn07XG5cbiAgICAgICAgICBzdmcge1xuICAgICAgICAgICAgaGVpZ2h0OiAke24gIT0gXCJzbVwiID8gXCIxNnB4XCIgOiBcIjEycHhcIn07XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICBgfVxuXG4gICAgICAkeyEhbyAmJiBvMWBcbiAgICAgICAgJHt6NX0ge1xuICAgICAgICAgIHBhZGRpbmctbGVmdDogJHtuID09IFwic21cIiA/IFwiMTBweFwiIDogYCR7ZS5zcDEyfWB9O1xuICAgICAgICB9XG5cbiAgICAgICAgLmljb24tc3lzdGVtIHtcbiAgICAgICAgICBwYWRkaW5nOiAwcHg7XG5cbiAgICAgICAgICBoZWlnaHQ6ICR7biAhPSBcInNtXCIgPyBcIjE2cHhcIiA6IFwiMTJweFwifTtcblxuICAgICAgICAgIHN2ZyB7XG4gICAgICAgICAgICBoZWlnaHQ6ICR7biAhPSBcInNtXCIgPyBcIjE2cHhcIiA6IFwiMTJweFwifTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIGB9XG4gICAgYFxuKTtcbmZ1bmN0aW9uIFg2KGUpIHtcbiAgY29uc3QgeyBjaGlsZHJlbjogdCwgLi4ubyB9ID0gZTtcbiAgcmV0dXJuIC8qIEBfX1BVUkVfXyAqLyBjKFUyLCB7IGNoaWxkcmVuOiBvLmJ1dHRvblR5cGUgIT0gXCJtaW5pXCIgJiYgLyogQF9fUFVSRV9fICovIGUxKHNILCB7IC4uLm8sIGNoaWxkcmVuOiBbXG4gICAgby4kaWNvbkxlZnQgJiYgLyogQF9fUFVSRV9fICovIGMoWjEsIHsgbmFtZTogby4kaWNvbkxlZnQgfSksXG4gICAgLyogQF9fUFVSRV9fICovIGMoejUsIHsgY2hpbGRyZW46IHQgfSksXG4gICAgby4kaWNvblJpZ2h0ICYmIC8qIEBfX1BVUkVfXyAqLyBjKFoxLCB7IG5hbWU6IG8uJGljb25SaWdodCB9KVxuICBdIH0pIH0pO1xufVxuY29uc3QgY0ggPSAoZSwgdCkgPT4ge1xuICBjb25zdCB7IGlzRGlzYWJsZWQ6IG8sIC4uLm4gfSA9IGU7XG4gIHJldHVybiAvKiBAX19QVVJFX18gKi8gYyhkNiwgeyByZWY6IHQsIGRpc2FibGVkOiBvLCAuLi5uIH0pO1xufSwgUV8gPSBCMChjSCk7XG4kLmRpdmBcbiAgd2lkdGg6IDUwNHB4O1xuYDtcbmNvbnN0IGxIID0gJC5kaXYoXG4gICh7IHRoZW1lOiB7IGNvbG9yczogZSB9LCAkaXNFbnRpdHk6IHQgfSkgPT4gbzFgXG4gICAgYmFja2dyb3VuZC1jb2xvcjogJHtlLmJhY2tncm91bmRzLmJnUHJpbWFyeX07XG4gICAgbWluLWhlaWdodDogJHt0ID8gXCJhdXRvXCIgOiBcIjMwM3B4XCJ9O1xuICBgXG4pLCBwSCA9ICQuZGl2KCgpID0+IG8xYGApLCBkSCA9ICQuZGl2KFxuICAoeyB0aGVtZTogeyBzcGFjaW5nczogZSB9IH0pID0+IG8xYFxuICAgIG1hcmdpbi10b3A6IDhweDtcbiAgICAuc2Nyb2xsYmFyLWNvbnRhaW5lciB7XG4gICAgICBtYXgtaGVpZ2h0OiAzMDNweDtcbiAgICB9XG5cbiAgICAucHMtLWFjdGl2ZS15IHtcbiAgICAgIHBhZGRpbmctcmlnaHQ6ICR7ZS5zcDh9O1xuICAgIH1cbiAgYFxuKSwgYkggPSAkLmRpdihcbiAgKCkgPT4gbzFgXG4gICAgZGlzcGxheTogZmxleDtcbiAgICBqdXN0aWZ5LWNvbnRlbnQ6IGZsZXgtZW5kO1xuICBgXG4pLCBNSCA9ICQuZGl2KFxuICAoeyB0aGVtZTogeyBjb2xvcnM6IGUgfSB9KSA9PiBvMWBcbiAgIHdpZHRoOiAxMDAlO1xuICBsYWJlbHtcbiAgICBkaXNwbGF5OiBub25lO1xuICB9XG4gIC5pY29uLXN5c3RlbXtcbiAgICAgIHN2Z3tcbiAgICAgICAgd2lkdGg6IDE2cHg7XG4gICAgICAgIGhlaWdodDogMTZweDtcbiAgICAgICAgY29sb3I6ICR7ZS50ZXh0SWNvbi50ZXh0TG93ZW1waGFzaXN9O1xuICAgICAgfVxuICAgIH1cbiAgYFxuKSwgQUggPSAkLmRpdihcbiAgKCkgPT4gbzFgXG4gICAgZGlzcGxheTogZmxleDtcbiAgICBqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWJldHdlZW47XG4gICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgYFxuKSwgaWMgPSAkLmRpdihcbiAgKHsgdGhlbWU6IHsgc3BhY2luZ3M6IGUgfSB9KSA9PiBvMWBcbiAgICBwYWRkaW5nLXRvcDogJHtlLnNwOH07XG4gICAgcGFkZGluZy1ib3R0b206ICR7ZS5zcDh9O1xuICBgXG4pLCB1SCA9ICQuZGl2KCgpID0+IG8xYFxuICAgIHdpZHRoOiAxMDAlO1xuICAgIGhlaWdodDogMzA0cHg7XG4gICAgcG9zaXRpb246IHJlbGF0aXZlO1xuICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcbiAgICAmID4gZGl2IHtcbiAgICAgIG1heC13aWR0aDogMjE1cHg7XG4gICAgICBkaXNwbGF5OiBmbGV4O1xuICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbiAgICAgIGdhcDogNHB4O1xuICAgIH1cbiAgYCksIG9pID0gSTUoe30pO1xuZnVuY3Rpb24gekgoKSB7XG4gIHJldHVybiAvKiBAX19QVVJFX18gKi8gYyh1SCwgeyBjaGlsZHJlbjogLyogQF9fUFVSRV9fICovIGUxKFwiZGl2XCIsIHsgY2hpbGRyZW46IFtcbiAgICAvKiBAX19QVVJFX18gKi8gYyhcbiAgICAgIG5yLFxuICAgICAge1xuICAgICAgICB2YXJpYW50OiBcImhlYWRpbmcteHMtbWVkaXVtXCIsXG4gICAgICAgIHN0eWxlOiB7IGZvbnRXZWlnaHQ6IDUwMCwgdGV4dEFsaWduOiBcImNlbnRlclwiIH0sXG4gICAgICAgIGNoaWxkcmVuOiBcIldlIGNvdWxkbuKAmXQgZmluZCBhbnkgbWF0Y2hlc1wiXG4gICAgICB9XG4gICAgKSxcbiAgICAvKiBAX19QVVJFX18gKi8gYyhcbiAgICAgIG5yLFxuICAgICAge1xuICAgICAgICB2YXJpYW50OiBcImJvZHktc20tcmVndWxhclwiLFxuICAgICAgICBzdHlsZTogeyBmb250V2VpZ2h0OiA0MDAsIHRleHRBbGlnbjogXCJjZW50ZXJcIiB9LFxuICAgICAgICBjaGlsZHJlbjogXCJUaGVyZSBpcyBubyByZXN1bHQgZm9yIHlvdXIgc2VhcmNoLiBUcnkgc2VhcmNoaW5nIGZvciBhIGRpZmZlcmVudCBjbGllbnRcIlxuICAgICAgfVxuICAgIClcbiAgXSB9KSB9KTtcbn1cbmZ1bmN0aW9uIGhIKGUpIHtcbiAgY29uc3Qge1xuICAgIGNoaWxkcmVuOiB0LFxuICAgIGFjdGlvbnNHcm91cDogbyxcbiAgICBnZXRTZWFyY2hWYWx1ZTogbixcbiAgICBoYXNBY3Rpb25Hcm91cDogcixcbiAgICBsb2FkaW5nUHJvZ3Jlc3M6IGlcbiAgfSA9IGUsIGEgPSBBdChvaSksIHMgPSBpID8gaSA9PSAxMDAgOiAhMCwgbCA9IHMgJiYgKCh0ID09IG51bGwgPyB2b2lkIDAgOiB0Lmxlbmd0aCkgPT0gMCB8fCAhdCkgJiYgKGEgPT0gbnVsbCA/IHZvaWQgMCA6IGEuc2VhcmNoVmFsdWUpO1xuICByZXR1cm4gLyogQF9fUFVSRV9fICovIGUxKGxILCB7ICRpc0VudGl0eTogYSA9PSBudWxsID8gdm9pZCAwIDogYS5pc0VuaXR5LCBjaGlsZHJlbjogW1xuICAgIC8qIEBfX1BVUkVfXyAqLyBlMShwSCwgeyBjaGlsZHJlbjogW1xuICAgICAgLyogQF9fUFVSRV9fICovIGMoQUgsIHsgY2hpbGRyZW46IC8qIEBfX1BVUkVfXyAqLyBjKE1ILCB7IGNoaWxkcmVuOiAvKiBAX19QVVJFX18gKi8gYyhcbiAgICAgICAgRzQsXG4gICAgICAgIHtcbiAgICAgICAgICBnZXRWYWx1ZTogbixcbiAgICAgICAgICB2YWx1ZTogYSA9PSBudWxsID8gdm9pZCAwIDogYS5zZWFyY2hWYWx1ZSxcbiAgICAgICAgICBwbGFjZWhvbGRlcjogXCJTZWFyY2hcIlxuICAgICAgICB9XG4gICAgICApIH0pIH0pLFxuICAgICAgIXMgJiYgaSAmJiAvKiBAX19QVVJFX18gKi8gYyhpYywgeyBjaGlsZHJlbjogLyogQF9fUFVSRV9fICovIGMoQzQsIHsgdHlwZTogXCJsaW5lYXJcIiwgcHJvZ3Jlc3M6IGkgfSkgfSlcbiAgICBdIH0pLFxuICAgIGwgPyAvKiBAX19QVVJFX18gKi8gYyh6SCwge30pIDogLyogQF9fUFVSRV9fICovIGMoczAsIHsgY2hpbGRyZW46IHMgJiYgLyogQF9fUFVSRV9fICovIGUxKHMwLCB7IGNoaWxkcmVuOiBbXG4gICAgICB0ICYmIC8qIEBfX1BVUkVfXyAqLyBjKGRILCB7IGNoaWxkcmVuOiAvKiBAX19QVVJFX18gKi8gYyhqNCwgeyBjaGlsZHJlbjogdCB9KSB9KSxcbiAgICAgIHIgJiYgLyogQF9fUFVSRV9fICovIGUxKHMwLCB7IGNoaWxkcmVuOiBbXG4gICAgICAgIC8qIEBfX1BVUkVfXyAqLyBjKGljLCB7IGNoaWxkcmVuOiAvKiBAX19QVVJFX18gKi8gYyhQMiwge30pIH0pLFxuICAgICAgICBvICYmIC8qIEBfX1BVUkVfXyAqLyBjKGJILCB7IGNoaWxkcmVuOiBvIH0pXG4gICAgICBdIH0pXG4gICAgXSB9KSB9KVxuICBdIH0pO1xufVxuY29uc3QgT0ggPSAkLmRpdmBcbiAgZGlzcGxheTogZmxleDtcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgaGVpZ2h0OiAyNHB4O1xuICB3aWR0aDogMTAwJTtcbmAsIHBiID0gJC5wKFxuICAoeyB0aGVtZTogZSB9KSA9PiBvMWBcbiAgICBmb250LWZhbWlseTogJHtlLmZvbnRGYW1pbHkuYmFzZX07XG4gICAgZm9udC1zaXplOiAke2UudHlwb2dyYXBoeS50MTJ9O1xuICAgIGZvbnQtd2VpZ2h0OiAke2UuZm9udFdlaWdodC5saWdodH07XG4gICAgbGluZS1oZWlnaHQ6ICR7ZS5saW5lSGVpZ2h0LmxoMjB9O1xuICAgIGNvbG9yOiAke2UuY29sb3JzLnRleHRJY29uLnRleHRQcmltYXJ5fTtcbiAgICB3b3JkLWJyZWFrOiBicmVhay13b3JkO1xuICAgIG1heC13aWR0aDogMzU3cHg7XG4gICAgcGFkZGluZzogMCA0cHggMCA0cHg7XG4gICAgbWFyZ2luOiAwO1xuICAgIHRyYW5zaXRpb246ICR7ZS50cmFuc2l0aW9ucy5iYXNlfTtcbiAgICB3aGl0ZS1zcGFjZTogbm93cmFwO1xuICAgIG92ZXJmbG93OiBoaWRkZW47XG4gICAgdGV4dC1vdmVyZmxvdzogZWxsaXBzaXM7XG4gIGBcbiksIGZIID0gJC5kaXYoXG4gICh7IHRoZW1lOiB7IGl0ZW1TaXplOiBlLCBjb2xvcnM6IHQsIGJvcmRlclJhZGl1czogbyB9IH0pID0+IG8xYFxuICAgIHdpZHRoOiAke2UueHN9O1xuICAgIGhlaWdodDogJHtlLnhzfTtcbiAgICBvdmVyZmxvdzogaGlkZGVuO1xuICAgIGJvcmRlcjogMXB4IHNvbGlkICR7dC5iYWNrZ3JvdW5kcy53aGl0ZVNtb2tlfTtcbiAgICBib3JkZXItcmFkaXVzOiAke28uY2lyY2xlfTtcbiAgICBib3gtc2l6aW5nOiBib3JkZXItYm94O1xuICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcbiAgICAuaWNvbi1zeXN0ZW17XG4gICAgY29sb3I6JHt0LnRleHRJY29uLnRleHRQcmltYXJ5fTtcbiAgfVxuICAgIHN2ZyB7XG4gICAgICB3aWR0aDogMTAwJTtcbiAgICAgIGJvcmRlci1yYWRpdXM6ICR7by5jaXJjbGV9O1xuICAgIH1cbiAgYFxuKSwgZ0ggPSAkLmRpdihcbiAgKHsgdGhlbWU6IHsgY29sb3JzOiBlIH0gfSkgPT4gbzFgXG4gXG4gIC5pY29uLXN5c3RlbXtcbiAgICBjb2xvcjoke2UudGV4dEljb24udGV4dFByaW1hcnl9O1xuICB9XG4gIGBcbiksIENIID0gJC5pbWdgXG4gIHdpZHRoOiAxMDAlO1xuYCwgbUggPSAkLmRpdihcbiAgKHsgdGhlbWU6IHsgc3BhY2luZ3M6IGUsIGNvbG9yczogdCwgaXRlbVNpemU6IG8sIHRyYW5zaXRpb25zOiBuIH0sICRpc0Zhdm91cml0ZTogciB9KSA9PiBvMWBcbiAgICB0cmFuc2l0aW9uOiAke24uYmFzZX07XG4gICAgd2lkdGg6ICR7by5zbX07XG4gICAgJjpob3ZlciB7XG4gICAgICB0cmFuc2l0aW9uOiAke24uYmFzZX07XG5cbiAgICAgIC5pY29uLXN5c3RlbSB7XG4gICAgICAgIGNvbG9yOiAke3IgPyB0LmJhY2tncm91bmRzLmludGVydHJ1c3RPcmFuZ2UgOiB0LndoaXNwZXJ9O1xuICAgICAgfVxuICAgIH1cbiAgICAuaWNvbi1zeXN0ZW0ge1xuICAgICAgY29sb3I6ICR7ciA/IHQuYmFja2dyb3VuZHMuaW50ZXJ0cnVzdE9yYW5nZSA6IHQud2hpc3Blcn07XG4gICAgfVxuICAgICR7VjN9IHtcbiAgICAgICYsXG4gICAgICAmOmhvdmVyIHtcbiAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogdHJhbnNwYXJlbnQ7XG4gICAgICB9XG5cbiAgICAgIC5pY29uLXN5c3RlbSB7XG4gICAgICAgIGNvbG9yOiAke3IgPyB0LmJhY2tncm91bmRzLmludGVydHJ1c3RPcmFuZ2UgOiB0LndoaXNwZXJ9O1xuICAgICAgICB0cmFuc2l0aW9uOiAke24uYmFzZX07XG4gICAgICB9XG5cbiAgICAgIHN2ZyB7XG4gICAgICAgIHdpZHRoOiAxNnB4O1xuICAgICAgICBtYXJnaW46ICR7ZS5zcDR9O1xuICAgICAgfVxuICAgIH1cbiAgYFxuKSwgTEggPSAkLmRpdihcbiAgKHtcbiAgICB0aGVtZTogeyBjb2xvcnM6IGUsIHNwYWNpbmdzOiB0LCBib3JkZXJSYWRpdXM6IG8sIHRyYW5zaXRpb25zOiBuIH0sXG4gICAgJGlzRm9jdXNlZDogcixcbiAgICAkaXNTZWxlY3RlZDogaVxuICB9KSA9PiBvMWBcbiAgICBkaXNwbGF5OiBmbGV4O1xuICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gICAgcGFkZGluZy1sZWZ0OiAke3Quc3A0fTtcbiAgICBwYWRkaW5nLXJpZ2h0OiAke3Quc3A0fTtcbiAgICB0cmFuc2l0aW9uOiAke24uYmFzZX07XG4gICAgY3Vyc29yOiBwb2ludGVyO1xuICAgIGp1c3RpZnktY29udGVudDogc3BhY2UtYmV0d2VlbjtcbiAgICAmOmhvdmVyIHtcbiAgICAgIGJhY2tncm91bmQtY29sb3I6ICR7ZS5iYWNrZ3JvdW5kcy5iZ0hvdmVyUHJpbWFyeX07XG4gICAgICB0cmFuc2l0aW9uOiAke24uYmFzZX07XG4gICAgfVxuXG4gICAgJHtyICYmIG8xYFxuICAgICAgYmFja2dyb3VuZC1jb2xvcjogJHtlLmJsdWV9O1xuICAgICAgYm9yZGVyOiAxcHggc29saWQgJHtlLmJsdWV9O1xuICAgICAgdHJhbnNpdGlvbjogJHtuLmJhc2V9O1xuXG4gICAgICAke3BifSB7XG4gICAgICAgIGNvbG9yOiAke2Uud2hpdGV9O1xuICAgICAgICB0cmFuc2l0aW9uOiAke24uYmFzZX07XG4gICAgICB9XG5cbiAgICAgICY6aG92ZXIge1xuICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAke2UuYmx1ZX07XG4gICAgICB9XG4gICAgYH1cbiAgICAke2kgJiYgbzFgXG4gICAgICBiYWNrZ3JvdW5kLWNvbG9yOiR7ZS5iYWNrZ3JvdW5kcy5iZ1NlbGVjdGVkfTtcbiAgICAgIGNvbG9yOiR7ZS50ZXh0SWNvbi50ZXh0UHJpbWFyeX07XG4gICAgYH1cbiAgYFxuKTtcbiQuZGl2YFxuICB3aWR0aDogNDU2cHg7XG5gO1xuZnVuY3Rpb24gdkgoZSkge1xuICBjb25zdCB7XG4gICAgb25GYXZvdXJpdGVDbGljazogdCxcbiAgICBpbWdDb21wb25lbnQ6IG8sXG4gICAgaGFzRmF2b3VyaXRlSWNvbjogbixcbiAgICAkaXNGYXZvdXJpdGU6IHIgPSAhMSxcbiAgICBvblJvd0NsaWNrOiBpLFxuICAgICRpc0ZvY3VzZWQ6IGEsXG4gICAgY2xpZW50TmFtZTogcyA9IFwiXCIsXG4gICAgaW1nOiBsLFxuICAgIGNsaWVudENvZGU6IHAsXG4gICAgc2VsZWN0ZWRDbGllbnQ6IGQsXG4gICAgaXNSZWNlbnQ6IGIsXG4gICAgZGF0YTogTVxuICB9ID0gZSwgeyBpc0VuaXR5OiB1IH0gPSBBdChvaSksIEEgPSB1ID8gTSA9PSBudWxsID8gdm9pZCAwIDogTS5lbnRpdHlOYW1lIDogcywgeiA9IHUgPyBNID09IG51bGwgPyB2b2lkIDAgOiBNLmVudGl0eUNvZGUgOiBwLCBmID0gXzEoXG4gICAgKGgpID0+IHtcbiAgICAgIGggJiYgaC5zdG9wUHJvcGFnYXRpb24gJiYgaC5zdG9wUHJvcGFnYXRpb24oKSwgdCAmJiB0KHtcbiAgICAgICAgY2xpZW50Q29kZTogcCxcbiAgICAgICAgY2xpZW50TmFtZTogc1xuICAgICAgfSk7XG4gICAgfSxcbiAgICBbdCwgcCwgc11cbiAgKSwgTyA9ICgpID0+IGkgJiYgaSh7XG4gICAgW3UgPyBcImVudGl0eUNvZGVcIiA6IFwiY2xpZW50Q29kZVwiXTogeixcbiAgICBbdSA/IFwiZW50aXR5TmFtZVwiIDogXCJjbGllbnROYW1lXCJdOiBBXG4gIH0pIHx8IG51bGw7XG4gIHJldHVybiAvKiBAX19QVVJFX18gKi8gZTEoXG4gICAgTEgsXG4gICAge1xuICAgICAgJGlzRm9jdXNlZDogYSxcbiAgICAgICRpc0Zhdm91cml0ZTogcixcbiAgICAgICRpc1NlbGVjdGVkOiBkICE9IG51bGwgJiYgZC5jbGllbnRDb2RlID8gKGQgPT0gbnVsbCA/IHZvaWQgMCA6IGQuY2xpZW50Q29kZSkgPT0gcCA6ICExLFxuICAgICAgY2hpbGRyZW46IFtcbiAgICAgICAgLyogQF9fUFVSRV9fICovIGUxKE9ILCB7IG9uQ2xpY2s6IE8sIGNoaWxkcmVuOiBbXG4gICAgICAgICAgYiAmJiAvKiBAX19QVVJFX18gKi8gYyhnSCwgeyBjaGlsZHJlbjogLyogQF9fUFVSRV9fICovIGMoWjEsIHsgbmFtZTogXCJSZWNlbnRcIiwgc2l6ZTogXCJzbVwiLCBjb2xvcjogXCJibGFja1wiIH0pIH0pLFxuICAgICAgICAgIChsIHx8IG8pICYmIC8qIEBfX1BVUkVfXyAqLyBlMShmSCwgeyBjaGlsZHJlbjogW1xuICAgICAgICAgICAgbCAmJiAvKiBAX19QVVJFX18gKi8gYyhDSCwgeyBzcmM6IGwgfSksXG4gICAgICAgICAgICAhbCAmJiBvICYmIC8qIEBfX1BVUkVfXyAqLyBjKHVyLCB7IHNpemU6IFwiMTJweFwiLCBuYW1lOiBvIH0pXG4gICAgICAgICAgXSB9KSxcbiAgICAgICAgICAvKiBAX19QVVJFX18gKi8gYyhwYiwgeyBjaGlsZHJlbjogQSB9KVxuICAgICAgICBdIH0pLFxuICAgICAgICBuICYmIC8qIEBfX1BVUkVfXyAqLyBjKG1ILCB7ICRpc0Zhdm91cml0ZTogciwgY2hpbGRyZW46IC8qIEBfX1BVUkVfXyAqLyBjKFwiZGl2XCIsIHsgb25DbGljazogZiwgY2hpbGRyZW46IC8qIEBfX1BVUkVfXyAqLyBjKFoxLCB7IG5hbWU6IFwiU3RhclNvbGlkXCIsIHNpemU6IFwic21cIiB9KSB9KSB9KVxuICAgICAgXVxuICAgIH1cbiAgKTtcbn1cbmNvbnN0IHFIID0gJC5kaXYoXG4gICh7IHRoZW1lOiB7IHNwYWNpbmdzOiBlIH0gfSkgPT4gbzFgXG4gICAgJjpub3QoOmxhc3Qtb2YtdHlwZSkge1xuICAgICAgbWFyZ2luLWJvdHRvbTogJHtlLnNwNH07XG4gICAgfVxuICBgXG4pLCB5SCA9ICQucChcbiAgKHsgdGhlbWU6IGUgfSkgPT4gbzFgXG4gICAgZm9udC1mYW1pbHk6ICR7ZS5mb250RmFtaWx5LmJhc2V9O1xuICAgIGZvbnQtc2l6ZTogJHtlLnR5cG9ncmFwaHkudDEyfTtcbiAgICBsaW5lLWhlaWdodDogJHtlLmxpbmVIZWlnaHQubGgyMH07XG4gICAgY29sb3I6JHtlLmNvbG9ycy50ZXh0SWNvbi50ZXh0TG93ZW1waGFzaXN9O1xuICAgIHBhZGRpbmc6IDAgJHtlLnNwYWNpbmdzLnNwOH07XG4gICAgbWFyZ2luOiAwO1xuICAgIGhlaWdodDogMjRweDtcblxuICBgXG4pLCB3SCA9ICQudWwoXG4gICh7IHRoZW1lOiB7IG1peGluczogZSwgY29sb3JzOiB0IH0gfSkgPT4gbzFgXG4gICAgJHtlLmxpc3RSZXNldH07XG5cbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAke3QuYmFja2dyb3VuZHMuYmdQcmltYXJ5fTtcbiAgYFxuKSwgeEggPSAkLmxpYFxuICAmICsgJiB7XG4gICAgbWFyZ2luLXRvcDogJHsoeyB0aGVtZTogeyBzcGFjaW5nczogZSB9IH0pID0+IGUuc3A4fTtcbiAgfVxuYDtcbiQuZGl2YFxuICB3aWR0aDogNTA0cHg7XG5gO1xuZnVuY3Rpb24gV0goZSkge1xuICBjb25zdCB7XG4gICAgdGl0bGU6IHQsXG4gICAgY2xpZW50czogbyxcbiAgICBvblJvd0NsaWNrOiBuLFxuICAgIG9uRmF2b3VyaXRlQ2xpY2s6IHIsXG4gICAgc2VsZWN0ZWRDbGllbnQ6IGksXG4gICAgaXNSZWNlbnQ6IGFcbiAgfSA9IGUsIHMgPSBfMShcbiAgICAoKSA9PiBvLm1hcChcbiAgICAgIChsLCBwKSA9PiAvKiBAX19QVVJFX18gKi8gYyh4SCwgeyBjaGlsZHJlbjogLyogQF9fUFVSRV9fICovIGMoXG4gICAgICAgIHZILFxuICAgICAgICB7XG4gICAgICAgICAgb25Sb3dDbGljazogbixcbiAgICAgICAgICBvbkZhdm91cml0ZUNsaWNrOiByLFxuICAgICAgICAgIHNlbGVjdGVkQ2xpZW50OiBpLFxuICAgICAgICAgIC4uLmwsXG4gICAgICAgICAgaXNSZWNlbnQ6IGEsXG4gICAgICAgICAgZGF0YToge1xuICAgICAgICAgICAgLi4ubFxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgKSB9LCBwKVxuICAgICksXG4gICAgW28sIG4sIHJdXG4gICk7XG4gIHJldHVybiAvKiBAX19QVVJFX18gKi8gZTEocUgsIHsgY2hpbGRyZW46IFtcbiAgICAvKiBAX19QVVJFX18gKi8gYyh5SCwgeyBjaGlsZHJlbjogdCB9KSxcbiAgICAvKiBAX19QVVJFX18gKi8gYyh3SCwgeyBjaGlsZHJlbjogcygpIH0pXG4gIF0gfSk7XG59XG4kLmRpdmBcbiAgd2lkdGg6IDUwNHB4O1xuYDtcbmNvbnN0IFJIID0gJC5kaXZgXG4gIGRpc3BsYXk6IGZsZXg7XG4gIGZsZXgtZGlyZWN0aW9uOiByb3c7XG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gIGdhcDokeyhlKSA9PiBlLnRoZW1lLnNwYWNpbmdzLnNwOH1cbmA7XG5mdW5jdGlvbiBCSCgpIHtcbiAgY29uc3QgZSA9IEF0KG9pKTtcbiAgcmV0dXJuIC8qIEBfX1BVUkVfXyAqLyBlMShSSCwgeyBjaGlsZHJlbjogW1xuICAgIC8qIEBfX1BVUkVfXyAqLyBjKEIyLCB7IGJ1dHRvblR5cGU6IFwibGlua1wiLCBzaXplOiBcInNtXCIsIG9uQ2xpY2s6IGUgPT0gbnVsbCA/IHZvaWQgMCA6IGUub25DbGVhckZpbHRlciwgY2hpbGRyZW46IFwiQ2xlYXIgZmlsdGVyXCIgfSksXG4gICAgLyogQF9fUFVSRV9fICovIGMoQjIsIHsgc2l6ZTogXCJzbVwiLCBvbkNsaWNrOiBlID09IG51bGwgPyB2b2lkIDAgOiBlLm9uQ2xpZW50U3VibWl0LCBjaGlsZHJlbjogXCJTZWxlY3QgQ2xpZW50XCIgfSlcbiAgXSB9KTtcbn1cbmZ1bmN0aW9uIGRiKGUpIHtcbiAgY29uc3QgeyBjbGllbnRzRGF0YTogdCwgb25Sb3dDbGljazogbywgb25GYXZvdXJpdGVDbGljazogbiwgb25TdWJtaXQ6IHIsIGdldFNlYXJjaFZhbHVlOiBpLCBkZWZhdWx0U2VhcmNoVmFsdWU6IGEgPSBcIlwiLCAuLi5zIH0gPSBlLCBbbCwgcF0gPSBUMShcbiAgICAoZSA9PSBudWxsID8gdm9pZCAwIDogZS5zZWxlY3RlZENsaWVudCkgPz8gbnVsbFxuICApLCBbZCwgYl0gPSBUMShhKSwgTSA9IF8xKFxuICAgIChPKSA9PiB7XG4gICAgICBvICYmIG8oTyksIHAoTyk7XG4gICAgfSxcbiAgICBbbF1cbiAgKSwgdSA9IChPKSA9PiB7XG4gICAgYihPKSwgaSAmJiBpKE8pO1xuICB9LCBBID0gXzEoKCkgPT4ge1xuICAgIHAobnVsbCksIG8gJiYgbyhudWxsKSwgdShcIlwiKSwgciAmJiByKG51bGwpO1xuICB9LCBbXSksIHogPSBfMSgoKSA9PiB7XG4gICAgciAmJiByKGwpO1xuICB9LCBbbCwgZF0pLCBmID0gXzEoXG4gICAgKCkgPT4gdC5tYXAoXG4gICAgICAoeyBncm91cDogTywgZGF0YTogaCwgaXNSZWNlbnQ6IGcgfSwgdikgPT4gLyogQF9fUFVSRV9fICovIGMoXG4gICAgICAgIFdILFxuICAgICAgICB7XG4gICAgICAgICAgdGl0bGU6IE8sXG4gICAgICAgICAgY2xpZW50czogaCxcbiAgICAgICAgICBpc1JlY2VudDogZyxcbiAgICAgICAgICBvbkZhdm91cml0ZUNsaWNrOiBuLFxuICAgICAgICAgIG9uUm93Q2xpY2s6IE0sXG4gICAgICAgICAgc2VsZWN0ZWRDbGllbnQ6IGwsXG4gICAgICAgICAgaXNMYXN0R3JvdXA6IHYgPT0gKHQgPT0gbnVsbCA/IHZvaWQgMCA6IHQubGVuZ3RoKSAtIDFcbiAgICAgICAgfSxcbiAgICAgICAgT1xuICAgICAgKVxuICAgICksXG4gICAgW3QsIG8sIG4sIGxdXG4gICk7XG4gIHJldHVybiAvKiBAX19QVVJFX18gKi8gYyhcbiAgICBvaS5Qcm92aWRlcixcbiAgICB7XG4gICAgICB2YWx1ZToge1xuICAgICAgICBvblNlbGVjdENsaWVudDogTSxcbiAgICAgICAgb25DbGVhckZpbHRlcjogQSxcbiAgICAgICAgc2VsZWN0ZWRDbGllbnQ6IGwsXG4gICAgICAgIG9uQ2xpZW50U3VibWl0OiB6LFxuICAgICAgICBzZWFyY2hWYWx1ZTogZCxcbiAgICAgICAgaXNFbml0eTogZS5pc0VuaXR5XG4gICAgICB9LFxuICAgICAgY2hpbGRyZW46IC8qIEBfX1BVUkVfXyAqLyBjKGhILCB7IC4uLnMsIGdldFNlYXJjaFZhbHVlOiB1LCBhY3Rpb25zR3JvdXA6IC8qIEBfX1BVUkVfXyAqLyBjKEJILCB7fSksIGNoaWxkcmVuOiBmKCkgfSlcbiAgICB9XG4gICk7XG59XG5jb25zdCBTSCA9IHV0YFxuICBmcm9tIHtcbiAgICBvcGFjaXR5OiAwO1xuICB9XG4gIHRvIHtcbiAgICBvcGFjaXR5OiAxO1xuICB9XG5gO1xuJC5kaXZgXG4gIHdpZHRoOiAxMDAlO1xuYDtcbmNvbnN0IEVIID0gJC5kaXZgXG4gIGRpc3BsYXk6IGZsZXg7XG4gIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG4gIG1hcmdpbi1ib3R0b206IDE2cHg7XG5gLCBiYiA9ICQuZGl2KFxuICAoeyB0aGVtZTogeyBjb2xvcnM6IGUgfSwgJGlzRGlzYWJsZWQ6IHQgfSkgPT4gbzFgXG4gICAgZGlzcGxheTogZmxleDtcbiAgICBhbGlnbi1pdGVtczogY2VudGVyO1xuICAgIGp1c3RpZnktY29udGVudDogc3BhY2UtYmV0d2VlbjtcbiAgICB1c2VyLXNlbGVjdDogbm9uZTtcbiAgICAke3QgJiYgbzFgXG4gICAgICBjb2xvcjogJHtlLnZlcnlMaWdodEdyZXl9O1xuICAgICAgY3Vyc29yOiBkZWZhdWx0O1xuICAgICAgcG9pbnRlci1ldmVudHM6IG5vbmU7XG4gICAgYH1cbiAgYFxuKSwgVTYgPSAkLmRpdihcbiAgKHsgdGhlbWU6IHsgbWl4aW5zOiBlLCBjb2xvcnM6IHQsIGZvbnRXZWlnaHQ6IG8sIGxpbmVIZWlnaHQ6IG4sIHR5cG9ncmFwaHk6IHIgfSB9KSA9PiBvMWBcbiAgICAke2UuZWxsaXBzaXN9O1xuICAgIGZvbnQtc2l6ZTogJHtyLnQxMH07XG4gICAgZm9udC13ZWlnaHQ6ICR7by5saWdodH07XG4gICAgbGluZS1oZWlnaHQ6ICR7bi5saDIwfTtcbiAgICBjb2xvcjogJHt0LnRleHRJY29uLnRleHRIaWdoZW1waGFzaXN9O1xuICBgXG4pLCBhYyA9ICQuZGl2KFxuICAoeyB0aGVtZTogeyBjdWJpY0JlemllcjogZSB9IH0pID0+IG8xYFxuICAgIHRyYW5zaXRpb246IGhlaWdodCAwLjNzICR7ZS5iYXNlfTtcbiAgICBib3gtc2l6aW5nOiBib3JkZXItYm94O1xuICAgIGFuaW1hdGlvbjogJHtTSH0gMC41cyAke2UuYmFzZX0gZm9yd2FyZHM7XG4gICAgd2lkdGg6IDEwMCU7XG4gIGBcbiksIGtIID0gJC5kaXYoXG4gICh7IHRoZW1lOiB7IGNvbG9yczogZSwgY3ViaWNCZXppZXI6IHQsIHNwYWNpbmdzOiBvIH0sICRpc0NvbGxhcHNlZDogbiB9KSA9PiBvMWBcbiAgICB0cmFuc2Zvcm0tb3JpZ2luOiBjZW50ZXI7XG4gICAgdHJhbnNmb3JtOiByb3RhdGUoJHtuID8gXCIxODBkZWdcIiA6IFwiMFwifSk7XG4gICAgdHJhbnNpdGlvbjogdHJhbnNmb3JtIDAuM3MgJHt0LmJhc2V9O1xuICAgIGN1cnNvcjogcG9pbnRlcjtcbiAgICBjb2xvcjoke2UudGV4dEljb24udGV4dFByaW1hcnl9O1xuICAgIHBhZGRpbmc6ICR7by5zcDR9O1xuICAgICR7IW4gJiYgbzFgXG4gICAgICBwYWRkaW5nOiAke28uc3A0fTtcbiAgICAgIGJvcmRlcjogMXB4IHNvbGlkICR7ZS5maWx0ZXJib3hCb3JkZXIuZmlsdGVyYm94QnV0dG9uQm9yZGVyRGVmYXVsdH07XG4gICAgICBib3JkZXItcmFkaXVzOiA1MCU7XG4gICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAke2UuZmlsdGVyYm94QmFja2dyb3VuZC5maWx0ZXJib3hCdXR0b25CZ307XG4gICAgYH1cbiAgYFxuKSwgaDUgPSAoe1xuICB0aXRsZTogZSxcbiAgaXNPcGVuZWQ6IHQgPSAhMSxcbiAgaXNEaXNhYmxlZDogbyxcbiAgY2hpbGRyZW46IG4sXG4gIG9uRXhwYW5kQ29sbGFwc2VDbGljazogcixcbiAgb3BlbmVkU3RhdGU6IGksXG4gIGV4cGFuZFdpdGhUaXRsZTogYSxcbiAgaXNFeHBhbmRFbmFibGU6IHMsXG4gIC4uLmxcbn0pID0+IHtcbiAgY29uc3QgcCA9IHN2KCksIFtkLCBiXSA9IGlvKCF0KSwgW00sIHVdID0gVDEoMCksIEEgPSBuMChudWxsKTtcbiAgUDEoKCkgPT4ge1xuICAgIHAgfHwgeigpO1xuICB9LCBbdF0pLCBQMSgoKSA9PiB7XG4gICAgQSAmJiBBLmN1cnJlbnQgJiYgKGQgPyBBLmN1cnJlbnQuc3R5bGUub3ZlcmZsb3cgPSBcImhpZGRlblwiIDogQSAmJiBBLmN1cnJlbnQgJiYgKEEuY3VycmVudC5zdHlsZS5vdmVyZmxvdyA9IFwidmlzaWJsZVwiKSk7XG4gIH0sIFtkXSk7XG4gIGNvbnN0IHogPSBvID8gKCkgPT4gbnVsbCA6IGIsIGYgPSAoKSA9PiB7XG4gICAgeigpLCByICYmIHIoIWQpO1xuICB9O1xuICByZXR1cm4gUDEoKCkgPT4ge1xuICAgIGkgJiYgaShkKTtcbiAgfSwgW2RdKSwgUDEoKCkgPT4ge1xuICAgIEEgJiYgQS5jdXJyZW50ICYmIHUoQS5jdXJyZW50LnNjcm9sbEhlaWdodCk7XG4gIH0sIFtkLCBNXSksIC8qIEBfX1BVUkVfXyAqLyBlMShFSCwgeyAuLi5sLCBjbGFzc05hbWU6IFwiY29sbGFwc2Utd3JhcHBlclwiLCBjaGlsZHJlbjogW1xuICAgIC8qIEBfX1BVUkVfXyAqLyBlMShiYiwgeyAkaXNEaXNhYmxlZDogbywgY2hpbGRyZW46IFtcbiAgICAgIGQgfHwgYSA/IC8qIEBfX1BVUkVfXyAqLyBjKFU2LCB7IGNoaWxkcmVuOiBlIH0pIDogIWEgJiYgLyogQF9fUFVSRV9fICovIGMoXG4gICAgICAgIGFjLFxuICAgICAgICB7XG4gICAgICAgICAgcmVmOiBBLFxuICAgICAgICAgIGNoaWxkcmVuOiBuXG4gICAgICAgIH1cbiAgICAgICksXG4gICAgICBzIHx8IHMgPT0gbnVsbCA/IC8qIEBfX1BVUkVfXyAqLyBjKGtILCB7ICRpc0NvbGxhcHNlZDogZCwgb25DbGljazogZiwgY2hpbGRyZW46IC8qIEBfX1BVUkVfXyAqLyBjKFoxLCB7IG5hbWU6IFwiQ2hldnJvbkRvd25Ecm9wZG93blwiLCBzaXplOiBcInh4eHNcIiB9KSB9KSA6IG51bGxcbiAgICBdIH0pLFxuICAgIGEgJiYgLyogQF9fUFVSRV9fICovIGMoXG4gICAgICBhYyxcbiAgICAgIHtcbiAgICAgICAgcmVmOiBBLFxuICAgICAgICBzdHlsZToge1xuICAgICAgICAgIGhlaWdodDogZCA/IDAgOiBNXG4gICAgICAgIH0sXG4gICAgICAgIGNoaWxkcmVuOiBuXG4gICAgICB9XG4gICAgKVxuICBdIH0pO1xufSwgTkggPSAkLmZvcm0oXG4gICh7IHRoZW1lOiB7IGJvcmRlclJhZGl1czogZSwgY29sb3JzOiB0LCB0eXBvZ3JhcGh5OiBvIH0gfSkgPT4gbzFgXG4gICAgLyogd2lkdGg6IDUxMHB4O1xuICAgIGhlaWdodDogMjAwcHg7ICovXG4gICAgLyogcGFkZGluZzogJHtvLnQxMH07ICovXG4gICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbiAgICBkaXNwbGF5OiBmbGV4O1xuICAgIC8qIGFsaWduLWl0ZW1zOiBmbGV4LXN0YXJ0O1xuICAgIGp1c3RpZnktY29udGVudDogY2VudGVyO1xuICAgIGJvcmRlci1yYWRpdXM6ICR7ZS5iYXNlfTtcbiAgICBiYWNrZ3JvdW5kOiAke3QuYmFja2dyb3VuZHMuYmdQcmltYXJ5fTsgKi9cbiAgYFxuKTtcbiQuZGl2YFxuICB3aWR0aDogNTE4cHg7XG5gO1xuY29uc3QgVEggPSAkLmRpdihcbiAgKHsgdGhlbWU6IHsgY29sb3JzOiBlIH0sICRhY2NvcmRpb25FeHBhbmRlZDogdCwgJGlzQWNjb3JkaW9uRW5hYmxlZDogbyB9KSA9PiBvMWBcbiAgICAke3QgJiYgbzFgXG4gICAgICAuaWNvbi1zeXN0ZW0ge1xuICAgICAgICBjb2xvcjogJHtlLnRleHRJY29uLnRleHRTZWNvbmRhcnl9O1xuICAgICAgfVxuICAgIGB9XG4gICAgJHtvICYmIG8xYFxuICAgICAgLmljb24tc3lzdGVtIHtcbiAgICAgICAgY29sb3I6ICR7ZS50ZXh0SWNvbi50ZXh0UHJpbWFyeX07XG4gICAgICB9XG4gICAgYH1cbiAgYFxuKSwgSUggPSAkLnRleHRhcmVhKFxuICAoeyB0aGVtZTogeyBib3JkZXJSYWRpdXM6IGUsIGNvbG9yczogdCwgdHlwb2dyYXBoeTogbyB9IH0pID0+IG8xYFxuICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgcGFkZGluZzogJHtvLnQxMH07XG4gICAgbWluLWhlaWdodDogMjAwcHg7XG4gICAgYm9yZGVyLXJhZGl1czogJHtlLmJhc2V9O1xuICAgIGJvcmRlcjogMXB4IHNvbGlkICR7dC5ib3JkZXIuYm9yZGVyVGVydGlhcnl9O1xuICAgIG91dGxpbmU6IG5vbmU7XG4gICAgYmFja2dyb3VuZDogJHt0LmJhY2tncm91bmRzLmJnUHJpbWFyeX07XG4gICAgY29sb3I6ICR7dC50ZXh0SWNvbi50ZXh0TG93ZW1waGFzaXN9O1xuICBgXG4pLCBESCA9ICQuZGl2KFxuICAoeyB0aGVtZTogeyBzcGFjaW5nczogZSB9IH0pID0+IG8xYFxuICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgZ2FwOiAke2Uuc3A0fTtcbiAgICB3aWR0aDogZml0LWNvbnRlbnQ7XG4gIGBcbiksIEhIID0gJC5kaXYoXG4gICh7IHRoZW1lOiB7IGxpbmVIZWlnaHQ6IGUsIGNvbG9yczogdCB9IH0pID0+IG8xYFxuICAgIHdpZHRoOiAxMDAlO1xuICAgIGhlaWdodDogJHtlLmxoMjB9O1xuICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gICAgY29sb3I6ICR7dC50ZXh0SWNvbi50ZXh0UHJpbWFyeX07XG4gIGBcbiksIFZIID0gJC5kaXYoXG4gICh7XG4gICAgdGhlbWU6IHsgbGluZUhlaWdodDogZSwgY29sb3JzOiB0LCB0eXBvZ3JhcGh5OiBvLCBmb250V2VpZ2h0OiBuLCBmb250RmFtaWx5OiByIH1cbiAgfSkgPT4gbzFgXG4gICAgY29sb3I6ICR7dC50ZXh0SWNvbi50ZXh0TG93ZW1waGFzaXN9O1xuICAgIGZvbnQtZmVhdHVyZS1zZXR0aW5nczogJ2NsaWcnIG9mZiwgJ2xpZ2EnIG9mZjtcblxuICAgIC8qIFhTIC0gVWJ1bnR1IFJlZ3VsYXIgKi9cbiAgICBmb250LWZhbWlseTogJHtyLmJhc2V9O1xuICAgIGZvbnQtc2l6ZTogJHtvLnQxMn07XG4gICAgZm9udC1zdHlsZTogbm9ybWFsO1xuICAgIGZvbnQtd2VpZ2h0OiAke24ucmVndWxhcn07XG4gICAgbGluZS1oZWlnaHQ6ICR7ZS5saDIwfTsgLyogMTY2LjY2NyUgKi9cbiAgYFxuKSwgUEggPSAkLmRpdihcbiAgKCkgPT4gbzFgXG4gICAgZGlzcGxheTogZmxleDtcbiAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuICAgIC8qIGp1c3RpZnktY29udGVudDogZmxleC1zdGFydDtcbiAgICBhbGlnbi1pdGVtczogY2VudGVyOyAqL1xuICAgIC8qIGhlaWdodDogMTAwdmg7ICovXG4gIGBcbiksIEZIID0gJC5kaXYoXG4gICh7XG4gICAgdGhlbWU6IHsgbGluZUhlaWdodDogZSwgY29sb3JzOiB0LCB0eXBvZ3JhcGh5OiBvLCBmb250V2VpZ2h0OiBuLCBmb250RmFtaWx5OiByIH1cbiAgfSkgPT4gbzFgXG4gICAgY29sb3I6IHZhcigtLWNvbG9yLWdyZXlzY2FsZXMtZ3JleS00MDAsICNhNmE2YWIpO1xuICAgIGZvbnQtZmVhdHVyZS1zZXR0aW5nczogJ2NsaWcnIG9mZiwgJ2xpZ2EnIG9mZjtcblxuICAgIC8qIEhlYWRpbmcvU21hbGwgLSBNZWRpdW0gKi9cbiAgICBmb250LWZhbWlseTogJHtyLmJhc2V9O1xuICAgIGZvbnQtc2l6ZTogJHtvLnQxNH07XG4gICAgZm9udC1zdHlsZTogbm9ybWFsO1xuICAgIGZvbnQtd2VpZ2h0OiAke24ubWVkaXVtfTtcbiAgICBsaW5lLWhlaWdodDogJHtlLmxoMjB9OyAvKiAxNDIuODU3JSAqL1xuICBgXG4pLCBYSCA9ICQuc3BhbihcbiAgKHtcbiAgICB0aGVtZTogeyBsaW5lSGVpZ2h0OiBlLCBjb2xvcnM6IHQsIHR5cG9ncmFwaHk6IG8sIGZvbnRXZWlnaHQ6IG4gfSxcbiAgICAkaXNBY2NvcmRpb25FbmFibGVkOiByXG4gIH0pID0+IG8xYFxuICAgIGZvbnQtZmVhdHVyZS1zZXR0aW5nczogJ2NsaWcnIG9mZiwgJ2xpZ2EnIG9mZjtcbiAgICB3aWR0aDogQXV0bztcbiAgICAvKiBIZWFkaW5nL1NtYWxsIC0gTWVkaXVtICovXG4gICAgZm9udC1mYW1pbHk6ICdVYnVudHUnO1xuICAgIGZvbnQtc2l6ZTogJHtvLnQxNH07XG4gICAgZm9udC1zdHlsZTogbm9ybWFsO1xuICAgIGZvbnQtd2VpZ2h0OiAke24ubWVkaXVtfTtcbiAgICBsaW5lLWhlaWdodDogJHtlLmxoMjB9OyAvKiAxNDIuODU3JSAqL1xuICAgIGNvbG9yOiAke3IgPyB0LnRleHRJY29uLnRleHRQcmltYXJ5IDogdC50ZXh0SWNvbi50ZXh0RGlzYWJsZWRPbmJnfTtcbiAgICBmb250LWZlYXR1cmUtc2V0dGluZ3M6ICdjbGlnJyBvZmYsICdsaWdhJyBvZmY7XG4gICAgJi5hY3RpdmUge1xuICAgICAgY29sb3I6ICR7dC50ZXh0SWNvbi50ZXh0U2Vjb25kYXJ5fTtcbiAgICB9XG4gIGBcbiksIFVIID0gJC5kaXYoXG4gICh7IHRoZW1lOiB7IGNvbG9yczogZSB9IH0pID0+IG8xYFxuICAgIC8qIHdpZHRoOiA1MTBweDsgICovXG4gIGBcbik7XG4kLmRpdmBcbiAgbWFyZ2luLXJpZ2h0OiAtNnB4O1xuICBtYXJnaW4tdG9wOiAtMTFweDtcbmA7XG5jb25zdCBZSCA9ICQuZGl2KFxuICAoeyB0aGVtZTogeyBjb2xvcnM6IGUgfSB9KSA9PiBvMWBcbiAgICAmOmhvdmVyIHtcbiAgICAgIGNvbG9yOiAke2UudGV4dEljb24udGV4dFNlY29uZGFyeX07XG4gICAgfVxuICAgICYuYWN0aXZlIHtcbiAgICAgIGNvbG9yOiAke2UudGV4dEljb24udGV4dFNlY29uZGFyeX07XG4gICAgfVxuICBgXG4pLCBHSCA9ICQuZGl2KFxuICAoeyB0aGVtZTogeyBzcGFjaW5nczogZSwgY29sb3JzOiB0IH0sICRpc0FjY29yZGlvbkVuYWJsZWQ6IG8gfSkgPT4gbzFgXG4gICAgY29sb3I6ICR7byA/IHQudGV4dEljb24udGV4dFByaW1hcnkgOiB0LnRleHRJY29uLnRleHREaXNhYmxlZE9uYmd9O1xuICAgICR7VjJ9IHtcbiAgICAgIGJhY2tncm91bmQtY29sb3I6ICR7byA/IFwiXCIgOiB0LnRleHRJY29uLnRleHREaXNhYmxlZE9uYmd9O1xuICAgIH1cbiAgICBkaXNwbGF5OiBmbGV4O1xuICAgIHBhZGRpbmc6IDVweCAke2Uuc3A0fTtcbiAgICBhbGlnbi1pdGVtczogY2VudGVyO1xuICAgIGdhcDogJHtlLnNwOH07XG4gICAgJHshbyAmJiBvMWBcbiAgICAgICR7Rkh9XG4gICAgYH1cblxuICAgIGN1cnNvcjogcG9pbnRlcjtcbiAgICBmb250LXdlaWdodDogYm9sZDtcblxuICAgICY6aG92ZXIge1xuICAgICAgJHtvICYmIG8xYFxuICAgICAgICBjb2xvcjogJHt0LnRleHRJY29uLnRleHRTZWNvbmRhcnl9O1xuICAgICAgYH1cblxuICAgICAgPmRpdiAuaWNvbi1zeXN0ZW0ge1xuICAgICAgICAke28gJiYgbzFgXG4gICAgICAgICAgY29sb3I6ICR7dC50ZXh0SWNvbi50ZXh0U2Vjb25kYXJ5fTtcbiAgICAgICAgYH1cbiAgICAgIH1cblxuICAgICAgPiBzcGFuIHtcbiAgICAgICAgJHtvICYmIG8xYFxuICAgICAgICAgIGNvbG9yOiAke3QudGV4dEljb24udGV4dFNlY29uZGFyeX07XG4gICAgICAgIGB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgJi5hY3RpdmUge1xuICAgICAgJHtvICYmIG8xYFxuICAgICAgICBjb2xvcjogJHt0LnRleHRJY29uLnRleHRTZWNvbmRhcnl9O1xuICAgICAgYH1cbiAgICB9XG4gIGBcbiksIFFIID0gJC5kaXYoXG4gICh7IHRoZW1lOiB7IGNvbG9yczogZSB9LCAkYWNjb3JkaW9uRXhwYW5kZWQ6IHQsICRzaG93U2Nyb2xsYmFyOiBvIH0pID0+IG8xYFxuICAgIG1heC1oZWlnaHQ6ICR7dCA/IG8gPyBcIjIwNHB4XCIgOiBcImF1dG9cIiA6IFwiMFwifTtcbiAgICAvKiBtYXgtd2lkdGg6IDUxMHB4OyAqL1xuICAgIHRyYW5zaXRpb246IG1heC1oZWlnaHQgMC4zcyBlYXNlLW91dDtcbiAgICBtYXJnaW4tdG9wOiAxMHB4O1xuICAgIG92ZXJmbG93LXk6ICR7byA/IFwiYXV0b1wiIDogXCJcIn07XG4gICAgLyogcmVtb3ZlIHNjcm9sbGJhciBhcnJvdyAqL1xuICAgIHNjcm9sbGJhci13aWR0aDogdGhpbjtcbiAgICBzY3JvbGxiYXItY29sb3I6ICR7ZS5zY3JvbGwuc2Nyb2xsQmdEZWZhdWx0fSB0cmFuc3BhcmVudDtcblxuICAgICY6Oi13ZWJraXQtc2Nyb2xsYmFyIHtcbiAgICAgIHdpZHRoOiA0cHg7XG4gICAgfVxuXG4gICAgJjo6LXdlYmtpdC1zY3JvbGxiYXItdGh1bWIge1xuICAgICAgYmFja2dyb3VuZC1jb2xvcjogI2NjY2NjYztcbiAgICAgIGJvcmRlci1yYWRpdXM6IDVweDtcbiAgICB9XG5cbiAgICAmOjotd2Via2l0LXNjcm9sbGJhci10cmFjayB7XG4gICAgICBiYWNrZ3JvdW5kLWNvbG9yOiB0cmFuc3BhcmVudDtcbiAgICB9XG4gIGBcbiksIFpIID0gJC5kaXYoXG4gICh7IHRoZW1lOiB7IGxpbmVIZWlnaHQ6IGUsIGNvbG9yczogdCB9IH0pID0+IG8xYFxuICAgIGRpc3BsYXk6IGZsZXg7XG5cbiAgICBhbGlnbi1pdGVtczogY2VudGVyO1xuXG4gICAgZm9udC13ZWlnaHQ6IGJvbGQ7XG5cbiAgICBoZWlnaHQ6ICR7ZS5saDE4fTtcbiAgICBwYWRkaW5nLWxlZnQ6IDRweDtcbiAgICB3aWR0aDogYXV0bztcbiAgICAuaWNvbi1zeXN0ZW0ge1xuICAgICAgY29sb3I6ICR7dC50ZXh0SWNvbi50ZXh0UHJpbWFyeX07XG4gICAgfVxuICBgXG4pLCBqSCA9ICQuaHIoXG4gICh7IHRoZW1lOiB7IGNvbG9yczogZSB9IH0pID0+IG8xYFxuICAgIHdpZHRoOiAxMThweDtcbiAgICBtYXJnaW4tdG9wOiAwcHg7XG4gICAgbWFyZ2luLWJvdHRvbTogNXB4O1xuICAgIGJvcmRlcjogbm9uZTtcbiAgICBib3JkZXItdG9wOiAycHggc29saWQgJHtlLmJvcmRlci5ib3JkZXJTZWNvbmRhcnl9O1xuICAgIG1hcmdpbi1sZWZ0OiAwcHg7XG4gIGBcbiksIEtIID0gJC5kaXZgXG4gIGRpc3BsYXk6IGZsZXg7XG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gIGdhcDogNXB4O1xuYDtcbiQuZGl2KFxuICAoeyB0aGVtZTogeyBsaW5lSGVpZ2h0OiBlLCB0eXBvZ3JhcGh5OiB0IH0gfSkgPT4gbzFgXG4gICAgd2lkdGg6ICR7dC50MTh9O1xuICAgIGhlaWdodDogJHtlLmxoMTh9O1xuICAgIGJvcmRlci1yYWRpdXM6IDUwJTtcbiAgICBtYXJnaW4tcmlnaHQ6IDVweDtcbiAgICBtYXJnaW4tbGVmdDogJHt0LnQ4fTtcbiAgICBvdmVyZmxvdzogaGlkZGVuO1xuICAgIGltZyB7XG4gICAgICB3aWR0aDogMTAwJTtcblxuICAgICAgaGVpZ2h0OiAxMDAlO1xuXG4gICAgICBvYmplY3QtZml0OiBjb3ZlcjtcbiAgICB9XG4gIGBcbik7XG5jb25zdCBKSCA9ICQuZGl2YFxuICBtYXJnaW4tbGVmdDogOHB4O1xuICBkaXNwbGF5OiBmbGV4O1xuICBhbGlnbi1pdGVtczogY2VudGVyO1xuICBnYXA6IDVweDtcbmAsIF9IID0gJC5wKFxuICAoe1xuICAgIHRoZW1lOiB7IGxpbmVIZWlnaHQ6IGUsIGNvbG9yczogdCwgZm9udFdlaWdodDogbywgdHlwb2dyYXBoeTogbiwgZm9udEZhbWlseTogciB9XG4gIH0pID0+IG8xYFxuICAgIGNvbG9yOiAke3QudGV4dEljb24udGV4dEhpZ2hlbXBoYXNpc307XG4gICAgZm9udC1mZWF0dXJlLXNldHRpbmdzOiAnY2xpZycgb2ZmLCAnbGlnYScgb2ZmO1xuXG4gICAgLyogTGFiZWwvU21hbGwgLSBNZWRpdW0gKi9cbiAgICBmb250LWZhbWlseTogJHtyLmJhc2V9O1xuICAgIGZvbnQtc2l6ZTogJHtuLnQxMH07XG4gICAgZm9udC1zdHlsZTogbm9ybWFsO1xuICAgIGZvbnQtd2VpZ2h0OiAke28ubWVkaXVtfTtcbiAgICBsaW5lLWhlaWdodDogJHtlLmxoMTh9OyAvKiAxODAlICovXG4gIGBcbiksICRIID0gJC5kaXYoXG4gICh7IHRoZW1lOiB7IHR5cG9ncmFwaHk6IGUgfSB9KSA9PiBvMWBcbiAgICBkaXNwbGF5OiBmbGV4O1xuICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG5cbiAgICBtYXJnaW4tdG9wOiAke2UudDh9O1xuICBgXG4pLCBNYiA9ICQucChcbiAgKHsgdGhlbWU6IHsgbGluZUhlaWdodDogZSwgY29sb3JzOiB0LCBmb250V2VpZ2h0OiBvLCB0eXBvZ3JhcGh5OiBuIH0gfSkgPT4gbzFgXG4gICAgbWFyZ2luOiAwcHg7XG4gICAgbWFyZ2luLWxlZnQ6IDMwcHg7XG4gICAgY29sb3I6ICR7dC50ZXh0SWNvbi50ZXh0TG93ZW1waGFzaXN9O1xuICAgIGZvbnQtZmVhdHVyZS1zZXR0aW5nczogJ2NsaWcnIG9mZiwgJ2xpZ2EnIG9mZjtcblxuICAgIGZvbnQtc2l6ZTogJHtuLnQxMn07XG4gICAgZm9udC1zdHlsZTogbm9ybWFsO1xuICAgIGZvbnQtd2VpZ2h0OiAke28ucmVndWxhcn07XG4gICAgbGluZS1oZWlnaHQ6ICR7ZS5saDIwfTsgLyogMTY2LjY2NyUgKi9cbiAgYFxuKSwgZVYgPSAkKE1iKShcbiAgKHsgdGhlbWU6IHsgY29sb3JzOiBlLCB0eXBvZ3JhcGh5OiB0LCBmb250V2VpZ2h0OiBvLCBsaW5lSGVpZ2h0OiBuIH0gfSkgPT4gbzFgXG4gICAgY29sb3I6ICR7ZS50ZXh0SWNvbi50ZXh0TG93ZW1waGFzaXN9O1xuICAgIGZvbnQtZmVhdHVyZS1zZXR0aW5nczogJ2NsaWcnIG9mZiwgJ2xpZ2EnIG9mZjtcbiAgICBtYXJnaW4tbGVmdDogMzBweDtcblxuICAgIGZvbnQtc2l6ZTogJHt0LnQxMH07XG4gICAgZm9udC1zdHlsZTogbm9ybWFsO1xuICAgIGZvbnQtd2VpZ2h0OiAke28ucmVndWxhcn07XG4gICAgbGluZS1oZWlnaHQ6ICR7bi5saDE4fTsgLyogMTgwJSAqL1xuICBgXG4pLCB0ViA9ICQucChcbiAgKHsgdGhlbWU6IHsgbGluZUhlaWdodDogZSwgY29sb3JzOiB0LCBmb250V2VpZ2h0OiBvLCB0eXBvZ3JhcGh5OiBuIH0gfSkgPT4gbzFgXG4gICAgbWFyZ2luOiAwO1xuICAgIGNvbG9yOiAke3QudGV4dEljb24udGV4dExvd2VtcGhhc2lzfTtcbiAgICBmb250LWZlYXR1cmUtc2V0dGluZ3M6ICdjbGlnJyBvZmYsICdsaWdhJyBvZmY7XG5cbiAgICAvKiBMYWJlbC9TbWFsbCAtIExpZ2h0ICovXG4gICAgZm9udC1mYW1pbHk6IFVidW50dTtcbiAgICBmb250LXNpemU6ICR7bi50MTB9O1xuICAgIGZvbnQtc3R5bGU6IG5vcm1hbDtcbiAgICBmb250LXdlaWdodDogJHtvLmxpZ2h0fTtcbiAgICBsaW5lLWhlaWdodDogJHtlLmxoMTh9OyAvKiAxODAlICovXG5cbiAgICBtYXJnaW4tbGVmdDogNXB4O1xuICBgXG4pO1xuJC5pbnB1dCgoKSA9PiBvMWBgKTtcbiQuZGl2KFxuICAoeyB0aGVtZTogeyB0eXBvZ3JhcGh5OiBlIH0gfSkgPT4gbzFgXG4gICAgd2lkdGg6ICR7ZS50MTJ9O1xuICAgIGhlaWdodDogJHtlLnQxMn07XG4gICAgZmxleC1zaHJpbms6IDA7XG4gICAgcmlnaHQ6IDg4cHg7XG4gICAgcG9zaXRpb246IGFic29sdXRlO1xuICBgXG4pO1xuY29uc3Qgb1YgPSAkLmRpdihcbiAgKHsgdGhlbWU6IHsgbGluZUhlaWdodDogZSwgdHlwb2dyYXBoeTogdCwgc3BhY2luZ3M6IG8gfSB9KSA9PiBvMWBcbiAgICBtYXJnaW4tdG9wOiAke3QudDEwfTtcbiAgICBoZWlnaHQ6ICR7ZS5saDMyfTtcbiAgICBkaXNwbGF5OiBmbGV4O1xuICAgIGdhcDogJHtvLnNwOH07XG4gICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gICAgcGFkZGluZy1sZWZ0OiAke28uc3A0fTtcbiAgICBwYWRkaW5nLXJpZ2h0OiAke28uc3A0fTtcbiAgICB3aWR0aDogMTAwJTtcblxuICAgIGRpdiAuaW5wdXQge1xuICAgICAgbWFyZ2luLWxlZnQ6IDVweDtcbiAgICB9XG4gIGBcbiksIHJWID0gJC5kaXZgXG4gIGxhYmVsIHtcbiAgICBkaXNwbGF5OiBub25lO1xuICB9XG5gLCBuViA9ICh7IHRpbWVzdGFtcDogZSwgZWRpdGVkOiB0LCBuYW1lOiBvIH0pID0+IHtcbiAgY29uc3QgbiA9IHV3KGUsIHsgYWRkU3VmZml4OiAhMCB9KTtcbiAgcmV0dXJuIC8qIEBfX1BVUkVfXyAqLyBlMShaSCwgeyBjaGlsZHJlbjogW1xuICAgIHQgPyAvKiBAX19QVVJFX18gKi8gYyhBZSwgeyBub0RpZ2l0OiAhMCwgY291bnQ6IDEsIGNoaWxkcmVuOiAvKiBAX19QVVJFX18gKi8gYyhaMSwgeyBuYW1lOiBcIkFsZXJ0XCIsIHNpemU6IFwieHNcIiB9KSB9KSA6IC8qIEBfX1BVUkVfXyAqLyBjKHpyLCB7IHNpemU6IFwieHNcIiwgbmFtZTogbyB9KSxcbiAgICAvKiBAX19QVVJFX18gKi8gZTEoSkgsIHsgY2hpbGRyZW46IFtcbiAgICAgIC8qIEBfX1BVUkVfXyAqLyBjKF9ILCB7IGNoaWxkcmVuOiBvIH0pLFxuICAgICAgLyogQF9fUFVSRV9fICovIGModFYsIHsgY2hpbGRyZW46IG4gfSlcbiAgICBdIH0pXG4gIF0gfSk7XG59LCBpViA9ICh7XG4gIG5hbWU6IGUsXG4gIHRleHQ6IHQsXG4gIHRpbWVzdGFtcDogbyxcbiAgZWRpdGVkOiBuXG59KSA9PiAvKiBAX19QVVJFX18gKi8gZTEoJEgsIHsgY2hpbGRyZW46IFtcbiAgLyogQF9fUFVSRV9fICovIGMoS0gsIHsgY2hpbGRyZW46IC8qIEBfX1BVUkVfXyAqLyBjKG5WLCB7IG5hbWU6IGUsIHRpbWVzdGFtcDogbywgZWRpdGVkOiBuIH0pIH0pLFxuICAvKiBAX19QVVJFX18gKi8gYyhcImRpdlwiLCB7IGNoaWxkcmVuOiBuID8gLyogQF9fUFVSRV9fICovIGMoZVYsIHsgY2hpbGRyZW46IHQgfSkgOiAvKiBAX19QVVJFX18gKi8gYyhzMCwgeyBjaGlsZHJlbjogLyogQF9fUFVSRV9fICovIGMoTWIsIHsgY2hpbGRyZW46IHQgfSkgfSkgfSlcbl0gfSksIFpfID0gKGUsIHQpID0+IHtcbiAgY29uc3QgW29dID0gVDEoXCJJbnNlcnQgYW5kIGVkaXQgZm9ybSBkYXRhXCIpLCBbbiwgcl0gPSBUMShvKSwge1xuICAgIG5hbWU6IGksXG4gICAgdGV4dDogYSxcbiAgICB0aW1lc3RhbXA6IHMsXG4gICAgZWRpdGVkOiBsLFxuICAgIHNob3dTY3JvbGxiYXI6IHAsXG4gICAgaXNBY2NvcmRpb25FbmFibGVkOiBkLFxuICAgIGlzQWNjb3JkaW9uT3BlbjogYixcbiAgICBpc1JlYWRPbmx5OiBNLFxuICAgIGRlZmF1bHRDb21tZW50czogdSxcbiAgICBpc0FkZENvbW1lbnQ6IEEsXG4gICAgY29tbWVudFN1bWl0SGFuZGxlcjogeixcbiAgICAuLi5mXG4gIH0gPSBlLCBbTywgaF0gPSBUMShbXSksIFtnLCB2XSA9IFQxKFwiXCIpLCBbTCwgeV0gPSBUMSghMSksIFtCLCBYXSA9IFQxKCExKSwgW0YsIFRdID0gVDEoITApO1xuICBQMSgoKSA9PiB7XG4gICAgeShiKTtcbiAgfSwgW2JdKTtcbiAgY29uc3QgW3csIEhdID0gVDEoW10pLCBDID0gKCkgPT4ge1xuICAgIGQgJiYgeSghTCk7XG4gIH07XG4gIFAxKCgpID0+IHtcbiAgICAodSA9PSBudWxsID8gdm9pZCAwIDogdS5sZW5ndGgpID4gMCAmJiAoTyA9PSBudWxsID8gdm9pZCAwIDogTy5sZW5ndGgpID09IDAgJiYgKHUgPT0gbnVsbCB8fCB1Lm1hcCgoSSkgPT4ge1xuICAgICAgbGV0IGogPSBJID09IG51bGwgPyB2b2lkIDAgOiBJLlVzZXJOYW1lLCBVID0gbmV3IERhdGUoSSA9PSBudWxsID8gdm9pZCAwIDogSS5DcmVhdGVkQXQpO1xuICAgICAgTy5wdXNoKHtcbiAgICAgICAgbmFtZTogaixcbiAgICAgICAgaWQ6IEkuX2lkLFxuICAgICAgICB0aW1lc3RhbXA6IFUsXG4gICAgICAgIHRleHQ6IEkgPT0gbnVsbCA/IHZvaWQgMCA6IEkuQ29tbWVudCxcbiAgICAgICAgZWRpdGVkOiAhMVxuICAgICAgfSk7XG4gICAgfSkpO1xuICB9LCBbdV0pO1xuICBjb25zdCBxID0gKCkgPT4ge1xuICAgIGxldCBSO1xuICAgIGcudHJpbSgpICE9PSBcIlwiICYmIChSID0ge1xuICAgICAgbmFtZTogaSxcbiAgICAgIHRleHQ6IGcsXG4gICAgICB0aW1lc3RhbXA6IC8qIEBfX1BVUkVfXyAqLyBuZXcgRGF0ZSgpLFxuICAgICAgZWRpdGVkOiAhMVxuICAgIH0sIGgoWy4uLk8sIFJdKSwgdihcIlwiKSksIHogJiYgeihbLi4uTywgUl0pO1xuICB9LCBtID0gKFIpID0+IHtcbiAgICBkICYmIChyKFIudGFyZ2V0LnZhbHVlKSwgWCghMCksIFQoUi50YXJnZXQudmFsdWUudHJpbSgpID09PSBcIlwiKSk7XG4gIH0sIGsgPSAoUikgPT4ge1xuICAgIGlmIChSLnByZXZlbnREZWZhdWx0KCksIEIgJiYgbi50cmltKCkgIT09IFwiXCIpIHtcbiAgICAgIGNvbnN0IEkgPSBuLCBqID0ge1xuICAgICAgICBuYW1lOiBpLFxuICAgICAgICB0ZXh0OiBcIkVkaXRlZFwiLFxuICAgICAgICB0aW1lc3RhbXA6IC8qIEBfX1BVUkVfXyAqLyBuZXcgRGF0ZSgpLFxuICAgICAgICBlZGl0ZWQ6ICEwXG4gICAgICB9O1xuICAgICAgSChbXG4gICAgICAgIC4uLncsXG4gICAgICAgIHsgY29tbWVudHM6IG4sIHRpbWVzdGFtcDogLyogQF9fUFVSRV9fICovIG5ldyBEYXRlKCkgfVxuICAgICAgXSksIGgoWy4uLk8sIGpdKSwgcihJKSwgWCghMSk7XG4gICAgfVxuICB9LCB4ID0gKCkgPT4ge1xuICAgIHYoXCJcIik7XG4gIH0sIE4gPSAoUikgPT4ge1xuICAgIFIua2V5ID09PSBcIkVudGVyXCIgJiYgIVIuc2hpZnRLZXkgJiYgKFIucHJldmVudERlZmF1bHQoKSwgayhSKSk7XG4gIH0sIFYgPSBnLnRyaW0oKSA9PT0gXCJcIjtcbiAgcmV0dXJuIC8qIEBfX1BVUkVfXyAqLyBlMShQSCwgeyBjaGlsZHJlbjogW1xuICAgIE0gJiYgLyogQF9fUFVSRV9fICovIGUxKE5ILCB7IG9uU3VibWl0OiBrLCBjaGlsZHJlbjogW1xuICAgICAgLyogQF9fUFVSRV9fICovIGUxKERILCB7IGNoaWxkcmVuOiBbXG4gICAgICAgIC8qIEBfX1BVUkVfXyAqLyBjKEhILCB7IGNoaWxkcmVuOiBcIlRleHQgbGFiZWxcIiB9KSxcbiAgICAgICAgLyogQF9fUFVSRV9fICovIGMoVkgsIHsgY2hpbGRyZW46IFwiT3B0aW9uYWxcIiB9KVxuICAgICAgXSB9KSxcbiAgICAgIC8qIEBfX1BVUkVfXyAqLyBjKFxuICAgICAgICBJSCxcbiAgICAgICAge1xuICAgICAgICAgIHBsYWNlaG9sZGVyOiBcIkluc2VydCB0ZXh0IGhlcmUuLlwiLFxuICAgICAgICAgIHZhbHVlOiBuLFxuICAgICAgICAgIG9uQ2hhbmdlOiBtLFxuICAgICAgICAgIG9uS2V5RG93bjogTixcbiAgICAgICAgICBkaXNhYmxlZDogIWRcbiAgICAgICAgfVxuICAgICAgKVxuICAgIF0gfSksXG4gICAgLyogQF9fUFVSRV9fICovIGUxKFVILCB7IGNoaWxkcmVuOiBbXG4gICAgICAvKiBAX19QVVJFX18gKi8gZTEoXG4gICAgICAgIEdILFxuICAgICAgICB7XG4gICAgICAgICAgJGlzQWNjb3JkaW9uRW5hYmxlZDogZCxcbiAgICAgICAgICBvbkNsaWNrOiBDLFxuICAgICAgICAgIGNsYXNzTmFtZTogTCA/IFwiYWN0aXZlXCIgOiBcIlwiLFxuICAgICAgICAgIGNoaWxkcmVuOiBbXG4gICAgICAgICAgICAvKiBAX19QVVJFX18gKi8gYyhBZSwgeyBub0RpZ2l0OiAhMCwgY291bnQ6IDIsIGNoaWxkcmVuOiAvKiBAX19QVVJFX18gKi8gYyhaMSwgeyBuYW1lOiBcIk1vbm9sb2d1ZVwiLCBzaXplOiBcInhzXCIgfSkgfSksXG4gICAgICAgICAgICAvKiBAX19QVVJFX18gKi8gYyhcbiAgICAgICAgICAgICAgWEgsXG4gICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAkaXNBY2NvcmRpb25FbmFibGVkOiBkLFxuICAgICAgICAgICAgICAgIGNsYXNzTmFtZTogTCA/IFwiYWN0aXZlXCIgOiBcIlwiLFxuICAgICAgICAgICAgICAgIGNoaWxkcmVuOiBcIkNvbW1lbnRzXCJcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgKSxcbiAgICAgICAgICAgIC8qIEBfX1BVUkVfXyAqLyBjKFxuICAgICAgICAgICAgICBZSCxcbiAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGNsYXNzTmFtZTogTCA/IFwiYWN0aXZlXCIgOiBcIlwiLFxuICAgICAgICAgICAgICAgIGNoaWxkcmVuOiAvKiBAX19QVVJFX18gKi8gYyhcbiAgICAgICAgICAgICAgICAgIFRILFxuICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAkYWNjb3JkaW9uRXhwYW5kZWQ6IEwsXG4gICAgICAgICAgICAgICAgICAgICRpc0FjY29yZGlvbkVuYWJsZWQ6IGQsXG4gICAgICAgICAgICAgICAgICAgIGNoaWxkcmVuOiAvKiBAX19QVVJFX18gKi8gYyhcbiAgICAgICAgICAgICAgICAgICAgICBaMSxcbiAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICBuYW1lOiBMID8gXCJDaGV2cm9uVXBcIiA6IFwiQ2hldnJvbkRvd25cIixcbiAgICAgICAgICAgICAgICAgICAgICAgIHNpemU6IFwieHh4c1wiXG4gICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICApXG4gICAgICAgICAgXVxuICAgICAgICB9XG4gICAgICApLFxuICAgICAgTCAmJiAvKiBAX19QVVJFX18gKi8gYyhqSCwge30pLFxuICAgICAgLyogQF9fUFVSRV9fICovIGMoXG4gICAgICAgIFFILFxuICAgICAgICB7XG4gICAgICAgICAgJHNob3dTY3JvbGxiYXI6IHAsXG4gICAgICAgICAgJGFjY29yZGlvbkV4cGFuZGVkOiBMLFxuICAgICAgICAgIGNoaWxkcmVuOiBMICYmIC8qIEBfX1BVUkVfXyAqLyBjKFwiZGl2XCIsIHsgc3R5bGU6IHsgaGVpZ2h0OiBcIjEwMCVcIiwgb3ZlcmZsb3dZOiBcImF1dG9cIiB9LCBjaGlsZHJlbjogTy5tYXAoKFIsIEkpID0+IC8qIEBfX1BVUkVfXyAqLyBjKFxuICAgICAgICAgICAgaVYsXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIG5hbWU6IFIubmFtZSxcbiAgICAgICAgICAgICAgdGV4dDogUi50ZXh0LFxuICAgICAgICAgICAgICB0aW1lc3RhbXA6IFIudGltZXN0YW1wLFxuICAgICAgICAgICAgICBlZGl0ZWQ6IFIuZWRpdGVkXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgSVxuICAgICAgICAgICkpIH0pXG4gICAgICAgIH1cbiAgICAgICksXG4gICAgICBMICYmICFNICYmIEEgJiYgLyogQF9fUFVSRV9fICovIGUxKG9WLCB7IGNoaWxkcmVuOiBbXG4gICAgICAgIC8qIEBfX1BVUkVfXyAqLyBjKHpyLCB7IHNpemU6IFwieHNcIiwgbmFtZTogaSB9KSxcbiAgICAgICAgLyogQF9fUFVSRV9fICovIGMoclYsIHsgY2hpbGRyZW46IC8qIEBfX1BVUkVfXyAqLyBjKFxuICAgICAgICAgIFkyLFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGhhbmRsZUNsZWFyRm46IHgsXG4gICAgICAgICAgICBzaXplOiA0MDIsXG4gICAgICAgICAgICB0eXBlOiBcInRleHRcIixcbiAgICAgICAgICAgIHBsYWNlaG9sZGVyOiBcIkVudGVyIHlvdXIgY29tbWVudC4uLlwiLFxuICAgICAgICAgICAgdmFsdWU6IGcsXG4gICAgICAgICAgICBvbkNoYW5nZTogKFIpID0+IHtcbiAgICAgICAgICAgICAgdihSLnRhcmdldC52YWx1ZSksIFQoUi50YXJnZXQudmFsdWUudHJpbSgpID09PSBcIlwiKTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBkaXNhYmxlZDogIWRcbiAgICAgICAgICB9XG4gICAgICAgICkgfSksXG4gICAgICAgIC8qIEBfX1BVUkVfXyAqLyBjKFxuICAgICAgICAgIEcyLFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGJ1dHRvblR5cGU6IFwidGVydGlhcnlcIixcbiAgICAgICAgICAgIG9uQ2xpY2s6IHEsXG4gICAgICAgICAgICBuYW1lOiBcIlNlbmRcIixcbiAgICAgICAgICAgIHNpemU6IFwic21cIixcbiAgICAgICAgICAgIGRpc2FibGVkOiBWXG4gICAgICAgICAgfVxuICAgICAgICApXG4gICAgICBdIH0pXG4gICAgXSB9KVxuICBdIH0pO1xufSwgYVYgPSAkLmRpdmBcbiAgcG9zaXRpb246IGFic29sdXRlO1xuICB0b3A6ICR7KGUpID0+IGUgIT0gbnVsbCAmJiBlLnkgPyBlID09IG51bGwgPyB2b2lkIDAgOiBlLnkgOiAwfXB4O1xuICBsZWZ0OiAkeyhlKSA9PiBlICE9IG51bGwgJiYgZS54ID8gZSA9PSBudWxsID8gdm9pZCAwIDogZS54IDogMH1weDtcbiAgei1pbmRleDogMTtcbiAgbWF4LXdpZHRoOiAyMDhweDtcbiAgd2lkdGg6IDIwOHB4O1xuYCwgc1YgPSAkLmRpdmBgLCBjViA9ICQuZGl2YGA7XG4kLmRpdihcbiAgKHtcbiAgICB0aGVtZTogeyBjb2xvcnM6IGUsIGZvbnRGYW1pbHk6IHQsIHR5cG9ncmFwaHk6IG8sIGxpbmVIZWlnaHQ6IG4sIGZvbnRXZWlnaHQ6IHIsIHNwYWNpbmdzOiBpIH1cbiAgfSkgPT4gbzFgXG4gICAgd2lkdGg6IDUwMHB4O1xuICAgIGhlaWdodDogNDAwcHg7XG4gICAgYmFja2dyb3VuZDogJHtlLmZpZWxkQmx1ZX07XG4gICAgcGFkZGluZzogJHtpLnNwMTJ9O1xuICAgIGZvbnQtZmFtaWx5OiAke3QuYmFzZX07XG4gICAgZm9udC1zaXplOiAke28udDE2fTtcbiAgICBmb250LXdlaWdodDogJHtyLnJlZ3VsYXJ9O1xuICAgIGxpbmUtaGVpZ2h0OiAke24ubGgxOH07XG4gIGBcbik7XG5jb25zdCBsViA9ICgpID0+IHtcbiAgY29uc3QgW2UsIHRdID0gVDEoITEpLCBbbywgbl0gPSBUMSh7XG4gICAgeDogMCxcbiAgICB5OiAwXG4gIH0pO1xuICByZXR1cm4gUDEoKCkgPT4ge1xuICAgIGNvbnN0IHIgPSAoKSA9PiB0KCExKTtcbiAgICByZXR1cm4gZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcihcImNsaWNrXCIsIHIpLCAoKSA9PiB7XG4gICAgICBkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKFwiY2xpY2tcIiwgcik7XG4gICAgfTtcbiAgfSwgW10pLCB7XG4gICAgY2xpY2tlZDogZSxcbiAgICBzZXRDbGlja2VkOiB0LFxuICAgIHBvaW50czogbyxcbiAgICBzZXRQb2ludHM6IG5cbiAgfTtcbn0sIGpfID0gKGUpID0+IHtcbiAgY29uc3QgeyBjbGlja2VkOiB0LCBzZXRDbGlja2VkOiBvLCBwb2ludHM6IG4sIHNldFBvaW50czogciB9ID0gbFYoKSwgeyBjaGlsZHJlbjogaSwgbWVudTogYSwgc2VsZWN0ZWRPcHRpb25zOiBzIH0gPSBlLCBsID0gKHApID0+IHtcbiAgICBzICYmIHMocCk7XG4gIH07XG4gIHJldHVybiAvKiBAX19QVVJFX18gKi8gZTEoc1YsIHsgY2hpbGRyZW46IFtcbiAgICBpICYmIC8qIEBfX1BVUkVfXyAqLyBjKFxuICAgICAgY1YsXG4gICAgICB7XG4gICAgICAgIG9uQ29udGV4dE1lbnU6IChwKSA9PiB7XG4gICAgICAgICAgcC5wcmV2ZW50RGVmYXVsdCgpLCBvKCEwKSwgcih7XG4gICAgICAgICAgICB4OiBwLnBhZ2VYLFxuICAgICAgICAgICAgeTogcC5wYWdlWVxuICAgICAgICAgIH0pO1xuICAgICAgICB9LFxuICAgICAgICBjaGlsZHJlbjogaVxuICAgICAgfVxuICAgICksXG4gICAgdCAmJiAvKiBAX19QVVJFX18gKi8gYyhhViwgeyB4OiBuLngsIHk6IG4ueSwgY2hpbGRyZW46IC8qIEBfX1BVUkVfXyAqLyBjKFxuICAgICAgZHQsXG4gICAgICB7XG4gICAgICAgIGRhdGE6IGEsXG4gICAgICAgIGdyb3VwQnlEaXZpZGVyOiAhMCxcbiAgICAgICAgbWF4aGVpZ2h0OiAzMTAsXG4gICAgICAgIHNlbGVjdGVkT3B0aW9uczogbFxuICAgICAgfVxuICAgICkgfSlcbiAgXSB9KTtcbn07XG4vKipcbiAgICogdGFibGUtY29yZVxuICAgKlxuICAgKiBDb3B5cmlnaHQgKGMpIFRhblN0YWNrXG4gICAqXG4gICAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICAgKiBMSUNFTlNFLm1kIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuXG4gICAqXG4gICAqIEBsaWNlbnNlIE1JVFxuICAgKi9cbmZ1bmN0aW9uIHh0KGUsIHQpIHtcbiAgcmV0dXJuIHR5cGVvZiBlID09IFwiZnVuY3Rpb25cIiA/IGUodCkgOiBlO1xufVxuZnVuY3Rpb24gb2UoZSwgdCkge1xuICByZXR1cm4gKG8pID0+IHtcbiAgICB0LnNldFN0YXRlKChuKSA9PiAoe1xuICAgICAgLi4ubixcbiAgICAgIFtlXTogeHQobywgbltlXSlcbiAgICB9KSk7XG4gIH07XG59XG5mdW5jdGlvbiByaShlKSB7XG4gIHJldHVybiBlIGluc3RhbmNlb2YgRnVuY3Rpb247XG59XG5mdW5jdGlvbiBwVihlKSB7XG4gIHJldHVybiBBcnJheS5pc0FycmF5KGUpICYmIGUuZXZlcnkoKHQpID0+IHR5cGVvZiB0ID09IFwibnVtYmVyXCIpO1xufVxuZnVuY3Rpb24gZFYoZSwgdCkge1xuICBjb25zdCBvID0gW10sIG4gPSAocikgPT4ge1xuICAgIHIuZm9yRWFjaCgoaSkgPT4ge1xuICAgICAgby5wdXNoKGkpO1xuICAgICAgY29uc3QgYSA9IHQoaSk7XG4gICAgICBhICE9IG51bGwgJiYgYS5sZW5ndGggJiYgbihhKTtcbiAgICB9KTtcbiAgfTtcbiAgcmV0dXJuIG4oZSksIG87XG59XG5mdW5jdGlvbiBNMChlLCB0LCBvKSB7XG4gIGxldCBuID0gW10sIHI7XG4gIHJldHVybiAoaSkgPT4ge1xuICAgIGxldCBhO1xuICAgIG8ua2V5ICYmIG8uZGVidWcgJiYgKGEgPSBEYXRlLm5vdygpKTtcbiAgICBjb25zdCBzID0gZShpKTtcbiAgICBpZiAoIShzLmxlbmd0aCAhPT0gbi5sZW5ndGggfHwgcy5zb21lKChkLCBiKSA9PiBuW2JdICE9PSBkKSkpXG4gICAgICByZXR1cm4gcjtcbiAgICBuID0gcztcbiAgICBsZXQgcDtcbiAgICBpZiAoby5rZXkgJiYgby5kZWJ1ZyAmJiAocCA9IERhdGUubm93KCkpLCByID0gdCguLi5zKSwgbyA9PSBudWxsIHx8IG8ub25DaGFuZ2UgPT0gbnVsbCB8fCBvLm9uQ2hhbmdlKHIpLCBvLmtleSAmJiBvLmRlYnVnICYmIG8gIT0gbnVsbCAmJiBvLmRlYnVnKCkpIHtcbiAgICAgIGNvbnN0IGQgPSBNYXRoLnJvdW5kKChEYXRlLm5vdygpIC0gYSkgKiAxMDApIC8gMTAwLCBiID0gTWF0aC5yb3VuZCgoRGF0ZS5ub3coKSAtIHApICogMTAwKSAvIDEwMCwgTSA9IGIgLyAxNiwgdSA9IChBLCB6KSA9PiB7XG4gICAgICAgIGZvciAoQSA9IFN0cmluZyhBKTsgQS5sZW5ndGggPCB6OyApXG4gICAgICAgICAgQSA9IFwiIFwiICsgQTtcbiAgICAgICAgcmV0dXJuIEE7XG4gICAgICB9O1xuICAgICAgY29uc29sZS5pbmZvKGAlY+KPsSAke3UoYiwgNSl9IC8ke3UoZCwgNSl9IG1zYCwgYFxuICAgICAgICAgICAgZm9udC1zaXplOiAuNnJlbTtcbiAgICAgICAgICAgIGZvbnQtd2VpZ2h0OiBib2xkO1xuICAgICAgICAgICAgY29sb3I6IGhzbCgke01hdGgubWF4KDAsIE1hdGgubWluKDEyMCAtIDEyMCAqIE0sIDEyMCkpfWRlZyAxMDAlIDMxJSk7YCwgbyA9PSBudWxsID8gdm9pZCAwIDogby5rZXkpO1xuICAgIH1cbiAgICByZXR1cm4gcjtcbiAgfTtcbn1cbmZ1bmN0aW9uIEEwKGUsIHQsIG8sIG4pIHtcbiAgcmV0dXJuIHtcbiAgICBkZWJ1ZzogKCkgPT4ge1xuICAgICAgdmFyIHI7XG4gICAgICByZXR1cm4gKHIgPSBlID09IG51bGwgPyB2b2lkIDAgOiBlLmRlYnVnQWxsKSAhPSBudWxsID8gciA6IGVbdF07XG4gICAgfSxcbiAgICBrZXk6IHByb2Nlc3MuZW52Lk5PREVfRU5WID09PSBcImRldmVsb3BtZW50XCIgJiYgbyxcbiAgICBvbkNoYW5nZTogblxuICB9O1xufVxuZnVuY3Rpb24gYlYoZSwgdCwgbywgbikge1xuICBjb25zdCByID0gKCkgPT4ge1xuICAgIHZhciBhO1xuICAgIHJldHVybiAoYSA9IGkuZ2V0VmFsdWUoKSkgIT0gbnVsbCA/IGEgOiBlLm9wdGlvbnMucmVuZGVyRmFsbGJhY2tWYWx1ZTtcbiAgfSwgaSA9IHtcbiAgICBpZDogYCR7dC5pZH1fJHtvLmlkfWAsXG4gICAgcm93OiB0LFxuICAgIGNvbHVtbjogbyxcbiAgICBnZXRWYWx1ZTogKCkgPT4gdC5nZXRWYWx1ZShuKSxcbiAgICByZW5kZXJWYWx1ZTogcixcbiAgICBnZXRDb250ZXh0OiBNMCgoKSA9PiBbZSwgbywgdCwgaV0sIChhLCBzLCBsLCBwKSA9PiAoe1xuICAgICAgdGFibGU6IGEsXG4gICAgICBjb2x1bW46IHMsXG4gICAgICByb3c6IGwsXG4gICAgICBjZWxsOiBwLFxuICAgICAgZ2V0VmFsdWU6IHAuZ2V0VmFsdWUsXG4gICAgICByZW5kZXJWYWx1ZTogcC5yZW5kZXJWYWx1ZVxuICAgIH0pLCBBMChlLm9wdGlvbnMsIFwiZGVidWdDZWxsc1wiLCBcImNlbGwuZ2V0Q29udGV4dFwiKSlcbiAgfTtcbiAgcmV0dXJuIGUuX2ZlYXR1cmVzLmZvckVhY2goKGEpID0+IHtcbiAgICBhLmNyZWF0ZUNlbGwgPT0gbnVsbCB8fCBhLmNyZWF0ZUNlbGwoaSwgbywgdCwgZSk7XG4gIH0sIHt9KSwgaTtcbn1cbmZ1bmN0aW9uIE1WKGUsIHQsIG8sIG4pIHtcbiAgdmFyIHIsIGk7XG4gIGNvbnN0IHMgPSB7XG4gICAgLi4uZS5fZ2V0RGVmYXVsdENvbHVtbkRlZigpLFxuICAgIC4uLnRcbiAgfSwgbCA9IHMuYWNjZXNzb3JLZXk7XG4gIGxldCBwID0gKHIgPSAoaSA9IHMuaWQpICE9IG51bGwgPyBpIDogbCA/IHR5cGVvZiBTdHJpbmcucHJvdG90eXBlLnJlcGxhY2VBbGwgPT0gXCJmdW5jdGlvblwiID8gbC5yZXBsYWNlQWxsKFwiLlwiLCBcIl9cIikgOiBsLnJlcGxhY2UoL1xcLi9nLCBcIl9cIikgOiB2b2lkIDApICE9IG51bGwgPyByIDogdHlwZW9mIHMuaGVhZGVyID09IFwic3RyaW5nXCIgPyBzLmhlYWRlciA6IHZvaWQgMCwgZDtcbiAgaWYgKHMuYWNjZXNzb3JGbiA/IGQgPSBzLmFjY2Vzc29yRm4gOiBsICYmIChsLmluY2x1ZGVzKFwiLlwiKSA/IGQgPSAoTSkgPT4ge1xuICAgIGxldCB1ID0gTTtcbiAgICBmb3IgKGNvbnN0IHogb2YgbC5zcGxpdChcIi5cIikpIHtcbiAgICAgIHZhciBBO1xuICAgICAgdSA9IChBID0gdSkgPT0gbnVsbCA/IHZvaWQgMCA6IEFbel0sIHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIiAmJiB1ID09PSB2b2lkIDAgJiYgY29uc29sZS53YXJuKGBcIiR7en1cIiBpbiBkZWVwbHkgbmVzdGVkIGtleSBcIiR7bH1cIiByZXR1cm5lZCB1bmRlZmluZWQuYCk7XG4gICAgfVxuICAgIHJldHVybiB1O1xuICB9IDogZCA9IChNKSA9PiBNW3MuYWNjZXNzb3JLZXldKSwgIXApXG4gICAgdGhyb3cgcHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiID8gbmV3IEVycm9yKHMuYWNjZXNzb3JGbiA/IFwiQ29sdW1ucyByZXF1aXJlIGFuIGlkIHdoZW4gdXNpbmcgYW4gYWNjZXNzb3JGblwiIDogXCJDb2x1bW5zIHJlcXVpcmUgYW4gaWQgd2hlbiB1c2luZyBhIG5vbi1zdHJpbmcgaGVhZGVyXCIpIDogbmV3IEVycm9yKCk7XG4gIGxldCBiID0ge1xuICAgIGlkOiBgJHtTdHJpbmcocCl9YCxcbiAgICBhY2Nlc3NvckZuOiBkLFxuICAgIHBhcmVudDogbixcbiAgICBkZXB0aDogbyxcbiAgICBjb2x1bW5EZWY6IHMsXG4gICAgY29sdW1uczogW10sXG4gICAgZ2V0RmxhdENvbHVtbnM6IE0wKCgpID0+IFshMF0sICgpID0+IHtcbiAgICAgIHZhciBNO1xuICAgICAgcmV0dXJuIFtiLCAuLi4oTSA9IGIuY29sdW1ucykgPT0gbnVsbCA/IHZvaWQgMCA6IE0uZmxhdE1hcCgodSkgPT4gdS5nZXRGbGF0Q29sdW1ucygpKV07XG4gICAgfSwgQTAoZS5vcHRpb25zLCBcImRlYnVnQ29sdW1uc1wiLCBcImNvbHVtbi5nZXRGbGF0Q29sdW1uc1wiKSksXG4gICAgZ2V0TGVhZkNvbHVtbnM6IE0wKCgpID0+IFtlLl9nZXRPcmRlckNvbHVtbnNGbigpXSwgKE0pID0+IHtcbiAgICAgIHZhciB1O1xuICAgICAgaWYgKCh1ID0gYi5jb2x1bW5zKSAhPSBudWxsICYmIHUubGVuZ3RoKSB7XG4gICAgICAgIGxldCBBID0gYi5jb2x1bW5zLmZsYXRNYXAoKHopID0+IHouZ2V0TGVhZkNvbHVtbnMoKSk7XG4gICAgICAgIHJldHVybiBNKEEpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIFtiXTtcbiAgICB9LCBBMChlLm9wdGlvbnMsIFwiZGVidWdDb2x1bW5zXCIsIFwiY29sdW1uLmdldExlYWZDb2x1bW5zXCIpKVxuICB9O1xuICBmb3IgKGNvbnN0IE0gb2YgZS5fZmVhdHVyZXMpXG4gICAgTS5jcmVhdGVDb2x1bW4gPT0gbnVsbCB8fCBNLmNyZWF0ZUNvbHVtbihiLCBlKTtcbiAgcmV0dXJuIGI7XG59XG5jb25zdCBMMiA9IFwiZGVidWdIZWFkZXJzXCI7XG5mdW5jdGlvbiBzYyhlLCB0LCBvKSB7XG4gIHZhciBuO1xuICBsZXQgaSA9IHtcbiAgICBpZDogKG4gPSBvLmlkKSAhPSBudWxsID8gbiA6IHQuaWQsXG4gICAgY29sdW1uOiB0LFxuICAgIGluZGV4OiBvLmluZGV4LFxuICAgIGlzUGxhY2Vob2xkZXI6ICEhby5pc1BsYWNlaG9sZGVyLFxuICAgIHBsYWNlaG9sZGVySWQ6IG8ucGxhY2Vob2xkZXJJZCxcbiAgICBkZXB0aDogby5kZXB0aCxcbiAgICBzdWJIZWFkZXJzOiBbXSxcbiAgICBjb2xTcGFuOiAwLFxuICAgIHJvd1NwYW46IDAsXG4gICAgaGVhZGVyR3JvdXA6IG51bGwsXG4gICAgZ2V0TGVhZkhlYWRlcnM6ICgpID0+IHtcbiAgICAgIGNvbnN0IGEgPSBbXSwgcyA9IChsKSA9PiB7XG4gICAgICAgIGwuc3ViSGVhZGVycyAmJiBsLnN1YkhlYWRlcnMubGVuZ3RoICYmIGwuc3ViSGVhZGVycy5tYXAocyksIGEucHVzaChsKTtcbiAgICAgIH07XG4gICAgICByZXR1cm4gcyhpKSwgYTtcbiAgICB9LFxuICAgIGdldENvbnRleHQ6ICgpID0+ICh7XG4gICAgICB0YWJsZTogZSxcbiAgICAgIGhlYWRlcjogaSxcbiAgICAgIGNvbHVtbjogdFxuICAgIH0pXG4gIH07XG4gIHJldHVybiBlLl9mZWF0dXJlcy5mb3JFYWNoKChhKSA9PiB7XG4gICAgYS5jcmVhdGVIZWFkZXIgPT0gbnVsbCB8fCBhLmNyZWF0ZUhlYWRlcihpLCBlKTtcbiAgfSksIGk7XG59XG5jb25zdCBBViA9IHtcbiAgY3JlYXRlVGFibGU6IChlKSA9PiB7XG4gICAgZS5nZXRIZWFkZXJHcm91cHMgPSBNMCgoKSA9PiBbZS5nZXRBbGxDb2x1bW5zKCksIGUuZ2V0VmlzaWJsZUxlYWZDb2x1bW5zKCksIGUuZ2V0U3RhdGUoKS5jb2x1bW5QaW5uaW5nLmxlZnQsIGUuZ2V0U3RhdGUoKS5jb2x1bW5QaW5uaW5nLnJpZ2h0XSwgKHQsIG8sIG4sIHIpID0+IHtcbiAgICAgIHZhciBpLCBhO1xuICAgICAgY29uc3QgcyA9IChpID0gbiA9PSBudWxsID8gdm9pZCAwIDogbi5tYXAoKGIpID0+IG8uZmluZCgoTSkgPT4gTS5pZCA9PT0gYikpLmZpbHRlcihCb29sZWFuKSkgIT0gbnVsbCA/IGkgOiBbXSwgbCA9IChhID0gciA9PSBudWxsID8gdm9pZCAwIDogci5tYXAoKGIpID0+IG8uZmluZCgoTSkgPT4gTS5pZCA9PT0gYikpLmZpbHRlcihCb29sZWFuKSkgIT0gbnVsbCA/IGEgOiBbXSwgcCA9IG8uZmlsdGVyKChiKSA9PiAhKG4gIT0gbnVsbCAmJiBuLmluY2x1ZGVzKGIuaWQpKSAmJiAhKHIgIT0gbnVsbCAmJiByLmluY2x1ZGVzKGIuaWQpKSk7XG4gICAgICByZXR1cm4gcW4odCwgWy4uLnMsIC4uLnAsIC4uLmxdLCBlKTtcbiAgICB9LCBBMChlLm9wdGlvbnMsIEwyLCBcImdldEhlYWRlckdyb3Vwc1wiKSksIGUuZ2V0Q2VudGVySGVhZGVyR3JvdXBzID0gTTAoKCkgPT4gW2UuZ2V0QWxsQ29sdW1ucygpLCBlLmdldFZpc2libGVMZWFmQ29sdW1ucygpLCBlLmdldFN0YXRlKCkuY29sdW1uUGlubmluZy5sZWZ0LCBlLmdldFN0YXRlKCkuY29sdW1uUGlubmluZy5yaWdodF0sICh0LCBvLCBuLCByKSA9PiAobyA9IG8uZmlsdGVyKChpKSA9PiAhKG4gIT0gbnVsbCAmJiBuLmluY2x1ZGVzKGkuaWQpKSAmJiAhKHIgIT0gbnVsbCAmJiByLmluY2x1ZGVzKGkuaWQpKSksIHFuKHQsIG8sIGUsIFwiY2VudGVyXCIpKSwgQTAoZS5vcHRpb25zLCBMMiwgXCJnZXRDZW50ZXJIZWFkZXJHcm91cHNcIikpLCBlLmdldExlZnRIZWFkZXJHcm91cHMgPSBNMCgoKSA9PiBbZS5nZXRBbGxDb2x1bW5zKCksIGUuZ2V0VmlzaWJsZUxlYWZDb2x1bW5zKCksIGUuZ2V0U3RhdGUoKS5jb2x1bW5QaW5uaW5nLmxlZnRdLCAodCwgbywgbikgPT4ge1xuICAgICAgdmFyIHI7XG4gICAgICBjb25zdCBpID0gKHIgPSBuID09IG51bGwgPyB2b2lkIDAgOiBuLm1hcCgoYSkgPT4gby5maW5kKChzKSA9PiBzLmlkID09PSBhKSkuZmlsdGVyKEJvb2xlYW4pKSAhPSBudWxsID8gciA6IFtdO1xuICAgICAgcmV0dXJuIHFuKHQsIGksIGUsIFwibGVmdFwiKTtcbiAgICB9LCBBMChlLm9wdGlvbnMsIEwyLCBcImdldExlZnRIZWFkZXJHcm91cHNcIikpLCBlLmdldFJpZ2h0SGVhZGVyR3JvdXBzID0gTTAoKCkgPT4gW2UuZ2V0QWxsQ29sdW1ucygpLCBlLmdldFZpc2libGVMZWFmQ29sdW1ucygpLCBlLmdldFN0YXRlKCkuY29sdW1uUGlubmluZy5yaWdodF0sICh0LCBvLCBuKSA9PiB7XG4gICAgICB2YXIgcjtcbiAgICAgIGNvbnN0IGkgPSAociA9IG4gPT0gbnVsbCA/IHZvaWQgMCA6IG4ubWFwKChhKSA9PiBvLmZpbmQoKHMpID0+IHMuaWQgPT09IGEpKS5maWx0ZXIoQm9vbGVhbikpICE9IG51bGwgPyByIDogW107XG4gICAgICByZXR1cm4gcW4odCwgaSwgZSwgXCJyaWdodFwiKTtcbiAgICB9LCBBMChlLm9wdGlvbnMsIEwyLCBcImdldFJpZ2h0SGVhZGVyR3JvdXBzXCIpKSwgZS5nZXRGb290ZXJHcm91cHMgPSBNMCgoKSA9PiBbZS5nZXRIZWFkZXJHcm91cHMoKV0sICh0KSA9PiBbLi4udF0ucmV2ZXJzZSgpLCBBMChlLm9wdGlvbnMsIEwyLCBcImdldEZvb3Rlckdyb3Vwc1wiKSksIGUuZ2V0TGVmdEZvb3Rlckdyb3VwcyA9IE0wKCgpID0+IFtlLmdldExlZnRIZWFkZXJHcm91cHMoKV0sICh0KSA9PiBbLi4udF0ucmV2ZXJzZSgpLCBBMChlLm9wdGlvbnMsIEwyLCBcImdldExlZnRGb290ZXJHcm91cHNcIikpLCBlLmdldENlbnRlckZvb3Rlckdyb3VwcyA9IE0wKCgpID0+IFtlLmdldENlbnRlckhlYWRlckdyb3VwcygpXSwgKHQpID0+IFsuLi50XS5yZXZlcnNlKCksIEEwKGUub3B0aW9ucywgTDIsIFwiZ2V0Q2VudGVyRm9vdGVyR3JvdXBzXCIpKSwgZS5nZXRSaWdodEZvb3Rlckdyb3VwcyA9IE0wKCgpID0+IFtlLmdldFJpZ2h0SGVhZGVyR3JvdXBzKCldLCAodCkgPT4gWy4uLnRdLnJldmVyc2UoKSwgQTAoZS5vcHRpb25zLCBMMiwgXCJnZXRSaWdodEZvb3Rlckdyb3Vwc1wiKSksIGUuZ2V0RmxhdEhlYWRlcnMgPSBNMCgoKSA9PiBbZS5nZXRIZWFkZXJHcm91cHMoKV0sICh0KSA9PiB0Lm1hcCgobykgPT4gby5oZWFkZXJzKS5mbGF0KCksIEEwKGUub3B0aW9ucywgTDIsIFwiZ2V0RmxhdEhlYWRlcnNcIikpLCBlLmdldExlZnRGbGF0SGVhZGVycyA9IE0wKCgpID0+IFtlLmdldExlZnRIZWFkZXJHcm91cHMoKV0sICh0KSA9PiB0Lm1hcCgobykgPT4gby5oZWFkZXJzKS5mbGF0KCksIEEwKGUub3B0aW9ucywgTDIsIFwiZ2V0TGVmdEZsYXRIZWFkZXJzXCIpKSwgZS5nZXRDZW50ZXJGbGF0SGVhZGVycyA9IE0wKCgpID0+IFtlLmdldENlbnRlckhlYWRlckdyb3VwcygpXSwgKHQpID0+IHQubWFwKChvKSA9PiBvLmhlYWRlcnMpLmZsYXQoKSwgQTAoZS5vcHRpb25zLCBMMiwgXCJnZXRDZW50ZXJGbGF0SGVhZGVyc1wiKSksIGUuZ2V0UmlnaHRGbGF0SGVhZGVycyA9IE0wKCgpID0+IFtlLmdldFJpZ2h0SGVhZGVyR3JvdXBzKCldLCAodCkgPT4gdC5tYXAoKG8pID0+IG8uaGVhZGVycykuZmxhdCgpLCBBMChlLm9wdGlvbnMsIEwyLCBcImdldFJpZ2h0RmxhdEhlYWRlcnNcIikpLCBlLmdldENlbnRlckxlYWZIZWFkZXJzID0gTTAoKCkgPT4gW2UuZ2V0Q2VudGVyRmxhdEhlYWRlcnMoKV0sICh0KSA9PiB0LmZpbHRlcigobykgPT4ge1xuICAgICAgdmFyIG47XG4gICAgICByZXR1cm4gISgobiA9IG8uc3ViSGVhZGVycykgIT0gbnVsbCAmJiBuLmxlbmd0aCk7XG4gICAgfSksIEEwKGUub3B0aW9ucywgTDIsIFwiZ2V0Q2VudGVyTGVhZkhlYWRlcnNcIikpLCBlLmdldExlZnRMZWFmSGVhZGVycyA9IE0wKCgpID0+IFtlLmdldExlZnRGbGF0SGVhZGVycygpXSwgKHQpID0+IHQuZmlsdGVyKChvKSA9PiB7XG4gICAgICB2YXIgbjtcbiAgICAgIHJldHVybiAhKChuID0gby5zdWJIZWFkZXJzKSAhPSBudWxsICYmIG4ubGVuZ3RoKTtcbiAgICB9KSwgQTAoZS5vcHRpb25zLCBMMiwgXCJnZXRMZWZ0TGVhZkhlYWRlcnNcIikpLCBlLmdldFJpZ2h0TGVhZkhlYWRlcnMgPSBNMCgoKSA9PiBbZS5nZXRSaWdodEZsYXRIZWFkZXJzKCldLCAodCkgPT4gdC5maWx0ZXIoKG8pID0+IHtcbiAgICAgIHZhciBuO1xuICAgICAgcmV0dXJuICEoKG4gPSBvLnN1YkhlYWRlcnMpICE9IG51bGwgJiYgbi5sZW5ndGgpO1xuICAgIH0pLCBBMChlLm9wdGlvbnMsIEwyLCBcImdldFJpZ2h0TGVhZkhlYWRlcnNcIikpLCBlLmdldExlYWZIZWFkZXJzID0gTTAoKCkgPT4gW2UuZ2V0TGVmdEhlYWRlckdyb3VwcygpLCBlLmdldENlbnRlckhlYWRlckdyb3VwcygpLCBlLmdldFJpZ2h0SGVhZGVyR3JvdXBzKCldLCAodCwgbywgbikgPT4ge1xuICAgICAgdmFyIHIsIGksIGEsIHMsIGwsIHA7XG4gICAgICByZXR1cm4gWy4uLihyID0gKGkgPSB0WzBdKSA9PSBudWxsID8gdm9pZCAwIDogaS5oZWFkZXJzKSAhPSBudWxsID8gciA6IFtdLCAuLi4oYSA9IChzID0gb1swXSkgPT0gbnVsbCA/IHZvaWQgMCA6IHMuaGVhZGVycykgIT0gbnVsbCA/IGEgOiBbXSwgLi4uKGwgPSAocCA9IG5bMF0pID09IG51bGwgPyB2b2lkIDAgOiBwLmhlYWRlcnMpICE9IG51bGwgPyBsIDogW11dLm1hcCgoZCkgPT4gZC5nZXRMZWFmSGVhZGVycygpKS5mbGF0KCk7XG4gICAgfSwgQTAoZS5vcHRpb25zLCBMMiwgXCJnZXRMZWFmSGVhZGVyc1wiKSk7XG4gIH1cbn07XG5mdW5jdGlvbiBxbihlLCB0LCBvLCBuKSB7XG4gIHZhciByLCBpO1xuICBsZXQgYSA9IDA7XG4gIGNvbnN0IHMgPSBmdW5jdGlvbihNLCB1KSB7XG4gICAgdSA9PT0gdm9pZCAwICYmICh1ID0gMSksIGEgPSBNYXRoLm1heChhLCB1KSwgTS5maWx0ZXIoKEEpID0+IEEuZ2V0SXNWaXNpYmxlKCkpLmZvckVhY2goKEEpID0+IHtcbiAgICAgIHZhciB6O1xuICAgICAgKHogPSBBLmNvbHVtbnMpICE9IG51bGwgJiYgei5sZW5ndGggJiYgcyhBLmNvbHVtbnMsIHUgKyAxKTtcbiAgICB9LCAwKTtcbiAgfTtcbiAgcyhlKTtcbiAgbGV0IGwgPSBbXTtcbiAgY29uc3QgcCA9IChNLCB1KSA9PiB7XG4gICAgY29uc3QgQSA9IHtcbiAgICAgIGRlcHRoOiB1LFxuICAgICAgaWQ6IFtuLCBgJHt1fWBdLmZpbHRlcihCb29sZWFuKS5qb2luKFwiX1wiKSxcbiAgICAgIGhlYWRlcnM6IFtdXG4gICAgfSwgeiA9IFtdO1xuICAgIE0uZm9yRWFjaCgoZikgPT4ge1xuICAgICAgY29uc3QgTyA9IFsuLi56XS5yZXZlcnNlKClbMF0sIGggPSBmLmNvbHVtbi5kZXB0aCA9PT0gQS5kZXB0aDtcbiAgICAgIGxldCBnLCB2ID0gITE7XG4gICAgICBpZiAoaCAmJiBmLmNvbHVtbi5wYXJlbnQgPyBnID0gZi5jb2x1bW4ucGFyZW50IDogKGcgPSBmLmNvbHVtbiwgdiA9ICEwKSwgTyAmJiAoTyA9PSBudWxsID8gdm9pZCAwIDogTy5jb2x1bW4pID09PSBnKVxuICAgICAgICBPLnN1YkhlYWRlcnMucHVzaChmKTtcbiAgICAgIGVsc2Uge1xuICAgICAgICBjb25zdCBMID0gc2MobywgZywge1xuICAgICAgICAgIGlkOiBbbiwgdSwgZy5pZCwgZiA9PSBudWxsID8gdm9pZCAwIDogZi5pZF0uZmlsdGVyKEJvb2xlYW4pLmpvaW4oXCJfXCIpLFxuICAgICAgICAgIGlzUGxhY2Vob2xkZXI6IHYsXG4gICAgICAgICAgcGxhY2Vob2xkZXJJZDogdiA/IGAke3ouZmlsdGVyKCh5KSA9PiB5LmNvbHVtbiA9PT0gZykubGVuZ3RofWAgOiB2b2lkIDAsXG4gICAgICAgICAgZGVwdGg6IHUsXG4gICAgICAgICAgaW5kZXg6IHoubGVuZ3RoXG4gICAgICAgIH0pO1xuICAgICAgICBMLnN1YkhlYWRlcnMucHVzaChmKSwgei5wdXNoKEwpO1xuICAgICAgfVxuICAgICAgQS5oZWFkZXJzLnB1c2goZiksIGYuaGVhZGVyR3JvdXAgPSBBO1xuICAgIH0pLCBsLnB1c2goQSksIHUgPiAwICYmIHAoeiwgdSAtIDEpO1xuICB9LCBkID0gdC5tYXAoKE0sIHUpID0+IHNjKG8sIE0sIHtcbiAgICBkZXB0aDogYSxcbiAgICBpbmRleDogdVxuICB9KSk7XG4gIHAoZCwgYSAtIDEpLCBsLnJldmVyc2UoKTtcbiAgY29uc3QgYiA9IChNKSA9PiBNLmZpbHRlcigoQSkgPT4gQS5jb2x1bW4uZ2V0SXNWaXNpYmxlKCkpLm1hcCgoQSkgPT4ge1xuICAgIGxldCB6ID0gMCwgZiA9IDAsIE8gPSBbMF07XG4gICAgQS5zdWJIZWFkZXJzICYmIEEuc3ViSGVhZGVycy5sZW5ndGggPyAoTyA9IFtdLCBiKEEuc3ViSGVhZGVycykuZm9yRWFjaCgoZykgPT4ge1xuICAgICAgbGV0IHtcbiAgICAgICAgY29sU3BhbjogdixcbiAgICAgICAgcm93U3BhbjogTFxuICAgICAgfSA9IGc7XG4gICAgICB6ICs9IHYsIE8ucHVzaChMKTtcbiAgICB9KSkgOiB6ID0gMTtcbiAgICBjb25zdCBoID0gTWF0aC5taW4oLi4uTyk7XG4gICAgcmV0dXJuIGYgPSBmICsgaCwgQS5jb2xTcGFuID0geiwgQS5yb3dTcGFuID0gZiwge1xuICAgICAgY29sU3BhbjogeixcbiAgICAgIHJvd1NwYW46IGZcbiAgICB9O1xuICB9KTtcbiAgcmV0dXJuIGIoKHIgPSAoaSA9IGxbMF0pID09IG51bGwgPyB2b2lkIDAgOiBpLmhlYWRlcnMpICE9IG51bGwgPyByIDogW10pLCBsO1xufVxuY29uc3QgWTYgPSAoZSwgdCwgbywgbiwgciwgaSwgYSkgPT4ge1xuICBsZXQgcyA9IHtcbiAgICBpZDogdCxcbiAgICBpbmRleDogbixcbiAgICBvcmlnaW5hbDogbyxcbiAgICBkZXB0aDogcixcbiAgICBwYXJlbnRJZDogYSxcbiAgICBfdmFsdWVzQ2FjaGU6IHt9LFxuICAgIF91bmlxdWVWYWx1ZXNDYWNoZToge30sXG4gICAgZ2V0VmFsdWU6IChsKSA9PiB7XG4gICAgICBpZiAocy5fdmFsdWVzQ2FjaGUuaGFzT3duUHJvcGVydHkobCkpXG4gICAgICAgIHJldHVybiBzLl92YWx1ZXNDYWNoZVtsXTtcbiAgICAgIGNvbnN0IHAgPSBlLmdldENvbHVtbihsKTtcbiAgICAgIGlmIChwICE9IG51bGwgJiYgcC5hY2Nlc3NvckZuKVxuICAgICAgICByZXR1cm4gcy5fdmFsdWVzQ2FjaGVbbF0gPSBwLmFjY2Vzc29yRm4ocy5vcmlnaW5hbCwgbiksIHMuX3ZhbHVlc0NhY2hlW2xdO1xuICAgIH0sXG4gICAgZ2V0VW5pcXVlVmFsdWVzOiAobCkgPT4ge1xuICAgICAgaWYgKHMuX3VuaXF1ZVZhbHVlc0NhY2hlLmhhc093blByb3BlcnR5KGwpKVxuICAgICAgICByZXR1cm4gcy5fdW5pcXVlVmFsdWVzQ2FjaGVbbF07XG4gICAgICBjb25zdCBwID0gZS5nZXRDb2x1bW4obCk7XG4gICAgICBpZiAocCAhPSBudWxsICYmIHAuYWNjZXNzb3JGbilcbiAgICAgICAgcmV0dXJuIHAuY29sdW1uRGVmLmdldFVuaXF1ZVZhbHVlcyA/IChzLl91bmlxdWVWYWx1ZXNDYWNoZVtsXSA9IHAuY29sdW1uRGVmLmdldFVuaXF1ZVZhbHVlcyhzLm9yaWdpbmFsLCBuKSwgcy5fdW5pcXVlVmFsdWVzQ2FjaGVbbF0pIDogKHMuX3VuaXF1ZVZhbHVlc0NhY2hlW2xdID0gW3MuZ2V0VmFsdWUobCldLCBzLl91bmlxdWVWYWx1ZXNDYWNoZVtsXSk7XG4gICAgfSxcbiAgICByZW5kZXJWYWx1ZTogKGwpID0+IHtcbiAgICAgIHZhciBwO1xuICAgICAgcmV0dXJuIChwID0gcy5nZXRWYWx1ZShsKSkgIT0gbnVsbCA/IHAgOiBlLm9wdGlvbnMucmVuZGVyRmFsbGJhY2tWYWx1ZTtcbiAgICB9LFxuICAgIHN1YlJvd3M6IGkgPz8gW10sXG4gICAgZ2V0TGVhZlJvd3M6ICgpID0+IGRWKHMuc3ViUm93cywgKGwpID0+IGwuc3ViUm93cyksXG4gICAgZ2V0UGFyZW50Um93OiAoKSA9PiBzLnBhcmVudElkID8gZS5nZXRSb3cocy5wYXJlbnRJZCwgITApIDogdm9pZCAwLFxuICAgIGdldFBhcmVudFJvd3M6ICgpID0+IHtcbiAgICAgIGxldCBsID0gW10sIHAgPSBzO1xuICAgICAgZm9yICg7IDsgKSB7XG4gICAgICAgIGNvbnN0IGQgPSBwLmdldFBhcmVudFJvdygpO1xuICAgICAgICBpZiAoIWQpXG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGwucHVzaChkKSwgcCA9IGQ7XG4gICAgICB9XG4gICAgICByZXR1cm4gbC5yZXZlcnNlKCk7XG4gICAgfSxcbiAgICBnZXRBbGxDZWxsczogTTAoKCkgPT4gW2UuZ2V0QWxsTGVhZkNvbHVtbnMoKV0sIChsKSA9PiBsLm1hcCgocCkgPT4gYlYoZSwgcywgcCwgcC5pZCkpLCBBMChlLm9wdGlvbnMsIFwiZGVidWdSb3dzXCIsIFwiZ2V0QWxsQ2VsbHNcIikpLFxuICAgIF9nZXRBbGxDZWxsc0J5Q29sdW1uSWQ6IE0wKCgpID0+IFtzLmdldEFsbENlbGxzKCldLCAobCkgPT4gbC5yZWR1Y2UoKHAsIGQpID0+IChwW2QuY29sdW1uLmlkXSA9IGQsIHApLCB7fSksIEEwKGUub3B0aW9ucywgXCJkZWJ1Z1Jvd3NcIiwgXCJnZXRBbGxDZWxsc0J5Q29sdW1uSWRcIikpXG4gIH07XG4gIGZvciAobGV0IGwgPSAwOyBsIDwgZS5fZmVhdHVyZXMubGVuZ3RoOyBsKyspIHtcbiAgICBjb25zdCBwID0gZS5fZmVhdHVyZXNbbF07XG4gICAgcCA9PSBudWxsIHx8IHAuY3JlYXRlUm93ID09IG51bGwgfHwgcC5jcmVhdGVSb3cocywgZSk7XG4gIH1cbiAgcmV0dXJuIHM7XG59LCB1ViA9IHtcbiAgY3JlYXRlQ29sdW1uOiAoZSwgdCkgPT4ge1xuICAgIGUuX2dldEZhY2V0ZWRSb3dNb2RlbCA9IHQub3B0aW9ucy5nZXRGYWNldGVkUm93TW9kZWwgJiYgdC5vcHRpb25zLmdldEZhY2V0ZWRSb3dNb2RlbCh0LCBlLmlkKSwgZS5nZXRGYWNldGVkUm93TW9kZWwgPSAoKSA9PiBlLl9nZXRGYWNldGVkUm93TW9kZWwgPyBlLl9nZXRGYWNldGVkUm93TW9kZWwoKSA6IHQuZ2V0UHJlRmlsdGVyZWRSb3dNb2RlbCgpLCBlLl9nZXRGYWNldGVkVW5pcXVlVmFsdWVzID0gdC5vcHRpb25zLmdldEZhY2V0ZWRVbmlxdWVWYWx1ZXMgJiYgdC5vcHRpb25zLmdldEZhY2V0ZWRVbmlxdWVWYWx1ZXModCwgZS5pZCksIGUuZ2V0RmFjZXRlZFVuaXF1ZVZhbHVlcyA9ICgpID0+IGUuX2dldEZhY2V0ZWRVbmlxdWVWYWx1ZXMgPyBlLl9nZXRGYWNldGVkVW5pcXVlVmFsdWVzKCkgOiAvKiBAX19QVVJFX18gKi8gbmV3IE1hcCgpLCBlLl9nZXRGYWNldGVkTWluTWF4VmFsdWVzID0gdC5vcHRpb25zLmdldEZhY2V0ZWRNaW5NYXhWYWx1ZXMgJiYgdC5vcHRpb25zLmdldEZhY2V0ZWRNaW5NYXhWYWx1ZXModCwgZS5pZCksIGUuZ2V0RmFjZXRlZE1pbk1heFZhbHVlcyA9ICgpID0+IHtcbiAgICAgIGlmIChlLl9nZXRGYWNldGVkTWluTWF4VmFsdWVzKVxuICAgICAgICByZXR1cm4gZS5fZ2V0RmFjZXRlZE1pbk1heFZhbHVlcygpO1xuICAgIH07XG4gIH1cbn0sIEFiID0gKGUsIHQsIG8pID0+IHtcbiAgdmFyIG4sIHI7XG4gIGNvbnN0IGkgPSBvID09IG51bGwgfHwgKG4gPSBvLnRvU3RyaW5nKCkpID09IG51bGwgPyB2b2lkIDAgOiBuLnRvTG93ZXJDYXNlKCk7XG4gIHJldHVybiAhISghKChyID0gZS5nZXRWYWx1ZSh0KSkgPT0gbnVsbCB8fCAociA9IHIudG9TdHJpbmcoKSkgPT0gbnVsbCB8fCAociA9IHIudG9Mb3dlckNhc2UoKSkgPT0gbnVsbCkgJiYgci5pbmNsdWRlcyhpKSk7XG59O1xuQWIuYXV0b1JlbW92ZSA9IChlKSA9PiBMZShlKTtcbmNvbnN0IHViID0gKGUsIHQsIG8pID0+IHtcbiAgdmFyIG47XG4gIHJldHVybiAhISghKChuID0gZS5nZXRWYWx1ZSh0KSkgPT0gbnVsbCB8fCAobiA9IG4udG9TdHJpbmcoKSkgPT0gbnVsbCkgJiYgbi5pbmNsdWRlcyhvKSk7XG59O1xudWIuYXV0b1JlbW92ZSA9IChlKSA9PiBMZShlKTtcbmNvbnN0IHpiID0gKGUsIHQsIG8pID0+IHtcbiAgdmFyIG47XG4gIHJldHVybiAoKG4gPSBlLmdldFZhbHVlKHQpKSA9PSBudWxsIHx8IChuID0gbi50b1N0cmluZygpKSA9PSBudWxsID8gdm9pZCAwIDogbi50b0xvd2VyQ2FzZSgpKSA9PT0gKG8gPT0gbnVsbCA/IHZvaWQgMCA6IG8udG9Mb3dlckNhc2UoKSk7XG59O1xuemIuYXV0b1JlbW92ZSA9IChlKSA9PiBMZShlKTtcbmNvbnN0IGhiID0gKGUsIHQsIG8pID0+IHtcbiAgdmFyIG47XG4gIHJldHVybiAobiA9IGUuZ2V0VmFsdWUodCkpID09IG51bGwgPyB2b2lkIDAgOiBuLmluY2x1ZGVzKG8pO1xufTtcbmhiLmF1dG9SZW1vdmUgPSAoZSkgPT4gTGUoZSkgfHwgIShlICE9IG51bGwgJiYgZS5sZW5ndGgpO1xuY29uc3QgT2IgPSAoZSwgdCwgbykgPT4gIW8uc29tZSgobikgPT4ge1xuICB2YXIgcjtcbiAgcmV0dXJuICEoKHIgPSBlLmdldFZhbHVlKHQpKSAhPSBudWxsICYmIHIuaW5jbHVkZXMobikpO1xufSk7XG5PYi5hdXRvUmVtb3ZlID0gKGUpID0+IExlKGUpIHx8ICEoZSAhPSBudWxsICYmIGUubGVuZ3RoKTtcbmNvbnN0IGZiID0gKGUsIHQsIG8pID0+IG8uc29tZSgobikgPT4ge1xuICB2YXIgcjtcbiAgcmV0dXJuIChyID0gZS5nZXRWYWx1ZSh0KSkgPT0gbnVsbCA/IHZvaWQgMCA6IHIuaW5jbHVkZXMobik7XG59KTtcbmZiLmF1dG9SZW1vdmUgPSAoZSkgPT4gTGUoZSkgfHwgIShlICE9IG51bGwgJiYgZS5sZW5ndGgpO1xuY29uc3QgZ2IgPSAoZSwgdCwgbykgPT4gZS5nZXRWYWx1ZSh0KSA9PT0gbztcbmdiLmF1dG9SZW1vdmUgPSAoZSkgPT4gTGUoZSk7XG5jb25zdCBDYiA9IChlLCB0LCBvKSA9PiBlLmdldFZhbHVlKHQpID09IG87XG5DYi5hdXRvUmVtb3ZlID0gKGUpID0+IExlKGUpO1xuY29uc3QgRzYgPSAoZSwgdCwgbykgPT4ge1xuICBsZXQgW24sIHJdID0gbztcbiAgY29uc3QgaSA9IGUuZ2V0VmFsdWUodCk7XG4gIHJldHVybiBpID49IG4gJiYgaSA8PSByO1xufTtcbkc2LnJlc29sdmVGaWx0ZXJWYWx1ZSA9IChlKSA9PiB7XG4gIGxldCBbdCwgb10gPSBlLCBuID0gdHlwZW9mIHQgIT0gXCJudW1iZXJcIiA/IHBhcnNlRmxvYXQodCkgOiB0LCByID0gdHlwZW9mIG8gIT0gXCJudW1iZXJcIiA/IHBhcnNlRmxvYXQobykgOiBvLCBpID0gdCA9PT0gbnVsbCB8fCBOdW1iZXIuaXNOYU4obikgPyAtMSAvIDAgOiBuLCBhID0gbyA9PT0gbnVsbCB8fCBOdW1iZXIuaXNOYU4ocikgPyAxIC8gMCA6IHI7XG4gIGlmIChpID4gYSkge1xuICAgIGNvbnN0IHMgPSBpO1xuICAgIGkgPSBhLCBhID0gcztcbiAgfVxuICByZXR1cm4gW2ksIGFdO1xufTtcbkc2LmF1dG9SZW1vdmUgPSAoZSkgPT4gTGUoZSkgfHwgTGUoZVswXSkgJiYgTGUoZVsxXSk7XG5jb25zdCBfZSA9IHtcbiAgaW5jbHVkZXNTdHJpbmc6IEFiLFxuICBpbmNsdWRlc1N0cmluZ1NlbnNpdGl2ZTogdWIsXG4gIGVxdWFsc1N0cmluZzogemIsXG4gIGFyckluY2x1ZGVzOiBoYixcbiAgYXJySW5jbHVkZXNBbGw6IE9iLFxuICBhcnJJbmNsdWRlc1NvbWU6IGZiLFxuICBlcXVhbHM6IGdiLFxuICB3ZWFrRXF1YWxzOiBDYixcbiAgaW5OdW1iZXJSYW5nZTogRzZcbn07XG5mdW5jdGlvbiBMZShlKSB7XG4gIHJldHVybiBlID09IG51bGwgfHwgZSA9PT0gXCJcIjtcbn1cbmNvbnN0IHpWID0ge1xuICBnZXREZWZhdWx0Q29sdW1uRGVmOiAoKSA9PiAoe1xuICAgIGZpbHRlckZuOiBcImF1dG9cIlxuICB9KSxcbiAgZ2V0SW5pdGlhbFN0YXRlOiAoZSkgPT4gKHtcbiAgICBjb2x1bW5GaWx0ZXJzOiBbXSxcbiAgICAuLi5lXG4gIH0pLFxuICBnZXREZWZhdWx0T3B0aW9uczogKGUpID0+ICh7XG4gICAgb25Db2x1bW5GaWx0ZXJzQ2hhbmdlOiBvZShcImNvbHVtbkZpbHRlcnNcIiwgZSksXG4gICAgZmlsdGVyRnJvbUxlYWZSb3dzOiAhMSxcbiAgICBtYXhMZWFmUm93RmlsdGVyRGVwdGg6IDEwMFxuICB9KSxcbiAgY3JlYXRlQ29sdW1uOiAoZSwgdCkgPT4ge1xuICAgIGUuZ2V0QXV0b0ZpbHRlckZuID0gKCkgPT4ge1xuICAgICAgY29uc3QgbyA9IHQuZ2V0Q29yZVJvd01vZGVsKCkuZmxhdFJvd3NbMF0sIG4gPSBvID09IG51bGwgPyB2b2lkIDAgOiBvLmdldFZhbHVlKGUuaWQpO1xuICAgICAgcmV0dXJuIHR5cGVvZiBuID09IFwic3RyaW5nXCIgPyBfZS5pbmNsdWRlc1N0cmluZyA6IHR5cGVvZiBuID09IFwibnVtYmVyXCIgPyBfZS5pbk51bWJlclJhbmdlIDogdHlwZW9mIG4gPT0gXCJib29sZWFuXCIgfHwgbiAhPT0gbnVsbCAmJiB0eXBlb2YgbiA9PSBcIm9iamVjdFwiID8gX2UuZXF1YWxzIDogQXJyYXkuaXNBcnJheShuKSA/IF9lLmFyckluY2x1ZGVzIDogX2Uud2Vha0VxdWFscztcbiAgICB9LCBlLmdldEZpbHRlckZuID0gKCkgPT4ge1xuICAgICAgdmFyIG8sIG47XG4gICAgICByZXR1cm4gcmkoZS5jb2x1bW5EZWYuZmlsdGVyRm4pID8gZS5jb2x1bW5EZWYuZmlsdGVyRm4gOiBlLmNvbHVtbkRlZi5maWx0ZXJGbiA9PT0gXCJhdXRvXCIgPyBlLmdldEF1dG9GaWx0ZXJGbigpIDogKFxuICAgICAgICAvLyBAdHMtaWdub3JlXG4gICAgICAgIChvID0gKG4gPSB0Lm9wdGlvbnMuZmlsdGVyRm5zKSA9PSBudWxsID8gdm9pZCAwIDogbltlLmNvbHVtbkRlZi5maWx0ZXJGbl0pICE9IG51bGwgPyBvIDogX2VbZS5jb2x1bW5EZWYuZmlsdGVyRm5dXG4gICAgICApO1xuICAgIH0sIGUuZ2V0Q2FuRmlsdGVyID0gKCkgPT4ge1xuICAgICAgdmFyIG8sIG4sIHI7XG4gICAgICByZXR1cm4gKChvID0gZS5jb2x1bW5EZWYuZW5hYmxlQ29sdW1uRmlsdGVyKSAhPSBudWxsID8gbyA6ICEwKSAmJiAoKG4gPSB0Lm9wdGlvbnMuZW5hYmxlQ29sdW1uRmlsdGVycykgIT0gbnVsbCA/IG4gOiAhMCkgJiYgKChyID0gdC5vcHRpb25zLmVuYWJsZUZpbHRlcnMpICE9IG51bGwgPyByIDogITApICYmICEhZS5hY2Nlc3NvckZuO1xuICAgIH0sIGUuZ2V0SXNGaWx0ZXJlZCA9ICgpID0+IGUuZ2V0RmlsdGVySW5kZXgoKSA+IC0xLCBlLmdldEZpbHRlclZhbHVlID0gKCkgPT4ge1xuICAgICAgdmFyIG87XG4gICAgICByZXR1cm4gKG8gPSB0LmdldFN0YXRlKCkuY29sdW1uRmlsdGVycykgPT0gbnVsbCB8fCAobyA9IG8uZmluZCgobikgPT4gbi5pZCA9PT0gZS5pZCkpID09IG51bGwgPyB2b2lkIDAgOiBvLnZhbHVlO1xuICAgIH0sIGUuZ2V0RmlsdGVySW5kZXggPSAoKSA9PiB7XG4gICAgICB2YXIgbywgbjtcbiAgICAgIHJldHVybiAobyA9IChuID0gdC5nZXRTdGF0ZSgpLmNvbHVtbkZpbHRlcnMpID09IG51bGwgPyB2b2lkIDAgOiBuLmZpbmRJbmRleCgocikgPT4gci5pZCA9PT0gZS5pZCkpICE9IG51bGwgPyBvIDogLTE7XG4gICAgfSwgZS5zZXRGaWx0ZXJWYWx1ZSA9IChvKSA9PiB7XG4gICAgICB0LnNldENvbHVtbkZpbHRlcnMoKG4pID0+IHtcbiAgICAgICAgY29uc3QgciA9IGUuZ2V0RmlsdGVyRm4oKSwgaSA9IG4gPT0gbnVsbCA/IHZvaWQgMCA6IG4uZmluZCgoZCkgPT4gZC5pZCA9PT0gZS5pZCksIGEgPSB4dChvLCBpID8gaS52YWx1ZSA6IHZvaWQgMCk7XG4gICAgICAgIGlmIChjYyhyLCBhLCBlKSkge1xuICAgICAgICAgIHZhciBzO1xuICAgICAgICAgIHJldHVybiAocyA9IG4gPT0gbnVsbCA/IHZvaWQgMCA6IG4uZmlsdGVyKChkKSA9PiBkLmlkICE9PSBlLmlkKSkgIT0gbnVsbCA/IHMgOiBbXTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBsID0ge1xuICAgICAgICAgIGlkOiBlLmlkLFxuICAgICAgICAgIHZhbHVlOiBhXG4gICAgICAgIH07XG4gICAgICAgIGlmIChpKSB7XG4gICAgICAgICAgdmFyIHA7XG4gICAgICAgICAgcmV0dXJuIChwID0gbiA9PSBudWxsID8gdm9pZCAwIDogbi5tYXAoKGQpID0+IGQuaWQgPT09IGUuaWQgPyBsIDogZCkpICE9IG51bGwgPyBwIDogW107XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG4gIT0gbnVsbCAmJiBuLmxlbmd0aCA/IFsuLi5uLCBsXSA6IFtsXTtcbiAgICAgIH0pO1xuICAgIH07XG4gIH0sXG4gIGNyZWF0ZVJvdzogKGUsIHQpID0+IHtcbiAgICBlLmNvbHVtbkZpbHRlcnMgPSB7fSwgZS5jb2x1bW5GaWx0ZXJzTWV0YSA9IHt9O1xuICB9LFxuICBjcmVhdGVUYWJsZTogKGUpID0+IHtcbiAgICBlLnNldENvbHVtbkZpbHRlcnMgPSAodCkgPT4ge1xuICAgICAgY29uc3QgbyA9IGUuZ2V0QWxsTGVhZkNvbHVtbnMoKSwgbiA9IChyKSA9PiB7XG4gICAgICAgIHZhciBpO1xuICAgICAgICByZXR1cm4gKGkgPSB4dCh0LCByKSkgPT0gbnVsbCA/IHZvaWQgMCA6IGkuZmlsdGVyKChhKSA9PiB7XG4gICAgICAgICAgY29uc3QgcyA9IG8uZmluZCgobCkgPT4gbC5pZCA9PT0gYS5pZCk7XG4gICAgICAgICAgaWYgKHMpIHtcbiAgICAgICAgICAgIGNvbnN0IGwgPSBzLmdldEZpbHRlckZuKCk7XG4gICAgICAgICAgICBpZiAoY2MobCwgYS52YWx1ZSwgcykpXG4gICAgICAgICAgICAgIHJldHVybiAhMTtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuICEwO1xuICAgICAgICB9KTtcbiAgICAgIH07XG4gICAgICBlLm9wdGlvbnMub25Db2x1bW5GaWx0ZXJzQ2hhbmdlID09IG51bGwgfHwgZS5vcHRpb25zLm9uQ29sdW1uRmlsdGVyc0NoYW5nZShuKTtcbiAgICB9LCBlLnJlc2V0Q29sdW1uRmlsdGVycyA9ICh0KSA9PiB7XG4gICAgICB2YXIgbywgbjtcbiAgICAgIGUuc2V0Q29sdW1uRmlsdGVycyh0ID8gW10gOiAobyA9IChuID0gZS5pbml0aWFsU3RhdGUpID09IG51bGwgPyB2b2lkIDAgOiBuLmNvbHVtbkZpbHRlcnMpICE9IG51bGwgPyBvIDogW10pO1xuICAgIH0sIGUuZ2V0UHJlRmlsdGVyZWRSb3dNb2RlbCA9ICgpID0+IGUuZ2V0Q29yZVJvd01vZGVsKCksIGUuZ2V0RmlsdGVyZWRSb3dNb2RlbCA9ICgpID0+ICghZS5fZ2V0RmlsdGVyZWRSb3dNb2RlbCAmJiBlLm9wdGlvbnMuZ2V0RmlsdGVyZWRSb3dNb2RlbCAmJiAoZS5fZ2V0RmlsdGVyZWRSb3dNb2RlbCA9IGUub3B0aW9ucy5nZXRGaWx0ZXJlZFJvd01vZGVsKGUpKSwgZS5vcHRpb25zLm1hbnVhbEZpbHRlcmluZyB8fCAhZS5fZ2V0RmlsdGVyZWRSb3dNb2RlbCA/IGUuZ2V0UHJlRmlsdGVyZWRSb3dNb2RlbCgpIDogZS5fZ2V0RmlsdGVyZWRSb3dNb2RlbCgpKTtcbiAgfVxufTtcbmZ1bmN0aW9uIGNjKGUsIHQsIG8pIHtcbiAgcmV0dXJuIChlICYmIGUuYXV0b1JlbW92ZSA/IGUuYXV0b1JlbW92ZSh0LCBvKSA6ICExKSB8fCB0eXBlb2YgdCA+IFwidVwiIHx8IHR5cGVvZiB0ID09IFwic3RyaW5nXCIgJiYgIXQ7XG59XG5jb25zdCBoViA9IChlLCB0LCBvKSA9PiBvLnJlZHVjZSgobiwgcikgPT4ge1xuICBjb25zdCBpID0gci5nZXRWYWx1ZShlKTtcbiAgcmV0dXJuIG4gKyAodHlwZW9mIGkgPT0gXCJudW1iZXJcIiA/IGkgOiAwKTtcbn0sIDApLCBPViA9IChlLCB0LCBvKSA9PiB7XG4gIGxldCBuO1xuICByZXR1cm4gby5mb3JFYWNoKChyKSA9PiB7XG4gICAgY29uc3QgaSA9IHIuZ2V0VmFsdWUoZSk7XG4gICAgaSAhPSBudWxsICYmIChuID4gaSB8fCBuID09PSB2b2lkIDAgJiYgaSA+PSBpKSAmJiAobiA9IGkpO1xuICB9KSwgbjtcbn0sIGZWID0gKGUsIHQsIG8pID0+IHtcbiAgbGV0IG47XG4gIHJldHVybiBvLmZvckVhY2goKHIpID0+IHtcbiAgICBjb25zdCBpID0gci5nZXRWYWx1ZShlKTtcbiAgICBpICE9IG51bGwgJiYgKG4gPCBpIHx8IG4gPT09IHZvaWQgMCAmJiBpID49IGkpICYmIChuID0gaSk7XG4gIH0pLCBuO1xufSwgZ1YgPSAoZSwgdCwgbykgPT4ge1xuICBsZXQgbiwgcjtcbiAgcmV0dXJuIG8uZm9yRWFjaCgoaSkgPT4ge1xuICAgIGNvbnN0IGEgPSBpLmdldFZhbHVlKGUpO1xuICAgIGEgIT0gbnVsbCAmJiAobiA9PT0gdm9pZCAwID8gYSA+PSBhICYmIChuID0gciA9IGEpIDogKG4gPiBhICYmIChuID0gYSksIHIgPCBhICYmIChyID0gYSkpKTtcbiAgfSksIFtuLCByXTtcbn0sIENWID0gKGUsIHQpID0+IHtcbiAgbGV0IG8gPSAwLCBuID0gMDtcbiAgaWYgKHQuZm9yRWFjaCgocikgPT4ge1xuICAgIGxldCBpID0gci5nZXRWYWx1ZShlKTtcbiAgICBpICE9IG51bGwgJiYgKGkgPSAraSkgPj0gaSAmJiAoKytvLCBuICs9IGkpO1xuICB9KSwgbylcbiAgICByZXR1cm4gbiAvIG87XG59LCBtViA9IChlLCB0KSA9PiB7XG4gIGlmICghdC5sZW5ndGgpXG4gICAgcmV0dXJuO1xuICBjb25zdCBvID0gdC5tYXAoKGkpID0+IGkuZ2V0VmFsdWUoZSkpO1xuICBpZiAoIXBWKG8pKVxuICAgIHJldHVybjtcbiAgaWYgKG8ubGVuZ3RoID09PSAxKVxuICAgIHJldHVybiBvWzBdO1xuICBjb25zdCBuID0gTWF0aC5mbG9vcihvLmxlbmd0aCAvIDIpLCByID0gby5zb3J0KChpLCBhKSA9PiBpIC0gYSk7XG4gIHJldHVybiBvLmxlbmd0aCAlIDIgIT09IDAgPyByW25dIDogKHJbbiAtIDFdICsgcltuXSkgLyAyO1xufSwgTFYgPSAoZSwgdCkgPT4gQXJyYXkuZnJvbShuZXcgU2V0KHQubWFwKChvKSA9PiBvLmdldFZhbHVlKGUpKSkudmFsdWVzKCkpLCB2ViA9IChlLCB0KSA9PiBuZXcgU2V0KHQubWFwKChvKSA9PiBvLmdldFZhbHVlKGUpKSkuc2l6ZSwgcVYgPSAoZSwgdCkgPT4gdC5sZW5ndGgsIGRhID0ge1xuICBzdW06IGhWLFxuICBtaW46IE9WLFxuICBtYXg6IGZWLFxuICBleHRlbnQ6IGdWLFxuICBtZWFuOiBDVixcbiAgbWVkaWFuOiBtVixcbiAgdW5pcXVlOiBMVixcbiAgdW5pcXVlQ291bnQ6IHZWLFxuICBjb3VudDogcVZcbn0sIHlWID0ge1xuICBnZXREZWZhdWx0Q29sdW1uRGVmOiAoKSA9PiAoe1xuICAgIGFnZ3JlZ2F0ZWRDZWxsOiAoZSkgPT4ge1xuICAgICAgdmFyIHQsIG87XG4gICAgICByZXR1cm4gKHQgPSAobyA9IGUuZ2V0VmFsdWUoKSkgPT0gbnVsbCB8fCBvLnRvU3RyaW5nID09IG51bGwgPyB2b2lkIDAgOiBvLnRvU3RyaW5nKCkpICE9IG51bGwgPyB0IDogbnVsbDtcbiAgICB9LFxuICAgIGFnZ3JlZ2F0aW9uRm46IFwiYXV0b1wiXG4gIH0pLFxuICBnZXRJbml0aWFsU3RhdGU6IChlKSA9PiAoe1xuICAgIGdyb3VwaW5nOiBbXSxcbiAgICAuLi5lXG4gIH0pLFxuICBnZXREZWZhdWx0T3B0aW9uczogKGUpID0+ICh7XG4gICAgb25Hcm91cGluZ0NoYW5nZTogb2UoXCJncm91cGluZ1wiLCBlKSxcbiAgICBncm91cGVkQ29sdW1uTW9kZTogXCJyZW9yZGVyXCJcbiAgfSksXG4gIGNyZWF0ZUNvbHVtbjogKGUsIHQpID0+IHtcbiAgICBlLnRvZ2dsZUdyb3VwaW5nID0gKCkgPT4ge1xuICAgICAgdC5zZXRHcm91cGluZygobykgPT4gbyAhPSBudWxsICYmIG8uaW5jbHVkZXMoZS5pZCkgPyBvLmZpbHRlcigobikgPT4gbiAhPT0gZS5pZCkgOiBbLi4ubyA/PyBbXSwgZS5pZF0pO1xuICAgIH0sIGUuZ2V0Q2FuR3JvdXAgPSAoKSA9PiB7XG4gICAgICB2YXIgbywgbjtcbiAgICAgIHJldHVybiAoKG8gPSBlLmNvbHVtbkRlZi5lbmFibGVHcm91cGluZykgIT0gbnVsbCA/IG8gOiAhMCkgJiYgKChuID0gdC5vcHRpb25zLmVuYWJsZUdyb3VwaW5nKSAhPSBudWxsID8gbiA6ICEwKSAmJiAoISFlLmFjY2Vzc29yRm4gfHwgISFlLmNvbHVtbkRlZi5nZXRHcm91cGluZ1ZhbHVlKTtcbiAgICB9LCBlLmdldElzR3JvdXBlZCA9ICgpID0+IHtcbiAgICAgIHZhciBvO1xuICAgICAgcmV0dXJuIChvID0gdC5nZXRTdGF0ZSgpLmdyb3VwaW5nKSA9PSBudWxsID8gdm9pZCAwIDogby5pbmNsdWRlcyhlLmlkKTtcbiAgICB9LCBlLmdldEdyb3VwZWRJbmRleCA9ICgpID0+IHtcbiAgICAgIHZhciBvO1xuICAgICAgcmV0dXJuIChvID0gdC5nZXRTdGF0ZSgpLmdyb3VwaW5nKSA9PSBudWxsID8gdm9pZCAwIDogby5pbmRleE9mKGUuaWQpO1xuICAgIH0sIGUuZ2V0VG9nZ2xlR3JvdXBpbmdIYW5kbGVyID0gKCkgPT4ge1xuICAgICAgY29uc3QgbyA9IGUuZ2V0Q2FuR3JvdXAoKTtcbiAgICAgIHJldHVybiAoKSA9PiB7XG4gICAgICAgIG8gJiYgZS50b2dnbGVHcm91cGluZygpO1xuICAgICAgfTtcbiAgICB9LCBlLmdldEF1dG9BZ2dyZWdhdGlvbkZuID0gKCkgPT4ge1xuICAgICAgY29uc3QgbyA9IHQuZ2V0Q29yZVJvd01vZGVsKCkuZmxhdFJvd3NbMF0sIG4gPSBvID09IG51bGwgPyB2b2lkIDAgOiBvLmdldFZhbHVlKGUuaWQpO1xuICAgICAgaWYgKHR5cGVvZiBuID09IFwibnVtYmVyXCIpXG4gICAgICAgIHJldHVybiBkYS5zdW07XG4gICAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKG4pID09PSBcIltvYmplY3QgRGF0ZV1cIilcbiAgICAgICAgcmV0dXJuIGRhLmV4dGVudDtcbiAgICB9LCBlLmdldEFnZ3JlZ2F0aW9uRm4gPSAoKSA9PiB7XG4gICAgICB2YXIgbywgbjtcbiAgICAgIGlmICghZSlcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCk7XG4gICAgICByZXR1cm4gcmkoZS5jb2x1bW5EZWYuYWdncmVnYXRpb25GbikgPyBlLmNvbHVtbkRlZi5hZ2dyZWdhdGlvbkZuIDogZS5jb2x1bW5EZWYuYWdncmVnYXRpb25GbiA9PT0gXCJhdXRvXCIgPyBlLmdldEF1dG9BZ2dyZWdhdGlvbkZuKCkgOiAobyA9IChuID0gdC5vcHRpb25zLmFnZ3JlZ2F0aW9uRm5zKSA9PSBudWxsID8gdm9pZCAwIDogbltlLmNvbHVtbkRlZi5hZ2dyZWdhdGlvbkZuXSkgIT0gbnVsbCA/IG8gOiBkYVtlLmNvbHVtbkRlZi5hZ2dyZWdhdGlvbkZuXTtcbiAgICB9O1xuICB9LFxuICBjcmVhdGVUYWJsZTogKGUpID0+IHtcbiAgICBlLnNldEdyb3VwaW5nID0gKHQpID0+IGUub3B0aW9ucy5vbkdyb3VwaW5nQ2hhbmdlID09IG51bGwgPyB2b2lkIDAgOiBlLm9wdGlvbnMub25Hcm91cGluZ0NoYW5nZSh0KSwgZS5yZXNldEdyb3VwaW5nID0gKHQpID0+IHtcbiAgICAgIHZhciBvLCBuO1xuICAgICAgZS5zZXRHcm91cGluZyh0ID8gW10gOiAobyA9IChuID0gZS5pbml0aWFsU3RhdGUpID09IG51bGwgPyB2b2lkIDAgOiBuLmdyb3VwaW5nKSAhPSBudWxsID8gbyA6IFtdKTtcbiAgICB9LCBlLmdldFByZUdyb3VwZWRSb3dNb2RlbCA9ICgpID0+IGUuZ2V0RmlsdGVyZWRSb3dNb2RlbCgpLCBlLmdldEdyb3VwZWRSb3dNb2RlbCA9ICgpID0+ICghZS5fZ2V0R3JvdXBlZFJvd01vZGVsICYmIGUub3B0aW9ucy5nZXRHcm91cGVkUm93TW9kZWwgJiYgKGUuX2dldEdyb3VwZWRSb3dNb2RlbCA9IGUub3B0aW9ucy5nZXRHcm91cGVkUm93TW9kZWwoZSkpLCBlLm9wdGlvbnMubWFudWFsR3JvdXBpbmcgfHwgIWUuX2dldEdyb3VwZWRSb3dNb2RlbCA/IGUuZ2V0UHJlR3JvdXBlZFJvd01vZGVsKCkgOiBlLl9nZXRHcm91cGVkUm93TW9kZWwoKSk7XG4gIH0sXG4gIGNyZWF0ZVJvdzogKGUsIHQpID0+IHtcbiAgICBlLmdldElzR3JvdXBlZCA9ICgpID0+ICEhZS5ncm91cGluZ0NvbHVtbklkLCBlLmdldEdyb3VwaW5nVmFsdWUgPSAobykgPT4ge1xuICAgICAgaWYgKGUuX2dyb3VwaW5nVmFsdWVzQ2FjaGUuaGFzT3duUHJvcGVydHkobykpXG4gICAgICAgIHJldHVybiBlLl9ncm91cGluZ1ZhbHVlc0NhY2hlW29dO1xuICAgICAgY29uc3QgbiA9IHQuZ2V0Q29sdW1uKG8pO1xuICAgICAgcmV0dXJuIG4gIT0gbnVsbCAmJiBuLmNvbHVtbkRlZi5nZXRHcm91cGluZ1ZhbHVlID8gKGUuX2dyb3VwaW5nVmFsdWVzQ2FjaGVbb10gPSBuLmNvbHVtbkRlZi5nZXRHcm91cGluZ1ZhbHVlKGUub3JpZ2luYWwpLCBlLl9ncm91cGluZ1ZhbHVlc0NhY2hlW29dKSA6IGUuZ2V0VmFsdWUobyk7XG4gICAgfSwgZS5fZ3JvdXBpbmdWYWx1ZXNDYWNoZSA9IHt9O1xuICB9LFxuICBjcmVhdGVDZWxsOiAoZSwgdCwgbywgbikgPT4ge1xuICAgIGUuZ2V0SXNHcm91cGVkID0gKCkgPT4gdC5nZXRJc0dyb3VwZWQoKSAmJiB0LmlkID09PSBvLmdyb3VwaW5nQ29sdW1uSWQsIGUuZ2V0SXNQbGFjZWhvbGRlciA9ICgpID0+ICFlLmdldElzR3JvdXBlZCgpICYmIHQuZ2V0SXNHcm91cGVkKCksIGUuZ2V0SXNBZ2dyZWdhdGVkID0gKCkgPT4ge1xuICAgICAgdmFyIHI7XG4gICAgICByZXR1cm4gIWUuZ2V0SXNHcm91cGVkKCkgJiYgIWUuZ2V0SXNQbGFjZWhvbGRlcigpICYmICEhKChyID0gby5zdWJSb3dzKSAhPSBudWxsICYmIHIubGVuZ3RoKTtcbiAgICB9O1xuICB9XG59O1xuZnVuY3Rpb24gd1YoZSwgdCwgbykge1xuICBpZiAoISh0ICE9IG51bGwgJiYgdC5sZW5ndGgpIHx8ICFvKVxuICAgIHJldHVybiBlO1xuICBjb25zdCBuID0gZS5maWx0ZXIoKGkpID0+ICF0LmluY2x1ZGVzKGkuaWQpKTtcbiAgcmV0dXJuIG8gPT09IFwicmVtb3ZlXCIgPyBuIDogWy4uLnQubWFwKChpKSA9PiBlLmZpbmQoKGEpID0+IGEuaWQgPT09IGkpKS5maWx0ZXIoQm9vbGVhbiksIC4uLm5dO1xufVxuY29uc3QgeFYgPSB7XG4gIGdldEluaXRpYWxTdGF0ZTogKGUpID0+ICh7XG4gICAgY29sdW1uT3JkZXI6IFtdLFxuICAgIC4uLmVcbiAgfSksXG4gIGdldERlZmF1bHRPcHRpb25zOiAoZSkgPT4gKHtcbiAgICBvbkNvbHVtbk9yZGVyQ2hhbmdlOiBvZShcImNvbHVtbk9yZGVyXCIsIGUpXG4gIH0pLFxuICBjcmVhdGVDb2x1bW46IChlLCB0KSA9PiB7XG4gICAgZS5nZXRJbmRleCA9IE0wKChvKSA9PiBbJG8odCwgbyldLCAobykgPT4gby5maW5kSW5kZXgoKG4pID0+IG4uaWQgPT09IGUuaWQpLCBBMCh0Lm9wdGlvbnMsIFwiZGVidWdDb2x1bW5zXCIsIFwiZ2V0SW5kZXhcIikpLCBlLmdldElzRmlyc3RDb2x1bW4gPSAobykgPT4ge1xuICAgICAgdmFyIG47XG4gICAgICByZXR1cm4gKChuID0gJG8odCwgbylbMF0pID09IG51bGwgPyB2b2lkIDAgOiBuLmlkKSA9PT0gZS5pZDtcbiAgICB9LCBlLmdldElzTGFzdENvbHVtbiA9IChvKSA9PiB7XG4gICAgICB2YXIgbjtcbiAgICAgIGNvbnN0IHIgPSAkbyh0LCBvKTtcbiAgICAgIHJldHVybiAoKG4gPSByW3IubGVuZ3RoIC0gMV0pID09IG51bGwgPyB2b2lkIDAgOiBuLmlkKSA9PT0gZS5pZDtcbiAgICB9O1xuICB9LFxuICBjcmVhdGVUYWJsZTogKGUpID0+IHtcbiAgICBlLnNldENvbHVtbk9yZGVyID0gKHQpID0+IGUub3B0aW9ucy5vbkNvbHVtbk9yZGVyQ2hhbmdlID09IG51bGwgPyB2b2lkIDAgOiBlLm9wdGlvbnMub25Db2x1bW5PcmRlckNoYW5nZSh0KSwgZS5yZXNldENvbHVtbk9yZGVyID0gKHQpID0+IHtcbiAgICAgIHZhciBvO1xuICAgICAgZS5zZXRDb2x1bW5PcmRlcih0ID8gW10gOiAobyA9IGUuaW5pdGlhbFN0YXRlLmNvbHVtbk9yZGVyKSAhPSBudWxsID8gbyA6IFtdKTtcbiAgICB9LCBlLl9nZXRPcmRlckNvbHVtbnNGbiA9IE0wKCgpID0+IFtlLmdldFN0YXRlKCkuY29sdW1uT3JkZXIsIGUuZ2V0U3RhdGUoKS5ncm91cGluZywgZS5vcHRpb25zLmdyb3VwZWRDb2x1bW5Nb2RlXSwgKHQsIG8sIG4pID0+IChyKSA9PiB7XG4gICAgICBsZXQgaSA9IFtdO1xuICAgICAgaWYgKCEodCAhPSBudWxsICYmIHQubGVuZ3RoKSlcbiAgICAgICAgaSA9IHI7XG4gICAgICBlbHNlIHtcbiAgICAgICAgY29uc3QgYSA9IFsuLi50XSwgcyA9IFsuLi5yXTtcbiAgICAgICAgZm9yICg7IHMubGVuZ3RoICYmIGEubGVuZ3RoOyApIHtcbiAgICAgICAgICBjb25zdCBsID0gYS5zaGlmdCgpLCBwID0gcy5maW5kSW5kZXgoKGQpID0+IGQuaWQgPT09IGwpO1xuICAgICAgICAgIHAgPiAtMSAmJiBpLnB1c2gocy5zcGxpY2UocCwgMSlbMF0pO1xuICAgICAgICB9XG4gICAgICAgIGkgPSBbLi4uaSwgLi4uc107XG4gICAgICB9XG4gICAgICByZXR1cm4gd1YoaSwgbywgbik7XG4gICAgfSwgQTAoZS5vcHRpb25zLCBcImRlYnVnVGFibGVcIiwgXCJfZ2V0T3JkZXJDb2x1bW5zRm5cIikpO1xuICB9XG59LCBiYSA9ICgpID0+ICh7XG4gIGxlZnQ6IFtdLFxuICByaWdodDogW11cbn0pLCBXViA9IHtcbiAgZ2V0SW5pdGlhbFN0YXRlOiAoZSkgPT4gKHtcbiAgICBjb2x1bW5QaW5uaW5nOiBiYSgpLFxuICAgIC4uLmVcbiAgfSksXG4gIGdldERlZmF1bHRPcHRpb25zOiAoZSkgPT4gKHtcbiAgICBvbkNvbHVtblBpbm5pbmdDaGFuZ2U6IG9lKFwiY29sdW1uUGlubmluZ1wiLCBlKVxuICB9KSxcbiAgY3JlYXRlQ29sdW1uOiAoZSwgdCkgPT4ge1xuICAgIGUucGluID0gKG8pID0+IHtcbiAgICAgIGNvbnN0IG4gPSBlLmdldExlYWZDb2x1bW5zKCkubWFwKChyKSA9PiByLmlkKS5maWx0ZXIoQm9vbGVhbik7XG4gICAgICB0LnNldENvbHVtblBpbm5pbmcoKHIpID0+IHtcbiAgICAgICAgdmFyIGksIGE7XG4gICAgICAgIGlmIChvID09PSBcInJpZ2h0XCIpIHtcbiAgICAgICAgICB2YXIgcywgbDtcbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgbGVmdDogKChzID0gciA9PSBudWxsID8gdm9pZCAwIDogci5sZWZ0KSAhPSBudWxsID8gcyA6IFtdKS5maWx0ZXIoKGIpID0+ICEobiAhPSBudWxsICYmIG4uaW5jbHVkZXMoYikpKSxcbiAgICAgICAgICAgIHJpZ2h0OiBbLi4uKChsID0gciA9PSBudWxsID8gdm9pZCAwIDogci5yaWdodCkgIT0gbnVsbCA/IGwgOiBbXSkuZmlsdGVyKChiKSA9PiAhKG4gIT0gbnVsbCAmJiBuLmluY2x1ZGVzKGIpKSksIC4uLm5dXG4gICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgICBpZiAobyA9PT0gXCJsZWZ0XCIpIHtcbiAgICAgICAgICB2YXIgcCwgZDtcbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgbGVmdDogWy4uLigocCA9IHIgPT0gbnVsbCA/IHZvaWQgMCA6IHIubGVmdCkgIT0gbnVsbCA/IHAgOiBbXSkuZmlsdGVyKChiKSA9PiAhKG4gIT0gbnVsbCAmJiBuLmluY2x1ZGVzKGIpKSksIC4uLm5dLFxuICAgICAgICAgICAgcmlnaHQ6ICgoZCA9IHIgPT0gbnVsbCA/IHZvaWQgMCA6IHIucmlnaHQpICE9IG51bGwgPyBkIDogW10pLmZpbHRlcigoYikgPT4gIShuICE9IG51bGwgJiYgbi5pbmNsdWRlcyhiKSkpXG4gICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIGxlZnQ6ICgoaSA9IHIgPT0gbnVsbCA/IHZvaWQgMCA6IHIubGVmdCkgIT0gbnVsbCA/IGkgOiBbXSkuZmlsdGVyKChiKSA9PiAhKG4gIT0gbnVsbCAmJiBuLmluY2x1ZGVzKGIpKSksXG4gICAgICAgICAgcmlnaHQ6ICgoYSA9IHIgPT0gbnVsbCA/IHZvaWQgMCA6IHIucmlnaHQpICE9IG51bGwgPyBhIDogW10pLmZpbHRlcigoYikgPT4gIShuICE9IG51bGwgJiYgbi5pbmNsdWRlcyhiKSkpXG4gICAgICAgIH07XG4gICAgICB9KTtcbiAgICB9LCBlLmdldENhblBpbiA9ICgpID0+IGUuZ2V0TGVhZkNvbHVtbnMoKS5zb21lKChuKSA9PiB7XG4gICAgICB2YXIgciwgaSwgYTtcbiAgICAgIHJldHVybiAoKHIgPSBuLmNvbHVtbkRlZi5lbmFibGVQaW5uaW5nKSAhPSBudWxsID8gciA6ICEwKSAmJiAoKGkgPSAoYSA9IHQub3B0aW9ucy5lbmFibGVDb2x1bW5QaW5uaW5nKSAhPSBudWxsID8gYSA6IHQub3B0aW9ucy5lbmFibGVQaW5uaW5nKSAhPSBudWxsID8gaSA6ICEwKTtcbiAgICB9KSwgZS5nZXRJc1Bpbm5lZCA9ICgpID0+IHtcbiAgICAgIGNvbnN0IG8gPSBlLmdldExlYWZDb2x1bW5zKCkubWFwKChzKSA9PiBzLmlkKSwge1xuICAgICAgICBsZWZ0OiBuLFxuICAgICAgICByaWdodDogclxuICAgICAgfSA9IHQuZ2V0U3RhdGUoKS5jb2x1bW5QaW5uaW5nLCBpID0gby5zb21lKChzKSA9PiBuID09IG51bGwgPyB2b2lkIDAgOiBuLmluY2x1ZGVzKHMpKSwgYSA9IG8uc29tZSgocykgPT4gciA9PSBudWxsID8gdm9pZCAwIDogci5pbmNsdWRlcyhzKSk7XG4gICAgICByZXR1cm4gaSA/IFwibGVmdFwiIDogYSA/IFwicmlnaHRcIiA6ICExO1xuICAgIH0sIGUuZ2V0UGlubmVkSW5kZXggPSAoKSA9PiB7XG4gICAgICB2YXIgbywgbjtcbiAgICAgIGNvbnN0IHIgPSBlLmdldElzUGlubmVkKCk7XG4gICAgICByZXR1cm4gciA/IChvID0gKG4gPSB0LmdldFN0YXRlKCkuY29sdW1uUGlubmluZykgPT0gbnVsbCB8fCAobiA9IG5bcl0pID09IG51bGwgPyB2b2lkIDAgOiBuLmluZGV4T2YoZS5pZCkpICE9IG51bGwgPyBvIDogLTEgOiAwO1xuICAgIH07XG4gIH0sXG4gIGNyZWF0ZVJvdzogKGUsIHQpID0+IHtcbiAgICBlLmdldENlbnRlclZpc2libGVDZWxscyA9IE0wKCgpID0+IFtlLl9nZXRBbGxWaXNpYmxlQ2VsbHMoKSwgdC5nZXRTdGF0ZSgpLmNvbHVtblBpbm5pbmcubGVmdCwgdC5nZXRTdGF0ZSgpLmNvbHVtblBpbm5pbmcucmlnaHRdLCAobywgbiwgcikgPT4ge1xuICAgICAgY29uc3QgaSA9IFsuLi5uID8/IFtdLCAuLi5yID8/IFtdXTtcbiAgICAgIHJldHVybiBvLmZpbHRlcigoYSkgPT4gIWkuaW5jbHVkZXMoYS5jb2x1bW4uaWQpKTtcbiAgICB9LCBBMCh0Lm9wdGlvbnMsIFwiZGVidWdSb3dzXCIsIFwiZ2V0Q2VudGVyVmlzaWJsZUNlbGxzXCIpKSwgZS5nZXRMZWZ0VmlzaWJsZUNlbGxzID0gTTAoKCkgPT4gW2UuX2dldEFsbFZpc2libGVDZWxscygpLCB0LmdldFN0YXRlKCkuY29sdW1uUGlubmluZy5sZWZ0XSwgKG8sIG4pID0+IChuID8/IFtdKS5tYXAoKGkpID0+IG8uZmluZCgoYSkgPT4gYS5jb2x1bW4uaWQgPT09IGkpKS5maWx0ZXIoQm9vbGVhbikubWFwKChpKSA9PiAoe1xuICAgICAgLi4uaSxcbiAgICAgIHBvc2l0aW9uOiBcImxlZnRcIlxuICAgIH0pKSwgQTAodC5vcHRpb25zLCBcImRlYnVnUm93c1wiLCBcImdldExlZnRWaXNpYmxlQ2VsbHNcIikpLCBlLmdldFJpZ2h0VmlzaWJsZUNlbGxzID0gTTAoKCkgPT4gW2UuX2dldEFsbFZpc2libGVDZWxscygpLCB0LmdldFN0YXRlKCkuY29sdW1uUGlubmluZy5yaWdodF0sIChvLCBuKSA9PiAobiA/PyBbXSkubWFwKChpKSA9PiBvLmZpbmQoKGEpID0+IGEuY29sdW1uLmlkID09PSBpKSkuZmlsdGVyKEJvb2xlYW4pLm1hcCgoaSkgPT4gKHtcbiAgICAgIC4uLmksXG4gICAgICBwb3NpdGlvbjogXCJyaWdodFwiXG4gICAgfSkpLCBBMCh0Lm9wdGlvbnMsIFwiZGVidWdSb3dzXCIsIFwiZ2V0UmlnaHRWaXNpYmxlQ2VsbHNcIikpO1xuICB9LFxuICBjcmVhdGVUYWJsZTogKGUpID0+IHtcbiAgICBlLnNldENvbHVtblBpbm5pbmcgPSAodCkgPT4gZS5vcHRpb25zLm9uQ29sdW1uUGlubmluZ0NoYW5nZSA9PSBudWxsID8gdm9pZCAwIDogZS5vcHRpb25zLm9uQ29sdW1uUGlubmluZ0NoYW5nZSh0KSwgZS5yZXNldENvbHVtblBpbm5pbmcgPSAodCkgPT4ge1xuICAgICAgdmFyIG8sIG47XG4gICAgICByZXR1cm4gZS5zZXRDb2x1bW5QaW5uaW5nKHQgPyBiYSgpIDogKG8gPSAobiA9IGUuaW5pdGlhbFN0YXRlKSA9PSBudWxsID8gdm9pZCAwIDogbi5jb2x1bW5QaW5uaW5nKSAhPSBudWxsID8gbyA6IGJhKCkpO1xuICAgIH0sIGUuZ2V0SXNTb21lQ29sdW1uc1Bpbm5lZCA9ICh0KSA9PiB7XG4gICAgICB2YXIgbztcbiAgICAgIGNvbnN0IG4gPSBlLmdldFN0YXRlKCkuY29sdW1uUGlubmluZztcbiAgICAgIGlmICghdCkge1xuICAgICAgICB2YXIgciwgaTtcbiAgICAgICAgcmV0dXJuICEhKChyID0gbi5sZWZ0KSAhPSBudWxsICYmIHIubGVuZ3RoIHx8IChpID0gbi5yaWdodCkgIT0gbnVsbCAmJiBpLmxlbmd0aCk7XG4gICAgICB9XG4gICAgICByZXR1cm4gISEoKG8gPSBuW3RdKSAhPSBudWxsICYmIG8ubGVuZ3RoKTtcbiAgICB9LCBlLmdldExlZnRMZWFmQ29sdW1ucyA9IE0wKCgpID0+IFtlLmdldEFsbExlYWZDb2x1bW5zKCksIGUuZ2V0U3RhdGUoKS5jb2x1bW5QaW5uaW5nLmxlZnRdLCAodCwgbykgPT4gKG8gPz8gW10pLm1hcCgobikgPT4gdC5maW5kKChyKSA9PiByLmlkID09PSBuKSkuZmlsdGVyKEJvb2xlYW4pLCBBMChlLm9wdGlvbnMsIFwiZGVidWdDb2x1bW5zXCIsIFwiZ2V0TGVmdExlYWZDb2x1bW5zXCIpKSwgZS5nZXRSaWdodExlYWZDb2x1bW5zID0gTTAoKCkgPT4gW2UuZ2V0QWxsTGVhZkNvbHVtbnMoKSwgZS5nZXRTdGF0ZSgpLmNvbHVtblBpbm5pbmcucmlnaHRdLCAodCwgbykgPT4gKG8gPz8gW10pLm1hcCgobikgPT4gdC5maW5kKChyKSA9PiByLmlkID09PSBuKSkuZmlsdGVyKEJvb2xlYW4pLCBBMChlLm9wdGlvbnMsIFwiZGVidWdDb2x1bW5zXCIsIFwiZ2V0UmlnaHRMZWFmQ29sdW1uc1wiKSksIGUuZ2V0Q2VudGVyTGVhZkNvbHVtbnMgPSBNMCgoKSA9PiBbZS5nZXRBbGxMZWFmQ29sdW1ucygpLCBlLmdldFN0YXRlKCkuY29sdW1uUGlubmluZy5sZWZ0LCBlLmdldFN0YXRlKCkuY29sdW1uUGlubmluZy5yaWdodF0sICh0LCBvLCBuKSA9PiB7XG4gICAgICBjb25zdCByID0gWy4uLm8gPz8gW10sIC4uLm4gPz8gW11dO1xuICAgICAgcmV0dXJuIHQuZmlsdGVyKChpKSA9PiAhci5pbmNsdWRlcyhpLmlkKSk7XG4gICAgfSwgQTAoZS5vcHRpb25zLCBcImRlYnVnQ29sdW1uc1wiLCBcImdldENlbnRlckxlYWZDb2x1bW5zXCIpKTtcbiAgfVxufSwgeW4gPSB7XG4gIHNpemU6IDE1MCxcbiAgbWluU2l6ZTogMjAsXG4gIG1heFNpemU6IE51bWJlci5NQVhfU0FGRV9JTlRFR0VSXG59LCBNYSA9ICgpID0+ICh7XG4gIHN0YXJ0T2Zmc2V0OiBudWxsLFxuICBzdGFydFNpemU6IG51bGwsXG4gIGRlbHRhT2Zmc2V0OiBudWxsLFxuICBkZWx0YVBlcmNlbnRhZ2U6IG51bGwsXG4gIGlzUmVzaXppbmdDb2x1bW46ICExLFxuICBjb2x1bW5TaXppbmdTdGFydDogW11cbn0pLCBSViA9IHtcbiAgZ2V0RGVmYXVsdENvbHVtbkRlZjogKCkgPT4geW4sXG4gIGdldEluaXRpYWxTdGF0ZTogKGUpID0+ICh7XG4gICAgY29sdW1uU2l6aW5nOiB7fSxcbiAgICBjb2x1bW5TaXppbmdJbmZvOiBNYSgpLFxuICAgIC4uLmVcbiAgfSksXG4gIGdldERlZmF1bHRPcHRpb25zOiAoZSkgPT4gKHtcbiAgICBjb2x1bW5SZXNpemVNb2RlOiBcIm9uRW5kXCIsXG4gICAgY29sdW1uUmVzaXplRGlyZWN0aW9uOiBcImx0clwiLFxuICAgIG9uQ29sdW1uU2l6aW5nQ2hhbmdlOiBvZShcImNvbHVtblNpemluZ1wiLCBlKSxcbiAgICBvbkNvbHVtblNpemluZ0luZm9DaGFuZ2U6IG9lKFwiY29sdW1uU2l6aW5nSW5mb1wiLCBlKVxuICB9KSxcbiAgY3JlYXRlQ29sdW1uOiAoZSwgdCkgPT4ge1xuICAgIGUuZ2V0U2l6ZSA9ICgpID0+IHtcbiAgICAgIHZhciBvLCBuLCByO1xuICAgICAgY29uc3QgaSA9IHQuZ2V0U3RhdGUoKS5jb2x1bW5TaXppbmdbZS5pZF07XG4gICAgICByZXR1cm4gTWF0aC5taW4oTWF0aC5tYXgoKG8gPSBlLmNvbHVtbkRlZi5taW5TaXplKSAhPSBudWxsID8gbyA6IHluLm1pblNpemUsIChuID0gaSA/PyBlLmNvbHVtbkRlZi5zaXplKSAhPSBudWxsID8gbiA6IHluLnNpemUpLCAociA9IGUuY29sdW1uRGVmLm1heFNpemUpICE9IG51bGwgPyByIDogeW4ubWF4U2l6ZSk7XG4gICAgfSwgZS5nZXRTdGFydCA9IE0wKChvKSA9PiBbbywgJG8odCwgbyksIHQuZ2V0U3RhdGUoKS5jb2x1bW5TaXppbmddLCAobywgbikgPT4gbi5zbGljZSgwLCBlLmdldEluZGV4KG8pKS5yZWR1Y2UoKHIsIGkpID0+IHIgKyBpLmdldFNpemUoKSwgMCksIEEwKHQub3B0aW9ucywgXCJkZWJ1Z0NvbHVtbnNcIiwgXCJnZXRTdGFydFwiKSksIGUuZ2V0QWZ0ZXIgPSBNMCgobykgPT4gW28sICRvKHQsIG8pLCB0LmdldFN0YXRlKCkuY29sdW1uU2l6aW5nXSwgKG8sIG4pID0+IG4uc2xpY2UoZS5nZXRJbmRleChvKSArIDEpLnJlZHVjZSgociwgaSkgPT4gciArIGkuZ2V0U2l6ZSgpLCAwKSwgQTAodC5vcHRpb25zLCBcImRlYnVnQ29sdW1uc1wiLCBcImdldEFmdGVyXCIpKSwgZS5yZXNldFNpemUgPSAoKSA9PiB7XG4gICAgICB0LnNldENvbHVtblNpemluZygobykgPT4ge1xuICAgICAgICBsZXQge1xuICAgICAgICAgIFtlLmlkXTogbixcbiAgICAgICAgICAuLi5yXG4gICAgICAgIH0gPSBvO1xuICAgICAgICByZXR1cm4gcjtcbiAgICAgIH0pO1xuICAgIH0sIGUuZ2V0Q2FuUmVzaXplID0gKCkgPT4ge1xuICAgICAgdmFyIG8sIG47XG4gICAgICByZXR1cm4gKChvID0gZS5jb2x1bW5EZWYuZW5hYmxlUmVzaXppbmcpICE9IG51bGwgPyBvIDogITApICYmICgobiA9IHQub3B0aW9ucy5lbmFibGVDb2x1bW5SZXNpemluZykgIT0gbnVsbCA/IG4gOiAhMCk7XG4gICAgfSwgZS5nZXRJc1Jlc2l6aW5nID0gKCkgPT4gdC5nZXRTdGF0ZSgpLmNvbHVtblNpemluZ0luZm8uaXNSZXNpemluZ0NvbHVtbiA9PT0gZS5pZDtcbiAgfSxcbiAgY3JlYXRlSGVhZGVyOiAoZSwgdCkgPT4ge1xuICAgIGUuZ2V0U2l6ZSA9ICgpID0+IHtcbiAgICAgIGxldCBvID0gMDtcbiAgICAgIGNvbnN0IG4gPSAocikgPT4ge1xuICAgICAgICBpZiAoci5zdWJIZWFkZXJzLmxlbmd0aClcbiAgICAgICAgICByLnN1YkhlYWRlcnMuZm9yRWFjaChuKTtcbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgdmFyIGk7XG4gICAgICAgICAgbyArPSAoaSA9IHIuY29sdW1uLmdldFNpemUoKSkgIT0gbnVsbCA/IGkgOiAwO1xuICAgICAgICB9XG4gICAgICB9O1xuICAgICAgcmV0dXJuIG4oZSksIG87XG4gICAgfSwgZS5nZXRTdGFydCA9ICgpID0+IHtcbiAgICAgIGlmIChlLmluZGV4ID4gMCkge1xuICAgICAgICBjb25zdCBvID0gZS5oZWFkZXJHcm91cC5oZWFkZXJzW2UuaW5kZXggLSAxXTtcbiAgICAgICAgcmV0dXJuIG8uZ2V0U3RhcnQoKSArIG8uZ2V0U2l6ZSgpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIDA7XG4gICAgfSwgZS5nZXRSZXNpemVIYW5kbGVyID0gKG8pID0+IHtcbiAgICAgIGNvbnN0IG4gPSB0LmdldENvbHVtbihlLmNvbHVtbi5pZCksIHIgPSBuID09IG51bGwgPyB2b2lkIDAgOiBuLmdldENhblJlc2l6ZSgpO1xuICAgICAgcmV0dXJuIChpKSA9PiB7XG4gICAgICAgIGlmICghbiB8fCAhciB8fCAoaS5wZXJzaXN0ID09IG51bGwgfHwgaS5wZXJzaXN0KCksIEFhKGkpICYmIGkudG91Y2hlcyAmJiBpLnRvdWNoZXMubGVuZ3RoID4gMSkpXG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICBjb25zdCBhID0gZS5nZXRTaXplKCksIHMgPSBlID8gZS5nZXRMZWFmSGVhZGVycygpLm1hcCgoTykgPT4gW08uY29sdW1uLmlkLCBPLmNvbHVtbi5nZXRTaXplKCldKSA6IFtbbi5pZCwgbi5nZXRTaXplKCldXSwgbCA9IEFhKGkpID8gTWF0aC5yb3VuZChpLnRvdWNoZXNbMF0uY2xpZW50WCkgOiBpLmNsaWVudFgsIHAgPSB7fSwgZCA9IChPLCBoKSA9PiB7XG4gICAgICAgICAgdHlwZW9mIGggPT0gXCJudW1iZXJcIiAmJiAodC5zZXRDb2x1bW5TaXppbmdJbmZvKChnKSA9PiB7XG4gICAgICAgICAgICB2YXIgdiwgTDtcbiAgICAgICAgICAgIGNvbnN0IHkgPSB0Lm9wdGlvbnMuY29sdW1uUmVzaXplRGlyZWN0aW9uID09PSBcInJ0bFwiID8gLTEgOiAxLCBCID0gKGggLSAoKHYgPSBnID09IG51bGwgPyB2b2lkIDAgOiBnLnN0YXJ0T2Zmc2V0KSAhPSBudWxsID8gdiA6IDApKSAqIHksIFggPSBNYXRoLm1heChCIC8gKChMID0gZyA9PSBudWxsID8gdm9pZCAwIDogZy5zdGFydFNpemUpICE9IG51bGwgPyBMIDogMCksIC0wLjk5OTk5OSk7XG4gICAgICAgICAgICByZXR1cm4gZy5jb2x1bW5TaXppbmdTdGFydC5mb3JFYWNoKChGKSA9PiB7XG4gICAgICAgICAgICAgIGxldCBbVCwgd10gPSBGO1xuICAgICAgICAgICAgICBwW1RdID0gTWF0aC5yb3VuZChNYXRoLm1heCh3ICsgdyAqIFgsIDApICogMTAwKSAvIDEwMDtcbiAgICAgICAgICAgIH0pLCB7XG4gICAgICAgICAgICAgIC4uLmcsXG4gICAgICAgICAgICAgIGRlbHRhT2Zmc2V0OiBCLFxuICAgICAgICAgICAgICBkZWx0YVBlcmNlbnRhZ2U6IFhcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgfSksICh0Lm9wdGlvbnMuY29sdW1uUmVzaXplTW9kZSA9PT0gXCJvbkNoYW5nZVwiIHx8IE8gPT09IFwiZW5kXCIpICYmIHQuc2V0Q29sdW1uU2l6aW5nKChnKSA9PiAoe1xuICAgICAgICAgICAgLi4uZyxcbiAgICAgICAgICAgIC4uLnBcbiAgICAgICAgICB9KSkpO1xuICAgICAgICB9LCBiID0gKE8pID0+IGQoXCJtb3ZlXCIsIE8pLCBNID0gKE8pID0+IHtcbiAgICAgICAgICBkKFwiZW5kXCIsIE8pLCB0LnNldENvbHVtblNpemluZ0luZm8oKGgpID0+ICh7XG4gICAgICAgICAgICAuLi5oLFxuICAgICAgICAgICAgaXNSZXNpemluZ0NvbHVtbjogITEsXG4gICAgICAgICAgICBzdGFydE9mZnNldDogbnVsbCxcbiAgICAgICAgICAgIHN0YXJ0U2l6ZTogbnVsbCxcbiAgICAgICAgICAgIGRlbHRhT2Zmc2V0OiBudWxsLFxuICAgICAgICAgICAgZGVsdGFQZXJjZW50YWdlOiBudWxsLFxuICAgICAgICAgICAgY29sdW1uU2l6aW5nU3RhcnQ6IFtdXG4gICAgICAgICAgfSkpO1xuICAgICAgICB9LCB1ID0gbyB8fCB0eXBlb2YgZG9jdW1lbnQgPCBcInVcIiA/IGRvY3VtZW50IDogbnVsbCwgQSA9IHtcbiAgICAgICAgICBtb3ZlSGFuZGxlcjogKE8pID0+IGIoTy5jbGllbnRYKSxcbiAgICAgICAgICB1cEhhbmRsZXI6IChPKSA9PiB7XG4gICAgICAgICAgICB1ID09IG51bGwgfHwgdS5yZW1vdmVFdmVudExpc3RlbmVyKFwibW91c2Vtb3ZlXCIsIEEubW92ZUhhbmRsZXIpLCB1ID09IG51bGwgfHwgdS5yZW1vdmVFdmVudExpc3RlbmVyKFwibW91c2V1cFwiLCBBLnVwSGFuZGxlciksIE0oTy5jbGllbnRYKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0sIHogPSB7XG4gICAgICAgICAgbW92ZUhhbmRsZXI6IChPKSA9PiAoTy5jYW5jZWxhYmxlICYmIChPLnByZXZlbnREZWZhdWx0KCksIE8uc3RvcFByb3BhZ2F0aW9uKCkpLCBiKE8udG91Y2hlc1swXS5jbGllbnRYKSwgITEpLFxuICAgICAgICAgIHVwSGFuZGxlcjogKE8pID0+IHtcbiAgICAgICAgICAgIHZhciBoO1xuICAgICAgICAgICAgdSA9PSBudWxsIHx8IHUucmVtb3ZlRXZlbnRMaXN0ZW5lcihcInRvdWNobW92ZVwiLCB6Lm1vdmVIYW5kbGVyKSwgdSA9PSBudWxsIHx8IHUucmVtb3ZlRXZlbnRMaXN0ZW5lcihcInRvdWNoZW5kXCIsIHoudXBIYW5kbGVyKSwgTy5jYW5jZWxhYmxlICYmIChPLnByZXZlbnREZWZhdWx0KCksIE8uc3RvcFByb3BhZ2F0aW9uKCkpLCBNKChoID0gTy50b3VjaGVzWzBdKSA9PSBudWxsID8gdm9pZCAwIDogaC5jbGllbnRYKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0sIGYgPSBCVigpID8ge1xuICAgICAgICAgIHBhc3NpdmU6ICExXG4gICAgICAgIH0gOiAhMTtcbiAgICAgICAgQWEoaSkgPyAodSA9PSBudWxsIHx8IHUuYWRkRXZlbnRMaXN0ZW5lcihcInRvdWNobW92ZVwiLCB6Lm1vdmVIYW5kbGVyLCBmKSwgdSA9PSBudWxsIHx8IHUuYWRkRXZlbnRMaXN0ZW5lcihcInRvdWNoZW5kXCIsIHoudXBIYW5kbGVyLCBmKSkgOiAodSA9PSBudWxsIHx8IHUuYWRkRXZlbnRMaXN0ZW5lcihcIm1vdXNlbW92ZVwiLCBBLm1vdmVIYW5kbGVyLCBmKSwgdSA9PSBudWxsIHx8IHUuYWRkRXZlbnRMaXN0ZW5lcihcIm1vdXNldXBcIiwgQS51cEhhbmRsZXIsIGYpKSwgdC5zZXRDb2x1bW5TaXppbmdJbmZvKChPKSA9PiAoe1xuICAgICAgICAgIC4uLk8sXG4gICAgICAgICAgc3RhcnRPZmZzZXQ6IGwsXG4gICAgICAgICAgc3RhcnRTaXplOiBhLFxuICAgICAgICAgIGRlbHRhT2Zmc2V0OiAwLFxuICAgICAgICAgIGRlbHRhUGVyY2VudGFnZTogMCxcbiAgICAgICAgICBjb2x1bW5TaXppbmdTdGFydDogcyxcbiAgICAgICAgICBpc1Jlc2l6aW5nQ29sdW1uOiBuLmlkXG4gICAgICAgIH0pKTtcbiAgICAgIH07XG4gICAgfTtcbiAgfSxcbiAgY3JlYXRlVGFibGU6IChlKSA9PiB7XG4gICAgZS5zZXRDb2x1bW5TaXppbmcgPSAodCkgPT4gZS5vcHRpb25zLm9uQ29sdW1uU2l6aW5nQ2hhbmdlID09IG51bGwgPyB2b2lkIDAgOiBlLm9wdGlvbnMub25Db2x1bW5TaXppbmdDaGFuZ2UodCksIGUuc2V0Q29sdW1uU2l6aW5nSW5mbyA9ICh0KSA9PiBlLm9wdGlvbnMub25Db2x1bW5TaXppbmdJbmZvQ2hhbmdlID09IG51bGwgPyB2b2lkIDAgOiBlLm9wdGlvbnMub25Db2x1bW5TaXppbmdJbmZvQ2hhbmdlKHQpLCBlLnJlc2V0Q29sdW1uU2l6aW5nID0gKHQpID0+IHtcbiAgICAgIHZhciBvO1xuICAgICAgZS5zZXRDb2x1bW5TaXppbmcodCA/IHt9IDogKG8gPSBlLmluaXRpYWxTdGF0ZS5jb2x1bW5TaXppbmcpICE9IG51bGwgPyBvIDoge30pO1xuICAgIH0sIGUucmVzZXRIZWFkZXJTaXplSW5mbyA9ICh0KSA9PiB7XG4gICAgICB2YXIgbztcbiAgICAgIGUuc2V0Q29sdW1uU2l6aW5nSW5mbyh0ID8gTWEoKSA6IChvID0gZS5pbml0aWFsU3RhdGUuY29sdW1uU2l6aW5nSW5mbykgIT0gbnVsbCA/IG8gOiBNYSgpKTtcbiAgICB9LCBlLmdldFRvdGFsU2l6ZSA9ICgpID0+IHtcbiAgICAgIHZhciB0LCBvO1xuICAgICAgcmV0dXJuICh0ID0gKG8gPSBlLmdldEhlYWRlckdyb3VwcygpWzBdKSA9PSBudWxsID8gdm9pZCAwIDogby5oZWFkZXJzLnJlZHVjZSgobiwgcikgPT4gbiArIHIuZ2V0U2l6ZSgpLCAwKSkgIT0gbnVsbCA/IHQgOiAwO1xuICAgIH0sIGUuZ2V0TGVmdFRvdGFsU2l6ZSA9ICgpID0+IHtcbiAgICAgIHZhciB0LCBvO1xuICAgICAgcmV0dXJuICh0ID0gKG8gPSBlLmdldExlZnRIZWFkZXJHcm91cHMoKVswXSkgPT0gbnVsbCA/IHZvaWQgMCA6IG8uaGVhZGVycy5yZWR1Y2UoKG4sIHIpID0+IG4gKyByLmdldFNpemUoKSwgMCkpICE9IG51bGwgPyB0IDogMDtcbiAgICB9LCBlLmdldENlbnRlclRvdGFsU2l6ZSA9ICgpID0+IHtcbiAgICAgIHZhciB0LCBvO1xuICAgICAgcmV0dXJuICh0ID0gKG8gPSBlLmdldENlbnRlckhlYWRlckdyb3VwcygpWzBdKSA9PSBudWxsID8gdm9pZCAwIDogby5oZWFkZXJzLnJlZHVjZSgobiwgcikgPT4gbiArIHIuZ2V0U2l6ZSgpLCAwKSkgIT0gbnVsbCA/IHQgOiAwO1xuICAgIH0sIGUuZ2V0UmlnaHRUb3RhbFNpemUgPSAoKSA9PiB7XG4gICAgICB2YXIgdCwgbztcbiAgICAgIHJldHVybiAodCA9IChvID0gZS5nZXRSaWdodEhlYWRlckdyb3VwcygpWzBdKSA9PSBudWxsID8gdm9pZCAwIDogby5oZWFkZXJzLnJlZHVjZSgobiwgcikgPT4gbiArIHIuZ2V0U2l6ZSgpLCAwKSkgIT0gbnVsbCA/IHQgOiAwO1xuICAgIH07XG4gIH1cbn07XG5sZXQgd24gPSBudWxsO1xuZnVuY3Rpb24gQlYoKSB7XG4gIGlmICh0eXBlb2Ygd24gPT0gXCJib29sZWFuXCIpXG4gICAgcmV0dXJuIHduO1xuICBsZXQgZSA9ICExO1xuICB0cnkge1xuICAgIGNvbnN0IHQgPSB7XG4gICAgICBnZXQgcGFzc2l2ZSgpIHtcbiAgICAgICAgcmV0dXJuIGUgPSAhMCwgITE7XG4gICAgICB9XG4gICAgfSwgbyA9ICgpID0+IHtcbiAgICB9O1xuICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKFwidGVzdFwiLCBvLCB0KSwgd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJ0ZXN0XCIsIG8pO1xuICB9IGNhdGNoIHtcbiAgICBlID0gITE7XG4gIH1cbiAgcmV0dXJuIHduID0gZSwgd247XG59XG5mdW5jdGlvbiBBYShlKSB7XG4gIHJldHVybiBlLnR5cGUgPT09IFwidG91Y2hzdGFydFwiO1xufVxuY29uc3QgU1YgPSB7XG4gIGdldEluaXRpYWxTdGF0ZTogKGUpID0+ICh7XG4gICAgY29sdW1uVmlzaWJpbGl0eToge30sXG4gICAgLi4uZVxuICB9KSxcbiAgZ2V0RGVmYXVsdE9wdGlvbnM6IChlKSA9PiAoe1xuICAgIG9uQ29sdW1uVmlzaWJpbGl0eUNoYW5nZTogb2UoXCJjb2x1bW5WaXNpYmlsaXR5XCIsIGUpXG4gIH0pLFxuICBjcmVhdGVDb2x1bW46IChlLCB0KSA9PiB7XG4gICAgZS50b2dnbGVWaXNpYmlsaXR5ID0gKG8pID0+IHtcbiAgICAgIGUuZ2V0Q2FuSGlkZSgpICYmIHQuc2V0Q29sdW1uVmlzaWJpbGl0eSgobikgPT4gKHtcbiAgICAgICAgLi4ubixcbiAgICAgICAgW2UuaWRdOiBvID8/ICFlLmdldElzVmlzaWJsZSgpXG4gICAgICB9KSk7XG4gICAgfSwgZS5nZXRJc1Zpc2libGUgPSAoKSA9PiB7XG4gICAgICB2YXIgbywgbjtcbiAgICAgIGNvbnN0IHIgPSBlLmNvbHVtbnM7XG4gICAgICByZXR1cm4gKG8gPSByLmxlbmd0aCA/IHIuc29tZSgoaSkgPT4gaS5nZXRJc1Zpc2libGUoKSkgOiAobiA9IHQuZ2V0U3RhdGUoKS5jb2x1bW5WaXNpYmlsaXR5KSA9PSBudWxsID8gdm9pZCAwIDogbltlLmlkXSkgIT0gbnVsbCA/IG8gOiAhMDtcbiAgICB9LCBlLmdldENhbkhpZGUgPSAoKSA9PiB7XG4gICAgICB2YXIgbywgbjtcbiAgICAgIHJldHVybiAoKG8gPSBlLmNvbHVtbkRlZi5lbmFibGVIaWRpbmcpICE9IG51bGwgPyBvIDogITApICYmICgobiA9IHQub3B0aW9ucy5lbmFibGVIaWRpbmcpICE9IG51bGwgPyBuIDogITApO1xuICAgIH0sIGUuZ2V0VG9nZ2xlVmlzaWJpbGl0eUhhbmRsZXIgPSAoKSA9PiAobykgPT4ge1xuICAgICAgZS50b2dnbGVWaXNpYmlsaXR5ID09IG51bGwgfHwgZS50b2dnbGVWaXNpYmlsaXR5KG8udGFyZ2V0LmNoZWNrZWQpO1xuICAgIH07XG4gIH0sXG4gIGNyZWF0ZVJvdzogKGUsIHQpID0+IHtcbiAgICBlLl9nZXRBbGxWaXNpYmxlQ2VsbHMgPSBNMCgoKSA9PiBbZS5nZXRBbGxDZWxscygpLCB0LmdldFN0YXRlKCkuY29sdW1uVmlzaWJpbGl0eV0sIChvKSA9PiBvLmZpbHRlcigobikgPT4gbi5jb2x1bW4uZ2V0SXNWaXNpYmxlKCkpLCBBMCh0Lm9wdGlvbnMsIFwiZGVidWdSb3dzXCIsIFwiX2dldEFsbFZpc2libGVDZWxsc1wiKSksIGUuZ2V0VmlzaWJsZUNlbGxzID0gTTAoKCkgPT4gW2UuZ2V0TGVmdFZpc2libGVDZWxscygpLCBlLmdldENlbnRlclZpc2libGVDZWxscygpLCBlLmdldFJpZ2h0VmlzaWJsZUNlbGxzKCldLCAobywgbiwgcikgPT4gWy4uLm8sIC4uLm4sIC4uLnJdLCBBMCh0Lm9wdGlvbnMsIFwiZGVidWdSb3dzXCIsIFwiZ2V0VmlzaWJsZUNlbGxzXCIpKTtcbiAgfSxcbiAgY3JlYXRlVGFibGU6IChlKSA9PiB7XG4gICAgY29uc3QgdCA9IChvLCBuKSA9PiBNMCgoKSA9PiBbbigpLCBuKCkuZmlsdGVyKChyKSA9PiByLmdldElzVmlzaWJsZSgpKS5tYXAoKHIpID0+IHIuaWQpLmpvaW4oXCJfXCIpXSwgKHIpID0+IHIuZmlsdGVyKChpKSA9PiBpLmdldElzVmlzaWJsZSA9PSBudWxsID8gdm9pZCAwIDogaS5nZXRJc1Zpc2libGUoKSksIEEwKGUub3B0aW9ucywgXCJkZWJ1Z0NvbHVtbnNcIiwgbykpO1xuICAgIGUuZ2V0VmlzaWJsZUZsYXRDb2x1bW5zID0gdChcImdldFZpc2libGVGbGF0Q29sdW1uc1wiLCAoKSA9PiBlLmdldEFsbEZsYXRDb2x1bW5zKCkpLCBlLmdldFZpc2libGVMZWFmQ29sdW1ucyA9IHQoXCJnZXRWaXNpYmxlTGVhZkNvbHVtbnNcIiwgKCkgPT4gZS5nZXRBbGxMZWFmQ29sdW1ucygpKSwgZS5nZXRMZWZ0VmlzaWJsZUxlYWZDb2x1bW5zID0gdChcImdldExlZnRWaXNpYmxlTGVhZkNvbHVtbnNcIiwgKCkgPT4gZS5nZXRMZWZ0TGVhZkNvbHVtbnMoKSksIGUuZ2V0UmlnaHRWaXNpYmxlTGVhZkNvbHVtbnMgPSB0KFwiZ2V0UmlnaHRWaXNpYmxlTGVhZkNvbHVtbnNcIiwgKCkgPT4gZS5nZXRSaWdodExlYWZDb2x1bW5zKCkpLCBlLmdldENlbnRlclZpc2libGVMZWFmQ29sdW1ucyA9IHQoXCJnZXRDZW50ZXJWaXNpYmxlTGVhZkNvbHVtbnNcIiwgKCkgPT4gZS5nZXRDZW50ZXJMZWFmQ29sdW1ucygpKSwgZS5zZXRDb2x1bW5WaXNpYmlsaXR5ID0gKG8pID0+IGUub3B0aW9ucy5vbkNvbHVtblZpc2liaWxpdHlDaGFuZ2UgPT0gbnVsbCA/IHZvaWQgMCA6IGUub3B0aW9ucy5vbkNvbHVtblZpc2liaWxpdHlDaGFuZ2UobyksIGUucmVzZXRDb2x1bW5WaXNpYmlsaXR5ID0gKG8pID0+IHtcbiAgICAgIHZhciBuO1xuICAgICAgZS5zZXRDb2x1bW5WaXNpYmlsaXR5KG8gPyB7fSA6IChuID0gZS5pbml0aWFsU3RhdGUuY29sdW1uVmlzaWJpbGl0eSkgIT0gbnVsbCA/IG4gOiB7fSk7XG4gICAgfSwgZS50b2dnbGVBbGxDb2x1bW5zVmlzaWJsZSA9IChvKSA9PiB7XG4gICAgICB2YXIgbjtcbiAgICAgIG8gPSAobiA9IG8pICE9IG51bGwgPyBuIDogIWUuZ2V0SXNBbGxDb2x1bW5zVmlzaWJsZSgpLCBlLnNldENvbHVtblZpc2liaWxpdHkoZS5nZXRBbGxMZWFmQ29sdW1ucygpLnJlZHVjZSgociwgaSkgPT4gKHtcbiAgICAgICAgLi4ucixcbiAgICAgICAgW2kuaWRdOiBvIHx8ICEoaS5nZXRDYW5IaWRlICE9IG51bGwgJiYgaS5nZXRDYW5IaWRlKCkpXG4gICAgICB9KSwge30pKTtcbiAgICB9LCBlLmdldElzQWxsQ29sdW1uc1Zpc2libGUgPSAoKSA9PiAhZS5nZXRBbGxMZWFmQ29sdW1ucygpLnNvbWUoKG8pID0+ICEoby5nZXRJc1Zpc2libGUgIT0gbnVsbCAmJiBvLmdldElzVmlzaWJsZSgpKSksIGUuZ2V0SXNTb21lQ29sdW1uc1Zpc2libGUgPSAoKSA9PiBlLmdldEFsbExlYWZDb2x1bW5zKCkuc29tZSgobykgPT4gby5nZXRJc1Zpc2libGUgPT0gbnVsbCA/IHZvaWQgMCA6IG8uZ2V0SXNWaXNpYmxlKCkpLCBlLmdldFRvZ2dsZUFsbENvbHVtbnNWaXNpYmlsaXR5SGFuZGxlciA9ICgpID0+IChvKSA9PiB7XG4gICAgICB2YXIgbjtcbiAgICAgIGUudG9nZ2xlQWxsQ29sdW1uc1Zpc2libGUoKG4gPSBvLnRhcmdldCkgPT0gbnVsbCA/IHZvaWQgMCA6IG4uY2hlY2tlZCk7XG4gICAgfTtcbiAgfVxufTtcbmZ1bmN0aW9uICRvKGUsIHQpIHtcbiAgcmV0dXJuIHQgPyB0ID09PSBcImNlbnRlclwiID8gZS5nZXRDZW50ZXJWaXNpYmxlTGVhZkNvbHVtbnMoKSA6IHQgPT09IFwibGVmdFwiID8gZS5nZXRMZWZ0VmlzaWJsZUxlYWZDb2x1bW5zKCkgOiBlLmdldFJpZ2h0VmlzaWJsZUxlYWZDb2x1bW5zKCkgOiBlLmdldFZpc2libGVMZWFmQ29sdW1ucygpO1xufVxuY29uc3QgRVYgPSB7XG4gIGNyZWF0ZVRhYmxlOiAoZSkgPT4ge1xuICAgIGUuX2dldEdsb2JhbEZhY2V0ZWRSb3dNb2RlbCA9IGUub3B0aW9ucy5nZXRGYWNldGVkUm93TW9kZWwgJiYgZS5vcHRpb25zLmdldEZhY2V0ZWRSb3dNb2RlbChlLCBcIl9fZ2xvYmFsX19cIiksIGUuZ2V0R2xvYmFsRmFjZXRlZFJvd01vZGVsID0gKCkgPT4gZS5vcHRpb25zLm1hbnVhbEZpbHRlcmluZyB8fCAhZS5fZ2V0R2xvYmFsRmFjZXRlZFJvd01vZGVsID8gZS5nZXRQcmVGaWx0ZXJlZFJvd01vZGVsKCkgOiBlLl9nZXRHbG9iYWxGYWNldGVkUm93TW9kZWwoKSwgZS5fZ2V0R2xvYmFsRmFjZXRlZFVuaXF1ZVZhbHVlcyA9IGUub3B0aW9ucy5nZXRGYWNldGVkVW5pcXVlVmFsdWVzICYmIGUub3B0aW9ucy5nZXRGYWNldGVkVW5pcXVlVmFsdWVzKGUsIFwiX19nbG9iYWxfX1wiKSwgZS5nZXRHbG9iYWxGYWNldGVkVW5pcXVlVmFsdWVzID0gKCkgPT4gZS5fZ2V0R2xvYmFsRmFjZXRlZFVuaXF1ZVZhbHVlcyA/IGUuX2dldEdsb2JhbEZhY2V0ZWRVbmlxdWVWYWx1ZXMoKSA6IC8qIEBfX1BVUkVfXyAqLyBuZXcgTWFwKCksIGUuX2dldEdsb2JhbEZhY2V0ZWRNaW5NYXhWYWx1ZXMgPSBlLm9wdGlvbnMuZ2V0RmFjZXRlZE1pbk1heFZhbHVlcyAmJiBlLm9wdGlvbnMuZ2V0RmFjZXRlZE1pbk1heFZhbHVlcyhlLCBcIl9fZ2xvYmFsX19cIiksIGUuZ2V0R2xvYmFsRmFjZXRlZE1pbk1heFZhbHVlcyA9ICgpID0+IHtcbiAgICAgIGlmIChlLl9nZXRHbG9iYWxGYWNldGVkTWluTWF4VmFsdWVzKVxuICAgICAgICByZXR1cm4gZS5fZ2V0R2xvYmFsRmFjZXRlZE1pbk1heFZhbHVlcygpO1xuICAgIH07XG4gIH1cbn0sIGtWID0ge1xuICBnZXRJbml0aWFsU3RhdGU6IChlKSA9PiAoe1xuICAgIGdsb2JhbEZpbHRlcjogdm9pZCAwLFxuICAgIC4uLmVcbiAgfSksXG4gIGdldERlZmF1bHRPcHRpb25zOiAoZSkgPT4gKHtcbiAgICBvbkdsb2JhbEZpbHRlckNoYW5nZTogb2UoXCJnbG9iYWxGaWx0ZXJcIiwgZSksXG4gICAgZ2xvYmFsRmlsdGVyRm46IFwiYXV0b1wiLFxuICAgIGdldENvbHVtbkNhbkdsb2JhbEZpbHRlcjogKHQpID0+IHtcbiAgICAgIHZhciBvO1xuICAgICAgY29uc3QgbiA9IChvID0gZS5nZXRDb3JlUm93TW9kZWwoKS5mbGF0Um93c1swXSkgPT0gbnVsbCB8fCAobyA9IG8uX2dldEFsbENlbGxzQnlDb2x1bW5JZCgpW3QuaWRdKSA9PSBudWxsID8gdm9pZCAwIDogby5nZXRWYWx1ZSgpO1xuICAgICAgcmV0dXJuIHR5cGVvZiBuID09IFwic3RyaW5nXCIgfHwgdHlwZW9mIG4gPT0gXCJudW1iZXJcIjtcbiAgICB9XG4gIH0pLFxuICBjcmVhdGVDb2x1bW46IChlLCB0KSA9PiB7XG4gICAgZS5nZXRDYW5HbG9iYWxGaWx0ZXIgPSAoKSA9PiB7XG4gICAgICB2YXIgbywgbiwgciwgaTtcbiAgICAgIHJldHVybiAoKG8gPSBlLmNvbHVtbkRlZi5lbmFibGVHbG9iYWxGaWx0ZXIpICE9IG51bGwgPyBvIDogITApICYmICgobiA9IHQub3B0aW9ucy5lbmFibGVHbG9iYWxGaWx0ZXIpICE9IG51bGwgPyBuIDogITApICYmICgociA9IHQub3B0aW9ucy5lbmFibGVGaWx0ZXJzKSAhPSBudWxsID8gciA6ICEwKSAmJiAoKGkgPSB0Lm9wdGlvbnMuZ2V0Q29sdW1uQ2FuR2xvYmFsRmlsdGVyID09IG51bGwgPyB2b2lkIDAgOiB0Lm9wdGlvbnMuZ2V0Q29sdW1uQ2FuR2xvYmFsRmlsdGVyKGUpKSAhPSBudWxsID8gaSA6ICEwKSAmJiAhIWUuYWNjZXNzb3JGbjtcbiAgICB9O1xuICB9LFxuICBjcmVhdGVUYWJsZTogKGUpID0+IHtcbiAgICBlLmdldEdsb2JhbEF1dG9GaWx0ZXJGbiA9ICgpID0+IF9lLmluY2x1ZGVzU3RyaW5nLCBlLmdldEdsb2JhbEZpbHRlckZuID0gKCkgPT4ge1xuICAgICAgdmFyIHQsIG87XG4gICAgICBjb25zdCB7XG4gICAgICAgIGdsb2JhbEZpbHRlckZuOiBuXG4gICAgICB9ID0gZS5vcHRpb25zO1xuICAgICAgcmV0dXJuIHJpKG4pID8gbiA6IG4gPT09IFwiYXV0b1wiID8gZS5nZXRHbG9iYWxBdXRvRmlsdGVyRm4oKSA6ICh0ID0gKG8gPSBlLm9wdGlvbnMuZmlsdGVyRm5zKSA9PSBudWxsID8gdm9pZCAwIDogb1tuXSkgIT0gbnVsbCA/IHQgOiBfZVtuXTtcbiAgICB9LCBlLnNldEdsb2JhbEZpbHRlciA9ICh0KSA9PiB7XG4gICAgICBlLm9wdGlvbnMub25HbG9iYWxGaWx0ZXJDaGFuZ2UgPT0gbnVsbCB8fCBlLm9wdGlvbnMub25HbG9iYWxGaWx0ZXJDaGFuZ2UodCk7XG4gICAgfSwgZS5yZXNldEdsb2JhbEZpbHRlciA9ICh0KSA9PiB7XG4gICAgICBlLnNldEdsb2JhbEZpbHRlcih0ID8gdm9pZCAwIDogZS5pbml0aWFsU3RhdGUuZ2xvYmFsRmlsdGVyKTtcbiAgICB9O1xuICB9XG59LCBOViA9IHtcbiAgZ2V0SW5pdGlhbFN0YXRlOiAoZSkgPT4gKHtcbiAgICBleHBhbmRlZDoge30sXG4gICAgLi4uZVxuICB9KSxcbiAgZ2V0RGVmYXVsdE9wdGlvbnM6IChlKSA9PiAoe1xuICAgIG9uRXhwYW5kZWRDaGFuZ2U6IG9lKFwiZXhwYW5kZWRcIiwgZSksXG4gICAgcGFnaW5hdGVFeHBhbmRlZFJvd3M6ICEwXG4gIH0pLFxuICBjcmVhdGVUYWJsZTogKGUpID0+IHtcbiAgICBsZXQgdCA9ICExLCBvID0gITE7XG4gICAgZS5fYXV0b1Jlc2V0RXhwYW5kZWQgPSAoKSA9PiB7XG4gICAgICB2YXIgbiwgcjtcbiAgICAgIGlmICghdCkge1xuICAgICAgICBlLl9xdWV1ZSgoKSA9PiB7XG4gICAgICAgICAgdCA9ICEwO1xuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgaWYgKChuID0gKHIgPSBlLm9wdGlvbnMuYXV0b1Jlc2V0QWxsKSAhPSBudWxsID8gciA6IGUub3B0aW9ucy5hdXRvUmVzZXRFeHBhbmRlZCkgIT0gbnVsbCA/IG4gOiAhZS5vcHRpb25zLm1hbnVhbEV4cGFuZGluZykge1xuICAgICAgICBpZiAobylcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIG8gPSAhMCwgZS5fcXVldWUoKCkgPT4ge1xuICAgICAgICAgIGUucmVzZXRFeHBhbmRlZCgpLCBvID0gITE7XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH0sIGUuc2V0RXhwYW5kZWQgPSAobikgPT4gZS5vcHRpb25zLm9uRXhwYW5kZWRDaGFuZ2UgPT0gbnVsbCA/IHZvaWQgMCA6IGUub3B0aW9ucy5vbkV4cGFuZGVkQ2hhbmdlKG4pLCBlLnRvZ2dsZUFsbFJvd3NFeHBhbmRlZCA9IChuKSA9PiB7XG4gICAgICBuID8/ICFlLmdldElzQWxsUm93c0V4cGFuZGVkKCkgPyBlLnNldEV4cGFuZGVkKCEwKSA6IGUuc2V0RXhwYW5kZWQoe30pO1xuICAgIH0sIGUucmVzZXRFeHBhbmRlZCA9IChuKSA9PiB7XG4gICAgICB2YXIgciwgaTtcbiAgICAgIGUuc2V0RXhwYW5kZWQobiA/IHt9IDogKHIgPSAoaSA9IGUuaW5pdGlhbFN0YXRlKSA9PSBudWxsID8gdm9pZCAwIDogaS5leHBhbmRlZCkgIT0gbnVsbCA/IHIgOiB7fSk7XG4gICAgfSwgZS5nZXRDYW5Tb21lUm93c0V4cGFuZCA9ICgpID0+IGUuZ2V0UHJlUGFnaW5hdGlvblJvd01vZGVsKCkuZmxhdFJvd3Muc29tZSgobikgPT4gbi5nZXRDYW5FeHBhbmQoKSksIGUuZ2V0VG9nZ2xlQWxsUm93c0V4cGFuZGVkSGFuZGxlciA9ICgpID0+IChuKSA9PiB7XG4gICAgICBuLnBlcnNpc3QgPT0gbnVsbCB8fCBuLnBlcnNpc3QoKSwgZS50b2dnbGVBbGxSb3dzRXhwYW5kZWQoKTtcbiAgICB9LCBlLmdldElzU29tZVJvd3NFeHBhbmRlZCA9ICgpID0+IHtcbiAgICAgIGNvbnN0IG4gPSBlLmdldFN0YXRlKCkuZXhwYW5kZWQ7XG4gICAgICByZXR1cm4gbiA9PT0gITAgfHwgT2JqZWN0LnZhbHVlcyhuKS5zb21lKEJvb2xlYW4pO1xuICAgIH0sIGUuZ2V0SXNBbGxSb3dzRXhwYW5kZWQgPSAoKSA9PiB7XG4gICAgICBjb25zdCBuID0gZS5nZXRTdGF0ZSgpLmV4cGFuZGVkO1xuICAgICAgcmV0dXJuIHR5cGVvZiBuID09IFwiYm9vbGVhblwiID8gbiA9PT0gITAgOiAhKCFPYmplY3Qua2V5cyhuKS5sZW5ndGggfHwgZS5nZXRSb3dNb2RlbCgpLmZsYXRSb3dzLnNvbWUoKHIpID0+ICFyLmdldElzRXhwYW5kZWQoKSkpO1xuICAgIH0sIGUuZ2V0RXhwYW5kZWREZXB0aCA9ICgpID0+IHtcbiAgICAgIGxldCBuID0gMDtcbiAgICAgIHJldHVybiAoZS5nZXRTdGF0ZSgpLmV4cGFuZGVkID09PSAhMCA/IE9iamVjdC5rZXlzKGUuZ2V0Um93TW9kZWwoKS5yb3dzQnlJZCkgOiBPYmplY3Qua2V5cyhlLmdldFN0YXRlKCkuZXhwYW5kZWQpKS5mb3JFYWNoKChpKSA9PiB7XG4gICAgICAgIGNvbnN0IGEgPSBpLnNwbGl0KFwiLlwiKTtcbiAgICAgICAgbiA9IE1hdGgubWF4KG4sIGEubGVuZ3RoKTtcbiAgICAgIH0pLCBuO1xuICAgIH0sIGUuZ2V0UHJlRXhwYW5kZWRSb3dNb2RlbCA9ICgpID0+IGUuZ2V0U29ydGVkUm93TW9kZWwoKSwgZS5nZXRFeHBhbmRlZFJvd01vZGVsID0gKCkgPT4gKCFlLl9nZXRFeHBhbmRlZFJvd01vZGVsICYmIGUub3B0aW9ucy5nZXRFeHBhbmRlZFJvd01vZGVsICYmIChlLl9nZXRFeHBhbmRlZFJvd01vZGVsID0gZS5vcHRpb25zLmdldEV4cGFuZGVkUm93TW9kZWwoZSkpLCBlLm9wdGlvbnMubWFudWFsRXhwYW5kaW5nIHx8ICFlLl9nZXRFeHBhbmRlZFJvd01vZGVsID8gZS5nZXRQcmVFeHBhbmRlZFJvd01vZGVsKCkgOiBlLl9nZXRFeHBhbmRlZFJvd01vZGVsKCkpO1xuICB9LFxuICBjcmVhdGVSb3c6IChlLCB0KSA9PiB7XG4gICAgZS50b2dnbGVFeHBhbmRlZCA9IChvKSA9PiB7XG4gICAgICB0LnNldEV4cGFuZGVkKChuKSA9PiB7XG4gICAgICAgIHZhciByO1xuICAgICAgICBjb25zdCBpID0gbiA9PT0gITAgPyAhMCA6ICEhKG4gIT0gbnVsbCAmJiBuW2UuaWRdKTtcbiAgICAgICAgbGV0IGEgPSB7fTtcbiAgICAgICAgaWYgKG4gPT09ICEwID8gT2JqZWN0LmtleXModC5nZXRSb3dNb2RlbCgpLnJvd3NCeUlkKS5mb3JFYWNoKChzKSA9PiB7XG4gICAgICAgICAgYVtzXSA9ICEwO1xuICAgICAgICB9KSA6IGEgPSBuLCBvID0gKHIgPSBvKSAhPSBudWxsID8gciA6ICFpLCAhaSAmJiBvKVxuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAuLi5hLFxuICAgICAgICAgICAgW2UuaWRdOiAhMFxuICAgICAgICAgIH07XG4gICAgICAgIGlmIChpICYmICFvKSB7XG4gICAgICAgICAgY29uc3Qge1xuICAgICAgICAgICAgW2UuaWRdOiBzLFxuICAgICAgICAgICAgLi4ubFxuICAgICAgICAgIH0gPSBhO1xuICAgICAgICAgIHJldHVybiBsO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBuO1xuICAgICAgfSk7XG4gICAgfSwgZS5nZXRJc0V4cGFuZGVkID0gKCkgPT4ge1xuICAgICAgdmFyIG87XG4gICAgICBjb25zdCBuID0gdC5nZXRTdGF0ZSgpLmV4cGFuZGVkO1xuICAgICAgcmV0dXJuICEhKChvID0gdC5vcHRpb25zLmdldElzUm93RXhwYW5kZWQgPT0gbnVsbCA/IHZvaWQgMCA6IHQub3B0aW9ucy5nZXRJc1Jvd0V4cGFuZGVkKGUpKSAhPSBudWxsID8gbyA6IG4gPT09ICEwIHx8IG4gIT0gbnVsbCAmJiBuW2UuaWRdKTtcbiAgICB9LCBlLmdldENhbkV4cGFuZCA9ICgpID0+IHtcbiAgICAgIHZhciBvLCBuLCByO1xuICAgICAgcmV0dXJuIChvID0gdC5vcHRpb25zLmdldFJvd0NhbkV4cGFuZCA9PSBudWxsID8gdm9pZCAwIDogdC5vcHRpb25zLmdldFJvd0NhbkV4cGFuZChlKSkgIT0gbnVsbCA/IG8gOiAoKG4gPSB0Lm9wdGlvbnMuZW5hYmxlRXhwYW5kaW5nKSAhPSBudWxsID8gbiA6ICEwKSAmJiAhISgociA9IGUuc3ViUm93cykgIT0gbnVsbCAmJiByLmxlbmd0aCk7XG4gICAgfSwgZS5nZXRJc0FsbFBhcmVudHNFeHBhbmRlZCA9ICgpID0+IHtcbiAgICAgIGxldCBvID0gITAsIG4gPSBlO1xuICAgICAgZm9yICg7IG8gJiYgbi5wYXJlbnRJZDsgKVxuICAgICAgICBuID0gdC5nZXRSb3cobi5wYXJlbnRJZCwgITApLCBvID0gbi5nZXRJc0V4cGFuZGVkKCk7XG4gICAgICByZXR1cm4gbztcbiAgICB9LCBlLmdldFRvZ2dsZUV4cGFuZGVkSGFuZGxlciA9ICgpID0+IHtcbiAgICAgIGNvbnN0IG8gPSBlLmdldENhbkV4cGFuZCgpO1xuICAgICAgcmV0dXJuICgpID0+IHtcbiAgICAgICAgbyAmJiBlLnRvZ2dsZUV4cGFuZGVkKCk7XG4gICAgICB9O1xuICAgIH07XG4gIH1cbn0sIE81ID0gMCwgZjUgPSAxMCwgdWEgPSAoKSA9PiAoe1xuICBwYWdlSW5kZXg6IE81LFxuICBwYWdlU2l6ZTogZjVcbn0pLCBUViA9IHtcbiAgZ2V0SW5pdGlhbFN0YXRlOiAoZSkgPT4gKHtcbiAgICAuLi5lLFxuICAgIHBhZ2luYXRpb246IHtcbiAgICAgIC4uLnVhKCksXG4gICAgICAuLi5lID09IG51bGwgPyB2b2lkIDAgOiBlLnBhZ2luYXRpb25cbiAgICB9XG4gIH0pLFxuICBnZXREZWZhdWx0T3B0aW9uczogKGUpID0+ICh7XG4gICAgb25QYWdpbmF0aW9uQ2hhbmdlOiBvZShcInBhZ2luYXRpb25cIiwgZSlcbiAgfSksXG4gIGNyZWF0ZVRhYmxlOiAoZSkgPT4ge1xuICAgIGxldCB0ID0gITEsIG8gPSAhMTtcbiAgICBlLl9hdXRvUmVzZXRQYWdlSW5kZXggPSAoKSA9PiB7XG4gICAgICB2YXIgbiwgcjtcbiAgICAgIGlmICghdCkge1xuICAgICAgICBlLl9xdWV1ZSgoKSA9PiB7XG4gICAgICAgICAgdCA9ICEwO1xuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgaWYgKChuID0gKHIgPSBlLm9wdGlvbnMuYXV0b1Jlc2V0QWxsKSAhPSBudWxsID8gciA6IGUub3B0aW9ucy5hdXRvUmVzZXRQYWdlSW5kZXgpICE9IG51bGwgPyBuIDogIWUub3B0aW9ucy5tYW51YWxQYWdpbmF0aW9uKSB7XG4gICAgICAgIGlmIChvKVxuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgbyA9ICEwLCBlLl9xdWV1ZSgoKSA9PiB7XG4gICAgICAgICAgZS5yZXNldFBhZ2VJbmRleCgpLCBvID0gITE7XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH0sIGUuc2V0UGFnaW5hdGlvbiA9IChuKSA9PiB7XG4gICAgICBjb25zdCByID0gKGkpID0+IHh0KG4sIGkpO1xuICAgICAgcmV0dXJuIGUub3B0aW9ucy5vblBhZ2luYXRpb25DaGFuZ2UgPT0gbnVsbCA/IHZvaWQgMCA6IGUub3B0aW9ucy5vblBhZ2luYXRpb25DaGFuZ2Uocik7XG4gICAgfSwgZS5yZXNldFBhZ2luYXRpb24gPSAobikgPT4ge1xuICAgICAgdmFyIHI7XG4gICAgICBlLnNldFBhZ2luYXRpb24obiA/IHVhKCkgOiAociA9IGUuaW5pdGlhbFN0YXRlLnBhZ2luYXRpb24pICE9IG51bGwgPyByIDogdWEoKSk7XG4gICAgfSwgZS5zZXRQYWdlSW5kZXggPSAobikgPT4ge1xuICAgICAgZS5zZXRQYWdpbmF0aW9uKChyKSA9PiB7XG4gICAgICAgIGxldCBpID0geHQobiwgci5wYWdlSW5kZXgpO1xuICAgICAgICBjb25zdCBhID0gdHlwZW9mIGUub3B0aW9ucy5wYWdlQ291bnQgPiBcInVcIiB8fCBlLm9wdGlvbnMucGFnZUNvdW50ID09PSAtMSA/IE51bWJlci5NQVhfU0FGRV9JTlRFR0VSIDogZS5vcHRpb25zLnBhZ2VDb3VudCAtIDE7XG4gICAgICAgIHJldHVybiBpID0gTWF0aC5tYXgoMCwgTWF0aC5taW4oaSwgYSkpLCB7XG4gICAgICAgICAgLi4ucixcbiAgICAgICAgICBwYWdlSW5kZXg6IGlcbiAgICAgICAgfTtcbiAgICAgIH0pO1xuICAgIH0sIGUucmVzZXRQYWdlSW5kZXggPSAobikgPT4ge1xuICAgICAgdmFyIHIsIGk7XG4gICAgICBlLnNldFBhZ2VJbmRleChuID8gTzUgOiAociA9IChpID0gZS5pbml0aWFsU3RhdGUpID09IG51bGwgfHwgKGkgPSBpLnBhZ2luYXRpb24pID09IG51bGwgPyB2b2lkIDAgOiBpLnBhZ2VJbmRleCkgIT0gbnVsbCA/IHIgOiBPNSk7XG4gICAgfSwgZS5yZXNldFBhZ2VTaXplID0gKG4pID0+IHtcbiAgICAgIHZhciByLCBpO1xuICAgICAgZS5zZXRQYWdlU2l6ZShuID8gZjUgOiAociA9IChpID0gZS5pbml0aWFsU3RhdGUpID09IG51bGwgfHwgKGkgPSBpLnBhZ2luYXRpb24pID09IG51bGwgPyB2b2lkIDAgOiBpLnBhZ2VTaXplKSAhPSBudWxsID8gciA6IGY1KTtcbiAgICB9LCBlLnNldFBhZ2VTaXplID0gKG4pID0+IHtcbiAgICAgIGUuc2V0UGFnaW5hdGlvbigocikgPT4ge1xuICAgICAgICBjb25zdCBpID0gTWF0aC5tYXgoMSwgeHQobiwgci5wYWdlU2l6ZSkpLCBhID0gci5wYWdlU2l6ZSAqIHIucGFnZUluZGV4LCBzID0gTWF0aC5mbG9vcihhIC8gaSk7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgLi4ucixcbiAgICAgICAgICBwYWdlSW5kZXg6IHMsXG4gICAgICAgICAgcGFnZVNpemU6IGlcbiAgICAgICAgfTtcbiAgICAgIH0pO1xuICAgIH0sIGUuc2V0UGFnZUNvdW50ID0gKG4pID0+IGUuc2V0UGFnaW5hdGlvbigocikgPT4ge1xuICAgICAgdmFyIGk7XG4gICAgICBsZXQgYSA9IHh0KG4sIChpID0gZS5vcHRpb25zLnBhZ2VDb3VudCkgIT0gbnVsbCA/IGkgOiAtMSk7XG4gICAgICByZXR1cm4gdHlwZW9mIGEgPT0gXCJudW1iZXJcIiAmJiAoYSA9IE1hdGgubWF4KC0xLCBhKSksIHtcbiAgICAgICAgLi4ucixcbiAgICAgICAgcGFnZUNvdW50OiBhXG4gICAgICB9O1xuICAgIH0pLCBlLmdldFBhZ2VPcHRpb25zID0gTTAoKCkgPT4gW2UuZ2V0UGFnZUNvdW50KCldLCAobikgPT4ge1xuICAgICAgbGV0IHIgPSBbXTtcbiAgICAgIHJldHVybiBuICYmIG4gPiAwICYmIChyID0gWy4uLm5ldyBBcnJheShuKV0uZmlsbChudWxsKS5tYXAoKGksIGEpID0+IGEpKSwgcjtcbiAgICB9LCBBMChlLm9wdGlvbnMsIFwiZGVidWdUYWJsZVwiLCBcImdldFBhZ2VPcHRpb25zXCIpKSwgZS5nZXRDYW5QcmV2aW91c1BhZ2UgPSAoKSA9PiBlLmdldFN0YXRlKCkucGFnaW5hdGlvbi5wYWdlSW5kZXggPiAwLCBlLmdldENhbk5leHRQYWdlID0gKCkgPT4ge1xuICAgICAgY29uc3Qge1xuICAgICAgICBwYWdlSW5kZXg6IG5cbiAgICAgIH0gPSBlLmdldFN0YXRlKCkucGFnaW5hdGlvbiwgciA9IGUuZ2V0UGFnZUNvdW50KCk7XG4gICAgICByZXR1cm4gciA9PT0gLTEgPyAhMCA6IHIgPT09IDAgPyAhMSA6IG4gPCByIC0gMTtcbiAgICB9LCBlLnByZXZpb3VzUGFnZSA9ICgpID0+IGUuc2V0UGFnZUluZGV4KChuKSA9PiBuIC0gMSksIGUubmV4dFBhZ2UgPSAoKSA9PiBlLnNldFBhZ2VJbmRleCgobikgPT4gbiArIDEpLCBlLmZpcnN0UGFnZSA9ICgpID0+IGUuc2V0UGFnZUluZGV4KDApLCBlLmxhc3RQYWdlID0gKCkgPT4gZS5zZXRQYWdlSW5kZXgoZS5nZXRQYWdlQ291bnQoKSAtIDEpLCBlLmdldFByZVBhZ2luYXRpb25Sb3dNb2RlbCA9ICgpID0+IGUuZ2V0RXhwYW5kZWRSb3dNb2RlbCgpLCBlLmdldFBhZ2luYXRpb25Sb3dNb2RlbCA9ICgpID0+ICghZS5fZ2V0UGFnaW5hdGlvblJvd01vZGVsICYmIGUub3B0aW9ucy5nZXRQYWdpbmF0aW9uUm93TW9kZWwgJiYgKGUuX2dldFBhZ2luYXRpb25Sb3dNb2RlbCA9IGUub3B0aW9ucy5nZXRQYWdpbmF0aW9uUm93TW9kZWwoZSkpLCBlLm9wdGlvbnMubWFudWFsUGFnaW5hdGlvbiB8fCAhZS5fZ2V0UGFnaW5hdGlvblJvd01vZGVsID8gZS5nZXRQcmVQYWdpbmF0aW9uUm93TW9kZWwoKSA6IGUuX2dldFBhZ2luYXRpb25Sb3dNb2RlbCgpKSwgZS5nZXRQYWdlQ291bnQgPSAoKSA9PiB7XG4gICAgICB2YXIgbjtcbiAgICAgIHJldHVybiAobiA9IGUub3B0aW9ucy5wYWdlQ291bnQpICE9IG51bGwgPyBuIDogTWF0aC5jZWlsKGUuZ2V0Um93Q291bnQoKSAvIGUuZ2V0U3RhdGUoKS5wYWdpbmF0aW9uLnBhZ2VTaXplKTtcbiAgICB9LCBlLmdldFJvd0NvdW50ID0gKCkgPT4ge1xuICAgICAgdmFyIG47XG4gICAgICByZXR1cm4gKG4gPSBlLm9wdGlvbnMucm93Q291bnQpICE9IG51bGwgPyBuIDogZS5nZXRQcmVQYWdpbmF0aW9uUm93TW9kZWwoKS5yb3dzLmxlbmd0aDtcbiAgICB9O1xuICB9XG59LCB6YSA9ICgpID0+ICh7XG4gIHRvcDogW10sXG4gIGJvdHRvbTogW11cbn0pLCBJViA9IHtcbiAgZ2V0SW5pdGlhbFN0YXRlOiAoZSkgPT4gKHtcbiAgICByb3dQaW5uaW5nOiB6YSgpLFxuICAgIC4uLmVcbiAgfSksXG4gIGdldERlZmF1bHRPcHRpb25zOiAoZSkgPT4gKHtcbiAgICBvblJvd1Bpbm5pbmdDaGFuZ2U6IG9lKFwicm93UGlubmluZ1wiLCBlKVxuICB9KSxcbiAgY3JlYXRlUm93OiAoZSwgdCkgPT4ge1xuICAgIGUucGluID0gKG8sIG4sIHIpID0+IHtcbiAgICAgIGNvbnN0IGkgPSBuID8gZS5nZXRMZWFmUm93cygpLm1hcCgobCkgPT4ge1xuICAgICAgICBsZXQge1xuICAgICAgICAgIGlkOiBwXG4gICAgICAgIH0gPSBsO1xuICAgICAgICByZXR1cm4gcDtcbiAgICAgIH0pIDogW10sIGEgPSByID8gZS5nZXRQYXJlbnRSb3dzKCkubWFwKChsKSA9PiB7XG4gICAgICAgIGxldCB7XG4gICAgICAgICAgaWQ6IHBcbiAgICAgICAgfSA9IGw7XG4gICAgICAgIHJldHVybiBwO1xuICAgICAgfSkgOiBbXSwgcyA9IC8qIEBfX1BVUkVfXyAqLyBuZXcgU2V0KFsuLi5hLCBlLmlkLCAuLi5pXSk7XG4gICAgICB0LnNldFJvd1Bpbm5pbmcoKGwpID0+IHtcbiAgICAgICAgdmFyIHAsIGQ7XG4gICAgICAgIGlmIChvID09PSBcImJvdHRvbVwiKSB7XG4gICAgICAgICAgdmFyIGIsIE07XG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHRvcDogKChiID0gbCA9PSBudWxsID8gdm9pZCAwIDogbC50b3ApICE9IG51bGwgPyBiIDogW10pLmZpbHRlcigoeikgPT4gIShzICE9IG51bGwgJiYgcy5oYXMoeikpKSxcbiAgICAgICAgICAgIGJvdHRvbTogWy4uLigoTSA9IGwgPT0gbnVsbCA/IHZvaWQgMCA6IGwuYm90dG9tKSAhPSBudWxsID8gTSA6IFtdKS5maWx0ZXIoKHopID0+ICEocyAhPSBudWxsICYmIHMuaGFzKHopKSksIC4uLkFycmF5LmZyb20ocyldXG4gICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgICBpZiAobyA9PT0gXCJ0b3BcIikge1xuICAgICAgICAgIHZhciB1LCBBO1xuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICB0b3A6IFsuLi4oKHUgPSBsID09IG51bGwgPyB2b2lkIDAgOiBsLnRvcCkgIT0gbnVsbCA/IHUgOiBbXSkuZmlsdGVyKCh6KSA9PiAhKHMgIT0gbnVsbCAmJiBzLmhhcyh6KSkpLCAuLi5BcnJheS5mcm9tKHMpXSxcbiAgICAgICAgICAgIGJvdHRvbTogKChBID0gbCA9PSBudWxsID8gdm9pZCAwIDogbC5ib3R0b20pICE9IG51bGwgPyBBIDogW10pLmZpbHRlcigoeikgPT4gIShzICE9IG51bGwgJiYgcy5oYXMoeikpKVxuICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICB0b3A6ICgocCA9IGwgPT0gbnVsbCA/IHZvaWQgMCA6IGwudG9wKSAhPSBudWxsID8gcCA6IFtdKS5maWx0ZXIoKHopID0+ICEocyAhPSBudWxsICYmIHMuaGFzKHopKSksXG4gICAgICAgICAgYm90dG9tOiAoKGQgPSBsID09IG51bGwgPyB2b2lkIDAgOiBsLmJvdHRvbSkgIT0gbnVsbCA/IGQgOiBbXSkuZmlsdGVyKCh6KSA9PiAhKHMgIT0gbnVsbCAmJiBzLmhhcyh6KSkpXG4gICAgICAgIH07XG4gICAgICB9KTtcbiAgICB9LCBlLmdldENhblBpbiA9ICgpID0+IHtcbiAgICAgIHZhciBvO1xuICAgICAgY29uc3Qge1xuICAgICAgICBlbmFibGVSb3dQaW5uaW5nOiBuLFxuICAgICAgICBlbmFibGVQaW5uaW5nOiByXG4gICAgICB9ID0gdC5vcHRpb25zO1xuICAgICAgcmV0dXJuIHR5cGVvZiBuID09IFwiZnVuY3Rpb25cIiA/IG4oZSkgOiAobyA9IG4gPz8gcikgIT0gbnVsbCA/IG8gOiAhMDtcbiAgICB9LCBlLmdldElzUGlubmVkID0gKCkgPT4ge1xuICAgICAgY29uc3QgbyA9IFtlLmlkXSwge1xuICAgICAgICB0b3A6IG4sXG4gICAgICAgIGJvdHRvbTogclxuICAgICAgfSA9IHQuZ2V0U3RhdGUoKS5yb3dQaW5uaW5nLCBpID0gby5zb21lKChzKSA9PiBuID09IG51bGwgPyB2b2lkIDAgOiBuLmluY2x1ZGVzKHMpKSwgYSA9IG8uc29tZSgocykgPT4gciA9PSBudWxsID8gdm9pZCAwIDogci5pbmNsdWRlcyhzKSk7XG4gICAgICByZXR1cm4gaSA/IFwidG9wXCIgOiBhID8gXCJib3R0b21cIiA6ICExO1xuICAgIH0sIGUuZ2V0UGlubmVkSW5kZXggPSAoKSA9PiB7XG4gICAgICB2YXIgbywgbjtcbiAgICAgIGNvbnN0IHIgPSBlLmdldElzUGlubmVkKCk7XG4gICAgICBpZiAoIXIpXG4gICAgICAgIHJldHVybiAtMTtcbiAgICAgIGNvbnN0IGkgPSAobyA9IHIgPT09IFwidG9wXCIgPyB0LmdldFRvcFJvd3MoKSA6IHQuZ2V0Qm90dG9tUm93cygpKSA9PSBudWxsID8gdm9pZCAwIDogby5tYXAoKGEpID0+IHtcbiAgICAgICAgbGV0IHtcbiAgICAgICAgICBpZDogc1xuICAgICAgICB9ID0gYTtcbiAgICAgICAgcmV0dXJuIHM7XG4gICAgICB9KTtcbiAgICAgIHJldHVybiAobiA9IGkgPT0gbnVsbCA/IHZvaWQgMCA6IGkuaW5kZXhPZihlLmlkKSkgIT0gbnVsbCA/IG4gOiAtMTtcbiAgICB9O1xuICB9LFxuICBjcmVhdGVUYWJsZTogKGUpID0+IHtcbiAgICBlLnNldFJvd1Bpbm5pbmcgPSAodCkgPT4gZS5vcHRpb25zLm9uUm93UGlubmluZ0NoYW5nZSA9PSBudWxsID8gdm9pZCAwIDogZS5vcHRpb25zLm9uUm93UGlubmluZ0NoYW5nZSh0KSwgZS5yZXNldFJvd1Bpbm5pbmcgPSAodCkgPT4ge1xuICAgICAgdmFyIG8sIG47XG4gICAgICByZXR1cm4gZS5zZXRSb3dQaW5uaW5nKHQgPyB6YSgpIDogKG8gPSAobiA9IGUuaW5pdGlhbFN0YXRlKSA9PSBudWxsID8gdm9pZCAwIDogbi5yb3dQaW5uaW5nKSAhPSBudWxsID8gbyA6IHphKCkpO1xuICAgIH0sIGUuZ2V0SXNTb21lUm93c1Bpbm5lZCA9ICh0KSA9PiB7XG4gICAgICB2YXIgbztcbiAgICAgIGNvbnN0IG4gPSBlLmdldFN0YXRlKCkucm93UGlubmluZztcbiAgICAgIGlmICghdCkge1xuICAgICAgICB2YXIgciwgaTtcbiAgICAgICAgcmV0dXJuICEhKChyID0gbi50b3ApICE9IG51bGwgJiYgci5sZW5ndGggfHwgKGkgPSBuLmJvdHRvbSkgIT0gbnVsbCAmJiBpLmxlbmd0aCk7XG4gICAgICB9XG4gICAgICByZXR1cm4gISEoKG8gPSBuW3RdKSAhPSBudWxsICYmIG8ubGVuZ3RoKTtcbiAgICB9LCBlLl9nZXRQaW5uZWRSb3dzID0gKHQsIG8sIG4pID0+IHtcbiAgICAgIHZhciByO1xuICAgICAgcmV0dXJuICgociA9IGUub3B0aW9ucy5rZWVwUGlubmVkUm93cykgPT0gbnVsbCB8fCByID8gKFxuICAgICAgICAvL2dldCBhbGwgcm93cyB0aGF0IGFyZSBwaW5uZWQgZXZlbiBpZiB0aGV5IHdvdWxkIG5vdCBiZSBvdGhlcndpc2UgdmlzaWJsZVxuICAgICAgICAvL2FjY291bnQgZm9yIGV4cGFuZGVkIHBhcmVudCByb3dzLCBidXQgbm90IHBhZ2luYXRpb24gb3IgZmlsdGVyaW5nXG4gICAgICAgIChvID8/IFtdKS5tYXAoKGEpID0+IHtcbiAgICAgICAgICBjb25zdCBzID0gZS5nZXRSb3coYSwgITApO1xuICAgICAgICAgIHJldHVybiBzLmdldElzQWxsUGFyZW50c0V4cGFuZGVkKCkgPyBzIDogbnVsbDtcbiAgICAgICAgfSlcbiAgICAgICkgOiAoXG4gICAgICAgIC8vZWxzZSBnZXQgb25seSB2aXNpYmxlIHJvd3MgdGhhdCBhcmUgcGlubmVkXG4gICAgICAgIChvID8/IFtdKS5tYXAoKGEpID0+IHQuZmluZCgocykgPT4gcy5pZCA9PT0gYSkpXG4gICAgICApKS5maWx0ZXIoQm9vbGVhbikubWFwKChhKSA9PiAoe1xuICAgICAgICAuLi5hLFxuICAgICAgICBwb3NpdGlvbjogblxuICAgICAgfSkpO1xuICAgIH0sIGUuZ2V0VG9wUm93cyA9IE0wKCgpID0+IFtlLmdldFJvd01vZGVsKCkucm93cywgZS5nZXRTdGF0ZSgpLnJvd1Bpbm5pbmcudG9wXSwgKHQsIG8pID0+IGUuX2dldFBpbm5lZFJvd3ModCwgbywgXCJ0b3BcIiksIEEwKGUub3B0aW9ucywgXCJkZWJ1Z1Jvd3NcIiwgXCJnZXRUb3BSb3dzXCIpKSwgZS5nZXRCb3R0b21Sb3dzID0gTTAoKCkgPT4gW2UuZ2V0Um93TW9kZWwoKS5yb3dzLCBlLmdldFN0YXRlKCkucm93UGlubmluZy5ib3R0b21dLCAodCwgbykgPT4gZS5fZ2V0UGlubmVkUm93cyh0LCBvLCBcImJvdHRvbVwiKSwgQTAoZS5vcHRpb25zLCBcImRlYnVnUm93c1wiLCBcImdldEJvdHRvbVJvd3NcIikpLCBlLmdldENlbnRlclJvd3MgPSBNMCgoKSA9PiBbZS5nZXRSb3dNb2RlbCgpLnJvd3MsIGUuZ2V0U3RhdGUoKS5yb3dQaW5uaW5nLnRvcCwgZS5nZXRTdGF0ZSgpLnJvd1Bpbm5pbmcuYm90dG9tXSwgKHQsIG8sIG4pID0+IHtcbiAgICAgIGNvbnN0IHIgPSAvKiBAX19QVVJFX18gKi8gbmV3IFNldChbLi4ubyA/PyBbXSwgLi4ubiA/PyBbXV0pO1xuICAgICAgcmV0dXJuIHQuZmlsdGVyKChpKSA9PiAhci5oYXMoaS5pZCkpO1xuICAgIH0sIEEwKGUub3B0aW9ucywgXCJkZWJ1Z1Jvd3NcIiwgXCJnZXRDZW50ZXJSb3dzXCIpKTtcbiAgfVxufSwgRFYgPSB7XG4gIGdldEluaXRpYWxTdGF0ZTogKGUpID0+ICh7XG4gICAgcm93U2VsZWN0aW9uOiB7fSxcbiAgICAuLi5lXG4gIH0pLFxuICBnZXREZWZhdWx0T3B0aW9uczogKGUpID0+ICh7XG4gICAgb25Sb3dTZWxlY3Rpb25DaGFuZ2U6IG9lKFwicm93U2VsZWN0aW9uXCIsIGUpLFxuICAgIGVuYWJsZVJvd1NlbGVjdGlvbjogITAsXG4gICAgZW5hYmxlTXVsdGlSb3dTZWxlY3Rpb246ICEwLFxuICAgIGVuYWJsZVN1YlJvd1NlbGVjdGlvbjogITBcbiAgICAvLyBlbmFibGVHcm91cGluZ1Jvd1NlbGVjdGlvbjogZmFsc2UsXG4gICAgLy8gaXNBZGRpdGl2ZVNlbGVjdEV2ZW50OiAoZTogdW5rbm93bikgPT4gISFlLm1ldGFLZXksXG4gICAgLy8gaXNJbmNsdXNpdmVTZWxlY3RFdmVudDogKGU6IHVua25vd24pID0+ICEhZS5zaGlmdEtleSxcbiAgfSksXG4gIGNyZWF0ZVRhYmxlOiAoZSkgPT4ge1xuICAgIGUuc2V0Um93U2VsZWN0aW9uID0gKHQpID0+IGUub3B0aW9ucy5vblJvd1NlbGVjdGlvbkNoYW5nZSA9PSBudWxsID8gdm9pZCAwIDogZS5vcHRpb25zLm9uUm93U2VsZWN0aW9uQ2hhbmdlKHQpLCBlLnJlc2V0Um93U2VsZWN0aW9uID0gKHQpID0+IHtcbiAgICAgIHZhciBvO1xuICAgICAgcmV0dXJuIGUuc2V0Um93U2VsZWN0aW9uKHQgPyB7fSA6IChvID0gZS5pbml0aWFsU3RhdGUucm93U2VsZWN0aW9uKSAhPSBudWxsID8gbyA6IHt9KTtcbiAgICB9LCBlLnRvZ2dsZUFsbFJvd3NTZWxlY3RlZCA9ICh0KSA9PiB7XG4gICAgICBlLnNldFJvd1NlbGVjdGlvbigobykgPT4ge1xuICAgICAgICB0ID0gdHlwZW9mIHQgPCBcInVcIiA/IHQgOiAhZS5nZXRJc0FsbFJvd3NTZWxlY3RlZCgpO1xuICAgICAgICBjb25zdCBuID0ge1xuICAgICAgICAgIC4uLm9cbiAgICAgICAgfSwgciA9IGUuZ2V0UHJlR3JvdXBlZFJvd01vZGVsKCkuZmxhdFJvd3M7XG4gICAgICAgIHJldHVybiB0ID8gci5mb3JFYWNoKChpKSA9PiB7XG4gICAgICAgICAgaS5nZXRDYW5TZWxlY3QoKSAmJiAobltpLmlkXSA9ICEwKTtcbiAgICAgICAgfSkgOiByLmZvckVhY2goKGkpID0+IHtcbiAgICAgICAgICBkZWxldGUgbltpLmlkXTtcbiAgICAgICAgfSksIG47XG4gICAgICB9KTtcbiAgICB9LCBlLnRvZ2dsZUFsbFBhZ2VSb3dzU2VsZWN0ZWQgPSAodCkgPT4gZS5zZXRSb3dTZWxlY3Rpb24oKG8pID0+IHtcbiAgICAgIGNvbnN0IG4gPSB0eXBlb2YgdCA8IFwidVwiID8gdCA6ICFlLmdldElzQWxsUGFnZVJvd3NTZWxlY3RlZCgpLCByID0ge1xuICAgICAgICAuLi5vXG4gICAgICB9O1xuICAgICAgcmV0dXJuIGUuZ2V0Um93TW9kZWwoKS5yb3dzLmZvckVhY2goKGkpID0+IHtcbiAgICAgICAgZzUociwgaS5pZCwgbiwgITAsIGUpO1xuICAgICAgfSksIHI7XG4gICAgfSksIGUuZ2V0UHJlU2VsZWN0ZWRSb3dNb2RlbCA9ICgpID0+IGUuZ2V0Q29yZVJvd01vZGVsKCksIGUuZ2V0U2VsZWN0ZWRSb3dNb2RlbCA9IE0wKCgpID0+IFtlLmdldFN0YXRlKCkucm93U2VsZWN0aW9uLCBlLmdldENvcmVSb3dNb2RlbCgpXSwgKHQsIG8pID0+IE9iamVjdC5rZXlzKHQpLmxlbmd0aCA/IGhhKGUsIG8pIDoge1xuICAgICAgcm93czogW10sXG4gICAgICBmbGF0Um93czogW10sXG4gICAgICByb3dzQnlJZDoge31cbiAgICB9LCBBMChlLm9wdGlvbnMsIFwiZGVidWdUYWJsZVwiLCBcImdldFNlbGVjdGVkUm93TW9kZWxcIikpLCBlLmdldEZpbHRlcmVkU2VsZWN0ZWRSb3dNb2RlbCA9IE0wKCgpID0+IFtlLmdldFN0YXRlKCkucm93U2VsZWN0aW9uLCBlLmdldEZpbHRlcmVkUm93TW9kZWwoKV0sICh0LCBvKSA9PiBPYmplY3Qua2V5cyh0KS5sZW5ndGggPyBoYShlLCBvKSA6IHtcbiAgICAgIHJvd3M6IFtdLFxuICAgICAgZmxhdFJvd3M6IFtdLFxuICAgICAgcm93c0J5SWQ6IHt9XG4gICAgfSwgQTAoZS5vcHRpb25zLCBcImRlYnVnVGFibGVcIiwgXCJnZXRGaWx0ZXJlZFNlbGVjdGVkUm93TW9kZWxcIikpLCBlLmdldEdyb3VwZWRTZWxlY3RlZFJvd01vZGVsID0gTTAoKCkgPT4gW2UuZ2V0U3RhdGUoKS5yb3dTZWxlY3Rpb24sIGUuZ2V0U29ydGVkUm93TW9kZWwoKV0sICh0LCBvKSA9PiBPYmplY3Qua2V5cyh0KS5sZW5ndGggPyBoYShlLCBvKSA6IHtcbiAgICAgIHJvd3M6IFtdLFxuICAgICAgZmxhdFJvd3M6IFtdLFxuICAgICAgcm93c0J5SWQ6IHt9XG4gICAgfSwgQTAoZS5vcHRpb25zLCBcImRlYnVnVGFibGVcIiwgXCJnZXRHcm91cGVkU2VsZWN0ZWRSb3dNb2RlbFwiKSksIGUuZ2V0SXNBbGxSb3dzU2VsZWN0ZWQgPSAoKSA9PiB7XG4gICAgICBjb25zdCB0ID0gZS5nZXRGaWx0ZXJlZFJvd01vZGVsKCkuZmxhdFJvd3MsIHtcbiAgICAgICAgcm93U2VsZWN0aW9uOiBvXG4gICAgICB9ID0gZS5nZXRTdGF0ZSgpO1xuICAgICAgbGV0IG4gPSAhISh0Lmxlbmd0aCAmJiBPYmplY3Qua2V5cyhvKS5sZW5ndGgpO1xuICAgICAgcmV0dXJuIG4gJiYgdC5zb21lKChyKSA9PiByLmdldENhblNlbGVjdCgpICYmICFvW3IuaWRdKSAmJiAobiA9ICExKSwgbjtcbiAgICB9LCBlLmdldElzQWxsUGFnZVJvd3NTZWxlY3RlZCA9ICgpID0+IHtcbiAgICAgIGNvbnN0IHQgPSBlLmdldFBhZ2luYXRpb25Sb3dNb2RlbCgpLmZsYXRSb3dzLmZpbHRlcigocikgPT4gci5nZXRDYW5TZWxlY3QoKSksIHtcbiAgICAgICAgcm93U2VsZWN0aW9uOiBvXG4gICAgICB9ID0gZS5nZXRTdGF0ZSgpO1xuICAgICAgbGV0IG4gPSAhIXQubGVuZ3RoO1xuICAgICAgcmV0dXJuIG4gJiYgdC5zb21lKChyKSA9PiAhb1tyLmlkXSkgJiYgKG4gPSAhMSksIG47XG4gICAgfSwgZS5nZXRJc1NvbWVSb3dzU2VsZWN0ZWQgPSAoKSA9PiB7XG4gICAgICB2YXIgdDtcbiAgICAgIGNvbnN0IG8gPSBPYmplY3Qua2V5cygodCA9IGUuZ2V0U3RhdGUoKS5yb3dTZWxlY3Rpb24pICE9IG51bGwgPyB0IDoge30pLmxlbmd0aDtcbiAgICAgIHJldHVybiBvID4gMCAmJiBvIDwgZS5nZXRGaWx0ZXJlZFJvd01vZGVsKCkuZmxhdFJvd3MubGVuZ3RoO1xuICAgIH0sIGUuZ2V0SXNTb21lUGFnZVJvd3NTZWxlY3RlZCA9ICgpID0+IHtcbiAgICAgIGNvbnN0IHQgPSBlLmdldFBhZ2luYXRpb25Sb3dNb2RlbCgpLmZsYXRSb3dzO1xuICAgICAgcmV0dXJuIGUuZ2V0SXNBbGxQYWdlUm93c1NlbGVjdGVkKCkgPyAhMSA6IHQuZmlsdGVyKChvKSA9PiBvLmdldENhblNlbGVjdCgpKS5zb21lKChvKSA9PiBvLmdldElzU2VsZWN0ZWQoKSB8fCBvLmdldElzU29tZVNlbGVjdGVkKCkpO1xuICAgIH0sIGUuZ2V0VG9nZ2xlQWxsUm93c1NlbGVjdGVkSGFuZGxlciA9ICgpID0+ICh0KSA9PiB7XG4gICAgICBlLnRvZ2dsZUFsbFJvd3NTZWxlY3RlZCh0LnRhcmdldC5jaGVja2VkKTtcbiAgICB9LCBlLmdldFRvZ2dsZUFsbFBhZ2VSb3dzU2VsZWN0ZWRIYW5kbGVyID0gKCkgPT4gKHQpID0+IHtcbiAgICAgIGUudG9nZ2xlQWxsUGFnZVJvd3NTZWxlY3RlZCh0LnRhcmdldC5jaGVja2VkKTtcbiAgICB9O1xuICB9LFxuICBjcmVhdGVSb3c6IChlLCB0KSA9PiB7XG4gICAgZS50b2dnbGVTZWxlY3RlZCA9IChvLCBuKSA9PiB7XG4gICAgICBjb25zdCByID0gZS5nZXRJc1NlbGVjdGVkKCk7XG4gICAgICB0LnNldFJvd1NlbGVjdGlvbigoaSkgPT4ge1xuICAgICAgICB2YXIgYTtcbiAgICAgICAgaWYgKG8gPSB0eXBlb2YgbyA8IFwidVwiID8gbyA6ICFyLCBlLmdldENhblNlbGVjdCgpICYmIHIgPT09IG8pXG4gICAgICAgICAgcmV0dXJuIGk7XG4gICAgICAgIGNvbnN0IHMgPSB7XG4gICAgICAgICAgLi4uaVxuICAgICAgICB9O1xuICAgICAgICByZXR1cm4gZzUocywgZS5pZCwgbywgKGEgPSBuID09IG51bGwgPyB2b2lkIDAgOiBuLnNlbGVjdENoaWxkcmVuKSAhPSBudWxsID8gYSA6ICEwLCB0KSwgcztcbiAgICAgIH0pO1xuICAgIH0sIGUuZ2V0SXNTZWxlY3RlZCA9ICgpID0+IHtcbiAgICAgIGNvbnN0IHtcbiAgICAgICAgcm93U2VsZWN0aW9uOiBvXG4gICAgICB9ID0gdC5nZXRTdGF0ZSgpO1xuICAgICAgcmV0dXJuIFE2KGUsIG8pO1xuICAgIH0sIGUuZ2V0SXNTb21lU2VsZWN0ZWQgPSAoKSA9PiB7XG4gICAgICBjb25zdCB7XG4gICAgICAgIHJvd1NlbGVjdGlvbjogb1xuICAgICAgfSA9IHQuZ2V0U3RhdGUoKTtcbiAgICAgIHJldHVybiBDNShlLCBvKSA9PT0gXCJzb21lXCI7XG4gICAgfSwgZS5nZXRJc0FsbFN1YlJvd3NTZWxlY3RlZCA9ICgpID0+IHtcbiAgICAgIGNvbnN0IHtcbiAgICAgICAgcm93U2VsZWN0aW9uOiBvXG4gICAgICB9ID0gdC5nZXRTdGF0ZSgpO1xuICAgICAgcmV0dXJuIEM1KGUsIG8pID09PSBcImFsbFwiO1xuICAgIH0sIGUuZ2V0Q2FuU2VsZWN0ID0gKCkgPT4ge1xuICAgICAgdmFyIG87XG4gICAgICByZXR1cm4gdHlwZW9mIHQub3B0aW9ucy5lbmFibGVSb3dTZWxlY3Rpb24gPT0gXCJmdW5jdGlvblwiID8gdC5vcHRpb25zLmVuYWJsZVJvd1NlbGVjdGlvbihlKSA6IChvID0gdC5vcHRpb25zLmVuYWJsZVJvd1NlbGVjdGlvbikgIT0gbnVsbCA/IG8gOiAhMDtcbiAgICB9LCBlLmdldENhblNlbGVjdFN1YlJvd3MgPSAoKSA9PiB7XG4gICAgICB2YXIgbztcbiAgICAgIHJldHVybiB0eXBlb2YgdC5vcHRpb25zLmVuYWJsZVN1YlJvd1NlbGVjdGlvbiA9PSBcImZ1bmN0aW9uXCIgPyB0Lm9wdGlvbnMuZW5hYmxlU3ViUm93U2VsZWN0aW9uKGUpIDogKG8gPSB0Lm9wdGlvbnMuZW5hYmxlU3ViUm93U2VsZWN0aW9uKSAhPSBudWxsID8gbyA6ICEwO1xuICAgIH0sIGUuZ2V0Q2FuTXVsdGlTZWxlY3QgPSAoKSA9PiB7XG4gICAgICB2YXIgbztcbiAgICAgIHJldHVybiB0eXBlb2YgdC5vcHRpb25zLmVuYWJsZU11bHRpUm93U2VsZWN0aW9uID09IFwiZnVuY3Rpb25cIiA/IHQub3B0aW9ucy5lbmFibGVNdWx0aVJvd1NlbGVjdGlvbihlKSA6IChvID0gdC5vcHRpb25zLmVuYWJsZU11bHRpUm93U2VsZWN0aW9uKSAhPSBudWxsID8gbyA6ICEwO1xuICAgIH0sIGUuZ2V0VG9nZ2xlU2VsZWN0ZWRIYW5kbGVyID0gKCkgPT4ge1xuICAgICAgY29uc3QgbyA9IGUuZ2V0Q2FuU2VsZWN0KCk7XG4gICAgICByZXR1cm4gKG4pID0+IHtcbiAgICAgICAgdmFyIHI7XG4gICAgICAgIG8gJiYgZS50b2dnbGVTZWxlY3RlZCgociA9IG4udGFyZ2V0KSA9PSBudWxsID8gdm9pZCAwIDogci5jaGVja2VkKTtcbiAgICAgIH07XG4gICAgfTtcbiAgfVxufSwgZzUgPSAoZSwgdCwgbywgbiwgcikgPT4ge1xuICB2YXIgaTtcbiAgY29uc3QgYSA9IHIuZ2V0Um93KHQsICEwKTtcbiAgbyA/IChhLmdldENhbk11bHRpU2VsZWN0KCkgfHwgT2JqZWN0LmtleXMoZSkuZm9yRWFjaCgocykgPT4gZGVsZXRlIGVbc10pLCBhLmdldENhblNlbGVjdCgpICYmIChlW3RdID0gITApKSA6IGRlbGV0ZSBlW3RdLCBuICYmIChpID0gYS5zdWJSb3dzKSAhPSBudWxsICYmIGkubGVuZ3RoICYmIGEuZ2V0Q2FuU2VsZWN0U3ViUm93cygpICYmIGEuc3ViUm93cy5mb3JFYWNoKChzKSA9PiBnNShlLCBzLmlkLCBvLCBuLCByKSk7XG59O1xuZnVuY3Rpb24gaGEoZSwgdCkge1xuICBjb25zdCBvID0gZS5nZXRTdGF0ZSgpLnJvd1NlbGVjdGlvbiwgbiA9IFtdLCByID0ge30sIGkgPSBmdW5jdGlvbihhLCBzKSB7XG4gICAgcmV0dXJuIGEubWFwKChsKSA9PiB7XG4gICAgICB2YXIgcDtcbiAgICAgIGNvbnN0IGQgPSBRNihsLCBvKTtcbiAgICAgIGlmIChkICYmIChuLnB1c2gobCksIHJbbC5pZF0gPSBsKSwgKHAgPSBsLnN1YlJvd3MpICE9IG51bGwgJiYgcC5sZW5ndGggJiYgKGwgPSB7XG4gICAgICAgIC4uLmwsXG4gICAgICAgIHN1YlJvd3M6IGkobC5zdWJSb3dzKVxuICAgICAgfSksIGQpXG4gICAgICAgIHJldHVybiBsO1xuICAgIH0pLmZpbHRlcihCb29sZWFuKTtcbiAgfTtcbiAgcmV0dXJuIHtcbiAgICByb3dzOiBpKHQucm93cyksXG4gICAgZmxhdFJvd3M6IG4sXG4gICAgcm93c0J5SWQ6IHJcbiAgfTtcbn1cbmZ1bmN0aW9uIFE2KGUsIHQpIHtcbiAgdmFyIG87XG4gIHJldHVybiAobyA9IHRbZS5pZF0pICE9IG51bGwgPyBvIDogITE7XG59XG5mdW5jdGlvbiBDNShlLCB0LCBvKSB7XG4gIHZhciBuO1xuICBpZiAoISgobiA9IGUuc3ViUm93cykgIT0gbnVsbCAmJiBuLmxlbmd0aCkpXG4gICAgcmV0dXJuICExO1xuICBsZXQgciA9ICEwLCBpID0gITE7XG4gIHJldHVybiBlLnN1YlJvd3MuZm9yRWFjaCgoYSkgPT4ge1xuICAgIGlmICghKGkgJiYgIXIpICYmIChhLmdldENhblNlbGVjdCgpICYmIChRNihhLCB0KSA/IGkgPSAhMCA6IHIgPSAhMSksIGEuc3ViUm93cyAmJiBhLnN1YlJvd3MubGVuZ3RoKSkge1xuICAgICAgY29uc3QgcyA9IEM1KGEsIHQpO1xuICAgICAgcyA9PT0gXCJhbGxcIiA/IGkgPSAhMCA6IChzID09PSBcInNvbWVcIiAmJiAoaSA9ICEwKSwgciA9ICExKTtcbiAgICB9XG4gIH0pLCByID8gXCJhbGxcIiA6IGkgPyBcInNvbWVcIiA6ICExO1xufVxuY29uc3QgbTUgPSAvKFswLTldKykvZ20sIEhWID0gKGUsIHQsIG8pID0+IG1iKFZ0KGUuZ2V0VmFsdWUobykpLnRvTG93ZXJDYXNlKCksIFZ0KHQuZ2V0VmFsdWUobykpLnRvTG93ZXJDYXNlKCkpLCBWViA9IChlLCB0LCBvKSA9PiBtYihWdChlLmdldFZhbHVlKG8pKSwgVnQodC5nZXRWYWx1ZShvKSkpLCBQViA9IChlLCB0LCBvKSA9PiBaNihWdChlLmdldFZhbHVlKG8pKS50b0xvd2VyQ2FzZSgpLCBWdCh0LmdldFZhbHVlKG8pKS50b0xvd2VyQ2FzZSgpKSwgRlYgPSAoZSwgdCwgbykgPT4gWjYoVnQoZS5nZXRWYWx1ZShvKSksIFZ0KHQuZ2V0VmFsdWUobykpKSwgWFYgPSAoZSwgdCwgbykgPT4ge1xuICBjb25zdCBuID0gZS5nZXRWYWx1ZShvKSwgciA9IHQuZ2V0VmFsdWUobyk7XG4gIHJldHVybiBuID4gciA/IDEgOiBuIDwgciA/IC0xIDogMDtcbn0sIFVWID0gKGUsIHQsIG8pID0+IFo2KGUuZ2V0VmFsdWUobyksIHQuZ2V0VmFsdWUobykpO1xuZnVuY3Rpb24gWjYoZSwgdCkge1xuICByZXR1cm4gZSA9PT0gdCA/IDAgOiBlID4gdCA/IDEgOiAtMTtcbn1cbmZ1bmN0aW9uIFZ0KGUpIHtcbiAgcmV0dXJuIHR5cGVvZiBlID09IFwibnVtYmVyXCIgPyBpc05hTihlKSB8fCBlID09PSAxIC8gMCB8fCBlID09PSAtMSAvIDAgPyBcIlwiIDogU3RyaW5nKGUpIDogdHlwZW9mIGUgPT0gXCJzdHJpbmdcIiA/IGUgOiBcIlwiO1xufVxuZnVuY3Rpb24gbWIoZSwgdCkge1xuICBjb25zdCBvID0gZS5zcGxpdChtNSkuZmlsdGVyKEJvb2xlYW4pLCBuID0gdC5zcGxpdChtNSkuZmlsdGVyKEJvb2xlYW4pO1xuICBmb3IgKDsgby5sZW5ndGggJiYgbi5sZW5ndGg7ICkge1xuICAgIGNvbnN0IHIgPSBvLnNoaWZ0KCksIGkgPSBuLnNoaWZ0KCksIGEgPSBwYXJzZUludChyLCAxMCksIHMgPSBwYXJzZUludChpLCAxMCksIGwgPSBbYSwgc10uc29ydCgpO1xuICAgIGlmIChpc05hTihsWzBdKSkge1xuICAgICAgaWYgKHIgPiBpKVxuICAgICAgICByZXR1cm4gMTtcbiAgICAgIGlmIChpID4gcilcbiAgICAgICAgcmV0dXJuIC0xO1xuICAgICAgY29udGludWU7XG4gICAgfVxuICAgIGlmIChpc05hTihsWzFdKSlcbiAgICAgIHJldHVybiBpc05hTihhKSA/IC0xIDogMTtcbiAgICBpZiAoYSA+IHMpXG4gICAgICByZXR1cm4gMTtcbiAgICBpZiAocyA+IGEpXG4gICAgICByZXR1cm4gLTE7XG4gIH1cbiAgcmV0dXJuIG8ubGVuZ3RoIC0gbi5sZW5ndGg7XG59XG5jb25zdCBJbyA9IHtcbiAgYWxwaGFudW1lcmljOiBIVixcbiAgYWxwaGFudW1lcmljQ2FzZVNlbnNpdGl2ZTogVlYsXG4gIHRleHQ6IFBWLFxuICB0ZXh0Q2FzZVNlbnNpdGl2ZTogRlYsXG4gIGRhdGV0aW1lOiBYVixcbiAgYmFzaWM6IFVWXG59LCBZViA9IHtcbiAgZ2V0SW5pdGlhbFN0YXRlOiAoZSkgPT4gKHtcbiAgICBzb3J0aW5nOiBbXSxcbiAgICAuLi5lXG4gIH0pLFxuICBnZXREZWZhdWx0Q29sdW1uRGVmOiAoKSA9PiAoe1xuICAgIHNvcnRpbmdGbjogXCJhdXRvXCIsXG4gICAgc29ydFVuZGVmaW5lZDogMVxuICB9KSxcbiAgZ2V0RGVmYXVsdE9wdGlvbnM6IChlKSA9PiAoe1xuICAgIG9uU29ydGluZ0NoYW5nZTogb2UoXCJzb3J0aW5nXCIsIGUpLFxuICAgIGlzTXVsdGlTb3J0RXZlbnQ6ICh0KSA9PiB0LnNoaWZ0S2V5XG4gIH0pLFxuICBjcmVhdGVDb2x1bW46IChlLCB0KSA9PiB7XG4gICAgZS5nZXRBdXRvU29ydGluZ0ZuID0gKCkgPT4ge1xuICAgICAgY29uc3QgbyA9IHQuZ2V0RmlsdGVyZWRSb3dNb2RlbCgpLmZsYXRSb3dzLnNsaWNlKDEwKTtcbiAgICAgIGxldCBuID0gITE7XG4gICAgICBmb3IgKGNvbnN0IHIgb2Ygbykge1xuICAgICAgICBjb25zdCBpID0gciA9PSBudWxsID8gdm9pZCAwIDogci5nZXRWYWx1ZShlLmlkKTtcbiAgICAgICAgaWYgKE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChpKSA9PT0gXCJbb2JqZWN0IERhdGVdXCIpXG4gICAgICAgICAgcmV0dXJuIElvLmRhdGV0aW1lO1xuICAgICAgICBpZiAodHlwZW9mIGkgPT0gXCJzdHJpbmdcIiAmJiAobiA9ICEwLCBpLnNwbGl0KG01KS5sZW5ndGggPiAxKSlcbiAgICAgICAgICByZXR1cm4gSW8uYWxwaGFudW1lcmljO1xuICAgICAgfVxuICAgICAgcmV0dXJuIG4gPyBJby50ZXh0IDogSW8uYmFzaWM7XG4gICAgfSwgZS5nZXRBdXRvU29ydERpciA9ICgpID0+IHtcbiAgICAgIGNvbnN0IG8gPSB0LmdldEZpbHRlcmVkUm93TW9kZWwoKS5mbGF0Um93c1swXTtcbiAgICAgIHJldHVybiB0eXBlb2YgKG8gPT0gbnVsbCA/IHZvaWQgMCA6IG8uZ2V0VmFsdWUoZS5pZCkpID09IFwic3RyaW5nXCIgPyBcImFzY1wiIDogXCJkZXNjXCI7XG4gICAgfSwgZS5nZXRTb3J0aW5nRm4gPSAoKSA9PiB7XG4gICAgICB2YXIgbywgbjtcbiAgICAgIGlmICghZSlcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCk7XG4gICAgICByZXR1cm4gcmkoZS5jb2x1bW5EZWYuc29ydGluZ0ZuKSA/IGUuY29sdW1uRGVmLnNvcnRpbmdGbiA6IGUuY29sdW1uRGVmLnNvcnRpbmdGbiA9PT0gXCJhdXRvXCIgPyBlLmdldEF1dG9Tb3J0aW5nRm4oKSA6IChvID0gKG4gPSB0Lm9wdGlvbnMuc29ydGluZ0ZucykgPT0gbnVsbCA/IHZvaWQgMCA6IG5bZS5jb2x1bW5EZWYuc29ydGluZ0ZuXSkgIT0gbnVsbCA/IG8gOiBJb1tlLmNvbHVtbkRlZi5zb3J0aW5nRm5dO1xuICAgIH0sIGUudG9nZ2xlU29ydGluZyA9IChvLCBuKSA9PiB7XG4gICAgICBjb25zdCByID0gZS5nZXROZXh0U29ydGluZ09yZGVyKCksIGkgPSB0eXBlb2YgbyA8IFwidVwiICYmIG8gIT09IG51bGw7XG4gICAgICB0LnNldFNvcnRpbmcoKGEpID0+IHtcbiAgICAgICAgY29uc3QgcyA9IGEgPT0gbnVsbCA/IHZvaWQgMCA6IGEuZmluZCgodSkgPT4gdS5pZCA9PT0gZS5pZCksIGwgPSBhID09IG51bGwgPyB2b2lkIDAgOiBhLmZpbmRJbmRleCgodSkgPT4gdS5pZCA9PT0gZS5pZCk7XG4gICAgICAgIGxldCBwID0gW10sIGQsIGIgPSBpID8gbyA6IHIgPT09IFwiZGVzY1wiO1xuICAgICAgICBpZiAoYSAhPSBudWxsICYmIGEubGVuZ3RoICYmIGUuZ2V0Q2FuTXVsdGlTb3J0KCkgJiYgbiA/IHMgPyBkID0gXCJ0b2dnbGVcIiA6IGQgPSBcImFkZFwiIDogYSAhPSBudWxsICYmIGEubGVuZ3RoICYmIGwgIT09IGEubGVuZ3RoIC0gMSA/IGQgPSBcInJlcGxhY2VcIiA6IHMgPyBkID0gXCJ0b2dnbGVcIiA6IGQgPSBcInJlcGxhY2VcIiwgZCA9PT0gXCJ0b2dnbGVcIiAmJiAoaSB8fCByIHx8IChkID0gXCJyZW1vdmVcIikpLCBkID09PSBcImFkZFwiKSB7XG4gICAgICAgICAgdmFyIE07XG4gICAgICAgICAgcCA9IFsuLi5hLCB7XG4gICAgICAgICAgICBpZDogZS5pZCxcbiAgICAgICAgICAgIGRlc2M6IGJcbiAgICAgICAgICB9XSwgcC5zcGxpY2UoMCwgcC5sZW5ndGggLSAoKE0gPSB0Lm9wdGlvbnMubWF4TXVsdGlTb3J0Q29sQ291bnQpICE9IG51bGwgPyBNIDogTnVtYmVyLk1BWF9TQUZFX0lOVEVHRVIpKTtcbiAgICAgICAgfSBlbHNlXG4gICAgICAgICAgZCA9PT0gXCJ0b2dnbGVcIiA/IHAgPSBhLm1hcCgodSkgPT4gdS5pZCA9PT0gZS5pZCA/IHtcbiAgICAgICAgICAgIC4uLnUsXG4gICAgICAgICAgICBkZXNjOiBiXG4gICAgICAgICAgfSA6IHUpIDogZCA9PT0gXCJyZW1vdmVcIiA/IHAgPSBhLmZpbHRlcigodSkgPT4gdS5pZCAhPT0gZS5pZCkgOiBwID0gW3tcbiAgICAgICAgICAgIGlkOiBlLmlkLFxuICAgICAgICAgICAgZGVzYzogYlxuICAgICAgICAgIH1dO1xuICAgICAgICByZXR1cm4gcDtcbiAgICAgIH0pO1xuICAgIH0sIGUuZ2V0Rmlyc3RTb3J0RGlyID0gKCkgPT4ge1xuICAgICAgdmFyIG8sIG47XG4gICAgICByZXR1cm4gKChvID0gKG4gPSBlLmNvbHVtbkRlZi5zb3J0RGVzY0ZpcnN0KSAhPSBudWxsID8gbiA6IHQub3B0aW9ucy5zb3J0RGVzY0ZpcnN0KSAhPSBudWxsID8gbyA6IGUuZ2V0QXV0b1NvcnREaXIoKSA9PT0gXCJkZXNjXCIpID8gXCJkZXNjXCIgOiBcImFzY1wiO1xuICAgIH0sIGUuZ2V0TmV4dFNvcnRpbmdPcmRlciA9IChvKSA9PiB7XG4gICAgICB2YXIgbiwgcjtcbiAgICAgIGNvbnN0IGkgPSBlLmdldEZpcnN0U29ydERpcigpLCBhID0gZS5nZXRJc1NvcnRlZCgpO1xuICAgICAgcmV0dXJuIGEgPyBhICE9PSBpICYmICgobiA9IHQub3B0aW9ucy5lbmFibGVTb3J0aW5nUmVtb3ZhbCkgPT0gbnVsbCB8fCBuKSAmJiAvLyBJZiBlbmFibGVTb3J0UmVtb3ZlLCBlbmFibGUgaW4gZ2VuZXJhbFxuICAgICAgKCEobyAmJiAociA9IHQub3B0aW9ucy5lbmFibGVNdWx0aVJlbW92ZSkgIT0gbnVsbCkgfHwgcikgPyAhMSA6IGEgPT09IFwiZGVzY1wiID8gXCJhc2NcIiA6IFwiZGVzY1wiIDogaTtcbiAgICB9LCBlLmdldENhblNvcnQgPSAoKSA9PiB7XG4gICAgICB2YXIgbywgbjtcbiAgICAgIHJldHVybiAoKG8gPSBlLmNvbHVtbkRlZi5lbmFibGVTb3J0aW5nKSAhPSBudWxsID8gbyA6ICEwKSAmJiAoKG4gPSB0Lm9wdGlvbnMuZW5hYmxlU29ydGluZykgIT0gbnVsbCA/IG4gOiAhMCkgJiYgISFlLmFjY2Vzc29yRm47XG4gICAgfSwgZS5nZXRDYW5NdWx0aVNvcnQgPSAoKSA9PiB7XG4gICAgICB2YXIgbywgbjtcbiAgICAgIHJldHVybiAobyA9IChuID0gZS5jb2x1bW5EZWYuZW5hYmxlTXVsdGlTb3J0KSAhPSBudWxsID8gbiA6IHQub3B0aW9ucy5lbmFibGVNdWx0aVNvcnQpICE9IG51bGwgPyBvIDogISFlLmFjY2Vzc29yRm47XG4gICAgfSwgZS5nZXRJc1NvcnRlZCA9ICgpID0+IHtcbiAgICAgIHZhciBvO1xuICAgICAgY29uc3QgbiA9IChvID0gdC5nZXRTdGF0ZSgpLnNvcnRpbmcpID09IG51bGwgPyB2b2lkIDAgOiBvLmZpbmQoKHIpID0+IHIuaWQgPT09IGUuaWQpO1xuICAgICAgcmV0dXJuIG4gPyBuLmRlc2MgPyBcImRlc2NcIiA6IFwiYXNjXCIgOiAhMTtcbiAgICB9LCBlLmdldFNvcnRJbmRleCA9ICgpID0+IHtcbiAgICAgIHZhciBvLCBuO1xuICAgICAgcmV0dXJuIChvID0gKG4gPSB0LmdldFN0YXRlKCkuc29ydGluZykgPT0gbnVsbCA/IHZvaWQgMCA6IG4uZmluZEluZGV4KChyKSA9PiByLmlkID09PSBlLmlkKSkgIT0gbnVsbCA/IG8gOiAtMTtcbiAgICB9LCBlLmNsZWFyU29ydGluZyA9ICgpID0+IHtcbiAgICAgIHQuc2V0U29ydGluZygobykgPT4gbyAhPSBudWxsICYmIG8ubGVuZ3RoID8gby5maWx0ZXIoKG4pID0+IG4uaWQgIT09IGUuaWQpIDogW10pO1xuICAgIH0sIGUuZ2V0VG9nZ2xlU29ydGluZ0hhbmRsZXIgPSAoKSA9PiB7XG4gICAgICBjb25zdCBvID0gZS5nZXRDYW5Tb3J0KCk7XG4gICAgICByZXR1cm4gKG4pID0+IHtcbiAgICAgICAgbyAmJiAobi5wZXJzaXN0ID09IG51bGwgfHwgbi5wZXJzaXN0KCksIGUudG9nZ2xlU29ydGluZyA9PSBudWxsIHx8IGUudG9nZ2xlU29ydGluZyh2b2lkIDAsIGUuZ2V0Q2FuTXVsdGlTb3J0KCkgPyB0Lm9wdGlvbnMuaXNNdWx0aVNvcnRFdmVudCA9PSBudWxsID8gdm9pZCAwIDogdC5vcHRpb25zLmlzTXVsdGlTb3J0RXZlbnQobikgOiAhMSkpO1xuICAgICAgfTtcbiAgICB9O1xuICB9LFxuICBjcmVhdGVUYWJsZTogKGUpID0+IHtcbiAgICBlLnNldFNvcnRpbmcgPSAodCkgPT4gZS5vcHRpb25zLm9uU29ydGluZ0NoYW5nZSA9PSBudWxsID8gdm9pZCAwIDogZS5vcHRpb25zLm9uU29ydGluZ0NoYW5nZSh0KSwgZS5yZXNldFNvcnRpbmcgPSAodCkgPT4ge1xuICAgICAgdmFyIG8sIG47XG4gICAgICBlLnNldFNvcnRpbmcodCA/IFtdIDogKG8gPSAobiA9IGUuaW5pdGlhbFN0YXRlKSA9PSBudWxsID8gdm9pZCAwIDogbi5zb3J0aW5nKSAhPSBudWxsID8gbyA6IFtdKTtcbiAgICB9LCBlLmdldFByZVNvcnRlZFJvd01vZGVsID0gKCkgPT4gZS5nZXRHcm91cGVkUm93TW9kZWwoKSwgZS5nZXRTb3J0ZWRSb3dNb2RlbCA9ICgpID0+ICghZS5fZ2V0U29ydGVkUm93TW9kZWwgJiYgZS5vcHRpb25zLmdldFNvcnRlZFJvd01vZGVsICYmIChlLl9nZXRTb3J0ZWRSb3dNb2RlbCA9IGUub3B0aW9ucy5nZXRTb3J0ZWRSb3dNb2RlbChlKSksIGUub3B0aW9ucy5tYW51YWxTb3J0aW5nIHx8ICFlLl9nZXRTb3J0ZWRSb3dNb2RlbCA/IGUuZ2V0UHJlU29ydGVkUm93TW9kZWwoKSA6IGUuX2dldFNvcnRlZFJvd01vZGVsKCkpO1xuICB9XG59LCBHViA9IFtcbiAgQVYsXG4gIFNWLFxuICB4VixcbiAgV1YsXG4gIHVWLFxuICB6VixcbiAgRVYsXG4gIC8vZGVwZW5kcyBvbiBDb2x1bW5GYWNldGluZ1xuICBrVixcbiAgLy9kZXBlbmRzIG9uIENvbHVtbkZpbHRlcmluZ1xuICBZVixcbiAgeVYsXG4gIC8vZGVwZW5kcyBvbiBSb3dTb3J0aW5nXG4gIE5WLFxuICBUVixcbiAgSVYsXG4gIERWLFxuICBSVlxuXTtcbmZ1bmN0aW9uIFFWKGUpIHtcbiAgdmFyIHQsIG87XG4gIHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIiAmJiAoZS5kZWJ1Z0FsbCB8fCBlLmRlYnVnVGFibGUpICYmIGNvbnNvbGUuaW5mbyhcIkNyZWF0aW5nIFRhYmxlIEluc3RhbmNlLi4uXCIpO1xuICBjb25zdCBuID0gWy4uLkdWLCAuLi4odCA9IGUuX2ZlYXR1cmVzKSAhPSBudWxsID8gdCA6IFtdXTtcbiAgbGV0IHIgPSB7XG4gICAgX2ZlYXR1cmVzOiBuXG4gIH07XG4gIGNvbnN0IGkgPSByLl9mZWF0dXJlcy5yZWR1Y2UoKE0sIHUpID0+IE9iamVjdC5hc3NpZ24oTSwgdS5nZXREZWZhdWx0T3B0aW9ucyA9PSBudWxsID8gdm9pZCAwIDogdS5nZXREZWZhdWx0T3B0aW9ucyhyKSksIHt9KSwgYSA9IChNKSA9PiByLm9wdGlvbnMubWVyZ2VPcHRpb25zID8gci5vcHRpb25zLm1lcmdlT3B0aW9ucyhpLCBNKSA6IHtcbiAgICAuLi5pLFxuICAgIC4uLk1cbiAgfTtcbiAgbGV0IGwgPSB7XG4gICAgLi4ue30sXG4gICAgLi4uKG8gPSBlLmluaXRpYWxTdGF0ZSkgIT0gbnVsbCA/IG8gOiB7fVxuICB9O1xuICByLl9mZWF0dXJlcy5mb3JFYWNoKChNKSA9PiB7XG4gICAgdmFyIHU7XG4gICAgbCA9ICh1ID0gTS5nZXRJbml0aWFsU3RhdGUgPT0gbnVsbCA/IHZvaWQgMCA6IE0uZ2V0SW5pdGlhbFN0YXRlKGwpKSAhPSBudWxsID8gdSA6IGw7XG4gIH0pO1xuICBjb25zdCBwID0gW107XG4gIGxldCBkID0gITE7XG4gIGNvbnN0IGIgPSB7XG4gICAgX2ZlYXR1cmVzOiBuLFxuICAgIG9wdGlvbnM6IHtcbiAgICAgIC4uLmksXG4gICAgICAuLi5lXG4gICAgfSxcbiAgICBpbml0aWFsU3RhdGU6IGwsXG4gICAgX3F1ZXVlOiAoTSkgPT4ge1xuICAgICAgcC5wdXNoKE0pLCBkIHx8IChkID0gITAsIFByb21pc2UucmVzb2x2ZSgpLnRoZW4oKCkgPT4ge1xuICAgICAgICBmb3IgKDsgcC5sZW5ndGg7IClcbiAgICAgICAgICBwLnNoaWZ0KCkoKTtcbiAgICAgICAgZCA9ICExO1xuICAgICAgfSkuY2F0Y2goKHUpID0+IHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICB0aHJvdyB1O1xuICAgICAgfSkpKTtcbiAgICB9LFxuICAgIHJlc2V0OiAoKSA9PiB7XG4gICAgICByLnNldFN0YXRlKHIuaW5pdGlhbFN0YXRlKTtcbiAgICB9LFxuICAgIHNldE9wdGlvbnM6IChNKSA9PiB7XG4gICAgICBjb25zdCB1ID0geHQoTSwgci5vcHRpb25zKTtcbiAgICAgIHIub3B0aW9ucyA9IGEodSk7XG4gICAgfSxcbiAgICBnZXRTdGF0ZTogKCkgPT4gci5vcHRpb25zLnN0YXRlLFxuICAgIHNldFN0YXRlOiAoTSkgPT4ge1xuICAgICAgci5vcHRpb25zLm9uU3RhdGVDaGFuZ2UgPT0gbnVsbCB8fCByLm9wdGlvbnMub25TdGF0ZUNoYW5nZShNKTtcbiAgICB9LFxuICAgIF9nZXRSb3dJZDogKE0sIHUsIEEpID0+IHtcbiAgICAgIHZhciB6O1xuICAgICAgcmV0dXJuICh6ID0gci5vcHRpb25zLmdldFJvd0lkID09IG51bGwgPyB2b2lkIDAgOiByLm9wdGlvbnMuZ2V0Um93SWQoTSwgdSwgQSkpICE9IG51bGwgPyB6IDogYCR7QSA/IFtBLmlkLCB1XS5qb2luKFwiLlwiKSA6IHV9YDtcbiAgICB9LFxuICAgIGdldENvcmVSb3dNb2RlbDogKCkgPT4gKHIuX2dldENvcmVSb3dNb2RlbCB8fCAoci5fZ2V0Q29yZVJvd01vZGVsID0gci5vcHRpb25zLmdldENvcmVSb3dNb2RlbChyKSksIHIuX2dldENvcmVSb3dNb2RlbCgpKSxcbiAgICAvLyBUaGUgZmluYWwgY2FsbHMgc3RhcnQgYXQgdGhlIGJvdHRvbSBvZiB0aGUgbW9kZWwsXG4gICAgLy8gZXhwYW5kZWQgcm93cywgd2hpY2ggdGhlbiB3b3JrIHRoZWlyIHdheSB1cFxuICAgIGdldFJvd01vZGVsOiAoKSA9PiByLmdldFBhZ2luYXRpb25Sb3dNb2RlbCgpLFxuICAgIC8vaW4gbmV4dCB2ZXJzaW9uLCB3ZSBzaG91bGQganVzdCBwYXNzIGluIHRoZSByb3cgbW9kZWwgYXMgdGhlIG9wdGlvbmFsIDJuZCBhcmdcbiAgICBnZXRSb3c6IChNLCB1KSA9PiB7XG4gICAgICBsZXQgQSA9ICh1ID8gci5nZXRQcmVQYWdpbmF0aW9uUm93TW9kZWwoKSA6IHIuZ2V0Um93TW9kZWwoKSkucm93c0J5SWRbTV07XG4gICAgICBpZiAoIUEgJiYgKEEgPSByLmdldENvcmVSb3dNb2RlbCgpLnJvd3NCeUlkW01dLCAhQSkpXG4gICAgICAgIHRocm93IHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIiA/IG5ldyBFcnJvcihgZ2V0Um93IGNvdWxkIG5vdCBmaW5kIHJvdyB3aXRoIElEOiAke019YCkgOiBuZXcgRXJyb3IoKTtcbiAgICAgIHJldHVybiBBO1xuICAgIH0sXG4gICAgX2dldERlZmF1bHRDb2x1bW5EZWY6IE0wKCgpID0+IFtyLm9wdGlvbnMuZGVmYXVsdENvbHVtbl0sIChNKSA9PiB7XG4gICAgICB2YXIgdTtcbiAgICAgIHJldHVybiBNID0gKHUgPSBNKSAhPSBudWxsID8gdSA6IHt9LCB7XG4gICAgICAgIGhlYWRlcjogKEEpID0+IHtcbiAgICAgICAgICBjb25zdCB6ID0gQS5oZWFkZXIuY29sdW1uLmNvbHVtbkRlZjtcbiAgICAgICAgICByZXR1cm4gei5hY2Nlc3NvcktleSA/IHouYWNjZXNzb3JLZXkgOiB6LmFjY2Vzc29yRm4gPyB6LmlkIDogbnVsbDtcbiAgICAgICAgfSxcbiAgICAgICAgLy8gZm9vdGVyOiBwcm9wcyA9PiBwcm9wcy5oZWFkZXIuY29sdW1uLmlkLFxuICAgICAgICBjZWxsOiAoQSkgPT4ge1xuICAgICAgICAgIHZhciB6LCBmO1xuICAgICAgICAgIHJldHVybiAoeiA9IChmID0gQS5yZW5kZXJWYWx1ZSgpKSA9PSBudWxsIHx8IGYudG9TdHJpbmcgPT0gbnVsbCA/IHZvaWQgMCA6IGYudG9TdHJpbmcoKSkgIT0gbnVsbCA/IHogOiBudWxsO1xuICAgICAgICB9LFxuICAgICAgICAuLi5yLl9mZWF0dXJlcy5yZWR1Y2UoKEEsIHopID0+IE9iamVjdC5hc3NpZ24oQSwgei5nZXREZWZhdWx0Q29sdW1uRGVmID09IG51bGwgPyB2b2lkIDAgOiB6LmdldERlZmF1bHRDb2x1bW5EZWYoKSksIHt9KSxcbiAgICAgICAgLi4uTVxuICAgICAgfTtcbiAgICB9LCBBMChlLCBcImRlYnVnQ29sdW1uc1wiLCBcIl9nZXREZWZhdWx0Q29sdW1uRGVmXCIpKSxcbiAgICBfZ2V0Q29sdW1uRGVmczogKCkgPT4gci5vcHRpb25zLmNvbHVtbnMsXG4gICAgZ2V0QWxsQ29sdW1uczogTTAoKCkgPT4gW3IuX2dldENvbHVtbkRlZnMoKV0sIChNKSA9PiB7XG4gICAgICBjb25zdCB1ID0gZnVuY3Rpb24oQSwgeiwgZikge1xuICAgICAgICByZXR1cm4gZiA9PT0gdm9pZCAwICYmIChmID0gMCksIEEubWFwKChPKSA9PiB7XG4gICAgICAgICAgY29uc3QgaCA9IE1WKHIsIE8sIGYsIHopLCBnID0gTztcbiAgICAgICAgICByZXR1cm4gaC5jb2x1bW5zID0gZy5jb2x1bW5zID8gdShnLmNvbHVtbnMsIGgsIGYgKyAxKSA6IFtdLCBoO1xuICAgICAgICB9KTtcbiAgICAgIH07XG4gICAgICByZXR1cm4gdShNKTtcbiAgICB9LCBBMChlLCBcImRlYnVnQ29sdW1uc1wiLCBcImdldEFsbENvbHVtbnNcIikpLFxuICAgIGdldEFsbEZsYXRDb2x1bW5zOiBNMCgoKSA9PiBbci5nZXRBbGxDb2x1bW5zKCldLCAoTSkgPT4gTS5mbGF0TWFwKCh1KSA9PiB1LmdldEZsYXRDb2x1bW5zKCkpLCBBMChlLCBcImRlYnVnQ29sdW1uc1wiLCBcImdldEFsbEZsYXRDb2x1bW5zXCIpKSxcbiAgICBfZ2V0QWxsRmxhdENvbHVtbnNCeUlkOiBNMCgoKSA9PiBbci5nZXRBbGxGbGF0Q29sdW1ucygpXSwgKE0pID0+IE0ucmVkdWNlKCh1LCBBKSA9PiAodVtBLmlkXSA9IEEsIHUpLCB7fSksIEEwKGUsIFwiZGVidWdDb2x1bW5zXCIsIFwiZ2V0QWxsRmxhdENvbHVtbnNCeUlkXCIpKSxcbiAgICBnZXRBbGxMZWFmQ29sdW1uczogTTAoKCkgPT4gW3IuZ2V0QWxsQ29sdW1ucygpLCByLl9nZXRPcmRlckNvbHVtbnNGbigpXSwgKE0sIHUpID0+IHtcbiAgICAgIGxldCBBID0gTS5mbGF0TWFwKCh6KSA9PiB6LmdldExlYWZDb2x1bW5zKCkpO1xuICAgICAgcmV0dXJuIHUoQSk7XG4gICAgfSwgQTAoZSwgXCJkZWJ1Z0NvbHVtbnNcIiwgXCJnZXRBbGxMZWFmQ29sdW1uc1wiKSksXG4gICAgZ2V0Q29sdW1uOiAoTSkgPT4ge1xuICAgICAgY29uc3QgdSA9IHIuX2dldEFsbEZsYXRDb2x1bW5zQnlJZCgpW01dO1xuICAgICAgcmV0dXJuIHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIiAmJiAhdSAmJiBjb25zb2xlLmVycm9yKGBbVGFibGVdIENvbHVtbiB3aXRoIGlkICcke019JyBkb2VzIG5vdCBleGlzdC5gKSwgdTtcbiAgICB9XG4gIH07XG4gIE9iamVjdC5hc3NpZ24ociwgYik7XG4gIGZvciAobGV0IE0gPSAwOyBNIDwgci5fZmVhdHVyZXMubGVuZ3RoOyBNKyspIHtcbiAgICBjb25zdCB1ID0gci5fZmVhdHVyZXNbTV07XG4gICAgdSA9PSBudWxsIHx8IHUuY3JlYXRlVGFibGUgPT0gbnVsbCB8fCB1LmNyZWF0ZVRhYmxlKHIpO1xuICB9XG4gIHJldHVybiByO1xufVxuZnVuY3Rpb24gWlYoKSB7XG4gIHJldHVybiAoZSkgPT4gTTAoKCkgPT4gW2Uub3B0aW9ucy5kYXRhXSwgKHQpID0+IHtcbiAgICBjb25zdCBvID0ge1xuICAgICAgcm93czogW10sXG4gICAgICBmbGF0Um93czogW10sXG4gICAgICByb3dzQnlJZDoge31cbiAgICB9LCBuID0gZnVuY3Rpb24ociwgaSwgYSkge1xuICAgICAgaSA9PT0gdm9pZCAwICYmIChpID0gMCk7XG4gICAgICBjb25zdCBzID0gW107XG4gICAgICBmb3IgKGxldCBwID0gMDsgcCA8IHIubGVuZ3RoOyBwKyspIHtcbiAgICAgICAgY29uc3QgZCA9IFk2KGUsIGUuX2dldFJvd0lkKHJbcF0sIHAsIGEpLCByW3BdLCBwLCBpLCB2b2lkIDAsIGEgPT0gbnVsbCA/IHZvaWQgMCA6IGEuaWQpO1xuICAgICAgICBpZiAoby5mbGF0Um93cy5wdXNoKGQpLCBvLnJvd3NCeUlkW2QuaWRdID0gZCwgcy5wdXNoKGQpLCBlLm9wdGlvbnMuZ2V0U3ViUm93cykge1xuICAgICAgICAgIHZhciBsO1xuICAgICAgICAgIGQub3JpZ2luYWxTdWJSb3dzID0gZS5vcHRpb25zLmdldFN1YlJvd3MocltwXSwgcCksIChsID0gZC5vcmlnaW5hbFN1YlJvd3MpICE9IG51bGwgJiYgbC5sZW5ndGggJiYgKGQuc3ViUm93cyA9IG4oZC5vcmlnaW5hbFN1YlJvd3MsIGkgKyAxLCBkKSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiBzO1xuICAgIH07XG4gICAgcmV0dXJuIG8ucm93cyA9IG4odCksIG87XG4gIH0sIEEwKGUub3B0aW9ucywgXCJkZWJ1Z1RhYmxlXCIsIFwiZ2V0Um93TW9kZWxcIiwgKCkgPT4gZS5fYXV0b1Jlc2V0UGFnZUluZGV4KCkpKTtcbn1cbmZ1bmN0aW9uIGpWKCkge1xuICByZXR1cm4gKGUpID0+IE0wKCgpID0+IFtlLmdldFN0YXRlKCkuZXhwYW5kZWQsIGUuZ2V0UHJlRXhwYW5kZWRSb3dNb2RlbCgpLCBlLm9wdGlvbnMucGFnaW5hdGVFeHBhbmRlZFJvd3NdLCAodCwgbywgbikgPT4gIW8ucm93cy5sZW5ndGggfHwgdCAhPT0gITAgJiYgIU9iamVjdC5rZXlzKHQgPz8ge30pLmxlbmd0aCB8fCAhbiA/IG8gOiBMYihvKSwgQTAoZS5vcHRpb25zLCBcImRlYnVnVGFibGVcIiwgXCJnZXRFeHBhbmRlZFJvd01vZGVsXCIpKTtcbn1cbmZ1bmN0aW9uIExiKGUpIHtcbiAgY29uc3QgdCA9IFtdLCBvID0gKG4pID0+IHtcbiAgICB2YXIgcjtcbiAgICB0LnB1c2gobiksIChyID0gbi5zdWJSb3dzKSAhPSBudWxsICYmIHIubGVuZ3RoICYmIG4uZ2V0SXNFeHBhbmRlZCgpICYmIG4uc3ViUm93cy5mb3JFYWNoKG8pO1xuICB9O1xuICByZXR1cm4gZS5yb3dzLmZvckVhY2gobyksIHtcbiAgICByb3dzOiB0LFxuICAgIGZsYXRSb3dzOiBlLmZsYXRSb3dzLFxuICAgIHJvd3NCeUlkOiBlLnJvd3NCeUlkXG4gIH07XG59XG5mdW5jdGlvbiBLVigpIHtcbiAgcmV0dXJuIChlLCB0KSA9PiBNMCgoKSA9PiB7XG4gICAgdmFyIG87XG4gICAgcmV0dXJuIFsobyA9IGUuZ2V0Q29sdW1uKHQpKSA9PSBudWxsID8gdm9pZCAwIDogby5nZXRGYWNldGVkUm93TW9kZWwoKV07XG4gIH0sIChvKSA9PiB7XG4gICAgaWYgKCFvKVxuICAgICAgcmV0dXJuO1xuICAgIGNvbnN0IG4gPSBvLmZsYXRSb3dzLmZsYXRNYXAoKGEpID0+IHtcbiAgICAgIHZhciBzO1xuICAgICAgcmV0dXJuIChzID0gYS5nZXRVbmlxdWVWYWx1ZXModCkpICE9IG51bGwgPyBzIDogW107XG4gICAgfSkubWFwKE51bWJlcikuZmlsdGVyKChhKSA9PiAhTnVtYmVyLmlzTmFOKGEpKTtcbiAgICBpZiAoIW4ubGVuZ3RoKVxuICAgICAgcmV0dXJuO1xuICAgIGxldCByID0gblswXSwgaSA9IG5bbi5sZW5ndGggLSAxXTtcbiAgICBmb3IgKGNvbnN0IGEgb2YgbilcbiAgICAgIGEgPCByID8gciA9IGEgOiBhID4gaSAmJiAoaSA9IGEpO1xuICAgIHJldHVybiBbciwgaV07XG4gIH0sIEEwKGUub3B0aW9ucywgXCJkZWJ1Z1RhYmxlXCIsIFwiZ2V0RmFjZXRlZE1pbk1heFZhbHVlc1wiKSk7XG59XG5mdW5jdGlvbiB2YihlLCB0LCBvKSB7XG4gIHJldHVybiBvLm9wdGlvbnMuZmlsdGVyRnJvbUxlYWZSb3dzID8gSlYoZSwgdCwgbykgOiBfVihlLCB0LCBvKTtcbn1cbmZ1bmN0aW9uIEpWKGUsIHQsIG8pIHtcbiAgdmFyIG47XG4gIGNvbnN0IHIgPSBbXSwgaSA9IHt9LCBhID0gKG4gPSBvLm9wdGlvbnMubWF4TGVhZlJvd0ZpbHRlckRlcHRoKSAhPSBudWxsID8gbiA6IDEwMCwgcyA9IGZ1bmN0aW9uKGwsIHApIHtcbiAgICBwID09PSB2b2lkIDAgJiYgKHAgPSAwKTtcbiAgICBjb25zdCBkID0gW107XG4gICAgZm9yIChsZXQgTSA9IDA7IE0gPCBsLmxlbmd0aDsgTSsrKSB7XG4gICAgICB2YXIgYjtcbiAgICAgIGxldCB1ID0gbFtNXTtcbiAgICAgIGNvbnN0IEEgPSBZNihvLCB1LmlkLCB1Lm9yaWdpbmFsLCB1LmluZGV4LCB1LmRlcHRoLCB2b2lkIDAsIHUucGFyZW50SWQpO1xuICAgICAgaWYgKEEuY29sdW1uRmlsdGVycyA9IHUuY29sdW1uRmlsdGVycywgKGIgPSB1LnN1YlJvd3MpICE9IG51bGwgJiYgYi5sZW5ndGggJiYgcCA8IGEpIHtcbiAgICAgICAgaWYgKEEuc3ViUm93cyA9IHModS5zdWJSb3dzLCBwICsgMSksIHUgPSBBLCB0KHUpICYmICFBLnN1YlJvd3MubGVuZ3RoKSB7XG4gICAgICAgICAgZC5wdXNoKHUpLCBpW3UuaWRdID0gdSwgci5wdXNoKHUpO1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0KHUpIHx8IEEuc3ViUm93cy5sZW5ndGgpIHtcbiAgICAgICAgICBkLnB1c2godSksIGlbdS5pZF0gPSB1LCByLnB1c2godSk7XG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZVxuICAgICAgICB1ID0gQSwgdCh1KSAmJiAoZC5wdXNoKHUpLCBpW3UuaWRdID0gdSwgci5wdXNoKHUpKTtcbiAgICB9XG4gICAgcmV0dXJuIGQ7XG4gIH07XG4gIHJldHVybiB7XG4gICAgcm93czogcyhlKSxcbiAgICBmbGF0Um93czogcixcbiAgICByb3dzQnlJZDogaVxuICB9O1xufVxuZnVuY3Rpb24gX1YoZSwgdCwgbykge1xuICB2YXIgbjtcbiAgY29uc3QgciA9IFtdLCBpID0ge30sIGEgPSAobiA9IG8ub3B0aW9ucy5tYXhMZWFmUm93RmlsdGVyRGVwdGgpICE9IG51bGwgPyBuIDogMTAwLCBzID0gZnVuY3Rpb24obCwgcCkge1xuICAgIHAgPT09IHZvaWQgMCAmJiAocCA9IDApO1xuICAgIGNvbnN0IGQgPSBbXTtcbiAgICBmb3IgKGxldCBNID0gMDsgTSA8IGwubGVuZ3RoOyBNKyspIHtcbiAgICAgIGxldCB1ID0gbFtNXTtcbiAgICAgIGlmICh0KHUpKSB7XG4gICAgICAgIHZhciBiO1xuICAgICAgICBpZiAoKGIgPSB1LnN1YlJvd3MpICE9IG51bGwgJiYgYi5sZW5ndGggJiYgcCA8IGEpIHtcbiAgICAgICAgICBjb25zdCB6ID0gWTYobywgdS5pZCwgdS5vcmlnaW5hbCwgdS5pbmRleCwgdS5kZXB0aCwgdm9pZCAwLCB1LnBhcmVudElkKTtcbiAgICAgICAgICB6LnN1YlJvd3MgPSBzKHUuc3ViUm93cywgcCArIDEpLCB1ID0gejtcbiAgICAgICAgfVxuICAgICAgICBkLnB1c2godSksIHIucHVzaCh1KSwgaVt1LmlkXSA9IHU7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBkO1xuICB9O1xuICByZXR1cm4ge1xuICAgIHJvd3M6IHMoZSksXG4gICAgZmxhdFJvd3M6IHIsXG4gICAgcm93c0J5SWQ6IGlcbiAgfTtcbn1cbmZ1bmN0aW9uICRWKCkge1xuICByZXR1cm4gKGUsIHQpID0+IE0wKCgpID0+IFtlLmdldFByZUZpbHRlcmVkUm93TW9kZWwoKSwgZS5nZXRTdGF0ZSgpLmNvbHVtbkZpbHRlcnMsIGUuZ2V0U3RhdGUoKS5nbG9iYWxGaWx0ZXIsIGUuZ2V0RmlsdGVyZWRSb3dNb2RlbCgpXSwgKG8sIG4sIHIpID0+IHtcbiAgICBpZiAoIW8ucm93cy5sZW5ndGggfHwgIShuICE9IG51bGwgJiYgbi5sZW5ndGgpICYmICFyKVxuICAgICAgcmV0dXJuIG87XG4gICAgY29uc3QgaSA9IFsuLi5uLm1hcCgocykgPT4gcy5pZCkuZmlsdGVyKChzKSA9PiBzICE9PSB0KSwgciA/IFwiX19nbG9iYWxfX1wiIDogdm9pZCAwXS5maWx0ZXIoQm9vbGVhbiksIGEgPSAocykgPT4ge1xuICAgICAgZm9yIChsZXQgbCA9IDA7IGwgPCBpLmxlbmd0aDsgbCsrKVxuICAgICAgICBpZiAocy5jb2x1bW5GaWx0ZXJzW2lbbF1dID09PSAhMSlcbiAgICAgICAgICByZXR1cm4gITE7XG4gICAgICByZXR1cm4gITA7XG4gICAgfTtcbiAgICByZXR1cm4gdmIoby5yb3dzLCBhLCBlKTtcbiAgfSwgQTAoZS5vcHRpb25zLCBcImRlYnVnVGFibGVcIiwgXCJnZXRGYWNldGVkUm93TW9kZWxcIikpO1xufVxuZnVuY3Rpb24gZVAoKSB7XG4gIHJldHVybiAoZSwgdCkgPT4gTTAoKCkgPT4ge1xuICAgIHZhciBvO1xuICAgIHJldHVybiBbKG8gPSBlLmdldENvbHVtbih0KSkgPT0gbnVsbCA/IHZvaWQgMCA6IG8uZ2V0RmFjZXRlZFJvd01vZGVsKCldO1xuICB9LCAobykgPT4ge1xuICAgIGlmICghbylcbiAgICAgIHJldHVybiAvKiBAX19QVVJFX18gKi8gbmV3IE1hcCgpO1xuICAgIGxldCBuID0gLyogQF9fUFVSRV9fICovIG5ldyBNYXAoKTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IG8uZmxhdFJvd3MubGVuZ3RoOyBpKyspIHtcbiAgICAgIGNvbnN0IGEgPSBvLmZsYXRSb3dzW2ldLmdldFVuaXF1ZVZhbHVlcyh0KTtcbiAgICAgIGZvciAobGV0IHMgPSAwOyBzIDwgYS5sZW5ndGg7IHMrKykge1xuICAgICAgICBjb25zdCBsID0gYVtzXTtcbiAgICAgICAgaWYgKG4uaGFzKGwpKSB7XG4gICAgICAgICAgdmFyIHI7XG4gICAgICAgICAgbi5zZXQobCwgKChyID0gbi5nZXQobCkpICE9IG51bGwgPyByIDogMCkgKyAxKTtcbiAgICAgICAgfSBlbHNlXG4gICAgICAgICAgbi5zZXQobCwgMSk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBuO1xuICB9LCBBMChlLm9wdGlvbnMsIFwiZGVidWdUYWJsZVwiLCBgZ2V0RmFjZXRlZFVuaXF1ZVZhbHVlc18ke3R9YCkpO1xufVxuZnVuY3Rpb24gdFAoKSB7XG4gIHJldHVybiAoZSkgPT4gTTAoKCkgPT4gW2UuZ2V0UHJlRmlsdGVyZWRSb3dNb2RlbCgpLCBlLmdldFN0YXRlKCkuY29sdW1uRmlsdGVycywgZS5nZXRTdGF0ZSgpLmdsb2JhbEZpbHRlcl0sICh0LCBvLCBuKSA9PiB7XG4gICAgaWYgKCF0LnJvd3MubGVuZ3RoIHx8ICEobyAhPSBudWxsICYmIG8ubGVuZ3RoKSAmJiAhbikge1xuICAgICAgZm9yIChsZXQgTSA9IDA7IE0gPCB0LmZsYXRSb3dzLmxlbmd0aDsgTSsrKVxuICAgICAgICB0LmZsYXRSb3dzW01dLmNvbHVtbkZpbHRlcnMgPSB7fSwgdC5mbGF0Um93c1tNXS5jb2x1bW5GaWx0ZXJzTWV0YSA9IHt9O1xuICAgICAgcmV0dXJuIHQ7XG4gICAgfVxuICAgIGNvbnN0IHIgPSBbXSwgaSA9IFtdO1xuICAgIChvID8/IFtdKS5mb3JFYWNoKChNKSA9PiB7XG4gICAgICB2YXIgdTtcbiAgICAgIGNvbnN0IEEgPSBlLmdldENvbHVtbihNLmlkKTtcbiAgICAgIGlmICghQSlcbiAgICAgICAgcmV0dXJuO1xuICAgICAgY29uc3QgeiA9IEEuZ2V0RmlsdGVyRm4oKTtcbiAgICAgIGlmICgheikge1xuICAgICAgICBwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIgJiYgY29uc29sZS53YXJuKGBDb3VsZCBub3QgZmluZCBhIHZhbGlkICdjb2x1bW4uZmlsdGVyRm4nIGZvciBjb2x1bW4gd2l0aCB0aGUgSUQ6ICR7QS5pZH0uYCk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIHIucHVzaCh7XG4gICAgICAgIGlkOiBNLmlkLFxuICAgICAgICBmaWx0ZXJGbjogeixcbiAgICAgICAgcmVzb2x2ZWRWYWx1ZTogKHUgPSB6LnJlc29sdmVGaWx0ZXJWYWx1ZSA9PSBudWxsID8gdm9pZCAwIDogei5yZXNvbHZlRmlsdGVyVmFsdWUoTS52YWx1ZSkpICE9IG51bGwgPyB1IDogTS52YWx1ZVxuICAgICAgfSk7XG4gICAgfSk7XG4gICAgY29uc3QgYSA9IChvID8/IFtdKS5tYXAoKE0pID0+IE0uaWQpLCBzID0gZS5nZXRHbG9iYWxGaWx0ZXJGbigpLCBsID0gZS5nZXRBbGxMZWFmQ29sdW1ucygpLmZpbHRlcigoTSkgPT4gTS5nZXRDYW5HbG9iYWxGaWx0ZXIoKSk7XG4gICAgbiAmJiBzICYmIGwubGVuZ3RoICYmIChhLnB1c2goXCJfX2dsb2JhbF9fXCIpLCBsLmZvckVhY2goKE0pID0+IHtcbiAgICAgIHZhciB1O1xuICAgICAgaS5wdXNoKHtcbiAgICAgICAgaWQ6IE0uaWQsXG4gICAgICAgIGZpbHRlckZuOiBzLFxuICAgICAgICByZXNvbHZlZFZhbHVlOiAodSA9IHMucmVzb2x2ZUZpbHRlclZhbHVlID09IG51bGwgPyB2b2lkIDAgOiBzLnJlc29sdmVGaWx0ZXJWYWx1ZShuKSkgIT0gbnVsbCA/IHUgOiBuXG4gICAgICB9KTtcbiAgICB9KSk7XG4gICAgbGV0IHAsIGQ7XG4gICAgZm9yIChsZXQgTSA9IDA7IE0gPCB0LmZsYXRSb3dzLmxlbmd0aDsgTSsrKSB7XG4gICAgICBjb25zdCB1ID0gdC5mbGF0Um93c1tNXTtcbiAgICAgIGlmICh1LmNvbHVtbkZpbHRlcnMgPSB7fSwgci5sZW5ndGgpXG4gICAgICAgIGZvciAobGV0IEEgPSAwOyBBIDwgci5sZW5ndGg7IEErKykge1xuICAgICAgICAgIHAgPSByW0FdO1xuICAgICAgICAgIGNvbnN0IHogPSBwLmlkO1xuICAgICAgICAgIHUuY29sdW1uRmlsdGVyc1t6XSA9IHAuZmlsdGVyRm4odSwgeiwgcC5yZXNvbHZlZFZhbHVlLCAoZikgPT4ge1xuICAgICAgICAgICAgdS5jb2x1bW5GaWx0ZXJzTWV0YVt6XSA9IGY7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgIGlmIChpLmxlbmd0aCkge1xuICAgICAgICBmb3IgKGxldCBBID0gMDsgQSA8IGkubGVuZ3RoOyBBKyspIHtcbiAgICAgICAgICBkID0gaVtBXTtcbiAgICAgICAgICBjb25zdCB6ID0gZC5pZDtcbiAgICAgICAgICBpZiAoZC5maWx0ZXJGbih1LCB6LCBkLnJlc29sdmVkVmFsdWUsIChmKSA9PiB7XG4gICAgICAgICAgICB1LmNvbHVtbkZpbHRlcnNNZXRhW3pdID0gZjtcbiAgICAgICAgICB9KSkge1xuICAgICAgICAgICAgdS5jb2x1bW5GaWx0ZXJzLl9fZ2xvYmFsX18gPSAhMDtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICB1LmNvbHVtbkZpbHRlcnMuX19nbG9iYWxfXyAhPT0gITAgJiYgKHUuY29sdW1uRmlsdGVycy5fX2dsb2JhbF9fID0gITEpO1xuICAgICAgfVxuICAgIH1cbiAgICBjb25zdCBiID0gKE0pID0+IHtcbiAgICAgIGZvciAobGV0IHUgPSAwOyB1IDwgYS5sZW5ndGg7IHUrKylcbiAgICAgICAgaWYgKE0uY29sdW1uRmlsdGVyc1thW3VdXSA9PT0gITEpXG4gICAgICAgICAgcmV0dXJuICExO1xuICAgICAgcmV0dXJuICEwO1xuICAgIH07XG4gICAgcmV0dXJuIHZiKHQucm93cywgYiwgZSk7XG4gIH0sIEEwKGUub3B0aW9ucywgXCJkZWJ1Z1RhYmxlXCIsIFwiZ2V0RmlsdGVyZWRSb3dNb2RlbFwiLCAoKSA9PiBlLl9hdXRvUmVzZXRQYWdlSW5kZXgoKSkpO1xufVxuZnVuY3Rpb24gb1AoZSkge1xuICByZXR1cm4gKHQpID0+IE0wKCgpID0+IFt0LmdldFN0YXRlKCkucGFnaW5hdGlvbiwgdC5nZXRQcmVQYWdpbmF0aW9uUm93TW9kZWwoKSwgdC5vcHRpb25zLnBhZ2luYXRlRXhwYW5kZWRSb3dzID8gdm9pZCAwIDogdC5nZXRTdGF0ZSgpLmV4cGFuZGVkXSwgKG8sIG4pID0+IHtcbiAgICBpZiAoIW4ucm93cy5sZW5ndGgpXG4gICAgICByZXR1cm4gbjtcbiAgICBjb25zdCB7XG4gICAgICBwYWdlU2l6ZTogcixcbiAgICAgIHBhZ2VJbmRleDogaVxuICAgIH0gPSBvO1xuICAgIGxldCB7XG4gICAgICByb3dzOiBhLFxuICAgICAgZmxhdFJvd3M6IHMsXG4gICAgICByb3dzQnlJZDogbFxuICAgIH0gPSBuO1xuICAgIGNvbnN0IHAgPSByICogaSwgZCA9IHAgKyByO1xuICAgIGEgPSBhLnNsaWNlKHAsIGQpO1xuICAgIGxldCBiO1xuICAgIHQub3B0aW9ucy5wYWdpbmF0ZUV4cGFuZGVkUm93cyA/IGIgPSB7XG4gICAgICByb3dzOiBhLFxuICAgICAgZmxhdFJvd3M6IHMsXG4gICAgICByb3dzQnlJZDogbFxuICAgIH0gOiBiID0gTGIoe1xuICAgICAgcm93czogYSxcbiAgICAgIGZsYXRSb3dzOiBzLFxuICAgICAgcm93c0J5SWQ6IGxcbiAgICB9KSwgYi5mbGF0Um93cyA9IFtdO1xuICAgIGNvbnN0IE0gPSAodSkgPT4ge1xuICAgICAgYi5mbGF0Um93cy5wdXNoKHUpLCB1LnN1YlJvd3MubGVuZ3RoICYmIHUuc3ViUm93cy5mb3JFYWNoKE0pO1xuICAgIH07XG4gICAgcmV0dXJuIGIucm93cy5mb3JFYWNoKE0pLCBiO1xuICB9LCBBMCh0Lm9wdGlvbnMsIFwiZGVidWdUYWJsZVwiLCBcImdldFBhZ2luYXRpb25Sb3dNb2RlbFwiKSk7XG59XG5mdW5jdGlvbiByUCgpIHtcbiAgcmV0dXJuIChlKSA9PiBNMCgoKSA9PiBbZS5nZXRTdGF0ZSgpLnNvcnRpbmcsIGUuZ2V0UHJlU29ydGVkUm93TW9kZWwoKV0sICh0LCBvKSA9PiB7XG4gICAgaWYgKCFvLnJvd3MubGVuZ3RoIHx8ICEodCAhPSBudWxsICYmIHQubGVuZ3RoKSlcbiAgICAgIHJldHVybiBvO1xuICAgIGNvbnN0IG4gPSBlLmdldFN0YXRlKCkuc29ydGluZywgciA9IFtdLCBpID0gbi5maWx0ZXIoKGwpID0+IHtcbiAgICAgIHZhciBwO1xuICAgICAgcmV0dXJuIChwID0gZS5nZXRDb2x1bW4obC5pZCkpID09IG51bGwgPyB2b2lkIDAgOiBwLmdldENhblNvcnQoKTtcbiAgICB9KSwgYSA9IHt9O1xuICAgIGkuZm9yRWFjaCgobCkgPT4ge1xuICAgICAgY29uc3QgcCA9IGUuZ2V0Q29sdW1uKGwuaWQpO1xuICAgICAgcCAmJiAoYVtsLmlkXSA9IHtcbiAgICAgICAgc29ydFVuZGVmaW5lZDogcC5jb2x1bW5EZWYuc29ydFVuZGVmaW5lZCxcbiAgICAgICAgaW52ZXJ0U29ydGluZzogcC5jb2x1bW5EZWYuaW52ZXJ0U29ydGluZyxcbiAgICAgICAgc29ydGluZ0ZuOiBwLmdldFNvcnRpbmdGbigpXG4gICAgICB9KTtcbiAgICB9KTtcbiAgICBjb25zdCBzID0gKGwpID0+IHtcbiAgICAgIGNvbnN0IHAgPSBsLm1hcCgoZCkgPT4gKHtcbiAgICAgICAgLi4uZFxuICAgICAgfSkpO1xuICAgICAgcmV0dXJuIHAuc29ydCgoZCwgYikgPT4ge1xuICAgICAgICBmb3IgKGxldCB1ID0gMDsgdSA8IGkubGVuZ3RoOyB1ICs9IDEpIHtcbiAgICAgICAgICB2YXIgTTtcbiAgICAgICAgICBjb25zdCBBID0gaVt1XSwgeiA9IGFbQS5pZF0sIGYgPSB6LnNvcnRVbmRlZmluZWQsIE8gPSAoTSA9IEEgPT0gbnVsbCA/IHZvaWQgMCA6IEEuZGVzYykgIT0gbnVsbCA/IE0gOiAhMTtcbiAgICAgICAgICBsZXQgaCA9IDA7XG4gICAgICAgICAgaWYgKGYpIHtcbiAgICAgICAgICAgIGNvbnN0IGcgPSBkLmdldFZhbHVlKEEuaWQpLCB2ID0gYi5nZXRWYWx1ZShBLmlkKSwgTCA9IGcgPT09IHZvaWQgMCwgeSA9IHYgPT09IHZvaWQgMDtcbiAgICAgICAgICAgIGlmIChMIHx8IHkpIHtcbiAgICAgICAgICAgICAgaWYgKGYgPT09IFwiZmlyc3RcIilcbiAgICAgICAgICAgICAgICByZXR1cm4gTCA/IC0xIDogMTtcbiAgICAgICAgICAgICAgaWYgKGYgPT09IFwibGFzdFwiKVxuICAgICAgICAgICAgICAgIHJldHVybiBMID8gMSA6IC0xO1xuICAgICAgICAgICAgICBoID0gTCAmJiB5ID8gMCA6IEwgPyBmIDogLWY7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmIChoID09PSAwICYmIChoID0gei5zb3J0aW5nRm4oZCwgYiwgQS5pZCkpLCBoICE9PSAwKVxuICAgICAgICAgICAgcmV0dXJuIE8gJiYgKGggKj0gLTEpLCB6LmludmVydFNvcnRpbmcgJiYgKGggKj0gLTEpLCBoO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBkLmluZGV4IC0gYi5pbmRleDtcbiAgICAgIH0pLCBwLmZvckVhY2goKGQpID0+IHtcbiAgICAgICAgdmFyIGI7XG4gICAgICAgIHIucHVzaChkKSwgKGIgPSBkLnN1YlJvd3MpICE9IG51bGwgJiYgYi5sZW5ndGggJiYgKGQuc3ViUm93cyA9IHMoZC5zdWJSb3dzKSk7XG4gICAgICB9KSwgcDtcbiAgICB9O1xuICAgIHJldHVybiB7XG4gICAgICByb3dzOiBzKG8ucm93cyksXG4gICAgICBmbGF0Um93czogcixcbiAgICAgIHJvd3NCeUlkOiBvLnJvd3NCeUlkXG4gICAgfTtcbiAgfSwgQTAoZS5vcHRpb25zLCBcImRlYnVnVGFibGVcIiwgXCJnZXRTb3J0ZWRSb3dNb2RlbFwiLCAoKSA9PiBlLl9hdXRvUmVzZXRQYWdlSW5kZXgoKSkpO1xufVxuLyoqXG4gICAqIHJlYWN0LXRhYmxlXG4gICAqXG4gICAqIENvcHlyaWdodCAoYykgVGFuU3RhY2tcbiAgICpcbiAgICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gICAqIExJQ0VOU0UubWQgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS5cbiAgICpcbiAgICogQGxpY2Vuc2UgTUlUXG4gICAqL1xuZnVuY3Rpb24gT2EoZSwgdCkge1xuICByZXR1cm4gZSA/IG5QKGUpID8gLyogQF9fUFVSRV9fICovIGMwLmNyZWF0ZUVsZW1lbnQoZSwgdCkgOiBlIDogbnVsbDtcbn1cbmZ1bmN0aW9uIG5QKGUpIHtcbiAgcmV0dXJuIGlQKGUpIHx8IHR5cGVvZiBlID09IFwiZnVuY3Rpb25cIiB8fCBhUChlKTtcbn1cbmZ1bmN0aW9uIGlQKGUpIHtcbiAgcmV0dXJuIHR5cGVvZiBlID09IFwiZnVuY3Rpb25cIiAmJiAoKCkgPT4ge1xuICAgIGNvbnN0IHQgPSBPYmplY3QuZ2V0UHJvdG90eXBlT2YoZSk7XG4gICAgcmV0dXJuIHQucHJvdG90eXBlICYmIHQucHJvdG90eXBlLmlzUmVhY3RDb21wb25lbnQ7XG4gIH0pKCk7XG59XG5mdW5jdGlvbiBhUChlKSB7XG4gIHJldHVybiB0eXBlb2YgZSA9PSBcIm9iamVjdFwiICYmIHR5cGVvZiBlLiQkdHlwZW9mID09IFwic3ltYm9sXCIgJiYgW1wicmVhY3QubWVtb1wiLCBcInJlYWN0LmZvcndhcmRfcmVmXCJdLmluY2x1ZGVzKGUuJCR0eXBlb2YuZGVzY3JpcHRpb24pO1xufVxuZnVuY3Rpb24gc1AoZSkge1xuICBjb25zdCB0ID0ge1xuICAgIHN0YXRlOiB7fSxcbiAgICAvLyBEdW1teSBzdGF0ZVxuICAgIG9uU3RhdGVDaGFuZ2U6ICgpID0+IHtcbiAgICB9LFxuICAgIC8vIG5vb3BcbiAgICByZW5kZXJGYWxsYmFja1ZhbHVlOiBudWxsLFxuICAgIC4uLmVcbiAgfSwgW29dID0gYzAudXNlU3RhdGUoKCkgPT4gKHtcbiAgICBjdXJyZW50OiBRVih0KVxuICB9KSksIFtuLCByXSA9IGMwLnVzZVN0YXRlKCgpID0+IG8uY3VycmVudC5pbml0aWFsU3RhdGUpO1xuICByZXR1cm4gby5jdXJyZW50LnNldE9wdGlvbnMoKGkpID0+ICh7XG4gICAgLi4uaSxcbiAgICAuLi5lLFxuICAgIHN0YXRlOiB7XG4gICAgICAuLi5uLFxuICAgICAgLi4uZS5zdGF0ZVxuICAgIH0sXG4gICAgLy8gU2ltaWxhcmx5LCB3ZSdsbCBtYWludGFpbiBib3RoIG91ciBpbnRlcm5hbCBzdGF0ZSBhbmQgYW55IHVzZXItcHJvdmlkZWRcbiAgICAvLyBzdGF0ZS5cbiAgICBvblN0YXRlQ2hhbmdlOiAoYSkgPT4ge1xuICAgICAgcihhKSwgZS5vblN0YXRlQ2hhbmdlID09IG51bGwgfHwgZS5vblN0YXRlQ2hhbmdlKGEpO1xuICAgIH1cbiAgfSkpLCBvLmN1cnJlbnQ7XG59XG4vKipcbiAgICogbWF0Y2gtc29ydGVyLXV0aWxzXG4gICAqXG4gICAqIENvcHlyaWdodCAoYykgVGFuU3RhY2tcbiAgICpcbiAgICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gICAqIExJQ0VOU0UubWQgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS5cbiAgICpcbiAgICogQGxpY2Vuc2UgTUlUXG4gICAqL1xuY29uc3QgcWIgPSB7XG4gIMOAOiBcIkFcIixcbiAgw4E6IFwiQVwiLFxuICDDgjogXCJBXCIsXG4gIMODOiBcIkFcIixcbiAgw4Q6IFwiQVwiLFxuICDDhTogXCJBXCIsXG4gIOG6pDogXCJBXCIsXG4gIOG6rjogXCJBXCIsXG4gIOG6sjogXCJBXCIsXG4gIOG6tDogXCJBXCIsXG4gIOG6tjogXCJBXCIsXG4gIMOGOiBcIkFFXCIsXG4gIOG6pjogXCJBXCIsXG4gIOG6sDogXCJBXCIsXG4gIMiCOiBcIkFcIixcbiAgw4c6IFwiQ1wiLFxuICDhuIg6IFwiQ1wiLFxuICDDiDogXCJFXCIsXG4gIMOJOiBcIkVcIixcbiAgw4o6IFwiRVwiLFxuICDDizogXCJFXCIsXG4gIOG6vjogXCJFXCIsXG4gIOG4ljogXCJFXCIsXG4gIOG7gDogXCJFXCIsXG4gIOG4lDogXCJFXCIsXG4gIOG4nDogXCJFXCIsXG4gIMiGOiBcIkVcIixcbiAgw4w6IFwiSVwiLFxuICDDjTogXCJJXCIsXG4gIMOOOiBcIklcIixcbiAgw486IFwiSVwiLFxuICDhuK46IFwiSVwiLFxuICDIijogXCJJXCIsXG4gIMOQOiBcIkRcIixcbiAgw5E6IFwiTlwiLFxuICDDkjogXCJPXCIsXG4gIMOTOiBcIk9cIixcbiAgw5Q6IFwiT1wiLFxuICDDlTogXCJPXCIsXG4gIMOWOiBcIk9cIixcbiAgw5g6IFwiT1wiLFxuICDhu5A6IFwiT1wiLFxuICDhuYw6IFwiT1wiLFxuICDhuZI6IFwiT1wiLFxuICDIjjogXCJPXCIsXG4gIMOZOiBcIlVcIixcbiAgw5o6IFwiVVwiLFxuICDDmzogXCJVXCIsXG4gIMOcOiBcIlVcIixcbiAgw506IFwiWVwiLFxuICDDoDogXCJhXCIsXG4gIMOhOiBcImFcIixcbiAgw6I6IFwiYVwiLFxuICDDozogXCJhXCIsXG4gIMOkOiBcImFcIixcbiAgw6U6IFwiYVwiLFxuICDhuqU6IFwiYVwiLFxuICDhuq86IFwiYVwiLFxuICDhurM6IFwiYVwiLFxuICDhurU6IFwiYVwiLFxuICDhurc6IFwiYVwiLFxuICDDpjogXCJhZVwiLFxuICDhuqc6IFwiYVwiLFxuICDhurE6IFwiYVwiLFxuICDIgzogXCJhXCIsXG4gIMOnOiBcImNcIixcbiAg4biJOiBcImNcIixcbiAgw6g6IFwiZVwiLFxuICDDqTogXCJlXCIsXG4gIMOqOiBcImVcIixcbiAgw6s6IFwiZVwiLFxuICDhur86IFwiZVwiLFxuICDhuJc6IFwiZVwiLFxuICDhu4E6IFwiZVwiLFxuICDhuJU6IFwiZVwiLFxuICDhuJ06IFwiZVwiLFxuICDIhzogXCJlXCIsXG4gIMOsOiBcImlcIixcbiAgw606IFwiaVwiLFxuICDDrjogXCJpXCIsXG4gIMOvOiBcImlcIixcbiAg4bivOiBcImlcIixcbiAgyIs6IFwiaVwiLFxuICDDsDogXCJkXCIsXG4gIMOxOiBcIm5cIixcbiAgw7I6IFwib1wiLFxuICDDszogXCJvXCIsXG4gIMO0OiBcIm9cIixcbiAgw7U6IFwib1wiLFxuICDDtjogXCJvXCIsXG4gIMO4OiBcIm9cIixcbiAg4buROiBcIm9cIixcbiAg4bmNOiBcIm9cIixcbiAg4bmTOiBcIm9cIixcbiAgyI86IFwib1wiLFxuICDDuTogXCJ1XCIsXG4gIMO6OiBcInVcIixcbiAgw7s6IFwidVwiLFxuICDDvDogXCJ1XCIsXG4gIMO9OiBcInlcIixcbiAgw786IFwieVwiLFxuICDEgDogXCJBXCIsXG4gIMSBOiBcImFcIixcbiAgxII6IFwiQVwiLFxuICDEgzogXCJhXCIsXG4gIMSEOiBcIkFcIixcbiAgxIU6IFwiYVwiLFxuICDEhjogXCJDXCIsXG4gIMSHOiBcImNcIixcbiAgxIg6IFwiQ1wiLFxuICDEiTogXCJjXCIsXG4gIMSKOiBcIkNcIixcbiAgxIs6IFwiY1wiLFxuICDEjDogXCJDXCIsXG4gIMSNOiBcImNcIixcbiAgQ8yGOiBcIkNcIixcbiAgY8yGOiBcImNcIixcbiAgxI46IFwiRFwiLFxuICDEjzogXCJkXCIsXG4gIMSQOiBcIkRcIixcbiAgxJE6IFwiZFwiLFxuICDEkjogXCJFXCIsXG4gIMSTOiBcImVcIixcbiAgxJQ6IFwiRVwiLFxuICDElTogXCJlXCIsXG4gIMSWOiBcIkVcIixcbiAgxJc6IFwiZVwiLFxuICDEmDogXCJFXCIsXG4gIMSZOiBcImVcIixcbiAgxJo6IFwiRVwiLFxuICDEmzogXCJlXCIsXG4gIMScOiBcIkdcIixcbiAgx7Q6IFwiR1wiLFxuICDEnTogXCJnXCIsXG4gIMe1OiBcImdcIixcbiAgxJ46IFwiR1wiLFxuICDEnzogXCJnXCIsXG4gIMSgOiBcIkdcIixcbiAgxKE6IFwiZ1wiLFxuICDEojogXCJHXCIsXG4gIMSjOiBcImdcIixcbiAgxKQ6IFwiSFwiLFxuICDEpTogXCJoXCIsXG4gIMSmOiBcIkhcIixcbiAgxKc6IFwiaFwiLFxuICDhuKo6IFwiSFwiLFxuICDhuKs6IFwiaFwiLFxuICDEqDogXCJJXCIsXG4gIMSpOiBcImlcIixcbiAgxKo6IFwiSVwiLFxuICDEqzogXCJpXCIsXG4gIMSsOiBcIklcIixcbiAgxK06IFwiaVwiLFxuICDErjogXCJJXCIsXG4gIMSvOiBcImlcIixcbiAgxLA6IFwiSVwiLFxuICDEsTogXCJpXCIsXG4gIMSyOiBcIklKXCIsXG4gIMSzOiBcImlqXCIsXG4gIMS0OiBcIkpcIixcbiAgxLU6IFwialwiLFxuICDEtjogXCJLXCIsXG4gIMS3OiBcImtcIixcbiAg4biwOiBcIktcIixcbiAg4bixOiBcImtcIixcbiAgS8yGOiBcIktcIixcbiAga8yGOiBcImtcIixcbiAgxLk6IFwiTFwiLFxuICDEujogXCJsXCIsXG4gIMS7OiBcIkxcIixcbiAgxLw6IFwibFwiLFxuICDEvTogXCJMXCIsXG4gIMS+OiBcImxcIixcbiAgxL86IFwiTFwiLFxuICDFgDogXCJsXCIsXG4gIMWBOiBcImxcIixcbiAgxYI6IFwibFwiLFxuICDhuL46IFwiTVwiLFxuICDhuL86IFwibVwiLFxuICBNzIY6IFwiTVwiLFxuICBtzIY6IFwibVwiLFxuICDFgzogXCJOXCIsXG4gIMWEOiBcIm5cIixcbiAgxYU6IFwiTlwiLFxuICDFhjogXCJuXCIsXG4gIMWHOiBcIk5cIixcbiAgxYg6IFwiblwiLFxuICDFiTogXCJuXCIsXG4gIE7MhjogXCJOXCIsXG4gIG7MhjogXCJuXCIsXG4gIMWMOiBcIk9cIixcbiAgxY06IFwib1wiLFxuICDFjjogXCJPXCIsXG4gIMWPOiBcIm9cIixcbiAgxZA6IFwiT1wiLFxuICDFkTogXCJvXCIsXG4gIMWSOiBcIk9FXCIsXG4gIMWTOiBcIm9lXCIsXG4gIFDMhjogXCJQXCIsXG4gIHDMhjogXCJwXCIsXG4gIMWUOiBcIlJcIixcbiAgxZU6IFwiclwiLFxuICDFljogXCJSXCIsXG4gIMWXOiBcInJcIixcbiAgxZg6IFwiUlwiLFxuICDFmTogXCJyXCIsXG4gIFLMhjogXCJSXCIsXG4gIHLMhjogXCJyXCIsXG4gIMiSOiBcIlJcIixcbiAgyJM6IFwiclwiLFxuICDFmjogXCJTXCIsXG4gIMWbOiBcInNcIixcbiAgxZw6IFwiU1wiLFxuICDFnTogXCJzXCIsXG4gIMWeOiBcIlNcIixcbiAgyJg6IFwiU1wiLFxuICDImTogXCJzXCIsXG4gIMWfOiBcInNcIixcbiAgxaA6IFwiU1wiLFxuICDFoTogXCJzXCIsXG4gIMWiOiBcIlRcIixcbiAgxaM6IFwidFwiLFxuICDImzogXCJ0XCIsXG4gIMiaOiBcIlRcIixcbiAgxaQ6IFwiVFwiLFxuICDFpTogXCJ0XCIsXG4gIMWmOiBcIlRcIixcbiAgxac6IFwidFwiLFxuICBUzIY6IFwiVFwiLFxuICB0zIY6IFwidFwiLFxuICDFqDogXCJVXCIsXG4gIMWpOiBcInVcIixcbiAgxao6IFwiVVwiLFxuICDFqzogXCJ1XCIsXG4gIMWsOiBcIlVcIixcbiAgxa06IFwidVwiLFxuICDFrjogXCJVXCIsXG4gIMWvOiBcInVcIixcbiAgxbA6IFwiVVwiLFxuICDFsTogXCJ1XCIsXG4gIMWyOiBcIlVcIixcbiAgxbM6IFwidVwiLFxuICDIljogXCJVXCIsXG4gIMiXOiBcInVcIixcbiAgVsyGOiBcIlZcIixcbiAgdsyGOiBcInZcIixcbiAgxbQ6IFwiV1wiLFxuICDFtTogXCJ3XCIsXG4gIOG6gjogXCJXXCIsXG4gIOG6gzogXCJ3XCIsXG4gIFjMhjogXCJYXCIsXG4gIHjMhjogXCJ4XCIsXG4gIMW2OiBcIllcIixcbiAgxbc6IFwieVwiLFxuICDFuDogXCJZXCIsXG4gIFnMhjogXCJZXCIsXG4gIHnMhjogXCJ5XCIsXG4gIMW5OiBcIlpcIixcbiAgxbo6IFwielwiLFxuICDFuzogXCJaXCIsXG4gIMW8OiBcInpcIixcbiAgxb06IFwiWlwiLFxuICDFvjogXCJ6XCIsXG4gIMW/OiBcInNcIixcbiAgxpI6IFwiZlwiLFxuICDGoDogXCJPXCIsXG4gIMahOiBcIm9cIixcbiAgxq86IFwiVVwiLFxuICDGsDogXCJ1XCIsXG4gIMeNOiBcIkFcIixcbiAgx446IFwiYVwiLFxuICDHjzogXCJJXCIsXG4gIMeQOiBcImlcIixcbiAgx5E6IFwiT1wiLFxuICDHkjogXCJvXCIsXG4gIMeTOiBcIlVcIixcbiAgx5Q6IFwidVwiLFxuICDHlTogXCJVXCIsXG4gIMeWOiBcInVcIixcbiAgx5c6IFwiVVwiLFxuICDHmDogXCJ1XCIsXG4gIMeZOiBcIlVcIixcbiAgx5o6IFwidVwiLFxuICDHmzogXCJVXCIsXG4gIMecOiBcInVcIixcbiAg4buoOiBcIlVcIixcbiAg4bupOiBcInVcIixcbiAg4bm4OiBcIlVcIixcbiAg4bm5OiBcInVcIixcbiAgx7o6IFwiQVwiLFxuICDHuzogXCJhXCIsXG4gIMe8OiBcIkFFXCIsXG4gIMe9OiBcImFlXCIsXG4gIMe+OiBcIk9cIixcbiAgx786IFwib1wiLFxuICDDnjogXCJUSFwiLFxuICDDvjogXCJ0aFwiLFxuICDhuZQ6IFwiUFwiLFxuICDhuZU6IFwicFwiLFxuICDhuaQ6IFwiU1wiLFxuICDhuaU6IFwic1wiLFxuICBYzIE6IFwiWFwiLFxuICB4zIE6IFwieFwiLFxuICDQgzogXCLQk1wiLFxuICDRkzogXCLQs1wiLFxuICDQjDogXCLQmlwiLFxuICDRnDogXCLQulwiLFxuICBBzIs6IFwiQVwiLFxuICBhzIs6IFwiYVwiLFxuICBFzIs6IFwiRVwiLFxuICBlzIs6IFwiZVwiLFxuICBJzIs6IFwiSVwiLFxuICBpzIs6IFwiaVwiLFxuICDHuDogXCJOXCIsXG4gIMe5OiBcIm5cIixcbiAg4buSOiBcIk9cIixcbiAg4buTOiBcIm9cIixcbiAg4bmQOiBcIk9cIixcbiAg4bmROiBcIm9cIixcbiAg4buqOiBcIlVcIixcbiAg4burOiBcInVcIixcbiAg4bqAOiBcIldcIixcbiAg4bqBOiBcIndcIixcbiAg4buyOiBcIllcIixcbiAg4buzOiBcInlcIixcbiAgyIA6IFwiQVwiLFxuICDIgTogXCJhXCIsXG4gIMiEOiBcIkVcIixcbiAgyIU6IFwiZVwiLFxuICDIiDogXCJJXCIsXG4gIMiJOiBcImlcIixcbiAgyIw6IFwiT1wiLFxuICDIjTogXCJvXCIsXG4gIMiQOiBcIlJcIixcbiAgyJE6IFwiclwiLFxuICDIlDogXCJVXCIsXG4gIMiVOiBcInVcIixcbiAgQsyMOiBcIkJcIixcbiAgYsyMOiBcImJcIixcbiAgxIzMozogXCJDXCIsXG4gIMSNzKM6IFwiY1wiLFxuICDDisyMOiBcIkVcIixcbiAgw6rMjDogXCJlXCIsXG4gIEbMjDogXCJGXCIsXG4gIGbMjDogXCJmXCIsXG4gIMemOiBcIkdcIixcbiAgx6c6IFwiZ1wiLFxuICDInjogXCJIXCIsXG4gIMifOiBcImhcIixcbiAgSsyMOiBcIkpcIixcbiAgx7A6IFwialwiLFxuICDHqDogXCJLXCIsXG4gIMepOiBcImtcIixcbiAgTcyMOiBcIk1cIixcbiAgbcyMOiBcIm1cIixcbiAgUMyMOiBcIlBcIixcbiAgcMyMOiBcInBcIixcbiAgUcyMOiBcIlFcIixcbiAgccyMOiBcInFcIixcbiAgxZjMqTogXCJSXCIsXG4gIMWZzKk6IFwiclwiLFxuICDhuaY6IFwiU1wiLFxuICDhuac6IFwic1wiLFxuICBWzIw6IFwiVlwiLFxuICB2zIw6IFwidlwiLFxuICBXzIw6IFwiV1wiLFxuICB3zIw6IFwid1wiLFxuICBYzIw6IFwiWFwiLFxuICB4zIw6IFwieFwiLFxuICBZzIw6IFwiWVwiLFxuICB5zIw6IFwieVwiLFxuICBBzKc6IFwiQVwiLFxuICBhzKc6IFwiYVwiLFxuICBCzKc6IFwiQlwiLFxuICBizKc6IFwiYlwiLFxuICDhuJA6IFwiRFwiLFxuICDhuJE6IFwiZFwiLFxuICDIqDogXCJFXCIsXG4gIMipOiBcImVcIixcbiAgxpDMpzogXCJFXCIsXG4gIMmbzKc6IFwiZVwiLFxuICDhuKg6IFwiSFwiLFxuICDhuKk6IFwiaFwiLFxuICBJzKc6IFwiSVwiLFxuICBpzKc6IFwiaVwiLFxuICDGl8ynOiBcIklcIixcbiAgyajMpzogXCJpXCIsXG4gIE3MpzogXCJNXCIsXG4gIG3MpzogXCJtXCIsXG4gIE/MpzogXCJPXCIsXG4gIG/MpzogXCJvXCIsXG4gIFHMpzogXCJRXCIsXG4gIHHMpzogXCJxXCIsXG4gIFXMpzogXCJVXCIsXG4gIHXMpzogXCJ1XCIsXG4gIFjMpzogXCJYXCIsXG4gIHjMpzogXCJ4XCIsXG4gIFrMpzogXCJaXCIsXG4gIHrMpzogXCJ6XCJcbn0sIGNQID0gT2JqZWN0LmtleXMocWIpLmpvaW4oXCJ8XCIpLCBsUCA9IG5ldyBSZWdFeHAoY1AsIFwiZ1wiKTtcbmZ1bmN0aW9uIHBQKGUpIHtcbiAgcmV0dXJuIGUucmVwbGFjZShsUCwgKHQpID0+IHFiW3RdKTtcbn1cbi8qKlxuICogQG5hbWUgbWF0Y2gtc29ydGVyXG4gKiBAbGljZW5zZSBNSVQgbGljZW5zZS5cbiAqIEBjb3B5cmlnaHQgKGMpIDIwOTkgS2VudCBDLiBEb2Rkc1xuICogQGF1dGhvciBLZW50IEMuIERvZGRzIDxtZUBrZW50Y2RvZGRzLmNvbT4gKGh0dHBzOi8va2VudGNkb2Rkcy5jb20pXG4gKi9cbmNvbnN0IEkyID0ge1xuICBDQVNFX1NFTlNJVElWRV9FUVVBTDogNyxcbiAgRVFVQUw6IDYsXG4gIFNUQVJUU19XSVRIOiA1LFxuICBXT1JEX1NUQVJUU19XSVRIOiA0LFxuICBDT05UQUlOUzogMyxcbiAgQUNST05ZTTogMixcbiAgTUFUQ0hFUzogMSxcbiAgTk9fTUFUQ0g6IDBcbn07XG5mdW5jdGlvbiBkUChlLCB0LCBvKSB7XG4gIHZhciBuO1xuICBpZiAobyA9IG8gfHwge30sIG8udGhyZXNob2xkID0gKG4gPSBvLnRocmVzaG9sZCkgIT0gbnVsbCA/IG4gOiBJMi5NQVRDSEVTLCAhby5hY2Nlc3NvcnMpIHtcbiAgICBjb25zdCBhID0gbGMoZSwgdCwgbyk7XG4gICAgcmV0dXJuIHtcbiAgICAgIC8vIGVuZHMgdXAgYmVpbmcgZHVwbGljYXRlIG9mICdpdGVtJyBpbiBtYXRjaGVzIGJ1dCBjb25zaXN0ZW50XG4gICAgICByYW5rZWRWYWx1ZTogZSxcbiAgICAgIHJhbms6IGEsXG4gICAgICBhY2Nlc3NvckluZGV4OiAtMSxcbiAgICAgIGFjY2Vzc29yVGhyZXNob2xkOiBvLnRocmVzaG9sZCxcbiAgICAgIHBhc3NlZDogYSA+PSBvLnRocmVzaG9sZFxuICAgIH07XG4gIH1cbiAgY29uc3QgciA9IHVQKGUsIG8uYWNjZXNzb3JzKSwgaSA9IHtcbiAgICByYW5rZWRWYWx1ZTogZSxcbiAgICByYW5rOiBJMi5OT19NQVRDSCxcbiAgICBhY2Nlc3NvckluZGV4OiAtMSxcbiAgICBhY2Nlc3NvclRocmVzaG9sZDogby50aHJlc2hvbGQsXG4gICAgcGFzc2VkOiAhMVxuICB9O1xuICBmb3IgKGxldCBhID0gMDsgYSA8IHIubGVuZ3RoOyBhKyspIHtcbiAgICBjb25zdCBzID0gclthXTtcbiAgICBsZXQgbCA9IGxjKHMuaXRlbVZhbHVlLCB0LCBvKTtcbiAgICBjb25zdCB7XG4gICAgICBtaW5SYW5raW5nOiBwLFxuICAgICAgbWF4UmFua2luZzogZCxcbiAgICAgIHRocmVzaG9sZDogYiA9IG8udGhyZXNob2xkXG4gICAgfSA9IHMuYXR0cmlidXRlcztcbiAgICBsIDwgcCAmJiBsID49IEkyLk1BVENIRVMgPyBsID0gcCA6IGwgPiBkICYmIChsID0gZCksIGwgPSBNYXRoLm1pbihsLCBkKSwgbCA+PSBiICYmIGwgPiBpLnJhbmsgJiYgKGkucmFuayA9IGwsIGkucGFzc2VkID0gITAsIGkuYWNjZXNzb3JJbmRleCA9IGEsIGkuYWNjZXNzb3JUaHJlc2hvbGQgPSBiLCBpLnJhbmtlZFZhbHVlID0gcy5pdGVtVmFsdWUpO1xuICB9XG4gIHJldHVybiBpO1xufVxuZnVuY3Rpb24gbGMoZSwgdCwgbykge1xuICByZXR1cm4gZSA9IHBjKGUsIG8pLCB0ID0gcGModCwgbyksIHQubGVuZ3RoID4gZS5sZW5ndGggPyBJMi5OT19NQVRDSCA6IGUgPT09IHQgPyBJMi5DQVNFX1NFTlNJVElWRV9FUVVBTCA6IChlID0gZS50b0xvd2VyQ2FzZSgpLCB0ID0gdC50b0xvd2VyQ2FzZSgpLCBlID09PSB0ID8gSTIuRVFVQUwgOiBlLnN0YXJ0c1dpdGgodCkgPyBJMi5TVEFSVFNfV0lUSCA6IGUuaW5jbHVkZXMoYCAke3R9YCkgPyBJMi5XT1JEX1NUQVJUU19XSVRIIDogZS5pbmNsdWRlcyh0KSA/IEkyLkNPTlRBSU5TIDogdC5sZW5ndGggPT09IDEgPyBJMi5OT19NQVRDSCA6IGJQKGUpLmluY2x1ZGVzKHQpID8gSTIuQUNST05ZTSA6IE1QKGUsIHQpKTtcbn1cbmZ1bmN0aW9uIGJQKGUpIHtcbiAgbGV0IHQgPSBcIlwiO1xuICByZXR1cm4gZS5zcGxpdChcIiBcIikuZm9yRWFjaCgobikgPT4ge1xuICAgIG4uc3BsaXQoXCItXCIpLmZvckVhY2goKGkpID0+IHtcbiAgICAgIHQgKz0gaS5zdWJzdHIoMCwgMSk7XG4gICAgfSk7XG4gIH0pLCB0O1xufVxuZnVuY3Rpb24gTVAoZSwgdCkge1xuICBsZXQgbyA9IDAsIG4gPSAwO1xuICBmdW5jdGlvbiByKGwsIHAsIGQpIHtcbiAgICBmb3IgKGxldCBiID0gZCwgTSA9IHAubGVuZ3RoOyBiIDwgTTsgYisrKVxuICAgICAgaWYgKHBbYl0gPT09IGwpXG4gICAgICAgIHJldHVybiBvICs9IDEsIGIgKyAxO1xuICAgIHJldHVybiAtMTtcbiAgfVxuICBmdW5jdGlvbiBpKGwpIHtcbiAgICBjb25zdCBwID0gMSAvIGwsIGQgPSBvIC8gdC5sZW5ndGg7XG4gICAgcmV0dXJuIEkyLk1BVENIRVMgKyBkICogcDtcbiAgfVxuICBjb25zdCBhID0gcih0WzBdLCBlLCAwKTtcbiAgaWYgKGEgPCAwKVxuICAgIHJldHVybiBJMi5OT19NQVRDSDtcbiAgbiA9IGE7XG4gIGZvciAobGV0IGwgPSAxLCBwID0gdC5sZW5ndGg7IGwgPCBwOyBsKyspIHtcbiAgICBjb25zdCBkID0gdFtsXTtcbiAgICBpZiAobiA9IHIoZCwgZSwgbiksICEobiA+IC0xKSlcbiAgICAgIHJldHVybiBJMi5OT19NQVRDSDtcbiAgfVxuICBjb25zdCBzID0gbiAtIGE7XG4gIHJldHVybiBpKHMpO1xufVxuZnVuY3Rpb24gcGMoZSwgdCkge1xuICBsZXQge1xuICAgIGtlZXBEaWFjcml0aWNzOiBvXG4gIH0gPSB0O1xuICByZXR1cm4gZSA9IGAke2V9YCwgbyB8fCAoZSA9IHBQKGUpKSwgZTtcbn1cbmZ1bmN0aW9uIEFQKGUsIHQpIHtcbiAgbGV0IG8gPSB0O1xuICB0eXBlb2YgdCA9PSBcIm9iamVjdFwiICYmIChvID0gdC5hY2Nlc3Nvcik7XG4gIGNvbnN0IG4gPSBvKGUpO1xuICByZXR1cm4gbiA9PSBudWxsID8gW10gOiBBcnJheS5pc0FycmF5KG4pID8gbiA6IFtTdHJpbmcobildO1xufVxuZnVuY3Rpb24gdVAoZSwgdCkge1xuICBjb25zdCBvID0gW107XG4gIGZvciAobGV0IG4gPSAwLCByID0gdC5sZW5ndGg7IG4gPCByOyBuKyspIHtcbiAgICBjb25zdCBpID0gdFtuXSwgYSA9IHpQKGkpLCBzID0gQVAoZSwgaSk7XG4gICAgZm9yIChsZXQgbCA9IDAsIHAgPSBzLmxlbmd0aDsgbCA8IHA7IGwrKylcbiAgICAgIG8ucHVzaCh7XG4gICAgICAgIGl0ZW1WYWx1ZTogc1tsXSxcbiAgICAgICAgYXR0cmlidXRlczogYVxuICAgICAgfSk7XG4gIH1cbiAgcmV0dXJuIG87XG59XG5jb25zdCBkYyA9IHtcbiAgbWF4UmFua2luZzogMSAvIDAsXG4gIG1pblJhbmtpbmc6IC0xIC8gMFxufTtcbmZ1bmN0aW9uIHpQKGUpIHtcbiAgcmV0dXJuIHR5cGVvZiBlID09IFwiZnVuY3Rpb25cIiA/IGRjIDoge1xuICAgIC4uLmRjLFxuICAgIC4uLmVcbiAgfTtcbn1cbmNvbnN0IGhQID0gJC5zcGFuKFxuICAoeyB0aGVtZTogeyBjb2xvcnM6IGUsIHR5cG9ncmFwaHk6IHQsIGxpbmVIZWlnaHQ6IG8gfSwgaXNEaXNhYmxlZDogbiwgZm9udFNpemU6IHIgfSkgPT4gbzFgXG4gICAgZm9udC1zaXplOiAke3IgPT09IFwieHNcIiA/IHQudDEwIDogXCIxMXB4XCJ9O1xuICAgIGxpbmUtaGVpZ2h0OiAke28ubGgyMH07XG4gICAgY29sb3I6ICR7biA/IGUudmVyeUxpZ2h0R3JleSA6IGUudGV4dEljb24udGV4dExvd2VtcGhhc2lzfTtcbiAgYFxuKTtcbmZ1bmN0aW9uIE9QKGUpIHtcbiAgY29uc3QgeyBwYWdlU2l6ZTogdCwgY3VycmVudFBhZ2U6IG8sIGxpbWl0OiBuLCBpc0Rpc2FibGVkOiByLCBmb250U2l6ZTogaSB9ID0gZSwgYSA9IG0wKCgpID0+ICF0IHx8ICFvIHx8ICFuID8gXCJcIiA6IGAke2Ake051bWJlcih0KSAqIChOdW1iZXIobykgLSAxKSArIDF9IC0gJHtOdW1iZXIobykgKiBOdW1iZXIodCkgPiBuID8gbiA6IE51bWJlcihvKSAqIE51bWJlcih0KX1gfSBvZiAke259YCwgW28sIHQsIG5dKTtcbiAgcmV0dXJuIC8qIEBfX1BVUkVfXyAqLyBjKGhQLCB7IGlzRGlzYWJsZWQ6IHIsIGZvbnRTaXplOiBpLCBjaGlsZHJlbjogYSB9KTtcbn1cbmNvbnN0IGZQID0gJC5kaXYoXG4gICh7IHRoZW1lOiB7IGNvbG9yczogZSwgdHJhbnNpdGlvbnM6IHQsIHNwYWNpbmdzOiBvIH0sIGlzRGlzYWJsZWQ6IG4gfSkgPT4gbzFgXG4gICAgJiArICYge1xuICAgICAgbWFyZ2luLWxlZnQ6ICR7by5zcDh9O1xuICAgIH1cblxuICAgIC5pY29uLXN5c3RlbSB7XG4gICAgICBjdXJzb3I6ICR7biA/IFwiZGVmYXVsdFwiIDogXCJwb2ludGVyXCJ9O1xuICAgICAgY29sb3I6ICR7biA/IGUudmVyeUxpZ2h0R3JleSA6IGUudGV4dEljb24udGV4dEhpZ2hlbXBoYXNpc307XG4gICAgICB0cmFuc2l0aW9uOiAke3QuYmFzZX07XG5cbiAgICAgICY6aG92ZXIge1xuICAgICAgICB0cmFuc2l0aW9uOiAke3QuYmFzZX07XG4gICAgICAgIGNvbG9yOiAkeyFuICYmIGUudGV4dEljb24udGV4dEhpZ2hlbXBoYXNpc307XG4gICAgICB9XG4gICAgfVxuICBgXG4pO1xuZnVuY3Rpb24gZ1AoZSkge1xuICBjb25zdCB7IG5hbWU6IHQsIG9uQ2xpY2s6IG8sIGlzRGlzYWJsZWQ6IG4gfSA9IGUsIHIgPSBfMSgoKSA9PiB7XG4gICAgIW4gJiYgbyAmJiBvKCk7XG4gIH0sIFtuLCBvXSk7XG4gIHJldHVybiAvKiBAX19QVVJFX18gKi8gYyhmUCwgeyBpc0Rpc2FibGVkOiBuLCBvbkNsaWNrOiByLCBjaGlsZHJlbjogLyogQF9fUFVSRV9fICovIGMoWjEsIHsgbmFtZTogdCwgc2l6ZTogXCJ4eHhzXCIgfSkgfSk7XG59XG5jb25zdCBDUCA9ICQuZGl2YFxuICBkaXNwbGF5OiBmbGV4O1xuICBqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWJldHdlZW47XG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gIGdhcDogOHB4O1xuYDtcbmZ1bmN0aW9uIG1QKGUpIHtcbiAgY29uc3Qge1xuICAgIGN1cnJlbnRQYWdlOiB0ID0gMSxcbiAgICBsaW1pdDogbyA9IDEsXG4gICAgb25GaXJzdFBhZ2VDbGljazogbixcbiAgICBvblByZXZDbGljazogcixcbiAgICBvbkxhc3RQYWdlQ2xpY2s6IGksXG4gICAgb25OZXh0Q2xpY2s6IGEsXG4gICAgaXNEaXNhYmxlZDogc1xuICB9ID0gZSwgbCA9IG0wKFxuICAgICgpID0+IFtcbiAgICAgIHtcbiAgICAgICAgbmFtZTogXCJGaXJzdFBhZ2VcIixcbiAgICAgICAgb25DbGljazogbixcbiAgICAgICAgaXNEaXNhYmxlZDogISEodCA8PSAxIHx8IHMpXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBuYW1lOiBcIkNoZXZyb25MZWZ0XCIsXG4gICAgICAgIG9uQ2xpY2s6IHIsXG4gICAgICAgIGlzRGlzYWJsZWQ6ICEhKHQgPD0gMSB8fCBzKVxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgbmFtZTogXCJDaGV2cm9uUmlnaHRcIixcbiAgICAgICAgb25DbGljazogYSxcbiAgICAgICAgaXNEaXNhYmxlZDogISEodCA+PSBvIHx8IHMpXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBuYW1lOiBcIkxhc3RQYWdlXCIsXG4gICAgICAgIG9uQ2xpY2s6IGksXG4gICAgICAgIGlzRGlzYWJsZWQ6ICEhKHQgPj0gbyB8fCBzKVxuICAgICAgfVxuICAgIF0sXG4gICAgW1xuICAgICAgdCxcbiAgICAgIG8sXG4gICAgICBuLFxuICAgICAgcixcbiAgICAgIGEsXG4gICAgICBpLFxuICAgICAgc1xuICAgIF1cbiAgKTtcbiAgcmV0dXJuIC8qIEBfX1BVUkVfXyAqLyBjKENQLCB7IGNoaWxkcmVuOiBsLm1hcChcbiAgICAocCkgPT4gLyogQF9fUFVSRV9fICovIGMoXG4gICAgICBnUCxcbiAgICAgIHtcbiAgICAgICAgbmFtZTogcC5uYW1lLFxuICAgICAgICBpc0Rpc2FibGVkOiBwLmlzRGlzYWJsZWQsXG4gICAgICAgIG9uQ2xpY2s6IHAub25DbGlja1xuICAgICAgfSxcbiAgICAgIHAubmFtZVxuICAgIClcbiAgKSB9KTtcbn1cbiQuZGl2YFxuICB3aWR0aDogNjAwcHg7XG5gO1xuY29uc3QgTFAgPSAkLmRpdihcbiAgKHsgdGhlbWU6IHsgY29sb3JzOiBlLCBib3JkZXJSYWRpdXM6IHQgfSwgbG9hZGluZzogbyB9KSA9PiBvMWBcbiAgICBkaXNwbGF5OiBmbGV4O1xuICAgIGp1c3RpZnktY29udGVudDogZmxleC1zdGFydDtcbiAgICBhbGlnbi1pdGVtczogY2VudGVyO1xuICAgIGdhcDogMjRweDtcbiAgICBwYWRkaW5nOiA0cHggOXB4O1xuICAgIG1pbi1oZWlnaHQ6IDQwcHg7XG4gICAgYm94LXNpemluZzogYm9yZGVyLWJveDtcbiAgICBib3JkZXI6ICR7byA/IFwidHJhbnNwYXJlbnRcIiA6IGAxcHggc29saWQgJHtlLmJvcmRlci5ib3JkZXJUZXJ0aWFyeX1gfTtcbiAgICBib3JkZXItdG9wOiBub25lO1xuICAgIGJvcmRlci1yYWRpdXM6IDAgMCAke3QuYmFzZX0gJHt0LmJhc2V9O1xuICAgIGJhY2tncm91bmQ6ICR7byA/IFwidHJhbnNwYXJlbnRcIiA6IGUuYmFja2dyb3VuZHMuYmdQcmltYXJ5fTtcbiAgICAmLmFsaWduLWNlbnRlciB7XG4gICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcbiAgICB9XG5cbiAgICAmLmFsaWduLXJpZ2h0IHtcbiAgICAgIGp1c3RpZnktY29udGVudDogZmxleC1lbmQ7XG4gICAgfVxuICAgICR7byAmJiBvMWBcbiAgICAgIHBhZGRpbmctcmlnaHQ6IDA7XG4gICAgICAmIC5za2VsZXRvbi1jb250YWluZXIge1xuICAgICAgICBtYXJnaW46IDZweCAwO1xuICAgICAgICBkaXYge1xuICAgICAgICAgIG9wYWNpdHk6IDA7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICBgfVxuICBgXG4pLCB2UCA9ICQuZGl2KFxuICAoeyB0aGVtZTogeyBjb2xvcnM6IGUsIHR5cG9ncmFwaHk6IHQsIGxpbmVIZWlnaHQ6IG8sIGl0ZW1TaXplOiBuIH0sIGlzRGlzYWJsZWQ6IHIgfSkgPT4gbzFgXG4gICAgZGlzcGxheTogZmxleDtcbiAgICBqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWJldHdlZW47XG4gICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgICBmb250LXNpemU6ICR7dC50MTB9O1xuICAgIGxpbmUtaGVpZ2h0OiAke28ubGgyMH07XG4gICAgY29sb3I6ICR7ciA/IGUudmVyeUxpZ2h0R3JleSA6IGUuZWNsaXBzZX07XG5cbiAgICAuZHJvcGRvd24gPiBkaXY6Zmlyc3QtY2hpbGQgPiBpbnB1dCB7XG4gICAgICBwYWRkaW5nOiAwO1xuICAgICAgd2lkdGg6ICR7bi5tZH07XG4gICAgICBoZWlnaHQ6ICR7bi5tZH07XG4gICAgICBjdXJzb3I6ICR7ciA/IFwiZGVmYXVsdFwiIDogXCJwb2ludGVyXCJ9O1xuICAgICAgdGV4dC1hbGlnbjogY2VudGVyO1xuICAgICAgdGV4dC1vdmVyZmxvdzogaW5pdGlhbDtcbiAgICAgIGJhY2tncm91bmQ6ICR7ZS53aGl0ZX07XG4gICAgfVxuXG4gICAgLmRyb3Bkb3duLWJvZHkge1xuICAgICAgbWluLXdpZHRoOiA4MHB4O1xuICAgIH1cbiAgYFxuKSwgcVAgPSAkLmRpdihcbiAgKHsgdGhlbWU6IHsgY29sb3JzOiBlLCBzcGFjaW5nczogdCwgdHlwb2dyYXBoeTogbyB9LCBmb250U2l6ZTogbiB9KSA9PiBvMWBcbiAgICBtYXJnaW46IDAgJHt0LnNwOH0gMCAwO1xuICAgIGZvbnQtc2l6ZTogJHtuID09PSBcInhzXCIgPyBvLnQxMCA6IFwiMTFweFwifTtcbiAgICBjb2xvcjogJHtlLnRleHRJY29uLnRleHRNZWRpdW1lbXBoYXNpc307XG4gIGBcbiksIHlQID0gJC5kaXYoXG4gICh7XG4gICAgdGhlbWU6IHsgY29sb3JzOiBlLCB0eXBvZ3JhcGh5OiB0LCBmb250V2VpZ2h0OiBvLCBpdGVtU2l6ZTogbiB9LFxuICAgIGlzRGlzYWJsZWQ6IHIsXG4gICAgZm9udFNpemU6IGlcbiAgfSkgPT4gbzFgXG4gICAgaW5wdXQge1xuICAgICAgbWF4LXdpZHRoOiAzOXB4O1xuICAgICAgbWF4LWhlaWdodDogMTVweDtcbiAgICAgIHBhZGRpbmc6IDRweCA4cHg7XG4gICAgICBmb250LXNpemU6ICR7aSA9PT0gXCJ4c1wiID8gdC50MTAgOiBcIjExcHhcIn07XG4gICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAke2UuYmFja2dyb3VuZHMuYmdQcmltYXJ5fTtcbiAgICAgIGJvcmRlcjogMXB4IHNvbGlkICR7ZS5ib3JkZXIuYm9yZGVyVGVydGlhcnl9O1xuICAgICAgZm9udC13ZWlnaHQ6ICR7by5yZWd1bGFyfTtcbiAgICB9XG4gICAgbGFiZWwge1xuICAgICAgZGlzcGxheTogbm9uZTtcbiAgICB9XG4gIGBcbik7XG5mdW5jdGlvbiB3UChlKSB7XG4gIGNvbnN0IHsgc2l6ZTogdCwgb3B0aW9uczogbywgb25DaGFuZ2U6IG4sIGlzRGlzYWJsZWQ6IHIsIGZvbnRTaXplOiBpIH0gPSBlLCBbYSwgc10gPSBUMShcIlwiKTtcbiAgUDEoKCkgPT4ge1xuICAgIHQgJiYgcyhOdW1iZXIodCkpO1xuICB9LCBbdF0pO1xuICBjb25zdCBsID0gXzEoXG4gICAgKGQpID0+IHtcbiAgICAgIHMoZCksIG4oZCk7XG4gICAgfSxcbiAgICBbbl1cbiAgKSwgcCA9IG0wKFxuICAgICgpID0+IG8ubWFwKFxuICAgICAgKGQsIGIpID0+ICh7XG4gICAgICAgIGxhYmVsOiBkLFxuICAgICAgICB2YWx1ZTogYlxuICAgICAgfSlcbiAgICApLFxuICAgIFtsLCBvXVxuICApO1xuICByZXR1cm4gLyogQF9fUFVSRV9fICovIGUxKHZQLCB7IGlzRGlzYWJsZWQ6IHIsIGNoaWxkcmVuOiBbXG4gICAgLyogQF9fUFVSRV9fICovIGMocVAsIHsgZm9udFNpemU6IGksIGNoaWxkcmVuOiBcIlJvd3MgcGVyIHBhZ2VcIiB9KSxcbiAgICAvKiBAX19QVVJFX18gKi8gYyhcbiAgICAgIGl0LFxuICAgICAge1xuICAgICAgICBpc0JvZHlHZW5lcmF0ZWQ6ICEwLFxuICAgICAgICBkcm9wZG93bkJvZHlXaWR0aDogXCI1OHB4XCIsXG4gICAgICAgIGJvZHlQYWRkaW5nOiBcIjBweFwiLFxuICAgICAgICBib2R5OiAvKiBAX19QVVJFX18gKi8gYyhcbiAgICAgICAgICBkdCxcbiAgICAgICAgICB7XG4gICAgICAgICAgICBkYXRhOiBwLFxuICAgICAgICAgICAgc2VsZWN0ZWRPcHRpb25zOiAoZCkgPT4ge1xuICAgICAgICAgICAgICBsKGQubGFiZWwpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgKSxcbiAgICAgICAgaXNEaXNhYmxlZDogcixcbiAgICAgICAgY2hpbGRyZW46IC8qIEBfX1BVUkVfXyAqLyBjKHlQLCB7IGZvbnRTaXplOiBpLCBjaGlsZHJlbjogLyogQF9fUFVSRV9fICovIGMoXG4gICAgICAgICAgWTIsXG4gICAgICAgICAge1xuICAgICAgICAgICAgaXNEaXNhYmxlZDogcixcbiAgICAgICAgICAgIHZhbHVlOiBhLFxuICAgICAgICAgICAgcmVhZE9ubHk6ICEwLFxuICAgICAgICAgICAgaGlkZUNsZWFyQnV0dG9uOiAhMFxuICAgICAgICAgIH1cbiAgICAgICAgKSB9KVxuICAgICAgfVxuICAgIClcbiAgXSB9KTtcbn1cbmZ1bmN0aW9uIHhQKGUpIHtcbiAgY29uc3Qge1xuICAgIGN1cnJlbnRQYWdlOiB0LFxuICAgIGlzRGlzYWJsZWQ6IG8sXG4gICAgbGltaXQ6IG4sXG4gICAgb25GaXJzdFBhZ2VDbGljazogcixcbiAgICBvbkxhc3RQYWdlQ2xpY2s6IGksXG4gICAgb25OZXh0Q2xpY2s6IGEsXG4gICAgb25QYWdlU2l6ZUNoYW5nZTogcyxcbiAgICBvblByZXZDbGljazogbCxcbiAgICBwYWdlU2l6ZTogcCxcbiAgICBwYWdlU2l6ZU9wdGlvbnM6IGQsXG4gICAgcG9zaXRpb246IGIgPSBPbC5SSUdIVCxcbiAgICBsb2FkaW5nOiBNLFxuICAgIGZvbnRTaXplOiB1XG4gIH0gPSBlLCBBID0gbTAoKCkgPT4gYHRhYmxlLXBhZ2luYXRpb24gYWxpZ24tJHtifWAsIFtiXSk7XG4gIHJldHVybiAvKiBAX19QVVJFX18gKi8gZTEoTFAsIHsgY2xhc3NOYW1lOiBBLCBsb2FkaW5nOiBNLCBjaGlsZHJlbjogW1xuICAgIHAgJiYgLyogQF9fUFVSRV9fICovIGUxKHMwLCB7IGNoaWxkcmVuOiBbXG4gICAgICAvKiBAX19QVVJFX18gKi8gYyhcbiAgICAgICAgaWUsXG4gICAgICAgIHtcbiAgICAgICAgICByYWRpdXM6IDQsXG4gICAgICAgICAgaGVpZ2h0OiBNID8gSzIgOiBcImF1dG9cIixcbiAgICAgICAgICB2aXNpYmxlOiBNLFxuICAgICAgICAgIGNoaWxkcmVuOiAvKiBAX19QVVJFX18gKi8gYyhcbiAgICAgICAgICAgIHdQLFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICBzaXplOiBwLFxuICAgICAgICAgICAgICBvcHRpb25zOiBkLFxuICAgICAgICAgICAgICBvbkNoYW5nZTogcyxcbiAgICAgICAgICAgICAgZm9udFNpemU6IHVcbiAgICAgICAgICAgIH1cbiAgICAgICAgICApXG4gICAgICAgIH1cbiAgICAgICksXG4gICAgICAvKiBAX19QVVJFX18gKi8gYyhcbiAgICAgICAgaWUsXG4gICAgICAgIHtcbiAgICAgICAgICByYWRpdXM6IDQsXG4gICAgICAgICAgaGVpZ2h0OiBNID8gSzIgOiBcImF1dG9cIixcbiAgICAgICAgICB2aXNpYmxlOiBNLFxuICAgICAgICAgIGNoaWxkcmVuOiAvKiBAX19QVVJFX18gKi8gYyhcbiAgICAgICAgICAgIE9QLFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICBwYWdlU2l6ZTogcCxcbiAgICAgICAgICAgICAgY3VycmVudFBhZ2U6IHQsXG4gICAgICAgICAgICAgIGxpbWl0OiBuLFxuICAgICAgICAgICAgICBpc0Rpc2FibGVkOiBvLFxuICAgICAgICAgICAgICBmb250U2l6ZTogdVxuICAgICAgICAgICAgfVxuICAgICAgICAgIClcbiAgICAgICAgfVxuICAgICAgKVxuICAgIF0gfSksXG4gICAgLyogQF9fUFVSRV9fICovIGMoXG4gICAgICBpZSxcbiAgICAgIHtcbiAgICAgICAgcmFkaXVzOiA0LFxuICAgICAgICBoZWlnaHQ6IE0gPyBLMiA6IFwiYXV0b1wiLFxuICAgICAgICB2aXNpYmxlOiBNLFxuICAgICAgICBjaGlsZHJlbjogLyogQF9fUFVSRV9fICovIGMoXG4gICAgICAgICAgbVAsXG4gICAgICAgICAge1xuICAgICAgICAgICAgY3VycmVudFBhZ2U6IHQsXG4gICAgICAgICAgICBsaW1pdDogTnVtYmVyKG4pIC8gTnVtYmVyKHApLFxuICAgICAgICAgICAgb25GaXJzdFBhZ2VDbGljazogcixcbiAgICAgICAgICAgIG9uUHJldkNsaWNrOiBsLFxuICAgICAgICAgICAgb25MYXN0UGFnZUNsaWNrOiBpLFxuICAgICAgICAgICAgb25OZXh0Q2xpY2s6IGEsXG4gICAgICAgICAgICBpc0Rpc2FibGVkOiBvXG4gICAgICAgICAgfVxuICAgICAgICApXG4gICAgICB9XG4gICAgKVxuICBdIH0pO1xufVxuY29uc3QgV1AgPSAoZSwgdCwgbykgPT4ge1xuICBjb25zdCBuID0gZS5nZXRWYWx1ZSh0KSwgW3IsIGldID0gbztcbiAgaWYgKChyIHx8IGkpICYmICFuKVxuICAgIHJldHVybiAhMTtcbiAgY29uc3QgYSA9IG5ldyBEYXRlKHIpLCBzID0gbmV3IERhdGUoaSk7XG4gIHJldHVybiByICYmICFpID8gbi5nZXRUaW1lKCkgPj0gYS5nZXRUaW1lKCkgOiAhciAmJiBpID8gbi5nZXRUaW1lKCkgPD0gcy5nZXRUaW1lKCkgOiByICYmIGkgPyBuLmdldFRpbWUoKSA+PSBhLmdldFRpbWUoKSAmJiBuLmdldFRpbWUoKSA8PSBzLmdldFRpbWUoKSA6ICEwO1xufSwgUlAgPSAoZSwgdCwgbykgPT4ge1xuICBjb25zdCBuID0gZS5nZXRWYWx1ZSh0KTtcbiAgcmV0dXJuIG8gPyB0eXBlb2YgbyA9PSBcInN0cmluZ1wiID8gby5pbmNsdWRlcyhuKSA6IEFycmF5LmlzQXJyYXkobykgPyBuID49IG9bMF0gJiYgbiA8PSBvWzFdIDogITAgOiAhMTtcbn0sIEJQID0gKGUsIHQsIG8pID0+IHtcbiAgaWYgKCh0ID09IG51bGwgPyB2b2lkIDAgOiB0Lmxlbmd0aCkgPCAxIHx8IGUubGVuZ3RoIDwgMiB8fCAhbylcbiAgICByZXR1cm4gZTtcbiAgY29uc3QgbiA9IC8qIEBfX1BVUkVfXyAqLyBuZXcgTWFwKCk7XG4gIGUuZm9yRWFjaCgoYSwgcykgPT4ge1xuICAgIG4uc2V0KGFbb10sIHsgaW5kZXg6IHMsIG9iajogYSB9KTtcbiAgfSk7XG4gIGNvbnN0IHIgPSBbXTtcbiAgdC5mb3JFYWNoKChhKSA9PiB7XG4gICAgaWYgKG4uaGFzKGEpKSB7XG4gICAgICBjb25zdCB7IGluZGV4OiBzLCBvYmo6IGwgfSA9IG4uZ2V0KGEpO1xuICAgICAgY29uc29sZS5sb2coXCJpbmRleFwiLCBzKSwgci5wdXNoKGwpLCBuLmRlbGV0ZShhKTtcbiAgICB9XG4gIH0pO1xuICBjb25zdCBpID0gQXJyYXkuZnJvbShuLnZhbHVlcygpKS5tYXAoKGEpID0+IGEub2JqKTtcbiAgcmV0dXJuIHIucHVzaCguLi5pKSwgcjtcbn0sIFNQID0gKGUsIHQsIG8pID0+IHtcbiAgbGV0IG4gPSAobyA9PSBudWxsID8gdm9pZCAwIDogby5tYXhWYWx1ZSkgPz8gTnVtYmVyLk5FR0FUSVZFX0lORklOSVRZLCByID0gKG8gPT0gbnVsbCA/IHZvaWQgMCA6IG8ubWluVmFsdWUpID8/IE51bWJlci5QT1NJVElWRV9JTkZJTklUWTtcbiAgcmV0dXJuIGUuZm9yRWFjaCgoaSkgPT4ge1xuICAgIGNvbnN0IGEgPSBpW3RdO1xuICAgIGlmIChhICE9IG51bGwgJiYgIWlzTmFOKGEpKSB7XG4gICAgICBjb25zdCBzID0gcGFyc2VGbG9hdChhKTtcbiAgICAgIHMgPiBuICYmIChuID0gcyksIHMgPCByICYmIChyID0gcyk7XG4gICAgfVxuICB9KSwgciA9PT0gTnVtYmVyLlBPU0lUSVZFX0lORklOSVRZICYmIG4gPT09IE51bWJlci5ORUdBVElWRV9JTkZJTklUWSA/IHsgbWluOiB2b2lkIDAsIG1heDogdm9pZCAwIH0gOiB7IG1pbjogciwgbWF4OiBuIH07XG59LCBmYSA9IChlLCB0LCBvKSA9PiB7XG4gIGNvbnN0IG4gPSB7fTtcbiAgcmV0dXJuIGUuZm9yRWFjaCgocikgPT4ge1xuICAgIGxldCBpID0gclt0XTtcbiAgICBpZiAobyAmJiAoaSA9IG8ocikpLCBpICE9IG51bGwpIHtcbiAgICAgIGNvbnN0IGEgPSB0eXBlb2YgaSA9PSBcIm51bWJlclwiID8gU3RyaW5nKGkpIDogaS50b1N0cmluZygpO1xuICAgICAgblthXSA9IHsgdmFsdWU6IGEsIGxhYmVsOiBhIH07XG4gICAgfVxuICB9KSwgT2JqZWN0LnZhbHVlcyhuKTtcbn07XG5mdW5jdGlvbiB4MyhlLCB0LCBvKSB7XG4gIGxldCBuID0gby5pbml0aWFsRGVwcyA/PyBbXSwgcjtcbiAgcmV0dXJuICgpID0+IHtcbiAgICB2YXIgaSwgYSwgcywgbDtcbiAgICBsZXQgcDtcbiAgICBvLmtleSAmJiAoKGkgPSBvLmRlYnVnKSAhPSBudWxsICYmIGkuY2FsbChvKSkgJiYgKHAgPSBEYXRlLm5vdygpKTtcbiAgICBjb25zdCBkID0gZSgpO1xuICAgIGlmICghKGQubGVuZ3RoICE9PSBuLmxlbmd0aCB8fCBkLnNvbWUoKHUsIEEpID0+IG5bQV0gIT09IHUpKSlcbiAgICAgIHJldHVybiByO1xuICAgIG4gPSBkO1xuICAgIGxldCBNO1xuICAgIGlmIChvLmtleSAmJiAoKGEgPSBvLmRlYnVnKSAhPSBudWxsICYmIGEuY2FsbChvKSkgJiYgKE0gPSBEYXRlLm5vdygpKSwgciA9IHQoLi4uZCksIG8ua2V5ICYmICgocyA9IG8uZGVidWcpICE9IG51bGwgJiYgcy5jYWxsKG8pKSkge1xuICAgICAgY29uc3QgdSA9IE1hdGgucm91bmQoKERhdGUubm93KCkgLSBwKSAqIDEwMCkgLyAxMDAsIEEgPSBNYXRoLnJvdW5kKChEYXRlLm5vdygpIC0gTSkgKiAxMDApIC8gMTAwLCB6ID0gQSAvIDE2LCBmID0gKE8sIGgpID0+IHtcbiAgICAgICAgZm9yIChPID0gU3RyaW5nKE8pOyBPLmxlbmd0aCA8IGg7IClcbiAgICAgICAgICBPID0gXCIgXCIgKyBPO1xuICAgICAgICByZXR1cm4gTztcbiAgICAgIH07XG4gICAgICBjb25zb2xlLmluZm8oXG4gICAgICAgIGAlY+KPsSAke2YoQSwgNSl9IC8ke2YodSwgNSl9IG1zYCxcbiAgICAgICAgYFxuICAgICAgICAgICAgZm9udC1zaXplOiAuNnJlbTtcbiAgICAgICAgICAgIGZvbnQtd2VpZ2h0OiBib2xkO1xuICAgICAgICAgICAgY29sb3I6IGhzbCgke01hdGgubWF4KFxuICAgICAgICAgIDAsXG4gICAgICAgICAgTWF0aC5taW4oMTIwIC0gMTIwICogeiwgMTIwKVxuICAgICAgICApfWRlZyAxMDAlIDMxJSk7YCxcbiAgICAgICAgbyA9PSBudWxsID8gdm9pZCAwIDogby5rZXlcbiAgICAgICk7XG4gICAgfVxuICAgIHJldHVybiAobCA9IG8gPT0gbnVsbCA/IHZvaWQgMCA6IG8ub25DaGFuZ2UpID09IG51bGwgfHwgbC5jYWxsKG8sIHIpLCByO1xuICB9O1xufVxuZnVuY3Rpb24gZ2EoZSwgdCkge1xuICBpZiAoZSA9PT0gdm9pZCAwKVxuICAgIHRocm93IG5ldyBFcnJvcihgVW5leHBlY3RlZCB1bmRlZmluZWQke3QgPyBgOiAke3R9YCA6IFwiXCJ9YCk7XG4gIHJldHVybiBlO1xufVxuY29uc3QgRVAgPSAoZSwgdCkgPT4gTWF0aC5hYnMoZSAtIHQpIDwgMSwga1AgPSAoZSwgdCwgbykgPT4ge1xuICBsZXQgbjtcbiAgcmV0dXJuIGZ1bmN0aW9uKC4uLnIpIHtcbiAgICBlLmNsZWFyVGltZW91dChuKSwgbiA9IGUuc2V0VGltZW91dCgoKSA9PiB0LmFwcGx5KHRoaXMsIHIpLCBvKTtcbiAgfTtcbn0sIE5QID0gKGUpID0+IGUsIHliID0gKGUpID0+IHtcbiAgY29uc3QgdCA9IE1hdGgubWF4KGUuc3RhcnRJbmRleCAtIGUub3ZlcnNjYW4sIDApLCBvID0gTWF0aC5taW4oZS5lbmRJbmRleCArIGUub3ZlcnNjYW4sIGUuY291bnQgLSAxKSwgbiA9IFtdO1xuICBmb3IgKGxldCByID0gdDsgciA8PSBvOyByKyspXG4gICAgbi5wdXNoKHIpO1xuICByZXR1cm4gbjtcbn0sIFRQID0gKGUsIHQpID0+IHtcbiAgY29uc3QgbyA9IGUuc2Nyb2xsRWxlbWVudDtcbiAgaWYgKCFvKVxuICAgIHJldHVybjtcbiAgY29uc3QgbiA9IGUudGFyZ2V0V2luZG93O1xuICBpZiAoIW4pXG4gICAgcmV0dXJuO1xuICBjb25zdCByID0gKGEpID0+IHtcbiAgICBjb25zdCB7IHdpZHRoOiBzLCBoZWlnaHQ6IGwgfSA9IGE7XG4gICAgdCh7IHdpZHRoOiBNYXRoLnJvdW5kKHMpLCBoZWlnaHQ6IE1hdGgucm91bmQobCkgfSk7XG4gIH07XG4gIGlmIChyKG8uZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkpLCAhbi5SZXNpemVPYnNlcnZlcilcbiAgICByZXR1cm4gKCkgPT4ge1xuICAgIH07XG4gIGNvbnN0IGkgPSBuZXcgbi5SZXNpemVPYnNlcnZlcigoYSkgPT4ge1xuICAgIGNvbnN0IHMgPSBhWzBdO1xuICAgIGlmIChzICE9IG51bGwgJiYgcy5ib3JkZXJCb3hTaXplKSB7XG4gICAgICBjb25zdCBsID0gcy5ib3JkZXJCb3hTaXplWzBdO1xuICAgICAgaWYgKGwpIHtcbiAgICAgICAgcih7IHdpZHRoOiBsLmlubGluZVNpemUsIGhlaWdodDogbC5ibG9ja1NpemUgfSk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICB9XG4gICAgcihvLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpKTtcbiAgfSk7XG4gIHJldHVybiBpLm9ic2VydmUobywgeyBib3g6IFwiYm9yZGVyLWJveFwiIH0pLCAoKSA9PiB7XG4gICAgaS51bm9ic2VydmUobyk7XG4gIH07XG59LCBiYyA9IHtcbiAgcGFzc2l2ZTogITBcbn0sIElQID0gdHlwZW9mIHdpbmRvdyA+IFwidVwiID8gITAgOiBcIm9uc2Nyb2xsZW5kXCIgaW4gd2luZG93LCBEUCA9IChlLCB0KSA9PiB7XG4gIGNvbnN0IG8gPSBlLnNjcm9sbEVsZW1lbnQ7XG4gIGlmICghbylcbiAgICByZXR1cm47XG4gIGNvbnN0IG4gPSBlLnRhcmdldFdpbmRvdztcbiAgaWYgKCFuKVxuICAgIHJldHVybjtcbiAgbGV0IHIgPSAwO1xuICBjb25zdCBpID0gZS5vcHRpb25zLnVzZVNjcm9sbGVuZEV2ZW50ICYmIElQID8gKCkgPT4ge1xuICB9IDoga1AoXG4gICAgbixcbiAgICAoKSA9PiB7XG4gICAgICB0KHIsICExKTtcbiAgICB9LFxuICAgIGUub3B0aW9ucy5pc1Njcm9sbGluZ1Jlc2V0RGVsYXlcbiAgKSwgYSA9IChwKSA9PiAoKSA9PiB7XG4gICAgY29uc3QgeyBob3Jpem9udGFsOiBkLCBpc1J0bDogYiB9ID0gZS5vcHRpb25zO1xuICAgIHIgPSBkID8gby5zY3JvbGxMZWZ0ICogKGIgJiYgLTEgfHwgMSkgOiBvLnNjcm9sbFRvcCwgaSgpLCB0KHIsIHApO1xuICB9LCBzID0gYSghMCksIGwgPSBhKCExKTtcbiAgcmV0dXJuIGwoKSwgby5hZGRFdmVudExpc3RlbmVyKFwic2Nyb2xsXCIsIHMsIGJjKSwgby5hZGRFdmVudExpc3RlbmVyKFwic2Nyb2xsZW5kXCIsIGwsIGJjKSwgKCkgPT4ge1xuICAgIG8ucmVtb3ZlRXZlbnRMaXN0ZW5lcihcInNjcm9sbFwiLCBzKSwgby5yZW1vdmVFdmVudExpc3RlbmVyKFwic2Nyb2xsZW5kXCIsIGwpO1xuICB9O1xufSwgSFAgPSAoZSwgdCwgbykgPT4ge1xuICBpZiAodCAhPSBudWxsICYmIHQuYm9yZGVyQm94U2l6ZSkge1xuICAgIGNvbnN0IG4gPSB0LmJvcmRlckJveFNpemVbMF07XG4gICAgaWYgKG4pXG4gICAgICByZXR1cm4gTWF0aC5yb3VuZChcbiAgICAgICAgbltvLm9wdGlvbnMuaG9yaXpvbnRhbCA/IFwiaW5saW5lU2l6ZVwiIDogXCJibG9ja1NpemVcIl1cbiAgICAgICk7XG4gIH1cbiAgcmV0dXJuIE1hdGgucm91bmQoXG4gICAgZS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKVtvLm9wdGlvbnMuaG9yaXpvbnRhbCA/IFwid2lkdGhcIiA6IFwiaGVpZ2h0XCJdXG4gICk7XG59LCBWUCA9IChlLCB7XG4gIGFkanVzdG1lbnRzOiB0ID0gMCxcbiAgYmVoYXZpb3I6IG9cbn0sIG4pID0+IHtcbiAgdmFyIHIsIGk7XG4gIGNvbnN0IGEgPSBlICsgdDtcbiAgKGkgPSAociA9IG4uc2Nyb2xsRWxlbWVudCkgPT0gbnVsbCA/IHZvaWQgMCA6IHIuc2Nyb2xsVG8pID09IG51bGwgfHwgaS5jYWxsKHIsIHtcbiAgICBbbi5vcHRpb25zLmhvcml6b250YWwgPyBcImxlZnRcIiA6IFwidG9wXCJdOiBhLFxuICAgIGJlaGF2aW9yOiBvXG4gIH0pO1xufTtcbmNsYXNzIFBQIHtcbiAgY29uc3RydWN0b3IodCkge1xuICAgIHRoaXMudW5zdWJzID0gW10sIHRoaXMuc2Nyb2xsRWxlbWVudCA9IG51bGwsIHRoaXMudGFyZ2V0V2luZG93ID0gbnVsbCwgdGhpcy5pc1Njcm9sbGluZyA9ICExLCB0aGlzLnNjcm9sbFRvSW5kZXhUaW1lb3V0SWQgPSBudWxsLCB0aGlzLm1lYXN1cmVtZW50c0NhY2hlID0gW10sIHRoaXMuaXRlbVNpemVDYWNoZSA9IC8qIEBfX1BVUkVfXyAqLyBuZXcgTWFwKCksIHRoaXMucGVuZGluZ01lYXN1cmVkQ2FjaGVJbmRleGVzID0gW10sIHRoaXMuc2Nyb2xsUmVjdCA9IG51bGwsIHRoaXMuc2Nyb2xsT2Zmc2V0ID0gbnVsbCwgdGhpcy5zY3JvbGxEaXJlY3Rpb24gPSBudWxsLCB0aGlzLnNjcm9sbEFkanVzdG1lbnRzID0gMCwgdGhpcy5lbGVtZW50c0NhY2hlID0gLyogQF9fUFVSRV9fICovIG5ldyBNYXAoKSwgdGhpcy5vYnNlcnZlciA9IC8qIEBfX1BVUkVfXyAqLyAoKCkgPT4ge1xuICAgICAgbGV0IG8gPSBudWxsO1xuICAgICAgY29uc3QgbiA9ICgpID0+IG8gfHwgKCF0aGlzLnRhcmdldFdpbmRvdyB8fCAhdGhpcy50YXJnZXRXaW5kb3cuUmVzaXplT2JzZXJ2ZXIgPyBudWxsIDogbyA9IG5ldyB0aGlzLnRhcmdldFdpbmRvdy5SZXNpemVPYnNlcnZlcigocikgPT4ge1xuICAgICAgICByLmZvckVhY2goKGkpID0+IHtcbiAgICAgICAgICB0aGlzLl9tZWFzdXJlRWxlbWVudChpLnRhcmdldCwgaSk7XG4gICAgICAgIH0pO1xuICAgICAgfSkpO1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgZGlzY29ubmVjdDogKCkgPT4ge1xuICAgICAgICAgIHZhciByO1xuICAgICAgICAgIChyID0gbigpKSA9PSBudWxsIHx8IHIuZGlzY29ubmVjdCgpLCBvID0gbnVsbDtcbiAgICAgICAgfSxcbiAgICAgICAgb2JzZXJ2ZTogKHIpID0+IHtcbiAgICAgICAgICB2YXIgaTtcbiAgICAgICAgICByZXR1cm4gKGkgPSBuKCkpID09IG51bGwgPyB2b2lkIDAgOiBpLm9ic2VydmUociwgeyBib3g6IFwiYm9yZGVyLWJveFwiIH0pO1xuICAgICAgICB9LFxuICAgICAgICB1bm9ic2VydmU6IChyKSA9PiB7XG4gICAgICAgICAgdmFyIGk7XG4gICAgICAgICAgcmV0dXJuIChpID0gbigpKSA9PSBudWxsID8gdm9pZCAwIDogaS51bm9ic2VydmUocik7XG4gICAgICAgIH1cbiAgICAgIH07XG4gICAgfSkoKSwgdGhpcy5yYW5nZSA9IG51bGwsIHRoaXMuc2V0T3B0aW9ucyA9IChvKSA9PiB7XG4gICAgICBPYmplY3QuZW50cmllcyhvKS5mb3JFYWNoKChbbiwgcl0pID0+IHtcbiAgICAgICAgdHlwZW9mIHIgPiBcInVcIiAmJiBkZWxldGUgb1tuXTtcbiAgICAgIH0pLCB0aGlzLm9wdGlvbnMgPSB7XG4gICAgICAgIGRlYnVnOiAhMSxcbiAgICAgICAgaW5pdGlhbE9mZnNldDogMCxcbiAgICAgICAgb3ZlcnNjYW46IDEsXG4gICAgICAgIHBhZGRpbmdTdGFydDogMCxcbiAgICAgICAgcGFkZGluZ0VuZDogMCxcbiAgICAgICAgc2Nyb2xsUGFkZGluZ1N0YXJ0OiAwLFxuICAgICAgICBzY3JvbGxQYWRkaW5nRW5kOiAwLFxuICAgICAgICBob3Jpem9udGFsOiAhMSxcbiAgICAgICAgZ2V0SXRlbUtleTogTlAsXG4gICAgICAgIHJhbmdlRXh0cmFjdG9yOiB5YixcbiAgICAgICAgb25DaGFuZ2U6ICgpID0+IHtcbiAgICAgICAgfSxcbiAgICAgICAgbWVhc3VyZUVsZW1lbnQ6IEhQLFxuICAgICAgICBpbml0aWFsUmVjdDogeyB3aWR0aDogMCwgaGVpZ2h0OiAwIH0sXG4gICAgICAgIHNjcm9sbE1hcmdpbjogMCxcbiAgICAgICAgZ2FwOiAwLFxuICAgICAgICBpbmRleEF0dHJpYnV0ZTogXCJkYXRhLWluZGV4XCIsXG4gICAgICAgIGluaXRpYWxNZWFzdXJlbWVudHNDYWNoZTogW10sXG4gICAgICAgIGxhbmVzOiAxLFxuICAgICAgICBpc1Njcm9sbGluZ1Jlc2V0RGVsYXk6IDE1MCxcbiAgICAgICAgZW5hYmxlZDogITAsXG4gICAgICAgIGlzUnRsOiAhMSxcbiAgICAgICAgdXNlU2Nyb2xsZW5kRXZlbnQ6ICEwLFxuICAgICAgICAuLi5vXG4gICAgICB9O1xuICAgIH0sIHRoaXMubm90aWZ5ID0gKG8pID0+IHtcbiAgICAgIHZhciBuLCByO1xuICAgICAgKHIgPSAobiA9IHRoaXMub3B0aW9ucykub25DaGFuZ2UpID09IG51bGwgfHwgci5jYWxsKG4sIHRoaXMsIG8pO1xuICAgIH0sIHRoaXMubWF5YmVOb3RpZnkgPSB4MyhcbiAgICAgICgpID0+ICh0aGlzLmNhbGN1bGF0ZVJhbmdlKCksIFtcbiAgICAgICAgdGhpcy5pc1Njcm9sbGluZyxcbiAgICAgICAgdGhpcy5yYW5nZSA/IHRoaXMucmFuZ2Uuc3RhcnRJbmRleCA6IG51bGwsXG4gICAgICAgIHRoaXMucmFuZ2UgPyB0aGlzLnJhbmdlLmVuZEluZGV4IDogbnVsbFxuICAgICAgXSksXG4gICAgICAobykgPT4ge1xuICAgICAgICB0aGlzLm5vdGlmeShvKTtcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGtleTogcHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiICYmIFwibWF5YmVOb3RpZnlcIixcbiAgICAgICAgZGVidWc6ICgpID0+IHRoaXMub3B0aW9ucy5kZWJ1ZyxcbiAgICAgICAgaW5pdGlhbERlcHM6IFtcbiAgICAgICAgICB0aGlzLmlzU2Nyb2xsaW5nLFxuICAgICAgICAgIHRoaXMucmFuZ2UgPyB0aGlzLnJhbmdlLnN0YXJ0SW5kZXggOiBudWxsLFxuICAgICAgICAgIHRoaXMucmFuZ2UgPyB0aGlzLnJhbmdlLmVuZEluZGV4IDogbnVsbFxuICAgICAgICBdXG4gICAgICB9XG4gICAgKSwgdGhpcy5jbGVhbnVwID0gKCkgPT4ge1xuICAgICAgdGhpcy51bnN1YnMuZmlsdGVyKEJvb2xlYW4pLmZvckVhY2goKG8pID0+IG8oKSksIHRoaXMudW5zdWJzID0gW10sIHRoaXMub2JzZXJ2ZXIuZGlzY29ubmVjdCgpLCB0aGlzLnNjcm9sbEVsZW1lbnQgPSBudWxsLCB0aGlzLnRhcmdldFdpbmRvdyA9IG51bGw7XG4gICAgfSwgdGhpcy5fZGlkTW91bnQgPSAoKSA9PiAoKSA9PiB7XG4gICAgICB0aGlzLmNsZWFudXAoKTtcbiAgICB9LCB0aGlzLl93aWxsVXBkYXRlID0gKCkgPT4ge1xuICAgICAgdmFyIG87XG4gICAgICBjb25zdCBuID0gdGhpcy5vcHRpb25zLmVuYWJsZWQgPyB0aGlzLm9wdGlvbnMuZ2V0U2Nyb2xsRWxlbWVudCgpIDogbnVsbDtcbiAgICAgIGlmICh0aGlzLnNjcm9sbEVsZW1lbnQgIT09IG4pIHtcbiAgICAgICAgaWYgKHRoaXMuY2xlYW51cCgpLCAhbikge1xuICAgICAgICAgIHRoaXMubWF5YmVOb3RpZnkoKTtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5zY3JvbGxFbGVtZW50ID0gbiwgdGhpcy5zY3JvbGxFbGVtZW50ICYmIFwib3duZXJEb2N1bWVudFwiIGluIHRoaXMuc2Nyb2xsRWxlbWVudCA/IHRoaXMudGFyZ2V0V2luZG93ID0gdGhpcy5zY3JvbGxFbGVtZW50Lm93bmVyRG9jdW1lbnQuZGVmYXVsdFZpZXcgOiB0aGlzLnRhcmdldFdpbmRvdyA9ICgobyA9IHRoaXMuc2Nyb2xsRWxlbWVudCkgPT0gbnVsbCA/IHZvaWQgMCA6IG8ud2luZG93KSA/PyBudWxsLCB0aGlzLmVsZW1lbnRzQ2FjaGUuZm9yRWFjaCgocikgPT4ge1xuICAgICAgICAgIHRoaXMub2JzZXJ2ZXIub2JzZXJ2ZShyKTtcbiAgICAgICAgfSksIHRoaXMuX3Njcm9sbFRvT2Zmc2V0KHRoaXMuZ2V0U2Nyb2xsT2Zmc2V0KCksIHtcbiAgICAgICAgICBhZGp1c3RtZW50czogdm9pZCAwLFxuICAgICAgICAgIGJlaGF2aW9yOiB2b2lkIDBcbiAgICAgICAgfSksIHRoaXMudW5zdWJzLnB1c2goXG4gICAgICAgICAgdGhpcy5vcHRpb25zLm9ic2VydmVFbGVtZW50UmVjdCh0aGlzLCAocikgPT4ge1xuICAgICAgICAgICAgdGhpcy5zY3JvbGxSZWN0ID0gciwgdGhpcy5tYXliZU5vdGlmeSgpO1xuICAgICAgICAgIH0pXG4gICAgICAgICksIHRoaXMudW5zdWJzLnB1c2goXG4gICAgICAgICAgdGhpcy5vcHRpb25zLm9ic2VydmVFbGVtZW50T2Zmc2V0KHRoaXMsIChyLCBpKSA9PiB7XG4gICAgICAgICAgICB0aGlzLnNjcm9sbEFkanVzdG1lbnRzID0gMCwgdGhpcy5zY3JvbGxEaXJlY3Rpb24gPSBpID8gdGhpcy5nZXRTY3JvbGxPZmZzZXQoKSA8IHIgPyBcImZvcndhcmRcIiA6IFwiYmFja3dhcmRcIiA6IG51bGwsIHRoaXMuc2Nyb2xsT2Zmc2V0ID0gciwgdGhpcy5pc1Njcm9sbGluZyA9IGksIHRoaXMubWF5YmVOb3RpZnkoKTtcbiAgICAgICAgICB9KVxuICAgICAgICApO1xuICAgICAgfVxuICAgIH0sIHRoaXMuZ2V0U2l6ZSA9ICgpID0+IHRoaXMub3B0aW9ucy5lbmFibGVkID8gKHRoaXMuc2Nyb2xsUmVjdCA9IHRoaXMuc2Nyb2xsUmVjdCA/PyB0aGlzLm9wdGlvbnMuaW5pdGlhbFJlY3QsIHRoaXMuc2Nyb2xsUmVjdFt0aGlzLm9wdGlvbnMuaG9yaXpvbnRhbCA/IFwid2lkdGhcIiA6IFwiaGVpZ2h0XCJdKSA6ICh0aGlzLnNjcm9sbFJlY3QgPSBudWxsLCAwKSwgdGhpcy5nZXRTY3JvbGxPZmZzZXQgPSAoKSA9PiB0aGlzLm9wdGlvbnMuZW5hYmxlZCA/ICh0aGlzLnNjcm9sbE9mZnNldCA9IHRoaXMuc2Nyb2xsT2Zmc2V0ID8/ICh0eXBlb2YgdGhpcy5vcHRpb25zLmluaXRpYWxPZmZzZXQgPT0gXCJmdW5jdGlvblwiID8gdGhpcy5vcHRpb25zLmluaXRpYWxPZmZzZXQoKSA6IHRoaXMub3B0aW9ucy5pbml0aWFsT2Zmc2V0KSwgdGhpcy5zY3JvbGxPZmZzZXQpIDogKHRoaXMuc2Nyb2xsT2Zmc2V0ID0gbnVsbCwgMCksIHRoaXMuZ2V0RnVydGhlc3RNZWFzdXJlbWVudCA9IChvLCBuKSA9PiB7XG4gICAgICBjb25zdCByID0gLyogQF9fUFVSRV9fICovIG5ldyBNYXAoKSwgaSA9IC8qIEBfX1BVUkVfXyAqLyBuZXcgTWFwKCk7XG4gICAgICBmb3IgKGxldCBhID0gbiAtIDE7IGEgPj0gMDsgYS0tKSB7XG4gICAgICAgIGNvbnN0IHMgPSBvW2FdO1xuICAgICAgICBpZiAoci5oYXMocy5sYW5lKSlcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgY29uc3QgbCA9IGkuZ2V0KFxuICAgICAgICAgIHMubGFuZVxuICAgICAgICApO1xuICAgICAgICBpZiAobCA9PSBudWxsIHx8IHMuZW5kID4gbC5lbmQgPyBpLnNldChzLmxhbmUsIHMpIDogcy5lbmQgPCBsLmVuZCAmJiByLnNldChzLmxhbmUsICEwKSwgci5zaXplID09PSB0aGlzLm9wdGlvbnMubGFuZXMpXG4gICAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgICByZXR1cm4gaS5zaXplID09PSB0aGlzLm9wdGlvbnMubGFuZXMgPyBBcnJheS5mcm9tKGkudmFsdWVzKCkpLnNvcnQoKGEsIHMpID0+IGEuZW5kID09PSBzLmVuZCA/IGEuaW5kZXggLSBzLmluZGV4IDogYS5lbmQgLSBzLmVuZClbMF0gOiB2b2lkIDA7XG4gICAgfSwgdGhpcy5nZXRNZWFzdXJlbWVudE9wdGlvbnMgPSB4MyhcbiAgICAgICgpID0+IFtcbiAgICAgICAgdGhpcy5vcHRpb25zLmNvdW50LFxuICAgICAgICB0aGlzLm9wdGlvbnMucGFkZGluZ1N0YXJ0LFxuICAgICAgICB0aGlzLm9wdGlvbnMuc2Nyb2xsTWFyZ2luLFxuICAgICAgICB0aGlzLm9wdGlvbnMuZ2V0SXRlbUtleSxcbiAgICAgICAgdGhpcy5vcHRpb25zLmVuYWJsZWRcbiAgICAgIF0sXG4gICAgICAobywgbiwgciwgaSwgYSkgPT4gKHRoaXMucGVuZGluZ01lYXN1cmVkQ2FjaGVJbmRleGVzID0gW10sIHtcbiAgICAgICAgY291bnQ6IG8sXG4gICAgICAgIHBhZGRpbmdTdGFydDogbixcbiAgICAgICAgc2Nyb2xsTWFyZ2luOiByLFxuICAgICAgICBnZXRJdGVtS2V5OiBpLFxuICAgICAgICBlbmFibGVkOiBhXG4gICAgICB9KSxcbiAgICAgIHtcbiAgICAgICAga2V5OiAhMVxuICAgICAgfVxuICAgICksIHRoaXMuZ2V0TWVhc3VyZW1lbnRzID0geDMoXG4gICAgICAoKSA9PiBbdGhpcy5nZXRNZWFzdXJlbWVudE9wdGlvbnMoKSwgdGhpcy5pdGVtU2l6ZUNhY2hlXSxcbiAgICAgICh7IGNvdW50OiBvLCBwYWRkaW5nU3RhcnQ6IG4sIHNjcm9sbE1hcmdpbjogciwgZ2V0SXRlbUtleTogaSwgZW5hYmxlZDogYSB9LCBzKSA9PiB7XG4gICAgICAgIGlmICghYSlcbiAgICAgICAgICByZXR1cm4gdGhpcy5tZWFzdXJlbWVudHNDYWNoZSA9IFtdLCB0aGlzLml0ZW1TaXplQ2FjaGUuY2xlYXIoKSwgW107XG4gICAgICAgIHRoaXMubWVhc3VyZW1lbnRzQ2FjaGUubGVuZ3RoID09PSAwICYmICh0aGlzLm1lYXN1cmVtZW50c0NhY2hlID0gdGhpcy5vcHRpb25zLmluaXRpYWxNZWFzdXJlbWVudHNDYWNoZSwgdGhpcy5tZWFzdXJlbWVudHNDYWNoZS5mb3JFYWNoKChkKSA9PiB7XG4gICAgICAgICAgdGhpcy5pdGVtU2l6ZUNhY2hlLnNldChkLmtleSwgZC5zaXplKTtcbiAgICAgICAgfSkpO1xuICAgICAgICBjb25zdCBsID0gdGhpcy5wZW5kaW5nTWVhc3VyZWRDYWNoZUluZGV4ZXMubGVuZ3RoID4gMCA/IE1hdGgubWluKC4uLnRoaXMucGVuZGluZ01lYXN1cmVkQ2FjaGVJbmRleGVzKSA6IDA7XG4gICAgICAgIHRoaXMucGVuZGluZ01lYXN1cmVkQ2FjaGVJbmRleGVzID0gW107XG4gICAgICAgIGNvbnN0IHAgPSB0aGlzLm1lYXN1cmVtZW50c0NhY2hlLnNsaWNlKDAsIGwpO1xuICAgICAgICBmb3IgKGxldCBkID0gbDsgZCA8IG87IGQrKykge1xuICAgICAgICAgIGNvbnN0IGIgPSBpKGQpLCBNID0gdGhpcy5vcHRpb25zLmxhbmVzID09PSAxID8gcFtkIC0gMV0gOiB0aGlzLmdldEZ1cnRoZXN0TWVhc3VyZW1lbnQocCwgZCksIHUgPSBNID8gTS5lbmQgKyB0aGlzLm9wdGlvbnMuZ2FwIDogbiArIHIsIEEgPSBzLmdldChiKSwgeiA9IHR5cGVvZiBBID09IFwibnVtYmVyXCIgPyBBIDogdGhpcy5vcHRpb25zLmVzdGltYXRlU2l6ZShkKSwgZiA9IHUgKyB6LCBPID0gTSA/IE0ubGFuZSA6IGQgJSB0aGlzLm9wdGlvbnMubGFuZXM7XG4gICAgICAgICAgcFtkXSA9IHtcbiAgICAgICAgICAgIGluZGV4OiBkLFxuICAgICAgICAgICAgc3RhcnQ6IHUsXG4gICAgICAgICAgICBzaXplOiB6LFxuICAgICAgICAgICAgZW5kOiBmLFxuICAgICAgICAgICAga2V5OiBiLFxuICAgICAgICAgICAgbGFuZTogT1xuICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXMubWVhc3VyZW1lbnRzQ2FjaGUgPSBwLCBwO1xuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAga2V5OiBwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIgJiYgXCJnZXRNZWFzdXJlbWVudHNcIixcbiAgICAgICAgZGVidWc6ICgpID0+IHRoaXMub3B0aW9ucy5kZWJ1Z1xuICAgICAgfVxuICAgICksIHRoaXMuY2FsY3VsYXRlUmFuZ2UgPSB4MyhcbiAgICAgICgpID0+IFt0aGlzLmdldE1lYXN1cmVtZW50cygpLCB0aGlzLmdldFNpemUoKSwgdGhpcy5nZXRTY3JvbGxPZmZzZXQoKV0sXG4gICAgICAobywgbiwgcikgPT4gdGhpcy5yYW5nZSA9IG8ubGVuZ3RoID4gMCAmJiBuID4gMCA/IEZQKHtcbiAgICAgICAgbWVhc3VyZW1lbnRzOiBvLFxuICAgICAgICBvdXRlclNpemU6IG4sXG4gICAgICAgIHNjcm9sbE9mZnNldDogclxuICAgICAgfSkgOiBudWxsLFxuICAgICAge1xuICAgICAgICBrZXk6IHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIiAmJiBcImNhbGN1bGF0ZVJhbmdlXCIsXG4gICAgICAgIGRlYnVnOiAoKSA9PiB0aGlzLm9wdGlvbnMuZGVidWdcbiAgICAgIH1cbiAgICApLCB0aGlzLmdldEluZGV4ZXMgPSB4MyhcbiAgICAgICgpID0+IFtcbiAgICAgICAgdGhpcy5vcHRpb25zLnJhbmdlRXh0cmFjdG9yLFxuICAgICAgICB0aGlzLmNhbGN1bGF0ZVJhbmdlKCksXG4gICAgICAgIHRoaXMub3B0aW9ucy5vdmVyc2NhbixcbiAgICAgICAgdGhpcy5vcHRpb25zLmNvdW50XG4gICAgICBdLFxuICAgICAgKG8sIG4sIHIsIGkpID0+IG4gPT09IG51bGwgPyBbXSA6IG8oe1xuICAgICAgICBzdGFydEluZGV4OiBuLnN0YXJ0SW5kZXgsXG4gICAgICAgIGVuZEluZGV4OiBuLmVuZEluZGV4LFxuICAgICAgICBvdmVyc2NhbjogcixcbiAgICAgICAgY291bnQ6IGlcbiAgICAgIH0pLFxuICAgICAge1xuICAgICAgICBrZXk6IHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIiAmJiBcImdldEluZGV4ZXNcIixcbiAgICAgICAgZGVidWc6ICgpID0+IHRoaXMub3B0aW9ucy5kZWJ1Z1xuICAgICAgfVxuICAgICksIHRoaXMuaW5kZXhGcm9tRWxlbWVudCA9IChvKSA9PiB7XG4gICAgICBjb25zdCBuID0gdGhpcy5vcHRpb25zLmluZGV4QXR0cmlidXRlLCByID0gby5nZXRBdHRyaWJ1dGUobik7XG4gICAgICByZXR1cm4gciA/IHBhcnNlSW50KHIsIDEwKSA6IChjb25zb2xlLndhcm4oXG4gICAgICAgIGBNaXNzaW5nIGF0dHJpYnV0ZSBuYW1lICcke259PXtpbmRleH0nIG9uIG1lYXN1cmVkIGVsZW1lbnQuYFxuICAgICAgKSwgLTEpO1xuICAgIH0sIHRoaXMuX21lYXN1cmVFbGVtZW50ID0gKG8sIG4pID0+IHtcbiAgICAgIGNvbnN0IHIgPSB0aGlzLmluZGV4RnJvbUVsZW1lbnQobyksIGkgPSB0aGlzLm1lYXN1cmVtZW50c0NhY2hlW3JdO1xuICAgICAgaWYgKCFpKVxuICAgICAgICByZXR1cm47XG4gICAgICBjb25zdCBhID0gaS5rZXksIHMgPSB0aGlzLmVsZW1lbnRzQ2FjaGUuZ2V0KGEpO1xuICAgICAgcyAhPT0gbyAmJiAocyAmJiB0aGlzLm9ic2VydmVyLnVub2JzZXJ2ZShzKSwgdGhpcy5vYnNlcnZlci5vYnNlcnZlKG8pLCB0aGlzLmVsZW1lbnRzQ2FjaGUuc2V0KGEsIG8pKSwgby5pc0Nvbm5lY3RlZCAmJiB0aGlzLnJlc2l6ZUl0ZW0ociwgdGhpcy5vcHRpb25zLm1lYXN1cmVFbGVtZW50KG8sIG4sIHRoaXMpKTtcbiAgICB9LCB0aGlzLnJlc2l6ZUl0ZW0gPSAobywgbikgPT4ge1xuICAgICAgY29uc3QgciA9IHRoaXMubWVhc3VyZW1lbnRzQ2FjaGVbb107XG4gICAgICBpZiAoIXIpXG4gICAgICAgIHJldHVybjtcbiAgICAgIGNvbnN0IGkgPSB0aGlzLml0ZW1TaXplQ2FjaGUuZ2V0KHIua2V5KSA/PyByLnNpemUsIGEgPSBuIC0gaTtcbiAgICAgIGEgIT09IDAgJiYgKCh0aGlzLnNob3VsZEFkanVzdFNjcm9sbFBvc2l0aW9uT25JdGVtU2l6ZUNoYW5nZSAhPT0gdm9pZCAwID8gdGhpcy5zaG91bGRBZGp1c3RTY3JvbGxQb3NpdGlvbk9uSXRlbVNpemVDaGFuZ2UociwgYSwgdGhpcykgOiByLnN0YXJ0IDwgdGhpcy5nZXRTY3JvbGxPZmZzZXQoKSArIHRoaXMuc2Nyb2xsQWRqdXN0bWVudHMpICYmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIgJiYgdGhpcy5vcHRpb25zLmRlYnVnICYmIGNvbnNvbGUuaW5mbyhcImNvcnJlY3Rpb25cIiwgYSksIHRoaXMuX3Njcm9sbFRvT2Zmc2V0KHRoaXMuZ2V0U2Nyb2xsT2Zmc2V0KCksIHtcbiAgICAgICAgYWRqdXN0bWVudHM6IHRoaXMuc2Nyb2xsQWRqdXN0bWVudHMgKz0gYSxcbiAgICAgICAgYmVoYXZpb3I6IHZvaWQgMFxuICAgICAgfSkpLCB0aGlzLnBlbmRpbmdNZWFzdXJlZENhY2hlSW5kZXhlcy5wdXNoKHIuaW5kZXgpLCB0aGlzLml0ZW1TaXplQ2FjaGUgPSBuZXcgTWFwKHRoaXMuaXRlbVNpemVDYWNoZS5zZXQoci5rZXksIG4pKSwgdGhpcy5ub3RpZnkoITEpKTtcbiAgICB9LCB0aGlzLm1lYXN1cmVFbGVtZW50ID0gKG8pID0+IHtcbiAgICAgIGlmICghbykge1xuICAgICAgICB0aGlzLmVsZW1lbnRzQ2FjaGUuZm9yRWFjaCgobiwgcikgPT4ge1xuICAgICAgICAgIG4uaXNDb25uZWN0ZWQgfHwgKHRoaXMub2JzZXJ2ZXIudW5vYnNlcnZlKG4pLCB0aGlzLmVsZW1lbnRzQ2FjaGUuZGVsZXRlKHIpKTtcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIHRoaXMuX21lYXN1cmVFbGVtZW50KG8sIHZvaWQgMCk7XG4gICAgfSwgdGhpcy5nZXRWaXJ0dWFsSXRlbXMgPSB4MyhcbiAgICAgICgpID0+IFt0aGlzLmdldEluZGV4ZXMoKSwgdGhpcy5nZXRNZWFzdXJlbWVudHMoKV0sXG4gICAgICAobywgbikgPT4ge1xuICAgICAgICBjb25zdCByID0gW107XG4gICAgICAgIGZvciAobGV0IGkgPSAwLCBhID0gby5sZW5ndGg7IGkgPCBhOyBpKyspIHtcbiAgICAgICAgICBjb25zdCBzID0gb1tpXSwgbCA9IG5bc107XG4gICAgICAgICAgci5wdXNoKGwpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiByO1xuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAga2V5OiBwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIgJiYgXCJnZXRWaXJ0dWFsSXRlbXNcIixcbiAgICAgICAgZGVidWc6ICgpID0+IHRoaXMub3B0aW9ucy5kZWJ1Z1xuICAgICAgfVxuICAgICksIHRoaXMuZ2V0VmlydHVhbEl0ZW1Gb3JPZmZzZXQgPSAobykgPT4ge1xuICAgICAgY29uc3QgbiA9IHRoaXMuZ2V0TWVhc3VyZW1lbnRzKCk7XG4gICAgICBpZiAobi5sZW5ndGggIT09IDApXG4gICAgICAgIHJldHVybiBnYShcbiAgICAgICAgICBuW3diKFxuICAgICAgICAgICAgMCxcbiAgICAgICAgICAgIG4ubGVuZ3RoIC0gMSxcbiAgICAgICAgICAgIChyKSA9PiBnYShuW3JdKS5zdGFydCxcbiAgICAgICAgICAgIG9cbiAgICAgICAgICApXVxuICAgICAgICApO1xuICAgIH0sIHRoaXMuZ2V0T2Zmc2V0Rm9yQWxpZ25tZW50ID0gKG8sIG4pID0+IHtcbiAgICAgIGNvbnN0IHIgPSB0aGlzLmdldFNpemUoKSwgaSA9IHRoaXMuZ2V0U2Nyb2xsT2Zmc2V0KCk7XG4gICAgICBuID09PSBcImF1dG9cIiAmJiAobyA8PSBpID8gbiA9IFwic3RhcnRcIiA6IG8gPj0gaSArIHIgPyBuID0gXCJlbmRcIiA6IG4gPSBcInN0YXJ0XCIpLCBuID09PSBcInN0YXJ0XCIgPyBvID0gbyA6IG4gPT09IFwiZW5kXCIgPyBvID0gbyAtIHIgOiBuID09PSBcImNlbnRlclwiICYmIChvID0gbyAtIHIgLyAyKTtcbiAgICAgIGNvbnN0IGEgPSB0aGlzLm9wdGlvbnMuaG9yaXpvbnRhbCA/IFwic2Nyb2xsV2lkdGhcIiA6IFwic2Nyb2xsSGVpZ2h0XCIsIGwgPSAodGhpcy5zY3JvbGxFbGVtZW50ID8gXCJkb2N1bWVudFwiIGluIHRoaXMuc2Nyb2xsRWxlbWVudCA/IHRoaXMuc2Nyb2xsRWxlbWVudC5kb2N1bWVudC5kb2N1bWVudEVsZW1lbnRbYV0gOiB0aGlzLnNjcm9sbEVsZW1lbnRbYV0gOiAwKSAtIHI7XG4gICAgICByZXR1cm4gTWF0aC5tYXgoTWF0aC5taW4obCwgbyksIDApO1xuICAgIH0sIHRoaXMuZ2V0T2Zmc2V0Rm9ySW5kZXggPSAobywgbiA9IFwiYXV0b1wiKSA9PiB7XG4gICAgICBvID0gTWF0aC5tYXgoMCwgTWF0aC5taW4obywgdGhpcy5vcHRpb25zLmNvdW50IC0gMSkpO1xuICAgICAgY29uc3QgciA9IHRoaXMubWVhc3VyZW1lbnRzQ2FjaGVbb107XG4gICAgICBpZiAoIXIpXG4gICAgICAgIHJldHVybjtcbiAgICAgIGNvbnN0IGkgPSB0aGlzLmdldFNpemUoKSwgYSA9IHRoaXMuZ2V0U2Nyb2xsT2Zmc2V0KCk7XG4gICAgICBpZiAobiA9PT0gXCJhdXRvXCIpXG4gICAgICAgIGlmIChyLmVuZCA+PSBhICsgaSAtIHRoaXMub3B0aW9ucy5zY3JvbGxQYWRkaW5nRW5kKVxuICAgICAgICAgIG4gPSBcImVuZFwiO1xuICAgICAgICBlbHNlIGlmIChyLnN0YXJ0IDw9IGEgKyB0aGlzLm9wdGlvbnMuc2Nyb2xsUGFkZGluZ1N0YXJ0KVxuICAgICAgICAgIG4gPSBcInN0YXJ0XCI7XG4gICAgICAgIGVsc2VcbiAgICAgICAgICByZXR1cm4gW2EsIG5dO1xuICAgICAgY29uc3QgcyA9IG4gPT09IFwiZW5kXCIgPyByLmVuZCArIHRoaXMub3B0aW9ucy5zY3JvbGxQYWRkaW5nRW5kIDogci5zdGFydCAtIHRoaXMub3B0aW9ucy5zY3JvbGxQYWRkaW5nU3RhcnQ7XG4gICAgICByZXR1cm4gW3RoaXMuZ2V0T2Zmc2V0Rm9yQWxpZ25tZW50KHMsIG4pLCBuXTtcbiAgICB9LCB0aGlzLmlzRHluYW1pY01vZGUgPSAoKSA9PiB0aGlzLmVsZW1lbnRzQ2FjaGUuc2l6ZSA+IDAsIHRoaXMuY2FuY2VsU2Nyb2xsVG9JbmRleCA9ICgpID0+IHtcbiAgICAgIHRoaXMuc2Nyb2xsVG9JbmRleFRpbWVvdXRJZCAhPT0gbnVsbCAmJiB0aGlzLnRhcmdldFdpbmRvdyAmJiAodGhpcy50YXJnZXRXaW5kb3cuY2xlYXJUaW1lb3V0KHRoaXMuc2Nyb2xsVG9JbmRleFRpbWVvdXRJZCksIHRoaXMuc2Nyb2xsVG9JbmRleFRpbWVvdXRJZCA9IG51bGwpO1xuICAgIH0sIHRoaXMuc2Nyb2xsVG9PZmZzZXQgPSAobywgeyBhbGlnbjogbiA9IFwic3RhcnRcIiwgYmVoYXZpb3I6IHIgfSA9IHt9KSA9PiB7XG4gICAgICB0aGlzLmNhbmNlbFNjcm9sbFRvSW5kZXgoKSwgciA9PT0gXCJzbW9vdGhcIiAmJiB0aGlzLmlzRHluYW1pY01vZGUoKSAmJiBjb25zb2xlLndhcm4oXG4gICAgICAgIFwiVGhlIGBzbW9vdGhgIHNjcm9sbCBiZWhhdmlvciBpcyBub3QgZnVsbHkgc3VwcG9ydGVkIHdpdGggZHluYW1pYyBzaXplLlwiXG4gICAgICApLCB0aGlzLl9zY3JvbGxUb09mZnNldCh0aGlzLmdldE9mZnNldEZvckFsaWdubWVudChvLCBuKSwge1xuICAgICAgICBhZGp1c3RtZW50czogdm9pZCAwLFxuICAgICAgICBiZWhhdmlvcjogclxuICAgICAgfSk7XG4gICAgfSwgdGhpcy5zY3JvbGxUb0luZGV4ID0gKG8sIHsgYWxpZ246IG4gPSBcImF1dG9cIiwgYmVoYXZpb3I6IHIgfSA9IHt9KSA9PiB7XG4gICAgICBvID0gTWF0aC5tYXgoMCwgTWF0aC5taW4obywgdGhpcy5vcHRpb25zLmNvdW50IC0gMSkpLCB0aGlzLmNhbmNlbFNjcm9sbFRvSW5kZXgoKSwgciA9PT0gXCJzbW9vdGhcIiAmJiB0aGlzLmlzRHluYW1pY01vZGUoKSAmJiBjb25zb2xlLndhcm4oXG4gICAgICAgIFwiVGhlIGBzbW9vdGhgIHNjcm9sbCBiZWhhdmlvciBpcyBub3QgZnVsbHkgc3VwcG9ydGVkIHdpdGggZHluYW1pYyBzaXplLlwiXG4gICAgICApO1xuICAgICAgY29uc3QgaSA9IHRoaXMuZ2V0T2Zmc2V0Rm9ySW5kZXgobywgbik7XG4gICAgICBpZiAoIWkpXG4gICAgICAgIHJldHVybjtcbiAgICAgIGNvbnN0IFthLCBzXSA9IGk7XG4gICAgICB0aGlzLl9zY3JvbGxUb09mZnNldChhLCB7IGFkanVzdG1lbnRzOiB2b2lkIDAsIGJlaGF2aW9yOiByIH0pLCByICE9PSBcInNtb290aFwiICYmIHRoaXMuaXNEeW5hbWljTW9kZSgpICYmIHRoaXMudGFyZ2V0V2luZG93ICYmICh0aGlzLnNjcm9sbFRvSW5kZXhUaW1lb3V0SWQgPSB0aGlzLnRhcmdldFdpbmRvdy5zZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgaWYgKHRoaXMuc2Nyb2xsVG9JbmRleFRpbWVvdXRJZCA9IG51bGwsIHRoaXMuZWxlbWVudHNDYWNoZS5oYXMoXG4gICAgICAgICAgdGhpcy5vcHRpb25zLmdldEl0ZW1LZXkobylcbiAgICAgICAgKSkge1xuICAgICAgICAgIGNvbnN0IFtwXSA9IGdhKFxuICAgICAgICAgICAgdGhpcy5nZXRPZmZzZXRGb3JJbmRleChvLCBzKVxuICAgICAgICAgICk7XG4gICAgICAgICAgRVAocCwgdGhpcy5nZXRTY3JvbGxPZmZzZXQoKSkgfHwgdGhpcy5zY3JvbGxUb0luZGV4KG8sIHsgYWxpZ246IHMsIGJlaGF2aW9yOiByIH0pO1xuICAgICAgICB9IGVsc2VcbiAgICAgICAgICB0aGlzLnNjcm9sbFRvSW5kZXgobywgeyBhbGlnbjogcywgYmVoYXZpb3I6IHIgfSk7XG4gICAgICB9KSk7XG4gICAgfSwgdGhpcy5zY3JvbGxCeSA9IChvLCB7IGJlaGF2aW9yOiBuIH0gPSB7fSkgPT4ge1xuICAgICAgdGhpcy5jYW5jZWxTY3JvbGxUb0luZGV4KCksIG4gPT09IFwic21vb3RoXCIgJiYgdGhpcy5pc0R5bmFtaWNNb2RlKCkgJiYgY29uc29sZS53YXJuKFxuICAgICAgICBcIlRoZSBgc21vb3RoYCBzY3JvbGwgYmVoYXZpb3IgaXMgbm90IGZ1bGx5IHN1cHBvcnRlZCB3aXRoIGR5bmFtaWMgc2l6ZS5cIlxuICAgICAgKSwgdGhpcy5fc2Nyb2xsVG9PZmZzZXQodGhpcy5nZXRTY3JvbGxPZmZzZXQoKSArIG8sIHtcbiAgICAgICAgYWRqdXN0bWVudHM6IHZvaWQgMCxcbiAgICAgICAgYmVoYXZpb3I6IG5cbiAgICAgIH0pO1xuICAgIH0sIHRoaXMuZ2V0VG90YWxTaXplID0gKCkgPT4ge1xuICAgICAgdmFyIG87XG4gICAgICBjb25zdCBuID0gdGhpcy5nZXRNZWFzdXJlbWVudHMoKTtcbiAgICAgIGxldCByO1xuICAgICAgcmV0dXJuIG4ubGVuZ3RoID09PSAwID8gciA9IHRoaXMub3B0aW9ucy5wYWRkaW5nU3RhcnQgOiByID0gdGhpcy5vcHRpb25zLmxhbmVzID09PSAxID8gKChvID0gbltuLmxlbmd0aCAtIDFdKSA9PSBudWxsID8gdm9pZCAwIDogby5lbmQpID8/IDAgOiBNYXRoLm1heChcbiAgICAgICAgLi4ubi5zbGljZSgtdGhpcy5vcHRpb25zLmxhbmVzKS5tYXAoKGkpID0+IGkuZW5kKVxuICAgICAgKSwgTWF0aC5tYXgoXG4gICAgICAgIHIgLSB0aGlzLm9wdGlvbnMuc2Nyb2xsTWFyZ2luICsgdGhpcy5vcHRpb25zLnBhZGRpbmdFbmQsXG4gICAgICAgIDBcbiAgICAgICk7XG4gICAgfSwgdGhpcy5fc2Nyb2xsVG9PZmZzZXQgPSAobywge1xuICAgICAgYWRqdXN0bWVudHM6IG4sXG4gICAgICBiZWhhdmlvcjogclxuICAgIH0pID0+IHtcbiAgICAgIHRoaXMub3B0aW9ucy5zY3JvbGxUb0ZuKG8sIHsgYmVoYXZpb3I6IHIsIGFkanVzdG1lbnRzOiBuIH0sIHRoaXMpO1xuICAgIH0sIHRoaXMubWVhc3VyZSA9ICgpID0+IHtcbiAgICAgIHRoaXMuaXRlbVNpemVDYWNoZSA9IC8qIEBfX1BVUkVfXyAqLyBuZXcgTWFwKCksIHRoaXMubm90aWZ5KCExKTtcbiAgICB9LCB0aGlzLnNldE9wdGlvbnModCk7XG4gIH1cbn1cbmNvbnN0IHdiID0gKGUsIHQsIG8sIG4pID0+IHtcbiAgZm9yICg7IGUgPD0gdDsgKSB7XG4gICAgY29uc3QgciA9IChlICsgdCkgLyAyIHwgMCwgaSA9IG8ocik7XG4gICAgaWYgKGkgPCBuKVxuICAgICAgZSA9IHIgKyAxO1xuICAgIGVsc2UgaWYgKGkgPiBuKVxuICAgICAgdCA9IHIgLSAxO1xuICAgIGVsc2VcbiAgICAgIHJldHVybiByO1xuICB9XG4gIHJldHVybiBlID4gMCA/IGUgLSAxIDogMDtcbn07XG5mdW5jdGlvbiBGUCh7XG4gIG1lYXN1cmVtZW50czogZSxcbiAgb3V0ZXJTaXplOiB0LFxuICBzY3JvbGxPZmZzZXQ6IG9cbn0pIHtcbiAgY29uc3QgbiA9IGUubGVuZ3RoIC0gMSwgaSA9IHdiKDAsIG4sIChzKSA9PiBlW3NdLnN0YXJ0LCBvKTtcbiAgbGV0IGEgPSBpO1xuICBmb3IgKDsgYSA8IG4gJiYgZVthXS5lbmQgPCBvICsgdDsgKVxuICAgIGErKztcbiAgcmV0dXJuIHsgc3RhcnRJbmRleDogaSwgZW5kSW5kZXg6IGEgfTtcbn1cbmNvbnN0IFhQID0gdHlwZW9mIGRvY3VtZW50IDwgXCJ1XCIgPyBjMC51c2VMYXlvdXRFZmZlY3QgOiBjMC51c2VFZmZlY3Q7XG5mdW5jdGlvbiBVUChlKSB7XG4gIGNvbnN0IHQgPSBjMC51c2VSZWR1Y2VyKCgpID0+ICh7fSksIHt9KVsxXSwgbyA9IHtcbiAgICAuLi5lLFxuICAgIG9uQ2hhbmdlOiAociwgaSkgPT4ge1xuICAgICAgdmFyIGE7XG4gICAgICBpID8gY0EodCkgOiB0KCksIChhID0gZS5vbkNoYW5nZSkgPT0gbnVsbCB8fCBhLmNhbGwoZSwgciwgaSk7XG4gICAgfVxuICB9LCBbbl0gPSBjMC51c2VTdGF0ZShcbiAgICAoKSA9PiBuZXcgUFAobylcbiAgKTtcbiAgcmV0dXJuIG4uc2V0T3B0aW9ucyhvKSwgYzAudXNlRWZmZWN0KCgpID0+IG4uX2RpZE1vdW50KCksIFtdKSwgWFAoKCkgPT4gbi5fd2lsbFVwZGF0ZSgpKSwgbjtcbn1cbmZ1bmN0aW9uIE1jKGUpIHtcbiAgcmV0dXJuIFVQKHtcbiAgICBvYnNlcnZlRWxlbWVudFJlY3Q6IFRQLFxuICAgIG9ic2VydmVFbGVtZW50T2Zmc2V0OiBEUCxcbiAgICBzY3JvbGxUb0ZuOiBWUCxcbiAgICAuLi5lXG4gIH0pO1xufVxuY29uc3QgTDUgPSAkLmRpdihcbiAgKHsgdGhlbWU6IGUgfSkgPT4gbzFgXG4gICAgcGFkZGluZzogJHtlLnNwYWNpbmdzLnNwNH0gMDtcbiAgICBjdXJzb3I6IGNvbC1yZXNpemU7XG4gIGBcbiksIFlQID0gJC5kaXYoXG4gICh7IHRoZW1lOiBlIH0pID0+IG8xYFxuICAgIHdpZHRoOiAxcHg7XG4gICAgaGVpZ2h0OiAycmVtO1xuICAgIGJhY2tncm91bmQtY29sb3I6ICR7ZS5jb2xvcnMuZGF0YVRhYmxlLmRhdGFUYWJsZUJvcmRlckNlbGx9O1xuICBgXG4pO1xuJC5kaXZgXG4gIHBhZGRpbmc6IDAgJHsoeyB0aGVtZTogZSB9KSA9PiBlLnNwYWNpbmdzLnNwMTZ9O1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAkeyh7IHRoZW1lOiBlIH0pID0+IGUuY29sb3JzLndoaXRlfTtcbmA7XG5jb25zdCBHUCA9ICh7IC4uLmUgfSkgPT4gLyogQF9fUFVSRV9fICovIGMoTDUsIHsgLi4uZSwgY2hpbGRyZW46IC8qIEBfX1BVUkVfXyAqLyBjKFlQLCB7fSkgfSksIFFQID0gbzFgXG4gICR7KHsgdGhlbWU6IGUgfSkgPT4gbzFgXG4gICAgZm9udC1mYW1pbHk6ICR7ZS5mb250RmFtaWx5LmJhc2V9O1xuICAgIGZvbnQtc2l6ZTogJHtlLnR5cG9ncmFwaHkudDEyfTtcbiAgICBmb250LXdlaWdodDogJHtlLmZvbnRXZWlnaHQucmVndWxhcn07XG4gICAgbGluZS1oZWlnaHQ6ICR7ZS5saW5lSGVpZ2h0LmxoMTh9O1xuICAgIGNvbG9yOiAke2UuY29sb3JzLmJsYWNrfTtcbiAgICAvL3VzZXItc2VsZWN0OiBub25lO1xuICBgfVxuYCwgWlAgPSAkLmRpdihcbiAgKHtcbiAgICB0aGVtZTogeyBjb2xvcnM6IGUsIEdMT0JBTF9JVEVNX0hFSUdIVF9DT05ERU5TRUQ6IHQsIHNwYWNpbmdzOiBvIH0sXG4gICAgdGFibGVSb3dDZWxsOiBuLFxuICAgIGxvYWRpbmc6IHJcbiAgfSkgPT4gbzFgXG4gICAgd2lkdGg6IDEwMCU7XG4gICAgaGVpZ2h0OiAke24gPyBcIjI0cHhcIiA6IHR9O1xuICAgIGJhY2tncm91bmQtY29sb3I6IHRyYW5zcGFyZW50O1xuICAgIGJveC1zaXppbmc6IGJvcmRlci1ib3g7XG4gICAgcGFkZGluZzogMnB4ICR7by5zcDR9O1xuICAgIGJvcmRlci1ib3R0b206ICR7biB8fCByID8gXCJub25lXCIgOiBgMXB4IHNvbGlkICR7ZS5kYXRhVGFibGUuZGF0YVRhYmxlQm9yZGVySGVhZGVyfWB9O1xuICAgICR7UVB9XG4gIGBcbiksIGpQID0gJC5kaXZgXG4gIGhlaWdodDogMTAwJTtcbiAgZGlzcGxheTogZmxleDtcbiAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XG4gIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG5gLCB4YiA9ICh7XG4gIGNoaWxkcmVuOiBlLFxuICB0YWJsZVJvd0NlbGw6IHQsXG4gIGxvYWRpbmc6IG8sXG4gIC4uLm5cbn0pID0+IC8qIEBfX1BVUkVfXyAqLyBjKFpQLCB7IHRhYmxlUm93Q2VsbDogdCwgbG9hZGluZzogbywgLi4ubiwgY2hpbGRyZW46IC8qIEBfX1BVUkVfXyAqLyBjKGpQLCB7IGNoaWxkcmVuOiBlIH0pIH0pLCBLUCA9ICQoeGIpKFxuICAoeyB0aGVtZTogeyB0cmFuc2l0aW9uczogZSwgc3BhY2luZ3M6IHQsIGNvbG9yczogbyB9LCBsb2FkaW5nOiBuIH0pID0+IG8xYFxuICAgIHBvc2l0aW9uOiAke24gPyBcInN0YXRpY1wiIDogXCJyZWxhdGl2ZVwifTtcbiAgICBwYWRkaW5nOiAwIDhweDtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAke24gPyBcInRyYW5zcGFyZW50XCIgOiBgJHtvLmRhdGFUYWJsZS5kYXRhVGFibGVCZ0hlYWRlcn1gfTtcbiAgICBib3JkZXItcmlnaHQ6ICR7biA/IFwibm9uZVwiIDogYDFweCBzb2xpZCAke28uZGF0YVRhYmxlLmRhdGFUYWJsZUJvcmRlckNlbGx9YH07XG4gICAgJjpob3ZlciB7XG4gICAgICAuaWNvbi1zeXN0ZW0ge1xuICAgICAgICBvcGFjaXR5OiAxO1xuICAgICAgICB0cmFuc2l0aW9uOiAke2UuYmFzZX07XG4gICAgICB9XG4gICAgfVxuXG4gICAgJHtuICYmIG8xYFxuICAgICAgJiAuc2tlbGV0b24tY29udGFpbmVyIHtcbiAgICAgICAgZGl2IHtcbiAgICAgICAgICBvcGFjaXR5OiAwO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgYH1cblxuICAgIC5pY29uLXN5c3RlbSB7XG4gICAgICB3aWR0aDogYXV0bztcbiAgICAgIG9wYWNpdHk6IDA7XG4gICAgICB0cmFuc2l0aW9uOiAke2UuYmFzZX07XG4gICAgfVxuXG4gICAgJHtSYn0ge1xuICAgICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgICAgdG9wOiAwO1xuICAgICAgcmlnaHQ6IDA7XG4gICAgICBib3R0b206IDA7XG4gICAgICBwb2ludGVyLWV2ZW50czogbm9uZTtcbiAgICB9XG5cbiAgICAke0w1fSB7XG4gICAgICBwb2ludGVyLWV2ZW50czogYWxsO1xuICAgICAgcGFkZGluZy1sZWZ0OiAke3Quc3AxNn07XG4gICAgfVxuXG4gICAgJHtXYn0ge1xuICAgICAgd2lkdGg6IDEwMCU7XG4gICAgICAvKiBwYWRkaW5nLXJpZ2h0OiAke3Quc3AyNH07ICovXG4gICAgfVxuXG4gICAgLyogJjpsYXN0LWNoaWxkIHtcbiAgICAgICR7TDV9IHtcbiAgICAgICAgZGlzcGxheTogbm9uZTtcbiAgICAgIH1cbiAgICB9ICovXG4gIGBcbiksIFdiID0gJC5kaXYoXG4gICh7IHRoZW1lOiB7IG1peGluczogZSwgdHlwb2dyYXBoeTogdCwgZm9udFdlaWdodDogbywgY29sb3JzOiBuIH0sIGZvbnRTaXplOiByIH0pID0+IG8xYFxuICAgICR7ZS5lbGxpcHNpc31cbiAgICBmb250LXNpemU6ICR7ciA9PT0gXCJ4c1wiID8gdC50MTAgOiBcIjExcHhcIn07XG4gICAgZm9udC13ZWlnaHQ6ICR7by5yZWd1bGFyfTtcbiAgICBjb2xvcjogJHtuLnRleHRJY29uLnRleHRQcmltYXJ5fTtcbiAgICB0ZXh0LWFsaWduOiBsZWZ0O1xuICBgXG4pLCBSYiA9ICQuZGl2YFxuICBkaXNwbGF5OiBmbGV4O1xuICBhbGlnbi1pdGVtczogY2VudGVyO1xuYDtcbiQuZGl2YFxuICB3aWR0aDogMTIwcHg7XG5gO1xuY29uc3QgSlAgPSAkLmRpdihcbiAgKHsgdGhlbWU6IHsgY29sb3JzOiBlIH0gfSkgPT4gbzFgXG4gICAgLmljb24tc3lzdGVtIHtcbiAgICAgIGNvbG9yOiAke2UudGV4dEljb24udGV4dFByaW1hcnl9O1xuICAgIH1cbiAgYFxuKSwgQWMgPSAoZSkgPT4ge1xuICBjb25zdCB7XG4gICAgZGl2aWRlclByb3BzOiB0LFxuICAgIHNvcnRDbGljazogbyxcbiAgICBjaGlsZHJlbjogbixcbiAgICBpc1NvcnRlZDogcixcbiAgICBoYXNTb3J0aW5nOiBpLFxuICAgIGxvYWRpbmc6IGEsXG4gICAgZm9udFNpemU6IHMsXG4gICAgcmVuZGVyU29ydEljb246IGwsXG4gICAgLi4ucFxuICB9ID0gZTtcbiAgcmV0dXJuIC8qIEBfX1BVUkVfXyAqLyBlMShLUCwgeyBmb3J3YXJkZWRBczogXCJ0aFwiLCBsb2FkaW5nOiBhLCAuLi5wLCBjaGlsZHJlbjogW1xuICAgIC8qIEBfX1BVUkVfXyAqLyBjKFdiLCB7IGZvbnRTaXplOiBzLCAuLi5vLCBjaGlsZHJlbjogbiB9KSxcbiAgICAvKiBAX19QVVJFX18gKi8gZTEoUmIsIHsgY2hpbGRyZW46IFtcbiAgICAgIGkgJiYgbCAmJiAvKiBAX19QVVJFX18gKi8gYyhKUCwgeyBjaGlsZHJlbjogLyogQF9fUFVSRV9fICovIGMoWjEsIHsgbmFtZTogciA/IFwiQXJyb3dCb3R0b21cIiA6IFwiQXJyb3dVcFwiLCBzaXplOiBcInh4c1wiIH0pIH0pLFxuICAgICAgLyogQF9fUFVSRV9fICovIGMoR1AsIHsgLi4udCB9KVxuICAgIF0gfSlcbiAgXSB9KTtcbn0sIEJiID0gJCh4YilgXG4gIHBhZGRpbmc6IDAgOHB4O1xuYCwgX1AgPSAkLmRpdihcbiAgKHsgdGhlbWU6IHsgbWl4aW5zOiBlLCB0eXBvZ3JhcGh5OiB0LCBmb250V2VpZ2h0OiBvLCBjb2xvcnM6IG4gfSwgZm9udFNpemU6IHIgfSkgPT4gbzFgXG4gICAgJHtlLmVsbGlwc2lzfVxuICAgIGZvbnQtc2l6ZTogJHtyID09PSBcInhzXCIgPyB0LnQxMCA6IFwiMTFweFwifTtcbiAgICBmb250LXdlaWdodDogJHtvLmxpZ2h0fTtcbiAgICBjb2xvcjogJHtuLnRleHRJY29uLnRleHRCb2R5fTtcbiAgYFxuKSwgdWMgPSAoe1xuICBjaGlsZHJlbjogZSxcbiAgc3R5bGU6IHQsXG4gIGZvbnRTaXplOiBvLFxuICAuLi5uXG59KSA9PiAvKiBAX19QVVJFX18gKi8gYyhCYiwgeyBmb3J3YXJkZWRBczogXCJ0ZFwiLCB0YWJsZVJvd0NlbGw6ICEwLCBzdHlsZTogdCwgLi4ubiwgY2hpbGRyZW46IC8qIEBfX1BVUkVfXyAqLyBlMShfUCwgeyBmb250U2l6ZTogbywgY2hpbGRyZW46IFtcbiAgZSxcbiAgXCIgXCJcbl0gfSkgfSksIHpjID0gXCJkYXRhOmltYWdlL3BuZztiYXNlNjQsaVZCT1J3MEtHZ29BQUFBTlNVaEVVZ0FBQUFNQUFBQUVDQVlBQUFCTExZVUhBQUFBQ1hCSVdYTUFBQXNUQUFBTEV3RUFtcHdZQUFBQUFYTlNSMElBcnM0YzZRQUFBQVJuUVUxQkFBQ3hqd3Y4WVFVQUFBQTRTVVJCVkhnQkZZb3hFUUF3Q0FOTEZTQ2hraXFwTGppbVdPektBb1FNU2U3dlpURUFOQ0lnN242ckNtUzZNMU41L2hneVpXYUg4eG9ZMGhHam5USDJZQUFBQUFCSlJVNUVya0pnZ2c9PVwiLCBoYyA9IFwiZGF0YTppbWFnZS9wbmc7YmFzZTY0LGlWQk9SdzBLR2dvQUFBQU5TVWhFVWdBQUFBTUFBQUFFQ0FZQUFBQkxMWVVIQUFBQUNYQklXWE1BQUFzVEFBQUxFd0VBbXB3WUFBQUFBWE5TUjBJQXJzNGM2UUFBQUFSblFVMUJBQUN4and2OFlRVUFBQUEvU1VSQlZIZ0JBVFFBeS84QW1KaVluNWVYbHlBQUFBQUFBWmlZbVA4QUFBRGcvLy8vZ1FJQUFBQUFBQUFBRUFJQ0F2QUVBQUFBc0FjSEIyRmhZV0h3em1JUHVIc2FKdThBQUFBQVNVVk9SSzVDWUlJPVwiLCBPYyA9IFwiZGF0YTppbWFnZS9wbmc7YmFzZTY0LGlWQk9SdzBLR2dvQUFBQU5TVWhFVWdBQUFBUUFBQUFEQ0FZQUFBQzA5SzdHQUFBQUNYQklXWE1BQUFzVEFBQUxFd0VBbXB3WUFBQUFBWE5TUjBJQXJzNGM2UUFBQUFSblFVMUJBQUN4and2OFlRVUFBQUErU1VSQlZIZ0JBVE1BelA4QUFBQUFBSmVYbDJDWm1abFFBQUFBQUFHWGw1Y2dBUUVCdndBQUFCQUhCd2NoQkFFQkFYOEFBQUFnQUFBQUFQcjYrcDhjdFF0aXF2bGdEQUFBQUFCSlJVNUVya0pnZ2c9PVwiLCBmYyA9IFwiZGF0YTppbWFnZS9wbmc7YmFzZTY0LGlWQk9SdzBLR2dvQUFBQU5TVWhFVWdBQUFBUUFBQUFEQ0FZQUFBQzA5SzdHQUFBQUNYQklXWE1BQUFzVEFBQUxFd0VBbXB3WUFBQUFBWE5TUjBJQXJzNGM2UUFBQUFSblFVMUJBQUN4and2OFlRVUFBQUE0U1VSQlZIZ0JKWWhSRFFBZ0NBV2YvbENQQ0JyRkZNQ2ZEYXhrQkJzZ3ltMjMzYTZvNmdMQVNHWWxvaDV4d3UzdTQyOHpZeEZwcnk4K3NnMXZRSUlaTXdBQUFBQkpSVTVFcmtKZ2dnPT1cIjtcbiQuZGl2KCgpID0+IG8xYFxuICAgIG1heC13aWR0aDogOTV2dztcbiAgICBtaW4td2lkdGg6IDk1dnc7XG4gIGApO1xuY29uc3QgJFAgPSAkLmRpdigoKSA9PiBvMWBgKSwgZUYgPSAkLmRpdigoeyB0aGVtZTogeyBjb2xvcnM6IGUsIGJvcmRlclJhZGl1czogdCB9LCBsb2FkaW5nOiBvLCAkaGlkZU92ZXJmbG93OiBuIH0pID0+IG8xYFxuICAgIGJvcmRlcjogJHtvID8gXCJ0cmFuc3BhcmVudFwiIDogYDFweCBzb2xpZCAke2UuYm9yZGVyLmJvcmRlclRlcnRpYXJ5fWB9O1xuICAgIG1heC1oZWlnaHQ6IDUwMHB4O1xuICAgIG1heC13aWR0aDogMTAwJTtcbiAgICBvdmVyZmxvdzogJHtvID8gXCJoaWRkZW5cIiA6IFwiYXV0b1wifTtcbiAgICBib3JkZXItdG9wLWxlZnQtcmFkaXVzOiAke3QuYmFzZX07XG4gICAgYm9yZGVyLXRvcC1yaWdodC1yYWRpdXM6ICR7dC5iYXNlfTtcbiAgICBwb3NpdGlvbjogcmVsYXRpdmU7XG5cbiAgICAke24gJiYgbzFgXG4gICAgICBvdmVyZmxvdzogaGlkZGVuO1xuICAgIGB9XG5cbiAgICAvKiBzdGlja3kgY29sdW1ucyAqL1xuICAgICAgLnN0aWNreSB7XG4gICAgICBwb3NpdGlvbjogc3RpY2t5O1xuICAgICAgbGVmdDogMDtcbiAgICAgIHotaW5kZXg6IDk7XG4gICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAke2UuZGF0YVRhYmxlLmRhdGFUYWJsZUJnRmlsdGVyfTtcbiAgICAgIHRoIHtcbiAgICAgICAgYmFja2dyb3VuZDogJHtlLmRhdGFUYWJsZS5kYXRhVGFibGVCZ0hlYWRlcn07XG4gICAgICB9XG4gICAgfVxuXG4gICAgLyogU2Nyb2xsYmFyICAqL1xuXG4gICAgJjo6LXdlYmtpdC1zY3JvbGxiYXIge1xuICAgICAgd2lkdGg6IDEycHg7XG4gICAgICBoZWlnaHQ6IDEycHg7XG4gICAgfVxuXG4gICAgJjo6LXdlYmtpdC1zY3JvbGxiYXItY29ybmVyIHtcbiAgICAgIGJvcmRlcjogMXB4IHNvbGlkICNlMWUzZTE7XG4gICAgfVxuXG4gICAgJjo6LXdlYmtpdC1zY3JvbGxiYXItYnV0dG9uOnN0YXJ0IHtcbiAgICAgIGRpc3BsYXk6IG5vbmU7XG4gICAgfVxuICAgICY6Oi13ZWJraXQtc2Nyb2xsYmFyLWJ1dHRvbjplbmQge1xuICAgICAgZGlzcGxheTogYmxvY2s7XG4gICAgfVxuXG4gICAgJjo6LXdlYmtpdC1zY3JvbGxiYXI6aG9yaXpvbnRhbDpjb3JuZXItcHJlc2VudCB7XG4gICAgICBib3JkZXItcmlnaHQtd2lkdGg6IDBweDtcbiAgICB9XG5cbiAgICAvKiAmOjotd2Via2l0LXNjcm9sbGJhci10aHVtYjpob3Jpem9udGFsIHtcbiAgICAgIGJhY2tncm91bmQtY29sb3I6ICR7ZS52ZXJ5TGlnaHRHcmV5fTtcbiAgICAgIGJvcmRlci1yYWRpdXM6ICR7dC5sZ307XG4gICAgICBtaW4td2lkdGg6IDIwcHg7XG4gICAgICBoZWlnaHQ6IDMwJTtcbiAgICB9ICovXG5cbiAgICAmOjotd2Via2l0LXNjcm9sbGJhci10aHVtYjpob3Jpem9udGFsIHtcbiAgICAgIGJhY2tncm91bmQtY29sb3I6ICR7ZS5zY3JvbGwuc2Nyb2xsQmdEZWZhdWx0fTtcbiAgICAgIGJhY2tncm91bmQtY2xpcDogY29udGVudC1ib3g7XG4gICAgICBib3JkZXI6IDJweCBzb2xpZCB0cmFuc3BhcmVudDtcbiAgICAgIGJveC1zaGFkb3c6IGluc2V0IDAgMCAwIDRweCAke2Uuc2Nyb2xsLnNjcm9sbEJnRGVmYXVsdH07XG4gICAgICBib3JkZXItcmFkaXVzOiAke3QubGd9O1xuICAgIH1cblxuICAgICY6Oi13ZWJraXQtc2Nyb2xsYmFyLXRyYWNrLXBpZWNlOmhvcml6b250YWw6c3RhcnQge1xuICAgICAgbWFyZ2luLWxlZnQ6IDBweDtcbiAgICB9XG4gICAgJjo6LXdlYmtpdC1zY3JvbGxiYXItdHJhY2stcGllY2U6aG9yaXpvbnRhbDplbmQge1xuICAgICAgbWFyZ2luLXJpZ2h0OiAwcHg7XG4gICAgfVxuXG4gICAgJjo6LXdlYmtpdC1zY3JvbGxiYXItdHJhY2stcGllY2U6aG9yaXpvbnRhbDpkZWNyZW1lbnQge1xuICAgICAgYmFja2dyb3VuZC1jb2xvcjogJHtlLnNjcm9sbC5zY3JvbGxCZ1ByaW1hcnl9O1xuICAgICAgYm9yZGVyLXRvcDogMXB4IHNvbGlkICR7ZS5ib3JkZXIuYm9yZGVyUHJpbWFyeX07XG4gICAgICBiYWNrZ3JvdW5kLWNsaXA6IGNvbnRlbnQtYm94O1xuICAgIH1cblxuICAgICY6Oi13ZWJraXQtc2Nyb2xsYmFyLXRyYWNrLXBpZWNlOmhvcml6b250YWw6aW5jcmVtZW50IHtcbiAgICAgIGJhY2tncm91bmQtY29sb3I6ICR7ZS5zY3JvbGwuc2Nyb2xsQmdQcmltYXJ5fTtcbiAgICAgIGJvcmRlci10b3A6IDFweCBzb2xpZCAke2UuYm9yZGVyLmJvcmRlclByaW1hcnl9O1xuICAgICAgYmFja2dyb3VuZC1jbGlwOiBjb250ZW50LWJveDtcbiAgICB9XG5cbiAgICAmOjotd2Via2l0LXNjcm9sbGJhci1idXR0b246aG9yaXpvbnRhbCB7XG4gICAgICBoZWlnaHQ6IDEycHg7XG4gICAgfVxuXG4gICAgJjo6LXdlYmtpdC1zY3JvbGxiYXItYnV0dG9uOmhvcml6b250YWw6ZGVjcmVtZW50IHtcbiAgICAgIGJhY2tncm91bmQtaW1hZ2U6IHVybCgke3pjfSk7XG4gICAgICBiYWNrZ3JvdW5kLXNpemU6IGluaGVyaXQ7XG4gICAgICBiYWNrZ3JvdW5kLXJlcGVhdDogbm8tcmVwZWF0O1xuICAgICAgYmFja2dyb3VuZC1wb3NpdGlvbjogNXB4IDNweCwgMCAwO1xuICAgICAgaGVpZ2h0OiAxNnB4O1xuICAgICAgYmFja2dyb3VuZC1jb2xvcjogJHtlLmJhY2tncm91bmRzLmJnUHJpbWFyeX07XG4gICAgICBib3JkZXI6IDFweCBzb2xpZCAke2UuYm9yZGVyLmJvcmRlclRlcnRpYXJ5fTtcbiAgICB9XG5cbiAgICAmOjotd2Via2l0LXNjcm9sbGJhci1idXR0b246aG9yaXpvbnRhbDpkZWNyZW1lbnQ6YWN0aXZlIHtcbiAgICAgIGJhY2tncm91bmQtaW1hZ2U6IHVybCgke3pjfSk7XG4gICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAke2UudmVyeUxpZ2h0R3JleX07XG4gICAgfVxuXG4gICAgJjo6LXdlYmtpdC1zY3JvbGxiYXItYnV0dG9uOmhvcml6b250YWw6aW5jcmVtZW50IHtcbiAgICAgIGJhY2tncm91bmQtaW1hZ2U6IHVybCgke2hjfSk7XG4gICAgICBiYWNrZ3JvdW5kLXJlcGVhdDogbm8tcmVwZWF0O1xuICAgICAgYmFja2dyb3VuZC1zaXplOiBpbmhlcml0O1xuICAgICAgYmFja2dyb3VuZC1wb3NpdGlvbjogNXB4IDNweCwgMCAwO1xuICAgICAgYmFja2dyb3VuZC1jb2xvcjogJHtlLmJhY2tncm91bmRzLmJnUHJpbWFyeX07XG4gICAgICBoZWlnaHQ6IDE0cHg7XG4gICAgICBib3JkZXI6IDFweCBzb2xpZCAke2UuYm9yZGVyLmJvcmRlclRlcnRpYXJ5fTtcbiAgICB9XG5cbiAgICAmOjotd2Via2l0LXNjcm9sbGJhci1idXR0b246aG9yaXpvbnRhbDppbmNyZW1lbnQ6YWN0aXZlIHtcbiAgICAgIGJhY2tncm91bmQtaW1hZ2U6IHVybCgke2hjfSk7XG4gICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAke2UudmVyeUxpZ2h0R3JleX07XG4gICAgfVxuXG4gICAgJjo6LXdlYmtpdC1zY3JvbGxiYXItYnV0dG9uOmhvcml6b250YWw6ZW5kOmluY3JlbWVudDpjb3JuZXItcHJlc2VudCB7XG4gICAgICBib3JkZXItcmlnaHQtd2lkdGg6IDA7XG4gICAgfVxuXG4gICAgJjo6LXdlYmtpdC1zY3JvbGxiYXI6dmVydGljYWw6Y29ybmVyLXByZXNlbnQge1xuICAgICAgYm9yZGVyLWJvdHRvbS13aWR0aDogMDtcbiAgICB9XG5cbiAgICAvKiAmOjotd2Via2l0LXNjcm9sbGJhci10aHVtYjp2ZXJ0aWNhbCB7XG4gICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAke2UudmVyeUxpZ2h0R3JleX07XG4gICAgICBib3JkZXItcmFkaXVzOiAke3QubGd9O1xuICAgICAgbWluLWhlaWdodDogMjBweDtcbiAgICB9ICovXG5cbiAgICAmOjotd2Via2l0LXNjcm9sbGJhci10aHVtYjp2ZXJ0aWNhbCB7XG4gICAgICBiYWNrZ3JvdW5kLWNvbG9yOiB0cmFuc3BhcmVudDtcbiAgICAgIGJhY2tncm91bmQtY2xpcDogY29udGVudC1ib3g7XG4gICAgICBib3JkZXI6IDJweCBzb2xpZCB0cmFuc3BhcmVudDtcbiAgICAgIGJveC1zaGFkb3c6IGluc2V0IDAgMCAwIDRweCAke2UudmVyeUxpZ2h0R3JleX07XG4gICAgICBib3JkZXItcmFkaXVzOiAke3QubGd9O1xuICAgIH1cblxuICAgICY6Oi13ZWJraXQtc2Nyb2xsYmFyLXRyYWNrLXBpZWNlOnZlcnRpY2FsOnN0YXJ0IHtcbiAgICAgIG1hcmdpbi10b3A6IDBweDtcbiAgICB9XG4gICAgJjo6LXdlYmtpdC1zY3JvbGxiYXItdHJhY2stcGllY2U6dmVydGljYWw6ZW5kIHtcbiAgICAgIG1hcmdpbi1ib3R0b206IDBweDtcbiAgICB9XG5cbiAgICAmOjotd2Via2l0LXNjcm9sbGJhci10cmFjay1waWVjZTp2ZXJ0aWNhbDpkZWNyZW1lbnQge1xuICAgICAgYmFja2dyb3VuZC1jb2xvcjogJHtlLndoaXRlfTtcbiAgICAgIGJvcmRlci1sZWZ0OiAxcHggc29saWQgI2YyZjJmMjtcbiAgICB9XG4gICAgJjo6LXdlYmtpdC1zY3JvbGxiYXItdHJhY2stcGllY2U6dmVydGljYWw6aW5jcmVtZW50IHtcbiAgICAgIGJhY2tncm91bmQtY29sb3I6ICR7ZS53aGl0ZX07XG4gICAgICBib3JkZXItbGVmdDogMXB4IHNvbGlkICNmMmYyZjI7XG4gICAgfVxuICAgICY6Oi13ZWJraXQtc2Nyb2xsYmFyLWJ1dHRvbjp2ZXJ0aWNhbCB7XG4gICAgICBoZWlnaHQ6IDEzcHg7XG4gICAgfVxuICAgICY6Oi13ZWJraXQtc2Nyb2xsYmFyLWJ1dHRvbjp2ZXJ0aWNhbDpkZWNyZW1lbnQge1xuICAgICAgYmFja2dyb3VuZC1pbWFnZTogdXJsKCR7T2N9KTtcbiAgICAgIGJhY2tncm91bmQtc2l6ZTogaW5oZXJpdDtcbiAgICAgIGJhY2tncm91bmQtcmVwZWF0OiBuby1yZXBlYXQ7XG4gICAgICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAzcHggM3B4LCAwIDA7XG4gICAgICBoZWlnaHQ6IDEzcHg7XG4gICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjZjhmOGY4O1xuICAgICAgYm9yZGVyOiAxcHggc29saWQgI2UxZTNlMTtcbiAgICB9XG4gICAgJjo6LXdlYmtpdC1zY3JvbGxiYXItYnV0dG9uOnZlcnRpY2FsOmRlY3JlbWVudDphY3RpdmUge1xuICAgICAgYmFja2dyb3VuZC1pbWFnZTogdXJsKCR7T2N9KTtcbiAgICAgIGJhY2tncm91bmQtY29sb3I6ICR7ZS52ZXJ5TGlnaHRHcmV5fTtcbiAgICB9XG4gICAgJjo6LXdlYmtpdC1zY3JvbGxiYXItYnV0dG9uOnZlcnRpY2FsOmluY3JlbWVudCB7XG4gICAgICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoJHtmY30pO1xuICAgICAgYmFja2dyb3VuZC1zaXplOiBpbmhlcml0O1xuICAgICAgYmFja2dyb3VuZC1yZXBlYXQ6IG5vLXJlcGVhdDtcbiAgICAgIGJhY2tncm91bmQtcG9zaXRpb246IDNweCAzcHgsIDAgMDtcbiAgICAgIGhlaWdodDogMTJweDtcbiAgICAgIGJhY2tncm91bmQtY29sb3I6ICNmOGY4Zjg7XG4gICAgICBib3JkZXI6IDFweCBzb2xpZCAjZTFlM2UxO1xuICAgIH1cbiAgICAmOjotd2Via2l0LXNjcm9sbGJhci1idXR0b246dmVydGljYWw6aW5jcmVtZW50OmFjdGl2ZSB7XG4gICAgICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoJHtmY30pO1xuICAgICAgYmFja2dyb3VuZC1jb2xvcjogJHtlLnZlcnlMaWdodEdyZXl9O1xuICAgIH1cbiAgICAmOjotd2Via2l0LXNjcm9sbGJhci1idXR0b246dmVydGljYWw6ZW5kOmluY3JlbWVudDpjb3JuZXItcHJlc2VudCB7XG4gICAgICBib3JkZXItYm90dG9tLXdpZHRoOiAwO1xuICAgICAgaGVpZ2h0OiAxMXB4O1xuICAgIH1cbiAgICAmOjotd2Via2l0LXNjcm9sbGJhcjpkaXNhYmxlZCB7XG4gICAgICAtd2Via2l0LWJvcmRlci1pbWFnZTogbm9uZTtcbiAgICAgIGRpc3BsYXk6IG5vbmU7XG4gICAgfVxuXG4gICAgLyogU2Nyb2xsYmFyICAqL1xuICBgKSwgdEYgPSAkLmRpdigoeyB0aGVtZTogeyBib3JkZXJSYWRpdXM6IGUgfSB9KSA9PiBvMWBcbiAgICB3aWR0aDogZml0LWNvbnRlbnQ7XG4gICAgYm9yZGVyLXJhZGl1czogJHtlLmJhc2V9O1xuICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgICBib3JkZXItc3BhY2luZzogMHB4O1xuXG4gICAgLnRhYmxlLXNjcm9sbC1jb250YWluZXIge1xuICAgICAgcGFkZGluZy1yaWdodDogMHB4O1xuICAgIH1cbiAgICB3aWR0aDogYXV0bztcbiAgYCksIG9GID0gJC5kaXZgXG4gIHdpZHRoOiAxMDAlO1xuICBwb3NpdGlvbjogc3RpY2t5O1xuICB0b3A6IDA7XG4gIHotaW5kZXg6IDE7XG4gIHRhYmxlLWxheW91dDogZml4ZWQ7XG5gLCByRiA9ICQuZGl2YFxuICAudGFibGUtc2Nyb2xsLWNvbnRhaW5lciB7XG4gICAgcGFkZGluZy1yaWdodDogMHB4ICFpbXBvcnRhbnQ7XG4gIH1cbmAsIG5GID0gJC5kaXZgXG4gIHdpZHRoOiAxMDAlO1xuICBwb3NpdGlvbjogc3RpY2t5O1xuICBib3R0b206IDA7XG4gIHotaW5kZXg6IDE7XG5gLCBnYyA9ICQuZGl2KFxuICAoeyB0aGVtZTogeyBjb2xvcnM6IGUgfSwgbG9hZGluZzogdCB9KSA9PiBvMWBcbiAgICBkaXNwbGF5OiBpbmxpbmUtZmxleDtcbiAgICB3aWR0aDogMTAwJTtcbiAgICBiYWNrZ3JvdW5kOiAke3QgPyBcInRyYW5zcGFyZW50XCIgOiBlLmRhdGFUYWJsZS5kYXRhVGFibGVCZ1ByaW1hcnl9O1xuICAgIGJvcmRlci10b3A6ICR7dCA/IFwidHJhbnNwYXJlbnRcIiA6IGAxcHggc29saWQgJHtlLmRhdGFUYWJsZS5kYXRhVGFibGVCb3JkZXJDZWxsfWB9O1xuICAgICY6Zmlyc3QtY2hpbGQge1xuICAgICAgYm9yZGVyLXRvcDogbm9uZTtcbiAgICB9XG4gICAgLnRhYmxlLWJvZHktY29sdW1uIHtcbiAgICAgIGJvcmRlci1yaWdodDogJHt0ID8gXCJ0cmFuc3BhcmVudFwiIDogYDFweCBzb2xpZCAke2UuZGF0YVRhYmxlLmRhdGFUYWJsZUJvcmRlckNlbGx9YH07XG4gICAgfVxuICAgICY6aG92ZXIge1xuICAgICAgJHshdCAmJiBvMWBcbiAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogJHtlLmJhY2tncm91bmRzLmJnSG92ZXJQcmltYXJ5fSAhaW1wb3J0YW50O1xuICAgICAgYH1cbiAgICB9XG4gIGBcbiksIGlGID0gJC5kaXYoXG4gICgpID0+IG8xYFxuICAgIGRpc3BsYXk6IGlubGluZS1mbGV4O1xuICAgIHdpZHRoOiAxMDAlO1xuICAgICR7QmJ9IHtcbiAgICAgIGJhY2tncm91bmQtY29sb3I6ICNmYmZiZmI7XG4gICAgfVxuICBgXG4pLCBhRiA9ICQuZGl2KFxuICAoeyB0aGVtZTogeyBjb2xvcnM6IGUgfSwgaXNMb2FkaW5nOiB0IH0pID0+IG8xYFxuICAgIGRpc3BsYXk6IGlubGluZS1mbGV4O1xuICAgIHdpZHRoOiAxMDAlO1xuICAgIGJhY2tncm91bmQ6ICR7dCA/IFwidHJhbnNwYXJlbnRcIiA6IGUuZGF0YVRhYmxlLmRhdGFUYWJsZUJnSGVhZGVyfTtcbiAgYFxuKSwgc0YgPSAkLmRpdihcbiAgKCkgPT4gbzFgXG4gICAgZGlzcGxheTogZmxleDtcbiAgICAmLmhlYWRlci1sYXN0LXJvdyB7XG4gICAgICBkaXNwbGF5OiBmbGV4O1xuICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbiAgICB9XG4gIGBcbik7XG4kLmRpdmBcbiAgZGlzcGxheTogZmxleDtcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAganVzdGlmeS1jb250ZW50OiBmbGV4LXN0YXJ0O1xuICBnYXA6IDRweDtcbmA7XG5jb25zdCBTYiA9ICQuZGl2YFxuICBkaXNwbGF5OiBmbGV4O1xuICBhbGlnbi1pdGVtczogY2VudGVyO1xuICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcbiAgbWluLWhlaWdodDogNDAwcHg7XG5cbiAgJHsoZSkgPT4gZS5maWx0ZXJTdGF0ZSAmJiBvMWBcbiAgICAgIHdpZHRoOiAxMDB2dztcbiAgICBgfVxuICAkeyhlKSA9PiAhZS5maWx0ZXJTdGF0ZSAmJiBvMWBcbiAgICAgIG1heC13aWR0aDogMTAwJTtcbiAgICBgfVxuYCwgRWIgPSAkLmRpdmBcbiAgZGlzcGxheTogZmxleDtcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XG4gIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG4gIHdpZHRoOiAyNjJweDtcbiAgdGV4dC1hbGlnbjogY2VudGVyO1xuYCwga2IgPSAkLmgxKFxuICAoeyB0aGVtZTogeyBjb2xvcnM6IGUsIHR5cG9ncmFwaHk6IHQsIGZvbnRXZWlnaHQ6IG8gfSB9KSA9PiBvMWBcbiAgICBmb250LXNpemU6ICR7dC50MTR9O1xuICAgIGZvbnQtd2VpZ2h0OiAke28ubWVkaXVtfTtcbiAgICBjb2xvcjogJHtlLnRleHRJY29uLnRleHRQcmltYXJ5fTtcbiAgICBtYXJnaW4tdG9wOiAyNHB4O1xuICBgXG4pLCBOYiA9ICQucChcbiAgKHsgdGhlbWU6IHsgY29sb3JzOiBlLCB0eXBvZ3JhcGh5OiB0LCBmb250V2VpZ2h0OiBvIH0gfSkgPT4gbzFgXG4gICAgZm9udC1zaXplOiAke3QudDEyfTtcbiAgICBmb250LXdlaWdodDogJHtvLnJlZ3VsYXJ9O1xuICAgIGNvbG9yOiAke2UudGV4dEljb24udGV4dExvd2VtcGhhc2lzfTtcbiAgICBtYXJnaW46IDA7XG4gICAgbGluZS1oZWlnaHQ6IDIwcHg7XG4gIGBcbiksIGNGID0gJC5kaXZgXG4gIG1hcmdpbi10b3A6IDEwcHg7XG5gLCBsRiA9ICQudGQoXG4gICh7IHRoZW1lOiB7IGNvbG9yczogZSB9IH0pID0+IG8xYFxuICAgIHBhZGRpbmc6IDAgMTBweDtcbiAgICBjb2xvcjogJHtlLnRleHRJY29uLnRleHRCb2R5fTtcbiAgYFxuKSwgcEYgPSAkLmRpdmBcbiAgZGlzcGxheTogZmxleDtcbmA7XG5mdW5jdGlvbiBkRih7XG4gIHZhbHVlOiBlLFxuICBvbkNoYW5nZTogdCxcbiAgZGVib3VuY2U6IG8gPSA1MDAsXG4gIGNvbHVtbkZpbHRlcnM6IG4sXG4gIC4uLnJcbn0pIHtcbiAgY29uc3QgW2ksIGFdID0gbTEudXNlU3RhdGUoZSk7XG4gIHJldHVybiBtMS51c2VFZmZlY3QoKCkgPT4ge1xuICAgIGEoZSk7XG4gIH0sIFtlXSksIG0xLnVzZUVmZmVjdCgoKSA9PiB7XG4gICAgbi5sZW5ndGggPT09IDAgPyBhKFwiXCIpIDogYShlKTtcbiAgfSwgW25dKSwgbTEudXNlRWZmZWN0KCgpID0+IHtcbiAgICBjb25zdCBsID0gc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICB0KGkpO1xuICAgIH0sIG8pO1xuICAgIHJldHVybiAoKSA9PiBjbGVhclRpbWVvdXQobCk7XG4gIH0sIFtpXSksIC8qIEBfX1BVUkVfXyAqLyBjKHMwLCB7IGNoaWxkcmVuOiAvKiBAX19QVVJFX18gKi8gYyhcbiAgICBZMixcbiAgICB7XG4gICAgICAuLi5yLFxuICAgICAgdmFsdWU6IGksXG4gICAgICBvbkNoYW5nZTogKGwpID0+IHtcbiAgICAgICAgdmFyIHA7XG4gICAgICAgIHJldHVybiBhKChwID0gbCA9PSBudWxsID8gdm9pZCAwIDogbC50YXJnZXQpID09IG51bGwgPyB2b2lkIDAgOiBwLnZhbHVlKTtcbiAgICAgIH0sXG4gICAgICBoYW5kbGVDbGVhckZuOiAoKSA9PiBhKFwiXCIpXG4gICAgfVxuICApIH0pO1xufVxuY29uc3QgYkYgPSAkLmRpdihcbiAgKHsgdGhlbWU6IHsgdHlwb2dyYXBoeTogZSwgZm9udFdlaWdodDogdCwgY29sb3JzOiBvIH0sIGZvbnRTaXplOiBuIH0pID0+IG8xYFxuICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgLmlucHV0LWNvbnRhaW5lciB7XG4gICAgICB3aWR0aDogMTAwJTtcbiAgICB9XG4gICAgJiBsYWJlbCB7XG4gICAgICBkaXNwbGF5OiBub25lO1xuICAgIH1cbiAgICAmIGlucHV0IHtcbiAgICAgIG1heC1oZWlnaHQ6IDIycHg7XG4gICAgICBwYWRkaW5nOiA1cHggOHB4O1xuICAgICAgYmFja2dyb3VuZC1jb2xvcjogJHtvLmRhdGFUYWJsZS5kYXRhVGFibGVCZ0ZpbHRlcn07XG4gICAgICB3aWR0aDogMTAwJTtcbiAgICAgIGZvbnQtc2l6ZTogJHtuID09PSBcInhzXCIgPyBlLnQxMCA6IFwiMTFweFwifTtcbiAgICAgIGZvbnQtd2VpZ2h0OiAke3QubGlnaHR9O1xuICAgICAgYm9yZGVyOiAxcHggc29saWQgJHtvLmJvcmRlci5ib3JkZXJUZXJ0aWFyeX07XG4gICAgfVxuXG4gICAgJiAuaW5wdXQtY2xlYXItYnRuIHtcbiAgICAgIHRvcDogMnB4O1xuICAgIH1cbiAgYFxuKSwgTUYgPSBvQShcbiAgKHtcbiAgICBjb2x1bW46IGUsXG4gICAgZm9udFNpemU6IHQsXG4gICAgY29sdW1uRmlsdGVyczogb1xuICB9KSA9PiB7XG4gICAgY29uc3QgbiA9IGUuZ2V0RmlsdGVyVmFsdWUoKTtcbiAgICByZXR1cm4gLyogQF9fUFVSRV9fICovIGMoYkYsIHsgZm9udFNpemU6IHQsIGNoaWxkcmVuOiAvKiBAX19QVVJFX18gKi8gYyhcbiAgICAgIGRGLFxuICAgICAge1xuICAgICAgICB2YWx1ZTogbiA/PyBcIlwiLFxuICAgICAgICBvbkNoYW5nZTogZS5zZXRGaWx0ZXJWYWx1ZSxcbiAgICAgICAgY29sdW1uRmlsdGVyczogb1xuICAgICAgfVxuICAgICkgfSk7XG4gIH1cbiksIEFGID0gKCkgPT4gLyogQF9fUFVSRV9fICovIGMoXCJzdmdcIiwgeyB2aWV3Qm94OiBcIjAgMCA0OCA0OFwiLCBmaWxsOiBcIm5vbmVcIiwgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiwgY2hpbGRyZW46IC8qIEBfX1BVUkVfXyAqLyBjKFxuICBcInBhdGhcIixcbiAge1xuICAgIGZpbGw6IFwiY3VycmVudENvbG9yXCIsXG4gICAgZmlsbFJ1bGU6IFwiZXZlbm9kZFwiLFxuICAgIGNsaXBSdWxlOiBcImV2ZW5vZGRcIixcbiAgICBkOiBcIk0yMy4zODQ3IDJIMjQuODI4MlYzOS43NDc1SDIzLjM4NDdWMlpNMCA3LjA1MjE5VjI4Ljk5MzRDMCAzMC4yMjA0IDEuMDEwNDUgMzEuMTU4NiAyLjE2NTI1IDMxLjE1ODZINC43NjM1N1YzOS4zODY2SDYuMDYyNzJMMTQuMDAyIDMxLjE1ODZIMjEuMDAyOVYyOS43MTUxSDEzLjQyNDZMNi4yMDcwNyAzNy4yMjEzVjI5LjcxNTFIMi4xNjUyNUMxLjczMjIgMjkuNzE1MSAxLjQ0MzUgMjkuMzU0MyAxLjQ0MzUgMjguOTkzNFY3LjA1MjE5QzEuNDQzNSA2LjYxOTE0IDEuODA0MzcgNi4zMzA0NCAyLjE2NTI1IDYuMzMwNDRIMjEuMDc1MVY0Ljg4Njk0SDIuMTY1MjVDMS4wMTA0NSA0LjgxNDc2IDAgNS44MjUyMSAwIDcuMDUyMTlaTTQ1LjkwMzMgMTAuOTQ5NkgyNi45OTM1VjEyLjM5MzFINDUuOTAzM0M0Ni4zMzY0IDEyLjM5MzEgNDYuNjI1MSAxMi43NTQgNDYuNjI1MSAxMy4xMTQ5VjM1LjA1NjFDNDYuNjI1MSAzNS40ODkxIDQ2LjI2NDIgMzUuNzc3OCA0NS45MDMzIDM1Ljc3NzhINDEuNzg5M1Y0My4yODRMMzQuNTcxOCAzNS43Nzc4SDI2Ljk5MzVWMzcuMjIxM0gzMy45OTQ0TDQxLjkzMzcgNDUuNDQ5M0g0My4yMzI4VjM3LjIyMTNINDUuODMxMUM0Ny4wNTgxIDM3LjIyMTMgNDcuOTk2NCAzNi4yMTA5IDQ3Ljk5NjQgMzUuMDU2MVYxMy4xMTQ5QzQ4LjA2ODUgMTEuOTYwMSA0Ny4wNTgxIDEwLjk0OTYgNDUuOTAzMyAxMC45NDk2Wk0xMC4xNzY3IDI0LjA4NTVMOC44MDUzNiAyMy42NTI1TDEyLjA1MzIgMTIuNjA5N0gxNC44NjgxTDE4LjE4ODEgMjMuNjUyNUwxNi44MTY4IDI0LjA4NTVMMTUuNTE3NiAxOS42ODI4SDExLjQ3NThMMTAuMTc2NyAyNC4wODU1Wk0xNS4wODQ2IDE4LjIzOTNMMTMuODU3NiAxNC4wNTMySDEzLjEzNTlMMTEuOTA4OSAxOC4yMzkzSDE1LjA4NDZaTTM3Ljk2NDEgMjAuOTgyQzM3Ljk2NDEgMTkuMjQ5OCAzNi41OTI3IDE3Ljg3ODUgMzQuODYwNSAxNy44Nzg1SDMxLjc1N1YyMi43MTQyVjI0LjE1NzdWMjguOTkzNEgzNC44NjA1QzM2LjU5MjcgMjguOTkzNCAzNy45NjQxIDI3LjYyMjEgMzcuOTY0MSAyNS44ODk5QzM3Ljk2NDEgMjQuODc5NSAzNy41MzEgMjQuMDEzNCAzNi44MDkyIDIzLjQzNkMzNy41MzEgMjIuODU4NiAzNy45NjQxIDIxLjk5MjUgMzcuOTY0MSAyMC45ODJaTTM2LjUyMDYgMjUuODE3N0MzNi41MjA2IDI2Ljc1NiAzNS43MjY2IDI3LjU0OTkgMzQuNzg4MyAyNy41NDk5SDMzLjEyODNWMjQuMTU3N0gzNC43ODgzQzM1Ljc5ODggMjQuMTU3NyAzNi41MjA2IDI0Ljg3OTUgMzYuNTIwNiAyNS44MTc3Wk0zMy4yMDA1IDIyLjcxNDJWMTkuMzIySDM0Ljg2MDVDMzUuNzk4OCAxOS4zMjIgMzYuNTkyNyAyMC4xMTU5IDM2LjU5MjcgMjEuMDU0MkMzNi41OTI3IDIxLjk5MjUgMzUuNzk4OCAyMi43ODY0IDM0Ljg2MDUgMjIuNzg2NEgzMy4yMDA1VjIyLjcxNDJaXCJcbiAgfVxuKSB9KSwgdUYgPSAoKSA9PiAvKiBAX19QVVJFX18gKi8gYyhcInN2Z1wiLCB7IHZpZXdCb3g6IFwiMCAwIDQ4IDQ4XCIsIGZpbGw6IFwibm9uZVwiLCB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLCBjaGlsZHJlbjogLyogQF9fUFVSRV9fICovIGMoXG4gIFwicGF0aFwiLFxuICB7XG4gICAgZmlsbDogXCJjdXJyZW50Q29sb3JcIixcbiAgICBmaWxsUnVsZTogXCJldmVub2RkXCIsXG4gICAgY2xpcFJ1bGU6IFwiZXZlbm9kZFwiLFxuICAgIGQ6IFwiTTAgMjMuMjk1M0MwIDM0LjUwNjEgOS4xNDkgNDMuNTkwNiAyMC4yOTUzIDQzLjU5MDZDMjEuNTE5NSA0My41OTA2IDIyLjgwODEgNDMuNDYxOCAyNC4wOTY3IDQzLjIwNDFMMjMuODM4OSA0MS45Nzk5QzIyLjkyNDggNDIuMTQxMiAyMS45MjA5IDQyLjI1NzcgMjAuOTM5NiA0Mi4yOTE4VjMyLjUyMkMyMS42MDU0IDMyLjU0NyAyMi4yNzEyIDMyLjYwNyAyMi45MzY5IDMyLjcwMjFMMjMuMTMwMiAzMS40MTM1QzIyLjQyODkgMzEuMzEzMyAyMS42ODg2IDMxLjI1MiAyMC45Mzk2IDMxLjIyOThWMjMuOTM5NkgyOS42MzYyQzI5LjYzMjYgMjQuNDkzOSAyOS42MTk3IDI1LjAzODkgMjkuNTczMiAyNS41NTA0TDMwLjg2MTggMjUuNjE0OEMzMC45MDgzIDI1LjA1NjQgMzAuOTIxMiAyNC40OTggMzAuOTI0OCAyMy45Mzk2SDQwLjU5MDZWMjMuMjk1M0M0MC41OTA2IDEyLjA4NDYgMzEuNTA2MSAzIDIwLjI5NTMgM0M5LjA4NDU3IDMgMCAxMi4xNDkgMCAyMy4yOTUzWk0xNS44NjEgNC44MDI2NUMxMi44ODgzIDUuNTEzNjcgMTAuMTc2NSA2LjkzMjM5IDcuOTE5MyA4Ljg3MDk2QzguODQ0NzcgMTAuMDMwNSAxMC4wNjMzIDExLjAyNDIgMTEuNDkxMSAxMS44MTczQzEyLjU3NDEgOC43NzEwOCAxNC4wODIzIDYuMzM1NTMgMTUuODYxIDQuODAyNjVaTTYuOTYyMjUgOS43NTA4NEMzLjU5NzI5IDEzLjA2MSAxLjQ0ODA4IDE3LjYxMTMgMS4yODg1OSAyMi42NTFIOS42Njk1MkM5LjcyNDU4IDE5LjE2NDUgMTAuMjI1MyAxNS45MTkxIDExLjA2OCAxMy4xMTA2QzkuNDIyOTcgMTIuMjI0NiA4LjAxNzIzIDExLjA5MTUgNi45NjIyNSA5Ljc1MDg0Wk05LjY2OTM5IDIzLjkzOTZIMS4zNTMwM0MxLjUxMTc0IDI4Ljk1NSAzLjYyNTMyIDMzLjQ4NTYgNi45NjE4IDM2Ljc5MTZDOC4wMjY0NiAzNS40ODEzIDkuNDE5ODkgMzQuMzU4NyAxMS4wNDMgMzMuNDcxOEMxMC4yMTMzIDMwLjY3MDYgOS43MjMyMSAyNy40MzA2IDkuNjY5MzkgMjMuOTM5NlpNNy45MDg2NyAzNy42Njg2QzEwLjEzNjMgMzkuNTk2MiAxMi44MTggNDEuMDE2MiAxNS43NzM0IDQxLjc0NjVDMTQuMDAzMiA0MC4yMDU2IDEyLjUxMzEgMzcuNzcyMiAxMS40NDc4IDM0LjcyNzNDMTAuMDM1IDM1LjUyMzIgOC44MjY4NiAzNi41MTQgNy45MDg2NyAzNy42Njg2Wk0xMC45NTgzIDIzLjkzOTZIMTkuNjUxVjMxLjIzQzE2Ljk3NzQgMzEuMzExMiAxNC40MzQxIDMxLjg5NjEgMTIuMjI3OSAzMi44ODQ0QzExLjQ2NzYgMzAuMjQzNSAxMS4wMTE2IDI3LjE5NTYgMTAuOTU4MyAyMy45Mzk2Wk0xOS42NTEgMjIuNjUxSDEwLjk1ODNDMTEuMDExOCAxOS4zODQ0IDExLjQ3MDYgMTYuMzI3MyAxMi4yMzU0IDEzLjY4MDRDMTQuNDQxNiAxNC42NTI4IDE2Ljk4ODEgMTUuMjE3OCAxOS42NTEgMTUuMjk2NVYyMi42NTFaTTIwLjkzOTYgMjIuNjUxSDI5LjYzMjNDMjkuNTc4OCAxOS4zNzk2IDI5LjExODcgMTYuMzE4MyAyOC4zNTE5IDEzLjY2ODdDMjYuMTU3MyAxNC42NDg3IDIzLjYyMzIgMTUuMjE3OSAyMC45Mzk2IDE1LjI5NjZWMjIuNjUxWk0zMC45MjEyIDIyLjY1MUgzOS4yMzc2QzM5LjA3ODIgMTcuNjEzOSAzNi45NDcgMTMuMDY1OSAzMy41ODU1IDkuNzU2MTVDMzIuNTIzNSAxMS4wODAxIDMxLjE0MzggMTIuMjAxMSAyOS41MzY1IDEzLjA4MTZDMzAuMzczIDE1Ljg5MTMgMzAuODY3MiAxOS4xNDQ1IDMwLjkyMTIgMjIuNjUxWk0zMi42NTExIDguODk1NDNDMzEuNzMxNSAxMC4wMDk3IDMwLjUyMTEgMTAuOTgxNCAyOS4xMDkgMTEuNzY3MkMyOC4wNDYxIDguNzY3MjIgMjYuNTY4OCA2LjM2ODgyIDI0LjgxNzIgNC44NDQxQzI3Ljc1OTEgNS41NzEwNyAzMC40Mjk2IDYuOTgxMzggMzIuNjUxMSA4Ljg5NTQzWk0xOS42NTEgNDIuMjU3NUMxNi43NDA1IDQxLjg1MzYgMTQuMTkzNCAzOC43MzQ0IDEyLjYyMDIgMzQuMTMyOEMxNC42OTU3IDMzLjE4ODYgMTcuMTEyMyAzMi42MjU2IDE5LjY1MSAzMi41MjM5VjQyLjI1NzVaTTE5LjY1MSAxMy45NDNDMTcuMTEwOCAxMy44NjM5IDE0LjcwNjIgMTMuMzE5IDEyLjY0MjQgMTIuMzkzMUMxNC4yMTc0IDcuODI2OTYgMTYuNzU0MiA0LjczNTA5IDE5LjY1MSA0LjMzMzE0VjEzLjk0M1pNMjAuOTM5NiAxMy45NDIzVjQuMzMzMTRDMjMuODI4NyA0LjczNDAyIDI2LjM1OTcgNy44MTA0OCAyNy45MzU2IDEyLjM1NjZDMjUuODYwOSAxMy4yOTM0IDIzLjQ1MjMgMTMuODU5MyAyMC45Mzk2IDEzLjk0MjNaTTQ3LjIyNjkgNDIuNDMxQzQ3LjE2MjQgNDIuNDMxIDQ3LjAzMzYgNDIuNDMxIDQ2Ljk2OTEgNDIuMzY2NUwzNC45Njc4IDM4LjI0M0gzNC4zOTM3TDMzLjE4MTIgNDEuMjA2OUgzMS42MzQ5VjQ1LjUyMzZIMjkuMDU3N0MyNy45NjI0IDQ1LjUyMzYgMjcuMTI0OCA0NC42MjE2IDI3LjEyNDggNDMuNTkwN1YzOC4yNDNIMjYuNzM4M0MyNS43MDc0IDM4LjI0MyAyNC44Njk4IDM3LjQwNTQgMjQuODY5OCAzNi4zNzQ1VjI5LjM1MTdDMjQuODY5OCAyOC4zMjA4IDI1LjcwNzQgMjcuNDgzMiAyNi43MzgzIDI3LjQ4MzJIMzQuOTY4MUw0Ni45NjkxIDIzLjM1OThDNDcuMjI2OSAyMy4yOTU0IDQ3LjQ4NDYgMjMuMjk1NCA0Ny42Nzc5IDIzLjQ4ODdDNDcuODcxMiAyMy42MTc1IDQ4IDIzLjg3NTIgNDggMjQuMTMzVjQxLjU5MzRDNDggNDEuODUxMSA0Ny44NzEyIDQyLjEwODggNDcuNjc3OSA0Mi4yMzc3QzQ3LjU0OSA0Mi4zNjY1IDQ3LjM1NTcgNDIuNDMxIDQ3LjIyNjkgNDIuNDMxWk0zMC4zNDYzIDM4LjMwNzRWNDEuMjA2OUgzMC40MTA4VjQ0LjI5OTRIMjkuMTIyMkMyOC43MzU2IDQ0LjI5OTQgMjguNDEzNCA0My45NzczIDI4LjQxMzQgNDMuNTkwN1YzOC4zMDc0SDMwLjM0NjNaTTMxLjYzNDkgMzkuOTE4M0gzMi4zNDM2TDMzLjA1MjQgMzguMjQzMUgzMS42MzQ5VjM5LjkxODNaTTM1LjYyOTUgMjguNTc4NlYzNy4xNDc3TDQ2LjcxMTQgNDAuOTQ5MVYyNC43NzczTDM1LjYyOTUgMjguNTc4NlpNMjYuMTU4NCAyOS4zNTE3QzI2LjE1ODQgMjkuMDI5NSAyNi40MTYxIDI4Ljc3MTggMjYuNzM4MyAyOC43NzE4SDM0LjM0MVYzNi45NTQ0SDI2LjczODNDMjYuNDE2MSAzNi45NTQ0IDI2LjE1ODQgMzYuNjk2NyAyNi4xNTg0IDM2LjM3NDVWMjkuMzUxN1pcIlxuICB9XG4pIH0pLCB6RiA9ICgpID0+IC8qIEBfX1BVUkVfXyAqLyBjKFwic3ZnXCIsIHsgdmlld0JveDogXCIwIDAgNDggNDhcIiwgZmlsbDogXCJub25lXCIsIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsIGNoaWxkcmVuOiAvKiBAX19QVVJFX18gKi8gYyhcbiAgXCJwYXRoXCIsXG4gIHtcbiAgICBmaWxsOiBcImN1cnJlbnRDb2xvclwiLFxuICAgIGZpbGxSdWxlOiBcImV2ZW5vZGRcIixcbiAgICBjbGlwUnVsZTogXCJldmVub2RkXCIsXG4gICAgZDogXCJNNDMuMDkxMyA0Ni41OTA1VjUuMjQ2MzRINDUuNzUzNlYwSDMuMDc4MjhWNS4yNDYzNEg1Ljc0MDYyVjQ2LjU5MDVIM1Y0OEg1Ljc0MDYySDQzLjA5MTNINDUuODMxOVY0Ni41OTA1SDQzLjA5MTNaTTcuMTUwMTIgMzcuMTE1OEg0MS42ODE5VjQyLjc1MzZINy4xNTAxMlYzNy4xMTU4Wk00LjQ4Nzc4IDEuMzMxMTdINDQuNDIyNVYzLjgzNjg2SDQuNDg3NzhWMS4zMzExN1pNNDEuNjgxOSA1LjI0NjM0VjM1LjcwNjNINy4xNTAxMlY1LjI0NjM0SDQxLjY4MTlaTTcuMTUwMTIgNDYuNTkwNVY0NC4wODQ4SDQxLjY4MTlWNDYuNTkwNUg3LjE1MDEyWk0xMS42MTM0IDkuODY2M0gyNC42OVYxOC42MzYzSDExLjYxMzRWOS44NjYzWk0xMy4wMjI5IDE3LjIyNjhIMjMuMjgwNlYxMS4xOTc1SDEzLjAyMjlWMTcuMjI2OFpNMTEuMzc4NCAyMS42MTE4SDEzLjMzNlYyMy4wMjEzSDExLjM3ODRWMjEuNjExOFpNMTcuMTcyOSAyMS42MTE4SDE1LjIxNTNWMjMuMDIxM0gxNy4xNzI5VjIxLjYxMThaTTE5LjEzMDUgMjEuNjExOEgyMS4wODgxVjIzLjAyMTNIMTkuMTMwNVYyMS42MTE4Wk0yNS4wMDMyIDIxLjYxMThIMjMuMDQ1NlYyMy4wMjEzSDI1LjAwMzJWMjEuNjExOFpNMTEuMzc4NCAyNS43NjE3SDEzLjMzNlYyNy4xNzEySDExLjM3ODRWMjUuNzYxN1pNMTcuMTcyOSAyNS43NjE3SDE1LjIxNTNWMjcuMTcxMkgxNy4xNzI5VjI1Ljc2MTdaTTE5LjEzMDUgMjUuNzYxN0gyMS4wODgxVjI3LjE3MTJIMTkuMTMwNVYyNS43NjE3Wk0yNS4wMDMyIDI1Ljc2MTdIMjMuMDQ1NlYyNy4xNzEySDI1LjAwMzJWMjUuNzYxN1pNMTEuMzc4NCAyOS44MzM3SDEzLjMzNlYzMS4yNDMxSDExLjM3ODRWMjkuODMzN1pNMTcuMTcyOSAyOS44MzM3SDE1LjIxNTNWMzEuMjQzMUgxNy4xNzI5VjI5LjgzMzdaTTE5LjEzMDUgMjkuODMzN0gyMS4wODgxVjMxLjI0MzFIMTkuMTMwNVYyOS44MzM3Wk0yNS4wMDMyIDI5LjgzMzdIMjMuMDQ1NlYzMS4yNDMxSDI1LjAwMzJWMjkuODMzN1pNMzYuOTA1NCAxOC42MzYzSDI5LjE1MzNWMTEuMjc1OEgyNy45MDA1VjkuODY2M0gyOS4xNTMzSDM2LjkwNTRIMzguMTU4MlYxMS4yNzU4SDM2LjkwNTRWMTguNjM2M1pNMzAuNTYyNyAxNC43OTk0VjE3LjIyNjhIMzUuNTc0MlYxNC43OTk0SDMwLjU2MjdaTTM1LjU3NDIgMTMuMzlWMTEuMTk3NUgzMC41NjI3VjEzLjM5SDM1LjU3NDJaTTM3Ljg0NSAyNy41NjI3SDM5LjE3NjFWMzEuMTY0N0gyNy4xOTU4VjI3LjU2MjdIMjguNTI2OVYyOS44MzM1SDM3Ljg0NVYyNy41NjI3WlwiXG4gIH1cbikgfSksIGhGID0gKCkgPT4gLyogQF9fUFVSRV9fICovIGMoXCJzdmdcIiwgeyB2aWV3Qm94OiBcIjAgMCA0OCA0OFwiLCBmaWxsOiBcIm5vbmVcIiwgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiwgY2hpbGRyZW46IC8qIEBfX1BVUkVfXyAqLyBjKFxuICBcInBhdGhcIixcbiAge1xuICAgIGZpbGw6IFwiY3VycmVudENvbG9yXCIsXG4gICAgZmlsbFJ1bGU6IFwiZXZlbm9kZFwiLFxuICAgIGNsaXBSdWxlOiBcImV2ZW5vZGRcIixcbiAgICBkOiBcIk0yMC41NzU3IDguMjgyMzdMMTAuNDQyOCA5LjM1NjM4QzEwLjE3OTUgOC41MzUxNiA5LjQxMzU4IDcuOTQ2ODUgOC41MDA2MSA3Ljk0Njg1QzcuMzY3MiA3Ljk0Njg1IDYuNDYwNDcgOC44NTM1NiA2LjQ2MDQ3IDkuOTg2OTdDNi40NjA0NyAxMC43NzU1IDYuODk5MzcgMTEuNDU0NCA3LjU0ODE1IDExLjc5NDVMNC4yNDU3MyAyMi41Njc5SDBWMjMuNzAxM0gxLjAwNjg1QzEuMDQxNzIgMjMuOTk0OSAxLjA5OTk4IDI0LjI4MTEgMS4xOTAwNSAyNC41NTEzQzIuMDQwMTEgMjcuMzI4MiA1LjA0MzY3IDI5LjMxMTYgOC40NDM5IDI5LjMxMTZDMTEuOTU3NSAyOS4zMTE2IDE1LjA3NDQgMjcuMTU4MiAxNS44MTExIDI0LjIxMTNDMTUuODU3MyAyNC4wNDk0IDE1Ljg5NDEgMjMuODc4MiAxNS45MjE1IDIzLjcwMTNIMTYuODMxMlYyMi41Njc5SDEyLjY0MjFMOS4zNTIxMiAxMS44MzQ5QzkuOTAxNTIgMTEuNTc0MyAxMC4zMTc1IDExLjA3NDMgMTAuNDczNiAxMC40OTI5TDIwLjcwMTEgOS40MDg4QzIwLjkxMjkgMTAuMTY1IDIxLjM3MjEgMTAuODExNyAyMS45ODgyIDExLjI1ODVWMzcuOTI1NkgxNC45MDQ0VjQwLjgxNThIOC40NDM5NFY0MS45NDkySDM5LjYxMjhWNDAuODE1OEgzMy4xNTI0VjM3LjkyNTZIMjYuMDY4NVYxMS4yNTg1QzI2LjY5ODQgMTAuODAxNyAyNy4xNjQyIDEwLjEzNjEgMjcuMzY5NCA5LjM1ODFMMzcuNjYwMSAxMC4zNDQ3QzM3Ljc3MDQgMTAuOTc3NyAzOC4xNjg3IDExLjUwNzEgMzguNzE3IDExLjc5NDVMMzUuNDE0NiAyMi41Njc5SDMxLjE2ODhWMjMuNzAxM0gzMi4xNzU3QzMyLjIxMDYgMjMuOTk0OSAzMi4yNjg4IDI0LjI4MTEgMzIuMzU4OSAyNC41NTEzQzMzLjIwOSAyNy4zMjgyIDM2LjIxMjUgMjkuMzExNiAzOS42MTI4IDI5LjMxMTZDNDMuMTI2MyAyOS4zMTE2IDQ2LjI0MzIgMjcuMTU4MiA0Ni45Nzk5IDI0LjIxMTNDNDcuMDI0IDI0LjAzNDkgNDcuMDU5NSAyMy44NjcyIDQ3LjA4NjUgMjMuNzAxM0g0OFYyMi41Njc5SDQzLjgxMUw0MC41MjEgMTEuODM0OUM0MS4yMjQ4IDExLjUwMTEgNDEuNzA5NiAxMC43NzQzIDQxLjcwOTYgOS45ODY5N0M0MS43MDk2IDguODUzNTYgNDAuODAyOSA3Ljk0Njg1IDM5LjY2OTUgNy45NDY4NUMzOC44MDg5IDcuOTQ2ODUgMzguMDc5IDguNDY5NiAzNy43Nzc0IDkuMjE3NDJMMjcuNDc4MiA4LjIyOTk1QzI3LjM2MzUgNi40MTEzMiAyNS44Nzg5IDUgMjQuMDI4NCA1QzIyLjE2MDEgNSAyMC42NjQ4IDYuNDM4NTEgMjAuNTc1NyA4LjI4MjM3Wk0zMi4wMTg5IDM5LjAwMjNWNDAuODE1OEgxNi4wMzc4VjM5LjAwMjNIMjEuOTg4MlYzOS4wMDI0SDI2LjA2ODVWMzkuMDAyM0gzMi4wMTg5Wk0yMy4xMjE2IDExLjc5NjVWMzcuOTI1NkgyNC45MzUxVjExLjc5NjVDMjQuNjQ2NyAxMS44NzMxIDI0LjM0MjggMTEuOTEzOCAyNC4wMjg0IDExLjkxMzhDMjMuNzEzOSAxMS45MTM4IDIzLjQxIDExLjg3MzEgMjMuMTIxNiAxMS43OTY1Wk0yNC4wMjg0IDYuMTMzNDFDMjIuNzI1IDYuMTMzNDEgMjEuNzA0OSA3LjIxMDE0IDIxLjcwNDkgOC40NTY4OUMyMS43MDQ5IDkuNzAzNjUgMjIuNzgxNiAxMC43ODA0IDI0LjAyODQgMTAuNzgwNEMyNS4zMzE4IDEwLjc4MDQgMjYuMzUxOSA5LjcwMzY1IDI2LjM1MTkgOC40NTY4OUMyNi4zNTE5IDcuMjEwMTQgMjUuMzMxOCA2LjEzMzQxIDI0LjAyODQgNi4xMzM0MVpNOC40NDM5NCAxMi43MDcxTDExLjQ2MTQgMjIuNTY3OUg1LjQyNjQ0TDguNDQzOTQgMTIuNzA3MVpNMi4xNjAyNyAyMy43MDEzSDE0Ljc3MTVDMTQuNzU5NSAyMy43NzY5IDE0Ljc0NjkgMjMuODUyNCAxNC43MzQzIDIzLjkyNzlDMTQuMTExIDI2LjQyMTQgMTEuNTA0MSAyOC4xNzgyIDguNDQzOSAyOC4xNzgyQzUuNTUzNyAyOC4xNzgyIDMuMDAzNTMgMjYuNTM0OCAyLjI2NjgxIDI0LjIxMTNDMi4yMjI3MiAyNC4wMzQ5IDIuMTg3MjEgMjMuODY3MiAyLjE2MDI3IDIzLjcwMTNaTTcuNTkzODggOS45MzAzMkM3LjU5Mzg4IDkuNDIwMjggNy45OTA1OCA5LjAyMzU3IDguNTAwNjEgOS4wMjM1N0M5LjAxMDY1IDkuMDIzNTcgOS40MDczMyA5LjQyMDI4IDkuNDA3MzMgOS45MzAzMkM5LjQwNzMzIDEwLjQ0MDQgOS4wMTA2NSAxMC44MzcgOC41MDA2MSAxMC44MzdDNy45OTA1OCAxMC44MzcgNy41OTM4OCAxMC40NDA0IDcuNTkzODggOS45MzAzMlpNMzkuNjEyOCAxMi43MDcxTDQyLjYzMDMgMjIuNTY3OUgzNi41OTUzTDM5LjYxMjggMTIuNzA3MVpNMzMuMzI5MSAyMy43MDEzSDQ1Ljk0MDNDNDUuOTI4NCAyMy43NzY1IDQ1LjkxNTkgMjMuODUxNiA0NS45MDM0IDIzLjkyNjhMNDUuOTAzMiAyMy45Mjc5QzQ1LjI3OTggMjYuNDIxNCA0Mi42NzMgMjguMTc4MiAzOS42MTI4IDI4LjE3ODJDMzYuNzIyNSAyOC4xNzgyIDM0LjE3MjQgMjYuNTM0OCAzMy40MzU3IDI0LjIxMTNDMzMuMzkxNiAyNC4wMzQ5IDMzLjM1NjEgMjMuODY3MiAzMy4zMjkxIDIzLjcwMTNaTTM4Ljc2MjcgOS45MzAzMkMzOC43NjI3IDkuNDIwMjggMzkuMTU5NCA5LjAyMzU3IDM5LjY2OTUgOS4wMjM1N0M0MC4xNzk1IDkuMDIzNTcgNDAuNTc2MiA5LjQyMDI4IDQwLjU3NjIgOS45MzAzMkM0MC41NzYyIDEwLjQ0MDQgNDAuMTc5NSAxMC44MzcgMzkuNjY5NSAxMC44MzdDMzkuMTU5NCAxMC44MzcgMzguNzYyNyAxMC40NDA0IDM4Ljc2MjcgOS45MzAzMlpNMjMuNDYxNyA3LjcyMDIySDI0LjU5NTFWOS4xOTM2OEgyMy40NjE3VjcuNzIwMjJaXCJcbiAgfVxuKSB9KSwgT0YgPSAoKSA9PiAvKiBAX19QVVJFX18gKi8gYyhcInN2Z1wiLCB7IHZpZXdCb3g6IFwiMCAwIDQ4IDQ4XCIsIGZpbGw6IFwibm9uZVwiLCB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLCBjaGlsZHJlbjogLyogQF9fUFVSRV9fICovIGMoXG4gIFwicGF0aFwiLFxuICB7XG4gICAgZmlsbDogXCJjdXJyZW50Q29sb3JcIixcbiAgICBmaWxsUnVsZTogXCJldmVub2RkXCIsXG4gICAgY2xpcFJ1bGU6IFwiZXZlbm9kZFwiLFxuICAgIGQ6IFwiTTQyLjcyNjUgMEg0NC45Mzc2VjEuNDI2NDVINDIuNzI2NVYyOC4zODYzSDI0LjY4MlYzOC4xNTc1TDMzLjI0MDcgNDYuNTczNUgzNi4zNzg5VjQ4SDExLjU1ODdWNDYuNTczNUgxNC42OTY5TDIzLjI1NTYgMzguMTU3NVYyOC4zODYzSDUuMjEwOThWMS40MjY0NUgzVjBINS4yMTA5OEg0Mi43MjY1Wk0yMy4yNTU2IDQ2LjUwMjJWNDAuMDgzMkwxNi42OTM5IDQ2LjUwMjJIMjMuMjU1NlpNMjQuNjgyIDQ2LjUwMjJIMzEuMjQzNkwyNC42ODIgNDAuMDgzMlY0Ni41MDIyWk02LjYzNzQyIDI2Ljk1OTlINDEuMzAwMVYxLjQyNjQ1SDYuNjM3NDJWMjYuOTU5OVpNMzQuNTI0NSAyMS44MjQ3SDM1LjczN1YyMy4yNTEySDEyLjA1NzlWMjEuODI0N0gxMy4zNDE3VjE1LjA0OTFIMTguNjkwOVYyMS44MjQ3SDIxLjI1ODVWNi4xMzM3OUgyNi42MDc3VjIxLjgyNDdIMjkuMTc1M1YxMC45ODM4SDM0LjUyNDVWMjEuODI0N1pNMzMuMTY5NCAxMi4zMzg5SDMwLjYwMTdWMjEuNzUzNEgzMy4xNjk0VjEyLjMzODlaTTI1LjI1MjYgNy40ODg5NEgyMi42ODVWMjEuODI0N0gyNS4yNTI2VjcuNDg4OTRaTTE3LjQwNzEgMTYuNDA0MkgxNC44Mzk1VjIxLjc1MzRIMTcuNDA3MVYxNi40MDQyWlwiXG4gIH1cbikgfSksIGZGID0gKCkgPT4gLyogQF9fUFVSRV9fICovIGMoXCJzdmdcIiwgeyB2aWV3Qm94OiBcIjAgMCA0OCA0OFwiLCBmaWxsOiBcIm5vbmVcIiwgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiwgY2hpbGRyZW46IC8qIEBfX1BVUkVfXyAqLyBjKFxuICBcInBhdGhcIixcbiAge1xuICAgIGZpbGw6IFwiY3VycmVudENvbG9yXCIsXG4gICAgZmlsbFJ1bGU6IFwiZXZlbm9kZFwiLFxuICAgIGNsaXBSdWxlOiBcImV2ZW5vZGRcIixcbiAgICBkOiBcIk00Ni42MjY1IDQxLjczNDlWMzkuNDkzOUg0OFY0NS40OTM5SDQ2LjYyNjVWNDMuMTgwN0gyLjI0MDk1VjUuNDQ1NzhIMFY0SDUuOTk5OTlWNS40NDU3OEgzLjY4NjczVjQxLjczNDlINDYuNjI2NVpNNS45OTk5OSA3Ljk3NTlIOC4wMjQwOFY5LjQyMTY4SDUuOTk5OTlWNy45NzU5Wk0xOS43MzQ5IDE2LjAwMDFWNDAuNTA2MUgxOC4yODkxVjE3LjQ0NThIMTUuNjg2OFY0MC41MDYxSDE0LjI0MVYxNi4wMDAxSDE5LjczNDlaTTExLjcxMDggMjcuOTI3OFY0MC41MDYxSDEwLjI2NTFWMjkuMzczNkg3LjczNDk1VjQwLjUwNjFINi4yODkxNlYyNy45Mjc4SDExLjcxMDhaTTI3LjY4NjcgNDAuNTA2VjIwLjkxNTZIMjIuMjY1VjQwLjUwNkgyMy43MTA4VjIyLjM2MTRIMjYuMzEzM1Y0MC41MDZIMjcuNjg2N1pNMzUuNzEwOCAxNi4wMDAxVjQwLjUwNjFIMzQuMjY1MVYxNy40NDU4SDMxLjczNDlWNDAuNTA2MUgzMC4yODkyVjE2LjAwMDFIMzUuNzEwOFpNNDMuNzM0OSA0MC41MDZWMjguODY3NEgzOC4zMTMyVjQwLjUwNkgzOS42ODY4VjMwLjMxMzJINDIuMjg5MVY0MC41MDZINDMuNzM0OVpNNS45OTk5OSAyMy45NTE5SDguMDI0MDhWMjUuMzk3N0g1Ljk5OTk5VjIzLjk1MTlaTTEyIDIzLjk1MTlIOS45NzU4OVYyNS4zOTc3SDEyVjIzLjk1MTlaTTM4LjAyNDEgMjMuOTUxOUg0MC4wNDgyVjI1LjM5NzdIMzguMDI0MVYyMy45NTE5Wk00NC4wMjQxIDIzLjk1MTlINDJWMjUuMzk3N0g0NC4wMjQxVjIzLjk1MTlaTTUuOTk5OTkgMTYuMDAwMUg4LjAyNDA4VjE3LjQ0NThINS45OTk5OVYxNi4wMDAxWk0xMiAxNi4wMDAxSDkuOTc1ODlWMTcuNDQ1OEgxMlYxNi4wMDAxWk01Ljk5OTk5IDE5Ljk3Nkg4LjAyNDA4VjIxLjQyMThINS45OTk5OVYxOS45NzZaTTEyIDE5Ljk3Nkg5Ljk3NTg5VjIxLjQyMThIMTJWMTkuOTc2Wk0yMS45NzU5IDE2LjAwMDFIMjRWMTcuNDQ1OEgyMS45NzU5VjE2LjAwMDFaTTI4LjA0ODIgMTYuMDAwMUgyNi4wMjQxVjE3LjQ0NThIMjguMDQ4MlYxNi4wMDAxWk0zOC4wMjQxIDE2LjAwMDFINDAuMDQ4MlYxNy40NDU4SDM4LjAyNDFWMTYuMDAwMVpNNDQuMDI0MSAxNi4wMDAxSDQyVjE3LjQ0NThINDQuMDI0MVYxNi4wMDAxWk0zOC4wMjQxIDE5Ljk3Nkg0MC4wNDgyVjIxLjQyMThIMzguMDI0MVYxOS45NzZaTTQ0LjAyNDEgMTkuOTc2SDQyVjIxLjQyMThINDQuMDI0MVYxOS45NzZaTTEyIDcuOTc1OUg5Ljk3NTg5VjkuNDIxNjhIMTJWNy45NzU5Wk0xNC4wMjQxIDcuOTc1OUgxNi4wNDgyVjkuNDIxNjhIMTQuMDI0MVY3Ljk3NTlaTTIwLjAyNDEgNy45NzU5SDE4VjkuNDIxNjhIMjAuMDI0MVY3Ljk3NTlaTTIxLjk3NTkgNy45NzU5SDI0VjkuNDIxNjhIMjEuOTc1OVY3Ljk3NTlaTTI4LjA0ODIgNy45NzU5SDI2LjAyNDFWOS40MjE2OEgyOC4wNDgyVjcuOTc1OVpNMzAgNy45NzU5SDMyLjAyNDFWOS40MjE2OEgzMFY3Ljk3NTlaTTM2IDcuOTc1OUgzMy45NzU5VjkuNDIxNjhIMzZWNy45NzU5Wk0zOC4wMjQxIDcuOTc1OUg0MC4wNDgyVjkuNDIxNjhIMzguMDI0MVY3Ljk3NTlaTTQ0LjAyNDEgNy45NzU5SDQyVjkuNDIxNjhINDQuMDI0MVY3Ljk3NTlaTTUuOTk5OTkgMTIuMDI0Mkg4LjAyNDA4VjEzLjQ2OTlINS45OTk5OVYxMi4wMjQyWk0xMiAxMi4wMjQySDkuOTc1ODlWMTMuNDY5OUgxMlYxMi4wMjQyWk0xNC4wMjQxIDEyLjAyNDJIMTYuMDQ4MlYxMy40Njk5SDE0LjAyNDFWMTIuMDI0MlpNMjAuMDI0MSAxMi4wMjQySDE4VjEzLjQ2OTlIMjAuMDI0MVYxMi4wMjQyWk0yMS45NzU5IDEyLjAyNDJIMjRWMTMuNDY5OUgyMS45NzU5VjEyLjAyNDJaTTI4LjA0ODIgMTIuMDI0MkgyNi4wMjQxVjEzLjQ2OTlIMjguMDQ4MlYxMi4wMjQyWk0zMCAxMi4wMjQySDMyLjAyNDFWMTMuNDY5OUgzMFYxMi4wMjQyWk0zNiAxMi4wMjQySDMzLjk3NTlWMTMuNDY5OUgzNlYxMi4wMjQyWk0zOC4wMjQxIDEyLjAyNDJINDAuMDQ4MlYxMy40Njk5SDM4LjAyNDFWMTIuMDI0MlpNNDQuMDI0MSAxMi4wMjQySDQyVjEzLjQ2OTlINDQuMDI0MVYxMi4wMjQyWlwiXG4gIH1cbikgfSksIGdGID0gKCkgPT4gLyogQF9fUFVSRV9fICovIGMoXCJzdmdcIiwgeyB2aWV3Qm94OiBcIjAgMCA0OCA0OFwiLCBmaWxsOiBcIm5vbmVcIiwgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiwgY2hpbGRyZW46IC8qIEBfX1BVUkVfXyAqLyBjKFxuICBcInBhdGhcIixcbiAge1xuICAgIGZpbGw6IFwiY3VycmVudENvbG9yXCIsXG4gICAgZmlsbFJ1bGU6IFwiZXZlbm9kZFwiLFxuICAgIGNsaXBSdWxlOiBcImV2ZW5vZGRcIixcbiAgICBkOiBcIk0xOS45NjEzIDBIMFYxOS45NjEzSDE5Ljk2MTNWMFpNMTguMjkwMSAxOC4yOTAxSDEuNTc4MjlWMS41NzgzMkgxOC4yOTAxVjE4LjI5MDFaTTQxLjMwNzQgNC4wNTEwOUwzMy4xOTY0IDE1LjAyNjhMMzQuNTQwNCAxNi4wMTk5TDQyLjY1MTMgNS4wNDQyN0w0MS4zMDc0IDQuMDUxMDlaTTEwLjc2OTggMTQuMzkwN0g5LjA5ODdWMTAuNzY5OEg1LjU3MDZWOS4xOTE0OUg5LjA5ODdWNS41NzA2SDEwLjc2OThWOS4xOTE0OUgxNC4yOTc5VjEwLjc2OThIMTAuNzY5OFYxNC4zOTA3Wk05LjkzNDIgMzYuODU4OEwxMi40NDEgMzQuMzUyMUwxMy42NDc5IDM1LjQ2NjJMMTEuMTQxMiAzNy45NzI5TDEzLjY0NzkgNDAuNDc5N0wxMi40NDEgNDEuNjg2N0w5LjkzNDIgMzkuMTc5OUw3LjQyNzQ3IDQxLjY4NjdMNi4zMTM0IDQwLjQ3OTdMOC44MjAxMiAzNy45NzI5TDYuMzEzNCAzNS40NjYyTDcuNDI3NDcgMzQuMzUyMUw5LjkzNDIgMzYuODU4OFpNNDAuMzg2OSAxMi45MDUyQzQwLjM4NjkgMTIuNDQxIDQwLjY2NTQgMTIuMDY5NiA0MC45NDM5IDExLjc5MTFDNDEuMzE1MyAxMS41MTI1IDQxLjY4NjcgMTEuMzI2OCA0Mi4wNTgxIDExLjQxOTdDNDIuOTg2NSAxMS40MTk3IDQzLjYzNjQgMTIuMjU1MyA0My41NDM2IDEzLjA5MDlDNDMuNTQzNiAxMy41NTUxIDQzLjI2NTEgMTMuOTI2NSA0Mi45ODY1IDE0LjIwNUM0Mi43MDggMTQuNDgzNSA0Mi4zMzY2IDE0LjU3NjQgNDEuOTY1MiAxNC41NzY0SDQxLjg3MjRDNDEuNDA4MSAxNC41NzY0IDQxLjAzNjggMTQuMjk3OCA0MC43NTgzIDE0LjAxOTNDNDAuNDc5OCAxMy43NDA4IDQwLjM4NjkgMTMuMzY5NCA0MC4zODY5IDEyLjkwNTJaTTMzLjc5NSA4LjYzNDU1SDMzLjg4NzhDMzQuNzIzNCA4LjYzNDU1IDM1LjM3MzMgNy45ODQ2NCAzNS40NjYxIDcuMTQ5MDVDMzUuNDY2MSA2LjY4NDgzIDM1LjM3MzQgNi4zMTM0NyAzNS4wOTQ5IDYuMDM0OTRDMzQuODE2MyA1Ljc1NjQxIDM0LjQ0NDkgNS40Nzc4OCAzMy45ODA3IDUuNDc3ODhDMzMuMTQ1MSA1LjM4NTA0IDMyLjMwOTYgNi4wMzQ5NCAzMi4zMDk2IDYuOTYzMzhDMzIuMzA5NiA3LjQyNzYgMzIuNDAyMyA3Ljc5ODk1IDMyLjY4MDggOC4wNzc0OEMzMi45NTk0IDguNDQ4ODYgMzMuMzMwOCA4LjYzNDU1IDMzLjc5NSA4LjYzNDU1Wk0zMi4zMDk2IDM0LjUzNzdINDMuNTQzNlYzNi4yMDg5SDMyLjMwOTZWMzQuNTM3N1pNNDMuNTQzNiAzOS44Mjk3SDMyLjMwOTZWNDEuNTAwOUg0My41NDM2VjM5LjgyOTdaTTE5Ljk2MTMgNDhIMFYyOC4wMzg3SDE5Ljk2MTNWNDhaTTE4LjI5MDEgMjkuNjE3SDEuNTc4MjlWNDYuMzI4OEgxOC4yOTAxVjI5LjYxN1pNNDcuOTA3MiA0OEgyNy45NDU4VjI4LjAzODdINDcuOTA3MlY0OFpNNDYuMzI4OSAyOS42MTdIMjkuNjE3MVY0Ni4zMjg4SDQ2LjMyODlWMjkuNjE3Wk0yNy45NDU4IDBWMTkuOTYxM0g0Ny45MDcyVjBIMjcuOTQ1OFpNNDYuMzI4OSAxOC4yOTAxSDI5LjYxNzFWMS41NzgzMkg0Ni4zMjg5VjE4LjI5MDFaTTI0Ljc4OTEgMjMuMTE4MUg0Ny44MTQ0VjI0Ljc4OTNIMjQuNzg5MVY0Ny44MTQ1SDIzLjExOFYyNC43ODkzSDAuMDkyODIwN1YyMy4xMTgxSDIzLjExOFY1LjAxMzY1VjAuMDkyOTM0MUgyNC43ODkxVjUuMDEzNjVWMjMuMTE4MVpcIlxuICB9XG4pIH0pLCBDRiA9ICgpID0+IC8qIEBfX1BVUkVfXyAqLyBjKFwic3ZnXCIsIHsgdmlld0JveDogXCIwIDAgNDggNDhcIiwgZmlsbDogXCJub25lXCIsIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsIGNoaWxkcmVuOiAvKiBAX19QVVJFX18gKi8gYyhcbiAgXCJwYXRoXCIsXG4gIHtcbiAgICBmaWxsOiBcImN1cnJlbnRDb2xvclwiLFxuICAgIGZpbGxSdWxlOiBcImV2ZW5vZGRcIixcbiAgICBjbGlwUnVsZTogXCJldmVub2RkXCIsXG4gICAgZDogXCJNNC44MzIyMSAzSDUuOTkxOTRWNC43MTYzMUg3Ljc5NlYzNi43MzJMNi4zNzg1NCA0My4yNjcySDYuMDU2MzlWNDQuNTIxNEg0Ljc2NzhWNDMuMjY3Mkg0LjQ0NTY1TDMuMDI4MiAzNi42VjguODA5MDNIMS4yODg1OVYxNy41MjI2SDBWNy40ODg4SDMuMDI4MlY0LjcxNjMxSDQuODMyMjFWM1pNNC41MTAwNyAzNy4zMjYxTDUuNDc2NTEgNDEuODE0OUw2LjUwNzQxIDM3LjMyNjFINC41MTAwN1pNNi42MzYyMyAzNi4wMDU5VjYuMTAyNTZINC4zMTY3OVYzNi4wMDU5SDYuNjM2MjNaTTIwLjc0NjMgMjAuNTU5MlYxOS4yMzlIMTcuMjY3MUwxNy4yNjcxIDE5LjIzODhDMTcuMzMxNiAxOC44NDI4IDE3LjM5NiAxOC40NDY4IDE3LjM5NiAxOC4wNTA4QzE3LjM5NiAxNy44NTI3IDE3LjQxMjEgMTcuNjU0NyAxNy40MjgyIDE3LjQ1NjdDMTcuNDQ0MyAxNy4yNTg2IDE3LjQ2MDQgMTcuMDYwNiAxNy40NjA0IDE2Ljg2MjZIMTkuNzE1NVYxNS42MDgzSDE3LjQ2MDRWMTQuNjg0MkMxNy40NjA0IDE0LjI4ODEgMTcuNTI0OCAxNC4wMjQxIDE3LjU4OTIgMTMuNzZDMTcuNjM5MiAxMy41NTUzIDE3LjcyNzkgMTMuMzkwMyAxNy43OTUyIDEzLjI2NUwxNy43OTUzIDEzLjI2NDhMMTcuNzk1MyAxMy4yNjQ4QzE3LjgxNDggMTMuMjI4NSAxNy44MzI1IDEzLjE5NTYgMTcuODQ3IDEzLjE2NTlDMTcuOTc1OCAxMy4wMzM5IDE4LjEwNDcgMTIuOTAxOSAxOC4yOTggMTIuODM1OUMxOC40OTEzIDEyLjc2OTkgMTguNjg0NiAxMi43Njk4IDE4Ljg3NzggMTIuNzY5OEMxOS4zMjg4IDEyLjc2OTggMTkuNzc5OSAxMi45MDE5IDIwLjE2NjQgMTMuMDk5OUwyMC41NTMgMTEuODQ1N0MyMC4yOTUzIDExLjcxMzcgMjAuMDM3NiAxMS42NDc2IDE5Ljc3OTkgMTEuNTgxNkMxOS41MjIyIDExLjUxNTYgMTkuMiAxMS40NDk2IDE4LjgxMzQgMTEuNDQ5NkMxOC4zNjI0IDExLjQ0OTYgMTcuOTc1OCAxMS41MTU2IDE3LjY1MzcgMTEuNTgxNkwxNy42NTM2IDExLjU4MTdDMTcuMzMxNSAxMS43MTM3IDE3LjAwOTQgMTEuODQ1NyAxNi43NTE3IDEyLjEwOTdDMTYuNDk0IDEyLjM3MzggMTYuMzAwNyAxMi43MDM4IDE2LjE3MTggMTMuMDk5OUMxNi4wNDMgMTMuNDk2IDE1Ljk3ODUgMTQuMDkwMSAxNS45Nzg1IDE0Ljc1MDJWMTUuNjA4M0gxNC44MTg4VjE2Ljg2MjZIMTUuOTc4NUMxNS45Nzg1IDE3Ljk4NDggMTUuODQ5NyAxOS4yMzkgMTUuNTkxOSAyMC41NTkySDIwLjc0NjNaTTE0Ljk0NzYgMzMuNDk3NEgyNy44MzM1VjM0LjgxNzZIMTQuOTQ3NlYzMy40OTc0Wk0xNC45NDc2IDM3LjE5NDFIMjcuODMzNVYzOC41MTQ0SDE0Ljk0NzZWMzcuMTk0MVpNMzQuOTIwOCAzNi4wMDZIMzMuMTE2OFYzNy4zMjYySDM0LjkyMDhWMzYuMDA2Wk0zMy4xMTY4IDM5LjcwMjVIMzQuOTIwOFY0MS4wMjI3SDMzLjExNjhWMzkuNzAyNVpNMzkuNzUzMSAzNi4wMDZIMzcuOTQ5VjM3LjMyNjJIMzkuNzUzMVYzNi4wMDZaTTM3Ljk0OSAzOS43MDI1SDM5Ljc1MzFWNDEuMDIyN0gzNy45NDlWMzkuNzAyNVpNNDQuNTg1MyAzNi4wMDZINDIuNzgxMlYzNy4zMjYySDQ0LjU4NTNWMzYuMDA2Wk00Mi43ODEyIDM5LjcwMjVINDQuNTg1M1Y0MS4wMjI3SDQyLjc4MTJWMzkuNzAyNVpNMTEuNDY4NCA0LjMyMDI0SDM0LjU5ODdWOC42MTFIMzguNjU3N1YxNi41OTg0SDM5Ljk0NjNWNy4wMjY3MkwzNi4wMTYxIDNIMTAuMTc5OVY0NC41ODc0SDI3LjU3NThWNDMuMjY3MkgxMS40Njg0VjQuMzIwMjRaTTM1Ljk1MTcgNC43ODIzM0wzOC40NjQ0IDcuMzU2NzhIMzUuOTUxN1Y0Ljc4MjMzWk0yMy4wNjU3IDE1LjI3ODJIMzQuOTIwOFYxNi41OTg0SDIzLjA2NTdWMTUuMjc4MlpNMzQuOTIwOCAxMS41ODE0SDIzLjA2NTdWMTIuOTAxN0gzNC45MjA4VjExLjU4MTRaTTE0Ljk0NzYgMjIuNTM5NEgyNy44MzM1VjIzLjg1OTZIMTQuOTQ3NlYyMi41Mzk0Wk0yNy44MzM1IDI2LjIzNjJIMTQuOTQ3NlYyNy41NTY0SDI3LjgzMzVWMjYuMjM2MlpNMTQuOTQ3NiAyOS44NjY5SDI3LjgzMzVWMzEuMTg3MUgxNC45NDc2VjI5Ljg2NjlaTTI3LjgzMzUgMTguOTA4N0gyMy4wNjU3VjIwLjIyODlIMjcuODMzNVYxOC45MDg3Wk0zMS40NDE2IDE4Ljg0MjlINDYuMTk2QzQ3LjIyNjggMTguODQyOSA0OCAxOS42MzUgNDggMjAuNjkxMlY0Mi44NzEyQzQ4IDQzLjkyNzQgNDcuMTYyNCA0NC43MTk1IDQ2LjE5NiA0NC43MTk1SDMxLjQ0MTZDMzAuNDEwNyA0NC43MTk1IDI5LjYzNzYgNDMuODYxNCAyOS42Mzc2IDQyLjg3MTJWMjAuNjkxMkMyOS42Mzc2IDE5LjYzNSAzMC40NzUxIDE4Ljg0MjkgMzEuNDQxNiAxOC44NDI5Wk00Ni4xOTYgNDMuMzMzMkM0Ni41MTgxIDQzLjMzMzIgNDYuNzExNCA0My4wNjkyIDQ2LjcxMTQgNDIuODA1MlYyMC42MjUyQzQ2LjcxMTQgMjAuMjk1MiA0Ni40NTM3IDIwLjA5NzEgNDYuMTk2IDIwLjA5NzFIMzEuNDQxNkMzMS4xMTk0IDIwLjA5NzEgMzAuOTI2MiAyMC4zNjEyIDMwLjkyNjIgMjAuNjI1MlY0Mi44MDUyQzMwLjkyNjIgNDMuMTM1MiAzMS4xODM5IDQzLjMzMzIgMzEuNDQxNiA0My4zMzMySDQ2LjE5NlpNNDQuMzI3NSAyMi40NzM0SDMzLjM3NDVWMjkuOTk4N0g0NC4zMjc1VjIyLjQ3MzRaTTQzLjAzODkgMjguNzQ0NUgzNC42NjMxVjIzLjc5MzZINDMuMDM4OVYyOC43NDQ1Wk0zMy4xMTY4IDMyLjM3NTNIMzQuOTIwOFYzMy42OTU1SDMzLjExNjhWMzIuMzc1M1pNMzkuNzUzMSAzMi4zNzUzSDM3Ljk0OVYzMy42OTU1SDM5Ljc1MzFWMzIuMzc1M1pNNDIuNzgxMiAzMi4zNzUzSDQ0LjU4NTNWMzMuNjk1NUg0Mi43ODEyVjMyLjM3NTNaXCJcbiAgfVxuKSB9KSwgbUYgPSAoKSA9PiAvKiBAX19QVVJFX18gKi8gYyhcInN2Z1wiLCB7IHZpZXdCb3g6IFwiMCAwIDQ4IDQ4XCIsIGZpbGw6IFwibm9uZVwiLCB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLCBjaGlsZHJlbjogLyogQF9fUFVSRV9fICovIGMoXG4gIFwicGF0aFwiLFxuICB7XG4gICAgZmlsbDogXCJjdXJyZW50Q29sb3JcIixcbiAgICBmaWxsUnVsZTogXCJldmVub2RkXCIsXG4gICAgY2xpcFJ1bGU6IFwiZXZlbm9kZFwiLFxuICAgIGQ6IFwiTTEuMzExNDcgMTAuMzYwNkgzOS45OTk5VjMyLjMyNzhINDEuMzExNFYxMC4zNjA2VjkuMDQ5MTVWMS43NzA1SDM0LjAzMjdWMEgzMi43MjEyVjUuMzExNDVIMzAuNDI2MlYwSDI5LjExNDdWMS43NzA1SDEyLjI2MjNWMEgxMC45NTA4VjUuMzExNDVIOC41OTAxN1YwSDcuMjc4NjlWMS43NzA1SDBWOS4wNDkxNVYxMC4zNjA2VjQzLjAxNjNIMzAuNjIyOVY0MS43MDQ4SDEuMzExNDdWMTAuMzYwNlpNMS4zMTE0NyAzLjA4MTk3SDcuMjc4NjlWNS4zMTE0NUg1LjgzNjA3VjYuNjIyOTJINy4yNzg2OUgxMi4xOTY3SDEzLjYzOTNWNS4zMTE0NUgxMi4xOTY3VjMuMDgxOTdIMjkuMTE0N1Y1LjMxMTQ1SDI3LjY3MjFWNi42MjI5MkgyOS4xMTQ3SDM0LjAzMjdIMzUuNDc1M1Y1LjMxMTQ1SDM0LjAzMjdWMy4wODE5N0gzOS45OTk5VjkuMDQ5MTVIMS4zMTE0N1YzLjA4MTk3Wk0yMy4xNDc1IDEyLjcyMTJIMTguMjI5NVYxNy42MzkySDIzLjE0NzVWMTIuNzIxMlpNMjEuODM2IDE2LjMyNzhIMTkuNDc1NFYxMy45NjcxSDIxLjgzNlYxNi4zMjc4Wk0zMi45MTggNDAuOTgzNUMzMi45MTggMzcuMTE0NyAzNi4wNjU1IDMzLjk2NzIgMzkuOTM0MyAzMy45NjcyQzQzLjgwMzIgMzMuOTY3MiA0Ni44ODUxIDM3LjExNDcgNDYuOTUwNyA0MC45ODM1QzQ2Ljk1MDcgNDQuODUyNCA0My44MDMyIDQ3Ljk5OTkgMzkuOTM0MyA0Ny45OTk5QzM2LjA2NTUgNDcuOTk5OSAzMi45MTggNDQuODUyNCAzMi45MTggNDAuOTgzNVpNMzQuMjI5NCA0MC45ODM1QzM0LjIyOTQgNDQuMTMxMSAzNi43ODY4IDQ2LjY4ODQgMzkuOTM0MyA0Ni42ODg0QzQzLjA4MTkgNDYuNjg4NCA0NS42MzkyIDQ0LjEzMTEgNDUuNjM5MiA0MC45ODM1QzQ1LjYzOTIgMzcuODM2IDQzLjA4MTkgMzUuMjc4NiAzOS45MzQzIDM1LjI3ODZDMzYuNzg2OCAzNS4yNzg2IDM0LjIyOTQgMzcuODM2IDM0LjIyOTQgNDAuOTgzNVpNMzguMzYwNiAzOS4yMTMxTDM5LjkzNDMgNDAuNzg2OUw0Mi4zNjA2IDM4LjQyNjJMNDMuMjc4NiAzOS4zNDQyTDQwLjQ1ODkgNDIuMTYzOUM0MC4zMjc4IDQyLjI5NSA0MC4xOTY2IDQyLjM2MDYgMzkuOTk5OSA0Mi4zNjA2QzM5LjgwMzIgNDIuMzYwNiAzOS42NzIxIDQyLjI5NSAzOS41NDA5IDQyLjE2MzlMMzcuNDQyNSA0MC4xMzExTDM4LjM2MDYgMzkuMjEzMVpNMjUuNTA4MSAxMi43MjEySDMwLjQyNjJWMTcuNjM5MkgyNS41MDgxVjEyLjcyMTJaTTI2Ljc1NDEgMTYuMzI3OEgyOS4xMTQ3VjEzLjk2NzFIMjYuNzU0MVYxNi4zMjc4Wk0zNy42MzkzIDEyLjcyMTJIMzIuNzIxMlYxNy42MzkySDM3LjYzOTNWMTIuNzIxMlpNMzYuMzkzMyAxNi4zMjc4SDM0LjAzMjdWMTMuOTY3MUgzNi4zOTMzVjE2LjMyNzhaTTMuNzM3NyAxOS45MzQzSDguNjU1NzJWMjQuODUyM0gzLjczNzdWMTkuOTM0M1pNNC45ODM2MiAyMy42MDY0SDcuMzQ0MjVWMjEuMjQ1OEg0Ljk4MzYyVjIzLjYwNjRaTTE1Ljg2ODggMTkuOTM0M0gxMC45NTA4VjI0Ljg1MjNIMTUuODY4OFYxOS45MzQzWk0xNC41NTczIDIzLjYwNjRIMTIuMTk2N1YyMS4yNDU4SDE0LjU1NzNWMjMuNjA2NFpNMTguMjI5NSAxOS45MzQzSDIzLjE0NzVWMjQuODUyM0gxOC4yMjk1VjE5LjkzNDNaTTE5LjQ3NTQgMjMuNjA2NEgyMS44MzZWMjEuMjQ1OEgxOS40NzU0VjIzLjYwNjRaTTMwLjQyNjIgMTkuOTM0M0gyNS41MDgxVjI0Ljg1MjNIMzAuNDI2MlYxOS45MzQzWk0yOS4xMTQ3IDIzLjYwNjRIMjYuNzU0MVYyMS4yNDU4SDI5LjExNDdWMjMuNjA2NFpNMzcuNjM5MyAyNC45MThIMzIuNzIxMlYxOS45OTk5SDM3LjYzOTNWMjQuOTE4Wk0zNi4zOTMzIDIxLjI0NTlIMzQuMDMyN1YyMy42MDY1SDM2LjM5MzNWMjEuMjQ1OVpNOC42NTU3MiAyNy4yMTNIMy43Mzc3VjMyLjEzMTFIOC42NTU3MlYyNy4yMTNaTTcuMzQ0MjUgMzAuODg1MUg0Ljk4MzYyVjI4LjUyNDVINy4zNDQyNVYzMC44ODUxWk0xOC4yMjk1IDI3LjIxM0gyMy4xNDc1VjMyLjEzMTFIMTguMjI5NVYyNy4yMTNaTTE5LjQ3NTQgMzAuODg1MUgyMS44MzZWMjguNTI0NUgxOS40NzU0VjMwLjg4NTFaTTMwLjQyNjIgMjcuMjEzSDI1LjUwODFWMzIuMTMxMUgzMC40MjYyVjI3LjIxM1pNMjkuMTE0NyAzMC44ODUxSDI2Ljc1NDFWMjguNTI0NUgyOS4xMTQ3VjMwLjg4NTFaTTMyLjcyMTIgMjcuMjEzSDM3LjYzOTNWMzIuMTMxMUgzMi43MjEyVjI3LjIxM1pNMzQuMDMyNyAzMC44ODUxSDM2LjM5MzNWMjguNTI0NUgzNC4wMzI3VjMwLjg4NTFaTTMuNjcyMTUgMzkuNDA5OEg4LjU5MDE3VjM0LjQ5MThIMy42NzIxNVYzOS40MDk4Wk00Ljk4MzYyIDM1LjgwMzJINy4zNDQyNVYzOC4xNjM5SDQuOTgzNjJWMzUuODAzMlpNMTAuOTUwOCAzNC40OTE4SDE1Ljg2ODhWMzkuNDA5OEgxMC45NTA4VjM0LjQ5MThaTTEyLjE5NjcgMzguMDk4M0gxNC41NTczVjM1LjczNzdIMTIuMTk2N1YzOC4wOTgzWk0xOC4yMjk1IDM5LjQwOThIMjMuMTQ3NVYzNC40OTE4SDE4LjIyOTVWMzkuNDA5OFpNMTkuNTQxIDM1LjgwMzJIMjEuOTAxNlYzOC4xNjM5SDE5LjU0MVYzNS44MDMyWk0zMC40MjYyIDM5LjQwOThIMjUuNTA4MVYzNC40OTE4SDMwLjQyNjJWMzkuNDA5OFpNMjkuMTE0NyAzNS44MDMySDI2Ljc1NDFWMzguMTYzOUgyOS4xMTQ3VjM1LjgwMzJaTTE0Ljk1MDggMjcuOTk5OUwxNS44Njg4IDI4LjkxNzlMMTIuODUyNCAzMS45MzQzTDEwLjc1NDEgMjkuNzcwNEwxMS42NzIxIDI4Ljg1MjNMMTIuODUyNCAzMC4wOTgzTDE0Ljk1MDggMjcuOTk5OVpcIlxuICB9XG4pIH0pLCBMRiA9ICgpID0+IC8qIEBfX1BVUkVfXyAqLyBjKFwic3ZnXCIsIHsgdmlld0JveDogXCIwIDAgNDggNDhcIiwgZmlsbDogXCJub25lXCIsIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsIGNoaWxkcmVuOiAvKiBAX19QVVJFX18gKi8gYyhcbiAgXCJwYXRoXCIsXG4gIHtcbiAgICBmaWxsOiBcImN1cnJlbnRDb2xvclwiLFxuICAgIGZpbGxSdWxlOiBcImV2ZW5vZGRcIixcbiAgICBjbGlwUnVsZTogXCJldmVub2RkXCIsXG4gICAgZDogXCJNMi41MjM4MSAxLjUyMzgxSDI5Ljg3NjJWNi40NzYxOUgzNC42NzYyVjkuODI4NTdIMzYuMlY0LjY0NzYyTDMxLjU1MjQgMEgxVjQ4SDE4LjZWNDYuNDc2MkgyLjUyMzgxVjEuNTIzODFaTTMxLjQgMS45ODA5NkwzNC4zNzE0IDQuOTUyMzhIMzEuNFYxLjk4MDk2Wk0xMC45ODA5IDExLjU4MDlINS4yNjY2NVYxNy4yOTUySDEwLjk4MDlWMTEuNTgwOVpNOS40NTcxMiAxNS43NzE0SDYuNzE0MjdWMTMuMDI4NUg5LjQ1NzEyVjE1Ljc3MTRaTTEzLjY0NzYgMTMuNzE0M0gzMi4yMzgxVjE1LjIzODFIMTMuNjQ3NlYxMy43MTQzWk0yNy4zNjE5IDIyLjAxOUgxMy42NDc2VjIzLjU0MjhIMjcuMzYxOVYyMi4wMTlaTTEzLjY0NzYgMzAuNTUyNUgyMi43MTQzVjMyLjA3NjNIMTMuNjQ3NlYzMC41NTI1Wk0xOS4zNjE5IDM4LjcwNDhIMTMuNjQ3NlY0MC4yMjg2SDE5LjM2MTlWMzguNzA0OFpNNS4yNjY2NSAyOC40MTkxSDEwLjk4MDlWMzQuMTMzNEg1LjI2NjY1VjI4LjQxOTFaTTYuNzE0MjcgMzIuNjg1OEg5LjQ1NzEyVjI5Ljk0MjlINi43MTQyN1YzMi42ODU4Wk01LjI2NjY1IDQyLjU5MDRIMTAuOTgwOVYzNi44NzYxSDUuMjY2NjVWNDIuNTkwNFpNNi43OTA0NiAzOC4zOTk5SDkuNTMzMzJWNDEuMTQyOEg2Ljc5MDQ2VjM4LjM5OTlaTTcuNzA0NzcgMjIuNzgwOUw5LjkxNDMgMjAuNTcxNEwxMC45ODEgMjEuNjM4MUw3LjcwNDc3IDI0LjkxNDNMNS4zNDI4NyAyMi41NTI0TDYuNDA5NTMgMjEuNDg1N0w3LjcwNDc3IDIyLjc4MDlaTTQzLjgxOTEgMTEuODg1OEw0NS4zNDI5IDkuMDY2NzFMNDMuNTE0MyA4LjA3NjI0TDQ0LjUwNDggNi4zMjM4NUw0My4yMDk1IDUuNTYxOTRMNDIuMjE5MSA3LjMxNDM0TDQwLjM5MDUgNi4zMjM4NUwyMy40NzYyIDM3LjEwNDhMMjEuMjY2NyA0NC43MjM5TDIxLjY0NzYgNDQuOTUyNEwyMC45NjE5IDQ2LjI0NzdMMjIuMjU3MiA0Ny4wMDk2TDIyLjk0MjkgNDUuNzE0M0wyMy4zMjM4IDQ1Ljk0MjlMMjguNDI4NiA0MC4xNTI0TDQzLjEzMzMgMTMuNDA5Nkw0NC45NjE5IDE0LjRMNDAuMDg1NyAyMy4yMzgxTDQxLjM4MSAyNEw0Ni45NDI5IDEzLjg2NjdMNDMuODE5MSAxMS44ODU4Wk0yMy4wMTkxIDQzLjY1NzJMMjQuNDY2NyAzOC41NTI0TDI2LjUyMzggMzkuNjk1M0wyMy4wMTkxIDQzLjY1NzJaTTI3LjQzODEgMzguNDc2MkwyNS4wNzYyIDM3LjE4MUw0MC45MjM4IDguMzgxTDQzLjI4NTcgOS42NzYyNUwyNy40MzgxIDM4LjQ3NjJaTTI1LjkxNDMgNDYuNTUyM0gzNC43NTI0VjMzLjQ0NzVIMzYuMlY0Ny45OTk5SDI1LjkxNDNWNDYuNTUyM1pcIlxuICB9XG4pIH0pLCB2RiA9ICgpID0+IC8qIEBfX1BVUkVfXyAqLyBjKFwic3ZnXCIsIHsgdmlld0JveDogXCIwIDAgNDggNDhcIiwgZmlsbDogXCJub25lXCIsIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsIGNoaWxkcmVuOiAvKiBAX19QVVJFX18gKi8gYyhcbiAgXCJwYXRoXCIsXG4gIHtcbiAgICBmaWxsOiBcImN1cnJlbnRDb2xvclwiLFxuICAgIGZpbGxSdWxlOiBcImV2ZW5vZGRcIixcbiAgICBjbGlwUnVsZTogXCJldmVub2RkXCIsXG4gICAgZDogXCJNNDAuMDY3MiAxNy4wNjcyVjcuMzE5MzJWNy4yNTIwOUgzNy43MTQzVjM3Ljk3NDhMMzYuNTA0MSA0NS4yMzUzSDM2LjEwMDhWNDYuNzgxNUgzNC44OTA4VjQ1LjIzNTNIMzQuNDg3M0wzMy4yNzczIDM4LjEwOTJWMy4wMTY4MUgzNC45NThWMUgzNi4xNjhWMy4wMTY4MUgzNy44NDg3VjYuMTA5MjVINDEuMjc3M1YxNy4wNjcySDQwLjA2NzJaTTM2LjYzODYgMzcuNDM3VjQuMjI2ODhIMzQuNDg3M1YzNy40MzdIMzYuNjM4NlpNMzQuNjIxOCAzOC42NDdMMzUuNTYzIDQ0LjA5MjRMMzYuNTcxNCAzOC42NDdIMzQuNjIxOFpNMTIuODQwMyAyNS42NzIyVjI2Ljk0OTVINy43MzEwOUM4IDI1LjczOTQgOC4xMzQ0MyAyNC41Mjk0IDguMTM0NDMgMjMuNDUzN0g2Ljk5MTYxVjIyLjI0MzZIOC4xMzQ0M1YyMS40MzY5QzguMTM0NDMgMjAuODMxOSA4LjIwMTY5IDIwLjI5NDEgOC4zMzYxNSAxOS44OTA3QzguNDcwNiAxOS40ODczIDguNjcyMjIgMTkuMjE4NCA4Ljk0MTEyIDE4Ljk0OTVDOS4xNDI4MSAxOC42ODA2IDkuNDc4OTcgMTguNDc5IDkuODE1MTEgMTguNDExN0MxMC4xNTEyIDE4LjM0NDUgMTAuNTU0NiAxOC4yNzczIDEwLjk1NzkgMTguMjc3M0gxMC45NTgyQzExLjI5NDIgMTguMjc3MyAxMS42MzAzIDE4LjI3NzMgMTEuODk5MSAxOC4zNDQ1QzEyLjE2OCAxOC40MTE3IDEyLjQzNyAxOC40NzkgMTIuNzA1OSAxOC42MTM0TDEyLjMwMjUgMTkuODIzNUwxMi4zMDIyIDE5LjgyMzRDMTEuODk4OSAxOS42ODkgMTEuNDk1NyAxOS41NTQ2IDExLjAyNTIgMTkuNTU0NkMxMC43NTYzIDE5LjU1NDYgMTAuNjIxOCAxOS41NTQ2IDEwLjQyMDIgMTkuNjIxOEMxMC4yMTg1IDE5LjY4OSAxMC4wODQgMTkuNzU2MiA5Ljk0OTUzIDE5Ljg5MDdDOS44MTUxOSAyMC4wMjUgOS43NDgwMyAyMC4yMjY1IDkuNjgwODYgMjAuNDI4TDkuNjgwNjkgMjAuNDI4NUM5LjYxMzQ2IDIwLjYzMDIgOS42MTMzOSAyMC45NjYzIDkuNjEzMzkgMjEuMzAyNVYyMi4xNzY0SDExLjgzMTlWMjMuMzg2NUg5LjYxMzM5QzkuNjEzMzkgMjMuNTQ2OSA5LjU5ODA5IDIzLjcyMjYgOS41ODIwOCAyMy45MDY0TDkuNTgyMDggMjMuOTA2NEM5LjU2NDU1IDI0LjEwNzYgOS41NDYxOCAyNC4zMTg1IDkuNTQ2MTggMjQuNTI5NEM5LjU0NjE4IDI0LjkzMjcgOS40Nzg5OSAyNS4zMzYxIDkuNDExNzYgMjUuNjcyMkgxMi44NDAzWk00My40OTU4IDEwLjI3NzNWMTEuNDg3NEg0Ni44NTcxVjM0LjI3NzNIMzkuNzk4M1YzNS40MjAySDQ4VjEwLjI3NzNINDMuNDk1OFpNMzEuMTkzMyAzNS40MjAySDBWMTAuMjc3M0gzMS4xOTMzVjExLjQ4NzRIMS4yMTAwM1YzNC4yNzczSDMxLjE5MzNWMzUuNDIwMlpNMzEuMTI2IDI1LjYwNDlIMTcuNDExOFYyNi44MTUxSDMxLjEyNlYyNS42MDQ5Wk0xNy40MTE4IDIyLjI0MzZIMzEuMTI2VjIzLjQ1MzdIMTcuNDExOFYyMi4yNDM2Wk0zMS4xMjYgMTguOTQ5NUgxNy40MTE4VjIwLjE1OTZIMzEuMTI2VjE4Ljk0OTVaTTM5Ljc5ODMgMjUuNjA0OUg0NC43NzMxVjI2LjgxNTFIMzkuNzk4M1YyNS42MDQ5Wk00NC43NzMxIDIyLjI0MzZIMzkuNzk4M1YyMy40NTM3SDQ0Ljc3MzFWMjIuMjQzNlpNMzkuNzk4MyAxOC45NDk1SDQ0Ljc3MzFWMjAuMTU5NkgzOS43OTgzVjE4Ljk0OTVaTTE1LjczMTEgMjIuMjQzNkgxNC4wNTA0VjIzLjQ1MzdIMTUuNzMxMVYyMi4yNDM2Wk0zLjM2MTM0IDIyLjI0MzZINS4wNDIwMlYyMy40NTM3SDMuMzYxMzRWMjIuMjQzNlpcIlxuICB9XG4pIH0pLCBxRiA9ICgpID0+IC8qIEBfX1BVUkVfXyAqLyBjKFwic3ZnXCIsIHsgdmlld0JveDogXCIwIDAgNDggNDhcIiwgZmlsbDogXCJub25lXCIsIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsIGNoaWxkcmVuOiAvKiBAX19QVVJFX18gKi8gYyhcbiAgXCJwYXRoXCIsXG4gIHtcbiAgICBmaWxsOiBcImN1cnJlbnRDb2xvclwiLFxuICAgIGZpbGxSdWxlOiBcImV2ZW5vZGRcIixcbiAgICBjbGlwUnVsZTogXCJldmVub2RkXCIsXG4gICAgZDogXCJNNDYuMTc1MyA2SDEuNzQ1NTFDMC43OTM0NDYgNiAwIDYuNzkzMzkgMCA3Ljc0NTQ1VjM0LjY0MTNDMCAzNS41OTM0IDAuNzkzNDQ2IDM2LjM4NjggMS43NDU1MSAzNi4zODY4SDMuNDkwOTNWNDIuNDE2NUg0Ljc2MDMzTDEwLjU1MjEgMzYuMzg2OEgxOS40MzhWMzQuOTU4N0g5LjkxNzM2TDQuOTE5MDcgNDAuMTE1N1YzNC45NTg3SDEuODI0ODNDMS42NjYxNSAzNC45NTg3IDEuNTA3NDYgMzQuOCAxLjUwNzQ2IDM0LjY0MTNWNy43NDU0NUMxLjUwNzQ2IDcuNTg2NzcgMS42NjYxNSA3LjQyODEgMS44MjQ4MyA3LjQyODFINDYuMjU0NkM0Ni40MTMzIDcuNDI4MSA0Ni41NzIgNy41ODY3NyA0Ni41NzIgNy43NDU0NVYzNC42NDEzQzQ2LjU3MiAzNC44IDQ2LjQxMzMgMzQuOTU4NyA0Ni4yNTQ2IDM0Ljk1ODdINDUuNTQwNVYzNi4zODY4SDQ2LjI1NDZDNDcuMjA2NiAzNi4zODY4IDQ4IDM1LjU5MzQgNDggMzQuNjQxM1Y3Ljc0NTQ1QzQ3LjkyMDcgNi43OTMzOSA0Ny4xMjczIDYgNDYuMTc1MyA2Wk0zMi45MjU2IDEzLjI5OTFDMzYuMDk5MiAxMy4yOTkxIDM4LjYzODEgMTUuODM4IDM4LjYzODEgMTkuMDExNUMzOC42MzgxIDIyLjE4NTEgMzYuMDk5MiAyNi4xNTIgMzIuOTI1NiAyNi4xNTJDMjkuNzUyMSAyNi4xNTIgMjcuMjEzMyAyMi4yNjQ0IDI3LjIxMzMgMTkuMDExNUMyNy4yMTMzIDE1LjgzOCAyOS43NTIxIDEzLjI5OTEgMzIuOTI1NiAxMy4yOTkxWk0zMi45MjU2IDE0LjcyNzJDMzAuNTQ1NSAxNC43MjcyIDI4LjY0MTMgMTYuNjMxNCAyOC42NDEzIDE5LjAxMTVDMjguNjQxMyAyMS40NzEgMzAuNzA0MSAyNC43MjM5IDMyLjkyNTYgMjQuNzIzOUMzNS4xNDcxIDI0LjcyMzkgMzcuMjA5OSAyMS40NzEgMzcuMjA5OSAxOS4wMTE1QzM3LjIwOTkgMTYuNjMxNCAzNS4zMDU4IDE0LjcyNzIgMzIuOTI1NiAxNC43MjcyWk0zOC4yNDE0IDM3LjU3NjlIMzkuNjY5NFY0MS43MDI1SDM4LjI0MTRWMzcuNTc2OVpNMzUuMjI2NSAyOC4xMzU1SDMwLjcwNDJDMjUuODY0NSAyOC4xMzU1IDIxLjg5NzUgMzIuMTAyNCAyMS44OTc1IDM2Ljk0MjFWNDEuNzAyNEgyMy4zMjU2VjM2Ljk0MjFDMjMuMzI1NiAzMi44OTU4IDI2LjY1NzkgMjkuNTYzNiAzMC43MDQyIDI5LjU2MzZIMzUuMjI2NUMzOS4yNzI3IDI5LjU2MzYgNDIuNjA1IDMyLjg5NTggNDIuNjA1IDM2Ljk0MjFWNDEuNzAyNEg0NC4wMzMxVjM2Ljk0MjFDNDMuOTUzNyAzMi4xMDI0IDQwLjA2NjEgMjguMTM1NSAzNS4yMjY1IDI4LjEzNTVaTTI2LjI2MTEgMzcuNTc2OUgyNy42ODkzVjQxLjcwMjVIMjYuMjYxMVYzNy41NzY5Wk02LjgyMzEyIDE3LjAyOEgxNS4zMTI0VjE4LjQ1NjFINi44MjMxMlYxNy4wMjhaTTI0Ljc1MzggMjAuOTk1SDYuODIzMTJWMjIuNDIzMUgyNC43NTM4VjIwLjk5NVpNNi44MjMxMiAyNC45NjE5SDI2LjczNzJWMjYuMzlINi44MjMxMlYyNC45NjE5WlwiXG4gIH1cbikgfSksIHlGID0gKCkgPT4gLyogQF9fUFVSRV9fICovIGMoXCJzdmdcIiwgeyB2aWV3Qm94OiBcIjAgMCA0OCA0OFwiLCBmaWxsOiBcIm5vbmVcIiwgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiwgY2hpbGRyZW46IC8qIEBfX1BVUkVfXyAqLyBjKFxuICBcInBhdGhcIixcbiAge1xuICAgIGZpbGw6IFwiY3VycmVudENvbG9yXCIsXG4gICAgZmlsbFJ1bGU6IFwiZXZlbm9kZFwiLFxuICAgIGNsaXBSdWxlOiBcImV2ZW5vZGRcIixcbiAgICBkOiBcIk0xNy44ODg5IDEwLjUwNUMyMC40NzQ4IDEwLjUwNSAyMi41NzU4IDcuMzUzNTMgMjIuNTc1OCA0LjY4Njg3QzIyLjU3NTggMi4xMDEwMSAyMC40NzQ4IDAgMTcuODg4OSAwQzE1LjMwMyAwIDEzLjIwMiAyLjEwMTAxIDEzLjIwMiA0LjY4Njg3QzEzLjIwMiA3LjI3MjcyIDE1LjIyMjIgMTAuNTA1IDE3Ljg4ODkgMTAuNTA1Wk0xNy44ODg5IDEuMzczNzRDMTkuNjY2NyAxLjM3Mzc0IDIxLjEyMTIgMi44MjgyOCAyMS4xMjEyIDQuNjA2MDZDMjEuMTIxMiA2LjU0NTQ1IDE5LjUwNTEgOC45Njk2OSAxNy44ODg5IDguOTY5NjlDMTYuMjcyNyA4Ljk2OTY5IDE0LjY1NjYgNi40NjQ2NCAxNC42NTY2IDQuNjA2MDZDMTQuNTc1OCAyLjgyODI4IDE2LjAzMDMgMS4zNzM3NCAxNy44ODg5IDEuMzczNzRaTTE4LjYxNjIgMTYuMDgwOEMxOC42MTYyIDE4LjkwOSAyMC44Nzg4IDIyLjM4MzggMjMuNjI2MyAyMi4zODM4QzI2LjM3MzcgMjIuMzgzOCAyOC42MzY0IDE4Ljk4OTkgMjguNjM2NCAxNi4wODA4QzI4LjYzNjQgMTMuMzMzMyAyNi4zNzM3IDExLjA3MDcgMjMuNjI2MyAxMS4wNzA3QzIwLjg3ODggMTEuMDcwNyAxOC42MTYyIDEzLjMzMzMgMTguNjE2MiAxNi4wODA4Wk0yMy42MjYzIDEyLjUyNTJDMjUuNjQ2NSAxMi41MjUyIDI3LjE4MTggMTQuMTQxNCAyNy4xODE4IDE2LjA4MDhDMjcuMTgxOCAxOC4xODE4IDI1LjQwNCAyMC45MjkyIDIzLjYyNjMgMjAuOTI5MkMyMS43Njc3IDIwLjkyOTIgMjAuMDcwNyAxOC4xODE4IDIwLjA3MDcgMTYuMDgwOEMyMC4wNzA3IDE0LjE0MTQgMjEuNjg2OSAxMi41MjUyIDIzLjYyNjMgMTIuNTI1MlpNMjEuNjg2OCAyMy45MTkyQzE3LjQwNCAyMy45MTkyIDE0LjAxMDEgMjcuMzkzOSAxNC4wMTAxIDMxLjU5NTlWNDEuMjkyOUMxNC4wMTAxIDQyLjc0NzQgMTUuMTQxNCA0My44Nzg3IDE2LjU5NiA0My44Nzg3QzE3IDQzLjg3ODcgMTcuNDA0MSA0My43OTc5IDE3LjcyNzMgNDMuNTU1NVY0Ny45MTkySDE5LjE4MThWNDEuMjkyOVYzMy44NTg2VjMxLjUxNTFIMTcuNzI3M1YzMy44NTg2VjQxLjI5MjlDMTcuNzI3MyA0MS45Mzk0IDE3LjI0MjUgNDIuNDI0MiAxNi41OTYgNDIuNDI0MkMxNS45NDk1IDQyLjQyNDIgMTUuNDY0NyA0MS45Mzk0IDE1LjQ2NDcgNDEuMjkyOVYzMS42NzY3QzE1LjQ2NDcgMjguMjAyIDE4LjI5MyAyNS4zNzM3IDIxLjc2NzcgMjUuMzczN0gyNS42NDY1QzI5LjEyMTIgMjUuMzczNyAzMS45NDk1IDI4LjIwMiAzMS45NDk1IDMxLjY3NjdWNDEuMzczN0MzMS45NDk1IDQyLjAyMDIgMzEuNDY0NyA0Mi41MDUgMzAuODE4MiA0Mi41MDVDMzAuMTcxNyA0Mi41MDUgMjkuNjg2OSA0Mi4wMjAyIDI5LjY4NjkgNDEuMzczN1YzMy45Mzk0VjMxLjU5NTlIMjguMjMyNFYzMy45Mzk0VjQxLjM3MzdWNDhIMjkuNjg2OVY0My42MzYzQzMwLjAxMDEgNDMuNzk3OSAzMC40MTQxIDQzLjk1OTYgMzAuODE4MiA0My45NTk2QzMyLjI3MjcgNDMuOTU5NiAzMy40MDQgNDIuODI4MiAzMy40MDQgNDEuMzczN1YzMS42NzY3QzMzLjMyMzIgMjcuMzkzOSAyOS44NDg1IDIzLjkxOTIgMjUuNTY1NyAyMy45MTkySDIxLjY4NjhaTTIyLjg5OSA0MS4yOTI5SDI0LjM1MzVWNDcuOTE5MkgyMi44OTlWNDEuMjkyOVpNMzMuODA4IDQuNjg2ODdDMzMuODA4IDcuMzUzNTMgMzEuNzA3MSAxMC41MDUgMjkuMTIxMiAxMC41MDVDMjYuNTM1NCAxMC41MDUgMjQuNDM0MyA3LjI3MjcyIDI0LjQzNDMgNC42ODY4N0MyNC40MzQzIDIuMTAxMDEgMjYuNTM1NCAwIDI5LjEyMTIgMEMzMS43MDcxIDAgMzMuODA4IDIuMTAxMDEgMzMuODA4IDQuNjg2ODdaTTMyLjM1MzYgNC42MDYwNkMzMi4zNTM2IDIuODI4MjggMzAuODk5IDEuMzczNzQgMjkuMTIxMiAxLjM3Mzc0QzI3LjM0MzUgMS4zNzM3NCAyNS44ODg5IDIuODI4MjggMjUuODg4OSA0LjYwNjA2QzI1Ljg4ODkgNi40NjQ2NCAyNy40MjQzIDguOTY5NjkgMjkuMTIxMiA4Ljk2OTY5QzMwLjczNzQgOC45Njk2OSAzMi4zNTM2IDYuNTQ1NDUgMzIuMzUzNiA0LjYwNjA2Wk05Ljg4ODg5IDE5LjU1NTVDMTIuNDc0NyAxOS41NTU1IDE0LjU3NTggMTYuNDA0IDE0LjU3NTggMTMuNzM3M0MxNC41NzU4IDExLjE1MTUgMTIuNDc0NyA5LjA1MDQ2IDkuODg4ODkgOS4wNTA0NkM3LjMwMzAzIDkuMDUwNDYgNS4yMDIwOCAxMS4xNTE1IDUuMjAyMDggMTMuNzM3M0M1LjIwMjA4IDE2LjMyMzIgNy4zMDMwMyAxOS41NTU1IDkuODg4ODkgMTkuNTU1NVpNOS44ODg4OSAxMC41MDVDMTEuNjY2NyAxMC41MDUgMTMuMTIxMiAxMS45NTk2IDEzLjEyMTIgMTMuNzM3M0MxMy4xMjEyIDE1LjY3NjcgMTEuNTA1IDE4LjEwMSA5Ljg4ODg5IDE4LjEwMUM4LjE5MTkyIDE4LjEwMSA2LjY1NjU2IDE1LjU5NTkgNi42NTY1NiAxMy43MzczQzYuNjU2NTYgMTEuOTU5NiA4LjExMTExIDEwLjUwNSA5Ljg4ODg5IDEwLjUwNVpNMTcgMjMuMTkyTDE1Ljc4NzkgMjRDMTUuMDYwNiAyMi45NDk1IDEzLjYwNjEgMjIuMzAzMSAxMS43NDc1IDIyLjMwMzFIOC4xOTE5NEM1LjA0MDQyIDIyLjMwMzEgMi40NTQ1OCAyNC44ODg5IDIuNDU0NTggMjguMDQwNFYzNi45MjkzQzIuNDU0NTggMzcuNDE0MiAyLjkzOTM5IDM3Ljg5OSAzLjQyNDI0IDM3Ljg5OUMzLjkwOTA5IDM3Ljg5OSA0LjM5NCAzNy40OTUgNC4zOTQgMzYuOTI5M1YzMC4xNDE0VjI3Ljk1OTZINS44NDg0OFYzMC4xNDE0VjM2LjkyOTNWNDcuOTE5Mkg0LjM5NFYzOS4xMTExQzQuMTUxNTcgMzkuMjcyOCAzLjc0NzQ3IDM5LjM1MzYgMy40MjQyNCAzOS4zNTM2QzIuMTMxMzEgMzkuMzUzNiAxIDM4LjMwMzEgMSAzNi45MjkzVjI4LjA0MDRDMSAyNC4wODA4IDQuMjMyMzQgMjAuODQ4NSA4LjE5MTk0IDIwLjg0ODVIMTEuNzQ3NUMxNC4wOTA5IDIwLjg0ODUgMTYuMDMwMyAyMS43Mzc0IDE3IDIzLjE5MlpNMTAuNjk3IDM2LjkyOTJIOS4yNDI0OFY0Ny45MTkxSDEwLjY5N1YzNi45MjkyWk00Mi4wNTA1IDEzLjczNzNDNDIuMDUwNSAxNi40MDQgMzkuOTQ5NSAxOS41NTU1IDM3LjM2MzYgMTkuNTU1NUMzNC43Nzc4IDE5LjU1NTUgMzIuNjc2OCAxNi4zMjMyIDMyLjY3NjggMTMuNzM3M0MzMi42NzY4IDExLjE1MTUgMzQuNzc3OCA5LjA1MDQ2IDM3LjM2MzYgOS4wNTA0NkMzOS45NDk1IDkuMDUwNDYgNDIuMDUwNSAxMS4xNTE1IDQyLjA1MDUgMTMuNzM3M1pNNDAuNTk1OSAxMy43MzczQzQwLjU5NTkgMTEuOTU5NiAzOS4xNDE0IDEwLjUwNSAzNy4zNjM2IDEwLjUwNUMzNS41ODU4IDEwLjUwNSAzNC4xMzEzIDExLjk1OTYgMzQuMTMxMyAxMy43MzczQzM0LjEzMTMgMTUuNTk1OSAzNS42NjY3IDE4LjEwMSAzNy4zNjM2IDE4LjEwMUMzOC45Nzk4IDE4LjEwMSA0MC41OTU5IDE1LjY3NjcgNDAuNTk1OSAxMy43MzczWk0zOS4xNDE1IDIwLjg0ODVIMzUuNTg1OUMzMy4yNDI1IDIwLjg0ODUgMzEuMzAzMSAyMS43Mzc0IDMwLjMzMzQgMjMuMTkyTDMxLjU0NTUgMjRDMzIuMjcyOCAyMi45NDk1IDMzLjgwODEgMjIuMzAzMSAzNS42NjY3IDIyLjMwMzFIMzkuMjIyMkM0Mi4zNzM4IDIyLjMwMzEgNDQuOTU5NiAyNC44ODg5IDQ0Ljk1OTYgMjguMDQwNFYzNi45MjkzQzQ0Ljk1OTYgMzcuNDk1IDQ0LjQ3NDggMzcuODk5IDQzLjk4OTkgMzcuODk5QzQzLjUwNTEgMzcuODk5IDQzLjAyMDIgMzcuNDE0MiA0My4wMjAyIDM2LjkyOTNWMzAuMTQxNFYyNy45NTk2SDQxLjU2NTdWMzAuMTQxNFYzNi45MjkzVjQ3LjkxOTJINDMuMDIwMlYzOS4xMTExQzQzLjM0MzQgMzkuMjcyOCA0My42NjY3IDM5LjM1MzYgNDMuOTg5OSAzOS4zNTM2QzQ1LjM2MzcgMzkuMzUzNiA0Ni40MTQyIDM4LjIyMjIgNDYuNDE0MiAzNi45MjkzVjI4LjA0MDRDNDYuMzMzNCAyNC4wODA4IDQzLjEwMTEgMjAuODQ4NSAzOS4xNDE1IDIwLjg0ODVaTTM2LjYzNjMgMzYuOTI5MkgzOC4wOTA5VjQ3LjkxOTFIMzYuNjM2M1YzNi45MjkyWlwiXG4gIH1cbikgfSksIHdGID0gKCkgPT4gLyogQF9fUFVSRV9fICovIGMoXCJzdmdcIiwgeyB2aWV3Qm94OiBcIjAgMCA0OCA0OFwiLCBmaWxsOiBcIm5vbmVcIiwgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiwgY2hpbGRyZW46IC8qIEBfX1BVUkVfXyAqLyBjKFxuICBcInBhdGhcIixcbiAge1xuICAgIGZpbGw6IFwiY3VycmVudENvbG9yXCIsXG4gICAgZmlsbFJ1bGU6IFwiZXZlbm9kZFwiLFxuICAgIGNsaXBSdWxlOiBcImV2ZW5vZGRcIixcbiAgICBkOiBcIk0yMy4zNDQzIDEzLjk2NzJWNC44NTI0N0MyMi4yOTUyIDQuNTI0NiAyMS41NzM4IDMuNjA2NTYgMjEuNTA4MiAyLjQ5MTgxQzIxLjUwODIgMS4xMTQ3NiAyMi42MjMgMCAyNC4wMDAxIDBDMjUuMzc3MSAwIDI2LjQ5MTggMS4xMTQ3NiAyNi40OTE4IDIuNDkxODFDMjYuNDkxOCAzLjYwNjU2IDI1LjcwNSA0LjU5MDE3IDI0LjY1NTggNC44NTI0N1YxMy45NjcySDIzLjM0NDNaTTI1LjE4MDQgMi40OTE4MUMyNS4xODA0IDEuODM2MDcgMjQuNjU1OCAxLjMxMTQ4IDI0LjAwMDEgMS4zMTE0OEMyMy4zNDQzIDEuMzExNDggMjIuODE5NyAxLjgzNjA3IDIyLjgxOTcgMi40OTE4MUMyMi44MTk3IDMuMTQ3NTUgMjMuMzQ0MyAzLjY3MjE0IDI0LjAwMDEgMy42NzIxNEMyNC42NTU4IDMuNjcyMTQgMjUuMTgwNCAzLjE0NzU1IDI1LjE4MDQgMi40OTE4MVpNMjQuMDAwMSAxNS45OTk5QzE5LjU0MTEgMTUuOTk5OSAxNS45MzQ1IDE5LjYwNjUgMTUuOTM0NSAyNC4wNjU1QzE1LjkzNDUgMjguNTI0NiAxOS41NDExIDMyLjEzMTEgMjQuMDAwMSAzMi4xMzExQzI4LjQ1OTEgMzIuMTMxMSAzMi4wNjU2IDI4LjUyNDYgMzIuMDY1NiAyNC4wNjU1QzMyLjA2NTYgMTkuNjA2NSAyOC40NTkxIDE1Ljk5OTkgMjQuMDAwMSAxNS45OTk5Wk0yNC4wMDAxIDMwLjg4NTJDMjAuMjYyNCAzMC44ODUyIDE3LjI0NTkgMjcuODY4OCAxNy4yNDU5IDI0LjEzMTFDMTcuMjQ1OSAyMC4zOTM0IDIwLjI2MjQgMTcuMzc3IDI0LjAwMDEgMTcuMzc3QzI3LjczNzggMTcuMzc3IDMwLjc1NDEgMjAuMzkzNCAzMC43NTQxIDI0LjEzMTFDMzAuODE5NyAyNy44MDMyIDI3LjczNzggMzAuODg1MiAyNC4wMDAxIDMwLjg4NTJaTTIzLjI0ODcgMjUuMDk0M0wyMy4yNDg3IDI1LjA5NDRDMjMuMjMxNCAyNS4yNzUgMjMuMjEzMSAyNS40NjY0IDIzLjIxMzEgMjUuNjM5NEMyMy4yMTMxIDI1Ljk2NzMgMjMuMTQ3NiAyNi4zNjA3IDIzLjA4MiAyNi42ODg2SDI2LjA5ODRWMjcuODAzNEgyMS41NzM4QzIxLjc3MDUgMjYuNjg4NiAyMS45MDE3IDI1LjYzOTQgMjEuOTAxNyAyNC42NTU4SDIwLjkxODFWMjMuNjA2NkgyMS45MDE3VjIyLjg4NTNDMjEuOTAxNyAyMi4zNjA3IDIxLjk2NzMgMjEuOTAxNyAyMi4wOTg0IDIxLjUwODNDMjIuMjI5NiAyMS4xODA0IDIyLjQyNjMgMjAuODUyNSAyMi42MjMgMjAuNjU1OEMyMi44MTk4IDIwLjQ1OTEgMjMuMDgyIDIwLjI2MjQgMjMuNDA5OSAyMC4xOTY4QzIzLjY3MjIgMjAuMTMxMiAyNC4wMDAxIDIwLjA2NTcgMjQuMzkzNSAyMC4wNjU3QzI0LjcyMTQgMjAuMDY1NyAyNC45ODM3IDIwLjA2NTcgMjUuMjQ2IDIwLjEzMTJDMjUuNDEwNiAyMC4xNzI0IDI1LjU3NTMgMjAuMjM5NCAyNS43MjM3IDIwLjI5OThDMjUuODExNyAyMC4zMzU2IDI1Ljg5NDEgMjAuMzY5MSAyNS45NjczIDIwLjM5MzVMMjUuNjM5NCAyMS40NDI3QzI1LjMxMTYgMjEuMjQ2IDI0LjkxODEgMjEuMTgwNCAyNC41MjQ2IDIxLjE4MDRIMjQuNTI0NUMyNC4zMjc4IDIxLjE4MDQgMjQuMTMxMiAyMS4xODA0IDI0LjAwMDEgMjEuMjQ2QzIzLjg2ODkgMjEuMzExNSAyMy43Mzc4IDIxLjM3NzEgMjMuNjA2NyAyMS41MDgzQzIzLjQ3NTUgMjEuNjM5NCAyMy40MDk5IDIxLjgzNjEgMjMuMzQ0MyAyMi4wMzI5QzIzLjI3ODggMjIuMjI5NSAyMy4yNzg4IDIyLjQ5MTggMjMuMjc4OCAyMi44MTk1VjIyLjgxOThWMjMuNjA2NkgyNS4yNDZWMjQuNjU1OEgyMy4yNzg4QzIzLjI3ODggMjQuNzc5NyAyMy4yNjQyIDI0LjkzMjcgMjMuMjQ4NyAyNS4wOTQzWk0xMy45NjcyIDIzLjM0NDNWMjQuNjU1OEg0Ljg1MjQ4QzQuNTkwMTggMjUuNzA1IDMuNjA2NTUgMjYuNDkxOCAyLjQ5MTggMjYuNDkxOEMxLjExNDc1IDI2LjQ5MTggMCAyNS4zNzcxIDAgMjRDMCAyMi42MjMgMS4xMTQ3NSAyMS41MDgyIDIuNDkxOCAyMS41MDgyQzMuNjA2NTUgMjEuNTA4MiA0LjU5MDE4IDIyLjI5NTEgNC44NTI0OCAyMy4zNDQzSDEzLjk2NzJaTTEuMzExNDggMjRDMS4zMTE0OCAyNC42NTU4IDEuODM2MDYgMjUuMTgwNCAyLjQ5MTggMjUuMTgwNEMzLjE0NzU0IDI1LjE4MDQgMy42NzIxNiAyNC42NTU4IDMuNjcyMTYgMjRDMy42NzIxNiAyMy4zNDQzIDMuMTQ3NTQgMjIuODE5NyAyLjQ5MTggMjIuODE5N0MxLjgzNjA2IDIyLjgxOTcgMS4zMTE0OCAyMy4zNDQzIDEuMzExNDggMjRaTTI0LjY1NTggNDMuMTQ3NVYzNC4wMzI3SDIzLjM0NDNWNDMuMTQ3NUMyMi4yOTUyIDQzLjQwOTggMjEuNTA4MiA0NC4zOTM0IDIxLjUwODIgNDUuNTA4MkMyMS41MDgyIDQ2Ljg4NTIgMjIuNjIzIDQ4IDI0LjAwMDEgNDhDMjUuMzc3MSA0OCAyNi40OTE4IDQ2Ljg4NTIgMjYuNDkxOCA0NS41MDgyQzI2LjQ5MTggNDQuMzkzNCAyNS43MDUgNDMuNDc1NCAyNC42NTU4IDQzLjE0NzVaTTI0LjAwMDEgNDYuNjg4NUMyMy4zNDQzIDQ2LjY4ODUgMjIuODE5NyA0Ni4xNjM5IDIyLjgxOTcgNDUuNTA4MkMyMi44MTk3IDQ0Ljg1MjQgMjMuMzQ0MyA0NC4zMjc4IDI0LjAwMDEgNDQuMzI3OEMyNC42NTU4IDQ0LjMyNzggMjUuMTgwNCA0NC44NTI0IDI1LjE4MDQgNDUuNTA4MkMyNS4xODA0IDQ2LjE2MzkgMjQuNjU1OCA0Ni42ODg1IDI0LjAwMDEgNDYuNjg4NVpNNDMuMTQ3NiAyMy4zNDQzQzQzLjQwOTkgMjIuMjk1MSA0NC4zOTM1IDIxLjUwODIgNDUuNTA4MiAyMS41MDgyQzQ2Ljg4NTMgMjEuNTA4MiA0OC4wMDAxIDIyLjYyMyA0OC4wMDAxIDI0QzQ4LjAwMDEgMjUuMzc3MSA0Ni44ODUzIDI2LjQ5MTggNDUuNTA4MiAyNi40OTE4QzQ0LjM5MzUgMjYuNDkxOCA0My40MDk5IDI1LjcwNSA0My4xNDc2IDI0LjY1NThIMzQuMDMyOFYyMy4zNDQzSDQzLjE0NzZaTTQ0LjMyOCAyNEM0NC4zMjggMjQuNjU1OCA0NC44NTI1IDI1LjE4MDQgNDUuNTA4MiAyNS4xODA0QzQ2LjE2NCAyNS4xODA0IDQ2LjY4ODYgMjQuNjU1OCA0Ni42ODg2IDI0QzQ2LjY4ODYgMjMuMzQ0MyA0Ni4xNjQgMjIuODE5NyA0NS41MDgyIDIyLjgxOTdDNDQuODUyNSAyMi44MTk3IDQ0LjMyOCAyMy4zNDQzIDQ0LjMyOCAyNFpNMzEuNjA2NiAxNy4zNzcxTDM4LjAzMjkgMTAuOTUwOUMzOC40MjYzIDExLjE0NzYgMzguODE5NyAxMS4yNzg3IDM5LjI3ODcgMTEuMjc4N0MzOS45MzQ1IDExLjI3ODcgNDAuNTI0NyAxMS4wMTY0IDQxLjA0OTMgMTAuNTU3NEM0Mi4wMzI5IDkuNTczOCA0Mi4wMzI5IDguMDY1NjEgNDEuMDQ5MyA3LjA4MkM0MC4wNjU3IDYuMDk4NCAzOC41NTc0IDYuMDk4NCAzNy41NzM4IDcuMDgyQzM2Ljc4NjkgNy44Njg4OSAzNi42NTU4IDkuMTE0NzkgMzcuMTgwNCAxMC4wMzI4TDMwLjc1NDEgMTYuNDU5MUwzMS42MDY2IDE3LjM3NzFaTTM4LjQyNjMgNy45MzQ0NkMzOC42MjMgNy43Mzc3MyAzOC45NTA5IDcuNjA2NTkgMzkuMjc4NyA3LjYwNjU5QzM5LjYwNjYgNy42MDY1OSAzOS44Njg5IDcuNzM3NzMgNDAuMTMxMiA3LjkzNDQ2QzQwLjU5MDIgOC4zOTM0NyA0MC41OTAyIDkuMTE0NzggNDAuMTMxMiA5LjU3MzhDMzkuNjcyMiAxMC4wMzI4IDM4Ljk1MDkgMTAuMDMyOCAzOC40OTE5IDkuNTczOEMzNy45NjczIDkuMTE0NzggMzcuOTY3MyA4LjM5MzQ3IDM4LjQyNjMgNy45MzQ0NlpNMTAuMDMyOCAzNy4wNDkyTDE2LjQ1OTEgMzAuNjIyOUwxNy40NDI3IDMxLjU0MUwxMS4wMTY0IDM3Ljk2NzJDMTEuNTQxIDM4Ljg4NTIgMTEuNDA5OSA0MC4xMzExIDEwLjYyMyA0MC45MThDMTAuMDk4NCA0MS4zNzcgOS41MDgyOCA0MS42MzkzIDguODUyNTQgNDEuNjM5M0M4LjE5NjgxIDQxLjYzOTMgNy41NDEwMiA0MS4zNzcgNy4wODIgNDAuOTE4QzYuMDk4NCAzOS45MzQ0IDYuMDk4NCAzOC40MjYyIDcuMDgyIDM3LjQ0MjZDNy44Njg4OSAzNi42NTU3IDkuMTE0NzkgMzYuNTI0NiAxMC4wMzI4IDM3LjA0OTJaTTguMDAwMDUgNDAuMDY1NkM4LjQ1OTA3IDQwLjUyNDYgOS4xODAzOCA0MC41MjQ2IDkuNjM5NCA0MC4wNjU2QzEwLjA5ODQgMzkuNjA2NSAxMC4wOTg0IDM4Ljg4NTIgOS42Mzk0IDM4LjQyNjJDOS4xODAzOCAzNy45NjcyIDguNDU5MDcgMzcuOTY3MiA4LjAwMDA1IDM4LjQyNjJDNy41NDEwNCAzOC44ODUyIDcuNTQxMDQgMzkuNjA2NSA4LjAwMDA1IDQwLjA2NTZaTTM4LjAzMjkgMzcuMTE0OEwzMS42MDY2IDMwLjY4ODZMMzAuNjg4NiAzMS42MDY2TDM3LjExNDggMzguMDMyOEMzNi41OTAzIDM4Ljk1MDkgMzYuNzIxNCA0MC4xOTY4IDM3LjUwODMgNDAuOTgzN0MzNy45NjczIDQxLjQ0MjcgMzguNjIzIDQxLjcwNSAzOS4yNzg3IDQxLjcwNUMzOS45MzQ1IDQxLjcwNSA0MC41MjQ3IDQxLjQ0MjcgNDEuMDQ5MyA0MC45ODM3QzQyLjAzMjkgNDAgNDIuMDMyOSAzOC40OTE5IDQxLjA0OTMgMzcuNTA4M0M0MC4xOTY4IDM2LjY1NTggMzguOTUwOSAzNi41OTAyIDM4LjAzMjkgMzcuMTE0OFpNNDAuMDY1NyA0MC4wNjU2QzM5LjYwNjYgNDAuNTI0NiAzOC44ODUzIDQwLjUyNDYgMzguNDI2MyA0MC4wNjU2QzM3Ljk2NzMgMzkuNjA2NiAzNy45NjczIDM4Ljg4NTMgMzguNDI2MyAzOC40MjYzQzM4LjYyMyAzOC4yMjk2IDM4Ljk1MDkgMzguMDk4NCAzOS4yNzg3IDM4LjA5ODRDMzkuNjA2NiAzOC4wOTg0IDM5Ljg2ODkgMzguMjI5NiA0MC4xMzEyIDM4LjQyNjNDNDAuNTI0NyAzOC44ODUzIDQwLjUyNDcgMzkuNjA2NiA0MC4wNjU3IDQwLjA2NTZaTTEwLjAzMjggMTAuODg1MkM5LjYzOTM4IDExLjA4MTkgOS4xODAzNSAxMS4yMTMxIDguNzg2OTEgMTEuMjEzMUM4LjEzMTE3IDExLjIxMzEgNy41NDEwMiAxMS4wMTY0IDcuMDgyIDEwLjQ5MThDNi4wOTg0IDkuNTA4MTYgNi4wOTg0IDcuOTk5OTcgNy4wODIgNy4wMTYzN0M4LjA2NTYxIDYuMDMyNzYgOS41NzM4NCA2LjAzMjc2IDEwLjU1NzQgNy4wMTYzN0MxMS4zNDQzIDcuODAzMjUgMTEuNDc1NSA5LjA0OTE1IDEwLjk1MDkgOS45NjcxOUwxNy4zNzcxIDE2LjM5MzRMMTYuNDU5MSAxNy4zMTE0TDEwLjAzMjggMTAuODg1MlpNOC43ODY5MSA3LjYwNjUzQzguNDU5MDQgNy42MDY1MyA4LjEzMTIyIDcuNzM3NjcgNy45MzQ1IDcuOTM0NEM3LjQ3NTQ4IDguMzkzNDEgNy40NzU0NiA5LjExNDcyIDguMDAwMDUgOS41NzM3NEM4LjQ1OTA3IDEwLjAzMjggOS4xODAzOCAxMC4wMzI4IDkuNjM5NCA5LjU3Mzc0QzEwLjA5ODQgOS4xMTQ3MiAxMC4wOTg0IDguMzkzNDEgOS42Mzk0IDcuOTM0NEM5LjM3NzEgNy43Mzc2NyA5LjExNDc4IDcuNjA2NTMgOC43ODY5MSA3LjYwNjUzWlwiXG4gIH1cbikgfSksIHhGID0gKCkgPT4gLyogQF9fUFVSRV9fICovIGMoXCJzdmdcIiwgeyB2aWV3Qm94OiBcIjAgMCA0OCA0OFwiLCBmaWxsOiBcIm5vbmVcIiwgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiwgY2hpbGRyZW46IC8qIEBfX1BVUkVfXyAqLyBjKFxuICBcInBhdGhcIixcbiAge1xuICAgIGZpbGw6IFwiY3VycmVudENvbG9yXCIsXG4gICAgZmlsbFJ1bGU6IFwiZXZlbm9kZFwiLFxuICAgIGNsaXBSdWxlOiBcImV2ZW5vZGRcIixcbiAgICBkOiBcIk0zMi41NDQ5IDFIMTcuMTY0MVYyLjQ4NjA4SDMyLjU0NDlWMVpNMTEuNTkxMyA0LjEyMDgxQzExLjU5MTMgNS43NTU0OCAxMC4yNTM5IDcuMTY3MjUgOC41NDQ4OSA3LjE2NzI1QzYuODM1OTEgNy4xNjcyNSA1LjQ5ODQ1IDUuNzU1NDggNS40OTg0NSA0LjEyMDgxQzUuNDk4NDUgMi40ODYxMyA2LjgzNTkxIDEuMDc0MzggOC41NDQ4OSAxLjA3NDM4QzEwLjE3OTYgMS4wNzQzOCAxMS41OTEzIDIuNDExODMgMTEuNTkxMyA0LjEyMDgxWk0xMC4xNzk2IDQuMTIwODFDMTAuMTc5NiAzLjIyOTE3IDkuNDM2NTMgMi40ODYxNSA4LjU0NDg5IDIuNDg2MTVDNy42NTMyNSAyLjQ4NjE1IDYuOTg0NTIgMy4yMjkxNyA2LjkxMDIyIDQuMTIwODFDNi45MTAyMiA1LjAxMjQ1IDcuNjUzMjUgNS43NTU0OSA4LjU0NDg5IDUuNzU1NDlDOS40MzY1MyA1Ljc1NTQ5IDEwLjE3OTYgNS4wMTI0NSAxMC4xNzk2IDQuMTIwODFaTTMxLjUwNDYgMTMuODU0NUwzOC42Mzc4IDIwLjM5MzJWMTMuODU0NUg0OFYxNS4zNDA1SDQwLjEyMzhWMjIuMTc2NUgzOC40MTQ5TDMwLjk4NDUgMTUuMzQwNUgwVjEzLjg1NDVIMy40MTc5NlYxMi44ODg1QzMuNDE3OTYgMTAuNDM2NSA1LjEyNjk0IDkuMTczMzcgOC41NDQ4OSA5LjE3MzM3QzExLjk2MjggOS4xNzMzNyAxMy42NzE4IDEwLjQzNjUgMTMuNjcxOCAxMi44ODg1VjEzLjg1NDVIMzEuNTA0NlpNOC41NDQ4OSAxMC42NTk0QzUuMzQ5ODUgMTAuNjU5NCA0LjkwNDAyIDExLjY5OTcgNC45MDQwMiAxMi44ODg1VjEzLjg1NDVIMTIuMTg1OFYxMi44ODg1QzEyLjE4NTggMTEuNzc0IDExLjczOTkgMTAuNjU5NCA4LjU0NDg5IDEwLjY1OTRaTTQ4IDUuMzA5NjNIMTcuMTY0MVY2Ljc5NTdINDhWNS4zMDk2M1pNMTcuMTY0MSA5LjU0NDg5SDQ4VjExLjAzMUgxNy4xNjQxVjkuNTQ0ODlaTTM5LjM4MDggMzMuMDI0OEM0Mi43OTg4IDMzLjAyNDggNDQuNTA3NyAzNC4yODggNDQuNTA3NyAzNi43NFYzNy43MDZINDhWMzkuMTkySDE3LjAxNTVMOS41ODUxNCA0Ni4wMjc5SDcuODc2MTZWMzkuMTkySDBWMzcuNzA2SDkuMjg3OTNWNDQuMjQ0N0wxNi40MjExIDM3LjcwNkgzNC4yNTM5VjM2Ljc0QzM0LjI1MzkgMzQuMjg4IDM1Ljk2MjggMzMuMDI0OCAzOS4zODA4IDMzLjAyNDhaTTM5LjM4MDggMzQuNTEwOUMzNi4xODU4IDM0LjUxMDkgMzUuNzM5OSAzNS41NTEyIDM1LjczOTkgMzYuNzRWMzcuNzA2SDQzLjAyMTdWMzYuNzRDNDMuMDIxNyAzNS42MjU1IDQyLjU3NTggMzQuNTEwOSAzOS4zODA4IDM0LjUxMDlaTTQyLjQyNzIgMjcuOTcyMUM0Mi40MjcyIDI2LjI2MzEgNDEuMDE1NSAyNC45MjU3IDM5LjM4MDggMjQuOTI1N0MzNy42NzE4IDI0LjkyNTcgMzYuMzM0NCAyNi4zMzc0IDM2LjMzNDQgMjcuOTcyMUMzNi4zMzQ0IDI5LjY4MTEgMzcuNzQ2MSAzMS4wMTg1IDM5LjM4MDggMzEuMDE4NUM0MS4wODk4IDMxLjA5MjggNDIuNDI3MiAyOS42ODExIDQyLjQyNzIgMjcuOTcyMVpNMzcuNzQ2MSAyNy45NzIxQzM3Ljc0NjEgMjcuMDgwNSAzOC40ODkyIDI2LjMzNzQgMzkuMzgwOCAyNi4zMzc0QzQwLjI3MjQgMjYuMzM3NCA0MS4wMTU1IDI3LjA4MDUgNDEuMDE1NSAyNy45NzIxQzQxLjAxNTUgMjguODYzNyA0MC4yNzI0IDI5LjYwNjggMzkuMzgwOCAyOS42MDY4QzM4LjQ4OTIgMjkuNjA2OCAzNy43NDYxIDI4Ljg2MzcgMzcuNzQ2MSAyNy45NzIxWk0wIDI5LjE2MDlIMzAuODM1OVYzMC42NDdIMFYyOS4xNjA5Wk0zMC44MzU5IDMzLjQ3MDZIMFYzNC45NTY2SDMwLjgzNTlWMzMuNDcwNlpNMCAyNC45MjU3SDE1LjM4MDhWMjYuNDExN0gwVjI0LjkyNTdaXCJcbiAgfVxuKSB9KSwgV0YgPSAoKSA9PiAvKiBAX19QVVJFX18gKi8gYyhcInN2Z1wiLCB7IHZpZXdCb3g6IFwiMCAwIDQ4IDQ4XCIsIGZpbGw6IFwibm9uZVwiLCB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLCBjaGlsZHJlbjogLyogQF9fUFVSRV9fICovIGMoXG4gIFwicGF0aFwiLFxuICB7XG4gICAgZmlsbDogXCJjdXJyZW50Q29sb3JcIixcbiAgICBmaWxsUnVsZTogXCJldmVub2RkXCIsXG4gICAgY2xpcFJ1bGU6IFwiZXZlbm9kZFwiLFxuICAgIGQ6IFwiTTE1LjgzNjYgNC43MDcyOEMxNS44MzY2IDcuNDE3NTMgMTMuNzY4MiAxMC42MjcgMTEuMTI5MyAxMC42MjdDOC41NjE2OSAxMC42MjcgNi40MjE5NSA3LjQxNzUzIDYuNDIxOTUgNC43MDcyOEM2LjQyMTk1IDIuMTM5NjcgOC41NjE2OSAwIDExLjEyOTMgMEMxMy42OTY5IDAgMTUuODM2NiAyLjEzOTY3IDE1LjgzNjYgNC43MDcyOFpNMTQuNTUyNyA0LjcwNzI4QzE0LjU1MjcgMi44NTI5IDEzLjA1NSAxLjI4MzggMTEuMTI5MyAxLjI4MzhDOS4yNzQ5MiAxLjI4MzggNy43MDU3OSAyLjg1MjkgNy43MDU3OSA0LjcwNzI4QzcuNzA1NzkgNi43MDQzIDkuMzQ2MjQgOS4zNDMyMyAxMS4xMjkzIDkuMzQzMjNDMTIuOTEyNCA5LjM0MzIzIDE0LjU1MjcgNi43MDQzIDE0LjU1MjcgNC43MDcyOFpNNDEuNDQxMyA0LjcwNzI4QzQxLjQ0MTMgNy40MTc1MyAzOS4zNzI5IDEwLjYyNyAzNi43MzQgMTAuNjI3QzM0LjE2NjQgMTAuNjI3IDMyLjAyNjcgNy40MTc1MyAzMi4wMjY3IDQuNzA3MjhDMzIuMDI2NyAyLjEzOTY3IDM0LjE2NjQgMCAzNi43MzQgMEMzOS4zMDE2IDAgNDEuNDQxMyAyLjEzOTY3IDQxLjQ0MTMgNC43MDcyOFpNNDAuMTU3NSA0LjcwNzI4QzQwLjE1NzUgMi44NTI5IDM4LjY1OTcgMS4yODM4IDM2LjczNCAxLjI4MzhDMzQuODc5NiAxLjI4MzggMzMuMzEwNSAyLjg1MjkgMzMuMzEwNSA0LjcwNzI4QzMzLjMxMDUgNi43MDQzIDM0Ljk1MDkgOS4zNDMyMyAzNi43MzQgOS4zNDMyM0MzOC41MTcgOS4zNDMyMyA0MC4xNTc1IDYuNzA0MyA0MC4xNTc1IDQuNzA3MjhaTTM4LjU4ODQgMTIuMTk2MkgzNi4wOTIxVjEzLjQ4SDM4LjU4ODRDNDEuODY5MiAxMy40OCA0NC41Nzk0IDE2LjE5MDMgNDQuNTc5NCAxOS40NzExVjI4LjY3MTdDNDQuNTc5NCAyOS4zMTM2IDQ0LjA4MDIgMjkuODEyOCA0My40MzgzIDI5LjgxMjhDNDIuNzk2NCAyOS44MTI4IDQyLjI5NzEgMjkuMzEzNiA0Mi4yOTcxIDI4LjY3MTdWMjEuNjgyMVYxOS4zOTk4SDQxLjAxMzNWMjEuNjEwOFYyOC42NzE3VjQ2LjM1OTZDNDEuMDEzMyA0Ni41MDIzIDQwLjg3MDcgNDYuNjQ0OSA0MC43MjgxIDQ2LjY0NDlIMzcuMzc1OVYyOC42NzE3SDM2LjA5MjFWNDYuNzE2MkgzMi43Mzk5QzMyLjU5NzMgNDYuNzE2MiAzMi40NTQ2IDQ2LjU3MzYgMzIuNDU0NiA0Ni40MzA5VjI4LjY3MTdWMjcuMzE2NUgzMS4xNzA5VjI4LjY3MTdDMzEuMTcwOSAyOS4zMTM2IDMwLjY3MTYgMjkuODEyOCAzMC4wMjk3IDI5LjgxMjhDMjkuMzg3OCAyOS44MTI4IDI4Ljg4ODUgMjkuMzEzNiAyOC44ODg1IDI4LjY3MTdWMjcuMzE2NUgyNy42MDQ4VjI4LjY3MTdDMjcuNjA0OCAzMC4wMjY4IDI4LjY3NDYgMzEuMDk2NiAzMC4wMjk3IDMxLjA5NjZDMzAuNDU3NiAzMS4wOTY2IDMwLjgxNDIgMzAuOTU0IDMxLjE3MDggMzAuODExNEwzMS4xNzA5IDMwLjgxMTNWNDYuNDMwOUMzMS4xNzA5IDQ3LjI4NjggMzEuODg0MSA0OCAzMi43Mzk5IDQ4SDM2LjA5MjFIMzYuNzM0SDQwLjcyODFDNDEuNTg0IDQ4IDQyLjI5NzEgNDcuMjg2OCA0Mi4yOTcxIDQ2LjQzMDlWMzAuNzRDNDIuNjUzOCAzMC45NTQgNDMuMDEwNCAzMS4wMjUzIDQzLjQzODMgMzEuMDI1M0M0NC43OTM0IDMxLjAyNTMgNDUuODYzMyAyOS45NTU1IDQ1Ljg2MzMgMjguNjAwM1YxOS40NzExQzQ1Ljg2MzMgMTUuNDc3IDQyLjU4MjUgMTIuMTk2MiAzOC41ODg0IDEyLjE5NjJaTTE3LjgzMzUgMjkuODEyOEMxOC40NzU0IDI5LjgxMjggMTguOTc0OCAyOS4zMTM2IDE4Ljk3NDggMjguNjcxN1YyNy4yNDUySDIwLjI1ODVWMjguNjAwM0MyMC4yNTg1IDI5Ljk1NTUgMTkuMTg4NyAzMS4wMjUzIDE3LjgzMzUgMzEuMDI1M0MxNy40MDU2IDMxLjAyNTMgMTcuMDQ5IDMwLjk1NCAxNi42OTI0IDMwLjc0VjQ2LjQzMDlDMTYuNjkyNCA0Ny4yODY4IDE1Ljk3OTIgNDggMTUuMTIzMyA0OEgxMS4xMjkzSDEwLjQ4NzRINy4xMzUxOEM2LjI3OTMxIDQ4IDUuNTY2MTIgNDcuMjg2OCA1LjU2NjEyIDQ2LjQzMDlWMzAuODExM0w1LjU2NjA2IDMwLjgxMTRDNS4yMDk0NyAzMC45NTQgNC44NTI4OSAzMS4wOTY2IDQuNDI0OTggMzEuMDk2NkMzLjA2OTg1IDMxLjA5NjYgMiAzMC4wMjY4IDIgMjguNjcxN1YxOS40NzExQzIgMTUuNDc3IDUuMjgwNzkgMTIuMTk2MiA5LjI3NDg1IDEyLjE5NjJIMTEuNzcxMVYxMy40OEg5LjI3NDg1QzUuOTk0MDIgMTMuNDggMy4yODM4NCAxNi4xOTAzIDMuMjgzODQgMTkuNDcxMVYyOC42NzE3QzMuMjgzODQgMjkuMzEzNiAzLjc4MzA4IDI5LjgxMjggNC40MjQ5OCAyOS44MTI4QzUuMDY2ODggMjkuODEyOCA1LjU2NjEyIDI5LjMxMzYgNS41NjYxMiAyOC42NzE3VjIxLjYxMDhWMTkuMzk5OEg2Ljg0OTk2VjIxLjY4MjFWMjguNjcxN1Y0Ni40MzA5QzYuODQ5OTYgNDYuNTczNiA2Ljk5MjUzIDQ2LjcxNjIgNy4xMzUxOCA0Ni43MTYySDEwLjQ4NzRWMjguNjcxN0gxMS43NzExVjQ2LjY0NDlIMTUuMTIzM0MxNS4yNjYgNDYuNjQ0OSAxNS40MDg2IDQ2LjUwMjMgMTUuNDA4NiA0Ni4zNTk2VjI4LjY3MTdWMjcuMzE2NUgxNi42OTI0VjI4LjY3MTdDMTYuNjkyNCAyOS4zMTM2IDE3LjE5MTYgMjkuODEyOCAxNy44MzM1IDI5LjgxMjhaTTM0LjUyMyAyNC44MjAyVjEzLjMzNzNDMzQuNTIzIDEyLjc2NjcgMzQuMDIzNyAxMi4yNjc0IDMzLjQ1MzIgMTIuMjY3NEgxNC40ODE0QzEzLjkxMDggMTIuMjY3NCAxMy40MTE2IDEyLjc2NjcgMTMuNDExNiAxMy4zMzczVjI0LjgyMDJDMTMuNDExNiAyNS4zOTA3IDEzLjkxMDggMjUuODkgMTQuNDgxNCAyNS44OUgyMS42ODVMMjMuOTY3MyAyOC4xNzIzTDI2LjI0OTYgMjUuODlIMzMuNDUzMkMzNC4wOTUxIDI1Ljg5IDM0LjUyMyAyNS40NjIxIDM0LjUyMyAyNC44MjAyWk0zMy4zMTA1IDI0LjY3NzVIMjUuNzUwNEwyNC4wMzg2IDI2LjM4OTJMMjIuMzI2OSAyNC42Nzc1SDE0Ljc2NjdWMTMuNDc5OUgzMy4zODE4VjI0LjY3NzVIMzMuMzEwNVpNMTkuNTQ1MyAxOC40MDEySDIxLjMyODRWMTkuNjg1SDE5LjU0NTNWMTguNDAxMlpNMjQuODk0NSAxOC40MDEySDIzLjExMTRWMTkuNjg1SDI0Ljg5NDVWMTguNDAxMlpNMjYuNjA2MiAxOC40MDEySDI4LjM4OTNWMTkuNjg1SDI2LjYwNjJWMTguNDAxMlpcIlxuICB9XG4pIH0pLCBSRiA9ICgpID0+IC8qIEBfX1BVUkVfXyAqLyBjKFwic3ZnXCIsIHsgdmlld0JveDogXCIwIDAgNDggNDhcIiwgZmlsbDogXCJub25lXCIsIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsIGNoaWxkcmVuOiAvKiBAX19QVVJFX18gKi8gYyhcbiAgXCJwYXRoXCIsXG4gIHtcbiAgICBmaWxsOiBcImN1cnJlbnRDb2xvclwiLFxuICAgIGZpbGxSdWxlOiBcImV2ZW5vZGRcIixcbiAgICBjbGlwUnVsZTogXCJldmVub2RkXCIsXG4gICAgZDogXCJNNy4zMjIwNSAxMi43Njg5SDQ2LjAwM0M0Ny4xMTI0IDEyLjc2ODkgNDcuOTI2IDEzLjY1NjQgNDggMTQuNTQzOVYzNy45ODkyQzQ4IDM5LjAyNDcgNDcuMTEyNCAzOS45MTIyIDQ2LjA3NyAzOS45MTIySDcuMzk1OTlDNi4zNjA1NSAzOS45MTIyIDUuNDczMDUgMzkuMDI0NyA1LjQ3MzA1IDM3Ljk4OTJWMjEuMzQ4MkgxLjI1NzI4VjMxLjcwMjZDMS4yNTcyOCAzMi4yOTQzIDEuNzc1IDMyLjgxMiAyLjM2NjY4IDMyLjgxMkg0LjI4OTYyVjM0LjE0MzNIMi4zNjY2OEMxLjEwOTM2IDM0LjE0MzMgMCAzMy4xMDc4IDAgMzEuNzc2NlYyMS40MjIyVjE0LjYxNzlWOS4zNjY3M0MwIDguMTA5NDEgMS4wMzU0IDcgMi4zNjY2OCA3SDM5LjU2ODZDNDAuODI1OSA3IDQxLjkzNTIgOC4wMzU0NSA0MS45MzUyIDkuMzY2NzNWMTEuNjU5NUg0MC42MDRWOS4zNjY3M0M0MC42MDQgOC43NzUwNSA0MC4wODYzIDguMjU3MzMgMzkuNDk0NiA4LjI1NzMzSDIuMjkyNzRDMS43MDEwNiA4LjI1NzMzIDEuMTgzMzQgOC43NzUwNSAxLjE4MzM0IDkuMzY2NzNWMTQuNjE3OUg1LjM5OTAyQzUuNDcyOTggMTMuNTgyNCA2LjI4NjYxIDEyLjc2ODkgNy4zMjIwNSAxMi43Njg5Wk0xLjI1NzI4IDE1Ljg3NTJWMjAuMDkwOUg1LjQ3MzA1VjE1Ljg3NTJIMS4yNTcyOFpNNDYuMDAzIDM4LjY1NDhDNDYuMjk4OSAzOC42NTQ4IDQ2LjU5NDcgMzguMzU5IDQ2LjU5NDcgMzguMDYzMlYxNC42OTE4QzQ2LjU5NDcgMTQuMzk2IDQ2LjI5ODkgMTQuMTAwMiA0Ni4wMDMgMTQuMTAwMkg3LjMyMjA1QzcuMDI2MjEgMTQuMTAwMiA2LjczMDMzIDE0LjM5NiA2LjczMDMzIDE0LjY5MThWMjEuNDIyMlYzOC4wNjMyQzYuNzMwMzMgMzguMzU5IDcuMDI2MjEgMzguNjU0OCA3LjMyMjA1IDM4LjY1NDhINDYuMDAzWk00Mi4xNTcyIDI4LjY3MDJIMzYuODMyQzM1Ljk0NDUgMjguNjcwMiAzNS4xMzEgMjcuODU2NyAzNS4xMzEgMjYuOTY5MlYyMy40OTMxQzM1LjEzMSAyMi41MzE2IDM1Ljg3MDUgMjEuNzkyIDM2LjgzMiAyMS43OTJINDIuMTU3MkM0My4xMTg2IDIxLjc5MiA0My44NTgyIDIyLjUzMTYgNDMuODU4MiAyMy40OTMxVjI2Ljk2OTJDNDMuODU4MiAyNy45MzA3IDQzLjExODYgMjguNjcwMiA0Mi4xNTcyIDI4LjY3MDJaTTM2LjgzMiAyMy4xMjMzQzM2LjYxMDEgMjMuMTIzMyAzNi40NjIyIDIzLjI3MTIgMzYuNDYyMiAyMy40OTMxVjI2Ljk2OTJDMzYuNDYyMiAyNy4xOTExIDM2LjYxMDEgMjcuMzM5IDM2LjgzMiAyNy4zMzlINDIuMTU3MkM0Mi4zNzkgMjcuMzM5IDQyLjUyNyAyNy4xOTExIDQyLjUyNyAyNi45NjkyVjIzLjQ5MzFDNDIuNTI3IDIzLjI3MTIgNDIuMzc5IDIzLjEyMzMgNDIuMTU3MiAyMy4xMjMzSDM2LjgzMlpNMTEuMDk0IDI3LjMzOUg5LjI0NDk5VjI4LjY3MDJIMTEuMDk0VjI3LjMzOVpNMTIuOTQzIDI3LjMzOUgxNC43OTJWMjguNjcwMkgxMi45NDNWMjcuMzM5Wk0xOC40OSAyNy4zMzlIMTYuNjQxVjI4LjY3MDJIMTguNDlWMjcuMzM5Wk05LjI0NDk5IDMyLjgxMTlINDQuMDgwMVYzNC4xNDMySDkuMjQ0OTlWMzIuODExOVpcIlxuICB9XG4pIH0pLCBCRiA9ICgpID0+IC8qIEBfX1BVUkVfXyAqLyBjKFwic3ZnXCIsIHsgdmlld0JveDogXCIwIDAgNDggNDhcIiwgZmlsbDogXCJub25lXCIsIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsIGNoaWxkcmVuOiAvKiBAX19QVVJFX18gKi8gYyhcbiAgXCJwYXRoXCIsXG4gIHtcbiAgICBmaWxsOiBcImN1cnJlbnRDb2xvclwiLFxuICAgIGZpbGxSdWxlOiBcImV2ZW5vZGRcIixcbiAgICBjbGlwUnVsZTogXCJldmVub2RkXCIsXG4gICAgZDogXCJNMCAyNEMwIDEwLjc0MjkgMTAuODE5IDAgMjQgMEMzNy4yNTcxIDAgNDggMTAuNzQyOSA0Ny45MjM4IDI0LjA3NjJDNDcuOTIzOCAyNS41MjM4IDQ3Ljg0NzYgMjcuMDQ3NiA0Ny41NDI4IDI4LjQ5NTJMNDYuMDk1MiAyOC4xOTA1QzQ2LjMyMzggMjcuMDQ3NiA0Ni40NzYyIDI1LjkwNDggNDYuNDc2MiAyNC43NjE5SDM2LjU3MTRDMzYuNTcxNCAyNS4xMTQ5IDM2LjU1MTIgMjUuNDY3OCAzNi41MzE2IDI1LjgxMDRDMzYuNTEzMiAyNi4xMzMzIDM2LjQ5NTIgMjYuNDQ3MSAzNi40OTUyIDI2Ljc0MjlMMzQuOTcxNCAyNi42NjY3QzM1LjA0NzYgMjYuMDU3MSAzNS4wNDc2IDI1LjM3MTQgMzUuMDQ3NiAyNC43NjE5SDI0Ljc2MTlWMzMuNDQ3NkMyNS4wNjExIDMzLjQ3MjUgMjUuMzYwMiAzMy40ODkzIDI1LjY1NjggMzMuNTA1OUMyNi4yNjY0IDMzLjU0MDEgMjYuODY0NyAzMy41NzM3IDI3LjQyODYgMzMuNjc2MkwyNy4yIDM1LjJDMjcuMTM1MiAzNS4xOTQxIDI3LjA3MDkgMzUuMTg4MiAyNy4wMDcgMzUuMTgyNEMyNi4yNDM3IDM1LjExMjUgMjUuNTM1MiAzNS4wNDc2IDI0Ljc2MTkgMzUuMDQ3NlY0Ni40NzYyQzI2LjIwOTUgNDYuNCAyNy41ODEgNDYuMjQ3NiAyOC45NTI0IDQ1Ljk0MjhMMjkuMjU3MSA0Ny4zOTA1QzI3LjUwNDcgNDcuNzcxNCAyNS43NTI0IDQ4IDI0IDQ4QzEwLjc0MjkgNDggMCAzNy4xODEgMCAyNFpNMTMuNTYxOSAxMC40MzgxQzE0Ljg1NzEgNi43ODA5NCAxNi42MDk1IDMuOTYxOSAxOC43NDI4IDIuMTMzMzJDMTUuMjM4MSAyLjk3MTQyIDEyLjAzODEgNC42NDc2MiA5LjM3MTQyIDYuOTMzMzRDMTAuNDM4MSA4LjMwNDc3IDExLjg4NTcgOS41MjM4IDEzLjU2MTkgMTAuNDM4MVpNMTMuMDI4NiAxMS44MDk1QzExLjEyMzggMTAuODE5IDkuNDQ3NjEgOS40NDc2MSA4LjIyODU2IDcuOTIzODFDNC4yNjY2NiAxMS44ODU3IDEuNzUyMzYgMTcuMjE5IDEuNTk5OTggMjMuMTYxOUgxMS4zNTI0QzExLjQyODUgMTguOTcxNCAxMi4wMzgxIDE1LjE2MTkgMTMuMDI4NiAxMS44MDk1Wk0xLjUyMzgxIDI0LjY4NTdDMS43NTIzOCAzMC42Mjg2IDQuMjY2NjYgMzYuMDM4MSA4LjIyODU2IDM5LjkyMzhDOS41MjM4IDM4LjQgMTEuMTIzOCAzNy4wMjg2IDEzLjAyODYgMzUuOTYxOUMxMi4wMzgxIDMyLjY4NTcgMTEuNDI4NSAyOC44IDExLjM1MjQgMjQuNjg1N0gxLjUyMzgxWk0xMy41NjE5IDM3LjQ4NTdDMTEuODg1NyAzOC40IDEwLjQzODEgMzkuNjE5IDkuMzcxNDIgNDAuOTkwNUMxMi4wMzgxIDQzLjI3NjIgMTUuMjM4MSA0NC44NzYyIDE4Ljc0MjggNDUuNzkwNUMxNi42MDk1IDQzLjk2MTkgMTQuODU3MSA0MS4wNjY3IDEzLjU2MTkgMzcuNDg1N1pNMTQuOTMzMyAzNi43MjM4QzE2Ljc2MTkgNDIuMjA5NSAxOS44MDk1IDQ1Ljg2NjcgMjMuMjM4MSA0Ni4zMjM4VjM0Ljg5NTJDMjAuMjY2NyAzNC45NzE0IDE3LjM3MTQgMzUuNTgwOSAxNC45MzMzIDM2LjcyMzhaTTE0LjQ3NjIgMzUuMzUyNEMxNy4wNjY3IDM0LjIwOTUgMjAuMDM4MSAzMy41MjM4IDIzLjIzODEgMzMuNDQ3NlYyNC43NjE5SDEyLjk1MjRDMTMuMDI4NiAyOC41NzE0IDEzLjU2MTkgMzIuMjI4NiAxNC40NzYyIDM1LjM1MjRaTTEyLjk1MjQgMjMuMTYxOUgyMy4yMzgxVjE0LjRDMjAuMTE0MyAxNC4zMjM4IDE3LjA2NjcgMTMuNjM4MSAxNC40NzYyIDEyLjQ5NTJDMTMuNTYxOSAxNS42OTUyIDEzLjAyODYgMTkuMjc2MiAxMi45NTI0IDIzLjE2MTlaTTE0LjkzMzMgMTEuMTIzOEMxNy4zNzE0IDEyLjE5MDUgMjAuMTkwNSAxMi44NzYyIDIzLjIzODEgMTIuOTUyNFYxLjZDMTkuODA5NSAyLjA1NzE1IDE2LjgzODEgNS43MTQyOSAxNC45MzMzIDExLjEyMzhaTTM0LjQzODEgMTAuNDM4MUMzNi4xMTQzIDkuNDQ3NjEgMzcuNTYxOSA4LjMwNDc3IDM4LjYyODUgNi45MzMzNEMzNS45NjE5IDQuNjQ3NjIgMzIuNzYxOSAyLjk3MTQyIDI5LjI1NzEgMi4yMDk1MkMzMS4zOTA0IDMuOTYxOSAzMy4xNDI4IDYuODU3MTMgMzQuNDM4MSAxMC40MzgxWk0zMy4wNjY2IDExLjA0NzZDMzEuMjM4MSA1LjYzODEgMjguMTkwNSAxLjk4MDk1IDI0Ljc2MTkgMS41MjM4MVYxMi44NzYyQzI3LjczMzMgMTIuOCAzMC42Mjg1IDEyLjE5MDUgMzMuMDY2NiAxMS4wNDc2Wk0yNC43NjE5IDE0LjRWMjMuMDg1N0gzNS4wNDc2QzM0Ljk3MTQgMTkuMjc2MiAzNC40MzgxIDE1LjYxOSAzMy41MjM4IDEyLjQ5NTJDMzAuOTMzMyAxMy42MzgxIDI3Ljk2MTkgMTQuMzIzOCAyNC43NjE5IDE0LjRaTTM0Ljg5NTIgMTEuODA5NUMzNS44ODU3IDE1LjE2MTkgMzYuNDk1MiAxOS4wNDc2IDM2LjU3MTQgMjMuMTYxOVYyMy4wODU3SDQ2LjRDNDYuMTcxNCAxNy4xNDI4IDQzLjY1NzEgMTEuNzMzMyAzOS42OTUyIDcuODQ3NjFDMzguNDc2MiA5LjQ0NzYxIDM2LjggMTAuNzQyOSAzNC44OTUyIDExLjgwOTVaTTM4LjA5NTIgMjguNDk1MkMzMi45MTQzIDI4LjQ5NTIgMjguNzIzOCAzMi42ODU2IDI4LjcyMzggMzcuODY2NkMyOC43MjM4IDQzLjA0NzUgMzIuOTE0MyA0Ny4yMzggMzguMDk1MiA0Ny4yMzhDNDMuMjc2MiA0Ny4yMzggNDcuNDY2NyA0My4wNDc1IDQ3LjQ2NjcgMzcuODY2NkM0Ny40NjY3IDMyLjY4NTYgNDMuMiAyOC40OTUyIDM4LjA5NTIgMjguNDk1MlpNMzguMDk1MiA0NS43MTQyQzMzLjc1MjQgNDUuNzE0MiAzMC4yNDc2IDQyLjIwOTQgMzAuMjQ3NiAzNy44NjY2QzMwLjI0NzYgMzMuNTIzNyAzMy43NTI0IDMwLjAxOSAzOC4wOTUyIDMwLjAxOUM0Mi40MzgxIDMwLjAxOSA0NS45NDI4IDMzLjUyMzcgNDUuOTQyOCAzNy44NjY2QzQ1Ljk0MjggNDIuMjA5NCA0Mi40MzgxIDQ1LjcxNDIgMzguMDk1MiA0NS43MTQyWk0zNy4xMDQ3IDM5LjMxNDRDMzcuMTA0NyAzOS4xMTMzIDM3LjEyNiAzOC44OTA5IDM3LjE0NiAzOC42ODFWMzguNjgxQzM3LjE2NCAzOC40OTMyIDM3LjE4MDkgMzguMzE1NCAzNy4xODA5IDM4LjE3MTVIMzkuNDY2N1YzNi45NTI0SDM3LjE4MDlWMzYuMDM4MlYzNi4wMzc5QzM3LjE4MDkgMzUuNjU3MSAzNy4xODA5IDM1LjM1MjQgMzcuMjU3MSAzNS4xMjM5QzM3LjMzMzMgMzQuODk1MyAzNy40MDk1IDM0LjY2NjcgMzcuNTYxOSAzNC41MTQzQzM3LjcxNDMgMzQuMzYyIDM3Ljg2NjYgMzQuMjg1OCAzOC4wMTkgMzQuMjA5NkMzOC4xNzE0IDM0LjEzMzQgMzguNCAzNC4xMzM0IDM4LjYyODUgMzQuMTMzNEMzOS4wODU3IDM0LjEzMzQgMzkuNTQyOCAzNC4yMDk2IDM5LjkyMzggMzQuNDM4Mkw0MC4zMDQ3IDMzLjIxOTFDNDAuMjE5NiAzMy4xOTA4IDQwLjEyNCAzMy4xNTE4IDQwLjAyMTcgMzMuMTEwMkw0MC4wMjE3IDMzLjExMDJDMzkuODQ5MiAzMy4wNCAzOS42NTc5IDMyLjk2MjIgMzkuNDY2NyAzMi45MTQzQzM5LjE2MiAzMi44MzgyIDM4Ljg1NzMgMzIuODM4MiAzOC40NzY1IDMyLjgzODJIMzguNDc2MkMzOC4wMTkgMzIuODM4MiAzNy42MzgxIDMyLjkxNDMgMzcuMzMzMyAzMi45OTA1QzM2Ljk1MjQgMzMuMDY2NyAzNi42NDc2IDMzLjI5NTMgMzYuNDE5IDMzLjUyMzlDMzYuMTkwNSAzMy43NTI0IDM1Ljk2MTkgMzQuMTMzNCAzNS44MDk1IDM0LjUxNDNDMzUuNjU3MSAzNC45NzE1IDM1LjU4MDkgMzUuNTA0OCAzNS41ODA5IDM2LjExNDNWMzYuOTUyNEgzNC40MzgxVjM4LjE3MTVIMzUuNTgwOUMzNS41ODA5IDM5LjMxNDQgMzUuNDI4NSA0MC41MzM0IDM1LjIgNDEuODI4Nkg0MC40NTcxVjQwLjUzMzRIMzYuOTUyNEMzNy4wMjg2IDQwLjE1MjQgMzcuMTA0NyAzOS42OTUzIDM3LjEwNDcgMzkuMzE0NFpcIlxuICB9XG4pIH0pLCBTRiA9ICgpID0+IC8qIEBfX1BVUkVfXyAqLyBjKFwic3ZnXCIsIHsgdmlld0JveDogXCIwIDAgNDggNDhcIiwgZmlsbDogXCJub25lXCIsIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsIGNoaWxkcmVuOiAvKiBAX19QVVJFX18gKi8gYyhcbiAgXCJwYXRoXCIsXG4gIHtcbiAgICBmaWxsOiBcImN1cnJlbnRDb2xvclwiLFxuICAgIGZpbGxSdWxlOiBcImV2ZW5vZGRcIixcbiAgICBjbGlwUnVsZTogXCJldmVub2RkXCIsXG4gICAgZDogXCJNNDMuMDMyMiAzMC4yNTgxSDQ0LjMyMjZINDQuNDUxNlYzNS42Nzc0SDQ3LjgwNjRWMzcuODA2NEM0Ny44MDY0IDM5LjI5MDMgNDYuNTgwNiA0MC40NTE2IDQ1LjE2MTMgNDAuNDUxNkgyLjY0NTE2QzEuMTYxMjkgNDAuNDUxNiAwIDM5LjIyNTggMCAzNy44MDY0VjM1LjY3NzRIMy4zNTQ4NVYxMC4xOTM1QzMuMzU0ODUgOC45Njc3NCA0LjMyMjU4IDggNS41NDgzOSA4SDQyLjE5MzVDNDMuNDE5NCA4IDQ0LjM4NzEgOC45Njc3NCA0NC4zODcxIDEwLjE5MzVWMTQuNzA5N0g0My4wOTY4VjEwLjE5MzVDNDMuMDk2OCA5LjY3NzQxIDQyLjY0NTIgOS4yMjU4IDQyLjEyOSA5LjIyNThINS40ODM4N0M0Ljk2Nzc0IDkuMjI1OCA0LjUxNjEzIDkuNjc3NDEgNC41MTYxMyAxMC4xOTM1VjM1LjY3NzRINDMuMDMyMlYzMC4yNTgxWk00NS4wMzIzIDM5LjE2MTNDNDUuODA2NCAzOS4xNjEzIDQ2LjM4NzEgMzguNTgwNiA0Ni4zODcxIDM3LjgwNjRWMzYuOTAzMkgxLjE2MTNWMzcuODA2NEMxLjE2MTMgMzguNTgwNiAxLjc0MTk1IDM5LjE2MTMgMi41MTYxNCAzOS4xNjEzSDQ1LjAzMjNaTTMwIDE1LjkzNTVWMThIMjUuMjkwM1YxOS4yOTAzSDMwLjA2NDVWMjAuMzIyNkgzMS4zNTQ4VjE5LjI5MDNWMTguNjQ1MlYxNy43NDE5TDM5LjAzMjIgMjMuMDk2N0w0Ni43MDk3IDE3Ljc0MTlWMjcuODcxSDMxLjM1NDhWMjUuODA2NEgyMy40ODM5VjI3LjA5NjhIMzAuMDY0NVYyOS4xNjEzSDQ4VjE1LjkzNTVIMzBaTTMyLjY0NTIgMTcuMTYxM0g0NS4yMjU4TDM4Ljk2NzcgMjEuNTQ4NEwzMi42NDUyIDE3LjE2MTNaTTIxLjc0MTkgMjUuNzQxOUgyMC4wNjQ1VjI3LjAzMjNIMjEuNzQxOVYyNS43NDE5Wk0yMS44NzEgMTcuOTM1NEgyMy41NDg0VjE5LjIyNTdIMjEuODcxVjE3LjkzNTRaTTMxLjI5MDMgMjQuMTkzNVYyMy4wOTY3VjIyLjQ1MTZWMjEuODcxSDE4LjA2NDVWMjMuMDk2N0gzMFYyNC4xOTM1SDMxLjI5MDNaXCJcbiAgfVxuKSB9KSwgRUYgPSAoKSA9PiAvKiBAX19QVVJFX18gKi8gYyhcInN2Z1wiLCB7IHZpZXdCb3g6IFwiMCAwIDQ4IDQ4XCIsIGZpbGw6IFwibm9uZVwiLCB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLCBjaGlsZHJlbjogLyogQF9fUFVSRV9fICovIGMoXG4gIFwicGF0aFwiLFxuICB7XG4gICAgZmlsbDogXCJjdXJyZW50Q29sb3JcIixcbiAgICBmaWxsUnVsZTogXCJldmVub2RkXCIsXG4gICAgY2xpcFJ1bGU6IFwiZXZlbm9kZFwiLFxuICAgIGQ6IFwiTTMwLjYyMjggNVYxNy4wMzA0SDMyLjY4ODZWMjAuNjE1MkgzMy42NjA4TDM3LjEyNDEgMTcuMDMwNEg0OFY1SDMwLjYyMjhaTTQ2Ljg0NTYgMTUuODE1MkgzNi42MzhMMzMuOTAzOCAxOC42NzA5VjE1LjgxNTJIMzEuODM4VjYuMjE1MTlINDYuODQ1NlYxNS44MTUyWk0zOS4xODk5IDE4LjY3MDlIMzcuOTc0N1YzOC4zNTdIMzYuMDkxMVYzNS44MDUxQzM2LjA5MTEgMzUuNzk5NyAzNi4wOTE5IDM1Ljc4ODIgMzYuMDkyOSAzNS43NzExQzM2LjExNiAzNS40MDA2IDM2LjMwNSAzMi4zNzE4IDMzLjA1MzIgMzAuMzk3NUMzMS4xNjk2IDI5LjI0MyAyOC4zNzQ3IDI4LjI3MDkgMjYuMzA4OSAyNy42NjMzQzI1LjMzNjcgMjcuMzU5NSAyNC42Njg0IDI2LjUwODkgMjQuNTQ2OCAyNS40NzU5QzI2LjA2NTggMjQuMTM5MiAyNi43OTQ5IDIxLjk1MTkgMjYuOTc3MiAyMS4wNDA1QzI3Ljk0OTQgMjAuNzk3NSAyOC42MTc3IDE5Ljg4NjEgMjguNjE3NyAxOC42NzA5VjE1Ljk5NzVIMjcuODg4NlYxMS42ODM1QzI3Ljg4ODYgMTAuNjUwNiAyNy4yODEgOS43MzkyNCAyNi4zNjk2IDkuMzEzOTNWOC44ODg2VjcuNzM0MThIMTkuMDc4NUMxNi40NjU4IDcuNzM0MTggMTQuMzM5MiA5Ljg2MDc2IDE0LjMzOTIgMTIuNDczNFYxNS45MzY3SDEzLjYxMDFWMTguNjEwMUMxMy42MTAxIDE5Ljg4NjEgMTQuMjc4NSAyMC43OTc1IDE1LjMxMTQgMjAuOTc5N0MxNS41NTQ0IDIxLjg5MTEgMTYuMjIyOCAyNC4wNzg1IDE3Ljc0MTggMjUuNDE1MkMxNy42MjAzIDI2LjQ0ODEgMTcuMDEyNyAyNy4yOTg3IDE1Ljk3OTcgMjcuNjAyNUMxMy45NzQ3IDI4LjIxMDEgMTEuMTE5IDI5LjI0MyA5LjIzNTQ0IDMwLjMzNjdDNS45ODM2OSAzMi4yNTI5IDYuMTcyNTUgMzUuMjc5IDYuMTk1NjggMzUuNjQ5NUM2LjE5Njc1IDM1LjY2NjcgNi4xOTc0NyAzNS42NzgyIDYuMTk3NDcgMzUuNjgzNVYzOC4yOTYySDQuMTMxNjRWMTUuOTM2N0M0LjEzMTY0IDE1LjUxMTQgNC40OTYyIDE1LjE0NjggNC45MjE1MSAxNS4xNDY4SDExLjg0ODFWMTMuOTMxNkg0LjkyMTUxQzMuODI3ODQgMTMuOTMxNiAyLjkxNjQ1IDE0Ljg0MyAyLjkxNjQ1IDE1LjkzNjdWMzguMjk2MkgwVjQwLjI0MDVDMCA0MS41MTY1IDEuMDMyOTEgNDIuNjEwMSAyLjM2OTYyIDQyLjYxMDFIMzkuNzM2N0M0MS4wMTI3IDQyLjYxMDEgNDIuMTA2MyA0MS41NzcyIDQyLjEwNjMgNDAuMjQwNVYzOC4yOTYySDM5LjE4OTlWMTguNjcwOVpNMTYuNDA1MSAyMC40MzI5TDE2LjI4MzUgMTkuOTQ2OEgxNS43OTc1QzE0Ljg4NjEgMTkuOTQ2OCAxNC44MjUzIDE4Ljk3NDcgMTQuODI1MyAxOC42NzA5VjE3LjE1MTlIMTUuNTU0NFYxMi40NzM0QzE1LjU1NDQgMTAuNTI5MSAxNy4xMzQyIDguOTQ5MzcgMTkuMDc4NSA4Ljk0OTM3SDI1LjE1NDRDMjUuMDkzNyAxMC41ODk5IDIzLjc1NyAxMS44NjU4IDIyLjExNjUgMTEuODY1OEgxOC43MTM5QzE3LjgwMjUgMTEuODY1OCAxNy4wNzM0IDEyLjU5NDkgMTcuMDczNCAxMy41MDYzVjE0LjE3NDdIMTguMjg4NlYxMy41MDYzQzE4LjI4ODYgMTMuMjYzMyAxOC40NzA5IDEzLjA4MSAxOC43MTM5IDEzLjA4MUgyMi4xMTY1QzIzLjg3ODUgMTMuMDgxIDI1LjM5NzUgMTEuOTg3MyAyNi4wNjU4IDEwLjQ2ODRDMjYuNDMwNCAxMC43MTE0IDI2LjY3MzQgMTEuMTM2NyAyNi42NzM0IDExLjYyMjhWMTcuMTUxOUgyNy40MDI1VjE4LjY3MDlDMjcuNDAyNSAxOC45NzQ3IDI3LjM0MTggMTkuOTQ2OCAyNi40MzA0IDE5Ljk0NjhIMjUuOTQ0M0wyNS44ODM1IDIwLjQzMjlDMjUuODgzNSAyMC40OTM3IDI0LjkxMTQgMjUuNTM2NyAyMS4zODczIDI1LjUzNjdIMjAuOTAxM0MxNy44NDMgMjUuNTM2NyAxNi43MjczIDIxLjU1NyAxNi40NjYzIDIwLjYyNkMxNi40MzE3IDIwLjUwMjcgMTYuNDEyMiAyMC40MzI5IDE2LjQwNTEgMjAuNDMyOVpNMTguODk2MiAyNi4yNjU4QzE5LjUwMzggMjYuNTY5NiAyMC4xNzIyIDI2Ljc1MTkgMjAuOTYyIDI2Ljc1MTlIMjEuNDQ4MUMyMi4yMzggMjYuNzUxOSAyMi45MDYzIDI2LjU2OTYgMjMuNTEzOSAyNi4yNjU4QzIzLjgxNzcgMjcuNDgxIDI0LjcyOTEgMjguNDUzMiAyNi4wMDUxIDI4LjgxNzdDMjQuNzg5OSAzMC4xNTQ0IDIzLjA4ODYgMzAuODgzNSAyMS4yNjU4IDMwLjg4MzVDMTkuNDQzIDMwLjg4MzUgMTcuNzQxOCAzMC4xNTQ0IDE2LjUyNjYgMjguODE3N0MxNy42ODEgMjguNDUzMiAxOC41OTI0IDI3LjQ4MSAxOC44OTYyIDI2LjI2NThaTTcuNDczNDEgMzUuNjgzNUM3LjQ3MzQxIDM1LjY4MzUgNy4yMzAzOCAzMy4xMzE3IDkuOTY0NTUgMzEuNDkxMUMxMS40MjI4IDMwLjY0MDUgMTMuNDI3OCAyOS44NTA2IDE1LjE4OTkgMjkuMjQzQzE2LjY0ODEgMzEuMDY1OCAxOC44MzU0IDMyLjA5ODcgMjEuMjA1MSAzMi4wOTg3QzIzLjU3NDcgMzIuMDk4NyAyNS43NjIgMzEuMDY1OCAyNy4yMjAyIDI5LjI0M0MyOC45ODIzIDI5Ljg1MDYgMzAuOTg3MyAzMC42NDA1IDMyLjQ0NTYgMzEuNDkxMUMzNS4wNDY4IDMzLjA1MTkgMzQuOTUzMyAzNS4zODI2IDM0LjkzODEgMzUuNzYyNUwzNC45MzgxIDM1Ljc2MjhDMzQuOTM3MyAzNS43ODIgMzQuOTM2NyAzNS43OTYzIDM0LjkzNjcgMzUuODA1MVYzOC40MTc3SDMxLjQxMjdWMzUuNTYySDMwLjE5NzVWMzguNDE3N0gxMi4yMTI3VjM1LjU2MkgxMC45OTc1VjM4LjQxNzdINy40NzM0MVYzNS42ODM1Wk00MC45NTE5IDM5LjU3MjJWNDAuMzAxM0M0MC45NTE5IDQwLjkwODkgNDAuNDY1OCA0MS40NTU3IDM5Ljc5NzUgNDEuNDU1N0gyLjQzMDM4QzEuODIyNzggNDEuNDU1NyAxLjI3NTk0IDQwLjk2OTYgMS4yNzU5NCA0MC4zMDEzVjM5LjU3MjJINDAuOTUxOVpNMzUuNDIyOCAxMC4zNDY5SDM3LjAwMjVWMTEuNTYyMUgzNS40MjI4VjEwLjM0NjlaTTQwLjEwMTMgMTAuMzQ2OUgzOC41MjE1VjExLjU2MjFINDAuMTAxM1YxMC4zNDY5Wk00MS42ODEgMTAuMzQ2OUg0My4yNjA3VjExLjU2MjFINDEuNjgxVjEwLjM0NjlaXCJcbiAgfVxuKSB9KSwga0YgPSAoKSA9PiAvKiBAX19QVVJFX18gKi8gYyhcInN2Z1wiLCB7IHZpZXdCb3g6IFwiMCAwIDQ4IDQ4XCIsIGZpbGw6IFwibm9uZVwiLCB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLCBjaGlsZHJlbjogLyogQF9fUFVSRV9fICovIGMoXG4gIFwicGF0aFwiLFxuICB7XG4gICAgZmlsbDogXCJjdXJyZW50Q29sb3JcIixcbiAgICBmaWxsUnVsZTogXCJldmVub2RkXCIsXG4gICAgY2xpcFJ1bGU6IFwiZXZlbm9kZFwiLFxuICAgIGQ6IFwiTTM2Ljc1NCAxMS41NDQ1QzM2LjEyNTcgMTEuNTQ0NSAzNS40OTc0IDExLjYwNzMgMzQuODA2MyAxMS43MzNDMzMuNzM4MiA2LjY0Mzk4IDI5LjM0MDMgMyAyNC4wNjI5IDNDMTguODQ4MiAzIDE0LjMyNDYgNi43Njk2NCAxMy4zMTk0IDExLjg1ODdDMTIuNTAyNiAxMS42NzAyIDExLjc0ODcgMTEuNTQ0NSAxMC45OTQ4IDExLjU0NDVDNC45MDA1MyAxMS41NDQ1IDAgMTYuNTA3OSAwIDIyLjUzOTNDMCAyNy45NDI0IDMuNjQzOTggMzIuNTkxNyA4LjM1NjAyIDMzLjIxOTlIMTAuMzY2NVYzMS45NjM0SDguNDgxNjlDNC40NjA3NCAzMS40NjA4IDEuMzE5MzYgMjcuMzE0MiAxLjMxOTM2IDIyLjUzOTNDMS4zMTkzNiAxNy4xMzYxIDUuNzE3MjkgMTIuNzM4MiAxMS4xMjA0IDEyLjczODJDMTEuOTM3MiAxMi43MzgyIDEyLjgxNjcgMTIuODYzOSAxMy43NTkyIDEzLjE3OEwxNC40NTAzIDEzLjM2NjVMMTQuNTc1OSAxMi42NzU0QzE1LjI2NyA3LjgzNzcgMTkuNDEzNiA0LjI1NjU1IDI0LjE4ODUgNC4yNTY1NUMyOS4wMjYyIDQuMjU2NTUgMzMuMTEgNy43NzQ4OCAzMy44MDExIDEyLjYxMjZMMzMuOTI2NyAxMy4zMDM3TDM0LjYxNzggMTMuMTE1MkMzNS40MzQ2IDEyLjkyNjcgMzYuMTg4NSAxMi44MDExIDM2Ljk0MjQgMTIuODAxMUM0Mi4zNDU2IDEyLjgwMTEgNDYuNzQzNSAxNy4xOTkgNDYuNzQzNSAyMi42MDIxQzQ2Ljc0MzUgMjcuMzc3IDQzLjYwMjEgMzEuNDYwOCAzOS41MTg0IDMyLjAyNjJIMzcuNjk2NFYzMy4yODI4SDM5LjY0NEM0NC40MTg5IDMyLjU5MTcgNDggMjguMDA1MyA0OCAyMi42MDIxQzQ3LjgxMTYgMTYuNTA3OSA0Mi44NDgyIDExLjU0NDUgMzYuNzU0IDExLjU0NDVaTTM0LjQyOTQgNDMuMDgzOEMzMy4yOTg1IDM4LjkzNzIgMjkuNTkxNiAzNC43Mjc4IDI1LjUwNzkgMzQuNzI3OFYzNS45ODQzQzI5LjAyNjIgMzUuOTg0MyAzMi4zNTYxIDQwLjAwNTMgMzMuMjk4NSA0My42NDkzTDMxLjA5OTUgNDIuODMyNUwzMC42NTk3IDQzLjk2MzRMMzQuNTU1IDQ1LjQwODRMMzYuNTY1NSA0MS43NjQ0TDM1LjQ5NzQgNDEuMTk5TDM0LjQyOTQgNDMuMDgzOFpNMzMuNjc1NCA0My43MTIxTDM0LjExNTIgNDMuNTg2NEwzMy45ODk2IDQzLjc3NDlMMzMuNjc1NCA0My43MTIxWk0xNy44NDI5IDI5LjYzODdWMzkuMzc3QzE3Ljg0MjkgMzkuNzUzOSAxNy43MTcyIDQwLjEzMDkgMTcuNTI4OCA0MC40NDVIMjkuNDY1OVY0MS43MDE2SDE1LjUxODNDMTQuMTk4OSA0MS43MDE2IDEzLjEzMDggNDAuNjMzNSAxMy4xMzA4IDM5LjMxNDJWMjIuOTE2MkgyMC43OTU4TDIxLjY3NTQgMjQuNjc1NEgzMi42NzAyVjI4LjM4MjJIMzQuNjE3OFYzNi44MDExSDMzLjM2MTJWMjkuNjM4N0gxNy44NDI5Wk0xNC4zODc0IDI0LjE3MjhWMzkuMzE0MkMxNC4zODc0IDM5Ljk0MjQgMTQuODkgNDAuNDQ1IDE1LjUxODMgNDAuNTA3OUMxNi4xNDY2IDQwLjUwNzkgMTYuNjQ5MiA0MC4wMDUzIDE2LjY0OTIgMzkuMzc3VjI4LjM4MjJIMzEuNDc2NFYyNS45MzE5SDIwLjkyMTRMMjAuMDQxOCAyNC4xNzI4SDE0LjM4NzRaXCJcbiAgfVxuKSB9KSwgTkYgPSAoKSA9PiAvKiBAX19QVVJFX18gKi8gYyhcInN2Z1wiLCB7IHZpZXdCb3g6IFwiMCAwIDQ4IDQ5XCIsIGZpbGw6IFwibm9uZVwiLCB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLCBjaGlsZHJlbjogLyogQF9fUFVSRV9fICovIGMoXG4gIFwicGF0aFwiLFxuICB7XG4gICAgZmlsbDogXCJjdXJyZW50Q29sb3JcIixcbiAgICBmaWxsUnVsZTogXCJldmVub2RkXCIsXG4gICAgY2xpcFJ1bGU6IFwiZXZlbm9kZFwiLFxuICAgIGQ6IFwiTTQzLjQ1NTYgMTEuODYzOVY1LjMzMTM2SDE4LjQ2MTVMMTYuNDczNCAxSDBWMzYuMzYwOUMwIDM4LjM0OTEgMS4yMDcxMSA0MC4xMjQyIDIuOTgyMjYgNDAuNzYzM0MzLjU1MDMgNDAuOTc2MyA0LjExODM3IDQxLjA0NzMgNC42ODY0MSA0MS4wNDczVjQxLjExODNIMTcuMDQxNFYzOS42OTgySDguMDIzNjZDOC44NzU3MyAzOC44NDYxIDkuNDQzNzcgMzcuNjM5IDkuNDQzNzcgMzYuNDMxOVYxMy4zNTVINDYuNTc5OVYzNS41Nzk5QzQ2LjU3OTkgMzcuODUyMSA0NC43MzM3IDM5LjY5ODIgNDIuNDYxNSAzOS42OTgySDQwLjYxNTRWNDEuMTE4M0g0Mi40NjE1QzQ1LjUxNDggNDEuMTE4MyA0OCAzOC42MzMxIDQ4IDM1LjU3OTlWMTEuOTM0OUg0My40NTU2VjExLjg2MzlaTTQxLjk2NDUgMTEuODYzOUg4LjAyMzY2VjM2LjM2MDlDOC4wMjM2NiAzNy40MjYgNy41MjY2MSAzOC40MjAxIDYuNjAzNTQgMzkuMDU5MkM1LjY4MDQ2IDM5LjY5ODIgNC42MTU0IDM5Ljg0MDIgMy40NzkzMSAzOS40MTQyQzIuMjAxMiAzOC45ODgxIDEuNDIwMTIgMzcuNzEgMS40MjAxMiAzNi4yODk5VjIuNDIwMTJIMTUuNTUwM0wxNy41Mzg1IDYuNzUxNDhINDEuOTY0NVYxMS44NjM5Wk0yNC42MzkgMjMuNTA4OEgyMy4yODk5TDIzLjIxODkgMzEuNTMyNUgxNi40MDI0VjMzLjAyMzZMMjguNjg2NCA0OC4wMDU5TDQwLjg5OTQgMzMuMjM2Nkw0MS4wNDE0IDMzLjAyMzZWMzEuNjAzNUgzNC43MjE5TDM0Ljc5MjkgMjguMTI0MkgzMy4zNzI4TDMzLjMwMTggMzIuOTUyNkwzOS4yNjYyIDMzLjAyMzZMMjguNjg2NCA0NS44MDQ3TDE4LjE3NzUgMzIuOTUyNkgyNC42MzlWMjMuNTA4OFpNMzMuMzczNSAyMy41MTQ0TDM0Ljc5MzcgMjMuNTA3NkwzNC44MDQ4IDI1Ljg1MDhMMzMuMzg0NyAyNS44NTc2TDMzLjM3MzUgMjMuNTE0NFpcIlxuICB9XG4pIH0pLCBURiA9ICgpID0+IC8qIEBfX1BVUkVfXyAqLyBjKFwic3ZnXCIsIHsgdmlld0JveDogXCIwIDAgNDggNDhcIiwgZmlsbDogXCJub25lXCIsIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsIGNoaWxkcmVuOiAvKiBAX19QVVJFX18gKi8gYyhcbiAgXCJwYXRoXCIsXG4gIHtcbiAgICBmaWxsOiBcImN1cnJlbnRDb2xvclwiLFxuICAgIGZpbGxSdWxlOiBcImV2ZW5vZGRcIixcbiAgICBjbGlwUnVsZTogXCJldmVub2RkXCIsXG4gICAgZDogXCJNNDQuMDc5NiAzLjc0NTY2TDQ0LjA3OTkgMy43NDU5MUM0Ni41MTkxIDYuMTg1MTEgNDcuOTEyOSA5LjQwODM1IDQ4IDEzLjA2NzJDNDggMTYuNDY0NiA0Ni42MDYxIDE5Ljc3NSA0NC4xNjY5IDIyLjIxNDJMMzUuNTQyNiAzMC44Mzg1TDM0LjQxMDIgMjkuNzA2TDM4LjY3ODcgMjUuNDM3NEMzNy40NTkxIDI1Ljc4NTkgMzYuMjM5NiAyNS45NjAxIDM0LjkzMjggMjUuOTYwMUMzMS41MzU0IDI1Ljk2MDEgMjguMjI1IDI0LjU2NjMgMjUuNzg1OCAyMi4xMjcxQzIzLjM0NjYgMTkuNjg3OSAyMS45NTI4IDE2LjQ2NDYgMjEuOTUyOCAxMi45ODAxQzIxLjk1MjggMTEuNjczMyAyMi4xMjcgMTAuNDUzOCAyMi40NzU0IDkuMjM0MTZMMTcuMzM1NyAxNC4zNzM5SDE5Ljg2MlYxNS45NDE5SDE0LjcyMjJWMTAuODAyMkgxNi4yOTAzVjEzLjMyODVMMjUuNzg1OCAzLjgzMzA1TDI1Ljc4NiAzLjgzMjg3QzI2LjA0NzMgMy41NzE1NSAyNi4zOTU3IDMuMjIzMTkgMjYuNzQ0MSAyLjk2MTkxTDI2LjkxODMgMi43ODc2N0MyNy4wNDg5IDIuNzAwNTYgMjcuMjAxNCAyLjU5MTY2IDI3LjM1MzggMi40ODI3NkMyNy41MDYzIDIuMzczODcgMjcuNjU4NyAyLjI2NDk3IDI3Ljc4OTQgMi4xNzc4NkMyNy43ODk0IDIuMDkwNzQgMjcuODc2NiAyLjA5MDc3IDI3Ljg3NjYgMi4wOTA3N0MyOS45NjczIDAuNjk2OTM2IDMyLjQwNjUgMCAzNC45MzI4IDBDMzcuNTQ2MyAwIDM5Ljk4NTQgMC42OTY5MzYgNDIuMDc2MiAyLjA5MDc3QzQyLjIwNjkgMi4yMjE0NCA0Mi4zNTkzIDIuMzMwMzMgNDIuNTExNyAyLjQzOTIyQzQyLjY2NDIgMi41NDgxMSA0Mi44MTY3IDIuNjU3IDQyLjk0NzMgMi43ODc2N0M0Mi45OTA5IDIuNzg3NjcgNDMuMDEyNyAyLjgwOTQ0IDQzLjAzNDUgMi44MzEyMkM0My4wNTYzIDIuODUyOTkgNDMuMDc4MSAyLjg3NDc2IDQzLjEyMTYgMi44NzQ3NkM0My40NyAzLjEzNjA0IDQzLjczMTMgMy4zOTczMyA0NC4wNzk2IDMuNzQ1NjZaTTI2Ljc0NDEgMjAuOTk0NkMyOC45MjE5IDIzLjE3MjUgMzEuNzk2NyAyNC4zOTIgMzQuODQ1NyAyNC4zOTJDMzcuOTgxOSAyNC4zOTIgNDAuODU2NiAyMy4xNzI1IDQyLjk0NzMgMjAuOTk0NkM0NS4wMzgxIDE4LjgxNjcgNDYuMjU3NyAxNS45NDE5IDQ2LjI1NzcgMTIuODkyOUM0Ni4yNTc3IDkuODQzOTEgNDUuMTI1MiA2Ljk2OTE1IDQyLjk0NzMgNC43OTEyOUM0Mi44MTY3IDQuNjYwNjIgNDIuNjY0MiA0LjUyOTk1IDQyLjUxMTcgNC4zOTkyOEM0Mi4zNTkzIDQuMjY4NjIgNDIuMjA2OCA0LjEzNzk2IDQyLjA3NjIgNC4wMDcyOUM0MS45ODkxIDQuMDA3MjkgNDEuOTAyIDMuOTIwMTUgNDEuOTAyIDMuOTIwMTVDNDEuNjQwNyAzLjY1ODggNDEuMzc5MyAzLjQ4NDU2IDQxLjExNzkgMy4zMTAzNEMzOS4yMDE0IDIuMDAzNjIgMzcuMDIzNiAxLjM5Mzg2IDM0Ljg0NTcgMS4zOTM4NkMzMi42Njc5IDEuMzkzODYgMzAuNDkgMi4wOTA3MyAyOC41NzM1IDMuMzEwMzRDMjguNDQyOCAzLjM5NzQ1IDI4LjMxMjEgMy41MDYzNSAyOC4xODE0IDMuNjE1MjRDMjguMDUwNyAzLjcyNDE0IDI3LjkyMDEgMy44MzMwMyAyNy43ODk0IDMuOTIwMTVDMjcuNzAyMyAzLjkyMDE1IDI3LjYxNTIgNC4wMDcyOSAyNy42MTUyIDQuMDA3MjlDMjcuMjY2OCA0LjI2ODY0IDI3LjAwNTQgNC41Mjk5NSAyNi43NDQxIDQuNzkxMjlDMjQuNjUzMyA2Ljk2OTE1IDIzLjQzMzcgOS44NDM5MSAyMy40MzM3IDEyLjg5MjlDMjMuNDMzNyAxNS45NDE5IDI0LjU2NjIgMTguODE2NyAyNi43NDQxIDIwLjk5NDZaTTM0Ljg0NTcgOC4xODg3N0MzNi4xNTI1IDguMTg4NzcgMzcuMjg0OSA5LjA1OTkxIDM3LjI4NDkgMTAuMTkyNEgzOC44NTNDMzguODUzIDguNDUwMSAzNy40NTkxIDcuMDU2MjcgMzUuNjI5NyA2LjcwNzgyVjUuMjI2ODZIMzQuMDYxN1Y2LjcwNzgyQzMyLjIzMjMgNy4wNTYyNyAzMC45MjU2IDguNDUwMSAzMC45MjU2IDEwLjE5MjRDMzAuOTI1NiAxMi4xMDg5IDMyLjY2NzkgMTMuNjc3IDM0Ljg0NTcgMTMuNjc3QzM2LjE1MjUgMTMuNjc3IDM3LjI4NDkgMTQuNTQ4MSAzNy4yODQ5IDE1LjY4MDZDMzcuMjg0OSAxNi43MjYgMzYuMjM5NiAxNy42ODQyIDM0Ljg0NTcgMTcuNjg0MkMzMy41MzkgMTcuNjg0MiAzMi40MDY1IDE2LjgxMzEgMzIuNDA2NSAxNS42ODA2SDMwLjgzODRDMzAuODM4NCAxNy40MjI5IDMyLjIzMjMgMTguODE2NyAzMy45NzQ2IDE5LjE2NTJWMjAuNjQ2MUgzNS41NDI2VjE5LjE2NTJDMzcuMzcyIDE4LjgxNjcgMzguNzY1OSAxNy40MjI5IDM4Ljc2NTkgMTUuNjgwNkMzOC43NjU5IDEzLjc2NDEgMzcuMDIzNiAxMi4xOTYgMzQuODQ1NyAxMi4xOTZDMzMuNTM5IDEyLjE5NiAzMi40MDY1IDExLjMyNDkgMzIuNDA2NSAxMC4xOTI0QzMyLjQwNjUgOS4wNTk5MSAzMy41MzkgOC4xODg3NyAzNC44NDU3IDguMTg4NzdaTTMwLjc1MTMgMzMuMTkwN0gyOC4yMjVIMjguMDUwOFYzMS43OTY4SDMzLjE5MDZWMzYuOTM2NkgzMS42MjI1VjM0LjQxMDJMMjIuMTI3IDQzLjkwNTdDMjEuNDMwMSA0NC41MTU1IDIwLjY0NiA0NS4xMjUzIDE5Ljg2MiA0NS42NDhDMTcuNzcxMyA0Ni45NTQ3IDE1LjQxOTIgNDcuNjUxNiAxMi44OTI5IDQ3LjY1MTZDOS40OTU0IDQ3LjY1MTYgNi4xODUwNiA0Ni4yNTc4IDMuNzQ1ODUgNDMuODE4NkwzLjc0NTcxIDQzLjgxODRDMy40ODQzOCA0My41NTcxIDMuMTM2MDEgNDMuMjA4NyAyLjg3NDcxIDQyLjg2MDNMMi43MDA1MiA0Mi42ODYxQzIuNjEzNDEgNDIuNTU1NCAyLjUwNDUgNDIuNDAzIDIuMzk1NTkgNDIuMjUwNUMyLjI4NjY4IDQyLjA5ODEgMi4xNzc3NyA0MS45NDU2IDIuMDkwNjYgNDEuODE1VjQxLjcyNzlDMC42OTY4MyAzOS42MzcxIDAgMzcuMTk3OSAwIDM0LjY3MTZDMCAzMi4wNTgxIDAuNzg0MDI5IDI5LjYxOSAyLjE3Nzg2IDI3LjUyODJDMi4yNzYyOSAyNy4zOTcgMi4zNjIzNSAyNy4yNjU3IDIuNDQ1MzcgMjcuMTM5MkMyLjU4Mjc2IDI2LjkyOTYgMi43MTE4IDI2LjczMjkgMi44NzQ3MSAyNi41Njk5QzIuODc0NzEgMjYuNDgyOCAyLjk2MTggMjYuMzk1NyAyLjk2MTggMjYuMzk1N0MzLjIyMzA4IDI2LjA0NzMgMy40ODQzNiAyNS43ODYgMy44MzI3IDI1LjQzNzdMMy44MzI5NSAyNS40Mzc1TDEyLjQ1NzMgMTYuODEzMUwxMy41ODk4IDE3Ljk0NTZMOS4zMjEyIDIyLjIxNDJDMTMuNzY0IDIwLjgyMDQgMTguODE2NyAyMS45NTI5IDIyLjMwMTMgMjUuNDM3NUMyNC43NDA1IDI3Ljg3NjcgMjYuMTM0MyAzMS4wOTk5IDI2LjEzNDMgMzQuNTg0NUMyNi4xMzQzIDM1Ljg5MTIgMjUuOTYgMzcuMTEwOCAyNS42MTE1IDM4LjMzMDRMMzAuNzUxMyAzMy4xOTA3Wk0xMy4xNTQyIDQ2LjA4MzZDMTUuMzMyMSA0Ni4wODM2IDE3LjQyMjkgNDUuNDczOCAxOS4yNTIzIDQ0LjM0MTNDMTkuOTQ5MiA0My45MDU3IDIwLjY0NjEgNDMuMzgzIDIxLjM0MyA0Mi41OTlDMjMuNDMzOCA0MC40MjExIDI0LjY1MzMgMzcuNTQ2NCAyNC42NTMzIDM0LjQ5NzRDMjQuNjUzMyAzMS40NDg0IDIzLjUyMDkgMjguNTczNiAyMS4zNDMgMjYuMzk1N0MxOS4wNzggMjQuMjE3OCAxNi4yMDMyIDIzLjA4NTQgMTMuMjQxMyAyMy4wODU0QzEwLjI3OTUgMjMuMDg1NCA3LjQwNDY0IDI0LjEzMDcgNS4xMzk2NiAyNi4zOTU3QzUuMDA4OTkgMjYuNTI2NCA0Ljg3ODM0IDI2LjY3ODggNC43NDc2OSAyNi44MzEzQzQuNjE3MDQgMjYuOTgzNyA0LjQ4NjM5IDI3LjEzNjIgNC4zNTU3MiAyNy4yNjY4QzQuMzU1NzIgMjcuMzEwNCA0LjMzMzkyIDI3LjMzMjIgNC4zMTIxMiAyNy4zNTRDNC4yOTAzMiAyNy4zNzU3IDQuMjY4NTIgMjcuMzk3NSA0LjI2ODUyIDI3LjQ0MTFDNC4wMDczNSAyNy43MDIzIDMuODMzMjIgMjcuOTYzNCAzLjY1OTExIDI4LjIyNDZMMy42NTg3NiAyOC4yMjUxQzEuMjE5NTYgMzIuMDU4MiAxLjIxOTU2IDM2LjkzNjUgMy42NTg3NiA0MC43Njk2VjQwLjg1NjdMNC4xODE0MyA0MS42NDA3VjQxLjY0MDhDNC4xODE0MyA0MS43Mjc4IDQuMTgxNDMgNDEuNzI3OSA0LjI2ODUyIDQxLjgxNUM0LjUyOTc5IDQyLjE2MzMgNC43OTEwOCA0Mi40MjQ2IDUuMDUyMzYgNDIuNjg1OUw1LjA1MjM4IDQyLjY4NTlMNS4wNTI1NyA0Mi42ODYxQzUuNTc1MjYgNDMuMjA4OCA2LjA5Nzk2IDQzLjY0NDQgNi43MDc3NiA0NC4wOEM4LjUzNzE3IDQ1LjM4NjcgMTAuODAyMiA0Ni4wODM2IDEzLjE1NDIgNDYuMDgzNlpNOC4yNzU4NyAzNy4yODVDOS4yMzQxMiAzOS4xMTQ1IDExLjE1MDYgNDAuNDIxMiAxMy40MTU1IDQwLjQyMTJDMTMuNzQ5IDQwLjQyMTIgMTQuMDgyNSA0MC4zNzAxIDE0LjQ5NDEgNDAuMzA3MUMxNC42MjAyIDQwLjI4NzggMTQuNzUzNiA0MC4yNjc0IDE0Ljg5NjUgNDAuMjQ3TDE1LjMzMjEgNDEuNzI3OUMxNC43MjIzIDQxLjkwMjEgMTQuMTEyNSA0MS45ODkyIDEzLjUwMjcgNDEuOTg5MkMxMC4zNjY2IDQxLjk4OTIgNy43NTMxNCAzOS45ODU2IDYuNzA3NzYgMzcuMjg1SDUuMDUyNTdWMzUuNzE3SDYuMjcyMTlDNi4xODUxIDM1LjM2ODYgNi4xODUxIDM1LjAyMDIgNi4xODUxIDM0LjY3MTlWMzQuNjcxNlYzNC42NzE0QzYuMTg1MSAzNC4zMjMgNi4xODUxIDMzLjk3NDcgNi4yNzIxOSAzMy42MjYzSDUuMDUyNTdWMzIuMDU4Mkg2LjcwNzc2QzcuNzUzMTQgMjkuMjcwNSAxMC4zNjY2IDI3LjM1NCAxMy41MDI3IDI3LjM1NEMxNC4wMjU0IDI3LjM1NCAxNC42MzUyIDI3LjQ0MTEgMTUuMzMyMSAyNy42MTU0TDE0Ljg5NjUgMjkuMDk2M0MxNC43NTM3IDI5LjA3NTkgMTQuNjIwNSAyOS4wNTU1IDE0LjQ5NDUgMjkuMDM2MkwxNC40OTQxIDI5LjAzNjJMMTQuNDk0MSAyOS4wMzYyQzE0LjA4MjUgMjguOTczMiAxMy43NDkgMjguOTIyMSAxMy40MTU1IDI4LjkyMjFDMTEuMTUwNiAyOC45MjIxIDkuMjM0MTIgMzAuMjI4OCA4LjI3NTg3IDMyLjA1ODJIMTEuNjczMlYzMy42MjYzSDcuNzUzMDlDNy42NjYgMzMuOTc0NyA3LjY2NiAzNC4zMjMgNy42NjYgMzQuNjcxNFYzNC42NzE2VjM0LjY3MTlDNy42NjYgMzUuMDIwMiA3LjY2NiAzNS4zNjg2IDcuNzUzMDkgMzUuNzE3SDExLjY3MzJWMzcuMjg1SDguMjc1ODdaXCJcbiAgfVxuKSB9KSwgSUYgPSAoKSA9PiAvKiBAX19QVVJFX18gKi8gYyhcInN2Z1wiLCB7IHZpZXdCb3g6IFwiMCAwIDQ4IDQ4XCIsIGZpbGw6IFwibm9uZVwiLCB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLCBjaGlsZHJlbjogLyogQF9fUFVSRV9fICovIGMoXG4gIFwicGF0aFwiLFxuICB7XG4gICAgZmlsbDogXCJjdXJyZW50Q29sb3JcIixcbiAgICBmaWxsUnVsZTogXCJldmVub2RkXCIsXG4gICAgY2xpcFJ1bGU6IFwiZXZlbm9kZFwiLFxuICAgIGQ6IFwiTTQ0LjA3MjUgMy43NTI0OUw0NC4wNzI3IDMuNzUyNzJDNDYuNjAzNiA2LjE5NjM1IDQ3LjkxMjcgOS40MjU0NiA0OCAxMy4wOTA5QzQ4IDE2LjQ5NDUgNDYuNjAzNiAxOS44MTA5IDQ0LjE2IDIyLjI1NDVMMzUuNTIwMSAzMC44OTQ2TDM0LjM4NTUgMjkuNzZMMzguNjYxOSAyNS40ODM2QzM3LjQ0IDI1LjgzMjcgMzYuMjE4MiAyNi4wMDczIDM0LjkwOTEgMjYuMDA3M0MzMS41MDU1IDI2LjAwNzMgMjguMTg5MSAyNC42MTA5IDI1Ljc0NTUgMjIuMTY3M0MyMy4zMDE4IDE5LjcyMzcgMjEuOTA1NCAxNi40OTQ2IDIxLjkwNTQgMTMuMDAzN0MyMS45MDU0IDExLjY5NDYgMjIuMDgwMSAxMC40NzI4IDIyLjQyOTIgOS4yNTA5NEwxNy4yOCAxNC40SDE5LjgxMVYxNS45NzA5SDE0LjY2MTlWMTAuODIxOEgxNi4yMzI3VjEzLjM1MjdMMjUuNzQ1NSAzLjg0MDAyTDI1Ljc0NTYgMy44Mzk4M0MyNi4wMDc0IDMuNTc4MDMgMjYuMzU2NCAzLjIyOTA1IDI2LjcwNTQgMi45NjcyOUwyNi44OCAyLjc5Mjc0QzI3LjAxMSAyLjcwNTQ3IDI3LjE2MzcgMi41OTYzNyAyNy4zMTY0IDIuNDg3MjhDMjcuNDY5MSAyLjM3ODE5IDI3LjYyMTkgMi4yNjkwOSAyNy43NTI4IDIuMTgxODJDMjcuNzUyOCAyLjA5NDU1IDI3Ljg0IDIuMDk0NTcgMjcuODQgMi4wOTQ1N0MyOS45MzQ2IDAuNjk4MjAzIDMyLjM3ODIgMCAzNC45MDkxIDBDMzcuNTI3MyAwIDM5Ljk3MSAwLjY5ODIwMyA0Mi4wNjU1IDIuMDk0NTdDNDIuMTk2NCAyLjIyNTQ4IDQyLjM0OTIgMi4zMzQ1NiA0Mi41MDE5IDIuNDQzNjVDNDIuNjU0NiAyLjU1Mjc0IDQyLjgwNzMgMi42NjE4MyA0Mi45MzgyIDIuNzkyNzRDNDIuOTgxOSAyLjc5Mjc0IDQzLjAwMzcgMi44MTQ1NSA0My4wMjU1IDIuODM2MzZDNDMuMDQ3MyAyLjg1ODE4IDQzLjA2OTEgMi44Nzk5OSA0My4xMTI3IDIuODc5OTlDNDMuNDYxOCAzLjE0MTc1IDQzLjcyMzUgMy40MDM1MSA0NC4wNzI1IDMuNzUyNDlaTTI2Ljc5MjggMjEuMDMyOEMyOC45NzQ2IDIzLjIxNDYgMzEuODU0NSAyNC40MzY0IDM0LjkwOTEgMjQuNDM2NEMzNy45NjM2IDI0LjQzNjQgNDAuODQzNyAyMy4yMTQ2IDQzLjAyNTUgMjEuMDMyOEM0NS4xMiAxOC44NTA5IDQ2LjM0MTggMTUuOTcwOSA0Ni4zNDE4IDEyLjkxNjRDNDYuMzQxOCA5Ljg2MTgxIDQ1LjIwNzMgNi45ODE4MiA0My4wMjU1IDQuOEM0Mi44OTQ2IDQuNjY5MDkgNDIuNzQxOSA0LjUzODE5IDQyLjU4OTEgNC40MDcyOUM0Mi40MzY0IDQuMjc2MzkgNDIuMjgzNyA0LjE0NTQ5IDQyLjE1MjggNC4wMTQ1OEM0Mi4wNjU1IDQuMDE0NTggNDEuOTc4MiAzLjkyNzI3IDQxLjk3ODIgMy45MjcyN0M0MS43MTYzIDMuNjY1NDUgNDEuNDU0NiAzLjQ5MDkgNDEuMTkyOCAzLjMxNjM1QzM5LjI3MjggMi4wMDcyNiAzNy4wOTA5IDEuMzk2NCAzNC45MDkxIDEuMzk2NEMzMi43MjczIDEuMzk2NCAzMC41NDU1IDIuMDk0NTMgMjguNjI1NSAzLjMxNjM1QzI4LjQ5NDYgMy40MDM2MyAyOC4zNjM3IDMuNTEyNzIgMjguMjMyOCAzLjYyMTgxQzI4LjEwMTggMy43MzA5MSAyNy45NzA5IDMuODQgMjcuODQgMy45MjcyN0MyNy43NTI3IDMuOTI3MjcgMjcuNjY1NSA0LjAxNDU4IDI3LjY2NTUgNC4wMTQ1OEMyNy4zMTY0IDQuMjc2NCAyNy4wNTQ2IDQuNTM4MTggMjYuNzkyOCA0LjhDMjQuNjk4MiA2Ljk4MTgyIDIzLjQ3NjQgOS44NjE4MSAyMy40NzY0IDEyLjkxNjRDMjMuNDc2NCAxNS45NzA5IDI0LjYxMSAxOC44NTA5IDI2Ljc5MjggMjEuMDMyOFpNMzQuMjU3IDE0LjQ2NjZWMTQuNDY2NlYxNC40NjY3QzM0LjIzNDQgMTQuNzQ5IDM0LjIxMDkgMTUuMDQyNyAzNC4yMTA5IDE1LjM1OTlDMzQuMjEwOSAxNS44ODM1IDM0LjEyMzUgMTYuNDk0NCAzNC4wMzYzIDE3LjAxOEgzOS4wMTA5VjE4Ljg1MDhIMzEuNTkyN0MzMS45NDE4IDE3LjAxODEgMzIuMTE2MyAxNS4yNzI2IDMyLjExNjMgMTMuNzAxN0gzMC40NTgxVjExLjk1NjJIMzIuMTE2M1YxMC43MzQ0QzMyLjExNjMgOS44NjE2NSAzMi4yOTA5IDkuMDc2MjEgMzIuNDY1NCA4LjQ2NTMxQzMyLjcyNzIgNy44NTQ0IDMyLjk4OSA3LjQxODA1IDMzLjMzODEgNy4wNjg5NkMzMy42ODcyIDYuNzE5ODcgMzQuMTIzNiA2LjU0NTI4IDM0LjY0NzIgNi4zNzA3NEMzNS4xNzA5IDYuMjgzNDcgMzUuNjk0NCA2LjE5NjI0IDM2LjMwNTMgNi4xOTYyNEMzNi43NDE3IDYuMTk2MjQgMzcuMjY1MyA2LjI4MzQ3IDM3LjYxNDQgNi4zNzA3NEMzOC4wNTA4IDYuNDU4MDEgMzguMzk5OSA2LjU0NTMxIDM4Ljc0OSA2LjcxOTg1TDM4LjIyNTQgOC40NjUzMUMzNy43MDE4IDguMjAzNDkgMzcuMDkwOSA4LjAyODk0IDM2LjM5MjcgOC4wMjg5NEgzNi4zOTI0QzM2LjA0MzUgOC4wMjg5NCAzNS43ODE3IDguMDI4OTQgMzUuNTIgOC4xMTYxOUMzNS4yNTgxIDguMjAzNDcgMzUuMDgzNSA4LjM3ODAxIDM0LjkwOSA4LjU1MjU2QzM0LjczNDQgOC43MjcxIDM0LjU1OTkgOC45ODg5NCAzNC40NzI2IDkuMzM4MDNDMzQuMzg1MyA5LjY4NzEyIDM0LjI5ODEgMTAuMTIzNSAzNC4yOTgxIDEwLjY0NzFWMTEuOTU2MkgzNy41MjcyVjEzLjcwMTdIMzQuMjk4MUMzNC4yOTgxIDEzLjk1MzQgMzQuMjc4IDE0LjIwNTEgMzQuMjU3IDE0LjQ2NjZaTTguMjAzNjYgMzcuMzUyOEM5LjE2MzY2IDM5LjE4NTYgMTEuMDgzNyA0MC40OTQ3IDEzLjM1MjggNDAuNDk0N0MxMy43ODkgNDAuNDk0NyAxNC4zMTI1IDQwLjQwNzQgMTQuODM2IDQwLjMyMDJMMTQuODM2NCA0MC4zMjAxTDE1LjI3MjcgNDEuODAzOEMxNC42NjE4IDQxLjk3ODMgMTQuMDUwOSA0Mi4wNjU2IDEzLjQ0IDQyLjA2NTZDMTAuMjk4MiA0Mi4wNjU2IDcuNjc5OTggNDAuMDU4MyA2LjYzMjcxIDM3LjM1MjhINC45NzQ2MVYzNS43ODE5SDYuMTk2MzRDNi4xMDkwOSAzNS40MzI5IDYuMTA5MDkgMzUuMDgzOSA2LjEwOTA5IDM0LjczNDlWMzQuNzM0NlYzNC43MzQ0QzYuMTA5MDkgMzQuMzg1NCA2LjEwOTA5IDM0LjAzNjQgNi4xOTYzNCAzMy42ODc0SDQuOTc0NjFWMzIuMTE2NUg2LjYzMjcxQzcuNjc5OTggMjkuMzIzNyAxMC4yOTgyIDI3LjQwMzggMTMuNDQgMjcuNDAzOEMxMy45NjM3IDI3LjQwMzggMTQuNTc0NSAyNy40OTEgMTUuMjcyNyAyNy42NjU2TDE0LjgzNjQgMjkuMTQ5MkMxNC42OTM2IDI5LjEyODggMTQuNTYwNSAyOS4xMDg0IDE0LjQzNDYgMjkuMDg5MkwxNC40MzM1IDI5LjA4OUwxNC40MzMxIDI5LjA4ODlDMTQuMDIwOCAyOS4wMjU4IDEzLjY4NjggMjguOTc0NyAxMy4zNTI4IDI4Ljk3NDdDMTEuMDgzNyAyOC45NzQ3IDkuMTYzNjYgMzAuMjgzNyA4LjIwMzY2IDMyLjExNjVIMTEuNjA3M1YzMy42ODc0SDcuNjgwMDRDNy41OTI3OSAzNC4wMzY0IDcuNTkyNzkgMzQuMzg1NCA3LjU5Mjc5IDM0LjczNDRWMzQuNzM0NlYzNC43MzQ5QzcuNTkyNzkgMzUuMDgzOSA3LjU5Mjc5IDM1LjQzMjkgNy42ODAwNCAzNS43ODE5SDExLjYwNzNWMzcuMzUyOEg4LjIwMzY2Wk0yOC4yNzY0IDMzLjI1MUgzMC44MDczTDI1LjY1ODIgMzguNDAwMUMyNi4wMDczIDM3LjE3ODIgMjYuMTgxOCAzNS45NTY0IDI2LjE4MTggMzQuNjQ3M0MyNi4xODE4IDMxLjE1NjQgMjQuNzg1NCAyNy45MjczIDIyLjM0MTggMjUuNDgzN0MxOC44NTA5IDIxLjk5MjggMTMuNzg5MiAyMC44NTgyIDkuMzM4MjUgMjIuMjU0NkwxMy42MTQ1IDE3Ljk3ODNMMTIuNDggMTYuODQzN0wzLjg0MDAyIDI1LjQ4MzdMMy44Mzk3NyAyNS40ODRDMy40OTA4MSAyNS44MzI5IDMuMjI5MDUgMjYuMDk0NyAyLjk2NzI5IDI2LjQ0MzdDMi45NjcyOSAyNi40NDM3IDIuODgwMDQgMjYuNTMxIDIuODgwMDQgMjYuNjE4MkMyLjcxNjggMjYuNzgxNSAyLjU4NzQ3IDI2Ljk3ODcgMi40NDk3NiAyNy4xODg2QzIuMzY2NiAyNy4zMTU0IDIuMjgwMzkgMjcuNDQ2OCAyLjE4MTgyIDI3LjU3ODNDMC43ODU0NTQgMjkuNjcyOCAwIDMyLjExNjQgMCAzNC43MzQ2QzAgMzcuMjY1NSAwLjY5ODIwMyAzOS43MDkyIDIuMDk0NTcgNDEuODAzN1Y0MS44OTFDMi4xODE4IDQyLjAyMTggMi4yOTA4MiA0Mi4xNzQ1IDIuMzk5ODQgNDIuMzI3MUwyLjQgNDIuMzI3M0wyLjQwMDE2IDQyLjMyNzVDMi41MDkxOCA0Mi40ODAyIDIuNjE4MiA0Mi42MzI4IDIuNzA1NDMgNDIuNzYzN0wyLjg4MDA0IDQyLjkzODJDMy4xNDE3OSA0My4yODcyIDMuNDkwNzcgNDMuNjM2MiAzLjc1MjU2IDQzLjg5OEwzLjc1Mjc3IDQzLjg5ODJDNi4xOTY0MSA0Ni4zNDE5IDkuNTEyNzcgNDcuNzM4MiAxMi45MTY0IDQ3LjczODJDMTUuMzYgNDcuNzM4MiAxNy44MDM3IDQ3LjA0MDEgMTkuODExIDQ1LjczMUMyMC41OTY0IDQ1LjIwNzMgMjEuMzgxOSA0NC41OTY0IDIyLjA4IDQzLjg5ODJMMzEuNTkyOCAzNC4zODU1VjM2LjkxNjRIMzMuMTYzNlYzMS43NjczSDI4LjAxNDVWMzMuMjUxSDI4LjI3NjRaTTE5LjQ2MTkgNDQuMzM0NkMxNy42MjkxIDQ1LjU1NjQgMTUuNDQ3MyA0Ni4yNTQ2IDEzLjE3ODIgNDYuMjU0NkMxMC44MjE4IDQ2LjI1NDYgOC41NTI3OSA0NS41NTY0IDYuNzIwMDYgNDQuMjQ3M0M2LjEwOTE1IDQzLjgxMSA1LjU4NTUgNDMuMzc0NiA1LjA2MTg2IDQyLjg1MUw1LjA2MTY3IDQyLjg1MDhDNC43OTk5MiA0Mi41ODkxIDQuNTM4MTQgNDIuMzI3MyA0LjI3NjM4IDQxLjk3ODNMNC4xMDE4OCA0MS44MDM3TDMuNTc4MTYgNDEuMDE4MlY0MC45MzFDMS4xMzQ1MiAzNy4wOTEgMS4xMzQ1MiAzMi4yMDM3IDMuNTc4MTYgMjguMzYzN0MzLjc1MjcxIDI4LjEwMTkgMy45MjczMSAyNy44NDAxIDQuMTg5MTMgMjcuNTc4M0M0LjE4OTEzIDI3LjUzNDYgNC4yMTA5NSAyNy41MTI4IDQuMjMyNzYgMjcuNDkxQzQuMjU0NTcgMjcuNDY5MiA0LjI3NjM4IDI3LjQ0NzMgNC4yNzYzOCAyNy40MDM3QzQuNDA3MjkgMjcuMjcyOCA0LjUzODIxIDI3LjEyMDEgNC42NjkxMiAyNi45NjczQzQuODAwMDQgMjYuODE0NiA0LjkzMDk1IDI2LjY2MTkgNS4wNjE4NiAyNi41MzFDNy4zMzA5NSAyNC4yNjE5IDEwLjIxMDkgMjMuMjE0NiAxMy4xNzgyIDIzLjIxNDZDMTYuMTQ1NCAyMy4yMTQ2IDE5LjAyNTUgMjQuMzQ5MiAyMS4yOTQ2IDI2LjUzMUMyMy40NzY0IDI4LjcxMjggMjQuNjExIDMxLjU5MjggMjQuNjExIDM0LjY0NzNDMjQuNjExIDM3LjcwMTkgMjMuMzg5MSA0MC41ODE5IDIxLjI5NDYgNDIuNzYzN0MyMC42ODM3IDQzLjM3NDYgMjAuMDcyOCA0My44OTgyIDE5LjQ2MTkgNDQuMzM0NlpcIlxuICB9XG4pIH0pLCBERiA9ICgpID0+IC8qIEBfX1BVUkVfXyAqLyBjKFwic3ZnXCIsIHsgdmlld0JveDogXCIwIDAgNDggNDhcIiwgZmlsbDogXCJub25lXCIsIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsIGNoaWxkcmVuOiAvKiBAX19QVVJFX18gKi8gYyhcbiAgXCJwYXRoXCIsXG4gIHtcbiAgICBmaWxsOiBcImN1cnJlbnRDb2xvclwiLFxuICAgIGZpbGxSdWxlOiBcImV2ZW5vZGRcIixcbiAgICBjbGlwUnVsZTogXCJldmVub2RkXCIsXG4gICAgZDogXCJNNDMuMTIxNSAyLjg3NDc2QzQzLjQ3IDMuMTM2MSA0My43MzE0IDMuMzk3NDQgNDQuMDc5OSAzLjc0NTlDNDYuNTE5MSA2LjE4NTEgNDcuOTEyOSA5LjQwODMzIDQ4IDEzLjA2NzFDNDggMTYuNDY0NiA0Ni42MDYyIDE5Ljc3NDkgNDQuMTY3IDIyLjIxNDFMMzUuNTQyNiAzMC44Mzg0TDM0LjQxMDEgMjkuNzA2TDM4LjY3ODcgMjUuNDM3NEMzNy40NTkxIDI1Ljc4NTggMzYuMjM5NiAyNS45NiAzNC45MzI5IDI1Ljk2QzMxLjUzNTQgMjUuOTYgMjguMjI1MSAyNC41NjYyIDI1Ljc4NTkgMjIuMTI3QzIzLjM0NjcgMTkuNjg3OCAyMS45NTI4IDE2LjQ2NDYgMjEuOTUyOCAxMi45OEMyMS45NTI4IDExLjY3MzMgMjIuMTI3IDEwLjQ1MzcgMjIuNDc1NSA5LjIzNDE0TDE3LjMzNTcgMTQuMzczOEgxOS44NjIxVjE1Ljk0MTlIMTQuNzIyM1YxMC44MDIySDE2LjI5MDRWMTMuMzI4NUwyNS43ODU5IDMuODMzMDVMMjUuNzg2MSAzLjgzMjg4QzI2LjA0NzQgMy41NzE1NSAyNi4zOTU3IDMuMjIzMTkgMjYuNzQ0MSAyLjk2MTlDMjYuNzQ0MSAyLjkwODA2IDI2Ljc3NzQgMi44ODc0OSAyNi44MjM0IDIuODU5MDZDMjYuODUxOCAyLjg0MTUgMjYuODg1IDIuODIwOTMgMjYuOTE4MyAyLjc4NzY2QzI3LjA0OSAyLjcwMDU1IDI3LjIwMTQgMi41OTE2NSAyNy4zNTM5IDIuNDgyNzVDMjcuNTA2MyAyLjM3Mzg2IDI3LjY1ODggMi4yNjQ5NyAyNy43ODk0IDIuMTc3ODVDMjcuNzg5NCAyLjA5MDc0IDI3Ljg3NjUgMi4wOTA3NiAyNy44NzY1IDIuMDkwNzZDMjkuOTY3MyAwLjY5NjkzNSAzMi40MDY2IDAgMzQuOTMyOSAwQzM3LjU0NjMgMCAzOS45ODU1IDAuNjk2OTM1IDQyLjA3NjIgMi4wOTA3NkM0Mi4yMDY5IDIuMjIxNDMgNDIuMzU5MyAyLjMzMDMyIDQyLjUxMTggMi40MzkyMUM0Mi42NjQyIDIuNTQ4MSA0Mi44MTY3IDIuNjU2OTkgNDIuOTQ3MyAyLjc4NzY2QzQyLjk5MDkgMi43ODc2NiA0My4wMTI3IDIuODA5NDQgNDMuMDM0NCAyLjgzMTIxQzQzLjA1NjIgMi44NTI5OCA0My4wNzggMi44NzQ3NiA0My4xMjE1IDIuODc0NzZaTTI2Ljc0NDEgMjAuOTk0NkMyOC45MjIgMjMuMTcyNCAzMS43OTY3IDI0LjM5MiAzNC44NDU3IDI0LjM5MkMzNy45ODE4IDI0LjM5MiA0MC44NTY2IDIzLjE3MjQgNDIuOTQ3MyAyMC45OTQ2QzQ1LjAzODEgMTguODE2NyA0Ni4yNTc3IDE1Ljk0MTkgNDYuMjU3NyAxMi44OTI5QzQ2LjI1NzcgOS44NDM4OSA0NS4xMjUyIDYuOTY5MTMgNDIuOTQ3MyA0Ljc5MTI4QzQyLjgxNjcgNC42NjA2MSA0Mi42NjQyIDQuNTI5OTUgNDIuNTExOCA0LjM5OTI4QzQyLjM1OTMgNC4yNjg2MiA0Mi4yMDY5IDQuMTM3OTYgNDIuMDc2MiA0LjAwNzI4QzQxLjk4OTEgNC4wMDcyOCA0MS45MDIgMy45MjAxNCA0MS45MDIgMy45MjAxNEM0MS42NDA3IDMuNjU4OCA0MS4zNzkzIDMuNDg0NTYgNDEuMTE4IDMuMzEwMzNDMzkuMjAxNCAyLjAwMzYyIDM3LjAyMzUgMS4zOTM4NiAzNC44NDU3IDEuMzkzODZDMzIuNjY3OCAxLjM5Mzg2IDMwLjQ5IDIuMDkwNzMgMjguNTczNSAzLjMxMDMzQzI4LjQ0MjggMy4zOTc0NCAyOC4zMTIxIDMuNTA2MzQgMjguMTgxNSAzLjYxNTIzQzI4LjA1MDggMy43MjQxMyAyNy45MjAxIDMuODMzMDIgMjcuNzg5NCAzLjkyMDE0QzI3LjcwMjMgMy45MjAxNCAyNy42MTUzIDQuMDA3MjggMjcuNjE1MyA0LjAwNzI4QzI3LjI2NjggNC4yNjg2MyAyNy4wMDU1IDQuNTI5OTQgMjYuNzQ0MSA0Ljc5MTI4QzI0LjY1MzQgNi45NjkxMyAyMy40MzM3IDkuODQzODkgMjMuNDMzNyAxMi44OTI5QzIzLjQzMzcgMTUuOTQxOSAyNC41NjYzIDE4LjgxNjcgMjYuNzQ0MSAyMC45OTQ2Wk0zNC44NDU3IDguMTg4NzVDMzYuMTUyNCA4LjE4ODc1IDM3LjI4NDkgOS4wNTk4OSAzNy4yODQ5IDEwLjE5MjRIMzguODUzQzM4Ljg1MyA4LjQ1MDA5IDM3LjQ1OTEgNy4wNTYyNiAzNS42Mjk3IDYuNzA3OFY1LjIyNjg1SDM0LjA2MTdWNi43MDc4QzMyLjIzMjMgNy4wNTYyNiAzMC45MjU1IDguNDUwMDkgMzAuOTI1NSAxMC4xOTI0QzMwLjkyNTUgMTIuMTA4OSAzMi42Njc4IDEzLjY3NjkgMzQuODQ1NyAxMy42NzY5QzM2LjE1MjQgMTMuNjc2OSAzNy4yODQ5IDE0LjU0ODEgMzcuMjg0OSAxNS42ODA2QzM3LjI4NDkgMTYuNzI1OSAzNi4yMzk1IDE3LjY4NDIgMzQuODQ1NyAxNy42ODQyQzMzLjUzOSAxNy42ODQyIDMyLjQwNjUgMTYuODEzIDMyLjQwNjUgMTUuNjgwNkgzMC44Mzg0QzMwLjgzODQgMTcuNDIyOCAzMi4yMzIyIDE4LjgxNjcgMzMuOTc0NSAxOS4xNjUxVjIwLjY0NjFIMzUuNTQyNlYxOS4xNjUxQzM3LjM3MiAxOC44MTY3IDM4Ljc2NTggMTcuNDIyOCAzOC43NjU4IDE1LjY4MDZDMzguNzY1OCAxMy43NjQgMzcuMDIzNSAxMi4xOTYgMzQuODQ1NyAxMi4xOTZDMzMuNTM5IDEyLjE5NiAzMi40MDY1IDExLjMyNDkgMzIuNDA2NSAxMC4xOTI0QzMyLjQwNjUgOS4wNTk4OSAzMy41MzkgOC4xODg3NSAzNC44NDU3IDguMTg4NzVaTTMwLjc1MTQgMzMuMTkwNkgyOC4yMjVIMjcuOTYzN1YzMS43MDk2SDMzLjEwMzRWMzYuODQ5M0gzMS41MzU0VjM0LjMyMzFMMjIuMDM5OSA0My44MTg1QzIxLjM0MyA0NC41MTU0IDIwLjU1OSA0NS4xMjUyIDE5Ljc3NSA0NS42NDc5QzE3Ljc3MTQgNDYuOTU0NiAxNS4zMzIxIDQ3LjY1MTUgMTIuODkyOSA0Ny42NTE1QzkuNDk1NDkgNDcuNjUxNSA2LjE4NTE1IDQ2LjI1NzcgMy43NDU5NSA0My44MTg1TDMuNzQ1ODEgNDMuODE4M0MzLjQ4NDQ4IDQzLjU1NyAzLjEzNjEgNDMuMjA4NiAyLjg3NDgxIDQyLjg2MDJDMi44MjA5OCA0Mi44NjAyIDIuODAwNDMgNDIuODI3IDIuNzcyMDMgNDIuNzgxQzIuNzU0NDcgNDIuNzUyNiAyLjczMzkxIDQyLjcxOTMgMi43MDA2MiA0Mi42ODZDMi42MTM1MSA0Mi41NTUzIDIuNTA0NTkgNDIuNDAyOSAyLjM5NTY3IDQyLjI1MDRMMi4zOTU2MSA0Mi4yNTAzQzIuMjg2NzMgNDIuMDk3OSAyLjE3Nzg1IDQxLjk0NTUgMi4wOTA3NiA0MS44MTQ5VjQxLjcyNzhDMC42OTY5MzUgMzkuNjM3IDAgMzcuMTk3OCAwIDM0LjY3MTVDMCAzMi4wNTgxIDAuNzg0MDI4IDI5LjYxODkgMi4xNzc4NSAyNy41MjgyQzIuMjc2MjUgMjcuMzk3IDIuMzYyMyAyNy4yNjU4IDIuNDQ1MyAyNy4xMzkyQzIuNTgyNzYgMjYuOTI5NyAyLjcxMTg2IDI2LjczMjggMi44NzQ4MSAyNi41Njk5QzIuODc0ODEgMjYuNTI2MyAyLjg5NjU4IDI2LjUwNDUgMi45MTgzNiAyNi40ODI4QzIuOTQwMTMgMjYuNDYxIDIuOTYxOSAyNi40MzkyIDIuOTYxOSAyNi4zOTU2QzMuMjIzMTggMjYuMDQ3MyAzLjQ4NDQ2IDI1Ljc4NiAzLjgzMjggMjUuNDM3N0wzLjgzMzA1IDI1LjQzNzRMMTIuNDU3NCAxNi44MTMxTDEzLjU4OTkgMTcuOTQ1Nkw5LjMyMTI4IDIyLjIxNDJDMTMuNzY0MSAyMC44MjAzIDE4LjgxNjcgMjEuOTUyOCAyMi4zMDEzIDI1LjQzNzRDMjQuNzQwNSAyNy44NzY2IDI2LjEzNDMgMzEuMDk5OCAyNi4xMzQzIDM0LjU4NDRDMjYuMTM0MyAzNS44OTExIDI1Ljk2IDM3LjExMDcgMjUuNjExNiAzOC4zMzAzTDMwLjc1MTQgMzMuMTkwNlpNMTMuMTU0MyA0Ni4wODM1QzE1LjMzMjIgNDYuMDgzNSAxNy40MjI5IDQ1LjQ3MzcgMTkuMjUyMyA0NC4zNDEyQzE5Ljk0OTIgNDMuOTA1NiAyMC42NDYxIDQzLjM4MjkgMjEuMzQzIDQyLjY4NkMyMy40MzM3IDQwLjUwODEgMjQuNjUzNCAzNy42MzM0IDI0LjY1MzQgMzQuNTg0NEMyNC42NTM0IDMxLjUzNTQgMjMuNTIwOCAyOC42NjA2IDIxLjM0MyAyNi40ODI4QzE5LjA3OCAyNC4zMDQ5IDE2LjIwMzMgMjMuMTcyNSAxMy4yNDE0IDIzLjE3MjVDMTAuMjc5NSAyMy4xNzI1IDcuNDA0NzMgMjQuMjE3OCA1LjEzOTc2IDI2LjQ4MjhDNS4wMDkwOSAyNi42MTM1IDQuODc4NDEgMjYuNzY1OSA0Ljc0Nzc0IDI2LjkxODRDNC42MTcwNiAyNy4wNzA4IDQuNDg2MzggMjcuMjIzMyA0LjM1NTcxIDI3LjM1MzlDNC4zNTU3MSAyNy4zOTc1IDQuMzMzOTQgMjcuNDE5MyA0LjMxMjE2IDI3LjQ0MUM0LjI5MDM5IDI3LjQ2MjggNC4yNjg2MiAyNy40ODQ2IDQuMjY4NjIgMjcuNTI4MkM0LjAwNzM0IDI3Ljc4OTQgMy44MzMxNyAyOC4wNTA3IDMuNjU4OTkgMjguMzEyTDMuNjU4ODYgMjguMzEyMkMxLjIxOTY2IDMyLjE0NTIgMS4yMTk2NiAzNy4wMjM2IDMuNjU4ODYgNDAuODU2NlY0MC45NDM3TDQuMTgxNTIgNDEuNzI3OFY0MS43Mjc4QzQuMTgxNTIgNDEuODE0OSA0LjE4MTUyIDQxLjgxNDkgNC4yNjg2MiA0MS45MDJDNC41Mjk4NyA0Mi4yNTA0IDQuNzkxMTQgNDIuNTExNiA1LjA1MjM5IDQyLjc3MjlMNS4wNTI0MiA0Mi43NzI5TDUuMDUyNDQgNDIuNzcyOUw1LjA1MjY3IDQyLjc3MzJDNS41NzUyNiA0My4yOTU3IDYuMTg0OTUgNDMuNzMxMiA2Ljc5NDY0IDQ0LjE2NjdMNi43OTQ2NyA0NC4xNjY3TDYuNzk0NzIgNDQuMTY2OEw2Ljc5NDk1IDQ0LjE2N0M4LjcxMTQ2IDQ1LjM4NjYgMTAuODg5NCA0Ni4wODM1IDEzLjE1NDMgNDYuMDgzNVpNMTEuOTgwOSAzNi42NTQ0QzExLjk1ODMgMzYuOTM2MyAxMS45MzQ4IDM3LjIyOTQgMTEuOTM0OCAzNy41NDYxQzExLjg5MzEgMzcuODM4MyAxMS44NzEzIDM4LjExMDUgMTEuODUwNCAzOC4zNzIyQzExLjgyNzcgMzguNjU2OCAxMS44MDU5IDM4LjkyOSAxMS43NjA1IDM5LjIwMTJIMTYuNzI2MVY0MS4wMzA3SDkuMzIxMzlDOS42Njk4NCAzOS4yMDEzIDkuODQ0MDUgMzcuNDU5IDkuODQ0MDUgMzUuODkwOUg4LjE4ODg2VjM0LjE0ODZIOS44NDQwNVYzMi45MjlDOS44NDQwNSAzMi4wNTc4IDEwLjAxODMgMzEuMjczOCAxMC4xOTI1IDMwLjY2NEMxMC40NTM5IDMwLjA1NDIgMTAuNzE1MiAyOS42MTg3IDExLjA2MzcgMjkuMjcwMkMxMS40MTIxIDI4LjkyMTggMTEuODQ3NyAyOC43NDc1IDEyLjM3MDQgMjguNTczM0MxMi44OTMxIDI4LjQ4NjIgMTMuNDE1OCAyOC4zOTkxIDE0LjAyNTYgMjguMzk5MUMxNC40NjExIDI4LjM5OTEgMTQuOTgzOCAyOC40ODYyIDE1LjMzMjMgMjguNTczM0MxNS43Njc5IDI4LjY2MDQgMTYuMTE2MyAyOC43NDc1IDE2LjQ2NDcgMjguOTIxOEwxNS45NDIgMzAuNjY0QzE1LjQxOTQgMzAuNDAyNyAxNC44MDk2IDMwLjIyODUgMTQuMTEyNyAzMC4yMjg1SDE0LjExMjRDMTMuNzY0MSAzMC4yMjg1IDEzLjUwMjggMzAuMjI4NSAxMy4yNDE1IDMwLjMxNTZDMTIuOTgwMiAzMC40MDI3IDEyLjgwNTkgMzAuNTc2OSAxMi42MzE3IDMwLjc1MTFDMTIuNDU3NCAzMC45MjU0IDEyLjI4MzIgMzEuMTg2NyAxMi4xOTYxIDMxLjUzNTJDMTIuMTA5IDMxLjg4MzYgMTIuMDIxOSAzMi4zMTkyIDEyLjAyMTkgMzIuODQxOVYzNC4xNDg2SDE1LjI0NTFWMzUuODkwOUgxMi4wMjE5QzEyLjAyMTkgMzYuMTQyMiAxMi4wMDE4IDM2LjM5MzQgMTEuOTgwOSAzNi42NTQ0WlwiXG4gIH1cbikgfSksIEhGID0gKCkgPT4gLyogQF9fUFVSRV9fICovIGMoXCJzdmdcIiwgeyB2aWV3Qm94OiBcIjAgMCA0OCA0OFwiLCBmaWxsOiBcIm5vbmVcIiwgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiwgY2hpbGRyZW46IC8qIEBfX1BVUkVfXyAqLyBjKFxuICBcInBhdGhcIixcbiAge1xuICAgIGZpbGw6IFwiY3VycmVudENvbG9yXCIsXG4gICAgZmlsbFJ1bGU6IFwiZXZlbm9kZFwiLFxuICAgIGNsaXBSdWxlOiBcImV2ZW5vZGRcIixcbiAgICBkOiBcIk00Ni44NDIgMjMuMTI3OEg0OFYyNC4yODU5SDQ2Ljg0MkM0Mi4wOTQxIDMzLjAyODkgMzMuNDA4OSAzOC40MTM3IDI0LjE0NDggMzguNDEzN0MxNC44ODA2IDM4LjQxMzcgNi4wMjE3MSAzMi44NTUyIDEuNDQ3NTMgMjQuMjg1OUgwVjIzLjEyNzhIMS40NDc1M0M2LjE5NTQyIDE0LjM4NDggMTQuODgwNiA5IDI0LjE0NDggOUMzMy40MDg5IDkgNDIuMDk0MSAxNC40NDI3IDQ2Ljg0MiAyMy4xMjc4Wk0yLjQzMTg1IDIzLjY0OUM2Ljc3NDQzIDMxLjg3MDkgMTUuMjg1OSAzNy4xOTc4IDI0LjE0NDggMzcuMTk3OEMzMy4wMDM2IDM3LjE5NzggNDEuMjgzNSAzMi4wNDQ2IDQ1Ljg1NzcgMjMuNjQ5QzQxLjI4MzUgMTUuMjUzMyAzMy4wMDM2IDEwLjEwMDEgMjQuMTQ0OCAxMC4xMDAxQzE1LjI4NTkgMTAuMTAwMSA3LjAwNjAzIDE1LjMxMTIgMi40MzE4NSAyMy42NDlaTTQuNTE2MjggMjMuMzU5NEM4LjU2OTM2IDE2LjM1MzQgMTYuMDk2NSAxMi4wMTA4IDI0LjE0NDggMTIuMDEwOEMzMi4xOTMgMTIuMDEwOCAzOS43MjAxIDE2LjQxMTMgNDMuODMxMSAyMy4zNTk0TDQ0LjAwNDggMjMuNjQ5TDQzLjgzMTEgMjMuOTM4NUMzOS43NzggMzAuOTQ0NSAzMi4yNTA5IDM1LjI4NzEgMjQuMjAyNyAzNS4yODcxQzE2LjA5NjUgMzUuMjg3MSA4LjM5NTY2IDMwLjgyODcgNC41MTYyOCAyMy45Mzg1TDQuMzQyNTggMjMuNjQ5TDQuNTE2MjggMjMuMzU5NFpNNS42NzQzMSAyMy43MDY4QzkuMzc5OTggMzAuMDc2IDE2LjYxNzYgMzQuMTg3IDI0LjE0NDggMzQuMTg3QzMxLjY3MTkgMzQuMTg3IDM4LjczNTggMzAuMTkxOCA0Mi42MTUyIDIzLjcwNjhDMzguNzM1OCAxNy4yMjE5IDMxLjY3MTkgMTMuMjI2OCAyNC4xNDQ4IDEzLjIyNjhDMTYuNjE3NiAxMy4yMjY4IDkuNTUzNjggMTcuMjIxOSA1LjY3NDMxIDIzLjcwNjhaTTMxLjk2MTQgMTguMDkwNUMzMS45NjE0IDE4Ljc4NTMgMzEuNjE0IDE5LjQyMjIgMzEuMDkyOSAxOS44ODU0TDMxLjYxNCAxOS42NTM4QzMyLjMwODggMjAuODY5NyAzMi42NTYyIDIyLjI1OTQgMzIuNjU2MiAyMy43MDY5QzMyLjY1NjIgMjguMzM5IDI4Ljg5MjYgMzIuMTYwNSAyNC4yMDI3IDMyLjE2MDVDMTkuNTcwNiAzMi4xNjA1IDE1Ljc0OTEgMjguMzk2OSAxNS43NDkxIDIzLjcwNjlDMTUuNzQ5MSAxOS4wNzQ4IDE5LjUxMjcgMTUuMjUzMyAyNC4yMDI3IDE1LjI1MzNDMjUuNTM0NCAxNS4yNTMzIDI2LjgwODIgMTUuNTQyOCAyOC4wMjQxIDE2LjE3OTdMMjcuNzkyNSAxNi41ODUxQzI4LjE5NzggMTYuMDY0IDI4LjgzNDcgMTUuNzE2NSAyOS41ODc1IDE1LjcxNjVDMzAuOTE5MiAxNS43MTY1IDMxLjk2MTQgMTYuNzU4OCAzMS45NjE0IDE4LjA5MDVaTTMwLjgwMzQgMTguMDMyNkMzMC44MDM0IDE3LjMzNzggMzAuMjgyMyAxNi44MTY3IDI5LjU4NzUgMTYuODE2N0MyOC45NTA1IDE2LjgxNjcgMjguMzcxNSAxNy4zOTU3IDI4LjM3MTUgMTguMDMyNkMyOC4zNzE1IDE4LjcyNzQgMjguODkyNiAxOS4yNDg1IDI5LjU4NzUgMTkuMjQ4NUMzMC4yODIzIDE5LjI0ODUgMzAuODAzNCAxOC43Mjc0IDMwLjgwMzQgMTguMDMyNlpNMTYuNzkxMyAyMy42NDlDMTYuNzkxMyAyNy43MDIxIDIwLjA5MTcgMzEuMDAyNCAyNC4xNDQ4IDMxLjAwMjRDMjguMTk3OCAzMS4wMDI0IDMxLjQ5ODIgMjcuNzAyMSAzMS40OTgyIDIzLjU5MTFDMzEuNDk4MiAyMi4zNzUyIDMxLjIwODcgMjEuMTU5MyAzMC42Mjk3IDIwLjExNzFDMzAuMzQwMiAyMC4yOTA4IDI5Ljk5MjggMjAuMzQ4NiAyOS42NDU0IDIwLjM0ODZDMjguMzEzNiAyMC4zNDg2IDI3LjI3MTQgMTkuMzA2NCAyNy4yNzE0IDE3Ljk3NDdDMjcuMjcxNCAxNy42MjczIDI3LjMyOTMgMTcuMzM3OCAyNy40NDUxIDE3LjA0ODNDMjYuNDAyOSAxNi41ODUxIDI1LjMwMjggMTYuMjk1NiAyNC4xNDQ4IDE2LjI5NTZDMjAuMDkxNyAxNi4yOTU2IDE2Ljc5MTMgMTkuNTk1OSAxNi43OTEzIDIzLjY0OVpNMjQuMTQ0OCAxOS42NTM3QzIxLjk0NDUgMTkuNjUzNyAyMC4xNDk2IDIxLjQ0ODcgMjAuMTQ5NiAyMy42NDg5QzIwLjE0OTYgMjUuODQ5MiAyMS45NDQ1IDI3LjY0NDEgMjQuMTQ0OCAyNy42NDQxQzI2LjM0NSAyNy42NDQxIDI4LjEzOTkgMjUuODQ5MiAyOC4xMzk5IDIzLjY0ODlDMjguMTM5OSAyMS40NDg3IDI2LjM0NSAxOS42NTM3IDI0LjE0NDggMTkuNjUzN1pNMjQuMTQ0OCAyNi41NDRDMjIuNTgxNCAyNi41NDQgMjEuMjQ5NyAyNS4yNzAyIDIxLjI0OTcgMjMuNjQ4OUMyMS4yNDk3IDIyLjA4NTYgMjIuNTIzNSAyMC43NTM5IDI0LjE0NDggMjAuNzUzOUMyNS43MDgxIDIwLjc1MzkgMjcuMDM5OCAyMi4wMjc3IDI3LjAzOTggMjMuNjQ4OUMyNy4wMzk4IDI1LjI3MDIgMjUuNzA4MSAyNi41NDQgMjQuMTQ0OCAyNi41NDRaXCJcbiAgfVxuKSB9KSwgVkYgPSAoKSA9PiAvKiBAX19QVVJFX18gKi8gYyhcInN2Z1wiLCB7IHZpZXdCb3g6IFwiMCAwIDQ4IDQ4XCIsIGZpbGw6IFwibm9uZVwiLCB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLCBjaGlsZHJlbjogLyogQF9fUFVSRV9fICovIGMoXG4gIFwicGF0aFwiLFxuICB7XG4gICAgZmlsbDogXCJjdXJyZW50Q29sb3JcIixcbiAgICBmaWxsUnVsZTogXCJldmVub2RkXCIsXG4gICAgY2xpcFJ1bGU6IFwiZXZlbm9kZFwiLFxuICAgIGQ6IFwiTTIzLjk2NzQgNC44MTk1NEMyNS4yNyA0LjgxOTU0IDI2LjM3NzIgMy43MTIzNCAyNi4zNzcyIDIuNDA5NzZDMjYuMzc3MiAxLjEwNzE4IDI1LjI3IDAgMjMuOTY3NCAwQzIyLjY2NDkgMCAyMS41NTc3IDEuMTA3MTggMjEuNTU3NyAyLjQwOTc2QzIxLjU1NzcgMy43Nzc0NyAyMi42NjQ5IDQuODE5NTQgMjMuOTY3NCA0LjgxOTU0Wk0yMy45Njc0IDEuMzAyNThDMjQuNTUzNiAxLjMwMjU4IDI1LjA3NDYgMS44MjM2IDI1LjA3NDYgMi40MDk3NkMyNS4wNzQ2IDIuOTk1OTIgMjQuNTUzNiAzLjUxNjk2IDIzLjk2NzQgMy41MTY5NkMyMy4zODEzIDMuNTE2OTYgMjIuODYwMiAyLjk5NTkyIDIyLjg2MDIgMi40MDk3NkMyMi44NjAyIDEuODIzNiAyMy4zMTYyIDEuMzAyNTggMjMuOTY3NCAxLjMwMjU4Wk0yMy45Njc0IDYuOTY4NzdDMTQuNTg4OSA2Ljk2ODc3IDYuOTY4NzcgMTQuNTg4OSA2Ljk2ODc3IDIzLjk2NzRDNi45Njg3NyAzMy4zNDYgMTQuNTg4OSA0MC45NjYxIDIzLjk2NzQgNDAuOTY2MUMzMy4zNDYgNDAuOTY2MSA0MC45NjYxIDMzLjM0NiA0MC45NjYxIDIzLjk2NzRDNDAuOTY2MSAxNC41ODg5IDMzLjM0NiA2Ljk2ODc3IDIzLjk2NzQgNi45Njg3N1pNMzIuOTU1MiAyMy4zMTYxQzMyLjg5MDEgMjAuNDUwNSAzMi40OTkzIDE3Ljc4MDIgMzEuNzgyOSAxNS41MDA3QzMzLjA4NTUgMTQuNzg0MiAzNC4xOTI3IDEzLjg3MjQgMzUuMDM5MyAxMi44MzA0QzM3Ljc3NDggMTUuNTY1OCAzOS40NjgxIDE5LjIxMyAzOS41OTg0IDIzLjMxNjFIMzIuOTU1MlpNMjQuNjE4NyA4LjMzNjQ4QzI2Ljg5ODIgOC43MjcyNSAyOC45MTcyIDExLjI2NzMgMzAuMjE5OCAxNC45MTQ1QzI4LjU5MTYgMTUuNjMwOSAyNi42Mzc3IDE2LjA4NjggMjQuNjE4NyAxNi4xNTJWOC4zMzY0OFpNMjMuMzE2MSA4LjMzNjQ4VjE2LjE1MkMyMS4yOTcxIDE2LjA4NjggMTkuNDA4NCAxNS42MzA5IDE3LjcxNSAxNC45MTQ1QzE5LjAxNzYgMTEuMjY3MyAyMS4wMzY2IDguNzI3MjUgMjMuMzE2MSA4LjMzNjQ4Wk0yMy4zMTYxIDE3LjM4OTRWMjMuMzE2MUgxNi4yODIyQzE2LjM0NzMgMjAuNzExIDE2LjczODEgMTguMjM2MSAxNy4zMjQzIDE2LjA4NjhDMTkuMTQ3OSAxNi44Njg0IDIxLjE2NjkgMTcuMzI0MyAyMy4zMTYxIDE3LjM4OTRaTTIzLjMxNjEgMjQuNjE4N1YzMC41NDU1QzIxLjE2NjkgMzAuNjEwNiAxOS4xNDc5IDMxLjA2NjUgMTcuMzI0MyAzMS44NDhDMTYuNjczIDI5LjY5ODggMTYuMzQ3MyAyNy4yMjM5IDE2LjI4MjIgMjQuNjE4N0gyMy4zMTYxWk0yMy4zMTYxIDMxLjg0OFYzOS42NjM1QzIxLjAzNjYgMzkuMjcyNyAxOS4wMTc2IDM2LjczMjcgMTcuNzE1IDMzLjA4NTVDMTkuNDA4NCAzMi4zNjkxIDIxLjI5NzEgMzEuOTEzMiAyMy4zMTYxIDMxLjg0OFpNMjQuNjE4NyAzOS42NjM1VjMxLjg0OEMyNi42Mzc3IDMxLjkxMzIgMjguNTI2NSAzMi4zNjkxIDMwLjIxOTggMzMuMDg1NUMyOC45MTcyIDM2LjczMjcgMjYuODk4MiAzOS4yNzI3IDI0LjYxODcgMzkuNjYzNVpNMjQuNjE4NyAzMC41NDU1VjI0LjYxODdIMzEuNjUyNkMzMS41ODc1IDI3LjIyMzkgMzEuMTk2NyAyOS42OTg4IDMwLjYxMDYgMzEuODQ4QzI4Ljc4NyAzMS4wNjY1IDI2Ljc2OCAzMC42MTA2IDI0LjYxODcgMzAuNTQ1NVpNMjQuNjE4NyAyMy4zMTYxVjE3LjM4OTRDMjYuNzY4IDE3LjMyNDMgMjguNzg3IDE2Ljg2ODQgMzAuNjEwNiAxNi4wODY4QzMxLjI2MTkgMTguMjM2MSAzMS41ODc1IDIwLjcxMSAzMS42NTI2IDIzLjMxNjFIMjQuNjE4N1pNMzQuMTI3NSAxMS45ODM3QzMzLjQxMTEgMTIuODk1NSAzMi40OTkzIDEzLjYxMTkgMzEuMzkyMSAxNC4yNjMyQzMwLjU0NTQgMTEuOTgzNyAyOS40MzgyIDEwLjA5NSAyOC4wNzA1IDguNzkyMzlDMzAuMzUwMSA5LjQ0MzY4IDMyLjM2OTEgMTAuNTUwOSAzNC4xMjc1IDExLjk4MzdaTTE2LjU0MjcgMTQuMjYzMkMxNS40MzU1IDEzLjYxMTkgMTQuNTIzNyAxMi44MzA0IDEzLjgwNzMgMTEuOTgzN0MxNS41NjU4IDEwLjQ4NTcgMTcuNTg0OCA5LjQ0MzY4IDE5Ljg2NDMgOC43OTIzOUMxOC40OTY2IDEwLjA5NSAxNy4zODk0IDExLjk4MzcgMTYuNTQyNyAxNC4yNjMyWk0xMi44MzA0IDEyLjgzMDRDMTMuNjc3IDEzLjg3MjQgMTQuNzg0MiAxNC43ODQyIDE2LjA4NjggMTUuNTAwN0MxNS4zNzA0IDE3Ljc4MDIgMTQuOTc5NiAyMC40NTA1IDE0LjkxNDUgMjMuMzE2MUg4LjIwNjIxQzguNDAxNiAxOS4yNzgxIDEwLjE2MDEgMTUuNTY1OCAxMi44MzA0IDEyLjgzMDRaTTguMjcxMzQgMjQuNjE4N0gxNC45Nzk2QzE1LjA0NDcgMjcuNDg0NCAxNS40MzU1IDMwLjE1NDcgMTYuMTUyIDMyLjQzNDJDMTQuODQ5NCAzMy4xNTA2IDEzLjc0MjIgMzQuMDYyNCAxMi44MzA0IDM1LjEwNDVDMTAuMTYwMSAzMi40MzQyIDguNDAxNiAyOC43MjE4IDguMjcxMzQgMjQuNjE4N1pNMTMuODA3MyAzNS45NTExQzE0LjUyMzcgMzUuMDM5MyAxNS40MzU1IDM0LjI1NzggMTYuNTQyNyAzMy42NzE2QzE3LjM4OTQgMzYuMDE2MyAxOC40OTY2IDM3LjkwNSAxOS44NjQzIDM5LjE0MjVDMTcuNTg0OCAzOC41NTYzIDE1LjUwMDcgMzcuNDQ5MSAxMy44MDczIDM1Ljk1MTFaTTMxLjM5MjEgMzMuNjcxNkMzMi40OTkzIDM0LjMyMjkgMzMuNDExMSAzNS4xMDQ1IDM0LjEyNzUgMzUuOTUxMUMzMi4zNjkxIDM3LjQ0OTEgMzAuMzUwMSAzOC40OTEyIDI4LjA3MDUgMzkuMTQyNUMyOS40MzgyIDM3LjkwNSAzMC41NDU0IDM2LjAxNjMgMzEuMzkyMSAzMy42NzE2Wk0zNS4xMDQ1IDM1LjEwNDVDMzQuMjU3OCAzNC4wNjI0IDMzLjE1MDYgMzMuMTUwNiAzMS43ODI5IDMyLjQzNDJDMzIuNDM0MiAzMC4xNTQ3IDMyLjg5MDEgMjcuNDg0NCAzMi45NTUyIDI0LjYxODdIMzkuNjYzNUMzOS40NjgxIDI4LjcyMTggMzcuNzc0OCAzMi40MzQyIDM1LjEwNDUgMzUuMTA0NVpNMjEuNTU3NyA0NS41OTAzQzIxLjU1NzcgNDQuMjg3NyAyMi42NjQ5IDQzLjE4MDUgMjMuOTY3NCA0My4xODA1QzI1LjI3IDQzLjE4MDUgMjYuMzc3MiA0NC4yMjI2IDI2LjM3NzIgNDUuNTkwM0MyNi4zNzcyIDQ2Ljg5MjkgMjUuMjcgNDguMDAwMSAyMy45Njc0IDQ4LjAwMDFDMjIuNjY0OSA0OC4wMDAxIDIxLjU1NzcgNDYuODkyOSAyMS41NTc3IDQ1LjU5MDNaTTIyLjg2MDIgNDUuNTI1MkMyMi44NjAyIDQ2LjExMTMgMjMuMzgxMyA0Ni42MzI0IDIzLjk2NzQgNDYuNjMyNEMyNC41NTM2IDQ2LjYzMjQgMjUuMDc0NiA0Ni4xNzY1IDI1LjA3NDYgNDUuNTI1MkMyNS4wNzQ2IDQ0LjkzOSAyNC41NTM2IDQ0LjQxOCAyMy45Njc0IDQ0LjQxOEMyMy4zODEzIDQ0LjQxOCAyMi44NjAyIDQ0LjkzOSAyMi44NjAyIDQ1LjUyNTJaTTQ1LjUyNTEgMjEuNTU3N0M0NC4yMjI1IDIxLjU1NzcgNDMuMTE1MyAyMi42NjQ5IDQzLjExNTMgMjMuOTY3NUM0My4xMTUzIDI1LjI3MDEgNDQuMjIyNSAyNi4zNzczIDQ1LjUyNTEgMjYuMzc3M0M0Ni44Mjc3IDI2LjM3NzMgNDcuOTM0OSAyNS4yNzAxIDQ3LjkzNDkgMjMuOTY3NUM0Ny45MzQ5IDIyLjY2NDkgNDYuODI3NyAyMS41NTc3IDQ1LjUyNTEgMjEuNTU3N1pNNDUuNTI1MSAyNS4wNzQ3QzQ0LjkzODkgMjUuMDc0NyA0NC40MTc5IDI0LjU1MzcgNDQuNDE3OSAyMy45Njc1QzQ0LjQxNzkgMjMuMzgxNCA0NC45Mzg5IDIyLjg2MDMgNDUuNTI1MSAyMi44NjAzQzQ2LjExMTMgMjIuODYwMyA0Ni42MzIzIDIzLjM4MTQgNDYuNjMyMyAyMy45Njc1QzQ2LjYzMjMgMjQuNjE4OCA0Ni4xMTEzIDI1LjA3NDcgNDUuNTI1MSAyNS4wNzQ3Wk0yLjQwOTc4IDIxLjU1NzdDMy43MTIzNiAyMS41NTc3IDQuODE5NTYgMjIuNjY0OSA0LjgxOTU2IDIzLjk2NzVDNC44MTk1NiAyNS4zMzUyIDMuNzEyMzYgMjYuMzc3MyAyLjQwOTc4IDI2LjM3NzNDMS4xMDcyIDI2LjM3NzMgMCAyNS4yNzAxIDAgMjMuOTY3NUMwIDIyLjY2NDkgMS4xMDcyIDIxLjU1NzcgMi40MDk3OCAyMS41NTc3Wk0xLjMwMjU4IDIzLjk2NzVDMS4zMDI1OCAyNC41NTM3IDEuODIzNjIgMjUuMDc0NyAyLjQwOTc4IDI1LjA3NDdDMi45OTU5NCAyNS4wNzQ3IDMuNTE2OTggMjQuNjE4OCAzLjUxNjk4IDIzLjk2NzVDMy41MTY5OCAyMy4zODE0IDIuOTk1OTQgMjIuODYwMyAyLjQwOTc4IDIyLjg2MDNDMS44MjM2MiAyMi44NjAzIDEuMzAyNTggMjMuMzgxNCAxLjMwMjU4IDIzLjk2NzVaTTE5LjQwODUgMy42NDcxOEwxOS4xNDc5IDIuNDA5NzRDMTAuODc2NiA0LjI5ODQ4IDQuMjk4NTQgMTAuODExNCAyLjQ3NDkzIDE5LjA4MjhMMy43MTIzOCAxOS4zNDMzQzUuNDcwODYgMTEuNTkyOSAxMS41OTMgNS40MDU2NyAxOS40MDg1IDMuNjQ3MThaTTIuNDc0OTMgMjkuMTc3OEwzLjcxMjM4IDI4Ljg1MjJDNS41MzU5OSAzNi40MDcxIDExLjY1ODEgNDIuNTI5MiAxOS4yNzgyIDQ0LjM1MjhMMTguOTUyNSA0NS41OTAzQzEwLjg3NjYgNDMuNzAxNiA0LjM2MzY3IDM3LjI1MzggMi40NzQ5MyAyOS4xNzc4Wk0yOC41MjY1IDQ0LjM1MjhMMjguNzg3IDQ1LjU5MDJDMzcuMDU4NCA0My43NjY2IDQzLjYzNjQgMzcuMzE4OSA0NS41OTAzIDI5LjExMjZMNDQuMzUyOCAyOC43ODdDNDIuNDY0MSAzNi41MzczIDM2LjI3NjkgNDIuNjU5NCAyOC41MjY1IDQ0LjM1MjhaTTQ1LjU5MDMgMTkuMDgyOEw0NC4zNTI4IDE5LjM0MzNDNDIuNTk0MyAxMS41Mjc4IDM2LjQwNzEgNS40MDU2NyAyOC41OTE2IDMuNjQ3MThMMjguODUyMSAyLjQwOTc0QzM3LjEyMzUgNC4yMzMzNSA0My43MDE1IDEwLjgxMTQgNDUuNTkwMyAxOS4wODI4WlwiXG4gIH1cbikgfSksIFBGID0gKCkgPT4gLyogQF9fUFVSRV9fICovIGMoXCJzdmdcIiwgeyB2aWV3Qm94OiBcIjAgMCA0OCA0OFwiLCBmaWxsOiBcIm5vbmVcIiwgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiwgY2hpbGRyZW46IC8qIEBfX1BVUkVfXyAqLyBjKFxuICBcInBhdGhcIixcbiAge1xuICAgIGZpbGw6IFwiY3VycmVudENvbG9yXCIsXG4gICAgZmlsbFJ1bGU6IFwiZXZlbm9kZFwiLFxuICAgIGNsaXBSdWxlOiBcImV2ZW5vZGRcIixcbiAgICBkOiBcIk03IDBIMzcuNDk5MUw0Mi4xNzE3IDQuNjcyNTdWNDhIN1YwWk00MC4zMDI3IDUuMDEyNDFMMzcuMzI5MyAyLjAzODk2VjUuMDEyNDFINDAuMzAyN1pNOC40NDQzMSAxLjQ0NDI2VjQ2LjQ3MDhINDAuNTU3NVY2LjM3MTY4SDM1LjhWMS40NDQyNkg4LjQ0NDMxWk0zMi41NzE3IDIzLjYxNzdIMzUuODg1VjM3LjYzNTRIMzguMTc4OFYzOS4xNjQ3SDEwLjk5M1YzNy42MzU0SDEzLjI4NjdWMzQuMTUyM0wxNy4xMDk4IDMyLjcwOFYzMS44NTg1VjMxLjAwODlMMjEuOTUyMiAyOC4yOTAzSDI2LjM3TDMwLjI3NzkgMjUuNDAxOEwzMi41NzE3IDIzLjYxNzdaTTM0LjQ0MDggMjUuMTQ3SDMzLjE2NjRMMzEuNTUyMiAyNi40MjEzSDMxLjYzNzJWMzcuNjM1NEgzNC40NDA4VjI1LjE0N1pNMTguNjM5IDM3LjYzNTRIMjEuNDQyNVYzMC4zMjkzTDE4LjYzOSAzMS45NDM0VjMzLjcyNzVWMzcuNjM1NFpNMjUuNjkwMyAyOS44MTk2SDIyLjg4NjhWMzcuNjM1NEgyNS42OTAzVjI5LjgxOTZaTTMwLjAyMyAyNy41MjU3TDI3LjIxOTUgMjkuNTY0NlYzNy42MzU0SDMwLjAyM1YyNy41MjU3Wk0xNy4wMjQ4IDM0LjMyMjJMMTQuNzMxIDM1LjE3MThWMzcuNjM1NEgxNy4wMjQ4VjM0LjMyMjJaTTM2LjEzOTkgMTUuMjA3SDIyLjEyMjJWMTYuNzM2MkgzNi4xMzk5VjE1LjIwN1pNMjIuMTIyMiAxOS40NTQ4SDM2LjEzOTlWMjAuOTg0SDIyLjEyMjJWMTkuNDU0OFpNMjkuMDg4NSAxMC45NTkySDIyLjEyMjJWMTIuNDg4NEgyOS4wODg1VjEwLjk1OTJaTTE5LjE0ODcgMjAuODE0MkgxMy41NDE3QzEzLjg1NzUgMTkuNTUwNyAxMy45NTMyIDE4LjI4NzEgMTQuMDMzMyAxNy4yMjgzQzE0LjAzOTQgMTcuMTQ4IDE0LjA0NTQgMTcuMDY5IDE0LjA1MTQgMTYuOTkxMkgxMi43NzdWMTUuNjMxOUgxNC4wNTE0VjE0LjY5NzRDMTQuMDUxNCAxNC4wMTc3IDE0LjEzNjMgMTMuNDIzMSAxNC4zMDYyIDEyLjk5ODNDMTQuNDc2MSAxMi40ODg1IDE0LjczMSAxMi4xNDg3IDE0Ljk4NTkgMTEuODkzOUMxNS4zMjU3IDExLjU1NCAxNS41ODA1IDExLjM4NDEgMTYuMDA1MyAxMS4yOTkyQzE2LjQzMDEgMTEuMjE0MiAxNi44NTQ4IDExLjEyOTMgMTcuMjc5NiAxMS4xMjkzSDE3LjI3OTlDMTcuNzA0NiAxMS4xMjkzIDE4LjA0NDQgMTEuMTI5MyAxOC4yOTkyIDExLjIxNDJDMTguNDg0IDExLjIxNDIgMTguNzEzNCAxMS4zMDM2IDE4LjkyMjggMTEuMzg1MUMxOS4wMDIyIDExLjQxNiAxOS4wNzg3IDExLjQ0NTcgMTkuMTQ4NyAxMS40NjkxTDE4LjcyMzkgMTIuODI4NEMxOC4yOTkyIDEyLjU3MzUgMTcuNzg5NCAxMi40ODg2IDE3LjI3OTYgMTIuNDg4NkgxNy4yNzk0QzE3LjAyNDYgMTIuNDg4NiAxNi43Njk5IDEyLjQ4ODYgMTYuNiAxMi41NzM1QzE2LjM0NTIgMTIuNjU4NCAxNi4yNjAzIDEyLjc0MzQgMTYuMDkwNSAxMi45MTMyTDE2LjA5MDMgMTIuOTEzM0MxNS45MjA0IDEzLjA4MzIgMTUuODM1NCAxMy4yNTMyIDE1Ljc1MDUgMTMuNTA4QzE1LjY2NTUgMTMuODQ3OCAxNS42NjU1IDE0LjEwMjYgMTUuNjY1NSAxNC41MjcyVjE0LjUyNzVWMTUuNTQ2OUgxOC4xMjkyVjE2LjkwNjNIMTUuNjY1NUMxNS42NjU1IDE3LjExODcgMTUuNjQ0MyAxNy4zMzEgMTUuNjIzIDE3LjU0MzRDMTUuNjAxOCAxNy43NTU4IDE1LjU4MDUgMTcuOTY4MiAxNS41ODA1IDE4LjE4MDZDMTUuNTM4IDE4LjM5MyAxNS41MTY4IDE4LjYwNTQgMTUuNDk1NiAxOC44MTc4QzE1LjQ3NDMgMTkuMDMwMiAxNS40NTMxIDE5LjI0MjYgMTUuNDEwNiAxOS40NTQ5SDE5LjE0ODdWMjAuODE0MlpcIlxuICB9XG4pIH0pLCBGRiA9ICgpID0+IC8qIEBfX1BVUkVfXyAqLyBjKFwic3ZnXCIsIHsgdmlld0JveDogXCIwIDAgNDggNDhcIiwgZmlsbDogXCJub25lXCIsIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsIGNoaWxkcmVuOiAvKiBAX19QVVJFX18gKi8gYyhcbiAgXCJwYXRoXCIsXG4gIHtcbiAgICBmaWxsOiBcImN1cnJlbnRDb2xvclwiLFxuICAgIGQ6IFwiTTQ4IDIzLjEzNjFMNDcuMzcxNyAyMi4xOTM3TDQ0Ljg1ODYgMjMuOTUyOUwzNi4zMTQyIDExLjcwMTZMMzguODI3MiA5Ljk0MjQxTDM4LjE5OSA5TDM0LjgwNjMgMTEuMzg3NEw0My4wMzY2IDIzLjEzNjFMNDEuNDY2IDI0LjA3ODVDNDAuMDIwOSAyNC45NTgxIDM4LjgyNzMgMjYuMDI2MiAzNy44MjIgMjcuMTU3MUMzNy42OTY0IDI3LjAzMTQgMzcuNTcwNyAyNi45MDU3IDM3LjM4MjIgMjYuNzgwMUwzMS4zNTA4IDIyLjYzMzVIMzEuNDEzNkMzMi40ODE3IDIyLjYzMzUgMzMuNjc1NCAyMi4zMTk0IDM0LjY4MDcgMjEuNDM5OEwzMy45ODk2IDIwLjU2MDJDMzEuODUzNSAyMi4zODIyIDI5LjIxNDcgMjEuMDYyOCAyOC41MjM2IDIwLjY4NTlMMjguMDIxIDIwLjM3MTdMMjMuNzQ4NyAxNy4yMzA0QzIzLjMwODkgMTYuOTE2MiAyMi43NDM1IDE2Ljc5MDYgMjIuMjQwOCAxNi45MTYyQzIxLjczODIgMTcuMDQxOSAyMS4yMzU2IDE3LjM1NiAyMC45ODQzIDE3Ljc5NThMMTkuOTc5MSAxOS4zNjY1QzE5LjAzNjcgMjAuODc0MyAxNy4zNDAzIDIyLjEzMDkgMTUuMzkyNyAyMS4zMTQxQzE1LjA3ODUgMjEuMTg4NSAxNC44OTAxIDIxIDE0LjgyNzMgMjAuODExNUMxNC43NjQ1IDIwLjQzNDUgMTUuMDc4NiAxOS45OTQ4IDE1LjI2NyAxOS44MDYzTDE4LjcyMjUgMTUuMjE5OUMxOS4zNTA4IDE0LjQwMzEgMjAuMzU2MSAxMy45MDA1IDIxLjQyNDEgMTMuOTAwNUMyMS40ODcgMTMuOTAwNSAyNi42Mzg4IDEzLjM5NzkgMzMuMjM1NiAxNS40NzEyTDMzLjQ4NjkgMTUuNTM0TDM2LjEyNTYgMTMuNzEyTDM1LjQ5NzQgMTIuNzY5NkwzMy4zNjEzIDE0LjI3NzVDMjYuNzAxNiAxMi4yMDQyIDIxLjYxMjYgMTIuNzA2OCAyMS40MjQxIDEyLjc2OTZDMjAuMTY3NiAxMi44MzI1IDE4LjkxMSAxMy4zOTc5IDE4LjA5NDMgMTQuMzQwM0wxNi4yMDk0IDE0LjQ2NkMxNS41ODEyIDE0LjUyODggMTQuOTUyOSAxNC4zNDAzIDE0LjMyNDYgMTQuMDg5TDEyLjI1MTMgMTIuNzA2OEwxMy4xOTM3IDExLjM4NzRMOS44MDExMSA5TDkuMTcyODMgOS45NDI0MUwxMS42ODU5IDExLjcwMTZMMy4xNDEzNiAyMy45NTI5TDAuNjI4MjcyIDIyLjE5MzdMMCAyMy4xMzYxTDMuMzkyNjggMjUuNTIzNUwxMS42ODU5IDEzLjcxMkwxMy43NTkyIDE1LjA5NDJMMTMuODg0OSAxNS4xNTcxQzE0LjU3NiAxNS41MzQgMTUuMjY3IDE1LjcyMjUgMTYuMDIwOSAxNS43MjI1QzE2LjA4MzggMTUuNzIyNSAxNi4yMDk0IDE1LjcyMjUgMTYuMjcyMyAxNS43MjI1TDE3LjIxNDcgMTUuNjU5N0wxNC41MTMxIDE5LjMwMzdDMTQuNDUwMyAxOS40MjkzIDEzLjYzMzUgMjAuMzA4OSAxMy44MjIgMjEuMjUxM0MxMy44ODQ4IDIxLjYyODMgMTQuMTk5IDIyLjE5MzcgMTUuMDE1NyAyMi41NzA3QzE3LjE1MTggMjMuNTEzMSAxOS40NzY0IDIyLjU3MDcgMjAuOTg0MyAyMC4yNDYxTDIxLjk4OTUgMTguNjc1NEMyMi4xMTUyIDE4LjQ4NjkgMjIuMzAzNyAxOC4zNjEyIDIyLjU1NSAxOC4yOTg0QzIyLjgwNjMgMTguMjM1NiAyMi45OTQ4IDE4LjI5ODQgMjMuMTgzMyAxOC40MjQxTDI3LjMyOTggMjEuNDM5OEwyNy41MTgzIDIxLjU2NTRMMjcuNzY5NyAyMS43NTM5QzI3LjgzMjUgMjEuODE2NyAyNy44OTUzIDIxLjgxNjcgMjcuOTU4MSAyMS44Nzk2TDM2Ljc1MzkgMjcuOTczOEMzNy4xOTM3IDI4LjIyNTEgMzcuMzgyMiAyOC42NjQ5IDM3LjM4MjIgMjkuMTY3NUMzNy4zODIyIDI5LjU0NDUgMzcuMjU2NiAyOS45MjE1IDM2Ljk0MjQgMzAuMTcyOEMzNi40Mzk4IDMwLjY3NTQgMzUuNjg1OSAzMC43MzgyIDM1LjEyMDQgMzAuMzYxMkMzNC43NDM1IDMwLjEwOTkgMjcuODMyNSAyNS4zMzUxIDI3Ljc2OTcgMjUuMjcyMkwyNy4xNDE0IDI2LjIxNDdDMjcuMjA0MiAyNi4yNzc1IDI3LjgzMjUgMjYuNjU0NCAyOC41ODY0IDI3LjIxOTlMMzUuMzcxNyAzMS44NjkxQzM1LjYyMzEgMzIuMTIwNCAzNS43NDg3IDMyLjQ5NzQgMzUuNzQ4NyAzMi45MzcyQzM1Ljc0ODcgMzMuMzc3IDM1LjU2MDIgMzMuODE2NyAzNS4zMDg5IDM0LjA2ODFDMzQuODA2MyAzNC41NzA3IDM0LjA1MjQgMzQuNjMzNSAzMy40ODY5IDM0LjI1NjVDMzMuNDI0MSAzNC4xOTM3IDMzLjExIDM0LjAwNTIgMzIuNzMzIDMzLjc1MzlMMzIuNjcwMSAzMy42OTExTDI1Ljc1OTIgMjguOTE2MkwyNS4xMzA5IDI5Ljg1ODZIMjUuMTkzOEMyNS40NDUxIDMwLjA0NzEgMzAuMTU3MSAzMy4zMTQxIDMyLjEwNDggMzQuNjMzNUMzMi41NDQ2IDM1LjE5ODkgMzIuNTQ0NSAzNi4wMTU3IDMyLjA0MTkgMzYuNTgxMUMzMS41MzkzIDM3LjA4MzggMzAuNzg1NCAzNy4xNDY2IDMwLjIxOTkgMzYuNzY5NkMzMC4wOTQzIDM2LjY0NCAyOC42NDkyIDM1LjcwMTYgMjcuMDE1NyAzNC41NzA3TDI2Ljk1MjkgMzQuNTA3OEwyMi40OTIyIDMxLjQyOTNDMjIuMzAzNyAzMS4zMDM3IDIyLjE3OCAzMS4yNDA4IDIyLjE3OCAzMS4yNDA4TDIxLjkyNjcgMzEuMTE1MkwyMS4yOTg0IDMyLjA1NzZMMjEuNjEyNiAzMi4zMDg5QzIyLjExNTIgMzIuNjg1OSAyNC4zMTQxIDM0LjE5MzcgMjYuMzI0NiAzNS41MTMxQzI2LjgyNzIgMzYuMDc4NSAyNi43NjQ0IDM2Ljg5NTMgMjYuMjYxOCAzNy40NjA3QzI1Ljc1OTIgMzcuOTYzMyAyNS4wMDUyIDM4LjAyNjIgMjQuNDM5OCAzNy42NDkyQzI0LjE4ODUgMzcuNDYwNyAyMi40OTIxIDM2LjMyOTggMjEuNjc1NCAzNS43NjQ0QzIxLjY3NTQgMzUuMDczMyAyMS40MjQxIDM0LjM4MjIgMjAuOTIxNSAzMy44MTY3QzIwLjU0NDUgMzMuNDM5OCAxOS45MTYzIDMzLjE4ODUgMTkuMzUwOCAzMy4xMjU2QzE5LjY2NDkgMzIuMTIwNCAxOS4yODggMzAuOTg5NSAxOC40MDg0IDMwLjI5ODRDMTcuOTY4NiAyOS45ODQzIDE3LjQ2NiAyOS43OTU4IDE2LjkwMDUgMjkuNzk1OEMxNy42NTQ1IDI4LjY2NDkgMTcuNDAzMSAyNy4wOTQyIDE2LjMzNTEgMjYuMjc3NUMxNS43Njk2IDI1LjkwMDUgMTUuMTQxNCAyNS43MTIgMTQuNDUwMyAyNS44Mzc3QzEzLjk0NzYgMjUuOTAwNSAxMy41MDc5IDI2LjE1MTggMTMuMTMwOSAyNi40NjZDMTIuOTQyNCAyNS45NjMzIDEyLjY5MTEgMjUuNTIzNSAxMi4yNTEzIDI1LjIwOTRDMTEuNjg1OSAyNC44MzI0IDExLjA1NzYgMjQuNjQ0IDEwLjM2NjUgMjQuNzY5NkM5LjY3NTM5IDI0Ljg5NTMgOS4xMDk5OCAyNS4yMDk0IDguNjcwMTkgMjUuNzc0OUw4LjQ4MTY3IDI2LjAyNjJMNS4xNTE4OCAyMy40NTAzTDQuNDYwNzkgMjQuMzI5OEw3Ljc5MDU5IDI2LjkwNThMNi45MTA5OSAyOC4wOTk1QzYuMDk0MjQgMjkuMjMwNCA2LjI4Mjc0IDMwLjg2MzkgNy40NzY0NSAzMS42ODA2QzcuOTE2MjQgMzEuOTk0OCA4LjQxODg4IDMyLjE4MzIgOC45ODQzMiAzMi4xODMySDkuMDQ3MTNDOC42MDczNCAzMy4yNTEzIDguOTIxNTEgMzQuNTA3OCA5Ljg2MzkyIDM1LjI2MThDMTAuMzAzNyAzNS41NzU5IDEwLjgwNjMgMzUuNzY0NCAxMS4zNzE4IDM1Ljc2NDRDMTEuNDk3NCAzNS43NjQ0IDExLjYyMzEgMzUuNzY0NCAxMS43NDg3IDM1Ljc2NDRDMTIuMDYyOSAzNS43MDE2IDEyLjM3NyAzNS41NzU5IDEyLjY5MTEgMzUuNDUwM0MxMi44MTY4IDM2LjAxNTcgMTMuMTMwOSAzNi41MTgzIDEzLjYzMzUgMzYuODk1M0MxNC4wNzMzIDM3LjIwOTQgMTQuNTc2IDM3LjM5NzkgMTUuMTQxNCAzNy4zOTc5QzE1LjI2NzEgMzcuMzk3OSAxNS4zOTI3IDM3LjM5NzkgMTUuNTE4NCAzNy4zOTc5QzE1LjgzMjUgMzcuMzM1MSAxNi4yMDk1IDM3LjIwOTQgMTYuNDYwOCAzNy4wODM4QzE2LjU4NjQgMzcuNjQ5MiAxNi45MDA2IDM4LjIxNDcgMTcuNDAzMiAzOC41OTE2QzE3Ljg0MyAzOC45MDU4IDE4LjM0NTYgMzkuMDk0MiAxOC45MTExIDM5LjA5NDJDMTkuMDM2NyAzOS4wOTQyIDE5LjE2MjMgMzkuMDk0MiAxOS4yODggMzkuMDk0MkMxOS45NzkxIDM4Ljk2ODYgMjAuNTQ0NSAzOC42NTQ0IDIwLjk4NDMgMzguMDg5QzIxLjE3MjggMzcuODM3NyAyMS4zNjEzIDM3LjUyMzUgMjEuNDI0MSAzNy4yMDk0QzIyLjMwMzcgMzcuNzc0OSAyMy40OTc0IDM4LjY1NDQgMjMuNzQ4NyAzOC43ODAxQzI0LjE4ODUgMzkuMDMxNCAyNC42OTExIDM5LjIxOTkgMjUuMTMwOSAzOS4yMTk5QzI1LjgyMiAzOS4yMTk5IDI2LjQ1MDMgMzguOTY4NiAyNi45NTI5IDM4LjQ2NkMyNy40NTU1IDM3Ljk2MzMgMjcuNjQ0IDM3LjMzNTEgMjcuNzA2OSAzNi43MDY4QzI4LjcxMjEgMzcuMzk3OSAyOS40MDMxIDM3LjkwMDUgMjkuNTI4OCAzNy45NjMzQzI5Ljk2ODYgMzguMjE0NyAzMC40NzEyIDM4LjQwMzEgMzAuOTExIDM4LjQwMzFDMzEuNjAyMSAzOC40MDMxIDMyLjIzMDQgMzguMTUxOCAzMi43MzMgMzcuNjQ5MkMzMy4yMzU3IDM3LjE0NjYgMzMuNDg2OSAzNi40NTU1IDMzLjQ4NjkgMzUuNzY0NEMzMy43MzgyIDM1LjgyNzIgMzQuMDUyNCAzNS44OSAzNC4zMDM3IDM1Ljg5QzM0Ljk5NDggMzUuODkgMzUuNjIzIDM1LjYzODcgMzYuMTI1NiAzNS4xMzYxQzM2LjYyODMgMzQuNjMzNSAzNi44Nzk2IDM0LjAwNTIgMzYuODc5NiAzMy4yNTEzQzM2Ljg3OTYgMzIuNzQ4NyAzNi43NTQgMzIuMzA4OSAzNi41NjU1IDMxLjg2OTFDMzcuMDA1MyAzMS43NDM0IDM3LjQ0NTEgMzEuNTU1IDM3LjgyMiAzMS4xNzhDMzguMzI0NiAzMC42NzU0IDM4LjU3NTkgMzAuMDQ3MSAzOC41NzU5IDI5LjM1NkMzOC41NzU5IDI5LjEwNDcgMzguNTEzMSAyOC44NTM0IDM4LjQ1MDMgMjguNjAyMUMzOS4zOTI3IDI3LjQ3MTIgNDAuNjQ5MiAyNi40MDMxIDQyLjA5NDIgMjUuNDYwN0w0My42NjQ5IDI0LjQ1NTVMNDQuNjcwMiAyNS44Mzc3TDQ4IDIzLjEzNjFaTTcuOTE2MjkgMzAuNDI0MUM3LjI4ODAyIDI5LjkyMTUgNy4xNjIzNiAyOS4wNDE5IDcuNjAyMTUgMjguNDEzNkw5LjM2MTI3IDI2LjA4OUM5LjYxMjU4IDI1Ljc3NDkgOS45MjY3MSAyNS41ODY0IDEwLjMwMzcgMjUuNTIzNUMxMC42ODA2IDI1LjQ2MDcgMTEuMDU3NiAyNS41ODY0IDExLjM3MTggMjUuNzc0OUMxMi4wMDAxIDI2LjI3NzUgMTIuMTI1NyAyNy4xNTcxIDExLjY4NTkgMjcuNzg1M0w5LjkyNjczIDMwLjEwOTlDOS42NzU0MiAzMC40MjQxIDkuMzYxMjggMzAuNjEyNiA4Ljk4NDMyIDMwLjY3NTRDOC42MDczNiAzMC43MzgyIDguMjMwNDIgMzAuNjc1NCA3LjkxNjI5IDMwLjQyNDFaTTExLjQzNDYgMzQuMjU2NUMxMS4wNTc2IDM0LjMxOTQgMTAuNjgwNiAzNC4xOTM3IDEwLjM2NjUgMzQuMDA1MkM5LjczODIyIDMzLjUwMjYgOS42MTI1NiAzMi42MjMgMTAuMDUyNCAzMS45OTQ4TDEzLjUwNzggMjcuMjE5OUMxMy43NTkyIDI2LjkwNTggMTQuMDczMyAyNi43MTczIDE0LjQ1MDMgMjYuNjU0NEMxNC44MjcyIDI2LjU5MTYgMTUuMjA0MiAyNi43MTczIDE1LjUxODQgMjYuOTA1OEMxNi4xNDY2IDI3LjQwODQgMTYuMjcyMyAyOC4yODggMTUuODMyNSAyOC45MTYyTDE0LjA3MzMgMzEuMzY2NUwxMy4wMDUzIDMyLjg3NDNDMTIuOTQyNSAzMi45MzcyIDEyLjk0MjQgMzMgMTIuODc5NiAzMy4wNjI4TDEyLjQzOTggMzMuNjkxMUMxMi4xODg1IDM0LjAwNTIgMTEuODc0NCAzNC4xOTM3IDExLjQzNDYgMzQuMjU2NVpNMTUuMjY3IDM1LjgyNzJDMTQuODkwMSAzNS44OTAxIDE0LjUxMzEgMzUuNzY0NCAxNC4xOTkgMzUuNTc1OUMxMy42MzM2IDM1LjEzNjEgMTMuNDQ1IDM0LjM4MjIgMTMuNzU5MiAzMy43NTM5TDE1LjAxNTcgMzIuMDU3NkwxNS42NDQgMzEuMjQwOEMxNS44OTUzIDMwLjkyNjcgMTYuMjA5NCAzMC43MzgyIDE2LjU4NjQgMzAuNjc1NEMxNi42NDkyIDMwLjY3NTQgMTYuNzEyMSAzMC42NzU0IDE2LjgzNzcgMzAuNjc1NEMxNy4xNTE5IDMwLjY3NTQgMTcuNDY2IDMwLjgwMSAxNy43MTczIDMwLjkyNjdDMTguMzQ1NiAzMS40MjkzIDE4LjQ3MTIgMzIuMzA4OSAxOC4wMzE1IDMyLjkzNzJMMTcuNDY2IDMzLjY5MTFDMTcuNDAzMiAzMy43NTM5IDE3LjQwMzIgMzMuODE2NyAxNy4zNDA0IDMzLjg3OTZMMTYuMzM1MSAzNS4yNjE4QzE1Ljk1ODEgMzUuNTc1OSAxNS42NDQgMzUuNzY0NCAxNS4yNjcgMzUuODI3MlpNMjAuMDQxOSAzNi44OTUzQzE5Ljc5MDYgMzcuMjA5NCAxOS40NzY0IDM3LjM5NzkgMTkuMDk5NSAzNy40NjA3QzE4LjcyMjUgMzcuNTIzNSAxOC4zNDU2IDM3LjM5NzkgMTguMDMxNSAzNy4yMDk0QzE3LjQwMzIgMzYuNzA2OCAxNy4yNzc1IDM1LjgyNzIgMTcuNzE3MyAzNS4xOTlDMTcuNzgwMSAzNS4xMzYxIDE3Ljg0MjkgMzUuMDEwNSAxNy45MDU4IDM0Ljg4NDhDMTcuOTY4NiAzNC44MjIgMTguMDk0MiAzNC42MzM1IDE4LjE1NzEgMzQuNTA3OEMxOC4zNDU2IDM0LjI1NjUgMTguNTk2OSAzNC4wMDUyIDE4LjcyMjUgMzMuOTQyNEMxOS4wOTk1IDMzLjg3OTYgMTkuNzkwNiAzNC4wNjgxIDE5Ljk3OTEgMzQuMjU2NUMyMC42NzAyIDM1LjAxMDUgMjAuNTQ0NSAzNi4yMDQyIDIwLjA0MTkgMzYuODk1M1pcIlxuICB9XG4pIH0pLCBYRiA9ICgpID0+IC8qIEBfX1BVUkVfXyAqLyBjKFwic3ZnXCIsIHsgdmlld0JveDogXCIwIDAgNDggNDhcIiwgZmlsbDogXCJub25lXCIsIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsIGNoaWxkcmVuOiAvKiBAX19QVVJFX18gKi8gYyhcbiAgXCJwYXRoXCIsXG4gIHtcbiAgICBmaWxsOiBcImN1cnJlbnRDb2xvclwiLFxuICAgIGQ6IFwiTTI0LjE0NzEgMC4wMDE2ODQ0M0MxOC41ODIxIC0wLjA2Nzg3ODQgMTMuMjI1NyAyLjAxOTAxIDkuMTkxMDggNS45MTQ1MkM1LjE1NjQ0IDkuODc5NiAzIDE1LjA5NjggMyAyMC43MzE0VjI2LjcxMzhDMyAyOC45Mzk4IDQuNTk5OTQgMzAuNjc4OSA2Ljc1NjM5IDMxLjAyNjdDNi45NjUwNyAzMi40MTc5IDguMTQ3NjUgMzMuNTMwOSA5LjYwODQ2IDMzLjUzMDlIMTEuNDE3MUMxMi4xMTI3IDMzLjUzMDkgMTIuNzM4OCAzMi45MDQ5IDEyLjczODggMzIuMjA5MlYyMS4yODc5QzEyLjczODggMjAuNTkyMyAxMi4xMTI3IDE5Ljk2NjIgMTEuNDE3MSAxOS45NjYySDkuNjA4NDZDOS4wNTE5NiAxOS45NjYyIDguNDk1NDYgMjAuMTA1MyA4LjA3ODA4IDIwLjM4MzZDOC4yODY3NyAxMS44OTY5IDE1LjI0MzEgNS4wNzk3NiAyMy43Mjk3IDUuMDc5NzZDMzIuMjE2NCA1LjA3OTc2IDM5LjE3MjYgMTEuODk2OSAzOS4zODEzIDIwLjM4MzZDMzguOTY0IDIwLjEwNTMgMzguNDA3NCAxOS45NjYyIDM3Ljg1MDkgMTkuOTY2MkgzNi4wNDIzQzM1LjM0NjcgMTkuOTY2MiAzNC43MjA2IDIwLjU5MjMgMzQuNzIwNiAyMS4yODc5VjMyLjIwOTJDMzQuNzIwNiAzMi45MDQ5IDM1LjM0NjcgMzMuNTMwOSAzNi4wNDIzIDMzLjUzMDlIMzcuODUwOUMzOC4xOTg4IDMzLjUzMDkgMzguNDc3IDMzLjQ2MTQgMzguNzU1MyAzMy4zOTE4QzM3LjA4NTggMzkuMDI2NCAzMi40MjUxIDQzLjMzOTMgMjYuNTEyMiA0NC4zODI3SDI2LjIzNEMyNi4wMjUzIDQzLjQwODkgMjUuMTkwNSA0Mi43MTMyIDI0LjIxNjYgNDIuNzEzMkgyMy4xMDM2QzIxLjk5MDYgNDIuNzEzMiAyMS4wMTY4IDQzLjYxNzUgMjEuMDE2OCA0NC44MDAxVjQ1LjkxMzFDMjEuMDE2OCA0Ny4wMjYxIDIxLjkyMTEgNDggMjMuMTAzNiA0OEgyNC4yMTY2QzI1LjMyOTcgNDggMjYuMzAzNSA0Ny4wOTU3IDI2LjMwMzUgNDUuOTEzMVY0NS43NzRIMjYuNjUxM0MzMy44ODU5IDQ0LjUyMTkgMzkuMzgxMyAzOC44MTc3IDQwLjU2MzkgMzEuNzIyM0M0MC42MzM1IDMxLjUxMzYgNDAuNzAzIDMxLjMwNDkgNDAuNzcyNiAzMS4wMjY3QzQyLjg1OTUgMzAuNzQ4NCA0NC41MjkgMjguOTM5OCA0NC41MjkgMjYuNzEzOFYyMS40MjdDNDQuNTI5IDkuODEwMDMgMzUuNDE2MyAwLjIxMDM3MyAyNC4xNDcxIDAuMDAxNjg0NDNaTTI0Ljk4MTggNDUuNzc0QzI0Ljk4MTggNDYuMTIxOCAyNC43MDM2IDQ2LjQ2OTYgMjQuMjg2MiA0Ni40Njk2SDIzLjE3MzJDMjIuODI1NCA0Ni40Njk2IDIyLjQ3NzYgNDYuMTkxNCAyMi40Nzc2IDQ1Ljc3NFY0NC42NjFDMjIuNDc3NiA0NC4zMTMyIDIyLjc1NTggNDMuOTY1NCAyMy4xNzMyIDQzLjk2NTRIMjQuMjg2MkMyNC42MzQgNDMuOTY1NCAyNC45ODE4IDQ0LjI0MzYgMjQuOTgxOCA0NC42NjFWNDUuNzc0Wk05LjY3ODAyIDIxLjI4NzlMMTEuNDE3MSAyMS4yMTgzTDExLjQ4NjcgMzIuMDcwMUg5LjY3ODAyQzguODQzMjcgMzIuMDcwMSA4LjE0NzY0IDMxLjQ0NDEgOC4xNDc2NCAzMC42MDkzVjIyLjgxODNDOC4xNDc2NCAyMS45ODM1IDguODQzMjcgMjEuMjg3OSA5LjY3ODAyIDIxLjI4NzlaTTM3LjkyMDUgMzIuMDcwMUwzNi4xODE0IDMyLjEzOTdMMzYuMTExOSAyMS4yODc5SDM3LjkyMDVDMzguNzU1MyAyMS4yODc5IDM5LjQ1MDkgMjEuOTgzNSAzOS40NTA5IDIyLjc0ODdWMjguOTM5OEMzOS40NTA5IDI5LjcwNSAzOS4zODEzIDMwLjQ3MDIgMzkuMjQyMiAzMS4yMzU0QzM5LjAzMzUgMzEuNzIyMyAzOC40NzcgMzIuMDcwMSAzNy45MjA1IDMyLjA3MDFaTTQzLjEzNzcgMjYuNzEzOEM0My4xMzc3IDI4LjEwNSA0Mi4xNjM4IDI5LjI4NzYgNDAuODQyMSAyOS42MzU0VjI4LjkzOThWMjQuMjc5MVYyMC44NzA1QzQwLjg0MjEgMTEuNDc5NSAzMy4xOTAyIDMuODI3NjQgMjMuNzk5MyAzLjgyNzY0QzE0LjQwODMgMy44Mjc2NCA2Ljc1NjM5IDExLjQ3OTUgNi43NTYzOSAyMC44NzA1VjI5LjcwNUM1LjQzNDY5IDI5LjQyNjcgNC40NjA4MSAyOC4xNzQ2IDQuNDYwODEgMjYuNzgzNFYyMC44MDFDNC40NjA4MSAxNS41ODM3IDYuNTQ3NyAxMC42NDQ4IDEwLjIzNDUgNi45NTc5NkMxMy44NTE4IDMuMzQwNyAxOC43MjEyIDEuMzkyOTQgMjMuNzk5MyAxLjM5Mjk0QzIzLjkzODQgMS4zOTI5NCAyNC4wNzc1IDEuMzkyOTQgMjQuMTQ3MSAxLjM5Mjk0QzM0LjY1MTEgMS42MDE2MyA0My4xMzc3IDEwLjU3NTIgNDMuMTM3NyAyMS40MjdWMjYuNzEzOFpcIlxuICB9XG4pIH0pLCBVRiA9ICgpID0+IC8qIEBfX1BVUkVfXyAqLyBjKFwic3ZnXCIsIHsgdmlld0JveDogXCIwIDAgNDggNDhcIiwgZmlsbDogXCJub25lXCIsIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsIGNoaWxkcmVuOiAvKiBAX19QVVJFX18gKi8gYyhcbiAgXCJwYXRoXCIsXG4gIHtcbiAgICBmaWxsOiBcImN1cnJlbnRDb2xvclwiLFxuICAgIGZpbGxSdWxlOiBcImV2ZW5vZGRcIixcbiAgICBjbGlwUnVsZTogXCJldmVub2RkXCIsXG4gICAgZDogXCJNNDIuMzcwOCAxLjQ1ODk3VjUuNjg5OTZINDAuMjU1M1YyMS4zMDA5QzQxLjQ5NTQgMjEuNTkyNyA0Mi4zNzA4IDIyLjY4NjkgNDIuMzcwOCAyNEM0Mi4zNzA4IDI1LjMxMyA0MS40OTU0IDI2LjQwNzMgNDAuMjU1MyAyNi42OTlWNDIuMzFINDIuMzcwOFY0Ni41NDFINDQuMTk0NVY0OEg0Mi4zNzA4SDUuNzUwNzNINFY0Ni41NDFINS43NTA3M1Y0Mi4zMUg3Ljg2NjJWMjYuNjk5QzYuNjI2MDggMjYuNDA3MyA1Ljc1MDczIDI1LjMxMyA1Ljc1MDczIDI0QzUuNzUwNzMgMjIuNjg2OSA2LjYyNjA4IDIxLjU5MjcgNy44NjYyIDIxLjMwMDlWNS42ODk5Nkg1Ljc1MDczVjEuNDU4OTdINFYwSDUuNzUwNzNINDIuMzcwOEg0NC4xOTQ1VjEuNDU4OTdINDIuMzcwOFpNNDAuOTExOCAxLjQ1ODk3SDcuMjA5NzRWNC4yMzA5OUgxMi4wOTcySDM2LjAyNDNINDAuOTExOFYxLjQ1ODk3Wk0yNy4wNTE2IDI0LjY1NjVMMjYuNjE0IDI0LjUxMDZMMjYuNTQxIDI0VjIzLjQ4OTRMMjcuMDUxNiAyMy4yNzA1QzMwLjY5OSAyMS44ODQ1IDMzLjM5ODIgMTguNjc0NyAzNC4yMDA2IDE0Ljg4MTRDMzAuODQ1IDE1LjkwMjcgMjcuNDE2NCAxNi40MTM0IDIzLjk4NzggMTYuNDEzNEMyMC40ODYzIDE2LjQxMzQgMTcuMDU3NyAxNS45MDI3IDEzLjcwMjEgMTQuODgxNEMxNC41Nzc0IDE4LjY3NDcgMTcuMjAzNiAyMS45NTc0IDIwLjkyNCAyMy4zNDM0TDIxLjM2MTYgMjMuNDg5NEwyMS40MzQ3IDI0LjUxMDZMMjAuOTI0IDI0LjcyOTRDMTYuNDAxMiAyNi40MDcyIDEzLjQxMDMgMzAuNzg0MiAxMy40MTAzIDM1LjUyNThWMzYuMTgyM0wyMC42MzIyIDMzLjQxMDNDMjIuNzQ3NyAzMi42MDc5IDI1LjE1NSAzMi42MDc5IDI3LjI3MDUgMzMuNDEwM0wzNC40OTIzIDM2LjEwOTRWMzUuNDUyOEMzNC40OTIzIDMwLjcxMTIgMzEuNTAxNSAyNi4zMzQzIDI3LjA1MTYgMjQuNjU2NVpNMjEuMjE1OCAzNC44NjkzTDEzLjQ4MzMgMzcuNzg3MlY0Mi4zMUgzNC41NjUzVjM3Ljc4NzJMMjYuODMyOCAzNC44NjkzQzI1LjAwOSAzNC4yMTI3IDIzLjAzOTUgMzQuMjEyNyAyMS4yMTU4IDM0Ljg2OTNaTTM0LjUyODggMTIuODM4OUMzNC41NDcxIDEyLjY5MyAzNC41NjUzIDEyLjU0NzEgMzQuNTY1MyAxMi40MDEyVjUuNjg5OTZIMTMuNDgzM1YxMi40NzQxQzEzLjQ4MzMgMTIuNjIgMTMuNTAxNSAxMi43NDc3IDEzLjUxOTcgMTIuODc1NEMxMy41MzggMTMuMDAzIDEzLjU1NjIgMTMuMTMwNyAxMy41NTYyIDEzLjI3NjZDMjAuMzQwNCAxNS40NjUgMjcuNzA4MSAxNS40NjUgMzQuNDkyMyAxMy4yNzY2QzM0LjQ5MjMgMTMuMTMwNyAzNC41MTA2IDEyLjk4NDggMzQuNTI4OCAxMi44Mzg5Wk04LjUyMjc2IDIyLjYxNEM3Ljc5MzI3IDIyLjYxNCA3LjEzNjcyIDIzLjE5NzUgNy4xMzY3MiAyNEM3LjEzNjcyIDI0LjcyOTQgNy43OTMyNyAyNS4zODYgOC41MjI3NiAyNS4zODZDOS4yNTIyNCAyNS4zODYgOS45MDg3OSAyNC44MDI0IDkuOTA4NzkgMjRDOS45MDg3OSAyMy4yNzA1IDkuMzI1MTkgMjIuNjE0IDguNTIyNzYgMjIuNjE0Wk0xMS4zNjc4IDI0QzExLjM2NzggMjUuMzEzIDEwLjQ5MjQgMjYuNDA3MyA5LjI1MjI0IDI2LjY5OVY0Mi4zMUgxMi4wMjQzVjM1LjUyNThDMTIuMDI0MyAzMC43MTEyIDE0Ljc5NjMgMjYuMTg4NCAxOS4wMjczIDI0QzE0Ljc5NjMgMjEuODExNSAxMi4wMjQzIDE3LjM2MTcgMTIuMDI0MyAxMi40NzQxVjUuNjg5OTZIOS4yNTIyNFYyMS4zMDA5QzEwLjQ5MjQgMjEuNTkyNyAxMS4zNjc4IDIyLjY4NjkgMTEuMzY3OCAyNFpNNy4xMzY3MiA0Ni41NDFINDAuODM4OVY0My43NjlIMzUuOTUxM0gxMi4wMjQzSDcuMTM2NzJWNDYuNTQxWk0zOS41MjU4IDI1LjM4NkM0MC4yNTUzIDI1LjM4NiA0MC45MTE4IDI0LjgwMjQgNDAuOTExOCAyNEM0MC45MTE4IDIzLjE5NzUgNDAuMjU1MyAyMi42MTQgMzkuNTI1OCAyMi42MTRDMzguNzk2MyAyMi42MTQgMzguMTM5NyAyMy4xOTc1IDM4LjEzOTcgMjRDMzguMTM5NyAyNC43Mjk0IDM4LjcyMzMgMjUuMzg2IDM5LjUyNTggMjUuMzg2Wk0zNi42ODA4IDIzLjkyN0MzNi42ODA4IDIyLjYxNCAzNy41NTYyIDIxLjUxOTcgMzguNzk2MyAyMS4yMjc5VjUuNjE3SDM2LjAyNDNWMTIuNDAxMkMzNi4wMjQzIDE3LjIxNTggMzMuMjUyMiAyMS43Mzg2IDI5LjAyMTIgMjMuOTI3QzMzLjI1MjIgMjYuMTE1NSAzNi4wMjQzIDMwLjU2NTMgMzYuMDI0MyAzNS40NTI4VjQyLjIzN0gzOC43OTYzVjI2LjYyNjFDMzcuNTU2MiAyNi4zMzQzIDM2LjY4MDggMjUuMjQwMSAzNi42ODA4IDIzLjkyN1pNMjQuNzkwMyAyMy40MTY1SDIzLjMzMTNWMjUuNTMySDI0Ljc5MDNWMjMuNDE2NVpNMjQuNzkwMyAyNy42NDczSDIzLjMzMTNWMjkuNzYyOEgyNC43OTAzVjI3LjY0NzNaXCJcbiAgfVxuKSB9KSwgWUYgPSAoKSA9PiAvKiBAX19QVVJFX18gKi8gYyhcInN2Z1wiLCB7IHZpZXdCb3g6IFwiMCAwIDQ4IDQ4XCIsIGZpbGw6IFwibm9uZVwiLCB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLCBjaGlsZHJlbjogLyogQF9fUFVSRV9fICovIGMoXG4gIFwicGF0aFwiLFxuICB7XG4gICAgZmlsbDogXCJjdXJyZW50Q29sb3JcIixcbiAgICBmaWxsUnVsZTogXCJldmVub2RkXCIsXG4gICAgY2xpcFJ1bGU6IFwiZXZlbm9kZFwiLFxuICAgIGQ6IFwiTTAgMjRDMCAxMC43ODU3IDEwLjc4NTcgMCAyNCAwQzM3LjIxNDMgMCA0OCAxMC43MTQzIDQ4IDIzLjkyODZDNDggMzcuMjE0MyAzNy4yMTQzIDQ4IDI0IDQ4QzEwLjc4NTcgNDggMCAzNy4yMTQzIDAgMjRaTTQ2LjU3MTUgMjMuOTI4NkM0Ni41NzE1IDExLjUgMzYuNDI4NiAxLjM1NzE0IDI0IDEuMzU3MTRDMTEuNTcxNSAxLjM1NzE0IDEuNDI4NTggMTEuNSAxLjU3MTQ0IDI0QzEuNTcxNDQgMjkgMy4yODU3MiAzMy42NDI5IDYuMDcxNDMgMzcuNDI4NkwxMSAzMC4wNzE1SDYuNzg1NzJDNS4xNDI4NiAzMC4wNzE1IDMuODU3MTYgMjguNzg1NyAzLjg1NzE2IDI3LjE0MjlDMy44NTcxNiAyNi43MTQzIDMuOTk5OTkgMjYuMjg1NyA0LjE0Mjg1IDI1LjkyODZDNC41NzE0MiAyNC44NTcyIDUuNjQyODYgMjQuMjE0MyA2Ljc4NTcyIDI0LjIxNDNINi44NTcxN0M3LjI4NTc1IDIyLjE0MjkgOS4wNzE0NCAyMC42NDI5IDExLjIxNDMgMjAuNjQyOUMxMi4zNTcyIDIwLjY0MjkgMTMuNSAyMS4wNzE0IDE0LjM1NzIgMjEuOTI4NkMxNC43ODU4IDIyLjM1NzIgMTUuMTQyOSAyMi45Mjg2IDE1LjM1NzIgMjMuNUwxNyAyMS4wNzE0TDIwLjQyODYgMjYuMTQyOUwyOC4wNzE0IDEzLjY0MjlMMjkuODU3MiAxNi4yMTQzQzMwLjQyODYgMTUuNjQyOSAzMS4xNDI5IDE1LjI4NTcgMzIgMTUuMjg1N0gzMi4wNzE0QzMyLjUgMTMuMjE0MyAzNC4yODU4IDExLjcxNDMgMzYuNDI4NiAxMS43MTQzQzM3LjU3MTUgMTEuNzE0MyAzOC43MTQzIDEyLjE0MjkgMzkuNTcxNCAxM0M0MC4zNTcxIDEzLjc4NTcgNDAuNzg1OCAxNC43ODU3IDQwLjg1NzIgMTUuOTI4NkM0MS40Mjg2IDE2IDQxLjkyODYgMTYuMjg1NyA0Mi4yODU4IDE2LjY0MjlDNDIuNzg1OCAxNy4xNDI5IDQzLjA3MTQgMTcuNzg1NyA0My4wNzE0IDE4LjVDNDMuMDcxNCAxOS4yMTQzIDQyLjc4NTggMTkuODU3MiA0Mi4yODU4IDIwLjM1NzJDNDEuNzg1OCAyMC44NTcyIDQxLjE0MjkgMjEuMTQyOSA0MC40Mjg2IDIxLjE0MjlIMzMuMDcxNEw0My4wNzE0IDM1LjkyODZDNDUuMjg1NyAzMi41IDQ2LjU3MTUgMjguMzU3MiA0Ni41NzE1IDIzLjkyODZaTTQxLjIxNDMgMTcuNzg1N0M0MSAxNy41NzE0IDQwLjU3MTQgMTcuNDI4NiA0MC4yMTQzIDE3LjVMMzkuMjE0MyAxNy43MTQzTDM5LjM1NzIgMTYuNzg1N1YxNi4zNTcyQzM5LjM1NzIgMTUuNTcxNCAzOSAxNC43ODU3IDM4LjQyODYgMTQuMjE0M0MzNy44NTcyIDEzLjU3MTQgMzcuMDcxNCAxMy4yODU3IDM2LjI4NTcgMTMuMjg1N0MzNC41NzE0IDEzLjI4NTcgMzMuMjg1OCAxNC42NDI5IDMzLjIxNDQgMTYuMjg1N1YxNy4yMTQzTDMyLjI4NTcgMTYuOTI4NkMzMi4xNDI5IDE2Ljg1NzIgMzIgMTYuODU3MiAzMS44NTcyIDE2Ljg1NzJDMzEuMzU3MiAxNi44NTcyIDMwLjg1NzIgMTcuMTQyOSAzMC41NzE0IDE3LjY0MjlMMzIuMDcxNCAxOS44NTcySDQwLjM1NzJDNDAuNzE0NCAxOS44NTcyIDQxIDE5LjcxNDMgNDEuMjE0MyAxOS41QzQxLjQyODYgMTkuMjE0MyA0MS41NzE1IDE4LjkyODYgNDEuNTcxNSAxOC42NDI5QzQxLjU3MTUgMTguMjg1NyA0MS40Mjg2IDE4IDQxLjIxNDMgMTcuNzg1N1pNMjkuODU3MiAyMy4wNzE0TDMxLjUgMjEuNDI4NkwyOCAxNi4yODU3TDI0LjcxNDMgMjEuNjQyOUwyNi4xNDI5IDIzLjA3MTRMMjggMjAuNzg1N0wyOS44NTcyIDIzLjA3MTRaTTYuNzE0MzEgMjguNjQyOUgxMS44NTcyTDE0LjIxNDMgMjUuMjE0M1YyNS4xNDI5QzE0LjIxNDMgMjQuMzU3MiAxMy44NTcyIDIzLjU3MTQgMTMuMjg1NyAyM0MxMi43MTQzIDIyLjM1NzIgMTEuOTI4NiAyMi4wNzE0IDExLjE0MjkgMjIuMDcxNEM5LjQyODYgMjIuMDcxNCA4LjE0Mjg1IDIzLjQyODYgOC4wNzE0MyAyNS4wNzE0VjI2TDcuMTQyODYgMjUuNzE0M0M3IDI1LjY0MjkgNi44NTcxNiAyNS42NDI5IDYuNzE0MzEgMjUuNjQyOUM2LjE0Mjg4IDI1LjY0MjkgNS41NzE0MyAyNS45Mjg2IDUuMzU3MTUgMjYuNUw1LjM1NzEyIDI2LjUwMDFDNS4yODU3IDI2LjcxNDQgNS4yMTQyOCAyNi45Mjg2IDUuMjE0MjggMjcuMTQyOUM1LjIxNDI4IDI3LjkyODYgNS44NTcxNiAyOC42NDI5IDYuNzE0MzEgMjguNjQyOVpNMTYuOTI4NiAyMy42NDI5TDE1LjUgMjUuNzE0M0wxMy41IDI4LjVMMTUuMDAwMSAzMEwxNi44NTcyIDI3LjcxNDNMMTguNzE0MyAzMEwyMC4yMTQzIDI4LjVMMTYuOTI4NiAyMy42NDI5Wk0xMi44NTcyIDI5LjcxNDNMNi44NTcxNyAzOC41NzE1QzExIDQzLjQyODYgMTcuMTQyOSA0Ni41IDI0IDQ2LjVDMjYuNjQyOSA0Ni41IDI5LjE0MjkgNDYuMDcxNSAzMS41IDQ1LjIxNDNMMjEgMjkuNzE0M0wxOC42NDI5IDMyLjA3MTVMMTYuOTI4NiAyOS45Mjg2TDE1LjIxNDMgMzIuMDcxNUwxMi44NTcyIDI5LjcxNDNaTTIxLjIxNDMgMjcuNUwzMi44NTcyIDQ0LjcxNDNDMzYuNjQyOSA0My4wNzE1IDM5Ljg1NzIgNDAuNSA0Mi4yMTQzIDM3LjI4NTdMMzIuMjg1NyAyMi42NDI5TDI5LjcxNDMgMjUuMjE0M0wyOCAyMy4wNzE0TDI2LjI4NTcgMjUuMjE0M0wyNCAyMi45Mjg2TDIxLjIxNDMgMjcuNVpNMjIuNTcxNCAxNUMyMi41NzE0IDE2LjY0MjkgMjEuMjE0MyAxNy45Mjg2IDE5LjY0MjkgMTcuOTI4NkMxOC4wNzE0IDE3LjkyODYgMTYuNzE0MiAxNi42NDI5IDE2LjcxNDIgMTVDMTYuNzE0MiAxMy4zNTcyIDE4LjA3MTQgMTIuMDcxNSAxOS42NDI5IDEyLjA3MTVDMjEuMjg1NyAxMi4wNzE1IDIyLjU3MTQgMTMuNDI4NiAyMi41NzE0IDE1Wk0yMS4xNDI5IDE1QzIxLjE0MjkgMTQuMTQyOSAyMC41IDEzLjUgMTkuNjQyOSAxMy41QzE4Ljg1NzIgMTMuNSAxOC4xNDI4IDE0LjIxNDMgMTguMTQyOCAxNUMxOC4xNDI4IDE1Ljg1NzIgMTguNzg1NyAxNi41IDE5LjY0MjkgMTYuNUMyMC41IDE2LjUgMjEuMTQyOSAxNS44NTcyIDIxLjE0MjkgMTVaXCJcbiAgfVxuKSB9KSwgR0YgPSAoKSA9PiAvKiBAX19QVVJFX18gKi8gYyhcInN2Z1wiLCB7IHZpZXdCb3g6IFwiMCAwIDQ4IDQ4XCIsIGZpbGw6IFwibm9uZVwiLCB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLCBjaGlsZHJlbjogLyogQF9fUFVSRV9fICovIGMoXG4gIFwicGF0aFwiLFxuICB7XG4gICAgZmlsbDogXCJjdXJyZW50Q29sb3JcIixcbiAgICBkOiBcIk00NS4zOTQ1IDE4LjI3NUM0NC4xNzg1IDE4LjI3NSA0My4xOTQyIDE5LjE0MzUgNDIuOTYyNiAyMC4zMDE2SDQyLjczMUM0Mi4wMzYyIDIwLjMwMTYgNDEuNDU3MiAxOS44Mzg0IDQxLjI4MzUgMTkuMjU5M0MzOS4wODMyIDExLjQ0MjcgMzEuOTAzNSA2IDIzLjc5NzQgNkMxMy43ODA1IDYgNS42NzQzIDE0LjEwNjEgNS42NzQzIDI0LjEyM1YyNC43MDJIMTIuNDQ4N0MxMi42ODAzIDI1LjYyODUgMTMuNDMzIDI2LjM4MTIgMTQuMzU5NSAyNi41NTQ5QzE0LjUzMzIgMjguOTg2NyAxNC45Mzg1IDMxLjI0NDkgMTUuNTc1NCAzMy4yMTM1QzE0LjEyNzkgMzQuMDI0MSAxMi44NTQgMzUuMDA4NCAxMS44Njk3IDM2LjIyNDRDOS43MjczOCAzNC4wODIgOC4xMDYxNiAzMS4zNjA3IDcuMjk1NTQgMjguMjkxOUM3LjA2Mzk0IDI3LjMwNzYgNi4xMzc1MiAyNi42MTI4IDUuMDM3NCAyNi42MTI4SDQuOTIxNTlDNC42ODk5OSAyNS41MTI3IDMuNzA1NjYgMjQuNzAyIDIuNDg5NzQgMjQuNzAyQzEuMTAwMTEgMjQuNzAyIDAgMjUuODAyMiAwIDI3LjE5MThDMCAyOC41ODE0IDEuMTAwMTEgMjkuNjgxNSAyLjQ4OTc0IDI5LjY4MTVDMy42NDc3NiAyOS42ODE1IDQuNjMyMDkgMjguODcwOSA0LjkyMTU5IDI3Ljc3MDhINS4xNTMxOUM1LjY3NDMgMjcuNzcwOCA2LjEzNzUxIDI4LjExODIgNi4zMTEyMiAyOC41ODE0QzguMzM3NzUgMzYuNjI5NyAxNS41NzU0IDQyLjMwNCAyMy45MTMxIDQyLjMwNEMzMy45MyA0Mi4zMDQgNDIuMDM2MiAzNC4xOTc4IDQyLjAzNjIgMjQuMTgwOVYyMy42MDE5SDMzLjQwODlDMzMuMzUxIDIxLjI4NTkgMzMuMTE5NCAxOS4wMjc3IDMyLjY1NjIgMTYuOTQzM0MzMy40NjY4IDE2LjUzOCAzMy45ODc5IDE1LjcyNzQgMzMuOTg3OSAxNC43NDMxQzMzLjk4NzkgMTQuNDUzNSAzMy45MyAxNC4yMjE5IDMzLjg3MjEgMTMuOTkwM0MzNC42MjQ5IDEzLjQxMTMgMzUuMzE5NyAxMi43NzQ0IDM1Ljg0MDggMTIuMDc5NkMzNy45MjUyIDE0LjEwNjIgMzkuNDg4NSAxNi42NTM4IDQwLjI5OTIgMTkuNTQ4OUM0MC41ODg3IDIwLjY0OSA0MS42MzA5IDIxLjQ1OTYgNDIuODQ2OCAyMS40NTk2SDQzLjEzNjNDNDMuNDI1OCAyMi41MDE4IDQ0LjM1MjIgMjMuMjU0NSA0NS41MTAzIDIzLjI1NDVDNDYuODk5OSAyMy4yNTQ1IDQ4IDIyLjE1NDQgNDggMjAuNzY0OEM0Ny44ODQyIDE5LjM3NTIgNDYuNzg0MSAxOC4yNzUgNDUuMzk0NSAxOC4yNzVaTTIuNDg5NzQgMjguNDY1NkMxLjczNzAzIDI4LjQ2NTYgMS4xNTgwMiAyNy44ODY2IDEuMTU4MDIgMjcuMTMzOUMxLjE1ODAyIDI2LjM4MTIgMS43MzcwMyAyNS44MDIyIDIuNDg5NzQgMjUuODAyMkMzLjI0MjQ1IDI1LjgwMjIgMy44MjE0OCAyNi4zODEyIDMuODIxNDggMjcuMTMzOUMzLjgyMTQ4IDI3Ljg4NjYgMy4yNDI0NSAyOC40NjU2IDIuNDg5NzQgMjguNDY1NlpNMjguOTUwNSAxNC43NDMxQzI4Ljk1MDUgMTQuODU4OSAyOC45NTA1IDE0Ljk3NDcgMjkuMDA4NCAxNS4wOTA1QzI3LjU2MDkgMTUuNTUzNyAyNi4wNTU1IDE1Ljc4NTMgMjQuNDM0MyAxNS44NDMyVjcuMjE1OTFDMjYuNTc2NiA3LjUwNTQxIDI4LjU0NTIgOS40NzQwNSAyOS45OTI4IDEyLjcxNjVDMjkuMzU1OCAxMy4xNzk3IDI4Ljk1MDUgMTMuODc0NSAyOC45NTA1IDE0Ljc0MzFaTTIzLjI3NjIgNy4yMTU5MVYxNS44NDMyQzIxLjAxODEgMTUuNzg1MyAxOC44MTc4IDE1LjI2NDIgMTYuOTY1IDE0LjQ1MzVDMTguNDEyNSAxMC4zNDI2IDIwLjY3MDcgNy41NjMzMiAyMy4yNzYyIDcuMjE1OTFaTTE1Ljk4MDcgMTMuOTMyNEMxNC43MDY5IDEzLjIzNzYgMTMuNjA2OCAxMi4zMTEyIDEyLjc5NjEgMTEuMjY5QzE0LjgyMjcgOS41MzE5NSAxNy4yNTQ1IDguMjU4MTQgMTkuOTE4IDcuNjIxMjJDMTguMzU0NiA5LjAxMDg1IDE2Ljk2NSAxMS4yMTExIDE1Ljk4MDcgMTMuOTMyNFpNMTIuNTA2NiAyMy41NDRINi44OTAyM0M3LjA2MzkzIDE5LjAyNzcgOC45NzQ2OCAxNC45NzQ3IDExLjk4NTUgMTIuMDIxN0MxMi45Njk5IDEzLjE3OTcgMTQuMTg1OCAxNC4yMjIgMTUuNjkxMiAxNC45NzQ3QzE1LjA1NDMgMTcuMDAxMiAxNC42NDkgMTkuMjU5MyAxNC40NzUzIDIxLjY5MTJDMTMuNDkxIDIxLjkyMjggMTIuNzM4MiAyMi42MTc2IDEyLjUwNjYgMjMuNTQ0Wk0xMy41NDg5IDI0LjEyM0MxMy41NDg5IDIzLjM3MDMgMTQuMTI3OSAyMi43OTEzIDE0Ljg4MDYgMjIuNzkxM0MxNS42MzMzIDIyLjc5MTMgMTYuMjEyMyAyMy4zNzAzIDE2LjIxMjMgMjQuMTIzQzE2LjIxMjMgMjQuODc1NyAxNS42MzMzIDI1LjQ1NDggMTQuODgwNiAyNS40NTQ4QzE0LjE4NTggMjUuNDU0OCAxMy41NDg5IDI0Ljg3NTcgMTMuNTQ4OSAyNC4xMjNaTTE1LjU3NTQgMjYuNDk3QzE2LjYxNzYgMjYuMjA3NSAxNy4zNzAzIDI1LjI4MTEgMTcuMzcwMyAyNC4xMjNDMTcuMzcwMyAyMi45NjUgMTYuNjE3NiAyMi4wMzg2IDE1LjU3NTQgMjEuNzQ5MUMxNS43NDkxIDE5LjQ5MDkgMTYuMDk2NSAxNy40MDY1IDE2LjY3NTUgMTUuNDk1OEMxOC42NDQxIDE2LjM2NDMgMjAuOTAyMyAxNi44ODU0IDIzLjMzNDEgMTYuOTQzM1YyMy41NDRIMTcuNTQ0VjI0LjcwMkgyMy4zMzQxVjMxLjMwMjhDMjAuOTYwMiAzMS4zNjA3IDE4LjcwMiAzMS44ODE4IDE2LjczMzQgMzIuNzUwM0MxNi4wOTY1IDMwLjgzOTYgMTUuNjkxMiAyOC43NTUxIDE1LjU3NTQgMjYuNDk3Wk0yMy4yNzYyIDQxLjA4OEMyMC43Mjg2IDQwLjc0MDYgMTguNDcwNCAzNy45NjE0IDE3LjAyMjkgMzMuODUwNEMxOC44NzU4IDMzLjAzOTggMjEuMDE4MSAzMi41MTg3IDIzLjI3NjIgMzIuNDYwOFY0MS4wODhaTTI0LjQzNDMgNDEuMDg4VjMyLjQ2MDhDMjUuOTk3NiAzMi41MTg3IDI3LjU2MDkgMzIuNzUwMyAyOC45NTA1IDMzLjIxMzVDMjguOTUwNSAzMy4zMjkzIDI4Ljg5MjYgMzMuNDQ1MSAyOC44OTI2IDMzLjU2MDlDMjguODkyNiAzNC40Mjk0IDI5LjI5NzkgMzUuMTI0MiAyOS45OTI4IDM1LjU4NzRDMjguNTQ1MiAzOC44Mjk5IDI2LjUxODcgNDAuNzQwNiAyNC40MzQzIDQxLjA4OFpNMzAuMDUwNyAzMy41MDNDMzAuMDUwNyAzMi43NTAzIDMwLjYyOTcgMzIuMTcxMyAzMS4zODI0IDMyLjE3MTNDMzIuMTM1MSAzMi4xNzEzIDMyLjcxNDEgMzIuNzUwMyAzMi43MTQxIDMzLjUwM0MzMi43MTQxIDM0LjI1NTcgMzIuMTM1MSAzNC44MzQ3IDMxLjM4MjQgMzQuODM0N0MzMC42ODc2IDM0Ljg5MjYgMzAuMDUwNyAzNC4yNTU3IDMwLjA1MDcgMzMuNTAzWk0zMS4zODI0IDMxLjA3MTJDMzAuNTEzOSAzMS4wNzEyIDI5LjgxOTEgMzEuNDc2NSAyOS4zNTU5IDMyLjExMzRDMjcuNzkyNSAzMS41OTIzIDI2LjExMzQgMzEuMzYwNyAyNC4zNzY0IDMxLjMwMjhWMjQuNzAySDMyLjEzNTFDMzIuMDc3MiAyNi45MDIzIDMxLjg0NTYgMjkuMDQ0NiAzMS4zODI0IDMxLjA3MTJDMzEuNDQwMyAzMS4wNzEyIDMxLjQ0MDMgMzEuMDcxMiAzMS4zODI0IDMxLjA3MTJaTTEyLjc5NjEgMzcuMDM1QzEzLjYwNjggMzUuOTkyOCAxNC43MDY5IDM1LjA2NjMgMTUuOTgwNyAzNC4zNzE1QzE2Ljk2NSAzNy4xNTA4IDE4LjM1NDYgMzkuMjkzMSAxOS45MTggNDAuNjgyOEMxNy4yNTQ1IDQwLjA0NTggMTQuODIyNyAzOC43NzIgMTIuNzk2MSAzNy4wMzVaTTMxLjA5MjkgMzUuOTkyOEMzMS4yMDg3IDM1Ljk5MjggMzEuMzI0NSAzNi4wNTA3IDMxLjQ0MDMgMzYuMDUwN0MzMi4xMzUxIDM2LjA1MDcgMzIuNzE0MSAzNS43NjExIDMzLjE3NzMgMzUuMjk3OUMzMy44NzIxIDM1LjgxOSAzNC40NTExIDM2LjM5ODEgMzQuOTE0MyAzNi45NzcxQzMyLjg4NzggMzguNzE0MSAzMC40NTYgMzkuOTg3OSAyNy43OTI1IDQwLjYyNDhDMjkuMDY2MyAzOS41ODI2IDMwLjE2NjUgMzcuOTYxNCAzMS4wOTI5IDM1Ljk5MjhaTTM1Ljc4MjkgMzYuMjI0NEMzNS4yMDM5IDM1LjUyOTUgMzQuNTY2OSAzNC44OTI2IDMzLjc1NjMgMzQuMzEzNkMzMy44MTQyIDM0LjA4MiAzMy44NzIxIDMzLjc5MjUgMzMuODcyMSAzMy41NjA5QzMzLjg3MjEgMzIuNjM0NSAzMy4zNTEgMzEuODIzOSAzMi41NDA0IDMxLjQxODZDMzMuMDAzNiAyOS4zMzQxIDMzLjI5MzEgMjcuMDc2IDMzLjI5MzEgMjQuNzZINDAuODIwM0M0MC43MDQ1IDI5LjIxODMgMzguNzkzNyAzMy4yNzE0IDM1Ljc4MjkgMzYuMjI0NFpNMzIuMTkzIDIzLjU0NEgyNC40MzQzVjE2Ljk0MzNDMjYuMTcxMyAxNi44ODU0IDI3Ljg1MDQgMTYuNTk1OSAyOS40MTM3IDE2LjEzMjdDMjkuODc3IDE2Ljc2OTYgMzAuNjI5NyAxNy4xNzQ5IDMxLjQ0MDMgMTcuMTc0OUMzMS40NDAzIDE3LjE3NDkgMzEuNDQwMyAxNy4xNzQ5IDMxLjQ5ODIgMTcuMTc0OUMzMS45MDM1IDE5LjIwMTQgMzIuMTkzIDIxLjM0MzggMzIuMTkzIDIzLjU0NFpNMzEuNDQwMyAxNi4wNzQ4QzMwLjY4NzYgMTYuMDc0OCAzMC4xMDg2IDE1LjQ5NTggMzAuMTA4NiAxNC43NDMxQzMwLjEwODYgMTMuOTkwMyAzMC42ODc2IDEzLjQxMTMgMzEuNDQwMyAxMy40MTEzQzMyLjE5MyAxMy40MTEzIDMyLjc3MiAxMy45OTAzIDMyLjc3MiAxNC43NDMxQzMyLjc3MiAxNS40Mzc5IDMyLjE5MyAxNi4wNzQ4IDMxLjQ0MDMgMTYuMDc0OFpNMzMuMTc3MyAxMi45NDgxQzMyLjcxNDEgMTIuNDg0OSAzMi4xMzUxIDEyLjI1MzMgMzEuNDQwMyAxMi4yNTMzQzMxLjMyNDUgMTIuMjUzMyAzMS4yMDg3IDEyLjI1MzMgMzEuMDkyOSAxMi4zMTEyQzMwLjE2NjUgMTAuMjg0NyAyOS4wNjY0IDguNzIxMzUgMjcuODUwNCA3LjY3OTEzQzMwLjUxMzkgOC4zMTYwNCAzMi45NDU3IDkuNTg5ODYgMzQuOTcyMyAxMS4zMjY5QzM0LjQ1MTEgMTEuOTA1OSAzMy44NzIxIDEyLjQyNyAzMy4xNzczIDEyLjk0ODFaTTQ1LjM5NDUgMjIuMDk2NUM0NC42NDE3IDIyLjA5NjUgNDQuMDYyNyAyMS41MTc1IDQ0LjA2MjcgMjAuNzY0OEM0NC4wNjI3IDIwLjAxMjEgNDQuNjQxNyAxOS40MzMgNDUuMzk0NSAxOS40MzNDNDYuMTQ3MiAxOS40MzMgNDYuNzI2MiAyMC4wMTIxIDQ2LjcyNjIgMjAuNzY0OEM0Ni43MjYyIDIxLjUxNzUgNDYuMTQ3MiAyMi4wOTY1IDQ1LjM5NDUgMjIuMDk2NVpcIlxuICB9XG4pIH0pLCBRRiA9ICgpID0+IC8qIEBfX1BVUkVfXyAqLyBjKFwic3ZnXCIsIHsgdmlld0JveDogXCIwIDAgNDggNDhcIiwgZmlsbDogXCJub25lXCIsIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsIGNoaWxkcmVuOiAvKiBAX19QVVJFX18gKi8gYyhcbiAgXCJwYXRoXCIsXG4gIHtcbiAgICBmaWxsOiBcImN1cnJlbnRDb2xvclwiLFxuICAgIGZpbGxSdWxlOiBcImV2ZW5vZGRcIixcbiAgICBjbGlwUnVsZTogXCJldmVub2RkXCIsXG4gICAgZDogXCJNMjEuNjIwNyAxMy43MjQxSDE2LjEwMzVDMTUgMTMuNzI0MSAxNC4xMDM1IDEyLjgyNzYgMTQuMDM0NSAxMS43MjQxVjJDMTQuMDM0NSAwLjg5NjU1MiAxNC45MzEgMCAxNi4wMzQ1IDBIMzIuMjQxNEMzMy4zNDQ4IDAgMzQuMjQxNCAwLjg5NjU1MiAzNC4yNDE0IDJWMTEuNjU1MkMzNC4yNDE0IDEyLjc1ODYgMzMuMzQ0OCAxMy42NTUyIDMyLjI0MTQgMTMuNjU1MkgyNi43MjQxVjE2LjA2OUgyOC45MzFWMTcuNDQ4M0gyNi43MjQxSDIxLjYyMDdIMTkuNDEzOFYxNi4wNjlIMjEuNjIwN1YxMy43MjQxWk0yMi45MzEgMTYuMDY5SDI1LjM0NDhWMTMuNjU1MkgyMi45MzFWMTYuMDY5Wk0xNi4wMzQ1IDEuMzc5MzFDMTUuNjg5NyAxLjM3OTMxIDE1LjQxMzggMS42NTUxNyAxNS40MTM4IDJIMTUuNDgyOFYxMS43MjQxQzE1LjQ4MjggMTIuMDY5IDE1Ljc1ODYgMTIuMzQ0OCAxNi4xMDM1IDEyLjM0NDhIMjEuNjIwN0gyNi43MjQxSDMyLjI0MTRDMzIuNTg2MiAxMi4zNDQ4IDMyLjg2MjEgMTIuMDY5IDMyLjg2MjEgMTEuNzI0MVYyQzMyLjg2MjEgMS42NTUxNyAzMi41ODYyIDEuMzc5MzEgMzIuMjQxNCAxLjM3OTMxSDE2LjAzNDVaTTIxLjEzNzkgMjUuNjU1MkgxMS44Mjc2VjI4LjI3NTlIMTAuNDQ4M1YyNC4yNzU5SDIxLjEzNzlWMjEuODYyMUgyMy40ODI3VjE5LjI0MTRIMjQuODYyMVYyMS44NjIxSDI3LjI3NTlWMjQuMjc1OUgzNy45NjU1VjI4LjI3NTlIMzYuNTg2MlYyNS42NTUySDI3LjI3NTlWMjguMDY5SDIxLjEzNzlWMjUuNjU1MlpNMjUuODI3NiAyMy4zMTA0SDIyLjQ0ODNWMjYuNjg5N0gyNS44Mjc2VjIzLjMxMDRaTTE5LjIwNjkgMzAuNDgyN0gzLjAwMDAyQzEuODk2NTcgMzAuNDgyNyAxIDMxLjM3OTMgMSAzMi40ODI3VjQyLjIwNjlDMSA0My4zMTAzIDEuODk2NTcgNDQuMjA2OSAzLjAwMDAyIDQ0LjIwNjlIOC41MTcyNlY0Ni42MjA3SDYuMzEwMzZWNDhIOC41MTcyNkgxMy42MjA3SDE1LjgyNzZWNDYuNjIwN0gxMy42MjA3VjQ0LjIwNjlIMTkuMTM3OUMyMC4yNDE0IDQ0LjIwNjkgMjEuMTM3OSA0My4zMTAzIDIxLjEzNzkgNDIuMjA2OVYzMi40ODI3QzIxLjIwNjkgMzEuMzc5MyAyMC4zMTA0IDMwLjQ4MjcgMTkuMjA2OSAzMC40ODI3Wk0xMi4yNDE0IDQ2LjU1MTdIOS44Mjc1OFY0NC4xMzc5SDEyLjI0MTRWNDYuNTUxN1pNMTkuODI3NiA0Mi4yMDY5QzE5LjgyNzYgNDIuNTUxNyAxOS41NTE3IDQyLjgyNzYgMTkuMjA2OSA0Mi44Mjc2SDEzLjY4OTdIOC41ODYyMUgzLjA2ODk3QzIuNzI0MTQgNDIuODI3NiAyLjQ0ODI2IDQyLjU1MTcgMi40NDgyNiA0Mi4yMDY5VjMyLjQ4MjdDMi40NDgyNiAzMi4xMzc5IDIuNzI0MTQgMzEuODYyIDMuMDY4OTcgMzEuODYySDE5LjI3NTlDMTkuNjIwNyAzMS44NjIgMTkuODk2NiAzMi4xMzc5IDE5Ljg5NjYgMzIuNDgyN1Y0Mi4yMDY5SDE5LjgyNzZaTTI5LjEzNzkgMzAuNDgyN0g0NS4zNDQ4QzQ2LjQ0ODMgMzAuNDgyNyA0Ny4zNDQ4IDMxLjM3OTMgNDcuMjc1OSAzMi40ODI3VjQyLjIwNjlDNDcuMjc1OSA0My4zMTAzIDQ2LjM3OTMgNDQuMjA2OSA0NS4yNzU5IDQ0LjIwNjlIMzkuNzU4NlY0Ni42MjA3SDQxLjk2NTVWNDhIMzkuNzU4NkgzNC42NTUySDMyLjQ0ODNWNDYuNjIwN0gzNC42NTUyVjQ0LjIwNjlIMjkuMTM3OUMyOC4wMzQ1IDQ0LjIwNjkgMjcuMTM4IDQzLjMxMDMgMjcuMTM4IDQyLjIwNjlWMzIuNDgyN0MyNy4xMzggMzEuMzc5MyAyOC4wMzQ1IDMwLjQ4MjcgMjkuMTM3OSAzMC40ODI3Wk0zNi4wMzQ1IDQ2LjU1MTdIMzguNDQ4M1Y0NC4xMzc5SDM2LjAzNDVWNDYuNTUxN1pNNDUuMzQ0OCA0Mi44Mjc2QzQ1LjY4OTcgNDIuODI3NiA0NS45NjU1IDQyLjU1MTcgNDUuOTY1NSA0Mi4yMDY5SDQ2LjAzNDVWMzIuNDgyN0M0Ni4wMzQ1IDMyLjEzNzkgNDUuNzU4NyAzMS44NjIgNDUuNDEzOCAzMS44NjJIMjkuMjA2OUMyOC44NjIxIDMxLjg2MiAyOC41ODYyIDMyLjEzNzkgMjguNTg2MiAzMi40ODI3VjQyLjIwNjlDMjguNTg2MiA0Mi41NTE3IDI4Ljg2MjEgNDIuODI3NiAyOS4yMDY5IDQyLjgyNzZIMzQuNzI0MkgzOS44Mjc2SDQ1LjM0NDhaXCJcbiAgfVxuKSB9KSwgWkYgPSAoKSA9PiAvKiBAX19QVVJFX18gKi8gYyhcInN2Z1wiLCB7IHZpZXdCb3g6IFwiMCAwIDQ4IDQ4XCIsIGZpbGw6IFwibm9uZVwiLCB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLCBjaGlsZHJlbjogLyogQF9fUFVSRV9fICovIGMoXG4gIFwicGF0aFwiLFxuICB7XG4gICAgZmlsbDogXCJjdXJyZW50Q29sb3JcIixcbiAgICBmaWxsUnVsZTogXCJldmVub2RkXCIsXG4gICAgY2xpcFJ1bGU6IFwiZXZlbm9kZFwiLFxuICAgIGQ6IFwiTTI0LjYwMDUgMEgyMy4yNDA4VjEuODM1N0gyNC42MDA1VjBaTTIyLjc2NDggNC44MjcyM0MxNS41NTgxIDUuMzcxMTQgOS42NDMwNiAxMS4xNTAxIDguODk1MTggMTguMzU2OUM4LjQxOTI2IDIyLjg0NDIgOS45ODI5OSAyNy4yNjM0IDEzLjE3ODUgMzAuNDU4OUMxNS44OTggMzMuMTc4NCAxNy4zOTM4IDM2LjcxMzkgMTcuMzkzOCA0MC4zODUyVjQxLjQ3M1Y0NC45NDA1QzE3LjM5MzggNDYuNjQwMiAxOC43NTM1IDQ4IDIwLjQ1MzIgNDhIMjcuMzIwMUMyOS4wMTk4IDQ4IDMwLjM3OTYgNDYuNjQwMiAzMC4zNzk2IDQ0Ljk0MDVWNDEuNDczVjQwLjQ1MzJDMzAuMzc5NiAzNi43MTM4IDMxLjg3NTMgMzMuMTc4NSAzNC4zOTA5IDMwLjY2MjlDMzcuMzE0NCAyNy44MDc0IDM4Ljk0NjEgMjQgMzguOTQ2MSAxOS44NTI3QzM4Ljk0NjEgMTUuNzA1NCAzNy4xNzg0IDExLjYyNjEgMzQuMTE4OSA4LjgzODUzQzMxLjA1OTUgNS45MTUwMiAyNi45ODAxIDQuNDg3MjkgMjIuNzY0OCA0LjgyNzIzWk0yMi40MjQ5IDE4LjIyMDlDMjIuOTY4OCAxNy44ODEgMjMuMzc2NyAxNy4yNjkxIDIzLjM3NjcgMTYuNTg5MkMyMy4zNzY3IDE2LjMxNzMgMjMuNjQ4NyAxNi4wNDUzIDIzLjkyMDcgMTYuMDQ1M0MyNC4xOTI2IDE2LjA0NTMgMjQuNDY0NiAxNi4zMTczIDI0LjQ2NDYgMTYuNTg5MkMyNC40NjQ2IDE3LjI2OTEgMjQuODcyNSAxNy44ODEgMjUuNDE2NCAxOC4yMjA5TDI1LjAwODUgMjkuNDM5MUgyMi44MzI4TDIyLjQyNDkgMTguMjIwOVpNMjEuNzQ1IDMwLjc5ODhIMjYuMDI4M0MyNi40MzYyIDMwLjc5ODggMjYuNzc2MiAzMS4xMzg4IDI2Ljc3NjIgMzEuNTQ2N1YzNi41Nzc5SDIwLjk5NzFWMzEuNTQ2N0MyMC45OTcxIDMxLjEzODggMjEuMzM3MSAzMC43OTg4IDIxLjc0NSAzMC43OTg4Wk0yOC4xMzU5IDM3LjkzNzZIMjkuMDE5OFY0MC4xMTMzSDE4Ljc1MzVWMzcuOTM3NkgxOS42Mzc0SDI4LjEzNTlaTTI5LjAxOTggNDQuOTQwNUMyOS4wMTk4IDQ1Ljg5MjMgMjguMjcxOSA0Ni42NDAyIDI3LjMyMDEgNDYuNjQwMkgyMC40NTMyQzE5LjUwMTQgNDYuNjQwMiAxOC43NTM1IDQ1Ljg5MjMgMTguNzUzNSA0NC45NDA1VjQxLjQ3M0gyOS4wMTk4VjQ0Ljk0MDVaTTMzLjQzOTEgMjkuNjQzMUMzMS41MzU0IDMxLjQ3ODggMzAuMTc1NiAzMy45MjYzIDI5LjQ5NTcgMzYuNTc3OUgyOC4wNjhWMzEuNTQ2N0MyOC4wNjggMzAuNDU4OSAyNy4yNTIxIDI5LjY0MyAyNi4zMDAzIDI5LjQzOTFMMjYuNzc2MiAxNy4yMDExTDI2LjIzMjMgMTcuMDY1MkMyNS45NjAzIDE2Ljk5NzIgMjUuODI0MyAxNi43OTMyIDI1LjgyNDMgMTYuNTIxMkMyNS44MjQzIDE1LjUwMTQgMjUuMDA4NSAxNC42MTc2IDIzLjkyMDcgMTQuNjE3NkMyMi45MDA4IDE0LjYxNzYgMjIuMDE3IDE1LjQzMzQgMjIuMDE3IDE2LjUyMTJDMjIuMDE3IDE2Ljc5MzIgMjEuODEzIDE2Ljk5NzIgMjEuNjA5IDE3LjA2NTJMMjEuMDY1MSAxNy4yMDExTDIxLjQ3MzEgMjkuNDM5MUMyMC40NTMyIDI5LjU3NSAxOS43MDU0IDMwLjQ1ODkgMTkuNzA1NCAzMS41NDY3VjM2LjU3NzlIMTguMjc3NkMxNy41OTc3IDMzLjk5NDMgMTYuMjM3OSAzMS41NDY3IDE0LjE5ODMgMjkuNTA3MUMxMS4zNDI4IDI2LjU4MzYgOS45MTUwMSAyMi41NzIzIDEwLjMyMjkgMTguNDI0OUMxMC45MzQ4IDExLjg5OCAxNi4zNzM5IDYuNTk0OTEgMjIuOTAwOCA2LjExODk5QzI2Ljc3NjIgNS44NDcwNCAzMC40NDc2IDcuMTM4ODEgMzMuMzAzMSA5LjcyMjM4QzM2LjA5MDYgMTIuMzA1OSAzNy43MjIzIDE1Ljk3NzQgMzcuNzIyMyAxOS43ODQ3QzM3LjU4NjQgMjMuNTkyMSAzNi4xNTg2IDI3LjA1OTUgMzMuNDM5MSAyOS42NDMxWk00My44NDEzIDE5LjMwODdINDIuMDA1NlYyMC42Njg1SDQzLjg0MTNWMTkuMzA4N1pNNCAxOS4zMDg3SDUuODM1N1YyMC42Njg1SDRWMTkuMzA4N1pNMjMuMjQwOCAzOC4wNzM2SDI0LjYwMDVWMzkuOTA5M0gyMy4yNDA4VjM4LjA3MzZaTTM3LjE2MjIgMzIuMjk0MUwzNi4yMDA3IDMzLjI1NTZMMzcuNDk4OCAzNC41NTM3TDM4LjQ2MDMgMzMuNTkyMkwzNy4xNjIyIDMyLjI5NDFaTTkuMzA3MjUgNi4zMjk0NEwxMC4yNjg3IDUuMzY3OTVMMTEuNTY2OCA2LjY2NTk3TDEwLjYwNTMgNy42Mjc0N0w5LjMwNzI1IDYuMzI5NDRaTTM3LjUyNCA1LjM2NjcyTDM2LjIyNTkgNi42NjQ3NEwzNy4xODc0IDcuNjI2MjNMMzguNDg1NCA2LjMyODIyTDM3LjUyNCA1LjM2NjcyWk05LjI5MDc4IDMzLjU3NjJMMTAuNTg4OCAzMi4yNzgxTDExLjU1MDMgMzMuMjM5NkwxMC4yNTIzIDM0LjUzNzdMOS4yOTA3OCAzMy41NzYyWlwiXG4gIH1cbikgfSksIGpGID0gKCkgPT4gLyogQF9fUFVSRV9fICovIGMoXCJzdmdcIiwgeyB2aWV3Qm94OiBcIjAgMCA0OCA0OFwiLCBmaWxsOiBcIm5vbmVcIiwgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiwgY2hpbGRyZW46IC8qIEBfX1BVUkVfXyAqLyBjKFxuICBcInBhdGhcIixcbiAge1xuICAgIGZpbGw6IFwiY3VycmVudENvbG9yXCIsXG4gICAgZmlsbFJ1bGU6IFwiZXZlbm9kZFwiLFxuICAgIGNsaXBSdWxlOiBcImV2ZW5vZGRcIixcbiAgICBkOiBcIk0zNi45NDY5IDEzLjU4OTRDMzYuMzE1MyAxMy41ODk0IDM1LjY4MzcgMTMuNjUyNSAzNC45ODkgMTMuNzc4OEMzMy45MTUzIDguNjYzMTIgMjkuNDk0NCA1IDI0LjE4OTIgNUMxOC45NDcxIDUgMTQuMzk5OCA4Ljc4OTQyIDEzLjM4OTMgMTMuOTA1MUMxMi41NjgzIDEzLjcxNTcgMTEuODEwNCAxMy41ODk0IDExLjA1MjUgMTMuNTg5NEM0LjkyNjI2IDEzLjU4OTQgMCAxOC41Nzg4IDAgMjQuNjQxOUMwIDMwLjA3MzQgMy42NjMxMSAzNC43NDcgOC4zOTk4OSAzNS4zNzg2SDEzLjg5NDZWMzQuMTE1NEg4LjQ2MzAzQzQuNDIwOTggMzMuNjEwMiAxLjI2MzE0IDI5LjQ0MTggMS4yNjMxNCAyNC42NDE5QzEuMjYzMTQgMTkuMjEwMyA1LjY4NDEyIDE0Ljc4OTMgMTEuMTE1NiAxNC43ODkzQzExLjkzNjcgMTQuNzg5MyAxMi44MjA5IDE0LjkxNTcgMTMuNzY4MiAxNS4yMzE1TDE0LjQ2MyAxNS40MjA5TDE0LjU4OTMgMTQuNzI2MkMxNS4yODQgOS44NjMxIDE5LjQ1MjQgNi4yNjMxMyAyNC4yNTIzIDYuMjYzMTNDMjkuMTE1NCA2LjI2MzEzIDMzLjIyMDYgOS43OTk5NCAzMy45MTU0IDE0LjY2M0wzNC4wNDE3IDE1LjM1NzhMMzQuNzM2NCAxNS4xNjgzQzM1LjYyMDYgMTQuOTc4OCAzNi4zMTUzIDE0Ljg1MjUgMzcuMDczMiAxNC44NTI1QzQyLjUwNDcgMTQuODUyNSA0Ni45MjU3IDE5LjI3MzUgNDYuOTI1NyAyNC43MDVDNDYuOTI1NyAyOS41MDUgNDMuNzY3OSAzMy42MTAyIDM5LjY2MjcgMzQuMTc4NkgzNC4yOTQzVjM1LjQ0MTdIMzkuNTk5NUM0NC4zOTk1IDM0Ljc0NyA0Ny45OTk0IDMwLjEzNjUgNDcuOTk5NCAyNC43MDVDNDguMDYyNiAxOC41Nzg4IDQzLjA3MzIgMTMuNTg5NCAzNi45NDY5IDEzLjU4OTRaTTMwLjk0NyAyOS4xMjU5SDMwLjEyNlYyNS44NDE4QzMwLjEyNiAyMi40OTQ0IDI3LjQxMDIgMTkuNzc4NyAyNC4wNjI4IDE5Ljc3ODdDMjAuNzE1NSAxOS43Nzg3IDE3Ljk5OTggMjIuNDk0NCAxNy45OTk4IDI1Ljg0MThWMjkuMTI1OUgxNy4xNzg3QzE2LjQ4NCAyOS4xMjU5IDE1LjkxNTYgMjkuNjk0NCAxNS45MTU2IDMwLjM4OTFWNDEuOTQ2OEMxNS45MTU2IDQyLjY0MTYgMTYuNDg0IDQzLjIxIDE3LjE3ODcgNDMuMjFIMzEuMDEwMUMzMS43MDQ5IDQzLjIxIDMyLjI3MzMgNDIuNjQxNiAzMi4yNzMzIDQxLjk0NjhWMzAuMzg5MUMzMi4xNDcgMjkuNjk0NCAzMS42NDE3IDI5LjEyNTkgMzAuOTQ3IDI5LjEyNTlaTTE5LjE5OTcgMjUuODQxOEMxOS4xOTk3IDIzLjE4OTIgMjEuMzQ3MSAyMC45Nzg3IDI0LjA2MjggMjAuOTc4N0MyNi43MTU0IDIwLjk3ODcgMjguOTI2IDIzLjEyNiAyOC45MjYgMjUuODQxOFYyOS4xMjU5SDE5LjI2MjlWMjUuODQxOEgxOS4xOTk3Wk0zMC45NDcgNDEuODgzN0gxNy4xMTU2VjMwLjMyNTlIMzAuOTQ3VjQxLjg4MzdaTTIzLjM2ODEgMzkuODYyN1YzNy4zMzY0QzIyLjM1NzYgMzcuMDgzOCAyMS41OTk3IDM2LjEzNjQgMjEuNTk5NyAzNC45OTk2QzIxLjU5OTcgMzMuNjczMyAyMi42NzM0IDMyLjU5OTYgMjMuOTk5NyAzMi41OTk2QzI1LjMyNiAzMi41OTk2IDI2LjM5OTcgMzMuNjczMyAyNi4zOTk3IDM0Ljk5OTZDMjYuMzk5NyAzNi4xMzY0IDI1LjY0MTggMzcuMDgzOCAyNC42MzEzIDM3LjMzNjRWMzkuODYyN0gyMy4zNjgxWk0yNS4xOTk3IDM1LjA2MjhDMjUuMTk5NyAzNC4zNjggMjQuNjMxMyAzMy44NjI4IDIzLjk5OTcgMzMuODYyOEMyMy4zNjgxIDMzLjg2MjggMjIuNzk5NyAzNC4zNjggMjIuNzk5NyAzNS4wNjI4QzIyLjc5OTcgMzUuNzU3NSAyMy4zNjgxIDM2LjI2MjcgMjMuOTk5NyAzNi4yNjI3QzI0LjY5NDQgMzYuMjYyNyAyNS4xOTk3IDM1LjY5NDMgMjUuMTk5NyAzNS4wNjI4WlwiXG4gIH1cbikgfSksIEtGID0gKCkgPT4gLyogQF9fUFVSRV9fICovIGMoXCJzdmdcIiwgeyB2aWV3Qm94OiBcIjAgMCA0OCA0OVwiLCBmaWxsOiBcIm5vbmVcIiwgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiwgY2hpbGRyZW46IC8qIEBfX1BVUkVfXyAqLyBjKFxuICBcInBhdGhcIixcbiAge1xuICAgIGZpbGw6IFwiY3VycmVudENvbG9yXCIsXG4gICAgZmlsbFJ1bGU6IFwiZXZlbm9kZFwiLFxuICAgIGNsaXBSdWxlOiBcImV2ZW5vZGRcIixcbiAgICBkOiBcIk0zOS4yNjIyIDQuODYzN1YxNS42MDc0TDQ1LjM3NzggMjEuNzA1MlY0OUgyVjIxLjcwNTJMOC4xMTU1NiAxNS42MDc0VjQuODYzN0gxOC44NTMzTDIzLjY4ODkgMEwyOC41MjQ1IDQuODYzN0gzOS4yNjIyWk0zLjM1MTExIDQ2LjY3N0wxOC4yODQ0IDMyLjY2NjdMMy4zNTExMSAyMy4zMDIyVjQ2LjY3N1pNMjMuNjg4OSAzNi4wMDU5TDE5LjU2NDUgMzMuNDY1Mkw0LjQ4ODg5IDQ3LjU0ODJINDIuODg4OUwyNy45NTU2IDMzLjMyTDIzLjY4ODkgMzYuMDA1OVpNNDMuOTU1NiAyMy4zNzQ4TDI5LjE2NDUgMzIuNTk0MUw0My45NTU2IDQ2LjY3N1YyMy4zNzQ4Wk0zOS4yNjIyIDI0LjYwODlMNDMuNTI4OSAyMS45MjNMMzkuMjYyMiAxNy42NFYyNC42MDg5Wk0yNi41MzMzIDQuODYzN0wyMy42ODg5IDIuMDMyNTlMMjAuODQ0NCA0Ljg2MzdIMjYuNTMzM1pNMzcuODQgMjUuNDA3NFY2LjMxNTU1SDkuMzk1NTVWMjUuNDA3NEwyMy42MTc4IDM0LjI2MzdMMzcuODQgMjUuNDA3NFpNMy43Nzc3OCAyMS44NTA0TDguMDQ0NDQgMjQuNTM2M1YxNy41Njc0TDMuNzc3NzggMjEuODUwNFpNMTIuNzM3OCAxMC44ODlIMjMuNjg4OVYxMi4zNDA4SDEyLjczNzhWMTAuODg5Wk0zNC42NCAxNC45NTQxSDEyLjczNzhWMTYuNDA2SDM0LjY0VjE0Ljk1NDFaTTEyLjczNzggMTguOTQ2N0gzNC42NFYyMC4zOTg2SDEyLjczNzhWMTguOTQ2N1pNMzQuNjQgMjMuMDExOUgxMi43Mzc4VjI0LjQ2MzdIMzQuNjRWMjMuMDExOVpNMTkuMjggMjcuMDA0NUgyOC4wOTc4VjI4LjQ1NjNIMTkuMjhWMjcuMDA0NVpcIlxuICB9XG4pIH0pLCBKRiA9ICgpID0+IC8qIEBfX1BVUkVfXyAqLyBjKFwic3ZnXCIsIHsgdmlld0JveDogXCIwIDAgNDggNDhcIiwgZmlsbDogXCJub25lXCIsIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsIGNoaWxkcmVuOiAvKiBAX19QVVJFX18gKi8gYyhcbiAgXCJwYXRoXCIsXG4gIHtcbiAgICBmaWxsOiBcImN1cnJlbnRDb2xvclwiLFxuICAgIGZpbGxSdWxlOiBcImV2ZW5vZGRcIixcbiAgICBjbGlwUnVsZTogXCJldmVub2RkXCIsXG4gICAgZDogXCJNMzEuMzk2NCAzOC40MTQ4SDYuMzI3MThWOS42NTkwMUgzMS4zOTY0VjEyLjkwMzNIMzIuODcxVjMuMDIzMDVDMzIuODcxIDEuMzI3MiAzMS40NzAxIDAgMjkuODQ4IDBIOC4wMjMwM0M2LjMyNzE3IDAgNSAxLjQwMDkzIDUgMy4wMjMwNVY0NC45NzcxQzUgNDYuNjcyOSA2LjQwMDkxIDQ4LjAwMDEgOC4wMjMwMyA0OC4wMDAxSDI5Ljg0OEMzMS41NDM4IDQ4LjAwMDEgMzIuODcxIDQ2LjU5OTIgMzIuODcxIDQ0Ljk3NzFWMzMuNDc0OEgzMS4zOTY0VjM4LjQxNDhaTTcuOTQ5MzIgMS40NzQ2NkgyOS43NzQyQzMwLjY1OSAxLjQ3NDY2IDMxLjM5NjQgMi4yMTIgMzEuMzk2NCAzLjA5Njc5VjguMjU4MDlINi4zMjcxOFYzLjA5Njc5QzYuNDAwOTIgMi4xMzgyNiA3LjEzODI1IDEuNDc0NjYgNy45NDkzMiAxLjQ3NDY2Wk0yOS44NDggNDYuNTk5Mkg4LjAyMzAzQzcuMTM4MjQgNDYuNTk5MiA2LjQwMDkyIDQ1Ljg2MTkgNi40MDA5MiA0NC45NzcxVjM5LjgxNThIMzEuNDcwMVY0NC45NzcxQzMxLjM5NjQgNDUuODYxOSAzMC43MzI4IDQ2LjU5OTIgMjkuODQ4IDQ2LjU5OTJaTTIxIDQyLjQ3SDE2Ljg3MVY0My45NDQ3SDIxVjQyLjQ3Wk0xNi44NzEgNC4wNTUzMUgyMVY1LjUyOTk3SDE2Ljg3MVY0LjA1NTMxWk0yMi43Njk2IDE1LjYzMTNWMTguMDY0NUgxNy4zMTM0VjE5LjUzOTJIMjIuNzY5NlYyMC43MTg5SDI0LjI0NDNWMTkuNTM5MlYxOC44MDE4VjE3Ljc2OTZMMzMuMDE4NSAyMy44ODk0TDQxLjc5MjcgMTcuNzY5NlYyOS4yNzE5SDI0LjI0NDNWMjYuOTEyNUgxNS4yNDg5VjI4LjM4NzFIMjIuNzY5NlYzMC43NDY2SDQzLjI2NzRWMTUuNjMxM0gyMi43Njk2Wk0yNS43OTI3IDE3LjEwNkg0MC4xNzA2TDMzLjAxODUgMjIuMTE5OEwyNS43OTI3IDE3LjEwNlpNMTEuNDE0NyAyNi45MTI1SDEzLjMzMThWMjguMzg3MkgxMS40MTQ3VjI2LjkxMjVaTTE1LjM5NjMgMTcuOTkwOUgxMy40NzkzVjE5LjQ2NTZIMTUuMzk2M1YxNy45OTA5Wk0yNC4yNDQzIDIzLjg4OTZWMjUuMTQzSDIyLjc2OTZWMjMuODg5Nkg5LjEyOTAyVjIyLjQxNDlIMjQuMjQ0M1YyMy4xNTIyVjIzLjg4OTZaXCJcbiAgfVxuKSB9KSwgX0YgPSAoKSA9PiAvKiBAX19QVVJFX18gKi8gYyhcInN2Z1wiLCB7IHZpZXdCb3g6IFwiMCAwIDQ4IDQ4XCIsIGZpbGw6IFwibm9uZVwiLCB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLCBjaGlsZHJlbjogLyogQF9fUFVSRV9fICovIGMoXG4gIFwicGF0aFwiLFxuICB7XG4gICAgZmlsbDogXCJjdXJyZW50Q29sb3JcIixcbiAgICBmaWxsUnVsZTogXCJldmVub2RkXCIsXG4gICAgY2xpcFJ1bGU6IFwiZXZlbm9kZFwiLFxuICAgIGQ6IFwiTTIxLjM5NDMgMTcuNDE3MUgxNS4yOTE0QzEyLjQ4IDE3LjAwNTcgMTAuMzU0MyAxNC4yNjI5IDEwLjI4NTcgMTEuMjQ1N0MxMC4yODU3IDcuNjggMTMuMTY1NyA0LjggMTYuNzMxNCA0LjhIMTYuNzMxN0MxNy4wNzQ0IDQuOCAxNy40MTcyIDQuOCAxNy43NiA0Ljg2ODU1QzE4LjUxNDMgMi4wNTcxMyAyMS4wNTE0IDAgMjQgMEMyNy4wMTcxIDAgMjkuNDg1NyAxLjk4ODU3IDMwLjI0IDQuOEMzMC41MTQzIDQuNzMxNDMgMzAuNzg4NiA0LjczMTQyIDMxLjA2MjggNC43MzE0MkMzNC42Mjg2IDQuNzMxNDIgMzcuNTA4NiA3LjYxMTQyIDM3LjUwODYgMTEuMTc3MUMzNy41MDg2IDE0LjMzMTQgMzUuMzgyOSAxNy4wMDU3IDMyLjU3MTQgMTcuNDE3MUgyMS4zOTQzWk0xOC4xNzE0IDYuMjM5OThDMTcuNjkxNCA2LjEwMjg0IDE3LjIxMTQgNi4wMzQyOCAxNi44IDYuMDM0MjhDMTMuOTg4NiA2LjAzNDI4IDExLjY1NzEgOC4yOTcxMyAxMS42NTcxIDExLjA0QzExLjY1NzEgMTMuNTc3MSAxMy4zMDI4IDE1LjcwMjggMTUuMzYgMTUuOTc3MUgzMi41MDI4QzM0LjU2IDE1LjcwMjggMzYuMjA1NyAxMy41NzcxIDM2LjIwNTcgMTEuMTA4NkMzNi4yMDU3IDguMjk3MTMgMzMuOTQyOCA2LjAzNDI4IDMxLjEzMTQgNi4wMzQyOEMzMC43ODg1IDYuMDM0MjggMzAuNDQ1NyA2LjAzNDI5IDI5Ljk2NTcgNi4xNzE0M0wyOS4yMTE0IDYuMzc3MTNMMjkuMDc0MyA1LjYyMjg0QzI4LjczMTQgMy4xNTQyNyAyNi42MDU3IDEuMzAyODUgMjQuMDY4NiAxLjMwMjg1QzIxLjYgMS4zMDI4NSAxOS40MDU3IDMuMTU0MjggMTkuMDYyOCA1LjY5MTQyTDE4LjkyNTcgNi40NDU3MUwxOC4xNzE0IDYuMjM5OThaTTkuNiAyNi42MDU4TDEwLjU2IDI3LjU2NThMNy40NzQyNiAzMC43ODg3TDQuMjUxNDQgMjcuNTY1OEw1LjIxMTQxIDI2LjYwNThMNi43ODg1NSAyOC4xODI5VjI0LjI3NDRDNi43ODg1NSAyMi45MDI5IDcuODg1NzEgMjEuODA1OCA5LjI1NzE0IDIxLjgwNThIMjMuMzE0M1YxOS4yNjg2SDI0LjY4NTdWMjEuODA1OEgzOC43NDI5QzQwLjExNDMgMjEuODA1OCA0MS4yMTE0IDIyLjkwMjkgNDEuMjExNCAyNC4yNzQ0VjI4LjE4MjlMNDIuNzg4NSAyNi42MDU4TDQzLjc0ODYgMjcuNTY1OEw0MC41MjU3IDMwLjc4ODdMMzcuMzAyOCAyNy41NjU4TDM4LjI2MjggMjYuNjA1OEwzOS44NCAyOC4xODI5VjI0LjI3NDRDMzkuODQgMjMuNTg4NyAzOS4yOTE0IDIzLjEwODYgMzguNjc0MyAyMy4xMDg2SDkuMTg4NTVDOC41MDI4MyAyMy4xMDg2IDguMDIyODcgMjMuNjU3MiA4LjAyMjg3IDI0LjI3NDRWMjguMTgyOUw5LjYgMjYuNjA1OFpNMTUuMDE3MSAzNC45MDI4SDcuNjExNDFMNy4wNjI4NSAzMy4xODg1SDBWNDUuMjU3MUMwIDQ2LjY5NzEgMS4xNjU3MiA0Ny43OTQyIDIuNTM3MTUgNDcuNzk0MkgxNC4xOTQzQzE1LjQyODYgNDcuNzk0MiAxNi4zODg1IDQ2LjgzNDIgMTYuMzg4NSA0NS41OTk5VjM4LjI2MjhIMTUuMDg1N1YzNC45MDI4SDE1LjAxNzFaTTMuNzAyODMgNDUuMjU3MUMzLjcwMjgzIDQ1Ljk0MjggMy4xNTQyNyA0Ni40OTE0IDIuNDY4NTUgNDYuNDkxNEMxLjc4Mjg0IDQ2LjQ5MTQgMS4yMzQyOCA0NS45NDI4IDEuMjM0MjggNDUuMjU3MVYzNC40OTE0SDUuOTY1NzJMNi41MTQyOSAzNi4yMDU2SDEzLjU3NzFWMzguMjYyOEgzLjYzNDI4VjQ1LjI1NzFIMy43MDI4M1pNMTQuOTQ4NiA0NS41OTk5QzE0Ljk0ODYgNDYuMDc5OSAxNC42MDU3IDQ2LjQyMjggMTQuMTI1NyA0Ni40MjI4SDQuNzMxNEM0LjkzNzEyIDQ2LjA3OTkgNS4wMDU3MSA0NS42Njg1IDUuMDA1NzEgNDUuMTg4NVYzOS42MzQySDE0Ljk0ODZWNDUuNTk5OVpNNDYuNjI4NiAzNC45MDI4VjM4LjI2MjhINDhWNDUuNTk5OUM0OCA0Ni44MzQyIDQ3LjA0IDQ3Ljc5NDIgNDUuODA1NyA0Ny43OTQySDM0LjE0ODZDMzIuNzc3MSA0Ny43OTQyIDMxLjYxMTQgNDYuNjk3MSAzMS42MTE0IDQ1LjI1NzFWMzMuMTg4NUgzOC42NzQzTDM5LjIyMjkgMzQuOTAyOEg0Ni42Mjg2Wk0zNC4wOCA0Ni40OTE0QzM0Ljc2NTcgNDYuNDkxNCAzNS4zMTQzIDQ1Ljk0MjggMzUuMzE0MyA0NS4yNTcxSDM1LjI0NTdWMzguMjYyOEg0NS4xODg1VjM2LjIwNTZIMzguMTI1N0wzNy41NzcxIDM0LjQ5MTRIMzIuODQ1N1Y0NS4yNTcxQzMyLjg0NTcgNDUuOTQyOCAzMy4zOTQzIDQ2LjQ5MTQgMzQuMDggNDYuNDkxNFpNNDUuNzM3MiA0Ni40MjI4QzQ2LjIxNzIgNDYuNDIyOCA0Ni41NiA0Ni4wNzk5IDQ2LjU2IDQ1LjU5OTlWMzkuNjM0MkgzNi42MTcxVjQ1LjE4ODVDMzYuNjE3MSA0NS42Njg1IDM2LjU0ODYgNDYuMDc5OSAzNi4zNDI5IDQ2LjQyMjhINDUuNzM3MlpcIlxuICB9XG4pIH0pLCAkRiA9ICgpID0+IC8qIEBfX1BVUkVfXyAqLyBjKFwic3ZnXCIsIHsgdmlld0JveDogXCIwIDAgNDggNDhcIiwgZmlsbDogXCJub25lXCIsIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsIGNoaWxkcmVuOiAvKiBAX19QVVJFX18gKi8gYyhcbiAgXCJwYXRoXCIsXG4gIHtcbiAgICBmaWxsOiBcImN1cnJlbnRDb2xvclwiLFxuICAgIGZpbGxSdWxlOiBcImV2ZW5vZGRcIixcbiAgICBjbGlwUnVsZTogXCJldmVub2RkXCIsXG4gICAgZDogXCJNNDQuNTE1MSAyNC44MDY1VjE2LjEyN0M0NC41MTUxIDE0LjQ4MzIgNDMuNDYzIDEzLjAzNjYgNDIuMDE2NCAxMi4zNzkxQzQzLjI2NTcgMTEuMDY0IDQzLjg1NzUgOC44MjgzNyA0My43OTE4IDcuNzc2MzJDNDMuNzI2IDYuNjU4NTEgNDMuMTM0MyA1LjY3MjIxIDQyLjI3OTUgNC45NDg5MkM0MS40MjQ3IDQuMjI1NjQgNDAuMzcyNiAzLjk2MjYyIDM5LjMyMDYgNC4wMjgzN0MzNS4yNDM4IDQuNDg4NjUgMzUuNTA2OSA3LjUxMzMxIDM1LjYzODQgOC40OTk2MUMzNS43Njk5IDEwLjAxMTkgMzYuODg3NyAxMS45ODQ1IDM4LjMzNDMgMTIuOTA1MUMzNy41NDUyIDEzLjYyODQgMzcuMDE5MiAxNC42ODA0IDM2LjU1ODkgMTUuNjY2N0wzNi40OTMxIDE1Ljc5ODJDMzYuMzYxNiAxNS45OTU1IDM1LjcwNDEgMTYuNTg3MyAzNC45ODA4IDE3LjA0NzZDMzQuMzg5IDE3LjI0NDggMzMuNzMxNSAxNy4zNzYzIDMzLjA3NCAxNy4zNzYzTDI5LjMyNiAxNy41NzM2QzI4LjczNDIgMTcuNTczNiAyOC4yMDgyIDE3LjkwMjMgMjcuODEzNyAxOC4yOTY5QzI3LjQxOTIgMTguNzU3MSAyNy4yODc3IDE5LjM0ODkgMjcuMzUzNCAxOS44NzQ5QzI3LjM1MzQgMjAuMDcyMiAyNy40MTkyIDIwLjI2OTUgMjcuNDg0OSAyMC40MDFIMjAuMzgzNkMyMC4zOTczIDIwLjM1OTkgMjAuNDExIDIwLjMyMTYgMjAuNDI0MSAyMC4yODVMMjAuNDI0MSAyMC4yODQ4QzIwLjQ3MzkgMjAuMTQ1OSAyMC41MTUxIDIwLjAzMSAyMC41MTUxIDE5Ljg3NDlDMjAuNTgwOCAxOS4yODMyIDIwLjM4MzYgMTguNjkxNCAyMC4wNTQ4IDE4LjI5NjlDMTkuNjYwMyAxNy44MzY2IDE5LjEzNDMgMTcuNTczNiAxOC41NDI1IDE3LjU3MzZMMTQuNzk0NSAxNy4zNzYzSDE0Ljc5NDVDMTQuMTM3IDE3LjMxMDYgMTMuNDc5NCAxNy4yNDQ4IDEyLjg4NzcgMTcuMDQ3NkMxMi4xNjQ0IDE2LjU4NzMgMTEuNDQxMSAxNS45OTU1IDExLjM3NTMgMTUuNzk4MkwxMS4zMDk2IDE1LjY2NjdDMTAuODQ5MyAxNC42ODA0IDEwLjMyMzMgMTMuNjI4NCA5LjUzNDI0IDEyLjkwNTFDMTEuMDQ2NiAxMS45ODQ1IDEyLjA5ODYgMTAuMDExOSAxMi4yMzAxIDguNDk5NjFDMTIuMzYxNiA3LjUxMzMxIDEyLjYyNDcgNC40ODg2NSA4LjU0Nzk0IDQuMDI4MzdDNy40OTU4OSAzLjg5Njg3IDYuMzc4MDggNC4yMjU2NCA1LjU4OTA0IDQuOTQ4OTJDNC43MzQyNCA1LjY3MjIxIDQuMjA4MjIgNi42NTg1MSA0LjA3NjcyIDcuNzc2MzJDNC4wMTA5NiA4LjgyODM3IDQuNjAyNzMgMTEuMTI5NyA1Ljg1MjA1IDEyLjM3OTFDNC40MDU0NyAxMi45NzA4IDMuMzUzNDIgMTQuNDE3NCAzLjM1MzQyIDE2LjEyN1YyNC44NzIyQzMuNDE5MTggMjYuNjQ3NiA0LjY2ODQ5IDI4LjE1OTkgNi4zMTIzMyAyOC42ODU5TDEzLjYxMSAzMC43OVY0Mi4wMzM5QzEzLjYxMSA0My4wMjAyIDE0LjQgNDMuODA5MiAxNS4zODYzIDQzLjgwOTJIMTcuNDI0N0MxNy44ODQ5IDQzLjgwOTIgMTguMzQ1MiA0My42MTE5IDE4LjY3NCA0My4yODMyQzE5LjAwMjcgNDIuOTU0NCAxOS4yIDQyLjQ5NDEgMTkuMiA0Mi4wMzM5TDE5LjI2NTggMjguNjg1OUMxOS4yNjU4IDI2Ljk3NjMgMTguMjEzNyAyNS40NjQgMTYuNTY5OSAyNC45MzhMMTEuNzA0MSAyMy4zNTk5QzExLjUwNjkgMjMuMjk0MSAxMS40NDExIDIzLjE2MjYgMTEuMzc1MyAyMy4wMzExVjIxLjE5QzEyLjgyMTkgMjEuNTg0NSAxNC4zMzQyIDIxLjc4MTggMTUuOTEyMyAyMS44NDc2TDE3Ljk1MDcgMjEuOTEzM0MxNy44MTkyIDIyLjE3NjMgMTcuNzUzNCAyMi41MDUxIDE3Ljc1MzQgMjIuODMzOUMxNy43NTM0IDI0LjA4MzIgMTguNzM5NyAyNS4wNjk1IDE5Ljk4OSAyNS4wNjk1SDIzLjI3NjdWNDMuODc1SDI0LjU5MThWMjQuOTM4SDI3Ljg3OTRDMjkuMTI4OCAyNC45MzggMzAuMTE1MSAyMy45NTE3IDMwLjExNTEgMjIuNzAyM0MzMC4xMTUxIDIyLjM3MzYgMzAuMDQ5MyAyMi4wNDQ4IDI5LjkxNzggMjEuNzgxOEwzMS45NTYyIDIxLjcxNkMzMy40Njg1IDIxLjcxNiAzNC45ODA4IDIxLjQ1MyAzNi40OTMxIDIxLjA1ODVWMjIuODMzOUMzNi40OTMxIDIzLjAzMTEgMzYuMzYxNiAyMy4xNjI2IDM2LjE2NDQgMjMuMjI4NEwzMS4yOTg2IDI0LjkzOEMyOS42NTQ4IDI1LjQ2NCAyOC42MDI3IDI2Ljk3NjMgMjguNjAyNyAyOC42ODU5TDI4LjY2ODUgNDIuMDMzOUMyOC42Njg1IDQzLjAyMDIgMjkuNDU3NSA0My44MDkyIDMwLjQ0MzggNDMuODA5MkgzMi40ODIyQzMzLjQ2ODUgNDMuODA5MiAzNC4yNTc1IDQzLjAyMDIgMzQuMjU3NSA0Mi4wMzM5VjMwLjcyNDNMNDEuNTU2MiAyOC42MjAyQzQzLjI2NTggMjguMDk0MSA0NC40NDkzIDI2LjU4MTggNDQuNTE1MSAyNC44MDY1Wk0zNi45NTM0IDguMzY4MUMzNi44MjE5IDYuOTg3MjggMzYuODg3NyA1LjYwNjQ2IDM5LjUxNzggNS4zNDM0NEgzOS44NDY2QzQwLjQzODQgNS4zNDM0NCA0MS4wOTU5IDUuNTQwNyA0MS41NTYyIDUuOTM1MjJDNDIuMTQ3OSA2LjM5NTUgNDIuNDc2NyA3LjExODc5IDQyLjU0MjUgNy44NDIwN0M0Mi42NzQgOS4wMjU2NCA0MS40OTA0IDExLjkxODggNDAuMTA5NiAxMi4wNTAzQzM4LjcyODggMTIuMjQ3NiAzNy4xNTA3IDEwLjA3NzcgMzYuOTUzNCA4LjM2ODFaTTYuNDQzODQgNS45MzUyMkM2Ljk2OTg3IDUuNTQwNyA3LjU2MTY0IDUuMzQzNDQgOC4xNTM0MiA1LjM0MzQ0SDguNDgyMThDMTEuMTEyMyA1LjYwNjQ2IDExLjE3ODEgNi45ODcyOCAxMS4wNDY2IDguMzY4MUMxMC44NDkzIDEwLjA3NzcgOS4yNzEyMyAxMi4xODE4IDcuODkwNDEgMTIuMDUwM0M2LjU3NTM0IDExLjkxODggNS4zOTE3OSA5LjAyNTY0IDUuNDU3NTQgNy44NDIwN0M1LjUyMzI5IDcuMTE4NzkgNS44NTIwNiA2LjM5NTUgNi40NDM4NCA1LjkzNTIyWk0xMS41MDY4IDE5LjgwOTJWMTkuNjc3N0gxMS4wNDY2TDguNDgyMTggMTguODg4Nkw4LjA4NzY4IDIwLjEzOEwxMC4xOTE4IDIwLjc5NTVWMjMuMDMxMVYyMy4wOTY5QzkuNzMxNSAyMy4yMjg0IDkuMjA1NDggMjMuMjk0MSA4Ljk0MjQ2IDIzLjI5NDFMOC44NzY3MSAyNC42MDkySDguOTQyNDZDOS41MzQyMiAyNC42MDkyIDEwLjMyMzIgMjQuNDEyIDEwLjg0OTIgMjQuMjgwNEwxMC44NDkzIDI0LjI4MDRMMTAuODQ5MyAyNC4yODA0QzEwLjk4MDggMjQuNDExOSAxMS4xNzgxIDI0LjU0MzQgMTEuMzc1MyAyNC42MDkyTDE2LjI0MTEgMjYuMTg3M0MxNy4zNTg5IDI2LjUxNiAxOC4wODIyIDI3LjU2ODEgMTguMDgyMiAyOC42ODU5TDE4LjAxNjQgNDIuMDMzOUMxOC4wMTY0IDQyLjE2NTQgMTcuOTUwNyA0Mi4yOTY5IDE3Ljg4NDkgNDIuMzYyNkMxNy44MTkyIDQyLjQyODQgMTcuNjg3NyA0Mi40OTQxIDE3LjU1NjIgNDIuNDk0MUgxNS41MTc4QzE1LjI1NDggNDIuNDk0MSAxNS4wNTc1IDQyLjI5NjkgMTUuMDU3NSA0Mi4wMzM5VjMwLjU5MjhDMTUuMDU3NSAzMC4xMzI1IDE0LjcyODggMjkuNzM4IDE0LjI2ODUgMjkuNjA2NUw2Ljc3MjYxIDI3LjQzNjZDNS41ODkwNSAyNy4xMDc4IDQuOCAyNi4wNTU4IDQuNzM0MjUgMjQuODcyMlYxNi4xMjdDNC43MzQyNSAxNC42MTQ3IDUuOTgzNTcgMTMuNDMxMSA3LjQzMDE0IDEzLjQzMTFDOC43NDUyMSAxMy40MzExIDkuMzM2OTggMTQuNDgzMiAxMC4xMjYgMTYuMjU4NUwxMC4yNTc1IDE2LjM5QzEwLjU4NjMgMTcuMDQ3NiAxMS44MzU2IDE3LjkwMjMgMTIuMzYxNyAxOC4yMzExTDEyLjQ5MzEgMTguMjk2OUMxMy4yMTY0IDE4LjU1OTkgMTQuMDA1NSAxOC42OTE0IDE0Ljc5NDUgMTguNzU3MUwxOC41NDI1IDE4Ljk1NDRDMTguNzM5NyAxOC45NTQ0IDE5LjAwMjcgMTkuMDg1OSAxOS4xMzQyIDE5LjIxNzRDMTkuMjY1OCAxOS40MTQ3IDE5LjMzMTUgMTkuNjExOSAxOS4zMzE1IDE5LjgwOTJDMTkuMjY1NyAyMC4yMDM3IDE5LjAwMjcgMjAuNTMyNSAxOC41NDI1IDIwLjUzMjVMMTYuMDQzOCAyMC40NjY3QzE0LjQ2NTcgMjAuNDY2NyAxMi45NTM0IDIwLjI2OTUgMTEuNTA2OCAxOS44MDkyWk0yNy45NDUyIDIzLjY4ODZIMjAuMDU0OEMxOS41Mjg4IDIzLjY4ODYgMTkuMTM0MiAyMy4yOTQxIDE5LjEzNDIgMjIuNzY4MUMxOS4xMzQyIDIyLjI0MjEgMTkuNTI4OCAyMS44NDc2IDIwLjA1NDggMjEuODQ3NkgyNy45NDUyQzI4LjQ3MTIgMjEuODQ3NiAyOC44NjU3IDIyLjI0MjEgMjguODY1NyAyMi43NjgxQzI4Ljg2NTcgMjMuMjI4NCAyOC40MDU1IDIzLjY4ODYgMjcuOTQ1MiAyMy42ODg2Wk0zMy43MzE1IDI5LjU0MDdDMzMuMjcxMiAyOS42NzIyIDMyLjk0MjUgMzAuMDY2NyAzMi45NDI1IDMwLjUyN1Y0MS45NjgxQzMyLjk0MjUgNDIuMjMxMSAzMi43NDUyIDQyLjQyODQgMzIuNDgyMiA0Mi40Mjg0SDMwLjQ0MzhDMzAuMTgwOCA0Mi40Mjg0IDI5Ljk4MzYgNDIuMjMxMSAyOS45ODM2IDQxLjk2ODFMMjkuOTE3OCAyOC42MjAyQzI5LjkxNzggMjcuNTAyMyAzMC42NDExIDI2LjQ1MDMgMzEuNzU4OSAyNi4xMjE1TDM2LjYyNDcgMjQuNTQzNEMzNi44MjE5IDI0LjQ3NzcgMzcuMDE5MiAyNC4zNDYyIDM3LjE1MDcgMjQuMjE0N0MzNy42MTEgMjQuMzQ2MiAzOC40NjU3IDI0LjU0MzQgMzkuMDU3NSAyNC41NDM0SDM5LjEyMzNMMzkuMDU3NSAyMy4yMjg0QzM4LjcyODggMjMuMjI4NCAzOC4yNjg1IDIzLjE2MjYgMzcuNzQyNSAyMy4wMzExVjIyLjg5OTZWMjAuNjY0TDM5Ljg0NjYgMjAuMDA2NUwzOS40NTIgMTguNzU3MUwzNi44ODc3IDE5LjU0NjJIMzYuNDI3NFYxOS42Nzc3QzM0Ljk4MDggMjAuMTM4IDMzLjQwMjcgMjAuMzM1MiAzMS44OTA0IDIwLjQwMUwyOS4zOTE4IDIwLjQ2NjdDMjguOTk3MyAyMC40NjY3IDI4LjY2ODUgMjAuMTM4IDI4LjYwMjcgMTkuNzQzNEMyOC42MDI3IDE5LjU0NjIgMjguNjY4NSAxOS4yODMyIDI4LjggMTkuMTUxN0MyOC45MzE1IDE4Ljk1NDQgMjkuMTI4OCAxOC44ODg2IDI5LjM5MTggMTguODg4NkwzMy4xMzk3IDE4LjY5MTRDMzMuOTI4OCAxOC42MjU2IDM0LjcxNzggMTguNDk0MSAzNS40NDExIDE4LjIzMTFMMzUuNTcyNiAxOC4xNjU0QzM2LjA5ODYgMTcuODM2NiAzNy4zNDggMTYuOTgxOCAzNy42NzY3IDE2LjMyNDNMMzcuNzQyNSAxNi4xOTI4QzM4LjUzMTUgMTQuNDE3NCAzOS4xMjMzIDEzLjM2NTQgNDAuNDM4NCAxMy4zNjU0QzQxLjk1MDcgMTMuMzY1NCA0My4xMzQyIDE0LjYxNDcgNDMuMTM0MiAxNi4wNjEzVjI0Ljc0MDdDNDMuMDY4NSAyNS45MjQzIDQyLjI3OTQgMjYuOTc2MyA0MS4wOTU5IDI3LjMwNTFMMzMuNzMxNSAyOS41NDA3Wk0xLjMxNTA3IDI0LjU0MzVWMTUuNTM1M0gwVjI0LjU0MzVDMCAyNy40MzY2IDEuNjQzODUgMjkuODY5NSA0LjE0MjQ4IDMxLjI1MDNWNDMuODA5Mkg1LjQ1NzU1VjMxLjg0MjFDNS42NTQ4MSAzMS45MDc5IDUuODUyMDcgMzEuOTczNiA2LjExNTA4IDMyLjAzOTRMMTIuMDMyOSAzMy42ODMyTDEyLjM2MTcgMzIuNDMzOUw2LjM3ODA5IDMwLjc5MDFDMy4yODc2OCAzMC4wMDEgMS4zMTUwNyAyNy41NjgyIDEuMzE1MDcgMjQuNTQzNVpNNDYuNjg0OSAyNC41NDM1VjE1LjUzNTNINDhWMjQuNTQzNUM0OCAyNy4zNzA5IDQ2LjM1NjIgMjkuODY5NSA0My44NTc1IDMxLjI1MDNWNDMuODA5Mkg0Mi41NDI1VjMxLjg0MjFDNDIuNDQzOCAzMS44NzUgNDIuMzI4OCAzMS45MDc5IDQyLjIxMzcgMzEuOTQwOEM0Mi4wOTg2IDMxLjk3MzYgNDEuOTgzNiAzMi4wMDY1IDQxLjg4NDkgMzIuMDM5NEwzNS45NjcxIDMzLjY4MzJMMzUuNjM4NCAzMi40MzM5TDQxLjU1NjIgMzAuNzkwMUM0NC43MTIzIDMwLjAwMSA0Ni42ODQ5IDI3LjUwMjQgNDYuNjg0OSAyNC41NDM1WlwiXG4gIH1cbikgfSksIGVYID0gKCkgPT4gLyogQF9fUFVSRV9fICovIGMoXCJzdmdcIiwgeyB2aWV3Qm94OiBcIjAgMCA0OCA0OFwiLCBmaWxsOiBcIm5vbmVcIiwgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiwgY2hpbGRyZW46IC8qIEBfX1BVUkVfXyAqLyBjKFxuICBcInBhdGhcIixcbiAge1xuICAgIGZpbGw6IFwiY3VycmVudENvbG9yXCIsXG4gICAgZmlsbFJ1bGU6IFwiZXZlbm9kZFwiLFxuICAgIGNsaXBSdWxlOiBcImV2ZW5vZGRcIixcbiAgICBkOiBcIk00NS40NzY5IDNIMi41ODc0OUMxLjE3NjE0IDMgMCA0LjE3NjEzIDAgNS41ODc0OFYzMi45NTJDMCAzNC4zNjM0IDEuMTc2MTQgMzUuNTM5NSAyLjU4NzQ5IDM1LjUzOTVINS45NTkwNFY0NS44MTFINy40NDg4TDE3LjMyODMgMzUuNTM5NUg0NS4zOTg1QzQ2LjgwOTggMzUuNTM5NSA0Ny45ODU5IDM0LjM2MzQgNDcuOTg1OSAzMi45NTJWNS41ODc0OEM0OC4xNDI4IDQuMTc2MTMgNDYuOTY2NiAzIDQ1LjQ3NjkgM1pNNDYuNTc0NiAzMi45NTJDNDYuNTc0NiAzMy41MDA5IDQ2LjEwNDEgMzMuOTcxMyA0NS41NTUzIDMzLjk3MTNIMTYuNzc5NEw3LjYwNTYyIDQzLjUzNzFWMzQuMDQ5N0gyLjY2NTg4QzIuMTE3MDIgMzQuMDQ5NyAxLjY0NjU4IDMzLjU3OTMgMS42NDY1OCAzMy4wMzA0VjUuNTg3NDhDMS42NDY1OCA1LjAzODYyIDIuMTE3MDIgNC41NjgxNyAyLjY2NTg4IDQuNTY4MTdINDUuNTU1M0M0Ni4xMDQxIDQuNTY4MTcgNDYuNTc0NiA1LjAzODYyIDQ2LjU3NDYgNS41ODc0OFYzMi45NTJaTTI0LjA3MTQgMTEuNzAzNEg5LjE3Mzc3VjEzLjI3MTVIMjQuMDcxNFYxMS43MDM0Wk05LjE3Mzc3IDE2LjAxNTdIMzguODkwNVYxNy41ODM5SDkuMTczNzdWMTYuMDE1N1pNMzguODkwNSAyMC4zMjgySDkuMTczNzdWMjEuODk2NEgzOC44OTA1VjIwLjMyODJaTTkuMTczNzcgMjQuNzE5MUgzOC44OTA1VjI2LjI4NzNIOS4xNzM3N1YyNC43MTkxWlwiXG4gIH1cbikgfSksIHRYID0gKCkgPT4gLyogQF9fUFVSRV9fICovIGMoXCJzdmdcIiwgeyB2aWV3Qm94OiBcIjAgMCA0OCA0OFwiLCBmaWxsOiBcIm5vbmVcIiwgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiwgY2hpbGRyZW46IC8qIEBfX1BVUkVfXyAqLyBjKFxuICBcInBhdGhcIixcbiAge1xuICAgIGZpbGw6IFwiY3VycmVudENvbG9yXCIsXG4gICAgZmlsbFJ1bGU6IFwiZXZlbm9kZFwiLFxuICAgIGNsaXBSdWxlOiBcImV2ZW5vZGRcIixcbiAgICBkOiBcIk0xMS41ODEgMEg0Mi4xMzMzTDQ2Ljg1NzEgNC42NDc2MlY0OEgxMS42NTcxVjMyLjE1MjRMMTAuNzQyOCAzMS40NjY3TDkuMDY2NjQgMzMuMTQyOUwxMC40MzgxIDM0LjUxNDNMNC40MTkwNCA0MC41MzMzQzMuOTYxOSA0MC45MTQzIDMuNDI4NTYgNDEuMTQyOSAyLjg5NTIzIDQxLjE0MjlDMi4yODU3MSA0MS4xNDI5IDEuNzUyMzcgNDAuOTE0MyAxLjM3MTQyIDQwLjUzMzNMMC42MDk1MTUgMzkuNzcxNEMwLjIyODU2MiAzOS4zMTQzIDAgMzguNzgxIDAgMzguMjQ3NkMwIDM3LjYzODEgMC4yMjg1NjIgMzcuMTA0OCAwLjYwOTUxNSAzNi43MjM4TDYuNjI4NTggMzAuNzA0OEw4IDMyLjA3NjJMOS42NzYyIDMwLjRDNy42OTUyNSAyOC4xOTA1IDYuNjI4NTggMjUuNDQ3NiA2LjYyODU4IDIyLjQ3NjJDNi42Mjg1OCAxOS4yIDcuODQ3NjEgMTYuMjI4NiAxMC4xMzMzIDEzLjk0MjhDMTAuNTkwNSAxMy40ODU3IDExLjA0NzYgMTMuMTA0OCAxMS41ODEgMTIuNzIzOFYwWk0yLjQzODEgMzkuNTQyOUMyLjY2NjY4IDM5Ljc3MTUgMy4wNDc2MSAzOS43NzE1IDMuMjc2MTggMzkuNTQyOUw4LjIyODU2IDM0LjUxNDNMNi42Mjg1OCAzMi45MTQzTDEuNjc2MiAzNy44NjY3TDEuNjc2MTQgMzcuODY2OEMxLjU5OTk3IDM4LjAxOTEgMS41MjM4MSAzOC4xNzE1IDEuNTIzODEgMzguMzIzOEMxLjUyMzgxIDM4LjQ3NjIgMS41MjM4MiAzOC42Mjg2IDEuNjc2MiAzOC43ODFMMi40MzgxIDM5LjU0MjlaTTQ0Ljk1MjQgNS4wMjg1OEw0MS45ODA5IDIuMDU3MTVWNS4wMjg1OEg0NC45NTI0Wk0xMS4yIDE1LjAwOTVDOS4yMTkwNiAxNi45OTA1IDguMTUyMzkgMTkuNjU3MSA4LjE1MjM5IDIyLjQ3NjJDOC4xNTIzOSAyNS4yOTUyIDkuMjE5MDYgMjcuOTYxOSAxMS4yIDI5Ljg2NjdDMTMuMTgxIDMxLjg0NzYgMTUuODQ3NiAzMi45MTQzIDE4LjY2NjcgMzIuOTE0M0MyMS40ODU3IDMyLjkxNDMgMjQuMTUyNCAzMS44NDc2IDI2LjEzMzMgMjkuODY2N0MzMC4yNDc2IDI1Ljc1MjQgMzAuMjQ3NiAxOS4xMjM4IDI2LjEzMzMgMTUuMDA5NUMyNC4wNzYyIDEyLjk1MjQgMjEuMzMzMyAxMS45NjE5IDE4LjY2NjcgMTEuOTYxOUMxNS45MjM4IDExLjk2MTkgMTMuMjU3MiAxMi45NTI0IDExLjIgMTUuMDA5NVpNMTMuMTA0OCAzMy4yMTlWNDYuNDc2Mkg0NS4yNTcxVjYuNDc2MTlINDAuNDU3MVYxLjUyMzgxSDEzLjEwNDhWMTEuOTYxOUMxNy42NzYyIDkuNjAwMDEgMjMuMzkwNSAxMC4yODU3IDI3LjIgMTQuMDk1MkMzMS45MjM4IDE4Ljc0MjkgMzEuOTIzOCAyNi4zNjE5IDI3LjIgMzEuMDg1N0MyNC45MTQzIDMzLjM3MTQgMjEuODY2NyAzNC41OTA1IDE4LjY2NjcgMzQuNTkwNUMxNi42ODU3IDM0LjU5MDUgMTQuNzgxIDM0LjEzMzMgMTMuMTA0OCAzMy4yMTlaTTMyLjY4NTcgMTUuODQ3N0g0Mi41OTA1VjE3LjM3MTVIMzIuNjg1N1YxNS44NDc3Wk0zNC4yMDk1IDExLjU4MDlIMjkuNjM4MVYxMy4xMDQ3SDM0LjIwOTVWMTEuNTgwOVpNMzMuNjc2MiAyNC4yMjg2SDQyLjU5MDVWMjUuNzUyNEgzMy42NzYyVjI0LjIyODZaTTQyLjU5MDUgMjAuMDM4MUgzMy42NzYyVjIxLjU2MTlINDIuNTkwNVYyMC4wMzgxWk0yOS4xODA5IDMyLjY4NThINDIuNDM4MVYzNC4yMDk2SDI5LjE4MDlWMzIuNjg1OFpNNDIuNTkwNSAyOC40OTUzSDMxLjkyMzhWMzAuMDE5Mkg0Mi41OTA1VjI4LjQ5NTNaTTIxLjU2MTkgNDIuNTkwNkgxNS44NDc2VjM2Ljg3NjNIMjEuNTYxOVY0Mi41OTA2Wk0yMC4wMzgxIDM4LjQwMDFIMTcuMjk1MlY0MS4xNDI5SDIwLjAzODFWMzguNDAwMVpNNDIuNDM4MSA0MS4xNDI5SDI0LjIyODZWNDIuNjY2N0g0Mi40MzgxVjQxLjE0MjlaTTI0LjIyODYgMzYuODc2M0g0Mi41MTQzVjM4LjQwMDFIMjQuMjI4NlYzNi44NzYzWk0xOC40Nzg1IDIxLjQwMUwxNS4wNzc1IDE4TDE0IDE5LjA3NzVMMTcuNDAxIDIyLjQ3ODVMMTQgMjUuODc5NkwxNS4wNzc1IDI2Ljk1NzFMMTguNDc4NSAyMy41NTZMMjEuODc5NiAyNi45NTcxTDIyLjk1NzEgMjUuODc5NkwxOS41NTYgMjIuNDc4NUwyMi45NTcgMTkuMDc3NUwyMS44Nzk1IDE4TDE4LjQ3ODUgMjEuNDAxWlwiXG4gIH1cbikgfSksIG9YID0gKCkgPT4gLyogQF9fUFVSRV9fICovIGMoXCJzdmdcIiwgeyB2aWV3Qm94OiBcIjAgMCA0OCA0OFwiLCBmaWxsOiBcIm5vbmVcIiwgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiwgY2hpbGRyZW46IC8qIEBfX1BVUkVfXyAqLyBjKFxuICBcInBhdGhcIixcbiAge1xuICAgIGZpbGw6IFwiY3VycmVudENvbG9yXCIsXG4gICAgZmlsbFJ1bGU6IFwiZXZlbm9kZFwiLFxuICAgIGNsaXBSdWxlOiBcImV2ZW5vZGRcIixcbiAgICBkOiBcIk00MC44NTEgNDEuNDAyOVY0Ni44MDA1SDQyLjkxNjhWNDhINDEuMTE3NkgzMC4wNTU3SDI4Ljg1NjJIMTguOTkzOUgxNy43OTQ0SDYuNzMyNTZINVY0Ni44MDA1SDYuNzMyNTZWNDEuMjY5NkgxNy43OTQ0VjM1LjczODdIMTkuNDYwM1YzNS42MDU0VjE3LjM0NjdDMTkuNDYwMyAxNS43NDc0IDE4Ljc5MzkgMTQuMjgxNCAxNy41Mjc4IDEzLjIxNTJMMTYuOTk0OCAxMi43NDg3QzE2LjEyODUgMTIuMDgyMyAxNS4yNjIxIDExLjI4MjcgMTQuNTI5MSAxMC40ODNMMTMuOTI5NCA5Ljg4MzI3QzEyLjM5NjcgOC4xNTA2OSAxMS4wNjQgNi4yMTgyMSA5Ljk5NzgyIDQuMTUyNDRMOS4zMzE0NSAyLjg4NjMyQzguNzk4MzUgMS44ODY3NiA5LjE5ODEyIDAuNjg3MjggMTAuMTk3NyAwLjIyMDgxNkMxMC42NjQyIC0wLjA0NTczNDEgMTEuMjYzOSAtMC4wNDU3MzIxIDExLjczMDQgMC4wODc1NDMyQzEyLjE5NjggMC4yODc0NTYgMTIuNTk2NiAwLjYyMDY0NCAxMi44NjMyIDEuMDg3MTFMMTIuOTI5OCAxLjIyMDM4QzEzLjg2MjcgMy4wODYyMyAxNS43OTUyIDUuNzUxNzQgMTcuMTk0NiA3LjI4NDQxQzE3Ljk5NDMgOC4xNTA3IDE4LjcyNzMgOC44MTcwNyAxOS41OTM2IDkuNTUwMDlMMTkuOTI2OCA5LjgxNjY0QzIwLjA2IDkuOTQ5OTIgMjAuMTkzNCAxMC4wODMyIDIwLjMyNjcgMTAuMTQ5OEMyMi4zOTI0IDExLjQ4MjYgMjUuMTI0NSAxMS40ODI2IDI3LjI1NjkgMTAuMTQ5OEMyNy4zMjM1IDEwLjA4MzIgMjcuMzkwMiAxMC4wMzMyIDI3LjQ1NjkgOS45ODMyNEMyNy41MjM1IDkuOTMzMjYgMjcuNTkwMiA5Ljg4MzI4IDI3LjY1NjggOS44MTY2NEwyNy45OSA5LjU1MDA5QzI4LjE5NTMgOS4zNjE5MSAyOC40MDA2IDkuMTc4MTIgMjguNjA0NyA4Ljk5NTM1QzI5LjE5NTggOC40NjYxNSAyOS43Nzc1IDcuOTQ1NDEgMzAuMzIyMyA3LjM1MTA0QzMxLjcyMTcgNS44MTgzOCAzMy42NTQyIDMuMDg2MjQgMzQuNjUzNyAxLjI4NzAyTDM0LjcyMDQgMS4xNTM3NEMzNS4yNTM1IDAuMjIwODE3IDM2LjM4NjMgLTAuMTc5MDA1IDM3LjM4NTkgMC4yODc0NThDMzcuODUyMyAwLjQ4NzM3MSAzOC4xODU1IDAuOTUzODMyIDM4LjM4NTQgMS40MjAzQzM4LjUxODcgMS45NTM0IDM4LjUxODcgMi40ODY1IDM4LjI1MjEgMi45NTI5NkwzNy41ODU3IDQuMjE5MDdDMzYuNTg2MiA2LjI4NDg0IDM1LjI1MzUgOC4yMTczNCAzMy42NTQyIDkuOTQ5OTFMMzMuMDU0NCAxMC41NDk3QzMyLjQ0NDEgMTEuMjEwOCAzMS43OTUgMTEuNzk0NCAzMS4xNjYzIDEyLjM1OTVDMzAuOTcxMiAxMi41MzQ4IDMwLjc3ODEgMTIuNzA4NCAzMC41ODg4IDEyLjg4MkwzMC4wNTU3IDEzLjM0ODRDMjguNzg5NiAxNC40MTQ2IDI4LjEyMzIgMTUuODgwNyAyOC4xMjMyIDE3LjQ4VjM1LjczODdWMzUuODcxOUgyOS43ODkyVjQxLjQwMjlINDAuODUxWk0yMC4zOTMzIDE3LjQxMzNWMzUuNjcyQzIwLjM5MzMgMzUuODA1MyAyMC40NTk5IDM1Ljg3MiAyMC41MjY1IDM1LjkzODZIMjMuMDU4OFYyMS41NDQ5SDI0LjI1ODJWMzUuOTM4NkgyNi43OTA1QzI2Ljg1NzEgMzUuOTM4NiAyNi45MjM3IDM1Ljg3MiAyNi45MjM3IDM1LjgwNTNWMTcuNTQ2NkMyNi45MjM3IDE1LjYxNDEgMjcuNzkgMTMuODE0OSAyOS4yNTYgMTIuNDgyMUwyOS43ODkyIDEyLjAxNTdDMzAuNTg4OCAxMS4zNDkzIDMxLjM4ODUgMTAuNjE2MyAzMi4xMjE1IDkuODE2NjRMMzIuNzIxMiA5LjIxNjlDMzQuMTg3MyA3LjU1MDk2IDM1LjQ1MzQgNS43NTE3NCAzNi40NTI5IDMuNzUyNjFMMzcuMTE5MyAyLjQ4NjVDMzcuMjUyNiAyLjI4NjU5IDM3LjI1MjYgMi4wODY2NyAzNy4xODU5IDEuODg2NzZDMzcuMTE5MyAxLjY4Njg0IDM2Ljk4NiAxLjQ4NjkzIDM2Ljc4NjEgMS40MjAzQzM2LjM4NjMgMS4yMjAzOCAzNS45MTk4IDEuMzUzNjYgMzUuNzE5OSAxLjc1MzQ4TDM1LjY1MzMgMS44ODY3NkMzNC42NTM3IDMuNzUyNjEgMzIuNjU0NiA2LjU1MTQgMzEuMTg4NSA4LjE1MDdDMzAuNTc4MSA4LjgxMiAyOS45Mjg5IDkuMzk1NjQgMjkuMzAwMSA5Ljk2MDg5QzI5LjEwNTIgMTAuMTM2MSAyOC45MTIyIDEwLjMwOTYgMjguNzIzIDEwLjQ4M0wyOC4zODk4IDEwLjc0OTZMMjcuNzkgMTEuMTQ5NEMyNS4zMjQ0IDEyLjc0ODcgMjIuMTI1OCAxMi43NDg3IDE5LjU5MzYgMTEuMTQ5NEMxOS40NjAzIDExLjEwNSAxOS4zMjcxIDExLjAwMTMgMTkuMTkzOSAxMC44OTc3QzE5LjEyNzIgMTAuODQ1OCAxOS4wNjA2IDEwLjc5NCAxOC45OTM5IDEwLjc0OTZMMTguNjYwNyAxMC40ODNMMTguNjYwMyAxMC40ODI3QzE3Ljc5NDEgOS43NDk3NiAxNi45MjggOS4wMTY4NSAxNi4xOTUxIDguMTUwN0MxNC42NjI0IDYuNTUxNCAxMi42NjMzIDMuNjg1OTggMTEuNjYzOCAxLjgyMDEzTDExLjU5NzEgMS42ODY4NUMxMS40NjM4IDEuNDg2OTMgMTEuMzMwNSAxLjM1MzY2IDExLjEzMDYgMS4yODcwMkMxMS4wNjQgMS4yMjAzOCAxMC45MzA3IDEuMjIwMzggMTAuODY0MSAxLjIyMDM4QzEwLjc5NzQgMS4yMjAzOCAxMC42NjQyIDEuMjIwMzggMTAuNTMwOSAxLjI4NzAyQzEwLjEzMSAxLjQ4Njk0IDkuOTk3NzcgMS45NTMzOSAxMC4xOTc3IDIuMzUzMjJMMTAuODY0MSAzLjYxOTM0QzExLjg2MzYgNS42MTg0NyAxMy4wNjMxIDcuNDE3NjggMTQuNTk1OCA5LjA4MzYyTDE1LjE5NTUgOS42ODMzNkMxNS45Mjg1IDEwLjQ4MyAxNi43MjgyIDExLjIxNiAxNy41Mjc4IDExLjg4MjRMMTguMDYxIDEyLjM0ODlDMTkuNTkzNiAxMy42ODE2IDIwLjM5MzMgMTUuNDgwOCAyMC4zOTMzIDE3LjQxMzNaTTcuNjY1NTEgNDIuNjAyNFY0Ni45MzM4SDE3LjUyNzhWNDIuNjAyNEg3LjY2NTUxWk0xOC43MjczIDQxLjQwMjlWNDYuOTMzOEgyOC41ODk3VjQxLjQwMjlWMzcuMDcxNEgyNi43OTA1SDIwLjU5MzFIMTguNzI3M1Y0MS40MDI5Wk0yOS43ODkyIDQyLjYwMjRWNDYuOTMzOEgzOS42NTE2VjQyLjYwMjRIMjkuNzg5MlpNMjcuNDU2OSA0LjU1MjI2QzI3LjQ1NjkgNi42ODQ2NiAyNS43MjQzIDkuMjgzNTMgMjMuNjU4NSA5LjI4MzUzQzIxLjU5MjggOS4yODM1MyAxOS44NjAxIDYuNjg0NjYgMTkuODYwMSA0LjU1MjI2QzE5Ljg2MDEgMi40MTk4NSAyMS41OTI4IDAuNzUzOTEyIDIzLjY1ODUgMC43NTM5MTJDMjUuNzkwOSAwLjc1MzkxMiAyNy40NTY5IDIuNDg2NDkgMjcuNDU2OSA0LjU1MjI2Wk0yNi4yNTczIDQuNTUyMjZDMjYuMjU3MyAzLjE1Mjg3IDI1LjEyNDYgMS45NTMzOSAyMy42NTg1IDEuOTUzMzlDMjIuMjU5MSAxLjk1MzM5IDIxLjA1OTcgMy4xNTI4NyAyMS4wNTk3IDQuNTUyMjZDMjEuMDU5NyA2LjA4NDkyIDIyLjMyNTggOC4wODQwNSAyMy42NTg1IDguMDg0MDVDMjQuOTkxMyA4LjA4NDA1IDI2LjI1NzMgNi4wODQ5MiAyNi4yNTczIDQuNTUyMjZaXCJcbiAgfVxuKSB9KSwgclggPSAoKSA9PiAvKiBAX19QVVJFX18gKi8gYyhcInN2Z1wiLCB7IHZpZXdCb3g6IFwiMCAwIDQ4IDQ4XCIsIGZpbGw6IFwibm9uZVwiLCB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLCBjaGlsZHJlbjogLyogQF9fUFVSRV9fICovIGMoXG4gIFwicGF0aFwiLFxuICB7XG4gICAgZmlsbDogXCJjdXJyZW50Q29sb3JcIixcbiAgICBmaWxsUnVsZTogXCJldmVub2RkXCIsXG4gICAgY2xpcFJ1bGU6IFwiZXZlbm9kZFwiLFxuICAgIGQ6IFwiTTQyLjE4NTggMzUuMTE0NkMzOS4yNDcgMzMuMzgxNSAzNC45NTE5IDMxLjg3NDQgMzEuNzg3MSAzMC44OTQ4QzMwLjEyOTMgMzAuMzY3MyAyOS4wNzQzIDI4LjkzNTYgMjguOTIzNiAyNy4yNzc5QzMxLjQxMDMgMjUuMTY4IDMyLjQ2NTIgMjEuNjI2NCAzMi43NjY2IDIwLjI3QzM0LjI3MzcgMTkuOTY4NiAzNS4zMjg3IDE4LjYxMjIgMzUuMzI4NyAxNi43Mjg0VjEyLjczNDdIMzQuMTk4NFY1Ljg3NzU1QzM0LjE5ODQgNC4yOTUxMyAzMy4yMTg4IDIuOTM4NzggMzEuODYyNCAyLjI2MDZDMzEuODYyNCAyLjE0NzU4IDMxLjg4MTIgMi4wMTU3MyAzMS45MDAxIDEuODgzODhMMzEuOTAwMSAxLjg4MzgzTDMxLjkwMDEgMS44ODM3OEMzMS45MTg5IDEuNzUxOTMgMzEuOTM3OCAxLjYyMDA4IDMxLjkzNzggMS41MDcwNlYwSDIwLjc4NTVDMTYuODY3MSAwIDEzLjYyNjkgMy4yNDAxOSAxMy42MjY5IDcuMTU4NTZWMTIuNzM0N0gxMi40OTY2VjE2LjcyODRDMTIuNDk2NiAxOC42MTIyIDEzLjU1MTYgMTkuOTY4NiAxNS4wNTg2IDIwLjI3QzE1LjM2MDEgMjEuNjI2NCAxNi40MTUgMjUuMDkyNiAxOC45MDE3IDI3LjI3NzlDMTguNzUwOSAyOC45MzU2IDE3LjY5NiAzMC4zNjczIDE2LjAzODIgMzAuODk0OEMxMi45NDg3IDMxLjg3NDQgOC41NzgyNiAzMy4zODE1IDUuNjM5NDggMzUuMTE0NkMwLjUxNTQ2NSAzOC4yMDQxIDAuOTY3NTg0IDQzLjEwMiAxLjA0Mjk0IDQzLjE3NzRWNDhIMi41NVY0My4xMDJDMi41NSA0My4wOTYxIDIuNTQ5NDIgNDMuMDg0MyAyLjU0ODU2IDQzLjA2NjhDMi41Mjc2MSA0Mi42Mzk3IDIuMzQyIDM4Ljg1NjkgNi40NjgzNyAzNi4zOTU2QzkuMjU2NDQgMzQuNzM3OCAxMy40NzYyIDMzLjIzMDggMTYuNDkwMyAzMi4zMjY1QzE2Ljc5MTggMzIuMjUxMiAxNy4wOTMyIDMyLjEwMDUgMTcuMzk0NiAzMS45NDk4QzE3Ljg0NjcgMzUuMTE0NiAyMC42MzQ4IDM3LjYwMTMgMjMuOTUwMyAzNy42MDEzQzI3LjI2NTkgMzcuNjAxMyAyOS45Nzg2IDM1LjExNDYgMzAuNTA2IDMxLjk0OThDMzAuNjU2OCAzMi4wMjUxIDMwLjgwNzUgMzIuMDgxNiAzMC45NTgyIDMyLjEzODJDMzEuMTA4OSAzMi4xOTQ3IDMxLjI1OTYgMzIuMjUxMiAzMS40MTAzIDMyLjMyNjVDMzQuNDI0NCAzMy4zMDYxIDM4LjY0NDIgMzQuNzM3OCA0MS40MzIzIDM2LjM5NTZDNDUuNTM1MyAzOC44NDMgNDUuMzc1IDQyLjU5NyA0NS4zNTI0IDQzLjEyNDlMNDUuMzUyNCA0My4xMjUxQzQ1LjM1MTQgNDMuMTQ5NyA0NS4zNTA2IDQzLjE2NzMgNDUuMzUwNiA0My4xNzc0VjQ4SDQ2Ljg1NzdWNDMuMjUyOEM0Ni44NDk2IDQzLjIzNjYgNDYuODQ4NSA0My4xNjYxIDQ2Ljg0NjUgNDMuMDQ5M0M0Ni44MzA1IDQyLjA3NDQgNDYuNzYxNCAzNy44NzM0IDQyLjE4NTggMzUuMTE0NlpNMTYuNDE1IDE5LjUxNjVMMTYuMjY0MyAxOC45MTM3SDE1LjY2MTVDMTQuNDU1OCAxOC45MTM3IDE0LjAwMzcgMTcuODU4NyAxNC4wMDM3IDE2LjgwMzhWMTQuMzE3MUgxNS4xMzRWNy4yMzM5MUMxNS4xMzQgNC4xNDQ0MyAxNy42OTYgMS41ODI0MiAyMC43ODU1IDEuNTgyNDJIMzAuNDMwN1YyLjAzNDU0SDMwLjI4VjIuNzg4MDdDMjkuNzUyNSA0Ljg5Nzk2IDI3Ljc5MzMgNi40ODAzOCAyNS41MzI3IDYuNDgwMzhIMjAuMDMxOUMxOC43NTA5IDYuNDgwMzggMTcuNjk2IDcuNTM1MzIgMTcuNjk2IDguODE2MzNWOS44NzEyN0gxOS4yMDMxVjguODE2MzNDMTkuMjAzMSA4LjM2NDIxIDE5LjU3OTggNy45MTIwOSAyMC4xMDczIDcuOTEyMDlIMjUuNjA4MUMyOC4zMjA4IDcuOTEyMDkgMzAuNjU2OCA2LjE3ODk2IDMxLjYzNjMgMy43Njc2NkMzMi4zMTQ1IDQuMjE5NzggMzIuODQyIDQuOTczMzEgMzIuODQyIDUuODc3NTVWMTQuMjQxOEgzMy45NzIzVjE2LjcyODRDMzMuOTcyMyAxNy4yNTU5IDMzLjgyMTYgMTguODM4MyAzMi4zMTQ1IDE4LjgzODNIMzEuNzExN0wzMS41NjEgMTkuNDQxMUMzMS41NjEgMTkuNTE2NSAyOS45Nzg2IDI3LjUwMzkgMjQuNDAyNCAyNy41MDM5SDIzLjU3MzZDMTcuOTk3NCAyNy41NzkzIDE2LjQxNSAxOS41OTE4IDE2LjQxNSAxOS41MTY1Wk0yOS4wNzQzIDMwLjk3MDJDMjkuMDc0MyAzMy44MzM2IDI2LjczODQgMzYuMDk0MiAyMy45NTAzIDM2LjA5NDJDMjEuMDg2OSAzNi4wOTQyIDE4LjgyNjMgMzMuNzU4MiAxOC44MjYzIDMwLjk3MDJDMTkuNTc5OCAzMC4yMTY2IDIwLjEwNzMgMjkuMjM3MSAyMC40MDg3IDI4LjE4MjFDMjEuMzEzIDI4LjcwOTYgMjIuNDQzMyAyOS4wMTEgMjMuNzI0MyAyOS4wMTFIMjQuNDAyNEMyNS42ODM0IDI5LjAxMSAyNi43Mzg0IDI4LjcwOTYgMjcuNzE4IDI4LjE4MjFDMjcuNzkzMyAyOS4zMTI0IDI4LjMyMDggMzAuMjE2NiAyOS4wNzQzIDMwLjk3MDJaTTkuNDA3MTUgNDMuNzA0OEg3LjkwMDA5VjQ4SDkuNDA3MTVWNDMuNzA0OFpNMzguNDE4MSA0My43MDQ4SDM5LjkyNTJWNDhIMzguNDE4MVY0My43MDQ4WlwiXG4gIH1cbikgfSksIG5YID0gKCkgPT4gLyogQF9fUFVSRV9fICovIGMoXCJzdmdcIiwgeyB2aWV3Qm94OiBcIjAgMCA0OCA0OFwiLCBmaWxsOiBcIm5vbmVcIiwgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiwgY2hpbGRyZW46IC8qIEBfX1BVUkVfXyAqLyBjKFxuICBcInBhdGhcIixcbiAge1xuICAgIGZpbGw6IFwiY3VycmVudENvbG9yXCIsXG4gICAgZmlsbFJ1bGU6IFwiZXZlbm9kZFwiLFxuICAgIGNsaXBSdWxlOiBcImV2ZW5vZGRcIixcbiAgICBkOiBcIk0yNi4wNjYxIDM5LjIwODNMMzEuNTI1NCAzMi4zMzA5QzMyLjI4MDQgMzIuNTgyNSAzMy4xNjc3IDMyLjg2NzMgMzQuMDA5IDMzLjEzNzNMMzQuMDA5NCAzMy4xMzc0TDM0LjAwOTUgMzMuMTM3NEMzNS4zMDEzIDMzLjU1MTkgMzYuNDg0NiAzMy45MzE3IDM2LjkxMzkgMzQuMTAzNEwzNy40MTAyIDMyLjc1NjNDMzYuMzQ2NyAzMi40MDE4IDMxLjE3MDkgMzAuNzAwMiAzMC4xNzgzIDMwLjQxNjVDMjguNTQ3NiAyOS45MjAyIDI3LjQ4NDEgMjguNTAyMiAyNy4zNDIzIDI2LjgwMDZDMjkuODIzOCAyNC42NzM2IDMwLjgxNjQgMjEuMTk5NCAzMS4xNzA5IDE5LjkyMzJDMzIuNjU5OCAxOS42Mzk2IDMzLjY1MjUgMTguMzYzNCAzMy42NTI1IDE2LjQ0OVYxMi41NDk1SDMyLjUxODFWNS43NDI5OEMzMi41MTgxIDQuMTgzMTYgMzEuNTk2MyAyLjgzNjA0IDMwLjI0OTIgMi4xOTc5M0MzMC4yNDkyIDIuMDU2MTMgMzAuMjY2OSAxLjkzMjA1IDMwLjI4NDcgMS44MDc5OEwzMC4yODQ3IDEuODA3OTRDMzAuMzAyNCAxLjY4Mzg4IDMwLjMyMDEgMS41NTk4MSAzMC4zMjAxIDEuNDE4MDJWMEgxOS40MDE0QzE1LjUwMTggMCAxMi4zODIyIDMuMTE5NjUgMTIuMzgyMiA3LjAxOTJWMTIuNTQ5NUgxMS4yNDc3VjE2LjQ0OUMxMS4yNDc3IDE4LjI5MjUgMTIuMjQwNCAxOS42Mzk2IDEzLjgwMDIgMTkuOTIzMkMxNC4xNTQ3IDIxLjI3MDMgMTUuMTQ3MyAyNC43NDQ1IDE3LjYyODggMjYuODAwNkMxNy40ODcgMjguNDMxMyAxNi40MjM1IDI5LjkyMDIgMTQuNzkyOCAzMC40MTY1QzExLjc0NDEgMzEuNDA5MiA3LjQxOTA4IDMyLjg5ODEgNC41ODMwNCAzNC41OTk3Qy0wLjUyMTgzNSAzNy42NDg1IC0wLjAyNTUyMzkgNDIuMzk4OCAwLjA0NTM3NzEgNDIuNTQwNlY0Ny4yOTFIMS40NjM0VjQyLjM5ODhDMS40NjM0IDQyLjM5NjYgMS40NjI5NiA0Mi4zOTAzIDEuNDYyMjYgNDIuMzgwMkMxLjQ0MTAyIDQyLjA3NSAxLjE3NjUgMzguMjczNSA1LjM2Mjk1IDM1LjczNDFDNy42MzE3OSAzNC4zODcgMTAuODIyMyAzMy4xODE3IDEzLjUxNjYgMzIuMjZMMTguOTc2IDM5LjA2NjVMMjAuMTEwNCAzOC4wMDNMMjAuNzQ4NSAzOC44NTM4TDE5LjA0NjkgNDcuMDc4M0wyMC4zOTQgNDcuMzYxOUwyMS45NTM4IDM5Ljg0NjRDMjIuMTY2NSAzOS45MTczIDIyLjM3OTIgMzkuOTg4MiAyMi42NjI4IDM5Ljk4ODJDMjIuODc1NSAzOS45ODgyIDIzLjE1OTEgMzkuOTE3MyAyMy4zNzE4IDM5Ljg0NjRMMjQuOTMxNiA0Ny4zNjE5TDI2LjI3ODggNDcuMDc4M0wyNC41NzcxIDM4Ljg1MzhMMjUuMjE1MiAzOC4wMDNMMjYuMDY2MSAzOS4yMDgzWk0yOS43NTI5IDMxLjgzNDZDMjkuNzgyMyAzMS44MzQ2IDI5LjgyMzggMzEuODQ2NyAyOS44NzI1IDMxLjg2MUwyOS44NzI1IDMxLjg2MUMyOS45NDEzIDMxLjg4MTEgMzAuMDI0NCAzMS45MDU1IDMwLjEwNzQgMzEuOTA1NUwyNS45OTUyIDM3LjE1MjFMMjMuNDQyNyAzNC43NDE1TDI3LjQxMzIgMzAuMzQ1NkMyNy45ODA0IDMwLjk4MzggMjguODMxMiAzMS41NTEgMjkuNzUyOSAzMS44MzQ2Wk0xNS4wMDU1IDE5LjIxNDJMMTQuOTM0NiAxOC42NDdIMTQuMzY3NEMxMy4wOTEyIDE4LjY0NyAxMi42NjU4IDE3LjU4MzUgMTIuNjY1OCAxNi41MTk5VjE0LjAzODRIMTMuODAwMlY3LjA5MDFDMTMuODAwMiAzLjk3MDQ2IDE2LjM1MjYgMS40ODg5MiAxOS40MDE0IDEuNDg4OTJIMjguOTAyMVYxLjU1OTgyVjEuOTg1MjNIMjguNzYwM1YyLjgzNjA0QzI4LjE5MzEgNC44OTIxNyAyNi4yNzg4IDYuMzgxMDkgMjQuMDgwOCA2LjM4MTA5SDE4LjYyMTRDMTcuMzQ1MiA2LjM4MTA5IDE2LjM1MjYgNy40NDQ2MSAxNi4zNTI2IDguNjQ5OTNWOS43MTM0NEgxNy43NzA2VjguNjQ5OTNDMTcuNzcwNiA4LjE1MzYyIDE4LjE5NiA3LjcyODIxIDE4LjY5MjQgNy43MjgyMUgyNC4xNTE3QzI2Ljg0NiA3LjcyODIxIDI5LjE4NTcgNi4wMjY1OSAzMC4wMzY1IDMuNjE1OTVDMzAuNzQ1NSA0LjA0MTM2IDMxLjI0MTggNC44MjEyNyAzMS4yNDE4IDUuNzQyOThWMTMuOTY3NUgzMi4zNzYzVjE2LjQ0OUMzMi4zNzYzIDE3LjQ0MTcgMzEuOTUwOCAxOC41NzYxIDMwLjY3NDYgMTguNTc2MUgzMC4xMDc0TDI5Ljk2NTYgMTkuMTQzM0MyOS45NjU2IDE5LjIxNDIgMjguNDA1OCAyNy4wODQyIDIyLjg3NTUgMjcuMDg0MkgyMi4xNjY1QzE2LjQ5NDQgMjcuMTU1MSAxNS4wMDU1IDE5LjI4NTEgMTUuMDA1NSAxOS4yMTQyWk0yMi4wOTU2IDI4LjU3MzFIMjIuODA0NkMyNC4wODA4IDI4LjU3MzEgMjUuMTQ0MyAyOC4yODk1IDI2LjA2NjEgMjcuNzIyM0wyNi4wNjYxIDI3LjcyMjRDMjYuMjA3OSAyOC4yMTg3IDI2LjM0OTcgMjguNzE0OSAyNi41NjI0IDI5LjE0MDNMMjIuNDUwMSAzMy42NzhMMTguMzM3OCAyOS4xNDAzQzE4LjU1MDYgMjguNzE0OSAxOC43NjMzIDI4LjIxODYgMTguODM0MiAyNy43MjIzQzE5Ljc1NTkgMjguMjE4NiAyMC44MTk0IDI4LjU3MzEgMjIuMDk1NiAyOC41NzMxWk0xNC43OTI4IDMxLjkwNTVDMTQuODk2NiAzMS45MDU1IDE0Ljk2MjQgMzEuODY3NSAxNS4wNDU5IDMxLjgxOTNMMTUuMDQ1OSAzMS44MTkzQzE1LjA3NjQgMzEuODAxNiAxNS4xMDkzIDMxLjc4MjcgMTUuMTQ3MyAzMS43NjM3QzE2LjA2OSAzMS40ODAxIDE2Ljg0ODkgMzAuOTgzOCAxNy40ODcgMzAuMjc0N0wyMS40NTc1IDM0LjY3MDZMMTguOTA1MSAzNy4wODEyTDE0Ljc5MjggMzEuOTA1NVpNMjMuMDE3MyAzOC40Mjg0QzIyLjczMzcgMzguNzgyOSAyMi4wOTU2IDM4Ljc4MjkgMjEuODgyOSAzOC40Mjg0TDIwLjk2MTIgMzcuMTUyMUwyMi40NTAxIDM1LjczNDFMMjMuOTM5IDM3LjE1MjFMMjMuMDE3MyAzOC40Mjg0Wk03LjYzMTc3IDQzLjEwNzlINi4yMTM3NVY0Ny4zNjJINy42MzE3N1Y0My4xMDc5Wk00Ny41ODYyIDM3LjU3NzVMNDggMzguODUzN0w0My41ODYyIDQyLjA0NDNMNDUuMjQxNCA0Ny4yMkw0NC4yMDY5IDQ4TDM5LjkzMSA0NC44MDk0TDM1LjY1NTIgNDhMMzQuNjIwNyA0Ny4yMkwzNi4yNzU5IDQyLjA0NDNMMzIgMzguODUzN0wzMi40MTM4IDM3LjU3NzVIMzcuNjU1MkwzOS4zMTAzIDMyLjQwMTdINDAuNjIwN0w0Mi4yNzU5IDM3LjU3NzVINDcuNTg2MlpNNDAgNDMuMzkxNEM0MC4yMDY5IDQzLjM5MTQgNDAuNDEzOCA0My40NjIzIDQwLjYyMDcgNDMuNjA0MUw0My4zMTAzIDQ1LjU4OTNMNDIuMjc1OSA0Mi4yNTdDNDIuMDY5IDQxLjgzMTYgNDIuMjc1OSA0MS4zMzUzIDQyLjYyMDcgNDEuMDUxN0w0NS4zNzkzIDM4Ljk5NTVINDEuOTMxQzQxLjUxNzIgMzguOTk1NSA0MS4xMDM0IDM4LjcxMTkgNDAuOTY1NSAzOC4yODY1TDM5LjkzMSAzNC45NTQyTDM4Ljg5NjUgMzguMjg2NUMzOC43NTg2IDM4Ljc4MjggMzguNDEzOCAzOS4wNjY0IDM3LjkzMSAzOS4wNjY0SDM0LjQ4MjhMMzcuMjQxNCA0MS4xMjI2QzM3LjY1NTIgNDEuNDA2MiAzNy43OTMxIDQxLjkwMjUgMzcuNjU1MiA0Mi4zMjc5TDM2LjYyMDcgNDUuNjYwMkwzOS4zNzkzIDQzLjYwNDFDMzkuNTg2MiA0My40NjIzIDM5Ljc5MzEgNDMuMzkxNCA0MCA0My4zOTE0WlwiXG4gIH1cbikgfSksIGlYID0gKCkgPT4gLyogQF9fUFVSRV9fICovIGMoXCJzdmdcIiwgeyB2aWV3Qm94OiBcIjAgMCA0OCA0OFwiLCBmaWxsOiBcIm5vbmVcIiwgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiwgY2hpbGRyZW46IC8qIEBfX1BVUkVfXyAqLyBjKFxuICBcInBhdGhcIixcbiAge1xuICAgIGZpbGw6IFwiY3VycmVudENvbG9yXCIsXG4gICAgZmlsbFJ1bGU6IFwiZXZlbm9kZFwiLFxuICAgIGNsaXBSdWxlOiBcImV2ZW5vZGRcIixcbiAgICBkOiBcIk0zMy44OTQxIDMyLjEwNTdMMzguNzg0NiA0MC4xMjkzQzM5LjAxMzggNDAuNTExMyAzOS4yNDMxIDQwLjg5MzQgMzkuMzE5NSA0MS4zNTE5QzQwLjA4MzYgNDIuNjUwOSAzOS43NzggNDMuOTUgMzguNDc4OSA0NC43MTQxTDM0LjE5OTcgNDcuMTU5NEMzMy45NzA1IDQ3LjMxMjIgMzIuODI0MyA0Ny44NDcxIDMyLjEzNjUgNDcuOTIzNUMzMS44MzA5IDQ4IDMxLjUyNTIgNDggMzEuMTQzMSA0OEMzMC45OTAzIDQ4IDMwLjgxODQgNDcuOTgwOSAzMC42NDY1IDQ3Ljk2MThDMzAuNDc0NSA0Ny45NDI3IDMwLjMwMjYgNDcuOTIzNSAzMC4xNDk4IDQ3LjkyMzVDMjkuMzM0MSA0Ny44NjA4IDI4LjU3IDQ3LjY0MzUgMjcuODU3MyA0Ny40NDA5QzI3LjcwMjEgNDcuMzk2NyAyNy41NDkyIDQ3LjM1MzIgMjcuMzk4OCA0Ny4zMTIyQzI0Ljg3NzIgNDYuNTQ4MSAyMi40MzE5IDQ1LjE3MjYgMTkuOTEwMiA0Mi45NTY2QzE3LjAwNjUgNDAuNTExMyAxNC40MDg0IDM3LjQ1NDggMTIuMTkyMyAzNC4wMTYxQzExLjg5OTQgMzMuNTE4MSAxMS40NzE3IDMyLjgxNzkgMTEuMDEyNSAzMi4wNjYyQzEwLjI3NCAzMC44NTczIDkuNDU0MTIgMjkuNTE1MiA4Ljk4Mjk0IDI4LjY2NzFDNi45MTk3NSAyNS4wNzU2IDUuNDY3ODcgMjEuNDA3NyA0LjYyNzMxIDE3LjY2MzRDMy45Mzk1OCAxNC4zNzc2IDMuNzg2NzUgMTEuNjI2NyA0LjMyMTY1IDkuMDI4NTdDNC4zMzAzNCA4Ljk4MDc3IDQuMzM5MDMgOC45MzI3MiA0LjM0Nzc3IDguODg0NDRDNC40OTI2IDguMDgzNzIgNC42NDkwNCA3LjIxODg5IDUuMDA5MzggNi4zNTQwNkM1LjIzODYzIDUuNjY2MzMgNS41NDQyOSA1LjEzMTQyIDUuOTI2MzYgNC41OTY1MkM2LjMwODQzIDQuMDYxNjIgNy4zMDE4MiAzLjI5NzQ3IDcuNTMxMDYgMy4xNDQ2NEwxMS43MzM5IDAuNDcwMTMyQzEzLjAzMjkgLTAuMzcwNDI3IDE0LjMzMiAtMC4wNjQ3Njk0IDE1LjA5NjEgMS4yMzQyOEMxNS4zMjUzIDEuNTM5OTEgMTUuNTU0NSAxLjkyMTk1IDE1Ljc4MzggMi4zMDM5OEwxNS43ODM4IDIuMzA0MDlMMjAuNTk3OSAxMC4zMjc2QzIxLjM2MjEgMTEuNTUwMiAyMS4xMzI4IDEyLjg0OTMgMTkuOTg2NiAxMy42MTM0TDE1LjU1NDYgMTYuMjg3OUMxNS4wMTk3IDE2Ljc0NjQgMTQuODY2OSAxNy4xMjg1IDE1LjA5NjEgMTcuOTY5MUMxNS4xNTI2IDE4LjExMDQgMTUuMjA5MiAxOC4yODMxIDE1LjI3MzQgMTguNDc5NUMxNS4zODI5IDE4LjgxMzkgMTUuNTE0OCAxOS4yMTY5IDE1LjcwNzQgMTkuNjUwMkMxNi4zMTg3IDIxLjEwMjEgMTcuMDgyOSAyMi41NTM5IDE3Ljk5OTkgMjQuMTU4NkwyMC4yOTIzIDI3Ljk3OTRDMjEuMjg1NyAyOS41MDc2IDIyLjI3OTEgMzAuODgzMSAyMy4yNzI1IDMyLjEwNTdDMjMuNzMwOSAzMi42NDA2IDI0LjE4OTQgMzMuMDk5MSAyNC40OTUgMzMuNDA0N0wyNC40OTUxIDMzLjQwNDhDMjUuMTgyOCAzMy45Mzk3IDI1LjQ4ODUgMzQuMDE2MSAyNi4zMjkgMzMuNzEwNEwzMC42MDgyIDMxLjExMjRDMzEuODMwOSAzMC41MDEgMzMuMTI5OSAzMC44ODMxIDMzLjg5NDEgMzIuMTA1N1pNMzMuNjY0OCA0NS42MzExTDM3Ljg2NzYgNDMuMjYyM0MzOC40MDI1IDQyLjk1NjYgMzguNDc4OSA0Mi41NzQ1IDM3Ljk0NCA0MS44ODY4QzM3LjgzNCA0MS42MTE3IDM3LjY4NDMgNDEuMzc2MSAzNy41MjM1IDQxLjEyMzJDMzcuNDYxIDQxLjAyNDkgMzcuMzk2OSA0MC45MjM5IDM3LjMzMjcgNDAuODE3TDMyLjQ0MjIgMzIuNzkzNUMzMS45MjM0IDMxLjk3ODIgMzEuNDA0NiAzMi4yNDEyIDMxLjIzNDQgMzIuMzI3NUMzMS4yMjkxIDMyLjMzMDIgMzEuMjI0MiAzMi4zMzI3IDMxLjIxOTYgMzIuMzM1TDI2Ljg2MzkgMzUuMDA5NUMyNS4zMzU2IDM1LjYyMDggMjQuNDE4NyAzNS40NjggMjMuMzQ4OSAzNC40NzQ2QzIyLjk5NDQgMzQuMTkxIDIyLjU3NDEgMzMuNzEgMjIuMDg4IDMzLjE1MzhDMjIuMDUwMiAzMy4xMTA1IDIyLjAxMiAzMy4wNjY4IDIxLjk3MzQgMzMuMDIyN0MyMC45MDM2IDMxLjcyMzcgMTkuOTEwMiAzMC4zNDgyIDE4LjkxNjggMjguNjY3MUwxNi42MjQ0IDI0Ljg0NjRDMTUuNjMxIDIzLjI0MTcgMTQuODY2OSAyMS42MzcgMTQuMjU1NSAyMC4xMDg3QzEzLjk5OTUgMTkuNDY4NSAxMy44NTA3IDE4LjkzNTYgMTMuNzE5MyAxOC40NjUxQzEzLjY5MzggMTguMzczOSAxMy42NjkgMTguMjg1MSAxMy42NDQyIDE4LjE5ODNDMTMuMzM4NiAxNi43NDY0IDEzLjY0NDIgMTUuOTA1OSAxNC43MTQgMTQuOTEyNUwxOS4yMjI1IDEyLjE2MTZDMTkuMzc1MyAxMi4wODUxIDE5LjkxMDIgMTEuNzc5NSAxOS4zNzUzIDEwLjkzODlMMTQuNTYxMiAyLjkxNTQxQzE0LjQ1MTEgMi42NDAyNSAxNC4zMDE0IDIuNDA0NzIgMTQuMTQwNyAyLjE1MTc0QzE0LjA3ODIgMi4wNTM0NSAxNC4wMTQgMS45NTI1MSAxMy45NDk5IDEuODQ1NkMxMy43MjA2IDEuNDYzNTIgMTMuNDkxNCAxLjMxMDcgMTMuMjYyMiAxLjMxMDdDMTMuMDMyOSAxLjMxMDcgMTIuODgwMSAxLjM4NzExIDEyLjY1MDggMS41Mzk5NEw4LjUyNDQ1IDQuMTM4MDNDOC4xNDIzOCA0LjM2NzI3IDcuNTMxMDYgNC45MDIxOCA3LjMwMTgyIDUuMjA3ODRDNi45OTYxNiA1LjY2NjMzIDYuNzY2OTIgNi4xMjQ4MSA2LjUzNzY3IDYuNjU5NzFMNi41Mzc2NyA2LjY1OTcyQzYuMzA4NDMgNy40MjM4NiA2LjA3OTE5IDguMTg4IDUuOTI2MzYgOS4xMDQ5N0M1LjQ2Nzg3IDExLjQ3MzggNS41NDQyOSAxNC4wNzE5IDYuMjMyMDIgMTcuMTI4NUM3LjA3MjU4IDIwLjcyIDguNDQ4MDQgMjQuMzExNSAxMC40MzQ4IDI3Ljc1MDFDMTEuMTk5IDI5LjEyNTYgMTIuODAzNyAzMS43MjM3IDEzLjY0NDIgMzMuMDIyN0MxNS43MDc0IDM2LjMwODUgMTguMjI5MSAzOS4yMTIzIDIxLjA1NjQgNDEuNjU3NkMyMy41MDE3IDQzLjcyMDggMjUuNjQxMyA0NS4wMTk4IDI4LjAxMDIgNDUuNzA3NUMyOC4xOTg3IDQ1Ljc1NDcgMjguMzgwOCA0NS44MDE4IDI4LjU1NzggNDUuODQ3NkMyOS4yNDE0IDQ2LjAyNDYgMjkuODQ4NCA0Ni4xODE3IDMwLjQ1NTQgNDYuMjQyNEMzMC45OTAzIDQ2LjMxODggMzEuNTI1MiA0Ni4zMTg4IDMyLjA2MDEgNDYuMjQyNEMzMi4zNjU4IDQ2LjE2NiAzMy4yMDYzIDQ1Ljg2MDQgMzMuNjY0OCA0NS42MzExWk00My41MjIzIDIxLjU2MDZDNDMuMjkzMSAxOC4xMjE5IDQyLjE0NjkgMTQuODM2MSA0MC4yMzY1IDExLjkzMjNDMzcuODY3NyA4LjE4ODAyIDM0LjUwNTQgNS41MTM1MiAzMC4zNzkgMy45ODUyM0wyOS45OTcgMy44MzI0TDI5LjM4NTYgNS4yMDc4N0wyOS44NDQxIDUuMzYwNjlDMzMuNjY0OSA2LjgxMjU3IDM2LjcyMTQgOS4zMzQyNSAzOC45Mzc1IDEyLjc3MjlDNDAuNjk1IDE1LjUyMzggNDEuNjg4NCAxOC41MDQgNDEuOTE3NiAyMS43MTM0QzQxLjk5NCAyMy4wODg5IDQxLjk5NCAyNC40NjQzIDQxLjc2NDggMjUuODM5OEw0My4yOTMxIDI2LjA2OUM0My41MjIzIDI0LjU0MDcgNDMuNTk4NyAyMy4wMTI0IDQzLjUyMjMgMjEuNTYwNlpNMzcuNjM4NCAyNS4zMDQ4TDM5LjA5MDMgMjUuNTM0MUMzOS4yNDMxIDI0LjQ2NDMgMzkuMzE5NSAyMy4zOTQ1IDM5LjMxOTUgMjIuNDAxMUMzOS4xNjY3IDE1LjIxODEgMzQuMTIzMyA5LjQ4NzA0IDI4LjY5NzkgNy44MDU5MkwyOC4yMzk0IDkuMjU3NzlDMzMuODE3NyAxMC45Mzg5IDM5LjAxMzkgMTcuNTg3IDM3LjYzODQgMjUuMzA0OFpcIlxuICB9XG4pIH0pLCBhWCA9ICgpID0+IC8qIEBfX1BVUkVfXyAqLyBjKFwic3ZnXCIsIHsgdmlld0JveDogXCIwIDAgNDggNDhcIiwgZmlsbDogXCJub25lXCIsIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsIGNoaWxkcmVuOiAvKiBAX19QVVJFX18gKi8gYyhcbiAgXCJwYXRoXCIsXG4gIHtcbiAgICBmaWxsOiBcImN1cnJlbnRDb2xvclwiLFxuICAgIGZpbGxSdWxlOiBcImV2ZW5vZGRcIixcbiAgICBjbGlwUnVsZTogXCJldmVub2RkXCIsXG4gICAgZDogXCJNMjEuMTEzMSAzMy4yMzcxSDEuMjMwNTFWMTIuNDQ3OUgyMS4xMTMxVjE2LjI2ODlIMjIuNDA4NFY3LjQ2MTA1QzIyLjQwODQgNi4xMDEgMjEuMzA3NCA1IDE5Ljk0NzMgNUgyLjQ2MTAzQzEuMTAwOTggNSAwIDYuMTAxIDAgNy40NjEwNVYzOS41MTkyQzAgNDAuODc5MyAxLjEwMDk4IDQxLjk4MDMgMi40NjEwMyA0MS45ODAzSDE5Ljk0NzNDMjEuMzA3NCA0MS45ODAzIDIyLjQwODQgNDAuODc5MyAyMi40MDg0IDM5LjUxOTJWMzAuMTI4NUgyMS4xMTMxVjMzLjIzNzFaTTIuNDYxMDMgNi4yOTUyOEgxOS45NDczQzIwLjU5NSA2LjI5NTI4IDIxLjE3NzkgNi44MTMzOSAyMS4xNzc5IDcuNTI1NzlWMTEuMjE3NEgxLjI5NTI4VjcuNTI1NzlDMS4yMzA1MiA2LjgxMzM5IDEuNzQ4NjIgNi4yOTUyOCAyLjQ2MTAzIDYuMjk1MjhaTTE5Ljk0NzMgNDAuNzQ5OEgyLjQ2MTAzQzEuODEzMzkgNDAuNzQ5OCAxLjIzMDUxIDQwLjIzMTcgMS4yMzA1MSAzOS41MTkyVjM0LjUzMjRIMjEuMTEzMVYzOS41MTkyQzIxLjExMzEgNDAuMjMxNyAyMC41OTUgNDAuNzQ5OCAxOS45NDczIDQwLjc0OThaTTQ1LjU5MzkgNUgyOC4xMDc2QzI2Ljc0NzUgNSAyNS42NDY2IDYuMTAxIDI1LjY0NjYgNy40NjEwNVYxNi4yNjg5SDI2Ljk0MThWMTIuNDQ3OUg0Ni44MjQ0VjMxLjI5NDJWMzMuMzAxOUgyNi44NzcxVjMwLjE5MzJIMjUuNTgxOFYzOS41ODRDMjUuNTgxOCA0MC45NDQgMjYuNjgyOCA0Mi4wNDUgMjguMDQyOCA0Mi4wNDVINDUuNTI5MUM0Ni44ODkyIDQyLjA0NSA0Ny45OTAyIDQwLjk0NCA0Ny45OTAyIDM5LjU4NFYzMS4yOTQyVjcuNTI1NzlDNDguMTE5NyA2LjEwMDk4IDQ2Ljk1MzkgNSA0NS41OTM5IDVaTTQ1LjU5MzkgNDAuNzQ5OEgyOC4xMDc2QzI3LjQ2IDQwLjc0OTggMjYuODc3MSA0MC4yMzE3IDI2Ljg3NzEgMzkuNTE5MlYzNC41MzI0SDQ2Ljc1OTdWMzkuNTE5MkM0Ni44MjQ0IDQwLjIzMTcgNDYuMjQxNSA0MC43NDk4IDQ1LjU5MzkgNDAuNzQ5OFpNMjYuODc3MSAxMS4xNTI2VjcuNDYxMDVDMjYuODc3MSA2LjgxMzQxIDI3LjM5NTIgNi4yMzA1MSAyOC4xMDc2IDYuMjMwNTFINDUuNTkzOUM0Ni4yNDE1IDYuMjMwNTEgNDYuODI0NCA2Ljc0ODY0IDQ2LjgyNDQgNy40NjEwNVYxMS4xNTI2SDI2Ljg3NzFaTTM4LjcyODkgMzYuOTkzNEgzNC45NzI2VjM4LjI4ODdIMzguNzI4OVYzNi45OTM0Wk0zNi4wMDg4IDguMTA4NzFIMzcuNjkyN1Y5LjQwMzk5SDM2LjAwODhWOC4xMDg3MVpNOS4zMjYwNCAzNi45OTM0SDEzLjA4MjRWMzguMjg4N0g5LjMyNjA0VjM2Ljk5MzRaTTExLjk4MTQgOC4xMDg3MUgxMC4yOTc1VjkuNDAzOTlIMTEuOTgxNFY4LjEwODcxWk0zNS4xNjY5IDIxLjI1NThMMzAuNjMzNCAxNy4zMDUyTDMwLjU2ODYgMTkuNjM2N0gyMy4wNTZWMTguMzQxNEgyOS4zMzgxVjE1LjY4NjFIMzAuNjk4MUwzNy4xMDk4IDIxLjI1NThMMzAuNTY4NiAyNi43NjA3SDI5LjI3MzNWMjMuOTExMUwyNi42ODI4IDIzLjg0NjNWMjIuNjE1OEgzMC41Njg2VjI1LjE0MTZMMzUuMTY2OSAyMS4yNTU4Wk0xNy40MjE1IDI5LjIyMTdMMTIuODg4IDI1LjIwNjRMMTcuNDg2MyAyMS4zODUzVjIzLjg0NjNMMjEuMzA3NCAyMy45MTExVjIyLjYxNThIMTguNzE2OEwxOC43ODE2IDE5LjcwMTRIMTcuNDIxNUwxMC44ODA0IDI1LjIwNjRMMTcuMjkyIDMwLjc3NjFIMTguNzE2OFYyOC4xMjA3SDI0Ljg2OTRWMjYuODkwMkwxNy40MjE1IDI2LjgyNTVWMjkuMjIxN1pNMjMuMDU2IDIyLjYxNThIMjQuODY5NFYyMy45MTExSDIzLjA1NlYyMi42MTU4WlwiXG4gIH1cbikgfSksIHNYID0gKCkgPT4gLyogQF9fUFVSRV9fICovIGMoXCJzdmdcIiwgeyB2aWV3Qm94OiBcIjAgMCA0OCA0OFwiLCBmaWxsOiBcIm5vbmVcIiwgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiwgY2hpbGRyZW46IC8qIEBfX1BVUkVfXyAqLyBjKFxuICBcInBhdGhcIixcbiAge1xuICAgIGZpbGw6IFwiY3VycmVudENvbG9yXCIsXG4gICAgZmlsbFJ1bGU6IFwiZXZlbm9kZFwiLFxuICAgIGNsaXBSdWxlOiBcImV2ZW5vZGRcIixcbiAgICBkOiBcIk00Mi43MjY2IDBINDQuOTM3NlYxLjQyNjQ1SDQyLjcyNjZWMjguMzg2M0gyNC42ODJWMzguMTU3NUwzMy4yNDA3IDQ2LjU3MzVIMzYuMzc4OVY0OEgxMS41NTg3VjQ2LjU3MzVIMTQuNjk2OUwyMy4yNTU2IDM4LjE1NzVWMjguMzg2M0g1LjIxMTAyVjEuNDI2NDVIM1YwSDUuMjExMDJINDIuNzI2NlpNMjMuMjU1NiA0Ni41MDIyVjQwLjA4MzJMMTYuNjkzOSA0Ni41MDIySDIzLjI1NTZaTTI0LjY4MiA0Ni41MDIySDMxLjI0MzdMMjQuNjgyIDQwLjA4MzJWNDYuNTAyMlpNNi42Mzc0NyAyNi45NTk5SDQxLjMwMDFWMS40MjY0NUg2LjYzNzQ3VjI2Ljk1OTlaTTEyLjM0MzMgMTEuMTI2M0wxMS4zNDQ3IDEwLjEyNzlMMTIuODQyNSA4LjYzMDA4TDExLjM0NDcgNy4xMzIzTDEyLjM0MzMgNi4xMzM3OUwxMy44NDEgNy42MzE1N0wxNS4zMzg4IDYuMTMzNzlMMTYuMzM3MyA3LjEzMjNMMTQuODM5NSA4LjYzMDA4TDE2LjMzNzMgMTAuMTI3OUwxNS4zMzg4IDExLjEyNjNMMTMuODQxIDkuNjI4NTlMMTIuMzQzMyAxMS4xMjYzWk0zMi42NzAxIDIyLjE4MTJMMzQuMDk2NiAyMC43NTQ4TDM1LjU5NDMgMjIuMTgxMkwzNi41OTI5IDIxLjE4MjdMMzUuMDk1MSAxOS43NTYzTDM2LjU5MjkgMTguMjU4NUwzNS41OTQzIDE3LjI2TDM0LjA5NjYgMTguNzU3N0wzMi42NzAxIDE3LjI2TDMxLjY3MTYgMTguMjU4NUwzMy4wOTgxIDE5Ljc1NjNMMzEuNjcxNiAyMS4xODI3TDMyLjY3MDEgMjIuMTgxMlpNMTguNjE5NiAyNC4xMDY5QzE3LjI2NDUgMjQuMTA2OSAxNi4xMjMzIDIyLjk2NTggMTYuMTIzMyAyMS42MTA2QzE2LjEyMzMgMjAuNDY5NSAxNi44MzY1IDE5LjQ3MSAxNy45Nzc3IDE5LjI1N1YxOC4xMTU5QzE3Ljk3NzcgMTUuNDc2OSAyMC4xMTc0IDEzLjMzNzMgMjIuNzU2MyAxMy4zMzczSDI0LjYxMDdDMjYuNDY1MSAxMy4zMzczIDI3Ljk2MjggMTEuODM5NSAyNy45NjI4IDkuOTg1MDlWNi43NzU1OEwyNi42NzkgOC4wNTkzOEwyNS42ODA1IDcuMDYwODdMMjguNjc2MSA0LjA2NTM0TDMxLjYwMDMgNi45ODk1NEwzMC42MDE4IDcuOTg4MDdMMjkuMzE4IDYuNzA0MjZWOS45ODUwOUMyOS4zMTggMTIuNjI0IDI3LjE3ODMgMTQuNzYzNyAyNC41Mzk0IDE0Ljc2MzdIMjIuNjg1QzIwLjgzMDYgMTQuNzYzNyAxOS4zMzI4IDE2LjI2MTUgMTkuMzMyOCAxOC4xMTU5VjE5LjI1N0MyMC4zMzE0IDE5LjU0MjMgMjEuMTE1OSAyMC40Njk1IDIxLjExNTkgMjEuNjEwNkMyMS4xMTU5IDIyLjk2NTggMTkuOTc0NyAyNC4xMDY5IDE4LjYxOTYgMjQuMTA2OVpNMTkuNjg5NSAyMS41MzkzQzE5LjY4OTUgMjAuOTY4NyAxOS4xOTAyIDIwLjQ2OTUgMTguNjE5NiAyMC40Njk1QzE3Ljk3NzcgMjAuNDY5NSAxNy41NDk4IDIwLjk2ODcgMTcuNTQ5OCAyMS41MzkzQzE3LjU0OTggMjIuMTA5OSAxOC4wNDkgMjIuNjA5MiAxOC42MTk2IDIyLjYwOTJDMTkuMTkwMiAyMi42MDkyIDE5LjY4OTUgMjIuMTA5OSAxOS42ODk1IDIxLjUzOTNaXCJcbiAgfVxuKSB9KSwgY1ggPSAoKSA9PiAvKiBAX19QVVJFX18gKi8gYyhcInN2Z1wiLCB7IHZpZXdCb3g6IFwiMCAwIDQ4IDQ4XCIsIGZpbGw6IFwibm9uZVwiLCB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLCBjaGlsZHJlbjogLyogQF9fUFVSRV9fICovIGMoXG4gIFwicGF0aFwiLFxuICB7XG4gICAgZmlsbDogXCJjdXJyZW50Q29sb3JcIixcbiAgICBkOiBcIk0zOS44MjY0IDI0LjY4MTFDNDEuNTg5MyAyNC42ODExIDQzLjM1MjMgMjQuNjgxMSA0NS4xMTUyIDI0LjY4MTFINDhWNC4wODY4NEM0OCAxLjg0MzEgNDYuMTU2OSAwIDQzLjkxMzIgMEgyNy41NjU5VjEuNjAyNjdINDMuODMzMUM0NS4xOTUzIDEuNjAyNjcgNDYuMzk3MyAyLjcyNDU1IDQ2LjM5NzMgNC4xNjY5NVYyMy4yMzg3SDQ1LjExNTJDNDMuMzUyMyAyMy4yMzg3IDQxLjU4OTMgMjMuMjM4NyAzOS44MjY0IDIzLjIzODdDMzkuMzQ1NiAyMy4yMzg3IDM4Ljg2NDggMjMuMzE4OSAzOC40NjQxIDIzLjU1OTNDMzguMDYzNCAyMy43OTk3IDM3Ljc0MjkgMjQuMTIwMiAzNy41ODI2IDI0LjUyMDlDMzcuNDIyNCAyNS4wMDE3IDM3LjUwMjUgMjUuNDgyNSAzNy43NDI5IDI1Ljk2MzNDMzguMzg0IDI3LjE2NTMgMzguMDYzNCAyOC42ODc4IDM2Ljk0MTYgMjkuNjQ5NEMzNS44OTk4IDMwLjUzMDkgMzQuMjk3MiAzMC42MTEgMzMuMDk1MiAyOS43Mjk2QzMxLjk3MzMgMjguOTI4MiAzMS41NzI2IDI3LjQ4NTggMzIuMTMzNiAyNi4yMDM3QzMyLjQ1NDEgMjUuNDAyMyAzMi40NTQxIDI0LjY4MTIgMzIuMTMzNiAyNC4xMjAyQzMxLjg5MzIgMjMuNzk5NyAzMS40MTIzIDIzLjIzODcgMzAuMjEwMyAyMy4yMzg3SDI3LjQ4NThIMjQuNjAxVjIyLjAzNjdDMjQuNjAxIDIxLjk1NjYgMjQuNjAxIDIxLjg3NjUgMjQuNjAxIDIxLjc5NjNDMjQuNjAxIDIxLjM5NTcgMjQuNjAxIDIwLjk5NSAyNC42MDEgMjAuNDM0MVYxOC43NTEzQzI0LjYwMSAxOC41OTEgMjQuNjAxIDE4LjQzMDcgMjQuNjAxIDE4LjI3MDRDMjQuNjAxIDE3Ljk0OTkgMjQuNjgxMSAxNy43MDk1IDI1LjE2MTkgMTcuNDY5MUMyNS40ODI1IDE3LjMwODggMjUuODAzIDE3LjMwODkgMjYuNDQ0MSAxNy41NDkzQzI4LjQ0NzQgMTguMjcwNSAzMC42OTEyIDE3LjcwOTUgMzEuOTczMyAxNi4wMjY3QzMzLjE3NTMgMTQuNDI0IDMzLjE3NTMgMTIuMTAwMiAzMS45NzMzIDEwLjQ5NzVDMzAuNjkxMiA4LjgxNDcyIDI4LjYwNzcgOC4xNzM2MyAyNi41MjQyIDguOTc0OTdDMjYuMjAzNyA5LjA1NTEgMjUuOTYzMyA5LjEzNTIzIDI1LjY0MjcgOS4yMTUzNkMyNS40MDIzIDkuMjE1MzYgMjUuMTYxOSA5LjEzNTI0IDI0LjkyMTUgOC45NzQ5N0MyNC42ODExIDguODE0NyAyNC42MDEgOC40OTQxNSAyNC42MDEgOC4yNTM3NVYwLjI0MDM5MUg0LjA4NjgxQzEuODQzMDcgMC4yNDAzOTEgMCAyLjA4MzQ5IDAgNC4zMjcyM1YyMC41MTQySDEuNjAyNjdWNC4zMjcyM0MxLjYwMjY3IDIuOTY0OTYgMi43MjQ1NCAxLjc2Mjk1IDQuMTY2OTQgMS43NjI5NUgyMy4yMzg3VjguMTczNjNDMjMuMjM4NyA4Ljg5NDgzIDIzLjU1OTMgOS42MTYwNiAyNC4xMjAyIDEwLjA5NjlDMjQuNjgxMSAxMC41Nzc3IDI1LjMyMjIgMTAuODE4IDI2LjA0MzQgMTAuNzM3OUMyNi40NDQxIDEwLjY1NzggMjYuODQ0NyAxMC41Nzc2IDI3LjI0NTQgMTAuNDE3NEMyOC42ODc4IDkuOTM2NTYgMzAuMDUwMSAxMC4yNTcxIDMwLjg1MTQgMTEuMzc5QzMxLjY1MjggMTIuNDIwNyAzMS42NTI4IDEzLjk0MzIgMzAuODUxNCAxNC45ODVDMjkuOTY5OSAxNi4xMDY5IDI4LjUyNzUgMTYuNTA3NSAyNy4xNjUzIDE2LjAyNjdDMjYuNDQ0MSAxNS43MDYyIDI1LjQ4MjUgMTUuNTQ1OSAyNC42MDEgMTYuMDI2N0MyMy42Mzk0IDE2LjUwNzUgMjMuMTU4NiAxNy4zMDg4IDIzLjE1ODYgMTguMjcwNEMyMy4xNTg2IDE5LjMxMjIgMjMuMTU4NiAyMC4xOTM3IDIzLjE1ODYgMjAuODM0N0MyMy4xNTg2IDIxLjcxNjIgMjMuMTU4NiAyMi43NTc5IDIzLjE1ODYgMjIuODM4MVYyMy4zMTg5SDE3LjcwOTVDMTcuMzA4OCAyMy4zMTg5IDE3LjE0ODYgMjMuMjM4OCAxNy4xNDg2IDIzLjE1ODZDMTcuMTQ4NiAyMy4wNzg1IDE3LjA2ODQgMjIuOTE4MiAxNy4yMjg3IDIyLjU5NzdDMTguMTEwMiAyMC42NzQ1IDE3LjQ2OTEgMTguNDMwNyAxNS43ODYzIDE3LjE0ODZDMTQuMTAzNSAxNS44NjY1IDExLjYxOTQgMTUuOTQ2NiAxMC4wMTY3IDE3LjMwODlDOC4zMzM4OSAxOC42NzExIDcuODUzMDkgMjEuMDc1MiA4LjgxNDY5IDIyLjkxODJDOC44OTQ4MiAyMi45OTg0IDguODk0ODIgMjMuMDc4NSA4LjgxNDY5IDIzLjE1ODZDOC42NTQ0MiAyMy4yMzg4IDguNDE0MDIgMjMuMzE4OSA4LjE3MzYyIDIzLjMxODlDNi40OTA4MiAyMy4zMTg5IDQuODA4MDEgMjMuMzE4OSAzLjEyNTIxIDIzLjMxODlIMC4wODAxMzMxVjQzLjkxMzJDMC4wODAxMzMxIDQ2LjE1NjkgMS45MjMyIDQ4IDQuMTY2OTQgNDhIMjAuMzUzOVY0Ni4zOTc0SDQuMDA2NjhDMi42NDQ0MSA0Ni4zOTc0IDEuNDQyNCA0NS4yNzU1IDEuNDQyNCA0My44MzMxVjI0Ljc2MTNIMi44ODQ4MUM0LjU2NzYxIDI0Ljc2MTMgNi4yNTA0MiAyNC43NjEzIDguMDEzMzYgMjQuNzYxM0M4LjQ5NDE2IDI0Ljc2MTMgOC45NzQ5NiAyNC42ODExIDkuMzc1NjIgMjQuNDQwN0M5Ljc3NjI5IDI0LjI4MDUgMTAuMDk2OCAyMy44Nzk4IDEwLjI1NzEgMjMuNDc5MUMxMC40MTc0IDIyLjk5ODMgMTAuMzM3MiAyMi41MTc1IDEwLjA5NjggMjIuMDM2N0M5LjQ1NTc2IDIwLjgzNDcgOS43NzYyOSAxOS4zMTIyIDEwLjg5ODIgMTguMzUwNkMxMS45Mzk5IDE3LjQ2OTEgMTMuNTQyNiAxNy4zODkgMTQuNzQ0NiAxOC4yNzA0QzE1Ljg2NjQgMTkuMDcxOCAxNi4yNjcxIDIwLjUxNDIgMTUuNzA2MiAyMS43OTYzQzE1LjM4NTYgMjIuNTk3NyAxNS4zODU2IDIzLjMxODkgMTUuNzA2MiAyMy44Nzk4QzE1Ljk0NjYgMjQuMjAwMyAxNi40Mjc0IDI0Ljc2MTMgMTcuNjI5NCAyNC43NjEzSDIzLjA3ODVWMzEuMjUyMUMyMy4wNzg1IDMxLjQxMjQgMjMuMDc4NSAzMS42NTI4IDIyLjk5ODMgMzEuODEzQzIyLjkxODIgMzEuOTczMyAyMi45MTgyIDMyLjEzMzYgMjIuODM4MSAzMi4xMzM2QzIyLjc1NzkgMzIuMTMzNiAyMi42Nzc4IDMyLjEzMzYgMjIuNDM3NCAzMi4wNTM0QzIxLjQ3NTggMzEuNTcyNiAyMC41MTQyIDMxLjQ5MjUgMTkuNTUyNiAzMS43MzI5QzE3LjQ2OTEgMzIuMjEzNyAxNi4xMDY4IDMzLjczNjIgMTUuODY2NCAzNS45OEMxNS43MDYyIDM3LjI2MjEgMTYuMTg3IDM4LjYyNDQgMTcuMTQ4NiAzOS41MDU4QzE4Ljc1MTMgNDEuMDI4NCAyMC41OTQzIDQxLjM0ODkgMjIuNTE3NSA0MC40Njc0QzIyLjc1NzkgNDAuMzg3MyAyMi43NTc5IDQwLjQ2NzQgMjIuNzU3OSA0MC40Njc0QzIyLjgzODEgNDAuNjI3NyAyMi45MTgyIDQwLjk0ODMgMjIuOTE4MiA0MS4xODg3QzIyLjkxODIgNDIuNTUwOSAyMi45MTgyIDQzLjkxMzIgMjIuOTE4MiA0NS4yNzU1VjQ4SDQzLjU5MjdDNDUuODM2NCA0OCA0Ny42Nzk1IDQ2LjE1NjkgNDcuNjc5NSA0My45MTMyVjI3LjcyNjJINDYuMDc2OFY0My45MTMyQzQ2LjA3NjggNDUuMjc1NSA0NC45NTQ5IDQ2LjQ3NzUgNDMuNTEyNSA0Ni40Nzc1SDI0LjYwMVY0NS4zNTU2QzI0LjYwMSA0My45OTM0IDI0LjYwMSA0Mi42MzExIDI0LjYwMSA0MS4yNjg4QzI0LjYwMSA0MC43ODggMjQuNDQwNyA0MC4zMDcyIDI0LjI4MDUgMzkuOTA2NUMyMy44Nzk4IDM5LjAyNSAyMi44MzgxIDM4LjcwNDUgMjEuODc2NSAzOS4xODUzQzIwLjU5NDMgMzkuODI2NCAxOS4zOTIzIDM5LjU4NiAxOC4yNzA1IDM4LjU0NDNDMTcuNzA5NSAzNy45ODMzIDE3LjM4OSAzNy4xMDE4IDE3LjQ2OTEgMzYuMzAwNUMxNy42Mjk0IDM0Ljc3OCAxOC40MzA3IDMzLjgxNjQgMTkuODczMSAzMy40OTU4QzIwLjQzNDEgMzMuMzM1NSAyMS4wNzUxIDMzLjQxNTcgMjEuNjM2MSAzMy43MzYzQzIyLjI3NzEgMzQuMDU2OCAyMi44MzgxIDM0LjA1NjggMjMuMzk5IDMzLjgxNjRDMjMuODc5OCAzMy41NzYgMjQuMjgwNSAzMy4wOTUyIDI0LjQ0MDcgMzIuNDU0MUMyNC41MjA5IDMyLjEzMzYgMjQuNTIwOSAzMS44MTMgMjQuNTIwOSAzMS41NzI2VjI1LjA4MThIMjkuNzI5NUgzMC4xMzAyQzMwLjUzMDkgMjUuMDgxOCAzMC42OTEyIDI1LjE2MTkgMzAuNjkxMiAyNS4yNDIxQzMwLjY5MTIgMjUuMzIyMiAzMC43NzEzIDI1LjQ4MjUgMzAuNjExIDI1LjgwM0MyOS43Mjk1IDI3LjcyNjIgMzAuMzcwNiAyOS45Njk5IDMyLjA1MzQgMzEuMjUyMUMzMi44NTQ4IDMxLjg5MzIgMzMuODk2NSAzMi4yMTM3IDM0Ljg1ODEgMzIuMjEzN0MzNS44OTk4IDMyLjIxMzcgMzcuMDIxNyAzMS44OTMyIDM3LjgyMyAzMS4xNzJDMzkuNTA1OCAyOS44MDk3IDM5Ljk4NjYgMjcuNDA1NyAzOS4wMjUgMjUuNTYyNkMzOC45NDQ5IDI1LjQ4MjUgMzguOTQ0OSAyNS40MDI0IDM5LjAyNSAyNS4zMjIyQzM5LjM0NTYgMjQuNzYxMyAzOS41ODYgMjQuNjgxMSAzOS44MjY0IDI0LjY4MTFaXCJcbiAgfVxuKSB9KSwgbFggPSAoKSA9PiAvKiBAX19QVVJFX18gKi8gYyhcInN2Z1wiLCB7IHZpZXdCb3g6IFwiMCAwIDQ4IDQ4XCIsIGZpbGw6IFwibm9uZVwiLCB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLCBjaGlsZHJlbjogLyogQF9fUFVSRV9fICovIGMoXG4gIFwicGF0aFwiLFxuICB7XG4gICAgZmlsbDogXCJjdXJyZW50Q29sb3JcIixcbiAgICBkOiBcIk0zMi40MzYgMjkuNTc3N1YyMC42ODM5SDI0LjM5MjRWMTQuNTM2OEwyOC44MzkyIDE3LjgwNjVMMjkuODIwMiAxNy4wODcyTDI3Ljk4OTEgMTEuMzk3OEwzMi44MjgzIDcuODY2NDlMMzIuNDM2IDYuNjg5MzdIMjYuNDE5NkwyNC41ODg2IDFIMjMuMzQ2MUwyMS41MTUgNi42ODkzN0gxNS40OTg2TDE1LjEwNjMgNy44NjY0OUwxOS45NDU1IDExLjM5NzhMMTguMTE0NSAxNy4wODcyTDE5LjA5NTQgMTcuODA2NUwyMy4wODQ1IDE0LjkyOTJWMjAuNjgzOUgxNS41NjRWMzIuOTEyOEgwVjQ2LjQ0OTZIMTUuNTY0SDE2Ljg3MTlIMzEuMTI4MUgzMi40MzZINDhWMjkuNTc3N0gzMi40MzZaTTIxLjI1MzQgMTEuNTk0QzIxLjM4NDIgMTEuMTM2MiAyMS4yNTM0IDEwLjY3ODUgMjAuODYxIDEwLjQxNjlMMTcuNDYwNSA3LjkzMTg4SDIxLjY0NThDMjIuMTAzNSA3LjkzMTg4IDIyLjQ5NTkgNy42NzAzIDIyLjYyNjcgNy4yMTI1M0wyMy45MzQ2IDMuMjIzNDNMMjUuMjQyNSA3LjIxMjUzQzI1LjM3MzMgNy42NzAzIDI1Ljc2NTcgNy45MzE4OCAyNi4yMjM0IDcuOTMxODhIMzAuNDA4N0wyNy4wMDgyIDEwLjQxNjlDMjYuNjE1OCAxMC42Nzg1IDI2LjQ4NSAxMS4xMzYyIDI2LjYxNTggMTEuNTk0TDI3LjkyMzcgMTUuNTgzMUwyNC41MjMyIDEzLjA5ODFDMjQuMTMwOCAxMi44MzY1IDIzLjY3MyAxMi44MzY1IDIzLjI4MDcgMTMuMDk4MUwxOS44ODAxIDE1LjU4MzFMMjEuMjUzNCAxMS41OTRaTTE1LjU2NCA0NS4xNDE3SDEuMzA3OVYzNC4yMjA3SDE1LjU2NFY0NS4xNDE3Wk0zMS4xMjgxIDQ1LjE0MTdIMTYuODcxOVYzMi45MTI4VjIxLjk5MThIMzEuMTI4MVYyOS41Nzc3VjQ1LjE0MTdaTTQ2LjY5MjEgNDUuMTQxN0gzMi40MzZWMzAuODg1Nkg0Ni42OTIxVjQ1LjE0MTdaXCJcbiAgfVxuKSB9KSwgcFggPSAoKSA9PiAvKiBAX19QVVJFX18gKi8gYyhcInN2Z1wiLCB7IHZpZXdCb3g6IFwiMCAwIDQ4IDQ4XCIsIGZpbGw6IFwibm9uZVwiLCB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLCBjaGlsZHJlbjogLyogQF9fUFVSRV9fICovIGMoXG4gIFwicGF0aFwiLFxuICB7XG4gICAgZmlsbDogXCJjdXJyZW50Q29sb3JcIixcbiAgICBmaWxsUnVsZTogXCJldmVub2RkXCIsXG4gICAgY2xpcFJ1bGU6IFwiZXZlbm9kZFwiLFxuICAgIGQ6IFwiTTM2Ljk0NjkgMTEuNTg5NEMzNi4zMTUzIDExLjU4OTQgMzUuNjgzNyAxMS42NTI1IDM0Ljk4OSAxMS43Nzg4QzMzLjkxNTMgNi42NjMxMSAyOS40OTQ0IDMgMjQuMTg5MiAzQzE4Ljk0NzEgMyAxNC4zOTk4IDYuNzg5NDMgMTMuMzg5MyAxMS45MDUyQzEyLjU2ODMgMTEuNzE1NyAxMS44MTA0IDExLjU4OTQgMTEuMDUyNSAxMS41ODk0QzQuOTI2MjYgMTEuNTg5NCAwIDE2LjU3ODggMCAyMi42NDE5QzAgMjguMDczNCAzLjY2MzExIDMyLjc0NyA4LjM5OTg5IDMzLjM3ODZIMTAuMTA1MVYzMi4xMTU0SDguNDYzMDNDNC40MjA5OCAzMS42MTAyIDEuMjYzMTQgMjcuNDQxOCAxLjI2MzE0IDIyLjY0MTlDMS4yNjMxNCAxNy4yMTA0IDUuNjg0MTIgMTIuNzg5NCAxMS4xMTU2IDEyLjc4OTRDMTEuOTM2NyAxMi43ODk0IDEyLjgyMDkgMTIuOTE1NyAxMy43NjgyIDEzLjIzMTVMMTQuNDYzIDEzLjQyMDlMMTQuNTg5MyAxMi43MjYyQzE1LjI4NCA3Ljg2MzA5IDE5LjQ1MjQgNC4yNjMxNCAyNC4yNTIzIDQuMjYzMTRDMjkuMTE1NCA0LjI2MzE0IDMzLjIyMDYgNy43OTk5MyAzMy45MTU0IDEyLjY2M0wzNC4wNDE3IDEzLjM1NzhMMzQuNzM2NCAxMy4xNjgzQzM1LjU1NzUgMTIuOTc4OCAzNi4zMTUzIDEyLjg1MjUgMzcuMDczMiAxMi44NTI1QzQyLjUwNDcgMTIuODUyNSA0Ni45MjU3IDE3LjI3MzUgNDYuOTI1NyAyMi43MDVDNDYuOTI1NyAyNy41MDUgNDMuNzY3OSAzMS42MTAyIDM5LjY2MjcgMzIuMTc4NkgzOC4wODM3VjMzLjQ0MTdIMzkuNTk5NUM0NC4zOTk1IDMyLjc0NyA0Ny45OTk0IDI4LjEzNjUgNDcuOTk5NCAyMi43MDVDNDguMDYyNiAxNi41Nzg4IDQzLjA3MzIgMTEuNTg5NCAzNi45NDY5IDExLjU4OTRaTTMyLjQ2MjcgMjQuMjg0QzMwLjE4OTEgMjIuMDEwNCAyNy4yMjA3IDIwLjc0NzIgMjMuOTk5NyAyMC43NDcyVjIyLjAxMDRDMjYuODQxOCAyMi4wMTA0IDI5LjU1NzUgMjMuMTQ3MiAzMS41Nzg2IDI1LjE2ODJDMzMuNTk5NiAyNy4xODkyIDM0LjczNjQgMjkuOTA1IDM0LjczNjQgMzIuNzQ3MUMzNC43MzY0IDM1LjU4OTEgMzMuNTk5NiAzOC4zMDQ5IDMxLjU3ODYgNDAuMzI1OUwzMS4xMzY1IDQwLjc2OEwzMi42NTIyIDQyLjI4MzhMMjcuNTM2NSA0My4wNDE3TDI4LjI5NDQgMzcuOTI1OUwyOS40OTQ0IDM5LjEyNTlMMjkuOTM2NSAzOC42ODM4QzMxLjUxNTQgMzcuMTA0OSAzMi4zOTk2IDM1LjAyMDcgMzIuMzk5NiAzMi43NDcxQzMyLjM5OTYgMzAuNTM2NiAzMS41MTU0IDI4LjM4OTIgMjkuOTM2NSAyNi44MTAzQzI4LjM1NzUgMjUuMjMxNCAyNi4yNzM0IDI0LjM0NzIgMjMuOTk5NyAyNC4zNDcyVjI1LjYxMDNDMjUuODk0NCAyNS42MTAzIDI3LjY2MjggMjYuMzY4MiAyOS4wNTIzIDI3LjY5NDVDMzAuMzc4NiAyOS4wMjA4IDMxLjEzNjUgMzAuODUyNCAzMS4xMzY1IDMyLjc0NzFDMzEuMTM2NSAzNC40NTIzIDMwLjU2ODEgMzYuMDMxMiAyOS40OTQ0IDM3LjI5NDRMMjcuNDczMyAzNS4yNzMzTDI2LjE0NyA0NC40OTQzTDM1LjM2OCA0My4xNjhMMzIuOTY4IDQwLjc2OEMzNC45ODkxIDM4LjU1NzUgMzYuMDYyNyAzNS43Nzg2IDM2LjA2MjcgMzIuNzQ3MUMzNS45MzY0IDI5LjU4OTIgMzQuNzM2NCAyNi41NTc3IDMyLjQ2MjcgMjQuMjg0Wk0xOC41MDUgMjguMTk5N0MxNy40MzE0IDI5LjQ2MjggMTYuODYzIDMxLjA0MTggMTYuODYzIDMyLjc0N0MxNi44NjMgMzQuNjQxNyAxNy42MjA4IDM2LjQ3MzMgMTguODg0IDM3Ljc5OTZDMjAuMjczNCAzOS4xMjU5IDIyLjA0MTggMzkuODgzOCAyMy45MzY1IDM5Ljg4MzhWNDEuMTQ2OUMyMS42NjI5IDQxLjE0NjkgMTkuNTc4NyA0MC4yNjI3IDE3Ljk5OTggMzguNjgzOEMxNi40MjA4IDM3LjEwNDggMTUuNTM2NiAzNC45NTc1IDE1LjUzNjYgMzIuNzQ3QzE1LjUzNjYgMzAuNDczMyAxNi40MjA4IDI4LjM4OTIgMTcuOTk5OCAyNi44MTAyTDE4LjQ0MTkgMjYuMzY4MUwxOS42NDE4IDI3LjU2ODFMMjAuMzk5NyAyMi40NTI0TDE1LjI4NCAyMy4yMTAzTDE2Ljc5OTggMjQuNzI2TDE2LjM1NzcgMjUuMTY4MUMxNC4zMzY2IDI3LjE4OTIgMTMuMTk5OCAyOS45MDQ5IDEzLjE5OTggMzIuNzQ3QzEzLjE5OTggMzUuNTg5MSAxNC4zMzY2IDM4LjMwNDggMTYuMzU3NyA0MC4zMjU5QzE4LjM3ODcgNDIuMzQ2OSAyMS4wOTQ1IDQzLjQ4MzcgMjMuOTM2NSA0My40ODM3VjQ0Ljc0NjlDMjAuNzE1NSA0NC43NDY5IDE3Ljc0NzEgNDMuNDgzNyAxNS40NzM1IDQxLjIxMDFDMTMuMTk5OCAzOC45MzY0IDExLjkzNjcgMzUuOTY4IDExLjkzNjcgMzIuNzQ3QzExLjkzNjcgMjkuNzE1NSAxMy4wMTA0IDI2LjkzNjUgMTUuMDMxNCAyNC43MjZMMTIuNjMxNCAyMi4zMjYxTDIxLjg1MjMgMjAuOTk5OEwyMC41MjYxIDMwLjIyMDdMMTguNTA1IDI4LjE5OTdaXCJcbiAgfVxuKSB9KSwgZFggPSAoKSA9PiAvKiBAX19QVVJFX18gKi8gYyhcInN2Z1wiLCB7IHZpZXdCb3g6IFwiMCAwIDQ4IDQ4XCIsIGZpbGw6IFwibm9uZVwiLCB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLCBjaGlsZHJlbjogLyogQF9fUFVSRV9fICovIGMoXG4gIFwicGF0aFwiLFxuICB7XG4gICAgZmlsbDogXCJjdXJyZW50Q29sb3JcIixcbiAgICBmaWxsUnVsZTogXCJldmVub2RkXCIsXG4gICAgY2xpcFJ1bGU6IFwiZXZlbm9kZFwiLFxuICAgIGQ6IFwiTTQ3Ljk3NDcgMi45MDM2OVYyLjAyNDE5QzQ3Ljg5NDcgMC45MDQ4NDMgNDcuMDk1MiAwLjEwNTMwOCA0NS45NzU4IDAuMDI1MzU0M0g0NS4wOTYzQzM3Ljk4MDUgLTAuMjk0NDYgMzEuMDI0NSAyLjQyMzk3IDI1Ljk4NzQgNy40NjEwNUwyNS44Mjc1IDcuNjIwOTRDMjMuMTg5IDEwLjAxOTUgMTkuOTEwOSAxMS4wNTg5IDE2LjA3MzIgMTAuODk5QzEwLjMxNjUgMTAuNTc5MiA0Ljc5OTczIDEyLjU3ODEgMC44ODIwMDcgMTYuNDk1OEwwLjMyMjMyMiAxNy4wNTU1TDguMzE3NzIgMjUuMDUwOEw2Ljc5ODU5IDI2LjU2OTlDNS44MzkxNSAyNy41Mjk0IDUuODM5MTUgMjkuMDQ4NSA2Ljc5ODU5IDMwLjAwNzlMNy45OTc4OSAzMS4yMDcyTDQuODc5NjggMzMuMjA2MUw0Ljg3OTY2IDMzLjIwNjFDNC43MTk3NiAzMy4zNjYgNC41NTk4NSAzMy41MjU5IDQuNTU5ODUgMzMuNzY1OEM0LjU1OTg1IDM0LjAwNTYgNC42Mzk4NCAzNC4yNDU1IDQuNzk5NzUgMzQuNDA1NEw2Ljk1ODQ2IDM2LjU2NDFMMy4xMjA3IDQwLjQwMTlMNC4yNDAwNiA0MS41MjEyTDguMDc3ODIgMzcuNjgzNUwxMC4xNTY2IDM5Ljc2MjNMNC43MTk3NyA0NS4xOTkxTDUuODM5MDkgNDYuMzE4NEwxMS4yNzYgNDAuODgxNkwxMy40MzQ3IDQzLjA0MDRDMTMuNTk0NiA0My4yMDAzIDEzLjc1NDUgNDMuMjgwMiAxMy45OTQ0IDQzLjI4MDJIMTQuMDc0M0MxNC4zMTQyIDQzLjI4MDIgMTQuNTU0IDQzLjEyMDMgMTQuNjM0IDQyLjk2MDRMMTYuNjMyOCAzOS44NDIyTDE3LjgzMjEgNDEuMDQxNUMxOC4zMTE4IDQxLjUyMTMgMTguOTUxNSA0MS43NjExIDE5LjU5MTIgNDEuNzYxMUMyMC4yMzA4IDQxLjc2MTEgMjAuODcwNCA0MS41MjEzIDIxLjM1MDEgNDEuMDQxNUwyMi44NjkyIDM5LjUyMjRMMzAuMzA0OSA0Ni45NTgxTDMwLjk0NDUgNDcuNDM3OEwzMS41MDQyIDQ2Ljg3ODFDMzUuMzQyIDQzLjA0MDQgMzcuMzQwOCAzNy41MjM2IDM3LjAyMSAzMS43NjY5QzM2Ljc4MTEgMjcuOTI5MSAzNy45MDA1IDI0LjY1MSA0MC4yOTkxIDIyLjAxMjZMNDAuNDU5IDIxLjg1MjdDNDUuNTc2IDE2Ljg5NTYgNDguMjk0NSA5LjkzOTYgNDcuOTc0NyAyLjkwMzY5Wk0yLjU2MTAxIDE2Ljk3NTVDNi4wNzg5NyAxMy43Nzc0IDEwLjg3NjIgMTIuMDk4MyAxNS45OTMyIDEyLjMzODJDMTcuOTkyMSAxMi40MTgxIDE5LjkxMSAxMi4xNzgzIDIxLjU5IDExLjY5ODZMOS40MzcgMjMuODUxNUwyLjU2MTAxIDE2Ljk3NTVaTTEzLjk5NDQgNDEuMjgxNEw2LjcxODY1IDM0LjAwNTZMOS4yNzcxMyAzMi4zMjY2TDE1LjY3MzQgMzguNzIyOUwxMy45OTQ0IDQxLjI4MTRaTTM1LjU4MTkgMzEuOTI2OEMzNS44MjE3IDM2Ljk2MzkgMzQuMjIyNiA0MS44NDExIDMwLjk0NDUgNDUuMzU5TDI0LjA2ODUgMzguNDgzTDM2LjIyMTQgMjYuMzMwMUMzNS43NDE3IDI4LjAwOTEgMzUuNTAxOSAyOS44NDggMzUuNTgxOSAzMS45MjY4Wk0zOS44MTkzIDIwLjQxMzVDMzkuNzM5NCAyMC40OTM1IDM5LjY1OTQgMjAuNTkzNCAzOS41Nzk1IDIwLjY5MzNDMzkuNDk5NSAyMC43OTMzIDM5LjQxOTYgMjAuODkzMiAzOS4zMzk2IDIwLjk3MzJMMjAuMzkwNyAzOS45MjIyQzIwLjA3MDkgNDAuMjQyIDE5LjUxMTIgNDAuMjQyIDE5LjE5MTQgMzkuOTIyMkw4LjA3NzgyIDI4LjgwODZDNy45MTc5MiAyOC42NDg3IDcuODM3OTIgMjguNDA4OSA3LjgzNzkyIDI4LjE2OUM3LjgzNzkyIDI3LjkyOTEgNy45MTc5MiAyNy42ODkzIDguMDc3ODIgMjcuNTI5NEwyNy4wMjY4IDguNTgwMzlDMjcuMTA2NyA4LjUwMDQ0IDI3LjIwNjcgOC40MjA0OSAyNy4zMDY2IDguMzQwNTRMMjcuMzA2NiA4LjM0MDUzTDI3LjMwNjcgOC4zNDA1MkMyNy40MDY2IDguMjYwNTYgMjcuNTA2NiA4LjE4MDYyIDI3LjU4NjUgOC4xMDA2N0MzMS45ODM5IDMuODYzMTMgMzcuOTAwNSAxLjQ2NDUzIDQ0LjA1NjkgMS40NjQ1M0g0NS4wOTYzSDQ1Ljk3NThDNDYuMjE1NyAxLjQ2NDUzIDQ2LjQ1NTUgMS43MDQzNyA0Ni40NTU1IDEuOTQ0MjNWMi44MjM3M0M0Ni42OTU0IDkuMzc5OTIgNDQuMjk2NyAxNS43NzYyIDM5LjgxOTMgMjAuNDEzNVpNMzAuMTQ1IDEwLjczOUMyOS4xODU1IDExLjY5ODUgMjguNzA1OSAxMi45Nzc3IDI4LjcwNTkgMTQuMjU3QzI4LjcwNTkgMTUuNjE2MiAyOS4yNjU1IDE2LjgxNTUgMzAuMTQ1IDE3Ljc3NUMzMS4xMDQ0IDE4LjczNDQgMzIuMzgzNyAxOS4yMTQxIDMzLjY2MyAxOS4yMTQxQzM0Ljk0MjIgMTkuMjE0MSAzNi4yMjE1IDE4LjczNDQgMzcuMTgwOSAxNy43NzVDMzkuMDk5OCAxNS44NTYxIDM5LjA5OTggMTIuNjU3OSAzNy4xODA5IDEwLjczOUMzNS4zNDIgOC44MjAxNSAzMS45ODM5IDguODIwMTUgMzAuMTQ1IDEwLjczOVpNMzYuMDYxNiAxNi42NTU2QzM0LjcwMjQgMTguMDE0OCAzMi41NDM2IDE4LjAxNDggMzEuMTg0NCAxNi42NTU2QzMwLjU0NDggMTYuMDE2IDMwLjE0NSAxNS4xMzY1IDMwLjE0NSAxNC4yNTdDMzAuMTQ1IDEzLjM3NzUgMzAuNDY0OCAxMi40OTggMzEuMTg0NCAxMS44NTg0QzMxLjgyNCAxMS4yMTg4IDMyLjcwMzUgMTAuODE5IDMzLjU4MyAxMC44MTlDMzQuNDYyNSAxMC44MTkgMzUuMzQyIDExLjEzODggMzUuOTgxNiAxMS44NTg0QzM3LjQyMDggMTMuMjE3NiAzNy40MjA4IDE1LjM3NjQgMzYuMDYxNiAxNi42NTU2Wk0wIDQzLjYwMzhMMS41ODMyIDQyLjAyMUwyLjcxMzc0IDQzLjE1MTlMMS4xMzA1NCA0NC43MzQ2TDAgNDMuNjAzOFpcIlxuICB9XG4pIH0pLCBiWCA9ICgpID0+IC8qIEBfX1BVUkVfXyAqLyBjKFwic3ZnXCIsIHsgdmlld0JveDogXCIwIDAgNDggNDhcIiwgZmlsbDogXCJub25lXCIsIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsIGNoaWxkcmVuOiAvKiBAX19QVVJFX18gKi8gYyhcbiAgXCJwYXRoXCIsXG4gIHtcbiAgICBmaWxsOiBcImN1cnJlbnRDb2xvclwiLFxuICAgIGZpbGxSdWxlOiBcImV2ZW5vZGRcIixcbiAgICBjbGlwUnVsZTogXCJldmVub2RkXCIsXG4gICAgZDogXCJNNDAuOTk1NyAyLjMwMTgzQzQxLjA2MzQgMS4wMTU1MSA0Mi4wNzkgMCA0My4yOTc2IDBDNDQuNTE2MiAwIDQ1LjU5OTQgMS4wODMyMiA0NS4zOTYzIDIuMzY5NTNWNy42NTAyMUM0NS4zOTYzIDEyLjI1MzkgNDMuMDI2NyAxNi41MTkgMzkuMTAwMSAxOC45NTYzQzM4LjQ5MDggMTkuMjk0OCAzOC4wODQ2IDE5Ljk3MTggMzguMDg0NiAyMC43MTY1VjQ2LjUxMDZWNDYuNzgxNEg0MC4xODM0VjQ4SDM2LjU5NTJIMzMuNDEzM0gzMi44MDM5SDI5LjAxMjdIMjMuODY3NEgyMC40MTQ2SDE5LjgwNTNIMTYuOTYxOUgxMi4zNTgySDkuMjQzOTdIOC42MzQ2NEg2LjEyOTc0SDIuNjA5MzNWNDYuNzgxNEg0Ljc3NTcyVjQ2LjY0NlYzNC42NjI5TDQuNzc1NTggMzQuNjYyOUM0LjUwNDgyIDM0LjczMDYgNC4yMzQxIDM0Ljc5ODMgMy45NjMzNCAzNC43OTgzQzIuODgwMTMgMzQuNzk4MyAyIDMzLjkxODIgMiAzMi44MzVWMjUuNzI2NEMyIDIyLjU0NDQgNC41NzI2NCAxOS45NzE4IDcuNzU0NTggMTkuOTcxOEgxMC41OThIMTAuNTk4QzEwLjg2ODggMTkuOTcxOCAxMS4xMzk3IDE5Ljk3MTggMTEuNDEwNSAyMC4wMzk1QzExLjY4MTMgMjAuMDM5NSAxMS44ODQ0IDIwLjEwNzIgMTIuMDg3NSAyMC4xNzQ5TDExLjYxMzUgMjEuMjU4MUgxMS40MTA1SDExLjI3NUMxMS4wMDQyIDIxLjE5MDQgMTAuODAxMSAyMS4xOTA0IDEwLjU5OCAyMS4xOTA0SDcuNzU0NThDNS4yNDk2NSAyMS4xOTA0IDMuMjE4NTcgMjMuMjIxNCAzLjIxODU3IDI1LjcyNjRWMzIuODM1QzMuMjE4NTcgMzMuMzA4OSAzLjU1NzE0IDMzLjY0NzQgMy45NjMzNCAzMy42NDc0QzQuNDM3MjUgMzMuNjQ3NCA0Ljc3NTcyIDMzLjI0MTIgNC43NzU3MiAzMi44MzVWMjcuMzUxMlYyNS41OTFINS45OTQzN1YyNy4zNTEyVjMyLjgzNVY0Ni42NDZDNS45OTQzNyA0Ni43MTM3IDYuMDYyMDQgNDYuNzgxNCA2LjEyOTc0IDQ2Ljc4MTRIOC42MzQ2NFYzMi44MzVIOS44NTMzVjQ2LjcxMzdIMTIuMzU4MkMxMi40MjU5IDQ2LjcxMzcgMTIuNDkzNiA0Ni42NDYgMTIuNDkzNiA0Ni41NzgzVjM0LjMyNDRIMTMuNzEyMlY0Ni43MTM3VjQ2Ljg0OTFIMTUuNjA3OVY0Ni42NDZWMzMuMjQxMkMxNS4zMzcxIDMzLjM3NjYgMTQuOTk4NiAzMy40NDQzIDE0LjY2IDMzLjQ0NDNDMTMuNDQxNCAzMy40NDQzIDEyLjQ5MzYgMzIuNDI4OCAxMi40OTM2IDMxLjI3NzhWMjMuMzU2OEMxMi40OTM2IDE5LjgzNjQgMTUuMzM3MSAxNi45OTI5IDE4Ljg1NzYgMTYuOTkyOUgyMi4wMzk1QzIyLjMxMDMgMTYuOTkyOSAyMi42NDg4IDE2Ljk5MjkgMjIuOTE5NiAxNy4wNjA2QzIzLjE5MDQgMTcuMDYwNiAyMy4zOTM1IDE3LjEyODMgMjMuNTk2NiAxNy4xOTZMMjMuMTIyNyAxOC4yNzkzQzIzLjEyMjcgMTguMjExNiAyMi45ODczIDE4LjIxMTYgMjIuOTE5NiAxOC4yMTE2SDIyLjc4NDJDMjIuNTEzNCAxOC4xNDM5IDIyLjMxMDMgMTguMTQzOSAyMi4wMzk1IDE4LjE0MzlIMTguODU3NkMxNi4wMTQxIDE4LjE0MzkgMTMuNzEyMiAyMC40NDU3IDEzLjcxMjIgMjMuMjg5MVYzMS4yMTAxQzEzLjcxMjIgMzEuNzUxOCAxNC4xMTg0IDMyLjE1OCAxNC42NiAzMi4xNThDMTUuMjAxNyAzMi4xNTggMTUuNjA3OSAzMS43NTE4IDE1LjYwNzkgMzEuMjEwMVYyNS4xMTcxVjIzLjE1MzdIMTYuODI2NVYyNS4xMTcxVjMxLjIxMDFWNDYuNTEwNkMxNi44MjY1IDQ2LjY0NiAxNi44OTQyIDQ2LjcxMzcgMTcuMDI5NiA0Ni43MTM3SDE5Ljg3MzFWMzEuMjEwMUgyMS4wOTE2VjQ2LjcxMzdIMjMuOTM1MUMyNC4wNzA1IDQ2LjcxMzcgMjQuMTM4MiA0Ni42NDYgMjQuMTM4MiA0Ni41MTA2VjMyLjkwMjdIMjUuMzU2OFY0Ni41NzgzVjQ2Ljc4MTRIMjcuNjU4N1Y0Ni41MTA2VjMxLjY4NDFDMjcuMzIwMiAzMS44MTk1IDI2Ljk4MTYgMzEuOTU0OSAyNi41NzU0IDMxLjk1NDlDMjUuMjg5MSAzMS45NTQ5IDI0LjI3MzYgMzAuOTM5MyAyNC4yNzM2IDI5LjY1M1YyMC45ODczQzI0LjI3MzYgMTcuMTk2IDI3LjM4NzggMTQuMDgxOCAzMS4xNzkxIDE0LjA4MThIMzQuNjk5NUMzOC4xNTIzIDE0LjA4MTggNDAuOTk1NyAxMS4yMzg0IDQwLjk5NTcgNy43ODU2MVYyLjMwMTgzWk0zOC42MjYyIDE3Ljg3MzFDNDIuMjE0NCAxNS42Mzg5IDQ0LjM4MDggMTEuNzggNDQuMzgwOCA3LjU4MjUxVjIuMzY5NTNDNDQuMzgwOCAxLjc2MDIzIDQzLjkwNjkgMS4yMTg2MiA0My4yOTc2IDEuMjE4NjJDNDIuNjg4MyAxLjIxODYyIDQyLjIxNDQgMS43NjAyMyA0Mi4yMTQ0IDIuMzY5NTNWNy43ODU2MUM0Mi4yMTQ0IDExLjg0NzcgMzguODk3IDE1LjIzMjcgMzQuNzY3MyAxNS4yMzI3SDMxLjI0NjhDMjguMTMyNSAxNS4yMzI3IDI1LjU1OTkgMTcuODA1NCAyNS41NTk5IDIwLjkxOTZWMjkuNjUzQzI1LjU1OTkgMzAuMjYyMyAyNi4wMzM5IDMwLjczNjIgMjYuNjQzMiAzMC43MzYyQzI3LjI1MjUgMzAuNzM2MiAyNy43MjY0IDMwLjI2MjMgMjcuNzI2NCAyOS42NTNWMjMuMDE4M1YyMC45MTk2SDI4Ljk0NDlWMjMuMDE4M1YyOS42NTNWNDYuNTEwNkMyOC45NDQ5IDQ2LjY0NiAyOS4wODA0IDQ2Ljc4MTQgMjkuMjE1OCA0Ni43ODE0SDMyLjM5NzdWMjkuNjUzSDMzLjYxNjNWNDYuNzgxNEgzNi43OTgzQzM2LjkzMzcgNDYuNzgxNCAzNy4wNjkgNDYuNjQ2IDM3LjA2OSA0Ni41MTA2VjIwLjcxNjVDMzcuMDY5IDE5LjU2NTYgMzcuNjEwNyAxOC40ODI0IDM4LjYyNjIgMTcuODczMVpNMzMuMDA3IDEyLjU5MjNDMzUuNTExOSAxMi41OTIzIDM3LjQ3NTMgOS41NDU4IDM3LjQ3NTMgNi45NzMxN0MzNy40NzUzIDQuNTM1OTMgMzUuNDQ0MiAyLjUwNDkgMzMuMDA3IDIuNTA0OUMzMC41Njk3IDIuNTA0OSAyOC41Mzg3IDQuNTM1OTMgMjguNTM4NyA2Ljk3MzE3QzI4LjQ3MSA5LjQ3ODEgMzAuNTAyIDEyLjU5MjMgMzMuMDA3IDEyLjU5MjNaTTMzLjAwNyAzLjcyMzUyQzM0LjgzNDkgMy43MjM1MiAzNi4yNTY3IDUuMjEyOTQgMzYuMjU2NyA2Ljk3MzE3QzM2LjI1NjcgOC44Njg3OSAzNC42OTk1IDExLjM3MzcgMzMuMDA3IDExLjM3MzdDMzEuMzE0NSAxMS4zNzM3IDI5Ljc1NzQgOC44Njg3OSAyOS43NTc0IDYuOTczMTdDMjkuNjg5NyA1LjE0NTI0IDMxLjE3OTEgMy43MjM1MiAzMy4wMDcgMy43MjM1MlpNMjQuNzQ3NSAxMC41NjE0QzI0Ljc0NzUgMTIuODYzMiAyMi45MTk2IDE1LjcwNjYgMjAuNjE3OCAxNS43MDY2QzE4LjMxNTkgMTUuNzA2NiAxNi40ODggMTIuODYzMiAxNi40ODggMTAuNTYxNEMxNi40ODggOC4yNTk1MiAxOC4zMTU5IDYuNDMxNTkgMjAuNjE3OCA2LjQzMTU5QzIyLjkxOTYgNi40MzE1OSAyNC43NDc1IDguMjU5NTIgMjQuNzQ3NSAxMC41NjE0Wk0yMy41Mjg5IDEwLjU2MTRDMjMuNTI4OSA4LjkzNjUzIDIyLjI0MjYgNy42NTAyMSAyMC42MTc4IDcuNjUwMjFDMTguOTkyOSA3LjY1MDIxIDE3LjYzODkgOC45MzY1MyAxNy43MDY2IDEwLjU2MTRDMTcuNzA2NiAxMi4yNTM5IDE5LjEyODMgMTQuNDg4IDIwLjYxNzggMTQuNDg4QzIyLjEwNzIgMTQuNDg4IDIzLjUyODkgMTIuMjUzOSAyMy41Mjg5IDEwLjU2MTRaTTEzLjIzODMgMTQuMjg0OUMxMy4yMzgzIDE2LjM4MzYgMTEuNTQ1OCAxOC45NTYzIDkuNDQ3MTEgMTguOTU2M0M3LjM0ODM4IDE4Ljk1NjMgNS42NTU4NyAxNi4zODM2IDUuNjU1ODcgMTQuMjg0OUM1LjY1NTg3IDEyLjE4NjIgNy4zNDgzOCAxMC40OTM2IDkuNDQ3MTEgMTAuNDkzNkMxMS41NDU4IDEwLjQ5MzYgMTMuMjM4MyAxMi4xODYyIDEzLjIzODMgMTQuMjg0OVpNMTIuMDE5NyAxNC4yMTcyQzEyLjAxOTcgMTIuNzk1NSAxMC44Njg4IDExLjY0NDYgOS40NDcxMSAxMS42NDQ2QzguMDI1MzkgMTEuNjQ0NiA2Ljg3NDQ0IDEyLjc5NTUgNi44NzQ0NCAxNC4yMTcyQzYuODc0NDQgMTUuNzc0MyA4LjA5MzA5IDE3LjczNzcgOS40NDcxMSAxNy43Mzc3QzEwLjgwMTEgMTcuNzM3NyAxMi4wMTk3IDE1Ljc3NDMgMTIuMDE5NyAxNC4yMTcyWlwiXG4gIH1cbikgfSksIE1YID0gKCkgPT4gLyogQF9fUFVSRV9fICovIGMoXCJzdmdcIiwgeyB2aWV3Qm94OiBcIjAgMCA0OCA0OFwiLCBmaWxsOiBcIm5vbmVcIiwgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiwgY2hpbGRyZW46IC8qIEBfX1BVUkVfXyAqLyBjKFxuICBcInBhdGhcIixcbiAge1xuICAgIGZpbGw6IFwiY3VycmVudENvbG9yXCIsXG4gICAgZmlsbFJ1bGU6IFwiZXZlbm9kZFwiLFxuICAgIGNsaXBSdWxlOiBcImV2ZW5vZGRcIixcbiAgICBkOiBcIk00Mi4xMzMzIDBIMTEuNTgxVjEyLjcyMzhDMTEuMDQ3NiAxMy4xMDQ4IDEwLjU5MDUgMTMuNDg1NyAxMC4xMzMzIDEzLjk0MjhDNy44NDc2MSAxNi4yMjg2IDYuNjI4NTggMTkuMiA2LjYyODU4IDIyLjQ3NjJDNi42Mjg1OCAyNS40NDc2IDcuNjk1MjUgMjguMTkwNSA5LjY3NjIgMzAuNEw4IDMyLjA3NjJMNi42Mjg1OCAzMC43MDQ4TDAuNjA5NTE1IDM2LjcyMzhDMC4yMjg1NjIgMzcuMTA0OCAwIDM3LjYzODEgMCAzOC4yNDc2QzAgMzguNzgxIDAuMjI4NTYyIDM5LjMxNDMgMC42MDk1MTUgMzkuNzcxNEwxLjM3MTQyIDQwLjUzMzNDMS43NTIzNyA0MC45MTQzIDIuMjg1NzEgNDEuMTQyOSAyLjg5NTIzIDQxLjE0MjlDMy40Mjg1NiA0MS4xNDI5IDMuOTYxOSA0MC45MTQzIDQuNDE5MDQgNDAuNTMzM0wxMC40MzgxIDM0LjUxNDNMOS4wNjY2NCAzMy4xNDI5TDEwLjc0MjggMzEuNDY2N0wxMS42NTcxIDMyLjE1MjRWNDhINDYuODU3MVY0LjY0NzYyTDQyLjEzMzMgMFpNMy4yNzYxOCAzOS41NDI5QzMuMDQ3NjEgMzkuNzcxNCAyLjY2NjY4IDM5Ljc3MTQgMi40MzgxIDM5LjU0MjlMMS42NzYyIDM4Ljc4MUMxLjUyMzgyIDM4LjYyODYgMS41MjM4MSAzOC40NzYyIDEuNTIzODEgMzguMzIzOEMxLjUyMzgxIDM4LjE3MTUgMS41OTk5NyAzOC4wMTkxIDEuNjc2MTQgMzcuODY2OEwxLjY3NjIgMzcuODY2N0w2LjYyODU4IDMyLjkxNDNMOC4yMjg1NiAzNC41MTQzTDMuMjc2MTggMzkuNTQyOVpNNDEuOTgwOSAyLjA1NzE1TDQ0Ljk1MjQgNS4wMjg1OEg0MS45ODA5VjIuMDU3MTVaTTguMTUyMzkgMjIuNDc2MkM4LjE1MjM5IDE5LjY1NzEgOS4yMTkwNiAxNi45OTA1IDExLjIgMTUuMDA5NUMxMy4yNTcyIDEyLjk1MjQgMTUuOTIzOCAxMS45NjE5IDE4LjY2NjcgMTEuOTYxOUMyMS4zMzMzIDExLjk2MTkgMjQuMDc2MiAxMi45NTI0IDI2LjEzMzMgMTUuMDA5NUMzMC4yNDc2IDE5LjEyMzggMzAuMjQ3NiAyNS43NTI0IDI2LjEzMzMgMjkuODY2N0MyNC4xNTI0IDMxLjg0NzYgMjEuNDg1NyAzMi45MTQzIDE4LjY2NjcgMzIuOTE0M0MxNS44NDc2IDMyLjkxNDMgMTMuMTgxIDMxLjg0NzYgMTEuMiAyOS44NjY3QzkuMjE5MDYgMjcuOTYxOSA4LjE1MjM5IDI1LjI5NTIgOC4xNTIzOSAyMi40NzYyWk0xMy4xMDQ4IDQ2LjQ3NjJWMzMuMjE5QzE0Ljc4MSAzNC4xMzMzIDE2LjY4NTcgMzQuNTkwNSAxOC42NjY3IDM0LjU5MDVDMjEuODY2NyAzNC41OTA1IDI0LjkxNDMgMzMuMzcxNCAyNy4yIDMxLjA4NTdDMzEuOTIzOCAyNi4zNjE5IDMxLjkyMzggMTguNzQyOSAyNy4yIDE0LjA5NTJDMjMuMzkwNSAxMC4yODU3IDE3LjY3NjIgOS42MDAwMSAxMy4xMDQ4IDExLjk2MTlWMS41MjM4MUg0MC40NTcxVjYuNDc2MTlINDUuMjU3MVY0Ni40NzYySDEzLjEwNDhaTTQyLjU5MDUgMTUuODQ3N0gzMi42ODU3VjE3LjM3MTVINDIuNTkwNVYxNS44NDc3Wk0yOS42MzgxIDExLjU4MDlIMzQuMjA5NVYxMy4xMDQ3SDI5LjYzODFWMTEuNTgwOVpNNDIuNTkwNSAyNC4yMjg2SDMzLjY3NjJWMjUuNzUyNEg0Mi41OTA1VjI0LjIyODZaTTMzLjY3NjIgMjAuMDM4MUg0Mi41OTA1VjIxLjU2MTlIMzMuNjc2MlYyMC4wMzgxWk00Mi40MzgxIDMyLjY4NThIMjkuMTgwOVYzNC4yMDk2SDQyLjQzODFWMzIuNjg1OFpNMzEuOTIzOCAyOC40OTUzSDQyLjU5MDVWMzAuMDE5MkgzMS45MjM4VjI4LjQ5NTNaTTE1Ljg0NzYgNDIuNTkwNkgyMS41NjE5VjM2Ljg3NjNIMTUuODQ3NlY0Mi41OTA2Wk0xNy4yOTUyIDM4LjQwMDFIMjAuMDM4MVY0MS4xNDI5SDE3LjI5NTJWMzguNDAwMVpNMjQuMjI4NiA0MS4xNDI5SDQyLjQzODFWNDIuNjY2N0gyNC4yMjg2VjQxLjE0MjlaTTQyLjUxNDMgMzYuODc2M0gyNC4yMjg2VjM4LjQwMDFINDIuNTE0M1YzNi44NzYzWk0xNy44Mjg1IDI0LjAwMDFMMjIuNDc2MiAxOS4zNTI1TDIzLjU0MjggMjAuNDE5MUwxNy44Mjg1IDI2LjEzMzRMMTMuOTQyOCAyMi4xNzE1TDE1LjAwOTUgMjEuMTA0OUwxNy44Mjg1IDI0LjAwMDFaXCJcbiAgfVxuKSB9KSwgQVggPSAoKSA9PiAvKiBAX19QVVJFX18gKi8gYyhcInN2Z1wiLCB7IHZpZXdCb3g6IFwiMCAwIDQ4IDQ4XCIsIGZpbGw6IFwibm9uZVwiLCB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLCBjaGlsZHJlbjogLyogQF9fUFVSRV9fICovIGMoXG4gIFwicGF0aFwiLFxuICB7XG4gICAgZmlsbDogXCJjdXJyZW50Q29sb3JcIixcbiAgICBmaWxsUnVsZTogXCJldmVub2RkXCIsXG4gICAgY2xpcFJ1bGU6IFwiZXZlbm9kZFwiLFxuICAgIGQ6IFwiTTQxLjA4MjcgMTcuNTQxM0M0MS4wODI3IDcuODUzMjMgMzMuMjI5NCAwIDIzLjU0MTMgMEMxMy44NTMyIDAgNiA3Ljg1MzIzIDYgMTcuNTQxM0M2IDI2LjM0ODcgMTIuNDU4OCAzMy42MTQ3IDIwLjg5OTEgMzQuODYyNFYzOS4xMTkzSDE5LjM1NzlWNDguMDAwMUgyMC42Nzg5VjQwLjQ0MDRIMjAuODk5MUgyNi4xODM1SDI2LjQwMzdWNDguMDAwMUgyNy43MjQ5VjM5LjExOTNIMjYuMTgzNVYzNC44NjI0QzM0LjYyMzkgMzMuNjE0NyA0MS4wODI3IDI2LjI3NTMgNDEuMDgyNyAxNy41NDEzWk03LjMyMTE0IDE3LjU0MTNDNy4zMjExNCA4LjU4NzE4IDE0LjU4NzIgMS4zMjExMSAyMy41NDEzIDEuMzIxMTFDMzIuNDk1NSAxLjMyMTExIDM5Ljc2MTUgOC41ODcxOCAzOS43NjE1IDE3LjU0MTNDMzkuNzYxNSAyNi40OTU1IDMyLjQ5NTUgMzMuNzYxNSAyMy41NDEzIDMzLjc2MTVDMTQuNTg3MiAzMy43NjE1IDcuMzIxMTQgMjYuNDk1NSA3LjMyMTE0IDE3LjU0MTNaTTI0Ljg2MjUgMzkuMTE5M0gyMi4yMjAzVjM1LjAwOTJDMjIuNDQwNSAzNS4wMDkyIDIyLjY2MDYgMzUuMDI3NiAyMi44ODA4IDM1LjA0NTlMMjIuODgwOSAzNS4wNDU5QzIzLjEwMTEgMzUuMDY0MyAyMy4zMjEyIDM1LjA4MjYgMjMuNTQxMyAzNS4wODI2QzIzLjk4MTcgMzUuMDgyNiAyNC40MjIxIDM1LjA4MjYgMjQuODYyNSAzNS4wMDkyVjM5LjExOTNaTTI2LjkxNzUgMTEuMzc2MUMyNi45MTc1IDEzLjI4NDMgMjUuNDQ5NiAxNS41NTk2IDIzLjU0MTMgMTUuNTU5NkMyMS43MDY1IDE1LjU1OTYgMjAuMTY1MiAxMy4yODQzIDIwLjE2NTIgMTEuMzc2MUMyMC4xNjUyIDkuNTQxMjEgMjEuNjMzMSA3Ljk5OTk0IDIzLjU0MTMgNy45OTk5NEMyNS4zNzYyIDcuOTk5OTQgMjYuOTE3NSA5LjQ2NzgxIDI2LjkxNzUgMTEuMzc2MVpNMjUuNjY5OCAxMS4zNzYxQzI1LjY2OTggMTAuMjAxOCAyNC43MTU2IDkuMjQ3NjMgMjMuNTQxMyA5LjI0NzYzQzIyLjM2NyA5LjI0NzYzIDIxLjQ4NjMgMTAuMjAxOCAyMS40MTI5IDExLjM3NjFDMjEuNDEyOSAxMi42MjM4IDIyLjQ0MDQgMTQuMzExOSAyMy41NDEzIDE0LjMxMTlDMjQuNjQyMiAxNC4zMTE5IDI1LjY2OTggMTIuNjIzOCAyNS42Njk4IDExLjM3NjFaTTI4LjYwNTYgMjUuMTAxVjIyLjQ1ODhDMjguNjA1NiAyMC4zMzA0IDI2LjkxNzUgMTguNTY4OSAyNC43ODkxIDE4LjY0MjNIMjIuMjkzN0MyMC4xNjUyIDE4LjY0MjMgMTguNDc3MSAyMC4zMzA0IDE4LjQ3NzEgMjIuNDU4OFYyNS4xMDFIMTcuMTU2VjIyLjQ1ODhDMTcuMTU2IDE5LjU5NjQgMTkuNDMxMyAxNy4zMjEyIDIyLjI5MzcgMTcuMzIxMkgyNC43ODkxQzI3LjY1MTUgMTcuMzIxMiAyOS45MjY3IDE5LjU5NjQgMjkuOTI2NyAyMi40NTg4VjI1LjEwMUgyOC42MDU2Wk0yMy41NDEzIDMuODg5OTVDMzEuMTAxIDMuODg5OTUgMzcuMTkyNyAxMC4wNTUxIDM3LjE5MjcgMTcuNTQxNEMzNy4xOTI3IDI1LjAyNzYgMzEuMTAxIDMxLjExOTMgMjMuNTQxMyAzMS4xOTI3QzE1Ljk4MTcgMzEuMTkyNyA5Ljg4OTk1IDI1LjAyNzYgOS44ODk5NSAxNy41NDE0QzkuODg5OTUgOS45ODE3MSAxNi4wNTUxIDMuODg5OTUgMjMuNTQxMyAzLjg4OTk1Wk0yMy42MTQ3IDUuMjExMDRDMTYuNzg5IDUuMjExMDQgMTEuMjg0NSAxMC43MTU3IDExLjI4NDUgMTcuNTQxNEMxMS4yODQ1IDI0LjI5MzcgMTYuNzg5IDI5Ljc5ODIgMjMuNjE0NyAyOS44NzE2QzMwLjQ0MDQgMjkuODcxNiAzNS45NDUgMjQuMzY3MSAzNS45NDUgMTcuNTQxNEMzNS45NDUgMTAuNzE1NyAzMC40NDA0IDUuMjExMDQgMjMuNjE0NyA1LjIxMTA0WlwiXG4gIH1cbikgfSksIHVYID0gKCkgPT4gLyogQF9fUFVSRV9fICovIGMoXCJzdmdcIiwgeyB2aWV3Qm94OiBcIjAgMCA0OCA0OFwiLCBmaWxsOiBcIm5vbmVcIiwgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiwgY2hpbGRyZW46IC8qIEBfX1BVUkVfXyAqLyBjKFxuICBcInBhdGhcIixcbiAge1xuICAgIGZpbGw6IFwiY3VycmVudENvbG9yXCIsXG4gICAgZmlsbFJ1bGU6IFwiZXZlbm9kZFwiLFxuICAgIGNsaXBSdWxlOiBcImV2ZW5vZGRcIixcbiAgICBkOiBcIk00Ny4yNTc3IDE5LjM4MTVINDIuOTY5MUM0Mi40NzQyIDE3LjQwMjEgNDEuNzMxOSAxNS41ODc2IDQwLjY1OTggMTMuODU1N0w0My43MTE0IDEwLjgwNDFDNDMuOTU4OCAxMC41NTY3IDQzLjk1ODggMTAuMDYxOSA0My43MTE0IDkuNzMxOTZMMzguMjY4IDQuMjg4NjdDMzguMDIwNiA0LjA0MTI1IDM3LjUyNTggNC4wNDEyNSAzNy4xOTU5IDQuMjg4NjdMMzQuMTQ0MyA3LjM0MDIxQzMyLjQxMjMgNi4yNjgwNCAzMC41MTU0IDUuNTI1NzggMjguNjE4NSA1LjAzMDk0VjAuNzQyMjY0QzI4LjYxODUgMC4zMjk4OTIgMjguMjg4NiAwIDI3Ljg3NjMgMEgyMC4xMjM2QzE5LjcxMTMgMCAxOS4zODE1IDAuMzI5ODkyIDE5LjM4MTUgMC43NDIyNjRWNS4wMzA5NEMxNy40MDIxIDUuNTI1NzggMTUuNTg3NiA2LjI2ODA0IDEzLjg1NTYgNy4zNDAyMUwxMC44MDQxIDQuMjg4NjdDMTAuNTU2NyA0LjA0MTI1IDEwLjA2MTggNC4wNDEyNSA5LjczMTkxIDQuMjg4NjdMNC4yODg2MiA5LjczMTk2QzQuMTIzNjcgOS44OTY5MSA0LjA0MTE2IDEwLjA2MTkgNC4wNDExNiAxMC4yMjY4QzQuMDQxMTYgMTAuMzkxOCA0LjEyMzY3IDEwLjYzOTIgNC4yODg2MiAxMC43MjE3TDcuMzQwMTMgMTMuNzczMkM2LjI2Nzk3IDE1LjUwNTIgNS41MjU3NiAxNy40MDIxIDUuMDMwOTEgMTkuMjk5SDAuNzQyMTg4QzAuMzI5ODE3IDE5LjI5OSAwIDE5LjYyODkgMCAyMC4wNDEyVjI3Ljc5MzhDMCAyOC4yMDYyIDAuMzI5ODE3IDI4LjUzNjEgMC43NDIxODggMjguNTM2MUg1LjAzMDkxQzUuNTI1NzYgMzAuNTE1NSA2LjI2Nzk3IDMyLjMyOTkgNy4zNDAxMyAzNC4wNjE5TDQuMjg4NjIgMzcuMTEzNEM0LjA0MTIgMzcuMzYwOSA0LjA0MTIgMzcuODU1NyA0LjI4ODYyIDM4LjE4NTZMOS43MzE5MSA0My42Mjg5QzkuOTc5MzMgNDMuODc2MyAxMC40NzQyIDQzLjg3NjMgMTAuODA0MSA0My42Mjg5TDEzLjg1NTYgNDAuNTc3NEMxNS41ODc2IDQxLjY0OTUgMTcuNDg0NiA0Mi4zOTE4IDE5LjM4MTUgNDIuODg2NlY0Ny4xNzUzQzE5LjM4MTUgNDcuNTg3NyAxOS43MTEzIDQ3LjkxNzUgMjAuMTIzNiA0Ny45MTc1SDI3Ljg3NjNDMjguMjg4NiA0Ny45MTc1IDI4LjYxODUgNDcuNTg3NyAyOC42MTg1IDQ3LjE3NTNWNDIuODg2NkMzMC41OTc5IDQyLjM5MTggMzIuNDEyMyA0MS42NDk1IDM0LjE0NDMgNDAuNTc3NEwzNy4xOTU5IDQzLjYyODlDMzcuNDQzMyA0My44NzYzIDM3LjkzODEgNDMuODc2MyAzOC4yNjggNDMuNjI4OUw0My43MTE0IDM4LjE4NTZDNDMuOTU4OCAzNy45MzgyIDQzLjk1ODggMzcuNDQzMyA0My43MTE0IDM3LjExMzRMNDAuNjU5OCAzNC4wNjE5QzQxLjczMTkgMzIuMzI5OSA0Mi40NzQyIDMwLjQzMyA0Mi45NjkxIDI4LjUzNjFINDcuMjU3N0M0Ny42NzAxIDI4LjUzNjEgNDggMjguMjA2MiA0OCAyNy43OTM4VjIwLjA0MTJDNDggMTkuNzExMyA0Ny42NzAxIDE5LjM4MTUgNDcuMjU3NyAxOS4zODE1Wk00Ni41MTU0IDI3LjEzNDFINDIuMzA5M0M0MS45Nzk0IDI3LjEzNDEgNDEuNjQ5NCAyNy4zODE0IDQxLjU2NyAyNy43MTEzQzQxLjA3MjEgMjkuODU1NyA0MC4yNDc0IDMxLjkxNzYgMzkuMDEwMyAzMy44MTQ1QzM4Ljg0NTMgMzQuMTQ0NCAzOC44NDUzIDM0LjQ3NDIgMzkuMDkyNyAzNC43MjE3TDQyLjA2MTkgMzcuNjkwOEwzNy42MDgzIDQyLjE0NDNMMzQuNjM5MiAzOS4xNzUzQzM0LjM5MTggMzguOTI3OSAzMy45NzkzIDM4LjkyNzkgMzMuNzMxOSAzOS4wOTI4QzMxLjgzNSA0MC4zMyAyOS43NzMyIDQxLjE1NDcgMjcuNjI4OSA0MS42NDk1QzI3LjI5OSA0MS43MzIgMjcuMDUxNSA0MS45Nzk0IDI3LjA1MTUgNDIuMzkxOFY0Ni41OThIMjAuNzgzNVY0Mi4zOTE4QzIwLjc4MzUgNDIuMDYxOSAyMC41MzYxIDQxLjczMiAyMC4yMDYyIDQxLjY0OTVDMTguMDYxOSA0MS4xNTQ3IDE2IDQwLjMzIDE0LjEwMzEgMzkuMDkyOEMxMy43NzMyIDM4LjkyNzkgMTMuNDQzMyAzOC45Mjc5IDEzLjE5NTkgMzkuMTc1M0wxMC4yMjY3IDQyLjE0NDNMNS43NzMyIDM3LjY5MDhMOC43NDIyNiAzNC43MjE3QzguOTg5NjggMzQuNDc0MiA4Ljk4OTY2IDM0LjA2MTkgOC44MjQ3MSAzMy44MTQ1QzcuNTg3NTkgMzEuOTE3NiA2Ljc2Mjg3IDI5Ljg1NTcgNi4yNjgwMyAyNy43MTEzQzYuMTg1NTUgMjcuMzgxNCA1LjkzODExIDI3LjEzNDEgNS41MjU3NCAyNy4xMzQxSDEuMzE5NTdWMjAuODY2SDUuNTI1NzRDNS44NTU2MyAyMC44NjYgNi4xODU1NSAyMC42MTg2IDYuMjY4MDMgMjAuMjg4N0M2Ljc2Mjg3IDE4LjE0NDMgNy41ODc1OSAxNi4wODI1IDguODI0NzEgMTQuMTg1NkM4Ljk4OTY2IDEzLjg1NTcgOC45ODk2OCAxMy41MjU4IDguNzQyMjYgMTMuMjc4M0w1Ljc3MzIgMTAuMzA5M0wxMC4yMjY3IDUuODU1NjhMMTMuMTk1OSA4LjgyNDc2QzEzLjQ0MzMgOS4wNzIxOCAxMy44NTU3IDkuMDcyMTYgMTQuMTAzMSA4LjkwNzIxQzE2IDcuNjcwMSAxOC4wNjE5IDYuODQ1MzggMjAuMjA2MiA2LjM1MDUzQzIwLjUzNjEgNi4yNjgwNiAyMC43ODM1IDYuMDIwNjEgMjAuNzgzNSA1LjYwODI0VjEuNDAyMDdIMjcuMDUxNVY1LjYwODI0QzI3LjA1MTUgNS45MzgxNCAyNy4yOTkgNi4yNjgwNiAyNy42Mjg5IDYuMzUwNTNDMjkuNzczMiA2Ljg0NTM4IDMxLjgzNSA3LjY3MDEgMzMuNzMxOSA4LjkwNzIxQzM0LjA2MTggOS4wNzIxNiAzNC4zOTE4IDkuMDcyMTggMzQuNjM5MiA4LjgyNDc2TDM3LjYwODMgNS44NTU2OEw0Mi4wNjE5IDEwLjMwOTNMMzkuMDkyNyAxMy4yNzgzQzM4Ljg0NTMgMTMuNTI1OCAzOC44NDUzIDEzLjkzODIgMzkuMDEwMyAxNC4xODU2QzQwLjI0NzQgMTYuMDgyNSA0MS4wNzIxIDE4LjE0NDMgNDEuNTY3IDIwLjI4ODdDNDEuNjQ5NCAyMC42MTg2IDQxLjg5NjkgMjAuODY2IDQyLjMwOTMgMjAuODY2SDQ2LjUxNTRWMjcuMTM0MVpNMjMuNTA1MiAxMi42MTg2QzE3LjIzNzEgMTIuNjE4NiAxMi4xMjM3IDE3LjczMiAxMi4xMjM3IDI0QzEyLjEyMzcgMzAuMjY4MSAxNy4yMzcxIDM1LjM4MTUgMjMuNTA1MiAzNS4zODE1QzI5Ljc3MzIgMzUuMzgxNSAzNC44ODY2IDMwLjI2ODEgMzQuODg2NiAyNEMzNC44ODY2IDE3LjczMiAyOS43NzMyIDEyLjYxODYgMjMuNTA1MiAxMi42MTg2Wk0yMy41MDUyIDMzLjk3OTVDMTcuOTc5NCAzMy45Nzk1IDEzLjUyNTcgMjkuNTI1OCAxMy41MjU3IDI0QzEzLjUyNTcgMTguNDc0MyAxNy45Nzk0IDE0LjAyMDcgMjMuNTA1MiAxNC4wMjA3QzI5LjAzMSAxNC4wMjA3IDMzLjQ4NDUgMTguNDc0MyAzMy40ODQ1IDI0QzMzLjQ4NDUgMjkuNTI1OCAyOC45NDg1IDMzLjk3OTUgMjMuNTA1MiAzMy45Nzk1Wk0yOS4wMzA5IDIzLjM0MDNIMzEuMDkyOFYyNC44MjQ4SDI5LjAzMDlWMjMuMzQwM1pNMTcuODk2OSAyMy4zNDAzSDE1LjgzNVYyNC44MjQ4SDE3Ljg5NjlWMjMuMzQwM1pNMjMuMDU0MyAyNS4zODAyQzIzLjAzMjggMjUuNjI3MSAyMy4wMTAyIDI1Ljg4NTggMjMuMDEwMiAyNi4xNDQ1QzIzLjAxMDIgMjYuNjM5MyAyMi45Mjc4IDI3LjEzNDIgMjIuODQ1MyAyNy41NDY1SDI3LjA1MTVWMjkuMTEzNUgyMC43ODM1QzIxLjExMzQgMjcuNjI5IDIxLjI3ODMgMjYuMTQ0NCAyMS4yNzgzIDI0LjgyNDhIMTkuODc2M1YyMy4zNDAzSDIxLjI3ODNWMjIuMzUwNkMyMS4yNzgzIDIxLjYwODMgMjEuMzYwOCAyMC45NDg2IDIxLjUyNTggMjAuNDUzN0MyMS42OTA3IDE5Ljk1ODkgMjEuOTM4MiAxOS42MjkgMjIuMjY4MSAxOS4yOTkxQzIyLjUxNTUgMTguOTY5MiAyMi45Mjc4IDE4LjcyMTcgMjMuMzQwMiAxOC42MzkzQzIzLjc1MjUgMTguNTU2OCAyNC4yNDc0IDE4LjQ3NDQgMjQuNzQyMyAxOC40NzQ0SDI0Ljc0MjZDMjUuMTU0OSAxOC40NzQ0IDI1LjU2NyAxOC40NzQ0IDI1Ljg5NjggMTguNTU2OEMyNi4yMjY3IDE4LjYzOTMgMjYuNTU2NyAxOC43MjE4IDI2Ljg4NjYgMTguODg2N0wyNi4zOTE4IDIwLjM3MTNMMjYuMzkxNyAyMC4zNzEyQzI1Ljg5NjkgMjAuMjA2MyAyNS40MDIgMjAuMDQxMyAyNC44MjQ3IDIwLjA0MTNDMjQuNDk0OCAyMC4wNDEzIDI0LjMyOTkgMjAuMDQxNCAyNC4wODI1IDIwLjEyMzhDMjMuODM1IDIwLjIwNjMgMjMuNjcwMSAyMC4yODg4IDIzLjUwNTIgMjAuNDUzN0MyMy4zNDAyIDIwLjYxODcgMjMuMjU3NyAyMC44NjYxIDIzLjE3NTMgMjEuMTEzNUMyMy4wOTI4IDIxLjM2MDkgMjMuMDkyOCAyMS43NzMxIDIzLjA5MjggMjIuMTg1NFYyMi4xODU3VjIzLjI1NzlIMjUuODE0NFYyNC43NDI0SDIzLjA5MjhDMjMuMDkyOCAyNC45MzkyIDIzLjA3NCAyNS4xNTQ4IDIzLjA1NDMgMjUuMzgwMlpcIlxuICB9XG4pIH0pLCB6WCA9ICgpID0+IC8qIEBfX1BVUkVfXyAqLyBjKFwic3ZnXCIsIHsgdmlld0JveDogXCIwIDAgNDggNDhcIiwgZmlsbDogXCJub25lXCIsIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsIGNoaWxkcmVuOiAvKiBAX19QVVJFX18gKi8gYyhcbiAgXCJwYXRoXCIsXG4gIHtcbiAgICBmaWxsOiBcImN1cnJlbnRDb2xvclwiLFxuICAgIGZpbGxSdWxlOiBcImV2ZW5vZGRcIixcbiAgICBjbGlwUnVsZTogXCJldmVub2RkXCIsXG4gICAgZDogXCJNMzYuODAyMSAxMS41NTU3QzM2LjE3MyAxMS41NTU3IDM1LjU0MzkgMTEuNjE4NiAzNC44NTE5IDExLjc0NDRDMzMuNzgyNCA2LjY0ODc2IDI5LjM3ODggMyAyNC4wOTQ0IDNDMTguODcyOSAzIDE0LjM0MzQgNi43NzQ1OCAxMy4zMzY4IDExLjg3MDNDMTIuNTE5IDExLjY4MTUgMTEuNzY0MSAxMS41NTU3IDExLjAwOTIgMTEuNTU1N0M0LjkwNjk1IDExLjU1NTcgMCAxNi41MjU2IDAgMjIuNTY0OUMwIDI3Ljk3NTEgMy42NDg3NSAzMi42MzA0IDguMzY2OTcgMzMuMjU5NUg5LjE4NDc4VjMyLjAwMTNIOC40Mjk4NkM0LjQwMzY1IDMxLjQ5OCAxLjI1ODE5IDI3LjM0NiAxLjI1ODE5IDIyLjU2NDlDMS4yNTgxOSAxNy4xNTQ3IDUuNjYxODUgMTIuNzUxIDExLjA3MjEgMTIuNzUxQzExLjg4OTkgMTIuNzUxIDEyLjc3MDYgMTIuODc2OCAxMy43MTQzIDEzLjE5MTNMMTQuNDA2MyAxMy4zODAxTDE0LjUzMjEgMTIuNjg4MUMxNS4yMjQxIDcuODQ0MDQgMTkuMzc2MSA0LjI1ODE5IDI0LjE1NzMgNC4yNTgxOUMyOS4wMDEzIDQuMjU4MTkgMzMuMDkwNCA3Ljc4MTEzIDMzLjc4MjUgMTIuNjI1MkwzMy45MDgyIDEzLjMxNzJMMzQuNjAwMyAxMy4xMjg0QzM1LjQxODEgMTIuOTM5NyAzNi4xNzMgMTIuODEzOSAzNi45Mjc5IDEyLjgxMzlDNDIuMzM4MiAxMi44MTM5IDQ2Ljc0MTggMTcuMjE3NiA0Ni43NDE4IDIyLjYyNzhDNDYuNzQxOCAyNy40MDg5IDQzLjU5NjMgMzEuNDk4IDM5LjUwNzIgMzIuMDY0MkgzOC43NTIzVjMzLjMyMjRIMzkuNjMzQzQ0LjQxNDIgMzIuNjMwNCA0OCAyOC4wMzggNDggMjIuNjI3OEM0Ny44NzQyIDE2LjUyNTYgNDIuOTA0MyAxMS41NTU3IDM2LjgwMjEgMTEuNTU1N1pNMzMuMDI3NSAyNy40NzE5TDM0LjYwMDMgMjUuMzMyOUwzMS4yMDMxIDIxLjkzNThMMjkuMDY0MiAyMy41MDg2QzI4LjMwOTMgMjMuMDY4MiAyNy40OTE1IDIyLjY5MDcgMjYuNjEwNyAyMi41MDJMMjYuMjMzMyAxOS44NTk4SDIxLjQ1MjJMMjEuMDc0NyAyMi41MDJDMjAuMTk0IDIyLjc1MzYgMTkuMzc2MSAyMy4wNjgyIDE4LjYyMTIgMjMuNTA4NkwxNi40ODIzIDIxLjkzNThMMTMuMDg1MiAyNS4zMzI5TDE0LjY1NzkgMjcuNDcxOUMxNC4yMTc2IDI4LjIyNjggMTMuODQwMSAyOS4wNDQ2IDEzLjY1MTQgMjkuOTI1M0wxMS4wMDkyIDMwLjMwMjhWMzUuMDgzOUwxMy42NTE0IDM1LjQ2MTRDMTMuOTAzIDM2LjM0MjEgMTQuMjE3NiAzNy4xNTk5IDE0LjY1NzkgMzcuOTE0OEwxMy4wODUyIDQwLjA1MzhMMTYuNDgyMyA0My40NTA5TDE4LjYyMTIgNDEuODc4MkMxOS4zNzYxIDQyLjMxODUgMjAuMTk0IDQyLjY5NiAyMS4wNzQ3IDQyLjg4NDdMMjEuNDUyMiA0NS41MjY5SDI2LjIzMzNMMjYuNjEwNyA0Mi44ODQ3QzI3LjQ5MTUgNDIuNjMzMSAyOC4zMDkzIDQyLjMxODUgMjkuMDY0MiA0MS44NzgyTDMxLjIwMzEgNDMuNDUwOUwzNC42MDAzIDQwLjA1MzhMMzMuMDI3NSAzNy45MTQ4QzMzLjQ2NzkgMzcuMTU5OSAzMy44NDUzIDM2LjM0MjEgMzQuMDM0MSAzNS40NjE0TDM2LjY3NjMgMzUuMDgzOVYzMC4zMDI4TDM0LjAzNDEgMjkuOTI1M0MzMy44NDUzIDI5LjA0NDYgMzMuNDY3OSAyOC4yMjY4IDMzLjAyNzUgMjcuNDcxOVpNMzUuNDE4MSAzNC4wMTQ1TDMzLjAyNzUgMzQuMzI5TDMyLjkwMTcgMzQuNzY5NEMzMi42NTAxIDM1Ljc3NTkgMzIuMjcyNiAzNi43MTk2IDMxLjcwNjQgMzcuNjYzMkwzMS40NTQ4IDM4LjA0MDdMMzIuOTAxNyAzOS45OTA5TDMxLjA3NzMgNDEuODE1MkwyOS4xMjcxIDQwLjM2ODNMMjguNzQ5NyA0MC42MkMyNy44NjkgNDEuMTg2MSAyNi45MjUzIDQxLjU2MzYgMjUuODU1OCA0MS44MTUyTDI1LjQxNTQgNDEuOTQxMUwyNS4xMDA5IDQ0LjMzMTZIMjIuNDU4N0wyMi4xNDQyIDQxLjk0MTFMMjEuNzAzOCA0MS44MTUyQzIwLjY5NzMgNDEuNTYzNiAxOS43NTM2IDQxLjE4NjEgMTguODA5OSA0MC42MkwxOC40MzI1IDQwLjM2ODNMMTYuNDgyMyA0MS44MTUyTDE0LjY1NzkgMzkuOTkwOUwxNi4xMDQ4IDM4LjA0MDdMMTUuODUzMiAzNy42NjMyQzE1LjI4NyAzNi43ODI1IDE0LjkwOTYgMzUuODM4OCAxNC42NTc5IDM0Ljc2OTRMMTQuNTMyMSAzNC4zMjlMMTIuMTQxNSAzNC4wMTQ1VjMxLjM3MjNMMTQuNTMyMSAzMS4wNTc3TDE0LjY1NzkgMzAuNjE3M0MxNC45MDk2IDI5LjYxMDggMTUuMjg3IDI4LjY2NzEgMTUuODUzMiAyNy43MjM1TDE2LjEwNDggMjcuMzQ2TDE0LjY1NzkgMjUuMzk1OEwxNi40ODIzIDIzLjU3MTVMMTguNDMyNSAyNS4wMTg0TDE4LjgwOTkgMjQuNzY2N0MxOS42OTA3IDI0LjIwMDYgMjAuNjM0MyAyMy44MjMxIDIxLjcwMzggMjMuNTcxNUwyMi4xNDQyIDIzLjQ0NTZMMjIuNDU4NyAyMS4wNTUxSDI1LjEwMDlMMjUuNDE1NCAyMy40NDU2TDI1Ljg1NTggMjMuNTcxNUMyNi44NjI0IDIzLjgyMzEgMjcuODA2IDI0LjIwMDYgMjguNzQ5NyAyNC43NjY3TDI5LjEyNzEgMjUuMDE4NEwzMS4wNzczIDIzLjU3MTVMMzIuOTAxNyAyNS4zOTU4TDMxLjQ1NDggMjcuMzQ2TDMxLjcwNjQgMjcuNzIzNUMzMi4yNzI2IDI4LjYwNDIgMzIuNjUwMSAyOS41NDc5IDMyLjkwMTcgMzAuNjE3M0wzMy4wMjc1IDMxLjA1NzdMMzUuNDE4MSAzMS4zNzIzVjM0LjAxNDVaTTE3LjgwMzQgMzIuNjMwM0MxNy44MDM0IDI5LjI5NjEgMjAuNTA4NSAyNi41MjgxIDIzLjkwNTYgMjYuNTI4MUMyNy4zMDI4IDI2LjUyODEgMzAuMDA3OSAyOS4yOTYxIDMwLjAwNzkgMzIuNjMwM0MzMC4wMDc5IDM1Ljk2NDYgMjcuMzAyOCAzOC43MzI2IDIzLjkwNTYgMzguNzMyNkMyMC41NzE0IDM4LjczMjYgMTcuODAzNCAzNi4wMjc1IDE3LjgwMzQgMzIuNjMwM1pNMTguOTk4NyAzMi42MzAzQzE4Ljk5ODcgMzUuMzM1NSAyMS4yMDA1IDM3LjUzNzMgMjMuOTA1NiAzNy41MzczQzI2LjYxMDggMzcuNTM3MyAyOC44MTI2IDM1LjM5ODQgMjguODEyNiAzMi42MzAzQzI4LjgxMjYgMjkuOTI1MiAyNi42MTA4IDI3LjcyMzQgMjMuOTA1NiAyNy43MjM0QzIxLjIwMDUgMjcuNzIzNCAxOC45OTg3IDI5LjkyNTIgMTguOTk4NyAzMi42MzAzWlwiXG4gIH1cbikgfSksIGhYID0gKCkgPT4gLyogQF9fUFVSRV9fICovIGMoXCJzdmdcIiwgeyB2aWV3Qm94OiBcIjAgMCA0OCA0OFwiLCBmaWxsOiBcIm5vbmVcIiwgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiwgY2hpbGRyZW46IC8qIEBfX1BVUkVfXyAqLyBjKFxuICBcInBhdGhcIixcbiAge1xuICAgIGZpbGw6IFwiY3VycmVudENvbG9yXCIsXG4gICAgZmlsbFJ1bGU6IFwiZXZlbm9kZFwiLFxuICAgIGNsaXBSdWxlOiBcImV2ZW5vZGRcIixcbiAgICBkOiBcIk0yNy42OTMyIDQuMjA3MTZDMjcuNjkzMiA2LjYyOTQ3IDI1Ljg0NDYgOS40OTggMjMuNDg2IDkuNDk4QzIxLjE5MTIgOS40OTggMTkuMjc4OSA2LjU2NTczIDE5LjI3ODkgNC4yMDcxNkMxOS4yNzg5IDEuOTEyMzQgMjEuMTkxMiAwIDIzLjQ4NiAwQzI1Ljc4MDkgMCAyNy42OTMyIDEuOTEyMzQgMjcuNjkzMiA0LjIwNzE2Wk0yNi41NDU4IDQuMjA3MTZDMjYuNTQ1OCAyLjU0OTc5IDI1LjIwNzIgMS4xNDc0MSAyMy40ODYgMS4xNDc0MUMyMS44Mjg3IDEuMTQ3NDEgMjAuNDI2MyAyLjQ4NjA1IDIwLjQyNjMgNC4yMDcxNkMyMC40MjYzIDUuOTkyMDIgMjEuODkyNCA4LjM1MDU5IDIzLjQ4NiA4LjM1MDU5QzI1LjA3OTcgOC4zNTA1OSAyNi41NDU4IDUuOTkyMDIgMjYuNTQ1OCA0LjIwNzE2Wk0zOC4yMTExIDI1Ljg4MDRINDEuNTI1OUM0MS44NDQ2IDI1Ljg4MDQgNDIuMDk5NiAyNi4xMzU0IDQyLjA5OTYgMjYuNDU0MVYzMi40NDYyQzQyLjA5OTYgMzIuNzY0OSA0MS44NDQ2IDMzLjAxOTkgNDEuNTI1OSAzMy4wMTk5SDM4LjIxMTFDMzcuODI4NiAzNC40ODYgMzcuMjU1IDM1Ljk1MjEgMzYuNDI2MyAzNy4yOTA4TDM4Ljc4NDggMzkuNjQ5M0MzOC45NzYxIDM5LjkwNDMgMzguOTc2MSA0MC4yODY4IDM4Ljc4NDggNDAuNDc4TDM0LjU3NzcgNDQuNjg1MkMzNC4zMjI3IDQ0Ljg3NjQgMzMuOTQwMiA0NC44NzY0IDMzLjc0OSA0NC42ODUyTDMxLjM5MDQgNDIuMzI2NkMzMC4wNTE4IDQzLjE1NTMgMjguNjQ5NCA0My43MjkgMjcuMTE5NiA0NC4xMTE1VjQ3LjQyNjJDMjcuMTE5NiA0Ny43NDUgMjYuODY0NiA0Ny45OTk5IDI2LjU0NTggNDcuOTk5OUgyMC41NTM4QzIwLjIzNTEgNDcuOTk5OSAxOS45ODAxIDQ3Ljc0NSAxOS45ODAxIDQ3LjQyNjJWNDQuMTExNUMxOC41MTM5IDQzLjcyOSAxNy4wNDc4IDQzLjE1NTMgMTUuNzA5MiA0Mi4zMjY2TDEzLjM1MDYgNDQuNjg1MkMxMy4wOTU2IDQ0Ljg3NjQgMTIuNzEzMiA0NC44NzY0IDEyLjUyMTkgNDQuNjg1Mkw4LjMxNDc5IDQwLjQ3OEM4LjEyMzU1IDQwLjIyMyA4LjEyMzU1IDM5Ljg0MDYgOC4zMTQ3OSAzOS42NDkzTDEwLjY3MzMgMzcuMjkwOEM5Ljg0NDYzIDM1Ljk1MjEgOS4yNzA5IDM0LjU0OTggOC44ODg0MyAzMy4wMTk5SDUuNTczNzJDNS4yNTUgMzMuMDE5OSA1IDMyLjc2NDkgNSAzMi40NDYyVjI2LjQ1NDFDNSAyNi4xMzU0IDUuMjU1IDI1Ljg4MDQgNS41NzM3MiAyNS44ODA0SDguODg4NDNDOS4yNzA5IDI0LjQxNDMgOS44NDQ2MyAyMi45NDgyIDEwLjY3MzMgMjEuNjA5NUw4LjMxNDc5IDE5LjI1MUM4LjE4NzMgMTkuMTg3MiA4LjEyMzUyIDE4Ljk5NiA4LjEyMzUyIDE4Ljg2ODVDOC4xMjM1MiAxOC43NDEgOC4xODczIDE4LjYxMzUgOC4zMTQ3OSAxOC40ODZMMTIuNTIxOSAxNC4yNzg4QzEyLjc3NjkgMTQuMDg3NiAxMy4xNTkzIDE0LjA4NzYgMTMuMzUwNiAxNC4yNzg4TDE1LjUxNzkgMTYuNDQ2MkMxNS45NjQxIDEzLjMyMjcgMTguNjQxNCAxMC45NjQxIDIxLjg5MjQgMTAuOTY0MUgyNS4yMDcyQzI4LjM5NDUgMTAuOTY0MSAzMS4wNzE3IDEzLjMyMjcgMzEuNTgxNyAxNi40NDYyTDMzLjc0OSAxNC4yNzg4QzM0LjAwNCAxNC4wODc2IDM0LjM4NjUgMTQuMDg3NiAzNC41Nzc3IDE0LjI3ODhMMzguNzg0OCAxOC40ODZDMzguOTEyMyAxOC41NDk4IDM4Ljk3NjEgMTguNzQxIDM4Ljk3NjEgMTguODY4NUMzOC45NzYxIDE4Ljk5NiAzOC45MTIzIDE5LjEyMzUgMzguNzg0OCAxOS4yNTFMMzYuNDI2MyAyMS42MDk1QzM3LjI1NSAyMi45NDgyIDM3LjgyODYgMjQuMzUwNSAzOC4yMTExIDI1Ljg4MDRaTTI4LjQ1ODIgMzUuMDU5N0MyOS45MjQzIDMzLjY1NzMgMzAuODE2NyAzMS42ODEyIDMwLjgxNjcgMjkuNTEzOUMzMC44MTY3IDI4LjgxMjcgMzAuNzUzIDI4LjExMTUgMzAuNTYxNyAyNy40MTAzQzMwLjI0MyAyNy42MDE1IDI5Ljg2MDYgMjcuNzI5IDI5LjQ3ODEgMjcuNzI5QzI5LjA5NTYgMjcuNzI5IDI4Ljc3NjkgMjcuNjY1MyAyOC40NTgyIDI3LjQ3NDFWMzUuMDU5N1pNMjUuMTQzNCAxMS45ODRIMjEuODI4N0MxOC44OTY0IDExLjk4NCAxNi40NzQxIDE0LjQwNjMgMTYuNDc0MSAxNy4zMzg2VjI1LjQ5OEMxNi40NzQxIDI2LjA3MTcgMTYuOTIwMyAyNi41MTc5IDE3LjQ5NCAyNi41MTc5QzE4LjA2NzcgMjYuNTE3OSAxOC41MTQgMjYuMDcxNyAxOC41MTQgMjUuNDk4VjE5LjI1MVYxNy4yNzQ5SDE5LjY2MTNWMTkuMjUxVjI1LjQ5OFYzNi4zMzQ2QzIwLjYxNzUgMzYuODQ0NiAyMS43NjQ5IDM3LjE2MzMgMjIuOTEyMyAzNy4xNjMzVjI1LjQ5OEgyNC4wNTk4VjM3LjA5OTVDMjUuMjA3MiAzNi45MDgzIDI2LjM1NDYgMzYuNTI1OCAyNy4zMTA3IDM1Ljg4ODRWMjUuNDk4VjE5LjI1MVYxNy4yNzQ5SDI4LjQ1ODJWMTkuMjUxVjI1LjQ5OEMyOC40NTgyIDI2LjA3MTcgMjguOTA0NCAyNi41MTc5IDI5LjQ3ODEgMjYuNTE3OUMzMC4wNTE4IDI2LjUxNzkgMzAuNDk4IDI2LjA3MTcgMzAuNDk4IDI1LjQ5OFYxNy4zMzg2QzMwLjQ5OCAxNC40MDYzIDI4LjA3NTcgMTEuOTg0IDI1LjE0MzQgMTEuOTg0Wk0xNy41NTc4IDI3LjY2NTNDMTYuODU2NiAyNy42NjUzIDE2LjI4MjggMjcuMzQ2NiAxNS45MDA0IDI2LjkwMDNDMTUuNTgxNyAyNy43MjkgMTUuMzkwNCAyOC42MjE1IDE1LjQ1NDIgMjkuNDUwMUMxNS40NTQyIDMxLjk5OTkgMTYuNjY1NCAzNC4yMzEgMTguNTc3NyAzNS42MzM0VjI3LjQxMDNDMTguMjU5IDI3LjUzNzggMTcuOTQwMyAyNy42NjUzIDE3LjU1NzggMjcuNjY1M1pNMzcuNzAxMiAzMS44NzI1SDQwLjk1MjJINDEuMDc5NlYyNy4wOTE2SDM3LjgyODdDMzcuNTA5OSAyNy4wOTE2IDM3LjMxODcgMjYuOTAwNCAzNy4yNTQ5IDI2LjY0NTRDMzYuODcyNSAyNC45ODggMzYuMjM1IDIzLjM5NDQgMzUuMjc4OSAyMS45MjgyQzM1LjE1MTQgMjEuNzM3IDM1LjE1MTQgMjEuNDE4MyAzNS4zNDI2IDIxLjIyNzFMMzcuNjM3NSAxOC45MzIyTDM0LjE5NTIgMTUuNDlMMzEuOTAwNCAxNy43ODQ4QzMxLjgzNjcgMTcuODQ4NiAzMS43NzI5IDE3LjkxMjMgMzEuNzA5MiAxNy45MTIzVjI1LjYyNTVDMzEuNzA5MiAyNS45NDQyIDMxLjY0NTQgMjYuMjYyOSAzMS41MTc5IDI2LjUxNzlDMzEuODM2NiAyNy41Mzc4IDMyLjAyNzkgMjguNTU3NyAzMi4wMjc5IDI5LjU3NzZDMzIuMDI3OSAzNC40ODYgMjguMDExOSAzOC40MzgyIDIzLjE2NzMgMzguNDM4MkMxOC4yNTkgMzguNDM4MiAxNC4zMDY4IDM0LjQyMjMgMTQuMzA2OCAyOS41Nzc2QzE0LjMwNjggMjguMTExNSAxNC42ODkzIDI2LjcwOTEgMTUuMzI2NyAyNS40MzQyQzE1LjMyNjcgMjUuNDAyMyAxNS4zNDI3IDI1LjM4NjQgMTUuMzU4NiAyNS4zNzA1QzE1LjM3NDUgMjUuMzU0NSAxNS4zOTA1IDI1LjMzODYgMTUuMzkwNSAyNS4zMDY3VjE3Ljg0ODZDMTUuMzU4NiAxNy44MTY3IDE1LjMyNjcgMTcuODAwOCAxNS4yOTQ4IDE3Ljc4NDhDMTUuMjYzIDE3Ljc2ODkgMTUuMjMxMSAxNy43NTMgMTUuMTk5MiAxNy43MjExTDEyLjkwNDQgMTUuNDI2M0w5LjQ2MjE1IDE4Ljg2ODVMMTEuNzU3IDIxLjE2MzNDMTEuOTQ4MiAyMS4zNTQ1IDExLjk0ODIgMjEuNjA5NSAxMS44MjA4IDIxLjg2NDVDMTAuODY0NiAyMy4zMzA2IDEwLjIyNzEgMjQuOTI0MyA5Ljg0NDYgMjYuNTgxNkM5Ljc4MDg2IDI2LjgzNjYgOS41MjU5NCAyNy4wMjc4IDkuMjcwOTYgMjcuMDI3OEg2LjAxOTlWMzEuODcyNUg5LjI3MDk2QzkuNTg5NjkgMzEuODcyNSA5Ljc4MDg2IDMyLjA2MzcgOS44NDQ2IDMyLjMxODdDMTAuMjI3MSAzMy45NzYgMTAuODY0NiAzNS41Njk3IDExLjgyMDggMzcuMDM1OEMxMS45NDgyIDM3LjIyNyAxMS45NDgyIDM3LjU0NTggMTEuNzU3IDM3LjczN0w5LjQ2MjE1IDQwLjAzMThMMTIuOTA0NCA0My40NzRMMTUuMTk5MiA0MS4xNzkyQzE1LjM5MDQgNDAuOTg4IDE1LjY0NTQgNDAuOTg4IDE1LjkwMDQgNDEuMTE1NUMxNy4zNjY1IDQyLjA3MTcgMTguOTYwMiA0Mi43MDkxIDIwLjYxNzUgNDMuMDkxNkMyMC44NzI1IDQzLjE1NTMgMjEuMDYzOCA0My40MTAzIDIxLjA2MzggNDMuNjY1M1Y0Ni45MTYzSDI1LjkwODRWNDMuNjY1M0MyNS45MDg0IDQzLjM0NjYgMjYuMDk5NiA0My4xNTUzIDI2LjM1NDYgNDMuMDkxNkMyOC4wMTE5IDQyLjcwOTEgMjkuNjA1NiA0Mi4wNzE3IDMxLjA3MTcgNDEuMTE1NUMzMS4yNjI5IDQwLjk4OCAzMS41ODE3IDQwLjk4OCAzMS43NzI5IDQxLjE3OTJMMzQuMDY3NyA0My40NzRMMzcuNTA5OSA0MC4wMzE4TDM1LjIxNTEgMzcuNzM3QzM1LjAyMzkgMzcuNTQ1OCAzNS4wMjM5IDM3LjI5MDggMzUuMTUxNCAzNy4wMzU4QzM2LjEwNzYgMzUuNTY5NyAzNi43NDUgMzMuOTc2IDM3LjEyNzUgMzIuMzE4N0MzNy4xOTEyIDMyLjA2MzcgMzcuNDQ2MiAzMS44NzI1IDM3LjcwMTIgMzEuODcyNVpcIlxuICB9XG4pIH0pLCBPWCA9ICgpID0+IC8qIEBfX1BVUkVfXyAqLyBjKFwic3ZnXCIsIHsgdmlld0JveDogXCIwIDAgNDggNDhcIiwgZmlsbDogXCJub25lXCIsIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsIGNoaWxkcmVuOiAvKiBAX19QVVJFX18gKi8gYyhcbiAgXCJwYXRoXCIsXG4gIHtcbiAgICBmaWxsOiBcImN1cnJlbnRDb2xvclwiLFxuICAgIGZpbGxSdWxlOiBcImV2ZW5vZGRcIixcbiAgICBjbGlwUnVsZTogXCJldmVub2RkXCIsXG4gICAgZDogXCJNMTAuMDcwOCAyMi44NjcyVjE3LjI3NDNIMTkuNDE1OVYxNS44NTg0SDcuNTkyOTFWMTIuNjcyNkgyMC4zMzYzVjExLjI1NjZINS41Mzk4MkwzLjQxNTkzIDcuMjIxMjRWMS40MTU5M0g2LjQ2MDE4VjUuODA1MzFIMTMuMzI3NFYxLjQxNTkzSDE3LjY0NlY1LjgwNTMxSDI0LjE1OTNWMS40MTU5M0gyNy45MTE1VjBIMjIuNzQzM1Y0LjM4OTM5SDE4Ljk5MTFWMEgxMS45MTE1VjQuMzg5MzlINy44NzYxVjBIMlY3LjU3NTIyTDQuNjkwMjcgMTIuNjcyNkg2LjE3Njk4VjE3LjIwMzVIOC42NTQ4NlYyMi43OTY1QzguNjU0ODYgMjcuNTM5OCA3LjAyNjU0IDM0LjMzNjMgNi41MzA5NyAzNi4yNDc4SDQuMjY1NDhWNDEuMjc0M0gyVjQ3LjcxNjhIMTguNDk1NlY0Ni4zMDA5SDMuNDE1OTNWNDIuNjE5NEgxOC43Nzg3VjQxLjIwMzVINS42ODE0MVYzNy41MjIxSDIwLjc2MVYzNi4xMDYySDguMDE3NjlDOC4wNDMzNSAzNS45OTYyIDguMDcxODUgMzUuODc0OSA4LjEwMjgzIDM1Ljc0M0M4LjY3MDM1IDMzLjMyNyAxMC4wNzA4IDI3LjM2NSAxMC4wNzA4IDIyLjg2NzJaTTQzLjkxMTUgNDYuNDQyNUM0My44NDA3IDQzLjgyMzEgNDMuMjAzNSA0MS4xMzI4IDQyLjA3MDggMzguNzI1N0w0MC43MjU2IDM1Ljg5MzlMNDEuNzg3NiAzNC40Nzc5QzQzLjEzMjcgMzIuNjM3MiA0My40ODY3IDMwLjMwMDkgNDIuNjM3MSAyOC4yNDc5QzQxLjUwNDQgMjUuNDE2IDM5LjM4MDUgMjEuNTkzIDM2LjI2NTUgMTYuOTkxMkMzNy40NjkgMTYuOTkxMiAzOS4wMjY1IDE3LjI3NDQgNDAuMjMwMSAxOC40MDcxQzQxLjA3OTYgMTkuMTg1OSA0Mi4zNTQgMTkuMjU2NyA0My4yMDM1IDE4LjQ3OEw0NC45NzM0IDE2Ljg0OTZWMTQuMDE3N0wzNi44MzE4IDMuOTY0NjdIMzQuNzc4N1YwLjA3MDg2NTVIMzMuNTc1MkwyOS4wNDQyIDMuMzI3NUMyNi45OTExIDQuNjAxODQgMjUuMzYyOCA2LjM3MTc2IDI0LjM3MTcgOC4zNTQwNUMyMi4zMTg2IDEyLjMxODcgMjAuMDUzMSAxOS42ODE1IDIwLjkwMjYgMzEuOTI5M1YzMi4xNDE3TDIzLjU5MjkgMzYuMDM1NUwyMi4yNDc4IDM5LjI5MjFDMjEuMjU2NiA0MS42OTkyIDIwLjY5MDIgNDQuMzE4NiAyMC42OTAyIDQ2LjkzODFWNDhIMjEuMzk4Mkg0My45MTE1SDQ2LjEwNjJWNDYuNTg0MUg0My45MTE1VjQ2LjQ0MjVaTTIyLjI0NzggMzEuNTA0NUMyMS40NjkgMTkuNjgxNSAyMy42NjM3IDEyLjY3MjYgMjUuNTc1MiA4Ljg0OTYyQzI2LjQ5NTYgNy4wNzk3MSAyNy45MTE1IDUuNTIyMTkgMjkuODIzIDQuMzE4NjVMMzMuMzYyOCAxLjc2OTk4VjUuMjM5MDJIMzYuMTIzOUw0My41NTc1IDE0LjM3MTdWMTYuMDcwOUw0Mi4yMTI0IDE3LjI3NDRDNDEuOTI5MiAxNy41NTc2IDQxLjQzMzYgMTcuNDg2OCA0MS4xNTA0IDE3LjIwMzZDMzkuOTQ2OSAxNi4wNzA4IDM4LjE3NyAxNS40MzM3IDM2LjEyMzkgMTUuNDMzN0gzNi4wNTMxQzM1LjY5OTEgMTUuNDMzNyAzNS4yNzQzIDE1LjI5MjEgMzUuMDYxOSAxNS4wMDg5QzM0Ljc3ODcgMTQuNzI1NyAzNC42MzcxIDE0LjM3MTcgMzQuNjM3MSAxNC4wMTc3SDMzLjIyMTJDMzMuMjIxMiAxNC42NTQ5IDMzLjQzMzYgMTUuMjIxMyAzMy43ODc2IDE1LjcxNjlDMzguNDYwMSAyMi40NDI1IDQwLjQ0MjUgMjYuNDc3OSA0MS4yOTIgMjguNjAxOEM0MS45MjkyIDMwLjIzMDIgNDEuNjQ2IDMyLjA3MDggNDAuNTg0IDMzLjQ4NjhMMzkuNTIyMSAzNC45NzM1TDI0LjY1NDkgMzQuOTAyN0wyMi4yNDc4IDMxLjUwNDVaTTIzLjUyMjEgMzkuNjQ2MUMyMi42MTExIDQxLjgxODYgMjIuMTg1NiA0NC4wNjA1IDIyLjEwODQgNDYuMzcxN0g0Mi40OTU1QzQyLjQyNDcgNDMuOTY0NiA0MS44NTg0IDQxLjQ4NjggNDAuNzk2NCAzOS4yOTIxTDM5LjQ1MTMgMzYuNDYwMkwyNC44NjcyIDM2LjM4OTRMMjMuNTIyMSAzOS42NDYxWk0zNi4yNjU1IDguNzA3OTlDMzYuMjY1NSA5LjI3NDM2IDM1Ljc2OTkgOS43Njk5NCAzNS4yMDM1IDkuNzY5OTRDMzQuNjM3MSA5Ljc2OTk0IDM0LjE0MTYgOS4yNzQzNiAzNC4xNDE2IDguNzA3OTlDMzQuMTQxNiA4LjE0MTYyIDM0LjYzNzEgNy42NDYwNSAzNS4yMDM1IDcuNjQ2MDVDMzUuNzY5OSA3LjY0NjA1IDM2LjI2NTUgOC4xNDE2MiAzNi4yNjU1IDguNzA3OTlaXCJcbiAgfVxuKSB9KSwgZlggPSAoKSA9PiAvKiBAX19QVVJFX18gKi8gYyhcInN2Z1wiLCB7IHZpZXdCb3g6IFwiMCAwIDQ4IDQ4XCIsIGZpbGw6IFwibm9uZVwiLCB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLCBjaGlsZHJlbjogLyogQF9fUFVSRV9fICovIGMoXG4gIFwicGF0aFwiLFxuICB7XG4gICAgZmlsbDogXCJjdXJyZW50Q29sb3JcIixcbiAgICBmaWxsUnVsZTogXCJldmVub2RkXCIsXG4gICAgY2xpcFJ1bGU6IFwiZXZlbm9kZFwiLFxuICAgIGQ6IFwiTTM1LjIwOTQgNDYuNzUxNkMzNS45NTg0IDQ2Ljc1MTYgMzYuNTgyNiA0Ni4xMjc0IDM2LjU4MjYgNDUuMzc4NEgzNi41MjAxVjM3LjgyNTdIMzcuNzY4NVY0NS4zNzg0QzM3Ljc2ODUgNDYuODE0IDM2LjU4MjUgNDggMzUuMTQ2OSA0OEg2LjYyMTU5QzUuMTg1OTYgNDggNCA0Ni44MTQgNCA0NS4zNzg0VjYuMTE3MDNDNCA0LjY4MTQgNS4xODU5NiAzLjQ5NTQ1IDYuNjIxNTkgMy40OTU0NUgxNy43MzIxVjEuNzQ3NzJIMjAuMzUzN1YwSDIxLjYwMjFWMS43NDc3MkgyNC4yMjM2VjMuNDk1NDVIMzUuMjA5NEMzNi42NDUgMy40OTU0NSAzNy44MzA5IDQuNjgxNCAzNy44MzA5IDYuMTE3MDNWMTMuODU3SDM2LjU4MjZWNi4xMTcwM0MzNi41ODI2IDUuMzY4MDEgMzUuOTU4NCA0Ljc0MzgyIDM1LjIwOTQgNC43NDM4MkgyNC4yMjM2VjEwLjQyMzlIMjUuMzQ3MlYxMS42NzIzSDI0LjIyMzZIMTcuNzk0NUgxNi42NzFWMTAuNDIzOUgxNy43OTQ1VjQuNzQzODJINi42ODRDNS45MzQ5NyA0Ljc0MzgyIDUuMzEwNzggNS4zNjgwMSA1LjMxMDc4IDYuMTE3MDNWNDUuMzc4NEM1LjMxMDc4IDQ2LjEyNzQgNS45MzQ5NyA0Ni43NTE2IDYuNjg0IDQ2Ljc1MTZIMzUuMjA5NFpNMjIuOTc1MyAyLjk5NjFIMTkuMDQyOVYxMC40MjM5SDIyLjk3NTNWMi45OTYxWk03LjU1Nzg2IDYuOTI4NDdIMTYuNzMzNFY4LjE3Njg0SDguODA2MjRWNDMuMzE4NkgzMy4xNDk1VjM3Ljk1MDZIMzQuMzM1NVY0NC41MDQ1SDcuNTU3ODZWNi45Mjg0N1pNNDIuNDQ5OSAxOC43ODhDMzguNTc5OSAxNC45MTggMzIuMzM4MSAxNC45MTggMjguNTMwNSAxOC43ODhDMjQuNjYwNiAyMi42NTc5IDI0LjY2MDYgMjguODk5OCAyOC41MzA1IDMyLjcwNzNDMzAuNDY1NSAzNC42NDIzIDMyLjk2MjMgMzUuNTc4NiAzNS41MjE0IDM1LjU3ODZDMzguMDE4MiAzNS41Nzg2IDQwLjU3NzMgMzQuNjQyMyA0Mi41MTIzIDMyLjcwNzNDNDYuMzE5OSAyOC44Mzc0IDQ2LjMxOTggMjIuNTk1NSA0Mi40NDk5IDE4Ljc4OFpNNDEuNjM4NSAzMS44MzM1QzM4LjI2NzggMzUuMjA0MSAzMi43NzUgMzUuMjA0MSAyOS40NjY4IDMxLjgzMzVDMjYuMDk2MiAyOC40NjI5IDI2LjA5NjIgMjMuMDMyNCAyOS40NjY4IDE5LjY2MThDMzIuODM3NCAxNi4yOTEyIDM4LjI2NzggMTYuMjkxMiA0MS42Mzg1IDE5LjY2MThDNDQuOTQ2NiAyMy4wMzI0IDQ0Ljk0NjYgMjguNDYyOSA0MS42Mzg1IDMxLjgzMzVaTTM0LjgzNDkgMjYuMjE1OEwzMy41ODY1IDI0Ljk2NzVMMzIuNzEyNiAyNS44NDEzTDM0LjgzNDkgMjcuOTYzNUwzOC4xNDMxIDI0LjY1NTRMMzcuMjY5MiAyMy43ODE1TDM0LjgzNDkgMjYuMjE1OFpNMzQuMzM1NCAxMy44NTY5VjYuOTI4NDdIMjUuMzQ3MlY4LjE3Njg0SDMzLjE0OTVWMTMuODU2OUgzNC4zMzU0Wk0yNy44NDM5IDE1Ljc5MkgxOS4wNDI4VjE3LjA0MDRIMjcuODQzOVYxNS43OTJaTTE4LjU0MzYgMjIuOTA3N0gyMy45MTE2VjI0LjE1NjFIMTguNTQzNlYyMi45MDc3Wk0yNC4xNjEzIDMwLjA4NTdIMTguNTQzNlYzMS4zMzQxSDI0LjE2MTNWMzAuMDg1N1pNMTguNTQzNiAzNy4yMDE0SDI5LjI3OTZWMzguNDQ5OEgxOC41NDM2VjM3LjIwMTRaTTE2LjEwOTIgMTMuOTE5NEgxMS4xNzgxVjE4Ljg1MDVIMTYuMTA5MlYxMy45MTk0Wk0xNC44NjA4IDE3LjYwMjFIMTIuNDI2NVYxNS4xNjc4SDE0Ljg2MDhWMTcuNjAyMVpNMTEuMTc4MSAyMS4wOTc3SDE2LjEwOTJWMjYuMDI4N0gxMS4xNzgxVjIxLjA5NzdaTTEyLjQyNjUgMjQuNzgwNEgxNC44NjA4VjIyLjM0NkgxMi40MjY1VjI0Ljc4MDRaTTE2LjEwOTIgMjguMjEzMUgxMS4xNzgxVjMzLjE0NDJIMTYuMTA5MlYyOC4yMTMxWk0xNC44NjA4IDMxLjg5NThIMTIuNDI2NVYyOS40NjE1SDE0Ljg2MDhWMzEuODk1OFpNMTYuMTA5MiA0MC4zMjI0SDExLjE3ODFWMzUuMzkxNEgxNi4xMDkyVjQwLjMyMjRaTTE0Ljg2MDggMzYuNTc3M0gxMi40MjY1VjM5LjAxMTZIMTQuODYwOFYzNi41NzczWlwiXG4gIH1cbikgfSksIGdYID0gKCkgPT4gLyogQF9fUFVSRV9fICovIGMoXCJzdmdcIiwgeyB2aWV3Qm94OiBcIjAgMCA0OCA0OFwiLCBmaWxsOiBcIm5vbmVcIiwgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiwgY2hpbGRyZW46IC8qIEBfX1BVUkVfXyAqLyBjKFxuICBcInBhdGhcIixcbiAge1xuICAgIGZpbGw6IFwiY3VycmVudENvbG9yXCIsXG4gICAgZmlsbFJ1bGU6IFwiZXZlbm9kZFwiLFxuICAgIGNsaXBSdWxlOiBcImV2ZW5vZGRcIixcbiAgICBkOiBcIk01LjMzOTIyIDM2LjY1MTlWNDEuMzAzOUM1LjMzOTIyIDQyLjA3OTIgNS45NzM1NyA0Mi43MTM2IDYuODE5MzggNDIuNzEzNkgyMy4yNDIzVjQ0LjEyMzNINi44MTkzOEM1LjI2ODcyIDQ0LjEyMzMgNCA0Mi44NTQ2IDQgNDEuMzAzOVYyLjgxOTM4QzQgMS4yNjg3MiA1LjI2ODcyIDAgNi44MTkzOCAwSDI2LjgzN0MyOC4zODc2IDAgMjkuNjU2NCAxLjI2ODcyIDI5LjY1NjQgMi44MTkzOFYxMS4yMDdIMjguMjQ2N1Y4Ljk1MTU0SDUuMzM5MjJWMzUuMjQyMkgxOC43MzEzVjM2LjY1MTlINS4zMzkyMlpNMjYuODM3IDEuNDA5NjlINi44MTkzOEM1Ljk3MzU3IDEuNDA5NjkgNS4zMzkyMiAyLjA0NDA1IDUuMzM5MjIgMi44MTkzOFY3LjQ3MTM2SDI4LjI0NjdWMi44MTkzOEMyOC4yNDY3IDIuMDQ0MDUgMjcuNjEyMyAxLjQwOTY5IDI2LjgzNyAxLjQwOTY5Wk00MS40MjczIDI4LjA1MjlDNDIuNzY2NSAyOC4xOTM4IDQzLjgyMzcgMjkuMzkyMSA0My44MjM3IDMwLjg3MjJDNDMuODIzNyAzMC44ODcxIDQzLjgyODQgMzAuOTU3NyA0My44MzY1IDMxLjA3NzhMNDMuODM2NSAzMS4wNzg2QzQzLjkwNDUgMzIuMDk3OCA0NC4yMDk0IDM2LjY2NTYgNDMuODk0MiA0MC45NTE1QzQzLjY4MjggNDIuMjkwNyA0My4xODk0IDQzLjg0MTQgNDIuNzY2NSA0NC44MjgyQzQyLjU1NSA0NS4zOTIxIDQyLjQ4NDYgNDUuODg1NCA0Mi40ODQ2IDQ2LjQ0OTNWNDhINDEuMDc0OVY0Ni40NDkzQzQxLjA3NDkgNDUuNjc0IDQxLjE0NTMgNDUuMDM5NiA0MS40MjczIDQ0LjMzNDhDNDEuNzA5MiA0My41NTk0IDQyLjIwMjYgNDIuMDc5MyA0Mi40MTQgNDAuNzQwMUM0My4wNzM1IDM2LjQ1MzggNDIuNzQ1OCAzMS42NzQxIDQyLjcwMDggMzEuMDE4MVYzMS4wMThMNDIuNjk2NSAzMC45NTM5TDQyLjY5NiAzMC45NDI3QzQyLjY5NiAzMC4xNjc0IDQyLjEzMjEgMjkuNTMzIDQxLjQ5NzcgMjkuNDYyNUM0MS4xNDUzIDI5LjQ2MjUgNDAuNzIyNCAyOS41MzMgNDAuNDQwNSAyOS44MTVDNDAuMDg4MSAzMC4wMjY0IDM5Ljk0NzEgMzAuMzc4OSAzOS45NDcxIDMwLjgwMThWMzEuOTI5NUgzOC41Mzc0VjMwLjMwODRWMjguMTkzOEMzOC41Mzc0IDI3Ljg0MTQgMzguMzk2NCAyNy40ODkgMzguMTE0NSAyNy4yMDcxQzM3LjgzMjYgMjYuOTk1NiAzNy41NTA2IDI2Ljg1NDYgMzcuMTI3NyAyNi44NTQ2QzM2LjM1MjQgMjYuOTI1MSAzNS43ODg1IDI3LjU1OTUgMzUuNzg4NSAyOC4zMzQ4VjMxLjA4MzdIMzQuMzc4OFYyOC4zMzQ4VjI4LjI2NDNWMjcuMjA3MUMzNC4zNzg4IDI2Ljg1NDYgMzQuMjM3OCAyNi41MDIyIDMzLjk1NTkgMjYuMjIwM0MzMy42NzQgMjUuOTM4MyAzMy4zMjE2IDI1Ljc5NzQgMzIuOTY5MSAyNS43OTc0QzMyLjI2NDMgMjUuNzk3NCAzMS42Mjk5IDI2LjM2MTIgMzEuNjI5OSAyNy4xMzY2VjMwLjUxOThIMzAuMjIwMlYyNy4xMzY2VjE3LjA1NzNDMzAuMjIwMiAxNi4zNTI1IDI5LjY1NjQgMTUuNzE4MSAyOS4wMjIgMTUuNzE4MUMyOC42Njk2IDE1LjcxODEgMjguMzg3NyAxNS44NTkgMjguMTc2MiAxNi4wNzA1QzI3Ljk2NDggMTYuMzUyNCAyNy44MjM4IDE2LjcwNDkgMjcuODIzOCAxNy4wNTczTDI3Ljc1MzMgMzQuMzI2TDI3LjExODkgMzQuMzk2NUMyNS40NDQgMzQuNjY0NSAyNC43ODggMzMuMzQwMyAyNC4yNDI5IDMyLjI0MDFDMjQuMjE0NSAzMi4xODI5IDI0LjE4NjUgMzIuMTI2MyAyNC4xNTg2IDMyLjA3MDVDMjQuMTIzNyAzMi4wMDA3IDI0LjA4ODggMzEuOTI5OCAyNC4wNTM2IDMxLjg1ODNMMjQuMDUzNSAzMS44NTgyTDI0LjA1MzUgMzEuODU4QzIzLjgwNDYgMzEuMzUyNiAyMy41NDIzIDMwLjgxOTggMjMuMTcxOCAzMC40NDkzQzIyLjMyNiAyOS41MzMgMjEuNzYyMSAyOS40NjI2IDIwLjc3NTMgMzAuMDk2OUMyMC45MTYzIDMyLjM1MjQgMjIuNDY3IDM2Ljc5MjkgMjQuNjUyIDM5LjE4OTRDMjcuNjgyOCA0Mi40MzE3IDI3Ljg5NDMgNDMuOTgyNCAyNy44OTQzIDQ1LjM5MlY0Ny45Mjk1SDI2LjQ4NDZWNDUuMzkyQzI2LjQ4NDYgNDQuNTQ2MiAyNi40ODQ2IDQzLjIwNyAyMy41OTQ3IDQwLjEwNTdDMjAuOTg2OCAzNy4zNTY4IDE5LjM2NTcgMzIuMTQxIDE5LjM2NTcgMjkuNzQ0NVYyOS4zOTIxTDE5Ljc4ODUgMjkuMDM5N0MyMS40MDk3IDI3LjkxMTkgMjIuNzQ4OSAyOC4wNTI5IDI0LjE1ODYgMjkuNDYyNUMyNC42MDU2IDI5Ljk2NTQgMjQuOTE5NyAzMC41NTY4IDI1LjIwNjIgMzEuMDk2NEMyNS4yODEyIDMxLjIzNzUgMjUuMzU0MiAzMS4zNzUxIDI1LjQyNzMgMzEuNTA2NkwyNS41MDU0IDMxLjY1MDJMMjUuNTQ1OCAzMS43MjQ1QzI1Ljg5MjMgMzIuMzYyOCAyNi4wODkzIDMyLjcyNTYgMjYuMzQzNiAzMi45MTYzTDI2LjQxNDEgMTcuMDU3M0MyNi40MTQxIDE2LjM1MjUgMjYuNjI1NiAxNS42NDc2IDI3LjExODkgMTUuMTU0MkMyNy42MTIzIDE0LjU5MDMgMjguMjQ2NyAxNC4zMDg0IDI4Ljk1MTUgMTQuMzA4NEMzMC4zNjEyIDE0LjMwODQgMzEuNDg4OSAxNS41MDY2IDMxLjQ4ODkgMTcuMDU3M1YyNC43NDAxQzMxLjg0MTQgMjQuNTI4NiAzMi4zMzQ4IDI0LjM4NzcgMzIuODI4MiAyNC4zODc3QzMzLjYwMzUgMjQuMzg3NyAzNC4zMDgzIDI0Ljc0MDEgMzQuODAxNyAyNS4yMzM1QzM1LjA4MzYgMjUuNDQ0OSAzNS4yMjQ2IDI1LjcyNjggMzUuMzY1NiAyNi4wMDg4TDM1LjM2NTYgMjYuMDA4OEMzNS43ODg1IDI1LjY1NjQgMzYuMzUyNCAyNS40NDQ5IDM2LjkxNjMgMjUuNDQ0OUMzNy42MjExIDI1LjQ0NDkgMzguMzI1OSAyNS43MjY5IDM4Ljg4OTggMjYuMjIwM0MzOS40NTM3IDI2LjcxMzcgMzkuNzM1NiAyNy40MTg1IDM5LjczNTYgMjguMTkzOFYyOC40MDUzQzQwLjIyOSAyOC4xMjMzIDQwLjg2MzQgMjcuOTgyNCA0MS40MjczIDI4LjA1MjlaTTE4LjY2MDggMzguOTc4SDE0LjkyNTFWNDAuMzg3NkgxOC42NjA4VjM4Ljk3OFpNMTQuOTI1MSAzLjczNTcxSDE4LjY2MDhWNS4xNDUzOUgxNC45MjUxVjMuNzM1NzFaTTI0LjU4MTUgMTQuODAxN0gxNy4xODA2TDE5LjM2NTcgMTIuNjE2N0wxOC4zNzg5IDExLjYyOTlMMTQuNTAyMiAxNS41MDY2TDE4LjM3ODkgMTkuMzEyN0wxOS4zNjU3IDE4LjMyNkwxNy4xODA2IDE2LjIxMTRIMjQuNTgxNVYxNC44MDE3Wk0zOS43MzU2IDE5LjMxMjdMMzguNzQ4OSAxOC4zMjZMNDAuOTMzOSAxNi4yMTE0SDMzLjUzM1YxNC44MDE3SDQwLjkzMzlMMzguODE5NCAxMi42MTY3TDM5LjczNTYgMTEuNjI5OUw0My42MTIzIDE1LjQzNjFMMzkuNzM1NiAxOS4zMTI3WlwiXG4gIH1cbikgfSksIENYID0gKCkgPT4gLyogQF9fUFVSRV9fICovIGMoXCJzdmdcIiwgeyB2aWV3Qm94OiBcIjAgMCA0OCA0OFwiLCBmaWxsOiBcIm5vbmVcIiwgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiwgY2hpbGRyZW46IC8qIEBfX1BVUkVfXyAqLyBjKFxuICBcInBhdGhcIixcbiAge1xuICAgIGZpbGw6IFwiY3VycmVudENvbG9yXCIsXG4gICAgZmlsbFJ1bGU6IFwiZXZlbm9kZFwiLFxuICAgIGNsaXBSdWxlOiBcImV2ZW5vZGRcIixcbiAgICBkOiBcIk00Ny4wMTkxIDIwLjM3Nkw0Ny45MzQ2IDIxLjI5MTVMNDYuNDMwNSAyMi45OTE4TDQ4IDI0LjU2MTNMNDcuMDg0NSAyNS40NzY4TDQ1LjI1MzQgMjMuNjQ1OEg0Mi4wNDlDNDEuOTgzNyAyNy4xMTE3IDQxLjAwMjcgMzAuNTc3NyAzOS4yMzcgMzMuNTg1OEMzNy45MjkxIDM1Ljg3NDcgMzYuMTYzNSAzNy44MzY1IDM0LjEzNjIgMzkuNDcxNEwzNy40NzE0IDQ1LjQ4NzdMMzYuMzU5NyA0Ni4xNDE3TDMzLjA4OTkgNDAuMzIxNUMzMS43ODIgNDEuMzAyNSAzMC4yNzc5IDQyLjA4NzIgMjguNzczOCA0Mi42NzU3QzI2LjI4ODggNDMuNTkxMyAyMy43Mzg0IDQ0LjExNDQgMjEuMDU3MiA0NC4xMTQ0QzE2LjYxMDQgNDQuMTE0NCAxMi40MjUxIDQyLjY3NTggOS4wMjQ1MyA0MC4zMjE1TDUuNzU0NzggNDYuMjA3MUw0LjY0MzA1IDQ1LjU1MzFMNy45NzgyMSAzOS41MzY4QzMuMTM4OTcgMzUuNjc4NSAwIDI5LjcyNzUgMCAyMy4wNTcyQzAgMTEuNDE2OSA5LjQxNjkgMiAyMS4wNTcyIDJDMzEuNDU1IDIgNDAuMjE4IDkuNDU1MDYgNDEuODUyOCAxOS43MjIxTDQwLjU0NDkgMTkuOTE4M0MzOS4wNDA5IDEwLjIzOTggMzAuODAxMSAzLjI0MjUyIDIxLjA1NzIgMy4yNDI1MkMxMC4yMDE2IDMuMjQyNTIgMS4zMDc5IDEyLjA3MDkgMS4zMDc5IDIyLjk5MThDMS4zMDc5IDMzLjg0NzQgMTAuMTM2MiA0Mi43NDEyIDIxLjA1NzIgNDIuNzQxMkMyMy42MDc2IDQyLjc0MTIgMjYuMDI3MyA0Mi4yODM0IDI4LjMxNjEgNDEuMzY3OEMzMi40MzYgMzkuNzMzIDM1Ljk2NzMgMzYuNzkwMiAzOC4xOTA3IDMyLjkzMTlDMzkuODI1NiAzMC4xMTk5IDQwLjc0MTEgMjYuOTE1NSA0MC44NzE5IDIzLjY0NThIMzguMDU5OUMzOC4wMjcyIDIzLjk3MjggMzcuOTk0NSAyNC4yODM0IDM3Ljk2MTkgMjQuNTk0QzM3LjkyOTIgMjQuOTA0NiAzNy44OTY1IDI1LjIxNTMgMzcuODYzOCAyNS41NDIyQzM2Ljg4MjggMzEuNzU0OCAzMi42MzIyIDM2LjkyMSAyNi43NDY2IDM5LjAxMzZDMjQuOTE1NSAzOS42Njc2IDIzLjAxOTEgMzkuOTk0NiAyMS4wNTcyIDM5Ljk5NDZDMTEuNjQwMyAzOS45OTQ2IDQuMDU0NSAzMi4zNDMzIDQuMDU0NSAyMi45OTE4QzQuMDU0NSAxMy41NzUgMTEuNzA1NyA1Ljk4OTEyIDIxLjA1NzIgNS45ODkxMkMyOS4xNjYyIDUuOTg5MTIgMzYuMTYzNSAxMS42Nzg1IDM3LjczMyAxOS41OTEzTDM2LjQ5MDUgMTkuODUyOUMzNS4wNTE4IDEyLjUyODYgMjguNTc3NyA3LjIzMTYxIDIxLjEyMjYgNy4yMzE2MUMxMi40OTA1IDcuMjMxNjEgNS40Mjc4IDE0LjI5NDMgNS40Mjc4IDIyLjkyNjRDNS40Mjc4IDMxLjU1ODYgMTIuNDkwNSAzOC42MjEyIDIxLjEyMjYgMzguNjIxMkMyMi44ODgzIDM4LjYyMTIgMjQuNjU0IDM4LjI5NDMgMjYuMzU0MiAzNy43MDU3QzMxLjg0NzQgMzUuNzQzOSAzNS43NzExIDMxLjAzNTQgMzYuNjIxMiAyNS4yODA3QzM2LjYyNzIgMjUuMjI2NyAzNi42MzMyIDI1LjE3MzMgMzYuNjM5MiAyNS4xMjAzQzM2LjY5ODEgMjQuNTk1NiAzNi43NTIgMjQuMTE0OSAzNi43NTIgMjMuNTgwNEgzMy45NDAxQzMzLjc0MzkgMjcuODk2NCAzMS40NTUgMzEuNzU0OCAyNy43OTI5IDMzLjk3ODJDMjUuNzY1NyAzNS4yMjA3IDIzLjQxMTQgMzUuODc0NyAyMS4wNTcyIDM1Ljg3NDdDMTMuOTI5MiAzNS44NzQ3IDguMTc0MzggMzAuMTE5OSA4LjE3NDM4IDIyLjk5MThDOC4xNzQzOCAxNS44NjM4IDEzLjkyOTIgMTAuMTA5IDIxLjA1NzIgMTAuMTA5QzI2LjgxMiAxMC4xMDkgMzEuOTc4MiAxMy45NjczIDMzLjQ4MjMgMTkuNTkxM0wzMi4yMzk4IDE5LjkxODNDMzAuODY2NSAxNC44ODI4IDI2LjI4ODggMTEuMzUxNSAyMS4wNTcyIDExLjM1MTVDMTQuNzEzOSAxMS4zNTE1IDkuNDgyMjkgMTYuNTE3NyA5LjQ4MjI5IDIyLjkyNjRDOS40ODIyOSAyOS4yNjk3IDE0LjY0ODUgMzQuNTAxNCAyMS4wNTcyIDM0LjUwMTRDMjMuMTQ5OSAzNC41MDE0IDI1LjI0MjUgMzMuOTEyOCAyNy4wNzM2IDMyLjgwMTFDMzAuMzQzMyAzMC43NzM5IDMyLjM3MDYgMjcuMzA3OSAzMi41NjY4IDIzLjUxNUgyOS43NTQ4QzI5LjQyNzggMjguMDkyNiAyNS42MzQ5IDMxLjY4OTQgMjAuOTkxOCAzMS42ODk0QzE2LjA4NzIgMzEuNjg5NCAxMi4xNjM1IDI3LjcwMDMgMTIuMTYzNSAyMi44NjFDMTIuMTYzNSAxNy45NTY0IDE2LjE1MjYgMTQuMDMyNyAyMC45OTE4IDE0LjAzMjdDMjQuNTIzMiAxNC4wMzI3IDI3LjcyNzUgMTYuMTI1NCAyOS4xMDA4IDE5LjM5NTFMMjcuOTIzNyAxOS45MTgzQzI2LjY4MTIgMTcuMTA2MyAyNCAxNS4zNDA2IDIwLjk5MTggMTUuMzQwNkMxNi44NzE5IDE1LjM0MDYgMTMuNDcxNCAxOC43NDEyIDEzLjQ3MTQgMjIuODYxQzEzLjQ3MTQgMjYuOTgwOSAxNi44NzE5IDMwLjM4MTUgMjAuOTkxOCAzMC4zODE1QzI0Ljk4MDkgMzAuMzgxNSAyOC4xODUzIDI3LjM3MzMgMjguNTEyMyAyMy41MTVIMjUuNzAwM0MyNS40Mzg3IDI1LjgwMzggMjMuNDExNCAyNy41Njk1IDIxLjA1NzIgMjcuNTY5NUMxOC40NDE0IDI3LjU2OTUgMTYuMzQ4OCAyNS40NzY4IDE2LjM0ODggMjIuODYxQzE2LjM0ODggMjAuMjQ1MiAxOC40NDE0IDE4LjE1MjYgMjEuMDU3MiAxOC4xNTI2QzIyLjE2ODkgMTguMTUyNiAyMy4yMTUzIDE4LjU0NSAyNC4wNjU0IDE5LjI2NDNMMjMuMjE1MyAyMC4yNDUyQzIyLjU2MTMgMTkuNzIyMSAyMS43NzY2IDE5LjQ2MDUgMjAuOTkxOCAxOS40NjA1QzE5LjA5NTQgMTkuNDYwNSAxNy41OTEzIDIwLjk2NDYgMTcuNTkxMyAyMi44NjFDMTcuNTkxMyAyNC43NTc1IDE5LjA5NTQgMjYuMjYxNiAyMC45OTE4IDI2LjI2MTZDMjIuODg4MyAyNi4yNjE2IDI0LjM5MjQgMjQuNzU3NSAyNC4zOTI0IDIyLjg2MVYyMi4yMDcxSDQ1LjE4OEw0Ny4wMTkxIDIwLjM3NlpNMjAuOTkxOCAyMy43NzY2QzIwLjQ2ODcgMjMuNzc2NiAyMC4wNzYzIDIzLjM4NDMgMjAuMDc2MyAyMi44NjExQzIwLjA3NjMgMjIuNDAzMyAyMC40Njg3IDIxLjk0NTYgMjAuOTkxOCAyMS45NDU2QzIxLjUxNSAyMS45NDU2IDIxLjkwNzQgMjIuMzM3OSAyMS45MDc0IDIyLjg2MTFDMjEuOTA3NCAyMy4zODQzIDIxLjUxNSAyMy43NzY2IDIwLjk5MTggMjMuNzc2NlpcIlxuICB9XG4pIH0pLCBtWCA9ICgpID0+IC8qIEBfX1BVUkVfXyAqLyBjKFwic3ZnXCIsIHsgdmlld0JveDogXCIwIDAgNDggNDhcIiwgZmlsbDogXCJub25lXCIsIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsIGNoaWxkcmVuOiAvKiBAX19QVVJFX18gKi8gYyhcbiAgXCJwYXRoXCIsXG4gIHtcbiAgICBmaWxsOiBcImN1cnJlbnRDb2xvclwiLFxuICAgIGZpbGxSdWxlOiBcImV2ZW5vZGRcIixcbiAgICBjbGlwUnVsZTogXCJldmVub2RkXCIsXG4gICAgZDogXCJNNDcuMDYwMyAyMS4zNjE0TDQ4IDIyLjMwMTJMNDYuMTIwNSAyMy44MTkzTDQ3LjcxMDkgMjUuNDA5N0w0Ni43NzExIDI2LjM0OTRMNDQuOTYzOSAyNC41NDIySDQxLjc4MzFDNDEuNjM4NiAyOC4wODQ0IDQwLjY5ODggMzEuNDgyIDM4Ljk2MzggMzQuNDQ1OEMzNi41NzgzIDM4LjQ5NCAzMi44OTE2IDQxLjYwMjUgMjguNTU0MyA0My4zMzc0QzI2LjA5NjQgNDQuMjc3MiAyMy41NjYyIDQ0Ljc4MzIgMjAuODkxNSA0NC43ODMyQzkuMzk3NTMgNDQuNzgzMiAwIDM1LjM4NTYgMCAyMy44OTE2QzAgMTIuMzk3NiA5LjM5NzUzIDMgMjAuODkxNSAzQzMxLjIyODkgMyAzOS45MDM2IDEwLjM3MzUgNDEuNDk0IDIwLjU2NjNMNDAuMjY1MSAyMC43ODMxQzM4Ljc0NyAxMS4yNDEgMzAuNjUwNiA0LjMwMTIgMjAuOTYzOSA0LjMwMTJDMTAuMTkyOCA0LjMwMTIgMS4zNzM0MyAxMy4xMjA1IDEuMzczNDMgMjMuODkxNkMxLjM3MzQzIDM0LjY2MjcgMTAuMTkyOCA0My40ODIgMjAuOTYzOSA0My40ODJDMjMuNDIxNyA0My40ODIgMjUuODA3MiA0Mi45NzU5IDI4LjEyMDUgNDIuMTA4NUMzMi4xNjg3IDQwLjUxODEgMzUuNjM4NSAzNy40ODIgMzcuODc5NSAzMy43MjI5QzM5LjU0MjIgMzAuOTAzNyA0MC40ODIgMjcuNzIyOSA0MC41NTQzIDI0LjQ2OTlIMzcuODA3MkMzNy44MDcyIDI1LjA2MTEgMzcuNzQ3NiAyNS41OTI1IDM3LjY4MjQgMjYuMTcyOEMzNy42NzU5IDI2LjIzMTEgMzcuNjY5MyAyNi4yOSAzNy42NjI3IDI2LjM0OTRDMzYuNzIyOSAzMi40OTQgMzIuNTMwMSAzNy42MjY1IDI2LjY3NDcgMzkuNzIyOUMyNC44Njc0IDQwLjMwMTIgMjIuOTg4IDQwLjY2MjcgMjEuMDM2MiA0MC42NjI3QzExLjcxMDggNDAuNjYyNyA0LjE5MjcyIDMzLjE0NDYgNC4xOTI3MiAyMy44MTkzQzQuMTkyNzIgMTQuNDk0IDExLjc4MzEgNi45NzU5MSAyMS4wMzYyIDYuOTc1OTFDMjguOTg4IDYuOTc1OTEgMzUuOTI3NyAxMi42ODY4IDM3LjUxODEgMjAuNDk0TDM2LjI4OTIgMjAuNzEwOUMzNC44NDM0IDEzLjQ4MTkgMjguNDA5NyA4LjIwNDg0IDIxLjAzNjIgOC4yMDQ4NEMxMi40MzM3IDguMjA0ODQgNS40OTM5NyAxNS4xNDQ2IDUuNDkzOTcgMjMuNzQ3QzUuNDkzOTcgMzIuMzQ5NCAxMi40MzM3IDM5LjI4OTIgMjEuMDM2MiAzOS4yODkyQzIyLjg0MzQgMzkuMjg5MiAyNC41NzgzIDM5IDI2LjI0MDkgMzguNDIxN0MzMS42NjI2IDM2LjU0MjIgMzUuNTY2MiAzMS43NzExIDM2LjQzMzcgMjYuMTMyNkMzNi41MDYgMjUuNjI2NSAzNi41Nzg0IDI1LjA0ODIgMzYuNTc4NCAyNC40Njk5SDMzLjgzMTNDMzMuNjg2NyAyOC42NjI3IDMxLjQ0NTggMzIuNDk0IDI3Ljc1OSAzNC43MzVDMjUuNzM0OSAzNS45NjM5IDIzLjQ5NCAzNi42MTQ1IDIxLjEwODQgMzYuNjE0NUMxNC4wMjQxIDM2LjYxNDUgOC4zMTMyNyAzMC44MzE0IDguMzEzMjcgMjMuODE5M0M4LjMxMzI3IDE2LjczNSAxNC4wOTY0IDExLjAyNDEgMjEuMTA4NCAxMS4wMjQxQzI2LjgxOTMgMTEuMDI0MSAzMS44Nzk1IDE0Ljg1NTQgMzMuMzk3NiAyMC40MjE3TDMyLjE2ODcgMjAuNzgzMUMzMC44Njc1IDE1Ljc5NTIgMjYuMjQxIDEyLjMyNTMgMjEuMTA4NCAxMi4zMjUzQzE0Ljc0NyAxMi4zMjUzIDkuNjE0NDIgMTcuNDU3OCA5LjYxNDQyIDIzLjgxOTNDOS42MTQ0MiAzMC4xODA4IDE0Ljc0NyAzNS4zMTMzIDIxLjEwODQgMzUuMzEzM0MyMy4yNzcxIDM1LjMxMzMgMjUuMzAxMiAzNC43MzUgMjcuMTA4NSAzMy42NTA2QzMwLjM2MTUgMzEuNjI2NSAzMi4zODU2IDI4LjIyOSAzMi42MDI0IDI0LjQ2OTlIMjkuODU1NEMyOS41NjYzIDI5LjAyNDEgMjUuODA3MiAzMi41NjYzIDIxLjE4MDcgMzIuNTY2M0MxNi4zMzczIDMyLjU2NjMgMTIuNDMzNyAyOC42NjI3IDEyLjQzMzcgMjMuODE5M0MxMi40MzM3IDE4Ljk3NTkgMTYuMzM3MyAxNS4wNzIzIDIxLjE4MDcgMTUuMDcyM0MyNC42NTA2IDE1LjA3MjMgMjcuODMxMyAxNy4xNjg3IDI5LjIwNDggMjAuMzQ5NEwyOC4wNDgyIDIwLjg1NTVDMjYuODE5MyAxOC4xODA4IDI0LjE0NDYgMTYuMzczNSAyMS4xODA3IDE2LjM3MzVDMTcuMDYwMiAxNi4zNzM1IDEzLjczNSAxOS42OTg4IDEzLjczNSAyMy44MTkzQzEzLjczNSAyNy45Mzk4IDE3LjA2MDIgMzEuMjY1MSAyMS4xODA3IDMxLjI2NTFDMjUuMDg0MyAzMS4yNjUxIDI4LjI2NTEgMjguMzAxMiAyOC42MjY1IDI0LjQ2OTlIMjYuMjQwOVYyMy4xNjg3SDQ1LjI1MzFMNDcuMDYwMyAyMS4zNjE0Wk0yMy42Mzg2IDI3LjE0NDZWMjguNTE4MVYyOC41OTA0SDE4LjE0NDZDMTguNDMzNyAyNy4yODkyIDE4LjU3ODMgMjUuOTg4IDE4LjU3ODMgMjQuODMxNEgxNy4zNDk0VjIzLjUzMDFIMTguNTc4M1YyMi42NjI3QzE4LjU3ODMgMjIuMDEyMSAxOC42NTA2IDIxLjQzMzcgMTguNzk1MiAyMUMxOC45Mzk4IDIwLjU2NjMgMTkuMTU2NiAyMC4yNzcxIDE5LjQ0NTcgMTkuOTg4QzE5LjY2MjYgMTkuNjk4OCAyMC4wMjQxIDE5LjQ4MiAyMC4zODU1IDE5LjQwOTdDMjAuNzQ3IDE5LjMzNzQgMjEuMTgwNyAxOS4yNjUxIDIxLjYxNDQgMTkuMjY1MUgyMS42MTQ3QzIxLjk3NiAxOS4yNjUxIDIyLjMzNzQgMTkuMjY1MSAyMi42MjY1IDE5LjMzNzRDMjIuOTE1NiAxOS40MDk2IDIzLjIwNDkgMTkuNDgyIDIzLjQ5NCAxOS42MjY1TDIzLjA2MDIgMjAuOTI3N0wyMy4wNTk5IDIwLjkyNzZDMjIuNjI2MyAyMC43ODMxIDIyLjE5MjcgMjAuNjM4NiAyMS42ODY4IDIwLjYzODZDMjEuMzk3NiAyMC42Mzg2IDIxLjI1MyAyMC42Mzg2IDIxLjAzNjIgMjAuNzEwOUMyMC44MTkzIDIwLjc4MzIgMjAuNjc0NyAyMC44NTU0IDIwLjUzMDEgMjFDMjAuMzg1NiAyMS4xNDQ1IDIwLjMxMzQgMjEuMzYxMSAyMC4yNDEyIDIxLjU3NzhMMjAuMjQxIDIxLjU3ODNDMjAuMTY4NyAyMS43OTUyIDIwLjE2ODYgMjIuMTU2NyAyMC4xNjg2IDIyLjUxODFWMjMuNDU3OUgyMi41NTQyVjI0LjY4NjhIMjAuMTY4NkMyMC4xNjg2IDI0Ljg1OTMgMjAuMTUyMiAyNS4wNDgyIDIwLjEzNSAyNS4yNDU4QzIwLjExNjEgMjUuNDYyMiAyMC4wOTY0IDI1LjY4OSAyMC4wOTY0IDI1LjkxNTdDMjAuMDk2NCAyNi4zNDk0IDIwLjAyNDEgMjYuNzgzMSAxOS45NTE4IDI3LjE0NDZIMjMuNjM4NlpcIlxuICB9XG4pIH0pLCBMWCA9ICgpID0+IC8qIEBfX1BVUkVfXyAqLyBjKFwic3ZnXCIsIHsgdmlld0JveDogXCIwIDAgNDggNDhcIiwgZmlsbDogXCJub25lXCIsIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsIGNoaWxkcmVuOiAvKiBAX19QVVJFX18gKi8gYyhcbiAgXCJwYXRoXCIsXG4gIHtcbiAgICBmaWxsOiBcImN1cnJlbnRDb2xvclwiLFxuICAgIGZpbGxSdWxlOiBcImV2ZW5vZGRcIixcbiAgICBjbGlwUnVsZTogXCJldmVub2RkXCIsXG4gICAgZDogXCJNMjkuMDY1MyA0LjcwMDI5QzI5LjA2NTMgNy40MDY1MyAyNyAxMC42MTEzIDI0LjM2NSAxMC42MTEzQzIxLjczIDEwLjYxMTMgMTkuNjY0NyA3LjQwNjUzIDE5LjY2NDcgNC43MDAyOUMxOS42NjQ3IDIuMTM2NSAyMS44MDEyIDAgMjQuMzY1IDBDMjYuOTI4OCAwIDI5LjA2NTMgMi4xMzY1IDI5LjA2NTMgNC43MDAyOVpNMjcuNzgzMyA0LjcwMDI5QzI3Ljc4MzMgMi44NDg2NiAyNi4yODc4IDEuMjgxOSAyNC4zNjUgMS4yODE5QzIyLjQ0MjEgMS4yODE5IDIwLjg3NTMgMi44NDg2NiAyMC45NDY1IDQuNzAwMjlDMjAuOTQ2NSA2LjY5NDM2IDIyLjU4NDYgOS4zMjkzNyAyNC4zNjUgOS4zMjkzN0MyNi4xNDU0IDkuMzI5MzcgMjcuNzgzMyA2LjY5NDM2IDI3Ljc4MzMgNC43MDAyOVpNMzMuNDA5NCAxOS40NDIxVjI4LjYyOTFDMzMuNDA5NCAyOS45MTEgMzIuMzQxMiAzMC45NzkyIDMwLjk4ODEgMzAuOTc5MkMzMC41NjA4IDMwLjk3OTIgMzAuMjA0NyAzMC45MDggMjkuODQ4NiAzMC42OTQzVjQ2LjM2MkMyOS44NDg2IDQ3LjIxNjYgMjkuMTM2NSA0Ny45Mjg3IDI4LjI4MTkgNDcuOTI4N0gyNC4yOTM4SDIzLjY1MjhIMjAuMzA1NkMxOS40NTEgNDcuOTI4NyAxOC43Mzg4IDQ3LjIxNjYgMTguNzM4OCA0Ni4zNjJWMzAuNzY1NkwxOC43Mzg4IDMwLjc2NTZDMTguMzgyNyAzMC45MDggMTguMDI2NyAzMS4wNTA0IDE3LjU5OTQgMzEuMDUwNEMxNi4yNDYzIDMxLjA1MDQgMTUuMTc4IDI5Ljk4MjIgMTUuMTc4IDI4LjYyOTFWMTkuNDQyMUMxNS4xNzggMTUuNDU0IDE4LjQ1MzkgMTIuMTc4IDIyLjQ0MjEgMTIuMTc4SDI2LjE0NTRDMzAuMTMzNSAxMi4xNzggMzMuNDA5NCAxNS40NTQgMzMuNDA5NCAxOS40NDIxWk0yOS45MTk4IDIxLjY0OThWMjguNjI5MUMyOS45MTk4IDI5LjI3IDMwLjQxODQgMjkuNzY4NSAzMS4wNTk0IDI5Ljc2ODVDMzEuNzAwMyAyOS43Njg1IDMyLjE5ODggMjkuMjcgMzIuMTk4OCAyOC42MjkxVjE5LjQ0MjFDMzIuMTk4OCAxNi4xNjYxIDI5LjQ5MjYgMTMuNDU5OSAyNi4yMTY2IDEzLjQ1OTlIMjIuNTEzNEMxOS4yMzc0IDEzLjQ1OTkgMTYuNTMxMiAxNi4xNjYxIDE2LjUzMTIgMTkuNDQyMVYyOC42MjkxQzE2LjUzMTIgMjkuMjcgMTcuMDI5NyAyOS43Njg1IDE3LjY3MDYgMjkuNzY4NUMxOC4zMTE1IDI5Ljc2ODUgMTguODEgMjkuMjcgMTguODEgMjguNjI5MVYyMS41Nzg2VjE5LjM3MDlIMjAuMDkyVjIxLjY0OThWMjguNjI5MVY0Ni4zNjJDMjAuMDkyIDQ2LjUwNDQgMjAuMjM0NCA0Ni42NDY5IDIwLjM3NjkgNDYuNjQ2OUgyMy43MjRWMjguNjI5MUgyNS4wMDU5VjQ2LjU3NTZIMjguMzUzMUMyOC40OTU1IDQ2LjU3NTYgMjguNjM4IDQ2LjQzMzIgMjguNjM4IDQ2LjI5MDhWMjguNjI5MVYyMS41Nzg2VjE5LjM3MDlIMjkuOTE5OFYyMS42NDk4Wk0xMS40MDM1IDEzLjk1ODVDMTMuODI0OSAxMy45NTg1IDE1Ljc0NzggMTAuOTY3NCAxNS43NDc4IDguNTQ2MDFDMTUuNzQ3OCA2LjEyNDY0IDEzLjgyNDkgNC4yMDE4IDExLjQwMzUgNC4yMDE4QzguOTgyMTQgNC4yMDE4IDcuMDU5MzEgNi4xMjQ2NCA3LjA1OTMxIDguNTQ2MDFDNy4wNTkzMSAxMC45Njc0IDguOTgyMTQgMTMuOTU4NSAxMS40MDM1IDEzLjk1ODVaTTExLjQwMzUgNS40MTI0OEMxMy4xMTI3IDUuNDEyNDggMTQuNDY1OSA2Ljc2NTU5IDE0LjQ2NTkgOC40NzQ3OUMxNC40NjU5IDEwLjI1NTIgMTIuOTcwMyAxMi42MDU0IDExLjQwMzUgMTIuNjA1NEM5LjgzNjc0IDEyLjYwNTQgOC4zNDEyNCAxMC4yNTUyIDguMzQxMjQgOC40NzQ3OUM4LjM0MTI0IDYuODM2ODEgOS42OTQzMSA1LjQxMjQ4IDExLjQwMzUgNS40MTI0OFpNMTUuMDM1NiA0Ni41NzU2QzE1LjE3ODEgNDYuNTc1NiAxNS4yNDkyIDQ2LjUwNDQgMTUuMjQ5MiA0Ni4zNjJWMzIuMDQ3NUgxNi41MzEyVjQ2LjUwNDRDMTYuNTMxMiA0Ny4zNTkgMTUuODkwMiA0OCAxNS4wMzU2IDQ4SDExLjQwMzVIMTAuNzYyNkg3Ljc3MTQ4QzYuOTE2ODggNDggNi4yNzU5NSA0Ny4zNTkgNi4yNzU5NSA0Ni41MDQ0VjMyLjQwMzVDNS45OTEwOCAzMi41NDYgNS42MzQ5OCAzMi42MTcyIDUuMjc4OSAzMi42MTcyQzMuOTk3IDMyLjYxNzIgMyAzMS41NDkgMyAzMC4zMzgzVjIyLjAwNTlDMyAxOC4zMDI3IDUuOTkxMTEgMTUuMzExNiA5LjY5NDM4IDE1LjMxMTZIMTMuMDQxNUMxMy4zMjY0IDE1LjMxMTYgMTMuNjgyNSAxNS4zMTE2IDEzLjk2NzQgMTUuMzgyOEMxNC4yNTIyIDE1LjM4MjggMTQuNDY1OSAxNS40NTQgMTQuNjc5NSAxNS41MjUyTDE0LjE4MSAxNi42NjQ3QzE0LjE4MSAxNi41OTM1IDE0LjAzODYgMTYuNTkzNSAxMy45Njc0IDE2LjU5MzVIMTMuODI0OUMxMy41NCAxNi41MjIzIDEzLjMyNjQgMTYuNTIyMiAxMy4wNDE1IDE2LjUyMjJIOS42OTQzOEM2LjcwMzI4IDE2LjUyMjIgNC4yODE4NSAxOC45NDM2IDQuMjgxODUgMjEuOTM0N1YzMC4yNjcxQzQuMjgxODUgMzAuODM2OCA0LjcwOTE2IDMxLjI2NDEgNS4yNzg5IDMxLjI2NDFDNS44NDg2MyAzMS4yNjQxIDYuMjc1OTUgMzAuODM2OCA2LjI3NTk1IDMwLjI2NzFWMjMuODU3NlYyMS43OTIzSDcuNTU3ODhWMjMuODU3NlYzMC4yNjcxVjQ2LjM2MkM3LjU1Nzg4IDQ2LjUwNDQgNy42MjkwNCA0Ni41NzU2IDcuNzcxNDggNDYuNTc1NkgxMC43NjI2VjMwLjI2NzFIMTIuMDQ0NVY0Ni41NzU2SDE1LjAzNTZaTTM3LjI1NTIgMTMuOTU4NUMzOS42NzY1IDEzLjk1ODUgNDEuNTk5NCAxMC45Njc0IDQxLjU5OTQgOC41NDYwMUM0MS41OTk0IDYuMTI0NjQgMzkuNjc2NSA0LjIwMTggMzcuMjU1MiA0LjIwMThDMzQuODMzOCA0LjIwMTggMzIuOTExIDYuMTI0NjQgMzIuOTExIDguNTQ2MDFDMzIuOTExIDEwLjk2NzQgMzQuOTA1IDEzLjk1ODUgMzcuMjU1MiAxMy45NTg1Wk0zNy4yNTUyIDUuNDEyNDhDMzguOTY0NCA1LjQxMjQ4IDQwLjMxNzUgNi43NjU1OSA0MC4zMTc1IDguNDc0NzlDNDAuMzE3NSAxMC4yNTUyIDM4LjgyMTkgMTIuNjA1NCAzNy4yNTUyIDEyLjYwNTRDMzUuNjg4NCAxMi42MDU0IDM0LjE5MjggMTAuMjU1MiAzNC4xOTI4IDguNDc0NzlDMzQuMTkyOCA2LjgzNjgxIDM1LjU0NiA1LjQxMjQ4IDM3LjI1NTIgNS40MTI0OFpNMzUuNjE3MSAxNS4yNDA0SDM4Ljk2NDRDNDIuNTk2NCAxNS4yNDA0IDQ1LjU4NzUgMTguMjMxNSA0NS41ODc1IDIxLjkzNDdWMzAuMTk1OUM0NS41ODc1IDMxLjQ3NzggNDQuNTE5MyAzMi40NzQ4IDQzLjMwODYgMzIuNDc0OEM0Mi45NTI1IDMyLjQ3NDggNDIuNTk2NCAzMi40MDM2IDQyLjMxMTUgMzIuMjYxMVY0Ni4zNjJDNDIuMzExNSA0Ny4yMTY2IDQxLjY3MDYgNDcuODU3NiA0MC44MTYgNDcuODU3NkgzNy44MjQ5SDM3LjE4NEgzMy41NTE5QzMyLjY5NzMgNDcuODU3NiAzMi4wNTYzIDQ3LjIxNjYgMzIuMDU2MyA0Ni4zNjJWMzIuMDQ3NUgzMy4zMzgyVjQ2LjM2MkMzMy4zMzgyIDQ2LjUwNDUgMzMuNDA5NSA0Ni41NzU3IDMzLjU1MTkgNDYuNTc1N0gzNi41NDNWMzAuMjY3MUgzNy44MjQ5VjQ2LjUwNDVINDAuODE2QzQwLjk1ODQgNDYuNTA0NSA0MS4wMjk3IDQ2LjQzMzIgNDEuMDI5NyA0Ni4yOTA4VjMwLjE5NTlWMjMuNzg2NFYyMS43MjExSDQyLjMxMTVWMjMuNzg2NFYzMC4xOTU5QzQyLjMxMTUgMzAuNzY1NiA0Mi43Mzg4IDMxLjE5MjkgNDMuMzA4NiAzMS4xOTI5QzQzLjg3ODMgMzEuMTkyOSA0NC4zMDU2IDMwLjc2NTYgNDQuMzA1NiAzMC4xOTU5VjIxLjg2MzVDNDQuMzA1NiAxOC44NzI0IDQxLjg4NDMgMTYuNDUxIDM4Ljg5MzIgMTYuNDUxSDM1LjU0NTlDMzUuMjYxMSAxNi40NTEgMzUuMDQ3NCAxNi40NTEgMzQuNzYyNiAxNi41MjIzSDM0LjYyMDJDMzQuNTQ5IDE2LjU5MzUgMzQuNDc3NyAxNi41OTM1IDM0LjQwNjUgMTYuNTkzNUwzMy45MDggMTUuNDU0QzM0LjEyMTcgMTUuMzgyOCAzNC40MDY1IDE1LjMxMTYgMzQuNTQ4OSAxNS4zMTE2QzM0Ljk3NjIgMTUuMjQwNCAzNS4zMzIzIDE1LjI0MDQgMzUuNjE3MSAxNS4yNDA0WlwiXG4gIH1cbikgfSksIHZYID0gKCkgPT4gLyogQF9fUFVSRV9fICovIGMoXCJzdmdcIiwgeyB2aWV3Qm94OiBcIjAgMCA0OCA0OFwiLCBmaWxsOiBcIm5vbmVcIiwgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiwgY2hpbGRyZW46IC8qIEBfX1BVUkVfXyAqLyBjKFxuICBcInBhdGhcIixcbiAge1xuICAgIGZpbGw6IFwiY3VycmVudENvbG9yXCIsXG4gICAgZDogXCJNNDcuNzQ2IDEzLjYyOTZWMTIuMTA1OEg0Mi43NTEzVjE0LjQ3NjJINDEuNjUwOEMzOC44NTcyIDE0LjQ3NjIgMzcuNzU2NiAxMy43MTQzIDM3LjMzMzQgMTMuMjkxQzM2LjY1NjEgMTIuNTI5MSAzNS42NDAyIDEyLjEwNTggMzQuNTM5NyAxMi4xMDU4SDM0LjQ1NUMzNC40NTUgMTEuNDI4NSAzNC4yMDEgMTAuNjY2NiAzMy44NjI0IDEwLjA3NDFDMzMuMzU0NSA5LjMxMjE1IDMyLjUwNzkgNy43ODgzNiAzMi41MDc5IDYuMDk1MjRWNC45OTQ3SDM0LjM3MDRWMEgzMi44NDY2VjMuNDcwOUgxNS4wNjg4VjBIMTMuNTQ1VjQuOTk0N0gxNS45MTU0VjYuMDk1MjRDMTUuOTE1NCA4Ljg4ODg5IDE1LjE1MzQgOS45ODk0IDE0LjczMDIgMTAuNDEyN0MxNC4yMjIyIDEwLjgzNiAxMy44ODM2IDExLjQyODUgMTMuNzE0MyAxMi4xMDU4SDEzLjIwNjRDMTIuMTA1OSAxMi4xMDU4IDExLjA5IDEyLjUyOTEgMTAuNDEyNyAxMy4yOTFDOS45ODk0NSAxMy43MTQzIDguODg4OTQgMTQuNDc2MiA2LjA5NTI5IDE0LjQ3NjJINC45OTQ3MlYxMi4xMDU4SDBWMTMuNjI5NkgzLjQ3MDk4VjMxLjQ5MkgwVjMzLjAxNThINC45OTQ3MlYzMS4xNTM0SDYuMDk1MjlDNy44NzMwNyAzMS4xNTM0IDkuMzk2ODEgMzIgMTAuMTU4NyAzMi41MDc5QzEwLjc1MTMgMzIuOTMxMiAxMS41MTMyIDMzLjEwMDUgMTIuMjc1MSAzMy4xMDA1SDEzLjYyOTdWMzQuMzcwM0MxMy42Mjk3IDM1LjEzMjIgMTMuODgzNiAzNS44MDk1IDE0LjIyMjIgMzYuNDg2N0MxNC43MzAyIDM3LjI0ODYgMTUuNTc2NyAzOC43NzI0IDE1LjU3NjcgNDAuNTUwMlY0MS42NTA3SDEzLjYyOTdWNDYuNjQ1NEgxNS4xNTM0VjQzLjE3NDVIMzMuMTg1MlY0Ni42NDU0SDM0LjcwOVY0MS42NTA3SDMyLjI1NFY0MC41NTAyQzMyLjI1NCAzNy43NTY2IDMzLjAxNTkgMzYuNjU2IDMzLjUyMzggMzYuMjMyN0MzNC4yODU4IDM1LjU1NTUgMzQuNzA5IDM0LjUzOTYgMzQuNzA5IDMzLjQzOTFWMzMuMTg1MkgzNS43MjQ5QzM2LjQ4NjggMzMuMTg1MiAzNy4xNjQgMzIuOTMxMiAzNy44NDEzIDMyLjU5MjZDMzguNjAzMiAzMi4wODQ2IDQwLjEyNjkgMzEuMjM4MSA0MS45MDQ3IDMxLjIzODFINDMuMDA1M1YzMy4xMDA1SDQ4VjMxLjU3NjdINDQuNTI5MVYxMy43MTQzSDQ3Ljc0NlYxMy42Mjk2Wk0zMy4wMTU4IDMzLjQzOTFDMzMuMDE1OCAzNC4xMTY0IDMyLjc2MTkgMzQuNzA5IDMyLjI1NCAzNS4xMzIyQzMxLjQ5MjEgMzUuODA5NSAzMC41NjA5IDM3LjMzMzMgMzAuNTYwOSA0MC41NTAyVjQxLjY1MDdIMTYuOTMxMlY0MC41NTAyQzE2LjkzMTIgMzguNDMzOCAxNS45MTU0IDM2LjU3MTQgMTUuMzIyOCAzNS43MjQ4QzE1LjA2ODggMzUuMzAxNiAxNC44OTk1IDM0Ljg3ODMgMTQuODk5NSAzNC40NTVWMTkuMjE2OUMxNC44OTk1IDE4LjUzOTcgMTUuNDA3NCAxOC4wMzE3IDE2IDE3Ljk0NzFDMTYuMzM4NiAxNy45NDcxIDE2LjY3NzIgMTguMDMxNyAxNi45MzEyIDE4LjI4NTdDMTcuMTg1MiAxOC41Mzk3IDE3LjM1NDUgMTguNzkzNiAxNy4zNTQ1IDE5LjIxNjlWMjcuMzQzOUgxOC44NzgzVjE1LjIzODFDMTguODc4MyAxNC41NjA4IDE5LjM4NjMgMTQuMDUyOSAyMC4wNjM1IDE0LjA1MjlDMjAuNzQwOCAxNC4wNTI5IDIxLjI0ODcgMTQuNTYwOCAyMS4yNDg3IDE1LjIzODFWMjcuMzQzOUgyMi43NzI1VjEyLjI3NTFDMjIuNzcyNSAxMS41OTc5IDIzLjI4MDQgMTEuMDg5OSAyMy45NTc3IDExLjA4OTlDMjQuNjM0OSAxMS4wODk5IDI1LjE0MjkgMTEuNTk3OSAyNS4xNDI5IDEyLjI3NTFWMjcuMzQzOUgyNi42NjY2VjE1LjIzODFDMjYuNjY2NiAxNC41NjA4IDI3LjE3NDYgMTQuMDUyOSAyNy44NTE4IDE0LjA1MjlDMjguNTI5MSAxNC4wNTI5IDI5LjAzNyAxNC41NjA4IDI5LjAzNyAxNS4yMzgxVjI3LjM0MzlIMzAuNTYwOVYyNS4xNDI4QzMwLjU2MDkgMjQuODA0MiAzMC43MzAyIDI0LjQ2NTYgMzAuOTg0MiAyNC4yMTE2QzMxLjIzODEgMjMuOTU3NiAzMS41NzY3IDIzLjg3MyAzMS45MTU0IDIzLjg3M0MzMi41MDggMjMuOTU3NyAzMy4wMTU4IDI0LjQ2NTYgMzMuMDE1OCAyNS4xNDI4VjMzLjQzOTFaTTQxLjY1MDggMjkuNzE0M0MzOS41MzQ0IDI5LjcxNDMgMzcuNjcxOSAzMC43MzAxIDM2LjgyNTMgMzEuMzIyN0MzNi40MDIxIDMxLjU3NjcgMzUuOTc4OCAzMS43NDYgMzUuNTU1NSAzMS43NDZIMzQuNTM5N1YyNS4yMjc1QzM0LjUzOTcgMjMuNzg4MyAzMy40MzkxIDIyLjYwMzEgMzIuMDg0NiAyMi40MzM4QzMxLjU3NjcgMjIuMzQ5MiAzMS4wNjg4IDIyLjUxODUgMzAuNjQ1NSAyMi42ODc4VjE1LjIzODFDMzAuNjQ1NSAxMy43MTQzIDI5LjQ2MDMgMTIuNTI5MSAyNy45MzY1IDEyLjUyOTFDMjcuNTEzMiAxMi41MjkxIDI3LjA5IDEyLjYxMzcgMjYuNzUxNCAxMi43ODMxVjEyLjE5MDVDMjYuNzUxNCAxMC42NjY2IDI1LjU2NjEgOS40ODE0OCAyNC4wNDIzIDkuNDgxNDhDMjIuNTE4NSA5LjQ4MTQ4IDIxLjMzMzQgMTAuNjY2NiAyMS4zMzM0IDEyLjE5MDVWMTIuNzgzMUMyMC45OTQ3IDEyLjYxMzcgMjAuNTcxNCAxMi41MjkxIDIwLjE0ODIgMTIuNTI5MUMxOC42MjQ0IDEyLjUyOTEgMTcuNDM5MiAxMy43MTQzIDE3LjQzOTIgMTUuMjM4MVYxNi43NjE5QzE3LjAxNTkgMTYuNTA3OSAxNi41MDc5IDE2LjQyMzMgMTYgMTYuNTA3OUMxNC42NDU1IDE2LjY3NzIgMTMuNTQ1IDE3Ljg2MjQgMTMuNTQ1IDE5LjMwMTZWMzEuNzQ2SDEyLjE5MDVDMTEuNzY3MiAzMS43NDYgMTEuMzQzOSAzMS41NzY3IDEwLjkyMDYgMzEuMzIyN0M5Ljk4OTQzIDMwLjczMDEgOC4yMTE2OSAyOS43MTQzIDYuMDk1MjkgMjkuNzE0M0g0Ljk5NDcyVjE2LjA4NDZINi4wOTUyOUM5LjMxMjIyIDE2LjA4NDYgMTAuODM2IDE1LjE1MzQgMTEuNTEzMyAxNC4zOTE1QzExLjkzNjYgMTMuOTY4MiAxMi41MjkyIDEzLjYyOTYgMTMuMjA2NCAxMy42Mjk2SDEzLjU0NVYxNS4zMjI3SDE1LjA2ODhWMTMuMjA2M0MxNS4wNjg4IDEyLjUyOTEgMTUuMzIyOCAxMS45MzY1IDE1LjgzMDcgMTEuNTEzMkMxNy4wMTU5IDEwLjQ5NzMgMTcuNTIzOCA4LjYzNDkyIDE3LjUyMzggNi4wOTUyNFY0Ljk5NDdIMzEuMTUzNFY2LjA5NTI0QzMxLjE1MzQgOC4yMTE2NCAzMi4xNjkzIDEwLjA3NDEgMzIuNzYxOSAxMC45MjA2QzMzLjAxNTkgMTEuMzQzOSAzMy4xODUyIDExLjc2NzIgMzMuMTg1MiAxMi4xOTA1VjIxLjE2NEgzNC43MDlWMTMuNTQ1SDM0Ljc5MzdDMzUuNDcwOSAxMy41NDUgMzYuMDYzNSAxMy43OTg5IDM2LjQ4NjggMTQuMzA2OUMzNy4xNjQxIDE1LjA2ODggMzguNjg3OCAxNiA0MS45MDQ3IDE2SDQzLjAwNTNWMjkuNjI5Nkg0MS42NTA4VjI5LjcxNDNaXCJcbiAgfVxuKSB9KSwgcVggPSAoKSA9PiAvKiBAX19QVVJFX18gKi8gYyhcInN2Z1wiLCB7IHZpZXdCb3g6IFwiMCAwIDQ4IDQ4XCIsIGZpbGw6IFwibm9uZVwiLCB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLCBjaGlsZHJlbjogLyogQF9fUFVSRV9fICovIGMoXG4gIFwicGF0aFwiLFxuICB7XG4gICAgZmlsbDogXCJjdXJyZW50Q29sb3JcIixcbiAgICBmaWxsUnVsZTogXCJldmVub2RkXCIsXG4gICAgY2xpcFJ1bGU6IFwiZXZlbm9kZFwiLFxuICAgIGQ6IFwiTTQ1LjE4NCAyNi42OEw0Ny4zNiAyNC43Nkw0OCAyNS43Mkw0NC42MDggMjguNjY0SDQ0LjE2TDQzLjkwNCAyOC41MzZMNDAuNTc2IDI1Ljc4NEw0MS40MDggMjQuODI0TDQzLjcxMiAyNi43NDRWMjIuMDA4QzQzLjcxMiAyMS44MTYgNDMuNTg0IDIxLjYyNCA0My4zMjggMjEuNTZMNDAuNzY4IDIxLjE3NkM0MC4xMjggMjEuMDQ4IDM5LjU1MiAyMC42IDM5LjM2IDE5Ljg5NkMzOC45NzYgMTguNjE2IDM4LjQ2NCAxNy40IDM3LjgyNCAxNi4yNDhDMzcuNTA0IDE1LjYwOCAzNy41NjggMTQuOTA0IDM3Ljk1MiAxNC4zMjhMMzkuNDg4IDEyLjI4QzM5LjYxNiAxMi4wODggMzkuNjE2IDExLjgzMiAzOS40MjQgMTEuNjRMMzYuNDE2IDguNjMyQzM2LjIyNCA4LjQ0IDM1Ljk2OCA4LjQ0IDM1Ljc3NiA4LjU2OEwzMy43MjggMTAuMTA0QzMzLjE1MiAxMC41NTIgMzIuMzg0IDEwLjU1MiAzMS44MDggMTAuMjMyQzMwLjY1NiA5LjUyOCAyOS40NCA5LjAxNiAyOC4xNiA4LjY5NkMyNy40NTYgOC41MDQgMjcuMDA4IDcuOTkyIDI2Ljg4IDcuMjg4TDI2LjQ5NiA0LjcyOEMyNi40OTYgNC41MzYgMjYuMzA0IDQuMzQ0IDI2LjA0OCA0LjM0NEgyMS43NkMyMS41NjggNC4zNDQgMjEuMzc2IDQuNDcyIDIxLjMxMiA0LjcyOEwyMC45MjggNy4yODhDMjAuOCA3LjkyOCAyMC4zNTIgOC41MDQgMTkuNjQ4IDguNjk2QzE4LjM2OCA5LjA4IDE3LjE1MiA5LjU5MiAxNiAxMC4yMzJDMTUuMzYgMTAuNTUyIDE0LjY1NiAxMC40ODggMTQuMDggMTAuMTA0TDEyLjAzMiA4LjU2OEMxMS44NCA4LjQ0IDExLjU4NCA4LjQ0IDExLjM5MiA4LjYzMkw4LjM4Mzk5IDExLjY0QzguMTkxOTkgMTEuODMyIDguMTkyMDEgMTIuMDg4IDguMzIwMDEgMTIuMjhMOS44NTYgMTQuMzI4QzEwLjMwNCAxNC45MDQgMTAuMzA0IDE1LjY3MiA5Ljk4Mzk5IDE2LjI0OEM5LjI3OTk5IDE3LjQgOC43NjggMTguNjE2IDguNDQ4IDE5Ljg5Nkw3LjIzMiAxOS41NzZDNy42MTYgMTguMTY4IDguMTkyMDEgMTYuODI0IDguODk2IDE1LjYwOEM5LjAyNCAxNS40MTYgOS4wMjQgMTUuMjI0IDguODk2IDE1LjA5Nkw3LjM2MDAxIDEzLjA0OEM2Ljg0ODAxIDEyLjM0NCA2LjkxMiAxMS4zODQgNy41NTIgMTAuNzQ0TDEwLjU2IDcuNzM2QzExLjIgNy4wOTYgMTIuMTYgNy4wMzIgMTIuODY0IDcuNTQ0TDE0LjkxMiA5LjA4QzE1LjA0IDkuMTQ0IDE1LjIzMiA5LjIwOCAxNS40MjQgOS4wOEMxNi43MDQgOC4zMTIgMTguMDQ4IDcuOCAxOS4zOTIgNy40MTZDMTkuNTg0IDcuMzUyIDE5Ljc3NiA3LjIyNCAxOS43NzYgNy4wMzJMMjAuMTYgNC40NzJDMjAuMjg4IDMuNjQgMjEuMDU2IDMgMjEuODg4IDNIMjYuMTc2QzI3LjAwOCAzIDI3Ljc3NiAzLjY0IDI3LjkwNCA0LjQ3MkwyOC4yODggNy4wMzJDMjguMzUyIDcuMjI0IDI4LjQ4IDcuMzUyIDI4LjY3MiA3LjQxNkMzMC4wOCA3LjggMzEuNDI0IDguMzc2IDMyLjY0IDkuMDhDMzIuODMyIDkuMjA4IDMzLjAyNCA5LjIwOCAzMy4xNTIgOS4wOEwzNS4xMzYgNy40OEMzNS44NCA2Ljk2OCAzNi44IDcuMDMyIDM3LjQ0IDcuNjcyTDQwLjQ0OCAxMC42OEM0MS4wODggMTEuMzIgNDEuMTUyIDEyLjI4IDQwLjY0IDEyLjk4NEwzOS4xMDQgMTUuMDMyQzM5LjA0IDE1LjE2IDM4Ljk3NiAxNS4zNTIgMzkuMTA0IDE1LjU0NEMzOS44NzIgMTYuODI0IDQwLjM4NCAxOC4xNjggNDAuNzY4IDE5LjUxMkM0MC44MzIgMTkuNzA0IDQwLjk2IDE5Ljg5NiA0MS4xNTIgMTkuODk2TDQzLjcxMiAyMC4yOEM0NC41NDQgMjAuNDA4IDQ1LjE4NCAyMS4xNzYgNDUuMTg0IDIyLjAwOFYyNi42OFpNMzkuMTA0IDMyLjYzMkMzOC45NzYgMzIuODI0IDM4Ljk3NiAzMy4wMTYgMzkuMTA0IDMzLjE0NEw0MC44OTYgMzUuMjU2QzQxLjQwOCAzNS45NiA0MS4zNDQgMzYuOTIgNDAuNzA0IDM3LjU2TDM3LjY5NiA0MC41NjhDMzcuMDU2IDQxLjIwOCAzNi4wOTYgNDEuMjcyIDM1LjM5MiA0MC43NkwzMy4zNDQgMzkuMjI0QzMzLjIxNiAzOS4xNiAzMy4wMjQgMzkuMDk2IDMyLjgzMiAzOS4yMjRDMzEuNTUyIDM5LjkyOCAzMC4yMDggNDAuNTA0IDI4Ljg2NCA0MC44ODhDMjguNjcyIDQwLjk1MiAyOC40OCA0MS4wOCAyOC40OCA0MS4yNzJMMjguMDk2IDQzLjgzMkMyNy45NjggNDQuNjY0IDI3LjIgNDUuMzA0IDI2LjM2OCA0NS4zMDRIMjIuMDhDMjEuMjQ4IDQ1LjMwNCAyMC40OCA0NC42NjQgMjAuMzUyIDQzLjgzMkwxOS45NjggNDEuMjcyQzE5LjkwNCA0MS4wOCAxOS43NzYgNDAuOTUyIDE5LjU4NCA0MC44ODhDMTguMTc2IDQwLjUwNCAxNi44MzIgMzkuOTI4IDE1LjYxNiAzOS4yMjRDMTUuNDI0IDM5LjA5NiAxNS4yMzIgMzkuMDk2IDE1LjEwNCAzOS4yMjRMMTMuMDU2IDQwLjc2QzEyLjM1MiA0MS4yNzIgMTEuMzkyIDQxLjIwOCAxMC43NTIgNDAuNTY4TDcuNzQzOTggMzcuNTZDNy4xMDM5OCAzNi45MiA3LjAzOTk5IDM1Ljk2IDcuNTUxOTkgMzUuMjU2TDkuMDg3OTkgMzMuMjA4QzkuMTUxOTkgMzMuMDggOS4yMTU5OSAzMi44ODggOS4wODc5OSAzMi42OTZDOC4zMTk5OSAzMS40MTYgNy44MDc5OCAzMC4wNzIgNy40MjM5OCAyOC43MjhDNy4zNTk5OCAyOC41MzYgNy4yMzIgMjguMzQ0IDcuMDQgMjguMzQ0TDQuNDggMjcuOTZDMy42NDggMjcuODMyIDMuMDA3OTkgMjcuMDY0IDMuMDA3OTkgMjYuMjMyVjIxLjU2TDAuODMxOTkyIDIzLjQ4TDAgMjIuNTJMMy4zOTE5OSAxOS41NzZIMy44NEw0LjA5NiAxOS43MDRMNy40MjM5OCAyMi40NTZMNi41OTE5OSAyMy40MTZMNC4yODc5OSAyMS40OTZWMjYuMjMyQzQuMjg3OTkgMjYuNDI0IDQuNDE1OTkgMjYuNjE2IDQuNjcxOTkgMjYuNjhMNy4yMzE5OSAyNy4wNjRDNy44NzE5OSAyNy4xOTIgOC40NDggMjcuNjQgOC42NCAyOC4zNDRDOS4wMjQgMjkuNjI0IDkuNTM2IDMwLjg0IDEwLjE3NiAzMS45OTJDMTAuNDk2IDMyLjYzMiAxMC40MzIgMzMuMzM2IDEwLjA0OCAzMy45MTJMOC41MTE5OSAzNS45NkM4LjM4Mzk5IDM2LjE1MiA4LjM4NCAzNi40MDggOC41NzYgMzYuNkwxMS41ODQgMzkuNjA4QzExLjc3NiAzOS44IDEyLjAzMiAzOS44IDEyLjIyNCAzOS42NzJMMTQuMjcyIDM4LjEzNkMxNC44NDggMzcuNjg4IDE1LjU1MiAzNy42ODggMTYuMTkyIDM4LjAwOEMxNy4zNDQgMzguNzEyIDE4LjU2IDM5LjIyNCAxOS44NCAzOS41NDRDMjAuNTQ0IDM5LjczNiAyMC45OTIgNDAuMjQ4IDIxLjEyIDQwLjk1MkwyMS41MDQgNDMuNTEyQzIxLjUwNCA0My43MDQgMjEuNjk2IDQzLjg5NiAyMS45NTIgNDMuODk2SDI2LjI0QzI2LjQzMiA0My44OTYgMjYuNjI0IDQzLjc2OCAyNi42ODggNDMuNTEyTDI3LjA3MiA0MC45NTJDMjcuMiA0MC4zMTIgMjcuNjQ4IDM5LjczNiAyOC4zNTIgMzkuNTQ0QzI5LjYzMiAzOS4xNiAzMC44NDggMzguNjQ4IDMyIDM4LjAwOEMzMi42NCAzNy42ODggMzMuMzQ0IDM3Ljc1MiAzMy45MiAzOC4xMzZMMzUuOTY4IDM5LjY3MkMzNi4xNiAzOS44IDM2LjQxNiAzOS44IDM2LjYwOCAzOS42MDhMMzkuNjE2IDM2LjZDMzkuODA4IDM2LjQwOCAzOS44MDggMzYuMTUyIDM5LjY4IDM1Ljk2TDM4LjE0NCAzMy45MTJDMzcuNjk2IDMzLjMzNiAzNy42OTYgMzIuNTY4IDM4LjAxNiAzMS45OTJDMzguNzIgMzAuODQgMzkuMjMyIDI5LjYyNCAzOS41NTIgMjguMzQ0TDQwLjc2OCAyOC42NjRDNDAuMzg0IDMwLjA3MiAzOS44MDggMzEuNDE2IDM5LjEwNCAzMi42MzJaTTI0Ljc2OCAyNC42OTZIMjcuOTY4VjIzLjQxNkgyNC43NjhWMTkuMjU2SDIzLjQ4OFYyMy40MTZDMjMuNDg4IDI0LjEyIDI0LjA2NCAyNC42OTYgMjQuNzY4IDI0LjY5NlpNMjMuNDg4IDE1LjczNkgyNC43NjhWMTcuNTI4SDIzLjQ4OFYxNS43MzZaTTI0Ljc2OCAzMC42NDhIMjMuNDg4VjMyLjQ0SDI0Ljc2OFYzMC42NDhaTTMwLjcyIDIzLjQxNkgzMi41MTJWMjQuNjk2SDMwLjcyVjIzLjQxNlpNMTcuNTM2IDIzLjQxNkgxNS43NDRWMjQuNjk2SDE3LjUzNlYyMy40MTZaTTM2LjAzMiAyNC4wNTZDMzYuMDMyIDMwLjY0OCAzMC42NTYgMzUuOTYgMjQuMTI4IDM1Ljk2QzE3LjUzNiAzNS45NiAxMi4yMjQgMzAuNjQ4IDEyLjIyNCAyNC4wNTZDMTIuMjI0IDE3LjQ2NCAxNy42IDEyLjE1MiAyNC4xMjggMTIuMTUyQzMwLjcyIDEyLjE1MiAzNi4wMzIgMTcuNDY0IDM2LjAzMiAyNC4wNTZaTTM0Ljc1MiAyNC4wNTZDMzQuNzUyIDE4LjE2OCAyOS45NTIgMTMuNDMyIDI0LjEyOCAxMy40MzJDMTguMjQgMTMuNDMyIDEzLjUwNCAxOC4yMzIgMTMuNTA0IDI0LjA1NkMxMy41MDQgMjkuOTQ0IDE4LjI0IDM0LjY4IDI0LjEyOCAzNC42OEMzMC4wMTYgMzQuNjggMzQuNzUyIDI5Ljg4IDM0Ljc1MiAyNC4wNTZaXCJcbiAgfVxuKSB9KSwgeVggPSAoKSA9PiAvKiBAX19QVVJFX18gKi8gYyhcInN2Z1wiLCB7IHZpZXdCb3g6IFwiMCAwIDQ4IDQ4XCIsIGZpbGw6IFwibm9uZVwiLCB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLCBjaGlsZHJlbjogLyogQF9fUFVSRV9fICovIGMoXG4gIFwicGF0aFwiLFxuICB7XG4gICAgZmlsbDogXCJjdXJyZW50Q29sb3JcIixcbiAgICBmaWxsUnVsZTogXCJldmVub2RkXCIsXG4gICAgY2xpcFJ1bGU6IFwiZXZlbm9kZFwiLFxuICAgIGQ6IFwiTTI5LjI0ODkgOC4zNDM4OUwyOC4xNjI5IDcuMjU3OTJINDAuNzYwMlY2LjAyNzE0SDI4LjE2MjlMMjkuMjQ4OSA0Ljk0MTE3TDI4LjMwNzcgNEwyNS43MDEzIDYuNjA2MzJMMjguMzA3NyA5LjI4NTA2TDI5LjI0ODkgOC4zNDM4OVpNNDcuNzEwNCAzNy42NjUxSDAuMjE3MjNWMTEuMzg0Nkg0Ny43MTA0VjM3LjY2NTFaTTQ2LjQwNzIgMTIuNjg3OEgxLjUyMDM0VjM2LjM2MTlINDYuNDA3MlYxMi42ODc4Wk0yMy4zNDg0IDI1Ljc1NTZDMjMuMzMwMyAyNS45MzY2IDIzLjMxMjIgMjYuMTE3NiAyMy4zMTIyIDI2LjI5ODZDMjMuMjM5OCAyNi42NjA1IDIzLjIzOTggMjcuMDIyNCAyMy4yMzk4IDI3LjQ1NjZWMjcuNDU3SDI2LjQyNTNWMjguNjE1NEgyMS42NDcxQzIxLjg2NDMgMjcuMzg0NiAyMi4wMDkxIDI2LjI5ODYgMjIuMDA5MSAyNS4yODVIMjAuOTIzMVYyNC4xMjY3SDIyLjAwOTFWMjMuMzMwM0MyMi4wMDkxIDIyLjc1MTEgMjIuMDgxNCAyMi4yNDQzIDIyLjIyNjIgMjEuODgyM0MyMi4zNzEgMjEuNDQ3OSAyMi41ODgyIDIxLjE1ODQgMjIuODA1NCAyMC45NDEyQzIzLjA5NSAyMC42NTE2IDIzLjMxMjIgMjAuNTA2OCAyMy42NzQyIDIwLjQzNDRDMjQuMDM2MSAyMC4zNjIgMjQuMzk4MSAyMC4yODk2IDI0Ljc2MDEgMjAuMjg5NkgyNC43NjA0QzI1LjEyMjMgMjAuMjg5NiAyNS40MTE4IDIwLjI4OTYgMjUuNjI5IDIwLjM2MkMyNS43ODY0IDIwLjM2MiAyNS45ODIgMjAuNDM4MSAyNi4xNjA0IDIwLjUwNzVMMjYuMTYwNCAyMC41MDc2QzI2LjIyODEgMjAuNTMzOSAyNi4yOTMyIDIwLjU1OTMgMjYuMzUyOSAyMC41NzkyTDI1Ljk5MDkgMjEuNzM3NUMyNS42MjkgMjEuNTIwMyAyNS4xOTQ1IDIxLjQ0NzkgMjQuNzYwMSAyMS40NDc5QzI0LjU0MjkgMjEuNDQ3OSAyNC4zMjU4IDIxLjQ0NzkgMjQuMTgxIDIxLjUyMDNDMjMuOTYzOCAyMS41OTI3IDIzLjg5MTQgMjEuNjY1MSAyMy43NDY3IDIxLjgwOTlMMjMuNzQ2NiAyMS44MDk5QzIzLjYwMTggMjEuOTU0NyAyMy41Mjk0IDIyLjA5OTUgMjMuNDU3IDIyLjMxNjdDMjMuMzg0NiAyMi42MDYyIDIzLjM4NDYgMjIuODIzNCAyMy4zODQ2IDIzLjE4NTJWMjMuMTg1NVYyNC4wNTQzSDI1LjQ4NDFWMjUuMjEyNkgyMy4zODQ2QzIzLjM4NDYgMjUuMzkzNiAyMy4zNjY1IDI1LjU3NDYgMjMuMzQ4NCAyNS43NTU2Wk0yMy45NjM4IDE3LjI0ODlDMTkuOTgxOSAxNy4yNDg5IDE2LjY1MTYgMjAuNTA2OCAxNi42NTE2IDI0LjU2MTFDMTYuNjUxNiAyOC41NDMgMTkuOTA5NSAzMS44NzMzIDIzLjk2MzggMzEuODczM0MyNy45NDU3IDMxLjg3MzMgMzEuMjc2IDI4LjYxNTQgMzEuMjc2IDI0LjU2MTFDMzEuMjAzNiAyMC41MDY4IDI3Ljk0NTcgMTcuMjQ4OSAyMy45NjM4IDE3LjI0ODlaTTIzLjk2MzggMzAuNDk3N0MyMC42MzM1IDMwLjQ5NzcgMTcuOTU0OCAyNy44MTkgMTcuOTU0OCAyNC40ODg3QzE3Ljk1NDggMjEuMTU4NCAyMC42MzM1IDE4LjQ3OTcgMjMuOTYzOCAxOC40Nzk3QzI3LjI5NDEgMTguNDc5NyAyOS45NzI4IDIxLjE1ODQgMjkuOTcyOCAyNC40ODg3QzI5Ljk3MjggMjcuODE5IDI3LjIyMTcgMzAuNDk3NyAyMy45NjM4IDMwLjQ5NzdaTTcuODE5MDMgMTQuNjQyNUg0MC4wMzYyQzQyLjI4MDUgMTQuNjQyNSA0NC4wOTA1IDE2LjQ1MjQgNDQuMDkwNSAxOC42OTY4VjMwLjI4MDVDNDQuMDkwNSAzMi41MjQ4IDQyLjI4MDUgMzQuMzM0OCA0MC4wMzYyIDM0LjMzNDhINy44MTkwM0M1LjU3NDY5IDM0LjMzNDggMy43NjQ2NyAzMi41MjQ4IDMuNzY0NjcgMzAuMjgwNVYxOC42OTY4QzMuNzY0NjcgMTYuNDUyNCA1LjU3NDY5IDE0LjY0MjUgNy44MTkwMyAxNC42NDI1Wk00MC4wMzYyIDMzLjAzMTZDNDEuNTU2NiAzMy4wMzE2IDQyLjc4NzMgMzEuODAwOSA0Mi43ODczIDMwLjI4MDVWMTguNjk2OEM0Mi43ODczIDE3LjE3NjQgNDEuNTU2NiAxNS45NDU3IDQwLjAzNjIgMTUuOTQ1N0g3LjgxOTAzQzYuMjk4NjcgMTUuOTQ1NyA1LjA2Nzg3IDE3LjE3NjQgNS4wNjc4NyAxOC42OTY4VjMwLjI4MDVDNS4wNjc4NyAzMS44MDA5IDYuMjk4NjcgMzMuMDMxNiA3LjgxOTAzIDMzLjAzMTZINDAuMDM2MlpNMzcuNjQ3IDIzLjgzN0gzNS44MzcxVjI1LjE0MDJIMzcuNjQ3VjIzLjgzN1pNMTAuMjA4MSAyMy44MzdIMTIuMDE4MVYyNS4xNDAySDEwLjIwODFWMjMuODM3Wk00Ni4xOSA2LjAyNzE4SDQ4VjcuMzMwMzRINDYuMTlWNi4wMjcxOFpNNDQuMzgwMSA2LjAyNzE4SDQyLjU3MDFWNy4zMzAzNEg0NC4zODAxVjYuMDI3MThaTTE5LjgzNzEgNDEuNzE5M0wxOC43NTExIDQwLjcwNThMMTkuNjE5OSAzOS43NjQ2TDIyLjI5ODcgNDIuMzcwOUwxOS42MTk5IDQ0Ljk3NzNMMTguNzUxMSA0NC4xMDg1TDE5LjgzNzEgNDMuMDIyNUg3LjE2NzQzVjQxLjcxOTNIMTkuODM3MVpNMS44MDk5NSA0MS43MTk1SDBWNDMuMDIyN0gxLjgwOTk1VjQxLjcxOTVaTTMuNjE5OTEgNDEuNzE5NUg1LjQyOTg2VjQzLjAyMjdIMy42MTk5MVY0MS43MTk1WlwiXG4gIH1cbikgfSksIHdYID0gKCkgPT4gLyogQF9fUFVSRV9fICovIGMoXCJzdmdcIiwgeyB2aWV3Qm94OiBcIjAgMCA0OCA0OFwiLCBmaWxsOiBcIm5vbmVcIiwgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiwgY2hpbGRyZW46IC8qIEBfX1BVUkVfXyAqLyBjKFxuICBcInBhdGhcIixcbiAge1xuICAgIGZpbGw6IFwiY3VycmVudENvbG9yXCIsXG4gICAgZmlsbFJ1bGU6IFwiZXZlbm9kZFwiLFxuICAgIGNsaXBSdWxlOiBcImV2ZW5vZGRcIixcbiAgICBkOiBcIk0zMi41NTU2IDM2Ljc2NzdINi40NTQ0OVY5LjQ1NDU2SDMyLjU1NTZWMTMuODk5SDM0LjAxMDFWMy4xNTE1M0MzNC4wMTAxIDEuNDU0NTYgMzIuNjM2NCAwIDMwLjg1ODYgMEg4LjE1MTQ0QzYuNDU0NDcgMCA1IDEuMzczNzUgNSAzLjE1MTUzVjQ0Ljg0ODVDNSA0Ni41NDU1IDYuMzczNjYgNDguMDAwMSA4LjE1MTQ0IDQ4LjAwMDFIMzAuODU4NkMzMi41NTU2IDQ4LjAwMDEgMzQuMDEwMSA0Ni42MjYzIDM0LjAxMDEgNDQuODQ4NVYzNC4xMDExSDMyLjU1NTZWMzYuNzY3N1pNOC4xNTE0NCAxLjQ1NDU1SDMwLjg1ODZDMzEuODI4MyAxLjQ1NDU1IDMyLjU1NTYgMi4xODE4MyAzMi41NTU2IDMuMTUxNTNWOC4wODA4MUg2LjQ1NDQ5VjMuMTUxNTNDNi40NTQ0OSAyLjI2MjY0IDcuMjYyNTUgMS40NTQ1NSA4LjE1MTQ0IDEuNDU0NTVaTTMwLjkzOTQgNDYuNTQ1NUg4LjIzMjMzQzcuMjYyNjMgNDYuNTQ1NSA2LjUzNTI4IDQ1LjgxODIgNi41MzUyOCA0NC44NDg1VjM4LjIyMjNIMzIuNjM2NFY0NC44NDg1QzMyLjU1NTYgNDUuNzM3NCAzMS44MjgzIDQ2LjU0NTUgMzAuOTM5NCA0Ni41NDU1Wk0yMS45Njk3IDQxLjYxNjJIMTcuMTIxMlY0My4wNzA4SDIxLjk2OTdWNDEuNjE2MlpNMTUuNTA1MSA0LjA0MDQxSDE3LjUyNTNWNS40OTQ5N0gxNS41MDUxVjQuMDQwNDFaTTIzLjU4NTkgNC4wNDA0MUgxOS41NDU1VjUuNDk0OTdIMjMuNTg1OVY0LjA0MDQxWk0yNS4yMDIxIDIyLjYyNjNDMjUuNDQ0NSAyMi42MjYzIDI1LjYwNjEgMjIuNzA3MSAyNS43Njc3IDIyLjg2ODdDMjUuOTI5MyAyMi45NDk1IDI2LjAxMDEgMjMuMTkyIDI1LjkyOTIgMjMuNDM0NFYyNC4wODA5QzI1LjkyOTIgMjUuMTMxNCAyNi4xNzE3IDI2LjE4MTkgMjYuNTc1OCAyNy4xNTE2QzI2LjY1NjYgMjcuMzEzMiAyNi42NTY2IDI3LjU1NTYgMjYuNDk1IDI3Ljc5OEMyNi40MTQyIDI3Ljk1OTcgMjYuMTcxNyAyOC4xMjEzIDI1LjkyOTIgMjguMTIxM0gxOS44Njg2VjI2LjY2NjdIMjQuODc4OEMyNC42MzY0IDI1Ljg1ODYgMjQuNDc0OCAyNC45Njk4IDI0LjQ3NDggMjQuMDgwOUg5Ljg0ODQ5VjIyLjYyNjNIMjUuMjAyMVpNMzMuMjgyOSAxNS4xOTJDMzAuNjE2MiAxNS4xOTIgMjguMDMwMyAxNi40ODQ5IDI2LjMzMzMgMTguNTg1OUgxNS44MjgyVjIwLjA0MDVIMjYuNjU2NUMyNi44OTkgMjAuMDQwNSAyNy4xNDE1IDE5Ljk1OTcgMjcuMjIyMyAxOS43MTcyQzI4LjU5NiAxNy43Nzc5IDMwLjg1ODUgMTYuNjQ2NSAzMy4yMDIgMTYuNjQ2NUMzNy4yNDI0IDE2LjY0NjUgNDAuNTU1NiAxOS45NTk3IDQwLjU1NTYgMjQuMDAwMUM0MC41NTU2IDI0LjQ4NDUgNDAuNDc0OSAyNC45NjkgNDAuMzk0MSAyNS40NTM1TDQwLjM5MzkgMjUuNDU0NkMzOS42NjY3IDI4Ljg0ODYgMzYuNjc2NyAzMS4zNTM2IDMzLjIwMiAzMS4zNTM2QzMxLjE4MTggMzEuMzUzNiAyOS4zMjMyIDMwLjU0NTUgMjcuODY4NyAyOS4wOTFMMjYuODE4MiAzMC4wNjA3QzI4LjUxNTIgMzEuNzU3NyAzMC42OTcgMzIuNzI3NCAzMy4xMjEyIDMyLjcyNzRDMzcuMjQyNCAzMi43Mjc0IDQwLjg3ODggMjkuNzM3NSA0MS43Njc3IDI1LjY5NzFDNDEuODQ4NSAyNS4xMzE0IDQxLjkyOTMgMjQuNDg0OSA0MS45MjkzIDIzLjkxOTNDNDIuMDkwOSAxOS4xNTE2IDM4LjEzMTQgMTUuMTkyIDMzLjI4MjkgMTUuMTkyWk0xNS45MDkxIDI2LjU4NThIMTcuOTI5M1YyOC4wNDA0SDE1LjkwOTFWMjYuNTg1OFpNMTMuODg4OSAxOC41ODU5SDExLjg2ODdWMjAuMDQwNUgxMy44ODg5VjE4LjU4NTlaTTMyLjk1OTYgMjEuMDkwOUMzMi43OTggMjEuMjUyNiAzMi43MTcyIDIxLjQxNDIgMzIuNjM2NCAyMS42NTY2QzMyLjU1NTYgMjEuODk5IDMyLjQ3NDggMjIuMjIyMyAzMi42MzY0IDIyLjcwNzFWMjMuNjc2OEgzNC45Nzk4VjI0Ljk2OThIMzIuNjM2NEMzMi42MzY0IDI1LjE3MTggMzIuNjE2MiAyNS4zNzM4IDMyLjU5NiAyNS41NzU4QzMyLjU3NTggMjUuNzc3OCAzMi41NTU2IDI1Ljk3OTkgMzIuNTU1NiAyNi4xODE5QzMyLjUxNTIgMjYuMzgzOSAzMi40OTUgMjYuNTg1OSAzMi40NzQ3IDI2Ljc4NzlDMzIuNDU0NSAyNi45OSAzMi40MzQzIDI3LjE5MiAzMi4zOTM5IDI3LjM5NEgzNS45NDk1VjI4LjY4NjlIMzAuNjE2MkMzMC44NTg2IDI3LjMxMzIgMzEuMDIwMiAyNi4xMDExIDMxLjAyMDIgMjQuOTY5OEgyOS44MDgxVjIzLjY3NjhIMzEuMDIwMlYyMi43ODc5QzMxLjAyMDIgMjIuMTQxNSAzMS4xMDExIDIxLjU3NTggMzEuMjYyNyAyMS4xNzE4QzMxLjQyNDMgMjAuNjg2OSAzMS42NjY3IDIwLjM2MzcgMzEuOTA5MSAyMC4xMjEzQzMyLjIzMjMgMTkuNzk4IDMyLjQ3NDggMTkuNjM2NCAzMi44Nzg4IDE5LjU1NTZMMzIuODc5IDE5LjU1NTZDMzMuMjgzIDE5LjQ3NDggMzMuNjg3IDE5LjM5NCAzNC4wOTEgMTkuMzk0QzM0LjQ5NSAxOS4zOTQgMzQuODE4MiAxOS4zOTQgMzUuMDYwNiAxOS40NzQ4QzM1LjIzNjQgMTkuNDc0OCAzNS40NTQ2IDE5LjU1OTcgMzUuNjUzOCAxOS42MzczQzM1LjcyOTMgMTkuNjY2NyAzNS44MDIgMTkuNjk1IDM1Ljg2ODcgMTkuNzE3MkwzNS40NjQ3IDIxLjAxMDFDMzUuMDYwNiAyMC43Njc3IDM0LjU3NTggMjAuNjg2OSAzNC4wOTEgMjAuNjg2OUMzMy44NDg1IDIwLjY4NjkgMzMuNjA2MSAyMC42ODY5IDMzLjQ0NDUgMjAuNzY3N0MzMy4yMDIgMjAuODQ4NSAzMy4xMjEzIDIwLjkyOTMgMzIuOTU5NyAyMS4wOTA5TDMyLjk1OTYgMjEuMDkwOVpcIlxuICB9XG4pIH0pLCB4WCA9ICgpID0+IC8qIEBfX1BVUkVfXyAqLyBjKFwic3ZnXCIsIHsgdmlld0JveDogXCIwIDAgNDggNDhcIiwgZmlsbDogXCJub25lXCIsIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsIGNoaWxkcmVuOiAvKiBAX19QVVJFX18gKi8gYyhcbiAgXCJwYXRoXCIsXG4gIHtcbiAgICBmaWxsOiBcImN1cnJlbnRDb2xvclwiLFxuICAgIGZpbGxSdWxlOiBcImV2ZW5vZGRcIixcbiAgICBjbGlwUnVsZTogXCJldmVub2RkXCIsXG4gICAgZDogXCJNNDMuNTIgMTAuODMxVjQuMzE4MjJIMTguNDg4OUwxNi40OTc4IDBIMFYzNS4yNTM3QzAgMzcuMjM1OCAxLjIwODkgMzkuMDA1NiAyLjk4NjY4IDM5LjY0MjdDMy41NTU1NiAzOS44NTUxIDQuMTI0NDcgMzkuOTI1OSA0LjY5MzM2IDM5LjkyNTlIMTMuMTU1NlYzOC41MTAxSDguMDM1NTVDOC44ODg4OCAzNy42NjA2IDkuMzg2NjggMzYuNDU3MSA5LjM4NjY4IDM1LjI1MzdWMTIuMjQ2OEg0Ni41Nzc4VjM0LjQwNDJDNDYuNTc3OCAzNi42Njk1IDQ0LjcyODkgMzguNTEwMSA0Mi40NTMzIDM4LjUxMDFWMzkuOTI1OUM0NS41MTExIDM5LjkyNTkgNDggMzcuNDQ4MiA0OCAzNC40MDQyVjEwLjgzMUg0My41MlpNNDIuMDI2NyAxMC44MzFIOC4wMzU1NVYzNS4yNTM3QzguMDM1NTUgMzYuMzE1NSA3LjUzNzc3IDM3LjMwNjYgNi42MTMzMiAzNy45NDM3QzUuNjg4ODggMzguNTgwOCA0LjU1MTEzIDM4LjcyMjQgMy40ODQ0NiAzOC4yOTc3QzIuMjc1NTcgMzcuODcyOSAxLjQyMjIyIDM2LjU5ODcgMS40MjIyMiAzNS4xODI5VjEuNDE1ODJIMTUuNTczNEwxNy41NjQ1IDUuNzM0MDNINDIuMDI2N1YxMC44MzFaTTE1LjQzMTEgMzguNTFWMzkuOTI1OEgyMS43NkwyMS42ODg5IDQzLjM5NDZIMjMuMTExMUwyMy4xODIzIDM4LjUxSDE3LjI4TDI3LjgwNDUgMjUuNzY3N0wzOC4zMjg5IDM4LjU4MDhIMzEuODU3OFY0Ny45OTZIMzMuMjA4OUwzMy4yOCAzOS45OTY2SDQwLjEwNjdWMzguNTFMMjcuODA0NSAyMy41MDI0TDE1LjQzMTEgMzguNTFaTTIxLjc1OTggNDUuNjYzOEwyMy4xODIgNDUuNjU3OUwyMy4xOTE4IDQ3Ljk5NEwyMS43Njk2IDQ3Ljk5OTlMMjEuNzU5OCA0NS42NjM4WlwiXG4gIH1cbikgfSksIFdYID0gKCkgPT4gLyogQF9fUFVSRV9fICovIGMoXCJzdmdcIiwgeyB2aWV3Qm94OiBcIjAgMCA0OCA0OFwiLCBmaWxsOiBcIm5vbmVcIiwgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiwgY2hpbGRyZW46IC8qIEBfX1BVUkVfXyAqLyBjKFxuICBcInBhdGhcIixcbiAge1xuICAgIGZpbGw6IFwiY3VycmVudENvbG9yXCIsXG4gICAgZmlsbFJ1bGU6IFwiZXZlbm9kZFwiLFxuICAgIGNsaXBSdWxlOiBcImV2ZW5vZGRcIixcbiAgICBkOiBcIk00Ni4xMzQxIDBIMlY0NC4yOTUySDYuMTg3ODdWNDcuOTk5OUgxMS4yNjE3VjQ0LjI5NTJIMzYuODcyNFY0Ny45OTk5SDQxLjk0NjJWNDQuMjk1Mkg0Ni4xMzQxVjBaTTkuODkyNTUgNDYuNDY5N0g3LjYzNzU3VjQ0LjIxNDdIOS44OTI1NVY0Ni40Njk3Wk00MC41NzcgNDYuNDY5N0gzOC4zMjIxVjQ0LjIxNDdINDAuNTc3VjQ2LjQ2OTdaTTQ0Ljg0NTUgNDIuODQ1Nkg0Mi4wMjY3SDM2Ljk1MjlIMTEuMzQyMkg2LjI2ODM5SDMuNDQ5NlYxLjQ0OTY4SDQ0Ljg0NTVWNDIuODQ1NlpNNDIuMDI2NyAyNC4wODA1VjE5LjAwNjZWNC4xODc4N0g2LjE4Nzg3VjQwLjAyNjdINDIuMDI2N1YyNC4wODA1Wk03LjYzNzU3IDM4LjU3NzFWMzIuMjE0N0g5LjI0ODMxVjMwLjc2NUg3LjYzNzU3VjEzLjM2OTFIOS4yNDgzMVYxMS45MTk0SDcuNjM3NTdWNS41NTcwMUg0MC41NzdWMTguODQ1NkgzNy41OTcyVjIwLjI5NTJINDAuNTc3VjIyLjU1MDJIMzcuNTk3MlYyMy45OTk5SDQwLjU3N1YzOC41NzcxSDcuNjM3NTdaTTE3Ljk0NjIgMTEuOTk5OUgzMC4zNDg5VjIwLjM3NTdIMTcuOTQ2MlYxMS45OTk5Wk0xOS4zMTU0IDE4LjkyNkgyOC44OTkyVjEzLjM2OUgxOS4zMTU0VjE4LjkyNlpNMTkuNTU3IDIzLjExNEgxNy43MDQ3VjI0LjU2MzdIMTkuNTU3VjIzLjExNFpNMjEuNDA5MyAyMy4xMTRIMjMuMjYxNlYyNC41NjM3SDIxLjQwOTNWMjMuMTE0Wk0yNi44ODU4IDIzLjExNEgyNS4wMzM1VjI0LjU2MzdIMjYuODg1OFYyMy4xMTRaTTI4LjczODIgMjMuMTE0SDMwLjU5MDZWMjQuNTYzN0gyOC43MzgyVjIzLjExNFpNMTkuNTU3IDI2Ljk3OThIMTcuNzA0N1YyOC40Mjk1SDE5LjU1N1YyNi45Nzk4Wk0yMS40MDkzIDI2Ljk3OThIMjMuMjYxNlYyOC40Mjk1SDIxLjQwOTNWMjYuOTc5OFpNMjYuODg1OCAyNi45Nzk4SDI1LjAzMzVWMjguNDI5NUgyNi44ODU4VjI2Ljk3OThaTTI4LjczODIgMjYuOTc5OEgzMC41OTA2VjI4LjQyOTVIMjguNzM4MlYyNi45Nzk4Wk0xOS41NTcgMzAuODQ1NkgxNy43MDQ3VjMyLjI5NTNIMTkuNTU3VjMwLjg0NTZaTTIxLjQwOTMgMzAuODQ1NkgyMy4yNjE2VjMyLjI5NTNIMjEuNDA5M1YzMC44NDU2Wk0yNi44ODU4IDMwLjg0NTZIMjUuMDMzNVYzMi4yOTUzSDI2Ljg4NThWMzAuODQ1NlpNMjguNzM4MiAzMC44NDU2SDMwLjU5MDZWMzIuMjk1M0gyOC43MzgyVjMwLjg0NTZaXCJcbiAgfVxuKSB9KSwgUlggPSAoKSA9PiAvKiBAX19QVVJFX18gKi8gYyhcInN2Z1wiLCB7IHZpZXdCb3g6IFwiMCAwIDQ4IDQ4XCIsIGZpbGw6IFwibm9uZVwiLCB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLCBjaGlsZHJlbjogLyogQF9fUFVSRV9fICovIGMoXG4gIFwicGF0aFwiLFxuICB7XG4gICAgZmlsbDogXCJjdXJyZW50Q29sb3JcIixcbiAgICBmaWxsUnVsZTogXCJldmVub2RkXCIsXG4gICAgY2xpcFJ1bGU6IFwiZXZlbm9kZFwiLFxuICAgIGQ6IFwiTTEuNDAzNTEgMzguMzY4NEg0Ni41OTY1VjQ0Ljc1NDRIMS40MDM1MVYzOC4zNjg0Wk00OCAzNi45NjQ5VjNIMFYzNi45NjQ5VjM4LjM2ODRWNDYuMDg3N0g0OFYzOC4zNjg0VjM2Ljk2NDlaTTQ2LjU5NjUgMzYuOTY0OUgxLjQwMzUxVjQuMzMzMzFINDYuNTk2NVYzNi45NjQ5Wk0yMS42MTQgMjYuMDE3NkMyMS43NTQ0IDI2LjA4NzggMjEuODk0NyAyNi4xNTggMjIuMTA1MyAyNi4xNThDMjIuMjcxOSAyNi4xNTggMjIuMzk0NSAyNi4xMTQgMjIuNTQyNyAyNi4wNjA5QzIyLjU4MTggMjYuMDQ2OSAyMi42MjI3IDI2LjAzMjMgMjIuNjY2NyAyNi4wMTc2TDMwLjQ1NjEgMjEuNTI2NEMzMC43MzY4IDIxLjMxNTggMzAuOTQ3NCAyMC45NjUgMzAuOTQ3NCAyMC42MTQxQzMwLjk0NzQgMjAuMTkzIDMwLjczNjggMTkuOTEyMyAzMC40NTYxIDE5LjcwMThMMjIuNjY2NyAxNS4yMTA2QzIyLjMxNTggMTUgMjEuODk0NyAxNSAyMS42MTQgMTUuMjEwNkMyMS4zMzMzIDE1LjQyMTEgMjEuMTIyOCAxNS43NzIgMjEuMTIyOCAxNi4xMjI4VjI1LjEwNTNDMjEuMTIyOCAyNS41MjY0IDIxLjMzMzMgMjUuODA3MSAyMS42MTQgMjYuMDE3NlpNMjIuNDU2MiAyNC41NDM5VjE2LjgyNDZMMjkuMTIyOCAyMC42ODQyTDIyLjQ1NjIgMjQuNTQzOVpNMTEuNTc5IDQwLjgyNDVINDQuNDkxMlY0Mi4yMjhIMTEuNTc5VjQwLjgyNDVaTTUuNDczNjggNDAuNTQzOUg0LjA3MDE3VjQyLjUwODhINS40NzM2OFY0MC41NDM5Wk03LjkyOTgyIDQwLjU0MzlIOS4zMzMzM1Y0Mi41MDg4SDcuOTI5ODJWNDAuNTQzOVpcIlxuICB9XG4pIH0pLCBCWCA9ICgpID0+IC8qIEBfX1BVUkVfXyAqLyBjKFwic3ZnXCIsIHsgdmlld0JveDogXCIwIDAgNDggNDhcIiwgZmlsbDogXCJub25lXCIsIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsIGNoaWxkcmVuOiAvKiBAX19QVVJFX18gKi8gYyhcbiAgXCJwYXRoXCIsXG4gIHtcbiAgICBmaWxsOiBcImN1cnJlbnRDb2xvclwiLFxuICAgIGZpbGxSdWxlOiBcImV2ZW5vZGRcIixcbiAgICBjbGlwUnVsZTogXCJldmVub2RkXCIsXG4gICAgZDogXCJNMS4zNDY1IDI1QzEuMzQ2NSAyNy42MTM5IDEuODIxOCAzMC4yMjc3IDIuNjkzMDkgMzIuNjgzMkwxLjQyNTc4IDMzLjE1ODRDMC40NzUyODYgMzAuNTQ0NiAwIDI3Ljc3MjMgMCAyNUMwIDExLjc3MjMgMTAuNzcyMyAxIDI0IDFDMzcuMjI3OCAxIDQ4IDExLjc3MjMgNDggMjVDNDggMjcuOTMwNyA0Ny40NDU1IDMwLjg2MTQgNDYuNDE1OCAzMy41NTQ1TDQ1LjA2OTMgMzMuMDc5MkM0Ni4wOTkgMzAuNDY1NCA0Ni41NzQzIDI3Ljc3MjMgNDYuNTc0MyAyNUM0Ni41NzQzIDE4LjY2MzQgNDMuOTYwNCAxMi45NjA0IDM5Ljc2MjQgOC44NDE2QzM4LjQ5NSAxMC41MDUgMzYuODMxNyAxMS44NTE1IDM0Ljg1MTUgMTIuODgxMkMzNS40ODUyIDE0Ljk0MDYgMzUuOTYwNCAxNy4yMzc2IDM2LjI3NzMgMTkuNjkzMUwzNC44NTE1IDE5Ljg1MTVDMzQuNjEzOSAxNy41NTQ1IDM0LjEzODYgMTUuNDk1MSAzMy41ODQyIDEzLjUxNDlDMzAuOTcwMyAxNC42MjM4IDI3Ljk2MDQgMTUuMzM2NiAyNC43MTI4IDE1LjQxNTlWMjEuOTkwMUgyMy4yODcyVjE1LjQxNTlDMjAuMTE4OCAxNS4yNTc0IDE3LjAyOTcgMTQuNjIzOCAxNC40MTU4IDEzLjQzNTdDMTMuNzgyMSAxNS41NzQzIDEzLjMwNjkgMTcuODcxMyAxMy4wNjkzIDIwLjMyNjdMMTEuNjQzNSAyMC4xNjgzQzExLjg4MTIgMTcuNDc1MyAxMi40MzU2IDE1LjAxOTggMTMuMDY5MyAxMi44MDJDMTEuMDg5MSAxMS43NzIzIDkuNDI1NzkgMTAuNDI1OCA4LjE1ODQ2IDguODQxNkMzLjk2MDQ0IDEyLjk2MDQgMS4zNDY1IDE4LjY2MzQgMS4zNDY1IDI1Wk0yMy4yODcyIDIuNTA0OTZDMTkuODAyIDIuOTAxIDE2LjcxMjggNi42MjM3NyAxNC44MTE4IDEyLjE2ODNDMTcuMjY3MyAxMy4yNzcyIDIwLjE5OCAxMy45OTAxIDIzLjI4NzIgMTQuMDY5M1YyLjUwNDk2Wk0yNC43MTI4IDIuNTA0OTZWMTQuMDY5M0MyNy43MjI3IDEzLjk5MDEgMzAuNjUzNSAxMy4yNzcyIDMzLjE4ODIgMTIuMTY4M0MzMS4yMDggNi42MjM3NyAyOC4xMTg4IDIuOTgwMjEgMjQuNzEyOCAyLjUwNDk2Wk0zNC4zNzYzIDExLjUzNDdDMzYuMTE4OCAxMC41ODQyIDM3LjYyMzggOS4zOTYwNSAzOC43MzI3IDcuOTcwM0MzNi4wMzk2IDUuNTk0MDYgMzIuNzEyOSAzLjg1MTQ5IDI4Ljk5MDEgMi45ODAyQzMxLjIwNzkgNC44MDE5OCAzMy4wMjk3IDcuNzMyNjggMzQuMzc2MyAxMS41MzQ3Wk05LjE4ODEgNy45NzAzQzEwLjI5NyA5LjMxNjg0IDExLjgwMiAxMC41ODQyIDEzLjU0NDUgMTEuNTM0N0MxNC44OTExIDcuNzMyNjggMTYuNzEyOSA0LjgwMTk5IDE4LjkzMDcgMy4wNTk0MUMxNS4yMDc5IDMuODUxNDkgMTEuOTYwNCA1LjU5NDA2IDkuMTg4MSA3Ljk3MDNaTTQuNzUyNDggMjYuODIxN0M0Ljc1MjQ4IDI5LjU5NCA2Ljk3MDI2IDMyLjkyMDcgOS42NjMzMyAzMi45MjA3QzEyLjM1NjQgMzIuOTIwNyAxNC41NzQzIDI5LjU5NCAxNC41NzQzIDI2LjgyMTdDMTQuNTc0MyAyNC4xMjg2IDEyLjM1NjQgMjEuOTEwOCA5LjY2MzMzIDIxLjkxMDhDNi45NzAyNiAyMS45MTA4IDQuNzUyNDggMjQuMTI4NiA0Ljc1MjQ4IDI2LjgyMTdaTTEzLjA2OTMgMjYuODIxN0MxMy4wNjkzIDI4Ljg4MTEgMTEuNDA1OSAzMS40OTUgOS41ODQxNCAzMS40OTVDNy43NjIzNiAzMS40OTUgNi4wOTg5NyAyOC44ODExIDYuMDk4OTcgMjYuODIxN0M2LjA5ODk3IDI0LjkyMDcgNy42ODMxNSAyMy4zMzY2IDkuNTg0MTQgMjMuMzM2NkMxMS41NjQzIDIzLjMzNjYgMTMuMDY5MyAyNC45MjA3IDEzLjA2OTMgMjYuODIxN1pNMTguODUxNSAyOS4zNTY0QzE4Ljg1MTUgMzIuMjg3MSAyMS4yMjc4IDM1LjkzMDcgMjQuMDc5MiAzNS45MzA3QzI3LjAwOTkgMzUuOTMwNyAyOS4zMDY5IDMyLjM2NjMgMjkuMzA2OSAyOS4zNTY0QzI5LjMwNjkgMjYuNDI1NyAyNi45MzA3IDI0LjEyODcgMjQuMDc5MiAyNC4xMjg3QzIxLjE0ODUgMjQuMTI4NyAxOC44NTE1IDI2LjQyNTcgMTguODUxNSAyOS4zNTY0Wk0yNy44ODEyIDI5LjM1NjRDMjcuODgxMiAzMS41NzQyIDI1Ljk4MDIgMzQuNTA0OSAyNC4wNzkyIDM0LjUwNDlDMjIuMDk5IDM0LjUwNDkgMjAuMTk4IDMxLjU3NDIgMjAuMTk4IDI5LjM1NjRDMjAuMTk4IDI3LjIxNzggMjEuOTQwNiAyNS40NzUyIDI0LjA3OTIgMjUuNDc1MkMyNi4yMTc5IDI1LjQ3NTIgMjcuODgxMiAyNy4yMTc4IDI3Ljg4MTIgMjkuMzU2NFpNMjIuMDE5OCAzNy42NzMzQzE3LjU4NDIgMzcuNjczMyAxMy45NDA2IDQxLjMxNjkgMTMuOTQwNiA0NS43NTI1VjQ3Ljg5MTJIMTUuMzY2NFY0NS43NTI1QzE1LjM2NjQgNDIuMTA5IDE4LjM3NjMgMzkuMDk5MSAyMi4wMTk4IDM5LjA5OTFIMjYuMTM4NkMyOS43ODIyIDM5LjA5OTEgMzIuNzkyMSA0Mi4xMDkgMzIuNzkyMSA0NS43NTI1VjQ3Ljg5MTJIMzQuMjE3OFY0NS43NTI1QzM0LjIxNzggNDEuMjM3NyAzMC41NzQzIDM3LjY3MzMgMjYuMTM4NiAzNy42NzMzSDIyLjAxOThaTTE5LjMyNjggNDMuOTMwN0gxNy45MDFWNDcuODExOUgxOS4zMjY4VjQzLjkzMDdaTTI4LjgzMTcgNDMuOTMwN0gzMC4yNTc0VjQ3LjgxMTlIMjguODMxN1Y0My45MzA3Wk0zLjg4MTIxIDQxLjc5MjFINS4zMDY4OVY0Ny41NzQzSDMuODgxMjFWNDEuNzkyMVpNMTcuMDI5NyAzNi44ODEyTDE1Ljg0MTYgMzcuNjczMkMxNS4xMjg3IDM2LjQ4NTEgMTMuNDY1NCAzNS44NTE0IDExLjQ4NTIgMzUuODUxNEg3LjY4MzEzQzQuMjc3MTkgMzUuODUxNCAxLjU4NDE2IDM4LjYyMzcgMS41ODQxNiA0MS45NTA1VjQ3Ljg5MTFIMC4xNTgzNzdWNDEuOTUwNUMwLjE1ODM3NyAzNy43NTI0IDMuNTY0MzIgMzQuNDI1NyA3LjY4MzEzIDM0LjQyNTdIMTEuNDg1MkMxNC4wMTk4IDM0LjQyNTcgMTYgMzUuMjk3IDE3LjAyOTcgMzYuODgxMlpNNDQuMjc3MyA0MS43OTIxSDQyLjg1MTVWNDcuODExOUg0NC4yNzczVjQxLjc5MjFaTTM4LjU3NDIgMzIuOTIwN0MzNS44ODEyIDMyLjkyMDcgMzMuNjYzNCAyOS41OTQgMzMuNjYzNCAyNi44MjE3QzMzLjY2MzQgMjQuMTI4NiAzNS44ODEyIDIxLjkxMDggMzguNTc0MiAyMS45MTA4QzQxLjI2NzMgMjEuOTEwOCA0My40ODUyIDI0LjEyODYgNDMuNDg1MiAyNi44MjE3QzQzLjQ4NTIgMjkuNTk0IDQxLjI2NzMgMzIuOTIwNyAzOC41NzQyIDMyLjkyMDdaTTM4LjU3NDIgMzEuNDk1QzQwLjM5NiAzMS40OTUgNDIuMDU5NCAyOC44ODExIDQyLjA1OTQgMjYuODIxN0M0Mi4wNTk0IDI0LjkyMDcgNDAuNDc1MiAyMy4zMzY2IDM4LjU3NDIgMjMuMzM2NkMzNi42NzMyIDIzLjMzNjYgMzUuMDg5MiAyNC45MjA3IDM1LjA4OTIgMjYuODIxN0MzNS4wODkyIDI4Ljg4MTEgMzYuNzUyNSAzMS40OTUgMzguNTc0MiAzMS40OTVaTTQwLjM5NjEgMzQuNDI1N0gzNi41OTRDMzQuMTM4NiAzNC40MjU3IDMyLjA3OTIgMzUuMjk3IDMxLjA0OTUgMzYuODgxMkwzMi4yMzc2IDM3LjY3MzJDMzMuMDI5NyAzNi41NjQzIDM0LjYxMzggMzUuODUxNCAzNi41OTQgMzUuODUxNEg0MC4zOTYxQzQzLjcyMjggMzUuODUxNCA0Ni40OTUgMzguNTQ0NSA0Ni40OTUgNDEuOTUwNVY0Ny44OTExSDQ3LjkyMDhWNDEuOTUwNUM0Ny45MjA4IDM3Ljc1MjQgNDQuNTk0MSAzNC40MjU3IDQwLjM5NjEgMzQuNDI1N1pcIlxuICB9XG4pIH0pLCBTWCA9ICgpID0+IC8qIEBfX1BVUkVfXyAqLyBjKFwic3ZnXCIsIHsgdmlld0JveDogXCIwIDAgNDggNDhcIiwgZmlsbDogXCJub25lXCIsIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsIGNoaWxkcmVuOiAvKiBAX19QVVJFX18gKi8gYyhcbiAgXCJwYXRoXCIsXG4gIHtcbiAgICBmaWxsOiBcImN1cnJlbnRDb2xvclwiLFxuICAgIGZpbGxSdWxlOiBcImV2ZW5vZGRcIixcbiAgICBjbGlwUnVsZTogXCJldmVub2RkXCIsXG4gICAgZDogXCJNMS44Mzc5OCAzSDQ2LjA5MTNDNDcuMDgxIDMgNDcuOTI5MyAzLjg0ODMgNDggNC44Mzc5OVYzNy4yODU3QzQ4IDM4LjI3NTQgNDcuMTUxNyAzOS4xMjM3IDQ2LjE2MiAzOS4xMjM3SDI5LjgzMjFWNDQuMjEzNUgzNS42Mjg5VjQ1LjYyNzRIMjkuODMyMUgxOC4xNjc5SDEyLjM3MTFWNDQuMjEzNUgxOC4xNjc5VjM5LjEyMzdIMS44Mzc5OEMwLjg0ODI4OSAzOS4xMjM3IDAgMzguMjc1NCAwIDM3LjI4NTdWNC44Mzc5OUMwIDMuODQ4MyAwLjg0ODI4OSAzIDEuODM3OTggM1pNNDYuMDkxMyA0LjQxMzg0SDEuODM3OThDMS42MjU5IDQuNDEzODQgMS40MTM4NCA0LjYyNTkxIDEuNDEzODQgNC44Mzc5OVYzMS4yMDYySDQ2LjUxNTVWNC44Mzc5OUM0Ni41MTU1IDQuNjI1OTEgNDYuMzAzMyA0LjQxMzg0IDQ2LjA5MTMgNC40MTM4NFpNMTkuNTgxNyA0NC4yODQySDI4LjQxODJWMzkuMTk0NEgxOS41ODE3VjQ0LjI4NDJaTTI5Ljc2MTQgMzcuNzgwNUg0Ni4wOTEzQzQ2LjM3NCAzNy43ODA1IDQ2LjUxNTQgMzcuNTY4NSA0Ni40NDQ3IDM3LjM1NjRWMzIuNjkwN0gxLjM0MzE3VjM3LjM1NjRDMS4zNDMxNyAzNy41Njg1IDEuNTU1MjMgMzcuNzgwNSAxLjc2NzMgMzcuNzgwNUgxOC4wOTcySDI5Ljc2MTRaTTkuOTY3NTggMTcuMjc5OFYxNC4zODE0QzkuMzMxMzUgMTQuMDk4NyA4LjkwNzIxIDEzLjM5MTcgOC44MzY1MiAxMi42ODQ4VjExLjYyNDRDOC44MzY1MiAxMC40OTM0IDkuNzU1NTQgOS41NzQzNyAxMC44ODY2IDkuNTc0MzdIMTMuMDA3NEgxMy4wNzgxTDE4LjgwNDEgNy41OTQ5OVYxNi41NzI5TDEzLjA3ODEgMTQuNTkzNUgxMy4wMDc0SDExLjM4MTRWMTcuMjc5OEg5Ljk2NzU4Wk0xMy45OTcxIDEzLjM5MTdMMTcuNDYwOSAxNC41OTM1VjkuNTAzNjhMMTMuOTk3MSAxMC43MDU0VjEzLjM5MTdaTTEwLjg4NjYgMTAuOTE3NUMxMC41MzMyIDEwLjkxNzUgMTAuMjUwNCAxMS4yMDAzIDEwLjI1MDQgMTEuNTUzN1YxMi42MTQxQzEwLjI1MDQgMTIuOTY3NiAxMC41MzMyIDEzLjI1MDQgMTAuODg2NiAxMy4yNTA0SDEyLjU4MzJWMTAuOTE3NUgxMC44ODY2Wk0zOS41MTY5IDE1LjIyOThIMjIuMDU1OVYxNi42NDM2SDM5LjUxNjlWMTUuMjI5OFpNMjIuMDU1OSAxMS4zNDE3SDM5LjUxNjlWMTIuNzU1NkgyMi4wNTU5VjExLjM0MTdaTTM5LjUxNjkgNy40NTM2NEgyMi4wNTU5VjguODY3NDhIMzkuNTE2OVY3LjQ1MzY0Wk04LjQxMjM4IDE5LjE4ODRIMzkuNTE2OVYyMC42MDIzSDguNDEyMzhWMTkuMTg4NFpNMzkuNTE2OSAyMy4wNzY1SDguNDEyMzhWMjQuNDkwNEgzOS41MTY5VjIzLjA3NjVaTTguNDEyMzggMjYuOTY0NkgzOS41MTY5VjI4LjM3ODRIOC40MTIzOFYyNi45NjQ2WlwiXG4gIH1cbikgfSksIEVYID0gLyogQF9fUFVSRV9fICovIE9iamVjdC5mcmVlemUoLyogQF9fUFVSRV9fICovIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh7XG4gIF9fcHJvdG9fXzogbnVsbCxcbiAgQWJUZXN0OiBBRixcbiAgQWxlcnQ6IHVGLFxuICBBdG06IHpGLFxuICBCYWxhbmNlOiBoRixcbiAgQmFyUHJlc2VudGF0aW9uOiBPRixcbiAgQmFyczogZkYsXG4gIENhbGN1bGF0ZTogZ0YsXG4gIENhbGN1bGF0aW9uOiBDRixcbiAgQ2FsZW5kYXI6IG1GLFxuICBDaGVja0xpc3Q6IExGLFxuICBDaGVxdWU6IHZGLFxuICBDb21tZW50OiBxRixcbiAgQ29tcGFueTogeUYsXG4gIENvbm5lY3Rpb246IHdGLFxuICBDb252ZXJzYXRpb246IHhGLFxuICBDb252ZXJzYXRpb25QZW9wbGU6IFdGLFxuICBDcmVkaXRDYXJkczogUkYsXG4gIEN1cnJlbmN5OiBCRixcbiAgRGVza3RvcE1haWw6IFNGLFxuICBEaWdpdGFsOiBFRixcbiAgRG93bmxvYWQ6IGtGLFxuICBEb3dubG9hZEZvbGRlcjogTkYsXG4gIEV4Y2hhbmdlRXVyb0RvbGxhcjogVEYsXG4gIEV4Y2hhbmdlRXVyb1BvdW5kOiBJRixcbiAgRXhjaGFuZ2VQb3VuZERvbGxhcjogREYsXG4gIEV5ZTogSEYsXG4gIEdsb2JhbDogVkYsXG4gIEdyYXBoczogUEYsXG4gIEhhbmRzaGFrZTogRkYsXG4gIEhlYWRwaG9uZXM6IFhGLFxuICBIb3VyZ2xhc3M6IFVGLFxuICBJbWFnZTogWUYsXG4gIEludGVyY29ubmVjdGlvbjogR0YsXG4gIEludHJhbmV0OiBRRixcbiAgTGlnaHRidWxiOiBaRixcbiAgTG9ja2VkOiBqRixcbiAgTWFpbDogS0YsXG4gIE1haWxQaG9uZTogSkYsXG4gIE1hcHM6IF9GLFxuICBNZWV0aW5nOiAkRixcbiAgTW9ub2xvZ3VlOiBlWCxcbiAgTm9EYXRhOiB0WCxcbiAgUGVkZXN0YWw6IG9YLFxuICBQZXJzb246IHJYLFxuICBQZXJzb25TdGFyOiBuWCxcbiAgUGhvbmU6IGlYLFxuICBQaG9uZVBhaXI6IGFYLFxuICBQcmVzZW50YXRpb246IHNYLFxuICBQdXp6bGU6IGNYLFxuICBSYW5raW5nOiBsWCxcbiAgUmVmcmVzaDogcFgsXG4gIFJvY2tldDogZFgsXG4gIFJvdzogYlgsXG4gIFNlYXJjaDogTVgsXG4gIFNlYXJjaFBlcnNvbjogQVgsXG4gIFNldHRpbmdzOiB1WCxcbiAgU2V0dGluZ3NDbG91ZDogelgsXG4gIFNldHRpbmdzUGVyc29uOiBoWCxcbiAgU3RyYXRlZ3k6IE9YLFxuICBTdXJ2ZXk6IGZYLFxuICBTd2lwZTogZ1gsXG4gIFRhcmdldDogQ1gsXG4gIFRhcmdldE1vbmV5OiBtWCxcbiAgVGVhbTogTFgsXG4gIFRlYW1Xb3JrOiB2WCxcbiAgVGltZTogcVgsXG4gIFRyYW5zYWN0aW9uOiB5WCxcbiAgVHJhbnNhY3Rpb25QaG9uZTogd1gsXG4gIFVwbG9hZDogeFgsXG4gIFZhdWx0OiBXWCxcbiAgVmlkZW86IFJYLFxuICBXZWI6IEJYLFxuICBXZWJTaXRlOiBTWFxufSwgU3ltYm9sLnRvU3RyaW5nVGFnLCB7IHZhbHVlOiBcIk1vZHVsZVwiIH0pKTtcbmZ1bmN0aW9uIGtYKGUpIHtcbiAgcmV0dXJuIC8qIEBfX1BVUkVfXyAqLyBjKG1mLCB7IGNsYXNzTmFtZTogXCJpY29uLWRldGFpbGVkXCIsIC4uLmUgfSk7XG59XG5jb25zdCBUYiA9IFNyKEVYKShrWCksIE5YID0gKHsgZmlsdGVyU3RhdGU6IGUgfSkgPT4gLyogQF9fUFVSRV9fICovIGMoU2IsIHsgZmlsdGVyU3RhdGU6IGUsIGNoaWxkcmVuOiAvKiBAX19QVVJFX18gKi8gZTEoRWIsIHsgY2hpbGRyZW46IFtcbiAgLyogQF9fUFVSRV9fICovIGMoVGIsIHsgc2l6ZTogXCJsZ1wiLCBuYW1lOiBcIk5vRGF0YVwiLCBjb2xvcjogXCIjQTZBNkFCXCIgfSksXG4gIC8qIEBfX1BVUkVfXyAqLyBjKGtiLCB7IGNoaWxkcmVuOiBcIldlIGNvdWxkbuKAmXQgZmluZCBhbnkgbWF0Y2hlc1wiIH0pLFxuICAvKiBAX19QVVJFX18gKi8gYyhOYiwgeyBjaGlsZHJlbjogXCJUaGVyZSBpcyBubyByZXN1bHQgZm9yIHlvdXIgc2VhcmNoLiBUcnkgc2VhcmNoaW5nIGZvciBhIGRpZmZlcmVudCB2YWx1ZS5cIiB9KVxuXSB9KSB9KSwgVFggPSAoe1xuICB0YWJsZUVtcHR5SW5mb1RleHQ6IGUsXG4gIHRhYmxlRW1wdHlCdG5UZXh0OiB0LFxuICB0YWJsZUVtcHR5QnRuT25DbGljazogb1xufSkgPT4gLyogQF9fUFVSRV9fICovIGMoU2IsIHsgY2hpbGRyZW46IC8qIEBfX1BVUkVfXyAqLyBlMShFYiwgeyBjaGlsZHJlbjogW1xuICAvKiBAX19QVVJFX18gKi8gYyhUYiwgeyBzaXplOiBcImxnXCIsIG5hbWU6IFwiTm9EYXRhXCIsIGNvbG9yOiBcIiNBNkE2QUJcIiB9KSxcbiAgLyogQF9fUFVSRV9fICovIGMoa2IsIHsgY2hpbGRyZW46IFwiTm8gZGF0YSB0byBkaXNwbGF5XCIgfSksXG4gIC8qIEBfX1BVUkVfXyAqLyBjKE5iLCB7IGNoaWxkcmVuOiBlIH0pLFxuICAvKiBAX19QVVJFX18gKi8gYyhjRiwgeyBjaGlsZHJlbjogdCAmJiAvKiBAX19QVVJFX18gKi8gYyhcbiAgICBYNixcbiAgICB7XG4gICAgICBjaGlsZHJlbjogdCxcbiAgICAgICRpY29uTGVmdDogXCJQbHVzXCIsXG4gICAgICBidXR0b25UeXBlOiBcInNlY29uZGFyeVwiLFxuICAgICAgc2l6ZTogXCJzbVwiLFxuICAgICAgb25DbGljazogb1xuICAgIH1cbiAgKSB9KVxuXSB9KSB9KSwgVW8gPSB7XG4gIGJnUHJpbWFyeTogXCIjMjcyNzMzXCIsXG4gIGJnU2Vjb25kYXJ5OiBcIiMyMTIwMkJcIixcbiAgYmdUZXJ0aWFyeTogXCIjQ0NEMEZGXCIsXG4gIGJnUHJlc3NlZDogXCIjOTE5OUYyXCIsXG4gIGJnUmVhZE9ubHk6IFwiIzFBMUEzOVwiLFxuICBiZ1NlbGVjdGVkOiBcIiM0MTNFNUNcIixcbiAgYmdIb3ZlclByaW1hcnk6IFwiIzMwMzAzRFwiLFxuICBiZ0hvdmVyU2Vjb25kYXJ5OiBcIiMzRDM0ODJcIixcbiAgYmdEaXNhYmxlZFByaW1hcnk6IFwiIzRCNEI1Q1wiLFxuICBiZ0Rpc2FibGVkU2Vjb25kYXJ5OiBcIiM2MjYyNzVcIixcbiAgYmdJbmZvcm1hdGlvbmFsUHJpbWFyeTogXCIjNUJCNUZGXCIsXG4gIGJnSW5mb3JtYXRpb25hbFNlY29uZGFyeTogXCIjMTgyMjI2XCIsXG4gIGJnU3VjY2Vzc1ByaW1hcnk6IFwiIzJGQzI5NFwiLFxuICBiZ1N1Y2Nlc3NTZWNvbmRhcnk6IFwiIzFBMjQxRlwiLFxuICBiZ1dhcm5pbmdQcmltYXJ5OiBcIiNFMDhCNEZcIixcbiAgYmdXYXJuaW5nU2Vjb25kYXJ5OiBcIiMyNjIyMUNcIixcbiAgYmdFcnJvclByaW1hcnk6IFwiI0ZCNjY2RFwiLFxuICBiZ0Vycm9yU2Vjb25kYXJ5OiBcIiMyOTE4MUFcIixcbiAgYmdUcmFuc3BhcmVuY3lQcmltYXJ5OiBcIiM3Njc2OEFcIixcbiAgYmdUcmFuc3BhcmVuY3lIb3ZlcjogXCIjMjcyNzMzXCIsXG4gIGJnVHJhbnNwYXJlbmN5UHJlc3NlZDogXCIjMzkzOTQ3XCIsXG4gIGJsYWNrT3ZlcmxheTogXCIjMjAyMDJDXCJcbn0sIElYID0ge1xuICBib3JkZXJQcmltYXJ5OiBcIiMzOTM5NDdcIixcbiAgYm9yZGVyU2Vjb25kYXJ5OiBcIiNDQ0QwRkZcIixcbiAgYm9yZGVyUHJlc3NlZDogXCIjOTE5OUYyXCIsXG4gIGJvcmRlclRlcnRpYXJ5OiBcIiMzOTM5NDdcIixcbiAgYm9yZGVyQWx0ZXJuYXRpdmU6IFwiIzI3MjczM1wiLFxuICBib3JkZXJFcnJvcjogXCIjRkI2NjZEXCIsXG4gIGJvcmRlckZvY3VzZWQ6IFwiIzVCQjVGRlwiLFxuICBib3JkZXJIb3ZlcjogXCIjM0QzNDgyXCIsXG4gIGJvcmRlckRpc2FibGVkT25iZzogXCIjOEI4QjlFXCIsXG4gIGJvcmRlclJlYWRvbmx5OiBcIiMxQTFBMzlcIixcbiAgYm9yZGVyVHJhbnNwYXJlbnQ6IFwiI0ZGRkZGRlwiXG59LCBEWCA9IHtcbiAgdGV4dFByaW1hcnk6IFwiI0ZGRkZGRlwiLFxuICB0ZXh0U2Vjb25kYXJ5OiBcIiNDQ0QwRkZcIixcbiAgdGV4dFRlcnRpYXJ5OiBcIiMyMDIwMkNcIixcbiAgdGV4dEhvdmVyOiBcIiMzRDM0ODJcIixcbiAgdGV4dFByZXNzZWQ6IFwiIzkxOTlGMlwiLFxuICB0ZXh0SGlnaGVtcGhhc2lzOiBcIiNGMEYwRjVcIixcbiAgdGV4dEJvZHk6IFwiI0Q4RDhFNVwiLFxuICB0ZXh0TWVkaXVtZW1waGFzaXM6IFwiI0Q4RDhFNVwiLFxuICB0ZXh0TG93ZW1waGFzaXM6IFwiI0JDQkNDQ1wiLFxuICB0ZXh0RGlzYWJsZWRPbmJnOiBcIiM4QjhCOUVcIixcbiAgdGV4dERpc2FibGVkTm9iZzogXCIjNjI2Mjc1XCIsXG4gIHRleHRFcnJvcjogXCIjRkI2NjZEXCIsXG4gIHRleHRTdWNjZXNzOiBcIiMyRkMyOTRcIixcbiAgdGV4dFdhcm5pbmc6IFwiI0UwOEI0RlwiLFxuICB0ZXh0SW5mb3JtYXRpb25hbDogXCIjNUJCNUZGXCIsXG4gIHRleHRSZWFkb25seTogXCIjMUExQTM5XCIsXG4gIHRleHREaXNhYmxlZDogXCIjQTZBNkFCXCJcbn0sIEhYID0ge1xuICAvLyBsZWdlbmRCZ0N5YW46ICcjMDA5RkUzJyxcbiAgLy8gbGVnZW5kQmdQdXJwbGU6ICcjODMxRjgyJyxcbiAgLy8gbGVnZW5kQmdQaW5rOiAnI0VDNjE5RicsXG4gIC8vIGxlZ2VuZEJnUmVkOiAnI0ZGMDAwMCcsXG4gIC8vIGxlZ2VuZEJnT3JhbmdlOiAnI0YzOTIwMCcsXG4gIC8vIG5ld1xuICBsZWdlbmRCZzE6IFwiI0NDRDBGRlwiLFxuICBsZWdlbmRCZzI6IFwiIzUyQ0FGQVwiLFxuICBsZWdlbmRCZzM6IFwiI0JDNkZDQ1wiLFxuICBsZWdlbmRCZzQ6IFwiI0ZGOUVCRVwiLFxuICBsZWdlbmRCZzU6IFwiI0ZGODE4MFwiLFxuICBsZWdlbmRCZzY6IFwiI0ZGQjk0RVwiLFxuICBsZWdlbmRCZzg6IFwiIzc1RDk4RlwiLFxuICBsZWdlbmRCb3JkZXI6IFwiI0YwRjBGNVwiXG59LCBWWCA9IHtcbiAgbWV0cmljc0JnSG92ZXI6IFwiIzMyMzA0NVwiLFxuICBtZXRyaWNzQmdVcDogXCIjNzVEOThGXCIsXG4gIG1ldHJpY3NCZ0Rvd246IFwiI0ZGODE4MFwiXG59LCByMyA9IHtcbiAgY2hhcnRCdWJibGVCZ0RlZmF1bHQ6IFwiIzIxMjAyQlwiLFxuICAvLyBjaGFydEJnQmx1ZUFjdGl2ZTogJyMzMTI3ODMnLFxuICAvLyBjaGFydEJnQmx1ZUluYWN0aXZlOiAnI0NCQzlFMCcsXG4gIC8vIGNoYXJ0UGllQmdDeWFuQWN0aXZlOiAnIzAwOUZFMycsXG4gIC8vIGNoYXJ0UGllQmdDeWFuSW5hY3RpdmU6ICcjQkZFN0Y4JyxcbiAgLy8gY2hhcnRQaWVCZ1B1cnBsZUFjdGl2ZTogJyM4MzFGODInLFxuICAvLyBjaGFydFBpZUJnUHVycGxlSW5hY3RpdmU6ICcjRTBDN0UwJyxcbiAgLy8gY2hhcnRQaWVCZ1BpbmtBY3RpdmU6ICcjRUM2MTlGJyxcbiAgLy8gY2hhcnRQaWVCZ1BpbmtJbmFjdGl2ZTogJyNGQUQ3RTcnLFxuICAvLyBjaGFydFBpZUJnR3JlZW5BY3RpdmU6ICcjMDA5NjQwJyxcbiAgLy8gY2hhcnRQaWVCZ0dyZWVuSW5hY3RpdmU6ICcjQkZFNUNGJyxcbiAgLy8gY2hhcnRQaWVCZ09yYW5nZUFjdGl2ZTogJyNGMzkyMDAnLFxuICAvLyBjaGFydFBpZUJnT3JhbmdlSW5hY3RpdmU6ICcjRkNFNEJGJyxcbiAgLy8gY2hhcnRQaWVCZ1JlZEFjdGl2ZTogJyNGRjAwMDAnLFxuICAvLyBjaGFydFBpZUJnUmVkSW5hY3RpdmU6ICcjRkZCRkJGJyxcbiAgLy9uZXdcbiAgY2hhcnRCZ0hvdmVyOiBcIiMyMTIwMkJcIixcbiAgY2hhcnRCZzFBY3RpdmU6IFwiIzkxOTlGMlwiLFxuICBjaGFydEJnMUluQWN0aXZlOiBcIiMxQzFDNTlcIixcbiAgY2hhcnRQaWVCZzJBY3RpdmU6IFwiIzUyQ0FGQVwiLFxuICBjaGFydFBpZUJnMkluQWN0aXZlOiBcIiMxODQ2NTlcIixcbiAgY2hhcnRQaWVCZzNBY3RpdmU6IFwiI0JDNkZDQ1wiLFxuICBjaGFydFBpZUJnM0luQWN0aXZlOiBcIiM0QTIxNTJcIixcbiAgY2hhcnRQaWVCZzRBY3RpdmU6IFwiI0ZGOUVCRVwiLFxuICBjaGFydFBpZUJnNEluQWN0aXZlOiBcIiM1OTFGMzJcIixcbiAgY2hhcnRQaWVCZzVBY3RpdmU6IFwiIzc1RDk4RlwiLFxuICBjaGFydFBpZUJnNUluQWN0aXZlOiBcIiMyMzQ2MkRcIixcbiAgY2hhcnRQaWVCZzZBY3RpdmU6IFwiI0ZGQjk0RVwiLFxuICBjaGFydFBpZUJnNkluQWN0aXZlOiBcIiM1OTQxMUNcIixcbiAgY2hhcnRQaWVCZzdBY3RpdmU6IFwiI0ZGODE4MFwiLFxuICBjaGFydFBpZUJnN0luQWN0aXZlOiBcIiM1NjFDMUJcIlxufSwgUFggPSB7XG4gIGJ1dHRvbkJnUHJpbWFyeURlZmF1bHQ6IFwiIzkxOTlGMlwiLFxuICBidXR0b25CZ1ByaW1hcnlIb3ZlcjogXCIjQ0NEMEZGXCIsXG4gIGJ1dHRvbkJnUHJpbWFyeVByZXNzZWQ6IFwiIzNEMzQ4MlwiLFxuICBidXR0b25CZ1NlY29uZGFyeURlZmF1bHQ6IFwiIzMyMzA0NVwiLFxuICBidXR0b25CZ1NlY29uZGFyeUhvdmVyOiBcIiNDQ0QwRkZcIixcbiAgYnV0dG9uQmdTZWNvbmRhcnlQcmVzc2VkOiBcIiMzRDM0ODJcIixcbiAgYnV0dG9uQmdUZXJ0aWFyeTogXCIjMzIzMDQ1XCIsXG4gIGJ1dHRvbkJnVGV4dGxpbmtIb3ZlcjogXCIjNDEzRTVDXCJcbn0sIEZYID0ge1xuICBidXR0b25Cb3JkZXJTZWNvbmRhcnlEZWZhdWx0OiBcIiM5MTk5RjJcIixcbiAgYnV0dG9uQm9yZGVyVGVydGlhcnlEZWZhdWx0OiBcIiM3Njc2OEFcIixcbiAgYnV0dG9uQm9yZGVyVGVydGlhcnlIb3ZlcjogXCIjQkNCQ0NDXCIsXG4gIGJ1dHRvbkJvcmRlclRlcnRpYXJ5UHJlc3NlZDogXCIjOTE5OUYyXCJcbn0sIFhYID0ge1xuICBidXR0b25UZXh0UHJpbWFyeTogXCIjMTEwQjM4XCIsXG4gIGJ1dHRvblRleHRQcmltYXJ5UHJlc3NlZDogXCIjRkZGRkZGXCIsXG4gIGJ1dHRvblRleHRTZWNvbmRhcnlEZWZhdWx0OiBcIiM5MTk5RjJcIixcbiAgYnV0dG9uVGV4dFNlY29uZGFyeUhvdmVyOiBcIiMxMTBCMzhcIixcbiAgYnV0dG9uVGV4dFNlY29uZGFyeVByZXNzZWQ6IFwiI0ZGRkZGRlwiLFxuICBidXR0b25UZXh0U2Vjb25kYXJ5Rm9jdXNlZDogXCIjMTEwQjM4XCIsXG4gIGJ1dHRvblRleHRUZXJ0aWFyeTogXCIjRkZGRkZGXCIsXG4gIGJ1dHRvblRleHRsaW5rRGVmYXVsdDogXCIjOTE5OUYyXCIsXG4gIGJ1dHRvblRleHRsaW5rSG92ZXI6IFwiI0ZGRkZGRlwiLFxuICBidXR0b25UZXh0bGlua1ByZXNzZWQ6IFwiI0NDRDBGRlwiXG59LCBVWCA9IHtcbiAgdG9wQmFyQmdQcmltYXJ5OiBcIiMzMDMwM0RcIixcbiAgdG9wQmFyQmdTZWNvbmRhcnk6IFwiIzI3MjczM1wiLFxuICB0b3BCYXJCZ1RlcnRpYXJ5OiBcIiNGRkZGRkZcIixcbiAgdG9wQmFyVGV4dFByaW1hcnk6IFwiI0ZGRkZGRlwiLFxuICB0b3BCYXJUZXh0U2Vjb25kYXJ5OiBcIiMzMDMwM0RcIlxufSwgWVggPSB7XG4gIGZpZWxkQmdEZWZhdWx0OiBcIiMzMjMwNDVcIixcbiAgZmllbGRCZ0hvdmVyOiBcIiM0MTNFNUNcIixcbiAgZmllbGRUZXh0UGxhY2Vob2xkZXI6IFwiIzc2NzY4QVwiLFxuICBmaWVsZFRleHRTdXBwb3J0OiBcIiM0QjRCNUNcIixcbiAgZmllbGRCb3JkZXJBY3RpdmU6IFwiIzM5Mzk0N1wiXG59LCBHWCA9IHtcbiAgdGFiSW5kaWNhdG9yOiBcIiM1MkNBRkFcIixcbiAgLy9uZXdcbiAgdGFiQm9yZGVyOiBcIiMzMDMwM0RcIlxufSwgUVggPSB7XG4gIGFjdGlvbkJ1dHRvbkJnSG92ZXJEcm9wZG93bjogXCIjMUYxRjI5XCIsXG4gIGFjdGlvbkJ1dHRvbkJnUHJlc3NlZERyb3Bkb3duOiBcIiM2MjYyNzVcIixcbiAgYWN0aW9uQnV0dG9uQmdQcmVzc2VkQnV0dG9uOiBcIiM2MjYyNzVcIixcbiAgYWN0aW9uQnV0dG9uQmdIb3ZlckJ1dHRvbjogXCIjMzkzOTQ3XCJcbn0sIFpYID0ge1xuICBmaWx0ZXJib3hCdXR0b25Cb3JkZXJIb3ZlcjogXCIjNEI0QjVDXCIsXG4gIGZpbHRlcmJveEJ1dHRvbkJvcmRlckRlZmF1bHQ6IFwiIzM5Mzk0N1wiXG59LCBqWCA9IHtcbiAgZmlsdGVyYm94QnV0dG9uQmc6IFwiIzMyMzA0NVwiLFxuICBmaWx0ZXJib3hCZzogXCIjMjcyNzMzXCJcbn0sIEtYID0ge1xuICB0b2dnbGVCZ0luYWN0aXZlRGVmYXVsdDogXCIjMUYxRjI5XCIsXG4gIHN3aXRjaFRleHRSZWFkb25seUFjdGl2ZTogXCIjQkNCQ0NDXCJcbn0sIEpYID0ge1xuICBkYXRhVGFibGVCZ1ByaW1hcnk6IFwiIzI3MjczM1wiLFxuICBkYXRhVGFibGVCZ0hlYWRlcjogXCIjMzIzMDQ1XCIsXG4gIGRhdGFUYWJsZUJnRmlsdGVyOiBcIiMyNzI3MzNcIixcbiAgZGF0YVRhYmxlQmdTZWNvbmRhcnk6IFwiIzc1MUQxQ1wiLFxuICBkYXRhVGFibGVCZ1RlcnRpYXJ5OiBcIiM3OTU1MURcIixcbiAgZGF0YVRhYmxlQmdUb3RhbDogXCIjMUYxRjI5XCIsXG4gIGRhdGFUYWJsZUJvcmRlckhlYWRlcjogXCIjMzkzOTQ3XCIsXG4gIGRhdGFUYWJsZUJvcmRlckNlbGw6IFwiIzM5Mzk0N1wiLFxuICBkYXRhVGFibGVTY3JvbGxBcnJvdzogXCIjOEI4QjlFXCIsXG4gIGRhdGFUYWJsZVNjcm9sbEJnUHJlc3NlZEFycm93OiBcIiM3Njc2OEFcIixcbiAgZGF0YVRhYmxlTG9hZGVyQmc6IFwiIzMyMzA0NVwiLFxuICBkYXRhVGFibGVMb2FkZXJHcmFkaWVudDogXCIjNDEzRTVDXCJcbn0sIF9YID0ge1xuICBzY3JvbGxCZ0RlZmF1bHQ6IFwiIzM5Mzk0N1wiLFxuICBzY3JvbGxCZ0hvdmVyOiBcIiM2MjYyNzVcIixcbiAgc2Nyb2xsQmdQcmVzc2VkOiBcIiM4QjhCOUVcIixcbiAgc2Nyb2xsQmdQcmltYXJ5OiBcIiMxRjFGMjlcIlxufSwgJFggPSB7XG4gIHNsaWRlckJnRGVmYXVsdDogXCIjMzAzMDNEXCJcbn0sIGVVID0ge1xuICBsaXN0VGV4dExvd2VtcGhhc2lzOiBcIiNEOEQ4RTVcIlxufSwgdFUgPSB7XG4gIGNhbGVuZGFyQmxvY2tCZ0Rpc2FibGVkOiBcIiMyNzI3MzNcIlxufSwgb1UgPSB7XG4gIHJlZE9yYW5nZTogKGUpID0+IGBsaW5lYXItZ3JhZGllbnQodG8gJHtlfSwgJHtyMy5jaGFydFBpZUJnN0FjdGl2ZX0gMCUsICR7cjMuY2hhcnRQaWVCZzZBY3RpdmV9IDEwMCUpYCxcbiAgcHVycGxlUGluazogKGUpID0+IGBsaW5lYXItZ3JhZGllbnQodG8gJHtlfSwgJHtyMy5jaGFydFBpZUJnM0FjdGl2ZX0gMCUsICNCNTJCQjMgMTAwJSlgLFxuICBibHVlQ3lhbjogKGUpID0+IGBsaW5lYXItZ3JhZGllbnQodG8gJHtlfSwgJHtVby5iZ1RlcnRpYXJ5fSAwJSwgJHtVby5iZ0hvdmVyU2Vjb25kYXJ5fSAxMDAlKWAsXG4gIGdyZWVuTGltZTogKGUpID0+IGBsaW5lYXItZ3JhZGllbnQodG8gJHtlfSwgJHtVby5iZ1N1Y2Nlc3NQcmltYXJ5fSAwJSwgICMxOUIzN0YgMTAwJSlgLFxuICBvcmFuZ2VDaGVyb2tlZTogKGUpID0+IGBsaW5lYXItZ3JhZGllbnQodG8gJHtlfSwgJHtyMy5jaGFydFBpZUJnNkFjdGl2ZX0gMCUsICR7VW8uYmdXYXJuaW5nUHJpbWFyeX0gMTAwJSlgLFxuICBwaW5rTGF2ZW5kZXJQaW5rOiAoZSkgPT4gYGxpbmVhci1ncmFkaWVudCh0byAke2V9LCAke3IzLmNoYXJ0UGllQmc0QWN0aXZlfSAwJSwgJHtyMy5jaGFydFBpZUJnNEFjdGl2ZX0gMTAwJSlgXG59LCBJYiA9IHtcbiAgYm9yZGVyOiBJWCxcbiAgdGV4dEljb246IERYLFxuICBidXR0b25CYWNrZ291bmQ6IFBYLFxuICBidXR0b25Cb3JkZXI6IEZYLFxuICB0b3BCYXI6IFVYLFxuICBmaWVsZDogWVgsXG4gIC4uLkdYLFxuICBhY3Rpb25CdXR0b246IFFYLFxuICBmaWx0ZXJib3hCb3JkZXI6IFpYLFxuICBmaWx0ZXJib3hCYWNrZ3JvdW5kOiBqWCxcbiAgdG9nZ2xlU3dpdGNoOiBLWCxcbiAgZGF0YVRhYmxlOiBKWCxcbiAgc2Nyb2xsOiBfWCxcbiAgc2xpZGVyOiAkWCxcbiAgZGF0YVZpc3VhbGl6YXRpb25MZWdlbmQ6IEhYLFxuICBkYXRhVmlzdWFsaXphdGlvbk1ldHJpY3M6IFZYLFxuICBkYXRhVmlzdWFsaXphdGlvbkNoYXJ0OiByMyxcbiAgbGlzdDogZVUsXG4gIC4uLnRVLFxuICBncmFkaWVudHM6IG9VLFxuICBiYWNrZ3JvdW5kczogVW8sXG4gIGJ1dHRvblRleHQ6IFhYXG59O1xudXRgXG4gIDAlIHsgb3BhY2l0eTogMDsgfVxuICAxMDAlIHsgb3BhY2l0eTogMTsgfVxuYDtcbmNvbnN0IGo2ID0gSTUoXG4gIHtcbiAgICB0aGVtZVZhbHVlOiBcImNzY0JsdWVMaWdodFwiLFxuICAgIHNldFRoZW1lVmFsdWU6IChlKSA9PiB7XG4gICAgfVxuICB9XG4pLCByVSA9ICgpID0+IEF0KGo2KSwgblUgPSAoe1xuICBjb2x1bW5SZXNpemVNb2RlOiBlLFxuICB0YWJsZTogdCxcbiAgcGFnaW5hdGlvbjogbyxcbiAgc2hvd1RhYmxlRm9vdGVyOiBuLFxuICBzaG93Q29sRmlsdGVyczogcixcbiAgY29sdW1uRmlsdGVyczogaSxcbiAgdGFibGVFbXB0eUluZm9UZXh0OiBhLFxuICB0YWJsZUVtcHR5QnRuVGV4dDogcyxcbiAgdGFibGVFbXB0eUFjdGlvbkJ0bk9uQ2xpY2s6IGwsXG4gIGdldFJvd1N0eWxlczogcCxcbiAgcmVuZGVyU3ViQ29tcG9uZW50OiBkLFxuICBsb2FkaW5nOiBiLFxuICBmb250U2l6ZTogTSxcbiAgY29sdW1uT3JkZXI6IHUsXG4gIG9uUm93Q2xpY2s6IEFcbn0pID0+IHtcbiAgdmFyIG0sIGs7XG4gIGNvbnN0IHogPSBtMS51c2VSZWYobnVsbCksIFtmLCBPXSA9IFQxKCksIGggPSByVSgpO1xuICBQMSgoKSA9PiB7XG4gICAgaCAhPSBudWxsICYmIGgudGhlbWVWYWx1ZSAmJiBPKGggPT0gbnVsbCA/IHZvaWQgMCA6IGgudGhlbWVWYWx1ZSk7XG4gIH0sIFtoID09IG51bGwgPyB2b2lkIDAgOiBoLnRoZW1lVmFsdWVdKTtcbiAgY29uc3QgZyA9ICh4LCBOKSA9PiB7XG4gICAgY29uc3QgViA9IFtdLCBSID0gTi5yZWR1Y2UoKEksIGopID0+IChJW2ouaWRdID0gaiwgSSksIHt9KTtcbiAgICByZXR1cm4geC5mb3JFYWNoKChJKSA9PiB7XG4gICAgICBSW0ldICYmIFYucHVzaChSW0ldKTtcbiAgICB9KSwgVjtcbiAgfSwgdiA9ICh4KSA9PiAodS5sZW5ndGggPiAwID8gZyh1LCB4LmdldFZpc2libGVGbGF0Q29sdW1ucygpKSA6IHguZ2V0VmlzaWJsZUZsYXRDb2x1bW5zKCkpLmZpbHRlcigoVikgPT4ge1xuICAgIHZhciBSO1xuICAgIHJldHVybiAoKFIgPSBWID09IG51bGwgPyB2b2lkIDAgOiBWLmNvbHVtbnMpID09IG51bGwgPyB2b2lkIDAgOiBSLmxlbmd0aCkgPT09IDA7XG4gIH0pLCBMID0gdC5nZXRGaWx0ZXJlZFJvd01vZGVsKCkucm93cy5sZW5ndGggPD0gMCAmJiAoaSA9PSBudWxsID8gdm9pZCAwIDogaS5sZW5ndGgpICE9PSAwLCB5ID0gdC5nZXRSb3dNb2RlbCgpLnJvd3MubGVuZ3RoIDw9IDAgJiYgKGkgPT0gbnVsbCA/IHZvaWQgMCA6IGkubGVuZ3RoKSA9PT0gMCwgQiA9IHYodCkubWFwKFxuICAgICh4LCBOKSA9PiB4LmNvbHVtbkRlZi5maXhDb2x1bW4gPyBOIDogbnVsbFxuICApLmZpbHRlcigoeCkgPT4geCAhPT0gbnVsbCksIFggPSBNYyh7XG4gICAgY291bnQ6IHYodCkubGVuZ3RoLFxuICAgIGVzdGltYXRlU2l6ZTogKHgpID0+IHYodClbeF0uZ2V0U2l6ZSgpLFxuICAgIGdldFNjcm9sbEVsZW1lbnQ6ICgpID0+IHouY3VycmVudCxcbiAgICBob3Jpem9udGFsOiAhMCxcbiAgICBvdmVyc2NhbjogNSxcbiAgICByYW5nZUV4dHJhY3RvcjogXzEoXG4gICAgICAoeCkgPT4ge1xuICAgICAgICBjb25zdCBOID0gbmV3IFNldCh5Yih4KSk7XG4gICAgICAgIHJldHVybiBCLmZvckVhY2goKFYpID0+IE4uYWRkKFYpKSwgWy4uLk5dLnNvcnQoKFYsIFIpID0+IFYgLSBSKTtcbiAgICAgIH0sXG4gICAgICBbQl1cbiAgICApXG4gIH0pLCB7IHJvd3M6IEYgfSA9IHQuZ2V0Um93TW9kZWwoKSwgVCA9IE1jKHtcbiAgICBjb3VudDogRi5sZW5ndGgsXG4gICAgZXN0aW1hdGVTaXplOiAoKSA9PiAyNCxcbiAgICBnZXRTY3JvbGxFbGVtZW50OiAoKSA9PiB6LmN1cnJlbnQsXG4gICAgb3ZlcnNjYW46IDEwMFxuICB9KSwgdyA9IFguZ2V0VmlydHVhbEl0ZW1zKCksIEggPSBULmdldFZpcnR1YWxJdGVtcygpO1xuICBsZXQgQywgcTtcbiAgcmV0dXJuIFggJiYgKHcgIT0gbnVsbCAmJiB3Lmxlbmd0aCkgJiYgKEMgPSAoKG0gPSB3WzBdKSA9PSBudWxsID8gdm9pZCAwIDogbS5zdGFydCkgPz8gMCwgcSA9IFguZ2V0VG90YWxTaXplKCkgLSAoKChrID0gd1t3Lmxlbmd0aCAtIDFdKSA9PSBudWxsID8gdm9pZCAwIDogay5lbmQpID8/IDApKSwgLyogQF9fUFVSRV9fICovIGMoczAsIHsgY2hpbGRyZW46IHkgPyAvKiBAX19QVVJFX18gKi8gYyhcbiAgICBUWCxcbiAgICB7XG4gICAgICB0YWJsZUVtcHR5SW5mb1RleHQ6IGEsXG4gICAgICB0YWJsZUVtcHR5QnRuVGV4dDogcyxcbiAgICAgIHRhYmxlRW1wdHlCdG5PbkNsaWNrOiBsXG4gICAgfVxuICApIDogLyogQF9fUFVSRV9fICovIGUxKHMwLCB7IGNoaWxkcmVuOiBbXG4gICAgLyogQF9fUFVSRV9fICovIGMoXG4gICAgICBlRixcbiAgICAgIHtcbiAgICAgICAgY2xhc3NOYW1lOiBcInRhYmxlX19jb250YWluZXJfX3dyYXBwZXJcIixcbiAgICAgICAgcmVmOiB6LFxuICAgICAgICBsb2FkaW5nOiBiLFxuICAgICAgICAkaGlkZU92ZXJmbG93OiBMLFxuICAgICAgICBjaGlsZHJlbjogLyogQF9fUFVSRV9fICovIGUxKFxuICAgICAgICAgIHRGLFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIHN0eWxlOiB7XG4gICAgICAgICAgICAgIHdpZHRoOiBcIjEwMCVcIlxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGNsYXNzTmFtZTogXCJ0YWJsZVwiLFxuICAgICAgICAgICAgYXM6IFwidGFibGVcIixcbiAgICAgICAgICAgIGNoaWxkcmVuOiBbXG4gICAgICAgICAgICAgIC8qIEBfX1BVUkVfXyAqLyBjKFxuICAgICAgICAgICAgICAgIG9GLFxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgIGFzOiBcInRoZWFkXCIsXG4gICAgICAgICAgICAgICAgICBjbGFzc05hbWU6IFwiaGVhZGVyIHRhYmxlX19oZWFkZXJfX2NvbnRhaW5lclwiLFxuICAgICAgICAgICAgICAgICAgY2hpbGRyZW46IHQuZ2V0SGVhZGVyR3JvdXBzKCkubWFwKCh4LCBOKSA9PiAvKiBAX19QVVJFX18gKi8gZTEoXG4gICAgICAgICAgICAgICAgICAgIGFGLFxuICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgaXNMb2FkaW5nOiBiLFxuICAgICAgICAgICAgICAgICAgICAgIGFzOiBcInRyXCIsXG4gICAgICAgICAgICAgICAgICAgICAgY2hpbGRyZW46IFtcbiAgICAgICAgICAgICAgICAgICAgICAgIEMgPyAvKiBAX19QVVJFX18gKi8gYyhcbiAgICAgICAgICAgICAgICAgICAgICAgICAgXCJ0aFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3R5bGU6IHsgZGlzcGxheTogXCJmbGV4XCIsIHdpZHRoOiBDIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgKSA6IG51bGwsXG4gICAgICAgICAgICAgICAgICAgICAgICB3Lm1hcCgoViwgUikgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgVSwgXywgcjEsIEs7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEkgPSB4LmhlYWRlcnNbVi5pbmRleF07XG4gICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghSSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgaiA9IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbk1vdXNlRG93bjogSSA9PSBudWxsID8gdm9pZCAwIDogSS5nZXRSZXNpemVIYW5kbGVyKCksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgb25Ub3VjaFN0YXJ0OiBJID09IG51bGwgPyB2b2lkIDAgOiBJLmdldFJlc2l6ZUhhbmRsZXIoKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU6IGByZXNpemVyICR7KFUgPSBJID09IG51bGwgPyB2b2lkIDAgOiBJLmNvbHVtbikgIT0gbnVsbCAmJiBVLmdldElzUmVzaXppbmcoKSA/IGBpc1Jlc2l6aW5nICR7SSA9PSBudWxsID8gdm9pZCAwIDogSS5pZH1gIDogXCJcIn1gLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0eWxlOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYWRkaW5nTGVmdDogXCI4cHhcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyYW5zZm9ybTogZSA9PT0gXCJvbkVuZFwiICYmICgoXyA9IEkgPT0gbnVsbCA/IHZvaWQgMCA6IEkuY29sdW1uKSAhPSBudWxsICYmIF8uZ2V0SXNSZXNpemluZygpKSA/IGB0cmFuc2xhdGVYKCR7dC5nZXRTdGF0ZSgpLmNvbHVtblNpemluZ0luZm8uZGVsdGFPZmZzZXR9cHgpYCA6IFwiXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAvKiBAX19QVVJFX18gKi8gZTEoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc0YsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lOiBgaGVhZGVyLSR7KEkgPT0gbnVsbCA/IHZvaWQgMCA6IEkuc3ViSGVhZGVycy5sZW5ndGgpID09PSAwID8gXCJsYXN0LXJvd1wiIDogXCJub3QtbGFzdC1yb3dcIn0gJHsvLyBAdHMtaWdub3JlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoSyA9IChyMSA9IEkgPT0gbnVsbCA/IHZvaWQgMCA6IEkuY29sdW1uKSA9PSBudWxsID8gdm9pZCAwIDogcjEuY29sdW1uRGVmKSAhPSBudWxsICYmIEsuZml4Q29sdW1uID8gXCJzdGlja3lcIiA6IFwiXCJ9YCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0eWxlOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxlZnQ6IEkgPT0gbnVsbCA/IHZvaWQgMCA6IEkuZ2V0U3RhcnQoXCJsZWZ0XCIpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmbGV4R3JvdzogUiA9PT0gKEkgPT0gbnVsbCA/IHZvaWQgMCA6IEkuaGVhZGVyR3JvdXAuaGVhZGVycy5sZW5ndGgpIC0gMSA/IFwiMVwiIDogXCIwXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpZHRoOiBSID09PSAoSSA9PSBudWxsID8gdm9pZCAwIDogSS5oZWFkZXJHcm91cC5oZWFkZXJzLmxlbmd0aCkgLSAxICYmIChJID09IG51bGwgPyB2b2lkIDAgOiBJLnN1YkhlYWRlcnMubGVuZ3RoKSA9PT0gMCA/IFwiMTAwJVwiIDogSSA9PSBudWxsID8gdm9pZCAwIDogSS5nZXRTaXplKClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGlsZHJlbjogW1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBAX19QVVJFX18gKi8gYyhcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBYyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb250U2l6ZTogTSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvYWRpbmc6IGIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaXZpZGVyUHJvcHM6IGosXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXk6IEkgPT0gbnVsbCA/IHZvaWQgMCA6IEkuaWQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoYXNTb3J0aW5nOiAoSSA9PSBudWxsID8gdm9pZCAwIDogSS5zdWJIZWFkZXJzLmxlbmd0aCkgIT0gMCA/ICExIDogSSAhPSBudWxsICYmIEkuY29sdW1uLmdldENhblNvcnQoKSA/IEkgPT0gbnVsbCA/IHZvaWQgMCA6IEkuY29sdW1uLmdldENhblNvcnQoKSA6ICEwLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sU3BhbjogSSA9PSBudWxsID8gdm9pZCAwIDogSS5jb2xTcGFuLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVuZGVyU29ydEljb246IEkgPT0gbnVsbCA/IHZvaWQgMCA6IEkuY29sdW1uLmdldENhblNvcnQoKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlzU29ydGVkOiAoSSA9PSBudWxsID8gdm9pZCAwIDogSS5jb2x1bW4uZ2V0SXNTb3J0ZWQoKSkgPT0gXCJkZXNjXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcImRhdGEtY29sdW1uLWhlYWRlclwiOiBgY29sdW1uLWhlYWRlci0ke1IgKyAxfWAsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHlsZToge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmbGV4R3JvdzogUiA9PT0gKEkgPT0gbnVsbCA/IHZvaWQgMCA6IEkuaGVhZGVyR3JvdXAuaGVhZGVycy5sZW5ndGgpIC0gMSA/IFwiMVwiIDogXCIwXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpZHRoOiBSID09PSAoSSA9PSBudWxsID8gdm9pZCAwIDogSS5oZWFkZXJHcm91cC5oZWFkZXJzLmxlbmd0aCkgLSAxICYmIChJID09IG51bGwgPyB2b2lkIDAgOiBJLnN1YkhlYWRlcnMubGVuZ3RoKSA9PT0gMCA/IFwiMTAwJVwiIDogSSA9PSBudWxsID8gdm9pZCAwIDogSS5nZXRTaXplKClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGlsZHJlbjogLyogQF9fUFVSRV9fICovIGMoczAsIHsgY2hpbGRyZW46IEkgIT0gbnVsbCAmJiBJLmlzUGxhY2Vob2xkZXIgPyBudWxsIDogLyogQF9fUFVSRV9fICovIGMoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBGLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb25DbGljazogSSA9PSBudWxsID8gdm9pZCAwIDogSS5jb2x1bW4uZ2V0VG9nZ2xlU29ydGluZ0hhbmRsZXIoKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGlsZHJlbjogLyogQF9fUFVSRV9fICovIGMoXCJkaXZcIiwgeyBjaGlsZHJlbjogT2EoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJID09IG51bGwgPyB2b2lkIDAgOiBJLmNvbHVtbi5jb2x1bW5EZWYuaGVhZGVyLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSSA9PSBudWxsID8gdm9pZCAwIDogSS5nZXRDb250ZXh0KClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApIH0pXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICkgfSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHIgJiYgKEkgPT0gbnVsbCA/IHZvaWQgMCA6IEkuc3ViSGVhZGVycy5sZW5ndGgpID09PSAwICYmIC8qIEBfX1BVUkVfXyAqLyBjKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFjLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvbnRTaXplOiBNLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGl2aWRlclByb3BzOiBqLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9hZGluZzogYixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleTogKEkgPT0gbnVsbCA/IHZvaWQgMCA6IEkuaWQpICsgTixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbFNwYW46IEkgPT0gbnVsbCA/IHZvaWQgMCA6IEkuY29sU3BhbixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZTogXCJ0YWJsZS1zZWFyY2gtY29sdW1uXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHlsZToge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aWR0aDogUiA9PT0gKEkgPT0gbnVsbCA/IHZvaWQgMCA6IEkuaGVhZGVyR3JvdXAuaGVhZGVycy5sZW5ndGgpIC0gMSAmJiAoSSA9PSBudWxsID8gdm9pZCAwIDogSS5zdWJIZWFkZXJzLmxlbmd0aCkgPT09IDAgPyBcIjEwMCVcIiA6IEkgPT0gbnVsbCA/IHZvaWQgMCA6IEkuZ2V0U2l6ZSgpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXNTb3J0ZWQ6ICEwLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJkYXRhLWNvbHVtbi1oZWFkZXJcIjogYGNvbHVtbi1oZWFkZXItJHtSICsgMX1gLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hpbGRyZW46IEkgIT0gbnVsbCAmJiBJLmlzUGxhY2Vob2xkZXIgPyBudWxsIDogLyogQF9fUFVSRV9fICovIGMoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGllLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVpZ2h0OiBiID8gSzIgOiBcImF1dG9cIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByYWRpdXM6IDQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmlzaWJsZTogYixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGlsZHJlbjogSSAhPSBudWxsICYmIEkuY29sdW1uLmdldENhbkZpbHRlcigpID8gLyogQF9fUFVSRV9fICovIGMoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNRixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sdW1uOiBJID09IG51bGwgPyB2b2lkIDAgOiBJLmNvbHVtbixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFibGU6IHQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvbnRTaXplOiBNLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2x1bW5GaWx0ZXJzOiBpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJmaWx0ZXItXCIgKyAoSSA9PSBudWxsID8gdm9pZCAwIDogSS5pZCkgKyBSICsgXCJfXCIgKyBOXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKSA6IG51bGxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgUlxuICAgICAgICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICAgICAgICAgICBxID8gLyogQF9fUFVSRV9fICovIGMoXG4gICAgICAgICAgICAgICAgICAgICAgICAgIFwidGhcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0eWxlOiB7IGRpc3BsYXk6IFwiZmxleFwiLCB3aWR0aDogcSB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICkgOiBudWxsXG4gICAgICAgICAgICAgICAgICAgICAgXVxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICB4LmlkXG4gICAgICAgICAgICAgICAgICApKVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgTCA/IC8qIEBfX1BVUkVfXyAqLyBjKE5YLCB7IGZpbHRlclN0YXRlOiAhMCB9KSA6IC8qIEBfX1BVUkVfXyAqLyBjKHJGLCB7IGFzOiBcInRib2R5XCIsIGNoaWxkcmVuOiBILm1hcCgoeCkgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IE4gPSBGW3guaW5kZXhdLCBWID0gTi5nZXRWaXNpYmxlQ2VsbHMoKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gLyogQF9fUFVSRV9fICovIGUxKHMwLCB7IGNoaWxkcmVuOiBbXG4gICAgICAgICAgICAgICAgICAvKiBAX19QVVJFX18gKi8gZTEoXG4gICAgICAgICAgICAgICAgICAgIGdjLFxuICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgbG9hZGluZzogYixcbiAgICAgICAgICAgICAgICAgICAgICBhczogXCJ0clwiLFxuICAgICAgICAgICAgICAgICAgICAgIG9uQ2xpY2s6ICgpID0+IEEgJiYgQShOKSxcbiAgICAgICAgICAgICAgICAgICAgICBzdHlsZToge1xuICAgICAgICAgICAgICAgICAgICAgICAgLi4udHlwZW9mIHAgPT0gXCJmdW5jdGlvblwiID8gcChOKSA6IE4uZ2V0SXNTZWxlY3RlZCgpID8ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kQ29sb3I6IGYgPT0gXCJjc2NCbHVlTGlnaHRcIiA/IHJyLmJhY2tncm91bmRzLmJnU2VsZWN0ZWQgOiBJYi5iYWNrZ3JvdW5kcy5iZ1NlbGVjdGVkXG4gICAgICAgICAgICAgICAgICAgICAgICB9IDoge31cbiAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgIGNoaWxkcmVuOiBbXG4gICAgICAgICAgICAgICAgICAgICAgICBDID8gLyogQF9fUFVSRV9fICovIGMoXG4gICAgICAgICAgICAgICAgICAgICAgICAgIFwidGRcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0eWxlOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaXNwbGF5OiBcImZsZXhcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpZHRoOiBDXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICApIDogbnVsbCxcbiAgICAgICAgICAgICAgICAgICAgICAgIHcubWFwKChSLCBJKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBVLCBfLCByMSwgSztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgaiA9IFZbUi5pbmRleF07XG4gICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAvKiBAX19QVVJFX18gKi8gYyhcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB1YyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXk6IGouaWQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBAdHMtaWdub3JlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU6IChfID0gKFUgPSBqID09IG51bGwgPyB2b2lkIDAgOiBqLmNvbHVtbikgPT0gbnVsbCA/IHZvaWQgMCA6IFUuY29sdW1uRGVmKSAhPSBudWxsICYmIF8uZml4Q29sdW1uID8gXCJzdGlja3kgdGFibGUtYm9keS1jb2x1bW5cIiA6IFwidGFibGUtYm9keS1jb2x1bW5cIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0eWxlOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN1cnNvcjogQSAmJiAhYiA/IFwiUG9pbnRlclwiIDogXCJpbml0aWFsXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZsZXhHcm93OiBJID09PSB2KHQpLmxlbmd0aCAtIDEgPyBcIjFcIiA6IFwiMFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aWR0aDogai5jb2x1bW4uZ2V0U2l6ZSgpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZWZ0OiAocjEgPSBqID09IG51bGwgPyB2b2lkIDAgOiBqLmNvbHVtbikgPT0gbnVsbCA/IHZvaWQgMCA6IHIxLmdldFN0YXJ0KClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb250U2l6ZTogTSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFsaWduOiAoSyA9IGouY29sdW1uLmNvbHVtbkRlZi5tZXRhKSA9PSBudWxsID8gdm9pZCAwIDogSy5hbGlnbixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoaWxkcmVuOiBPYShcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgai5jb2x1bW4uY29sdW1uRGVmLmNlbGwsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGouZ2V0Q29udGV4dCgpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICAgICAgICAgICBxID8gLyogQF9fUFVSRV9fICovIGMoXG4gICAgICAgICAgICAgICAgICAgICAgICAgIFwidGRcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0eWxlOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaXNwbGF5OiBcImZsZXhcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpZHRoOiBxXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICApIDogbnVsbFxuICAgICAgICAgICAgICAgICAgICAgIF1cbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgTi5pZFxuICAgICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICAgIE4uZ2V0SXNFeHBhbmRlZCgpICYmIGQgJiYgLyogQF9fUFVSRV9fICovIGMoXG4gICAgICAgICAgICAgICAgICAgIGdjLFxuICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgYXM6IFwidHJcIixcbiAgICAgICAgICAgICAgICAgICAgICBzdHlsZToge1xuICAgICAgICAgICAgICAgICAgICAgICAgLi4udHlwZW9mIHAgPT0gXCJmdW5jdGlvblwiID8gcChOKSA6IHt9XG4gICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICBjaGlsZHJlbjogLyogQF9fUFVSRV9fICovIGMoXG4gICAgICAgICAgICAgICAgICAgICAgICBsRixcbiAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgY29sU3BhbjogTi5nZXRWaXNpYmxlQ2VsbHMoKS5sZW5ndGgsXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGNoaWxkcmVuOiBkKHsgcm93OiBOIH0pXG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgXSB9KTtcbiAgICAgICAgICAgICAgfSkgfSksXG4gICAgICAgICAgICAgIG4gJiYgLyogQF9fUFVSRV9fICovIGMobkYsIHsgY2hpbGRyZW46IHQuZ2V0Rm9vdGVyR3JvdXBzKCkubWFwKCh4KSA9PiAvKiBAX19QVVJFX18gKi8gYyhpRiwgeyBjaGlsZHJlbjogeC5oZWFkZXJzLm1hcCgoTikgPT4gLyogQF9fUFVSRV9fICovIGModWMsIHsgZm9udFNpemU6IE0sIGNoaWxkcmVuOiBOICE9IG51bGwgJiYgTi5pc1BsYWNlaG9sZGVyID8gbnVsbCA6IE9hKFxuICAgICAgICAgICAgICAgIE4gPT0gbnVsbCA/IHZvaWQgMCA6IE4uY29sdW1uLmNvbHVtbkRlZi5mb290ZXIsXG4gICAgICAgICAgICAgICAgTiA9PSBudWxsID8gdm9pZCAwIDogTi5nZXRDb250ZXh0KClcbiAgICAgICAgICAgICAgKSB9LCBOID09IG51bGwgPyB2b2lkIDAgOiBOLmlkKSkgfSwgeC5pZCkpIH0pXG4gICAgICAgICAgICBdXG4gICAgICAgICAgfVxuICAgICAgICApXG4gICAgICB9XG4gICAgKSxcbiAgICBvICYmIHQuZ2V0Um93TW9kZWwoKS5yb3dzLmxlbmd0aCA/IC8qIEBfX1BVUkVfXyAqLyBjKHMwLCB7IGNoaWxkcmVuOiBvIH0pIDogbnVsbFxuICBdIH0pIH0pO1xufTtcbmZ1bmN0aW9uIENjKHtcbiAgaW5kZXRlcm1pbmF0ZTogZSxcbiAgY2xhc3NOYW1lOiB0ID0gXCJcIixcbiAgLi4ub1xufSkge1xuICBjb25zdCBuID0gbTEudXNlUmVmKG51bGwpO1xuICBtMS51c2VFZmZlY3QoKCkgPT4ge1xuICAgIHR5cGVvZiBlID09IFwiYm9vbGVhblwiICYmIG4uY3VycmVudCAmJiAobi5jdXJyZW50LmluZGV0ZXJtaW5hdGUgPSAhby5jaGVja2VkICYmIGUpO1xuICB9LCBbbiwgZV0pO1xuICBjb25zdCByID0ge307XG4gIHJldHVybiAvKiBAX19QVVJFX18gKi8gYyhcbiAgICAkUCxcbiAgICB7XG4gICAgICBvbkNsaWNrOiAoaSkgPT4ge1xuICAgICAgICBpLnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgfSxcbiAgICAgIGNoaWxkcmVuOiAvKiBAX19QVVJFX18gKi8gYyhcbiAgICAgICAgeXQsXG4gICAgICAgIHtcbiAgICAgICAgICB0eXBlOiBcImNoZWNrYm94XCIsXG4gICAgICAgICAgcmVmOiBuLFxuICAgICAgICAgIGNsYXNzTmFtZTogdCArIFwiIGN1cnNvci1wb2ludGVyXCIsXG4gICAgICAgICAgaXNQYXJ0bHlPbmx5OiBlLFxuICAgICAgICAgIGlzUmVxdWlyZWQ6ICEwLFxuICAgICAgICAgIC4uLnIsXG4gICAgICAgICAgLi4ub1xuICAgICAgICB9XG4gICAgICApXG4gICAgfVxuICApO1xufVxuY29uc3QgaVUgPSAoZSwgdCkgPT4ge1xuICB2YXIgTjE7XG4gIGNvbnN0IHtcbiAgICBtYXhWaXNpYmxlRmlsdGVyczogbyA9IDQsXG4gICAgdGFibGVFbXB0eUluZm9UZXh0OiBuLFxuICAgIHRhYmxlRW1wdHlCdG5UZXh0OiByLFxuICAgIHRhYmxlRW1wdHlBY3Rpb25CdG5PbkNsaWNrOiBpLFxuICAgIGdldFJvd1N0eWxlczogYSxcbiAgICBnZXRSb3dDYW5FeHBhbmQ6IHMsXG4gICAgcmVuZGVyU3ViQ29tcG9uZW50OiBsLFxuICAgIGlzTG9hZGluZzogcCA9ICExLFxuICAgIGlzU2VydmVyU2lkZTogZCxcbiAgICBwYWdlQ291bnQ6IGIsXG4gICAgcGFnZVNpemVDb3VudDogTSxcbiAgICBwYWdlVG90YWw6IHUgPSAwLFxuICAgIGNvbHVtblZpc2liaWxpdHlTdGF0ZTogQSA9IHt9LFxuICAgIGNvbHVtbk9yZGVyU3RhdGU6IHogPSBbXSxcbiAgICBwYWdlU2l6ZUFycmF5OiBmLFxuICAgIGZpeFJvd1NlbGVjdGlvbkNvbHVtbjogTyxcbiAgICBoaWRlQWN0aW9uQmFyOiBoLFxuICAgIGhpZGVQYWdpbmF0aW9uOiBnLFxuICAgIGZvbnRTaXplOiB2ID0gXCJ4c1wiLFxuICAgIGZpbHRlckZyb21MZWFmUm93czogTCxcbiAgICBzaG93UmlnaHRTaWRlQ29udGVudDogeSA9ICExLFxuICAgIG9uUm93Q2xpY2s6IEIsXG4gICAgY29sdW1uQ2hvb3NlckFjdGlvbkxhYmVsOiBYID0gXCJSZXNldFwiLFxuICAgIGVuYWJsZUZpbHRlckluZGljYXRvckRvdHM6IEZcbiAgfSA9IGUsIFtULCB3XSA9IG0xLnVzZVN0YXRlKFwib25DaGFuZ2VcIiksIFtILCBDXSA9IG0xLnVzZVN0YXRlKFxuICAgIFtdXG4gICksIFtxLCBtXSA9IG0xLnVzZVN0YXRlKFwiXCIpLCBbaywgeF0gPSBtMS51c2VTdGF0ZSh7fSksIE4gPSBtMChcbiAgICAoKSA9PiBmIHx8IFsxMCwgMjUsIDUwLCAxMDAsIDI1MF0sXG4gICAgW2ZdXG4gICksIFtWLCBSXSA9IG0xLnVzZVN0YXRlKHt9KSwgW0ksIGpdID0gbTEudXNlU3RhdGUoW10pLCBbVSwgX10gPSBtMS51c2VTdGF0ZShbXSksIFtyMSwgS10gPSBtMS51c2VTdGF0ZShwKTtcbiAgUDEoKCkgPT4ge1xuICAgIFIoQSk7XG4gIH0sIFtdKSwgUDEoKCkgPT4ge1xuICAgIGooeik7XG4gIH0sIFtdKSwgUDEoKCkgPT4ge1xuICAgIEsocCk7XG4gIH0sIFtwXSk7XG4gIGNvbnN0IFt7IHBhZ2VJbmRleDogUSwgcGFnZVNpemU6IEUgfSwgRF0gPSBtMS51c2VTdGF0ZSh7XG4gICAgcGFnZUluZGV4OiAwLFxuICAgIHBhZ2VTaXplOiBNIHx8IDEwXG4gIH0pLCBHID0gKHYxLCBTMSwgRDEsIEYxKSA9PiB7XG4gICAgY29uc3QgVTEgPSBkUCh2MS5nZXRWYWx1ZShTMSksIEQxKTtcbiAgICByZXR1cm4gRjEoe1xuICAgICAgaXRlbVJhbms6IFUxXG4gICAgfSksIFUxLnBhc3NlZDtcbiAgfSwgSiA9IF8xKFxuICAgICh2MSkgPT4ge1xuICAgICAgaWYgKHgodjEpLCBlICE9IG51bGwgJiYgZS5vblJvd1NlbGVjdGlvbikge1xuICAgICAgICBjb25zdCBTMSA9IHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgIGUgIT0gbnVsbCAmJiBlLm9uUm93U2VsZWN0aW9uICYmIChlID09IG51bGwgfHwgZS5vblJvd1NlbGVjdGlvbih2MSgpKSksIGNsZWFyVGltZW91dChTMSk7XG4gICAgICAgIH0sIDEwMCk7XG4gICAgICB9XG4gICAgfSxcbiAgICBba11cbiAgKSwgW1MsIFddID0gbTEudXNlU3RhdGUoe30pLCBZID0gKCgpID0+IGUgIT0gbnVsbCAmJiBlLmhhc1Jvd1NlbGVjdCA/IFtcbiAgICB7XG4gICAgICBpZDogXCJzZWxlY3RcIixcbiAgICAgIGhlYWRlcjogKHsgdGFibGU6IHYxIH0pID0+IC8qIEBfX1BVUkVfXyAqLyBjKFxuICAgICAgICBDYyxcbiAgICAgICAge1xuICAgICAgICAgIGNoZWNrZWQ6IHYxLmdldElzQWxsUm93c1NlbGVjdGVkKCkgfHwgdjEuZ2V0SXNTb21lUm93c1NlbGVjdGVkKCksXG4gICAgICAgICAgaW5kZXRlcm1pbmF0ZTogdjEuZ2V0SXNTb21lUm93c1NlbGVjdGVkKCksXG4gICAgICAgICAgb25DaGFuZ2U6IHYxLmdldFRvZ2dsZUFsbFJvd3NTZWxlY3RlZEhhbmRsZXIoKSxcbiAgICAgICAgICB0YWJsZTogdjFcbiAgICAgICAgfVxuICAgICAgKSxcbiAgICAgIGNlbGw6ICh7IHJvdzogdjEgfSkgPT4gLyogQF9fUFVSRV9fICovIGMoXCJkaXZcIiwgeyBjaGlsZHJlbjogLyogQF9fUFVSRV9fICovIGMoXG4gICAgICAgIENjLFxuICAgICAgICB7XG4gICAgICAgICAgY2hlY2tlZDogdjEuZ2V0SXNTZWxlY3RlZCgpLFxuICAgICAgICAgIGRpc2FibGVkOiAhdjEuZ2V0Q2FuU2VsZWN0KCksXG4gICAgICAgICAgaW5kZXRlcm1pbmF0ZTogdjEuZ2V0SXNTb21lU2VsZWN0ZWQoKSxcbiAgICAgICAgICBvbkNoYW5nZTogdjEuZ2V0VG9nZ2xlU2VsZWN0ZWRIYW5kbGVyKClcbiAgICAgICAgfVxuICAgICAgKSB9KSxcbiAgICAgIHNpemU6IDM1LFxuICAgICAgZW5hYmxlU29ydGluZzogITEsXG4gICAgICBmaXhDb2x1bW46IE8sXG4gICAgICBoaWRlRnJvbUNvbHVtbkNob29zZXI6ICEwXG4gICAgfSxcbiAgICAuLi5lLmNvbHVtbnNcbiAgXSA6IFsuLi5lLmNvbHVtbnNdKSgpO1xuICBQMSgoKSA9PiB7XG4gICAgcCB8fCBLKCExKTtcbiAgfSwgW3BdKTtcbiAgY29uc3QgWiA9IG0xLnVzZU1lbW8oXG4gICAgKCkgPT4gcjEgPyBBcnJheShFKS5maWxsKHt9KSA6IGUuZGF0YSxcbiAgICBbcjEsIGUuZGF0YV1cbiAgKSwgdDEgPSBtMS51c2VNZW1vKFxuICAgICgpID0+IHIxID8gWS5tYXAoKHYxKSA9PiAoe1xuICAgICAgLi4udjEsXG4gICAgICBjZWxsOiAoKSA9PiAvKiBAX19QVVJFX18gKi8gYyhpZSwgeyBoZWlnaHQ6IEsyLCByYWRpdXM6IDQgfSksXG4gICAgICBoZWFkZXI6ICgpID0+IC8qIEBfX1BVUkVfXyAqLyBjKGllLCB7IGhlaWdodDogSzIsIHJhZGl1czogNCB9KVxuICAgIH0pKSA6IFksXG4gICAgW3IxLCBZXVxuICApLCBpMSA9IG0xLnVzZU1lbW8oXG4gICAgKCkgPT4gKHtcbiAgICAgIHBhZ2VJbmRleDogUSxcbiAgICAgIHBhZ2VTaXplOiBFXG4gICAgfSksXG4gICAgW1EsIEVdXG4gICksIG4xID0gc1Aoe1xuICAgIGRhdGE6IFosXG4gICAgLy9wcm9wcy5kYXRhLFxuICAgIGNvbHVtbnM6IHQxLFxuICAgIC8vIGNvbHVtbnMsXG4gICAgZ2V0Um93Q2FuRXhwYW5kOiBzLFxuICAgIHBhZ2VDb3VudDogZCA/IGIgPz8gLTEgOiBiLFxuICAgIGZpbHRlckZuczoge1xuICAgICAgZnV6enk6IEcsXG4gICAgICAvLyBwcmV0dGllci1pZ25vcmVcbiAgICAgIGRhdGVSYW5nZUZpbHRlcjogV1AsXG4gICAgICAvLyBwcmV0dGllci1pZ25vcmVcbiAgICAgIGFtb3VudFJhbmdlRmlsdGVyOiBSUFxuICAgIH0sXG4gICAgZmlsdGVyRnJvbUxlYWZSb3dzOiBMID8/ICEwLFxuICAgIHN0YXRlOiB7XG4gICAgICBjb2x1bW5GaWx0ZXJzOiBILFxuICAgICAgZ2xvYmFsRmlsdGVyOiBxLFxuICAgICAgcGFnaW5hdGlvbjogaTEsXG4gICAgICByb3dTZWxlY3Rpb246IGssXG4gICAgICBleHBhbmRlZDogUyxcbiAgICAgIGNvbHVtblZpc2liaWxpdHk6IFYsXG4gICAgICBjb2x1bW5PcmRlcjogSSxcbiAgICAgIHNvcnRpbmc6IFVcbiAgICB9LFxuICAgIG9uQ29sdW1uVmlzaWJpbGl0eUNoYW5nZTogUixcbiAgICBvbkNvbHVtbk9yZGVyQ2hhbmdlOiBqLFxuICAgIG9uRXhwYW5kZWRDaGFuZ2U6IFcsXG4gICAgb25Db2x1bW5GaWx0ZXJzQ2hhbmdlOiBDLFxuICAgIG9uR2xvYmFsRmlsdGVyQ2hhbmdlOiBtLFxuICAgIGdsb2JhbEZpbHRlckZuOiBHLFxuICAgIGVuYWJsZUNvbHVtbkZpbHRlcnM6ICEwLFxuICAgIGVuYWJsZVJvd1NlbGVjdGlvbjogZSA9PSBudWxsID8gdm9pZCAwIDogZS5lbmFibGVSb3dTZWxlY3Rpb24sXG4gICAgb25Sb3dTZWxlY3Rpb25DaGFuZ2U6IEosXG4gICAgZ2V0Q29yZVJvd01vZGVsOiBaVigpLFxuICAgIGdldEZpbHRlcmVkUm93TW9kZWw6IHRQKCksXG4gICAgZ2V0U29ydGVkUm93TW9kZWw6IHJQKCksXG4gICAgLi4uZyA/IHt9IDogeyBnZXRQYWdpbmF0aW9uUm93TW9kZWw6IG9QKCkgfSxcbiAgICBnZXRGYWNldGVkUm93TW9kZWw6ICRWKCksXG4gICAgZ2V0RmFjZXRlZFVuaXF1ZVZhbHVlczogZVAoKSxcbiAgICBnZXRGYWNldGVkTWluTWF4VmFsdWVzOiBLVigpLFxuICAgIGVuYWJsZUdyb3VwaW5nOiAhMCxcbiAgICBkZWJ1Z1RhYmxlOiAhMCxcbiAgICBkZWJ1Z0hlYWRlcnM6ICEwLFxuICAgIGRlYnVnQ29sdW1uczogITEsXG4gICAgY29sdW1uUmVzaXplTW9kZTogVCxcbiAgICBvblBhZ2luYXRpb25DaGFuZ2U6IEQsXG4gICAgb25Tb3J0aW5nQ2hhbmdlOiBfLFxuICAgIG1hbnVhbFBhZ2luYXRpb246IGQsXG4gICAgbWFudWFsRmlsdGVyaW5nOiBkLFxuICAgIG1hbnVhbFNvcnRpbmc6IGQsXG4gICAgZ2V0RXhwYW5kZWRSb3dNb2RlbDogalYoKSxcbiAgICBnZXRTdWJSb3dzOiAodjEpID0+IHYxLnN1YlJvd3NcbiAgfSksIHMxID0gbTAoXG4gICAgKCkgPT4gLyogQF9fUFVSRV9fICovIGMoXG4gICAgICB4UCxcbiAgICAgIHtcbiAgICAgICAgY3VycmVudFBhZ2U6IG4xLmdldFN0YXRlKCkucGFnaW5hdGlvbi5wYWdlSW5kZXggKyAxLFxuICAgICAgICBwYWdlU2l6ZTogRSxcbiAgICAgICAgbGltaXQ6IGQgPyB1IDogbjEuZ2V0RXhwYW5kZWRSb3dNb2RlbCgpLnJvd3MubGVuZ3RoLFxuICAgICAgICBvbkZpcnN0UGFnZUNsaWNrOiAoKSA9PiBuMS5zZXRQYWdlSW5kZXgoMCksXG4gICAgICAgIG9uTGFzdFBhZ2VDbGljazogKCkgPT4gbjEuc2V0UGFnZUluZGV4KG4xLmdldFBhZ2VDb3VudCgpIC0gMSksXG4gICAgICAgIG9uTmV4dENsaWNrOiAoKSA9PiB7XG4gICAgICAgICAgbjEubmV4dFBhZ2UoKSwgZCAmJiBuMS5yZXNldFJvd1NlbGVjdGlvbigpO1xuICAgICAgICB9LFxuICAgICAgICBvblByZXZDbGljazogKCkgPT4ge1xuICAgICAgICAgIG4xLnByZXZpb3VzUGFnZSgpLCBkICYmIG4xLnJlc2V0Um93U2VsZWN0aW9uKCk7XG4gICAgICAgIH0sXG4gICAgICAgIG9uUGFnZVNpemVDaGFuZ2U6ICh2MSkgPT4gbjEuc2V0UGFnZVNpemUoTnVtYmVyKHYxKSksXG4gICAgICAgIHBhZ2VTaXplT3B0aW9uczogTixcbiAgICAgICAgbG9hZGluZzogcjEsXG4gICAgICAgIGZvbnRTaXplOiB2XG4gICAgICB9XG4gICAgKSxcbiAgICBbXG4gICAgICBuMSxcbiAgICAgIG4xLnNldFBhZ2VJbmRleCxcbiAgICAgIG4xLm5leHRQYWdlLFxuICAgICAgbjEucHJldmlvdXNQYWdlLFxuICAgICAgUSxcbiAgICAgIEUsXG4gICAgICBuMS5nZXRSb3dNb2RlbCxcbiAgICAgIE4sXG4gICAgICBuMS5nZXRGaWx0ZXJlZFJvd01vZGVsKCkucm93cy5sZW5ndGgsXG4gICAgICBuMS5nZXRFeHBhbmRlZFJvd01vZGVsKCkucm93cy5sZW5ndGgsXG4gICAgICByMSxcbiAgICAgIG4xLmdldFBhZ2VDb3VudCgpLFxuICAgICAgZCxcbiAgICAgIG4xLmdldFN0YXRlKCkucGFnaW5hdGlvbi5wYWdlSW5kZXgsXG4gICAgICB1LFxuICAgICAgdlxuICAgIF1cbiAgKTtcbiAgQnIodCwgKCkgPT4gKHtcbiAgICAuLi5uMSxcbiAgICB0YWJsZUNvbmZpZzogbjEsXG4gICAgc2V0Q29sdW1uUmVzaXplTW9kZTogdyxcbiAgICByb3dTZWxlY3Rpb246IGssXG4gICAgcGFnaW5hdGlvbkRhdGE6IGkxLFxuICAgIGNvbHVtbkZpbHRlcnM6IEgsXG4gICAgc29ydGluZzogVSxcbiAgICBjb2x1bW5WaXNpYmlsaXR5OiBWLFxuICAgIHNldENvbHVtblZpc2liaWxpdHk6IFIsXG4gICAgY29sdW1uT3JkZXI6IEksXG4gICAgc2V0Q29sdW1uT3JkZXI6IGosXG4gICAgZ2xvYmFsRmlsdGVyOiBxXG4gIH0pKTtcbiAgY29uc3QgZDEgPSBtMChcbiAgICAoKSA9PiBuZXcgU2V0KFxuICAgICAgbjEuZ2V0QWxsRmxhdENvbHVtbnMoKS5maWx0ZXIoKHYxKSA9PiB7XG4gICAgICAgIHZhciBTMTtcbiAgICAgICAgcmV0dXJuICEoKFMxID0gdjEgPT0gbnVsbCA/IHZvaWQgMCA6IHYxLmNvbHVtbkRlZikgIT0gbnVsbCAmJiBTMS5oaWRlRnJvbUNvbHVtbkNob29zZXIpO1xuICAgICAgfSkuZmlsdGVyKCh2MSkgPT4ge1xuICAgICAgICB2YXIgUzE7XG4gICAgICAgIHJldHVybiAoKFMxID0gdjEgPT0gbnVsbCA/IHZvaWQgMCA6IHYxLmNvbHVtbnMpID09IG51bGwgPyB2b2lkIDAgOiBTMS5sZW5ndGgpID09PSAwO1xuICAgICAgfSkubWFwKCh2MSkgPT4gdjEuaWQpXG4gICAgKSxcbiAgICBbXVxuICApLCBbYjEsIGMxXSA9IG0xLnVzZVN0YXRlKHtcbiAgICBpdGVtczogei5sZW5ndGggPiAwID8gei5maWx0ZXIoKHYxKSA9PiB2MSAhPT0gXCJhY3Rpb25zXCIpIDogZDFcbiAgfSksIGExID0gbTAoXG4gICAgKCkgPT4gbmV3IFNldChcbiAgICAgIG4xLmdldEFsbEZsYXRDb2x1bW5zKCkuZmlsdGVyKCh2MSkgPT4ge1xuICAgICAgICB2YXIgUzE7XG4gICAgICAgIHJldHVybiAhKChTMSA9IHYxID09IG51bGwgPyB2b2lkIDAgOiB2MS5jb2x1bW5EZWYpICE9IG51bGwgJiYgUzEuaGlkZUZyb21Db2x1bW5DaG9vc2VyKTtcbiAgICAgIH0pLm1hcCgodjEpID0+IHYxLmlkKVxuICAgICksXG4gICAgW11cbiAgKSwgbDEgPSBfMSgoKSA9PiB7XG4gICAgY29uc3QgdjEgPSBuMS5nZXRBbGxGbGF0Q29sdW1ucygpLmZpbHRlcigoRDEpID0+IHtcbiAgICAgIHZhciBGMTtcbiAgICAgIHJldHVybiAoRjEgPSBEMSA9PSBudWxsID8gdm9pZCAwIDogRDEuY29sdW1uRGVmKSA9PSBudWxsID8gdm9pZCAwIDogRjEuaGlkZUZyb21Db2x1bW5DaG9vc2VyO1xuICAgIH0pLm1hcCgoRDEpID0+IEQxLmlkKSwgUzEgPSBBcnJheS5mcm9tKGIxLml0ZW1zKTtcbiAgICBqKFsuLi52MSwgLi4uUzFdKTtcbiAgfSwgW2IxLCBqXSksIHAxID0gXzEoKCkgPT4ge1xuICAgIGNvbnN0IHYxID0gbjEuZ2V0QWxsRmxhdENvbHVtbnMoKS5tYXAoKFMxKSA9PiBTMS5pZCk7XG4gICAgaih2MSk7XG4gIH0sIFtuMSwgal0pLCBNMSA9IF8xKCgpID0+IHtcbiAgICBjMSh7IGl0ZW1zOiBkMSB9KSwgUih7fSk7XG4gIH0sIFtkMV0pLCBBMSA9IF8xKFxuICAgICh2MSkgPT4ge1xuICAgICAgUih2MSk7XG4gICAgfSxcbiAgICBbUl1cbiAgKSwgdTEgPSAodjEpID0+IHtcbiAgICBjMSh2MSk7XG4gIH0sIGgxID0gKHYxLCBTMSkgPT4ge1xuICAgIHZhciBEMSA9IDA7XG4gICAgcmV0dXJuIFMxLmZvckVhY2goZnVuY3Rpb24oRjEpIHtcbiAgICAgIEQxID0gRDEgKyB2MS5pbmNsdWRlcyhGMSk7XG4gICAgfSksIEQxID09PSAxO1xuICB9LCBDMSA9ICh2MSkgPT4ge1xuICAgIGNvbnN0IFMxID0gdjEuY29sdW1uRGVmO1xuICAgIGlmIChTMSAhPSBudWxsICYmIFMxLmZpbHRlclR5cGUpXG4gICAgICByZXR1cm4gUzEuZmlsdGVyVHlwZTtcbiAgICBjb25zdCBEMSA9IFtcImJhbGFuY2VcIiwgXCJhbW91bnRcIl0sIEYxID0gW1wiZGF0ZVwiXSwgVTEgPSBbXCJzdGF0dXNcIl0sIGgwID0gW1wianVyaXNkaWN0aW9uXCJdO1xuICAgIHJldHVybiBoMSh2MS5pZC50b0xvd2VyQ2FzZSgpLCBGMSkgPyBcImRhdGVyYW5nZVwiIDogaDEodjEuaWQudG9Mb3dlckNhc2UoKSwgRDEpID8gXCJhbW91bnRcIiA6IGgxKHYxLmlkLnRvTG93ZXJDYXNlKCksIFUxKSA/IFwiZHJvcGRvd25cIiA6IGgxKHYxLmlkLnRvTG93ZXJDYXNlKCksIGgwKSA/IFwiZHJvcGRvd24tbXVsdGktY2hpcFwiIDogXCJpbnB1dFwiO1xuICB9LCBxMSA9ICh2MSwgUzEsIEQxKSA9PiB7XG4gICAgY29uc3QgRjEgPSB2MS5jb2x1bW5EZWY7XG4gICAgbGV0IFUxID0ge1xuICAgICAgdmFsdWU6IFwiXCIsXG4gICAgICBvcHRpb246IG51bGxcbiAgICB9O1xuICAgIGlmIChGMSAhPSBudWxsICYmIEYxLmdldEZpbHRlclNldHRpbmdzKVxuICAgICAgcmV0dXJuIEYxID09IG51bGwgPyB2b2lkIDAgOiBGMS5nZXRGaWx0ZXJTZXR0aW5ncyhEMSk7XG4gICAgc3dpdGNoIChTMSkge1xuICAgICAgY2FzZSBcImRhdGVyYW5nZVwiOlxuICAgICAgICBVMSA9IHtcbiAgICAgICAgICB2YWx1ZTogeyBtaW46IG51bGwsIG1heDogbnVsbCB9LFxuICAgICAgICAgIG9wdGlvbnM6IG51bGxcbiAgICAgICAgfTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIFwiYW1vdW50XCI6XG4gICAgICAgIFUxID0ge1xuICAgICAgICAgIHZhbHVlOiBTUChEMSwgRjEuYWNjZXNzb3JLZXksIHtcbiAgICAgICAgICAgIG1pblZhbHVlOiAwLFxuICAgICAgICAgICAgbWF4VmFsdWU6IDFlNlxuICAgICAgICAgIH0pLFxuICAgICAgICAgIG9wdGlvbnM6IG51bGxcbiAgICAgICAgfTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIFwiZHJvcGRvd24tbXVsdGlcIjpcbiAgICAgICAgVTEgPSB7XG4gICAgICAgICAgdmFsdWU6IFwiXCIsXG4gICAgICAgICAgb3B0aW9uczogZmEoXG4gICAgICAgICAgICBEMSxcbiAgICAgICAgICAgIEYxLmFjY2Vzc29yS2V5LFxuICAgICAgICAgICAgRjEgPT0gbnVsbCA/IHZvaWQgMCA6IEYxLmFjY2Vzc29yRm5cbiAgICAgICAgICApXG4gICAgICAgIH07XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBcImRyb3Bkb3duLW11bHRpLWNoaXBcIjpcbiAgICAgICAgVTEgPSB7XG4gICAgICAgICAgdmFsdWU6IFwiXCIsXG4gICAgICAgICAgb3B0aW9uczogZmEoXG4gICAgICAgICAgICBEMSxcbiAgICAgICAgICAgIEYxLmFjY2Vzc29yS2V5LFxuICAgICAgICAgICAgRjEgPT0gbnVsbCA/IHZvaWQgMCA6IEYxLmFjY2Vzc29yRm5cbiAgICAgICAgICApXG4gICAgICAgIH07XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBcImRyb3Bkb3duXCI6XG4gICAgICAgIFUxID0ge1xuICAgICAgICAgIHZhbHVlOiBcIlwiLFxuICAgICAgICAgIG9wdGlvbnM6IGZhKFxuICAgICAgICAgICAgRDEsXG4gICAgICAgICAgICBGMS5hY2Nlc3NvcktleSxcbiAgICAgICAgICAgIEYxID09IG51bGwgPyB2b2lkIDAgOiBGMS5hY2Nlc3NvckZuXG4gICAgICAgICAgKVxuICAgICAgICB9O1xuICAgIH1cbiAgICByZXR1cm4gVTE7XG4gIH0sIFIxID0gbTAoKCkgPT4ge1xuICAgIGxldCB2MSA9IFtdO1xuICAgIHJldHVybiBuMS5nZXRBbGxGbGF0Q29sdW1ucygpLm1hcCgoUzEpID0+IHtcbiAgICAgIHZhciBEMTtcbiAgICAgIGlmIChTMS5nZXRDYW5GaWx0ZXIoKSkge1xuICAgICAgICBjb25zdCBGMSA9IEMxKFMxKTtcbiAgICAgICAgbGV0IFUxID0ge1xuICAgICAgICAgIHR5cGU6IEYxLFxuICAgICAgICAgIGNvbHVtbklkOiBTMS5pZCxcbiAgICAgICAgICB0aXRsZTogUzEuaWQsXG4gICAgICAgICAgZmlsdGVyTGFiZWw6IChEMSA9IFMxLmNvbHVtbkRlZikgPT0gbnVsbCA/IHZvaWQgMCA6IEQxLmZpbHRlckxhYmVsLFxuICAgICAgICAgIHNldHRpbmdzOiBxMShTMSwgRjEsIGUuZGF0YSksXG4gICAgICAgICAgZW5hYmxlRmlsdGVyOiBTMS5nZXRDYW5GaWx0ZXIoKVxuICAgICAgICB9O1xuICAgICAgICB2MS5wdXNoKFUxKTtcbiAgICAgIH1cbiAgICB9KSwgdjE7XG4gIH0sIFtlLmRhdGFdKSwgazEgPSBtMChcbiAgICAoKSA9PiBCUChcbiAgICAgIGUuYWN0aW9uRGF0YSA/IGUuYWN0aW9uRGF0YSA6IFIxLFxuICAgICAgKGUgPT0gbnVsbCA/IHZvaWQgMCA6IGUuZmlsdGVyT3JkZXIpID8/IFtdLFxuICAgICAgXCJjb2x1bW5JZFwiXG4gICAgKSxcbiAgICBbKE4xID0gZSA9PSBudWxsID8gdm9pZCAwIDogZS5maWx0ZXJPcmRlcikgPT0gbnVsbCA/IHZvaWQgMCA6IE4xLmxlbmd0aCwgZS5hY3Rpb25EYXRhLCBlLmRhdGFdXG4gICk7XG4gIHJldHVybiAvKiBAX19QVVJFX18gKi8gZTEoczAsIHsgY2hpbGRyZW46IFtcbiAgICAhaCAmJiAvKiBAX19QVVJFX18gKi8gYyhcbiAgICAgIEpELFxuICAgICAge1xuICAgICAgICB0YWJsZURhdGE6IGsxLFxuICAgICAgICBtYXhWaXNpYmxlRmlsdGVyczogbyxcbiAgICAgICAgc2V0Q29sdW1uRmlsdGVyczogQyxcbiAgICAgICAgZGVmYXVsdENvbHVtbnNTdGF0ZTogZDEsXG4gICAgICAgIGFsbENvbHVtbnNTdGF0ZTogYTEsXG4gICAgICAgIGNvbHVtbnNTdGF0ZTogYjEsXG4gICAgICAgIGhhbmRsZUNoYW5nZUNvbHVtbk9yZGVyOiBsMSxcbiAgICAgICAgaGFuZGxlQ29sdW1uc1N0YXRlQ2hhbmdlOiB1MSxcbiAgICAgICAgaGFuZGxlUmVzZXRDb2x1bW5PcmRlcjogcDEsXG4gICAgICAgIHJlc2V0Q29sdW1uc1N0YXRlOiBNMSxcbiAgICAgICAgaGFuZGxlQ29sdW1uc0hpZGU6IEExLFxuICAgICAgICByaWdodFNpZGVDb250YWluZXI6IGUgPT0gbnVsbCA/IHZvaWQgMCA6IGUucmlnaHRTaWRlQ29udGFpbmVyLFxuICAgICAgICBjb2x1bW5GaWx0ZXJzOiBILFxuICAgICAgICB0YWJsZUNvbmZpZzogbjEsXG4gICAgICAgIGxvYWRpbmc6IHIxLFxuICAgICAgICBjb2x1bW5WaXNpYmlsaXR5OiBWLFxuICAgICAgICBzaG93UmlnaHRTaWRlQ29udGVudDogeSxcbiAgICAgICAgY29sdW1uQ2hvb3NlckFjdGlvbkxhYmVsOiBYLFxuICAgICAgICBlbmFibGVGaWx0ZXJJbmRpY2F0b3JEb3RzOiBGXG4gICAgICB9XG4gICAgKSxcbiAgICAvKiBAX19QVVJFX18gKi8gYyhcbiAgICAgIG5VLFxuICAgICAge1xuICAgICAgICAuLi5lLFxuICAgICAgICBjb2x1bW5SZXNpemVNb2RlOiBULFxuICAgICAgICB0YWJsZTogbjEsXG4gICAgICAgIHBhZ2luYXRpb246IGcgPyBudWxsIDogczEsXG4gICAgICAgIHNob3dUYWJsZUZvb3RlcjogZS5zaG93VGFibGVGb290ZXIsXG4gICAgICAgIHNob3dDb2xGaWx0ZXJzOiBlLnNob3dDb2xGaWx0ZXJzLFxuICAgICAgICBjb2x1bW5GaWx0ZXJzOiBILFxuICAgICAgICB0YWJsZUVtcHR5SW5mb1RleHQ6IG4sXG4gICAgICAgIHRhYmxlRW1wdHlCdG5UZXh0OiByLFxuICAgICAgICB0YWJsZUVtcHR5QWN0aW9uQnRuT25DbGljazogaSxcbiAgICAgICAgZ2V0Um93U3R5bGVzOiBhLFxuICAgICAgICByZW5kZXJTdWJDb21wb25lbnQ6IGwsXG4gICAgICAgIGxvYWRpbmc6IHIxLFxuICAgICAgICBmb250U2l6ZTogdixcbiAgICAgICAgY29sdW1uT3JkZXI6IEksXG4gICAgICAgIG9uUm93Q2xpY2s6IEIsXG4gICAgICAgIHBhZ2VTaXplQ291bnQ6IEUgfHwgMTBcbiAgICAgIH1cbiAgICApXG4gIF0gfSk7XG59LCBLXyA9IG0xLmZvcndhcmRSZWYoaVUpO1xuZnVuY3Rpb24gYVUoe1xuICB0ZXh0OiBlLFxuICBpY29uOiB0LFxuICBpc1JlYWRPbmx5OiBvLFxuICAuLi5uXG59KSB7XG4gIHJldHVybiBvICYmIChuLmRpc2FibGVkID0gITApLCAvKiBAX19QVVJFX18gKi8gZTEocXAsIHsgY2hpbGRyZW46IFtcbiAgICAvKiBAX19QVVJFX18gKi8gYyhrVywgeyAuLi5uLCB0eXBlOiBcInJhZGlvXCIgfSksXG4gICAgLyogQF9fUFVSRV9fICovIGUxKFhuLCB7IHRhYkluZGV4OiAwLCBjaGlsZHJlbjogW1xuICAgICAgdCAmJiAvKiBAX19QVVJFX18gKi8gYyhaMSwgeyBuYW1lOiB0LCBzaXplOiBcInh4c1wiIH0pLFxuICAgICAgZVxuICAgIF0gfSlcbiAgXSB9KTtcbn1cbmZ1bmN0aW9uIHNVKHtcbiAgZGF0YTogZSA9IFtdLFxuICBuYW1lOiB0LFxuICBoYXNDbGVhckJ1dHRvbjogbyA9ICExLFxuICBsYWJlbDogbixcbiAgc3VwcG9ydFRleHQ6IHIsXG4gIGlzRGlzYWJsZWQ6IGkgPSAhMSxcbiAgaXNFcnJvcjogYSxcbiAgaXNSZXF1aXJlZDogcyxcbiAgaXNSZWFkT25seTogbCxcbiAgZGVmYXVsdENoZWNrZWRWYWx1ZTogcCA9IFwiXCIsXG4gIG9uQ2hhbmdlQ2FsbGJhY2s6IGRcbn0sIGIpIHtcbiAgY29uc3QgW00sIHVdID0gVDEoXG4gICAgIXAgfHwgaVxuICApLCBbQSwgel0gPSBUMShcIlwiKSwgZiA9ICgpID0+IHtcbiAgICB6KFwiXCIpLCB1KCEwKTtcbiAgfSwgTyA9IChnKSA9PiB7XG4gICAgeihnLmN1cnJlbnRUYXJnZXQudmFsdWUpLCB1KCExKSwgZCAmJiBkKGcpO1xuICB9O1xuICByZXR1cm4gUDEoKCkgPT4ge1xuICAgIHoocCk7XG4gIH0sIFtwXSksIC8qIEBfX1BVUkVfXyAqLyBlMShzMCwgeyBjaGlsZHJlbjogW1xuICAgIG4gJiYgLyogQF9fUFVSRV9fICovIGUxKFxuICAgICAgVGEsXG4gICAgICB7XG4gICAgICAgIGlzRXJyb3I6IGEsXG4gICAgICAgIGlzRGlzYWJsZWQ6IGkgfHwgbCxcbiAgICAgICAgdmFyaWFudDogXCJsYWJlbC1zbS1yZWd1bGFyXCIsXG4gICAgICAgIGVsZW1lbnQ6IFwibGFiZWxcIixcbiAgICAgICAgY2xhc3NOYW1lOiBcInRvZ2dsZV9fbGFiZWxcIixcbiAgICAgICAgaHRtbEZvcjogbixcbiAgICAgICAgY2hpbGRyZW46IFtcbiAgICAgICAgICBuLFxuICAgICAgICAgIFwiIFwiLFxuICAgICAgICAgICFzICYmIC8qIEBfX1BVUkVfXyAqLyBjKGlyLCB7IGNoaWxkcmVuOiBcIk9wdGlvbmFsXCIgfSlcbiAgICAgICAgXVxuICAgICAgfVxuICAgICksXG4gICAgLyogQF9fUFVSRV9fICovIGUxKHlwLCB7IHJlZjogYiwgY2hpbGRyZW46IFtcbiAgICAgIC8qIEBfX1BVUkVfXyAqLyBjKFxuICAgICAgICBOVyxcbiAgICAgICAge1xuICAgICAgICAgICRpc0Vycm9yOiBhLFxuICAgICAgICAgICRpc0Rpc2FibGVkOiBpLFxuICAgICAgICAgICRpc1JlYWRPbmx5OiBsLFxuICAgICAgICAgIGNoaWxkcmVuOiBsID8gLyogQF9fUFVSRV9fICovIGMoVFcsIHsgY2hpbGRyZW46IEEgfSkgOiAvKiBAX19QVVJFX18gKi8gYyhzMCwgeyBjaGlsZHJlbjogKCgpID0+IGUubWFwKChnKSA9PiB7XG4gICAgICAgICAgICBjb25zdCB7IHZhbHVlOiB2LCB0ZXh0OiBMLCBpY29uOiB5LCBkaXNhYmxlZDogQiB9ID0gZywgWCA9IGkgfHwgQjtcbiAgICAgICAgICAgIHJldHVybiAvKiBAX19QVVJFX18gKi8gYyhcbiAgICAgICAgICAgICAgYVUsXG4gICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBkaXNhYmxlZDogWCxcbiAgICAgICAgICAgICAgICBuYW1lOiB0LFxuICAgICAgICAgICAgICAgIHZhbHVlOiB2LFxuICAgICAgICAgICAgICAgIHRleHQ6IEwsXG4gICAgICAgICAgICAgICAgaWNvbjogeSxcbiAgICAgICAgICAgICAgICBjaGVja2VkOiAhWCAmJiBBID09PSB2LFxuICAgICAgICAgICAgICAgIGlzUmVhZE9ubHk6IGwsXG4gICAgICAgICAgICAgICAgb25DaGFuZ2U6IE9cbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgTFxuICAgICAgICAgICAgKTtcbiAgICAgICAgICB9KSkoKSB9KVxuICAgICAgICB9XG4gICAgICApLFxuICAgICAgbyAmJiAvKiBAX19QVVJFX18gKi8gYyhcbiAgICAgICAgQjIsXG4gICAgICAgIHtcbiAgICAgICAgICBidXR0b25UeXBlOiBcImxpbmtcIixcbiAgICAgICAgICBpc0Rpc2FibGVkOiBNLFxuICAgICAgICAgIG9uQ2xpY2s6IGYsXG4gICAgICAgICAgY2hpbGRyZW46IFwiQ2xlYXJcIlxuICAgICAgICB9XG4gICAgICApXG4gICAgXSB9KSxcbiAgICAhIXIgJiYgLyogQF9fUFVSRV9fICovIGMoXG4gICAgICBRbyxcbiAgICAgIHtcbiAgICAgICAgaXNEaXNhYmxlZDogaSB8fCBsLFxuICAgICAgICBpc0Vycm9yOiBhLFxuICAgICAgICBjbGFzc05hbWU6IFwic3VwcG9ydFRleHRcIixcbiAgICAgICAgY2hpbGRyZW46IHJcbiAgICAgIH1cbiAgICApXG4gIF0gfSk7XG59XG5jb25zdCBjVSA9IEIwKHNVKSwgbWMgPSB7XG4gIFwiQWZyaWNhL0FiaWRqYW4gVGltZVwiOiBcIkFmcmljYS9BYmlkamFuXCIsXG4gIFwiQWZyaWNhL0FjY3JhIFRpbWVcIjogXCJBZnJpY2EvQWNjcmFcIixcbiAgXCJBZnJpY2EvQWRkaXNfQWJhYmEgVGltZVwiOiBcIkFmcmljYS9BZGRpc19BYmFiYVwiLFxuICBcIkFmcmljYS9BbGdpZXJzIFRpbWVcIjogXCJBZnJpY2EvQWxnaWVyc1wiLFxuICBcIkFmcmljYS9Bc21lcmEgVGltZVwiOiBcIkFmcmljYS9Bc21lcmFcIixcbiAgXCJBZnJpY2EvQmFtYWtvIFRpbWVcIjogXCJBZnJpY2EvQmFtYWtvXCIsXG4gIFwiQWZyaWNhL0Jhbmd1aSBUaW1lXCI6IFwiQWZyaWNhL0Jhbmd1aVwiLFxuICBcIkFmcmljYS9CYW5qdWwgVGltZVwiOiBcIkFmcmljYS9CYW5qdWxcIixcbiAgXCJBZnJpY2EvQmlzc2F1IFRpbWVcIjogXCJBZnJpY2EvQmlzc2F1XCIsXG4gIFwiQWZyaWNhL0JsYW50eXJlIFRpbWVcIjogXCJBZnJpY2EvQmxhbnR5cmVcIixcbiAgXCJBZnJpY2EvQnJhenphdmlsbGUgVGltZVwiOiBcIkFmcmljYS9CcmF6emF2aWxsZVwiLFxuICBcIkFmcmljYS9CdWp1bWJ1cmEgVGltZVwiOiBcIkFmcmljYS9CdWp1bWJ1cmFcIixcbiAgXCJBZnJpY2EvQ2Fpcm8gVGltZVwiOiBcIkFmcmljYS9DYWlyb1wiLFxuICBcIkFmcmljYS9DYXNhYmxhbmNhIFRpbWVcIjogXCJBZnJpY2EvQ2FzYWJsYW5jYVwiLFxuICBcIkFmcmljYS9DZXV0YSBUaW1lXCI6IFwiQWZyaWNhL0NldXRhXCIsXG4gIFwiQWZyaWNhL0NvbmFrcnkgVGltZVwiOiBcIkFmcmljYS9Db25ha3J5XCIsXG4gIFwiQWZyaWNhL0Rha2FyIFRpbWVcIjogXCJBZnJpY2EvRGFrYXJcIixcbiAgXCJBZnJpY2EvRGFyX2VzX1NhbGFhbSBUaW1lXCI6IFwiQWZyaWNhL0Rhcl9lc19TYWxhYW1cIixcbiAgXCJBZnJpY2EvRGppYm91dGkgVGltZVwiOiBcIkFmcmljYS9Eamlib3V0aVwiLFxuICBcIkFmcmljYS9Eb3VhbGEgVGltZVwiOiBcIkFmcmljYS9Eb3VhbGFcIixcbiAgXCJBZnJpY2EvRWxfQWFpdW4gVGltZVwiOiBcIkFmcmljYS9FbF9BYWl1blwiLFxuICBcIkFmcmljYS9GcmVldG93biBUaW1lXCI6IFwiQWZyaWNhL0ZyZWV0b3duXCIsXG4gIFwiQWZyaWNhL0dhYm9yb25lIFRpbWVcIjogXCJBZnJpY2EvR2Fib3JvbmVcIixcbiAgXCJBZnJpY2EvSGFyYXJlIFRpbWVcIjogXCJBZnJpY2EvSGFyYXJlXCIsXG4gIFwiQWZyaWNhL0pvaGFubmVzYnVyZyBUaW1lXCI6IFwiQWZyaWNhL0pvaGFubmVzYnVyZ1wiLFxuICBcIkFmcmljYS9KdWJhIFRpbWVcIjogXCJBZnJpY2EvSnViYVwiLFxuICBcIkFmcmljYS9LYW1wYWxhIFRpbWVcIjogXCJBZnJpY2EvS2FtcGFsYVwiLFxuICBcIkFmcmljYS9LaGFydG91bSBUaW1lXCI6IFwiQWZyaWNhL0toYXJ0b3VtXCIsXG4gIFwiQWZyaWNhL0tpZ2FsaSBUaW1lXCI6IFwiQWZyaWNhL0tpZ2FsaVwiLFxuICBcIkFmcmljYS9LaW5zaGFzYSBUaW1lXCI6IFwiQWZyaWNhL0tpbnNoYXNhXCIsXG4gIFwiQWZyaWNhL0xhZ29zIFRpbWVcIjogXCJBZnJpY2EvTGFnb3NcIixcbiAgXCJBZnJpY2EvTGlicmV2aWxsZSBUaW1lXCI6IFwiQWZyaWNhL0xpYnJldmlsbGVcIixcbiAgXCJBZnJpY2EvTG9tZSBUaW1lXCI6IFwiQWZyaWNhL0xvbWVcIixcbiAgXCJBZnJpY2EvTHVhbmRhIFRpbWVcIjogXCJBZnJpY2EvTHVhbmRhXCIsXG4gIFwiQWZyaWNhL0x1YnVtYmFzaGkgVGltZVwiOiBcIkFmcmljYS9MdWJ1bWJhc2hpXCIsXG4gIFwiQWZyaWNhL0x1c2FrYSBUaW1lXCI6IFwiQWZyaWNhL0x1c2FrYVwiLFxuICBcIkFmcmljYS9NYWxhYm8gVGltZVwiOiBcIkFmcmljYS9NYWxhYm9cIixcbiAgXCJBZnJpY2EvTWFwdXRvIFRpbWVcIjogXCJBZnJpY2EvTWFwdXRvXCIsXG4gIFwiQWZyaWNhL01hc2VydSBUaW1lXCI6IFwiQWZyaWNhL01hc2VydVwiLFxuICBcIkFmcmljYS9NYmFiYW5lIFRpbWVcIjogXCJBZnJpY2EvTWJhYmFuZVwiLFxuICBcIkFmcmljYS9Nb2dhZGlzaHUgVGltZVwiOiBcIkFmcmljYS9Nb2dhZGlzaHVcIixcbiAgXCJBZnJpY2EvTW9ucm92aWEgVGltZVwiOiBcIkFmcmljYS9Nb25yb3ZpYVwiLFxuICBcIkFmcmljYS9OYWlyb2JpIFRpbWVcIjogXCJBZnJpY2EvTmFpcm9iaVwiLFxuICBcIkFmcmljYS9OZGphbWVuYSBUaW1lXCI6IFwiQWZyaWNhL05kamFtZW5hXCIsXG4gIFwiQWZyaWNhL05pYW1leSBUaW1lXCI6IFwiQWZyaWNhL05pYW1leVwiLFxuICBcIkFmcmljYS9Ob3Vha2Nob3R0IFRpbWVcIjogXCJBZnJpY2EvTm91YWtjaG90dFwiLFxuICBcIkFmcmljYS9PdWFnYWRvdWdvdSBUaW1lXCI6IFwiQWZyaWNhL091YWdhZG91Z291XCIsXG4gIFwiQWZyaWNhL1BvcnRvLU5vdm8gVGltZVwiOiBcIkFmcmljYS9Qb3J0by1Ob3ZvXCIsXG4gIFwiQWZyaWNhL1Nhb19Ub21lIFRpbWVcIjogXCJBZnJpY2EvU2FvX1RvbWVcIixcbiAgXCJBZnJpY2EvVHJpcG9saSBUaW1lXCI6IFwiQWZyaWNhL1RyaXBvbGlcIixcbiAgXCJBZnJpY2EvVHVuaXMgVGltZVwiOiBcIkFmcmljYS9UdW5pc1wiLFxuICBcIkFmcmljYS9XaW5kaG9layBUaW1lXCI6IFwiQWZyaWNhL1dpbmRob2VrXCIsXG4gIFwiQW1lcmljYS9BZGFrIFRpbWVcIjogXCJBbWVyaWNhL0FkYWtcIixcbiAgXCJBbWVyaWNhL0FuY2hvcmFnZSBUaW1lXCI6IFwiQW1lcmljYS9BbmNob3JhZ2VcIixcbiAgXCJBbWVyaWNhL0FuZ3VpbGxhIFRpbWVcIjogXCJBbWVyaWNhL0FuZ3VpbGxhXCIsXG4gIFwiQW1lcmljYS9BbnRpZ3VhIFRpbWVcIjogXCJBbWVyaWNhL0FudGlndWFcIixcbiAgXCJBbWVyaWNhL0FyYWd1YWluYSBUaW1lXCI6IFwiQW1lcmljYS9BcmFndWFpbmFcIixcbiAgXCJBbWVyaWNhL0FyZ2VudGluYS9MYV9SaW9qYSBUaW1lXCI6IFwiQW1lcmljYS9BcmdlbnRpbmEvTGFfUmlvamFcIixcbiAgXCJBbWVyaWNhL0FyZ2VudGluYS9SaW9fR2FsbGVnb3MgVGltZVwiOiBcIkFtZXJpY2EvQXJnZW50aW5hL1Jpb19HYWxsZWdvc1wiLFxuICBcIkFtZXJpY2EvQXJnZW50aW5hL1NhbHRhIFRpbWVcIjogXCJBbWVyaWNhL0FyZ2VudGluYS9TYWx0YVwiLFxuICBcIkFtZXJpY2EvQXJnZW50aW5hL1Nhbl9KdWFuIFRpbWVcIjogXCJBbWVyaWNhL0FyZ2VudGluYS9TYW5fSnVhblwiLFxuICBcIkFtZXJpY2EvQXJnZW50aW5hL1Nhbl9MdWlzIFRpbWVcIjogXCJBbWVyaWNhL0FyZ2VudGluYS9TYW5fTHVpc1wiLFxuICBcIkFtZXJpY2EvQXJnZW50aW5hL1R1Y3VtYW4gVGltZVwiOiBcIkFtZXJpY2EvQXJnZW50aW5hL1R1Y3VtYW5cIixcbiAgXCJBbWVyaWNhL0FyZ2VudGluYS9Vc2h1YWlhIFRpbWVcIjogXCJBbWVyaWNhL0FyZ2VudGluYS9Vc2h1YWlhXCIsXG4gIFwiQW1lcmljYS9BcnViYSBUaW1lXCI6IFwiQW1lcmljYS9BcnViYVwiLFxuICBcIkFtZXJpY2EvQXN1bmNpb24gVGltZVwiOiBcIkFtZXJpY2EvQXN1bmNpb25cIixcbiAgXCJBbWVyaWNhL0JhaGlhIFRpbWVcIjogXCJBbWVyaWNhL0JhaGlhXCIsXG4gIFwiQW1lcmljYS9CYWhpYV9CYW5kZXJhcyBUaW1lXCI6IFwiQW1lcmljYS9CYWhpYV9CYW5kZXJhc1wiLFxuICBcIkFtZXJpY2EvQmFyYmFkb3MgVGltZVwiOiBcIkFtZXJpY2EvQmFyYmFkb3NcIixcbiAgXCJBbWVyaWNhL0JlbGVtIFRpbWVcIjogXCJBbWVyaWNhL0JlbGVtXCIsXG4gIFwiQW1lcmljYS9CZWxpemUgVGltZVwiOiBcIkFtZXJpY2EvQmVsaXplXCIsXG4gIFwiQW1lcmljYS9CbGFuYy1TYWJsb24gVGltZVwiOiBcIkFtZXJpY2EvQmxhbmMtU2FibG9uXCIsXG4gIFwiQW1lcmljYS9Cb2FfVmlzdGEgVGltZVwiOiBcIkFtZXJpY2EvQm9hX1Zpc3RhXCIsXG4gIFwiQW1lcmljYS9Cb2dvdGEgVGltZVwiOiBcIkFtZXJpY2EvQm9nb3RhXCIsXG4gIFwiQW1lcmljYS9Cb2lzZSBUaW1lXCI6IFwiQW1lcmljYS9Cb2lzZVwiLFxuICBcIkFtZXJpY2EvQnVlbm9zX0FpcmVzIFRpbWVcIjogXCJBbWVyaWNhL0J1ZW5vc19BaXJlc1wiLFxuICBcIkFtZXJpY2EvQ2FtYnJpZGdlX0JheSBUaW1lXCI6IFwiQW1lcmljYS9DYW1icmlkZ2VfQmF5XCIsXG4gIFwiQW1lcmljYS9DYW1wb19HcmFuZGUgVGltZVwiOiBcIkFtZXJpY2EvQ2FtcG9fR3JhbmRlXCIsXG4gIFwiQW1lcmljYS9DYW5jdW4gVGltZVwiOiBcIkFtZXJpY2EvQ2FuY3VuXCIsXG4gIFwiQW1lcmljYS9DYXJhY2FzIFRpbWVcIjogXCJBbWVyaWNhL0NhcmFjYXNcIixcbiAgXCJBbWVyaWNhL0NhdGFtYXJjYSBUaW1lXCI6IFwiQW1lcmljYS9DYXRhbWFyY2FcIixcbiAgXCJBbWVyaWNhL0NheWVubmUgVGltZVwiOiBcIkFtZXJpY2EvQ2F5ZW5uZVwiLFxuICBcIkFtZXJpY2EvQ2F5bWFuIFRpbWVcIjogXCJBbWVyaWNhL0NheW1hblwiLFxuICBcIkFtZXJpY2EvQ2hpY2FnbyBUaW1lXCI6IFwiQW1lcmljYS9DaGljYWdvXCIsXG4gIFwiQW1lcmljYS9DaGlodWFodWEgVGltZVwiOiBcIkFtZXJpY2EvQ2hpaHVhaHVhXCIsXG4gIFwiQW1lcmljYS9DaXVkYWRfSnVhcmV6IFRpbWVcIjogXCJBbWVyaWNhL0NpdWRhZF9KdWFyZXpcIixcbiAgXCJBbWVyaWNhL0NvcmFsX0hhcmJvdXIgVGltZVwiOiBcIkFtZXJpY2EvQ29yYWxfSGFyYm91clwiLFxuICBcIkFtZXJpY2EvQ29yZG9iYSBUaW1lXCI6IFwiQW1lcmljYS9Db3Jkb2JhXCIsXG4gIFwiQW1lcmljYS9Db3N0YV9SaWNhIFRpbWVcIjogXCJBbWVyaWNhL0Nvc3RhX1JpY2FcIixcbiAgXCJBbWVyaWNhL0NyZXN0b24gVGltZVwiOiBcIkFtZXJpY2EvQ3Jlc3RvblwiLFxuICBcIkFtZXJpY2EvQ3VpYWJhIFRpbWVcIjogXCJBbWVyaWNhL0N1aWFiYVwiLFxuICBcIkFtZXJpY2EvQ3VyYWNhbyBUaW1lXCI6IFwiQW1lcmljYS9DdXJhY2FvXCIsXG4gIFwiQW1lcmljYS9EYW5tYXJrc2hhdm4gVGltZVwiOiBcIkFtZXJpY2EvRGFubWFya3NoYXZuXCIsXG4gIFwiQW1lcmljYS9EYXdzb24gVGltZVwiOiBcIkFtZXJpY2EvRGF3c29uXCIsXG4gIFwiQW1lcmljYS9EYXdzb25fQ3JlZWsgVGltZVwiOiBcIkFtZXJpY2EvRGF3c29uX0NyZWVrXCIsXG4gIFwiQW1lcmljYS9EZW52ZXIgVGltZVwiOiBcIkFtZXJpY2EvRGVudmVyXCIsXG4gIFwiQW1lcmljYS9EZXRyb2l0IFRpbWVcIjogXCJBbWVyaWNhL0RldHJvaXRcIixcbiAgXCJBbWVyaWNhL0RvbWluaWNhIFRpbWVcIjogXCJBbWVyaWNhL0RvbWluaWNhXCIsXG4gIFwiQW1lcmljYS9FZG1vbnRvbiBUaW1lXCI6IFwiQW1lcmljYS9FZG1vbnRvblwiLFxuICBcIkFtZXJpY2EvRWlydW5lcGUgVGltZVwiOiBcIkFtZXJpY2EvRWlydW5lcGVcIixcbiAgXCJBbWVyaWNhL0VsX1NhbHZhZG9yIFRpbWVcIjogXCJBbWVyaWNhL0VsX1NhbHZhZG9yXCIsXG4gIFwiQW1lcmljYS9Gb3J0X05lbHNvbiBUaW1lXCI6IFwiQW1lcmljYS9Gb3J0X05lbHNvblwiLFxuICBcIkFtZXJpY2EvRm9ydGFsZXphIFRpbWVcIjogXCJBbWVyaWNhL0ZvcnRhbGV6YVwiLFxuICBcIkFtZXJpY2EvR2xhY2VfQmF5IFRpbWVcIjogXCJBbWVyaWNhL0dsYWNlX0JheVwiLFxuICBcIkFtZXJpY2EvR29kdGhhYiBUaW1lXCI6IFwiQW1lcmljYS9Hb2R0aGFiXCIsXG4gIFwiQW1lcmljYS9Hb29zZV9CYXkgVGltZVwiOiBcIkFtZXJpY2EvR29vc2VfQmF5XCIsXG4gIFwiQW1lcmljYS9HcmFuZF9UdXJrIFRpbWVcIjogXCJBbWVyaWNhL0dyYW5kX1R1cmtcIixcbiAgXCJBbWVyaWNhL0dyZW5hZGEgVGltZVwiOiBcIkFtZXJpY2EvR3JlbmFkYVwiLFxuICBcIkFtZXJpY2EvR3VhZGVsb3VwZSBUaW1lXCI6IFwiQW1lcmljYS9HdWFkZWxvdXBlXCIsXG4gIFwiQW1lcmljYS9HdWF0ZW1hbGEgVGltZVwiOiBcIkFtZXJpY2EvR3VhdGVtYWxhXCIsXG4gIFwiQW1lcmljYS9HdWF5YXF1aWwgVGltZVwiOiBcIkFtZXJpY2EvR3VheWFxdWlsXCIsXG4gIFwiQW1lcmljYS9HdXlhbmEgVGltZVwiOiBcIkFtZXJpY2EvR3V5YW5hXCIsXG4gIFwiQW1lcmljYS9IYWxpZmF4IFRpbWVcIjogXCJBbWVyaWNhL0hhbGlmYXhcIixcbiAgXCJBbWVyaWNhL0hhdmFuYSBUaW1lXCI6IFwiQW1lcmljYS9IYXZhbmFcIixcbiAgXCJBbWVyaWNhL0hlcm1vc2lsbG8gVGltZVwiOiBcIkFtZXJpY2EvSGVybW9zaWxsb1wiLFxuICBcIkFtZXJpY2EvSW5kaWFuYS9Lbm94IFRpbWVcIjogXCJBbWVyaWNhL0luZGlhbmEvS25veFwiLFxuICBcIkFtZXJpY2EvSW5kaWFuYS9NYXJlbmdvIFRpbWVcIjogXCJBbWVyaWNhL0luZGlhbmEvTWFyZW5nb1wiLFxuICBcIkFtZXJpY2EvSW5kaWFuYS9QZXRlcnNidXJnIFRpbWVcIjogXCJBbWVyaWNhL0luZGlhbmEvUGV0ZXJzYnVyZ1wiLFxuICBcIkFtZXJpY2EvSW5kaWFuYS9UZWxsX0NpdHkgVGltZVwiOiBcIkFtZXJpY2EvSW5kaWFuYS9UZWxsX0NpdHlcIixcbiAgXCJBbWVyaWNhL0luZGlhbmEvVmV2YXkgVGltZVwiOiBcIkFtZXJpY2EvSW5kaWFuYS9WZXZheVwiLFxuICBcIkFtZXJpY2EvSW5kaWFuYS9WaW5jZW5uZXMgVGltZVwiOiBcIkFtZXJpY2EvSW5kaWFuYS9WaW5jZW5uZXNcIixcbiAgXCJBbWVyaWNhL0luZGlhbmEvV2luYW1hYyBUaW1lXCI6IFwiQW1lcmljYS9JbmRpYW5hL1dpbmFtYWNcIixcbiAgXCJBbWVyaWNhL0luZGlhbmFwb2xpcyBUaW1lXCI6IFwiQW1lcmljYS9JbmRpYW5hcG9saXNcIixcbiAgXCJBbWVyaWNhL0ludXZpayBUaW1lXCI6IFwiQW1lcmljYS9JbnV2aWtcIixcbiAgXCJBbWVyaWNhL0lxYWx1aXQgVGltZVwiOiBcIkFtZXJpY2EvSXFhbHVpdFwiLFxuICBcIkFtZXJpY2EvSmFtYWljYSBUaW1lXCI6IFwiQW1lcmljYS9KYW1haWNhXCIsXG4gIFwiQW1lcmljYS9KdWp1eSBUaW1lXCI6IFwiQW1lcmljYS9KdWp1eVwiLFxuICBcIkFtZXJpY2EvSnVuZWF1IFRpbWVcIjogXCJBbWVyaWNhL0p1bmVhdVwiLFxuICBcIkFtZXJpY2EvS2VudHVja3kvTW9udGljZWxsbyBUaW1lXCI6IFwiQW1lcmljYS9LZW50dWNreS9Nb250aWNlbGxvXCIsXG4gIFwiQW1lcmljYS9LcmFsZW5kaWprIFRpbWVcIjogXCJBbWVyaWNhL0tyYWxlbmRpamtcIixcbiAgXCJBbWVyaWNhL0xhX1BheiBUaW1lXCI6IFwiQW1lcmljYS9MYV9QYXpcIixcbiAgXCJBbWVyaWNhL0xpbWEgVGltZVwiOiBcIkFtZXJpY2EvTGltYVwiLFxuICBcIkFtZXJpY2EvTG9zX0FuZ2VsZXMgVGltZVwiOiBcIkFtZXJpY2EvTG9zX0FuZ2VsZXNcIixcbiAgXCJBbWVyaWNhL0xvdWlzdmlsbGUgVGltZVwiOiBcIkFtZXJpY2EvTG91aXN2aWxsZVwiLFxuICBcIkFtZXJpY2EvTG93ZXJfUHJpbmNlcyBUaW1lXCI6IFwiQW1lcmljYS9Mb3dlcl9QcmluY2VzXCIsXG4gIFwiQW1lcmljYS9NYWNlaW8gVGltZVwiOiBcIkFtZXJpY2EvTWFjZWlvXCIsXG4gIFwiQW1lcmljYS9NYW5hZ3VhIFRpbWVcIjogXCJBbWVyaWNhL01hbmFndWFcIixcbiAgXCJBbWVyaWNhL01hbmF1cyBUaW1lXCI6IFwiQW1lcmljYS9NYW5hdXNcIixcbiAgXCJBbWVyaWNhL01hcmlnb3QgVGltZVwiOiBcIkFtZXJpY2EvTWFyaWdvdFwiLFxuICBcIkFtZXJpY2EvTWFydGluaXF1ZSBUaW1lXCI6IFwiQW1lcmljYS9NYXJ0aW5pcXVlXCIsXG4gIFwiQW1lcmljYS9NYXRhbW9yb3MgVGltZVwiOiBcIkFtZXJpY2EvTWF0YW1vcm9zXCIsXG4gIFwiQW1lcmljYS9NYXphdGxhbiBUaW1lXCI6IFwiQW1lcmljYS9NYXphdGxhblwiLFxuICBcIkFtZXJpY2EvTWVuZG96YSBUaW1lXCI6IFwiQW1lcmljYS9NZW5kb3phXCIsXG4gIFwiQW1lcmljYS9NZW5vbWluZWUgVGltZVwiOiBcIkFtZXJpY2EvTWVub21pbmVlXCIsXG4gIFwiQW1lcmljYS9NZXJpZGEgVGltZVwiOiBcIkFtZXJpY2EvTWVyaWRhXCIsXG4gIFwiQW1lcmljYS9NZXRsYWthdGxhIFRpbWVcIjogXCJBbWVyaWNhL01ldGxha2F0bGFcIixcbiAgXCJBbWVyaWNhL01leGljb19DaXR5IFRpbWVcIjogXCJBbWVyaWNhL01leGljb19DaXR5XCIsXG4gIFwiQW1lcmljYS9NaXF1ZWxvbiBUaW1lXCI6IFwiQW1lcmljYS9NaXF1ZWxvblwiLFxuICBcIkFtZXJpY2EvTW9uY3RvbiBUaW1lXCI6IFwiQW1lcmljYS9Nb25jdG9uXCIsXG4gIFwiQW1lcmljYS9Nb250ZXJyZXkgVGltZVwiOiBcIkFtZXJpY2EvTW9udGVycmV5XCIsXG4gIFwiQW1lcmljYS9Nb250ZXZpZGVvIFRpbWVcIjogXCJBbWVyaWNhL01vbnRldmlkZW9cIixcbiAgXCJBbWVyaWNhL01vbnRzZXJyYXQgVGltZVwiOiBcIkFtZXJpY2EvTW9udHNlcnJhdFwiLFxuICBcIkFtZXJpY2EvTmFzc2F1IFRpbWVcIjogXCJBbWVyaWNhL05hc3NhdVwiLFxuICBcIkFtZXJpY2EvTmV3X1lvcmsgVGltZVwiOiBcIkFtZXJpY2EvTmV3X1lvcmtcIixcbiAgXCJBbWVyaWNhL05pcGlnb24gVGltZVwiOiBcIkFtZXJpY2EvTmlwaWdvblwiLFxuICBcIkFtZXJpY2EvTm9tZSBUaW1lXCI6IFwiQW1lcmljYS9Ob21lXCIsXG4gIFwiQW1lcmljYS9Ob3JvbmhhIFRpbWVcIjogXCJBbWVyaWNhL05vcm9uaGFcIixcbiAgXCJBbWVyaWNhL05vcnRoX0Rha290YS9CZXVsYWggVGltZVwiOiBcIkFtZXJpY2EvTm9ydGhfRGFrb3RhL0JldWxhaFwiLFxuICBcIkFtZXJpY2EvTm9ydGhfRGFrb3RhL0NlbnRlciBUaW1lXCI6IFwiQW1lcmljYS9Ob3J0aF9EYWtvdGEvQ2VudGVyXCIsXG4gIFwiQW1lcmljYS9Ob3J0aF9EYWtvdGEvTmV3X1NhbGVtIFRpbWVcIjogXCJBbWVyaWNhL05vcnRoX0Rha290YS9OZXdfU2FsZW1cIixcbiAgXCJBbWVyaWNhL09qaW5hZ2EgVGltZVwiOiBcIkFtZXJpY2EvT2ppbmFnYVwiLFxuICBcIkFtZXJpY2EvUGFuYW1hIFRpbWVcIjogXCJBbWVyaWNhL1BhbmFtYVwiLFxuICBcIkFtZXJpY2EvUGFuZ25pcnR1bmcgVGltZVwiOiBcIkFtZXJpY2EvUGFuZ25pcnR1bmdcIixcbiAgXCJBbWVyaWNhL1BhcmFtYXJpYm8gVGltZVwiOiBcIkFtZXJpY2EvUGFyYW1hcmlib1wiLFxuICBcIkFtZXJpY2EvUGhvZW5peCBUaW1lXCI6IFwiQW1lcmljYS9QaG9lbml4XCIsXG4gIFwiQW1lcmljYS9Qb3J0LWF1LVByaW5jZSBUaW1lXCI6IFwiQW1lcmljYS9Qb3J0LWF1LVByaW5jZVwiLFxuICBcIkFtZXJpY2EvUG9ydF9vZl9TcGFpbiBUaW1lXCI6IFwiQW1lcmljYS9Qb3J0X29mX1NwYWluXCIsXG4gIFwiQW1lcmljYS9Qb3J0b19WZWxobyBUaW1lXCI6IFwiQW1lcmljYS9Qb3J0b19WZWxob1wiLFxuICBcIkFtZXJpY2EvUHVlcnRvX1JpY28gVGltZVwiOiBcIkFtZXJpY2EvUHVlcnRvX1JpY29cIixcbiAgXCJBbWVyaWNhL1B1bnRhX0FyZW5hcyBUaW1lXCI6IFwiQW1lcmljYS9QdW50YV9BcmVuYXNcIixcbiAgXCJBbWVyaWNhL1JhaW55X1JpdmVyIFRpbWVcIjogXCJBbWVyaWNhL1JhaW55X1JpdmVyXCIsXG4gIFwiQW1lcmljYS9SYW5raW5fSW5sZXQgVGltZVwiOiBcIkFtZXJpY2EvUmFua2luX0lubGV0XCIsXG4gIFwiQW1lcmljYS9SZWNpZmUgVGltZVwiOiBcIkFtZXJpY2EvUmVjaWZlXCIsXG4gIFwiQW1lcmljYS9SZWdpbmEgVGltZVwiOiBcIkFtZXJpY2EvUmVnaW5hXCIsXG4gIFwiQW1lcmljYS9SZXNvbHV0ZSBUaW1lXCI6IFwiQW1lcmljYS9SZXNvbHV0ZVwiLFxuICBcIkFtZXJpY2EvUmlvX0JyYW5jbyBUaW1lXCI6IFwiQW1lcmljYS9SaW9fQnJhbmNvXCIsXG4gIFwiQW1lcmljYS9TYW50YV9Jc2FiZWwgVGltZVwiOiBcIkFtZXJpY2EvU2FudGFfSXNhYmVsXCIsXG4gIFwiQW1lcmljYS9TYW50YXJlbSBUaW1lXCI6IFwiQW1lcmljYS9TYW50YXJlbVwiLFxuICBcIkFtZXJpY2EvU2FudGlhZ28gVGltZVwiOiBcIkFtZXJpY2EvU2FudGlhZ29cIixcbiAgXCJBbWVyaWNhL1NhbnRvX0RvbWluZ28gVGltZVwiOiBcIkFtZXJpY2EvU2FudG9fRG9taW5nb1wiLFxuICBcIkFtZXJpY2EvU2FvX1BhdWxvIFRpbWVcIjogXCJBbWVyaWNhL1Nhb19QYXVsb1wiLFxuICBcIkFtZXJpY2EvU2NvcmVzYnlzdW5kIFRpbWVcIjogXCJBbWVyaWNhL1Njb3Jlc2J5c3VuZFwiLFxuICBcIkFtZXJpY2EvU2l0a2EgVGltZVwiOiBcIkFtZXJpY2EvU2l0a2FcIixcbiAgXCJBbWVyaWNhL1N0X0JhcnRoZWxlbXkgVGltZVwiOiBcIkFtZXJpY2EvU3RfQmFydGhlbGVteVwiLFxuICBcIkFtZXJpY2EvU3RfSm9obnMgVGltZVwiOiBcIkFtZXJpY2EvU3RfSm9obnNcIixcbiAgXCJBbWVyaWNhL1N0X0tpdHRzIFRpbWVcIjogXCJBbWVyaWNhL1N0X0tpdHRzXCIsXG4gIFwiQW1lcmljYS9TdF9MdWNpYSBUaW1lXCI6IFwiQW1lcmljYS9TdF9MdWNpYVwiLFxuICBcIkFtZXJpY2EvU3RfVGhvbWFzIFRpbWVcIjogXCJBbWVyaWNhL1N0X1Rob21hc1wiLFxuICBcIkFtZXJpY2EvU3RfVmluY2VudCBUaW1lXCI6IFwiQW1lcmljYS9TdF9WaW5jZW50XCIsXG4gIFwiQW1lcmljYS9Td2lmdF9DdXJyZW50IFRpbWVcIjogXCJBbWVyaWNhL1N3aWZ0X0N1cnJlbnRcIixcbiAgXCJBbWVyaWNhL1RlZ3VjaWdhbHBhIFRpbWVcIjogXCJBbWVyaWNhL1RlZ3VjaWdhbHBhXCIsXG4gIFwiQW1lcmljYS9UaHVsZSBUaW1lXCI6IFwiQW1lcmljYS9UaHVsZVwiLFxuICBcIkFtZXJpY2EvVGh1bmRlcl9CYXkgVGltZVwiOiBcIkFtZXJpY2EvVGh1bmRlcl9CYXlcIixcbiAgXCJBbWVyaWNhL1RpanVhbmEgVGltZVwiOiBcIkFtZXJpY2EvVGlqdWFuYVwiLFxuICBcIkFtZXJpY2EvVG9yb250byBUaW1lXCI6IFwiQW1lcmljYS9Ub3JvbnRvXCIsXG4gIFwiQW1lcmljYS9Ub3J0b2xhIFRpbWVcIjogXCJBbWVyaWNhL1RvcnRvbGFcIixcbiAgXCJBbWVyaWNhL1ZhbmNvdXZlciBUaW1lXCI6IFwiQW1lcmljYS9WYW5jb3V2ZXJcIixcbiAgXCJBbWVyaWNhL1doaXRlaG9yc2UgVGltZVwiOiBcIkFtZXJpY2EvV2hpdGVob3JzZVwiLFxuICBcIkFtZXJpY2EvV2lubmlwZWcgVGltZVwiOiBcIkFtZXJpY2EvV2lubmlwZWdcIixcbiAgXCJBbWVyaWNhL1lha3V0YXQgVGltZVwiOiBcIkFtZXJpY2EvWWFrdXRhdFwiLFxuICBcIkFtZXJpY2EvWWVsbG93a25pZmUgVGltZVwiOiBcIkFtZXJpY2EvWWVsbG93a25pZmVcIixcbiAgXCJBbnRhcmN0aWNhL0Nhc2V5IFRpbWVcIjogXCJBbnRhcmN0aWNhL0Nhc2V5XCIsXG4gIFwiQW50YXJjdGljYS9EYXZpcyBUaW1lXCI6IFwiQW50YXJjdGljYS9EYXZpc1wiLFxuICBcIkFudGFyY3RpY2EvRHVtb250RFVydmlsbGUgVGltZVwiOiBcIkFudGFyY3RpY2EvRHVtb250RFVydmlsbGVcIixcbiAgXCJBbnRhcmN0aWNhL01hY3F1YXJpZSBUaW1lXCI6IFwiQW50YXJjdGljYS9NYWNxdWFyaWVcIixcbiAgXCJBbnRhcmN0aWNhL01hd3NvbiBUaW1lXCI6IFwiQW50YXJjdGljYS9NYXdzb25cIixcbiAgXCJBbnRhcmN0aWNhL01jTXVyZG8gVGltZVwiOiBcIkFudGFyY3RpY2EvTWNNdXJkb1wiLFxuICBcIkFudGFyY3RpY2EvUGFsbWVyIFRpbWVcIjogXCJBbnRhcmN0aWNhL1BhbG1lclwiLFxuICBcIkFudGFyY3RpY2EvUm90aGVyYSBUaW1lXCI6IFwiQW50YXJjdGljYS9Sb3RoZXJhXCIsXG4gIFwiQW50YXJjdGljYS9TeW93YSBUaW1lXCI6IFwiQW50YXJjdGljYS9TeW93YVwiLFxuICBcIkFudGFyY3RpY2EvVHJvbGwgVGltZVwiOiBcIkFudGFyY3RpY2EvVHJvbGxcIixcbiAgXCJBbnRhcmN0aWNhL1Zvc3RvayBUaW1lXCI6IFwiQW50YXJjdGljYS9Wb3N0b2tcIixcbiAgXCJBcmN0aWMvTG9uZ3llYXJieWVuIFRpbWVcIjogXCJBcmN0aWMvTG9uZ3llYXJieWVuXCIsXG4gIFwiQXNpYS9BZGVuIFRpbWVcIjogXCJBc2lhL0FkZW5cIixcbiAgXCJBc2lhL0FsbWF0eSBUaW1lXCI6IFwiQXNpYS9BbG1hdHlcIixcbiAgXCJBc2lhL0FtbWFuIFRpbWVcIjogXCJBc2lhL0FtbWFuXCIsXG4gIFwiQXNpYS9BbmFkeXIgVGltZVwiOiBcIkFzaWEvQW5hZHlyXCIsXG4gIFwiQXNpYS9BcXRhdSBUaW1lXCI6IFwiQXNpYS9BcXRhdVwiLFxuICBcIkFzaWEvQXF0b2JlIFRpbWVcIjogXCJBc2lhL0FxdG9iZVwiLFxuICBcIkFzaWEvQXNoZ2FiYXQgVGltZVwiOiBcIkFzaWEvQXNoZ2FiYXRcIixcbiAgXCJBc2lhL0F0eXJhdSBUaW1lXCI6IFwiQXNpYS9BdHlyYXVcIixcbiAgXCJBc2lhL0JhZ2hkYWQgVGltZVwiOiBcIkFzaWEvQmFnaGRhZFwiLFxuICBcIkFzaWEvQmFocmFpbiBUaW1lXCI6IFwiQXNpYS9CYWhyYWluXCIsXG4gIFwiQXNpYS9CYWt1IFRpbWVcIjogXCJBc2lhL0Jha3VcIixcbiAgXCJBc2lhL0Jhbmdrb2sgVGltZVwiOiBcIkFzaWEvQmFuZ2tva1wiLFxuICBcIkFzaWEvQmFybmF1bCBUaW1lXCI6IFwiQXNpYS9CYXJuYXVsXCIsXG4gIFwiQXNpYS9CZWlydXQgVGltZVwiOiBcIkFzaWEvQmVpcnV0XCIsXG4gIFwiQXNpYS9CaXNoa2VrIFRpbWVcIjogXCJBc2lhL0Jpc2hrZWtcIixcbiAgXCJBc2lhL0JydW5laSBUaW1lXCI6IFwiQXNpYS9CcnVuZWlcIixcbiAgXCJBc2lhL0NhbGN1dHRhIFRpbWVcIjogXCJBc2lhL0NhbGN1dHRhXCIsXG4gIFwiQXNpYS9DaGl0YSBUaW1lXCI6IFwiQXNpYS9DaGl0YVwiLFxuICBcIkFzaWEvQ2hvaWJhbHNhbiBUaW1lXCI6IFwiQXNpYS9DaG9pYmFsc2FuXCIsXG4gIFwiQXNpYS9Db2xvbWJvIFRpbWVcIjogXCJBc2lhL0NvbG9tYm9cIixcbiAgXCJBc2lhL0RhbWFzY3VzIFRpbWVcIjogXCJBc2lhL0RhbWFzY3VzXCIsXG4gIFwiQXNpYS9EaGFrYSBUaW1lXCI6IFwiQXNpYS9EaGFrYVwiLFxuICBcIkFzaWEvRGlsaSBUaW1lXCI6IFwiQXNpYS9EaWxpXCIsXG4gIFwiQXNpYS9EdWJhaSBUaW1lXCI6IFwiQXNpYS9EdWJhaVwiLFxuICBcIkFzaWEvRHVzaGFuYmUgVGltZVwiOiBcIkFzaWEvRHVzaGFuYmVcIixcbiAgXCJBc2lhL0ZhbWFndXN0YSBUaW1lXCI6IFwiQXNpYS9GYW1hZ3VzdGFcIixcbiAgXCJBc2lhL0dhemEgVGltZVwiOiBcIkFzaWEvR2F6YVwiLFxuICBcIkFzaWEvSGVicm9uIFRpbWVcIjogXCJBc2lhL0hlYnJvblwiLFxuICBcIkFzaWEvSG9uZ19Lb25nIFRpbWVcIjogXCJBc2lhL0hvbmdfS29uZ1wiLFxuICBcIkFzaWEvSG92ZCBUaW1lXCI6IFwiQXNpYS9Ib3ZkXCIsXG4gIFwiQXNpYS9Jcmt1dHNrIFRpbWVcIjogXCJBc2lhL0lya3V0c2tcIixcbiAgXCJBc2lhL0pha2FydGEgVGltZVwiOiBcIkFzaWEvSmFrYXJ0YVwiLFxuICBcIkFzaWEvSmF5YXB1cmEgVGltZVwiOiBcIkFzaWEvSmF5YXB1cmFcIixcbiAgXCJBc2lhL0plcnVzYWxlbSBUaW1lXCI6IFwiQXNpYS9KZXJ1c2FsZW1cIixcbiAgXCJBc2lhL0thYnVsIFRpbWVcIjogXCJBc2lhL0thYnVsXCIsXG4gIFwiQXNpYS9LYW1jaGF0a2EgVGltZVwiOiBcIkFzaWEvS2FtY2hhdGthXCIsXG4gIFwiQXNpYS9LYXJhY2hpIFRpbWVcIjogXCJBc2lhL0thcmFjaGlcIixcbiAgXCJBc2lhL0thdG1hbmR1IFRpbWVcIjogXCJBc2lhL0thdG1hbmR1XCIsXG4gIFwiQXNpYS9LaGFuZHlnYSBUaW1lXCI6IFwiQXNpYS9LaGFuZHlnYVwiLFxuICBcIkFzaWEvS3Jhc25veWFyc2sgVGltZVwiOiBcIkFzaWEvS3Jhc25veWFyc2tcIixcbiAgXCJBc2lhL0t1YWxhX0x1bXB1ciBUaW1lXCI6IFwiQXNpYS9LdWFsYV9MdW1wdXJcIixcbiAgXCJBc2lhL0t1Y2hpbmcgVGltZVwiOiBcIkFzaWEvS3VjaGluZ1wiLFxuICBcIkFzaWEvS3V3YWl0IFRpbWVcIjogXCJBc2lhL0t1d2FpdFwiLFxuICBcIkFzaWEvTWFjYXUgVGltZVwiOiBcIkFzaWEvTWFjYXVcIixcbiAgXCJBc2lhL01hZ2FkYW4gVGltZVwiOiBcIkFzaWEvTWFnYWRhblwiLFxuICBcIkFzaWEvTWFrYXNzYXIgVGltZVwiOiBcIkFzaWEvTWFrYXNzYXJcIixcbiAgXCJBc2lhL01hbmlsYSBUaW1lXCI6IFwiQXNpYS9NYW5pbGFcIixcbiAgXCJBc2lhL011c2NhdCBUaW1lXCI6IFwiQXNpYS9NdXNjYXRcIixcbiAgXCJBc2lhL05pY29zaWEgVGltZVwiOiBcIkFzaWEvTmljb3NpYVwiLFxuICBcIkFzaWEvTm92b2t1em5ldHNrIFRpbWVcIjogXCJBc2lhL05vdm9rdXpuZXRza1wiLFxuICBcIkFzaWEvTm92b3NpYmlyc2sgVGltZVwiOiBcIkFzaWEvTm92b3NpYmlyc2tcIixcbiAgXCJBc2lhL09tc2sgVGltZVwiOiBcIkFzaWEvT21za1wiLFxuICBcIkFzaWEvT3JhbCBUaW1lXCI6IFwiQXNpYS9PcmFsXCIsXG4gIFwiQXNpYS9QaG5vbV9QZW5oIFRpbWVcIjogXCJBc2lhL1Bobm9tX1BlbmhcIixcbiAgXCJBc2lhL1BvbnRpYW5hayBUaW1lXCI6IFwiQXNpYS9Qb250aWFuYWtcIixcbiAgXCJBc2lhL1B5b25neWFuZyBUaW1lXCI6IFwiQXNpYS9QeW9uZ3lhbmdcIixcbiAgXCJBc2lhL1FhdGFyIFRpbWVcIjogXCJBc2lhL1FhdGFyXCIsXG4gIFwiQXNpYS9Rb3N0YW5heSBUaW1lXCI6IFwiQXNpYS9Rb3N0YW5heVwiLFxuICBcIkFzaWEvUXl6eWxvcmRhIFRpbWVcIjogXCJBc2lhL1F5enlsb3JkYVwiLFxuICBcIkFzaWEvUmFuZ29vbiBUaW1lXCI6IFwiQXNpYS9SYW5nb29uXCIsXG4gIFwiQXNpYS9SaXlhZGggVGltZVwiOiBcIkFzaWEvUml5YWRoXCIsXG4gIFwiQXNpYS9TYWlnb24gVGltZVwiOiBcIkFzaWEvU2FpZ29uXCIsXG4gIFwiQXNpYS9TYWtoYWxpbiBUaW1lXCI6IFwiQXNpYS9TYWtoYWxpblwiLFxuICBcIkFzaWEvU2FtYXJrYW5kIFRpbWVcIjogXCJBc2lhL1NhbWFya2FuZFwiLFxuICBcIkFzaWEvU2VvdWwgVGltZVwiOiBcIkFzaWEvU2VvdWxcIixcbiAgXCJBc2lhL1NoYW5naGFpIFRpbWVcIjogXCJBc2lhL1NoYW5naGFpXCIsXG4gIFwiQXNpYS9TaW5nYXBvcmUgVGltZVwiOiBcIkFzaWEvU2luZ2Fwb3JlXCIsXG4gIFwiQXNpYS9TcmVkbmVrb2x5bXNrIFRpbWVcIjogXCJBc2lhL1NyZWRuZWtvbHltc2tcIixcbiAgXCJBc2lhL1RhaXBlaSBUaW1lXCI6IFwiQXNpYS9UYWlwZWlcIixcbiAgXCJBc2lhL1Rhc2hrZW50IFRpbWVcIjogXCJBc2lhL1Rhc2hrZW50XCIsXG4gIFwiQXNpYS9UYmlsaXNpIFRpbWVcIjogXCJBc2lhL1RiaWxpc2lcIixcbiAgXCJBc2lhL1RlaHJhbiBUaW1lXCI6IFwiQXNpYS9UZWhyYW5cIixcbiAgXCJBc2lhL1RoaW1waHUgVGltZVwiOiBcIkFzaWEvVGhpbXBodVwiLFxuICBcIkFzaWEvVG9reW8gVGltZVwiOiBcIkFzaWEvVG9reW9cIixcbiAgXCJBc2lhL1RvbXNrIFRpbWVcIjogXCJBc2lhL1RvbXNrXCIsXG4gIFwiQXNpYS9VbGFhbmJhYXRhciBUaW1lXCI6IFwiQXNpYS9VbGFhbmJhYXRhclwiLFxuICBcIkFzaWEvVXJ1bXFpIFRpbWVcIjogXCJBc2lhL1VydW1xaVwiLFxuICBcIkFzaWEvVXN0LU5lcmEgVGltZVwiOiBcIkFzaWEvVXN0LU5lcmFcIixcbiAgXCJBc2lhL1ZpZW50aWFuZSBUaW1lXCI6IFwiQXNpYS9WaWVudGlhbmVcIixcbiAgXCJBc2lhL1ZsYWRpdm9zdG9rIFRpbWVcIjogXCJBc2lhL1ZsYWRpdm9zdG9rXCIsXG4gIFwiQXNpYS9ZYWt1dHNrIFRpbWVcIjogXCJBc2lhL1lha3V0c2tcIixcbiAgXCJBc2lhL1lla2F0ZXJpbmJ1cmcgVGltZVwiOiBcIkFzaWEvWWVrYXRlcmluYnVyZ1wiLFxuICBcIkFzaWEvWWVyZXZhbiBUaW1lXCI6IFwiQXNpYS9ZZXJldmFuXCIsXG4gIFwiQXRsYW50aWMvQXpvcmVzIFRpbWVcIjogXCJBdGxhbnRpYy9Bem9yZXNcIixcbiAgXCJBdGxhbnRpYy9CZXJtdWRhIFRpbWVcIjogXCJBdGxhbnRpYy9CZXJtdWRhXCIsXG4gIFwiQXRsYW50aWMvQ2FuYXJ5IFRpbWVcIjogXCJBdGxhbnRpYy9DYW5hcnlcIixcbiAgXCJBdGxhbnRpYy9DYXBlX1ZlcmRlIFRpbWVcIjogXCJBdGxhbnRpYy9DYXBlX1ZlcmRlXCIsXG4gIFwiQXRsYW50aWMvRmFlcm9lIFRpbWVcIjogXCJBdGxhbnRpYy9GYWVyb2VcIixcbiAgXCJBdGxhbnRpYy9NYWRlaXJhIFRpbWVcIjogXCJBdGxhbnRpYy9NYWRlaXJhXCIsXG4gIFwiQXRsYW50aWMvUmV5a2phdmlrIFRpbWVcIjogXCJBdGxhbnRpYy9SZXlramF2aWtcIixcbiAgXCJBdGxhbnRpYy9Tb3V0aF9HZW9yZ2lhIFRpbWVcIjogXCJBdGxhbnRpYy9Tb3V0aF9HZW9yZ2lhXCIsXG4gIFwiQXRsYW50aWMvU3RfSGVsZW5hIFRpbWVcIjogXCJBdGxhbnRpYy9TdF9IZWxlbmFcIixcbiAgXCJBdGxhbnRpYy9TdGFubGV5IFRpbWVcIjogXCJBdGxhbnRpYy9TdGFubGV5XCIsXG4gIFwiQXVzdHJhbGlhL0FkZWxhaWRlIFRpbWVcIjogXCJBdXN0cmFsaWEvQWRlbGFpZGVcIixcbiAgXCJBdXN0cmFsaWEvQnJpc2JhbmUgVGltZVwiOiBcIkF1c3RyYWxpYS9CcmlzYmFuZVwiLFxuICBcIkF1c3RyYWxpYS9Ccm9rZW5fSGlsbCBUaW1lXCI6IFwiQXVzdHJhbGlhL0Jyb2tlbl9IaWxsXCIsXG4gIFwiQXVzdHJhbGlhL0N1cnJpZSBUaW1lXCI6IFwiQXVzdHJhbGlhL0N1cnJpZVwiLFxuICBcIkF1c3RyYWxpYS9EYXJ3aW4gVGltZVwiOiBcIkF1c3RyYWxpYS9EYXJ3aW5cIixcbiAgXCJBdXN0cmFsaWEvRXVjbGEgVGltZVwiOiBcIkF1c3RyYWxpYS9FdWNsYVwiLFxuICBcIkF1c3RyYWxpYS9Ib2JhcnQgVGltZVwiOiBcIkF1c3RyYWxpYS9Ib2JhcnRcIixcbiAgXCJBdXN0cmFsaWEvTGluZGVtYW4gVGltZVwiOiBcIkF1c3RyYWxpYS9MaW5kZW1hblwiLFxuICBcIkF1c3RyYWxpYS9Mb3JkX0hvd2UgVGltZVwiOiBcIkF1c3RyYWxpYS9Mb3JkX0hvd2VcIixcbiAgXCJBdXN0cmFsaWEvTWVsYm91cm5lIFRpbWVcIjogXCJBdXN0cmFsaWEvTWVsYm91cm5lXCIsXG4gIFwiQXVzdHJhbGlhL1BlcnRoIFRpbWVcIjogXCJBdXN0cmFsaWEvUGVydGhcIixcbiAgXCJBdXN0cmFsaWEvU3lkbmV5IFRpbWVcIjogXCJBdXN0cmFsaWEvU3lkbmV5XCIsXG4gIFwiRXVyb3BlL0Ftc3RlcmRhbSBUaW1lXCI6IFwiRXVyb3BlL0Ftc3RlcmRhbVwiLFxuICBcIkV1cm9wZS9BbmRvcnJhIFRpbWVcIjogXCJFdXJvcGUvQW5kb3JyYVwiLFxuICBcIkV1cm9wZS9Bc3RyYWtoYW4gVGltZVwiOiBcIkV1cm9wZS9Bc3RyYWtoYW5cIixcbiAgXCJFdXJvcGUvQXRoZW5zIFRpbWVcIjogXCJFdXJvcGUvQXRoZW5zXCIsXG4gIFwiRXVyb3BlL0JlbGdyYWRlIFRpbWVcIjogXCJFdXJvcGUvQmVsZ3JhZGVcIixcbiAgXCJFdXJvcGUvQmVybGluIFRpbWVcIjogXCJFdXJvcGUvQmVybGluXCIsXG4gIFwiRXVyb3BlL0JyYXRpc2xhdmEgVGltZVwiOiBcIkV1cm9wZS9CcmF0aXNsYXZhXCIsXG4gIFwiRXVyb3BlL0JydXNzZWxzIFRpbWVcIjogXCJFdXJvcGUvQnJ1c3NlbHNcIixcbiAgXCJFdXJvcGUvQnVjaGFyZXN0IFRpbWVcIjogXCJFdXJvcGUvQnVjaGFyZXN0XCIsXG4gIFwiRXVyb3BlL0J1ZGFwZXN0IFRpbWVcIjogXCJFdXJvcGUvQnVkYXBlc3RcIixcbiAgXCJFdXJvcGUvQnVzaW5nZW4gVGltZVwiOiBcIkV1cm9wZS9CdXNpbmdlblwiLFxuICBcIkV1cm9wZS9DaGlzaW5hdSBUaW1lXCI6IFwiRXVyb3BlL0NoaXNpbmF1XCIsXG4gIFwiRXVyb3BlL0NvcGVuaGFnZW4gVGltZVwiOiBcIkV1cm9wZS9Db3BlbmhhZ2VuXCIsXG4gIFwiRXVyb3BlL0R1YmxpbiBUaW1lXCI6IFwiRXVyb3BlL0R1YmxpblwiLFxuICBcIkV1cm9wZS9HaWJyYWx0YXIgVGltZVwiOiBcIkV1cm9wZS9HaWJyYWx0YXJcIixcbiAgXCJFdXJvcGUvR3Vlcm5zZXkgVGltZVwiOiBcIkV1cm9wZS9HdWVybnNleVwiLFxuICBcIkV1cm9wZS9IZWxzaW5raSBUaW1lXCI6IFwiRXVyb3BlL0hlbHNpbmtpXCIsXG4gIFwiRXVyb3BlL0lzbGVfb2ZfTWFuIFRpbWVcIjogXCJFdXJvcGUvSXNsZV9vZl9NYW5cIixcbiAgXCJFdXJvcGUvSXN0YW5idWwgVGltZVwiOiBcIkV1cm9wZS9Jc3RhbmJ1bFwiLFxuICBcIkV1cm9wZS9KZXJzZXkgVGltZVwiOiBcIkV1cm9wZS9KZXJzZXlcIixcbiAgXCJFdXJvcGUvS2FsaW5pbmdyYWQgVGltZVwiOiBcIkV1cm9wZS9LYWxpbmluZ3JhZFwiLFxuICBcIkV1cm9wZS9LaWV2IFRpbWVcIjogXCJFdXJvcGUvS2lldlwiLFxuICBcIkV1cm9wZS9LaXJvdiBUaW1lXCI6IFwiRXVyb3BlL0tpcm92XCIsXG4gIFwiRXVyb3BlL0xpc2JvbiBUaW1lXCI6IFwiRXVyb3BlL0xpc2JvblwiLFxuICBcIkV1cm9wZS9ManVibGphbmEgVGltZVwiOiBcIkV1cm9wZS9ManVibGphbmFcIixcbiAgXCJFdXJvcGUvTG9uZG9uIFRpbWVcIjogXCJFdXJvcGUvTG9uZG9uXCIsXG4gIFwiRXVyb3BlL0x1eGVtYm91cmcgVGltZVwiOiBcIkV1cm9wZS9MdXhlbWJvdXJnXCIsXG4gIFwiRXVyb3BlL01hZHJpZCBUaW1lXCI6IFwiRXVyb3BlL01hZHJpZFwiLFxuICBcIkV1cm9wZS9NYWx0YSBUaW1lXCI6IFwiRXVyb3BlL01hbHRhXCIsXG4gIFwiRXVyb3BlL01hcmllaGFtbiBUaW1lXCI6IFwiRXVyb3BlL01hcmllaGFtblwiLFxuICBcIkV1cm9wZS9NaW5zayBUaW1lXCI6IFwiRXVyb3BlL01pbnNrXCIsXG4gIFwiRXVyb3BlL01vbmFjbyBUaW1lXCI6IFwiRXVyb3BlL01vbmFjb1wiLFxuICBcIkV1cm9wZS9Nb3Njb3cgVGltZVwiOiBcIkV1cm9wZS9Nb3Njb3dcIixcbiAgXCJFdXJvcGUvT3NsbyBUaW1lXCI6IFwiRXVyb3BlL09zbG9cIixcbiAgXCJFdXJvcGUvUGFyaXMgVGltZVwiOiBcIkV1cm9wZS9QYXJpc1wiLFxuICBcIkV1cm9wZS9Qb2Rnb3JpY2EgVGltZVwiOiBcIkV1cm9wZS9Qb2Rnb3JpY2FcIixcbiAgXCJFdXJvcGUvUHJhZ3VlIFRpbWVcIjogXCJFdXJvcGUvUHJhZ3VlXCIsXG4gIFwiRXVyb3BlL1JpZ2EgVGltZVwiOiBcIkV1cm9wZS9SaWdhXCIsXG4gIFwiRXVyb3BlL1JvbWUgVGltZVwiOiBcIkV1cm9wZS9Sb21lXCIsXG4gIFwiRXVyb3BlL1NhbWFyYSBUaW1lXCI6IFwiRXVyb3BlL1NhbWFyYVwiLFxuICBcIkV1cm9wZS9TYW5fTWFyaW5vIFRpbWVcIjogXCJFdXJvcGUvU2FuX01hcmlub1wiLFxuICBcIkV1cm9wZS9TYXJhamV2byBUaW1lXCI6IFwiRXVyb3BlL1NhcmFqZXZvXCIsXG4gIFwiRXVyb3BlL1NhcmF0b3YgVGltZVwiOiBcIkV1cm9wZS9TYXJhdG92XCIsXG4gIFwiRXVyb3BlL1NpbWZlcm9wb2wgVGltZVwiOiBcIkV1cm9wZS9TaW1mZXJvcG9sXCIsXG4gIFwiRXVyb3BlL1Nrb3BqZSBUaW1lXCI6IFwiRXVyb3BlL1Nrb3BqZVwiLFxuICBcIkV1cm9wZS9Tb2ZpYSBUaW1lXCI6IFwiRXVyb3BlL1NvZmlhXCIsXG4gIFwiRXVyb3BlL1N0b2NraG9sbSBUaW1lXCI6IFwiRXVyb3BlL1N0b2NraG9sbVwiLFxuICBcIkV1cm9wZS9UYWxsaW5uIFRpbWVcIjogXCJFdXJvcGUvVGFsbGlublwiLFxuICBcIkV1cm9wZS9UaXJhbmUgVGltZVwiOiBcIkV1cm9wZS9UaXJhbmVcIixcbiAgXCJFdXJvcGUvVWx5YW5vdnNrIFRpbWVcIjogXCJFdXJvcGUvVWx5YW5vdnNrXCIsXG4gIFwiRXVyb3BlL1V6aGdvcm9kIFRpbWVcIjogXCJFdXJvcGUvVXpoZ29yb2RcIixcbiAgXCJFdXJvcGUvVmFkdXogVGltZVwiOiBcIkV1cm9wZS9WYWR1elwiLFxuICBcIkV1cm9wZS9WYXRpY2FuIFRpbWVcIjogXCJFdXJvcGUvVmF0aWNhblwiLFxuICBcIkV1cm9wZS9WaWVubmEgVGltZVwiOiBcIkV1cm9wZS9WaWVubmFcIixcbiAgXCJFdXJvcGUvVmlsbml1cyBUaW1lXCI6IFwiRXVyb3BlL1ZpbG5pdXNcIixcbiAgXCJFdXJvcGUvVm9sZ29ncmFkIFRpbWVcIjogXCJFdXJvcGUvVm9sZ29ncmFkXCIsXG4gIFwiRXVyb3BlL1dhcnNhdyBUaW1lXCI6IFwiRXVyb3BlL1dhcnNhd1wiLFxuICBcIkV1cm9wZS9aYWdyZWIgVGltZVwiOiBcIkV1cm9wZS9aYWdyZWJcIixcbiAgXCJFdXJvcGUvWmFwb3Jvemh5ZSBUaW1lXCI6IFwiRXVyb3BlL1phcG9yb3poeWVcIixcbiAgXCJFdXJvcGUvWnVyaWNoIFRpbWVcIjogXCJFdXJvcGUvWnVyaWNoXCIsXG4gIFwiSW5kaWFuL0FudGFuYW5hcml2byBUaW1lXCI6IFwiSW5kaWFuL0FudGFuYW5hcml2b1wiLFxuICBcIkluZGlhbi9DaGFnb3MgVGltZVwiOiBcIkluZGlhbi9DaGFnb3NcIixcbiAgXCJJbmRpYW4vQ2hyaXN0bWFzIFRpbWVcIjogXCJJbmRpYW4vQ2hyaXN0bWFzXCIsXG4gIFwiSW5kaWFuL0NvY29zIFRpbWVcIjogXCJJbmRpYW4vQ29jb3NcIixcbiAgXCJJbmRpYW4vQ29tb3JvIFRpbWVcIjogXCJJbmRpYW4vQ29tb3JvXCIsXG4gIFwiSW5kaWFuL0tlcmd1ZWxlbiBUaW1lXCI6IFwiSW5kaWFuL0tlcmd1ZWxlblwiLFxuICBcIkluZGlhbi9NYWhlIFRpbWVcIjogXCJJbmRpYW4vTWFoZVwiLFxuICBcIkluZGlhbi9NYWxkaXZlcyBUaW1lXCI6IFwiSW5kaWFuL01hbGRpdmVzXCIsXG4gIFwiSW5kaWFuL01hdXJpdGl1cyBUaW1lXCI6IFwiSW5kaWFuL01hdXJpdGl1c1wiLFxuICBcIkluZGlhbi9NYXlvdHRlIFRpbWVcIjogXCJJbmRpYW4vTWF5b3R0ZVwiLFxuICBcIkluZGlhbi9SZXVuaW9uIFRpbWVcIjogXCJJbmRpYW4vUmV1bmlvblwiLFxuICBcIlBhY2lmaWMvQXBpYSBUaW1lXCI6IFwiUGFjaWZpYy9BcGlhXCIsXG4gIFwiUGFjaWZpYy9BdWNrbGFuZCBUaW1lXCI6IFwiUGFjaWZpYy9BdWNrbGFuZFwiLFxuICBcIlBhY2lmaWMvQm91Z2FpbnZpbGxlIFRpbWVcIjogXCJQYWNpZmljL0JvdWdhaW52aWxsZVwiLFxuICBcIlBhY2lmaWMvQ2hhdGhhbSBUaW1lXCI6IFwiUGFjaWZpYy9DaGF0aGFtXCIsXG4gIFwiUGFjaWZpYy9FYXN0ZXIgVGltZVwiOiBcIlBhY2lmaWMvRWFzdGVyXCIsXG4gIFwiUGFjaWZpYy9FZmF0ZSBUaW1lXCI6IFwiUGFjaWZpYy9FZmF0ZVwiLFxuICBcIlBhY2lmaWMvRW5kZXJidXJ5IFRpbWVcIjogXCJQYWNpZmljL0VuZGVyYnVyeVwiLFxuICBcIlBhY2lmaWMvRmFrYW9mbyBUaW1lXCI6IFwiUGFjaWZpYy9GYWthb2ZvXCIsXG4gIFwiUGFjaWZpYy9GaWppIFRpbWVcIjogXCJQYWNpZmljL0ZpamlcIixcbiAgXCJQYWNpZmljL0Z1bmFmdXRpIFRpbWVcIjogXCJQYWNpZmljL0Z1bmFmdXRpXCIsXG4gIFwiUGFjaWZpYy9HYWxhcGFnb3MgVGltZVwiOiBcIlBhY2lmaWMvR2FsYXBhZ29zXCIsXG4gIFwiUGFjaWZpYy9HYW1iaWVyIFRpbWVcIjogXCJQYWNpZmljL0dhbWJpZXJcIixcbiAgXCJQYWNpZmljL0d1YWRhbGNhbmFsIFRpbWVcIjogXCJQYWNpZmljL0d1YWRhbGNhbmFsXCIsXG4gIFwiUGFjaWZpYy9HdWFtIFRpbWVcIjogXCJQYWNpZmljL0d1YW1cIixcbiAgXCJQYWNpZmljL0hvbm9sdWx1IFRpbWVcIjogXCJQYWNpZmljL0hvbm9sdWx1XCIsXG4gIFwiUGFjaWZpYy9Kb2huc3RvbiBUaW1lXCI6IFwiUGFjaWZpYy9Kb2huc3RvblwiLFxuICBcIlBhY2lmaWMvS2lyaXRpbWF0aSBUaW1lXCI6IFwiUGFjaWZpYy9LaXJpdGltYXRpXCIsXG4gIFwiUGFjaWZpYy9Lb3NyYWUgVGltZVwiOiBcIlBhY2lmaWMvS29zcmFlXCIsXG4gIFwiUGFjaWZpYy9Ld2FqYWxlaW4gVGltZVwiOiBcIlBhY2lmaWMvS3dhamFsZWluXCIsXG4gIFwiUGFjaWZpYy9NYWp1cm8gVGltZVwiOiBcIlBhY2lmaWMvTWFqdXJvXCIsXG4gIFwiUGFjaWZpYy9NYXJxdWVzYXMgVGltZVwiOiBcIlBhY2lmaWMvTWFycXVlc2FzXCIsXG4gIFwiUGFjaWZpYy9NaWR3YXkgVGltZVwiOiBcIlBhY2lmaWMvTWlkd2F5XCIsXG4gIFwiUGFjaWZpYy9OYXVydSBUaW1lXCI6IFwiUGFjaWZpYy9OYXVydVwiLFxuICBcIlBhY2lmaWMvTml1ZSBUaW1lXCI6IFwiUGFjaWZpYy9OaXVlXCIsXG4gIFwiUGFjaWZpYy9Ob3Jmb2xrIFRpbWVcIjogXCJQYWNpZmljL05vcmZvbGtcIixcbiAgXCJQYWNpZmljL05vdW1lYSBUaW1lXCI6IFwiUGFjaWZpYy9Ob3VtZWFcIixcbiAgXCJQYWNpZmljL1BhZ29fUGFnbyBUaW1lXCI6IFwiUGFjaWZpYy9QYWdvX1BhZ29cIixcbiAgXCJQYWNpZmljL1BhbGF1IFRpbWVcIjogXCJQYWNpZmljL1BhbGF1XCIsXG4gIFwiUGFjaWZpYy9QaXRjYWlybiBUaW1lXCI6IFwiUGFjaWZpYy9QaXRjYWlyblwiLFxuICBcIlBhY2lmaWMvUG9uYXBlIFRpbWVcIjogXCJQYWNpZmljL1BvbmFwZVwiLFxuICBcIlBhY2lmaWMvUG9ydF9Nb3Jlc2J5IFRpbWVcIjogXCJQYWNpZmljL1BvcnRfTW9yZXNieVwiLFxuICBcIlBhY2lmaWMvUmFyb3RvbmdhIFRpbWVcIjogXCJQYWNpZmljL1Jhcm90b25nYVwiLFxuICBcIlBhY2lmaWMvU2FpcGFuIFRpbWVcIjogXCJQYWNpZmljL1NhaXBhblwiLFxuICBcIlBhY2lmaWMvVGFoaXRpIFRpbWVcIjogXCJQYWNpZmljL1RhaGl0aVwiLFxuICBcIlBhY2lmaWMvVGFyYXdhIFRpbWVcIjogXCJQYWNpZmljL1RhcmF3YVwiLFxuICBcIlBhY2lmaWMvVG9uZ2F0YXB1IFRpbWVcIjogXCJQYWNpZmljL1RvbmdhdGFwdVwiLFxuICBcIlBhY2lmaWMvVHJ1ayBUaW1lXCI6IFwiUGFjaWZpYy9UcnVrXCIsXG4gIFwiUGFjaWZpYy9XYWtlIFRpbWVcIjogXCJQYWNpZmljL1dha2VcIixcbiAgXCJQYWNpZmljL1dhbGxpcyBUaW1lXCI6IFwiUGFjaWZpYy9XYWxsaXNcIlxufTtcbiQuZGl2KFxuICAoeyB0aGVtZTogeyB0eXBvZ3JhcGh5OiBlLCBmb250V2VpZ2h0OiB0LCBsaW5lSGVpZ2h0OiBvIH0gfSkgPT4gbzFgXG4gICAgZGlzcGxheTogZmxleDtcbiAgICBhbGlnbi1pdGVtczogY2VudGVyO1xuICAgIGZvbnQtc2l6ZTogJHtlLnQxMn07XG4gICAgbGluZS1oZWlnaHQ6ICR7by5saDIyfTtcbiAgICBmb250LXdlaWdodDogJHt0LmxpZ2h0fTtcbiAgYFxuKTtcbmNvbnN0IGxVID0gJC5sYWJlbGBcbiAgZGlzcGxheTogZmxleDtcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbmAsIHBVID0gJC5zcGFuYFxuICBtYXJnaW4tbGVmdDogOHB4O1xuYCwgam4gPSAkLmRpdihcbiAgKHsgdGhlbWU6IHsgY29sb3JzOiBlLCBib3JkZXJSYWRpdXM6IHQgfSB9KSA9PiBvMWBcbiAgICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gICAgd2lkdGg6IDI0cHg7XG4gICAgaGVpZ2h0OiAxNnB4O1xuICAgIGJhY2tncm91bmQtY29sb3I6ICR7ZS50b2dnbGVTd2l0Y2gudG9nZ2xlQmdJbmFjdGl2ZURlZmF1bHR9O1xuICAgIGJvcmRlci1yYWRpdXM6IDMzcHg7XG4gICAgY3Vyc29yOiBwb2ludGVyO1xuICAgIHRyYW5zaXRpb246IGJhY2tncm91bmQtY29sb3IgMC4ycztcblxuICAgICY6YWZ0ZXIge1xuICAgICAgY29udGVudDogJyc7XG4gICAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgICB0b3A6IGNhbGMoNTAlIC0gNXB4KTtcbiAgICAgIGxlZnQ6IDRweDtcbiAgICAgIHdpZHRoOiAxMHB4O1xuICAgICAgaGVpZ2h0OiAxMHB4O1xuICAgICAgYmFja2dyb3VuZC1jb2xvcjogJHtlLmJhY2tncm91bmRzLmJnUHJpbWFyeX07XG4gICAgICBib3JkZXItcmFkaXVzOiAke3QuY2lyY2xlfTtcbiAgICAgIHRyYW5zaXRpb246IHRyYW5zZm9ybSAwLjJzO1xuICAgIH1cbiAgICAmOmhvdmVyIHtcbiAgICAgIGJhY2tncm91bmQtY29sb3I6ICR7ZS5iYWNrZ3JvdW5kcy5iZ0Rpc2FibGVkUHJpbWFyeX07XG4gICAgfVxuICAgICY6Zm9jdXMtdmlzaWJsZSB7XG4gICAgICBib3JkZXI6IDFweCBzb2xpZCAke2UuYm9yZGVyLmJvcmRlckZvY3VzZWR9O1xuICAgICAgb3V0bGluZS1jb2xvcjogJHtlLmJvcmRlci5ib3JkZXJGb2N1c2VkfTtcbiAgICB9XG4gIGBcbiksIGRVID0gJC5pbnB1dChcbiAgKHsgdGhlbWU6IHsgY29sb3JzOiBlIH0gfSkgPT4gbzFgXG4gICAgZGlzcGxheTogbm9uZTtcblxuICAgICY6ZGlzYWJsZWQgKyAke2pufSB7XG4gICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAke2UuYmFja2dyb3VuZHMuYmdEaXNhYmxlZFNlY29uZGFyeX07IC8vQ0JDOUUwO1xuICAgICAgJjphZnRlciB7XG4gICAgICAgIGJhY2tncm91bmQtY29sb3I6ICR7ZS5iYWNrZ3JvdW5kcy5iZ0Rpc2FibGVkUHJpbWFyeX07IFxuICAgICAgICAgICAgfVxuICAgICAgICAgIFxuICAgICAgJjpob3ZlciB7XG4gICAgICAgIGJhY2tncm91bmQtY29sb3I6ICR7ZS5iYWNrZ3JvdW5kcy5iZ0Rpc2FibGVkU2Vjb25kYXJ5fSAhaW1wb3J0YW50O1xuICAgICAgfVxuICAgICAgfVxuXG4gICAgJjpjaGVja2VkOmRpc2FibGVkICsgJHtqbn0ge1xuICAgICAgYmFja2dyb3VuZC1jb2xvcjogJHtlLmJhY2tncm91bmRzLmJnUmVhZE9ubHl9O1xuICAgICAgJjphZnRlciB7XG4gICAgICAgIGJhY2tncm91bmQtY29sb3I6ICR7ZS5iYWNrZ3JvdW5kcy5iZ1ByaW1hcnl9OyBcbiAgICAgICAgICAgIH1cbiAgICAgICY6aG92ZXIge1xuICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAke2UuYmFja2dyb3VuZHMuYmdSZWFkT25seX0gIWltcG9ydGFudDtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAmOmNoZWNrZWQgKyAke2pufSB7XG4gICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAke2UuYmFja2dyb3VuZHMuYmdUZXJ0aWFyeX07XG4gICAgICAmOmFmdGVyIHtcbiAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogJHtlLmJhY2tncm91bmRzLmJnUHJpbWFyeX07IFxuICAgICAgICAgICAgfVxuICAgICAgJjpob3ZlciB7XG4gICAgICAgIGJhY2tncm91bmQtY29sb3I6ICAke2UuYmFja2dyb3VuZHMuYmdQcmVzc2VkfSFpbXBvcnRhbnQ7XG4gICAgICB9XG4gICAgICAmOmFmdGVyIHtcbiAgICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVYKDZweCk7XG4gICAgICB9XG4gICAgfVxuICBgXG4pLCB4biA9IHtcbiAgb246IFwiT25cIixcbiAgb2ZmOiBcIk9mZlwiXG59O1xuZnVuY3Rpb24gYlUoeyBvbkNoYW5nZUNhbGxiYWNrOiBlLCBoYXNMYWJlbDogdCwgaXNEaXNhYmxlZDogbywgLi4ubiB9LCByKSB7XG4gIGNvbnN0IFtpLCBhXSA9IFQxKFxuICAgIG4uZGVmYXVsdENoZWNrZWQgPyB4bi5vbiA6IHhuLm9mZlxuICApO1xuICByZXR1cm4gKFxuICAgIC8vIDxTd2l0Y2hDb250YWluZXIgcmVmPXtyZWZ9PlxuICAgIC8qIEBfX1BVUkVfXyAqLyBlMShsVSwgeyBjaGlsZHJlbjogW1xuICAgICAgLyogQF9fUFVSRV9fICovIGMoXG4gICAgICAgIGRVLFxuICAgICAgICB7XG4gICAgICAgICAgdHlwZTogXCJjaGVja2JveFwiLFxuICAgICAgICAgIG9uQ2hhbmdlOiAobCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgcCA9IGwuY3VycmVudFRhcmdldC5jaGVja2VkO1xuICAgICAgICAgICAgYShwID8geG4ub24gOiB4bi5vZmYpLCBlICYmIGUocCk7XG4gICAgICAgICAgfSxcbiAgICAgICAgICBkaXNhYmxlZDogbyxcbiAgICAgICAgICAuLi5uXG4gICAgICAgIH1cbiAgICAgICksXG4gICAgICAvKiBAX19QVVJFX18gKi8gYyhqbiwgeyB0YWJJbmRleDogMSB9KSxcbiAgICAgIHQgJiYgLyogQF9fUFVSRV9fICovIGMocFUsIHsgY2hpbGRyZW46IGkgfSlcbiAgICBdIH0pXG4gICk7XG59XG5jb25zdCBNVSA9IEIwKGJVKTtcbmZ1bmN0aW9uIENhKGUpIHtcbiAgY29uc3Qge1xuICAgIGxhYmVsOiB0LFxuICAgIGRhdGVQaWNrZXJTdGF0ZVZhbHVlOiBvLFxuICAgIGdldEFsbFZhbHVlOiBuLFxuICAgICRpc1RpbWVab25lOiByLFxuICAgIGlzRGF0ZTogaSxcbiAgICBwcmVTZWxlY3RlZFZhbHVlOiBhLFxuICAgIGNhbGVuZGFyTWFudWFsSGFuZGxlcjogcyxcbiAgICBtYW51bGFTdGF0ZUlucHV0VmFsdWU6IGwsXG4gICAgaXNEaXNhYmxlZDogcCxcbiAgICBwbGFjZWhvbGRlcjogZCxcbiAgICBpc1JlcXVpcmVkOiBiLFxuICAgIG9uQ2hhbmdlOiBNLFxuICAgIHRvZGF5SGFuZGxlcjogdSxcbiAgICBjb25maXJtSGFuZGxlcjogQSxcbiAgICBnZXRTZWxlY3RlZFRpbWU6IHosXG4gICAgZ2V0VGltZVpvbmVWYWx1ZTogZixcbiAgICBwcmVTZWxlY3RlZFRpbWU6IE8sXG4gICAgc2V0SXNBY3RpdmVUaW1lOiBoLFxuICAgICRpc1RpbWU6IGcsXG4gICAgdmFsdWU6IHYsXG4gICAgaGFuZGxlQ2xlYXJCdXR0b246IEwsXG4gICAgaGlkZUNsZWFyQnV0dG9uOiB5LFxuICAgIC4uLkJcbiAgfSA9IGUsIFtYLCBGXSA9IFQxKFwiXCIpLCBbVCwgd10gPSBUMSghMSksIFtILCBDXSA9IFQxKFtdKSwgW3EsIG1dID0gVDEoe30pLCBbaywgeF0gPSBUMShudWxsKSwgW04sIFZdID0gVDEobnVsbCksIFtSLCBJXSA9IFQxKCksIFtqLCBVXSA9IFQxKFwiXCIpLCBbXywgcjFdID0gVDEoe30pLCBbSywgUV0gPSBUMSh7fSk7XG4gIGxldCBFID0gW107XG4gIGNvbnN0IFtELCBHXSA9IFQxKFtdKSwgW0osIFNdID0gVDEoW10pLCBXID0gW1xuICAgIHtcbiAgICAgIGljb246IFwiXCIsXG4gICAgICB0ZXh0OiBcIkFNXCIsXG4gICAgICB2YWx1ZTogXCJBTVwiXG4gICAgfSxcbiAgICB7XG4gICAgICBpY29uOiBcIlwiLFxuICAgICAgdGV4dDogXCJQTVwiLFxuICAgICAgdmFsdWU6IFwiUE1cIlxuICAgIH1cbiAgXTtcbiAgUDEoKCkgPT4ge1xuICAgIHQxKCk7XG4gIH0sIFtdKSwgUDEoKCkgPT4ge1xuICAgIGogJiYgZDEoaikgfHwgKChrID09IG51bGwgPyB2b2lkIDAgOiBrLmxhYmVsKSB8fCAoXyA9PSBudWxsID8gdm9pZCAwIDogXy5sYWJlbCkpICE9IG51bGwgJiYgKChLID09IG51bGwgPyB2b2lkIDAgOiBLLmxhYmVsKSB8fCAoTiA9PSBudWxsID8gdm9pZCAwIDogTi5sYWJlbCkpICE9IG51bGwgJiYgYCR7KGsgPT0gbnVsbCA/IHZvaWQgMCA6IGsubGFiZWwpID09IG51bGwgPyBfID09IG51bGwgPyB2b2lkIDAgOiBfLmxhYmVsIDogayA9PSBudWxsID8gdm9pZCAwIDogay5sYWJlbH0keyhOID09IG51bGwgPyB2b2lkIDAgOiBOLmxhYmVsKSA9PSBudWxsID8gSyA9PSBudWxsID8gdm9pZCAwIDogSy5sYWJlbCA6IE4gPT0gbnVsbCA/IHZvaWQgMCA6IE4ubGFiZWx9JHtYfWA7XG4gIH0sIFtdKSwgUDEoKCkgPT4ge1xuICAgIGkxKCksIG4xKCk7XG4gIH0sIFtdKSwgUDEoKCkgPT4ge1xuICAgIE8gIT0gbnVsbCAmJiBQKE8pO1xuICB9LCBbT10pO1xuICBjb25zdCBQID0gKGExKSA9PiB7XG4gICAgY29uc3QgbDEgPSBhMS5zbGljZShhMS5pbmRleE9mKFwiOlwiKSArIDEpLCBwMSA9IGExLnN1YnN0cmluZygwLCBhMS5pbmRleE9mKFwiOlwiKSk7XG4gICAgbGV0IE0xID0gbDEuaW5kZXhPZihcIkFNXCIpLCBBMSA9IGwxLmluZGV4T2YoXCJQTVwiKTtcbiAgICBjb25zdCB1MSA9IGwxLnRyaW0oKS5zbGljZSgwLCAyKTtcbiAgICBNMSA+IC0xID8gRihcIkFNXCIpIDogQTEgPiAtMSAmJiBGKFwiUE1cIik7XG4gICAgbGV0IGgxID0gcDEudHJpbSgpO1xuICAgIHIxKHtcbiAgICAgIGxhYmVsOiBoMSxcbiAgICAgIHZhbHVlOiBoMVxuICAgIH0pLCBRKHtcbiAgICAgIGxhYmVsOiB1MSxcbiAgICAgIHZhbHVlOiB1MVxuICAgIH0pO1xuICB9LCBZID0gKGExLCBsMSkgPT4ge1xuICAgIGxldCBwMSA9IFtdO1xuICAgIGExID09IG51bGwgfHwgYTEuZmlsdGVyKChNMSwgQTEpID0+IHtcbiAgICAgIHZhciB1MTtcbiAgICAgICh1MSA9IE0xID09IG51bGwgPyB2b2lkIDAgOiBNMS50aW1lWm9uZSkgIT0gbnVsbCAmJiB1MS56b25lLmluY2x1ZGVzKGwxKSAmJiBwMS5wdXNoKHtcbiAgICAgICAgZ3JvdXA6IE0xLmdyb3VwLFxuICAgICAgICB2YWx1ZTogQTEsXG4gICAgICAgIHRpbWVab25lOiB7XG4gICAgICAgICAgem9uZTogTTEudGltZVpvbmUuem9uZSxcbiAgICAgICAgICB0aW1lOiBNMS50aW1lWm9uZS50aW1lXG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH0pLCBtKHAxWzBdKTtcbiAgfTtcbiAgUDEoKCkgPT4ge1xuICAgIGNvbnN0IGExID0gSW50bC5EYXRlVGltZUZvcm1hdCgpLnJlc29sdmVkT3B0aW9ucygpLnRpbWVab25lO1xuICAgIFkoRSwgYTEpO1xuICB9LCBbXSk7XG4gIGNvbnN0IFogPSAoKSA9PiAvKiBAX19QVVJFX18gKi8gYyhcbiAgICBjVSxcbiAgICB7XG4gICAgICBkYXRhOiBXLFxuICAgICAgZGVmYXVsdENoZWNrZWRWYWx1ZTogWCxcbiAgICAgIGhhc0NsZWFyQnV0dG9uOiAhMSxcbiAgICAgIGlzRXJyb3I6ICExLFxuICAgICAgaXNEaXNhYmxlZDogITEsXG4gICAgICBpc1JlYWRPbmx5OiAhMSxcbiAgICAgIG9uQ2hhbmdlQ2FsbGJhY2s6IChhMSkgPT4ge1xuICAgICAgICBGKGExLnRhcmdldC52YWx1ZSk7XG4gICAgICB9LFxuICAgICAgbmFtZTogXCJ0b2dnbGVHcm91cFwiXG4gICAgfVxuICApLCB0MSA9ICgpID0+IHtcbiAgICBPYmplY3QgPT0gbnVsbCB8fCBPYmplY3Qua2V5cyhtYykubWFwKGZ1bmN0aW9uKGExLCBsMSkge1xuICAgICAgbGV0IHAxID0ge1xuICAgICAgICB0aW1lWm9uZTogbWNbYTFdLFxuICAgICAgICAvLyB5ZWFyOiAnbnVtZXJpYycsXG4gICAgICAgIC8vIG1vbnRoOiAnbnVtZXJpYycsXG4gICAgICAgIC8vIGRheTogJ251bWVyaWMnLFxuICAgICAgICBob3VyOiBcIm51bWVyaWNcIixcbiAgICAgICAgbWludXRlOiBcIm51bWVyaWNcIlxuICAgICAgICAvLyBzZWNvbmQ6ICdudW1lcmljJyxcbiAgICAgIH0sIEExID0gbmV3IEludGwuRGF0ZVRpbWVGb3JtYXQoW10sIHAxKS5mb3JtYXQoLyogQF9fUFVSRV9fICovIG5ldyBEYXRlKCkpLCB1MSA9IFtcbiAgICAgICAgXCJQYWNpZmljXCIsXG4gICAgICAgIFwiQW1lcmljYVwiLFxuICAgICAgICBcIkdNVFwiLFxuICAgICAgICBcIkV1cm9wZVwiLFxuICAgICAgICBcIkFmcmljYVwiLFxuICAgICAgICBcIkF0bGFudGljXCIsXG4gICAgICAgIFwiQXNpYVwiLFxuICAgICAgICBcIkF1c3RyYWxpYVwiXG4gICAgICBdO1xuICAgICAgY29uc3QgaDEgPSBBMS5zbGljZShBMS5pbmRleE9mKFwiLFwiKSArIDEpO1xuICAgICAgZm9yIChsZXQgQzEgPSAwOyBDMSA8PSB1MS5sZW5ndGg7IEMxKyspXG4gICAgICAgIGExLmluZGV4T2YodTFbQzFdKSA+PSAwICYmIEUucHVzaCh7XG4gICAgICAgICAgZ3JvdXA6IHUxW0MxXSxcbiAgICAgICAgICB2YWx1ZTogbDEsXG4gICAgICAgICAgdGltZVpvbmU6IHtcbiAgICAgICAgICAgIHpvbmU6IGExLFxuICAgICAgICAgICAgdGltZTogaDFcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH0pLCBDKEUpO1xuICB9LCBpMSA9ICgpID0+IHtcbiAgICBsZXQgYTEgPSBbXTtcbiAgICBmb3IgKGxldCBsMSA9IDE7IGwxIDw9IDEyOyBsMSsrKVxuICAgICAgYTEgPT0gbnVsbCB8fCBhMS5wdXNoKHtcbiAgICAgICAgbGFiZWw6IGwxID4gOSA/IGAke2wxfWAgOiBgMCR7bDF9YCxcbiAgICAgICAgdmFsdWU6IGwxID4gOSA/IGAke2wxfWAgOiBgMCR7bDF9YFxuICAgICAgfSk7XG4gICAgRyhhMSk7XG4gIH0sIG4xID0gKCkgPT4ge1xuICAgIGxldCBhMSA9IFtdO1xuICAgIGZvciAobGV0IGwxID0gMDsgbDEgPD0gNjA7IGwxKyspXG4gICAgICBhMSA9PSBudWxsIHx8IGExLnB1c2goe1xuICAgICAgICBsYWJlbDogbDEgPiA5ID8gYCR7bDF9YCA6IGAwJHtsMX1gLFxuICAgICAgICB2YWx1ZTogbDEgPiA5ID8gYCR7bDF9YCA6IGAwJHtsMX1gXG4gICAgICB9KTtcbiAgICBTKGExKTtcbiAgfSwgczEgPSAoYTEpID0+IHtcbiAgICBJKGExKSwgZiAmJiBmKGExKTtcbiAgfSwgZDEgPSAoYTEpID0+IHtcbiAgICBsZXQgbDEgPSBhMS5yZXBsYWNlKC9bQVAgUE1dL2csIFwiXCIpLCBwMSA9IC9eKFswLTFdP1swLTldfDJbMC00XSk6KFswLTVdWzAtOV0pKDpbMC01XVswLTldKT8kLy50ZXN0KFxuICAgICAgbDFcbiAgICApLCBNMSwgQTEgPSBhMS5pbmRleE9mKFwiQU1cIiksIHUxID0gYTEuaW5kZXhPZihcIlBNXCIpO1xuICAgIHJldHVybiBwMSAmJiAoQTEgPiAtMSB8fCB1MSA+IC0xKSA/IE0xID0gITAgOiBNMSA9ICExLCBNMTtcbiAgfSwgYjEgPSAoYTEpID0+IHtcbiAgICB4KGExKSwgVShcIlwiKTtcbiAgfSwgYzEgPSAoYTEpID0+IHtcbiAgICBWKGExKSwgVShcIlwiKTtcbiAgfTtcbiAgcmV0dXJuIFAxKCgpID0+IHtcbiAgICBsZXQgYTEgPSBrID09IG51bGwgPyB2b2lkIDAgOiBrLnZhbHVlLCBsMSA9IE4gPT0gbnVsbCA/IHZvaWQgMCA6IE4udmFsdWUsIHAxID0gYCR7YTF9IDogJHtsMX0gJHtYfWA7XG4gICAgYTEgIT0gbnVsbCAmJiBsMSAhPSBudWxsICYmIFggJiYgeiAmJiB6KHAxKSwgcSAmJiBmICYmIGYocSksIF8gIT0gbnVsbCAmJiBfLnZhbHVlICYmIHcoITApO1xuICB9LCBbaywgTiwgWCwgcV0pLCAvKiBAX19QVVJFX18gKi8gZTEod3AsIHsgaXNEaXNhYmxlZDogcCwgJGlzVGltZTogVCwgY2hpbGRyZW46IFtcbiAgICBpICYmIC8qIEBfX1BVUkVfXyAqLyBlMShzMCwgeyBjaGlsZHJlbjogW1xuICAgICAgLyogQF9fUFVSRV9fICovIGMoRFcsIHsgY2hpbGRyZW46IC8qIEBfX1BVUkVfXyAqLyBjKFAyLCB7fSkgfSksXG4gICAgICAvKiBAX19QVVJFX18gKi8gZTEoRlcsIHsgJGlzVGltZTogVCwgY2hpbGRyZW46IFtcbiAgICAgICAgLyogQF9fUFVSRV9fICovIGMoWFcsIHsgY2hpbGRyZW46IFwiU2VsZWN0IFRpbWVcIiB9KSxcbiAgICAgICAgLyogQF9fUFVSRV9fICovIGMoXG4gICAgICAgICAgTVUsXG4gICAgICAgICAge1xuICAgICAgICAgICAgZGVmYXVsdENoZWNrZWQ6IFQsXG4gICAgICAgICAgICBvbkNoYW5nZUNhbGxiYWNrOiAoYTEpID0+IHtcbiAgICAgICAgICAgICAgdyhhMSksIGggJiYgaChhMSk7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgaGFzTGFiZWw6ICExXG4gICAgICAgICAgfVxuICAgICAgICApXG4gICAgICBdIH0pXG4gICAgXSB9KSxcbiAgICBUICYmICFnICYmIC8qIEBfX1BVUkVfXyAqLyBjKFUyLCB7IGNoaWxkcmVuOiAvKiBAX19QVVJFX18gKi8gZTEoUzcsIHsgY2hpbGRyZW46IFtcbiAgICAgIC8qIEBfX1BVUkVfXyAqLyBlMSh4NywgeyBjaGlsZHJlbjogW1xuICAgICAgICAvKiBAX19QVVJFX18gKi8gYyhcbiAgICAgICAgICB0dCxcbiAgICAgICAgICB7XG4gICAgICAgICAgICBkYXRhOiBELFxuICAgICAgICAgICAgcGxhY2Vob2xkZXI6IFwiaGhcIixcbiAgICAgICAgICAgIGRyb3Bkb3duQm9keVdpZHRoOiBcIjcwcHhcIixcbiAgICAgICAgICAgIHBvc2l0aW9uOiBcInJpZ2h0XCIsXG4gICAgICAgICAgICBpc1NlYXJjaGFibGU6ICExLFxuICAgICAgICAgICAgaXNCb2R5R2VuZXJhdGVkOiAhMSxcbiAgICAgICAgICAgIGRlZmF1bHRWYWx1ZXM6IF8sXG4gICAgICAgICAgICBzZWxlY3RlZE9wdGlvbnM6IGIxXG4gICAgICAgICAgfVxuICAgICAgICApLFxuICAgICAgICAvKiBAX19QVVJFX18gKi8gYyhXNywgeyBjaGlsZHJlbjogXCI6XCIgfSksXG4gICAgICAgIC8qIEBfX1BVUkVfXyAqLyBjKFxuICAgICAgICAgIHR0LFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGRhdGE6IEosXG4gICAgICAgICAgICBkcm9wZG93bkJvZHlXaWR0aDogXCI3MHB4XCIsXG4gICAgICAgICAgICBwbGFjZWhvbGRlcjogXCJtbVwiLFxuICAgICAgICAgICAgcG9zaXRpb246IFwicmlnaHRcIixcbiAgICAgICAgICAgIGlzU2VhcmNoYWJsZTogITEsXG4gICAgICAgICAgICBpc0JvZHlHZW5lcmF0ZWQ6ICExLFxuICAgICAgICAgICAgZGVmYXVsdFZhbHVlczogSyxcbiAgICAgICAgICAgIHNlbGVjdGVkT3B0aW9uczogYzFcbiAgICAgICAgICB9XG4gICAgICAgIClcbiAgICAgIF0gfSksXG4gICAgICAvKiBAX19QVVJFX18gKi8gYyhSNywgeyBjaGlsZHJlbjogWigpIH0pXG4gICAgXSB9KSB9KSxcbiAgICAhaSAmJiBnICYmIC8qIEBfX1BVUkVfXyAqLyBjKFUyLCB7IGNoaWxkcmVuOiAvKiBAX19QVVJFX18gKi8gZTEoUzcsIHsgY2hpbGRyZW46IFtcbiAgICAgIC8qIEBfX1BVUkVfXyAqLyBlMSh4NywgeyBjaGlsZHJlbjogW1xuICAgICAgICAvKiBAX19QVVJFX18gKi8gYyhcbiAgICAgICAgICB0dCxcbiAgICAgICAgICB7XG4gICAgICAgICAgICBkYXRhOiBELFxuICAgICAgICAgICAgcGxhY2Vob2xkZXI6IFwiaGhcIixcbiAgICAgICAgICAgIGRyb3Bkb3duQm9keVdpZHRoOiBcIjcwcHhcIixcbiAgICAgICAgICAgIHBvc2l0aW9uOiBcInJpZ2h0XCIsXG4gICAgICAgICAgICBpc1NlYXJjaGFibGU6ICExLFxuICAgICAgICAgICAgaXNCb2R5R2VuZXJhdGVkOiAhMSxcbiAgICAgICAgICAgIGRlZmF1bHRWYWx1ZXM6IF8sXG4gICAgICAgICAgICBzZWxlY3RlZE9wdGlvbnM6IGIxXG4gICAgICAgICAgfVxuICAgICAgICApLFxuICAgICAgICAvKiBAX19QVVJFX18gKi8gYyhXNywgeyBjaGlsZHJlbjogXCI6XCIgfSksXG4gICAgICAgIC8qIEBfX1BVUkVfXyAqLyBjKFxuICAgICAgICAgIHR0LFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGRhdGE6IEosXG4gICAgICAgICAgICBkcm9wZG93bkJvZHlXaWR0aDogXCI3MHB4XCIsXG4gICAgICAgICAgICBwbGFjZWhvbGRlcjogXCJtbVwiLFxuICAgICAgICAgICAgcG9zaXRpb246IFwicmlnaHRcIixcbiAgICAgICAgICAgIGlzU2VhcmNoYWJsZTogITEsXG4gICAgICAgICAgICBpc0JvZHlHZW5lcmF0ZWQ6ICExLFxuICAgICAgICAgICAgZGVmYXVsdFZhbHVlczogSyxcbiAgICAgICAgICAgIHNlbGVjdGVkT3B0aW9uczogYzFcbiAgICAgICAgICB9XG4gICAgICAgIClcbiAgICAgIF0gfSksXG4gICAgICAvKiBAX19QVVJFX18gKi8gYyhSNywgeyBjaGlsZHJlbjogWigpIH0pXG4gICAgXSB9KSB9KSxcbiAgICByIHx8IFQgJiYgLyogQF9fUFVSRV9fICovIGMoQjcsIHsgY2hpbGRyZW46IC8qIEBfX1BVUkVfXyAqLyBjKFxuICAgICAgdHQsXG4gICAgICB7XG4gICAgICAgIGRhdGE6IEgsXG4gICAgICAgIHBsYWNlaG9sZGVyOiBcInBpY2sgYSB0aW1lem9uZVwiLFxuICAgICAgICBkcm9wZG93bkJvZHlXaWR0aDogXCIzMDBweFwiLFxuICAgICAgICBpY29uUmlnaHQ6IFwiV29ybGRcIixcbiAgICAgICAgcG9zaXRpb246IFwiY2VudGVyXCIsXG4gICAgICAgIGlzU2VhcmNoYWJsZTogITAsXG4gICAgICAgIGlzQm9keUdlbmVyYXRlZDogITEsXG4gICAgICAgIHNlbGVjdGVkT3B0aW9uczogczEsXG4gICAgICAgIGRlZmF1bHRWYWx1ZXM6IHEsXG4gICAgICAgIGhhbmRsZUNsZWFyRm46IEwsXG4gICAgICAgIGlzSGlkZUNsZWFyQnRuOiB5XG4gICAgICB9XG4gICAgKSB9KSxcbiAgICByICYmICFpICYmIC8qIEBfX1BVUkVfXyAqLyBjKEI3LCB7IGNoaWxkcmVuOiAvKiBAX19QVVJFX18gKi8gYyhcbiAgICAgIHR0LFxuICAgICAge1xuICAgICAgICBkYXRhOiBILFxuICAgICAgICBwbGFjZWhvbGRlcjogXCJwaWNrIGEgdGltZXpvbmVcIixcbiAgICAgICAgZHJvcGRvd25Cb2R5V2lkdGg6IFwiMzAwcHhcIixcbiAgICAgICAgaWNvblJpZ2h0OiBcIldvcmxkXCIsXG4gICAgICAgIGxhYmVsOiBnID8gXCJcIiA6IFwiVGltZSBab25lIFBpY2tlclwiLFxuICAgICAgICBwb3NpdGlvbjogXCJjZW50ZXJcIixcbiAgICAgICAgaXNTZWFyY2hhYmxlOiAhMCxcbiAgICAgICAgaXNCb2R5R2VuZXJhdGVkOiAhMSxcbiAgICAgICAgc2VsZWN0ZWRPcHRpb25zOiBzMSxcbiAgICAgICAgZGVmYXVsdFZhbHVlczogcSxcbiAgICAgICAgaXNEaXNhYmxlZDogcCxcbiAgICAgICAgaGFuZGxlQ2xlYXJGbjogTCxcbiAgICAgICAgaXNIaWRlQ2xlYXJCdG46IHlcbiAgICAgIH1cbiAgICApIH0pLFxuICAgIGkgJiYgLyogQF9fUFVSRV9fICovIGMoeTcsIHsgY2hpbGRyZW46IC8qIEBfX1BVUkVfXyAqLyBjKFAyLCB7fSkgfSksXG4gICAgIWkgJiYgZyAmJiAvKiBAX19QVVJFX18gKi8gYyh5NywgeyBjaGlsZHJlbjogLyogQF9fUFVSRV9fICovIGMoUDIsIHt9KSB9KVxuICBdIH0pO1xufVxuLy8hIG1vbWVudC5qc1xuLy8hIHZlcnNpb24gOiAyLjMwLjFcbi8vISBhdXRob3JzIDogVGltIFdvb2QsIElza3JlbiBDaGVybmV2LCBNb21lbnQuanMgY29udHJpYnV0b3JzXG4vLyEgbGljZW5zZSA6IE1JVFxuLy8hIG1vbWVudGpzLmNvbVxudmFyIERiO1xuZnVuY3Rpb24gJDEoKSB7XG4gIHJldHVybiBEYi5hcHBseShudWxsLCBhcmd1bWVudHMpO1xufVxuZnVuY3Rpb24gQVUoZSkge1xuICBEYiA9IGU7XG59XG5mdW5jdGlvbiBxZShlKSB7XG4gIHJldHVybiBlIGluc3RhbmNlb2YgQXJyYXkgfHwgT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKGUpID09PSBcIltvYmplY3QgQXJyYXldXCI7XG59XG5mdW5jdGlvbiBwMyhlKSB7XG4gIHJldHVybiBlICE9IG51bGwgJiYgT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKGUpID09PSBcIltvYmplY3QgT2JqZWN0XVwiO1xufVxuZnVuY3Rpb24gazAoZSwgdCkge1xuICByZXR1cm4gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGUsIHQpO1xufVxuZnVuY3Rpb24gSzYoZSkge1xuICBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMpXG4gICAgcmV0dXJuIE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKGUpLmxlbmd0aCA9PT0gMDtcbiAgdmFyIHQ7XG4gIGZvciAodCBpbiBlKVxuICAgIGlmIChrMChlLCB0KSlcbiAgICAgIHJldHVybiAhMTtcbiAgcmV0dXJuICEwO1xufVxuZnVuY3Rpb24gVDIoZSkge1xuICByZXR1cm4gZSA9PT0gdm9pZCAwO1xufVxuZnVuY3Rpb24gTXQoZSkge1xuICByZXR1cm4gdHlwZW9mIGUgPT0gXCJudW1iZXJcIiB8fCBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoZSkgPT09IFwiW29iamVjdCBOdW1iZXJdXCI7XG59XG5mdW5jdGlvbiBVcihlKSB7XG4gIHJldHVybiBlIGluc3RhbmNlb2YgRGF0ZSB8fCBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoZSkgPT09IFwiW29iamVjdCBEYXRlXVwiO1xufVxuZnVuY3Rpb24gSGIoZSwgdCkge1xuICB2YXIgbyA9IFtdLCBuLCByID0gZS5sZW5ndGg7XG4gIGZvciAobiA9IDA7IG4gPCByOyArK24pXG4gICAgby5wdXNoKHQoZVtuXSwgbikpO1xuICByZXR1cm4gbztcbn1cbmZ1bmN0aW9uIFd0KGUsIHQpIHtcbiAgZm9yICh2YXIgbyBpbiB0KVxuICAgIGswKHQsIG8pICYmIChlW29dID0gdFtvXSk7XG4gIHJldHVybiBrMCh0LCBcInRvU3RyaW5nXCIpICYmIChlLnRvU3RyaW5nID0gdC50b1N0cmluZyksIGswKHQsIFwidmFsdWVPZlwiKSAmJiAoZS52YWx1ZU9mID0gdC52YWx1ZU9mKSwgZTtcbn1cbmZ1bmN0aW9uIFFlKGUsIHQsIG8sIG4pIHtcbiAgcmV0dXJuIGNNKGUsIHQsIG8sIG4sICEwKS51dGMoKTtcbn1cbmZ1bmN0aW9uIHVVKCkge1xuICByZXR1cm4ge1xuICAgIGVtcHR5OiAhMSxcbiAgICB1bnVzZWRUb2tlbnM6IFtdLFxuICAgIHVudXNlZElucHV0OiBbXSxcbiAgICBvdmVyZmxvdzogLTIsXG4gICAgY2hhcnNMZWZ0T3ZlcjogMCxcbiAgICBudWxsSW5wdXQ6ICExLFxuICAgIGludmFsaWRFcmE6IG51bGwsXG4gICAgaW52YWxpZE1vbnRoOiBudWxsLFxuICAgIGludmFsaWRGb3JtYXQ6ICExLFxuICAgIHVzZXJJbnZhbGlkYXRlZDogITEsXG4gICAgaXNvOiAhMSxcbiAgICBwYXJzZWREYXRlUGFydHM6IFtdLFxuICAgIGVyYTogbnVsbCxcbiAgICBtZXJpZGllbTogbnVsbCxcbiAgICByZmMyODIyOiAhMSxcbiAgICB3ZWVrZGF5TWlzbWF0Y2g6ICExXG4gIH07XG59XG5mdW5jdGlvbiBDMChlKSB7XG4gIHJldHVybiBlLl9wZiA9PSBudWxsICYmIChlLl9wZiA9IHVVKCkpLCBlLl9wZjtcbn1cbnZhciB2NTtcbkFycmF5LnByb3RvdHlwZS5zb21lID8gdjUgPSBBcnJheS5wcm90b3R5cGUuc29tZSA6IHY1ID0gZnVuY3Rpb24oZSkge1xuICB2YXIgdCA9IE9iamVjdCh0aGlzKSwgbyA9IHQubGVuZ3RoID4+PiAwLCBuO1xuICBmb3IgKG4gPSAwOyBuIDwgbzsgbisrKVxuICAgIGlmIChuIGluIHQgJiYgZS5jYWxsKHRoaXMsIHRbbl0sIG4sIHQpKVxuICAgICAgcmV0dXJuICEwO1xuICByZXR1cm4gITE7XG59O1xuZnVuY3Rpb24gSjYoZSkge1xuICB2YXIgdCA9IG51bGwsIG8gPSAhMSwgbiA9IGUuX2QgJiYgIWlzTmFOKGUuX2QuZ2V0VGltZSgpKTtcbiAgaWYgKG4gJiYgKHQgPSBDMChlKSwgbyA9IHY1LmNhbGwodC5wYXJzZWREYXRlUGFydHMsIGZ1bmN0aW9uKHIpIHtcbiAgICByZXR1cm4gciAhPSBudWxsO1xuICB9KSwgbiA9IHQub3ZlcmZsb3cgPCAwICYmICF0LmVtcHR5ICYmICF0LmludmFsaWRFcmEgJiYgIXQuaW52YWxpZE1vbnRoICYmICF0LmludmFsaWRXZWVrZGF5ICYmICF0LndlZWtkYXlNaXNtYXRjaCAmJiAhdC5udWxsSW5wdXQgJiYgIXQuaW52YWxpZEZvcm1hdCAmJiAhdC51c2VySW52YWxpZGF0ZWQgJiYgKCF0Lm1lcmlkaWVtIHx8IHQubWVyaWRpZW0gJiYgbyksIGUuX3N0cmljdCAmJiAobiA9IG4gJiYgdC5jaGFyc0xlZnRPdmVyID09PSAwICYmIHQudW51c2VkVG9rZW5zLmxlbmd0aCA9PT0gMCAmJiB0LmJpZ0hvdXIgPT09IHZvaWQgMCkpLCBPYmplY3QuaXNGcm96ZW4gPT0gbnVsbCB8fCAhT2JqZWN0LmlzRnJvemVuKGUpKVxuICAgIGUuX2lzVmFsaWQgPSBuO1xuICBlbHNlXG4gICAgcmV0dXJuIG47XG4gIHJldHVybiBlLl9pc1ZhbGlkO1xufVxuZnVuY3Rpb24gbmkoZSkge1xuICB2YXIgdCA9IFFlKE5hTik7XG4gIHJldHVybiBlICE9IG51bGwgPyBXdChDMCh0KSwgZSkgOiBDMCh0KS51c2VySW52YWxpZGF0ZWQgPSAhMCwgdDtcbn1cbnZhciBMYyA9ICQxLm1vbWVudFByb3BlcnRpZXMgPSBbXSwgbWEgPSAhMTtcbmZ1bmN0aW9uIF82KGUsIHQpIHtcbiAgdmFyIG8sIG4sIHIsIGkgPSBMYy5sZW5ndGg7XG4gIGlmIChUMih0Ll9pc0FNb21lbnRPYmplY3QpIHx8IChlLl9pc0FNb21lbnRPYmplY3QgPSB0Ll9pc0FNb21lbnRPYmplY3QpLCBUMih0Ll9pKSB8fCAoZS5faSA9IHQuX2kpLCBUMih0Ll9mKSB8fCAoZS5fZiA9IHQuX2YpLCBUMih0Ll9sKSB8fCAoZS5fbCA9IHQuX2wpLCBUMih0Ll9zdHJpY3QpIHx8IChlLl9zdHJpY3QgPSB0Ll9zdHJpY3QpLCBUMih0Ll90em0pIHx8IChlLl90em0gPSB0Ll90em0pLCBUMih0Ll9pc1VUQykgfHwgKGUuX2lzVVRDID0gdC5faXNVVEMpLCBUMih0Ll9vZmZzZXQpIHx8IChlLl9vZmZzZXQgPSB0Ll9vZmZzZXQpLCBUMih0Ll9wZikgfHwgKGUuX3BmID0gQzAodCkpLCBUMih0Ll9sb2NhbGUpIHx8IChlLl9sb2NhbGUgPSB0Ll9sb2NhbGUpLCBpID4gMClcbiAgICBmb3IgKG8gPSAwOyBvIDwgaTsgbysrKVxuICAgICAgbiA9IExjW29dLCByID0gdFtuXSwgVDIocikgfHwgKGVbbl0gPSByKTtcbiAgcmV0dXJuIGU7XG59XG5mdW5jdGlvbiBZcihlKSB7XG4gIF82KHRoaXMsIGUpLCB0aGlzLl9kID0gbmV3IERhdGUoZS5fZCAhPSBudWxsID8gZS5fZC5nZXRUaW1lKCkgOiBOYU4pLCB0aGlzLmlzVmFsaWQoKSB8fCAodGhpcy5fZCA9IC8qIEBfX1BVUkVfXyAqLyBuZXcgRGF0ZShOYU4pKSwgbWEgPT09ICExICYmIChtYSA9ICEwLCAkMS51cGRhdGVPZmZzZXQodGhpcyksIG1hID0gITEpO1xufVxuZnVuY3Rpb24geWUoZSkge1xuICByZXR1cm4gZSBpbnN0YW5jZW9mIFlyIHx8IGUgIT0gbnVsbCAmJiBlLl9pc0FNb21lbnRPYmplY3QgIT0gbnVsbDtcbn1cbmZ1bmN0aW9uIFZiKGUpIHtcbiAgJDEuc3VwcHJlc3NEZXByZWNhdGlvbldhcm5pbmdzID09PSAhMSAmJiB0eXBlb2YgY29uc29sZSA8IFwidVwiICYmIGNvbnNvbGUud2FybiAmJiBjb25zb2xlLndhcm4oXCJEZXByZWNhdGlvbiB3YXJuaW5nOiBcIiArIGUpO1xufVxuZnVuY3Rpb24gdWUoZSwgdCkge1xuICB2YXIgbyA9ICEwO1xuICByZXR1cm4gV3QoZnVuY3Rpb24oKSB7XG4gICAgaWYgKCQxLmRlcHJlY2F0aW9uSGFuZGxlciAhPSBudWxsICYmICQxLmRlcHJlY2F0aW9uSGFuZGxlcihudWxsLCBlKSwgbykge1xuICAgICAgdmFyIG4gPSBbXSwgciwgaSwgYSwgcyA9IGFyZ3VtZW50cy5sZW5ndGg7XG4gICAgICBmb3IgKGkgPSAwOyBpIDwgczsgaSsrKSB7XG4gICAgICAgIGlmIChyID0gXCJcIiwgdHlwZW9mIGFyZ3VtZW50c1tpXSA9PSBcIm9iamVjdFwiKSB7XG4gICAgICAgICAgciArPSBgXG5bYCArIGkgKyBcIl0gXCI7XG4gICAgICAgICAgZm9yIChhIGluIGFyZ3VtZW50c1swXSlcbiAgICAgICAgICAgIGswKGFyZ3VtZW50c1swXSwgYSkgJiYgKHIgKz0gYSArIFwiOiBcIiArIGFyZ3VtZW50c1swXVthXSArIFwiLCBcIik7XG4gICAgICAgICAgciA9IHIuc2xpY2UoMCwgLTIpO1xuICAgICAgICB9IGVsc2VcbiAgICAgICAgICByID0gYXJndW1lbnRzW2ldO1xuICAgICAgICBuLnB1c2gocik7XG4gICAgICB9XG4gICAgICBWYihcbiAgICAgICAgZSArIGBcbkFyZ3VtZW50czogYCArIEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKG4pLmpvaW4oXCJcIikgKyBgXG5gICsgbmV3IEVycm9yKCkuc3RhY2tcbiAgICAgICksIG8gPSAhMTtcbiAgICB9XG4gICAgcmV0dXJuIHQuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgfSwgdCk7XG59XG52YXIgdmMgPSB7fTtcbmZ1bmN0aW9uIFBiKGUsIHQpIHtcbiAgJDEuZGVwcmVjYXRpb25IYW5kbGVyICE9IG51bGwgJiYgJDEuZGVwcmVjYXRpb25IYW5kbGVyKGUsIHQpLCB2Y1tlXSB8fCAoVmIodCksIHZjW2VdID0gITApO1xufVxuJDEuc3VwcHJlc3NEZXByZWNhdGlvbldhcm5pbmdzID0gITE7XG4kMS5kZXByZWNhdGlvbkhhbmRsZXIgPSBudWxsO1xuZnVuY3Rpb24gWmUoZSkge1xuICByZXR1cm4gdHlwZW9mIEZ1bmN0aW9uIDwgXCJ1XCIgJiYgZSBpbnN0YW5jZW9mIEZ1bmN0aW9uIHx8IE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChlKSA9PT0gXCJbb2JqZWN0IEZ1bmN0aW9uXVwiO1xufVxuZnVuY3Rpb24gelUoZSkge1xuICB2YXIgdCwgbztcbiAgZm9yIChvIGluIGUpXG4gICAgazAoZSwgbykgJiYgKHQgPSBlW29dLCBaZSh0KSA/IHRoaXNbb10gPSB0IDogdGhpc1tcIl9cIiArIG9dID0gdCk7XG4gIHRoaXMuX2NvbmZpZyA9IGUsIHRoaXMuX2RheU9mTW9udGhPcmRpbmFsUGFyc2VMZW5pZW50ID0gbmV3IFJlZ0V4cChcbiAgICAodGhpcy5fZGF5T2ZNb250aE9yZGluYWxQYXJzZS5zb3VyY2UgfHwgdGhpcy5fb3JkaW5hbFBhcnNlLnNvdXJjZSkgKyBcInxcIiArIC9cXGR7MSwyfS8uc291cmNlXG4gICk7XG59XG5mdW5jdGlvbiBxNShlLCB0KSB7XG4gIHZhciBvID0gV3Qoe30sIGUpLCBuO1xuICBmb3IgKG4gaW4gdClcbiAgICBrMCh0LCBuKSAmJiAocDMoZVtuXSkgJiYgcDModFtuXSkgPyAob1tuXSA9IHt9LCBXdChvW25dLCBlW25dKSwgV3Qob1tuXSwgdFtuXSkpIDogdFtuXSAhPSBudWxsID8gb1tuXSA9IHRbbl0gOiBkZWxldGUgb1tuXSk7XG4gIGZvciAobiBpbiBlKVxuICAgIGswKGUsIG4pICYmICFrMCh0LCBuKSAmJiBwMyhlW25dKSAmJiAob1tuXSA9IFd0KHt9LCBvW25dKSk7XG4gIHJldHVybiBvO1xufVxuZnVuY3Rpb24gJDYoZSkge1xuICBlICE9IG51bGwgJiYgdGhpcy5zZXQoZSk7XG59XG52YXIgeTU7XG5PYmplY3Qua2V5cyA/IHk1ID0gT2JqZWN0LmtleXMgOiB5NSA9IGZ1bmN0aW9uKGUpIHtcbiAgdmFyIHQsIG8gPSBbXTtcbiAgZm9yICh0IGluIGUpXG4gICAgazAoZSwgdCkgJiYgby5wdXNoKHQpO1xuICByZXR1cm4gbztcbn07XG52YXIgaFUgPSB7XG4gIHNhbWVEYXk6IFwiW1RvZGF5IGF0XSBMVFwiLFxuICBuZXh0RGF5OiBcIltUb21vcnJvdyBhdF0gTFRcIixcbiAgbmV4dFdlZWs6IFwiZGRkZCBbYXRdIExUXCIsXG4gIGxhc3REYXk6IFwiW1llc3RlcmRheSBhdF0gTFRcIixcbiAgbGFzdFdlZWs6IFwiW0xhc3RdIGRkZGQgW2F0XSBMVFwiLFxuICBzYW1lRWxzZTogXCJMXCJcbn07XG5mdW5jdGlvbiBPVShlLCB0LCBvKSB7XG4gIHZhciBuID0gdGhpcy5fY2FsZW5kYXJbZV0gfHwgdGhpcy5fY2FsZW5kYXIuc2FtZUVsc2U7XG4gIHJldHVybiBaZShuKSA/IG4uY2FsbCh0LCBvKSA6IG47XG59XG5mdW5jdGlvbiBHZShlLCB0LCBvKSB7XG4gIHZhciBuID0gXCJcIiArIE1hdGguYWJzKGUpLCByID0gdCAtIG4ubGVuZ3RoLCBpID0gZSA+PSAwO1xuICByZXR1cm4gKGkgPyBvID8gXCIrXCIgOiBcIlwiIDogXCItXCIpICsgTWF0aC5wb3coMTAsIE1hdGgubWF4KDAsIHIpKS50b1N0cmluZygpLnN1YnN0cigxKSArIG47XG59XG52YXIgZXMgPSAvKFxcW1teXFxbXSpcXF0pfChcXFxcKT8oW0hoXW1tKHNzKT98TW98TU0/TT9NP3xEb3xERERvfEREP0Q/RD98ZGRkP2Q/fGRvP3x3W298d10/fFdbb3xXXT98UW8/fE57MSw1fXxZWVlZWVl8WVlZWVl8WVlZWXxZWXx5ezIsNH18eW8/fGdnKGdnZz8pP3xHRyhHR0c/KT98ZXxFfGF8QXxoaD98SEg/fGtrP3xtbT98c3M/fFN7MSw5fXx4fFh8eno/fFpaP3wuKS9nLCBXbiA9IC8oXFxbW15cXFtdKlxcXSl8KFxcXFwpPyhMVFN8TFR8TEw/TD9MP3xsezEsNH0pL2csIExhID0ge30sIFAzID0ge307XG5mdW5jdGlvbiBkMChlLCB0LCBvLCBuKSB7XG4gIHZhciByID0gbjtcbiAgdHlwZW9mIG4gPT0gXCJzdHJpbmdcIiAmJiAociA9IGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiB0aGlzW25dKCk7XG4gIH0pLCBlICYmIChQM1tlXSA9IHIpLCB0ICYmIChQM1t0WzBdXSA9IGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiBHZShyLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyksIHRbMV0sIHRbMl0pO1xuICB9KSwgbyAmJiAoUDNbb10gPSBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gdGhpcy5sb2NhbGVEYXRhKCkub3JkaW5hbChcbiAgICAgIHIuYXBwbHkodGhpcywgYXJndW1lbnRzKSxcbiAgICAgIGVcbiAgICApO1xuICB9KTtcbn1cbmZ1bmN0aW9uIGZVKGUpIHtcbiAgcmV0dXJuIGUubWF0Y2goL1xcW1tcXHNcXFNdLykgPyBlLnJlcGxhY2UoL15cXFt8XFxdJC9nLCBcIlwiKSA6IGUucmVwbGFjZSgvXFxcXC9nLCBcIlwiKTtcbn1cbmZ1bmN0aW9uIGdVKGUpIHtcbiAgdmFyIHQgPSBlLm1hdGNoKGVzKSwgbywgbjtcbiAgZm9yIChvID0gMCwgbiA9IHQubGVuZ3RoOyBvIDwgbjsgbysrKVxuICAgIFAzW3Rbb11dID8gdFtvXSA9IFAzW3Rbb11dIDogdFtvXSA9IGZVKHRbb10pO1xuICByZXR1cm4gZnVuY3Rpb24ocikge1xuICAgIHZhciBpID0gXCJcIiwgYTtcbiAgICBmb3IgKGEgPSAwOyBhIDwgbjsgYSsrKVxuICAgICAgaSArPSBaZSh0W2FdKSA/IHRbYV0uY2FsbChyLCBlKSA6IHRbYV07XG4gICAgcmV0dXJuIGk7XG4gIH07XG59XG5mdW5jdGlvbiBLbihlLCB0KSB7XG4gIHJldHVybiBlLmlzVmFsaWQoKSA/ICh0ID0gRmIodCwgZS5sb2NhbGVEYXRhKCkpLCBMYVt0XSA9IExhW3RdIHx8IGdVKHQpLCBMYVt0XShlKSkgOiBlLmxvY2FsZURhdGEoKS5pbnZhbGlkRGF0ZSgpO1xufVxuZnVuY3Rpb24gRmIoZSwgdCkge1xuICB2YXIgbyA9IDU7XG4gIGZ1bmN0aW9uIG4ocikge1xuICAgIHJldHVybiB0LmxvbmdEYXRlRm9ybWF0KHIpIHx8IHI7XG4gIH1cbiAgZm9yIChXbi5sYXN0SW5kZXggPSAwOyBvID49IDAgJiYgV24udGVzdChlKTsgKVxuICAgIGUgPSBlLnJlcGxhY2UoXG4gICAgICBXbixcbiAgICAgIG5cbiAgICApLCBXbi5sYXN0SW5kZXggPSAwLCBvIC09IDE7XG4gIHJldHVybiBlO1xufVxudmFyIENVID0ge1xuICBMVFM6IFwiaDptbTpzcyBBXCIsXG4gIExUOiBcImg6bW0gQVwiLFxuICBMOiBcIk1NL0REL1lZWVlcIixcbiAgTEw6IFwiTU1NTSBELCBZWVlZXCIsXG4gIExMTDogXCJNTU1NIEQsIFlZWVkgaDptbSBBXCIsXG4gIExMTEw6IFwiZGRkZCwgTU1NTSBELCBZWVlZIGg6bW0gQVwiXG59O1xuZnVuY3Rpb24gbVUoZSkge1xuICB2YXIgdCA9IHRoaXMuX2xvbmdEYXRlRm9ybWF0W2VdLCBvID0gdGhpcy5fbG9uZ0RhdGVGb3JtYXRbZS50b1VwcGVyQ2FzZSgpXTtcbiAgcmV0dXJuIHQgfHwgIW8gPyB0IDogKHRoaXMuX2xvbmdEYXRlRm9ybWF0W2VdID0gby5tYXRjaChlcykubWFwKGZ1bmN0aW9uKG4pIHtcbiAgICByZXR1cm4gbiA9PT0gXCJNTU1NXCIgfHwgbiA9PT0gXCJNTVwiIHx8IG4gPT09IFwiRERcIiB8fCBuID09PSBcImRkZGRcIiA/IG4uc2xpY2UoMSkgOiBuO1xuICB9KS5qb2luKFwiXCIpLCB0aGlzLl9sb25nRGF0ZUZvcm1hdFtlXSk7XG59XG52YXIgTFUgPSBcIkludmFsaWQgZGF0ZVwiO1xuZnVuY3Rpb24gdlUoKSB7XG4gIHJldHVybiB0aGlzLl9pbnZhbGlkRGF0ZTtcbn1cbnZhciBxVSA9IFwiJWRcIiwgeVUgPSAvXFxkezEsMn0vO1xuZnVuY3Rpb24gd1UoZSkge1xuICByZXR1cm4gdGhpcy5fb3JkaW5hbC5yZXBsYWNlKFwiJWRcIiwgZSk7XG59XG52YXIgeFUgPSB7XG4gIGZ1dHVyZTogXCJpbiAlc1wiLFxuICBwYXN0OiBcIiVzIGFnb1wiLFxuICBzOiBcImEgZmV3IHNlY29uZHNcIixcbiAgc3M6IFwiJWQgc2Vjb25kc1wiLFxuICBtOiBcImEgbWludXRlXCIsXG4gIG1tOiBcIiVkIG1pbnV0ZXNcIixcbiAgaDogXCJhbiBob3VyXCIsXG4gIGhoOiBcIiVkIGhvdXJzXCIsXG4gIGQ6IFwiYSBkYXlcIixcbiAgZGQ6IFwiJWQgZGF5c1wiLFxuICB3OiBcImEgd2Vla1wiLFxuICB3dzogXCIlZCB3ZWVrc1wiLFxuICBNOiBcImEgbW9udGhcIixcbiAgTU06IFwiJWQgbW9udGhzXCIsXG4gIHk6IFwiYSB5ZWFyXCIsXG4gIHl5OiBcIiVkIHllYXJzXCJcbn07XG5mdW5jdGlvbiBXVShlLCB0LCBvLCBuKSB7XG4gIHZhciByID0gdGhpcy5fcmVsYXRpdmVUaW1lW29dO1xuICByZXR1cm4gWmUocikgPyByKGUsIHQsIG8sIG4pIDogci5yZXBsYWNlKC8lZC9pLCBlKTtcbn1cbmZ1bmN0aW9uIFJVKGUsIHQpIHtcbiAgdmFyIG8gPSB0aGlzLl9yZWxhdGl2ZVRpbWVbZSA+IDAgPyBcImZ1dHVyZVwiIDogXCJwYXN0XCJdO1xuICByZXR1cm4gWmUobykgPyBvKHQpIDogby5yZXBsYWNlKC8lcy9pLCB0KTtcbn1cbnZhciBxYyA9IHtcbiAgRDogXCJkYXRlXCIsXG4gIGRhdGVzOiBcImRhdGVcIixcbiAgZGF0ZTogXCJkYXRlXCIsXG4gIGQ6IFwiZGF5XCIsXG4gIGRheXM6IFwiZGF5XCIsXG4gIGRheTogXCJkYXlcIixcbiAgZTogXCJ3ZWVrZGF5XCIsXG4gIHdlZWtkYXlzOiBcIndlZWtkYXlcIixcbiAgd2Vla2RheTogXCJ3ZWVrZGF5XCIsXG4gIEU6IFwiaXNvV2Vla2RheVwiLFxuICBpc293ZWVrZGF5czogXCJpc29XZWVrZGF5XCIsXG4gIGlzb3dlZWtkYXk6IFwiaXNvV2Vla2RheVwiLFxuICBEREQ6IFwiZGF5T2ZZZWFyXCIsXG4gIGRheW9meWVhcnM6IFwiZGF5T2ZZZWFyXCIsXG4gIGRheW9meWVhcjogXCJkYXlPZlllYXJcIixcbiAgaDogXCJob3VyXCIsXG4gIGhvdXJzOiBcImhvdXJcIixcbiAgaG91cjogXCJob3VyXCIsXG4gIG1zOiBcIm1pbGxpc2Vjb25kXCIsXG4gIG1pbGxpc2Vjb25kczogXCJtaWxsaXNlY29uZFwiLFxuICBtaWxsaXNlY29uZDogXCJtaWxsaXNlY29uZFwiLFxuICBtOiBcIm1pbnV0ZVwiLFxuICBtaW51dGVzOiBcIm1pbnV0ZVwiLFxuICBtaW51dGU6IFwibWludXRlXCIsXG4gIE06IFwibW9udGhcIixcbiAgbW9udGhzOiBcIm1vbnRoXCIsXG4gIG1vbnRoOiBcIm1vbnRoXCIsXG4gIFE6IFwicXVhcnRlclwiLFxuICBxdWFydGVyczogXCJxdWFydGVyXCIsXG4gIHF1YXJ0ZXI6IFwicXVhcnRlclwiLFxuICBzOiBcInNlY29uZFwiLFxuICBzZWNvbmRzOiBcInNlY29uZFwiLFxuICBzZWNvbmQ6IFwic2Vjb25kXCIsXG4gIGdnOiBcIndlZWtZZWFyXCIsXG4gIHdlZWt5ZWFyczogXCJ3ZWVrWWVhclwiLFxuICB3ZWVreWVhcjogXCJ3ZWVrWWVhclwiLFxuICBHRzogXCJpc29XZWVrWWVhclwiLFxuICBpc293ZWVreWVhcnM6IFwiaXNvV2Vla1llYXJcIixcbiAgaXNvd2Vla3llYXI6IFwiaXNvV2Vla1llYXJcIixcbiAgdzogXCJ3ZWVrXCIsXG4gIHdlZWtzOiBcIndlZWtcIixcbiAgd2VlazogXCJ3ZWVrXCIsXG4gIFc6IFwiaXNvV2Vla1wiLFxuICBpc293ZWVrczogXCJpc29XZWVrXCIsXG4gIGlzb3dlZWs6IFwiaXNvV2Vla1wiLFxuICB5OiBcInllYXJcIixcbiAgeWVhcnM6IFwieWVhclwiLFxuICB5ZWFyOiBcInllYXJcIlxufTtcbmZ1bmN0aW9uIHplKGUpIHtcbiAgcmV0dXJuIHR5cGVvZiBlID09IFwic3RyaW5nXCIgPyBxY1tlXSB8fCBxY1tlLnRvTG93ZXJDYXNlKCldIDogdm9pZCAwO1xufVxuZnVuY3Rpb24gdHMoZSkge1xuICB2YXIgdCA9IHt9LCBvLCBuO1xuICBmb3IgKG4gaW4gZSlcbiAgICBrMChlLCBuKSAmJiAobyA9IHplKG4pLCBvICYmICh0W29dID0gZVtuXSkpO1xuICByZXR1cm4gdDtcbn1cbnZhciBCVSA9IHtcbiAgZGF0ZTogOSxcbiAgZGF5OiAxMSxcbiAgd2Vla2RheTogMTEsXG4gIGlzb1dlZWtkYXk6IDExLFxuICBkYXlPZlllYXI6IDQsXG4gIGhvdXI6IDEzLFxuICBtaWxsaXNlY29uZDogMTYsXG4gIG1pbnV0ZTogMTQsXG4gIG1vbnRoOiA4LFxuICBxdWFydGVyOiA3LFxuICBzZWNvbmQ6IDE1LFxuICB3ZWVrWWVhcjogMSxcbiAgaXNvV2Vla1llYXI6IDEsXG4gIHdlZWs6IDUsXG4gIGlzb1dlZWs6IDUsXG4gIHllYXI6IDFcbn07XG5mdW5jdGlvbiBTVShlKSB7XG4gIHZhciB0ID0gW10sIG87XG4gIGZvciAobyBpbiBlKVxuICAgIGswKGUsIG8pICYmIHQucHVzaCh7IHVuaXQ6IG8sIHByaW9yaXR5OiBCVVtvXSB9KTtcbiAgcmV0dXJuIHQuc29ydChmdW5jdGlvbihuLCByKSB7XG4gICAgcmV0dXJuIG4ucHJpb3JpdHkgLSByLnByaW9yaXR5O1xuICB9KSwgdDtcbn1cbnZhciBYYiA9IC9cXGQvLCByZSA9IC9cXGRcXGQvLCBVYiA9IC9cXGR7M30vLCBvcyA9IC9cXGR7NH0vLCBpaSA9IC9bKy1dP1xcZHs2fS8sIEowID0gL1xcZFxcZD8vLCBZYiA9IC9cXGRcXGRcXGRcXGQ/LywgR2IgPSAvXFxkXFxkXFxkXFxkXFxkXFxkPy8sIGFpID0gL1xcZHsxLDN9LywgcnMgPSAvXFxkezEsNH0vLCBzaSA9IC9bKy1dP1xcZHsxLDZ9LywgTW8gPSAvXFxkKy8sIGNpID0gL1srLV0/XFxkKy8sIEVVID0gL1p8WystXVxcZFxcZDo/XFxkXFxkL2dpLCBsaSA9IC9afFsrLV1cXGRcXGQoPzo6P1xcZFxcZCk/L2dpLCBrVSA9IC9bKy1dP1xcZCsoXFwuXFxkezEsM30pPy8sIEdyID0gL1swLTldezAsMjU2fVsnYS16XFx1MDBBMC1cXHUwNUZGXFx1MDcwMC1cXHVEN0ZGXFx1RjkwMC1cXHVGRENGXFx1RkRGMC1cXHVGRjA3XFx1RkYxMC1cXHVGRkVGXXsxLDI1Nn18W1xcdTA2MDAtXFx1MDZGRlxcL117MSwyNTZ9KFxccyo/W1xcdTA2MDAtXFx1MDZGRl17MSwyNTZ9KXsxLDJ9L2ksIEFvID0gL15bMS05XVxcZD8vLCBucyA9IC9eKFsxLTldXFxkfFxcZCkvLCBSNDtcblI0ID0ge307XG5mdW5jdGlvbiByMChlLCB0LCBvKSB7XG4gIFI0W2VdID0gWmUodCkgPyB0IDogZnVuY3Rpb24obiwgcikge1xuICAgIHJldHVybiBuICYmIG8gPyBvIDogdDtcbiAgfTtcbn1cbmZ1bmN0aW9uIE5VKGUsIHQpIHtcbiAgcmV0dXJuIGswKFI0LCBlKSA/IFI0W2VdKHQuX3N0cmljdCwgdC5fbG9jYWxlKSA6IG5ldyBSZWdFeHAoVFUoZSkpO1xufVxuZnVuY3Rpb24gVFUoZSkge1xuICByZXR1cm4gY3QoXG4gICAgZS5yZXBsYWNlKFwiXFxcXFwiLCBcIlwiKS5yZXBsYWNlKFxuICAgICAgL1xcXFwoXFxbKXxcXFxcKFxcXSl8XFxbKFteXFxdXFxbXSopXFxdfFxcXFwoLikvZyxcbiAgICAgIGZ1bmN0aW9uKHQsIG8sIG4sIHIsIGkpIHtcbiAgICAgICAgcmV0dXJuIG8gfHwgbiB8fCByIHx8IGk7XG4gICAgICB9XG4gICAgKVxuICApO1xufVxuZnVuY3Rpb24gY3QoZSkge1xuICByZXR1cm4gZS5yZXBsYWNlKC9bLVxcL1xcXFxeJCorPy4oKXxbXFxde31dL2csIFwiXFxcXCQmXCIpO1xufVxuZnVuY3Rpb24gYWUoZSkge1xuICByZXR1cm4gZSA8IDAgPyBNYXRoLmNlaWwoZSkgfHwgMCA6IE1hdGguZmxvb3IoZSk7XG59XG5mdW5jdGlvbiBxMChlKSB7XG4gIHZhciB0ID0gK2UsIG8gPSAwO1xuICByZXR1cm4gdCAhPT0gMCAmJiBpc0Zpbml0ZSh0KSAmJiAobyA9IGFlKHQpKSwgbztcbn1cbnZhciB3NSA9IHt9O1xuZnVuY3Rpb24gWTAoZSwgdCkge1xuICB2YXIgbywgbiA9IHQsIHI7XG4gIGZvciAodHlwZW9mIGUgPT0gXCJzdHJpbmdcIiAmJiAoZSA9IFtlXSksIE10KHQpICYmIChuID0gZnVuY3Rpb24oaSwgYSkge1xuICAgIGFbdF0gPSBxMChpKTtcbiAgfSksIHIgPSBlLmxlbmd0aCwgbyA9IDA7IG8gPCByOyBvKyspXG4gICAgdzVbZVtvXV0gPSBuO1xufVxuZnVuY3Rpb24gUXIoZSwgdCkge1xuICBZMChlLCBmdW5jdGlvbihvLCBuLCByLCBpKSB7XG4gICAgci5fdyA9IHIuX3cgfHwge30sIHQobywgci5fdywgciwgaSk7XG4gIH0pO1xufVxuZnVuY3Rpb24gSVUoZSwgdCwgbykge1xuICB0ICE9IG51bGwgJiYgazAodzUsIGUpICYmIHc1W2VdKHQsIG8uX2EsIG8sIGUpO1xufVxuZnVuY3Rpb24gcGkoZSkge1xuICByZXR1cm4gZSAlIDQgPT09IDAgJiYgZSAlIDEwMCAhPT0gMCB8fCBlICUgNDAwID09PSAwO1xufVxudmFyIHkyID0gMCwgYXQgPSAxLCBUZSA9IDIsIE0yID0gMywgbWUgPSA0LCBzdCA9IDUsIGEzID0gNiwgRFUgPSA3LCBIVSA9IDg7XG5kMChcIllcIiwgMCwgMCwgZnVuY3Rpb24oKSB7XG4gIHZhciBlID0gdGhpcy55ZWFyKCk7XG4gIHJldHVybiBlIDw9IDk5OTkgPyBHZShlLCA0KSA6IFwiK1wiICsgZTtcbn0pO1xuZDAoMCwgW1wiWVlcIiwgMl0sIDAsIGZ1bmN0aW9uKCkge1xuICByZXR1cm4gdGhpcy55ZWFyKCkgJSAxMDA7XG59KTtcbmQwKDAsIFtcIllZWVlcIiwgNF0sIDAsIFwieWVhclwiKTtcbmQwKDAsIFtcIllZWVlZXCIsIDVdLCAwLCBcInllYXJcIik7XG5kMCgwLCBbXCJZWVlZWVlcIiwgNiwgITBdLCAwLCBcInllYXJcIik7XG5yMChcIllcIiwgY2kpO1xucjAoXCJZWVwiLCBKMCwgcmUpO1xucjAoXCJZWVlZXCIsIHJzLCBvcyk7XG5yMChcIllZWVlZXCIsIHNpLCBpaSk7XG5yMChcIllZWVlZWVwiLCBzaSwgaWkpO1xuWTAoW1wiWVlZWVlcIiwgXCJZWVlZWVlcIl0sIHkyKTtcblkwKFwiWVlZWVwiLCBmdW5jdGlvbihlLCB0KSB7XG4gIHRbeTJdID0gZS5sZW5ndGggPT09IDIgPyAkMS5wYXJzZVR3b0RpZ2l0WWVhcihlKSA6IHEwKGUpO1xufSk7XG5ZMChcIllZXCIsIGZ1bmN0aW9uKGUsIHQpIHtcbiAgdFt5Ml0gPSAkMS5wYXJzZVR3b0RpZ2l0WWVhcihlKTtcbn0pO1xuWTAoXCJZXCIsIGZ1bmN0aW9uKGUsIHQpIHtcbiAgdFt5Ml0gPSBwYXJzZUludChlLCAxMCk7XG59KTtcbmZ1bmN0aW9uIGVyKGUpIHtcbiAgcmV0dXJuIHBpKGUpID8gMzY2IDogMzY1O1xufVxuJDEucGFyc2VUd29EaWdpdFllYXIgPSBmdW5jdGlvbihlKSB7XG4gIHJldHVybiBxMChlKSArIChxMChlKSA+IDY4ID8gMTkwMCA6IDJlMyk7XG59O1xudmFyIFFiID0gdW8oXCJGdWxsWWVhclwiLCAhMCk7XG5mdW5jdGlvbiBWVSgpIHtcbiAgcmV0dXJuIHBpKHRoaXMueWVhcigpKTtcbn1cbmZ1bmN0aW9uIHVvKGUsIHQpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uKG8pIHtcbiAgICByZXR1cm4gbyAhPSBudWxsID8gKFpiKHRoaXMsIGUsIG8pLCAkMS51cGRhdGVPZmZzZXQodGhpcywgdCksIHRoaXMpIDogcXIodGhpcywgZSk7XG4gIH07XG59XG5mdW5jdGlvbiBxcihlLCB0KSB7XG4gIGlmICghZS5pc1ZhbGlkKCkpXG4gICAgcmV0dXJuIE5hTjtcbiAgdmFyIG8gPSBlLl9kLCBuID0gZS5faXNVVEM7XG4gIHN3aXRjaCAodCkge1xuICAgIGNhc2UgXCJNaWxsaXNlY29uZHNcIjpcbiAgICAgIHJldHVybiBuID8gby5nZXRVVENNaWxsaXNlY29uZHMoKSA6IG8uZ2V0TWlsbGlzZWNvbmRzKCk7XG4gICAgY2FzZSBcIlNlY29uZHNcIjpcbiAgICAgIHJldHVybiBuID8gby5nZXRVVENTZWNvbmRzKCkgOiBvLmdldFNlY29uZHMoKTtcbiAgICBjYXNlIFwiTWludXRlc1wiOlxuICAgICAgcmV0dXJuIG4gPyBvLmdldFVUQ01pbnV0ZXMoKSA6IG8uZ2V0TWludXRlcygpO1xuICAgIGNhc2UgXCJIb3Vyc1wiOlxuICAgICAgcmV0dXJuIG4gPyBvLmdldFVUQ0hvdXJzKCkgOiBvLmdldEhvdXJzKCk7XG4gICAgY2FzZSBcIkRhdGVcIjpcbiAgICAgIHJldHVybiBuID8gby5nZXRVVENEYXRlKCkgOiBvLmdldERhdGUoKTtcbiAgICBjYXNlIFwiRGF5XCI6XG4gICAgICByZXR1cm4gbiA/IG8uZ2V0VVRDRGF5KCkgOiBvLmdldERheSgpO1xuICAgIGNhc2UgXCJNb250aFwiOlxuICAgICAgcmV0dXJuIG4gPyBvLmdldFVUQ01vbnRoKCkgOiBvLmdldE1vbnRoKCk7XG4gICAgY2FzZSBcIkZ1bGxZZWFyXCI6XG4gICAgICByZXR1cm4gbiA/IG8uZ2V0VVRDRnVsbFllYXIoKSA6IG8uZ2V0RnVsbFllYXIoKTtcbiAgICBkZWZhdWx0OlxuICAgICAgcmV0dXJuIE5hTjtcbiAgfVxufVxuZnVuY3Rpb24gWmIoZSwgdCwgbykge1xuICB2YXIgbiwgciwgaSwgYSwgcztcbiAgaWYgKCEoIWUuaXNWYWxpZCgpIHx8IGlzTmFOKG8pKSkge1xuICAgIHN3aXRjaCAobiA9IGUuX2QsIHIgPSBlLl9pc1VUQywgdCkge1xuICAgICAgY2FzZSBcIk1pbGxpc2Vjb25kc1wiOlxuICAgICAgICByZXR1cm4gdm9pZCAociA/IG4uc2V0VVRDTWlsbGlzZWNvbmRzKG8pIDogbi5zZXRNaWxsaXNlY29uZHMobykpO1xuICAgICAgY2FzZSBcIlNlY29uZHNcIjpcbiAgICAgICAgcmV0dXJuIHZvaWQgKHIgPyBuLnNldFVUQ1NlY29uZHMobykgOiBuLnNldFNlY29uZHMobykpO1xuICAgICAgY2FzZSBcIk1pbnV0ZXNcIjpcbiAgICAgICAgcmV0dXJuIHZvaWQgKHIgPyBuLnNldFVUQ01pbnV0ZXMobykgOiBuLnNldE1pbnV0ZXMobykpO1xuICAgICAgY2FzZSBcIkhvdXJzXCI6XG4gICAgICAgIHJldHVybiB2b2lkIChyID8gbi5zZXRVVENIb3VycyhvKSA6IG4uc2V0SG91cnMobykpO1xuICAgICAgY2FzZSBcIkRhdGVcIjpcbiAgICAgICAgcmV0dXJuIHZvaWQgKHIgPyBuLnNldFVUQ0RhdGUobykgOiBuLnNldERhdGUobykpO1xuICAgICAgY2FzZSBcIkZ1bGxZZWFyXCI6XG4gICAgICAgIGJyZWFrO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpID0gbywgYSA9IGUubW9udGgoKSwgcyA9IGUuZGF0ZSgpLCBzID0gcyA9PT0gMjkgJiYgYSA9PT0gMSAmJiAhcGkoaSkgPyAyOCA6IHMsIHIgPyBuLnNldFVUQ0Z1bGxZZWFyKGksIGEsIHMpIDogbi5zZXRGdWxsWWVhcihpLCBhLCBzKTtcbiAgfVxufVxuZnVuY3Rpb24gUFUoZSkge1xuICByZXR1cm4gZSA9IHplKGUpLCBaZSh0aGlzW2VdKSA/IHRoaXNbZV0oKSA6IHRoaXM7XG59XG5mdW5jdGlvbiBGVShlLCB0KSB7XG4gIGlmICh0eXBlb2YgZSA9PSBcIm9iamVjdFwiKSB7XG4gICAgZSA9IHRzKGUpO1xuICAgIHZhciBvID0gU1UoZSksIG4sIHIgPSBvLmxlbmd0aDtcbiAgICBmb3IgKG4gPSAwOyBuIDwgcjsgbisrKVxuICAgICAgdGhpc1tvW25dLnVuaXRdKGVbb1tuXS51bml0XSk7XG4gIH0gZWxzZSBpZiAoZSA9IHplKGUpLCBaZSh0aGlzW2VdKSlcbiAgICByZXR1cm4gdGhpc1tlXSh0KTtcbiAgcmV0dXJuIHRoaXM7XG59XG5mdW5jdGlvbiBYVShlLCB0KSB7XG4gIHJldHVybiAoZSAlIHQgKyB0KSAlIHQ7XG59XG52YXIgczI7XG5BcnJheS5wcm90b3R5cGUuaW5kZXhPZiA/IHMyID0gQXJyYXkucHJvdG90eXBlLmluZGV4T2YgOiBzMiA9IGZ1bmN0aW9uKGUpIHtcbiAgdmFyIHQ7XG4gIGZvciAodCA9IDA7IHQgPCB0aGlzLmxlbmd0aDsgKyt0KVxuICAgIGlmICh0aGlzW3RdID09PSBlKVxuICAgICAgcmV0dXJuIHQ7XG4gIHJldHVybiAtMTtcbn07XG5mdW5jdGlvbiBpcyhlLCB0KSB7XG4gIGlmIChpc05hTihlKSB8fCBpc05hTih0KSlcbiAgICByZXR1cm4gTmFOO1xuICB2YXIgbyA9IFhVKHQsIDEyKTtcbiAgcmV0dXJuIGUgKz0gKHQgLSBvKSAvIDEyLCBvID09PSAxID8gcGkoZSkgPyAyOSA6IDI4IDogMzEgLSBvICUgNyAlIDI7XG59XG5kMChcIk1cIiwgW1wiTU1cIiwgMl0sIFwiTW9cIiwgZnVuY3Rpb24oKSB7XG4gIHJldHVybiB0aGlzLm1vbnRoKCkgKyAxO1xufSk7XG5kMChcIk1NTVwiLCAwLCAwLCBmdW5jdGlvbihlKSB7XG4gIHJldHVybiB0aGlzLmxvY2FsZURhdGEoKS5tb250aHNTaG9ydCh0aGlzLCBlKTtcbn0pO1xuZDAoXCJNTU1NXCIsIDAsIDAsIGZ1bmN0aW9uKGUpIHtcbiAgcmV0dXJuIHRoaXMubG9jYWxlRGF0YSgpLm1vbnRocyh0aGlzLCBlKTtcbn0pO1xucjAoXCJNXCIsIEowLCBBbyk7XG5yMChcIk1NXCIsIEowLCByZSk7XG5yMChcIk1NTVwiLCBmdW5jdGlvbihlLCB0KSB7XG4gIHJldHVybiB0Lm1vbnRoc1Nob3J0UmVnZXgoZSk7XG59KTtcbnIwKFwiTU1NTVwiLCBmdW5jdGlvbihlLCB0KSB7XG4gIHJldHVybiB0Lm1vbnRoc1JlZ2V4KGUpO1xufSk7XG5ZMChbXCJNXCIsIFwiTU1cIl0sIGZ1bmN0aW9uKGUsIHQpIHtcbiAgdFthdF0gPSBxMChlKSAtIDE7XG59KTtcblkwKFtcIk1NTVwiLCBcIk1NTU1cIl0sIGZ1bmN0aW9uKGUsIHQsIG8sIG4pIHtcbiAgdmFyIHIgPSBvLl9sb2NhbGUubW9udGhzUGFyc2UoZSwgbiwgby5fc3RyaWN0KTtcbiAgciAhPSBudWxsID8gdFthdF0gPSByIDogQzAobykuaW52YWxpZE1vbnRoID0gZTtcbn0pO1xudmFyIFVVID0gXCJKYW51YXJ5X0ZlYnJ1YXJ5X01hcmNoX0FwcmlsX01heV9KdW5lX0p1bHlfQXVndXN0X1NlcHRlbWJlcl9PY3RvYmVyX05vdmVtYmVyX0RlY2VtYmVyXCIuc3BsaXQoXG4gIFwiX1wiXG4pLCBqYiA9IFwiSmFuX0ZlYl9NYXJfQXByX01heV9KdW5fSnVsX0F1Z19TZXBfT2N0X05vdl9EZWNcIi5zcGxpdChcIl9cIiksIEtiID0gL0Rbb0RdPyhcXFtbXlxcW1xcXV0qXFxdfFxccykrTU1NTT8vLCBZVSA9IEdyLCBHVSA9IEdyO1xuZnVuY3Rpb24gUVUoZSwgdCkge1xuICByZXR1cm4gZSA/IHFlKHRoaXMuX21vbnRocykgPyB0aGlzLl9tb250aHNbZS5tb250aCgpXSA6IHRoaXMuX21vbnRoc1sodGhpcy5fbW9udGhzLmlzRm9ybWF0IHx8IEtiKS50ZXN0KHQpID8gXCJmb3JtYXRcIiA6IFwic3RhbmRhbG9uZVwiXVtlLm1vbnRoKCldIDogcWUodGhpcy5fbW9udGhzKSA/IHRoaXMuX21vbnRocyA6IHRoaXMuX21vbnRocy5zdGFuZGFsb25lO1xufVxuZnVuY3Rpb24gWlUoZSwgdCkge1xuICByZXR1cm4gZSA/IHFlKHRoaXMuX21vbnRoc1Nob3J0KSA/IHRoaXMuX21vbnRoc1Nob3J0W2UubW9udGgoKV0gOiB0aGlzLl9tb250aHNTaG9ydFtLYi50ZXN0KHQpID8gXCJmb3JtYXRcIiA6IFwic3RhbmRhbG9uZVwiXVtlLm1vbnRoKCldIDogcWUodGhpcy5fbW9udGhzU2hvcnQpID8gdGhpcy5fbW9udGhzU2hvcnQgOiB0aGlzLl9tb250aHNTaG9ydC5zdGFuZGFsb25lO1xufVxuZnVuY3Rpb24galUoZSwgdCwgbykge1xuICB2YXIgbiwgciwgaSwgYSA9IGUudG9Mb2NhbGVMb3dlckNhc2UoKTtcbiAgaWYgKCF0aGlzLl9tb250aHNQYXJzZSlcbiAgICBmb3IgKHRoaXMuX21vbnRoc1BhcnNlID0gW10sIHRoaXMuX2xvbmdNb250aHNQYXJzZSA9IFtdLCB0aGlzLl9zaG9ydE1vbnRoc1BhcnNlID0gW10sIG4gPSAwOyBuIDwgMTI7ICsrbilcbiAgICAgIGkgPSBRZShbMmUzLCBuXSksIHRoaXMuX3Nob3J0TW9udGhzUGFyc2Vbbl0gPSB0aGlzLm1vbnRoc1Nob3J0KFxuICAgICAgICBpLFxuICAgICAgICBcIlwiXG4gICAgICApLnRvTG9jYWxlTG93ZXJDYXNlKCksIHRoaXMuX2xvbmdNb250aHNQYXJzZVtuXSA9IHRoaXMubW9udGhzKGksIFwiXCIpLnRvTG9jYWxlTG93ZXJDYXNlKCk7XG4gIHJldHVybiBvID8gdCA9PT0gXCJNTU1cIiA/IChyID0gczIuY2FsbCh0aGlzLl9zaG9ydE1vbnRoc1BhcnNlLCBhKSwgciAhPT0gLTEgPyByIDogbnVsbCkgOiAociA9IHMyLmNhbGwodGhpcy5fbG9uZ01vbnRoc1BhcnNlLCBhKSwgciAhPT0gLTEgPyByIDogbnVsbCkgOiB0ID09PSBcIk1NTVwiID8gKHIgPSBzMi5jYWxsKHRoaXMuX3Nob3J0TW9udGhzUGFyc2UsIGEpLCByICE9PSAtMSA/IHIgOiAociA9IHMyLmNhbGwodGhpcy5fbG9uZ01vbnRoc1BhcnNlLCBhKSwgciAhPT0gLTEgPyByIDogbnVsbCkpIDogKHIgPSBzMi5jYWxsKHRoaXMuX2xvbmdNb250aHNQYXJzZSwgYSksIHIgIT09IC0xID8gciA6IChyID0gczIuY2FsbCh0aGlzLl9zaG9ydE1vbnRoc1BhcnNlLCBhKSwgciAhPT0gLTEgPyByIDogbnVsbCkpO1xufVxuZnVuY3Rpb24gS1UoZSwgdCwgbykge1xuICB2YXIgbiwgciwgaTtcbiAgaWYgKHRoaXMuX21vbnRoc1BhcnNlRXhhY3QpXG4gICAgcmV0dXJuIGpVLmNhbGwodGhpcywgZSwgdCwgbyk7XG4gIGZvciAodGhpcy5fbW9udGhzUGFyc2UgfHwgKHRoaXMuX21vbnRoc1BhcnNlID0gW10sIHRoaXMuX2xvbmdNb250aHNQYXJzZSA9IFtdLCB0aGlzLl9zaG9ydE1vbnRoc1BhcnNlID0gW10pLCBuID0gMDsgbiA8IDEyOyBuKyspIHtcbiAgICBpZiAociA9IFFlKFsyZTMsIG5dKSwgbyAmJiAhdGhpcy5fbG9uZ01vbnRoc1BhcnNlW25dICYmICh0aGlzLl9sb25nTW9udGhzUGFyc2Vbbl0gPSBuZXcgUmVnRXhwKFxuICAgICAgXCJeXCIgKyB0aGlzLm1vbnRocyhyLCBcIlwiKS5yZXBsYWNlKFwiLlwiLCBcIlwiKSArIFwiJFwiLFxuICAgICAgXCJpXCJcbiAgICApLCB0aGlzLl9zaG9ydE1vbnRoc1BhcnNlW25dID0gbmV3IFJlZ0V4cChcbiAgICAgIFwiXlwiICsgdGhpcy5tb250aHNTaG9ydChyLCBcIlwiKS5yZXBsYWNlKFwiLlwiLCBcIlwiKSArIFwiJFwiLFxuICAgICAgXCJpXCJcbiAgICApKSwgIW8gJiYgIXRoaXMuX21vbnRoc1BhcnNlW25dICYmIChpID0gXCJeXCIgKyB0aGlzLm1vbnRocyhyLCBcIlwiKSArIFwifF5cIiArIHRoaXMubW9udGhzU2hvcnQociwgXCJcIiksIHRoaXMuX21vbnRoc1BhcnNlW25dID0gbmV3IFJlZ0V4cChpLnJlcGxhY2UoXCIuXCIsIFwiXCIpLCBcImlcIikpLCBvICYmIHQgPT09IFwiTU1NTVwiICYmIHRoaXMuX2xvbmdNb250aHNQYXJzZVtuXS50ZXN0KGUpKVxuICAgICAgcmV0dXJuIG47XG4gICAgaWYgKG8gJiYgdCA9PT0gXCJNTU1cIiAmJiB0aGlzLl9zaG9ydE1vbnRoc1BhcnNlW25dLnRlc3QoZSkpXG4gICAgICByZXR1cm4gbjtcbiAgICBpZiAoIW8gJiYgdGhpcy5fbW9udGhzUGFyc2Vbbl0udGVzdChlKSlcbiAgICAgIHJldHVybiBuO1xuICB9XG59XG5mdW5jdGlvbiBKYihlLCB0KSB7XG4gIGlmICghZS5pc1ZhbGlkKCkpXG4gICAgcmV0dXJuIGU7XG4gIGlmICh0eXBlb2YgdCA9PSBcInN0cmluZ1wiKSB7XG4gICAgaWYgKC9eXFxkKyQvLnRlc3QodCkpXG4gICAgICB0ID0gcTAodCk7XG4gICAgZWxzZSBpZiAodCA9IGUubG9jYWxlRGF0YSgpLm1vbnRoc1BhcnNlKHQpLCAhTXQodCkpXG4gICAgICByZXR1cm4gZTtcbiAgfVxuICB2YXIgbyA9IHQsIG4gPSBlLmRhdGUoKTtcbiAgcmV0dXJuIG4gPSBuIDwgMjkgPyBuIDogTWF0aC5taW4obiwgaXMoZS55ZWFyKCksIG8pKSwgZS5faXNVVEMgPyBlLl9kLnNldFVUQ01vbnRoKG8sIG4pIDogZS5fZC5zZXRNb250aChvLCBuKSwgZTtcbn1cbmZ1bmN0aW9uIF9iKGUpIHtcbiAgcmV0dXJuIGUgIT0gbnVsbCA/IChKYih0aGlzLCBlKSwgJDEudXBkYXRlT2Zmc2V0KHRoaXMsICEwKSwgdGhpcykgOiBxcih0aGlzLCBcIk1vbnRoXCIpO1xufVxuZnVuY3Rpb24gSlUoKSB7XG4gIHJldHVybiBpcyh0aGlzLnllYXIoKSwgdGhpcy5tb250aCgpKTtcbn1cbmZ1bmN0aW9uIF9VKGUpIHtcbiAgcmV0dXJuIHRoaXMuX21vbnRoc1BhcnNlRXhhY3QgPyAoazAodGhpcywgXCJfbW9udGhzUmVnZXhcIikgfHwgJGIuY2FsbCh0aGlzKSwgZSA/IHRoaXMuX21vbnRoc1Nob3J0U3RyaWN0UmVnZXggOiB0aGlzLl9tb250aHNTaG9ydFJlZ2V4KSA6IChrMCh0aGlzLCBcIl9tb250aHNTaG9ydFJlZ2V4XCIpIHx8ICh0aGlzLl9tb250aHNTaG9ydFJlZ2V4ID0gWVUpLCB0aGlzLl9tb250aHNTaG9ydFN0cmljdFJlZ2V4ICYmIGUgPyB0aGlzLl9tb250aHNTaG9ydFN0cmljdFJlZ2V4IDogdGhpcy5fbW9udGhzU2hvcnRSZWdleCk7XG59XG5mdW5jdGlvbiAkVShlKSB7XG4gIHJldHVybiB0aGlzLl9tb250aHNQYXJzZUV4YWN0ID8gKGswKHRoaXMsIFwiX21vbnRoc1JlZ2V4XCIpIHx8ICRiLmNhbGwodGhpcyksIGUgPyB0aGlzLl9tb250aHNTdHJpY3RSZWdleCA6IHRoaXMuX21vbnRoc1JlZ2V4KSA6IChrMCh0aGlzLCBcIl9tb250aHNSZWdleFwiKSB8fCAodGhpcy5fbW9udGhzUmVnZXggPSBHVSksIHRoaXMuX21vbnRoc1N0cmljdFJlZ2V4ICYmIGUgPyB0aGlzLl9tb250aHNTdHJpY3RSZWdleCA6IHRoaXMuX21vbnRoc1JlZ2V4KTtcbn1cbmZ1bmN0aW9uICRiKCkge1xuICBmdW5jdGlvbiBlKGwsIHApIHtcbiAgICByZXR1cm4gcC5sZW5ndGggLSBsLmxlbmd0aDtcbiAgfVxuICB2YXIgdCA9IFtdLCBvID0gW10sIG4gPSBbXSwgciwgaSwgYSwgcztcbiAgZm9yIChyID0gMDsgciA8IDEyOyByKyspXG4gICAgaSA9IFFlKFsyZTMsIHJdKSwgYSA9IGN0KHRoaXMubW9udGhzU2hvcnQoaSwgXCJcIikpLCBzID0gY3QodGhpcy5tb250aHMoaSwgXCJcIikpLCB0LnB1c2goYSksIG8ucHVzaChzKSwgbi5wdXNoKHMpLCBuLnB1c2goYSk7XG4gIHQuc29ydChlKSwgby5zb3J0KGUpLCBuLnNvcnQoZSksIHRoaXMuX21vbnRoc1JlZ2V4ID0gbmV3IFJlZ0V4cChcIl4oXCIgKyBuLmpvaW4oXCJ8XCIpICsgXCIpXCIsIFwiaVwiKSwgdGhpcy5fbW9udGhzU2hvcnRSZWdleCA9IHRoaXMuX21vbnRoc1JlZ2V4LCB0aGlzLl9tb250aHNTdHJpY3RSZWdleCA9IG5ldyBSZWdFeHAoXG4gICAgXCJeKFwiICsgby5qb2luKFwifFwiKSArIFwiKVwiLFxuICAgIFwiaVwiXG4gICksIHRoaXMuX21vbnRoc1Nob3J0U3RyaWN0UmVnZXggPSBuZXcgUmVnRXhwKFxuICAgIFwiXihcIiArIHQuam9pbihcInxcIikgKyBcIilcIixcbiAgICBcImlcIlxuICApO1xufVxuZnVuY3Rpb24gZVkoZSwgdCwgbywgbiwgciwgaSwgYSkge1xuICB2YXIgcztcbiAgcmV0dXJuIGUgPCAxMDAgJiYgZSA+PSAwID8gKHMgPSBuZXcgRGF0ZShlICsgNDAwLCB0LCBvLCBuLCByLCBpLCBhKSwgaXNGaW5pdGUocy5nZXRGdWxsWWVhcigpKSAmJiBzLnNldEZ1bGxZZWFyKGUpKSA6IHMgPSBuZXcgRGF0ZShlLCB0LCBvLCBuLCByLCBpLCBhKSwgcztcbn1cbmZ1bmN0aW9uIHlyKGUpIHtcbiAgdmFyIHQsIG87XG4gIHJldHVybiBlIDwgMTAwICYmIGUgPj0gMCA/IChvID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzKSwgb1swXSA9IGUgKyA0MDAsIHQgPSBuZXcgRGF0ZShEYXRlLlVUQy5hcHBseShudWxsLCBvKSksIGlzRmluaXRlKHQuZ2V0VVRDRnVsbFllYXIoKSkgJiYgdC5zZXRVVENGdWxsWWVhcihlKSkgOiB0ID0gbmV3IERhdGUoRGF0ZS5VVEMuYXBwbHkobnVsbCwgYXJndW1lbnRzKSksIHQ7XG59XG5mdW5jdGlvbiBCNChlLCB0LCBvKSB7XG4gIHZhciBuID0gNyArIHQgLSBvLCByID0gKDcgKyB5cihlLCAwLCBuKS5nZXRVVENEYXkoKSAtIHQpICUgNztcbiAgcmV0dXJuIC1yICsgbiAtIDE7XG59XG5mdW5jdGlvbiBlTShlLCB0LCBvLCBuLCByKSB7XG4gIHZhciBpID0gKDcgKyBvIC0gbikgJSA3LCBhID0gQjQoZSwgbiwgciksIHMgPSAxICsgNyAqICh0IC0gMSkgKyBpICsgYSwgbCwgcDtcbiAgcmV0dXJuIHMgPD0gMCA/IChsID0gZSAtIDEsIHAgPSBlcihsKSArIHMpIDogcyA+IGVyKGUpID8gKGwgPSBlICsgMSwgcCA9IHMgLSBlcihlKSkgOiAobCA9IGUsIHAgPSBzKSwge1xuICAgIHllYXI6IGwsXG4gICAgZGF5T2ZZZWFyOiBwXG4gIH07XG59XG5mdW5jdGlvbiB3cihlLCB0LCBvKSB7XG4gIHZhciBuID0gQjQoZS55ZWFyKCksIHQsIG8pLCByID0gTWF0aC5mbG9vcigoZS5kYXlPZlllYXIoKSAtIG4gLSAxKSAvIDcpICsgMSwgaSwgYTtcbiAgcmV0dXJuIHIgPCAxID8gKGEgPSBlLnllYXIoKSAtIDEsIGkgPSByICsgbHQoYSwgdCwgbykpIDogciA+IGx0KGUueWVhcigpLCB0LCBvKSA/IChpID0gciAtIGx0KGUueWVhcigpLCB0LCBvKSwgYSA9IGUueWVhcigpICsgMSkgOiAoYSA9IGUueWVhcigpLCBpID0gciksIHtcbiAgICB3ZWVrOiBpLFxuICAgIHllYXI6IGFcbiAgfTtcbn1cbmZ1bmN0aW9uIGx0KGUsIHQsIG8pIHtcbiAgdmFyIG4gPSBCNChlLCB0LCBvKSwgciA9IEI0KGUgKyAxLCB0LCBvKTtcbiAgcmV0dXJuIChlcihlKSAtIG4gKyByKSAvIDc7XG59XG5kMChcIndcIiwgW1wid3dcIiwgMl0sIFwid29cIiwgXCJ3ZWVrXCIpO1xuZDAoXCJXXCIsIFtcIldXXCIsIDJdLCBcIldvXCIsIFwiaXNvV2Vla1wiKTtcbnIwKFwid1wiLCBKMCwgQW8pO1xucjAoXCJ3d1wiLCBKMCwgcmUpO1xucjAoXCJXXCIsIEowLCBBbyk7XG5yMChcIldXXCIsIEowLCByZSk7XG5RcihcbiAgW1wid1wiLCBcInd3XCIsIFwiV1wiLCBcIldXXCJdLFxuICBmdW5jdGlvbihlLCB0LCBvLCBuKSB7XG4gICAgdFtuLnN1YnN0cigwLCAxKV0gPSBxMChlKTtcbiAgfVxuKTtcbmZ1bmN0aW9uIHRZKGUpIHtcbiAgcmV0dXJuIHdyKGUsIHRoaXMuX3dlZWsuZG93LCB0aGlzLl93ZWVrLmRveSkud2Vlaztcbn1cbnZhciBvWSA9IHtcbiAgZG93OiAwLFxuICAvLyBTdW5kYXkgaXMgdGhlIGZpcnN0IGRheSBvZiB0aGUgd2Vlay5cbiAgZG95OiA2XG4gIC8vIFRoZSB3ZWVrIHRoYXQgY29udGFpbnMgSmFuIDZ0aCBpcyB0aGUgZmlyc3Qgd2VlayBvZiB0aGUgeWVhci5cbn07XG5mdW5jdGlvbiByWSgpIHtcbiAgcmV0dXJuIHRoaXMuX3dlZWsuZG93O1xufVxuZnVuY3Rpb24gblkoKSB7XG4gIHJldHVybiB0aGlzLl93ZWVrLmRveTtcbn1cbmZ1bmN0aW9uIGlZKGUpIHtcbiAgdmFyIHQgPSB0aGlzLmxvY2FsZURhdGEoKS53ZWVrKHRoaXMpO1xuICByZXR1cm4gZSA9PSBudWxsID8gdCA6IHRoaXMuYWRkKChlIC0gdCkgKiA3LCBcImRcIik7XG59XG5mdW5jdGlvbiBhWShlKSB7XG4gIHZhciB0ID0gd3IodGhpcywgMSwgNCkud2VlaztcbiAgcmV0dXJuIGUgPT0gbnVsbCA/IHQgOiB0aGlzLmFkZCgoZSAtIHQpICogNywgXCJkXCIpO1xufVxuZDAoXCJkXCIsIDAsIFwiZG9cIiwgXCJkYXlcIik7XG5kMChcImRkXCIsIDAsIDAsIGZ1bmN0aW9uKGUpIHtcbiAgcmV0dXJuIHRoaXMubG9jYWxlRGF0YSgpLndlZWtkYXlzTWluKHRoaXMsIGUpO1xufSk7XG5kMChcImRkZFwiLCAwLCAwLCBmdW5jdGlvbihlKSB7XG4gIHJldHVybiB0aGlzLmxvY2FsZURhdGEoKS53ZWVrZGF5c1Nob3J0KHRoaXMsIGUpO1xufSk7XG5kMChcImRkZGRcIiwgMCwgMCwgZnVuY3Rpb24oZSkge1xuICByZXR1cm4gdGhpcy5sb2NhbGVEYXRhKCkud2Vla2RheXModGhpcywgZSk7XG59KTtcbmQwKFwiZVwiLCAwLCAwLCBcIndlZWtkYXlcIik7XG5kMChcIkVcIiwgMCwgMCwgXCJpc29XZWVrZGF5XCIpO1xucjAoXCJkXCIsIEowKTtcbnIwKFwiZVwiLCBKMCk7XG5yMChcIkVcIiwgSjApO1xucjAoXCJkZFwiLCBmdW5jdGlvbihlLCB0KSB7XG4gIHJldHVybiB0LndlZWtkYXlzTWluUmVnZXgoZSk7XG59KTtcbnIwKFwiZGRkXCIsIGZ1bmN0aW9uKGUsIHQpIHtcbiAgcmV0dXJuIHQud2Vla2RheXNTaG9ydFJlZ2V4KGUpO1xufSk7XG5yMChcImRkZGRcIiwgZnVuY3Rpb24oZSwgdCkge1xuICByZXR1cm4gdC53ZWVrZGF5c1JlZ2V4KGUpO1xufSk7XG5RcihbXCJkZFwiLCBcImRkZFwiLCBcImRkZGRcIl0sIGZ1bmN0aW9uKGUsIHQsIG8sIG4pIHtcbiAgdmFyIHIgPSBvLl9sb2NhbGUud2Vla2RheXNQYXJzZShlLCBuLCBvLl9zdHJpY3QpO1xuICByICE9IG51bGwgPyB0LmQgPSByIDogQzAobykuaW52YWxpZFdlZWtkYXkgPSBlO1xufSk7XG5RcihbXCJkXCIsIFwiZVwiLCBcIkVcIl0sIGZ1bmN0aW9uKGUsIHQsIG8sIG4pIHtcbiAgdFtuXSA9IHEwKGUpO1xufSk7XG5mdW5jdGlvbiBzWShlLCB0KSB7XG4gIHJldHVybiB0eXBlb2YgZSAhPSBcInN0cmluZ1wiID8gZSA6IGlzTmFOKGUpID8gKGUgPSB0LndlZWtkYXlzUGFyc2UoZSksIHR5cGVvZiBlID09IFwibnVtYmVyXCIgPyBlIDogbnVsbCkgOiBwYXJzZUludChlLCAxMCk7XG59XG5mdW5jdGlvbiBjWShlLCB0KSB7XG4gIHJldHVybiB0eXBlb2YgZSA9PSBcInN0cmluZ1wiID8gdC53ZWVrZGF5c1BhcnNlKGUpICUgNyB8fCA3IDogaXNOYU4oZSkgPyBudWxsIDogZTtcbn1cbmZ1bmN0aW9uIGFzKGUsIHQpIHtcbiAgcmV0dXJuIGUuc2xpY2UodCwgNykuY29uY2F0KGUuc2xpY2UoMCwgdCkpO1xufVxudmFyIGxZID0gXCJTdW5kYXlfTW9uZGF5X1R1ZXNkYXlfV2VkbmVzZGF5X1RodXJzZGF5X0ZyaWRheV9TYXR1cmRheVwiLnNwbGl0KFwiX1wiKSwgdE0gPSBcIlN1bl9Nb25fVHVlX1dlZF9UaHVfRnJpX1NhdFwiLnNwbGl0KFwiX1wiKSwgcFkgPSBcIlN1X01vX1R1X1dlX1RoX0ZyX1NhXCIuc3BsaXQoXCJfXCIpLCBkWSA9IEdyLCBiWSA9IEdyLCBNWSA9IEdyO1xuZnVuY3Rpb24gQVkoZSwgdCkge1xuICB2YXIgbyA9IHFlKHRoaXMuX3dlZWtkYXlzKSA/IHRoaXMuX3dlZWtkYXlzIDogdGhpcy5fd2Vla2RheXNbZSAmJiBlICE9PSAhMCAmJiB0aGlzLl93ZWVrZGF5cy5pc0Zvcm1hdC50ZXN0KHQpID8gXCJmb3JtYXRcIiA6IFwic3RhbmRhbG9uZVwiXTtcbiAgcmV0dXJuIGUgPT09ICEwID8gYXMobywgdGhpcy5fd2Vlay5kb3cpIDogZSA/IG9bZS5kYXkoKV0gOiBvO1xufVxuZnVuY3Rpb24gdVkoZSkge1xuICByZXR1cm4gZSA9PT0gITAgPyBhcyh0aGlzLl93ZWVrZGF5c1Nob3J0LCB0aGlzLl93ZWVrLmRvdykgOiBlID8gdGhpcy5fd2Vla2RheXNTaG9ydFtlLmRheSgpXSA6IHRoaXMuX3dlZWtkYXlzU2hvcnQ7XG59XG5mdW5jdGlvbiB6WShlKSB7XG4gIHJldHVybiBlID09PSAhMCA/IGFzKHRoaXMuX3dlZWtkYXlzTWluLCB0aGlzLl93ZWVrLmRvdykgOiBlID8gdGhpcy5fd2Vla2RheXNNaW5bZS5kYXkoKV0gOiB0aGlzLl93ZWVrZGF5c01pbjtcbn1cbmZ1bmN0aW9uIGhZKGUsIHQsIG8pIHtcbiAgdmFyIG4sIHIsIGksIGEgPSBlLnRvTG9jYWxlTG93ZXJDYXNlKCk7XG4gIGlmICghdGhpcy5fd2Vla2RheXNQYXJzZSlcbiAgICBmb3IgKHRoaXMuX3dlZWtkYXlzUGFyc2UgPSBbXSwgdGhpcy5fc2hvcnRXZWVrZGF5c1BhcnNlID0gW10sIHRoaXMuX21pbldlZWtkYXlzUGFyc2UgPSBbXSwgbiA9IDA7IG4gPCA3OyArK24pXG4gICAgICBpID0gUWUoWzJlMywgMV0pLmRheShuKSwgdGhpcy5fbWluV2Vla2RheXNQYXJzZVtuXSA9IHRoaXMud2Vla2RheXNNaW4oXG4gICAgICAgIGksXG4gICAgICAgIFwiXCJcbiAgICAgICkudG9Mb2NhbGVMb3dlckNhc2UoKSwgdGhpcy5fc2hvcnRXZWVrZGF5c1BhcnNlW25dID0gdGhpcy53ZWVrZGF5c1Nob3J0KFxuICAgICAgICBpLFxuICAgICAgICBcIlwiXG4gICAgICApLnRvTG9jYWxlTG93ZXJDYXNlKCksIHRoaXMuX3dlZWtkYXlzUGFyc2Vbbl0gPSB0aGlzLndlZWtkYXlzKGksIFwiXCIpLnRvTG9jYWxlTG93ZXJDYXNlKCk7XG4gIHJldHVybiBvID8gdCA9PT0gXCJkZGRkXCIgPyAociA9IHMyLmNhbGwodGhpcy5fd2Vla2RheXNQYXJzZSwgYSksIHIgIT09IC0xID8gciA6IG51bGwpIDogdCA9PT0gXCJkZGRcIiA/IChyID0gczIuY2FsbCh0aGlzLl9zaG9ydFdlZWtkYXlzUGFyc2UsIGEpLCByICE9PSAtMSA/IHIgOiBudWxsKSA6IChyID0gczIuY2FsbCh0aGlzLl9taW5XZWVrZGF5c1BhcnNlLCBhKSwgciAhPT0gLTEgPyByIDogbnVsbCkgOiB0ID09PSBcImRkZGRcIiA/IChyID0gczIuY2FsbCh0aGlzLl93ZWVrZGF5c1BhcnNlLCBhKSwgciAhPT0gLTEgfHwgKHIgPSBzMi5jYWxsKHRoaXMuX3Nob3J0V2Vla2RheXNQYXJzZSwgYSksIHIgIT09IC0xKSA/IHIgOiAociA9IHMyLmNhbGwodGhpcy5fbWluV2Vla2RheXNQYXJzZSwgYSksIHIgIT09IC0xID8gciA6IG51bGwpKSA6IHQgPT09IFwiZGRkXCIgPyAociA9IHMyLmNhbGwodGhpcy5fc2hvcnRXZWVrZGF5c1BhcnNlLCBhKSwgciAhPT0gLTEgfHwgKHIgPSBzMi5jYWxsKHRoaXMuX3dlZWtkYXlzUGFyc2UsIGEpLCByICE9PSAtMSkgPyByIDogKHIgPSBzMi5jYWxsKHRoaXMuX21pbldlZWtkYXlzUGFyc2UsIGEpLCByICE9PSAtMSA/IHIgOiBudWxsKSkgOiAociA9IHMyLmNhbGwodGhpcy5fbWluV2Vla2RheXNQYXJzZSwgYSksIHIgIT09IC0xIHx8IChyID0gczIuY2FsbCh0aGlzLl93ZWVrZGF5c1BhcnNlLCBhKSwgciAhPT0gLTEpID8gciA6IChyID0gczIuY2FsbCh0aGlzLl9zaG9ydFdlZWtkYXlzUGFyc2UsIGEpLCByICE9PSAtMSA/IHIgOiBudWxsKSk7XG59XG5mdW5jdGlvbiBPWShlLCB0LCBvKSB7XG4gIHZhciBuLCByLCBpO1xuICBpZiAodGhpcy5fd2Vla2RheXNQYXJzZUV4YWN0KVxuICAgIHJldHVybiBoWS5jYWxsKHRoaXMsIGUsIHQsIG8pO1xuICBmb3IgKHRoaXMuX3dlZWtkYXlzUGFyc2UgfHwgKHRoaXMuX3dlZWtkYXlzUGFyc2UgPSBbXSwgdGhpcy5fbWluV2Vla2RheXNQYXJzZSA9IFtdLCB0aGlzLl9zaG9ydFdlZWtkYXlzUGFyc2UgPSBbXSwgdGhpcy5fZnVsbFdlZWtkYXlzUGFyc2UgPSBbXSksIG4gPSAwOyBuIDwgNzsgbisrKSB7XG4gICAgaWYgKHIgPSBRZShbMmUzLCAxXSkuZGF5KG4pLCBvICYmICF0aGlzLl9mdWxsV2Vla2RheXNQYXJzZVtuXSAmJiAodGhpcy5fZnVsbFdlZWtkYXlzUGFyc2Vbbl0gPSBuZXcgUmVnRXhwKFxuICAgICAgXCJeXCIgKyB0aGlzLndlZWtkYXlzKHIsIFwiXCIpLnJlcGxhY2UoXCIuXCIsIFwiXFxcXC4/XCIpICsgXCIkXCIsXG4gICAgICBcImlcIlxuICAgICksIHRoaXMuX3Nob3J0V2Vla2RheXNQYXJzZVtuXSA9IG5ldyBSZWdFeHAoXG4gICAgICBcIl5cIiArIHRoaXMud2Vla2RheXNTaG9ydChyLCBcIlwiKS5yZXBsYWNlKFwiLlwiLCBcIlxcXFwuP1wiKSArIFwiJFwiLFxuICAgICAgXCJpXCJcbiAgICApLCB0aGlzLl9taW5XZWVrZGF5c1BhcnNlW25dID0gbmV3IFJlZ0V4cChcbiAgICAgIFwiXlwiICsgdGhpcy53ZWVrZGF5c01pbihyLCBcIlwiKS5yZXBsYWNlKFwiLlwiLCBcIlxcXFwuP1wiKSArIFwiJFwiLFxuICAgICAgXCJpXCJcbiAgICApKSwgdGhpcy5fd2Vla2RheXNQYXJzZVtuXSB8fCAoaSA9IFwiXlwiICsgdGhpcy53ZWVrZGF5cyhyLCBcIlwiKSArIFwifF5cIiArIHRoaXMud2Vla2RheXNTaG9ydChyLCBcIlwiKSArIFwifF5cIiArIHRoaXMud2Vla2RheXNNaW4ociwgXCJcIiksIHRoaXMuX3dlZWtkYXlzUGFyc2Vbbl0gPSBuZXcgUmVnRXhwKGkucmVwbGFjZShcIi5cIiwgXCJcIiksIFwiaVwiKSksIG8gJiYgdCA9PT0gXCJkZGRkXCIgJiYgdGhpcy5fZnVsbFdlZWtkYXlzUGFyc2Vbbl0udGVzdChlKSlcbiAgICAgIHJldHVybiBuO1xuICAgIGlmIChvICYmIHQgPT09IFwiZGRkXCIgJiYgdGhpcy5fc2hvcnRXZWVrZGF5c1BhcnNlW25dLnRlc3QoZSkpXG4gICAgICByZXR1cm4gbjtcbiAgICBpZiAobyAmJiB0ID09PSBcImRkXCIgJiYgdGhpcy5fbWluV2Vla2RheXNQYXJzZVtuXS50ZXN0KGUpKVxuICAgICAgcmV0dXJuIG47XG4gICAgaWYgKCFvICYmIHRoaXMuX3dlZWtkYXlzUGFyc2Vbbl0udGVzdChlKSlcbiAgICAgIHJldHVybiBuO1xuICB9XG59XG5mdW5jdGlvbiBmWShlKSB7XG4gIGlmICghdGhpcy5pc1ZhbGlkKCkpXG4gICAgcmV0dXJuIGUgIT0gbnVsbCA/IHRoaXMgOiBOYU47XG4gIHZhciB0ID0gcXIodGhpcywgXCJEYXlcIik7XG4gIHJldHVybiBlICE9IG51bGwgPyAoZSA9IHNZKGUsIHRoaXMubG9jYWxlRGF0YSgpKSwgdGhpcy5hZGQoZSAtIHQsIFwiZFwiKSkgOiB0O1xufVxuZnVuY3Rpb24gZ1koZSkge1xuICBpZiAoIXRoaXMuaXNWYWxpZCgpKVxuICAgIHJldHVybiBlICE9IG51bGwgPyB0aGlzIDogTmFOO1xuICB2YXIgdCA9ICh0aGlzLmRheSgpICsgNyAtIHRoaXMubG9jYWxlRGF0YSgpLl93ZWVrLmRvdykgJSA3O1xuICByZXR1cm4gZSA9PSBudWxsID8gdCA6IHRoaXMuYWRkKGUgLSB0LCBcImRcIik7XG59XG5mdW5jdGlvbiBDWShlKSB7XG4gIGlmICghdGhpcy5pc1ZhbGlkKCkpXG4gICAgcmV0dXJuIGUgIT0gbnVsbCA/IHRoaXMgOiBOYU47XG4gIGlmIChlICE9IG51bGwpIHtcbiAgICB2YXIgdCA9IGNZKGUsIHRoaXMubG9jYWxlRGF0YSgpKTtcbiAgICByZXR1cm4gdGhpcy5kYXkodGhpcy5kYXkoKSAlIDcgPyB0IDogdCAtIDcpO1xuICB9IGVsc2VcbiAgICByZXR1cm4gdGhpcy5kYXkoKSB8fCA3O1xufVxuZnVuY3Rpb24gbVkoZSkge1xuICByZXR1cm4gdGhpcy5fd2Vla2RheXNQYXJzZUV4YWN0ID8gKGswKHRoaXMsIFwiX3dlZWtkYXlzUmVnZXhcIikgfHwgc3MuY2FsbCh0aGlzKSwgZSA/IHRoaXMuX3dlZWtkYXlzU3RyaWN0UmVnZXggOiB0aGlzLl93ZWVrZGF5c1JlZ2V4KSA6IChrMCh0aGlzLCBcIl93ZWVrZGF5c1JlZ2V4XCIpIHx8ICh0aGlzLl93ZWVrZGF5c1JlZ2V4ID0gZFkpLCB0aGlzLl93ZWVrZGF5c1N0cmljdFJlZ2V4ICYmIGUgPyB0aGlzLl93ZWVrZGF5c1N0cmljdFJlZ2V4IDogdGhpcy5fd2Vla2RheXNSZWdleCk7XG59XG5mdW5jdGlvbiBMWShlKSB7XG4gIHJldHVybiB0aGlzLl93ZWVrZGF5c1BhcnNlRXhhY3QgPyAoazAodGhpcywgXCJfd2Vla2RheXNSZWdleFwiKSB8fCBzcy5jYWxsKHRoaXMpLCBlID8gdGhpcy5fd2Vla2RheXNTaG9ydFN0cmljdFJlZ2V4IDogdGhpcy5fd2Vla2RheXNTaG9ydFJlZ2V4KSA6IChrMCh0aGlzLCBcIl93ZWVrZGF5c1Nob3J0UmVnZXhcIikgfHwgKHRoaXMuX3dlZWtkYXlzU2hvcnRSZWdleCA9IGJZKSwgdGhpcy5fd2Vla2RheXNTaG9ydFN0cmljdFJlZ2V4ICYmIGUgPyB0aGlzLl93ZWVrZGF5c1Nob3J0U3RyaWN0UmVnZXggOiB0aGlzLl93ZWVrZGF5c1Nob3J0UmVnZXgpO1xufVxuZnVuY3Rpb24gdlkoZSkge1xuICByZXR1cm4gdGhpcy5fd2Vla2RheXNQYXJzZUV4YWN0ID8gKGswKHRoaXMsIFwiX3dlZWtkYXlzUmVnZXhcIikgfHwgc3MuY2FsbCh0aGlzKSwgZSA/IHRoaXMuX3dlZWtkYXlzTWluU3RyaWN0UmVnZXggOiB0aGlzLl93ZWVrZGF5c01pblJlZ2V4KSA6IChrMCh0aGlzLCBcIl93ZWVrZGF5c01pblJlZ2V4XCIpIHx8ICh0aGlzLl93ZWVrZGF5c01pblJlZ2V4ID0gTVkpLCB0aGlzLl93ZWVrZGF5c01pblN0cmljdFJlZ2V4ICYmIGUgPyB0aGlzLl93ZWVrZGF5c01pblN0cmljdFJlZ2V4IDogdGhpcy5fd2Vla2RheXNNaW5SZWdleCk7XG59XG5mdW5jdGlvbiBzcygpIHtcbiAgZnVuY3Rpb24gZShkLCBiKSB7XG4gICAgcmV0dXJuIGIubGVuZ3RoIC0gZC5sZW5ndGg7XG4gIH1cbiAgdmFyIHQgPSBbXSwgbyA9IFtdLCBuID0gW10sIHIgPSBbXSwgaSwgYSwgcywgbCwgcDtcbiAgZm9yIChpID0gMDsgaSA8IDc7IGkrKylcbiAgICBhID0gUWUoWzJlMywgMV0pLmRheShpKSwgcyA9IGN0KHRoaXMud2Vla2RheXNNaW4oYSwgXCJcIikpLCBsID0gY3QodGhpcy53ZWVrZGF5c1Nob3J0KGEsIFwiXCIpKSwgcCA9IGN0KHRoaXMud2Vla2RheXMoYSwgXCJcIikpLCB0LnB1c2gocyksIG8ucHVzaChsKSwgbi5wdXNoKHApLCByLnB1c2gocyksIHIucHVzaChsKSwgci5wdXNoKHApO1xuICB0LnNvcnQoZSksIG8uc29ydChlKSwgbi5zb3J0KGUpLCByLnNvcnQoZSksIHRoaXMuX3dlZWtkYXlzUmVnZXggPSBuZXcgUmVnRXhwKFwiXihcIiArIHIuam9pbihcInxcIikgKyBcIilcIiwgXCJpXCIpLCB0aGlzLl93ZWVrZGF5c1Nob3J0UmVnZXggPSB0aGlzLl93ZWVrZGF5c1JlZ2V4LCB0aGlzLl93ZWVrZGF5c01pblJlZ2V4ID0gdGhpcy5fd2Vla2RheXNSZWdleCwgdGhpcy5fd2Vla2RheXNTdHJpY3RSZWdleCA9IG5ldyBSZWdFeHAoXG4gICAgXCJeKFwiICsgbi5qb2luKFwifFwiKSArIFwiKVwiLFxuICAgIFwiaVwiXG4gICksIHRoaXMuX3dlZWtkYXlzU2hvcnRTdHJpY3RSZWdleCA9IG5ldyBSZWdFeHAoXG4gICAgXCJeKFwiICsgby5qb2luKFwifFwiKSArIFwiKVwiLFxuICAgIFwiaVwiXG4gICksIHRoaXMuX3dlZWtkYXlzTWluU3RyaWN0UmVnZXggPSBuZXcgUmVnRXhwKFxuICAgIFwiXihcIiArIHQuam9pbihcInxcIikgKyBcIilcIixcbiAgICBcImlcIlxuICApO1xufVxuZnVuY3Rpb24gY3MoKSB7XG4gIHJldHVybiB0aGlzLmhvdXJzKCkgJSAxMiB8fCAxMjtcbn1cbmZ1bmN0aW9uIHFZKCkge1xuICByZXR1cm4gdGhpcy5ob3VycygpIHx8IDI0O1xufVxuZDAoXCJIXCIsIFtcIkhIXCIsIDJdLCAwLCBcImhvdXJcIik7XG5kMChcImhcIiwgW1wiaGhcIiwgMl0sIDAsIGNzKTtcbmQwKFwia1wiLCBbXCJra1wiLCAyXSwgMCwgcVkpO1xuZDAoXCJobW1cIiwgMCwgMCwgZnVuY3Rpb24oKSB7XG4gIHJldHVybiBcIlwiICsgY3MuYXBwbHkodGhpcykgKyBHZSh0aGlzLm1pbnV0ZXMoKSwgMik7XG59KTtcbmQwKFwiaG1tc3NcIiwgMCwgMCwgZnVuY3Rpb24oKSB7XG4gIHJldHVybiBcIlwiICsgY3MuYXBwbHkodGhpcykgKyBHZSh0aGlzLm1pbnV0ZXMoKSwgMikgKyBHZSh0aGlzLnNlY29uZHMoKSwgMik7XG59KTtcbmQwKFwiSG1tXCIsIDAsIDAsIGZ1bmN0aW9uKCkge1xuICByZXR1cm4gXCJcIiArIHRoaXMuaG91cnMoKSArIEdlKHRoaXMubWludXRlcygpLCAyKTtcbn0pO1xuZDAoXCJIbW1zc1wiLCAwLCAwLCBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIFwiXCIgKyB0aGlzLmhvdXJzKCkgKyBHZSh0aGlzLm1pbnV0ZXMoKSwgMikgKyBHZSh0aGlzLnNlY29uZHMoKSwgMik7XG59KTtcbmZ1bmN0aW9uIG9NKGUsIHQpIHtcbiAgZDAoZSwgMCwgMCwgZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIHRoaXMubG9jYWxlRGF0YSgpLm1lcmlkaWVtKFxuICAgICAgdGhpcy5ob3VycygpLFxuICAgICAgdGhpcy5taW51dGVzKCksXG4gICAgICB0XG4gICAgKTtcbiAgfSk7XG59XG5vTShcImFcIiwgITApO1xub00oXCJBXCIsICExKTtcbmZ1bmN0aW9uIHJNKGUsIHQpIHtcbiAgcmV0dXJuIHQuX21lcmlkaWVtUGFyc2U7XG59XG5yMChcImFcIiwgck0pO1xucjAoXCJBXCIsIHJNKTtcbnIwKFwiSFwiLCBKMCwgbnMpO1xucjAoXCJoXCIsIEowLCBBbyk7XG5yMChcImtcIiwgSjAsIEFvKTtcbnIwKFwiSEhcIiwgSjAsIHJlKTtcbnIwKFwiaGhcIiwgSjAsIHJlKTtcbnIwKFwia2tcIiwgSjAsIHJlKTtcbnIwKFwiaG1tXCIsIFliKTtcbnIwKFwiaG1tc3NcIiwgR2IpO1xucjAoXCJIbW1cIiwgWWIpO1xucjAoXCJIbW1zc1wiLCBHYik7XG5ZMChbXCJIXCIsIFwiSEhcIl0sIE0yKTtcblkwKFtcImtcIiwgXCJra1wiXSwgZnVuY3Rpb24oZSwgdCwgbykge1xuICB2YXIgbiA9IHEwKGUpO1xuICB0W00yXSA9IG4gPT09IDI0ID8gMCA6IG47XG59KTtcblkwKFtcImFcIiwgXCJBXCJdLCBmdW5jdGlvbihlLCB0LCBvKSB7XG4gIG8uX2lzUG0gPSBvLl9sb2NhbGUuaXNQTShlKSwgby5fbWVyaWRpZW0gPSBlO1xufSk7XG5ZMChbXCJoXCIsIFwiaGhcIl0sIGZ1bmN0aW9uKGUsIHQsIG8pIHtcbiAgdFtNMl0gPSBxMChlKSwgQzAobykuYmlnSG91ciA9ICEwO1xufSk7XG5ZMChcImhtbVwiLCBmdW5jdGlvbihlLCB0LCBvKSB7XG4gIHZhciBuID0gZS5sZW5ndGggLSAyO1xuICB0W00yXSA9IHEwKGUuc3Vic3RyKDAsIG4pKSwgdFttZV0gPSBxMChlLnN1YnN0cihuKSksIEMwKG8pLmJpZ0hvdXIgPSAhMDtcbn0pO1xuWTAoXCJobW1zc1wiLCBmdW5jdGlvbihlLCB0LCBvKSB7XG4gIHZhciBuID0gZS5sZW5ndGggLSA0LCByID0gZS5sZW5ndGggLSAyO1xuICB0W00yXSA9IHEwKGUuc3Vic3RyKDAsIG4pKSwgdFttZV0gPSBxMChlLnN1YnN0cihuLCAyKSksIHRbc3RdID0gcTAoZS5zdWJzdHIocikpLCBDMChvKS5iaWdIb3VyID0gITA7XG59KTtcblkwKFwiSG1tXCIsIGZ1bmN0aW9uKGUsIHQsIG8pIHtcbiAgdmFyIG4gPSBlLmxlbmd0aCAtIDI7XG4gIHRbTTJdID0gcTAoZS5zdWJzdHIoMCwgbikpLCB0W21lXSA9IHEwKGUuc3Vic3RyKG4pKTtcbn0pO1xuWTAoXCJIbW1zc1wiLCBmdW5jdGlvbihlLCB0LCBvKSB7XG4gIHZhciBuID0gZS5sZW5ndGggLSA0LCByID0gZS5sZW5ndGggLSAyO1xuICB0W00yXSA9IHEwKGUuc3Vic3RyKDAsIG4pKSwgdFttZV0gPSBxMChlLnN1YnN0cihuLCAyKSksIHRbc3RdID0gcTAoZS5zdWJzdHIocikpO1xufSk7XG5mdW5jdGlvbiB5WShlKSB7XG4gIHJldHVybiAoZSArIFwiXCIpLnRvTG93ZXJDYXNlKCkuY2hhckF0KDApID09PSBcInBcIjtcbn1cbnZhciB3WSA9IC9bYXBdXFwuP20/XFwuPy9pLCB4WSA9IHVvKFwiSG91cnNcIiwgITApO1xuZnVuY3Rpb24gV1koZSwgdCwgbykge1xuICByZXR1cm4gZSA+IDExID8gbyA/IFwicG1cIiA6IFwiUE1cIiA6IG8gPyBcImFtXCIgOiBcIkFNXCI7XG59XG52YXIgbk0gPSB7XG4gIGNhbGVuZGFyOiBoVSxcbiAgbG9uZ0RhdGVGb3JtYXQ6IENVLFxuICBpbnZhbGlkRGF0ZTogTFUsXG4gIG9yZGluYWw6IHFVLFxuICBkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOiB5VSxcbiAgcmVsYXRpdmVUaW1lOiB4VSxcbiAgbW9udGhzOiBVVSxcbiAgbW9udGhzU2hvcnQ6IGpiLFxuICB3ZWVrOiBvWSxcbiAgd2Vla2RheXM6IGxZLFxuICB3ZWVrZGF5c01pbjogcFksXG4gIHdlZWtkYXlzU2hvcnQ6IHRNLFxuICBtZXJpZGllbVBhcnNlOiB3WVxufSwgXzAgPSB7fSwgRG8gPSB7fSwgeHI7XG5mdW5jdGlvbiBSWShlLCB0KSB7XG4gIHZhciBvLCBuID0gTWF0aC5taW4oZS5sZW5ndGgsIHQubGVuZ3RoKTtcbiAgZm9yIChvID0gMDsgbyA8IG47IG8gKz0gMSlcbiAgICBpZiAoZVtvXSAhPT0gdFtvXSlcbiAgICAgIHJldHVybiBvO1xuICByZXR1cm4gbjtcbn1cbmZ1bmN0aW9uIHljKGUpIHtcbiAgcmV0dXJuIGUgJiYgZS50b0xvd2VyQ2FzZSgpLnJlcGxhY2UoXCJfXCIsIFwiLVwiKTtcbn1cbmZ1bmN0aW9uIEJZKGUpIHtcbiAgZm9yICh2YXIgdCA9IDAsIG8sIG4sIHIsIGk7IHQgPCBlLmxlbmd0aDsgKSB7XG4gICAgZm9yIChpID0geWMoZVt0XSkuc3BsaXQoXCItXCIpLCBvID0gaS5sZW5ndGgsIG4gPSB5YyhlW3QgKyAxXSksIG4gPSBuID8gbi5zcGxpdChcIi1cIikgOiBudWxsOyBvID4gMDsgKSB7XG4gICAgICBpZiAociA9IGRpKGkuc2xpY2UoMCwgbykuam9pbihcIi1cIikpLCByKVxuICAgICAgICByZXR1cm4gcjtcbiAgICAgIGlmIChuICYmIG4ubGVuZ3RoID49IG8gJiYgUlkoaSwgbikgPj0gbyAtIDEpXG4gICAgICAgIGJyZWFrO1xuICAgICAgby0tO1xuICAgIH1cbiAgICB0Kys7XG4gIH1cbiAgcmV0dXJuIHhyO1xufVxuZnVuY3Rpb24gU1koZSkge1xuICByZXR1cm4gISEoZSAmJiBlLm1hdGNoKFwiXlteL1xcXFxcXFxcXSokXCIpKTtcbn1cbmZ1bmN0aW9uIGRpKGUpIHtcbiAgdmFyIHQgPSBudWxsLCBvO1xuICBpZiAoXzBbZV0gPT09IHZvaWQgMCAmJiB0eXBlb2YgbW9kdWxlIDwgXCJ1XCIgJiYgbW9kdWxlICYmIG1vZHVsZS5leHBvcnRzICYmIFNZKGUpKVxuICAgIHRyeSB7XG4gICAgICB0ID0geHIuX2FiYnIsIG8gPSByZXF1aXJlLCBvKFwiLi9sb2NhbGUvXCIgKyBlKSwgVHQodCk7XG4gICAgfSBjYXRjaCB7XG4gICAgICBfMFtlXSA9IG51bGw7XG4gICAgfVxuICByZXR1cm4gXzBbZV07XG59XG5mdW5jdGlvbiBUdChlLCB0KSB7XG4gIHZhciBvO1xuICByZXR1cm4gZSAmJiAoVDIodCkgPyBvID0genQoZSkgOiBvID0gbHMoZSwgdCksIG8gPyB4ciA9IG8gOiB0eXBlb2YgY29uc29sZSA8IFwidVwiICYmIGNvbnNvbGUud2FybiAmJiBjb25zb2xlLndhcm4oXG4gICAgXCJMb2NhbGUgXCIgKyBlICsgXCIgbm90IGZvdW5kLiBEaWQgeW91IGZvcmdldCB0byBsb2FkIGl0P1wiXG4gICkpLCB4ci5fYWJicjtcbn1cbmZ1bmN0aW9uIGxzKGUsIHQpIHtcbiAgaWYgKHQgIT09IG51bGwpIHtcbiAgICB2YXIgbywgbiA9IG5NO1xuICAgIGlmICh0LmFiYnIgPSBlLCBfMFtlXSAhPSBudWxsKVxuICAgICAgUGIoXG4gICAgICAgIFwiZGVmaW5lTG9jYWxlT3ZlcnJpZGVcIixcbiAgICAgICAgXCJ1c2UgbW9tZW50LnVwZGF0ZUxvY2FsZShsb2NhbGVOYW1lLCBjb25maWcpIHRvIGNoYW5nZSBhbiBleGlzdGluZyBsb2NhbGUuIG1vbWVudC5kZWZpbmVMb2NhbGUobG9jYWxlTmFtZSwgY29uZmlnKSBzaG91bGQgb25seSBiZSB1c2VkIGZvciBjcmVhdGluZyBhIG5ldyBsb2NhbGUgU2VlIGh0dHA6Ly9tb21lbnRqcy5jb20vZ3VpZGVzLyMvd2FybmluZ3MvZGVmaW5lLWxvY2FsZS8gZm9yIG1vcmUgaW5mby5cIlxuICAgICAgKSwgbiA9IF8wW2VdLl9jb25maWc7XG4gICAgZWxzZSBpZiAodC5wYXJlbnRMb2NhbGUgIT0gbnVsbClcbiAgICAgIGlmIChfMFt0LnBhcmVudExvY2FsZV0gIT0gbnVsbClcbiAgICAgICAgbiA9IF8wW3QucGFyZW50TG9jYWxlXS5fY29uZmlnO1xuICAgICAgZWxzZSBpZiAobyA9IGRpKHQucGFyZW50TG9jYWxlKSwgbyAhPSBudWxsKVxuICAgICAgICBuID0gby5fY29uZmlnO1xuICAgICAgZWxzZVxuICAgICAgICByZXR1cm4gRG9bdC5wYXJlbnRMb2NhbGVdIHx8IChEb1t0LnBhcmVudExvY2FsZV0gPSBbXSksIERvW3QucGFyZW50TG9jYWxlXS5wdXNoKHtcbiAgICAgICAgICBuYW1lOiBlLFxuICAgICAgICAgIGNvbmZpZzogdFxuICAgICAgICB9KSwgbnVsbDtcbiAgICByZXR1cm4gXzBbZV0gPSBuZXcgJDYocTUobiwgdCkpLCBEb1tlXSAmJiBEb1tlXS5mb3JFYWNoKGZ1bmN0aW9uKHIpIHtcbiAgICAgIGxzKHIubmFtZSwgci5jb25maWcpO1xuICAgIH0pLCBUdChlKSwgXzBbZV07XG4gIH0gZWxzZVxuICAgIHJldHVybiBkZWxldGUgXzBbZV0sIG51bGw7XG59XG5mdW5jdGlvbiBFWShlLCB0KSB7XG4gIGlmICh0ICE9IG51bGwpIHtcbiAgICB2YXIgbywgbiwgciA9IG5NO1xuICAgIF8wW2VdICE9IG51bGwgJiYgXzBbZV0ucGFyZW50TG9jYWxlICE9IG51bGwgPyBfMFtlXS5zZXQocTUoXzBbZV0uX2NvbmZpZywgdCkpIDogKG4gPSBkaShlKSwgbiAhPSBudWxsICYmIChyID0gbi5fY29uZmlnKSwgdCA9IHE1KHIsIHQpLCBuID09IG51bGwgJiYgKHQuYWJiciA9IGUpLCBvID0gbmV3ICQ2KHQpLCBvLnBhcmVudExvY2FsZSA9IF8wW2VdLCBfMFtlXSA9IG8pLCBUdChlKTtcbiAgfSBlbHNlXG4gICAgXzBbZV0gIT0gbnVsbCAmJiAoXzBbZV0ucGFyZW50TG9jYWxlICE9IG51bGwgPyAoXzBbZV0gPSBfMFtlXS5wYXJlbnRMb2NhbGUsIGUgPT09IFR0KCkgJiYgVHQoZSkpIDogXzBbZV0gIT0gbnVsbCAmJiBkZWxldGUgXzBbZV0pO1xuICByZXR1cm4gXzBbZV07XG59XG5mdW5jdGlvbiB6dChlKSB7XG4gIHZhciB0O1xuICBpZiAoZSAmJiBlLl9sb2NhbGUgJiYgZS5fbG9jYWxlLl9hYmJyICYmIChlID0gZS5fbG9jYWxlLl9hYmJyKSwgIWUpXG4gICAgcmV0dXJuIHhyO1xuICBpZiAoIXFlKGUpKSB7XG4gICAgaWYgKHQgPSBkaShlKSwgdClcbiAgICAgIHJldHVybiB0O1xuICAgIGUgPSBbZV07XG4gIH1cbiAgcmV0dXJuIEJZKGUpO1xufVxuZnVuY3Rpb24ga1koKSB7XG4gIHJldHVybiB5NShfMCk7XG59XG5mdW5jdGlvbiBwcyhlKSB7XG4gIHZhciB0LCBvID0gZS5fYTtcbiAgcmV0dXJuIG8gJiYgQzAoZSkub3ZlcmZsb3cgPT09IC0yICYmICh0ID0gb1thdF0gPCAwIHx8IG9bYXRdID4gMTEgPyBhdCA6IG9bVGVdIDwgMSB8fCBvW1RlXSA+IGlzKG9beTJdLCBvW2F0XSkgPyBUZSA6IG9bTTJdIDwgMCB8fCBvW00yXSA+IDI0IHx8IG9bTTJdID09PSAyNCAmJiAob1ttZV0gIT09IDAgfHwgb1tzdF0gIT09IDAgfHwgb1thM10gIT09IDApID8gTTIgOiBvW21lXSA8IDAgfHwgb1ttZV0gPiA1OSA/IG1lIDogb1tzdF0gPCAwIHx8IG9bc3RdID4gNTkgPyBzdCA6IG9bYTNdIDwgMCB8fCBvW2EzXSA+IDk5OSA/IGEzIDogLTEsIEMwKGUpLl9vdmVyZmxvd0RheU9mWWVhciAmJiAodCA8IHkyIHx8IHQgPiBUZSkgJiYgKHQgPSBUZSksIEMwKGUpLl9vdmVyZmxvd1dlZWtzICYmIHQgPT09IC0xICYmICh0ID0gRFUpLCBDMChlKS5fb3ZlcmZsb3dXZWVrZGF5ICYmIHQgPT09IC0xICYmICh0ID0gSFUpLCBDMChlKS5vdmVyZmxvdyA9IHQpLCBlO1xufVxudmFyIE5ZID0gL15cXHMqKCg/OlsrLV1cXGR7Nn18XFxkezR9KS0oPzpcXGRcXGQtXFxkXFxkfFdcXGRcXGQtXFxkfFdcXGRcXGR8XFxkXFxkXFxkfFxcZFxcZCkpKD86KFR8ICkoXFxkXFxkKD86OlxcZFxcZCg/OjpcXGRcXGQoPzpbLixdXFxkKyk/KT8pPykoWystXVxcZFxcZCg/Ojo/XFxkXFxkKT98XFxzKlopPyk/JC8sIFRZID0gL15cXHMqKCg/OlsrLV1cXGR7Nn18XFxkezR9KSg/OlxcZFxcZFxcZFxcZHxXXFxkXFxkXFxkfFdcXGRcXGR8XFxkXFxkXFxkfFxcZFxcZHwpKSg/OihUfCApKFxcZFxcZCg/OlxcZFxcZCg/OlxcZFxcZCg/OlsuLF1cXGQrKT8pPyk/KShbKy1dXFxkXFxkKD86Oj9cXGRcXGQpP3xcXHMqWik/KT8kLywgSVkgPSAvWnxbKy1dXFxkXFxkKD86Oj9cXGRcXGQpPy8sIFJuID0gW1xuICBbXCJZWVlZWVktTU0tRERcIiwgL1srLV1cXGR7Nn0tXFxkXFxkLVxcZFxcZC9dLFxuICBbXCJZWVlZLU1NLUREXCIsIC9cXGR7NH0tXFxkXFxkLVxcZFxcZC9dLFxuICBbXCJHR0dHLVtXXVdXLUVcIiwgL1xcZHs0fS1XXFxkXFxkLVxcZC9dLFxuICBbXCJHR0dHLVtXXVdXXCIsIC9cXGR7NH0tV1xcZFxcZC8sICExXSxcbiAgW1wiWVlZWS1ERERcIiwgL1xcZHs0fS1cXGR7M30vXSxcbiAgW1wiWVlZWS1NTVwiLCAvXFxkezR9LVxcZFxcZC8sICExXSxcbiAgW1wiWVlZWVlZTU1ERFwiLCAvWystXVxcZHsxMH0vXSxcbiAgW1wiWVlZWU1NRERcIiwgL1xcZHs4fS9dLFxuICBbXCJHR0dHW1ddV1dFXCIsIC9cXGR7NH1XXFxkezN9L10sXG4gIFtcIkdHR0dbV11XV1wiLCAvXFxkezR9V1xcZHsyfS8sICExXSxcbiAgW1wiWVlZWURERFwiLCAvXFxkezd9L10sXG4gIFtcIllZWVlNTVwiLCAvXFxkezZ9LywgITFdLFxuICBbXCJZWVlZXCIsIC9cXGR7NH0vLCAhMV1cbl0sIHZhID0gW1xuICBbXCJISDptbTpzcy5TU1NTXCIsIC9cXGRcXGQ6XFxkXFxkOlxcZFxcZFxcLlxcZCsvXSxcbiAgW1wiSEg6bW06c3MsU1NTU1wiLCAvXFxkXFxkOlxcZFxcZDpcXGRcXGQsXFxkKy9dLFxuICBbXCJISDptbTpzc1wiLCAvXFxkXFxkOlxcZFxcZDpcXGRcXGQvXSxcbiAgW1wiSEg6bW1cIiwgL1xcZFxcZDpcXGRcXGQvXSxcbiAgW1wiSEhtbXNzLlNTU1NcIiwgL1xcZFxcZFxcZFxcZFxcZFxcZFxcLlxcZCsvXSxcbiAgW1wiSEhtbXNzLFNTU1NcIiwgL1xcZFxcZFxcZFxcZFxcZFxcZCxcXGQrL10sXG4gIFtcIkhIbW1zc1wiLCAvXFxkXFxkXFxkXFxkXFxkXFxkL10sXG4gIFtcIkhIbW1cIiwgL1xcZFxcZFxcZFxcZC9dLFxuICBbXCJISFwiLCAvXFxkXFxkL11cbl0sIERZID0gL15cXC8/RGF0ZVxcKCgtP1xcZCspL2ksIEhZID0gL14oPzooTW9ufFR1ZXxXZWR8VGh1fEZyaXxTYXR8U3VuKSw/XFxzKT8oXFxkezEsMn0pXFxzKEphbnxGZWJ8TWFyfEFwcnxNYXl8SnVufEp1bHxBdWd8U2VwfE9jdHxOb3Z8RGVjKVxccyhcXGR7Miw0fSlcXHMoXFxkXFxkKTooXFxkXFxkKSg/OjooXFxkXFxkKSk/XFxzKD86KFVUfEdNVHxbRUNNUF1bU0RdVCl8KFtael0pfChbKy1dXFxkezR9KSkkLywgVlkgPSB7XG4gIFVUOiAwLFxuICBHTVQ6IDAsXG4gIEVEVDogLTQgKiA2MCxcbiAgRVNUOiAtNSAqIDYwLFxuICBDRFQ6IC01ICogNjAsXG4gIENTVDogLTYgKiA2MCxcbiAgTURUOiAtNiAqIDYwLFxuICBNU1Q6IC03ICogNjAsXG4gIFBEVDogLTcgKiA2MCxcbiAgUFNUOiAtOCAqIDYwXG59O1xuZnVuY3Rpb24gaU0oZSkge1xuICB2YXIgdCwgbywgbiA9IGUuX2ksIHIgPSBOWS5leGVjKG4pIHx8IFRZLmV4ZWMobiksIGksIGEsIHMsIGwsIHAgPSBSbi5sZW5ndGgsIGQgPSB2YS5sZW5ndGg7XG4gIGlmIChyKSB7XG4gICAgZm9yIChDMChlKS5pc28gPSAhMCwgdCA9IDAsIG8gPSBwOyB0IDwgbzsgdCsrKVxuICAgICAgaWYgKFJuW3RdWzFdLmV4ZWMoclsxXSkpIHtcbiAgICAgICAgYSA9IFJuW3RdWzBdLCBpID0gUm5bdF1bMl0gIT09ICExO1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICBpZiAoYSA9PSBudWxsKSB7XG4gICAgICBlLl9pc1ZhbGlkID0gITE7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmIChyWzNdKSB7XG4gICAgICBmb3IgKHQgPSAwLCBvID0gZDsgdCA8IG87IHQrKylcbiAgICAgICAgaWYgKHZhW3RdWzFdLmV4ZWMoclszXSkpIHtcbiAgICAgICAgICBzID0gKHJbMl0gfHwgXCIgXCIpICsgdmFbdF1bMF07XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgIGlmIChzID09IG51bGwpIHtcbiAgICAgICAgZS5faXNWYWxpZCA9ICExO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgfVxuICAgIGlmICghaSAmJiBzICE9IG51bGwpIHtcbiAgICAgIGUuX2lzVmFsaWQgPSAhMTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaWYgKHJbNF0pXG4gICAgICBpZiAoSVkuZXhlYyhyWzRdKSlcbiAgICAgICAgbCA9IFwiWlwiO1xuICAgICAgZWxzZSB7XG4gICAgICAgIGUuX2lzVmFsaWQgPSAhMTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgIGUuX2YgPSBhICsgKHMgfHwgXCJcIikgKyAobCB8fCBcIlwiKSwgYnMoZSk7XG4gIH0gZWxzZVxuICAgIGUuX2lzVmFsaWQgPSAhMTtcbn1cbmZ1bmN0aW9uIFBZKGUsIHQsIG8sIG4sIHIsIGkpIHtcbiAgdmFyIGEgPSBbXG4gICAgRlkoZSksXG4gICAgamIuaW5kZXhPZih0KSxcbiAgICBwYXJzZUludChvLCAxMCksXG4gICAgcGFyc2VJbnQobiwgMTApLFxuICAgIHBhcnNlSW50KHIsIDEwKVxuICBdO1xuICByZXR1cm4gaSAmJiBhLnB1c2gocGFyc2VJbnQoaSwgMTApKSwgYTtcbn1cbmZ1bmN0aW9uIEZZKGUpIHtcbiAgdmFyIHQgPSBwYXJzZUludChlLCAxMCk7XG4gIHJldHVybiB0IDw9IDQ5ID8gMmUzICsgdCA6IHQgPD0gOTk5ID8gMTkwMCArIHQgOiB0O1xufVxuZnVuY3Rpb24gWFkoZSkge1xuICByZXR1cm4gZS5yZXBsYWNlKC9cXChbXigpXSpcXCl8W1xcblxcdF0vZywgXCIgXCIpLnJlcGxhY2UoLyhcXHNcXHMrKS9nLCBcIiBcIikucmVwbGFjZSgvXlxcc1xccyovLCBcIlwiKS5yZXBsYWNlKC9cXHNcXHMqJC8sIFwiXCIpO1xufVxuZnVuY3Rpb24gVVkoZSwgdCwgbykge1xuICBpZiAoZSkge1xuICAgIHZhciBuID0gdE0uaW5kZXhPZihlKSwgciA9IG5ldyBEYXRlKFxuICAgICAgdFswXSxcbiAgICAgIHRbMV0sXG4gICAgICB0WzJdXG4gICAgKS5nZXREYXkoKTtcbiAgICBpZiAobiAhPT0gcilcbiAgICAgIHJldHVybiBDMChvKS53ZWVrZGF5TWlzbWF0Y2ggPSAhMCwgby5faXNWYWxpZCA9ICExLCAhMTtcbiAgfVxuICByZXR1cm4gITA7XG59XG5mdW5jdGlvbiBZWShlLCB0LCBvKSB7XG4gIGlmIChlKVxuICAgIHJldHVybiBWWVtlXTtcbiAgaWYgKHQpXG4gICAgcmV0dXJuIDA7XG4gIHZhciBuID0gcGFyc2VJbnQobywgMTApLCByID0gbiAlIDEwMCwgaSA9IChuIC0gcikgLyAxMDA7XG4gIHJldHVybiBpICogNjAgKyByO1xufVxuZnVuY3Rpb24gYU0oZSkge1xuICB2YXIgdCA9IEhZLmV4ZWMoWFkoZS5faSkpLCBvO1xuICBpZiAodCkge1xuICAgIGlmIChvID0gUFkoXG4gICAgICB0WzRdLFxuICAgICAgdFszXSxcbiAgICAgIHRbMl0sXG4gICAgICB0WzVdLFxuICAgICAgdFs2XSxcbiAgICAgIHRbN11cbiAgICApLCAhVVkodFsxXSwgbywgZSkpXG4gICAgICByZXR1cm47XG4gICAgZS5fYSA9IG8sIGUuX3R6bSA9IFlZKHRbOF0sIHRbOV0sIHRbMTBdKSwgZS5fZCA9IHlyLmFwcGx5KG51bGwsIGUuX2EpLCBlLl9kLnNldFVUQ01pbnV0ZXMoZS5fZC5nZXRVVENNaW51dGVzKCkgLSBlLl90em0pLCBDMChlKS5yZmMyODIyID0gITA7XG4gIH0gZWxzZVxuICAgIGUuX2lzVmFsaWQgPSAhMTtcbn1cbmZ1bmN0aW9uIEdZKGUpIHtcbiAgdmFyIHQgPSBEWS5leGVjKGUuX2kpO1xuICBpZiAodCAhPT0gbnVsbCkge1xuICAgIGUuX2QgPSAvKiBAX19QVVJFX18gKi8gbmV3IERhdGUoK3RbMV0pO1xuICAgIHJldHVybjtcbiAgfVxuICBpZiAoaU0oZSksIGUuX2lzVmFsaWQgPT09ICExKVxuICAgIGRlbGV0ZSBlLl9pc1ZhbGlkO1xuICBlbHNlXG4gICAgcmV0dXJuO1xuICBpZiAoYU0oZSksIGUuX2lzVmFsaWQgPT09ICExKVxuICAgIGRlbGV0ZSBlLl9pc1ZhbGlkO1xuICBlbHNlXG4gICAgcmV0dXJuO1xuICBlLl9zdHJpY3QgPyBlLl9pc1ZhbGlkID0gITEgOiAkMS5jcmVhdGVGcm9tSW5wdXRGYWxsYmFjayhlKTtcbn1cbiQxLmNyZWF0ZUZyb21JbnB1dEZhbGxiYWNrID0gdWUoXG4gIFwidmFsdWUgcHJvdmlkZWQgaXMgbm90IGluIGEgcmVjb2duaXplZCBSRkMyODIyIG9yIElTTyBmb3JtYXQuIG1vbWVudCBjb25zdHJ1Y3Rpb24gZmFsbHMgYmFjayB0byBqcyBEYXRlKCksIHdoaWNoIGlzIG5vdCByZWxpYWJsZSBhY3Jvc3MgYWxsIGJyb3dzZXJzIGFuZCB2ZXJzaW9ucy4gTm9uIFJGQzI4MjIvSVNPIGRhdGUgZm9ybWF0cyBhcmUgZGlzY291cmFnZWQuIFBsZWFzZSByZWZlciB0byBodHRwOi8vbW9tZW50anMuY29tL2d1aWRlcy8jL3dhcm5pbmdzL2pzLWRhdGUvIGZvciBtb3JlIGluZm8uXCIsXG4gIGZ1bmN0aW9uKGUpIHtcbiAgICBlLl9kID0gLyogQF9fUFVSRV9fICovIG5ldyBEYXRlKGUuX2kgKyAoZS5fdXNlVVRDID8gXCIgVVRDXCIgOiBcIlwiKSk7XG4gIH1cbik7XG5mdW5jdGlvbiBCMyhlLCB0LCBvKSB7XG4gIHJldHVybiBlID8/IHQgPz8gbztcbn1cbmZ1bmN0aW9uIFFZKGUpIHtcbiAgdmFyIHQgPSBuZXcgRGF0ZSgkMS5ub3coKSk7XG4gIHJldHVybiBlLl91c2VVVEMgPyBbXG4gICAgdC5nZXRVVENGdWxsWWVhcigpLFxuICAgIHQuZ2V0VVRDTW9udGgoKSxcbiAgICB0LmdldFVUQ0RhdGUoKVxuICBdIDogW3QuZ2V0RnVsbFllYXIoKSwgdC5nZXRNb250aCgpLCB0LmdldERhdGUoKV07XG59XG5mdW5jdGlvbiBkcyhlKSB7XG4gIHZhciB0LCBvLCBuID0gW10sIHIsIGksIGE7XG4gIGlmICghZS5fZCkge1xuICAgIGZvciAociA9IFFZKGUpLCBlLl93ICYmIGUuX2FbVGVdID09IG51bGwgJiYgZS5fYVthdF0gPT0gbnVsbCAmJiBaWShlKSwgZS5fZGF5T2ZZZWFyICE9IG51bGwgJiYgKGEgPSBCMyhlLl9hW3kyXSwgclt5Ml0pLCAoZS5fZGF5T2ZZZWFyID4gZXIoYSkgfHwgZS5fZGF5T2ZZZWFyID09PSAwKSAmJiAoQzAoZSkuX292ZXJmbG93RGF5T2ZZZWFyID0gITApLCBvID0geXIoYSwgMCwgZS5fZGF5T2ZZZWFyKSwgZS5fYVthdF0gPSBvLmdldFVUQ01vbnRoKCksIGUuX2FbVGVdID0gby5nZXRVVENEYXRlKCkpLCB0ID0gMDsgdCA8IDMgJiYgZS5fYVt0XSA9PSBudWxsOyArK3QpXG4gICAgICBlLl9hW3RdID0gblt0XSA9IHJbdF07XG4gICAgZm9yICg7IHQgPCA3OyB0KyspXG4gICAgICBlLl9hW3RdID0gblt0XSA9IGUuX2FbdF0gPT0gbnVsbCA/IHQgPT09IDIgPyAxIDogMCA6IGUuX2FbdF07XG4gICAgZS5fYVtNMl0gPT09IDI0ICYmIGUuX2FbbWVdID09PSAwICYmIGUuX2Fbc3RdID09PSAwICYmIGUuX2FbYTNdID09PSAwICYmIChlLl9uZXh0RGF5ID0gITAsIGUuX2FbTTJdID0gMCksIGUuX2QgPSAoZS5fdXNlVVRDID8geXIgOiBlWSkuYXBwbHkoXG4gICAgICBudWxsLFxuICAgICAgblxuICAgICksIGkgPSBlLl91c2VVVEMgPyBlLl9kLmdldFVUQ0RheSgpIDogZS5fZC5nZXREYXkoKSwgZS5fdHptICE9IG51bGwgJiYgZS5fZC5zZXRVVENNaW51dGVzKGUuX2QuZ2V0VVRDTWludXRlcygpIC0gZS5fdHptKSwgZS5fbmV4dERheSAmJiAoZS5fYVtNMl0gPSAyNCksIGUuX3cgJiYgdHlwZW9mIGUuX3cuZCA8IFwidVwiICYmIGUuX3cuZCAhPT0gaSAmJiAoQzAoZSkud2Vla2RheU1pc21hdGNoID0gITApO1xuICB9XG59XG5mdW5jdGlvbiBaWShlKSB7XG4gIHZhciB0LCBvLCBuLCByLCBpLCBhLCBzLCBsLCBwO1xuICB0ID0gZS5fdywgdC5HRyAhPSBudWxsIHx8IHQuVyAhPSBudWxsIHx8IHQuRSAhPSBudWxsID8gKGkgPSAxLCBhID0gNCwgbyA9IEIzKFxuICAgIHQuR0csXG4gICAgZS5fYVt5Ml0sXG4gICAgd3IoSzAoKSwgMSwgNCkueWVhclxuICApLCBuID0gQjModC5XLCAxKSwgciA9IEIzKHQuRSwgMSksIChyIDwgMSB8fCByID4gNykgJiYgKGwgPSAhMCkpIDogKGkgPSBlLl9sb2NhbGUuX3dlZWsuZG93LCBhID0gZS5fbG9jYWxlLl93ZWVrLmRveSwgcCA9IHdyKEswKCksIGksIGEpLCBvID0gQjModC5nZywgZS5fYVt5Ml0sIHAueWVhciksIG4gPSBCMyh0LncsIHAud2VlayksIHQuZCAhPSBudWxsID8gKHIgPSB0LmQsIChyIDwgMCB8fCByID4gNikgJiYgKGwgPSAhMCkpIDogdC5lICE9IG51bGwgPyAociA9IHQuZSArIGksICh0LmUgPCAwIHx8IHQuZSA+IDYpICYmIChsID0gITApKSA6IHIgPSBpKSwgbiA8IDEgfHwgbiA+IGx0KG8sIGksIGEpID8gQzAoZSkuX292ZXJmbG93V2Vla3MgPSAhMCA6IGwgIT0gbnVsbCA/IEMwKGUpLl9vdmVyZmxvd1dlZWtkYXkgPSAhMCA6IChzID0gZU0obywgbiwgciwgaSwgYSksIGUuX2FbeTJdID0gcy55ZWFyLCBlLl9kYXlPZlllYXIgPSBzLmRheU9mWWVhcik7XG59XG4kMS5JU09fODYwMSA9IGZ1bmN0aW9uKCkge1xufTtcbiQxLlJGQ18yODIyID0gZnVuY3Rpb24oKSB7XG59O1xuZnVuY3Rpb24gYnMoZSkge1xuICBpZiAoZS5fZiA9PT0gJDEuSVNPXzg2MDEpIHtcbiAgICBpTShlKTtcbiAgICByZXR1cm47XG4gIH1cbiAgaWYgKGUuX2YgPT09ICQxLlJGQ18yODIyKSB7XG4gICAgYU0oZSk7XG4gICAgcmV0dXJuO1xuICB9XG4gIGUuX2EgPSBbXSwgQzAoZSkuZW1wdHkgPSAhMDtcbiAgdmFyIHQgPSBcIlwiICsgZS5faSwgbywgbiwgciwgaSwgYSwgcyA9IHQubGVuZ3RoLCBsID0gMCwgcCwgZDtcbiAgZm9yIChyID0gRmIoZS5fZiwgZS5fbG9jYWxlKS5tYXRjaChlcykgfHwgW10sIGQgPSByLmxlbmd0aCwgbyA9IDA7IG8gPCBkOyBvKyspXG4gICAgaSA9IHJbb10sIG4gPSAodC5tYXRjaChOVShpLCBlKSkgfHwgW10pWzBdLCBuICYmIChhID0gdC5zdWJzdHIoMCwgdC5pbmRleE9mKG4pKSwgYS5sZW5ndGggPiAwICYmIEMwKGUpLnVudXNlZElucHV0LnB1c2goYSksIHQgPSB0LnNsaWNlKFxuICAgICAgdC5pbmRleE9mKG4pICsgbi5sZW5ndGhcbiAgICApLCBsICs9IG4ubGVuZ3RoKSwgUDNbaV0gPyAobiA/IEMwKGUpLmVtcHR5ID0gITEgOiBDMChlKS51bnVzZWRUb2tlbnMucHVzaChpKSwgSVUoaSwgbiwgZSkpIDogZS5fc3RyaWN0ICYmICFuICYmIEMwKGUpLnVudXNlZFRva2Vucy5wdXNoKGkpO1xuICBDMChlKS5jaGFyc0xlZnRPdmVyID0gcyAtIGwsIHQubGVuZ3RoID4gMCAmJiBDMChlKS51bnVzZWRJbnB1dC5wdXNoKHQpLCBlLl9hW00yXSA8PSAxMiAmJiBDMChlKS5iaWdIb3VyID09PSAhMCAmJiBlLl9hW00yXSA+IDAgJiYgKEMwKGUpLmJpZ0hvdXIgPSB2b2lkIDApLCBDMChlKS5wYXJzZWREYXRlUGFydHMgPSBlLl9hLnNsaWNlKDApLCBDMChlKS5tZXJpZGllbSA9IGUuX21lcmlkaWVtLCBlLl9hW00yXSA9IGpZKFxuICAgIGUuX2xvY2FsZSxcbiAgICBlLl9hW00yXSxcbiAgICBlLl9tZXJpZGllbVxuICApLCBwID0gQzAoZSkuZXJhLCBwICE9PSBudWxsICYmIChlLl9hW3kyXSA9IGUuX2xvY2FsZS5lcmFzQ29udmVydFllYXIocCwgZS5fYVt5Ml0pKSwgZHMoZSksIHBzKGUpO1xufVxuZnVuY3Rpb24galkoZSwgdCwgbykge1xuICB2YXIgbjtcbiAgcmV0dXJuIG8gPT0gbnVsbCA/IHQgOiBlLm1lcmlkaWVtSG91ciAhPSBudWxsID8gZS5tZXJpZGllbUhvdXIodCwgbykgOiAoZS5pc1BNICE9IG51bGwgJiYgKG4gPSBlLmlzUE0obyksIG4gJiYgdCA8IDEyICYmICh0ICs9IDEyKSwgIW4gJiYgdCA9PT0gMTIgJiYgKHQgPSAwKSksIHQpO1xufVxuZnVuY3Rpb24gS1koZSkge1xuICB2YXIgdCwgbywgbiwgciwgaSwgYSwgcyA9ICExLCBsID0gZS5fZi5sZW5ndGg7XG4gIGlmIChsID09PSAwKSB7XG4gICAgQzAoZSkuaW52YWxpZEZvcm1hdCA9ICEwLCBlLl9kID0gLyogQF9fUFVSRV9fICovIG5ldyBEYXRlKE5hTik7XG4gICAgcmV0dXJuO1xuICB9XG4gIGZvciAociA9IDA7IHIgPCBsOyByKyspXG4gICAgaSA9IDAsIGEgPSAhMSwgdCA9IF82KHt9LCBlKSwgZS5fdXNlVVRDICE9IG51bGwgJiYgKHQuX3VzZVVUQyA9IGUuX3VzZVVUQyksIHQuX2YgPSBlLl9mW3JdLCBicyh0KSwgSjYodCkgJiYgKGEgPSAhMCksIGkgKz0gQzAodCkuY2hhcnNMZWZ0T3ZlciwgaSArPSBDMCh0KS51bnVzZWRUb2tlbnMubGVuZ3RoICogMTAsIEMwKHQpLnNjb3JlID0gaSwgcyA/IGkgPCBuICYmIChuID0gaSwgbyA9IHQpIDogKG4gPT0gbnVsbCB8fCBpIDwgbiB8fCBhKSAmJiAobiA9IGksIG8gPSB0LCBhICYmIChzID0gITApKTtcbiAgV3QoZSwgbyB8fCB0KTtcbn1cbmZ1bmN0aW9uIEpZKGUpIHtcbiAgaWYgKCFlLl9kKSB7XG4gICAgdmFyIHQgPSB0cyhlLl9pKSwgbyA9IHQuZGF5ID09PSB2b2lkIDAgPyB0LmRhdGUgOiB0LmRheTtcbiAgICBlLl9hID0gSGIoXG4gICAgICBbdC55ZWFyLCB0Lm1vbnRoLCBvLCB0LmhvdXIsIHQubWludXRlLCB0LnNlY29uZCwgdC5taWxsaXNlY29uZF0sXG4gICAgICBmdW5jdGlvbihuKSB7XG4gICAgICAgIHJldHVybiBuICYmIHBhcnNlSW50KG4sIDEwKTtcbiAgICAgIH1cbiAgICApLCBkcyhlKTtcbiAgfVxufVxuZnVuY3Rpb24gX1koZSkge1xuICB2YXIgdCA9IG5ldyBZcihwcyhzTShlKSkpO1xuICByZXR1cm4gdC5fbmV4dERheSAmJiAodC5hZGQoMSwgXCJkXCIpLCB0Ll9uZXh0RGF5ID0gdm9pZCAwKSwgdDtcbn1cbmZ1bmN0aW9uIHNNKGUpIHtcbiAgdmFyIHQgPSBlLl9pLCBvID0gZS5fZjtcbiAgcmV0dXJuIGUuX2xvY2FsZSA9IGUuX2xvY2FsZSB8fCB6dChlLl9sKSwgdCA9PT0gbnVsbCB8fCBvID09PSB2b2lkIDAgJiYgdCA9PT0gXCJcIiA/IG5pKHsgbnVsbElucHV0OiAhMCB9KSA6ICh0eXBlb2YgdCA9PSBcInN0cmluZ1wiICYmIChlLl9pID0gdCA9IGUuX2xvY2FsZS5wcmVwYXJzZSh0KSksIHllKHQpID8gbmV3IFlyKHBzKHQpKSA6IChVcih0KSA/IGUuX2QgPSB0IDogcWUobykgPyBLWShlKSA6IG8gPyBicyhlKSA6ICRZKGUpLCBKNihlKSB8fCAoZS5fZCA9IG51bGwpLCBlKSk7XG59XG5mdW5jdGlvbiAkWShlKSB7XG4gIHZhciB0ID0gZS5faTtcbiAgVDIodCkgPyBlLl9kID0gbmV3IERhdGUoJDEubm93KCkpIDogVXIodCkgPyBlLl9kID0gbmV3IERhdGUodC52YWx1ZU9mKCkpIDogdHlwZW9mIHQgPT0gXCJzdHJpbmdcIiA/IEdZKGUpIDogcWUodCkgPyAoZS5fYSA9IEhiKHQuc2xpY2UoMCksIGZ1bmN0aW9uKG8pIHtcbiAgICByZXR1cm4gcGFyc2VJbnQobywgMTApO1xuICB9KSwgZHMoZSkpIDogcDModCkgPyBKWShlKSA6IE10KHQpID8gZS5fZCA9IG5ldyBEYXRlKHQpIDogJDEuY3JlYXRlRnJvbUlucHV0RmFsbGJhY2soZSk7XG59XG5mdW5jdGlvbiBjTShlLCB0LCBvLCBuLCByKSB7XG4gIHZhciBpID0ge307XG4gIHJldHVybiAodCA9PT0gITAgfHwgdCA9PT0gITEpICYmIChuID0gdCwgdCA9IHZvaWQgMCksIChvID09PSAhMCB8fCBvID09PSAhMSkgJiYgKG4gPSBvLCBvID0gdm9pZCAwKSwgKHAzKGUpICYmIEs2KGUpIHx8IHFlKGUpICYmIGUubGVuZ3RoID09PSAwKSAmJiAoZSA9IHZvaWQgMCksIGkuX2lzQU1vbWVudE9iamVjdCA9ICEwLCBpLl91c2VVVEMgPSBpLl9pc1VUQyA9IHIsIGkuX2wgPSBvLCBpLl9pID0gZSwgaS5fZiA9IHQsIGkuX3N0cmljdCA9IG4sIF9ZKGkpO1xufVxuZnVuY3Rpb24gSzAoZSwgdCwgbywgbikge1xuICByZXR1cm4gY00oZSwgdCwgbywgbiwgITEpO1xufVxudmFyIGVHID0gdWUoXG4gIFwibW9tZW50KCkubWluIGlzIGRlcHJlY2F0ZWQsIHVzZSBtb21lbnQubWF4IGluc3RlYWQuIGh0dHA6Ly9tb21lbnRqcy5jb20vZ3VpZGVzLyMvd2FybmluZ3MvbWluLW1heC9cIixcbiAgZnVuY3Rpb24oKSB7XG4gICAgdmFyIGUgPSBLMC5hcHBseShudWxsLCBhcmd1bWVudHMpO1xuICAgIHJldHVybiB0aGlzLmlzVmFsaWQoKSAmJiBlLmlzVmFsaWQoKSA/IGUgPCB0aGlzID8gdGhpcyA6IGUgOiBuaSgpO1xuICB9XG4pLCB0RyA9IHVlKFxuICBcIm1vbWVudCgpLm1heCBpcyBkZXByZWNhdGVkLCB1c2UgbW9tZW50Lm1pbiBpbnN0ZWFkLiBodHRwOi8vbW9tZW50anMuY29tL2d1aWRlcy8jL3dhcm5pbmdzL21pbi1tYXgvXCIsXG4gIGZ1bmN0aW9uKCkge1xuICAgIHZhciBlID0gSzAuYXBwbHkobnVsbCwgYXJndW1lbnRzKTtcbiAgICByZXR1cm4gdGhpcy5pc1ZhbGlkKCkgJiYgZS5pc1ZhbGlkKCkgPyBlID4gdGhpcyA/IHRoaXMgOiBlIDogbmkoKTtcbiAgfVxuKTtcbmZ1bmN0aW9uIGxNKGUsIHQpIHtcbiAgdmFyIG8sIG47XG4gIGlmICh0Lmxlbmd0aCA9PT0gMSAmJiBxZSh0WzBdKSAmJiAodCA9IHRbMF0pLCAhdC5sZW5ndGgpXG4gICAgcmV0dXJuIEswKCk7XG4gIGZvciAobyA9IHRbMF0sIG4gPSAxOyBuIDwgdC5sZW5ndGg7ICsrbilcbiAgICAoIXRbbl0uaXNWYWxpZCgpIHx8IHRbbl1bZV0obykpICYmIChvID0gdFtuXSk7XG4gIHJldHVybiBvO1xufVxuZnVuY3Rpb24gb0coKSB7XG4gIHZhciBlID0gW10uc2xpY2UuY2FsbChhcmd1bWVudHMsIDApO1xuICByZXR1cm4gbE0oXCJpc0JlZm9yZVwiLCBlKTtcbn1cbmZ1bmN0aW9uIHJHKCkge1xuICB2YXIgZSA9IFtdLnNsaWNlLmNhbGwoYXJndW1lbnRzLCAwKTtcbiAgcmV0dXJuIGxNKFwiaXNBZnRlclwiLCBlKTtcbn1cbnZhciBuRyA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4gRGF0ZS5ub3cgPyBEYXRlLm5vdygpIDogKy8qIEBfX1BVUkVfXyAqLyBuZXcgRGF0ZSgpO1xufSwgSG8gPSBbXG4gIFwieWVhclwiLFxuICBcInF1YXJ0ZXJcIixcbiAgXCJtb250aFwiLFxuICBcIndlZWtcIixcbiAgXCJkYXlcIixcbiAgXCJob3VyXCIsXG4gIFwibWludXRlXCIsXG4gIFwic2Vjb25kXCIsXG4gIFwibWlsbGlzZWNvbmRcIlxuXTtcbmZ1bmN0aW9uIGlHKGUpIHtcbiAgdmFyIHQsIG8gPSAhMSwgbiwgciA9IEhvLmxlbmd0aDtcbiAgZm9yICh0IGluIGUpXG4gICAgaWYgKGswKGUsIHQpICYmICEoczIuY2FsbChIbywgdCkgIT09IC0xICYmIChlW3RdID09IG51bGwgfHwgIWlzTmFOKGVbdF0pKSkpXG4gICAgICByZXR1cm4gITE7XG4gIGZvciAobiA9IDA7IG4gPCByOyArK24pXG4gICAgaWYgKGVbSG9bbl1dKSB7XG4gICAgICBpZiAobylcbiAgICAgICAgcmV0dXJuICExO1xuICAgICAgcGFyc2VGbG9hdChlW0hvW25dXSkgIT09IHEwKGVbSG9bbl1dKSAmJiAobyA9ICEwKTtcbiAgICB9XG4gIHJldHVybiAhMDtcbn1cbmZ1bmN0aW9uIGFHKCkge1xuICByZXR1cm4gdGhpcy5faXNWYWxpZDtcbn1cbmZ1bmN0aW9uIHNHKCkge1xuICByZXR1cm4gd2UoTmFOKTtcbn1cbmZ1bmN0aW9uIGJpKGUpIHtcbiAgdmFyIHQgPSB0cyhlKSwgbyA9IHQueWVhciB8fCAwLCBuID0gdC5xdWFydGVyIHx8IDAsIHIgPSB0Lm1vbnRoIHx8IDAsIGkgPSB0LndlZWsgfHwgdC5pc29XZWVrIHx8IDAsIGEgPSB0LmRheSB8fCAwLCBzID0gdC5ob3VyIHx8IDAsIGwgPSB0Lm1pbnV0ZSB8fCAwLCBwID0gdC5zZWNvbmQgfHwgMCwgZCA9IHQubWlsbGlzZWNvbmQgfHwgMDtcbiAgdGhpcy5faXNWYWxpZCA9IGlHKHQpLCB0aGlzLl9taWxsaXNlY29uZHMgPSArZCArIHAgKiAxZTMgKyAvLyAxMDAwXG4gIGwgKiA2ZTQgKyAvLyAxMDAwICogNjBcbiAgcyAqIDFlMyAqIDYwICogNjAsIHRoaXMuX2RheXMgPSArYSArIGkgKiA3LCB0aGlzLl9tb250aHMgPSArciArIG4gKiAzICsgbyAqIDEyLCB0aGlzLl9kYXRhID0ge30sIHRoaXMuX2xvY2FsZSA9IHp0KCksIHRoaXMuX2J1YmJsZSgpO1xufVxuZnVuY3Rpb24gSm4oZSkge1xuICByZXR1cm4gZSBpbnN0YW5jZW9mIGJpO1xufVxuZnVuY3Rpb24geDUoZSkge1xuICByZXR1cm4gZSA8IDAgPyBNYXRoLnJvdW5kKC0xICogZSkgKiAtMSA6IE1hdGgucm91bmQoZSk7XG59XG5mdW5jdGlvbiBjRyhlLCB0LCBvKSB7XG4gIHZhciBuID0gTWF0aC5taW4oZS5sZW5ndGgsIHQubGVuZ3RoKSwgciA9IE1hdGguYWJzKGUubGVuZ3RoIC0gdC5sZW5ndGgpLCBpID0gMCwgYTtcbiAgZm9yIChhID0gMDsgYSA8IG47IGErKylcbiAgICAobyAmJiBlW2FdICE9PSB0W2FdIHx8ICFvICYmIHEwKGVbYV0pICE9PSBxMCh0W2FdKSkgJiYgaSsrO1xuICByZXR1cm4gaSArIHI7XG59XG5mdW5jdGlvbiBwTShlLCB0KSB7XG4gIGQwKGUsIDAsIDAsIGZ1bmN0aW9uKCkge1xuICAgIHZhciBvID0gdGhpcy51dGNPZmZzZXQoKSwgbiA9IFwiK1wiO1xuICAgIHJldHVybiBvIDwgMCAmJiAobyA9IC1vLCBuID0gXCItXCIpLCBuICsgR2Uofn4obyAvIDYwKSwgMikgKyB0ICsgR2Uofn5vICUgNjAsIDIpO1xuICB9KTtcbn1cbnBNKFwiWlwiLCBcIjpcIik7XG5wTShcIlpaXCIsIFwiXCIpO1xucjAoXCJaXCIsIGxpKTtcbnIwKFwiWlpcIiwgbGkpO1xuWTAoW1wiWlwiLCBcIlpaXCJdLCBmdW5jdGlvbihlLCB0LCBvKSB7XG4gIG8uX3VzZVVUQyA9ICEwLCBvLl90em0gPSBNcyhsaSwgZSk7XG59KTtcbnZhciBsRyA9IC8oW1xcK1xcLV18XFxkXFxkKS9naTtcbmZ1bmN0aW9uIE1zKGUsIHQpIHtcbiAgdmFyIG8gPSAodCB8fCBcIlwiKS5tYXRjaChlKSwgbiwgciwgaTtcbiAgcmV0dXJuIG8gPT09IG51bGwgPyBudWxsIDogKG4gPSBvW28ubGVuZ3RoIC0gMV0gfHwgW10sIHIgPSAobiArIFwiXCIpLm1hdGNoKGxHKSB8fCBbXCItXCIsIDAsIDBdLCBpID0gKyhyWzFdICogNjApICsgcTAoclsyXSksIGkgPT09IDAgPyAwIDogclswXSA9PT0gXCIrXCIgPyBpIDogLWkpO1xufVxuZnVuY3Rpb24gQXMoZSwgdCkge1xuICB2YXIgbywgbjtcbiAgcmV0dXJuIHQuX2lzVVRDID8gKG8gPSB0LmNsb25lKCksIG4gPSAoeWUoZSkgfHwgVXIoZSkgPyBlLnZhbHVlT2YoKSA6IEswKGUpLnZhbHVlT2YoKSkgLSBvLnZhbHVlT2YoKSwgby5fZC5zZXRUaW1lKG8uX2QudmFsdWVPZigpICsgbiksICQxLnVwZGF0ZU9mZnNldChvLCAhMSksIG8pIDogSzAoZSkubG9jYWwoKTtcbn1cbmZ1bmN0aW9uIFc1KGUpIHtcbiAgcmV0dXJuIC1NYXRoLnJvdW5kKGUuX2QuZ2V0VGltZXpvbmVPZmZzZXQoKSk7XG59XG4kMS51cGRhdGVPZmZzZXQgPSBmdW5jdGlvbigpIHtcbn07XG5mdW5jdGlvbiBwRyhlLCB0LCBvKSB7XG4gIHZhciBuID0gdGhpcy5fb2Zmc2V0IHx8IDAsIHI7XG4gIGlmICghdGhpcy5pc1ZhbGlkKCkpXG4gICAgcmV0dXJuIGUgIT0gbnVsbCA/IHRoaXMgOiBOYU47XG4gIGlmIChlICE9IG51bGwpIHtcbiAgICBpZiAodHlwZW9mIGUgPT0gXCJzdHJpbmdcIikge1xuICAgICAgaWYgKGUgPSBNcyhsaSwgZSksIGUgPT09IG51bGwpXG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH0gZWxzZVxuICAgICAgTWF0aC5hYnMoZSkgPCAxNiAmJiAhbyAmJiAoZSA9IGUgKiA2MCk7XG4gICAgcmV0dXJuICF0aGlzLl9pc1VUQyAmJiB0ICYmIChyID0gVzUodGhpcykpLCB0aGlzLl9vZmZzZXQgPSBlLCB0aGlzLl9pc1VUQyA9ICEwLCByICE9IG51bGwgJiYgdGhpcy5hZGQociwgXCJtXCIpLCBuICE9PSBlICYmICghdCB8fCB0aGlzLl9jaGFuZ2VJblByb2dyZXNzID8gTU0oXG4gICAgICB0aGlzLFxuICAgICAgd2UoZSAtIG4sIFwibVwiKSxcbiAgICAgIDEsXG4gICAgICAhMVxuICAgICkgOiB0aGlzLl9jaGFuZ2VJblByb2dyZXNzIHx8ICh0aGlzLl9jaGFuZ2VJblByb2dyZXNzID0gITAsICQxLnVwZGF0ZU9mZnNldCh0aGlzLCAhMCksIHRoaXMuX2NoYW5nZUluUHJvZ3Jlc3MgPSBudWxsKSksIHRoaXM7XG4gIH0gZWxzZVxuICAgIHJldHVybiB0aGlzLl9pc1VUQyA/IG4gOiBXNSh0aGlzKTtcbn1cbmZ1bmN0aW9uIGRHKGUsIHQpIHtcbiAgcmV0dXJuIGUgIT0gbnVsbCA/ICh0eXBlb2YgZSAhPSBcInN0cmluZ1wiICYmIChlID0gLWUpLCB0aGlzLnV0Y09mZnNldChlLCB0KSwgdGhpcykgOiAtdGhpcy51dGNPZmZzZXQoKTtcbn1cbmZ1bmN0aW9uIGJHKGUpIHtcbiAgcmV0dXJuIHRoaXMudXRjT2Zmc2V0KDAsIGUpO1xufVxuZnVuY3Rpb24gTUcoZSkge1xuICByZXR1cm4gdGhpcy5faXNVVEMgJiYgKHRoaXMudXRjT2Zmc2V0KDAsIGUpLCB0aGlzLl9pc1VUQyA9ICExLCBlICYmIHRoaXMuc3VidHJhY3QoVzUodGhpcyksIFwibVwiKSksIHRoaXM7XG59XG5mdW5jdGlvbiBBRygpIHtcbiAgaWYgKHRoaXMuX3R6bSAhPSBudWxsKVxuICAgIHRoaXMudXRjT2Zmc2V0KHRoaXMuX3R6bSwgITEsICEwKTtcbiAgZWxzZSBpZiAodHlwZW9mIHRoaXMuX2kgPT0gXCJzdHJpbmdcIikge1xuICAgIHZhciBlID0gTXMoRVUsIHRoaXMuX2kpO1xuICAgIGUgIT0gbnVsbCA/IHRoaXMudXRjT2Zmc2V0KGUpIDogdGhpcy51dGNPZmZzZXQoMCwgITApO1xuICB9XG4gIHJldHVybiB0aGlzO1xufVxuZnVuY3Rpb24gdUcoZSkge1xuICByZXR1cm4gdGhpcy5pc1ZhbGlkKCkgPyAoZSA9IGUgPyBLMChlKS51dGNPZmZzZXQoKSA6IDAsICh0aGlzLnV0Y09mZnNldCgpIC0gZSkgJSA2MCA9PT0gMCkgOiAhMTtcbn1cbmZ1bmN0aW9uIHpHKCkge1xuICByZXR1cm4gdGhpcy51dGNPZmZzZXQoKSA+IHRoaXMuY2xvbmUoKS5tb250aCgwKS51dGNPZmZzZXQoKSB8fCB0aGlzLnV0Y09mZnNldCgpID4gdGhpcy5jbG9uZSgpLm1vbnRoKDUpLnV0Y09mZnNldCgpO1xufVxuZnVuY3Rpb24gaEcoKSB7XG4gIGlmICghVDIodGhpcy5faXNEU1RTaGlmdGVkKSlcbiAgICByZXR1cm4gdGhpcy5faXNEU1RTaGlmdGVkO1xuICB2YXIgZSA9IHt9LCB0O1xuICByZXR1cm4gXzYoZSwgdGhpcyksIGUgPSBzTShlKSwgZS5fYSA/ICh0ID0gZS5faXNVVEMgPyBRZShlLl9hKSA6IEswKGUuX2EpLCB0aGlzLl9pc0RTVFNoaWZ0ZWQgPSB0aGlzLmlzVmFsaWQoKSAmJiBjRyhlLl9hLCB0LnRvQXJyYXkoKSkgPiAwKSA6IHRoaXMuX2lzRFNUU2hpZnRlZCA9ICExLCB0aGlzLl9pc0RTVFNoaWZ0ZWQ7XG59XG5mdW5jdGlvbiBPRygpIHtcbiAgcmV0dXJuIHRoaXMuaXNWYWxpZCgpID8gIXRoaXMuX2lzVVRDIDogITE7XG59XG5mdW5jdGlvbiBmRygpIHtcbiAgcmV0dXJuIHRoaXMuaXNWYWxpZCgpID8gdGhpcy5faXNVVEMgOiAhMTtcbn1cbmZ1bmN0aW9uIGRNKCkge1xuICByZXR1cm4gdGhpcy5pc1ZhbGlkKCkgPyB0aGlzLl9pc1VUQyAmJiB0aGlzLl9vZmZzZXQgPT09IDAgOiAhMTtcbn1cbnZhciBnRyA9IC9eKC18XFwrKT8oPzooXFxkKilbLiBdKT8oXFxkKyk6KFxcZCspKD86OihcXGQrKShcXC5cXGQqKT8pPyQvLCBDRyA9IC9eKC18XFwrKT9QKD86KFstK10/WzAtOSwuXSopWSk/KD86KFstK10/WzAtOSwuXSopTSk/KD86KFstK10/WzAtOSwuXSopVyk/KD86KFstK10/WzAtOSwuXSopRCk/KD86VCg/OihbLStdP1swLTksLl0qKUgpPyg/OihbLStdP1swLTksLl0qKU0pPyg/OihbLStdP1swLTksLl0qKVMpPyk/JC87XG5mdW5jdGlvbiB3ZShlLCB0KSB7XG4gIHZhciBvID0gZSwgbiA9IG51bGwsIHIsIGksIGE7XG4gIHJldHVybiBKbihlKSA/IG8gPSB7XG4gICAgbXM6IGUuX21pbGxpc2Vjb25kcyxcbiAgICBkOiBlLl9kYXlzLFxuICAgIE06IGUuX21vbnRoc1xuICB9IDogTXQoZSkgfHwgIWlzTmFOKCtlKSA/IChvID0ge30sIHQgPyBvW3RdID0gK2UgOiBvLm1pbGxpc2Vjb25kcyA9ICtlKSA6IChuID0gZ0cuZXhlYyhlKSkgPyAociA9IG5bMV0gPT09IFwiLVwiID8gLTEgOiAxLCBvID0ge1xuICAgIHk6IDAsXG4gICAgZDogcTAobltUZV0pICogcixcbiAgICBoOiBxMChuW00yXSkgKiByLFxuICAgIG06IHEwKG5bbWVdKSAqIHIsXG4gICAgczogcTAobltzdF0pICogcixcbiAgICBtczogcTAoeDUoblthM10gKiAxZTMpKSAqIHJcbiAgICAvLyB0aGUgbWlsbGlzZWNvbmQgZGVjaW1hbCBwb2ludCBpcyBpbmNsdWRlZCBpbiB0aGUgbWF0Y2hcbiAgfSkgOiAobiA9IENHLmV4ZWMoZSkpID8gKHIgPSBuWzFdID09PSBcIi1cIiA/IC0xIDogMSwgbyA9IHtcbiAgICB5OiBLdChuWzJdLCByKSxcbiAgICBNOiBLdChuWzNdLCByKSxcbiAgICB3OiBLdChuWzRdLCByKSxcbiAgICBkOiBLdChuWzVdLCByKSxcbiAgICBoOiBLdChuWzZdLCByKSxcbiAgICBtOiBLdChuWzddLCByKSxcbiAgICBzOiBLdChuWzhdLCByKVxuICB9KSA6IG8gPT0gbnVsbCA/IG8gPSB7fSA6IHR5cGVvZiBvID09IFwib2JqZWN0XCIgJiYgKFwiZnJvbVwiIGluIG8gfHwgXCJ0b1wiIGluIG8pICYmIChhID0gbUcoXG4gICAgSzAoby5mcm9tKSxcbiAgICBLMChvLnRvKVxuICApLCBvID0ge30sIG8ubXMgPSBhLm1pbGxpc2Vjb25kcywgby5NID0gYS5tb250aHMpLCBpID0gbmV3IGJpKG8pLCBKbihlKSAmJiBrMChlLCBcIl9sb2NhbGVcIikgJiYgKGkuX2xvY2FsZSA9IGUuX2xvY2FsZSksIEpuKGUpICYmIGswKGUsIFwiX2lzVmFsaWRcIikgJiYgKGkuX2lzVmFsaWQgPSBlLl9pc1ZhbGlkKSwgaTtcbn1cbndlLmZuID0gYmkucHJvdG90eXBlO1xud2UuaW52YWxpZCA9IHNHO1xuZnVuY3Rpb24gS3QoZSwgdCkge1xuICB2YXIgbyA9IGUgJiYgcGFyc2VGbG9hdChlLnJlcGxhY2UoXCIsXCIsIFwiLlwiKSk7XG4gIHJldHVybiAoaXNOYU4obykgPyAwIDogbykgKiB0O1xufVxuZnVuY3Rpb24gd2MoZSwgdCkge1xuICB2YXIgbyA9IHt9O1xuICByZXR1cm4gby5tb250aHMgPSB0Lm1vbnRoKCkgLSBlLm1vbnRoKCkgKyAodC55ZWFyKCkgLSBlLnllYXIoKSkgKiAxMiwgZS5jbG9uZSgpLmFkZChvLm1vbnRocywgXCJNXCIpLmlzQWZ0ZXIodCkgJiYgLS1vLm1vbnRocywgby5taWxsaXNlY29uZHMgPSArdCAtICtlLmNsb25lKCkuYWRkKG8ubW9udGhzLCBcIk1cIiksIG87XG59XG5mdW5jdGlvbiBtRyhlLCB0KSB7XG4gIHZhciBvO1xuICByZXR1cm4gZS5pc1ZhbGlkKCkgJiYgdC5pc1ZhbGlkKCkgPyAodCA9IEFzKHQsIGUpLCBlLmlzQmVmb3JlKHQpID8gbyA9IHdjKGUsIHQpIDogKG8gPSB3Yyh0LCBlKSwgby5taWxsaXNlY29uZHMgPSAtby5taWxsaXNlY29uZHMsIG8ubW9udGhzID0gLW8ubW9udGhzKSwgbykgOiB7IG1pbGxpc2Vjb25kczogMCwgbW9udGhzOiAwIH07XG59XG5mdW5jdGlvbiBiTShlLCB0KSB7XG4gIHJldHVybiBmdW5jdGlvbihvLCBuKSB7XG4gICAgdmFyIHIsIGk7XG4gICAgcmV0dXJuIG4gIT09IG51bGwgJiYgIWlzTmFOKCtuKSAmJiAoUGIoXG4gICAgICB0LFxuICAgICAgXCJtb21lbnQoKS5cIiArIHQgKyBcIihwZXJpb2QsIG51bWJlcikgaXMgZGVwcmVjYXRlZC4gUGxlYXNlIHVzZSBtb21lbnQoKS5cIiArIHQgKyBcIihudW1iZXIsIHBlcmlvZCkuIFNlZSBodHRwOi8vbW9tZW50anMuY29tL2d1aWRlcy8jL3dhcm5pbmdzL2FkZC1pbnZlcnRlZC1wYXJhbS8gZm9yIG1vcmUgaW5mby5cIlxuICAgICksIGkgPSBvLCBvID0gbiwgbiA9IGkpLCByID0gd2UobywgbiksIE1NKHRoaXMsIHIsIGUpLCB0aGlzO1xuICB9O1xufVxuZnVuY3Rpb24gTU0oZSwgdCwgbywgbikge1xuICB2YXIgciA9IHQuX21pbGxpc2Vjb25kcywgaSA9IHg1KHQuX2RheXMpLCBhID0geDUodC5fbW9udGhzKTtcbiAgZS5pc1ZhbGlkKCkgJiYgKG4gPSBuID8/ICEwLCBhICYmIEpiKGUsIHFyKGUsIFwiTW9udGhcIikgKyBhICogbyksIGkgJiYgWmIoZSwgXCJEYXRlXCIsIHFyKGUsIFwiRGF0ZVwiKSArIGkgKiBvKSwgciAmJiBlLl9kLnNldFRpbWUoZS5fZC52YWx1ZU9mKCkgKyByICogbyksIG4gJiYgJDEudXBkYXRlT2Zmc2V0KGUsIGkgfHwgYSkpO1xufVxudmFyIExHID0gYk0oMSwgXCJhZGRcIiksIHZHID0gYk0oLTEsIFwic3VidHJhY3RcIik7XG5mdW5jdGlvbiBBTShlKSB7XG4gIHJldHVybiB0eXBlb2YgZSA9PSBcInN0cmluZ1wiIHx8IGUgaW5zdGFuY2VvZiBTdHJpbmc7XG59XG5mdW5jdGlvbiBxRyhlKSB7XG4gIHJldHVybiB5ZShlKSB8fCBVcihlKSB8fCBBTShlKSB8fCBNdChlKSB8fCB3RyhlKSB8fCB5RyhlKSB8fCBlID09PSBudWxsIHx8IGUgPT09IHZvaWQgMDtcbn1cbmZ1bmN0aW9uIHlHKGUpIHtcbiAgdmFyIHQgPSBwMyhlKSAmJiAhSzYoZSksIG8gPSAhMSwgbiA9IFtcbiAgICBcInllYXJzXCIsXG4gICAgXCJ5ZWFyXCIsXG4gICAgXCJ5XCIsXG4gICAgXCJtb250aHNcIixcbiAgICBcIm1vbnRoXCIsXG4gICAgXCJNXCIsXG4gICAgXCJkYXlzXCIsXG4gICAgXCJkYXlcIixcbiAgICBcImRcIixcbiAgICBcImRhdGVzXCIsXG4gICAgXCJkYXRlXCIsXG4gICAgXCJEXCIsXG4gICAgXCJob3Vyc1wiLFxuICAgIFwiaG91clwiLFxuICAgIFwiaFwiLFxuICAgIFwibWludXRlc1wiLFxuICAgIFwibWludXRlXCIsXG4gICAgXCJtXCIsXG4gICAgXCJzZWNvbmRzXCIsXG4gICAgXCJzZWNvbmRcIixcbiAgICBcInNcIixcbiAgICBcIm1pbGxpc2Vjb25kc1wiLFxuICAgIFwibWlsbGlzZWNvbmRcIixcbiAgICBcIm1zXCJcbiAgXSwgciwgaSwgYSA9IG4ubGVuZ3RoO1xuICBmb3IgKHIgPSAwOyByIDwgYTsgciArPSAxKVxuICAgIGkgPSBuW3JdLCBvID0gbyB8fCBrMChlLCBpKTtcbiAgcmV0dXJuIHQgJiYgbztcbn1cbmZ1bmN0aW9uIHdHKGUpIHtcbiAgdmFyIHQgPSBxZShlKSwgbyA9ICExO1xuICByZXR1cm4gdCAmJiAobyA9IGUuZmlsdGVyKGZ1bmN0aW9uKG4pIHtcbiAgICByZXR1cm4gIU10KG4pICYmIEFNKGUpO1xuICB9KS5sZW5ndGggPT09IDApLCB0ICYmIG87XG59XG5mdW5jdGlvbiB4RyhlKSB7XG4gIHZhciB0ID0gcDMoZSkgJiYgIUs2KGUpLCBvID0gITEsIG4gPSBbXG4gICAgXCJzYW1lRGF5XCIsXG4gICAgXCJuZXh0RGF5XCIsXG4gICAgXCJsYXN0RGF5XCIsXG4gICAgXCJuZXh0V2Vla1wiLFxuICAgIFwibGFzdFdlZWtcIixcbiAgICBcInNhbWVFbHNlXCJcbiAgXSwgciwgaTtcbiAgZm9yIChyID0gMDsgciA8IG4ubGVuZ3RoOyByICs9IDEpXG4gICAgaSA9IG5bcl0sIG8gPSBvIHx8IGswKGUsIGkpO1xuICByZXR1cm4gdCAmJiBvO1xufVxuZnVuY3Rpb24gV0coZSwgdCkge1xuICB2YXIgbyA9IGUuZGlmZih0LCBcImRheXNcIiwgITApO1xuICByZXR1cm4gbyA8IC02ID8gXCJzYW1lRWxzZVwiIDogbyA8IC0xID8gXCJsYXN0V2Vla1wiIDogbyA8IDAgPyBcImxhc3REYXlcIiA6IG8gPCAxID8gXCJzYW1lRGF5XCIgOiBvIDwgMiA/IFwibmV4dERheVwiIDogbyA8IDcgPyBcIm5leHRXZWVrXCIgOiBcInNhbWVFbHNlXCI7XG59XG5mdW5jdGlvbiBSRyhlLCB0KSB7XG4gIGFyZ3VtZW50cy5sZW5ndGggPT09IDEgJiYgKGFyZ3VtZW50c1swXSA/IHFHKGFyZ3VtZW50c1swXSkgPyAoZSA9IGFyZ3VtZW50c1swXSwgdCA9IHZvaWQgMCkgOiB4Ryhhcmd1bWVudHNbMF0pICYmICh0ID0gYXJndW1lbnRzWzBdLCBlID0gdm9pZCAwKSA6IChlID0gdm9pZCAwLCB0ID0gdm9pZCAwKSk7XG4gIHZhciBvID0gZSB8fCBLMCgpLCBuID0gQXMobywgdGhpcykuc3RhcnRPZihcImRheVwiKSwgciA9ICQxLmNhbGVuZGFyRm9ybWF0KHRoaXMsIG4pIHx8IFwic2FtZUVsc2VcIiwgaSA9IHQgJiYgKFplKHRbcl0pID8gdFtyXS5jYWxsKHRoaXMsIG8pIDogdFtyXSk7XG4gIHJldHVybiB0aGlzLmZvcm1hdChcbiAgICBpIHx8IHRoaXMubG9jYWxlRGF0YSgpLmNhbGVuZGFyKHIsIHRoaXMsIEswKG8pKVxuICApO1xufVxuZnVuY3Rpb24gQkcoKSB7XG4gIHJldHVybiBuZXcgWXIodGhpcyk7XG59XG5mdW5jdGlvbiBTRyhlLCB0KSB7XG4gIHZhciBvID0geWUoZSkgPyBlIDogSzAoZSk7XG4gIHJldHVybiB0aGlzLmlzVmFsaWQoKSAmJiBvLmlzVmFsaWQoKSA/ICh0ID0gemUodCkgfHwgXCJtaWxsaXNlY29uZFwiLCB0ID09PSBcIm1pbGxpc2Vjb25kXCIgPyB0aGlzLnZhbHVlT2YoKSA+IG8udmFsdWVPZigpIDogby52YWx1ZU9mKCkgPCB0aGlzLmNsb25lKCkuc3RhcnRPZih0KS52YWx1ZU9mKCkpIDogITE7XG59XG5mdW5jdGlvbiBFRyhlLCB0KSB7XG4gIHZhciBvID0geWUoZSkgPyBlIDogSzAoZSk7XG4gIHJldHVybiB0aGlzLmlzVmFsaWQoKSAmJiBvLmlzVmFsaWQoKSA/ICh0ID0gemUodCkgfHwgXCJtaWxsaXNlY29uZFwiLCB0ID09PSBcIm1pbGxpc2Vjb25kXCIgPyB0aGlzLnZhbHVlT2YoKSA8IG8udmFsdWVPZigpIDogdGhpcy5jbG9uZSgpLmVuZE9mKHQpLnZhbHVlT2YoKSA8IG8udmFsdWVPZigpKSA6ICExO1xufVxuZnVuY3Rpb24ga0coZSwgdCwgbywgbikge1xuICB2YXIgciA9IHllKGUpID8gZSA6IEswKGUpLCBpID0geWUodCkgPyB0IDogSzAodCk7XG4gIHJldHVybiB0aGlzLmlzVmFsaWQoKSAmJiByLmlzVmFsaWQoKSAmJiBpLmlzVmFsaWQoKSA/IChuID0gbiB8fCBcIigpXCIsIChuWzBdID09PSBcIihcIiA/IHRoaXMuaXNBZnRlcihyLCBvKSA6ICF0aGlzLmlzQmVmb3JlKHIsIG8pKSAmJiAoblsxXSA9PT0gXCIpXCIgPyB0aGlzLmlzQmVmb3JlKGksIG8pIDogIXRoaXMuaXNBZnRlcihpLCBvKSkpIDogITE7XG59XG5mdW5jdGlvbiBORyhlLCB0KSB7XG4gIHZhciBvID0geWUoZSkgPyBlIDogSzAoZSksIG47XG4gIHJldHVybiB0aGlzLmlzVmFsaWQoKSAmJiBvLmlzVmFsaWQoKSA/ICh0ID0gemUodCkgfHwgXCJtaWxsaXNlY29uZFwiLCB0ID09PSBcIm1pbGxpc2Vjb25kXCIgPyB0aGlzLnZhbHVlT2YoKSA9PT0gby52YWx1ZU9mKCkgOiAobiA9IG8udmFsdWVPZigpLCB0aGlzLmNsb25lKCkuc3RhcnRPZih0KS52YWx1ZU9mKCkgPD0gbiAmJiBuIDw9IHRoaXMuY2xvbmUoKS5lbmRPZih0KS52YWx1ZU9mKCkpKSA6ICExO1xufVxuZnVuY3Rpb24gVEcoZSwgdCkge1xuICByZXR1cm4gdGhpcy5pc1NhbWUoZSwgdCkgfHwgdGhpcy5pc0FmdGVyKGUsIHQpO1xufVxuZnVuY3Rpb24gSUcoZSwgdCkge1xuICByZXR1cm4gdGhpcy5pc1NhbWUoZSwgdCkgfHwgdGhpcy5pc0JlZm9yZShlLCB0KTtcbn1cbmZ1bmN0aW9uIERHKGUsIHQsIG8pIHtcbiAgdmFyIG4sIHIsIGk7XG4gIGlmICghdGhpcy5pc1ZhbGlkKCkpXG4gICAgcmV0dXJuIE5hTjtcbiAgaWYgKG4gPSBBcyhlLCB0aGlzKSwgIW4uaXNWYWxpZCgpKVxuICAgIHJldHVybiBOYU47XG4gIHN3aXRjaCAociA9IChuLnV0Y09mZnNldCgpIC0gdGhpcy51dGNPZmZzZXQoKSkgKiA2ZTQsIHQgPSB6ZSh0KSwgdCkge1xuICAgIGNhc2UgXCJ5ZWFyXCI6XG4gICAgICBpID0gX24odGhpcywgbikgLyAxMjtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgXCJtb250aFwiOlxuICAgICAgaSA9IF9uKHRoaXMsIG4pO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSBcInF1YXJ0ZXJcIjpcbiAgICAgIGkgPSBfbih0aGlzLCBuKSAvIDM7XG4gICAgICBicmVhaztcbiAgICBjYXNlIFwic2Vjb25kXCI6XG4gICAgICBpID0gKHRoaXMgLSBuKSAvIDFlMztcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgXCJtaW51dGVcIjpcbiAgICAgIGkgPSAodGhpcyAtIG4pIC8gNmU0O1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSBcImhvdXJcIjpcbiAgICAgIGkgPSAodGhpcyAtIG4pIC8gMzZlNTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgXCJkYXlcIjpcbiAgICAgIGkgPSAodGhpcyAtIG4gLSByKSAvIDg2NGU1O1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSBcIndlZWtcIjpcbiAgICAgIGkgPSAodGhpcyAtIG4gLSByKSAvIDYwNDhlNTtcbiAgICAgIGJyZWFrO1xuICAgIGRlZmF1bHQ6XG4gICAgICBpID0gdGhpcyAtIG47XG4gIH1cbiAgcmV0dXJuIG8gPyBpIDogYWUoaSk7XG59XG5mdW5jdGlvbiBfbihlLCB0KSB7XG4gIGlmIChlLmRhdGUoKSA8IHQuZGF0ZSgpKVxuICAgIHJldHVybiAtX24odCwgZSk7XG4gIHZhciBvID0gKHQueWVhcigpIC0gZS55ZWFyKCkpICogMTIgKyAodC5tb250aCgpIC0gZS5tb250aCgpKSwgbiA9IGUuY2xvbmUoKS5hZGQobywgXCJtb250aHNcIiksIHIsIGk7XG4gIHJldHVybiB0IC0gbiA8IDAgPyAociA9IGUuY2xvbmUoKS5hZGQobyAtIDEsIFwibW9udGhzXCIpLCBpID0gKHQgLSBuKSAvIChuIC0gcikpIDogKHIgPSBlLmNsb25lKCkuYWRkKG8gKyAxLCBcIm1vbnRoc1wiKSwgaSA9ICh0IC0gbikgLyAociAtIG4pKSwgLShvICsgaSkgfHwgMDtcbn1cbiQxLmRlZmF1bHRGb3JtYXQgPSBcIllZWVktTU0tRERUSEg6bW06c3NaXCI7XG4kMS5kZWZhdWx0Rm9ybWF0VXRjID0gXCJZWVlZLU1NLUREVEhIOm1tOnNzW1pdXCI7XG5mdW5jdGlvbiBIRygpIHtcbiAgcmV0dXJuIHRoaXMuY2xvbmUoKS5sb2NhbGUoXCJlblwiKS5mb3JtYXQoXCJkZGQgTU1NIEREIFlZWVkgSEg6bW06c3MgW0dNVF1aWlwiKTtcbn1cbmZ1bmN0aW9uIFZHKGUpIHtcbiAgaWYgKCF0aGlzLmlzVmFsaWQoKSlcbiAgICByZXR1cm4gbnVsbDtcbiAgdmFyIHQgPSBlICE9PSAhMCwgbyA9IHQgPyB0aGlzLmNsb25lKCkudXRjKCkgOiB0aGlzO1xuICByZXR1cm4gby55ZWFyKCkgPCAwIHx8IG8ueWVhcigpID4gOTk5OSA/IEtuKFxuICAgIG8sXG4gICAgdCA/IFwiWVlZWVlZLU1NLUREW1RdSEg6bW06c3MuU1NTW1pdXCIgOiBcIllZWVlZWS1NTS1ERFtUXUhIOm1tOnNzLlNTU1pcIlxuICApIDogWmUoRGF0ZS5wcm90b3R5cGUudG9JU09TdHJpbmcpID8gdCA/IHRoaXMudG9EYXRlKCkudG9JU09TdHJpbmcoKSA6IG5ldyBEYXRlKHRoaXMudmFsdWVPZigpICsgdGhpcy51dGNPZmZzZXQoKSAqIDYwICogMWUzKS50b0lTT1N0cmluZygpLnJlcGxhY2UoXCJaXCIsIEtuKG8sIFwiWlwiKSkgOiBLbihcbiAgICBvLFxuICAgIHQgPyBcIllZWVktTU0tRERbVF1ISDptbTpzcy5TU1NbWl1cIiA6IFwiWVlZWS1NTS1ERFtUXUhIOm1tOnNzLlNTU1pcIlxuICApO1xufVxuZnVuY3Rpb24gUEcoKSB7XG4gIGlmICghdGhpcy5pc1ZhbGlkKCkpXG4gICAgcmV0dXJuIFwibW9tZW50LmludmFsaWQoLyogXCIgKyB0aGlzLl9pICsgXCIgKi8pXCI7XG4gIHZhciBlID0gXCJtb21lbnRcIiwgdCA9IFwiXCIsIG8sIG4sIHIsIGk7XG4gIHJldHVybiB0aGlzLmlzTG9jYWwoKSB8fCAoZSA9IHRoaXMudXRjT2Zmc2V0KCkgPT09IDAgPyBcIm1vbWVudC51dGNcIiA6IFwibW9tZW50LnBhcnNlWm9uZVwiLCB0ID0gXCJaXCIpLCBvID0gXCJbXCIgKyBlICsgJyhcIl0nLCBuID0gMCA8PSB0aGlzLnllYXIoKSAmJiB0aGlzLnllYXIoKSA8PSA5OTk5ID8gXCJZWVlZXCIgOiBcIllZWVlZWVwiLCByID0gXCItTU0tRERbVF1ISDptbTpzcy5TU1NcIiwgaSA9IHQgKyAnW1wiKV0nLCB0aGlzLmZvcm1hdChvICsgbiArIHIgKyBpKTtcbn1cbmZ1bmN0aW9uIEZHKGUpIHtcbiAgZSB8fCAoZSA9IHRoaXMuaXNVdGMoKSA/ICQxLmRlZmF1bHRGb3JtYXRVdGMgOiAkMS5kZWZhdWx0Rm9ybWF0KTtcbiAgdmFyIHQgPSBLbih0aGlzLCBlKTtcbiAgcmV0dXJuIHRoaXMubG9jYWxlRGF0YSgpLnBvc3Rmb3JtYXQodCk7XG59XG5mdW5jdGlvbiBYRyhlLCB0KSB7XG4gIHJldHVybiB0aGlzLmlzVmFsaWQoKSAmJiAoeWUoZSkgJiYgZS5pc1ZhbGlkKCkgfHwgSzAoZSkuaXNWYWxpZCgpKSA/IHdlKHsgdG86IHRoaXMsIGZyb206IGUgfSkubG9jYWxlKHRoaXMubG9jYWxlKCkpLmh1bWFuaXplKCF0KSA6IHRoaXMubG9jYWxlRGF0YSgpLmludmFsaWREYXRlKCk7XG59XG5mdW5jdGlvbiBVRyhlKSB7XG4gIHJldHVybiB0aGlzLmZyb20oSzAoKSwgZSk7XG59XG5mdW5jdGlvbiBZRyhlLCB0KSB7XG4gIHJldHVybiB0aGlzLmlzVmFsaWQoKSAmJiAoeWUoZSkgJiYgZS5pc1ZhbGlkKCkgfHwgSzAoZSkuaXNWYWxpZCgpKSA/IHdlKHsgZnJvbTogdGhpcywgdG86IGUgfSkubG9jYWxlKHRoaXMubG9jYWxlKCkpLmh1bWFuaXplKCF0KSA6IHRoaXMubG9jYWxlRGF0YSgpLmludmFsaWREYXRlKCk7XG59XG5mdW5jdGlvbiBHRyhlKSB7XG4gIHJldHVybiB0aGlzLnRvKEswKCksIGUpO1xufVxuZnVuY3Rpb24gdU0oZSkge1xuICB2YXIgdDtcbiAgcmV0dXJuIGUgPT09IHZvaWQgMCA/IHRoaXMuX2xvY2FsZS5fYWJiciA6ICh0ID0genQoZSksIHQgIT0gbnVsbCAmJiAodGhpcy5fbG9jYWxlID0gdCksIHRoaXMpO1xufVxudmFyIHpNID0gdWUoXG4gIFwibW9tZW50KCkubGFuZygpIGlzIGRlcHJlY2F0ZWQuIEluc3RlYWQsIHVzZSBtb21lbnQoKS5sb2NhbGVEYXRhKCkgdG8gZ2V0IHRoZSBsYW5ndWFnZSBjb25maWd1cmF0aW9uLiBVc2UgbW9tZW50KCkubG9jYWxlKCkgdG8gY2hhbmdlIGxhbmd1YWdlcy5cIixcbiAgZnVuY3Rpb24oZSkge1xuICAgIHJldHVybiBlID09PSB2b2lkIDAgPyB0aGlzLmxvY2FsZURhdGEoKSA6IHRoaXMubG9jYWxlKGUpO1xuICB9XG4pO1xuZnVuY3Rpb24gaE0oKSB7XG4gIHJldHVybiB0aGlzLl9sb2NhbGU7XG59XG52YXIgUzQgPSAxZTMsIEYzID0gNjAgKiBTNCwgRTQgPSA2MCAqIEYzLCBPTSA9ICgzNjUgKiA0MDAgKyA5NykgKiAyNCAqIEU0O1xuZnVuY3Rpb24gWDMoZSwgdCkge1xuICByZXR1cm4gKGUgJSB0ICsgdCkgJSB0O1xufVxuZnVuY3Rpb24gZk0oZSwgdCwgbykge1xuICByZXR1cm4gZSA8IDEwMCAmJiBlID49IDAgPyBuZXcgRGF0ZShlICsgNDAwLCB0LCBvKSAtIE9NIDogbmV3IERhdGUoZSwgdCwgbykudmFsdWVPZigpO1xufVxuZnVuY3Rpb24gZ00oZSwgdCwgbykge1xuICByZXR1cm4gZSA8IDEwMCAmJiBlID49IDAgPyBEYXRlLlVUQyhlICsgNDAwLCB0LCBvKSAtIE9NIDogRGF0ZS5VVEMoZSwgdCwgbyk7XG59XG5mdW5jdGlvbiBRRyhlKSB7XG4gIHZhciB0LCBvO1xuICBpZiAoZSA9IHplKGUpLCBlID09PSB2b2lkIDAgfHwgZSA9PT0gXCJtaWxsaXNlY29uZFwiIHx8ICF0aGlzLmlzVmFsaWQoKSlcbiAgICByZXR1cm4gdGhpcztcbiAgc3dpdGNoIChvID0gdGhpcy5faXNVVEMgPyBnTSA6IGZNLCBlKSB7XG4gICAgY2FzZSBcInllYXJcIjpcbiAgICAgIHQgPSBvKHRoaXMueWVhcigpLCAwLCAxKTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgXCJxdWFydGVyXCI6XG4gICAgICB0ID0gbyhcbiAgICAgICAgdGhpcy55ZWFyKCksXG4gICAgICAgIHRoaXMubW9udGgoKSAtIHRoaXMubW9udGgoKSAlIDMsXG4gICAgICAgIDFcbiAgICAgICk7XG4gICAgICBicmVhaztcbiAgICBjYXNlIFwibW9udGhcIjpcbiAgICAgIHQgPSBvKHRoaXMueWVhcigpLCB0aGlzLm1vbnRoKCksIDEpO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSBcIndlZWtcIjpcbiAgICAgIHQgPSBvKFxuICAgICAgICB0aGlzLnllYXIoKSxcbiAgICAgICAgdGhpcy5tb250aCgpLFxuICAgICAgICB0aGlzLmRhdGUoKSAtIHRoaXMud2Vla2RheSgpXG4gICAgICApO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSBcImlzb1dlZWtcIjpcbiAgICAgIHQgPSBvKFxuICAgICAgICB0aGlzLnllYXIoKSxcbiAgICAgICAgdGhpcy5tb250aCgpLFxuICAgICAgICB0aGlzLmRhdGUoKSAtICh0aGlzLmlzb1dlZWtkYXkoKSAtIDEpXG4gICAgICApO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSBcImRheVwiOlxuICAgIGNhc2UgXCJkYXRlXCI6XG4gICAgICB0ID0gbyh0aGlzLnllYXIoKSwgdGhpcy5tb250aCgpLCB0aGlzLmRhdGUoKSk7XG4gICAgICBicmVhaztcbiAgICBjYXNlIFwiaG91clwiOlxuICAgICAgdCA9IHRoaXMuX2QudmFsdWVPZigpLCB0IC09IFgzKFxuICAgICAgICB0ICsgKHRoaXMuX2lzVVRDID8gMCA6IHRoaXMudXRjT2Zmc2V0KCkgKiBGMyksXG4gICAgICAgIEU0XG4gICAgICApO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSBcIm1pbnV0ZVwiOlxuICAgICAgdCA9IHRoaXMuX2QudmFsdWVPZigpLCB0IC09IFgzKHQsIEYzKTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgXCJzZWNvbmRcIjpcbiAgICAgIHQgPSB0aGlzLl9kLnZhbHVlT2YoKSwgdCAtPSBYMyh0LCBTNCk7XG4gICAgICBicmVhaztcbiAgfVxuICByZXR1cm4gdGhpcy5fZC5zZXRUaW1lKHQpLCAkMS51cGRhdGVPZmZzZXQodGhpcywgITApLCB0aGlzO1xufVxuZnVuY3Rpb24gWkcoZSkge1xuICB2YXIgdCwgbztcbiAgaWYgKGUgPSB6ZShlKSwgZSA9PT0gdm9pZCAwIHx8IGUgPT09IFwibWlsbGlzZWNvbmRcIiB8fCAhdGhpcy5pc1ZhbGlkKCkpXG4gICAgcmV0dXJuIHRoaXM7XG4gIHN3aXRjaCAobyA9IHRoaXMuX2lzVVRDID8gZ00gOiBmTSwgZSkge1xuICAgIGNhc2UgXCJ5ZWFyXCI6XG4gICAgICB0ID0gbyh0aGlzLnllYXIoKSArIDEsIDAsIDEpIC0gMTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgXCJxdWFydGVyXCI6XG4gICAgICB0ID0gbyhcbiAgICAgICAgdGhpcy55ZWFyKCksXG4gICAgICAgIHRoaXMubW9udGgoKSAtIHRoaXMubW9udGgoKSAlIDMgKyAzLFxuICAgICAgICAxXG4gICAgICApIC0gMTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgXCJtb250aFwiOlxuICAgICAgdCA9IG8odGhpcy55ZWFyKCksIHRoaXMubW9udGgoKSArIDEsIDEpIC0gMTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgXCJ3ZWVrXCI6XG4gICAgICB0ID0gbyhcbiAgICAgICAgdGhpcy55ZWFyKCksXG4gICAgICAgIHRoaXMubW9udGgoKSxcbiAgICAgICAgdGhpcy5kYXRlKCkgLSB0aGlzLndlZWtkYXkoKSArIDdcbiAgICAgICkgLSAxO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSBcImlzb1dlZWtcIjpcbiAgICAgIHQgPSBvKFxuICAgICAgICB0aGlzLnllYXIoKSxcbiAgICAgICAgdGhpcy5tb250aCgpLFxuICAgICAgICB0aGlzLmRhdGUoKSAtICh0aGlzLmlzb1dlZWtkYXkoKSAtIDEpICsgN1xuICAgICAgKSAtIDE7XG4gICAgICBicmVhaztcbiAgICBjYXNlIFwiZGF5XCI6XG4gICAgY2FzZSBcImRhdGVcIjpcbiAgICAgIHQgPSBvKHRoaXMueWVhcigpLCB0aGlzLm1vbnRoKCksIHRoaXMuZGF0ZSgpICsgMSkgLSAxO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSBcImhvdXJcIjpcbiAgICAgIHQgPSB0aGlzLl9kLnZhbHVlT2YoKSwgdCArPSBFNCAtIFgzKFxuICAgICAgICB0ICsgKHRoaXMuX2lzVVRDID8gMCA6IHRoaXMudXRjT2Zmc2V0KCkgKiBGMyksXG4gICAgICAgIEU0XG4gICAgICApIC0gMTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgXCJtaW51dGVcIjpcbiAgICAgIHQgPSB0aGlzLl9kLnZhbHVlT2YoKSwgdCArPSBGMyAtIFgzKHQsIEYzKSAtIDE7XG4gICAgICBicmVhaztcbiAgICBjYXNlIFwic2Vjb25kXCI6XG4gICAgICB0ID0gdGhpcy5fZC52YWx1ZU9mKCksIHQgKz0gUzQgLSBYMyh0LCBTNCkgLSAxO1xuICAgICAgYnJlYWs7XG4gIH1cbiAgcmV0dXJuIHRoaXMuX2Quc2V0VGltZSh0KSwgJDEudXBkYXRlT2Zmc2V0KHRoaXMsICEwKSwgdGhpcztcbn1cbmZ1bmN0aW9uIGpHKCkge1xuICByZXR1cm4gdGhpcy5fZC52YWx1ZU9mKCkgLSAodGhpcy5fb2Zmc2V0IHx8IDApICogNmU0O1xufVxuZnVuY3Rpb24gS0coKSB7XG4gIHJldHVybiBNYXRoLmZsb29yKHRoaXMudmFsdWVPZigpIC8gMWUzKTtcbn1cbmZ1bmN0aW9uIEpHKCkge1xuICByZXR1cm4gbmV3IERhdGUodGhpcy52YWx1ZU9mKCkpO1xufVxuZnVuY3Rpb24gX0coKSB7XG4gIHZhciBlID0gdGhpcztcbiAgcmV0dXJuIFtcbiAgICBlLnllYXIoKSxcbiAgICBlLm1vbnRoKCksXG4gICAgZS5kYXRlKCksXG4gICAgZS5ob3VyKCksXG4gICAgZS5taW51dGUoKSxcbiAgICBlLnNlY29uZCgpLFxuICAgIGUubWlsbGlzZWNvbmQoKVxuICBdO1xufVxuZnVuY3Rpb24gJEcoKSB7XG4gIHZhciBlID0gdGhpcztcbiAgcmV0dXJuIHtcbiAgICB5ZWFyczogZS55ZWFyKCksXG4gICAgbW9udGhzOiBlLm1vbnRoKCksXG4gICAgZGF0ZTogZS5kYXRlKCksXG4gICAgaG91cnM6IGUuaG91cnMoKSxcbiAgICBtaW51dGVzOiBlLm1pbnV0ZXMoKSxcbiAgICBzZWNvbmRzOiBlLnNlY29uZHMoKSxcbiAgICBtaWxsaXNlY29uZHM6IGUubWlsbGlzZWNvbmRzKClcbiAgfTtcbn1cbmZ1bmN0aW9uIGVRKCkge1xuICByZXR1cm4gdGhpcy5pc1ZhbGlkKCkgPyB0aGlzLnRvSVNPU3RyaW5nKCkgOiBudWxsO1xufVxuZnVuY3Rpb24gdFEoKSB7XG4gIHJldHVybiBKNih0aGlzKTtcbn1cbmZ1bmN0aW9uIG9RKCkge1xuICByZXR1cm4gV3Qoe30sIEMwKHRoaXMpKTtcbn1cbmZ1bmN0aW9uIHJRKCkge1xuICByZXR1cm4gQzAodGhpcykub3ZlcmZsb3c7XG59XG5mdW5jdGlvbiBuUSgpIHtcbiAgcmV0dXJuIHtcbiAgICBpbnB1dDogdGhpcy5faSxcbiAgICBmb3JtYXQ6IHRoaXMuX2YsXG4gICAgbG9jYWxlOiB0aGlzLl9sb2NhbGUsXG4gICAgaXNVVEM6IHRoaXMuX2lzVVRDLFxuICAgIHN0cmljdDogdGhpcy5fc3RyaWN0XG4gIH07XG59XG5kMChcIk5cIiwgMCwgMCwgXCJlcmFBYmJyXCIpO1xuZDAoXCJOTlwiLCAwLCAwLCBcImVyYUFiYnJcIik7XG5kMChcIk5OTlwiLCAwLCAwLCBcImVyYUFiYnJcIik7XG5kMChcIk5OTk5cIiwgMCwgMCwgXCJlcmFOYW1lXCIpO1xuZDAoXCJOTk5OTlwiLCAwLCAwLCBcImVyYU5hcnJvd1wiKTtcbmQwKFwieVwiLCBbXCJ5XCIsIDFdLCBcInlvXCIsIFwiZXJhWWVhclwiKTtcbmQwKFwieVwiLCBbXCJ5eVwiLCAyXSwgMCwgXCJlcmFZZWFyXCIpO1xuZDAoXCJ5XCIsIFtcInl5eVwiLCAzXSwgMCwgXCJlcmFZZWFyXCIpO1xuZDAoXCJ5XCIsIFtcInl5eXlcIiwgNF0sIDAsIFwiZXJhWWVhclwiKTtcbnIwKFwiTlwiLCB1cyk7XG5yMChcIk5OXCIsIHVzKTtcbnIwKFwiTk5OXCIsIHVzKTtcbnIwKFwiTk5OTlwiLCB1USk7XG5yMChcIk5OTk5OXCIsIHpRKTtcblkwKFxuICBbXCJOXCIsIFwiTk5cIiwgXCJOTk5cIiwgXCJOTk5OXCIsIFwiTk5OTk5cIl0sXG4gIGZ1bmN0aW9uKGUsIHQsIG8sIG4pIHtcbiAgICB2YXIgciA9IG8uX2xvY2FsZS5lcmFzUGFyc2UoZSwgbiwgby5fc3RyaWN0KTtcbiAgICByID8gQzAobykuZXJhID0gciA6IEMwKG8pLmludmFsaWRFcmEgPSBlO1xuICB9XG4pO1xucjAoXCJ5XCIsIE1vKTtcbnIwKFwieXlcIiwgTW8pO1xucjAoXCJ5eXlcIiwgTW8pO1xucjAoXCJ5eXl5XCIsIE1vKTtcbnIwKFwieW9cIiwgaFEpO1xuWTAoW1wieVwiLCBcInl5XCIsIFwieXl5XCIsIFwieXl5eVwiXSwgeTIpO1xuWTAoW1wieW9cIl0sIGZ1bmN0aW9uKGUsIHQsIG8sIG4pIHtcbiAgdmFyIHI7XG4gIG8uX2xvY2FsZS5fZXJhWWVhck9yZGluYWxSZWdleCAmJiAociA9IGUubWF0Y2goby5fbG9jYWxlLl9lcmFZZWFyT3JkaW5hbFJlZ2V4KSksIG8uX2xvY2FsZS5lcmFZZWFyT3JkaW5hbFBhcnNlID8gdFt5Ml0gPSBvLl9sb2NhbGUuZXJhWWVhck9yZGluYWxQYXJzZShlLCByKSA6IHRbeTJdID0gcGFyc2VJbnQoZSwgMTApO1xufSk7XG5mdW5jdGlvbiBpUShlLCB0KSB7XG4gIHZhciBvLCBuLCByLCBpID0gdGhpcy5fZXJhcyB8fCB6dChcImVuXCIpLl9lcmFzO1xuICBmb3IgKG8gPSAwLCBuID0gaS5sZW5ndGg7IG8gPCBuOyArK28pIHtcbiAgICBzd2l0Y2ggKHR5cGVvZiBpW29dLnNpbmNlKSB7XG4gICAgICBjYXNlIFwic3RyaW5nXCI6XG4gICAgICAgIHIgPSAkMShpW29dLnNpbmNlKS5zdGFydE9mKFwiZGF5XCIpLCBpW29dLnNpbmNlID0gci52YWx1ZU9mKCk7XG4gICAgICAgIGJyZWFrO1xuICAgIH1cbiAgICBzd2l0Y2ggKHR5cGVvZiBpW29dLnVudGlsKSB7XG4gICAgICBjYXNlIFwidW5kZWZpbmVkXCI6XG4gICAgICAgIGlbb10udW50aWwgPSAxIC8gMDtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIFwic3RyaW5nXCI6XG4gICAgICAgIHIgPSAkMShpW29dLnVudGlsKS5zdGFydE9mKFwiZGF5XCIpLnZhbHVlT2YoKSwgaVtvXS51bnRpbCA9IHIudmFsdWVPZigpO1xuICAgICAgICBicmVhaztcbiAgICB9XG4gIH1cbiAgcmV0dXJuIGk7XG59XG5mdW5jdGlvbiBhUShlLCB0LCBvKSB7XG4gIHZhciBuLCByLCBpID0gdGhpcy5lcmFzKCksIGEsIHMsIGw7XG4gIGZvciAoZSA9IGUudG9VcHBlckNhc2UoKSwgbiA9IDAsIHIgPSBpLmxlbmd0aDsgbiA8IHI7ICsrbilcbiAgICBpZiAoYSA9IGlbbl0ubmFtZS50b1VwcGVyQ2FzZSgpLCBzID0gaVtuXS5hYmJyLnRvVXBwZXJDYXNlKCksIGwgPSBpW25dLm5hcnJvdy50b1VwcGVyQ2FzZSgpLCBvKVxuICAgICAgc3dpdGNoICh0KSB7XG4gICAgICAgIGNhc2UgXCJOXCI6XG4gICAgICAgIGNhc2UgXCJOTlwiOlxuICAgICAgICBjYXNlIFwiTk5OXCI6XG4gICAgICAgICAgaWYgKHMgPT09IGUpXG4gICAgICAgICAgICByZXR1cm4gaVtuXTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBcIk5OTk5cIjpcbiAgICAgICAgICBpZiAoYSA9PT0gZSlcbiAgICAgICAgICAgIHJldHVybiBpW25dO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIFwiTk5OTk5cIjpcbiAgICAgICAgICBpZiAobCA9PT0gZSlcbiAgICAgICAgICAgIHJldHVybiBpW25dO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIGVsc2UgaWYgKFthLCBzLCBsXS5pbmRleE9mKGUpID49IDApXG4gICAgICByZXR1cm4gaVtuXTtcbn1cbmZ1bmN0aW9uIHNRKGUsIHQpIHtcbiAgdmFyIG8gPSBlLnNpbmNlIDw9IGUudW50aWwgPyAxIDogLTE7XG4gIHJldHVybiB0ID09PSB2b2lkIDAgPyAkMShlLnNpbmNlKS55ZWFyKCkgOiAkMShlLnNpbmNlKS55ZWFyKCkgKyAodCAtIGUub2Zmc2V0KSAqIG87XG59XG5mdW5jdGlvbiBjUSgpIHtcbiAgdmFyIGUsIHQsIG8sIG4gPSB0aGlzLmxvY2FsZURhdGEoKS5lcmFzKCk7XG4gIGZvciAoZSA9IDAsIHQgPSBuLmxlbmd0aDsgZSA8IHQ7ICsrZSlcbiAgICBpZiAobyA9IHRoaXMuY2xvbmUoKS5zdGFydE9mKFwiZGF5XCIpLnZhbHVlT2YoKSwgbltlXS5zaW5jZSA8PSBvICYmIG8gPD0gbltlXS51bnRpbCB8fCBuW2VdLnVudGlsIDw9IG8gJiYgbyA8PSBuW2VdLnNpbmNlKVxuICAgICAgcmV0dXJuIG5bZV0ubmFtZTtcbiAgcmV0dXJuIFwiXCI7XG59XG5mdW5jdGlvbiBsUSgpIHtcbiAgdmFyIGUsIHQsIG8sIG4gPSB0aGlzLmxvY2FsZURhdGEoKS5lcmFzKCk7XG4gIGZvciAoZSA9IDAsIHQgPSBuLmxlbmd0aDsgZSA8IHQ7ICsrZSlcbiAgICBpZiAobyA9IHRoaXMuY2xvbmUoKS5zdGFydE9mKFwiZGF5XCIpLnZhbHVlT2YoKSwgbltlXS5zaW5jZSA8PSBvICYmIG8gPD0gbltlXS51bnRpbCB8fCBuW2VdLnVudGlsIDw9IG8gJiYgbyA8PSBuW2VdLnNpbmNlKVxuICAgICAgcmV0dXJuIG5bZV0ubmFycm93O1xuICByZXR1cm4gXCJcIjtcbn1cbmZ1bmN0aW9uIHBRKCkge1xuICB2YXIgZSwgdCwgbywgbiA9IHRoaXMubG9jYWxlRGF0YSgpLmVyYXMoKTtcbiAgZm9yIChlID0gMCwgdCA9IG4ubGVuZ3RoOyBlIDwgdDsgKytlKVxuICAgIGlmIChvID0gdGhpcy5jbG9uZSgpLnN0YXJ0T2YoXCJkYXlcIikudmFsdWVPZigpLCBuW2VdLnNpbmNlIDw9IG8gJiYgbyA8PSBuW2VdLnVudGlsIHx8IG5bZV0udW50aWwgPD0gbyAmJiBvIDw9IG5bZV0uc2luY2UpXG4gICAgICByZXR1cm4gbltlXS5hYmJyO1xuICByZXR1cm4gXCJcIjtcbn1cbmZ1bmN0aW9uIGRRKCkge1xuICB2YXIgZSwgdCwgbywgbiwgciA9IHRoaXMubG9jYWxlRGF0YSgpLmVyYXMoKTtcbiAgZm9yIChlID0gMCwgdCA9IHIubGVuZ3RoOyBlIDwgdDsgKytlKVxuICAgIGlmIChvID0gcltlXS5zaW5jZSA8PSByW2VdLnVudGlsID8gMSA6IC0xLCBuID0gdGhpcy5jbG9uZSgpLnN0YXJ0T2YoXCJkYXlcIikudmFsdWVPZigpLCByW2VdLnNpbmNlIDw9IG4gJiYgbiA8PSByW2VdLnVudGlsIHx8IHJbZV0udW50aWwgPD0gbiAmJiBuIDw9IHJbZV0uc2luY2UpXG4gICAgICByZXR1cm4gKHRoaXMueWVhcigpIC0gJDEocltlXS5zaW5jZSkueWVhcigpKSAqIG8gKyByW2VdLm9mZnNldDtcbiAgcmV0dXJuIHRoaXMueWVhcigpO1xufVxuZnVuY3Rpb24gYlEoZSkge1xuICByZXR1cm4gazAodGhpcywgXCJfZXJhc05hbWVSZWdleFwiKSB8fCB6cy5jYWxsKHRoaXMpLCBlID8gdGhpcy5fZXJhc05hbWVSZWdleCA6IHRoaXMuX2VyYXNSZWdleDtcbn1cbmZ1bmN0aW9uIE1RKGUpIHtcbiAgcmV0dXJuIGswKHRoaXMsIFwiX2VyYXNBYmJyUmVnZXhcIikgfHwgenMuY2FsbCh0aGlzKSwgZSA/IHRoaXMuX2VyYXNBYmJyUmVnZXggOiB0aGlzLl9lcmFzUmVnZXg7XG59XG5mdW5jdGlvbiBBUShlKSB7XG4gIHJldHVybiBrMCh0aGlzLCBcIl9lcmFzTmFycm93UmVnZXhcIikgfHwgenMuY2FsbCh0aGlzKSwgZSA/IHRoaXMuX2VyYXNOYXJyb3dSZWdleCA6IHRoaXMuX2VyYXNSZWdleDtcbn1cbmZ1bmN0aW9uIHVzKGUsIHQpIHtcbiAgcmV0dXJuIHQuZXJhc0FiYnJSZWdleChlKTtcbn1cbmZ1bmN0aW9uIHVRKGUsIHQpIHtcbiAgcmV0dXJuIHQuZXJhc05hbWVSZWdleChlKTtcbn1cbmZ1bmN0aW9uIHpRKGUsIHQpIHtcbiAgcmV0dXJuIHQuZXJhc05hcnJvd1JlZ2V4KGUpO1xufVxuZnVuY3Rpb24gaFEoZSwgdCkge1xuICByZXR1cm4gdC5fZXJhWWVhck9yZGluYWxSZWdleCB8fCBNbztcbn1cbmZ1bmN0aW9uIHpzKCkge1xuICB2YXIgZSA9IFtdLCB0ID0gW10sIG8gPSBbXSwgbiA9IFtdLCByLCBpLCBhLCBzLCBsLCBwID0gdGhpcy5lcmFzKCk7XG4gIGZvciAociA9IDAsIGkgPSBwLmxlbmd0aDsgciA8IGk7ICsrcilcbiAgICBhID0gY3QocFtyXS5uYW1lKSwgcyA9IGN0KHBbcl0uYWJiciksIGwgPSBjdChwW3JdLm5hcnJvdyksIHQucHVzaChhKSwgZS5wdXNoKHMpLCBvLnB1c2gobCksIG4ucHVzaChhKSwgbi5wdXNoKHMpLCBuLnB1c2gobCk7XG4gIHRoaXMuX2VyYXNSZWdleCA9IG5ldyBSZWdFeHAoXCJeKFwiICsgbi5qb2luKFwifFwiKSArIFwiKVwiLCBcImlcIiksIHRoaXMuX2VyYXNOYW1lUmVnZXggPSBuZXcgUmVnRXhwKFwiXihcIiArIHQuam9pbihcInxcIikgKyBcIilcIiwgXCJpXCIpLCB0aGlzLl9lcmFzQWJiclJlZ2V4ID0gbmV3IFJlZ0V4cChcIl4oXCIgKyBlLmpvaW4oXCJ8XCIpICsgXCIpXCIsIFwiaVwiKSwgdGhpcy5fZXJhc05hcnJvd1JlZ2V4ID0gbmV3IFJlZ0V4cChcbiAgICBcIl4oXCIgKyBvLmpvaW4oXCJ8XCIpICsgXCIpXCIsXG4gICAgXCJpXCJcbiAgKTtcbn1cbmQwKDAsIFtcImdnXCIsIDJdLCAwLCBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIHRoaXMud2Vla1llYXIoKSAlIDEwMDtcbn0pO1xuZDAoMCwgW1wiR0dcIiwgMl0sIDAsIGZ1bmN0aW9uKCkge1xuICByZXR1cm4gdGhpcy5pc29XZWVrWWVhcigpICUgMTAwO1xufSk7XG5mdW5jdGlvbiBNaShlLCB0KSB7XG4gIGQwKDAsIFtlLCBlLmxlbmd0aF0sIDAsIHQpO1xufVxuTWkoXCJnZ2dnXCIsIFwid2Vla1llYXJcIik7XG5NaShcImdnZ2dnXCIsIFwid2Vla1llYXJcIik7XG5NaShcIkdHR0dcIiwgXCJpc29XZWVrWWVhclwiKTtcbk1pKFwiR0dHR0dcIiwgXCJpc29XZWVrWWVhclwiKTtcbnIwKFwiR1wiLCBjaSk7XG5yMChcImdcIiwgY2kpO1xucjAoXCJHR1wiLCBKMCwgcmUpO1xucjAoXCJnZ1wiLCBKMCwgcmUpO1xucjAoXCJHR0dHXCIsIHJzLCBvcyk7XG5yMChcImdnZ2dcIiwgcnMsIG9zKTtcbnIwKFwiR0dHR0dcIiwgc2ksIGlpKTtcbnIwKFwiZ2dnZ2dcIiwgc2ksIGlpKTtcblFyKFxuICBbXCJnZ2dnXCIsIFwiZ2dnZ2dcIiwgXCJHR0dHXCIsIFwiR0dHR0dcIl0sXG4gIGZ1bmN0aW9uKGUsIHQsIG8sIG4pIHtcbiAgICB0W24uc3Vic3RyKDAsIDIpXSA9IHEwKGUpO1xuICB9XG4pO1xuUXIoW1wiZ2dcIiwgXCJHR1wiXSwgZnVuY3Rpb24oZSwgdCwgbywgbikge1xuICB0W25dID0gJDEucGFyc2VUd29EaWdpdFllYXIoZSk7XG59KTtcbmZ1bmN0aW9uIE9RKGUpIHtcbiAgcmV0dXJuIENNLmNhbGwoXG4gICAgdGhpcyxcbiAgICBlLFxuICAgIHRoaXMud2VlaygpLFxuICAgIHRoaXMud2Vla2RheSgpICsgdGhpcy5sb2NhbGVEYXRhKCkuX3dlZWsuZG93LFxuICAgIHRoaXMubG9jYWxlRGF0YSgpLl93ZWVrLmRvdyxcbiAgICB0aGlzLmxvY2FsZURhdGEoKS5fd2Vlay5kb3lcbiAgKTtcbn1cbmZ1bmN0aW9uIGZRKGUpIHtcbiAgcmV0dXJuIENNLmNhbGwoXG4gICAgdGhpcyxcbiAgICBlLFxuICAgIHRoaXMuaXNvV2VlaygpLFxuICAgIHRoaXMuaXNvV2Vla2RheSgpLFxuICAgIDEsXG4gICAgNFxuICApO1xufVxuZnVuY3Rpb24gZ1EoKSB7XG4gIHJldHVybiBsdCh0aGlzLnllYXIoKSwgMSwgNCk7XG59XG5mdW5jdGlvbiBDUSgpIHtcbiAgcmV0dXJuIGx0KHRoaXMuaXNvV2Vla1llYXIoKSwgMSwgNCk7XG59XG5mdW5jdGlvbiBtUSgpIHtcbiAgdmFyIGUgPSB0aGlzLmxvY2FsZURhdGEoKS5fd2VlaztcbiAgcmV0dXJuIGx0KHRoaXMueWVhcigpLCBlLmRvdywgZS5kb3kpO1xufVxuZnVuY3Rpb24gTFEoKSB7XG4gIHZhciBlID0gdGhpcy5sb2NhbGVEYXRhKCkuX3dlZWs7XG4gIHJldHVybiBsdCh0aGlzLndlZWtZZWFyKCksIGUuZG93LCBlLmRveSk7XG59XG5mdW5jdGlvbiBDTShlLCB0LCBvLCBuLCByKSB7XG4gIHZhciBpO1xuICByZXR1cm4gZSA9PSBudWxsID8gd3IodGhpcywgbiwgcikueWVhciA6IChpID0gbHQoZSwgbiwgciksIHQgPiBpICYmICh0ID0gaSksIHZRLmNhbGwodGhpcywgZSwgdCwgbywgbiwgcikpO1xufVxuZnVuY3Rpb24gdlEoZSwgdCwgbywgbiwgcikge1xuICB2YXIgaSA9IGVNKGUsIHQsIG8sIG4sIHIpLCBhID0geXIoaS55ZWFyLCAwLCBpLmRheU9mWWVhcik7XG4gIHJldHVybiB0aGlzLnllYXIoYS5nZXRVVENGdWxsWWVhcigpKSwgdGhpcy5tb250aChhLmdldFVUQ01vbnRoKCkpLCB0aGlzLmRhdGUoYS5nZXRVVENEYXRlKCkpLCB0aGlzO1xufVxuZDAoXCJRXCIsIDAsIFwiUW9cIiwgXCJxdWFydGVyXCIpO1xucjAoXCJRXCIsIFhiKTtcblkwKFwiUVwiLCBmdW5jdGlvbihlLCB0KSB7XG4gIHRbYXRdID0gKHEwKGUpIC0gMSkgKiAzO1xufSk7XG5mdW5jdGlvbiBxUShlKSB7XG4gIHJldHVybiBlID09IG51bGwgPyBNYXRoLmNlaWwoKHRoaXMubW9udGgoKSArIDEpIC8gMykgOiB0aGlzLm1vbnRoKChlIC0gMSkgKiAzICsgdGhpcy5tb250aCgpICUgMyk7XG59XG5kMChcIkRcIiwgW1wiRERcIiwgMl0sIFwiRG9cIiwgXCJkYXRlXCIpO1xucjAoXCJEXCIsIEowLCBBbyk7XG5yMChcIkREXCIsIEowLCByZSk7XG5yMChcIkRvXCIsIGZ1bmN0aW9uKGUsIHQpIHtcbiAgcmV0dXJuIGUgPyB0Ll9kYXlPZk1vbnRoT3JkaW5hbFBhcnNlIHx8IHQuX29yZGluYWxQYXJzZSA6IHQuX2RheU9mTW9udGhPcmRpbmFsUGFyc2VMZW5pZW50O1xufSk7XG5ZMChbXCJEXCIsIFwiRERcIl0sIFRlKTtcblkwKFwiRG9cIiwgZnVuY3Rpb24oZSwgdCkge1xuICB0W1RlXSA9IHEwKGUubWF0Y2goSjApWzBdKTtcbn0pO1xudmFyIG1NID0gdW8oXCJEYXRlXCIsICEwKTtcbmQwKFwiREREXCIsIFtcIkRERERcIiwgM10sIFwiREREb1wiLCBcImRheU9mWWVhclwiKTtcbnIwKFwiREREXCIsIGFpKTtcbnIwKFwiRERERFwiLCBVYik7XG5ZMChbXCJERERcIiwgXCJEREREXCJdLCBmdW5jdGlvbihlLCB0LCBvKSB7XG4gIG8uX2RheU9mWWVhciA9IHEwKGUpO1xufSk7XG5mdW5jdGlvbiB5UShlKSB7XG4gIHZhciB0ID0gTWF0aC5yb3VuZChcbiAgICAodGhpcy5jbG9uZSgpLnN0YXJ0T2YoXCJkYXlcIikgLSB0aGlzLmNsb25lKCkuc3RhcnRPZihcInllYXJcIikpIC8gODY0ZTVcbiAgKSArIDE7XG4gIHJldHVybiBlID09IG51bGwgPyB0IDogdGhpcy5hZGQoZSAtIHQsIFwiZFwiKTtcbn1cbmQwKFwibVwiLCBbXCJtbVwiLCAyXSwgMCwgXCJtaW51dGVcIik7XG5yMChcIm1cIiwgSjAsIG5zKTtcbnIwKFwibW1cIiwgSjAsIHJlKTtcblkwKFtcIm1cIiwgXCJtbVwiXSwgbWUpO1xudmFyIHdRID0gdW8oXCJNaW51dGVzXCIsICExKTtcbmQwKFwic1wiLCBbXCJzc1wiLCAyXSwgMCwgXCJzZWNvbmRcIik7XG5yMChcInNcIiwgSjAsIG5zKTtcbnIwKFwic3NcIiwgSjAsIHJlKTtcblkwKFtcInNcIiwgXCJzc1wiXSwgc3QpO1xudmFyIHhRID0gdW8oXCJTZWNvbmRzXCIsICExKTtcbmQwKFwiU1wiLCAwLCAwLCBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIH5+KHRoaXMubWlsbGlzZWNvbmQoKSAvIDEwMCk7XG59KTtcbmQwKDAsIFtcIlNTXCIsIDJdLCAwLCBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIH5+KHRoaXMubWlsbGlzZWNvbmQoKSAvIDEwKTtcbn0pO1xuZDAoMCwgW1wiU1NTXCIsIDNdLCAwLCBcIm1pbGxpc2Vjb25kXCIpO1xuZDAoMCwgW1wiU1NTU1wiLCA0XSwgMCwgZnVuY3Rpb24oKSB7XG4gIHJldHVybiB0aGlzLm1pbGxpc2Vjb25kKCkgKiAxMDtcbn0pO1xuZDAoMCwgW1wiU1NTU1NcIiwgNV0sIDAsIGZ1bmN0aW9uKCkge1xuICByZXR1cm4gdGhpcy5taWxsaXNlY29uZCgpICogMTAwO1xufSk7XG5kMCgwLCBbXCJTU1NTU1NcIiwgNl0sIDAsIGZ1bmN0aW9uKCkge1xuICByZXR1cm4gdGhpcy5taWxsaXNlY29uZCgpICogMWUzO1xufSk7XG5kMCgwLCBbXCJTU1NTU1NTXCIsIDddLCAwLCBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIHRoaXMubWlsbGlzZWNvbmQoKSAqIDFlNDtcbn0pO1xuZDAoMCwgW1wiU1NTU1NTU1NcIiwgOF0sIDAsIGZ1bmN0aW9uKCkge1xuICByZXR1cm4gdGhpcy5taWxsaXNlY29uZCgpICogMWU1O1xufSk7XG5kMCgwLCBbXCJTU1NTU1NTU1NcIiwgOV0sIDAsIGZ1bmN0aW9uKCkge1xuICByZXR1cm4gdGhpcy5taWxsaXNlY29uZCgpICogMWU2O1xufSk7XG5yMChcIlNcIiwgYWksIFhiKTtcbnIwKFwiU1NcIiwgYWksIHJlKTtcbnIwKFwiU1NTXCIsIGFpLCBVYik7XG52YXIgUnQsIExNO1xuZm9yIChSdCA9IFwiU1NTU1wiOyBSdC5sZW5ndGggPD0gOTsgUnQgKz0gXCJTXCIpXG4gIHIwKFJ0LCBNbyk7XG5mdW5jdGlvbiBXUShlLCB0KSB7XG4gIHRbYTNdID0gcTAoKFwiMC5cIiArIGUpICogMWUzKTtcbn1cbmZvciAoUnQgPSBcIlNcIjsgUnQubGVuZ3RoIDw9IDk7IFJ0ICs9IFwiU1wiKVxuICBZMChSdCwgV1EpO1xuTE0gPSB1byhcIk1pbGxpc2Vjb25kc1wiLCAhMSk7XG5kMChcInpcIiwgMCwgMCwgXCJ6b25lQWJiclwiKTtcbmQwKFwienpcIiwgMCwgMCwgXCJ6b25lTmFtZVwiKTtcbmZ1bmN0aW9uIFJRKCkge1xuICByZXR1cm4gdGhpcy5faXNVVEMgPyBcIlVUQ1wiIDogXCJcIjtcbn1cbmZ1bmN0aW9uIEJRKCkge1xuICByZXR1cm4gdGhpcy5faXNVVEMgPyBcIkNvb3JkaW5hdGVkIFVuaXZlcnNhbCBUaW1lXCIgOiBcIlwiO1xufVxudmFyIFkxID0gWXIucHJvdG90eXBlO1xuWTEuYWRkID0gTEc7XG5ZMS5jYWxlbmRhciA9IFJHO1xuWTEuY2xvbmUgPSBCRztcblkxLmRpZmYgPSBERztcblkxLmVuZE9mID0gWkc7XG5ZMS5mb3JtYXQgPSBGRztcblkxLmZyb20gPSBYRztcblkxLmZyb21Ob3cgPSBVRztcblkxLnRvID0gWUc7XG5ZMS50b05vdyA9IEdHO1xuWTEuZ2V0ID0gUFU7XG5ZMS5pbnZhbGlkQXQgPSByUTtcblkxLmlzQWZ0ZXIgPSBTRztcblkxLmlzQmVmb3JlID0gRUc7XG5ZMS5pc0JldHdlZW4gPSBrRztcblkxLmlzU2FtZSA9IE5HO1xuWTEuaXNTYW1lT3JBZnRlciA9IFRHO1xuWTEuaXNTYW1lT3JCZWZvcmUgPSBJRztcblkxLmlzVmFsaWQgPSB0UTtcblkxLmxhbmcgPSB6TTtcblkxLmxvY2FsZSA9IHVNO1xuWTEubG9jYWxlRGF0YSA9IGhNO1xuWTEubWF4ID0gdEc7XG5ZMS5taW4gPSBlRztcblkxLnBhcnNpbmdGbGFncyA9IG9RO1xuWTEuc2V0ID0gRlU7XG5ZMS5zdGFydE9mID0gUUc7XG5ZMS5zdWJ0cmFjdCA9IHZHO1xuWTEudG9BcnJheSA9IF9HO1xuWTEudG9PYmplY3QgPSAkRztcblkxLnRvRGF0ZSA9IEpHO1xuWTEudG9JU09TdHJpbmcgPSBWRztcblkxLmluc3BlY3QgPSBQRztcbnR5cGVvZiBTeW1ib2wgPCBcInVcIiAmJiBTeW1ib2wuZm9yICE9IG51bGwgJiYgKFkxW1N5bWJvbC5mb3IoXCJub2RlanMudXRpbC5pbnNwZWN0LmN1c3RvbVwiKV0gPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIFwiTW9tZW50PFwiICsgdGhpcy5mb3JtYXQoKSArIFwiPlwiO1xufSk7XG5ZMS50b0pTT04gPSBlUTtcblkxLnRvU3RyaW5nID0gSEc7XG5ZMS51bml4ID0gS0c7XG5ZMS52YWx1ZU9mID0gakc7XG5ZMS5jcmVhdGlvbkRhdGEgPSBuUTtcblkxLmVyYU5hbWUgPSBjUTtcblkxLmVyYU5hcnJvdyA9IGxRO1xuWTEuZXJhQWJiciA9IHBRO1xuWTEuZXJhWWVhciA9IGRRO1xuWTEueWVhciA9IFFiO1xuWTEuaXNMZWFwWWVhciA9IFZVO1xuWTEud2Vla1llYXIgPSBPUTtcblkxLmlzb1dlZWtZZWFyID0gZlE7XG5ZMS5xdWFydGVyID0gWTEucXVhcnRlcnMgPSBxUTtcblkxLm1vbnRoID0gX2I7XG5ZMS5kYXlzSW5Nb250aCA9IEpVO1xuWTEud2VlayA9IFkxLndlZWtzID0gaVk7XG5ZMS5pc29XZWVrID0gWTEuaXNvV2Vla3MgPSBhWTtcblkxLndlZWtzSW5ZZWFyID0gbVE7XG5ZMS53ZWVrc0luV2Vla1llYXIgPSBMUTtcblkxLmlzb1dlZWtzSW5ZZWFyID0gZ1E7XG5ZMS5pc29XZWVrc0luSVNPV2Vla1llYXIgPSBDUTtcblkxLmRhdGUgPSBtTTtcblkxLmRheSA9IFkxLmRheXMgPSBmWTtcblkxLndlZWtkYXkgPSBnWTtcblkxLmlzb1dlZWtkYXkgPSBDWTtcblkxLmRheU9mWWVhciA9IHlRO1xuWTEuaG91ciA9IFkxLmhvdXJzID0geFk7XG5ZMS5taW51dGUgPSBZMS5taW51dGVzID0gd1E7XG5ZMS5zZWNvbmQgPSBZMS5zZWNvbmRzID0geFE7XG5ZMS5taWxsaXNlY29uZCA9IFkxLm1pbGxpc2Vjb25kcyA9IExNO1xuWTEudXRjT2Zmc2V0ID0gcEc7XG5ZMS51dGMgPSBiRztcblkxLmxvY2FsID0gTUc7XG5ZMS5wYXJzZVpvbmUgPSBBRztcblkxLmhhc0FsaWduZWRIb3VyT2Zmc2V0ID0gdUc7XG5ZMS5pc0RTVCA9IHpHO1xuWTEuaXNMb2NhbCA9IE9HO1xuWTEuaXNVdGNPZmZzZXQgPSBmRztcblkxLmlzVXRjID0gZE07XG5ZMS5pc1VUQyA9IGRNO1xuWTEuem9uZUFiYnIgPSBSUTtcblkxLnpvbmVOYW1lID0gQlE7XG5ZMS5kYXRlcyA9IHVlKFxuICBcImRhdGVzIGFjY2Vzc29yIGlzIGRlcHJlY2F0ZWQuIFVzZSBkYXRlIGluc3RlYWQuXCIsXG4gIG1NXG4pO1xuWTEubW9udGhzID0gdWUoXG4gIFwibW9udGhzIGFjY2Vzc29yIGlzIGRlcHJlY2F0ZWQuIFVzZSBtb250aCBpbnN0ZWFkXCIsXG4gIF9iXG4pO1xuWTEueWVhcnMgPSB1ZShcbiAgXCJ5ZWFycyBhY2Nlc3NvciBpcyBkZXByZWNhdGVkLiBVc2UgeWVhciBpbnN0ZWFkXCIsXG4gIFFiXG4pO1xuWTEuem9uZSA9IHVlKFxuICBcIm1vbWVudCgpLnpvbmUgaXMgZGVwcmVjYXRlZCwgdXNlIG1vbWVudCgpLnV0Y09mZnNldCBpbnN0ZWFkLiBodHRwOi8vbW9tZW50anMuY29tL2d1aWRlcy8jL3dhcm5pbmdzL3pvbmUvXCIsXG4gIGRHXG4pO1xuWTEuaXNEU1RTaGlmdGVkID0gdWUoXG4gIFwiaXNEU1RTaGlmdGVkIGlzIGRlcHJlY2F0ZWQuIFNlZSBodHRwOi8vbW9tZW50anMuY29tL2d1aWRlcy8jL3dhcm5pbmdzL2RzdC1zaGlmdGVkLyBmb3IgbW9yZSBpbmZvcm1hdGlvblwiLFxuICBoR1xuKTtcbmZ1bmN0aW9uIFNRKGUpIHtcbiAgcmV0dXJuIEswKGUgKiAxZTMpO1xufVxuZnVuY3Rpb24gRVEoKSB7XG4gIHJldHVybiBLMC5hcHBseShudWxsLCBhcmd1bWVudHMpLnBhcnNlWm9uZSgpO1xufVxuZnVuY3Rpb24gdk0oZSkge1xuICByZXR1cm4gZTtcbn1cbnZhciBOMCA9ICQ2LnByb3RvdHlwZTtcbk4wLmNhbGVuZGFyID0gT1U7XG5OMC5sb25nRGF0ZUZvcm1hdCA9IG1VO1xuTjAuaW52YWxpZERhdGUgPSB2VTtcbk4wLm9yZGluYWwgPSB3VTtcbk4wLnByZXBhcnNlID0gdk07XG5OMC5wb3N0Zm9ybWF0ID0gdk07XG5OMC5yZWxhdGl2ZVRpbWUgPSBXVTtcbk4wLnBhc3RGdXR1cmUgPSBSVTtcbk4wLnNldCA9IHpVO1xuTjAuZXJhcyA9IGlRO1xuTjAuZXJhc1BhcnNlID0gYVE7XG5OMC5lcmFzQ29udmVydFllYXIgPSBzUTtcbk4wLmVyYXNBYmJyUmVnZXggPSBNUTtcbk4wLmVyYXNOYW1lUmVnZXggPSBiUTtcbk4wLmVyYXNOYXJyb3dSZWdleCA9IEFRO1xuTjAubW9udGhzID0gUVU7XG5OMC5tb250aHNTaG9ydCA9IFpVO1xuTjAubW9udGhzUGFyc2UgPSBLVTtcbk4wLm1vbnRoc1JlZ2V4ID0gJFU7XG5OMC5tb250aHNTaG9ydFJlZ2V4ID0gX1U7XG5OMC53ZWVrID0gdFk7XG5OMC5maXJzdERheU9mWWVhciA9IG5ZO1xuTjAuZmlyc3REYXlPZldlZWsgPSByWTtcbk4wLndlZWtkYXlzID0gQVk7XG5OMC53ZWVrZGF5c01pbiA9IHpZO1xuTjAud2Vla2RheXNTaG9ydCA9IHVZO1xuTjAud2Vla2RheXNQYXJzZSA9IE9ZO1xuTjAud2Vla2RheXNSZWdleCA9IG1ZO1xuTjAud2Vla2RheXNTaG9ydFJlZ2V4ID0gTFk7XG5OMC53ZWVrZGF5c01pblJlZ2V4ID0gdlk7XG5OMC5pc1BNID0geVk7XG5OMC5tZXJpZGllbSA9IFdZO1xuZnVuY3Rpb24gazQoZSwgdCwgbywgbikge1xuICB2YXIgciA9IHp0KCksIGkgPSBRZSgpLnNldChuLCB0KTtcbiAgcmV0dXJuIHJbb10oaSwgZSk7XG59XG5mdW5jdGlvbiBxTShlLCB0LCBvKSB7XG4gIGlmIChNdChlKSAmJiAodCA9IGUsIGUgPSB2b2lkIDApLCBlID0gZSB8fCBcIlwiLCB0ICE9IG51bGwpXG4gICAgcmV0dXJuIGs0KGUsIHQsIG8sIFwibW9udGhcIik7XG4gIHZhciBuLCByID0gW107XG4gIGZvciAobiA9IDA7IG4gPCAxMjsgbisrKVxuICAgIHJbbl0gPSBrNChlLCBuLCBvLCBcIm1vbnRoXCIpO1xuICByZXR1cm4gcjtcbn1cbmZ1bmN0aW9uIGhzKGUsIHQsIG8sIG4pIHtcbiAgdHlwZW9mIGUgPT0gXCJib29sZWFuXCIgPyAoTXQodCkgJiYgKG8gPSB0LCB0ID0gdm9pZCAwKSwgdCA9IHQgfHwgXCJcIikgOiAodCA9IGUsIG8gPSB0LCBlID0gITEsIE10KHQpICYmIChvID0gdCwgdCA9IHZvaWQgMCksIHQgPSB0IHx8IFwiXCIpO1xuICB2YXIgciA9IHp0KCksIGkgPSBlID8gci5fd2Vlay5kb3cgOiAwLCBhLCBzID0gW107XG4gIGlmIChvICE9IG51bGwpXG4gICAgcmV0dXJuIGs0KHQsIChvICsgaSkgJSA3LCBuLCBcImRheVwiKTtcbiAgZm9yIChhID0gMDsgYSA8IDc7IGErKylcbiAgICBzW2FdID0gazQodCwgKGEgKyBpKSAlIDcsIG4sIFwiZGF5XCIpO1xuICByZXR1cm4gcztcbn1cbmZ1bmN0aW9uIGtRKGUsIHQpIHtcbiAgcmV0dXJuIHFNKGUsIHQsIFwibW9udGhzXCIpO1xufVxuZnVuY3Rpb24gTlEoZSwgdCkge1xuICByZXR1cm4gcU0oZSwgdCwgXCJtb250aHNTaG9ydFwiKTtcbn1cbmZ1bmN0aW9uIFRRKGUsIHQsIG8pIHtcbiAgcmV0dXJuIGhzKGUsIHQsIG8sIFwid2Vla2RheXNcIik7XG59XG5mdW5jdGlvbiBJUShlLCB0LCBvKSB7XG4gIHJldHVybiBocyhlLCB0LCBvLCBcIndlZWtkYXlzU2hvcnRcIik7XG59XG5mdW5jdGlvbiBEUShlLCB0LCBvKSB7XG4gIHJldHVybiBocyhlLCB0LCBvLCBcIndlZWtkYXlzTWluXCIpO1xufVxuVHQoXCJlblwiLCB7XG4gIGVyYXM6IFtcbiAgICB7XG4gICAgICBzaW5jZTogXCIwMDAxLTAxLTAxXCIsXG4gICAgICB1bnRpbDogMSAvIDAsXG4gICAgICBvZmZzZXQ6IDEsXG4gICAgICBuYW1lOiBcIkFubm8gRG9taW5pXCIsXG4gICAgICBuYXJyb3c6IFwiQURcIixcbiAgICAgIGFiYnI6IFwiQURcIlxuICAgIH0sXG4gICAge1xuICAgICAgc2luY2U6IFwiMDAwMC0xMi0zMVwiLFxuICAgICAgdW50aWw6IC0xIC8gMCxcbiAgICAgIG9mZnNldDogMSxcbiAgICAgIG5hbWU6IFwiQmVmb3JlIENocmlzdFwiLFxuICAgICAgbmFycm93OiBcIkJDXCIsXG4gICAgICBhYmJyOiBcIkJDXCJcbiAgICB9XG4gIF0sXG4gIGRheU9mTW9udGhPcmRpbmFsUGFyc2U6IC9cXGR7MSwyfSh0aHxzdHxuZHxyZCkvLFxuICBvcmRpbmFsOiBmdW5jdGlvbihlKSB7XG4gICAgdmFyIHQgPSBlICUgMTAsIG8gPSBxMChlICUgMTAwIC8gMTApID09PSAxID8gXCJ0aFwiIDogdCA9PT0gMSA/IFwic3RcIiA6IHQgPT09IDIgPyBcIm5kXCIgOiB0ID09PSAzID8gXCJyZFwiIDogXCJ0aFwiO1xuICAgIHJldHVybiBlICsgbztcbiAgfVxufSk7XG4kMS5sYW5nID0gdWUoXG4gIFwibW9tZW50LmxhbmcgaXMgZGVwcmVjYXRlZC4gVXNlIG1vbWVudC5sb2NhbGUgaW5zdGVhZC5cIixcbiAgVHRcbik7XG4kMS5sYW5nRGF0YSA9IHVlKFxuICBcIm1vbWVudC5sYW5nRGF0YSBpcyBkZXByZWNhdGVkLiBVc2UgbW9tZW50LmxvY2FsZURhdGEgaW5zdGVhZC5cIixcbiAgenRcbik7XG52YXIgS2UgPSBNYXRoLmFicztcbmZ1bmN0aW9uIEhRKCkge1xuICB2YXIgZSA9IHRoaXMuX2RhdGE7XG4gIHJldHVybiB0aGlzLl9taWxsaXNlY29uZHMgPSBLZSh0aGlzLl9taWxsaXNlY29uZHMpLCB0aGlzLl9kYXlzID0gS2UodGhpcy5fZGF5cyksIHRoaXMuX21vbnRocyA9IEtlKHRoaXMuX21vbnRocyksIGUubWlsbGlzZWNvbmRzID0gS2UoZS5taWxsaXNlY29uZHMpLCBlLnNlY29uZHMgPSBLZShlLnNlY29uZHMpLCBlLm1pbnV0ZXMgPSBLZShlLm1pbnV0ZXMpLCBlLmhvdXJzID0gS2UoZS5ob3VycyksIGUubW9udGhzID0gS2UoZS5tb250aHMpLCBlLnllYXJzID0gS2UoZS55ZWFycyksIHRoaXM7XG59XG5mdW5jdGlvbiB5TShlLCB0LCBvLCBuKSB7XG4gIHZhciByID0gd2UodCwgbyk7XG4gIHJldHVybiBlLl9taWxsaXNlY29uZHMgKz0gbiAqIHIuX21pbGxpc2Vjb25kcywgZS5fZGF5cyArPSBuICogci5fZGF5cywgZS5fbW9udGhzICs9IG4gKiByLl9tb250aHMsIGUuX2J1YmJsZSgpO1xufVxuZnVuY3Rpb24gVlEoZSwgdCkge1xuICByZXR1cm4geU0odGhpcywgZSwgdCwgMSk7XG59XG5mdW5jdGlvbiBQUShlLCB0KSB7XG4gIHJldHVybiB5TSh0aGlzLCBlLCB0LCAtMSk7XG59XG5mdW5jdGlvbiB4YyhlKSB7XG4gIHJldHVybiBlIDwgMCA/IE1hdGguZmxvb3IoZSkgOiBNYXRoLmNlaWwoZSk7XG59XG5mdW5jdGlvbiBGUSgpIHtcbiAgdmFyIGUgPSB0aGlzLl9taWxsaXNlY29uZHMsIHQgPSB0aGlzLl9kYXlzLCBvID0gdGhpcy5fbW9udGhzLCBuID0gdGhpcy5fZGF0YSwgciwgaSwgYSwgcywgbDtcbiAgcmV0dXJuIGUgPj0gMCAmJiB0ID49IDAgJiYgbyA+PSAwIHx8IGUgPD0gMCAmJiB0IDw9IDAgJiYgbyA8PSAwIHx8IChlICs9IHhjKFI1KG8pICsgdCkgKiA4NjRlNSwgdCA9IDAsIG8gPSAwKSwgbi5taWxsaXNlY29uZHMgPSBlICUgMWUzLCByID0gYWUoZSAvIDFlMyksIG4uc2Vjb25kcyA9IHIgJSA2MCwgaSA9IGFlKHIgLyA2MCksIG4ubWludXRlcyA9IGkgJSA2MCwgYSA9IGFlKGkgLyA2MCksIG4uaG91cnMgPSBhICUgMjQsIHQgKz0gYWUoYSAvIDI0KSwgbCA9IGFlKHdNKHQpKSwgbyArPSBsLCB0IC09IHhjKFI1KGwpKSwgcyA9IGFlKG8gLyAxMiksIG8gJT0gMTIsIG4uZGF5cyA9IHQsIG4ubW9udGhzID0gbywgbi55ZWFycyA9IHMsIHRoaXM7XG59XG5mdW5jdGlvbiB3TShlKSB7XG4gIHJldHVybiBlICogNDgwMCAvIDE0NjA5Nztcbn1cbmZ1bmN0aW9uIFI1KGUpIHtcbiAgcmV0dXJuIGUgKiAxNDYwOTcgLyA0ODAwO1xufVxuZnVuY3Rpb24gWFEoZSkge1xuICBpZiAoIXRoaXMuaXNWYWxpZCgpKVxuICAgIHJldHVybiBOYU47XG4gIHZhciB0LCBvLCBuID0gdGhpcy5fbWlsbGlzZWNvbmRzO1xuICBpZiAoZSA9IHplKGUpLCBlID09PSBcIm1vbnRoXCIgfHwgZSA9PT0gXCJxdWFydGVyXCIgfHwgZSA9PT0gXCJ5ZWFyXCIpXG4gICAgc3dpdGNoICh0ID0gdGhpcy5fZGF5cyArIG4gLyA4NjRlNSwgbyA9IHRoaXMuX21vbnRocyArIHdNKHQpLCBlKSB7XG4gICAgICBjYXNlIFwibW9udGhcIjpcbiAgICAgICAgcmV0dXJuIG87XG4gICAgICBjYXNlIFwicXVhcnRlclwiOlxuICAgICAgICByZXR1cm4gbyAvIDM7XG4gICAgICBjYXNlIFwieWVhclwiOlxuICAgICAgICByZXR1cm4gbyAvIDEyO1xuICAgIH1cbiAgZWxzZVxuICAgIHN3aXRjaCAodCA9IHRoaXMuX2RheXMgKyBNYXRoLnJvdW5kKFI1KHRoaXMuX21vbnRocykpLCBlKSB7XG4gICAgICBjYXNlIFwid2Vla1wiOlxuICAgICAgICByZXR1cm4gdCAvIDcgKyBuIC8gNjA0OGU1O1xuICAgICAgY2FzZSBcImRheVwiOlxuICAgICAgICByZXR1cm4gdCArIG4gLyA4NjRlNTtcbiAgICAgIGNhc2UgXCJob3VyXCI6XG4gICAgICAgIHJldHVybiB0ICogMjQgKyBuIC8gMzZlNTtcbiAgICAgIGNhc2UgXCJtaW51dGVcIjpcbiAgICAgICAgcmV0dXJuIHQgKiAxNDQwICsgbiAvIDZlNDtcbiAgICAgIGNhc2UgXCJzZWNvbmRcIjpcbiAgICAgICAgcmV0dXJuIHQgKiA4NjQwMCArIG4gLyAxZTM7XG4gICAgICBjYXNlIFwibWlsbGlzZWNvbmRcIjpcbiAgICAgICAgcmV0dXJuIE1hdGguZmxvb3IodCAqIDg2NGU1KSArIG47XG4gICAgICBkZWZhdWx0OlxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJVbmtub3duIHVuaXQgXCIgKyBlKTtcbiAgICB9XG59XG5mdW5jdGlvbiBodChlKSB7XG4gIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gdGhpcy5hcyhlKTtcbiAgfTtcbn1cbnZhciB4TSA9IGh0KFwibXNcIiksIFVRID0gaHQoXCJzXCIpLCBZUSA9IGh0KFwibVwiKSwgR1EgPSBodChcImhcIiksIFFRID0gaHQoXCJkXCIpLCBaUSA9IGh0KFwid1wiKSwgalEgPSBodChcIk1cIiksIEtRID0gaHQoXCJRXCIpLCBKUSA9IGh0KFwieVwiKSwgX1EgPSB4TTtcbmZ1bmN0aW9uICRRKCkge1xuICByZXR1cm4gd2UodGhpcyk7XG59XG5mdW5jdGlvbiBlWihlKSB7XG4gIHJldHVybiBlID0gemUoZSksIHRoaXMuaXNWYWxpZCgpID8gdGhpc1tlICsgXCJzXCJdKCkgOiBOYU47XG59XG5mdW5jdGlvbiBPMyhlKSB7XG4gIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gdGhpcy5pc1ZhbGlkKCkgPyB0aGlzLl9kYXRhW2VdIDogTmFOO1xuICB9O1xufVxudmFyIHRaID0gTzMoXCJtaWxsaXNlY29uZHNcIiksIG9aID0gTzMoXCJzZWNvbmRzXCIpLCByWiA9IE8zKFwibWludXRlc1wiKSwgblogPSBPMyhcImhvdXJzXCIpLCBpWiA9IE8zKFwiZGF5c1wiKSwgYVogPSBPMyhcIm1vbnRoc1wiKSwgc1ogPSBPMyhcInllYXJzXCIpO1xuZnVuY3Rpb24gY1ooKSB7XG4gIHJldHVybiBhZSh0aGlzLmRheXMoKSAvIDcpO1xufVxudmFyICRlID0gTWF0aC5yb3VuZCwgSTMgPSB7XG4gIHNzOiA0NCxcbiAgLy8gYSBmZXcgc2Vjb25kcyB0byBzZWNvbmRzXG4gIHM6IDQ1LFxuICAvLyBzZWNvbmRzIHRvIG1pbnV0ZVxuICBtOiA0NSxcbiAgLy8gbWludXRlcyB0byBob3VyXG4gIGg6IDIyLFxuICAvLyBob3VycyB0byBkYXlcbiAgZDogMjYsXG4gIC8vIGRheXMgdG8gbW9udGgvd2Vla1xuICB3OiBudWxsLFxuICAvLyB3ZWVrcyB0byBtb250aFxuICBNOiAxMVxuICAvLyBtb250aHMgdG8geWVhclxufTtcbmZ1bmN0aW9uIGxaKGUsIHQsIG8sIG4sIHIpIHtcbiAgcmV0dXJuIHIucmVsYXRpdmVUaW1lKHQgfHwgMSwgISFvLCBlLCBuKTtcbn1cbmZ1bmN0aW9uIHBaKGUsIHQsIG8sIG4pIHtcbiAgdmFyIHIgPSB3ZShlKS5hYnMoKSwgaSA9ICRlKHIuYXMoXCJzXCIpKSwgYSA9ICRlKHIuYXMoXCJtXCIpKSwgcyA9ICRlKHIuYXMoXCJoXCIpKSwgbCA9ICRlKHIuYXMoXCJkXCIpKSwgcCA9ICRlKHIuYXMoXCJNXCIpKSwgZCA9ICRlKHIuYXMoXCJ3XCIpKSwgYiA9ICRlKHIuYXMoXCJ5XCIpKSwgTSA9IGkgPD0gby5zcyAmJiBbXCJzXCIsIGldIHx8IGkgPCBvLnMgJiYgW1wic3NcIiwgaV0gfHwgYSA8PSAxICYmIFtcIm1cIl0gfHwgYSA8IG8ubSAmJiBbXCJtbVwiLCBhXSB8fCBzIDw9IDEgJiYgW1wiaFwiXSB8fCBzIDwgby5oICYmIFtcImhoXCIsIHNdIHx8IGwgPD0gMSAmJiBbXCJkXCJdIHx8IGwgPCBvLmQgJiYgW1wiZGRcIiwgbF07XG4gIHJldHVybiBvLncgIT0gbnVsbCAmJiAoTSA9IE0gfHwgZCA8PSAxICYmIFtcIndcIl0gfHwgZCA8IG8udyAmJiBbXCJ3d1wiLCBkXSksIE0gPSBNIHx8IHAgPD0gMSAmJiBbXCJNXCJdIHx8IHAgPCBvLk0gJiYgW1wiTU1cIiwgcF0gfHwgYiA8PSAxICYmIFtcInlcIl0gfHwgW1wieXlcIiwgYl0sIE1bMl0gPSB0LCBNWzNdID0gK2UgPiAwLCBNWzRdID0gbiwgbFouYXBwbHkobnVsbCwgTSk7XG59XG5mdW5jdGlvbiBkWihlKSB7XG4gIHJldHVybiBlID09PSB2b2lkIDAgPyAkZSA6IHR5cGVvZiBlID09IFwiZnVuY3Rpb25cIiA/ICgkZSA9IGUsICEwKSA6ICExO1xufVxuZnVuY3Rpb24gYlooZSwgdCkge1xuICByZXR1cm4gSTNbZV0gPT09IHZvaWQgMCA/ICExIDogdCA9PT0gdm9pZCAwID8gSTNbZV0gOiAoSTNbZV0gPSB0LCBlID09PSBcInNcIiAmJiAoSTMuc3MgPSB0IC0gMSksICEwKTtcbn1cbmZ1bmN0aW9uIE1aKGUsIHQpIHtcbiAgaWYgKCF0aGlzLmlzVmFsaWQoKSlcbiAgICByZXR1cm4gdGhpcy5sb2NhbGVEYXRhKCkuaW52YWxpZERhdGUoKTtcbiAgdmFyIG8gPSAhMSwgbiA9IEkzLCByLCBpO1xuICByZXR1cm4gdHlwZW9mIGUgPT0gXCJvYmplY3RcIiAmJiAodCA9IGUsIGUgPSAhMSksIHR5cGVvZiBlID09IFwiYm9vbGVhblwiICYmIChvID0gZSksIHR5cGVvZiB0ID09IFwib2JqZWN0XCIgJiYgKG4gPSBPYmplY3QuYXNzaWduKHt9LCBJMywgdCksIHQucyAhPSBudWxsICYmIHQuc3MgPT0gbnVsbCAmJiAobi5zcyA9IHQucyAtIDEpKSwgciA9IHRoaXMubG9jYWxlRGF0YSgpLCBpID0gcFoodGhpcywgIW8sIG4sIHIpLCBvICYmIChpID0gci5wYXN0RnV0dXJlKCt0aGlzLCBpKSksIHIucG9zdGZvcm1hdChpKTtcbn1cbnZhciBxYSA9IE1hdGguYWJzO1xuZnVuY3Rpb24gVzMoZSkge1xuICByZXR1cm4gKGUgPiAwKSAtIChlIDwgMCkgfHwgK2U7XG59XG5mdW5jdGlvbiBBaSgpIHtcbiAgaWYgKCF0aGlzLmlzVmFsaWQoKSlcbiAgICByZXR1cm4gdGhpcy5sb2NhbGVEYXRhKCkuaW52YWxpZERhdGUoKTtcbiAgdmFyIGUgPSBxYSh0aGlzLl9taWxsaXNlY29uZHMpIC8gMWUzLCB0ID0gcWEodGhpcy5fZGF5cyksIG8gPSBxYSh0aGlzLl9tb250aHMpLCBuLCByLCBpLCBhLCBzID0gdGhpcy5hc1NlY29uZHMoKSwgbCwgcCwgZCwgYjtcbiAgcmV0dXJuIHMgPyAobiA9IGFlKGUgLyA2MCksIHIgPSBhZShuIC8gNjApLCBlICU9IDYwLCBuICU9IDYwLCBpID0gYWUobyAvIDEyKSwgbyAlPSAxMiwgYSA9IGUgPyBlLnRvRml4ZWQoMykucmVwbGFjZSgvXFwuPzArJC8sIFwiXCIpIDogXCJcIiwgbCA9IHMgPCAwID8gXCItXCIgOiBcIlwiLCBwID0gVzModGhpcy5fbW9udGhzKSAhPT0gVzMocykgPyBcIi1cIiA6IFwiXCIsIGQgPSBXMyh0aGlzLl9kYXlzKSAhPT0gVzMocykgPyBcIi1cIiA6IFwiXCIsIGIgPSBXMyh0aGlzLl9taWxsaXNlY29uZHMpICE9PSBXMyhzKSA/IFwiLVwiIDogXCJcIiwgbCArIFwiUFwiICsgKGkgPyBwICsgaSArIFwiWVwiIDogXCJcIikgKyAobyA/IHAgKyBvICsgXCJNXCIgOiBcIlwiKSArICh0ID8gZCArIHQgKyBcIkRcIiA6IFwiXCIpICsgKHIgfHwgbiB8fCBlID8gXCJUXCIgOiBcIlwiKSArIChyID8gYiArIHIgKyBcIkhcIiA6IFwiXCIpICsgKG4gPyBiICsgbiArIFwiTVwiIDogXCJcIikgKyAoZSA/IGIgKyBhICsgXCJTXCIgOiBcIlwiKSkgOiBcIlAwRFwiO1xufVxudmFyIHgwID0gYmkucHJvdG90eXBlO1xueDAuaXNWYWxpZCA9IGFHO1xueDAuYWJzID0gSFE7XG54MC5hZGQgPSBWUTtcbngwLnN1YnRyYWN0ID0gUFE7XG54MC5hcyA9IFhRO1xueDAuYXNNaWxsaXNlY29uZHMgPSB4TTtcbngwLmFzU2Vjb25kcyA9IFVRO1xueDAuYXNNaW51dGVzID0gWVE7XG54MC5hc0hvdXJzID0gR1E7XG54MC5hc0RheXMgPSBRUTtcbngwLmFzV2Vla3MgPSBaUTtcbngwLmFzTW9udGhzID0galE7XG54MC5hc1F1YXJ0ZXJzID0gS1E7XG54MC5hc1llYXJzID0gSlE7XG54MC52YWx1ZU9mID0gX1E7XG54MC5fYnViYmxlID0gRlE7XG54MC5jbG9uZSA9ICRRO1xueDAuZ2V0ID0gZVo7XG54MC5taWxsaXNlY29uZHMgPSB0WjtcbngwLnNlY29uZHMgPSBvWjtcbngwLm1pbnV0ZXMgPSByWjtcbngwLmhvdXJzID0gblo7XG54MC5kYXlzID0gaVo7XG54MC53ZWVrcyA9IGNaO1xueDAubW9udGhzID0gYVo7XG54MC55ZWFycyA9IHNaO1xueDAuaHVtYW5pemUgPSBNWjtcbngwLnRvSVNPU3RyaW5nID0gQWk7XG54MC50b1N0cmluZyA9IEFpO1xueDAudG9KU09OID0gQWk7XG54MC5sb2NhbGUgPSB1TTtcbngwLmxvY2FsZURhdGEgPSBoTTtcbngwLnRvSXNvU3RyaW5nID0gdWUoXG4gIFwidG9Jc29TdHJpbmcoKSBpcyBkZXByZWNhdGVkLiBQbGVhc2UgdXNlIHRvSVNPU3RyaW5nKCkgaW5zdGVhZCAobm90aWNlIHRoZSBjYXBpdGFscylcIixcbiAgQWlcbik7XG54MC5sYW5nID0gek07XG5kMChcIlhcIiwgMCwgMCwgXCJ1bml4XCIpO1xuZDAoXCJ4XCIsIDAsIDAsIFwidmFsdWVPZlwiKTtcbnIwKFwieFwiLCBjaSk7XG5yMChcIlhcIiwga1UpO1xuWTAoXCJYXCIsIGZ1bmN0aW9uKGUsIHQsIG8pIHtcbiAgby5fZCA9IG5ldyBEYXRlKHBhcnNlRmxvYXQoZSkgKiAxZTMpO1xufSk7XG5ZMChcInhcIiwgZnVuY3Rpb24oZSwgdCwgbykge1xuICBvLl9kID0gbmV3IERhdGUocTAoZSkpO1xufSk7XG4vLyEgbW9tZW50LmpzXG4kMS52ZXJzaW9uID0gXCIyLjMwLjFcIjtcbkFVKEswKTtcbiQxLmZuID0gWTE7XG4kMS5taW4gPSBvRztcbiQxLm1heCA9IHJHO1xuJDEubm93ID0gbkc7XG4kMS51dGMgPSBRZTtcbiQxLnVuaXggPSBTUTtcbiQxLm1vbnRocyA9IGtRO1xuJDEuaXNEYXRlID0gVXI7XG4kMS5sb2NhbGUgPSBUdDtcbiQxLmludmFsaWQgPSBuaTtcbiQxLmR1cmF0aW9uID0gd2U7XG4kMS5pc01vbWVudCA9IHllO1xuJDEud2Vla2RheXMgPSBUUTtcbiQxLnBhcnNlWm9uZSA9IEVRO1xuJDEubG9jYWxlRGF0YSA9IHp0O1xuJDEuaXNEdXJhdGlvbiA9IEpuO1xuJDEubW9udGhzU2hvcnQgPSBOUTtcbiQxLndlZWtkYXlzTWluID0gRFE7XG4kMS5kZWZpbmVMb2NhbGUgPSBscztcbiQxLnVwZGF0ZUxvY2FsZSA9IEVZO1xuJDEubG9jYWxlcyA9IGtZO1xuJDEud2Vla2RheXNTaG9ydCA9IElRO1xuJDEubm9ybWFsaXplVW5pdHMgPSB6ZTtcbiQxLnJlbGF0aXZlVGltZVJvdW5kaW5nID0gZFo7XG4kMS5yZWxhdGl2ZVRpbWVUaHJlc2hvbGQgPSBiWjtcbiQxLmNhbGVuZGFyRm9ybWF0ID0gV0c7XG4kMS5wcm90b3R5cGUgPSBZMTtcbiQxLkhUTUw1X0ZNVCA9IHtcbiAgREFURVRJTUVfTE9DQUw6IFwiWVlZWS1NTS1ERFRISDptbVwiLFxuICAvLyA8aW5wdXQgdHlwZT1cImRhdGV0aW1lLWxvY2FsXCIgLz5cbiAgREFURVRJTUVfTE9DQUxfU0VDT05EUzogXCJZWVlZLU1NLUREVEhIOm1tOnNzXCIsXG4gIC8vIDxpbnB1dCB0eXBlPVwiZGF0ZXRpbWUtbG9jYWxcIiBzdGVwPVwiMVwiIC8+XG4gIERBVEVUSU1FX0xPQ0FMX01TOiBcIllZWVktTU0tRERUSEg6bW06c3MuU1NTXCIsXG4gIC8vIDxpbnB1dCB0eXBlPVwiZGF0ZXRpbWUtbG9jYWxcIiBzdGVwPVwiMC4wMDFcIiAvPlxuICBEQVRFOiBcIllZWVktTU0tRERcIixcbiAgLy8gPGlucHV0IHR5cGU9XCJkYXRlXCIgLz5cbiAgVElNRTogXCJISDptbVwiLFxuICAvLyA8aW5wdXQgdHlwZT1cInRpbWVcIiAvPlxuICBUSU1FX1NFQ09ORFM6IFwiSEg6bW06c3NcIixcbiAgLy8gPGlucHV0IHR5cGU9XCJ0aW1lXCIgc3RlcD1cIjFcIiAvPlxuICBUSU1FX01TOiBcIkhIOm1tOnNzLlNTU1wiLFxuICAvLyA8aW5wdXQgdHlwZT1cInRpbWVcIiBzdGVwPVwiMC4wMDFcIiAvPlxuICBXRUVLOiBcIkdHR0ctW1ddV1dcIixcbiAgLy8gPGlucHV0IHR5cGU9XCJ3ZWVrXCIgLz5cbiAgTU9OVEg6IFwiWVlZWS1NTVwiXG4gIC8vIDxpbnB1dCB0eXBlPVwibW9udGhcIiAvPlxufTtcbmNvbnN0IEFaID0gLyogQF9fUFVSRV9fICovIE9iamVjdC5mcmVlemUoLyogQF9fUFVSRV9fICovIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh7XG4gIF9fcHJvdG9fXzogbnVsbCxcbiAgZGVmYXVsdDogJDFcbn0sIFN5bWJvbC50b1N0cmluZ1RhZywgeyB2YWx1ZTogXCJNb2R1bGVcIiB9KSk7XG5mdW5jdGlvbiBKXyhlKSB7XG4gIGNvbnN0IHtcbiAgICBsYWJlbDogdCxcbiAgICBnZXRWYWx1ZTogbyxcbiAgICBpc0Rpc2FibGVkOiBuLFxuICAgIHBsYWNlaG9sZGVyOiByLFxuICAgIGlzUmVxdWlyZWQ6IGksXG4gICAgaXNFcnJvcjogYSxcbiAgICBkaXNhYmxlQ2xlYXI6IHMsXG4gICAgaGFuZGxlQ2xlYXJCdXR0b246IGwsXG4gICAgZGF0ZUZvcm1hdDogcCxcbiAgICBwb3BwZXJQbGFjZW1lbnQ6IGQsXG4gICAgbWluRGF0ZTogYixcbiAgICBtYXhEYXRlOiBNLFxuICAgICRpc1RpbWVab25lOiB1LFxuICAgIGlzRGF0ZTogQSxcbiAgICAkaXNUaW1lOiB6LFxuICAgIGRlZmF1bHRWYWx1ZTogZixcbiAgICBoaWRlQ2xlYXJCdXR0b246IE8sXG4gICAgLi4uaFxuICB9ID0gZSwgW2csIHZdID0gVDEobnVsbCksIFtMLCB5XSA9IFQxKCExKSwgW0IsIFhdID0gVDEoITEpLCBbRiwgVF0gPSBUMSghMSksIFt3LCBIXSA9IFQxKCExKSwgW0MsIHFdID0gVDEoXCJcIiksIFttLCBrXSA9IFQxKCksIFt4LCBOXSA9IFQxKCksIFYgPSBfMShcbiAgICAodDEpID0+IC8qIEBfX1BVUkVfXyAqLyBjKElwLCB7IC4uLnQxIH0pLFxuICAgIFtdXG4gICksIFIgPSBfMShcbiAgICAodDEpID0+IHQxLnN1YnN0cigwLCAxKSxcbiAgICBbXVxuICApLCBJID0gbjAoKTtcbiAgUDEoKCkgPT4ge1xuICAgIGNvbnN0IHQxID0gKGkxKSA9PiB7XG4gICAgICB2YXIgbjE7XG4gICAgICBGICYmIEkuY3VycmVudCAmJiAhKChuMSA9IEkgPT0gbnVsbCA/IHZvaWQgMCA6IEkuY3VycmVudCkgIT0gbnVsbCAmJiBuMS5jb250YWlucyhpMS50YXJnZXQpKSAmJiAoVCghMSksIHYobnVsbCkpO1xuICAgIH07XG4gICAgcmV0dXJuIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoXCJtb3VzZWRvd25cIiwgdDEpLCAoKSA9PiB7XG4gICAgICBkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKFwibW91c2Vkb3duXCIsIHQxKTtcbiAgICB9O1xuICB9LCBbRl0pLCBQMSgoKSA9PiB7XG4gICAgY29uc3QgdDEgPSAoaTEpID0+IHtcbiAgICAgIHZhciBuMTtcbiAgICAgIHcgJiYgSS5jdXJyZW50ICYmICEoKG4xID0gSSA9PSBudWxsID8gdm9pZCAwIDogSS5jdXJyZW50KSAhPSBudWxsICYmIG4xLmNvbnRhaW5zKGkxLnRhcmdldCkpICYmIEgoITEpO1xuICAgIH07XG4gICAgcmV0dXJuIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoXCJtb3VzZWRvd25cIiwgdDEpLCAoKSA9PiB7XG4gICAgICBkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKFwibW91c2Vkb3duXCIsIHQxKTtcbiAgICB9O1xuICB9LCBbd10pO1xuICBjb25zdCBqID0gbjAoKSwgVSA9IG0wKFxuICAgICgpID0+IC8qIEBfX1BVUkVfXyAqLyBjKFxuICAgICAgRTcsXG4gICAgICB7XG4gICAgICAgIHBsYWNlaG9sZGVyOiByLFxuICAgICAgICBpY29uUmlnaHQ6IFwiQ2FsZW5kYXJcIixcbiAgICAgICAgcmVhZE9ubHk6ICEwLFxuICAgICAgICBsYWJlbDogdCxcbiAgICAgICAgaXNSZXF1aXJlZDogaSxcbiAgICAgICAgaXNFcnJvcjogYSxcbiAgICAgICAgaXNEaXNhYmxlZDogbixcbiAgICAgICAgb25JbnB1dDogKCkgPT4ge1xuICAgICAgICAgIFQoIUYpO1xuICAgICAgICB9LFxuICAgICAgICBoYW5kbGVDbGVhckZuOiAoKSA9PiB7XG4gICAgICAgICAgbCAmJiBsKCksIG8gJiYgbyhudWxsKSwgdihudWxsKSwgcShcIlwiKSwgayhcIlwiKSwgVCghMSk7XG4gICAgICAgIH0sXG4gICAgICAgIG9uSWNvblJpZ2h0Q2xpY2s6ICgpID0+IHtcbiAgICAgICAgICBUKCFGKTtcbiAgICAgICAgfSxcbiAgICAgICAgaGlkZUNsZWFyQnV0dG9uOiBPXG4gICAgICB9XG4gICAgKSxcbiAgICBbbiwgYSwgTywgal1cbiAgKSwgXyA9IG0wKFxuICAgICgpID0+IC8qIEBfX1BVUkVfXyAqLyBjKFxuICAgICAgRTcsXG4gICAgICB7XG4gICAgICAgIGlzRGlzYWJsZWQ6IG4sXG4gICAgICAgIHBsYWNlaG9sZGVyOiByLFxuICAgICAgICBpY29uUmlnaHQ6IFwiVGltZVwiLFxuICAgICAgICByZWFkT25seTogITAsXG4gICAgICAgIGxhYmVsOiB0LFxuICAgICAgICBpc1JlcXVpcmVkOiBpLFxuICAgICAgICBpc0Vycm9yOiBhLFxuICAgICAgICB2YWx1ZTogQyxcbiAgICAgICAgaGFuZGxlQ2xlYXJGbjogKCkgPT4ge1xuICAgICAgICAgIGwgJiYgbCgpLCBvICYmIG8obnVsbCksIHEoXCJcIiksIEgoITEpO1xuICAgICAgICB9LFxuICAgICAgICBvbkljb25SaWdodENsaWNrOiAoKSA9PiB7XG4gICAgICAgICAgSCghdyk7XG4gICAgICAgIH0sXG4gICAgICAgIGhpZGVDbGVhckJ1dHRvbjogT1xuICAgICAgfVxuICAgICksXG4gICAgW0MsIG4sIE8sIHddXG4gICksIHIxID0gKHQxLCBpMSkgPT4gJDEodDEsIGkxID09IG51bGwgPyB2b2lkIDAgOiBpMS50b1VwcGVyQ2FzZSgpLCAhMCkuaXNWYWxpZCgpLCBLID0gXzEoXG4gICAgKHQxKSA9PiB7XG4gICAgICBYKCExKSwgdih0MSksIHkoITEpO1xuICAgIH0sXG4gICAgW3ldXG4gICksIFEgPSBfMSgoKSA9PiB7XG4gICAgeSghMCk7XG4gIH0sIFt5XSksIEUgPSBfMSgoKSA9PiB7XG4gICAgeSghMSk7XG4gIH0sIFt5XSksIEQgPSAoKSA9PiB7XG4gICAgaWYgKGIpXG4gICAgICByZXR1cm4gYjtcbiAgfSwgRyA9ICgpID0+IHtcbiAgICBpZiAoTSlcbiAgICAgIHJldHVybiBNO1xuICB9LCBKID0gKCkgPT4ge1xuICAgICFBICYmIG8gJiYgeiAmJiB1ICYmIChxKFwiXCIpLCBIKCExKSwgVCghMSkpLCAhQSAmJiBvICYmIHogJiYgIXUgJiYgKHEoXCJcIiksIEgoITEpLCBUKCExKSksIEEgJiYgbyAmJiBBICYmICF6ICYmICF1ICYmIHYobnVsbCksIEgoIXcpLCBUKCFGKTtcbiAgfSwgUyA9ICgpID0+IHtcbiAgICBsZXQgdDEgPSB7fTtcbiAgICBvICYmIGcgIT0gbnVsbCAmJiBBICYmIHIxKGouY3VycmVudC5pbnB1dC52YWx1ZSwgcCkgJiYgKHQxLnNlbGVjdGVkRGF0ZSA9IGcsIHggJiYgQyAmJiBtICYmIChDICYmICh0MS5zZWxlY3RlZFRpbWUgPSBDKSwgbSAmJiAodDEuc2VsZWN0ZWRUaW1lWm9uZSA9IG0pLCBvKHQxKSwgVCghMSkpLCAheCAmJiBtICYmIChDICYmICh0MS5zZWxlY3RlZFRpbWUgPSBDKSwgbSAmJiAodDEuc2VsZWN0ZWRUaW1lWm9uZSA9IG0pLCBvKHQxKSwgVCghMSkpLCBYKCEwKSksICFBICYmIG8gJiYgeiAmJiB1ICYmIChDICYmICh0MS5zZWxlY3RlZFRpbWUgPSBDKSwgbSAmJiAodDEuc2VsZWN0ZWRUaW1lWm9uZSA9IG0pLCBDICYmIG0gJiYgKG8odDEpLCBIKCExKSkpLCAhQSAmJiBvICYmIHogJiYgIXUgJiYgKEMgJiYgKHQxLnNlbGVjdGVkVGltZSA9IEMpLCBDICYmIChvKHQxKSwgSCghMSkpKTtcbiAgfTtcbiAgUDEoKCkgPT4ge1xuICAgICgoaCA9PSBudWxsID8gdm9pZCAwIDogaC52YWx1ZSkgPT0gbnVsbCB8fCAoaCA9PSBudWxsID8gdm9pZCAwIDogaC52YWx1ZSkgPT0gXCJcIikgJiYgdihudWxsKTtcbiAgfSwgW2ggPT0gbnVsbCA/IHZvaWQgMCA6IGgudmFsdWVdKTtcbiAgY29uc3QgVyA9ICgpID0+IC8qIEBfX1BVUkVfXyAqLyBjKFVXLCB7IGNoaWxkcmVuOiAvKiBAX19QVVJFX18gKi8gYyhcbiAgICBCMixcbiAgICB7XG4gICAgICBidXR0b25UeXBlOiBcImxpbmtcIixcbiAgICAgIGNoaWxkcmVuOiBcIlRvZGF5XCIsXG4gICAgICBpc0Rpc2FibGVkOiAhMSxcbiAgICAgIHNpemU6IFwic21cIlxuICAgIH1cbiAgKSB9KSwgUCA9ICh0MSkgPT4ge1xuICAgIHEodDEpO1xuICB9LCBZID0gKHQxKSA9PiB7XG4gICAgayh0MSksIHQxICE9IG51bGwgJiYgdDEgIT0gXCJcIiAmJiAheiAmJiB1ICYmIG8gJiYgbyh0MSk7XG4gIH0sIFogPSAodDEpID0+IHtcbiAgICBOKHQxKTtcbiAgfTtcbiAgcmV0dXJuIC8qIEBfX1BVUkVfXyAqLyBlMSh3cCwgeyBpc0Rpc2FibGVkOiBuLCByZWY6IEksIGNoaWxkcmVuOiBbXG4gICAgIXogJiYgIXUgJiYgLyogQF9fUFVSRV9fICovIGMoczAsIHsgY2hpbGRyZW46IC8qIEBfX1BVUkVfXyAqLyBlMShcbiAgICAgIHZwLFxuICAgICAge1xuICAgICAgICAuLi5oLFxuICAgICAgICBjbG9zZU9uU2Nyb2xsOiAhMCxcbiAgICAgICAgZGlzYWJsZWRLZXlib2FyZE5hdmlnYXRpb246ICEwLFxuICAgICAgICByZW5kZXJDdXN0b21IZWFkZXI6IFYsXG4gICAgICAgIGZvcm1hdFdlZWtEYXk6IFIsXG4gICAgICAgIG9uQ2hhbmdlOiBLLFxuICAgICAgICBvbkZvY3VzOiBRLFxuICAgICAgICBvbkJsdXI6IEUsXG4gICAgICAgIGN1c3RvbUlucHV0OiBVLFxuICAgICAgICBwbGFjZWhvbGRlclRleHQ6IHIsXG4gICAgICAgIHJlZjogaixcbiAgICAgICAgZGlzYWJsZWQ6IG4sXG4gICAgICAgIHNlbGVjdGVkOiBnIHx8IGYsXG4gICAgICAgIHBvcHBlclBsYWNlbWVudDogZCB8fCBcInRvcC1zdGFydFwiLFxuICAgICAgICBkYXRlRm9ybWF0OiBwIHx8IFwiTU1NTSBkLCB5eXl5XCIsXG4gICAgICAgIG1pbkRhdGU6IEQoKSxcbiAgICAgICAgbWF4RGF0ZTogRygpLFxuICAgICAgICBvcGVuOiBGLFxuICAgICAgICBzaG93VGltZVNlbGVjdE9ubHk6ICFBLFxuICAgICAgICB0b2RheUJ1dHRvbjogVygpLFxuICAgICAgICBwb3BwZXJQcm9wczogeyBzdHJhdGVneTogXCJmaXhlZFwiIH0sXG4gICAgICAgIGNoaWxkcmVuOiBbXG4gICAgICAgICAgLyogQF9fUFVSRV9fICovIGMoXG4gICAgICAgICAgICBDYSxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgJGlzVGltZVpvbmU6IHUsXG4gICAgICAgICAgICAgIGdldFNlbGVjdGVkVGltZTogUCxcbiAgICAgICAgICAgICAgZ2V0VGltZVpvbmVWYWx1ZTogWSxcbiAgICAgICAgICAgICAgcHJlU2VsZWN0ZWRUaW1lOiBDLFxuICAgICAgICAgICAgICBpc0RhdGU6IEEsXG4gICAgICAgICAgICAgICRpc1RpbWU6IHosXG4gICAgICAgICAgICAgIHNldElzQWN0aXZlVGltZTogWlxuICAgICAgICAgICAgfVxuICAgICAgICAgICksXG4gICAgICAgICAgLyogQF9fUFVSRV9fICovIGModjcsIHsgY2hpbGRyZW46IC8qIEBfX1BVUkVfXyAqLyBjKEw3LCB7IGNoaWxkcmVuOiAvKiBAX19QVVJFX18gKi8gZTEocTcsIHsgY2hpbGRyZW46IFtcbiAgICAgICAgICAgIC8qIEBfX1BVUkVfXyAqLyBjKFxuICAgICAgICAgICAgICBCMixcbiAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGJ1dHRvblR5cGU6IFwic2Vjb25kYXJ5XCIsXG4gICAgICAgICAgICAgICAgY2hpbGRyZW46IFwiQ2FuY2VsXCIsXG4gICAgICAgICAgICAgICAgaXNEaXNhYmxlZDogITEsXG4gICAgICAgICAgICAgICAgc2l6ZTogXCJzbVwiLFxuICAgICAgICAgICAgICAgIG9uQ2xpY2s6IEpcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgKSxcbiAgICAgICAgICAgIC8qIEBfX1BVUkVfXyAqLyBjKFxuICAgICAgICAgICAgICBCMixcbiAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGJ1dHRvblR5cGU6IFwicHJpbWFyeVwiLFxuICAgICAgICAgICAgICAgIGNoaWxkcmVuOiBcIkNvbmZpcm1cIixcbiAgICAgICAgICAgICAgICBpc0Rpc2FibGVkOiAhMSxcbiAgICAgICAgICAgICAgICBzaXplOiBcInNtXCIsXG4gICAgICAgICAgICAgICAgb25DbGljazogU1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICApXG4gICAgICAgICAgXSB9KSB9KSB9KVxuICAgICAgICBdXG4gICAgICB9XG4gICAgKSB9KSxcbiAgICAhQSAmJiB6ICYmIC8qIEBfX1BVUkVfXyAqLyBlMShzMCwgeyBjaGlsZHJlbjogW1xuICAgICAgXyxcbiAgICAgIHcgJiYgLyogQF9fUFVSRV9fICovIGUxKElXLCB7IGNoaWxkcmVuOiBbXG4gICAgICAgIC8qIEBfX1BVUkVfXyAqLyBjKFxuICAgICAgICAgIENhLFxuICAgICAgICAgIHtcbiAgICAgICAgICAgICRpc1RpbWVab25lOiB1LFxuICAgICAgICAgICAgZ2V0U2VsZWN0ZWRUaW1lOiBQLFxuICAgICAgICAgICAgZ2V0VGltZVpvbmVWYWx1ZTogWSxcbiAgICAgICAgICAgIGlzRGF0ZTogQSxcbiAgICAgICAgICAgICRpc1RpbWU6IHosXG4gICAgICAgICAgICBwcmVTZWxlY3RlZFRpbWU6IEMsXG4gICAgICAgICAgICBzZXRJc0FjdGl2ZVRpbWU6IFosXG4gICAgICAgICAgICBoYW5kbGVDbGVhckJ1dHRvbjogbCxcbiAgICAgICAgICAgIGhpZGVDbGVhckJ1dHRvbjogT1xuICAgICAgICAgIH1cbiAgICAgICAgKSxcbiAgICAgICAgLyogQF9fUFVSRV9fICovIGModjcsIHsgY2hpbGRyZW46IC8qIEBfX1BVUkVfXyAqLyBjKEw3LCB7IGNoaWxkcmVuOiAvKiBAX19QVVJFX18gKi8gZTEocTcsIHsgY2hpbGRyZW46IFtcbiAgICAgICAgICAvKiBAX19QVVJFX18gKi8gYyhcbiAgICAgICAgICAgIEIyLFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICBidXR0b25UeXBlOiBcInNlY29uZGFyeVwiLFxuICAgICAgICAgICAgICBjaGlsZHJlbjogXCJDYW5jZWxcIixcbiAgICAgICAgICAgICAgaXNEaXNhYmxlZDogITEsXG4gICAgICAgICAgICAgIHNpemU6IFwic21cIixcbiAgICAgICAgICAgICAgb25DbGljazogSlxuICAgICAgICAgICAgfVxuICAgICAgICAgICksXG4gICAgICAgICAgLyogQF9fUFVSRV9fICovIGMoXG4gICAgICAgICAgICBCMixcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgYnV0dG9uVHlwZTogXCJwcmltYXJ5XCIsXG4gICAgICAgICAgICAgIGNoaWxkcmVuOiBcIkNvbmZpcm1cIixcbiAgICAgICAgICAgICAgaXNEaXNhYmxlZDogITEsXG4gICAgICAgICAgICAgIHNpemU6IFwic21cIixcbiAgICAgICAgICAgICAgb25DbGljazogU1xuICAgICAgICAgICAgfVxuICAgICAgICAgIClcbiAgICAgICAgXSB9KSB9KSB9KVxuICAgICAgXSB9KVxuICAgIF0gfSksXG4gICAgIUEgJiYgIXogJiYgLyogQF9fUFVSRV9fICovIGMoXG4gICAgICBDYSxcbiAgICAgIHtcbiAgICAgICAgZ2V0U2VsZWN0ZWRUaW1lOiBQLFxuICAgICAgICBpc0RhdGU6IEEsXG4gICAgICAgICRpc1RpbWU6IHosXG4gICAgICAgICRpc1RpbWVab25lOiB1LFxuICAgICAgICBnZXRUaW1lWm9uZVZhbHVlOiBZLFxuICAgICAgICBpc0Rpc2FibGVkOiBuLFxuICAgICAgICBoYW5kbGVDbGVhckJ1dHRvbjogbCxcbiAgICAgICAgaGlkZUNsZWFyQnV0dG9uOiBPXG4gICAgICB9XG4gICAgKVxuICBdIH0pO1xufVxudmFyIHVaID0gZnVuY3Rpb24oZSkge1xuICB2YXIgdCA9IHt9O1xuICBmdW5jdGlvbiBvKG4pIHtcbiAgICBpZiAodFtuXSlcbiAgICAgIHJldHVybiB0W25dLmV4cG9ydHM7XG4gICAgdmFyIHIgPSB0W25dID0geyBpOiBuLCBsOiAhMSwgZXhwb3J0czoge30gfTtcbiAgICByZXR1cm4gZVtuXS5jYWxsKHIuZXhwb3J0cywgciwgci5leHBvcnRzLCBvKSwgci5sID0gITAsIHIuZXhwb3J0cztcbiAgfVxuICByZXR1cm4gby5tID0gZSwgby5jID0gdCwgby5kID0gZnVuY3Rpb24obiwgciwgaSkge1xuICAgIG8ubyhuLCByKSB8fCBPYmplY3QuZGVmaW5lUHJvcGVydHkobiwgciwgeyBlbnVtZXJhYmxlOiAhMCwgZ2V0OiBpIH0pO1xuICB9LCBvLnIgPSBmdW5jdGlvbihuKSB7XG4gICAgdHlwZW9mIFN5bWJvbCA8IFwidVwiICYmIFN5bWJvbC50b1N0cmluZ1RhZyAmJiBPYmplY3QuZGVmaW5lUHJvcGVydHkobiwgU3ltYm9sLnRvU3RyaW5nVGFnLCB7IHZhbHVlOiBcIk1vZHVsZVwiIH0pLCBPYmplY3QuZGVmaW5lUHJvcGVydHkobiwgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6ICEwIH0pO1xuICB9LCBvLnQgPSBmdW5jdGlvbihuLCByKSB7XG4gICAgaWYgKDEgJiByICYmIChuID0gbyhuKSksIDggJiByIHx8IDQgJiByICYmIHR5cGVvZiBuID09IFwib2JqZWN0XCIgJiYgbiAmJiBuLl9fZXNNb2R1bGUpXG4gICAgICByZXR1cm4gbjtcbiAgICB2YXIgaSA9IC8qIEBfX1BVUkVfXyAqLyBPYmplY3QuY3JlYXRlKG51bGwpO1xuICAgIGlmIChvLnIoaSksIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShpLCBcImRlZmF1bHRcIiwgeyBlbnVtZXJhYmxlOiAhMCwgdmFsdWU6IG4gfSksIDIgJiByICYmIHR5cGVvZiBuICE9IFwic3RyaW5nXCIpXG4gICAgICBmb3IgKHZhciBhIGluIG4pXG4gICAgICAgIG8uZChpLCBhLCAoZnVuY3Rpb24ocykge1xuICAgICAgICAgIHJldHVybiBuW3NdO1xuICAgICAgICB9KS5iaW5kKG51bGwsIGEpKTtcbiAgICByZXR1cm4gaTtcbiAgfSwgby5uID0gZnVuY3Rpb24obikge1xuICAgIHZhciByID0gbiAmJiBuLl9fZXNNb2R1bGUgPyBmdW5jdGlvbigpIHtcbiAgICAgIHJldHVybiBuLmRlZmF1bHQ7XG4gICAgfSA6IGZ1bmN0aW9uKCkge1xuICAgICAgcmV0dXJuIG47XG4gICAgfTtcbiAgICByZXR1cm4gby5kKHIsIFwiYVwiLCByKSwgcjtcbiAgfSwgby5vID0gZnVuY3Rpb24obiwgcikge1xuICAgIHJldHVybiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwobiwgcik7XG4gIH0sIG8ucCA9IFwiXCIsIG8oby5zID0gMzIpO1xufShbZnVuY3Rpb24oZSwgdCwgbykge1xuICBlLmV4cG9ydHMgPSBvKDI3KSgpO1xufSwgZnVuY3Rpb24oZSwgdCwgbykge1xuICBlLmV4cG9ydHMgPSBvKDI1KTtcbn0sIGZ1bmN0aW9uKGUsIHQsIG8pIHtcbiAgZS5leHBvcnRzID0gbygyMSk7XG59LCBmdW5jdGlvbihlLCB0LCBvKSB7XG4gIHZhciBuID0gbygyMCk7XG4gIGUuZXhwb3J0cyA9IGZ1bmN0aW9uKHIpIHtcbiAgICBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKylcbiAgICAgIGlmIChpICUgMikge1xuICAgICAgICB2YXIgYSA9IGFyZ3VtZW50c1tpXSAhPSBudWxsID8gYXJndW1lbnRzW2ldIDoge30sIHMgPSBPYmplY3Qua2V5cyhhKTtcbiAgICAgICAgdHlwZW9mIE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMgPT0gXCJmdW5jdGlvblwiICYmIChzID0gcy5jb25jYXQoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhhKS5maWx0ZXIoZnVuY3Rpb24obCkge1xuICAgICAgICAgIHJldHVybiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGEsIGwpLmVudW1lcmFibGU7XG4gICAgICAgIH0pKSksIHMuZm9yRWFjaChmdW5jdGlvbihsKSB7XG4gICAgICAgICAgbihyLCBsLCBhW2xdKTtcbiAgICAgICAgfSk7XG4gICAgICB9IGVsc2VcbiAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnRpZXMociwgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnMoYXJndW1lbnRzW2ldKSk7XG4gICAgcmV0dXJuIHI7XG4gIH07XG59LCBmdW5jdGlvbihlLCB0KSB7XG4gIGZ1bmN0aW9uIG8obiwgciwgaSwgYSwgcywgbCwgcCkge1xuICAgIHRyeSB7XG4gICAgICB2YXIgZCA9IG5bbF0ocCksIGIgPSBkLnZhbHVlO1xuICAgIH0gY2F0Y2ggKE0pIHtcbiAgICAgIHJldHVybiB2b2lkIGkoTSk7XG4gICAgfVxuICAgIGQuZG9uZSA/IHIoYikgOiBQcm9taXNlLnJlc29sdmUoYikudGhlbihhLCBzKTtcbiAgfVxuICBlLmV4cG9ydHMgPSBmdW5jdGlvbihuKSB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgICAgdmFyIHIgPSB0aGlzLCBpID0gYXJndW1lbnRzO1xuICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uKGEsIHMpIHtcbiAgICAgICAgdmFyIGwgPSBuLmFwcGx5KHIsIGkpO1xuICAgICAgICBmdW5jdGlvbiBwKGIpIHtcbiAgICAgICAgICBvKGwsIGEsIHMsIHAsIGQsIFwibmV4dFwiLCBiKTtcbiAgICAgICAgfVxuICAgICAgICBmdW5jdGlvbiBkKGIpIHtcbiAgICAgICAgICBvKGwsIGEsIHMsIHAsIGQsIFwidGhyb3dcIiwgYik7XG4gICAgICAgIH1cbiAgICAgICAgcCh2b2lkIDApO1xuICAgICAgfSk7XG4gICAgfTtcbiAgfTtcbn0sIGZ1bmN0aW9uKGUsIHQpIHtcbiAgZnVuY3Rpb24gbyhuKSB7XG4gICAgcmV0dXJuIGUuZXhwb3J0cyA9IG8gPSBPYmplY3Quc2V0UHJvdG90eXBlT2YgPyBPYmplY3QuZ2V0UHJvdG90eXBlT2YgOiBmdW5jdGlvbihyKSB7XG4gICAgICByZXR1cm4gci5fX3Byb3RvX18gfHwgT2JqZWN0LmdldFByb3RvdHlwZU9mKHIpO1xuICAgIH0sIG8obik7XG4gIH1cbiAgZS5leHBvcnRzID0gbztcbn0sIGZ1bmN0aW9uKGUsIHQpIHtcbiAgZS5leHBvcnRzID0gZnVuY3Rpb24obywgbikge1xuICAgIGlmICghKG8gaW5zdGFuY2VvZiBuKSlcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb25cIik7XG4gIH07XG59LCBmdW5jdGlvbihlLCB0KSB7XG4gIGZ1bmN0aW9uIG8obiwgcikge1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgci5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIGEgPSByW2ldO1xuICAgICAgYS5lbnVtZXJhYmxlID0gYS5lbnVtZXJhYmxlIHx8ICExLCBhLmNvbmZpZ3VyYWJsZSA9ICEwLCBcInZhbHVlXCIgaW4gYSAmJiAoYS53cml0YWJsZSA9ICEwKSwgT2JqZWN0LmRlZmluZVByb3BlcnR5KG4sIGEua2V5LCBhKTtcbiAgICB9XG4gIH1cbiAgZS5leHBvcnRzID0gZnVuY3Rpb24obiwgciwgaSkge1xuICAgIHJldHVybiByICYmIG8obi5wcm90b3R5cGUsIHIpLCBpICYmIG8obiwgaSksIG47XG4gIH07XG59LCBmdW5jdGlvbihlLCB0LCBvKSB7XG4gIHZhciBuID0gbygyMiksIHIgPSBvKDkpO1xuICBlLmV4cG9ydHMgPSBmdW5jdGlvbihpLCBhKSB7XG4gICAgcmV0dXJuICFhIHx8IG4oYSkgIT09IFwib2JqZWN0XCIgJiYgdHlwZW9mIGEgIT0gXCJmdW5jdGlvblwiID8gcihpKSA6IGE7XG4gIH07XG59LCBmdW5jdGlvbihlLCB0KSB7XG4gIGUuZXhwb3J0cyA9IGZ1bmN0aW9uKG8pIHtcbiAgICBpZiAobyA9PT0gdm9pZCAwKVxuICAgICAgdGhyb3cgbmV3IFJlZmVyZW5jZUVycm9yKFwidGhpcyBoYXNuJ3QgYmVlbiBpbml0aWFsaXNlZCAtIHN1cGVyKCkgaGFzbid0IGJlZW4gY2FsbGVkXCIpO1xuICAgIHJldHVybiBvO1xuICB9O1xufSwgZnVuY3Rpb24oZSwgdCwgbykge1xuICB2YXIgbiA9IG8oMjMpO1xuICBlLmV4cG9ydHMgPSBmdW5jdGlvbihyLCBpKSB7XG4gICAgaWYgKHR5cGVvZiBpICE9IFwiZnVuY3Rpb25cIiAmJiBpICE9PSBudWxsKVxuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlN1cGVyIGV4cHJlc3Npb24gbXVzdCBlaXRoZXIgYmUgbnVsbCBvciBhIGZ1bmN0aW9uXCIpO1xuICAgIHIucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShpICYmIGkucHJvdG90eXBlLCB7IGNvbnN0cnVjdG9yOiB7IHZhbHVlOiByLCB3cml0YWJsZTogITAsIGNvbmZpZ3VyYWJsZTogITAgfSB9KSwgaSAmJiBuKHIsIGkpO1xuICB9O1xufSwgZnVuY3Rpb24oZSwgdCwgbykge1xuICB2YXIgbiA9IG8oMjkpLCByID0gbygzMCksIGkgPSBvKDMxKTtcbiAgZS5leHBvcnRzID0gZnVuY3Rpb24oYSwgcykge1xuICAgIHJldHVybiBuKGEpIHx8IHIoYSwgcykgfHwgaSgpO1xuICB9O1xufSwgZnVuY3Rpb24oZSwgdCwgbykge1xuICB2YXIgbiA9IG8oMTcpLCByID0gbygxOCksIGkgPSBvKDE5KTtcbiAgZS5leHBvcnRzID0gZnVuY3Rpb24oYSkge1xuICAgIHJldHVybiBuKGEpIHx8IHIoYSkgfHwgaSgpO1xuICB9O1xufSwgZnVuY3Rpb24oZSwgdCwgbykge1xuICBvKDUpO1xuICB2YXIgbiA9IG8oMjQpO1xuICBmdW5jdGlvbiByKGksIGEsIHMpIHtcbiAgICByZXR1cm4gdHlwZW9mIFJlZmxlY3QgPCBcInVcIiAmJiBSZWZsZWN0LmdldCA/IGUuZXhwb3J0cyA9IHIgPSBSZWZsZWN0LmdldCA6IGUuZXhwb3J0cyA9IHIgPSBmdW5jdGlvbihsLCBwLCBkKSB7XG4gICAgICB2YXIgYiA9IG4obCwgcCk7XG4gICAgICBpZiAoYikge1xuICAgICAgICB2YXIgTSA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoYiwgcCk7XG4gICAgICAgIHJldHVybiBNLmdldCA/IE0uZ2V0LmNhbGwoZCkgOiBNLnZhbHVlO1xuICAgICAgfVxuICAgIH0sIHIoaSwgYSwgcyB8fCBpKTtcbiAgfVxuICBlLmV4cG9ydHMgPSByO1xufSwgZnVuY3Rpb24oZSwgdCkge1xuICBlLmV4cG9ydHMgPSBcImRhdGE6aW1hZ2Uvc3ZnK3htbDtiYXNlNjQsUEhOMlp5QjJhV1YzUW05NFBTSXdJREFnT0NBeE5DSWdlRzFzYm5NOUltaDBkSEE2THk5M2QzY3Vkek11YjNKbkx6SXdNREF2YzNabklqNDhaeUJtYVd4c1BTSWpNek16TXpNeklqNDhjR0YwYUNCa1BTSk5NU3d4TkNCRE1DNDBMREUwSURBc01UTXVOaUF3TERFeklFd3dMREVnUXpBc01DNDBJREF1TkN3d0lERXNNQ0JETVM0MkxEQWdNaXd3TGpRZ01pd3hJRXd5TERFeklFTXlMREV6TGpZZ01TNDJMREUwSURFc01UUWdXaUlnYVdROUlsQmhkR2dpUGp3dmNHRjBhRDQ4Y0dGMGFDQmtQU0pOTnl3eE5DQkROaTQwTERFMElEWXNNVE11TmlBMkxERXpJRXcyTERFZ1F6WXNNQzQwSURZdU5Dd3dJRGNzTUNCRE55NDJMREFnT0N3d0xqUWdPQ3d4SUV3NExERXpJRU00TERFekxqWWdOeTQyTERFMElEY3NNVFFnV2lJZ2FXUTlJbEJoZEdnaVBqd3ZjR0YwYUQ0OEwyYytQQzl6ZG1jK0NnPT1cIjtcbn0sIGZ1bmN0aW9uKGUsIHQpIHtcbiAgZS5leHBvcnRzID0gXCJkYXRhOmltYWdlL3N2Zyt4bWw7YmFzZTY0LFBITjJaeUIyYVdWM1FtOTRQU0l3SURBZ01UUWdNVFFpSUhodGJHNXpQU0pvZEhSd09pOHZkM2QzTG5jekxtOXlaeTh5TURBd0wzTjJaeUkrUEdjZ2RISmhibk5tYjNKdFBTSjBjbUZ1YzJ4aGRHVW9MVFV1TUN3Z01DNHdLU0lnWm1sc2JEMGlJek16TXpNek15SStQR2NnZEhKaGJuTm1iM0p0UFNKMGNtRnVjMnhoZEdVb05DNHdMQ0F3TGpBcElqNDhjRzlzZVdkdmJpQndiMmx1ZEhNOUlqY3VOekU1SURRdU9UWTBJREV5TGpZNU1pQXdMakF4TnlBeE5DNHpPRGtnTVM0M01UVWdPUzQwTVRJZ05pNDJOallnTVRRdU16VTBJREV4TGpZek5DQXhNaTQyTlRjZ01UTXVNek14SURZdU1ERTNJRFl1TmpVM0lEY3VOekUxSURRdU9UWXdJajQ4TDNCdmJIbG5iMjQrUEhCdmJIbG5iMjRnY0c5cGJuUnpQU0kzTGpZeE1pQTBMamsyTkNBM0xqWXhOaUEwTGprMk1DQTVMak14TXlBMkxqWTFOeUF5TGpZM05DQXhNeTR6TXpFZ01DNDVOemNnTVRFdU5qTTBJRFV1T1RFNUlEWXVOalkySURBdU9UUXlJREV1TnpFMUlESXVOak01SURBdU1ERTNJajQ4TDNCdmJIbG5iMjQrUEM5blBqd3ZaejQ4TDNOMlp6NEtcIjtcbn0sIGZ1bmN0aW9uKGUsIHQpIHtcbiAgZS5leHBvcnRzID0gXCJkYXRhOmltYWdlL3N2Zyt4bWw7YmFzZTY0LFBITjJaeUIyYVdWM1FtOTRQU0l3SURBZ01URWdNVFVpSUhodGJHNXpQU0pvZEhSd09pOHZkM2QzTG5jekxtOXlaeTh5TURBd0wzTjJaeUkrUEdjK1BIQmhkR2dnWkQwaVRUQXVOU3d4TkM0NUlFTXdMaklzTVRRdU55QXdMREUwTGpRZ01Dd3hOQ0JNTUN3eUlFTXdMREV1TmlBd0xqSXNNUzR6SURBdU5Td3hMakVnUXpBdU9Dd3dMamtnTVM0eUxEQXVPU0F4TGpVc01TNHhJRXd4TUM0MUxEY3VNU0JETVRBdU9DdzNMak1nTVRBdU9TdzNMallnTVRBdU9TdzNMamtnUXpFd0xqa3NPQzR5SURFd0xqY3NPQzQxSURFd0xqVXNPQzQzSUV3eExqVXNNVFF1TnlCRE1TNDBMREUwTGprZ01DNDRMREUxTGpFZ01DNDFMREUwTGprZ1dpQk5NaXd6TGprZ1RESXNNVEl1TWlCTU9DNHlMRGd1TVNCTU1pd3pMamtnV2lJK1BDOXdZWFJvUGp3dlp6NDhMM04yWno0S1wiO1xufSwgZnVuY3Rpb24oZSwgdCkge1xuICBlLmV4cG9ydHMgPSBmdW5jdGlvbihvKSB7XG4gICAgaWYgKEFycmF5LmlzQXJyYXkobykpIHtcbiAgICAgIGZvciAodmFyIG4gPSAwLCByID0gbmV3IEFycmF5KG8ubGVuZ3RoKTsgbiA8IG8ubGVuZ3RoOyBuKyspXG4gICAgICAgIHJbbl0gPSBvW25dO1xuICAgICAgcmV0dXJuIHI7XG4gICAgfVxuICB9O1xufSwgZnVuY3Rpb24oZSwgdCkge1xuICBlLmV4cG9ydHMgPSBmdW5jdGlvbihvKSB7XG4gICAgaWYgKFN5bWJvbC5pdGVyYXRvciBpbiBPYmplY3QobykgfHwgT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKG8pID09PSBcIltvYmplY3QgQXJndW1lbnRzXVwiKVxuICAgICAgcmV0dXJuIEFycmF5LmZyb20obyk7XG4gIH07XG59LCBmdW5jdGlvbihlLCB0KSB7XG4gIGUuZXhwb3J0cyA9IGZ1bmN0aW9uKCkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJJbnZhbGlkIGF0dGVtcHQgdG8gc3ByZWFkIG5vbi1pdGVyYWJsZSBpbnN0YW5jZVwiKTtcbiAgfTtcbn0sIGZ1bmN0aW9uKGUsIHQpIHtcbiAgZS5leHBvcnRzID0gZnVuY3Rpb24obywgbiwgcikge1xuICAgIHJldHVybiBuIGluIG8gPyBPYmplY3QuZGVmaW5lUHJvcGVydHkobywgbiwgeyB2YWx1ZTogciwgZW51bWVyYWJsZTogITAsIGNvbmZpZ3VyYWJsZTogITAsIHdyaXRhYmxlOiAhMCB9KSA6IG9bbl0gPSByLCBvO1xuICB9O1xufSwgZnVuY3Rpb24oZSwgdCwgbykge1xuICB2YXIgbiA9IGZ1bmN0aW9uKHIpIHtcbiAgICB2YXIgaSwgYSA9IE9iamVjdC5wcm90b3R5cGUsIHMgPSBhLmhhc093blByb3BlcnR5LCBsID0gdHlwZW9mIFN5bWJvbCA9PSBcImZ1bmN0aW9uXCIgPyBTeW1ib2wgOiB7fSwgcCA9IGwuaXRlcmF0b3IgfHwgXCJAQGl0ZXJhdG9yXCIsIGQgPSBsLmFzeW5jSXRlcmF0b3IgfHwgXCJAQGFzeW5jSXRlcmF0b3JcIiwgYiA9IGwudG9TdHJpbmdUYWcgfHwgXCJAQHRvU3RyaW5nVGFnXCI7XG4gICAgZnVuY3Rpb24gTShOLCBWLCBSLCBJKSB7XG4gICAgICB2YXIgaiA9IFYgJiYgVi5wcm90b3R5cGUgaW5zdGFuY2VvZiBnID8gViA6IGcsIFUgPSBPYmplY3QuY3JlYXRlKGoucHJvdG90eXBlKSwgXyA9IG5ldyBtKEkgfHwgW10pO1xuICAgICAgcmV0dXJuIFUuX2ludm9rZSA9IGZ1bmN0aW9uKHIxLCBLLCBRKSB7XG4gICAgICAgIHZhciBFID0gQTtcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uKEQsIEcpIHtcbiAgICAgICAgICBpZiAoRSA9PT0gZilcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIkdlbmVyYXRvciBpcyBhbHJlYWR5IHJ1bm5pbmdcIik7XG4gICAgICAgICAgaWYgKEUgPT09IE8pIHtcbiAgICAgICAgICAgIGlmIChEID09PSBcInRocm93XCIpXG4gICAgICAgICAgICAgIHRocm93IEc7XG4gICAgICAgICAgICByZXR1cm4geCgpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBmb3IgKFEubWV0aG9kID0gRCwgUS5hcmcgPSBHOyA7ICkge1xuICAgICAgICAgICAgdmFyIEogPSBRLmRlbGVnYXRlO1xuICAgICAgICAgICAgaWYgKEopIHtcbiAgICAgICAgICAgICAgdmFyIFMgPSBIKEosIFEpO1xuICAgICAgICAgICAgICBpZiAoUykge1xuICAgICAgICAgICAgICAgIGlmIChTID09PSBoKVxuICAgICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAgICAgcmV0dXJuIFM7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChRLm1ldGhvZCA9PT0gXCJuZXh0XCIpXG4gICAgICAgICAgICAgIFEuc2VudCA9IFEuX3NlbnQgPSBRLmFyZztcbiAgICAgICAgICAgIGVsc2UgaWYgKFEubWV0aG9kID09PSBcInRocm93XCIpIHtcbiAgICAgICAgICAgICAgaWYgKEUgPT09IEEpXG4gICAgICAgICAgICAgICAgdGhyb3cgRSA9IE8sIFEuYXJnO1xuICAgICAgICAgICAgICBRLmRpc3BhdGNoRXhjZXB0aW9uKFEuYXJnKTtcbiAgICAgICAgICAgIH0gZWxzZVxuICAgICAgICAgICAgICBRLm1ldGhvZCA9PT0gXCJyZXR1cm5cIiAmJiBRLmFicnVwdChcInJldHVyblwiLCBRLmFyZyk7XG4gICAgICAgICAgICBFID0gZjtcbiAgICAgICAgICAgIHZhciBXID0gdShyMSwgSywgUSk7XG4gICAgICAgICAgICBpZiAoVy50eXBlID09PSBcIm5vcm1hbFwiKSB7XG4gICAgICAgICAgICAgIGlmIChFID0gUS5kb25lID8gTyA6IHosIFcuYXJnID09PSBoKVxuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgICByZXR1cm4geyB2YWx1ZTogVy5hcmcsIGRvbmU6IFEuZG9uZSB9O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgVy50eXBlID09PSBcInRocm93XCIgJiYgKEUgPSBPLCBRLm1ldGhvZCA9IFwidGhyb3dcIiwgUS5hcmcgPSBXLmFyZyk7XG4gICAgICAgICAgfVxuICAgICAgICB9O1xuICAgICAgfShOLCBSLCBfKSwgVTtcbiAgICB9XG4gICAgZnVuY3Rpb24gdShOLCBWLCBSKSB7XG4gICAgICB0cnkge1xuICAgICAgICByZXR1cm4geyB0eXBlOiBcIm5vcm1hbFwiLCBhcmc6IE4uY2FsbChWLCBSKSB9O1xuICAgICAgfSBjYXRjaCAoSSkge1xuICAgICAgICByZXR1cm4geyB0eXBlOiBcInRocm93XCIsIGFyZzogSSB9O1xuICAgICAgfVxuICAgIH1cbiAgICByLndyYXAgPSBNO1xuICAgIHZhciBBID0gXCJzdXNwZW5kZWRTdGFydFwiLCB6ID0gXCJzdXNwZW5kZWRZaWVsZFwiLCBmID0gXCJleGVjdXRpbmdcIiwgTyA9IFwiY29tcGxldGVkXCIsIGggPSB7fTtcbiAgICBmdW5jdGlvbiBnKCkge1xuICAgIH1cbiAgICBmdW5jdGlvbiB2KCkge1xuICAgIH1cbiAgICBmdW5jdGlvbiBMKCkge1xuICAgIH1cbiAgICB2YXIgeSA9IHt9O1xuICAgIHlbcF0gPSBmdW5jdGlvbigpIHtcbiAgICAgIHJldHVybiB0aGlzO1xuICAgIH07XG4gICAgdmFyIEIgPSBPYmplY3QuZ2V0UHJvdG90eXBlT2YsIFggPSBCICYmIEIoQihrKFtdKSkpO1xuICAgIFggJiYgWCAhPT0gYSAmJiBzLmNhbGwoWCwgcCkgJiYgKHkgPSBYKTtcbiAgICB2YXIgRiA9IEwucHJvdG90eXBlID0gZy5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKHkpO1xuICAgIGZ1bmN0aW9uIFQoTikge1xuICAgICAgW1wibmV4dFwiLCBcInRocm93XCIsIFwicmV0dXJuXCJdLmZvckVhY2goZnVuY3Rpb24oVikge1xuICAgICAgICBOW1ZdID0gZnVuY3Rpb24oUikge1xuICAgICAgICAgIHJldHVybiB0aGlzLl9pbnZva2UoViwgUik7XG4gICAgICAgIH07XG4gICAgICB9KTtcbiAgICB9XG4gICAgZnVuY3Rpb24gdyhOKSB7XG4gICAgICB2YXIgVjtcbiAgICAgIHRoaXMuX2ludm9rZSA9IGZ1bmN0aW9uKFIsIEkpIHtcbiAgICAgICAgZnVuY3Rpb24gaigpIHtcbiAgICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24oVSwgXykge1xuICAgICAgICAgICAgKGZ1bmN0aW9uIHIxKEssIFEsIEUsIEQpIHtcbiAgICAgICAgICAgICAgdmFyIEcgPSB1KE5bS10sIE4sIFEpO1xuICAgICAgICAgICAgICBpZiAoRy50eXBlICE9PSBcInRocm93XCIpIHtcbiAgICAgICAgICAgICAgICB2YXIgSiA9IEcuYXJnLCBTID0gSi52YWx1ZTtcbiAgICAgICAgICAgICAgICByZXR1cm4gUyAmJiB0eXBlb2YgUyA9PSBcIm9iamVjdFwiICYmIHMuY2FsbChTLCBcIl9fYXdhaXRcIikgPyBQcm9taXNlLnJlc29sdmUoUy5fX2F3YWl0KS50aGVuKGZ1bmN0aW9uKFcpIHtcbiAgICAgICAgICAgICAgICAgIHIxKFwibmV4dFwiLCBXLCBFLCBEKTtcbiAgICAgICAgICAgICAgICB9LCBmdW5jdGlvbihXKSB7XG4gICAgICAgICAgICAgICAgICByMShcInRocm93XCIsIFcsIEUsIEQpO1xuICAgICAgICAgICAgICAgIH0pIDogUHJvbWlzZS5yZXNvbHZlKFMpLnRoZW4oZnVuY3Rpb24oVykge1xuICAgICAgICAgICAgICAgICAgSi52YWx1ZSA9IFcsIEUoSik7XG4gICAgICAgICAgICAgICAgfSwgZnVuY3Rpb24oVykge1xuICAgICAgICAgICAgICAgICAgcmV0dXJuIHIxKFwidGhyb3dcIiwgVywgRSwgRCk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgRChHLmFyZyk7XG4gICAgICAgICAgICB9KShSLCBJLCBVLCBfKTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gViA9IFYgPyBWLnRoZW4oaiwgaikgOiBqKCk7XG4gICAgICB9O1xuICAgIH1cbiAgICBmdW5jdGlvbiBIKE4sIFYpIHtcbiAgICAgIHZhciBSID0gTi5pdGVyYXRvcltWLm1ldGhvZF07XG4gICAgICBpZiAoUiA9PT0gaSkge1xuICAgICAgICBpZiAoVi5kZWxlZ2F0ZSA9IG51bGwsIFYubWV0aG9kID09PSBcInRocm93XCIpIHtcbiAgICAgICAgICBpZiAoTi5pdGVyYXRvci5yZXR1cm4gJiYgKFYubWV0aG9kID0gXCJyZXR1cm5cIiwgVi5hcmcgPSBpLCBIKE4sIFYpLCBWLm1ldGhvZCA9PT0gXCJ0aHJvd1wiKSlcbiAgICAgICAgICAgIHJldHVybiBoO1xuICAgICAgICAgIFYubWV0aG9kID0gXCJ0aHJvd1wiLCBWLmFyZyA9IG5ldyBUeXBlRXJyb3IoXCJUaGUgaXRlcmF0b3IgZG9lcyBub3QgcHJvdmlkZSBhICd0aHJvdycgbWV0aG9kXCIpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBoO1xuICAgICAgfVxuICAgICAgdmFyIEkgPSB1KFIsIE4uaXRlcmF0b3IsIFYuYXJnKTtcbiAgICAgIGlmIChJLnR5cGUgPT09IFwidGhyb3dcIilcbiAgICAgICAgcmV0dXJuIFYubWV0aG9kID0gXCJ0aHJvd1wiLCBWLmFyZyA9IEkuYXJnLCBWLmRlbGVnYXRlID0gbnVsbCwgaDtcbiAgICAgIHZhciBqID0gSS5hcmc7XG4gICAgICByZXR1cm4gaiA/IGouZG9uZSA/IChWW04ucmVzdWx0TmFtZV0gPSBqLnZhbHVlLCBWLm5leHQgPSBOLm5leHRMb2MsIFYubWV0aG9kICE9PSBcInJldHVyblwiICYmIChWLm1ldGhvZCA9IFwibmV4dFwiLCBWLmFyZyA9IGkpLCBWLmRlbGVnYXRlID0gbnVsbCwgaCkgOiBqIDogKFYubWV0aG9kID0gXCJ0aHJvd1wiLCBWLmFyZyA9IG5ldyBUeXBlRXJyb3IoXCJpdGVyYXRvciByZXN1bHQgaXMgbm90IGFuIG9iamVjdFwiKSwgVi5kZWxlZ2F0ZSA9IG51bGwsIGgpO1xuICAgIH1cbiAgICBmdW5jdGlvbiBDKE4pIHtcbiAgICAgIHZhciBWID0geyB0cnlMb2M6IE5bMF0gfTtcbiAgICAgIDEgaW4gTiAmJiAoVi5jYXRjaExvYyA9IE5bMV0pLCAyIGluIE4gJiYgKFYuZmluYWxseUxvYyA9IE5bMl0sIFYuYWZ0ZXJMb2MgPSBOWzNdKSwgdGhpcy50cnlFbnRyaWVzLnB1c2goVik7XG4gICAgfVxuICAgIGZ1bmN0aW9uIHEoTikge1xuICAgICAgdmFyIFYgPSBOLmNvbXBsZXRpb24gfHwge307XG4gICAgICBWLnR5cGUgPSBcIm5vcm1hbFwiLCBkZWxldGUgVi5hcmcsIE4uY29tcGxldGlvbiA9IFY7XG4gICAgfVxuICAgIGZ1bmN0aW9uIG0oTikge1xuICAgICAgdGhpcy50cnlFbnRyaWVzID0gW3sgdHJ5TG9jOiBcInJvb3RcIiB9XSwgTi5mb3JFYWNoKEMsIHRoaXMpLCB0aGlzLnJlc2V0KCEwKTtcbiAgICB9XG4gICAgZnVuY3Rpb24gayhOKSB7XG4gICAgICBpZiAoTikge1xuICAgICAgICB2YXIgViA9IE5bcF07XG4gICAgICAgIGlmIChWKVxuICAgICAgICAgIHJldHVybiBWLmNhbGwoTik7XG4gICAgICAgIGlmICh0eXBlb2YgTi5uZXh0ID09IFwiZnVuY3Rpb25cIilcbiAgICAgICAgICByZXR1cm4gTjtcbiAgICAgICAgaWYgKCFpc05hTihOLmxlbmd0aCkpIHtcbiAgICAgICAgICB2YXIgUiA9IC0xLCBJID0gZnVuY3Rpb24gaigpIHtcbiAgICAgICAgICAgIGZvciAoOyArK1IgPCBOLmxlbmd0aDsgKVxuICAgICAgICAgICAgICBpZiAocy5jYWxsKE4sIFIpKVxuICAgICAgICAgICAgICAgIHJldHVybiBqLnZhbHVlID0gTltSXSwgai5kb25lID0gITEsIGo7XG4gICAgICAgICAgICByZXR1cm4gai52YWx1ZSA9IGksIGouZG9uZSA9ICEwLCBqO1xuICAgICAgICAgIH07XG4gICAgICAgICAgcmV0dXJuIEkubmV4dCA9IEk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiB7IG5leHQ6IHggfTtcbiAgICB9XG4gICAgZnVuY3Rpb24geCgpIHtcbiAgICAgIHJldHVybiB7IHZhbHVlOiBpLCBkb25lOiAhMCB9O1xuICAgIH1cbiAgICByZXR1cm4gdi5wcm90b3R5cGUgPSBGLmNvbnN0cnVjdG9yID0gTCwgTC5jb25zdHJ1Y3RvciA9IHYsIExbYl0gPSB2LmRpc3BsYXlOYW1lID0gXCJHZW5lcmF0b3JGdW5jdGlvblwiLCByLmlzR2VuZXJhdG9yRnVuY3Rpb24gPSBmdW5jdGlvbihOKSB7XG4gICAgICB2YXIgViA9IHR5cGVvZiBOID09IFwiZnVuY3Rpb25cIiAmJiBOLmNvbnN0cnVjdG9yO1xuICAgICAgcmV0dXJuICEhViAmJiAoViA9PT0gdiB8fCAoVi5kaXNwbGF5TmFtZSB8fCBWLm5hbWUpID09PSBcIkdlbmVyYXRvckZ1bmN0aW9uXCIpO1xuICAgIH0sIHIubWFyayA9IGZ1bmN0aW9uKE4pIHtcbiAgICAgIHJldHVybiBPYmplY3Quc2V0UHJvdG90eXBlT2YgPyBPYmplY3Quc2V0UHJvdG90eXBlT2YoTiwgTCkgOiAoTi5fX3Byb3RvX18gPSBMLCBiIGluIE4gfHwgKE5bYl0gPSBcIkdlbmVyYXRvckZ1bmN0aW9uXCIpKSwgTi5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKEYpLCBOO1xuICAgIH0sIHIuYXdyYXAgPSBmdW5jdGlvbihOKSB7XG4gICAgICByZXR1cm4geyBfX2F3YWl0OiBOIH07XG4gICAgfSwgVCh3LnByb3RvdHlwZSksIHcucHJvdG90eXBlW2RdID0gZnVuY3Rpb24oKSB7XG4gICAgICByZXR1cm4gdGhpcztcbiAgICB9LCByLkFzeW5jSXRlcmF0b3IgPSB3LCByLmFzeW5jID0gZnVuY3Rpb24oTiwgViwgUiwgSSkge1xuICAgICAgdmFyIGogPSBuZXcgdyhNKE4sIFYsIFIsIEkpKTtcbiAgICAgIHJldHVybiByLmlzR2VuZXJhdG9yRnVuY3Rpb24oVikgPyBqIDogai5uZXh0KCkudGhlbihmdW5jdGlvbihVKSB7XG4gICAgICAgIHJldHVybiBVLmRvbmUgPyBVLnZhbHVlIDogai5uZXh0KCk7XG4gICAgICB9KTtcbiAgICB9LCBUKEYpLCBGW2JdID0gXCJHZW5lcmF0b3JcIiwgRltwXSA9IGZ1bmN0aW9uKCkge1xuICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfSwgRi50b1N0cmluZyA9IGZ1bmN0aW9uKCkge1xuICAgICAgcmV0dXJuIFwiW29iamVjdCBHZW5lcmF0b3JdXCI7XG4gICAgfSwgci5rZXlzID0gZnVuY3Rpb24oTikge1xuICAgICAgdmFyIFYgPSBbXTtcbiAgICAgIGZvciAodmFyIFIgaW4gTilcbiAgICAgICAgVi5wdXNoKFIpO1xuICAgICAgcmV0dXJuIFYucmV2ZXJzZSgpLCBmdW5jdGlvbiBJKCkge1xuICAgICAgICBmb3IgKDsgVi5sZW5ndGg7ICkge1xuICAgICAgICAgIHZhciBqID0gVi5wb3AoKTtcbiAgICAgICAgICBpZiAoaiBpbiBOKVxuICAgICAgICAgICAgcmV0dXJuIEkudmFsdWUgPSBqLCBJLmRvbmUgPSAhMSwgSTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gSS5kb25lID0gITAsIEk7XG4gICAgICB9O1xuICAgIH0sIHIudmFsdWVzID0gaywgbS5wcm90b3R5cGUgPSB7IGNvbnN0cnVjdG9yOiBtLCByZXNldDogZnVuY3Rpb24oTikge1xuICAgICAgaWYgKHRoaXMucHJldiA9IDAsIHRoaXMubmV4dCA9IDAsIHRoaXMuc2VudCA9IHRoaXMuX3NlbnQgPSBpLCB0aGlzLmRvbmUgPSAhMSwgdGhpcy5kZWxlZ2F0ZSA9IG51bGwsIHRoaXMubWV0aG9kID0gXCJuZXh0XCIsIHRoaXMuYXJnID0gaSwgdGhpcy50cnlFbnRyaWVzLmZvckVhY2gocSksICFOKVxuICAgICAgICBmb3IgKHZhciBWIGluIHRoaXMpXG4gICAgICAgICAgVi5jaGFyQXQoMCkgPT09IFwidFwiICYmIHMuY2FsbCh0aGlzLCBWKSAmJiAhaXNOYU4oK1Yuc2xpY2UoMSkpICYmICh0aGlzW1ZdID0gaSk7XG4gICAgfSwgc3RvcDogZnVuY3Rpb24oKSB7XG4gICAgICB0aGlzLmRvbmUgPSAhMDtcbiAgICAgIHZhciBOID0gdGhpcy50cnlFbnRyaWVzWzBdLmNvbXBsZXRpb247XG4gICAgICBpZiAoTi50eXBlID09PSBcInRocm93XCIpXG4gICAgICAgIHRocm93IE4uYXJnO1xuICAgICAgcmV0dXJuIHRoaXMucnZhbDtcbiAgICB9LCBkaXNwYXRjaEV4Y2VwdGlvbjogZnVuY3Rpb24oTikge1xuICAgICAgaWYgKHRoaXMuZG9uZSlcbiAgICAgICAgdGhyb3cgTjtcbiAgICAgIHZhciBWID0gdGhpcztcbiAgICAgIGZ1bmN0aW9uIFIoSywgUSkge1xuICAgICAgICByZXR1cm4gVS50eXBlID0gXCJ0aHJvd1wiLCBVLmFyZyA9IE4sIFYubmV4dCA9IEssIFEgJiYgKFYubWV0aG9kID0gXCJuZXh0XCIsIFYuYXJnID0gaSksICEhUTtcbiAgICAgIH1cbiAgICAgIGZvciAodmFyIEkgPSB0aGlzLnRyeUVudHJpZXMubGVuZ3RoIC0gMTsgMCA8PSBJOyAtLUkpIHtcbiAgICAgICAgdmFyIGogPSB0aGlzLnRyeUVudHJpZXNbSV0sIFUgPSBqLmNvbXBsZXRpb247XG4gICAgICAgIGlmIChqLnRyeUxvYyA9PT0gXCJyb290XCIpXG4gICAgICAgICAgcmV0dXJuIFIoXCJlbmRcIik7XG4gICAgICAgIGlmIChqLnRyeUxvYyA8PSB0aGlzLnByZXYpIHtcbiAgICAgICAgICB2YXIgXyA9IHMuY2FsbChqLCBcImNhdGNoTG9jXCIpLCByMSA9IHMuY2FsbChqLCBcImZpbmFsbHlMb2NcIik7XG4gICAgICAgICAgaWYgKF8gJiYgcjEpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLnByZXYgPCBqLmNhdGNoTG9jKVxuICAgICAgICAgICAgICByZXR1cm4gUihqLmNhdGNoTG9jLCAhMCk7XG4gICAgICAgICAgICBpZiAodGhpcy5wcmV2IDwgai5maW5hbGx5TG9jKVxuICAgICAgICAgICAgICByZXR1cm4gUihqLmZpbmFsbHlMb2MpO1xuICAgICAgICAgIH0gZWxzZSBpZiAoXykge1xuICAgICAgICAgICAgaWYgKHRoaXMucHJldiA8IGouY2F0Y2hMb2MpXG4gICAgICAgICAgICAgIHJldHVybiBSKGouY2F0Y2hMb2MsICEwKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgaWYgKCFyMSlcbiAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwidHJ5IHN0YXRlbWVudCB3aXRob3V0IGNhdGNoIG9yIGZpbmFsbHlcIik7XG4gICAgICAgICAgICBpZiAodGhpcy5wcmV2IDwgai5maW5hbGx5TG9jKVxuICAgICAgICAgICAgICByZXR1cm4gUihqLmZpbmFsbHlMb2MpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0sIGFicnVwdDogZnVuY3Rpb24oTiwgVikge1xuICAgICAgZm9yICh2YXIgUiA9IHRoaXMudHJ5RW50cmllcy5sZW5ndGggLSAxOyAwIDw9IFI7IC0tUikge1xuICAgICAgICB2YXIgSSA9IHRoaXMudHJ5RW50cmllc1tSXTtcbiAgICAgICAgaWYgKEkudHJ5TG9jIDw9IHRoaXMucHJldiAmJiBzLmNhbGwoSSwgXCJmaW5hbGx5TG9jXCIpICYmIHRoaXMucHJldiA8IEkuZmluYWxseUxvYykge1xuICAgICAgICAgIHZhciBqID0gSTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaiAmJiAoTiA9PT0gXCJicmVha1wiIHx8IE4gPT09IFwiY29udGludWVcIikgJiYgai50cnlMb2MgPD0gViAmJiBWIDw9IGouZmluYWxseUxvYyAmJiAoaiA9IG51bGwpO1xuICAgICAgdmFyIFUgPSBqID8gai5jb21wbGV0aW9uIDoge307XG4gICAgICByZXR1cm4gVS50eXBlID0gTiwgVS5hcmcgPSBWLCBqID8gKHRoaXMubWV0aG9kID0gXCJuZXh0XCIsIHRoaXMubmV4dCA9IGouZmluYWxseUxvYywgaCkgOiB0aGlzLmNvbXBsZXRlKFUpO1xuICAgIH0sIGNvbXBsZXRlOiBmdW5jdGlvbihOLCBWKSB7XG4gICAgICBpZiAoTi50eXBlID09PSBcInRocm93XCIpXG4gICAgICAgIHRocm93IE4uYXJnO1xuICAgICAgcmV0dXJuIE4udHlwZSA9PT0gXCJicmVha1wiIHx8IE4udHlwZSA9PT0gXCJjb250aW51ZVwiID8gdGhpcy5uZXh0ID0gTi5hcmcgOiBOLnR5cGUgPT09IFwicmV0dXJuXCIgPyAodGhpcy5ydmFsID0gdGhpcy5hcmcgPSBOLmFyZywgdGhpcy5tZXRob2QgPSBcInJldHVyblwiLCB0aGlzLm5leHQgPSBcImVuZFwiKSA6IE4udHlwZSA9PT0gXCJub3JtYWxcIiAmJiBWICYmICh0aGlzLm5leHQgPSBWKSwgaDtcbiAgICB9LCBmaW5pc2g6IGZ1bmN0aW9uKE4pIHtcbiAgICAgIGZvciAodmFyIFYgPSB0aGlzLnRyeUVudHJpZXMubGVuZ3RoIC0gMTsgMCA8PSBWOyAtLVYpIHtcbiAgICAgICAgdmFyIFIgPSB0aGlzLnRyeUVudHJpZXNbVl07XG4gICAgICAgIGlmIChSLmZpbmFsbHlMb2MgPT09IE4pXG4gICAgICAgICAgcmV0dXJuIHRoaXMuY29tcGxldGUoUi5jb21wbGV0aW9uLCBSLmFmdGVyTG9jKSwgcShSKSwgaDtcbiAgICAgIH1cbiAgICB9LCBjYXRjaDogZnVuY3Rpb24oTikge1xuICAgICAgZm9yICh2YXIgViA9IHRoaXMudHJ5RW50cmllcy5sZW5ndGggLSAxOyAwIDw9IFY7IC0tVikge1xuICAgICAgICB2YXIgUiA9IHRoaXMudHJ5RW50cmllc1tWXTtcbiAgICAgICAgaWYgKFIudHJ5TG9jID09PSBOKSB7XG4gICAgICAgICAgdmFyIEkgPSBSLmNvbXBsZXRpb247XG4gICAgICAgICAgaWYgKEkudHlwZSA9PT0gXCJ0aHJvd1wiKSB7XG4gICAgICAgICAgICB2YXIgaiA9IEkuYXJnO1xuICAgICAgICAgICAgcShSKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIGo7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHRocm93IG5ldyBFcnJvcihcImlsbGVnYWwgY2F0Y2ggYXR0ZW1wdFwiKTtcbiAgICB9LCBkZWxlZ2F0ZVlpZWxkOiBmdW5jdGlvbihOLCBWLCBSKSB7XG4gICAgICByZXR1cm4gdGhpcy5kZWxlZ2F0ZSA9IHsgaXRlcmF0b3I6IGsoTiksIHJlc3VsdE5hbWU6IFYsIG5leHRMb2M6IFIgfSwgdGhpcy5tZXRob2QgPT09IFwibmV4dFwiICYmICh0aGlzLmFyZyA9IGkpLCBoO1xuICAgIH0gfSwgcjtcbiAgfShlLmV4cG9ydHMpO1xuICB0cnkge1xuICAgIHJlZ2VuZXJhdG9yUnVudGltZSA9IG47XG4gIH0gY2F0Y2gge1xuICAgIEZ1bmN0aW9uKFwiclwiLCBcInJlZ2VuZXJhdG9yUnVudGltZSA9IHJcIikobik7XG4gIH1cbn0sIGZ1bmN0aW9uKGUsIHQpIHtcbiAgZnVuY3Rpb24gbyhyKSB7XG4gICAgcmV0dXJuIChvID0gdHlwZW9mIFN5bWJvbCA9PSBcImZ1bmN0aW9uXCIgJiYgdHlwZW9mIFN5bWJvbC5pdGVyYXRvciA9PSBcInN5bWJvbFwiID8gZnVuY3Rpb24oaSkge1xuICAgICAgcmV0dXJuIHR5cGVvZiBpO1xuICAgIH0gOiBmdW5jdGlvbihpKSB7XG4gICAgICByZXR1cm4gaSAmJiB0eXBlb2YgU3ltYm9sID09IFwiZnVuY3Rpb25cIiAmJiBpLmNvbnN0cnVjdG9yID09PSBTeW1ib2wgJiYgaSAhPT0gU3ltYm9sLnByb3RvdHlwZSA/IFwic3ltYm9sXCIgOiB0eXBlb2YgaTtcbiAgICB9KShyKTtcbiAgfVxuICBmdW5jdGlvbiBuKHIpIHtcbiAgICByZXR1cm4gdHlwZW9mIFN5bWJvbCA9PSBcImZ1bmN0aW9uXCIgJiYgbyhTeW1ib2wuaXRlcmF0b3IpID09PSBcInN5bWJvbFwiID8gZS5leHBvcnRzID0gbiA9IGZ1bmN0aW9uKGkpIHtcbiAgICAgIHJldHVybiBvKGkpO1xuICAgIH0gOiBlLmV4cG9ydHMgPSBuID0gZnVuY3Rpb24oaSkge1xuICAgICAgcmV0dXJuIGkgJiYgdHlwZW9mIFN5bWJvbCA9PSBcImZ1bmN0aW9uXCIgJiYgaS5jb25zdHJ1Y3RvciA9PT0gU3ltYm9sICYmIGkgIT09IFN5bWJvbC5wcm90b3R5cGUgPyBcInN5bWJvbFwiIDogbyhpKTtcbiAgICB9LCBuKHIpO1xuICB9XG4gIGUuZXhwb3J0cyA9IG47XG59LCBmdW5jdGlvbihlLCB0KSB7XG4gIGZ1bmN0aW9uIG8obiwgcikge1xuICAgIHJldHVybiBlLmV4cG9ydHMgPSBvID0gT2JqZWN0LnNldFByb3RvdHlwZU9mIHx8IGZ1bmN0aW9uKGksIGEpIHtcbiAgICAgIHJldHVybiBpLl9fcHJvdG9fXyA9IGEsIGk7XG4gICAgfSwgbyhuLCByKTtcbiAgfVxuICBlLmV4cG9ydHMgPSBvO1xufSwgZnVuY3Rpb24oZSwgdCwgbykge1xuICB2YXIgbiA9IG8oNSk7XG4gIGUuZXhwb3J0cyA9IGZ1bmN0aW9uKHIsIGkpIHtcbiAgICBmb3IgKDsgIU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChyLCBpKSAmJiAociA9IG4ocikpICE9PSBudWxsOyApXG4gICAgICA7XG4gICAgcmV0dXJuIHI7XG4gIH07XG59LCBmdW5jdGlvbihlLCB0LCBvKSB7XG4gIC8qKiBAbGljZW5zZSBSZWFjdCB2MTYuOC42XG4gICogcmVhY3QucHJvZHVjdGlvbi5taW4uanNcbiAgKlxuICAqIENvcHlyaWdodCAoYykgRmFjZWJvb2ssIEluYy4gYW5kIGl0cyBhZmZpbGlhdGVzLlxuICAqXG4gICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLlxuICAqL1xuICB2YXIgbiA9IG8oMjYpLCByID0gdHlwZW9mIFN5bWJvbCA9PSBcImZ1bmN0aW9uXCIgJiYgU3ltYm9sLmZvciwgaSA9IHIgPyBTeW1ib2wuZm9yKFwicmVhY3QuZWxlbWVudFwiKSA6IDYwMTAzLCBhID0gciA/IFN5bWJvbC5mb3IoXCJyZWFjdC5wb3J0YWxcIikgOiA2MDEwNiwgcyA9IHIgPyBTeW1ib2wuZm9yKFwicmVhY3QuZnJhZ21lbnRcIikgOiA2MDEwNywgbCA9IHIgPyBTeW1ib2wuZm9yKFwicmVhY3Quc3RyaWN0X21vZGVcIikgOiA2MDEwOCwgcCA9IHIgPyBTeW1ib2wuZm9yKFwicmVhY3QucHJvZmlsZXJcIikgOiA2MDExNCwgZCA9IHIgPyBTeW1ib2wuZm9yKFwicmVhY3QucHJvdmlkZXJcIikgOiA2MDEwOSwgYiA9IHIgPyBTeW1ib2wuZm9yKFwicmVhY3QuY29udGV4dFwiKSA6IDYwMTEwLCBNID0gciA/IFN5bWJvbC5mb3IoXCJyZWFjdC5jb25jdXJyZW50X21vZGVcIikgOiA2MDExMSwgdSA9IHIgPyBTeW1ib2wuZm9yKFwicmVhY3QuZm9yd2FyZF9yZWZcIikgOiA2MDExMiwgQSA9IHIgPyBTeW1ib2wuZm9yKFwicmVhY3Quc3VzcGVuc2VcIikgOiA2MDExMywgeiA9IHIgPyBTeW1ib2wuZm9yKFwicmVhY3QubWVtb1wiKSA6IDYwMTE1LCBmID0gciA/IFN5bWJvbC5mb3IoXCJyZWFjdC5sYXp5XCIpIDogNjAxMTYsIE8gPSB0eXBlb2YgU3ltYm9sID09IFwiZnVuY3Rpb25cIiAmJiBTeW1ib2wuaXRlcmF0b3I7XG4gIGZ1bmN0aW9uIGgoUSkge1xuICAgIGZvciAodmFyIEUgPSBhcmd1bWVudHMubGVuZ3RoIC0gMSwgRCA9IFwiaHR0cHM6Ly9yZWFjdGpzLm9yZy9kb2NzL2Vycm9yLWRlY29kZXIuaHRtbD9pbnZhcmlhbnQ9XCIgKyBRLCBHID0gMDsgRyA8IEU7IEcrKylcbiAgICAgIEQgKz0gXCImYXJnc1tdPVwiICsgZW5jb2RlVVJJQ29tcG9uZW50KGFyZ3VtZW50c1tHICsgMV0pO1xuICAgIChmdW5jdGlvbihKLCBTLCBXLCBQLCBZLCBaLCB0MSwgaTEpIHtcbiAgICAgIGlmICghSikge1xuICAgICAgICBpZiAoKEogPSB2b2lkIDApID09PSBTKVxuICAgICAgICAgIEogPSBFcnJvcihcIk1pbmlmaWVkIGV4Y2VwdGlvbiBvY2N1cnJlZDsgdXNlIHRoZSBub24tbWluaWZpZWQgZGV2IGVudmlyb25tZW50IGZvciB0aGUgZnVsbCBlcnJvciBtZXNzYWdlIGFuZCBhZGRpdGlvbmFsIGhlbHBmdWwgd2FybmluZ3MuXCIpO1xuICAgICAgICBlbHNlIHtcbiAgICAgICAgICB2YXIgbjEgPSBbVywgUCwgWSwgWiwgdDEsIGkxXSwgczEgPSAwO1xuICAgICAgICAgIChKID0gRXJyb3IoUy5yZXBsYWNlKC8lcy9nLCBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgIHJldHVybiBuMVtzMSsrXTtcbiAgICAgICAgICB9KSkpLm5hbWUgPSBcIkludmFyaWFudCBWaW9sYXRpb25cIjtcbiAgICAgICAgfVxuICAgICAgICB0aHJvdyBKLmZyYW1lc1RvUG9wID0gMSwgSjtcbiAgICAgIH1cbiAgICB9KSghMSwgXCJNaW5pZmllZCBSZWFjdCBlcnJvciAjXCIgKyBRICsgXCI7IHZpc2l0ICVzIGZvciB0aGUgZnVsbCBtZXNzYWdlIG9yIHVzZSB0aGUgbm9uLW1pbmlmaWVkIGRldiBlbnZpcm9ubWVudCBmb3IgZnVsbCBlcnJvcnMgYW5kIGFkZGl0aW9uYWwgaGVscGZ1bCB3YXJuaW5ncy4gXCIsIEQpO1xuICB9XG4gIHZhciBnID0geyBpc01vdW50ZWQ6IGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiAhMTtcbiAgfSwgZW5xdWV1ZUZvcmNlVXBkYXRlOiBmdW5jdGlvbigpIHtcbiAgfSwgZW5xdWV1ZVJlcGxhY2VTdGF0ZTogZnVuY3Rpb24oKSB7XG4gIH0sIGVucXVldWVTZXRTdGF0ZTogZnVuY3Rpb24oKSB7XG4gIH0gfSwgdiA9IHt9O1xuICBmdW5jdGlvbiBMKFEsIEUsIEQpIHtcbiAgICB0aGlzLnByb3BzID0gUSwgdGhpcy5jb250ZXh0ID0gRSwgdGhpcy5yZWZzID0gdiwgdGhpcy51cGRhdGVyID0gRCB8fCBnO1xuICB9XG4gIGZ1bmN0aW9uIHkoKSB7XG4gIH1cbiAgZnVuY3Rpb24gQihRLCBFLCBEKSB7XG4gICAgdGhpcy5wcm9wcyA9IFEsIHRoaXMuY29udGV4dCA9IEUsIHRoaXMucmVmcyA9IHYsIHRoaXMudXBkYXRlciA9IEQgfHwgZztcbiAgfVxuICBMLnByb3RvdHlwZS5pc1JlYWN0Q29tcG9uZW50ID0ge30sIEwucHJvdG90eXBlLnNldFN0YXRlID0gZnVuY3Rpb24oUSwgRSkge1xuICAgIHR5cGVvZiBRICE9IFwib2JqZWN0XCIgJiYgdHlwZW9mIFEgIT0gXCJmdW5jdGlvblwiICYmIFEgIT0gbnVsbCAmJiBoKFwiODVcIiksIHRoaXMudXBkYXRlci5lbnF1ZXVlU2V0U3RhdGUodGhpcywgUSwgRSwgXCJzZXRTdGF0ZVwiKTtcbiAgfSwgTC5wcm90b3R5cGUuZm9yY2VVcGRhdGUgPSBmdW5jdGlvbihRKSB7XG4gICAgdGhpcy51cGRhdGVyLmVucXVldWVGb3JjZVVwZGF0ZSh0aGlzLCBRLCBcImZvcmNlVXBkYXRlXCIpO1xuICB9LCB5LnByb3RvdHlwZSA9IEwucHJvdG90eXBlO1xuICB2YXIgWCA9IEIucHJvdG90eXBlID0gbmV3IHkoKTtcbiAgWC5jb25zdHJ1Y3RvciA9IEIsIG4oWCwgTC5wcm90b3R5cGUpLCBYLmlzUHVyZVJlYWN0Q29tcG9uZW50ID0gITA7XG4gIHZhciBGID0geyBjdXJyZW50OiBudWxsIH0sIFQgPSB7IGN1cnJlbnQ6IG51bGwgfSwgdyA9IE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHksIEggPSB7IGtleTogITAsIHJlZjogITAsIF9fc2VsZjogITAsIF9fc291cmNlOiAhMCB9O1xuICBmdW5jdGlvbiBDKFEsIEUsIEQpIHtcbiAgICB2YXIgRyA9IHZvaWQgMCwgSiA9IHt9LCBTID0gbnVsbCwgVyA9IG51bGw7XG4gICAgaWYgKEUgIT0gbnVsbClcbiAgICAgIGZvciAoRyBpbiBFLnJlZiAhPT0gdm9pZCAwICYmIChXID0gRS5yZWYpLCBFLmtleSAhPT0gdm9pZCAwICYmIChTID0gXCJcIiArIEUua2V5KSwgRSlcbiAgICAgICAgdy5jYWxsKEUsIEcpICYmICFILmhhc093blByb3BlcnR5KEcpICYmIChKW0ddID0gRVtHXSk7XG4gICAgdmFyIFAgPSBhcmd1bWVudHMubGVuZ3RoIC0gMjtcbiAgICBpZiAoUCA9PT0gMSlcbiAgICAgIEouY2hpbGRyZW4gPSBEO1xuICAgIGVsc2UgaWYgKDEgPCBQKSB7XG4gICAgICBmb3IgKHZhciBZID0gQXJyYXkoUCksIFogPSAwOyBaIDwgUDsgWisrKVxuICAgICAgICBZW1pdID0gYXJndW1lbnRzW1ogKyAyXTtcbiAgICAgIEouY2hpbGRyZW4gPSBZO1xuICAgIH1cbiAgICBpZiAoUSAmJiBRLmRlZmF1bHRQcm9wcylcbiAgICAgIGZvciAoRyBpbiBQID0gUS5kZWZhdWx0UHJvcHMpXG4gICAgICAgIEpbR10gPT09IHZvaWQgMCAmJiAoSltHXSA9IFBbR10pO1xuICAgIHJldHVybiB7ICQkdHlwZW9mOiBpLCB0eXBlOiBRLCBrZXk6IFMsIHJlZjogVywgcHJvcHM6IEosIF9vd25lcjogVC5jdXJyZW50IH07XG4gIH1cbiAgZnVuY3Rpb24gcShRKSB7XG4gICAgcmV0dXJuIHR5cGVvZiBRID09IFwib2JqZWN0XCIgJiYgUSAhPT0gbnVsbCAmJiBRLiQkdHlwZW9mID09PSBpO1xuICB9XG4gIHZhciBtID0gL1xcLysvZywgayA9IFtdO1xuICBmdW5jdGlvbiB4KFEsIEUsIEQsIEcpIHtcbiAgICBpZiAoay5sZW5ndGgpIHtcbiAgICAgIHZhciBKID0gay5wb3AoKTtcbiAgICAgIHJldHVybiBKLnJlc3VsdCA9IFEsIEoua2V5UHJlZml4ID0gRSwgSi5mdW5jID0gRCwgSi5jb250ZXh0ID0gRywgSi5jb3VudCA9IDAsIEo7XG4gICAgfVxuICAgIHJldHVybiB7IHJlc3VsdDogUSwga2V5UHJlZml4OiBFLCBmdW5jOiBELCBjb250ZXh0OiBHLCBjb3VudDogMCB9O1xuICB9XG4gIGZ1bmN0aW9uIE4oUSkge1xuICAgIFEucmVzdWx0ID0gbnVsbCwgUS5rZXlQcmVmaXggPSBudWxsLCBRLmZ1bmMgPSBudWxsLCBRLmNvbnRleHQgPSBudWxsLCBRLmNvdW50ID0gMCwgay5sZW5ndGggPCAxMCAmJiBrLnB1c2goUSk7XG4gIH1cbiAgZnVuY3Rpb24gVihRLCBFLCBEKSB7XG4gICAgcmV0dXJuIFEgPT0gbnVsbCA/IDAgOiBmdW5jdGlvbiBHKEosIFMsIFcsIFApIHtcbiAgICAgIHZhciBZID0gdHlwZW9mIEo7XG4gICAgICBZICE9PSBcInVuZGVmaW5lZFwiICYmIFkgIT09IFwiYm9vbGVhblwiIHx8IChKID0gbnVsbCk7XG4gICAgICB2YXIgWiA9ICExO1xuICAgICAgaWYgKEogPT09IG51bGwpXG4gICAgICAgIFogPSAhMDtcbiAgICAgIGVsc2VcbiAgICAgICAgc3dpdGNoIChZKSB7XG4gICAgICAgICAgY2FzZSBcInN0cmluZ1wiOlxuICAgICAgICAgIGNhc2UgXCJudW1iZXJcIjpcbiAgICAgICAgICAgIFogPSAhMDtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgXCJvYmplY3RcIjpcbiAgICAgICAgICAgIHN3aXRjaCAoSi4kJHR5cGVvZikge1xuICAgICAgICAgICAgICBjYXNlIGk6XG4gICAgICAgICAgICAgIGNhc2UgYTpcbiAgICAgICAgICAgICAgICBaID0gITA7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIGlmIChaKVxuICAgICAgICByZXR1cm4gVyhQLCBKLCBTID09PSBcIlwiID8gXCIuXCIgKyBSKEosIDApIDogUyksIDE7XG4gICAgICBpZiAoWiA9IDAsIFMgPSBTID09PSBcIlwiID8gXCIuXCIgOiBTICsgXCI6XCIsIEFycmF5LmlzQXJyYXkoSikpXG4gICAgICAgIGZvciAodmFyIHQxID0gMDsgdDEgPCBKLmxlbmd0aDsgdDErKykge1xuICAgICAgICAgIHZhciBpMSA9IFMgKyBSKFkgPSBKW3QxXSwgdDEpO1xuICAgICAgICAgIFogKz0gRyhZLCBpMSwgVywgUCk7XG4gICAgICAgIH1cbiAgICAgIGVsc2UgaWYgKHR5cGVvZiAoaTEgPSBKID09PSBudWxsIHx8IHR5cGVvZiBKICE9IFwib2JqZWN0XCIgPyBudWxsIDogdHlwZW9mIChpMSA9IE8gJiYgSltPXSB8fCBKW1wiQEBpdGVyYXRvclwiXSkgPT0gXCJmdW5jdGlvblwiID8gaTEgOiBudWxsKSA9PSBcImZ1bmN0aW9uXCIpXG4gICAgICAgIGZvciAoSiA9IGkxLmNhbGwoSiksIHQxID0gMDsgIShZID0gSi5uZXh0KCkpLmRvbmU7IClcbiAgICAgICAgICBaICs9IEcoWSA9IFkudmFsdWUsIGkxID0gUyArIFIoWSwgdDErKyksIFcsIFApO1xuICAgICAgZWxzZVxuICAgICAgICBZID09PSBcIm9iamVjdFwiICYmIGgoXCIzMVwiLCAoVyA9IFwiXCIgKyBKKSA9PSBcIltvYmplY3QgT2JqZWN0XVwiID8gXCJvYmplY3Qgd2l0aCBrZXlzIHtcIiArIE9iamVjdC5rZXlzKEopLmpvaW4oXCIsIFwiKSArIFwifVwiIDogVywgXCJcIik7XG4gICAgICByZXR1cm4gWjtcbiAgICB9KFEsIFwiXCIsIEUsIEQpO1xuICB9XG4gIGZ1bmN0aW9uIFIoUSwgRSkge1xuICAgIHJldHVybiB0eXBlb2YgUSA9PSBcIm9iamVjdFwiICYmIFEgIT09IG51bGwgJiYgUS5rZXkgIT0gbnVsbCA/IGZ1bmN0aW9uKEQpIHtcbiAgICAgIHZhciBHID0geyBcIj1cIjogXCI9MFwiLCBcIjpcIjogXCI9MlwiIH07XG4gICAgICByZXR1cm4gXCIkXCIgKyAoXCJcIiArIEQpLnJlcGxhY2UoL1s9Ol0vZywgZnVuY3Rpb24oSikge1xuICAgICAgICByZXR1cm4gR1tKXTtcbiAgICAgIH0pO1xuICAgIH0oUS5rZXkpIDogRS50b1N0cmluZygzNik7XG4gIH1cbiAgZnVuY3Rpb24gSShRLCBFKSB7XG4gICAgUS5mdW5jLmNhbGwoUS5jb250ZXh0LCBFLCBRLmNvdW50KyspO1xuICB9XG4gIGZ1bmN0aW9uIGooUSwgRSwgRCkge1xuICAgIHZhciBHID0gUS5yZXN1bHQsIEogPSBRLmtleVByZWZpeDtcbiAgICBRID0gUS5mdW5jLmNhbGwoUS5jb250ZXh0LCBFLCBRLmNvdW50KyspLCBBcnJheS5pc0FycmF5KFEpID8gVShRLCBHLCBELCBmdW5jdGlvbihTKSB7XG4gICAgICByZXR1cm4gUztcbiAgICB9KSA6IFEgIT0gbnVsbCAmJiAocShRKSAmJiAoUSA9IGZ1bmN0aW9uKFMsIFcpIHtcbiAgICAgIHJldHVybiB7ICQkdHlwZW9mOiBpLCB0eXBlOiBTLnR5cGUsIGtleTogVywgcmVmOiBTLnJlZiwgcHJvcHM6IFMucHJvcHMsIF9vd25lcjogUy5fb3duZXIgfTtcbiAgICB9KFEsIEogKyAoIVEua2V5IHx8IEUgJiYgRS5rZXkgPT09IFEua2V5ID8gXCJcIiA6IChcIlwiICsgUS5rZXkpLnJlcGxhY2UobSwgXCIkJi9cIikgKyBcIi9cIikgKyBEKSksIEcucHVzaChRKSk7XG4gIH1cbiAgZnVuY3Rpb24gVShRLCBFLCBELCBHLCBKKSB7XG4gICAgdmFyIFMgPSBcIlwiO1xuICAgIEQgIT0gbnVsbCAmJiAoUyA9IChcIlwiICsgRCkucmVwbGFjZShtLCBcIiQmL1wiKSArIFwiL1wiKSwgVihRLCBqLCBFID0geChFLCBTLCBHLCBKKSksIE4oRSk7XG4gIH1cbiAgZnVuY3Rpb24gXygpIHtcbiAgICB2YXIgUSA9IEYuY3VycmVudDtcbiAgICByZXR1cm4gUSA9PT0gbnVsbCAmJiBoKFwiMzIxXCIpLCBRO1xuICB9XG4gIHZhciByMSA9IHsgQ2hpbGRyZW46IHsgbWFwOiBmdW5jdGlvbihRLCBFLCBEKSB7XG4gICAgaWYgKFEgPT0gbnVsbClcbiAgICAgIHJldHVybiBRO1xuICAgIHZhciBHID0gW107XG4gICAgcmV0dXJuIFUoUSwgRywgbnVsbCwgRSwgRCksIEc7XG4gIH0sIGZvckVhY2g6IGZ1bmN0aW9uKFEsIEUsIEQpIHtcbiAgICBpZiAoUSA9PSBudWxsKVxuICAgICAgcmV0dXJuIFE7XG4gICAgVihRLCBJLCBFID0geChudWxsLCBudWxsLCBFLCBEKSksIE4oRSk7XG4gIH0sIGNvdW50OiBmdW5jdGlvbihRKSB7XG4gICAgcmV0dXJuIFYoUSwgZnVuY3Rpb24oKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9LCBudWxsKTtcbiAgfSwgdG9BcnJheTogZnVuY3Rpb24oUSkge1xuICAgIHZhciBFID0gW107XG4gICAgcmV0dXJuIFUoUSwgRSwgbnVsbCwgZnVuY3Rpb24oRCkge1xuICAgICAgcmV0dXJuIEQ7XG4gICAgfSksIEU7XG4gIH0sIG9ubHk6IGZ1bmN0aW9uKFEpIHtcbiAgICByZXR1cm4gcShRKSB8fCBoKFwiMTQzXCIpLCBRO1xuICB9IH0sIGNyZWF0ZVJlZjogZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIHsgY3VycmVudDogbnVsbCB9O1xuICB9LCBDb21wb25lbnQ6IEwsIFB1cmVDb21wb25lbnQ6IEIsIGNyZWF0ZUNvbnRleHQ6IGZ1bmN0aW9uKFEsIEUpIHtcbiAgICByZXR1cm4gRSA9PT0gdm9pZCAwICYmIChFID0gbnVsbCksIChRID0geyAkJHR5cGVvZjogYiwgX2NhbGN1bGF0ZUNoYW5nZWRCaXRzOiBFLCBfY3VycmVudFZhbHVlOiBRLCBfY3VycmVudFZhbHVlMjogUSwgX3RocmVhZENvdW50OiAwLCBQcm92aWRlcjogbnVsbCwgQ29uc3VtZXI6IG51bGwgfSkuUHJvdmlkZXIgPSB7ICQkdHlwZW9mOiBkLCBfY29udGV4dDogUSB9LCBRLkNvbnN1bWVyID0gUTtcbiAgfSwgZm9yd2FyZFJlZjogZnVuY3Rpb24oUSkge1xuICAgIHJldHVybiB7ICQkdHlwZW9mOiB1LCByZW5kZXI6IFEgfTtcbiAgfSwgbGF6eTogZnVuY3Rpb24oUSkge1xuICAgIHJldHVybiB7ICQkdHlwZW9mOiBmLCBfY3RvcjogUSwgX3N0YXR1czogLTEsIF9yZXN1bHQ6IG51bGwgfTtcbiAgfSwgbWVtbzogZnVuY3Rpb24oUSwgRSkge1xuICAgIHJldHVybiB7ICQkdHlwZW9mOiB6LCB0eXBlOiBRLCBjb21wYXJlOiBFID09PSB2b2lkIDAgPyBudWxsIDogRSB9O1xuICB9LCB1c2VDYWxsYmFjazogZnVuY3Rpb24oUSwgRSkge1xuICAgIHJldHVybiBfKCkudXNlQ2FsbGJhY2soUSwgRSk7XG4gIH0sIHVzZUNvbnRleHQ6IGZ1bmN0aW9uKFEsIEUpIHtcbiAgICByZXR1cm4gXygpLnVzZUNvbnRleHQoUSwgRSk7XG4gIH0sIHVzZUVmZmVjdDogZnVuY3Rpb24oUSwgRSkge1xuICAgIHJldHVybiBfKCkudXNlRWZmZWN0KFEsIEUpO1xuICB9LCB1c2VJbXBlcmF0aXZlSGFuZGxlOiBmdW5jdGlvbihRLCBFLCBEKSB7XG4gICAgcmV0dXJuIF8oKS51c2VJbXBlcmF0aXZlSGFuZGxlKFEsIEUsIEQpO1xuICB9LCB1c2VEZWJ1Z1ZhbHVlOiBmdW5jdGlvbigpIHtcbiAgfSwgdXNlTGF5b3V0RWZmZWN0OiBmdW5jdGlvbihRLCBFKSB7XG4gICAgcmV0dXJuIF8oKS51c2VMYXlvdXRFZmZlY3QoUSwgRSk7XG4gIH0sIHVzZU1lbW86IGZ1bmN0aW9uKFEsIEUpIHtcbiAgICByZXR1cm4gXygpLnVzZU1lbW8oUSwgRSk7XG4gIH0sIHVzZVJlZHVjZXI6IGZ1bmN0aW9uKFEsIEUsIEQpIHtcbiAgICByZXR1cm4gXygpLnVzZVJlZHVjZXIoUSwgRSwgRCk7XG4gIH0sIHVzZVJlZjogZnVuY3Rpb24oUSkge1xuICAgIHJldHVybiBfKCkudXNlUmVmKFEpO1xuICB9LCB1c2VTdGF0ZTogZnVuY3Rpb24oUSkge1xuICAgIHJldHVybiBfKCkudXNlU3RhdGUoUSk7XG4gIH0sIEZyYWdtZW50OiBzLCBTdHJpY3RNb2RlOiBsLCBTdXNwZW5zZTogQSwgY3JlYXRlRWxlbWVudDogQywgY2xvbmVFbGVtZW50OiBmdW5jdGlvbihRLCBFLCBEKSB7XG4gICAgUSA9PSBudWxsICYmIGgoXCIyNjdcIiwgUSk7XG4gICAgdmFyIEcgPSB2b2lkIDAsIEogPSBuKHt9LCBRLnByb3BzKSwgUyA9IFEua2V5LCBXID0gUS5yZWYsIFAgPSBRLl9vd25lcjtcbiAgICBpZiAoRSAhPSBudWxsKSB7XG4gICAgICBFLnJlZiAhPT0gdm9pZCAwICYmIChXID0gRS5yZWYsIFAgPSBULmN1cnJlbnQpLCBFLmtleSAhPT0gdm9pZCAwICYmIChTID0gXCJcIiArIEUua2V5KTtcbiAgICAgIHZhciBZID0gdm9pZCAwO1xuICAgICAgZm9yIChHIGluIFEudHlwZSAmJiBRLnR5cGUuZGVmYXVsdFByb3BzICYmIChZID0gUS50eXBlLmRlZmF1bHRQcm9wcyksIEUpXG4gICAgICAgIHcuY2FsbChFLCBHKSAmJiAhSC5oYXNPd25Qcm9wZXJ0eShHKSAmJiAoSltHXSA9IEVbR10gPT09IHZvaWQgMCAmJiBZICE9PSB2b2lkIDAgPyBZW0ddIDogRVtHXSk7XG4gICAgfVxuICAgIGlmICgoRyA9IGFyZ3VtZW50cy5sZW5ndGggLSAyKSA9PT0gMSlcbiAgICAgIEouY2hpbGRyZW4gPSBEO1xuICAgIGVsc2UgaWYgKDEgPCBHKSB7XG4gICAgICBZID0gQXJyYXkoRyk7XG4gICAgICBmb3IgKHZhciBaID0gMDsgWiA8IEc7IForKylcbiAgICAgICAgWVtaXSA9IGFyZ3VtZW50c1taICsgMl07XG4gICAgICBKLmNoaWxkcmVuID0gWTtcbiAgICB9XG4gICAgcmV0dXJuIHsgJCR0eXBlb2Y6IGksIHR5cGU6IFEudHlwZSwga2V5OiBTLCByZWY6IFcsIHByb3BzOiBKLCBfb3duZXI6IFAgfTtcbiAgfSwgY3JlYXRlRmFjdG9yeTogZnVuY3Rpb24oUSkge1xuICAgIHZhciBFID0gQy5iaW5kKG51bGwsIFEpO1xuICAgIHJldHVybiBFLnR5cGUgPSBRLCBFO1xuICB9LCBpc1ZhbGlkRWxlbWVudDogcSwgdmVyc2lvbjogXCIxNi44LjZcIiwgdW5zdGFibGVfQ29uY3VycmVudE1vZGU6IE0sIHVuc3RhYmxlX1Byb2ZpbGVyOiBwLCBfX1NFQ1JFVF9JTlRFUk5BTFNfRE9fTk9UX1VTRV9PUl9ZT1VfV0lMTF9CRV9GSVJFRDogeyBSZWFjdEN1cnJlbnREaXNwYXRjaGVyOiBGLCBSZWFjdEN1cnJlbnRPd25lcjogVCwgYXNzaWduOiBuIH0gfSwgSyA9IHIxO1xuICBlLmV4cG9ydHMgPSBLLmRlZmF1bHQgfHwgSztcbn0sIGZ1bmN0aW9uKGUsIHQsIG8pIHtcbiAgLypcbiAgb2JqZWN0LWFzc2lnblxuICAoYykgU2luZHJlIFNvcmh1c1xuICBAbGljZW5zZSBNSVRcbiAgKi9cbiAgdmFyIG4gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzLCByID0gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eSwgaSA9IE9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGU7XG4gIGUuZXhwb3J0cyA9IGZ1bmN0aW9uKCkge1xuICAgIHRyeSB7XG4gICAgICBpZiAoIU9iamVjdC5hc3NpZ24pXG4gICAgICAgIHJldHVybiAhMTtcbiAgICAgIHZhciBhID0gbmV3IFN0cmluZyhcImFiY1wiKTtcbiAgICAgIGlmIChhWzVdID0gXCJkZVwiLCBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhhKVswXSA9PT0gXCI1XCIpXG4gICAgICAgIHJldHVybiAhMTtcbiAgICAgIGZvciAodmFyIHMgPSB7fSwgbCA9IDA7IGwgPCAxMDsgbCsrKVxuICAgICAgICBzW1wiX1wiICsgU3RyaW5nLmZyb21DaGFyQ29kZShsKV0gPSBsO1xuICAgICAgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKHMpLm1hcChmdW5jdGlvbihkKSB7XG4gICAgICAgIHJldHVybiBzW2RdO1xuICAgICAgfSkuam9pbihcIlwiKSAhPT0gXCIwMTIzNDU2Nzg5XCIpXG4gICAgICAgIHJldHVybiAhMTtcbiAgICAgIHZhciBwID0ge307XG4gICAgICByZXR1cm4gXCJhYmNkZWZnaGlqa2xtbm9wcXJzdFwiLnNwbGl0KFwiXCIpLmZvckVhY2goZnVuY3Rpb24oZCkge1xuICAgICAgICBwW2RdID0gZDtcbiAgICAgIH0pLCBPYmplY3Qua2V5cyhPYmplY3QuYXNzaWduKHt9LCBwKSkuam9pbihcIlwiKSA9PT0gXCJhYmNkZWZnaGlqa2xtbm9wcXJzdFwiO1xuICAgIH0gY2F0Y2gge1xuICAgICAgcmV0dXJuICExO1xuICAgIH1cbiAgfSgpID8gT2JqZWN0LmFzc2lnbiA6IGZ1bmN0aW9uKGEsIHMpIHtcbiAgICBmb3IgKHZhciBsLCBwLCBkID0gZnVuY3Rpb24oQSkge1xuICAgICAgaWYgKEEgPT0gbnVsbClcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIk9iamVjdC5hc3NpZ24gY2Fubm90IGJlIGNhbGxlZCB3aXRoIG51bGwgb3IgdW5kZWZpbmVkXCIpO1xuICAgICAgcmV0dXJuIE9iamVjdChBKTtcbiAgICB9KGEpLCBiID0gMTsgYiA8IGFyZ3VtZW50cy5sZW5ndGg7IGIrKykge1xuICAgICAgZm9yICh2YXIgTSBpbiBsID0gT2JqZWN0KGFyZ3VtZW50c1tiXSkpXG4gICAgICAgIHIuY2FsbChsLCBNKSAmJiAoZFtNXSA9IGxbTV0pO1xuICAgICAgaWYgKG4pIHtcbiAgICAgICAgcCA9IG4obCk7XG4gICAgICAgIGZvciAodmFyIHUgPSAwOyB1IDwgcC5sZW5ndGg7IHUrKylcbiAgICAgICAgICBpLmNhbGwobCwgcFt1XSkgJiYgKGRbcFt1XV0gPSBsW3BbdV1dKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGQ7XG4gIH07XG59LCBmdW5jdGlvbihlLCB0LCBvKSB7XG4gIHZhciBuID0gbygyOCk7XG4gIGZ1bmN0aW9uIHIoKSB7XG4gIH1cbiAgZnVuY3Rpb24gaSgpIHtcbiAgfVxuICBpLnJlc2V0V2FybmluZ0NhY2hlID0gciwgZS5leHBvcnRzID0gZnVuY3Rpb24oKSB7XG4gICAgZnVuY3Rpb24gYShwLCBkLCBiLCBNLCB1LCBBKSB7XG4gICAgICBpZiAoQSAhPT0gbikge1xuICAgICAgICB2YXIgeiA9IG5ldyBFcnJvcihcIkNhbGxpbmcgUHJvcFR5cGVzIHZhbGlkYXRvcnMgZGlyZWN0bHkgaXMgbm90IHN1cHBvcnRlZCBieSB0aGUgYHByb3AtdHlwZXNgIHBhY2thZ2UuIFVzZSBQcm9wVHlwZXMuY2hlY2tQcm9wVHlwZXMoKSB0byBjYWxsIHRoZW0uIFJlYWQgbW9yZSBhdCBodHRwOi8vZmIubWUvdXNlLWNoZWNrLXByb3AtdHlwZXNcIik7XG4gICAgICAgIHRocm93IHoubmFtZSA9IFwiSW52YXJpYW50IFZpb2xhdGlvblwiLCB6O1xuICAgICAgfVxuICAgIH1cbiAgICBmdW5jdGlvbiBzKCkge1xuICAgICAgcmV0dXJuIGE7XG4gICAgfVxuICAgIHZhciBsID0geyBhcnJheTogYS5pc1JlcXVpcmVkID0gYSwgYm9vbDogYSwgZnVuYzogYSwgbnVtYmVyOiBhLCBvYmplY3Q6IGEsIHN0cmluZzogYSwgc3ltYm9sOiBhLCBhbnk6IGEsIGFycmF5T2Y6IHMsIGVsZW1lbnQ6IGEsIGVsZW1lbnRUeXBlOiBhLCBpbnN0YW5jZU9mOiBzLCBub2RlOiBhLCBvYmplY3RPZjogcywgb25lT2Y6IHMsIG9uZU9mVHlwZTogcywgc2hhcGU6IHMsIGV4YWN0OiBzLCBjaGVja1Byb3BUeXBlczogaSwgcmVzZXRXYXJuaW5nQ2FjaGU6IHIgfTtcbiAgICByZXR1cm4gbC5Qcm9wVHlwZXMgPSBsO1xuICB9O1xufSwgZnVuY3Rpb24oZSwgdCwgbykge1xuICBlLmV4cG9ydHMgPSBcIlNFQ1JFVF9ET19OT1RfUEFTU19USElTX09SX1lPVV9XSUxMX0JFX0ZJUkVEXCI7XG59LCBmdW5jdGlvbihlLCB0KSB7XG4gIGUuZXhwb3J0cyA9IGZ1bmN0aW9uKG8pIHtcbiAgICBpZiAoQXJyYXkuaXNBcnJheShvKSlcbiAgICAgIHJldHVybiBvO1xuICB9O1xufSwgZnVuY3Rpb24oZSwgdCkge1xuICBlLmV4cG9ydHMgPSBmdW5jdGlvbihvLCBuKSB7XG4gICAgdmFyIHIgPSBbXSwgaSA9ICEwLCBhID0gITEsIHMgPSB2b2lkIDA7XG4gICAgdHJ5IHtcbiAgICAgIGZvciAodmFyIGwsIHAgPSBvW1N5bWJvbC5pdGVyYXRvcl0oKTsgIShpID0gKGwgPSBwLm5leHQoKSkuZG9uZSkgJiYgKHIucHVzaChsLnZhbHVlKSwgIW4gfHwgci5sZW5ndGggIT09IG4pOyBpID0gITApXG4gICAgICAgIDtcbiAgICB9IGNhdGNoIChkKSB7XG4gICAgICBhID0gITAsIHMgPSBkO1xuICAgIH0gZmluYWxseSB7XG4gICAgICB0cnkge1xuICAgICAgICBpIHx8IHAucmV0dXJuID09IG51bGwgfHwgcC5yZXR1cm4oKTtcbiAgICAgIH0gZmluYWxseSB7XG4gICAgICAgIGlmIChhKVxuICAgICAgICAgIHRocm93IHM7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiByO1xuICB9O1xufSwgZnVuY3Rpb24oZSwgdCkge1xuICBlLmV4cG9ydHMgPSBmdW5jdGlvbigpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiSW52YWxpZCBhdHRlbXB0IHRvIGRlc3RydWN0dXJlIG5vbi1pdGVyYWJsZSBpbnN0YW5jZVwiKTtcbiAgfTtcbn0sIGZ1bmN0aW9uKGUsIHQsIG8pIHtcbiAgby5yKHQpO1xuICBmdW5jdGlvbiBuKHQxKSB7XG4gICAgdmFyIGkxID0gdDEuaW5wdXQsIG4xID0gdDEucHJldmlld3MsIHMxID0gdDEuc3VibWl0QnV0dG9uLCBkMSA9IHQxLmRyb3B6b25lUHJvcHMsIGIxID0gdDEuZmlsZXMsIGMxID0gdDEuZXh0cmEubWF4RmlsZXM7XG4gICAgcmV0dXJuIHcuYS5jcmVhdGVFbGVtZW50KFwiZGl2XCIsIE9iamVjdC5hc3NpZ24oe30sIGQxKSwgbjEsIGIxLmxlbmd0aCA8IGMxICYmIGkxLCAwIDwgYjEubGVuZ3RoICYmIHMxKTtcbiAgfVxuICB2YXIgciA9IG8oMTIpLCBpID0gby5uKHIpLCBhID0gbygzKSwgcyA9IG8ubihhKSwgbCA9IG8oMiksIHAgPSBvLm4obCksIGQgPSBvKDQpLCBiID0gby5uKGQpLCBNID0gbyg2KSwgdSA9IG8ubihNKSwgQSA9IG8oNyksIHogPSBvLm4oQSksIGYgPSBvKDgpLCBPID0gby5uKGYpLCBoID0gbyg5KSwgZyA9IG8ubihoKSwgdiA9IG8oMTApLCBMID0gby5uKHYpLCB5ID0gbyg1KSwgQiA9IG8ubih5KSwgWCA9IG8oMTMpLCBGID0gby5uKFgpLCBUID0gbygxKSwgdyA9IG8ubihUKSwgSCA9IG8oMCksIEMgPSBvLm4oSCk7XG4gIG4ucHJvcFR5cGVzID0geyBpbnB1dDogQy5hLm5vZGUsIHByZXZpZXdzOiBDLmEuYXJyYXlPZihDLmEubm9kZSksIHN1Ym1pdEJ1dHRvbjogQy5hLm5vZGUsIGRyb3B6b25lUHJvcHM6IEMuYS5zaGFwZSh7IHJlZjogQy5hLmFueS5pc1JlcXVpcmVkLCBjbGFzc05hbWU6IEMuYS5zdHJpbmcuaXNSZXF1aXJlZCwgc3R5bGU6IEMuYS5vYmplY3QsIG9uRHJhZ0VudGVyOiBDLmEuZnVuYy5pc1JlcXVpcmVkLCBvbkRyYWdPdmVyOiBDLmEuZnVuYy5pc1JlcXVpcmVkLCBvbkRyYWdMZWF2ZTogQy5hLmZ1bmMuaXNSZXF1aXJlZCwgb25Ecm9wOiBDLmEuZnVuYy5pc1JlcXVpcmVkIH0pLmlzUmVxdWlyZWQsIGZpbGVzOiBDLmEuYXJyYXlPZihDLmEuYW55KS5pc1JlcXVpcmVkLCBleHRyYTogQy5hLnNoYXBlKHsgYWN0aXZlOiBDLmEuYm9vbC5pc1JlcXVpcmVkLCByZWplY3Q6IEMuYS5ib29sLmlzUmVxdWlyZWQsIGRyYWdnZWQ6IEMuYS5hcnJheU9mKEMuYS5hbnkpLmlzUmVxdWlyZWQsIGFjY2VwdDogQy5hLnN0cmluZy5pc1JlcXVpcmVkLCBtdWx0aXBsZTogQy5hLmJvb2wuaXNSZXF1aXJlZCwgbWluU2l6ZUJ5dGVzOiBDLmEubnVtYmVyLmlzUmVxdWlyZWQsIG1heFNpemVCeXRlczogQy5hLm51bWJlci5pc1JlcXVpcmVkLCBtYXhGaWxlczogQy5hLm51bWJlci5pc1JlcXVpcmVkLCBvbkZpbGVzOiBDLmEuZnVuYy5pc1JlcXVpcmVkLCBvbkNhbmNlbEZpbGU6IEMuYS5mdW5jLmlzUmVxdWlyZWQsIG9uUmVtb3ZlRmlsZTogQy5hLmZ1bmMuaXNSZXF1aXJlZCwgb25SZXN0YXJ0RmlsZTogQy5hLmZ1bmMuaXNSZXF1aXJlZCB9KS5pc1JlcXVpcmVkIH07XG4gIGZ1bmN0aW9uIHEodDEpIHtcbiAgICB2YXIgaTEsIG4xID0gdDEuY2xhc3NOYW1lLCBzMSA9IHQxLmxhYmVsQ2xhc3NOYW1lLCBkMSA9IHQxLmxhYmVsV2l0aEZpbGVzQ2xhc3NOYW1lLCBiMSA9IHQxLnN0eWxlLCBjMSA9IHQxLmxhYmVsU3R5bGUsIGExID0gdDEubGFiZWxXaXRoRmlsZXNTdHlsZSwgbDEgPSB0MS5nZXRGaWxlc0Zyb21FdmVudCwgcDEgPSB0MS5hY2NlcHQsIE0xID0gdDEubXVsdGlwbGUsIEExID0gdDEuZGlzYWJsZWQsIHUxID0gdDEuY29udGVudCwgaDEgPSB0MS53aXRoRmlsZXNDb250ZW50LCBDMSA9IHQxLm9uRmlsZXMsIHExID0gdDEuZmlsZXM7XG4gICAgcmV0dXJuIHcuYS5jcmVhdGVFbGVtZW50KFwibGFiZWxcIiwgeyBjbGFzc05hbWU6IDAgPCBxMS5sZW5ndGggPyBkMSA6IHMxLCBzdHlsZTogMCA8IHExLmxlbmd0aCA/IGExIDogYzEgfSwgMCA8IHExLmxlbmd0aCA/IGgxIDogdTEsIHcuYS5jcmVhdGVFbGVtZW50KFwiaW5wdXRcIiwgeyBjbGFzc05hbWU6IG4xLCBzdHlsZTogYjEsIHR5cGU6IFwiZmlsZVwiLCBhY2NlcHQ6IHAxLCBtdWx0aXBsZTogTTEsIGRpc2FibGVkOiBBMSwgb25DaGFuZ2U6IChpMSA9IGIoKShwLmEubWFyayhmdW5jdGlvbiBXMShSMSkge1xuICAgICAgdmFyIGsxLCBOMTtcbiAgICAgIHJldHVybiBwLmEud3JhcChmdW5jdGlvbih2MSkge1xuICAgICAgICBmb3IgKDsgOyApXG4gICAgICAgICAgc3dpdGNoICh2MS5wcmV2ID0gdjEubmV4dCkge1xuICAgICAgICAgICAgY2FzZSAwOlxuICAgICAgICAgICAgICByZXR1cm4gazEgPSBSMS50YXJnZXQsIHYxLm5leHQgPSAzLCBsMShSMSk7XG4gICAgICAgICAgICBjYXNlIDM6XG4gICAgICAgICAgICAgIE4xID0gdjEuc2VudCwgQzEoTjEpLCBrMS52YWx1ZSA9IG51bGw7XG4gICAgICAgICAgICBjYXNlIDY6XG4gICAgICAgICAgICBjYXNlIFwiZW5kXCI6XG4gICAgICAgICAgICAgIHJldHVybiB2MS5zdG9wKCk7XG4gICAgICAgICAgfVxuICAgICAgfSwgVzEpO1xuICAgIH0pKSwgZnVuY3Rpb24oVzEpIHtcbiAgICAgIHJldHVybiBpMS5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICAgIH0pIH0pKTtcbiAgfVxuICB2YXIgbSA9IG47XG4gIHEucHJvcFR5cGVzID0geyBjbGFzc05hbWU6IEMuYS5zdHJpbmcsIGxhYmVsQ2xhc3NOYW1lOiBDLmEuc3RyaW5nLCBsYWJlbFdpdGhGaWxlc0NsYXNzTmFtZTogQy5hLnN0cmluZywgc3R5bGU6IEMuYS5vYmplY3QsIGxhYmVsU3R5bGU6IEMuYS5vYmplY3QsIGxhYmVsV2l0aEZpbGVzU3R5bGU6IEMuYS5vYmplY3QsIGdldEZpbGVzRnJvbUV2ZW50OiBDLmEuZnVuYy5pc1JlcXVpcmVkLCBhY2NlcHQ6IEMuYS5zdHJpbmcuaXNSZXF1aXJlZCwgbXVsdGlwbGU6IEMuYS5ib29sLmlzUmVxdWlyZWQsIGRpc2FibGVkOiBDLmEuYm9vbC5pc1JlcXVpcmVkLCBjb250ZW50OiBDLmEubm9kZSwgd2l0aEZpbGVzQ29udGVudDogQy5hLm5vZGUsIG9uRmlsZXM6IEMuYS5mdW5jLmlzUmVxdWlyZWQsIGZpbGVzOiBDLmEuYXJyYXlPZihDLmEuYW55KS5pc1JlcXVpcmVkLCBleHRyYTogQy5hLnNoYXBlKHsgYWN0aXZlOiBDLmEuYm9vbC5pc1JlcXVpcmVkLCByZWplY3Q6IEMuYS5ib29sLmlzUmVxdWlyZWQsIGRyYWdnZWQ6IEMuYS5hcnJheU9mKEMuYS5hbnkpLmlzUmVxdWlyZWQsIGFjY2VwdDogQy5hLnN0cmluZy5pc1JlcXVpcmVkLCBtdWx0aXBsZTogQy5hLmJvb2wuaXNSZXF1aXJlZCwgbWluU2l6ZUJ5dGVzOiBDLmEubnVtYmVyLmlzUmVxdWlyZWQsIG1heFNpemVCeXRlczogQy5hLm51bWJlci5pc1JlcXVpcmVkLCBtYXhGaWxlczogQy5hLm51bWJlci5pc1JlcXVpcmVkIH0pLmlzUmVxdWlyZWQgfTtcbiAgZnVuY3Rpb24gayh0MSkge1xuICAgIGZvciAodmFyIGkxID0gMCwgbjEgPSB0MTsgMTAyNCA8PSBuMTsgKVxuICAgICAgbjEgLz0gMTAyNCwgaTEgKz0gMTtcbiAgICByZXR1cm4gXCJcIi5jb25jYXQobjEudG9GaXhlZCgxMCA8PSBuMSB8fCBpMSA8IDEgPyAwIDogMSkpLmNvbmNhdChbXCJieXRlc1wiLCBcImtCXCIsIFwiTUJcIiwgXCJHQlwiLCBcIlRCXCIsIFwiUEJcIiwgXCJFQlwiLCBcIlpCXCIsIFwiWUJcIl1baTFdKTtcbiAgfVxuICBmdW5jdGlvbiB4KHQxKSB7XG4gICAgdmFyIGkxID0gLyogQF9fUFVSRV9fICovIG5ldyBEYXRlKDApO1xuICAgIGkxLnNldFNlY29uZHModDEpO1xuICAgIHZhciBuMSA9IGkxLnRvSVNPU3RyaW5nKCkuc2xpY2UoMTEsIDE5KTtcbiAgICByZXR1cm4gdDEgPCAzNjAwID8gbjEuc2xpY2UoMykgOiBuMTtcbiAgfVxuICBmdW5jdGlvbiBOKHQxLCBpMSkge1xuICAgIGlmICghaTEgfHwgaTEgPT09IFwiKlwiKVxuICAgICAgcmV0dXJuICEwO1xuICAgIHZhciBuMSA9IHQxLnR5cGUgfHwgXCJcIiwgczEgPSBuMS5yZXBsYWNlKC9cXC8uKiQvLCBcIlwiKTtcbiAgICByZXR1cm4gaTEuc3BsaXQoXCIsXCIpLm1hcChmdW5jdGlvbihkMSkge1xuICAgICAgcmV0dXJuIGQxLnRyaW0oKTtcbiAgICB9KS5zb21lKGZ1bmN0aW9uKGQxKSB7XG4gICAgICByZXR1cm4gZDEuY2hhckF0KDApID09PSBcIi5cIiA/IHQxLm5hbWUgPT09IHZvaWQgMCB8fCB0MS5uYW1lLnRvTG93ZXJDYXNlKCkuZW5kc1dpdGgoZDEudG9Mb3dlckNhc2UoKSkgOiBkMS5lbmRzV2l0aChcIi8qXCIpID8gczEgPT09IGQxLnJlcGxhY2UoL1xcLy4qJC8sIFwiXCIpIDogbjEgPT09IGQxO1xuICAgIH0pO1xuICB9XG4gIGZ1bmN0aW9uIFYodDEpIHtcbiAgICBmb3IgKHZhciBpMSA9IGFyZ3VtZW50cy5sZW5ndGgsIG4xID0gbmV3IEFycmF5KDEgPCBpMSA/IGkxIC0gMSA6IDApLCBzMSA9IDE7IHMxIDwgaTE7IHMxKyspXG4gICAgICBuMVtzMSAtIDFdID0gYXJndW1lbnRzW3MxXTtcbiAgICByZXR1cm4gdHlwZW9mIHQxID09IFwiZnVuY3Rpb25cIiA/IHQxLmFwcGx5KHZvaWQgMCwgbjEpIDogdDE7XG4gIH1cbiAgZnVuY3Rpb24gUih0MSkge1xuICAgIHZhciBpMSA9IG51bGw7XG4gICAgaWYgKFwiZGF0YVRyYW5zZmVyXCIgaW4gdDEpIHtcbiAgICAgIHZhciBuMSA9IHQxLmRhdGFUcmFuc2ZlcjtcbiAgICAgIFwiZmlsZXNcIiBpbiBuMSAmJiBuMS5maWxlcy5sZW5ndGggPyBpMSA9IG4xLmZpbGVzIDogbjEuaXRlbXMgJiYgbjEuaXRlbXMubGVuZ3RoICYmIChpMSA9IG4xLml0ZW1zKTtcbiAgICB9IGVsc2VcbiAgICAgIHQxLnRhcmdldCAmJiB0MS50YXJnZXQuZmlsZXMgJiYgKGkxID0gdDEudGFyZ2V0LmZpbGVzKTtcbiAgICByZXR1cm4gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoaTEpO1xuICB9XG4gIHZhciBJID0gcSwgaiA9IG8oMTEpLCBVID0gby5uKGopLCBfID0geyBkcm9wem9uZTogXCJkenUtZHJvcHpvbmVcIiwgZHJvcHpvbmVBY3RpdmU6IFwiZHp1LWRyb3B6b25lQWN0aXZlXCIsIGRyb3B6b25lUmVqZWN0OiBcImR6dS1kcm9wem9uZUFjdGl2ZVwiLCBkcm9wem9uZURpc2FibGVkOiBcImR6dS1kcm9wem9uZURpc2FibGVkXCIsIGlucHV0OiBcImR6dS1pbnB1dFwiLCBpbnB1dExhYmVsOiBcImR6dS1pbnB1dExhYmVsXCIsIGlucHV0TGFiZWxXaXRoRmlsZXM6IFwiZHp1LWlucHV0TGFiZWxXaXRoRmlsZXNcIiwgcHJldmlldzogXCJkenUtcHJldmlld0NvbnRhaW5lclwiLCBwcmV2aWV3SW1hZ2U6IFwiZHp1LXByZXZpZXdJbWFnZVwiLCBzdWJtaXRCdXR0b25Db250YWluZXI6IFwiZHp1LXN1Ym1pdEJ1dHRvbkNvbnRhaW5lclwiLCBzdWJtaXRCdXR0b246IFwiZHp1LXN1Ym1pdEJ1dHRvblwiIH0sIHIxID0gbygxNCksIEsgPSBvLm4ocjEpLCBRID0gbygxNSksIEUgPSBvLm4oUSksIEQgPSBvKDE2KSwgRyA9IG8ubihEKSwgSiA9IHsgY2FuY2VsOiB7IGJhY2tncm91bmRJbWFnZTogXCJ1cmwoXCIuY29uY2F0KEsuYSwgXCIpXCIpIH0sIHJlbW92ZTogeyBiYWNrZ3JvdW5kSW1hZ2U6IFwidXJsKFwiLmNvbmNhdChFLmEsIFwiKVwiKSB9LCByZXN0YXJ0OiB7IGJhY2tncm91bmRJbWFnZTogXCJ1cmwoXCIuY29uY2F0KEcuYSwgXCIpXCIpIH0gfSwgUyA9IGZ1bmN0aW9uKHQxKSB7XG4gICAgZnVuY3Rpb24gaTEoKSB7XG4gICAgICByZXR1cm4gdSgpKHRoaXMsIGkxKSwgTygpKHRoaXMsIEIoKShpMSkuYXBwbHkodGhpcywgYXJndW1lbnRzKSk7XG4gICAgfVxuICAgIHJldHVybiBMKCkoaTEsIHQxKSwgeigpKGkxLCBbeyBrZXk6IFwicmVuZGVyXCIsIHZhbHVlOiBmdW5jdGlvbigpIHtcbiAgICAgIHZhciBuMSA9IHRoaXMucHJvcHMsIHMxID0gbjEuY2xhc3NOYW1lLCBkMSA9IG4xLmltYWdlQ2xhc3NOYW1lLCBiMSA9IG4xLnN0eWxlLCBjMSA9IG4xLmltYWdlU3R5bGUsIGExID0gbjEuZmlsZVdpdGhNZXRhLCBsMSA9IGExLmNhbmNlbCwgcDEgPSBhMS5yZW1vdmUsIE0xID0gYTEucmVzdGFydCwgQTEgPSBuMS5tZXRhLCB1MSA9IEExLm5hbWUsIGgxID0gdTEgPT09IHZvaWQgMCA/IFwiXCIgOiB1MSwgQzEgPSBBMS5wZXJjZW50LCBxMSA9IEMxID09PSB2b2lkIDAgPyAwIDogQzEsIFcxID0gQTEuc2l6ZSwgUjEgPSBXMSA9PT0gdm9pZCAwID8gMCA6IFcxLCBrMSA9IEExLnByZXZpZXdVcmwsIE4xID0gQTEuc3RhdHVzLCB2MSA9IEExLmR1cmF0aW9uLCBTMSA9IEExLnZhbGlkYXRpb25FcnJvciwgRDEgPSBuMS5pc1VwbG9hZCwgRjEgPSBuMS5jYW5DYW5jZWwsIFUxID0gbjEuY2FuUmVtb3ZlLCBoMCA9IG4xLmNhblJlc3RhcnQsIE8wID0gbjEuZXh0cmEubWluU2l6ZUJ5dGVzLCB3MSA9IFwiXCIuY29uY2F0KGgxIHx8IFwiP1wiLCBcIiwgXCIpLmNvbmNhdChrKFIxKSk7XG4gICAgICByZXR1cm4gdjEgJiYgKHcxID0gXCJcIi5jb25jYXQodzEsIFwiLCBcIikuY29uY2F0KHgodjEpKSksIE4xID09PSBcImVycm9yX2ZpbGVfc2l6ZVwiIHx8IE4xID09PSBcImVycm9yX3ZhbGlkYXRpb25cIiA/IHcuYS5jcmVhdGVFbGVtZW50KFwiZGl2XCIsIHsgY2xhc3NOYW1lOiBzMSwgc3R5bGU6IGIxIH0sIHcuYS5jcmVhdGVFbGVtZW50KFwic3BhblwiLCB7IGNsYXNzTmFtZTogXCJkenUtcHJldmlld0ZpbGVOYW1lRXJyb3JcIiB9LCB3MSksIE4xID09PSBcImVycm9yX2ZpbGVfc2l6ZVwiICYmIHcuYS5jcmVhdGVFbGVtZW50KFwic3BhblwiLCBudWxsLCBSMSA8IE8wID8gXCJGaWxlIHRvbyBzbWFsbFwiIDogXCJGaWxlIHRvbyBiaWdcIiksIE4xID09PSBcImVycm9yX3ZhbGlkYXRpb25cIiAmJiB3LmEuY3JlYXRlRWxlbWVudChcInNwYW5cIiwgbnVsbCwgU3RyaW5nKFMxKSksIFUxICYmIHcuYS5jcmVhdGVFbGVtZW50KFwic3BhblwiLCB7IGNsYXNzTmFtZTogXCJkenUtcHJldmlld0J1dHRvblwiLCBzdHlsZTogSi5yZW1vdmUsIG9uQ2xpY2s6IHAxIH0pKSA6IChOMSAhPT0gXCJlcnJvcl91cGxvYWRfcGFyYW1zXCIgJiYgTjEgIT09IFwiZXhjZXB0aW9uX3VwbG9hZFwiICYmIE4xICE9PSBcImVycm9yX3VwbG9hZFwiIHx8ICh3MSA9IFwiXCIuY29uY2F0KHcxLCBcIiAodXBsb2FkIGZhaWxlZClcIikpLCBOMSA9PT0gXCJhYm9ydGVkXCIgJiYgKHcxID0gXCJcIi5jb25jYXQodzEsIFwiIChjYW5jZWxsZWQpXCIpKSwgdy5hLmNyZWF0ZUVsZW1lbnQoXCJkaXZcIiwgeyBjbGFzc05hbWU6IHMxLCBzdHlsZTogYjEgfSwgazEgJiYgdy5hLmNyZWF0ZUVsZW1lbnQoXCJpbWdcIiwgeyBjbGFzc05hbWU6IGQxLCBzdHlsZTogYzEsIHNyYzogazEsIGFsdDogdzEsIHRpdGxlOiB3MSB9KSwgIWsxICYmIHcuYS5jcmVhdGVFbGVtZW50KFwic3BhblwiLCB7IGNsYXNzTmFtZTogXCJkenUtcHJldmlld0ZpbGVOYW1lXCIgfSwgdzEpLCB3LmEuY3JlYXRlRWxlbWVudChcImRpdlwiLCB7IGNsYXNzTmFtZTogXCJkenUtcHJldmlld1N0YXR1c0NvbnRhaW5lclwiIH0sIEQxICYmIHcuYS5jcmVhdGVFbGVtZW50KFwicHJvZ3Jlc3NcIiwgeyBtYXg6IDEwMCwgdmFsdWU6IE4xID09PSBcImRvbmVcIiB8fCBOMSA9PT0gXCJoZWFkZXJzX3JlY2VpdmVkXCIgPyAxMDAgOiBxMSB9KSwgTjEgPT09IFwidXBsb2FkaW5nXCIgJiYgRjEgJiYgdy5hLmNyZWF0ZUVsZW1lbnQoXCJzcGFuXCIsIHsgY2xhc3NOYW1lOiBcImR6dS1wcmV2aWV3QnV0dG9uXCIsIHN0eWxlOiBKLmNhbmNlbCwgb25DbGljazogbDEgfSksIE4xICE9PSBcInByZXBhcmluZ1wiICYmIE4xICE9PSBcImdldHRpbmdfdXBsb2FkX3BhcmFtc1wiICYmIE4xICE9PSBcInVwbG9hZGluZ1wiICYmIFUxICYmIHcuYS5jcmVhdGVFbGVtZW50KFwic3BhblwiLCB7IGNsYXNzTmFtZTogXCJkenUtcHJldmlld0J1dHRvblwiLCBzdHlsZTogSi5yZW1vdmUsIG9uQ2xpY2s6IHAxIH0pLCBbXCJlcnJvcl91cGxvYWRfcGFyYW1zXCIsIFwiZXhjZXB0aW9uX3VwbG9hZFwiLCBcImVycm9yX3VwbG9hZFwiLCBcImFib3J0ZWRcIiwgXCJyZWFkeVwiXS5pbmNsdWRlcyhOMSkgJiYgaDAgJiYgdy5hLmNyZWF0ZUVsZW1lbnQoXCJzcGFuXCIsIHsgY2xhc3NOYW1lOiBcImR6dS1wcmV2aWV3QnV0dG9uXCIsIHN0eWxlOiBKLnJlc3RhcnQsIG9uQ2xpY2s6IE0xIH0pKSkpO1xuICAgIH0gfV0pLCBpMTtcbiAgfSh3LmEuUHVyZUNvbXBvbmVudCk7XG4gIFMucHJvcFR5cGVzID0geyBjbGFzc05hbWU6IEMuYS5zdHJpbmcsIGltYWdlQ2xhc3NOYW1lOiBDLmEuc3RyaW5nLCBzdHlsZTogQy5hLm9iamVjdCwgaW1hZ2VTdHlsZTogQy5hLm9iamVjdCwgZmlsZVdpdGhNZXRhOiBDLmEuc2hhcGUoeyBmaWxlOiBDLmEuYW55LmlzUmVxdWlyZWQsIG1ldGE6IEMuYS5vYmplY3QuaXNSZXF1aXJlZCwgY2FuY2VsOiBDLmEuZnVuYy5pc1JlcXVpcmVkLCByZXN0YXJ0OiBDLmEuZnVuYy5pc1JlcXVpcmVkLCByZW1vdmU6IEMuYS5mdW5jLmlzUmVxdWlyZWQsIHhocjogQy5hLmFueSB9KS5pc1JlcXVpcmVkLCBtZXRhOiBDLmEuc2hhcGUoeyBzdGF0dXM6IEMuYS5vbmVPZihbXCJwcmVwYXJpbmdcIiwgXCJlcnJvcl9maWxlX3NpemVcIiwgXCJlcnJvcl92YWxpZGF0aW9uXCIsIFwicmVhZHlcIiwgXCJnZXR0aW5nX3VwbG9hZF9wYXJhbXNcIiwgXCJlcnJvcl91cGxvYWRfcGFyYW1zXCIsIFwidXBsb2FkaW5nXCIsIFwiZXhjZXB0aW9uX3VwbG9hZFwiLCBcImFib3J0ZWRcIiwgXCJlcnJvcl91cGxvYWRcIiwgXCJoZWFkZXJzX3JlY2VpdmVkXCIsIFwiZG9uZVwiXSkuaXNSZXF1aXJlZCwgdHlwZTogQy5hLnN0cmluZy5pc1JlcXVpcmVkLCBuYW1lOiBDLmEuc3RyaW5nLCB1cGxvYWRlZERhdGU6IEMuYS5zdHJpbmcuaXNSZXF1aXJlZCwgcGVyY2VudDogQy5hLm51bWJlciwgc2l6ZTogQy5hLm51bWJlciwgbGFzdE1vZGlmaWVkRGF0ZTogQy5hLnN0cmluZywgcHJldmlld1VybDogQy5hLnN0cmluZywgZHVyYXRpb246IEMuYS5udW1iZXIsIHdpZHRoOiBDLmEubnVtYmVyLCBoZWlnaHQ6IEMuYS5udW1iZXIsIHZpZGVvV2lkdGg6IEMuYS5udW1iZXIsIHZpZGVvSGVpZ2h0OiBDLmEubnVtYmVyLCB2YWxpZGF0aW9uRXJyb3I6IEMuYS5hbnkgfSkuaXNSZXF1aXJlZCwgaXNVcGxvYWQ6IEMuYS5ib29sLmlzUmVxdWlyZWQsIGNhbkNhbmNlbDogQy5hLmJvb2wuaXNSZXF1aXJlZCwgY2FuUmVtb3ZlOiBDLmEuYm9vbC5pc1JlcXVpcmVkLCBjYW5SZXN0YXJ0OiBDLmEuYm9vbC5pc1JlcXVpcmVkLCBmaWxlczogQy5hLmFycmF5T2YoQy5hLmFueSkuaXNSZXF1aXJlZCwgZXh0cmE6IEMuYS5zaGFwZSh7IGFjdGl2ZTogQy5hLmJvb2wuaXNSZXF1aXJlZCwgcmVqZWN0OiBDLmEuYm9vbC5pc1JlcXVpcmVkLCBkcmFnZ2VkOiBDLmEuYXJyYXlPZihDLmEuYW55KS5pc1JlcXVpcmVkLCBhY2NlcHQ6IEMuYS5zdHJpbmcuaXNSZXF1aXJlZCwgbXVsdGlwbGU6IEMuYS5ib29sLmlzUmVxdWlyZWQsIG1pblNpemVCeXRlczogQy5hLm51bWJlci5pc1JlcXVpcmVkLCBtYXhTaXplQnl0ZXM6IEMuYS5udW1iZXIuaXNSZXF1aXJlZCwgbWF4RmlsZXM6IEMuYS5udW1iZXIuaXNSZXF1aXJlZCB9KS5pc1JlcXVpcmVkIH07XG4gIGZ1bmN0aW9uIFcodDEpIHtcbiAgICB2YXIgaTEgPSB0MS5jbGFzc05hbWUsIG4xID0gdDEuYnV0dG9uQ2xhc3NOYW1lLCBzMSA9IHQxLnN0eWxlLCBkMSA9IHQxLmJ1dHRvblN0eWxlLCBiMSA9IHQxLmRpc2FibGVkLCBjMSA9IHQxLmNvbnRlbnQsIGExID0gdDEub25TdWJtaXQsIGwxID0gdDEuZmlsZXMsIHAxID0gbDEuc29tZShmdW5jdGlvbihNMSkge1xuICAgICAgcmV0dXJuIFtcInByZXBhcmluZ1wiLCBcImdldHRpbmdfdXBsb2FkX3BhcmFtc1wiLCBcInVwbG9hZGluZ1wiXS5pbmNsdWRlcyhNMS5tZXRhLnN0YXR1cyk7XG4gICAgfSkgfHwgIWwxLnNvbWUoZnVuY3Rpb24oTTEpIHtcbiAgICAgIHJldHVybiBbXCJoZWFkZXJzX3JlY2VpdmVkXCIsIFwiZG9uZVwiXS5pbmNsdWRlcyhNMS5tZXRhLnN0YXR1cyk7XG4gICAgfSk7XG4gICAgcmV0dXJuIHcuYS5jcmVhdGVFbGVtZW50KFwiZGl2XCIsIHsgY2xhc3NOYW1lOiBpMSwgc3R5bGU6IHMxIH0sIHcuYS5jcmVhdGVFbGVtZW50KFwiYnV0dG9uXCIsIHsgY2xhc3NOYW1lOiBuMSwgc3R5bGU6IGQxLCBvbkNsaWNrOiBmdW5jdGlvbigpIHtcbiAgICAgIGExKGwxLmZpbHRlcihmdW5jdGlvbihNMSkge1xuICAgICAgICByZXR1cm4gW1wiaGVhZGVyc19yZWNlaXZlZFwiLCBcImRvbmVcIl0uaW5jbHVkZXMoTTEubWV0YS5zdGF0dXMpO1xuICAgICAgfSkpO1xuICAgIH0sIGRpc2FibGVkOiBiMSB8fCBwMSB9LCBjMSkpO1xuICB9XG4gIHZhciBQID0gUztcbiAgVy5wcm9wVHlwZXMgPSB7IGNsYXNzTmFtZTogQy5hLnN0cmluZywgYnV0dG9uQ2xhc3NOYW1lOiBDLmEuc3RyaW5nLCBzdHlsZTogQy5hLm9iamVjdCwgYnV0dG9uU3R5bGU6IEMuYS5vYmplY3QsIGRpc2FibGVkOiBDLmEuYm9vbC5pc1JlcXVpcmVkLCBjb250ZW50OiBDLmEubm9kZSwgb25TdWJtaXQ6IEMuYS5mdW5jLmlzUmVxdWlyZWQsIGZpbGVzOiBDLmEuYXJyYXlPZihDLmEub2JqZWN0KS5pc1JlcXVpcmVkLCBleHRyYTogQy5hLnNoYXBlKHsgYWN0aXZlOiBDLmEuYm9vbC5pc1JlcXVpcmVkLCByZWplY3Q6IEMuYS5ib29sLmlzUmVxdWlyZWQsIGRyYWdnZWQ6IEMuYS5hcnJheU9mKEMuYS5hbnkpLmlzUmVxdWlyZWQsIGFjY2VwdDogQy5hLnN0cmluZy5pc1JlcXVpcmVkLCBtdWx0aXBsZTogQy5hLmJvb2wuaXNSZXF1aXJlZCwgbWluU2l6ZUJ5dGVzOiBDLmEubnVtYmVyLmlzUmVxdWlyZWQsIG1heFNpemVCeXRlczogQy5hLm51bWJlci5pc1JlcXVpcmVkLCBtYXhGaWxlczogQy5hLm51bWJlci5pc1JlcXVpcmVkIH0pLmlzUmVxdWlyZWQgfTtcbiAgdmFyIFkgPSBXO1xuICBvLmQodCwgXCJMYXlvdXRcIiwgZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIG07XG4gIH0pLCBvLmQodCwgXCJJbnB1dFwiLCBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gSTtcbiAgfSksIG8uZCh0LCBcIlByZXZpZXdcIiwgZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIFA7XG4gIH0pLCBvLmQodCwgXCJTdWJtaXRCdXR0b25cIiwgZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIFk7XG4gIH0pLCBvLmQodCwgXCJmb3JtYXRCeXRlc1wiLCBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gaztcbiAgfSksIG8uZCh0LCBcImZvcm1hdER1cmF0aW9uXCIsIGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiB4O1xuICB9KSwgby5kKHQsIFwiYWNjZXB0c1wiLCBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gTjtcbiAgfSksIG8uZCh0LCBcImRlZmF1bHRDbGFzc05hbWVzXCIsIGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiBfO1xuICB9KSwgby5kKHQsIFwiZ2V0RmlsZXNGcm9tRXZlbnRcIiwgZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIFI7XG4gIH0pO1xuICB2YXIgWiA9IGZ1bmN0aW9uKHQxKSB7XG4gICAgZnVuY3Rpb24gaTEobjEpIHtcbiAgICAgIHZhciBzMTtcbiAgICAgIHJldHVybiB1KCkodGhpcywgaTEpLCAoczEgPSBPKCkodGhpcywgQigpKGkxKS5jYWxsKHRoaXMsIG4xKSkpLmZvcmNlVXBkYXRlID0gZnVuY3Rpb24oKSB7XG4gICAgICAgIHMxLm1vdW50ZWQgJiYgRigpKEIoKShpMS5wcm90b3R5cGUpLCBcImZvcmNlVXBkYXRlXCIsIGcoKShzMSkpLmNhbGwoZygpKHMxKSk7XG4gICAgICB9LCBzMS5nZXRGaWxlc0Zyb21FdmVudCA9IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gczEucHJvcHMuZ2V0RmlsZXNGcm9tRXZlbnQgfHwgUjtcbiAgICAgIH0sIHMxLmdldERhdGFUcmFuc2Zlckl0ZW1zRnJvbUV2ZW50ID0gZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiBzMS5wcm9wcy5nZXREYXRhVHJhbnNmZXJJdGVtc0Zyb21FdmVudCB8fCBSO1xuICAgICAgfSwgczEuaGFuZGxlRHJhZ0VudGVyID0gZnVuY3Rpb24oKSB7XG4gICAgICAgIHZhciBkMSA9IGIoKShwLmEubWFyayhmdW5jdGlvbiBiMShjMSkge1xuICAgICAgICAgIHZhciBhMTtcbiAgICAgICAgICByZXR1cm4gcC5hLndyYXAoZnVuY3Rpb24obDEpIHtcbiAgICAgICAgICAgIGZvciAoOyA7IClcbiAgICAgICAgICAgICAgc3dpdGNoIChsMS5wcmV2ID0gbDEubmV4dCkge1xuICAgICAgICAgICAgICAgIGNhc2UgMDpcbiAgICAgICAgICAgICAgICAgIHJldHVybiBjMS5wcmV2ZW50RGVmYXVsdCgpLCBjMS5zdG9wUHJvcGFnYXRpb24oKSwgbDEubmV4dCA9IDQsIHMxLmdldERhdGFUcmFuc2Zlckl0ZW1zRnJvbUV2ZW50KCkoYzEpO1xuICAgICAgICAgICAgICAgIGNhc2UgNDpcbiAgICAgICAgICAgICAgICAgIGExID0gbDEuc2VudCwgczEuc2V0U3RhdGUoeyBhY3RpdmU6ICEwLCBkcmFnZ2VkOiBhMSB9KTtcbiAgICAgICAgICAgICAgICBjYXNlIDY6XG4gICAgICAgICAgICAgICAgY2FzZSBcImVuZFwiOlxuICAgICAgICAgICAgICAgICAgcmV0dXJuIGwxLnN0b3AoKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgIH0sIGIxKTtcbiAgICAgICAgfSkpO1xuICAgICAgICByZXR1cm4gZnVuY3Rpb24oYjEpIHtcbiAgICAgICAgICByZXR1cm4gZDEuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgICAgICAgfTtcbiAgICAgIH0oKSwgczEuaGFuZGxlRHJhZ092ZXIgPSBmdW5jdGlvbigpIHtcbiAgICAgICAgdmFyIGQxID0gYigpKHAuYS5tYXJrKGZ1bmN0aW9uIGIxKGMxKSB7XG4gICAgICAgICAgdmFyIGExO1xuICAgICAgICAgIHJldHVybiBwLmEud3JhcChmdW5jdGlvbihsMSkge1xuICAgICAgICAgICAgZm9yICg7IDsgKVxuICAgICAgICAgICAgICBzd2l0Y2ggKGwxLnByZXYgPSBsMS5uZXh0KSB7XG4gICAgICAgICAgICAgICAgY2FzZSAwOlxuICAgICAgICAgICAgICAgICAgcmV0dXJuIGMxLnByZXZlbnREZWZhdWx0KCksIGMxLnN0b3BQcm9wYWdhdGlvbigpLCBjbGVhclRpbWVvdXQoczEuZHJhZ1RpbWVvdXRJZCksIGwxLm5leHQgPSA1LCBzMS5nZXREYXRhVHJhbnNmZXJJdGVtc0Zyb21FdmVudCgpKGMxKTtcbiAgICAgICAgICAgICAgICBjYXNlIDU6XG4gICAgICAgICAgICAgICAgICBhMSA9IGwxLnNlbnQsIHMxLnNldFN0YXRlKHsgYWN0aXZlOiAhMCwgZHJhZ2dlZDogYTEgfSk7XG4gICAgICAgICAgICAgICAgY2FzZSA3OlxuICAgICAgICAgICAgICAgIGNhc2UgXCJlbmRcIjpcbiAgICAgICAgICAgICAgICAgIHJldHVybiBsMS5zdG9wKCk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICB9LCBiMSk7XG4gICAgICAgIH0pKTtcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uKGIxKSB7XG4gICAgICAgICAgcmV0dXJuIGQxLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gICAgICAgIH07XG4gICAgICB9KCksIHMxLmhhbmRsZURyYWdMZWF2ZSA9IGZ1bmN0aW9uKGQxKSB7XG4gICAgICAgIGQxLnByZXZlbnREZWZhdWx0KCksIGQxLnN0b3BQcm9wYWdhdGlvbigpLCBzMS5kcmFnVGltZW91dElkID0gd2luZG93LnNldFRpbWVvdXQoZnVuY3Rpb24oKSB7XG4gICAgICAgICAgcmV0dXJuIHMxLnNldFN0YXRlKHsgYWN0aXZlOiAhMSwgZHJhZ2dlZDogW10gfSk7XG4gICAgICAgIH0sIDE1MCk7XG4gICAgICB9LCBzMS5oYW5kbGVEcm9wID0gZnVuY3Rpb24oKSB7XG4gICAgICAgIHZhciBkMSA9IGIoKShwLmEubWFyayhmdW5jdGlvbiBiMShjMSkge1xuICAgICAgICAgIHZhciBhMTtcbiAgICAgICAgICByZXR1cm4gcC5hLndyYXAoZnVuY3Rpb24obDEpIHtcbiAgICAgICAgICAgIGZvciAoOyA7IClcbiAgICAgICAgICAgICAgc3dpdGNoIChsMS5wcmV2ID0gbDEubmV4dCkge1xuICAgICAgICAgICAgICAgIGNhc2UgMDpcbiAgICAgICAgICAgICAgICAgIHJldHVybiBjMS5wcmV2ZW50RGVmYXVsdCgpLCBjMS5zdG9wUHJvcGFnYXRpb24oKSwgczEuc2V0U3RhdGUoeyBhY3RpdmU6ICExLCBkcmFnZ2VkOiBbXSB9KSwgbDEubmV4dCA9IDUsIHMxLmdldEZpbGVzRnJvbUV2ZW50KCkoYzEpO1xuICAgICAgICAgICAgICAgIGNhc2UgNTpcbiAgICAgICAgICAgICAgICAgIGExID0gbDEuc2VudCwgczEuaGFuZGxlRmlsZXMoYTEpO1xuICAgICAgICAgICAgICAgIGNhc2UgNzpcbiAgICAgICAgICAgICAgICBjYXNlIFwiZW5kXCI6XG4gICAgICAgICAgICAgICAgICByZXR1cm4gbDEuc3RvcCgpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgfSwgYjEpO1xuICAgICAgICB9KSk7XG4gICAgICAgIHJldHVybiBmdW5jdGlvbihiMSkge1xuICAgICAgICAgIHJldHVybiBkMS5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICAgICAgICB9O1xuICAgICAgfSgpLCBzMS5oYW5kbGVEcm9wRGlzYWJsZWQgPSBmdW5jdGlvbihkMSkge1xuICAgICAgICBkMS5wcmV2ZW50RGVmYXVsdCgpLCBkMS5zdG9wUHJvcGFnYXRpb24oKSwgczEuc2V0U3RhdGUoeyBhY3RpdmU6ICExLCBkcmFnZ2VkOiBbXSB9KTtcbiAgICAgIH0sIHMxLmhhbmRsZUNoYW5nZVN0YXR1cyA9IGZ1bmN0aW9uKGQxKSB7XG4gICAgICAgIGlmIChzMS5wcm9wcy5vbkNoYW5nZVN0YXR1cykge1xuICAgICAgICAgIHZhciBiMSA9IChzMS5wcm9wcy5vbkNoYW5nZVN0YXR1cyhkMSwgZDEubWV0YS5zdGF0dXMsIHMxLmZpbGVzKSB8fCB7fSkubWV0YSwgYzEgPSBiMSA9PT0gdm9pZCAwID8ge30gOiBiMTtcbiAgICAgICAgICBjMSAmJiAoZGVsZXRlIGMxLnN0YXR1cywgZDEubWV0YSA9IHMoKSh7fSwgZDEubWV0YSwge30sIGMxKSwgczEuZm9yY2VVcGRhdGUoKSk7XG4gICAgICAgIH1cbiAgICAgIH0sIHMxLmhhbmRsZVN1Ym1pdCA9IGZ1bmN0aW9uKGQxKSB7XG4gICAgICAgIHMxLnByb3BzLm9uU3VibWl0ICYmIHMxLnByb3BzLm9uU3VibWl0KGQxLCBpKCkoczEuZmlsZXMpKTtcbiAgICAgIH0sIHMxLmhhbmRsZUNhbmNlbCA9IGZ1bmN0aW9uKGQxKSB7XG4gICAgICAgIGQxLm1ldGEuc3RhdHVzID09PSBcInVwbG9hZGluZ1wiICYmIChkMS5tZXRhLnN0YXR1cyA9IFwiYWJvcnRlZFwiLCBkMS54aHIgJiYgZDEueGhyLmFib3J0KCksIHMxLmhhbmRsZUNoYW5nZVN0YXR1cyhkMSksIHMxLmZvcmNlVXBkYXRlKCkpO1xuICAgICAgfSwgczEuaGFuZGxlUmVtb3ZlID0gZnVuY3Rpb24oZDEpIHtcbiAgICAgICAgdmFyIGIxID0gczEuZmlsZXMuZmluZEluZGV4KGZ1bmN0aW9uKGMxKSB7XG4gICAgICAgICAgcmV0dXJuIGMxID09PSBkMTtcbiAgICAgICAgfSk7XG4gICAgICAgIGIxICE9PSAtMSAmJiAoVVJMLnJldm9rZU9iamVjdFVSTChkMS5tZXRhLnByZXZpZXdVcmwgfHwgXCJcIiksIGQxLm1ldGEuc3RhdHVzID0gXCJyZW1vdmVkXCIsIHMxLmhhbmRsZUNoYW5nZVN0YXR1cyhkMSksIHMxLmZpbGVzLnNwbGljZShiMSwgMSksIHMxLmZvcmNlVXBkYXRlKCkpO1xuICAgICAgfSwgczEuaGFuZGxlUmVzdGFydCA9IGZ1bmN0aW9uKGQxKSB7XG4gICAgICAgIHMxLnByb3BzLmdldFVwbG9hZFBhcmFtcyAmJiAoZDEubWV0YS5zdGF0dXMgPT09IFwicmVhZHlcIiA/IGQxLm1ldGEuc3RhdHVzID0gXCJzdGFydGVkXCIgOiBkMS5tZXRhLnN0YXR1cyA9IFwicmVzdGFydGVkXCIsIHMxLmhhbmRsZUNoYW5nZVN0YXR1cyhkMSksIGQxLm1ldGEuc3RhdHVzID0gXCJnZXR0aW5nX3VwbG9hZF9wYXJhbXNcIiwgZDEubWV0YS5wZXJjZW50ID0gMCwgczEuaGFuZGxlQ2hhbmdlU3RhdHVzKGQxKSwgczEuZm9yY2VVcGRhdGUoKSwgczEudXBsb2FkRmlsZShkMSkpO1xuICAgICAgfSwgczEuaGFuZGxlRmlsZXMgPSBmdW5jdGlvbihkMSkge1xuICAgICAgICBkMS5mb3JFYWNoKGZ1bmN0aW9uKGMxLCBhMSkge1xuICAgICAgICAgIHJldHVybiBzMS5oYW5kbGVGaWxlKGMxLCBcIlwiLmNvbmNhdCgoLyogQF9fUFVSRV9fICovIG5ldyBEYXRlKCkpLmdldFRpbWUoKSwgXCItXCIpLmNvbmNhdChhMSkpO1xuICAgICAgICB9KTtcbiAgICAgICAgdmFyIGIxID0gczEuZHJvcHpvbmUuY3VycmVudDtcbiAgICAgICAgYjEgJiYgc2V0VGltZW91dChmdW5jdGlvbigpIHtcbiAgICAgICAgICByZXR1cm4gYjEuc2Nyb2xsKHsgdG9wOiBiMS5zY3JvbGxIZWlnaHQsIGJlaGF2aW9yOiBcInNtb290aFwiIH0pO1xuICAgICAgICB9LCAxNTApO1xuICAgICAgfSwgczEuaGFuZGxlRmlsZSA9IGZ1bmN0aW9uKCkge1xuICAgICAgICB2YXIgZDEgPSBiKCkocC5hLm1hcmsoZnVuY3Rpb24gYjEoYzEsIGExKSB7XG4gICAgICAgICAgdmFyIGwxLCBwMSwgTTEsIEExLCB1MSwgaDEsIEMxLCBxMSwgVzEsIFIxLCBrMSwgTjEsIHYxLCBTMSwgRDEsIEYxO1xuICAgICAgICAgIHJldHVybiBwLmEud3JhcChmdW5jdGlvbihVMSkge1xuICAgICAgICAgICAgZm9yICg7IDsgKVxuICAgICAgICAgICAgICBzd2l0Y2ggKFUxLnByZXYgPSBVMS5uZXh0KSB7XG4gICAgICAgICAgICAgICAgY2FzZSAwOlxuICAgICAgICAgICAgICAgICAgaWYgKGwxID0gYzEubmFtZSwgcDEgPSBjMS5zaXplLCBNMSA9IGMxLnR5cGUsIEExID0gYzEubGFzdE1vZGlmaWVkLCB1MSA9IHMxLnByb3BzLCBoMSA9IHUxLm1pblNpemVCeXRlcywgQzEgPSB1MS5tYXhTaXplQnl0ZXMsIHExID0gdTEubWF4RmlsZXMsIFcxID0gdTEuYWNjZXB0LCBSMSA9IHUxLmdldFVwbG9hZFBhcmFtcywgazEgPSB1MS5hdXRvVXBsb2FkLCBOMSA9IHUxLnZhbGlkYXRlLCB2MSA9ICgvKiBAX19QVVJFX18gKi8gbmV3IERhdGUoKSkudG9JU09TdHJpbmcoKSwgUzEgPSBBMSAmJiBuZXcgRGF0ZShBMSkudG9JU09TdHJpbmcoKSwgRDEgPSB7IGZpbGU6IGMxLCBtZXRhOiB7IG5hbWU6IGwxLCBzaXplOiBwMSwgdHlwZTogTTEsIGxhc3RNb2RpZmllZERhdGU6IFMxLCB1cGxvYWRlZERhdGU6IHYxLCBwZXJjZW50OiAwLCBpZDogYTEgfSB9LCBjMS50eXBlID09PSBcImFwcGxpY2F0aW9uL3gtbW96LWZpbGVcIiB8fCBOKGMxLCBXMSkpIHtcbiAgICAgICAgICAgICAgICAgICAgVTEubmV4dCA9IDk7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgcmV0dXJuIEQxLm1ldGEuc3RhdHVzID0gXCJyZWplY3RlZF9maWxlX3R5cGVcIiwgczEuaGFuZGxlQ2hhbmdlU3RhdHVzKEQxKSwgVTEuYWJydXB0KFwicmV0dXJuXCIpO1xuICAgICAgICAgICAgICAgIGNhc2UgOTpcbiAgICAgICAgICAgICAgICAgIGlmIChzMS5maWxlcy5sZW5ndGggPj0gcTEpXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBEMS5tZXRhLnN0YXR1cyA9IFwicmVqZWN0ZWRfbWF4X2ZpbGVzXCIsIHMxLmhhbmRsZUNoYW5nZVN0YXR1cyhEMSksIFUxLmFicnVwdChcInJldHVyblwiKTtcbiAgICAgICAgICAgICAgICAgIFUxLm5leHQgPSAxMztcbiAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGNhc2UgMTM6XG4gICAgICAgICAgICAgICAgICBpZiAoRDEuY2FuY2VsID0gZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBzMS5oYW5kbGVDYW5jZWwoRDEpO1xuICAgICAgICAgICAgICAgICAgfSwgRDEucmVtb3ZlID0gZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBzMS5oYW5kbGVSZW1vdmUoRDEpO1xuICAgICAgICAgICAgICAgICAgfSwgRDEucmVzdGFydCA9IGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gczEuaGFuZGxlUmVzdGFydChEMSk7XG4gICAgICAgICAgICAgICAgICB9LCBEMS5tZXRhLnN0YXR1cyA9IFwicHJlcGFyaW5nXCIsIHMxLmZpbGVzLnB1c2goRDEpLCBzMS5oYW5kbGVDaGFuZ2VTdGF0dXMoRDEpLCBzMS5mb3JjZVVwZGF0ZSgpLCBwMSA8IGgxIHx8IEMxIDwgcDEpXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBEMS5tZXRhLnN0YXR1cyA9IFwiZXJyb3JfZmlsZV9zaXplXCIsIHMxLmhhbmRsZUNoYW5nZVN0YXR1cyhEMSksIHMxLmZvcmNlVXBkYXRlKCksIFUxLmFicnVwdChcInJldHVyblwiKTtcbiAgICAgICAgICAgICAgICAgIFUxLm5leHQgPSAyNTtcbiAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGNhc2UgMjU6XG4gICAgICAgICAgICAgICAgICByZXR1cm4gVTEubmV4dCA9IDI3LCBzMS5nZW5lcmF0ZVByZXZpZXcoRDEpO1xuICAgICAgICAgICAgICAgIGNhc2UgMjc6XG4gICAgICAgICAgICAgICAgICBpZiAoIU4xKSB7XG4gICAgICAgICAgICAgICAgICAgIFUxLm5leHQgPSAzNTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICBpZiAoRjEgPSBOMShEMSkpXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBEMS5tZXRhLnN0YXR1cyA9IFwiZXJyb3JfdmFsaWRhdGlvblwiLCBEMS5tZXRhLnZhbGlkYXRpb25FcnJvciA9IEYxLCBzMS5oYW5kbGVDaGFuZ2VTdGF0dXMoRDEpLCBzMS5mb3JjZVVwZGF0ZSgpLCBVMS5hYnJ1cHQoXCJyZXR1cm5cIik7XG4gICAgICAgICAgICAgICAgICBVMS5uZXh0ID0gMzU7XG4gICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBjYXNlIDM1OlxuICAgICAgICAgICAgICAgICAgUjEgPyBrMSA/IChzMS51cGxvYWRGaWxlKEQxKSwgRDEubWV0YS5zdGF0dXMgPSBcImdldHRpbmdfdXBsb2FkX3BhcmFtc1wiKSA6IEQxLm1ldGEuc3RhdHVzID0gXCJyZWFkeVwiIDogRDEubWV0YS5zdGF0dXMgPSBcImRvbmVcIiwgczEuaGFuZGxlQ2hhbmdlU3RhdHVzKEQxKSwgczEuZm9yY2VVcGRhdGUoKTtcbiAgICAgICAgICAgICAgICBjYXNlIDM4OlxuICAgICAgICAgICAgICAgIGNhc2UgXCJlbmRcIjpcbiAgICAgICAgICAgICAgICAgIHJldHVybiBVMS5zdG9wKCk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICB9LCBiMSk7XG4gICAgICAgIH0pKTtcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uKGIxLCBjMSkge1xuICAgICAgICAgIHJldHVybiBkMS5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICAgICAgICB9O1xuICAgICAgfSgpLCBzMS5nZW5lcmF0ZVByZXZpZXcgPSBmdW5jdGlvbigpIHtcbiAgICAgICAgdmFyIGQxID0gYigpKHAuYS5tYXJrKGZ1bmN0aW9uIGIxKGMxKSB7XG4gICAgICAgICAgdmFyIGExLCBsMSwgcDEsIE0xLCBBMSwgdTEsIGgxLCBDMSwgcTEsIFcxO1xuICAgICAgICAgIHJldHVybiBwLmEud3JhcChmdW5jdGlvbihSMSkge1xuICAgICAgICAgICAgZm9yICg7IDsgKVxuICAgICAgICAgICAgICBzd2l0Y2ggKFIxLnByZXYgPSBSMS5uZXh0KSB7XG4gICAgICAgICAgICAgICAgY2FzZSAwOlxuICAgICAgICAgICAgICAgICAgaWYgKGExID0gYzEubWV0YS50eXBlLCBsMSA9IGMxLmZpbGUsIHAxID0gYTEuc3RhcnRzV2l0aChcImltYWdlL1wiKSwgTTEgPSBhMS5zdGFydHNXaXRoKFwiYXVkaW8vXCIpLCBBMSA9IGExLnN0YXJ0c1dpdGgoXCJ2aWRlby9cIiksIHAxIHx8IE0xIHx8IEExKSB7XG4gICAgICAgICAgICAgICAgICAgIFIxLm5leHQgPSA2O1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIHJldHVybiBSMS5hYnJ1cHQoXCJyZXR1cm5cIik7XG4gICAgICAgICAgICAgICAgY2FzZSA2OlxuICAgICAgICAgICAgICAgICAgaWYgKHUxID0gVVJMLmNyZWF0ZU9iamVjdFVSTChsMSksIGgxID0gZnVuY3Rpb24oazEpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmFjZShbbmV3IFByb21pc2UoZnVuY3Rpb24oTjEpIHtcbiAgICAgICAgICAgICAgICAgICAgICBrMSBpbnN0YW5jZW9mIEhUTUxJbWFnZUVsZW1lbnQgPyBrMS5vbmxvYWQgPSBOMSA6IGsxLm9ubG9hZGVkbWV0YWRhdGEgPSBOMTtcbiAgICAgICAgICAgICAgICAgICAgfSksIG5ldyBQcm9taXNlKGZ1bmN0aW9uKE4xLCB2MSkge1xuICAgICAgICAgICAgICAgICAgICAgIHNldFRpbWVvdXQodjEsIDFlMyk7XG4gICAgICAgICAgICAgICAgICAgIH0pXSk7XG4gICAgICAgICAgICAgICAgICB9LCBSMS5wcmV2ID0gOCwgcDEpXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiAoQzEgPSBuZXcgSW1hZ2UoKSkuc3JjID0gdTEsIGMxLm1ldGEucHJldmlld1VybCA9IHUxLCBSMS5uZXh0ID0gMTUsIGgxKEMxKTtcbiAgICAgICAgICAgICAgICAgIFIxLm5leHQgPSAxNztcbiAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGNhc2UgMTU6XG4gICAgICAgICAgICAgICAgICBjMS5tZXRhLndpZHRoID0gQzEud2lkdGgsIGMxLm1ldGEuaGVpZ2h0ID0gQzEuaGVpZ2h0O1xuICAgICAgICAgICAgICAgIGNhc2UgMTc6XG4gICAgICAgICAgICAgICAgICBpZiAoTTEpXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiAocTEgPSBuZXcgQXVkaW8oKSkuc3JjID0gdTEsIFIxLm5leHQgPSAyMiwgaDEocTEpO1xuICAgICAgICAgICAgICAgICAgUjEubmV4dCA9IDIzO1xuICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSAyMjpcbiAgICAgICAgICAgICAgICAgIGMxLm1ldGEuZHVyYXRpb24gPSBxMS5kdXJhdGlvbjtcbiAgICAgICAgICAgICAgICBjYXNlIDIzOlxuICAgICAgICAgICAgICAgICAgaWYgKEExKVxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gKFcxID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcInZpZGVvXCIpKS5zcmMgPSB1MSwgUjEubmV4dCA9IDI4LCBoMShXMSk7XG4gICAgICAgICAgICAgICAgICBSMS5uZXh0ID0gMzE7XG4gICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBjYXNlIDI4OlxuICAgICAgICAgICAgICAgICAgYzEubWV0YS5kdXJhdGlvbiA9IFcxLmR1cmF0aW9uLCBjMS5tZXRhLnZpZGVvV2lkdGggPSBXMS52aWRlb1dpZHRoLCBjMS5tZXRhLnZpZGVvSGVpZ2h0ID0gVzEudmlkZW9IZWlnaHQ7XG4gICAgICAgICAgICAgICAgY2FzZSAzMTpcbiAgICAgICAgICAgICAgICAgIHAxIHx8IFVSTC5yZXZva2VPYmplY3RVUkwodTEpLCBSMS5uZXh0ID0gMzc7XG4gICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBjYXNlIDM0OlxuICAgICAgICAgICAgICAgICAgUjEucHJldiA9IDM0LCBSMS50MCA9IFIxLmNhdGNoKDgpLCBVUkwucmV2b2tlT2JqZWN0VVJMKHUxKTtcbiAgICAgICAgICAgICAgICBjYXNlIDM3OlxuICAgICAgICAgICAgICAgICAgczEuZm9yY2VVcGRhdGUoKTtcbiAgICAgICAgICAgICAgICBjYXNlIDM4OlxuICAgICAgICAgICAgICAgIGNhc2UgXCJlbmRcIjpcbiAgICAgICAgICAgICAgICAgIHJldHVybiBSMS5zdG9wKCk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICB9LCBiMSwgbnVsbCwgW1s4LCAzNF1dKTtcbiAgICAgICAgfSkpO1xuICAgICAgICByZXR1cm4gZnVuY3Rpb24oYjEpIHtcbiAgICAgICAgICByZXR1cm4gZDEuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgICAgICAgfTtcbiAgICAgIH0oKSwgczEudXBsb2FkRmlsZSA9IGZ1bmN0aW9uKCkge1xuICAgICAgICB2YXIgZDEgPSBiKCkocC5hLm1hcmsoZnVuY3Rpb24gYjEoYzEpIHtcbiAgICAgICAgICB2YXIgYTEsIGwxLCBwMSwgTTEsIEExLCB1MSwgaDEsIEMxLCBxMSwgVzEsIFIxLCBrMSwgTjEsIHYxLCBTMSwgRDEsIEYxLCBVMSwgaDAsIE8wLCB3MTtcbiAgICAgICAgICByZXR1cm4gcC5hLndyYXAoZnVuY3Rpb24oZzEpIHtcbiAgICAgICAgICAgIGZvciAoOyA7IClcbiAgICAgICAgICAgICAgc3dpdGNoIChnMS5wcmV2ID0gZzEubmV4dCkge1xuICAgICAgICAgICAgICAgIGNhc2UgMDpcbiAgICAgICAgICAgICAgICAgIGlmIChhMSA9IHMxLnByb3BzLmdldFVwbG9hZFBhcmFtcykge1xuICAgICAgICAgICAgICAgICAgICBnMS5uZXh0ID0gMztcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICByZXR1cm4gZzEuYWJydXB0KFwicmV0dXJuXCIpO1xuICAgICAgICAgICAgICAgIGNhc2UgMzpcbiAgICAgICAgICAgICAgICAgIHJldHVybiBsMSA9IG51bGwsIGcxLnByZXYgPSA0LCBnMS5uZXh0ID0gNywgYTEoYzEpO1xuICAgICAgICAgICAgICAgIGNhc2UgNzpcbiAgICAgICAgICAgICAgICAgIGwxID0gZzEuc2VudCwgZzEubmV4dCA9IDEzO1xuICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSAxMDpcbiAgICAgICAgICAgICAgICAgIGcxLnByZXYgPSAxMCwgZzEudDAgPSBnMS5jYXRjaCg0KSwgY29uc29sZS5lcnJvcihcIkVycm9yIFVwbG9hZCBQYXJhbXNcIiwgZzEudDAuc3RhY2spO1xuICAgICAgICAgICAgICAgIGNhc2UgMTM6XG4gICAgICAgICAgICAgICAgICBpZiAobDEgPT09IG51bGwpXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBnMS5hYnJ1cHQoXCJyZXR1cm5cIik7XG4gICAgICAgICAgICAgICAgICBnMS5uZXh0ID0gMTU7XG4gICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBjYXNlIDE1OlxuICAgICAgICAgICAgICAgICAgaWYgKE0xID0gKHAxID0gbDEpLnVybCwgQTEgPSBwMS5tZXRob2QsIHUxID0gQTEgPT09IHZvaWQgMCA/IFwiUE9TVFwiIDogQTEsIGgxID0gcDEuYm9keSwgQzEgPSBwMS5maWVsZHMsIHExID0gQzEgPT09IHZvaWQgMCA/IHt9IDogQzEsIFcxID0gcDEuaGVhZGVycywgUjEgPSBXMSA9PT0gdm9pZCAwID8ge30gOiBXMSwgazEgPSBwMS5tZXRhLCBkZWxldGUgKE4xID0gazEgPT09IHZvaWQgMCA/IHt9IDogazEpLnN0YXR1cywgTTEpIHtcbiAgICAgICAgICAgICAgICAgICAgZzEubmV4dCA9IDIyO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIHJldHVybiBjMS5tZXRhLnN0YXR1cyA9IFwiZXJyb3JfdXBsb2FkX3BhcmFtc1wiLCBzMS5oYW5kbGVDaGFuZ2VTdGF0dXMoYzEpLCBzMS5mb3JjZVVwZGF0ZSgpLCBnMS5hYnJ1cHQoXCJyZXR1cm5cIik7XG4gICAgICAgICAgICAgICAgY2FzZSAyMjpcbiAgICAgICAgICAgICAgICAgIGZvciAodjEgPSBuZXcgWE1MSHR0cFJlcXVlc3QoKSwgUzEgPSBuZXcgRm9ybURhdGEoKSwgdjEub3Blbih1MSwgTTEsICEwKSwgRDEgPSAwLCBGMSA9IE9iamVjdC5rZXlzKHExKTsgRDEgPCBGMS5sZW5ndGg7IEQxKyspXG4gICAgICAgICAgICAgICAgICAgIFUxID0gRjFbRDFdLCBTMS5hcHBlbmQoVTEsIHExW1UxXSk7XG4gICAgICAgICAgICAgICAgICBmb3IgKHYxLnNldFJlcXVlc3RIZWFkZXIoXCJYLVJlcXVlc3RlZC1XaXRoXCIsIFwiWE1MSHR0cFJlcXVlc3RcIiksIGgwID0gMCwgTzAgPSBPYmplY3Qua2V5cyhSMSk7IGgwIDwgTzAubGVuZ3RoOyBoMCsrKVxuICAgICAgICAgICAgICAgICAgICB3MSA9IE8wW2gwXSwgdjEuc2V0UmVxdWVzdEhlYWRlcih3MSwgUjFbdzFdKTtcbiAgICAgICAgICAgICAgICAgIGMxLm1ldGEgPSBzKCkoe30sIGMxLm1ldGEsIHt9LCBOMSksIHYxLnVwbG9hZC5hZGRFdmVudExpc3RlbmVyKFwicHJvZ3Jlc3NcIiwgZnVuY3Rpb24oRTEpIHtcbiAgICAgICAgICAgICAgICAgICAgYzEubWV0YS5wZXJjZW50ID0gMTAwICogRTEubG9hZGVkIC8gRTEudG90YWwgfHwgMTAwLCBzMS5mb3JjZVVwZGF0ZSgpO1xuICAgICAgICAgICAgICAgICAgfSksIHYxLmFkZEV2ZW50TGlzdGVuZXIoXCJyZWFkeXN0YXRlY2hhbmdlXCIsIGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgICAgICAgICB2MS5yZWFkeVN0YXRlICE9PSAyICYmIHYxLnJlYWR5U3RhdGUgIT09IDQgfHwgKHYxLnN0YXR1cyA9PT0gMCAmJiBjMS5tZXRhLnN0YXR1cyAhPT0gXCJhYm9ydGVkXCIgJiYgKGMxLm1ldGEuc3RhdHVzID0gXCJleGNlcHRpb25fdXBsb2FkXCIsIHMxLmhhbmRsZUNoYW5nZVN0YXR1cyhjMSksIHMxLmZvcmNlVXBkYXRlKCkpLCAwIDwgdjEuc3RhdHVzICYmIHYxLnN0YXR1cyA8IDQwMCAmJiAoYzEubWV0YS5wZXJjZW50ID0gMTAwLCB2MS5yZWFkeVN0YXRlID09PSAyICYmIChjMS5tZXRhLnN0YXR1cyA9IFwiaGVhZGVyc19yZWNlaXZlZFwiKSwgdjEucmVhZHlTdGF0ZSA9PT0gNCAmJiAoYzEubWV0YS5zdGF0dXMgPSBcImRvbmVcIiksIHMxLmhhbmRsZUNoYW5nZVN0YXR1cyhjMSksIHMxLmZvcmNlVXBkYXRlKCkpLCA0MDAgPD0gdjEuc3RhdHVzICYmIGMxLm1ldGEuc3RhdHVzICE9PSBcImVycm9yX3VwbG9hZFwiICYmIChjMS5tZXRhLnN0YXR1cyA9IFwiZXJyb3JfdXBsb2FkXCIsIHMxLmhhbmRsZUNoYW5nZVN0YXR1cyhjMSksIHMxLmZvcmNlVXBkYXRlKCkpKTtcbiAgICAgICAgICAgICAgICAgIH0pLCBTMS5hcHBlbmQoXCJmaWxlXCIsIGMxLmZpbGUpLCBzMS5wcm9wcy50aW1lb3V0ICYmICh2MS50aW1lb3V0ID0gczEucHJvcHMudGltZW91dCksIHYxLnNlbmQoaDEgfHwgUzEpLCBjMS54aHIgPSB2MSwgYzEubWV0YS5zdGF0dXMgPSBcInVwbG9hZGluZ1wiLCBzMS5oYW5kbGVDaGFuZ2VTdGF0dXMoYzEpLCBzMS5mb3JjZVVwZGF0ZSgpO1xuICAgICAgICAgICAgICAgIGNhc2UgMzg6XG4gICAgICAgICAgICAgICAgY2FzZSBcImVuZFwiOlxuICAgICAgICAgICAgICAgICAgcmV0dXJuIGcxLnN0b3AoKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgIH0sIGIxLCBudWxsLCBbWzQsIDEwXV0pO1xuICAgICAgICB9KSk7XG4gICAgICAgIHJldHVybiBmdW5jdGlvbihiMSkge1xuICAgICAgICAgIHJldHVybiBkMS5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICAgICAgICB9O1xuICAgICAgfSgpLCBzMS5zdGF0ZSA9IHsgYWN0aXZlOiAhMSwgZHJhZ2dlZDogW10gfSwgczEuZmlsZXMgPSBbXSwgczEubW91bnRlZCA9ICEwLCBzMS5kcm9wem9uZSA9IHcuYS5jcmVhdGVSZWYoKSwgczE7XG4gICAgfVxuICAgIHJldHVybiBMKCkoaTEsIHQxKSwgeigpKGkxLCBbeyBrZXk6IFwiY29tcG9uZW50RGlkTW91bnRcIiwgdmFsdWU6IGZ1bmN0aW9uKCkge1xuICAgICAgdGhpcy5wcm9wcy5pbml0aWFsRmlsZXMgJiYgdGhpcy5oYW5kbGVGaWxlcyh0aGlzLnByb3BzLmluaXRpYWxGaWxlcyk7XG4gICAgfSB9LCB7IGtleTogXCJjb21wb25lbnREaWRVcGRhdGVcIiwgdmFsdWU6IGZ1bmN0aW9uKG4xKSB7XG4gICAgICB2YXIgczEgPSB0aGlzLnByb3BzLmluaXRpYWxGaWxlcztcbiAgICAgIG4xLmluaXRpYWxGaWxlcyAhPT0gczEgJiYgczEgJiYgdGhpcy5oYW5kbGVGaWxlcyhzMSk7XG4gICAgfSB9LCB7IGtleTogXCJjb21wb25lbnRXaWxsVW5tb3VudFwiLCB2YWx1ZTogZnVuY3Rpb24oKSB7XG4gICAgICB2YXIgbjEgPSAhKHRoaXMubW91bnRlZCA9ICExKSwgczEgPSAhMSwgZDEgPSB2b2lkIDA7XG4gICAgICB0cnkge1xuICAgICAgICBmb3IgKHZhciBiMSwgYzEgPSB0aGlzLmZpbGVzW1N5bWJvbC5pdGVyYXRvcl0oKTsgIShuMSA9IChiMSA9IGMxLm5leHQoKSkuZG9uZSk7IG4xID0gITApIHtcbiAgICAgICAgICB2YXIgYTEgPSBiMS52YWx1ZTtcbiAgICAgICAgICB0aGlzLmhhbmRsZUNhbmNlbChhMSk7XG4gICAgICAgIH1cbiAgICAgIH0gY2F0Y2ggKGwxKSB7XG4gICAgICAgIHMxID0gITAsIGQxID0gbDE7XG4gICAgICB9IGZpbmFsbHkge1xuICAgICAgICB0cnkge1xuICAgICAgICAgIG4xIHx8IGMxLnJldHVybiA9PSBudWxsIHx8IGMxLnJldHVybigpO1xuICAgICAgICB9IGZpbmFsbHkge1xuICAgICAgICAgIGlmIChzMSlcbiAgICAgICAgICAgIHRocm93IGQxO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSB9LCB7IGtleTogXCJyZW5kZXJcIiwgdmFsdWU6IGZ1bmN0aW9uKCkge1xuICAgICAgdmFyIG4xID0gdGhpcy5wcm9wcywgczEgPSBuMS5hY2NlcHQsIGQxID0gbjEubXVsdGlwbGUsIGIxID0gbjEubWF4RmlsZXMsIGMxID0gbjEubWluU2l6ZUJ5dGVzLCBhMSA9IG4xLm1heFNpemVCeXRlcywgbDEgPSBuMS5vblN1Ym1pdCwgcDEgPSBuMS5nZXRVcGxvYWRQYXJhbXMsIE0xID0gbjEuZGlzYWJsZWQsIEExID0gbjEuY2FuQ2FuY2VsLCB1MSA9IG4xLmNhblJlbW92ZSwgaDEgPSBuMS5jYW5SZXN0YXJ0LCBDMSA9IG4xLmlucHV0Q29udGVudCwgcTEgPSBuMS5pbnB1dFdpdGhGaWxlc0NvbnRlbnQsIFcxID0gbjEuc3VibWl0QnV0dG9uRGlzYWJsZWQsIFIxID0gbjEuc3VibWl0QnV0dG9uQ29udGVudCwgazEgPSBuMS5jbGFzc05hbWVzLCBOMSA9IG4xLnN0eWxlcywgdjEgPSBuMS5hZGRDbGFzc05hbWVzLCBTMSA9IG4xLklucHV0Q29tcG9uZW50LCBEMSA9IG4xLlByZXZpZXdDb21wb25lbnQsIEYxID0gbjEuU3VibWl0QnV0dG9uQ29tcG9uZW50LCBVMSA9IG4xLkxheW91dENvbXBvbmVudCwgaDAgPSB0aGlzLnN0YXRlLCBPMCA9IGgwLmFjdGl2ZSwgdzEgPSBoMC5kcmFnZ2VkLCBnMSA9IHcxLnNvbWUoZnVuY3Rpb24oaGUpIHtcbiAgICAgICAgcmV0dXJuIGhlLnR5cGUgIT09IFwiYXBwbGljYXRpb24veC1tb3otZmlsZVwiICYmICFOKGhlLCBzMSk7XG4gICAgICB9KSwgRTEgPSB7IGFjdGl2ZTogTzAsIHJlamVjdDogZzEsIGRyYWdnZWQ6IHcxLCBhY2NlcHQ6IHMxLCBtdWx0aXBsZTogZDEsIG1pblNpemVCeXRlczogYzEsIG1heFNpemVCeXRlczogYTEsIG1heEZpbGVzOiBiMSB9LCBCMSA9IGkoKSh0aGlzLmZpbGVzKSwgSzEgPSBWKE0xLCBCMSwgRTEpLCBwMCA9IGZ1bmN0aW9uKGhlLCBPbywgJHIpIHtcbiAgICAgICAgZm9yICh2YXIgWXQgPSBzKCkoe30sIF8pLCBmbyA9IHMoKSh7fSwgT28pLCBmMyA9IGFyZ3VtZW50cy5sZW5ndGgsIEd0ID0gbmV3IEFycmF5KDMgPCBmMyA/IGYzIC0gMyA6IDApLCBRdCA9IDM7IFF0IDwgZjM7IFF0KyspXG4gICAgICAgICAgR3RbUXQgLSAzXSA9IGFyZ3VtZW50c1tRdF07XG4gICAgICAgIGZvciAodmFyIGczID0gMCwgZ28gPSBPYmplY3QuZW50cmllcyhoZSk7IGczIDwgZ28ubGVuZ3RoOyBnMysrKSB7XG4gICAgICAgICAgdmFyIENvID0gVSgpKGdvW2czXSwgMiksIGplID0gQ29bMF0sIGd0ID0gQ29bMV07XG4gICAgICAgICAgWXRbamVdID0gVi5hcHBseSh2b2lkIDAsIFtndF0uY29uY2F0KEd0KSk7XG4gICAgICAgIH1cbiAgICAgICAgZm9yICh2YXIgQzMgPSAwLCBtbyA9IE9iamVjdC5lbnRyaWVzKCRyKTsgQzMgPCBtby5sZW5ndGg7IEMzKyspIHtcbiAgICAgICAgICB2YXIgTG8gPSBVKCkobW9bQzNdLCAyKTtcbiAgICAgICAgICBqZSA9IExvWzBdLCBndCA9IExvWzFdLCBZdFtqZV0gPSBcIlwiLmNvbmNhdChZdFtqZV0sIFwiIFwiKS5jb25jYXQoVi5hcHBseSh2b2lkIDAsIFtndF0uY29uY2F0KEd0KSkpO1xuICAgICAgICB9XG4gICAgICAgIGZvciAodmFyIG0zID0gMCwgdm8gPSBPYmplY3QuZW50cmllcyhPbyk7IG0zIDwgdm8ubGVuZ3RoOyBtMysrKSB7XG4gICAgICAgICAgdmFyIHFvID0gVSgpKHZvW20zXSwgMik7XG4gICAgICAgICAgamUgPSBxb1swXSwgZ3QgPSBxb1sxXSwgZm9bamVdID0gVi5hcHBseSh2b2lkIDAsIFtndF0uY29uY2F0KEd0KSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHsgY2xhc3NOYW1lczogWXQsIHN0eWxlczogZm8gfTtcbiAgICAgIH0oazEsIE4xLCB2MSwgQjEsIEUxKSwgZTAgPSBwMC5jbGFzc05hbWVzLCBIMSA9IGUwLmRyb3B6b25lLCB4MSA9IGUwLmRyb3B6b25lQWN0aXZlLCBJMSA9IGUwLmRyb3B6b25lUmVqZWN0LCBYMSA9IGUwLmRyb3B6b25lRGlzYWJsZWQsIEoxID0gZTAuaW5wdXQsIGYwID0gZTAuaW5wdXRMYWJlbCwgSTAgPSBlMC5pbnB1dExhYmVsV2l0aEZpbGVzLCBPMSA9IGUwLnByZXZpZXcsIFYxID0gZTAucHJldmlld0ltYWdlLCBHMSA9IGUwLnN1Ym1pdEJ1dHRvbkNvbnRhaW5lciwgaTAgPSBlMC5zdWJtaXRCdXR0b24sIGIwID0gcDAuc3R5bGVzLCBnMCA9IGIwLmRyb3B6b25lLCB1MCA9IGIwLmRyb3B6b25lQWN0aXZlLCB6MCA9IGIwLmRyb3B6b25lUmVqZWN0LCBWMCA9IGIwLmRyb3B6b25lRGlzYWJsZWQsIFcwID0gYjAuaW5wdXQsIEYwID0gYjAuaW5wdXRMYWJlbCwgYjIgPSBiMC5pbnB1dExhYmVsV2l0aEZpbGVzLCBaMiA9IGIwLnByZXZpZXcsIGowID0gYjAucHJldmlld0ltYWdlLCBhMiA9IGIwLnN1Ym1pdEJ1dHRvbkNvbnRhaW5lciwgQTIgPSBiMC5zdWJtaXRCdXR0b24sIE90ID0gUzEgfHwgSSwgZnQgPSBEMSB8fCBQLCBqciA9IEYxIHx8IFksIEtyID0gVTEgfHwgbSwgaG8gPSBudWxsO1xuICAgICAgRDEgIT09IG51bGwgJiYgKGhvID0gQjEubWFwKGZ1bmN0aW9uKGhlKSB7XG4gICAgICAgIHJldHVybiB3LmEuY3JlYXRlRWxlbWVudChmdCwgeyBjbGFzc05hbWU6IE8xLCBpbWFnZUNsYXNzTmFtZTogVjEsIHN0eWxlOiBaMiwgaW1hZ2VTdHlsZTogajAsIGtleTogaGUubWV0YS5pZCwgZmlsZVdpdGhNZXRhOiBoZSwgbWV0YTogcygpKHt9LCBoZS5tZXRhKSwgaXNVcGxvYWQ6ICEhcDEsIGNhbkNhbmNlbDogVihBMSwgQjEsIEUxKSwgY2FuUmVtb3ZlOiBWKHUxLCBCMSwgRTEpLCBjYW5SZXN0YXJ0OiBWKGgxLCBCMSwgRTEpLCBmaWxlczogQjEsIGV4dHJhOiBFMSB9KTtcbiAgICAgIH0pKTtcbiAgICAgIHZhciBKciA9IFMxICE9PSBudWxsID8gdy5hLmNyZWF0ZUVsZW1lbnQoT3QsIHsgY2xhc3NOYW1lOiBKMSwgbGFiZWxDbGFzc05hbWU6IGYwLCBsYWJlbFdpdGhGaWxlc0NsYXNzTmFtZTogSTAsIHN0eWxlOiBXMCwgbGFiZWxTdHlsZTogRjAsIGxhYmVsV2l0aEZpbGVzU3R5bGU6IGIyLCBnZXRGaWxlc0Zyb21FdmVudDogdGhpcy5nZXRGaWxlc0Zyb21FdmVudCgpLCBhY2NlcHQ6IHMxLCBtdWx0aXBsZTogZDEsIGRpc2FibGVkOiBLMSwgY29udGVudDogVihDMSwgQjEsIEUxKSwgd2l0aEZpbGVzQ29udGVudDogVihxMSwgQjEsIEUxKSwgb25GaWxlczogdGhpcy5oYW5kbGVGaWxlcywgZmlsZXM6IEIxLCBleHRyYTogRTEgfSkgOiBudWxsLCBfciA9IGwxICYmIEYxICE9PSBudWxsID8gdy5hLmNyZWF0ZUVsZW1lbnQoanIsIHsgY2xhc3NOYW1lOiBHMSwgYnV0dG9uQ2xhc3NOYW1lOiBpMCwgc3R5bGU6IGEyLCBidXR0b25TdHlsZTogQTIsIGRpc2FibGVkOiBWKFcxLCBCMSwgRTEpLCBjb250ZW50OiBWKFIxLCBCMSwgRTEpLCBvblN1Ym1pdDogdGhpcy5oYW5kbGVTdWJtaXQsIGZpbGVzOiBCMSwgZXh0cmE6IEUxIH0pIDogbnVsbCwgeGUgPSBIMSwgV2UgPSBnMDtcbiAgICAgIHJldHVybiBLMSA/ICh4ZSA9IFwiXCIuY29uY2F0KHhlLCBcIiBcIikuY29uY2F0KFgxKSwgV2UgPSBzKCkoe30sIFdlIHx8IHt9LCB7fSwgVjAgfHwge30pKSA6IGcxID8gKHhlID0gXCJcIi5jb25jYXQoeGUsIFwiIFwiKS5jb25jYXQoSTEpLCBXZSA9IHMoKSh7fSwgV2UgfHwge30sIHt9LCB6MCB8fCB7fSkpIDogTzAgJiYgKHhlID0gXCJcIi5jb25jYXQoeGUsIFwiIFwiKS5jb25jYXQoeDEpLCBXZSA9IHMoKSh7fSwgV2UgfHwge30sIHt9LCB1MCB8fCB7fSkpLCB3LmEuY3JlYXRlRWxlbWVudChLciwgeyBpbnB1dDogSnIsIHByZXZpZXdzOiBobywgc3VibWl0QnV0dG9uOiBfciwgZHJvcHpvbmVQcm9wczogeyByZWY6IHRoaXMuZHJvcHpvbmUsIGNsYXNzTmFtZTogeGUsIHN0eWxlOiBXZSwgb25EcmFnRW50ZXI6IHRoaXMuaGFuZGxlRHJhZ0VudGVyLCBvbkRyYWdPdmVyOiB0aGlzLmhhbmRsZURyYWdPdmVyLCBvbkRyYWdMZWF2ZTogdGhpcy5oYW5kbGVEcmFnTGVhdmUsIG9uRHJvcDogSzEgPyB0aGlzLmhhbmRsZURyb3BEaXNhYmxlZCA6IHRoaXMuaGFuZGxlRHJvcCB9LCBmaWxlczogQjEsIGV4dHJhOiBzKCkoe30sIEUxLCB7IG9uRmlsZXM6IHRoaXMuaGFuZGxlRmlsZXMsIG9uQ2FuY2VsRmlsZTogdGhpcy5oYW5kbGVDYW5jZWwsIG9uUmVtb3ZlRmlsZTogdGhpcy5oYW5kbGVSZW1vdmUsIG9uUmVzdGFydEZpbGU6IHRoaXMuaGFuZGxlUmVzdGFydCB9KSB9KTtcbiAgICB9IH1dKSwgaTE7XG4gIH0ody5hLkNvbXBvbmVudCk7XG4gIFouZGVmYXVsdFByb3BzID0geyBhY2NlcHQ6IFwiKlwiLCBtdWx0aXBsZTogITAsIG1pblNpemVCeXRlczogMCwgbWF4U2l6ZUJ5dGVzOiBOdW1iZXIuTUFYX1NBRkVfSU5URUdFUiwgbWF4RmlsZXM6IE51bWJlci5NQVhfU0FGRV9JTlRFR0VSLCBhdXRvVXBsb2FkOiAhMCwgZGlzYWJsZWQ6ICExLCBjYW5DYW5jZWw6ICEwLCBjYW5SZW1vdmU6ICEwLCBjYW5SZXN0YXJ0OiAhMCwgaW5wdXRDb250ZW50OiBcIkRyYWcgRmlsZXMgb3IgQ2xpY2sgdG8gQnJvd3NlXCIsIGlucHV0V2l0aEZpbGVzQ29udGVudDogXCJBZGQgRmlsZXNcIiwgc3VibWl0QnV0dG9uRGlzYWJsZWQ6ICExLCBzdWJtaXRCdXR0b25Db250ZW50OiBcIlN1Ym1pdFwiLCBjbGFzc05hbWVzOiB7fSwgc3R5bGVzOiB7fSwgYWRkQ2xhc3NOYW1lczoge30gfSwgWi5wcm9wVHlwZXMgPSB7IG9uQ2hhbmdlU3RhdHVzOiBDLmEuZnVuYywgZ2V0VXBsb2FkUGFyYW1zOiBDLmEuZnVuYywgb25TdWJtaXQ6IEMuYS5mdW5jLCBnZXRGaWxlc0Zyb21FdmVudDogQy5hLmZ1bmMsIGdldERhdGFUcmFuc2Zlckl0ZW1zRnJvbUV2ZW50OiBDLmEuZnVuYywgYWNjZXB0OiBDLmEuc3RyaW5nLCBtdWx0aXBsZTogQy5hLmJvb2wsIG1pblNpemVCeXRlczogQy5hLm51bWJlci5pc1JlcXVpcmVkLCBtYXhTaXplQnl0ZXM6IEMuYS5udW1iZXIuaXNSZXF1aXJlZCwgbWF4RmlsZXM6IEMuYS5udW1iZXIuaXNSZXF1aXJlZCwgdmFsaWRhdGU6IEMuYS5mdW5jLCBhdXRvVXBsb2FkOiBDLmEuYm9vbCwgdGltZW91dDogQy5hLm51bWJlciwgaW5pdGlhbEZpbGVzOiBDLmEuYXJyYXlPZihDLmEuYW55KSwgZGlzYWJsZWQ6IEMuYS5vbmVPZlR5cGUoW0MuYS5ib29sLCBDLmEuZnVuY10pLCBjYW5DYW5jZWw6IEMuYS5vbmVPZlR5cGUoW0MuYS5ib29sLCBDLmEuZnVuY10pLCBjYW5SZW1vdmU6IEMuYS5vbmVPZlR5cGUoW0MuYS5ib29sLCBDLmEuZnVuY10pLCBjYW5SZXN0YXJ0OiBDLmEub25lT2ZUeXBlKFtDLmEuYm9vbCwgQy5hLmZ1bmNdKSwgaW5wdXRDb250ZW50OiBDLmEub25lT2ZUeXBlKFtDLmEubm9kZSwgQy5hLmZ1bmNdKSwgaW5wdXRXaXRoRmlsZXNDb250ZW50OiBDLmEub25lT2ZUeXBlKFtDLmEubm9kZSwgQy5hLmZ1bmNdKSwgc3VibWl0QnV0dG9uRGlzYWJsZWQ6IEMuYS5vbmVPZlR5cGUoW0MuYS5ib29sLCBDLmEuZnVuY10pLCBzdWJtaXRCdXR0b25Db250ZW50OiBDLmEub25lT2ZUeXBlKFtDLmEubm9kZSwgQy5hLmZ1bmNdKSwgY2xhc3NOYW1lczogQy5hLm9iamVjdC5pc1JlcXVpcmVkLCBzdHlsZXM6IEMuYS5vYmplY3QuaXNSZXF1aXJlZCwgYWRkQ2xhc3NOYW1lczogQy5hLm9iamVjdC5pc1JlcXVpcmVkLCBJbnB1dENvbXBvbmVudDogQy5hLmZ1bmMsIFByZXZpZXdDb21wb25lbnQ6IEMuYS5mdW5jLCBTdWJtaXRCdXR0b25Db21wb25lbnQ6IEMuYS5mdW5jLCBMYXlvdXRDb21wb25lbnQ6IEMuYS5mdW5jIH0sIHQuZGVmYXVsdCA9IFo7XG59XSk7XG5jb25zdCBONCA9IC8qIEBfX1BVUkVfXyAqLyBRMih1WiksIEI1ID0gJC5kaXYoXG4gICh7XG4gICAgdGhlbWU6IHtcbiAgICAgIGNvbG9yczogZSxcbiAgICAgIHR5cG9ncmFwaHk6IHQsXG4gICAgICBzcGFjaW5nczogbyxcbiAgICAgIGJvcmRlclJhZGl1czogbixcbiAgICAgIEdMT0JBTF9JVEVNX0hFSUdIVF9DT05ERU5TRUQ6IHJcbiAgICB9XG4gIH0pID0+IG8xYFxuICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gICAgZm9udC1zaXplOiAke3QudDE0fTtcbiAgICBtaW4taGVpZ2h0OiAke3J9O1xuICAgIG1hcmdpbi10b3A6ICR7by5zcDh9O1xuICAgIGJhY2tncm91bmQtY29sb3I6ICR7ZS5iYWNrZ3JvdW5kcy5iZ1ByaW1hcnl9O1xuICAgIGJveC1zaGFkb3c6IDAgMCAwIDFweCAke2UuYm9yZGVyLmJvcmRlclByaW1hcnl9IGluc2V0O1xuICAgIGJveC1zaXppbmc6IGJvcmRlci1ib3g7XG4gICAgYm9yZGVyLXJhZGl1czogJHtuLmJhc2V9O1xuICBgXG4pLCBXYyA9ICQuZGl2YFxuICBkaXNwbGF5OiBmbGV4O1xuICBhbGlnbi1pdGVtczogY2VudGVyO1xuICBqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWJldHdlZW47XG4gIHdpZHRoOiAxMDAlO1xuICBwYWRkaW5nOiA0cHggMTJweDtcbmAsIFJjID0gJC5kaXYoXG4gICh7XG4gICAgdGhlbWU6IHsgbWl4aW5zOiBlLCBmb250V2VpZ2h0OiB0LCBzcGFjaW5nczogbywgdHlwb2dyYXBoeTogbiwgY29sb3JzOiByIH0sXG4gICAgJHVwbG9hZExhYmVsOiBpXG4gIH0pID0+IG8xYFxuICAgIHBhZGRpbmctbGVmdDogJHtpID8gby5zcDggOiBvLnNwMTJ9O1xuICAgIHBhZGRpbmctcmlnaHQ6ICR7by5zcDh9O1xuICAgIGZvbnQtd2VpZ2h0OiAke3QucmVndWxhcn07XG4gICAgZm9udC1zaXplOiAke24udDEyfTtcbiAgICBsaW5lLWhlaWdodDogMTYuOHB4O1xuICAgIGNvbG9yOiAke3IudGV4dEljb24udGV4dEhpZ2hlbXBoYXNpc307XG4gICAgJHtlLmVsbGlwc2lzfVxuICBgXG4pLCB6WiA9ICQuZGl2KFxuICAoeyB0aGVtZTogeyBjb2xvcnM6IGUsIHR5cG9ncmFwaHk6IHQsIGZvbnRXZWlnaHQ6IG8gfSB9KSA9PiBvMWBcbiAgICBjb2xvcjogJHtlLnRleHRJY29uLnRleHRNZWRpdW1lbXBoYXNpc307XG4gICAgZm9udC1zaXplOiAke3QudDEyfTtcbiAgICBmb250LXdlaWdodDogJHtvLmxpZ2h0fTtcbiAgICB3aGl0ZS1zcGFjZTogbm93cmFwO1xuICBgXG4pLCBCYyA9ICQuZGl2KFxuICAoeyB0aGVtZTogeyBjb2xvcnM6IGUgfSB9KSA9PiBvMWBcbiAgICBkaXNwbGF5OiBmbGV4O1xuICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gICAganVzdGlmeS1jb250ZW50OiBmbGV4LXN0YXJ0O1xuICAgIGZsZXg6IDE7XG4gICAgd2lkdGg6IGNhbGMoMTAwJSAtIDQ4cHgpO1xuICAgIHBhZGRpbmctcmlnaHQ6ICR7KHsgdGhlbWU6IHsgc3BhY2luZ3M6IHQgfSB9KSA9PiB0LnNwOH07XG4gICAgLmljb24tc3lzdGVtIHtcbiAgICAgIGNvbG9yOiAke2UudGV4dEljb24udGV4dFByaW1hcnl9O1xuICAgIH1cbiAgYFxuKSwgaFogPSAkKEI1KShcbiAgKHsgdGhlbWU6IHsgY29sb3JzOiBlIH0gfSkgPT4gbzFgXG4gICAgYm9yZGVyOiAxcHggc29saWQgJHtlLmJvcmRlci5ib3JkZXJFcnJvcn07XG4gIGBcbiksIFQ0ID0gKHtcbiAgbWV0YTogZSxcbiAgZmlsZVdpdGhNZXRhOiB0LFxuICBtYXhTaXplOiBvXG59KSA9PiB7XG4gIGNvbnN0IHsgbmFtZTogbiwgcGVyY2VudDogciwgc3RhdHVzOiBpLCBzaXplOiBhIH0gPSBlLCBzID0gbyA/IGEgPj0gbyAqIDFlNiA6ICExLCBsID0gKCkgPT4gLyogQF9fUFVSRV9fICovIGUxKFdjLCB7IGNoaWxkcmVuOiBbXG4gICAgLyogQF9fUFVSRV9fICovIGUxKEJjLCB7IGNoaWxkcmVuOiBbXG4gICAgICAvKiBAX19QVVJFX18gKi8gYyhaMSwgeyBuYW1lOiBcIkRvY3VtZW50XCIsIHNpemU6IFwieHhzXCIgfSksXG4gICAgICAvKiBAX19QVVJFX18gKi8gYyhSYywgeyBjaGlsZHJlbjogbiB9KSxcbiAgICAgIC8qIEBfX1BVUkVfXyAqLyBlMSh6WiwgeyBjaGlsZHJlbjogW1xuICAgICAgICBNYXRoLnJvdW5kKGEgLyAxZTMpLFxuICAgICAgICBcIiBLQlwiXG4gICAgICBdIH0pXG4gICAgXSB9KSxcbiAgICAvKiBAX19QVVJFX18gKi8gYyhBMywgeyBwbGFjZTogXCJib3R0b21cIiwgdGV4dDogXCJEZWxldGVcIiwgY2hpbGRyZW46IC8qIEBfX1BVUkVfXyAqLyBjKFxuICAgICAgRzIsXG4gICAgICB7XG4gICAgICAgIG5hbWU6IFwiQmluXCIsXG4gICAgICAgIGJ1dHRvblR5cGU6IFwibGlua1wiLFxuICAgICAgICBzaXplOiBcInNtXCIsXG4gICAgICAgIG9uQ2xpY2s6IHQucmVtb3ZlXG4gICAgICB9XG4gICAgKSB9KVxuICBdIH0pLCBwID0gKCkgPT4ge1xuICAgIHN3aXRjaCAoaSkge1xuICAgICAgY2FzZSBcInVwbG9hZGluZ1wiOlxuICAgICAgICByZXR1cm4gLyogQF9fUFVSRV9fICovIGMoQjUsIHsgY2hpbGRyZW46IC8qIEBfX1BVUkVfXyAqLyBlMShXYywgeyBjaGlsZHJlbjogW1xuICAgICAgICAgIC8qIEBfX1BVUkVfXyAqLyBlMShCYywgeyBjaGlsZHJlbjogW1xuICAgICAgICAgICAgLyogQF9fUFVSRV9fICovIGMoQzQsIHsgaGFzTGFiZWw6ICEwLCBwcm9ncmVzczogTWF0aC5yb3VuZChyKSB9KSxcbiAgICAgICAgICAgIC8qIEBfX1BVUkVfXyAqLyBjKFJjLCB7ICR1cGxvYWRMYWJlbDogITAsIGNoaWxkcmVuOiBcIlVwbG9hZGluZyBmaWxlLi4uXCIgfSlcbiAgICAgICAgICBdIH0pLFxuICAgICAgICAgIC8qIEBfX1BVUkVfXyAqLyBjKFxuICAgICAgICAgICAgRzIsXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIG5hbWU6IFwiQ3Jvc3NcIixcbiAgICAgICAgICAgICAgYnV0dG9uVHlwZTogXCJsaW5rXCIsXG4gICAgICAgICAgICAgIHNpemU6IFwic21cIixcbiAgICAgICAgICAgICAgb25DbGljazogdC5jYW5jZWxcbiAgICAgICAgICAgIH1cbiAgICAgICAgICApXG4gICAgICAgIF0gfSkgfSk7XG4gICAgICBjYXNlIFwiZG9uZVwiOlxuICAgICAgY2FzZSBcImhlYWRlcnNfcmVjZWl2ZWRcIjpcbiAgICAgICAgcmV0dXJuIC8qIEBfX1BVUkVfXyAqLyBjKEI1LCB7IGNoaWxkcmVuOiAvKiBAX19QVVJFX18gKi8gYyhsLCB7fSkgfSk7XG4gICAgICBjYXNlIFwiYWJvcnRlZFwiOlxuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgfTtcbiAgcmV0dXJuIHMgPyAvKiBAX19QVVJFX18gKi8gYyhBMywgeyB0ZXh0OiBcIk1heGltdW0gZmlsZSBzaXplIHdhcyByZWFjaGVkXCIsIHBsYWNlOiBcImJvdHRvbVwiLCBjaGlsZHJlbjogLyogQF9fUFVSRV9fICovIGMoaFosIHsgY2hpbGRyZW46IC8qIEBfX1BVUkVfXyAqLyBjKGwsIHt9KSB9KSB9KSA6IHAoKTtcbn0sIE9aID0gJC5kaXYoXG4gICh7IHRoZW1lOiB7IGNvbG9yczogZSwgYm9yZGVyUmFkaXVzOiB0IH0gfSkgPT4gbzFgXG4gICAgLyogYmFzZSAgKi9cblxuICAgIC5kenUtZHJvcHpvbmUge1xuICAgICAgZGlzcGxheTogZmxleDtcbiAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG4gICAgICBhbGlnbi1pdGVtczogY2VudGVyO1xuICAgICAgd2lkdGg6IDEwMCU7XG4gICAgICBtaW4taGVpZ2h0OiAxMjBweDtcbiAgICAgIG92ZXJmbG93OiBzY3JvbGw7XG4gICAgICBtYXJnaW46IDAgYXV0bztcbiAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgICAgIGJveC1zaXppbmc6IGJvcmRlci1ib3g7XG4gICAgICB0cmFuc2l0aW9uOiBhbGwgMC4xNXMgbGluZWFyO1xuICAgICAgYm9yZGVyOiAycHggc29saWQgI2Q5ZDlkOTtcbiAgICAgIGJvcmRlci1yYWRpdXM6IDRweDtcbiAgICB9XG5cbiAgICAuZHp1LWRyb3B6b25lQWN0aXZlIHtcbiAgICAgIGJhY2tncm91bmQtY29sb3I6ICNkZWViZmY7XG4gICAgICBib3JkZXItY29sb3I6ICMyNDg0ZmY7XG4gICAgfVxuXG4gICAgLmR6dS1kcm9wem9uZURpc2FibGVkIHtcbiAgICAgIG9wYWNpdHk6IDAuNTtcbiAgICB9XG5cbiAgICAuZHp1LWRyb3B6b25lRGlzYWJsZWQgKjpob3ZlciB7XG4gICAgICBjdXJzb3I6IHVuc2V0O1xuICAgIH1cblxuICAgIC5kenUtaW5wdXQge1xuICAgICAgZGlzcGxheTogbm9uZTtcbiAgICB9XG5cbiAgICAuZHp1LWlucHV0TGFiZWwge1xuICAgICAgZGlzcGxheTogZmxleDtcbiAgICAgIGp1c3RpZnktY29udGVudDogY2VudGVyO1xuICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICAgIHRvcDogMDtcbiAgICAgIGJvdHRvbTogMDtcbiAgICAgIGxlZnQ6IDA7XG4gICAgICByaWdodDogMDtcbiAgICAgIGZvbnQtZmFtaWx5OiAnSGVsdmV0aWNhJywgc2Fucy1zZXJpZjtcbiAgICAgIGZvbnQtc2l6ZTogMjBweDtcbiAgICAgIGZvbnQtd2VpZ2h0OiA2MDA7XG4gICAgICBjb2xvcjogIzI0ODRmZjtcbiAgICAgIC1tb3otb3N4LWZvbnQtc21vb3RoaW5nOiBncmF5c2NhbGU7XG4gICAgICAtd2Via2l0LWZvbnQtc21vb3RoaW5nOiBhbnRpYWxpYXNlZDtcbiAgICAgIGN1cnNvcjogcG9pbnRlcjtcbiAgICB9XG5cbiAgICAuZHp1LWlucHV0TGFiZWxXaXRoRmlsZXMge1xuICAgICAgZGlzcGxheTogZmxleDtcbiAgICAgIGp1c3RpZnktY29udGVudDogY2VudGVyO1xuICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgICAgIGFsaWduLXNlbGY6IGZsZXgtc3RhcnQ7XG4gICAgICBwYWRkaW5nOiAwIDE0cHg7XG4gICAgICBtaW4taGVpZ2h0OiAzMnB4O1xuICAgICAgYmFja2dyb3VuZC1jb2xvcjogI2U2ZTZlNjtcbiAgICAgIGNvbG9yOiAjMjQ4NGZmO1xuICAgICAgYm9yZGVyOiBub25lO1xuICAgICAgZm9udC1mYW1pbHk6ICdIZWx2ZXRpY2EnLCBzYW5zLXNlcmlmO1xuICAgICAgYm9yZGVyLXJhZGl1czogNHB4O1xuICAgICAgZm9udC1zaXplOiAxNHB4O1xuICAgICAgZm9udC13ZWlnaHQ6IDYwMDtcbiAgICAgIG1hcmdpbi10b3A6IDIwcHg7XG4gICAgICBtYXJnaW4tbGVmdDogMyU7XG4gICAgICAtbW96LW9zeC1mb250LXNtb290aGluZzogZ3JheXNjYWxlO1xuICAgICAgLXdlYmtpdC1mb250LXNtb290aGluZzogYW50aWFsaWFzZWQ7XG4gICAgICBjdXJzb3I6IHBvaW50ZXI7XG4gICAgfVxuXG4gICAgLmR6dS1wcmV2aWV3Q29udGFpbmVyIHtcbiAgICAgIHBhZGRpbmc6IDQwcHggMyU7XG4gICAgICBkaXNwbGF5OiBmbGV4O1xuICAgICAgZmxleC1kaXJlY3Rpb246IHJvdztcbiAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gICAgICBqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWJldHdlZW47XG4gICAgICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gICAgICB3aWR0aDogMTAwJTtcbiAgICAgIG1pbi1oZWlnaHQ6IDYwcHg7XG4gICAgICB6LWluZGV4OiAxO1xuICAgICAgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkICNlY2VjZWM7XG4gICAgICBib3gtc2l6aW5nOiBib3JkZXItYm94O1xuICAgIH1cblxuICAgIC5kenUtcHJldmlld1N0YXR1c0NvbnRhaW5lciB7XG4gICAgICBkaXNwbGF5OiBmbGV4O1xuICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgICB9XG5cbiAgICAuZHp1LXByZXZpZXdGaWxlTmFtZSB7XG4gICAgICBmb250LWZhbWlseTogJ0hlbHZldGljYScsIHNhbnMtc2VyaWY7XG4gICAgICBmb250LXNpemU6IDE0cHg7XG4gICAgICBmb250LXdlaWdodDogNDAwO1xuICAgICAgY29sb3I6ICMzMzMzMzM7XG4gICAgfVxuXG4gICAgLmR6dS1wcmV2aWV3SW1hZ2Uge1xuICAgICAgd2lkdGg6IGF1dG87XG4gICAgICBtYXgtaGVpZ2h0OiA0MHB4O1xuICAgICAgbWF4LXdpZHRoOiAxNDBweDtcbiAgICAgIGJvcmRlci1yYWRpdXM6IDRweDtcbiAgICB9XG5cbiAgICAuZHp1LXByZXZpZXdCdXR0b24ge1xuICAgICAgYmFja2dyb3VuZC1zaXplOiAxNHB4IDE0cHg7XG4gICAgICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiBjZW50ZXI7XG4gICAgICBiYWNrZ3JvdW5kLXJlcGVhdDogbm8tcmVwZWF0O1xuICAgICAgd2lkdGg6IDE0cHg7XG4gICAgICBoZWlnaHQ6IDE0cHg7XG4gICAgICBjdXJzb3I6IHBvaW50ZXI7XG4gICAgICBvcGFjaXR5OiAwLjk7XG4gICAgICBtYXJnaW46IDAgMCAycHggMTBweDtcbiAgICB9XG5cbiAgICAuZHp1LXN1Ym1pdEJ1dHRvbkNvbnRhaW5lciB7XG4gICAgICBtYXJnaW46IDI0cHggMDtcbiAgICAgIHotaW5kZXg6IDE7XG4gICAgfVxuXG4gICAgLmR6dS1zdWJtaXRCdXR0b24ge1xuICAgICAgcGFkZGluZzogMCAxNHB4O1xuICAgICAgbWluLWhlaWdodDogMzJweDtcbiAgICAgIGJhY2tncm91bmQtY29sb3I6ICMyNDg0ZmY7XG4gICAgICBib3JkZXI6IG5vbmU7XG4gICAgICBib3JkZXItcmFkaXVzOiA0cHg7XG4gICAgICBmb250LWZhbWlseTogJ0hlbHZldGljYScsIHNhbnMtc2VyaWY7XG4gICAgICBmb250LXNpemU6IDE0cHg7XG4gICAgICBmb250LXdlaWdodDogNjAwO1xuICAgICAgY29sb3I6ICNmZmY7XG4gICAgICAtbW96LW9zeC1mb250LXNtb290aGluZzogZ3JheXNjYWxlO1xuICAgICAgLXdlYmtpdC1mb250LXNtb290aGluZzogYW50aWFsaWFzZWQ7XG4gICAgICBjdXJzb3I6IHBvaW50ZXI7XG4gICAgfVxuXG4gICAgLmR6dS1zdWJtaXRCdXR0b246ZGlzYWJsZWQge1xuICAgICAgYmFja2dyb3VuZC1jb2xvcjogI2U2ZTZlNjtcbiAgICAgIGNvbG9yOiAjMzMzMzMzO1xuICAgICAgY3Vyc29yOiB1bnNldDtcbiAgICB9XG5cbiAgICAvKiBiYXNlIGVuZCAgKi9cblxuICAgIC5kenUtZHJvcHpvbmUge1xuICAgICAgb3ZlcmZsb3c6IGF1dG87XG4gICAgICAmQWN0aXZlIHtcbiAgICAgICAgLmR6dS1pbnB1dExhYmVsIHtcbiAgICAgICAgICBiYWNrZ3JvdW5kOiAke2UuYmFja2dyb3VuZHMuZ2hvc3RXaGl0ZX07XG4gICAgICAgICAgYm9yZGVyLXN0eWxlOiBzb2xpZDtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgJkRpc2FibGVkIHtcbiAgICAgICAgb3BhY2l0eTogMTtcbiAgICAgICAgLmR6dS1pbnB1dExhYmVsIHtcbiAgICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAke2UuYmFja2dyb3VuZHMuYmdEaXNhYmxlZFByaW1hcnl9O1xuICAgICAgICAgIGJvcmRlci1jb2xvcjogJHtlLmJvcmRlci5ib3JkZXJEaXNhYmxlZE9uYmd9O1xuXG4gICAgICAgICAgJjpob3ZlcixcbiAgICAgICAgICAmOmFjdGl2ZSB7XG4gICAgICAgICAgICBiYWNrZ3JvdW5kOiAke2UuYmFja2dyb3VuZHMuYmdIb3ZlclByaW1hcnl9O1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICAke1dNfSxcbiAgICAgICAgJHtSTX0sIFxuICAgICAgICBzdmcge1xuICAgICAgICAgIGNvbG9yOiAke2UudGV4dEljb24udGV4dERpc2FibGVkT25iZ307XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICAuZHp1LWlucHV0TGFiZWwge1xuICAgICAgYmFja2dyb3VuZDogJHtlLmJhY2tncm91bmRzLmJnUHJpbWFyeX07XG4gICAgICB0cmFuc2l0aW9uOiBiYWNrZ3JvdW5kLWNvbG9yIDAuMnM7XG4gICAgICBib3JkZXI6IDFweCBkYXNoZWQgJHtlLmJvcmRlci5ib3JkZXJQcmltYXJ5fTtcbiAgICAgIGJvcmRlci1yYWRpdXM6ICR7dC5iYXNlfTtcblxuICAgICAgJjpob3ZlcixcbiAgICAgICY6YWN0aXZlIHtcbiAgICAgICAgYmFja2dyb3VuZDogJHtlLmJhY2tncm91bmRzLmJnSG92ZXJQcmltYXJ5fTtcbiAgICAgIH1cblxuICAgICAgJjphY3RpdmUge1xuICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAke2UuYmFja2dyb3VuZHMuYmdTZWxlY3RlZH07XG4gICAgICAgIGJvcmRlcjogMXB4IGRhc2hlZCAke2UuYm9yZGVyLmJvcmRlclNlY29uZGFyeX07XG4gICAgICB9XG4gICAgfVxuICBgXG4pLCBmWiA9ICQuZGl2KFxuICAoeyB0aGVtZTogeyBjb2xvcnM6IGUsIGZvbnRXZWlnaHQ6IHQsIGJvcmRlclJhZGl1czogbyB9IH0pID0+IG8xYFxuICAgICAgZGlzcGxheTogZmxleDtcbiAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG4gICAgICBhbGlnbi1pdGVtczogY2VudGVyO1xuICAgICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XG4gICAgICB3aWR0aDogMTAwJTtcbiAgICAgIGhlaWdodDogMTAwJTtcbiAgICAgIGZvbnQtd2VpZ2h0OiAke3QubGlnaHR9O1xuICAgICAgY29sb3I6ICR7ZS50ZXh0SWNvbi50ZXh0UHJpbWFyeX07XG4gICAgICBib3gtc2l6aW5nOiBib3JkZXItYm94O1xuICAgICAgYm9yZGVyLXJhZGl1czogJHtvLmJhc2V9O1xuICAgICAgcG9pbnRlci1ldmVudHM6IG5vbmU7XG4gICAgYFxuKSwgV00gPSAkLmRpdihcbiAgKHsgdGhlbWU6IHsgY29sb3JzOiBlLCB0eXBvZ3JhcGh5OiB0LCBmb250V2VpZ2h0OiBvIH0gfSkgPT4gbzFgXG4gICAgICBmb250LXNpemU6ICR7dC50MTJ9O1xuICAgICAgbGluZS1oZWlnaHQ6IDE2LjhweDtcbiAgICAgIGZvbnQtd2VpZ2h0OiAke28ucmVndWxhcn07XG4gICAgICBtYXJnaW4tdG9wOiAxMHB4O1xuICAgICAgY29sb3I6ICR7ZS50ZXh0SWNvbi50ZXh0SGlnaGVtcGhhc2lzfTtcbiAgICBgXG4pLCBSTSA9ICQuZGl2KFxuICAoeyB0aGVtZTogeyB0eXBvZ3JhcGh5OiBlLCBjb2xvcnM6IHQsIGZvbnRXZWlnaHQ6IG8gfSB9KSA9PiBvMWBcbiAgICAgIGZvbnQtc2l6ZTogJHtlLnQxMn07XG4gICAgICBsaW5lLWhlaWdodDogMTYuOHB4O1xuICAgICAgY29sb3I6ICR7dC50ZXh0SWNvbi50ZXh0TWVkaXVtZW1waGFzaXN9O1xuICAgICAgZm9udC13ZWlnaHQ6ICR7by5saWdodH07XG4gICAgYFxuKSwgQk0gPSAkLmRpdigoeyB0aGVtZTogZSB9KSA9PiB7XG4gIGNvbnN0IHsgY29sb3JzOiB0LCB0eXBvZ3JhcGh5OiBvLCBsaW5lSGVpZ2h0OiBuLCBzcGFjaW5nczogciwgZm9udFdlaWdodDogaSB9ID0gZTtcbiAgcmV0dXJuIG8xYFxuICAgIGZvbnQtc2l6ZTogJHtvLnQxMH07XG4gICAgZm9udC13ZWlnaHQ6ICR7aS5yZWd1bGFyfTtcbiAgICBsaW5lLWhlaWdodDogJHtuLmxoMTR9O1xuICAgIGNvbG9yOiAke3QudGV4dEljb24udGV4dFByaW1hcnl9O1xuICAgIG1hcmdpbjogMCAwICR7ci5zcDR9O1xuICBgO1xufSk7XG4kLmRpdmBcbiAgd2lkdGg6IDUxOHB4O1xuICBtYXgtd2lkdGg6IDEwMCU7XG5gO1xuY29uc3QgQm4gPSAoeyBtYXhTaXplOiBlIH0pID0+IC8qIEBfX1BVUkVfXyAqLyBlMShmWiwgeyBjaGlsZHJlbjogW1xuICAvKiBAX19QVVJFX18gKi8gYyhaMSwgeyBuYW1lOiBcIkZvbGRlclwiIH0pLFxuICAvKiBAX19QVVJFX18gKi8gYyhXTSwgeyBjaGlsZHJlbjogXCJEcmFnIGFuZCBkcm9wIG9yIGNsaWNrIHRvIHVwbG9hZFwiIH0pLFxuICBlICYmIC8qIEBfX1BVUkVfXyAqLyBlMShSTSwgeyBjaGlsZHJlbjogW1xuICAgIFwiT25seSBmaWxlcyB3aXRoIG1heCBcIixcbiAgICBlLFxuICAgIFwiTUIgZmlsZSBzaXplXCJcbiAgXSB9KVxuXSB9KSwgU2MgPSAoe1xuICBpbnB1dDogZSxcbiAgcHJldmlld3M6IHQsXG4gIHN1Ym1pdEJ1dHRvbjogbyxcbiAgZHJvcHpvbmVQcm9wczogbixcbiAgZmlsZXM6IHIsXG4gIGV4dHJhOiBpXG59KSA9PiAvKiBAX19QVVJFX18gKi8gZTEoczAsIHsgY2hpbGRyZW46IFtcbiAgLyogQF9fUFVSRV9fICovIGMoXCJkaXZcIiwgeyAuLi5uLCBjaGlsZHJlbjogci5sZW5ndGggPCBpLm1heEZpbGVzICYmIGUgfSksXG4gIHQsXG4gIHIubGVuZ3RoID4gMCAmJiBvXG5dIH0pLCBfXyA9IChlKSA9PiB7XG4gIGNvbnN0IHtcbiAgICBpc0Rpc2FibGVkOiB0LFxuICAgIHVwbG9hZExhYmVsOiBvLFxuICAgIG11bHRpcGxlOiBuLFxuICAgIG1heFNpemU6IHIsXG4gICAgYWNjZXB0OiBpLFxuICAgIHVybDogYSxcbiAgICBmb3JtRGF0YUJvZHk6IHMsXG4gICAgaGVhZGVyczogbCxcbiAgICBoYW5kbGVDaGFuZ2VTdGF0dXM6IHAsXG4gICAgc2hvd1ByZXZpZXc6IGQsXG4gICAgb25GaWxlVXBsb2FkOiBiLFxuICAgIC4uLk1cbiAgfSA9IGU7XG4gIGxldCB1ID0gbjAoKTtcbiAgY29uc3QgQSA9ICgpID0+ICh7XG4gICAgdXJsOiBhLFxuICAgIGZvcm1EYXRhQm9keTogcyxcbiAgICBoZWFkZXJzOiBsXG4gIH0pLCB6ID0gKHsgZmlsZTogZiwgbWV0YTogTyB9LCBoLCBnKSA9PiB7XG4gICAgY29uc29sZS5sb2coXCJkbmRcIiwgaCwgZiwgTywgZyksIHAodSwgaCwgZiwgTywgZyk7XG4gIH07XG4gIHJldHVybiAvKiBAX19QVVJFX18gKi8gZTEoT1osIHsgY2hpbGRyZW46IFtcbiAgICBvICYmIC8qIEBfX1BVUkVfXyAqLyBjKEJNLCB7IGNoaWxkcmVuOiBvIH0pLFxuICAgIGEgPyAvKiBAX19QVVJFX18gKi8gYyhcbiAgICAgIE40LFxuICAgICAge1xuICAgICAgICByZWY6IHUsXG4gICAgICAgIGRpc2FibGVkOiB0LFxuICAgICAgICBtdWx0aXBsZTogbixcbiAgICAgICAgYWNjZXB0OiBpLFxuICAgICAgICBnZXRVcGxvYWRQYXJhbXM6IEEsXG4gICAgICAgIG9uQ2hhbmdlU3RhdHVzOiB6LFxuICAgICAgICBjbGFzc05hbWVzOiB7IGlucHV0TGFiZWxXaXRoRmlsZXM6IFwiZHp1LWlucHV0TGFiZWxcIiB9LFxuICAgICAgICBQcmV2aWV3Q29tcG9uZW50OiAoZikgPT4gZCA9PSBudWxsIHx8IGQgPyAvKiBAX19QVVJFX18gKi8gYyhUNCwgeyAuLi5mLCBtYXhTaXplOiByIH0pIDogbnVsbCxcbiAgICAgICAgTGF5b3V0Q29tcG9uZW50OiBTYyxcbiAgICAgICAgaW5wdXRDb250ZW50OiAvKiBAX19QVVJFX18gKi8gYyhCbiwgeyBtYXhTaXplOiByIH0sIFwiZG5kLWlucHV0XCIpLFxuICAgICAgICBpbnB1dFdpdGhGaWxlc0NvbnRlbnQ6IC8qIEBfX1BVUkVfXyAqLyBjKEJuLCB7IG1heFNpemU6IHIgfSwgXCJkbmQtaW5wdXQtd2l0aC1maWxlc1wiKSxcbiAgICAgICAgc3R5bGVzOiB7XG4gICAgICAgICAgZHJvcHpvbmU6IHtcbiAgICAgICAgICAgIHdpZHRoOiBcIjEwMCVcIixcbiAgICAgICAgICAgIGhlaWdodDogMTI4LFxuICAgICAgICAgICAgbWF4V2lkdGg6IFwiMTAwJVwiLFxuICAgICAgICAgICAgYm9yZGVyOiAwXG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICAuLi5NXG4gICAgICB9XG4gICAgKSA6IC8qIEBfX1BVUkVfXyAqLyBjKFxuICAgICAgTjQsXG4gICAgICB7XG4gICAgICAgIHJlZjogdSxcbiAgICAgICAgZGlzYWJsZWQ6IHQsXG4gICAgICAgIG11bHRpcGxlOiBuLFxuICAgICAgICBhY2NlcHQ6IGksXG4gICAgICAgIG9uQ2hhbmdlU3RhdHVzOiB6LFxuICAgICAgICBjbGFzc05hbWVzOiB7IGlucHV0TGFiZWxXaXRoRmlsZXM6IFwiZHp1LWlucHV0TGFiZWxcIiB9LFxuICAgICAgICBQcmV2aWV3Q29tcG9uZW50OiAoZikgPT4gZCA9PSBudWxsIHx8IGQgPyAvKiBAX19QVVJFX18gKi8gYyhUNCwgeyAuLi5mLCBtYXhTaXplOiByIH0pIDogbnVsbCxcbiAgICAgICAgTGF5b3V0Q29tcG9uZW50OiBTYyxcbiAgICAgICAgaW5wdXRDb250ZW50OiAvKiBAX19QVVJFX18gKi8gYyhCbiwgeyBtYXhTaXplOiByIH0sIFwiZG5kLWlucHV0XCIpLFxuICAgICAgICBpbnB1dFdpdGhGaWxlc0NvbnRlbnQ6IC8qIEBfX1BVUkVfXyAqLyBjKEJuLCB7IG1heFNpemU6IHIgfSwgXCJkbmQtaW5wdXQtd2l0aC1maWxlc1wiKSxcbiAgICAgICAgc3R5bGVzOiB7XG4gICAgICAgICAgZHJvcHpvbmU6IHtcbiAgICAgICAgICAgIHdpZHRoOiBcIjEwMCVcIixcbiAgICAgICAgICAgIGhlaWdodDogMTI4LFxuICAgICAgICAgICAgbWF4V2lkdGg6IFwiMTAwJVwiLFxuICAgICAgICAgICAgYm9yZGVyOiAwXG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICAuLi5NXG4gICAgICB9XG4gICAgKVxuICBdIH0pO1xufSwgZ1ogPSAoZSkgPT4gLyogQF9fUFVSRV9fICovIGMoXG4gIGRiLFxuICB7XG4gICAgZ2V0U2VhcmNoVmFsdWU6IGUgPT0gbnVsbCA/IHZvaWQgMCA6IGUuZ2V0U2VhcmNoVmFsdWUsXG4gICAgb25Sb3dDbGljazogZSA9PSBudWxsID8gdm9pZCAwIDogZS5vblNlbGVjdENsaWNrLFxuICAgIHNlbGVjdGVkQ2xpZW50OiBlID09IG51bGwgPyB2b2lkIDAgOiBlLnNlbGVjdGVkRW50aXR5LFxuICAgIGxvYWRpbmdQcm9ncmVzczogZSA9PSBudWxsID8gdm9pZCAwIDogZS5sb2FkaW5nUHJvZ3Jlc3MsXG4gICAgY2xpZW50c0RhdGE6IGUuZW50aXRpZXNEYXRhLFxuICAgIGRlZmF1bHRTZWFyY2hWYWx1ZTogZSA9PSBudWxsID8gdm9pZCAwIDogZS5kZWZhdWx0U2VhcmNoVmFsdWUsXG4gICAgaXNFbml0eTogITBcbiAgfVxuKTtcbiQuZGl2YFxuICB3aWR0aDogMTMwMHB4O1xuYDtcbmNvbnN0IENaID0gJC5kaXYoXG4gICh7IHRoZW1lOiB7IGNvbG9yczogZSwgc3BhY2luZ3M6IHQgfSwgY3NjTG9nbzogbyB9KSA9PiBvMWBcbiAgICAgIGJhY2tncm91bmQ6ICR7ZS50b3BCYXIudG9wQmFyQmdQcmltYXJ5fTtcbiAgICAgIHBhZGRpbmc6IDhweCAke3Quc3AxMn07XG4gICAgICBkaXNwbGF5OiBmbGV4O1xuICAgICAganVzdGlmeS1jb250ZW50OiBzcGFjZS1iZXR3ZWVuO1xuICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgICAgIG1heC1oZWlnaHQ6IDQ4cHg7XG4gICAgICBtaW4taGVpZ2h0OiA0OHB4O1xuICAgICAgYm94LXNpemluZzogYm9yZGVyLWJveDtcbiAgICAgICR7IW8gJiYgbzFgXG4gICAgICAgIC5sb2dvLXN2ZyB7XG4gICAgICAgICAgaGVpZ2h0OiAyMHB4O1xuICAgICAgICB9XG4gICAgICBgfVxuICAgIGBcbiksIG1aID0gJC5kaXYoXG4gICh7IHRoZW1lOiB7IGNvbG9yczogZSB9LCAkbW9kZTogdCB9KSA9PiBvMWBcbiAgICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGZsZXgtc3RhcnQ7XG4gICAgICBhbGlnbi1pdGVtczogY2VudGVyO1xuICAgICAgZ2FwOiAycHg7XG4gICAgICAke3QgPT0gXCJibHVlTGlnaHRcIiAmJiBvMWBcbiAgICAgICAgYm9yZGVyLXJpZ2h0OiAxcHggc29saWRcbiAgICAgICAgICByZ2JhKCR7cTIoZS5ib3JkZXIuYm9yZGVyVHJhbnNwYXJlbnQpfSwgMC4wOCk7XG4gICAgICBgfVxuICAgICAgJHt0ID09IFwiYmx1ZURhcmtcIiAmJiBvMWBcbiAgICAgICAgYm9yZGVyLXJpZ2h0OiAxcHggc29saWQgJHtlLmJvcmRlci5ib3JkZXJUcmFuc3BhcmVudH07XG4gICAgICBgfVxuICAgXG4gICAgbWF4LWhlaWdodDogMjRweDtcbiAgICAgIGJveC1zaXppbmc6IGJvcmRlci1ib3g7XG4gICAgYFxuKSwgTFogPSAkLmRpdihcbiAgKHsgdGhlbWU6IHsgY29sb3JzOiBlLCB0eXBvZ3JhcGh5OiB0LCBzcGFjaW5nczogbywgZm9udFdlaWdodDogbiwgbGluZUhlaWdodDogciB9IH0pID0+IG8xYFxuICAgICAgZm9udC1zaXplOiAke3QudDEyfTtcbiAgICAgIGNvbG9yOiAke2UudG9wQmFyLnRvcEJhclRleHRQcmltYXJ5fTtcbiAgICAgIHRleHQtdHJhbnNmb3JtOiB1cHBlcmNhc2U7XG4gICAgICBwYWRkaW5nOiAwICR7by5zcDEyfSAwICR7by5zcDR9O1xuICAgICAgZm9udC13ZWlnaHQ6ICR7bi5ib2xkfTtcbiAgICAgIGxpbmUtaGVpZ2h0OiAke3IubGgyMH07XG4gICAgYFxuKSwgdlogPSAkLmRpdigoeyB0aGVtZTogeyBjb2xvcnM6IGUsIGJvcmRlclJhZGl1czogdCB9LCAkbW9kZTogbyB9KSA9PiBvMWBcbiAgICBjdXJzb3I6IHBvaW50ZXI7XG4gICAgZGlzcGxheTogZmxleDtcbiAgICBqdXN0aWZ5LWNvbnRlbnQ6IGZsZXgtc3RhcnQ7XG4gICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgICBnYXA6IDhweDtcbiAgICBwYWRkaW5nOiA2cHggOHB4O1xuICAgIGJvcmRlci1yYWRpdXM6ICR7dC5iYXNlfTtcbiAgICAvKiBtYXgtd2lkdGg6IDUycHg7ICovXG5cbiAgICAuaWNvbi1zeXN0ZW0ge1xuICAgICAgd2lkdGg6IDE2cHg7XG4gICAgICBtYXJnaW4tbGVmdDogMDtcbiAgICAgIG1hcmdpbi1yaWdodDogLThweDtcbiAgICB9XG4gICAgJjpob3ZlciB7XG4gICAgICAke28gPT0gXCJibHVlTGlnaHRcIiAmJiBvMWBcbiAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogcmdiYShcbiAgICAgICAgICAke3EyKGUuYmFja2dyb3VuZHMuYmdUcmFuc3BhcmVuY3lIb3Zlcil9LFxuICAgICAgICAgIDAuMDRcbiAgICAgICAgKTtcbiAgICAgIGB9XG4gICAgICAke28gPT0gXCJibHVlRGFya1wiICYmIG8xYFxuICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAke2UuYmFja2dyb3VuZHMuYmdUcmFuc3BhcmVuY3lIb3Zlcn07XG4gICAgICBgfVxuICAgIH1cblxuICAgICR7KG4pID0+IG4uJGFjdGl2ZSAmJiBvID09IFwiYmx1ZUxpZ2h0XCIgJiYgbzFgXG4gICAgICAgIGJhY2tncm91bmQtY29sb3I6IHJnYmEoXG4gICAgICAgICAgJHtxMihlLmJhY2tncm91bmRzLmJnVHJhbnNwYXJlbmN5UHJlc3NlZCl9LFxuICAgICAgICAgIDAuMDhcbiAgICAgICAgKTtcbiAgICAgIGB9XG4gICAgJHsobikgPT4gbi4kYWN0aXZlICYmIG8gPT0gXCJibHVlRGFya1wiICYmIG8xYFxuICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAke2UuYmFja2dyb3VuZHMuYmdUcmFuc3BhcmVuY3lQcmVzc2VkfTtcbiAgICAgIGB9XG4gICAgJHsobikgPT4gbi4kZGlzYWJsZWQgJiYgbzFgXG4gICAgICAgICY6aG92ZXIge1xuICAgICAgICAgIGJhY2tncm91bmQ6IHRyYW5zcGFyZW50O1xuICAgICAgICB9XG4gICAgICAgIHBvaW50ZXItZXZlbnRzOiBub25lO1xuICAgICAgICBjdXJzb3I6IGluaXRpYWw7XG4gICAgICBgfVxuICBgKTtcbiQuZGl2KCh7IHRoZW1lOiB7IGNvbG9yczogZSwgc3BhY2luZ3M6IHQgfSB9KSA9PiBvMWBcbiAgICBiYWNrZ3JvdW5kOiAke2UucGF1YX07XG4gICAgcGFkZGluZzogJHt0LnNwMTJ9O1xuICBgKTtcbmNvbnN0IHFaID0gJC5kaXYoKHsgdGhlbWU6IHsgc3BhY2luZ3M6IGUgfSB9KSA9PiBvMWBcbiAgICBwYWRkaW5nLWxlZnQ6ICR7ZS5zcDEyfTtcbiAgICBmbGV4LWdyb3c6IDE7XG4gIGApLCB5WiA9ICQuZGl2YFxuICBkaXNwbGF5OiBmbGV4O1xuICBqdXN0aWZ5LWNvbnRlbnQ6IGZsZXgtc3RhcnQ7XG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gIGdhcDogNHB4O1xuICAjdG9wYmFyLXJpZ2h0LXNpZGUtY29udGFpbmVyIHtcbiAgICBkaXNwbGF5OiBmbGV4O1xuICAgIGp1c3RpZnktY29udGVudDogZmxleC1zdGFydDtcbiAgICBhbGlnbi1pdGVtczogY2VudGVyO1xuICAgIGdhcDogNHB4O1xuICB9XG5gLCBTTSA9ICQuZGl2KFxuICAoe1xuICAgIHRoZW1lOiB7IGNvbG9yczogZSwgc3BhY2luZ3M6IHQsIGJvcmRlclJhZGl1czogbywgdHJhbnNpdGlvbnM6IG4gfSxcbiAgICAkYXZhdGFyOiByLFxuICAgICRpc09wZW5lZDogaSxcbiAgICAkbW9kZTogYVxuICB9KSA9PiBvMWBcbiAgICAgIHBhZGRpbmc6ICR7ciA/IHQuc3A0IDogdC5zcDh9O1xuICAgICAgbWFyZ2luOiAtMTJweCAwO1xuICAgICAgYm9yZGVyLXJhZGl1czogJHtvLmJhc2V9O1xuICAgICAgY3Vyc29yOiBwb2ludGVyO1xuICAgICAgdHJhbnNpdGlvbjogJHtuLmJhc2V9O1xuICAgICAgLmljb24tc3lzdGVtIHtcbiAgICAgICAgaGVpZ2h0OiAxNnB4O1xuICAgICAgfVxuICAgICAgJjpob3ZlciB7XG4gICAgICAgICR7YSA9PSBcImJsdWVMaWdodFwiICYmIG8xYFxuICAgICAgICAgIGJhY2tncm91bmQtY29sb3I6IHJnYmEoXG4gICAgICAgICAgICAke3EyKGUuYmFja2dyb3VuZHMuYmdUcmFuc3BhcmVuY3lIb3Zlcil9LFxuICAgICAgICAgICAgMC4wNFxuICAgICAgICAgICk7XG4gICAgICAgIGB9XG4gICAgICAgICR7YSA9PSBcImJsdWVEYXJrXCIgJiYgbzFgXG4gICAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogJHtlLmJhY2tncm91bmRzLmJnVHJhbnNwYXJlbmN5SG92ZXJ9O1xuICAgICAgICBgfVxuICAgICAgICB0cmFuc2l0aW9uOiAke24uYmFzZX07XG4gICAgICAgICR7IXIgJiYgbzFgXG4gICAgICAgICAgLmljb24tc3lzdGVtIHtcbiAgICAgICAgICAgIGNvbG9yOiAke2UudG9wQmFyLnRvcEJhclRleHRQcmltYXJ5fTtcbiAgICAgICAgICAgIHRyYW5zaXRpb246ICR7bi5iYXNlfTtcbiAgICAgICAgICAgIGhlaWdodDogMTZweDtcbiAgICAgICAgICB9XG4gICAgICAgIGB9XG4gICAgICB9XG4gICAgICAmOmFjdGl2ZSB7XG4gICAgICAgICR7YSA9PSBcImJsdWVMaWdodFwiICYmIG8xYFxuICAgICAgICAgIGJhY2tncm91bmQtY29sb3I6IHJnYmEoXG4gICAgICAgICAgICAke3EyKGUuYmFja2dyb3VuZHMuYmdUcmFuc3BhcmVuY3lIb3Zlcil9LFxuICAgICAgICAgICAgMC4wOFxuICAgICAgICAgICk7XG4gICAgICAgIGB9XG4gICAgICAgICR7YSA9PSBcImJsdWVEYXJrXCIgJiYgbzFgXG4gICAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogJHtlLmJhY2tncm91bmRzLmJnVHJhbnNwYXJlbmN5SG92ZXJ9O1xuICAgICAgICBgfVxuICAgICAgIFxuICAgICAgICB0cmFuc2l0aW9uOiAke24uYmFzZX07XG4gICAgICB9XG4gICAgICAke2kgJiYgYSA9PSBcImJsdWVMaWdodFwiICYmIG8xYFxuICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiByZ2JhKFxuICAgICAgICAgICR7cTIoZS5iYWNrZ3JvdW5kcy5iZ1RyYW5zcGFyZW5jeUhvdmVyKX0sXG4gICAgICAgICAgMC4wOFxuICAgICAgICApO1xuICAgICAgICB0cmFuc2l0aW9uOiAke24uYmFzZX07XG4gICAgICBgfVxuICAgICAgJHtpICYmIGEgPT0gXCJibHVlRGFya1wiICYmIG8xYFxuICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAke2UuYmFja2dyb3VuZHMuYmdUcmFuc3BhcmVuY3lIb3Zlcn07XG4gICAgICAgIHRyYW5zaXRpb246ICR7bi5iYXNlfTtcbiAgICAgIGB9XG4gICAgYFxuKSwgRWMgPSAkLmRpdigoeyB0aGVtZTogeyB0cmFuc2l0aW9uczogZSwgY29sb3JzOiB0IH0sICRpc0FjdGl2ZTogbywgJG1vZGU6IG4gfSkgPT4gbzFgXG4gICAgcGFkZGluZzogMTJweCAwO1xuXG4gICAgJHtvICYmIG8xYFxuICAgICAgJHtTTX0ge1xuICAgICAgICAke24gPT0gXCJibHVlTGlnaHRcIiAmJiBvMWBcbiAgICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiByZ2JhKFxuICAgICAgICAgICAgJHtxMih0LmJhY2tncm91bmRzLmJnVHJhbnNwYXJlbmN5SG92ZXIpfSxcbiAgICAgICAgICAgIDAuMDhcbiAgICAgICAgICApO1xuICAgICAgICBgfVxuICAgICAgICAke24gPT0gXCJibHVlRGFya1wiICYmIG8xYFxuICAgICAgICAgIGJhY2tncm91bmQtY29sb3I6ICR7dC5iYWNrZ3JvdW5kcy5iZ1RyYW5zcGFyZW5jeUhvdmVyfTtcbiAgICAgICAgYH1cbiAgICAgICBcbiAgICAgICAgIFxuICAgICAgICAgIHRyYW5zaXRpb246ICR7ZS5iYXNlfTtcbiAgICAgIH1cbiAgICBgfVxuICBgKSwgd1ogPSAkLmRpdigoeyB0aGVtZTogeyBjb2xvcnM6IGUgfSB9KSA9PiBvMWBcbiAgICB3aWR0aDogMXB4O1xuICAgIGhlaWdodDogMjRweDtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAke2UuYm9yZGVyLmJvcmRlclRyYW5zcGFyZW50fTtcbiAgICBvcGFjaXR5OiAwLjE2O1xuICBgKSwgeFogPSAkLmRpdmBcbiAgLmljb24tc3lzdGVtIHtcbiAgICB3aWR0aDogMTJweDtcbiAgICBoZWlnaHQ6IDEycHg7XG4gICAgc3ZnIHtcbiAgICAgIHdpZHRoOiAxMnB4ICFpbXBvcnRhbnQ7XG4gICAgICBoZWlnaHQ6IDEycHg7XG4gICAgfVxuICB9XG5gLCBXWiA9ICQuZGl2YFxuICA+IGRpdiB7XG4gICAgd2lkdGg6IDU3Ljc4cHggIWltcG9ydGFudDtcbiAgICBoZWlnaHQ6IDE2cHggIWltcG9ydGFudDtcbiAgfVxuICBzdmcge1xuICAgIHdpZHRoOiA1Ny43OHB4ICFpbXBvcnRhbnQ7XG4gICAgaGVpZ2h0OiAxNnB4ICFpbXBvcnRhbnQ7XG4gIH1cbmAsIFJaID0gJC5pbWdgXG4gIGhlaWdodDogMTZweCAhaW1wb3J0YW50O1xuYCwgVm8gPSAoe1xuICBvbkNsaWNrOiBlLFxuICBpY29uTmFtZTogdCxcbiAgY291bnQ6IG8sXG4gICRhdmF0YXI6IG4sXG4gIHVybDogcixcbiAgYXZhdGFyTmFtZTogaSxcbiAgJGlzT3BlbmVkOiBhLFxuICAkbW9kZTogc1xufSkgPT4ge1xuICBjb25zdCBsID0gcmwoKSwgcCA9IF8xKCgpID0+IG4gPyAvKiBAX19QVVJFX18gKi8gYyh4WiwgeyBjaGlsZHJlbjogLyogQF9fUFVSRV9fICovIGMoenIsIHsgc2l6ZTogXCJzbVwiLCB1cmw6IHIsIG5hbWU6IGkgfSkgfSkgOiAvKiBAX19QVVJFX18gKi8gYyhBZSwgeyBjb3VudDogbywgY2hpbGRyZW46IHQgJiYgLyogQF9fUFVSRV9fICovIGMoWjEsIHsgbmFtZTogdCwgc2l6ZTogXCJ4c1wiLCBjb2xvcjogbC5jb2xvcnMud2hpdGUgfSkgfSksIFtvLCB0LCByLCBuXSk7XG4gIHJldHVybiAvKiBAX19QVVJFX18gKi8gYyhcbiAgICBTTSxcbiAgICB7XG4gICAgICAkbW9kZTogcyxcbiAgICAgIG9uQ2xpY2s6IGUsXG4gICAgICAkYXZhdGFyOiBuLFxuICAgICAgJGlzT3BlbmVkOiBhLFxuICAgICAgY2hpbGRyZW46IHAoKVxuICAgIH1cbiAgKTtcbn0sIEJaID0gJC5kaXYoXG4gICh7XG4gICAgdGhlbWU6IHsgY29sb3JzOiBlLCBib3JkZXJSYWRpdXM6IHQsIHNwYWNpbmdzOiBvLCBHTE9CQUxfSVRFTV9IRUlHSFRfQ09OREVOU0VEOiBuIH1cbiAgfSkgPT4gbzFgXG4gICAgLyogYmFzZSAgKi9cblxuICAgIC5kenUtZHJvcHpvbmUge1xuICAgICAgZGlzcGxheTogZmxleDtcbiAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG4gICAgICBhbGlnbi1pdGVtczogY2VudGVyO1xuICAgICAgd2lkdGg6IDEwMCU7XG4gICAgICBtaW4taGVpZ2h0OiAxMjBweDtcbiAgICAgIG92ZXJmbG93OiBzY3JvbGw7XG4gICAgICBtYXJnaW46IDAgYXV0bztcbiAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgICAgIGJveC1zaXppbmc6IGJvcmRlci1ib3g7XG4gICAgICB0cmFuc2l0aW9uOiBhbGwgMC4xNXMgbGluZWFyO1xuICAgICAgYm9yZGVyOiAycHggc29saWQgI2Q5ZDlkOTtcbiAgICAgIGJvcmRlci1yYWRpdXM6IDRweDtcbiAgICB9XG5cbiAgICAuZHp1LWRyb3B6b25lQWN0aXZlIHtcbiAgICAgIGJhY2tncm91bmQtY29sb3I6ICNkZWViZmY7XG4gICAgICBib3JkZXItY29sb3I6ICMyNDg0ZmY7XG4gICAgfVxuXG4gICAgLmR6dS1kcm9wem9uZURpc2FibGVkIHtcbiAgICAgIG9wYWNpdHk6IDAuNTtcbiAgICB9XG5cbiAgICAuZHp1LWRyb3B6b25lRGlzYWJsZWQgKjpob3ZlciB7XG4gICAgICBjdXJzb3I6IHVuc2V0O1xuICAgIH1cblxuICAgIC5kenUtaW5wdXQge1xuICAgICAgZGlzcGxheTogbm9uZTtcbiAgICB9XG5cbiAgICAuZHp1LWlucHV0TGFiZWwge1xuICAgICAgZGlzcGxheTogZmxleDtcbiAgICAgIGp1c3RpZnktY29udGVudDogY2VudGVyO1xuICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICAgIHRvcDogMDtcbiAgICAgIGJvdHRvbTogMDtcbiAgICAgIGxlZnQ6IDA7XG4gICAgICByaWdodDogMDtcbiAgICAgIGZvbnQtZmFtaWx5OiAnSGVsdmV0aWNhJywgc2Fucy1zZXJpZjtcbiAgICAgIGZvbnQtc2l6ZTogMjBweDtcbiAgICAgIGZvbnQtd2VpZ2h0OiA2MDA7XG4gICAgICBjb2xvcjogIzI0ODRmZjtcbiAgICAgIC1tb3otb3N4LWZvbnQtc21vb3RoaW5nOiBncmF5c2NhbGU7XG4gICAgICAtd2Via2l0LWZvbnQtc21vb3RoaW5nOiBhbnRpYWxpYXNlZDtcbiAgICAgIGN1cnNvcjogcG9pbnRlcjtcbiAgICB9XG5cbiAgICAuZHp1LWlucHV0TGFiZWxXaXRoRmlsZXMge1xuICAgICAgZGlzcGxheTogZmxleDtcbiAgICAgIGp1c3RpZnktY29udGVudDogY2VudGVyO1xuICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgICAgIGFsaWduLXNlbGY6IGZsZXgtc3RhcnQ7XG4gICAgICBwYWRkaW5nOiAwIDE0cHg7XG4gICAgICBtaW4taGVpZ2h0OiAzMnB4O1xuICAgICAgYmFja2dyb3VuZC1jb2xvcjogI2U2ZTZlNjtcbiAgICAgIGNvbG9yOiAjMjQ4NGZmO1xuICAgICAgYm9yZGVyOiBub25lO1xuICAgICAgZm9udC1mYW1pbHk6ICdIZWx2ZXRpY2EnLCBzYW5zLXNlcmlmO1xuICAgICAgYm9yZGVyLXJhZGl1czogNHB4O1xuICAgICAgZm9udC1zaXplOiAxNHB4O1xuICAgICAgZm9udC13ZWlnaHQ6IDYwMDtcbiAgICAgIG1hcmdpbi10b3A6IDIwcHg7XG4gICAgICBtYXJnaW4tbGVmdDogMyU7XG4gICAgICAtbW96LW9zeC1mb250LXNtb290aGluZzogZ3JheXNjYWxlO1xuICAgICAgLXdlYmtpdC1mb250LXNtb290aGluZzogYW50aWFsaWFzZWQ7XG4gICAgICBjdXJzb3I6IHBvaW50ZXI7XG4gICAgfVxuXG4gICAgLmR6dS1wcmV2aWV3Q29udGFpbmVyIHtcbiAgICAgIHBhZGRpbmc6IDQwcHggMyU7XG4gICAgICBkaXNwbGF5OiBmbGV4O1xuICAgICAgZmxleC1kaXJlY3Rpb246IHJvdztcbiAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gICAgICBqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWJldHdlZW47XG4gICAgICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gICAgICB3aWR0aDogMTAwJTtcbiAgICAgIG1pbi1oZWlnaHQ6IDYwcHg7XG4gICAgICB6LWluZGV4OiAxO1xuICAgICAgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkICNlY2VjZWM7XG4gICAgICBib3gtc2l6aW5nOiBib3JkZXItYm94O1xuICAgIH1cblxuICAgIC5kenUtcHJldmlld1N0YXR1c0NvbnRhaW5lciB7XG4gICAgICBkaXNwbGF5OiBmbGV4O1xuICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgICB9XG5cbiAgICAuZHp1LXByZXZpZXdGaWxlTmFtZSB7XG4gICAgICBmb250LWZhbWlseTogJ0hlbHZldGljYScsIHNhbnMtc2VyaWY7XG4gICAgICBmb250LXNpemU6IDE0cHg7XG4gICAgICBmb250LXdlaWdodDogNDAwO1xuICAgICAgY29sb3I6ICMzMzMzMzM7XG4gICAgfVxuXG4gICAgLmR6dS1wcmV2aWV3SW1hZ2Uge1xuICAgICAgd2lkdGg6IGF1dG87XG4gICAgICBtYXgtaGVpZ2h0OiA0MHB4O1xuICAgICAgbWF4LXdpZHRoOiAxNDBweDtcbiAgICAgIGJvcmRlci1yYWRpdXM6IDRweDtcbiAgICB9XG5cbiAgICAuZHp1LXByZXZpZXdCdXR0b24ge1xuICAgICAgYmFja2dyb3VuZC1zaXplOiAxNHB4IDE0cHg7XG4gICAgICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiBjZW50ZXI7XG4gICAgICBiYWNrZ3JvdW5kLXJlcGVhdDogbm8tcmVwZWF0O1xuICAgICAgd2lkdGg6IDE0cHg7XG4gICAgICBoZWlnaHQ6IDE0cHg7XG4gICAgICBjdXJzb3I6IHBvaW50ZXI7XG4gICAgICBvcGFjaXR5OiAwLjk7XG4gICAgICBtYXJnaW46IDAgMCAycHggMTBweDtcbiAgICB9XG5cbiAgICAuZHp1LXN1Ym1pdEJ1dHRvbkNvbnRhaW5lciB7XG4gICAgICBtYXJnaW46IDI0cHggMDtcbiAgICAgIHotaW5kZXg6IDE7XG4gICAgfVxuXG4gICAgLmR6dS1zdWJtaXRCdXR0b24ge1xuICAgICAgcGFkZGluZzogMCAxNHB4O1xuICAgICAgbWluLWhlaWdodDogMzJweDtcbiAgICAgIGJhY2tncm91bmQtY29sb3I6ICMyNDg0ZmY7XG4gICAgICBib3JkZXI6IG5vbmU7XG4gICAgICBib3JkZXItcmFkaXVzOiA0cHg7XG4gICAgICBmb250LWZhbWlseTogJ0hlbHZldGljYScsIHNhbnMtc2VyaWY7XG4gICAgICBmb250LXNpemU6IDE0cHg7XG4gICAgICBmb250LXdlaWdodDogNjAwO1xuICAgICAgY29sb3I6ICNmZmY7XG4gICAgICAtbW96LW9zeC1mb250LXNtb290aGluZzogZ3JheXNjYWxlO1xuICAgICAgLXdlYmtpdC1mb250LXNtb290aGluZzogYW50aWFsaWFzZWQ7XG4gICAgICBjdXJzb3I6IHBvaW50ZXI7XG4gICAgfVxuXG4gICAgLmR6dS1zdWJtaXRCdXR0b246ZGlzYWJsZWQge1xuICAgICAgYmFja2dyb3VuZC1jb2xvcjogI2U2ZTZlNjtcbiAgICAgIGNvbG9yOiAjMzMzMzMzO1xuICAgICAgY3Vyc29yOiB1bnNldDtcbiAgICB9XG5cbiAgICAvKiBiYXNlIGVuZCAgKi9cblxuICAgIC5kenUtZHJvcHpvbmUge1xuICAgICAgZGlzcGxheTogYmxvY2s7XG4gICAgICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gICAgICBib3JkZXI6IDA7XG4gICAgICBib3JkZXItcmFkaXVzOiAwO1xuICAgICAgbWluLWhlaWdodDogYXV0bztcbiAgICAgIG92ZXJmbG93OiBhdXRvO1xuXG4gICAgICAmRGlzYWJsZWQge1xuICAgICAgICBvcGFjaXR5OiAxO1xuXG4gICAgICAgIC5kenUtaW5wdXRMYWJlbCB7XG4gICAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogJHtlLmJhY2tncm91bmRzLmJnRGlzYWJsZWRQcmltYXJ5fTtcbiAgICAgICAgICBjb2xvcjogJHtlLnRleHRJY29uLnRleHREaXNhYmxlZE9uYmd9O1xuICAgICAgICAgIGJvcmRlcjogMXB4IHNvbGlkICR7ZS5ib3JkZXIuYm9yZGVyRGlzYWJsZWRPbmJnfTtcbiAgICAgICAgfVxuXG4gICAgICAgICR7RU19IHtcbiAgICAgICAgICBjb2xvcjogJHtlLnRleHRJY29uLnRleHRMb3dlbXBoYXNpc307XG4gICAgICAgIH1cblxuICAgICAgICAkeyRufSB7XG4gICAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogJHtlLmJhY2tncm91bmRzLmJnRGlzYWJsZWRQcmltYXJ5fTtcbiAgICAgICAgICBjb2xvcjogJHtlLnRleHRJY29uLnRleHREaXNhYmxlZE9uYmd9O1xuICAgICAgICAgIGJvcmRlcjogbm9uZTtcbiAgICAgICAgICBib3gtc2hhZG93OiBub25lO1xuICAgICAgICAgIGN1cnNvcjogZGVmYXVsdDtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgJjpub3QoJkRpc2FibGVkKSB7XG4gICAgICAgIC5kenUtaW5wdXRMYWJlbCB7XG4gICAgICAgICAgJjpob3ZlciB7XG4gICAgICAgICAgICBib3JkZXItY29sb3I6ICR7ZS5waW5rU3dhbn07XG5cbiAgICAgICAgICAgICR7JG59IHtcbiAgICAgICAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogJHtlLmJ1dHRvbkJhY2tnb3VuZC5idXR0b25CZ1ByaW1hcnlIb3Zlcn07XG4gICAgICAgICAgICAgIGNvbG9yOiAke2UuYnV0dG9uVGV4dC5idXR0b25UZXh0UHJpbWFyeX07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgJjphY3RpdmUge1xuICAgICAgICAgICAgYm9yZGVyLWNvbG9yOiAke2UuYm9yZGVyLmJvcmRlclByaW1hcnl9O1xuICAgICAgICAgICAgY29sb3I6ICR7ZS50ZXh0SWNvbi50ZXh0SGlnaGVtcGhhc2lzfTtcblxuICAgICAgICAgICAgJHskbn0ge1xuICAgICAgICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAke2UuYnV0dG9uQmFja2dvdW5kLmJ1dHRvbkJnUHJpbWFyeVByZXNzZWR9O1xuICAgICAgICAgICAgICBjb2xvcjogJHtlLmJ1dHRvblRleHQuYnV0dG9uVGV4dFByaW1hcnlQcmVzc2VkfTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICAuZHp1LWlucHV0TGFiZWwge1xuICAgICAgcG9zaXRpb246IHJlbGF0aXZlO1xuICAgICAgd2lkdGg6IDEwMCU7XG4gICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGZsZXgtc3RhcnQ7XG4gICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAke2UuYmFja2dyb3VuZHMuYmdQcmltYXJ5fTtcbiAgICAgIGJvcmRlcjogMXB4IHNvbGlkICR7ZS5ib3JkZXIuYm9yZGVyUHJpbWFyeX07XG4gICAgICB0cmFuc2l0aW9uOiBib3JkZXItY29sb3IgMC4ycywgY29sb3IgMC4ycztcbiAgICAgIGJvcmRlci1yYWRpdXM6ICR7dC5iYXNlfTtcbiAgICAgIG1pbi1oZWlnaHQ6ICR7bn07XG4gICAgICBjb2xvcjogJHtlLnRleHRJY29uLnRleHRIaWdoZW1waGFzaXN9O1xuICAgICAgYm94LXNpemluZzogYm9yZGVyLWJveDtcbiAgICAgIG1heC1oZWlnaHQ6IDQwcHg7XG4gICAgfVxuICBgXG4pLCBTWiA9ICQuZGl2KFxuICAoeyB0aGVtZTogeyBmb250V2VpZ2h0OiBlLCBib3JkZXJSYWRpdXM6IHQgfSB9KSA9PiBvMWBcbiAgICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgICBhbGlnbi1pdGVtczogY2VudGVyO1xuICAgICAganVzdGlmeS1jb250ZW50OiBzcGFjZS1iZXR3ZWVuO1xuICAgICAgd2lkdGg6IDEwMCU7XG4gICAgICBmb250LXdlaWdodDogJHtlLmxpZ2h0fTtcbiAgICAgIGJveC1zaXppbmc6IGJvcmRlci1ib3g7XG4gICAgICBib3JkZXItcmFkaXVzOiAke3QuYmFzZX07XG4gICAgICBwb2ludGVyLWV2ZW50czogbm9uZTtcbiAgICAgIHBhZGRpbmc6IDRweCA0cHggNHB4IDEycHg7XG4gICAgYFxuKSwgRVogPSAkLmRpdihcbiAgKHsgdGhlbWU6IHsgdHlwb2dyYXBoeTogZSwgbGluZUhlaWdodDogdCwgZm9udFdlaWdodDogbyB9IH0pID0+IG8xYFxuICAgICAgZm9udC1zaXplOiAke2UudDEyfTtcbiAgICAgIGZvbnQtd2VpZ2h0OiAke28ucmVndWxhcn07XG4gICAgICBsaW5lLWhlaWdodDogMTYuOHB4O1xuICAgICAgbWFyZ2luLWxlZnQ6IDhweDtcbiAgICBgXG4pO1xuJC5kaXYoXG4gICh7IHRoZW1lOiB7IGNvbG9yczogZSwgdHlwb2dyYXBoeTogdCwgbGluZUhlaWdodDogbyB9IH0pID0+IG8xYFxuICAgICAgZm9udC1zaXplOiAke3QudDEyfTtcbiAgICAgIGxpbmUtaGVpZ2h0OiAke28ubGgyMH07XG4gICAgICBjb2xvcjogJHtlLmdyZXl9O1xuICAgIGBcbik7XG5jb25zdCBFTSA9ICQuZGl2KFxuICAoeyB0aGVtZTogeyBjb2xvcnM6IGUsIHR5cG9ncmFwaHk6IHQsIGZvbnRXZWlnaHQ6IG8sIHNwYWNpbmdzOiBuIH0gfSkgPT4gbzFgXG4gICAgICBmb250LXNpemU6ICR7dC50MTB9O1xuICAgICAgbGluZS1oZWlnaHQ6IDE0eDtcbiAgICAgIGNvbG9yOiAke2UudGV4dEljb24udGV4dExvd2VtcGhhc2lzfTtcbiAgICAgIG1hcmdpbi10b3A6ICR7bi5zcDR9O1xuICAgICAgZm9udC13ZWlnaHQ6ICR7by5yZWd1bGFyfTtcbiAgICAgIG1hcmdpbi1sZWZ0OiA4cHg7XG4gICAgYFxuKSwgJG4gPSAkKFB0KWBgLCBrWiA9ICQuZGl2YFxuICBkaXNwbGF5OiBmbGV4O1xuICBhbGlnbi1pdGVtczogY2VudGVyO1xuICBqdXN0aWZ5LWNvbnRlbnQ6IGZsZXgtc3RhcnQ7XG5gLCBOWiA9ICQuZGl2KFxuICAoeyB0aGVtZTogeyBjb2xvcnM6IGUsIHR5cG9ncmFwaHk6IHQsIGxpbmVIZWlnaHQ6IG8gfSB9KSA9PiBvMWBcbiAgICAgIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgICAgIHZlcnRpY2FsLWFsaWduOiB0b3A7XG4gICAgICBtYXJnaW46IDRweCAwIDA7XG4gICAgICBmb250LXNpemU6ICR7dC50MTJ9O1xuICAgICAgbGluZS1oZWlnaHQ6ICR7by5saDIwfTtcbiAgICAgIGNvbG9yOiAke2UudGV4dEljb24udGV4dEVycm9yfTtcbiAgICBgXG4pLCBTbiA9ICgpID0+IC8qIEBfX1BVUkVfXyAqLyBlMShTWiwgeyBjaGlsZHJlbjogW1xuICAvKiBAX19QVVJFX18gKi8gZTEoa1osIHsgY2hpbGRyZW46IFtcbiAgICAvKiBAX19QVVJFX18gKi8gYyhaMSwgeyBuYW1lOiBcIlVwbG9hZFwiLCBzaXplOiBcInhzXCIgfSksXG4gICAgLyogQF9fUFVSRV9fICovIGMoRVosIHsgY2hpbGRyZW46IFwiQ2xpY2sgdG8gdXBsb2FkIHlvdXIgZmlsZVwiIH0pXG4gIF0gfSksXG4gIC8qIEBfX1BVUkVfXyAqLyBjKCRuLCB7IGFzOiBcImRpdlwiLCBzaXplOiBcInNtXCIsIGNoaWxkcmVuOiBcIlVwbG9hZFwiIH0pXG5dIH0pLCBrYyA9ICh7XG4gIGlucHV0OiBlLFxuICBwcmV2aWV3czogdCxcbiAgc3VibWl0QnV0dG9uOiBvLFxuICBkcm9wem9uZVByb3BzOiBuLFxuICBmaWxlczogcixcbiAgbWF4U2l6ZTogaSxcbiAgaXNFcnJvcjogYSxcbiAgZXJyb3JUZXh0OiBzXG59KSA9PiAvKiBAX19QVVJFX18gKi8gZTEoXCJkaXZcIiwgeyBjaGlsZHJlbjogW1xuICAvKiBAX19QVVJFX18gKi8gZTEoXCJkaXZcIiwgeyAuLi5uLCBjaGlsZHJlbjogW1xuICAgIGUsXG4gICAgaSAmJiAvKiBAX19QVVJFX18gKi8gYyhFTSwgeyBjaGlsZHJlbjogXCJPbmx5IGZpbGVzIHdpdGggbWF4IDIwTUIgZmlsZSBzaXplXCIgfSlcbiAgXSB9KSxcbiAgdCxcbiAgLyogQF9fUFVSRV9fICovIGMoXCJkaXZcIiwgeyBjaGlsZHJlbjogYSA9PT0gITAgJiYgcyAhPT0gXCJcIiAmJiAvKiBAX19QVVJFX18gKi8gYyhOWiwgeyBjaGlsZHJlbjogcyB9KSB9KSxcbiAgci5sZW5ndGggPiAwICYmIG9cbl0gfSksICRfID0gKGUpID0+IHtcbiAgY29uc3Qge1xuICAgIGlzRGlzYWJsZWQ6IHQsXG4gICAgdXBsb2FkTGFiZWw6IG8sXG4gICAgbXVsdGlwbGU6IG4sXG4gICAgbWF4U2l6ZTogcixcbiAgICBhY2NlcHQ6IGksXG4gICAgdXJsOiBhLFxuICAgIGZvcm1EYXRhQm9keTogcyxcbiAgICBoZWFkZXJzOiBsLFxuICAgIGhhbmRsZUNoYW5nZVN0YXR1czogcCxcbiAgICBpc0Vycm9yOiBkLFxuICAgIGlzQ2xlYXJGaWVsZDogYixcbiAgICBlcnJvclRleHQ6IE0sXG4gICAgLi4udVxuICB9ID0gZTtcbiAgbGV0IEEgPSBuMCgpO1xuICBjb25zdCB6ID0gKCkgPT4gKHtcbiAgICB1cmw6IGEsXG4gICAgZm9ybURhdGFCb2R5OiBzLFxuICAgIGhlYWRlcnM6IGxcbiAgfSksIGYgPSAoeyBmaWxlOiBPLCBtZXRhOiBoIH0sIGcsIHYpID0+IHtcbiAgICBjb25zb2xlLmxvZyhcInVwbG9hZGVyXCIsIGcsIE8sIGgsIHYpLCBwKEEsIGcsIE8sIGgsIHYpO1xuICB9O1xuICByZXR1cm4gLyogQF9fUFVSRV9fICovIGUxKEJaLCB7IGNoaWxkcmVuOiBbXG4gICAgbyAmJiAvKiBAX19QVVJFX18gKi8gYyhCTSwgeyBjaGlsZHJlbjogbyB9KSxcbiAgICBhID8gLyogQF9fUFVSRV9fICovIGMoXG4gICAgICBONCxcbiAgICAgIHtcbiAgICAgICAgcmVmOiBBLFxuICAgICAgICBkaXNhYmxlZDogdCxcbiAgICAgICAgbXVsdGlwbGU6IG4sXG4gICAgICAgIGFjY2VwdDogaSxcbiAgICAgICAgZ2V0VXBsb2FkUGFyYW1zOiB6LFxuICAgICAgICBvbkNoYW5nZVN0YXR1czogZixcbiAgICAgICAgY2xhc3NOYW1lczogeyBpbnB1dExhYmVsV2l0aEZpbGVzOiBcImR6dS1pbnB1dExhYmVsXCIgfSxcbiAgICAgICAgUHJldmlld0NvbXBvbmVudDogKE8pID0+IChiID8gTy5maWxlV2l0aE1ldGEucmVtb3ZlKCkgOiBPLmZpbGVXaXRoTWV0YSwgLyogQF9fUFVSRV9fICovIGMoVDQsIHsgLi4uTywgbWF4U2l6ZTogciB9KSksXG4gICAgICAgIExheW91dENvbXBvbmVudDogKE8pID0+IC8qIEBfX1BVUkVfXyAqLyBjKFxuICAgICAgICAgIGtjLFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIC4uLk8sXG4gICAgICAgICAgICBtYXhTaXplOiByLFxuICAgICAgICAgICAgaXNFcnJvcjogZCxcbiAgICAgICAgICAgIGVycm9yVGV4dDogTVxuICAgICAgICAgIH1cbiAgICAgICAgKSxcbiAgICAgICAgaW5wdXRDb250ZW50OiAvKiBAX19QVVJFX18gKi8gYyhTbiwge30sIFwidXBsb2FkZXItaW5wdXRcIiksXG4gICAgICAgIGlucHV0V2l0aEZpbGVzQ29udGVudDogLyogQF9fUFVSRV9fICovIGMoU24sIHt9LCBcInVwbG9hZGVyLWlucHV0LXdpdGgtZmlsZXNcIiksXG4gICAgICAgIC4uLnVcbiAgICAgIH1cbiAgICApIDogLyogQF9fUFVSRV9fICovIGMoXG4gICAgICBONCxcbiAgICAgIHtcbiAgICAgICAgcmVmOiBBLFxuICAgICAgICBkaXNhYmxlZDogdCxcbiAgICAgICAgbXVsdGlwbGU6IG4sXG4gICAgICAgIGFjY2VwdDogaSxcbiAgICAgICAgb25DaGFuZ2VTdGF0dXM6IGYsXG4gICAgICAgIGNsYXNzTmFtZXM6IHsgaW5wdXRMYWJlbFdpdGhGaWxlczogXCJkenUtaW5wdXRMYWJlbFwiIH0sXG4gICAgICAgIFByZXZpZXdDb21wb25lbnQ6IChPKSA9PiAoYiA/IE8uZmlsZVdpdGhNZXRhLnJlbW92ZSgpIDogTy5maWxlV2l0aE1ldGEsIC8qIEBfX1BVUkVfXyAqLyBjKFQ0LCB7IC4uLk8sIG1heFNpemU6IHIgfSkpLFxuICAgICAgICBMYXlvdXRDb21wb25lbnQ6IChPKSA9PiAvKiBAX19QVVJFX18gKi8gYyhcbiAgICAgICAgICBrYyxcbiAgICAgICAgICB7XG4gICAgICAgICAgICAuLi5PLFxuICAgICAgICAgICAgbWF4U2l6ZTogcixcbiAgICAgICAgICAgIGlzRXJyb3I6IGQsXG4gICAgICAgICAgICBlcnJvclRleHQ6IE1cbiAgICAgICAgICB9XG4gICAgICAgICksXG4gICAgICAgIGlucHV0Q29udGVudDogLyogQF9fUFVSRV9fICovIGMoU24sIHt9LCBcInVwbG9hZGVyLWlucHV0XCIpLFxuICAgICAgICBpbnB1dFdpdGhGaWxlc0NvbnRlbnQ6IC8qIEBfX1BVUkVfXyAqLyBjKFNuLCB7fSwgXCJ1cGxvYWRlci1pbnB1dC13aXRoLWZpbGVzXCIpLFxuICAgICAgICAuLi51XG4gICAgICB9XG4gICAgKVxuICBdIH0pO1xufTtcbiQuZGl2YFxuICB3aWR0aDogNDAwcHg7XG5gO1xuY29uc3Qga00gPSAkLnVsKFxuICAoeyB0aGVtZTogZSB9KSA9PiBvMWBcbiAgICAke2UubWl4aW5zLmxpc3RSZXNldH07XG4gICAgYmFja2dyb3VuZC1jb2xvcjogJHtlLmNvbG9ycy53aGl0ZX07XG4gIGBcbiksIE5NID0gJC5kaXYoXG4gICh7IHRoZW1lOiB7IGJvcmRlclJhZGl1czogZSwgc3BhY2luZ3M6IHQgfSB9KSA9PiBvMWBcbiAgICBib3JkZXItcmFkaXVzOiAke2UuYmFzZX07XG4gICAgYWxpZ24tc2VsZjogZmxleC1zdGFydDtcbiAgICBwYWRkaW5nOiA1cHg7XG4gICAgJjpmaXJzdC1jaGlsZCB7XG4gICAgICBtYXJnaW4tcmlnaHQ6ICR7dC5zcDh9O1xuICAgIH1cblxuICAgICY6bGFzdC1jaGlsZCB7XG4gICAgICBtYXJnaW4tbGVmdDogJHt0LnNwOH07XG4gICAgfVxuICBgXG4pO1xuZnVuY3Rpb24gUzUoe1xuICBuYW1lOiBlLFxuICBiYWRnZTogdCxcbiAgc2l6ZTogbyA9IFwibWRcIixcbiAgaXNEaXNhYmxlZDogbiA9ICExXG59KSB7XG4gIHJldHVybiAvKiBAX19QVVJFX18gKi8gYyhOTSwgeyBjaGlsZHJlbjogTnVtYmVyKHQpICYmICFuID8gLyogQF9fUFVSRV9fICovIGMoQWUsIHsgY291bnQ6IHQsIGNoaWxkcmVuOiAvKiBAX19QVVJFX18gKi8gYyhaMSwgeyBzaXplOiBvLCBuYW1lOiBlIH0pIH0pIDogLyogQF9fUFVSRV9fICovIGMoWjEsIHsgc2l6ZTogbywgbmFtZTogZSB9KSB9KTtcbn1cbmNvbnN0IE9zID0gKHtcbiAgY2hpbGRyZW46IGUsXG4gIGN1c3RvbUl0ZW06IHRcbn0pID0+IHQgPyB0KGUpIDogLyogQF9fUFVSRV9fICovIGMoczAsIHsgY2hpbGRyZW46IGUgfSksIGZzID0gJC5saShcbiAgKHtcbiAgICB0aGVtZToge1xuICAgICAgY29sb3JzOiBlLFxuICAgICAgdHlwb2dyYXBoeTogdCxcbiAgICAgIGxpbmVIZWlnaHQ6IG8sXG4gICAgICBmb250RmFtaWx5OiBuLFxuICAgICAgdHJhbnNpdGlvbnM6IHIsXG4gICAgICBzcGFjaW5nczogaSxcbiAgICAgIGZvbnRXZWlnaHQ6IGFcbiAgICB9LFxuICAgICRpY29uTGVmdDogcyxcbiAgICAkaXNEaXNhYmxlZDogbCxcbiAgICAkaXNBY3RpdmU6IHBcbiAgfSkgPT4ge1xuICAgIGxldCBkO1xuICAgIHAgfHwgKGQgPSBlLnRleHRJY29uLnRleHRQcmltYXJ5KTtcbiAgICBjb25zdCBiID0gcCAmJiAhbCA/IGUuYmFja2dyb3VuZHMuYmdTZWxlY3RlZCA6IGUuYmFja2dyb3VuZHMuYmdQcmltYXJ5O1xuICAgIHJldHVybiBvMWBcbiAgICAgIGZvbnQ6ICR7dC50MTJ9IC8gJHtvLmxoMjB9ICR7bi5iYXNlfTtcbiAgICAgIGZvbnQtd2VpZ2h0OiAke2EubGlnaHR9O1xuICAgICAgYmFja2dyb3VuZDogJHtifTtcbiAgICAgIGJveC1zaXppbmc6IGJvcmRlci1ib3g7XG4gICAgICBtaW4taGVpZ2h0OiAyNHB4O1xuICAgICAgcGFkZGluZzogJHtpLnNwMn0gJHtpLnNwOH07XG5cbiAgICAgICY6bGFzdC1jaGlsZCB7XG4gICAgICAgIG1hcmdpbi1ib3R0b206IDA7XG4gICAgICB9XG5cbiAgICAgICYsXG4gICAgICAmID4gYSB7XG4gICAgICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgICAgIHdpZHRoOiAxMDAlO1xuICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyO1xuICAgICAgICBjb2xvcjogJHtkfTtcbiAgICAgICAgdHJhbnNpdGlvbjogJHtyLmJhc2V9O1xuICAgICAgICBjdXJzb3I6IHBvaW50ZXI7XG4gICAgICB9XG5cbiAgICAgIGEge1xuICAgICAgICBwYWRkaW5nOiAke2kuc3A4fSAke2kuc3A4fSAke2kuc3A4fSA3MnB4O1xuICAgICAgICBtYXJnaW46IC0ke2kuc3A4fSAtJHtpLnNwOH0gLSR7aS5zcDh9IC03MnB4O1xuICAgICAgICB0ZXh0LWRlY29yYXRpb246IG5vbmU7XG4gICAgICB9XG5cbiAgICAgICR7cyAmJiBvMWBcbiAgICAgICAgYSB7XG4gICAgICAgICAgcGFkZGluZy1sZWZ0OiAke2kuc3A4fTtcbiAgICAgICAgICBtYXJnaW4tbGVmdDogLSR7aS5zcDh9O1xuICAgICAgICB9XG4gICAgICBgfVxuXG4gICAgICAmOmhvdmVyIHtcbiAgICAgICAgYmFja2dyb3VuZDoke2UuYmFja2dyb3VuZHMuYmdIb3ZlclByaW1hcnl9O1xuXG4gICAgICAgIGEge1xuICAgICAgICAgIHRleHQtZGVjb3JhdGlvbjogbm9uZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgJHtsICYmIG8xYFxuICAgICAgICBwb2ludGVyLWV2ZW50czogbm9uZTtcbiAgICAgICAgY29sb3I6ICR7ZS50ZXh0SWNvbi50ZXh0RGlzYWJsZWRPbmJnfSAhaW1wb3J0YW50O1xuICAgICAgYH1cblxuICAgICAgJHtwICYmIG8xYFxuICAgICAgICB0ZXh0LWRlY29yYXRpb246IG5vbmU7XG4gICAgICBgfVxuXG4gICAgICAke05NfSB7XG4gICAgICAgIGJvcmRlci1yYWRpdXM6IDBweDtcbiAgICAgICAgYWxpZ24tc2VsZjogY2VudGVyO1xuICAgICAgICBwYWRkaW5nOiAwcHg7XG4gICAgICB9XG4gICAgYDtcbiAgfVxuKSwgdWkgPSAkLnNwYW5gXG4gIGRpc3BsYXk6IGJsb2NrO1xuICB3aWR0aDogMTAwJTtcbiAgb3ZlcmZsb3c6IGhpZGRlbjtcbmA7XG5mdW5jdGlvbiBUWihlKSB7XG4gIGNvbnN0IHtcbiAgICBpY29uTGVmdDogdCxcbiAgICBpY29uUmlnaHQ6IG8sXG4gICAgY2hpbGRyZW46IG4sXG4gICAgb25DbGljazogcixcbiAgICBpc0Rpc2FibGVkOiBpLFxuICAgIGJhZGdlOiBhLFxuICAgIGN1c3RvbUl0ZW06IHNcbiAgfSA9IGUsIGwgPSBfMSgoKSA9PiB7XG4gICAgIWkgJiYgciAmJiByKCk7XG4gIH0sIFtpLCByXSk7XG4gIHJldHVybiAvKiBAX19QVVJFX18gKi8gYyhcbiAgICBmcyxcbiAgICB7XG4gICAgICAkaWNvbkxlZnQ6IGUuaWNvbkxlZnQsXG4gICAgICAkaXNEaXNhYmxlZDogZS5pc0Rpc2FibGVkLFxuICAgICAgJGlzQWN0aXZlOiBlLiRpc0FjdGl2ZSxcbiAgICAgIG9uQ2xpY2s6IGwsXG4gICAgICBjaGlsZHJlbjogLyogQF9fUFVSRV9fICovIGUxKE9zLCB7IGN1c3RvbUl0ZW06IHMsIGNoaWxkcmVuOiBbXG4gICAgICAgIHQgJiYgLyogQF9fUFVSRV9fICovIGMoXG4gICAgICAgICAgUzUsXG4gICAgICAgICAge1xuICAgICAgICAgICAgbmFtZTogdCxcbiAgICAgICAgICAgIGJhZGdlOiBhLFxuICAgICAgICAgICAgaXNEaXNhYmxlZDogaSxcbiAgICAgICAgICAgIHNpemU6IFwieHhzXCJcbiAgICAgICAgICB9XG4gICAgICAgICksXG4gICAgICAgIG4gJiYgLyogQF9fUFVSRV9fICovIGModWksIHsgY2hpbGRyZW46IG4gfSksXG4gICAgICAgIG8gJiYgLyogQF9fUFVSRV9fICovIGMoUzUsIHsgbmFtZTogbywgc2l6ZTogXCJ4eHhzXCIgfSlcbiAgICAgIF0gfSlcbiAgICB9XG4gICk7XG59XG4kLmRpdmBcbiAgd2lkdGg6IDEwMDBweDtcbmA7XG5jb25zdCBJWiA9ICQuZGl2KFxuICAoeyB0aGVtZTogeyBjb2xvcnM6IGUgfSwgJGlzT3BlbjogdCB9KSA9PiBvMWBcbiAgICBwYWRkaW5nOiA0cHggMTJweDtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAke3QgPyBcInRyYW5zcGFyZW50XCIgOiBlLmJhY2tncm91bmRzLmJnU2Vjb25kYXJ5fTtcbiAgICAuY29sbGFwc2Utd3JhcHBlciB7XG4gICAgICBtYXJnaW4tYm90dG9tOiAwO1xuICAgIH1cbiAgYFxuKSwgRFogPSAkLmRpdmBcbiAgZGlzcGxheTogZmxleDtcbiAganVzdGlmeS1jb250ZW50OiBmbGV4LXN0YXJ0O1xuICBhbGlnbi1pdGVtczogY2VudGVyO1xuICBnYXA6IDRweCAyNHB4O1xuICBmbGV4LXdyYXA6IHdyYXA7XG5gLCBIWiA9ICQuZGl2YFxuICBkaXNwbGF5OiBmbGV4O1xuICBqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWJldHdlZW47XG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gIGZsZXgtYmFzaXM6IGNhbGMoMjAlIC0gMjRweCk7XG4gIGJveC1zaXppbmc6IGJvcmRlci1ib3g7XG5gLCBWWiA9ICQuZGl2KFxuICAoeyB0aGVtZTogeyBtaXhpbnM6IGUsIGNvbG9yczogdCwgZm9udFdlaWdodDogbywgbGluZUhlaWdodDogbiwgdHlwb2dyYXBoeTogciB9IH0pID0+IG8xYFxuICAgICR7ZS5lbGxpcHNpc307XG4gICAgZm9udC1zaXplOiAke3IudDEwfTtcbiAgICBmb250LXdlaWdodDogJHtvLnJlZ3VsYXJ9O1xuICAgIGxpbmUtaGVpZ2h0OiAke24ubGgyMH07XG4gICAgY29sb3I6ICR7dC50ZXh0SWNvbi50ZXh0TG93ZW1waGFzaXN9O1xuICBgXG4pLCBQWiA9ICQuZGl2KFxuICAoeyB0aGVtZTogeyBtaXhpbnM6IGUsIGNvbG9yczogdCwgZm9udFdlaWdodDogbywgbGluZUhlaWdodDogbiwgdHlwb2dyYXBoeTogciB9IH0pID0+IG8xYFxuICAgICR7ZS5lbGxpcHNpc307XG4gICAgZm9udC1zaXplOiAke3IudDEwfTtcbiAgICBmb250LXdlaWdodDogJHtvLnJlZ3VsYXJ9O1xuICAgIGxpbmUtaGVpZ2h0OiAke24ubGgyMH07XG4gICAgY29sb3I6ICR7dC50ZXh0SWNvbi50ZXh0U2Vjb25kYXJ5fTtcbiAgICBtYXgtd2lkdGg6IDcwcHg7XG4gICAgdGV4dC1vdmVyZmxvdzogZWxsaXBzaXM7XG4gIGBcbiksIEZaID0gJC5kaXYoXG4gICh7IHRoZW1lOiB7IGZvbnRXZWlnaHQ6IGUsIGxpbmVIZWlnaHQ6IHQsIHR5cG9ncmFwaHk6IG8gfSB9KSA9PiBvMWBcbiAgICBidXR0b24ge1xuICAgICAgZm9udC1zaXplOiAke28udDEwfTtcbiAgICAgIGZvbnQtd2VpZ2h0OiAke2UucmVndWxhcn07XG4gICAgICBsaW5lLWhlaWdodDogJHt0LmxoMjB9O1xuICAgICAgcGFkZGluZy1sZWZ0OiAwO1xuICAgICAgdGV4dC1kZWNvcmF0aW9uOiB1bmRlcmxpbmU7XG4gICAgICAuaWNvbi1zeXN0ZW0ge1xuICAgICAgICBtYXJnaW46IC01cHggMDtcbiAgICAgIH1cbiAgICAgIHNwYW4ge1xuICAgICAgICBwYWRkaW5nLXJpZ2h0OiAwICFpbXBvcnRhbnQ7XG4gICAgICB9XG4gICAgfVxuICBgXG4pLCBYWiA9ICQuZGl2KFxuICAoeyB0aGVtZTogeyBjb2xvcnM6IGUsIGZvbnRXZWlnaHQ6IHQsIHR5cG9ncmFwaHk6IG8sIGJvcmRlclJhZGl1czogbiB9IH0pID0+IG8xYFxuICAgIGZvbnQtc2l6ZTogJHtvLnQxMH07XG4gICAgZm9udC13ZWlnaHQ6ICR7dC5yZWd1bGFyfTtcbiAgICBsaW5lLWhlaWdodDogOXB4O1xuICAgIGNvbG9yOiAke2UudGV4dEljb24udGV4dFRlcnRpYXJ5fTtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAke2UuYmFja2dyb3VuZHMuYmdUZXJ0aWFyeX07XG4gICAgcGFkZGluZzogMi40cHggNHB4O1xuICAgIGJvcmRlci1yYWRpdXM6ICR7bi5sZ307XG4gIGBcbiksIGUkID0gKHsgZGF0YTogZSwgb25Qcm9vZkJhbGFuY2VDbGljazogdCB9KSA9PiAvKiBAX19QVVJFX18gKi8gYyhzMCwgeyBjaGlsZHJlbjogZSA9PSBudWxsID8gdm9pZCAwIDogZS5tYXAoKG8sIG4pID0+IC8qIEBfX1BVUkVfXyAqLyBjKFxuICBVWixcbiAge1xuICAgIHRpdGxlOiBvLnRpdGxlLFxuICAgIHZhbHVlczogby52YWx1ZXMsXG4gICAgb25Qcm9vZkJhbGFuY2VDbGljazogdFxuICB9LFxuICBuXG4pKSB9KSwgVVogPSAoe1xuICB0aXRsZTogZSxcbiAgdmFsdWVzOiB0LFxuICBvblByb29mQmFsYW5jZUNsaWNrOiBvXG59KSA9PiB7XG4gIGNvbnN0IFtuLCByXSA9IFQxKCExKTtcbiAgcmV0dXJuIC8qIEBfX1BVUkVfXyAqLyBjKElaLCB7ICRpc09wZW46IG4sIGNsYXNzTmFtZTogXCJtZXRhLXdyYXBwZXJcIiwgY2hpbGRyZW46IC8qIEBfX1BVUkVfXyAqLyBjKGg1LCB7IHRpdGxlOiBlLCBvcGVuZWRTdGF0ZTogciwgY2hpbGRyZW46IC8qIEBfX1BVUkVfXyAqLyBjKERaLCB7IGNoaWxkcmVuOiB0Lm1hcCgoaSwgYSkgPT4ge1xuICAgIGNvbnN0IHMgPSBPYmplY3Qua2V5cyhpKVswXSwgbCA9IGlbc107XG4gICAgcmV0dXJuIC8qIEBfX1BVUkVfXyAqLyBlMShIWiwgeyBjaGlsZHJlbjogW1xuICAgICAgcyA9PT0gXCJQcm9vZiBCYWxhbmNlXCIgPyAvKiBAX19QVVJFX18gKi8gYyhGWiwgeyBjaGlsZHJlbjogLyogQF9fUFVSRV9fICovIGMoXG4gICAgICAgIFg2LFxuICAgICAgICB7XG4gICAgICAgICAgYnV0dG9uVHlwZTogXCJsaW5rXCIsXG4gICAgICAgICAgJGljb25SaWdodDogXCJFeHRlcm5hbExpbmtcIixcbiAgICAgICAgICBzaXplOiBcInNtXCIsXG4gICAgICAgICAgb25DbGljazogbyxcbiAgICAgICAgICBjaGlsZHJlbjogc1xuICAgICAgICB9XG4gICAgICApIH0pIDogLyogQF9fUFVSRV9fICovIGMoVlosIHsgY2hpbGRyZW46IHMgfSksXG4gICAgICBzID09PSBcIlByb29mIEJhbGFuY2VcIiA/IC8qIEBfX1BVUkVfXyAqLyBjKFhaLCB7IGNoaWxkcmVuOiBsIH0pIDogLyogQF9fUFVSRV9fICovIGMoUFosIHsgY2hpbGRyZW46IGwgfSlcbiAgICBdIH0sIGEpO1xuICB9KSB9KSB9KSB9KTtcbn0sIFlaID0gJC5kaXYoKHsgdGhlbWU6IHt9IH0pID0+IG8xYFxuICAgIC5oaWdoY2hhcnRzLWNyb3NzaGFpciB7XG4gICAgICBkaXNwbGF5OiBub25lO1xuICAgIH1cbiAgYCksIFRNID0gJC5kaXYoKHsgdGhlbWU6IHsgY29sb3JzOiBlIH0gfSkgPT4gbzFgXG4gICAgd2lkdGg6IDEwMCU7XG4gICAgcGFkZGluZzogMjRweDtcbiAgICBiYWNrZ3JvdW5kOiAke2UuYmFja2dyb3VuZHMuYmdQcmltYXJ5fTtcbiAgYCk7XG4kLmRpdigoeyB0aGVtZToge30gfSkgPT4gbzFgXG4gICAgd2lkdGg6IDEwMCU7XG4gIGApO1xuY29uc3QgZ3MgPSAkLmRpdihcbiAgKHtcbiAgICB0aGVtZTogeyBjb2xvcnM6IGUsIHR5cG9ncmFwaHk6IHQsIGxpbmVIZWlnaHQ6IG8sIGZvbnRGYW1pbHk6IG4sIGZvbnRXZWlnaHQ6IHIsIHNwYWNpbmdzOiBpIH1cbiAgfSkgPT4gbzFgXG4gICAgICAuaGlnaGNoYXJ0cy1wbG90LWJhY2tncm91bmQge1xuICAgICAgICBvdXRsaW5lOiAxcHggc29saWQgJHtlLmJvcmRlci5ib3JkZXJUZXJ0aWFyeX07XG4gICAgICB9XG4gICAgICAuaGlnaGNoYXJ0cy1heGlzLWxhYmVscyAuaGlnaGNoYXJ0cy14YXhpcy1sYWJlbHMge1xuICAgICAgICBtYXJnaW4tdG9wOiAtNnB4O1xuICAgICAgfVxuXG4gICAgICAuZHZ0b29sdGlwSGVhZCB7XG4gICAgICAgIGNvbG9yOiAke2UudGV4dEljb24udGV4dFByaW1hcnl9O1xuICAgICAgICBsaW5lLWhlaWdodDogJHtvLmxoMTR9O1xuICAgICAgICBmb250LXdlaWdodDogJHtyLnJlZ3VsYXJ9O1xuICAgICAgICBmb250LXNpemU6ICR7dC50MTB9O1xuICAgICAgICBmb250LWZhbWlseTogJHtuLmJhc2V9O1xuICAgICAgICBwYWRkaW5nLWxlZnQ6ICR7aS5zcDR9O1xuICAgICAgfVxuICAgICAgLmR2U2VyaWVzTmFtZSB7XG4gICAgICAgIGNvbG9yOiAke2UudGV4dEljb24udGV4dExvd2VtcGhhc2lzfTtcbiAgICAgICAgbGluZS1oZWlnaHQ6ICR7by5saDE0fTtcbiAgICAgICAgZm9udC13ZWlnaHQ6ICR7ci5yZWd1bGFyfTtcbiAgICAgICAgZm9udC1zaXplOiAke3QudDEwfTtcbiAgICAgICAgZm9udC1mYW1pbHk6ICR7bi5iYXNlfTtcbiAgICAgIH1cbiAgICAgIC5kdnRvb2x0aXB5QXhpc1ZhbHVlIHtcbiAgICAgICAgY29sb3I6ICR7ZS50ZXh0SWNvbi50ZXh0UHJpbWFyeX07XG4gICAgICAgIGxpbmUtaGVpZ2h0OiAke28ubGgxNH07XG4gICAgICAgIGZvbnQtd2VpZ2h0OiAke3IubWVkaXVtfTtcbiAgICAgICAgZm9udC1zaXplOiAke3QudDEwfTtcbiAgICAgICAgZm9udC1mYW1pbHk6ICR7bi5iYXNlfTtcbiAgICAgIH1cbiAgICAgIC5kdnRvb2x0aXBMZWdlbmQge1xuICAgICAgICBmb250LXNpemU6IDE4cHg7XG4gICAgICAgIHBhZGRpbmc6IDdweDtcbiAgICAgICAgZGlzcGxheTogaW5saW5lLWZsZXg7XG4gICAgICAgIGJveC1zaXppbmc6IGJvcmRlci1ib3g7XG4gICAgICAgIG1pbi13aWR0aDogMjRweDtcbiAgICAgICAgbWF4LXdpZHRoOiAyNHB4O1xuICAgICAgICBtYXgtaGVpZ2h0OiAyNHB4O1xuICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyO1xuICAgICAgfVxuICAgICAgLmR2dG9vbHRpcENvbnRhaW5lciB7XG4gICAgICAgIHBhZGRpbmc6ICR7aS5zcDR9ICR7aS5zcDh9ICR7aS5zcDR9ICR7aS5zcDR9ICFpbXBvcnRhbnQ7XG4gICAgICAgIGxpbmUtaGVpZ2h0OiAxNHB4O1xuICAgICAgfVxuICAgIGBcbiksIEdaID0gJC5kaXYoKHsgdGhlbWU6IHsgY29sb3JzOiBlIH0gfSkgPT4gbzFgXG4gICAgLmhpZ2hjaGFydHMtY3Jvc3NoYWlyIHtcbiAgICAgIGRpc3BsYXk6IG5vbmU7XG4gICAgfVxuICAgIC5oaWdoY2hhcnRzLXRpY2sge1xuICAgICAgc3Ryb2tlOiB0cmFuc3BhcmVudCAhaW1wb3J0YW50O1xuICAgIH1cbiAgICAke0lNfSB7XG4gICAgICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gICAgICBib3R0b206IDExNXB4O1xuICAgICAgcmlnaHQ6IDEwcHg7XG4gICAgICBmbG9hdDogcmlnaHQ7XG4gICAgfVxuICAgIC5oaWdoY2hhcnRzLXJlc2V0LXpvb20gLmhpZ2hjaGFydHMtYnV0dG9uLWJveCB7XG4gICAgICBmaWxsOiAke2UuYnV0dG9uQmFja2dvdW5kLmJ1dHRvbkJnVGVydGlhcnl9ICFpbXBvcnRhbnQ7XG4gICAgfVxuICAgIC5oaWdoY2hhcnRzLXJlc2V0LXpvb20gdGl0bGUge1xuICAgICAgZGlzcGxheTogbm9uZSAhaW1wb3J0YW50O1xuICAgIH1cbiAgICAuaGlnaGNoYXJ0cy1yZXNldC16b29tIHtcbiAgICAgIHRleHQge1xuICAgICAgICBmaWxsOiAke2UudGV4dEljb24udGV4dExvd2VtcGhhc2lzfSAhaW1wb3J0YW50O1xuICAgICAgfVxuICAgIH1cbiAgYCksIFFaID0gJC5kaXYoXG4gICh7IHRoZW1lOiB7IGNvbG9yczogZSwgZm9udEZhbWlseTogdCwgZm9udFdlaWdodDogbyB9IH0pID0+IG8xYFxuICAgICAgLmhpZ2hjaGFydHMtY3Jvc3NoYWlyIHtcbiAgICAgICAgZGlzcGxheTogbm9uZTtcbiAgICAgIH1cbiAgICAgIC5oaWdoY2hhcnRzLXBsb3QtYmFja2dyb3VuZCB0ZXh0IHtcbiAgICAgICAgY29sb3I6ICR7ZS50ZXh0SWNvbi50ZXh0UHJpbWFyeX07XG4gICAgICAgIGxpbmUtaGVpZ2h0OiAzMS45MnB4O1xuICAgICAgICBmb250LXdlaWdodDogJHtvLnJlZ3VsYXJ9O1xuICAgICAgICBmb250LXNpemU6IDIyLjhweDtcbiAgICAgICAgZm9udC1mYW1pbHk6ICR7dC5iYXNlfTtcbiAgICAgIH1cbiAgICBgXG4pO1xuJC5kaXZgXG4gIG1heC13aWR0aDogODV2dztcbiAgbWluLXdpZHRoOiA4NXZ3O1xuYDtcbmNvbnN0IElNID0gJC5kaXYoKHsgdGhlbWU6IHt9IH0pID0+IG8xYGApLCBaWiA9ICQuZGl2KCh7IHRoZW1lOiB7fSB9KSA9PiBvMWBcbiAgICBkaXNwbGF5OiBmbGV4O1xuICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG4gICAgd2lkdGg6IGZpdC1jb250ZW50O1xuICAgIGhlaWdodDogZml0LWNvbnRlbnQ7XG4gIGApLCBOYyA9ICQuZGl2KFxuICAoeyB0aGVtZToge30gfSkgPT4gbzFgXG4gICAgZGlzcGxheTogZmxleDtcbiAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuICBgXG4pLCBETSA9ICQuZGl2KFxuICAoeyB0aGVtZTogeyBzcGFjaW5nczogZSwgY29sb3JzOiB0IH0gfSkgPT4gbzFgXG4gICAgcGFkZGluZzogJHtlLnNwNn07XG4gICAgYm9yZGVyLXJhZGl1czogJHtlLnNwNH07XG4gICAgYmFja2dyb3VuZDogJHt0LmJhY2tncm91bmRzLmJnU2Vjb25kYXJ5fTtcbiAgYFxuKSwgalogPSAkLmRpdihcbiAgKHsgdGhlbWU6IHsgc3BhY2luZ3M6IGUgfSB9KSA9PiBvMWBcbiAgICBkaXNwbGF5OiBmbGV4O1xuICAgIGdhcDogJHtlLnNwNH07XG4gICAgYWxpZ24taXRlbXM6IGJhc2VsaW5lO1xuICBgXG4pLCBLWiA9ICQuZGl2KFxuICAoeyB0aGVtZTogeyBzcGFjaW5nczogZSB9IH0pID0+IG8xYFxuICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgZ2FwOiAke2Uuc3A0fTtcbiAgICBhbGlnbi1pdGVtczogZW5kO1xuICBgXG4pLCBKWiA9ICQuZGl2KFxuICAoeyB0aGVtZTogeyBzcGFjaW5nczogZSB9IH0pID0+IG8xYFxuICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgZ2FwOiAke2Uuc3A0fTtcbiAgICBhbGlnbi1pdGVtczogY2VudGVyO1xuICAgIHBhZGRpbmctYm90dG9tOiAke2Uuc3AxNn07XG4gICAgJHt0cn0ge1xuICAgICAgcGFkZGluZzogMHB4O1xuICAgIH1cbiAgYFxuKSwgX1ogPSAkLmRpdihcbiAgKHsgdGhlbWU6IHsgc3BhY2luZ3M6IGUgfSB9KSA9PiBvMWBcbiAgICBkaXNwbGF5OiBmbGV4O1xuICAgIGdhcDogJHtlLnNwNH07XG4gICAgYWxpZ24taXRlbXM6IGJhc2VsaW5lO1xuICAgIHBhZGRpbmctYm90dG9tOiAke2Uuc3A4fTtcbiAgYFxuKSwgSE0gPSAkLmRpdihcbiAgKHsgdGhlbWU6IHsgc3BhY2luZ3M6IGUgfSB9KSA9PiBvMWBcbiAgICBwYWRkaW5nLWJvdHRvbTogJHtlLnNwOH07XG4gIGBcbiksIHlhID0gJC5kaXYoXG4gICh7IHRoZW1lOiB7IHNwYWNpbmdzOiBlLCBjb2xvcnM6IHQsIHNoYWRvd3M6IG8gfSwgJHR5cGU6IG4gfSkgPT4gbzFgXG4gICAgYm9yZGVyLXJhZGl1czogJHtlLnNwNH07XG4gICAgYmFja2dyb3VuZDogJHt0LmJhY2tncm91bmRzLmJnUHJpbWFyeX07XG4gICAgYm94LXNoYWRvdzogJHtvLnNtfTtcbiAgICBib3gtc2l6aW5nOiBib3JkZXItYm94O1xuICAgIC5oaWdoY2hhcnRzLW1hcmtlcnMge1xuICAgICAgZGlzcGxheTogbm9uZTtcbiAgICB9XG4gICAgJHtUTX0ge1xuICAgICAgcGFkZGluZzogMDtcbiAgICAgIGJhY2tncm91bmQ6IHRyYW5zcGFyZW50O1xuICAgIH1cbiAgICAke24gPT0gXCJtZXRyaWNzTnVtYmVyT25seVwiICYmIG8xYFxuICAgICAgcGFkZGluZzogJHtlLnNwMTJ9ICR7ZS5zcDE2fTtcbiAgICAgIHdpZHRoOiAxMDAlO1xuICAgICAgZGlzcGxheTogZmxleDtcbiAgICAgIGFsaWduLWl0ZW1zOiBlbmQ7XG4gICAgICBnYXA6ICR7ZS5zcDE2fTtcbiAgICBgfVxuICAgICR7biA9PSBcIm1ldHJpY3NcIiAmJiBvMWBcbiAgICAgIHBhZGRpbmc6ICR7ZS5zcDE2fTtcbiAgICAgIG1pbi13aWR0aDogMzQ1cHg7XG4gICAgICBtYXgtd2lkdGg6IDM0NXB4O1xuICAgICAgZGlzcGxheTogZmxleDtcbiAgICAgIGFsaWduLWl0ZW1zOiBlbmQ7XG4gICAgICBnYXA6ICR7ZS5zcDE2fTtcbiAgICBgfVxuICAgICR7biA9PSBcIm1ldHJpY3NTbWFsbFwiICYmIG8xYFxuICAgICAgcGFkZGluZzogJHtlLnNwMTJ9ICR7ZS5zcDE2fSAke2Uuc3AxNn1cbiAgICAgICAgJHtlLnNwMTZ9O1xuICAgICAgbWluLXdpZHRoOiAyMDUuNnB4O1xuICAgICAgbWF4LXdpZHRoOiAyMDUuNnB4O1xuICAgICAgZGlzcGxheTogZmxleDtcbiAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG4gICAgICBhbGlnbi1pdGVtczogc3RhcnQ7XG4gICAgICBnYXA6ICR7ZS5zcDh9O1xuXG4gICAgICBsYWJlbCB7XG4gICAgICAgIG1hcmdpbi1ib3R0b206ICR7ZS5zcDR9O1xuICAgICAgfVxuICAgICAgJHt0cn0ge1xuICAgICAgICBwYWRkaW5nLWJvdHRvbTogMHB4O1xuICAgICAgfVxuICAgICAgJHtITX0ge1xuICAgICAgICBwYWRkaW5nOiAwcHg7XG4gICAgICB9XG4gICAgYH1cbiAgICAmOmhvdmVyIHtcbiAgICAgIGJhY2tncm91bmQ6ICR7dC5kYXRhVmlzdWFsaXphdGlvbk1ldHJpY3MubWV0cmljc0JnSG92ZXJ9O1xuICAgICAgJHtETX0ge1xuICAgICAgICBiYWNrZ3JvdW5kOiAke3QuYmFja2dyb3VuZHMuYmdQcmltYXJ5fTtcbiAgICAgIH1cbiAgICAgIC5oaWdoY2hhcnRzLWJhY2tncm91bmQge1xuICAgICAgICBmaWxsOiAke3QuZGF0YVZpc3VhbGl6YXRpb25NZXRyaWNzLm1ldHJpY3NCZ0hvdmVyfTtcbiAgICAgIH1cbiAgICB9XG4gIGBcbiksICRaID0gJC5sYWJlbChcbiAgKHsgdGhlbWU6IHsgZm9udFdlaWdodDogZSwgdHlwb2dyYXBoeTogdCwgY29sb3JzOiBvLCBsaW5lSGVpZ2h0OiBuLCBzcGFjaW5nczogciB9IH0pID0+IG8xYFxuICAgIGZvbnQtd2VpZ2h0OiAke2UubGlnaHR9O1xuICAgIGZvbnQtc2l6ZTogJHt0LnQxMn07XG4gICAgY29sb3I6ICR7by50ZXh0SWNvbi50ZXh0TG93ZW1waGFzaXN9O1xuICAgIGxpbmUtaGVpZ2h0OiAxNi44cHg7XG4gIGBcbiksIHRyID0gJC5sYWJlbChcbiAgKHsgdGhlbWU6IHsgZm9udFdlaWdodDogZSwgdHlwb2dyYXBoeTogdCwgY29sb3JzOiBvLCBsaW5lSGVpZ2h0OiBuLCBzcGFjaW5nczogciB9IH0pID0+IG8xYFxuICAgIGZvbnQtd2VpZ2h0OiAke2UucmVndWxhcn07XG4gICAgZm9udC1zaXplOiAke3QudDE0fTtcbiAgICBjb2xvcjogJHtvLnRleHRJY29uLnRleHRMb3dlbXBoYXNpc307XG4gICAgbGluZS1oZWlnaHQ6ICR7bi5saDE5fTtcbiAgICBwYWRkaW5nLWJvdHRvbTogJHtyLnNwMTZ9O1xuICBgXG4pLCBUYyA9ICQuZGl2KFxuICAoeyB0aGVtZToge30gfSkgPT4gbzFgXG4gICAgd2lkdGg6IDEwMCU7XG4gICAgLyogLmhpZ2hjaGFydHMtcm9vdHtcbiAgICB3aWR0aDoxMDAlO1xuICB9ICovXG4gIGBcbiksIEVuID0gJC5wKFxuICAoeyB0aGVtZTogeyBmb250V2VpZ2h0OiBlLCB0eXBvZ3JhcGh5OiB0LCBjb2xvcnM6IG8sIGxpbmVIZWlnaHQ6IG4gfSB9KSA9PiBvMWBcbiAgICBmb250LXdlaWdodDogJHtlLm1lZGl1bX07XG4gICAgZm9udC1zaXplOiAke3QudDI4fTtcbiAgICBjb2xvcjogJHtvLnRleHRJY29uLnRleHRIaWdoZW1waGFzaXN9O1xuICAgIGxpbmUtaGVpZ2h0OiAke24ubGgzOX07XG4gICAgcGFkZGluZzogMHB4O1xuICAgIG1hcmdpbjogMHB4O1xuICBgXG4pLCBJYyA9ICQuZGl2KFxuICAoeyB0aGVtZTogeyBmb250V2VpZ2h0OiBlLCB0eXBvZ3JhcGh5OiB0LCBjb2xvcnM6IG8sIGxpbmVIZWlnaHQ6IG4gfSB9KSA9PiBvMWBcbiAgICBmb250LXdlaWdodDogJHtlLnJlZ3VsYXJ9O1xuICAgIGZvbnQtc2l6ZTogJHt0LnQxMH07XG4gICAgY29sb3I6ICR7by50ZXh0SWNvbi50ZXh0TG93ZW1waGFzaXN9O1xuICAgIGxpbmUtaGVpZ2h0OiAke24ubGgxNH07XG4gICAgbWF4LXdpZHRoOiAxMDVweDtcbiAgICBtaW4td2lkdGg6IDEwNXB4O1xuICBgXG4pLCBlaiA9ICQuc3BhbihcbiAgKHsgdGhlbWU6IHsgZm9udFdlaWdodDogZSwgdHlwb2dyYXBoeTogdCwgY29sb3JzOiBvLCBsaW5lSGVpZ2h0OiBuIH0gfSkgPT4gbzFgXG4gICAgZm9udC13ZWlnaHQ6ICR7ZS5yZWd1bGFyfTtcbiAgICBmb250LXNpemU6ICR7dC50MTh9O1xuICAgIGNvbG9yOiAke28udGV4dEljb24udGV4dEhpZ2hlbXBoYXNpc307XG4gICAgbGluZS1oZWlnaHQ6ICR7bi5saDI1fTtcbiAgYFxuKSwgRGMgPSAkLnAoXG4gICh7IHRoZW1lOiB7IGZvbnRXZWlnaHQ6IGUsIHR5cG9ncmFwaHk6IHQsIGNvbG9yczogbywgc3BhY2luZ3M6IG4gfSwgJHN0YXR1czogciB9KSA9PiBvMWBcbiAgICBkaXNwbGF5OiBmbGV4O1xuICAgIGFsaWduLWl0ZW1zOiBiYXNlbGluZTtcbiAgICBnYXA6ICR7bi5zcDJ9O1xuICAgIHBhZGRpbmc6ICR7bi5zcDR9O1xuICAgIGZvbnQtd2VpZ2h0OiAke2UucmVndWxhcn07XG4gICAgZm9udC1zaXplOiAke3QudDEyfTtcbiAgICBib3JkZXItcmFkaXVzOiAke24uc3A0fTtcbiAgICBsaW5lLWhlaWdodDogMTYuOHB4O1xuICAgIG1hcmdpbjogMHB4O1xuXG4gICAgJHtyID09IFwidXBcIiAmJiBvMWBcbiAgICAgIGJhY2tncm91bmQ6ICR7by5iYWNrZ3JvdW5kcy5iZ1N1Y2Nlc3NTZWNvbmRhcnl9O1xuICAgICAgY29sb3I6ICR7by5kYXRhVmlzdWFsaXphdGlvbk1ldHJpY3MubWV0cmljc0JnVXB9O1xuICAgIGB9XG4gICAgJHtyID09IFwiZG93blwiICYmIG8xYFxuICAgICAgYmFja2dyb3VuZDogJHtvLmJhY2tncm91bmRzLmJnRXJyb3JTZWNvbmRhcnl9O1xuICAgICAgY29sb3I6ICR7by5kYXRhVmlzdWFsaXphdGlvbk1ldHJpY3MubWV0cmljc0JnRG93bn07XG4gICAgYH1cbiAgYFxuKTtcbiQuZGl2YFxuICB3aWR0aDogMTAwJTtcbmA7XG52YXIgVk0gPSB7IGV4cG9ydHM6IHt9IH07XG4oZnVuY3Rpb24oZSwgdCkge1xuICAoZnVuY3Rpb24obywgbikge1xuICAgIGUuZXhwb3J0cyA9IG4obTEpO1xuICB9KSh0eXBlb2Ygc2VsZiA8IFwidVwiID8gc2VsZiA6IEQ1LCBmdW5jdGlvbihvKSB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uKG4pIHtcbiAgICAgIGZ1bmN0aW9uIHIoYSkge1xuICAgICAgICBpZiAoaVthXSlcbiAgICAgICAgICByZXR1cm4gaVthXS5leHBvcnRzO1xuICAgICAgICB2YXIgcyA9IGlbYV0gPSB7IGk6IGEsIGw6ICExLCBleHBvcnRzOiB7fSB9O1xuICAgICAgICByZXR1cm4gblthXS5jYWxsKHMuZXhwb3J0cywgcywgcy5leHBvcnRzLCByKSwgcy5sID0gITAsIHMuZXhwb3J0cztcbiAgICAgIH1cbiAgICAgIHZhciBpID0ge307XG4gICAgICByZXR1cm4gci5tID0gbiwgci5jID0gaSwgci5kID0gZnVuY3Rpb24oYSwgcywgbCkge1xuICAgICAgICByLm8oYSwgcykgfHwgT2JqZWN0LmRlZmluZVByb3BlcnR5KGEsIHMsIHsgY29uZmlndXJhYmxlOiAhMSwgZW51bWVyYWJsZTogITAsIGdldDogbCB9KTtcbiAgICAgIH0sIHIubiA9IGZ1bmN0aW9uKGEpIHtcbiAgICAgICAgdmFyIHMgPSBhICYmIGEuX19lc01vZHVsZSA/IGZ1bmN0aW9uKCkge1xuICAgICAgICAgIHJldHVybiBhLmRlZmF1bHQ7XG4gICAgICAgIH0gOiBmdW5jdGlvbigpIHtcbiAgICAgICAgICByZXR1cm4gYTtcbiAgICAgICAgfTtcbiAgICAgICAgcmV0dXJuIHIuZChzLCBcImFcIiwgcyksIHM7XG4gICAgICB9LCByLm8gPSBmdW5jdGlvbihhLCBzKSB7XG4gICAgICAgIHJldHVybiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoYSwgcyk7XG4gICAgICB9LCByLnAgPSBcIlwiLCByKHIucyA9IDApO1xuICAgIH0oW2Z1bmN0aW9uKG4sIHIsIGkpIHtcbiAgICAgIGZ1bmN0aW9uIGEoKSB7XG4gICAgICAgIHJldHVybiBhID0gT2JqZWN0LmFzc2lnbiA/IE9iamVjdC5hc3NpZ24uYmluZCgpIDogZnVuY3Rpb24oaCkge1xuICAgICAgICAgIGZvciAodmFyIGcgPSAxOyBnIDwgYXJndW1lbnRzLmxlbmd0aDsgZysrKSB7XG4gICAgICAgICAgICB2YXIgdiA9IGFyZ3VtZW50c1tnXTtcbiAgICAgICAgICAgIGZvciAodmFyIEwgaW4gdilcbiAgICAgICAgICAgICAgT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHYsIEwpICYmIChoW0xdID0gdltMXSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiBoO1xuICAgICAgICB9LCBhLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gICAgICB9XG4gICAgICBmdW5jdGlvbiBzKGgpIHtcbiAgICAgICAgcmV0dXJuIGIoaCkgfHwgZChoKSB8fCBwKGgpIHx8IGwoKTtcbiAgICAgIH1cbiAgICAgIGZ1bmN0aW9uIGwoKSB7XG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoYEludmFsaWQgYXR0ZW1wdCB0byBzcHJlYWQgbm9uLWl0ZXJhYmxlIGluc3RhbmNlLlxuSW4gb3JkZXIgdG8gYmUgaXRlcmFibGUsIG5vbi1hcnJheSBvYmplY3RzIG11c3QgaGF2ZSBhIFtTeW1ib2wuaXRlcmF0b3JdKCkgbWV0aG9kLmApO1xuICAgICAgfVxuICAgICAgZnVuY3Rpb24gcChoLCBnKSB7XG4gICAgICAgIGlmIChoKSB7XG4gICAgICAgICAgaWYgKHR5cGVvZiBoID09IFwic3RyaW5nXCIpXG4gICAgICAgICAgICByZXR1cm4gTShoLCBnKTtcbiAgICAgICAgICB2YXIgdiA9IE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChoKS5zbGljZSg4LCAtMSk7XG4gICAgICAgICAgcmV0dXJuIHYgPT09IFwiT2JqZWN0XCIgJiYgaC5jb25zdHJ1Y3RvciAmJiAodiA9IGguY29uc3RydWN0b3IubmFtZSksIHYgPT09IFwiTWFwXCIgfHwgdiA9PT0gXCJTZXRcIiA/IEFycmF5LmZyb20oaCkgOiB2ID09PSBcIkFyZ3VtZW50c1wiIHx8IC9eKD86VWl8SSludCg/Ojh8MTZ8MzIpKD86Q2xhbXBlZCk/QXJyYXkkLy50ZXN0KHYpID8gTShoLCBnKSA6IHZvaWQgMDtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgZnVuY3Rpb24gZChoKSB7XG4gICAgICAgIGlmICh0eXBlb2YgU3ltYm9sIDwgXCJ1XCIgJiYgaFtTeW1ib2wuaXRlcmF0b3JdICE9IG51bGwgfHwgaFtcIkBAaXRlcmF0b3JcIl0gIT0gbnVsbClcbiAgICAgICAgICByZXR1cm4gQXJyYXkuZnJvbShoKTtcbiAgICAgIH1cbiAgICAgIGZ1bmN0aW9uIGIoaCkge1xuICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShoKSlcbiAgICAgICAgICByZXR1cm4gTShoKTtcbiAgICAgIH1cbiAgICAgIGZ1bmN0aW9uIE0oaCwgZykge1xuICAgICAgICAoZyA9PSBudWxsIHx8IGcgPiBoLmxlbmd0aCkgJiYgKGcgPSBoLmxlbmd0aCk7XG4gICAgICAgIGZvciAodmFyIHYgPSAwLCBMID0gbmV3IEFycmF5KGcpOyB2IDwgZzsgdisrKVxuICAgICAgICAgIExbdl0gPSBoW3ZdO1xuICAgICAgICByZXR1cm4gTDtcbiAgICAgIH1cbiAgICAgIGZ1bmN0aW9uIHUoaCkge1xuICAgICAgICBcIkBiYWJlbC9oZWxwZXJzIC0gdHlwZW9mXCI7XG4gICAgICAgIHJldHVybiAodSA9IHR5cGVvZiBTeW1ib2wgPT0gXCJmdW5jdGlvblwiICYmIHR5cGVvZiBTeW1ib2wuaXRlcmF0b3IgPT0gXCJzeW1ib2xcIiA/IGZ1bmN0aW9uKGcpIHtcbiAgICAgICAgICByZXR1cm4gdHlwZW9mIGc7XG4gICAgICAgIH0gOiBmdW5jdGlvbihnKSB7XG4gICAgICAgICAgcmV0dXJuIGcgJiYgdHlwZW9mIFN5bWJvbCA9PSBcImZ1bmN0aW9uXCIgJiYgZy5jb25zdHJ1Y3RvciA9PT0gU3ltYm9sICYmIGcgIT09IFN5bWJvbC5wcm90b3R5cGUgPyBcInN5bWJvbFwiIDogdHlwZW9mIGc7XG4gICAgICAgIH0pKGgpO1xuICAgICAgfVxuICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHIsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiAhMCB9KSwgaS5kKHIsIFwiSGlnaGNoYXJ0c1JlYWN0XCIsIGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gTztcbiAgICAgIH0pO1xuICAgICAgdmFyIEEgPSBpKDEpLCB6ID0gaS5uKEEpLCBmID0gdHlwZW9mIHdpbmRvdyA8IFwidVwiID8gQS51c2VMYXlvdXRFZmZlY3QgOiBBLnVzZUVmZmVjdCwgTyA9IE9iamVjdChBLm1lbW8pKE9iamVjdChBLmZvcndhcmRSZWYpKGZ1bmN0aW9uKGgsIGcpIHtcbiAgICAgICAgdmFyIHYgPSBPYmplY3QoQS51c2VSZWYpKCksIEwgPSBPYmplY3QoQS51c2VSZWYpKCksIHkgPSBPYmplY3QoQS51c2VSZWYpKGguY29uc3RydWN0b3JUeXBlKSwgQiA9IE9iamVjdChBLnVzZVJlZikoaC5oaWdoY2hhcnRzKTtcbiAgICAgICAgcmV0dXJuIGYoZnVuY3Rpb24oKSB7XG4gICAgICAgICAgZnVuY3Rpb24gWCgpIHtcbiAgICAgICAgICAgIHZhciBUID0gaC5oaWdoY2hhcnRzIHx8ICh0eXBlb2Ygd2luZG93ID4gXCJ1XCIgPyBcInVuZGVmaW5lZFwiIDogdSh3aW5kb3cpKSA9PT0gXCJvYmplY3RcIiAmJiB3aW5kb3cuSGlnaGNoYXJ0cywgdyA9IGguY29uc3RydWN0b3JUeXBlIHx8IFwiY2hhcnRcIjtcbiAgICAgICAgICAgIFQgPyBUW3ddID8gaC5vcHRpb25zID8gTC5jdXJyZW50ID0gVFt3XSh2LmN1cnJlbnQsIGgub3B0aW9ucywgaC5jYWxsYmFjaykgOiBjb25zb2xlLndhcm4oJ1RoZSBcIm9wdGlvbnNcIiBwcm9wZXJ0eSB3YXMgbm90IHBhc3NlZC4nKSA6IGNvbnNvbGUud2FybignVGhlIFwiY29uc3RydWN0b3JUeXBlXCIgcHJvcGVydHkgaXMgaW5jb3JyZWN0IG9yIHNvbWUgcmVxdWlyZWQgbW9kdWxlIGlzIG5vdCBpbXBvcnRlZC4nKSA6IGNvbnNvbGUud2FybignVGhlIFwiaGlnaGNoYXJ0c1wiIHByb3BlcnR5IHdhcyBub3QgcGFzc2VkLicpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoTC5jdXJyZW50KSB7XG4gICAgICAgICAgICBpZiAoaC5hbGxvd0NoYXJ0VXBkYXRlICE9PSAhMSlcbiAgICAgICAgICAgICAgaWYgKGguY29uc3RydWN0b3JUeXBlICE9PSB5LmN1cnJlbnQgfHwgaC5oaWdoY2hhcnRzICE9PSBCLmN1cnJlbnQpXG4gICAgICAgICAgICAgICAgeS5jdXJyZW50ID0gaC5jb25zdHJ1Y3RvclR5cGUsIEIuY3VycmVudCA9IGguaGlnaGNoYXJ0cywgWCgpO1xuICAgICAgICAgICAgICBlbHNlIGlmICghaC5pbW11dGFibGUgJiYgTC5jdXJyZW50KSB7XG4gICAgICAgICAgICAgICAgdmFyIEY7XG4gICAgICAgICAgICAgICAgKEYgPSBMLmN1cnJlbnQpLnVwZGF0ZS5hcHBseShGLCBbaC5vcHRpb25zXS5jb25jYXQocyhoLnVwZGF0ZUFyZ3MgfHwgWyEwLCAhMF0pKSk7XG4gICAgICAgICAgICAgIH0gZWxzZVxuICAgICAgICAgICAgICAgIFgoKTtcbiAgICAgICAgICB9IGVsc2VcbiAgICAgICAgICAgIFgoKTtcbiAgICAgICAgfSwgW2gub3B0aW9ucywgaC5hbGxvd0NoYXJ0VXBkYXRlLCBoLnVwZGF0ZUFyZ3MsIGguY29udGFpbmVyUHJvcHMsIGguaGlnaGNoYXJ0cywgaC5jb25zdHJ1Y3RvclR5cGVdKSwgZihmdW5jdGlvbigpIHtcbiAgICAgICAgICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICBMLmN1cnJlbnQgJiYgKEwuY3VycmVudC5kZXN0cm95KCksIEwuY3VycmVudCA9IG51bGwpO1xuICAgICAgICAgIH07XG4gICAgICAgIH0sIFtdKSwgT2JqZWN0KEEudXNlSW1wZXJhdGl2ZUhhbmRsZSkoZywgZnVuY3Rpb24oKSB7XG4gICAgICAgICAgcmV0dXJuIHsgZ2V0IGNoYXJ0KCkge1xuICAgICAgICAgICAgcmV0dXJuIEwuY3VycmVudDtcbiAgICAgICAgICB9LCBjb250YWluZXI6IHYgfTtcbiAgICAgICAgfSwgW10pLCB6LmEuY3JlYXRlRWxlbWVudChcImRpdlwiLCBhKHt9LCBoLmNvbnRhaW5lclByb3BzLCB7IHJlZjogdiB9KSk7XG4gICAgICB9KSk7XG4gICAgICByLmRlZmF1bHQgPSBPO1xuICAgIH0sIGZ1bmN0aW9uKG4sIHIpIHtcbiAgICAgIG4uZXhwb3J0cyA9IG87XG4gICAgfV0pO1xuICB9KTtcbn0pKFZNKTtcbnZhciB0aiA9IFZNLmV4cG9ydHM7XG5jb25zdCB6byA9IC8qIEBfX1BVUkVfXyAqLyBRMih0aiksIG9qID0gKHtcbiAgeEF4aXM6IGUgPSB7fSxcbiAgeUF4aXM6IHQgPSB7fSxcbiAgY2hhcnQ6IG8sXG4gIHNpemU6IG4gPSB7fSxcbiAgc2VyaWVzOiByXG59KSA9PiB7XG4gIGNvbnN0IGkgPSBuMChudWxsKSwgeyBIaWdoY2hhcnRzOiBhLCBpc1JlbmRlckNoYXJ0OiBzLCBkZWZhdWx0U2V0dGluZzogbCB9ID0gYm8oKTtcbiAgbGV0IHAgPSBybygpO1xuICBjb25zdCBkID0gYCR7cC5jb2xvcnMuZGF0YVZpc3VhbGl6YXRpb25NZXRyaWNzLm1ldHJpY3NCZ1VwfWAsIGIgPSBgJHtwLmNvbG9ycy5kYXRhVmlzdWFsaXphdGlvbk1ldHJpY3MubWV0cmljc0JnRG93bn1gLCBNID0gYCR7cC5jb2xvcnMuYmFja2dyb3VuZHMuYmdTdWNjZXNzU2Vjb25kYXJ5fWAsIHUgPSBgJHtwLmNvbG9ycy5iYWNrZ3JvdW5kcy5iZ0Vycm9yU2Vjb25kYXJ5fWAsIEEgPSBtMCgoKSA9PiB7XG4gICAgbGV0IHogPSB7IC4uLmwgfTtcbiAgICByZXR1cm4ge1xuICAgICAgLi4ueixcbiAgICAgIGV4cG9ydGluZzoge1xuICAgICAgICBlbmFibGVkOiAhMVxuICAgICAgICAvLyBoaWRlIGV4cG9ydGluZyBidXR0b25cbiAgICAgIH0sXG4gICAgICBjaGFydDoge1xuICAgICAgICAuLi5uLFxuICAgICAgICAuLi5vLFxuICAgICAgICBoZWlnaHQ6IChvID09IG51bGwgPyB2b2lkIDAgOiBvLnR5cGUpID09IFwibWV0cmljc1wiID8gOTcgOiAobyA9PSBudWxsID8gdm9pZCAwIDogby50eXBlKSA9PSBcIm1ldHJpY3NTbWFsbFwiID8gMzcgOiBvID09IG51bGwgPyB2b2lkIDAgOiBvLmhlaWdodCxcbiAgICAgICAgdHlwZTogXCJhcmVhXCIsXG4gICAgICAgIC8vIHpvb21UeXBlOiAneCcsXG4gICAgICAgIHNwYWNpbmdCb3R0b206IDAsXG4gICAgICAgIHNwYWNpbmdUb3A6IDQsXG4gICAgICAgIHNwYWNpbmdMZWZ0OiAwLFxuICAgICAgICBzcGFjaW5nUmlnaHQ6IDBcbiAgICAgIH0sXG4gICAgICB0aXRsZToge1xuICAgICAgICB0ZXh0OiBcIlwiLFxuICAgICAgICBhbGlnbjogXCJsZWZ0XCJcbiAgICAgIH0sXG4gICAgICB5QXhpczoge1xuICAgICAgICAuLi50LFxuICAgICAgICB0aXRsZToge1xuICAgICAgICAgIHRleHQ6IFwiXCJcbiAgICAgICAgfSxcbiAgICAgICAgbGFiZWxzOiB7XG4gICAgICAgICAgc3R5bGU6IHtcbiAgICAgICAgICAgIGZvbnRGYW1pbHk6IFwiVWJ1bnR1XCIsXG4gICAgICAgICAgICBmb250U3R5bGU6IFwibm9ybWFsXCIsXG4gICAgICAgICAgICBmb250V2VpZ2h0OiAzMDAsXG4gICAgICAgICAgICBmb250U2l6ZTogXCIxMHB4XCIsXG4gICAgICAgICAgICBsaW5lSGVpZ2h0OiBcIjEycHhcIixcbiAgICAgICAgICAgIGNvbG9yOiBcIiM3RjdGN0ZcIixcbiAgICAgICAgICAgIHdpZHRoOiBcIjg1cHhcIixcbiAgICAgICAgICAgIHdoaXRlU3BhY2U6IFwibm9ybWFsXCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIHN0YWdnZXJMaW5lczogMSxcbiAgICAgICAgICB3aWR0aDogNjAsXG4gICAgICAgICAgc3RlcDogMFxuICAgICAgICB9LFxuICAgICAgICB1c2VIVE1MOiAhMCxcbiAgICAgICAgZm9ybWF0dGVyOiBmdW5jdGlvbigpIHtcbiAgICAgICAgICBsZXQgZiA9IHRoaXMudmFsdWUsIE8gPSAhMDtcbiAgICAgICAgICByZXR1cm4gdGhpcy52YWx1ZSA+PSAxZTMgPyAoZiA9IEludGwuTnVtYmVyRm9ybWF0KFwiZW5cIiwgeyBub3RhdGlvbjogXCJjb21wYWN0XCIgfSkuZm9ybWF0KHRoaXMudmFsdWUpLCBPID0gITEpIDogdGhpcy52YWx1ZSA8PSAtMWUzICYmIChmID0gSW50bC5OdW1iZXJGb3JtYXQoXCJlblwiLCB7IG5vdGF0aW9uOiBcImNvbXBhY3RcIiB9KS5mb3JtYXQodGhpcy52YWx1ZSksIE8gPSAhMSksIGA8cCBzdHlsZT1cIm1hcmdpbjogMHB4O2ZvbnQtZmFtaWx5OidVYnVudHUnO2ZvbnQtc3R5bGU6bm9ybWFsO2Rpc3BsYXk6IGJsb2NrO1xuICAgIHdoaXRlLXNwYWNlOiBicmVhay1zcGFjZXM7Zm9udC13ZWlnaHQ6MzAwO2ZvbnQtc2l6ZToxMHB4O2xpbmUtaGVpZ2h0OjEycHg7Y29sb3I6JHtPID8gXCIjMDAwXCIgOiBcIiM3ZjdmN2ZcIn07dGV4dC1hbGlnbjplbmQ7XCI+JHtmfTwvcD5gO1xuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgeEF4aXM6IHtcbiAgICAgICAgLi4uZSxcbiAgICAgICAgY3Jvc3NoYWlyOiB7XG4gICAgICAgICAgY29sb3I6IFwiIzMxMjc4M1wiLFxuICAgICAgICAgIHdpZHRoOiAxLFxuICAgICAgICAgIGRhc2hTdHlsZTogXCJEYXNoXCJcbiAgICAgICAgfSxcbiAgICAgICAgc2hvd0xhc3RMYWJlbDogITAsXG4gICAgICAgIHN0YXJ0T25UaWNrOiAhMSxcbiAgICAgICAgZW5kT25UaWNrOiAhMSxcbiAgICAgICAgdXNlSFRNTDogITAsXG4gICAgICAgIGxhYmVsczoge1xuICAgICAgICAgIHN0eWxlOiB7XG4gICAgICAgICAgICBmb250RmFtaWx5OiBcIlVidW50dVwiLFxuICAgICAgICAgICAgZm9udFN0eWxlOiBcIm5vcm1hbFwiLFxuICAgICAgICAgICAgZm9udFdlaWdodDogMzAwLFxuICAgICAgICAgICAgZm9udFNpemU6IFwiMTBweFwiLFxuICAgICAgICAgICAgbGluZUhlaWdodDogXCIxMnB4XCIsXG4gICAgICAgICAgICBjb2xvcjogXCIjMDAwMDAwXCIsXG4gICAgICAgICAgICB0ZXh0QWxpZ246IFwiY2VudGVyXCIsXG4gICAgICAgICAgICB3aWR0aDogXCI3MHB4XCIsXG4gICAgICAgICAgICB3aGl0ZVNwYWNlOiBcImJyZWFrLXNwYWNlc1wiXG4gICAgICAgICAgfSxcbiAgICAgICAgICAvLyB1c2VIVE1MOiB0cnVlLFxuICAgICAgICAgIHJvdGF0aW9uOiAwLFxuICAgICAgICAgIHN0YWdnZXJMaW5lczogMSxcbiAgICAgICAgICB3aWR0aDogOTAsXG4gICAgICAgICAgdXNlSFRNTDogITAsXG4gICAgICAgICAgc3RlcDogMCxcbiAgICAgICAgICAvLyByZXNlcnZlU3BhY2U6IHRydWUsXG4gICAgICAgICAgLy8gZm9ybWF0dGVyOiBmdW5jdGlvbiAoKSB7Ly91c2UgZm9ybWF0dGVyIHRvIGJyZWFrIHdvcmQuXG4gICAgICAgICAgLy8gICAgIHJldHVybiAnPGRpdiBhbGlnbj1cImNlbnRlclwiIHN0eWxlPVwid29yZC13cmFwOiBicmVhay13b3JkO3dvcmQtYnJlYWs6IGJyZWFrLWFsbDt3aWR0aDo1MHB4XCI+JyArIHRoaXMudmFsdWUgKyAnPC9kaXY+JztcbiAgICAgICAgICAvLyB9XG4gICAgICAgICAgZm9ybWF0dGVyOiBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgIHJldHVybiBgPHAgc3R5bGU9XCJtYXJnaW46IDBweDtmb250LWZhbWlseTonVWJ1bnR1Jztmb250LXN0eWxlOm5vcm1hbDtkaXNwbGF5OiBibG9jaztcbiAgICAgICAgd2hpdGUtc3BhY2U6IGJyZWFrLXNwYWNlcztmb250LXdlaWdodDozMDA7Zm9udC1zaXplOjEwcHg7bGluZS1oZWlnaHQ6MTJweDtjb2xvcjojMDAwO3RleHQtYWxpZ246Y2VudGVyO1wiPiR7dGhpcy52YWx1ZX08L3A+YDtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICBsZWdlbmQ6IHtcbiAgICAgICAgZW5hYmxlZDogITFcbiAgICAgIH0sXG4gICAgICBwbG90T3B0aW9uczoge1xuICAgICAgICBhcmVhOiB7XG4gICAgICAgICAgZmlsbENvbG9yOiB7XG4gICAgICAgICAgICBsaW5lYXJHcmFkaWVudDoge1xuICAgICAgICAgICAgICB4MTogMCxcbiAgICAgICAgICAgICAgeTE6IDAsXG4gICAgICAgICAgICAgIHgyOiAwLFxuICAgICAgICAgICAgICB5MjogMVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHN0b3BzOiBbXG4gICAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICAwLFxuICAgICAgICAgICAgICAgIGAke3IgPT0gbnVsbCA/IHZvaWQgMCA6IHIubWFwKChmKSA9PiBmICE9IG51bGwgJiYgZi5zdGF0dXMgPyAoZiA9PSBudWxsID8gdm9pZCAwIDogZi5zdGF0dXMpID09IFwidXBcIiA/IGAke019YCA6IGAke3V9YCA6IGAke019YCl9YFxuICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgMSxcbiAgICAgICAgICAgICAgICBhLmNvbG9yKFxuICAgICAgICAgICAgICAgICAgYCR7ciA9PSBudWxsID8gdm9pZCAwIDogci5tYXAoKGYpID0+IGYgIT0gbnVsbCAmJiBmLnN0YXR1cyA/IChmID09IG51bGwgPyB2b2lkIDAgOiBmLnN0YXR1cykgPT0gXCJ1cFwiID8gYCR7TX1gIDogYCR7dX1gIDogYCR7TX1gKX1gXG4gICAgICAgICAgICAgICAgKS5zZXRPcGFjaXR5KDApLmdldChcInJnYmFcIilcbiAgICAgICAgICAgICAgXVxuICAgICAgICAgICAgXVxuICAgICAgICAgIH0sXG4gICAgICAgICAgbWFya2VyOiB7XG4gICAgICAgICAgICByYWRpdXM6IDIsXG4gICAgICAgICAgICBlbmFibGVkOiAhMVxuICAgICAgICAgIH0sXG4gICAgICAgICAgbGluZVdpZHRoOiAxLFxuICAgICAgICAgIHN0YXRlczoge1xuICAgICAgICAgICAgaG92ZXI6IHtcbiAgICAgICAgICAgICAgbGluZVdpZHRoOiAxXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSxcbiAgICAgICAgICB0aHJlc2hvbGQ6IG51bGxcbiAgICAgICAgfSxcbiAgICAgICAgc2VyaWVzOiB7XG4gICAgICAgICAgcG9pbnRQbGFjZW1lbnQ6IFwib25cIixcbiAgICAgICAgICBjb2xvcjogYCR7ciA9PSBudWxsID8gdm9pZCAwIDogci5tYXAoKGYpID0+IGYuY29sb3IgPyBmID09IG51bGwgPyB2b2lkIDAgOiBmLmNvbG9yIDogZiAhPSBudWxsICYmIGYuc3RhdHVzID8gKGYgPT0gbnVsbCA/IHZvaWQgMCA6IGYuc3RhdHVzKSA9PSBcInVwXCIgPyBgJHtkfWAgOiBgJHtifWAgOiBgJHtkfWApfWAsXG4gICAgICAgICAgcG9pbnQ6IHtcbiAgICAgICAgICAgIGV2ZW50czoge1xuICAgICAgICAgICAgICBtb3VzZU92ZXI6IGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgICAgIGxldCBmID0gdGhpcztcbiAgICAgICAgICAgICAgICB6Lm9wdGlvbnMgPSBmLCB0aGlzLnNlcmllcy5jaGFydC54QXhpc1swXS5yZW1vdmVQbG90QmFuZChcIndpZGdldC1wbG90LWJhbmRcIiksIHRoaXMuc2VyaWVzLmNoYXJ0LnhBeGlzWzBdLmFkZFBsb3RCYW5kKHtcbiAgICAgICAgICAgICAgICAgIGZyb206IHRoaXMuaW5kZXggLSAwLjUsXG4gICAgICAgICAgICAgICAgICB0bzogdGhpcy5pbmRleCArIDAuNSxcbiAgICAgICAgICAgICAgICAgIGNvbG9yOiBcIiNGN0Y5RkZcIixcbiAgICAgICAgICAgICAgICAgIGlkOiBcIndpZGdldC1wbG90LWJhbmRcIlxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICBtb3VzZU91dDogZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICAgICAgei5vcHRpb25zLnNlcmllcy5jaGFydC54QXhpc1swXS5yZW1vdmVQbG90QmFuZChcbiAgICAgICAgICAgICAgICAgIFwid2lkZ2V0LXBsb3QtYmFuZFwiXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgY29sdW1uOiB7XG4gICAgICAgICAgZ3JvdXBQYWRkaW5nOiAwLFxuICAgICAgICAgIHBvaW50UGFkZGluZzogMFxuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgY3JlZGl0czoge1xuICAgICAgICBlbmFibGVkOiAhMVxuICAgICAgfSxcbiAgICAgIC8vIHRvb2x0aXA6IHtcbiAgICAgIC8vICAgICBjcm9zc2hhaXJzOiBmYWxzZSxcbiAgICAgIC8vICAgICBzaGFyZWQ6IGZhbHNlLFxuICAgICAgLy8gICAgIGVuYWJsZWQ6IGZhbHNlLFxuICAgICAgLy8gfSxcbiAgICAgIHRvb2x0aXA6IHtcbiAgICAgICAgY3Jvc3NoYWlyczogITEsXG4gICAgICAgIGVuYWJsZWQ6ICExLFxuICAgICAgICBvdXRzaWRlOiAhMSxcbiAgICAgICAgYmFja2dyb3VuZENvbG9yOiBcInRyYW5zcGFyZW50XCIsXG4gICAgICAgIGJvcmRlckNvbG9yOiBcInRyYW5zcGFyZW50XCIsXG4gICAgICAgIGJvcmRlclJhZGl1czogMixcbiAgICAgICAgc2hhcmVkOiAhMSxcbiAgICAgICAgdXNlSFRNTDogITEsXG4gICAgICAgIHNuYXA6IDAsXG4gICAgICAgIHNoYWRvdzogITEsXG4gICAgICAgIGZvcm1hdHRlcigpIHtcbiAgICAgICAgICBsZXQgZiA9IGA8Yj4ke3RoaXMueH08L2I+YDtcbiAgICAgICAgICB0aGlzLnBvaW50cy5mb3JFYWNoKFxuICAgICAgICAgICAgLy8gJHtwb2ludC5zZXJpZXMubmFtZX06XG4gICAgICAgICAgICAoaCkgPT4gZiArPSBgPGJyLz4gJHtoLnl9YFxuICAgICAgICAgICk7XG4gICAgICAgICAgbGV0IE8gPSB0aGlzID09IG51bGwgPyB2b2lkIDAgOiB0aGlzLnk7XG4gICAgICAgICAgcmV0dXJuIHRoaXMgIT0gbnVsbCAmJiB0aGlzLnkgJiYgKE8gPSBHRCh0aGlzID09IG51bGwgPyB2b2lkIDAgOiB0aGlzLnkpLCBPID0gUUQoTykpLCBgPGRpdiBjbGFzcz1cImhpZ2hjaGFydC10b29sdGlwLWRhc2hib2FyZFwiID5cbiAgICAgICAgICAgICAgICAgICAgPHRhYmxlIHN0eWxlPVwid2lkdGg6MTkycHg7XCI+XG4gICAgICAgICAgICAgICAgICAgIDx0cj5cbiAgICAgICAgICAgICAgICAgICAgPHAgY2xhc3M9XCJjaGFydC10b29sdGlwLXNlcmllcy1uYW1lXCIgc3R5bGU9XCJtYXJnaW46MHB4O2ZvbnQtZmFtaWx5OiAnVWJ1bnR1Jztmb250LXN0eWxlOiBub3JtYWw7Zm9udC13ZWlnaHQ6IDQwMDtmb250LXNpemU6IDEwcHg7bGluZS1oZWlnaHQ6IDEwcHg7ZGlzcGxheTogZmxleDthbGlnbi1pdGVtczogY2VudGVyO2NvbG9yOiAjMDAwMDAwO1wiPiR7dGhpcy54fTwvcD5cbiAgICAgICAgICAgICAgICAgICAgPC90cj5cbiAgICAgICAgICAgICAgICAgICAgPHRyPjx0ZCBzdHlsZT1cIiB0ZXh0LWFsaWduOiByaWdodDtcIj48cCBjbGFzcz1cImNoYXJ0LXRvb2x0aXAtYnV0dG9uLXYxXCIgc3R5bGU9XCJmb250LWZhbWlseTogJ1VidW50dSc7YmFja2dyb3VuZDogbm9uZTtjb2xvcjonIzAwMDAwMCc7Ym9yZGVyOiBub25lO3BhZGRpbmc6IDA7b3V0bGluZTogaW5oZXJpdDtmb250LXN0eWxlOiBub3JtYWw7Zm9udC1zaXplOiAxMHB4O2xpbmUtaGVpZ2h0OiAxMHB4O2ZvbnQtd2VpZ2h0OiA1MDA7dGV4dC1hbGlnbjpyaWdodDtcIj4ke099PC9wPjwvdGQ+PC90ci8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgPHRhYmxlPjwvZGl2PmA7XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICBzZXJpZXM6IHJcbiAgICB9O1xuICB9LCBbcl0pO1xuICByZXR1cm4gLyogQF9fUFVSRV9fICovIGMoczAsIHsgY2hpbGRyZW46IEEgJiYgcyAmJiAvKiBAX19QVVJFX18gKi8gYyhZWiwgeyBjaGlsZHJlbjogLyogQF9fUFVSRV9fICovIGMoXG4gICAgem8sXG4gICAge1xuICAgICAgaGlnaGNoYXJ0czogYSxcbiAgICAgIGNvbnRhaW5lclByb3BzOiB7IHN0eWxlOiB7IHdpZHRoOiBcIjEwMCVcIiwgaGVpZ2h0OiBcIjEwMCVcIiB9IH0sXG4gICAgICBvcHRpb25zOiBBLFxuICAgICAgcmVmOiBpXG4gICAgfVxuICApIH0pIH0pO1xufSwgcmogPSAoe1xuICB4QXhpczogZSA9IHt9LFxuICB5QXhpczogdCA9IHt9LFxuICBjaGFydDogbyxcbiAgY2hhcnRSZUNvbmZpZ0NhbGxCYWNrOiBuLFxuICBzaXplOiByID0ge30sXG4gIG1pbldpZHRoOiBpLFxuICBzZXJpZXM6IGFcbn0pID0+IHtcbiAgY29uc3QgcyA9IG4wKG51bGwpLCB7IEhpZ2hjaGFydHM6IGwsIGlzUmVuZGVyQ2hhcnQ6IHAsIGRlZmF1bHRTZXR0aW5nOiBkIH0gPSBibygpO1xuICBsZXQgYiA9IHJvKCk7XG4gIFAxKCgpID0+IHtcbiAgICBhID09IG51bGwgfHwgYS5tYXAoKHUsIEEpID0+IHtcbiAgICAgIHN3aXRjaCAoQSArIDEpIHtcbiAgICAgICAgY2FzZSAxOlxuICAgICAgICAgIHJldHVybiB1LmNvbG9yID0gYi5jb2xvcnMuZGF0YVZpc3VhbGl6YXRpb25MZWdlbmQubGVnZW5kQmcxO1xuICAgICAgICBjYXNlIDI6XG4gICAgICAgICAgcmV0dXJuIHUuY29sb3IgPSBiLmNvbG9ycy5kYXRhVmlzdWFsaXphdGlvbkxlZ2VuZC5sZWdlbmRCZzI7XG4gICAgICAgIGNhc2UgMzpcbiAgICAgICAgICByZXR1cm4gdS5jb2xvciA9IGIuY29sb3JzLmRhdGFWaXN1YWxpemF0aW9uTGVnZW5kLmxlZ2VuZEJnMztcbiAgICAgICAgY2FzZSA0OlxuICAgICAgICAgIHJldHVybiB1LmNvbG9yID0gYi5jb2xvcnMuZGF0YVZpc3VhbGl6YXRpb25MZWdlbmQubGVnZW5kQmc0O1xuICAgICAgICBjYXNlIDU6XG4gICAgICAgICAgcmV0dXJuIHUuY29sb3IgPSBiLmNvbG9ycy5kYXRhVmlzdWFsaXphdGlvbkxlZ2VuZC5sZWdlbmRCZzU7XG4gICAgICAgIGNhc2UgNjpcbiAgICAgICAgICByZXR1cm4gdS5jb2xvciA9IGIuY29sb3JzLmRhdGFWaXN1YWxpemF0aW9uTGVnZW5kLmxlZ2VuZEJnNjtcbiAgICAgICAgY2FzZSA3OlxuICAgICAgICAgIHJldHVybiB1LmNvbG9yID0gYi5jb2xvcnMuZGF0YVZpc3VhbGl6YXRpb25MZWdlbmQubGVnZW5kQmc3O1xuICAgICAgICBjYXNlIDg6XG4gICAgICAgICAgcmV0dXJuIHUuY29sb3IgPSBiLmNvbG9ycy5kYXRhVmlzdWFsaXphdGlvbkxlZ2VuZC5sZWdlbmRCZzg7XG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICB9XG4gICAgfSk7XG4gIH0sIFthXSk7XG4gIGNvbnN0IE0gPSBtMCgoKSA9PiB7XG4gICAgdmFyIHosIGY7XG4gICAgY29uc3QgQSA9IHtcbiAgICAgIC4uLnsgLi4uZCB9LFxuICAgICAgZXhwb3J0aW5nOiB7XG4gICAgICAgIGVuYWJsZWQ6ICExXG4gICAgICAgIC8vIGhpZGUgZXhwb3J0aW5nIGJ1dHRvblxuICAgICAgfSxcbiAgICAgIGNoYXJ0OiB7XG4gICAgICAgIHR5cGU6IFwiY29sdW1uXCIsXG4gICAgICAgIHdpZHRoOiBpLFxuICAgICAgICAuLi5yLFxuICAgICAgICAuLi5vLFxuICAgICAgICBzcGFjaW5nQm90dG9tOiAoYSA9PSBudWxsID8gdm9pZCAwIDogYS5sZW5ndGgpID09IDEgPyA0MCA6IDAsXG4gICAgICAgIHNwYWNpbmdUb3A6IDQsXG4gICAgICAgIHNwYWNpbmdMZWZ0OiA0LFxuICAgICAgICBzcGFjaW5nUmlnaHQ6IDQsXG4gICAgICAgIG1hcmdpblRvcDogNDAsXG4gICAgICAgIHNjcm9sbGFibGVQbG90QXJlYToge1xuICAgICAgICAgIG1pbldpZHRoOiBpLFxuICAgICAgICAgIHNjcm9sbFBvc2l0aW9uWDogMVxuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgdGl0bGU6IHtcbiAgICAgICAgdGV4dDogXCJcIlxuICAgICAgfSxcbiAgICAgIHN1YnRpdGxlOiB7XG4gICAgICAgIHRleHQ6IFwiXCJcbiAgICAgIH0sXG4gICAgICB4QXhpczogW1xuICAgICAgICB7XG4gICAgICAgICAgY2F0ZWdvcmllczogZS5jYXRlZ29yaWVzLFxuICAgICAgICAgIGNyb3NzaGFpcjoge1xuICAgICAgICAgICAgY29sb3I6IFwiIzMxMjc4M1wiLFxuICAgICAgICAgICAgd2lkdGg6IDEsXG4gICAgICAgICAgICBkYXNoU3R5bGU6IFwiRGFzaFwiXG4gICAgICAgICAgfSxcbiAgICAgICAgICB1c2VIVE1MOiAhMCxcbiAgICAgICAgICBsYWJlbHM6IHtcbiAgICAgICAgICAgIHN0eWxlOiB7XG4gICAgICAgICAgICAgIGZvbnRGYW1pbHk6IFwiVWJ1bnR1XCIsXG4gICAgICAgICAgICAgIGZvbnRTdHlsZTogXCJub3JtYWxcIixcbiAgICAgICAgICAgICAgZm9udFdlaWdodDogMzAwLFxuICAgICAgICAgICAgICBmb250U2l6ZTogXCIxMHB4XCIsXG4gICAgICAgICAgICAgIGxpbmVIZWlnaHQ6IFwiMTJweFwiLFxuICAgICAgICAgICAgICBjb2xvcjogXCIjMDAwMDAwXCIsXG4gICAgICAgICAgICAgIHRleHRBbGlnbjogXCJjZW50ZXJcIixcbiAgICAgICAgICAgICAgd2lkdGg6IFwiNzBweFwiLFxuICAgICAgICAgICAgICB3aGl0ZVNwYWNlOiBcImJyZWFrLXNwYWNlc1wiXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgLy8gdXNlSFRNTDogdHJ1ZSxcbiAgICAgICAgICAgIHJvdGF0aW9uOiAwLFxuICAgICAgICAgICAgc3RhZ2dlckxpbmVzOiAxLFxuICAgICAgICAgICAgd2lkdGg6IDkwLFxuICAgICAgICAgICAgdXNlSFRNTDogITAsXG4gICAgICAgICAgICBzdGVwOiAwLFxuICAgICAgICAgICAgZm9ybWF0dGVyOiBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgdmFyIHY7XG4gICAgICAgICAgICAgIGxldCBPID0gdGhpcy52YWx1ZSwgaCA9ICEwO1xuICAgICAgICAgICAgICBjb25zdCBnID0gKHYgPSB0aGlzID09IG51bGwgPyB2b2lkIDAgOiB0aGlzLmF4aXMpID09IG51bGwgPyB2b2lkIDAgOiB2LnVzZXJPcHRpb25zLmZpbHRlclR5cGU7XG4gICAgICAgICAgICAgIHJldHVybiB0aGlzLnZhbHVlID49IDFlMyAmJiBnICE9IFwic3RyaW5nXCIgPyAoTyA9IEludGwuTnVtYmVyRm9ybWF0KFwiZW5cIiwge1xuICAgICAgICAgICAgICAgIG5vdGF0aW9uOiBcImNvbXBhY3RcIlxuICAgICAgICAgICAgICB9KS5mb3JtYXQodGhpcy52YWx1ZSksIGggPSAhMSkgOiB0aGlzLnZhbHVlIDw9IC0xZTMgJiYgKE8gPSBJbnRsLk51bWJlckZvcm1hdChcImVuXCIsIHtcbiAgICAgICAgICAgICAgICBub3RhdGlvbjogXCJjb21wYWN0XCJcbiAgICAgICAgICAgICAgfSkuZm9ybWF0KHRoaXMudmFsdWUpLCBoID0gITEpLCBgPHAgc3R5bGU9XCJtYXJnaW46IDBweDtmb250LWZhbWlseTonVWJ1bnR1Jztmb250LXN0eWxlOm5vcm1hbDtkaXNwbGF5OiBibG9jaztcbiAgICAgICAgd2hpdGUtc3BhY2U6IGJyZWFrLXNwYWNlcztmb250LXdlaWdodDozMDA7Zm9udC1zaXplOjEwcHg7bGluZS1oZWlnaHQ6MTJweDtjb2xvcjoke2ggPyBcIiMwMDBcIiA6IFwiIzdmN2Y3ZlwifTt0ZXh0LWFsaWduOmNlbnRlcjtcIj4ke099PC9wPmA7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSxcbiAgICAgICAgICB0aXRsZToge1xuICAgICAgICAgICAgdGV4dEFsaWduOiBcInJpZ2h0XCIsXG4gICAgICAgICAgICByb3RhdGlvbjogMCxcbiAgICAgICAgICAgIHg6IC01MCxcbiAgICAgICAgICAgIHRleHQ6ICh6ID0gZS50aXRsZSkgPT0gbnVsbCA/IHZvaWQgMCA6IHoudGV4dCxcbiAgICAgICAgICAgIGFsaWduOiBcImhpZ2hcIixcbiAgICAgICAgICAgIHk6IC0xMCxcbiAgICAgICAgICAgIG9mZnNldDogLTUwLFxuICAgICAgICAgICAgc3R5bGU6IHtcbiAgICAgICAgICAgICAgY29sb3I6IGAke2IuY29sb3JzLnRleHRJY29uLnRleHRMb3dlbXBoYXNpc31gLFxuICAgICAgICAgICAgICBmb250RmFtaWx5OiBcIlVidW50dVwiLFxuICAgICAgICAgICAgICBmb250U3R5bGU6IFwibm9ybWFsXCIsXG4gICAgICAgICAgICAgIGZvbnRXZWlnaHQ6IFwiNDAwXCIsXG4gICAgICAgICAgICAgIGZvbnRTaXplOiBcIjEwcHhcIixcbiAgICAgICAgICAgICAgbGluZUhlaWdodDogXCIxNHB4XCIsXG4gICAgICAgICAgICAgIG1hcmdpbkJvdHRvbTogXCI0MHB4XCJcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9LFxuICAgICAgICAgIGdyaWRMaW5lV2lkdGg6IDAsXG4gICAgICAgICAgdGlja0ludGVydmFsOiAwLFxuICAgICAgICAgIGxpbmVXaWR0aDogMCxcbiAgICAgICAgICAuLi5lXG4gICAgICAgIH1cbiAgICAgIF0sXG4gICAgICB5QXhpczogW1xuICAgICAgICB7XG4gICAgICAgICAgLi4udCxcbiAgICAgICAgICBjYXRlZ29yaWVzOiB0LmNhdGVnb3JpZXMsXG4gICAgICAgICAgbGluZVdpZHRoOiAwLFxuICAgICAgICAgIGdyaWRMaW5lV2lkdGg6IDEsXG4gICAgICAgICAgdXNlSFRNTDogITAsXG4gICAgICAgICAgbGFiZWxzOiB7XG4gICAgICAgICAgICBlbmFibGVkOiAhMCxcbiAgICAgICAgICAgIGZvcm1hdHRlcjogZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICAgIGxldCBPID0gdGhpcy52YWx1ZSwgaCA9ICEwO1xuICAgICAgICAgICAgICByZXR1cm4gdGhpcy52YWx1ZSA+PSAxZTMgPyAoTyA9IEludGwuTnVtYmVyRm9ybWF0KFwiZW5cIiwge1xuICAgICAgICAgICAgICAgIG5vdGF0aW9uOiBcImNvbXBhY3RcIlxuICAgICAgICAgICAgICB9KS5mb3JtYXQodGhpcy52YWx1ZSksIGggPSAhMSkgOiB0aGlzLnZhbHVlIDw9IC0xZTMgJiYgKE8gPSBJbnRsLk51bWJlckZvcm1hdChcImVuXCIsIHtcbiAgICAgICAgICAgICAgICBub3RhdGlvbjogXCJjb21wYWN0XCJcbiAgICAgICAgICAgICAgfSkuZm9ybWF0KHRoaXMudmFsdWUpLCBoID0gITEpLCBgPHAgc3R5bGU9XCJtYXJnaW46IDBweDtmb250LWZhbWlseTonVWJ1bnR1Jztmb250LXN0eWxlOm5vcm1hbDtkaXNwbGF5OiBibG9jaztcbiAgICAgICAgd2hpdGUtc3BhY2U6IGJyZWFrLXNwYWNlcztmb250LXdlaWdodDozMDA7Zm9udC1zaXplOjEwcHg7bGluZS1oZWlnaHQ6MTJweDtjb2xvcjoke2ggPyBcIiMwMDBcIiA6IFwiIzdmN2Y3ZlwifTt0ZXh0LWFsaWduOmVuZDtcIj4ke099PC9wPmA7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSxcbiAgICAgICAgICB0aXRsZToge1xuICAgICAgICAgICAgdGV4dEFsaWduOiBcInJpZ2h0XCIsXG4gICAgICAgICAgICByb3RhdGlvbjogMCxcbiAgICAgICAgICAgIHg6IC01MCxcbiAgICAgICAgICAgIHRleHQ6IChmID0gdC50aXRsZSkgPT0gbnVsbCA/IHZvaWQgMCA6IGYudGV4dCxcbiAgICAgICAgICAgIGFsaWduOiBcImhpZ2hcIixcbiAgICAgICAgICAgIHk6IC0xMCxcbiAgICAgICAgICAgIG9mZnNldDogLTUwLFxuICAgICAgICAgICAgc3R5bGU6IHtcbiAgICAgICAgICAgICAgY29sb3I6IGAke2IuY29sb3JzLnRleHRJY29uLnRleHRMb3dlbXBoYXNpc31gLFxuICAgICAgICAgICAgICBmb250RmFtaWx5OiBcIlVidW50dVwiLFxuICAgICAgICAgICAgICBmb250U3R5bGU6IFwibm9ybWFsXCIsXG4gICAgICAgICAgICAgIGZvbnRXZWlnaHQ6IFwiNDAwXCIsXG4gICAgICAgICAgICAgIGZvbnRTaXplOiBcIjEwcHhcIixcbiAgICAgICAgICAgICAgbGluZUhlaWdodDogXCIxNHB4XCIsXG4gICAgICAgICAgICAgIG1hcmdpbkJvdHRvbTogXCI0MHB4XCJcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBtaW46IDAsXG4gICAgICAgICAgbGFiZWxzOiB7XG4gICAgICAgICAgICBlbmFibGVkOiAhMFxuICAgICAgICAgIH0sXG4gICAgICAgICAgdmlzaWJsZTogITEsXG4gICAgICAgICAgb3Bwb3NpdGU6ICEwLFxuICAgICAgICAgIHVzZUhUTUw6ICEwLFxuICAgICAgICAgIHRpdGxlOiB7XG4gICAgICAgICAgICBhbGlnbjogXCJoaWdoXCIsXG4gICAgICAgICAgICB0ZXh0OiBcIlwiLFxuICAgICAgICAgICAgLy8gdGV4dEFsaWduOiBcImNlbnRlclwiLFxuICAgICAgICAgICAgcm90YXRpb246IDAsXG4gICAgICAgICAgICB5OiAtMTIsXG4gICAgICAgICAgICAvLyB4OiAyMCxcbiAgICAgICAgICAgIG9mZnNldDogMTYsXG4gICAgICAgICAgICBzdHlsZToge1xuICAgICAgICAgICAgICBjb2xvcjogXCIjN0Y3RjdGXCIsXG4gICAgICAgICAgICAgIGZvbnRGYW1pbHk6IFwiVWJ1bnR1XCIsXG4gICAgICAgICAgICAgIGZvbnRTdHlsZTogXCJub3JtYWxcIixcbiAgICAgICAgICAgICAgZm9udFdlaWdodDogXCI0MDBcIixcbiAgICAgICAgICAgICAgZm9udFNpemU6IFwiMTBweFwiLFxuICAgICAgICAgICAgICBsaW5lSGVpZ2h0OiBcIjEycHhcIlxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgXSxcbiAgICAgIHRvb2x0aXA6IHtcbiAgICAgICAgdXNlSFRNTDogITAsXG4gICAgICAgIGJhY2tncm91bmRDb2xvcjogXCJ0cmFuc3BhcmVudFwiLFxuICAgICAgICBib3JkZXJDb2xvcjogXCJ0cmFuc3BhcmVudFwiLFxuICAgICAgICBzaGFkb3c6ICExLFxuICAgICAgICBwYWRkaW5nOiAwLFxuICAgICAgICBzaGFyZWQ6ICEwLFxuICAgICAgICBmb3JtYXR0ZXI6IGZ1bmN0aW9uKCkge1xuICAgICAgICAgIGNvbnN0IE8gPSB0aGlzLnBvaW50cztcbiAgICAgICAgICBsZXQgaCA9IFwiXCI7XG4gICAgICAgICAgcmV0dXJuIE8uZm9yRWFjaChmdW5jdGlvbihnKSB7XG4gICAgICAgICAgICB2YXIgTCwgeTtcbiAgICAgICAgICAgIGxldCB2ID0gZy5wb2ludC5wbG90WCAtIDQwMCA+ICgoeSA9IChMID0gZy5zZXJpZXMpID09IG51bGwgPyB2b2lkIDAgOiBMLmNoYXJ0KSA9PSBudWxsID8gdm9pZCAwIDogeS5wbG90TGVmdCk7XG4gICAgICAgICAgICBoICs9IGBcbiAgICAgICAgICAgIFxuICAgICAgICAgICAgPHN0eWxlPlxuICAgICAgICAgICAgICAuZHZ0b29sdGlwQ29udGFpbmVye1xuICAgICAgICAgICAgICAgIG1heC13aWR0aDogMTQzcHg7XG4gICAgICAgICAgICAgICAgbWluLXdpZHRoOiAxNDNweDtcbiAgICAgICAgICAgICAgICBoZWlnaHQ6IGF1dG87XG4gICAgICAgICAgICAgICAgYm9yZGVyOjFweCBzb2xpZCAke2IuY29sb3JzLmJvcmRlci5ib3JkZXJUZXJ0aWFyeX07XG4gICAgICAgICAgICAgICAgYm9yZGVyLXJhZGl1czogNHB4O1xuICAgICAgICAgICAgICAgIGJhY2tncm91bmQtY29sb3I6ICR7Yi5jb2xvcnMuYmFja2dyb3VuZHMuYmdQcmltYXJ5fTtcbiAgICAgICAgICAgICAgICBib3gtc2hhZG93OiAwcHggNHB4IDhweCAwcHggcmdiYSg0OSwgMzksIDEzMSwgMC4wNSk7XG4gICAgICAgICAgICAgICAgYm9yZGVyLXJhZGl1czogNHB4O1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIC5kdnRvb2x0aXBDb250YWluZXI6YWZ0ZXJ7XG4gICAgICAgICAgICAgICAgcG9zaXRpb246YWJzb2x1dGU7XG4gICAgICAgICAgICAgICAgd2lkdGg6MTdweDtcbiAgICAgICAgICAgICAgICBoZWlnaHQ6MTdweDtcbiAgICAgICAgICAgICAgICBib3JkZXItdG9wOiAke3YgIT0gITAgPyBgMHB4IHNvbGlkICR7Yi5jb2xvcnMuYm9yZGVyLmJvcmRlclRlcnRpYXJ5fWAgOiBgMXB4IHNvbGlkICR7Yi5jb2xvcnMuYm9yZGVyLmJvcmRlclRlcnRpYXJ5fWB9O1xuICAgICAgICAgICAgICAgIGJvcmRlci1yaWdodDogJHt2ICE9ICEwID8gXCIxcHggc29saWQgdHJhbnNwYXJlbnRcIiA6IGAwcHggc29saWQgJHtiLmNvbG9ycy5ib3JkZXIuYm9yZGVyVGVydGlhcnl9YH07XG4gICAgICAgICAgICAgICAgYm9yZGVyLWJvdHRvbTogJHt2ICE9ICEwID8gXCIxcHggc29saWQgdHJhbnNwYXJlbnRcIiA6IGAwcHggc29saWQgJHtiLmNvbG9ycy5ib3JkZXIuYm9yZGVyVGVydGlhcnl9YH07XG4gICAgICAgICAgICAgICAgYm9yZGVyLWxlZnQ6ICR7diAhPSAhMCA/IGAwcHggc29saWQgJHtiLmNvbG9ycy5ib3JkZXIuYm9yZGVyVGVydGlhcnl9YCA6IGAxcHggc29saWQgJHtiLmNvbG9ycy5ib3JkZXIuYm9yZGVyVGVydGlhcnl9YH07XG4gICAgICAgICAgICAgICAgdG9wOjEwNiU7XG4gICAgICAgICAgICAgICAgbGVmdDoke3YgIT0gITAgPyBcIjQ3JVwiIDogXCIxNDUlXCJ9O1xuICAgICAgICAgICAgICAgIG1hcmdpbi1sZWZ0Oi04MXB4O1xuICAgICAgICAgICAgICAgIGNvbnRlbnQ6XCJcIjtcbiAgICAgICAgICAgICAgICB0cmFuc2Zvcm06IHJvdGF0ZSgxMzVkZWcpO1xuICAgICAgICAgICAgICAgIG1hcmdpbi10b3A6LTM1cHg7XG4gICAgICAgICAgICAgICAgYmFja2dyb3VuZDoke2IuY29sb3JzLmJhY2tncm91bmRzLmJnUHJpbWFyeX07XG5cbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgXG4gICAgICAgICAgXG4gICAgICAgICAgIDwvc3R5bGU+IFxuICAgICAgICAgICAgPGRpdiA+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZHZ0b29sdGlwSGVhZFwiPiR7Zy54fTwvZGl2PlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImR2dG9vbHRpcGNvbnRlbnRcIj5cbiAgICAgICAgICAgICAgPHNwYW5cbiAgICAgICAgICAgICAgICBzdHlsZT1cImZpbGw6ICR7Zy5jb2xvcn07Y29sb3I6ICR7Zy5jb2xvcn07XCJcbiAgICAgICAgICAgICAgICBjbGFzcz1cImR2dG9vbHRpcExlZ2VuZFwiXG4gICAgICAgICAgICAgID7il49cbiAgICAgICAgICAgICAgPC9zcGFuPiBcbiAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJkdlNlcmllc05hbWVcIj4ke2cuc2VyaWVzLm5hbWV9PC9zcGFuPlxuICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJkdnRvb2x0aXB5QXhpc1ZhbHVlXCI+JHtnLnl9PC9zcGFuPlxuICAgICAgICAgICAgXG4gICAgICAgICAgICAgIFxuICAgICAgICAgICAgICBcbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvZGl2PmA7XG4gICAgICAgICAgfSksIGBcbiAgPGRpdiBzdHlsZT1cIlxuICBwYWRkaW5nOiAwLjVyZW07XG4gIGxpbmUtaGVpZ2h0OiAxOHB4O1wiXG4gIGNsYXNzPVwiZHZ0b29sdGlwQ29udGFpbmVyXCJcbiAgPlxuICAke2h9XG4gIDwvZGl2PmA7XG4gICAgICAgIH0sXG4gICAgICAgIHBvc2l0aW9uZXI6IGZ1bmN0aW9uKE8sIGgsIGcpIHtcbiAgICAgICAgICByZXR1cm4gY29uc29sZS5sb2coXCJ0b29sdGlwUG9zaXRpb25cIiwgTywgaCksIGcucGxvdFggLSA0MDAgPiB0aGlzLmNoYXJ0LnBsb3RMZWZ0ID8geyB4OiBnLnBsb3RYIC0gMTU1LCB5OiBnLnBsb3RZICsgMjUgfSA6IHsgeDogZy5wbG90WCArIDY1LCB5OiBnLnBsb3RZICsgMjUgfTtcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIHBsb3RPcHRpb25zOiB7XG4gICAgICAgIGNvbHVtbjoge1xuICAgICAgICAgIHBvaW50UGFkZGluZzogMC4wNVxuICAgICAgICAgIC8vICAgICBib3JkZXJXaWR0aDogMFxuICAgICAgICB9LFxuICAgICAgICAvLyBzZXJpZXM6IHtcbiAgICAgICAgLy8gICAgIGJvcmRlclJhZGl1c1RvcExlZnQ6IDgsXG4gICAgICAgIC8vICAgICBib3JkZXJSYWRpdXNUb3BSaWdodDogOFxuICAgICAgICAvLyB9XG4gICAgICAgIHNlcmllczoge1xuICAgICAgICAgIC8vIHBvaW50UGFkZGluZzogMCwgLy8gQWRqdXN0IHRoaXMgdmFsdWUgdG8gYWRkIHNwYWNlIGJldHdlZW4gaW5kaXZpZHVhbCBjb2x1bW5zXG4gICAgICAgICAgZ3JvdXBQYWRkaW5nOiAwLjI5LFxuICAgICAgICAgIC8vIEFkanVzdCB0aGlzIHZhbHVlIHRvIGFkZCBzcGFjZSBiZXR3ZWVuIGdyb3VwcyBvZiBjb2x1bW5zXG4gICAgICAgICAgLy8gcG9pbnRXaWR0aDogc2VyaWVzPy5sZW5ndGggPT0gMSA/IDMyIDogMjQsXG4gICAgICAgICAgLy8gcG9pbnRQYWRkaW5nOiAwLjEsXG4gICAgICAgICAgLy8gZ3JvdXBQYWRkaW5nOiAwLjIsXG4gICAgICAgICAgYm9yZGVyV2lkdGg6IDAsXG4gICAgICAgICAgYm9yZGVyUmFkaXVzVG9wTGVmdDogXCIxMCVcIixcbiAgICAgICAgICBib3JkZXJSYWRpdXNUb3BSaWdodDogXCIxMCVcIixcbiAgICAgICAgICBtYXJrZXI6IHtcbiAgICAgICAgICAgIGxpbmVDb2xvcjogbnVsbCxcbiAgICAgICAgICAgIHN0YXRlczoge1xuICAgICAgICAgICAgICBob3Zlcjoge1xuICAgICAgICAgICAgICAgIHJhZGl1czogOCxcbiAgICAgICAgICAgICAgICByYWRpdXNQbHVzOiAxNixcbiAgICAgICAgICAgICAgICBsaW5lQ29sb3I6IFwiI2ZmZlwiXG4gICAgICAgICAgICAgICAgLy8gbGluZVdpZHRoOiA0XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICBsZWdlbmQ6IHtcbiAgICAgICAgaXRlbURpc3RhbmNlOiA0LFxuICAgICAgICBsYXlvdXQ6IFwiaG9yaXpvbnRhbFwiLFxuICAgICAgICBhbGlnbjogXCJjZW50ZXJcIixcbiAgICAgICAgdmVydGljYWxBbGlnbjogXCJib3R0b21cIixcbiAgICAgICAgYmFja2dyb3VuZENvbG9yOiBcIiNGRkZGRkZcIixcbiAgICAgICAgc2hhZG93OiAhMSxcbiAgICAgICAgZmxvYXRpbmc6ICExLFxuICAgICAgICB1c2VIVE1MOiAhMCxcbiAgICAgICAgc3ltYm9sUGFkZGluZzogMCxcbiAgICAgICAgc3ltYm9sV2lkdGg6IDAuMSxcbiAgICAgICAgc3ltYm9sSGVpZ2h0OiAwLjEsXG4gICAgICAgIHN5bWJvbFJhZGl1czogMCxcbiAgICAgICAgbWF4SGVpZ2h0OiAxNyxcbiAgICAgICAgbGFiZWxGb3JtYXR0ZXI6IGZ1bmN0aW9uKCkge1xuICAgICAgICAgIHJldHVybiBgPGRpdiBzdHlsZT1cImRpc3BsYXk6IGZsZXg7aGVpZ2h0OjIwcHg7ZmxleC1kaXJlY3Rpb246IHJvdzthbGlnbi1pdGVtczogY2VudGVyO2p1c3RpZnktY29udGVudDogY2VudGVyO1wiPjxzcGFuPjxkaXYgc3R5bGU9XCJtYXJnaW4tcmlnaHQ6OHB4O3dpZHRoOiA4cHg7aGVpZ2h0OiA4cHg7YmFja2dyb3VuZDogI2ZmZjtib3JkZXItcmFkaXVzOiAxMDAlO2Rpc3BsYXk6IGZsZXg7YWxpZ24taXRlbXM6IGNlbnRlcjtqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtib3gtc2hhZG93OiAwcHggMXB4IDRweCAwcHggIzMxMjc4MzFDO2JveC1zaGFkb3c6IDBweCAxcHggNHB4IHJnYmEoNDksIDM5LCAxMzEsIDAuMTEpO1wiPjxkaXYgc3R5bGU9XCJiYWNrZ3JvdW5kLWNvbG9yOiAke3RoaXMuY29sb3J9O3dpZHRoOiA2cHg7aGVpZ2h0OiA2cHg7Ym9yZGVyLXJhZGl1czogMTAwJTtcIj48L2Rpdj48L2Rpdj48L3NwYW4+PHAgc3R5bGU9XCJmb250LWZhbWlseTogJ1VidW50dSc7Zm9udC1zdHlsZTogbm9ybWFsO2ZvbnQtd2VpZ2h0OiAzMDA7bWFyZ2luOjBweDtmb250LXNpemU6IDEwcHg7bGluZS1oZWlnaHQ6IDIwcHg7XCI+JHt0aGlzLm5hbWV9PC9wPjwvZGl2PmA7XG4gICAgICAgIH0sXG4gICAgICAgIG5hdmlnYXRpb246IHtcbiAgICAgICAgICBlbmFibGVkOiAhMVxuICAgICAgICB9LFxuICAgICAgICBlbmFibGVkOiBhLmxlbmd0aCA+IDFcbiAgICAgIH0sXG4gICAgICBzZXJpZXM6IGEsXG4gICAgICBjcmVkaXRzOiB7XG4gICAgICAgIGVuYWJsZWQ6ICExXG4gICAgICB9XG4gICAgfTtcbiAgICByZXR1cm4gbiA/IG4oQSkgOiBBO1xuICB9LCBbYV0pO1xuICByZXR1cm4gLyogQF9fUFVSRV9fICovIGMoczAsIHsgY2hpbGRyZW46IE0gJiYgcCAmJiAvKiBAX19QVVJFX18gKi8gYyhncywgeyBjaGlsZHJlbjogLyogQF9fUFVSRV9fICovIGMoXG4gICAgem8sXG4gICAge1xuICAgICAgaGlnaGNoYXJ0czogbCxcbiAgICAgIGNvbnRhaW5lclByb3BzOiB7XG4gICAgICAgIHN0eWxlOiB7XG4gICAgICAgICAgd2lkdGg6IFwiMTAwJVwiLFxuICAgICAgICAgIGhlaWdodDogXCIxMDAlXCJcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIG9wdGlvbnM6IE0sXG4gICAgICByZWY6IHNcbiAgICB9XG4gICkgfSkgfSk7XG59LCBuaiA9ICh7XG4gIHhBeGlzOiBlID0ge30sXG4gIHlBeGlzOiB0ID0ge30sXG4gIGNoYXJ0OiBvLFxuICBzaXplOiBuID0ge30sXG4gIHNlcmllczogclxufSkgPT4ge1xuICBjb25zdCBpID0gbjAobnVsbCksIHsgSGlnaGNoYXJ0czogYSwgaXNSZW5kZXJDaGFydDogcywgZGVmYXVsdFNldHRpbmc6IGwgfSA9IGJvKCk7XG4gIGxldCBwID0gcm8oKTtcbiAgUDEoKCkgPT4ge1xuICAgIHIgPT0gbnVsbCB8fCByLm1hcCgodSwgQSkgPT4ge1xuICAgICAgc3dpdGNoIChBICsgMSkge1xuICAgICAgICBjYXNlIDE6XG4gICAgICAgICAgbGV0IHogPSB7XG4gICAgICAgICAgICBzdGF0ZXM6IHtcbiAgICAgICAgICAgICAgaG92ZXI6IHtcbiAgICAgICAgICAgICAgICBmaWxsQ29sb3I6IGAke3AuY29sb3JzLmRhdGFWaXN1YWxpemF0aW9uTGVnZW5kLmxlZ2VuZEJnMX1gXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9O1xuICAgICAgICAgIHJldHVybiB1LmNvbG9yID0gcC5jb2xvcnMuZGF0YVZpc3VhbGl6YXRpb25MZWdlbmQubGVnZW5kQmcxLCB1Lm1hcmtlciA9IHo7XG4gICAgICAgIGNhc2UgMjpcbiAgICAgICAgICBsZXQgZiA9IHtcbiAgICAgICAgICAgIHN0YXRlczoge1xuICAgICAgICAgICAgICBob3Zlcjoge1xuICAgICAgICAgICAgICAgIGZpbGxDb2xvcjogYCR7cC5jb2xvcnMuZGF0YVZpc3VhbGl6YXRpb25MZWdlbmQubGVnZW5kQmcyfWBcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH07XG4gICAgICAgICAgcmV0dXJuIHUuY29sb3IgPSBwLmNvbG9ycy5kYXRhVmlzdWFsaXphdGlvbkxlZ2VuZC5sZWdlbmRCZzIsIHUubWFya2VyID0gZjtcbiAgICAgICAgY2FzZSAzOlxuICAgICAgICAgIGxldCBPID0ge1xuICAgICAgICAgICAgc3RhdGVzOiB7XG4gICAgICAgICAgICAgIGhvdmVyOiB7XG4gICAgICAgICAgICAgICAgZmlsbENvbG9yOiBgJHtwLmNvbG9ycy5kYXRhVmlzdWFsaXphdGlvbkxlZ2VuZC5sZWdlbmRCZzN9YFxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfTtcbiAgICAgICAgICByZXR1cm4gdS5jb2xvciA9IHAuY29sb3JzLmRhdGFWaXN1YWxpemF0aW9uTGVnZW5kLmxlZ2VuZEJnMywgdS5tYXJrZXIgPSBPO1xuICAgICAgICBjYXNlIDQ6XG4gICAgICAgICAgbGV0IGggPSB7XG4gICAgICAgICAgICBzdGF0ZXM6IHtcbiAgICAgICAgICAgICAgaG92ZXI6IHtcbiAgICAgICAgICAgICAgICBmaWxsQ29sb3I6IGAke3AuY29sb3JzLmRhdGFWaXN1YWxpemF0aW9uTGVnZW5kLmxlZ2VuZEJnNH1gXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9O1xuICAgICAgICAgIHJldHVybiB1LmNvbG9yID0gcC5jb2xvcnMuZGF0YVZpc3VhbGl6YXRpb25MZWdlbmQubGVnZW5kQmc0LCB1Lm1hcmtlciA9IGg7XG4gICAgICAgIGNhc2UgNTpcbiAgICAgICAgICBsZXQgZyA9IHtcbiAgICAgICAgICAgIHN0YXRlczoge1xuICAgICAgICAgICAgICBob3Zlcjoge1xuICAgICAgICAgICAgICAgIGZpbGxDb2xvcjogYCR7cC5jb2xvcnMuZGF0YVZpc3VhbGl6YXRpb25MZWdlbmQubGVnZW5kQmc1fWBcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH07XG4gICAgICAgICAgcmV0dXJuIHUuY29sb3IgPSBwLmNvbG9ycy5kYXRhVmlzdWFsaXphdGlvbkxlZ2VuZC5sZWdlbmRCZzUsIHUubWFya2VyID0gZztcbiAgICAgICAgY2FzZSA2OlxuICAgICAgICAgIGxldCB2ID0ge1xuICAgICAgICAgICAgc3RhdGVzOiB7XG4gICAgICAgICAgICAgIGhvdmVyOiB7XG4gICAgICAgICAgICAgICAgZmlsbENvbG9yOiBgJHtwLmNvbG9ycy5kYXRhVmlzdWFsaXphdGlvbkxlZ2VuZC5sZWdlbmRCZzZ9YFxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfTtcbiAgICAgICAgICByZXR1cm4gdS5jb2xvciA9IHAuY29sb3JzLmRhdGFWaXN1YWxpemF0aW9uTGVnZW5kLmxlZ2VuZEJnNiwgdS5tYXJrZXIgPSB2O1xuICAgICAgICBjYXNlIDc6XG4gICAgICAgICAgbGV0IEwgPSB7XG4gICAgICAgICAgICBzdGF0ZXM6IHtcbiAgICAgICAgICAgICAgaG92ZXI6IHtcbiAgICAgICAgICAgICAgICBmaWxsQ29sb3I6IGAke3AuY29sb3JzLmRhdGFWaXN1YWxpemF0aW9uTGVnZW5kLmxlZ2VuZEJnN31gXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9O1xuICAgICAgICAgIHJldHVybiB1LmNvbG9yID0gcC5jb2xvcnMuZGF0YVZpc3VhbGl6YXRpb25MZWdlbmQubGVnZW5kQmc3LCB1Lm1hcmtlciA9IEw7XG4gICAgICAgIGNhc2UgODpcbiAgICAgICAgICBsZXQgeSA9IHtcbiAgICAgICAgICAgIHN0YXRlczoge1xuICAgICAgICAgICAgICBob3Zlcjoge1xuICAgICAgICAgICAgICAgIGZpbGxDb2xvcjogYCR7cC5jb2xvcnMuZGF0YVZpc3VhbGl6YXRpb25MZWdlbmQubGVnZW5kQmc4fWBcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH07XG4gICAgICAgICAgcmV0dXJuIHUuY29sb3IgPSBwLmNvbG9ycy5kYXRhVmlzdWFsaXphdGlvbkxlZ2VuZC5sZWdlbmRCZzgsIHUubWFya2VyID0geTtcbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIH1cbiAgICB9KTtcbiAgfSwgW3JdKTtcbiAgY29uc3QgZCA9IG0wKCgpID0+IHtcbiAgICB2YXIgeiwgZjtcbiAgICByZXR1cm4ge1xuICAgICAgLi4ueyAuLi5sIH0sXG4gICAgICBleHBvcnRpbmc6IHtcbiAgICAgICAgZW5hYmxlZDogITFcbiAgICAgICAgLy8gaGlkZSBleHBvcnRpbmcgYnV0dG9uXG4gICAgICB9LFxuICAgICAgY2hhcnQ6IHtcbiAgICAgICAgdHlwZTogXCJidWJibGVcIixcbiAgICAgICAgLy8gem9vbVR5cGU6ICd4eScsXG4gICAgICAgIHBhbm5pbmc6ICEwLFxuICAgICAgICBwYW5LZXk6IFwic2hpZnRcIixcbiAgICAgICAgLy8gUHJlc3Npbmcgc2hpZnQga2V5IGVuYWJsZXMgcGFubmluZ1xuICAgICAgICAuLi5uLFxuICAgICAgICAuLi5vLFxuICAgICAgICBzcGFjaW5nQm90dG9tOiAwLFxuICAgICAgICBzcGFjaW5nVG9wOiA0LFxuICAgICAgICBzcGFjaW5nTGVmdDogNCxcbiAgICAgICAgc3BhY2luZ1JpZ2h0OiA0LFxuICAgICAgICBtYXJnaW5Ub3A6IDQwLFxuICAgICAgICBzY3JvbGxhYmxlUGxvdEFyZWE6IHtcbiAgICAgICAgICAvLyAgIG1pbldpZHRoOiBtaW5XaWR0aCxcbiAgICAgICAgICBzY3JvbGxQb3NpdGlvblg6IDFcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIHRpdGxlOiB7XG4gICAgICAgIHRleHQ6IFwiXCJcbiAgICAgIH0sXG4gICAgICBzdWJ0aXRsZToge1xuICAgICAgICB0ZXh0OiBcIlwiXG4gICAgICB9LFxuICAgICAgbGVnZW5kOiB7XG4gICAgICAgIGxheW91dDogXCJob3Jpem9udGFsXCIsXG4gICAgICAgIGFsaWduOiBcImNlbnRlclwiLFxuICAgICAgICB2ZXJ0aWNhbEFsaWduOiBcImJvdHRvbVwiLFxuICAgICAgICBiYWNrZ3JvdW5kQ29sb3I6IFwiI0ZGRkZGRlwiLFxuICAgICAgICBzaGFkb3c6ICExLFxuICAgICAgICBmbG9hdGluZzogITEsXG4gICAgICAgIHVzZUhUTUw6ICEwLFxuICAgICAgICBzeW1ib2xQYWRkaW5nOiAwLFxuICAgICAgICBzeW1ib2xXaWR0aDogMC4xLFxuICAgICAgICBzeW1ib2xIZWlnaHQ6IDAuMSxcbiAgICAgICAgc3ltYm9sUmFkaXVzOiAwLFxuICAgICAgICBtYXhIZWlnaHQ6IDE3LFxuICAgICAgICBsYWJlbEZvcm1hdHRlcjogZnVuY3Rpb24oKSB7XG4gICAgICAgICAgcmV0dXJuIGA8ZGl2IHN0eWxlPVwiZGlzcGxheTogZmxleDtoZWlnaHQ6MjBweDtmbGV4LWRpcmVjdGlvbjogcm93O2FsaWduLWl0ZW1zOiBjZW50ZXI7anVzdGlmeS1jb250ZW50OiBjZW50ZXI7XCI+PHNwYW4+XG4gICAgICAgICAgPGRpdiBzdHlsZT1cIm1hcmdpbi1yaWdodDo4cHg7d2lkdGg6IDhweDtoZWlnaHQ6IDhweDtiYWNrZ3JvdW5kOiAjZmZmO2JvcmRlci1yYWRpdXM6IDEwMCU7ZGlzcGxheTogZmxleDthbGlnbi1pdGVtczogY2VudGVyO2p1c3RpZnktY29udGVudDogY2VudGVyO2JveC1zaGFkb3c6IDBweCAxcHggNHB4IDBweCAjMzEyNzgzMUM7Ym94LXNoYWRvdzogMHB4IDFweCA0cHggcmdiYSg0OSwgMzksIDEzMSwgMC4xMSk7XCI+PGRpdiBzdHlsZT1cImJhY2tncm91bmQtY29sb3I6ICR7dGhpcy5jb2xvcn07d2lkdGg6IDZweDtoZWlnaHQ6IDZweDtib3JkZXItcmFkaXVzOiAxMDAlO1wiPjwvZGl2PjwvZGl2Pjwvc3Bhbj48cCBzdHlsZT1cImZvbnQtZmFtaWx5OiAnVWJ1bnR1Jztmb250LXN0eWxlOiBub3JtYWw7Zm9udC13ZWlnaHQ6IDMwMDttYXJnaW46MHB4O2ZvbnQtc2l6ZTogMTBweDtsaW5lLWhlaWdodDogMjBweDtcIj4ke3RoaXMubmFtZX08L3A+PC9kaXY+YDtcbiAgICAgICAgfSxcbiAgICAgICAgbmF2aWdhdGlvbjoge1xuICAgICAgICAgIGVuYWJsZWQ6ICExXG4gICAgICAgIH0sXG4gICAgICAgIC8vIGVuYWJsZWQ6IHNlcmllcy5sZW5ndGggPiAxID8gdHJ1ZSA6IGZhbHNlLFxuICAgICAgICBlbmFibGVkOiAhMVxuICAgICAgfSxcbiAgICAgIHhBeGlzOiBbXG4gICAgICAgIHtcbiAgICAgICAgICAuLi5lLFxuICAgICAgICAgIG1pbjogNTAsXG4gICAgICAgICAgbWF4OiA0MDAsXG4gICAgICAgICAgbGluZVdpZHRoOiAwLFxuICAgICAgICAgIGdyaWRMaW5lV2lkdGg6IDEsXG4gICAgICAgICAgdXNlSFRNTDogITAsXG4gICAgICAgICAgbGFiZWxzOiB7XG4gICAgICAgICAgICBzdHlsZToge1xuICAgICAgICAgICAgICBmb250RmFtaWx5OiBcIlVidW50dVwiLFxuICAgICAgICAgICAgICBmb250U3R5bGU6IFwibm9ybWFsXCIsXG4gICAgICAgICAgICAgIGZvbnRXZWlnaHQ6IDMwMCxcbiAgICAgICAgICAgICAgZm9udFNpemU6IFwiMTBweFwiLFxuICAgICAgICAgICAgICBsaW5lSGVpZ2h0OiBcIjEycHhcIixcbiAgICAgICAgICAgICAgY29sb3I6IFwiIzAwMDAwMFwiLFxuICAgICAgICAgICAgICB0ZXh0QWxpZ246IFwiY2VudGVyXCIsXG4gICAgICAgICAgICAgIHdpZHRoOiBcIjcwcHhcIixcbiAgICAgICAgICAgICAgd2hpdGVTcGFjZTogXCJicmVhay1zcGFjZXNcIlxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIC8vIHVzZUhUTUw6IHRydWUsXG4gICAgICAgICAgICByb3RhdGlvbjogMCxcbiAgICAgICAgICAgIHN0YWdnZXJMaW5lczogMSxcbiAgICAgICAgICAgIHdpZHRoOiA5MCxcbiAgICAgICAgICAgIHVzZUhUTUw6ICEwLFxuICAgICAgICAgICAgc3RlcDogMCxcbiAgICAgICAgICAgIGZvcm1hdHRlcjogZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICAgIHZhciB2O1xuICAgICAgICAgICAgICBsZXQgTyA9IHRoaXMudmFsdWUsIGggPSAhMDtcbiAgICAgICAgICAgICAgY29uc3QgZyA9ICh2ID0gdGhpcyA9PSBudWxsID8gdm9pZCAwIDogdGhpcy5heGlzKSA9PSBudWxsID8gdm9pZCAwIDogdi51c2VyT3B0aW9ucy5maWx0ZXJUeXBlO1xuICAgICAgICAgICAgICByZXR1cm4gdGhpcy52YWx1ZSA+PSAxZTMgJiYgZyAhPSBcInN0cmluZ1wiID8gKE8gPSBJbnRsLk51bWJlckZvcm1hdChcImVuXCIsIHtcbiAgICAgICAgICAgICAgICBub3RhdGlvbjogXCJjb21wYWN0XCJcbiAgICAgICAgICAgICAgfSkuZm9ybWF0KHRoaXMudmFsdWUpLCBoID0gITEpIDogdGhpcy52YWx1ZSA8PSAtMWUzICYmIChPID0gSW50bC5OdW1iZXJGb3JtYXQoXCJlblwiLCB7XG4gICAgICAgICAgICAgICAgbm90YXRpb246IFwiY29tcGFjdFwiXG4gICAgICAgICAgICAgIH0pLmZvcm1hdCh0aGlzLnZhbHVlKSwgaCA9ICExKSwgYDxwIHN0eWxlPVwibWFyZ2luOiAwcHg7Zm9udC1mYW1pbHk6J1VidW50dSc7Zm9udC1zdHlsZTpub3JtYWw7ZGlzcGxheTogYmxvY2s7XG4gICAgICAgIHdoaXRlLXNwYWNlOiBicmVhay1zcGFjZXM7Zm9udC13ZWlnaHQ6MzAwO2ZvbnQtc2l6ZToxMHB4O2xpbmUtaGVpZ2h0OjEycHg7Y29sb3I6JHtoID8gXCIjMDAwXCIgOiBcIiM3ZjdmN2ZcIn07dGV4dC1hbGlnbjpjZW50ZXI7XCI+JHtPfTwvcD5gO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0sXG4gICAgICAgICAgdGl0bGU6IHtcbiAgICAgICAgICAgIHRleHQ6ICh6ID0gZS50aXRsZSkgPT0gbnVsbCA/IHZvaWQgMCA6IHoudGV4dCxcbiAgICAgICAgICAgIHN0eWxlOiB7XG4gICAgICAgICAgICAgIGNvbG9yOiBgJHtwLmNvbG9ycy50ZXh0SWNvbi50ZXh0TG93ZW1waGFzaXN9YCxcbiAgICAgICAgICAgICAgZm9udEZhbWlseTogXCJVYnVudHVcIixcbiAgICAgICAgICAgICAgZm9udFN0eWxlOiBcIm5vcm1hbFwiLFxuICAgICAgICAgICAgICBmb250V2VpZ2h0OiBcIjQwMFwiLFxuICAgICAgICAgICAgICBmb250U2l6ZTogXCIxMHB4XCIsXG4gICAgICAgICAgICAgIGxpbmVIZWlnaHQ6IFwiMTRweFwiLFxuICAgICAgICAgICAgICBtYXJnaW5Cb3R0b206IFwiNDBweFwiXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICBdLFxuICAgICAgeUF4aXM6IFtcbiAgICAgICAge1xuICAgICAgICAgIC4uLnQsXG4gICAgICAgICAgbWluOiA1MCxcbiAgICAgICAgICBtYXg6IDQwMCxcbiAgICAgICAgICBsaW5lV2lkdGg6IDAsXG4gICAgICAgICAgZ3JpZExpbmVXaWR0aDogMSxcbiAgICAgICAgICB0aXRsZToge1xuICAgICAgICAgICAgdGV4dEFsaWduOiBcInJpZ2h0XCIsXG4gICAgICAgICAgICByb3RhdGlvbjogMCxcbiAgICAgICAgICAgIHg6IC01MCxcbiAgICAgICAgICAgIHRleHQ6IChmID0gdC50aXRsZSkgPT0gbnVsbCA/IHZvaWQgMCA6IGYudGV4dCxcbiAgICAgICAgICAgIGFsaWduOiBcImhpZ2hcIixcbiAgICAgICAgICAgIHk6IC0xMCxcbiAgICAgICAgICAgIG9mZnNldDogLTUwLFxuICAgICAgICAgICAgc3R5bGU6IHtcbiAgICAgICAgICAgICAgY29sb3I6IGAke3AuY29sb3JzLnRleHRJY29uLnRleHRMb3dlbXBoYXNpc31gLFxuICAgICAgICAgICAgICBmb250RmFtaWx5OiBcIlVidW50dVwiLFxuICAgICAgICAgICAgICBmb250U3R5bGU6IFwibm9ybWFsXCIsXG4gICAgICAgICAgICAgIGZvbnRXZWlnaHQ6IFwiNDAwXCIsXG4gICAgICAgICAgICAgIGZvbnRTaXplOiBcIjEwcHhcIixcbiAgICAgICAgICAgICAgbGluZUhlaWdodDogXCIxNHB4XCIsXG4gICAgICAgICAgICAgIG1hcmdpbkJvdHRvbTogXCI0MHB4XCJcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIF0sXG4gICAgICBzZXJpZXM6IHIsXG4gICAgICAvLyBzZXJpZXMubWFwKGZ1bmN0aW9uIChlbGUpIHtcbiAgICAgIC8vICAgaWYgKGVsZT8uY29sb3IpIHtcbiAgICAgIC8vICAgICByZXR1cm4gbnVsbDtcbiAgICAgIC8vICAgfSBlbHNlIHtcbiAgICAgIC8vICAgICByZXR1cm4ge1xuICAgICAgLy8gICAgICAgLi4uZWxlLFxuICAgICAgLy8gICAgICAgY29sb3I6IGAke1RoZW1lQ29sb3JzLmNvbG9ycy5kYXRhVmlzdWFsaXphdGlvbkNoYXJ0LmNoYXJ0QnViYmxlQmdEZWZhdWx0fWAsXG4gICAgICAvLyAgICAgICBtYXJrZXI6IHtcbiAgICAgIC8vICAgICAgICAgc3RhdGVzOiB7XG4gICAgICAvLyAgICAgICAgICAgaG92ZXI6IHtcbiAgICAgIC8vICAgICAgICAgICAgIGZpbGxDb2xvcjogYCR7VGhlbWVDb2xvcnMuY29sb3JzLmRhdGFWaXN1YWxpemF0aW9uQ2hhcnQuY2hhcnRCZzFBY3RpdmV9YCxcbiAgICAgIC8vICAgICAgICAgICB9LFxuICAgICAgLy8gICAgICAgICB9LFxuICAgICAgLy8gICAgICAgfSxcbiAgICAgIC8vICAgICB9O1xuICAgICAgLy8gICB9XG4gICAgICAvLyB9KSxcbiAgICAgIHBsb3RPcHRpb25zOiB7XG4gICAgICAgIHNlcmllczoge1xuICAgICAgICAgIHBvaW50OiB7XG4gICAgICAgICAgICBldmVudHM6IHtcbiAgICAgICAgICAgICAgbW91c2VPdmVyOiBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmdyYXBoaWMuYXR0cih7XG4gICAgICAgICAgICAgICAgICBcInN0cm9rZS1kYXNoYXJyYXlcIjogXCI0XCJcbiAgICAgICAgICAgICAgICAgIC8vIFNldCBkYXNoZWQgb3V0bGluZSBvbiBob3ZlclxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICBtb3VzZU91dDogZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5ncmFwaGljLmF0dHIoe1xuICAgICAgICAgICAgICAgICAgXCJzdHJva2UtZGFzaGFycmF5XCI6IFwiMFwiXG4gICAgICAgICAgICAgICAgICAvLyBSZW1vdmUgZGFzaGVkIG91dGxpbmUgb24gbW91c2Ugb3V0XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICB0b29sdGlwOiB7XG4gICAgICAgIC8vIG91dHNpZGU6IGZhbHNlLFxuICAgICAgICAvLyBiYWNrZ3JvdW5kQ29sb3I6ICd0cmFuc3BhcmVudCcsXG4gICAgICAgIC8vIGJvcmRlckNvbG9yOiAndHJhbnNwYXJlbnQnLFxuICAgICAgICAvLyBib3JkZXJSYWRpdXM6IDIsXG4gICAgICAgIHVzZUhUTUw6ICEwLFxuICAgICAgICBiYWNrZ3JvdW5kQ29sb3I6IFwidHJhbnNwYXJlbnRcIixcbiAgICAgICAgYm9yZGVyQ29sb3I6IFwidHJhbnNwYXJlbnRcIixcbiAgICAgICAgc2hhZG93OiAhMSxcbiAgICAgICAgcGFkZGluZzogMCxcbiAgICAgICAgc2hhcmVkOiAhMCxcbiAgICAgICAgLy8gc25hcDogMCxcbiAgICAgICAgLy8gc2hhZG93OiBmYWxzZSxcbiAgICAgICAgLy8gc3R5bGU6IHtcbiAgICAgICAgLy8gICBwb2ludGVyRXZlbnRzOiAnYXV0bycsXG4gICAgICAgIC8vIH0sXG4gICAgICAgIC8vIGhpZGVEZWxheTogNTAwLFxuICAgICAgICBmb3JtYXR0ZXI6IGZ1bmN0aW9uKCkge1xuICAgICAgICAgIGNvbnN0IE8gPSBbdGhpcy5wb2ludF07XG4gICAgICAgICAgbGV0IGggPSBcIlwiO1xuICAgICAgICAgIHJldHVybiBPLmZvckVhY2goZnVuY3Rpb24oZykge1xuICAgICAgICAgICAgdmFyIEwsIHk7XG4gICAgICAgICAgICBsZXQgdiA9IGcucGxvdFggLSA0MDAgPiAoKHkgPSAoTCA9IGcuc2VyaWVzKSA9PSBudWxsID8gdm9pZCAwIDogTC5jaGFydCkgPT0gbnVsbCA/IHZvaWQgMCA6IHkucGxvdExlZnQpO1xuICAgICAgICAgICAgaCArPSBgXG4gICAgICAgICAgICBcbiAgICAgICAgICAgIDxzdHlsZT5cbiAgICAgICAgICAgICAgLmR2dG9vbHRpcENvbnRhaW5lcntcbiAgICAgICAgICAgICAgICBtYXgtd2lkdGg6IDE0M3B4O1xuICAgICAgICAgICAgICAgIG1pbi13aWR0aDogMTQzcHg7XG4gICAgICAgICAgICAgICAgaGVpZ2h0OiBhdXRvO1xuICAgICAgICAgICAgICAgIGJvcmRlcjoxcHggc29saWQgJHtwLmNvbG9ycy5ib3JkZXIuYm9yZGVyVGVydGlhcnl9O1xuICAgICAgICAgICAgICAgIGJvcmRlci1yYWRpdXM6IDRweDtcbiAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAke3AuY29sb3JzLmJhY2tncm91bmRzLmJnUHJpbWFyeX07XG4gICAgICAgICAgICAgICAgYm94LXNoYWRvdzogMHB4IDRweCA4cHggMHB4IHJnYmEoNDksIDM5LCAxMzEsIDAuMDUpO1xuICAgICAgICAgICAgICAgIGJvcmRlci1yYWRpdXM6IDRweDtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAuZHZ0b29sdGlwQ29udGFpbmVyOmFmdGVye1xuICAgICAgICAgICAgICAgIHBvc2l0aW9uOmFic29sdXRlO1xuICAgICAgICAgICAgICAgIHdpZHRoOjE3cHg7XG4gICAgICAgICAgICAgICAgaGVpZ2h0OjE3cHg7XG4gICAgICAgICAgICAgICAgYm9yZGVyLXRvcDogJHt2ICE9ICEwID8gYDBweCBzb2xpZCAke3AuY29sb3JzLmJvcmRlci5ib3JkZXJUZXJ0aWFyeX1gIDogYDFweCBzb2xpZCAke3AuY29sb3JzLmJvcmRlci5ib3JkZXJUZXJ0aWFyeX1gfTtcbiAgICAgICAgICAgICAgICBib3JkZXItcmlnaHQ6ICR7diAhPSAhMCA/IFwiMXB4IHNvbGlkIHRyYW5zcGFyZW50XCIgOiBgMHB4IHNvbGlkICR7cC5jb2xvcnMuYm9yZGVyLmJvcmRlclRlcnRpYXJ5fWB9O1xuICAgICAgICAgICAgICAgIGJvcmRlci1ib3R0b206ICR7diAhPSAhMCA/IFwiMXB4IHNvbGlkIHRyYW5zcGFyZW50XCIgOiBgMHB4IHNvbGlkICR7cC5jb2xvcnMuYm9yZGVyLmJvcmRlclRlcnRpYXJ5fWB9O1xuICAgICAgICAgICAgICAgIGJvcmRlci1sZWZ0OiAke3YgIT0gITAgPyBgMHB4IHNvbGlkICR7cC5jb2xvcnMuYm9yZGVyLmJvcmRlclRlcnRpYXJ5fWAgOiBgMXB4IHNvbGlkICR7cC5jb2xvcnMuYm9yZGVyLmJvcmRlclRlcnRpYXJ5fWB9O1xuICAgICAgICAgICAgICAgIHRvcDoxMDYlO1xuICAgICAgICAgICAgICAgIGxlZnQ6JHt2ICE9ICEwID8gXCI0NyVcIiA6IFwiMTQ1JVwifTtcbiAgICAgICAgICAgICAgICBtYXJnaW4tbGVmdDotODFweDtcbiAgICAgICAgICAgICAgICBjb250ZW50OlwiXCI7XG4gICAgICAgICAgICAgICAgdHJhbnNmb3JtOiByb3RhdGUoMTM1ZGVnKTtcbiAgICAgICAgICAgICAgICBtYXJnaW4tdG9wOi0zNXB4O1xuICAgICAgICAgICAgICAgIGJhY2tncm91bmQ6JHtwLmNvbG9ycy5iYWNrZ3JvdW5kcy5iZ1ByaW1hcnl9O1xuXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgPC9zdHlsZT4gXG4gICAgICAgICAgICA8ZGl2ID5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkdnRvb2x0aXBIZWFkXCI+JHtnLnh9PC9kaXY+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZHZ0b29sdGlwY29udGVudFwiPlxuICAgICAgICAgICAgICA8c3BhblxuICAgICAgICAgICAgICAgIHN0eWxlPVwiZmlsbDogJHtnLmNvbG9yfTtjb2xvcjogJHtnLmNvbG9yfTtcIlxuICAgICAgICAgICAgICAgIGNsYXNzPVwiZHZ0b29sdGlwTGVnZW5kXCJcbiAgICAgICAgICAgICAgPuKXj1xuICAgICAgICAgICAgICA8L3NwYW4+IFxuICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImR2U2VyaWVzTmFtZVwiPiR7Zy5zZXJpZXMubmFtZX08L3NwYW4+XG4gICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImR2dG9vbHRpcHlBeGlzVmFsdWVcIj4ke2cueX08L3NwYW4+XG4gICAgICAgICAgICBcbiAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgIFxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9kaXY+YDtcbiAgICAgICAgICB9KSwgYFxuICA8ZGl2IHN0eWxlPVwiXG4gIHBhZGRpbmc6IDAuNXJlbTtcbiAgbGluZS1oZWlnaHQ6IDE4cHg7XCJcbiAgY2xhc3M9XCJkdnRvb2x0aXBDb250YWluZXJcIlxuICA+XG4gICR7aH1cbiAgPC9kaXY+YDtcbiAgICAgICAgfSxcbiAgICAgICAgcG9zaXRpb25lcjogZnVuY3Rpb24oTywgaCwgZykge1xuICAgICAgICAgIHJldHVybiBjb25zb2xlLmxvZyhcInRvb2x0aXBQb3NpdGlvblwiLCBPLCBoKSwgZy5wbG90WCAtIDQwMCA+IHRoaXMuY2hhcnQucGxvdExlZnQgPyB7IHg6IGcucGxvdFggLSAxNTUsIHk6IGcucGxvdFkgKyAyNSB9IDogeyB4OiBnLnBsb3RYICsgNjUsIHk6IGcucGxvdFkgKyAyNSB9O1xuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgY3JlZGl0czoge1xuICAgICAgICBlbmFibGVkOiAhMVxuICAgICAgfVxuICAgIH07XG4gIH0sIFtyXSk7XG4gIHJldHVybiAvKiBAX19QVVJFX18gKi8gYyhzMCwgeyBjaGlsZHJlbjogZCAmJiBzICYmIC8qIEBfX1BVUkVfXyAqLyBlMShHWiwgeyBjaGlsZHJlbjogW1xuICAgIC8qIEBfX1BVUkVfXyAqLyBjKFxuICAgICAgem8sXG4gICAgICB7XG4gICAgICAgIGhpZ2hjaGFydHM6IGEsXG4gICAgICAgIGNvbnRhaW5lclByb3BzOiB7XG4gICAgICAgICAgc3R5bGU6IHtcbiAgICAgICAgICAgIHdpZHRoOiBcIjEwMCVcIixcbiAgICAgICAgICAgIGhlaWdodDogXCIxMDAlXCJcbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIG9wdGlvbnM6IGQsXG4gICAgICAgIHJlZjogaVxuICAgICAgfVxuICAgICksXG4gICAgLyogQF9fUFVSRV9fICovIGMoSU0sIHsgY2hpbGRyZW46IC8qIEBfX1BVUkVfXyAqLyBlMShaWiwgeyBjaGlsZHJlbjogW1xuICAgICAgLyogQF9fUFVSRV9fICovIGMoXG4gICAgICAgIEcyLFxuICAgICAgICB7XG4gICAgICAgICAgYnV0dG9uVHlwZTogXCJ0ZXJ0aWFyeVwiLFxuICAgICAgICAgIG9uQ2xpY2s6ICgpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHUgPSBpLmN1cnJlbnQuY2hhcnQsIEEgPSB1LnhBeGlzWzBdLCB6ID0gdS55QXhpc1swXTtcbiAgICAgICAgICAgIEEuc2V0RXh0cmVtZXMoQS5taW4gKyAxMCwgQS5tYXggLSAxMCksIHouc2V0RXh0cmVtZXMoei5taW4gKyAxMCwgei5tYXggLSAxMCk7XG4gICAgICAgICAgfSxcbiAgICAgICAgICBuYW1lOiBcIlBsdXNcIixcbiAgICAgICAgICBzaXplOiBcInNtXCJcbiAgICAgICAgfVxuICAgICAgKSxcbiAgICAgIC8qIEBfX1BVUkVfXyAqLyBjKFxuICAgICAgICBHMixcbiAgICAgICAge1xuICAgICAgICAgIGJ1dHRvblR5cGU6IFwidGVydGlhcnlcIixcbiAgICAgICAgICBvbkNsaWNrOiAoKSA9PiB7XG4gICAgICAgICAgICBjb25zdCB1ID0gaS5jdXJyZW50LmNoYXJ0LCBBID0gdS54QXhpc1swXSwgeiA9IHUueUF4aXNbMF07XG4gICAgICAgICAgICBBLnNldEV4dHJlbWVzKEEubWluIC0gMTAsIEEubWF4ICsgMTApLCB6LnNldEV4dHJlbWVzKHoubWluIC0gMTAsIHoubWF4ICsgMTApO1xuICAgICAgICAgIH0sXG4gICAgICAgICAgbmFtZTogXCJNaW51c1wiLFxuICAgICAgICAgIHNpemU6IFwic21cIlxuICAgICAgICB9XG4gICAgICApXG4gICAgXSB9KSB9KVxuICBdIH0pIH0pO1xufSwgaWogPSAoeyBzaXplOiBlID0ge30sIG5hbWU6IHQgPSBcIlwiLCBzZXJpZXM6IG8gfSkgPT4ge1xuICBjb25zdCBuID0gbjAobnVsbCksIHsgSGlnaGNoYXJ0czogciwgaXNSZW5kZXJDaGFydDogaSwgZGVmYXVsdFNldHRpbmc6IGEgfSA9IGJvKCksIFtzLCBsXSA9IFQxKFwiXCIpO1xuICBsZXQgcCA9IHJvKCk7XG4gIFAxKCgpID0+IHtcbiAgICB2YXIgYiwgTTtcbiAgICAoTSA9IChiID0gb1swXSkgPT0gbnVsbCA/IHZvaWQgMCA6IGIuZGF0YSkgPT0gbnVsbCB8fCBNLm1hcCgodSwgQSkgPT4ge1xuICAgICAgc3dpdGNoICh1Lm1hcmtlciA9IHtcbiAgICAgICAgc3ltYm9sOiBcImNpcmNsZVwiLFxuICAgICAgICAvLyBEaXNwbGF5IHBvaW50cyBhcyBjaXJjbGVzXG4gICAgICAgIHJhZGl1czogNVxuICAgICAgICAvLyBBZGp1c3QgdGhlIHJhZGl1cyBvZiB0aGUgY2lyY2xlcyBpZiBuZWVkZWRcbiAgICAgIH0sIEEgKyAxKSB7XG4gICAgICAgIGNhc2UgMTpcbiAgICAgICAgICByZXR1cm4gdS5jb2xvciA9IHAuY29sb3JzLmRhdGFWaXN1YWxpemF0aW9uTGVnZW5kLmxlZ2VuZEJnMTtcbiAgICAgICAgY2FzZSAyOlxuICAgICAgICAgIHJldHVybiB1LmNvbG9yID0gcC5jb2xvcnMuZGF0YVZpc3VhbGl6YXRpb25MZWdlbmQubGVnZW5kQmcyO1xuICAgICAgICBjYXNlIDM6XG4gICAgICAgICAgcmV0dXJuIHUuY29sb3IgPSBwLmNvbG9ycy5kYXRhVmlzdWFsaXphdGlvbkxlZ2VuZC5sZWdlbmRCZzM7XG4gICAgICAgIGNhc2UgNDpcbiAgICAgICAgICByZXR1cm4gdS5jb2xvciA9IHAuY29sb3JzLmRhdGFWaXN1YWxpemF0aW9uTGVnZW5kLmxlZ2VuZEJnNDtcbiAgICAgICAgY2FzZSA1OlxuICAgICAgICAgIHJldHVybiB1LmNvbG9yID0gcC5jb2xvcnMuZGF0YVZpc3VhbGl6YXRpb25MZWdlbmQubGVnZW5kQmc1O1xuICAgICAgICBjYXNlIDY6XG4gICAgICAgICAgcmV0dXJuIHUuY29sb3IgPSBwLmNvbG9ycy5kYXRhVmlzdWFsaXphdGlvbkxlZ2VuZC5sZWdlbmRCZzY7XG4gICAgICAgIGNhc2UgNzpcbiAgICAgICAgICByZXR1cm4gdS5jb2xvciA9IHAuY29sb3JzLmRhdGFWaXN1YWxpemF0aW9uTGVnZW5kLmxlZ2VuZEJnNztcbiAgICAgICAgY2FzZSA4OlxuICAgICAgICAgIHJldHVybiB1LmNvbG9yID0gcC5jb2xvcnMuZGF0YVZpc3VhbGl6YXRpb25MZWdlbmQubGVnZW5kQmc4O1xuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfVxuICAgIH0pO1xuICB9LCBbb10pO1xuICBjb25zdCBkID0gbTAoKCkgPT4gKHtcbiAgICAuLi5hLFxuICAgIGV4cG9ydGluZzoge1xuICAgICAgZW5hYmxlZDogITFcbiAgICAgIC8vIGhpZGUgZXhwb3J0aW5nIGJ1dHRvblxuICAgIH0sXG4gICAgY2hhcnQ6IHtcbiAgICAgIHR5cGU6IFwidmFyaWFibGVwaWVcIixcbiAgICAgIGhlaWdodDogMjUwLFxuICAgICAgLi4uZSxcbiAgICAgIHN0eWxlOiB7XG4gICAgICAgIHBhZGRpbmc6IDBcbiAgICAgIH0sXG4gICAgICBzcGFjaW5nQm90dG9tOiAobyA9PSBudWxsID8gdm9pZCAwIDogby5sZW5ndGgpID09IDEgPyA0MCA6IDAsXG4gICAgICBzcGFjaW5nVG9wOiAyLFxuICAgICAgc3BhY2luZ0xlZnQ6IDAsXG4gICAgICBzcGFjaW5nUmlnaHQ6IC0xMCxcbiAgICAgIGJvcmRlckNvbG9yOiBcIiNGRkZGXCIsXG4gICAgICBib3JkZXJXaWR0aDogMCxcbiAgICAgIGV2ZW50czoge1xuICAgICAgICBsb2FkOiBmdW5jdGlvbigpIHtcbiAgICAgICAgICB2YXIgdSwgQTtcbiAgICAgICAgICBsZXQgYiA9IFtdO1xuICAgICAgICAgIChBID0gKHUgPSB0aGlzLmxlZ2VuZCkgPT0gbnVsbCA/IHZvaWQgMCA6IHUuYWxsSXRlbXMpID09IG51bGwgfHwgQS5tYXAoKHopID0+IHtcbiAgICAgICAgICAgIGIucHVzaChOdW1iZXIoTnVtYmVyKHoucGVyY2VudGFnZSA/PyAwKS50b0ZpeGVkKDApKSk7XG4gICAgICAgICAgfSk7XG4gICAgICAgICAgY29uc3QgTSA9IGIgPT0gbnVsbCA/IHZvaWQgMCA6IGIucmVkdWNlKFxuICAgICAgICAgICAgKHosIGYpID0+IHogKyBmLFxuICAgICAgICAgICAgMFxuICAgICAgICAgICk7XG4gICAgICAgICAgbChgJHtNfSVgKTtcbiAgICAgICAgfSxcbiAgICAgICAgcmVuZGVyKCkge1xuICAgICAgICAgIHZhciB1O1xuICAgICAgICAgIGNvbnN0IGIgPSAodSA9IG4gPT0gbnVsbCA/IHZvaWQgMCA6IG4uY3VycmVudCkgPT0gbnVsbCA/IHZvaWQgMCA6IHUuY2hhcnQ7XG4gICAgICAgICAgaWYgKCFiKVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgIGIuY2VudGVyVGl0bGUgJiYgYi5jZW50ZXJUaXRsZSAmJiBiLmNlbnRlclRpdGxlLmRlc3Ryb3koKSwgYi5jZW50ZXJUaXRsZSA9IGIucmVuZGVyZXIudGV4dChzLCAwLCAwKS5jc3Moe1xuICAgICAgICAgICAgZm9udEZhbWlseTogYCR7cC5mb250RmFtaWx5LmJhc2V9YCxcbiAgICAgICAgICAgIGZvbnRTdHlsZTogXCJub3JtYWxcIixcbiAgICAgICAgICAgIGZvbnRXZWlnaHQ6IDQwMCxcbiAgICAgICAgICAgIGZvbnRTaXplOiBcIjIyLjhweFwiLFxuICAgICAgICAgICAgbGluZUhlaWdodDogXCIzMS45MnB4XCIsXG4gICAgICAgICAgICBjb2xvcjogYCR7cC5jb2xvcnMudGV4dEljb24udGV4dFByaW1hcnl9YFxuICAgICAgICAgIH0pLmFkZCgpO1xuICAgICAgICAgIGNvbnN0IE0gPSBiLmNlbnRlclRpdGxlLmdldEJCb3goKTtcbiAgICAgICAgICBiLmNlbnRlclRpdGxlLnRyYW5zbGF0ZShcbiAgICAgICAgICAgIGIucGxvdExlZnQgKyAoYi5wbG90V2lkdGggLSBNLndpZHRoKSAvIDIsXG4gICAgICAgICAgICBiLnBsb3RUb3AgKyAoYi5wbG90SGVpZ2h0ICsgTS5oZWlnaHQpIC8gMiAtIDEyICsgOFxuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9LFxuICAgIHBsb3RPcHRpb25zOiB7XG4gICAgICBzZXJpZXM6IHtcbiAgICAgICAgYm9yZGVyV2lkdGg6IDEsXG4gICAgICAgIC8vIGJvcmRlckNvbG9yOiAncmdiYSgyNTUsIDI1NSwgMjU1LCAwLjIpJyxcbiAgICAgICAgZGF0YUxhYmVsczoge1xuICAgICAgICAgIGVuYWJsZWQ6ICExXG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICBwb2ludDoge1xuICAgICAgICBldmVudHM6IHt9XG4gICAgICB9LFxuICAgICAgcGxvdEJvcmRlckNvbG9yOiBcIiNmZmZcIixcbiAgICAgIHBsb3RCb3JkZXJXaWR0aDogMSxcbiAgICAgIGJvcmRlckNvbG9yOiBcIiNGRkZGXCIsXG4gICAgICBib3JkZXJXaWR0aDogMVxuICAgIH0sXG4gICAgbGVnZW5kOiB7XG4gICAgICBhbGlnbjogXCJyaWdodFwiLFxuICAgICAgdmVydGljYWxBbGlnbjogXCJ0b3BcIixcbiAgICAgIGxheW91dDogXCJ2ZXJ0aWNhbFwiLFxuICAgICAgeDogLTIsXG4gICAgICB5OiAwLFxuICAgICAgdXNlSFRNTDogITAsXG4gICAgICBzeW1ib2xQYWRkaW5nOiA0LFxuICAgICAgc3ltYm9sV2lkdGg6IDAuMSxcbiAgICAgIHN5bWJvbEhlaWdodDogMC4xLFxuICAgICAgc3ltYm9sUmFkaXVzOiAwLFxuICAgICAgbWF4SGVpZ2h0OiAxMDAsXG4gICAgICBsYWJlbEZvcm1hdHRlcjogZnVuY3Rpb24oKSB7XG4gICAgICAgIGxldCBiID0gdGhpcyA9PSBudWxsID8gdm9pZCAwIDogdGhpcy5wZXJjZW50YWdlO1xuICAgICAgICByZXR1cm4gYiA9IE51bWJlcihiID8/IDApLnRvRml4ZWQoMCkgKyBcIiVcIiwgYDxkaXYgY2xhc3M9J3ZhcmlhYmxlcGllLWxlZ2VuZC1sYWJlbEZvcm1hdHRlcicgc3R5bGU9XCJiYWNrZ3JvdW5kOiNmZmY7ZGlzcGxheTogZmxleDtib3gtc2l6aW5nOiBib3JkZXItYm94O3BhZGRpbmc6IDBweCA4cHggMHB4IDRweDtib3JkZXI6IDFweCBzb2xpZCAjRjJGMkYyO3dpZHRoOiAxNTZweDtoZWlnaHQ6IDMycHg7ZmxleC1kaXJlY3Rpb246IHJvdzthbGlnbi1pdGVtczogY2VudGVyO2p1c3RpZnktY29udGVudDogc3BhY2UtYmV0d2VlbjtcIj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBzdHlsZT1cIiBkaXNwbGF5OiBmbGV4O2FsaWduLWl0ZW1zOiBjZW50ZXI7ZmxleC1kaXJlY3Rpb246IHJvdztcIj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBzdHlsZT1cIndpZHRoOiAyNHB4O2hlaWdodDogMjRweDtiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudDtib3JkZXItcmFkaXVzOiAxMDAlO2Rpc3BsYXk6IGZsZXg7YWxpZ24taXRlbXM6IGNlbnRlcjtqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcIj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBzdHlsZT1cImJhY2tncm91bmQtY29sb3I6ICR7dGhpcy5jb2xvcn07d2lkdGg6IDEwcHg7aGVpZ2h0OiAxMHB4O2JvcmRlci1yYWRpdXM6IDEwMCU7XCI+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPHAgc3R5bGU9XCJmb250LWZhbWlseTogJ1VidW50dSc7dGV4dC1hbGlnbjpyaWdodDtmb250LXN0eWxlOiBub3JtYWw7Zm9udC13ZWlnaHQ6IDQwMDttYXJnaW46MHB4O2ZvbnQtc2l6ZTogMTBweDtsaW5lLWhlaWdodDogMTRweDtcIj4ke3RoaXMubmFtZX08L3A+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8cCBzdHlsZT1cImZvbnQtZmFtaWx5OiAnVWJ1bnR1Jztmb250LXN0eWxlOiBub3JtYWw7Zm9udC13ZWlnaHQ6IDQwMDttYXJnaW46MHB4O2ZvbnQtc2l6ZTogMTBweDtsaW5lLWhlaWdodDogMTRweDtcIj4ke2J9PC9wPlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5gO1xuICAgICAgfSxcbiAgICAgIGl0ZW1Ib3ZlclN0eWxlOiB7XG4gICAgICAgIGNvbG9yOiBcIiMzMTI3ODNcIixcbiAgICAgICAgY3Vyc29yOiBcInBvaW50ZXJcIlxuICAgICAgfSxcbiAgICAgIG5hdmlnYXRpb246IHtcbiAgICAgICAgZW5hYmxlZDogITFcbiAgICAgIH1cbiAgICB9LFxuICAgIHRpdGxlOiB7XG4gICAgICB0ZXh0OiBcIlwiXG4gICAgfSxcbiAgICB0b29sdGlwOiB7XG4gICAgICBvdXRzaWRlOiAhMSxcbiAgICAgIGJhY2tncm91bmRDb2xvcjogXCJ0cmFuc3BhcmVudFwiLFxuICAgICAgYm9yZGVyQ29sb3I6IFwidHJhbnNwYXJlbnRcIixcbiAgICAgIGJvcmRlclJhZGl1czogMixcbiAgICAgIHNoYXJlZDogITAsXG4gICAgICB1c2VIVE1MOiAhMCxcbiAgICAgIHNuYXA6IDAsXG4gICAgICBzaGFkb3c6ICExLFxuICAgICAgZm9ybWF0dGVyOiBmdW5jdGlvbigpIHtcbiAgICAgICAgY29uc3QgYiA9IHRoaXMucG9pbnQ7XG4gICAgICAgIGxldCBNID0gdGhpcyA9PSBudWxsID8gdm9pZCAwIDogdGhpcy5wZXJjZW50YWdlO1xuICAgICAgICByZXR1cm4gTSA9IE51bWJlcihNID8/IDApLnRvRml4ZWQoMCkgKyBcIiVcIiwgbChNKSwgYDxkaXYgc3R5bGU9XCJkaXNwbGF5OiBmbGV4O2ZsZXgtZGlyZWN0aW9uOiByb3c7YWxpZ24taXRlbXM6IGNlbnRlcjtoZWlnaHQ6MjZweDtwYWRkaW5nOjBweCA4cHggMHB4IDhweDtiYWNrZ3JvdW5kOiR7cC5jb2xvcnMuYmFja2dyb3VuZHMuYmdUZXJ0aWFyeX07Y29sb3I6JHtwLmNvbG9ycy50ZXh0SWNvbi50ZXh0VGVydGlhcnl9O2JvcmRlci1yYWRpdXM6NHB4O1wiPjxwIHN0eWxlPVwiZm9udCAtIGZhbWlseTogJyR7cC5mb250RmFtaWx5LmJhc2V9JzsgZm9udCAtIHN0eWxlOiBub3JtYWw7IGZvbnQgLSB3ZWlnaHQ6IDUwMDsgZm9udCAtIHNpemU6IDEwcHg7IGxpbmUgLSBoZWlnaHQ6IDEwcHg7IGNvbG9yOiAjRkZGRkZGOyBcIj4ke2IgPT0gbnVsbCA/IHZvaWQgMCA6IGIubmFtZX1cbiAgICAgICAgICA8L3A+PC9kaXYgPmA7XG4gICAgICB9XG4gICAgfSxcbiAgICBjcmVkaXRzOiB7XG4gICAgICBlbmFibGVkOiAhMVxuICAgIH0sXG4gICAgc2VyaWVzOiBbXG4gICAgICB7XG4gICAgICAgIG1pblBvaW50U2l6ZTogMTAsXG4gICAgICAgIGlubmVyU2l6ZTogXCI2NSVcIixcbiAgICAgICAgek1pbjogMCxcbiAgICAgICAgbmFtZTogdCxcbiAgICAgICAgc2hvd0luTGVnZW5kOiAhMCxcbiAgICAgICAgZXZlbnRzOiB7fSxcbiAgICAgICAgYm9yZGVyUmFkaXVzOiAwLFxuICAgICAgICAvLyBjb2xvcnM6IHNlcmllc1swXS5jb2xvcixcbiAgICAgICAgZGF0YTogb1swXS5kYXRhXG4gICAgICB9XG4gICAgXVxuICB9KSwgW29bMF0uZGF0YSwgc10pO1xuICByZXR1cm4gLyogQF9fUFVSRV9fICovIGMoczAsIHsgY2hpbGRyZW46IGQgJiYgaSAmJiAvKiBAX19QVVJFX18gKi8gYyhRWiwgeyBjaGlsZHJlbjogLyogQF9fUFVSRV9fICovIGMoXG4gICAgem8sXG4gICAge1xuICAgICAgaGlnaGNoYXJ0czogcixcbiAgICAgIGNvbnRhaW5lclByb3BzOiB7IHN0eWxlOiB7IHdpZHRoOiBcIjEwMCVcIiwgaGVpZ2h0OiBcIjEwMCVcIiB9IH0sXG4gICAgICBvcHRpb25zOiBkLFxuICAgICAgcmVmOiBuXG4gICAgfVxuICApIH0pIH0pO1xufSwgYWogPSAoe1xuICB4QXhpczogZSA9IHt9LFxuICB5QXhpczogdCA9IHt9LFxuICBjaGFydDogbyxcbiAgc2l6ZTogbiA9IHt9LFxuICBtaW5XaWR0aDogcixcbiAgc2VyaWVzOiBpXG59KSA9PiB7XG4gIGNvbnN0IGEgPSBuMChudWxsKSwgeyBIaWdoY2hhcnRzOiBzLCBpc1JlbmRlckNoYXJ0OiBsLCBkZWZhdWx0U2V0dGluZzogcCB9ID0gYm8oKTtcbiAgbGV0IGQgPSBybygpO1xuICBQMSgoKSA9PiB7XG4gICAgaSA9PSBudWxsIHx8IGkubWFwKChNLCB1KSA9PiB7XG4gICAgICBzd2l0Y2ggKHUgKyAxKSB7XG4gICAgICAgIGNhc2UgMTpcbiAgICAgICAgICBsZXQgQSA9IHtcbiAgICAgICAgICAgIHN0YXRlczoge1xuICAgICAgICAgICAgICBob3Zlcjoge1xuICAgICAgICAgICAgICAgIGZpbGxDb2xvcjogYCR7ZC5jb2xvcnMuZGF0YVZpc3VhbGl6YXRpb25MZWdlbmQubGVnZW5kQmcxfWBcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH07XG4gICAgICAgICAgcmV0dXJuIE0uY29sb3IgPSBkLmNvbG9ycy5kYXRhVmlzdWFsaXphdGlvbkxlZ2VuZC5sZWdlbmRCZzEsIE0ubWFya2VyID0gQTtcbiAgICAgICAgY2FzZSAyOlxuICAgICAgICAgIGxldCB6ID0ge1xuICAgICAgICAgICAgc3RhdGVzOiB7XG4gICAgICAgICAgICAgIGhvdmVyOiB7XG4gICAgICAgICAgICAgICAgZmlsbENvbG9yOiBgJHtkLmNvbG9ycy5kYXRhVmlzdWFsaXphdGlvbkxlZ2VuZC5sZWdlbmRCZzJ9YFxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfTtcbiAgICAgICAgICByZXR1cm4gTS5jb2xvciA9IGQuY29sb3JzLmRhdGFWaXN1YWxpemF0aW9uTGVnZW5kLmxlZ2VuZEJnMiwgTS5tYXJrZXIgPSB6O1xuICAgICAgICBjYXNlIDM6XG4gICAgICAgICAgbGV0IGYgPSB7XG4gICAgICAgICAgICBzdGF0ZXM6IHtcbiAgICAgICAgICAgICAgaG92ZXI6IHtcbiAgICAgICAgICAgICAgICBmaWxsQ29sb3I6IGAke2QuY29sb3JzLmRhdGFWaXN1YWxpemF0aW9uTGVnZW5kLmxlZ2VuZEJnM31gXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9O1xuICAgICAgICAgIHJldHVybiBNLmNvbG9yID0gZC5jb2xvcnMuZGF0YVZpc3VhbGl6YXRpb25MZWdlbmQubGVnZW5kQmczLCBNLm1hcmtlciA9IGY7XG4gICAgICAgIGNhc2UgNDpcbiAgICAgICAgICBsZXQgTyA9IHtcbiAgICAgICAgICAgIHN0YXRlczoge1xuICAgICAgICAgICAgICBob3Zlcjoge1xuICAgICAgICAgICAgICAgIGZpbGxDb2xvcjogYCR7ZC5jb2xvcnMuZGF0YVZpc3VhbGl6YXRpb25MZWdlbmQubGVnZW5kQmc0fWBcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH07XG4gICAgICAgICAgcmV0dXJuIE0uY29sb3IgPSBkLmNvbG9ycy5kYXRhVmlzdWFsaXphdGlvbkxlZ2VuZC5sZWdlbmRCZzQsIE0ubWFya2VyID0gTztcbiAgICAgICAgY2FzZSA1OlxuICAgICAgICAgIGxldCBoID0ge1xuICAgICAgICAgICAgc3RhdGVzOiB7XG4gICAgICAgICAgICAgIGhvdmVyOiB7XG4gICAgICAgICAgICAgICAgZmlsbENvbG9yOiBgJHtkLmNvbG9ycy5kYXRhVmlzdWFsaXphdGlvbkxlZ2VuZC5sZWdlbmRCZzV9YFxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfTtcbiAgICAgICAgICByZXR1cm4gTS5jb2xvciA9IGQuY29sb3JzLmRhdGFWaXN1YWxpemF0aW9uTGVnZW5kLmxlZ2VuZEJnNSwgTS5tYXJrZXIgPSBoO1xuICAgICAgICBjYXNlIDY6XG4gICAgICAgICAgbGV0IGcgPSB7XG4gICAgICAgICAgICBzdGF0ZXM6IHtcbiAgICAgICAgICAgICAgaG92ZXI6IHtcbiAgICAgICAgICAgICAgICBmaWxsQ29sb3I6IGAke2QuY29sb3JzLmRhdGFWaXN1YWxpemF0aW9uTGVnZW5kLmxlZ2VuZEJnNn1gXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9O1xuICAgICAgICAgIHJldHVybiBNLmNvbG9yID0gZC5jb2xvcnMuZGF0YVZpc3VhbGl6YXRpb25MZWdlbmQubGVnZW5kQmc2LCBNLm1hcmtlciA9IGc7XG4gICAgICAgIGNhc2UgNzpcbiAgICAgICAgICBsZXQgdiA9IHtcbiAgICAgICAgICAgIHN0YXRlczoge1xuICAgICAgICAgICAgICBob3Zlcjoge1xuICAgICAgICAgICAgICAgIGZpbGxDb2xvcjogYCR7ZC5jb2xvcnMuZGF0YVZpc3VhbGl6YXRpb25MZWdlbmQubGVnZW5kQmc3fWBcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH07XG4gICAgICAgICAgcmV0dXJuIE0uY29sb3IgPSBkLmNvbG9ycy5kYXRhVmlzdWFsaXphdGlvbkxlZ2VuZC5sZWdlbmRCZzcsIE0ubWFya2VyID0gdjtcbiAgICAgICAgY2FzZSA4OlxuICAgICAgICAgIGxldCBMID0ge1xuICAgICAgICAgICAgc3RhdGVzOiB7XG4gICAgICAgICAgICAgIGhvdmVyOiB7XG4gICAgICAgICAgICAgICAgZmlsbENvbG9yOiBgJHtkLmNvbG9ycy5kYXRhVmlzdWFsaXphdGlvbkxlZ2VuZC5sZWdlbmRCZzh9YFxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfTtcbiAgICAgICAgICByZXR1cm4gTS5jb2xvciA9IGQuY29sb3JzLmRhdGFWaXN1YWxpemF0aW9uTGVnZW5kLmxlZ2VuZEJnOCwgTS5tYXJrZXIgPSBMO1xuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfVxuICAgIH0pO1xuICB9LCBbaV0pO1xuICBjb25zdCBiID0gbTAoKCkgPT4ge1xuICAgIHZhciBBLCB6O1xuICAgIHJldHVybiB7XG4gICAgICAuLi57IC4uLnAgfSxcbiAgICAgIGV4cG9ydGluZzoge1xuICAgICAgICBlbmFibGVkOiAhMVxuICAgICAgICAvLyBoaWRlIGV4cG9ydGluZyBidXR0b25cbiAgICAgIH0sXG4gICAgICBjaGFydDoge1xuICAgICAgICB0eXBlOiBcImJhclwiLFxuICAgICAgICB3aWR0aDogcixcbiAgICAgICAgLi4ubixcbiAgICAgICAgLi4ubyxcbiAgICAgICAgc3BhY2luZ0JvdHRvbTogKGkgPT0gbnVsbCA/IHZvaWQgMCA6IGkubGVuZ3RoKSA9PSAxID8gNDAgOiAwLFxuICAgICAgICBzcGFjaW5nVG9wOiA0LFxuICAgICAgICBzcGFjaW5nTGVmdDogNCxcbiAgICAgICAgc3BhY2luZ1JpZ2h0OiA0LFxuICAgICAgICBtYXJnaW5Ub3A6IDQwLFxuICAgICAgICBzY3JvbGxhYmxlUGxvdEFyZWE6IHtcbiAgICAgICAgICBtaW5XaWR0aDogcixcbiAgICAgICAgICBzY3JvbGxQb3NpdGlvblg6IDFcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIHRpdGxlOiB7XG4gICAgICAgIHRleHQ6IFwiXCJcbiAgICAgIH0sXG4gICAgICBzdWJ0aXRsZToge1xuICAgICAgICB0ZXh0OiBcIlwiXG4gICAgICB9LFxuICAgICAgeEF4aXM6IFtcbiAgICAgICAge1xuICAgICAgICAgIGNhdGVnb3JpZXM6IGUuY2F0ZWdvcmllcyxcbiAgICAgICAgICBjcm9zc2hhaXI6IHtcbiAgICAgICAgICAgIGNvbG9yOiBcIiMzMTI3ODNcIixcbiAgICAgICAgICAgIHdpZHRoOiAxLFxuICAgICAgICAgICAgZGFzaFN0eWxlOiBcIkRhc2hcIlxuICAgICAgICAgIH0sXG4gICAgICAgICAgdXNlSFRNTDogITAsXG4gICAgICAgICAgbGFiZWxzOiB7XG4gICAgICAgICAgICBzdHlsZToge1xuICAgICAgICAgICAgICBmb250RmFtaWx5OiBcIlVidW50dVwiLFxuICAgICAgICAgICAgICBmb250U3R5bGU6IFwibm9ybWFsXCIsXG4gICAgICAgICAgICAgIGZvbnRXZWlnaHQ6IDMwMCxcbiAgICAgICAgICAgICAgZm9udFNpemU6IFwiMTBweFwiLFxuICAgICAgICAgICAgICBsaW5lSGVpZ2h0OiBcIjEycHhcIixcbiAgICAgICAgICAgICAgY29sb3I6IFwiIzAwMDAwMFwiLFxuICAgICAgICAgICAgICB0ZXh0QWxpZ246IFwiY2VudGVyXCIsXG4gICAgICAgICAgICAgIHdpZHRoOiBcIjcwcHhcIixcbiAgICAgICAgICAgICAgd2hpdGVTcGFjZTogXCJicmVhay1zcGFjZXNcIlxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIC8vIHVzZUhUTUw6IHRydWUsXG4gICAgICAgICAgICByb3RhdGlvbjogMCxcbiAgICAgICAgICAgIHN0YWdnZXJMaW5lczogMSxcbiAgICAgICAgICAgIHdpZHRoOiA5MCxcbiAgICAgICAgICAgIHVzZUhUTUw6ICEwLFxuICAgICAgICAgICAgc3RlcDogMCxcbiAgICAgICAgICAgIGZvcm1hdHRlcjogZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICAgIHZhciBoO1xuICAgICAgICAgICAgICBsZXQgZiA9IHRoaXMudmFsdWU7XG4gICAgICAgICAgICAgIGNvbnN0IE8gPSAoaCA9IHRoaXMgPT0gbnVsbCA/IHZvaWQgMCA6IHRoaXMuYXhpcykgPT0gbnVsbCA/IHZvaWQgMCA6IGgudXNlck9wdGlvbnMuZmlsdGVyVHlwZTtcbiAgICAgICAgICAgICAgcmV0dXJuIHRoaXMudmFsdWUgPj0gMWUzICYmIE8gIT0gXCJzdHJpbmdcIiA/IGYgPSBJbnRsLk51bWJlckZvcm1hdChcImVuXCIsIHtcbiAgICAgICAgICAgICAgICBub3RhdGlvbjogXCJjb21wYWN0XCJcbiAgICAgICAgICAgICAgfSkuZm9ybWF0KHRoaXMudmFsdWUpIDogdGhpcy52YWx1ZSA8PSAtMWUzICYmIChmID0gSW50bC5OdW1iZXJGb3JtYXQoXCJlblwiLCB7XG4gICAgICAgICAgICAgICAgbm90YXRpb246IFwiY29tcGFjdFwiXG4gICAgICAgICAgICAgIH0pLmZvcm1hdCh0aGlzLnZhbHVlKSksIGA8cCBzdHlsZT1cIm1hcmdpbjogMHB4O2ZvbnQtZmFtaWx5OidVYnVudHUnO2ZvbnQtc3R5bGU6bm9ybWFsO2Rpc3BsYXk6IGJsb2NrO1xuICAgICAgICB3aGl0ZS1zcGFjZTogYnJlYWstc3BhY2VzO2ZvbnQtd2VpZ2h0OjMwMDtmb250LXNpemU6MTBweDtsaW5lLWhlaWdodDoxNHB4O2NvbG9yOiR7ZC5jb2xvcnMudGV4dEljb24udGV4dExvd2VtcGhhc2lzfTt0ZXh0LWFsaWduOmNlbnRlcjtcIj4ke2Z9PC9wPmA7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSxcbiAgICAgICAgICAuLi5lLFxuICAgICAgICAgIHRpdGxlOiB7XG4gICAgICAgICAgICAvLyB0ZXh0QWxpZ246ICdyaWdodCcsXG4gICAgICAgICAgICAvLyByb3RhdGlvbjogMCxcbiAgICAgICAgICAgIC8vIHg6IC01MCxcbiAgICAgICAgICAgIHRleHQ6IChBID0gZS50aXRsZSkgPT0gbnVsbCA/IHZvaWQgMCA6IEEudGV4dCxcbiAgICAgICAgICAgIC8vIGFsaWduOiAnaGlnaCcsXG4gICAgICAgICAgICAvLyB5OiAtMTAsXG4gICAgICAgICAgICAvLyBvZmZzZXQ6IC01MCxcbiAgICAgICAgICAgIHN0eWxlOiB7XG4gICAgICAgICAgICAgIGNvbG9yOiBgJHtkLmNvbG9ycy50ZXh0SWNvbi50ZXh0TG93ZW1waGFzaXN9YCxcbiAgICAgICAgICAgICAgZm9udEZhbWlseTogXCJVYnVudHVcIixcbiAgICAgICAgICAgICAgZm9udFN0eWxlOiBcIm5vcm1hbFwiLFxuICAgICAgICAgICAgICBmb250V2VpZ2h0OiBcIjQwMFwiLFxuICAgICAgICAgICAgICBmb250U2l6ZTogXCIxMHB4XCIsXG4gICAgICAgICAgICAgIGxpbmVIZWlnaHQ6IFwiMTRweFwiXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSxcbiAgICAgICAgICBncmlkTGluZVdpZHRoOiAwLFxuICAgICAgICAgIHRpY2tJbnRlcnZhbDogMCxcbiAgICAgICAgICBsaW5lV2lkdGg6IDBcbiAgICAgICAgfVxuICAgICAgXSxcbiAgICAgIHlBeGlzOiBbXG4gICAgICAgIHtcbiAgICAgICAgICAuLi50LFxuICAgICAgICAgIC8vIG1pbjogMCxcbiAgICAgICAgICBjYXRlZ29yaWVzOiB0LmNhdGVnb3JpZXMsXG4gICAgICAgICAgbGluZVdpZHRoOiAwLFxuICAgICAgICAgIGdyaWRMaW5lV2lkdGg6IDEsXG4gICAgICAgICAgdXNlSFRNTDogITAsXG4gICAgICAgICAgbGFiZWxzOiB7XG4gICAgICAgICAgICBlbmFibGVkOiAhMCxcbiAgICAgICAgICAgIGZvcm1hdHRlcjogZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICAgIGxldCBmID0gdGhpcy52YWx1ZTtcbiAgICAgICAgICAgICAgcmV0dXJuIHRoaXMudmFsdWUgPj0gMWUzID8gZiA9IEludGwuTnVtYmVyRm9ybWF0KFwiZW5cIiwge1xuICAgICAgICAgICAgICAgIG5vdGF0aW9uOiBcImNvbXBhY3RcIlxuICAgICAgICAgICAgICB9KS5mb3JtYXQodGhpcy52YWx1ZSkgOiB0aGlzLnZhbHVlIDw9IC0xZTMgJiYgKGYgPSBJbnRsLk51bWJlckZvcm1hdChcImVuXCIsIHtcbiAgICAgICAgICAgICAgICBub3RhdGlvbjogXCJjb21wYWN0XCJcbiAgICAgICAgICAgICAgfSkuZm9ybWF0KHRoaXMudmFsdWUpKSwgYDxwIHN0eWxlPVwibWFyZ2luOiAwcHg7Zm9udC1mYW1pbHk6J1VidW50dSc7Zm9udC1zdHlsZTpub3JtYWw7ZGlzcGxheTogYmxvY2s7XG4gICAgICAgIHdoaXRlLXNwYWNlOiBicmVhay1zcGFjZXM7Zm9udC13ZWlnaHQ6MzAwO2ZvbnQtc2l6ZToxMHB4O2xpbmUtaGVpZ2h0OjE0cHg7Y29sb3I6JHtkLmNvbG9ycy50ZXh0SWNvbi50ZXh0TG93ZW1waGFzaXN9O3RleHQtYWxpZ246ZW5kO1wiPiR7Zn08L3A+YDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9LFxuICAgICAgICAgIHRpdGxlOiB7XG4gICAgICAgICAgICB0ZXh0OiAoeiA9IHQudGl0bGUpID09IG51bGwgPyB2b2lkIDAgOiB6LnRleHQsXG4gICAgICAgICAgICBzdHlsZToge1xuICAgICAgICAgICAgICBjb2xvcjogYCR7ZC5jb2xvcnMudGV4dEljb24udGV4dExvd2VtcGhhc2lzfWAsXG4gICAgICAgICAgICAgIGZvbnRGYW1pbHk6IFwiVWJ1bnR1XCIsXG4gICAgICAgICAgICAgIGZvbnRTdHlsZTogXCJub3JtYWxcIixcbiAgICAgICAgICAgICAgZm9udFdlaWdodDogXCI0MDBcIixcbiAgICAgICAgICAgICAgZm9udFNpemU6IFwiMTBweFwiLFxuICAgICAgICAgICAgICBsaW5lSGVpZ2h0OiBcIjE0cHhcIlxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgXSxcbiAgICAgIHRvb2x0aXA6IHtcbiAgICAgICAgLy8gb3V0c2lkZTogZmFsc2UsXG4gICAgICAgIC8vIGJhY2tncm91bmRDb2xvcjogJ3RyYW5zcGFyZW50JyxcbiAgICAgICAgLy8gYm9yZGVyQ29sb3I6ICd0cmFuc3BhcmVudCcsXG4gICAgICAgIC8vIGJvcmRlclJhZGl1czogMixcbiAgICAgICAgdXNlSFRNTDogITAsXG4gICAgICAgIGJhY2tncm91bmRDb2xvcjogXCJ0cmFuc3BhcmVudFwiLFxuICAgICAgICBib3JkZXJDb2xvcjogXCJ0cmFuc3BhcmVudFwiLFxuICAgICAgICBzaGFkb3c6ICExLFxuICAgICAgICBwYWRkaW5nOiAwLFxuICAgICAgICBzaGFyZWQ6ICEwLFxuICAgICAgICAvLyBzbmFwOiAwLFxuICAgICAgICAvLyBzaGFkb3c6IGZhbHNlLFxuICAgICAgICAvLyBzdHlsZToge1xuICAgICAgICAvLyAgIHBvaW50ZXJFdmVudHM6ICdhdXRvJyxcbiAgICAgICAgLy8gfSxcbiAgICAgICAgLy8gaGlkZURlbGF5OiA1MDAsXG4gICAgICAgIGZvcm1hdHRlcjogZnVuY3Rpb24oKSB7XG4gICAgICAgICAgY29uc3QgZiA9IHRoaXMucG9pbnRzO1xuICAgICAgICAgIGxldCBPID0gXCJcIjtcbiAgICAgICAgICByZXR1cm4gZi5mb3JFYWNoKGZ1bmN0aW9uKGgsIGcpIHtcbiAgICAgICAgICAgIHZhciBMLCB5O1xuICAgICAgICAgICAgbGV0IHYgPSBoLnBvaW50LnBsb3RYIC0gNDAwID4gKCh5ID0gKEwgPSBoLnNlcmllcykgPT0gbnVsbCA/IHZvaWQgMCA6IEwuY2hhcnQpID09IG51bGwgPyB2b2lkIDAgOiB5LnBsb3RMZWZ0KTtcbiAgICAgICAgICAgIE8gKz0gYFxuICAgICAgICAgICAgXG4gICAgICAgICAgICA8c3R5bGU+XG4gICAgICAgICAgICAgIC5kdnRvb2x0aXBDb250YWluZXJ7XG4gICAgICAgICAgICAgICAgbWF4LXdpZHRoOiAxNDNweDtcbiAgICAgICAgICAgICAgICBtaW4td2lkdGg6IDE0M3B4O1xuICAgICAgICAgICAgICAgIGhlaWdodDogYXV0bztcbiAgICAgICAgICAgICAgICBib3JkZXI6MXB4IHNvbGlkICR7ZC5jb2xvcnMuYm9yZGVyLmJvcmRlclRlcnRpYXJ5fTtcbiAgICAgICAgICAgICAgICBib3JkZXItcmFkaXVzOiA0cHg7XG4gICAgICAgICAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogJHtkLmNvbG9ycy5iYWNrZ3JvdW5kcy5iZ1ByaW1hcnl9O1xuICAgICAgICAgICAgICAgIGJveC1zaGFkb3c6IDBweCA0cHggOHB4IDBweCByZ2JhKDQ5LCAzOSwgMTMxLCAwLjA1KTtcbiAgICAgICAgICAgICAgICBib3JkZXItcmFkaXVzOiA0cHg7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgLmR2dG9vbHRpcENvbnRhaW5lcjphZnRlcntcbiAgICAgICAgICAgICAgICBwb3NpdGlvbjphYnNvbHV0ZTtcbiAgICAgICAgICAgICAgICB3aWR0aDoxN3B4O1xuICAgICAgICAgICAgICAgIGhlaWdodDoxN3B4O1xuICAgICAgICAgICAgICAgIGJvcmRlci10b3A6ICR7diAhPSAhMCA/IGAwcHggc29saWQgJHtkLmNvbG9ycy5ib3JkZXIuYm9yZGVyVGVydGlhcnl9YCA6IGAxcHggc29saWQgJHtkLmNvbG9ycy5ib3JkZXIuYm9yZGVyVGVydGlhcnl9YH07XG4gICAgICAgICAgICAgICAgYm9yZGVyLXJpZ2h0OiAke3YgIT0gITAgPyBcIjFweCBzb2xpZCB0cmFuc3BhcmVudFwiIDogYDBweCBzb2xpZCAke2QuY29sb3JzLmJvcmRlci5ib3JkZXJUZXJ0aWFyeX1gfTtcbiAgICAgICAgICAgICAgICBib3JkZXItYm90dG9tOiAke3YgIT0gITAgPyBcIjFweCBzb2xpZCB0cmFuc3BhcmVudFwiIDogYDBweCBzb2xpZCAke2QuY29sb3JzLmJvcmRlci5ib3JkZXJUZXJ0aWFyeX1gfTtcbiAgICAgICAgICAgICAgICBib3JkZXItbGVmdDogJHt2ICE9ICEwID8gYDBweCBzb2xpZCAke2QuY29sb3JzLmJvcmRlci5ib3JkZXJUZXJ0aWFyeX1gIDogYDFweCBzb2xpZCAke2QuY29sb3JzLmJvcmRlci5ib3JkZXJUZXJ0aWFyeX1gfTtcbiAgICAgICAgICAgICAgICB0b3A6MTA2JTtcbiAgICAgICAgICAgICAgICBsZWZ0OiR7diAhPSAhMCA/IFwiNDclXCIgOiBcIjE0NSVcIn07XG4gICAgICAgICAgICAgICAgbWFyZ2luLWxlZnQ6LTgxcHg7XG4gICAgICAgICAgICAgICAgY29udGVudDpcIlwiO1xuICAgICAgICAgICAgICAgIHRyYW5zZm9ybTogcm90YXRlKDEzNWRlZyk7XG4gICAgICAgICAgICAgICAgbWFyZ2luLXRvcDotMzVweDtcbiAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kOiR7ZC5jb2xvcnMuYmFja2dyb3VuZHMuYmdQcmltYXJ5fTtcblxuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICBcbiAgICAgICAgICBcbiAgICAgICAgICAgPC9zdHlsZT4gXG4gICAgICAgICAgICA8ZGl2ID5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkdnRvb2x0aXBIZWFkXCIgc3R5bGU9XCJcbiAgICAgICAgICAgICAgIGRpc3BsYXk6JHtnID09IDAgPyBcImJsb2NrXCIgOiBcIm5vbmVcIn1cbiAgICAgICAgICAgIFwiPiR7aC54fTwvZGl2PlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImR2dG9vbHRpcGNvbnRlbnRcIj5cbiAgICAgICAgICAgICAgPHNwYW5cbiAgICAgICAgICAgICAgICBzdHlsZT1cImZpbGw6ICR7aC5jb2xvcn07Y29sb3I6ICR7aC5jb2xvcn07XCJcbiAgICAgICAgICAgICAgICBjbGFzcz1cImR2dG9vbHRpcExlZ2VuZFwiXG4gICAgICAgICAgICAgID7il49cbiAgICAgICAgICAgICAgPC9zcGFuPiBcbiAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJkdlNlcmllc05hbWVcIj4ke2guc2VyaWVzLm5hbWV9PC9zcGFuPlxuICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJkdnRvb2x0aXB5QXhpc1ZhbHVlXCI+JHtoLnl9PC9zcGFuPlxuICAgICAgICAgICAgXG4gICAgICAgICAgICAgIFxuICAgICAgICAgICAgICBcbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvZGl2PmA7XG4gICAgICAgICAgfSksIGBcbiAgPGRpdiBzdHlsZT1cIlxuICBwYWRkaW5nOiAwLjVyZW07XG4gIGxpbmUtaGVpZ2h0OiAxOHB4O1wiXG4gIGNsYXNzPVwiZHZ0b29sdGlwQ29udGFpbmVyXCJcbiAgPlxuICAke099XG4gIDwvZGl2PmA7XG4gICAgICAgIH0sXG4gICAgICAgIHBvc2l0aW9uZXI6IGZ1bmN0aW9uKGYsIE8sIGgpIHtcbiAgICAgICAgICByZXR1cm4gY29uc29sZS5sb2coXCJ0b29sdGlwUG9zaXRpb25cIiwgZiwgTyksIGgucGxvdFggLSA0MDAgPiB0aGlzLmNoYXJ0LnBsb3RMZWZ0ID8geyB4OiBoLnBsb3RYIC0gMTU1LCB5OiBoLnBsb3RZICsgMjUgfSA6IHsgeDogaC5wbG90WCArIDY1LCB5OiBoLnBsb3RZICsgMjUgfTtcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIHBsb3RPcHRpb25zOiB7XG4gICAgICAgIGJhcjoge1xuICAgICAgICAgIGJvcmRlclJhZGl1czogXCI0cHhcIixcbiAgICAgICAgICBkYXRhTGFiZWxzOiB7XG4gICAgICAgICAgICBlbmFibGVkOiAhMFxuICAgICAgICAgIH0sXG4gICAgICAgICAgZ3JvdXBQYWRkaW5nOiAwLjFcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIGxlZ2VuZDoge1xuICAgICAgICBsYXlvdXQ6IFwiaG9yaXpvbnRhbFwiLFxuICAgICAgICBhbGlnbjogXCJjZW50ZXJcIixcbiAgICAgICAgdmVydGljYWxBbGlnbjogXCJib3R0b21cIixcbiAgICAgICAgYmFja2dyb3VuZENvbG9yOiBcIiNGRkZGRkZcIixcbiAgICAgICAgc2hhZG93OiAhMSxcbiAgICAgICAgZmxvYXRpbmc6ICExLFxuICAgICAgICB1c2VIVE1MOiAhMCxcbiAgICAgICAgc3ltYm9sUGFkZGluZzogMCxcbiAgICAgICAgc3ltYm9sV2lkdGg6IDAuMSxcbiAgICAgICAgc3ltYm9sSGVpZ2h0OiAwLjEsXG4gICAgICAgIHN5bWJvbFJhZGl1czogMCxcbiAgICAgICAgbWF4SGVpZ2h0OiAxNyxcbiAgICAgICAgbGFiZWxGb3JtYXR0ZXI6IGZ1bmN0aW9uKCkge1xuICAgICAgICAgIHJldHVybiBgPGRpdiBzdHlsZT1cImRpc3BsYXk6IGZsZXg7ZmxleC1kaXJlY3Rpb246IHJvdzthbGlnbi1pdGVtczogY2VudGVyO2p1c3RpZnktY29udGVudDogY2VudGVyOyBwYWRkaW5nOjAgOHB4IDAgNHB4OyBib3JkZXItcmFkaXVzOjRweDtib3JkZXI6MXB4IHNvbGlkJHtkLmNvbG9ycy5ib3JkZXIuYm9yZGVyVGVydGlhcnl9OyBiYWNrZ3JvdW5kOiR7ZC5jb2xvcnMuYmFja2dyb3VuZHMuYmdQcmltYXJ5fTtcIj5cbiAgICAgICAgICA8c3Bhbj5cbiAgICAgICAgICA8ZGl2IHN0eWxlPVwicGFkZGluZzo4cHg7Ym9yZGVyLXJhZGl1czogMTAwJTtkaXNwbGF5OiBmbGV4O2FsaWduLWl0ZW1zOiBjZW50ZXI7anVzdGlmeS1jb250ZW50OiBjZW50ZXI7XCI+PGRpdiBzdHlsZT1cImJhY2tncm91bmQtY29sb3I6ICR7dGhpcy5jb2xvcn07d2lkdGg6IDhweDtoZWlnaHQ6IDhweDtib3JkZXItcmFkaXVzOiAxMDAlO1wiPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICA8cCBzdHlsZT1cImZvbnQtZmFtaWx5OiAnVWJ1bnR1Jztmb250LXN0eWxlOiBub3JtYWw7Zm9udC13ZWlnaHQ6IDQwMDttYXJnaW46MHB4O2ZvbnQtc2l6ZTogMTBweDtsaW5lLWhlaWdodDogMTRweDtcIj4ke3RoaXMubmFtZX08L3A+XG4gICAgICAgICAgPC9kaXY+YDtcbiAgICAgICAgfSxcbiAgICAgICAgbmF2aWdhdGlvbjoge1xuICAgICAgICAgIGVuYWJsZWQ6ICExXG4gICAgICAgIH0sXG4gICAgICAgIGVuYWJsZWQ6IGkubGVuZ3RoID4gMVxuICAgICAgfSxcbiAgICAgIHNlcmllczogaSxcbiAgICAgIGNyZWRpdHM6IHtcbiAgICAgICAgZW5hYmxlZDogITFcbiAgICAgIH1cbiAgICB9O1xuICB9LCBbaV0pO1xuICByZXR1cm4gLyogQF9fUFVSRV9fICovIGMoczAsIHsgY2hpbGRyZW46IGIgJiYgbCAmJiAvKiBAX19QVVJFX18gKi8gYyhncywgeyBjaGlsZHJlbjogLyogQF9fUFVSRV9fICovIGMoXG4gICAgem8sXG4gICAge1xuICAgICAgaGlnaGNoYXJ0czogcyxcbiAgICAgIGNvbnRhaW5lclByb3BzOiB7XG4gICAgICAgIHN0eWxlOiB7XG4gICAgICAgICAgd2lkdGg6IFwiMTAwJVwiLFxuICAgICAgICAgIGhlaWdodDogXCIxMDAlXCJcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIG9wdGlvbnM6IGIsXG4gICAgICByZWY6IGFcbiAgICB9XG4gICkgfSkgfSk7XG59LCBzaiA9ICh7XG4gIHhBeGlzOiBlID0ge30sXG4gIHlBeGlzOiB0ID0ge30sXG4gIGNoYXJ0OiBvLFxuICBzaXplOiBuID0ge30sXG4gIG1pbldpZHRoOiByLFxuICBzZXJpZXM6IGlcbn0pID0+IHtcbiAgY29uc3QgYSA9IG4wKG51bGwpLCB7IEhpZ2hjaGFydHM6IHMsIGlzUmVuZGVyQ2hhcnQ6IGwsIGRlZmF1bHRTZXR0aW5nOiBwIH0gPSBibygpO1xuICBsZXQgZCA9IHJvKCk7XG4gIFAxKCgpID0+IHtcbiAgICBpID09IG51bGwgfHwgaS5tYXAoKE0sIHUpID0+IHtcbiAgICAgIHN3aXRjaCAodSArIDEpIHtcbiAgICAgICAgY2FzZSAxOlxuICAgICAgICAgIHJldHVybiBNLmNvbG9yID0gZC5jb2xvcnMuZGF0YVZpc3VhbGl6YXRpb25MZWdlbmQubGVnZW5kQmcxO1xuICAgICAgICBjYXNlIDI6XG4gICAgICAgICAgcmV0dXJuIE0uY29sb3IgPSBkLmNvbG9ycy5kYXRhVmlzdWFsaXphdGlvbkxlZ2VuZC5sZWdlbmRCZzI7XG4gICAgICAgIGNhc2UgMzpcbiAgICAgICAgICByZXR1cm4gTS5jb2xvciA9IGQuY29sb3JzLmRhdGFWaXN1YWxpemF0aW9uTGVnZW5kLmxlZ2VuZEJnMztcbiAgICAgICAgY2FzZSA0OlxuICAgICAgICAgIHJldHVybiBNLmNvbG9yID0gZC5jb2xvcnMuZGF0YVZpc3VhbGl6YXRpb25MZWdlbmQubGVnZW5kQmc0O1xuICAgICAgICBjYXNlIDU6XG4gICAgICAgICAgcmV0dXJuIE0uY29sb3IgPSBkLmNvbG9ycy5kYXRhVmlzdWFsaXphdGlvbkxlZ2VuZC5sZWdlbmRCZzU7XG4gICAgICAgIGNhc2UgNjpcbiAgICAgICAgICByZXR1cm4gTS5jb2xvciA9IGQuY29sb3JzLmRhdGFWaXN1YWxpemF0aW9uTGVnZW5kLmxlZ2VuZEJnNjtcbiAgICAgICAgY2FzZSA3OlxuICAgICAgICAgIHJldHVybiBNLmNvbG9yID0gZC5jb2xvcnMuZGF0YVZpc3VhbGl6YXRpb25MZWdlbmQubGVnZW5kQmc3O1xuICAgICAgICBjYXNlIDg6XG4gICAgICAgICAgcmV0dXJuIE0uY29sb3IgPSBkLmNvbG9ycy5kYXRhVmlzdWFsaXphdGlvbkxlZ2VuZC5sZWdlbmRCZzg7XG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICB9XG4gICAgfSk7XG4gIH0sIFtpXSk7XG4gIGNvbnN0IGIgPSBtMCgoKSA9PiB7XG4gICAgdmFyIEEsIHo7XG4gICAgcmV0dXJuIHtcbiAgICAgIC4uLnsgLi4ucCB9LFxuICAgICAgZXhwb3J0aW5nOiB7XG4gICAgICAgIGVuYWJsZWQ6ICExXG4gICAgICAgIC8vIGhpZGUgZXhwb3J0aW5nIGJ1dHRvblxuICAgICAgfSxcbiAgICAgIGNoYXJ0OiB7XG4gICAgICAgIC8vIHR5cGU6ICdiYXInLFxuICAgICAgICB3aWR0aDogcixcbiAgICAgICAgLi4ubixcbiAgICAgICAgLi4ubyxcbiAgICAgICAgc3BhY2luZ0JvdHRvbTogKGkgPT0gbnVsbCA/IHZvaWQgMCA6IGkubGVuZ3RoKSA9PSAxID8gNDAgOiAwLFxuICAgICAgICBzcGFjaW5nVG9wOiA0LFxuICAgICAgICBzcGFjaW5nTGVmdDogNCxcbiAgICAgICAgc3BhY2luZ1JpZ2h0OiA0LFxuICAgICAgICBtYXJnaW5Ub3A6IDQwLFxuICAgICAgICBzY3JvbGxhYmxlUGxvdEFyZWE6IHtcbiAgICAgICAgICBtaW5XaWR0aDogcixcbiAgICAgICAgICBzY3JvbGxQb3NpdGlvblg6IDFcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIHRpdGxlOiB7XG4gICAgICAgIHRleHQ6IFwiXCJcbiAgICAgIH0sXG4gICAgICBzdWJ0aXRsZToge1xuICAgICAgICB0ZXh0OiBcIlwiXG4gICAgICB9LFxuICAgICAgeEF4aXM6IFtcbiAgICAgICAge1xuICAgICAgICAgIGNhdGVnb3JpZXM6IGUuY2F0ZWdvcmllcyxcbiAgICAgICAgICBjcm9zc2hhaXI6IHtcbiAgICAgICAgICAgIGNvbG9yOiBcIiMzMTI3ODNcIixcbiAgICAgICAgICAgIHdpZHRoOiAxLFxuICAgICAgICAgICAgZGFzaFN0eWxlOiBcIkRhc2hcIlxuICAgICAgICAgIH0sXG4gICAgICAgICAgdXNlSFRNTDogITAsXG4gICAgICAgICAgbGFiZWxzOiB7XG4gICAgICAgICAgICBzdHlsZToge1xuICAgICAgICAgICAgICBmb250RmFtaWx5OiBcIlVidW50dVwiLFxuICAgICAgICAgICAgICBmb250U3R5bGU6IFwibm9ybWFsXCIsXG4gICAgICAgICAgICAgIGZvbnRXZWlnaHQ6IDMwMCxcbiAgICAgICAgICAgICAgZm9udFNpemU6IFwiMTBweFwiLFxuICAgICAgICAgICAgICBsaW5lSGVpZ2h0OiBcIjEycHhcIixcbiAgICAgICAgICAgICAgY29sb3I6IFwiIzAwMDAwMFwiLFxuICAgICAgICAgICAgICB0ZXh0QWxpZ246IFwiY2VudGVyXCIsXG4gICAgICAgICAgICAgIHdpZHRoOiBcIjcwcHhcIixcbiAgICAgICAgICAgICAgd2hpdGVTcGFjZTogXCJicmVhay1zcGFjZXNcIlxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIC8vIHVzZUhUTUw6IHRydWUsXG4gICAgICAgICAgICByb3RhdGlvbjogMCxcbiAgICAgICAgICAgIHN0YWdnZXJMaW5lczogMSxcbiAgICAgICAgICAgIHdpZHRoOiA5MCxcbiAgICAgICAgICAgIHVzZUhUTUw6ICEwLFxuICAgICAgICAgICAgc3RlcDogMCxcbiAgICAgICAgICAgIGZvcm1hdHRlcjogZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICAgIHZhciBoO1xuICAgICAgICAgICAgICBsZXQgZiA9IHRoaXMudmFsdWU7XG4gICAgICAgICAgICAgIGNvbnN0IE8gPSAoaCA9IHRoaXMgPT0gbnVsbCA/IHZvaWQgMCA6IHRoaXMuYXhpcykgPT0gbnVsbCA/IHZvaWQgMCA6IGgudXNlck9wdGlvbnMuZmlsdGVyVHlwZTtcbiAgICAgICAgICAgICAgcmV0dXJuIHRoaXMudmFsdWUgPj0gMWUzICYmIE8gIT0gXCJzdHJpbmdcIiA/IGYgPSBJbnRsLk51bWJlckZvcm1hdChcImVuXCIsIHtcbiAgICAgICAgICAgICAgICBub3RhdGlvbjogXCJjb21wYWN0XCJcbiAgICAgICAgICAgICAgfSkuZm9ybWF0KHRoaXMudmFsdWUpIDogdGhpcy52YWx1ZSA8PSAtMWUzICYmIChmID0gSW50bC5OdW1iZXJGb3JtYXQoXCJlblwiLCB7XG4gICAgICAgICAgICAgICAgbm90YXRpb246IFwiY29tcGFjdFwiXG4gICAgICAgICAgICAgIH0pLmZvcm1hdCh0aGlzLnZhbHVlKSksIGA8cCBzdHlsZT1cIm1hcmdpbjogMHB4O21pbi13aWR0aDoxMDBweDtmb250LWZhbWlseTonVWJ1bnR1Jztmb250LXN0eWxlOm5vcm1hbDtkaXNwbGF5OiBibG9jaztcbiAgICAgICAgd2hpdGUtc3BhY2U6IGJyZWFrLXNwYWNlcztmb250LXdlaWdodDozMDA7Zm9udC1zaXplOjEwcHg7bGluZS1oZWlnaHQ6MTRweDtjb2xvcjoke2QuY29sb3JzLnRleHRJY29uLnRleHRMb3dlbXBoYXNpc307dGV4dC1hbGlnbjpjZW50ZXI7XCI+JHtmfTwvcD5gO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0sXG4gICAgICAgICAgLi4uZSxcbiAgICAgICAgICB0aXRsZToge1xuICAgICAgICAgICAgLy8gdGV4dEFsaWduOiAncmlnaHQnLFxuICAgICAgICAgICAgLy8gcm90YXRpb246IDAsXG4gICAgICAgICAgICAvLyB4OiAtNTAsXG4gICAgICAgICAgICB0ZXh0OiAoQSA9IGUudGl0bGUpID09IG51bGwgPyB2b2lkIDAgOiBBLnRleHQsXG4gICAgICAgICAgICAvLyBhbGlnbjogJ2hpZ2gnLFxuICAgICAgICAgICAgLy8geTogLTEwLFxuICAgICAgICAgICAgLy8gb2Zmc2V0OiAtNTAsXG4gICAgICAgICAgICBzdHlsZToge1xuICAgICAgICAgICAgICBjb2xvcjogYCR7ZC5jb2xvcnMudGV4dEljb24udGV4dExvd2VtcGhhc2lzfWAsXG4gICAgICAgICAgICAgIGZvbnRGYW1pbHk6IFwiVWJ1bnR1XCIsXG4gICAgICAgICAgICAgIGZvbnRTdHlsZTogXCJub3JtYWxcIixcbiAgICAgICAgICAgICAgZm9udFdlaWdodDogXCI0MDBcIixcbiAgICAgICAgICAgICAgZm9udFNpemU6IFwiMTBweFwiLFxuICAgICAgICAgICAgICBsaW5lSGVpZ2h0OiBcIjE0cHhcIlxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0sXG4gICAgICAgICAgZ3JpZExpbmVXaWR0aDogMCxcbiAgICAgICAgICB0aWNrSW50ZXJ2YWw6IDAsXG4gICAgICAgICAgbGluZVdpZHRoOiAwXG4gICAgICAgIH1cbiAgICAgIF0sXG4gICAgICB5QXhpczogW1xuICAgICAgICB7XG4gICAgICAgICAgLi4udCxcbiAgICAgICAgICAvLyBtaW46IDAsXG4gICAgICAgICAgY2F0ZWdvcmllczogdC5jYXRlZ29yaWVzLFxuICAgICAgICAgIGxpbmVXaWR0aDogMCxcbiAgICAgICAgICBncmlkTGluZVdpZHRoOiAxLFxuICAgICAgICAgIHVzZUhUTUw6ICEwLFxuICAgICAgICAgIGxhYmVsczoge1xuICAgICAgICAgICAgZW5hYmxlZDogITAsXG4gICAgICAgICAgICBmb3JtYXR0ZXI6IGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgICBsZXQgZiA9IHRoaXMudmFsdWU7XG4gICAgICAgICAgICAgIHJldHVybiB0aGlzLnZhbHVlID49IDFlMyA/IGYgPSBJbnRsLk51bWJlckZvcm1hdChcImVuXCIsIHtcbiAgICAgICAgICAgICAgICBub3RhdGlvbjogXCJjb21wYWN0XCJcbiAgICAgICAgICAgICAgfSkuZm9ybWF0KHRoaXMudmFsdWUpIDogdGhpcy52YWx1ZSA8PSAtMWUzICYmIChmID0gSW50bC5OdW1iZXJGb3JtYXQoXCJlblwiLCB7XG4gICAgICAgICAgICAgICAgbm90YXRpb246IFwiY29tcGFjdFwiXG4gICAgICAgICAgICAgIH0pLmZvcm1hdCh0aGlzLnZhbHVlKSksIGA8cCBzdHlsZT1cIm1hcmdpbjogMHB4O2ZvbnQtZmFtaWx5OidVYnVudHUnO2ZvbnQtc3R5bGU6bm9ybWFsO2Rpc3BsYXk6IGJsb2NrO1xuICAgICAgICB3aGl0ZS1zcGFjZTogYnJlYWstc3BhY2VzO2ZvbnQtd2VpZ2h0OjMwMDtmb250LXNpemU6MTBweDtsaW5lLWhlaWdodDoxNHB4O2NvbG9yOiR7ZC5jb2xvcnMudGV4dEljb24udGV4dExvd2VtcGhhc2lzfTt0ZXh0LWFsaWduOmVuZDtcIj4ke2Z9PC9wPmA7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSxcbiAgICAgICAgICB0aXRsZToge1xuICAgICAgICAgICAgdGV4dDogKHogPSB0LnRpdGxlKSA9PSBudWxsID8gdm9pZCAwIDogei50ZXh0LFxuICAgICAgICAgICAgc3R5bGU6IHtcbiAgICAgICAgICAgICAgY29sb3I6IGAke2QuY29sb3JzLnRleHRJY29uLnRleHRMb3dlbXBoYXNpc31gLFxuICAgICAgICAgICAgICBmb250RmFtaWx5OiBcIlVidW50dVwiLFxuICAgICAgICAgICAgICBmb250U3R5bGU6IFwibm9ybWFsXCIsXG4gICAgICAgICAgICAgIGZvbnRXZWlnaHQ6IFwiNDAwXCIsXG4gICAgICAgICAgICAgIGZvbnRTaXplOiBcIjEwcHhcIixcbiAgICAgICAgICAgICAgbGluZUhlaWdodDogXCIxNHB4XCJcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIF0sXG4gICAgICB0b29sdGlwOiB7XG4gICAgICAgIC8vIG91dHNpZGU6IGZhbHNlLFxuICAgICAgICAvLyBiYWNrZ3JvdW5kQ29sb3I6ICd0cmFuc3BhcmVudCcsXG4gICAgICAgIC8vIGJvcmRlckNvbG9yOiAndHJhbnNwYXJlbnQnLFxuICAgICAgICAvLyBib3JkZXJSYWRpdXM6IDIsXG4gICAgICAgIHVzZUhUTUw6ICEwLFxuICAgICAgICBiYWNrZ3JvdW5kQ29sb3I6IFwidHJhbnNwYXJlbnRcIixcbiAgICAgICAgYm9yZGVyQ29sb3I6IFwidHJhbnNwYXJlbnRcIixcbiAgICAgICAgc2hhZG93OiAhMSxcbiAgICAgICAgcGFkZGluZzogMCxcbiAgICAgICAgc2hhcmVkOiAhMCxcbiAgICAgICAgLy8gc25hcDogMCxcbiAgICAgICAgLy8gc2hhZG93OiBmYWxzZSxcbiAgICAgICAgLy8gc3R5bGU6IHtcbiAgICAgICAgLy8gICBwb2ludGVyRXZlbnRzOiAnYXV0bycsXG4gICAgICAgIC8vIH0sXG4gICAgICAgIC8vIGhpZGVEZWxheTogNTAwLFxuICAgICAgICBmb3JtYXR0ZXI6IGZ1bmN0aW9uKCkge1xuICAgICAgICAgIGNvbnN0IGYgPSB0aGlzLnBvaW50cztcbiAgICAgICAgICBsZXQgTyA9IFwiXCI7XG4gICAgICAgICAgcmV0dXJuIGYuZm9yRWFjaChmdW5jdGlvbihoLCBnKSB7XG4gICAgICAgICAgICB2YXIgTCwgeTtcbiAgICAgICAgICAgIGxldCB2ID0gaC5wb2ludC5wbG90WCAtIDQwMCA+ICgoeSA9IChMID0gaC5zZXJpZXMpID09IG51bGwgPyB2b2lkIDAgOiBMLmNoYXJ0KSA9PSBudWxsID8gdm9pZCAwIDogeS5wbG90TGVmdCk7XG4gICAgICAgICAgICBPICs9IGBcbiAgICAgICAgICAgIFxuICAgICAgICAgICAgPHN0eWxlPlxuICAgICAgICAgICAgICAuZHZ0b29sdGlwQ29udGFpbmVye1xuICAgICAgICAgICAgICAgIG1heC13aWR0aDogMTQzcHg7XG4gICAgICAgICAgICAgICAgbWluLXdpZHRoOiAxNDNweDtcbiAgICAgICAgICAgICAgICBoZWlnaHQ6IGF1dG87XG4gICAgICAgICAgICAgICAgYm9yZGVyOjFweCBzb2xpZCAke2QuY29sb3JzLmJvcmRlci5ib3JkZXJUZXJ0aWFyeX07XG4gICAgICAgICAgICAgICAgYm9yZGVyLXJhZGl1czogNHB4O1xuICAgICAgICAgICAgICAgIGJhY2tncm91bmQtY29sb3I6ICR7ZC5jb2xvcnMuYmFja2dyb3VuZHMuYmdQcmltYXJ5fTtcbiAgICAgICAgICAgICAgICBib3gtc2hhZG93OiAwcHggNHB4IDhweCAwcHggcmdiYSg0OSwgMzksIDEzMSwgMC4wNSk7XG4gICAgICAgICAgICAgICAgYm9yZGVyLXJhZGl1czogNHB4O1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIC5kdnRvb2x0aXBDb250YWluZXI6YWZ0ZXJ7XG4gICAgICAgICAgICAgICAgcG9zaXRpb246YWJzb2x1dGU7XG4gICAgICAgICAgICAgICAgd2lkdGg6MTdweDtcbiAgICAgICAgICAgICAgICBoZWlnaHQ6MTdweDtcbiAgICAgICAgICAgICAgICBib3JkZXItdG9wOiAke3YgIT0gITAgPyBgMHB4IHNvbGlkICR7ZC5jb2xvcnMuYm9yZGVyLmJvcmRlclRlcnRpYXJ5fWAgOiBgMXB4IHNvbGlkICR7ZC5jb2xvcnMuYm9yZGVyLmJvcmRlclRlcnRpYXJ5fWB9O1xuICAgICAgICAgICAgICAgIGJvcmRlci1yaWdodDogJHt2ICE9ICEwID8gXCIxcHggc29saWQgdHJhbnNwYXJlbnRcIiA6IGAwcHggc29saWQgJHtkLmNvbG9ycy5ib3JkZXIuYm9yZGVyVGVydGlhcnl9YH07XG4gICAgICAgICAgICAgICAgYm9yZGVyLWJvdHRvbTogJHt2ICE9ICEwID8gXCIxcHggc29saWQgdHJhbnNwYXJlbnRcIiA6IGAwcHggc29saWQgJHtkLmNvbG9ycy5ib3JkZXIuYm9yZGVyVGVydGlhcnl9YH07XG4gICAgICAgICAgICAgICAgYm9yZGVyLWxlZnQ6ICR7diAhPSAhMCA/IGAwcHggc29saWQgJHtkLmNvbG9ycy5ib3JkZXIuYm9yZGVyVGVydGlhcnl9YCA6IGAxcHggc29saWQgJHtkLmNvbG9ycy5ib3JkZXIuYm9yZGVyVGVydGlhcnl9YH07XG4gICAgICAgICAgICAgICAgdG9wOjEwNiU7XG4gICAgICAgICAgICAgICAgbGVmdDoke3YgIT0gITAgPyBcIjQ3JVwiIDogXCIxNDUlXCJ9O1xuICAgICAgICAgICAgICAgIG1hcmdpbi1sZWZ0Oi04MXB4O1xuICAgICAgICAgICAgICAgIGNvbnRlbnQ6XCJcIjtcbiAgICAgICAgICAgICAgICB0cmFuc2Zvcm06IHJvdGF0ZSgxMzVkZWcpO1xuICAgICAgICAgICAgICAgIG1hcmdpbi10b3A6LTM1cHg7XG4gICAgICAgICAgICAgICAgYmFja2dyb3VuZDoke2QuY29sb3JzLmJhY2tncm91bmRzLmJnUHJpbWFyeX07XG5cbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgXG4gICAgICAgICAgXG4gICAgICAgICAgIDwvc3R5bGU+IFxuICAgICAgICAgICAgPGRpdiA+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZHZ0b29sdGlwSGVhZFwiIHN0eWxlPVwiXG4gICAgICAgICAgICAgICBkaXNwbGF5OiR7ZyA9PSAwID8gXCJibG9ja1wiIDogXCJub25lXCJ9XG4gICAgICAgICAgICBcIj4ke2gueH08L2Rpdj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkdnRvb2x0aXBjb250ZW50XCI+XG4gICAgICAgICAgICAgIDxzcGFuXG4gICAgICAgICAgICAgICAgc3R5bGU9XCJmaWxsOiAke2guY29sb3J9O2NvbG9yOiAke2guY29sb3J9O1wiXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJkdnRvb2x0aXBMZWdlbmRcIlxuICAgICAgICAgICAgICA+4pePXG4gICAgICAgICAgICAgIDwvc3Bhbj4gXG4gICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiZHZTZXJpZXNOYW1lXCI+JHtoLnNlcmllcy5uYW1lfTwvc3Bhbj5cbiAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiZHZ0b29sdGlweUF4aXNWYWx1ZVwiPiR7aC55fTwvc3Bhbj5cbiAgICAgICAgICAgIFxuICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgXG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L2Rpdj5gO1xuICAgICAgICAgIH0pLCBgXG4gIDxkaXYgc3R5bGU9XCJcbiAgcGFkZGluZzogMC41cmVtO1xuICBsaW5lLWhlaWdodDogMThweDtcIlxuICBjbGFzcz1cImR2dG9vbHRpcENvbnRhaW5lclwiXG4gID5cbiAgJHtPfVxuICA8L2Rpdj5gO1xuICAgICAgICB9LFxuICAgICAgICBwb3NpdGlvbmVyOiBmdW5jdGlvbihmLCBPLCBoKSB7XG4gICAgICAgICAgcmV0dXJuIGNvbnNvbGUubG9nKFwidG9vbHRpcFBvc2l0aW9uXCIsIGYsIE8pLCBoLnBsb3RYIC0gNDAwID4gdGhpcy5jaGFydC5wbG90TGVmdCA/IHsgeDogaC5wbG90WCAtIDE1NSwgeTogaC5wbG90WSArIDI1IH0gOiB7IHg6IGgucGxvdFggKyA2NSwgeTogaC5wbG90WSArIDI1IH07XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICBwbG90T3B0aW9uczoge1xuICAgICAgICBiYXI6IHtcbiAgICAgICAgICBib3JkZXJSYWRpdXM6IFwiNTAlXCIsXG4gICAgICAgICAgZGF0YUxhYmVsczoge1xuICAgICAgICAgICAgZW5hYmxlZDogITBcbiAgICAgICAgICB9LFxuICAgICAgICAgIGdyb3VwUGFkZGluZzogMC4xXG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICBsZWdlbmQ6IHtcbiAgICAgICAgbGF5b3V0OiBcImhvcml6b250YWxcIixcbiAgICAgICAgYWxpZ246IFwiY2VudGVyXCIsXG4gICAgICAgIHZlcnRpY2FsQWxpZ246IFwiYm90dG9tXCIsXG4gICAgICAgIGJhY2tncm91bmRDb2xvcjogXCIjRkZGRkZGXCIsXG4gICAgICAgIHNoYWRvdzogITEsXG4gICAgICAgIGZsb2F0aW5nOiAhMSxcbiAgICAgICAgdXNlSFRNTDogITAsXG4gICAgICAgIHN5bWJvbFBhZGRpbmc6IDAsXG4gICAgICAgIHN5bWJvbFdpZHRoOiAwLjEsXG4gICAgICAgIHN5bWJvbEhlaWdodDogMC4xLFxuICAgICAgICBzeW1ib2xSYWRpdXM6IDAsXG4gICAgICAgIG1heEhlaWdodDogMTcsXG4gICAgICAgIGxhYmVsRm9ybWF0dGVyOiBmdW5jdGlvbigpIHtcbiAgICAgICAgICByZXR1cm4gYDxkaXYgc3R5bGU9XCJkaXNwbGF5OiBmbGV4O2ZsZXgtZGlyZWN0aW9uOiByb3c7YWxpZ24taXRlbXM6IGNlbnRlcjtqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjsgcGFkZGluZzowIDhweCAwIDRweDsgYm9yZGVyLXJhZGl1czo0cHg7Ym9yZGVyOjFweCBzb2xpZCR7ZC5jb2xvcnMuYm9yZGVyLmJvcmRlclRlcnRpYXJ5fTsgYmFja2dyb3VuZDoke2QuY29sb3JzLmJhY2tncm91bmRzLmJnUHJpbWFyeX07XCI+XG4gICAgICAgICAgPHNwYW4+XG4gICAgICAgICAgPGRpdiBzdHlsZT1cInBhZGRpbmc6OHB4O2JvcmRlci1yYWRpdXM6IDEwMCU7ZGlzcGxheTogZmxleDthbGlnbi1pdGVtczogY2VudGVyO2p1c3RpZnktY29udGVudDogY2VudGVyO1wiPjxkaXYgc3R5bGU9XCJiYWNrZ3JvdW5kLWNvbG9yOiAke3RoaXMuY29sb3J9O3dpZHRoOiA4cHg7aGVpZ2h0OiA4cHg7Ym9yZGVyLXJhZGl1czogMTAwJTtcIj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgPHAgc3R5bGU9XCJmb250LWZhbWlseTogJ1VidW50dSc7Zm9udC1zdHlsZTogbm9ybWFsO2ZvbnQtd2VpZ2h0OiA0MDA7bWFyZ2luOjBweDtmb250LXNpemU6IDEwcHg7bGluZS1oZWlnaHQ6IDE0cHg7XCI+JHt0aGlzLm5hbWV9PC9wPlxuICAgICAgICAgIDwvZGl2PmA7XG4gICAgICAgIH0sXG4gICAgICAgIG5hdmlnYXRpb246IHtcbiAgICAgICAgICBlbmFibGVkOiAhMVxuICAgICAgICB9LFxuICAgICAgICBlbmFibGVkOiBpLmxlbmd0aCA+IDFcbiAgICAgIH0sXG4gICAgICBzZXJpZXM6IGksXG4gICAgICBjcmVkaXRzOiB7XG4gICAgICAgIGVuYWJsZWQ6ICExXG4gICAgICB9XG4gICAgfTtcbiAgfSwgW2ldKTtcbiAgcmV0dXJuIC8qIEBfX1BVUkVfXyAqLyBjKHMwLCB7IGNoaWxkcmVuOiBiICYmIGwgJiYgLyogQF9fUFVSRV9fICovIGMoZ3MsIHsgY2hpbGRyZW46IC8qIEBfX1BVUkVfXyAqLyBjKFxuICAgIHpvLFxuICAgIHtcbiAgICAgIGhpZ2hjaGFydHM6IHMsXG4gICAgICBjb250YWluZXJQcm9wczoge1xuICAgICAgICBzdHlsZToge1xuICAgICAgICAgIHdpZHRoOiBcIjEwMCVcIixcbiAgICAgICAgICBoZWlnaHQ6IFwiMTAwJVwiXG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICBvcHRpb25zOiBiLFxuICAgICAgcmVmOiBhXG4gICAgfVxuICApIH0pIH0pO1xufSwgSGMgPSAoeyB0eXBlOiBlLCAuLi50IH0pID0+IC8qIEBfX1BVUkVfXyAqLyBjKFlELCB7IGNoaWxkcmVuOiAvKiBAX19QVVJFX18gKi8gZTEoVE0sIHsgY2hpbGRyZW46IFtcbiAgZSA9PSBcIm1ldHJpY3NcIiAmJiAvKiBAX19QVVJFX18gKi8gYyhvaiwgeyAuLi50IH0pLFxuICBlID09IFwiY29sdW1uXCIgJiYgLyogQF9fUFVSRV9fICovIGMocmosIHsgLi4udCB9KSxcbiAgZSA9PSBcImJ1YmJsZVwiICYmIC8qIEBfX1BVUkVfXyAqLyBjKG5qLCB7IC4uLnQgfSksXG4gIGUgPT0gXCJwaWVcIiAmJiAvKiBAX19QVVJFX18gKi8gYyhpaiwgeyAuLi50IH0pLFxuICBlID09IFwiYmFyXCIgJiYgLyogQF9fUFVSRV9fICovIGMoYWosIHsgLi4udCB9KSxcbiAgZSA9PSBcImxpbmVcIiAmJiAvKiBAX19QVVJFX18gKi8gYyhzaiwgeyAuLi50IH0pXG5dIH0pIH0pO1xuZnVuY3Rpb24gdCQoe1xuICB0aXRsZTogZSxcbiAgaWNvbk5hbWU6IHQsXG4gIHN1YlRleHQ6IG8sXG4gIHBlcmNlbnRhZ2U6IG4sXG4gIGNoYXJ0UHJvcHM6IHIsXG4gIGlzTXVsdGk6IGksXG4gIGRhdGE6IGEsXG4gIHZhcmlhbnQ6IHNcbn0pIHtcbiAgY29uc3QgW2wsIHBdID0gVDEoXCJCYXJHcmFwaFwiKTtcbiAgcmV0dXJuIFAxKCgpID0+IHtcbiAgICB0ICYmIHAodCk7XG4gIH0sIFt0XSksIC8qIEBfX1BVUkVfXyAqLyBjKFwiZGl2XCIsIHsgY2hpbGRyZW46ICgoYikgPT4ge1xuICAgIHZhciBNLCB1LCBBLCB6O1xuICAgIHN3aXRjaCAoYikge1xuICAgICAgY2FzZSBcIm1ldHJpY3NcIjpcbiAgICAgICAgcmV0dXJuIC8qIEBfX1BVUkVfXyAqLyBlMSh5YSwgeyAkdHlwZTogYiwgY2xhc3NOYW1lOiBcIm1ldHJpY3NcIiwgY2hpbGRyZW46IFtcbiAgICAgICAgICAvKiBAX19QVVJFX18gKi8gZTEoTmMsIHsgY2hpbGRyZW46IFtcbiAgICAgICAgICAgIC8qIEBfX1BVUkVfXyAqLyBjKHRyLCB7IGNoaWxkcmVuOiBlIH0pLFxuICAgICAgICAgICAgaSA/IC8qIEBfX1BVUkVfXyAqLyBjKF9aLCB7IGNoaWxkcmVuOiBhID09IG51bGwgPyB2b2lkIDAgOiBhLm1hcCgoZikgPT4gLyogQF9fUFVSRV9fICovIGUxKEtaLCB7IGNoaWxkcmVuOiBbXG4gICAgICAgICAgICAgIC8qIEBfX1BVUkVfXyAqLyBjKEVuLCB7IGNoaWxkcmVuOiBmLnZhbHVlIH0pLFxuICAgICAgICAgICAgICAvKiBAX19QVVJFX18gKi8gYygkWiwgeyBjaGlsZHJlbjogZi50ZXh0IH0pXG4gICAgICAgICAgICBdIH0pKSB9KSA6IC8qIEBfX1BVUkVfXyAqLyBjKEhNLCB7IGNoaWxkcmVuOiAvKiBAX19QVVJFX18gKi8gZTEoalosIHsgY2hpbGRyZW46IFtcbiAgICAgICAgICAgICAgLyogQF9fUFVSRV9fICovIGMoRW4sIHsgY2hpbGRyZW46IChNID0gYVswXSkgPT0gbnVsbCA/IHZvaWQgMCA6IE0udmFsdWUgfSksXG4gICAgICAgICAgICAgIC8qIEBfX1BVUkVfXyAqLyBjKGVqLCB7IGNoaWxkcmVuOiAodSA9IGFbMF0pID09IG51bGwgPyB2b2lkIDAgOiB1LnRleHQgfSlcbiAgICAgICAgICAgIF0gfSkgfSksXG4gICAgICAgICAgICAvKiBAX19QVVJFX18gKi8gYyhJYywgeyBjaGlsZHJlbjogbyB9KVxuICAgICAgICAgIF0gfSksXG4gICAgICAgICAgLyogQF9fUFVSRV9fICovIGUxKERjLCB7ICRzdGF0dXM6IHIuc2VyaWVzWzBdLnN0YXR1cywgY2hpbGRyZW46IFtcbiAgICAgICAgICAgIC8qIEBfX1BVUkVfXyAqLyBjKFxuICAgICAgICAgICAgICBaMSxcbiAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIG5hbWU6IGAke3Iuc2VyaWVzWzBdLnN0YXR1cyA9PSBcInVwXCIgPyBcIkluY3JlYXNlXCIgOiBcIkRlY3JlYXNlXCJ9YCxcbiAgICAgICAgICAgICAgICBzaXplOiBcInh4eHhzXCJcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgKSxcbiAgICAgICAgICAgIG5cbiAgICAgICAgICBdIH0pLFxuICAgICAgICAgIC8qIEBfX1BVUkVfXyAqLyBjKFRjLCB7IGNoaWxkcmVuOiAvKiBAX19QVVJFX18gKi8gYyhIYywgeyB0eXBlOiBcIm1ldHJpY3NcIiwgLi4uciB9KSB9KVxuICAgICAgICBdIH0pO1xuICAgICAgY2FzZSBcIm1ldHJpY3NOdW1iZXJPbmx5XCI6XG4gICAgICAgIHJldHVybiAvKiBAX19QVVJFX18gKi8gYyhcImRpdlwiLCB7IGNoaWxkcmVuOiAvKiBAX19QVVJFX18gKi8gYyh5YSwgeyAkdHlwZTogYiwgY2xhc3NOYW1lOiBcIm1ldHJpY3NOdW1iZXJPbmx5XCIsIGNoaWxkcmVuOiAvKiBAX19QVVJFX18gKi8gZTEoTmMsIHsgY2hpbGRyZW46IFtcbiAgICAgICAgICAvKiBAX19QVVJFX18gKi8gZTEoSlosIHsgY2hpbGRyZW46IFtcbiAgICAgICAgICAgIC8qIEBfX1BVUkVfXyAqLyBjKERNLCB7IGNoaWxkcmVuOiAvKiBAX19QVVJFX18gKi8gYyhaMSwgeyBuYW1lOiBsLCBzaXplOiBcInh4eHNcIiB9KSB9KSxcbiAgICAgICAgICAgIC8qIEBfX1BVUkVfXyAqLyBjKHRyLCB7IGNoaWxkcmVuOiBlIH0pXG4gICAgICAgICAgXSB9KSxcbiAgICAgICAgICAvKiBAX19QVVJFX18gKi8gYyhFbiwgeyBjaGlsZHJlbjogKEEgPSBhWzBdKSA9PSBudWxsID8gdm9pZCAwIDogQS52YWx1ZSB9KVxuICAgICAgICBdIH0pIH0pIH0pO1xuICAgICAgY2FzZSBcIm1ldHJpY3NTbWFsbFwiOlxuICAgICAgICByZXR1cm4gLyogQF9fUFVSRV9fICovIGUxKHlhLCB7ICR0eXBlOiBiLCBjbGFzc05hbWU6IFwibWV0cmljc1NtYWxsXCIsIGNoaWxkcmVuOiBbXG4gICAgICAgICAgLyogQF9fUFVSRV9fICovIGModHIsIHsgY2hpbGRyZW46IGUgfSksXG4gICAgICAgICAgLyogQF9fUFVSRV9fICovIGMoRW4sIHsgY2hpbGRyZW46ICh6ID0gYVswXSkgPT0gbnVsbCA/IHZvaWQgMCA6IHoudmFsdWUgfSksXG4gICAgICAgICAgLyogQF9fUFVSRV9fICovIGUxKERjLCB7ICRzdGF0dXM6IHIuc2VyaWVzWzBdLnN0YXR1cywgY2hpbGRyZW46IFtcbiAgICAgICAgICAgIC8qIEBfX1BVUkVfXyAqLyBjKFxuICAgICAgICAgICAgICBaMSxcbiAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIG5hbWU6IGAke3Iuc2VyaWVzWzBdLnN0YXR1cyA9PSBcInVwXCIgPyBcIkluY3JlYXNlXCIgOiBcIkRlY3JlYXNlXCJ9YCxcbiAgICAgICAgICAgICAgICBzaXplOiBcInh4eHhzXCJcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgKSxcbiAgICAgICAgICAgIG5cbiAgICAgICAgICBdIH0pLFxuICAgICAgICAgIC8qIEBfX1BVUkVfXyAqLyBjKEljLCB7IGNoaWxkcmVuOiBvIH0pLFxuICAgICAgICAgIC8qIEBfX1BVUkVfXyAqLyBjKFRjLCB7IGNoaWxkcmVuOiAvKiBAX19QVVJFX18gKi8gYyhIYywgeyB0eXBlOiBcIm1ldHJpY3NcIiwgLi4uciB9KSB9KVxuICAgICAgICBdIH0pO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuIC8qIEBfX1BVUkVfXyAqLyBjKHMwLCB7fSk7XG4gICAgfVxuICB9KShzKSB9KTtcbn1cbiQuZGl2YFxuICB3aWR0aDogMTAwMHB4O1xuYDtcbiQuZGl2YFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAkeyh7IHRoZW1lOiBlIH0pID0+IGUuY29sb3JzLnRvcEJhci50b3BCYXJCZ1ByaW1hcnl9O1xuYDtcbmNvbnN0IGNqID0gJC5kaXZgXG4gIC5kcm9wZG93bi5kcm9wZG93bi1zdWJtZW51IHtcbiAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgbGVmdDogMTAwJTtcbiAgICB0b3A6IDBweDtcbiAgfVxuYCwgbGogPSAkLnVsKCgpID0+IG8xYFxuICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgZ2FwOiA4cHg7XG4gICAgbGlzdC1zdHlsZTogbm9uZTtcbiAgICBwYWRkaW5nLWxlZnQ6IDA7XG4gICAgbWFyZ2luOiAwO1xuICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gIGApLCBwaiA9ICQubGkoXG4gICh7IHRoZW1lOiB7IGNvbG9yczogZSwgdHJhbnNpdGlvbnM6IHQgfSwgJGlzQWN0aXZlOiBvIH0pID0+IG8xYFxuICAgICAgcG9zaXRpb246IHJlbGF0aXZlO1xuICAgICAgJi5pbm5lciB7XG4gICAgICAgICR7V3J9IHtcbiAgICAgICAgICBib3JkZXItcmFkaXVzOiAwcHg7XG4gICAgICAgICAgJjpob3ZlciB7XG4gICAgICAgICAgICBiYWNrZ3JvdW5kOiAke2UuYmFja2dyb3VuZHMuYmdIb3ZlclByaW1hcnl9O1xuICAgICAgICAgICAgdHJhbnNpdGlvbjogJHt0LmJhc2V9O1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICAke0NzfSB7XG4gICAgICAgICAgYm9yZGVyLXJhZGl1czogMHB4O1xuICAgICAgICB9XG4gICAgICAgICR7byAmJiBvMWBcbiAgICAgICAgICBiYWNrZ3JvdW5kOiAke2UuYmFja2dyb3VuZHMuYmdTZWxlY3RlZH07XG4gICAgICAgIGB9XG4gICAgICAgICY6bGFzdC1jaGlsZCB7XG4gICAgICAgICAgbWFyZ2luLWJvdHRvbTogMDtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIGBcbiksIENzID0gJC5kaXYoXG4gICh7XG4gICAgdGhlbWU6IHtcbiAgICAgIGNvbG9yczogZSxcbiAgICAgIHR5cG9ncmFwaHk6IHQsXG4gICAgICB0cmFuc2l0aW9uczogbyxcbiAgICAgIHNwYWNpbmdzOiBuLFxuICAgICAgbGluZUhlaWdodDogcixcbiAgICAgIGZvbnRXZWlnaHQ6IGlcbiAgICB9LFxuICAgICRpc0FjdGl2ZTogYSxcbiAgICAkbW9kZTogc1xuICB9KSA9PiBvMWBcbiAgICAgIHRleHQtZGVjb3JhdGlvbjogbm9uZTtcbiAgICAgIGN1cnNvcjogcG9pbnRlcjtcbiAgICAgIGZvbnQtc2l6ZTogJHt0LnQxMn07XG4gICAgICBjb2xvcjogJHtlLnRvcEJhci50b3BCYXJUZXh0UHJpbWFyeX07XG4gICAgICBmb250LXdlaWdodDogJHtpLm1lZGl1bX07XG4gICAgICBwYWRkaW5nOiAke24uc3A2fSAke24uc3A4fTtcbiAgICAgIGxpbmUtaGVpZ2h0OiAke3IubGgyMH07XG4gICAgICB0cmFuc2l0aW9uOiAke28uYmFzZX07XG4gICAgICAke2EgJiYgcyA9PSBcImJsdWVMaWdodFwiICYmIG8xYFxuICAgICAgICBiYWNrZ3JvdW5kOiByZ2JhKFxuICAgICAgICAgICR7cTIoZS5iYWNrZ3JvdW5kcy5iZ1RyYW5zcGFyZW5jeVByZXNzZWQpfSxcbiAgICAgICAgICAwLjA4XG4gICAgICAgICk7XG4gICAgICBgfVxuICAgICAgJHthICYmIHMgPT0gXCJibHVlRGFya1wiICYmIG8xYFxuICAgICAgICBiYWNrZ3JvdW5kOiAke2UuYmFja2dyb3VuZHMuYmdUcmFuc3BhcmVuY3lQcmVzc2VkfTtcbiAgICAgIGB9XG4gICAgICAgJHshYSAmJiBvMWBcbiAgICAgICAgYmFja2dyb3VuZDogJ3RyYW5zcGFyZW50JztcbiAgICAgIGB9XG4gICAgICBib3JkZXItcmFkaXVzOiA0cHg7XG4gICAgICAmOmhvdmVyIHtcbiAgICAgICAgJHtzID09IFwiYmx1ZUxpZ2h0XCIgJiYgbzFgXG4gICAgICAgICAgYmFja2dyb3VuZDogcmdiYShcbiAgICAgICAgICAgICR7cTIoZS5iYWNrZ3JvdW5kcy5iZ1RyYW5zcGFyZW5jeUhvdmVyKX0sXG4gICAgICAgICAgICAwLjA0XG4gICAgICAgICAgKTtcbiAgICAgICAgYH1cbiAgICAgICAgJHtzID09IFwiYmx1ZURhcmtcIiAmJiBvMWBcbiAgICAgICAgICBiYWNrZ3JvdW5kOiAke2UuYmFja2dyb3VuZHMuYmdUcmFuc3BhcmVuY3lIb3Zlcn07XG4gICAgICAgIGB9ICAgXG4gICAgICAgXG4gICAgICAgXG4gICAgICAgIHRyYW5zaXRpb246ICR7by5iYXNlfTtcbiAgICAgIH1cbiAgICAgICY6YWN0aXZlIHtcbiAgICAgICAgJHtzID09IFwiYmx1ZUxpZ2h0XCIgJiYgbzFgXG4gICAgICAgICAgYmFja2dyb3VuZDogcmdiYShcbiAgICAgICAgICAgICR7cTIoZS5iYWNrZ3JvdW5kcy5iZ1RyYW5zcGFyZW5jeUhvdmVyKX0sXG4gICAgICAgICAgICAwLjA4XG4gICAgICAgICAgKTtcbiAgICAgICAgYH1cbiAgICAgICAgJHtzID09IFwiYmx1ZURhcmtcIiAmJiBvMWBcbiAgICAgICAgICBiYWNrZ3JvdW5kOiAke2UuYmFja2dyb3VuZHMuYmdUcmFuc3BhcmVuY3lIb3Zlcn07XG4gICAgICAgIGB9XG4gICAgICB9XG4gICAgYFxuKSwgV3IgPSAkLmRpdihcbiAgKHtcbiAgICB0aGVtZToge1xuICAgICAgY29sb3JzOiBlLFxuICAgICAgdHlwb2dyYXBoeTogdCxcbiAgICAgIGJvcmRlclJhZGl1czogbyxcbiAgICAgIHRyYW5zaXRpb25zOiBuLFxuICAgICAgc3BhY2luZ3M6IHIsXG4gICAgICBmb250V2VpZ2h0OiBpLFxuICAgICAgbGluZUhlaWdodDogYVxuICAgIH0sXG4gICAgJG1vZGU6IHNcbiAgfSkgPT4gbzFgXG4gICAgICB0ZXh0LWRlY29yYXRpb246IG5vbmU7XG4gICAgICBmb250LXNpemU6ICR7dC50MTJ9O1xuICAgICAgY29sb3I6ICR7ZS50b3BCYXIudG9wQmFyVGV4dFByaW1hcnl9O1xuICAgICAgZm9udC13ZWlnaHQ6ICR7aS5tZWRpdW19O1xuICAgICAgbGluZS1oZWlnaHQ6ICR7YS5saDIwfTtcbiAgICAgIHBhZGRpbmc6ICR7ci5zcDZ9ICR7ci5zcDh9O1xuICAgICAgY3Vyc29yOiBwb2ludGVyO1xuICAgICAgZGlzcGxheTogZmxleDtcbiAgICAgIGp1c3RpZnktY29udGVudDogc3BhY2UtYmV0d2VlbjtcbiAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gICAgICBib3JkZXItcmFkaXVzOiAke28uYmFzZX07XG4gICAgICB0cmFuc2l0aW9uOiAke24uYmFzZX07XG4gICAgICAmOmhvdmVyIHtcbiAgICAgICAgJHtzID09IFwiYmx1ZUxpZ2h0XCIgJiYgbzFgXG4gICAgICAgICAgYmFja2dyb3VuZDogcmdiYShcbiAgICAgICAgICAgICR7cTIoZS5iYWNrZ3JvdW5kcy5iZ1RyYW5zcGFyZW5jeUhvdmVyKX0sXG4gICAgICAgICAgICAwLjA0XG4gICAgICAgICAgKTtcbiAgICAgICAgYH1cbiAgICAgICAgJHtzID09IFwiYmx1ZURhcmtcIiAmJiBvMWBcbiAgICAgICAgICBiYWNrZ3JvdW5kOiAke2UuYmFja2dyb3VuZHMuYmdUcmFuc3BhcmVuY3lIb3Zlcn07XG4gICAgICAgIGB9ICAgXG4gICAgICAgIHRyYW5zaXRpb246ICR7bi5iYXNlfTtcbiAgICAgIH1cbiAgICAgICY6YWN0aXZlIHtcbiAgICAgICAgJHtzID09IFwiYmx1ZUxpZ2h0XCIgJiYgbzFgXG4gICAgICAgICAgYmFja2dyb3VuZDogcmdiYShcbiAgICAgICAgICAgICR7cTIoZS5iYWNrZ3JvdW5kcy5iZ1RyYW5zcGFyZW5jeVByZXNzZWQpfSxcbiAgICAgICAgICAgIDAuMDhcbiAgICAgICAgICApO1xuICAgICAgICBgfVxuICAgICAgICAke3MgPT0gXCJibHVlRGFya1wiICYmIG8xYFxuICAgICAgICAgIGJhY2tncm91bmQ6ICR7ZS5iYWNrZ3JvdW5kcy5iZ1RyYW5zcGFyZW5jeVByZXNzZWR9O1xuICAgICAgICBgfVxuICAgICAgfVxuICAgICAgJjpub3QoOmhvdmVyKSB7XG4gICAgICAgICZbYXJpYS1leHBhbmRlZD0ndHJ1ZSddIHtcbiAgICAgICAgICAke3MgPT0gXCJibHVlTGlnaHRcIiAmJiBvMWBcbiAgICAgICAgICAgIGJhY2tncm91bmQ6IHJnYmEoXG4gICAgICAgICAgICAgICR7cTIoZS5iYWNrZ3JvdW5kcy5iZ1RyYW5zcGFyZW5jeVByZXNzZWQpfSxcbiAgICAgICAgICAgICAgMC4wOFxuICAgICAgICAgICAgKTtcbiAgICAgICAgICBgfVxuICAgICAgICAgICR7cyA9PSBcImJsdWVEYXJrXCIgJiYgbzFgXG4gICAgICAgICAgICBiYWNrZ3JvdW5kOiAke2UuYmFja2dyb3VuZHMuYmdUcmFuc3BhcmVuY3lQcmVzc2VkfTtcbiAgICAgICAgICBgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgYFxuKSwgSTQgPSAkLmRpdihcbiAgKHsgdGhlbWU6IHsgY29sb3JzOiBlLCB0eXBvZ3JhcGh5OiB0LCBmb250V2VpZ2h0OiBvIH0gfSkgPT4gbzFgXG4gICAgICBjb2xvcjogJHtlLnRvcEJhci50b3BCYXJUZXh0UHJpbWFyeX07XG4gICAgICBmb250LXNpemU6ICR7dC50MTJ9O1xuICAgICAgZm9udC13ZWlnaHQ6ICR7by5tZWRpdW19O1xuICAgICAgbWFyZ2luLXJpZ2h0OiA4cHg7XG4gICAgYFxuKSwgZGogPSAkLnVsKFxuICAoe1xuICAgIHRoZW1lOiB7XG4gICAgICBjb2xvcnM6IGUsXG4gICAgICB0eXBvZ3JhcGh5OiB0LFxuICAgICAgYm9yZGVyUmFkaXVzOiBvLFxuICAgICAgc3BhY2luZ3M6IG4sXG4gICAgICBmb250V2VpZ2h0OiByLFxuICAgICAgY3ViaWNCZXppZXI6IGksXG4gICAgICBhbmltYXRpb25zOiBhLFxuICAgICAgc2hhZG93czogcyxcbiAgICAgIGxpbmVIZWlnaHQ6IGwsXG4gICAgICB0cmFuc2l0aW9uczogcFxuICAgIH1cbiAgfSkgPT4gbzFgXG4gICAgICBhbmltYXRpb24tZHVyYXRpb246IDAuM3M7XG4gICAgICBhbmltYXRpb24tdGltaW5nLWZ1bmN0aW9uOiAke2l9O1xuICAgICAgYW5pbWF0aW9uLWZpbGwtbW9kZTogZm9yd2FyZHM7XG4gICAgICBhbmltYXRpb24tbmFtZTogJHthLmZhZGVJbn07XG5cbiAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICAgIHJpZ2h0OiBhdXRvO1xuICAgICAgbGVmdDogMDtcbiAgICAgIHRvcDogMzZweDtcbiAgICAgIGJveC1zaGFkb3c6ICR7cy5zbX07XG4gICAgICB6LWluZGV4OiA5OTk5O1xuICAgICAgbWluLXdpZHRoOiAyMjRweDtcbiAgICAgIHBhZGRpbmc6IDhweDtcbiAgICAgIGxpc3Qtc3R5bGU6IG5vbmU7XG4gICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAke2UuYmFja2dyb3VuZHMuYmdQcmltYXJ5fTtcbiAgICAgIGJvcmRlci1yYWRpdXM6ICR7by5iYXNlfTtcbiAgICAgIGRpc3BsYXk6IG5vbmU7XG4gICAgICBib3JkZXI6IDFweCBzb2xpZCAke2UuYm9yZGVyLmJvcmRlclRlcnRpYXJ5fTtcbiAgICAgICR7Q3N9IHtcbiAgICAgICAgZm9udC1zaXplOiAke3QudDEyfTtcbiAgICAgICAgY29sb3I6ICR7ZS50ZXh0SWNvbi50ZXh0UHJpbWFyeX07XG4gICAgICAgIGZvbnQtd2VpZ2h0OiAke3IubGlnaHR9O1xuICAgICAgICBwYWRkaW5nOiAke24uc3AyfSAke24uc3A4fTtcbiAgICAgICAgbGluZS1oZWlnaHQ6ICR7bC5saDIwfTtcbiAgICAgICAgJjpob3ZlciB7XG4gICAgICAgICAgYmFja2dyb3VuZDogJHtlLmJhY2tncm91bmRzLmJnSG92ZXJQcmltYXJ5fTtcbiAgICAgICAgICB0cmFuc2l0aW9uOiAke3AuYmFzZX07XG4gICAgICAgIH1cbiAgICAgICAgJjphY3RpdmUge1xuICAgICAgICAgIGJhY2tncm91bmQ6ICR7ZS5iYWNrZ3JvdW5kcy5iZ1NlbGVjdGVkfTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgJHtXcn0ge1xuICAgICAgICAuaWNvbi1zeXN0ZW0ge1xuICAgICAgICAgIGNvbG9yOiAke2UudGV4dEljb24udGV4dFByaW1hcnl9O1xuICAgICAgICB9XG4gICAgICAgIGZvbnQtc2l6ZTogJHt0LnQxMn07XG4gICAgICAgIGNvbG9yOiAke2UudGV4dEljb24udGV4dFByaW1hcnl9O1xuICAgICAgICBmb250LXdlaWdodDogJHtyLmxpZ2h0fTtcbiAgICAgICAgbGluZS1oZWlnaHQ6ICR7bC5saDIwfTtcbiAgICAgICAgcGFkZGluZzogJHtuLnNwMn0gJHtuLnNwOH07XG4gICAgICB9XG4gICAgICAke1dyfSA+IGRpdiB7XG4gICAgICAgIGNvbG9yOiAke2UudGV4dEljb24udGV4dFByaW1hcnl9O1xuICAgICAgfVxuICAgICAgJHtJNH0ge1xuICAgICAgICBmb250LXNpemU6ICR7dC50MTJ9O1xuICAgICAgICBmb250LXdlaWdodDogJHtyLmxpZ2h0fTtcbiAgICAgICAgY29sb3I6ICR7ZS5ncmV5fTtcbiAgICAgIH1cblxuICAgICAgJi5zaG93IHtcbiAgICAgICAgZGlzcGxheTogYmxvY2s7XG4gICAgICB9XG4gICAgYFxuKTtcbiQuZGl2KCh7IHRoZW1lOiB7IGNvbG9yczogZSwgc3BhY2luZ3M6IHQgfSB9KSA9PiBvMWBcbiAgICBiYWNrZ3JvdW5kOiAke2UucGF1YX07XG4gICAgcGFkZGluZzogJHt0LnNwMTJ9O1xuICAgIGRpc3BsYXk6IGZsZXg7XG4gICAganVzdGlmeS1jb250ZW50OiBzcGFjZS1iZXR3ZWVuO1xuICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gIGApO1xuJC5kaXYoXG4gICh7IHRoZW1lOiB7IGNvbG9yczogZSB9LCAkbW9kZTogdCB9KSA9PiBvMWBcbiAgICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGZsZXgtc3RhcnQ7XG4gICAgICBhbGlnbi1pdGVtczogY2VudGVyO1xuICAgICAgZ2FwOiAycHg7XG4gICAgICAke3QgPT0gXCJibHVlTGlnaHRcIiAmJiBvMWBcbiAgICAgICAgYm9yZGVyLXJpZ2h0OiAxcHggc29saWRcbiAgICAgICAgICByZ2JhKCR7cTIoZS5ib3JkZXIuYm9yZGVyVHJhbnNwYXJlbnQpfSwgMC4wOCk7XG4gICAgICBgfVxuICAgICAgJHt0ID09IFwiYmx1ZURhcmtcIiAmJiBvMWBcbiAgICAgICAgYm9yZGVyLXJpZ2h0OiAxcHggc29saWQgJHtlLmJvcmRlci5ib3JkZXJUcmFuc3BhcmVudH07XG4gICAgICBgfVxuICAgXG4gICAgbWF4LWhlaWdodDogMjRweDtcbiAgICAgIGJveC1zaXppbmc6IGJvcmRlci1ib3g7XG4gICAgYFxuKTtcbiQuZGl2KFxuICAoeyB0aGVtZTogeyBjb2xvcnM6IGUsIHR5cG9ncmFwaHk6IHQsIHNwYWNpbmdzOiBvIH0gfSkgPT4gbzFgXG4gICAgICBmb250LXNpemU6ICR7dC50MTJ9O1xuICAgICAgY29sb3I6ICR7ZS53aGl0ZX07XG4gICAgICB0ZXh0LXRyYW5zZm9ybTogdXBwZXJjYXNlO1xuICAgICAgcGFkZGluZzogMCAke28uc3AxMn07XG4gICAgYFxuKTtcbmNvbnN0IFBNID0gKHtcbiAgaXRlbXM6IGUsXG4gIGRlcHRoTGV2ZWw6IHQsXG4gIG9wZW46IG8sXG4gIG9uTmF2TWVudUNsaWNrOiBuLFxuICBpbm5lcjogcixcbiAgJG1vZGU6IGlcbn0pID0+IHtcbiAgY29uc3QgW2EsIHNdID0gVDEobyksIFtsLCBwXSA9IFQxKCExKSwgZCA9IG4wKG51bGwpO1xuICByZXR1cm4gUDEoKCkgPT4ge1xuICAgIGNvbnN0IEEgPSAoeikgPT4ge1xuICAgICAgZC5jdXJyZW50ICYmICFkLmN1cnJlbnQuY29udGFpbnMoei50YXJnZXQpICYmIChwKCExKSwgcyghMSkpO1xuICAgIH07XG4gICAgcmV0dXJuIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoXCJtb3VzZWRvd25cIiwgQSksICgpID0+IHtcbiAgICAgIGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJtb3VzZWRvd25cIiwgQSk7XG4gICAgfTtcbiAgfSwgW10pLCAvKiBAX19QVVJFX18gKi8gYyhcbiAgICBwaixcbiAgICB7XG4gICAgICBjbGFzc05hbWU6IGBtZW51LWl0ZW1zICR7bCA/IFwiaG92ZXJlZFwiIDogXCJcIn0gJHtyID8gXCJpbm5lclwiIDogXCJcIn1gLFxuICAgICAgcmVmOiBkLFxuICAgICAgb25Nb3VzZUVudGVyOiAoKSA9PiB7XG4gICAgICAgIHAoITApO1xuICAgICAgfSxcbiAgICAgIG9uTW91c2VMZWF2ZTogKCkgPT4ge1xuICAgICAgICBwKCExKTtcbiAgICAgIH0sXG4gICAgICBvbkNsaWNrOiAoKSA9PiB7XG4gICAgICAgIHMoKEEpID0+ICFBKTtcbiAgICAgIH0sXG4gICAgICAkaXNBY3RpdmU6IGUuaXNBY3RpdmUsXG4gICAgICBjaGlsZHJlbjogZS5zdWJtZW51ID8gLyogQF9fUFVSRV9fICovIGUxKHMwLCB7IGNoaWxkcmVuOiBbXG4gICAgICAgIC8qIEBfX1BVUkVfXyAqLyBlMShcbiAgICAgICAgICBXcixcbiAgICAgICAgICB7XG4gICAgICAgICAgICBcImFyaWEtaGFzcG9wdXBcIjogXCJtZW51XCIsXG4gICAgICAgICAgICAkbW9kZTogaSxcbiAgICAgICAgICAgIFwiYXJpYS1leHBhbmRlZFwiOiBhIHx8IGwgfHwgZS5pc0FjdGl2ZSA/IFwidHJ1ZVwiIDogXCJmYWxzZVwiLFxuICAgICAgICAgICAgY2hpbGRyZW46IFtcbiAgICAgICAgICAgICAgLyogQF9fUFVSRV9fICovIGMoSTQsIHsgY2hpbGRyZW46IGUudGl0bGUgfSksXG4gICAgICAgICAgICAgIHQgPiAwID8gLyogQF9fUFVSRV9fICovIGMoWjEsIHsgbmFtZTogXCJDaGV2cm9uUmlnaHRcIiwgY29sb3I6IFwiI2ZmZlwiLCBzaXplOiBcInh4c1wiIH0pIDogLyogQF9fUFVSRV9fICovIGMoWjEsIHsgbmFtZTogXCJDaGV2cm9uRG93bkRyb3Bkb3duXCIsIGNvbG9yOiBcIiNmZmZcIiwgc2l6ZTogXCJ4eHh4c1wiIH0pXG4gICAgICAgICAgICBdXG4gICAgICAgICAgfVxuICAgICAgICApLFxuICAgICAgICAvKiBAX19QVVJFX18gKi8gYyhcbiAgICAgICAgICBiaixcbiAgICAgICAgICB7XG4gICAgICAgICAgICBkZXB0aExldmVsOiB0LFxuICAgICAgICAgICAgc3VibWVudXM6IGUuc3VibWVudSxcbiAgICAgICAgICAgIG9wZW46IHQgPiAwID8gbCA6IGEsXG4gICAgICAgICAgICBvbk5hdk1lbnVDbGljazogbixcbiAgICAgICAgICAgIGlubmVyOiAhMFxuICAgICAgICAgIH1cbiAgICAgICAgKVxuICAgICAgXSB9KSA6IC8qIEBfX1BVUkVfXyAqLyBjKFxuICAgICAgICBDcyxcbiAgICAgICAge1xuICAgICAgICAgICRpc0FjdGl2ZTogZS5pc0FjdGl2ZSxcbiAgICAgICAgICBvbkNsaWNrOiAoKSA9PiBuICYmIGUubGluayAmJiBuKGUubGluayksXG4gICAgICAgICAgJG1vZGU6IGksXG4gICAgICAgICAgY2hpbGRyZW46IGUudGl0bGVcbiAgICAgICAgfVxuICAgICAgKVxuICAgIH1cbiAgKTtcbn0sIGJqID0gKHtcbiAgc3VibWVudXM6IGUsXG4gIGRlcHRoTGV2ZWw6IHQsXG4gIG9wZW46IG8sXG4gIGlubmVyOiBuLFxuICBvbk5hdk1lbnVDbGljazogclxufSkgPT4ge1xuICB0ID0gdCArIDE7XG4gIGNvbnN0IGkgPSB0ID4gMSA/IFwiZHJvcGRvd24tc3VibWVudVwiIDogXCJcIjtcbiAgcmV0dXJuIC8qIEBfX1BVUkVfXyAqLyBjKGRqLCB7IGNsYXNzTmFtZTogYGRyb3Bkb3duICR7aX0gJHtvID8gXCJzaG93XCIgOiBcIlwifWAsIGNoaWxkcmVuOiBlLm1hcCgoYSwgcykgPT4gLyogQF9fUFVSRV9fICovIGMoXG4gICAgUE0sXG4gICAge1xuICAgICAgaXRlbXM6IGEsXG4gICAgICBkZXB0aExldmVsOiB0LFxuICAgICAgb3BlbjogbyxcbiAgICAgIG9uTmF2TWVudUNsaWNrOiByLFxuICAgICAgaW5uZXI6IG5cbiAgICB9LFxuICAgIHNcbiAgKSkgfSk7XG59LCBNaiA9ICh7IG1lbnVzOiBlLCBvbk5hdk1lbnVDbGljazogdCwgJG1vZGU6IG8gfSkgPT4gLyogQF9fUFVSRV9fICovIGMoY2osIHsgY2hpbGRyZW46IC8qIEBfX1BVUkVfXyAqLyBjKGxqLCB7IGNoaWxkcmVuOiBlLm1hcCgobiwgcikgPT4gLyogQF9fUFVSRV9fICovIGMoXG4gIFBNLFxuICB7XG4gICAgaXRlbXM6IG4sXG4gICAgZGVwdGhMZXZlbDogMCxcbiAgICBvcGVuOiAhMSxcbiAgICBvbk5hdk1lbnVDbGljazogdCxcbiAgICAkbW9kZTogb1xuICB9LFxuICByXG4pKSB9KSB9KSwgQWogPSAkLmRpdihcbiAgKHsgdGhlbWU6IHsgY29sb3JzOiBlLCBjdWJpY0JlemllcjogdCwgdHJhbnNpdGlvbnM6IG8gfSwgJGlzQ29sbGFwc2VkOiBuIH0pID0+IG8xYFxuICAgIG1heC13aWR0aDogJHtuID8gXCIyNDVweFwiIDogXCIyNHB4XCJ9O1xuICAgIG1pbi13aWR0aDogJHtuID8gXCIyNDVweFwiIDogXCIyNHB4XCJ9O1xuICAgIGhlaWdodDogY2FsYygxMDAlIC0gNDhweCk7XG4gICAgYmFja2dyb3VuZDogJHtlLmJhY2tncm91bmRzLmJnUHJpbWFyeX07XG4gICAgdHJhbnNpdGlvbjogbWF4LXdpZHRoIDAuM3MgJHt0LmJhc2V9O1xuICAgIHRyYW5zaXRpb246IG1pbi13aWR0aCAwLjNzICR7dC5iYXNlfTtcbiAgICB0cmFuc2l0aW9uOiAke28uYmFzZX07XG4gICAgb3ZlcmZsb3c6IGhpZGRlbjtcbiAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgcmlnaHQ6IDBweDtcbiAgICBib3R0b206IDA7XG4gICAgei1pbmRleDogOTtcbiAgICBib3JkZXItbGVmdDogMXB4IHNvbGlkICR7ZS5ib3JkZXIuYm9yZGVyVGVydGlhcnl9O1xuICAgIGJveC1zaXppbmc6IGJvcmRlci1ib3g7XG4gICAgYm94LXNoYWRvdzogMHB4IDE2cHggMjRweCAwcHggcmdiYSg0OSwgMzksIDEzMSwgMC4wNSk7XG4gICAgJHshbiAmJiBvMWBcbiAgICAgIHRyYW5zaXRpb246ICR7by5iYXNlfTtcbiAgICAgICY6aG92ZXIge1xuICAgICAgICBiYWNrZ3JvdW5kOiAke2UuYmFja2dyb3VuZHMuYmdIb3ZlclByaW1hcnl9O1xuICAgICAgICB0cmFuc2l0aW9uOiAke28uYmFzZX07XG4gICAgICB9XG4gICAgYH1cbiAgYFxuKSwgdWogPSAkLmgxKFxuICAoe1xuICAgIHRoZW1lOiB7IGNvbG9yczogZSwgY3ViaWNCZXppZXI6IHQsIHR5cG9ncmFwaHk6IG8sIGZvbnRXZWlnaHQ6IG4gfSxcbiAgICAkaXNDb2xsYXBzZWQ6IHJcbiAgfSkgPT4gbzFgXG4gICAgZGlzcGxheTogJHtyID8gXCJub25lXCIgOiBcImJsb2NrXCJ9O1xuICAgIHdoaXRlLXNwYWNlOiBub3dyYXA7XG4gICAgdHJhbnNmb3JtOiByb3RhdGUoOTBkZWcpO1xuICAgIGN1cnNvcjogcG9pbnRlcjtcbiAgICBtYXJnaW4tdG9wOiAyMHB4O1xuICAgIHRyYW5zaXRpb246IHRyYW5zZm9ybSAwLjNzICR7dC5iYXNlfTtcbiAgICBmb250LXNpemU6ICR7by50MTJ9O1xuICAgIGZvbnQtd2VpZ2h0OiAke24ucmVndWxhcn07XG4gICAgY29sb3I6ICR7ZS50ZXh0SWNvbi50ZXh0UHJpbWFyeX07XG4gIGBcbiksIHpqID0gJC5oMShcbiAgKHtcbiAgICB0aGVtZTogeyBjb2xvcnM6IGUsIGN1YmljQmV6aWVyOiB0LCB0eXBvZ3JhcGh5OiBvLCBmb250V2VpZ2h0OiBuIH0sXG4gICAgJGlzQ29sbGFwc2VkOiByXG4gIH0pID0+IG8xYFxuICAgIGRpc3BsYXk6ICR7ciA/IFwiYmxvY2tcIiA6IFwibm9uZVwifTtcbiAgICB0cmFuc2l0aW9uOiB0cmFuc2Zvcm0gMC4zcyAke3QuYmFzZX07XG4gICAgZm9udC1zaXplOiAke28udDEyfTtcbiAgICBmb250LXdlaWdodDogJHtuLnJlZ3VsYXJ9O1xuICAgIGNvbG9yOiAke2UudGV4dEljb24udGV4dFByaW1hcnl9O1xuICAgIHdoaXRlLXNwYWNlOiBub3dyYXA7XG4gICAgbWFyZ2luOiAwO1xuICBgXG4pLCBoaiA9ICQuZGl2KFxuICAoeyB0aGVtZTogeyBjdWJpY0JlemllcjogZSB9LCAkaXNDb2xsYXBzZWQ6IHQgfSkgPT4gbzFgXG4gICAgcGFkZGluZy10b3A6IDE0cHg7XG4gICAgZGlzcGxheTogZmxleDtcbiAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcbiAgICBhbGlnbi1pdGVtczogY2VudGVyO1xuICAgIHRyYW5zaXRpb246IHRyYW5zZm9ybSAwLjNzICR7ZS5iYXNlfTtcbiAgICBib3gtc2l6aW5nOiBib3JkZXItYm94O1xuICAgICR7dCAmJiBvMWBcbiAgICAgIHBhZGRpbmc6IDE0cHggOHB4O1xuICAgICAganVzdGlmeS1jb250ZW50OiBzcGFjZS1iZXR3ZWVuO1xuICAgICAgdHJhbnNpdGlvbjogdHJhbnNmb3JtIDAuM3MgJHtlLmJhc2V9O1xuICAgIGB9XG4gIGBcbiksIE9qID0gJC5kaXYoXG4gICh7IHRoZW1lOiB7IGNvbG9yczogZSwgY3ViaWNCZXppZXI6IHQsIHNwYWNpbmdzOiBvIH0sICRpc0NvbGxhcHNlZDogbiB9KSA9PiBvMWBcbiAgICB0cmFuc2Zvcm0tb3JpZ2luOiBjZW50ZXI7XG4gICAgdHJhbnNmb3JtOiByb3RhdGUoJHtuID8gXCIxODBkZWdcIiA6IFwiMFwifSk7XG4gICAgdHJhbnNpdGlvbjogdHJhbnNmb3JtIDAuM3MgJHt0LmJhc2V9O1xuICAgIGN1cnNvcjogcG9pbnRlcjtcbiAgICBtYXgtd2lkdGg6IDE4cHg7XG4gICAgbWF4LWhlaWdodDogMThweDtcbiAgICBtaW4td2lkdGg6IDE4cHg7XG4gICAgbWluLWhlaWdodDogMThweDtcbiAgICBkaXNwbGF5OiBmbGV4O1xuICAgIGp1c3RpZnktY29udGVudDogY2VudGVyO1xuICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gICAgYm9yZGVyOiBub25lO1xuICAgIGNvbG9yOiAke2UudGV4dEljb24udGV4dFByaW1hcnl9O1xuICAgJHtuICYmIG8xYFxuICAgICAgYmFja2dyb3VuZDogJHtlLmJhY2tncm91bmRzLmJnUHJpbWFyeX07XG4gICAgICBib3JkZXI6IDFweCBzb2xpZCAke2UuYm9yZGVyLmJvcmRlclRlcnRpYXJ5fTtcbiAgICAgIGJvcmRlci1yYWRpdXM6IDUwJTtcbiAgICAgIFxuICAgIGB9XG4gIGBcbik7XG4kLmRpdmBcbiAgbWFyZ2luOiAwIC0xMHB4O1xuYDtcbmNvbnN0IGZqID0gJC5kaXYoXG4gICh7ICRpc0NvbGxhcHNlZDogZSB9KSA9PiBvMWBcbiAgICBkaXNwbGF5OiBibG9jaztcbiAgICBoZWlnaHQ6IDEwMCU7XG4gICAgJHshZSAmJiBvMWBcbiAgICAgIGRpc3BsYXk6IG5vbmU7XG4gICAgYH1cbiAgYFxuKTtcbiQuZGl2YFxuICB3aWR0aDogJHsoZSkgPT4gKGUuaXNFeGFtcGxlLCBcIjk2dndcIil9O1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAkeyh7IHRoZW1lOiB7IGNvbG9yczogZSB9IH0pID0+IGUud2hpdGV9O1xuYDtcbiQuZGl2KFxuICAoeyB0aGVtZTogeyBjb2xvcnM6IGUgfSwgaXNFeGFtcGxlOiB0IH0pID0+IG8xYFxuICAgIGRpc3BsYXk6IGZsZXg7XG4gICAganVzdGlmeS1jb250ZW50OiBmbGV4LXN0YXJ0O1xuICAgIGJvcmRlcjogMXB4IHNvbGlkICR7ZS5ib3JkZXIuYm9yZGVyUHJpbWFyeX07XG4gICAgcG9zaXRpb246IHJlbGF0aXZlO1xuICAgIGhlaWdodDogJHt0ID8gXCJhdXRvXCIgOiBcIjkzdmhcIn07XG4gICAgbWF4LXdpZHRoOiA5N3Z3O1xuICAgIGJhY2tncm91bmQ6ICR7ZS5iYWNrZ3JvdW5kcy5iZ1NlY29uZGFyeX07XG4gICAgLmFjdGlvbi1iYXItY29udGFpbmVyIHtcbiAgICAgIHBhZGRpbmc6IDAgOHB4O1xuICAgIH1cbiAgYFxuKTtcbiQuZGl2KFxuICAoeyB0aGVtZTogeyBjb2xvcnM6IGUgfSB9KSA9PiBvMWBcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAke2Uud2hpdGV9O1xuICBgXG4pO1xuJC5kaXZgXG4gIGZsZXgtZ3JvdzogMTtcbiAgaGVpZ2h0OiAxMDAlO1xuICBvdmVyZmxvdzogaGlkZGVuO1xuICBtYXJnaW4tcmlnaHQ6IDI0cHg7XG5gO1xuJC5kaXYoXG4gICh7IHRoZW1lOiB7IGNvbG9yczogZSB9IH0pID0+IG8xYFxuICBwYWRkaW5nOiAwIDEwcHg7XG4gIGNvbG9yOiR7ZS50ZXh0SWNvbi50ZXh0UHJpbWFyeX07XG4gIGBcbik7XG5jb25zdCBvJCA9ICh7IGNoaWxkcmVuOiBlLCB0aXRsZTogdCB9KSA9PiB7XG4gIGNvbnN0IFtvLCBuXSA9IFQxKCExKSwgciA9ICgpID0+IHtcbiAgICBuKCFvKTtcbiAgfTtcbiAgcmV0dXJuIC8qIEBfX1BVUkVfXyAqLyBlMShBaiwgeyAkaXNDb2xsYXBzZWQ6IG8sIGNoaWxkcmVuOiBbXG4gICAgLyogQF9fUFVSRV9fICovIGUxKGhqLCB7ICRpc0NvbGxhcHNlZDogbywgY2hpbGRyZW46IFtcbiAgICAgIC8qIEBfX1BVUkVfXyAqLyBjKHpqLCB7ICRpc0NvbGxhcHNlZDogbywgY2hpbGRyZW46IHQgfSksXG4gICAgICAvKiBAX19QVVJFX18gKi8gYyhPaiwgeyAkaXNDb2xsYXBzZWQ6IG8sIG9uQ2xpY2s6IHIsIGNoaWxkcmVuOiAvKiBAX19QVVJFX18gKi8gYyhaMSwgeyBuYW1lOiBcIkNoZXZyb25MZWZ0VGhpY2tcIiwgc2l6ZTogXCJ4eHh4c1wiIH0pIH0pXG4gICAgXSB9KSxcbiAgICAvKiBAX19QVVJFX18gKi8gYyh1aiwgeyAkaXNDb2xsYXBzZWQ6IG8sIG9uQ2xpY2s6IHIsIGNoaWxkcmVuOiB0IH0pLFxuICAgIC8qIEBfX1BVUkVfXyAqLyBjKGZqLCB7ICRpc0NvbGxhcHNlZDogbywgY2hpbGRyZW46IGUgfSlcbiAgXSB9KTtcbn07XG4kLmRpdmBcbiAgd2lkdGg6IDEwMDBweDtcbmA7XG5jb25zdCBnaiA9ICQuZGl2KFxuICAoeyB0aGVtZTogeyBjb2xvcnM6IGUsIHNwYWNpbmdzOiB0IH0sIGhhc1RhYnM6IG8gfSkgPT4gbzFgXG4gICAgd2lkdGg6IDEwMCU7XG4gICAgYmFja2dyb3VuZC1jb2xvcjogJHtlLnRvcEJhci50b3BCYXJCZ1NlY29uZGFyeX07XG4gICAgcGFkZGluZzogJHtvID8gYCR7dC5zcDR9ICR7dC5zcDEyfSAwICR7dC5zcDEyfWAgOiBgJHt0LnNwNH0gJHt0LnNwMTJ9ICR7dC5zcDZ9ICR7dC5zcDEyfWB9O1xuICAgIC5wYWdlLWJhY2sge1xuICAgICAgcGFkZGluZzogMDtcbiAgICAgIG1pbi13aWR0aDogYXV0bztcbiAgICAgIG91dGxpbmU6IDJweCBzb2xpZCB0cmFuc3BhcmVudDtcbiAgICAgICY6aG92ZXIge1xuICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAke2UuYmFja2dyb3VuZHMuYmdIb3ZlclByaW1hcnl9O1xuICAgICAgfVxuICAgICAgJjpmb2N1cyB7XG4gICAgICAgIGJhY2tncm91bmQtY29sb3I6ICR7ZS5iYWNrZ3JvdW5kcy5iZ0hvdmVyUHJpbWFyeX07XG4gICAgICAgIC5pY29uLXN5c3RlbSBzdmcgcGF0aCB7XG4gICAgICAgICAgZmlsbDogJHtlLnRleHRJY29uLnRleHRNZWRpdW1lbXBoYXNpc307XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgICY6Zm9jdXMge1xuICAgICAgICBib3gtc2hhZG93OiBub25lICFpbXBvcnRhbnQ7XG4gICAgICB9XG5cbiAgICAgICY6Zm9jdXMtdmlzaWJsZSB7XG4gICAgICAgIG91dGxpbmU6IDJweCBzb2xpZCAke2UuYm9yZGVyLmJvcmRlckZvY3VzZWR9O1xuICAgICAgfVxuICAgIH1cbiAgYFxuKSwgQ2ogPSAkLmgxKFxuICAoeyB0aGVtZTogeyBjb2xvcnM6IGUsIHR5cG9ncmFwaHk6IHQsIGZvbnRXZWlnaHQ6IG8sIGxpbmVIZWlnaHQ6IG4sIGZvbnRGYW1pbHk6IHIgfSB9KSA9PiBvMWBcbiAgICAgIGZvbnQtZmFtaWx5OiAke3IudGVydGlhcnl9O1xuICAgICAgZm9udC1zaXplOiAke3QudDIwfTtcbiAgICAgIGNvbG9yOiAke2UudGV4dEljb24udGV4dFByaW1hcnl9O1xuICAgICAgZm9udC13ZWlnaHQ6ICR7by5tZWRpdW19O1xuICAgICAgbGluZS1oZWlnaHQ6ICR7bi5saDI4fTtcbiAgICAgIG1hcmdpbjogMCAwIDRweCAwO1xuICAgIGBcbiksIG1qID0gJC5oMShcbiAgKHsgdGhlbWU6IHsgY29sb3JzOiBlLCB0eXBvZ3JhcGh5OiB0LCBmb250V2VpZ2h0OiBvIH0gfSkgPT4gbzFgXG4gICAgICBmb250LXNpemU6ICR7dC50MTR9O1xuICAgICAgY29sb3I6ICR7ZS50ZXh0SWNvbi50ZXh0TWVkaXVtZW1waGFzaXN9O1xuICAgICAgZm9udC13ZWlnaHQ6ICR7by5yZWd1bGFyfTtcbiAgICAgIG1hcmdpbjogMDtcbiAgICBgXG4pLCBMaiA9ICQuZGl2YFxuICBkaXNwbGF5OiBmbGV4O1xuICBqdXN0aWZ5LWNvbnRlbnQ6IGZsZXgtc3RhcnQ7XG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gIGdhcDogOHB4O1xuYCwgdmogPSAkLmRpdigoeyB0aGVtZTogeyBjb2xvcnM6IGUgfSB9KSA9PiBvMWBcbiAgICBkaXNwbGF5OiBmbGV4O1xuICAgIGp1c3RpZnktY29udGVudDogZmxleC1zdGFydDtcbiAgICBhbGlnbi1pdGVtczogYmFzZWxpbmU7XG4gICAgZ2FwOiA0cHg7XG4gICAgLmljb24tc3lzdGVtIHtcbiAgICAgIHBhZGRpbmc6IDZweCA1cHggIWltcG9ydGFudDtcbiAgICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgICBzdmcge1xuICAgICAgICB3aWR0aDogMTJweDtcbiAgICAgICAgcGF0aCB7XG4gICAgICAgICAgZmlsbDogJHtlLnRleHRJY29uLnRleHRNZWRpdW1lbXBoYXNpc307XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIGApLCBxaiA9ICQuZGl2YFxuICBkaXNwbGF5OiBmbGV4O1xuICBqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWJldHdlZW47XG4gIGFsaWduLWl0ZW1zOiBmbGV4LXN0YXJ0O1xuICBnYXA6IDhweDtcbiAgbWFyZ2luLXRvcDogOHB4O1xuYCwgeWogPSAkLmRpdmBgLCB3aiA9ICQuZGl2YFxuICBkaXNwbGF5OiBmbGV4O1xuICBqdXN0aWZ5LWNvbnRlbnQ6IGZsZXgtc3RhcnQ7XG4gIGFsaWduLWl0ZW1zOiBmbGV4LXN0YXJ0O1xuICBnYXA6IDhweDtcbmAsIHhqID0gJC5kaXZgXG4gIG1hcmdpbi10b3A6IDZweDtcbmAsIFdqID0gJC5kaXYoKHsgdGhlbWU6IHsgY29sb3JzOiBlIH0gfSkgPT4gbzFgXG4gICAgd2lkdGg6IDFweDtcbiAgICBoZWlnaHQ6IDMycHg7XG4gICAgYmFja2dyb3VuZC1jb2xvcjogJHtlLmJvcmRlci5ib3JkZXJUZXJ0aWFyeX07XG4gIGApLCBSaiA9ICQuZGl2YGAsIEZNID0gJC5kaXYoXG4gICh7XG4gICAgdGhlbWU6IHtcbiAgICAgIGJvcmRlclJhZGl1czogZSxcbiAgICAgIGxpbmVIZWlnaHQ6IHQsXG4gICAgICB0eXBvZ3JhcGh5OiBvLFxuICAgICAgY29sb3JzOiBuLFxuICAgICAgc2hhZG93czogcixcbiAgICAgIHNwYWNpbmdzOiBpLFxuICAgICAgR0xPQkFMX0lURU1fSEVJR0hUX0NPTkRFTlNFRDogYVxuICAgIH1cbiAgfSkgPT4gbzFgXG4gICAgICBkaXNwbGF5OiBmbGV4O1xuXG4gICAgICBwYWRkaW5nOiAwICR7aS5zcDR9O1xuICAgICAgYm9yZGVyLXJhZGl1czogJHtlLmJhc2V9O1xuICAgICAgZm9udC1zaXplOiAke28udDE0fTtcbiAgICAgIGxpbmUtaGVpZ2h0OiAke3QubGgyMn07XG4gICAgICBvdmVyZmxvdzogaGlkZGVuO1xuICAgICAgYm94LXNpemluZzogYm9yZGVyLWJveDtcbiAgICAgIGhlaWdodDogJHthfTtcbiAgICAgICR7VjN9IHtcbiAgICAgICAgJlthcmlhLWRpc2FibGVkPSd0cnVlJ10ge1xuICAgICAgICAgIGNvbG9yOiAke24udGV4dEljb24udGV4dERpc2FibGVkfSAhaW1wb3J0YW50O1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICAke1YzfSB7XG4gICAgICAgIGNvbG9yOiAke24udGV4dEljb24udGV4dFByaW1hcnl9O1xuICAgICAgICBwYWRkaW5nOiAwO1xuXG4gICAgICAgICY6bm90KDpkaXNhYmxlZCkge1xuICAgICAgICAgICY6aG92ZXIge1xuICAgICAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogJHtuLmJhY2tncm91bmRzLmJnSG92ZXJQcmltYXJ5fTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICAmOmFjdGl2ZSB7XG4gICAgICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAke24uYWN0aW9uQnV0dG9uLmFjdGlvbkJ1dHRvbkJnUHJlc3NlZEJ1dHRvbn07XG4gICAgICAgICAgICBib3JkZXI6IG5vbmU7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgJjpkaXNhYmxlZCB7XG4gICAgICAgICAgY29sb3I6ICR7bi5nYWluc2Jvcm99O1xuICAgICAgICB9XG4gICAgICB9XG4gICAgYFxuKSwgQmogPSAoZSkgPT4ge1xuICBjb25zdCB7XG4gICAgb25QcmV2Q2xpY2s6IHQsXG4gICAgb25OZXh0Q2xpY2s6IG8sXG4gICAgaXNEaXNhYmxlZFByZXY6IG4sXG4gICAgaXNEaXNhYmxlZE5leHQ6IHIsXG4gICAgLi4uaVxuICB9ID0gZSwgYSA9IF8xKCgpID0+IHtcbiAgICAhbiAmJiB0ICYmIHQoKTtcbiAgfSwgW24sIHRdKSwgcyA9IF8xKCgpID0+IHtcbiAgICAhciAmJiBvICYmIG8oKTtcbiAgfSwgW3IsIG9dKTtcbiAgcmV0dXJuIC8qIEBfX1BVUkVfXyAqLyBlMShGTSwgeyAuLi5pLCBjaGlsZHJlbjogW1xuICAgIC8qIEBfX1BVUkVfXyAqLyBjKFxuICAgICAgRzIsXG4gICAgICB7XG4gICAgICAgIGJ1dHRvblR5cGU6IFwibGlua1wiLFxuICAgICAgICBpc0Rpc2FibGVkOiBuLFxuICAgICAgICBzaXplOiBcInNtXCIsXG4gICAgICAgIG5hbWU6IFwiQ2hldnJvbkxlZnRcIixcbiAgICAgICAgb25DbGljazogYVxuICAgICAgfVxuICAgICksXG4gICAgLyogQF9fUFVSRV9fICovIGMoXG4gICAgICBHMixcbiAgICAgIHtcbiAgICAgICAgYnV0dG9uVHlwZTogXCJsaW5rXCIsXG4gICAgICAgIGlzRGlzYWJsZWQ6IHIsXG4gICAgICAgIHNpemU6IFwic21cIixcbiAgICAgICAgbmFtZTogXCJDaGV2cm9uUmlnaHRcIixcbiAgICAgICAgb25DbGljazogc1xuICAgICAgfVxuICAgIClcbiAgXSB9KTtcbn0sIFNqID0gKGUpID0+IHtcbiAgdmFyIG87XG4gIGNvbnN0IHQgPSAoKG8gPSBlWzBdKSA9PSBudWxsID8gdm9pZCAwIDogby5wcmV2aW91c0VsZW1lbnRTaWJsaW5nKSB8fCBudWxsO1xuICByZXR1cm4gdCBpbnN0YW5jZW9mIEhUTUxFbGVtZW50LCB0O1xufSwgRWogPSAoZSkgPT4ge1xuICB2YXIgbztcbiAgY29uc3QgdCA9ICgobyA9IGVbZS5sZW5ndGggLSAxXSkgPT0gbnVsbCA/IHZvaWQgMCA6IG8ubmV4dEVsZW1lbnRTaWJsaW5nKSB8fCBudWxsO1xuICByZXR1cm4gdCBpbnN0YW5jZW9mIEhUTUxFbGVtZW50ID8gdCA6IG51bGw7XG59LCBraiA9IChlKSA9PiB7XG4gIGNvbnN0IFt0LCBvXSA9IFQxKG51bGwpLCBbbiwgcl0gPSBUMShudWxsKTtcbiAgUDEoKCkgPT4ge1xuICAgIGNvbnN0IGwgPSBlLmN1cnJlbnQ7XG4gICAgaWYgKCFsKVxuICAgICAgcmV0dXJuO1xuICAgIGNvbnN0IHAgPSAoKSA9PiB7XG4gICAgICBjb25zdCBkID0gbC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSwgTSA9IEFycmF5LmZyb20obC5jaGlsZHJlbikuZmlsdGVyKCh1KSA9PiB7XG4gICAgICAgIGNvbnN0IEEgPSB1LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICAgICAgICByZXR1cm4gQS5sZWZ0ID49IGQubGVmdCAmJiBNYXRoLmZsb29yKEEucmlnaHQpIDw9IE1hdGguY2VpbChkLnJpZ2h0KTtcbiAgICAgIH0pO1xuICAgICAgTS5sZW5ndGggPiAwICYmIChvKFNqKE0pKSwgcihFaihNKSkpO1xuICAgIH07XG4gICAgcmV0dXJuIHAoKSwgbC5hZGRFdmVudExpc3RlbmVyKFwic2Nyb2xsXCIsIHApLCAoKSA9PiB7XG4gICAgICBsLnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJzY3JvbGxcIiwgcCk7XG4gICAgfTtcbiAgfSwgW2VdKTtcbiAgY29uc3QgaSA9IF8xKFxuICAgIChsLCBwID0gITEpID0+IHtcbiAgICAgIGNvbnN0IGQgPSBlLmN1cnJlbnQ7XG4gICAgICBpZiAoIWQgfHwgIWwpXG4gICAgICAgIHJldHVybjtcbiAgICAgIGNvbnN0IGIgPSBOdW1iZXIoZC5jbGllbnRXaWR0aCAqIDIgLyAzKSwgTSA9IGQuc2Nyb2xsTGVmdCArIChwID8gLWIgOiBiKTtcbiAgICAgIGQuc2Nyb2xsKHtcbiAgICAgICAgbGVmdDogTSxcbiAgICAgICAgYmVoYXZpb3I6IFwic21vb3RoXCJcbiAgICAgIH0pO1xuICAgIH0sXG4gICAgW2VdXG4gICksIGEgPSBfMShcbiAgICAoKSA9PiBpKHQsICEwKSxcbiAgICBbaSwgdF1cbiAgKSwgcyA9IF8xKFxuICAgICgpID0+IGkobiksXG4gICAgW2ksIG5dXG4gICk7XG4gIHJldHVybiB7XG4gICAgaGFzVGFic09uTGVmdDogdCAhPT0gbnVsbCxcbiAgICBoYXNUYWJzT25SaWdodDogbiAhPT0gbnVsbCxcbiAgICBzY3JvbGxMZWZ0OiBhLFxuICAgIHNjcm9sbFJpZ2h0OiBzXG4gIH07XG59LCBOaiA9ICQuZGl2YFxuICBkaXNwbGF5OiBmbGV4O1xuXG4gICR7Rk19IHtcbiAgICBmbGV4OiAwIDAgYXV0bztcbiAgfVxuYCwgVGogPSAkLmRpdmBcbiAgZGlzcGxheTogZmxleDtcbiAgZ2FwOiAkeyhlKSA9PiBlLmlzVGFibGVUYWIgPyAwIDogXCIwcHhcIn07XG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gIG92ZXJmbG93LXg6IHNjcm9sbDtcbiAgc2Nyb2xsLXNuYXAtdHlwZTogeCBtYW5kYXRvcnk7XG4gIC1tcy1vdmVyZmxvdy1zdHlsZTogbm9uZTtcbiAgc2Nyb2xsYmFyLXdpZHRoOiBub25lO1xuICB3aWR0aDogMTAwJTtcblxuICAmOjotd2Via2l0LXNjcm9sbGJhciB7XG4gICAgZGlzcGxheTogbm9uZTtcbiAgfVxuYCwgVmMgPSAkLmRpdihcbiAgKHsgdGhlbWU6IHsgY29sb3JzOiBlIH0gfSkgPT4gbzFgXG4gICAgcG9zaXRpb246IHJlbGF0aXZlO1xuXG4gICAgJjphZnRlciB7XG4gICAgICBjb250ZW50OiAnJztcbiAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICAgIGJvdHRvbTogMDtcbiAgICAgIGxlZnQ6IDA7XG4gICAgICB3aWR0aDogMTAwJTtcbiAgICAgIGhlaWdodDogMC41cHg7XG4gICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAke2UudGFiLnRhYkJvcmRlcn07XG4gICAgfVxuICBgXG4pLCBJaiA9IChlLCB0KSA9PiB7XG4gIGNvbnN0IHtcbiAgICB0YWJJdGVtczogbyA9IFtdLFxuICAgIGFjdGl2ZVRhYjogbiA9IG51bGwsXG4gICAgb25DaGFuZ2U6IHIsXG4gICAgY3VzdG9tVGFiOiBpLFxuICAgIGlzWkluZGV4UmV2ZXJzZTogYSxcbiAgICBpc1RhYmxlVGFiOiBzXG4gIH0gPSBlLCBsID0gbjAobnVsbCksIHAgPSAoKSA9PiBvLm1hcCgoQSwgeikgPT4ge1xuICAgIGNvbnN0IGYgPSAoKSA9PiByKEEpLCBPID0gKEEgPT0gbnVsbCA/IHZvaWQgMCA6IEEuY2hpbGRyZW4pID09PSAobiA9PSBudWxsID8gdm9pZCAwIDogbi5jaGlsZHJlbik7XG4gICAgcmV0dXJuIGEgJiYgKEEuc3R5bGUgPSB7XG4gICAgICAuLi5BLnN0eWxlLFxuICAgICAgekluZGV4OiBvLmxlbmd0aCAtIHpcbiAgICB9KSwgaSA/IGkoe1xuICAgICAgLi4uQSxcbiAgICAgIGlzQWN0aXZlOiBPLFxuICAgICAga2V5OiAoQSA9PSBudWxsID8gdm9pZCAwIDogQS5jaGlsZHJlbikgKyAoTyA/IFwiLXNlbGVjdGVkXCIgOiBcIi1ub3Qtc2VsZWN0ZWRcIikgfHwgeixcbiAgICAgIG9uQ2xpY2s6IGZcbiAgICB9KSA6IC8qIEBfX1BVUkVfXyAqLyBjKFZjLCB7IGNoaWxkcmVuOiAvKiBAX19QVVJFX18gKi8gY2UoXG4gICAgICBNNixcbiAgICAgIHtcbiAgICAgICAgLi4uQSxcbiAgICAgICAgaXNBY3RpdmU6IE8sXG4gICAgICAgIGtleTogKEEgPT0gbnVsbCA/IHZvaWQgMCA6IEEuY2hpbGRyZW4pICsgKE8gPyBcIi1zZWxlY3RlZFwiIDogXCItbm90LXNlbGVjdGVkXCIpIHx8IHosXG4gICAgICAgIG9uQ2xpY2s6IGZcbiAgICAgIH1cbiAgICApIH0pO1xuICB9KSwge1xuICAgIGhhc1RhYnNPbkxlZnQ6IGQsXG4gICAgaGFzVGFic09uUmlnaHQ6IGIsXG4gICAgc2Nyb2xsUmlnaHQ6IE0sXG4gICAgc2Nyb2xsTGVmdDogdVxuICB9ID0ga2oobCk7XG4gIHJldHVybiAvKiBAX19QVVJFX18gKi8gYyhWYywgeyBjaGlsZHJlbjogLyogQF9fUFVSRV9fICovIGUxKE5qLCB7IHJlZjogdCwgY2hpbGRyZW46IFtcbiAgICAvKiBAX19QVVJFX18gKi8gYyhUaiwgeyByZWY6IGwsIGlzVGFibGVUYWI6IHMsIGNoaWxkcmVuOiBwKCkgfSksXG4gICAgKGQgfHwgYikgJiYgLyogQF9fUFVSRV9fICovIGMoXG4gICAgICBCaixcbiAgICAgIHtcbiAgICAgICAgb25QcmV2Q2xpY2s6IHUsXG4gICAgICAgIG9uTmV4dENsaWNrOiBNLFxuICAgICAgICBpc0Rpc2FibGVkUHJldjogIWQsXG4gICAgICAgIGlzRGlzYWJsZWROZXh0OiAhYlxuICAgICAgfVxuICAgIClcbiAgXSB9KSB9KTtcbn0sIFhNID0gQjAoSWopLCByJCA9ICh7XG4gIGJyZWFkY3J1bWJEYXRhOiBlLFxuICBwYWdlVGl0bGU6IHQsXG4gIHBhZ2VTdWJUaXRsZTogbyxcbiAgYWN0aW9uRGF0YTogbixcbiAgaGFuZGxlQmFjazogcixcbiAgdGFiSXRlbXNEYXRhOiBpLFxuICBhY3RpdmVUYWJJdGVtOiBhLFxuICBvblRhYnNDaGFuZ2U6IHMsXG4gIHJpc2tJbmRpY2F0b3JUeXBlOiBsLFxuICByaXNrSW5kaWNhdG9yQ2hpbGRyZW46IHAsXG4gIHJpc2tJbmRpY2F0b3JTdHlsZTogZCxcbiAgc3RhdHVzSW5kaWNhdG9yVHlwZTogYixcbiAgc3RhdHVzSW5kaWNhdG9yQ2hpbGRyZW46IE0sXG4gIHN0YXR1c0luZGljYXRvclN0eWxlOiB1XG59KSA9PiAvKiBAX19QVVJFX18gKi8gZTEoXG4gIGdqLFxuICB7XG4gICAgaGFzVGFiczogISEoaSAmJiBpLmxlbmd0aCA+IDApLFxuICAgIGNoaWxkcmVuOiBbXG4gICAgICBlICYmIC8qIEBfX1BVUkVfXyAqLyBjKGFILCB7IGl0ZW1zTGlzdDogZSB9KSxcbiAgICAgIC8qIEBfX1BVUkVfXyAqLyBlMShxaiwgeyBjaGlsZHJlbjogW1xuICAgICAgICAvKiBAX19QVVJFX18gKi8gYyh5aiwgeyBjaGlsZHJlbjogLyogQF9fUFVSRV9fICovIGUxKHZqLCB7IGNoaWxkcmVuOiBbXG4gICAgICAgICAgciAmJiAvKiBAX19QVVJFX18gKi8gYyhcbiAgICAgICAgICAgIEcyLFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICBjbGFzc05hbWU6IFwicGFnZS1iYWNrXCIsXG4gICAgICAgICAgICAgIG5hbWU6IFwiQ2hldnJvbkxlZnRcIixcbiAgICAgICAgICAgICAgc2l6ZTogXCJzbVwiLFxuICAgICAgICAgICAgICBidXR0b25UeXBlOiBcImxpbmtcIixcbiAgICAgICAgICAgICAgb25DbGljazogclxuICAgICAgICAgICAgfVxuICAgICAgICAgICksXG4gICAgICAgICAgLyogQF9fUFVSRV9fICovIGUxKFwiZGl2XCIsIHsgY2hpbGRyZW46IFtcbiAgICAgICAgICAgIC8qIEBfX1BVUkVfXyAqLyBjKENqLCB7IGNoaWxkcmVuOiB0IH0pLFxuICAgICAgICAgICAgLyogQF9fUFVSRV9fICovIGUxKExqLCB7IGNoaWxkcmVuOiBbXG4gICAgICAgICAgICAgIG8gJiYgLyogQF9fUFVSRV9fICovIGMobWosIHsgY2hpbGRyZW46IG8gfSksXG4gICAgICAgICAgICAgIGwgJiYgLyogQF9fUFVSRV9fICovIGMoXG4gICAgICAgICAgICAgICAgbzUsXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgdHlwZTogbCxcbiAgICAgICAgICAgICAgICAgIGNoaWxkcmVuOiBwLFxuICAgICAgICAgICAgICAgICAgc3R5bGU6IGRcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgIGIgJiYgLyogQF9fUFVSRV9fICovIGMoXG4gICAgICAgICAgICAgICAgbTQsXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgdHlwZTogYixcbiAgICAgICAgICAgICAgICAgIGNoaWxkcmVuOiBNLFxuICAgICAgICAgICAgICAgICAgc3R5bGU6IHVcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIClcbiAgICAgICAgICAgIF0gfSlcbiAgICAgICAgICBdIH0pXG4gICAgICAgIF0gfSkgfSksXG4gICAgICAgIC8qIEBfX1BVUkVfXyAqLyBlMSh3aiwgeyBjaGlsZHJlbjogW1xuICAgICAgICAgIC8qIEBfX1BVUkVfXyAqLyBjKFJqLCB7IGlkOiBcInJpZ2h0LXNpZGUtYWN0aW9uLWNvbnRyb2xzXCIgfSksXG4gICAgICAgICAgbiAmJiAvKiBAX19QVVJFX18gKi8gYyhzMCwgeyBjaGlsZHJlbjogbi5tYXAoKEEsIHopID0+IC8qIEBfX1BVUkVfXyAqLyBlMShtMS5GcmFnbWVudCwgeyBjaGlsZHJlbjogW1xuICAgICAgICAgICAgQS5jb21wb25lbnQgPT09IFwiQnV0dG9uSWNvblwiID8gLyogQF9fUFVSRV9fICovIGMoXG4gICAgICAgICAgICAgIFg2LFxuICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgYnV0dG9uVHlwZTogQS5idXR0b25UeXBlLFxuICAgICAgICAgICAgICAgICRpY29uTGVmdDogQS5pY29uTGVmdCxcbiAgICAgICAgICAgICAgICBjaGlsZHJlbjogQS50ZXh0LFxuICAgICAgICAgICAgICAgIG9uQ2xpY2s6IEEuaGFuZGxlQ2xpY2ssXG4gICAgICAgICAgICAgICAgc2l6ZTogXCJzbVwiLFxuICAgICAgICAgICAgICAgIGlzRGlzYWJsZWQ6IEEuaXNEaXNhYmxlZFxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICApIDogLyogQF9fUFVSRV9fICovIGMoXG4gICAgICAgICAgICAgIEcyLFxuICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgYnV0dG9uVHlwZTogQS5idXR0b25UeXBlLFxuICAgICAgICAgICAgICAgIG5hbWU6IEEuaWNvbkxlZnQsXG4gICAgICAgICAgICAgICAgb25DbGljazogQS5oYW5kbGVDbGljayxcbiAgICAgICAgICAgICAgICBzaXplOiBcInNtXCIsXG4gICAgICAgICAgICAgICAgaXNEaXNhYmxlZDogQS5pc0Rpc2FibGVkXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICksXG4gICAgICAgICAgICBBLmhhc0RpdmlkZXIgJiYgLyogQF9fUFVSRV9fICovIGMoV2osIHt9KVxuICAgICAgICAgIF0gfSwgeikpIH0pXG4gICAgICAgIF0gfSlcbiAgICAgIF0gfSksXG4gICAgICBpICYmIC8qIEBfX1BVUkVfXyAqLyBjKHhqLCB7IGNoaWxkcmVuOiAvKiBAX19QVVJFX18gKi8gYyhcbiAgICAgICAgWE0sXG4gICAgICAgIHtcbiAgICAgICAgICB0YWJJdGVtczogaSxcbiAgICAgICAgICBhY3RpdmVUYWI6IGEsXG4gICAgICAgICAgb25DaGFuZ2U6IHNcbiAgICAgICAgfVxuICAgICAgKSB9KVxuICAgIF1cbiAgfVxuKTtcbmZ1bmN0aW9uIGoyKCkge1xuICByZXR1cm4gKGoyID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbihlKSB7XG4gICAgZm9yICh2YXIgdCA9IDE7IHQgPCBhcmd1bWVudHMubGVuZ3RoOyB0KyspIHtcbiAgICAgIHZhciBvID0gYXJndW1lbnRzW3RdO1xuICAgICAgZm9yICh2YXIgbiBpbiBvKVxuICAgICAgICBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwobywgbikgJiYgKGVbbl0gPSBvW25dKTtcbiAgICB9XG4gICAgcmV0dXJuIGU7XG4gIH0pLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG59XG52YXIgRGogPSBmdW5jdGlvbigpIHtcbn07XG5mdW5jdGlvbiBVTShlLCB0KSB7XG4gIHJldHVybiBNYXRoLnJhbmRvbSgpICogKHQgLSBlICsgMSkgKyBlO1xufVxuZnVuY3Rpb24gUGMoZSwgdCkge1xuICByZXR1cm4gTWF0aC5mbG9vcihVTShlLCB0KSk7XG59XG52YXIgSGogPSBCMChmdW5jdGlvbihlLCB0KSB7XG4gIHZhciBvID0gZS5wcm9ncmVzcywgbiA9IGUuaGVpZ2h0LCByID0gbiA9PT0gdm9pZCAwID8gMiA6IG4sIGkgPSBlLmNsYXNzTmFtZSwgYSA9IGkgPT09IHZvaWQgMCA/IFwiXCIgOiBpLCBzID0gZS5jb2xvciwgbCA9IHMgPT09IHZvaWQgMCA/IFwicmVkXCIgOiBzLCBwID0gZS5iYWNrZ3JvdW5kLCBkID0gcCA9PT0gdm9pZCAwID8gXCJ0cmFuc3BhcmVudFwiIDogcCwgYiA9IGUub25Mb2FkZXJGaW5pc2hlZCwgTSA9IGUudHJhbnNpdGlvblRpbWUsIHUgPSBNID09PSB2b2lkIDAgPyAzMDAgOiBNLCBBID0gZS5sb2FkZXJTcGVlZCwgeiA9IEEgPT09IHZvaWQgMCA/IDUwMCA6IEEsIGYgPSBlLndhaXRpbmdUaW1lLCBPID0gZiA9PT0gdm9pZCAwID8gMWUzIDogZiwgaCA9IGUuc2hhZG93LCBnID0gaCA9PT0gdm9pZCAwIHx8IGgsIHYgPSBlLmNvbnRhaW5lclN0eWxlLCBMID0gdiA9PT0gdm9pZCAwID8ge30gOiB2LCB5ID0gZS5zdHlsZSwgQiA9IHkgPT09IHZvaWQgMCA/IHt9IDogeSwgWCA9IGUuc2hhZG93U3R5bGUsIEYgPSBYID09PSB2b2lkIDAgPyB7fSA6IFgsIFQgPSBlLmNvbnRhaW5lckNsYXNzTmFtZSwgdyA9IFQgPT09IHZvaWQgMCA/IFwiXCIgOiBULCBIID0gbjAoITEpLCBDID0gVDEoMCksIHEgPSBDWzBdLCBtID0gQ1sxXSwgayA9IG4wKHsgYWN0aXZlOiAhMSwgcmVmcmVzaFJhdGU6IDFlMyB9KSwgeCA9IFQxKCExKSwgTiA9IHhbMF0sIFYgPSB4WzFdLCBSID0gVDEoeyBhY3RpdmU6ICExLCB2YWx1ZTogMjAgfSksIEkgPSBSWzBdLCBqID0gUlsxXSwgVSA9IHsgcG9zaXRpb246IFwiZml4ZWRcIiwgdG9wOiAwLCBsZWZ0OiAwLCBoZWlnaHQ6IHIsIGJhY2tncm91bmQ6IGQsIHpJbmRleDogOTk5OTk5OTk5OTksIHdpZHRoOiBcIjEwMCVcIiB9LCBfID0geyBib3hTaGFkb3c6IFwiMCAwIDEwcHggXCIgKyBsICsgXCIsIDAgMCAxMHB4IFwiICsgbCwgd2lkdGg6IFwiNSVcIiwgb3BhY2l0eTogMSwgcG9zaXRpb246IFwiYWJzb2x1dGVcIiwgaGVpZ2h0OiBcIjEwMCVcIiwgdHJhbnNpdGlvbjogXCJhbGwgXCIgKyB6ICsgXCJtcyBlYXNlXCIsIHRyYW5zZm9ybTogXCJyb3RhdGUoM2RlZykgdHJhbnNsYXRlKDBweCwgLTRweClcIiwgbGVmdDogXCItMTByZW1cIiB9LCByMSA9IFQxKHsgaGVpZ2h0OiBcIjEwMCVcIiwgYmFja2dyb3VuZDogbCwgdHJhbnNpdGlvbjogXCJhbGwgXCIgKyB6ICsgXCJtcyBlYXNlXCIsIHdpZHRoOiBcIjAlXCIgfSksIEsgPSByMVswXSwgUSA9IHIxWzFdLCBFID0gVDEoXyksIEQgPSBFWzBdLCBHID0gRVsxXTtcbiAgUDEoZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIEguY3VycmVudCA9ICEwLCBmdW5jdGlvbigpIHtcbiAgICAgIEguY3VycmVudCA9ICExO1xuICAgIH07XG4gIH0sIFtdKSwgQnIodCwgZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIHsgY29udGludW91c1N0YXJ0OiBmdW5jdGlvbihZLCBaKSB7XG4gICAgICBpZiAoWiA9PT0gdm9pZCAwICYmIChaID0gMWUzKSwgIUkuYWN0aXZlKVxuICAgICAgICBpZiAoTilcbiAgICAgICAgICBjb25zb2xlLndhcm4oXCJyZWFjdC10b3AtbG9hZGluZy1iYXI6IFlvdSBjYW4ndCB1c2UgYm90aCBjb250cm9sbGluZyBieSBwcm9wcyBhbmQgcmVmIG1ldGhvZHMgdG8gY29udHJvbCB0aGUgYmFyIVwiKTtcbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgdmFyIHQxID0gWSB8fCBQYygxMCwgMjApO1xuICAgICAgICAgIGsuY3VycmVudCA9IHsgYWN0aXZlOiAhMCwgcmVmcmVzaFJhdGU6IFogfSwgbSh0MSksIFAodDEpO1xuICAgICAgICB9XG4gICAgfSwgc3RhdGljU3RhcnQ6IGZ1bmN0aW9uKFkpIHtcbiAgICAgIGlmICghay5jdXJyZW50LmFjdGl2ZSlcbiAgICAgICAgaWYgKE4pXG4gICAgICAgICAgY29uc29sZS53YXJuKFwicmVhY3QtdG9wLWxvYWRpbmctYmFyOiBZb3UgY2FuJ3QgdXNlIGJvdGggY29udHJvbGxpbmcgYnkgcHJvcHMgYW5kIHJlZiBtZXRob2RzIHRvIGNvbnRyb2wgdGhlIGJhciFcIik7XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgIHZhciBaID0gWSB8fCBQYygzMCwgNTApO1xuICAgICAgICAgIGooeyBhY3RpdmU6ICEwLCB2YWx1ZTogWiB9KSwgbShaKSwgUChaKTtcbiAgICAgICAgfVxuICAgIH0sIGNvbXBsZXRlOiBmdW5jdGlvbigpIHtcbiAgICAgIE4gPyBjb25zb2xlLndhcm4oXCJyZWFjdC10b3AtbG9hZGluZy1iYXI6IFlvdSBjYW4ndCB1c2UgYm90aCBjb250cm9sbGluZyBieSBwcm9wcyBhbmQgcmVmIG1ldGhvZHMgdG8gY29udHJvbCB0aGUgYmFyIVwiKSA6IChtKDEwMCksIFAoMTAwKSk7XG4gICAgfSB9O1xuICB9KSwgUDEoZnVuY3Rpb24oKSB7XG4gICAgUShqMih7fSwgSywgeyBiYWNrZ3JvdW5kOiBsIH0pKSwgRyhqMih7fSwgRCwgeyBib3hTaGFkb3c6IFwiMCAwIDEwcHggXCIgKyBsICsgXCIsIDAgMCA1cHggXCIgKyBsIH0pKTtcbiAgfSwgW2xdKSwgUDEoZnVuY3Rpb24oKSB7XG4gICAgaWYgKHQpIHtcbiAgICAgIGlmICh0ICYmIG8gIT09IHZvaWQgMClcbiAgICAgICAgcmV0dXJuIHZvaWQgY29uc29sZS53YXJuKGByZWFjdC10b3AtbG9hZGluZy1iYXI6IFlvdSBjYW4ndCB1c2UgYm90aCBjb250cm9sbGluZyBieSBwcm9wcyBhbmQgcmVmIG1ldGhvZHMgdG8gY29udHJvbCB0aGUgYmFyISBQbGVhc2UgdXNlIG9ubHkgcHJvcHMgb3Igb25seSByZWYgbWV0aG9kcyEgUmVmIG1ldGhvZHMgd2lsbCBvdmVycmlkZSBwcm9wcyBpZiBcInJlZlwiIHByb3BlcnR5IGlzIGF2YWlsYWJsZS5gKTtcbiAgICAgIFAocSksIFYoITEpO1xuICAgIH0gZWxzZVxuICAgICAgbyAmJiBQKG8pLCBWKCEwKTtcbiAgfSwgW29dKTtcbiAgdmFyIEosIFMsIFcsIFAgPSBmdW5jdGlvbiBZKFopIHtcbiAgICBaID49IDEwMCA/IChRKGoyKHt9LCBLLCB7IHdpZHRoOiBcIjEwMCVcIiB9KSksIGcgJiYgRyhqMih7fSwgRCwgeyBsZWZ0OiBaIC0gMTAgKyBcIiVcIiB9KSksIHNldFRpbWVvdXQoZnVuY3Rpb24oKSB7XG4gICAgICBILmN1cnJlbnQgJiYgKFEoajIoe30sIEssIHsgb3BhY2l0eTogMCwgd2lkdGg6IFwiMTAwJVwiLCB0cmFuc2l0aW9uOiBcImFsbCBcIiArIHUgKyBcIm1zIGVhc2Utb3V0XCIsIGNvbG9yOiBsIH0pKSwgc2V0VGltZW91dChmdW5jdGlvbigpIHtcbiAgICAgICAgSC5jdXJyZW50ICYmIChrLmN1cnJlbnQuYWN0aXZlICYmIChrLmN1cnJlbnQgPSBqMih7fSwgay5jdXJyZW50LCB7IGFjdGl2ZTogITEgfSksIG0oMCksIFkoMCkpLCBJLmFjdGl2ZSAmJiAoaihqMih7fSwgSSwgeyBhY3RpdmU6ICExIH0pKSwgbSgwKSwgWSgwKSksIGIgJiYgYigpLCBtKDApLCBZKDApKTtcbiAgICAgIH0sIHUpKTtcbiAgICB9LCBPKSkgOiAoUShmdW5jdGlvbih0MSkge1xuICAgICAgcmV0dXJuIGoyKHt9LCB0MSwgeyB3aWR0aDogWiArIFwiJVwiLCBvcGFjaXR5OiAxLCB0cmFuc2l0aW9uOiBaID4gMCA/IFwiYWxsIFwiICsgeiArIFwibXMgZWFzZVwiIDogXCJcIiB9KTtcbiAgICB9KSwgZyAmJiBHKGoyKHt9LCBELCB7IGxlZnQ6IFogLSA1LjUgKyBcIiVcIiwgdHJhbnNpdGlvbjogWiA+IDAgPyBcImFsbCBcIiArIHogKyBcIm1zIGVhc2VcIiA6IFwiXCIgfSkpKTtcbiAgfTtcbiAgcmV0dXJuIEogPSBmdW5jdGlvbigpIHtcbiAgICB2YXIgWSA9IFVNKE1hdGgubWluKDEwLCAoMTAwIC0gcSkgLyA1KSwgTWF0aC5taW4oMjAsICgxMDAgLSBxKSAvIDMpKTtcbiAgICBxICsgWSA8IDk1ICYmIChtKHEgKyBZKSwgUChxICsgWSkpO1xuICB9LCBTID0gay5jdXJyZW50LmFjdGl2ZSA/IGsuY3VycmVudC5yZWZyZXNoUmF0ZSA6IG51bGwsIFcgPSBuMChEaiksIFAxKGZ1bmN0aW9uKCkge1xuICAgIFcuY3VycmVudCA9IEo7XG4gIH0pLCBQMShmdW5jdGlvbigpIHtcbiAgfSwgW3ZvaWQgMF0pLCBQMShmdW5jdGlvbigpIHtcbiAgICBpZiAoUyAhPT0gbnVsbCAmJiBTICE9PSAhMSkge1xuICAgICAgdmFyIFkgPSBzZXRJbnRlcnZhbChmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIFcuY3VycmVudCgpO1xuICAgICAgfSwgUyk7XG4gICAgICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiBjbGVhckludGVydmFsKFkpO1xuICAgICAgfTtcbiAgICB9XG4gIH0sIFtTXSksIGNlKFwiZGl2XCIsIHsgY2xhc3NOYW1lOiB3LCBzdHlsZTogajIoe30sIFUsIEwpIH0sIGNlKFwiZGl2XCIsIHsgY2xhc3NOYW1lOiBhLCBzdHlsZTogajIoe30sIEssIEIpIH0sIGcgPyBjZShcImRpdlwiLCB7IHN0eWxlOiBqMih7fSwgRCwgRikgfSkgOiBudWxsKSk7XG59KTtcbmZ1bmN0aW9uIFZqKHsgdGhlbWU6IGUsIC4uLnQgfSkge1xuICByZXR1cm4gLyogQF9fUFVSRV9fICovIGMoXG4gICAgSGosXG4gICAge1xuICAgICAgLi4udCxcbiAgICAgIGNvbG9yOiBlLmNvbG9ycy5iYWNrZ3JvdW5kcy5iZ0luZm9ybWF0aW9uYWxQcmltYXJ5LFxuICAgICAgaGVpZ2h0OiA0LFxuICAgICAgc2hhZG93OiAhMVxuICAgIH1cbiAgKTtcbn1cbmNvbnN0IG4kID0gckEoVmopO1xudmFyIFlNID0geyBleHBvcnRzOiB7fSB9LCBHTSA9IHsgZXhwb3J0czoge30gfTtcbmNvbnN0IFBqID0gLyogQF9fUFVSRV9fICovIHpsKEFaKTtcbihmdW5jdGlvbihlKSB7XG4gIC8vISBtb21lbnQtdGltZXpvbmUuanNcbiAgLy8hIHZlcnNpb24gOiAwLjUuNDZcbiAgLy8hIENvcHlyaWdodCAoYykgSlMgRm91bmRhdGlvbiBhbmQgb3RoZXIgY29udHJpYnV0b3JzXG4gIC8vISBsaWNlbnNlIDogTUlUXG4gIC8vISBnaXRodWIuY29tL21vbWVudC9tb21lbnQtdGltZXpvbmVcbiAgKGZ1bmN0aW9uKHQsIG8pIHtcbiAgICBlLmV4cG9ydHMgPyBlLmV4cG9ydHMgPSBvKFBqKSA6IG8odC5tb21lbnQpO1xuICB9KShENSwgZnVuY3Rpb24odCkge1xuICAgIHQudmVyc2lvbiA9PT0gdm9pZCAwICYmIHQuZGVmYXVsdCAmJiAodCA9IHQuZGVmYXVsdCk7XG4gICAgdmFyIG8gPSBcIjAuNS40NlwiLCBuID0ge30sIHIgPSB7fSwgaSA9IHt9LCBhID0ge30sIHMgPSB7fSwgbDtcbiAgICAoIXQgfHwgdHlwZW9mIHQudmVyc2lvbiAhPSBcInN0cmluZ1wiKSAmJiBLKFwiTW9tZW50IFRpbWV6b25lIHJlcXVpcmVzIE1vbWVudC5qcy4gU2VlIGh0dHBzOi8vbW9tZW50anMuY29tL3RpbWV6b25lL2RvY3MvIy91c2UtaXQvYnJvd3Nlci9cIik7XG4gICAgdmFyIHAgPSB0LnZlcnNpb24uc3BsaXQoXCIuXCIpLCBkID0gK3BbMF0sIGIgPSArcFsxXTtcbiAgICAoZCA8IDIgfHwgZCA9PT0gMiAmJiBiIDwgNikgJiYgSyhcIk1vbWVudCBUaW1lem9uZSByZXF1aXJlcyBNb21lbnQuanMgPj0gMi42LjAuIFlvdSBhcmUgdXNpbmcgTW9tZW50LmpzIFwiICsgdC52ZXJzaW9uICsgXCIuIFNlZSBtb21lbnRqcy5jb21cIik7XG4gICAgZnVuY3Rpb24gTShXKSB7XG4gICAgICByZXR1cm4gVyA+IDk2ID8gVyAtIDg3IDogVyA+IDY0ID8gVyAtIDI5IDogVyAtIDQ4O1xuICAgIH1cbiAgICBmdW5jdGlvbiB1KFcpIHtcbiAgICAgIHZhciBQID0gMCwgWSA9IFcuc3BsaXQoXCIuXCIpLCBaID0gWVswXSwgdDEgPSBZWzFdIHx8IFwiXCIsIGkxID0gMSwgbjEsIHMxID0gMCwgZDEgPSAxO1xuICAgICAgZm9yIChXLmNoYXJDb2RlQXQoMCkgPT09IDQ1ICYmIChQID0gMSwgZDEgPSAtMSksIFA7IFAgPCBaLmxlbmd0aDsgUCsrKVxuICAgICAgICBuMSA9IE0oWi5jaGFyQ29kZUF0KFApKSwgczEgPSA2MCAqIHMxICsgbjE7XG4gICAgICBmb3IgKFAgPSAwOyBQIDwgdDEubGVuZ3RoOyBQKyspXG4gICAgICAgIGkxID0gaTEgLyA2MCwgbjEgPSBNKHQxLmNoYXJDb2RlQXQoUCkpLCBzMSArPSBuMSAqIGkxO1xuICAgICAgcmV0dXJuIHMxICogZDE7XG4gICAgfVxuICAgIGZ1bmN0aW9uIEEoVykge1xuICAgICAgZm9yICh2YXIgUCA9IDA7IFAgPCBXLmxlbmd0aDsgUCsrKVxuICAgICAgICBXW1BdID0gdShXW1BdKTtcbiAgICB9XG4gICAgZnVuY3Rpb24geihXLCBQKSB7XG4gICAgICBmb3IgKHZhciBZID0gMDsgWSA8IFA7IFkrKylcbiAgICAgICAgV1tZXSA9IE1hdGgucm91bmQoKFdbWSAtIDFdIHx8IDApICsgV1tZXSAqIDZlNCk7XG4gICAgICBXW1AgLSAxXSA9IDEgLyAwO1xuICAgIH1cbiAgICBmdW5jdGlvbiBmKFcsIFApIHtcbiAgICAgIHZhciBZID0gW10sIFo7XG4gICAgICBmb3IgKFogPSAwOyBaIDwgUC5sZW5ndGg7IForKylcbiAgICAgICAgWVtaXSA9IFdbUFtaXV07XG4gICAgICByZXR1cm4gWTtcbiAgICB9XG4gICAgZnVuY3Rpb24gTyhXKSB7XG4gICAgICB2YXIgUCA9IFcuc3BsaXQoXCJ8XCIpLCBZID0gUFsyXS5zcGxpdChcIiBcIiksIFogPSBQWzNdLnNwbGl0KFwiXCIpLCB0MSA9IFBbNF0uc3BsaXQoXCIgXCIpO1xuICAgICAgcmV0dXJuIEEoWSksIEEoWiksIEEodDEpLCB6KHQxLCBaLmxlbmd0aCksIHtcbiAgICAgICAgbmFtZTogUFswXSxcbiAgICAgICAgYWJicnM6IGYoUFsxXS5zcGxpdChcIiBcIiksIFopLFxuICAgICAgICBvZmZzZXRzOiBmKFksIFopLFxuICAgICAgICB1bnRpbHM6IHQxLFxuICAgICAgICBwb3B1bGF0aW9uOiBQWzVdIHwgMFxuICAgICAgfTtcbiAgICB9XG4gICAgZnVuY3Rpb24gaChXKSB7XG4gICAgICBXICYmIHRoaXMuX3NldChPKFcpKTtcbiAgICB9XG4gICAgZnVuY3Rpb24gZyhXLCBQKSB7XG4gICAgICB2YXIgWSA9IFAubGVuZ3RoO1xuICAgICAgaWYgKFcgPCBQWzBdKVxuICAgICAgICByZXR1cm4gMDtcbiAgICAgIGlmIChZID4gMSAmJiBQW1kgLSAxXSA9PT0gMSAvIDAgJiYgVyA+PSBQW1kgLSAyXSlcbiAgICAgICAgcmV0dXJuIFkgLSAxO1xuICAgICAgaWYgKFcgPj0gUFtZIC0gMV0pXG4gICAgICAgIHJldHVybiAtMTtcbiAgICAgIGZvciAodmFyIFosIHQxID0gMCwgaTEgPSBZIC0gMTsgaTEgLSB0MSA+IDE7IClcbiAgICAgICAgWiA9IE1hdGguZmxvb3IoKHQxICsgaTEpIC8gMiksIFBbWl0gPD0gVyA/IHQxID0gWiA6IGkxID0gWjtcbiAgICAgIHJldHVybiBpMTtcbiAgICB9XG4gICAgaC5wcm90b3R5cGUgPSB7XG4gICAgICBfc2V0OiBmdW5jdGlvbihXKSB7XG4gICAgICAgIHRoaXMubmFtZSA9IFcubmFtZSwgdGhpcy5hYmJycyA9IFcuYWJicnMsIHRoaXMudW50aWxzID0gVy51bnRpbHMsIHRoaXMub2Zmc2V0cyA9IFcub2Zmc2V0cywgdGhpcy5wb3B1bGF0aW9uID0gVy5wb3B1bGF0aW9uO1xuICAgICAgfSxcbiAgICAgIF9pbmRleDogZnVuY3Rpb24oVykge1xuICAgICAgICB2YXIgUCA9ICtXLCBZID0gdGhpcy51bnRpbHMsIFo7XG4gICAgICAgIGlmIChaID0gZyhQLCBZKSwgWiA+PSAwKVxuICAgICAgICAgIHJldHVybiBaO1xuICAgICAgfSxcbiAgICAgIGNvdW50cmllczogZnVuY3Rpb24oKSB7XG4gICAgICAgIHZhciBXID0gdGhpcy5uYW1lO1xuICAgICAgICByZXR1cm4gT2JqZWN0LmtleXMoaSkuZmlsdGVyKGZ1bmN0aW9uKFApIHtcbiAgICAgICAgICByZXR1cm4gaVtQXS56b25lcy5pbmRleE9mKFcpICE9PSAtMTtcbiAgICAgICAgfSk7XG4gICAgICB9LFxuICAgICAgcGFyc2U6IGZ1bmN0aW9uKFcpIHtcbiAgICAgICAgdmFyIFAgPSArVywgWSA9IHRoaXMub2Zmc2V0cywgWiA9IHRoaXMudW50aWxzLCB0MSA9IFoubGVuZ3RoIC0gMSwgaTEsIG4xLCBzMSwgZDE7XG4gICAgICAgIGZvciAoZDEgPSAwOyBkMSA8IHQxOyBkMSsrKVxuICAgICAgICAgIGlmIChpMSA9IFlbZDFdLCBuMSA9IFlbZDEgKyAxXSwgczEgPSBZW2QxICYmIGQxIC0gMV0sIGkxIDwgbjEgJiYgUS5tb3ZlQW1iaWd1b3VzRm9yd2FyZCA/IGkxID0gbjEgOiBpMSA+IHMxICYmIFEubW92ZUludmFsaWRGb3J3YXJkICYmIChpMSA9IHMxKSwgUCA8IFpbZDFdIC0gaTEgKiA2ZTQpXG4gICAgICAgICAgICByZXR1cm4gWVtkMV07XG4gICAgICAgIHJldHVybiBZW3QxXTtcbiAgICAgIH0sXG4gICAgICBhYmJyOiBmdW5jdGlvbihXKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmFiYnJzW3RoaXMuX2luZGV4KFcpXTtcbiAgICAgIH0sXG4gICAgICBvZmZzZXQ6IGZ1bmN0aW9uKFcpIHtcbiAgICAgICAgcmV0dXJuIEsoXCJ6b25lLm9mZnNldCBoYXMgYmVlbiBkZXByZWNhdGVkIGluIGZhdm9yIG9mIHpvbmUudXRjT2Zmc2V0XCIpLCB0aGlzLm9mZnNldHNbdGhpcy5faW5kZXgoVyldO1xuICAgICAgfSxcbiAgICAgIHV0Y09mZnNldDogZnVuY3Rpb24oVykge1xuICAgICAgICByZXR1cm4gdGhpcy5vZmZzZXRzW3RoaXMuX2luZGV4KFcpXTtcbiAgICAgIH1cbiAgICB9O1xuICAgIGZ1bmN0aW9uIHYoVywgUCkge1xuICAgICAgdGhpcy5uYW1lID0gVywgdGhpcy56b25lcyA9IFA7XG4gICAgfVxuICAgIGZ1bmN0aW9uIEwoVykge1xuICAgICAgdmFyIFAgPSBXLnRvVGltZVN0cmluZygpLCBZID0gUC5tYXRjaCgvXFwoW2EteiBdK1xcKS9pKTtcbiAgICAgIFkgJiYgWVswXSA/IChZID0gWVswXS5tYXRjaCgvW0EtWl0vZyksIFkgPSBZID8gWS5qb2luKFwiXCIpIDogdm9pZCAwKSA6IChZID0gUC5tYXRjaCgvW0EtWl17Myw1fS9nKSwgWSA9IFkgPyBZWzBdIDogdm9pZCAwKSwgWSA9PT0gXCJHTVRcIiAmJiAoWSA9IHZvaWQgMCksIHRoaXMuYXQgPSArVywgdGhpcy5hYmJyID0gWSwgdGhpcy5vZmZzZXQgPSBXLmdldFRpbWV6b25lT2Zmc2V0KCk7XG4gICAgfVxuICAgIGZ1bmN0aW9uIHkoVykge1xuICAgICAgdGhpcy56b25lID0gVywgdGhpcy5vZmZzZXRTY29yZSA9IDAsIHRoaXMuYWJiclNjb3JlID0gMDtcbiAgICB9XG4gICAgeS5wcm90b3R5cGUuc2NvcmVPZmZzZXRBdCA9IGZ1bmN0aW9uKFcpIHtcbiAgICAgIHRoaXMub2Zmc2V0U2NvcmUgKz0gTWF0aC5hYnModGhpcy56b25lLnV0Y09mZnNldChXLmF0KSAtIFcub2Zmc2V0KSwgdGhpcy56b25lLmFiYnIoVy5hdCkucmVwbGFjZSgvW15BLVpdL2csIFwiXCIpICE9PSBXLmFiYnIgJiYgdGhpcy5hYmJyU2NvcmUrKztcbiAgICB9O1xuICAgIGZ1bmN0aW9uIEIoVywgUCkge1xuICAgICAgZm9yICh2YXIgWSwgWjsgWiA9ICgoUC5hdCAtIFcuYXQpIC8gMTJlNCB8IDApICogNmU0OyApXG4gICAgICAgIFkgPSBuZXcgTChuZXcgRGF0ZShXLmF0ICsgWikpLCBZLm9mZnNldCA9PT0gVy5vZmZzZXQgPyBXID0gWSA6IFAgPSBZO1xuICAgICAgcmV0dXJuIFc7XG4gICAgfVxuICAgIGZ1bmN0aW9uIFgoKSB7XG4gICAgICB2YXIgVyA9ICgvKiBAX19QVVJFX18gKi8gbmV3IERhdGUoKSkuZ2V0RnVsbFllYXIoKSAtIDIsIFAgPSBuZXcgTChuZXcgRGF0ZShXLCAwLCAxKSksIFkgPSBQLm9mZnNldCwgWiA9IFtQXSwgdDEsIGkxLCBuMSwgczE7XG4gICAgICBmb3IgKHMxID0gMTsgczEgPCA0ODsgczErKylcbiAgICAgICAgbjEgPSBuZXcgRGF0ZShXLCBzMSwgMSkuZ2V0VGltZXpvbmVPZmZzZXQoKSwgbjEgIT09IFkgJiYgKGkxID0gbmV3IEwobmV3IERhdGUoVywgczEsIDEpKSwgdDEgPSBCKFAsIGkxKSwgWi5wdXNoKHQxKSwgWi5wdXNoKG5ldyBMKG5ldyBEYXRlKHQxLmF0ICsgNmU0KSkpLCBQID0gaTEsIFkgPSBuMSk7XG4gICAgICBmb3IgKHMxID0gMDsgczEgPCA0OyBzMSsrKVxuICAgICAgICBaLnB1c2gobmV3IEwobmV3IERhdGUoVyArIHMxLCAwLCAxKSkpLCBaLnB1c2gobmV3IEwobmV3IERhdGUoVyArIHMxLCA2LCAxKSkpO1xuICAgICAgcmV0dXJuIFo7XG4gICAgfVxuICAgIGZ1bmN0aW9uIEYoVywgUCkge1xuICAgICAgcmV0dXJuIFcub2Zmc2V0U2NvcmUgIT09IFAub2Zmc2V0U2NvcmUgPyBXLm9mZnNldFNjb3JlIC0gUC5vZmZzZXRTY29yZSA6IFcuYWJiclNjb3JlICE9PSBQLmFiYnJTY29yZSA/IFcuYWJiclNjb3JlIC0gUC5hYmJyU2NvcmUgOiBXLnpvbmUucG9wdWxhdGlvbiAhPT0gUC56b25lLnBvcHVsYXRpb24gPyBQLnpvbmUucG9wdWxhdGlvbiAtIFcuem9uZS5wb3B1bGF0aW9uIDogUC56b25lLm5hbWUubG9jYWxlQ29tcGFyZShXLnpvbmUubmFtZSk7XG4gICAgfVxuICAgIGZ1bmN0aW9uIFQoVywgUCkge1xuICAgICAgdmFyIFksIFo7XG4gICAgICBmb3IgKEEoUCksIFkgPSAwOyBZIDwgUC5sZW5ndGg7IFkrKylcbiAgICAgICAgWiA9IFBbWV0sIHNbWl0gPSBzW1pdIHx8IHt9LCBzW1pdW1ddID0gITA7XG4gICAgfVxuICAgIGZ1bmN0aW9uIHcoVykge1xuICAgICAgdmFyIFAgPSBXLmxlbmd0aCwgWSA9IHt9LCBaID0gW10sIHQxID0ge30sIGkxLCBuMSwgczEsIGQxO1xuICAgICAgZm9yIChpMSA9IDA7IGkxIDwgUDsgaTErKylcbiAgICAgICAgaWYgKHMxID0gV1tpMV0ub2Zmc2V0LCAhdDEuaGFzT3duUHJvcGVydHkoczEpKSB7XG4gICAgICAgICAgZDEgPSBzW3MxXSB8fCB7fTtcbiAgICAgICAgICBmb3IgKG4xIGluIGQxKVxuICAgICAgICAgICAgZDEuaGFzT3duUHJvcGVydHkobjEpICYmIChZW24xXSA9ICEwKTtcbiAgICAgICAgICB0MVtzMV0gPSAhMDtcbiAgICAgICAgfVxuICAgICAgZm9yIChpMSBpbiBZKVxuICAgICAgICBZLmhhc093blByb3BlcnR5KGkxKSAmJiBaLnB1c2goYVtpMV0pO1xuICAgICAgcmV0dXJuIFo7XG4gICAgfVxuICAgIGZ1bmN0aW9uIEgoKSB7XG4gICAgICB0cnkge1xuICAgICAgICB2YXIgVyA9IEludGwuRGF0ZVRpbWVGb3JtYXQoKS5yZXNvbHZlZE9wdGlvbnMoKS50aW1lWm9uZTtcbiAgICAgICAgaWYgKFcgJiYgVy5sZW5ndGggPiAzKSB7XG4gICAgICAgICAgdmFyIFAgPSBhW3EoVyldO1xuICAgICAgICAgIGlmIChQKVxuICAgICAgICAgICAgcmV0dXJuIFA7XG4gICAgICAgICAgSyhcIk1vbWVudCBUaW1lem9uZSBmb3VuZCBcIiArIFcgKyBcIiBmcm9tIHRoZSBJbnRsIGFwaSwgYnV0IGRpZCBub3QgaGF2ZSB0aGF0IGRhdGEgbG9hZGVkLlwiKTtcbiAgICAgICAgfVxuICAgICAgfSBjYXRjaCB7XG4gICAgICB9XG4gICAgICB2YXIgWSA9IFgoKSwgWiA9IFkubGVuZ3RoLCB0MSA9IHcoWSksIGkxID0gW10sIG4xLCBzMSwgZDE7XG4gICAgICBmb3IgKHMxID0gMDsgczEgPCB0MS5sZW5ndGg7IHMxKyspIHtcbiAgICAgICAgZm9yIChuMSA9IG5ldyB5KGsodDFbczFdKSksIGQxID0gMDsgZDEgPCBaOyBkMSsrKVxuICAgICAgICAgIG4xLnNjb3JlT2Zmc2V0QXQoWVtkMV0pO1xuICAgICAgICBpMS5wdXNoKG4xKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBpMS5zb3J0KEYpLCBpMS5sZW5ndGggPiAwID8gaTFbMF0uem9uZS5uYW1lIDogdm9pZCAwO1xuICAgIH1cbiAgICBmdW5jdGlvbiBDKFcpIHtcbiAgICAgIHJldHVybiAoIWwgfHwgVykgJiYgKGwgPSBIKCkpLCBsO1xuICAgIH1cbiAgICBmdW5jdGlvbiBxKFcpIHtcbiAgICAgIHJldHVybiAoVyB8fCBcIlwiKS50b0xvd2VyQ2FzZSgpLnJlcGxhY2UoL1xcLy9nLCBcIl9cIik7XG4gICAgfVxuICAgIGZ1bmN0aW9uIG0oVykge1xuICAgICAgdmFyIFAsIFksIFosIHQxO1xuICAgICAgZm9yICh0eXBlb2YgVyA9PSBcInN0cmluZ1wiICYmIChXID0gW1ddKSwgUCA9IDA7IFAgPCBXLmxlbmd0aDsgUCsrKVxuICAgICAgICBaID0gV1tQXS5zcGxpdChcInxcIiksIFkgPSBaWzBdLCB0MSA9IHEoWSksIG5bdDFdID0gV1tQXSwgYVt0MV0gPSBZLCBUKHQxLCBaWzJdLnNwbGl0KFwiIFwiKSk7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGsoVywgUCkge1xuICAgICAgVyA9IHEoVyk7XG4gICAgICB2YXIgWSA9IG5bV10sIFo7XG4gICAgICByZXR1cm4gWSBpbnN0YW5jZW9mIGggPyBZIDogdHlwZW9mIFkgPT0gXCJzdHJpbmdcIiA/IChZID0gbmV3IGgoWSksIG5bV10gPSBZLCBZKSA6IHJbV10gJiYgUCAhPT0gayAmJiAoWiA9IGsocltXXSwgaykpID8gKFkgPSBuW1ddID0gbmV3IGgoKSwgWS5fc2V0KFopLCBZLm5hbWUgPSBhW1ddLCBZKSA6IG51bGw7XG4gICAgfVxuICAgIGZ1bmN0aW9uIHgoKSB7XG4gICAgICB2YXIgVywgUCA9IFtdO1xuICAgICAgZm9yIChXIGluIGEpXG4gICAgICAgIGEuaGFzT3duUHJvcGVydHkoVykgJiYgKG5bV10gfHwgbltyW1ddXSkgJiYgYVtXXSAmJiBQLnB1c2goYVtXXSk7XG4gICAgICByZXR1cm4gUC5zb3J0KCk7XG4gICAgfVxuICAgIGZ1bmN0aW9uIE4oKSB7XG4gICAgICByZXR1cm4gT2JqZWN0LmtleXMoaSk7XG4gICAgfVxuICAgIGZ1bmN0aW9uIFYoVykge1xuICAgICAgdmFyIFAsIFksIFosIHQxO1xuICAgICAgZm9yICh0eXBlb2YgVyA9PSBcInN0cmluZ1wiICYmIChXID0gW1ddKSwgUCA9IDA7IFAgPCBXLmxlbmd0aDsgUCsrKVxuICAgICAgICBZID0gV1tQXS5zcGxpdChcInxcIiksIFogPSBxKFlbMF0pLCB0MSA9IHEoWVsxXSksIHJbWl0gPSB0MSwgYVtaXSA9IFlbMF0sIHJbdDFdID0gWiwgYVt0MV0gPSBZWzFdO1xuICAgIH1cbiAgICBmdW5jdGlvbiBSKFcpIHtcbiAgICAgIHZhciBQLCBZLCBaLCB0MTtcbiAgICAgIGlmICghKCFXIHx8ICFXLmxlbmd0aCkpXG4gICAgICAgIGZvciAoUCA9IDA7IFAgPCBXLmxlbmd0aDsgUCsrKVxuICAgICAgICAgIHQxID0gV1tQXS5zcGxpdChcInxcIiksIFkgPSB0MVswXS50b1VwcGVyQ2FzZSgpLCBaID0gdDFbMV0uc3BsaXQoXCIgXCIpLCBpW1ldID0gbmV3IHYoXG4gICAgICAgICAgICBZLFxuICAgICAgICAgICAgWlxuICAgICAgICAgICk7XG4gICAgfVxuICAgIGZ1bmN0aW9uIEkoVykge1xuICAgICAgcmV0dXJuIFcgPSBXLnRvVXBwZXJDYXNlKCksIGlbV10gfHwgbnVsbDtcbiAgICB9XG4gICAgZnVuY3Rpb24gaihXLCBQKSB7XG4gICAgICBpZiAoVyA9IEkoVyksICFXKVxuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIHZhciBZID0gVy56b25lcy5zb3J0KCk7XG4gICAgICByZXR1cm4gUCA/IFkubWFwKGZ1bmN0aW9uKFopIHtcbiAgICAgICAgdmFyIHQxID0gayhaKTtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBuYW1lOiBaLFxuICAgICAgICAgIG9mZnNldDogdDEudXRjT2Zmc2V0KC8qIEBfX1BVUkVfXyAqLyBuZXcgRGF0ZSgpKVxuICAgICAgICB9O1xuICAgICAgfSkgOiBZO1xuICAgIH1cbiAgICBmdW5jdGlvbiBVKFcpIHtcbiAgICAgIG0oVy56b25lcyksIFYoVy5saW5rcyksIFIoVy5jb3VudHJpZXMpLCBRLmRhdGFWZXJzaW9uID0gVy52ZXJzaW9uO1xuICAgIH1cbiAgICBmdW5jdGlvbiBfKFcpIHtcbiAgICAgIHJldHVybiBfLmRpZFNob3dFcnJvciB8fCAoXy5kaWRTaG93RXJyb3IgPSAhMCwgSyhcIm1vbWVudC50ei56b25lRXhpc3RzKCdcIiArIFcgKyBcIicpIGhhcyBiZWVuIGRlcHJlY2F0ZWQgaW4gZmF2b3Igb2YgIW1vbWVudC50ei56b25lKCdcIiArIFcgKyBcIicpXCIpKSwgISFrKFcpO1xuICAgIH1cbiAgICBmdW5jdGlvbiByMShXKSB7XG4gICAgICB2YXIgUCA9IFcuX2YgPT09IFwiWFwiIHx8IFcuX2YgPT09IFwieFwiO1xuICAgICAgcmV0dXJuICEhKFcuX2EgJiYgVy5fdHptID09PSB2b2lkIDAgJiYgIVApO1xuICAgIH1cbiAgICBmdW5jdGlvbiBLKFcpIHtcbiAgICAgIHR5cGVvZiBjb25zb2xlIDwgXCJ1XCIgJiYgdHlwZW9mIGNvbnNvbGUuZXJyb3IgPT0gXCJmdW5jdGlvblwiICYmIGNvbnNvbGUuZXJyb3IoVyk7XG4gICAgfVxuICAgIGZ1bmN0aW9uIFEoVykge1xuICAgICAgdmFyIFAgPSBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMsIDAsIC0xKSwgWSA9IGFyZ3VtZW50c1thcmd1bWVudHMubGVuZ3RoIC0gMV0sIFogPSB0LnV0Yy5hcHBseShudWxsLCBQKSwgdDE7XG4gICAgICByZXR1cm4gIXQuaXNNb21lbnQoVykgJiYgcjEoWikgJiYgKHQxID0gayhZKSkgJiYgWi5hZGQodDEucGFyc2UoWiksIFwibWludXRlc1wiKSwgWi50eihZKSwgWjtcbiAgICB9XG4gICAgUS52ZXJzaW9uID0gbywgUS5kYXRhVmVyc2lvbiA9IFwiXCIsIFEuX3pvbmVzID0gbiwgUS5fbGlua3MgPSByLCBRLl9uYW1lcyA9IGEsIFEuX2NvdW50cmllcyA9IGksIFEuYWRkID0gbSwgUS5saW5rID0gViwgUS5sb2FkID0gVSwgUS56b25lID0gaywgUS56b25lRXhpc3RzID0gXywgUS5ndWVzcyA9IEMsIFEubmFtZXMgPSB4LCBRLlpvbmUgPSBoLCBRLnVucGFjayA9IE8sIFEudW5wYWNrQmFzZTYwID0gdSwgUS5uZWVkc09mZnNldCA9IHIxLCBRLm1vdmVJbnZhbGlkRm9yd2FyZCA9ICEwLCBRLm1vdmVBbWJpZ3VvdXNGb3J3YXJkID0gITEsIFEuY291bnRyaWVzID0gTiwgUS56b25lc0ZvckNvdW50cnkgPSBqO1xuICAgIHZhciBFID0gdC5mbjtcbiAgICB0LnR6ID0gUSwgdC5kZWZhdWx0Wm9uZSA9IG51bGwsIHQudXBkYXRlT2Zmc2V0ID0gZnVuY3Rpb24oVywgUCkge1xuICAgICAgdmFyIFkgPSB0LmRlZmF1bHRab25lLCBaO1xuICAgICAgaWYgKFcuX3ogPT09IHZvaWQgMCAmJiAoWSAmJiByMShXKSAmJiAhVy5faXNVVEMgJiYgVy5pc1ZhbGlkKCkgJiYgKFcuX2QgPSB0LnV0YyhXLl9hKS5fZCwgVy51dGMoKS5hZGQoWS5wYXJzZShXKSwgXCJtaW51dGVzXCIpKSwgVy5feiA9IFkpLCBXLl96KVxuICAgICAgICBpZiAoWiA9IFcuX3oudXRjT2Zmc2V0KFcpLCBNYXRoLmFicyhaKSA8IDE2ICYmIChaID0gWiAvIDYwKSwgVy51dGNPZmZzZXQgIT09IHZvaWQgMCkge1xuICAgICAgICAgIHZhciB0MSA9IFcuX3o7XG4gICAgICAgICAgVy51dGNPZmZzZXQoLVosIFApLCBXLl96ID0gdDE7XG4gICAgICAgIH0gZWxzZVxuICAgICAgICAgIFcuem9uZShaLCBQKTtcbiAgICB9LCBFLnR6ID0gZnVuY3Rpb24oVywgUCkge1xuICAgICAgaWYgKFcpIHtcbiAgICAgICAgaWYgKHR5cGVvZiBXICE9IFwic3RyaW5nXCIpXG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiVGltZSB6b25lIG5hbWUgbXVzdCBiZSBhIHN0cmluZywgZ290IFwiICsgVyArIFwiIFtcIiArIHR5cGVvZiBXICsgXCJdXCIpO1xuICAgICAgICByZXR1cm4gdGhpcy5feiA9IGsoVyksIHRoaXMuX3ogPyB0LnVwZGF0ZU9mZnNldCh0aGlzLCBQKSA6IEsoXCJNb21lbnQgVGltZXpvbmUgaGFzIG5vIGRhdGEgZm9yIFwiICsgVyArIFwiLiBTZWUgaHR0cDovL21vbWVudGpzLmNvbS90aW1lem9uZS9kb2NzLyMvZGF0YS1sb2FkaW5nLy5cIiksIHRoaXM7XG4gICAgICB9XG4gICAgICBpZiAodGhpcy5feilcbiAgICAgICAgcmV0dXJuIHRoaXMuX3oubmFtZTtcbiAgICB9O1xuICAgIGZ1bmN0aW9uIEQoVykge1xuICAgICAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5feiA/IHRoaXMuX3ouYWJicih0aGlzKSA6IFcuY2FsbCh0aGlzKTtcbiAgICAgIH07XG4gICAgfVxuICAgIGZ1bmN0aW9uIEcoVykge1xuICAgICAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5feiA9IG51bGwsIFcuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgICAgIH07XG4gICAgfVxuICAgIGZ1bmN0aW9uIEooVykge1xuICAgICAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA+IDAgJiYgKHRoaXMuX3ogPSBudWxsKSwgVy5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICAgICAgfTtcbiAgICB9XG4gICAgRS56b25lTmFtZSA9IEQoRS56b25lTmFtZSksIEUuem9uZUFiYnIgPSBEKEUuem9uZUFiYnIpLCBFLnV0YyA9IEcoRS51dGMpLCBFLmxvY2FsID0gRyhFLmxvY2FsKSwgRS51dGNPZmZzZXQgPSBKKEUudXRjT2Zmc2V0KSwgdC50ei5zZXREZWZhdWx0ID0gZnVuY3Rpb24oVykge1xuICAgICAgcmV0dXJuIChkIDwgMiB8fCBkID09PSAyICYmIGIgPCA5KSAmJiBLKFwiTW9tZW50IFRpbWV6b25lIHNldERlZmF1bHQoKSByZXF1aXJlcyBNb21lbnQuanMgPj0gMi45LjAuIFlvdSBhcmUgdXNpbmcgTW9tZW50LmpzIFwiICsgdC52ZXJzaW9uICsgXCIuXCIpLCB0LmRlZmF1bHRab25lID0gVyA/IGsoVykgOiBudWxsLCB0O1xuICAgIH07XG4gICAgdmFyIFMgPSB0Lm1vbWVudFByb3BlcnRpZXM7XG4gICAgcmV0dXJuIE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChTKSA9PT0gXCJbb2JqZWN0IEFycmF5XVwiID8gKFMucHVzaChcIl96XCIpLCBTLnB1c2goXCJfYVwiKSkgOiBTICYmIChTLl96ID0gbnVsbCksIHQ7XG4gIH0pO1xufSkoR00pO1xudmFyIEZqID0gR00uZXhwb3J0cztcbmNvbnN0IFhqID0gXCIyMDI0YlwiLCBVaiA9IFtcbiAgXCJBZnJpY2EvQWJpZGphbnxMTVQgR01UfGcuOCAwfDAxfC0ybGRYSC5RfDQ4ZTVcIixcbiAgXCJBZnJpY2EvTmFpcm9iaXxMTVQgKzAyMzAgRUFUICswMjQ1fC0yci5nIC0ydSAtMzAgLTJKfDAxMjEzMnwtMnVhMnIuZyBONm5WLmcgM0ZidSBoMWN1IGR6Ykp8NDdlNVwiLFxuICBcIkFmcmljYS9BbGdpZXJzfExNVCBQTVQgV0VUIFdFU1QgQ0VUIENFU1R8LWMuYyAtOS5sIDAgLTEwIC0xMCAtMjB8MDEyMzIzMjMyMzIzMjMyMzI0NTQ1NDI0MjMyMzQ1NDIzMjR8LTNiUTBjLmMgTURBMi5QIGNOYjkubCBIQTAgMTlBMCAxaU0wIDExYzAgMW9vMCBXbzAgMXJjMCBRTTAgMUVNMCBVTTAgREEwIEltbzAgcmQwIERlMCA5WHowIDFmYjAgMWFwMCAxNkswIDJ5bzAgbUVwMCBod0wwIGp4QTAgMTFBMCBkRGQwIDE3YjAgMTFCMCAxY04wIDJEeTAgMWNOMCAxZkIwIDFjTDB8MjZlNVwiLFxuICBcIkFmcmljYS9MYWdvc3xMTVQgR01UICswMDMwIFdBVHwtZC56IDAgLXUgLTEwfDAxMDIzfC0yQjQwZC56IDdpb2QueiBkblhLLnAgZEx6SC56fDE3ZTZcIixcbiAgXCJBZnJpY2EvQmlzc2F1fExNVCAtMDEgR01UfDEyLmsgMTAgMHwwMTJ8LTJsZFgwIDJ4b28wfDM5ZTRcIixcbiAgXCJBZnJpY2EvTWFwdXRvfExNVCBDQVR8LTJhLmkgLTIwfDAxfC0yc3cyYS5pfDI2ZTVcIixcbiAgXCJBZnJpY2EvQ2Fpcm98TE1UIEVFVCBFRVNUfC0yNS45IC0yMCAtMzB8MDEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjF8LTJNQkM1LjkgMUFRTTUuOSB2YjAgMWlwMCAxMXowIDFpTjAgMW56MCAxMnAwIDFwejAgMTBOMCAxcHowIDE2cDAgMWp6MCBzM2QwIFZ6MCAxb04wIDExYjAgMW9PMCAxME4wIDFwejAgMTBOMCAxcGIwIDEwTjAgMXBiMCAxME4wIDFwYjAgMTBOMCAxcHowIDEwTjAgMXBiMCAxME4wIDFwYjAgMTFkMCAxb0wwIDExZDAgMXBiMCAxMWQwIDFvTDAgMTFkMCAxb0wwIDExZDAgMW9MMCAxMWQwIDFwYjAgMTFkMCAxb0wwIDExZDAgMW9MMCAxMWQwIDFvTDAgMTFkMCAxcGIwIDExZDAgMW9MMCAxMWQwIDFvTDAgMTFkMCAxb0wwIDExZDAgMXBiMCAxMWQwIDFvTDAgMTFkMCAxV0wwIHJkMCAxUnowIHdwMCAxcGIwIDExZDAgMW9MMCAxMWQwIDFvTDAgMTFkMCAxb0wwIDExZDAgMXBiMCAxMWQwIDFxTDAgWGQwIDFvTDAgMTFkMCAxb0wwIDExZDAgMXBiMCAxMWQwIDFvTDAgMTFkMCAxb0wwIDExZDAgMW55MCAxMXowIDFvMTAgMTF6MCAxbzEwIDExejAgMW8xMCAxMXowIDFxTjAgMTF6MCAxbzEwIDExejAgMW8xMCAxMXowIDFvMTAgMTF6MCAxbzEwIDExejAgMXFOMCAxMXowIDFvMTAgMTF6MCAxbzEwIFdMMCAxcU4wIFJiMCAxd3AwIE9uMCAxemQwIEx6MCAxRU4wIEZiMCBjMTAgOG4wIDhOZDAgZ0wwIGUxMCBtbjAga1NwMCAxY0wwIDFjTjAgMWZ6MCAxYTEwIDFmejAgMWExMCAxZnowIDFjTjAgMWNMMCAxY04wIDFjTDAgMWNOMCAxY0wwIDFjTjAgMWZ6MCAxYTEwIDFmejAgMWNOMCAxY0wwIDFjTjAgMWNMMCAxY04wIDFjTDAgMWNOMCAxY0wwIDFjTjAgMWZ6MCAxYTEwIDFmejAgMWNOMCAxY0wwIDFjTjAgMWNMMCAxY04wIDFjTDAgMWNOMCAxZnowIDFhMTAgMWZ6MCAxYTEwIDFmejAgMWNOMCAxY0wwIDFjTjAgMWNMMCAxY04wIDFjTDAgMWNOMCAxZnowIDFhMTAgMWZ6MCAxY04wIDFjTDAgMWNOMCAxY0wwIDFjTjAgMWNMMCAxY04wIDFmejAgMWExMCAxZnowIDFhMTAgMWZ6MCAxY04wIDFjTDAgMWNOMCAxY0wwIDFjTjAgMWNMMCAxY04wIDFmejAgMWExMCAxZnowIDFjTjAgMWNMMCAxY04wIDFjTDAgMWNOMCAxY0wwIDFjTjAgMWNMMCAxY04wIDFmejAgMWExMCAxZnowIDFjTjAgMWNMMCAxY04wIDFjTDAgMWNOMCAxY0wwIDFjTjAgMWZ6MCAxYTEwIDFmejAgMWExMCAxZnowIDFjTjAgMWNMMCAxY04wIDFjTDAgMWNOMCAxY0wwIDFjTjAgMWZ6MCAxYTEwIDFmejAgMWNOMCAxY0wwIDFjTjAgMWNMMCAxY04wIDFjTDAgMWNOMCAxZnowIDFhMTAgMWZ6MCAxYTEwIDFmejAgMWNOMCAxY0wwIDFjTjAgMWNMMCAxY04wIDFjTDAgMWNOMCAxZnowIDFhMTAgMWZ6MCAxY04wIDFjTDAgMWNOMCAxY0wwIDFjTjAgMWNMMCAxY04wIDFjTDAgMWNOMCAxZnowIDFhMTAgMWZ6MCAxY04wIDFjTDAgMWNOMCAxY0wwIDFjTjAgMWNMMCAxY04wIDFmejAgMWExMCAxZnowIDFhMTAgMWZ6MCAxY04wIDFjTDAgMWNOMCAxY0wwIDFjTjAgMWNMMCAxY04wIDFjTDAgMWNOMCAxZnowIDFhMTAgMWZ6MCAxY04wIDFjTDAgMWNOMCAxY0wwIDFjTjAgMWNMMCAxY04wIDFmejAgMWExMCAxZnowIDFhMTAgMWZ6MCAxY04wIDFjTDAgMWNOMCAxY0wwIDFjTjAgMWNMMCAxY04wIDFmejAgMWExMCAxZnowIDFjTjAgMWNMMCAxY04wIDFjTDAgMWNOMCAxY0wwIDFjTjAgMWZ6MCAxYTEwIDFmejAgMWExMCAxZnowIDFjTjAgMWNMMCAxY04wIDFjTDAgMWNOMCAxY0wwIDFjTjAgMWZ6MCAxYTEwIDFmejAgMWNOMCAxY0wwIDFjTjAgMWNMMCAxY04wIDFjTDAgMWNOMCAxY0wwIDFjTjAgMWZ6MCAxYTEwIDFmejAgMWNOMCAxY0wwIDFjTjAgMWNMMCAxY04wIDFjTDAgMWNOMCAxZnowIDFhMTAgMWZ6MCAxYTEwIDFmejAgMWNOMCAxY0wwIDFjTjAgMWNMMCAxY04wIDFjTDAgMWNOMCAxZnowIDFhMTAgMWZ6MCAxY04wIDFjTDAgMWNOMCAxY0wwIDFjTjAgMWNMMCAxY04wIDFmejAgMWExMCAxZnowIDFhMTAgMWZ6MCAxY04wIDFjTDAgMWNOMCAxY0wwIDFjTjAgMWNMMCAxY04wIDFmejAgMWExMCAxZnowIDFjTjAgMWNMMCAxY04wIDFjTDAgMWNOMCAxY0wwIDFjTjAgMWNMMCAxY04wIDFmejAgMWExMCAxZnowIDFjTjAgMWNMMCAxY04wIDFjTDAgMWNOMCAxY0wwIDFjTjAgMWZ6MCAxYTEwIDFmejAgMWExMCAxZnowIDFjTjAgMWNMMCAxY04wIDFjTDAgMWNOMCAxY0wwIDFjTjAgMWZ6MCAxYTEwIDFmejAgMWNOMCAxY0wwIDFjTjAgMWNMMCAxY04wIDFjTDAgMWNOMCAxZnowIDFhMTAgMWZ6MCAxYTEwIDFmejAgMWNOMCAxY0wwIDFjTjAgMWNMMCAxY04wIDFjTDAgMWNOMCAxZnowIDFhMTAgMWZ6MCAxY04wIDFjTDAgMWNOMCAxY0wwIDFjTjAgMWNMMCAxY04wIDFjTDAgMWNOMCAxZnowIDFhMTAgMWZ6MCAxY04wIDFjTDAgMWNOMCAxY0wwIDFjTjAgMWNMMCAxY04wIDFmejAgMWExMCAxZnowIDFhMTAgMWZ6MCAxY04wIDFjTDAgMWNOMCAxY0wwIDFjTjAgMWNMMCAxY04wIDFmejAgMWExMCAxZnowIDFhMTAgMWZ6MCAxY04wIDFjTDAgMWNOMCAxY0wwIDFjTjAgMWNMMCAxY04wIDFmejAgMWExMCAxZnowIDFhMTAgMWZ6MCAxY04wIDFjTDAgMWNOMCAxY0wwIDFjTjAgMWNMMCAxY04wIDFmejAgMWExMCAxZnowIDFjTjAgMWNMMCAxY04wIDFjTDAgMWNOMCAxY0wwIDFjTjAgMWZ6MCAxYTEwIDFmejAgMWExMCAxZnowIDFjTjAgMWNMMCAxY04wIDFjTDAgMWNOMCAxY0wwIDFjTjAgMWZ6MCAxYTEwIDFmejAgMWNOMCAxY0wwIDFjTjAgMWNMMCAxY04wIDFjTDAgMWNOMCAxY0wwIDFjTjAgMWZ6MCAxYTEwIDFmejAgMWNOMCAxY0wwIDFjTjAgMWNMMCAxY04wIDFjTDAgMWNOMCAxZnowIDFhMTAgMWZ6MCAxYTEwIDFmejAgMWNOMCAxY0wwIDFjTjAgMWNMMCAxY04wIDFjTDAgMWNOMCAxZnowIDFhMTAgMWZ6MCAxY04wIDFjTDAgMWNOMCAxY0wwIDFjTjAgMWNMMCAxY04wIDFmejAgMWExMCAxZnowIDFhMTAgMWZ6MCAxY04wIDFjTDAgMWNOMCAxY0wwIDFjTjAgMWNMMCAxY04wIDFmejAgMWExMCAxZnowIDFjTjAgMWNMMCAxY04wIDFjTDAgMWNOMCAxY0wwIDFjTjAgMWNMMCAxY04wIDFmejAgMWExMCAxZnowIDFjTjAgMWNMMCAxY04wIDFjTDAgMWNOMCAxY0wwIDFjTjAgMWZ6MCAxYTEwIDFmejAgMWExMCAxZnowIDFjTjAgMWNMMCAxY04wIDFjTDAgMWNOMCAxY0wwIDFjTjAgMWZ6MCAxYTEwIDFmejAgMWNOMCAxY0wwIDFjTjAgMWNMMCAxY04wIDFjTDAgMWNOMCAxZnowIDFhMTAgMWZ6MCAxYTEwIDFmejAgMWNOMCAxY0wwIDFjTjAgMWNMMCAxY04wIDFjTDAgMWNOMCAxZnowIDFhMTAgMWZ6MCAxY04wIDFjTDAgMWNOMCAxY0wwIDFjTjAgMWNMMCAxY04wIDFjTDAgMWNOMCAxZnowIDFhMTAgMWZ6MCAxY04wIDFjTDAgMWNOMCAxY0wwIDFjTjAgMWNMMCAxY04wIDFmejAgMWExMCAxZnowIDFhMTAgMWZ6MCAxY04wIDFjTDAgMWNOMCAxY0wwIDFjTjAgMWNMMCAxY04wIDFmejAgMWExMCAxZnowIDFjTjAgMWNMMCAxY04wIDFjTDAgMWNOMCAxY0wwIDFjTjAgMWNMMCAxY04wIDFmejAgMWExMCAxZnowIDFhMTAgMWZ6MCAxY04wIDFjTDAgMWNOMCAxY0wwIDFjTjAgMWNMMCAxY04wIDFmejAgMWExMCAxZnowIDFjTjAgMWNMMCAxY04wIDFjTDAgMWNOMCAxY0wwIDFjTjAgMWZ6MCAxYTEwIDFmejAgMWExMCAxZnowIDFjTjAgMWNMMCAxY04wIDFjTDAgMWNOMCAxY0wwIDFjTjAgMWZ6MCAxYTEwIDFmejAgMWNOMCAxY0wwIDFjTjAgMWNMMCAxY04wIDFjTDAgMWNOMCAxY0wwIDFjTjAgMWZ6MCAxYTEwIDFmejAgMWNOMCAxY0wwIDFjTjAgMWNMMCAxY04wIDFjTDAgMWNOMCAxZnowIDFhMTAgMWZ6MCAxYTEwIDFmejAgMWNOMCAxY0wwIDFjTjAgMWNMMCAxY04wIDFjTDAgMWNOMCAxZnowIDFhMTAgMWZ6MCAxY04wIDFjTDAgMWNOMCAxY0wwIDFjTjAgMWNMMCAxY04wIDFmejAgMWExMCAxZnowIDFhMTAgMWZ6MCAxY04wIDFjTDAgMWNOMCAxY0wwIDFjTjAgMWNMMCAxY04wIDFmejAgMWExMCAxZnowIDFjTjAgMWNMMCAxY04wIDFjTDAgMWNOMCAxY0wwIDFjTjAgMWNMMCAxY04wIDFmejAgMWExMCAxZnowIDFjTjAgMWNMMCAxY04wIDFjTDAgMWNOMCAxY0wwIDFjTjAgMWZ6MCAxYTEwIDFmejAgMWExMCAxZnowIDFjTjAgMWNMMCAxY04wIDFjTDAgMWNOMCAxY0wwIDFjTjAgMWZ6MCAxYTEwIDFmejAgMWNOMCAxY0wwIDFjTjAgMWNMMCAxY04wIDFjTDAgMWNOMCAxZnowIDFhMTAgMWZ6MCAxYTEwIDFmejAgMWNOMCAxY0wwIDFjTjAgMWNMMCAxY04wIDFjTDAgMWNOMCAxZnowIDFhMTAgMWZ6MCAxY04wIDFjTDAgMWNOMCAxY0wwIDFjTjAgMWNMMCAxY04wIDFjTDAgMWNOMCAxZnowIDFhMTAgMWZ6MCAxY04wIDFjTDAgMWNOMCAxY0wwIDFjTjAgMWNMMCAxY04wIDFmejAgMWExMCAxZnowIDFhMTAgMWZ6MCAxY04wIDFjTDAgMWNOMCAxY0wwIDFjTjAgMWNMMCAxY04wIDFmejAgMWExMCAxZnowIDFjTjAgMWNMMCAxY04wIDFjTDAgMWNOMCAxY0wwIDFjTjAgMWZ6MCAxYTEwIDFmejAgMWExMCAxZnowIDFjTjAgMWNMMCAxY04wIDFjTDAgMWNOMCAxY0wwIDFjTjAgMWZ6MCAxYTEwIDFmejAgMWNOMCAxY0wwIDFjTjAgMWNMMCAxY04wIDFjTDAgMWNOMCAxY0wwIDFjTjAgMWZ6MCAxYTEwIDFmejAgMWNOMCAxY0wwIDFjTjAgMWNMMCAxY04wIDFjTDAgMWNOMCAxZnowIDFhMTAgMWZ6MCAxYTEwIDFmejAgMWNOMCAxY0wwIDFjTjAgMWNMMCAxY04wIDFjTDAgMWNOMCAxZnowIDFhMTAgMWZ6MCAxY04wIDFjTDAgMWNOMCAxY0wwIDFjTjAgMWNMMCAxY04wIDFmejAgMWExMCAxZnowIDFhMTAgMWZ6MCAxY04wIDFjTDAgMWNOMCAxY0wwIDFjTjAgMWNMMCAxY04wIDFmejAgMWExMCAxZnowIDFjTjAgMWNMMCAxY04wIDFjTDAgMWNOMCAxY0wwIDFjTjAgMWNMMCAxY04wIDFmejAgMWExMCAxZnowIDFjTjAgMWNMMCAxY04wIDFjTDAgMWNOMCAxY0wwIDFjTjAgMWZ6MCAxYTEwIDFmejAgMWExMCAxZnowIDFjTjAgMWNMMCAxY04wIDFjTDAgMWNOMCAxY0wwIDFjTjAgMWZ6MCAxYTEwIDFmejAgMWNOMCAxY0wwIDFjTjAgMWNMMCAxY04wIDFjTDAgMWNOMCAxZnowIDFhMTAgMWZ6MCAxYTEwIDFmejAgMWNOMCAxY0wwIDFjTjAgMWNMMCAxY04wIDFjTDAgMWNOMCAxZnowIDFhMTAgMWZ6MCAxY04wIDFjTDAgMWNOMCAxY0wwIDFjTjAgMWNMMCAxY04wIDFjTDAgMWNOMCAxZnowIDFhMTAgMWZ6MCAxY04wIDFjTDAgMWNOMCAxY0wwIDFjTjAgMWNMMCAxY04wIDFmejAgMWExMCAxZnowIDFhMTAgMWZ6MCAxY04wIDFjTDAgMWNOMCAxY0wwIDFjTjAgMWNMMCAxY04wIDFmejAgMWExMCAxZnowIDFjTjAgMWNMMCAxY04wIDFjTDAgMWNOMCAxY0wwIDFjTjAgMWZ6MCAxYTEwIDFmejAgMWExMCAxZnowIDFjTjAgMWNMMCAxY04wIDFjTDAgMWNOMCAxY0wwIDFjTjAgMWZ6MCAxYTEwIDFmejAgMWNOMCAxY0wwIDFjTjAgMWNMMCAxY04wIDFjTDAgMWNOMCAxY0wwIDFjTjAgMWZ6MCAxYTEwIDFmejAgMWNOMCAxY0wwIDFjTjAgMWNMMCAxY04wIDFjTDAgMWNOMCAxZnowIDFhMTAgMWZ6MCAxYTEwIDFmejB8MTVlNlwiLFxuICBcIkFmcmljYS9DYXNhYmxhbmNhfExNVCArMDAgKzAxfHUuayAwIC0xMHwwMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMnwtMmdNbnQuRSAxMzBMdC5FIHJiMCBEZDAgZFZiMCBiNnAwIFRYMCBFb0IwIExMMCBnbmQwIHJ6MCA0M2QwIEFMMCAxTmQwIFhYMCAxQ3AwIHB6MCBkRXAwIDRtbjAgU3lOMCBBTDAgMU5kMCB3bjAgMUZCMCBEYjAgMXpkMCBMejAgMU5mMCB3TTAgY28wIGdvMCAxbzAwIHMwMCBkQTAgdmMwIDExQTAgQTAwIGUwMCB5MDAgMTFBMCB1TTAgZTAwIERjMCAxMUEwIHMwMCBlMDAgSU0wIFdNMCBtbzAgZ00wIExBMCBXTTAgakEwIGUwMCAyOE0wIGUwMCAyNjAwIGdNMCAyNjAwIGUwMCAyNjAwIGdNMCAyNjAwIGUwMCAyOE0wIGUwMCAyNjAwIGdNMCAyNjAwIGUwMCAyOE0wIGUwMCAyNjAwIGdNMCAyNjAwIGUwMCAyNjAwIGdNMCAyNjAwIGUwMCAyOE0wIGUwMCAyNjAwIGdNMCAyNjAwIGUwMCAyNjAwIGdNMCAyNjAwIGdNMCAyNjAwIGUwMCAyNjAwIGdNMCAyNjAwIGUwMCAyOE0wIGUwMCAyNjAwIGdNMCAyNjAwIGUwMCAyNjAwIGdNMCAyNjAwIGdNMCAyNjAwIGUwMCAyNjAwIGdNMCAyNjAwIGUwMCAyOE0wIGUwMCAyNjAwIGdNMCAyNjAwIGUwMCAyNjAwIGdNMCAyNjAwIGdNMCAyNjAwIGUwMCAyNjAwIGdNMCAyNjAwIGUwMCAyOE0wIGUwMCAyNjAwIGdNMCAyNjAwIGUwMCAyNjAwIGdNMCAyNjAwIGdNMCAyNjAwIGUwMCAyNjAwIGdNMCAyNjAwIGUwMCAyOE0wIGUwMCAyNjAwIGdNMCAyNjAwIGUwMCAyNjAwIGdNMCAyNjAwIGdNMCAyNjAwIGUwMCAyNjAwIGdNMCAyNjAwIGUwMCAyOE0wIGUwMCAyNjAwIGdNMCAyNjAwIGUwMCAyNjAwIGdNMCAyNjAwIGdNMCAyNjAwIGUwMCAyNjAwIGdNMCAyNjAwIGUwMCAyOE0wIGUwMCAyNjAwIGdNMCAyNjAwIGUwMCAyNjAwIGdNMCAyNjAwIGUwMCAyOE0wIGUwMCAyNjAwIGdNMCAyNjAwIGUwMCAyOE0wIGUwMCAyNjAwIGdNMHwzMmU1XCIsXG4gIFwiQWZyaWNhL0NldXRhfExNVCBXRVQgV0VTVCBDRVQgQ0VTVHxsLmcgMCAtMTAgLTEwIC0yMHwwMTIxMjEyMTIxMjEyMTIxMjEyMTIxMzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzfC0yTTBNMCBHZFgwIDExejAgZHJkMCAxOHAwIDNIWDAgMTdkMCAxZnowIDFhMTAgMWlvMCAxYTAwIDF5N28wIExMMCBnbmQwIHJ6MCA0M2QwIEFMMCAxTmQwIFhYMCAxQ3AwIHB6MCBkRXAwIDRWQjAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFmQTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxZkEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFvMDB8ODVlM1wiLFxuICBcIkFmcmljYS9FbF9BYWl1bnxMTVQgLTAxICswMCArMDF8US5NIDEwIDAgLTEwfDAxMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyM3wtMXJEejcuYyAxR1ZBNy5jIDZMMCBBTDAgMU5kMCBYWDAgMUNwMCBwejAgMWNCQjAgQUwwIDFOZDAgd24wIDFGQjAgRGIwIDF6ZDAgTHowIDFOZjAgd00wIGNvMCBnbzAgMW8wMCBzMDAgZEEwIHZjMCAxMUEwIEEwMCBlMDAgeTAwIDExQTAgdU0wIGUwMCBEYzAgMTFBMCBzMDAgZTAwIElNMCBXTTAgbW8wIGdNMCBMQTAgV00wIGpBMCBlMDAgMjhNMCBlMDAgMjYwMCBnTTAgMjYwMCBlMDAgMjYwMCBnTTAgMjYwMCBlMDAgMjhNMCBlMDAgMjYwMCBnTTAgMjYwMCBlMDAgMjhNMCBlMDAgMjYwMCBnTTAgMjYwMCBlMDAgMjYwMCBnTTAgMjYwMCBlMDAgMjhNMCBlMDAgMjYwMCBnTTAgMjYwMCBlMDAgMjYwMCBnTTAgMjYwMCBnTTAgMjYwMCBlMDAgMjYwMCBnTTAgMjYwMCBlMDAgMjhNMCBlMDAgMjYwMCBnTTAgMjYwMCBlMDAgMjYwMCBnTTAgMjYwMCBnTTAgMjYwMCBlMDAgMjYwMCBnTTAgMjYwMCBlMDAgMjhNMCBlMDAgMjYwMCBnTTAgMjYwMCBlMDAgMjYwMCBnTTAgMjYwMCBnTTAgMjYwMCBlMDAgMjYwMCBnTTAgMjYwMCBlMDAgMjhNMCBlMDAgMjYwMCBnTTAgMjYwMCBlMDAgMjYwMCBnTTAgMjYwMCBnTTAgMjYwMCBlMDAgMjYwMCBnTTAgMjYwMCBlMDAgMjhNMCBlMDAgMjYwMCBnTTAgMjYwMCBlMDAgMjYwMCBnTTAgMjYwMCBnTTAgMjYwMCBlMDAgMjYwMCBnTTAgMjYwMCBlMDAgMjhNMCBlMDAgMjYwMCBnTTAgMjYwMCBlMDAgMjYwMCBnTTAgMjYwMCBnTTAgMjYwMCBlMDAgMjYwMCBnTTAgMjYwMCBlMDAgMjhNMCBlMDAgMjYwMCBnTTAgMjYwMCBlMDAgMjYwMCBnTTAgMjYwMCBlMDAgMjhNMCBlMDAgMjYwMCBnTTAgMjYwMCBlMDAgMjhNMCBlMDAgMjYwMCBnTTB8MjBlNFwiLFxuICBcIkFmcmljYS9Kb2hhbm5lc2J1cmd8TE1UIFNBU1QgU0FTVCBTQVNUfC0xUSAtMXUgLTIwIC0zMHwwMTIzMjMyfC0zOUVwUSBxVGNtIDFBamR1IDFjTDAgMWNOMCAxY0wwfDg0ZTVcIixcbiAgXCJBZnJpY2EvSnViYXxMTVQgQ0FUIENBU1QgRUFUfC0yNi5zIC0yMCAtMzAgLTMwfDAxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEzMXwtMXlXMjYucyAxekswNi5zIDE2TDAgMWlOMCAxN2IwIDFqZDAgMTdiMCAxaXAwIDE3ejAgMWkxMCAxN1gwIDFoQjAgMThuMCAxaGQwIDE5YjAgMWdwMCAxOXowIDFpTjAgMTdiMCAxaXAwIDE3ejAgMWkxMCAxOG4wIDFoZDAgMThMMCAxZ04wIDE5YjAgMWdwMCAxOXowIDFpTjAgMTd6MCAxaTEwIDE3WDAgeUdkMCBQZVgwfFwiLFxuICBcIkFmcmljYS9LaGFydG91bXxMTVQgQ0FUIENBU1QgRUFUfC0yYS44IC0yMCAtMzAgLTMwfDAxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEzMXwtMXlXMmEuOCAxekswYS44IDE2TDAgMWlOMCAxN2IwIDFqZDAgMTdiMCAxaXAwIDE3ejAgMWkxMCAxN1gwIDFoQjAgMThuMCAxaGQwIDE5YjAgMWdwMCAxOXowIDFpTjAgMTdiMCAxaXAwIDE3ejAgMWkxMCAxOG4wIDFoZDAgMThMMCAxZ04wIDE5YjAgMWdwMCAxOXowIDFpTjAgMTd6MCAxaTEwIDE3WDAgeUdkMCBIakwwfDUxZTVcIixcbiAgXCJBZnJpY2EvTW9ucm92aWF8TE1UIE1NVCBNTVQgR01UfEguOCBILjggSS51IDB8MDEyM3wtM3lnbmcuUSAxdXNNMCAyOEcwMS5tfDExZTVcIixcbiAgXCJBZnJpY2EvTmRqYW1lbmF8TE1UIFdBVCBXQVNUfC0xMC5jIC0xMCAtMjB8MDEyMXwtMmxlMTAuYyAySjNjMC5jIFduMHwxM2U1XCIsXG4gIFwiQWZyaWNhL1Nhb19Ub21lfExNVCBMTVQgR01UIFdBVHwtcS5VIEEuSiAwIC0xMHwwMTIzMnwtM3Rvb3EuVSAxOGFvcS5VIDRpNk4wIDJxMDB8XCIsXG4gIFwiQWZyaWNhL1RyaXBvbGl8TE1UIENFVCBDRVNUIEVFVHwtUS5JIC0xMCAtMjAgLTIwfDAxMjEyMTIxMzEyMTIxMjEyMTIxMjEyMTIxMzEyMzEyM3wtMjFKY1EuSSAxaG5CUS5JIHZ4MCA0aVAwIHh4MCA0ZU4wIEJiMCA3aXAwIFUwbjAgQTEwIDFkYjAgMWNOMCAxZGIwIDFkZDAgMWRiMCAxZU4wIDFiYjAgMWUxMCAxY0wwIDFjMTAgMWRiMCAxZGQwIDFkYjAgMWNOMCAxZGIwIDFxMTAgZkFuMCAxZXAwIDFkYjAgQUtxMCBUQTAgMW8wMHwxMWU1XCIsXG4gIFwiQWZyaWNhL1R1bmlzfExNVCBQTVQgQ0VUIENFU1R8LUUuSSAtOS5sIC0xMCAtMjB8MDEyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzJ8LTN6TzBFLkkgMWNCQXYubiAxOHBhOS5sIDFxTTAgREEwIDNUYzAgMTFCMCAxemUwIFdNMCA3ejAgM2QwIDE0TDAgMWNOMCAxZjkwIDFhcjAgMTZKMCAxZ1hCMCBXTTAgMXJBMCAxMWMwIG53bzAgS28wIDFjTTAgMWNNMCAxckEwIDEwTTAgenVNMCAxME4wIDFhTjAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDB8MjBlNVwiLFxuICBcIkFmcmljYS9XaW5kaG9la3xMTVQgKzAxMzAgU0FTVCBTQVNUIENBVCBXQVR8LTE4Lm8gLTF1IC0yMCAtMzAgLTIwIC0xMHwwMTIzMjQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTR8LTM5RXA4Lm8gcVRiQy5vIDFBamR1IDFjTDAgMVNxTDAgOUlvMCAxNlAwIDFuWDAgMTFCMCAxcUwwIFdOMCAxcUwwIDExQjAgMW5YMCAxMUIwIDFuWDAgMTFCMCAxblgwIDExQjAgMW5YMCAxMUIwIDFxTDAgV04wIDFxTDAgMTFCMCAxblgwIDExQjAgMW5YMCAxMUIwIDFuWDAgMTFCMCAxblgwIDExQjAgMXFMMCAxMUIwIDFuWDAgMTFCMCAxblgwIDExQjAgMW5YMCAxMUIwIDFuWDAgMTFCMCAxcUwwIFdOMCAxcUwwIDExQjAgMW5YMCAxMUIwIDFuWDAgMTFCMCAxblgwIDExQjB8MzJlNFwiLFxuICBcIkFtZXJpY2EvQWRha3xMTVQgTE1UIE5TVCBOV1QgTlBUIEJTVCBCRFQgQUhTVCBIU1QgSERUfC1jZC5tIGJLLkMgYjAgYTAgYTAgYjAgYTAgYTAgYTAgOTB8MDEyMzQyNTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2Nzg5ODk4OTg5ODk4OTg5ODk4OTg5ODk4OTg5ODk4OTg5ODk4OTg5ODk4OTg5ODk4OTg5ODk4OTg5ODk4OTg5ODk4OTg5ODk4OTg5ODk4OTg5ODk4OTg5ODk4OTg5ODk4OTg5ODk4OTg5ODk4OTg5ODk4OTg5ODk4OTg5ODk4OTg5ODk4OTg5ODk4OTg5ODk4OTg5ODk4OTg5ODk4OTg5ODk4OTg5ODk4OTg5ODk4OTg5ODk4OTg5ODk4OTg5ODk4OTg5ODk4OTg5ODk4OTg5ODk4OTg5ODk4OTg5ODk4OTg5ODk4OTg5ODk4OTg5ODk4OTg5ODk4OTg5ODk4OTg5ODk4OTg5ODk4OTg5ODk4OTg5ODk4OTg5ODk4OTg5ODk4OTg5ODk4OTg5ODk4OTg5ODk4OTg5ODk4OTg5ODk4OTg5ODk4OTg5ODk4OTg5ODk4OTg5ODk4OTg5ODk4OTg5ODk4OTg5ODk4OTg5ODk4OTg5ODk4OTg5ODk4OTg5ODk4OTg5ODk4OTg5ODk4OTg5ODk4OTg5ODk4OTg5ODk4OTg5ODk4OTg5ODk4OTg5ODk4OTg5ODk4OTg5ODk4OTg5ODk4OTg5ODk4OTg5ODk4OTg5ODk4OTg5ODk4OTg5ODk4OTg5ODk4OTg5ODk4OTg5ODk4OTg5ODk4OTg5ODk4OTg5ODk4OTg5ODk4OTg5ODk4OTg5ODk4OTg5ODk4OTg5ODk4OTg5ODk4OTg5ODk4OTg5ODk4OTg5ODk4OTg5ODk4OTg5ODk4OTg5ODk4OTg5ODk4OTg5ODk4OTg5ODk4OTg5ODk4OTg5ODk4OTg5ODk4OTg5ODk4OTg5ODk4OTg5ODk4OTg5ODk4OTg5ODk4OTg5ODk4OTg5ODk4OTg5ODk4OTg5ODk4OTg5ODk4OTg5ODk4OTg5ODk4OTg5ODk4OTg5ODk4OTg5ODk4OTg5ODk4OTg5ODk4OTg5ODk4OTg5ODk4OTg5ODk4OTg5ODk4OTg5ODk4OTg5ODk4OTg5ODk4OTg5ODk4OTg5ODk4OTg5ODk4OTg5ODk4OTg5ODk4OTg5ODk4OTg5ODk4OTg5ODk4OTg5ODk4OTg5ODk4OTg5ODk4OTg5ODk4OTg5ODk4OTg5ODk4OTg5ODk4OTg5ODk4OTg5ODk4OTg5ODk4OTg5ODk4OTg5ODk4OTg5ODk4OTg5ODk4OTg5ODk4OTg5ODk4OTg5ODk4OTg5ODk4OTg5ODk4OTg5ODk4OTg5ODk4OTg5ODk4OTg5ODk4OTg5ODk4OTg5ODk4OTg5ODk4OTg5ODk4OTg5ODk4OTg5ODk4OTg5ODk4OTg5ODk4OTg5ODk4OTg5ODk4OTg5ODk4OTg5ODk4OTg5ODk4OTh8LTQ4UHpzLkwgMWpWemYucCAxRVgxZC5tIDh3VzAgaUIwIFFsYjAgNTJPMCAxY0wwIDFjTjAgMWNMMCAxY04wIDFmejAgMWNOMCAxY0wwIDFjTjAgMWNMMCBzMTAgMVZ6MCBMQjAgMUJYMCAxY04wIDFmejAgMWExMCAxZnowIDFjTjAgMWNMMCAxY04wIDFjTDAgMWNOMCAxY0wwIDFjTjAgMWNMMCAxY04wIDFmejAgMWExMCAxZnowIGNtMCAxMHEwIDFjTDAgMWNOMCAxY0wwIDFjTjAgMWNMMCAxNHAwIDFsYjAgMTRwMCAxblgwIDExQjAgMW5YMCAxMUIwIDFuWDAgMTRwMCAxbGIwIDE0cDAgMWxiMCAxNHAwIDFuWDAgMTFCMCAxblgwIDExQjAgMW5YMCAxNHAwIDFsYjAgMTRwMCAxbGIwIDE0cDAgMWxiMCAxNHAwIDFuWDAgMTFCMCAxblgwIDExQjAgMW5YMCAxNHAwIDFsYjAgMTRwMCAxbGIwIDE0cDAgMW5YMCAxMUIwIDFuWDAgMTFCMCAxblgwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwfDMyNlwiLFxuICBcIkFtZXJpY2EvQW5jaG9yYWdlfExNVCBMTVQgQVNUIEFXVCBBUFQgQUhTVCBBSERUIFlTVCBBS1NUIEFLRFR8LWUwLm8gOVguQSBhMCA5MCA5MCBhMCA5MCA5MCA5MCA4MHwwMTIzNDI1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY3ODk4OTg5ODk4OTg5ODk4OTg5ODk4OTg5ODk4OTg5ODk4OTg5ODk4OTg5ODk4OTg5ODk4OTg5ODk4OTg5ODk4OTg5ODk4OTg5ODk4OTg5ODk4OTg5ODk4OTg5ODk4OTg5ODk4OTg5ODk4OTg5ODk4OTg5ODk4OTg5ODk4OTg5ODk4OTg5ODk4OTg5ODk4OTg5ODk4OTg5ODk4OTg5ODk4OTg5ODk4OTg5ODk4OTg5ODk4OTg5ODk4OTg5ODk4OTg5ODk4OTg5ODk4OTg5ODk4OTg5ODk4OTg5ODk4OTg5ODk4OTg5ODk4OTg5ODk4OTg5ODk4OTg5ODk4OTg5ODk4OTg5ODk4OTg5ODk4OTg5ODk4OTg5ODk4OTg5ODk4OTg5ODk4OTg5ODk4OTg5ODk4OTg5ODk4OTg5ODk4OTg5ODk4OTg5ODk4OTg5ODk4OTg5ODk4OTg5ODk4OTg5ODk4OTg5ODk4OTg5ODk4OTg5ODk4OTg5ODk4OTg5ODk4OTg5ODk4OTg5ODk4OTg5ODk4OTg5ODk4OTg5ODk4OTg5ODk4OTg5ODk4OTg5ODk4OTg5ODk4OTg5ODk4OTg5ODk4OTg5ODk4OTg5ODk4OTg5ODk4OTg5ODk4OTg5ODk4OTg5ODk4OTg5ODk4OTg5ODk4OTg5ODk4OTg5ODk4OTg5ODk4OTg5ODk4OTg5ODk4OTg5ODk4OTg5ODk4OTg5ODk4OTg5ODk4OTg5ODk4OTg5ODk4OTg5ODk4OTg5ODk4OTg5ODk4OTg5ODk4OTg5ODk4OTg5ODk4OTg5ODk4OTg5ODk4OTg5ODk4OTg5ODk4OTg5ODk4OTg5ODk4OTg5ODk4OTg5ODk4OTg5ODk4OTg5ODk4OTg5ODk4OTg5ODk4OTg5ODk4OTg5ODk4OTg5ODk4OTg5ODk4OTg5ODk4OTg5ODk4OTg5ODk4OTg5ODk4OTg5ODk4OTg5ODk4OTg5ODk4OTg5ODk4OTg5ODk4OTg5ODk4OTg5ODk4OTg5ODk4OTg5ODk4OTg5ODk4OTg5ODk4OTg5ODk4OTg5ODk4OTg5ODk4OTg5ODk4OTg5ODk4OTg5ODk4OTg5ODk4OTg5ODk4OTg5ODk4OTg5ODk4OTg5ODk4OTg5ODk4OTg5ODk4OTg5ODk4OTg5ODk4OTg5ODk4OTg5ODk4OTg5ODk4OTg5ODk4OTg5ODk4OTg5ODk4OTg5ODk4OTg5ODk4OTg5ODk4OTg5ODk4OTg5ODk4OTg5ODk4OTg5ODk4OTg5ODk4OTg5ODk4OTg5ODk4OTg5ODk4OTg5ODk4OTg5ODk4OTg5ODk4OTg5ODk4OTg5ODk4OTg5ODk4OTg5ODk4OTg5ODk4OTg5ODk4OTg5OHwtNDhQenMuTCAxalZ4cy5uIDFFWDIwLm8gOHdYMCBpQTAgUWxiMCA1Mk8wIDFjTDAgMWNOMCAxY0wwIDFjTjAgMWZ6MCAxY04wIDFjTDAgMWNOMCAxY0wwIHMxMCAxVnowIExCMCAxQlgwIDFjTjAgMWZ6MCAxYTEwIDFmejAgMWNOMCAxY0wwIDFjTjAgMWNMMCAxY04wIDFjTDAgMWNOMCAxY0wwIDFjTjAgMWZ6MCAxYTEwIDFmejAgY20wIDEwcTAgMWNMMCAxY04wIDFjTDAgMWNOMCAxY0wwIDE0cDAgMWxiMCAxNHAwIDFuWDAgMTFCMCAxblgwIDExQjAgMW5YMCAxNHAwIDFsYjAgMTRwMCAxbGIwIDE0cDAgMW5YMCAxMUIwIDFuWDAgMTFCMCAxblgwIDE0cDAgMWxiMCAxNHAwIDFsYjAgMTRwMCAxbGIwIDE0cDAgMW5YMCAxMUIwIDFuWDAgMTFCMCAxblgwIDE0cDAgMWxiMCAxNHAwIDFsYjAgMTRwMCAxblgwIDExQjAgMW5YMCAxMUIwIDFuWDAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjB8MzBlNFwiLFxuICBcIkFtZXJpY2EvUHVlcnRvX1JpY298TE1UIEFTVCBBV1QgQVBUfDRvLnAgNDAgMzAgMzB8MDEyMzF8LTJRaTd6LnogMUlVYnoueiA3WFQwIGl1MHwyNGU1XCIsXG4gIFwiQW1lcmljYS9BcmFndWFpbmF8TE1UIC0wMyAtMDJ8M2MuTSAzMCAyMHwwMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxfC0yZ2x3TC5jIEhkS0wuYyAxY2MwIDFlMTAgMWJYMCBFemQwIFNvMCAxdkEwIE1uMCAxQkIwIE1MMCAxQkIwIHpYMCBxZTEwIHhiMCAyZXAwIG56MCAxQzEwIHpYMCAxQzEwIExYMCAxQzEwIE1uMCBIMjEwIFJiMCAxdEIwIElMMCAxRmQwIEZYMCAxRU4wIEZYMCAxSEIwIEx6MCBkTU4wIEx6MCAxemQwIFJiMCAxd04wIFduMCAxdEIwIFJiMCAxdEIwIFdMMCAxdEIwIFJiMCAxemQwIE9uMCAxSEIwIEZYMCBueTEwIEx6MHwxNGU0XCIsXG4gIFwiQW1lcmljYS9BcmdlbnRpbmEvQnVlbm9zX0FpcmVzfExNVCBDTVQgLTA0IC0wMyAtMDJ8M1IuTSA0Zy5NIDQwIDMwIDIwfDAxMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzNDM0MzQzNDM0MzQzNDM0M3wtMzMxVTYuYyAxMjVjbiBwS25ILmMgTW4wIDFpTjAgVGIwIDFDMTAgTFgwIDFDMTAgTFgwIDFDMTAgTFgwIDFDMTAgTW4wIDFDMTAgTFgwIDFDMTAgTFgwIDFDMTAgTFgwIDFDMTAgTW4wIE1OMCAyanowIE1OMCA0bFgwIHUxMCA1TGIwIDFwQjAgRm56MCB1MTAgdUwwIDF2ZDAgU0wwIDF2ZDAgU0wwIDF2ZDAgMTd6MCAxY04wIDFmejAgMWNOMCAxY0wwIDFjTjAgYXNuMCBEYjAgenZkMCBCejAgMXRCMCBUWDAgMXdwMCBSYjAgMXdwMCBSYjAgMXdwMCBUWDAgQTRwMCB1TDAgMXFOMCBXTDB8XCIsXG4gIFwiQW1lcmljYS9BcmdlbnRpbmEvQ2F0YW1hcmNhfExNVCBDTVQgLTA0IC0wMyAtMDJ8NG4uOCA0Zy5NIDQwIDMwIDIwfDAxMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzNDM0MzQzNDI0MzQzMjM0M3wtMzMxVEEuUSAxMjViUi5FIHBLbkguYyBNbjAgMWlOMCBUYjAgMUMxMCBMWDAgMUMxMCBMWDAgMUMxMCBMWDAgMUMxMCBNbjAgMUMxMCBMWDAgMUMxMCBMWDAgMUMxMCBMWDAgMUMxMCBNbjAgTU4wIDJqejAgTU4wIDRsWDAgdTEwIDVMYjAgMXBCMCBGbnowIHUxMCB1TDAgMXZkMCBTTDAgMXZkMCBTTDAgMXZkMCAxN3owIDFjTjAgMWZ6MCAxY04wIDFjTDAgMWNOMCBhc24wIERiMCB6dmQwIEJ6MCAxdEIwIFRYMCAxd3AwIFJiMCAxd3EwIFJhMCAxd3AwIFRYMCBybEIwIDdCMCA4emIwIHVMMHxcIixcbiAgXCJBbWVyaWNhL0FyZ2VudGluYS9Db3Jkb2JhfExNVCBDTVQgLTA0IC0wMyAtMDJ8NGcuTSA0Zy5NIDQwIDMwIDIwfDAxMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzNDM0MzQzNDI0MzQzNDM0M3wtMzMxVEguYyAxMjVjMCBwS25ILmMgTW4wIDFpTjAgVGIwIDFDMTAgTFgwIDFDMTAgTFgwIDFDMTAgTFgwIDFDMTAgTW4wIDFDMTAgTFgwIDFDMTAgTFgwIDFDMTAgTFgwIDFDMTAgTW4wIE1OMCAyanowIE1OMCA0bFgwIHUxMCA1TGIwIDFwQjAgRm56MCB1MTAgdUwwIDF2ZDAgU0wwIDF2ZDAgU0wwIDF2ZDAgMTd6MCAxY04wIDFmejAgMWNOMCAxY0wwIDFjTjAgYXNuMCBEYjAgenZkMCBCejAgMXRCMCBUWDAgMXdwMCBSYjAgMXdxMCBSYTAgMXdwMCBUWDAgQTRwMCB1TDAgMXFOMCBXTDB8XCIsXG4gIFwiQW1lcmljYS9BcmdlbnRpbmEvSnVqdXl8TE1UIENNVCAtMDQgLTAzIC0wMnw0bC5jIDRnLk0gNDAgMzAgMjB8MDEyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjM0MzQzNDIzMjQzNDM0M3wtMzMxVEMuTSAxMjViVC5BIHBLbkguYyBNbjAgMWlOMCBUYjAgMUMxMCBMWDAgMUMxMCBMWDAgMUMxMCBMWDAgMUMxMCBNbjAgMUMxMCBMWDAgMUMxMCBMWDAgMUMxMCBMWDAgMUMxMCBNbjAgTU4wIDJqejAgTU4wIDRsWDAgdTEwIDVMYjAgMXBCMCBGbnowIHUxMCB1TDAgMXZkMCBTTDAgMXZkMCBTTDAgMXZkMCAxN3owIDFjTjAgMWZ6MCAxY04wIDFjTDAgMWNOMCBhc24wIERiMCB6dmQwIEJ6MCAxdEIwIFRYMCAxemUwIFRYMCAxbGQwIFdLMCAxd3AwIFRYMCBBNHAwIHVMMHxcIixcbiAgXCJBbWVyaWNhL0FyZ2VudGluYS9MYV9SaW9qYXxMTVQgQ01UIC0wNCAtMDMgLTAyfDRyLm8gNGcuTSA0MCAzMCAyMHwwMTIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzQzNDM0MzQyMzQzNDMyMzQzfC0zMzFUdy5BIDEyNWJOLm8gcEtuSC5jIE1uMCAxaU4wIFRiMCAxQzEwIExYMCAxQzEwIExYMCAxQzEwIExYMCAxQzEwIE1uMCAxQzEwIExYMCAxQzEwIExYMCAxQzEwIExYMCAxQzEwIE1uMCBNTjAgMmp6MCBNTjAgNGxYMCB1MTAgNUxiMCAxcEIwIEZuejAgdTEwIHVMMCAxdmQwIFNMMCAxdmQwIFNMMCAxdmQwIDE3ejAgMWNOMCAxZnowIDFjTjAgMWNMMCAxY04wIGFzbjAgRGIwIHp2ZDAgQnowIDF0QjAgVFgwIDF3cDAgUW4wIHFPMCAxNm4wIFJiMCAxd3AwIFRYMCBybEIwIDdCMCA4emIwIHVMMHxcIixcbiAgXCJBbWVyaWNhL0FyZ2VudGluYS9NZW5kb3phfExNVCBDTVQgLTA0IC0wMyAtMDJ8NHouZyA0Zy5NIDQwIDMwIDIwfDAxMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzNDM0MzQyMzIzMjQzMjM0M3wtMzMxVG8uSSAxMjViRi53IHBLbkguYyBNbjAgMWlOMCBUYjAgMUMxMCBMWDAgMUMxMCBMWDAgMUMxMCBMWDAgMUMxMCBNbjAgMUMxMCBMWDAgMUMxMCBMWDAgMUMxMCBMWDAgMUMxMCBNbjAgTU4wIDJqejAgTU4wIDRsWDAgdTEwIDVMYjAgMXBCMCBGbnowIHUxMCB1TDAgMXZkMCBTTDAgMXZkMCBTTDAgMXZkMCAxN3owIDFjTjAgMWZ6MCAxY04wIDFjTDAgMWNOMCBhc24wIERiMCB6dmQwIEJ6MCAxdEIwIFRYMCAxdTIwIFNMMCAxdmQwIFRiMCAxd3AwIFRXMCByaTEwIE9wMCA3VFgwIHVMMHxcIixcbiAgXCJBbWVyaWNhL0FyZ2VudGluYS9SaW9fR2FsbGVnb3N8TE1UIENNVCAtMDQgLTAzIC0wMnw0QS5RIDRnLk0gNDAgMzAgMjB8MDEyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjM0MzQzNDM0MzQzNDMyMzQzfC0zMzFUbi44IDEyNWJELlUgcEtuSC5jIE1uMCAxaU4wIFRiMCAxQzEwIExYMCAxQzEwIExYMCAxQzEwIExYMCAxQzEwIE1uMCAxQzEwIExYMCAxQzEwIExYMCAxQzEwIExYMCAxQzEwIE1uMCBNTjAgMmp6MCBNTjAgNGxYMCB1MTAgNUxiMCAxcEIwIEZuejAgdTEwIHVMMCAxdmQwIFNMMCAxdmQwIFNMMCAxdmQwIDE3ejAgMWNOMCAxZnowIDFjTjAgMWNMMCAxY04wIGFzbjAgRGIwIHp2ZDAgQnowIDF0QjAgVFgwIDF3cDAgUmIwIDF3cDAgUmIwIDF3cDAgVFgwIHJsQjAgN0IwIDh6YjAgdUwwfFwiLFxuICBcIkFtZXJpY2EvQXJnZW50aW5hL1NhbHRhfExNVCBDTVQgLTA0IC0wMyAtMDJ8NGwuRSA0Zy5NIDQwIDMwIDIwfDAxMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzNDM0MzQzNDI0MzQzNDN8LTMzMVRDLmsgMTI1YlQuOCBwS25ILmMgTW4wIDFpTjAgVGIwIDFDMTAgTFgwIDFDMTAgTFgwIDFDMTAgTFgwIDFDMTAgTW4wIDFDMTAgTFgwIDFDMTAgTFgwIDFDMTAgTFgwIDFDMTAgTW4wIE1OMCAyanowIE1OMCA0bFgwIHUxMCA1TGIwIDFwQjAgRm56MCB1MTAgdUwwIDF2ZDAgU0wwIDF2ZDAgU0wwIDF2ZDAgMTd6MCAxY04wIDFmejAgMWNOMCAxY0wwIDFjTjAgYXNuMCBEYjAgenZkMCBCejAgMXRCMCBUWDAgMXdwMCBSYjAgMXdxMCBSYTAgMXdwMCBUWDAgQTRwMCB1TDB8XCIsXG4gIFwiQW1lcmljYS9BcmdlbnRpbmEvU2FuX0p1YW58TE1UIENNVCAtMDQgLTAzIC0wMnw0eS40IDRnLk0gNDAgMzAgMjB8MDEyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjM0MzQzNDM0MjM0MzQzMjM0M3wtMzMxVHAuVSAxMjViRy5JIHBLbkguYyBNbjAgMWlOMCBUYjAgMUMxMCBMWDAgMUMxMCBMWDAgMUMxMCBMWDAgMUMxMCBNbjAgMUMxMCBMWDAgMUMxMCBMWDAgMUMxMCBMWDAgMUMxMCBNbjAgTU4wIDJqejAgTU4wIDRsWDAgdTEwIDVMYjAgMXBCMCBGbnowIHUxMCB1TDAgMXZkMCBTTDAgMXZkMCBTTDAgMXZkMCAxN3owIDFjTjAgMWZ6MCAxY04wIDFjTDAgMWNOMCBhc24wIERiMCB6dmQwIEJ6MCAxdEIwIFRYMCAxd3AwIFFuMCBxTzAgMTZuMCBSYjAgMXdwMCBUWDAgcmxkMCBtMTAgOGxiMCB1TDB8XCIsXG4gIFwiQW1lcmljYS9BcmdlbnRpbmEvU2FuX0x1aXN8TE1UIENNVCAtMDQgLTAzIC0wMnw0cC5vIDRnLk0gNDAgMzAgMjB8MDEyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjM0MzQzNDIzMjMyMzQzMjMyM3wtMzMxVHkuQSAxMjViUC5vIHBLbkguYyBNbjAgMWlOMCBUYjAgMUMxMCBMWDAgMUMxMCBMWDAgMUMxMCBMWDAgMUMxMCBNbjAgMUMxMCBMWDAgMUMxMCBMWDAgMUMxMCBMWDAgMUMxMCBNbjAgTU4wIDJqejAgTU4wIDRsWDAgdTEwIDVMYjAgMXBCMCBGbnowIHUxMCB1TDAgMXZkMCBTTDAgMXZkMCBTTDAgMXZkMCAxN3owIDFjTjAgMWZ6MCAxY04wIDFjTDAgMWNOMCBhc24wIERiMCB6dmQwIEJ6MCAxdEIwIFhYMCAxcTIwIFNMMCBBTjAgdkRiMCBtMTAgOGxiMCA4TDAgamQwIDFxTjAgV0wwIDFxTjB8XCIsXG4gIFwiQW1lcmljYS9BcmdlbnRpbmEvVHVjdW1hbnxMTVQgQ01UIC0wNCAtMDMgLTAyfDRrLlEgNGcuTSA0MCAzMCAyMHwwMTIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzQzNDM0MzQyNDM0MzIzNDM0M3wtMzMxVEQuOCAxMjViVC5VIHBLbkguYyBNbjAgMWlOMCBUYjAgMUMxMCBMWDAgMUMxMCBMWDAgMUMxMCBMWDAgMUMxMCBNbjAgMUMxMCBMWDAgMUMxMCBMWDAgMUMxMCBMWDAgMUMxMCBNbjAgTU4wIDJqejAgTU4wIDRsWDAgdTEwIDVMYjAgMXBCMCBGbnowIHUxMCB1TDAgMXZkMCBTTDAgMXZkMCBTTDAgMXZkMCAxN3owIDFjTjAgMWZ6MCAxY04wIDFjTDAgMWNOMCBhc24wIERiMCB6dmQwIEJ6MCAxdEIwIFRYMCAxd3AwIFJiMCAxd3EwIFJhMCAxd3AwIFRYMCBybEIwIDROMCA4QlgwIHVMMCAxcU4wIFdMMHxcIixcbiAgXCJBbWVyaWNhL0FyZ2VudGluYS9Vc2h1YWlhfExNVCBDTVQgLTA0IC0wMyAtMDJ8NHguYyA0Zy5NIDQwIDMwIDIwfDAxMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzNDM0MzQzNDM0MzQzMjM0M3wtMzMxVHEuTSAxMjViSC5BIHBLbkguYyBNbjAgMWlOMCBUYjAgMUMxMCBMWDAgMUMxMCBMWDAgMUMxMCBMWDAgMUMxMCBNbjAgMUMxMCBMWDAgMUMxMCBMWDAgMUMxMCBMWDAgMUMxMCBNbjAgTU4wIDJqejAgTU4wIDRsWDAgdTEwIDVMYjAgMXBCMCBGbnowIHUxMCB1TDAgMXZkMCBTTDAgMXZkMCBTTDAgMXZkMCAxN3owIDFjTjAgMWZ6MCAxY04wIDFjTDAgMWNOMCBhc24wIERiMCB6dmQwIEJ6MCAxdEIwIFRYMCAxd3AwIFJiMCAxd3AwIFJiMCAxd3AwIFRYMCBya04wIDhwMCA4emIwIHVMMHxcIixcbiAgXCJBbWVyaWNhL0FzdW5jaW9ufExNVCBBTVQgLTA0IC0wM3wzTy5FIDNPLkUgNDAgMzB8MDEyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyM3wtM2VMdzkuayAxRkdvMCAxREtNOS5rIDNDTDAgM0RkMCAxMEwwIDFwQjAgMTBuMCAxcEIwIDEwbjAgMXBCMCAxY0wwIDFkZDAgMWRiMCAxZGQwIDFjTDAgMWRkMCAxY0wwIDFkZDAgMWNMMCAxZGQwIDFkYjAgMWRkMCAxY0wwIDFkZDAgMWNMMCAxZGQwIDFjTDAgMWRkMCAxZGIwIDFkZDAgMWNMMCAxbEIwIDE0bjAgMWRkMCAxY0wwIDFmZDAgV0wwIDFyZDAgMWFMMCAxZEIwIFh6MCAxcXAwIFhiMCAxcU4wIDEwTDAgMXJCMCBUWDAgMXRCMCBXTDAgMXFOMCAxMXowIDFvMTAgMTF6MCAxbzEwIDExejAgMXFOMCAxY0wwIFdOMCAxcUwwIDExQjAgMW5YMCAxaXAwIFdMMCAxcU4wIFdMMCAxcU4wIFdMMCAxdEIwIFRYMCAxdEIwIFRYMCAxdEIwIDE5WDAgMWExMCAxZnowIDFhMTAgMWZ6MCAxY04wIDE3YjAgMWlwMCAxN2IwIDFpcDAgMTdiMCAxaXAwIDE5WDAgMWZCMCAxOVgwIDFmQjAgMTlYMCAxaXAwIDE3YjAgMWlwMCAxN2IwIDFpcDAgMTlYMCAxZkIwIDE5WDAgMWZCMCAxOVgwIDFmQjAgMTlYMCAxaXAwIDE3YjAgMWlwMCAxN2IwIDFpcDAgMTlYMCAxZkIwIDE5WDAgMWZCMCAxOVgwIDFpcDAgMTdiMCAxaXAwIDE3YjAgMWlwMCAxOVgwIDFmQjAgMTlYMCAxZkIwIDE5WDAgMWZCMCAxOVgwIDFpcDAgMTdiMCAxaXAwIDE3YjAgMWlwMCAxOVgwIDFmQjAgMTlYMCAxZkIwIDE5WDAgMWlwMCAxN2IwIDFpcDAgMTdiMCAxaXAwIDE3YjAgMWlwMCAxOVgwIDFmQjAgMTlYMCAxZkIwIDE5WDAgMWlwMCAxN2IwIDFpcDAgMTdiMCAxaXAwIDE5WDAgMWZCMCAxOVgwIDFmQjAgMTlYMCAxZkIwIDE5WDAgMWlwMCAxN2IwIDFpcDAgMTdiMCAxaXAwIDE5WDAgMWZCMCAxOVgwIDFmQjAgMTlYMCAxaXAwIDE3YjAgMWlwMCAxN2IwIDFpcDAgMTlYMCAxZkIwIDE5WDAgMWZCMCAxOVgwIDFmQjAgMTlYMCAxaXAwIDE3YjAgMWlwMCAxN2IwIDFpcDAgMTlYMCAxZkIwIDE5WDAgMWZCMCAxOVgwIDFpcDAgMTdiMCAxaXAwIDE3YjAgMWlwMCAxN2IwIDFpcDAgMTlYMCAxZkIwIDE5WDAgMWZCMCAxOVgwIDFpcDAgMTdiMCAxaXAwIDE3YjAgMWlwMCAxOVgwIDFmQjAgMTlYMCAxZkIwIDE5WDAgMWZCMCAxOVgwIDFpcDAgMTdiMCAxaXAwIDE3YjAgMWlwMCAxOVgwIDFmQjAgMTlYMCAxZkIwIDE5WDAgMWlwMCAxN2IwIDFpcDAgMTdiMCAxaXAwIDE5WDAgMWZCMCAxOVgwIDFmQjAgMTlYMCAxZkIwIDE5WDAgMWlwMCAxN2IwIDFpcDAgMTdiMCAxaXAwIDE5WDAgMWZCMCAxOVgwIDFmQjAgMTlYMCAxaXAwIDE3YjAgMWlwMCAxN2IwIDFpcDAgMTdiMCAxaXAwIDE5WDAgMWZCMCAxOVgwIDFmQjAgMTlYMCAxZkIwIDE5WDAgMWlwMCAxN2IwIDFpcDAgMTdiMCAxaXAwIDE5WDAgMWZCMCAxOVgwIDFmQjAgMTlYMCAxaXAwIDE3YjAgMWlwMCAxN2IwIDFpcDAgMTdiMCAxaXAwIDE5WDAgMWZCMCAxOVgwIDFmQjAgMTlYMCAxaXAwIDE3YjAgMWlwMCAxN2IwIDFpcDAgMTlYMCAxZkIwIDE5WDAgMWZCMCAxOVgwIDFmQjAgMTlYMCAxaXAwIDE3YjAgMWlwMCAxN2IwIDFpcDAgMTlYMCAxZkIwIDE5WDAgMWZCMCAxOVgwIDFpcDAgMTdiMCAxaXAwIDE3YjAgMWlwMCAxOVgwIDFmQjAgMTlYMCAxZkIwIDE5WDAgMWZCMCAxOVgwIDFpcDAgMTdiMCAxaXAwIDE3YjAgMWlwMCAxOVgwIDFmQjAgMTlYMCAxZkIwIDE5WDAgMWlwMCAxN2IwIDFpcDAgMTdiMCAxaXAwIDE3YjAgMWlwMCAxOVgwIDFmQjAgMTlYMCAxZkIwIDE5WDAgMWlwMCAxN2IwIDFpcDAgMTdiMCAxaXAwIDE5WDAgMWZCMCAxOVgwIDFmQjAgMTlYMCAxZkIwIDE5WDAgMWlwMCAxN2IwIDFpcDAgMTdiMCAxaXAwIDE5WDAgMWZCMCAxOVgwIDFmQjAgMTlYMCAxaXAwIDE3YjAgMWlwMCAxN2IwIDFpcDAgMTlYMCAxZkIwIDE5WDAgMWZCMCAxOVgwIDFmQjAgMTlYMCAxaXAwIDE3YjAgMWlwMCAxN2IwIDFpcDAgMTlYMCAxZkIwIDE5WDAgMWZCMCAxOVgwIDFpcDAgMTdiMCAxaXAwIDE3YjAgMWlwMCAxN2IwIDFpcDAgMTlYMCAxZkIwIDE5WDAgMWZCMCAxOVgwIDFpcDAgMTdiMCAxaXAwIDE3YjAgMWlwMCAxOVgwIDFmQjAgMTlYMCAxZkIwIDE5WDAgMWZCMCAxOVgwIDFpcDAgMTdiMCAxaXAwIDE3YjAgMWlwMCAxOVgwIDFmQjAgMTlYMCAxZkIwIDE5WDAgMWlwMCAxN2IwIDFpcDAgMTdiMCAxaXAwIDE5WDAgMWZCMCAxOVgwIDFmQjAgMTlYMCAxZkIwIDE5WDAgMWlwMCAxN2IwIDFpcDAgMTdiMCAxaXAwIDE5WDAgMWZCMCAxOVgwIDFmQjAgMTlYMCAxaXAwIDE3YjAgMWlwMCAxN2IwIDFpcDAgMTdiMCAxaXAwIDE5WDAgMWZCMCAxOVgwIDFmQjAgMTlYMCAxaXAwIDE3YjAgMWlwMCAxN2IwIDFpcDAgMTdiMCAxaXAwIDE5WDAgMWZCMCAxOVgwIDFmQjAgMTlYMCAxaXAwIDE3YjAgMWlwMCAxN2IwIDFpcDAgMTdiMCAxaXAwIDE5WDAgMWZCMCAxOVgwIDFmQjAgMTlYMCAxaXAwIDE3YjAgMWlwMCAxN2IwIDFpcDAgMTlYMCAxZkIwIDE5WDAgMWZCMCAxOVgwIDFmQjAgMTlYMCAxaXAwIDE3YjAgMWlwMCAxN2IwIDFpcDAgMTlYMCAxZkIwIDE5WDAgMWZCMCAxOVgwIDFpcDAgMTdiMCAxaXAwIDE3YjAgMWlwMCAxOVgwIDFmQjAgMTlYMCAxZkIwIDE5WDAgMWZCMCAxOVgwIDFpcDAgMTdiMCAxaXAwIDE3YjAgMWlwMCAxOVgwIDFmQjAgMTlYMCAxZkIwIDE5WDAgMWlwMCAxN2IwIDFpcDAgMTdiMCAxaXAwIDE3YjAgMWlwMCAxOVgwIDFmQjAgMTlYMCAxZkIwIDE5WDAgMWlwMCAxN2IwIDFpcDAgMTdiMCAxaXAwIDE5WDAgMWZCMCAxOVgwIDFmQjAgMTlYMCAxZkIwIDE5WDAgMWlwMCAxN2IwIDFpcDAgMTdiMCAxaXAwIDE5WDAgMWZCMCAxOVgwIDFmQjAgMTlYMCAxaXAwIDE3YjAgMWlwMCAxN2IwIDFpcDAgMTlYMCAxZkIwIDE5WDAgMWZCMCAxOVgwIDFmQjAgMTlYMCAxaXAwIDE3YjAgMWlwMCAxN2IwIDFpcDAgMTlYMCAxZkIwIDE5WDAgMWZCMCAxOVgwIDFpcDAgMTdiMCAxaXAwIDE3YjAgMWlwMCAxN2IwIDFpcDAgMTlYMCAxZkIwIDE5WDAgMWZCMCAxOVgwIDFpcDAgMTdiMCAxaXAwIDE3YjAgMWlwMCAxOVgwIDFmQjAgMTlYMCAxZkIwIDE5WDAgMWZCMCAxOVgwIDFpcDAgMTdiMCAxaXAwIDE3YjAgMWlwMCAxOVgwIDFmQjAgMTlYMCAxZkIwIDE5WDAgMWlwMCAxN2IwIDFpcDAgMTdiMCAxaXAwIDE5WDAgMWZCMCAxOVgwIDFmQjAgMTlYMCAxZkIwIDE5WDAgMWlwMCAxN2IwIDFpcDAgMTdiMCAxaXAwIDE5WDAgMWZCMCAxOVgwIDFmQjAgMTlYMCAxaXAwIDE3YjAgMWlwMCAxN2IwIDFpcDAgMTdiMCAxaXAwIDE5WDAgMWZCMCAxOVgwIDFmQjAgMTlYMCAxaXAwIDE3YjAgMWlwMCAxN2IwIDFpcDAgMTlYMCAxZkIwIDE5WDAgMWZCMCAxOVgwIDFmQjAgMTlYMCAxaXAwIDE3YjAgMWlwMCAxN2IwIDFpcDAgMTdiMCAxaXAwIDE5WDAgMWZCMCAxOVgwIDFmQjAgMTlYMCAxaXAwIDE3YjAgMWlwMCAxN2IwIDFpcDAgMTlYMCAxZkIwIDE5WDAgMWZCMCAxOVgwIDFmQjAgMTlYMCAxaXAwIDE3YjAgMWlwMCAxN2IwIDFpcDAgMTlYMCAxZkIwIDE5WDAgMWZCMCAxOVgwIDFpcDAgMTdiMCAxaXAwIDE3YjAgMWlwMCAxOVgwIDFmQjAgMTlYMCAxZkIwIDE5WDAgMWZCMCAxOVgwIDFpcDAgMTdiMCAxaXAwIDE3YjAgMWlwMCAxOVgwIDFmQjAgMTlYMCAxZkIwIDE5WDAgMWlwMCAxN2IwIDFpcDAgMTdiMCAxaXAwIDE3YjAgMWlwMCAxOVgwIDFmQjAgMTlYMCAxZkIwIDE5WDAgMWlwMCAxN2IwIDFpcDAgMTdiMCAxaXAwIDE5WDAgMWZCMCAxOVgwIDFmQjAgMTlYMCAxZkIwIDE5WDAgMWlwMCAxN2IwIDFpcDAgMTdiMCAxaXAwIDE5WDAgMWZCMCAxOVgwIDFmQjAgMTlYMCAxaXAwIDE3YjAgMWlwMCAxN2IwIDFpcDAgMTlYMCAxZkIwIDE5WDAgMWZCMCAxOVgwIDFmQjAgMTlYMCAxaXAwIDE3YjAgMWlwMCAxN2IwIDFpcDAgMTlYMCAxZkIwIDE5WDAgMWZCMCAxOVgwIDFpcDAgMTdiMCAxaXAwIDE3YjAgMWlwMCAxN2IwIDFpcDAgMTlYMCAxZkIwIDE5WDAgMWZCMCAxOVgwIDFpcDAgMTdiMCAxaXAwIDE3YjAgMWlwMCAxOVgwIDFmQjAgMTlYMCAxZkIwIDE5WDAgMWZCMCAxOVgwIDFpcDAgMTdiMCAxaXAwIDE3YjAgMWlwMCAxOVgwIDFmQjAgMTlYMCAxZkIwIDE5WDAgMWlwMCAxN2IwIDFpcDAgMTdiMCAxaXAwIDE5WDAgMWZCMCAxOVgwIDFmQjAgMTlYMCAxZkIwIDE5WDAgMWlwMCAxN2IwIDFpcDAgMTdiMCAxaXAwIDE5WDAgMWZCMCAxOVgwIDFmQjAgMTlYMCAxaXAwIDE3YjAgMWlwMCAxN2IwIDFpcDAgMTdiMCAxaXAwIDE5WDAgMWZCMCAxOVgwIDFmQjAgMTlYMCAxaXAwIDE3YjAgMWlwMCAxN2IwIDFpcDAgMTlYMCAxZkIwIDE5WDAgMWZCMCAxOVgwIDFmQjAgMTlYMCAxaXAwIDE3YjAgMWlwMCAxN2IwIDFpcDAgMTlYMCAxZkIwIDE5WDAgMWZCMCAxOVgwIDFpcDAgMTdiMCAxaXAwIDE3YjAgMWlwMCAxOVgwIDFmQjAgMTlYMCAxZkIwIDE5WDAgMWZCMCAxOVgwIDFpcDAgMTdiMCAxaXAwIDE3YjAgMWlwMCAxOVgwIDFmQjAgMTlYMCAxZkIwIDE5WDAgMWlwMCAxN2IwIDFpcDAgMTdiMCAxaXAwIDE3YjAgMWlwMCAxOVgwIDFmQjAgMTlYMCAxZkIwIDE5WDAgMWlwMCAxN2IwIDFpcDAgMTdiMCAxaXAwIDE5WDAgMWZCMCAxOVgwIDFmQjAgMTlYMCAxZkIwIDE5WDAgMWlwMCAxN2IwIDFpcDAgMTdiMCAxaXAwIDE5WDAgMWZCMCAxOVgwIDFmQjAgMTlYMCAxaXAwIDE3YjAgMWlwMCAxN2IwIDFpcDAgMTlYMCAxZkIwIDE5WDAgMWZCMCAxOVgwIDFmQjAgMTlYMCAxaXAwIDE3YjAgMWlwMCAxN2IwIDFpcDAgMTlYMCAxZkIwIDE5WDAgMWZCMCAxOVgwIDFpcDAgMTdiMCAxaXAwIDE3YjAgMWlwMCAxN2IwIDFpcDAgMTlYMCAxZkIwIDE5WDAgMWZCMCAxOVgwIDFpcDAgMTdiMCAxaXAwIDE3YjAgMWlwMCAxOVgwIDFmQjAgMTlYMCAxZkIwIDE5WDAgMWZCMCAxOVgwIDFpcDAgMTdiMCAxaXAwIDE3YjAgMWlwMCAxOVgwIDFmQjAgMTlYMCAxZkIwIDE5WDAgMWlwMCAxN2IwIDFpcDAgMTdiMCAxaXAwIDE5WDAgMWZCMCAxOVgwIDFmQjAgMTlYMCAxZkIwIDE5WDAgMWlwMCAxN2IwIDFpcDAgMTdiMCAxaXAwIDE5WDAgMWZCMCAxOVgwIDFmQjAgMTlYMCAxaXAwIDE3YjAgMWlwMCAxN2IwIDFpcDAgMTdiMCAxaXAwIDE5WDAgMWZCMCAxOVgwIDFmQjAgMTlYMCAxaXAwIDE3YjAgMWlwMCAxN2IwIDFpcDAgMTlYMCAxZkIwIDE5WDAgMWZCMCAxOVgwIDFmQjAgMTlYMCAxaXAwIDE3YjAgMWlwMCAxN2IwIDFpcDAgMTlYMCAxZkIwIDE5WDAgMWZCMCAxOVgwIDFpcDAgMTdiMCAxaXAwIDE3YjAgMWlwMCAxOVgwIDFmQjAgMTlYMCAxZkIwIDE5WDAgMWZCMCAxOVgwIDFpcDAgMTdiMCAxaXAwIDE3YjAgMWlwMCAxOVgwIDFmQjAgMTlYMCAxZkIwIDE5WDAgMWlwMCAxN2IwIDFpcDAgMTdiMCAxaXAwIDE3YjAgMWlwMHwyOGU1XCIsXG4gIFwiQW1lcmljYS9QYW5hbWF8TE1UIENNVCBFU1R8NWkuOCA1ai5BIDUwfDAxMnwtM2VMdUYuUSBJeTAxLnN8MTVlNVwiLFxuICBcIkFtZXJpY2EvQmFoaWFfQmFuZGVyYXN8TE1UIE1TVCBDU1QgTURUIENEVHw3MSA3MCA2MCA2MCA1MHwwMTIxMzEyMTMxMzEzMTMxMzEzMTMxMzEzMTMxMzEzMTMxMzE0MjQyNDI0MjQyNDI0MjQyNDI0MjQyNDI0MnwtMVVRRjAgZGVvMCA4bHowIDE2cDAgMTF6MCAxZGQwIG90WDAgMmJtUDAgMWxiMCAxNHAwIDFsYjAgMTRwMCAxbGIwIDE0cDAgMW5YMCAxMUIwIDFuWDAgMWZCMCBXTDAgMWZCMCAxbGIwIDE0cDAgMWxiMCAxNHAwIDFuWDAgMTFCMCAxblgwIDExQjAgMW5YMCAxMUIwIDFuWDAgMTRwMCAxbGIwIDE0cDAgMWxiMCAxNHAwIDFuVzAgMTFCMCAxblgwIDExQjAgMW5YMCAxNHAwIDFsYjAgMTRwMCAxbGIwIDE0cDAgMWxiMCAxNHAwIDFuWDAgMTFCMCAxblgwIDExQjAgMW5YMCAxNHAwIDFsYjAgMTRwMCAxbGIwIDE0cDAgMW5YMCAxMUIwIDFuWDB8ODRlM1wiLFxuICBcIkFtZXJpY2EvQmFoaWF8TE1UIC0wMyAtMDJ8MnkuNCAzMCAyMHwwMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMXwtMmdseHAuVSBIZExwLlUgMWNjMCAxZTEwIDFiWDAgRXpkMCBTbzAgMXZBMCBNbjAgMUJCMCBNTDAgMUJCMCB6WDAgcWUxMCB4YjAgMmVwMCBuejAgMUMxMCB6WDAgMUMxMCBMWDAgMUMxMCBNbjAgSDIxMCBSYjAgMXRCMCBJTDAgMUZkMCBGWDAgMUVOMCBGWDAgMUhCMCBMejAgMUVOMCBMejAgMUMxMCBJTDAgMUhCMCBEYjAgMUhCMCBPbjAgMXpkMCBPbjAgMXpkMCBMejAgMXpkMCBSYjAgMXdOMCBXbjAgMXRCMCBSYjAgMXRCMCBXTDAgMXRCMCBSYjAgMXpkMCBPbjAgMUhCMCBGWDAgbDVCMCBSYjB8MjdlNVwiLFxuICBcIkFtZXJpY2EvQmFyYmFkb3N8TE1UIEFTVCBBRFQgLTAzMzB8M1cudCA0MCAzMCAzdXwwMTIxMjEzMTIxMjEyMTIxfC0ybTRrMS52IDFlQU4xLnYgUkIwIDFCejAgT3AwIDFyYjAgMTFkMCAxakpjMCBJTDAgMWlwMCAxN2IwIDFpcDAgMTdiMCAxbGQwIDEzYjB8MjhlNFwiLFxuICBcIkFtZXJpY2EvQmVsZW18TE1UIC0wMyAtMDJ8M2QuVSAzMCAyMHwwMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjF8LTJnbHdLLjQgSGRLSy40IDFjYzAgMWUxMCAxYlgwIEV6ZDAgU28wIDF2QTAgTW4wIDFCQjAgTUwwIDFCQjAgelgwIHFlMTAgeGIwIDJlcDAgbnowIDFDMTAgelgwIDFDMTAgTFgwIDFDMTAgTW4wIEgyMTAgUmIwIDF0QjAgSUwwIDFGZDAgRlgwfDIwZTVcIixcbiAgXCJBbWVyaWNhL0JlbGl6ZXxMTVQgQ1NUIC0wNTMwIENXVCBDUFQgQ0RUfDVRLk0gNjAgNXUgNTAgNTAgNTB8MDEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEzNDEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjE1MTUxfC0ya0J1Ny5jIGZQQTcuYyBPbnUgMXpjdSBSYnUgMXdvdSBSYnUgMXdvdSBSYnUgMXpjdSBPbnUgMXpjdSBPbnUgMXpjdSBSYnUgMXdvdSBSYnUgMXdvdSBSYnUgMXdvdSBSYnUgMXpjdSBPbnUgMXpjdSBPbnUgMXpjdSBSYnUgMXdvdSBSYnUgMXdvdSBSYnUgMXpjdSBPbnUgMXpjdSBPbnUgMXpjdSBPbnUgMXpjdSBSYnUgMXdvdSBSYnUgMXdvdSBSYnUgMXpjdSBPbnUgMXpjdSBPbnUgMXpjdSBSYnUgUmN1IDdCdDAgTmkwIDRuZDAgUmJ1IDF3b3UgUmJ1IDF3b3UgUmJ1IDF6Y3UgT251IDF6Y3UgT251IDF6Y3UgUmJ1IDF3b3UgUmJ1IDF3b3UgUmJ1IDF3b3UgUmJ1IDF6Y3UgT251IDF6Y3UgT251IDF6Y3UgUmJ1IDF3b3UgUmJ1IDF3b3UgUmJ1IDF6Y3UgT251IDF6Y3UgT251IDF6Y3UgT251IDF6Y3UgUmJ1IDF3b3UgUmJ1IDF3b3UgUmJ1IDF6Y3UgT251IGU5QXUgcW4wIGx4QjAgbW4wfDU3ZTNcIixcbiAgXCJBbWVyaWNhL0JvYV9WaXN0YXxMTVQgLTA0IC0wM3w0Mi5FIDQwIDMwfDAxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjF8LTJnbHZWLmsgSGRLVi5rIDFjYzAgMWUxMCAxYlgwIEV6ZDAgU28wIDF2QTAgTW4wIDFCQjAgTUwwIDFCQjAgelgwIHFlMTAgeGIwIDJlcDAgbnowIDFDMTAgelgwIDFDMTAgTFgwIDFDMTAgTW4wIEgyMTAgUmIwIDF0QjAgSUwwIDFGZDAgRlgwIHNtcDAgV0wwIDF0QjAgMkwwfDYyZTJcIixcbiAgXCJBbWVyaWNhL0JvZ290YXxMTVQgQk1UIC0wNSAtMDR8NFUuZyA0VS5nIDUwIDQwfDAxMjMyfC0zc1R2My5JIDFlSW8wIDM4eW8zLkkgMVBYMHw5MGU1XCIsXG4gIFwiQW1lcmljYS9Cb2lzZXxMTVQgUFNUIFBEVCBNU1QgTVdUIE1QVCBNRFR8N0kuTiA4MCA3MCA3MCA2MCA2MCA2MHwwMTIxMjEzNDUzNjM2MzYzNjM2MzYzNjM2MzYzNjM2MzYzNjM2MzYzNjM2MzYzNjM2MzYzNjM2MzYzNjM2MzYzNjM2MzYzNjM2MzYzNjM2MzYzNjM2MzYzNjM2MzYzNjM2MzYzNjM2MzYzNjM2MzYzNjM2MzYzNjM2MzYzNjM2MzYzNjM2MzYzNjM2MzYzNjM2MzYzNjM2MzYzNjM2MzYzNjM2MzYzNjM2MzYzNjM2MzYzNjM2MzYzNjM2MzYzNjM2MzYzNjM2MzYzNjM2MzYzNjM2MzYzNjM2MzYzNjM2MzYzNjM2MzYzNjM2MzYzNjM2MzYzNjM2MzYzNjM2MzYzNjM2MzYzNjM2MzYzNjM2MzYzNjM2MzYzNjM2MzYzNjM2MzYzNjM2MzYzNjM2MzYzNjM2MzYzNjM2MzYzNjM2MzYzNjM2MzYzNjM2MzYzNjM2MzYzNjM2MzYzNjM2MzYzNjM2MzYzNjM2MzYzNjM2MzYzNjM2MzYzNjM2MzYzNjM2MzYzNjM2MzYzNjM2MzYzNjM2MzYzNjM2MzYzNjM2MzYzNjM2MzYzNjM2MzYzNjM2MzYzNjM2MzYzNjM2MzYzNjM2MzYzNjM2MzYzNjM2MzYzNjM2MzYzNjM2MzYzNjM2MzYzNjM2MzYzNjM2MzYzNjM2MzYzNjM2MzYzNjM2MzYzNjM2MzYzNjM2MzYzNjM2MzYzNjM2MzYzNjM2MzYzNjM2MzYzNjM2MzYzNjM2MzYzNjM2MzYzNjM2MzYzNjM2MzYzNjM2MzYzNjM2MzYzNjM2MzYzNjM2MzYzNjM2MzYzNjM2MzYzNjM2MzYzNjM2MzYzNjM2MzYzNjM2MzYzNjM2MzYzNjM2MzYzNjM2MzYzNjM2MzYzNjM2MzYzNjM2MzYzNjM2MzYzNjM2MzYzNjM2MzYzNjM2MzYzNjM2MzYzNjM2MzYzNjM2MzYzNjM2MzYzNjM2MzYzNjM2MzYzNjM2MzYzNjM2MzYzNjM2MzYzNjM2MzYzNjM2MzYzNjM2MzYzNjM2MzYzNjM2MzYzNjM2MzYzNjM2MzYzNjM2MzYzNjM2MzYzNjM2MzYzNjM2MzYzNjM2MzYzNjM2MzYzNjM2MzYzNjM2MzYzNjM2MzYzNjM2MzYzNjM2MzYzNjM2MzYzNjM2MzYzNjM2MzYzNjM2MzYzNjM2MzYzNjM2MzYzNjM2MzYzNjM2MzYzNjM2MzYzNjM2MzYzNjM2MzYzNjM2MzYzNjM2MzYzNjM2MzYzNjM2MzYzNjM2MzYzNjM2MzYzNjM2MzYzNjM2MzYzNjM2MzYzNjM2MzYzNjM2MzYzNjM2MzYzNjM2MzYzNjM2MzYzNjM2MzYzNjM2MzYzNjM2MzYzNjM2MzYzNjM2MzYzNjM2MzYzNjM2MzYzNjM2MzYzNjM2MzYzNjM2MzYzNjM2M3wtM3RGRTAgMW5FZTAgMW5YMCAxMUIwIDFuWDAgOEMxMCBKQ0wwIDh4MjAgaXgwIFF3TjAgMWNMMCAxY04wIDFjTDAgMWNOMCAxY0wwIDFjTjAgMWNMMCAxY04wIDFmejAgMWNOMCAxY0wwIDFjTjAgMWNMMCBEZDAgMUtuMCBMQjAgMUJYMCAxY04wIDFmejAgMWExMCAxZnowIDFjTjAgMWNMMCAxY04wIDFjTDAgMWNOMCAxY0wwIDFjTjAgMWNMMCAxY04wIDFmejAgMWExMCAxZnowIDFjTjAgMWNMMCAxY04wIDFjTDAgMWNOMCAxY0wwIDE0cDAgMWxiMCAxNHAwIDFuWDAgMTFCMCAxblgwIDExQjAgMW5YMCAxNHAwIDFsYjAgMTRwMCAxbGIwIDE0cDAgMW5YMCAxMUIwIDFuWDAgMTFCMCAxblgwIDE0cDAgMWxiMCAxNHAwIDFsYjAgMTRwMCAxbGIwIDE0cDAgMW5YMCAxMUIwIDFuWDAgMTFCMCAxblgwIDE0cDAgMWxiMCAxNHAwIDFsYjAgMTRwMCAxblgwIDExQjAgMW5YMCAxMUIwIDFuWDAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjB8MjFlNFwiLFxuICBcIkFtZXJpY2EvQ2FtYnJpZGdlX0JheXwtMDAgTVNUIE1XVCBNUFQgTURUIENTVCBDRFQgRVNUfDAgNzAgNjAgNjAgNjAgNjAgNTAgNTB8MDEyMzE0MTQxNDE0MTQxNDE0MTQxNDE0MTQxNDE0MTQxNDE0MTQxNDE0MTQxNDE0MTQxNDE0MTQxNDE0NTY3NTQxNDE0MTQxNDE0MTQxNDE0MTQxNDE0MTQxNDE0MTQxNDE0MTQxNDE0MTQxNDE0MTQxNDE0MTQxNDE0MTQxNDE0MTQxNDE0MTQxNDE0MTQxNDE0MTQxNDE0MTQxNDE0MTQxNDE0MTQxNDE0MTQxNDE0MTQxNDE0MTQxNDE0MTQxNDE0MTQxNDE0MTQxNDE0MTQxNDE0MTQxNDE0MTQxNDE0MTQxNDE0MTQxNDE0MTQxNDE0MTQxNDE0MTQxNDE0MTQxNDE0MTQxNDE0MTQxNDE0MTQxNDE0MTQxNDE0MTQxNDE0MTQxNDE0MTQxNDE0MTQxNDE0MTQxNDE0MTQxNDE0MTQxNDE0MTQxNDE0MTQxNDE0MTQxNDE0MTQxNDE0MTQxNDE0MTQxNDE0MTQxNDE0MTQxNDE0MTQxNDE0MTQxNDE0MTQxNDE0MTQxNDE0MTQxNDE0MTQxNDE0MTQxNDE0MTQxNDE0MTQxNDE0MTQxNDE0MTQxNDE0MTQxNDE0MTQxNDE0MTQxNDE0MTQxNDE0MTQxNDE0MTQxNDE0MTQxNDE0MTQxNDE0MTQxNDE0MTQxNDE0MTQxNDE0MTQxNDE0MTQxNDE0MTQxNDE0MTQxNDE0MTQxNDE0MTQxNDE0MTQxNDE0MTQxNDE0MTQxNDE0MTQxNDE0MTQxNDE0MTQxNDE0MTQxNDE0MTQxNDE0MTQxNDE0MTQxNDE0MTQxNDE0MTQxNDE0MTQxNDE0MTQxNDE0MTQxNDE0MTQxNDE0MTQxNDE0MTQxNDE0MTQxNDE0MTQxNDE0MTQxNDE0MTQxNDE0MTQxNDE0MTQxNDE0MTQxNDE0MTQxNDE0MTQxNDE0MTQxNDE0MTQxNDE0MTQxNDE0MTQxNDE0MTQxNDE0MTQxNDE0MTQxNDE0MTQxNDE0MTQxNDE0MTQxNDE0MTQxNDE0MTQxNDE0MTQxNDE0MTQxNDE0MTQxNDE0MTQxNDE0MTQxNDE0MTQxNDE0MTQxNDE0MTQxNDE0MTQxNDE0MTQxNDE0MTQxNDE0MTQxNDE0MTQxNDE0MTQxNDE0MTQxNDE0MTQxNDE0MTQxNDE0MTQxNDE0MTQxNDE0MTQxNDE0MTQxNDE0MTQxNDE0MTQxNDE0MTQxNDE0MTQxNDE0MTQxNDE0MTQxNDE0MTQxNDE0MTQxNDE0MTQxNDE0MTQxNDE0MTQxNDE0MTQxNDE0MTQxNDE0MTQxNDE0MTQxNDE0MTQxNDE0MTQxNDE0MTQxNDE0MTQxNDE0MTQxNDE0MTQxNDE0MTQxNDE0MTQxNDE0MTQxNDE0MTQxNDE0MTQxNDE0MTQxfC0yMUpjMCBSTzkwIDh4MjAgaXgwIDE0SEIwIDFjTDAgMWNOMCAxY0wwIDFjTjAgMWNMMCAxY04wIDFjTDAgMWNOMCAxZnowIDFhMTAgMWZ6MCAxY04wIDFjTDAgMWNOMCAxY0wwIDFjTjAgMWNMMCAxY04wIDFjTDAgMWNOMCAxZnowIDFhMTAgMWZ6MCAxY04wIDFjTDAgMWNOMCAxY0wwIDFjTjAgMWNMMCAxNHAwIDFsYjAgMTRwMCAxblgwIDExQjAgMW5YMCAxMUIwIDFuWDAgMTRwMCAxbGIwIDE0cDAgMWxiMCAxNHAwIDFuWDAgMTFCMCAxblgwIDExQjAgMW5YMCAxNHAwIDFsYjAgMTRwMCAxbGIwIDE0cDAgMWxiMCAxNHAwIDFuWDAgMTFBMCAxblgwIDJLMCBXUTAgMW5YMCAxNHAwIDFsYjAgMTRwMCAxbGIwIDE0cDAgMW5YMCAxMUIwIDFuWDAgMTFCMCAxblgwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwfDE1ZTJcIixcbiAgXCJBbWVyaWNhL0NhbXBvX0dyYW5kZXxMTVQgLTA0IC0wM3wzQy5zIDQwIDMwfDAxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxfC0yZ2x3bC53IEhkTGwudyAxY2MwIDFlMTAgMWJYMCBFemQwIFNvMCAxdkEwIE1uMCAxQkIwIE1MMCAxQkIwIHpYMCBxZTEwIHhiMCAyZXAwIG56MCAxQzEwIHpYMCAxQzEwIExYMCAxQzEwIE1uMCBIMjEwIFJiMCAxdEIwIElMMCAxRmQwIEZYMCAxRU4wIEZYMCAxSEIwIEx6MCAxRU4wIEx6MCAxQzEwIElMMCAxSEIwIERiMCAxSEIwIE9uMCAxemQwIE9uMCAxemQwIEx6MCAxemQwIFJiMCAxd04wIFduMCAxdEIwIFJiMCAxdEIwIFdMMCAxdEIwIFJiMCAxemQwIE9uMCAxSEIwIEZYMCAxQzEwIEx6MCAxSXAwIEhYMCAxemQwIE9uMCAxSEIwIElMMCAxd3AwIE9uMCAxQzEwIEx6MCAxQzEwIE9uMCAxemQwIE9uMCAxemQwIFJiMCAxemQwIEx6MCAxQzEwIEx6MCAxQzEwIE9uMCAxemQwIE9uMCAxemQwIE9uMCAxemQwIE9uMCAxSEIwIEZYMHw3N2U0XCIsXG4gIFwiQW1lcmljYS9DYW5jdW58TE1UIENTVCBFU1QgQ0RUIEVEVHw1TC40IDYwIDUwIDUwIDQwfDAxMjEzMTMyNDMxMzEzMTMxMzEzMTMxMzEzMTMxMzEzMTMxMzEzMTMxMzEyfC0xVVFHMCAycTNDMCAydHgwIHdnUDAgMWxiMCAxNHAwIDFsYjAgMTRvMCBMejAgeEIwIDE0cDAgMW5YMCAxMUIwIDFuWDAgMWZCMCBXTDAgMWZCMCAxbGIwIDE0cDAgMWxiMCAxNHAwIDFuWDAgMTFCMCAxblgwIDExQjAgMW5YMCAxMUIwIDFuWDAgMTRwMCAxbGIwIDE0cDAgMWxiMCAxNHAwIDFuWDAgMTFCMCAxblgwIDExQjAgMW5YMCAxNHAwIDFsYjAgMTRwMCAxbGIwIERkMHw2M2U0XCIsXG4gIFwiQW1lcmljYS9DYXJhY2FzfExNVCBDTVQgLTA0MzAgLTA0fDRyLkkgNHIuRSA0dSA0MHwwMTIzMjN8LTNlTHZ3LmcgUk9uWC5VIDI4S00yLmsgMUl3T3Uga3FvMHwyOWU1XCIsXG4gIFwiQW1lcmljYS9DYXllbm5lfExNVCAtMDQgLTAzfDN0LmsgNDAgMzB8MDEyfC0ybXJ3dS5FIDJnV291LkV8NThlM1wiLFxuICBcIkFtZXJpY2EvQ2hpY2Fnb3xMTVQgQ1NUIENEVCBFU1QgQ1dUIENQVHw1Ty5BIDYwIDUwIDUwIDUwIDUwfDAxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMzEyMTIxMjEyMTIxNDUxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMXwtM3RGRzAgMW5FZTAgMW5YMCAxMUIwIDFuWDAgMXdwMCBUWDAgV04wIDFxTDAgMWNOMCBXTDAgMXFOMCAxMXowIDFvMTAgMTF6MCAxbzEwIDExejAgMW8xMCAxMXowIDFvMTAgMTF6MCAxcU4wIDExejAgMW8xMCAxMXowIDFvMTAgMTF6MCAxbzEwIDExejAgMW8xMCAxMXowIDFxTjAgV0wwIDFxTjAgMTF6MCAxbzEwIDExejAgMTFCMCAxSHowIDE0cDAgMTF6MCAxbzEwIDExejAgMXFOMCBXTDAgMXFOMCAxMXowIDFvMTAgMTF6MCBSQjAgOHgzMCBpdzAgMW8xMCAxMXowIDFvMTAgMTF6MCAxbzEwIDExejAgMW8xMCAxMXowIDFxTjAgV0wwIDFxTjAgMTF6MCAxbzEwIDExejAgMW8xMCAxMXowIDFvMTAgMTF6MCAxbzEwIDFmejAgMWNOMCAxY0wwIDFjTjAgMWNMMCAxY04wIDFjTDAgMWNOMCAxY0wwIDFjTjAgMWZ6MCAxY04wIDFjTDAgMWNOMCAxY0wwIDFjTjAgMWNMMCAxY04wIDFjTDAgMWNOMCAxZnowIDFhMTAgMWZ6MCAxY04wIDFjTDAgMWNOMCAxY0wwIDFjTjAgMWNMMCAxY04wIDFjTDAgMWNOMCAxZnowIDFjTjAgMWNMMCAxY04wIDFjTDAgczEwIDFWejAgTEIwIDFCWDAgMWNOMCAxZnowIDFhMTAgMWZ6MCAxY04wIDFjTDAgMWNOMCAxY0wwIDFjTjAgMWNMMCAxY04wIDFjTDAgMWNOMCAxZnowIDFhMTAgMWZ6MCAxY04wIDFjTDAgMWNOMCAxY0wwIDFjTjAgMWNMMCAxNHAwIDFsYjAgMTRwMCAxblgwIDExQjAgMW5YMCAxMUIwIDFuWDAgMTRwMCAxbGIwIDE0cDAgMWxiMCAxNHAwIDFuWDAgMTFCMCAxblgwIDExQjAgMW5YMCAxNHAwIDFsYjAgMTRwMCAxbGIwIDE0cDAgMWxiMCAxNHAwIDFuWDAgMTFCMCAxblgwIDExQjAgMW5YMCAxNHAwIDFsYjAgMTRwMCAxbGIwIDE0cDAgMW5YMCAxMUIwIDFuWDAgMTFCMCAxblgwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwfDkyZTVcIixcbiAgXCJBbWVyaWNhL0NoaWh1YWh1YXxMTVQgTVNUIENTVCBNRFQgQ0RUfDc0LmsgNzAgNjAgNjAgNTB8MDEyMTMxMjQyNDIzMTMxMzEzMTMxMzEzMTMxMzEzMTMxMzEzMTMxMzEzMTMxMzEzMTMxMzEzMTMxMzEzMnwtMVVRRjAgZGVvMCA4bHowIDE2cDAgMTF6MCAxZGQwIDJ6UU4wIDFsYjAgMTRwMCAxbGIwIDE0cTAgMWxiMCAxNHAwIDFuWDAgMTFCMCAxblgwIDFmQjAgV0wwIDFmQjAgMWxiMCAxNHAwIDFsYjAgMTRwMCAxblgwIDExQjAgMW5YMCAxMUIwIDFuWDAgMTFCMCAxblgwIDE0cDAgMWxiMCAxNHAwIDFsYjAgMTRwMCAxblgwIDExQjAgMW5YMCAxMUIwIDFuWDAgMTRwMCAxbGIwIDE0cDAgMWxiMCAxNHAwIDFsYjAgMTRwMCAxblgwIDExQjAgMW5YMCAxMUIwIDFuWDAgMTRwMCAxbGIwIDE0cDAgMWxiMCAxNHAwIDFuWDAgMTFCMCAxblgwfDgxZTRcIixcbiAgXCJBbWVyaWNhL0NpdWRhZF9KdWFyZXp8TE1UIE1TVCBDU1QgTURUIENEVHw3NS5VIDcwIDYwIDYwIDUwfDAxMjEzMTI0MjQyMzEzMTMxMzEzMTMxMzEzMTMxMzEzMTMxMzEzMTMxMzEzMTMxMzEzMTMxMzEzMTMxMzIxMzEzMTMxMzEzMTMxMzEzMTMxMzEzMTMxMzEzMTMxMzEzMTMxMzEzMTMxMzEzMTMxMzEzMTMxMzEzMTMxMzEzMTMxMzEzMTMxMzEzMTMxMzEzMTMxMzEzMTMxMzEzMTMxMzEzMTMxMzEzMTMxMzEzMTMxMzEzMTMxMzEzMTMxMzEzMTMxMzEzMTMxMzEzMTMxMzEzMTMxMzEzMTMxMzEzMTMxMzEzMTMxMzEzMTMxMzEzMTMxMzEzMTMxMzEzMTMxMzEzMTMxMzEzMTMxMzEzMTMxMzEzMTMxMzEzMTMxMzEzMTMxMzEzMTMxMzEzMTMxMzEzMTMxMzEzMTMxMzEzMTMxMzEzMTMxMzEzMTMxMzEzMTMxMzEzMTMxMzEzMTMxMzEzMTMxMzEzMTMxMzEzMTMxMzEzMTMxMzEzMTMxMzEzMTMxMzEzMTMxMzEzMTMxMzEzMTMxMzEzMTMxMzEzMTMxMzEzMTMxMzEzMTMxMzEzMTMxMzEzMTMxMzEzMTMxMzEzMTMxMzEzMTMxMzEzMTMxMzEzMTMxMzEzMTMxMzEzMTMxMzEzMTMxMzEzMTMxMzEzMTMxMzEzMTMxMzEzMTMxMzEzMTMxMzEzMTMxMzEzMTMxMzEzMTMxMzEzMTMxMzEzMTMxMzEzMTMxMzEzMTMxMzEzMTMxMzEzMTMxMzEzMTMxMzEzMTMxMzEzMTMxMzEzMTMxMzEzMTMxMzEzMTMxMzEzMTMxMzEzMTMxMzEzMTMxMzEzMTMxMzEzMTMxMzEzMTMxMzEzMTMxMzEzMTMxMzEzMTMxMzEzMTMxMzEzMTMxMzEzMTMxMzEzMTMxMzEzMTMxMzEzMTMxMzEzMTMxMzEzMTMxMzEzMTMxMzEzMTMxMzEzMTMxMzEzMTMxMzEzMTMxMzEzMTMxMzEzMTMxMzEzMTMxMzEzMTMxMzEzMTMxMzEzMTMxMzEzMTMxMzEzMTMxMzEzMTMxMzEzMTMxMzEzMTMxMzEzMTMxMzEzMTMxMzEzMTMxMzEzMTMxMzEzMTMxMzEzMTMxMzEzMTMxMzEzMTMxMzEzMTMxMzEzMTMxMzEzMTMxMzEzMTMxMzEzMTMxMzEzMTMxMzEzMTMxMzEzMTMxMzEzMTMxMzEzMTMxMzEzMTMxMzEzMTMxMzEzMTMxMzEzMTMxMzEzMTMxMzEzMTMxMzEzMTMxMzEzMTMxMzEzMTMxMzEzMTMxMzEzMTMxMzEzMTMxMzEzMTMxMzEzMTMxMzEzMTMxMzEzMTMxMzEzMTMxfC0xVVFGMCBkZW8wIDhsejAgMTZwMCAxMXowIDFkZDAgMnpRTjAgMWxiMCAxNHAwIDFsYjAgMTRxMCAxbGIwIDE0cDAgMW5YMCAxMUIwIDFuWDAgMWZCMCBXTDAgMWZCMCAxbGIwIDE0cDAgMWxiMCAxNHAwIDFuWDAgMTFCMCAxblgwIDExQjAgMW5YMCAxMUIwIDFuWDAgMTRwMCAxbGIwIDE0cDAgMWxiMCBVMTAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXduMCBjbTAgRVAwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjB8XCIsXG4gIFwiQW1lcmljYS9Db3N0YV9SaWNhfExNVCBTSk1UIENTVCBDRFR8NUEuZCA1QS5kIDYwIDUwfDAxMjMyMzIzMjMyfC0zZUx1bi5MIDFmeW8wIDJsdTBuLkwgRGIwIDFLcDAgRGIwIHBSQjAgMTViMCAxa3AwIG1MMHwxMmU1XCIsXG4gIFwiQW1lcmljYS9QaG9lbml4fExNVCBNU1QgTURUIE1XVHw3cy5pIDcwIDYwIDYwfDAxMjEyMTMxMzEyMXwtM3RGRjAgMW5FZTAgMW5YMCAxMUIwIDFuWDAgU2dOMCA0QWwxIEFwMCAxZGIwIFNXcVggMWNMMHw0MmU1XCIsXG4gIFwiQW1lcmljYS9DdWlhYmF8TE1UIC0wNCAtMDN8M0kuayA0MCAzMHwwMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjF8LTJnbHdmLkUgSGRMZi5FIDFjYzAgMWUxMCAxYlgwIEV6ZDAgU28wIDF2QTAgTW4wIDFCQjAgTUwwIDFCQjAgelgwIHFlMTAgeGIwIDJlcDAgbnowIDFDMTAgelgwIDFDMTAgTFgwIDFDMTAgTW4wIEgyMTAgUmIwIDF0QjAgSUwwIDFGZDAgRlgwIDFFTjAgRlgwIDFIQjAgTHowIDFFTjAgTHowIDFDMTAgSUwwIDFIQjAgRGIwIDFIQjAgT24wIDF6ZDAgT24wIDF6ZDAgTHowIDF6ZDAgUmIwIDF3TjAgV24wIDF0QjAgUmIwIDF0QjAgV0wwIDF0QjAgUmIwIDF6ZDAgT24wIDFIQjAgRlgwIDRhMTAgSFgwIDF6ZDAgT24wIDFIQjAgSUwwIDF3cDAgT24wIDFDMTAgTHowIDFDMTAgT24wIDF6ZDAgT24wIDF6ZDAgUmIwIDF6ZDAgTHowIDFDMTAgTHowIDFDMTAgT24wIDF6ZDAgT24wIDF6ZDAgT24wIDF6ZDAgT24wIDFIQjAgRlgwfDU0ZTRcIixcbiAgXCJBbWVyaWNhL0Rhbm1hcmtzaGF2bnxMTVQgLTAzIC0wMiBHTVR8MWUuRSAzMCAyMCAwfDAxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEzfC0yYTVXSi5rIDJ6NWZKLmsgMTlVMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFmQTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFmQTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCBEQzB8OFwiLFxuICBcIkFtZXJpY2EvRGF3c29uX0NyZWVrfExNVCBQU1QgUERUIFBXVCBQUFQgTVNUfDgwLlUgODAgNzAgNzAgNzAgNzB8MDEyMTM0MTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjV8LTN0b2ZYLjQgMW5zcFguNCAxaW4wIFVHcDAgOHgxMCBpeTAgM05CMCAxMXowIDFvMTAgMTF6MCAxbzEwIDExejAgMXFOMCBXTDAgMXFOMCAxMXowIDFvMTAgMTF6MCAxbzEwIDExejAgMW8xMCAxMXowIDFvMTAgMTF6MCAxcU4wIDExejAgMW8xMCAxMXowIDFvMTAgMTF6MCAxbzEwIDExejAgMW8xMCAxMXowIDFxTjAgV0wwIDFxTjAgMWNMMCAxY04wIDFjTDAgMWNOMCAxY0wwIDFjTjAgMWZ6MCAxYTEwIDFmejAgMWNOMCAxY0wwIDFjTjAgMWNMMCAxY04wIDFjTDAgMWNOMCAxY0wwIDFjTjAgMWZ6MCAxY04wIE1MMHwxMmUzXCIsXG4gIFwiQW1lcmljYS9EYXdzb258TE1UIFlTVCBZRFQgWVdUIFlQVCBZRERUIFBTVCBQRFQgTVNUfDloLkUgOTAgODAgODAgODAgNzAgODAgNzAgNzB8MDEyMTIxMzQxNTE2NzY3Njc2NzY3Njc2NzY3Njc2NzY3Njc2NzY3Njc2NzY3Njc2NzY3Njc2NzY3Njc2NzY3Njc2NzY3Njc2NzY3Njc2NzY3Njc2NzY3Njc2NzY3OHwtMk1TZUcuayBHV3BHLmsgMWluMCAxbzEwIDEzVjAgU2VyMCA4eDAwIGl6MCBMQ0wwIDFmQTAganJBMCBmTmQwIDFjTDAgMWNOMCAxY0wwIDFjTjAgMWZ6MCAxYTEwIDFmejAgMWNOMCAxY0wwIDFjTjAgMWNMMCAxY04wIDFjTDAgMTRwMCAxbGIwIDE0cDAgMW5YMCAxMUIwIDFuWDAgMTFCMCAxblgwIDE0cDAgMWxiMCAxNHAwIDFsYjAgMTRwMCAxblgwIDExQjAgMW5YMCAxMUIwIDFuWDAgMTRwMCAxbGIwIDE0cDAgMWxiMCAxNHAwIDFsYjAgMTRwMCAxblgwIDExQjAgMW5YMCAxMUIwIDFuWDAgMTRwMCAxbGIwIDE0cDAgMWxiMCAxNHAwIDFuWDAgMTFCMCAxblgwIDExQjAgMW5YMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXo5MHwxM2UyXCIsXG4gIFwiQW1lcmljYS9EZW52ZXJ8TE1UIE1TVCBNRFQgTVdUIE1QVHw2WC5VIDcwIDYwIDYwIDYwfDAxMjEyMTIxMjEzNDEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMXwtM3RGRjAgMW5FZTAgMW5YMCAxMUIwIDFuWDAgMTFCMCAxcUwwIFdOMCBtbjAgT3JkMCA4eDIwIGl4MCBMQ04wIDFmejAgMWExMCAxZnowIDFjTjAgMWNMMCAxY04wIDFjTDAgMWNOMCAxY0wwIDFjTjAgMWNMMCAxY04wIDFmejAgMWNOMCAxY0wwIDFjTjAgMWNMMCBzMTAgMVZ6MCBMQjAgMUJYMCAxY04wIDFmejAgMWExMCAxZnowIDFjTjAgMWNMMCAxY04wIDFjTDAgMWNOMCAxY0wwIDFjTjAgMWNMMCAxY04wIDFmejAgMWExMCAxZnowIDFjTjAgMWNMMCAxY04wIDFjTDAgMWNOMCAxY0wwIDE0cDAgMWxiMCAxNHAwIDFuWDAgMTFCMCAxblgwIDExQjAgMW5YMCAxNHAwIDFsYjAgMTRwMCAxbGIwIDE0cDAgMW5YMCAxMUIwIDFuWDAgMTFCMCAxblgwIDE0cDAgMWxiMCAxNHAwIDFsYjAgMTRwMCAxbGIwIDE0cDAgMW5YMCAxMUIwIDFuWDAgMTFCMCAxblgwIDE0cDAgMWxiMCAxNHAwIDFsYjAgMTRwMCAxblgwIDExQjAgMW5YMCAxMUIwIDFuWDAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjB8MjZlNVwiLFxuICBcIkFtZXJpY2EvRGV0cm9pdHxMTVQgQ1NUIEVTVCBFV1QgRVBUIEVEVHw1dy5iIDYwIDUwIDQwIDQwIDQwfDAxMjM0MjUyNTI1MjUyNTI1MjUyNTI1MjUyNTI1MjUyNTI1MjUyNTI1MjUyNTI1MjUyNTI1MjUyNTI1MjUyNTI1MjUyNTI1MjUyNTI1MjUyNTI1MjUyNTI1MjUyNTI1MjUyNTI1MjUyNTI1MjUyNTI1MjUyNTI1MjUyNTI1MjUyNTI1MjUyNTI1MjUyNTI1MjUyNTI1MjUyNTI1MjUyNTI1MjUyNTI1MjUyNTI1MjUyNTI1MjUyNTI1MjUyNTI1MjUyNTI1MjUyNTI1MjUyNTI1MjUyNTI1MjUyNTI1MjUyNTI1MjUyNTI1MjUyNTI1MjUyNTI1MjUyNTI1MjUyNTI1MjUyNTI1MjUyNTI1MjUyNTI1MjUyNTI1MjUyNTI1MjUyNTI1MjUyNTI1MjUyNTI1MjUyNTI1MjUyNTI1MjUyNTI1MjUyNTI1MjUyNTI1MjUyNTI1MjUyNTI1MjUyNTI1MjUyNTI1MjUyNTI1MjUyNTI1MjUyNTI1MjUyNTI1MjUyNTI1MjUyNTI1MjUyNTI1MjUyNTI1MjUyNTI1MjUyNTI1MjUyNTI1MjUyNTI1MjUyNTI1MjUyNTI1MjUyNTI1MjUyNTI1MjUyNTI1MjUyNTI1MjUyNTI1MjUyNTI1MjUyNTI1MjUyNTI1MjUyNTI1MjUyNTI1MjUyNTI1MjUyNTI1MjUyNTI1MjUyNTI1MjUyNTI1MjUyNTI1MjUyNTI1MjUyNTI1MjUyNTI1MjUyNTI1MjUyNTI1MjUyNTI1MjUyNTI1MjUyNTI1MjUyNTI1MjUyNTI1MjUyNTI1MjUyNTI1MjUyNTI1MjUyNTI1MjUyNTI1MjUyNTI1MjUyNTI1MjUyNTI1MjUyNTI1MjUyNTI1MjUyNTI1MjUyNTI1MjUyNTI1MjUyNTI1MjUyNTI1MjUyNTI1MjUyNTI1MjUyNTI1MjUyNTI1MjUyNTI1MjUyNTI1MjUyNTI1MjUyNTI1MjUyNTI1MjUyNTI1MjUyNTI1MjUyNTI1MjUyNTI1MjUyNTI1MjUyNTI1MjUyNTI1MjUyNTI1MjUyNTI1MjUyNTI1MjUyNTI1MjUyNTI1MjUyNTI1MjUyNTI1MjUyNTI1MjUyNTI1MjUyNTI1MjUyNTI1MjUyNTI1MjUyNTI1MjUyNTI1MjUyNTI1MjUyNTI1MjUyNTI1MjUyNTI1MjUyNTI1MjUyNTI1MjUyNTI1MjUyNTI1MjUyNTI1MjUyNTI1MjUyNTI1MjUyNTI1MjUyNTI1MjUyNTI1MjUyNTI1MjUyNTI1MjUyNTI1MjUyNTI1MjUyNTI1MjUyNTI1MjUyNTI1MjUyNTI1MjUyNTI1MjUyNTI1MjUyNTI1MjUyNTI1MjUyNTI1MjUyNTI1MjUyNTI1MjUyNTI1MjUyNTI1MjUyNTI1MjUyNTJ8LTJDZ2lyLk4gcGVxci5OIDE1NkwwIDh4NDAgaXYwIDZmZDAgMTF6MCBKeFgxIFNNWCAxY04wIDFjTDAgYVcxMCAxY0wwIHMxMCAxVnowIDFjTjAgMWNMMCAxY04wIDFmejAgMWExMCAxZnowIDFjTjAgMWNMMCAxY04wIDFjTDAgMWNOMCAxY0wwIDFjTjAgMWNMMCAxY04wIDFmejAgMWExMCAxZnowIDFjTjAgMWNMMCAxY04wIDFjTDAgMWNOMCAxY0wwIDE0cDAgMWxiMCAxNHAwIDFuWDAgMTFCMCAxblgwIDExQjAgMW5YMCAxNHAwIDFsYjAgMTRwMCAxbGIwIDE0cDAgMW5YMCAxMUIwIDFuWDAgMTFCMCAxblgwIDE0cDAgMWxiMCAxNHAwIDFsYjAgMTRwMCAxbGIwIDE0cDAgMW5YMCAxMUIwIDFuWDAgMTFCMCAxblgwIDE0cDAgMWxiMCAxNHAwIDFsYjAgMTRwMCAxblgwIDExQjAgMW5YMCAxMUIwIDFuWDAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjB8MzdlNVwiLFxuICBcIkFtZXJpY2EvRWRtb250b258TE1UIE1TVCBNRFQgTVdUIE1QVHw3eC5RIDcwIDYwIDYwIDYwfDAxMjEyMTIxMjEyMTIxMzQxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjF8LTJ5ZDRxLjggc2hkcS44IDFpbjAgMTdkMCBoejAgMmRCMCAxZnowIDFhMTAgMTF6MCAxcU4wIFdMMCAxcU4wIDExejAgSUdOMCA4eDIwIGl4MCAzTkIwIDExejAgWFFwMCAxY0wwIDFjTjAgMWNMMCAxY04wIDFjTDAgMWNOMCAxY0wwIDFjTjAgMWZ6MCAxYTEwIDFmejAgMWNOMCAxY0wwIDFjTjAgMWNMMCAxY04wIDFjTDAgMWNOMCAxY0wwIDFjTjAgMWZ6MCAxYTEwIDFmejAgMWNOMCAxY0wwIDFjTjAgMWNMMCAxY04wIDFjTDAgMTRwMCAxbGIwIDE0cDAgMW5YMCAxMUIwIDFuWDAgMTFCMCAxblgwIDE0cDAgMWxiMCAxNHAwIDFsYjAgMTRwMCAxblgwIDExQjAgMW5YMCAxMUIwIDFuWDAgMTRwMCAxbGIwIDE0cDAgMWxiMCAxNHAwIDFsYjAgMTRwMCAxblgwIDExQjAgMW5YMCAxMUIwIDFuWDAgMTRwMCAxbGIwIDE0cDAgMWxiMCAxNHAwIDFuWDAgMTFCMCAxblgwIDExQjAgMW5YMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMHwxMGU1XCIsXG4gIFwiQW1lcmljYS9FaXJ1bmVwZXxMTVQgLTA1IC0wNHw0RC5zIDUwIDQwfDAxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjF8LTJnbHZrLncgSGRMay53IDFjYzAgMWUxMCAxYlgwIEV6ZDAgU28wIDF2QTAgTW4wIDFCQjAgTUwwIDFCQjAgelgwIHFlMTAgeGIwIDJlcDAgbnowIDFDMTAgelgwIDFDMTAgTFgwIDFDMTAgTW4wIEgyMTAgUmIwIDF0QjAgSUwwIDFGZDAgRlgwIGRQQjAgT24wIHlUZDAgZDVYMHwzMWUzXCIsXG4gIFwiQW1lcmljYS9FbF9TYWx2YWRvcnxMTVQgQ1NUIENEVHw1VS5NIDYwIDUwfDAxMjEyMXwtMVhpRzMuYyAyRnZjMy5jIFdMMCAxcU4wIFdMMHwxMWU1XCIsXG4gIFwiQW1lcmljYS9UaWp1YW5hfExNVCBNU1QgUFNUIFBEVCBQV1QgUFBUfDdNLjQgNzAgODAgNzAgNzAgNzB8MDEyMTIzMjQ1MjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyfC0xVVFGMCA0UTAwIDhtcDAgOGx6MCBTTjAgMWNMMCBwSEIwIDgzcjAgQVUwIDVNTjAgMVJ6MCAzOE4wIFduMCAxcVAwIDExejAgMW8xMCAxMXowIDNOQTAgMTFBMCAxbzAwIDExQTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCBCVXAwIDFmejAgMWExMCAxZnowIDFjTjAgMWNMMCAxY04wIDFjTDAgMWNOMCAxY0wwIDFjTjAgMWNMMCAxY04wIDFmejAgMWExMCAxZnowIDFjTjAgMWNMMCAxY04wIDFjTDAgMWNOMCAxY0wwIDE0cDAgMWxiMCAxNHAwIDFuWDAgMTFCMCAxblgwIDExQjAgMW5YMCAxNHAwIDFsYjAgMTRwMCAxbGIwIDE0cDAgMW5YMCAxMUIwIDFuWDAgMTFCMCAxblgwIDE0cDAgMWxiMCAxNHAwIDFsYjAgMTRwMCAxbGIwIDE0cDAgMW5YMCAxMUIwIDFuWDAgMTFCMCAxblgwIDE0cDAgMWxiMCAxNHAwIDFsYjAgMTRwMCAxblgwIDExQjAgMW5YMCAxMUIwIDFuWDAgMTFCMCAxblgwIDE0cDAgMWxiMCAxNHAwIDFsYjAgVTEwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjB8MjBlNVwiLFxuICBcIkFtZXJpY2EvRm9ydF9OZWxzb258TE1UIFBTVCBQRFQgUFdUIFBQVCBNU1R8OGEuTCA4MCA3MCA3MCA3MCA3MHwwMTIxMzQxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTV8LTN0b2ZOLmQgMW5zcE4uZCAxaW4wIFVHcDAgOHgxMCBpeTAgM05CMCAxMXowIDFvMTAgMTF6MCAxbzEwIDExejAgMXFOMCBXTDAgMXFOMCAxMXowIDFvMTAgMTF6MCAxbzEwIDExejAgMW8xMCAxMXowIDFvMTAgMTF6MCAxcU4wIDExejAgMW8xMCAxMXowIDFvMTAgMTF6MCAxbzEwIDExejAgMW8xMCAxMXowIDFxTjAgV0wwIDFxTjAgMWNMMCAxY04wIDFjTDAgMWNOMCAxY0wwIDFjTjAgMWZ6MCAxYTEwIDFmejAgMWNOMCAxY0wwIDFjTjAgMWNMMCAxY04wIDFjTDAgMWNOMCAxY0wwIDFjTjAgMWZ6MCAxY04wIDFjTDAgMWNOMCAxY0wwIDFjTjAgMWNMMCAxY04wIDFjTDAgMWNOMCAxZnowIDFhMTAgMWZ6MCAxY04wIDFjTDAgMWNOMCAxY0wwIDFjTjAgMWNMMCAxY04wIDFjTDAgMWNOMCAxZnowIDFhMTAgMWZ6MCAxY04wIDFjTDAgMWNOMCAxY0wwIDFjTjAgMWNMMCAxNHAwIDFsYjAgMTRwMCAxblgwIDExQjAgMW5YMCAxMUIwIDFuWDAgMTRwMCAxbGIwIDE0cDAgMWxiMCAxNHAwIDFuWDAgMTFCMCAxblgwIDExQjAgMW5YMCAxNHAwIDFsYjAgMTRwMCAxbGIwIDE0cDAgMWxiMCAxNHAwIDFuWDAgMTFCMCAxblgwIDExQjAgMW5YMCAxNHAwIDFsYjAgMTRwMCAxbGIwIDE0cDAgMW5YMCAxMUIwIDFuWDAgMTFCMCAxblgwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMHwzOWUyXCIsXG4gIFwiQW1lcmljYS9Gb3J0X1dheW5lfExNVCBDU1QgQ0RUIENXVCBDUFQgRVNUIEVEVHw1SS5DIDYwIDUwIDUwIDUwIDUwIDQwfDAxMjEyMTIxMzQxMjEyMTIxMjEyMTIxMjEyMTIxNTE1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjV8LTN0RkcwIDFuRWUwIDFuWDAgMTFCMCAxblgwIFFJMTAgRGIwIFJCMCA4eDMwIGl3MCAxbzEwIDExejAgMW8xMCAxMXowIDFvMTAgMTF6MCAxbzEwIDExejAgMXFOMCBXTDAgMXFOMCAxMXowIDFvMTAgMTF6MCAxbzEwIDExejAgMW8xMCAxMXowIDFvMTAgNVR6MCAxbzEwIHFMYjAgMWNMMCAxY04wIDFjTDAgMXFoZDAgMW5YMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMHxcIixcbiAgXCJBbWVyaWNhL0ZvcnRhbGV6YXxMTVQgLTAzIC0wMnwyeSAzMCAyMHwwMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxfC0yZ2x4cSBIZExxIDFjYzAgMWUxMCAxYlgwIEV6ZDAgU28wIDF2QTAgTW4wIDFCQjAgTUwwIDFCQjAgelgwIHFlMTAgeGIwIDJlcDAgbnowIDFDMTAgelgwIDFDMTAgTFgwIDFDMTAgTW4wIEgyMTAgUmIwIDF0QjAgSUwwIDFGZDAgRlgwIDFFTjAgRlgwIDFIQjAgTHowIG5zcDAgV0wwIDF0QjAgNXowIDJtTjAgT24wfDM0ZTVcIixcbiAgXCJBbWVyaWNhL0dsYWNlX0JheXxMTVQgQVNUIEFEVCBBV1QgQVBUfDNYLk0gNDAgMzAgMzAgMzB8MDEyMTM0MTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxfC0ySXNJMC5jIEN3TzAuYyAxaW4wIFVHcDAgOHg1MCBpdTAgaXExMCAxMXowIEpnMTAgMWNMMCAxY04wIDFjTDAgMWNOMCAxY0wwIDFjTjAgMWNMMCAxY04wIDFmejAgMWExMCAxZnowIDFjTjAgMWNMMCAxY04wIDFjTDAgMWNOMCAxY0wwIDFjTjAgMWNMMCAxY04wIDFmejAgMWExMCAxZnowIDFjTjAgMWNMMCAxY04wIDFjTDAgMWNOMCAxY0wwIDE0cDAgMWxiMCAxNHAwIDFuWDAgMTFCMCAxblgwIDExQjAgMW5YMCAxNHAwIDFsYjAgMTRwMCAxbGIwIDE0cDAgMW5YMCAxMUIwIDFuWDAgMTFCMCAxblgwIDE0cDAgMWxiMCAxNHAwIDFsYjAgMTRwMCAxbGIwIDE0cDAgMW5YMCAxMUIwIDFuWDAgMTFCMCAxblgwIDE0cDAgMWxiMCAxNHAwIDFsYjAgMTRwMCAxblgwIDExQjAgMW5YMCAxMUIwIDFuWDAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjB8MTllM1wiLFxuICBcIkFtZXJpY2EvR29kdGhhYnxMTVQgLTAzIC0wMiAtMDF8M3EuVSAzMCAyMCAxMHwwMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzJ8LTJhNVV4LjQgMno1ZHguNCAxOVUwIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWZBMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWZBMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFmQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDJzbzAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFvMDB8MTdlM1wiLFxuICBcIkFtZXJpY2EvR29vc2VfQmF5fExNVCBOU1QgTkRUIE5TVCBORFQgTldUIE5QVCBBU1QgQURUIEFERFR8NDEuRSAzdS5RIDJ1LlEgM3UgMnUgMnUgMnUgNDAgMzAgMjB8MDEyMTM0MzQzNDM0MzQzNDM1NjM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNzg3ODc4Nzg3ODc4Nzg3ODc4Nzg3ODc4Nzg3ODc4Nzg3ODc4Nzg3ODc4Nzg3OTc4Nzg3ODc4Nzg3ODc4Nzg3ODc4Nzg3ODc4Nzg3ODc4Nzg3ODc4Nzg3ODc4Nzg3ODc4Nzg3ODc4Nzg3ODc4Nzg3ODc4Nzg3ODc4Nzg3ODc4Nzg3ODc4Nzg3ODc4Nzg3ODc4Nzg3ODc4Nzg3ODc4Nzg3ODc4Nzg3ODc4Nzg3ODc4Nzg3ODc4Nzg3ODc4Nzg3ODc4Nzg3ODc4Nzg3ODc4Nzg3ODc4Nzg3ODc4Nzg3ODc4Nzg3ODc4Nzg3ODc4Nzg3ODc4Nzg3ODc4Nzg3ODc4Nzg3ODc4Nzg3ODc4Nzg3ODc4Nzg3ODc4Nzg3ODc4Nzg3ODc4Nzg3ODc4Nzg3ODc4Nzg3ODc4Nzg3ODc4Nzg3ODc4Nzg3ODc4Nzg3ODc4Nzg3ODc4Nzg3ODc4Nzg3ODc4Nzg3ODc4Nzg3ODc4Nzg3ODc4Nzg3ODc4Nzg3ODc4Nzg3ODc4Nzg3ODc4Nzg3ODc4Nzg3ODc4Nzg3ODc4Nzg3ODc4Nzg3ODc4Nzg3ODc4Nzg3ODc4Nzg3ODc4Nzg3ODc4Nzg3ODc4Nzg3ODc4Nzg3ODc4Nzg3ODc4Nzg3ODc4Nzg3ODc4Nzg3ODc4Nzg3ODc4Nzg3ODc4Nzg3ODc4Nzg3ODc4Nzg3ODc4Nzg3ODc4Nzg3ODc4Nzg3ODc4Nzg3ODc4Nzg3ODc4Nzg3ODc4Nzg3ODc4Nzg3ODc4Nzg3ODc4Nzg3ODc4Nzg3ODc4Nzg3ODc4Nzg3ODc4Nzg3ODc4Nzg3ODc4Nzg3ODc4Nzg3ODc4Nzg3ODc4Nzg3ODc4Nzg3ODc4Nzg3ODc4Nzg3ODc4Nzg3ODc4Nzg3ODc4Nzg3ODc4Nzg3ODc4Nzg3ODc4Nzg3ODc4Nzg3ODc4Nzg3ODc4Nzg3ODc4Nzg3ODc4Nzg3ODc4Nzg3ODc4Nzg3ODc4Nzg3ODc4Nzg3ODc4Nzg3ODc4Nzg3ODc4Nzg3ODc4Nzg3ODc4Nzg3ODc4Nzg3ODc4Nzg3ODc4Nzg3ODc4Nzg3ODc4Nzg3ODc4Nzg3ODc4Nzg3ODc4Nzg3ODc4Nzg3ODc4Nzg3ODc4Nzg3ODc4Nzg3ODc4Nzg3ODc4Nzg3ODc4Nzg3ODc4Nzg3ODc4Nzg3ODc4Nzg3ODc4Nzg3ODc4Nzg3ODc4Nzg3ODc4Nzg3ODc4Nzg3ODc4Nzg3ODc4Nzg3ODc4Nzg3ODc4Nzg3ODc4Nzg3ODc4Nzg3ODc4Nzg3ODc4Nzg3ODc4Nzg3ODc4Nzg3ODc4Nzg3ODc4Nzg3ODc4Nzg3ODc4Nzg3ODc4Nzg3ODc4Nzg3ODc4Nzg3ODc4Nzg3ODc4Nzg3ODc4Nzg3ODc4Nzg3ODc4Nzg3ODc4Nzg3ODc4Nzg3ODc4Nzg3ODc4Nzg3ODc4Nzg3ODc4N3wtM3RvalcuayAxbnNwdC5jIDFpbjAgRFhiMCAySGJYLjggV0wwIDFxTjAgV0wwIDFxTjAgV0wwIDF0QjAgVFgwIDF0QjAgV0wwIDFxTjAgV0wwIDFxTjAgN1VIdSBpdHUgMXRCMCBXTDAgMXFOMCBXTDAgMXFOMCBXTDAgMXFOMCBXTDAgMXRCMCBXTDAgMWxkMCAxMXowIDFvMTAgMTF6MCAxbzEwIDExejAgMW8xMCAxMXowIDFvMTAgMTF6MCAxcU4wIDExejAgMW8xMCAxMXowIDFvMTAgMTF6MCAxbzEwIDExejAgMW8xMCAxZnowIDFjTjAgMWNMMCAxY04wIDFjTDAgMWNOMCAxY0wwIDFjTjAgMWNMMCAxY04wIDFmejAgUzEwIGcwdSAxZnowIDFjTjAgMWNMMCAxY04wIDFjTDAgMWNOMCAxY0wwIDFjTjAgMWNMMCAxY04wIDFmejAgMWNOMCAxY0wwIDFjTjAgMWNMMCAxY04wIDFjTDAgMWNOMCAxY0wwIDFjTjAgMWZ6MCAxYTEwIDFmejAgMWNOMCAxY0wwIDFjTjAgMWNMMCAxY04wIDFjTDAgMWNOMCAxY0wwIDFjTjAgMWZ6MCAxYTEwIDFmejAgMWNOMCAxY0wwIDFjTjAgMWNMMCAxY04wIDFjTDAgMTRuMSAxbGIwIDE0cDAgMW5XMCAxMUMwIDFuWDAgMTFCMCAxblgwIDE0cDAgMWxiMCAxNHAwIDFsYjAgMTRwMCAxblgwIDExQjAgMW5YMCAxMUIwIDFuWDAgMTRwMCAxbGIwIDE0cDAgMWxiMCAxNHAwIDFsYjAgMTRwMCAxblgwIDExQjAgMW5YMCAxMUIwIDFuWDAgMTRwMCAxbGIwIDE0cDAgMWxiMCAxNHAwIDFuWDAgMTFCMCAxblgwIDExQjAgMW5YMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpjWCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMHw3NmUyXCIsXG4gIFwiQW1lcmljYS9HcmFuZF9UdXJrfExNVCBLTVQgRVNUIEVEVCBBU1R8NEkudyA1Ny5hIDUwIDQwIDQwfDAxMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjQzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyfC0zZUx2Zi5zIFJLMG0uQyAySEhCUS5PIDFjTDAgMWNOMCAxY0wwIDFjTjAgMWNMMCAxY04wIDFmejAgMWExMCAxZnowIDFjTjAgMWNMMCAxY04wIDFjTDAgMWNOMCAxY0wwIDE0cDAgMWxiMCAxNHAwIDFuWDAgMTFCMCAxblgwIDExQjAgMW5YMCAxNHAwIDFsYjAgMTRwMCAxbGIwIDE0cDAgMW5YMCAxMUIwIDFuWDAgMTFCMCAxblgwIDE0cDAgMWxiMCAxNHAwIDFsYjAgMTRwMCAxbGIwIDE0cDAgMW5YMCAxMUIwIDFuWDAgMTFCMCAxblgwIDE0cDAgMWxiMCAxNHAwIDFsYjAgMTRwMCAxblgwIDExQjAgMW5YMCAxMUIwIDFuWDAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDdqQTAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMHwzN2UyXCIsXG4gIFwiQW1lcmljYS9HdWF0ZW1hbGF8TE1UIENTVCBDRFR8NjIuNCA2MCA1MHwwMTIxMjEyMTIxfC0yNEtoVi5VIDJlZlhWLlUgQW4wIG10ZDAgTnowIGlmQjAgMTdiMCB6REIwIDExejB8MTNlNVwiLFxuICBcIkFtZXJpY2EvR3VheWFxdWlsfExNVCBRTVQgLTA1IC0wNHw1ai5rIDVlIDUwIDQwfDAxMjMyfC0zZUx1RS5FIDFETnpTLkUgMnVJTEsgcnowfDI3ZTVcIixcbiAgXCJBbWVyaWNhL0d1eWFuYXxMTVQgLTA0IC0wMzQ1IC0wM3wzUS5EIDQwIDNKIDMwfDAxMjMxfC0ybWY4Ny5sIDhIYzcubCAycjdiSiBFeTBmfDgwZTRcIixcbiAgXCJBbWVyaWNhL0hhbGlmYXh8TE1UIEFTVCBBRFQgQVdUIEFQVHw0ZS5vIDQwIDMwIDMwIDMwfDAxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMzQxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjF8LTJJc0hKLkEgeHp6Si5BIDFkYjAgM0kzMCAxaW4wIDNIWDAgSUwwIDFFMTAgTUwwIDF5TjAgUGIwIDFCZDAgTW4wIDFCZDAgUnowIDF3MTAgWGIwIDF3MTAgTFgwIDF3MTAgWGIwIDF3MTAgTHowIDFDMTAgSnowIDFFMTAgT0wwIDF5TjAgVW4wIDFxcDAgWGIwIDFxcDAgMTFYMCAxdzEwIEx6MCAxSEIwIExYMCAxQzEwIEZYMCAxdzEwIFhiMCAxcXAwIFhiMCAxQkIwIExYMCAxdGQwIFhiMCAxcXAwIFhiMCBSZjAgOHg1MCBpdTAgMW8xMCAxMXowIDFvMTAgMTF6MCAxbzEwIDExejAgMW8xMCAxMXowIDNRcDAgMTF6MCAxbzEwIDExejAgMW8xMCAxMXowIDFvMTAgMTF6MCAzUXAwIDExejAgMW8xMCAxMXowIDFvMTAgMTF6MCAxbzEwIDExejAgNmkxMCAxY0wwIDFjTjAgMWNMMCAxY04wIDFjTDAgMWNOMCAxZnowIDFhMTAgMWZ6MCAxY04wIDFjTDAgMWNOMCAxY0wwIDFjTjAgMWNMMCAxY04wIDFjTDAgMWNOMCAxZnowIDFjTjAgMWNMMCAxY04wIDFjTDAgMWNOMCAxY0wwIDFjTjAgMWNMMCAxY04wIDFmejAgMWExMCAxZnowIDFjTjAgMWNMMCAxY04wIDFjTDAgMWNOMCAxY0wwIDFjTjAgMWNMMCAxY04wIDFmejAgMWExMCAxZnowIDFjTjAgMWNMMCAxY04wIDFjTDAgMWNOMCAxY0wwIDE0cDAgMWxiMCAxNHAwIDFuWDAgMTFCMCAxblgwIDExQjAgMW5YMCAxNHAwIDFsYjAgMTRwMCAxbGIwIDE0cDAgMW5YMCAxMUIwIDFuWDAgMTFCMCAxblgwIDE0cDAgMWxiMCAxNHAwIDFsYjAgMTRwMCAxbGIwIDE0cDAgMW5YMCAxMUIwIDFuWDAgMTFCMCAxblgwIDE0cDAgMWxiMCAxNHAwIDFsYjAgMTRwMCAxblgwIDExQjAgMW5YMCAxMUIwIDFuWDAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjB8MzllNFwiLFxuICBcIkFtZXJpY2EvSGF2YW5hfExNVCBITVQgQ1NUIENEVHw1dC5zIDV0LkEgNTAgNDB8MDEyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMnwtM2VMdXUudyAxcXgwMC44IDcyenUubyBNTDAgc2xkMCBBbjAgMU5kMCBEYjAgMU5kMCBBbjAgNkVwMCBBbjAgMU5kMCBBbjAgSkRkMCBNbjAgMUFwMCBPbjAgMWZkMCAxMVgwIDFxTjAgV0wwIDF3cDAgMWNMMCAxY04wIDFjTDAgMWNOMCAxZnowIDFjTjAgMTRuMCAxbGQwIDE0TDAgMWtOMCAxNWIwIDFrcDAgMWNMMCAxY04wIDFmejAgMWExMCAxZnowIDFmQjAgMTF6MCAxNHAwIDFuWDAgMTFCMCAxblgwIDFvMTAgMTF6MCAxbzEwIDExejAgMW8xMCAxMXowIDFvMTAgMTRuMCAxbGQwIDE0bjAgMTFCMCAxblgwIDExQjAgMW5YMCAxNHAwIDFsYjAgMTRwMCAxbGIwIDFhMTAgMWluMCAxYTEwIDFmQTAgMWEwMCAxZkEwIDFhMDAgMWZBMCAxYTAwIDFmQTAgMWEwMCAxZkEwIDFjTTAgMWNNMCAxY00wIDFmQTAgMTdjMCAxbzAwIDExQTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDE0bzAgMWxjMCAxNG8wIDFsYzAgMTFBMCA2aTAwIFJjMCAxd28wIFUwMCAxdEEwIFJjMCAxd28wIFUwMCAxd28wIFUwMCAxemMwIFUwMCAxcU0wIE9vMCAxemMwIE9vMCAxemMwIE9vMCAxemMwIFJjMCAxemMwIE9vMCAxemMwIE9vMCAxemMwIE9vMCAxemMwIE9vMCAxemMwIFJjMCAxemMwIE9vMCAxemMwIE9vMCAxemMwIE9vMCAxemMwIE9vMCAxemMwIE9vMCAxemMwIFJjMCAxemMwIE9vMCAxemMwIE9vMCAxemMwIE9vMCAxemMwIE9vMCAxemMwIFJjMCAxemMwIE9vMCAxemMwIE9vMCAxemMwIE9vMCAxemMwIE9vMCAxemMwIE9vMCAxemMwIFJjMCAxemMwIE9vMCAxemMwIE9vMCAxemMwIE9vMCAxemMwIE9vMCAxemMwIE9vMCAxemMwIFJjMCAxemMwIE9vMCAxemMwIE9vMCAxemMwIE9vMCAxemMwIE9vMCAxemMwIFJjMCAxemMwIE9vMCAxemMwIE9vMCAxemMwIE9vMCAxemMwIE9vMCAxemMwIE9vMCAxemMwIFJjMCAxemMwIE9vMCAxemMwIE9vMCAxemMwIE9vMCAxemMwIE9vMCAxemMwIFJjMCAxemMwIE9vMCAxemMwIE9vMCAxemMwIE9vMCAxemMwIE9vMCAxemMwIE9vMCAxemMwIFJjMCAxemMwIE9vMCAxemMwIE9vMCAxemMwIE9vMCAxemMwIE9vMCAxemMwIE9vMCAxemMwIFJjMCAxemMwIE9vMCAxemMwIE9vMCAxemMwIE9vMCAxemMwIE9vMCAxemMwIFJjMCAxemMwIE9vMCAxemMwIE9vMCAxemMwIE9vMCAxemMwIE9vMCAxemMwIE9vMCAxemMwIFJjMCAxemMwIE9vMCAxemMwIE9vMCAxemMwIE9vMCAxemMwIE9vMCAxemMwIFJjMCAxemMwIE9vMCAxemMwIE9vMCAxemMwIE9vMCAxemMwIE9vMCAxemMwIE9vMCAxemMwIFJjMCAxemMwIE9vMCAxemMwIE9vMCAxemMwIE9vMCAxemMwIE9vMCAxemMwIE9vMCAxemMwIFJjMCAxemMwIE9vMCAxemMwIE9vMCAxemMwIE9vMCAxemMwIE9vMCAxemMwIE9vMCAxemMwIFJjMCAxemMwIE9vMCAxemMwIE9vMCAxemMwIE9vMCAxemMwIE9vMCAxemMwIE9vMCAxemMwIFJjMCAxemMwIE9vMCAxemMwIE9vMCAxemMwIE9vMCAxemMwIE9vMCAxemMwIFJjMCAxemMwIE9vMCAxemMwIE9vMCAxemMwIE9vMCAxemMwIE9vMCAxemMwIE9vMCAxemMwIFJjMCAxemMwIE9vMCAxemMwIE9vMCAxemMwIE9vMCAxemMwIE9vMCAxemMwIFJjMCAxemMwIE9vMCAxemMwIE9vMCAxemMwIE9vMCAxemMwIE9vMCAxemMwIE9vMCAxemMwIFJjMCAxemMwIE9vMCAxemMwIE9vMCAxemMwIE9vMCAxemMwIE9vMCAxemMwIE9vMCAxemMwIFJjMCAxemMwIE9vMCAxemMwIE9vMCAxemMwIE9vMCAxemMwIE9vMCAxemMwIFJjMCAxemMwIE9vMCAxemMwIE9vMCAxemMwIE9vMCAxemMwIE9vMCAxemMwIE9vMCAxemMwIFJjMCAxemMwIE9vMCAxemMwIE9vMCAxemMwIE9vMCAxemMwIE9vMCAxemMwIFJjMCAxemMwIE9vMCAxemMwIE9vMCAxemMwIE9vMCAxemMwIE9vMCAxemMwIE9vMCAxemMwIFJjMCAxemMwIE9vMCAxemMwIE9vMCAxemMwIE9vMCAxemMwIE9vMCAxemMwIE9vMCAxemMwIFJjMCAxemMwIE9vMCAxemMwIE9vMCAxemMwIE9vMCAxemMwIE9vMCAxemMwIFJjMCAxemMwIE9vMCAxemMwIE9vMCAxemMwIE9vMCAxemMwIE9vMCAxemMwIE9vMCAxemMwIFJjMCAxemMwIE9vMCAxemMwIE9vMCAxemMwIE9vMCAxemMwIE9vMCAxemMwIFJjMCAxemMwIE9vMCAxemMwIE9vMCAxemMwIE9vMCAxemMwIE9vMCAxemMwIE9vMCAxemMwIFJjMCAxemMwIE9vMCAxemMwIE9vMCAxemMwIE9vMCAxemMwIE9vMCAxemMwIE9vMCAxemMwIFJjMCAxemMwIE9vMCAxemMwIE9vMCAxemMwIE9vMCAxemMwIE9vMCAxemMwIE9vMCAxemMwIFJjMCAxemMwIE9vMCAxemMwIE9vMCAxemMwIE9vMCAxemMwIE9vMCAxemMwIE9vMCAxemMwIFJjMCAxemMwIE9vMCAxemMwIE9vMCAxemMwIE9vMCAxemMwIE9vMCAxemMwIFJjMCAxemMwIE9vMCAxemMwIE9vMCAxemMwIE9vMCAxemMwIE9vMCAxemMwIE9vMCAxemMwIFJjMCAxemMwIE9vMCAxemMwIE9vMCAxemMwIE9vMCAxemMwIE9vMCAxemMwIFJjMCAxemMwIE9vMCAxemMwIE9vMCAxemMwIE9vMCAxemMwIE9vMCAxemMwIE9vMCAxemMwIFJjMCAxemMwIE9vMCAxemMwIE9vMCAxemMwIE9vMCAxemMwIE9vMCAxemMwIE9vMCAxemMwIFJjMCAxemMwIE9vMCAxemMwIE9vMCAxemMwIE9vMCAxemMwIE9vMCAxemMwIFJjMCAxemMwIE9vMCAxemMwIE9vMCAxemMwIE9vMCAxemMwIE9vMCAxemMwIE9vMCAxemMwIFJjMCAxemMwIE9vMCAxemMwIE9vMCAxemMwIE9vMCAxemMwIE9vMCAxemMwIFJjMCAxemMwIE9vMCAxemMwIE9vMCAxemMwIE9vMCAxemMwIE9vMCAxemMwIE9vMCAxemMwIFJjMCAxemMwIE9vMCAxemMwIE9vMCAxemMwIE9vMCAxemMwIE9vMCAxemMwIE9vMCAxemMwIFJjMCAxemMwIE9vMCAxemMwIE9vMCAxemMwIE9vMCAxemMwIE9vMCAxemMwIFJjMCAxemMwIE9vMCAxemMwIE9vMCAxemMwIE9vMCAxemMwIE9vMCAxemMwIE9vMCAxemMwIFJjMCAxemMwIE9vMCAxemMwIE9vMCAxemMwIE9vMCAxemMwIE9vMCAxemMwIFJjMCAxemMwIE9vMCAxemMwIE9vMCAxemMwIE9vMCAxemMwIE9vMCAxemMwIE9vMCAxemMwIFJjMCAxemMwIE9vMCAxemMwIE9vMCAxemMwIE9vMCAxemMwIE9vMCAxemMwIE9vMCAxemMwIFJjMCAxemMwIE9vMCAxemMwIE9vMCAxemMwIE9vMCAxemMwIE9vMCAxemMwIFJjMCAxemMwIE9vMCAxemMwIE9vMCAxemMwIE9vMCAxemMwIE9vMCAxemMwIE9vMCAxemMwIE9vMCAxemMwIFJjMCAxemMwIE9vMCAxemMwIE9vMCAxemMwIE9vMCAxemMwIE9vMCAxemMwIFJjMCAxemMwIE9vMCAxemMwIE9vMCAxemMwIE9vMCAxemMwIE9vMCAxemMwIE9vMCAxemMwIFJjMCAxemMwIE9vMCAxemMwIE9vMCAxemMwIE9vMCAxemMwIE9vMCAxemMwIFJjMCAxemMwIE9vMCAxemMwIE9vMCAxemMwIE9vMCAxemMwIE9vMCAxemMwIE9vMCAxemMwIFJjMCAxemMwIE9vMCAxemMwIE9vMCAxemMwIE9vMCAxemMwIE9vMCAxemMwIE9vMCAxemMwIFJjMCAxemMwIE9vMCAxemMwIE9vMCAxemMwIE9vMCAxemMwIE9vMCAxemMwIFJjMCAxemMwIE9vMCAxemMwIE9vMCAxemMwIE9vMCAxemMwIE9vMCAxemMwIE9vMCAxemMwIFJjMCAxemMwIE9vMCAxemMwIE9vMCAxemMwIE9vMCAxemMwIE9vMCAxemMwIFJjMCAxemMwIE9vMCAxemMwIE9vMCAxemMwIE9vMCAxemMwIE9vMCAxemMwIE9vMCAxemMwIFJjMCAxemMwIE9vMCAxemMwIE9vMCAxemMwIE9vMCAxemMwIE9vMCAxemMwIE9vMCAxemMwIFJjMCAxemMwIE9vMCAxemMwIE9vMCAxemMwIE9vMCAxemMwIE9vMCAxemMwIFJjMCAxemMwIE9vMCAxemMwIE9vMCAxemMwIE9vMCAxemMwIE9vMCAxemMwIE9vMCAxemMwIFJjMCAxemMwIE9vMCAxemMwIE9vMCAxemMwIE9vMCAxemMwIE9vMCAxemMwIFJjMCAxemMwIE9vMCAxemMwIE9vMCAxemMwIE9vMCAxemMwIE9vMCAxemMwIE9vMCAxemMwIFJjMCAxemMwIE9vMCAxemMwIE9vMCAxemMwIE9vMCAxemMwIE9vMCAxemMwIE9vMCAxemMwIFJjMCAxemMwIE9vMCAxemMwIE9vMCAxemMwIE9vMCAxemMwIE9vMCAxemMwIFJjMCAxemMwIE9vMCAxemMwIE9vMCAxemMwIE9vMCAxemMwIE9vMCAxemMwIE9vMCAxemMwIFJjMCAxemMwIE9vMCAxemMwIE9vMCAxemMwIE9vMCAxemMwIE9vMCAxemMwIFJjMCAxemMwIE9vMCAxemMwIE9vMCAxemMwIE9vMCAxemMwIE9vMCAxemMwIE9vMCAxemMwIFJjMCAxemMwIE9vMCAxemMwIE9vMCAxemMwIE9vMCAxemMwIE9vMCAxemMwIE9vMCAxemMwIFJjMCAxemMwIE9vMCAxemMwIE9vMCAxemMwIE9vMCAxemMwIE9vMCAxemMwIFJjMCAxemMwIE9vMCAxemMwIE9vMCAxemMwIE9vMCAxemMwIE9vMCAxemMwIE9vMCAxemMwIFJjMCAxemMwIE9vMCAxemMwIE9vMCAxemMwIE9vMCAxemMwIE9vMCAxemMwIFJjMCAxemMwIE9vMCAxemMwIE9vMCAxemMwIE9vMCAxemMwIE9vMCAxemMwIE9vMCAxemMwIFJjMCAxemMwIE9vMCAxemMwIE9vMCAxemMwIE9vMCAxemMwIE9vMCAxemMwIE9vMCAxemMwIFJjMCAxemMwIE9vMCAxemMwIE9vMCAxemMwIE9vMCAxemMwIE9vMCAxemMwIFJjMCAxemMwIE9vMCAxemMwIE9vMCAxemMwIE9vMCAxemMwIE9vMCAxemMwIE9vMCAxemMwIFJjMCAxemMwIE9vMCAxemMwIE9vMCAxemMwIE9vMCAxemMwIE9vMCAxemMwIFJjMCAxemMwIE9vMCAxemMwIE9vMCAxemMwIE9vMCAxemMwIE9vMCAxemMwIE9vMCAxemMwIFJjMCAxemMwIE9vMCAxemMwIE9vMCAxemMwIE9vMCAxemMwIE9vMCAxemMwIE9vMCAxemMwIFJjMCAxemMwIE9vMCAxemMwIE9vMCAxemMwIE9vMCAxemMwIE9vMCAxemMwIFJjMCAxemMwIE9vMCAxemMwIE9vMCAxemMwIE9vMCAxemMwIE9vMCAxemMwIE9vMCAxemMwIFJjMCAxemMwIE9vMCAxemMwIE9vMCAxemMwIE9vMCAxemMwIE9vMCAxemMwIFJjMCAxemMwIE9vMCAxemMwIE9vMCAxemMwIE9vMCAxemMwIE9vMCAxemMwIE9vMCAxemMwIFJjMCAxemMwIE9vMCAxemMwIE9vMCAxemMwIE9vMCAxemMwIE9vMCAxemMwIE9vMCAxemMwfDIxZTVcIixcbiAgXCJBbWVyaWNhL0hlcm1vc2lsbG98TE1UIE1TVCBDU1QgTURUfDduLlEgNzAgNjAgNjB8MDEyMTMxMjEzMTMxMzF8LTFVUUYwIGRlbzAgOGx6MCAxNnAwIDExejAgMWRkMCBvdFgwIDJibVAwIDFsYjAgMTRwMCAxbGIwIDE0cDAgMWxiMHw2NGU0XCIsXG4gIFwiQW1lcmljYS9JbmRpYW5hL0tub3h8TE1UIENTVCBDRFQgQ1dUIENQVCBFU1R8NUsudSA2MCA1MCA1MCA1MCA1MHwwMTIxMjEzNDEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjE1MTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTI1MjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMXwtM3RGRzAgMW5FZTAgMW5YMCAxMUIwIDFuWDAgU2dOMCA4eDMwIGl3MCAzTkIwIDExejAgMW8xMCAxMXowIDFvMTAgMTF6MCAxcU4wIFdMMCAxcU4wIDExejAgMW8xMCAxMXowIDFvMTAgMTF6MCAxbzEwIDExejAgMW8xMCAxZnowIDFjTjAgMWNMMCAxY04wIDExejAgMW8xMCAxMXowIDFvMTAgMWNMMCAxY04wIDFmejAgMWNOMCAxY0wwIDFjTjAgM0NuMCA4d3AwIDFjTDAgMWNOMCAxY0wwIDFjTjAgMWNMMCAxY04wIDFjTDAgMWNOMCAxZnowIDFjTjAgMWNMMCAxY04wIDFjTDAgczEwIDFWejAgTEIwIDFCWDAgMWNOMCAxZnowIDFhMTAgMWZ6MCAxY04wIDFjTDAgMWNOMCAxY0wwIDFjTjAgMWNMMCAxY04wIDFjTDAgMWNOMCAxZnowIDFhMTAgMWZ6MCAxY04wIDFjTDAgMWNOMCAxY0wwIDFjTjAgMWNMMCAxNHAwIDFsYjAgMTRwMCAxblgwIDExQjAgMW5YMCAxMUIwIDFuWDAgMTRwMCAxbGIwIHo4bzAgMW8wMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMHxcIixcbiAgXCJBbWVyaWNhL0luZGlhbmEvTWFyZW5nb3xMTVQgQ1NUIENEVCBDV1QgQ1BUIEVTVCBFRFR8NUoubiA2MCA1MCA1MCA1MCA1MCA0MHwwMTIxMjEzNDEyMTIxMjEyMTIxMjEyMTIxNTY1NjU2NTY1NjUyNTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NXwtM3RGRzAgMW5FZTAgMW5YMCAxMUIwIDFuWDAgU2dOMCA4eDMwIGl3MCBkeU4wIDExejAgNmZkMCAxMXowIDFvMTAgMTF6MCAxcU4wIDExejAgMW8xMCAxMXowIDFvMTAgMTF6MCAxbzEwIDExejAgMW8xMCAxMXowIDFxTjAganJ6MCAxY0wwIDFjTjAgMWNMMCAxY04wIDFmejAgMWNOMCAxY0wwIDFjTjAgMWNMMCBzMTAgMVZBMCBMQTAgMUJYMCAxZTZwMCAxblgwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwfFwiLFxuICBcIkFtZXJpY2EvSW5kaWFuYS9QZXRlcnNidXJnfExNVCBDU1QgQ0RUIENXVCBDUFQgRVNUIEVEVHw1Ti43IDYwIDUwIDUwIDUwIDUwIDQwfDAxMjEyMTM0MTIxMjEyMTIxMjEyMTIxMjEyMTIxNTEyMTIxMjEyMTIxMjEyMTIxMjEyMTI1MjEyNTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NXwtM3RGRzAgMW5FZTAgMW5YMCAxMUIwIDFuWDAgU2dOMCA4eDMwIGl3MCBualgwIFdOMCAxcU4wIDExejAgMW8xMCAxMXowIDFvMTAgMTF6MCAxbzEwIDExejAgMW8xMCAxMXowIDFxTjAgMWNMMCAxY04wIDFjTDAgMWNOMCAxY0wwIDFjTjAgMWNMMCAxY04wIDNGYjAgMWNOMCAxY0wwIDFjTjAgMWNMMCAxY04wIDFjTDAgMWNOMCAxY0wwIDFjTjAgMWZ6MCAxY04wIDFjTDAgMWNOMCAxY0wwIHMxMCAxVnowIExCMCAxQlgwIDFjTjAgMWZ6MCAxYTEwIDFmejAgMTljbzAgMW8wMCBSZDAgMXpiMCBPbzAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMHxcIixcbiAgXCJBbWVyaWNhL0luZGlhbmEvVGVsbF9DaXR5fExNVCBDU1QgQ0RUIENXVCBDUFQgRVNUIEVEVHw1TC4zIDYwIDUwIDUwIDUwIDUwIDQwfDAxMjEyMTM0MTIxMjEyMTIxMjEyMTIxMjEyMTUxMjE2NTY1MjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMXwtM3RGRzAgMW5FZTAgMW5YMCAxMUIwIDFuWDAgU2dOMCA4eDMwIGl3MCBualgwIFdOMCAxcU4wIDExejAgMW8xMCAxMXowIDFvMTAgMTF6MCAxbzEwIDExejAgMW8xMCAxMXowIDFxTjAgMWNMMCAxY04wIDFjTDAgMWNOMCAxY0wwIDFjTjAgOHduMCAxY04wIDFjTDAgMWNOMCAxY0swIDFjTjAgMWNMMCAxcWhkMCAxbzAwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwfFwiLFxuICBcIkFtZXJpY2EvSW5kaWFuYS9WZXZheXxMTVQgQ1NUIENEVCBDV1QgQ1BUIEVTVCBFRFR8NUUuZyA2MCA1MCA1MCA1MCA1MCA0MHwwMTIxMjEzNDE1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1fC0zdEZHMCAxbkVlMCAxblgwIDExQjAgMW5YMCBTZ04wIDh4MzAgaXcwIGtQQjAgQXduMCAxY0wwIDFjTjAgMWNMMCAxY04wIDFmejAgMWNOMCAxY0wwIDFsbmQwIDFuWDAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjB8XCIsXG4gIFwiQW1lcmljYS9JbmRpYW5hL1ZpbmNlbm5lc3xMTVQgQ1NUIENEVCBDV1QgQ1BUIEVTVCBFRFR8NU8uNyA2MCA1MCA1MCA1MCA1MCA0MHwwMTIxMjEzNDEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjE1NjU2NTIxMjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjV8LTN0RkcwIDFuRWUwIDFuWDAgMTFCMCAxblgwIFNnTjAgOHgzMCBpdzAgMW8xMCAxMXowIGcwcDAgMTF6MCAxbzEwIDExejAgMXFMMCBXTjAgMXFOMCAxMXowIDFvMTAgMTF6MCAxbzEwIDExejAgMW8xMCAxMXowIDFvMTAgMWZ6MCAxY04wIFdMMCAxcU4wIDFjTDAgMWNOMCAxY0wwIDFjTjAgY2FMMCAxY0wwIDFjTjAgMWNMMCAxcWhkMCAxbzAwIFJkMCAxemIwIE9vMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwfFwiLFxuICBcIkFtZXJpY2EvSW5kaWFuYS9XaW5hbWFjfExNVCBDU1QgQ0RUIENXVCBDUFQgRVNUIEVEVHw1Sy5wIDYwIDUwIDUwIDUwIDUwIDQwfDAxMjEyMTM0MTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTU2NTY1MjE2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NXwtM3RGRzAgMW5FZTAgMW5YMCAxMUIwIDFuWDAgU2dOMCA4eDMwIGl3MCAxbzEwIDExejAgMW8xMCAxMXowIDFvMTAgMTF6MCAxbzEwIDExejAgMXFOMCBXTDAgMXFOMCAxMXowIDFvMTAgMTF6MCAxbzEwIDExejAgMW8xMCAxMXowIDFvMTAgMWZ6MCAxY04wIDFjTDAgMWNOMCAxMXowIDFvMTAgMTF6MCAxbzEwIDExejAgMW8xMCAxMXowIDFxTjAganJ6MCAxY0wwIDFjTjAgMWNMMCAxcWhkMCAxbzAwIFJkMCAxemEwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwfFwiLFxuICBcIkFtZXJpY2EvSW51dmlrfC0wMCBQU1QgUERUIE1EVCBNU1R8MCA4MCA3MCA2MCA3MHwwMTIxMjEyMTIxMjEyMTIxMzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNHwtRm5BMCBMM0swIDFjTDAgMWNOMCAxY0wwIDFjTjAgMWNMMCAxY04wIDFjTDAgMWNOMCAxZnowIDFhMTAgMWZ6MCAxY04wIDFjTDAgMWNOMCAxY0swIDFjTjAgMWNMMCAxY04wIDFjTDAgMWNOMCAxZnowIDFhMTAgMWZ6MCAxY04wIDFjTDAgMWNOMCAxY0wwIDFjTjAgMWNMMCAxNHAwIDFsYjAgMTRwMCAxblgwIDExQjAgMW5YMCAxMUIwIDFuWDAgMTRwMCAxbGIwIDE0cDAgMWxiMCAxNHAwIDFuWDAgMTFCMCAxblgwIDExQjAgMW5YMCAxNHAwIDFsYjAgMTRwMCAxbGIwIDE0cDAgMWxiMCAxNHAwIDFuWDAgMTFCMCAxblgwIDExQjAgMW5YMCAxNHAwIDFsYjAgMTRwMCAxbGIwIDE0cDAgMW5YMCAxMUIwIDFuWDAgMTFCMCAxblgwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwfDM1ZTJcIixcbiAgXCJBbWVyaWNhL0lxYWx1aXR8LTAwIEVXVCBFUFQgRVNUIEVEVCBDU1QgQ0RUfDAgNDAgNDAgNTAgNDAgNjAgNTB8MDEyMzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQ1NjM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0M3wtMTZLMDAgN25YMCBpdjAgMTRIQjAgMWNMMCAxY04wIDFjTDAgMWNOMCAxY0wwIDFjTjAgMWNMMCAxY04wIDFmejAgMWExMCAxZnowIDFjTjAgMWNMMCAxY04wIDFjTDAgMWNOMCAxY0wwIDFjTjAgMWNMMCAxY04wIDFmejAgMWExMCAxZnowIDFjTjAgMWNMMCAxY04wIDFjTDAgMWNOMCAxY0wwIDE0cDAgMWxiMCAxNHAwIDFuWDAgMTFCMCAxblgwIDExQjAgMW5YMCAxNHAwIDFsYjAgMTRwMCAxbGIwIDE0cDAgMW5YMCAxMUIwIDFuWDAgMTFCMCAxblgwIDE0cDAgMWxiMCAxNHAwIDFsYjAgMTRwMCAxbGIwIDE0cDAgMW5YMCAxMUMwIDFuWDAgMTFBMCAxblgwIDE0cDAgMWxiMCAxNHAwIDFsYjAgMTRwMCAxblgwIDExQjAgMW5YMCAxMUIwIDFuWDAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjB8NjdlMlwiLFxuICBcIkFtZXJpY2EvSmFtYWljYXxMTVQgS01UIEVTVCBFRFR8NTcuYSA1Ny5hIDUwIDQwfDAxMjMyMzIzMjMyMzIzMjMyMzIzMjMyfC0zZUx1US5PIFJLMDAgMnVNMVEuTyAxVnowIExCMCAxQlgwIDFjTjAgMWZ6MCAxYTEwIDFmejAgMWNOMCAxY0wwIDFjTjAgMWNMMCAxY04wIDFjTDAgMWNOMCAxY0wwIDFjTjAgMWZ6MCAxYTEwIDFmejB8OTRlNFwiLFxuICBcIkFtZXJpY2EvSnVuZWF1fExNVCBMTVQgUFNUIFBXVCBQUFQgUERUIFlEVCBZU1QgQUtTVCBBS0RUfC1mMi5qIDhWLkYgODAgNzAgNzAgNzAgODAgOTAgOTAgODB8MDEyMzQyNTI1MjUyNTI1MjUyNTI1MjUyNTI1MjYyNTI1MjU3ODk4OTg5ODk4OTg5ODk4OTg5ODk4OTg5ODk4OTg5ODk4OTg5ODk4OTg5ODk4OTg5ODk4OTg5ODk4OTg5ODk4OTg5ODk4OTg5ODk4OTg5ODk4OTg5ODk4OTg5ODk4OTg5ODk4OTg5ODk4OTg5ODk4OTg5ODk4OTg5ODk4OTg5ODk4OTg5ODk4OTg5ODk4OTg5ODk4OTg5ODk4OTg5ODk4OTg5ODk4OTg5ODk4OTg5ODk4OTg5ODk4OTg5ODk4OTg5ODk4OTg5ODk4OTg5ODk4OTg5ODk4OTg5ODk4OTg5ODk4OTg5ODk4OTg5ODk4OTg5ODk4OTg5ODk4OTg5ODk4OTg5ODk4OTg5ODk4OTg5ODk4OTg5ODk4OTg5ODk4OTg5ODk4OTg5ODk4OTg5ODk4OTg5ODk4OTg5ODk4OTg5ODk4OTg5ODk4OTg5ODk4OTg5ODk4OTg5ODk4OTg5ODk4OTg5ODk4OTg5ODk4OTg5ODk4OTg5ODk4OTg5ODk4OTg5ODk4OTg5ODk4OTg5ODk4OTg5ODk4OTg5ODk4OTg5ODk4OTg5ODk4OTg5ODk4OTg5ODk4OTg5ODk4OTg5ODk4OTg5ODk4OTg5ODk4OTg5ODk4OTg5ODk4OTg5ODk4OTg5ODk4OTg5ODk4OTg5ODk4OTg5ODk4OTg5ODk4OTg5ODk4OTg5ODk4OTg5ODk4OTg5ODk4OTg5ODk4OTg5ODk4OTg5ODk4OTg5ODk4OTg5ODk4OTg5ODk4OTg5ODk4OTg5ODk4OTg5ODk4OTg5ODk4OTg5ODk4OTg5ODk4OTg5ODk4OTg5ODk4OTg5ODk4OTg5ODk4OTg5ODk4OTg5ODk4OTg5ODk4OTg5ODk4OTg5ODk4OTg5ODk4OTg5ODk4OTg5ODk4OTg5ODk4OTg5ODk4OTg5ODk4OTg5ODk4OTg5ODk4OTg5ODk4OTg5ODk4OTg5ODk4OTg5ODk4OTg5ODk4OTg5ODk4OTg5ODk4OTg5ODk4OTg5ODk4OTg5ODk4OTg5ODk4OTg5ODk4OTg5ODk4OTg5ODk4OTg5ODk4OTg5ODk4OTg5ODk4OTg5ODk4OTg5ODk4OTg5ODk4OTg5ODk4OTg5ODk4OTg5ODk4OTg5ODk4OTg5ODk4OTg5ODk4OTg5ODk4OTg5ODk4OTg5ODk4OTg5ODk4OTg5ODk4OTg5ODk4OTg5ODk4OTg5ODk4OTg5ODk4OTg5ODk4OTg5ODk4OTg5ODk4OTg5ODk4OTg5ODk4OTg5ODk4OTg5ODk4OTg5ODk4OTg5ODk4OTg5ODk4OTg5ODk4OTg5ODk4OTg5ODk4OTg5ODk4OTg5ODk4OTg5ODk4OTg5ODk4OTg5ODk4OTg5ODk4OTg5OHwtNDhQenMuTCAxalZ3cS5zIDFFWDEyLmogOHgxMCBpeTAgVm8xMCAxY0wwIDFjTjAgMWNMMCAxY04wIDFmejAgMWNOMCAxY0wwIDFjTjAgMWNMMCBzMTAgMVZ6MCBMQjAgMUJYMCAxY04wIDFmejAgMWExMCAxZnowIDFjTjAgMWNMMCAxY04wIDFjTDAgMWNOMCAxY00wIDFjTTAgMWNMMCAxY04wIDFmejAgMWExMCAxZnowIGNvMCAxMHEwIDFjTDAgMWNOMCAxY0wwIDFjTjAgMWNMMCAxNHAwIDFsYjAgMTRwMCAxblgwIDExQjAgMW5YMCAxMUIwIDFuWDAgMTRwMCAxbGIwIDE0cDAgMWxiMCAxNHAwIDFuWDAgMTFCMCAxblgwIDExQjAgMW5YMCAxNHAwIDFsYjAgMTRwMCAxbGIwIDE0cDAgMWxiMCAxNHAwIDFuWDAgMTFCMCAxblgwIDExQjAgMW5YMCAxNHAwIDFsYjAgMTRwMCAxbGIwIDE0cDAgMW5YMCAxMUIwIDFuWDAgMTFCMCAxblgwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwfDMzZTNcIixcbiAgXCJBbWVyaWNhL0tlbnR1Y2t5L0xvdWlzdmlsbGV8TE1UIENTVCBDRFQgQ1dUIENQVCBFU1QgRURUfDVILjIgNjAgNTAgNTAgNTAgNTAgNDB8MDEyMTIxMjEyMTM0MTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTI1NjU2NTY1NjU2NTY1MjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjV8LTN0RkcwIDFuRWUwIDFuWDAgMTFCMCAxblgwIDNGZDAgTmIwIExQZDAgMTF6MCBSQjAgOHgzMCBpdzAgMW5YMSBlMFggOXZkMCBXTDAgMXFOMCAxMXowIDFvMTAgMTF6MCAxbzEwIDExejAgMW8xMCAxMXowIDFvMTAgMTF6MCAxcU4wIDFjTDAgMWNOMCAxY0wwIDFjTjAgMWNMMCAxY04wIDFjTDAgMWNOMCAxZnowIDFjTjAgeHowIGdzbzAgMWNMMCAxY04wIDFjTDAgMWNOMCAxY0wwIDFjTjAgMWZ6MCAxY04wIDFjTDAgMWNOMCAxY0wwIHMxMCAxVkEwIExBMCAxQlgwIDFjTjAgMWZ6MCAxYTEwIDFmejAgMWNOMCAxY0wwIDFjTjAgMWNMMCAxY04wIDFjTDAgMWNOMCAxY0wwIDFjTjAgMWZ6MCAxYTEwIDFmejAgMWNOMCAxY0wwIDFjTjAgMWNMMCAxY04wIDFjTDAgMTRwMCAxbGIwIDE0cDAgMW5YMCAxMUIwIDFuWDAgMTFCMCAxblgwIDE0cDAgMWxiMCAxNHAwIDFsYjAgMTRwMCAxblgwIDExQjAgMW5YMCAxMUIwIDFuWDAgMTRwMCAxbGIwIDE0cDAgMWxiMCAxNHAwIDFsYjAgMTRwMCAxblgwIDExQjAgMW5YMCAxMUIwIDFuWDAgMTRwMCAxbGIwIDE0cDAgMWxiMCAxNHAwIDFuWDAgMTFCMCAxblgwIDExQjAgMW5YMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMHxcIixcbiAgXCJBbWVyaWNhL0tlbnR1Y2t5L01vbnRpY2VsbG98TE1UIENTVCBDRFQgQ1dUIENQVCBFU1QgRURUfDVELm8gNjAgNTAgNTAgNTAgNTAgNDB8MDEyMTIxMzQxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTI1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjV8LTN0RkcwIDFuRWUwIDFuWDAgMTFCMCAxblgwIFNnTjAgOHgzMCBpdzAgU1dwMCAxY0wwIDFjTjAgMWNMMCAxY04wIDFjTDAgMWNOMCAxZnowIDFjTjAgMWNMMCAxY04wIDFjTDAgczEwIDFWejAgTEIwIDFCWDAgMWNOMCAxZnowIDFhMTAgMWZ6MCAxY04wIDFjTDAgMWNOMCAxY0wwIDFjTjAgMWNMMCAxY04wIDFjTDAgMWNOMCAxZnowIDFhMTAgMWZ6MCAxY04wIDFjTDAgMWNOMCAxY0wwIDFjTjAgMWNMMCAxNHAwIDFsYjAgMTRwMCAxblgwIDExQjAgMW5YMCAxMUIwIDFuWDAgMTRwMCAxbGIwIDE0cDAgMWxiMCAxNHAwIDFuWDAgMTFCMCAxblgwIDExQjAgMW5YMCAxNHAwIDFsYjAgMTRwMCAxbGIwIDE0cDAgMWxiMCAxNHAwIDFuWDAgMTFCMCAxblgwIDExQTAgMW5YMCAxNHAwIDFsYjAgMTRwMCAxbGIwIDE0cDAgMW5YMCAxMUIwIDFuWDAgMTFCMCAxblgwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwfFwiLFxuICBcIkFtZXJpY2EvTGFfUGF6fExNVCBDTVQgQlNUIC0wNHw0dy5BIDR3LkEgM3cuQSA0MHwwMTIzfC0zZUx2ci5vIDFGSW8wIDEzYjB8MTllNVwiLFxuICBcIkFtZXJpY2EvTGltYXxMTVQgTE1UIC0wNSAtMDR8NTguYyA1OC5BIDUwIDQwfDAxMjMyMzIzMjMyMzIzMjMyfC0zZUx1UC5NIEpjTTAubyAxYkR6UC5vIHpYMCAxYU4wIDFjTDAgMWNOMCAxY0wwIDFQckIwIHpYMCAxTzEwIHpYMCA2R3AwIHpYMCA5OHAwIHpYMHwxMWU2XCIsXG4gIFwiQW1lcmljYS9Mb3NfQW5nZWxlc3xMTVQgUFNUIFBEVCBQV1QgUFBUfDdRLlcgODAgNzAgNzAgNzB8MDEyMTIxMzQxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMXwtM3RGRTAgMW5FZTAgMW5YMCAxMUIwIDFuWDAgU2dOMCA4eDEwIGl5MCA1V3AxIDFWYVggM2RBMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWZBMCAxYTAwIDFmQTAgMWNOMCAxY0wwIDFjTjAgMWNMMCAxY04wIDFjTDAgMWNOMCAxY0wwIDFjTjAgMWZ6MCAxY04wIDFjTDAgMWNOMCAxY0wwIHMxMCAxVnowIExCMCAxQlgwIDFjTjAgMWZ6MCAxYTEwIDFmejAgMWNOMCAxY0wwIDFjTjAgMWNMMCAxY04wIDFjTDAgMWNOMCAxY0wwIDFjTjAgMWZ6MCAxYTEwIDFmejAgMWNOMCAxY0wwIDFjTjAgMWNMMCAxY04wIDFjTDAgMTRwMCAxbGIwIDE0cDAgMW5YMCAxMUIwIDFuWDAgMTFCMCAxblgwIDE0cDAgMWxiMCAxNHAwIDFsYjAgMTRwMCAxblgwIDExQjAgMW5YMCAxMUIwIDFuWDAgMTRwMCAxbGIwIDE0cDAgMWxiMCAxNHAwIDFsYjAgMTRwMCAxblgwIDExQjAgMW5YMCAxMUIwIDFuWDAgMTRwMCAxbGIwIDE0cDAgMWxiMCAxNHAwIDFuWDAgMTFCMCAxblgwIDExQjAgMW5YMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMHwxNWU2XCIsXG4gIFwiQW1lcmljYS9NYWNlaW98TE1UIC0wMyAtMDJ8Mm0uUSAzMCAyMHwwMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjF8LTJnbHhCLjggSGRMQi44IDFjYzAgMWUxMCAxYlgwIEV6ZDAgU28wIDF2QTAgTW4wIDFCQjAgTUwwIDFCQjAgelgwIHFlMTAgeGIwIDJlcDAgbnowIDFDMTAgelgwIDFDMTAgTFgwIDFDMTAgTW4wIEgyMTAgUmIwIDF0QjAgSUwwIDFGZDAgRlgwIDFFTjAgRlgwIDFIQjAgTHowIGRNTjAgTHowIDhRMTAgV0wwIDF0QjAgNXowIDJtTjAgT24wfDkzZTRcIixcbiAgXCJBbWVyaWNhL01hbmFndWF8TE1UIE1NVCBDU1QgRVNUIENEVHw1Si44IDVKLmMgNjAgNTAgNTB8MDEyMzI0MjQyMzIzMjQyNDJ8LTNlTHVlLlEgMU1oYzAuNCAxeUFNZS5NIDRtbjAgOVVwMCBEejAgMUsxMCBEejAgczNGMCAxS0gwIERCMCA5SW4wIGs4cDAgMTlYMCAxbzMwIDExeTB8MjJlNVwiLFxuICBcIkFtZXJpY2EvTWFuYXVzfExNVCAtMDQgLTAzfDQwLjQgNDAgMzB8MDEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjF8LTJnbHZYLlUgSGRLWC5VIDFjYzAgMWUxMCAxYlgwIEV6ZDAgU28wIDF2QTAgTW4wIDFCQjAgTUwwIDFCQjAgelgwIHFlMTAgeGIwIDJlcDAgbnowIDFDMTAgelgwIDFDMTAgTFgwIDFDMTAgTW4wIEgyMTAgUmIwIDF0QjAgSUwwIDFGZDAgRlgwIGRQQjAgT24wfDE5ZTVcIixcbiAgXCJBbWVyaWNhL01hcnRpbmlxdWV8TE1UIEZGTVQgQVNUIEFEVHw0NC5rIDQ0LmsgNDAgMzB8MDEyMzJ8LTNlTHZULkUgUFRBMCAyTFBiVC5FIDE5WDB8MzllNFwiLFxuICBcIkFtZXJpY2EvTWF0YW1vcm9zfExNVCBDU1QgQ0RUfDZ1IDYwIDUwfDAxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjF8LTFVUUcwIDJGakMwIDFuWDAgaTZwMCAxbGIwIDE0cDAgMWxiMCAxNHAwIDFsYjAgMTRwMCAxblgwIDExQjAgMW5YMCAxZkIwIFdMMCAxZkIwIDFsYjAgMTRwMCAxbGIwIDE0cDAgMW5YMCAxMUIwIDFuWDAgMTFCMCAxblgwIDExQjAgMW5YMCAxNHAwIDFsYjAgMTRwMCAxbGIwIFUxMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwfDQ1ZTRcIixcbiAgXCJBbWVyaWNhL01hemF0bGFufExNVCBNU1QgQ1NUIE1EVHw3NS5FIDcwIDYwIDYwfDAxMjEzMTIxMzEzMTMxMzEzMTMxMzEzMTMxMzEzMTMxMzEzMTMxMzEzMTMxMzEzMTMxMzEzMTMxMzEzMTMxfC0xVVFGMCBkZW8wIDhsejAgMTZwMCAxMXowIDFkZDAgb3RYMCAyYm1QMCAxbGIwIDE0cDAgMWxiMCAxNHAwIDFsYjAgMTRwMCAxblgwIDExQjAgMW5YMCAxZkIwIFdMMCAxZkIwIDFsYjAgMTRwMCAxbGIwIDE0cDAgMW5YMCAxMUIwIDFuWDAgMTFCMCAxblgwIDExQjAgMW5YMCAxNHAwIDFsYjAgMTRwMCAxbGIwIDE0cDAgMW5YMCAxMUIwIDFuWDAgMTFCMCAxblgwIDE0cDAgMWxiMCAxNHAwIDFsYjAgMTRwMCAxbGIwIDE0cDAgMW5YMCAxMUIwIDFuWDAgMTFCMCAxblgwIDE0cDAgMWxiMCAxNHAwIDFsYjAgMTRwMCAxblgwIDExQjAgMW5YMHw0NGU0XCIsXG4gIFwiQW1lcmljYS9NZW5vbWluZWV8TE1UIENTVCBDRFQgQ1dUIENQVCBFU1R8NU8uciA2MCA1MCA1MCA1MCA1MHwwMTIxMjEzNDEyMTIxNTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjF8LTNwZEc5LnggMWpjZTkueCAxblgwIDExQjAgMW5YMCBTZ04wIDh4MzAgaXcwIDFvMTAgMTF6MCBMQ04wIDFmejAgNjQxMCA5SmIwIDFjTTAgczEwIDFWejAgTEIwIDFCWDAgMWNOMCAxZnowIDFhMTAgMWZ6MCAxY04wIDFjTDAgMWNOMCAxY0wwIDFjTjAgMWNMMCAxY04wIDFjTDAgMWNOMCAxZnowIDFhMTAgMWZ6MCAxY04wIDFjTDAgMWNOMCAxY0wwIDFjTjAgMWNMMCAxNHAwIDFsYjAgMTRwMCAxblgwIDExQjAgMW5YMCAxMUIwIDFuWDAgMTRwMCAxbGIwIDE0cDAgMWxiMCAxNHAwIDFuWDAgMTFCMCAxblgwIDExQjAgMW5YMCAxNHAwIDFsYjAgMTRwMCAxbGIwIDE0cDAgMWxiMCAxNHAwIDFuWDAgMTFCMCAxblgwIDExQjAgMW5YMCAxNHAwIDFsYjAgMTRwMCAxbGIwIDE0cDAgMW5YMCAxMUIwIDFuWDAgMTFCMCAxblgwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwfDg1ZTJcIixcbiAgXCJBbWVyaWNhL01lcmlkYXxMTVQgQ1NUIEVTVCBDRFR8NVcucyA2MCA1MCA1MHwwMTIxMzEzMTMxMzEzMTMxMzEzMTMxMzEzMTMxMzEzMTMxMzEzMTMxMzEzMTMxMzEzMTMxMzEzMTMxfC0xVVFHMCAycTNDMCAyNG4wIHdHMTAgMWxiMCAxNHAwIDFsYjAgMTRwMCAxbGIwIDE0cDAgMW5YMCAxMUIwIDFuWDAgMWZCMCBXTDAgMWZCMCAxbGIwIDE0cDAgMWxiMCAxNHAwIDFuWDAgMTFCMCAxblgwIDExQjAgMW5YMCAxMUIwIDFuWDAgMTRwMCAxbGIwIDE0cDAgMWxiMCAxNHAwIDFuWDAgMTFCMCAxblgwIDExQjAgMW5YMCAxNHAwIDFsYjAgMTRwMCAxbGIwIDE0cDAgMWxiMCAxNHAwIDFuWDAgMTFCMCAxblgwIDExQjAgMW5YMCAxNHAwIDFsYjAgMTRwMCAxbGIwIDE0cDAgMW5YMCAxMUIwIDFuWDB8MTFlNVwiLFxuICBcIkFtZXJpY2EvTWV0bGFrYXRsYXxMTVQgTE1UIFBTVCBQV1QgUFBUIFBEVCBBS1NUIEFLRFR8LWZkLkcgOEsuaSA4MCA3MCA3MCA3MCA5MCA4MHwwMTIzNDI1MjUyNTI1MjUyNTI1MjUyNTI1MjUyNTI1MjUyNTI2NzY3NjcyNjc2NzY3Njc2NzY3Njc2NzY3Njc2NzY3Njc2NzY3Njc2NzY3Njc2NzY3Njc2NzY3Njc2NzY3Njc2NzY3Njc2NzY3Njc2NzY3Njc2NzY3Njc2NzY3Njc2NzY3Njc2NzY3Njc2NzY3Njc2NzY3Njc2NzY3Njc2NzY3Njc2NzY3Njc2NzY3Njc2NzY3Njc2NzY3Njc2NzY3Njc2NzY3Njc2NzY3Njc2NzY3Njc2NzY3Njc2NzY3Njc2NzY3Njc2NzY3Njc2NzY3Njc2NzY3Njc2NzY3Njc2NzY3Njc2NzY3Njc2NzY3Njc2NzY3Njc2NzY3Njc2NzY3Njc2NzY3Njc2NzY3Njc2NzY3Njc2NzY3Njc2NzY3Njc2NzY3Njc2NzY3Njc2NzY3Njc2NzY3Njc2NzY3Njc2NzY3Njc2NzY3Njc2NzY3Njc2NzY3Njc2NzY3Njc2NzY3Njc2NzY3Njc2NzY3Njc2NzY3Njc2NzY3Njc2NzY3Njc2NzY3Njc2NzY3Njc2NzY3Njc2NzY3Njc2NzY3Njc2NzY3Njc2NzY3Njc2NzY3Njc2NzY3Njc2NzY3Njc2NzY3Njc2NzY3Njc2NzY3Njc2NzY3Njc2NzY3Njc2NzY3Njc2NzY3Njc2NzY3Njc2NzY3Njc2NzY3Njc2NzY3Njc2NzY3Njc2NzY3Njc2NzY3Njc2NzY3Njc2NzY3Njc2NzY3Njc2NzY3Njc2NzY3Njc2NzY3Njc2NzY3Njc2NzY3Njc2NzY3Njc2NzY3Njc2NzY3Njc2NzY3Njc2NzY3Njc2NzY3Njc2NzY3Njc2NzY3Njc2NzY3Njc2NzY3Njc2NzY3Njc2NzY3Njc2NzY3Njc2NzY3Njc2NzY3Njc2NzY3Njc2NzY3Njc2NzY3Njc2NzY3Njc2NzY3Njc2NzY3Njc2NzY3Njc2NzY3Njc2NzY3Njc2NzY3Njc2NzY3Njc2NzY3Njc2NzY3Njc2NzY3Njc2NzY3Njc2NzY3Njc2NzY3Njc2NzY3Njc2NzY3Njc2NzY3Njc2NzY3Njc2NzY3Njc2NzY3Njc2NzY3Njc2NzY3Njc2NzY3Njc2NzY3Njc2NzY3Njc2NzY3Njc2NzY3Njc2NzY3Njc2NzY3Njc2NzY3Njc2NzY3Njc2NzY3Njc2NzY3Njc2NzY3Njc2NzY3Njc2NzY3Njc2NzY3Njc2NzY3Njc2NzY3Njc2NzY3Njc2NzY3Njc2NzY3Njc2NzY3Njc2NzY3Njc2NzY3Njc2NzY3Njc2NzY3Njc2NzY3Njc2fC00OFB6cy5MIDFqVndmLjUgMUVYMWQuRyA4eDEwIGl5MCBWbzEwIDFjTDAgMWNOMCAxY0wwIDFjTjAgMWZ6MCAxY04wIDFjTDAgMWNOMCAxY0wwIHMxMCAxVnowIExCMCAxQlgwIDFjTjAgMWZ6MCAxYTEwIDFmejAgMWNOMCAxY0wwIDFjTjAgMWNMMCAxY04wIDFjTDAgMWNOMCAxY0wwIDFjTjAgMWZ6MCAxYTEwIDFmejAgMWhVMTAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgdU0wIGpCMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwfDE0ZTJcIixcbiAgXCJBbWVyaWNhL01leGljb19DaXR5fExNVCBNU1QgQ1NUIE1EVCBDRFQgQ1dUfDZBLkEgNzAgNjAgNjAgNTAgNTB8MDEyMTMxMjQyNDI1MjQyNDI0MjQyNDI0MjQyNDI0MjQyNDI0MjQyNDI0MjQyNDI0MjQyNDI0MjQyNDI0MjQyNDI0MjQyfC0xVVFGMCBkZW8wIDhsejAgMTZwMCAxMXowIDFkZDAgZ0VuMCBUWDAgM3hkMCBKYjAgNnpCMCBTTDAgZTVkMCAxN2IwIDFQZmYwIDFsYjAgMTRwMCAxbGIwIDE0cDAgMWxiMCAxNHAwIDFuWDAgMTFCMCAxblgwIDFmQjAgV0wwIDFmQjAgMWxiMCAxNHAwIDFsYjAgMTRwMCAxblgwIDExQjAgMW5YMCAxMUIwIDFuWDAgMTFCMCAxblgwIDE0cDAgMWxiMCAxNHAwIDFsYjAgMTRwMCAxblgwIDExQjAgMW5YMCAxMUIwIDFuWDAgMTRwMCAxbGIwIDE0cDAgMWxiMCAxNHAwIDFsYjAgMTRwMCAxblgwIDExQjAgMW5YMCAxMUIwIDFuWDAgMTRwMCAxbGIwIDE0cDAgMWxiMCAxNHAwIDFuWDAgMTFCMCAxblgwfDIwZTZcIixcbiAgXCJBbWVyaWNhL01pcXVlbG9ufExNVCBBU1QgLTAzIC0wMnwzSS5FIDQwIDMwIDIwfDAxMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMnwtMm14VWYuayAyTEhjZi5rIGdRMTAgMWxiMCAxNHAwIDFuWDAgMTFCMCAxblgwIDExQjAgMW5YMCAxNHAwIDFsYjAgMTRwMCAxbGIwIDE0cDAgMW5YMCAxMUIwIDFuWDAgMTFCMCAxblgwIDE0cDAgMWxiMCAxNHAwIDFsYjAgMTRwMCAxbGIwIDE0cDAgMW5YMCAxMUIwIDFuWDAgMTFCMCAxblgwIDE0cDAgMWxiMCAxNHAwIDFsYjAgMTRwMCAxblgwIDExQjAgMW5YMCAxMUIwIDFuWDAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjB8NjFlMlwiLFxuICBcIkFtZXJpY2EvTW9uY3RvbnxMTVQgRVNUIEFTVCBBRFQgQVdUIEFQVHw0ai44IDUwIDQwIDMwIDMwIDMwfDAxMjMyMzIzMjMyMzIzMjMyMzIzMjMyNDUyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzJ8LTN0eHZFLlEgSjRNRS5RIEN3TjAgMWluMCB6QW8wIEFuMCAxTmQwIEFuMCAxTmQwIEFuMCAxTmQwIEFuMCAxTmQwIEFuMCAxTmQwIEFuMCAxSzEwIEx6MCAxekIwIE5YMCAxdTEwIFduMCBTMjAgOHg1MCBpdTAgMW8xMCAxMXowIDFvMTAgMTF6MCAxbzEwIDExejAgMW8xMCAxMXowIDFxTjAgV0wwIDFxTjAgMTF6MCAxbzEwIDExejAgMW8xMCAxMXowIDFvMTAgMTF6MCAxbzEwIDExejAgMXFOMCAxMXowIDFvMTAgMWNMMCAxY04wIDFjTDAgMWNOMCAxY0wwIDFjTjAgMWZ6MCAxY04wIDFjTDAgMWNOMCAxY0wwIDFjTjAgMWNMMCAxY04wIDFjTDAgMWNOMCAxZnowIDFhMTAgMWZ6MCAxY04wIDFjTDAgMWNOMCAxY0wwIDFjTjAgMWNMMCAxY04wIDFjTDAgMWNOMCAxZnowIDFjTjAgMWNMMCAzQ3AwIDFjTDAgMWNOMCAxY0wwIDFjTjAgMWZ6MCAxYTEwIDFmejAgMWNOMCAxY0wwIDFjTjAgMWNMMCAxY04wIDFjTDAgMWNOMCAxY0wwIDFjTjAgMWZ6MCAxYTEwIDFmejAgMWNOMCAxY0wwIDFjTjAgMWNMMCAxY04wIDFjTDAgMTRwMCAxbGIwIDE0cDAgMW5YMCAxMUIwIDFuWDAgMTFCMCAxblgwIDE0cDAgMWxiMCAxNHAwIDFsYjAgMTRuMSAxblgwIDExQjAgMW5YMCAxMUIwIDFuWDAgMTRwMCAxbGIwIDE0cDAgMWxiMCAxNHAwIDFsYjAgMTRwMCAxblgwIDExQjAgMW5YMCAxMUIwIDFuWDAgMTRwMCAxbGIwIDE0cDAgMWxiMCAxNHAwIDFuWDAgMTFCMCAxblgwIDExQjAgMW5YMCBSZVggMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMHw2NGUzXCIsXG4gIFwiQW1lcmljYS9Nb250ZXJyZXl8TE1UIE1TVCBDU1QgTURUIENEVHw2Ri5nIDcwIDYwIDYwIDUwfDAxMjEzMTI0MjQyNDI0MjQyNDI0MjQyNDI0MjQyNDI0MjQyNDI0MjQyNDI0MjQyNDI0MjQyNDI0MjQyNDI0MnwtMVVRRzAgZGVwMCA4bHowIDE2cDAgMTF6MCAxZGQwIDJnbXAwIDFuWDAgaTZwMCAxbGIwIDE0cDAgMWxiMCAxNHAwIDFsYjAgMTRwMCAxblgwIDExQjAgMW5YMCAxZkIwIFdMMCAxZkIwIDFsYjAgMTRwMCAxbGIwIDE0cDAgMW5YMCAxMUIwIDFuWDAgMTFCMCAxblgwIDExQjAgMW5YMCAxNHAwIDFsYjAgMTRwMCAxbGIwIDE0cDAgMW5YMCAxMUIwIDFuWDAgMTFCMCAxblgwIDE0cDAgMWxiMCAxNHAwIDFsYjAgMTRwMCAxbGIwIDE0cDAgMW5YMCAxMUIwIDFuWDAgMTFCMCAxblgwIDE0cDAgMWxiMCAxNHAwIDFsYjAgMTRwMCAxblgwIDExQjAgMW5YMHw0MWU1XCIsXG4gIFwiQW1lcmljYS9Nb250ZXZpZGVvfExNVCBNTVQgLTA0IC0wMyAtMDMzMCAtMDIzMCAtMDIgLTAxMzB8M0kuUCAzSS5QIDQwIDMwIDN1IDJ1IDIwIDF1fDAxMjM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNTM1MzYzNjM1MzYzNjM3NTM2MzYzNjM2MzYzNjM2MzYzNjM2MzYzNjM2MzYzNjM2MzYzNjM2MzYzNjM2M3wtMnRSVWYuOSBzVmMwIDhqY2YuOSAxZGIwIDFkY3UgMWNMdSAxZGN1IDFjTHUgaXJjdSAxMXp1IDFvMHUgMTF6dSAxbzB1IDExenUgMW8wdSAxMXp1IDFxTXUgV0x1IDFxTXUgV0x1IDFmQXUgMWNMdSAxbzB1IDExenUgTkF1IDNqWHUgelh1IERxMHUgMTlYdSBwY3UganowIGNtMTAgMTlYMCA2dEIwIDFmYnUgM28wdSBqWDAgNHZCMCB4ejAgM0NwMCBtbXUgMWExMCBJTXUgRGIwIDRjMTAgdUwwIDFOZDAgQW4wIDFTTjAgdUwwIG1wMCAyOEwwIGlQQjAgdW4wIDFTTjAgeHowIDF6ZDAgTHowIDF6ZDAgUmIwIDF6ZDAgT24wIDF3cDAgUmIwIHM4cDAgMWZCMCAxaXAwIDExejAgMWxkMCAxNG4wIDFvMTAgMTF6MCAxbzEwIDExejAgMW8xMCAxNG4wIDFsZDAgMTRuMCAxbGQwIDE0bjAgMW8xMCAxMXowIDFvMTAgMTF6MCAxbzEwIDExejB8MTdlNVwiLFxuICBcIkFtZXJpY2EvVG9yb250b3xMTVQgRVNUIEVEVCBFV1QgRVBUfDVoLncgNTAgNDAgNDAgNDB8MDEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIzNDEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxfC0zMkI2Ry5zIFVGZEcucyAxaW4wIDExV3UgMW56dSAxZkQwIFdKMCAxd3IwIE5iMCAxQXAwIE9uMCAxemQwIE9uMCAxd3AwIFRYMCAxdEIwIFRYMCAxdEIwIFRYMCAxdEIwIFdMMCAxcU4wIDExejAgMW8xMCAxMXowIDFvMTAgMTF6MCAxbzEwIDExejAgMXFOMCBXTDAgMXFOMCAxMXowIDFvMTAgMTF6MCAxbzEwIDExejAgMW8xMCAxMXowIDFvMTAgMTF6MCAxbzEwIDExejAgMXFOMCBXTDAgMXFOMCA0a00wIDh4NDAgaXYwIDFvMTAgMTF6MCAxbzEwIDExejAgMW8xMCAxMXowIDFvMTAgMXFMMCAxMUIwIDFuWDAgMTFCMCAxMXowIDFvMTAgMTF6MCAxbzEwIDExejAgMW8xMCAxMXowIDFvMTAgMTF6MCAxcU4wIDExejAgMW8xMCAxY0wwIDFjTjAgMWNMMCAxY04wIDFjTDAgMWNOMCAxZnowIDFjTjAgMWNMMCAxY04wIDFjTDAgMWNOMCAxY0wwIDFjTjAgMWNMMCAxY04wIDFmejAgMWExMCAxZnowIDFjTjAgMWNMMCAxY04wIDFjTDAgMWNOMCAxY0wwIDFjTjAgMWNMMCAxY04wIDFmejAgMWNOMCAxY0wwIDFjTjAgMWNMMCAxY04wIDFjTDAgMWNOMCAxY0wwIDFjTjAgMWZ6MCAxYTEwIDFmejAgMWNOMCAxY0wwIDFjTjAgMWNMMCAxY04wIDFjTDAgMWNOMCAxY0wwIDFjTjAgMWZ6MCAxYTEwIDFmejAgMWNOMCAxY0wwIDFjTjAgMWNMMCAxY04wIDFjTDAgMTRwMCAxbGIwIDE0cDAgMW5YMCAxMUIwIDFuWDAgMTFCMCAxblgwIDE0cDAgMWxiMCAxNHAwIDFsYjAgMTRwMCAxblgwIDExQjAgMW5YMCAxMUIwIDFuWDAgMTRwMCAxbGIwIDE0cDAgMWxiMCAxNHAwIDFsYjAgMTRwMCAxblgwIDExQjAgMW5YMCAxMUIwIDFuWDAgMTRwMCAxbGIwIDE0cDAgMWxiMCAxNHAwIDFuWDAgMTFCMCAxblgwIDExQjAgMW5YMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMHw2NWU1XCIsXG4gIFwiQW1lcmljYS9OZXdfWW9ya3xMTVQgRVNUIEVEVCBFV1QgRVBUfDRVLjIgNTAgNDAgNDAgNDB8MDEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEzNDEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxfC0zdEZIMCAxbkVlMCAxblgwIDExQjAgMW5YMCAxMUIwIDFxTDAgMWExMCAxMXowIDFxTjAgV0wwIDFxTjAgMTF6MCAxbzEwIDExejAgMW8xMCAxMXowIDFvMTAgMTF6MCAxbzEwIDExejAgMXFOMCAxMXowIDFvMTAgMTF6MCAxbzEwIDExejAgMW8xMCAxMXowIDFvMTAgMTF6MCAxcU4wIFdMMCAxcU4wIDExejAgMW8xMCAxMXowIDFvMTAgMTF6MCAxbzEwIDExejAgMW8xMCAxMXowIDFxTjAgV0wwIDFxTjAgMTF6MCAxbzEwIDExejAgUkIwIDh4NDAgaXYwIDFvMTAgMTF6MCAxbzEwIDExejAgMW8xMCAxMXowIDFvMTAgMTF6MCAxcU4wIFdMMCAxcU4wIDExejAgMW8xMCAxMXowIDFvMTAgMTF6MCAxbzEwIDExejAgMW8xMCAxZnowIDFjTjAgMWNMMCAxY04wIDFjTDAgMWNOMCAxY0wwIDFjTjAgMWNMMCAxY04wIDFmejAgMWNOMCAxY0wwIDFjTjAgMWNMMCAxY04wIDFjTDAgMWNOMCAxY0wwIDFjTjAgMWZ6MCAxYTEwIDFmejAgMWNOMCAxY0wwIDFjTjAgMWNMMCAxY04wIDFjTDAgMWNOMCAxY0wwIDFjTjAgMWZ6MCAxY04wIDFjTDAgMWNOMCAxY0wwIHMxMCAxVnowIExCMCAxQlgwIDFjTjAgMWZ6MCAxYTEwIDFmejAgMWNOMCAxY0wwIDFjTjAgMWNMMCAxY04wIDFjTDAgMWNOMCAxY0wwIDFjTjAgMWZ6MCAxYTEwIDFmejAgMWNOMCAxY0wwIDFjTjAgMWNMMCAxY04wIDFjTDAgMTRwMCAxbGIwIDE0cDAgMW5YMCAxMUIwIDFuWDAgMTFCMCAxblgwIDE0cDAgMWxiMCAxNHAwIDFsYjAgMTRwMCAxblgwIDExQjAgMW5YMCAxMUIwIDFuWDAgMTRwMCAxbGIwIDE0cDAgMWxiMCAxNHAwIDFsYjAgMTRwMCAxblgwIDExQjAgMW5YMCAxMUIwIDFuWDAgMTRwMCAxbGIwIDE0cDAgMWxiMCAxNHAwIDFuWDAgMTFCMCAxblgwIDExQjAgMW5YMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMHwyMWU2XCIsXG4gIFwiQW1lcmljYS9Ob21lfExNVCBMTVQgTlNUIE5XVCBOUFQgQlNUIEJEVCBZU1QgQUtTVCBBS0RUfC1jVy5tIGIxLkMgYjAgYTAgYTAgYjAgYTAgOTAgOTAgODB8MDEyMzQyNTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2Nzg5ODk4OTg5ODk4OTg5ODk4OTg5ODk4OTg5ODk4OTg5ODk4OTg5ODk4OTg5ODk4OTg5ODk4OTg5ODk4OTg5ODk4OTg5ODk4OTg5ODk4OTg5ODk4OTg5ODk4OTg5ODk4OTg5ODk4OTg5ODk4OTg5ODk4OTg5ODk4OTg5ODk4OTg5ODk4OTg5ODk4OTg5ODk4OTg5ODk4OTg5ODk4OTg5ODk4OTg5ODk4OTg5ODk4OTg5ODk4OTg5ODk4OTg5ODk4OTg5ODk4OTg5ODk4OTg5ODk4OTg5ODk4OTg5ODk4OTg5ODk4OTg5ODk4OTg5ODk4OTg5ODk4OTg5ODk4OTg5ODk4OTg5ODk4OTg5ODk4OTg5ODk4OTg5ODk4OTg5ODk4OTg5ODk4OTg5ODk4OTg5ODk4OTg5ODk4OTg5ODk4OTg5ODk4OTg5ODk4OTg5ODk4OTg5ODk4OTg5ODk4OTg5ODk4OTg5ODk4OTg5ODk4OTg5ODk4OTg5ODk4OTg5ODk4OTg5ODk4OTg5ODk4OTg5ODk4OTg5ODk4OTg5ODk4OTg5ODk4OTg5ODk4OTg5ODk4OTg5ODk4OTg5ODk4OTg5ODk4OTg5ODk4OTg5ODk4OTg5ODk4OTg5ODk4OTg5ODk4OTg5ODk4OTg5ODk4OTg5ODk4OTg5ODk4OTg5ODk4OTg5ODk4OTg5ODk4OTg5ODk4OTg5ODk4OTg5ODk4OTg5ODk4OTg5ODk4OTg5ODk4OTg5ODk4OTg5ODk4OTg5ODk4OTg5ODk4OTg5ODk4OTg5ODk4OTg5ODk4OTg5ODk4OTg5ODk4OTg5ODk4OTg5ODk4OTg5ODk4OTg5ODk4OTg5ODk4OTg5ODk4OTg5ODk4OTg5ODk4OTg5ODk4OTg5ODk4OTg5ODk4OTg5ODk4OTg5ODk4OTg5ODk4OTg5ODk4OTg5ODk4OTg5ODk4OTg5ODk4OTg5ODk4OTg5ODk4OTg5ODk4OTg5ODk4OTg5ODk4OTg5ODk4OTg5ODk4OTg5ODk4OTg5ODk4OTg5ODk4OTg5ODk4OTg5ODk4OTg5ODk4OTg5ODk4OTg5ODk4OTg5ODk4OTg5ODk4OTg5ODk4OTg5ODk4OTg5ODk4OTg5ODk4OTg5ODk4OTg5ODk4OTg5ODk4OTg5ODk4OTg5ODk4OTg5ODk4OTg5ODk4OTg5ODk4OTg5ODk4OTg5ODk4OTg5ODk4OTg5ODk4OTg5ODk4OTg5ODk4OTg5ODk4OTg5ODk4OTg5ODk4OTg5ODk4OTg5ODk4OTg5ODk4OTg5ODk4OTg5ODk4OTg5ODk4OTg5ODk4OTg5ODk4OTg5ODk4OTg5ODk4OTg5ODk4OTg5ODk4OTg5ODk4OTg5ODk4OTh8LTQ4UHpzLkwgMWpWeXUucCAxRVgxVy5tIDh3VzAgaUIwIFFsYjAgNTJPMCAxY0wwIDFjTjAgMWNMMCAxY04wIDFmejAgMWNOMCAxY0wwIDFjTjAgMWNMMCBzMTAgMVZ6MCBMQjAgMUJYMCAxY04wIDFmejAgMWExMCAxZnowIDFjTjAgMWNMMCAxY04wIDFjTDAgMWNOMCAxY0wwIDFjTjAgMWNMMCAxY04wIDFmejAgMWExMCAxZnowIGNsMCAxMHEwIDFjTDAgMWNOMCAxY0wwIDFjTjAgMWNMMCAxNHAwIDFsYjAgMTRwMCAxblgwIDExQjAgMW5YMCAxMUIwIDFuWDAgMTRwMCAxbGIwIDE0cDAgMWxiMCAxNHAwIDFuWDAgMTFCMCAxblgwIDExQjAgMW5YMCAxNHAwIDFsYjAgMTRwMCAxbGIwIDE0cDAgMWxiMCAxNHAwIDFuWDAgMTFCMCAxblgwIDExQjAgMW5YMCAxNHAwIDFsYjAgMTRwMCAxbGIwIDE0cDAgMW5YMCAxMUIwIDFuWDAgMTFCMCAxblgwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwfDM4ZTJcIixcbiAgXCJBbWVyaWNhL05vcm9uaGF8TE1UIC0wMiAtMDF8MjkuRSAyMCAxMHwwMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxfC0yZ2x4Ty5rIEhkS08uayAxY2MwIDFlMTAgMWJYMCBFemQwIFNvMCAxdkEwIE1uMCAxQkIwIE1MMCAxQkIwIHpYMCBxZTEwIHhiMCAyZXAwIG56MCAxQzEwIHpYMCAxQzEwIExYMCAxQzEwIE1uMCBIMjEwIFJiMCAxdEIwIElMMCAxRmQwIEZYMCAxRU4wIEZYMCAxSEIwIEx6MCBuc3AwIFdMMCAxdEIwIDJMMCAycEIwIE9uMHwzMGUyXCIsXG4gIFwiQW1lcmljYS9Ob3J0aF9EYWtvdGEvQmV1bGFofExNVCBNU1QgTURUIE1XVCBNUFQgQ1NUIENEVHw2TC43IDcwIDYwIDYwIDYwIDYwIDUwfDAxMjEyMTM0MTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjV8LTN0RkYwIDFuRWUwIDFuWDAgMTFCMCAxblgwIFNnTjAgOHgyMCBpeDAgUXdOMCAxY0wwIDFjTjAgMWNMMCAxY04wIDFjTDAgMWNOMCAxY0wwIDFjTjAgMWZ6MCAxY04wIDFjTDAgMWNOMCAxY0wwIHMxMCAxVnowIExCMCAxQlgwIDFjTjAgMWZ6MCAxYTEwIDFmejAgMWNOMCAxY0wwIDFjTjAgMWNMMCAxY04wIDFjTDAgMWNOMCAxY0wwIDFjTjAgMWZ6MCAxYTEwIDFmejAgMWNOMCAxY0wwIDFjTjAgMWNMMCAxY04wIDFjTDAgMTRwMCAxbGIwIDE0cDAgMW5YMCAxMUIwIDFuWDAgMTFCMCAxblgwIDE0cDAgMWxiMCAxNHAwIDFsYjAgMTRwMCAxblgwIDExQjAgMW5YMCAxMUIwIDFuWDAgMTRwMCAxbGIwIDE0cDAgMWxiMCAxNHAwIDFsYjAgMTRwMCAxblgwIDExQjAgMW5YMCAxMUIwIDFuWDAgMTRwMCAxbGIwIDE0cDAgMWxiMCAxNHAwIDFuWDAgMTFCMCAxblgwIDExQjAgMW5YMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPbzAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMHxcIixcbiAgXCJBbWVyaWNhL05vcnRoX0Rha290YS9DZW50ZXJ8TE1UIE1TVCBNRFQgTVdUIE1QVCBDU1QgQ0RUfDZKLmMgNzAgNjAgNjAgNjAgNjAgNTB8MDEyMTIxMzQxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyNTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NXwtM3RGRjAgMW5FZTAgMW5YMCAxMUIwIDFuWDAgU2dOMCA4eDIwIGl4MCBRd04wIDFjTDAgMWNOMCAxY0wwIDFjTjAgMWNMMCAxY04wIDFjTDAgMWNOMCAxZnowIDFjTjAgMWNMMCAxY04wIDFjTDAgczEwIDFWejAgTEIwIDFCWDAgMWNOMCAxZnowIDFhMTAgMWZ6MCAxY04wIDFjTDAgMWNOMCAxY0wwIDFjTjAgMWNMMCAxY04wIDFjTDAgMWNOMCAxZnowIDFhMTAgMWZ6MCAxY04wIDFjTDAgMWNOMCAxY0wwIDFjTjAgMWNMMCAxNHAwIDFsYjAgMTRwMCAxblgwIDExQjAgMW5YMCAxMUIwIDFuWDAgMTRwMCAxbGIwIDE0cDAgMWxiMCAxNG8wIDFuWDAgMTFCMCAxblgwIDExQjAgMW5YMCAxNHAwIDFsYjAgMTRwMCAxbGIwIDE0cDAgMWxiMCAxNHAwIDFuWDAgMTFCMCAxblgwIDExQjAgMW5YMCAxNHAwIDFsYjAgMTRwMCAxbGIwIDE0cDAgMW5YMCAxMUIwIDFuWDAgMTFCMCAxblgwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwfFwiLFxuICBcIkFtZXJpY2EvTm9ydGhfRGFrb3RhL05ld19TYWxlbXxMTVQgTVNUIE1EVCBNV1QgTVBUIENTVCBDRFR8NkouRCA3MCA2MCA2MCA2MCA2MCA1MHwwMTIxMjEzNDEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyNTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1fC0zdEZGMCAxbkVlMCAxblgwIDExQjAgMW5YMCBTZ04wIDh4MjAgaXgwIFF3TjAgMWNMMCAxY04wIDFjTDAgMWNOMCAxY0wwIDFjTjAgMWNMMCAxY04wIDFmejAgMWNOMCAxY0wwIDFjTjAgMWNMMCBzMTAgMVZ6MCBMQjAgMUJYMCAxY04wIDFmejAgMWExMCAxZnowIDFjTjAgMWNMMCAxY04wIDFjTDAgMWNOMCAxY0wwIDFjTjAgMWNMMCAxY04wIDFmejAgMWExMCAxZnowIDFjTjAgMWNMMCAxY04wIDFjTDAgMWNOMCAxY0wwIDE0cDAgMWxiMCAxNHAwIDFuWDAgMTFCMCAxblgwIDExQjAgMW5YMCAxNHAwIDFsYjAgMTRwMCAxbGIwIDE0cDAgMW5YMCAxMUIwIDFuWDAgMTFCMCAxblgwIDE0cDAgMWxiMCAxNHAwIDFsYjAgMTRwMCAxbGIwIDE0cDAgMW5YMCAxMUIwIDFuWDAgMTFCMCAxblgwIDE0cDAgMWxiMCAxNHAwIDFsYjAgMTRvMCAxblgwIDExQjAgMW5YMCAxMUIwIDFuWDAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjB8XCIsXG4gIFwiQW1lcmljYS9PamluYWdhfExNVCBNU1QgQ1NUIE1EVCBDRFR8NlYuRSA3MCA2MCA2MCA1MHwwMTIxMzEyNDI0MjMxMzEzMTMxMzEzMTMxMzEzMTMxMzEzMTMxMzEzMTMxMzEzMTMxMzEzMTMxMzEzMTMyNDI0MjQyNDI0MjQyNDI0MjQyNDI0MjQyNDI0MjQyNDI0MjQyNDI0MjQyNDI0MjQyNDI0MjQyNDI0MjQyNDI0MjQyNDI0MjQyNDI0MjQyNDI0MjQyNDI0MjQyNDI0MjQyNDI0MjQyNDI0MjQyNDI0MjQyNDI0MjQyNDI0MjQyNDI0MjQyNDI0MjQyNDI0MjQyNDI0MjQyNDI0MjQyNDI0MjQyNDI0MjQyNDI0MjQyNDI0MjQyNDI0MjQyNDI0MjQyNDI0MjQyNDI0MjQyNDI0MjQyNDI0MjQyNDI0MjQyNDI0MjQyNDI0MjQyNDI0MjQyNDI0MjQyNDI0MjQyNDI0MjQyNDI0MjQyNDI0MjQyNDI0MjQyNDI0MjQyNDI0MjQyNDI0MjQyNDI0MjQyNDI0MjQyNDI0MjQyNDI0MjQyNDI0MjQyNDI0MjQyNDI0MjQyNDI0MjQyNDI0MjQyNDI0MjQyNDI0MjQyNDI0MjQyNDI0MjQyNDI0MjQyNDI0MjQyNDI0MjQyNDI0MjQyNDI0MjQyNDI0MjQyNDI0MjQyNDI0MjQyNDI0MjQyNDI0MjQyNDI0MjQyNDI0MjQyNDI0MjQyNDI0MjQyNDI0MjQyNDI0MjQyNDI0MjQyNDI0MjQyNDI0MjQyNDI0MjQyNDI0MjQyNDI0MjQyNDI0MjQyNDI0MjQyNDI0MjQyNDI0MjQyNDI0MjQyNDI0MjQyNDI0MjQyNDI0MjQyNDI0MjQyNDI0MjQyNDI0MjQyNDI0MjQyNDI0MjQyNDI0MjQyNDI0MjQyNDI0MjQyNDI0MjQyNDI0MjQyNDI0MjQyNDI0MjQyNDI0MjQyNDI0MjQyNDI0MjQyNDI0MjQyNDI0MjQyNDI0MjQyNDI0MjQyNDI0MjQyNDI0MjQyNDI0MjQyNDI0MjQyNDI0MjQyNDI0MjQyNDI0MjQyNDI0MjQyNDI0MjQyNDI0MjQyNDI0MjQyNDI0MjQyNDI0MjQyNDI0MjQyNDI0MjQyNDI0MjQyNDI0MjQyNDI0MjQyNDI0MjQyNDI0MjQyNDI0MjQyNDI0MjQyNDI0MjQyNDI0MjQyNDI0MjQyNDI0MjQyNDI0MjQyNDI0MjQyNDI0MjQyNDI0MjQyNDI0MjQyNDI0MjQyNDI0MjQyNDI0MjQyNDI0MjQyNDI0MjQyNDI0MjQyNDI0MjQyNDI0MjQyNDI0MjQyNDI0MjQyNDI0MjQyNDI0MjQyNDI0MjQyNDI0MjQyNDI0MjQyNDI0MjQyNDI0MjQyfC0xVVFGMCBkZW8wIDhsejAgMTZwMCAxMXowIDFkZDAgMnpRTjAgMWxiMCAxNHAwIDFsYjAgMTRxMCAxbGIwIDE0cDAgMW5YMCAxMUIwIDFuWDAgMWZCMCBXTDAgMWZCMCAxbGIwIDE0cDAgMWxiMCAxNHAwIDFuWDAgMTFCMCAxblgwIDExQjAgMW5YMCAxMUIwIDFuWDAgMTRwMCAxbGIwIDE0cDAgMWxiMCBVMTAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXduMCBSYzAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMHwyM2UzXCIsXG4gIFwiQW1lcmljYS9QYXJhbWFyaWJvfExNVCBQTVQgUE1UIC0wMzMwIC0wM3wzRS5FIDNFLlEgM0UuQSAzdSAzMHwwMTIzNHwtMm5EVWouayBXcW8wLmMgcWFuWC5JIDF5VlhOLm98MjRlNFwiLFxuICBcIkFtZXJpY2EvUG9ydC1hdS1QcmluY2V8TE1UIFBQTVQgRVNUIEVEVHw0Ti5rIDROIDUwIDQwfDAxMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMnwtM2VMdmEuRSAxNVJMWC5FIDJGbk1iIDE5WDAgMWNOMCAxY0wwIDFjTjAgMWNMMCAxY04wIDFjTDAgMWNOMCAxY0wwIDE0cTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDE0bzAgMWxjMCAxNG8wIDFsYzAgMTRvMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFvMDAgMTRvMCAxbGMwIDE0bzAgMWxjMCBpNm4wIDFuWDAgMTFCMCAxblgwIGQ0MzAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCAzaU4wIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjB8MjNlNVwiLFxuICBcIkFtZXJpY2EvUmlvX0JyYW5jb3xMTVQgLTA1IC0wNHw0di5jIDUwIDQwfDAxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxfC0yZ2x2cy5NIEhkTHMuTSAxY2MwIDFlMTAgMWJYMCBFemQwIFNvMCAxdkEwIE1uMCAxQkIwIE1MMCAxQkIwIHpYMCBxZTEwIHhiMCAyZXAwIG56MCAxQzEwIHpYMCAxQzEwIExYMCAxQzEwIE1uMCBIMjEwIFJiMCAxdEIwIElMMCAxRmQwIEZYMCBOQmQwIGQ1WDB8MzFlNFwiLFxuICBcIkFtZXJpY2EvUG9ydG9fVmVsaG98TE1UIC0wNCAtMDN8NGYuQSA0MCAzMHwwMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjF8LTJnbHZJLm8gSGRLSS5vIDFjYzAgMWUxMCAxYlgwIEV6ZDAgU28wIDF2QTAgTW4wIDFCQjAgTUwwIDFCQjAgelgwIHFlMTAgeGIwIDJlcDAgbnowIDFDMTAgelgwIDFDMTAgTFgwIDFDMTAgTW4wIEgyMTAgUmIwIDF0QjAgSUwwIDFGZDAgRlgwfDM3ZTRcIixcbiAgXCJBbWVyaWNhL1B1bnRhX0FyZW5hc3xMTVQgU01UIC0wNSAtMDQgLTAzfDRILkUgNEcuSiA1MCA0MCAzMHwwMTIxMzEzMjMyMzIzMjMyMzIzMjM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNHwtM2VMdmcuayBNSmJYLjUgZkpBaC5mIDVrbkcuSiAxVnpoLmYgalJBRy5KIDFwYmguZiAxMWQwIDFvTDAgMTFkMCAxb0wwIDExZDAgMW9MMCAxMWQwIDFwYjAgMTFkMCBuSFgwIG9wMCBibHowIGtvMCBRZW8wIFdMMCAxemQwIE9uMCAxaXAwIDExejAgMW8xMCAxMXowIDFxTjAgV0wwIDFsZDAgMTRuMCAxcU4wIFdMMCAxcU4wIDExejAgMW8xMCAxMXowIDFvMTAgMTF6MCAxcU4wIFdMMCAxcU4wIFdMMCAxcU4wIDExejAgMW8xMCAxMXowIDFvMTAgMTF6MCAxbzEwIDExejAgMXFOMCBXTDAgMXFOMCBXTDAgMXFOMCAxY0wwIDFjTjAgMTF6MCAxbzEwIDExejAgMXFOMCBXTDAgMWZCMCAxOVgwIDFxTjAgMTF6MCAxbzEwIDExejAgMW8xMCAxMXowIDFvMTAgMTF6MCAxcU4wIFdMMCAxcU4wIDE3YjAgMWlwMCAxMXowIDFpcDAgMWZ6MCAxZkIwIDExejAgMXFOMCBXTDAgMXFOMCBXTDAgMXFOMCBXTDAgMXFOMCAxMXowIDFvMTAgMTF6MCAxbzEwIDExejAgMXFOMCBXTDAgMXFOMCAxN2IwIDFpcDAgMTF6MCAxbzEwIDE5WDAgMWZCMCAxblgwIEcxMCAxRUwwIE9wMCAxemIwIFJkMCAxd24wIFJkMCA0Nm4wIEFwMHxcIixcbiAgXCJBbWVyaWNhL1dpbm5pcGVnfExNVCBDU1QgQ0RUIENXVCBDUFR8NnMuQSA2MCA1MCA1MCA1MHwwMTIxMjEyMTM0MTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxfC0za0x0di5vIDFhM2J2Lm8gV0wwIDNORDAgMWluMCBKYXAwIFJiMCBhQ04wIDh4MzAgaXcwIDF0QjAgMTF6MCAxaXAwIDExejAgMW8xMCAxMXowIDFvMTAgMTF6MCAxcmQwIDEwTDAgMW9wMCAxMXowIDFvMTAgMTF6MCAxbzEwIDExejAgMW8xMCAxMXowIDFvMTAgMTF6MCAxcU4wIDExejAgMW8xMCAxMXowIDFvMTAgMTF6MCAxbzEwIDFjTDAgMWNOMCAxMXowIDZpMTAgV0wwIDZpMTAgMWZBMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxZkEwIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFmQTAgMWEwMCAxZkEwIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFmQTAgMWEwMCAxZkEwIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDE0bzAgMWxjMCAxNG8wIDFvMDAgMTFBMCAxbzAwIDExQTAgMW8wMCAxNG8wIDFsYzAgMTRvMCAxbGMwIDE0bzAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDE0bzAgMWxjMCAxNG8wIDFsYzAgMTRvMCAxbGMwIDE0bzAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDE0bzAgMWxjMCAxNG8wIDFsYzAgMTRvMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFuWDAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjB8NjZlNFwiLFxuICBcIkFtZXJpY2EvUmFua2luX0lubGV0fC0wMCBDU1QgQ0RUIEVTVHwwIDYwIDUwIDUwfDAxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMzIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxfC12RGMwIEJqazAgMWNMMCAxY04wIDFjTDAgMWNOMCAxY0wwIDFjTjAgMWNMMCAxY04wIDFmejAgMWExMCAxZnowIDFjTjAgMWNMMCAxY04wIDFjTDAgMWNOMCAxY0wwIDFjTjAgMWNMMCAxY04wIDFmejAgMWExMCAxZnowIDFjTjAgMWNMMCAxY04wIDFjTDAgMWNOMCAxY0wwIDE0cDAgMWxiMCAxNHAwIDFuWDAgMTFCMCAxblgwIDExQjAgMW5YMCAxNHAwIDFsYjAgMTRwMCAxbGIwIDE0cDAgMW5YMCAxMUIwIDFuWDAgMTFCMCAxblgwIDE0cDAgMWxiMCAxNHAwIDFsYjAgMTRwMCAxbGIwIDE0cDAgMW5YMCAxMUIwIDFuWDAgMTFCMCAxblgwIDE0cDAgMWxiMCAxNHAwIDFsYjAgMTRwMCAxblgwIDExQjAgMW5YMCAxMUIwIDFuWDAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjB8MjZlMlwiLFxuICBcIkFtZXJpY2EvUmVjaWZlfExNVCAtMDMgLTAyfDJqLkEgMzAgMjB8MDEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMXwtMmdseEUubyBIZExFLm8gMWNjMCAxZTEwIDFiWDAgRXpkMCBTbzAgMXZBMCBNbjAgMUJCMCBNTDAgMUJCMCB6WDAgcWUxMCB4YjAgMmVwMCBuejAgMUMxMCB6WDAgMUMxMCBMWDAgMUMxMCBNbjAgSDIxMCBSYjAgMXRCMCBJTDAgMUZkMCBGWDAgMUVOMCBGWDAgMUhCMCBMejAgbnNwMCBXTDAgMXRCMCAyTDAgMnBCMCBPbjB8MzNlNVwiLFxuICBcIkFtZXJpY2EvUmVnaW5hfExNVCBNU1QgTURUIE1XVCBNUFQgQ1NUfDZXLkEgNzAgNjAgNjAgNjAgNjB8MDEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMzQxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjE1fC0yQUQ1MS5vIHVIZTEubyAxaW4wIHMyTDAgMTF6MCAxbzEwIDExejAgMW8xMCAxMXowIDFxTjAgV0wwIDFxTjAgMTF6MCA2Nk4wIDFjTDAgMWNOMCAxOVgwIDFmQjAgMWNMMCAxZkIwIDFjTDAgMWNOMCAxY0wwIE0zMCA4eDIwIGl4MCAxaXAwIDFjTDAgMWlwMCAxMXowIDFvMTAgMTF6MCAxbzEwIDExejAgMXFOMCBXTDAgMXFOMCAxMXowIDFvMTAgMTF6MCAxbzEwIDExejAgMW8xMCAxMXowIDFvMTAgMTF6MCAxcU4wIDExejAgMW8xMCAxMXowIDNOQjAgMWNMMCAxY04wfDE5ZTRcIixcbiAgXCJBbWVyaWNhL1Jlc29sdXRlfC0wMCBDU1QgQ0RUIEVTVHwwIDYwIDUwIDUwfDAxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMzIxMjEyMTIxMjEyMzIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxfC1TbkEwIDEwM0kwIDFjTDAgMWNOMCAxY0wwIDFjTjAgMWNMMCAxY04wIDFjTDAgMWNOMCAxZnowIDFhMTAgMWZ6MCAxY04wIDFjTDAgMWNOMCAxY0wwIDFjTjAgMWNMMCAxY04wIDFjTDAgMWNOMCAxZnowIDFhMTAgMWZ6MCAxY04wIDFjTDAgMWNOMCAxY0wwIDFjTjAgMWNMMCAxNHAwIDFsYjAgMTRwMCAxblgwIDExQjAgMW5YMCAxMUIwIDFuWDAgMTRwMCAxbGIwIDE0cDAgMWxiMCAxNHAwIDFuWDAgMTFCMCAxblgwIDExQjAgMW5YMCAxNHAwIDFsYjAgMTRwMCAxbGIwIDE0cDAgMWxiMCAxNHAwIDFuWDAgMTFCMCAxblgwIDExQjAgMW5YMCAxNHAwIDFsYjAgMTRwMCAxbGIwIDE0cDAgMW5YMCAxMUIwIDFuWDAgMTFCMCAxblgwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIFJkMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwIE9wMCAxemIwfDIyOVwiLFxuICBcIkFtZXJpY2EvU2FudGFyZW18TE1UIC0wNCAtMDN8M0MuTSA0MCAzMHwwMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyfC0yZ2x3bC5jIEhkTGwuYyAxY2MwIDFlMTAgMWJYMCBFemQwIFNvMCAxdkEwIE1uMCAxQkIwIE1MMCAxQkIwIHpYMCBxZTEwIHhiMCAyZXAwIG56MCAxQzEwIHpYMCAxQzEwIExYMCAxQzEwIE1uMCBIMjEwIFJiMCAxdEIwIElMMCAxRmQwIEZYMCBOQmQwfDIxZTRcIixcbiAgXCJBbWVyaWNhL1NhbnRpYWdvfExNVCBTTVQgLTA1IC0wNCAtMDN8NEcuSiA0Ry5KIDUwIDQwIDMwfDAxMjEzMTMyMzIzMjMyMzIzMjM0MzIzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzR8LTNlTHZoLmYgTUpjMCBmSkFoLmYgNWtuRy5KIDFWemguZiBqUkFHLkogMXBiaC5mIDExZDAgMW9MMCAxMWQwIDFvTDAgMTFkMCAxb0wwIDExZDAgMXBiMCAxMWQwIG5IWDAgb3AwIDlCejAgaFgwIDFxMTAga28wIFFlbzAgV0wwIDF6ZDAgT24wIDFpcDAgMTF6MCAxbzEwIDExejAgMXFOMCBXTDAgMWxkMCAxNG4wIDFxTjAgV0wwIDFxTjAgMTF6MCAxbzEwIDExejAgMW8xMCAxMXowIDFxTjAgV0wwIDFxTjAgV0wwIDFxTjAgMTF6MCAxbzEwIDExejAgMW8xMCAxMXowIDFvMTAgMTF6MCAxcU4wIFdMMCAxcU4wIFdMMCAxcU4wIDFjTDAgMWNOMCAxMXowIDFvMTAgMTF6MCAxcU4wIFdMMCAxZkIwIDE5WDAgMXFOMCAxMXowIDFvMTAgMTF6MCAxbzEwIDExejAgMW8xMCAxMXowIDFxTjAgV0wwIDFxTjAgMTdiMCAxaXAwIDExejAgMWlwMCAxZnowIDFmQjAgMTF6MCAxcU4wIFdMMCAxcU4wIFdMMCAxcU4wIFdMMCAxcU4wIDExejAgMW8xMCAxMXowIDFvMTAgMTF6MCAxcU4wIFdMMCAxcU4wIDE3YjAgMWlwMCAxMXowIDFvMTAgMTlYMCAxZkIwIDFuWDAgRzEwIDFFTDAgT3AwIDF6YjAgUmQwIDF3bjAgUmQwIDQ2bjAgQXAwIDFOYjAgQXAwIDFOYjAgQXAwIDF6YjAgMTFCMCAxblgwIDExQjAgMW5YMCAxMUIwIDFuWDAgMTRwMCAxbGIwIDExQjAgMXFMMCAxMUIwIDFuWDAgMTFCMCAxblgwIDExQjAgMW5YMCAxMUIwIDFuWDAgMTFCMCAxcUwwIFdOMCAxcUwwIDExQjAgMW5YMCAxMUIwIDFuWDAgMTFCMCAxblgwIDExQjAgMW5YMCAxMUIwIDFxTDAgV04wIDFxTDAgMTFCMCAxblgwIDExQjAgMW5YMCAxMUIwIDFuWDAgMTFCMCAxcUwwIFdOMCAxcUwwIDExQjAgMW5YMCAxMUIwIDFuWDAgMTFCMCAxblgwIDExQjAgMW5YMCAxMUIwIDFxTDAgV04wIDFxTDAgMTFCMCAxblgwIDExQjAgMW5YMCAxMUIwIDFuWDAgMTFCMCAxblgwIDExQjAgMXFMMCAxMUIwIDFuWDAgMTFCMCAxblgwIDExQjAgMW5YMCAxMUIwIDFuWDAgMTFCMCAxcUwwIFdOMCAxcUwwIDExQjAgMW5YMCAxMUIwIDFuWDAgMTFCMCAxblgwIDExQjAgMW5YMCAxMUIwIDFxTDAgV04wIDFxTDAgMTFCMCAxblgwIDExQjAgMW5YMCAxMUIwIDFuWDAgMTFCMCAxcUwwIFdOMCAxcUwwIDExQjAgMW5YMCAxMUIwIDFuWDAgMTFCMCAxblgwIDExQjAgMW5YMCAxMUIwIDFxTDAgV04wIDFxTDAgMTFCMCAxblgwIDExQjAgMW5YMCAxMUIwIDFuWDAgMTFCMCAxblgwIDExQjAgMXFMMCAxMUIwIDFuWDAgMTFCMCAxblgwIDExQjAgMW5YMCAxMUIwIDFuWDAgMTFCMCAxcUwwIFdOMCAxcUwwIDExQjAgMW5YMCAxMUIwIDFuWDAgMTFCMCAxblgwIDExQjAgMW5YMCAxMUIwIDFxTDAgV04wIDFxTDAgMTFCMCAxblgwIDExQjAgMW5YMCAxMUIwIDFuWDAgMTFCMCAxcUwwIFdOMCAxcUwwIDExQjAgMW5YMCAxMUIwIDFuWDAgMTFCMCAxblgwIDExQjAgMW5YMCAxMUIwIDFuWDAgMTFCMCAxcUwwIFdOMCAxcUwwIDExQjAgMW5YMCAxMUIwIDFuWDAgMTFCMCAxblgwIDExQjAgMXFMMCBXTjAgMXFMMCAxMUIwIDFuWDAgMTFCMCAxblgwIDExQjAgMW5YMCAxMUIwIDFuWDAgMTFCMCAxcUwwIFdOMCAxcUwwIDExQjAgMW5YMCAxMUIwIDFuWDAgMTFCMCAxblgwIDExQjAgMW5YMCAxMUIwIDFxTDAgMTFCMCAxblgwIDExQjAgMW5YMCAxMUIwIDFuWDAgMTFCMCAxblgwIDExQjAgMXFMMCBXTjAgMXFMMCAxMUIwIDFuWDAgMTFCMCAxblgwIDExQjAgMW5YMCAxMUIwIDFuWDAgMTFCMCAxcUwwIFdOMCAxcUwwIDExQjAgMW5YMCAxMUIwIDFuWDAgMTFCMCAxblgwIDExQjAgMXFMMCBXTjAgMXFMMCAxMUIwIDFuWDAgMTFCMCAxblgwIDExQjAgMW5YMCAxMUIwIDFuWDAgMTFCMCAxcUwwIFdOMCAxcUwwIDExQjAgMW5YMCAxMUIwIDFuWDAgMTFCMCAxblgwIDExQjAgMW5YMCAxMUIwIDFxTDAgMTFCMCAxblgwIDExQjAgMW5YMCAxMUIwIDFuWDAgMTFCMCAxblgwIDExQjAgMXFMMCBXTjAgMXFMMCAxMUIwIDFuWDAgMTFCMCAxblgwIDExQjAgMW5YMCAxMUIwIDFuWDAgMTFCMCAxcUwwIFdOMCAxcUwwIDExQjAgMW5YMCAxMUIwIDFuWDAgMTFCMCAxblgwIDExQjAgMXFMMCBXTjAgMXFMMCAxMUIwIDFuWDAgMTFCMCAxblgwIDExQjAgMW5YMCAxMUIwIDFuWDAgMTFCMCAxcUwwIFdOMCAxcUwwIDExQjAgMW5YMCAxMUIwIDFuWDAgMTFCMCAxblgwIDExQjAgMW5YMCAxMUIwIDFxTDAgMTFCMCAxblgwIDExQjAgMW5YMCAxMUIwIDFuWDAgMTFCMCAxblgwIDExQjAgMXFMMCBXTjAgMXFMMCAxMUIwIDFuWDAgMTFCMCAxblgwIDExQjAgMW5YMCAxMUIwIDFuWDAgMTFCMCAxcUwwIFdOMCAxcUwwIDExQjAgMW5YMCAxMUIwIDFuWDAgMTFCMCAxblgwIDExQjAgMXFMMCBXTjAgMXFMMCAxMUIwIDFuWDAgMTFCMCAxblgwIDExQjAgMW5YMCAxMUIwIDFuWDAgMTFCMCAxcUwwIFdOMCAxcUwwIDExQjAgMW5YMCAxMUIwIDFuWDAgMTFCMCAxblgwIDExQjAgMW5YMCAxMUIwIDFxTDAgV04wIDFxTDAgMTFCMCAxblgwIDExQjAgMW5YMCAxMUIwIDFuWDAgMTFCMCAxblgwIDExQjAgMXFMMCBXTjAgMXFMMCAxMUIwIDFuWDAgMTFCMCAxblgwIDExQjAgMW5YMCAxMUIwIDFuWDAgMTFCMCAxcUwwIDExQjAgMW5YMCAxMUIwIDFuWDAgMTFCMCAxblgwIDExQjAgMW5YMCAxMUIwIDFxTDAgV04wIDFxTDAgMTFCMCAxblgwIDExQjAgMW5YMCAxMUIwIDFuWDAgMTFCMCAxblgwIDExQjAgMXFMMCBXTjAgMXFMMCAxMUIwIDFuWDAgMTFCMCAxblgwIDExQjAgMW5YMCAxMUIwIDFxTDAgV04wIDFxTDAgMTFCMCAxblgwIDExQjAgMW5YMCAxMUIwIDFuWDAgMTFCMCAxblgwIDExQjAgMXFMMCBXTjAgMXFMMCAxMUIwIDFuWDAgMTFCMCAxblgwIDExQjAgMW5YMCAxMUIwIDFuWDAgMTFCMCAxcUwwIDExQjAgMW5YMCAxMUIwIDFuWDAgMTFCMCAxblgwIDExQjAgMW5YMCAxMUIwIDFxTDAgV04wIDFxTDAgMTFCMCAxblgwIDExQjAgMW5YMCAxMUIwIDFuWDAgMTFCMCAxblgwIDExQjAgMXFMMCBXTjAgMXFMMCAxMUIwIDFuWDAgMTFCMCAxblgwIDExQjAgMW5YMCAxMUIwIDFxTDAgV04wIDFxTDAgMTFCMCAxblgwIDExQjAgMW5YMCAxMUIwIDFuWDAgMTFCMCAxblgwIDExQjAgMXFMMCBXTjAgMXFMMCAxMUIwIDFuWDAgMTFCMCAxblgwIDExQjAgMW5YMCAxMUIwIDFuWDAgMTFCMCAxcUwwIDExQjAgMW5YMCAxMUIwIDFuWDAgMTFCMCAxblgwIDExQjAgMW5YMCAxMUIwIDFxTDAgV04wIDFxTDAgMTFCMCAxblgwIDExQjAgMW5YMCAxMUIwIDFuWDAgMTFCMCAxblgwIDExQjAgMXFMMCBXTjAgMXFMMCAxMUIwIDFuWDAgMTFCMCAxblgwIDExQjAgMW5YMCAxMUIwIDFxTDAgV04wIDFxTDAgMTFCMCAxblgwIDExQjAgMW5YMCAxMUIwIDFuWDAgMTFCMCAxblgwIDExQjAgMXFMMCBXTjAgMXFMMCAxMUIwIDFuWDAgMTFCMCAxblgwIDExQjAgMW5YMCAxMUIwIDFuWDAgMTFCMCAxcUwwIFdOMCAxcUwwIDExQjAgMW5YMCAxMUIwIDFuWDAgMTFCMCAxblgwIDExQjAgMW5YMCAxMUIwIDFxTDAgV04wIDFxTDAgMTFCMCAxblgwIDExQjAgMW5YMCAxMUIwIDFuWDAgMTFCMCAxblgwIDExQjAgMXFMMCAxMUIwIDFuWDAgMTFCMCAxblgwIDExQjAgMW5YMCAxMUIwIDFuWDAgMTFCMCAxcUwwIFdOMCAxcUwwIDExQjAgMW5YMCAxMUIwIDFuWDAgMTFCMCAxblgwIDExQjAgMW5YMCAxMUIwIDFxTDAgV04wIDFxTDAgMTFCMCAxblgwIDExQjAgMW5YMCAxMUIwIDFuWDAgMTFCMCAxcUwwIFdOMCAxcUwwIDExQjAgMW5YMCAxMUIwIDFuWDAgMTFCMCAxblgwIDExQjAgMW5YMCAxMUIwIDFxTDAgV04wIDFxTDAgMTFCMCAxblgwIDExQjAgMW5YMCAxMUIwIDFuWDAgMTFCMCAxblgwIDExQjAgMXFMMCAxMUIwIDFuWDAgMTFCMCAxblgwIDExQjAgMW5YMCAxMUIwIDFuWDAgMTFCMCAxcUwwIFdOMCAxcUwwIDExQjAgMW5YMCAxMUIwIDFuWDAgMTFCMCAxblgwIDExQjAgMW5YMCAxMUIwIDFxTDAgV04wIDFxTDAgMTFCMCAxblgwIDExQjAgMW5YMCAxMUIwIDFuWDAgMTFCMCAxcUwwIFdOMCAxcUwwIDExQjAgMW5YMCAxMUIwIDFuWDAgMTFCMCAxblgwIDExQjAgMW5YMCAxMUIwIDFxTDAgV04wIDFxTDAgMTFCMCAxblgwIDExQjAgMW5YMCAxMUIwIDFuWDAgMTFCMCAxblgwIDExQjAgMXFMMCAxMUIwIDFuWDAgMTFCMCAxblgwIDExQjAgMW5YMCAxMUIwIDFuWDAgMTFCMCAxcUwwIFdOMCAxcUwwIDExQjAgMW5YMCAxMUIwIDFuWDAgMTFCMCAxblgwIDExQjAgMW5YMCAxMUIwIDFxTDAgV04wIDFxTDAgMTFCMCAxblgwIDExQjAgMW5YMCAxMUIwIDFuWDAgMTFCMCAxcUwwIFdOMCAxcUwwIDExQjAgMW5YMCAxMUIwIDFuWDAgMTFCMCAxblgwIDExQjAgMW5YMCAxMUIwIDFxTDAgV04wIDFxTDAgMTFCMCAxblgwIDExQjAgMW5YMCAxMUIwIDFuWDAgMTFCMCAxblgwIDExQjAgMXFMMCAxMUIwIDFuWDAgMTFCMCAxblgwIDExQjAgMW5YMCAxMUIwIDFuWDAgMTFCMCAxcUwwIFdOMCAxcUwwIDExQjAgMW5YMCAxMUIwIDFuWDAgMTFCMCAxblgwIDExQjAgMW5YMCAxMUIwIDFxTDAgV04wIDFxTDAgMTFCMCAxblgwIDExQjAgMW5YMCAxMUIwIDFuWDAgMTFCMCAxcUwwIFdOMCAxcUwwIDExQjAgMW5YMCAxMUIwIDFuWDAgMTFCMCAxblgwIDExQjAgMW5YMCAxMUIwIDFxTDAgV04wIDFxTDAgMTFCMCAxblgwIDExQjAgMW5YMCAxMUIwIDFuWDAgMTFCMCAxblgwIDExQjAgMXFMMCAxMUIwIDFuWDAgMTFCMCAxblgwIDExQjAgMW5YMCAxMUIwIDFuWDAgMTFCMCAxcUwwIFdOMCAxcUwwIDExQjAgMW5YMCAxMUIwIDFuWDAgMTFCMCAxblgwIDExQjAgMW5YMCAxMUIwIDFxTDAgV04wIDFxTDAgMTFCMCAxblgwIDExQjAgMW5YMCAxMUIwIDFuWDAgMTFCMCAxcUwwIFdOMCAxcUwwIDExQjAgMW5YMCAxMUIwIDFuWDAgMTFCMCAxblgwIDExQjAgMW5YMCAxMUIwIDFxTDAgV04wIDFxTDAgMTFCMCAxblgwIDExQjAgMW5YMCAxMUIwIDFuWDAgMTFCMCAxblgwIDExQjAgMXFMMCAxMUIwIDFuWDAgMTFCMCAxblgwIDExQjAgMW5YMCAxMUIwIDFuWDAgMTFCMCAxcUwwIFdOMCAxcUwwIDExQjAgMW5YMCAxMUIwIDFuWDAgMTFCMCAxblgwIDExQjAgMW5YMCAxMUIwIDFxTDAgV04wIDFxTDAgMTFCMCAxblgwIDExQjAgMW5YMCAxMUIwIDFuWDAgMTFCMCAxcUwwIFdOMCAxcUwwIDExQjAgMW5YMCAxMUIwIDFuWDAgMTFCMCAxblgwIDExQjAgMW5YMCAxMUIwIDFxTDAgV04wIDFxTDAgMTFCMCAxblgwIDExQjAgMW5YMCAxMUIwIDFuWDAgMTFCMCAxblgwIDExQjAgMXFMMCAxMUIwIDFuWDAgMTFCMCAxblgwIDExQjAgMW5YMCAxMUIwIDFuWDAgMTFCMCAxcUwwIFdOMCAxcUwwIDExQjAgMW5YMCAxMUIwIDFuWDAgMTFCMCAxblgwIDExQjAgMW5YMCAxMUIwIDFxTDAgV04wIDFxTDAgMTFCMCAxblgwIDExQjAgMW5YMCAxMUIwIDFuWDAgMTFCMCAxcUwwIFdOMCAxcUwwIDExQjAgMW5YMCAxMUIwIDFuWDAgMTFCMHw2MmU1XCIsXG4gIFwiQW1lcmljYS9TYW50b19Eb21pbmdvfExNVCBTRE1UIEVTVCBFRFQgLTA0MzAgQVNUfDRELkEgNEUgNTAgNDAgNHUgNDB8MDEyMzI0MjQyNDI0MjQyNTI1fC0zZUx2ay5vIDFKaWMwLm8gMWxKTWsgTW4wIDZzcDAgTGJ1IDFDb3UgeUx1IDFSQXUgd0x1IDFRTXUgeHp1IDFRMHUgeFh1IDFQQXUgMTNqQjAgZTAwfDI5ZTVcIixcbiAgXCJBbWVyaWNhL1Nhb19QYXVsb3xMTVQgLTAzIC0wMnwzNi5zIDMwIDIwfDAxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxfC0yZ2x3Ui53IEhkS1IudyAxY2MwIDFlMTAgMWJYMCBFemQwIFNvMCAxdkEwIE1uMCAxQkIwIE1MMCAxQkIwIHpYMCBwVGQwIFBYMCAyZXAwIG56MCAxQzEwIHpYMCAxQzEwIExYMCAxQzEwIE1uMCBIMjEwIFJiMCAxdEIwIElMMCAxRmQwIEZYMCAxRU4wIEZYMCAxSEIwIEx6MCAxRU4wIEx6MCAxQzEwIElMMCAxSEIwIERiMCAxSEIwIE9uMCAxemQwIE9uMCAxemQwIEx6MCAxemQwIFJiMCAxd04wIFduMCAxdEIwIFJiMCAxdEIwIFdMMCAxdEIwIFJiMCAxemQwIE9uMCAxSEIwIEZYMCAxQzEwIEx6MCAxSXAwIEhYMCAxemQwIE9uMCAxSEIwIElMMCAxd3AwIE9uMCAxQzEwIEx6MCAxQzEwIE9uMCAxemQwIE9uMCAxemQwIFJiMCAxemQwIEx6MCAxQzEwIEx6MCAxQzEwIE9uMCAxemQwIE9uMCAxemQwIE9uMCAxemQwIE9uMCAxSEIwIEZYMHwyMGU2XCIsXG4gIFwiQW1lcmljYS9TY29yZXNieXN1bmR8TE1UIC0wMiAtMDEgKzAwfDFyLlEgMjAgMTAgMHwwMTIxMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjF8LTJhNVd3LjggMno1ZXcuOCAxYTAwIDFjSzAgMWNMMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWZBMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWZBMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFmQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMnBBMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFvMDB8NDUyXCIsXG4gIFwiQW1lcmljYS9TaXRrYXxMTVQgTE1UIFBTVCBQV1QgUFBUIFBEVCBZU1QgQUtTVCBBS0RUfC1lVy5MIDkxLmQgODAgNzAgNzAgNzAgOTAgOTAgODB8MDEyMzQyNTI1MjUyNTI1MjUyNTI1MjUyNTI1MjUyNTI1MjU2Nzg3ODc4Nzg3ODc4Nzg3ODc4Nzg3ODc4Nzg3ODc4Nzg3ODc4Nzg3ODc4Nzg3ODc4Nzg3ODc4Nzg3ODc4Nzg3ODc4Nzg3ODc4Nzg3ODc4Nzg3ODc4Nzg3ODc4Nzg3ODc4Nzg3ODc4Nzg3ODc4Nzg3ODc4Nzg3ODc4Nzg3ODc4Nzg3ODc4Nzg3ODc4Nzg3ODc4Nzg3ODc4Nzg3ODc4Nzg3ODc4Nzg3ODc4Nzg3ODc4Nzg3ODc4Nzg3ODc4Nzg3ODc4Nzg3ODc4Nzg3ODc4Nzg3ODc4Nzg3ODc4Nzg3ODc4Nzg3ODc4Nzg3ODc4Nzg3ODc4Nzg3ODc4Nzg3ODc4Nzg3ODc4Nzg3ODc4Nzg3ODc4Nzg3ODc4Nzg3ODc4Nzg3ODc4Nzg3ODc4Nzg3ODc4Nzg3ODc4Nzg3ODc4Nzg3ODc4Nzg3ODc4Nzg3ODc4Nzg3ODc4Nzg3ODc4Nzg3ODc4Nzg3ODc4Nzg3ODc4Nzg3ODc4Nzg3ODc4Nzg3ODc4Nzg3ODc4Nzg3ODc4Nzg3ODc4Nzg3ODc4Nzg3ODc4Nzg3ODc4Nzg3ODc4Nzg3ODc4Nzg3ODc4Nzg3ODc4Nzg3ODc4Nzg3ODc4Nzg3ODc4Nzg3ODc4Nzg3ODc4Nzg3ODc4Nzg3ODc4Nzg3ODc4Nzg3ODc4Nzg3ODc4Nzg3ODc4Nzg3ODc4Nzg3ODc4Nzg3ODc4Nzg3ODc4Nzg3ODc4Nzg3ODc4Nzg3ODc4Nzg3ODc4Nzg3ODc4Nzg3ODc4Nzg3ODc4Nzg3ODc4Nzg3ODc4Nzg3ODc4Nzg3ODc4Nzg3ODc4Nzg3ODc4Nzg3ODc4Nzg3ODc4Nzg3ODc4Nzg3ODc4Nzg3ODc4Nzg3ODc4Nzg3ODc4Nzg3ODc4Nzg3ODc4Nzg3ODc4Nzg3ODc4Nzg3ODc4Nzg3ODc4Nzg3ODc4Nzg3ODc4Nzg3ODc4Nzg3ODc4Nzg3ODc4Nzg3ODc4Nzg3ODc4Nzg3ODc4Nzg3ODc4Nzg3ODc4Nzg3ODc4Nzg3ODc4Nzg3ODc4Nzg3ODc4Nzg3ODc4Nzg3ODc4Nzg3ODc4Nzg3ODc4Nzg3ODc4Nzg3ODc4Nzg3ODc4Nzg3ODc4Nzg3ODc4Nzg3ODc4Nzg3ODc4Nzg3ODc4Nzg3ODc4Nzg3ODc4Nzg3ODc4Nzg3ODc4Nzg3ODc4Nzg3ODc4Nzg3ODc4Nzg3ODc4Nzg3ODc4Nzg3ODc4Nzg3ODc4Nzg3ODc4Nzg3ODc4Nzg3ODc4Nzg3ODc4Nzg3ODc4Nzg3ODc4Nzg3ODc4Nzg3ODc4Nzg3ODc4Nzg3ODc4Nzg3ODc4Nzg3ODc4Nzg3ODc4Nzg3ODc4Nzg3ODc4Nzg3ODc4Nzg3ODc4Nzg3ODc4Nzg3ODc4Nzg3ODc4Nzg3ODc4N3wtNDhQenMuTCAxalZ3dSAxRVgwVy5MIDh4MTAgaXkwIFZvMTAgMWNMMCAxY04wIDFjTDAgMWNOMCAxZnowIDFjTjAgMWNMMCAxY04wIDFjTDAgczEwIDFWejAgTEIwIDFCWDAgMWNOMCAxZnowIDFhMTAgMWZ6MCAxY04wIDFjTDAgMWNOMCAxY0wwIDFjTjAgMWNMMCAxY04wIDFjTDAgMWNOMCAxZnowIDFhMTAgMWZ6MCBjbzAgMTBxMCAxY0wwIDFjTjAgMWNMMCAxY04wIDFjTDAgMTRwMCAxbGIwIDE0cDAgMW5YMCAxMUIwIDFuWDAgMTFCMCAxblgwIDE0cDAgMWxiMCAxNHAwIDFsYjAgMTRwMCAxblgwIDExQjAgMW5YMCAxMUIwIDFuWDAgMTRwMCAxbGIwIDE0cDAgMWxiMCAxNHAwIDFsYjAgMTRwMCAxblgwIDExQjAgMW5YMCAxMUIwIDFuWDAgMTRwMCAxbGIwIDE0cDAgMWxiMCAxNHAwIDFuWDAgMTFCMCAxblgwIDExQjAgMW5YMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMHw5MGUyXCIsXG4gIFwiQW1lcmljYS9TdF9Kb2huc3xMTVQgTlNUIE5EVCBOU1QgTkRUIE5XVCBOUFQgTkREVHwzdS5RIDN1LlEgMnUuUSAzdSAydSAydSAydSAxdXwwMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTM0MzQzNDM0MzQzNDM0MzU2MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzczNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDN8LTN0b2t0LjggMWwwMjAgMTRMMCAxbkIwIDFpbjAgMWdtMCBEejAgMUpCMCAxY0wwIDFjTjAgMWNMMCAxZkIwIDE5WDAgMWZCMCAxOVgwIDFmQjAgMTlYMCAxZkIwIDE5WDAgMWZCMCAxY0wwIDFjTjAgMWNMMCAxZkIwIDE5WDAgMWZCMCAxOVgwIDFmQjAgMTlYMCAxZkIwIDE5WDAgMWZCMCAxY0wwIDFmQjAgMTlYMCAxZkIwIDE5WDAgMTBPMCBlS1guOCAxOVgwIDFpcTAgV0wwIDFxTjAgV0wwIDFxTjAgV0wwIDF0QjAgVFgwIDF0QjAgV0wwIDFxTjAgV0wwIDFxTjAgN1VIdSBpdHUgMXRCMCBXTDAgMXFOMCBXTDAgMXFOMCBXTDAgMXFOMCBXTDAgMXRCMCBXTDAgMWxkMCAxMXowIDFvMTAgMTF6MCAxbzEwIDExejAgMW8xMCAxMXowIDFvMTAgMTF6MCAxcU4wIDExejAgMW8xMCAxMXowIDFvMTAgMTF6MCAxbzEwIDExejAgMW8xMCAxZnowIDFjTjAgMWNMMCAxY04wIDFjTDAgMWNOMCAxY0wwIDFjTjAgMWNMMCAxY04wIDFmejAgMWExMCAxZnowIDFjTjAgMWNMMCAxY04wIDFjTDAgMWNOMCAxY0wwIDFjTjAgMWNMMCAxY04wIDFmejAgMWNOMCAxY0wwIDFjTjAgMWNMMCAxY04wIDFjTDAgMWNOMCAxY0wwIDFjTjAgMWZ6MCAxYTEwIDFmejAgMWNOMCAxY0wwIDFjTjAgMWNMMCAxY04wIDFjTDAgMWNOMCAxY0wwIDFjTjAgMWZ6MCAxYTEwIDFmejAgMWNOMCAxY0wwIDFjTjAgMWNMMCAxY04wIDFjTDAgMTRuMSAxbGIwIDE0cDAgMW5XMCAxMUMwIDFuWDAgMTFCMCAxblgwIDE0cDAgMWxiMCAxNHAwIDFsYjAgMTRwMCAxblgwIDExQjAgMW5YMCAxMUIwIDFuWDAgMTRwMCAxbGIwIDE0cDAgMWxiMCAxNHAwIDFsYjAgMTRwMCAxblgwIDExQjAgMW5YMCAxMUIwIDFuWDAgMTRwMCAxbGIwIDE0cDAgMWxiMCAxNHAwIDFuWDAgMTFCMCAxblgwIDExQjAgMW5YMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpjWCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMHwxMWU0XCIsXG4gIFwiQW1lcmljYS9Td2lmdF9DdXJyZW50fExNVCBNU1QgTURUIE1XVCBNUFQgQ1NUfDdiLmsgNzAgNjAgNjAgNjAgNjB8MDEyMTM0MTIxMjEyMTIxMjEyMTIxMjE1fC0yQUQ0TS5FIHVIZE0uRSAxaW4wIFVHcDAgOHgyMCBpeDAgMW8xMCAxN2IwIDFpcDAgMTF6MCAxbzEwIDExejAgMW8xMCAxMXowIGlzTjAgMWNMMCAzQ3AwIDFjTDAgMWNOMCAxMXowIDFxTjAgV0wwIHBNcDB8MTZlM1wiLFxuICBcIkFtZXJpY2EvVGVndWNpZ2FscGF8TE1UIENTVCBDRFR8NU0uUSA2MCA1MHwwMTIxMjEyMXwtMVdHR2IuOCAyRVRjYi44IFdMMCAxcU4wIFdMMCBHUmQwIEFMMHwxMWU1XCIsXG4gIFwiQW1lcmljYS9UaHVsZXxMTVQgQVNUIEFEVHw0ei44IDQwIDMwfDAxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMXwtMmE1VG8uUSAzMU5Cby5RIDFjTDAgMWNOMCAxY0wwIDFmQjAgMW5YMCAxMUIwIDFuWDAgMTFCMCAxblgwIDE0cDAgMWxiMCAxNHAwIDFsYjAgMTRwMCAxbGIwIDE0cDAgMW5YMCAxMUIwIDFuWDAgMTFCMCAxblgwIDE0cDAgMWxiMCAxNHAwIDFsYjAgMTRwMCAxblgwIDExQjAgMW5YMCAxMUIwIDFuWDAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjB8NjU2XCIsXG4gIFwiQW1lcmljYS9WYW5jb3V2ZXJ8TE1UIFBTVCBQRFQgUFdUIFBQVHw4Yy5zIDgwIDcwIDcwIDcwfDAxMjEzNDEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxfC0zdG9mTC53IDFuc3BMLncgMWluMCBVR3AwIDh4MTAgaXkwIDFvMTAgMTF6MCAxbzEwIDExejAgMW8xMCAxMXowIDFvMTAgMTF6MCAxcU4wIFdMMCAxcU4wIDExejAgMW8xMCAxMXowIDFvMTAgMTF6MCAxbzEwIDExejAgMW8xMCAxMXowIDFxTjAgMTF6MCAxbzEwIDExejAgMW8xMCAxMXowIDFvMTAgMTF6MCAxbzEwIDExejAgMXFOMCBXTDAgMXFOMCAxY0wwIDFjTjAgMWNMMCAxY04wIDFjTDAgMWNOMCAxZnowIDFhMTAgMWZ6MCAxY04wIDFjTDAgMWNOMCAxY0wwIDFjTjAgMWNMMCAxY04wIDFjTDAgMWNOMCAxZnowIDFjTjAgMWNMMCAxY04wIDFjTDAgMWNOMCAxY0wwIDFjTjAgMWNMMCAxY04wIDFmejAgMWExMCAxZnowIDFjTjAgMWNMMCAxY04wIDFjTDAgMWNOMCAxY0wwIDFjTjAgMWNMMCAxY04wIDFmejAgMWExMCAxZnowIDFjTjAgMWNMMCAxY04wIDFjTDAgMWNOMCAxY0wwIDE0cDAgMWxiMCAxNHAwIDFuWDAgMTFCMCAxblgwIDExQjAgMW5YMCAxNHAwIDFsYjAgMTRwMCAxbGIwIDE0cDAgMW5YMCAxMUIwIDFuWDAgMTFCMCAxblgwIDE0cDAgMWxiMCAxNHAwIDFsYjAgMTRwMCAxbGIwIDE0cDAgMW5YMCAxMUIwIDFuWDAgMTFCMCAxblgwIDE0cDAgMWxiMCAxNHAwIDFsYjAgMTRwMCAxblgwIDExQjAgMW5YMCAxMUIwIDFuWDAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjB8MjNlNVwiLFxuICBcIkFtZXJpY2EvV2hpdGVob3JzZXxMTVQgWVNUIFlEVCBZV1QgWVBUIFlERFQgUFNUIFBEVCBNU1R8OTAuYyA5MCA4MCA4MCA4MCA3MCA4MCA3MCA3MHwwMTIxMjEzNDE1MTY3Njc2NzY3Njc2NzY3Njc2NzY3Njc2NzY3Njc2NzY3Njc2NzY3Njc2NzY3Njc2NzY3Njc2NzY3Njc2NzY3Njc2NzY3Njc2NzY3Njc2NzY3Njc4fC0yTVNlWC5NIEdXcFguTSAxaW4wIDFvMTAgMTNWMCBTZXIwIDh4MDAgaXowIExDTDAgMWZBMCBMQTAgeXRkMCAxY0wwIDFjTjAgMWNMMCAxY04wIDFmejAgMWExMCAxZnowIDFjTjAgMWNMMCAxY04wIDFjTDAgMWNOMCAxY0wwIDE0cDAgMWxiMCAxNHAwIDFuWDAgMTFCMCAxblgwIDExQjAgMW5YMCAxNHAwIDFsYjAgMTRwMCAxbGIwIDE0cDAgMW5YMCAxMUIwIDFuWDAgMTFCMCAxblgwIDE0cDAgMWxiMCAxNHAwIDFsYjAgMTRwMCAxbGIwIDE0cDAgMW5YMCAxMUIwIDFuWDAgMTFCMCAxblgwIDE0cDAgMWxiMCAxNHAwIDFsYjAgMTRwMCAxblgwIDExQjAgMW5YMCAxMUIwIDFuWDAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6OTB8MjNlM1wiLFxuICBcIkFtZXJpY2EvWWFrdXRhdHxMTVQgTE1UIFlTVCBZV1QgWVBUIFlEVCBBS1NUIEFLRFR8LWVGLjUgOWkuVCA5MCA4MCA4MCA4MCA5MCA4MHwwMTIzNDI1MjUyNTI1MjUyNTI1MjUyNTI1MjUyNTI1MjUyNTI2NzY3Njc2NzY3Njc2NzY3Njc2NzY3Njc2NzY3Njc2NzY3Njc2NzY3Njc2NzY3Njc2NzY3Njc2NzY3Njc2NzY3Njc2NzY3Njc2NzY3Njc2NzY3Njc2NzY3Njc2NzY3Njc2NzY3Njc2NzY3Njc2NzY3Njc2NzY3Njc2NzY3Njc2NzY3Njc2NzY3Njc2NzY3Njc2NzY3Njc2NzY3Njc2NzY3Njc2NzY3Njc2NzY3Njc2NzY3Njc2NzY3Njc2NzY3Njc2NzY3Njc2NzY3Njc2NzY3Njc2NzY3Njc2NzY3Njc2NzY3Njc2NzY3Njc2NzY3Njc2NzY3Njc2NzY3Njc2NzY3Njc2NzY3Njc2NzY3Njc2NzY3Njc2NzY3Njc2NzY3Njc2NzY3Njc2NzY3Njc2NzY3Njc2NzY3Njc2NzY3Njc2NzY3Njc2NzY3Njc2NzY3Njc2NzY3Njc2NzY3Njc2NzY3Njc2NzY3Njc2NzY3Njc2NzY3Njc2NzY3Njc2NzY3Njc2NzY3Njc2NzY3Njc2NzY3Njc2NzY3Njc2NzY3Njc2NzY3Njc2NzY3Njc2NzY3Njc2NzY3Njc2NzY3Njc2NzY3Njc2NzY3Njc2NzY3Njc2NzY3Njc2NzY3Njc2NzY3Njc2NzY3Njc2NzY3Njc2NzY3Njc2NzY3Njc2NzY3Njc2NzY3Njc2NzY3Njc2NzY3Njc2NzY3Njc2NzY3Njc2NzY3Njc2NzY3Njc2NzY3Njc2NzY3Njc2NzY3Njc2NzY3Njc2NzY3Njc2NzY3Njc2NzY3Njc2NzY3Njc2NzY3Njc2NzY3Njc2NzY3Njc2NzY3Njc2NzY3Njc2NzY3Njc2NzY3Njc2NzY3Njc2NzY3Njc2NzY3Njc2NzY3Njc2NzY3Njc2NzY3Njc2NzY3Njc2NzY3Njc2NzY3Njc2NzY3Njc2NzY3Njc2NzY3Njc2NzY3Njc2NzY3Njc2NzY3Njc2NzY3Njc2NzY3Njc2NzY3Njc2NzY3Njc2NzY3Njc2NzY3Njc2NzY3Njc2NzY3Njc2NzY3Njc2NzY3Njc2NzY3Njc2NzY3Njc2NzY3Njc2NzY3Njc2NzY3Njc2NzY3Njc2NzY3Njc2NzY3Njc2NzY3Njc2NzY3Njc2NzY3Njc2NzY3Njc2NzY3Njc2NzY3Njc2NzY3Njc2NzY3Njc2NzY3Njc2NzY3Njc2NzY3Njc2NzY3Njc2NzY3Njc2NzY3Njc2NzY3Njc2NzY3Njc2NzY3Njc2NzY3Njc2NzY3Njc2NzY3Njc2NzY3Njc2NzY3Njc2NzY3Njc2NzY3Njc2NzY3Njc2NzY3Njc2NzY3Njc2NzY3Njc2NzY3Njc2NzY3Njc2NzY3Njc2NzY3Njc2fC00OFB6cy5MIDFqVndMLkcgMUVYMUYuNSA4eDAwIGl6MCBWbzEwIDFjTDAgMWNOMCAxY0wwIDFjTjAgMWZ6MCAxY04wIDFjTDAgMWNOMCAxY0wwIHMxMCAxVnowIExCMCAxQlgwIDFjTjAgMWZ6MCAxYTEwIDFmejAgMWNOMCAxY0wwIDFjTjAgMWNMMCAxY04wIDFjTDAgMWNOMCAxY0wwIDFjTjAgMWZ6MCAxYTEwIDFmejAgY24wIDEwcTAgMWNMMCAxY04wIDFjTDAgMWNOMCAxY0wwIDE0cDAgMWxiMCAxNHAwIDFuWDAgMTFCMCAxblgwIDExQjAgMW5YMCAxNHAwIDFsYjAgMTRwMCAxbGIwIDE0cDAgMW5YMCAxMUIwIDFuWDAgMTFCMCAxblgwIDE0cDAgMWxiMCAxNHAwIDFsYjAgMTRwMCAxbGIwIDE0cDAgMW5YMCAxMUIwIDFuWDAgMTFCMCAxblgwIDE0cDAgMWxiMCAxNHAwIDFsYjAgMTRwMCAxblgwIDExQjAgMW5YMCAxMUIwIDFuWDAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgUmQwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjAgT3AwIDF6YjB8NjQyXCIsXG4gIFwiQW50YXJjdGljYS9DYXNleXwtMDAgKzA4ICsxMXwwIC04MCAtYjB8MDEyMTIxMjEyMTIxMjEyMTIxfC0ycTAwIDFEalMwIFQ5MCA0MFAwIEtMMCBibHowIDNtMTAgMW8zMCAxNGswIDFrcjAgMTJsMCAxbzAxIDE0a1ggMWxmMSAxNGtYIDFsZjEgMTNiWHwxMFwiLFxuICBcIkFudGFyY3RpY2EvRGF2aXN8LTAwICswNyArMDV8MCAtNzAgLTUwfDAxMDEyMTIxfC12eW8wIGlYdDAgYWxqMCAxRDd2MCBWQjAgM1duMCBLTjB8NzBcIixcbiAgXCJQYWNpZmljL1BvcnRfTW9yZXNieXxMTVQgUE1NVCArMTB8LTlNLkUgLTlNLncgLWEwfDAxMnwtM0Q4Vk0uRSBBdkEwLjh8MjVlNFwiLFxuICBcIkFudGFyY3RpY2EvTWFjcXVhcmllfC0wMCBBRVNUIEFFRFR8MCAtYTAgLWIwfDAxMjEwMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTJ8LTJPUGMwIEZiNDAgMWEwMCA0U0swIDFheXkwIEx2czAgMWNNMCAxbzAwIFJjMCAxd28wIFJjMCAxd28wIFUwMCAxd28wIExBMCAxQzAwIE9vMCAxemMwIE9vMCAxemMwIE9vMCAxemMwIFJjMCAxemMwIE9vMCAxemMwIE9vMCAxemMwIE9vMCAxemMwIE9vMCAxemMwIE9vMCAxemMwIDExQTAgMXFNMCBXTTAgMXFNMCBPbzAgMXpjMCBPbzAgMXpjMCBPbzAgMXdvMCBXTTAgMXRBMCBXTTAgMXRBMCBVMDAgMXRBMCBVMDAgMXRBMCAxMUEwIDFmQTAgMWEwMCAxZkEwIDFhMDAgMWZBMCAxYTAwIDFmQTAgMWEwMCAxZkEwIDFjTTAgMWZBMCAxYTAwIDFmQTAgMWEwMCAxZkEwIDFhMDAgMWZBMCAxYTAwIDExQTAgMW8wMCAxaW8wIDFhMDAgMWZBMCAxYTAwIDFmQTAgMWEwMCAxZkEwIDFhMDAgMWZBMCAxY00wIDFjTTAgMWEwMCAxaW8wIDFjTTAgMWNNMCAxY00wIDFjTTAgM0NvMCAxY00wIDFjTTAgMWZBMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWZBMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFmQTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxZkEwIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxZkEwIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFmQTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFmQTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxZkEwIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWZBMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWZBMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxZkEwIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxZkEwIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWZBMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFmQTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFmQTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWZBMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFmQTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWZBMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWZBMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFmQTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxZkEwIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxZkEwIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFmQTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFmQTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxZkEwIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWZBMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWZBMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxZkEwIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxZkEwIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWZBMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFmQTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFmQTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWZBMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWZBMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWZBMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWZBMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFmQTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxZkEwIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxZkEwIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFmQTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFmQTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxZkEwIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWZBMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWZBMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxZkEwIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxZkEwIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWZBMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFmQTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFmQTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWZBMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWZBMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWZBMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWZBMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFmQTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxZkEwIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxZkEwIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFmQTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFmQTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxZkEwIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWZBMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWZBMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxZkEwIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxZkEwIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWZBMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFmQTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFmQTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWZBMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWZBMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFmQTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxZkEwIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxZkEwIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFmQTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFmQTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxZkEwIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWZBMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWZBMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxZkEwIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxZkEwIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWZBMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFmQTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFmQTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWZBMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWZBMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFmQTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxZkEwIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxZkEwIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFmQTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTB8MVwiLFxuICBcIkFudGFyY3RpY2EvTWF3c29ufC0wMCArMDYgKzA1fDAgLTYwIC01MHwwMTJ8LUNFbzAgMmZ5azB8NjBcIixcbiAgXCJQYWNpZmljL0F1Y2tsYW5kfExNVCBOWk1UIE5aU1QgTlpTVCBOWkRUfC1iRC40IC1idSAtY3UgLWMwIC1kMHwwMTIxMzEzMTMxMzEzMTMxMzEzMTMxMzEzMTMxMzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzR8LTQ2akxELjQgMm5FTzkuNCBMejAgMXRCMCAxMXp1IDFvMHUgMTF6dSAxbzB1IDExenUgMW8wdSAxNG51IDFsY3UgMTRudSAxbGN1IDFsYnUgMTFBdSAxblh1IDExQXUgMW5YdSAxMUF1IDFuWHUgMTFBdSAxblh1IDExQXUgMXFMdSBXTXUgMXFMdSAxMUF1IDFuMWJ1IElNMCAxQzAwIFJjMCAxemMwIE9vMCAxemMwIE9vMCAxemMwIE9vMCAxemMwIE9vMCAxemMwIE9vMCAxemMwIFJjMCAxemMwIE9vMCAxemMwIE9vMCAxemMwIE9vMCAxemMwIE9vMCAxemMwIE9vMCAxemMwIFJjMCAxemMwIE9vMCAxcU0wIDE0bzAgMWxjMCAxNG8wIDFsYzAgMTRvMCAxbGMwIDE3YzAgMWlvMCAxN2MwIDFpbzAgMTdjMCAxaW8wIDE3YzAgMWxjMCAxNG8wIDFsYzAgMTRvMCAxbGMwIDE3YzAgMWlvMCAxN2MwIDFpbzAgMTdjMCAxbGMwIDE0bzAgMWxjMCAxNG8wIDFsYzAgMTdjMCAxaW8wIDE3YzAgMWlvMCAxN2MwIDFpbzAgMTdjMCAxaW8wIDFmQTAgMWEwMCAxZkEwIDFhMDAgMWZBMCAxYTAwIDFmQTAgMWEwMCAxZkEwIDFjTTAgMWZBMCAxYTAwIDFmQTAgMWEwMCAxZkEwIDFhMDAgMWZBMCAxYTAwIDFmQTAgMWEwMCAxZkEwIDFjTTAgMWZBMCAxYTAwIDFmQTAgMWEwMCAxZkEwIDFhMDAgMWZBMCAxYTAwIDFmQTAgMWEwMCAxaW8wIDFhMDAgMWZBMCAxYTAwIDFmQTAgMWEwMCAxZkEwIDFhMDAgMWZBMCAxYTAwIDFmQTAgMWNNMCAxZkEwIDFhMDAgMWZBMCAxYTAwIDFmQTAgMWEwMCAxZkEwIDFhMDAgMWZBMCAxYTAwIDFmQTAgMWNNMCAxZkEwIDFhMDAgMWZBMCAxYTAwIDFmQTAgMWEwMCAxZkEwIDFhMDAgMWZBMCAxY00wIDFmQTAgMWEwMCAxZkEwIDFhMDAgMWZBMCAxYTAwIDFmQTAgMWEwMCAxZkEwIDFhMDAgMWZBMCAxY00wIDFmQTAgMWEwMCAxZkEwIDFhMDAgMWZBMCAxYTAwIDFmQTAgMWEwMCAxZkEwIDFhMDAgMWlvMCAxYTAwIDFmQTAgMWEwMCAxZkEwIDFhMDAgMWZBMCAxYTAwIDFmQTAgMWEwMCAxZkEwIDFjTTAgMWZBMCAxYTAwIDFmQTAgMWEwMCAxZkEwIDFhMDAgMWZBMCAxYTAwIDFmQTAgMWEwMCAxZkEwIDFjTTAgMWZBMCAxYTAwIDFmQTAgMWEwMCAxZkEwIDFhMDAgMWZBMCAxYTAwIDFmQTAgMWNNMCAxZkEwIDFhMDAgMWZBMCAxYTAwIDFmQTAgMWEwMCAxZkEwIDFhMDAgMWZBMCAxYTAwIDFmQTAgMWNNMCAxZkEwIDFhMDAgMWZBMCAxYTAwIDFmQTAgMWEwMCAxZkEwIDFhMDAgMWZBMCAxYTAwIDFpbzAgMWEwMCAxZkEwIDFhMDAgMWZBMCAxYTAwIDFmQTAgMWEwMCAxZkEwIDFhMDAgMWZBMCAxY00wIDFmQTAgMWEwMCAxZkEwIDFhMDAgMWZBMCAxYTAwIDFmQTAgMWEwMCAxZkEwIDFhMDAgMWZBMCAxY00wIDFmQTAgMWEwMCAxZkEwIDFhMDAgMWZBMCAxYTAwIDFmQTAgMWEwMCAxZkEwIDFjTTAgMWZBMCAxYTAwIDFmQTAgMWEwMCAxZkEwIDFhMDAgMWZBMCAxYTAwIDFmQTAgMWEwMCAxZkEwIDFhMDAgMWZBMCAxY00wIDFmQTAgMWEwMCAxZkEwIDFhMDAgMWZBMCAxYTAwIDFmQTAgMWEwMCAxZkEwIDFjTTAgMWZBMCAxYTAwIDFmQTAgMWEwMCAxZkEwIDFhMDAgMWZBMCAxYTAwIDFmQTAgMWEwMCAxZkEwIDFjTTAgMWZBMCAxYTAwIDFmQTAgMWEwMCAxZkEwIDFhMDAgMWZBMCAxYTAwIDFmQTAgMWEwMCAxaW8wIDFhMDAgMWZBMCAxYTAwIDFmQTAgMWEwMCAxZkEwIDFhMDAgMWZBMCAxYTAwIDFmQTAgMWNNMCAxZkEwIDFhMDAgMWZBMCAxYTAwIDFmQTAgMWEwMCAxZkEwIDFhMDAgMWZBMCAxYTAwIDFmQTAgMWNNMCAxZkEwIDFhMDAgMWZBMCAxYTAwIDFmQTAgMWEwMCAxZkEwIDFhMDAgMWZBMCAxY00wIDFmQTAgMWEwMCAxZkEwIDFhMDAgMWZBMCAxYTAwIDFmQTAgMWEwMCAxZkEwIDFhMDAgMWZBMCAxY00wIDFmQTAgMWEwMCAxZkEwIDFhMDAgMWZBMCAxYTAwIDFmQTAgMWEwMCAxZkEwIDFhMDAgMWlvMCAxYTAwIDFmQTAgMWEwMCAxZkEwIDFhMDAgMWZBMCAxYTAwIDFmQTAgMWEwMCAxZkEwIDFjTTAgMWZBMCAxYTAwIDFmQTAgMWEwMCAxZkEwIDFhMDAgMWZBMCAxYTAwIDFmQTAgMWEwMCAxZkEwIDFjTTAgMWZBMCAxYTAwIDFmQTAgMWEwMCAxZkEwIDFhMDAgMWZBMCAxYTAwIDFmQTAgMWNNMCAxZkEwIDFhMDAgMWZBMCAxYTAwIDFmQTAgMWEwMCAxZkEwIDFhMDAgMWZBMCAxYTAwIDFmQTAgMWNNMCAxZkEwIDFhMDAgMWZBMCAxYTAwIDFmQTAgMWEwMCAxZkEwIDFhMDAgMWZBMCAxYTAwIDFpbzAgMWEwMCAxZkEwIDFhMDAgMWZBMCAxYTAwIDFmQTAgMWEwMCAxZkEwIDFhMDAgMWZBMCAxY00wIDFmQTAgMWEwMCAxZkEwIDFhMDAgMWZBMCAxYTAwIDFmQTAgMWEwMCAxZkEwIDFhMDAgMWZBMCAxY00wIDFmQTAgMWEwMCAxZkEwIDFhMDAgMWZBMCAxYTAwIDFmQTAgMWEwMCAxZkEwIDFjTTAgMWZBMCAxYTAwIDFmQTAgMWEwMCAxZkEwIDFhMDAgMWZBMCAxYTAwIDFmQTAgMWEwMCAxZkEwIDFjTTAgMWZBMCAxYTAwIDFmQTAgMWEwMCAxZkEwIDFhMDAgMWZBMCAxYTAwIDFmQTAgMWEwMCAxZkEwIDFjTTAgMWZBMCAxYTAwIDFmQTAgMWEwMCAxZkEwIDFhMDAgMWZBMCAxYTAwIDFmQTAgMWEwMCAxZkEwIDFjTTAgMWZBMCAxYTAwIDFmQTAgMWEwMCAxZkEwIDFhMDAgMWZBMCAxYTAwIDFmQTAgMWEwMCAxaW8wIDFhMDAgMWZBMCAxYTAwIDFmQTAgMWEwMCAxZkEwIDFhMDAgMWZBMCAxYTAwIDFmQTAgMWNNMCAxZkEwIDFhMDAgMWZBMCAxYTAwIDFmQTAgMWEwMCAxZkEwIDFhMDAgMWZBMCAxYTAwIDFmQTAgMWNNMCAxZkEwIDFhMDAgMWZBMCAxYTAwIDFmQTAgMWEwMCAxZkEwIDFhMDAgMWZBMCAxY00wIDFmQTAgMWEwMCAxZkEwIDFhMDAgMWZBMCAxYTAwIDFmQTAgMWEwMCAxZkEwIDFhMDAgMWZBMCAxY00wIDFmQTAgMWEwMCAxZkEwIDFhMDAgMWZBMCAxYTAwIDFmQTAgMWEwMCAxZkEwIDFhMDAgMWlvMCAxYTAwIDFmQTAgMWEwMCAxZkEwIDFhMDAgMWZBMCAxYTAwIDFmQTAgMWEwMCAxZkEwIDFjTTAgMWZBMCAxYTAwIDFmQTAgMWEwMCAxZkEwIDFhMDAgMWZBMCAxYTAwIDFmQTAgMWEwMCAxZkEwIDFjTTAgMWZBMCAxYTAwIDFmQTAgMWEwMCAxZkEwIDFhMDAgMWZBMCAxYTAwIDFmQTAgMWNNMCAxZkEwIDFhMDAgMWZBMCAxYTAwIDFmQTAgMWEwMCAxZkEwIDFhMDAgMWZBMCAxYTAwIDFmQTAgMWNNMCAxZkEwIDFhMDAgMWZBMCAxYTAwIDFmQTAgMWEwMCAxZkEwIDFhMDAgMWZBMCAxYTAwIDFpbzAgMWEwMCAxZkEwIDFhMDAgMWZBMCAxYTAwIDFmQTAgMWEwMCAxZkEwIDFhMDAgMWZBMCAxY00wIDFmQTAgMWEwMCAxZkEwIDFhMDAgMWZBMCAxYTAwIDFmQTAgMWEwMCAxZkEwIDFhMDAgMWZBMCAxY00wIDFmQTAgMWEwMCAxZkEwIDFhMDAgMWZBMCAxYTAwIDFmQTAgMWEwMCAxZkEwIDFjTTAgMWZBMCAxYTAwIDFmQTAgMWEwMCAxZkEwIDFhMDAgMWZBMCAxYTAwIDFmQTAgMWEwMCAxZkEwIDFjTTAgMWZBMCAxYTAwIDFmQTAgMWEwMCAxZkEwIDFhMDAgMWZBMCAxYTAwIDFmQTAgMWEwMCAxZkEwIDFjTTAgMWZBMCAxYTAwIDFmQTAgMWEwMCAxZkEwIDFhMDAgMWZBMCAxYTAwIDFmQTAgMWEwMCAxZkEwIDFjTTAgMWZBMCAxYTAwIDFmQTAgMWEwMCAxZkEwIDFhMDAgMWZBMCAxYTAwIDFmQTAgMWEwMCAxaW8wIDFhMDAgMWZBMCAxYTAwIDFmQTAgMWEwMCAxZkEwIDFhMDAgMWZBMCAxYTAwIDFmQTAgMWNNMCAxZkEwIDFhMDAgMWZBMCAxYTAwIDFmQTAgMWEwMCAxZkEwIDFhMDAgMWZBMCAxYTAwIDFmQTAgMWNNMCAxZkEwIDFhMDAgMWZBMCAxYTAwIDFmQTAgMWEwMCAxZkEwIDFhMDAgMWZBMCAxY00wIDFmQTAgMWEwMCAxZkEwIDFhMDAgMWZBMCAxYTAwIDFmQTAgMWEwMCAxZkEwIDFhMDAgMWZBMCAxY00wIDFmQTAgMWEwMCAxZkEwIDFhMDAgMWZBMCAxYTAwIDFmQTAgMWEwMCAxZkEwIDFhMDAgMWlvMCAxYTAwIDFmQTAgMWEwMCAxZkEwIDFhMDAgMWZBMCAxYTAwIDFmQTAgMWEwMCAxZkEwIDFjTTAgMWZBMCAxYTAwIDFmQTAgMWEwMCAxZkEwIDFhMDAgMWZBMCAxYTAwIDFmQTAgMWEwMCAxZkEwIDFjTTAgMWZBMCAxYTAwIDFmQTAgMWEwMCAxZkEwIDFhMDAgMWZBMCAxYTAwIDFmQTAgMWNNMCAxZkEwIDFhMDAgMWZBMCAxYTAwIDFmQTAgMWEwMCAxZkEwIDFhMDAgMWZBMCAxYTAwIDFmQTAgMWNNMCAxZkEwIDFhMDAgMWZBMCAxYTAwIDFmQTAgMWEwMCAxZkEwIDFhMDAgMWZBMCAxYTAwIDFpbzAgMWEwMCAxZkEwIDFhMDAgMWZBMCAxYTAwIDFmQTAgMWEwMCAxZkEwIDFhMDAgMWZBMCAxY00wIDFmQTAgMWEwMCAxZkEwIDFhMDAgMWZBMCAxYTAwIDFmQTAgMWEwMCAxZkEwIDFhMDAgMWZBMCAxY00wIDFmQTAgMWEwMCAxZkEwIDFhMDAgMWZBMCAxYTAwIDFmQTAgMWEwMCAxZkEwIDFjTTAgMWZBMCAxYTAwIDFmQTAgMWEwMCAxZkEwIDFhMDAgMWZBMCAxYTAwIDFmQTAgMWEwMCAxZkEwIDFjTTAgMWZBMCAxYTAwIDFmQTAgMWEwMCAxZkEwIDFhMDAgMWZBMCAxYTAwIDFmQTAgMWEwMCAxaW8wIDFhMDAgMWZBMCAxYTAwIDFmQTAgMWEwMCAxZkEwIDFhMDAgMWZBMCAxYTAwIDFmQTAgMWNNMCAxZkEwIDFhMDAgMWZBMCAxYTAwIDFmQTAgMWEwMCAxZkEwIDFhMDAgMWZBMCAxYTAwIDFmQTAgMWNNMCAxZkEwIDFhMDAgMWZBMCAxYTAwIDFmQTAgMWEwMCAxZkEwIDFhMDAgMWZBMCAxY00wIDFmQTAgMWEwMCAxZkEwIDFhMDAgMWZBMCAxYTAwIDFmQTAgMWEwMCAxZkEwIDFhMDAgMWZBMCAxY00wIDFmQTAgMWEwMCAxZkEwIDFhMDAgMWZBMCAxYTAwIDFmQTAgMWEwMCAxZkEwIDFhMDAgMWlvMCAxYTAwIDFmQTAgMWEwMCAxZkEwIDFhMDAgMWZBMCAxYTAwIDFmQTAgMWEwMCAxZkEwIDFjTTAgMWZBMCAxYTAwIDFmQTAgMWEwMCAxZkEwIDFhMDAgMWZBMCAxYTAwIDFmQTAgMWEwMCAxZkEwIDFjTTAgMWZBMCAxYTAwIDFmQTAgMWEwMCAxZkEwIDFhMDAgMWZBMCAxYTAwIDFmQTAgMWNNMCAxZkEwIDFhMDAgMWZBMCAxYTAwIDFmQTAgMWEwMCAxZkEwIDFhMDAgMWZBMCAxYTAwIDFmQTAgMWNNMCAxZkEwIDFhMDAgMWZBMCAxYTAwIDFmQTAgMWEwMCAxZkEwIDFhMDAgMWZBMCAxYTAwIDFpbzAgMWEwMCAxZkEwIDFhMDAgMWZBMCAxYTAwIDFmQTAgMWEwMCAxZkEwIDFhMDAgMWZBMCAxY00wIDFmQTAgMWEwMCAxZkEwIDFhMDAgMWZBMCAxYTAwIDFmQTAgMWEwMCAxZkEwIDFhMDAgMWZBMCAxY00wIDFmQTAgMWEwMCAxZkEwIDFhMDAgMWZBMCAxYTAwIDFmQTAgMWEwMCAxZkEwIDFjTTAgMWZBMCAxYTAwIDFmQTAgMWEwMCAxZkEwIDFhMDAgMWZBMCAxYTAwIDFmQTAgMWEwMCAxZkEwIDFjTTAgMWZBMCAxYTAwIDFmQTAgMWEwMCAxZkEwIDFhMDAgMWZBMCAxYTAwIDFmQTAgMWEwMCAxaW8wIDFhMDAgMWZBMCAxYTAwIDFmQTAgMWEwMCAxZkEwIDFhMDAgMWZBMCAxYTAwIDFmQTAgMWNNMCAxZkEwIDFhMDAgMWZBMCAxYTAwIDFmQTAgMWEwMCAxZkEwIDFhMDAgMWZBMCAxYTAwIDFmQTAgMWNNMCAxZkEwIDFhMDAgMWZBMCAxYTAwIDFmQTAgMWEwMCAxZkEwIDFhMDAgMWZBMCAxY00wIDFmQTAgMWEwMCAxZkEwIDFhMDAgMWZBMCAxYTAwfDE0ZTVcIixcbiAgXCJBbnRhcmN0aWNhL1BhbG1lcnwtMDAgLTAzIC0wNCAtMDJ8MCAzMCA0MCAyMHwwMTIxMjEyMTIxMjEzMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxfC1jYW8wIG5EMCAxdmQwIFNMMCAxdmQwIDE3ejAgMWNOMCAxZnowIDFjTjAgMWNMMCAxY04wIGFzbjAgRGIwIGpzTjAgMTROMCAxMXowIDFvMTAgMTF6MCAxcU4wIFdMMCAxcU4wIFdMMCAxcU4wIDFjTDAgMWNOMCAxMXowIDFvMTAgMTF6MCAxcU4wIFdMMCAxZkIwIDE5WDAgMXFOMCAxMXowIDFvMTAgMTF6MCAxbzEwIDExejAgMW8xMCAxMXowIDFxTjAgV0wwIDFxTjAgMTdiMCAxaXAwIDExejAgMWlwMCAxZnowIDFmQjAgMTF6MCAxcU4wIFdMMCAxcU4wIFdMMCAxcU4wIFdMMCAxcU4wIDExejAgMW8xMCAxMXowIDFvMTAgMTF6MCAxcU4wIFdMMCAxcU4wIDE3YjAgMWlwMCAxMXowIDFvMTAgMTlYMCAxZkIwIDFuWDAgRzEwIDFFTDAgT3AwIDF6YjAgUmQwIDF3bjAgUmQwIDQ2bjAgQXAwfDQwXCIsXG4gIFwiQW50YXJjdGljYS9Sb3RoZXJhfC0wMCAtMDN8MCAzMHwwMXxnT28wfDEzMFwiLFxuICBcIkFzaWEvUml5YWRofExNVCArMDN8LTM2LlEgLTMwfDAxfC1UdkQ2LlF8NTdlNVwiLFxuICBcIkFudGFyY3RpY2EvVHJvbGx8LTAwICswMCArMDJ8MCAwIC0yMHwwMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMXwxcHVvMCBoZDAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMW8wMHw0MFwiLFxuICBcIkFudGFyY3RpY2EvVm9zdG9rfC0wMCArMDcgKzA1fDAgLTcwIC01MHwwMTAxMnwtdGpBMCAxcldoMCAxTmowIDFhVHYwfDI1XCIsXG4gIFwiRXVyb3BlL0JlcmxpbnxMTVQgQ0VUIENFU1QgQ0VNVHwtUi5zIC0xMCAtMjAgLTMwfDAxMjEyMTIxMjEyMTIxMjMyMTIxMjMyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMXwtMzZSY1IucyBVYldSLnMgMTFkMCAxaU8wIDExQTAgMW8wMCAxMUEwIFFyYzAgNmkwMCBXTTAgMWZBMCAxY00wIDFjTTAgMWNNMCBrTDAgTmMwIG0xMCBXTTAgMWFvMCAxY3AwIGRYMCBqejAgRGQwIDFpbzAgMTdjMCAxZkEwIDFhMDAgMWVoQTAgMWEwMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFmQTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFmQTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxZkEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFvMDB8NDFlNVwiLFxuICBcIkFzaWEvQWxtYXR5fExNVCArMDUgKzA2ICswN3wtNTcuTSAtNTAgLTYwIC03MHwwMTIzMjMyMzIzMjMyMzIzMjMyMzIzMjEyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIxfC0xUGM1Ny5NIGVVbzcuTSAyM0NMMCAxZGIwIDFjTjAgMWRiMCAxY04wIDFkYjAgMWRkMCAxY08wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxZkEwIDJwQjAgSU0wIHJYMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFmQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBMNG0wfDE1ZTVcIixcbiAgXCJBc2lhL0FtbWFufExNVCBFRVQgRUVTVCArMDN8LTJuLkkgLTIwIC0zMCAtMzB8MDEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyM3wtMXlXMm4uSSAxSGlNbi5JIEtMMCAxb04wIDExYjAgMW9OMCAxMWIwIDFwZDAgMWR6MCAxY3AwIDExYjAgMW9wMCAxMWIwIGZPMTAgMWRiMCAxZTEwIDFjTDAgMWNOMCAxY0wwIDFjTjAgMWZ6MCAxcGQwIDEwbjAgMWxkMCAxNG4wIDFoQjAgMTViMCAxaXAwIDE5WDAgMWNOMCAxY0wwIDFjTjAgMTdiMCAxbGQwIDE0bzAgMWxjMCAxN2MwIDFpbzAgMTdjMCAxaW8wIDE3YzAgMVNvMCB5MDAgMWZjMCAxZGMwIDFjbzAgMWRjMCAxY00wIDFjTTAgMWNNMCAxbzAwIDExQTAgMWxjMCAxN2MwIDFjTTAgMWNNMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgNGJYMCBEZDAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIExBMCAxQzAwfDI1ZTVcIixcbiAgXCJBc2lhL0FuYWR5cnxMTVQgKzEyICsxMyArMTQgKzExfC1iTi5VIC1jMCAtZDAgLWUwIC1iMHwwMTIzMjEyMTIxMjEyMTIxMjEyMTIxNDEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjE0MXwtMVBjYk4uVSBlVW5OLlUgMjNDTDAgMWRiMCAycTEwIDFjTjAgMWRiMCAxZGQwIDFjTzAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFmQTAgMnBCMCBJTTAgclgwIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWZBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMnNwMCBXTTB8MTNlM1wiLFxuICBcIkFzaWEvQXF0YXV8TE1UICswNCArMDUgKzA2fC0zbC40IC00MCAtNTAgLTYwfDAxMjMyMzIzMjMyMzIzMjMyMzIzMjEyMzIzMjMxMjEyMTIxMjEyMTIxMjEyMTIxMnwtMVBjM2wuNCBlVW5sLjQgMjRQWDAgMnBYMCAxY04wIDFkYjAgMWRkMCAxY08wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxZkEwIDJwQjAgSU0wIHJYMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNOMCAxY00wIDFmQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTB8MTVlNFwiLFxuICBcIkFzaWEvQXF0b2JlfExNVCArMDQgKzA1ICswNnwtM00uRSAtNDAgLTUwIC02MHwwMTIzMjMyMzIzMjMyMzIzMjMyMzIxMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyfC0xUGMzTS5FIGVVbk0uRSAyM0NMMCAzRGIwIDFjTjAgMWRiMCAxZGQwIDFjTzAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFmQTAgMnBCMCBJTTAgclgwIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWZBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wfDI3ZTRcIixcbiAgXCJBc2lhL0FzaGdhYmF0fExNVCArMDQgKzA1ICswNnwtM1IudyAtNDAgLTUwIC02MHwwMTIzMjMyMzIzMjMyMzIzMjMyMzIzMjEyfC0xUGMzUi53IGVVblIudyAyM0NMMCAxZGIwIDFjTjAgMWRiMCAxY04wIDFkYjAgMWRkMCAxY08wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxZkEwIDJwQjAgSU0wfDQxZTRcIixcbiAgXCJBc2lhL0F0eXJhdXxMTVQgKzAzICswNSArMDYgKzA0fC0zci5JIC0zMCAtNTAgLTYwIC00MHwwMTIzMjMyMzIzMjMyMzIzMjMyMzI0MjMyMzIzMjMyMzIzMjMyNDI0MjQyNDI0MnwtMVBjM3IuSSBlVW9yLkkgMjRQVzAgMnBYMCAxY04wIDFkYjAgMWRkMCAxY08wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxZkEwIDJwQjAgSU0wIHJYMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFmQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDJzcDAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwfFwiLFxuICBcIkFzaWEvQmFnaGRhZHxMTVQgQk1UICswMyArMDR8LTJWLkUgLTJWLkEgLTMwIC00MHwwMTIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyfC0zZUxDVi5FIDE4YW8wLjQgMkFDblYuQSAxMWIwIDFjcDAgMWR6MCAxZGQwIDFkYjAgMWNOMCAxY3AwIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFmQTAgMWRlMCAxZGMwIDFkYzAgMWRjMCAxY00wIDFkYzAgMWNNMCAxZGMwIDFjTTAgMWRjMCAxZGMwIDFkYzAgMWNNMCAxZGMwIDFjTTAgMWRjMCAxY00wIDFkYzAgMWRjMCAxZGMwIDFjTTAgMWRjMCAxY00wIDFkYzAgMWNNMCAxZGMwIDFkYzAgMWRjMCAxY00wIDFkYzAgMWNNMCAxZGMwIDFjTTAgMWRjMHw2NmU1XCIsXG4gIFwiQXNpYS9RYXRhcnxMTVQgKzA0ICswM3wtM3EuOCAtNDAgLTMwfDAxMnwtMjFKZnEuOCAyN0JYcS44fDk2ZTRcIixcbiAgXCJBc2lhL0Jha3V8TE1UICswMyArMDQgKzA1fC0zai5vIC0zMCAtNDAgLTUwfDAxMjMyMzIzMjMyMzIzMjMyMzIzMjMyMTIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyfC0xUGMzai5vIDFqVW9qLm8gV0NMMCAxZGIwIDFjTjAgMWRiMCAxY04wIDFkYjAgMWRkMCAxY08wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxZkEwIDJwQjAgMWNNMCA5SmUwIDFvMDAgMTF6MCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFvMDB8MjdlNVwiLFxuICBcIkFzaWEvQmFuZ2tva3xMTVQgQk1UICswN3wtNkcuNCAtNkcuNCAtNzB8MDEyfC0zRDhTRy40IDFDMDAwfDE1ZTZcIixcbiAgXCJBc2lhL0Jhcm5hdWx8TE1UICswNiArMDcgKzA4fC01eiAtNjAgLTcwIC04MHwwMTIzMjMyMzIzMjMyMzIzMjMyMzIzMjEyMzIzMjMyMzIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyfC0yMVM1eiBwQ256IDIzQ0wwIDFkYjAgMWNOMCAxZGIwIDFjTjAgMWRiMCAxZGQwIDFjTzAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFmQTAgMnBCMCBJTTAgclgwIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIHA5MCBMRTAgMWZBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCA4SHowIDNyZDB8XCIsXG4gIFwiQXNpYS9CZWlydXR8TE1UIEVFVCBFRVNUfC0ybSAtMjAgLTMwfDAxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjF8LTNEOE9tIDFCV29tIDFvbjAgMTQxMCAxZGIwIDE5QjAgMWluMCAxaXAwIFdMMCAxbFFwMCAxMWIwIDFvTjAgMTFiMCAxb04wIDExYjAgMXBkMCAxMWIwIDFvTjAgMTFiMCBxNk4wIEVuMCAxb04wIDExYjAgMW9OMCAxMWIwIDFvTjAgMTFiMCAxcGQwIDExYjAgMW9OMCAxMWIwIDFvcDAgMTFiMCBkQTEwIDE3YjAgMWlOMCAxN2IwIDFpTjAgMTdiMCAxaU4wIDE3YjAgMXZCMCBTTDAgMW1wMCAxM3owIDFpTjAgMTdiMCAxaU4wIDE3YjAgMWpkMCAxMm4wIDFhMTAgMWNMMCAxY04wIDFjTDAgMWNOMCAxY0wwIDFmQjAgMWNMMCAxY04wIDFjTDAgMWNOMCAxY0wwIDFjTjAgMXFMMCBXTjAgMXFMMCBXTjAgMXFMMCAxMUIwIDFuWDAgMTFCMCAxblgwIDExQjAgMXFMMCBXTjAgMXFMMCBXTjAgMXFMMCBXTjAgMXFMMCAxMUIwIDFuWDAgMTFCMCAxblgwIDExQjAgMXFMMCBXTjAgMXFMMCBXTjAgMXFMMCAxMUIwIDFuWDAgMTFCMCAxblgwIDExQjAgMW5YMCAxMUIwIDFxTDAgV04wIDFxTDAgV04wIDFxTDAgMTFCMCAxblgwIDExQjAgMW5YMCAxMUIwIDFxTDAgV04wIDFxTDAgV04wIDFxTDAgMTFCMCAxblgwIDExQjAgMW5YMCAxMUIwIDFuWDAgMTFCMCAxcUwwIFdOMCAxcUwwIFdOMCAxcUwwIDExQjAgMW5YMCAxMUIwIDFuWDAgMTFCMCAxcUwwIFdOMCAxcUwwIFdOMCAxcUwwIFdOMCAxcUwwIDExQjAgMW5YMCAxMUIwIDFuWDAgMTFCMCAxcUwwIFdOMCAxcUwwIFdOMCAxcUwwIDExQjAgMW5YMCAxMUIwIDFuWDAgMTFCMCAxblgwIDExQjAgMXFMMCBXTjAgMXFMMCBXTjAgMXFMMCAxMUIwIDFuWDAgMTFCMCAxblgwIDExQjAgMXFMMCBXTjAgMXFMMCBXTjAgMXFMMCAxMUIwIDFuWDAgMTFCMCAxblgwIDExQjAgMW5YMCAxMUIwIDFxTDAgV04wIDFxTDAgV04wIDFxTDAgMTFCMCAxblgwIDExQjAgMW5YMCAxMUIwIDFxTDAgV04wIDFxTDAgV04wIDFxTDAgV04wIDFxTDAgMTFCMCAxblgwIDExQjAgMW5YMCAxMUIwIDFxTDAgV04wIDFxTDAgV04wIDFxTDAgMTFCMCAxblgwIDExQjAgMW5YMCAxMUIwIDFuWDAgMTFCMCAxcUwwIFdOMCAxcUwwIFdOMCAxcUwwIDExQjAgMW5YMCAxMUIwIDFuWDAgMTFCMCAxcUwwIFdOMCAxcUwwIFdOMCAxcUwwIDExQjAgMW5YMCAxMUIwIDFuWDAgMTFCMCAxblgwIDExQjAgMXFMMCBXTjAgMXFMMCBXTjAgMXFMMCAxMUIwIDFuWDAgMTFCMCAxblgwIDExQjAgMXFMMCBXTjAgMXFMMCBXTjAgMXFMMCBXTjAgMXFMMCAxMUIwIDFuWDAgMTFCMCAxblgwIDExQjAgMXFMMCBXTjAgMXFMMCBXTjAgMXFMMCAxMUIwIDFuWDAgMTFCMCAxblgwIDExQjAgMW5YMCAxMUIwIDFxTDAgV04wIDFxTDAgV04wIDFxTDAgV04wIDFxTDAgMTFCMCAxblgwIDExQjAgMW5YMCAxMUIwIDFxTDAgV04wIDFxTDAgV04wIDFxTDAgMTFCMCAxblgwIDExQjAgMW5YMCAxMUIwIDFuWDAgMTFCMCAxcUwwIFdOMCAxcUwwIFdOMCAxcUwwIDExQjAgMW5YMCAxMUIwIDFuWDAgMTFCMCAxcUwwIFdOMCAxcUwwIFdOMCAxcUwwIDExQjAgMW5YMCAxMUIwIDFuWDAgMTFCMCAxblgwIDExQjAgMXFMMCBXTjAgMXFMMCBXTjAgMXFMMCAxMUIwIDFuWDAgMTFCMCAxblgwIDExQjAgMXFMMCBXTjAgMXFMMCBXTjAgMXFMMCBXTjAgMXFMMCAxMUIwIDFuWDAgMTFCMCAxblgwIDExQjAgMXFMMCBXTjAgMXFMMCBXTjAgMXFMMCAxMUIwIDFuWDAgMTFCMCAxblgwIDExQjAgMW5YMCAxMUIwIDFxTDAgV04wIDFxTDAgV04wIDFxTDAgMTFCMCAxblgwIDExQjAgMW5YMCAxMUIwIDFxTDAgV04wIDFxTDAgV04wIDFxTDAgMTFCMCAxblgwIDExQjAgMW5YMCAxMUIwIDFuWDAgMTFCMCAxcUwwIFdOMCAxcUwwIFdOMCAxcUwwIDExQjAgMW5YMCAxMUIwIDFuWDAgMTFCMCAxcUwwIFdOMCAxcUwwIFdOMCAxcUwwIFdOMCAxcUwwIDExQjAgMW5YMCAxMUIwIDFuWDAgMTFCMCAxcUwwIFdOMCAxcUwwIFdOMCAxcUwwIDExQjAgMW5YMCAxMUIwIDFuWDAgMTFCMCAxblgwIDExQjAgMXFMMCBXTjAgMXFMMCBXTjAgMXFMMCAxMUIwIDFuWDAgMTFCMCAxblgwIDExQjAgMXFMMCBXTjAgMXFMMCBXTjAgMXFMMCAxMUIwIDFuWDAgMTFCMCAxblgwIDExQjAgMW5YMCAxMUIwIDFxTDAgV04wIDFxTDAgV04wIDFxTDAgMTFCMCAxblgwIDExQjAgMW5YMCAxMUIwIDFxTDAgV04wIDFxTDAgV04wIDFxTDAgV04wIDFxTDAgMTFCMCAxblgwIDExQjAgMW5YMCAxMUIwIDFxTDAgV04wIDFxTDAgV04wIDFxTDAgMTFCMCAxblgwIDExQjAgMW5YMCAxMUIwIDFuWDAgMTFCMCAxcUwwIFdOMCAxcUwwIFdOMCAxcUwwIDExQjAgMW5YMCAxMUIwIDFuWDAgMTFCMCAxblgwIDExQjAgMXFMMCBXTjAgMXFMMCBXTjAgMXFMMCAxMUIwIDFuWDAgMTFCMCAxblgwIDExQjAgMW5YMCAxMUIwIDFxTDAgV04wIDFxTDAgV04wIDFxTDAgMTFCMCAxblgwIDExQjAgMW5YMCAxMUIwIDFxTDAgV04wIDFxTDAgV04wIDFxTDAgMTFCMCAxblgwIDExQjAgMW5YMCAxMUIwIDFuWDAgMTFCMCAxcUwwIFdOMCAxcUwwIFdOMCAxcUwwIDExQjAgMW5YMCAxMUIwIDFuWDAgMTFCMCAxcUwwIFdOMCAxcUwwIFdOMCAxcUwwIFdOMCAxcUwwIDExQjAgMW5YMCAxMUIwIDFuWDAgMTFCMCAxcUwwIFdOMCAxcUwwIFdOMCAxcUwwIDExQjAgMW5YMCAxMUIwIDFuWDAgMTFCMCAxblgwIDExQjAgMXFMMCBXTjAgMXFMMCBXTjAgMXFMMCAxMUIwIDFuWDAgMTFCMCAxblgwIDExQjAgMXFMMCBXTjAgMXFMMCBXTjAgMXFMMCAxMUIwIDFuWDAgMTFCMCAxblgwIDExQjAgMW5YMCAxMUIwIDFxTDAgV04wIDFxTDAgV04wIDFxTDAgMTFCMCAxblgwIDExQjAgMW5YMCAxMUIwIDFxTDAgV04wIDFxTDAgV04wIDFxTDAgV04wIDFxTDAgMTFCMCAxblgwIDExQjAgMW5YMCAxMUIwIDFxTDAgV04wIDFxTDAgV04wIDFxTDAgMTFCMCAxblgwIDExQjAgMW5YMCAxMUIwIDFuWDAgMTFCMCAxcUwwIFdOMCAxcUwwIFdOMCAxcUwwIDExQjAgMW5YMCAxMUIwIDFuWDAgMTFCMCAxcUwwIFdOMCAxcUwwIFdOMCAxcUwwIDExQjAgMW5YMCAxMUIwIDFuWDAgMTFCMCAxblgwIDExQjAgMXFMMCBXTjAgMXFMMCBXTjAgMXFMMCAxMUIwIDFuWDAgMTFCMCAxblgwIDExQjAgMXFMMCBXTjAgMXFMMCBXTjAgMXFMMCBXTjAgMXFMMCAxMUIwIDFuWDAgMTFCMCAxblgwIDExQjAgMXFMMCBXTjAgMXFMMCBXTjAgMXFMMCAxMUIwIDFuWDAgMTFCMCAxblgwIDExQjAgMW5YMCAxMUIwIDFxTDAgV04wIDFxTDAgV04wIDFxTDAgMTFCMCAxblgwIDExQjAgMW5YMCAxMUIwIDFxTDAgV04wIDFxTDAgV04wIDFxTDAgV04wIDFxTDAgMTFCMCAxblgwIDExQjAgMW5YMCAxMUIwIDFuWDAgMTFCMCAxcUwwIFdOMCAxcUwwIFdOMCAxcUwwIDExQjAgMW5YMCAxMUIwIDFuWDAgMTFCMCAxcUwwIFdOMCAxcUwwIFdOMCAxcUwwIDExQjAgMW5YMCAxMUIwIDFuWDAgMTFCMCAxblgwIDExQjAgMXFMMCBXTjAgMXFMMCBXTjAgMXFMMCAxMUIwIDFuWDAgMTFCMCAxblgwIDExQjAgMXFMMCBXTjAgMXFMMCBXTjAgMXFMMCBXTjAgMXFMMCAxMUIwIDFuWDAgMTFCMCAxblgwIDExQjAgMXFMMCBXTjAgMXFMMCBXTjAgMXFMMCAxMUIwIDFuWDAgMTFCMCAxblgwIDExQjAgMW5YMCAxMUIwIDFxTDAgV04wIDFxTDAgV04wIDFxTDAgMTFCMCAxblgwIDExQjAgMW5YMCAxMUIwIDFxTDAgV04wIDFxTDAgV04wIDFxTDAgMTFCMCAxblgwIDExQjAgMW5YMCAxMUIwIDFuWDAgMTFCMCAxcUwwIFdOMCAxcUwwIFdOMCAxcUwwIDExQjAgMW5YMCAxMUIwIDFuWDAgMTFCMCAxcUwwIFdOMCAxcUwwIFdOMCAxcUwwIFdOMCAxcUwwIDExQjAgMW5YMCAxMUIwIDFuWDAgMTFCMCAxcUwwIFdOMCAxcUwwIFdOMCAxcUwwIDExQjAgMW5YMCAxMUIwIDFuWDAgMTFCMCAxblgwIDExQjAgMXFMMCBXTjAgMXFMMCBXTjAgMXFMMCAxMUIwIDFuWDAgMTFCMCAxblgwIDExQjAgMXFMMCBXTjAgMXFMMCBXTjAgMXFMMCAxMUIwIDFuWDAgMTFCMCAxblgwIDExQjAgMW5YMCAxMUIwIDFxTDAgV04wIDFxTDAgV04wIDFxTDAgMTFCMCAxblgwIDExQjAgMW5YMCAxMUIwIDFxTDAgV04wIDFxTDAgV04wIDFxTDAgV04wIDFxTDAgMTFCMCAxblgwIDExQjAgMW5YMCAxMUIwIDFxTDAgV04wIDFxTDAgV04wIDFxTDAgMTFCMCAxblgwIDExQjAgMW5YMCAxMUIwIDFuWDAgMTFCMCAxcUwwIFdOMCAxcUwwIFdOMCAxcUwwIDExQjAgMW5YMCAxMUIwIDFuWDAgMTFCMCAxcUwwIFdOMCAxcUwwIFdOMCAxcUwwIDExQjAgMW5YMCAxMUIwIDFuWDAgMTFCMCAxblgwIDExQjAgMXFMMCBXTjAgMXFMMCBXTjAgMXFMMCAxMUIwIDFuWDAgMTFCMCAxblgwIDExQjAgMXFMMCBXTjAgMXFMMCBXTjAgMXFMMCBXTjAgMXFMMCAxMUIwIDFuWDAgMTFCMCAxblgwIDExQjAgMXFMMCBXTjAgMXFMMCBXTjAgMXFMMCAxMUIwIDFuWDAgMTFCMCAxblgwIDExQjAgMW5YMCAxMUIwIDFxTDAgV04wIDFxTDAgV04wIDFxTDAgMTFCMCAxblgwIDExQjAgMW5YMCAxMUIwIDFxTDAgV04wIDFxTDAgV04wIDFxTDAgMTFCMCAxblgwIDExQjAgMW5YMCAxMUIwIDFuWDAgMTFCMCAxcUwwIFdOMCAxcUwwIFdOMCAxcUwwIDExQjAgMW5YMCAxMUIwIDFuWDAgMTFCMCAxcUwwIFdOMCAxcUwwIFdOMCAxcUwwIFdOMCAxcUwwIDExQjAgMW5YMCAxMUIwIDFuWDAgMTFCMCAxcUwwIFdOMCAxcUwwIFdOMCAxcUwwIDExQjAgMW5YMCAxMUIwIDFuWDAgMTFCMCAxblgwIDExQjAgMXFMMCBXTjAgMXFMMCBXTjAgMXFMMCAxMUIwIDFuWDAgMTFCMCAxblgwIDExQjAgMXFMMCBXTjAgMXFMMCBXTjAgMXFMMCAxMUIwIDFuWDAgMTFCMCAxblgwIDExQjAgMW5YMCAxMUIwIDFxTDAgV04wIDFxTDAgV04wIDFxTDAgMTFCMCAxblgwIDExQjAgMW5YMCAxMUIwIDFxTDAgV04wIDFxTDAgV04wIDFxTDAgV04wIDFxTDAgMTFCMCAxblgwIDExQjAgMW5YMCAxMUIwIDFxTDAgV04wIDFxTDAgV04wIDFxTDAgMTFCMCAxblgwIDExQjAgMW5YMCAxMUIwIDFuWDAgMTFCMCAxcUwwIFdOMCAxcUwwIFdOMCAxcUwwIDExQjAgMW5YMCAxMUIwIDFuWDAgMTFCMCAxcUwwIFdOMCAxcUwwIFdOMCAxcUwwIDExQjAgMW5YMCAxMUIwIDFuWDAgMTFCMCAxblgwIDExQjAgMXFMMCBXTjAgMXFMMCBXTjAgMXFMMCAxMUIwIDFuWDAgMTFCMCAxblgwIDExQjAgMXFMMCBXTjAgMXFMMCBXTjAgMXFMMCBXTjAgMXFMMCAxMUIwIDFuWDAgMTFCMCAxblgwIDExQjAgMXFMMCBXTjAgMXFMMCBXTjAgMXFMMCAxMUIwIDFuWDAgMTFCMCAxblgwIDExQjAgMW5YMHwyMmU1XCIsXG4gIFwiQXNpYS9CaXNoa2VrfExNVCArMDUgKzA2ICswN3wtNFcubyAtNTAgLTYwIC03MHwwMTIzMjMyMzIzMjMyMzIzMjMyMzIzMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTJ8LTFQYzRXLm8gZVVuVy5vIDIzQ0wwIDFkYjAgMWNOMCAxZGIwIDFjTjAgMWRiMCAxZGQwIDFjTzAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFmQTAgMmUwMCAxdFgwIDE3YjAgMWlwMCAxN2IwIDFpcDAgMTdiMCAxaXAwIDE3YjAgMWlwMCAxOVgwIDFjUHUgMW5YMCAxMUIwIDFuWDAgMTFCMCAxcUwwIFdOMCAxcUwwIFdOMCAxcUwwIDExQjAgMW5YMCAxMUIwIDFuWDAgMTFCMCAxcUwwIFdOMHw4N2U0XCIsXG4gIFwiQXNpYS9CcnVuZWl8TE1UICswNzMwICswOCArMDgyMCArMDl8LTdsLmsgLTd1IC04MCAtOGsgLTkwfDAxMjMyMzIzMjMyMzIzMjMyNDJ8LTFLSVRsLmsgZ0RiUC5rIDZ5bnUgQW5FIDFPMGsgQW5FIDFOQWsgQW5FIDFOQWsgQW5FIDFOQWsgQW5FIDFPMGsgQW5FIDFOQWsgQW5FIHBBayA4RnowfDQyZTRcIixcbiAgXCJBc2lhL0tvbGthdGF8TE1UIEhNVCBNTVQgSVNUICswNjMwfC01Ui5zIC01Ui5rIC01bC5hIC01dSAtNnV8MDEyMzQzNDN8LTRGZzVSLnMgQktvMC44IDFyRGN3LmEgMXIyTFAuYSAxdW4wIEhCMCA3elgwfDE1ZTZcIixcbiAgXCJBc2lhL0NoaXRhfExNVCArMDggKzA5ICsxMHwtN3guUSAtODAgLTkwIC1hMHwwMTIzMjMyMzIzMjMyMzIzMjMyMzIzMjEyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMTJ8LTIxUTd4LlEgcEFueC5RIDIzQ0wwIDFkYjAgMWNOMCAxZGIwIDFjTjAgMWRiMCAxZGQwIDFjTzAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFmQTAgMnBCMCBJTTAgclgwIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWZBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCA4SHowIDNyZTB8MzNlNFwiLFxuICBcIkFzaWEvVWxhYW5iYWF0YXJ8TE1UICswNyArMDggKzA5fC03Ny53IC03MCAtODAgLTkwfDAxMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMnwtMkFQSDcudyAyVWtvNy53IGNLbjAgMWRiMCAxZGQwIDFjTDAgMWNOMCAxY0wwIDFjTjAgMWNMMCAxY04wIDFjTDAgMWNOMCAxY0wwIDFjTjAgMWNMMCAxY04wIDFmejAgMWNOMCAxY0wwIDFjTjAgMWNMMCAxY04wIDFjTDAgMWNOMCAxY0wwIDFjTjAgMWNMMCAxZkIwIDFjTDAgMWNOMCAxY0wwIDFjTjAgMWNMMCA2aEQwIDExejAgMWNOMCAxY0wwIDFjTjAgMWNMMCAxY04wIDFjTDAgMWNOMCAxY0wwIDFjTjAgMWZ6MCBrRXAwIDFjSjAgMWNQMCAxY0owfDEyZTVcIixcbiAgXCJBc2lhL1NoYW5naGFpfExNVCBDU1QgQ0RUfC04NS5IIC04MCAtOTB8MDEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxfC0yTTBVNS5IIEl1bzUuSCAxOG4wIE9qQjAgUnowIDExZDAgMXdMMCBBMTAgOEhYMCAxRzEwIFR6MCAxaXAwIDFqWDAgMWNOMCAxMWIwIDFvTjAgYUwwIDF0VTMwIFJiMCAxbzEwIDExejAgMXFOMCBXTDAgMXFOMCAxMXowIDFvMTAgMTF6MCAxbzEwIDExejB8MjNlNlwiLFxuICBcIkFzaWEvQ29sb21ib3xMTVQgTU1UICswNTMwICswNiArMDYzMHwtNWoubyAtNWoudyAtNXUgLTYwIC02dXwwMTIzNDI0MzJ8LTNEOFJqLm8gMTNpblguUSAxckZiTi53IDF6enUgN0FwdSAyM2R6MCAxMXp1IG4zY3V8MjJlNVwiLFxuICBcIkFzaWEvRGhha2F8TE1UIEhNVCArMDYzMCArMDUzMCArMDYgKzA3fC02MS5FIC01Ui5rIC02dSAtNXUgLTYwIC03MHwwMTIzMjQ1NHwtM2VMRzEuRSAyNjAwOC5rIDF1bm4uayBIQjAgbTZuMCAya3hidSAxaTAwfDE2ZTZcIixcbiAgXCJBc2lhL0RhbWFzY3VzfExNVCBFRVQgRUVTVCArMDN8LTJwLmMgLTIwIC0zMCAtMzB8MDEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjN8LTIxSmVwLmMgSGVwLmMgMTdiMCAxaXAwIDE3YjAgMWlwMCAxN2IwIDFpcDAgMTlYMCAxeFJCMCAxMVgwIDFvTjAgMTBMMCAxcEIwIDExYjAgMW9OMCAxMEwwIDFtcDAgMTNYMCAxb04wIDExYjAgMXBkMCAxMWIwIDFvTjAgMTFiMCAxb04wIDExYjAgMW9OMCAxMWIwIDFwZDAgMTFiMCAxb04wIDExYjAgMW9OMCAxMWIwIDFvTjAgMTFiMCAxcGQwIDExYjAgMW9OMCBOYjAgMUFOMCBOYjAgYmNwMCAxOVgwIDFncDAgMTlYMCAzbGQwIDF4WDAgVmQwIDFCejAgU3AwIDF2WDAgMTBwMCAxZHowIDFjTjAgMWNMMCAxZGIwIDFkYjAgMWcxMCAxYW4wIDFhcDAgMWRiMCAxZmQwIDFkYjAgMWNOMCAxZGIwIDFkZDAgMWRiMCAxY3AwIDFkejAgMWMxMCAxZFgwIDFjTjAgMWRiMCAxZGQwIDFkYjAgMWNOMCAxZGIwIDFjTjAgMWRiMCAxY04wIDFkYjAgMWRkMCAxZGIwIDFjTjAgMWRiMCAxY04wIDE5ejAgMWZCMCAxcUwwIDExQjAgMW9uMCBXcDAgMXFMMCAxMUIwIDFuWDAgMTFCMCAxblgwIDExQjAgMW5YMCAxMUIwIDFuWDAgMTFCMCAxcUwwIFdOMCAxcUwwIFdOMCAxcUwwIDExQjAgMW5YMCAxMUIwIDFuWDAgMTFCMCAxblgwIDExQjAgMXFMMCBXTjAgMXFMMCBXTjAgMXFMMHwyNmU1XCIsXG4gIFwiQXNpYS9EaWxpfExNVCArMDggKzA5fC04bS5rIC04MCAtOTB8MDEyMTJ8LTJsZTgwIDFkblgwIDFuZkEwIFhsZDB8MTllNFwiLFxuICBcIkFzaWEvRHViYWl8TE1UICswNHwtM0YuYyAtNDB8MDF8LTIxSmZGLmN8MzllNVwiLFxuICBcIkFzaWEvRHVzaGFuYmV8TE1UICswNSArMDYgKzA3fC00ei5jIC01MCAtNjAgLTcwfDAxMjMyMzIzMjMyMzIzMjMyMzIzMjMyMXwtMVBjNHouYyBlVW56LmMgMjNDTDAgMWRiMCAxY04wIDFkYjAgMWNOMCAxZGIwIDFkZDAgMWNPMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWZBMCAyaEIwfDc2ZTRcIixcbiAgXCJBc2lhL0ZhbWFndXN0YXxMTVQgRUVUIEVFU1QgKzAzfC0yZi5NIC0yMCAtMzAgLTMwfDAxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIzMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjF8LTFWYzJmLk0gMmEzY2YuTSAxY0wwIDFxcDAgWHowIDE5QjAgMTlYMCAxZkIwIDFkYjAgMWNwMCAxY0wwIDFmQjAgMTlYMCAxY04wIDFjTDAgMWNOMCAxY0wwIDFjTjAgMWNMMCAxY04wIDFmejAgMWNOMCAxY0wwIDFjTjAgMWNMMCAxY04wIDFjTDAgMWNOMCAxY0wwIDFjTjAgMWNMMCAxY04wIDFmejAgMWNOMCAxY0wwIDFjTjAgMWNMMCAxY04wIDFjTDAgMWNOMCAxY0wwIDFjTjAgMWNMMCAxZkIwIDFjTDAgMWNOMCAxY0wwIDFjTjAgMW8zMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxNVUwIDJLczAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMW8wMHxcIixcbiAgXCJBc2lhL0dhemF8TE1UIEVFVCBFRVNUIElTVCBJRFR8LTJoLlEgLTIwIC0zMCAtMjAgLTMwfDAxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjF8LTJNQkNoLlEgMUF6ZWguUSBNTTAgaU0wIDRKQTAgMTBvMCAxcEEwIDEwTTAgMXBBMCAxNm8wIDFqQTAgMTZvMCAxakEwIHBCYTAgVnowIDFvTjAgMTFiMCAxb08wIDEwTjAgMXB6MCAxME4wIDFwYjAgMTBOMCAxcGIwIDEwTjAgMXBiMCAxME4wIDFwejAgMTBOMCAxcGIwIDEwTjAgMXBiMCAxMWQwIDFvTDAgZFcwIGhmQjAgRGIwIDFmQjAgUmIwIGJYQjAgZ00wIDhRMDAgSU0wIDF3bzAgVFgwIDFIQjAgSUwwIDFzMTAgMTBuMCAxbzEwIFdMMCAxemQwIE9uMCAxbGQwIDExejAgMW8xMCAxNG4wIDFvMTAgMTRuMCAxbmQwIDEybjAgMW5kMCBYejAgMXExMCAxMm4wIE0xMCBDMDAgMTdjMCAxaW8wIDE3YzAgMWlvMCAxN2MwIDFvMDAgMWNMMCAxZkIwIDFjTDAgMWNOMCAxY0wwIDFjTjAgMWNMMCAxY04wIDFjTDAgMWNOMCAxN2MwIDFpbzAgMThOMCAxYnowIDE5ejAgMWdwMCAxNjEwIDFpTDAgMTF6MCAxbzEwIDE0bzAgMWxBMSBTS1ggMXhkMSBNS1ggMUFOMCAxYTAwIDFmQTAgMWNMMCAxY04wIDFuWDAgMTIxMCAxbkEwIDEyMTAgMXFMMCBXTjAgMXFMMCBXTjAgMXFMMCAxMWMwIDFvbjAgMTFCMCAxbzAwIDExQTAgMXFvMCBYQTAgMXFwMCAxY04wIDFjTDAgMWExMCAxZnowIDE3ZDAgMWluMCAxMUIwIDFuWDAgMTFCMCAxcUwwIFdOMCAxcUwwIFdOMCAxcUwwIDExQjAgMW5YMCAxMUIwIDFuWDAgMTFCMCAxcUwwIFdOMCAxcUwwIFdOMCAxcUwwIFdOMCAxcUwwIDExQjAgMWxiMCAxNHAwIDFpbjAgMTdkMCAxY0wwIDFjTjAgMTlYMCAxZkIwIDE0bjAgakIwIDJMMCAxMUIwIFdMMCBnTjAgOG4wIDExQjAgVFgwIGdOMCBiYjAgMTFCMCBPbjAgakIwIGRYMCAxMUIwIEx6MCBnTjAgbW4wIFdOMCBJTDAgZ04wIHBiMCBXTjAgRGIwIGpCMCByWDAgMTFCMCB4ejAgZ04wIHh6MCAxMUIwIHJYMCBqQjAgQW4wIDExQjAgcGIwIGdOMCBJTDAgV04wIG1uMCBnTjAgTHowIFdOMCBnTDAgakIwIE9uMCAxMUIwIGJiMCBnTjAgVFgwIDExQjAgNXowIGpCMCBXTDAgMTFCMCAyTDAgakIwIDExejAgMWlwMCAxOVgwIDFjTjAgMWNMMCAxN2QwIDFpbjAgMTRwMCAxbGIwIDExQjAgMW5YMCAxMUIwIDFxTDAgV04wIDFxTDAgV04wIDFxTDAgV04wIDFxTDAgMTFCMCAxblgwIDExQjAgMW5YMCAxMUIwIDFxTDAgV04wIDFxTDAgV04wIDFuWDAgMTRwMCAxaW4wIDE3ZDAgMWZ6MCAxYTEwIDE5WDAgMWZCMCAxN2IwIGdOMCAyTDAgV04wIDE0bjAgZ04wIDV6MCBXTjAgV0wwIGpCMCA4bjAgMTFCMCBSYjAgZ04wIGRYMCAxMUIwIEx6MCBqQjAgZ0wwIDExQjAgSUwwIGpCMCBtbjAgV04wIEZYMCBnTjAgclgwIFdOMCBBbjAgakIwIHVMMCAxMUIwIHVMMCBnTjAgQW4wIDExQjAgclgwIGdOMCBEYjAgMTFCMCBtbjAgakIwIEZYMCAxMUIwIGp6MCBnTjAgT24wIFdOMCBkWDAgakIwIFJiMCBXTjAgYmIwIGpCMCBUWDAgMTFCMCA1ejAgZ04wIDExejAgMTFCMCAxblgwIDExQjAgMXFMMCBXTjAgMXFMMCBXTjAgMXFMMCBXTjAgMXFMMCAxMUIwIDFuWDAgMTFCMCAxblgwIDExQjAgMXFMMCBXTjAgMXFMMCBXTjAgMXFMMCAxMUIwIDFuWDAgMTFCMCAxblgwIDExQjAgMW5YMCAxMUIwIDFxTDAgV04wIDFxTDAgV04wIDFxTDAgV04wIDFxTDAgMTFCMCAxblgwIDExQjAgMW5YMCAxMUIwIDFxTDAgV04wIDFxTDAgV04wIDFxTDAgMTFCMCAxblgwIDExQjAgMW5YMCAxMUIwIDFuWDAgMTFCMCAxcUwwIFdOMCAxcUwwIFdOMCAxcUwwIDExQjAgMW5YMCAxMUIwIDFuWDAgMTFCMCAxcUwwIFdOMCAxcUwwIFdOMCAxcUwwIDExQjAgMW5YMCAxMUIwIDFuWDAgMTFCMCAxblgwIDExQjAgMXFMMCBXTjAgMXFMMCBXTjAgMXFMMCAxMUIwIDFuWDAgMTFCMCAxblgwIDExQjAgMXFMMCBXTjAgMXFMMCBXTjAgMXFMMCBXTjAgMXFMMCAxMUIwIDFuWDAgMTFCMCAxblgwIDExQjAgMXFMMCBXTjAgMXFMMCBXTjAgMXFMMCAxMUIwIDFuWDAgMTFCMCAxblgwIDExQjAgMW5YMCAxMUIwIDFxTDAgV04wIDFxTDAgV04wIDFxTDAgMTFCMCAxblgwIDExQjAgMW5YMCAxMUIwIDFxTDAgV04wIDFxTDAgV04wIDFxTDAgMTFCMCAxblgwIDExQjAgMW5YMCAxMUIwIDFuWDAgMTFCMCAxcUwwIFdOMCAxcUwwIFdOMCAxcUwwIDExQjAgMW5YMCAxMUIwIDFuWDAgMTFCMCAxcUwwIFdOMCAxcUwwIFdOMCAxcUwwIFdOMCAxcUwwIDExQjAgMW5YMCAxMUIwIDFuWDAgMTFCMCAxcUwwIFdOMCAxcUwwIFdOMCAxcUwwIDExQjAgMW5YMCAxMUIwIDFuWDAgMTFCMCAxblgwIDExQjAgMXFMMCBXTjAgMXFMMCBXTjAgMXFMMCAxMUIwIDFuWDAgMTFCMCAxblgwIDExQjAgMXFMMCBXTjAgMXFMMCBXTjAgMXFMMCAxMUIwIDFuWDAgMTFCMCAxblgwIDExQjAgMW5YMCAxMUIwIDFxTDAgV04wIDFxTDAgV04wIDFxTDAgMTFCMCAxblgwIDExQjAgMW5YMCAxMUIwIDFxTDAgV04wIDFxTDAgV04wIDFxTDAgV04wIDFxTDAgMTFCMCAxblgwIDExQjAgMW5YMCAxMUIwIDFxTDAgV04wIDFxTDAgV04wIDFxTDAgMTFCMCAxblgwIDExQjAgMW5YMCAxMUIwIDFuWDAgMTFCMCAxcUwwIFdOMCAxcUwwIFdOMCAxcUwwIDExQjAgMW5YMCAxMUIwIDFuWDAgMTFCMCAxblgwIDExQjAgMXFMMCBXTjAgMXFMMCBXTjAgMXFMMCAxMUIwIDFuWDAgMTFCMCAxblgwIDExQjAgMW5YMCAxMUIwIDFxTDAgV04wIDFxTDAgV04wIDFxTDAgMTFCMCAxblgwIDExQjAgMW5YMCAxMUIwIDFxTDAgV04wIDFxTDAgV04wIDFxTDAgMTFCMCAxblgwIDExQjAgMW5YMCAxMUIwIDFuWDAgMTFCMCAxcUwwIFdOMCAxcUwwIFdOMCAxcUwwIDExQjAgMW5YMCAxMUIwIDFuWDAgMTFCMCAxcUwwIFdOMCAxcUwwIFdOMCAxcUwwIFdOMCAxcUwwIDExQjAgMW5YMCAxMUIwIDFuWDAgMTFCMCAxcUwwIFdOMCAxcUwwIFdOMCAxcUwwIDExQjAgMW5YMCAxMUIwIDFuWDAgMTFCMCAxblgwIDExQjAgMXFMMCBXTjAgMXFMMCBXTjAgMXFMMCAxMUIwIDFuWDAgMTFCMCAxblgwIDExQjAgMXFMMCBXTjAgMXFMMCBXTjAgMXFMMCAxMUIwIDFuWDAgMTFCMCAxblgwIDExQjAgMW5YMCAxMUIwIDFxTDAgV04wIDFxTDAgV04wIDFxTDAgMTFCMCAxblgwIDExQjAgMW5YMCAxMUIwIDFxTDAgV04wIDFxTDAgV04wIDFxTDAgV04wIDFxTDAgMTFCMCAxblgwIDExQjAgMW5YMCAxMUIwIDFxTDAgV04wIDFxTDAgV04wIDFxTDAgMTFCMCAxblgwIDExQjAgMW5YMCAxMUIwIDFuWDAgMTFCMCAxcUwwIFdOMCAxcUwwIFdOMCAxcUwwIDExQjAgMW5YMCAxMUIwIDFuWDAgMTFCMCAxcUwwIFdOMCAxcUwwIFdOMCAxcUwwIDExQjAgMW5YMCAxMUIwIDFuWDAgMTFCMCAxblgwIDExQjAgMXFMMCBXTjAgMXFMMCBXTjAgMXFMMCAxMUIwIDFuWDAgMTFCMCAxblgwIDExQjAgMXFMMCBXTjAgMXFMMCBXTjAgMXFMMCBXTjAgMXFMMCAxMUIwIDFuWDAgMTFCMCAxblgwIDExQjAgMXFMMCBXTjAgMXFMMCBXTjAgMXFMMCAxMUIwIDFuWDAgMTFCMCAxblgwIDExQjAgMW5YMCAxMUIwIDFxTDAgV04wIDFxTDAgV04wIDFxTDAgMTFCMCAxblgwIDExQjAgMW5YMCAxMUIwIDFxTDAgV04wIDFxTDAgV04wIDFxTDAgV04wIDFxTDAgMTFCMCAxblgwIDExQjAgMW5YMCAxMUIwIDFuWDAgMTFCMCAxcUwwIFdOMCAxcUwwIFdOMCAxcUwwIDExQjAgMW5YMCAxMUIwIDFuWDAgMTFCMCAxcUwwIFdOMCAxcUwwIFdOMCAxcUwwIDExQjAgMW5YMCAxMUIwIDFuWDAgMTFCMCAxblgwIDExQjAgMXFMMCBXTjAgMXFMMCBXTjAgMXFMMCAxMUIwIDFuWDAgMTFCMCAxblgwIDExQjAgMXFMMCBXTjAgMXFMMCBXTjAgMXFMMCBXTjAgMXFMMCAxMUIwIDFuWDAgMTFCMCAxblgwIDExQjAgMXFMMCBXTjAgMXFMMCBXTjAgMXFMMCAxMUIwIDFuWDAgMTFCMCAxblgwIDExQjAgMW5YMCAxMUIwIDFxTDAgV04wIDFxTDAgV04wIDFxTDAgMTFCMCAxblgwIDExQjAgMW5YMCAxMUIwIDFxTDAgV04wIDFxTDAgV04wIDFxTDAgMTFCMCAxblgwIDExQjAgMW5YMCAxMUIwIDFuWDAgMTFCMCAxcUwwIFdOMCAxcUwwIFdOMCAxcUwwIDExQjAgMW5YMCAxMUIwIDFuWDAgMTFCMCAxcUwwIFdOMCAxcUwwIFdOMCAxcUwwIFdOMCAxcUwwIDExQjAgMW5YMCAxMUIwIDFuWDAgMTFCMCAxcUwwIFdOMCAxcUwwIFdOMCAxcUwwIDExQjAgMW5YMCAxMUIwIDFuWDAgMTFCMCAxblgwIDExQjAgMXFMMCBXTjAgMXFMMCBXTjAgMXFMMCAxMUIwIDFuWDAgMTFCMCAxblgwIDExQjAgMXFMMCBXTjAgMXFMMCBXTjAgMXFMMCAxMUIwIDFuWDAgMTFCMCAxblgwIDExQjAgMW5YMCAxMUIwIDFxTDAgV04wIDFxTDAgV04wIDFxTDAgMTFCMCAxblgwIDExQjAgMW5YMCAxMUIwIDFxTDAgV04wIDFxTDAgV04wIDFxTDAgV04wIDFxTDAgMTFCMCAxblgwIDExQjAgMW5YMCAxMUIwIDFxTDAgV04wIDFxTDAgV04wIDFxTDAgMTFCMCAxblgwIDExQjAgMW5YMCAxMUIwIDFuWDAgMTFCMCAxcUwwIFdOMCAxcUwwIFdOMCAxcUwwIDExQjAgMW5YMCAxMUIwIDFuWDAgMTFCMCAxcUwwIFdOMCAxcUwwIFdOMCAxcUwwIDExQjAgMW5YMCAxMUIwIDFuWDAgMTFCMCAxblgwIDExQjAgMXFMMCBXTjAgMXFMMCBXTjAgMXFMMCAxMUIwIDFuWDAgMTFCMCAxblgwIDExQjAgMXFMMCBXTjAgMXFMMCBXTjAgMXFMMCBXTjAgMXFMMCAxMUIwIDFuWDAgMTFCMCAxblgwIDExQjAgMXFMMCBXTjAgMXFMMCBXTjAgMXFMMCAxMUIwIDFuWDAgMTFCMCAxblgwIDExQjAgMW5YMCAxMUIwIDFxTDAgV04wIDFxTDAgV04wIDFxTDAgMTFCMCAxblgwIDExQjAgMW5YMCAxMUIwIDFxTDAgV04wIDFxTDAgV04wIDFxTDAgMTFCMCAxblgwIDExQjAgMW5YMCAxMUIwIDFuWDAgMTFCMCAxcUwwIFdOMCAxcUwwIFdOMCAxcUwwIDExQjAgMW5YMCAxMUIwIDFuWDAgMTFCMCAxcUwwIFdOMCAxcUwwIFdOMCAxcUwwIFdOMCAxcUwwIDExQjAgMW5YMCAxMUIwIDFuWDAgMTFCMCAxcUwwIFdOMCAxcUwwIFdOMCAxcUwwIDExQjAgMW5YMCAxMUIwIDFuWDAgMTFCMCAxblgwIDExQjAgMXFMMCBXTjAgMXFMMCBXTjAgMXFMMCAxMUIwIDFuWDAgMTFCMCAxblgwIDExQjAgMXFMMCBXTjAgMXFMMCBXTjAgMXFMMCAxMUIwIDFuWDAgMTFCMCAxblgwIDExQjAgMW5YMCAxMUIwIDFxTDAgV04wIDFxTDAgV04wIDFxTDAgMTFCMCAxblgwIDExQjAgMW5YMCAxMUIwIDFxTDAgV04wIDFxTDAgV04wIDFxTDAgV04wIDFxTDAgMTFCMCAxblgwIDExQjAgMW5YMCAxMUIwIDFxTDAgV04wIDFxTDAgV04wIDFxTDAgMTFCMCAxblgwIDExQjAgMW5YMCAxMUIwIDFuWDAgMTFCMCAxcUwwIFdOMCAxcUwwIFdOMCAxcUwwIDExQjAgMW5YMCAxMUIwIDFuWDAgMTFCMCAxcUwwIFdOMCAxcUwwIFdOMCAxcUwwIDExQjAgMW5YMCAxMUIwIDFuWDAgMTFCMCAxblgwIDExQjAgMXFMMCBXTjAgMXFMMCBXTjAgMXFMMCAxMUIwIDFuWDAgMTFCMCAxblgwIDExQjAgMXFMMCBXTjAgMXFMMCBXTjAgMXFMMCBXTjAgMXFMMCAxMUIwIDFuWDAgMTFCMCAxblgwIDExQjAgMXFMMCBXTjAgMXFMMCBXTjAgMXFMMCAxMUIwIDFuWDAgMTFCMCAxblgwIDExQjAgMW5YMHwxOGU1XCIsXG4gIFwiQXNpYS9IZWJyb258TE1UIEVFVCBFRVNUIElTVCBJRFR8LTJrLm4gLTIwIC0zMCAtMjAgLTMwfDAxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMXwtMk1CQ2subiAxQXplay5uIE1NMCBpTTAgNEpBMCAxMG8wIDFwQTAgMTBNMCAxcEEwIDE2bzAgMWpBMCAxNm8wIDFqQTAgcEJhMCBWejAgMW9OMCAxMWIwIDFvTzAgMTBOMCAxcHowIDEwTjAgMXBiMCAxME4wIDFwYjAgMTBOMCAxcGIwIDEwTjAgMXB6MCAxME4wIDFwYjAgMTBOMCAxcGIwIDExZDAgMW9MMCBkVzAgaGZCMCBEYjAgMWZCMCBSYjAgYlhCMCBnTTAgOFEwMCBJTTAgMXdvMCBUWDAgMUhCMCBJTDAgMXMxMCAxMG4wIDFvMTAgV0wwIDF6ZDAgT24wIDFsZDAgMTF6MCAxbzEwIDE0bjAgMW8xMCAxNG4wIDFuZDAgMTJuMCAxbmQwIFh6MCAxcTEwIDEybjAgTTEwIEMwMCAxN2MwIDFpbzAgMTdjMCAxaW8wIDE3YzAgMW8wMCAxY0wwIDFmQjAgMWNMMCAxY04wIDFjTDAgMWNOMCAxY0wwIDFjTjAgMWNMMCAxY04wIDE3YzAgMWlvMCAxOE4wIDFiejAgMTl6MCAxZ3AwIDE2MTAgMWlMMCAxMkwwIDFtTjAgMTRvMCAxbGMwIFRiMCAxeGQxIE1LWCBiQjAgY24wIDFjTjAgMWEwMCAxZkEwIDFjTDAgMWNOMCAxblgwIDEyMTAgMW5BMCAxMjEwIDFxTDAgV04wIDFxTDAgV04wIDFxTDAgMTFjMCAxb24wIDExQjAgMW8wMCAxMUEwIDFxbzAgWEEwIDFxcDAgMWNOMCAxY0wwIDFhMTAgMWZ6MCAxN2QwIDFpbjAgMTFCMCAxblgwIDExQjAgMXFMMCBXTjAgMXFMMCBXTjAgMXFMMCAxMUIwIDFuWDAgMTFCMCAxblgwIDExQjAgMXFMMCBXTjAgMXFMMCBXTjAgMXFMMCBXTjAgMXFMMCAxMUIwIDFsYjAgMTRwMCAxaW4wIDE3ZDAgMWNMMCAxY04wIDE5WDAgMWZCMCAxNG4wIGpCMCAyTDAgMTFCMCBXTDAgZ04wIDhuMCAxMUIwIFRYMCBnTjAgYmIwIDExQjAgT24wIGpCMCBkWDAgMTFCMCBMejAgZ04wIG1uMCBXTjAgSUwwIGdOMCBwYjAgV04wIERiMCBqQjAgclgwIDExQjAgeHowIGdOMCB4ejAgMTFCMCByWDAgakIwIEFuMCAxMUIwIHBiMCBnTjAgSUwwIFdOMCBtbjAgZ04wIEx6MCBXTjAgZ0wwIGpCMCBPbjAgMTFCMCBiYjAgZ04wIFRYMCAxMUIwIDV6MCBqQjAgV0wwIDExQjAgMkwwIGpCMCAxMXowIDFpcDAgMTlYMCAxY04wIDFjTDAgMTdkMCAxaW4wIDE0cDAgMWxiMCAxMUIwIDFuWDAgMTFCMCAxcUwwIFdOMCAxcUwwIFdOMCAxcUwwIFdOMCAxcUwwIDExQjAgMW5YMCAxMUIwIDFuWDAgMTFCMCAxcUwwIFdOMCAxcUwwIFdOMCAxblgwIDE0cDAgMWluMCAxN2QwIDFmejAgMWExMCAxOVgwIDFmQjAgMTdiMCBnTjAgMkwwIFdOMCAxNG4wIGdOMCA1ejAgV04wIFdMMCBqQjAgOG4wIDExQjAgUmIwIGdOMCBkWDAgMTFCMCBMejAgakIwIGdMMCAxMUIwIElMMCBqQjAgbW4wIFdOMCBGWDAgZ04wIHJYMCBXTjAgQW4wIGpCMCB1TDAgMTFCMCB1TDAgZ04wIEFuMCAxMUIwIHJYMCBnTjAgRGIwIDExQjAgbW4wIGpCMCBGWDAgMTFCMCBqejAgZ04wIE9uMCBXTjAgZFgwIGpCMCBSYjAgV04wIGJiMCBqQjAgVFgwIDExQjAgNXowIGdOMCAxMXowIDExQjAgMW5YMCAxMUIwIDFxTDAgV04wIDFxTDAgV04wIDFxTDAgV04wIDFxTDAgMTFCMCAxblgwIDExQjAgMW5YMCAxMUIwIDFxTDAgV04wIDFxTDAgV04wIDFxTDAgMTFCMCAxblgwIDExQjAgMW5YMCAxMUIwIDFuWDAgMTFCMCAxcUwwIFdOMCAxcUwwIFdOMCAxcUwwIFdOMCAxcUwwIDExQjAgMW5YMCAxMUIwIDFuWDAgMTFCMCAxcUwwIFdOMCAxcUwwIFdOMCAxcUwwIDExQjAgMW5YMCAxMUIwIDFuWDAgMTFCMCAxblgwIDExQjAgMXFMMCBXTjAgMXFMMCBXTjAgMXFMMCAxMUIwIDFuWDAgMTFCMCAxblgwIDExQjAgMXFMMCBXTjAgMXFMMCBXTjAgMXFMMCAxMUIwIDFuWDAgMTFCMCAxblgwIDExQjAgMW5YMCAxMUIwIDFxTDAgV04wIDFxTDAgV04wIDFxTDAgMTFCMCAxblgwIDExQjAgMW5YMCAxMUIwIDFxTDAgV04wIDFxTDAgV04wIDFxTDAgV04wIDFxTDAgMTFCMCAxblgwIDExQjAgMW5YMCAxMUIwIDFxTDAgV04wIDFxTDAgV04wIDFxTDAgMTFCMCAxblgwIDExQjAgMW5YMCAxMUIwIDFuWDAgMTFCMCAxcUwwIFdOMCAxcUwwIFdOMCAxcUwwIDExQjAgMW5YMCAxMUIwIDFuWDAgMTFCMCAxcUwwIFdOMCAxcUwwIFdOMCAxcUwwIDExQjAgMW5YMCAxMUIwIDFuWDAgMTFCMCAxblgwIDExQjAgMXFMMCBXTjAgMXFMMCBXTjAgMXFMMCAxMUIwIDFuWDAgMTFCMCAxblgwIDExQjAgMXFMMCBXTjAgMXFMMCBXTjAgMXFMMCBXTjAgMXFMMCAxMUIwIDFuWDAgMTFCMCAxblgwIDExQjAgMXFMMCBXTjAgMXFMMCBXTjAgMXFMMCAxMUIwIDFuWDAgMTFCMCAxblgwIDExQjAgMW5YMCAxMUIwIDFxTDAgV04wIDFxTDAgV04wIDFxTDAgMTFCMCAxblgwIDExQjAgMW5YMCAxMUIwIDFxTDAgV04wIDFxTDAgV04wIDFxTDAgMTFCMCAxblgwIDExQjAgMW5YMCAxMUIwIDFuWDAgMTFCMCAxcUwwIFdOMCAxcUwwIFdOMCAxcUwwIDExQjAgMW5YMCAxMUIwIDFuWDAgMTFCMCAxcUwwIFdOMCAxcUwwIFdOMCAxcUwwIFdOMCAxcUwwIDExQjAgMW5YMCAxMUIwIDFuWDAgMTFCMCAxcUwwIFdOMCAxcUwwIFdOMCAxcUwwIDExQjAgMW5YMCAxMUIwIDFuWDAgMTFCMCAxblgwIDExQjAgMXFMMCBXTjAgMXFMMCBXTjAgMXFMMCAxMUIwIDFuWDAgMTFCMCAxblgwIDExQjAgMW5YMCAxMUIwIDFxTDAgV04wIDFxTDAgV04wIDFxTDAgMTFCMCAxblgwIDExQjAgMW5YMCAxMUIwIDFuWDAgMTFCMCAxcUwwIFdOMCAxcUwwIFdOMCAxcUwwIDExQjAgMW5YMCAxMUIwIDFuWDAgMTFCMCAxcUwwIFdOMCAxcUwwIFdOMCAxcUwwIDExQjAgMW5YMCAxMUIwIDFuWDAgMTFCMCAxblgwIDExQjAgMXFMMCBXTjAgMXFMMCBXTjAgMXFMMCAxMUIwIDFuWDAgMTFCMCAxblgwIDExQjAgMXFMMCBXTjAgMXFMMCBXTjAgMXFMMCBXTjAgMXFMMCAxMUIwIDFuWDAgMTFCMCAxblgwIDExQjAgMXFMMCBXTjAgMXFMMCBXTjAgMXFMMCAxMUIwIDFuWDAgMTFCMCAxblgwIDExQjAgMW5YMCAxMUIwIDFxTDAgV04wIDFxTDAgV04wIDFxTDAgMTFCMCAxblgwIDExQjAgMW5YMCAxMUIwIDFxTDAgV04wIDFxTDAgV04wIDFxTDAgMTFCMCAxblgwIDExQjAgMW5YMCAxMUIwIDFuWDAgMTFCMCAxcUwwIFdOMCAxcUwwIFdOMCAxcUwwIDExQjAgMW5YMCAxMUIwIDFuWDAgMTFCMCAxcUwwIFdOMCAxcUwwIFdOMCAxcUwwIFdOMCAxcUwwIDExQjAgMW5YMCAxMUIwIDFuWDAgMTFCMCAxcUwwIFdOMCAxcUwwIFdOMCAxcUwwIDExQjAgMW5YMCAxMUIwIDFuWDAgMTFCMCAxblgwIDExQjAgMXFMMCBXTjAgMXFMMCBXTjAgMXFMMCAxMUIwIDFuWDAgMTFCMCAxblgwIDExQjAgMXFMMCBXTjAgMXFMMCBXTjAgMXFMMCAxMUIwIDFuWDAgMTFCMCAxblgwIDExQjAgMW5YMCAxMUIwIDFxTDAgV04wIDFxTDAgV04wIDFxTDAgMTFCMCAxblgwIDExQjAgMW5YMCAxMUIwIDFxTDAgV04wIDFxTDAgV04wIDFxTDAgV04wIDFxTDAgMTFCMCAxblgwIDExQjAgMW5YMCAxMUIwIDFxTDAgV04wIDFxTDAgV04wIDFxTDAgMTFCMCAxblgwIDExQjAgMW5YMCAxMUIwIDFuWDAgMTFCMCAxcUwwIFdOMCAxcUwwIFdOMCAxcUwwIDExQjAgMW5YMCAxMUIwIDFuWDAgMTFCMCAxcUwwIFdOMCAxcUwwIFdOMCAxcUwwIFdOMCAxcUwwIDExQjAgMW5YMCAxMUIwIDFuWDAgMTFCMCAxblgwIDExQjAgMXFMMCBXTjAgMXFMMCBXTjAgMXFMMCAxMUIwIDFuWDAgMTFCMCAxblgwIDExQjAgMXFMMCBXTjAgMXFMMCBXTjAgMXFMMCAxMUIwIDFuWDAgMTFCMCAxblgwIDExQjAgMW5YMCAxMUIwIDFxTDAgV04wIDFxTDAgV04wIDFxTDAgMTFCMCAxblgwIDExQjAgMW5YMCAxMUIwIDFxTDAgV04wIDFxTDAgV04wIDFxTDAgV04wIDFxTDAgMTFCMCAxblgwIDExQjAgMW5YMCAxMUIwIDFxTDAgV04wIDFxTDAgV04wIDFxTDAgMTFCMCAxblgwIDExQjAgMW5YMCAxMUIwIDFuWDAgMTFCMCAxcUwwIFdOMCAxcUwwIFdOMCAxcUwwIDExQjAgMW5YMCAxMUIwIDFuWDAgMTFCMCAxcUwwIFdOMCAxcUwwIFdOMCAxcUwwIDExQjAgMW5YMCAxMUIwIDFuWDAgMTFCMCAxblgwIDExQjAgMXFMMCBXTjAgMXFMMCBXTjAgMXFMMCAxMUIwIDFuWDAgMTFCMCAxblgwIDExQjAgMXFMMCBXTjAgMXFMMCBXTjAgMXFMMCBXTjAgMXFMMCAxMUIwIDFuWDAgMTFCMCAxblgwIDExQjAgMXFMMCBXTjAgMXFMMCBXTjAgMXFMMCAxMUIwIDFuWDAgMTFCMCAxblgwIDExQjAgMW5YMCAxMUIwIDFxTDAgV04wIDFxTDAgV04wIDFxTDAgMTFCMCAxblgwIDExQjAgMW5YMCAxMUIwIDFxTDAgV04wIDFxTDAgV04wIDFxTDAgMTFCMCAxblgwIDExQjAgMW5YMCAxMUIwIDFuWDAgMTFCMCAxcUwwIFdOMCAxcUwwIFdOMCAxcUwwIDExQjAgMW5YMCAxMUIwIDFuWDAgMTFCMCAxcUwwIFdOMCAxcUwwIFdOMCAxcUwwIFdOMCAxcUwwIDExQjAgMW5YMCAxMUIwIDFuWDAgMTFCMCAxcUwwIFdOMCAxcUwwIFdOMCAxcUwwIDExQjAgMW5YMCAxMUIwIDFuWDAgMTFCMCAxblgwIDExQjAgMXFMMCBXTjAgMXFMMCBXTjAgMXFMMCAxMUIwIDFuWDAgMTFCMCAxblgwIDExQjAgMXFMMCBXTjAgMXFMMCBXTjAgMXFMMCAxMUIwIDFuWDAgMTFCMCAxblgwIDExQjAgMW5YMCAxMUIwIDFxTDAgV04wIDFxTDAgV04wIDFxTDAgMTFCMCAxblgwIDExQjAgMW5YMCAxMUIwIDFxTDAgV04wIDFxTDAgV04wIDFxTDAgV04wIDFxTDAgMTFCMCAxblgwIDExQjAgMW5YMCAxMUIwIDFxTDAgV04wIDFxTDAgV04wIDFxTDAgMTFCMCAxblgwIDExQjAgMW5YMCAxMUIwIDFuWDAgMTFCMCAxcUwwIFdOMCAxcUwwIFdOMCAxcUwwIDExQjAgMW5YMCAxMUIwIDFuWDAgMTFCMCAxcUwwIFdOMCAxcUwwIFdOMCAxcUwwIDExQjAgMW5YMCAxMUIwIDFuWDAgMTFCMCAxblgwIDExQjAgMXFMMCBXTjAgMXFMMCBXTjAgMXFMMCAxMUIwIDFuWDAgMTFCMCAxblgwIDExQjAgMXFMMCBXTjAgMXFMMCBXTjAgMXFMMCBXTjAgMXFMMCAxMUIwIDFuWDAgMTFCMCAxblgwIDExQjAgMXFMMCBXTjAgMXFMMCBXTjAgMXFMMCAxMUIwIDFuWDAgMTFCMCAxblgwIDExQjAgMW5YMCAxMUIwIDFxTDAgV04wIDFxTDAgV04wIDFxTDAgMTFCMCAxblgwIDExQjAgMW5YMCAxMUIwIDFxTDAgV04wIDFxTDAgV04wIDFxTDAgMTFCMCAxblgwIDExQjAgMW5YMCAxMUIwIDFuWDAgMTFCMCAxcUwwIFdOMCAxcUwwIFdOMCAxcUwwIDExQjAgMW5YMCAxMUIwIDFuWDAgMTFCMCAxcUwwIFdOMCAxcUwwIFdOMCAxcUwwIFdOMCAxcUwwIDExQjAgMW5YMCAxMUIwIDFuWDAgMTFCMCAxcUwwIFdOMCAxcUwwIFdOMCAxcUwwIDExQjAgMW5YMCAxMUIwIDFuWDAgMTFCMCAxblgwIDExQjAgMXFMMCBXTjAgMXFMMCBXTjAgMXFMMCAxMUIwIDFuWDAgMTFCMCAxblgwIDExQjAgMXFMMCBXTjAgMXFMMCBXTjAgMXFMMCAxMUIwIDFuWDAgMTFCMCAxblgwIDExQjAgMW5YMCAxMUIwIDFxTDAgV04wIDFxTDAgV04wIDFxTDAgMTFCMCAxblgwIDExQjAgMW5YMCAxMUIwIDFxTDAgV04wIDFxTDAgV04wIDFxTDAgV04wIDFxTDAgMTFCMCAxblgwIDExQjAgMW5YMCAxMUIwIDFxTDAgV04wIDFxTDAgV04wIDFxTDAgMTFCMCAxblgwIDExQjAgMW5YMCAxMUIwIDFuWDB8MjVlNFwiLFxuICBcIkFzaWEvSG9fQ2hpX01pbmh8TE1UIFBMTVQgKzA3ICswOCArMDl8LTc2LnUgLTc2LnUgLTcwIC04MCAtOTB8MDEyMzQyMzIzMnwtMnlDNzYudSBiSzAwIDFoN2I2LnUgNWx6MCAxOG8wIDNPcTAgazVjMCBhVlgwIEJBTTB8OTBlNVwiLFxuICBcIkFzaWEvSG9uZ19Lb25nfExNVCBIS1QgSEtTVCBIS1dUIEpTVHwtN0EuRyAtODAgLTkwIC04dSAtOTB8MDEyMzQxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMXwtMkNGSDAgMXRhTzAgSGMwIHhVdSA5dEJ1IDExejAgMXREdSBSYzAgMXdvMCAxMUEwIDFjTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFvMDAgMTRvMCAxbzAwIDExQTAgMW5YMCBVMTAgMXR6MCBVMTAgMXduMCBSZDAgMXduMCBVMTAgMXR6MCBVMTAgMXR6MCBVMTAgMXR6MCBVMTAgMXduMCBSZDAgMXduMCBSZDAgMXduMCBVMTAgMXR6MCBVMTAgMXR6MCAxN2QwIDFjTDAgMWNOMCAxY0wwIDFjTjAgMWZ6MCAxY04wIDFjTDAgMWNOMCAxY0wwIDFjTjAgMWNMMCAxY04wIDFjTDAgMWNOMCAxZnowIDFjTjAgMWNMMCBzMTAgMVZ6MCAxY04wIDFjTDAgMWNOMCAxY0wwIDZmZDAgMTRuMHw3M2U1XCIsXG4gIFwiQXNpYS9Ib3ZkfExNVCArMDYgKzA3ICswOHwtNjYuQSAtNjAgLTcwIC04MHwwMTIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzJ8LTJBUEc2LkEgMlVrbzYuQSBjS24wIDFkYjAgMWRkMCAxY0wwIDFjTjAgMWNMMCAxY04wIDFjTDAgMWNOMCAxY0wwIDFjTjAgMWNMMCAxY04wIDFjTDAgMWNOMCAxZnowIDFjTjAgMWNMMCAxY04wIDFjTDAgMWNOMCAxY0wwIDFjTjAgMWNMMCAxY04wIDFjTDAgMWZCMCAxY0wwIDFjTjAgMWNMMCAxY04wIDFjTDAgNmhEMCAxMXowIDFjTjAgMWNMMCAxY04wIDFjTDAgMWNOMCAxY0wwIDFjTjAgMWNMMCAxY04wIDFmejAga0VwMCAxY0owIDFjUDAgMWNKMHw4MWUzXCIsXG4gIFwiQXNpYS9Jcmt1dHNrfExNVCBJTVQgKzA3ICswOCArMDl8LTZWLjUgLTZWLjUgLTcwIC04MCAtOTB8MDEyMzQzNDM0MzQzNDM0MzQzNDM0MzQzMjM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzfC0zRDhTVi41IDFCeGMwIHBqWFYuNSAyM0NMMCAxZGIwIDFjTjAgMWRiMCAxY04wIDFkYjAgMWRkMCAxY08wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxZkEwIDJwQjAgSU0wIHJYMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFmQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgOEh6MHw2MGU0XCIsXG4gIFwiRXVyb3BlL0lzdGFuYnVsfExNVCBJTVQgRUVUIEVFU1QgKzAzICswNHwtMVQuUSAtMVUuVSAtMjAgLTMwIC0zMCAtNDB8MDEyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzNDU0MjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzR8LTNEOE5ULlEgMWVQWFcuVSBkenpVLlUgMTFiMCA4dEIwIDFvbjAgMTQxMCAxZGIwIDE5QjAgMWluMCAzUmQwIFVuMCAxb04wIDExYjAgelNOMCBDTDAgbXAwIDFWejAgMWdOMCA4eW4wIDF5cDAgTUwwIDFrcDAgMTdiMCAxaXAwIDE3YjAgMWZCMCAxOVgwIDFpcDAgMTlYMCAxaXAwIDE3YjAgcWRCMCAzOEwwIDFqZDAgVHowIGw2TzAgMTFBMCBXTjAgMXFMMCBUQjAgMXRYMCBVMTAgMXR6MCAxMUIwIDFpbjAgMTdkMCB6OTAgY25lMCBwYjAgMkNwMCAxODAwIDE0bzAgMWRjMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWZBMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxYTAwIDFmQTAgMWNNMCAxY00wIDFmQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCBXTzAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBYYzAgMXFvMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTIwMCAxbkEwIDExQTAgMXRBMCBVMDAgMTV3MHwxM2U2XCIsXG4gIFwiQXNpYS9KYWthcnRhfExNVCBCTVQgKzA3MjAgKzA3MzAgKzA5ICswOCBXSUJ8LTc3LmMgLTc3LmMgLTdrIC03dSAtOTAgLTgwIC03MHwwMTIzNDM1MzZ8LTQ5akg3LmMgMmhpTEwuYyBsdU0wIG1Qek8gOHZXdSA2a3B1IDRQWHUgeGhjdXwzMWU2XCIsXG4gIFwiQXNpYS9KYXlhcHVyYXxMTVQgKzA5ICswOTMwIFdJVHwtOW0uTSAtOTAgLTl1IC05MHwwMTIzfC0xdXU5bS5NIHNNTW0uTSBMNG51fDI2ZTRcIixcbiAgXCJBc2lhL0plcnVzYWxlbXxMTVQgSk1UIElTVCBJRFQgSUREVHwtMmsuUyAtMmsuRSAtMjAgLTMwIC00MHwwMTIzMjMyMzIzMjMyMzI0MzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzJ8LTNEOE9rLlMgMXd2QTAuZSBTeU9rLkUgTU0wIGlNMCA0SkEwIDEwbzAgMXBBMCAxME0wIDFwQTAgMTZvMCAxakEwIDE2bzAgMWpBMCAzTEEwIEVvMCBvbzAgMWNvMCAxZEEwIDE2bzAgMTBNMCAxamMwIDF0QTAgMTRvMCAxY00wIDFhMDAgMTFBMCAxTmMwIEFvMCAxTmMwIEFvMCAxS28wIExBMCAxbzAwIFdNMCBFUUswIERiMCAxZkIwIFJiMCBiWEIwIGdNMCA4UTAwIElNMCAxd28wIFRYMCAxSEIwIElMMCAxczEwIDEwbjAgMW8xMCBXTDAgMXpkMCBPbjAgMWxkMCAxMXowIDFvMTAgMTRuMCAxbzEwIDE0bjAgMW5kMCAxMm4wIDFuZDAgWHowIDFxMTAgMTJuMCAxaEIwIDFkWDAgMWVwMCAxYUwwIDFlTjAgMTdYMCAxbmYwIDExejAgMXRCMCAxOVcwIDFlMTAgMTdiMCAxZXAwIDFnTDAgMThOMCAxZnowIDFlTjAgMTdiMCAxZ3EwIDFnbjAgMTlkMCAxZHowIDFjMTAgMTdYMCAxaEIwIDFnbjAgMTlkMCAxZHowIDFjMTAgMTdYMCAxa3AwIDFkejAgMWMxMCAxYUwwIDFlTjAgMW9MMCAxME4wIDFvTDAgMTBOMCAxb0wwIDEwTjAgMXJ6MCBXMTAgMXJ6MCBXMTAgMXJ6MCAxME4wIDFvTDAgMTBOMCAxb0wwIDEwTjAgMXJ6MCBXMTAgMXJ6MCBXMTAgMXJ6MCAxME4wIDFvTDAgMTBOMCAxb0wwIDEwTjAgMW9MMCAxME4wIDFyejAgVzEwIDFyejAgVzEwIDFyejAgMTBOMCAxb0wwIDEwTjAgMW9MMCAxME4wIDFyejAgVzEwIDFyejAgVzEwIDFyejAgVzEwIDFyejAgMTBOMCAxb0wwIDEwTjAgMW9MMCAxME4wIDFyejAgVzEwIDFyejAgVzEwIDFyejAgMTBOMCAxb0wwIDEwTjAgMW9MMCAxME4wIDFvTDAgMTBOMCAxcnowIFcxMCAxcnowIFcxMCAxcnowIDEwTjAgMW9MMCAxME4wIDFvTDAgMTBOMCAxcnowIFcxMCAxcnowIFcxMCAxcnowIDEwTjAgMW9MMCAxME4wIDFvTDAgMTBOMCAxb0wwIDEwTjAgMXJ6MCBXMTAgMXJ6MCBXMTAgMXJ6MCAxME4wIDFvTDAgMTBOMCAxb0wwIDEwTjAgMXJ6MCBXMTAgMXJ6MCBXMTAgMXJ6MCBXMTAgMXJ6MCAxME4wIDFvTDAgMTBOMCAxb0wwIDEwTjAgMXJ6MCBXMTAgMXJ6MCBXMTAgMXJ6MCAxME4wIDFvTDAgMTBOMCAxb0wwIDEwTjAgMW9MMCAxME4wIDFyejAgVzEwIDFyejAgVzEwIDFyejAgMTBOMCAxb0wwIDEwTjAgMW9MMCAxME4wIDFyejAgVzEwIDFyejAgVzEwIDFyejAgMTBOMCAxb0wwIDEwTjAgMW9MMCAxME4wIDFvTDAgMTBOMCAxcnowIFcxMCAxcnowIFcxMCAxcnowIDEwTjAgMW9MMCAxME4wIDFvTDAgMTBOMCAxcnowIFcxMCAxcnowIFcxMCAxcnowIFcxMCAxcnowIDEwTjAgMW9MMCAxME4wIDFvTDAgMTBOMCAxcnowIFcxMCAxcnowIFcxMCAxcnowIDEwTjAgMW9MMCAxME4wIDFvTDAgMTBOMCAxb0wwIDEwTjAgMXJ6MCBXMTAgMXJ6MCBXMTAgMXJ6MCBXMTAgMXJ6MCAxME4wIDFvTDAgMTBOMCAxb0wwIDEwTjAgMXJ6MCBXMTAgMXJ6MCBXMTAgMXJ6MCAxME4wIDFvTDAgMTBOMCAxb0wwIDEwTjAgMW9MMCAxME4wIDFyejAgVzEwIDFyejAgVzEwIDFyejAgMTBOMCAxb0wwIDEwTjAgMW9MMCAxME4wIDFyejAgVzEwIDFyejAgVzEwIDFyejAgMTBOMCAxb0wwIDEwTjAgMW9MMCAxME4wIDFvTDAgMTBOMCAxcnowIFcxMCAxcnowIFcxMCAxcnowIDEwTjAgMW9MMCAxME4wIDFvTDAgMTBOMCAxcnowIFcxMCAxcnowIFcxMCAxcnowIFcxMCAxcnowIDEwTjAgMW9MMCAxME4wIDFvTDAgMTBOMCAxcnowIFcxMCAxcnowIFcxMCAxcnowIDEwTjAgMW9MMCAxME4wIDFvTDAgMTBOMCAxb0wwIDEwTjAgMXJ6MCBXMTAgMXJ6MCBXMTAgMXJ6MCAxME4wIDFvTDAgMTBOMCAxb0wwIDEwTjAgMXJ6MCBXMTAgMXJ6MCBXMTAgMXJ6MCAxME4wIDFvTDAgMTBOMCAxb0wwIDEwTjAgMW9MMCAxME4wIDFyejAgVzEwIDFyejAgVzEwIDFyejAgMTBOMCAxb0wwIDEwTjAgMW9MMCAxME4wIDFyejAgVzEwIDFyejAgVzEwIDFyejAgVzEwIDFyejAgMTBOMCAxb0wwIDEwTjAgMW9MMCAxME4wIDFyejAgVzEwIDFyejAgVzEwIDFyejAgMTBOMCAxb0wwIDEwTjAgMW9MMCAxME4wIDFvTDAgMTBOMCAxcnowIFcxMCAxcnowIFcxMCAxcnowIDEwTjAgMW9MMCAxME4wIDFvTDAgMTBOMCAxcnowIFcxMCAxcnowIFcxMCAxcnowIDEwTjAgMW9MMCAxME4wIDFvTDAgMTBOMCAxb0wwIDEwTjAgMXJ6MCBXMTAgMXJ6MCBXMTAgMXJ6MCAxME4wIDFvTDAgMTBOMCAxb0wwIDEwTjAgMXJ6MCBXMTAgMXJ6MCBXMTAgMXJ6MCBXMTAgMXJ6MCAxME4wIDFvTDAgMTBOMCAxb0wwIDEwTjAgMXJ6MCBXMTAgMXJ6MCBXMTAgMXJ6MCAxME4wIDFvTDAgMTBOMCAxb0wwIDEwTjAgMW9MMCAxME4wIDFyejAgVzEwIDFyejAgVzEwIDFyejAgMTBOMCAxb0wwIDEwTjAgMW9MMCAxME4wIDFvTDAgMTBOMCAxcnowIFcxMCAxcnowIFcxMCAxcnowIDEwTjAgMW9MMCAxME4wIDFvTDAgMTBOMCAxb0wwIDEwTjAgMXJ6MCBXMTAgMXJ6MCBXMTAgMXJ6MCAxME4wIDFvTDAgMTBOMCAxb0wwIDEwTjAgMXJ6MCBXMTAgMXJ6MCBXMTAgMXJ6MCAxME4wIDFvTDAgMTBOMCAxb0wwIDEwTjAgMW9MMCAxME4wIDFyejAgVzEwIDFyejAgVzEwIDFyejAgMTBOMCAxb0wwIDEwTjAgMW9MMCAxME4wIDFyejAgVzEwIDFyejAgVzEwIDFyejAgVzEwIDFyejAgMTBOMCAxb0wwIDEwTjAgMW9MMCAxME4wIDFyejAgVzEwIDFyejAgVzEwIDFyejAgMTBOMCAxb0wwIDEwTjAgMW9MMCAxME4wIDFvTDAgMTBOMCAxcnowIFcxMCAxcnowIFcxMCAxcnowIDEwTjAgMW9MMCAxME4wIDFvTDAgMTBOMCAxcnowIFcxMCAxcnowIFcxMCAxcnowIDEwTjAgMW9MMCAxME4wIDFvTDAgMTBOMCAxb0wwIDEwTjAgMXJ6MCBXMTAgMXJ6MCBXMTAgMXJ6MCAxME4wIDFvTDAgMTBOMCAxb0wwIDEwTjAgMXJ6MCBXMTAgMXJ6MCBXMTAgMXJ6MCBXMTAgMXJ6MCAxME4wIDFvTDAgMTBOMCAxb0wwIDEwTjAgMXJ6MCBXMTAgMXJ6MCBXMTAgMXJ6MCAxME4wIDFvTDAgMTBOMCAxb0wwIDEwTjAgMW9MMCAxME4wIDFyejAgVzEwIDFyejAgVzEwIDFyejAgMTBOMCAxb0wwIDEwTjAgMW9MMCAxME4wIDFyejAgVzEwIDFyejAgVzEwIDFyejAgMTBOMCAxb0wwIDEwTjAgMW9MMCAxME4wIDFvTDAgMTBOMCAxcnowIFcxMCAxcnowIFcxMCAxcnowIDEwTjAgMW9MMCAxME4wIDFvTDAgMTBOMCAxcnowIFcxMCAxcnowIFcxMCAxcnowIFcxMCAxcnowIDEwTjAgMW9MMCAxME4wIDFvTDAgMTBOMCAxcnowIFcxMCAxcnowIFcxMCAxcnowIDEwTjAgMW9MMCAxME4wIDFvTDAgMTBOMCAxb0wwIDEwTjAgMXJ6MCBXMTAgMXJ6MCBXMTAgMXJ6MCAxME4wIDFvTDAgMTBOMCAxb0wwIDEwTjAgMXJ6MCBXMTAgMXJ6MCBXMTAgMXJ6MCBXMTAgMXJ6MCAxME4wIDFvTDAgMTBOMCAxb0wwIDEwTjAgMW9MMCAxME4wIDFyejAgVzEwIDFyejAgVzEwIDFyejAgMTBOMCAxb0wwIDEwTjAgMW9MMCAxME4wIDFyejAgVzEwIDFyejAgVzEwIDFyejAgMTBOMCAxb0wwIDEwTjAgMW9MMCAxME4wIDFvTDAgMTBOMCAxcnowIFcxMCAxcnowIFcxMCAxcnowIDEwTjAgMW9MMCAxME4wIDFvTDAgMTBOMCAxcnowIFcxMCAxcnowIFcxMCAxcnowIFcxMCAxcnowIDEwTjAgMW9MMCAxME4wIDFvTDAgMTBOMCAxcnowIFcxMCAxcnowIFcxMCAxcnowIDEwTjAgMW9MMCAxME4wIDFvTDAgMTBOMCAxb0wwIDEwTjAgMXJ6MCBXMTAgMXJ6MCBXMTAgMXJ6MCAxME4wIDFvTDAgMTBOMCAxb0wwIDEwTjAgMXJ6MCBXMTAgMXJ6MCBXMTAgMXJ6MCAxME4wIDFvTDAgMTBOMCAxb0wwIDEwTjAgMW9MMCAxME4wIDFyejAgVzEwIDFyejAgVzEwIDFyejAgMTBOMCAxb0wwIDEwTjAgMW9MMCAxME4wIDFyejAgVzEwIDFyejAgVzEwIDFyejAgVzEwIDFyejAgMTBOMCAxb0wwIDEwTjAgMW9MMCAxME4wIDFyejAgVzEwIDFyejAgVzEwIDFyejAgMTBOMCAxb0wwIDEwTjAgMW9MMCAxME4wIDFvTDAgMTBOMCAxcnowIFcxMCAxcnowIFcxMCAxcnowIDEwTjAgMW9MMCAxME4wIDFvTDAgMTBOMCAxcnowIFcxMCAxcnowIFcxMCAxcnowIDEwTjAgMW9MMCAxME4wIDFvTDAgMTBOMCAxb0wwIDEwTjAgMXJ6MCBXMTAgMXJ6MCBXMTAgMXJ6MCAxME4wIDFvTDAgMTBOMCAxb0wwIDEwTjAgMXJ6MCBXMTAgMXJ6MCBXMTAgMXJ6MCBXMTAgMXJ6MCAxME4wIDFvTDAgMTBOMCAxb0wwIDEwTjAgMXJ6MCBXMTAgMXJ6MCBXMTAgMXJ6MCAxME4wIDFvTDAgMTBOMCAxb0wwIDEwTjAgMW9MMCAxME4wIDFyejAgVzEwIDFyejAgVzEwIDFyejAgMTBOMCAxb0wwIDEwTjAgMW9MMCAxME4wIDFyejAgVzEwIDFyejAgVzEwIDFyejAgMTBOMCAxb0wwIDEwTjAgMW9MMCAxME4wIDFvTDAgMTBOMCAxcnowIFcxMCAxcnowIFcxMCAxcnowIDEwTjAgMW9MMCAxME4wIDFvTDAgMTBOMCAxcnowIFcxMCAxcnowIFcxMCAxcnowIFcxMCAxcnowIDEwTjAgMW9MMCAxME4wIDFvTDAgMTBOMCAxcnowIFcxMCAxcnowIFcxMCAxcnowIDEwTjAgMW9MMCAxME4wIDFvTDAgMTBOMCAxb0wwIDEwTjAgMXJ6MCBXMTAgMXJ6MCBXMTAgMXJ6MCAxME4wIDFvTDAgMTBOMCAxb0wwIDEwTjAgMXJ6MCBXMTAgMXJ6MCBXMTAgMXJ6MCAxME4wIDFvTDAgMTBOMCAxb0wwIDEwTjAgMW9MMCAxME4wIDFyejAgVzEwIDFyejAgVzEwIDFyejAgMTBOMCAxb0wwIDEwTjAgMW9MMCAxME4wIDFyejAgVzEwIDFyejAgVzEwIDFyejAgVzEwIDFyejAgMTBOMCAxb0wwIDEwTjAgMW9MMCAxME4wIDFyejAgVzEwIDFyejAgVzEwIDFyejAgMTBOMCAxb0wwIDEwTjAgMW9MMCAxME4wIDFvTDAgMTBOMCAxcnowIFcxMCAxcnowIFcxMCAxcnowIDEwTjAgMW9MMCAxME4wIDFvTDAgMTBOMCAxcnowIFcxMCAxcnowIFcxMCAxcnowIDEwTjAgMW9MMCAxME4wIDFvTDAgMTBOMCAxb0wwIDEwTjAgMXJ6MCBXMTAgMXJ6MCBXMTAgMXJ6MCAxME4wIDFvTDAgMTBOMCAxb0wwIDEwTjAgMXJ6MCBXMTAgMXJ6MCBXMTAgMXJ6MCBXMTAgMXJ6MCAxME4wIDFvTDAgMTBOMCAxb0wwIDEwTjAgMXJ6MCBXMTAgMXJ6MCBXMTAgMXJ6MCAxME4wIDFvTDAgMTBOMCAxb0wwIDEwTjAgMW9MMCAxME4wIDFyejAgVzEwIDFyejAgVzEwIDFyejAgMTBOMCAxb0wwIDEwTjAgMW9MMCAxME4wIDFyejAgVzEwIDFyejAgVzEwIDFyejAgMTBOMCAxb0wwIDEwTjAgMW9MMCAxME4wIDFvTDAgMTBOMCAxcnowIFcxMCAxcnowIFcxMCAxcnowIDEwTjAgMW9MMCAxME4wIDFvTDAgMTBOMCAxcnowIFcxMCAxcnowIFcxMCAxcnowIFcxMCAxcnowIDEwTjAgMW9MMCAxME4wIDFvTDAgMTBOMCAxcnowIFcxMCAxcnowIFcxMCAxcnowIDEwTjAgMW9MMCAxME4wIDFvTDAgMTBOMCAxb0wwfDgxZTRcIixcbiAgXCJBc2lhL0thYnVsfExNVCArMDQgKzA0MzB8LTRBLk0gLTQwIC00dXwwMTJ8LTNlTEVBLk0gMmRUY0EuTXw0NmU1XCIsXG4gIFwiQXNpYS9LYW1jaGF0a2F8TE1UICsxMSArMTIgKzEzfC1heS5BIC1iMCAtYzAgLWQwfDAxMjMyMzIzMjMyMzIzMjMyMzIzMjMyMTIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIxMnwtMVNMS3kuQSBpdlh5LkEgMjNDTDAgMWRiMCAxY04wIDFkYjAgMWNOMCAxZGIwIDFkZDAgMWNPMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWZBMCAycEIwIElNMCByWDAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxZkEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAyc3AwIFdNMHwxOGU0XCIsXG4gIFwiQXNpYS9LYXJhY2hpfExNVCArMDUzMCArMDYzMCArMDUgUEtUIFBLU1R8LTRzLmMgLTV1IC02dSAtNTAgLTUwIC02MHwwMTIxMzQ1NDU0NTR8LTJ4b3NzLmMgMXFPS1cuYyA3elgwIGV1cDAgTHFNdSAxZnkwMCAxY0wwIGRLMTAgMTFiMCAxNjEwIDFqWDB8MjRlNlwiLFxuICBcIkFzaWEvVXJ1bXFpfExNVCArMDZ8LTVPLmsgLTYwfDAxfC0xR2d0Ty5rfDMyZTVcIixcbiAgXCJBc2lhL0thdGhtYW5kdXxMTVQgKzA1MzAgKzA1NDV8LTVGLmcgLTV1IC01SnwwMTJ8LTIxSmhGLmcgMkVHTWIuZ3wxMmU1XCIsXG4gIFwiQXNpYS9LaGFuZHlnYXxMTVQgKzA4ICswOSArMTAgKzExfC05Mi5kIC04MCAtOTAgLWEwIC1iMHwwMTIzMjMyMzIzMjMyMzIzMjMyMzIzMjEyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzQzNDM0MzQzNDM0MzQzNDMyfC0yMVE5Mi5kIHBBcDIuZCAyM0NMMCAxZGIwIDFjTjAgMWRiMCAxY04wIDFkYjAgMWRkMCAxY08wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxZkEwIDJwQjAgSU0wIHJYMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFmQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIHFLMCB5TjAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMTdWMCA3ekQwfDY2ZTJcIixcbiAgXCJBc2lhL0tyYXNub3lhcnNrfExNVCArMDYgKzA3ICswOHwtNmIucSAtNjAgLTcwIC04MHwwMTIzMjMyMzIzMjMyMzIzMjMyMzIzMjEyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMnwtMjFIaWIucSBwckFiLnEgMjNDTDAgMWRiMCAxY04wIDFkYjAgMWNOMCAxZGIwIDFkZDAgMWNPMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWZBMCAycEIwIElNMCByWDAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxZkEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDhIejB8MTBlNVwiLFxuICBcIkFzaWEvS3VhbGFfTHVtcHVyfExNVCBTTVQgKzA3ICswNzIwICswNzMwICswOSArMDh8LTZULnAgLTZULnAgLTcwIC03ayAtN3UgLTkwIC04MHwwMTIzNDU0NnwtMk0wU1QucCBhSU0wIDE3YW5ULnAgbDVYRSAxN2JPIDhGeXUgMXNvMTB8NzFlNVwiLFxuICBcIkFzaWEvTWFjYXV8TE1UIENTVCArMDkgKzEwIENEVHwtN3kuYSAtODAgLTkwIC1hMCAtOTB8MDEyMzIzMjE0MTQxNDE0MTQxNDE0MTQxNDE0MTQxNDE0MTQxNDE0MTQxNDE0MTQxNDE0MTQxNDE0MTQxNDE0MTQxNDE0MTQxfC0yQ0ZIeS5hIDF1cUt5LmEgUFgwIDFrbjAgMTVCMCAxMWIwIDRRcTAgMW9NMCAxMWMwIDFrbzAgMXUwMCAxMUEwIDFjTTAgMTFjMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFvbzAgMTQwMCAxbzAwIDExQTAgMW8wMCBVMDAgMXRBMCBVMDAgMXdvMCBSYzAgMXdydSBVMTAgMXR6MCBVMTAgMXR6MCBVMTAgMXR6MCBVMTAgMXduMCBSZDAgMXduMCBSZDAgMXduMCBVMTAgMXR6MCBVMTAgMXR6MCAxN2QwIDFjSzAgMWNPMCAxY0swIDFjTzAgMWZ6MCAxY04wIDFjTDAgMWNOMCAxY0wwIDFjTjAgMWNMMCAxY04wIDFjTDAgMWNOMCAxZnowIDFjTjAgMWNMMCBzMTAgMVZ6MCAxY04wIDFjTDAgMWNOMCAxY0wwIDZmZDAgMTRuMHw1N2U0XCIsXG4gIFwiQXNpYS9NYWdhZGFufExNVCArMTAgKzExICsxMnwtYTMuYyAtYTAgLWIwIC1jMHwwMTIzMjMyMzIzMjMyMzIzMjMyMzIzMjEyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMTJ8LTFQY2EzLmMgZVVvMy5jIDIzQ0wwIDFkYjAgMWNOMCAxZGIwIDFjTjAgMWRiMCAxZGQwIDFjTzAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFmQTAgMnBCMCBJTTAgclgwIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWZBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCA4SHowIDNDcTB8OTVlM1wiLFxuICBcIkFzaWEvTWFrYXNzYXJ8TE1UIE1NVCArMDggKzA5IFdJVEF8LTdWLkEgLTdWLkEgLTgwIC05MCAtODB8MDEyMzR8LTIxSmpWLkEgdmZjMCBteUxWLkEgOE1MMHwxNWU1XCIsXG4gIFwiQXNpYS9NYW5pbGF8TE1UIExNVCBQU1QgUERUIEpTVHxmVSAtODQgLTgwIC05MCAtOTB8MDEyMzI0MjMyMzJ8LTU0bTg0IDJjbGMwIDF2ZmM0IEFMMCBjSzEwIDY1WDAgbVhCMCB2WDAgVksxMCAxZGIwfDI0ZTZcIixcbiAgXCJBc2lhL05pY29zaWF8TE1UIEVFVCBFRVNUfC0yZC5zIC0yMCAtMzB8MDEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjF8LTFWYzJkLnMgMmEzY2QucyAxY0wwIDFxcDAgWHowIDE5QjAgMTlYMCAxZkIwIDFkYjAgMWNwMCAxY0wwIDFmQjAgMTlYMCAxY04wIDFjTDAgMWNOMCAxY0wwIDFjTjAgMWNMMCAxY04wIDFmejAgMWNOMCAxY0wwIDFjTjAgMWNMMCAxY04wIDFjTDAgMWNOMCAxY0wwIDFjTjAgMWNMMCAxY04wIDFmejAgMWNOMCAxY0wwIDFjTjAgMWNMMCAxY04wIDFjTDAgMWNOMCAxY0wwIDFjTjAgMWNMMCAxZkIwIDFjTDAgMWNOMCAxY0wwIDFjTjAgMW8zMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFvMDB8MzJlNFwiLFxuICBcIkFzaWEvTm92b2t1em5ldHNrfExNVCArMDYgKzA3ICswOHwtNU0uTSAtNjAgLTcwIC04MHwwMTIzMjMyMzIzMjMyMzIzMjMyMzIzMjEyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMTJ8LTFQY3RNLk0gZVVMTS5NIDIzQ0wwIDFkYjAgMWNOMCAxZGIwIDFjTjAgMWRiMCAxZGQwIDFjTzAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFmQTAgMnBCMCBJTTAgclgwIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWZBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMnNwMCBXTTB8NTVlNFwiLFxuICBcIkFzaWEvTm92b3NpYmlyc2t8TE1UICswNiArMDcgKzA4fC01di5FIC02MCAtNzAgLTgwfDAxMjMyMzIzMjMyMzIzMjMyMzIzMjMyMTIzMjMyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTJ8LTIxUW52LkUgcEFGdi5FIDIzQ0wwIDFkYjAgMWNOMCAxZGIwIDFjTjAgMWRiMCAxZGQwIDFjTzAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFmQTAgMnBCMCBJTTAgclgwIDFjTTAgMWNNMCBtbDAgT3MwIDFjTTAgMWNNMCAxY00wIDFjTTAgMWZBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCA4SHowIDRlTjB8MTVlNVwiLFxuICBcIkFzaWEvT21za3xMTVQgKzA1ICswNiArMDd8LTRSLnUgLTUwIC02MCAtNzB8MDEyMzIzMjMyMzIzMjMyMzIzMjMyMzIxMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzJ8LTIyNHNSLnUgcE1MUi51IDIzQ0wwIDFkYjAgMWNOMCAxZGIwIDFjTjAgMWRiMCAxZGQwIDFjTzAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFmQTAgMnBCMCBJTTAgclgwIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWZBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCA4SHowfDEyZTVcIixcbiAgXCJBc2lhL09yYWx8TE1UICswMyArMDUgKzA2ICswNHwtM3AubyAtMzAgLTUwIC02MCAtNDB8MDEyMzIzMjMyMzIzMjMyMzI0MjQyNDI0MjQyNDI0MjQyNDI0MjQyNDI0MjQyNDJ8LTFQYzNwLm8gZVVvcC5vIDIzQ0swIDNEYjAgMWNOMCAxZGIwIDFkZDAgMWNPMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMnBCMCAxY00wIDFmQTAgMWNNMCAxY00wIElNMCAxRU0wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFmQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTB8MjdlNFwiLFxuICBcIkFzaWEvUG9udGlhbmFrfExNVCBQTVQgKzA3MzAgKzA5ICswOCBXSVRBIFdJQnwtN2guayAtN2guayAtN3UgLTkwIC04MCAtODAgLTcwfDAxMjMyNDI1NnwtMnVhN2guayBYRTAwIG11bkwuayA4UmF1IDZrcHUgNFBYdSB4aGN1IFdxbnV8MjNlNFwiLFxuICBcIkFzaWEvUHlvbmd5YW5nfExNVCBLU1QgSlNUIEtTVHwtOG4gLTh1IC05MCAtOTB8MDEyMzEzfC0ydW04biA5N1hSIDFsVHp1IDJPbmMwIDZCQTB8MjllNVwiLFxuICBcIkFzaWEvUW9zdGFuYXl8TE1UICswNCArMDUgKzA2fC00ZS5zIC00MCAtNTAgLTYwfDAxMjMyMzIzMjMyMzIzMjMyMzIzMjEyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzJ8LTFQYzRlLnMgZVVvZS5zIDIzQ0wwIDNEYjAgMWNOMCAxZGIwIDFkZDAgMWNPMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWZBMCAycEIwIElNMCByWDAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxZkEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIE12OTB8XCIsXG4gIFwiQXNpYS9ReXp5bG9yZGF8TE1UICswNCArMDUgKzA2fC00bC5RIC00MCAtNTAgLTYwfDAxMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyfC0xUGM0bC5RIGVVb2wuUSAyM0NMMCAzRGIwIDFjTjAgMWRiMCAxZGQwIDFjTzAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFmQTAgM2FvMCAxRU0wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFmQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgelFsMHw3M2U0XCIsXG4gIFwiQXNpYS9SYW5nb29ufExNVCBSTVQgKzA2MzAgKzA5fC02by5MIC02by5MIC02dSAtOTB8MDEyMzJ8LTNEOFNvLkwgMUJuQTAgU21uUy5MIDdqOXV8NDhlNVwiLFxuICBcIkFzaWEvU2FraGFsaW58TE1UICswOSArMTEgKzEyICsxMHwtOXUuTSAtOTAgLWIwIC1jMCAtYTB8MDEyMzIzMjMyMzIzMjMyMzIzMjMyMzI0MjMyMzIzMjMyMzI0MjQyNDI0MjQyNDI0MjQyNDI0MjQyNDI0MjQyNDJ8LTJBR1Z1Lk0gMUJvTXUuTSAxcUZhMCAxZGIwIDFjTjAgMWRiMCAxY04wIDFkYjAgMWRkMCAxY08wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxZkEwIDJwQjAgSU0wIHJYMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFmQTAgMW8wMCAycEIwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDhIejAgM3JkMHw1OGU0XCIsXG4gIFwiQXNpYS9TYW1hcmthbmR8TE1UICswNCArMDUgKzA2fC00ci5SIC00MCAtNTAgLTYwfDAxMjMyMzIzMjMyMzIzMjMyMzIzMjMyfC0xUGM0ci5SIGVVb3IuUiAyM0NMMCAzRGIwIDFjTjAgMWRiMCAxZGQwIDFjTzAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFmQTAgMWNNMCAxY00wfDM2ZTRcIixcbiAgXCJBc2lhL1Nlb3VsfExNVCBLU1QgSlNUIEtTVCBLRFQgS0RUfC04ci5RIC04dSAtOTAgLTkwIC1hMCAtOXV8MDEyMzQzNDM0MzQzMTUxNTE1MTUxNTE1MTM0MzQzfC0ydW04ci5RIDk3WFYuUSAxbTF6dSA2Q00wIEZ6MCAxa04wIDE0bjAgMWtOMCAxNEwwIDF6ZDAgT24wIDY5QjAgMkkwdSBPTDAgMUZCMCBSYjAgMXFOMCBUWDAgMXRCMCBUWDAgMXRCMCBUWDAgMXRCMCBUWDAgMmFwMCAxMkZCdSAxMUEwIDFvMDAgMTFBMHwyM2U2XCIsXG4gIFwiQXNpYS9TcmVkbmVrb2x5bXNrfExNVCArMTAgKzExICsxMnwtYWUuUSAtYTAgLWIwIC1jMHwwMTIzMjMyMzIzMjMyMzIzMjMyMzIzMjEyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMnwtMVBjYWUuUSBlVW9lLlEgMjNDTDAgMWRiMCAxY04wIDFkYjAgMWNOMCAxZGIwIDFkZDAgMWNPMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWZBMCAycEIwIElNMCByWDAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxZkEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDhIejB8MzVlMlwiLFxuICBcIkFzaWEvVGFpcGVpfExNVCBDU1QgSlNUIENEVHwtODYgLTgwIC05MCAtOTB8MDEyMTMxMzEzMTMxMzEzMTMxMzEzMTMxMzEzMTMxMzEzMTMxMzEzMTMxfC0zMGJrNiAxRkRjNiBqb00wIDF5bzAgVHowIDFpcDAgMWpYMCAxY04wIDExYjAgMW9OMCAxMWIwIDFvTjAgMTFiMCAxb04wIDExYjAgMTBOMCAxQlgwIDEwcDAgMXB6MCAxMHAwIDFwejAgMTBwMCAxZGIwIDFkZDAgMWRiMCAxY04wIDFkYjAgMWNOMCAxZGIwIDFjTjAgMWRiMCAxQkIwIE1MMCAxQmQwIE1MMCB1cTEwIDFkYjAgMWNOMCAxZGIwIDk3QjAgQUwwfDc0ZTVcIixcbiAgXCJBc2lhL1Rhc2hrZW50fExNVCArMDUgKzA2ICswN3wtNEIuYiAtNTAgLTYwIC03MHwwMTIzMjMyMzIzMjMyMzIzMjMyMzIzMjF8LTFQYzRCLmIgZVVuQi5iIDIzQ0wwIDFkYjAgMWNOMCAxZGIwIDFjTjAgMWRiMCAxZGQwIDFjTzAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFmQTAgMnBCMHwyM2U1XCIsXG4gIFwiQXNpYS9UYmlsaXNpfExNVCBUQk1UICswMyArMDQgKzA1fC0yWC5iIC0yWC5iIC0zMCAtNDAgLTUwfDAxMjM0MzQzNDM0MzQzNDM0MzQzNDM0MzIzMjMyMzQzNDM0MzQzNDM0MzQzNDM0MzIzfC0zRDhPWC5iIDFMVU0wIDFqVW5YLmIgV0NMMCAxZGIwIDFjTjAgMWRiMCAxY04wIDFkYjAgMWRkMCAxY08wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxZkEwIDJwQjAgMWNLMCAxY0wwIDFjTjAgMWNMMCAxY04wIDJwejAgMWNMMCAxZkIwIDNOejAgMTFCMCAxblgwIDExQjAgMXFMMCBXTjAgMXFMMCBXTjAgMXFMMCAxMUIwIDFuWDAgMTFCMCAxblgwIDExQjAgQW4wIE9zMCBXTTB8MTFlNVwiLFxuICBcIkFzaWEvVGVocmFufExNVCBUTVQgKzAzMzAgKzA0MzAgKzA0ICswNXwtM3AuSSAtM3AuSSAtM3UgLTR1IC00MCAtNTB8MDEyMzQ1NDIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyfC0yYnREcC5JIExsYzAgMUZIYVQuSSAxcGMwIDEyMHUgUmMwIFhBMCBXb3UgSlgwIDFkQjAgMWVuMCBwTkIwIFVMMCAxY04wIDFkejAgMWNwMCAxZHowIDFjcDAgMWR6MCAxY3AwIDFkejAgMWNwMCAxZHowIDFjTjAgMWR6MCAxY3AwIDFkejAgMWNwMCAxZHowIDFjcDAgMWR6MCAxY04wIDFkejAgMWNwMCAxZHowIDFjcDAgMWR6MCAxY3AwIDFkejAgMWNOMCAxZHowIDY0cDAgMWR6MCAxY04wIDFkejAgMWNwMCAxZHowIDFjcDAgMWR6MCAxY3AwIDFkejAgMWNOMCAxZHowIDFjcDAgMWR6MCAxY3AwIDFkejAgMWNwMCAxZHowIDFjTjAgMWR6MCAxY3AwIDFkejAgMWNwMCAxZHowIDFjcDAgMWR6MCAxY04wIDFkejAgMWNwMCAxZHowfDE0ZTZcIixcbiAgXCJBc2lhL1RoaW1waHV8TE1UICswNTMwICswNnwtNVcuQSAtNXUgLTYwfDAxMnwtU3U1Vy5BIDFCR01zLkF8NzllM1wiLFxuICBcIkFzaWEvVG9reW98TE1UIEpTVCBKRFR8LTlpLlggLTkwIC1hMHwwMTIxMjEyMTIxfC0zakU5MCAycVNvMCBSYzAgMWxjMCAxNG8wIDF6YzAgT28wIDF6YzAgT28wfDM4ZTZcIixcbiAgXCJBc2lhL1RvbXNrfExNVCArMDYgKzA3ICswOHwtNUQuUCAtNjAgLTcwIC04MHwwMTIzMjMyMzIzMjMyMzIzMjMyMzIzMjEyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjEyMTIxMjEyMTIxMjEyMTIxMjEyfC0yMU5oRC5QIHB4ekQuUCAyM0NMMCAxZGIwIDFjTjAgMWRiMCAxY04wIDFkYjAgMWRkMCAxY08wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxZkEwIDJwQjAgSU0wIHJYMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFmQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIGNvMCAxYkIwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDhIejAgM1FwMHwxMGU1XCIsXG4gIFwiQXNpYS9Vc3QtTmVyYXxMTVQgKzA4ICswOSArMTIgKzExICsxMHwtOXcuUyAtODAgLTkwIC1jMCAtYjAgLWEwfDAxMjM0MzQzNDM0MzQzNDM0MzQzNDM0NTQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0NXwtMjFROXcuUyBwQXB3LlMgMjNDTDAgMWQ5MCAxY04wIDFkYjAgMWNOMCAxZGIwIDFkZDAgMWNPMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWZBMCAycEIwIElNMCByWDAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxZkEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDE3VjAgN3pEMHw2NWUyXCIsXG4gIFwiQXNpYS9WbGFkaXZvc3Rva3xMTVQgKzA5ICsxMCArMTF8LThMLnYgLTkwIC1hMCAtYjB8MDEyMzIzMjMyMzIzMjMyMzIzMjMyMzIxMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzJ8LTFTSklMLnYgaXRYTC52IDIzQ0wwIDFkYjAgMWNOMCAxZGIwIDFjTjAgMWRiMCAxZGQwIDFjTzAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFmQTAgMnBCMCBJTTAgclgwIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWZBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCA4SHowfDYwZTRcIixcbiAgXCJBc2lhL1lha3V0c2t8TE1UICswOCArMDkgKzEwfC04Qy5XIC04MCAtOTAgLWEwfDAxMjMyMzIzMjMyMzIzMjMyMzIzMjMyMTIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyfC0yMVE4Qy5XIHBBb0MuVyAyM0NMMCAxZGIwIDFjTjAgMWRiMCAxY04wIDFkYjAgMWRkMCAxY08wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxZkEwIDJwQjAgSU0wIHJYMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFmQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgOEh6MHwyOGU0XCIsXG4gIFwiQXNpYS9ZZWthdGVyaW5idXJnfExNVCBQTVQgKzA0ICswNSArMDZ8LTQyLnggLTNKLjUgLTQwIC01MCAtNjB8MDEyMzQzNDM0MzQzNDM0MzQzNDM0MzQzMjM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzfC0yYWc0Mi54IDdtUWgucyBxQnZKLjUgMjNDTDAgMWRiMCAxY04wIDFkYjAgMWNOMCAxZGIwIDFkZDAgMWNPMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWZBMCAycEIwIElNMCByWDAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxZkEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDhIejB8MTRlNVwiLFxuICBcIkFzaWEvWWVyZXZhbnxMTVQgKzAzICswNCArMDV8LTJXIC0zMCAtNDAgLTUwfDAxMjMyMzIzMjMyMzIzMjMyMzIzMjMyMTIxMjEyMTIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzJ8LTFQYzJXIDFqVW5XIFdDTDAgMWRiMCAxY04wIDFkYjAgMWNOMCAxZGIwIDFkZDAgMWNPMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWZBMCAycEIwIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgNFJYMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTB8MTNlNVwiLFxuICBcIkF0bGFudGljL0F6b3Jlc3xMTVQgSE1UIC0wMiAtMDEgKzAwIFdFVCBXRVNUfDFHLkUgMVMudyAyMCAxMCAwIDAgLTEwfDAxMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjM0MzIzNDMyMzQzMjM0MzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM1NjQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0M3wtM3RvbWguayAxOGFvaC5rIGFQWDAgU3AwIE0wMCAxdmIwIFNOMCAxdmIwIFNOMCAxdmIwIFRkMCAxdmIwIFNOMCAxdmIwIDY2MDAgMThvMCAzSTAwIDE3YzAgMWZBMCAxYTAwIDFpbzAgMWEwMCAxaW8wIDE3YzAgM0kwMCAxN2MwIDFjTTAgMWNNMCAzRmMwIDFjTTAgMWEwMCAxZkEwIDFpbzAgMTdjMCAxY00wIDFjTTAgMWEwMCAxZkEwIDFpbzAgMXFNMCBEYzAgMXVvMCAxYzAwIDFkYzAgMTQwMCBnTDAgSU0wIHMxMCBVMDAgZFgwIFJjMCBwZDAgUmMwIGdMMCBPbzAgcGQwIFJjMCBnTDAgT28wIHBkMCAxNG8wIDFjTTAgMWNQMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWZBMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxZkEwIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxZkEwIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgQ1Q5MCAxY00wIDFjTTAgMWNNMCAxY00wIDFmQTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFmQTAgMWNNMCAxY00wIDFjTTAgMWNNMCBBcDAgQW4wIHdvMCBFbzAgMWNNMCAxY00wIDFjTTAgMWNNMCAxZkEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFvMDB8MjVlNFwiLFxuICBcIkF0bGFudGljL0Jlcm11ZGF8TE1UIEJNVCBCU1QgQVNUIEFEVHw0ai5pIDRqLmkgM2ouaSA0MCAzMHwwMTIxMjEzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzfC0zZUx2RS5HIDE2bW8wIDFiYjAgMWkxMCAxMVgwIHJ1MzAgdGhiRS5HIDFQWDAgMTFCMCAxdHowIFJkMCAxemIwIE9wMCAxemIwIDNJMTAgTHowIDFFTjAgRlgwIDFIQjAgRlgwIDFLcDAgRGIwIDFLcDAgRGIwIDFLcDAgRlgwIDkzZDAgMTF6MCBHQXAwIDFjTDAgMWNOMCAxY0wwIDFjTjAgMWZ6MCAxYTEwIDFmejAgMWNOMCAxY0wwIDFjTjAgMWNMMCAxY04wIDFjTDAgMWNOMCAxY0wwIDFjTjAgMWZ6MCAxYTEwIDFmejAgMWNOMCAxY0wwIDFjTjAgMWNMMCAxY04wIDFjTDAgMTRwMCAxbGIwIDE0cDAgMW5YMCAxMUIwIDFuWDAgMTFCMCAxblgwIDE0cDAgMWxiMCAxNHAwIDFsYjAgMTRwMCAxblgwIDExQjAgMW5YMCAxMUIwIDFuWDAgMTRwMCAxbGIwIDE0cDAgMWxiMCAxNHAwIDFsYjAgMTRwMCAxblgwIDExQjAgMW5YMCAxMUIwIDFuWDAgMTRwMCAxbGIwIDE0cDAgMWxiMCAxNHAwIDFuWDAgMTFCMCAxblgwIDExQjAgMW5YMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBSZDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMCBPcDAgMXpiMHw2NWUzXCIsXG4gIFwiQXRsYW50aWMvQ2FuYXJ5fExNVCAtMDEgV0VUIFdFU1R8MTEuQSAxMCAwIC0xMHwwMTIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMnwtMVV0YVcubyBYUEFXLm8gMWxBSzAgMWExMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFmQTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFmQTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxZkEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFvMDB8NTRlNFwiLFxuICBcIkF0bGFudGljL0NhcGVfVmVyZGV8TE1UIC0wMiAtMDF8MXkuNCAyMCAxMHwwMTIxMnwtMmxkVzAgMWVFbzAgN3pYMCAxZGpmMHw1MGU0XCIsXG4gIFwiQXRsYW50aWMvRmFyb2V8TE1UIFdFVCBXRVNUfHIuNCAwIC0xMHwwMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMXwtMnVTbncuVSAyV2dvdy5VIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFmQTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFmQTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxZkEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFvMDB8NDllM1wiLFxuICBcIkF0bGFudGljL01hZGVpcmF8TE1UIEZNVCAtMDEgKzAwICswMSBXRVQgV0VTVHwxNy5BIDE3LkEgMTAgMCAtMTAgMCAtMTB8MDEyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzQzMjM0MzIzNDMyMzQzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzNTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjV8LTN0b21RLm8gMThhblEubyBhUFgwIFNwMCBNMDAgMXZiMCBTTjAgMXZiMCBTTjAgMXZiMCBUZDAgMXZiMCBTTjAgMXZiMCA2NjAwIDE4bzAgM0kwMCAxN2MwIDFmQTAgMWEwMCAxaW8wIDFhMDAgMWlvMCAxN2MwIDNJMDAgMTdjMCAxY00wIDFjTTAgM0ZjMCAxY00wIDFhMDAgMWZBMCAxaW8wIDE3YzAgMWNNMCAxY00wIDFhMDAgMWZBMCAxaW8wIDFxTTAgRGMwIDF1bzAgMWMwMCAxZGMwIDE0MDAgZ0wwIElNMCBzMTAgVTAwIGRYMCBSYzAgcGQwIFJjMCBnTDAgT28wIHBkMCBSYzAgZ0wwIE9vMCBwZDAgMTRvMCAxY00wIDFjUDAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFmQTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWZBMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWZBMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgQko5MCAxYTAwIDFjTTAgMWNNMCAxY00wIDFmQTAgMWNNMCAxY00wIDFjTTAgMWNOMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFmQTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxZkEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFvMDB8MjdlNFwiLFxuICBcIkF0bGFudGljL1NvdXRoX0dlb3JnaWF8TE1UIC0wMnwycS44IDIwfDAxfC0zZUx4eC5RfDMwXCIsXG4gIFwiQXRsYW50aWMvU3RhbmxleXxMTVQgU01UIC0wNCAtMDMgLTAyfDNQLm8gM1AubyA0MCAzMCAyMHwwMTIzMjMyMzIzMjMyMzIzNDM0MzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzfC0zZUx3OC5BIFMyMDAgMTJiQTguQSAxOVgwIDFmQjAgMTlYMCAxaXAwIDE5WDAgMWZCMCAxOVgwIDFmQjAgMTlYMCAxZkIwIENuMCAxQ2MxMCBXTDAgMXFMMCBVMTAgMXR6MCAybU4wIFdOMCAxcUwwIFdOMCAxcUwwIFdOMCAxcUwwIFdOMCAxdHowIFUxMCAxdHowIFdOMCAxcUwwIFdOMCAxcUwwIFdOMCAxcUwwIFdOMCAxcUwwIFdOMCAxdHowIFdOMCAxcUwwIFdOMCAxcUwwIFdOMCAxcUwwIFdOMCAxcUwwIFdOMCAxcU4wIFUxMCAxd24wIFJkMCAxd24wIFUxMCAxdHowIFUxMCAxdHowIFUxMCAxdHowIFUxMCAxdHowIFUxMCAxd24wIFUxMCAxdHowIFUxMCAxdHowIFUxMHwyMWUyXCIsXG4gIFwiQXVzdHJhbGlhL1N5ZG5leXxMTVQgQUVTVCBBRURUfC1hNC5RIC1hMCAtYjB8MDEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTJ8LTMyb1c0LlEgUmxDNC5RIHhjMCAxMGpjMCB5TTAgMWNNMCAxY00wIDFmQTAgMWEwMCAxN2MwMCBMQTAgMUMwMCBPbzAgMXpjMCBPbzAgMXpjMCBPbzAgMXpjMCBSYzAgMXpjMCBPbzAgMXpjMCBPbzAgMXpjMCBPbzAgMXpjMCBPbzAgMXpjMCBPbzAgMXpjMCAxNG8wIDFvMDAgT28wIDF6YzAgT28wIDF6YzAgT28wIDF6YzAgVTAwIDFxTTAgV00wIDF0QTAgV00wIDF0QTAgVTAwIDF0QTAgT28wIDF6YzAgT28wIDF6YzAgT28wIDF6YzAgUmMwIDF6YzAgT28wIDF6YzAgT28wIDF6YzAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxMUEwIDFvMDAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgV00wIDFxTTAgMTRvMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWZBMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWZBMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFmQTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxZkEwIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxZkEwIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFmQTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFmQTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxZkEwIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWZBMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWZBMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxZkEwIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxZkEwIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWZBMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFmQTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFmQTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWZBMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFmQTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWZBMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWZBMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFmQTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxZkEwIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxZkEwIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFmQTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFmQTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxZkEwIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWZBMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWZBMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxZkEwIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxZkEwIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWZBMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFmQTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFmQTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWZBMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWZBMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWZBMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWZBMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFmQTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxZkEwIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxZkEwIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFmQTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFmQTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxZkEwIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWZBMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWZBMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxZkEwIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxZkEwIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWZBMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFmQTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFmQTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWZBMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWZBMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWZBMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWZBMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFmQTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxZkEwIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxZkEwIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFmQTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFmQTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxZkEwIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWZBMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWZBMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxZkEwIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxZkEwIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWZBMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFmQTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFmQTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWZBMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWZBMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFmQTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxZkEwIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxZkEwIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFmQTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFmQTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxZkEwIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWZBMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWZBMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxZkEwIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxZkEwIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWZBMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFmQTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFmQTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWZBMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWZBMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFmQTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxZkEwIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxZkEwIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFmQTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTB8NDBlNVwiLFxuICBcIkF1c3RyYWxpYS9BZGVsYWlkZXxMTVQgQUNTVCBBQ1NUIEFDRFR8LTllLmsgLTkwIC05dSAtYXV8MDEyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzfC0zMm9WZS5rIGFrMGUuayBIMUJ1IHhjMCAxMGpjMCB5TTAgMWNNMCAxY00wIDFmQTAgMWEwMCAxN2MwMCBMQTAgMUMwMCBPbzAgMXpjMCBPbzAgMXpjMCBPbzAgMXpjMCBSYzAgMXpjMCBPbzAgMXpjMCBPbzAgMXpjMCBPbzAgMXpjMCBPbzAgMXpjMCBPbzAgMXpjMCBSYzAgMXpjMCBPbzAgMXpjMCBPbzAgMXpjMCBPbzAgMXpjMCBVMDAgMXFNMCBXTTAgMXRBMCBXTTAgMXRBMCBVMDAgMXRBMCBVMDAgMXRBMCBPbzAgMXpjMCBXTTAgMXFNMCBSYzAgMXpjMCBVMDAgMXRBMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIFdNMCAxcU0wIDE0bzAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFmQTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFmQTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxZkEwIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWZBMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWZBMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxZkEwIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxZkEwIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWZBMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFmQTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFmQTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWZBMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWZBMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFmQTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxZkEwIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxZkEwIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFmQTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxZkEwIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFmQTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFmQTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxZkEwIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWZBMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWZBMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxZkEwIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxZkEwIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWZBMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFmQTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFmQTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWZBMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWZBMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFmQTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxZkEwIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxZkEwIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFmQTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFmQTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFmQTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFmQTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxZkEwIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWZBMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWZBMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxZkEwIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxZkEwIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWZBMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFmQTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFmQTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWZBMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWZBMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFmQTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxZkEwIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxZkEwIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFmQTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFmQTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFmQTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFmQTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxZkEwIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWZBMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWZBMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxZkEwIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxZkEwIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWZBMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFmQTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFmQTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWZBMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWZBMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFmQTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxZkEwIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxZkEwIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFmQTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFmQTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxZkEwIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWZBMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWZBMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxZkEwIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxZkEwIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWZBMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFmQTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFmQTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWZBMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWZBMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFmQTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxZkEwIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxZkEwIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFmQTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFmQTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxZkEwIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWZBMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWZBMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxZkEwIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wfDExZTVcIixcbiAgXCJBdXN0cmFsaWEvQnJpc2JhbmV8TE1UIEFFU1QgQUVEVHwtYWMuOCAtYTAgLWIwfDAxMjEyMTIxMjEyMTIxMjEyMXwtMzJCbWMuOCBSeTJjLjggeGMwIDEwamMwIHlNMCAxY00wIDFjTTAgMWZBMCAxYTAwIDE3YzAwIExBMCBIMUEwIE9vMCAxemMwIE9vMCAxemMwIE9vMHwyMGU1XCIsXG4gIFwiQXVzdHJhbGlhL0Jyb2tlbl9IaWxsfExNVCBBRVNUIEFDU1QgQUNTVCBBQ0RUfC05cC5NIC1hMCAtOTAgLTl1IC1hdXwwMTIzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0fC0zMm9WcC5NIDNMenAuTSA2d3AwIEgxQnUgeGMwIDEwamMwIHlNMCAxY00wIDFjTTAgMWZBMCAxYTAwIDE3YzAwIExBMCAxQzAwIE9vMCAxemMwIE9vMCAxemMwIE9vMCAxemMwIFJjMCAxemMwIE9vMCAxemMwIE9vMCAxemMwIE9vMCAxemMwIE9vMCAxemMwIE9vMCAxemMwIDE0bzAgMW8wMCBPbzAgMXpjMCBPbzAgMXpjMCBPbzAgMXpjMCBVMDAgMXFNMCBXTTAgMXRBMCBXTTAgMXRBMCBVMDAgMXRBMCBPbzAgMXpjMCBPbzAgMXpjMCBPbzAgMXpjMCBSYzAgMXpjMCBPbzAgMXpjMCBPbzAgMXpjMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIFdNMCAxcU0wIDE0bzAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFmQTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFmQTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxZkEwIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWZBMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWZBMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxZkEwIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxZkEwIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWZBMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFmQTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFmQTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWZBMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWZBMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFmQTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxZkEwIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxZkEwIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFmQTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxZkEwIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFmQTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFmQTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxZkEwIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWZBMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWZBMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxZkEwIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxZkEwIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWZBMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFmQTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFmQTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWZBMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWZBMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFmQTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxZkEwIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxZkEwIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFmQTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFmQTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFmQTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFmQTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxZkEwIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWZBMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWZBMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxZkEwIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxZkEwIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWZBMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFmQTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFmQTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWZBMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWZBMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFmQTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxZkEwIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxZkEwIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFmQTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFmQTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFmQTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFmQTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxZkEwIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWZBMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWZBMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxZkEwIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxZkEwIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWZBMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFmQTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFmQTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWZBMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWZBMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFmQTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxZkEwIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxZkEwIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFmQTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFmQTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxZkEwIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWZBMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWZBMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxZkEwIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxZkEwIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWZBMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFmQTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFmQTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWZBMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWZBMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFmQTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxZkEwIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxZkEwIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFmQTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFmQTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxZkEwIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWZBMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWZBMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxZkEwIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wfDE4ZTNcIixcbiAgXCJBdXN0cmFsaWEvSG9iYXJ0fExNVCBBRVNUIEFFRFR8LTlOLmcgLWEwIC1iMHwwMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMnwtMzEwOU4uZyBQazFOLmcgMWEwMCAxcU0wIE9vMCAxemMwIE9vMCBUQW8wIHlNMCAxY00wIDFjTTAgMWZBMCAxYTAwIFZmQTAgMWNNMCAxbzAwIFJjMCAxd28wIFJjMCAxd28wIFUwMCAxd28wIExBMCAxQzAwIE9vMCAxemMwIE9vMCAxemMwIE9vMCAxemMwIFJjMCAxemMwIE9vMCAxemMwIE9vMCAxemMwIE9vMCAxemMwIE9vMCAxemMwIE9vMCAxemMwIDExQTAgMXFNMCBXTTAgMXFNMCBPbzAgMXpjMCBPbzAgMXpjMCBPbzAgMXdvMCBXTTAgMXRBMCBXTTAgMXRBMCBVMDAgMXRBMCBVMDAgMXRBMCAxMUEwIDFmQTAgMWEwMCAxZkEwIDFhMDAgMWZBMCAxYTAwIDFmQTAgMWEwMCAxZkEwIDFjTTAgMWZBMCAxYTAwIDFmQTAgMWEwMCAxZkEwIDFhMDAgMWZBMCAxYTAwIDExQTAgMW8wMCAxaW8wIDFhMDAgMWZBMCAxYTAwIDFmQTAgMWEwMCAxZkEwIDFhMDAgMWZBMCAxY00wIDFjTTAgMWEwMCAxaW8wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFmQTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFmQTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxZkEwIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWZBMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWZBMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxZkEwIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxZkEwIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWZBMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFmQTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFmQTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWZBMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWZBMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFmQTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxZkEwIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxZkEwIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFmQTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxZkEwIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFmQTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFmQTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxZkEwIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWZBMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWZBMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxZkEwIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxZkEwIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWZBMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFmQTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFmQTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWZBMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWZBMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFmQTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxZkEwIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxZkEwIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFmQTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFmQTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFmQTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFmQTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxZkEwIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWZBMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWZBMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxZkEwIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxZkEwIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWZBMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFmQTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFmQTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWZBMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWZBMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFmQTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxZkEwIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxZkEwIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFmQTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFmQTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFmQTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFmQTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxZkEwIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWZBMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWZBMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxZkEwIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxZkEwIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWZBMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFmQTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFmQTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWZBMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWZBMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFmQTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxZkEwIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxZkEwIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFmQTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFmQTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxZkEwIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWZBMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWZBMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxZkEwIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxZkEwIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWZBMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFmQTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFmQTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWZBMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWZBMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFmQTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxZkEwIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxZkEwIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFmQTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFmQTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxZkEwIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWZBMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWZBMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxZkEwIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wfDIxZTRcIixcbiAgXCJBdXN0cmFsaWEvRGFyd2lufExNVCBBQ1NUIEFDU1QgQUNEVHwtOEguayAtOTAgLTl1IC1hdXwwMTIzMjMyMzIzMnwtMzJvVUguayBhalhILmsgSDFCdSB4YzAgMTBqYzAgeU0wIDFjTTAgMWNNMCAxZkEwIDFhMDB8MTJlNFwiLFxuICBcIkF1c3RyYWxpYS9FdWNsYXxMTVQgKzA4NDUgKzA5NDV8LTh6LnMgLThKIC05SnwwMTIxMjEyMTIxMjEyMTIxMjEyMXwtMzBuSXoucyBQa3BPLnMgeGMwIDEwamMwIHlNMCAxY00wIDFjTTAgMWdTbzAgT28wIGw1QTAgT28wIGlKQTAgRzAwIHpVMDAgSU0wIDFxTTAgMTFBMCAxbzAwIDExQTB8MzY4XCIsXG4gIFwiQXVzdHJhbGlhL0xvcmRfSG93ZXxMTVQgQUVTVCArMTAzMCArMTEzMCArMTF8LWFBLmsgLWEwIC1hdSAtYnUgLWIwfDAxMjMyMzIzMjMyNDI0MjQyNDI0MjQyNDI0MjQyNDI0MjQyNDI0MjQyNDI0MjQyNDI0MjQyNDI0MjQyNDI0MjQyNDI0MjQyNDI0MjQyNDI0MjQyNDI0MjQyNDI0MjQyNDI0MjQyNDI0MjQyNDI0MjQyNDI0MjQyNDI0MjQyNDI0MjQyNDI0MjQyNDI0MjQyNDI0MjQyNDI0MjQyNDI0MjQyNDI0MjQyNDI0MjQyNDI0MjQyNDI0MjQyNDI0MjQyNDI0MjQyNDI0MjQyNDI0MjQyNDI0MjQyNDI0MjQyNDI0MjQyNDI0MjQyNDI0MjQyNDI0MjQyNDI0MjQyNDI0MjQyNDI0MjQyNDI0MjQyNDI0MjQyNDI0MjQyNDI0MjQyNDI0MjQyNDI0MjQyNDI0MjQyNDI0MjQyNDI0MjQyNDI0MjQyNDI0MjQyNDI0MjQyNDI0MjQyNDI0MjQyNDI0MjQyNDI0MjQyNDI0MjQyNDI0MjQyNDI0MjQyNDI0MjQyNDI0MjQyNDI0MjQyNDI0MjQyNDI0MjQyNDI0MjQyNDI0MjQyNDI0MjQyNDI0MjQyNDI0MjQyNDI0MjQyNDI0MjQyNDI0MjQyNDI0MjQyNDI0MjQyNDI0MjQyNDI0MjQyNDI0MjQyNDI0MjQyNDI0MjQyNDI0MjQyNDI0MjQyNDI0MjQyNDI0MjQyNDI0MjQyNDI0MjQyNDI0MjQyNDI0MjQyNDI0MjQyNDI0MjQyNDI0MjQyNDI0MjQyNDI0MjQyNDI0MjQyNDI0MjQyNDI0MjQyNDI0MjQyNDI0MjQyNDI0MjQyNDI0MjQyNDI0MjQyNDI0MjQyNDI0MjQyNDI0MjQyNDI0MjQyNDI0MjQyNDI0MjQyNDI0MjQyNDI0MjQyNDI0MjQyNDI0MjQyNDI0MjQyNDI0MjQyNDI0MjQyNDI0MjQyNDI0MjQyNDI0MjQyNDI0MjQyNDI0MjQyNDI0MjQyNDI0MjQyNDI0MjQyNDI0MjQyNDI0MjQyNDI0MjQyNDI0MjQyNDI0MjQyNDI0MjQyNDI0MjQyNDI0MjQyNDI0MjQyNDI0MjQyNDI0MjQyNDI0MjQyNDI0MjQyNDI0MjQyNDI0MjQyNDI0MjQyNDI0MjQyNDI0MjQyNDI0MjQyNDI0MjQyNDI0MjQyNDI0MjQyNDI0MjQyNDI0MjQyNDI0MjQyNDI0MjQyNDI0MjQyNDI0MjQyNDI0MjQyNDI0MjQyNDI0MjQyNDI0MjQyNDI0MjQyNDI0MjQyNDI0MjQyNDI0MjQyNDI0MjQyNDI0MjQyNDI0MjQyNDI0MjQyNDI0MjQyNDI0MjQyNDI0MjQyNDI0MjQyNDI0MjQyNDI0MjQyNDI0MjQyNDI0MjQyNDI0fC0zMm9XQS5rIDN0ekFBLmsgMXpkdSBSYjAgMXpkMCBPbjAgMXpkMCBPbjAgMXpkMCBPbjAgMXpkMCBUWHUgMXFNdSBXTHUgMXRBdSBXTHUgMXRBdSBUWHUgMXRBdSBPbnUgMXpjdSBPbnUgMXpjdSBPbnUgMXpjdSBSYnUgMXpjdSBPbnUgMXpjdSBPbnUgMXpjdSAxMXp1IDFvMHUgMTF6dSAxbzB1IDExenUgMW8wdSAxMXp1IDFxTXUgV0x1IDExQXUgMW5YdSAxcU11IDExenUgMW8wdSAxMXp1IDFvMHUgMTF6dSAxcU11IFdMdSAxcU11IDExenUgMW8wdSBXTHUgMXFNdSAxNG51IDFjTXUgMWNMdSAxY011IDFjTHUgMWNNdSAxY0x1IDFjTXUgMWNMdSAxZkF1IDFjTHUgMWNNdSAxY0x1IDFjTXUgMWNMdSAxY011IDFjTHUgMWNNdSAxY0x1IDFjTXUgMWNMdSAxZkF1IDFjTHUgMWNNdSAxY0x1IDFjTXUgMWNMdSAxY011IDFjTHUgMWNNdSAxY0x1IDFjTXUgMWZ6dSAxY011IDFjTHUgMWNNdSAxY0x1IDFjTXUgMWNMdSAxY011IDFjTHUgMWNNdSAxY0x1IDFmQXUgMWNMdSAxY011IDFjTHUgMWNNdSAxY0x1IDFjTXUgMWNMdSAxY011IDFjTHUgMWNNdSAxY0x1IDFmQXUgMWNMdSAxY011IDFjTHUgMWNNdSAxY0x1IDFjTXUgMWNMdSAxY011IDFjTHUgMWZBdSAxY0x1IDFjTXUgMWNMdSAxY011IDFjTHUgMWNNdSAxY0x1IDFjTXUgMWNMdSAxY011IDFjTHUgMWZBdSAxY0x1IDFjTXUgMWNMdSAxY011IDFjTHUgMWNNdSAxY0x1IDFjTXUgMWNMdSAxY011IDFmenUgMWNNdSAxY0x1IDFjTXUgMWNMdSAxY011IDFjTHUgMWNNdSAxY0x1IDFjTXUgMWNMdSAxZkF1IDFjTHUgMWNNdSAxY0x1IDFjTXUgMWNMdSAxY011IDFjTHUgMWNNdSAxY0x1IDFjTXUgMWNMdSAxZkF1IDFjTHUgMWNNdSAxY0x1IDFjTXUgMWNMdSAxY011IDFjTHUgMWNNdSAxY0x1IDFmQXUgMWNMdSAxY011IDFjTHUgMWNNdSAxY0x1IDFjTXUgMWNMdSAxY011IDFjTHUgMWNNdSAxY0x1IDFmQXUgMWNMdSAxY011IDFjTHUgMWNNdSAxY0x1IDFjTXUgMWNMdSAxY011IDFjTHUgMWNNdSAxZnp1IDFjTXUgMWNMdSAxY011IDFjTHUgMWNNdSAxY0x1IDFjTXUgMWNMdSAxY011IDFjTHUgMWZBdSAxY0x1IDFjTXUgMWNMdSAxY011IDFjTHUgMWNNdSAxY0x1IDFjTXUgMWNMdSAxY011IDFjTHUgMWZBdSAxY0x1IDFjTXUgMWNMdSAxY011IDFjTHUgMWNNdSAxY0x1IDFjTXUgMWNMdSAxZkF1IDFjTHUgMWNNdSAxY0x1IDFjTXUgMWNMdSAxY011IDFjTHUgMWNNdSAxY0x1IDFjTXUgMWNMdSAxY011IDFjTHUgMWZBdSAxY0x1IDFjTXUgMWNMdSAxY011IDFjTHUgMWNNdSAxY0x1IDFjTXUgMWNMdSAxZkF1IDFjTHUgMWNNdSAxY0x1IDFjTXUgMWNMdSAxY011IDFjTHUgMWNNdSAxY0x1IDFjTXUgMWNMdSAxZkF1IDFjTHUgMWNNdSAxY0x1IDFjTXUgMWNMdSAxY011IDFjTHUgMWNNdSAxY0x1IDFjTXUgMWZ6dSAxY011IDFjTHUgMWNNdSAxY0x1IDFjTXUgMWNMdSAxY011IDFjTHUgMWNNdSAxY0x1IDFmQXUgMWNMdSAxY011IDFjTHUgMWNNdSAxY0x1IDFjTXUgMWNMdSAxY011IDFjTHUgMWNNdSAxY0x1IDFmQXUgMWNMdSAxY011IDFjTHUgMWNNdSAxY0x1IDFjTXUgMWNMdSAxY011IDFjTHUgMWZBdSAxY0x1IDFjTXUgMWNMdSAxY011IDFjTHUgMWNNdSAxY0x1IDFjTXUgMWNMdSAxY011IDFjTHUgMWZBdSAxY0x1IDFjTXUgMWNMdSAxY011IDFjTHUgMWNNdSAxY0x1IDFjTXUgMWNMdSAxY011IDFmenUgMWNNdSAxY0x1IDFjTXUgMWNMdSAxY011IDFjTHUgMWNNdSAxY0x1IDFjTXUgMWNMdSAxZkF1IDFjTHUgMWNNdSAxY0x1IDFjTXUgMWNMdSAxY011IDFjTHUgMWNNdSAxY0x1IDFjTXUgMWNMdSAxZkF1IDFjTHUgMWNNdSAxY0x1IDFjTXUgMWNMdSAxY011IDFjTHUgMWNNdSAxY0x1IDFmQXUgMWNMdSAxY011IDFjTHUgMWNNdSAxY0x1IDFjTXUgMWNMdSAxY011IDFjTHUgMWNNdSAxY0x1IDFmQXUgMWNMdSAxY011IDFjTHUgMWNNdSAxY0x1IDFjTXUgMWNMdSAxY011IDFjTHUgMWNNdSAxZnp1IDFjTXUgMWNMdSAxY011IDFjTHUgMWNNdSAxY0x1IDFjTXUgMWNMdSAxY011IDFjTHUgMWZBdSAxY0x1IDFjTXUgMWNMdSAxY011IDFjTHUgMWNNdSAxY0x1IDFjTXUgMWNMdSAxY011IDFjTHUgMWZBdSAxY0x1IDFjTXUgMWNMdSAxY011IDFjTHUgMWNNdSAxY0x1IDFjTXUgMWNMdSAxZkF1IDFjTHUgMWNNdSAxY0x1IDFjTXUgMWNMdSAxY011IDFjTHUgMWNNdSAxY0x1IDFjTXUgMWNMdSAxZkF1IDFjTHUgMWNNdSAxY0x1IDFjTXUgMWNMdSAxY011IDFjTHUgMWNNdSAxY0x1IDFjTXUgMWNMdSAxZkF1IDFjTHUgMWNNdSAxY0x1IDFjTXUgMWNMdSAxY011IDFjTHUgMWNNdSAxY0x1IDFjTXUgMWNMdSAxZkF1IDFjTHUgMWNNdSAxY0x1IDFjTXUgMWNMdSAxY011IDFjTHUgMWNNdSAxY0x1IDFjTXUgMWZ6dSAxY011IDFjTHUgMWNNdSAxY0x1IDFjTXUgMWNMdSAxY011IDFjTHUgMWNNdSAxY0x1IDFmQXUgMWNMdSAxY011IDFjTHUgMWNNdSAxY0x1IDFjTXUgMWNMdSAxY011IDFjTHUgMWNNdSAxY0x1IDFmQXUgMWNMdSAxY011IDFjTHUgMWNNdSAxY0x1IDFjTXUgMWNMdSAxY011IDFjTHUgMWZBdSAxY0x1IDFjTXUgMWNMdSAxY011IDFjTHUgMWNNdSAxY0x1IDFjTXUgMWNMdSAxY011IDFjTHUgMWZBdSAxY0x1IDFjTXUgMWNMdSAxY011IDFjTHUgMWNNdSAxY0x1IDFjTXUgMWNMdSAxY011IDFmenUgMWNNdSAxY0x1IDFjTXUgMWNMdSAxY011IDFjTHUgMWNNdSAxY0x1IDFjTXUgMWNMdSAxZkF1IDFjTHUgMWNNdSAxY0x1IDFjTXUgMWNMdSAxY011IDFjTHUgMWNNdSAxY0x1IDFjTXUgMWNMdSAxZkF1IDFjTHUgMWNNdSAxY0x1IDFjTXUgMWNMdSAxY011IDFjTHUgMWNNdSAxY0x1IDFmQXUgMWNMdSAxY011IDFjTHUgMWNNdSAxY0x1IDFjTXUgMWNMdSAxY011IDFjTHUgMWNNdSAxY0x1IDFmQXUgMWNMdSAxY011IDFjTHUgMWNNdSAxY0x1IDFjTXUgMWNMdSAxY011IDFjTHUgMWNNdSAxZnp1IDFjTXUgMWNMdSAxY011IDFjTHUgMWNNdSAxY0x1IDFjTXUgMWNMdSAxY011IDFjTHUgMWZBdSAxY0x1IDFjTXUgMWNMdSAxY011IDFjTHUgMWNNdSAxY0x1IDFjTXUgMWNMdSAxY011IDFjTHUgMWZBdSAxY0x1IDFjTXUgMWNMdSAxY011IDFjTHUgMWNNdSAxY0x1IDFjTXUgMWNMdSAxZkF1IDFjTHUgMWNNdSAxY0x1IDFjTXUgMWNMdSAxY011IDFjTHUgMWNNdSAxY0x1IDFjTXUgMWNMdSAxZkF1IDFjTHUgMWNNdSAxY0x1IDFjTXUgMWNMdSAxY011IDFjTHUgMWNNdSAxY0x1IDFjTXUgMWNMdSAxZkF1IDFjTHUgMWNNdSAxY0x1IDFjTXUgMWNMdSAxY011IDFjTHUgMWNNdSAxY0x1IDFjTXUgMWNMdSAxZkF1IDFjTHUgMWNNdSAxY0x1IDFjTXUgMWNMdSAxY011IDFjTHUgMWNNdSAxY0x1IDFjTXUgMWZ6dSAxY011IDFjTHUgMWNNdSAxY0x1IDFjTXUgMWNMdSAxY011IDFjTHUgMWNNdSAxY0x1IDFmQXUgMWNMdSAxY011IDFjTHUgMWNNdSAxY0x1IDFjTXUgMWNMdSAxY011IDFjTHUgMWNNdSAxY0x1IDFmQXUgMWNMdSAxY011IDFjTHUgMWNNdSAxY0x1IDFjTXUgMWNMdSAxY011IDFjTHUgMWZBdSAxY0x1IDFjTXUgMWNMdSAxY011IDFjTHUgMWNNdSAxY0x1IDFjTXUgMWNMdSAxY011IDFjTHUgMWZBdSAxY0x1IDFjTXUgMWNMdSAxY011IDFjTHUgMWNNdSAxY0x1IDFjTXUgMWNMdSAxY011IDFmenUgMWNNdSAxY0x1IDFjTXUgMWNMdSAxY011IDFjTHUgMWNNdSAxY0x1IDFjTXUgMWNMdSAxZkF1IDFjTHUgMWNNdSAxY0x1IDFjTXUgMWNMdSAxY011IDFjTHUgMWNNdSAxY0x1IDFjTXUgMWNMdSAxZkF1IDFjTHUgMWNNdSAxY0x1IDFjTXUgMWNMdSAxY011IDFjTHUgMWNNdSAxY0x1IDFmQXUgMWNMdSAxY011IDFjTHUgMWNNdSAxY0x1IDFjTXUgMWNMdSAxY011IDFjTHUgMWNNdSAxY0x1IDFmQXUgMWNMdSAxY011IDFjTHUgMWNNdSAxY0x1IDFjTXUgMWNMdSAxY011IDFjTHUgMWNNdSAxZnp1IDFjTXUgMWNMdSAxY011IDFjTHUgMWNNdSAxY0x1IDFjTXUgMWNMdSAxY011IDFjTHUgMWZBdSAxY0x1IDFjTXUgMWNMdSAxY011IDFjTHUgMWNNdSAxY0x1IDFjTXUgMWNMdSAxY011IDFjTHUgMWZBdSAxY0x1IDFjTXUgMWNMdSAxY011IDFjTHUgMWNNdSAxY0x1IDFjTXUgMWNMdSAxZkF1IDFjTHUgMWNNdSAxY0x1IDFjTXUgMWNMdSAxY011IDFjTHUgMWNNdSAxY0x1IDFjTXUgMWNMdSAxZkF1IDFjTHUgMWNNdSAxY0x1IDFjTXUgMWNMdSAxY011IDFjTHUgMWNNdSAxY0x1IDFjTXUgMWZ6dSAxY011IDFjTHUgMWNNdSAxY0x1IDFjTXUgMWNMdSAxY011IDFjTHUgMWNNdSAxY0x1IDFmQXUgMWNMdSAxY011IDFjTHUgMWNNdSAxY0x1IDFjTXUgMWNMdSAxY011IDFjTHUgMWNNdSAxY0x1IDFmQXUgMWNMdSAxY011IDFjTHUgMWNNdSAxY0x1IDFjTXUgMWNMdSAxY011IDFjTHUgMWZBdSAxY0x1IDFjTXUgMWNMdSAxY011IDFjTHUgMWNNdSAxY0x1IDFjTXUgMWNMdSAxY011IDFjTHUgMWZBdSAxY0x1IDFjTXUgMWNMdSAxY011IDFjTHUgMWNNdSAxY0x1IDFjTXUgMWNMdSAxY011IDFmenUgMWNNdSAxY0x1IDFjTXUgMWNMdSAxY011IDFjTHUgMWNNdSAxY0x1IDFjTXUgMWNMdSAxZkF1IDFjTHUgMWNNdSAxY0x1IDFjTXUgMWNMdSAxY011IDFjTHUgMWNNdSAxY0x1IDFjTXUgMWNMdSAxZkF1IDFjTHUgMWNNdSAxY0x1IDFjTXUgMWNMdSAxY011IDFjTHUgMWNNdSAxY0x1IDFmQXUgMWNMdSAxY011IDFjTHUgMWNNdSAxY0x1IDFjTXUgMWNMdSAxY011IDFjTHUgMWNNdSAxY0x1IDFmQXUgMWNMdSAxY011IDFjTHUgMWNNdSAxY0x1IDFjTXUgMWNMdSAxY011IDFjTHUgMWNNdSAxZnp1IDFjTXUgMWNMdSAxY011IDFjTHUgMWNNdSAxY0x1IDFjTXUgMWNMdSAxY011IDFjTHUgMWZBdSAxY0x1IDFjTXUgMWNMdSAxY011IDFjTHUgMWNNdSAxY0x1IDFjTXUgMWNMdSAxY011IDFjTHUgMWZBdSAxY0x1IDFjTXUgMWNMdSAxY011IDFjTHUgMWNNdSAxY0x1IDFjTXUgMWNMdSAxZkF1IDFjTHUgMWNNdSAxY0x1IDFjTXUgMWNMdSAxY011IDFjTHUgMWNNdSAxY0x1IDFjTXUgMWNMdSAxZkF1IDFjTHUgMWNNdSAxY0x1IDFjTXUgMWNMdSAxY011IDFjTHUgMWNNdSAxY0x1IDFjTXUgMWZ6dSAxY011IDFjTHUgMWNNdSAxY0x1IDFjTXUgMWNMdSAxY011IDFjTHUgMWNNdSAxY0x1IDFmQXUgMWNMdSAxY011IDFjTHUgMWNNdSAxY0x1IDFjTXUgMWNMdSAxY011IDFjTHUgMWNNdSAxY0x1IDFmQXUgMWNMdSAxY011IDFjTHUgMWNNdSAxY0x1IDFjTXUgMWNMdSAxY011IDFjTHUgMWZBdSAxY0x1IDFjTXUgMWNMdSAxY011IDFjTHUgMWNNdXwzNDdcIixcbiAgXCJBdXN0cmFsaWEvTGluZGVtYW58TE1UIEFFU1QgQUVEVHwtOVQuVSAtYTAgLWIwfDAxMjEyMTIxMjEyMTIxMjEyMTIxMjF8LTMyQmxULlUgUnkxVC5VIHhjMCAxMGpjMCB5TTAgMWNNMCAxY00wIDFmQTAgMWEwMCAxN2MwMCBMQTAgSDFBMCBPbzAgMXpjMCBPbzAgMXpjMCBPbzAgMXpjMCBSYzAgMXpjMCBPbzB8MTBcIixcbiAgXCJBdXN0cmFsaWEvTWVsYm91cm5lfExNVCBBRVNUIEFFRFR8LTlELlEgLWEwIC1iMHwwMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMnwtMzJvVkQuUSBSbEJELlEgeGMwIDEwamMwIHlNMCAxY00wIDFjTTAgMWZBMCAxYTAwIDE3YzAwIExBMCAxQzAwIE9vMCAxemMwIE9vMCAxemMwIE9vMCAxemMwIFJjMCAxemMwIE9vMCAxemMwIE9vMCAxemMwIE9vMCAxemMwIE9vMCAxemMwIE9vMCAxemMwIFJjMCAxemMwIE9vMCAxemMwIE9vMCAxemMwIE9vMCAxemMwIFUwMCAxcU0wIFdNMCAxcU0wIDExQTAgMXRBMCBVMDAgMXRBMCBVMDAgMXRBMCBPbzAgMXpjMCBPbzAgMXpjMCBSYzAgMXpjMCBPbzAgMXpjMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDExQTAgMW8wMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCBXTTAgMXFNMCAxNG8wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxZkEwIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxZkEwIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWZBMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFmQTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFmQTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWZBMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWZBMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFmQTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxZkEwIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxZkEwIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFmQTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFmQTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxZkEwIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWZBMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWZBMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxZkEwIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWZBMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxZkEwIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxZkEwIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWZBMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFmQTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFmQTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWZBMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWZBMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFmQTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxZkEwIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxZkEwIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFmQTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFmQTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxZkEwIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWZBMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWZBMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxZkEwIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxZkEwIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxZkEwIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxZkEwIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWZBMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFmQTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFmQTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWZBMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWZBMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFmQTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxZkEwIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxZkEwIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFmQTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFmQTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxZkEwIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWZBMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWZBMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxZkEwIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxZkEwIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxZkEwIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxZkEwIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWZBMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFmQTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFmQTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWZBMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWZBMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFmQTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxZkEwIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxZkEwIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFmQTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFmQTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxZkEwIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWZBMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWZBMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxZkEwIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxZkEwIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWZBMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFmQTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFmQTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWZBMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWZBMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFmQTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxZkEwIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxZkEwIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFmQTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFmQTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxZkEwIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWZBMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWZBMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxZkEwIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxZkEwIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWZBMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFmQTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFmQTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWZBMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMHwzOWU1XCIsXG4gIFwiQXVzdHJhbGlhL1BlcnRofExNVCBBV1NUIEFXRFR8LTdILm8gLTgwIC05MHwwMTIxMjEyMTIxMjEyMTIxMjEyMXwtMzBuSEgubyBQa3BILm8geGMwIDEwamMwIHlNMCAxY00wIDFjTTAgMWdTbzAgT28wIGw1QTAgT28wIGlKQTAgRzAwIHpVMDAgSU0wIDFxTTAgMTFBMCAxbzAwIDExQTB8MThlNVwiLFxuICBcIkV1cm9wZS9CcnVzc2Vsc3xMTVQgQk1UIFdFVCBDRVQgQ0VTVCBXRVNUfC1oLnUgLWgudSAwIC0xMCAtMjAgLTEwfDAxMjM0MzQzNDMyNTI1MjUyNTI1MjUyNTI1MjUyNTI1MjUyNTI1MjUyNTI1MjUyNTI1MjUyNTQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0M3wtM0Q4TWgudSB1MUFoLnUgU08wMCAzelgwIDExYzAgMWlPMCAxMUEwIDFvMDAgMTFBMCBteTAgSWMwIDFxTTAgUmMwIDFFTTAgVU0wIDF1MDAgMTBvMCAxaW8wIDFpbzAgMTdjMCAxYTAwIDFmQTAgMWNNMCAxY00wIDFpbzAgMTdjMCAxZkEwIDFhMDAgMWlvMCAxYTMwIDFpbzAgMTdjMCAxZkEwIDFhMDAgMWlvMCAxN2MwIDFjTTAgMWNNMCAxYTAwIDFpbzAgMWNNMCAxY00wIDFhMDAgMWZBMCAxaW8wIDE3YzAgMWNNMCAxY00wIDFhMDAgMWZBMCAxaW8wIDFxTTAgRGMwIHkwMCA1V24wIFdNMCAxZkEwIDFjTTAgMTZNMCAxaU0wIDE2TTAgMUMwMCBVbzAgMWVlbzAgMWEwMCAxZkEwIDFjTTAgMWNNMCAxY00wIDFmQTAgMWEwMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFmQTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFmQTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxZkEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFvMDB8MjFlNVwiLFxuICBcIlBhY2lmaWMvRWFzdGVyfExNVCBFTVQgLTA3IC0wNiAtMDV8N2gucyA3aC5zIDcwIDYwIDUwfDAxMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzR8LTNlTHNHLncgMUhSYzAgMXM0SUcudyBXTDAgMXpkMCBPbjAgMWlwMCAxMXowIDFvMTAgMTF6MCAxcU4wIFdMMCAxbGQwIDE0bjAgMXFOMCBXTDAgMXFOMCAxMXowIDFvMTAgMTF6MCAxbzEwIDExejAgMXFOMCBXTDAgMXFOMCBXTDAgMXFOMCAxMXowIDFvMTAgMnBBMCAxMXowIDFvMTAgMTF6MCAxcU4wIFdMMCAxcU4wIFdMMCAxcU4wIDFjTDAgMWNOMCAxMXowIDFvMTAgMTF6MCAxcU4wIFdMMCAxZkIwIDE5WDAgMXFOMCAxMXowIDFvMTAgMTF6MCAxbzEwIDExejAgMW8xMCAxMXowIDFxTjAgV0wwIDFxTjAgMTdiMCAxaXAwIDExejAgMWlwMCAxZnowIDFmQjAgMTF6MCAxcU4wIFdMMCAxcU4wIFdMMCAxcU4wIFdMMCAxcU4wIDExejAgMW8xMCAxMXowIDFvMTAgMTF6MCAxcU4wIFdMMCAxcU4wIDE3YjAgMWlwMCAxMXowIDFvMTAgMTlYMCAxZkIwIDFuWDAgRzEwIDFFTDAgT3AwIDF6YjAgUmQwIDF3bjAgUmQwIDQ2bjAgQXAwIDFOYjAgQXAwIDFOYjAgQXAwIDF6YjAgMTFCMCAxblgwIDExQjAgMW5YMCAxMUIwIDFuWDAgMTRwMCAxbGIwIDExQjAgMXFMMCAxMUIwIDFuWDAgMTFCMCAxblgwIDExQjAgMW5YMCAxMUIwIDFuWDAgMTFCMCAxcUwwIFdOMCAxcUwwIDExQjAgMW5YMCAxMUIwIDFuWDAgMTFCMCAxblgwIDExQjAgMW5YMCAxMUIwIDFxTDAgV04wIDFxTDAgMTFCMCAxblgwIDExQjAgMW5YMCAxMUIwIDFuWDAgMTFCMCAxcUwwIFdOMCAxcUwwIDExQjAgMW5YMCAxMUIwIDFuWDAgMTFCMCAxblgwIDExQjAgMW5YMCAxMUIwIDFxTDAgV04wIDFxTDAgMTFCMCAxblgwIDExQjAgMW5YMCAxMUIwIDFuWDAgMTFCMCAxblgwIDExQjAgMXFMMCAxMUIwIDFuWDAgMTFCMCAxblgwIDExQjAgMW5YMCAxMUIwIDFuWDAgMTFCMCAxcUwwIFdOMCAxcUwwIDExQjAgMW5YMCAxMUIwIDFuWDAgMTFCMCAxblgwIDExQjAgMW5YMCAxMUIwIDFxTDAgV04wIDFxTDAgMTFCMCAxblgwIDExQjAgMW5YMCAxMUIwIDFuWDAgMTFCMCAxcUwwIFdOMCAxcUwwIDExQjAgMW5YMCAxMUIwIDFuWDAgMTFCMCAxblgwIDExQjAgMW5YMCAxMUIwIDFxTDAgV04wIDFxTDAgMTFCMCAxblgwIDExQjAgMW5YMCAxMUIwIDFuWDAgMTFCMCAxblgwIDExQjAgMXFMMCAxMUIwIDFuWDAgMTFCMCAxblgwIDExQjAgMW5YMCAxMUIwIDFuWDAgMTFCMCAxcUwwIFdOMCAxcUwwIDExQjAgMW5YMCAxMUIwIDFuWDAgMTFCMCAxblgwIDExQjAgMW5YMCAxMUIwIDFxTDAgV04wIDFxTDAgMTFCMCAxblgwIDExQjAgMW5YMCAxMUIwIDFuWDAgMTFCMCAxcUwwIFdOMCAxcUwwIDExQjAgMW5YMCAxMUIwIDFuWDAgMTFCMCAxblgwIDExQjAgMW5YMCAxMUIwIDFuWDAgMTFCMCAxcUwwIFdOMCAxcUwwIDExQjAgMW5YMCAxMUIwIDFuWDAgMTFCMCAxblgwIDExQjAgMXFMMCBXTjAgMXFMMCAxMUIwIDFuWDAgMTFCMCAxblgwIDExQjAgMW5YMCAxMUIwIDFuWDAgMTFCMCAxcUwwIFdOMCAxcUwwIDExQjAgMW5YMCAxMUIwIDFuWDAgMTFCMCAxblgwIDExQjAgMW5YMCAxMUIwIDFxTDAgMTFCMCAxblgwIDExQjAgMW5YMCAxMUIwIDFuWDAgMTFCMCAxblgwIDExQjAgMXFMMCBXTjAgMXFMMCAxMUIwIDFuWDAgMTFCMCAxblgwIDExQjAgMW5YMCAxMUIwIDFuWDAgMTFCMCAxcUwwIFdOMCAxcUwwIDExQjAgMW5YMCAxMUIwIDFuWDAgMTFCMCAxblgwIDExQjAgMXFMMCBXTjAgMXFMMCAxMUIwIDFuWDAgMTFCMCAxblgwIDExQjAgMW5YMCAxMUIwIDFuWDAgMTFCMCAxcUwwIFdOMCAxcUwwIDExQjAgMW5YMCAxMUIwIDFuWDAgMTFCMCAxblgwIDExQjAgMW5YMCAxMUIwIDFxTDAgMTFCMCAxblgwIDExQjAgMW5YMCAxMUIwIDFuWDAgMTFCMCAxblgwIDExQjAgMXFMMCBXTjAgMXFMMCAxMUIwIDFuWDAgMTFCMCAxblgwIDExQjAgMW5YMCAxMUIwIDFuWDAgMTFCMCAxcUwwIFdOMCAxcUwwIDExQjAgMW5YMCAxMUIwIDFuWDAgMTFCMCAxblgwIDExQjAgMXFMMCBXTjAgMXFMMCAxMUIwIDFuWDAgMTFCMCAxblgwIDExQjAgMW5YMCAxMUIwIDFuWDAgMTFCMCAxcUwwIFdOMCAxcUwwIDExQjAgMW5YMCAxMUIwIDFuWDAgMTFCMCAxblgwIDExQjAgMW5YMCAxMUIwIDFxTDAgMTFCMCAxblgwIDExQjAgMW5YMCAxMUIwIDFuWDAgMTFCMCAxblgwIDExQjAgMXFMMCBXTjAgMXFMMCAxMUIwIDFuWDAgMTFCMCAxblgwIDExQjAgMW5YMCAxMUIwIDFuWDAgMTFCMCAxcUwwIFdOMCAxcUwwIDExQjAgMW5YMCAxMUIwIDFuWDAgMTFCMCAxblgwIDExQjAgMXFMMCBXTjAgMXFMMCAxMUIwIDFuWDAgMTFCMCAxblgwIDExQjAgMW5YMCAxMUIwIDFuWDAgMTFCMCAxcUwwIFdOMCAxcUwwIDExQjAgMW5YMCAxMUIwIDFuWDAgMTFCMCAxblgwIDExQjAgMW5YMCAxMUIwIDFxTDAgV04wIDFxTDAgMTFCMCAxblgwIDExQjAgMW5YMCAxMUIwIDFuWDAgMTFCMCAxblgwIDExQjAgMXFMMCBXTjAgMXFMMCAxMUIwIDFuWDAgMTFCMCAxblgwIDExQjAgMW5YMCAxMUIwIDFuWDAgMTFCMCAxcUwwIDExQjAgMW5YMCAxMUIwIDFuWDAgMTFCMCAxblgwIDExQjAgMW5YMCAxMUIwIDFxTDAgV04wIDFxTDAgMTFCMCAxblgwIDExQjAgMW5YMCAxMUIwIDFuWDAgMTFCMCAxblgwIDExQjAgMXFMMCBXTjAgMXFMMCAxMUIwIDFuWDAgMTFCMCAxblgwIDExQjAgMW5YMCAxMUIwIDFxTDAgV04wIDFxTDAgMTFCMCAxblgwIDExQjAgMW5YMCAxMUIwIDFuWDAgMTFCMCAxblgwIDExQjAgMXFMMCBXTjAgMXFMMCAxMUIwIDFuWDAgMTFCMCAxblgwIDExQjAgMW5YMCAxMUIwIDFuWDAgMTFCMCAxcUwwIDExQjAgMW5YMCAxMUIwIDFuWDAgMTFCMCAxblgwIDExQjAgMW5YMCAxMUIwIDFxTDAgV04wIDFxTDAgMTFCMCAxblgwIDExQjAgMW5YMCAxMUIwIDFuWDAgMTFCMCAxblgwIDExQjAgMXFMMCBXTjAgMXFMMCAxMUIwIDFuWDAgMTFCMCAxblgwIDExQjAgMW5YMCAxMUIwIDFxTDAgV04wIDFxTDAgMTFCMCAxblgwIDExQjAgMW5YMCAxMUIwIDFuWDAgMTFCMCAxblgwIDExQjAgMXFMMCBXTjAgMXFMMCAxMUIwIDFuWDAgMTFCMCAxblgwIDExQjAgMW5YMCAxMUIwIDFuWDAgMTFCMCAxcUwwIDExQjAgMW5YMCAxMUIwIDFuWDAgMTFCMCAxblgwIDExQjAgMW5YMCAxMUIwIDFxTDAgV04wIDFxTDAgMTFCMCAxblgwIDExQjAgMW5YMCAxMUIwIDFuWDAgMTFCMCAxblgwIDExQjAgMXFMMCBXTjAgMXFMMCAxMUIwIDFuWDAgMTFCMCAxblgwIDExQjAgMW5YMCAxMUIwIDFxTDAgV04wIDFxTDAgMTFCMCAxblgwIDExQjAgMW5YMCAxMUIwIDFuWDAgMTFCMCAxblgwIDExQjAgMXFMMCBXTjAgMXFMMCAxMUIwIDFuWDAgMTFCMCAxblgwIDExQjAgMW5YMCAxMUIwIDFuWDAgMTFCMCAxcUwwIFdOMCAxcUwwIDExQjAgMW5YMCAxMUIwIDFuWDAgMTFCMCAxblgwIDExQjAgMW5YMCAxMUIwIDFxTDAgV04wIDFxTDAgMTFCMCAxblgwIDExQjAgMW5YMCAxMUIwIDFuWDAgMTFCMCAxblgwIDExQjAgMXFMMCAxMUIwIDFuWDAgMTFCMCAxblgwIDExQjAgMW5YMCAxMUIwIDFuWDAgMTFCMCAxcUwwIFdOMCAxcUwwIDExQjAgMW5YMCAxMUIwIDFuWDAgMTFCMCAxblgwIDExQjAgMW5YMCAxMUIwIDFxTDAgV04wIDFxTDAgMTFCMCAxblgwIDExQjAgMW5YMCAxMUIwIDFuWDAgMTFCMCAxcUwwIFdOMCAxcUwwIDExQjAgMW5YMCAxMUIwIDFuWDAgMTFCMCAxblgwIDExQjAgMW5YMCAxMUIwIDFxTDAgV04wIDFxTDAgMTFCMCAxblgwIDExQjAgMW5YMCAxMUIwIDFuWDAgMTFCMCAxblgwIDExQjAgMXFMMCAxMUIwIDFuWDAgMTFCMCAxblgwIDExQjAgMW5YMCAxMUIwIDFuWDAgMTFCMCAxcUwwIFdOMCAxcUwwIDExQjAgMW5YMCAxMUIwIDFuWDAgMTFCMCAxblgwIDExQjAgMW5YMCAxMUIwIDFxTDAgV04wIDFxTDAgMTFCMCAxblgwIDExQjAgMW5YMCAxMUIwIDFuWDAgMTFCMCAxcUwwIFdOMCAxcUwwIDExQjAgMW5YMCAxMUIwIDFuWDAgMTFCMCAxblgwIDExQjAgMW5YMCAxMUIwIDFxTDAgV04wIDFxTDAgMTFCMCAxblgwIDExQjAgMW5YMCAxMUIwIDFuWDAgMTFCMCAxblgwIDExQjAgMXFMMCAxMUIwIDFuWDAgMTFCMCAxblgwIDExQjAgMW5YMCAxMUIwIDFuWDAgMTFCMCAxcUwwIFdOMCAxcUwwIDExQjAgMW5YMCAxMUIwIDFuWDAgMTFCMCAxblgwIDExQjAgMW5YMCAxMUIwIDFxTDAgV04wIDFxTDAgMTFCMCAxblgwIDExQjAgMW5YMCAxMUIwIDFuWDAgMTFCMCAxcUwwIFdOMCAxcUwwIDExQjAgMW5YMCAxMUIwIDFuWDAgMTFCMCAxblgwIDExQjAgMW5YMCAxMUIwIDFxTDAgV04wIDFxTDAgMTFCMCAxblgwIDExQjAgMW5YMCAxMUIwIDFuWDAgMTFCMCAxblgwIDExQjAgMXFMMCAxMUIwIDFuWDAgMTFCMCAxblgwIDExQjAgMW5YMCAxMUIwIDFuWDAgMTFCMCAxcUwwIFdOMCAxcUwwIDExQjAgMW5YMCAxMUIwIDFuWDAgMTFCMCAxblgwIDExQjAgMW5YMCAxMUIwIDFxTDAgV04wIDFxTDAgMTFCMCAxblgwIDExQjAgMW5YMCAxMUIwIDFuWDAgMTFCMCAxcUwwIFdOMCAxcUwwIDExQjAgMW5YMCAxMUIwIDFuWDAgMTFCMCAxblgwIDExQjAgMW5YMCAxMUIwIDFxTDAgV04wIDFxTDAgMTFCMCAxblgwIDExQjAgMW5YMCAxMUIwIDFuWDAgMTFCMCAxblgwIDExQjAgMXFMMCAxMUIwIDFuWDAgMTFCMCAxblgwIDExQjAgMW5YMCAxMUIwIDFuWDAgMTFCMCAxcUwwIFdOMCAxcUwwIDExQjAgMW5YMCAxMUIwIDFuWDAgMTFCMCAxblgwIDExQjAgMW5YMCAxMUIwIDFxTDAgV04wIDFxTDAgMTFCMCAxblgwIDExQjAgMW5YMCAxMUIwIDFuWDAgMTFCMCAxcUwwIFdOMCAxcUwwIDExQjAgMW5YMCAxMUIwIDFuWDAgMTFCMCAxblgwIDExQjAgMW5YMCAxMUIwIDFxTDAgV04wIDFxTDAgMTFCMCAxblgwIDExQjAgMW5YMCAxMUIwIDFuWDAgMTFCMCAxblgwIDExQjAgMXFMMCAxMUIwIDFuWDAgMTFCMCAxblgwIDExQjAgMW5YMCAxMUIwIDFuWDAgMTFCMCAxcUwwIFdOMCAxcUwwIDExQjAgMW5YMCAxMUIwIDFuWDAgMTFCMCAxblgwIDExQjAgMW5YMCAxMUIwIDFxTDAgV04wIDFxTDAgMTFCMCAxblgwIDExQjAgMW5YMCAxMUIwIDFuWDAgMTFCMCAxcUwwIFdOMCAxcUwwIDExQjAgMW5YMCAxMUIwIDFuWDAgMTFCMCAxblgwIDExQjAgMW5YMCAxMUIwIDFxTDAgV04wIDFxTDAgMTFCMCAxblgwIDExQjAgMW5YMCAxMUIwIDFuWDAgMTFCMCAxblgwIDExQjAgMXFMMCAxMUIwIDFuWDAgMTFCMCAxblgwIDExQjAgMW5YMCAxMUIwIDFuWDAgMTFCMCAxcUwwIFdOMCAxcUwwIDExQjAgMW5YMCAxMUIwIDFuWDAgMTFCMCAxblgwIDExQjAgMW5YMCAxMUIwIDFxTDAgV04wIDFxTDAgMTFCMCAxblgwIDExQjAgMW5YMCAxMUIwIDFuWDAgMTFCMCAxcUwwIFdOMCAxcUwwIDExQjAgMW5YMCAxMUIwIDFuWDAgMTFCMHwzMGUyXCIsXG4gIFwiRXVyb3BlL0F0aGVuc3xMTVQgQU1UIEVFVCBFRVNUIENFU1QgQ0VUfC0xeS5RIC0xeS5RIC0yMCAtMzAgLTIwIC0xMHwwMTIzMjM0NTQ1MjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyfC0zMFNOeS5RIE9NTTEgQ05ieC5RIG1uMCBrVTEwIDliMCAzRXMwIFhhMCAxZmIwIDFkZDAgazNYMCBOejAgU0NwMCAxdmMwIFNPMCAxY00wIDFhMDAgMWFvMCAxZmMwIDFhMTAgMWZHMCAxY2cwIDFkWDAgMWJYMCAxY1EwIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFmQTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFmQTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxZkEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFvMDB8MzVlNVwiLFxuICBcIkV1cm9wZS9EdWJsaW58TE1UIERNVCBJU1QgR01UIEJTVCBJU1R8cC5sIHAubCAteS5EIDAgLTEwIC0xMHwwMTIzNDM0MzQzNDM0MzUzNTM1MzUzNTM1MzUzNTM1MzUzNTM1MzUzNTM1MzUzNTM1MzUzNTM1MzUzNTM1MzUzNTM1MzUzNTM1MzUzNTM1MzUzNTM1MzUzNTM1MzUzNTM1MzUzNTM1MzUzNTM1MzUzNTM1MzUzNTM1MzUzNTM1MzUzNTM1MzUzNTM1MzUzNTM1MzUzNTM1MzUzNTM1MzUzNTM1MzUzNTM1MzUzNTM1MzUzNTM1MzUzNTM1MzUzNTM1MzUzNTM1MzUzNTM1MzUzNTM1MzUzNTM1MzUzNTM1MzUzNTM1MzUzNTM1MzUzNTM1MzUzNTM1MzUzNTM1MzUzNTM1MzUzNTM1MzUzNTM1MzUzNTM1MzUzNTM1MzUzNTM1MzUzNTM1MzUzNTM1MzUzNTM1MzUzNTM1MzUzNTM1MzUzNTM1MzUzNTM1MzUzNTM1MzUzNTM1MzUzNTM1MzUzNTM1MzUzNTM1MzUzNTM1MzUzNTM1MzUzNTM1MzUzNTM1MzUzNTM1MzUzNTM1MzUzNTM1MzUzNTM1MzUzNTM1MzUzNTM1MzUzNTM1MzUzNTM1MzUzNTM1MzUzNTM1MzUzNTM1MzUzNTM1MzUzNTM1MzUzNTM1MzUzNTM1MzUzNTM1MzUzNTM1MzUzNTM1MzUzNTM1MzUzNTM1MzUzNTM1MzUzNTM1MzUzNTM1MzUzNTM1MzUzNTM1MzUzNTM1MzUzNTM1MzUzNTM1MzUzNTM1MzUzNTM1MzUzNTM1MzUzNTM1MzUzNTM1MzUzNTM1MzUzNTM1MzUzNTM1MzUzNTM1MzUzNTM1MzUzNTM1MzUzNTM1MzUzNTM1MzUzNTM1MzUzNTM1MzUzNTM1MzUzNTM1MzUzNTM1MzUzNTM1MzUzNTM1MzUzNTM1MzUzNTM1MzUzNTM1MzUzNTM1MzUzNTM1MzUzNTM1MzUzNTM1MzUzNTM1MzUzNTM1MzUzNTM1MzUzNTM1MzUzNTM1MzUzNTM1MzUzNTM1MzUzNTM1MzUzNTM1MzUzNTM1MzUzNTM1MzUzNTM1MzUzNTM1MzUzNTM1MzUzNTM1MzUzNTM1MzUzNTM1MzUzNTM1MzUzNTM1MzUzNTM1MzUzNTM1MzUzNTM1MzUzNTM1MzUzNTM1MzUzNTM1MzUzNTM1MzUzNTM1MzUzNTM1MzUzNTM1MzUzNTM1MzUzNTM1MzUzNTM1MzUzNTM1MzUzNTM1MzUzNTM1MzUzNTM1MzUzNTM1MzUzNTM1MzUzNTM1MzUzNTM1MzUzNTM1MzUzNTM1MzUzNTM1MzUzNTM1MzUzNTM1MzUzNTM1MzUzNTM1MzUzNTM1MzUzNTM1MzUzNTM1MzUzNTM1MzUzNTM1MzUzNTM1MzUzNTM1MzUzNTM1MzUzNTM1MzUzNTM1MzUzNTM1MzUzNTM1MzUzNTM1MzUzNTM1MzUzNTM1MzUzNTM1MzUzNTM1MzUzNTM1MzUzNTM1MzUzNTM1MzUzNTM1MzUzNTM1MzUzNTM1MzUzNTM1MzUzNTM1MzUzNTN8LTNCSGJ5LkQgMXJhMjAgUmMwIDFmenkuRCAxNE0wIDFmYzAgMWcwMCAxY28wIDFkYzAgMWNvMCAxb28wIDE0MDAgMWRjMCAxOUEwIDFpbzAgMWlvMCBXTTAgMW8wMCAxNG8wIDFvMDAgMTdjMCAxaW8wIDE3YzAgMWZBMCAxYTAwIDFsYzAgMTdjMCAxaW8wIDE3YzAgMWZBMCAxYTAwIDFpbzAgMTdjMCAxaW8wIDE3YzAgMWZBMCAxY00wIDFpbzAgMTdjMCAxZkEwIDFhMDAgMWlvMCAxN2MwIDFpbzAgMTdjMCAxZkEwIDFhMDAgMWlvMCAxcU0wIERjMCBnNjAwIDE0bzAgMXdvMCAxN2MwIDFpbzAgMTFBMCAxbzAwIDE3YzAgMWZBMCAxYTAwIDFmQTAgMWNNMCAxZkEwIDFhMDAgMTdjMCAxZkEwIDFhMDAgMWlvMCAxN2MwIDFsYzAgMTdjMCAxZkEwIDFhMDAgMWlvMCAxN2MwIDFpbzAgMTdjMCAxZkEwIDFhMDAgMWEwMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCBXTTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCBXTTAgMXRBMCBJTTAgOTBvMCBVMDAgMXRBMCBVMDAgMXRBMCBVMDAgMXRBMCBVMDAgMXRBMCBXTTAgMXFNMCBXTTAgMXFNMCBXTTAgMXRBMCBVMDAgMXRBMCBVMDAgMXRBMCAxMXowIDFvMDAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDE0bzAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMW8wMHwxMmU1XCIsXG4gIFwiRXRjL0dNVC0wfEdNVHwwfDB8fFwiLFxuICBcIkV0Yy9HTVQtMXwrMDF8LTEwfDB8fFwiLFxuICBcIkV0Yy9HTVQtMTB8KzEwfC1hMHwwfHxcIixcbiAgXCJFdGMvR01ULTExfCsxMXwtYjB8MHx8XCIsXG4gIFwiRXRjL0dNVC0xMnwrMTJ8LWMwfDB8fFwiLFxuICBcIkV0Yy9HTVQtMTN8KzEzfC1kMHwwfHxcIixcbiAgXCJFdGMvR01ULTE0fCsxNHwtZTB8MHx8XCIsXG4gIFwiRXRjL0dNVC0yfCswMnwtMjB8MHx8XCIsXG4gIFwiRXRjL0dNVC0zfCswM3wtMzB8MHx8XCIsXG4gIFwiRXRjL0dNVC00fCswNHwtNDB8MHx8XCIsXG4gIFwiRXRjL0dNVC01fCswNXwtNTB8MHx8XCIsXG4gIFwiRXRjL0dNVC02fCswNnwtNjB8MHx8XCIsXG4gIFwiRXRjL0dNVC03fCswN3wtNzB8MHx8XCIsXG4gIFwiRXRjL0dNVC04fCswOHwtODB8MHx8XCIsXG4gIFwiRXRjL0dNVC05fCswOXwtOTB8MHx8XCIsXG4gIFwiRXRjL0dNVCsxfC0wMXwxMHwwfHxcIixcbiAgXCJFdGMvR01UKzEwfC0xMHxhMHwwfHxcIixcbiAgXCJFdGMvR01UKzExfC0xMXxiMHwwfHxcIixcbiAgXCJFdGMvR01UKzEyfC0xMnxjMHwwfHxcIixcbiAgXCJFdGMvR01UKzJ8LTAyfDIwfDB8fFwiLFxuICBcIkV0Yy9HTVQrM3wtMDN8MzB8MHx8XCIsXG4gIFwiRXRjL0dNVCs0fC0wNHw0MHwwfHxcIixcbiAgXCJFdGMvR01UKzV8LTA1fDUwfDB8fFwiLFxuICBcIkV0Yy9HTVQrNnwtMDZ8NjB8MHx8XCIsXG4gIFwiRXRjL0dNVCs3fC0wN3w3MHwwfHxcIixcbiAgXCJFdGMvR01UKzh8LTA4fDgwfDB8fFwiLFxuICBcIkV0Yy9HTVQrOXwtMDl8OTB8MHx8XCIsXG4gIFwiRXRjL1VUQ3xVVEN8MHwwfHxcIixcbiAgXCJFdXJvcGUvQW5kb3JyYXxMTVQgV0VUIENFVCBDRVNUfC02LjQgMCAtMTAgLTIwfDAxMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzJ8LTJNME02LjQgMVBuYzYuNCAxeElOMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFmQTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxZkEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFvMDB8NzllM1wiLFxuICBcIkV1cm9wZS9Bc3RyYWtoYW58TE1UICswMyArMDQgKzA1fC0zYy5jIC0zMCAtNDAgLTUwfDAxMjMyMzIzMjMyMzIzMjMyMzIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMnwtMVBjcmMuYyBlVU1jLmMgMjNDTDAgMWRiMCAxY04wIDFkYjAgMWNOMCAxZGIwIDFkZDAgMWNPMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMnBCMCAxY00wIDFmQTAgMWNNMCAzQ28wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFmQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgOEh6MCAzcmQwfDEwZTVcIixcbiAgXCJFdXJvcGUvTG9uZG9ufExNVCBHTVQgQlNUIEJEU1R8MS5mIDAgLTEwIC0yMHwwMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIzMjMyMzIzMjMyMTIxMjMyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMXwtNFZnblcuSiAyS0hkVy5KIFJjMCAxZkEwIDE0TTAgMWZjMCAxZzAwIDFjbzAgMWRjMCAxY28wIDFvbzAgMTQwMCAxZGMwIDE5QTAgMWlvMCAxaW8wIFdNMCAxbzAwIDE0bzAgMW8wMCAxN2MwIDFpbzAgMTdjMCAxZkEwIDFhMDAgMWxjMCAxN2MwIDFpbzAgMTdjMCAxZkEwIDFhMDAgMWlvMCAxN2MwIDFpbzAgMTdjMCAxZkEwIDFjTTAgMWlvMCAxN2MwIDFmQTAgMWEwMCAxaW8wIDE3YzAgMWlvMCAxN2MwIDFmQTAgMWEwMCAxaW8wIDFxTTAgRGMwIDJSejAgRGMwIDF6YzAgT28wIDF6YzAgUmMwIDF3bzAgMTdjMCAxaU0wIEZBMCB4QjAgMWZBMCAxYTAwIDE0bzAgYmIwIExBMCB4QjAgUmMwIDF3bzAgMTFBMCAxbzAwIDE3YzAgMWZBMCAxYTAwIDFmQTAgMWNNMCAxZkEwIDFhMDAgMTdjMCAxZkEwIDFhMDAgMWlvMCAxN2MwIDFsYzAgMTdjMCAxZkEwIDFhMDAgMWlvMCAxN2MwIDFpbzAgMTdjMCAxZkEwIDFhMDAgMWEwMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCBXTTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCBXTTAgMXRBMCBJTTAgOTBvMCBVMDAgMXRBMCBVMDAgMXRBMCBVMDAgMXRBMCBVMDAgMXRBMCBXTTAgMXFNMCBXTTAgMXFNMCBXTTAgMXRBMCBVMDAgMXRBMCBVMDAgMXRBMCAxMXowIDFvMDAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDE0bzAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMW8wMHwxMGU2XCIsXG4gIFwiRXVyb3BlL0JlbGdyYWRlfExNVCBDRVQgQ0VTVHwtMW0gLTEwIC0yMHwwMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjF8LTN0b3BtIDJqdUxtIDNJUDAgV00wIDFmQTAgMWNNMCAxY00wIDFyYzAgUW8wIDF2bW8wIDFjTTAgMWNNMCAxZkEwIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxZkEwIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWZBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxbzAwfDEyZTVcIixcbiAgXCJFdXJvcGUvUHJhZ3VlfExNVCBQTVQgQ0VUIENFU1QgR01UfC1WLkkgLVYuSSAtMTAgLTIwIDB8MDEyMzIzMjMyMzIzMjMyMzIzMjQyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMnwtNFFiQVYuSSAxRkRjMCBYUGFWLkkgMTFkMCAxaU8wIDExQTAgMW8wMCAxMUEwIFFyYzAgNmkwMCBXTTAgMWZBMCAxY00wIDFjTTAgMWNNMCAxY00wIDFxTTAgMTFjMCBtcDAgeEEwIG1uMCAxN2MwIDFpbzAgMTdjMCAxZmMwIDFhbzAgMWJOYzAgMWNNMCAxZkEwIDFhMDAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxZkEwIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxZkEwIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWZBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxbzAwfDEzZTVcIixcbiAgXCJFdXJvcGUvQnVjaGFyZXN0fExNVCBCTVQgRUVUIEVFU1R8LTFJLm8gLTFJLm8gLTIwIC0zMHwwMTIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMnwtM2F3cEkubyAxQVUwMCAyMExJLm8gUkEwIDFjTTAgMWNNMCAxZkEwIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxQXhjMCBPbjAgMWZBMCAxYTEwIDFjTzAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWZBMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWZBMCAxY0swIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTDAgMWNOMCAxY0wwIDFmQjAgMW5YMCAxMUUwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMW8wMHwxOWU1XCIsXG4gIFwiRXVyb3BlL0J1ZGFwZXN0fExNVCBDRVQgQ0VTVHwtMWcuayAtMTAgLTIwfDAxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxfC0zY0sxZy5rIDEyNExnLmsgMTFkMCAxaU8wIDExQTAgMW8wMCAxMUEwIDFvbzAgMTFjMCAxbGMwIDE3YzAgTzFWMCAzTmYwIFdNMCAxZkEwIDFjTTAgMWNNMCAxb0owIDFkZDAgMTAyMCAxZlgwIDFjcDAgMWNNMCAxY00wIDFjTTAgMWZBMCAxYTAwIGJoeTAgUmIwIDF3cjAgUmMwIDFDMDAgTEEwIDFDMDAgTEEwIFNOVzAgMWEwMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY08wIDFmQTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFmQTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxZkEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFvMDB8MTdlNVwiLFxuICBcIkV1cm9wZS9adXJpY2h8TE1UIEJNVCBDRVQgQ0VTVHwteS44IC10LksgLTEwIC0yMHwwMTIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyfC00SHlNeS44IDFEdzA0Lm0gMVNmQXQuSyAxMUEwIDFvMDAgMTFBMCAxeEcxMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxZkEwIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxZkEwIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWZBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxbzAwfDM4ZTRcIixcbiAgXCJFdXJvcGUvQ2hpc2luYXV8TE1UIENNVCBCTVQgRUVUIEVFU1QgQ0VTVCBDRVQgTVNLIE1TRHwtMVQuayAtMVQgLTFJLm8gLTIwIC0zMCAtMjAgLTEwIC0zMCAtNDB8MDEyMzQzNDM0MzQzNDM0MzQzNDM0NTY1NjU3ODc4Nzg3ODc4Nzg3ODc4Nzg3ODQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0M3wtM0Q4TlQuayAxd05BMC5rIHdHTWEuQSAyMExJLm8gUkEwIDFjTTAgMWNNMCAxZkEwIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAyN0EwIDJlbjAgMzlnMCBXTTAgMWZBMCAxY00wIFY5MCAxdDd6MCAxZGIwIDFjTjAgMWRiMCAxY04wIDFkYjAgMWRkMCAxY08wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCBnTDAgV08wIDFjTTAgMWNNMCAxY0swIDFjTDAgMWNOMCAxY0wwIDFjTjAgMWNMMCAxY04wIDFjTDAgMWZCMCAxblgwIDExRDAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxbzAwfDY3ZTRcIixcbiAgXCJFdXJvcGUvR2licmFsdGFyfExNVCBHTVQgQlNUIEJEU1QgQ0VUIENFU1R8bC5vIDAgLTEwIC0yMCAtMTAgLTIwfDAxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjMyMzIzMjMyMzIxMjEyMzIxMjEyMTIxMjEyMTIxMjEyMTIxNDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTR8LTNCSGJDLkEgMXJhMUMuQSBSYzAgMWZBMCAxNE0wIDFmYzAgMWcwMCAxY28wIDFkYzAgMWNvMCAxb28wIDE0MDAgMWRjMCAxOUEwIDFpbzAgMWlvMCBXTTAgMW8wMCAxNG8wIDFvMDAgMTdjMCAxaW8wIDE3YzAgMWZBMCAxYTAwIDFsYzAgMTdjMCAxaW8wIDE3YzAgMWZBMCAxYTAwIDFpbzAgMTdjMCAxaW8wIDE3YzAgMWZBMCAxY00wIDFpbzAgMTdjMCAxZkEwIDFhMDAgMWlvMCAxN2MwIDFpbzAgMTdjMCAxZkEwIDFhMDAgMWlvMCAxcU0wIERjMCAyUnowIERjMCAxemMwIE9vMCAxemMwIFJjMCAxd28wIDE3YzAgMWlNMCBGQTAgeEIwIDFmQTAgMWEwMCAxNG8wIGJiMCBMQTAgeEIwIFJjMCAxd28wIDExQTAgMW8wMCAxN2MwIDFmQTAgMWEwMCAxZkEwIDFjTTAgMWZBMCAxYTAwIDE3YzAgMWZBMCAxYTAwIDFpbzAgMTdjMCAxbGMwIDE3YzAgMWZBMCAxMEp6MCAxY00wIDFjTTAgMWNNMCAxY00wIDFmQTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFmQTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxZkEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFvMDB8MzBlM1wiLFxuICBcIkV1cm9wZS9IZWxzaW5raXxMTVQgSE1UIEVFVCBFRVNUfC0xRC5OIC0xRC5OIC0yMCAtMzB8MDEyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzJ8LTNIME5ELk4gMUl1MDAgT1VMRC5OIDFkQTAgMXhHcTAgMWNNMCAxY00wIDFjTTAgMWNOMCAxY00wIDFjTTAgMWZBMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWZBMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFmQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMW8wMHwxMmU1XCIsXG4gIFwiRXVyb3BlL0thbGluaW5ncmFkfExNVCBDRVQgQ0VTVCBFRVQgRUVTVCBNU0sgTVNEICswM3wtMW0gLTEwIC0yMCAtMjAgLTMwIC0zMCAtNDAgLTMwfDAxMjEyMTIxMjEyMTIxMjM0MzU2NTY1NjU2NTY1NjU2NTY1NDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNDM3M3wtMzZSZG0gVWJYbSAxMWQwIDFpTzAgMTFBMCAxbzAwIDExQTAgUXJjMCA2aTAwIFdNMCAxZkEwIDFjTTAgMWNNMCAxY00wIDM5MCA3QTAgMWVuMCAxMk4wIDFwYmIwIDFkYjAgMWNOMCAxZGIwIDFjTjAgMWRiMCAxZGQwIDFjTzAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNOMCAxY00wIDFmQTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxZkEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDhIejB8NDRlNFwiLFxuICBcIkV1cm9wZS9LaWV2fExNVCBLTVQgRUVUIE1TSyBDRVNUIENFVCBNU0QgRUVTVHwtMjIuNCAtMjIuNCAtMjAgLTMwIC0yMCAtMTAgLTQwIC0zMHwwMTIzNDU0NTM2MzYzNjM2MzYzNjM2MzYzNjM2NzI3MjcyNzI3MjcyNzI3MjcyNzI3MjcyNzI3MjcyNzI3MjcyNzI3MjcyNzI3MjcyNzI3MjcyNzI3MjcyNzI3MjcyNzI3MjcyNzI3MjcyNzI3MjcyNzI3MjcyNzI3MjcyNzI3MjcyNzI3MjcyNzI3MjcyNzI3MjcyNzI3MjcyNzI3MjcyNzI3MjcyNzI3MjcyNzI3MjcyNzI3MjcyNzI3MjcyNzI3MjcyNzI3MjcyNzI3MjcyNzI3MjcyNzI3MjcyNzI3MjcyNzI3MjcyNzI3MjcyNzI3MjcyNzI3MjcyNzI3MjcyNzI3MjcyNzI3MjcyNzI3MjcyNzI3MjcyNzI3MjcyNzI3MjcyNzI3MjcyNzI3MjcyNzI3MjcyNzI3MjcyNzI3MjcyNzI3MjcyNzI3MjcyNzI3MjcyNzI3MjcyNzI3MjcyNzI3MjcyNzI3MjcyNzI3MjcyNzI3MjcyNzI3MjcyNzI3MjcyNzI3MjcyNzI3MjcyNzI3MjcyNzI3MjcyNzI3MjcyNzI3MjcyNzI3MjcyNzI3MjcyNzI3MjcyNzI3MjcyNzI3MjcyNzI3MjcyNzI3MjcyNzI3MjcyNzI3MjcyNzI3MjcyNzI3MjcyNzI3MjcyNzI3MjcyNzI3MjcyNzI3MjcyNzI3MjcyNzI3MjcyNzI3MjcyNzI3MjcyNzI3MjcyNzI3MjcyNzI3MjcyNzI3MjcyNzI3MjcyNzI3MjcyNzI3MjcyNzI3MjcyNzI3MjcyNzI3MjcyNzI3MjcyNzI3MjcyNzI3MjcyNzI3MjcyNzI3MjcyNzI3MjcyNzI3MjcyNzI3MjcyNzI3MjcyNzI3MjcyNzI3MjcyNzI3MjcyNzI3MjcyNzI3MjcyNzI3MjcyNzI3MjcyNzI3MjcyNzI3MjcyNzI3MjcyNzI3MjcyNzI3MjcyNzI3MjcyNzI3MjcyNzI3MjcyNzI3MjcyNzI3MjcyNzI3MjcyNzI3MjcyNzI3MjcyNzI3MjcyNzI3MjcyNzI3MjcyNzI3MjcyNzI3MjcyNzI3MjcyNzI3MjcyNzI3MjcyNzI3MjcyNzI3MjcyNzI3MjcyNzI3MjcyNzI3MjcyNzI3MjcyNzI3MjcyNzI3MjcyNzI3MjcyNzI3MjcyNzI3MjcyNzI3MjcyNzI3MjcyNzI3MjcyNzI3MjcyNzI3MjcyNzI3MjcyNzI3MjcyNzI3MjcyNzI3MjcyNzI3MjcyNzI3MjcyNzI3MjcyNzI3MjcyNzI3MjcyNzI3MjcyNzI3MjcyNzI3MjcyNzI3MjcyNzI3MjcyNzI3MjcyNzI3MjcyNzI3MjcyNzI3MjcyNzI3MjcyNzI3MjcyNzI3MjcyNzI3MnwtM0Q4TzIuNCAxTFVNMCBlVW8yLjQgcm56MCAySGcwIFdNMCAxZkEwIGRhMCAxdjRtMCAxZGIwIDFjTjAgMWRiMCAxY04wIDFkYjAgMWRkMCAxY08wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCBEYjAgMzIyMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWZBMCAxbzEwIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxbzAwfDM0ZTVcIixcbiAgXCJFdXJvcGUvS2lyb3Z8TE1UICswMyArMDQgKzA1IE1TRCBNU0sgTVNLfC0zaS5NIC0zMCAtNDAgLTUwIC00MCAtMzAgLTQwfDAxMjMyMzIzMjMyMzIzMjMyMzI0NTQ1MjQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NjV8LTIyV00wIHFIOTAgMjNDTDAgMWRiMCAxY04wIDFkYjAgMWNOMCAxZGIwIDFkZDAgMWNPMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY04wIDFjTTAgMWZBMCAxY00wIDJwejAgMWNOMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxZkEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDhIejB8NDhlNFwiLFxuICBcIkV1cm9wZS9MaXNib258TE1UIFdFVCBXRVNUIFdFTVQgQ0VUIENFU1R8QS5KIDAgLTEwIC0yMCAtMTAgLTIwfDAxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjMyMTIzMjEyMzIxMjMyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyNDEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyNDU0NTQ1NDIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMXwtMmxlMDAgYVBYMCBTcDAgTTAwIDF2YjAgU04wIDF2YjAgU04wIDF2YjAgVGQwIDF2YjAgU04wIDF2YjAgNjYwMCAxOG8wIDNJMDAgMTdjMCAxZkEwIDFhMDAgMWlvMCAxYTAwIDFpbzAgMTdjMCAzSTAwIDE3YzAgMWNNMCAxY00wIDNGYzAgMWNNMCAxYTAwIDFmQTAgMWlvMCAxN2MwIDFjTTAgMWNNMCAxYTAwIDFmQTAgMWlvMCAxcU0wIERjMCAxdW8wIDFjMDAgMWRjMCAxNDAwIGdMMCBJTTAgczEwIFUwMCBkWDAgUmMwIHBkMCBSYzAgZ0wwIE9vMCBwZDAgUmMwIGdMMCBPbzAgcGQwIDE0bzAgMWNNMCAxY1AwIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxZkEwIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFmQTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFmQTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIG9pSzAgMWNNMCAxY00wIDFmQjAgMWNNMCAxY00wIDFjTTAgMWZBMCAxYTAwIDFjTDAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWZBMCAxY00wIDFjTTAgMWNOMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWZBMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFmQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMW8wMHwyN2U1XCIsXG4gIFwiRXVyb3BlL01hZHJpZHxMTVQgV0VUIFdFU1QgV0VNVCBDRVQgQ0VTVHxlLkkgMCAtMTAgLTIwIC0xMCAtMjB8MDEyMTIxMjEyMTIxMjEyMTIxMjMyMTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NHwtMk0wTTAgRzV6MCAxOUIwIDFjTDAgMWRkMCBiMXowIDE4cDAgM0hYMCAxN2QwIDFmejAgMWExMCAxaW8wIDFhMDAgMWluMCAxN2QwIGlJbjAgSGQwIDFjTDAgYmIwIDEyMDAgMnMyMCAxNG4wIDVhTDAgTXAwIDF2ejAgMTdkMCAxaW4wIDE3ZDAgMWluMCAxN2QwIDFpbjAgMTdkMCA2aFgwIDExQjAgWEhYMCAxYTEwIDFmejAgMWExMCAxOVgwIDFjTjAgMWZ6MCAxYTEwIDFmQzAgMWNNMCAxY00wIDFjTTAgMWZBMCAxYTAwIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWZBMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWZBMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFmQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMW8wMHw2MmU1XCIsXG4gIFwiRXVyb3BlL01hbHRhfExNVCBDRVQgQ0VTVHwtVy40IC0xMCAtMjB8MDEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjF8LTM1cmNXLjQgU1h6Vy40IEx6MCAxY04wIDFkYjAgMTQxMCAxb24wIFdwMCAxcUwwIDE3ZDAgMWNMMCBNM0IwIDVNMjAgV00wIDFmQTAgMWNvMCAxN2MwIDFpTTAgMTZtMCAxZGUwIDFsYzAgMTRtMCAxbGMwIFdPMCAxcU0wIEdUVzAgT24wIDFDMTAgTEEwIDFDMDAgTEEwIDFFTTAgTEEwIDFDMDAgTEEwIDF6YzAgT28wIDFDMDAgT28wIDFjbzAgMWNNMCAxbEEwIFhjMCAxcXEwIDExejAgMW8xMCAxMXowIDFvMTAgMTF6MCAxbzEwIDExejAgMW8xMCAxMXowIDFpTjAgMTl6MCAxZkIwIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFmQTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFmQTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxZkEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFvMDB8NDJlNFwiLFxuICBcIkV1cm9wZS9NaW5za3xMTVQgTU1UIEVFVCBNU0sgQ0VTVCBDRVQgTVNEIEVFU1QgKzAzfC0xTy5nIC0xTyAtMjAgLTMwIC0yMCAtMTAgLTQwIC0zMCAtMzB8MDEyMzQ1NDU0MzYzNjM2MzYzNjM2MzYzNjM2MzcyNzI3MjcyNzI3MjcyNzI3MjcyNzI3MjcyNzI3MjcyNzI3MjcyNzI4fC0zRDhOTy5nIDFMVU0wLmcgZVVuTyBxTlgwIDNnUTAgV00wIDFmQTAgMWNNMCBBbDAgMXRzbjAgMWRiMCAxY04wIDFkYjAgMWNOMCAxZGIwIDFkZDAgMWNPMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDNGYzAgMWNOMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWZBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMHwxOWU1XCIsXG4gIFwiRXVyb3BlL1BhcmlzfExNVCBQTVQgV0VUIFdFU1QgQ0VTVCBDRVQgV0VNVHwtOS5sIC05LmwgMCAtMTAgLTIwIC0xMCAtMjB8MDEyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzQ1NDU0NjM2NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDV8LTNiUTA5LmwgTURBMCBjTmI5LmwgSEEwIDE5QTAgMWlNMCAxMWMwIDFvbzAgV28wIDFyYzAgUU0wIDFFTTAgVU0wIDF1MDAgMTBvMCAxaW8wIDF3bzAgUmMwIDFhMDAgMWZBMCAxY00wIDFjTTAgMWlvMCAxN2MwIDFmQTAgMWEwMCAxaW8wIDFhMDAgMWlvMCAxN2MwIDFmQTAgMWEwMCAxaW8wIDE3YzAgMWNNMCAxY00wIDFhMDAgMWlvMCAxY00wIDFjTTAgMWEwMCAxZkEwIDFpbzAgMTdjMCAxY00wIDFjTTAgMWEwMCAxZkEwIDFpbzAgMXFNMCBEZjAgSWswIDVNMzAgV00wIDFmQTAgMWNNMCBWeDAgaEIwIDFhcTAgMTZNMCAxZWtuMCAxY0wwIDFmQzAgMWEwMCAxZkEwIDFjTTAgMWNNMCAxY00wIDFmQTAgMWEwMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFmQTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFmQTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxZkEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFvMDB8MTFlNlwiLFxuICBcIkV1cm9wZS9Nb3Njb3d8TE1UIE1NVCBNTVQgTVNUIE1EU1QgTVNEIE1TSyArMDUgRUVUIEVFU1QgTVNLfC0ydS5oIC0ydS5oIC0ydi5qIC0zdi5qIC00di5qIC00MCAtMzAgLTUwIC0yMCAtMzAgLTQwfDAxMjMyNDM0NTY1NzU2ODY1NjU2NTY1NjU2NTY1NjU2NTY1Njk4NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2NTY1NjU2YTZ8LTNEOE91LmggMXNRTTAgMnB5Vy5XIDFiQTAgMTFYMCBHTjAgMUhiMCBjNHYuaiBpazAgM0RBMCBkejAgMTVBMCBjMTAgMnExMCBpTTEwIDIzQ0wwIDFkYjAgMWNOMCAxZGIwIDFjTjAgMWRiMCAxZGQwIDFjTzAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFmQTAgMWNNMCAxY04wIElNMCByWDAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxZkEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDhIejB8MTZlNlwiLFxuICBcIkV1cm9wZS9SaWdhfExNVCBSTVQgTFNUIEVFVCBNU0sgQ0VTVCBDRVQgTVNEIEVFU1R8LTFBLnkgLTFBLnkgLTJBLnkgLTIwIC0zMCAtMjAgLTEwIC00MCAtMzB8MDEyMTIxMzQ1NjU2NTY0NzQ3NDc0NzQ3NDc0NzQ3NDgzODM4MzgzODM4MzgzODM4MzgzODM4MzgzODM4MzgzODM4MzgzODM4MzgzODM4MzgzODM4MzgzODM4MzgzODM4MzgzODM4MzgzODM4MzgzODM4MzgzODM4MzgzODM4MzgzODM4MzgzODM4MzgzODM4MzgzODM4MzgzODM4MzgzODM4MzgzODM4MzgzODM4MzgzODM4MzgzODM4MzgzODM4MzgzODM4MzgzODM4MzgzODM4MzgzODM4MzgzODM4MzgzODM4MzgzODM4MzgzODM4MzgzODM4MzgzODM4MzgzODM4MzgzODM4MzgzODM4MzgzODM4MzgzODM4MzgzODM4MzgzODM4MzgzODM4MzgzODM4MzgzODM4MzgzODM4MzgzODM4MzgzODM4MzgzODM4MzgzODM4MzgzODM4MzgzODM4MzgzODM4MzgzODM4MzgzODM4MzgzODM4MzgzODM4MzgzODM4MzgzODM4MzgzODM4MzgzODM4MzgzODM4MzgzODM4MzgzODM4MzgzODM4MzgzODM4MzgzODM4MzgzODM4MzgzODM4MzgzODM4MzgzODM4MzgzODM4MzgzODM4MzgzODM4MzgzODM4MzgzODM4MzgzODM4MzgzODM4MzgzODM4MzgzODM4MzgzODM4MzgzODM4MzgzODM4MzgzODM4MzgzODM4MzgzODM4MzgzODM4MzgzODM4MzgzODM4MzgzODM4MzgzODM4MzgzODM4MzgzODM4MzgzODM4MzgzODM4MzgzODM4MzgzODM4MzgzODM4MzgzODM4MzgzODM4MzgzODM4MzgzODM4MzgzODM4MzgzODM4MzgzODM4MzgzODM4MzgzODM4MzgzODM4MzgzODM4MzgzODM4MzgzODM4MzgzODM4MzgzODM4MzgzODM4MzgzODM4MzgzODM4MzgzODM4MzgzODM4MzgzODM4MzgzODM4MzgzODM4MzgzODM4MzgzODM4MzgzODM4MzgzODM4MzgzODM4MzgzODM4MzgzODM4MzgzODM4MzgzODM4MzgzODM4MzgzODM4MzgzODM4MzgzODM4MzgzODM4MzgzODM4MzgzODM4MzgzODM4MzgzODM4MzgzODM4MzgzODM4MzgzODM4MzgzODM4MzgzODM4MzgzODM4MzgzODM4MzgzODM4MzgzODM4MzgzODM4MzgzODM4MzgzODM4MzgzODM4MzgzODM4MzgzODM4MzgzODM4MzgzODM4MzgzODM4MzgzODM4MzgzODM4MzgzODM4MzgzODM4MzgzODM4MzgzODM4MzgzODM4MzgzODM4MzgzODM4MzgzODM4MzgzODM4M3wtM0Q4TkEueSAxeGRlMCAxMUEwIDFpTTAga28wIGdXbTAgeURYQS55IDJiWDAgM2ZFMCBXTTAgMWZBMCAxY00wIDFjTTAgNG0wIDFzTHkwIDFkYjAgMWNOMCAxZGIwIDFjTjAgMWRiMCAxZGQwIDFjTzAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNOMCAxY00wIDFmQTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxZkEwIDFjTTAgMWNOMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgM29vMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxbzAwfDY0ZTRcIixcbiAgXCJFdXJvcGUvUm9tZXxMTVQgUk1UIENFVCBDRVNUfC1OLlUgLU4uVSAtMTAgLTIwfDAxMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMnwtNGFVME4uVSAxNXNuTi5VIFQwMDAgTHowIDFjTjAgMWRiMCAxNDEwIDFvbjAgV3AwIDFxTDAgMTdkMCAxY0wwIE0zQjAgNU0yMCBXTTAgMWZBMCAxY00wIDE2TTAgMWlNMCAxNm0wIDFkZTAgMWxjMCAxNG0wIDFsYzAgV08wIDFxTTAgR1RXMCBPbjAgMUMxMCBMQTAgMUMwMCBMQTAgMUVNMCBMQTAgMUMwMCBMQTAgMXpjMCBPbzAgMUMwMCBPbzAgMUMwMCBMQTAgMXpjMCBPbzAgMUMwMCBMQTAgMUMwMCBMQTAgMXpjMCBPbzAgMUMwMCBPbzAgMXpjMCBPbzAgMWZDMCAxYTAwIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWZBMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWZBMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFmQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMW8wMHwzOWU1XCIsXG4gIFwiRXVyb3BlL1NhbWFyYXxMTVQgKzAzICswNCArMDV8LTNrLmsgLTMwIC00MCAtNTB8MDEyMzIzMjMyMzIzMjMyMzIzMjEyMTIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIxMnwtMjJXTTAgcUg5MCAyM0NMMCAxZGIwIDFjTjAgMWRiMCAxY04wIDFkYjAgMWRkMCAxY08wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAycEIwIDFjTTAgMWZBMCAyeTEwIDE0bTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxZkEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAyc3AwIFdNMHwxMmU1XCIsXG4gIFwiRXVyb3BlL1NhcmF0b3Z8TE1UICswMyArMDQgKzA1fC0zNC5pIC0zMCAtNDAgLTUwfDAxMjMyMzIzMjMyMzIzMjMyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMnwtMjJXTTAgcUg5MCAyM0NMMCAxZGIwIDFjTjAgMWRiMCAxY04wIDFkYjAgMWRkMCAxY08wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDJwQjAgMWNNMCAxY00wIDFjTTAgMWZBMCAxY00wIDNDbzAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWZBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCA4SHowIDU4MTB8XCIsXG4gIFwiRXVyb3BlL1NpbWZlcm9wb2x8TE1UIFNNVCBFRVQgTVNLIENFU1QgQ0VUIE1TRCBFRVNUIE1TS3wtMmcubyAtMmcgLTIwIC0zMCAtMjAgLTEwIC00MCAtMzAgLTQwfDAxMjM0NTQ1NDM2MzYzNjM2MzYzNjM2MzYzNjMyNzI3Mjc2MzYzNjM3MjcyNzI3MjcyNzI3MjcyNzI3MjcyNzI3MjcyNzI3MjcyODN8LTNEOE9nLm8gMUxVTTAubyBlVW9nIHJFbjAgMnFzMCBXTTAgMWZBMCAxY00wIDNWMCAxdTBMMCAxZGIwIDFjTjAgMWRiMCAxY04wIDFkYjAgMWRkMCAxY08wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMVEwMCA0ZU4wIDFjTTAgMWNNMCAxY00wIDFjTTAgZFYwIFdPMCAxY00wIDFjTTAgMWZ5MCAxbzMwIDExQjAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMXowIDFuVzB8MzNlNFwiLFxuICBcIkV1cm9wZS9Tb2ZpYXxMTVQgSU1UIEVFVCBDRVQgQ0VTVCBFRVNUfC0xeC5nIC0xVS5VIC0yMCAtMTAgLTIwIC0zMHwwMTIzNDM0MzI1MjUyNTI1MjUyNTI1MjUyNTI1MjUyNTI1MjUyNTI1MjUyNTI1MjUyNTI1MjUyNTI1MjUyNTI1MjUyNTI1MjUyNTI1MjUyNTI1MjUyNTI1MjUyNTI1MjUyNTI1MjUyNTI1MjUyNTI1MjUyNTI1MjUyNTI1MjUyNTI1MjUyNTI1MjUyNTI1MjUyNTI1MjUyNTI1MjUyNTI1MjUyNTI1MjUyNTI1MjUyNTI1MjUyNTI1MjUyNTI1MjUyNTI1MjUyNTI1MjUyNTI1MjUyNTI1MjUyNTI1MjUyNTI1MjUyNTI1MjUyNTI1MjUyNTI1MjUyNTI1MjUyNTI1MjUyNTI1MjUyNTI1MjUyNTI1MjUyNTI1MjUyNTI1MjUyNTI1MjUyNTI1MjUyNTI1MjUyNTI1MjUyNTI1MjUyNTI1MjUyNTI1MjUyNTI1MjUyNTI1MjUyNTI1MjUyNTI1MjUyNTI1MjUyNTI1MjUyNTI1MjUyNTI1MjUyNTI1MjUyNTI1MjUyNTI1MjUyNTI1MjUyNTI1MjUyNTI1MjUyNTI1MjUyNTI1MjUyNTI1MjUyNTI1MjUyNTI1MjUyNTI1MjUyNTI1MjUyNTI1MjUyNTI1MjUyNTI1MjUyNTI1MjUyNTI1MjUyNTI1MjUyNTI1MjUyNTI1MjUyNTI1MjUyNTI1MjUyNTI1MjUyNTI1MjUyNTI1MjUyNTI1MjUyNTI1MjUyNTI1MjUyNTI1MjUyNTI1MjUyNTI1MjUyNTI1MjUyNTI1MjUyNTI1MjUyNTI1MjUyNTI1MjUyNTI1MjUyNTI1MjUyNTI1MjUyNTI1MjUyNTI1MjUyNTI1MjUyNTI1MjUyNTI1MjUyNTI1MjUyNTI1MjUyNTI1MjUyNTI1MjUyNTI1MjUyNTI1MjUyNTI1MjUyNTI1MjUyNTI1MjUyNTI1MjUyNTI1MjUyNTI1MjUyNTI1MjUyNTI1MjUyNTI1MjUyNTI1MjUyNTI1MjUyNTI1MjUyNTI1MjUyNTI1MjUyNTI1MjUyNTI1MjUyNTI1MjUyNTI1MjUyNTI1MjUyNTI1MjUyNTI1MjUyNTI1MjUyNTI1MjUyNTI1MjUyNTI1MjUyNTI1MjUyNTI1MjUyNTI1MjUyNTI1MjUyNTI1MjUyNTI1MjUyNTI1MjUyNTI1MjUyNTI1MjUyNTI1MjUyNTI1MjUyNTI1MjUyNTI1MjUyNTI1MjUyNTI1MjUyNTI1MjUyNTI1MjUyNTI1MjUyNTI1MjUyNTI1MjUyNTI1MjUyNTI1MjUyNTI1MjUyNTI1MjUyNTI1MjUyNTI1MjUyNTI1MjUyNTI1MjUyNTI1MjUyNTI1MjUyNTI1MjUyNTI1MjUyNTI1MjUyNTI1MjUyNTI1MjUyNTI1MjUyfC0zRDhOeC5nIEFpTEEuayAxVUZlVS5VIFdNMCAxZkEwIDFjTTAgMWNNMCAxY04wIDFtS0gwIDFkZDAgMWZiMCAxYXAwIDFmYjAgMWEyMCAxZnkwIDFhMzAgMWNNMCAxY00wIDFjTTAgMWZBMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWZBMCAxY0swIDFjTDAgMWNOMCAxY0wwIDFjTjAgMWNMMCAxY04wIDFjTDAgMWNOMCAxY0wwIDFmQjAgMW5YMCAxMUUwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMW8wMHwxMmU1XCIsXG4gIFwiRXVyb3BlL1RhbGxpbm58TE1UIFRNVCBDRVQgQ0VTVCBFRVQgTVNLIE1TRCBFRVNUfC0xRCAtMUQgLTEwIC0yMCAtMjAgLTMwIC00MCAtMzB8MDEyMzIxNDUzMjMyMzU2NTY1NjU2NTY1NjU2NTY1NzQ3NDc0NzQ3NDc0NzQ3NDc0NzQ3NDc0NzQ3NDc0NzQ3NDc0NzQ3NDc0NzQ3NDc0NzQ3NDc0NzQ3NDc0NzQ3NDc0NzQ3NDc0NzQ3NDc0NzQ3NDc0NzQ3NDc0NzQ3NDc0NzQ3NDc0NzQ3NDc0NzQ3NDc0NzQ3NDc0NzQ3NDc0NzQ3NDc0NzQ3NDc0NzQ3NDc0NzQ3NDc0NzQ3NDc0NzQ3NDc0NzQ3NDc0NzQ3NDc0NzQ3NDc0NzQ3NDc0NzQ3NDc0NzQ3NDc0NzQ3NDc0NzQ3NDc0NzQ3NDc0NzQ3NDc0NzQ3NDc0NzQ3NDc0NzQ3NDc0NzQ3NDc0NzQ3NDc0NzQ3NDc0NzQ3NDc0NzQ3NDc0NzQ3NDc0NzQ3NDc0NzQ3NDc0NzQ3NDc0NzQ3NDc0NzQ3NDc0NzQ3NDc0NzQ3NDc0NzQ3NDc0NzQ3NDc0NzQ3NDc0NzQ3NDc0NzQ3NDc0NzQ3NDc0NzQ3NDc0NzQ3NDc0NzQ3NDc0NzQ3NDc0NzQ3NDc0NzQ3NDc0NzQ3NDc0NzQ3NDc0NzQ3NDc0NzQ3NDc0NzQ3NDc0NzQ3NDc0NzQ3NDc0NzQ3NDc0NzQ3NDc0NzQ3NDc0NzQ3NDc0NzQ3NDc0NzQ3NDc0NzQ3NDc0NzQ3NDc0NzQ3NDc0NzQ3NDc0NzQ3NDc0NzQ3NDc0NzQ3NDc0NzQ3NDc0NzQ3NDc0NzQ3NDc0NzQ3NDc0NzQ3NDc0NzQ3NDc0NzQ3NDc0NzQ3NDc0NzQ3NDc0NzQ3NDc0NzQ3NDc0NzQ3NDc0NzQ3NDc0NzQ3NDc0NzQ3NDc0NzQ3NDc0NzQ3NDc0NzQ3NDc0NzQ3NDc0NzQ3NDc0NzQ3NDc0NzQ3NDc0NzQ3NDc0NzQ3NDc0NzQ3NDc0NzQ3NDc0NzQ3NDc0NzQ3NDc0NzQ3NDc0NzQ3NDc0NzQ3NDc0NzQ3NDc0NzQ3NDc0NzQ3NDc0NzQ3NDc0NzQ3NDc0NzQ3NDc0NzQ3NDc0NzQ3NDc0NzQ3NDc0NzQ3NDc0NzQ3NDc0NzQ3NDc0NzQ3NDc0NzQ3NDc0NzQ3NDc0NzQ3NDc0NzQ3NDc0NzQ3NDc0NzQ3NDc0NzQ3NDc0NzQ3NDc0NzQ3NDc0NzQ3NDc0NzQ3NDc0NzQ3NDc0NzQ3NDc0NzQ3NDc0NzQ3NDc0NzQ3NDc0NzQ3NDc0NzQ3NDc0NzQ3NDc0NzQ3NDc0NzQ3NDc0NzQ3NDc0NzQ3NDc0NzQ3NDc0NzQ3NDc0NzQ3NDc0NzQ3NDc0NzQ3NDc0NzQ3NDc0NzQ3NDc0NzQ3NDc0NzQ3NDc0NzQ3NDc0NzQ3NDc0NzQ3NDc0NzQ3NDc0NzQ3NDc0NzQ3NDc0NzQ3NDc0NzQ3NDc0NzQ3NHwtM0Q4TkQgMXdJMDAgdGVEIDExQTAgMVRhMCA0clhsIEtTTEQgMkZYMCAySmcwIFdNMCAxZkEwIDFjTTAgMThKMCAxc1RYMCAxZGIwIDFjTjAgMWRiMCAxY04wIDFkYjAgMWRkMCAxY08wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTjAgMWNNMCAxZkEwIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWZBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFvMTAgMTFBMCAxcU0wIDVRTTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxbzAwfDQxZTRcIixcbiAgXCJFdXJvcGUvVGlyYW5lfExNVCBDRVQgQ0VTVHwtMWouayAtMTAgLTIwfDAxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxfC0yZ2xCai5rIDE0cGNqLmsgNUxDMCBXTTAgNE0wIDFmQ0swIDEwbjAgMW9wMCAxMXowIDFwZDAgMTF6MCAxcU4wIFdMMCAxcXAwIFhiMCAxcXAwIFhiMCAxcXAwIDExejAgMWxCMCAxMXowIDFxTjAgMTF6MCAxaU4wIDE2bjAgMWRkMCAxY08wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxZkEwIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWZBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxbzAwfDQyZTRcIixcbiAgXCJFdXJvcGUvVWx5YW5vdnNrfExNVCArMDMgKzA0ICswNSArMDJ8LTNkLkEgLTMwIC00MCAtNTAgLTIwfDAxMjMyMzIzMjMyMzIzMjMyMzIxMjE0MTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyfC0yMldNMCBxSDkwIDIzQ0wwIDFkYjAgMWNOMCAxZGIwIDFjTjAgMWRiMCAxZGQwIDFjTzAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDJwQjAgMWNNMCAxZkEwIDJwQjAgSU0wIHJYMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFmQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgOEh6MCAzcmQwfDEzZTVcIixcbiAgXCJFdXJvcGUvVmllbm5hfExNVCBDRVQgQ0VTVHwtMTUubCAtMTAgLTIwfDAxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxfC0zNlJkNS5sIFViWDUubCAxMWQwIDFpTzAgMTFBMCAxbzAwIDExQTAgM0tNMCAxNG8wIExBMDAgNmkwMCBXTTAgMWZBMCAxY00wIDFjTTAgMWNNMCA0MDAgMnFNMCAxYW8wIDFjbzAgMWNNMCAxaW8wIDE3YzAgMWdIYTAgMTlYMCAxY1AwIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFmQTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFmQTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxZkEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFvMDB8MThlNVwiLFxuICBcIkV1cm9wZS9WaWxuaXVzfExNVCBXTVQgS01UIENFVCBFRVQgTVNLIENFU1QgTVNEIEVFU1R8LTFGLmcgLTFvIC0xei5BIC0xMCAtMjAgLTMwIC0yMCAtNDAgLTMwfDAxMjM0MzU2MzYzNjU3NTc1NzU3NTc1NzU3NTc1ODQ4NDg0ODQ4NDg0ODQ4NDg0NjM2NDg0ODQ4NDg0ODQ4NDg0ODQ4NDg0ODQ4NDg0ODQ4NDg0ODQ4NDg0ODQ4NDg0ODQ4NDg0ODQ4NDg0ODQ4NDg0ODQ4NDg0ODQ4NDg0ODQ4NDg0ODQ4NDg0ODQ4NDg0ODQ4NDg0ODQ4NDg0ODQ4NDg0ODQ4NDg0ODQ4NDg0ODQ4NDg0ODQ4NDg0ODQ4NDg0ODQ4NDg0ODQ4NDg0ODQ4NDg0ODQ4NDg0ODQ4NDg0ODQ4NDg0ODQ4NDg0ODQ4NDg0ODQ4NDg0ODQ4NDg0ODQ4NDg0ODQ4NDg0ODQ4NDg0ODQ4NDg0ODQ4NDg0ODQ4NDg0ODQ4NDg0ODQ4NDg0ODQ4NDg0ODQ4NDg0ODQ4NDg0ODQ4NDg0ODQ4NDg0ODQ4NDg0ODQ4NDg0ODQ4NDg0ODQ4NDg0ODQ4NDg0ODQ4NDg0ODQ4NDg0ODQ4NDg0ODQ4NDg0ODQ4NDg0ODQ4NDg0ODQ4NDg0ODQ4NDg0ODQ4NDg0ODQ4NDg0ODQ4NDg0ODQ4NDg0ODQ4NDg0ODQ4NDg0ODQ4NDg0ODQ4NDg0ODQ4NDg0ODQ4NDg0ODQ4NDg0ODQ4NDg0ODQ4NDg0ODQ4NDg0ODQ4NDg0ODQ4NDg0ODQ4NDg0ODQ4NDg0ODQ4NDg0ODQ4NDg0ODQ4NDg0ODQ4NDg0ODQ4NDg0ODQ4NDg0ODQ4NDg0ODQ4NDg0ODQ4NDg0ODQ4NDg0ODQ4NDg0ODQ4NDg0ODQ4NDg0ODQ4NDg0ODQ4NDg0ODQ4NDg0ODQ4NDg0ODQ4NDg0ODQ4NDg0ODQ4NDg0ODQ4NDg0ODQ4NDg0ODQ4NDg0ODQ4NDg0ODQ4NDg0ODQ4NDg0ODQ4NDg0ODQ4NDg0ODQ4NDg0ODQ4NDg0ODQ4NDg0ODQ4NDg0ODQ4NDg0ODQ4NDg0ODQ4NDg0ODQ4NDg0ODQ4NDg0ODQ4NDg0ODQ4NDg0ODQ4NDg0ODQ4NDg0ODQ4NDg0ODQ4NDg0ODQ4NDg0ODQ4NDg0ODQ4NDg0ODQ4NDg0ODQ4NDg0ODQ4NDg0ODQ4NDg0ODQ4NDg0ODQ4NDg0ODQ4NDg0ODQ4NDg0ODQ4NDg0ODQ4NDg0ODQ4NDg0ODQ4NDg0ODQ4NDg0ODQ4NDg0ODQ4NDg0ODQ4NDg0ODQ4NDg0ODQ4NDg0ODQ4NDg0ODQ4NDg0ODQ4NDg0ODQ4NDg0ODQ4NDg0ODQ4NDg0ODQ4NDg0ODQ4NDg0ODQ4NDg0ODQ4NDg0ODQ4NDg0ODQ4NDg0ODQ4NDg0ODQ4NDg0ODQ4NDg0ODQ4NDg0ODQ4NDg0ODQ4NDg0ODQ4NDg0ODQ4NDg0ODQ4NDg0ODQ4NDg0ODQ4NDg0ODQ4NDg0ODR8LTNEOE5GLmcgMXU1QWguZyA2SUxNLm8gMU9vei5BIHp6MCBNZmQwIDI5VzAgM2lzMCBXTTAgMWZBMCAxY00wIExWMCAxdGdMMCAxZGIwIDFjTjAgMWRiMCAxY04wIDFkYjAgMWRkMCAxY08wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTjAgMWNNMCAxZkEwIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWZBMCAxbzAwIDExQTAgMW8wMCAxMUIwIDFvMDAgMTFBMCAxcU0wIDhpbzAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFvMDB8NTRlNFwiLFxuICBcIkV1cm9wZS9Wb2xnb2dyYWR8TE1UICswMyArMDQgKzA1IE1TRCBNU0sgTVNLfC0yVi5FIC0zMCAtNDAgLTUwIC00MCAtMzAgLTQwfDAxMjMyMzIzMjMyMzIzMjMyNDU0NTQ1MjQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NjUyNXwtMjFJcVYuRSBwc0xWLkUgMjNDTDAgMWRiMCAxY04wIDFkYjAgMWNOMCAxZGIwIDFkZDAgMWNPMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTjAgMWNNMCAxY00wIDFjTTAgMWZBMCAxY00wIDJwejAgMWNOMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxZkEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDhIejAgOUpkMCA1Z24wfDEwZTVcIixcbiAgXCJFdXJvcGUvV2Fyc2F3fExNVCBXTVQgQ0VUIENFU1QgRUVUIEVFU1R8LTFvIC0xbyAtMTAgLTIwIC0yMCAtMzB8MDEyMzIzMjM0NTQyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMnwtM0Q4Tm8gMXFEQTAgMUxYbyAxMWQwIDFpTzAgMTFBMCAxbzAwIDExQTAgMW9uMCAxMUEwIDZ6eTAgSFdQMCA1SU0wIFdNMCAxZkEwIDFjTTAgMWR6MCAxbUwwIDFlbjAgMTVCMCAxYXEwIDFuQTAgMTFBMCAxaW8wIDE3YzAgMWZBMCAxYTAwIGlEWDAgTEEwIDFjTTAgMWNNMCAxQzAwIE9vMCAxY00wIDFjTTAgMXpjMCBPbzAgMXpjMCBPbzAgMXpjMCBPbzAgMUMwMCBMQTAgdXNvMCAxYTAwIDFmQTAgMWNNMCAxY00wIDFjTTAgMWZBMCAxYTAwIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWZBMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY04wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWZBMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFmQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFxTTAgV00wIDFxTTAgV00wIDFxTTAgMTFBMCAxbzAwIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxcU0wIFdNMCAxcU0wIFdNMCAxcU0wIDExQTAgMW8wMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMXFNMCBXTTAgMXFNMCBXTTAgMXFNMCAxMUEwIDFvMDAgMTFBMCAxbzAwIDExQTAgMW8wMHwxN2U1XCIsXG4gIFwiUGFjaWZpYy9Ib25vbHVsdXxMTVQgSFNUIEhEVCBIV1QgSFBUIEhTVHxhdi5xIGF1IDl1IDl1IDl1IGEwfDAxMjEzNDE1fC0zMDYxcy55IDF1TWRXLnkgOHgwIGxlZjAgOHdXdSBpQXUgNDZwMHwzN2U0XCIsXG4gIFwiSW5kaWFuL0NoYWdvc3xMTVQgKzA1ICswNnwtNE4uRSAtNTAgLTYwfDAxMnwtMnhvc04uRSAzQUdMTi5FfDMwZTJcIixcbiAgXCJJbmRpYW4vTWFsZGl2ZXN8TE1UIE1NVCArMDV8LTRTIC00UyAtNTB8MDEyfC0zRDhRUyAzZUxBMHwzNWU0XCIsXG4gIFwiSW5kaWFuL01hdXJpdGl1c3xMTVQgKzA0ICswNXwtM08gLTQwIC01MHwwMTIxMjF8LTJ4b3JPIDM0dW5PIDE0TDAgMTJrcjAgMTF6MHwxNWU0XCIsXG4gIFwiUGFjaWZpYy9Ld2FqYWxlaW58TE1UICsxMSArMTAgKzA5IC0xMiArMTJ8LWI5LmsgLWIwIC1hMCAtOTAgYzAgLWMwfDAxMjMxNDV8LTJNMFg5LmsgMXJEQTkuayBha3AwIDZVcDAgMTJyeTAgV2FuMHwxNGUzXCIsXG4gIFwiUGFjaWZpYy9DaGF0aGFtfExNVCArMTIxNSArMTI0NSArMTM0NXwtY2QuTSAtY2YgLWNKIC1kSnwwMTIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzMjMyMzIzfC00NmpNZC5NIDM3UmJXLk0gMWFkZWYgSU0wIDFDMDAgUmMwIDF6YzAgT28wIDF6YzAgT28wIDF6YzAgT28wIDF6YzAgT28wIDF6YzAgT28wIDF6YzAgUmMwIDF6YzAgT28wIDF6YzAgT28wIDF6YzAgT28wIDF6YzAgT28wIDF6YzAgT28wIDF6YzAgUmMwIDF6YzAgT28wIDFxTTAgMTRvMCAxbGMwIDE0bzAgMWxjMCAxNG8wIDFsYzAgMTdjMCAxaW8wIDE3YzAgMWlvMCAxN2MwIDFpbzAgMTdjMCAxbGMwIDE0bzAgMWxjMCAxNG8wIDFsYzAgMTdjMCAxaW8wIDE3YzAgMWlvMCAxN2MwIDFsYzAgMTRvMCAxbGMwIDE0bzAgMWxjMCAxN2MwIDFpbzAgMTdjMCAxaW8wIDE3YzAgMWlvMCAxN2MwIDFpbzAgMWZBMCAxYTAwIDFmQTAgMWEwMCAxZkEwIDFhMDAgMWZBMCAxYTAwIDFmQTAgMWNNMCAxZkEwIDFhMDAgMWZBMCAxYTAwIDFmQTAgMWEwMCAxZkEwIDFhMDAgMWZBMCAxYTAwIDFmQTAgMWNNMCAxZkEwIDFhMDAgMWZBMCAxYTAwIDFmQTAgMWEwMCAxZkEwIDFhMDAgMWZBMCAxYTAwIDFpbzAgMWEwMCAxZkEwIDFhMDAgMWZBMCAxYTAwIDFmQTAgMWEwMCAxZkEwIDFhMDAgMWZBMCAxY00wIDFmQTAgMWEwMCAxZkEwIDFhMDAgMWZBMCAxYTAwIDFmQTAgMWEwMCAxZkEwIDFhMDAgMWZBMCAxY00wIDFmQTAgMWEwMCAxZkEwIDFhMDAgMWZBMCAxYTAwIDFmQTAgMWEwMCAxZkEwIDFjTTAgMWZBMCAxYTAwIDFmQTAgMWEwMCAxZkEwIDFhMDAgMWZBMCAxYTAwIDFmQTAgMWEwMCAxZkEwIDFjTTAgMWZBMCAxYTAwIDFmQTAgMWEwMCAxZkEwIDFhMDAgMWZBMCAxYTAwIDFmQTAgMWEwMCAxaW8wIDFhMDAgMWZBMCAxYTAwIDFmQTAgMWEwMCAxZkEwIDFhMDAgMWZBMCAxYTAwIDFmQTAgMWNNMCAxZkEwIDFhMDAgMWZBMCAxYTAwIDFmQTAgMWEwMCAxZkEwIDFhMDAgMWZBMCAxYTAwIDFmQTAgMWNNMCAxZkEwIDFhMDAgMWZBMCAxYTAwIDFmQTAgMWEwMCAxZkEwIDFhMDAgMWZBMCAxY00wIDFmQTAgMWEwMCAxZkEwIDFhMDAgMWZBMCAxYTAwIDFmQTAgMWEwMCAxZkEwIDFhMDAgMWZBMCAxY00wIDFmQTAgMWEwMCAxZkEwIDFhMDAgMWZBMCAxYTAwIDFmQTAgMWEwMCAxZkEwIDFhMDAgMWlvMCAxYTAwIDFmQTAgMWEwMCAxZkEwIDFhMDAgMWZBMCAxYTAwIDFmQTAgMWEwMCAxZkEwIDFjTTAgMWZBMCAxYTAwIDFmQTAgMWEwMCAxZkEwIDFhMDAgMWZBMCAxYTAwIDFmQTAgMWEwMCAxZkEwIDFjTTAgMWZBMCAxYTAwIDFmQTAgMWEwMCAxZkEwIDFhMDAgMWZBMCAxYTAwIDFmQTAgMWNNMCAxZkEwIDFhMDAgMWZBMCAxYTAwIDFmQTAgMWEwMCAxZkEwIDFhMDAgMWZBMCAxYTAwIDFmQTAgMWEwMCAxZkEwIDFjTTAgMWZBMCAxYTAwIDFmQTAgMWEwMCAxZkEwIDFhMDAgMWZBMCAxYTAwIDFmQTAgMWNNMCAxZkEwIDFhMDAgMWZBMCAxYTAwIDFmQTAgMWEwMCAxZkEwIDFhMDAgMWZBMCAxYTAwIDFmQTAgMWNNMCAxZkEwIDFhMDAgMWZBMCAxYTAwIDFmQTAgMWEwMCAxZkEwIDFhMDAgMWZBMCAxYTAwIDFpbzAgMWEwMCAxZkEwIDFhMDAgMWZBMCAxYTAwIDFmQTAgMWEwMCAxZkEwIDFhMDAgMWZBMCAxY00wIDFmQTAgMWEwMCAxZkEwIDFhMDAgMWZBMCAxYTAwIDFmQTAgMWEwMCAxZkEwIDFhMDAgMWZBMCAxY00wIDFmQTAgMWEwMCAxZkEwIDFhMDAgMWZBMCAxYTAwIDFmQTAgMWEwMCAxZkEwIDFjTTAgMWZBMCAxYTAwIDFmQTAgMWEwMCAxZkEwIDFhMDAgMWZBMCAxYTAwIDFmQTAgMWEwMCAxZkEwIDFjTTAgMWZBMCAxYTAwIDFmQTAgMWEwMCAxZkEwIDFhMDAgMWZBMCAxYTAwIDFmQTAgMWEwMCAxaW8wIDFhMDAgMWZBMCAxYTAwIDFmQTAgMWEwMCAxZkEwIDFhMDAgMWZBMCAxYTAwIDFmQTAgMWNNMCAxZkEwIDFhMDAgMWZBMCAxYTAwIDFmQTAgMWEwMCAxZkEwIDFhMDAgMWZBMCAxYTAwIDFmQTAgMWNNMCAxZkEwIDFhMDAgMWZBMCAxYTAwIDFmQTAgMWEwMCAxZkEwIDFhMDAgMWZBMCAxY00wIDFmQTAgMWEwMCAxZkEwIDFhMDAgMWZBMCAxYTAwIDFmQTAgMWEwMCAxZkEwIDFhMDAgMWZBMCAxY00wIDFmQTAgMWEwMCAxZkEwIDFhMDAgMWZBMCAxYTAwIDFmQTAgMWEwMCAxZkEwIDFhMDAgMWlvMCAxYTAwIDFmQTAgMWEwMCAxZkEwIDFhMDAgMWZBMCAxYTAwIDFmQTAgMWEwMCAxZkEwIDFjTTAgMWZBMCAxYTAwIDFmQTAgMWEwMCAxZkEwIDFhMDAgMWZBMCAxYTAwIDFmQTAgMWEwMCAxZkEwIDFjTTAgMWZBMCAxYTAwIDFmQTAgMWEwMCAxZkEwIDFhMDAgMWZBMCAxYTAwIDFmQTAgMWNNMCAxZkEwIDFhMDAgMWZBMCAxYTAwIDFmQTAgMWEwMCAxZkEwIDFhMDAgMWZBMCAxYTAwIDFmQTAgMWNNMCAxZkEwIDFhMDAgMWZBMCAxYTAwIDFmQTAgMWEwMCAxZkEwIDFhMDAgMWZBMCAxYTAwIDFmQTAgMWNNMCAxZkEwIDFhMDAgMWZBMCAxYTAwIDFmQTAgMWEwMCAxZkEwIDFhMDAgMWZBMCAxYTAwIDFmQTAgMWNNMCAxZkEwIDFhMDAgMWZBMCAxYTAwIDFmQTAgMWEwMCAxZkEwIDFhMDAgMWZBMCAxYTAwIDFpbzAgMWEwMCAxZkEwIDFhMDAgMWZBMCAxYTAwIDFmQTAgMWEwMCAxZkEwIDFhMDAgMWZBMCAxY00wIDFmQTAgMWEwMCAxZkEwIDFhMDAgMWZBMCAxYTAwIDFmQTAgMWEwMCAxZkEwIDFhMDAgMWZBMCAxY00wIDFmQTAgMWEwMCAxZkEwIDFhMDAgMWZBMCAxYTAwIDFmQTAgMWEwMCAxZkEwIDFjTTAgMWZBMCAxYTAwIDFmQTAgMWEwMCAxZkEwIDFhMDAgMWZBMCAxYTAwIDFmQTAgMWEwMCAxZkEwIDFjTTAgMWZBMCAxYTAwIDFmQTAgMWEwMCAxZkEwIDFhMDAgMWZBMCAxYTAwIDFmQTAgMWEwMCAxaW8wIDFhMDAgMWZBMCAxYTAwIDFmQTAgMWEwMCAxZkEwIDFhMDAgMWZBMCAxYTAwIDFmQTAgMWNNMCAxZkEwIDFhMDAgMWZBMCAxYTAwIDFmQTAgMWEwMCAxZkEwIDFhMDAgMWZBMCAxYTAwIDFmQTAgMWNNMCAxZkEwIDFhMDAgMWZBMCAxYTAwIDFmQTAgMWEwMCAxZkEwIDFhMDAgMWZBMCAxY00wIDFmQTAgMWEwMCAxZkEwIDFhMDAgMWZBMCAxYTAwIDFmQTAgMWEwMCAxZkEwIDFhMDAgMWZBMCAxY00wIDFmQTAgMWEwMCAxZkEwIDFhMDAgMWZBMCAxYTAwIDFmQTAgMWEwMCAxZkEwIDFhMDAgMWlvMCAxYTAwIDFmQTAgMWEwMCAxZkEwIDFhMDAgMWZBMCAxYTAwIDFmQTAgMWEwMCAxZkEwIDFjTTAgMWZBMCAxYTAwIDFmQTAgMWEwMCAxZkEwIDFhMDAgMWZBMCAxYTAwIDFmQTAgMWEwMCAxZkEwIDFjTTAgMWZBMCAxYTAwIDFmQTAgMWEwMCAxZkEwIDFhMDAgMWZBMCAxYTAwIDFmQTAgMWNNMCAxZkEwIDFhMDAgMWZBMCAxYTAwIDFmQTAgMWEwMCAxZkEwIDFhMDAgMWZBMCAxYTAwIDFmQTAgMWNNMCAxZkEwIDFhMDAgMWZBMCAxYTAwIDFmQTAgMWEwMCAxZkEwIDFhMDAgMWZBMCAxYTAwIDFmQTAgMWNNMCAxZkEwIDFhMDAgMWZBMCAxYTAwIDFmQTAgMWEwMCAxZkEwIDFhMDAgMWZBMCAxYTAwIDFmQTAgMWNNMCAxZkEwIDFhMDAgMWZBMCAxYTAwIDFmQTAgMWEwMCAxZkEwIDFhMDAgMWZBMCAxYTAwIDFpbzAgMWEwMCAxZkEwIDFhMDAgMWZBMCAxYTAwIDFmQTAgMWEwMCAxZkEwIDFhMDAgMWZBMCAxY00wIDFmQTAgMWEwMCAxZkEwIDFhMDAgMWZBMCAxYTAwIDFmQTAgMWEwMCAxZkEwIDFhMDAgMWZBMCAxY00wIDFmQTAgMWEwMCAxZkEwIDFhMDAgMWZBMCAxYTAwIDFmQTAgMWEwMCAxZkEwIDFjTTAgMWZBMCAxYTAwIDFmQTAgMWEwMCAxZkEwIDFhMDAgMWZBMCAxYTAwIDFmQTAgMWEwMCAxZkEwIDFjTTAgMWZBMCAxYTAwIDFmQTAgMWEwMCAxZkEwIDFhMDAgMWZBMCAxYTAwIDFmQTAgMWEwMCAxaW8wIDFhMDAgMWZBMCAxYTAwIDFmQTAgMWEwMCAxZkEwIDFhMDAgMWZBMCAxYTAwIDFmQTAgMWNNMCAxZkEwIDFhMDAgMWZBMCAxYTAwIDFmQTAgMWEwMCAxZkEwIDFhMDAgMWZBMCAxYTAwIDFmQTAgMWNNMCAxZkEwIDFhMDAgMWZBMCAxYTAwIDFmQTAgMWEwMCAxZkEwIDFhMDAgMWZBMCAxY00wIDFmQTAgMWEwMCAxZkEwIDFhMDAgMWZBMCAxYTAwIDFmQTAgMWEwMCAxZkEwIDFhMDAgMWZBMCAxY00wIDFmQTAgMWEwMCAxZkEwIDFhMDAgMWZBMCAxYTAwIDFmQTAgMWEwMCAxZkEwIDFhMDAgMWlvMCAxYTAwIDFmQTAgMWEwMCAxZkEwIDFhMDAgMWZBMCAxYTAwIDFmQTAgMWEwMCAxZkEwIDFjTTAgMWZBMCAxYTAwIDFmQTAgMWEwMCAxZkEwIDFhMDAgMWZBMCAxYTAwIDFmQTAgMWEwMCAxZkEwIDFjTTAgMWZBMCAxYTAwIDFmQTAgMWEwMCAxZkEwIDFhMDAgMWZBMCAxYTAwIDFmQTAgMWNNMCAxZkEwIDFhMDAgMWZBMCAxYTAwIDFmQTAgMWEwMCAxZkEwIDFhMDAgMWZBMCAxYTAwIDFmQTAgMWNNMCAxZkEwIDFhMDAgMWZBMCAxYTAwIDFmQTAgMWEwMCAxZkEwIDFhMDAgMWZBMCAxYTAwIDFpbzAgMWEwMCAxZkEwIDFhMDAgMWZBMCAxYTAwIDFmQTAgMWEwMCAxZkEwIDFhMDAgMWZBMCAxY00wIDFmQTAgMWEwMCAxZkEwIDFhMDAgMWZBMCAxYTAwIDFmQTAgMWEwMCAxZkEwIDFhMDAgMWZBMCAxY00wIDFmQTAgMWEwMCAxZkEwIDFhMDAgMWZBMCAxYTAwIDFmQTAgMWEwMCAxZkEwIDFjTTAgMWZBMCAxYTAwIDFmQTAgMWEwMCAxZkEwIDFhMDAgMWZBMCAxYTAwIDFmQTAgMWEwMCAxZkEwIDFjTTAgMWZBMCAxYTAwIDFmQTAgMWEwMCAxZkEwIDFhMDAgMWZBMCAxYTAwIDFmQTAgMWEwMCAxaW8wIDFhMDAgMWZBMCAxYTAwIDFmQTAgMWEwMCAxZkEwIDFhMDAgMWZBMCAxYTAwIDFmQTAgMWNNMCAxZkEwIDFhMDAgMWZBMCAxYTAwIDFmQTAgMWEwMCAxZkEwIDFhMDAgMWZBMCAxYTAwIDFmQTAgMWNNMCAxZkEwIDFhMDAgMWZBMCAxYTAwIDFmQTAgMWEwMCAxZkEwIDFhMDAgMWZBMCAxY00wIDFmQTAgMWEwMCAxZkEwIDFhMDAgMWZBMCAxYTAwIDFmQTAgMWEwMCAxZkEwIDFhMDAgMWZBMCAxY00wIDFmQTAgMWEwMCAxZkEwIDFhMDAgMWZBMCAxYTAwIDFmQTAgMWEwMCAxZkEwIDFhMDAgMWlvMCAxYTAwIDFmQTAgMWEwMCAxZkEwIDFhMDAgMWZBMCAxYTAwIDFmQTAgMWEwMCAxZkEwIDFjTTAgMWZBMCAxYTAwIDFmQTAgMWEwMCAxZkEwIDFhMDAgMWZBMCAxYTAwIDFmQTAgMWEwMCAxZkEwIDFjTTAgMWZBMCAxYTAwIDFmQTAgMWEwMCAxZkEwIDFhMDAgMWZBMCAxYTAwIDFmQTAgMWNNMCAxZkEwIDFhMDAgMWZBMCAxYTAwIDFmQTAgMWEwMCAxZkEwIDFhMDAgMWZBMCAxYTAwIDFmQTAgMWNNMCAxZkEwIDFhMDAgMWZBMCAxYTAwIDFmQTAgMWEwMCAxZkEwIDFhMDAgMWZBMCAxYTAwIDFpbzAgMWEwMCAxZkEwIDFhMDAgMWZBMCAxYTAwIDFmQTAgMWEwMCAxZkEwIDFhMDAgMWZBMCAxY00wIDFmQTAgMWEwMCAxZkEwIDFhMDAgMWZBMCAxYTAwIDFmQTAgMWEwMCAxZkEwIDFhMDAgMWZBMCAxY00wIDFmQTAgMWEwMCAxZkEwIDFhMDAgMWZBMCAxYTAwIDFmQTAgMWEwMCAxZkEwIDFjTTAgMWZBMCAxYTAwIDFmQTAgMWEwMCAxZkEwIDFhMDB8NjAwXCIsXG4gIFwiUGFjaWZpYy9BcGlhfExNVCBMTVQgLTExMzAgLTExIC0xMCArMTQgKzEzfC1jeC40IGJxLlUgYnUgYjAgYTAgLWUwIC1kMHwwMTIzNDM0NTY1NjU2NTY1NjU2NTY1NjU2NTZ8LTM4Rm94LjQgSjFBMCAxeVcwMy40IDJyUmJ1IDFmZjAgMWEwMCBDSTAgQVEwIDFjTTAgMWZBMCAxYTAwIDFmQTAgMWEwMCAxZkEwIDFhMDAgMWZBMCAxYTAwIDFmQTAgMWEwMCAxZkEwIDFjTTAgMWZBMCAxYTAwIDFmQTAgMWEwMCAxZkEwfDM3ZTNcIixcbiAgXCJQYWNpZmljL0JvdWdhaW52aWxsZXxMTVQgUE1NVCArMTAgKzA5ICsxMXwtYW0uZyAtOU0udyAtYTAgLTkwIC1iMHwwMTIzMjR8LTNEOFdtLmcgQXZBeC5JIDFUQ0xNLncgN0NOMCAyTVFwMHwxOGU0XCIsXG4gIFwiUGFjaWZpYy9FZmF0ZXxMTVQgKzExICsxMnwtYmQuZyAtYjAgLWMwfDAxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMXwtMmw5bmQuZyAydU5YZC5nIERjMCBuNjEwIDFjTDAgMWNOMCAxY0wwIDFmQjAgMTlYMCAxZkIwIDFjTDAgMWNOMCAxY0wwIDFjTjAgMWNMMCAxY04wIDFjTDAgMWNOMCAxY0wwIDFmQjAgTHowIDFOZDAgQW4wfDY2ZTNcIixcbiAgXCJQYWNpZmljL0VuZGVyYnVyeXwtMDAgLTEyIC0xMSArMTN8MCBjMCBiMCAtZDB8MDEyM3wtMWlJbzAgMUdzQTAgQjdYMHwxXCIsXG4gIFwiUGFjaWZpYy9GYWthb2ZvfExNVCAtMTEgKzEzfGJvLlUgYjAgLWQwfDAxMnwtMk0wQXouNCA0dWZYei40fDQ4M1wiLFxuICBcIlBhY2lmaWMvRmlqaXxMTVQgKzEyICsxM3wtYlQuSSAtYzAgLWQwfDAxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyMXwtMmJVelQuSSAzbThOVC5JIExBMCAxRU0wIElNMCBuSmMwIExBMCAxbzAwIFJjMCAxd28wIEFvMCAxTmMwIEFvMCAxUTAwIHh6MCAxU04wIHVNMCAxU00wIHVNMCAxVkEwIHMwMCAxVkEwIHMwMCAxVkEwIHMwMCAyMG8wIHBjMCAyaGMwIGJjMHw4OGU0XCIsXG4gIFwiUGFjaWZpYy9UYXJhd2F8TE1UICsxMnwtYncuNCAtYzB8MDF8LTJNMFh3LjR8MjllM1wiLFxuICBcIlBhY2lmaWMvR2FsYXBhZ29zfExNVCAtMDUgLTA2fDVXLm8gNTAgNjB8MDEyMTJ8LTF5VlMxLkEgMmRUejEuQSBnTmQwIHJ6MHwyNWUzXCIsXG4gIFwiUGFjaWZpYy9HYW1iaWVyfExNVCAtMDl8OFguTSA5MHwwMXwtMmpvZjAuY3wxMjVcIixcbiAgXCJQYWNpZmljL0d1YWRhbGNhbmFsfExNVCArMTF8LWFELk0gLWIwfDAxfC0yam95RC5NfDExZTRcIixcbiAgXCJQYWNpZmljL0d1YW18TE1UIExNVCBHU1QgKzA5IEdEVCBDaFNUfGVsIC05RCAtYTAgLTkwIC1iMCAtYTB8MDEyMzI0MjQyNDI0MjQyNDI0MjQyNXwtNTRtOUQgMmdsYzAgMURGYkQgNnBCMCBBaEIwIDNRTDAgZzJwMCAzcDkxIFdPWCByWDAgMXpkMCBSYjAgMXdwMCBSYjAgNXhkMCByWDAgNXNOMCB6YjEgMUMwWCBPbjAgVUxiMHwxN2U0XCIsXG4gIFwiUGFjaWZpYy9LaXJpdGltYXRpfExNVCAtMTA0MCAtMTAgKzE0fGF0LmsgYUUgYTAgLWUwfDAxMjN8LTJNMEJ1LkUgM2JJTWEuRSBCN1hrfDUxZTJcIixcbiAgXCJQYWNpZmljL0tvc3JhZXxMTVQgTE1UICsxMSArMDkgKzEwICsxMnxkOC40IC1hUC5VIC1iMCAtOTAgLWEwIC1jMHwwMTIzMjQzMjUyfC01NG1hUC5VIDJnbGMwIHhzblAuVSBheEMwIEhCeTAgYWtwMCBheGQwIFdPSzAgMWJkejB8NjZlMlwiLFxuICBcIlBhY2lmaWMvTWFycXVlc2FzfExNVCAtMDkzMHw5aSA5dXwwMXwtMmpvZUd8ODZlMlwiLFxuICBcIlBhY2lmaWMvUGFnb19QYWdvfExNVCBMTVQgU1NUfC1jQi5jIGJtLk0gYjB8MDEyfC0zOEZvQi5jIEoxQTB8MzdlMlwiLFxuICBcIlBhY2lmaWMvTmF1cnV8TE1UICsxMTMwICswOSArMTJ8LWI3LkUgLWJ1IC05MCAtYzB8MDEyMTN8LTFYZG43LkUgUUNuQi5FIDdtcXUgMWxuYnV8MTBlM1wiLFxuICBcIlBhY2lmaWMvTml1ZXxMTVQgLTExMjAgLTExfGJqLkUgYmsgYjB8MDEyfC1GU2NFLmsgc3VvMC5rfDEyZTJcIixcbiAgXCJQYWNpZmljL05vcmZvbGt8TE1UICsxMTEyICsxMTMwICsxMjMwICsxMSArMTJ8LWJiLlEgLWJjIC1idSAtY3UgLWIwIC1jMHwwMTIzMjQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1fC0yTTBYYi5RIDIxSUxYLlEgVzAxRyBPbzAgMUNPbzAgOUpjdSAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWZBMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFmQTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFmQTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWZBMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWZBMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFmQTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxZkEwIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxZkEwIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFmQTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFmQTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxZkEwIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWZBMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWZBMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxZkEwIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWZBMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxZkEwIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxZkEwIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWZBMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFmQTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFmQTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWZBMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWZBMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFmQTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxZkEwIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxZkEwIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFmQTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFmQTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxZkEwIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWZBMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWZBMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxZkEwIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxZkEwIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxZkEwIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxZkEwIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWZBMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFmQTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFmQTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWZBMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWZBMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFmQTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxZkEwIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxZkEwIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFmQTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFmQTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxZkEwIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWZBMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWZBMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxZkEwIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxZkEwIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxZkEwIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxZkEwIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWZBMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFmQTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFmQTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWZBMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWZBMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFmQTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxZkEwIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxZkEwIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFmQTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFmQTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxZkEwIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWZBMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWZBMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxZkEwIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxZkEwIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWZBMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFmQTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFmQTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWZBMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWZBMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFmQTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxZkEwIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxZkEwIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFmQTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFmQTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxZkEwIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWZBMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWZBMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxZkEwIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxZkEwIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWZBMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFmQTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFmQTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWZBMCAxY00wIDFjTTAgMWNNMCAxY00wIDFjTTAgMWNNMHwyNWU0XCIsXG4gIFwiUGFjaWZpYy9Ob3VtZWF8TE1UICsxMSArMTJ8LWI1Lk0gLWIwIC1jMHwwMTIxMjEyMXwtMmw5bjUuTSAyRXFNNS5NIHhYMCAxUEIwIHluMCBIZVAwIEFvMHw5OGUzXCIsXG4gIFwiUGFjaWZpYy9QYWxhdXxMTVQgTE1UICswOXxmMi40IC04Vi5VIC05MHwwMTJ8LTU0bThWLlUgMmdsYzB8MjFlM1wiLFxuICBcIlBhY2lmaWMvUGl0Y2Fpcm58TE1UIC0wODMwIC0wOHw4RS5rIDh1IDgwfDAxMnwtMk0wRGouRSAzVVZYTi5FfDU2XCIsXG4gIFwiUGFjaWZpYy9SYXJvdG9uZ2F8TE1UIExNVCAtMTAzMCAtMDkzMCAtMTB8LWRrLlUgYUQuNCBhdSA5dSBhMHwwMTIzNDM0MzQzNDM0MzQzNDM0MzQzNDM0MzQzNHwtMk90cGsuVSAyOHpjMCAxM3RiTy5VIElMMCAxemN1IE9udSAxemN1IE9udSAxemN1IFJidSAxemN1IE9udSAxemN1IE9udSAxemN1IE9udSAxemN1IE9udSAxemN1IE9udSAxemN1IFJidSAxemN1IE9udSAxemN1IE9udSAxemN1IE9udXwxM2UzXCIsXG4gIFwiUGFjaWZpYy9UYWhpdGl8TE1UIC0xMHw5Vy5nIGEwfDAxfC0yam9lMS5JfDE4ZTRcIixcbiAgXCJQYWNpZmljL1RvbmdhdGFwdXxMTVQgKzEyMjAgKzEzICsxNHwtY2ouYyAtY2sgLWQwIC1lMHwwMTIzMjMyMzIzMnwtWGJNai5jIEJnTFguYyAxeW5kayAxNUEwIDF3bzAgeHowIDFRMTAgeHowIHpXTjAgczAwfDc1ZTNcIlxuXSwgWWogPSBbXG4gIFwiQWZyaWNhL0FiaWRqYW58QWZyaWNhL0FjY3JhXCIsXG4gIFwiQWZyaWNhL0FiaWRqYW58QWZyaWNhL0JhbWFrb1wiLFxuICBcIkFmcmljYS9BYmlkamFufEFmcmljYS9CYW5qdWxcIixcbiAgXCJBZnJpY2EvQWJpZGphbnxBZnJpY2EvQ29uYWtyeVwiLFxuICBcIkFmcmljYS9BYmlkamFufEFmcmljYS9EYWthclwiLFxuICBcIkFmcmljYS9BYmlkamFufEFmcmljYS9GcmVldG93blwiLFxuICBcIkFmcmljYS9BYmlkamFufEFmcmljYS9Mb21lXCIsXG4gIFwiQWZyaWNhL0FiaWRqYW58QWZyaWNhL05vdWFrY2hvdHRcIixcbiAgXCJBZnJpY2EvQWJpZGphbnxBZnJpY2EvT3VhZ2Fkb3Vnb3VcIixcbiAgXCJBZnJpY2EvQWJpZGphbnxBZnJpY2EvVGltYnVrdHVcIixcbiAgXCJBZnJpY2EvQWJpZGphbnxBdGxhbnRpYy9SZXlramF2aWtcIixcbiAgXCJBZnJpY2EvQWJpZGphbnxBdGxhbnRpYy9TdF9IZWxlbmFcIixcbiAgXCJBZnJpY2EvQWJpZGphbnxJY2VsYW5kXCIsXG4gIFwiQWZyaWNhL0NhaXJvfEVneXB0XCIsXG4gIFwiQWZyaWNhL0pvaGFubmVzYnVyZ3xBZnJpY2EvTWFzZXJ1XCIsXG4gIFwiQWZyaWNhL0pvaGFubmVzYnVyZ3xBZnJpY2EvTWJhYmFuZVwiLFxuICBcIkFmcmljYS9MYWdvc3xBZnJpY2EvQmFuZ3VpXCIsXG4gIFwiQWZyaWNhL0xhZ29zfEFmcmljYS9CcmF6emF2aWxsZVwiLFxuICBcIkFmcmljYS9MYWdvc3xBZnJpY2EvRG91YWxhXCIsXG4gIFwiQWZyaWNhL0xhZ29zfEFmcmljYS9LaW5zaGFzYVwiLFxuICBcIkFmcmljYS9MYWdvc3xBZnJpY2EvTGlicmV2aWxsZVwiLFxuICBcIkFmcmljYS9MYWdvc3xBZnJpY2EvTHVhbmRhXCIsXG4gIFwiQWZyaWNhL0xhZ29zfEFmcmljYS9NYWxhYm9cIixcbiAgXCJBZnJpY2EvTGFnb3N8QWZyaWNhL05pYW1leVwiLFxuICBcIkFmcmljYS9MYWdvc3xBZnJpY2EvUG9ydG8tTm92b1wiLFxuICBcIkFmcmljYS9NYXB1dG98QWZyaWNhL0JsYW50eXJlXCIsXG4gIFwiQWZyaWNhL01hcHV0b3xBZnJpY2EvQnVqdW1idXJhXCIsXG4gIFwiQWZyaWNhL01hcHV0b3xBZnJpY2EvR2Fib3JvbmVcIixcbiAgXCJBZnJpY2EvTWFwdXRvfEFmcmljYS9IYXJhcmVcIixcbiAgXCJBZnJpY2EvTWFwdXRvfEFmcmljYS9LaWdhbGlcIixcbiAgXCJBZnJpY2EvTWFwdXRvfEFmcmljYS9MdWJ1bWJhc2hpXCIsXG4gIFwiQWZyaWNhL01hcHV0b3xBZnJpY2EvTHVzYWthXCIsXG4gIFwiQWZyaWNhL05haXJvYml8QWZyaWNhL0FkZGlzX0FiYWJhXCIsXG4gIFwiQWZyaWNhL05haXJvYml8QWZyaWNhL0FzbWFyYVwiLFxuICBcIkFmcmljYS9OYWlyb2JpfEFmcmljYS9Bc21lcmFcIixcbiAgXCJBZnJpY2EvTmFpcm9iaXxBZnJpY2EvRGFyX2VzX1NhbGFhbVwiLFxuICBcIkFmcmljYS9OYWlyb2JpfEFmcmljYS9Eamlib3V0aVwiLFxuICBcIkFmcmljYS9OYWlyb2JpfEFmcmljYS9LYW1wYWxhXCIsXG4gIFwiQWZyaWNhL05haXJvYml8QWZyaWNhL01vZ2FkaXNodVwiLFxuICBcIkFmcmljYS9OYWlyb2JpfEluZGlhbi9BbnRhbmFuYXJpdm9cIixcbiAgXCJBZnJpY2EvTmFpcm9iaXxJbmRpYW4vQ29tb3JvXCIsXG4gIFwiQWZyaWNhL05haXJvYml8SW5kaWFuL01heW90dGVcIixcbiAgXCJBZnJpY2EvVHJpcG9saXxMaWJ5YVwiLFxuICBcIkFtZXJpY2EvQWRha3xBbWVyaWNhL0F0a2FcIixcbiAgXCJBbWVyaWNhL0FkYWt8VVMvQWxldXRpYW5cIixcbiAgXCJBbWVyaWNhL0FuY2hvcmFnZXxVUy9BbGFza2FcIixcbiAgXCJBbWVyaWNhL0FyZ2VudGluYS9CdWVub3NfQWlyZXN8QW1lcmljYS9CdWVub3NfQWlyZXNcIixcbiAgXCJBbWVyaWNhL0FyZ2VudGluYS9DYXRhbWFyY2F8QW1lcmljYS9BcmdlbnRpbmEvQ29tb2RSaXZhZGF2aWFcIixcbiAgXCJBbWVyaWNhL0FyZ2VudGluYS9DYXRhbWFyY2F8QW1lcmljYS9DYXRhbWFyY2FcIixcbiAgXCJBbWVyaWNhL0FyZ2VudGluYS9Db3Jkb2JhfEFtZXJpY2EvQ29yZG9iYVwiLFxuICBcIkFtZXJpY2EvQXJnZW50aW5hL0NvcmRvYmF8QW1lcmljYS9Sb3NhcmlvXCIsXG4gIFwiQW1lcmljYS9BcmdlbnRpbmEvSnVqdXl8QW1lcmljYS9KdWp1eVwiLFxuICBcIkFtZXJpY2EvQXJnZW50aW5hL01lbmRvemF8QW1lcmljYS9NZW5kb3phXCIsXG4gIFwiQW1lcmljYS9DaGljYWdvfENTVDZDRFRcIixcbiAgXCJBbWVyaWNhL0NoaWNhZ298VVMvQ2VudHJhbFwiLFxuICBcIkFtZXJpY2EvRGVudmVyfEFtZXJpY2EvU2hpcHJvY2tcIixcbiAgXCJBbWVyaWNhL0RlbnZlcnxNU1Q3TURUXCIsXG4gIFwiQW1lcmljYS9EZW52ZXJ8TmF2YWpvXCIsXG4gIFwiQW1lcmljYS9EZW52ZXJ8VVMvTW91bnRhaW5cIixcbiAgXCJBbWVyaWNhL0RldHJvaXR8VVMvTWljaGlnYW5cIixcbiAgXCJBbWVyaWNhL0VkbW9udG9ufEFtZXJpY2EvWWVsbG93a25pZmVcIixcbiAgXCJBbWVyaWNhL0VkbW9udG9ufENhbmFkYS9Nb3VudGFpblwiLFxuICBcIkFtZXJpY2EvRm9ydF9XYXluZXxBbWVyaWNhL0luZGlhbmEvSW5kaWFuYXBvbGlzXCIsXG4gIFwiQW1lcmljYS9Gb3J0X1dheW5lfEFtZXJpY2EvSW5kaWFuYXBvbGlzXCIsXG4gIFwiQW1lcmljYS9Gb3J0X1dheW5lfFVTL0Vhc3QtSW5kaWFuYVwiLFxuICBcIkFtZXJpY2EvR29kdGhhYnxBbWVyaWNhL051dWtcIixcbiAgXCJBbWVyaWNhL0hhbGlmYXh8Q2FuYWRhL0F0bGFudGljXCIsXG4gIFwiQW1lcmljYS9IYXZhbmF8Q3ViYVwiLFxuICBcIkFtZXJpY2EvSW5kaWFuYS9Lbm94fEFtZXJpY2EvS25veF9JTlwiLFxuICBcIkFtZXJpY2EvSW5kaWFuYS9Lbm94fFVTL0luZGlhbmEtU3RhcmtlXCIsXG4gIFwiQW1lcmljYS9JcWFsdWl0fEFtZXJpY2EvUGFuZ25pcnR1bmdcIixcbiAgXCJBbWVyaWNhL0phbWFpY2F8SmFtYWljYVwiLFxuICBcIkFtZXJpY2EvS2VudHVja3kvTG91aXN2aWxsZXxBbWVyaWNhL0xvdWlzdmlsbGVcIixcbiAgXCJBbWVyaWNhL0xvc19BbmdlbGVzfFBTVDhQRFRcIixcbiAgXCJBbWVyaWNhL0xvc19BbmdlbGVzfFVTL1BhY2lmaWNcIixcbiAgXCJBbWVyaWNhL01hbmF1c3xCcmF6aWwvV2VzdFwiLFxuICBcIkFtZXJpY2EvTWF6YXRsYW58TWV4aWNvL0JhamFTdXJcIixcbiAgXCJBbWVyaWNhL01leGljb19DaXR5fE1leGljby9HZW5lcmFsXCIsXG4gIFwiQW1lcmljYS9OZXdfWW9ya3xFU1Q1RURUXCIsXG4gIFwiQW1lcmljYS9OZXdfWW9ya3xVUy9FYXN0ZXJuXCIsXG4gIFwiQW1lcmljYS9Ob3JvbmhhfEJyYXppbC9EZU5vcm9uaGFcIixcbiAgXCJBbWVyaWNhL1BhbmFtYXxBbWVyaWNhL0F0aWtva2FuXCIsXG4gIFwiQW1lcmljYS9QYW5hbWF8QW1lcmljYS9DYXltYW5cIixcbiAgXCJBbWVyaWNhL1BhbmFtYXxBbWVyaWNhL0NvcmFsX0hhcmJvdXJcIixcbiAgXCJBbWVyaWNhL1BhbmFtYXxFU1RcIixcbiAgXCJBbWVyaWNhL1Bob2VuaXh8QW1lcmljYS9DcmVzdG9uXCIsXG4gIFwiQW1lcmljYS9QaG9lbml4fE1TVFwiLFxuICBcIkFtZXJpY2EvUGhvZW5peHxVUy9Bcml6b25hXCIsXG4gIFwiQW1lcmljYS9QdWVydG9fUmljb3xBbWVyaWNhL0FuZ3VpbGxhXCIsXG4gIFwiQW1lcmljYS9QdWVydG9fUmljb3xBbWVyaWNhL0FudGlndWFcIixcbiAgXCJBbWVyaWNhL1B1ZXJ0b19SaWNvfEFtZXJpY2EvQXJ1YmFcIixcbiAgXCJBbWVyaWNhL1B1ZXJ0b19SaWNvfEFtZXJpY2EvQmxhbmMtU2FibG9uXCIsXG4gIFwiQW1lcmljYS9QdWVydG9fUmljb3xBbWVyaWNhL0N1cmFjYW9cIixcbiAgXCJBbWVyaWNhL1B1ZXJ0b19SaWNvfEFtZXJpY2EvRG9taW5pY2FcIixcbiAgXCJBbWVyaWNhL1B1ZXJ0b19SaWNvfEFtZXJpY2EvR3JlbmFkYVwiLFxuICBcIkFtZXJpY2EvUHVlcnRvX1JpY298QW1lcmljYS9HdWFkZWxvdXBlXCIsXG4gIFwiQW1lcmljYS9QdWVydG9fUmljb3xBbWVyaWNhL0tyYWxlbmRpamtcIixcbiAgXCJBbWVyaWNhL1B1ZXJ0b19SaWNvfEFtZXJpY2EvTG93ZXJfUHJpbmNlc1wiLFxuICBcIkFtZXJpY2EvUHVlcnRvX1JpY298QW1lcmljYS9NYXJpZ290XCIsXG4gIFwiQW1lcmljYS9QdWVydG9fUmljb3xBbWVyaWNhL01vbnRzZXJyYXRcIixcbiAgXCJBbWVyaWNhL1B1ZXJ0b19SaWNvfEFtZXJpY2EvUG9ydF9vZl9TcGFpblwiLFxuICBcIkFtZXJpY2EvUHVlcnRvX1JpY298QW1lcmljYS9TdF9CYXJ0aGVsZW15XCIsXG4gIFwiQW1lcmljYS9QdWVydG9fUmljb3xBbWVyaWNhL1N0X0tpdHRzXCIsXG4gIFwiQW1lcmljYS9QdWVydG9fUmljb3xBbWVyaWNhL1N0X0x1Y2lhXCIsXG4gIFwiQW1lcmljYS9QdWVydG9fUmljb3xBbWVyaWNhL1N0X1Rob21hc1wiLFxuICBcIkFtZXJpY2EvUHVlcnRvX1JpY298QW1lcmljYS9TdF9WaW5jZW50XCIsXG4gIFwiQW1lcmljYS9QdWVydG9fUmljb3xBbWVyaWNhL1RvcnRvbGFcIixcbiAgXCJBbWVyaWNhL1B1ZXJ0b19SaWNvfEFtZXJpY2EvVmlyZ2luXCIsXG4gIFwiQW1lcmljYS9SZWdpbmF8Q2FuYWRhL1Nhc2thdGNoZXdhblwiLFxuICBcIkFtZXJpY2EvUmlvX0JyYW5jb3xBbWVyaWNhL1BvcnRvX0FjcmVcIixcbiAgXCJBbWVyaWNhL1Jpb19CcmFuY298QnJhemlsL0FjcmVcIixcbiAgXCJBbWVyaWNhL1NhbnRpYWdvfENoaWxlL0NvbnRpbmVudGFsXCIsXG4gIFwiQW1lcmljYS9TYW9fUGF1bG98QnJhemlsL0Vhc3RcIixcbiAgXCJBbWVyaWNhL1N0X0pvaG5zfENhbmFkYS9OZXdmb3VuZGxhbmRcIixcbiAgXCJBbWVyaWNhL1RpanVhbmF8QW1lcmljYS9FbnNlbmFkYVwiLFxuICBcIkFtZXJpY2EvVGlqdWFuYXxBbWVyaWNhL1NhbnRhX0lzYWJlbFwiLFxuICBcIkFtZXJpY2EvVGlqdWFuYXxNZXhpY28vQmFqYU5vcnRlXCIsXG4gIFwiQW1lcmljYS9Ub3JvbnRvfEFtZXJpY2EvTW9udHJlYWxcIixcbiAgXCJBbWVyaWNhL1Rvcm9udG98QW1lcmljYS9OYXNzYXVcIixcbiAgXCJBbWVyaWNhL1Rvcm9udG98QW1lcmljYS9OaXBpZ29uXCIsXG4gIFwiQW1lcmljYS9Ub3JvbnRvfEFtZXJpY2EvVGh1bmRlcl9CYXlcIixcbiAgXCJBbWVyaWNhL1Rvcm9udG98Q2FuYWRhL0Vhc3Rlcm5cIixcbiAgXCJBbWVyaWNhL1ZhbmNvdXZlcnxDYW5hZGEvUGFjaWZpY1wiLFxuICBcIkFtZXJpY2EvV2hpdGVob3JzZXxDYW5hZGEvWXVrb25cIixcbiAgXCJBbWVyaWNhL1dpbm5pcGVnfEFtZXJpY2EvUmFpbnlfUml2ZXJcIixcbiAgXCJBbWVyaWNhL1dpbm5pcGVnfENhbmFkYS9DZW50cmFsXCIsXG4gIFwiQXNpYS9Bc2hnYWJhdHxBc2lhL0FzaGtoYWJhZFwiLFxuICBcIkFzaWEvQmFuZ2tva3xBc2lhL1Bobm9tX1BlbmhcIixcbiAgXCJBc2lhL0Jhbmdrb2t8QXNpYS9WaWVudGlhbmVcIixcbiAgXCJBc2lhL0Jhbmdrb2t8SW5kaWFuL0NocmlzdG1hc1wiLFxuICBcIkFzaWEvQnJ1bmVpfEFzaWEvS3VjaGluZ1wiLFxuICBcIkFzaWEvRGhha2F8QXNpYS9EYWNjYVwiLFxuICBcIkFzaWEvRHViYWl8QXNpYS9NdXNjYXRcIixcbiAgXCJBc2lhL0R1YmFpfEluZGlhbi9NYWhlXCIsXG4gIFwiQXNpYS9EdWJhaXxJbmRpYW4vUmV1bmlvblwiLFxuICBcIkFzaWEvSG9fQ2hpX01pbmh8QXNpYS9TYWlnb25cIixcbiAgXCJBc2lhL0hvbmdfS29uZ3xIb25na29uZ1wiLFxuICBcIkFzaWEvSmVydXNhbGVtfEFzaWEvVGVsX0F2aXZcIixcbiAgXCJBc2lhL0plcnVzYWxlbXxJc3JhZWxcIixcbiAgXCJBc2lhL0thdGhtYW5kdXxBc2lhL0thdG1hbmR1XCIsXG4gIFwiQXNpYS9Lb2xrYXRhfEFzaWEvQ2FsY3V0dGFcIixcbiAgXCJBc2lhL0t1YWxhX0x1bXB1cnxBc2lhL1NpbmdhcG9yZVwiLFxuICBcIkFzaWEvS3VhbGFfTHVtcHVyfFNpbmdhcG9yZVwiLFxuICBcIkFzaWEvTWFjYXV8QXNpYS9NYWNhb1wiLFxuICBcIkFzaWEvTWFrYXNzYXJ8QXNpYS9VanVuZ19QYW5kYW5nXCIsXG4gIFwiQXNpYS9OaWNvc2lhfEV1cm9wZS9OaWNvc2lhXCIsXG4gIFwiQXNpYS9RYXRhcnxBc2lhL0JhaHJhaW5cIixcbiAgXCJBc2lhL1Jhbmdvb258QXNpYS9ZYW5nb25cIixcbiAgXCJBc2lhL1Jhbmdvb258SW5kaWFuL0NvY29zXCIsXG4gIFwiQXNpYS9SaXlhZGh8QW50YXJjdGljYS9TeW93YVwiLFxuICBcIkFzaWEvUml5YWRofEFzaWEvQWRlblwiLFxuICBcIkFzaWEvUml5YWRofEFzaWEvS3V3YWl0XCIsXG4gIFwiQXNpYS9TZW91bHxST0tcIixcbiAgXCJBc2lhL1NoYW5naGFpfEFzaWEvQ2hvbmdxaW5nXCIsXG4gIFwiQXNpYS9TaGFuZ2hhaXxBc2lhL0NodW5na2luZ1wiLFxuICBcIkFzaWEvU2hhbmdoYWl8QXNpYS9IYXJiaW5cIixcbiAgXCJBc2lhL1NoYW5naGFpfFBSQ1wiLFxuICBcIkFzaWEvVGFpcGVpfFJPQ1wiLFxuICBcIkFzaWEvVGVocmFufElyYW5cIixcbiAgXCJBc2lhL1RoaW1waHV8QXNpYS9UaGltYnVcIixcbiAgXCJBc2lhL1Rva3lvfEphcGFuXCIsXG4gIFwiQXNpYS9VbGFhbmJhYXRhcnxBc2lhL0Nob2liYWxzYW5cIixcbiAgXCJBc2lhL1VsYWFuYmFhdGFyfEFzaWEvVWxhbl9CYXRvclwiLFxuICBcIkFzaWEvVXJ1bXFpfEFzaWEvS2FzaGdhclwiLFxuICBcIkF0bGFudGljL0Zhcm9lfEF0bGFudGljL0ZhZXJvZVwiLFxuICBcIkF1c3RyYWxpYS9BZGVsYWlkZXxBdXN0cmFsaWEvU291dGhcIixcbiAgXCJBdXN0cmFsaWEvQnJpc2JhbmV8QXVzdHJhbGlhL1F1ZWVuc2xhbmRcIixcbiAgXCJBdXN0cmFsaWEvQnJva2VuX0hpbGx8QXVzdHJhbGlhL1lhbmNvd2lubmFcIixcbiAgXCJBdXN0cmFsaWEvRGFyd2lufEF1c3RyYWxpYS9Ob3J0aFwiLFxuICBcIkF1c3RyYWxpYS9Ib2JhcnR8QXVzdHJhbGlhL0N1cnJpZVwiLFxuICBcIkF1c3RyYWxpYS9Ib2JhcnR8QXVzdHJhbGlhL1Rhc21hbmlhXCIsXG4gIFwiQXVzdHJhbGlhL0xvcmRfSG93ZXxBdXN0cmFsaWEvTEhJXCIsXG4gIFwiQXVzdHJhbGlhL01lbGJvdXJuZXxBdXN0cmFsaWEvVmljdG9yaWFcIixcbiAgXCJBdXN0cmFsaWEvUGVydGh8QXVzdHJhbGlhL1dlc3RcIixcbiAgXCJBdXN0cmFsaWEvU3lkbmV5fEF1c3RyYWxpYS9BQ1RcIixcbiAgXCJBdXN0cmFsaWEvU3lkbmV5fEF1c3RyYWxpYS9DYW5iZXJyYVwiLFxuICBcIkF1c3RyYWxpYS9TeWRuZXl8QXVzdHJhbGlhL05TV1wiLFxuICBcIkV0Yy9HTVQtMHxFdGMvR01UXCIsXG4gIFwiRXRjL0dNVC0wfEV0Yy9HTVQrMFwiLFxuICBcIkV0Yy9HTVQtMHxFdGMvR01UMFwiLFxuICBcIkV0Yy9HTVQtMHxFdGMvR3JlZW53aWNoXCIsXG4gIFwiRXRjL0dNVC0wfEdNVFwiLFxuICBcIkV0Yy9HTVQtMHxHTVQrMFwiLFxuICBcIkV0Yy9HTVQtMHxHTVQtMFwiLFxuICBcIkV0Yy9HTVQtMHxHTVQwXCIsXG4gIFwiRXRjL0dNVC0wfEdyZWVud2ljaFwiLFxuICBcIkV0Yy9VVEN8RXRjL1VDVFwiLFxuICBcIkV0Yy9VVEN8RXRjL1VuaXZlcnNhbFwiLFxuICBcIkV0Yy9VVEN8RXRjL1p1bHVcIixcbiAgXCJFdGMvVVRDfFVDVFwiLFxuICBcIkV0Yy9VVEN8VVRDXCIsXG4gIFwiRXRjL1VUQ3xVbml2ZXJzYWxcIixcbiAgXCJFdGMvVVRDfFp1bHVcIixcbiAgXCJFdXJvcGUvQXRoZW5zfEVFVFwiLFxuICBcIkV1cm9wZS9CZWxncmFkZXxFdXJvcGUvTGp1YmxqYW5hXCIsXG4gIFwiRXVyb3BlL0JlbGdyYWRlfEV1cm9wZS9Qb2Rnb3JpY2FcIixcbiAgXCJFdXJvcGUvQmVsZ3JhZGV8RXVyb3BlL1NhcmFqZXZvXCIsXG4gIFwiRXVyb3BlL0JlbGdyYWRlfEV1cm9wZS9Ta29wamVcIixcbiAgXCJFdXJvcGUvQmVsZ3JhZGV8RXVyb3BlL1phZ3JlYlwiLFxuICBcIkV1cm9wZS9CZXJsaW58QXJjdGljL0xvbmd5ZWFyYnllblwiLFxuICBcIkV1cm9wZS9CZXJsaW58QXRsYW50aWMvSmFuX01heWVuXCIsXG4gIFwiRXVyb3BlL0JlcmxpbnxFdXJvcGUvQ29wZW5oYWdlblwiLFxuICBcIkV1cm9wZS9CZXJsaW58RXVyb3BlL09zbG9cIixcbiAgXCJFdXJvcGUvQmVybGlufEV1cm9wZS9TdG9ja2hvbG1cIixcbiAgXCJFdXJvcGUvQnJ1c3NlbHN8Q0VUXCIsXG4gIFwiRXVyb3BlL0JydXNzZWxzfEV1cm9wZS9BbXN0ZXJkYW1cIixcbiAgXCJFdXJvcGUvQnJ1c3NlbHN8RXVyb3BlL0x1eGVtYm91cmdcIixcbiAgXCJFdXJvcGUvQnJ1c3NlbHN8TUVUXCIsXG4gIFwiRXVyb3BlL0NoaXNpbmF1fEV1cm9wZS9UaXJhc3BvbFwiLFxuICBcIkV1cm9wZS9EdWJsaW58RWlyZVwiLFxuICBcIkV1cm9wZS9IZWxzaW5raXxFdXJvcGUvTWFyaWVoYW1uXCIsXG4gIFwiRXVyb3BlL0lzdGFuYnVsfEFzaWEvSXN0YW5idWxcIixcbiAgXCJFdXJvcGUvSXN0YW5idWx8VHVya2V5XCIsXG4gIFwiRXVyb3BlL0tpZXZ8RXVyb3BlL0t5aXZcIixcbiAgXCJFdXJvcGUvS2lldnxFdXJvcGUvVXpoZ29yb2RcIixcbiAgXCJFdXJvcGUvS2lldnxFdXJvcGUvWmFwb3Jvemh5ZVwiLFxuICBcIkV1cm9wZS9MaXNib258UG9ydHVnYWxcIixcbiAgXCJFdXJvcGUvTGlzYm9ufFdFVFwiLFxuICBcIkV1cm9wZS9Mb25kb258RXVyb3BlL0JlbGZhc3RcIixcbiAgXCJFdXJvcGUvTG9uZG9ufEV1cm9wZS9HdWVybnNleVwiLFxuICBcIkV1cm9wZS9Mb25kb258RXVyb3BlL0lzbGVfb2ZfTWFuXCIsXG4gIFwiRXVyb3BlL0xvbmRvbnxFdXJvcGUvSmVyc2V5XCIsXG4gIFwiRXVyb3BlL0xvbmRvbnxHQlwiLFxuICBcIkV1cm9wZS9Mb25kb258R0ItRWlyZVwiLFxuICBcIkV1cm9wZS9Nb3Njb3d8Vy1TVVwiLFxuICBcIkV1cm9wZS9QYXJpc3xFdXJvcGUvTW9uYWNvXCIsXG4gIFwiRXVyb3BlL1ByYWd1ZXxFdXJvcGUvQnJhdGlzbGF2YVwiLFxuICBcIkV1cm9wZS9Sb21lfEV1cm9wZS9TYW5fTWFyaW5vXCIsXG4gIFwiRXVyb3BlL1JvbWV8RXVyb3BlL1ZhdGljYW5cIixcbiAgXCJFdXJvcGUvV2Fyc2F3fFBvbGFuZFwiLFxuICBcIkV1cm9wZS9adXJpY2h8RXVyb3BlL0J1c2luZ2VuXCIsXG4gIFwiRXVyb3BlL1p1cmljaHxFdXJvcGUvVmFkdXpcIixcbiAgXCJJbmRpYW4vTWFsZGl2ZXN8SW5kaWFuL0tlcmd1ZWxlblwiLFxuICBcIlBhY2lmaWMvQXVja2xhbmR8QW50YXJjdGljYS9NY011cmRvXCIsXG4gIFwiUGFjaWZpYy9BdWNrbGFuZHxBbnRhcmN0aWNhL1NvdXRoX1BvbGVcIixcbiAgXCJQYWNpZmljL0F1Y2tsYW5kfE5aXCIsXG4gIFwiUGFjaWZpYy9DaGF0aGFtfE5aLUNIQVRcIixcbiAgXCJQYWNpZmljL0Vhc3RlcnxDaGlsZS9FYXN0ZXJJc2xhbmRcIixcbiAgXCJQYWNpZmljL0VuZGVyYnVyeXxQYWNpZmljL0thbnRvblwiLFxuICBcIlBhY2lmaWMvR3VhZGFsY2FuYWx8UGFjaWZpYy9Qb2hucGVpXCIsXG4gIFwiUGFjaWZpYy9HdWFkYWxjYW5hbHxQYWNpZmljL1BvbmFwZVwiLFxuICBcIlBhY2lmaWMvR3VhbXxQYWNpZmljL1NhaXBhblwiLFxuICBcIlBhY2lmaWMvSG9ub2x1bHV8SFNUXCIsXG4gIFwiUGFjaWZpYy9Ib25vbHVsdXxQYWNpZmljL0pvaG5zdG9uXCIsXG4gIFwiUGFjaWZpYy9Ib25vbHVsdXxVUy9IYXdhaWlcIixcbiAgXCJQYWNpZmljL0t3YWphbGVpbnxLd2FqYWxlaW5cIixcbiAgXCJQYWNpZmljL1BhZ29fUGFnb3xQYWNpZmljL01pZHdheVwiLFxuICBcIlBhY2lmaWMvUGFnb19QYWdvfFBhY2lmaWMvU2Ftb2FcIixcbiAgXCJQYWNpZmljL1BhZ29fUGFnb3xVUy9TYW1vYVwiLFxuICBcIlBhY2lmaWMvUG9ydF9Nb3Jlc2J5fEFudGFyY3RpY2EvRHVtb250RFVydmlsbGVcIixcbiAgXCJQYWNpZmljL1BvcnRfTW9yZXNieXxQYWNpZmljL0NodXVrXCIsXG4gIFwiUGFjaWZpYy9Qb3J0X01vcmVzYnl8UGFjaWZpYy9UcnVrXCIsXG4gIFwiUGFjaWZpYy9Qb3J0X01vcmVzYnl8UGFjaWZpYy9ZYXBcIixcbiAgXCJQYWNpZmljL1RhcmF3YXxQYWNpZmljL0Z1bmFmdXRpXCIsXG4gIFwiUGFjaWZpYy9UYXJhd2F8UGFjaWZpYy9NYWp1cm9cIixcbiAgXCJQYWNpZmljL1RhcmF3YXxQYWNpZmljL1dha2VcIixcbiAgXCJQYWNpZmljL1RhcmF3YXxQYWNpZmljL1dhbGxpc1wiXG5dLCBHaiA9IFtcbiAgXCJBRHxFdXJvcGUvQW5kb3JyYVwiLFxuICBcIkFFfEFzaWEvRHViYWlcIixcbiAgXCJBRnxBc2lhL0thYnVsXCIsXG4gIFwiQUd8QW1lcmljYS9QdWVydG9fUmljbyBBbWVyaWNhL0FudGlndWFcIixcbiAgXCJBSXxBbWVyaWNhL1B1ZXJ0b19SaWNvIEFtZXJpY2EvQW5ndWlsbGFcIixcbiAgXCJBTHxFdXJvcGUvVGlyYW5lXCIsXG4gIFwiQU18QXNpYS9ZZXJldmFuXCIsXG4gIFwiQU98QWZyaWNhL0xhZ29zIEFmcmljYS9MdWFuZGFcIixcbiAgXCJBUXxBbnRhcmN0aWNhL0Nhc2V5IEFudGFyY3RpY2EvRGF2aXMgQW50YXJjdGljYS9NYXdzb24gQW50YXJjdGljYS9QYWxtZXIgQW50YXJjdGljYS9Sb3RoZXJhIEFudGFyY3RpY2EvVHJvbGwgQW50YXJjdGljYS9Wb3N0b2sgUGFjaWZpYy9BdWNrbGFuZCBQYWNpZmljL1BvcnRfTW9yZXNieSBBc2lhL1JpeWFkaCBBbnRhcmN0aWNhL01jTXVyZG8gQW50YXJjdGljYS9EdW1vbnREVXJ2aWxsZSBBbnRhcmN0aWNhL1N5b3dhXCIsXG4gIFwiQVJ8QW1lcmljYS9BcmdlbnRpbmEvQnVlbm9zX0FpcmVzIEFtZXJpY2EvQXJnZW50aW5hL0NvcmRvYmEgQW1lcmljYS9BcmdlbnRpbmEvU2FsdGEgQW1lcmljYS9BcmdlbnRpbmEvSnVqdXkgQW1lcmljYS9BcmdlbnRpbmEvVHVjdW1hbiBBbWVyaWNhL0FyZ2VudGluYS9DYXRhbWFyY2EgQW1lcmljYS9BcmdlbnRpbmEvTGFfUmlvamEgQW1lcmljYS9BcmdlbnRpbmEvU2FuX0p1YW4gQW1lcmljYS9BcmdlbnRpbmEvTWVuZG96YSBBbWVyaWNhL0FyZ2VudGluYS9TYW5fTHVpcyBBbWVyaWNhL0FyZ2VudGluYS9SaW9fR2FsbGVnb3MgQW1lcmljYS9BcmdlbnRpbmEvVXNodWFpYVwiLFxuICBcIkFTfFBhY2lmaWMvUGFnb19QYWdvXCIsXG4gIFwiQVR8RXVyb3BlL1ZpZW5uYVwiLFxuICBcIkFVfEF1c3RyYWxpYS9Mb3JkX0hvd2UgQW50YXJjdGljYS9NYWNxdWFyaWUgQXVzdHJhbGlhL0hvYmFydCBBdXN0cmFsaWEvTWVsYm91cm5lIEF1c3RyYWxpYS9TeWRuZXkgQXVzdHJhbGlhL0Jyb2tlbl9IaWxsIEF1c3RyYWxpYS9CcmlzYmFuZSBBdXN0cmFsaWEvTGluZGVtYW4gQXVzdHJhbGlhL0FkZWxhaWRlIEF1c3RyYWxpYS9EYXJ3aW4gQXVzdHJhbGlhL1BlcnRoIEF1c3RyYWxpYS9FdWNsYVwiLFxuICBcIkFXfEFtZXJpY2EvUHVlcnRvX1JpY28gQW1lcmljYS9BcnViYVwiLFxuICBcIkFYfEV1cm9wZS9IZWxzaW5raSBFdXJvcGUvTWFyaWVoYW1uXCIsXG4gIFwiQVp8QXNpYS9CYWt1XCIsXG4gIFwiQkF8RXVyb3BlL0JlbGdyYWRlIEV1cm9wZS9TYXJhamV2b1wiLFxuICBcIkJCfEFtZXJpY2EvQmFyYmFkb3NcIixcbiAgXCJCRHxBc2lhL0RoYWthXCIsXG4gIFwiQkV8RXVyb3BlL0JydXNzZWxzXCIsXG4gIFwiQkZ8QWZyaWNhL0FiaWRqYW4gQWZyaWNhL091YWdhZG91Z291XCIsXG4gIFwiQkd8RXVyb3BlL1NvZmlhXCIsXG4gIFwiQkh8QXNpYS9RYXRhciBBc2lhL0JhaHJhaW5cIixcbiAgXCJCSXxBZnJpY2EvTWFwdXRvIEFmcmljYS9CdWp1bWJ1cmFcIixcbiAgXCJCSnxBZnJpY2EvTGFnb3MgQWZyaWNhL1BvcnRvLU5vdm9cIixcbiAgXCJCTHxBbWVyaWNhL1B1ZXJ0b19SaWNvIEFtZXJpY2EvU3RfQmFydGhlbGVteVwiLFxuICBcIkJNfEF0bGFudGljL0Jlcm11ZGFcIixcbiAgXCJCTnxBc2lhL0t1Y2hpbmcgQXNpYS9CcnVuZWlcIixcbiAgXCJCT3xBbWVyaWNhL0xhX1BhelwiLFxuICBcIkJRfEFtZXJpY2EvUHVlcnRvX1JpY28gQW1lcmljYS9LcmFsZW5kaWprXCIsXG4gIFwiQlJ8QW1lcmljYS9Ob3JvbmhhIEFtZXJpY2EvQmVsZW0gQW1lcmljYS9Gb3J0YWxlemEgQW1lcmljYS9SZWNpZmUgQW1lcmljYS9BcmFndWFpbmEgQW1lcmljYS9NYWNlaW8gQW1lcmljYS9CYWhpYSBBbWVyaWNhL1Nhb19QYXVsbyBBbWVyaWNhL0NhbXBvX0dyYW5kZSBBbWVyaWNhL0N1aWFiYSBBbWVyaWNhL1NhbnRhcmVtIEFtZXJpY2EvUG9ydG9fVmVsaG8gQW1lcmljYS9Cb2FfVmlzdGEgQW1lcmljYS9NYW5hdXMgQW1lcmljYS9FaXJ1bmVwZSBBbWVyaWNhL1Jpb19CcmFuY29cIixcbiAgXCJCU3xBbWVyaWNhL1Rvcm9udG8gQW1lcmljYS9OYXNzYXVcIixcbiAgXCJCVHxBc2lhL1RoaW1waHVcIixcbiAgXCJCV3xBZnJpY2EvTWFwdXRvIEFmcmljYS9HYWJvcm9uZVwiLFxuICBcIkJZfEV1cm9wZS9NaW5za1wiLFxuICBcIkJafEFtZXJpY2EvQmVsaXplXCIsXG4gIFwiQ0F8QW1lcmljYS9TdF9Kb2hucyBBbWVyaWNhL0hhbGlmYXggQW1lcmljYS9HbGFjZV9CYXkgQW1lcmljYS9Nb25jdG9uIEFtZXJpY2EvR29vc2VfQmF5IEFtZXJpY2EvVG9yb250byBBbWVyaWNhL0lxYWx1aXQgQW1lcmljYS9XaW5uaXBlZyBBbWVyaWNhL1Jlc29sdXRlIEFtZXJpY2EvUmFua2luX0lubGV0IEFtZXJpY2EvUmVnaW5hIEFtZXJpY2EvU3dpZnRfQ3VycmVudCBBbWVyaWNhL0VkbW9udG9uIEFtZXJpY2EvQ2FtYnJpZGdlX0JheSBBbWVyaWNhL0ludXZpayBBbWVyaWNhL0Rhd3Nvbl9DcmVlayBBbWVyaWNhL0ZvcnRfTmVsc29uIEFtZXJpY2EvV2hpdGVob3JzZSBBbWVyaWNhL0Rhd3NvbiBBbWVyaWNhL1ZhbmNvdXZlciBBbWVyaWNhL1BhbmFtYSBBbWVyaWNhL1B1ZXJ0b19SaWNvIEFtZXJpY2EvUGhvZW5peCBBbWVyaWNhL0JsYW5jLVNhYmxvbiBBbWVyaWNhL0F0aWtva2FuIEFtZXJpY2EvQ3Jlc3RvblwiLFxuICBcIkNDfEFzaWEvWWFuZ29uIEluZGlhbi9Db2Nvc1wiLFxuICBcIkNEfEFmcmljYS9NYXB1dG8gQWZyaWNhL0xhZ29zIEFmcmljYS9LaW5zaGFzYSBBZnJpY2EvTHVidW1iYXNoaVwiLFxuICBcIkNGfEFmcmljYS9MYWdvcyBBZnJpY2EvQmFuZ3VpXCIsXG4gIFwiQ0d8QWZyaWNhL0xhZ29zIEFmcmljYS9CcmF6emF2aWxsZVwiLFxuICBcIkNIfEV1cm9wZS9adXJpY2hcIixcbiAgXCJDSXxBZnJpY2EvQWJpZGphblwiLFxuICBcIkNLfFBhY2lmaWMvUmFyb3RvbmdhXCIsXG4gIFwiQ0x8QW1lcmljYS9TYW50aWFnbyBBbWVyaWNhL1B1bnRhX0FyZW5hcyBQYWNpZmljL0Vhc3RlclwiLFxuICBcIkNNfEFmcmljYS9MYWdvcyBBZnJpY2EvRG91YWxhXCIsXG4gIFwiQ058QXNpYS9TaGFuZ2hhaSBBc2lhL1VydW1xaVwiLFxuICBcIkNPfEFtZXJpY2EvQm9nb3RhXCIsXG4gIFwiQ1J8QW1lcmljYS9Db3N0YV9SaWNhXCIsXG4gIFwiQ1V8QW1lcmljYS9IYXZhbmFcIixcbiAgXCJDVnxBdGxhbnRpYy9DYXBlX1ZlcmRlXCIsXG4gIFwiQ1d8QW1lcmljYS9QdWVydG9fUmljbyBBbWVyaWNhL0N1cmFjYW9cIixcbiAgXCJDWHxBc2lhL0Jhbmdrb2sgSW5kaWFuL0NocmlzdG1hc1wiLFxuICBcIkNZfEFzaWEvTmljb3NpYSBBc2lhL0ZhbWFndXN0YVwiLFxuICBcIkNafEV1cm9wZS9QcmFndWVcIixcbiAgXCJERXxFdXJvcGUvWnVyaWNoIEV1cm9wZS9CZXJsaW4gRXVyb3BlL0J1c2luZ2VuXCIsXG4gIFwiREp8QWZyaWNhL05haXJvYmkgQWZyaWNhL0RqaWJvdXRpXCIsXG4gIFwiREt8RXVyb3BlL0JlcmxpbiBFdXJvcGUvQ29wZW5oYWdlblwiLFxuICBcIkRNfEFtZXJpY2EvUHVlcnRvX1JpY28gQW1lcmljYS9Eb21pbmljYVwiLFxuICBcIkRPfEFtZXJpY2EvU2FudG9fRG9taW5nb1wiLFxuICBcIkRafEFmcmljYS9BbGdpZXJzXCIsXG4gIFwiRUN8QW1lcmljYS9HdWF5YXF1aWwgUGFjaWZpYy9HYWxhcGFnb3NcIixcbiAgXCJFRXxFdXJvcGUvVGFsbGlublwiLFxuICBcIkVHfEFmcmljYS9DYWlyb1wiLFxuICBcIkVIfEFmcmljYS9FbF9BYWl1blwiLFxuICBcIkVSfEFmcmljYS9OYWlyb2JpIEFmcmljYS9Bc21hcmFcIixcbiAgXCJFU3xFdXJvcGUvTWFkcmlkIEFmcmljYS9DZXV0YSBBdGxhbnRpYy9DYW5hcnlcIixcbiAgXCJFVHxBZnJpY2EvTmFpcm9iaSBBZnJpY2EvQWRkaXNfQWJhYmFcIixcbiAgXCJGSXxFdXJvcGUvSGVsc2lua2lcIixcbiAgXCJGSnxQYWNpZmljL0ZpamlcIixcbiAgXCJGS3xBdGxhbnRpYy9TdGFubGV5XCIsXG4gIFwiRk18UGFjaWZpYy9Lb3NyYWUgUGFjaWZpYy9Qb3J0X01vcmVzYnkgUGFjaWZpYy9HdWFkYWxjYW5hbCBQYWNpZmljL0NodXVrIFBhY2lmaWMvUG9obnBlaVwiLFxuICBcIkZPfEF0bGFudGljL0Zhcm9lXCIsXG4gIFwiRlJ8RXVyb3BlL1BhcmlzXCIsXG4gIFwiR0F8QWZyaWNhL0xhZ29zIEFmcmljYS9MaWJyZXZpbGxlXCIsXG4gIFwiR0J8RXVyb3BlL0xvbmRvblwiLFxuICBcIkdEfEFtZXJpY2EvUHVlcnRvX1JpY28gQW1lcmljYS9HcmVuYWRhXCIsXG4gIFwiR0V8QXNpYS9UYmlsaXNpXCIsXG4gIFwiR0Z8QW1lcmljYS9DYXllbm5lXCIsXG4gIFwiR0d8RXVyb3BlL0xvbmRvbiBFdXJvcGUvR3Vlcm5zZXlcIixcbiAgXCJHSHxBZnJpY2EvQWJpZGphbiBBZnJpY2EvQWNjcmFcIixcbiAgXCJHSXxFdXJvcGUvR2licmFsdGFyXCIsXG4gIFwiR0x8QW1lcmljYS9OdXVrIEFtZXJpY2EvRGFubWFya3NoYXZuIEFtZXJpY2EvU2NvcmVzYnlzdW5kIEFtZXJpY2EvVGh1bGVcIixcbiAgXCJHTXxBZnJpY2EvQWJpZGphbiBBZnJpY2EvQmFuanVsXCIsXG4gIFwiR058QWZyaWNhL0FiaWRqYW4gQWZyaWNhL0NvbmFrcnlcIixcbiAgXCJHUHxBbWVyaWNhL1B1ZXJ0b19SaWNvIEFtZXJpY2EvR3VhZGVsb3VwZVwiLFxuICBcIkdRfEFmcmljYS9MYWdvcyBBZnJpY2EvTWFsYWJvXCIsXG4gIFwiR1J8RXVyb3BlL0F0aGVuc1wiLFxuICBcIkdTfEF0bGFudGljL1NvdXRoX0dlb3JnaWFcIixcbiAgXCJHVHxBbWVyaWNhL0d1YXRlbWFsYVwiLFxuICBcIkdVfFBhY2lmaWMvR3VhbVwiLFxuICBcIkdXfEFmcmljYS9CaXNzYXVcIixcbiAgXCJHWXxBbWVyaWNhL0d1eWFuYVwiLFxuICBcIkhLfEFzaWEvSG9uZ19Lb25nXCIsXG4gIFwiSE58QW1lcmljYS9UZWd1Y2lnYWxwYVwiLFxuICBcIkhSfEV1cm9wZS9CZWxncmFkZSBFdXJvcGUvWmFncmViXCIsXG4gIFwiSFR8QW1lcmljYS9Qb3J0LWF1LVByaW5jZVwiLFxuICBcIkhVfEV1cm9wZS9CdWRhcGVzdFwiLFxuICBcIklEfEFzaWEvSmFrYXJ0YSBBc2lhL1BvbnRpYW5hayBBc2lhL01ha2Fzc2FyIEFzaWEvSmF5YXB1cmFcIixcbiAgXCJJRXxFdXJvcGUvRHVibGluXCIsXG4gIFwiSUx8QXNpYS9KZXJ1c2FsZW1cIixcbiAgXCJJTXxFdXJvcGUvTG9uZG9uIEV1cm9wZS9Jc2xlX29mX01hblwiLFxuICBcIklOfEFzaWEvS29sa2F0YVwiLFxuICBcIklPfEluZGlhbi9DaGFnb3NcIixcbiAgXCJJUXxBc2lhL0JhZ2hkYWRcIixcbiAgXCJJUnxBc2lhL1RlaHJhblwiLFxuICBcIklTfEFmcmljYS9BYmlkamFuIEF0bGFudGljL1JleWtqYXZpa1wiLFxuICBcIklUfEV1cm9wZS9Sb21lXCIsXG4gIFwiSkV8RXVyb3BlL0xvbmRvbiBFdXJvcGUvSmVyc2V5XCIsXG4gIFwiSk18QW1lcmljYS9KYW1haWNhXCIsXG4gIFwiSk98QXNpYS9BbW1hblwiLFxuICBcIkpQfEFzaWEvVG9reW9cIixcbiAgXCJLRXxBZnJpY2EvTmFpcm9iaVwiLFxuICBcIktHfEFzaWEvQmlzaGtla1wiLFxuICBcIktIfEFzaWEvQmFuZ2tvayBBc2lhL1Bobm9tX1BlbmhcIixcbiAgXCJLSXxQYWNpZmljL1RhcmF3YSBQYWNpZmljL0thbnRvbiBQYWNpZmljL0tpcml0aW1hdGlcIixcbiAgXCJLTXxBZnJpY2EvTmFpcm9iaSBJbmRpYW4vQ29tb3JvXCIsXG4gIFwiS058QW1lcmljYS9QdWVydG9fUmljbyBBbWVyaWNhL1N0X0tpdHRzXCIsXG4gIFwiS1B8QXNpYS9QeW9uZ3lhbmdcIixcbiAgXCJLUnxBc2lhL1Nlb3VsXCIsXG4gIFwiS1d8QXNpYS9SaXlhZGggQXNpYS9LdXdhaXRcIixcbiAgXCJLWXxBbWVyaWNhL1BhbmFtYSBBbWVyaWNhL0NheW1hblwiLFxuICBcIktafEFzaWEvQWxtYXR5IEFzaWEvUXl6eWxvcmRhIEFzaWEvUW9zdGFuYXkgQXNpYS9BcXRvYmUgQXNpYS9BcXRhdSBBc2lhL0F0eXJhdSBBc2lhL09yYWxcIixcbiAgXCJMQXxBc2lhL0Jhbmdrb2sgQXNpYS9WaWVudGlhbmVcIixcbiAgXCJMQnxBc2lhL0JlaXJ1dFwiLFxuICBcIkxDfEFtZXJpY2EvUHVlcnRvX1JpY28gQW1lcmljYS9TdF9MdWNpYVwiLFxuICBcIkxJfEV1cm9wZS9adXJpY2ggRXVyb3BlL1ZhZHV6XCIsXG4gIFwiTEt8QXNpYS9Db2xvbWJvXCIsXG4gIFwiTFJ8QWZyaWNhL01vbnJvdmlhXCIsXG4gIFwiTFN8QWZyaWNhL0pvaGFubmVzYnVyZyBBZnJpY2EvTWFzZXJ1XCIsXG4gIFwiTFR8RXVyb3BlL1ZpbG5pdXNcIixcbiAgXCJMVXxFdXJvcGUvQnJ1c3NlbHMgRXVyb3BlL0x1eGVtYm91cmdcIixcbiAgXCJMVnxFdXJvcGUvUmlnYVwiLFxuICBcIkxZfEFmcmljYS9Ucmlwb2xpXCIsXG4gIFwiTUF8QWZyaWNhL0Nhc2FibGFuY2FcIixcbiAgXCJNQ3xFdXJvcGUvUGFyaXMgRXVyb3BlL01vbmFjb1wiLFxuICBcIk1EfEV1cm9wZS9DaGlzaW5hdVwiLFxuICBcIk1FfEV1cm9wZS9CZWxncmFkZSBFdXJvcGUvUG9kZ29yaWNhXCIsXG4gIFwiTUZ8QW1lcmljYS9QdWVydG9fUmljbyBBbWVyaWNhL01hcmlnb3RcIixcbiAgXCJNR3xBZnJpY2EvTmFpcm9iaSBJbmRpYW4vQW50YW5hbmFyaXZvXCIsXG4gIFwiTUh8UGFjaWZpYy9UYXJhd2EgUGFjaWZpYy9Ld2FqYWxlaW4gUGFjaWZpYy9NYWp1cm9cIixcbiAgXCJNS3xFdXJvcGUvQmVsZ3JhZGUgRXVyb3BlL1Nrb3BqZVwiLFxuICBcIk1MfEFmcmljYS9BYmlkamFuIEFmcmljYS9CYW1ha29cIixcbiAgXCJNTXxBc2lhL1lhbmdvblwiLFxuICBcIk1OfEFzaWEvVWxhYW5iYWF0YXIgQXNpYS9Ib3ZkXCIsXG4gIFwiTU98QXNpYS9NYWNhdVwiLFxuICBcIk1QfFBhY2lmaWMvR3VhbSBQYWNpZmljL1NhaXBhblwiLFxuICBcIk1RfEFtZXJpY2EvTWFydGluaXF1ZVwiLFxuICBcIk1SfEFmcmljYS9BYmlkamFuIEFmcmljYS9Ob3Vha2Nob3R0XCIsXG4gIFwiTVN8QW1lcmljYS9QdWVydG9fUmljbyBBbWVyaWNhL01vbnRzZXJyYXRcIixcbiAgXCJNVHxFdXJvcGUvTWFsdGFcIixcbiAgXCJNVXxJbmRpYW4vTWF1cml0aXVzXCIsXG4gIFwiTVZ8SW5kaWFuL01hbGRpdmVzXCIsXG4gIFwiTVd8QWZyaWNhL01hcHV0byBBZnJpY2EvQmxhbnR5cmVcIixcbiAgXCJNWHxBbWVyaWNhL01leGljb19DaXR5IEFtZXJpY2EvQ2FuY3VuIEFtZXJpY2EvTWVyaWRhIEFtZXJpY2EvTW9udGVycmV5IEFtZXJpY2EvTWF0YW1vcm9zIEFtZXJpY2EvQ2hpaHVhaHVhIEFtZXJpY2EvQ2l1ZGFkX0p1YXJleiBBbWVyaWNhL09qaW5hZ2EgQW1lcmljYS9NYXphdGxhbiBBbWVyaWNhL0JhaGlhX0JhbmRlcmFzIEFtZXJpY2EvSGVybW9zaWxsbyBBbWVyaWNhL1RpanVhbmFcIixcbiAgXCJNWXxBc2lhL0t1Y2hpbmcgQXNpYS9TaW5nYXBvcmUgQXNpYS9LdWFsYV9MdW1wdXJcIixcbiAgXCJNWnxBZnJpY2EvTWFwdXRvXCIsXG4gIFwiTkF8QWZyaWNhL1dpbmRob2VrXCIsXG4gIFwiTkN8UGFjaWZpYy9Ob3VtZWFcIixcbiAgXCJORXxBZnJpY2EvTGFnb3MgQWZyaWNhL05pYW1leVwiLFxuICBcIk5GfFBhY2lmaWMvTm9yZm9sa1wiLFxuICBcIk5HfEFmcmljYS9MYWdvc1wiLFxuICBcIk5JfEFtZXJpY2EvTWFuYWd1YVwiLFxuICBcIk5MfEV1cm9wZS9CcnVzc2VscyBFdXJvcGUvQW1zdGVyZGFtXCIsXG4gIFwiTk98RXVyb3BlL0JlcmxpbiBFdXJvcGUvT3Nsb1wiLFxuICBcIk5QfEFzaWEvS2F0aG1hbmR1XCIsXG4gIFwiTlJ8UGFjaWZpYy9OYXVydVwiLFxuICBcIk5VfFBhY2lmaWMvTml1ZVwiLFxuICBcIk5afFBhY2lmaWMvQXVja2xhbmQgUGFjaWZpYy9DaGF0aGFtXCIsXG4gIFwiT018QXNpYS9EdWJhaSBBc2lhL011c2NhdFwiLFxuICBcIlBBfEFtZXJpY2EvUGFuYW1hXCIsXG4gIFwiUEV8QW1lcmljYS9MaW1hXCIsXG4gIFwiUEZ8UGFjaWZpYy9UYWhpdGkgUGFjaWZpYy9NYXJxdWVzYXMgUGFjaWZpYy9HYW1iaWVyXCIsXG4gIFwiUEd8UGFjaWZpYy9Qb3J0X01vcmVzYnkgUGFjaWZpYy9Cb3VnYWludmlsbGVcIixcbiAgXCJQSHxBc2lhL01hbmlsYVwiLFxuICBcIlBLfEFzaWEvS2FyYWNoaVwiLFxuICBcIlBMfEV1cm9wZS9XYXJzYXdcIixcbiAgXCJQTXxBbWVyaWNhL01pcXVlbG9uXCIsXG4gIFwiUE58UGFjaWZpYy9QaXRjYWlyblwiLFxuICBcIlBSfEFtZXJpY2EvUHVlcnRvX1JpY29cIixcbiAgXCJQU3xBc2lhL0dhemEgQXNpYS9IZWJyb25cIixcbiAgXCJQVHxFdXJvcGUvTGlzYm9uIEF0bGFudGljL01hZGVpcmEgQXRsYW50aWMvQXpvcmVzXCIsXG4gIFwiUFd8UGFjaWZpYy9QYWxhdVwiLFxuICBcIlBZfEFtZXJpY2EvQXN1bmNpb25cIixcbiAgXCJRQXxBc2lhL1FhdGFyXCIsXG4gIFwiUkV8QXNpYS9EdWJhaSBJbmRpYW4vUmV1bmlvblwiLFxuICBcIlJPfEV1cm9wZS9CdWNoYXJlc3RcIixcbiAgXCJSU3xFdXJvcGUvQmVsZ3JhZGVcIixcbiAgXCJSVXxFdXJvcGUvS2FsaW5pbmdyYWQgRXVyb3BlL01vc2NvdyBFdXJvcGUvU2ltZmVyb3BvbCBFdXJvcGUvS2lyb3YgRXVyb3BlL1ZvbGdvZ3JhZCBFdXJvcGUvQXN0cmFraGFuIEV1cm9wZS9TYXJhdG92IEV1cm9wZS9VbHlhbm92c2sgRXVyb3BlL1NhbWFyYSBBc2lhL1lla2F0ZXJpbmJ1cmcgQXNpYS9PbXNrIEFzaWEvTm92b3NpYmlyc2sgQXNpYS9CYXJuYXVsIEFzaWEvVG9tc2sgQXNpYS9Ob3Zva3V6bmV0c2sgQXNpYS9LcmFzbm95YXJzayBBc2lhL0lya3V0c2sgQXNpYS9DaGl0YSBBc2lhL1lha3V0c2sgQXNpYS9LaGFuZHlnYSBBc2lhL1ZsYWRpdm9zdG9rIEFzaWEvVXN0LU5lcmEgQXNpYS9NYWdhZGFuIEFzaWEvU2FraGFsaW4gQXNpYS9TcmVkbmVrb2x5bXNrIEFzaWEvS2FtY2hhdGthIEFzaWEvQW5hZHlyXCIsXG4gIFwiUld8QWZyaWNhL01hcHV0byBBZnJpY2EvS2lnYWxpXCIsXG4gIFwiU0F8QXNpYS9SaXlhZGhcIixcbiAgXCJTQnxQYWNpZmljL0d1YWRhbGNhbmFsXCIsXG4gIFwiU0N8QXNpYS9EdWJhaSBJbmRpYW4vTWFoZVwiLFxuICBcIlNEfEFmcmljYS9LaGFydG91bVwiLFxuICBcIlNFfEV1cm9wZS9CZXJsaW4gRXVyb3BlL1N0b2NraG9sbVwiLFxuICBcIlNHfEFzaWEvU2luZ2Fwb3JlXCIsXG4gIFwiU0h8QWZyaWNhL0FiaWRqYW4gQXRsYW50aWMvU3RfSGVsZW5hXCIsXG4gIFwiU0l8RXVyb3BlL0JlbGdyYWRlIEV1cm9wZS9ManVibGphbmFcIixcbiAgXCJTSnxFdXJvcGUvQmVybGluIEFyY3RpYy9Mb25neWVhcmJ5ZW5cIixcbiAgXCJTS3xFdXJvcGUvUHJhZ3VlIEV1cm9wZS9CcmF0aXNsYXZhXCIsXG4gIFwiU0x8QWZyaWNhL0FiaWRqYW4gQWZyaWNhL0ZyZWV0b3duXCIsXG4gIFwiU018RXVyb3BlL1JvbWUgRXVyb3BlL1Nhbl9NYXJpbm9cIixcbiAgXCJTTnxBZnJpY2EvQWJpZGphbiBBZnJpY2EvRGFrYXJcIixcbiAgXCJTT3xBZnJpY2EvTmFpcm9iaSBBZnJpY2EvTW9nYWRpc2h1XCIsXG4gIFwiU1J8QW1lcmljYS9QYXJhbWFyaWJvXCIsXG4gIFwiU1N8QWZyaWNhL0p1YmFcIixcbiAgXCJTVHxBZnJpY2EvU2FvX1RvbWVcIixcbiAgXCJTVnxBbWVyaWNhL0VsX1NhbHZhZG9yXCIsXG4gIFwiU1h8QW1lcmljYS9QdWVydG9fUmljbyBBbWVyaWNhL0xvd2VyX1ByaW5jZXNcIixcbiAgXCJTWXxBc2lhL0RhbWFzY3VzXCIsXG4gIFwiU1p8QWZyaWNhL0pvaGFubmVzYnVyZyBBZnJpY2EvTWJhYmFuZVwiLFxuICBcIlRDfEFtZXJpY2EvR3JhbmRfVHVya1wiLFxuICBcIlREfEFmcmljYS9OZGphbWVuYVwiLFxuICBcIlRGfEFzaWEvRHViYWkgSW5kaWFuL01hbGRpdmVzIEluZGlhbi9LZXJndWVsZW5cIixcbiAgXCJUR3xBZnJpY2EvQWJpZGphbiBBZnJpY2EvTG9tZVwiLFxuICBcIlRIfEFzaWEvQmFuZ2tva1wiLFxuICBcIlRKfEFzaWEvRHVzaGFuYmVcIixcbiAgXCJUS3xQYWNpZmljL0Zha2FvZm9cIixcbiAgXCJUTHxBc2lhL0RpbGlcIixcbiAgXCJUTXxBc2lhL0FzaGdhYmF0XCIsXG4gIFwiVE58QWZyaWNhL1R1bmlzXCIsXG4gIFwiVE98UGFjaWZpYy9Ub25nYXRhcHVcIixcbiAgXCJUUnxFdXJvcGUvSXN0YW5idWxcIixcbiAgXCJUVHxBbWVyaWNhL1B1ZXJ0b19SaWNvIEFtZXJpY2EvUG9ydF9vZl9TcGFpblwiLFxuICBcIlRWfFBhY2lmaWMvVGFyYXdhIFBhY2lmaWMvRnVuYWZ1dGlcIixcbiAgXCJUV3xBc2lhL1RhaXBlaVwiLFxuICBcIlRafEFmcmljYS9OYWlyb2JpIEFmcmljYS9EYXJfZXNfU2FsYWFtXCIsXG4gIFwiVUF8RXVyb3BlL1NpbWZlcm9wb2wgRXVyb3BlL0t5aXZcIixcbiAgXCJVR3xBZnJpY2EvTmFpcm9iaSBBZnJpY2EvS2FtcGFsYVwiLFxuICBcIlVNfFBhY2lmaWMvUGFnb19QYWdvIFBhY2lmaWMvVGFyYXdhIFBhY2lmaWMvTWlkd2F5IFBhY2lmaWMvV2FrZVwiLFxuICBcIlVTfEFtZXJpY2EvTmV3X1lvcmsgQW1lcmljYS9EZXRyb2l0IEFtZXJpY2EvS2VudHVja3kvTG91aXN2aWxsZSBBbWVyaWNhL0tlbnR1Y2t5L01vbnRpY2VsbG8gQW1lcmljYS9JbmRpYW5hL0luZGlhbmFwb2xpcyBBbWVyaWNhL0luZGlhbmEvVmluY2VubmVzIEFtZXJpY2EvSW5kaWFuYS9XaW5hbWFjIEFtZXJpY2EvSW5kaWFuYS9NYXJlbmdvIEFtZXJpY2EvSW5kaWFuYS9QZXRlcnNidXJnIEFtZXJpY2EvSW5kaWFuYS9WZXZheSBBbWVyaWNhL0NoaWNhZ28gQW1lcmljYS9JbmRpYW5hL1RlbGxfQ2l0eSBBbWVyaWNhL0luZGlhbmEvS25veCBBbWVyaWNhL01lbm9taW5lZSBBbWVyaWNhL05vcnRoX0Rha290YS9DZW50ZXIgQW1lcmljYS9Ob3J0aF9EYWtvdGEvTmV3X1NhbGVtIEFtZXJpY2EvTm9ydGhfRGFrb3RhL0JldWxhaCBBbWVyaWNhL0RlbnZlciBBbWVyaWNhL0JvaXNlIEFtZXJpY2EvUGhvZW5peCBBbWVyaWNhL0xvc19BbmdlbGVzIEFtZXJpY2EvQW5jaG9yYWdlIEFtZXJpY2EvSnVuZWF1IEFtZXJpY2EvU2l0a2EgQW1lcmljYS9NZXRsYWthdGxhIEFtZXJpY2EvWWFrdXRhdCBBbWVyaWNhL05vbWUgQW1lcmljYS9BZGFrIFBhY2lmaWMvSG9ub2x1bHVcIixcbiAgXCJVWXxBbWVyaWNhL01vbnRldmlkZW9cIixcbiAgXCJVWnxBc2lhL1NhbWFya2FuZCBBc2lhL1Rhc2hrZW50XCIsXG4gIFwiVkF8RXVyb3BlL1JvbWUgRXVyb3BlL1ZhdGljYW5cIixcbiAgXCJWQ3xBbWVyaWNhL1B1ZXJ0b19SaWNvIEFtZXJpY2EvU3RfVmluY2VudFwiLFxuICBcIlZFfEFtZXJpY2EvQ2FyYWNhc1wiLFxuICBcIlZHfEFtZXJpY2EvUHVlcnRvX1JpY28gQW1lcmljYS9Ub3J0b2xhXCIsXG4gIFwiVkl8QW1lcmljYS9QdWVydG9fUmljbyBBbWVyaWNhL1N0X1Rob21hc1wiLFxuICBcIlZOfEFzaWEvQmFuZ2tvayBBc2lhL0hvX0NoaV9NaW5oXCIsXG4gIFwiVlV8UGFjaWZpYy9FZmF0ZVwiLFxuICBcIldGfFBhY2lmaWMvVGFyYXdhIFBhY2lmaWMvV2FsbGlzXCIsXG4gIFwiV1N8UGFjaWZpYy9BcGlhXCIsXG4gIFwiWUV8QXNpYS9SaXlhZGggQXNpYS9BZGVuXCIsXG4gIFwiWVR8QWZyaWNhL05haXJvYmkgSW5kaWFuL01heW90dGVcIixcbiAgXCJaQXxBZnJpY2EvSm9oYW5uZXNidXJnXCIsXG4gIFwiWk18QWZyaWNhL01hcHV0byBBZnJpY2EvTHVzYWthXCIsXG4gIFwiWld8QWZyaWNhL01hcHV0byBBZnJpY2EvSGFyYXJlXCJcbl0sIFFqID0ge1xuICB2ZXJzaW9uOiBYaixcbiAgem9uZXM6IFVqLFxuICBsaW5rczogWWosXG4gIGNvdW50cmllczogR2pcbn07XG52YXIgWmogPSBZTS5leHBvcnRzID0gRmo7XG5aai50ei5sb2FkKFFqKTtcbnZhciBqaiA9IFlNLmV4cG9ydHM7XG5jb25zdCBLaiA9IC8qIEBfX1BVUkVfXyAqLyBRMihqaik7XG52YXIgbjMgPSBbXG4gIFtcIkFmZ2hhbmlzdGFuICjigKvYp9mB2LrYp9mG2LPYqtin2YbigKzigI4pXCIsIFwiYWZcIiwgXCI5M1wiLCBcIisuLi0uLi0uLi4tLi4uLlwiXSxcbiAgW1wiw4VsYW5kIElzbGFuZHNcIiwgXCJheFwiLCBcIjM1OFwiLCBcIlwiXSxcbiAgW1wiQWxiYW5pYSAoU2hxaXDDq3JpKVwiLCBcImFsXCIsIFwiMzU1XCIsIFwiKy4uLiguLi4pLi4uLS4uLlwiXSxcbiAgW1wiQWxnZXJpYSAo4oCr2KfZhNis2LLYp9im2LHigKzigI4pXCIsIFwiZHpcIiwgXCIyMTNcIiwgXCIrLi4uLS4uLS4uLi0uLi4uXCJdLFxuICBbXCJBbWVyaWNhbiBTYW1vYVwiLCBcImFzXCIsIFwiMTY4NFwiLCBcIisuKC4uLikuLi4tLi4uLlwiXSxcbiAgW1wiQW5kb3JyYVwiLCBcImFkXCIsIFwiMzc2XCIsIFwiKy4uLi0uLi4tLi4uXCJdLFxuICBbXCJBbmdvbGFcIiwgXCJhb1wiLCBcIjI0NFwiLCBcIisuLi4oLi4uKS4uLi0uLi5cIl0sXG4gIFtcIkFuZ3VpbGxhXCIsIFwiYWlcIiwgXCIxMjY0XCIsIFwiKy4oLi4uKS4uLi0uLi4uXCJdLFxuICBbXCJBbnRhcmN0aWNhXCIsIFwiYXFcIiwgXCI2NzJcIiwgXCJcIl0sXG4gIFtcIkFudGlndWEgYW5kIEJhcmJ1ZGFcIiwgXCJhZ1wiLCBcIjEyNjhcIiwgXCIrLiguLi4pLi4uLS4uLi5cIl0sXG4gIFtcIkFyZ2VudGluYVwiLCBcImFyXCIsIFwiNTRcIiwgXCIrLi4oLi4uKS4uLi0uLi4uXCJdLFxuICBbXCJBcm1lbmlhICjVgNWh1bXVodW91b/VodW2KVwiLCBcImFtXCIsIFwiMzc0XCIsIFwiKy4uLi0uLi0uLi4tLi4uXCJdLFxuICBbXCJBcnViYVwiLCBcImF3XCIsIFwiMjk3XCIsIFwiKy4uLi0uLi4tLi4uLlwiXSxcbiAgW1wiQXVzdHJhbGlhXCIsIFwiYXVcIiwgXCI2MVwiLCBcIisuLiAuLi4gLi4uIC4uLlwiXSxcbiAgW1wiQXVzdHJpYSAow5ZzdGVycmVpY2gpXCIsIFwiYXRcIiwgXCI0M1wiLCBcIisuLiguLi4pLi4uLS4uLi5cIl0sXG4gIFtcIkF6ZXJiYWlqYW4gKEF6yZlyYmF5Y2FuKVwiLCBcImF6XCIsIFwiOTk0XCIsIFwiKy4uLi0uLi0uLi4tLi4tLi5cIl0sXG4gIFtcIkJhaGFtYXNcIiwgXCJic1wiLCBcIjEyNDJcIiwgXCIrLiguLi4pLi4uLS4uLi5cIl0sXG4gIFtcIkJhaHJhaW4gKOKAq9in2YTYqNit2LHZitmG4oCs4oCOKVwiLCBcImJoXCIsIFwiOTczXCIsIFwiKy4uLi0uLi4uLS4uLi5cIl0sXG4gIFtcIkJhbmdsYWRlc2ggKOCmrOCmvuCmguCmsuCmvuCmpuCnh+CmtilcIiwgXCJiZFwiLCBcIjg4MFwiLCBcIisuLi4tLi4tLi4uLS4uLlwiXSxcbiAgW1wiQmFyYmFkb3NcIiwgXCJiYlwiLCBcIjEyNDZcIiwgXCIrLiguLi4pLi4uLS4uLi5cIl0sXG4gIFtcIkJlbGFydXMgKNCR0LXQu9Cw0YDRg9GB0YwpXCIsIFwiYnlcIiwgXCIzNzVcIiwgXCIrLi4uKC4uKS4uLi0uLi0uLlwiXSxcbiAgW1wiQmVsZ2l1bSAoQmVsZ2nDqylcIiwgXCJiZVwiLCBcIjMyXCIsIFwiKy4uIC4uLiAuLiAuLiAuLlwiXSxcbiAgW1wiQmVsaXplXCIsIFwiYnpcIiwgXCI1MDFcIiwgXCIrLi4uLS4uLi0uLi4uXCJdLFxuICBbXCJCZW5pbiAoQsOpbmluKVwiLCBcImJqXCIsIFwiMjI5XCIsIFwiKy4uLi0uLi0uLi0uLi4uXCJdLFxuICBbXCJCZXJtdWRhXCIsIFwiYm1cIiwgXCIxNDQxXCIsIFwiKy4oLi4uKS4uLi0uLi4uXCJdLFxuICBbXCJCaHV0YW4gKOC9oOC9luC+suC9tOC9gilcIiwgXCJidFwiLCBcIjk3NVwiLCBcIisuLi4tLi0uLi4tLi4uXCJdLFxuICBbXCJCb2xpdmlhXCIsIFwiYm9cIiwgXCI1OTFcIiwgXCIrLi4uLS4tLi4uLS4uLi5cIl0sXG4gIFtcIkJvc25pYSBhbmQgSGVyemVnb3ZpbmEgKNCR0L7RgdC90LAg0Lgg0KXQtdGA0YbQtdCz0L7QstC40L3QsClcIiwgXCJiYVwiLCBcIjM4N1wiLCBcIisuLi4tLi4tLi4uLlwiXSxcbiAgW1wiQm90c3dhbmFcIiwgXCJid1wiLCBcIjI2N1wiLCBcIisuLi4tLi4tLi4uLS4uLlwiXSxcbiAgW1wiQm91dmV0IElzbGFuZFwiLCBcImJ2XCIsIFwiNDdcIiwgXCJcIl0sXG4gIFtcIkJyYXppbCAoQnJhc2lsKVwiLCBcImJyXCIsIFwiNTVcIiwgXCIrLi4tLi4tLi4uLi0uLi4uXCJdLFxuICBbXCJCcml0aXNoIEluZGlhbiBPY2VhbiBUZXJyaXRvcnlcIiwgXCJpb1wiLCBcIjI0NlwiLCBcIisuLi4tLi4uLS4uLi5cIl0sXG4gIFtcIkJyaXRpc2ggVmlyZ2luIElzbGFuZHNcIiwgXCJ2Z1wiLCBcIjEyODRcIiwgXCIrLiguLi4pLi4uLS4uLi5cIl0sXG4gIFtcIkJydW5laVwiLCBcImJuXCIsIFwiNjczXCIsIFwiKy4uLi0uLi4tLi4uLlwiXSxcbiAgW1wiQnVsZ2FyaWEgKNCR0YrQu9Cz0LDRgNC40Y8pXCIsIFwiYmdcIiwgXCIzNTlcIiwgXCIrLi4uKC4uLikuLi4tLi4uXCJdLFxuICBbXCJCdXJraW5hIEZhc29cIiwgXCJiZlwiLCBcIjIyNlwiLCBcIisuLi4tLi4tLi4tLi4uLlwiXSxcbiAgW1wiQnVydW5kaSAoVWJ1cnVuZGkpXCIsIFwiYmlcIiwgXCIyNTdcIiwgXCIrLi4uLS4uLS4uLS4uLi5cIl0sXG4gIFtcIkNhbWJvZGlhICjhnoDhnpjhn5LhnpbhnrvhnofhnrYpXCIsIFwia2hcIiwgXCI4NTVcIiwgXCIrLi4uLS4uLS4uLi0uLi5cIl0sXG4gIFtcIkNhbWVyb29uIChDYW1lcm91bilcIiwgXCJjbVwiLCBcIjIzN1wiLCBcIisuLi4tLi4uLi0uLi4uXCJdLFxuICBbXG4gICAgXCJDYW5hZGFcIixcbiAgICBcImNhXCIsXG4gICAgXCIxXCIsXG4gICAgXCIrLiAoLi4uKSAuLi4tLi4uLlwiLFxuICAgIDEsXG4gICAgW1xuICAgICAgXCIyMDRcIixcbiAgICAgIFwiMjM2XCIsXG4gICAgICBcIjI0OVwiLFxuICAgICAgXCIyNTBcIixcbiAgICAgIFwiMjg5XCIsXG4gICAgICBcIjMwNlwiLFxuICAgICAgXCIzNDNcIixcbiAgICAgIFwiMzY1XCIsXG4gICAgICBcIjM4N1wiLFxuICAgICAgXCI0MDNcIixcbiAgICAgIFwiNDE2XCIsXG4gICAgICBcIjQxOFwiLFxuICAgICAgXCI0MzFcIixcbiAgICAgIFwiNDM3XCIsXG4gICAgICBcIjQzOFwiLFxuICAgICAgXCI0NTBcIixcbiAgICAgIFwiNTA2XCIsXG4gICAgICBcIjUxNFwiLFxuICAgICAgXCI1MTlcIixcbiAgICAgIFwiNTQ4XCIsXG4gICAgICBcIjU3OVwiLFxuICAgICAgXCI1ODFcIixcbiAgICAgIFwiNTg3XCIsXG4gICAgICBcIjYwNFwiLFxuICAgICAgXCI2MTNcIixcbiAgICAgIFwiNjM5XCIsXG4gICAgICBcIjY0N1wiLFxuICAgICAgXCI2NzJcIixcbiAgICAgIFwiNzA1XCIsXG4gICAgICBcIjcwOVwiLFxuICAgICAgXCI3NDJcIixcbiAgICAgIFwiNzc4XCIsXG4gICAgICBcIjc4MFwiLFxuICAgICAgXCI3ODJcIixcbiAgICAgIFwiODA3XCIsXG4gICAgICBcIjgxOVwiLFxuICAgICAgXCI4MjVcIixcbiAgICAgIFwiODY3XCIsXG4gICAgICBcIjg3M1wiLFxuICAgICAgXCI5MDJcIixcbiAgICAgIFwiOTA1XCJcbiAgICBdXG4gIF0sXG4gIFtcIkNhcGUgVmVyZGUgKEthYnUgVmVyZGkpXCIsIFwiY3ZcIiwgXCIyMzhcIiwgXCIrLi4uKC4uLikuLi0uLlwiXSxcbiAgW1wiQ2FyaWJiZWFuIE5ldGhlcmxhbmRzXCIsIFwiYnFcIiwgXCI1OTlcIiwgXCIrLi4uLS4uLi0uLi4uXCIsIDFdLFxuICBbXCJDYXltYW4gSXNsYW5kc1wiLCBcImt5XCIsIFwiMTM0NVwiLCBcIisuKC4uLikuLi4tLi4uLlwiXSxcbiAgW1xuICAgIFwiQ2VudHJhbCBBZnJpY2FuIFJlcHVibGljIChSw6lwdWJsaXF1ZSBjZW50cmFmcmljYWluZSlcIixcbiAgICBcImNmXCIsXG4gICAgXCIyMzZcIixcbiAgICBcIisuLi4tLi4tLi4tLi4uLlwiXG4gIF0sXG4gIFtcIkNoYWQgKFRjaGFkKVwiLCBcInRkXCIsIFwiMjM1XCIsIFwiKy4uLi0uLi0uLi0uLi0uLlwiXSxcbiAgW1wiQ2hpbGVcIiwgXCJjbFwiLCBcIjU2XCIsIFwiKy4uLS4tLi4uLi0uLi4uXCJdLFxuICBbXCJDaGluYSAo5Lit5Zu9KVwiLCBcImNuXCIsIFwiODZcIiwgXCIrLi4gLi4tLi4uLi4uLi5cIl0sXG4gIFtcIkNocmlzdG1hcyBJc2xhbmRcIiwgXCJjeFwiLCBcIjYxXCIsIFwiXCJdLFxuICBbXCJDb2NvcyAoS2VlbGluZykgSXNsYW5kc1wiLCBcImNjXCIsIFwiNjFcIiwgXCJcIl0sXG4gIFtcIkNvbG9tYmlhXCIsIFwiY29cIiwgXCI1N1wiLCBcIisuLiguLi4pLi4uLS4uLi5cIl0sXG4gIFtcIkNvbW9yb3MgKOKAq9is2LLYsSDYp9mE2YLZhdix4oCs4oCOKVwiLCBcImttXCIsIFwiMjY5XCIsIFwiKy4uLi0uLi0uLi4uLlwiXSxcbiAgW1xuICAgIFwiQ29uZ28gKERSQykgKEphbWh1cmkgeWEgS2lkZW1va3Jhc2lhIHlhIEtvbmdvKVwiLFxuICAgIFwiY2RcIixcbiAgICBcIjI0M1wiLFxuICAgIFwiKy4uLiguLi4pLi4uLS4uLlwiXG4gIF0sXG4gIFtcIkNvbmdvIChSZXB1YmxpYykgKENvbmdvLUJyYXp6YXZpbGxlKVwiLCBcImNnXCIsIFwiMjQyXCIsIFwiKy4uLi0uLi0uLi4tLi4uLlwiXSxcbiAgW1wiQ29vayBJc2xhbmRzXCIsIFwiY2tcIiwgXCI2ODJcIiwgXCIrLi4uLS4uLS4uLlwiXSxcbiAgW1wiQ29zdGEgUmljYVwiLCBcImNyXCIsIFwiNTA2XCIsIFwiKy4uLiAuLi4uLS4uLi5cIl0sXG4gIFtcIkPDtHRlIGTigJlJdm9pcmVcIiwgXCJjaVwiLCBcIjIyNVwiLCBcIisuLi4tLi4tLi4uLS4uLlwiXSxcbiAgW1wiQ3JvYXRpYSAoSHJ2YXRza2EpXCIsIFwiaHJcIiwgXCIzODVcIiwgXCIrLi4uLS4uLS4uLi0uLi5cIl0sXG4gIFtcIkN1YmFcIiwgXCJjdVwiLCBcIjUzXCIsIFwiKy4uLS4tLi4uLS4uLi5cIl0sXG4gIFtcIkN1cmHDp2FvXCIsIFwiY3dcIiwgXCI1OTlcIiwgXCIrLi4uLS4uLi0uLi4uXCIsIDBdLFxuICBbXCJDeXBydXMgKM6az43PgM+Bzr/PgilcIiwgXCJjeVwiLCBcIjM1N1wiLCBcIisuLi4tLi4tLi4uLS4uLlwiXSxcbiAgW1wiQ3plY2ggUmVwdWJsaWMgKMSMZXNrw6EgcmVwdWJsaWthKVwiLCBcImN6XCIsIFwiNDIwXCIsIFwiKy4uLiguLi4pLi4uLS4uLlwiXSxcbiAgW1wiRGVubWFyayAoRGFubWFyaylcIiwgXCJka1wiLCBcIjQ1XCIsIFwiKy4uIC4uIC4uIC4uIC4uXCJdLFxuICBbXCJEamlib3V0aVwiLCBcImRqXCIsIFwiMjUzXCIsIFwiKy4uLi0uLi0uLi0uLi0uLlwiXSxcbiAgW1wiRG9taW5pY2FcIiwgXCJkbVwiLCBcIjE3NjdcIiwgXCIrLiguLi4pLi4uLS4uLi5cIl0sXG4gIFtcbiAgICBcIkRvbWluaWNhbiBSZXB1YmxpYyAoUmVww7pibGljYSBEb21pbmljYW5hKVwiLFxuICAgIFwiZG9cIixcbiAgICBcIjFcIixcbiAgICBcIisuKC4uLikuLi4tLi4uLlwiLFxuICAgIDIsXG4gICAgW1wiODA5XCIsIFwiODI5XCIsIFwiODQ5XCJdXG4gIF0sXG4gIFtcIkVjdWFkb3JcIiwgXCJlY1wiLCBcIjU5M1wiLCBcIisuLi4tLi0uLi4tLi4uLlwiXSxcbiAgW1wiRWd5cHQgKOKAq9mF2LXYseKArOKAjilcIiwgXCJlZ1wiLCBcIjIwXCIsIFwiKy4uKC4uLikuLi4tLi4uLlwiXSxcbiAgW1wiRWwgU2FsdmFkb3JcIiwgXCJzdlwiLCBcIjUwM1wiLCBcIisuLi4gLi4uLi0uLi4uXCJdLFxuICBbXCJFcXVhdG9yaWFsIEd1aW5lYSAoR3VpbmVhIEVjdWF0b3JpYWwpXCIsIFwiZ3FcIiwgXCIyNDBcIiwgXCIrLi4uLS4uLS4uLi0uLi4uXCJdLFxuICBbXCJFcml0cmVhXCIsIFwiZXJcIiwgXCIyOTFcIiwgXCIrLi4uLS4tLi4uLS4uLlwiXSxcbiAgW1wiRXN0b25pYSAoRWVzdGkpXCIsIFwiZWVcIiwgXCIzNzJcIiwgXCIrLi4uLS4uLi0uLi4uXCJdLFxuICBbXCJFdGhpb3BpYVwiLCBcImV0XCIsIFwiMjUxXCIsIFwiKy4uLi0uLi0uLi4tLi4uLlwiXSxcbiAgW1wiRmFsa2xhbmQgSXNsYW5kcyAoSXNsYXMgTWFsdmluYXMpXCIsIFwiZmtcIiwgXCI1MDBcIiwgXCIrLi4uLS4uLi4uXCJdLFxuICBbXCJGYXJvZSBJc2xhbmRzIChGw7hyb3lhcilcIiwgXCJmb1wiLCBcIjI5OFwiLCBcIisuLi4tLi4uLS4uLlwiXSxcbiAgW1wiRmlqaVwiLCBcImZqXCIsIFwiNjc5XCIsIFwiKy4uLi0uLi0uLi4uLlwiXSxcbiAgW1wiRmlubGFuZCAoU3VvbWkpXCIsIFwiZmlcIiwgXCIzNThcIiwgXCIrLi4uIC4uIC4uLi4gLi4uLlwiXSxcbiAgW1wiRnJhbmNlXCIsIFwiZnJcIiwgXCIzM1wiLCBcIisuLiAuIC4uIC4uIC4uIC4uXCJdLFxuICBbXCJGcmVuY2ggR3VpYW5hIChHdXlhbmUgZnJhbsOnYWlzZSlcIiwgXCJnZlwiLCBcIjU5NFwiLCBcIisuLi4tLi4uLi4tLi4uLlwiXSxcbiAgW1wiRnJlbmNoIFBvbHluZXNpYSAoUG9seW7DqXNpZSBmcmFuw6dhaXNlKVwiLCBcInBmXCIsIFwiNjg5XCIsIFwiKy4uLi0uLi0uLi0uLlwiXSxcbiAgW1wiRnJlbmNoIFNvdXRoZXJuIGFuZCBBbnRhcmN0aWMgTGFuZHNcIiwgXCJ0ZlwiLCBcIjI2MlwiLCBcIlwiXSxcbiAgW1wiR2Fib25cIiwgXCJnYVwiLCBcIjI0MVwiLCBcIisuLi4tLi0uLi0uLi0uLlwiXSxcbiAgW1wiR2FtYmlhXCIsIFwiZ21cIiwgXCIyMjBcIiwgXCIrLi4uKC4uLikuLi0uLlwiXSxcbiAgW1wiR2VvcmdpYSAo4YOh4YOQ4YOl4YOQ4YOg4YOX4YOV4YOU4YOa4YOdKVwiLCBcImdlXCIsIFwiOTk1XCIsIFwiKy4uLiguLi4pLi4uLS4uLlwiXSxcbiAgW1wiR2VybWFueSAoRGV1dHNjaGxhbmQpXCIsIFwiZGVcIiwgXCI0OVwiLCBcIisuLiAuLi4gLi4uLi4uLlwiXSxcbiAgW1wiR2hhbmEgKEdhYW5hKVwiLCBcImdoXCIsIFwiMjMzXCIsIFwiKy4uLiguLi4pLi4uLS4uLlwiXSxcbiAgW1wiR2licmFsdGFyXCIsIFwiZ2lcIiwgXCIzNTBcIiwgXCIrLi4uLS4uLi0uLi4uLlwiXSxcbiAgW1wiR3JlZWNlICjOlc67zrvOrM60zrEpXCIsIFwiZ3JcIiwgXCIzMFwiLCBcIisuLiguLi4pLi4uLS4uLi5cIl0sXG4gIFtcIkdyZWVubGFuZCAoS2FsYWFsbGl0IE51bmFhdClcIiwgXCJnbFwiLCBcIjI5OVwiLCBcIisuLi4tLi4tLi4tLi5cIl0sXG4gIFtcIkdyZW5hZGFcIiwgXCJnZFwiLCBcIjE0NzNcIiwgXCIrLiguLi4pLi4uLS4uLi5cIl0sXG4gIFtcIkd1YWRlbG91cGVcIiwgXCJncFwiLCBcIjU5MFwiLCBcIlwiLCAwXSxcbiAgW1wiR3VhbVwiLCBcImd1XCIsIFwiMTY3MVwiLCBcIisuKC4uLikuLi4tLi4uLlwiXSxcbiAgW1wiR3VhdGVtYWxhXCIsIFwiZ3RcIiwgXCI1MDJcIiwgXCIrLi4uIC4uLi4tLi4uLlwiXSxcbiAgW1wiR3Vlcm5zZXlcIiwgXCJnZ1wiLCBcIjQ0XCIsIFwiXCJdLFxuICBbXCJHdWluZWEgKEd1aW7DqWUpXCIsIFwiZ25cIiwgXCIyMjRcIiwgXCIrLi4uLS4uLS4uLi0uLi5cIl0sXG4gIFtcIkd1aW5lYS1CaXNzYXUgKEd1aW7DqSBCaXNzYXUpXCIsIFwiZ3dcIiwgXCIyNDVcIiwgXCIrLi4uLS4tLi4uLi4uXCJdLFxuICBbXCJHdXlhbmFcIiwgXCJneVwiLCBcIjU5MlwiLCBcIisuLi4tLi4uLS4uLi5cIl0sXG4gIFtcIkhhaXRpXCIsIFwiaHRcIiwgXCI1MDlcIiwgXCIrLi4uIC4uLi4tLi4uLlwiXSxcbiAgW1wiSGVhcmQgSXNsYW5kIGFuZCBNY0RvbmFsZCBJc2xhbmRzXCIsIFwiaG1cIiwgXCI2NzJcIiwgXCJcIl0sXG4gIFtcIkhvbmR1cmFzXCIsIFwiaG5cIiwgXCI1MDRcIiwgXCIrLi4uLS4uLi4tLi4uLlwiXSxcbiAgW1wiSG9uZyBLb25nICjpppnmuK8pXCIsIFwiaGtcIiwgXCI4NTJcIiwgXCIrLi4uIC4uLi4gLi4uLlwiXSxcbiAgW1wiSHVuZ2FyeSAoTWFneWFyb3JzesOhZylcIiwgXCJodVwiLCBcIjM2XCIsIFwiKy4uKC4uLikuLi4tLi4uXCJdLFxuICBbXCJJY2VsYW5kICjDjXNsYW5kKVwiLCBcImlzXCIsIFwiMzU0XCIsIFwiKy4uLiAuLi4gLi4uLlwiXSxcbiAgW1wiSW5kaWEgKOCkreCkvuCksOCkpClcIiwgXCJpblwiLCBcIjkxXCIsIFwiKy4uIC4uLi4uLS4uLi4uXCJdLFxuICBbXCJJbmRvbmVzaWFcIiwgXCJpZFwiLCBcIjYyXCIsIFwiKy4uLS4uLS4uLi0uLlwiXSxcbiAgW1wiSXJhbiAo4oCr2KfbjNix2KfZhuKArOKAjilcIiwgXCJpclwiLCBcIjk4XCIsIFwiKy4uKC4uLikuLi4tLi4uLlwiXSxcbiAgW1wiSXJhcSAo4oCr2KfZhNi52LHYp9mC4oCs4oCOKVwiLCBcImlxXCIsIFwiOTY0XCIsIFwiKy4uLiguLi4pLi4uLS4uLi5cIl0sXG4gIFtcIklyZWxhbmRcIiwgXCJpZVwiLCBcIjM1M1wiLCBcIisuLi4gLi4gLi4uLi4uLlwiXSxcbiAgW1wiSXNsZSBvZiBNYW5cIiwgXCJpbVwiLCBcIjQ0XCIsIFwiXCJdLFxuICBbXCJJc3JhZWwgKOKAq9eZ16nXqNeQ15zigKzigI4pXCIsIFwiaWxcIiwgXCI5NzJcIiwgXCIrLi4uLS4tLi4uLS4uLi5cIl0sXG4gIFtcIkl0YWx5IChJdGFsaWEpXCIsIFwiaXRcIiwgXCIzOVwiLCBcIisuLiAuLi4gLi4uLi4uXCIsIDBdLFxuICBbXCJKYW1haWNhXCIsIFwiam1cIiwgXCIxODc2XCIsIFwiKy4oLi4uKS4uLi0uLi4uXCJdLFxuICBbXCJKYXBhbiAo5pel5pysKVwiLCBcImpwXCIsIFwiODFcIiwgXCIrLi4gLi4uIC4uIC4uLi5cIl0sXG4gIFtcIkplcnNleVwiLCBcImplXCIsIFwiNDRcIiwgXCJcIl0sXG4gIFtcIkpvcmRhbiAo4oCr2KfZhNij2LHYr9mG4oCs4oCOKVwiLCBcImpvXCIsIFwiOTYyXCIsIFwiKy4uLi0uLS4uLi4tLi4uLlwiXSxcbiAgW1wiS2F6YWtoc3RhbiAo0JrQsNC30LDRhdGB0YLQsNC9KVwiLCBcImt6XCIsIFwiN1wiLCBcIisuIC4uLiAuLi4tLi4tLi5cIiwgMV0sXG4gIFtcIktlbnlhXCIsIFwia2VcIiwgXCIyNTRcIiwgXCIrLi4uLS4uLi0uLi4uLi5cIl0sXG4gIFtcIktpcmliYXRpXCIsIFwia2lcIiwgXCI2ODZcIiwgXCIrLi4uLS4uLS4uLlwiXSxcbiAgW1wiS29zb3ZvXCIsIFwieGtcIiwgXCIzODNcIiwgXCJcIl0sXG4gIFtcIkt1d2FpdCAo4oCr2KfZhNmD2YjZitiq4oCs4oCOKVwiLCBcImt3XCIsIFwiOTY1XCIsIFwiKy4uLi0uLi4uLS4uLi5cIl0sXG4gIFtcIkt5cmd5enN0YW4gKNCa0YvRgNCz0YvQt9GB0YLQsNC9KVwiLCBcImtnXCIsIFwiOTk2XCIsIFwiKy4uLiguLi4pLi4uLS4uLlwiXSxcbiAgW1wiTGFvcyAo4Lql4Lqy4LqnKVwiLCBcImxhXCIsIFwiODU2XCIsIFwiKy4uLi0uLi0uLi4tLi4uXCJdLFxuICBbXCJMYXR2aWEgKExhdHZpamEpXCIsIFwibHZcIiwgXCIzNzFcIiwgXCIrLi4uLS4uLS4uLi0uLi5cIl0sXG4gIFtcIkxlYmFub24gKOKAq9mE2KjZhtin2YbigKzigI4pXCIsIFwibGJcIiwgXCI5NjFcIiwgXCIrLi4uLS4tLi4uLS4uLlwiXSxcbiAgW1wiTGVzb3Rob1wiLCBcImxzXCIsIFwiMjY2XCIsIFwiKy4uLi0uLS4uLi0uLi4uXCJdLFxuICBbXCJMaWJlcmlhXCIsIFwibHJcIiwgXCIyMzFcIiwgXCIrLi4uLS4uLS4uLi0uLi5cIl0sXG4gIFtcIkxpYnlhICjigKvZhNmK2KjZitin4oCs4oCOKVwiLCBcImx5XCIsIFwiMjE4XCIsIFwiKy4uLi0uLi0uLi4tLi4uXCJdLFxuICBbXCJMaWVjaHRlbnN0ZWluXCIsIFwibGlcIiwgXCI0MjNcIiwgXCIrLi4uKC4uLikuLi4tLi4uLlwiXSxcbiAgW1wiTGl0aHVhbmlhIChMaWV0dXZhKVwiLCBcImx0XCIsIFwiMzcwXCIsIFwiKy4uLiguLi4pLi4tLi4uXCJdLFxuICBbXCJMdXhlbWJvdXJnXCIsIFwibHVcIiwgXCIzNTJcIiwgXCIrLi4uKC4uLikuLi4tLi4uXCJdLFxuICBbXCJNYWNhdSAo5r6z6ZaAKVwiLCBcIm1vXCIsIFwiODUzXCIsIFwiKy4uLi0uLi4uLS4uLi5cIl0sXG4gIFtcIk1hY2Vkb25pYSAoRllST00pICjQnNCw0LrQtdC00L7QvdC40ZjQsClcIiwgXCJta1wiLCBcIjM4OVwiLCBcIisuLi4tLi4tLi4uLS4uLlwiXSxcbiAgW1wiTWFkYWdhc2NhciAoTWFkYWdhc2lrYXJhKVwiLCBcIm1nXCIsIFwiMjYxXCIsIFwiKy4uLi0uLi0uLi0uLi4uLlwiXSxcbiAgW1wiTWFsYXdpXCIsIFwibXdcIiwgXCIyNjVcIiwgXCIrLi4uLS4tLi4uLi0uLi4uXCJdLFxuICBbXCJNYWxheXNpYVwiLCBcIm15XCIsIFwiNjBcIiwgXCIrLi4gLi4tLi4uLi0uLi4uXCJdLFxuICBbXCJNYWxkaXZlc1wiLCBcIm12XCIsIFwiOTYwXCIsIFwiKy4uLi0uLi4tLi4uLlwiXSxcbiAgW1wiTWFsaVwiLCBcIm1sXCIsIFwiMjIzXCIsIFwiKy4uLi0uLi0uLi0uLi4uXCJdLFxuICBbXCJNYWx0YVwiLCBcIm10XCIsIFwiMzU2XCIsIFwiKy4uLi0uLi4uLS4uLi5cIl0sXG4gIFtcIk1hcnNoYWxsIElzbGFuZHNcIiwgXCJtaFwiLCBcIjY5MlwiLCBcIisuLi4tLi4uLS4uLi5cIl0sXG4gIFtcIk1hcnRpbmlxdWVcIiwgXCJtcVwiLCBcIjU5NlwiLCBcIisuLi4oLi4uKS4uLS4uLS4uXCJdLFxuICBbXCJNYXVyaXRhbmlhICjigKvZhdmI2LHZitiq2KfZhtmK2KfigKzigI4pXCIsIFwibXJcIiwgXCIyMjJcIiwgXCIrLi4uLS4uLS4uLS4uLi5cIl0sXG4gIFtcIk1hdXJpdGl1cyAoTW9yaXMpXCIsIFwibXVcIiwgXCIyMzBcIiwgXCIrLi4uLS4uLi0uLi4uXCJdLFxuICBbXCJNYXlvdHRlXCIsIFwieXRcIiwgXCIyNjJcIiwgXCJcIl0sXG4gIFtcIk1leGljbyAoTcOpeGljbylcIiwgXCJteFwiLCBcIjUyXCIsIFwiKy4uLS4uLS4uLS4uLi5cIl0sXG4gIFtcIk1pY3JvbmVzaWFcIiwgXCJmbVwiLCBcIjY5MVwiLCBcIisuLi4tLi4uLS4uLi5cIl0sXG4gIFtcIk1vbGRvdmEgKFJlcHVibGljYSBNb2xkb3ZhKVwiLCBcIm1kXCIsIFwiMzczXCIsIFwiKy4uLi0uLi4uLS4uLi5cIl0sXG4gIFtcIk1vbmFjb1wiLCBcIm1jXCIsIFwiMzc3XCIsIFwiKy4uLi0uLi0uLi4tLi4uXCJdLFxuICBbXCJNb25nb2xpYSAo0JzQvtC90LPQvtC7KVwiLCBcIm1uXCIsIFwiOTc2XCIsIFwiKy4uLi0uLi0uLi0uLi4uXCJdLFxuICBbXCJNb250ZW5lZ3JvIChDcm5hIEdvcmEpXCIsIFwibWVcIiwgXCIzODJcIiwgXCIrLi4uLS4uLS4uLi0uLi5cIl0sXG4gIFtcIk1vbnRzZXJyYXRcIiwgXCJtc1wiLCBcIjE2NjRcIiwgXCIrLiguLi4pLi4uLS4uLi5cIl0sXG4gIFtcIk1vcm9jY28gKOKAq9in2YTZhdi62LHYqOKArOKAjilcIiwgXCJtYVwiLCBcIjIxMlwiLCBcIisuLi4tLi4tLi4uLi0uLi5cIl0sXG4gIFtcIk1vemFtYmlxdWUgKE1vw6dhbWJpcXVlKVwiLCBcIm16XCIsIFwiMjU4XCIsIFwiKy4uLi0uLi0uLi4tLi4uXCJdLFxuICBbXCJNeWFubWFyIChCdXJtYSkgKOGAmeGAvOGAlOGAuuGAmeGArClcIiwgXCJtbVwiLCBcIjk1XCIsIFwiKy4uLS4uLi0uLi5cIl0sXG4gIFtcIk5hbWliaWEgKE5hbWliacOrKVwiLCBcIm5hXCIsIFwiMjY0XCIsIFwiKy4uLi0uLi0uLi4tLi4uLlwiXSxcbiAgW1wiTmF1cnVcIiwgXCJuclwiLCBcIjY3NFwiLCBcIisuLi4tLi4uLS4uLi5cIl0sXG4gIFtcIk5lcGFsICjgpKjgpYfgpKrgpL7gpLIpXCIsIFwibnBcIiwgXCI5NzdcIiwgXCIrLi4uLS4uLS4uLi0uLi5cIl0sXG4gIFtcIk5ldGhlcmxhbmRzIChOZWRlcmxhbmQpXCIsIFwibmxcIiwgXCIzMVwiLCBcIisuLiAuLiAuLi4uLi4uLlwiXSxcbiAgW1wiTmV3IENhbGVkb25pYSAoTm91dmVsbGUtQ2Fsw6lkb25pZSlcIiwgXCJuY1wiLCBcIjY4N1wiLCBcIisuLi4tLi4tLi4uLlwiXSxcbiAgW1wiTmV3IFplYWxhbmRcIiwgXCJuelwiLCBcIjY0XCIsIFwiKy4uIC4uLi0uLi4tLi4uLlwiXSxcbiAgW1wiTmljYXJhZ3VhXCIsIFwibmlcIiwgXCI1MDVcIiwgXCIrLi4uLS4uLi4tLi4uLlwiXSxcbiAgW1wiTmlnZXIgKE5pamFyKVwiLCBcIm5lXCIsIFwiMjI3XCIsIFwiKy4uLi0uLi0uLi0uLi4uXCJdLFxuICBbXCJOaWdlcmlhXCIsIFwibmdcIiwgXCIyMzRcIiwgXCIrLi4uLS4uLS4uLi0uLlwiXSxcbiAgW1wiTml1ZVwiLCBcIm51XCIsIFwiNjgzXCIsIFwiKy4uLi0uLi4uXCJdLFxuICBbXCJOb3Jmb2xrIElzbGFuZFwiLCBcIm5mXCIsIFwiNjcyXCIsIFwiKy4uLi0uLi4tLi4uXCJdLFxuICBbXCJOb3J0aCBLb3JlYSAo7KGw7ISgIOuvvOyjvOyjvOydmCDsnbjrr7wg6rO17ZmU6rWtKVwiLCBcImtwXCIsIFwiODUwXCIsIFwiKy4uLi0uLi4tLi4uXCJdLFxuICBbXCJOb3J0aGVybiBNYXJpYW5hIElzbGFuZHNcIiwgXCJtcFwiLCBcIjE2NzBcIiwgXCIrLiguLi4pLi4uLS4uLi5cIl0sXG4gIFtcIk5vcndheSAoTm9yZ2UpXCIsIFwibm9cIiwgXCI0N1wiLCBcIisuLiAuLi4gLi4gLi4uXCJdLFxuICBbXCJPbWFuICjigKvYudmP2YXYp9mG4oCs4oCOKVwiLCBcIm9tXCIsIFwiOTY4XCIsIFwiKy4uLi0uLi0uLi4tLi4uXCJdLFxuICBbXCJQYWtpc3RhbiAo4oCr2b7Yp9qp2LPYqtin2YbigKzigI4pXCIsIFwicGtcIiwgXCI5MlwiLCBcIisuLiAuLi4tLi4uLi4uLlwiXSxcbiAgW1wiUGFsYXVcIiwgXCJwd1wiLCBcIjY4MFwiLCBcIisuLi4tLi4uLS4uLi5cIl0sXG4gIFtcIlBhbGVzdGluZSAo4oCr2YHZhNiz2LfZitmG4oCs4oCOKVwiLCBcInBzXCIsIFwiOTcwXCIsIFwiKy4uLi0uLi0uLi4tLi4uLlwiXSxcbiAgW1wiUGFuYW1hIChQYW5hbcOhKVwiLCBcInBhXCIsIFwiNTA3XCIsIFwiKy4uLi0uLi4tLi4uLlwiXSxcbiAgW1wiUGFwdWEgTmV3IEd1aW5lYVwiLCBcInBnXCIsIFwiNjc1XCIsIFwiKy4uLiguLi4pLi4tLi4uXCJdLFxuICBbXCJQYXJhZ3VheVwiLCBcInB5XCIsIFwiNTk1XCIsIFwiKy4uLiguLi4pLi4uLS4uLlwiXSxcbiAgW1wiUGVydSAoUGVyw7opXCIsIFwicGVcIiwgXCI1MVwiLCBcIisuLiguLi4pLi4uLS4uLlwiXSxcbiAgW1wiUGhpbGlwcGluZXNcIiwgXCJwaFwiLCBcIjYzXCIsIFwiKy4uIC4uLiAuLi4uXCJdLFxuICBbXCJQaXRjYWlybiBJc2xhbmRzXCIsIFwicG5cIiwgXCI2NFwiLCBcIlwiXSxcbiAgW1wiUG9sYW5kIChQb2xza2EpXCIsIFwicGxcIiwgXCI0OFwiLCBcIisuLiAuLi4tLi4uLS4uLlwiXSxcbiAgW1wiUG9ydHVnYWxcIiwgXCJwdFwiLCBcIjM1MVwiLCBcIisuLi4tLi4tLi4uLS4uLi5cIl0sXG4gIFtcIlB1ZXJ0byBSaWNvXCIsIFwicHJcIiwgXCIxXCIsIFwiKy4gKC4uLikgLi4uLS4uLi5cIiwgMywgW1wiNzg3XCIsIFwiOTM5XCJdXSxcbiAgW1wiUWF0YXIgKOKAq9mC2LfYseKArOKAjilcIiwgXCJxYVwiLCBcIjk3NFwiLCBcIisuLi4tLi4uLi0uLi4uXCJdLFxuICBbXCJSw6l1bmlvbiAoTGEgUsOpdW5pb24pXCIsIFwicmVcIiwgXCIyNjJcIiwgXCIrLi4uLS4uLi4uLS4uLi5cIl0sXG4gIFtcIlJvbWFuaWEgKFJvbcOibmlhKVwiLCBcInJvXCIsIFwiNDBcIiwgXCIrLi4tLi4tLi4uLS4uLi5cIl0sXG4gIFtcIlJ1c3NpYSAo0KDQvtGB0YHQuNGPKVwiLCBcInJ1XCIsIFwiN1wiLCBcIisuIC4uLiAuLi4tLi4tLi5cIiwgMF0sXG4gIFtcIlJ3YW5kYVwiLCBcInJ3XCIsIFwiMjUwXCIsIFwiKy4uLiguLi4pLi4uLS4uLlwiXSxcbiAgW1wiU2FpbnQgQmFydGjDqWxlbXkgKFNhaW50LUJhcnRow6lsZW15KVwiLCBcImJsXCIsIFwiNTkwXCIsIFwiXCIsIDFdLFxuICBbXCJTYWludCBIZWxlbmFcIiwgXCJzaFwiLCBcIjI5MFwiXSxcbiAgW1wiU2FpbnQgS2l0dHMgYW5kIE5ldmlzXCIsIFwia25cIiwgXCIxODY5XCIsIFwiKy4oLi4uKS4uLi0uLi4uXCJdLFxuICBbXCJTYWludCBMdWNpYVwiLCBcImxjXCIsIFwiMTc1OFwiLCBcIisuKC4uLikuLi4tLi4uLlwiXSxcbiAgW1wiU2FpbnQgTWFydGluIChTYWludC1NYXJ0aW4gKHBhcnRpZSBmcmFuw6dhaXNlKSlcIiwgXCJtZlwiLCBcIjU5MFwiLCBcIlwiLCAyXSxcbiAgW1wiU2FpbnQgUGllcnJlIGFuZCBNaXF1ZWxvbiAoU2FpbnQtUGllcnJlLWV0LU1pcXVlbG9uKVwiLCBcInBtXCIsIFwiNTA4XCJdLFxuICBbXCJTYWludCBWaW5jZW50IGFuZCB0aGUgR3JlbmFkaW5lc1wiLCBcInZjXCIsIFwiMTc4NFwiLCBcIisuKC4uLikuLi4tLi4uLlwiXSxcbiAgW1wiU2Ftb2FcIiwgXCJ3c1wiLCBcIjY4NVwiLCBcIisuLi4tLi4tLi4uLlwiXSxcbiAgW1wiU2FuIE1hcmlub1wiLCBcInNtXCIsIFwiMzc4XCIsIFwiKy4uLi0uLi4uLS4uLi4uLlwiXSxcbiAgW1wiU8OjbyBUb23DqSBhbmQgUHLDrW5jaXBlIChTw6NvIFRvbcOpIGUgUHLDrW5jaXBlKVwiLCBcInN0XCIsIFwiMjM5XCIsIFwiKy4uLi0uLi0uLi4uLlwiXSxcbiAgW1xuICAgIFwiU2F1ZGkgQXJhYmlhICjigKvYp9mE2YXZhdmE2YPYqSDYp9mE2LnYsdio2YrYqSDYp9mE2LPYudmI2K/Zitip4oCs4oCOKVwiLFxuICAgIFwic2FcIixcbiAgICBcIjk2NlwiLFxuICAgIFwiKy4uLi0uLi0uLi4tLi4uLlwiXG4gIF0sXG4gIFtcIlNlbmVnYWwgKFPDqW7DqWdhbClcIiwgXCJzblwiLCBcIjIyMVwiLCBcIisuLi4tLi4tLi4uLS4uLi5cIl0sXG4gIFtcIlNlcmJpYSAo0KHRgNCx0LjRmNCwKVwiLCBcInJzXCIsIFwiMzgxXCIsIFwiKy4uLi0uLi0uLi4tLi4uLlwiXSxcbiAgW1wiU2V5Y2hlbGxlc1wiLCBcInNjXCIsIFwiMjQ4XCIsIFwiKy4uLi0uLS4uLi0uLi5cIl0sXG4gIFtcIlNpZXJyYSBMZW9uZVwiLCBcInNsXCIsIFwiMjMyXCIsIFwiKy4uLi0uLi0uLi4uLi5cIl0sXG4gIFtcIlNpbmdhcG9yZVwiLCBcInNnXCIsIFwiNjVcIiwgXCIrLi4gLi4uLi0uLi4uXCJdLFxuICBbXCJTaW50IE1hYXJ0ZW5cIiwgXCJzeFwiLCBcIjE3MjFcIiwgXCIrLiguLi4pLi4uLS4uLi5cIl0sXG4gIFtcIlNsb3Zha2lhIChTbG92ZW5za28pXCIsIFwic2tcIiwgXCI0MjFcIiwgXCIrLi4uKC4uLikuLi4tLi4uXCJdLFxuICBbXCJTbG92ZW5pYSAoU2xvdmVuaWphKVwiLCBcInNpXCIsIFwiMzg2XCIsIFwiKy4uLi0uLi0uLi4tLi4uXCJdLFxuICBbXCJTb2xvbW9uIElzbGFuZHNcIiwgXCJzYlwiLCBcIjY3N1wiLCBcIisuLi4tLi4uLi5cIl0sXG4gIFtcIlNvbWFsaWEgKFNvb21hYWxpeWEpXCIsIFwic29cIiwgXCIyNTJcIiwgXCIrLi4uLS4tLi4uLS4uLlwiXSxcbiAgW1wiU291dGggQWZyaWNhXCIsIFwiemFcIiwgXCIyN1wiLCBcIisuLi0uLi0uLi4tLi4uLlwiXSxcbiAgW1wiU291dGggR2VvcmdpYSBhbmQgdGhlIFNvdXRoIFNhbmR3aWNoIElzbGFuZHNcIiwgXCJnc1wiLCBcIjUwMFwiLCBcIlwiXSxcbiAgW1wiU291dGggS29yZWEgKOuMgO2VnOuvvOq1rSlcIiwgXCJrclwiLCBcIjgyXCIsIFwiKy4uLS4uLS4uLi0uLi4uXCJdLFxuICBbXCJTb3V0aCBTdWRhbiAo4oCr2KzZhtmI2Kgg2KfZhNiz2YjYr9in2YbigKzigI4pXCIsIFwic3NcIiwgXCIyMTFcIiwgXCIrLi4uLS4uLS4uLi0uLi4uXCJdLFxuICBbXCJTcGFpbiAoRXNwYcOxYSlcIiwgXCJlc1wiLCBcIjM0XCIsIFwiKy4uIC4uLiAuLi4gLi4uXCJdLFxuICBbXCJTcmkgTGFua2EgKOC3geC3iuKAjeC2u+C3kyDgtr3gtoLgtprgt4/gt4ApXCIsIFwibGtcIiwgXCI5NFwiLCBcIisuLi0uLi0uLi4tLi4uLlwiXSxcbiAgW1wiU3VkYW4gKOKAq9in2YTYs9mI2K/Yp9mG4oCs4oCOKVwiLCBcInNkXCIsIFwiMjQ5XCIsIFwiKy4uLi0uLi0uLi4tLi4uLlwiXSxcbiAgW1wiU3VyaW5hbWVcIiwgXCJzclwiLCBcIjU5N1wiLCBcIisuLi4tLi4uLS4uLlwiXSxcbiAgW1wiU3ZhbGJhcmQgYW5kIEphbiBNYXllblwiLCBcInNqXCIsIFwiNDdcIiwgXCJcIl0sXG4gIFtcIlN3YXppbGFuZFwiLCBcInN6XCIsIFwiMjY4XCIsIFwiKy4uLi0uLi0uLi0uLi4uXCJdLFxuICBbXCJTd2VkZW4gKFN2ZXJpZ2UpXCIsIFwic2VcIiwgXCI0NlwiLCBcIisuLiAuLiAuLi4gLi4gLi5cIl0sXG4gIFtcIlN3aXR6ZXJsYW5kIChTY2h3ZWl6KVwiLCBcImNoXCIsIFwiNDFcIiwgXCIrLi4gLi4gLi4uIC4uIC4uXCJdLFxuICBbXCJTeXJpYSAo4oCr2LPZiNix2YrYp+KArOKAjilcIiwgXCJzeVwiLCBcIjk2M1wiLCBcIisuLi4tLi4tLi4uLi0uLi5cIl0sXG4gIFtcIlRhaXdhbiAo5Y+w54GjKVwiLCBcInR3XCIsIFwiODg2XCIsIFwiKy4uLi0uLi4uLS4uLi5cIl0sXG4gIFtcIlRhamlraXN0YW5cIiwgXCJ0alwiLCBcIjk5MlwiLCBcIisuLi4tLi4tLi4uLS4uLi5cIl0sXG4gIFtcIlRhbnphbmlhXCIsIFwidHpcIiwgXCIyNTVcIiwgXCIrLi4uLS4uLS4uLi0uLi4uXCJdLFxuICBbXCJUaGFpbGFuZCAo4LmE4LiX4LiiKVwiLCBcInRoXCIsIFwiNjZcIiwgXCIrLi4tLi4tLi4uLS4uLlwiXSxcbiAgW1wiVGltb3ItTGVzdGVcIiwgXCJ0bFwiLCBcIjY3MFwiLCBcIisuLi4tLi4uLS4uLi5cIl0sXG4gIFtcIlRvZ29cIiwgXCJ0Z1wiLCBcIjIyOFwiLCBcIisuLi4tLi4tLi4uLS4uLlwiXSxcbiAgW1wiVG9rZWxhdVwiLCBcInRrXCIsIFwiNjkwXCIsIFwiKy4uLi0uLi4uXCJdLFxuICBbXCJUb25nYVwiLCBcInRvXCIsIFwiNjc2XCIsIFwiKy4uLi0uLi4uLlwiXSxcbiAgW1wiVHJpbmlkYWQgYW5kIFRvYmFnb1wiLCBcInR0XCIsIFwiMTg2OFwiLCBcIisuKC4uLikuLi4tLi4uLlwiXSxcbiAgW1wiVHVuaXNpYSAo4oCr2KrZiNmG2LPigKzigI4pXCIsIFwidG5cIiwgXCIyMTZcIiwgXCIrLi4uLS4uLS4uLi0uLi5cIl0sXG4gIFtcIlR1cmtleSAoVMO8cmtpeWUpXCIsIFwidHJcIiwgXCI5MFwiLCBcIisuLiAuLi4gLi4uIC4uIC4uXCJdLFxuICBbXCJUdXJrbWVuaXN0YW5cIiwgXCJ0bVwiLCBcIjk5M1wiLCBcIisuLi4tLi0uLi4tLi4uLlwiXSxcbiAgW1wiVHVya3MgYW5kIENhaWNvcyBJc2xhbmRzXCIsIFwidGNcIiwgXCIxNjQ5XCIsIFwiKy4oLi4uKS4uLi0uLi4uXCJdLFxuICBbXCJUdXZhbHVcIiwgXCJ0dlwiLCBcIjY4OFwiLCBcIisuLi4tLi4uLi5cIl0sXG4gIFtcIlUuUy4gVmlyZ2luIElzbGFuZHNcIiwgXCJ2aVwiLCBcIjEzNDBcIiwgXCIrLiguLi4pLi4uLS4uLi5cIl0sXG4gIFtcIlVnYW5kYVwiLCBcInVnXCIsIFwiMjU2XCIsIFwiKy4uLiguLi4pLi4uLS4uLlwiXSxcbiAgW1wiVWtyYWluZSAo0KPQutGA0LDRl9C90LApXCIsIFwidWFcIiwgXCIzODBcIiwgXCIrLi4uKC4uKS4uLi0uLi0uLlwiXSxcbiAgW1xuICAgIFwiVW5pdGVkIEFyYWIgRW1pcmF0ZXMgKOKAq9in2YTYpdmF2KfYsdin2Kog2KfZhNi52LHYqNmK2Kkg2KfZhNmF2KrYrdiv2KnigKzigI4pXCIsXG4gICAgXCJhZVwiLFxuICAgIFwiOTcxXCIsXG4gICAgXCIrLi4uLS4tLi4uLS4uLi5cIlxuICBdLFxuICBbXCJVbml0ZWQgS2luZ2RvbVwiLCBcImdiXCIsIFwiNDRcIiwgXCIrLi4gLi4uLiAuLi4uLi5cIl0sXG4gIFtcIlVuaXRlZCBTdGF0ZXNcIiwgXCJ1c1wiLCBcIjFcIiwgXCIrLiAoLi4uKSAuLi4tLi4uLlwiLCAwXSxcbiAgW1wiVW5pdGVkIFN0YXRlcyBNaW5vciBPdXRseWluZyBJc2xhbmRzXCIsIFwidW1cIiwgXCIxXCIsIFwiXCIsIDJdLFxuICBbXCJVcnVndWF5XCIsIFwidXlcIiwgXCI1OThcIiwgXCIrLi4uLS4tLi4uLS4uLS4uXCJdLFxuICBbXCJVemJla2lzdGFuIChPyrt6YmVraXN0b24pXCIsIFwidXpcIiwgXCI5OThcIiwgXCIrLi4uLS4uLS4uLi0uLi4uXCJdLFxuICBbXCJWYW51YXR1XCIsIFwidnVcIiwgXCI2NzhcIiwgXCIrLi4uLS4uLi4uXCJdLFxuICBbXCJWYXRpY2FuIENpdHkgKENpdHTDoCBkZWwgVmF0aWNhbm8pXCIsIFwidmFcIiwgXCIzOVwiLCBcIisuLiAuLiAuLi4uIC4uLi5cIiwgMV0sXG4gIFtcIlZlbmV6dWVsYVwiLCBcInZlXCIsIFwiNThcIiwgXCIrLi4oLi4uKS4uLi0uLi4uXCJdLFxuICBbXCJWaWV0bmFtIChWaeG7h3QgTmFtKVwiLCBcInZuXCIsIFwiODRcIiwgXCIrLi4tLi4tLi4uLi0uLi5cIl0sXG4gIFtcIldhbGxpcyBhbmQgRnV0dW5hXCIsIFwid2ZcIiwgXCI2ODFcIiwgXCIrLi4uLS4uLS4uLi5cIl0sXG4gIFtcIldlc3Rlcm4gU2FoYXJhXCIsIFwiZWhcIiwgXCIyMTJcIiwgXCIrLi4uLS4uLS4uLi5cIl0sXG4gIFtcIlllbWVuICjigKvYp9mE2YrZhdmG4oCs4oCOKVwiLCBcInllXCIsIFwiOTY3XCIsIFwiKy4uLi0uLS4uLi0uLi5cIl0sXG4gIFtcIlphbWJpYVwiLCBcInptXCIsIFwiMjYwXCIsIFwiKy4uLi0uLi0uLi4tLi4uLlwiXSxcbiAgW1wiWmltYmFid2VcIiwgXCJ6d1wiLCBcIjI2M1wiLCBcIisuLi4tLi0uLi4uLi5cIl1cbl0sIGU0ID0ge30sIFFNID0ge30sIEZjID0gZnVuY3Rpb24oZSwgdCwgbykge1xuICB0IGluIGU0IHx8IChlNFt0XSA9IFtdKTtcbiAgdmFyIG4gPSBvIHx8IDA7XG4gIGU0W3RdW25dID0gZTtcbn07XG5mb3IgKHZhciBtdCA9IDA7IG10IDwgbjMubGVuZ3RoOyBtdCsrKSB7XG4gIHZhciBrMiA9IG4zW210XTtcbiAgaWYgKG4zW210XSA9IHtcbiAgICBuYW1lOiBrMlswXSxcbiAgICBpc28yOiBrMlsxXSxcbiAgICBkaWFsQ29kZTogazJbMl0sXG4gICAgcHJpb3JpdHk6IGsyWzRdIHx8IDBcbiAgfSwgazJbM10gJiYgKG4zW210XS5mb3JtYXQgPSBrMlszXSksIGsyWzVdKSB7XG4gICAgbjNbbXRdLmhhc0FyZWFDb2RlcyA9ICEwO1xuICAgIGZvciAodmFyIHdhID0gMDsgd2EgPCBrMls1XS5sZW5ndGg7IHdhKyspIHtcbiAgICAgIHZhciBKaiA9IGsyWzJdICsgazJbNV1bd2FdO1xuICAgICAgRmMoazJbMV0sIEpqKTtcbiAgICB9XG4gIH1cbiAgUU1bbjNbbXRdLmlzbzJdID0gbXQsIEZjKGsyWzFdLCBrMlsyXSwgazJbNF0pO1xufVxudmFyIF9qID0ge1xuICBhbGxDb3VudHJpZXM6IG4zLFxuICBpc28yTG9va3VwOiBRTSxcbiAgYWxsQ291bnRyeUNvZGVzOiBlNFxufTtcbmNvbnN0IGtuID0gLyogQF9fUFVSRV9fICovIFEyKF9qKTtcbmZ1bmN0aW9uIFhjKGUsIHQpIHtcbiAgKHQgPT0gbnVsbCB8fCB0ID4gZS5sZW5ndGgpICYmICh0ID0gZS5sZW5ndGgpO1xuICBmb3IgKHZhciBvID0gMCwgbiA9IEFycmF5KHQpOyBvIDwgdDsgbysrKVxuICAgIG5bb10gPSBlW29dO1xuICByZXR1cm4gbjtcbn1cbmZ1bmN0aW9uICRqKGUpIHtcbiAgaWYgKEFycmF5LmlzQXJyYXkoZSkpXG4gICAgcmV0dXJuIGU7XG59XG5mdW5jdGlvbiBlSyhlLCB0KSB7XG4gIHZhciBvID0gdHlwZW9mIFN5bWJvbCA8IFwidVwiICYmIGVbU3ltYm9sLml0ZXJhdG9yXSB8fCBlW1wiQEBpdGVyYXRvclwiXTtcbiAgaWYgKCFvKSB7XG4gICAgaWYgKEFycmF5LmlzQXJyYXkoZSkgfHwgKG8gPSBaTShlKSkgfHwgdCAmJiBlICYmIHR5cGVvZiBlLmxlbmd0aCA9PSBcIm51bWJlclwiKSB7XG4gICAgICBvICYmIChlID0gbyk7XG4gICAgICB2YXIgbiA9IDAsIHIgPSBmdW5jdGlvbigpIHtcbiAgICAgIH07XG4gICAgICByZXR1cm4ge1xuICAgICAgICBzOiByLFxuICAgICAgICBuOiBmdW5jdGlvbigpIHtcbiAgICAgICAgICByZXR1cm4gbiA+PSBlLmxlbmd0aCA/IHtcbiAgICAgICAgICAgIGRvbmU6ICEwXG4gICAgICAgICAgfSA6IHtcbiAgICAgICAgICAgIGRvbmU6ICExLFxuICAgICAgICAgICAgdmFsdWU6IGVbbisrXVxuICAgICAgICAgIH07XG4gICAgICAgIH0sXG4gICAgICAgIGU6IGZ1bmN0aW9uKGwpIHtcbiAgICAgICAgICB0aHJvdyBsO1xuICAgICAgICB9LFxuICAgICAgICBmOiByXG4gICAgICB9O1xuICAgIH1cbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKGBJbnZhbGlkIGF0dGVtcHQgdG8gaXRlcmF0ZSBub24taXRlcmFibGUgaW5zdGFuY2UuXG5JbiBvcmRlciB0byBiZSBpdGVyYWJsZSwgbm9uLWFycmF5IG9iamVjdHMgbXVzdCBoYXZlIGEgW1N5bWJvbC5pdGVyYXRvcl0oKSBtZXRob2QuYCk7XG4gIH1cbiAgdmFyIGksIGEgPSAhMCwgcyA9ICExO1xuICByZXR1cm4ge1xuICAgIHM6IGZ1bmN0aW9uKCkge1xuICAgICAgbyA9IG8uY2FsbChlKTtcbiAgICB9LFxuICAgIG46IGZ1bmN0aW9uKCkge1xuICAgICAgdmFyIGwgPSBvLm5leHQoKTtcbiAgICAgIHJldHVybiBhID0gbC5kb25lLCBsO1xuICAgIH0sXG4gICAgZTogZnVuY3Rpb24obCkge1xuICAgICAgcyA9ICEwLCBpID0gbDtcbiAgICB9LFxuICAgIGY6IGZ1bmN0aW9uKCkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgYSB8fCBvLnJldHVybiA9PSBudWxsIHx8IG8ucmV0dXJuKCk7XG4gICAgICB9IGZpbmFsbHkge1xuICAgICAgICBpZiAocylcbiAgICAgICAgICB0aHJvdyBpO1xuICAgICAgfVxuICAgIH1cbiAgfTtcbn1cbmZ1bmN0aW9uIHppKGUsIHQsIG8pIHtcbiAgcmV0dXJuICh0ID0gc0sodCkpIGluIGUgPyBPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwgdCwge1xuICAgIHZhbHVlOiBvLFxuICAgIGVudW1lcmFibGU6ICEwLFxuICAgIGNvbmZpZ3VyYWJsZTogITAsXG4gICAgd3JpdGFibGU6ICEwXG4gIH0pIDogZVt0XSA9IG8sIGU7XG59XG5mdW5jdGlvbiB0SyhlLCB0KSB7XG4gIHZhciBvID0gZSA9PSBudWxsID8gbnVsbCA6IHR5cGVvZiBTeW1ib2wgPCBcInVcIiAmJiBlW1N5bWJvbC5pdGVyYXRvcl0gfHwgZVtcIkBAaXRlcmF0b3JcIl07XG4gIGlmIChvICE9IG51bGwpIHtcbiAgICB2YXIgbiwgciwgaSwgYSwgcyA9IFtdLCBsID0gITAsIHAgPSAhMTtcbiAgICB0cnkge1xuICAgICAgaWYgKGkgPSAobyA9IG8uY2FsbChlKSkubmV4dCwgdCA9PT0gMCkge1xuICAgICAgICBpZiAoT2JqZWN0KG8pICE9PSBvKVxuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgbCA9ICExO1xuICAgICAgfSBlbHNlXG4gICAgICAgIGZvciAoOyAhKGwgPSAobiA9IGkuY2FsbChvKSkuZG9uZSkgJiYgKHMucHVzaChuLnZhbHVlKSwgcy5sZW5ndGggIT09IHQpOyBsID0gITApXG4gICAgICAgICAgO1xuICAgIH0gY2F0Y2ggKGQpIHtcbiAgICAgIHAgPSAhMCwgciA9IGQ7XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGlmICghbCAmJiBvLnJldHVybiAhPSBudWxsICYmIChhID0gby5yZXR1cm4oKSwgT2JqZWN0KGEpICE9PSBhKSlcbiAgICAgICAgICByZXR1cm47XG4gICAgICB9IGZpbmFsbHkge1xuICAgICAgICBpZiAocClcbiAgICAgICAgICB0aHJvdyByO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gcztcbiAgfVxufVxuZnVuY3Rpb24gb0soKSB7XG4gIHRocm93IG5ldyBUeXBlRXJyb3IoYEludmFsaWQgYXR0ZW1wdCB0byBkZXN0cnVjdHVyZSBub24taXRlcmFibGUgaW5zdGFuY2UuXG5JbiBvcmRlciB0byBiZSBpdGVyYWJsZSwgbm9uLWFycmF5IG9iamVjdHMgbXVzdCBoYXZlIGEgW1N5bWJvbC5pdGVyYXRvcl0oKSBtZXRob2QuYCk7XG59XG5mdW5jdGlvbiBVYyhlLCB0KSB7XG4gIHZhciBvID0gT2JqZWN0LmtleXMoZSk7XG4gIGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7XG4gICAgdmFyIG4gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpO1xuICAgIHQgJiYgKG4gPSBuLmZpbHRlcihmdW5jdGlvbihyKSB7XG4gICAgICByZXR1cm4gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihlLCByKS5lbnVtZXJhYmxlO1xuICAgIH0pKSwgby5wdXNoLmFwcGx5KG8sIG4pO1xuICB9XG4gIHJldHVybiBvO1xufVxuZnVuY3Rpb24gUnIoZSkge1xuICBmb3IgKHZhciB0ID0gMTsgdCA8IGFyZ3VtZW50cy5sZW5ndGg7IHQrKykge1xuICAgIHZhciBvID0gYXJndW1lbnRzW3RdICE9IG51bGwgPyBhcmd1bWVudHNbdF0gOiB7fTtcbiAgICB0ICUgMiA/IFVjKE9iamVjdChvKSwgITApLmZvckVhY2goZnVuY3Rpb24obikge1xuICAgICAgemkoZSwgbiwgb1tuXSk7XG4gICAgfSkgOiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyA/IE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKGUsIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzKG8pKSA6IFVjKE9iamVjdChvKSkuZm9yRWFjaChmdW5jdGlvbihuKSB7XG4gICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwgbiwgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihvLCBuKSk7XG4gICAgfSk7XG4gIH1cbiAgcmV0dXJuIGU7XG59XG5mdW5jdGlvbiBySyhlLCB0KSB7XG4gIGlmIChlID09IG51bGwpXG4gICAgcmV0dXJuIHt9O1xuICB2YXIgbywgbiwgciA9IG5LKGUsIHQpO1xuICBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykge1xuICAgIHZhciBpID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTtcbiAgICBmb3IgKG4gPSAwOyBuIDwgaS5sZW5ndGg7IG4rKylcbiAgICAgIG8gPSBpW25dLCB0LmluY2x1ZGVzKG8pIHx8IHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSwgbykgJiYgKHJbb10gPSBlW29dKTtcbiAgfVxuICByZXR1cm4gcjtcbn1cbmZ1bmN0aW9uIG5LKGUsIHQpIHtcbiAgaWYgKGUgPT0gbnVsbClcbiAgICByZXR1cm4ge307XG4gIHZhciBvID0ge307XG4gIGZvciAodmFyIG4gaW4gZSlcbiAgICBpZiAoe30uaGFzT3duUHJvcGVydHkuY2FsbChlLCBuKSkge1xuICAgICAgaWYgKHQuaW5jbHVkZXMobikpXG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgb1tuXSA9IGVbbl07XG4gICAgfVxuICByZXR1cm4gbztcbn1cbmZ1bmN0aW9uIGlLKGUsIHQpIHtcbiAgcmV0dXJuICRqKGUpIHx8IHRLKGUsIHQpIHx8IFpNKGUsIHQpIHx8IG9LKCk7XG59XG5mdW5jdGlvbiBhSyhlLCB0KSB7XG4gIGlmICh0eXBlb2YgZSAhPSBcIm9iamVjdFwiIHx8ICFlKVxuICAgIHJldHVybiBlO1xuICB2YXIgbyA9IGVbU3ltYm9sLnRvUHJpbWl0aXZlXTtcbiAgaWYgKG8gIT09IHZvaWQgMCkge1xuICAgIHZhciBuID0gby5jYWxsKGUsIHQgfHwgXCJkZWZhdWx0XCIpO1xuICAgIGlmICh0eXBlb2YgbiAhPSBcIm9iamVjdFwiKVxuICAgICAgcmV0dXJuIG47XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuXCIpO1xuICB9XG4gIHJldHVybiAodCA9PT0gXCJzdHJpbmdcIiA/IFN0cmluZyA6IE51bWJlcikoZSk7XG59XG5mdW5jdGlvbiBzSyhlKSB7XG4gIHZhciB0ID0gYUsoZSwgXCJzdHJpbmdcIik7XG4gIHJldHVybiB0eXBlb2YgdCA9PSBcInN5bWJvbFwiID8gdCA6IHQgKyBcIlwiO1xufVxuZnVuY3Rpb24gWk0oZSwgdCkge1xuICBpZiAoZSkge1xuICAgIGlmICh0eXBlb2YgZSA9PSBcInN0cmluZ1wiKVxuICAgICAgcmV0dXJuIFhjKGUsIHQpO1xuICAgIHZhciBvID0ge30udG9TdHJpbmcuY2FsbChlKS5zbGljZSg4LCAtMSk7XG4gICAgcmV0dXJuIG8gPT09IFwiT2JqZWN0XCIgJiYgZS5jb25zdHJ1Y3RvciAmJiAobyA9IGUuY29uc3RydWN0b3IubmFtZSksIG8gPT09IFwiTWFwXCIgfHwgbyA9PT0gXCJTZXRcIiA/IEFycmF5LmZyb20oZSkgOiBvID09PSBcIkFyZ3VtZW50c1wiIHx8IC9eKD86VWl8SSludCg/Ojh8MTZ8MzIpKD86Q2xhbXBlZCk/QXJyYXkkLy50ZXN0KG8pID8gWGMoZSwgdCkgOiB2b2lkIDA7XG4gIH1cbn1cbnZhciBjSyA9IHtcbiAgQUQ6IFwiQW5kb3JyYVwiLFxuICBBRTogXCJVbml0ZWQgQXJhYiBFbWlyYXRlc1wiLFxuICBBRjogXCJBZmdoYW5pc3RhblwiLFxuICBBRzogXCJBbnRpZ3VhIGFuZCBCYXJidWRhXCIsXG4gIEFJOiBcIkFuZ3VpbGxhXCIsXG4gIEFMOiBcIkFsYmFuaWFcIixcbiAgQU06IFwiQXJtZW5pYVwiLFxuICBBTzogXCJBbmdvbGFcIixcbiAgQVE6IFwiQW50YXJjdGljYVwiLFxuICBBUjogXCJBcmdlbnRpbmFcIixcbiAgQVM6IFwiQW1lcmljYW4gU2Ftb2FcIixcbiAgQVQ6IFwiQXVzdHJpYVwiLFxuICBBVTogXCJBdXN0cmFsaWFcIixcbiAgQVc6IFwiQXJ1YmFcIixcbiAgQVg6IFwiw4VsYW5kIElzbGFuZHNcIixcbiAgQVo6IFwiQXplcmJhaWphblwiLFxuICBCQTogXCJCb3NuaWEgYW5kIEhlcnplZ292aW5hXCIsXG4gIEJCOiBcIkJhcmJhZG9zXCIsXG4gIEJEOiBcIkJhbmdsYWRlc2hcIixcbiAgQkU6IFwiQmVsZ2l1bVwiLFxuICBCRjogXCJCdXJraW5hIEZhc29cIixcbiAgQkc6IFwiQnVsZ2FyaWFcIixcbiAgQkg6IFwiQmFocmFpblwiLFxuICBCSTogXCJCdXJ1bmRpXCIsXG4gIEJKOiBcIkJlbmluXCIsXG4gIEJMOiBcIlNhaW50IEJhcnRow6lsZW15XCIsXG4gIEJNOiBcIkJlcm11ZGFcIixcbiAgQk46IFwiQnJ1bmVpXCIsXG4gIEJPOiBcIkJvbGl2aWFcIixcbiAgQlE6IFwiQ2FyaWJiZWFuIE5ldGhlcmxhbmRzXCIsXG4gIEJSOiBcIkJyYXppbFwiLFxuICBCUzogXCJCYWhhbWFzXCIsXG4gIEJUOiBcIkJodXRhblwiLFxuICBCVzogXCJCb3Rzd2FuYVwiLFxuICBCWTogXCJCZWxhcnVzXCIsXG4gIEJaOiBcIkJlbGl6ZVwiLFxuICBDQTogXCJDYW5hZGFcIixcbiAgQ0M6IFwiQ29jb3MgSXNsYW5kc1wiLFxuICBDRDogXCJEZW1vY3JhdGljIFJlcHVibGljIG9mIHRoZSBDb25nb1wiLFxuICBDRjogXCJDZW50cmFsIEFmcmljYW4gUmVwdWJsaWNcIixcbiAgQ0c6IFwiUmVwdWJsaWMgb2YgdGhlIENvbmdvXCIsXG4gIENIOiBcIlN3aXR6ZXJsYW5kXCIsXG4gIENJOiBcIkl2b3J5IENvYXN0XCIsXG4gIENLOiBcIkNvb2sgSXNsYW5kc1wiLFxuICBDTDogXCJDaGlsZVwiLFxuICBDTTogXCJDYW1lcm9vblwiLFxuICBDTjogXCJDaGluYVwiLFxuICBDTzogXCJDb2xvbWJpYVwiLFxuICBDUjogXCJDb3N0YSBSaWNhXCIsXG4gIENVOiBcIkN1YmFcIixcbiAgQ1Y6IFwiQ2FibyBWZXJkZVwiLFxuICBDVzogXCJDdXJhw6dhb1wiLFxuICBDWDogXCJDaHJpc3RtYXMgSXNsYW5kXCIsXG4gIENZOiBcIkN5cHJ1c1wiLFxuICBDWjogXCJDemVjaGlhXCIsXG4gIERFOiBcIkdlcm1hbnlcIixcbiAgREo6IFwiRGppYm91dGlcIixcbiAgREs6IFwiRGVubWFya1wiLFxuICBETTogXCJEb21pbmljYVwiLFxuICBETzogXCJEb21pbmljYW4gUmVwdWJsaWNcIixcbiAgRFo6IFwiQWxnZXJpYVwiLFxuICBFQzogXCJFY3VhZG9yXCIsXG4gIEVFOiBcIkVzdG9uaWFcIixcbiAgRUc6IFwiRWd5cHRcIixcbiAgRUg6IFwiV2VzdGVybiBTYWhhcmFcIixcbiAgRVI6IFwiRXJpdHJlYVwiLFxuICBFUzogXCJTcGFpblwiLFxuICBFVDogXCJFdGhpb3BpYVwiLFxuICBGSTogXCJGaW5sYW5kXCIsXG4gIEZKOiBcIkZpamlcIixcbiAgRks6IFwiRmFsa2xhbmQgSXNsYW5kc1wiLFxuICBGTTogXCJNaWNyb25lc2lhXCIsXG4gIEZPOiBcIkZhcm9lIElzbGFuZHNcIixcbiAgRlI6IFwiRnJhbmNlXCIsXG4gIEdBOiBcIkdhYm9uXCIsXG4gIEdCOiBcIlVuaXRlZCBLaW5nZG9tXCIsXG4gIEdEOiBcIkdyZW5hZGFcIixcbiAgR0U6IFwiR2VvcmdpYVwiLFxuICBHRjogXCJGcmVuY2ggR3VpYW5hXCIsXG4gIEdHOiBcIkd1ZXJuc2V5XCIsXG4gIEdIOiBcIkdoYW5hXCIsXG4gIEdJOiBcIkdpYnJhbHRhclwiLFxuICBHTDogXCJHcmVlbmxhbmRcIixcbiAgR006IFwiR2FtYmlhXCIsXG4gIEdOOiBcIkd1aW5lYVwiLFxuICBHUDogXCJHdWFkZWxvdXBlXCIsXG4gIEdROiBcIkVxdWF0b3JpYWwgR3VpbmVhXCIsXG4gIEdSOiBcIkdyZWVjZVwiLFxuICBHUzogXCJTb3V0aCBHZW9yZ2lhIGFuZCB0aGUgU291dGggU2FuZHdpY2ggSXNsYW5kc1wiLFxuICBHVDogXCJHdWF0ZW1hbGFcIixcbiAgR1U6IFwiR3VhbVwiLFxuICBHVzogXCJHdWluZWEtQmlzc2F1XCIsXG4gIEdZOiBcIkd1eWFuYVwiLFxuICBISzogXCJIb25nIEtvbmdcIixcbiAgSE46IFwiSG9uZHVyYXNcIixcbiAgSFI6IFwiQ3JvYXRpYVwiLFxuICBIVDogXCJIYWl0aVwiLFxuICBIVTogXCJIdW5nYXJ5XCIsXG4gIElEOiBcIkluZG9uZXNpYVwiLFxuICBJRTogXCJJcmVsYW5kXCIsXG4gIElMOiBcIklzcmFlbFwiLFxuICBJTTogXCJJc2xlIG9mIE1hblwiLFxuICBJTjogXCJJbmRpYVwiLFxuICBJTzogXCJCcml0aXNoIEluZGlhbiBPY2VhbiBUZXJyaXRvcnlcIixcbiAgSVE6IFwiSXJhcVwiLFxuICBJUjogXCJJcmFuXCIsXG4gIElTOiBcIkljZWxhbmRcIixcbiAgSVQ6IFwiSXRhbHlcIixcbiAgSkU6IFwiSmVyc2V5XCIsXG4gIEpNOiBcIkphbWFpY2FcIixcbiAgSk86IFwiSm9yZGFuXCIsXG4gIEpQOiBcIkphcGFuXCIsXG4gIEtFOiBcIktlbnlhXCIsXG4gIEtHOiBcIkt5cmd5enN0YW5cIixcbiAgS0g6IFwiQ2FtYm9kaWFcIixcbiAgS0k6IFwiS2lyaWJhdGlcIixcbiAgS006IFwiQ29tb3Jvc1wiLFxuICBLTjogXCJTYWludCBLaXR0cyBhbmQgTmV2aXNcIixcbiAgS1A6IFwiTm9ydGggS29yZWFcIixcbiAgS1I6IFwiU291dGggS29yZWFcIixcbiAgS1c6IFwiS3V3YWl0XCIsXG4gIEtZOiBcIkNheW1hbiBJc2xhbmRzXCIsXG4gIEtaOiBcIkthemFraHN0YW5cIixcbiAgTEE6IFwiTGFvc1wiLFxuICBMQjogXCJMZWJhbm9uXCIsXG4gIExDOiBcIlNhaW50IEx1Y2lhXCIsXG4gIExJOiBcIkxpZWNodGVuc3RlaW5cIixcbiAgTEs6IFwiU3JpIExhbmthXCIsXG4gIExSOiBcIkxpYmVyaWFcIixcbiAgTFM6IFwiTGVzb3Rob1wiLFxuICBMVDogXCJMaXRodWFuaWFcIixcbiAgTFU6IFwiTHV4ZW1ib3VyZ1wiLFxuICBMVjogXCJMYXR2aWFcIixcbiAgTFk6IFwiTGlieWFcIixcbiAgTUE6IFwiTW9yb2Njb1wiLFxuICBNQzogXCJNb25hY29cIixcbiAgTUQ6IFwiTW9sZG92YVwiLFxuICBNRTogXCJNb250ZW5lZ3JvXCIsXG4gIE1GOiBcIlNhaW50IE1hcnRpblwiLFxuICBNRzogXCJNYWRhZ2FzY2FyXCIsXG4gIE1IOiBcIk1hcnNoYWxsIElzbGFuZHNcIixcbiAgTUs6IFwiTm9ydGggTWFjZWRvbmlhXCIsXG4gIE1MOiBcIk1hbGlcIixcbiAgTU06IFwiTXlhbm1hclwiLFxuICBNTjogXCJNb25nb2xpYVwiLFxuICBNTzogXCJNYWNhb1wiLFxuICBNUDogXCJOb3J0aGVybiBNYXJpYW5hIElzbGFuZHNcIixcbiAgTVE6IFwiTWFydGluaXF1ZVwiLFxuICBNUjogXCJNYXVyaXRhbmlhXCIsXG4gIE1TOiBcIk1vbnRzZXJyYXRcIixcbiAgTVQ6IFwiTWFsdGFcIixcbiAgTVU6IFwiTWF1cml0aXVzXCIsXG4gIE1WOiBcIk1hbGRpdmVzXCIsXG4gIE1XOiBcIk1hbGF3aVwiLFxuICBNWDogXCJNZXhpY29cIixcbiAgTVk6IFwiTWFsYXlzaWFcIixcbiAgTVo6IFwiTW96YW1iaXF1ZVwiLFxuICBOQTogXCJOYW1pYmlhXCIsXG4gIE5DOiBcIk5ldyBDYWxlZG9uaWFcIixcbiAgTkU6IFwiTmlnZXJcIixcbiAgTkY6IFwiTm9yZm9sayBJc2xhbmRcIixcbiAgTkc6IFwiTmlnZXJpYVwiLFxuICBOSTogXCJOaWNhcmFndWFcIixcbiAgTkw6IFwiTmV0aGVybGFuZHNcIixcbiAgTk86IFwiTm9yd2F5XCIsXG4gIE5QOiBcIk5lcGFsXCIsXG4gIE5SOiBcIk5hdXJ1XCIsXG4gIE5VOiBcIk5pdWVcIixcbiAgTlo6IFwiTmV3IFplYWxhbmRcIixcbiAgT006IFwiT21hblwiLFxuICBQQTogXCJQYW5hbWFcIixcbiAgUEU6IFwiUGVydVwiLFxuICBQRjogXCJGcmVuY2ggUG9seW5lc2lhXCIsXG4gIFBHOiBcIlBhcHVhIE5ldyBHdWluZWFcIixcbiAgUEg6IFwiUGhpbGlwcGluZXNcIixcbiAgUEs6IFwiUGFraXN0YW5cIixcbiAgUEw6IFwiUG9sYW5kXCIsXG4gIFBNOiBcIlNhaW50IFBpZXJyZSBhbmQgTWlxdWVsb25cIixcbiAgUE46IFwiUGl0Y2Fpcm5cIixcbiAgUFI6IFwiUHVlcnRvIFJpY29cIixcbiAgUFM6IFwiUGFsZXN0aW5lXCIsXG4gIFBUOiBcIlBvcnR1Z2FsXCIsXG4gIFBXOiBcIlBhbGF1XCIsXG4gIFBZOiBcIlBhcmFndWF5XCIsXG4gIFFBOiBcIlFhdGFyXCIsXG4gIFJFOiBcIlLDqXVuaW9uXCIsXG4gIFJPOiBcIlJvbWFuaWFcIixcbiAgUlM6IFwiU2VyYmlhXCIsXG4gIFJVOiBcIlJ1c3NpYVwiLFxuICBSVzogXCJSd2FuZGFcIixcbiAgU0E6IFwiU2F1ZGkgQXJhYmlhXCIsXG4gIFNCOiBcIlNvbG9tb24gSXNsYW5kc1wiLFxuICBTQzogXCJTZXljaGVsbGVzXCIsXG4gIFNEOiBcIlN1ZGFuXCIsXG4gIFNFOiBcIlN3ZWRlblwiLFxuICBTRzogXCJTaW5nYXBvcmVcIixcbiAgU0g6IFwiU2FpbnQgSGVsZW5hLCBBc2NlbnNpb24gYW5kIFRyaXN0YW4gZGEgQ3VuaGFcIixcbiAgU0k6IFwiU2xvdmVuaWFcIixcbiAgU0o6IFwiU3ZhbGJhcmQgYW5kIEphbiBNYXllblwiLFxuICBTSzogXCJTbG92YWtpYVwiLFxuICBTTDogXCJTaWVycmEgTGVvbmVcIixcbiAgU006IFwiU2FuIE1hcmlub1wiLFxuICBTTjogXCJTZW5lZ2FsXCIsXG4gIFNPOiBcIlNvbWFsaWFcIixcbiAgU1I6IFwiU3VyaW5hbWVcIixcbiAgU1M6IFwiU291dGggU3VkYW5cIixcbiAgU1Q6IFwiU2FvIFRvbWUgYW5kIFByaW5jaXBlXCIsXG4gIFNWOiBcIkVsIFNhbHZhZG9yXCIsXG4gIFNYOiBcIlNpbnQgTWFhcnRlblwiLFxuICBTWTogXCJTeXJpYVwiLFxuICBTWjogXCJFc3dhdGluaVwiLFxuICBUQzogXCJUdXJrcyBhbmQgQ2FpY29zIElzbGFuZHNcIixcbiAgVEQ6IFwiQ2hhZFwiLFxuICBURjogXCJGcmVuY2ggU291dGhlcm4gVGVycml0b3JpZXNcIixcbiAgVEc6IFwiVG9nb1wiLFxuICBUSDogXCJUaGFpbGFuZFwiLFxuICBUSjogXCJUYWppa2lzdGFuXCIsXG4gIFRLOiBcIlRva2VsYXVcIixcbiAgVEw6IFwiVGltb3ItTGVzdGVcIixcbiAgVE06IFwiVHVya21lbmlzdGFuXCIsXG4gIFROOiBcIlR1bmlzaWFcIixcbiAgVE86IFwiVG9uZ2FcIixcbiAgVFI6IFwiVMO8cmtpeWVcIixcbiAgVFQ6IFwiVHJpbmlkYWQgYW5kIFRvYmFnb1wiLFxuICBUVjogXCJUdXZhbHVcIixcbiAgVFc6IFwiVGFpd2FuXCIsXG4gIFRaOiBcIlRhbnphbmlhXCIsXG4gIFVBOiBcIlVrcmFpbmVcIixcbiAgVUc6IFwiVWdhbmRhXCIsXG4gIFVNOiBcIlVuaXRlZCBTdGF0ZXMgTWlub3IgT3V0bHlpbmcgSXNsYW5kc1wiLFxuICBVUzogXCJVbml0ZWQgU3RhdGVzIG9mIEFtZXJpY2FcIixcbiAgVVk6IFwiVXJ1Z3VheVwiLFxuICBVWjogXCJVemJla2lzdGFuXCIsXG4gIFZBOiBcIkhvbHkgU2VlXCIsXG4gIFZDOiBcIlNhaW50IFZpbmNlbnQgYW5kIHRoZSBHcmVuYWRpbmVzXCIsXG4gIFZFOiBcIlZlbmV6dWVsYVwiLFxuICBWRzogXCJWaXJnaW4gSXNsYW5kcyAoVUspXCIsXG4gIFZJOiBcIlZpcmdpbiBJc2xhbmRzIChVUylcIixcbiAgVk46IFwiVmlldG5hbVwiLFxuICBWVTogXCJWYW51YXR1XCIsXG4gIFdGOiBcIldhbGxpcyBhbmQgRnV0dW5hXCIsXG4gIFdTOiBcIlNhbW9hXCIsXG4gIFlFOiBcIlllbWVuXCIsXG4gIFlUOiBcIk1heW90dGVcIixcbiAgWkE6IFwiU291dGggQWZyaWNhXCIsXG4gIFpNOiBcIlphbWJpYVwiLFxuICBaVzogXCJaaW1iYWJ3ZVwiXG59LCBsSyA9IHtcbiAgXCJBZnJpY2EvQWJpZGphblwiOiB7XG4gICAgdTogMCxcbiAgICBjOiBbXG4gICAgICBcIkNJXCIsXG4gICAgICBcIkJGXCIsXG4gICAgICBcIkdIXCIsXG4gICAgICBcIkdNXCIsXG4gICAgICBcIkdOXCIsXG4gICAgICBcIklTXCIsXG4gICAgICBcIk1MXCIsXG4gICAgICBcIk1SXCIsXG4gICAgICBcIlNIXCIsXG4gICAgICBcIlNMXCIsXG4gICAgICBcIlNOXCIsXG4gICAgICBcIlRHXCJcbiAgICBdXG4gIH0sXG4gIFwiQWZyaWNhL0FjY3JhXCI6IHtcbiAgICBhOiBcIkFmcmljYS9BYmlkamFuXCIsXG4gICAgYzogW1xuICAgICAgXCJHSFwiXG4gICAgXSxcbiAgICByOiAxXG4gIH0sXG4gIFwiQWZyaWNhL0FkZGlzX0FiYWJhXCI6IHtcbiAgICBhOiBcIkFmcmljYS9OYWlyb2JpXCIsXG4gICAgYzogW1xuICAgICAgXCJFVFwiXG4gICAgXSxcbiAgICByOiAxXG4gIH0sXG4gIFwiQWZyaWNhL0FsZ2llcnNcIjoge1xuICAgIHU6IDYwLFxuICAgIGM6IFtcbiAgICAgIFwiRFpcIlxuICAgIF1cbiAgfSxcbiAgXCJBZnJpY2EvQXNtYXJhXCI6IHtcbiAgICBhOiBcIkFmcmljYS9OYWlyb2JpXCIsXG4gICAgYzogW1xuICAgICAgXCJFUlwiXG4gICAgXSxcbiAgICByOiAxXG4gIH0sXG4gIFwiQWZyaWNhL0FzbWVyYVwiOiB7XG4gICAgYTogXCJBZnJpY2EvTmFpcm9iaVwiLFxuICAgIGM6IFtcbiAgICAgIFwiRVJcIlxuICAgIF0sXG4gICAgcjogMVxuICB9LFxuICBcIkFmcmljYS9CYW1ha29cIjoge1xuICAgIGE6IFwiQWZyaWNhL0FiaWRqYW5cIixcbiAgICBjOiBbXG4gICAgICBcIk1MXCJcbiAgICBdLFxuICAgIHI6IDFcbiAgfSxcbiAgXCJBZnJpY2EvQmFuZ3VpXCI6IHtcbiAgICBhOiBcIkFmcmljYS9MYWdvc1wiLFxuICAgIGM6IFtcbiAgICAgIFwiQ0ZcIlxuICAgIF0sXG4gICAgcjogMVxuICB9LFxuICBcIkFmcmljYS9CYW5qdWxcIjoge1xuICAgIGE6IFwiQWZyaWNhL0FiaWRqYW5cIixcbiAgICBjOiBbXG4gICAgICBcIkdNXCJcbiAgICBdLFxuICAgIHI6IDFcbiAgfSxcbiAgXCJBZnJpY2EvQmlzc2F1XCI6IHtcbiAgICB1OiAwLFxuICAgIGM6IFtcbiAgICAgIFwiR1dcIlxuICAgIF1cbiAgfSxcbiAgXCJBZnJpY2EvQmxhbnR5cmVcIjoge1xuICAgIGE6IFwiQWZyaWNhL01hcHV0b1wiLFxuICAgIGM6IFtcbiAgICAgIFwiTVdcIlxuICAgIF0sXG4gICAgcjogMVxuICB9LFxuICBcIkFmcmljYS9CcmF6emF2aWxsZVwiOiB7XG4gICAgYTogXCJBZnJpY2EvTGFnb3NcIixcbiAgICBjOiBbXG4gICAgICBcIkNHXCJcbiAgICBdLFxuICAgIHI6IDFcbiAgfSxcbiAgXCJBZnJpY2EvQnVqdW1idXJhXCI6IHtcbiAgICBhOiBcIkFmcmljYS9NYXB1dG9cIixcbiAgICBjOiBbXG4gICAgICBcIkJJXCJcbiAgICBdLFxuICAgIHI6IDFcbiAgfSxcbiAgXCJBZnJpY2EvQ2Fpcm9cIjoge1xuICAgIHU6IDEyMCxcbiAgICBkOiAxODAsXG4gICAgYzogW1xuICAgICAgXCJFR1wiXG4gICAgXVxuICB9LFxuICBcIkFmcmljYS9DYXNhYmxhbmNhXCI6IHtcbiAgICB1OiA2MCxcbiAgICBkOiAwLFxuICAgIGM6IFtcbiAgICAgIFwiTUFcIlxuICAgIF1cbiAgfSxcbiAgXCJBZnJpY2EvQ2V1dGFcIjoge1xuICAgIHU6IDYwLFxuICAgIGQ6IDEyMCxcbiAgICBjOiBbXG4gICAgICBcIkVTXCJcbiAgICBdXG4gIH0sXG4gIFwiQWZyaWNhL0NvbmFrcnlcIjoge1xuICAgIGE6IFwiQWZyaWNhL0FiaWRqYW5cIixcbiAgICBjOiBbXG4gICAgICBcIkdOXCJcbiAgICBdLFxuICAgIHI6IDFcbiAgfSxcbiAgXCJBZnJpY2EvRGFrYXJcIjoge1xuICAgIGE6IFwiQWZyaWNhL0FiaWRqYW5cIixcbiAgICBjOiBbXG4gICAgICBcIlNOXCJcbiAgICBdLFxuICAgIHI6IDFcbiAgfSxcbiAgXCJBZnJpY2EvRGFyX2VzX1NhbGFhbVwiOiB7XG4gICAgYTogXCJBZnJpY2EvTmFpcm9iaVwiLFxuICAgIGM6IFtcbiAgICAgIFwiVFpcIlxuICAgIF0sXG4gICAgcjogMVxuICB9LFxuICBcIkFmcmljYS9Eamlib3V0aVwiOiB7XG4gICAgYTogXCJBZnJpY2EvTmFpcm9iaVwiLFxuICAgIGM6IFtcbiAgICAgIFwiREpcIlxuICAgIF0sXG4gICAgcjogMVxuICB9LFxuICBcIkFmcmljYS9Eb3VhbGFcIjoge1xuICAgIGE6IFwiQWZyaWNhL0xhZ29zXCIsXG4gICAgYzogW1xuICAgICAgXCJDTVwiXG4gICAgXSxcbiAgICByOiAxXG4gIH0sXG4gIFwiQWZyaWNhL0VsX0FhaXVuXCI6IHtcbiAgICB1OiA2MCxcbiAgICBkOiAwLFxuICAgIGM6IFtcbiAgICAgIFwiRUhcIlxuICAgIF1cbiAgfSxcbiAgXCJBZnJpY2EvRnJlZXRvd25cIjoge1xuICAgIGE6IFwiQWZyaWNhL0FiaWRqYW5cIixcbiAgICBjOiBbXG4gICAgICBcIlNMXCJcbiAgICBdLFxuICAgIHI6IDFcbiAgfSxcbiAgXCJBZnJpY2EvR2Fib3JvbmVcIjoge1xuICAgIGE6IFwiQWZyaWNhL01hcHV0b1wiLFxuICAgIGM6IFtcbiAgICAgIFwiQldcIlxuICAgIF0sXG4gICAgcjogMVxuICB9LFxuICBcIkFmcmljYS9IYXJhcmVcIjoge1xuICAgIGE6IFwiQWZyaWNhL01hcHV0b1wiLFxuICAgIGM6IFtcbiAgICAgIFwiWldcIlxuICAgIF0sXG4gICAgcjogMVxuICB9LFxuICBcIkFmcmljYS9Kb2hhbm5lc2J1cmdcIjoge1xuICAgIHU6IDEyMCxcbiAgICBjOiBbXG4gICAgICBcIlpBXCIsXG4gICAgICBcIkxTXCIsXG4gICAgICBcIlNaXCJcbiAgICBdXG4gIH0sXG4gIFwiQWZyaWNhL0p1YmFcIjoge1xuICAgIHU6IDEyMCxcbiAgICBjOiBbXG4gICAgICBcIlNTXCJcbiAgICBdXG4gIH0sXG4gIFwiQWZyaWNhL0thbXBhbGFcIjoge1xuICAgIGE6IFwiQWZyaWNhL05haXJvYmlcIixcbiAgICBjOiBbXG4gICAgICBcIlVHXCJcbiAgICBdLFxuICAgIHI6IDFcbiAgfSxcbiAgXCJBZnJpY2EvS2hhcnRvdW1cIjoge1xuICAgIHU6IDEyMCxcbiAgICBjOiBbXG4gICAgICBcIlNEXCJcbiAgICBdXG4gIH0sXG4gIFwiQWZyaWNhL0tpZ2FsaVwiOiB7XG4gICAgYTogXCJBZnJpY2EvTWFwdXRvXCIsXG4gICAgYzogW1xuICAgICAgXCJSV1wiXG4gICAgXSxcbiAgICByOiAxXG4gIH0sXG4gIFwiQWZyaWNhL0tpbnNoYXNhXCI6IHtcbiAgICBhOiBcIkFmcmljYS9MYWdvc1wiLFxuICAgIGM6IFtcbiAgICAgIFwiQ0RcIlxuICAgIF0sXG4gICAgcjogMVxuICB9LFxuICBcIkFmcmljYS9MYWdvc1wiOiB7XG4gICAgdTogNjAsXG4gICAgYzogW1xuICAgICAgXCJOR1wiLFxuICAgICAgXCJBT1wiLFxuICAgICAgXCJCSlwiLFxuICAgICAgXCJDRFwiLFxuICAgICAgXCJDRlwiLFxuICAgICAgXCJDR1wiLFxuICAgICAgXCJDTVwiLFxuICAgICAgXCJHQVwiLFxuICAgICAgXCJHUVwiLFxuICAgICAgXCJORVwiXG4gICAgXVxuICB9LFxuICBcIkFmcmljYS9MaWJyZXZpbGxlXCI6IHtcbiAgICBhOiBcIkFmcmljYS9MYWdvc1wiLFxuICAgIGM6IFtcbiAgICAgIFwiR0FcIlxuICAgIF0sXG4gICAgcjogMVxuICB9LFxuICBcIkFmcmljYS9Mb21lXCI6IHtcbiAgICBhOiBcIkFmcmljYS9BYmlkamFuXCIsXG4gICAgYzogW1xuICAgICAgXCJUR1wiXG4gICAgXSxcbiAgICByOiAxXG4gIH0sXG4gIFwiQWZyaWNhL0x1YW5kYVwiOiB7XG4gICAgYTogXCJBZnJpY2EvTGFnb3NcIixcbiAgICBjOiBbXG4gICAgICBcIkFPXCJcbiAgICBdLFxuICAgIHI6IDFcbiAgfSxcbiAgXCJBZnJpY2EvTHVidW1iYXNoaVwiOiB7XG4gICAgYTogXCJBZnJpY2EvTWFwdXRvXCIsXG4gICAgYzogW1xuICAgICAgXCJDRFwiXG4gICAgXSxcbiAgICByOiAxXG4gIH0sXG4gIFwiQWZyaWNhL0x1c2FrYVwiOiB7XG4gICAgYTogXCJBZnJpY2EvTWFwdXRvXCIsXG4gICAgYzogW1xuICAgICAgXCJaTVwiXG4gICAgXSxcbiAgICByOiAxXG4gIH0sXG4gIFwiQWZyaWNhL01hbGFib1wiOiB7XG4gICAgYTogXCJBZnJpY2EvTGFnb3NcIixcbiAgICBjOiBbXG4gICAgICBcIkdRXCJcbiAgICBdLFxuICAgIHI6IDFcbiAgfSxcbiAgXCJBZnJpY2EvTWFwdXRvXCI6IHtcbiAgICB1OiAxMjAsXG4gICAgYzogW1xuICAgICAgXCJNWlwiLFxuICAgICAgXCJCSVwiLFxuICAgICAgXCJCV1wiLFxuICAgICAgXCJDRFwiLFxuICAgICAgXCJNV1wiLFxuICAgICAgXCJSV1wiLFxuICAgICAgXCJaTVwiLFxuICAgICAgXCJaV1wiXG4gICAgXVxuICB9LFxuICBcIkFmcmljYS9NYXNlcnVcIjoge1xuICAgIGE6IFwiQWZyaWNhL0pvaGFubmVzYnVyZ1wiLFxuICAgIGM6IFtcbiAgICAgIFwiTFNcIlxuICAgIF0sXG4gICAgcjogMVxuICB9LFxuICBcIkFmcmljYS9NYmFiYW5lXCI6IHtcbiAgICBhOiBcIkFmcmljYS9Kb2hhbm5lc2J1cmdcIixcbiAgICBjOiBbXG4gICAgICBcIlNaXCJcbiAgICBdLFxuICAgIHI6IDFcbiAgfSxcbiAgXCJBZnJpY2EvTW9nYWRpc2h1XCI6IHtcbiAgICBhOiBcIkFmcmljYS9OYWlyb2JpXCIsXG4gICAgYzogW1xuICAgICAgXCJTT1wiXG4gICAgXSxcbiAgICByOiAxXG4gIH0sXG4gIFwiQWZyaWNhL01vbnJvdmlhXCI6IHtcbiAgICB1OiAwLFxuICAgIGM6IFtcbiAgICAgIFwiTFJcIlxuICAgIF1cbiAgfSxcbiAgXCJBZnJpY2EvTmFpcm9iaVwiOiB7XG4gICAgdTogMTgwLFxuICAgIGM6IFtcbiAgICAgIFwiS0VcIixcbiAgICAgIFwiREpcIixcbiAgICAgIFwiRVJcIixcbiAgICAgIFwiRVRcIixcbiAgICAgIFwiS01cIixcbiAgICAgIFwiTUdcIixcbiAgICAgIFwiU09cIixcbiAgICAgIFwiVFpcIixcbiAgICAgIFwiVUdcIixcbiAgICAgIFwiWVRcIlxuICAgIF1cbiAgfSxcbiAgXCJBZnJpY2EvTmRqYW1lbmFcIjoge1xuICAgIHU6IDYwLFxuICAgIGM6IFtcbiAgICAgIFwiVERcIlxuICAgIF1cbiAgfSxcbiAgXCJBZnJpY2EvTmlhbWV5XCI6IHtcbiAgICBhOiBcIkFmcmljYS9MYWdvc1wiLFxuICAgIGM6IFtcbiAgICAgIFwiTkVcIlxuICAgIF0sXG4gICAgcjogMVxuICB9LFxuICBcIkFmcmljYS9Ob3Vha2Nob3R0XCI6IHtcbiAgICBhOiBcIkFmcmljYS9BYmlkamFuXCIsXG4gICAgYzogW1xuICAgICAgXCJNUlwiXG4gICAgXSxcbiAgICByOiAxXG4gIH0sXG4gIFwiQWZyaWNhL091YWdhZG91Z291XCI6IHtcbiAgICBhOiBcIkFmcmljYS9BYmlkamFuXCIsXG4gICAgYzogW1xuICAgICAgXCJCRlwiXG4gICAgXSxcbiAgICByOiAxXG4gIH0sXG4gIFwiQWZyaWNhL1BvcnRvLU5vdm9cIjoge1xuICAgIGE6IFwiQWZyaWNhL0xhZ29zXCIsXG4gICAgYzogW1xuICAgICAgXCJCSlwiXG4gICAgXSxcbiAgICByOiAxXG4gIH0sXG4gIFwiQWZyaWNhL1Nhb19Ub21lXCI6IHtcbiAgICB1OiAwLFxuICAgIGM6IFtcbiAgICAgIFwiU1RcIlxuICAgIF1cbiAgfSxcbiAgXCJBZnJpY2EvVGltYnVrdHVcIjoge1xuICAgIGE6IFwiQWZyaWNhL0FiaWRqYW5cIixcbiAgICBjOiBbXG4gICAgICBcIk1MXCJcbiAgICBdLFxuICAgIHI6IDFcbiAgfSxcbiAgXCJBZnJpY2EvVHJpcG9saVwiOiB7XG4gICAgdTogMTIwLFxuICAgIGM6IFtcbiAgICAgIFwiTFlcIlxuICAgIF1cbiAgfSxcbiAgXCJBZnJpY2EvVHVuaXNcIjoge1xuICAgIHU6IDYwLFxuICAgIGM6IFtcbiAgICAgIFwiVE5cIlxuICAgIF1cbiAgfSxcbiAgXCJBZnJpY2EvV2luZGhvZWtcIjoge1xuICAgIHU6IDEyMCxcbiAgICBjOiBbXG4gICAgICBcIk5BXCJcbiAgICBdXG4gIH0sXG4gIFwiQW1lcmljYS9BZGFrXCI6IHtcbiAgICB1OiAtNjAwLFxuICAgIGQ6IC01NDAsXG4gICAgYzogW1xuICAgICAgXCJVU1wiXG4gICAgXVxuICB9LFxuICBcIkFtZXJpY2EvQW5jaG9yYWdlXCI6IHtcbiAgICB1OiAtNTQwLFxuICAgIGQ6IC00ODAsXG4gICAgYzogW1xuICAgICAgXCJVU1wiXG4gICAgXVxuICB9LFxuICBcIkFtZXJpY2EvQW5ndWlsbGFcIjoge1xuICAgIGE6IFwiQW1lcmljYS9QdWVydG9fUmljb1wiLFxuICAgIGM6IFtcbiAgICAgIFwiQUlcIlxuICAgIF0sXG4gICAgcjogMVxuICB9LFxuICBcIkFtZXJpY2EvQW50aWd1YVwiOiB7XG4gICAgYTogXCJBbWVyaWNhL1B1ZXJ0b19SaWNvXCIsXG4gICAgYzogW1xuICAgICAgXCJBR1wiXG4gICAgXSxcbiAgICByOiAxXG4gIH0sXG4gIFwiQW1lcmljYS9BcmFndWFpbmFcIjoge1xuICAgIHU6IC0xODAsXG4gICAgYzogW1xuICAgICAgXCJCUlwiXG4gICAgXVxuICB9LFxuICBcIkFtZXJpY2EvQXJnZW50aW5hL0J1ZW5vc19BaXJlc1wiOiB7XG4gICAgdTogLTE4MCxcbiAgICBjOiBbXG4gICAgICBcIkFSXCJcbiAgICBdXG4gIH0sXG4gIFwiQW1lcmljYS9BcmdlbnRpbmEvQ2F0YW1hcmNhXCI6IHtcbiAgICB1OiAtMTgwLFxuICAgIGM6IFtcbiAgICAgIFwiQVJcIlxuICAgIF1cbiAgfSxcbiAgXCJBbWVyaWNhL0FyZ2VudGluYS9Db21vZFJpdmFkYXZpYVwiOiB7XG4gICAgYTogXCJBbWVyaWNhL0FyZ2VudGluYS9DYXRhbWFyY2FcIixcbiAgICByOiAxXG4gIH0sXG4gIFwiQW1lcmljYS9BcmdlbnRpbmEvQ29yZG9iYVwiOiB7XG4gICAgdTogLTE4MCxcbiAgICBjOiBbXG4gICAgICBcIkFSXCJcbiAgICBdXG4gIH0sXG4gIFwiQW1lcmljYS9BcmdlbnRpbmEvSnVqdXlcIjoge1xuICAgIHU6IC0xODAsXG4gICAgYzogW1xuICAgICAgXCJBUlwiXG4gICAgXVxuICB9LFxuICBcIkFtZXJpY2EvQXJnZW50aW5hL0xhX1Jpb2phXCI6IHtcbiAgICB1OiAtMTgwLFxuICAgIGM6IFtcbiAgICAgIFwiQVJcIlxuICAgIF1cbiAgfSxcbiAgXCJBbWVyaWNhL0FyZ2VudGluYS9NZW5kb3phXCI6IHtcbiAgICB1OiAtMTgwLFxuICAgIGM6IFtcbiAgICAgIFwiQVJcIlxuICAgIF1cbiAgfSxcbiAgXCJBbWVyaWNhL0FyZ2VudGluYS9SaW9fR2FsbGVnb3NcIjoge1xuICAgIHU6IC0xODAsXG4gICAgYzogW1xuICAgICAgXCJBUlwiXG4gICAgXVxuICB9LFxuICBcIkFtZXJpY2EvQXJnZW50aW5hL1NhbHRhXCI6IHtcbiAgICB1OiAtMTgwLFxuICAgIGM6IFtcbiAgICAgIFwiQVJcIlxuICAgIF1cbiAgfSxcbiAgXCJBbWVyaWNhL0FyZ2VudGluYS9TYW5fSnVhblwiOiB7XG4gICAgdTogLTE4MCxcbiAgICBjOiBbXG4gICAgICBcIkFSXCJcbiAgICBdXG4gIH0sXG4gIFwiQW1lcmljYS9BcmdlbnRpbmEvU2FuX0x1aXNcIjoge1xuICAgIHU6IC0xODAsXG4gICAgYzogW1xuICAgICAgXCJBUlwiXG4gICAgXVxuICB9LFxuICBcIkFtZXJpY2EvQXJnZW50aW5hL1R1Y3VtYW5cIjoge1xuICAgIHU6IC0xODAsXG4gICAgYzogW1xuICAgICAgXCJBUlwiXG4gICAgXVxuICB9LFxuICBcIkFtZXJpY2EvQXJnZW50aW5hL1VzaHVhaWFcIjoge1xuICAgIHU6IC0xODAsXG4gICAgYzogW1xuICAgICAgXCJBUlwiXG4gICAgXVxuICB9LFxuICBcIkFtZXJpY2EvQXJ1YmFcIjoge1xuICAgIGE6IFwiQW1lcmljYS9QdWVydG9fUmljb1wiLFxuICAgIGM6IFtcbiAgICAgIFwiQVdcIlxuICAgIF0sXG4gICAgcjogMVxuICB9LFxuICBcIkFtZXJpY2EvQXN1bmNpb25cIjoge1xuICAgIHU6IC0yNDAsXG4gICAgZDogLTE4MCxcbiAgICBjOiBbXG4gICAgICBcIlBZXCJcbiAgICBdXG4gIH0sXG4gIFwiQW1lcmljYS9BdGlrb2thblwiOiB7XG4gICAgYTogXCJBbWVyaWNhL1BhbmFtYVwiLFxuICAgIGM6IFtcbiAgICAgIFwiQ0FcIlxuICAgIF0sXG4gICAgcjogMVxuICB9LFxuICBcIkFtZXJpY2EvQXRrYVwiOiB7XG4gICAgYTogXCJBbWVyaWNhL0FkYWtcIixcbiAgICByOiAxXG4gIH0sXG4gIFwiQW1lcmljYS9CYWhpYVwiOiB7XG4gICAgdTogLTE4MCxcbiAgICBjOiBbXG4gICAgICBcIkJSXCJcbiAgICBdXG4gIH0sXG4gIFwiQW1lcmljYS9CYWhpYV9CYW5kZXJhc1wiOiB7XG4gICAgdTogLTM2MCxcbiAgICBjOiBbXG4gICAgICBcIk1YXCJcbiAgICBdXG4gIH0sXG4gIFwiQW1lcmljYS9CYXJiYWRvc1wiOiB7XG4gICAgdTogLTI0MCxcbiAgICBjOiBbXG4gICAgICBcIkJCXCJcbiAgICBdXG4gIH0sXG4gIFwiQW1lcmljYS9CZWxlbVwiOiB7XG4gICAgdTogLTE4MCxcbiAgICBjOiBbXG4gICAgICBcIkJSXCJcbiAgICBdXG4gIH0sXG4gIFwiQW1lcmljYS9CZWxpemVcIjoge1xuICAgIHU6IC0zNjAsXG4gICAgYzogW1xuICAgICAgXCJCWlwiXG4gICAgXVxuICB9LFxuICBcIkFtZXJpY2EvQmxhbmMtU2FibG9uXCI6IHtcbiAgICBhOiBcIkFtZXJpY2EvUHVlcnRvX1JpY29cIixcbiAgICBjOiBbXG4gICAgICBcIkNBXCJcbiAgICBdLFxuICAgIHI6IDFcbiAgfSxcbiAgXCJBbWVyaWNhL0JvYV9WaXN0YVwiOiB7XG4gICAgdTogLTI0MCxcbiAgICBjOiBbXG4gICAgICBcIkJSXCJcbiAgICBdXG4gIH0sXG4gIFwiQW1lcmljYS9Cb2dvdGFcIjoge1xuICAgIHU6IC0zMDAsXG4gICAgYzogW1xuICAgICAgXCJDT1wiXG4gICAgXVxuICB9LFxuICBcIkFtZXJpY2EvQm9pc2VcIjoge1xuICAgIHU6IC00MjAsXG4gICAgZDogLTM2MCxcbiAgICBjOiBbXG4gICAgICBcIlVTXCJcbiAgICBdXG4gIH0sXG4gIFwiQW1lcmljYS9CdWVub3NfQWlyZXNcIjoge1xuICAgIGE6IFwiQW1lcmljYS9BcmdlbnRpbmEvQnVlbm9zX0FpcmVzXCIsXG4gICAgcjogMVxuICB9LFxuICBcIkFtZXJpY2EvQ2FtYnJpZGdlX0JheVwiOiB7XG4gICAgdTogLTQyMCxcbiAgICBkOiAtMzYwLFxuICAgIGM6IFtcbiAgICAgIFwiQ0FcIlxuICAgIF1cbiAgfSxcbiAgXCJBbWVyaWNhL0NhbXBvX0dyYW5kZVwiOiB7XG4gICAgdTogLTI0MCxcbiAgICBjOiBbXG4gICAgICBcIkJSXCJcbiAgICBdXG4gIH0sXG4gIFwiQW1lcmljYS9DYW5jdW5cIjoge1xuICAgIHU6IC0zMDAsXG4gICAgYzogW1xuICAgICAgXCJNWFwiXG4gICAgXVxuICB9LFxuICBcIkFtZXJpY2EvQ2FyYWNhc1wiOiB7XG4gICAgdTogLTI0MCxcbiAgICBjOiBbXG4gICAgICBcIlZFXCJcbiAgICBdXG4gIH0sXG4gIFwiQW1lcmljYS9DYXRhbWFyY2FcIjoge1xuICAgIGE6IFwiQW1lcmljYS9BcmdlbnRpbmEvQ2F0YW1hcmNhXCIsXG4gICAgcjogMVxuICB9LFxuICBcIkFtZXJpY2EvQ2F5ZW5uZVwiOiB7XG4gICAgdTogLTE4MCxcbiAgICBjOiBbXG4gICAgICBcIkdGXCJcbiAgICBdXG4gIH0sXG4gIFwiQW1lcmljYS9DYXltYW5cIjoge1xuICAgIGE6IFwiQW1lcmljYS9QYW5hbWFcIixcbiAgICBjOiBbXG4gICAgICBcIktZXCJcbiAgICBdLFxuICAgIHI6IDFcbiAgfSxcbiAgXCJBbWVyaWNhL0NoaWNhZ29cIjoge1xuICAgIHU6IC0zNjAsXG4gICAgZDogLTMwMCxcbiAgICBjOiBbXG4gICAgICBcIlVTXCJcbiAgICBdXG4gIH0sXG4gIFwiQW1lcmljYS9DaGlodWFodWFcIjoge1xuICAgIHU6IC0zNjAsXG4gICAgYzogW1xuICAgICAgXCJNWFwiXG4gICAgXVxuICB9LFxuICBcIkFtZXJpY2EvQ2l1ZGFkX0p1YXJlelwiOiB7XG4gICAgdTogLTQyMCxcbiAgICBkOiAtMzYwLFxuICAgIGM6IFtcbiAgICAgIFwiTVhcIlxuICAgIF1cbiAgfSxcbiAgXCJBbWVyaWNhL0NvcmFsX0hhcmJvdXJcIjoge1xuICAgIGE6IFwiQW1lcmljYS9QYW5hbWFcIixcbiAgICBjOiBbXG4gICAgICBcIkNBXCJcbiAgICBdLFxuICAgIHI6IDFcbiAgfSxcbiAgXCJBbWVyaWNhL0NvcmRvYmFcIjoge1xuICAgIGE6IFwiQW1lcmljYS9BcmdlbnRpbmEvQ29yZG9iYVwiLFxuICAgIHI6IDFcbiAgfSxcbiAgXCJBbWVyaWNhL0Nvc3RhX1JpY2FcIjoge1xuICAgIHU6IC0zNjAsXG4gICAgYzogW1xuICAgICAgXCJDUlwiXG4gICAgXVxuICB9LFxuICBcIkFtZXJpY2EvQ3Jlc3RvblwiOiB7XG4gICAgYTogXCJBbWVyaWNhL1Bob2VuaXhcIixcbiAgICBjOiBbXG4gICAgICBcIkNBXCJcbiAgICBdLFxuICAgIHI6IDFcbiAgfSxcbiAgXCJBbWVyaWNhL0N1aWFiYVwiOiB7XG4gICAgdTogLTI0MCxcbiAgICBjOiBbXG4gICAgICBcIkJSXCJcbiAgICBdXG4gIH0sXG4gIFwiQW1lcmljYS9DdXJhY2FvXCI6IHtcbiAgICBhOiBcIkFtZXJpY2EvUHVlcnRvX1JpY29cIixcbiAgICBjOiBbXG4gICAgICBcIkNXXCJcbiAgICBdLFxuICAgIHI6IDFcbiAgfSxcbiAgXCJBbWVyaWNhL0Rhbm1hcmtzaGF2blwiOiB7XG4gICAgdTogMCxcbiAgICBjOiBbXG4gICAgICBcIkdMXCJcbiAgICBdXG4gIH0sXG4gIFwiQW1lcmljYS9EYXdzb25cIjoge1xuICAgIHU6IC00MjAsXG4gICAgYzogW1xuICAgICAgXCJDQVwiXG4gICAgXVxuICB9LFxuICBcIkFtZXJpY2EvRGF3c29uX0NyZWVrXCI6IHtcbiAgICB1OiAtNDIwLFxuICAgIGM6IFtcbiAgICAgIFwiQ0FcIlxuICAgIF1cbiAgfSxcbiAgXCJBbWVyaWNhL0RlbnZlclwiOiB7XG4gICAgdTogLTQyMCxcbiAgICBkOiAtMzYwLFxuICAgIGM6IFtcbiAgICAgIFwiVVNcIlxuICAgIF1cbiAgfSxcbiAgXCJBbWVyaWNhL0RldHJvaXRcIjoge1xuICAgIHU6IC0zMDAsXG4gICAgZDogLTI0MCxcbiAgICBjOiBbXG4gICAgICBcIlVTXCJcbiAgICBdXG4gIH0sXG4gIFwiQW1lcmljYS9Eb21pbmljYVwiOiB7XG4gICAgYTogXCJBbWVyaWNhL1B1ZXJ0b19SaWNvXCIsXG4gICAgYzogW1xuICAgICAgXCJETVwiXG4gICAgXSxcbiAgICByOiAxXG4gIH0sXG4gIFwiQW1lcmljYS9FZG1vbnRvblwiOiB7XG4gICAgdTogLTQyMCxcbiAgICBkOiAtMzYwLFxuICAgIGM6IFtcbiAgICAgIFwiQ0FcIlxuICAgIF1cbiAgfSxcbiAgXCJBbWVyaWNhL0VpcnVuZXBlXCI6IHtcbiAgICB1OiAtMzAwLFxuICAgIGM6IFtcbiAgICAgIFwiQlJcIlxuICAgIF1cbiAgfSxcbiAgXCJBbWVyaWNhL0VsX1NhbHZhZG9yXCI6IHtcbiAgICB1OiAtMzYwLFxuICAgIGM6IFtcbiAgICAgIFwiU1ZcIlxuICAgIF1cbiAgfSxcbiAgXCJBbWVyaWNhL0Vuc2VuYWRhXCI6IHtcbiAgICBhOiBcIkFtZXJpY2EvVGlqdWFuYVwiLFxuICAgIHI6IDFcbiAgfSxcbiAgXCJBbWVyaWNhL0ZvcnRfTmVsc29uXCI6IHtcbiAgICB1OiAtNDIwLFxuICAgIGM6IFtcbiAgICAgIFwiQ0FcIlxuICAgIF1cbiAgfSxcbiAgXCJBbWVyaWNhL0ZvcnRfV2F5bmVcIjoge1xuICAgIGE6IFwiQW1lcmljYS9JbmRpYW5hL0luZGlhbmFwb2xpc1wiLFxuICAgIHI6IDFcbiAgfSxcbiAgXCJBbWVyaWNhL0ZvcnRhbGV6YVwiOiB7XG4gICAgdTogLTE4MCxcbiAgICBjOiBbXG4gICAgICBcIkJSXCJcbiAgICBdXG4gIH0sXG4gIFwiQW1lcmljYS9HbGFjZV9CYXlcIjoge1xuICAgIHU6IC0yNDAsXG4gICAgZDogLTE4MCxcbiAgICBjOiBbXG4gICAgICBcIkNBXCJcbiAgICBdXG4gIH0sXG4gIFwiQW1lcmljYS9Hb2R0aGFiXCI6IHtcbiAgICBhOiBcIkFtZXJpY2EvTnV1a1wiLFxuICAgIHI6IDFcbiAgfSxcbiAgXCJBbWVyaWNhL0dvb3NlX0JheVwiOiB7XG4gICAgdTogLTI0MCxcbiAgICBkOiAtMTgwLFxuICAgIGM6IFtcbiAgICAgIFwiQ0FcIlxuICAgIF1cbiAgfSxcbiAgXCJBbWVyaWNhL0dyYW5kX1R1cmtcIjoge1xuICAgIHU6IC0zMDAsXG4gICAgZDogLTI0MCxcbiAgICBjOiBbXG4gICAgICBcIlRDXCJcbiAgICBdXG4gIH0sXG4gIFwiQW1lcmljYS9HcmVuYWRhXCI6IHtcbiAgICBhOiBcIkFtZXJpY2EvUHVlcnRvX1JpY29cIixcbiAgICBjOiBbXG4gICAgICBcIkdEXCJcbiAgICBdLFxuICAgIHI6IDFcbiAgfSxcbiAgXCJBbWVyaWNhL0d1YWRlbG91cGVcIjoge1xuICAgIGE6IFwiQW1lcmljYS9QdWVydG9fUmljb1wiLFxuICAgIGM6IFtcbiAgICAgIFwiR1BcIlxuICAgIF0sXG4gICAgcjogMVxuICB9LFxuICBcIkFtZXJpY2EvR3VhdGVtYWxhXCI6IHtcbiAgICB1OiAtMzYwLFxuICAgIGM6IFtcbiAgICAgIFwiR1RcIlxuICAgIF1cbiAgfSxcbiAgXCJBbWVyaWNhL0d1YXlhcXVpbFwiOiB7XG4gICAgdTogLTMwMCxcbiAgICBjOiBbXG4gICAgICBcIkVDXCJcbiAgICBdXG4gIH0sXG4gIFwiQW1lcmljYS9HdXlhbmFcIjoge1xuICAgIHU6IC0yNDAsXG4gICAgYzogW1xuICAgICAgXCJHWVwiXG4gICAgXVxuICB9LFxuICBcIkFtZXJpY2EvSGFsaWZheFwiOiB7XG4gICAgdTogLTI0MCxcbiAgICBkOiAtMTgwLFxuICAgIGM6IFtcbiAgICAgIFwiQ0FcIlxuICAgIF1cbiAgfSxcbiAgXCJBbWVyaWNhL0hhdmFuYVwiOiB7XG4gICAgdTogLTMwMCxcbiAgICBkOiAtMjQwLFxuICAgIGM6IFtcbiAgICAgIFwiQ1VcIlxuICAgIF1cbiAgfSxcbiAgXCJBbWVyaWNhL0hlcm1vc2lsbG9cIjoge1xuICAgIHU6IC00MjAsXG4gICAgYzogW1xuICAgICAgXCJNWFwiXG4gICAgXVxuICB9LFxuICBcIkFtZXJpY2EvSW5kaWFuYS9JbmRpYW5hcG9saXNcIjoge1xuICAgIHU6IC0zMDAsXG4gICAgZDogLTI0MCxcbiAgICBjOiBbXG4gICAgICBcIlVTXCJcbiAgICBdXG4gIH0sXG4gIFwiQW1lcmljYS9JbmRpYW5hL0tub3hcIjoge1xuICAgIHU6IC0zNjAsXG4gICAgZDogLTMwMCxcbiAgICBjOiBbXG4gICAgICBcIlVTXCJcbiAgICBdXG4gIH0sXG4gIFwiQW1lcmljYS9JbmRpYW5hL01hcmVuZ29cIjoge1xuICAgIHU6IC0zMDAsXG4gICAgZDogLTI0MCxcbiAgICBjOiBbXG4gICAgICBcIlVTXCJcbiAgICBdXG4gIH0sXG4gIFwiQW1lcmljYS9JbmRpYW5hL1BldGVyc2J1cmdcIjoge1xuICAgIHU6IC0zMDAsXG4gICAgZDogLTI0MCxcbiAgICBjOiBbXG4gICAgICBcIlVTXCJcbiAgICBdXG4gIH0sXG4gIFwiQW1lcmljYS9JbmRpYW5hL1RlbGxfQ2l0eVwiOiB7XG4gICAgdTogLTM2MCxcbiAgICBkOiAtMzAwLFxuICAgIGM6IFtcbiAgICAgIFwiVVNcIlxuICAgIF1cbiAgfSxcbiAgXCJBbWVyaWNhL0luZGlhbmEvVmV2YXlcIjoge1xuICAgIHU6IC0zMDAsXG4gICAgZDogLTI0MCxcbiAgICBjOiBbXG4gICAgICBcIlVTXCJcbiAgICBdXG4gIH0sXG4gIFwiQW1lcmljYS9JbmRpYW5hL1ZpbmNlbm5lc1wiOiB7XG4gICAgdTogLTMwMCxcbiAgICBkOiAtMjQwLFxuICAgIGM6IFtcbiAgICAgIFwiVVNcIlxuICAgIF1cbiAgfSxcbiAgXCJBbWVyaWNhL0luZGlhbmEvV2luYW1hY1wiOiB7XG4gICAgdTogLTMwMCxcbiAgICBkOiAtMjQwLFxuICAgIGM6IFtcbiAgICAgIFwiVVNcIlxuICAgIF1cbiAgfSxcbiAgXCJBbWVyaWNhL0luZGlhbmFwb2xpc1wiOiB7XG4gICAgYTogXCJBbWVyaWNhL0luZGlhbmEvSW5kaWFuYXBvbGlzXCIsXG4gICAgcjogMVxuICB9LFxuICBcIkFtZXJpY2EvSW51dmlrXCI6IHtcbiAgICB1OiAtNDIwLFxuICAgIGQ6IC0zNjAsXG4gICAgYzogW1xuICAgICAgXCJDQVwiXG4gICAgXVxuICB9LFxuICBcIkFtZXJpY2EvSXFhbHVpdFwiOiB7XG4gICAgdTogLTMwMCxcbiAgICBkOiAtMjQwLFxuICAgIGM6IFtcbiAgICAgIFwiQ0FcIlxuICAgIF1cbiAgfSxcbiAgXCJBbWVyaWNhL0phbWFpY2FcIjoge1xuICAgIHU6IC0zMDAsXG4gICAgYzogW1xuICAgICAgXCJKTVwiXG4gICAgXVxuICB9LFxuICBcIkFtZXJpY2EvSnVqdXlcIjoge1xuICAgIGE6IFwiQW1lcmljYS9BcmdlbnRpbmEvSnVqdXlcIixcbiAgICByOiAxXG4gIH0sXG4gIFwiQW1lcmljYS9KdW5lYXVcIjoge1xuICAgIHU6IC01NDAsXG4gICAgZDogLTQ4MCxcbiAgICBjOiBbXG4gICAgICBcIlVTXCJcbiAgICBdXG4gIH0sXG4gIFwiQW1lcmljYS9LZW50dWNreS9Mb3Vpc3ZpbGxlXCI6IHtcbiAgICB1OiAtMzAwLFxuICAgIGQ6IC0yNDAsXG4gICAgYzogW1xuICAgICAgXCJVU1wiXG4gICAgXVxuICB9LFxuICBcIkFtZXJpY2EvS2VudHVja3kvTW9udGljZWxsb1wiOiB7XG4gICAgdTogLTMwMCxcbiAgICBkOiAtMjQwLFxuICAgIGM6IFtcbiAgICAgIFwiVVNcIlxuICAgIF1cbiAgfSxcbiAgXCJBbWVyaWNhL0tub3hfSU5cIjoge1xuICAgIGE6IFwiQW1lcmljYS9JbmRpYW5hL0tub3hcIixcbiAgICByOiAxXG4gIH0sXG4gIFwiQW1lcmljYS9LcmFsZW5kaWprXCI6IHtcbiAgICBhOiBcIkFtZXJpY2EvUHVlcnRvX1JpY29cIixcbiAgICBjOiBbXG4gICAgICBcIkJRXCJcbiAgICBdLFxuICAgIHI6IDFcbiAgfSxcbiAgXCJBbWVyaWNhL0xhX1BhelwiOiB7XG4gICAgdTogLTI0MCxcbiAgICBjOiBbXG4gICAgICBcIkJPXCJcbiAgICBdXG4gIH0sXG4gIFwiQW1lcmljYS9MaW1hXCI6IHtcbiAgICB1OiAtMzAwLFxuICAgIGM6IFtcbiAgICAgIFwiUEVcIlxuICAgIF1cbiAgfSxcbiAgXCJBbWVyaWNhL0xvc19BbmdlbGVzXCI6IHtcbiAgICB1OiAtNDgwLFxuICAgIGQ6IC00MjAsXG4gICAgYzogW1xuICAgICAgXCJVU1wiXG4gICAgXVxuICB9LFxuICBcIkFtZXJpY2EvTG91aXN2aWxsZVwiOiB7XG4gICAgYTogXCJBbWVyaWNhL0tlbnR1Y2t5L0xvdWlzdmlsbGVcIixcbiAgICByOiAxXG4gIH0sXG4gIFwiQW1lcmljYS9Mb3dlcl9QcmluY2VzXCI6IHtcbiAgICBhOiBcIkFtZXJpY2EvUHVlcnRvX1JpY29cIixcbiAgICBjOiBbXG4gICAgICBcIlNYXCJcbiAgICBdLFxuICAgIHI6IDFcbiAgfSxcbiAgXCJBbWVyaWNhL01hY2Vpb1wiOiB7XG4gICAgdTogLTE4MCxcbiAgICBjOiBbXG4gICAgICBcIkJSXCJcbiAgICBdXG4gIH0sXG4gIFwiQW1lcmljYS9NYW5hZ3VhXCI6IHtcbiAgICB1OiAtMzYwLFxuICAgIGM6IFtcbiAgICAgIFwiTklcIlxuICAgIF1cbiAgfSxcbiAgXCJBbWVyaWNhL01hbmF1c1wiOiB7XG4gICAgdTogLTI0MCxcbiAgICBjOiBbXG4gICAgICBcIkJSXCJcbiAgICBdXG4gIH0sXG4gIFwiQW1lcmljYS9NYXJpZ290XCI6IHtcbiAgICBhOiBcIkFtZXJpY2EvUHVlcnRvX1JpY29cIixcbiAgICBjOiBbXG4gICAgICBcIk1GXCJcbiAgICBdLFxuICAgIHI6IDFcbiAgfSxcbiAgXCJBbWVyaWNhL01hcnRpbmlxdWVcIjoge1xuICAgIHU6IC0yNDAsXG4gICAgYzogW1xuICAgICAgXCJNUVwiXG4gICAgXVxuICB9LFxuICBcIkFtZXJpY2EvTWF0YW1vcm9zXCI6IHtcbiAgICB1OiAtMzYwLFxuICAgIGQ6IC0zMDAsXG4gICAgYzogW1xuICAgICAgXCJNWFwiXG4gICAgXVxuICB9LFxuICBcIkFtZXJpY2EvTWF6YXRsYW5cIjoge1xuICAgIHU6IC00MjAsXG4gICAgYzogW1xuICAgICAgXCJNWFwiXG4gICAgXVxuICB9LFxuICBcIkFtZXJpY2EvTWVuZG96YVwiOiB7XG4gICAgYTogXCJBbWVyaWNhL0FyZ2VudGluYS9NZW5kb3phXCIsXG4gICAgcjogMVxuICB9LFxuICBcIkFtZXJpY2EvTWVub21pbmVlXCI6IHtcbiAgICB1OiAtMzYwLFxuICAgIGQ6IC0zMDAsXG4gICAgYzogW1xuICAgICAgXCJVU1wiXG4gICAgXVxuICB9LFxuICBcIkFtZXJpY2EvTWVyaWRhXCI6IHtcbiAgICB1OiAtMzYwLFxuICAgIGM6IFtcbiAgICAgIFwiTVhcIlxuICAgIF1cbiAgfSxcbiAgXCJBbWVyaWNhL01ldGxha2F0bGFcIjoge1xuICAgIHU6IC01NDAsXG4gICAgZDogLTQ4MCxcbiAgICBjOiBbXG4gICAgICBcIlVTXCJcbiAgICBdXG4gIH0sXG4gIFwiQW1lcmljYS9NZXhpY29fQ2l0eVwiOiB7XG4gICAgdTogLTM2MCxcbiAgICBjOiBbXG4gICAgICBcIk1YXCJcbiAgICBdXG4gIH0sXG4gIFwiQW1lcmljYS9NaXF1ZWxvblwiOiB7XG4gICAgdTogLTE4MCxcbiAgICBkOiAtMTIwLFxuICAgIGM6IFtcbiAgICAgIFwiUE1cIlxuICAgIF1cbiAgfSxcbiAgXCJBbWVyaWNhL01vbmN0b25cIjoge1xuICAgIHU6IC0yNDAsXG4gICAgZDogLTE4MCxcbiAgICBjOiBbXG4gICAgICBcIkNBXCJcbiAgICBdXG4gIH0sXG4gIFwiQW1lcmljYS9Nb250ZXJyZXlcIjoge1xuICAgIHU6IC0zNjAsXG4gICAgYzogW1xuICAgICAgXCJNWFwiXG4gICAgXVxuICB9LFxuICBcIkFtZXJpY2EvTW9udGV2aWRlb1wiOiB7XG4gICAgdTogLTE4MCxcbiAgICBjOiBbXG4gICAgICBcIlVZXCJcbiAgICBdXG4gIH0sXG4gIFwiQW1lcmljYS9Nb250cmVhbFwiOiB7XG4gICAgYTogXCJBbWVyaWNhL1Rvcm9udG9cIixcbiAgICBjOiBbXG4gICAgICBcIkNBXCJcbiAgICBdLFxuICAgIHI6IDFcbiAgfSxcbiAgXCJBbWVyaWNhL01vbnRzZXJyYXRcIjoge1xuICAgIGE6IFwiQW1lcmljYS9QdWVydG9fUmljb1wiLFxuICAgIGM6IFtcbiAgICAgIFwiTVNcIlxuICAgIF0sXG4gICAgcjogMVxuICB9LFxuICBcIkFtZXJpY2EvTmFzc2F1XCI6IHtcbiAgICBhOiBcIkFtZXJpY2EvVG9yb250b1wiLFxuICAgIGM6IFtcbiAgICAgIFwiQlNcIlxuICAgIF0sXG4gICAgcjogMVxuICB9LFxuICBcIkFtZXJpY2EvTmV3X1lvcmtcIjoge1xuICAgIHU6IC0zMDAsXG4gICAgZDogLTI0MCxcbiAgICBjOiBbXG4gICAgICBcIlVTXCJcbiAgICBdXG4gIH0sXG4gIFwiQW1lcmljYS9OaXBpZ29uXCI6IHtcbiAgICBhOiBcIkFtZXJpY2EvVG9yb250b1wiLFxuICAgIGM6IFtcbiAgICAgIFwiQ0FcIlxuICAgIF0sXG4gICAgcjogMVxuICB9LFxuICBcIkFtZXJpY2EvTm9tZVwiOiB7XG4gICAgdTogLTU0MCxcbiAgICBkOiAtNDgwLFxuICAgIGM6IFtcbiAgICAgIFwiVVNcIlxuICAgIF1cbiAgfSxcbiAgXCJBbWVyaWNhL05vcm9uaGFcIjoge1xuICAgIHU6IC0xMjAsXG4gICAgYzogW1xuICAgICAgXCJCUlwiXG4gICAgXVxuICB9LFxuICBcIkFtZXJpY2EvTm9ydGhfRGFrb3RhL0JldWxhaFwiOiB7XG4gICAgdTogLTM2MCxcbiAgICBkOiAtMzAwLFxuICAgIGM6IFtcbiAgICAgIFwiVVNcIlxuICAgIF1cbiAgfSxcbiAgXCJBbWVyaWNhL05vcnRoX0Rha290YS9DZW50ZXJcIjoge1xuICAgIHU6IC0zNjAsXG4gICAgZDogLTMwMCxcbiAgICBjOiBbXG4gICAgICBcIlVTXCJcbiAgICBdXG4gIH0sXG4gIFwiQW1lcmljYS9Ob3J0aF9EYWtvdGEvTmV3X1NhbGVtXCI6IHtcbiAgICB1OiAtMzYwLFxuICAgIGQ6IC0zMDAsXG4gICAgYzogW1xuICAgICAgXCJVU1wiXG4gICAgXVxuICB9LFxuICBcIkFtZXJpY2EvTnV1a1wiOiB7XG4gICAgdTogLTEyMCxcbiAgICBkOiAtNjAsXG4gICAgYzogW1xuICAgICAgXCJHTFwiXG4gICAgXVxuICB9LFxuICBcIkFtZXJpY2EvT2ppbmFnYVwiOiB7XG4gICAgdTogLTM2MCxcbiAgICBkOiAtMzAwLFxuICAgIGM6IFtcbiAgICAgIFwiTVhcIlxuICAgIF1cbiAgfSxcbiAgXCJBbWVyaWNhL1BhbmFtYVwiOiB7XG4gICAgdTogLTMwMCxcbiAgICBjOiBbXG4gICAgICBcIlBBXCIsXG4gICAgICBcIkNBXCIsXG4gICAgICBcIktZXCJcbiAgICBdXG4gIH0sXG4gIFwiQW1lcmljYS9QYW5nbmlydHVuZ1wiOiB7XG4gICAgYTogXCJBbWVyaWNhL0lxYWx1aXRcIixcbiAgICByOiAxXG4gIH0sXG4gIFwiQW1lcmljYS9QYXJhbWFyaWJvXCI6IHtcbiAgICB1OiAtMTgwLFxuICAgIGM6IFtcbiAgICAgIFwiU1JcIlxuICAgIF1cbiAgfSxcbiAgXCJBbWVyaWNhL1Bob2VuaXhcIjoge1xuICAgIHU6IC00MjAsXG4gICAgYzogW1xuICAgICAgXCJVU1wiLFxuICAgICAgXCJDQVwiXG4gICAgXVxuICB9LFxuICBcIkFtZXJpY2EvUG9ydC1hdS1QcmluY2VcIjoge1xuICAgIHU6IC0zMDAsXG4gICAgZDogLTI0MCxcbiAgICBjOiBbXG4gICAgICBcIkhUXCJcbiAgICBdXG4gIH0sXG4gIFwiQW1lcmljYS9Qb3J0X29mX1NwYWluXCI6IHtcbiAgICBhOiBcIkFtZXJpY2EvUHVlcnRvX1JpY29cIixcbiAgICBjOiBbXG4gICAgICBcIlRUXCJcbiAgICBdLFxuICAgIHI6IDFcbiAgfSxcbiAgXCJBbWVyaWNhL1BvcnRvX0FjcmVcIjoge1xuICAgIGE6IFwiQW1lcmljYS9SaW9fQnJhbmNvXCIsXG4gICAgcjogMVxuICB9LFxuICBcIkFtZXJpY2EvUG9ydG9fVmVsaG9cIjoge1xuICAgIHU6IC0yNDAsXG4gICAgYzogW1xuICAgICAgXCJCUlwiXG4gICAgXVxuICB9LFxuICBcIkFtZXJpY2EvUHVlcnRvX1JpY29cIjoge1xuICAgIHU6IC0yNDAsXG4gICAgYzogW1xuICAgICAgXCJQUlwiLFxuICAgICAgXCJBR1wiLFxuICAgICAgXCJDQVwiLFxuICAgICAgXCJBSVwiLFxuICAgICAgXCJBV1wiLFxuICAgICAgXCJCTFwiLFxuICAgICAgXCJCUVwiLFxuICAgICAgXCJDV1wiLFxuICAgICAgXCJETVwiLFxuICAgICAgXCJHRFwiLFxuICAgICAgXCJHUFwiLFxuICAgICAgXCJLTlwiLFxuICAgICAgXCJMQ1wiLFxuICAgICAgXCJNRlwiLFxuICAgICAgXCJNU1wiLFxuICAgICAgXCJTWFwiLFxuICAgICAgXCJUVFwiLFxuICAgICAgXCJWQ1wiLFxuICAgICAgXCJWR1wiLFxuICAgICAgXCJWSVwiXG4gICAgXVxuICB9LFxuICBcIkFtZXJpY2EvUHVudGFfQXJlbmFzXCI6IHtcbiAgICB1OiAtMTgwLFxuICAgIGM6IFtcbiAgICAgIFwiQ0xcIlxuICAgIF1cbiAgfSxcbiAgXCJBbWVyaWNhL1JhaW55X1JpdmVyXCI6IHtcbiAgICBhOiBcIkFtZXJpY2EvV2lubmlwZWdcIixcbiAgICByOiAxXG4gIH0sXG4gIFwiQW1lcmljYS9SYW5raW5fSW5sZXRcIjoge1xuICAgIHU6IC0zNjAsXG4gICAgZDogLTMwMCxcbiAgICBjOiBbXG4gICAgICBcIkNBXCJcbiAgICBdXG4gIH0sXG4gIFwiQW1lcmljYS9SZWNpZmVcIjoge1xuICAgIHU6IC0xODAsXG4gICAgYzogW1xuICAgICAgXCJCUlwiXG4gICAgXVxuICB9LFxuICBcIkFtZXJpY2EvUmVnaW5hXCI6IHtcbiAgICB1OiAtMzYwLFxuICAgIGM6IFtcbiAgICAgIFwiQ0FcIlxuICAgIF1cbiAgfSxcbiAgXCJBbWVyaWNhL1Jlc29sdXRlXCI6IHtcbiAgICB1OiAtMzYwLFxuICAgIGQ6IC0zMDAsXG4gICAgYzogW1xuICAgICAgXCJDQVwiXG4gICAgXVxuICB9LFxuICBcIkFtZXJpY2EvUmlvX0JyYW5jb1wiOiB7XG4gICAgdTogLTMwMCxcbiAgICBjOiBbXG4gICAgICBcIkJSXCJcbiAgICBdXG4gIH0sXG4gIFwiQW1lcmljYS9Sb3NhcmlvXCI6IHtcbiAgICBhOiBcIkFtZXJpY2EvQXJnZW50aW5hL0NvcmRvYmFcIixcbiAgICByOiAxXG4gIH0sXG4gIFwiQW1lcmljYS9TYW50YV9Jc2FiZWxcIjoge1xuICAgIGE6IFwiQW1lcmljYS9UaWp1YW5hXCIsXG4gICAgcjogMVxuICB9LFxuICBcIkFtZXJpY2EvU2FudGFyZW1cIjoge1xuICAgIHU6IC0xODAsXG4gICAgYzogW1xuICAgICAgXCJCUlwiXG4gICAgXVxuICB9LFxuICBcIkFtZXJpY2EvU2FudGlhZ29cIjoge1xuICAgIHU6IC0yNDAsXG4gICAgZDogLTE4MCxcbiAgICBjOiBbXG4gICAgICBcIkNMXCJcbiAgICBdXG4gIH0sXG4gIFwiQW1lcmljYS9TYW50b19Eb21pbmdvXCI6IHtcbiAgICB1OiAtMjQwLFxuICAgIGM6IFtcbiAgICAgIFwiRE9cIlxuICAgIF1cbiAgfSxcbiAgXCJBbWVyaWNhL1Nhb19QYXVsb1wiOiB7XG4gICAgdTogLTE4MCxcbiAgICBjOiBbXG4gICAgICBcIkJSXCJcbiAgICBdXG4gIH0sXG4gIFwiQW1lcmljYS9TY29yZXNieXN1bmRcIjoge1xuICAgIHU6IC0xMjAsXG4gICAgZDogLTYwLFxuICAgIGM6IFtcbiAgICAgIFwiR0xcIlxuICAgIF1cbiAgfSxcbiAgXCJBbWVyaWNhL1NoaXByb2NrXCI6IHtcbiAgICBhOiBcIkFtZXJpY2EvRGVudmVyXCIsXG4gICAgcjogMVxuICB9LFxuICBcIkFtZXJpY2EvU2l0a2FcIjoge1xuICAgIHU6IC01NDAsXG4gICAgZDogLTQ4MCxcbiAgICBjOiBbXG4gICAgICBcIlVTXCJcbiAgICBdXG4gIH0sXG4gIFwiQW1lcmljYS9TdF9CYXJ0aGVsZW15XCI6IHtcbiAgICBhOiBcIkFtZXJpY2EvUHVlcnRvX1JpY29cIixcbiAgICBjOiBbXG4gICAgICBcIkJMXCJcbiAgICBdLFxuICAgIHI6IDFcbiAgfSxcbiAgXCJBbWVyaWNhL1N0X0pvaG5zXCI6IHtcbiAgICB1OiAtMjEwLFxuICAgIGQ6IC0xNTAsXG4gICAgYzogW1xuICAgICAgXCJDQVwiXG4gICAgXVxuICB9LFxuICBcIkFtZXJpY2EvU3RfS2l0dHNcIjoge1xuICAgIGE6IFwiQW1lcmljYS9QdWVydG9fUmljb1wiLFxuICAgIGM6IFtcbiAgICAgIFwiS05cIlxuICAgIF0sXG4gICAgcjogMVxuICB9LFxuICBcIkFtZXJpY2EvU3RfTHVjaWFcIjoge1xuICAgIGE6IFwiQW1lcmljYS9QdWVydG9fUmljb1wiLFxuICAgIGM6IFtcbiAgICAgIFwiTENcIlxuICAgIF0sXG4gICAgcjogMVxuICB9LFxuICBcIkFtZXJpY2EvU3RfVGhvbWFzXCI6IHtcbiAgICBhOiBcIkFtZXJpY2EvUHVlcnRvX1JpY29cIixcbiAgICBjOiBbXG4gICAgICBcIlZJXCJcbiAgICBdLFxuICAgIHI6IDFcbiAgfSxcbiAgXCJBbWVyaWNhL1N0X1ZpbmNlbnRcIjoge1xuICAgIGE6IFwiQW1lcmljYS9QdWVydG9fUmljb1wiLFxuICAgIGM6IFtcbiAgICAgIFwiVkNcIlxuICAgIF0sXG4gICAgcjogMVxuICB9LFxuICBcIkFtZXJpY2EvU3dpZnRfQ3VycmVudFwiOiB7XG4gICAgdTogLTM2MCxcbiAgICBjOiBbXG4gICAgICBcIkNBXCJcbiAgICBdXG4gIH0sXG4gIFwiQW1lcmljYS9UZWd1Y2lnYWxwYVwiOiB7XG4gICAgdTogLTM2MCxcbiAgICBjOiBbXG4gICAgICBcIkhOXCJcbiAgICBdXG4gIH0sXG4gIFwiQW1lcmljYS9UaHVsZVwiOiB7XG4gICAgdTogLTI0MCxcbiAgICBkOiAtMTgwLFxuICAgIGM6IFtcbiAgICAgIFwiR0xcIlxuICAgIF1cbiAgfSxcbiAgXCJBbWVyaWNhL1RodW5kZXJfQmF5XCI6IHtcbiAgICBhOiBcIkFtZXJpY2EvVG9yb250b1wiLFxuICAgIGM6IFtcbiAgICAgIFwiQ0FcIlxuICAgIF0sXG4gICAgcjogMVxuICB9LFxuICBcIkFtZXJpY2EvVGlqdWFuYVwiOiB7XG4gICAgdTogLTQ4MCxcbiAgICBkOiAtNDIwLFxuICAgIGM6IFtcbiAgICAgIFwiTVhcIlxuICAgIF1cbiAgfSxcbiAgXCJBbWVyaWNhL1Rvcm9udG9cIjoge1xuICAgIHU6IC0zMDAsXG4gICAgZDogLTI0MCxcbiAgICBjOiBbXG4gICAgICBcIkNBXCIsXG4gICAgICBcIkJTXCJcbiAgICBdXG4gIH0sXG4gIFwiQW1lcmljYS9Ub3J0b2xhXCI6IHtcbiAgICBhOiBcIkFtZXJpY2EvUHVlcnRvX1JpY29cIixcbiAgICBjOiBbXG4gICAgICBcIlZHXCJcbiAgICBdLFxuICAgIHI6IDFcbiAgfSxcbiAgXCJBbWVyaWNhL1ZhbmNvdXZlclwiOiB7XG4gICAgdTogLTQ4MCxcbiAgICBkOiAtNDIwLFxuICAgIGM6IFtcbiAgICAgIFwiQ0FcIlxuICAgIF1cbiAgfSxcbiAgXCJBbWVyaWNhL1ZpcmdpblwiOiB7XG4gICAgYTogXCJBbWVyaWNhL1B1ZXJ0b19SaWNvXCIsXG4gICAgYzogW1xuICAgICAgXCJWSVwiXG4gICAgXSxcbiAgICByOiAxXG4gIH0sXG4gIFwiQW1lcmljYS9XaGl0ZWhvcnNlXCI6IHtcbiAgICB1OiAtNDIwLFxuICAgIGM6IFtcbiAgICAgIFwiQ0FcIlxuICAgIF1cbiAgfSxcbiAgXCJBbWVyaWNhL1dpbm5pcGVnXCI6IHtcbiAgICB1OiAtMzYwLFxuICAgIGQ6IC0zMDAsXG4gICAgYzogW1xuICAgICAgXCJDQVwiXG4gICAgXVxuICB9LFxuICBcIkFtZXJpY2EvWWFrdXRhdFwiOiB7XG4gICAgdTogLTU0MCxcbiAgICBkOiAtNDgwLFxuICAgIGM6IFtcbiAgICAgIFwiVVNcIlxuICAgIF1cbiAgfSxcbiAgXCJBbWVyaWNhL1llbGxvd2tuaWZlXCI6IHtcbiAgICBhOiBcIkFtZXJpY2EvRWRtb250b25cIixcbiAgICByOiAxXG4gIH0sXG4gIFwiQW50YXJjdGljYS9DYXNleVwiOiB7XG4gICAgdTogNDgwLFxuICAgIGM6IFtcbiAgICAgIFwiQVFcIlxuICAgIF1cbiAgfSxcbiAgXCJBbnRhcmN0aWNhL0RhdmlzXCI6IHtcbiAgICB1OiA0MjAsXG4gICAgYzogW1xuICAgICAgXCJBUVwiXG4gICAgXVxuICB9LFxuICBcIkFudGFyY3RpY2EvRHVtb250RFVydmlsbGVcIjoge1xuICAgIGE6IFwiUGFjaWZpYy9Qb3J0X01vcmVzYnlcIixcbiAgICBjOiBbXG4gICAgICBcIkFRXCJcbiAgICBdLFxuICAgIHI6IDFcbiAgfSxcbiAgXCJBbnRhcmN0aWNhL01hY3F1YXJpZVwiOiB7XG4gICAgdTogNjAwLFxuICAgIGQ6IDY2MCxcbiAgICBjOiBbXG4gICAgICBcIkFVXCJcbiAgICBdXG4gIH0sXG4gIFwiQW50YXJjdGljYS9NYXdzb25cIjoge1xuICAgIHU6IDMwMCxcbiAgICBjOiBbXG4gICAgICBcIkFRXCJcbiAgICBdXG4gIH0sXG4gIFwiQW50YXJjdGljYS9NY011cmRvXCI6IHtcbiAgICBhOiBcIlBhY2lmaWMvQXVja2xhbmRcIixcbiAgICBjOiBbXG4gICAgICBcIkFRXCJcbiAgICBdLFxuICAgIHI6IDFcbiAgfSxcbiAgXCJBbnRhcmN0aWNhL1BhbG1lclwiOiB7XG4gICAgdTogLTE4MCxcbiAgICBjOiBbXG4gICAgICBcIkFRXCJcbiAgICBdXG4gIH0sXG4gIFwiQW50YXJjdGljYS9Sb3RoZXJhXCI6IHtcbiAgICB1OiAtMTgwLFxuICAgIGM6IFtcbiAgICAgIFwiQVFcIlxuICAgIF1cbiAgfSxcbiAgXCJBbnRhcmN0aWNhL1NvdXRoX1BvbGVcIjoge1xuICAgIGE6IFwiUGFjaWZpYy9BdWNrbGFuZFwiLFxuICAgIGM6IFtcbiAgICAgIFwiQVFcIlxuICAgIF0sXG4gICAgcjogMVxuICB9LFxuICBcIkFudGFyY3RpY2EvU3lvd2FcIjoge1xuICAgIGE6IFwiQXNpYS9SaXlhZGhcIixcbiAgICBjOiBbXG4gICAgICBcIkFRXCJcbiAgICBdLFxuICAgIHI6IDFcbiAgfSxcbiAgXCJBbnRhcmN0aWNhL1Ryb2xsXCI6IHtcbiAgICB1OiAwLFxuICAgIGQ6IDEyMCxcbiAgICBjOiBbXG4gICAgICBcIkFRXCJcbiAgICBdXG4gIH0sXG4gIFwiQW50YXJjdGljYS9Wb3N0b2tcIjoge1xuICAgIHU6IDMwMCxcbiAgICBjOiBbXG4gICAgICBcIkFRXCJcbiAgICBdXG4gIH0sXG4gIFwiQXJjdGljL0xvbmd5ZWFyYnllblwiOiB7XG4gICAgYTogXCJFdXJvcGUvQmVybGluXCIsXG4gICAgYzogW1xuICAgICAgXCJTSlwiXG4gICAgXSxcbiAgICByOiAxXG4gIH0sXG4gIFwiQXNpYS9BZGVuXCI6IHtcbiAgICBhOiBcIkFzaWEvUml5YWRoXCIsXG4gICAgYzogW1xuICAgICAgXCJZRVwiXG4gICAgXSxcbiAgICByOiAxXG4gIH0sXG4gIFwiQXNpYS9BbG1hdHlcIjoge1xuICAgIHU6IDMwMCxcbiAgICBjOiBbXG4gICAgICBcIktaXCJcbiAgICBdXG4gIH0sXG4gIFwiQXNpYS9BbW1hblwiOiB7XG4gICAgdTogMTgwLFxuICAgIGM6IFtcbiAgICAgIFwiSk9cIlxuICAgIF1cbiAgfSxcbiAgXCJBc2lhL0FuYWR5clwiOiB7XG4gICAgdTogNzIwLFxuICAgIGM6IFtcbiAgICAgIFwiUlVcIlxuICAgIF1cbiAgfSxcbiAgXCJBc2lhL0FxdGF1XCI6IHtcbiAgICB1OiAzMDAsXG4gICAgYzogW1xuICAgICAgXCJLWlwiXG4gICAgXVxuICB9LFxuICBcIkFzaWEvQXF0b2JlXCI6IHtcbiAgICB1OiAzMDAsXG4gICAgYzogW1xuICAgICAgXCJLWlwiXG4gICAgXVxuICB9LFxuICBcIkFzaWEvQXNoZ2FiYXRcIjoge1xuICAgIHU6IDMwMCxcbiAgICBjOiBbXG4gICAgICBcIlRNXCJcbiAgICBdXG4gIH0sXG4gIFwiQXNpYS9Bc2hraGFiYWRcIjoge1xuICAgIGE6IFwiQXNpYS9Bc2hnYWJhdFwiLFxuICAgIHI6IDFcbiAgfSxcbiAgXCJBc2lhL0F0eXJhdVwiOiB7XG4gICAgdTogMzAwLFxuICAgIGM6IFtcbiAgICAgIFwiS1pcIlxuICAgIF1cbiAgfSxcbiAgXCJBc2lhL0JhZ2hkYWRcIjoge1xuICAgIHU6IDE4MCxcbiAgICBjOiBbXG4gICAgICBcIklRXCJcbiAgICBdXG4gIH0sXG4gIFwiQXNpYS9CYWhyYWluXCI6IHtcbiAgICBhOiBcIkFzaWEvUWF0YXJcIixcbiAgICBjOiBbXG4gICAgICBcIkJIXCJcbiAgICBdLFxuICAgIHI6IDFcbiAgfSxcbiAgXCJBc2lhL0Jha3VcIjoge1xuICAgIHU6IDI0MCxcbiAgICBjOiBbXG4gICAgICBcIkFaXCJcbiAgICBdXG4gIH0sXG4gIFwiQXNpYS9CYW5na29rXCI6IHtcbiAgICB1OiA0MjAsXG4gICAgYzogW1xuICAgICAgXCJUSFwiLFxuICAgICAgXCJDWFwiLFxuICAgICAgXCJLSFwiLFxuICAgICAgXCJMQVwiLFxuICAgICAgXCJWTlwiXG4gICAgXVxuICB9LFxuICBcIkFzaWEvQmFybmF1bFwiOiB7XG4gICAgdTogNDIwLFxuICAgIGM6IFtcbiAgICAgIFwiUlVcIlxuICAgIF1cbiAgfSxcbiAgXCJBc2lhL0JlaXJ1dFwiOiB7XG4gICAgdTogMTIwLFxuICAgIGQ6IDE4MCxcbiAgICBjOiBbXG4gICAgICBcIkxCXCJcbiAgICBdXG4gIH0sXG4gIFwiQXNpYS9CaXNoa2VrXCI6IHtcbiAgICB1OiAzNjAsXG4gICAgYzogW1xuICAgICAgXCJLR1wiXG4gICAgXVxuICB9LFxuICBcIkFzaWEvQnJ1bmVpXCI6IHtcbiAgICBhOiBcIkFzaWEvS3VjaGluZ1wiLFxuICAgIGM6IFtcbiAgICAgIFwiQk5cIlxuICAgIF0sXG4gICAgcjogMVxuICB9LFxuICBcIkFzaWEvQ2FsY3V0dGFcIjoge1xuICAgIGE6IFwiQXNpYS9Lb2xrYXRhXCIsXG4gICAgcjogMVxuICB9LFxuICBcIkFzaWEvQ2hpdGFcIjoge1xuICAgIHU6IDU0MCxcbiAgICBjOiBbXG4gICAgICBcIlJVXCJcbiAgICBdXG4gIH0sXG4gIFwiQXNpYS9DaG9pYmFsc2FuXCI6IHtcbiAgICBhOiBcIkFzaWEvVWxhYW5iYWF0YXJcIixcbiAgICByOiAxXG4gIH0sXG4gIFwiQXNpYS9DaG9uZ3FpbmdcIjoge1xuICAgIGE6IFwiQXNpYS9TaGFuZ2hhaVwiLFxuICAgIHI6IDFcbiAgfSxcbiAgXCJBc2lhL0NodW5na2luZ1wiOiB7XG4gICAgYTogXCJBc2lhL1NoYW5naGFpXCIsXG4gICAgcjogMVxuICB9LFxuICBcIkFzaWEvQ29sb21ib1wiOiB7XG4gICAgdTogMzMwLFxuICAgIGM6IFtcbiAgICAgIFwiTEtcIlxuICAgIF1cbiAgfSxcbiAgXCJBc2lhL0RhY2NhXCI6IHtcbiAgICBhOiBcIkFzaWEvRGhha2FcIixcbiAgICByOiAxXG4gIH0sXG4gIFwiQXNpYS9EYW1hc2N1c1wiOiB7XG4gICAgdTogMTgwLFxuICAgIGM6IFtcbiAgICAgIFwiU1lcIlxuICAgIF1cbiAgfSxcbiAgXCJBc2lhL0RoYWthXCI6IHtcbiAgICB1OiAzNjAsXG4gICAgYzogW1xuICAgICAgXCJCRFwiXG4gICAgXVxuICB9LFxuICBcIkFzaWEvRGlsaVwiOiB7XG4gICAgdTogNTQwLFxuICAgIGM6IFtcbiAgICAgIFwiVExcIlxuICAgIF1cbiAgfSxcbiAgXCJBc2lhL0R1YmFpXCI6IHtcbiAgICB1OiAyNDAsXG4gICAgYzogW1xuICAgICAgXCJBRVwiLFxuICAgICAgXCJPTVwiLFxuICAgICAgXCJSRVwiLFxuICAgICAgXCJTQ1wiLFxuICAgICAgXCJURlwiXG4gICAgXVxuICB9LFxuICBcIkFzaWEvRHVzaGFuYmVcIjoge1xuICAgIHU6IDMwMCxcbiAgICBjOiBbXG4gICAgICBcIlRKXCJcbiAgICBdXG4gIH0sXG4gIFwiQXNpYS9GYW1hZ3VzdGFcIjoge1xuICAgIHU6IDEyMCxcbiAgICBkOiAxODAsXG4gICAgYzogW1xuICAgICAgXCJDWVwiXG4gICAgXVxuICB9LFxuICBcIkFzaWEvR2F6YVwiOiB7XG4gICAgdTogMTIwLFxuICAgIGQ6IDE4MCxcbiAgICBjOiBbXG4gICAgICBcIlBTXCJcbiAgICBdXG4gIH0sXG4gIFwiQXNpYS9IYXJiaW5cIjoge1xuICAgIGE6IFwiQXNpYS9TaGFuZ2hhaVwiLFxuICAgIHI6IDFcbiAgfSxcbiAgXCJBc2lhL0hlYnJvblwiOiB7XG4gICAgdTogMTIwLFxuICAgIGQ6IDE4MCxcbiAgICBjOiBbXG4gICAgICBcIlBTXCJcbiAgICBdXG4gIH0sXG4gIFwiQXNpYS9Ib19DaGlfTWluaFwiOiB7XG4gICAgdTogNDIwLFxuICAgIGM6IFtcbiAgICAgIFwiVk5cIlxuICAgIF1cbiAgfSxcbiAgXCJBc2lhL0hvbmdfS29uZ1wiOiB7XG4gICAgdTogNDgwLFxuICAgIGM6IFtcbiAgICAgIFwiSEtcIlxuICAgIF1cbiAgfSxcbiAgXCJBc2lhL0hvdmRcIjoge1xuICAgIHU6IDQyMCxcbiAgICBjOiBbXG4gICAgICBcIk1OXCJcbiAgICBdXG4gIH0sXG4gIFwiQXNpYS9Jcmt1dHNrXCI6IHtcbiAgICB1OiA0ODAsXG4gICAgYzogW1xuICAgICAgXCJSVVwiXG4gICAgXVxuICB9LFxuICBcIkFzaWEvSXN0YW5idWxcIjoge1xuICAgIGE6IFwiRXVyb3BlL0lzdGFuYnVsXCIsXG4gICAgcjogMVxuICB9LFxuICBcIkFzaWEvSmFrYXJ0YVwiOiB7XG4gICAgdTogNDIwLFxuICAgIGM6IFtcbiAgICAgIFwiSURcIlxuICAgIF1cbiAgfSxcbiAgXCJBc2lhL0pheWFwdXJhXCI6IHtcbiAgICB1OiA1NDAsXG4gICAgYzogW1xuICAgICAgXCJJRFwiXG4gICAgXVxuICB9LFxuICBcIkFzaWEvSmVydXNhbGVtXCI6IHtcbiAgICB1OiAxMjAsXG4gICAgZDogMTgwLFxuICAgIGM6IFtcbiAgICAgIFwiSUxcIlxuICAgIF1cbiAgfSxcbiAgXCJBc2lhL0thYnVsXCI6IHtcbiAgICB1OiAyNzAsXG4gICAgYzogW1xuICAgICAgXCJBRlwiXG4gICAgXVxuICB9LFxuICBcIkFzaWEvS2FtY2hhdGthXCI6IHtcbiAgICB1OiA3MjAsXG4gICAgYzogW1xuICAgICAgXCJSVVwiXG4gICAgXVxuICB9LFxuICBcIkFzaWEvS2FyYWNoaVwiOiB7XG4gICAgdTogMzAwLFxuICAgIGM6IFtcbiAgICAgIFwiUEtcIlxuICAgIF1cbiAgfSxcbiAgXCJBc2lhL0thc2hnYXJcIjoge1xuICAgIGE6IFwiQXNpYS9VcnVtcWlcIixcbiAgICByOiAxXG4gIH0sXG4gIFwiQXNpYS9LYXRobWFuZHVcIjoge1xuICAgIHU6IDM0NSxcbiAgICBjOiBbXG4gICAgICBcIk5QXCJcbiAgICBdXG4gIH0sXG4gIFwiQXNpYS9LYXRtYW5kdVwiOiB7XG4gICAgYTogXCJBc2lhL0thdGhtYW5kdVwiLFxuICAgIHI6IDFcbiAgfSxcbiAgXCJBc2lhL0toYW5keWdhXCI6IHtcbiAgICB1OiA1NDAsXG4gICAgYzogW1xuICAgICAgXCJSVVwiXG4gICAgXVxuICB9LFxuICBcIkFzaWEvS29sa2F0YVwiOiB7XG4gICAgdTogMzMwLFxuICAgIGM6IFtcbiAgICAgIFwiSU5cIlxuICAgIF1cbiAgfSxcbiAgXCJBc2lhL0tyYXNub3lhcnNrXCI6IHtcbiAgICB1OiA0MjAsXG4gICAgYzogW1xuICAgICAgXCJSVVwiXG4gICAgXVxuICB9LFxuICBcIkFzaWEvS3VhbGFfTHVtcHVyXCI6IHtcbiAgICBhOiBcIkFzaWEvU2luZ2Fwb3JlXCIsXG4gICAgYzogW1xuICAgICAgXCJNWVwiXG4gICAgXSxcbiAgICByOiAxXG4gIH0sXG4gIFwiQXNpYS9LdWNoaW5nXCI6IHtcbiAgICB1OiA0ODAsXG4gICAgYzogW1xuICAgICAgXCJNWVwiLFxuICAgICAgXCJCTlwiXG4gICAgXVxuICB9LFxuICBcIkFzaWEvS3V3YWl0XCI6IHtcbiAgICBhOiBcIkFzaWEvUml5YWRoXCIsXG4gICAgYzogW1xuICAgICAgXCJLV1wiXG4gICAgXSxcbiAgICByOiAxXG4gIH0sXG4gIFwiQXNpYS9NYWNhb1wiOiB7XG4gICAgYTogXCJBc2lhL01hY2F1XCIsXG4gICAgcjogMVxuICB9LFxuICBcIkFzaWEvTWFjYXVcIjoge1xuICAgIHU6IDQ4MCxcbiAgICBjOiBbXG4gICAgICBcIk1PXCJcbiAgICBdXG4gIH0sXG4gIFwiQXNpYS9NYWdhZGFuXCI6IHtcbiAgICB1OiA2NjAsXG4gICAgYzogW1xuICAgICAgXCJSVVwiXG4gICAgXVxuICB9LFxuICBcIkFzaWEvTWFrYXNzYXJcIjoge1xuICAgIHU6IDQ4MCxcbiAgICBjOiBbXG4gICAgICBcIklEXCJcbiAgICBdXG4gIH0sXG4gIFwiQXNpYS9NYW5pbGFcIjoge1xuICAgIHU6IDQ4MCxcbiAgICBjOiBbXG4gICAgICBcIlBIXCJcbiAgICBdXG4gIH0sXG4gIFwiQXNpYS9NdXNjYXRcIjoge1xuICAgIGE6IFwiQXNpYS9EdWJhaVwiLFxuICAgIGM6IFtcbiAgICAgIFwiT01cIlxuICAgIF0sXG4gICAgcjogMVxuICB9LFxuICBcIkFzaWEvTmljb3NpYVwiOiB7XG4gICAgdTogMTIwLFxuICAgIGQ6IDE4MCxcbiAgICBjOiBbXG4gICAgICBcIkNZXCJcbiAgICBdXG4gIH0sXG4gIFwiQXNpYS9Ob3Zva3V6bmV0c2tcIjoge1xuICAgIHU6IDQyMCxcbiAgICBjOiBbXG4gICAgICBcIlJVXCJcbiAgICBdXG4gIH0sXG4gIFwiQXNpYS9Ob3Zvc2liaXJza1wiOiB7XG4gICAgdTogNDIwLFxuICAgIGM6IFtcbiAgICAgIFwiUlVcIlxuICAgIF1cbiAgfSxcbiAgXCJBc2lhL09tc2tcIjoge1xuICAgIHU6IDM2MCxcbiAgICBjOiBbXG4gICAgICBcIlJVXCJcbiAgICBdXG4gIH0sXG4gIFwiQXNpYS9PcmFsXCI6IHtcbiAgICB1OiAzMDAsXG4gICAgYzogW1xuICAgICAgXCJLWlwiXG4gICAgXVxuICB9LFxuICBcIkFzaWEvUGhub21fUGVuaFwiOiB7XG4gICAgYTogXCJBc2lhL0Jhbmdrb2tcIixcbiAgICBjOiBbXG4gICAgICBcIktIXCJcbiAgICBdLFxuICAgIHI6IDFcbiAgfSxcbiAgXCJBc2lhL1BvbnRpYW5ha1wiOiB7XG4gICAgdTogNDIwLFxuICAgIGM6IFtcbiAgICAgIFwiSURcIlxuICAgIF1cbiAgfSxcbiAgXCJBc2lhL1B5b25neWFuZ1wiOiB7XG4gICAgdTogNTQwLFxuICAgIGM6IFtcbiAgICAgIFwiS1BcIlxuICAgIF1cbiAgfSxcbiAgXCJBc2lhL1FhdGFyXCI6IHtcbiAgICB1OiAxODAsXG4gICAgYzogW1xuICAgICAgXCJRQVwiLFxuICAgICAgXCJCSFwiXG4gICAgXVxuICB9LFxuICBcIkFzaWEvUW9zdGFuYXlcIjoge1xuICAgIHU6IDMwMCxcbiAgICBjOiBbXG4gICAgICBcIktaXCJcbiAgICBdXG4gIH0sXG4gIFwiQXNpYS9ReXp5bG9yZGFcIjoge1xuICAgIHU6IDMwMCxcbiAgICBjOiBbXG4gICAgICBcIktaXCJcbiAgICBdXG4gIH0sXG4gIFwiQXNpYS9SYW5nb29uXCI6IHtcbiAgICBhOiBcIkFzaWEvWWFuZ29uXCIsXG4gICAgYzogW1xuICAgICAgXCJNTVwiXG4gICAgXSxcbiAgICByOiAxXG4gIH0sXG4gIFwiQXNpYS9SaXlhZGhcIjoge1xuICAgIHU6IDE4MCxcbiAgICBjOiBbXG4gICAgICBcIlNBXCIsXG4gICAgICBcIkFRXCIsXG4gICAgICBcIktXXCIsXG4gICAgICBcIllFXCJcbiAgICBdXG4gIH0sXG4gIFwiQXNpYS9TYWlnb25cIjoge1xuICAgIGE6IFwiQXNpYS9Ib19DaGlfTWluaFwiLFxuICAgIHI6IDFcbiAgfSxcbiAgXCJBc2lhL1Nha2hhbGluXCI6IHtcbiAgICB1OiA2NjAsXG4gICAgYzogW1xuICAgICAgXCJSVVwiXG4gICAgXVxuICB9LFxuICBcIkFzaWEvU2FtYXJrYW5kXCI6IHtcbiAgICB1OiAzMDAsXG4gICAgYzogW1xuICAgICAgXCJVWlwiXG4gICAgXVxuICB9LFxuICBcIkFzaWEvU2VvdWxcIjoge1xuICAgIHU6IDU0MCxcbiAgICBjOiBbXG4gICAgICBcIktSXCJcbiAgICBdXG4gIH0sXG4gIFwiQXNpYS9TaGFuZ2hhaVwiOiB7XG4gICAgdTogNDgwLFxuICAgIGM6IFtcbiAgICAgIFwiQ05cIlxuICAgIF1cbiAgfSxcbiAgXCJBc2lhL1NpbmdhcG9yZVwiOiB7XG4gICAgdTogNDgwLFxuICAgIGM6IFtcbiAgICAgIFwiU0dcIixcbiAgICAgIFwiTVlcIlxuICAgIF1cbiAgfSxcbiAgXCJBc2lhL1NyZWRuZWtvbHltc2tcIjoge1xuICAgIHU6IDY2MCxcbiAgICBjOiBbXG4gICAgICBcIlJVXCJcbiAgICBdXG4gIH0sXG4gIFwiQXNpYS9UYWlwZWlcIjoge1xuICAgIHU6IDQ4MCxcbiAgICBjOiBbXG4gICAgICBcIlRXXCJcbiAgICBdXG4gIH0sXG4gIFwiQXNpYS9UYXNoa2VudFwiOiB7XG4gICAgdTogMzAwLFxuICAgIGM6IFtcbiAgICAgIFwiVVpcIlxuICAgIF1cbiAgfSxcbiAgXCJBc2lhL1RiaWxpc2lcIjoge1xuICAgIHU6IDI0MCxcbiAgICBjOiBbXG4gICAgICBcIkdFXCJcbiAgICBdXG4gIH0sXG4gIFwiQXNpYS9UZWhyYW5cIjoge1xuICAgIHU6IDIxMCxcbiAgICBjOiBbXG4gICAgICBcIklSXCJcbiAgICBdXG4gIH0sXG4gIFwiQXNpYS9UZWxfQXZpdlwiOiB7XG4gICAgYTogXCJBc2lhL0plcnVzYWxlbVwiLFxuICAgIHI6IDFcbiAgfSxcbiAgXCJBc2lhL1RoaW1idVwiOiB7XG4gICAgYTogXCJBc2lhL1RoaW1waHVcIixcbiAgICByOiAxXG4gIH0sXG4gIFwiQXNpYS9UaGltcGh1XCI6IHtcbiAgICB1OiAzNjAsXG4gICAgYzogW1xuICAgICAgXCJCVFwiXG4gICAgXVxuICB9LFxuICBcIkFzaWEvVG9reW9cIjoge1xuICAgIHU6IDU0MCxcbiAgICBjOiBbXG4gICAgICBcIkpQXCJcbiAgICBdXG4gIH0sXG4gIFwiQXNpYS9Ub21za1wiOiB7XG4gICAgdTogNDIwLFxuICAgIGM6IFtcbiAgICAgIFwiUlVcIlxuICAgIF1cbiAgfSxcbiAgXCJBc2lhL1VqdW5nX1BhbmRhbmdcIjoge1xuICAgIGE6IFwiQXNpYS9NYWthc3NhclwiLFxuICAgIHI6IDFcbiAgfSxcbiAgXCJBc2lhL1VsYWFuYmFhdGFyXCI6IHtcbiAgICB1OiA0ODAsXG4gICAgYzogW1xuICAgICAgXCJNTlwiXG4gICAgXVxuICB9LFxuICBcIkFzaWEvVWxhbl9CYXRvclwiOiB7XG4gICAgYTogXCJBc2lhL1VsYWFuYmFhdGFyXCIsXG4gICAgcjogMVxuICB9LFxuICBcIkFzaWEvVXJ1bXFpXCI6IHtcbiAgICB1OiAzNjAsXG4gICAgYzogW1xuICAgICAgXCJDTlwiXG4gICAgXVxuICB9LFxuICBcIkFzaWEvVXN0LU5lcmFcIjoge1xuICAgIHU6IDYwMCxcbiAgICBjOiBbXG4gICAgICBcIlJVXCJcbiAgICBdXG4gIH0sXG4gIFwiQXNpYS9WaWVudGlhbmVcIjoge1xuICAgIGE6IFwiQXNpYS9CYW5na29rXCIsXG4gICAgYzogW1xuICAgICAgXCJMQVwiXG4gICAgXSxcbiAgICByOiAxXG4gIH0sXG4gIFwiQXNpYS9WbGFkaXZvc3Rva1wiOiB7XG4gICAgdTogNjAwLFxuICAgIGM6IFtcbiAgICAgIFwiUlVcIlxuICAgIF1cbiAgfSxcbiAgXCJBc2lhL1lha3V0c2tcIjoge1xuICAgIHU6IDU0MCxcbiAgICBjOiBbXG4gICAgICBcIlJVXCJcbiAgICBdXG4gIH0sXG4gIFwiQXNpYS9ZYW5nb25cIjoge1xuICAgIHU6IDM5MCxcbiAgICBjOiBbXG4gICAgICBcIk1NXCIsXG4gICAgICBcIkNDXCJcbiAgICBdXG4gIH0sXG4gIFwiQXNpYS9ZZWthdGVyaW5idXJnXCI6IHtcbiAgICB1OiAzMDAsXG4gICAgYzogW1xuICAgICAgXCJSVVwiXG4gICAgXVxuICB9LFxuICBcIkFzaWEvWWVyZXZhblwiOiB7XG4gICAgdTogMjQwLFxuICAgIGM6IFtcbiAgICAgIFwiQU1cIlxuICAgIF1cbiAgfSxcbiAgXCJBdGxhbnRpYy9Bem9yZXNcIjoge1xuICAgIHU6IC02MCxcbiAgICBkOiAwLFxuICAgIGM6IFtcbiAgICAgIFwiUFRcIlxuICAgIF1cbiAgfSxcbiAgXCJBdGxhbnRpYy9CZXJtdWRhXCI6IHtcbiAgICB1OiAtMjQwLFxuICAgIGQ6IC0xODAsXG4gICAgYzogW1xuICAgICAgXCJCTVwiXG4gICAgXVxuICB9LFxuICBcIkF0bGFudGljL0NhbmFyeVwiOiB7XG4gICAgdTogMCxcbiAgICBkOiA2MCxcbiAgICBjOiBbXG4gICAgICBcIkVTXCJcbiAgICBdXG4gIH0sXG4gIFwiQXRsYW50aWMvQ2FwZV9WZXJkZVwiOiB7XG4gICAgdTogLTYwLFxuICAgIGM6IFtcbiAgICAgIFwiQ1ZcIlxuICAgIF1cbiAgfSxcbiAgXCJBdGxhbnRpYy9GYWVyb2VcIjoge1xuICAgIGE6IFwiQXRsYW50aWMvRmFyb2VcIixcbiAgICByOiAxXG4gIH0sXG4gIFwiQXRsYW50aWMvRmFyb2VcIjoge1xuICAgIHU6IDAsXG4gICAgZDogNjAsXG4gICAgYzogW1xuICAgICAgXCJGT1wiXG4gICAgXVxuICB9LFxuICBcIkF0bGFudGljL0phbl9NYXllblwiOiB7XG4gICAgYTogXCJFdXJvcGUvQmVybGluXCIsXG4gICAgYzogW1xuICAgICAgXCJTSlwiXG4gICAgXSxcbiAgICByOiAxXG4gIH0sXG4gIFwiQXRsYW50aWMvTWFkZWlyYVwiOiB7XG4gICAgdTogMCxcbiAgICBkOiA2MCxcbiAgICBjOiBbXG4gICAgICBcIlBUXCJcbiAgICBdXG4gIH0sXG4gIFwiQXRsYW50aWMvUmV5a2phdmlrXCI6IHtcbiAgICBhOiBcIkFmcmljYS9BYmlkamFuXCIsXG4gICAgYzogW1xuICAgICAgXCJJU1wiXG4gICAgXSxcbiAgICByOiAxXG4gIH0sXG4gIFwiQXRsYW50aWMvU291dGhfR2VvcmdpYVwiOiB7XG4gICAgdTogLTEyMCxcbiAgICBjOiBbXG4gICAgICBcIkdTXCJcbiAgICBdXG4gIH0sXG4gIFwiQXRsYW50aWMvU3RfSGVsZW5hXCI6IHtcbiAgICBhOiBcIkFmcmljYS9BYmlkamFuXCIsXG4gICAgYzogW1xuICAgICAgXCJTSFwiXG4gICAgXSxcbiAgICByOiAxXG4gIH0sXG4gIFwiQXRsYW50aWMvU3RhbmxleVwiOiB7XG4gICAgdTogLTE4MCxcbiAgICBjOiBbXG4gICAgICBcIkZLXCJcbiAgICBdXG4gIH0sXG4gIFwiQXVzdHJhbGlhL0FDVFwiOiB7XG4gICAgYTogXCJBdXN0cmFsaWEvU3lkbmV5XCIsXG4gICAgcjogMVxuICB9LFxuICBcIkF1c3RyYWxpYS9BZGVsYWlkZVwiOiB7XG4gICAgdTogNTcwLFxuICAgIGQ6IDYzMCxcbiAgICBjOiBbXG4gICAgICBcIkFVXCJcbiAgICBdXG4gIH0sXG4gIFwiQXVzdHJhbGlhL0JyaXNiYW5lXCI6IHtcbiAgICB1OiA2MDAsXG4gICAgYzogW1xuICAgICAgXCJBVVwiXG4gICAgXVxuICB9LFxuICBcIkF1c3RyYWxpYS9Ccm9rZW5fSGlsbFwiOiB7XG4gICAgdTogNTcwLFxuICAgIGQ6IDYzMCxcbiAgICBjOiBbXG4gICAgICBcIkFVXCJcbiAgICBdXG4gIH0sXG4gIFwiQXVzdHJhbGlhL0NhbmJlcnJhXCI6IHtcbiAgICBhOiBcIkF1c3RyYWxpYS9TeWRuZXlcIixcbiAgICByOiAxXG4gIH0sXG4gIFwiQXVzdHJhbGlhL0N1cnJpZVwiOiB7XG4gICAgYTogXCJBdXN0cmFsaWEvSG9iYXJ0XCIsXG4gICAgcjogMVxuICB9LFxuICBcIkF1c3RyYWxpYS9EYXJ3aW5cIjoge1xuICAgIHU6IDU3MCxcbiAgICBjOiBbXG4gICAgICBcIkFVXCJcbiAgICBdXG4gIH0sXG4gIFwiQXVzdHJhbGlhL0V1Y2xhXCI6IHtcbiAgICB1OiA1MjUsXG4gICAgYzogW1xuICAgICAgXCJBVVwiXG4gICAgXVxuICB9LFxuICBcIkF1c3RyYWxpYS9Ib2JhcnRcIjoge1xuICAgIHU6IDYwMCxcbiAgICBkOiA2NjAsXG4gICAgYzogW1xuICAgICAgXCJBVVwiXG4gICAgXVxuICB9LFxuICBcIkF1c3RyYWxpYS9MSElcIjoge1xuICAgIGE6IFwiQXVzdHJhbGlhL0xvcmRfSG93ZVwiLFxuICAgIHI6IDFcbiAgfSxcbiAgXCJBdXN0cmFsaWEvTGluZGVtYW5cIjoge1xuICAgIHU6IDYwMCxcbiAgICBjOiBbXG4gICAgICBcIkFVXCJcbiAgICBdXG4gIH0sXG4gIFwiQXVzdHJhbGlhL0xvcmRfSG93ZVwiOiB7XG4gICAgdTogNjMwLFxuICAgIGQ6IDY2MCxcbiAgICBjOiBbXG4gICAgICBcIkFVXCJcbiAgICBdXG4gIH0sXG4gIFwiQXVzdHJhbGlhL01lbGJvdXJuZVwiOiB7XG4gICAgdTogNjAwLFxuICAgIGQ6IDY2MCxcbiAgICBjOiBbXG4gICAgICBcIkFVXCJcbiAgICBdXG4gIH0sXG4gIFwiQXVzdHJhbGlhL05TV1wiOiB7XG4gICAgYTogXCJBdXN0cmFsaWEvU3lkbmV5XCIsXG4gICAgcjogMVxuICB9LFxuICBcIkF1c3RyYWxpYS9Ob3J0aFwiOiB7XG4gICAgYTogXCJBdXN0cmFsaWEvRGFyd2luXCIsXG4gICAgcjogMVxuICB9LFxuICBcIkF1c3RyYWxpYS9QZXJ0aFwiOiB7XG4gICAgdTogNDgwLFxuICAgIGM6IFtcbiAgICAgIFwiQVVcIlxuICAgIF1cbiAgfSxcbiAgXCJBdXN0cmFsaWEvUXVlZW5zbGFuZFwiOiB7XG4gICAgYTogXCJBdXN0cmFsaWEvQnJpc2JhbmVcIixcbiAgICByOiAxXG4gIH0sXG4gIFwiQXVzdHJhbGlhL1NvdXRoXCI6IHtcbiAgICBhOiBcIkF1c3RyYWxpYS9BZGVsYWlkZVwiLFxuICAgIHI6IDFcbiAgfSxcbiAgXCJBdXN0cmFsaWEvU3lkbmV5XCI6IHtcbiAgICB1OiA2MDAsXG4gICAgZDogNjYwLFxuICAgIGM6IFtcbiAgICAgIFwiQVVcIlxuICAgIF1cbiAgfSxcbiAgXCJBdXN0cmFsaWEvVGFzbWFuaWFcIjoge1xuICAgIGE6IFwiQXVzdHJhbGlhL0hvYmFydFwiLFxuICAgIHI6IDFcbiAgfSxcbiAgXCJBdXN0cmFsaWEvVmljdG9yaWFcIjoge1xuICAgIGE6IFwiQXVzdHJhbGlhL01lbGJvdXJuZVwiLFxuICAgIHI6IDFcbiAgfSxcbiAgXCJBdXN0cmFsaWEvV2VzdFwiOiB7XG4gICAgYTogXCJBdXN0cmFsaWEvUGVydGhcIixcbiAgICByOiAxXG4gIH0sXG4gIFwiQXVzdHJhbGlhL1lhbmNvd2lubmFcIjoge1xuICAgIGE6IFwiQXVzdHJhbGlhL0Jyb2tlbl9IaWxsXCIsXG4gICAgcjogMVxuICB9LFxuICBcIkJyYXppbC9BY3JlXCI6IHtcbiAgICBhOiBcIkFtZXJpY2EvUmlvX0JyYW5jb1wiLFxuICAgIHI6IDFcbiAgfSxcbiAgXCJCcmF6aWwvRGVOb3JvbmhhXCI6IHtcbiAgICBhOiBcIkFtZXJpY2EvTm9yb25oYVwiLFxuICAgIHI6IDFcbiAgfSxcbiAgXCJCcmF6aWwvRWFzdFwiOiB7XG4gICAgYTogXCJBbWVyaWNhL1Nhb19QYXVsb1wiLFxuICAgIHI6IDFcbiAgfSxcbiAgXCJCcmF6aWwvV2VzdFwiOiB7XG4gICAgYTogXCJBbWVyaWNhL01hbmF1c1wiLFxuICAgIHI6IDFcbiAgfSxcbiAgQ0VUOiB7XG4gICAgYTogXCJFdXJvcGUvQnJ1c3NlbHNcIixcbiAgICByOiAxXG4gIH0sXG4gIENTVDZDRFQ6IHtcbiAgICBhOiBcIkFtZXJpY2EvQ2hpY2Fnb1wiLFxuICAgIHI6IDFcbiAgfSxcbiAgXCJDYW5hZGEvQXRsYW50aWNcIjoge1xuICAgIGE6IFwiQW1lcmljYS9IYWxpZmF4XCIsXG4gICAgcjogMVxuICB9LFxuICBcIkNhbmFkYS9DZW50cmFsXCI6IHtcbiAgICBhOiBcIkFtZXJpY2EvV2lubmlwZWdcIixcbiAgICByOiAxXG4gIH0sXG4gIFwiQ2FuYWRhL0Vhc3Rlcm5cIjoge1xuICAgIGE6IFwiQW1lcmljYS9Ub3JvbnRvXCIsXG4gICAgYzogW1xuICAgICAgXCJDQVwiXG4gICAgXSxcbiAgICByOiAxXG4gIH0sXG4gIFwiQ2FuYWRhL01vdW50YWluXCI6IHtcbiAgICBhOiBcIkFtZXJpY2EvRWRtb250b25cIixcbiAgICByOiAxXG4gIH0sXG4gIFwiQ2FuYWRhL05ld2ZvdW5kbGFuZFwiOiB7XG4gICAgYTogXCJBbWVyaWNhL1N0X0pvaG5zXCIsXG4gICAgcjogMVxuICB9LFxuICBcIkNhbmFkYS9QYWNpZmljXCI6IHtcbiAgICBhOiBcIkFtZXJpY2EvVmFuY291dmVyXCIsXG4gICAgcjogMVxuICB9LFxuICBcIkNhbmFkYS9TYXNrYXRjaGV3YW5cIjoge1xuICAgIGE6IFwiQW1lcmljYS9SZWdpbmFcIixcbiAgICByOiAxXG4gIH0sXG4gIFwiQ2FuYWRhL1l1a29uXCI6IHtcbiAgICBhOiBcIkFtZXJpY2EvV2hpdGVob3JzZVwiLFxuICAgIHI6IDFcbiAgfSxcbiAgXCJDaGlsZS9Db250aW5lbnRhbFwiOiB7XG4gICAgYTogXCJBbWVyaWNhL1NhbnRpYWdvXCIsXG4gICAgcjogMVxuICB9LFxuICBcIkNoaWxlL0Vhc3RlcklzbGFuZFwiOiB7XG4gICAgYTogXCJQYWNpZmljL0Vhc3RlclwiLFxuICAgIHI6IDFcbiAgfSxcbiAgQ3ViYToge1xuICAgIGE6IFwiQW1lcmljYS9IYXZhbmFcIixcbiAgICByOiAxXG4gIH0sXG4gIEVFVDoge1xuICAgIGE6IFwiRXVyb3BlL0F0aGVuc1wiLFxuICAgIHI6IDFcbiAgfSxcbiAgRVNUOiB7XG4gICAgYTogXCJBbWVyaWNhL1BhbmFtYVwiLFxuICAgIHI6IDFcbiAgfSxcbiAgRVNUNUVEVDoge1xuICAgIGE6IFwiQW1lcmljYS9OZXdfWW9ya1wiLFxuICAgIHI6IDFcbiAgfSxcbiAgRWd5cHQ6IHtcbiAgICBhOiBcIkFmcmljYS9DYWlyb1wiLFxuICAgIHI6IDFcbiAgfSxcbiAgRWlyZToge1xuICAgIGE6IFwiRXVyb3BlL0R1YmxpblwiLFxuICAgIHI6IDFcbiAgfSxcbiAgXCJFdGMvR01UXCI6IHtcbiAgICB1OiAwXG4gIH0sXG4gIFwiRXRjL0dNVCswXCI6IHtcbiAgICBhOiBcIkV0Yy9HTVRcIixcbiAgICByOiAxXG4gIH0sXG4gIFwiRXRjL0dNVCsxXCI6IHtcbiAgICB1OiAtNjBcbiAgfSxcbiAgXCJFdGMvR01UKzEwXCI6IHtcbiAgICB1OiAtNjAwXG4gIH0sXG4gIFwiRXRjL0dNVCsxMVwiOiB7XG4gICAgdTogLTY2MFxuICB9LFxuICBcIkV0Yy9HTVQrMTJcIjoge1xuICAgIHU6IC03MjBcbiAgfSxcbiAgXCJFdGMvR01UKzJcIjoge1xuICAgIHU6IC0xMjBcbiAgfSxcbiAgXCJFdGMvR01UKzNcIjoge1xuICAgIHU6IC0xODBcbiAgfSxcbiAgXCJFdGMvR01UKzRcIjoge1xuICAgIHU6IC0yNDBcbiAgfSxcbiAgXCJFdGMvR01UKzVcIjoge1xuICAgIHU6IC0zMDBcbiAgfSxcbiAgXCJFdGMvR01UKzZcIjoge1xuICAgIHU6IC0zNjBcbiAgfSxcbiAgXCJFdGMvR01UKzdcIjoge1xuICAgIHU6IC00MjBcbiAgfSxcbiAgXCJFdGMvR01UKzhcIjoge1xuICAgIHU6IC00ODBcbiAgfSxcbiAgXCJFdGMvR01UKzlcIjoge1xuICAgIHU6IC01NDBcbiAgfSxcbiAgXCJFdGMvR01ULTBcIjoge1xuICAgIGE6IFwiRXRjL0dNVFwiLFxuICAgIHI6IDFcbiAgfSxcbiAgXCJFdGMvR01ULTFcIjoge1xuICAgIHU6IDYwXG4gIH0sXG4gIFwiRXRjL0dNVC0xMFwiOiB7XG4gICAgdTogNjAwXG4gIH0sXG4gIFwiRXRjL0dNVC0xMVwiOiB7XG4gICAgdTogNjYwXG4gIH0sXG4gIFwiRXRjL0dNVC0xMlwiOiB7XG4gICAgdTogNzIwXG4gIH0sXG4gIFwiRXRjL0dNVC0xM1wiOiB7XG4gICAgdTogNzgwXG4gIH0sXG4gIFwiRXRjL0dNVC0xNFwiOiB7XG4gICAgdTogODQwXG4gIH0sXG4gIFwiRXRjL0dNVC0yXCI6IHtcbiAgICB1OiAxMjBcbiAgfSxcbiAgXCJFdGMvR01ULTNcIjoge1xuICAgIHU6IDE4MFxuICB9LFxuICBcIkV0Yy9HTVQtNFwiOiB7XG4gICAgdTogMjQwXG4gIH0sXG4gIFwiRXRjL0dNVC01XCI6IHtcbiAgICB1OiAzMDBcbiAgfSxcbiAgXCJFdGMvR01ULTZcIjoge1xuICAgIHU6IDM2MFxuICB9LFxuICBcIkV0Yy9HTVQtN1wiOiB7XG4gICAgdTogNDIwXG4gIH0sXG4gIFwiRXRjL0dNVC04XCI6IHtcbiAgICB1OiA0ODBcbiAgfSxcbiAgXCJFdGMvR01ULTlcIjoge1xuICAgIHU6IDU0MFxuICB9LFxuICBcIkV0Yy9HTVQwXCI6IHtcbiAgICBhOiBcIkV0Yy9HTVRcIixcbiAgICByOiAxXG4gIH0sXG4gIFwiRXRjL0dyZWVud2ljaFwiOiB7XG4gICAgYTogXCJFdGMvR01UXCIsXG4gICAgcjogMVxuICB9LFxuICBcIkV0Yy9VQ1RcIjoge1xuICAgIGE6IFwiRXRjL1VUQ1wiLFxuICAgIHI6IDFcbiAgfSxcbiAgXCJFdGMvVVRDXCI6IHtcbiAgICB1OiAwXG4gIH0sXG4gIFwiRXRjL1VuaXZlcnNhbFwiOiB7XG4gICAgYTogXCJFdGMvVVRDXCIsXG4gICAgcjogMVxuICB9LFxuICBcIkV0Yy9adWx1XCI6IHtcbiAgICBhOiBcIkV0Yy9VVENcIixcbiAgICByOiAxXG4gIH0sXG4gIFwiRXVyb3BlL0Ftc3RlcmRhbVwiOiB7XG4gICAgYTogXCJFdXJvcGUvQnJ1c3NlbHNcIixcbiAgICBjOiBbXG4gICAgICBcIk5MXCJcbiAgICBdLFxuICAgIHI6IDFcbiAgfSxcbiAgXCJFdXJvcGUvQW5kb3JyYVwiOiB7XG4gICAgdTogNjAsXG4gICAgZDogMTIwLFxuICAgIGM6IFtcbiAgICAgIFwiQURcIlxuICAgIF1cbiAgfSxcbiAgXCJFdXJvcGUvQXN0cmFraGFuXCI6IHtcbiAgICB1OiAyNDAsXG4gICAgYzogW1xuICAgICAgXCJSVVwiXG4gICAgXVxuICB9LFxuICBcIkV1cm9wZS9BdGhlbnNcIjoge1xuICAgIHU6IDEyMCxcbiAgICBkOiAxODAsXG4gICAgYzogW1xuICAgICAgXCJHUlwiXG4gICAgXVxuICB9LFxuICBcIkV1cm9wZS9CZWxmYXN0XCI6IHtcbiAgICBhOiBcIkV1cm9wZS9Mb25kb25cIixcbiAgICBjOiBbXG4gICAgICBcIkdCXCJcbiAgICBdLFxuICAgIHI6IDFcbiAgfSxcbiAgXCJFdXJvcGUvQmVsZ3JhZGVcIjoge1xuICAgIHU6IDYwLFxuICAgIGQ6IDEyMCxcbiAgICBjOiBbXG4gICAgICBcIlJTXCIsXG4gICAgICBcIkJBXCIsXG4gICAgICBcIkhSXCIsXG4gICAgICBcIk1FXCIsXG4gICAgICBcIk1LXCIsXG4gICAgICBcIlNJXCJcbiAgICBdXG4gIH0sXG4gIFwiRXVyb3BlL0JlcmxpblwiOiB7XG4gICAgdTogNjAsXG4gICAgZDogMTIwLFxuICAgIGM6IFtcbiAgICAgIFwiREVcIixcbiAgICAgIFwiREtcIixcbiAgICAgIFwiTk9cIixcbiAgICAgIFwiU0VcIixcbiAgICAgIFwiU0pcIlxuICAgIF1cbiAgfSxcbiAgXCJFdXJvcGUvQnJhdGlzbGF2YVwiOiB7XG4gICAgYTogXCJFdXJvcGUvUHJhZ3VlXCIsXG4gICAgYzogW1xuICAgICAgXCJTS1wiXG4gICAgXSxcbiAgICByOiAxXG4gIH0sXG4gIFwiRXVyb3BlL0JydXNzZWxzXCI6IHtcbiAgICB1OiA2MCxcbiAgICBkOiAxMjAsXG4gICAgYzogW1xuICAgICAgXCJCRVwiLFxuICAgICAgXCJMVVwiLFxuICAgICAgXCJOTFwiXG4gICAgXVxuICB9LFxuICBcIkV1cm9wZS9CdWNoYXJlc3RcIjoge1xuICAgIHU6IDEyMCxcbiAgICBkOiAxODAsXG4gICAgYzogW1xuICAgICAgXCJST1wiXG4gICAgXVxuICB9LFxuICBcIkV1cm9wZS9CdWRhcGVzdFwiOiB7XG4gICAgdTogNjAsXG4gICAgZDogMTIwLFxuICAgIGM6IFtcbiAgICAgIFwiSFVcIlxuICAgIF1cbiAgfSxcbiAgXCJFdXJvcGUvQnVzaW5nZW5cIjoge1xuICAgIGE6IFwiRXVyb3BlL1p1cmljaFwiLFxuICAgIGM6IFtcbiAgICAgIFwiREVcIlxuICAgIF0sXG4gICAgcjogMVxuICB9LFxuICBcIkV1cm9wZS9DaGlzaW5hdVwiOiB7XG4gICAgdTogMTIwLFxuICAgIGQ6IDE4MCxcbiAgICBjOiBbXG4gICAgICBcIk1EXCJcbiAgICBdXG4gIH0sXG4gIFwiRXVyb3BlL0NvcGVuaGFnZW5cIjoge1xuICAgIGE6IFwiRXVyb3BlL0JlcmxpblwiLFxuICAgIGM6IFtcbiAgICAgIFwiREtcIlxuICAgIF0sXG4gICAgcjogMVxuICB9LFxuICBcIkV1cm9wZS9EdWJsaW5cIjoge1xuICAgIHU6IDAsXG4gICAgZDogNjAsXG4gICAgYzogW1xuICAgICAgXCJJRVwiXG4gICAgXVxuICB9LFxuICBcIkV1cm9wZS9HaWJyYWx0YXJcIjoge1xuICAgIHU6IDYwLFxuICAgIGQ6IDEyMCxcbiAgICBjOiBbXG4gICAgICBcIkdJXCJcbiAgICBdXG4gIH0sXG4gIFwiRXVyb3BlL0d1ZXJuc2V5XCI6IHtcbiAgICBhOiBcIkV1cm9wZS9Mb25kb25cIixcbiAgICBjOiBbXG4gICAgICBcIkdHXCJcbiAgICBdLFxuICAgIHI6IDFcbiAgfSxcbiAgXCJFdXJvcGUvSGVsc2lua2lcIjoge1xuICAgIHU6IDEyMCxcbiAgICBkOiAxODAsXG4gICAgYzogW1xuICAgICAgXCJGSVwiLFxuICAgICAgXCJBWFwiXG4gICAgXVxuICB9LFxuICBcIkV1cm9wZS9Jc2xlX29mX01hblwiOiB7XG4gICAgYTogXCJFdXJvcGUvTG9uZG9uXCIsXG4gICAgYzogW1xuICAgICAgXCJJTVwiXG4gICAgXSxcbiAgICByOiAxXG4gIH0sXG4gIFwiRXVyb3BlL0lzdGFuYnVsXCI6IHtcbiAgICB1OiAxODAsXG4gICAgYzogW1xuICAgICAgXCJUUlwiXG4gICAgXVxuICB9LFxuICBcIkV1cm9wZS9KZXJzZXlcIjoge1xuICAgIGE6IFwiRXVyb3BlL0xvbmRvblwiLFxuICAgIGM6IFtcbiAgICAgIFwiSkVcIlxuICAgIF0sXG4gICAgcjogMVxuICB9LFxuICBcIkV1cm9wZS9LYWxpbmluZ3JhZFwiOiB7XG4gICAgdTogMTIwLFxuICAgIGM6IFtcbiAgICAgIFwiUlVcIlxuICAgIF1cbiAgfSxcbiAgXCJFdXJvcGUvS2lldlwiOiB7XG4gICAgYTogXCJFdXJvcGUvS3lpdlwiLFxuICAgIHI6IDFcbiAgfSxcbiAgXCJFdXJvcGUvS2lyb3ZcIjoge1xuICAgIHU6IDE4MCxcbiAgICBjOiBbXG4gICAgICBcIlJVXCJcbiAgICBdXG4gIH0sXG4gIFwiRXVyb3BlL0t5aXZcIjoge1xuICAgIHU6IDEyMCxcbiAgICBkOiAxODAsXG4gICAgYzogW1xuICAgICAgXCJVQVwiXG4gICAgXVxuICB9LFxuICBcIkV1cm9wZS9MaXNib25cIjoge1xuICAgIHU6IDAsXG4gICAgZDogNjAsXG4gICAgYzogW1xuICAgICAgXCJQVFwiXG4gICAgXVxuICB9LFxuICBcIkV1cm9wZS9ManVibGphbmFcIjoge1xuICAgIGE6IFwiRXVyb3BlL0JlbGdyYWRlXCIsXG4gICAgYzogW1xuICAgICAgXCJTSVwiXG4gICAgXSxcbiAgICByOiAxXG4gIH0sXG4gIFwiRXVyb3BlL0xvbmRvblwiOiB7XG4gICAgdTogMCxcbiAgICBkOiA2MCxcbiAgICBjOiBbXG4gICAgICBcIkdCXCIsXG4gICAgICBcIkdHXCIsXG4gICAgICBcIklNXCIsXG4gICAgICBcIkpFXCJcbiAgICBdXG4gIH0sXG4gIFwiRXVyb3BlL0x1eGVtYm91cmdcIjoge1xuICAgIGE6IFwiRXVyb3BlL0JydXNzZWxzXCIsXG4gICAgYzogW1xuICAgICAgXCJMVVwiXG4gICAgXSxcbiAgICByOiAxXG4gIH0sXG4gIFwiRXVyb3BlL01hZHJpZFwiOiB7XG4gICAgdTogNjAsXG4gICAgZDogMTIwLFxuICAgIGM6IFtcbiAgICAgIFwiRVNcIlxuICAgIF1cbiAgfSxcbiAgXCJFdXJvcGUvTWFsdGFcIjoge1xuICAgIHU6IDYwLFxuICAgIGQ6IDEyMCxcbiAgICBjOiBbXG4gICAgICBcIk1UXCJcbiAgICBdXG4gIH0sXG4gIFwiRXVyb3BlL01hcmllaGFtblwiOiB7XG4gICAgYTogXCJFdXJvcGUvSGVsc2lua2lcIixcbiAgICBjOiBbXG4gICAgICBcIkFYXCJcbiAgICBdLFxuICAgIHI6IDFcbiAgfSxcbiAgXCJFdXJvcGUvTWluc2tcIjoge1xuICAgIHU6IDE4MCxcbiAgICBjOiBbXG4gICAgICBcIkJZXCJcbiAgICBdXG4gIH0sXG4gIFwiRXVyb3BlL01vbmFjb1wiOiB7XG4gICAgYTogXCJFdXJvcGUvUGFyaXNcIixcbiAgICBjOiBbXG4gICAgICBcIk1DXCJcbiAgICBdLFxuICAgIHI6IDFcbiAgfSxcbiAgXCJFdXJvcGUvTW9zY293XCI6IHtcbiAgICB1OiAxODAsXG4gICAgYzogW1xuICAgICAgXCJSVVwiXG4gICAgXVxuICB9LFxuICBcIkV1cm9wZS9OaWNvc2lhXCI6IHtcbiAgICBhOiBcIkFzaWEvTmljb3NpYVwiLFxuICAgIHI6IDFcbiAgfSxcbiAgXCJFdXJvcGUvT3Nsb1wiOiB7XG4gICAgYTogXCJFdXJvcGUvQmVybGluXCIsXG4gICAgYzogW1xuICAgICAgXCJOT1wiXG4gICAgXSxcbiAgICByOiAxXG4gIH0sXG4gIFwiRXVyb3BlL1BhcmlzXCI6IHtcbiAgICB1OiA2MCxcbiAgICBkOiAxMjAsXG4gICAgYzogW1xuICAgICAgXCJGUlwiLFxuICAgICAgXCJNQ1wiXG4gICAgXVxuICB9LFxuICBcIkV1cm9wZS9Qb2Rnb3JpY2FcIjoge1xuICAgIGE6IFwiRXVyb3BlL0JlbGdyYWRlXCIsXG4gICAgYzogW1xuICAgICAgXCJNRVwiXG4gICAgXSxcbiAgICByOiAxXG4gIH0sXG4gIFwiRXVyb3BlL1ByYWd1ZVwiOiB7XG4gICAgdTogNjAsXG4gICAgZDogMTIwLFxuICAgIGM6IFtcbiAgICAgIFwiQ1pcIixcbiAgICAgIFwiU0tcIlxuICAgIF1cbiAgfSxcbiAgXCJFdXJvcGUvUmlnYVwiOiB7XG4gICAgdTogMTIwLFxuICAgIGQ6IDE4MCxcbiAgICBjOiBbXG4gICAgICBcIkxWXCJcbiAgICBdXG4gIH0sXG4gIFwiRXVyb3BlL1JvbWVcIjoge1xuICAgIHU6IDYwLFxuICAgIGQ6IDEyMCxcbiAgICBjOiBbXG4gICAgICBcIklUXCIsXG4gICAgICBcIlNNXCIsXG4gICAgICBcIlZBXCJcbiAgICBdXG4gIH0sXG4gIFwiRXVyb3BlL1NhbWFyYVwiOiB7XG4gICAgdTogMjQwLFxuICAgIGM6IFtcbiAgICAgIFwiUlVcIlxuICAgIF1cbiAgfSxcbiAgXCJFdXJvcGUvU2FuX01hcmlub1wiOiB7XG4gICAgYTogXCJFdXJvcGUvUm9tZVwiLFxuICAgIGM6IFtcbiAgICAgIFwiU01cIlxuICAgIF0sXG4gICAgcjogMVxuICB9LFxuICBcIkV1cm9wZS9TYXJhamV2b1wiOiB7XG4gICAgYTogXCJFdXJvcGUvQmVsZ3JhZGVcIixcbiAgICBjOiBbXG4gICAgICBcIkJBXCJcbiAgICBdLFxuICAgIHI6IDFcbiAgfSxcbiAgXCJFdXJvcGUvU2FyYXRvdlwiOiB7XG4gICAgdTogMjQwLFxuICAgIGM6IFtcbiAgICAgIFwiUlVcIlxuICAgIF1cbiAgfSxcbiAgXCJFdXJvcGUvU2ltZmVyb3BvbFwiOiB7XG4gICAgdTogMTgwLFxuICAgIGM6IFtcbiAgICAgIFwiUlVcIixcbiAgICAgIFwiVUFcIlxuICAgIF1cbiAgfSxcbiAgXCJFdXJvcGUvU2tvcGplXCI6IHtcbiAgICBhOiBcIkV1cm9wZS9CZWxncmFkZVwiLFxuICAgIGM6IFtcbiAgICAgIFwiTUtcIlxuICAgIF0sXG4gICAgcjogMVxuICB9LFxuICBcIkV1cm9wZS9Tb2ZpYVwiOiB7XG4gICAgdTogMTIwLFxuICAgIGQ6IDE4MCxcbiAgICBjOiBbXG4gICAgICBcIkJHXCJcbiAgICBdXG4gIH0sXG4gIFwiRXVyb3BlL1N0b2NraG9sbVwiOiB7XG4gICAgYTogXCJFdXJvcGUvQmVybGluXCIsXG4gICAgYzogW1xuICAgICAgXCJTRVwiXG4gICAgXSxcbiAgICByOiAxXG4gIH0sXG4gIFwiRXVyb3BlL1RhbGxpbm5cIjoge1xuICAgIHU6IDEyMCxcbiAgICBkOiAxODAsXG4gICAgYzogW1xuICAgICAgXCJFRVwiXG4gICAgXVxuICB9LFxuICBcIkV1cm9wZS9UaXJhbmVcIjoge1xuICAgIHU6IDYwLFxuICAgIGQ6IDEyMCxcbiAgICBjOiBbXG4gICAgICBcIkFMXCJcbiAgICBdXG4gIH0sXG4gIFwiRXVyb3BlL1RpcmFzcG9sXCI6IHtcbiAgICBhOiBcIkV1cm9wZS9DaGlzaW5hdVwiLFxuICAgIHI6IDFcbiAgfSxcbiAgXCJFdXJvcGUvVWx5YW5vdnNrXCI6IHtcbiAgICB1OiAyNDAsXG4gICAgYzogW1xuICAgICAgXCJSVVwiXG4gICAgXVxuICB9LFxuICBcIkV1cm9wZS9Vemhnb3JvZFwiOiB7XG4gICAgYTogXCJFdXJvcGUvS3lpdlwiLFxuICAgIHI6IDFcbiAgfSxcbiAgXCJFdXJvcGUvVmFkdXpcIjoge1xuICAgIGE6IFwiRXVyb3BlL1p1cmljaFwiLFxuICAgIGM6IFtcbiAgICAgIFwiTElcIlxuICAgIF0sXG4gICAgcjogMVxuICB9LFxuICBcIkV1cm9wZS9WYXRpY2FuXCI6IHtcbiAgICBhOiBcIkV1cm9wZS9Sb21lXCIsXG4gICAgYzogW1xuICAgICAgXCJWQVwiXG4gICAgXSxcbiAgICByOiAxXG4gIH0sXG4gIFwiRXVyb3BlL1ZpZW5uYVwiOiB7XG4gICAgdTogNjAsXG4gICAgZDogMTIwLFxuICAgIGM6IFtcbiAgICAgIFwiQVRcIlxuICAgIF1cbiAgfSxcbiAgXCJFdXJvcGUvVmlsbml1c1wiOiB7XG4gICAgdTogMTIwLFxuICAgIGQ6IDE4MCxcbiAgICBjOiBbXG4gICAgICBcIkxUXCJcbiAgICBdXG4gIH0sXG4gIFwiRXVyb3BlL1ZvbGdvZ3JhZFwiOiB7XG4gICAgdTogMTgwLFxuICAgIGM6IFtcbiAgICAgIFwiUlVcIlxuICAgIF1cbiAgfSxcbiAgXCJFdXJvcGUvV2Fyc2F3XCI6IHtcbiAgICB1OiA2MCxcbiAgICBkOiAxMjAsXG4gICAgYzogW1xuICAgICAgXCJQTFwiXG4gICAgXVxuICB9LFxuICBcIkV1cm9wZS9aYWdyZWJcIjoge1xuICAgIGE6IFwiRXVyb3BlL0JlbGdyYWRlXCIsXG4gICAgYzogW1xuICAgICAgXCJIUlwiXG4gICAgXSxcbiAgICByOiAxXG4gIH0sXG4gIFwiRXVyb3BlL1phcG9yb3poeWVcIjoge1xuICAgIGE6IFwiRXVyb3BlL0t5aXZcIixcbiAgICByOiAxXG4gIH0sXG4gIFwiRXVyb3BlL1p1cmljaFwiOiB7XG4gICAgdTogNjAsXG4gICAgZDogMTIwLFxuICAgIGM6IFtcbiAgICAgIFwiQ0hcIixcbiAgICAgIFwiREVcIixcbiAgICAgIFwiTElcIlxuICAgIF1cbiAgfSxcbiAgRmFjdG9yeToge1xuICAgIHU6IDBcbiAgfSxcbiAgR0I6IHtcbiAgICBhOiBcIkV1cm9wZS9Mb25kb25cIixcbiAgICBjOiBbXG4gICAgICBcIkdCXCJcbiAgICBdLFxuICAgIHI6IDFcbiAgfSxcbiAgXCJHQi1FaXJlXCI6IHtcbiAgICBhOiBcIkV1cm9wZS9Mb25kb25cIixcbiAgICBjOiBbXG4gICAgICBcIkdCXCJcbiAgICBdLFxuICAgIHI6IDFcbiAgfSxcbiAgR01UOiB7XG4gICAgYTogXCJFdGMvR01UXCIsXG4gICAgcjogMVxuICB9LFxuICBcIkdNVCswXCI6IHtcbiAgICBhOiBcIkV0Yy9HTVRcIixcbiAgICByOiAxXG4gIH0sXG4gIFwiR01ULTBcIjoge1xuICAgIGE6IFwiRXRjL0dNVFwiLFxuICAgIHI6IDFcbiAgfSxcbiAgR01UMDoge1xuICAgIGE6IFwiRXRjL0dNVFwiLFxuICAgIHI6IDFcbiAgfSxcbiAgR3JlZW53aWNoOiB7XG4gICAgYTogXCJFdGMvR01UXCIsXG4gICAgcjogMVxuICB9LFxuICBIU1Q6IHtcbiAgICBhOiBcIlBhY2lmaWMvSG9ub2x1bHVcIixcbiAgICByOiAxXG4gIH0sXG4gIEhvbmdrb25nOiB7XG4gICAgYTogXCJBc2lhL0hvbmdfS29uZ1wiLFxuICAgIHI6IDFcbiAgfSxcbiAgSWNlbGFuZDoge1xuICAgIGE6IFwiQWZyaWNhL0FiaWRqYW5cIixcbiAgICBjOiBbXG4gICAgICBcIklTXCJcbiAgICBdLFxuICAgIHI6IDFcbiAgfSxcbiAgXCJJbmRpYW4vQW50YW5hbmFyaXZvXCI6IHtcbiAgICBhOiBcIkFmcmljYS9OYWlyb2JpXCIsXG4gICAgYzogW1xuICAgICAgXCJNR1wiXG4gICAgXSxcbiAgICByOiAxXG4gIH0sXG4gIFwiSW5kaWFuL0NoYWdvc1wiOiB7XG4gICAgdTogMzYwLFxuICAgIGM6IFtcbiAgICAgIFwiSU9cIlxuICAgIF1cbiAgfSxcbiAgXCJJbmRpYW4vQ2hyaXN0bWFzXCI6IHtcbiAgICBhOiBcIkFzaWEvQmFuZ2tva1wiLFxuICAgIGM6IFtcbiAgICAgIFwiQ1hcIlxuICAgIF0sXG4gICAgcjogMVxuICB9LFxuICBcIkluZGlhbi9Db2Nvc1wiOiB7XG4gICAgYTogXCJBc2lhL1lhbmdvblwiLFxuICAgIGM6IFtcbiAgICAgIFwiQ0NcIlxuICAgIF0sXG4gICAgcjogMVxuICB9LFxuICBcIkluZGlhbi9Db21vcm9cIjoge1xuICAgIGE6IFwiQWZyaWNhL05haXJvYmlcIixcbiAgICBjOiBbXG4gICAgICBcIktNXCJcbiAgICBdLFxuICAgIHI6IDFcbiAgfSxcbiAgXCJJbmRpYW4vS2VyZ3VlbGVuXCI6IHtcbiAgICBhOiBcIkluZGlhbi9NYWxkaXZlc1wiLFxuICAgIGM6IFtcbiAgICAgIFwiVEZcIlxuICAgIF0sXG4gICAgcjogMVxuICB9LFxuICBcIkluZGlhbi9NYWhlXCI6IHtcbiAgICBhOiBcIkFzaWEvRHViYWlcIixcbiAgICBjOiBbXG4gICAgICBcIlNDXCJcbiAgICBdLFxuICAgIHI6IDFcbiAgfSxcbiAgXCJJbmRpYW4vTWFsZGl2ZXNcIjoge1xuICAgIHU6IDMwMCxcbiAgICBjOiBbXG4gICAgICBcIk1WXCIsXG4gICAgICBcIlRGXCJcbiAgICBdXG4gIH0sXG4gIFwiSW5kaWFuL01hdXJpdGl1c1wiOiB7XG4gICAgdTogMjQwLFxuICAgIGM6IFtcbiAgICAgIFwiTVVcIlxuICAgIF1cbiAgfSxcbiAgXCJJbmRpYW4vTWF5b3R0ZVwiOiB7XG4gICAgYTogXCJBZnJpY2EvTmFpcm9iaVwiLFxuICAgIGM6IFtcbiAgICAgIFwiWVRcIlxuICAgIF0sXG4gICAgcjogMVxuICB9LFxuICBcIkluZGlhbi9SZXVuaW9uXCI6IHtcbiAgICBhOiBcIkFzaWEvRHViYWlcIixcbiAgICBjOiBbXG4gICAgICBcIlJFXCJcbiAgICBdLFxuICAgIHI6IDFcbiAgfSxcbiAgSXJhbjoge1xuICAgIGE6IFwiQXNpYS9UZWhyYW5cIixcbiAgICByOiAxXG4gIH0sXG4gIElzcmFlbDoge1xuICAgIGE6IFwiQXNpYS9KZXJ1c2FsZW1cIixcbiAgICByOiAxXG4gIH0sXG4gIEphbWFpY2E6IHtcbiAgICBhOiBcIkFtZXJpY2EvSmFtYWljYVwiLFxuICAgIHI6IDFcbiAgfSxcbiAgSmFwYW46IHtcbiAgICBhOiBcIkFzaWEvVG9reW9cIixcbiAgICByOiAxXG4gIH0sXG4gIEt3YWphbGVpbjoge1xuICAgIGE6IFwiUGFjaWZpYy9Ld2FqYWxlaW5cIixcbiAgICByOiAxXG4gIH0sXG4gIExpYnlhOiB7XG4gICAgYTogXCJBZnJpY2EvVHJpcG9saVwiLFxuICAgIHI6IDFcbiAgfSxcbiAgTUVUOiB7XG4gICAgYTogXCJFdXJvcGUvQnJ1c3NlbHNcIixcbiAgICByOiAxXG4gIH0sXG4gIE1TVDoge1xuICAgIGE6IFwiQW1lcmljYS9QaG9lbml4XCIsXG4gICAgcjogMVxuICB9LFxuICBNU1Q3TURUOiB7XG4gICAgYTogXCJBbWVyaWNhL0RlbnZlclwiLFxuICAgIHI6IDFcbiAgfSxcbiAgXCJNZXhpY28vQmFqYU5vcnRlXCI6IHtcbiAgICBhOiBcIkFtZXJpY2EvVGlqdWFuYVwiLFxuICAgIHI6IDFcbiAgfSxcbiAgXCJNZXhpY28vQmFqYVN1clwiOiB7XG4gICAgYTogXCJBbWVyaWNhL01hemF0bGFuXCIsXG4gICAgcjogMVxuICB9LFxuICBcIk1leGljby9HZW5lcmFsXCI6IHtcbiAgICBhOiBcIkFtZXJpY2EvTWV4aWNvX0NpdHlcIixcbiAgICByOiAxXG4gIH0sXG4gIE5aOiB7XG4gICAgYTogXCJQYWNpZmljL0F1Y2tsYW5kXCIsXG4gICAgYzogW1xuICAgICAgXCJOWlwiXG4gICAgXSxcbiAgICByOiAxXG4gIH0sXG4gIFwiTlotQ0hBVFwiOiB7XG4gICAgYTogXCJQYWNpZmljL0NoYXRoYW1cIixcbiAgICByOiAxXG4gIH0sXG4gIE5hdmFqbzoge1xuICAgIGE6IFwiQW1lcmljYS9EZW52ZXJcIixcbiAgICByOiAxXG4gIH0sXG4gIFBSQzoge1xuICAgIGE6IFwiQXNpYS9TaGFuZ2hhaVwiLFxuICAgIHI6IDFcbiAgfSxcbiAgUFNUOFBEVDoge1xuICAgIGE6IFwiQW1lcmljYS9Mb3NfQW5nZWxlc1wiLFxuICAgIHI6IDFcbiAgfSxcbiAgXCJQYWNpZmljL0FwaWFcIjoge1xuICAgIHU6IDc4MCxcbiAgICBjOiBbXG4gICAgICBcIldTXCJcbiAgICBdXG4gIH0sXG4gIFwiUGFjaWZpYy9BdWNrbGFuZFwiOiB7XG4gICAgdTogNzIwLFxuICAgIGQ6IDc4MCxcbiAgICBjOiBbXG4gICAgICBcIk5aXCIsXG4gICAgICBcIkFRXCJcbiAgICBdXG4gIH0sXG4gIFwiUGFjaWZpYy9Cb3VnYWludmlsbGVcIjoge1xuICAgIHU6IDY2MCxcbiAgICBjOiBbXG4gICAgICBcIlBHXCJcbiAgICBdXG4gIH0sXG4gIFwiUGFjaWZpYy9DaGF0aGFtXCI6IHtcbiAgICB1OiA3NjUsXG4gICAgZDogODI1LFxuICAgIGM6IFtcbiAgICAgIFwiTlpcIlxuICAgIF1cbiAgfSxcbiAgXCJQYWNpZmljL0NodXVrXCI6IHtcbiAgICBhOiBcIlBhY2lmaWMvUG9ydF9Nb3Jlc2J5XCIsXG4gICAgYzogW1xuICAgICAgXCJGTVwiXG4gICAgXSxcbiAgICByOiAxXG4gIH0sXG4gIFwiUGFjaWZpYy9FYXN0ZXJcIjoge1xuICAgIHU6IC0zNjAsXG4gICAgZDogLTMwMCxcbiAgICBjOiBbXG4gICAgICBcIkNMXCJcbiAgICBdXG4gIH0sXG4gIFwiUGFjaWZpYy9FZmF0ZVwiOiB7XG4gICAgdTogNjYwLFxuICAgIGM6IFtcbiAgICAgIFwiVlVcIlxuICAgIF1cbiAgfSxcbiAgXCJQYWNpZmljL0VuZGVyYnVyeVwiOiB7XG4gICAgYTogXCJQYWNpZmljL0thbnRvblwiLFxuICAgIHI6IDFcbiAgfSxcbiAgXCJQYWNpZmljL0Zha2FvZm9cIjoge1xuICAgIHU6IDc4MCxcbiAgICBjOiBbXG4gICAgICBcIlRLXCJcbiAgICBdXG4gIH0sXG4gIFwiUGFjaWZpYy9GaWppXCI6IHtcbiAgICB1OiA3MjAsXG4gICAgYzogW1xuICAgICAgXCJGSlwiXG4gICAgXVxuICB9LFxuICBcIlBhY2lmaWMvRnVuYWZ1dGlcIjoge1xuICAgIGE6IFwiUGFjaWZpYy9UYXJhd2FcIixcbiAgICBjOiBbXG4gICAgICBcIlRWXCJcbiAgICBdLFxuICAgIHI6IDFcbiAgfSxcbiAgXCJQYWNpZmljL0dhbGFwYWdvc1wiOiB7XG4gICAgdTogLTM2MCxcbiAgICBjOiBbXG4gICAgICBcIkVDXCJcbiAgICBdXG4gIH0sXG4gIFwiUGFjaWZpYy9HYW1iaWVyXCI6IHtcbiAgICB1OiAtNTQwLFxuICAgIGM6IFtcbiAgICAgIFwiUEZcIlxuICAgIF1cbiAgfSxcbiAgXCJQYWNpZmljL0d1YWRhbGNhbmFsXCI6IHtcbiAgICB1OiA2NjAsXG4gICAgYzogW1xuICAgICAgXCJTQlwiLFxuICAgICAgXCJGTVwiXG4gICAgXVxuICB9LFxuICBcIlBhY2lmaWMvR3VhbVwiOiB7XG4gICAgdTogNjAwLFxuICAgIGM6IFtcbiAgICAgIFwiR1VcIixcbiAgICAgIFwiTVBcIlxuICAgIF1cbiAgfSxcbiAgXCJQYWNpZmljL0hvbm9sdWx1XCI6IHtcbiAgICB1OiAtNjAwLFxuICAgIGM6IFtcbiAgICAgIFwiVVNcIlxuICAgIF1cbiAgfSxcbiAgXCJQYWNpZmljL0pvaG5zdG9uXCI6IHtcbiAgICBhOiBcIlBhY2lmaWMvSG9ub2x1bHVcIixcbiAgICBjOiBbXG4gICAgICBcIlVNXCJcbiAgICBdLFxuICAgIHI6IDFcbiAgfSxcbiAgXCJQYWNpZmljL0thbnRvblwiOiB7XG4gICAgdTogNzgwLFxuICAgIGM6IFtcbiAgICAgIFwiS0lcIlxuICAgIF1cbiAgfSxcbiAgXCJQYWNpZmljL0tpcml0aW1hdGlcIjoge1xuICAgIHU6IDg0MCxcbiAgICBjOiBbXG4gICAgICBcIktJXCJcbiAgICBdXG4gIH0sXG4gIFwiUGFjaWZpYy9Lb3NyYWVcIjoge1xuICAgIHU6IDY2MCxcbiAgICBjOiBbXG4gICAgICBcIkZNXCJcbiAgICBdXG4gIH0sXG4gIFwiUGFjaWZpYy9Ld2FqYWxlaW5cIjoge1xuICAgIHU6IDcyMCxcbiAgICBjOiBbXG4gICAgICBcIk1IXCJcbiAgICBdXG4gIH0sXG4gIFwiUGFjaWZpYy9NYWp1cm9cIjoge1xuICAgIGE6IFwiUGFjaWZpYy9UYXJhd2FcIixcbiAgICBjOiBbXG4gICAgICBcIk1IXCJcbiAgICBdLFxuICAgIHI6IDFcbiAgfSxcbiAgXCJQYWNpZmljL01hcnF1ZXNhc1wiOiB7XG4gICAgdTogLTU3MCxcbiAgICBjOiBbXG4gICAgICBcIlBGXCJcbiAgICBdXG4gIH0sXG4gIFwiUGFjaWZpYy9NaWR3YXlcIjoge1xuICAgIGE6IFwiUGFjaWZpYy9QYWdvX1BhZ29cIixcbiAgICBjOiBbXG4gICAgICBcIlVNXCJcbiAgICBdLFxuICAgIHI6IDFcbiAgfSxcbiAgXCJQYWNpZmljL05hdXJ1XCI6IHtcbiAgICB1OiA3MjAsXG4gICAgYzogW1xuICAgICAgXCJOUlwiXG4gICAgXVxuICB9LFxuICBcIlBhY2lmaWMvTml1ZVwiOiB7XG4gICAgdTogLTY2MCxcbiAgICBjOiBbXG4gICAgICBcIk5VXCJcbiAgICBdXG4gIH0sXG4gIFwiUGFjaWZpYy9Ob3Jmb2xrXCI6IHtcbiAgICB1OiA2NjAsXG4gICAgZDogNzIwLFxuICAgIGM6IFtcbiAgICAgIFwiTkZcIlxuICAgIF1cbiAgfSxcbiAgXCJQYWNpZmljL05vdW1lYVwiOiB7XG4gICAgdTogNjYwLFxuICAgIGM6IFtcbiAgICAgIFwiTkNcIlxuICAgIF1cbiAgfSxcbiAgXCJQYWNpZmljL1BhZ29fUGFnb1wiOiB7XG4gICAgdTogLTY2MCxcbiAgICBjOiBbXG4gICAgICBcIkFTXCIsXG4gICAgICBcIlVNXCJcbiAgICBdXG4gIH0sXG4gIFwiUGFjaWZpYy9QYWxhdVwiOiB7XG4gICAgdTogNTQwLFxuICAgIGM6IFtcbiAgICAgIFwiUFdcIlxuICAgIF1cbiAgfSxcbiAgXCJQYWNpZmljL1BpdGNhaXJuXCI6IHtcbiAgICB1OiAtNDgwLFxuICAgIGM6IFtcbiAgICAgIFwiUE5cIlxuICAgIF1cbiAgfSxcbiAgXCJQYWNpZmljL1BvaG5wZWlcIjoge1xuICAgIGE6IFwiUGFjaWZpYy9HdWFkYWxjYW5hbFwiLFxuICAgIGM6IFtcbiAgICAgIFwiRk1cIlxuICAgIF0sXG4gICAgcjogMVxuICB9LFxuICBcIlBhY2lmaWMvUG9uYXBlXCI6IHtcbiAgICBhOiBcIlBhY2lmaWMvR3VhZGFsY2FuYWxcIixcbiAgICBjOiBbXG4gICAgICBcIkZNXCJcbiAgICBdLFxuICAgIHI6IDFcbiAgfSxcbiAgXCJQYWNpZmljL1BvcnRfTW9yZXNieVwiOiB7XG4gICAgdTogNjAwLFxuICAgIGM6IFtcbiAgICAgIFwiUEdcIixcbiAgICAgIFwiQVFcIixcbiAgICAgIFwiRk1cIlxuICAgIF1cbiAgfSxcbiAgXCJQYWNpZmljL1Jhcm90b25nYVwiOiB7XG4gICAgdTogLTYwMCxcbiAgICBjOiBbXG4gICAgICBcIkNLXCJcbiAgICBdXG4gIH0sXG4gIFwiUGFjaWZpYy9TYWlwYW5cIjoge1xuICAgIGE6IFwiUGFjaWZpYy9HdWFtXCIsXG4gICAgYzogW1xuICAgICAgXCJNUFwiXG4gICAgXSxcbiAgICByOiAxXG4gIH0sXG4gIFwiUGFjaWZpYy9TYW1vYVwiOiB7XG4gICAgYTogXCJQYWNpZmljL1BhZ29fUGFnb1wiLFxuICAgIGM6IFtcbiAgICAgIFwiQVNcIlxuICAgIF0sXG4gICAgcjogMVxuICB9LFxuICBcIlBhY2lmaWMvVGFoaXRpXCI6IHtcbiAgICB1OiAtNjAwLFxuICAgIGM6IFtcbiAgICAgIFwiUEZcIlxuICAgIF1cbiAgfSxcbiAgXCJQYWNpZmljL1RhcmF3YVwiOiB7XG4gICAgdTogNzIwLFxuICAgIGM6IFtcbiAgICAgIFwiS0lcIixcbiAgICAgIFwiTUhcIixcbiAgICAgIFwiVFZcIixcbiAgICAgIFwiVU1cIixcbiAgICAgIFwiV0ZcIlxuICAgIF1cbiAgfSxcbiAgXCJQYWNpZmljL1RvbmdhdGFwdVwiOiB7XG4gICAgdTogNzgwLFxuICAgIGM6IFtcbiAgICAgIFwiVE9cIlxuICAgIF1cbiAgfSxcbiAgXCJQYWNpZmljL1RydWtcIjoge1xuICAgIGE6IFwiUGFjaWZpYy9Qb3J0X01vcmVzYnlcIixcbiAgICBjOiBbXG4gICAgICBcIkZNXCJcbiAgICBdLFxuICAgIHI6IDFcbiAgfSxcbiAgXCJQYWNpZmljL1dha2VcIjoge1xuICAgIGE6IFwiUGFjaWZpYy9UYXJhd2FcIixcbiAgICBjOiBbXG4gICAgICBcIlVNXCJcbiAgICBdLFxuICAgIHI6IDFcbiAgfSxcbiAgXCJQYWNpZmljL1dhbGxpc1wiOiB7XG4gICAgYTogXCJQYWNpZmljL1RhcmF3YVwiLFxuICAgIGM6IFtcbiAgICAgIFwiV0ZcIlxuICAgIF0sXG4gICAgcjogMVxuICB9LFxuICBcIlBhY2lmaWMvWWFwXCI6IHtcbiAgICBhOiBcIlBhY2lmaWMvUG9ydF9Nb3Jlc2J5XCIsXG4gICAgYzogW1xuICAgICAgXCJGTVwiXG4gICAgXSxcbiAgICByOiAxXG4gIH0sXG4gIFBvbGFuZDoge1xuICAgIGE6IFwiRXVyb3BlL1dhcnNhd1wiLFxuICAgIHI6IDFcbiAgfSxcbiAgUG9ydHVnYWw6IHtcbiAgICBhOiBcIkV1cm9wZS9MaXNib25cIixcbiAgICByOiAxXG4gIH0sXG4gIFJPQzoge1xuICAgIGE6IFwiQXNpYS9UYWlwZWlcIixcbiAgICByOiAxXG4gIH0sXG4gIFJPSzoge1xuICAgIGE6IFwiQXNpYS9TZW91bFwiLFxuICAgIHI6IDFcbiAgfSxcbiAgU2luZ2Fwb3JlOiB7XG4gICAgYTogXCJBc2lhL1NpbmdhcG9yZVwiLFxuICAgIGM6IFtcbiAgICAgIFwiU0dcIlxuICAgIF0sXG4gICAgcjogMVxuICB9LFxuICBUdXJrZXk6IHtcbiAgICBhOiBcIkV1cm9wZS9Jc3RhbmJ1bFwiLFxuICAgIHI6IDFcbiAgfSxcbiAgVUNUOiB7XG4gICAgYTogXCJFdGMvVVRDXCIsXG4gICAgcjogMVxuICB9LFxuICBcIlVTL0FsYXNrYVwiOiB7XG4gICAgYTogXCJBbWVyaWNhL0FuY2hvcmFnZVwiLFxuICAgIHI6IDFcbiAgfSxcbiAgXCJVUy9BbGV1dGlhblwiOiB7XG4gICAgYTogXCJBbWVyaWNhL0FkYWtcIixcbiAgICByOiAxXG4gIH0sXG4gIFwiVVMvQXJpem9uYVwiOiB7XG4gICAgYTogXCJBbWVyaWNhL1Bob2VuaXhcIixcbiAgICBjOiBbXG4gICAgICBcIlVTXCJcbiAgICBdLFxuICAgIHI6IDFcbiAgfSxcbiAgXCJVUy9DZW50cmFsXCI6IHtcbiAgICBhOiBcIkFtZXJpY2EvQ2hpY2Fnb1wiLFxuICAgIHI6IDFcbiAgfSxcbiAgXCJVUy9FYXN0LUluZGlhbmFcIjoge1xuICAgIGE6IFwiQW1lcmljYS9JbmRpYW5hL0luZGlhbmFwb2xpc1wiLFxuICAgIHI6IDFcbiAgfSxcbiAgXCJVUy9FYXN0ZXJuXCI6IHtcbiAgICBhOiBcIkFtZXJpY2EvTmV3X1lvcmtcIixcbiAgICByOiAxXG4gIH0sXG4gIFwiVVMvSGF3YWlpXCI6IHtcbiAgICBhOiBcIlBhY2lmaWMvSG9ub2x1bHVcIixcbiAgICByOiAxXG4gIH0sXG4gIFwiVVMvSW5kaWFuYS1TdGFya2VcIjoge1xuICAgIGE6IFwiQW1lcmljYS9JbmRpYW5hL0tub3hcIixcbiAgICByOiAxXG4gIH0sXG4gIFwiVVMvTWljaGlnYW5cIjoge1xuICAgIGE6IFwiQW1lcmljYS9EZXRyb2l0XCIsXG4gICAgcjogMVxuICB9LFxuICBcIlVTL01vdW50YWluXCI6IHtcbiAgICBhOiBcIkFtZXJpY2EvRGVudmVyXCIsXG4gICAgcjogMVxuICB9LFxuICBcIlVTL1BhY2lmaWNcIjoge1xuICAgIGE6IFwiQW1lcmljYS9Mb3NfQW5nZWxlc1wiLFxuICAgIHI6IDFcbiAgfSxcbiAgXCJVUy9TYW1vYVwiOiB7XG4gICAgYTogXCJQYWNpZmljL1BhZ29fUGFnb1wiLFxuICAgIGM6IFtcbiAgICAgIFwiQVNcIlxuICAgIF0sXG4gICAgcjogMVxuICB9LFxuICBVVEM6IHtcbiAgICBhOiBcIkV0Yy9VVENcIixcbiAgICByOiAxXG4gIH0sXG4gIFVuaXZlcnNhbDoge1xuICAgIGE6IFwiRXRjL1VUQ1wiLFxuICAgIHI6IDFcbiAgfSxcbiAgXCJXLVNVXCI6IHtcbiAgICBhOiBcIkV1cm9wZS9Nb3Njb3dcIixcbiAgICByOiAxXG4gIH0sXG4gIFdFVDoge1xuICAgIGE6IFwiRXVyb3BlL0xpc2JvblwiLFxuICAgIHI6IDFcbiAgfSxcbiAgWnVsdToge1xuICAgIGE6IFwiRXRjL1VUQ1wiLFxuICAgIHI6IDFcbiAgfVxufSwgWnIgPSB7XG4gIGNvdW50cmllczogY0ssXG4gIHRpbWV6b25lczogbEtcbn0sIHhhO1xuZnVuY3Rpb24gcEsoZSwgdCkge1xuICB2YXIgbyA9IGUuY291bnRyaWVzW3RdO1xuICBpZiAoIW8pXG4gICAgcmV0dXJuIG51bGw7XG4gIHZhciBuID0gZEsoZSlbdF0gfHwge307XG4gIHJldHVybiB7XG4gICAgaWQ6IHQsXG4gICAgbmFtZTogbyxcbiAgICB0aW1lem9uZXM6IG4uY3VycmVudCB8fCBbXSxcbiAgICBhbGxUaW1lem9uZXM6IG4uYWxsIHx8IFtdXG4gIH07XG59XG5mdW5jdGlvbiBkSyhlKSB7XG4gIHJldHVybiB4YSB8fCAoeGEgPSBiSyhlKSksIHhhO1xufVxuZnVuY3Rpb24gYksoZSkge1xuICByZXR1cm4gT2JqZWN0LmtleXMoZS50aW1lem9uZXMpLnJlZHVjZShmdW5jdGlvbih0LCBvKSB7XG4gICAgdmFyIG4gPSBlLnRpbWV6b25lc1tvXSwgciA9IG4uYywgaSA9IG4uYSwgYSA9IGUudGltZXpvbmVzW2ldIHx8IHt9LCBzID0gciB8fCBhLmM7XG4gICAgaWYgKCFzKVxuICAgICAgcmV0dXJuIHQ7XG4gICAgdmFyIGwgPSBlSyhzKSwgcDtcbiAgICB0cnkge1xuICAgICAgZm9yIChsLnMoKTsgIShwID0gbC5uKCkpLmRvbmU7ICkge1xuICAgICAgICB2YXIgZCA9IHAudmFsdWU7XG4gICAgICAgIHRbZF0gfHwgT2JqZWN0LmFzc2lnbih0LCB6aSh7fSwgZCwge1xuICAgICAgICAgIGN1cnJlbnQ6IFtdLFxuICAgICAgICAgIGFsbDogW11cbiAgICAgICAgfSkpLCBuLnIgPT09IHZvaWQgMCAmJiB0W2RdLmN1cnJlbnQucHVzaChvKSwgdFtkXS5hbGwucHVzaChvKTtcbiAgICAgIH1cbiAgICB9IGNhdGNoIChiKSB7XG4gICAgICBsLmUoYik7XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIGwuZigpO1xuICAgIH1cbiAgICByZXR1cm4gdDtcbiAgfSwge30pO1xufVxuZnVuY3Rpb24gTUsoZSwgdCkge1xuICB2YXIgbyA9IGUudGltZXpvbmVzW3RdO1xuICBpZiAoIW8pXG4gICAgcmV0dXJuIG51bGw7XG4gIHZhciBuID0gby5hLCByID0gbiA9PT0gdm9pZCAwID8gbnVsbCA6IG4sIGkgPSByID8gZS50aW1lem9uZXNbcl0gOiB7fSwgYSA9IFJyKFJyKHt9LCBpKSwgZS50aW1lem9uZXNbdF0pLCBzID0gYS5jIHx8IFtdLCBsID0gYS51LCBwID0gTnVtYmVyLmlzSW50ZWdlcihhLmQpID8gYS5kIDogbCwgZCA9IHtcbiAgICBuYW1lOiB0LFxuICAgIGNvdW50cmllczogcyxcbiAgICB1dGNPZmZzZXQ6IGwsXG4gICAgdXRjT2Zmc2V0U3RyOiBZYyhsKSxcbiAgICBkc3RPZmZzZXQ6IHAsXG4gICAgZHN0T2Zmc2V0U3RyOiBZYyhwKSxcbiAgICBhbGlhc09mOiByXG4gIH07XG4gIHJldHVybiBvLnIgJiYgKGQuZGVwcmVjYXRlZCA9ICEwKSwgZDtcbn1cbmZ1bmN0aW9uIFljKGUpIHtcbiAgdmFyIHQgPSBNYXRoLmZsb29yKE1hdGguYWJzKGUpIC8gNjApLCBvID0gZSAlIDYwLCBuID0gZSA8IDAgPyBcIi1cIiA6IFwiK1wiO1xuICByZXR1cm4gXCJcIi5jb25jYXQobikuY29uY2F0KEdjKHQpLCBcIjpcIikuY29uY2F0KEdjKG8pKTtcbn1cbmZ1bmN0aW9uIEdjKGUpIHtcbiAgdmFyIHQgPSBNYXRoLmFicyhlKSwgbyA9IHQgPCAxMCA/IFwiMFwiIDogXCJcIjtcbiAgcmV0dXJuIFwiXCIuY29uY2F0KG8pLmNvbmNhdCh0KTtcbn1cbnZhciBBSyA9IFtcImFsbFRpbWV6b25lc1wiXSwgdUsgPSBPYmplY3Qua2V5cyhaci50aW1lem9uZXMpLmxlbmd0aCwgRTUgPSB7fSwgb3IgPSB7fSwgak0gPSAwO1xuZnVuY3Rpb24geksoKSB7XG4gIHZhciBlID0gYXJndW1lbnRzLmxlbmd0aCA+IDAgJiYgYXJndW1lbnRzWzBdICE9PSB2b2lkIDAgPyBhcmd1bWVudHNbMF0gOiB7fTtcbiAgcmV0dXJuIE9iamVjdC5rZXlzKFpyLmNvdW50cmllcykucmVkdWNlKGZ1bmN0aW9uKHQsIG8pIHtcbiAgICByZXR1cm4gT2JqZWN0LmFzc2lnbih0LCB6aSh7fSwgbywgaGkobywgZSkpKTtcbiAgfSwge30pO1xufVxuZnVuY3Rpb24gaEsoKSB7XG4gIHZhciBlID0gYXJndW1lbnRzLmxlbmd0aCA+IDAgJiYgYXJndW1lbnRzWzBdICE9PSB2b2lkIDAgPyBhcmd1bWVudHNbMF0gOiB7fTtcbiAgaWYgKHVLICE9PSBqTSlcbiAgICBmb3IgKHZhciB0ID0gMCwgbyA9IE9iamVjdC5rZXlzKFpyLnRpbWV6b25lcyk7IHQgPCBvLmxlbmd0aDsgdCsrKSB7XG4gICAgICB2YXIgbiA9IG9bdF07XG4gICAgICBPaShuKTtcbiAgICB9XG4gIHJldHVybiBtSyhvciwgZSk7XG59XG5mdW5jdGlvbiBoaShlKSB7XG4gIHZhciB0ID0gYXJndW1lbnRzLmxlbmd0aCA+IDEgJiYgYXJndW1lbnRzWzFdICE9PSB2b2lkIDAgPyBhcmd1bWVudHNbMV0gOiB7fTtcbiAgcmV0dXJuIEU1W2VdIHx8IE9LKHBLKFpyLCBlKSksIExLKEU1W2VdLCB0KTtcbn1cbmZ1bmN0aW9uIE9LKGUpIHtcbiAgZSAmJiAoRTVbZS5pZF0gPSBlKTtcbn1cbmZ1bmN0aW9uIE9pKGUpIHtcbiAgcmV0dXJuIG9yW2VdIHx8IGZLKE1LKFpyLCBlKSksIG9yW2VdID8gUnIoe30sIG9yW2VdKSA6IG51bGw7XG59XG5mdW5jdGlvbiBmSyhlKSB7XG4gIGUgJiYgKG9yW2UubmFtZV0gPSBlLCBqTSA9IE9iamVjdC5rZXlzKGUpLmxlbmd0aCk7XG59XG5mdW5jdGlvbiBLTShlKSB7XG4gIHZhciB0ID0gYXJndW1lbnRzLmxlbmd0aCA+IDEgJiYgYXJndW1lbnRzWzFdICE9PSB2b2lkIDAgPyBhcmd1bWVudHNbMV0gOiB7fSwgbyA9IE9pKGUpIHx8IHt9LCBuID0gby5jb3VudHJpZXMgfHwgW107XG4gIHJldHVybiBuLm1hcChmdW5jdGlvbihyKSB7XG4gICAgcmV0dXJuIGhpKHIsIHQpO1xuICB9KTtcbn1cbmZ1bmN0aW9uIGdLKGUpIHtcbiAgdmFyIHQgPSBhcmd1bWVudHMubGVuZ3RoID4gMSAmJiBhcmd1bWVudHNbMV0gIT09IHZvaWQgMCA/IGFyZ3VtZW50c1sxXSA6IHt9LCBvID0gS00oZSwgdCksIG4gPSBpSyhvLCAxKSwgciA9IG5bMF07XG4gIHJldHVybiByIHx8IG51bGw7XG59XG5mdW5jdGlvbiBDSyhlKSB7XG4gIHZhciB0ID0gYXJndW1lbnRzLmxlbmd0aCA+IDEgJiYgYXJndW1lbnRzWzFdICE9PSB2b2lkIDAgPyBhcmd1bWVudHNbMV0gOiB7fSwgbyA9IGhpKGUsIHQpO1xuICBpZiAoIW8pXG4gICAgcmV0dXJuIG51bGw7XG4gIHZhciBuID0gby50aW1lem9uZXMgfHwgW107XG4gIHJldHVybiBuLm1hcChmdW5jdGlvbihyKSB7XG4gICAgcmV0dXJuIE9pKHIpO1xuICB9KTtcbn1cbmZ1bmN0aW9uIG1LKGUsIHQpIHtcbiAgdmFyIG8gPSB0IHx8IHt9LCBuID0gby5kZXByZWNhdGVkO1xuICByZXR1cm4gbiA9PT0gITAgPyBlIDogT2JqZWN0LmtleXMoZSkucmVkdWNlKGZ1bmN0aW9uKHIsIGkpIHtcbiAgICByZXR1cm4gZVtpXS5kZXByZWNhdGVkIHx8IE9iamVjdC5hc3NpZ24ociwgemkoe30sIGksIGVbaV0pKSwgcjtcbiAgfSwge30pO1xufVxuZnVuY3Rpb24gTEsoZSwgdCkge1xuICBpZiAoIWUpXG4gICAgcmV0dXJuIG51bGw7XG4gIHZhciBvID0gdCB8fCB7fSwgbiA9IG8uZGVwcmVjYXRlZDtcbiAgZS5hbGxUaW1lem9uZXM7XG4gIHZhciByID0gcksoZSwgQUspLCBpID0gbiA/IGUuYWxsVGltZXpvbmVzIDogZS50aW1lem9uZXM7XG4gIHJldHVybiBScihScih7fSwgciksIHt9LCB7XG4gICAgdGltZXpvbmVzOiBpXG4gIH0pO1xufVxudmFyIHZLID0ge1xuICBnZXRDb3VudHJ5OiBoaSxcbiAgZ2V0VGltZXpvbmU6IE9pLFxuICBnZXRBbGxDb3VudHJpZXM6IHpLLFxuICBnZXRBbGxUaW1lem9uZXM6IGhLLFxuICBnZXRUaW1lem9uZXNGb3JDb3VudHJ5OiBDSyxcbiAgZ2V0Q291bnRyaWVzRm9yVGltZXpvbmU6IEtNLFxuICBnZXRDb3VudHJ5Rm9yVGltZXpvbmU6IGdLXG59O1xuY29uc3QgcUsgPSAkLmRpdihcbiAgKHtcbiAgICB0aGVtZTogeyBjb2xvcnM6IGUsIGZvbnRGYW1pbHk6IHQsIHR5cG9ncmFwaHk6IG8sIGZvbnRXZWlnaHQ6IG4sIHNwYWNpbmdzOiByIH0sXG4gICAgcGFkZGluZzogaVxuICB9KSA9PiBvMWBcbiAgICBmb250LWZhbWlseTogJHt0LmJhc2V9O1xuICAgIGZvbnQtc2l6ZTogJHtvLnQ5fTtcbiAgICBmb250LXdlaWdodDogJHtuLnJlZ3VsYXJ9O1xuICAgIGxpbmUtaGVpZ2h0OiAxMnB4O1xuICAgIGNvbG9yOiAke2UudGV4dEljb24udGV4dEVycm9yfTtcbiAgICBwYWRkaW5nLWxlZnQ6ICR7aSA/IFwiODMuMnB4XCIgOiByLnNwOH07XG4gICAgd2lkdGg6IDI1MHB4O1xuICBgXG4pLCB5SyA9ICQuZGl2KFxuICAoe1xuICAgIHRoZW1lOiB7IGNvbG9yczogZSwgZm9udEZhbWlseTogdCwgdHlwb2dyYXBoeTogbywgZm9udFdlaWdodDogbiwgbGluZUhlaWdodDogciB9XG4gIH0pID0+IG8xYFxuICAgIGZvbnQtZmFtaWx5OiAke3QuYmFzZX07XG4gICAgZm9udC1zaXplOiAke28udDEwfTtcbiAgICBmb250LXdlaWdodDogJHtuLnJlZ3VsYXJ9O1xuICAgIGxpbmUtaGVpZ2h0OiAke3IubGgxNH07XG4gICAgY29sb3I6ICR7ZS50ZXh0SWNvbi50ZXh0UHJpbWFyeX07XG4gICAgcG9zaXRpb246IGFic29sdXRlO1xuICBgXG4pLCB3SyA9ICQuZGl2KFxuICAoeyB0aGVtZTogeyBjb2xvcnM6IGUgfSwgJGlzRXJyb3I6IHQgfSkgPT4gbzFgXG4gICAgJHt0ICYmIG8xYFxuICAgICAgaW5wdXQge1xuICAgICAgICBib3JkZXI6IDFweCBzb2xpZCAke2UuYm9yZGVyLmJvcmRlckVycm9yfTtcbiAgICAgIH1cbiAgICBgfVxuICBgXG4pLCB4SyA9ICQuZGl2YFxuICBkaXNwbGF5OiBmbGV4O1xuICBhbGlnbi1pdGVtczogZmxleC1lbmQ7XG4gIGdhcDogOHB4O1xuICBtYXJnaW4tYm90dG9tOiA4cHg7XG5gLCBXSyA9ICQuZGl2KFxuICAoeyAkbWF4V2lkdGg6IGUgfSkgPT4gbzFgXG4gICAgZmxleC1iYXNpczogMTAwcHg7XG4gICAgbWluLXdpZHRoOiAxMDBweDtcbiAgICAke2UgPT0gXCIxMDBweFwiICYmIG8xYFxuICAgICAgLmlucHV0X19sYWJlbCB7XG4gICAgICAgIGRpc3BsYXk6IG5vbmU7XG4gICAgICB9XG4gICAgYH1cbiAgICAke2UgIT0gXCIxMDBweFwiICYmIG8xYFxuICAgICAgLmlucHV0X19sYWJlbCB7XG4gICAgICAgIHdpZHRoOiAyMDBweDtcbiAgICAgIH1cbiAgICBgfVxuXG4gICAgaW5wdXQge1xuICAgICAgcGFkZGluZzogMCAxMHB4IDAgMjhweCAhaW1wb3J0YW50O1xuICAgIH1cbiAgYFxuKSwgUksgPSAkLmRpdmBcbiAgZmxleC1ncm93OiAxO1xuICBzcGFuIHtcbiAgICBkaXNwbGF5OiBub25lO1xuICB9XG5gO1xuJC5kaXZgYDtcbiQuZGl2YGA7XG5jb25zdCBKZSA9IFtcbiAgeyBjb2RlOiBcIkFEXCIsIGxhYmVsOiBcIkFuZG9ycmFcIiwgcGhvbmU6IFwiMzc2XCIsIHBob25lTGVuZ3RoOiA2IH0sXG4gIHsgY29kZTogXCJBRVwiLCBsYWJlbDogXCJVbml0ZWQgQXJhYiBFbWlyYXRlc1wiLCBwaG9uZTogXCI5NzFcIiwgcGhvbmVMZW5ndGg6IDkgfSxcbiAgeyBjb2RlOiBcIkFGXCIsIGxhYmVsOiBcIkFmZ2hhbmlzdGFuXCIsIHBob25lOiBcIjkzXCIsIHBob25lTGVuZ3RoOiA5IH0sXG4gIHsgY29kZTogXCJBR1wiLCBsYWJlbDogXCJBbnRpZ3VhIGFuZCBCYXJidWRhXCIsIHBob25lOiBcIjEyNjhcIiwgcGhvbmVMZW5ndGg6IDEwIH0sXG4gIHsgY29kZTogXCJBSVwiLCBsYWJlbDogXCJBbmd1aWxsYVwiLCBwaG9uZTogXCIxMjY0XCIsIHBob25lTGVuZ3RoOiAxMCB9LFxuICB7IGNvZGU6IFwiQUxcIiwgbGFiZWw6IFwiQWxiYW5pYVwiLCBwaG9uZTogXCIzNTVcIiwgcGhvbmVMZW5ndGg6IDkgfSxcbiAgeyBjb2RlOiBcIkFNXCIsIGxhYmVsOiBcIkFybWVuaWFcIiwgcGhvbmU6IFwiMzc0XCIsIHBob25lTGVuZ3RoOiA2IH0sXG4gIHsgY29kZTogXCJBT1wiLCBsYWJlbDogXCJBbmdvbGFcIiwgcGhvbmU6IFwiMjQ0XCIsIHBob25lTGVuZ3RoOiA5IH0sXG4gIHsgY29kZTogXCJBUVwiLCBsYWJlbDogXCJBbnRhcmN0aWNhXCIsIHBob25lOiBcIjY3MlwiLCBwaG9uZUxlbmd0aDogNiB9LFxuICB7IGNvZGU6IFwiQVJcIiwgbGFiZWw6IFwiQXJnZW50aW5hXCIsIHBob25lOiBcIjU0XCIsIHBob25lTGVuZ3RoOiBbNiwgNywgOF0gfSxcbiAgeyBjb2RlOiBcIkFTXCIsIGxhYmVsOiBcIkFtZXJpY2FuIFNhbW9hXCIsIHBob25lOiBcIjE2ODRcIiwgcGhvbmVMZW5ndGg6IDEwIH0sXG4gIHsgY29kZTogXCJBVFwiLCBsYWJlbDogXCJBdXN0cmlhXCIsIHBob25lOiBcIjQzXCIsIHBob25lTGVuZ3RoOiBbMTAsIDExXSB9LFxuICB7XG4gICAgY29kZTogXCJBVVwiLFxuICAgIGxhYmVsOiBcIkF1c3RyYWxpYVwiLFxuICAgIHBob25lOiBcIjYxXCIsXG4gICAgc3VnZ2VzdGVkOiAhMCxcbiAgICBwaG9uZUxlbmd0aDogOVxuICB9LFxuICB7IGNvZGU6IFwiQVdcIiwgbGFiZWw6IFwiQXJ1YmFcIiwgcGhvbmU6IFwiMjk3XCIsIHBob25lTGVuZ3RoOiA3IH0sXG4gIHsgY29kZTogXCJBWFwiLCBsYWJlbDogXCJBbGxhbmQgSXNsYW5kc1wiLCBwaG9uZTogXCIzNThcIiwgbWluOiA3LCBtYXg6IDEwIH0sXG4gIHsgY29kZTogXCJBWlwiLCBsYWJlbDogXCJBemVyYmFpamFuXCIsIHBob25lOiBcIjk5NFwiLCBwaG9uZUxlbmd0aDogOSB9LFxuICB7IGNvZGU6IFwiQkFcIiwgbGFiZWw6IFwiQm9zbmlhIGFuZCBIZXJ6ZWdvdmluYVwiLCBwaG9uZTogXCIzODdcIiwgcGhvbmVMZW5ndGg6IDggfSxcbiAgeyBjb2RlOiBcIkJCXCIsIGxhYmVsOiBcIkJhcmJhZG9zXCIsIHBob25lOiBcIjEyNDZcIiwgcGhvbmVMZW5ndGg6IDEwIH0sXG4gIHsgY29kZTogXCJCRFwiLCBsYWJlbDogXCJCYW5nbGFkZXNoXCIsIHBob25lOiBcIjg4MFwiLCBwaG9uZUxlbmd0aDogMTAgfSxcbiAgeyBjb2RlOiBcIkJFXCIsIGxhYmVsOiBcIkJlbGdpdW1cIiwgcGhvbmU6IFwiMzJcIiwgcGhvbmVMZW5ndGg6IDkgfSxcbiAgeyBjb2RlOiBcIkJGXCIsIGxhYmVsOiBcIkJ1cmtpbmEgRmFzb1wiLCBwaG9uZTogXCIyMjZcIiwgcGhvbmVMZW5ndGg6IDggfSxcbiAgeyBjb2RlOiBcIkJHXCIsIGxhYmVsOiBcIkJ1bGdhcmlhXCIsIHBob25lOiBcIjM1OVwiLCBwaG9uZUxlbmd0aDogOSB9LFxuICB7IGNvZGU6IFwiQkhcIiwgbGFiZWw6IFwiQmFocmFpblwiLCBwaG9uZTogXCI5NzNcIiwgcGhvbmVMZW5ndGg6IDggfSxcbiAgeyBjb2RlOiBcIkJJXCIsIGxhYmVsOiBcIkJ1cnVuZGlcIiwgcGhvbmU6IFwiMjU3XCIsIHBob25lTGVuZ3RoOiA4IH0sXG4gIHsgY29kZTogXCJCSlwiLCBsYWJlbDogXCJCZW5pblwiLCBwaG9uZTogXCIyMjlcIiwgcGhvbmVMZW5ndGg6IDggfSxcbiAgeyBjb2RlOiBcIkJMXCIsIGxhYmVsOiBcIlNhaW50IEJhcnRoZWxlbXlcIiwgcGhvbmU6IFwiNTkwXCIsIHBob25lTGVuZ3RoOiA5IH0sXG4gIHsgY29kZTogXCJCTVwiLCBsYWJlbDogXCJCZXJtdWRhXCIsIHBob25lOiBcIjE0NDFcIiwgcGhvbmVMZW5ndGg6IDEwIH0sXG4gIHsgY29kZTogXCJCTlwiLCBsYWJlbDogXCJCcnVuZWkgRGFydXNzYWxhbVwiLCBwaG9uZTogXCI2NzNcIiwgcGhvbmVMZW5ndGg6IDcgfSxcbiAgeyBjb2RlOiBcIkJPXCIsIGxhYmVsOiBcIkJvbGl2aWFcIiwgcGhvbmU6IFwiNTkxXCIsIHBob25lTGVuZ3RoOiA5IH0sXG4gIHsgY29kZTogXCJCUlwiLCBsYWJlbDogXCJCcmF6aWxcIiwgcGhvbmU6IFwiNTVcIiwgcGhvbmVMZW5ndGg6IDExIH0sXG4gIHsgY29kZTogXCJCU1wiLCBsYWJlbDogXCJCYWhhbWFzXCIsIHBob25lOiBcIjEyNDJcIiwgcGhvbmVMZW5ndGg6IDEwIH0sXG4gIHsgY29kZTogXCJCVFwiLCBsYWJlbDogXCJCaHV0YW5cIiwgcGhvbmU6IFwiOTc1XCIsIHBob25lTGVuZ3RoOiA3IH0sXG4gIHsgY29kZTogXCJCVlwiLCBsYWJlbDogXCJCb3V2ZXQgSXNsYW5kXCIsIHBob25lOiBcIjQ3XCIsIHBob25lTGVuZ3RoOiAxMCB9LFxuICB7IGNvZGU6IFwiQldcIiwgbGFiZWw6IFwiQm90c3dhbmFcIiwgcGhvbmU6IFwiMjY3XCIsIHBob25lTGVuZ3RoOiA3IH0sXG4gIHsgY29kZTogXCJCWVwiLCBsYWJlbDogXCJCZWxhcnVzXCIsIHBob25lOiBcIjM3NVwiLCBwaG9uZUxlbmd0aDogOSB9LFxuICB7IGNvZGU6IFwiQlpcIiwgbGFiZWw6IFwiQmVsaXplXCIsIHBob25lOiBcIjUwMVwiLCBwaG9uZUxlbmd0aDogNyB9LFxuICB7IGNvZGU6IFwiQ0FcIiwgbGFiZWw6IFwiQ2FuYWRhXCIsIHBob25lOiBcIjFcIiwgc3VnZ2VzdGVkOiAhMCwgcGhvbmVMZW5ndGg6IDEwIH0sXG4gIHtcbiAgICBjb2RlOiBcIkNDXCIsXG4gICAgbGFiZWw6IFwiQ29jb3MgKEtlZWxpbmcpIElzbGFuZHNcIixcbiAgICBwaG9uZTogXCI2MVwiLFxuICAgIHBob25lTGVuZ3RoOiAxMFxuICB9LFxuICB7XG4gICAgY29kZTogXCJDRFwiLFxuICAgIGxhYmVsOiBcIkNvbmdvLCBEZW1vY3JhdGljIFJlcHVibGljIG9mIHRoZVwiLFxuICAgIHBob25lOiBcIjI0M1wiLFxuICAgIHBob25lTGVuZ3RoOiA3XG4gIH0sXG4gIHtcbiAgICBjb2RlOiBcIkNGXCIsXG4gICAgbGFiZWw6IFwiQ2VudHJhbCBBZnJpY2FuIFJlcHVibGljXCIsXG4gICAgcGhvbmU6IFwiMjM2XCIsXG4gICAgcGhvbmVMZW5ndGg6IDhcbiAgfSxcbiAgeyBjb2RlOiBcIkNHXCIsIGxhYmVsOiBcIkNvbmdvLCBSZXB1YmxpYyBvZiB0aGVcIiwgcGhvbmU6IFwiMjQyXCIsIHBob25lTGVuZ3RoOiA5IH0sXG4gIHsgY29kZTogXCJDSFwiLCBsYWJlbDogXCJTd2l0emVybGFuZFwiLCBwaG9uZTogXCI0MVwiLCBwaG9uZUxlbmd0aDogOSB9LFxuICB7IGNvZGU6IFwiQ0lcIiwgbGFiZWw6IFwiQ290ZSBkJ0l2b2lyZVwiLCBwaG9uZTogXCIyMjVcIiwgcGhvbmVMZW5ndGg6IDggfSxcbiAgeyBjb2RlOiBcIkNLXCIsIGxhYmVsOiBcIkNvb2sgSXNsYW5kc1wiLCBwaG9uZTogXCI2ODJcIiwgcGhvbmVMZW5ndGg6IDUgfSxcbiAgeyBjb2RlOiBcIkNMXCIsIGxhYmVsOiBcIkNoaWxlXCIsIHBob25lOiBcIjU2XCIsIHBob25lTGVuZ3RoOiA5IH0sXG4gIHsgY29kZTogXCJDTVwiLCBsYWJlbDogXCJDYW1lcm9vblwiLCBwaG9uZTogXCIyMzdcIiwgcGhvbmVMZW5ndGg6IDkgfSxcbiAgeyBjb2RlOiBcIkNOXCIsIGxhYmVsOiBcIkNoaW5hXCIsIHBob25lOiBcIjg2XCIsIHBob25lTGVuZ3RoOiAxMSB9LFxuICB7IGNvZGU6IFwiQ09cIiwgbGFiZWw6IFwiQ29sb21iaWFcIiwgcGhvbmU6IFwiNTdcIiwgcGhvbmVMZW5ndGg6IDEwIH0sXG4gIHsgY29kZTogXCJDUlwiLCBsYWJlbDogXCJDb3N0YSBSaWNhXCIsIHBob25lOiBcIjUwNlwiLCBwaG9uZUxlbmd0aDogOCB9LFxuICB7IGNvZGU6IFwiQ1VcIiwgbGFiZWw6IFwiQ3ViYVwiLCBwaG9uZTogXCI1M1wiLCBwaG9uZUxlbmd0aDogOCB9LFxuICB7IGNvZGU6IFwiQ1ZcIiwgbGFiZWw6IFwiQ2FwZSBWZXJkZVwiLCBwaG9uZTogXCIyMzhcIiwgcGhvbmVMZW5ndGg6IDcgfSxcbiAgeyBjb2RlOiBcIkNXXCIsIGxhYmVsOiBcIkN1cmFjYW9cIiwgcGhvbmU6IFwiNTk5XCIsIHBob25lTGVuZ3RoOiA3IH0sXG4gIHsgY29kZTogXCJDWFwiLCBsYWJlbDogXCJDaHJpc3RtYXMgSXNsYW5kXCIsIHBob25lOiBcIjYxXCIsIHBob25lTGVuZ3RoOiA5IH0sXG4gIHsgY29kZTogXCJDWVwiLCBsYWJlbDogXCJDeXBydXNcIiwgcGhvbmU6IFwiMzU3XCIsIHBob25lTGVuZ3RoOiA4IH0sXG4gIHsgY29kZTogXCJDWlwiLCBsYWJlbDogXCJDemVjaCBSZXB1YmxpY1wiLCBwaG9uZTogXCI0MjBcIiwgcGhvbmVMZW5ndGg6IDkgfSxcbiAge1xuICAgIGNvZGU6IFwiREVcIixcbiAgICBsYWJlbDogXCJHZXJtYW55XCIsXG4gICAgcGhvbmU6IFwiNDlcIixcbiAgICBzdWdnZXN0ZWQ6ICEwLFxuICAgIHBob25lTGVuZ3RoOiAxMFxuICB9LFxuICB7IGNvZGU6IFwiREpcIiwgbGFiZWw6IFwiRGppYm91dGlcIiwgcGhvbmU6IFwiMjUzXCIsIHBob25lTGVuZ3RoOiAxMCB9LFxuICB7IGNvZGU6IFwiREtcIiwgbGFiZWw6IFwiRGVubWFya1wiLCBwaG9uZTogXCI0NVwiLCBwaG9uZUxlbmd0aDogOCB9LFxuICB7IGNvZGU6IFwiRE1cIiwgbGFiZWw6IFwiRG9taW5pY2FcIiwgcGhvbmU6IFwiMTc2N1wiLCBwaG9uZUxlbmd0aDogMTAgfSxcbiAgeyBjb2RlOiBcIkRPXCIsIGxhYmVsOiBcIkRvbWluaWNhbiBSZXB1YmxpY1wiLCBwaG9uZTogXCIxODA5XCIsIHBob25lTGVuZ3RoOiAxMCB9LFxuICB7IGNvZGU6IFwiRFpcIiwgbGFiZWw6IFwiQWxnZXJpYVwiLCBwaG9uZTogXCIyMTNcIiwgcGhvbmVMZW5ndGg6IDkgfSxcbiAgeyBjb2RlOiBcIkVDXCIsIGxhYmVsOiBcIkVjdWFkb3JcIiwgcGhvbmU6IFwiNTkzXCIsIHBob25lTGVuZ3RoOiA5IH0sXG4gIHsgY29kZTogXCJFRVwiLCBsYWJlbDogXCJFc3RvbmlhXCIsIHBob25lOiBcIjM3MlwiLCBwaG9uZUxlbmd0aDogOCB9LFxuICB7IGNvZGU6IFwiRUdcIiwgbGFiZWw6IFwiRWd5cHRcIiwgcGhvbmU6IFwiMjBcIiwgcGhvbmVMZW5ndGg6IDEwIH0sXG4gIHsgY29kZTogXCJFSFwiLCBsYWJlbDogXCJXZXN0ZXJuIFNhaGFyYVwiLCBwaG9uZTogXCIyMTJcIiwgcGhvbmVMZW5ndGg6IDkgfSxcbiAgeyBjb2RlOiBcIkVSXCIsIGxhYmVsOiBcIkVyaXRyZWFcIiwgcGhvbmU6IFwiMjkxXCIsIHBob25lTGVuZ3RoOiA3IH0sXG4gIHsgY29kZTogXCJFU1wiLCBsYWJlbDogXCJTcGFpblwiLCBwaG9uZTogXCIzNFwiLCBwaG9uZUxlbmd0aDogOSB9LFxuICB7IGNvZGU6IFwiRVRcIiwgbGFiZWw6IFwiRXRoaW9waWFcIiwgcGhvbmU6IFwiMjUxXCIsIHBob25lTGVuZ3RoOiA5IH0sXG4gIHsgY29kZTogXCJGSVwiLCBsYWJlbDogXCJGaW5sYW5kXCIsIHBob25lOiBcIjM1OFwiLCBtaW46IDksIG1heDogMTEgfSxcbiAgeyBjb2RlOiBcIkZKXCIsIGxhYmVsOiBcIkZpamlcIiwgcGhvbmU6IFwiNjc5XCIsIHBob25lTGVuZ3RoOiA3IH0sXG4gIHtcbiAgICBjb2RlOiBcIkZLXCIsXG4gICAgbGFiZWw6IFwiRmFsa2xhbmQgSXNsYW5kcyAoTWFsdmluYXMpXCIsXG4gICAgcGhvbmU6IFwiNTAwXCIsXG4gICAgcGhvbmVMZW5ndGg6IDVcbiAgfSxcbiAge1xuICAgIGNvZGU6IFwiRk1cIixcbiAgICBsYWJlbDogXCJNaWNyb25lc2lhLCBGZWRlcmF0ZWQgU3RhdGVzIG9mXCIsXG4gICAgcGhvbmU6IFwiNjkxXCIsXG4gICAgcGhvbmVMZW5ndGg6IDdcbiAgfSxcbiAgeyBjb2RlOiBcIkZPXCIsIGxhYmVsOiBcIkZhcm9lIElzbGFuZHNcIiwgcGhvbmU6IFwiMjk4XCIsIHBob25lTGVuZ3RoOiA1IH0sXG4gIHsgY29kZTogXCJGUlwiLCBsYWJlbDogXCJGcmFuY2VcIiwgcGhvbmU6IFwiMzNcIiwgc3VnZ2VzdGVkOiAhMCwgcGhvbmVMZW5ndGg6IDkgfSxcbiAgeyBjb2RlOiBcIkdBXCIsIGxhYmVsOiBcIkdhYm9uXCIsIHBob25lOiBcIjI0MVwiLCBwaG9uZUxlbmd0aDogNyB9LFxuICB7IGNvZGU6IFwiR0JcIiwgbGFiZWw6IFwiVW5pdGVkIEtpbmdkb21cIiwgcGhvbmU6IFwiNDRcIiwgcGhvbmVMZW5ndGg6IDEwIH0sXG4gIHsgY29kZTogXCJHRFwiLCBsYWJlbDogXCJHcmVuYWRhXCIsIHBob25lOiBcIjE0NzNcIiwgcGhvbmVMZW5ndGg6IDEwIH0sXG4gIHsgY29kZTogXCJHRVwiLCBsYWJlbDogXCJHZW9yZ2lhXCIsIHBob25lOiBcIjk5NVwiLCBwaG9uZUxlbmd0aDogOSB9LFxuICB7IGNvZGU6IFwiR0ZcIiwgbGFiZWw6IFwiRnJlbmNoIEd1aWFuYVwiLCBwaG9uZTogXCI1OTRcIiwgcGhvbmVMZW5ndGg6IDkgfSxcbiAgeyBjb2RlOiBcIkdHXCIsIGxhYmVsOiBcIkd1ZXJuc2V5XCIsIHBob25lOiBcIjQ0XCIsIHBob25lTGVuZ3RoOiAxMCB9LFxuICB7IGNvZGU6IFwiR0hcIiwgbGFiZWw6IFwiR2hhbmFcIiwgcGhvbmU6IFwiMjMzXCIsIHBob25lTGVuZ3RoOiA5IH0sXG4gIHsgY29kZTogXCJHSVwiLCBsYWJlbDogXCJHaWJyYWx0YXJcIiwgcGhvbmU6IFwiMzUwXCIsIHBob25lTGVuZ3RoOiA4IH0sXG4gIHsgY29kZTogXCJHTFwiLCBsYWJlbDogXCJHcmVlbmxhbmRcIiwgcGhvbmU6IFwiMjk5XCIsIHBob25lTGVuZ3RoOiA2IH0sXG4gIHsgY29kZTogXCJHTVwiLCBsYWJlbDogXCJHYW1iaWFcIiwgcGhvbmU6IFwiMjIwXCIsIHBob25lTGVuZ3RoOiA3IH0sXG4gIHsgY29kZTogXCJHTlwiLCBsYWJlbDogXCJHdWluZWFcIiwgcGhvbmU6IFwiMjI0XCIsIHBob25lTGVuZ3RoOiA5IH0sXG4gIHsgY29kZTogXCJHUFwiLCBsYWJlbDogXCJHdWFkZWxvdXBlXCIsIHBob25lOiBcIjU5MFwiLCBwaG9uZUxlbmd0aDogOSB9LFxuICB7IGNvZGU6IFwiR1FcIiwgbGFiZWw6IFwiRXF1YXRvcmlhbCBHdWluZWFcIiwgcGhvbmU6IFwiMjQwXCIsIHBob25lTGVuZ3RoOiA5IH0sXG4gIHsgY29kZTogXCJHUlwiLCBsYWJlbDogXCJHcmVlY2VcIiwgcGhvbmU6IFwiMzBcIiwgcGhvbmVMZW5ndGg6IDEwIH0sXG4gIHtcbiAgICBjb2RlOiBcIkdTXCIsXG4gICAgbGFiZWw6IFwiU291dGggR2VvcmdpYSBhbmQgdGhlIFNvdXRoIFNhbmR3aWNoIElzbGFuZHNcIixcbiAgICBwaG9uZTogXCI1MDBcIixcbiAgICBwaG9uZUxlbmd0aDogNVxuICB9LFxuICB7IGNvZGU6IFwiR1RcIiwgbGFiZWw6IFwiR3VhdGVtYWxhXCIsIHBob25lOiBcIjUwMlwiLCBwaG9uZUxlbmd0aDogOCB9LFxuICB7IGNvZGU6IFwiR1VcIiwgbGFiZWw6IFwiR3VhbVwiLCBwaG9uZTogXCIxNjcxXCIsIHBob25lTGVuZ3RoOiAxMCB9LFxuICB7IGNvZGU6IFwiR1dcIiwgbGFiZWw6IFwiR3VpbmVhLUJpc3NhdVwiLCBwaG9uZTogXCIyNDVcIiwgcGhvbmVMZW5ndGg6IDkgfSxcbiAgeyBjb2RlOiBcIkdZXCIsIGxhYmVsOiBcIkd1eWFuYVwiLCBwaG9uZTogXCI1OTJcIiwgcGhvbmVMZW5ndGg6IDcgfSxcbiAgeyBjb2RlOiBcIkhLXCIsIGxhYmVsOiBcIkhvbmcgS29uZ1wiLCBwaG9uZTogXCI4NTJcIiwgcGhvbmVMZW5ndGg6IDggfSxcbiAge1xuICAgIGNvZGU6IFwiSE1cIixcbiAgICBsYWJlbDogXCJIZWFyZCBJc2xhbmQgYW5kIE1jRG9uYWxkIElzbGFuZHNcIixcbiAgICBwaG9uZTogXCI2NzJcIixcbiAgICBwaG9uZUxlbmd0aDogMTBcbiAgfSxcbiAgeyBjb2RlOiBcIkhOXCIsIGxhYmVsOiBcIkhvbmR1cmFzXCIsIHBob25lOiBcIjUwNFwiLCBwaG9uZUxlbmd0aDogOCB9LFxuICB7IGNvZGU6IFwiSFJcIiwgbGFiZWw6IFwiQ3JvYXRpYVwiLCBwaG9uZTogXCIzODVcIiwgcGhvbmVMZW5ndGg6IDkgfSxcbiAgeyBjb2RlOiBcIkhUXCIsIGxhYmVsOiBcIkhhaXRpXCIsIHBob25lOiBcIjUwOVwiLCBwaG9uZUxlbmd0aDogOCB9LFxuICB7IGNvZGU6IFwiSFVcIiwgbGFiZWw6IFwiSHVuZ2FyeVwiLCBwaG9uZTogXCIzNlwiLCBwaG9uZUxlbmd0aDogOSB9LFxuICB7IGNvZGU6IFwiSURcIiwgbGFiZWw6IFwiSW5kb25lc2lhXCIsIHBob25lOiBcIjYyXCIsIHBob25lTGVuZ3RoOiAxMSB9LFxuICB7IGNvZGU6IFwiSUVcIiwgbGFiZWw6IFwiSXJlbGFuZFwiLCBwaG9uZTogXCIzNTNcIiwgcGhvbmVMZW5ndGg6IDkgfSxcbiAgeyBjb2RlOiBcIklMXCIsIGxhYmVsOiBcIklzcmFlbFwiLCBwaG9uZTogXCI5NzJcIiwgcGhvbmVMZW5ndGg6IDkgfSxcbiAgeyBjb2RlOiBcIklNXCIsIGxhYmVsOiBcIklzbGUgb2YgTWFuXCIsIHBob25lOiBcIjQ0XCIsIHBob25lTGVuZ3RoOiAxMCB9LFxuICB7IGNvZGU6IFwiSU5cIiwgbGFiZWw6IFwiSW5kaWFcIiwgcGhvbmU6IFwiOTFcIiwgcGhvbmVMZW5ndGg6IDEwIH0sXG4gIHtcbiAgICBjb2RlOiBcIklPXCIsXG4gICAgbGFiZWw6IFwiQnJpdGlzaCBJbmRpYW4gT2NlYW4gVGVycml0b3J5XCIsXG4gICAgcGhvbmU6IFwiMjQ2XCIsXG4gICAgcGhvbmVMZW5ndGg6IDdcbiAgfSxcbiAgeyBjb2RlOiBcIklRXCIsIGxhYmVsOiBcIklyYXFcIiwgcGhvbmU6IFwiOTY0XCIsIHBob25lTGVuZ3RoOiAxMCB9LFxuICB7XG4gICAgY29kZTogXCJJUlwiLFxuICAgIGxhYmVsOiBcIklyYW4sIElzbGFtaWMgUmVwdWJsaWMgb2ZcIixcbiAgICBwaG9uZTogXCI5OFwiLFxuICAgIHBob25lTGVuZ3RoOiAxMVxuICB9LFxuICB7IGNvZGU6IFwiSVNcIiwgbGFiZWw6IFwiSWNlbGFuZFwiLCBwaG9uZTogXCIzNTRcIiwgcGhvbmVMZW5ndGg6IDcgfSxcbiAgeyBjb2RlOiBcIklUXCIsIGxhYmVsOiBcIkl0YWx5XCIsIHBob25lOiBcIjM5XCIsIHBob25lTGVuZ3RoOiAxMCB9LFxuICB7IGNvZGU6IFwiSkVcIiwgbGFiZWw6IFwiSmVyc2V5XCIsIHBob25lOiBcIjQ0XCIsIHBob25lTGVuZ3RoOiAxMCB9LFxuICB7IGNvZGU6IFwiSk1cIiwgbGFiZWw6IFwiSmFtYWljYVwiLCBwaG9uZTogXCIxODc2XCIsIHBob25lTGVuZ3RoOiAxMCB9LFxuICB7IGNvZGU6IFwiSk9cIiwgbGFiZWw6IFwiSm9yZGFuXCIsIHBob25lOiBcIjk2MlwiLCBwaG9uZUxlbmd0aDogWzgsIDldIH0sXG4gIHsgY29kZTogXCJKUFwiLCBsYWJlbDogXCJKYXBhblwiLCBwaG9uZTogXCI4MVwiLCBzdWdnZXN0ZWQ6ICEwIH0sXG4gIHsgY29kZTogXCJLRVwiLCBsYWJlbDogXCJLZW55YVwiLCBwaG9uZTogXCIyNTRcIiwgcGhvbmVMZW5ndGg6IDEwIH0sXG4gIHsgY29kZTogXCJLR1wiLCBsYWJlbDogXCJLeXJneXpzdGFuXCIsIHBob25lOiBcIjk5NlwiLCBwaG9uZUxlbmd0aDogOSB9LFxuICB7IGNvZGU6IFwiS0hcIiwgbGFiZWw6IFwiQ2FtYm9kaWFcIiwgcGhvbmU6IFwiODU1XCIsIHBob25lTGVuZ3RoOiA5IH0sXG4gIHsgY29kZTogXCJLSVwiLCBsYWJlbDogXCJLaXJpYmF0aVwiLCBwaG9uZTogXCI2ODZcIiwgcGhvbmVMZW5ndGg6IDggfSxcbiAgeyBjb2RlOiBcIktNXCIsIGxhYmVsOiBcIkNvbW9yb3NcIiwgcGhvbmU6IFwiMjY5XCIsIHBob25lTGVuZ3RoOiA3IH0sXG4gIHtcbiAgICBjb2RlOiBcIktOXCIsXG4gICAgbGFiZWw6IFwiU2FpbnQgS2l0dHMgYW5kIE5ldmlzXCIsXG4gICAgcGhvbmU6IFwiMTg2OVwiLFxuICAgIHBob25lTGVuZ3RoOiAxMFxuICB9LFxuICB7XG4gICAgY29kZTogXCJLUFwiLFxuICAgIGxhYmVsOiBcIktvcmVhLCBEZW1vY3JhdGljIFBlb3BsZSdzIFJlcHVibGljIG9mXCIsXG4gICAgcGhvbmU6IFwiODUwXCIsXG4gICAgcGhvbmVMZW5ndGg6IFs0LCA2LCA3LCAxM11cbiAgfSxcbiAgeyBjb2RlOiBcIktSXCIsIGxhYmVsOiBcIktvcmVhLCBSZXB1YmxpYyBvZlwiLCBwaG9uZTogXCI4MlwiLCBwaG9uZUxlbmd0aDogWzcsIDhdIH0sXG4gIHsgY29kZTogXCJLV1wiLCBsYWJlbDogXCJLdXdhaXRcIiwgcGhvbmU6IFwiOTY1XCIsIHBob25lTGVuZ3RoOiA4IH0sXG4gIHsgY29kZTogXCJLWVwiLCBsYWJlbDogXCJDYXltYW4gSXNsYW5kc1wiLCBwaG9uZTogXCIxMzQ1XCIsIHBob25lTGVuZ3RoOiA3IH0sXG4gIHsgY29kZTogXCJLWlwiLCBsYWJlbDogXCJLYXpha2hzdGFuXCIsIHBob25lOiBcIjdcIiwgcGhvbmVMZW5ndGg6IDEwIH0sXG4gIHtcbiAgICBjb2RlOiBcIkxBXCIsXG4gICAgbGFiZWw6IFwiTGFvIFBlb3BsZSdzIERlbW9jcmF0aWMgUmVwdWJsaWNcIixcbiAgICBwaG9uZTogXCI4NTZcIixcbiAgICBwaG9uZUxlbmd0aDogWzgsIDldXG4gIH0sXG4gIHsgY29kZTogXCJMQlwiLCBsYWJlbDogXCJMZWJhbm9uXCIsIHBob25lOiBcIjk2MVwiLCBwaG9uZUxlbmd0aDogWzcsIDhdIH0sXG4gIHsgY29kZTogXCJMQ1wiLCBsYWJlbDogXCJTYWludCBMdWNpYVwiLCBwaG9uZTogXCIxNzU4XCIsIHBob25lTGVuZ3RoOiA3IH0sXG4gIHsgY29kZTogXCJMSVwiLCBsYWJlbDogXCJMaWVjaHRlbnN0ZWluXCIsIHBob25lOiBcIjQyM1wiLCBwaG9uZUxlbmd0aDogNyB9LFxuICB7IGNvZGU6IFwiTEtcIiwgbGFiZWw6IFwiU3JpIExhbmthXCIsIHBob25lOiBcIjk0XCIsIHBob25lTGVuZ3RoOiA3IH0sXG4gIHsgY29kZTogXCJMUlwiLCBsYWJlbDogXCJMaWJlcmlhXCIsIHBob25lOiBcIjIzMVwiLCBwaG9uZUxlbmd0aDogWzgsIDldIH0sXG4gIHsgY29kZTogXCJMU1wiLCBsYWJlbDogXCJMZXNvdGhvXCIsIHBob25lOiBcIjI2NlwiLCBwaG9uZUxlbmd0aDogOCB9LFxuICB7IGNvZGU6IFwiTFRcIiwgbGFiZWw6IFwiTGl0aHVhbmlhXCIsIHBob25lOiBcIjM3MFwiLCBwaG9uZUxlbmd0aDogOCB9LFxuICB7IGNvZGU6IFwiTFVcIiwgbGFiZWw6IFwiTHV4ZW1ib3VyZ1wiLCBwaG9uZTogXCIzNTJcIiwgcGhvbmVMZW5ndGg6IDkgfSxcbiAgeyBjb2RlOiBcIkxWXCIsIGxhYmVsOiBcIkxhdHZpYVwiLCBwaG9uZTogXCIzNzFcIiwgcGhvbmVMZW5ndGg6IDggfSxcbiAgeyBjb2RlOiBcIkxZXCIsIGxhYmVsOiBcIkxpYnlhXCIsIHBob25lOiBcIjIxOFwiLCBwaG9uZUxlbmd0aDogMTAgfSxcbiAgeyBjb2RlOiBcIk1BXCIsIGxhYmVsOiBcIk1vcm9jY29cIiwgcGhvbmU6IFwiMjEyXCIsIHBob25lTGVuZ3RoOiA5IH0sXG4gIHsgY29kZTogXCJNQ1wiLCBsYWJlbDogXCJNb25hY29cIiwgcGhvbmU6IFwiMzc3XCIsIHBob25lTGVuZ3RoOiA4IH0sXG4gIHsgY29kZTogXCJNRFwiLCBsYWJlbDogXCJNb2xkb3ZhLCBSZXB1YmxpYyBvZlwiLCBwaG9uZTogXCIzNzNcIiwgcGhvbmVMZW5ndGg6IDggfSxcbiAgeyBjb2RlOiBcIk1FXCIsIGxhYmVsOiBcIk1vbnRlbmVncm9cIiwgcGhvbmU6IFwiMzgyXCIsIHBob25lTGVuZ3RoOiA4IH0sXG4gIHtcbiAgICBjb2RlOiBcIk1GXCIsXG4gICAgbGFiZWw6IFwiU2FpbnQgTWFydGluIChGcmVuY2ggcGFydClcIixcbiAgICBwaG9uZTogXCI1OTBcIixcbiAgICBwaG9uZUxlbmd0aDogNlxuICB9LFxuICB7IGNvZGU6IFwiTUdcIiwgbGFiZWw6IFwiTWFkYWdhc2NhclwiLCBwaG9uZTogXCIyNjFcIiwgcGhvbmVMZW5ndGg6IDcgfSxcbiAgeyBjb2RlOiBcIk1IXCIsIGxhYmVsOiBcIk1hcnNoYWxsIElzbGFuZHNcIiwgcGhvbmU6IFwiNjkyXCIsIHBob25lTGVuZ3RoOiA3IH0sXG4gIHtcbiAgICBjb2RlOiBcIk1LXCIsXG4gICAgbGFiZWw6IFwiTWFjZWRvbmlhLCB0aGUgRm9ybWVyIFl1Z29zbGF2IFJlcHVibGljIG9mXCIsXG4gICAgcGhvbmU6IFwiMzg5XCIsXG4gICAgcGhvbmVMZW5ndGg6IDhcbiAgfSxcbiAgeyBjb2RlOiBcIk1MXCIsIGxhYmVsOiBcIk1hbGlcIiwgcGhvbmU6IFwiMjIzXCIsIHBob25lTGVuZ3RoOiA4IH0sXG4gIHsgY29kZTogXCJNTVwiLCBsYWJlbDogXCJNeWFubWFyXCIsIHBob25lOiBcIjk1XCIsIG1pbjogNywgbWF4OiAxMCB9LFxuICB7IGNvZGU6IFwiTU5cIiwgbGFiZWw6IFwiTW9uZ29saWFcIiwgcGhvbmU6IFwiOTc2XCIsIHBob25lTGVuZ3RoOiA4IH0sXG4gIHsgY29kZTogXCJNT1wiLCBsYWJlbDogXCJNYWNhb1wiLCBwaG9uZTogXCI4NTNcIiwgcGhvbmVMZW5ndGg6IDggfSxcbiAge1xuICAgIGNvZGU6IFwiTVBcIixcbiAgICBsYWJlbDogXCJOb3J0aGVybiBNYXJpYW5hIElzbGFuZHNcIixcbiAgICBwaG9uZTogXCIxNjcwXCIsXG4gICAgcGhvbmVMZW5ndGg6IDdcbiAgfSxcbiAgeyBjb2RlOiBcIk1RXCIsIGxhYmVsOiBcIk1hcnRpbmlxdWVcIiwgcGhvbmU6IFwiNTk2XCIsIHBob25lTGVuZ3RoOiA5IH0sXG4gIHsgY29kZTogXCJNUlwiLCBsYWJlbDogXCJNYXVyaXRhbmlhXCIsIHBob25lOiBcIjIyMlwiLCBwaG9uZUxlbmd0aDogOCB9LFxuICB7IGNvZGU6IFwiTVNcIiwgbGFiZWw6IFwiTW9udHNlcnJhdFwiLCBwaG9uZTogXCIxNjY0XCIsIHBob25lTGVuZ3RoOiAxMCB9LFxuICB7IGNvZGU6IFwiTVRcIiwgbGFiZWw6IFwiTWFsdGFcIiwgcGhvbmU6IFwiMzU2XCIsIHBob25lTGVuZ3RoOiA4IH0sXG4gIHsgY29kZTogXCJNVVwiLCBsYWJlbDogXCJNYXVyaXRpdXNcIiwgcGhvbmU6IFwiMjMwXCIsIHBob25lTGVuZ3RoOiA4IH0sXG4gIHsgY29kZTogXCJNVlwiLCBsYWJlbDogXCJNYWxkaXZlc1wiLCBwaG9uZTogXCI5NjBcIiwgcGhvbmVMZW5ndGg6IDcgfSxcbiAgeyBjb2RlOiBcIk1XXCIsIGxhYmVsOiBcIk1hbGF3aVwiLCBwaG9uZTogXCIyNjVcIiwgcGhvbmVMZW5ndGg6IFs3LCA4LCA5XSB9LFxuICB7IGNvZGU6IFwiTVhcIiwgbGFiZWw6IFwiTWV4aWNvXCIsIHBob25lOiBcIjUyXCIsIHBob25lTGVuZ3RoOiAxMCB9LFxuICB7IGNvZGU6IFwiTVlcIiwgbGFiZWw6IFwiTWFsYXlzaWFcIiwgcGhvbmU6IFwiNjBcIiwgcGhvbmVMZW5ndGg6IDcgfSxcbiAgeyBjb2RlOiBcIk1aXCIsIGxhYmVsOiBcIk1vemFtYmlxdWVcIiwgcGhvbmU6IFwiMjU4XCIsIHBob25lTGVuZ3RoOiAxMiB9LFxuICB7IGNvZGU6IFwiTkFcIiwgbGFiZWw6IFwiTmFtaWJpYVwiLCBwaG9uZTogXCIyNjRcIiwgcGhvbmVMZW5ndGg6IDcgfSxcbiAgeyBjb2RlOiBcIk5DXCIsIGxhYmVsOiBcIk5ldyBDYWxlZG9uaWFcIiwgcGhvbmU6IFwiNjg3XCIsIHBob25lTGVuZ3RoOiA2IH0sXG4gIHsgY29kZTogXCJORVwiLCBsYWJlbDogXCJOaWdlclwiLCBwaG9uZTogXCIyMjdcIiwgcGhvbmVMZW5ndGg6IDggfSxcbiAgeyBjb2RlOiBcIk5GXCIsIGxhYmVsOiBcIk5vcmZvbGsgSXNsYW5kXCIsIHBob25lOiBcIjY3MlwiLCBwaG9uZUxlbmd0aDogNiB9LFxuICB7IGNvZGU6IFwiTkdcIiwgbGFiZWw6IFwiTmlnZXJpYVwiLCBwaG9uZTogXCIyMzRcIiwgcGhvbmVMZW5ndGg6IDggfSxcbiAgeyBjb2RlOiBcIk5JXCIsIGxhYmVsOiBcIk5pY2FyYWd1YVwiLCBwaG9uZTogXCI1MDVcIiwgcGhvbmVMZW5ndGg6IDggfSxcbiAgeyBjb2RlOiBcIk5MXCIsIGxhYmVsOiBcIk5ldGhlcmxhbmRzXCIsIHBob25lOiBcIjMxXCIsIHBob25lTGVuZ3RoOiA5IH0sXG4gIHsgY29kZTogXCJOT1wiLCBsYWJlbDogXCJOb3J3YXlcIiwgcGhvbmU6IFwiNDdcIiwgcGhvbmVMZW5ndGg6IDggfSxcbiAgeyBjb2RlOiBcIk5QXCIsIGxhYmVsOiBcIk5lcGFsXCIsIHBob25lOiBcIjk3N1wiLCBwaG9uZUxlbmd0aDogMTAgfSxcbiAgeyBjb2RlOiBcIk5SXCIsIGxhYmVsOiBcIk5hdXJ1XCIsIHBob25lOiBcIjY3NFwiLCBwaG9uZUxlbmd0aDogNyB9LFxuICB7IGNvZGU6IFwiTlVcIiwgbGFiZWw6IFwiTml1ZVwiLCBwaG9uZTogXCI2ODNcIiwgcGhvbmVMZW5ndGg6IDQgfSxcbiAgeyBjb2RlOiBcIk5aXCIsIGxhYmVsOiBcIk5ldyBaZWFsYW5kXCIsIHBob25lOiBcIjY0XCIsIHBob25lTGVuZ3RoOiBbOCwgOV0gfSxcbiAgeyBjb2RlOiBcIk9NXCIsIGxhYmVsOiBcIk9tYW5cIiwgcGhvbmU6IFwiOTY4XCIsIHBob25lTGVuZ3RoOiA4IH0sXG4gIHsgY29kZTogXCJQQVwiLCBsYWJlbDogXCJQYW5hbWFcIiwgcGhvbmU6IFwiNTA3XCIsIHBob25lTGVuZ3RoOiA4IH0sXG4gIHsgY29kZTogXCJQRVwiLCBsYWJlbDogXCJQZXJ1XCIsIHBob25lOiBcIjUxXCIsIHBob25lTGVuZ3RoOiA5IH0sXG4gIHsgY29kZTogXCJQRlwiLCBsYWJlbDogXCJGcmVuY2ggUG9seW5lc2lhXCIsIHBob25lOiBcIjY4OVwiLCBwaG9uZUxlbmd0aDogOCB9LFxuICB7IGNvZGU6IFwiUEdcIiwgbGFiZWw6IFwiUGFwdWEgTmV3IEd1aW5lYVwiLCBwaG9uZTogXCI2NzVcIiwgcGhvbmVMZW5ndGg6IDggfSxcbiAgeyBjb2RlOiBcIlBIXCIsIGxhYmVsOiBcIlBoaWxpcHBpbmVzXCIsIHBob25lOiBcIjYzXCIsIHBob25lTGVuZ3RoOiAxMCB9LFxuICB7IGNvZGU6IFwiUEtcIiwgbGFiZWw6IFwiUGFraXN0YW5cIiwgcGhvbmU6IFwiOTJcIiwgcGhvbmVMZW5ndGg6IDEwIH0sXG4gIHsgY29kZTogXCJQTFwiLCBsYWJlbDogXCJQb2xhbmRcIiwgcGhvbmU6IFwiNDhcIiwgcGhvbmVMZW5ndGg6IDkgfSxcbiAge1xuICAgIGNvZGU6IFwiUE1cIixcbiAgICBsYWJlbDogXCJTYWludCBQaWVycmUgYW5kIE1pcXVlbG9uXCIsXG4gICAgcGhvbmU6IFwiNTA4XCIsXG4gICAgcGhvbmVMZW5ndGg6IDZcbiAgfSxcbiAgeyBjb2RlOiBcIlBOXCIsIGxhYmVsOiBcIlBpdGNhaXJuXCIsIHBob25lOiBcIjg3MFwiLCBwaG9uZUxlbmd0aDogOSB9LFxuICB7IGNvZGU6IFwiUFJcIiwgbGFiZWw6IFwiUHVlcnRvIFJpY29cIiwgcGhvbmU6IFwiMVwiLCBwaG9uZUxlbmd0aDogMTAgfSxcbiAgeyBjb2RlOiBcIlBTXCIsIGxhYmVsOiBcIlBhbGVzdGluZSwgU3RhdGUgb2ZcIiwgcGhvbmU6IFwiOTcwXCIsIHBob25lTGVuZ3RoOiA5IH0sXG4gIHsgY29kZTogXCJQVFwiLCBsYWJlbDogXCJQb3J0dWdhbFwiLCBwaG9uZTogXCIzNTFcIiwgcGhvbmVMZW5ndGg6IDkgfSxcbiAgeyBjb2RlOiBcIlBXXCIsIGxhYmVsOiBcIlBhbGF1XCIsIHBob25lOiBcIjY4MFwiLCBwaG9uZUxlbmd0aDogNyB9LFxuICB7IGNvZGU6IFwiUFlcIiwgbGFiZWw6IFwiUGFyYWd1YXlcIiwgcGhvbmU6IFwiNTk1XCIsIHBob25lTGVuZ3RoOiA5IH0sXG4gIHsgY29kZTogXCJRQVwiLCBsYWJlbDogXCJRYXRhclwiLCBwaG9uZTogXCI5NzRcIiwgcGhvbmVMZW5ndGg6IDggfSxcbiAgeyBjb2RlOiBcIlJFXCIsIGxhYmVsOiBcIlJldW5pb25cIiwgcGhvbmU6IFwiMjYyXCIsIHBob25lTGVuZ3RoOiAxMCB9LFxuICB7IGNvZGU6IFwiUk9cIiwgbGFiZWw6IFwiUm9tYW5pYVwiLCBwaG9uZTogXCI0MFwiLCBwaG9uZUxlbmd0aDogMTAgfSxcbiAgeyBjb2RlOiBcIlJTXCIsIGxhYmVsOiBcIlNlcmJpYVwiLCBwaG9uZTogXCIzODFcIiwgcGhvbmVMZW5ndGg6IDkgfSxcbiAgeyBjb2RlOiBcIlJVXCIsIGxhYmVsOiBcIlJ1c3NpYW4gRmVkZXJhdGlvblwiLCBwaG9uZTogXCI3XCIsIHBob25lTGVuZ3RoOiAxMCB9LFxuICB7IGNvZGU6IFwiUldcIiwgbGFiZWw6IFwiUndhbmRhXCIsIHBob25lOiBcIjI1MFwiLCBwaG9uZUxlbmd0aDogOSB9LFxuICB7IGNvZGU6IFwiU0FcIiwgbGFiZWw6IFwiU2F1ZGkgQXJhYmlhXCIsIHBob25lOiBcIjk2NlwiLCBwaG9uZUxlbmd0aDogOSB9LFxuICB7IGNvZGU6IFwiU0JcIiwgbGFiZWw6IFwiU29sb21vbiBJc2xhbmRzXCIsIHBob25lOiBcIjY3N1wiLCBwaG9uZUxlbmd0aDogNyB9LFxuICB7IGNvZGU6IFwiU0NcIiwgbGFiZWw6IFwiU2V5Y2hlbGxlc1wiLCBwaG9uZTogXCIyNDhcIiwgcGhvbmVMZW5ndGg6IDcgfSxcbiAgeyBjb2RlOiBcIlNEXCIsIGxhYmVsOiBcIlN1ZGFuXCIsIHBob25lOiBcIjI0OVwiLCBwaG9uZUxlbmd0aDogNyB9LFxuICB7IGNvZGU6IFwiU0VcIiwgbGFiZWw6IFwiU3dlZGVuXCIsIHBob25lOiBcIjQ2XCIsIHBob25lTGVuZ3RoOiA3IH0sXG4gIHsgY29kZTogXCJTR1wiLCBsYWJlbDogXCJTaW5nYXBvcmVcIiwgcGhvbmU6IFwiNjVcIiwgcGhvbmVMZW5ndGg6IDggfSxcbiAgeyBjb2RlOiBcIlNIXCIsIGxhYmVsOiBcIlNhaW50IEhlbGVuYVwiLCBwaG9uZTogXCIyOTBcIiwgcGhvbmVMZW5ndGg6IDQgfSxcbiAgeyBjb2RlOiBcIlNJXCIsIGxhYmVsOiBcIlNsb3ZlbmlhXCIsIHBob25lOiBcIjM4NlwiLCBwaG9uZUxlbmd0aDogOSB9LFxuICB7IGNvZGU6IFwiU0pcIiwgbGFiZWw6IFwiU3ZhbGJhcmQgYW5kIEphbiBNYXllblwiLCBwaG9uZTogXCI0N1wiLCBwaG9uZUxlbmd0aDogOCB9LFxuICB7IGNvZGU6IFwiU0tcIiwgbGFiZWw6IFwiU2xvdmFraWFcIiwgcGhvbmU6IFwiNDIxXCIsIHBob25lTGVuZ3RoOiA5IH0sXG4gIHsgY29kZTogXCJTTFwiLCBsYWJlbDogXCJTaWVycmEgTGVvbmVcIiwgcGhvbmU6IFwiMjMyXCIsIHBob25lTGVuZ3RoOiA4IH0sXG4gIHsgY29kZTogXCJTTVwiLCBsYWJlbDogXCJTYW4gTWFyaW5vXCIsIHBob25lOiBcIjM3OFwiLCBwaG9uZUxlbmd0aDogMTAgfSxcbiAgeyBjb2RlOiBcIlNOXCIsIGxhYmVsOiBcIlNlbmVnYWxcIiwgcGhvbmU6IFwiMjIxXCIsIHBob25lTGVuZ3RoOiA5IH0sXG4gIHsgY29kZTogXCJTT1wiLCBsYWJlbDogXCJTb21hbGlhXCIsIHBob25lOiBcIjI1MlwiLCBwaG9uZUxlbmd0aDogWzgsIDldIH0sXG4gIHsgY29kZTogXCJTUlwiLCBsYWJlbDogXCJTdXJpbmFtZVwiLCBwaG9uZTogXCI1OTdcIiwgcGhvbmVMZW5ndGg6IFs2LCA3XSB9LFxuICB7IGNvZGU6IFwiU1NcIiwgbGFiZWw6IFwiU291dGggU3VkYW5cIiwgcGhvbmU6IFwiMjExXCIsIHBob25lTGVuZ3RoOiA3IH0sXG4gIHsgY29kZTogXCJTVFwiLCBsYWJlbDogXCJTYW8gVG9tZSBhbmQgUHJpbmNpcGVcIiwgcGhvbmU6IFwiMjM5XCIsIHBob25lTGVuZ3RoOiA3IH0sXG4gIHsgY29kZTogXCJTVlwiLCBsYWJlbDogXCJFbCBTYWx2YWRvclwiLCBwaG9uZTogXCI1MDNcIiwgcGhvbmVMZW5ndGg6IDggfSxcbiAge1xuICAgIGNvZGU6IFwiU1hcIixcbiAgICBsYWJlbDogXCJTaW50IE1hYXJ0ZW4gKER1dGNoIHBhcnQpXCIsXG4gICAgcGhvbmU6IFwiMTcyMVwiLFxuICAgIHBob25lTGVuZ3RoOiAxMFxuICB9LFxuICB7IGNvZGU6IFwiU1lcIiwgbGFiZWw6IFwiU3lyaWFuIEFyYWIgUmVwdWJsaWNcIiwgcGhvbmU6IFwiOTYzXCIsIHBob25lTGVuZ3RoOiA3IH0sXG4gIHsgY29kZTogXCJTWlwiLCBsYWJlbDogXCJTd2F6aWxhbmRcIiwgcGhvbmU6IFwiMjY4XCIsIHBob25lTGVuZ3RoOiA4IH0sXG4gIHtcbiAgICBjb2RlOiBcIlRDXCIsXG4gICAgbGFiZWw6IFwiVHVya3MgYW5kIENhaWNvcyBJc2xhbmRzXCIsXG4gICAgcGhvbmU6IFwiMTY0OVwiLFxuICAgIHBob25lTGVuZ3RoOiAxMFxuICB9LFxuICB7IGNvZGU6IFwiVERcIiwgbGFiZWw6IFwiQ2hhZFwiLCBwaG9uZTogXCIyMzVcIiwgcGhvbmVMZW5ndGg6IDYgfSxcbiAge1xuICAgIGNvZGU6IFwiVEZcIixcbiAgICBsYWJlbDogXCJGcmVuY2ggU291dGhlcm4gVGVycml0b3JpZXNcIixcbiAgICBwaG9uZTogXCIyNjJcIixcbiAgICBwaG9uZUxlbmd0aDogMTBcbiAgfSxcbiAgeyBjb2RlOiBcIlRHXCIsIGxhYmVsOiBcIlRvZ29cIiwgcGhvbmU6IFwiMjI4XCIsIHBob25lTGVuZ3RoOiA4IH0sXG4gIHsgY29kZTogXCJUSFwiLCBsYWJlbDogXCJUaGFpbGFuZFwiLCBwaG9uZTogXCI2NlwiLCBwaG9uZUxlbmd0aDogOSB9LFxuICB7IGNvZGU6IFwiVEpcIiwgbGFiZWw6IFwiVGFqaWtpc3RhblwiLCBwaG9uZTogXCI5OTJcIiwgcGhvbmVMZW5ndGg6IDkgfSxcbiAgeyBjb2RlOiBcIlRLXCIsIGxhYmVsOiBcIlRva2VsYXVcIiwgcGhvbmU6IFwiNjkwXCIsIHBob25lTGVuZ3RoOiA1IH0sXG4gIHsgY29kZTogXCJUTFwiLCBsYWJlbDogXCJUaW1vci1MZXN0ZVwiLCBwaG9uZTogXCI2NzBcIiwgcGhvbmVMZW5ndGg6IDcgfSxcbiAgeyBjb2RlOiBcIlRNXCIsIGxhYmVsOiBcIlR1cmttZW5pc3RhblwiLCBwaG9uZTogXCI5OTNcIiwgcGhvbmVMZW5ndGg6IDggfSxcbiAgeyBjb2RlOiBcIlROXCIsIGxhYmVsOiBcIlR1bmlzaWFcIiwgcGhvbmU6IFwiMjE2XCIsIHBob25lTGVuZ3RoOiA4IH0sXG4gIHsgY29kZTogXCJUT1wiLCBsYWJlbDogXCJUb25nYVwiLCBwaG9uZTogXCI2NzZcIiwgcGhvbmVMZW5ndGg6IDUgfSxcbiAgeyBjb2RlOiBcIlRSXCIsIGxhYmVsOiBcIlR1cmtleVwiLCBwaG9uZTogXCI5MFwiLCBwaG9uZUxlbmd0aDogMTEgfSxcbiAgeyBjb2RlOiBcIlRUXCIsIGxhYmVsOiBcIlRyaW5pZGFkIGFuZCBUb2JhZ29cIiwgcGhvbmU6IFwiMTg2OFwiLCBwaG9uZUxlbmd0aDogNyB9LFxuICB7IGNvZGU6IFwiVFZcIiwgbGFiZWw6IFwiVHV2YWx1XCIsIHBob25lOiBcIjY4OFwiLCBwaG9uZUxlbmd0aDogNSB9LFxuICB7XG4gICAgY29kZTogXCJUV1wiLFxuICAgIGxhYmVsOiBcIlRhaXdhbiwgUHJvdmluY2Ugb2YgQ2hpbmFcIixcbiAgICBwaG9uZTogXCI4ODZcIixcbiAgICBwaG9uZUxlbmd0aDogOVxuICB9LFxuICB7XG4gICAgY29kZTogXCJUWlwiLFxuICAgIGxhYmVsOiBcIlVuaXRlZCBSZXB1YmxpYyBvZiBUYW56YW5pYVwiLFxuICAgIHBob25lOiBcIjI1NVwiLFxuICAgIHBob25lTGVuZ3RoOiA3XG4gIH0sXG4gIHsgY29kZTogXCJVQVwiLCBsYWJlbDogXCJVa3JhaW5lXCIsIHBob25lOiBcIjM4MFwiLCBwaG9uZUxlbmd0aDogOSB9LFxuICB7IGNvZGU6IFwiVUdcIiwgbGFiZWw6IFwiVWdhbmRhXCIsIHBob25lOiBcIjI1NlwiLCBwaG9uZUxlbmd0aDogNyB9LFxuICB7XG4gICAgY29kZTogXCJVU1wiLFxuICAgIGxhYmVsOiBcIlVuaXRlZCBTdGF0ZXNcIixcbiAgICBwaG9uZTogXCIxXCIsXG4gICAgc3VnZ2VzdGVkOiAhMCxcbiAgICBwaG9uZUxlbmd0aDogMTBcbiAgfSxcbiAgeyBjb2RlOiBcIlVZXCIsIGxhYmVsOiBcIlVydWd1YXlcIiwgcGhvbmU6IFwiNTk4XCIsIHBob25lTGVuZ3RoOiA4IH0sXG4gIHsgY29kZTogXCJVWlwiLCBsYWJlbDogXCJVemJla2lzdGFuXCIsIHBob25lOiBcIjk5OFwiLCBwaG9uZUxlbmd0aDogOSB9LFxuICB7XG4gICAgY29kZTogXCJWQVwiLFxuICAgIGxhYmVsOiBcIkhvbHkgU2VlIChWYXRpY2FuIENpdHkgU3RhdGUpXCIsXG4gICAgcGhvbmU6IFwiMzc5XCIsXG4gICAgcGhvbmVMZW5ndGg6IDEwXG4gIH0sXG4gIHtcbiAgICBjb2RlOiBcIlZDXCIsXG4gICAgbGFiZWw6IFwiU2FpbnQgVmluY2VudCBhbmQgdGhlIEdyZW5hZGluZXNcIixcbiAgICBwaG9uZTogXCIxNzg0XCIsXG4gICAgcGhvbmVMZW5ndGg6IDdcbiAgfSxcbiAgeyBjb2RlOiBcIlZFXCIsIGxhYmVsOiBcIlZlbmV6dWVsYVwiLCBwaG9uZTogXCI1OFwiLCBwaG9uZUxlbmd0aDogNyB9LFxuICB7XG4gICAgY29kZTogXCJWR1wiLFxuICAgIGxhYmVsOiBcIkJyaXRpc2ggVmlyZ2luIElzbGFuZHNcIixcbiAgICBwaG9uZTogXCIxMjg0XCIsXG4gICAgcGhvbmVMZW5ndGg6IDdcbiAgfSxcbiAgeyBjb2RlOiBcIlZJXCIsIGxhYmVsOiBcIlVTIFZpcmdpbiBJc2xhbmRzXCIsIHBob25lOiBcIjEzNDBcIiwgcGhvbmVMZW5ndGg6IDEwIH0sXG4gIHsgY29kZTogXCJWTlwiLCBsYWJlbDogXCJWaWV0bmFtXCIsIHBob25lOiBcIjg0XCIsIHBob25lTGVuZ3RoOiA5IH0sXG4gIHsgY29kZTogXCJWVVwiLCBsYWJlbDogXCJWYW51YXR1XCIsIHBob25lOiBcIjY3OFwiLCBwaG9uZUxlbmd0aDogNSB9LFxuICB7IGNvZGU6IFwiV0ZcIiwgbGFiZWw6IFwiV2FsbGlzIGFuZCBGdXR1bmFcIiwgcGhvbmU6IFwiNjgxXCIsIHBob25lTGVuZ3RoOiA2IH0sXG4gIHsgY29kZTogXCJXU1wiLCBsYWJlbDogXCJTYW1vYVwiLCBwaG9uZTogXCI2ODVcIiwgcGhvbmVMZW5ndGg6IFs1LCA2LCA3XSB9LFxuICB7IGNvZGU6IFwiWEtcIiwgbGFiZWw6IFwiS29zb3ZvXCIsIHBob25lOiBcIjM4M1wiLCBwaG9uZUxlbmd0aDogOCB9LFxuICB7IGNvZGU6IFwiWUVcIiwgbGFiZWw6IFwiWWVtZW5cIiwgcGhvbmU6IFwiOTY3XCIsIHBob25lTGVuZ3RoOiA5IH0sXG4gIHsgY29kZTogXCJZVFwiLCBsYWJlbDogXCJNYXlvdHRlXCIsIHBob25lOiBcIjI2MlwiLCBwaG9uZUxlbmd0aDogOSB9LFxuICB7IGNvZGU6IFwiWkFcIiwgbGFiZWw6IFwiU291dGggQWZyaWNhXCIsIHBob25lOiBcIjI3XCIsIHBob25lTGVuZ3RoOiA5IH0sXG4gIHsgY29kZTogXCJaTVwiLCBsYWJlbDogXCJaYW1iaWFcIiwgcGhvbmU6IFwiMjYwXCIsIHBob25lTGVuZ3RoOiA5IH0sXG4gIHsgY29kZTogXCJaV1wiLCBsYWJlbDogXCJaaW1iYWJ3ZVwiLCBwaG9uZTogXCIyNjNcIiwgcGhvbmVMZW5ndGg6IDkgfVxuXSwgQksgPSAoZSkgPT4ge1xuICBjb25zdCB7XG4gICAgbGFiZWxUeXBlOiB0LFxuICAgIGxhYmVsOiBvLFxuICAgIGRlZmF1bHRDb3VudHJ5Q29kZTogbixcbiAgICBvbkNoYW5nZTogcixcbiAgICBpc1JlcXVpcmVkOiBpLFxuICAgIGRlZmF1bHRWYWx1ZTogYSxcbiAgICBzdXBwb3J0VGV4dDogcyxcbiAgICBpc0Vycm9yOiBsLFxuICAgIHBsYWNlaG9sZGVyOiBwXG4gIH0gPSBlLCBbZCwgYl0gPSBUMSgpLCBbTSwgdV0gPSBUMShcIlwiKSwgW0EsIHpdID0gVDEoITEpLCBbZiwgT10gPSBUMShcIlwiKSwgW2gsIGddID0gVDEoITEpLCBbdiwgTF0gPSBUMShcIlwiKSwgeSA9IG4wKG51bGwpLCBbQiwgWF0gPSBUMSh7fSksIFtGLCBUXSA9IFQxKCksIFt3LCBIXSA9IFQxKCksIFtDLCBxXSA9IFQxKCk7XG4gIFAxKCgpID0+IHtcbiAgICBsZXQgUjtcbiAgICBKZSA9PSBudWxsIHx8IEplLm1hcCgoVSkgPT4ge1xuICAgICAgdmFyIF87XG4gICAgICAoKF8gPSBGID09IG51bGwgPyB2b2lkIDAgOiBGLmNvdW50cnlMaXN0KSA9PSBudWxsID8gdm9pZCAwIDogXy5jb3VudHJ5Q29kZSkgPT0gVS5waG9uZSAmJiAoUiA9IFUucGhvbmVMZW5ndGgpO1xuICAgIH0pO1xuICAgIGxldCBJLCBqO1xuICAgIFIgJiYgQXJyYXkuaXNBcnJheShSKSA/IChJID0gUlsoUiA9PSBudWxsID8gdm9pZCAwIDogUi5sZW5ndGgpIC0gMV0sIGogPSBSWzBdKSA6IChJID0gUiwgaiA9IHZvaWQgMCksIEgoYCR7SX1gKSwgcShgJHtqfWApO1xuICB9LCBbRl0pO1xuICBjb25zdCBtID0gKFIpID0+IHtcbiAgICB2YXIgSztcbiAgICB2YXIgSSA9IChLID0geSA9PSBudWxsID8gdm9pZCAwIDogeS5jdXJyZW50KSA9PSBudWxsID8gdm9pZCAwIDogSy52YWx1ZS5sZW5ndGg7XG4gICAgbGV0IGo7XG4gICAgSmUgPT0gbnVsbCB8fCBKZS5tYXAoKFEpID0+IHtcbiAgICAgIHZhciBFO1xuICAgICAgKChFID0gRiA9PSBudWxsID8gdm9pZCAwIDogRi5jb3VudHJ5TGlzdCkgPT0gbnVsbCA/IHZvaWQgMCA6IEUuY291bnRyeUNvZGUpID09IFEucGhvbmUgJiYgKGogPSBRLnBob25lTGVuZ3RoKTtcbiAgICB9KTtcbiAgICBsZXQgVSwgXztcbiAgICBpZiAoaiAmJiBBcnJheS5pc0FycmF5KGopID8gKFUgPSBqWyhqID09IG51bGwgPyB2b2lkIDAgOiBqLmxlbmd0aCkgLSAxXSwgXyA9IGpbMF0pIDogKFUgPSBqLCBfID0gdm9pZCAwKSwgUiB8fCAoSSA9PSBVID8gKHooITEpLCBPKFwiXCIpKSA6IF8gPT0gbnVsbCAmJiBVICYmIEkgPCBVID8gKHooITApLCBPKGBwaG9uZSBudW1iZXIgbXVzdCBjb250YWluICR7VX0gbnVtYmVyc2ApKSA6IF8gJiYgSSA8IF8gPyAoeighMCksIE8oXG4gICAgICBgcGhvbmUgbnVtYmVyIG11c3QgYmUgJHtffSAtICR7VX0gbnVtYmVyc2BcbiAgICApKSA6ICh6KCExKSwgTyhcIlwiKSkpLCBVICYmIEkgJiYgSSA8PSBVKVxuICAgICAgcmV0dXJuICEwO1xuICAgIGlmICh5ICE9IG51bGwgJiYgeS5jdXJyZW50KSB7XG4gICAgICB2YXIgcjEgPSB5ID09IG51bGwgPyB2b2lkIDAgOiB5LmN1cnJlbnQudmFsdWU7XG4gICAgICByMSA9IHIxLnN1YnN0cmluZygwLCByMS5sZW5ndGggLSAxKSwgeS5jdXJyZW50LnZhbHVlID0gcjE7XG4gICAgfVxuICAgIHJldHVybiAhMTtcbiAgfSwgayA9IChSKSA9PiB7XG4gICAgY29uc3QgSSA9IFIudGFyZ2V0LnZhbHVlO1xuICAgIChGID09IG51bGwgfHwgSlNPTi5zdHJpbmdpZnkoRikgPT0gXCJ7fVwiKSAmJiAhaCA/ICh6KCEwKSwgTyhcbiAgICAgIFwiUGxlYXNlIHNlbGVjdCB0aGUgY291bnRyeSBjb2RlIGJlZm9yZSBlbnRlciBwaG9uZSBudW1iZXJcIlxuICAgICkpIDogSSA/IChMKEkpLCByICYmIHIoSSkpIDogTChcIlwiKTtcbiAgfSwgeCA9IChSKSA9PiB7XG4gICAgdmFyIEk7XG4gICAgKEkgPSBKMiA9PSBudWxsID8gdm9pZCAwIDogSjIuQ291bnRyaWVzKSA9PSBudWxsIHx8IEkuZmlsdGVyKChqKSA9PiB7XG4gICAgICBpZiAoai5Db3VudHJ5TmFtZSA9PSBSKSB7XG4gICAgICAgIGxldCBVID0gai5GbGFnO1xuICAgICAgICBiKFUpO1xuICAgICAgfVxuICAgIH0pO1xuICB9LCBOID0gKFIpID0+IHtcbiAgICB2YXIgSTtcbiAgICBKZSA9PSBudWxsIHx8IEplLmZpbHRlcigoaikgPT4ge1xuICAgICAgdmFyIHIxO1xuICAgICAgaWYgKChqID09IG51bGwgPyB2b2lkIDAgOiBqLnBob25lKSA9PSAoKHIxID0gUiA9PSBudWxsID8gdm9pZCAwIDogUi5jb3VudHJ5TGlzdCkgPT0gbnVsbCA/IHZvaWQgMCA6IHIxLmNvdW50cnlDb2RlKSkge1xuICAgICAgICB2YXIgVSA9IGogPT0gbnVsbCA/IHZvaWQgMCA6IGoucGhvbmVMZW5ndGgsIF8gPSBVW1UubGVuZ3RoIC0gMV07XG4gICAgICAgIGogIT0gbnVsbCAmJiBqLnBob25lTGVuZ3RoICYmIHR5cGVvZiAoaiA9PSBudWxsID8gdm9pZCAwIDogai5waG9uZUxlbmd0aCkgPT0gXCJudW1iZXJcIiA/IChSLm1pbiA9IFUsIFIubWF4ID0gVSkgOiAoUi5taW4gPSBVWzBdLCBSLm1heCA9IF8pO1xuICAgICAgfVxuICAgIH0pLCAoSSA9IFIgPT0gbnVsbCA/IHZvaWQgMCA6IFIubGVmdEljb24pICE9IG51bGwgJiYgSS5uYW1lID8gKHgoUiA9PSBudWxsID8gdm9pZCAwIDogUi5sZWZ0SWNvbi5uYW1lKSwgdShSID09IG51bGwgPyB2b2lkIDAgOiBSLmxlZnRJY29uLmNvbG9yKSwgVChSKSwgciAmJiByKFIpKSA6IChiKHZvaWQgMCksIHUoXCJcIiksIFQoUiksIHIgJiYgcihSKSksIGggfHwgKEwoXCJcIiksIE8oXCJcIiksIHooITEpKTtcbiAgfTtcbiAgUDEoKCkgPT4ge1xuICAgIGwgPyAoeihsKSwgTyhzKSwgZyghMCksIG0oITApKSA6IChnKCExKSwgbSghMSkpO1xuICB9LCBbbCwgcywgdl0pLCBQMSgoKSA9PiB7XG4gICAgdmFyIFI7XG4gICAgYSAmJiBMKGEpLCBuID8gKFIgPSBPYmplY3Qua2V5cyhCKSkgPT0gbnVsbCB8fCBSLm1hcCgoSSkgPT4ge1xuICAgICAgbGV0IFUgPSBCW0ldO1xuICAgICAgKG4gPT0gbnVsbCA/IHZvaWQgMCA6IG4uY291bnRyeUxpc3QuY291bnRyeUNvZGUpID09PSAoVSA9PSBudWxsID8gdm9pZCAwIDogVS5jb3VudHJ5TGlzdC5jb3VudHJ5Q29kZSkgJiYgKFQoVSksIHgoVSA9PSBudWxsID8gdm9pZCAwIDogVS5sZWZ0SWNvbi5uYW1lKSwgdShVID09IG51bGwgPyB2b2lkIDAgOiBVLmxlZnRJY29uLmNvbG9yKSk7XG4gICAgfSkgOiAoeighMSksIE8oXCJcIikpO1xuICB9LCBbbiwgYSwgQl0pLCBQMSgoKSA9PiB7XG4gICAgdmFyIHIxLCBLLCBRLCBFO1xuICAgIGNvbnN0IFIgPSBLai50ei5ndWVzcygpLCBJID0gdksuZ2V0Q291bnRyaWVzRm9yVGltZXpvbmUoUik7XG4gICAgbGV0IGogPSAocjEgPSBrbi5hbGxDb3VudHJpZXMuZmluZChcbiAgICAgIChEKSA9PiB7XG4gICAgICAgIHZhciBHO1xuICAgICAgICByZXR1cm4gRC5pc28yID09PSAoKEcgPSBJWzBdKSA9PSBudWxsID8gdm9pZCAwIDogRy5pZC50b0xvd2VyQ2FzZSgpKTtcbiAgICAgIH1cbiAgICApKSA9PSBudWxsID8gdm9pZCAwIDogcjEuZGlhbENvZGUsIFUgPSBbXSwgXyA9IFtdO1xuICAgIGlmICgoSyA9IGtuID09IG51bGwgPyB2b2lkIDAgOiBrbi5hbGxDb3VudHJpZXMpID09IG51bGwgfHwgSy5tYXAoKEQsIEcpID0+IHtcbiAgICAgIHZhciBXO1xuICAgICAgbGV0IFMgPSBELm5hbWUuc3BsaXQoXCIoXCIpWzBdLnRyaW0oKTtcbiAgICAgIChXID0gSjIgPT0gbnVsbCA/IHZvaWQgMCA6IEoyLkNvdW50cmllcykgPT0gbnVsbCB8fCBXLmZpbHRlcigoUCkgPT4ge1xuICAgICAgICBTID09IFAuQ291bnRyeU5hbWUgJiYgXy5wdXNoKEQpO1xuICAgICAgfSk7XG4gICAgfSksIF8gPT0gbnVsbCB8fCBfLm1hcCgoRCwgRykgPT4ge1xuICAgICAgbGV0IFMgPSBELm5hbWUuc3BsaXQoXCIoXCIpWzBdLnRyaW0oKTtcbiAgICAgIHJldHVybiBVLnB1c2goe1xuICAgICAgICB2YWx1ZTogRyxcbiAgICAgICAgY291bnRyeUxpc3Q6IHtcbiAgICAgICAgICBjb3VudHJ5Q29kZTogRC5kaWFsQ29kZSxcbiAgICAgICAgICBjb3VudHJ5TmFtZTogU1xuICAgICAgICB9LFxuICAgICAgICBsZWZ0SWNvbjoge1xuICAgICAgICAgIG5hbWU6IFMsXG4gICAgICAgICAgY29sb3I6IFwiI0Q3MzczRlwiXG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH0pLCBYKFUpLCBuICYmIE9iamVjdC5rZXlzKG4pLmxlbmd0aCA9PSAwKSB7XG4gICAgICBsZXQgRCA9IFUgPT0gbnVsbCA/IHZvaWQgMCA6IFUuZmlsdGVyKChHKSA9PiB7XG4gICAgICAgIHZhciBKO1xuICAgICAgICBpZiAoKChKID0gRyA9PSBudWxsID8gdm9pZCAwIDogRy5jb3VudHJ5TGlzdCkgPT0gbnVsbCA/IHZvaWQgMCA6IEouY291bnRyeUNvZGUpID09PSBqKVxuICAgICAgICAgIHJldHVybiBHO1xuICAgICAgfSk7XG4gICAgICBUKERbMF0pLCB4KChRID0gRFswXSkgPT0gbnVsbCA/IHZvaWQgMCA6IFEubGVmdEljb24ubmFtZSksIHUoKEUgPSBEWzBdKSA9PSBudWxsID8gdm9pZCAwIDogRS5sZWZ0SWNvbi5jb2xvcik7XG4gICAgfVxuICB9LCBbbl0pO1xuICBjb25zdCBWID0gbTAoKCkgPT4gLyogQF9fUFVSRV9fICovIGMod0ssIHsgJGlzRXJyb3I6IEEsIGNoaWxkcmVuOiAvKiBAX19QVVJFX18gKi8gYyhcbiAgICBZMixcbiAgICB7XG4gICAgICByZWY6IHksXG4gICAgICBsYWJlbDogdCA9PSBcImluc2lkZVwiID8gbyA6IFwiXCIsXG4gICAgICBsYWJlbFR5cGU6IHQgPT0gXCJpbnNpZGVcIiA/IHQgOiBcIlwiLFxuICAgICAgcGxhY2Vob2xkZXI6IHQgIT0gXCJpbnNpZGVcIiA/IHAgOiBcIlwiLFxuICAgICAgb25JbnB1dDogbSxcbiAgICAgIHR5cGU6IFwidGVsXCIsXG4gICAgICBwYXR0ZXJuOiBcIl4tP1swLTldXFxcXGQqXFxcXC4/XFxcXGQqJFwiLFxuICAgICAgdmFsdWU6IHYsXG4gICAgICBpc0Vycm9yOiBBLFxuICAgICAgb25DaGFuZ2U6IGssXG4gICAgICBoYW5kbGVDbGVhckZuOiAoKSA9PiB7XG4gICAgICAgIEwoXCJcIiksIHIgJiYgcihcIlwiKTtcbiAgICAgIH0sXG4gICAgICBpc1JlcXVpcmVkOiAhKGkgPT0gbnVsbCB8fCAhaSksXG4gICAgICBtYXhMZW5ndGg6IHcsXG4gICAgICBzdXBwb3J0VGV4dDogZlxuICAgIH1cbiAgKSB9KSwgW3csIHYsIGgsIEFdKTtcbiAgcmV0dXJuIC8qIEBfX1BVUkVfXyAqLyBlMShVMiwgeyBjaGlsZHJlbjogW1xuICAgIHQgPT0gXCJvdXRzaWRlXCIgJiYgLyogQF9fUFVSRV9fICovIGUxKHlLLCB7IGNoaWxkcmVuOiBbXG4gICAgICBvLFxuICAgICAgXCIgXCIsXG4gICAgICAhaSAmJiAvKiBAX19QVVJFX18gKi8gYyhpciwgeyBjaGlsZHJlbjogXCJPcHRpb25hbFwiIH0pXG4gICAgXSB9KSxcbiAgICAvKiBAX19QVVJFX18gKi8gZTEoeEssIHsgY2hpbGRyZW46IFtcbiAgICAgIC8qIEBfX1BVUkVfXyAqLyBjKFxuICAgICAgICBXSyxcbiAgICAgICAge1xuICAgICAgICAgICRtYXhXaWR0aDogdCAhPSBcImhvcml6b250YWxcIiA/IFwiMTAwcHhcIiA6IFwiMjI1cHhcIixcbiAgICAgICAgICBjaGlsZHJlbjogLyogQF9fUFVSRV9fICovIGMoXG4gICAgICAgICAgICB0dCxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgLi4uZSxcbiAgICAgICAgICAgICAgbGFiZWw6IHQgPT0gXCJob3Jpem9udGFsXCIgPyBvIDogXCJDb2RlXCIsXG4gICAgICAgICAgICAgIGlzRXJyb3I6ICExLFxuICAgICAgICAgICAgICBzdXBwb3J0VGV4dDogXCJcIixcbiAgICAgICAgICAgICAgZGF0YTogQixcbiAgICAgICAgICAgICAgc2VsZWN0ZWRPcHRpb25zOiBOLFxuICAgICAgICAgICAgICBsYWJlbFR5cGU6IHQsXG4gICAgICAgICAgICAgIGljb25MZWZ0OiBkLFxuICAgICAgICAgICAgICBwbGFjZWhvbGRlcjogXCJDb2RlXCIsXG4gICAgICAgICAgICAgIGNvbG9ySWNvbkxlZnQ6IE0sXG4gICAgICAgICAgICAgIGRyb3Bkb3duQm9keVdpZHRoOiBcIjM1MnB4XCIsXG4gICAgICAgICAgICAgIGRlZmF1bHRWYWx1ZXM6IEYsXG4gICAgICAgICAgICAgIHNob3dTZWxlY3RlZExpc3Q6ICEwLFxuICAgICAgICAgICAgICBpc1NlYXJjaGFibGU6ICEwLFxuICAgICAgICAgICAgICBoYW5kbGVDbGVhckZuOiAoKSA9PiB7XG4gICAgICAgICAgICAgICAgZSAhPSBudWxsICYmIGUuaGFuZGxlQ2xlYXJGbiAmJiAoZSA9PSBudWxsIHx8IGUuaGFuZGxlQ2xlYXJGbigpKSwgTChcIlwiKTtcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgaXNSZXF1aXJlZDogIShpID09IG51bGwgfHwgIWkpXG4gICAgICAgICAgICB9XG4gICAgICAgICAgKVxuICAgICAgICB9XG4gICAgICApLFxuICAgICAgLyogQF9fUFVSRV9fICovIGMoUkssIHsgY2hpbGRyZW46IFYgfSlcbiAgICBdIH0pLFxuICAgIC8qIEBfX1BVUkVfXyAqLyBjKHFLLCB7IHBhZGRpbmc6IHQgPT0gXCJob3Jpem9udGFsXCIsIGNoaWxkcmVuOiBmIH0pXG4gIF0gfSk7XG59LCBpJCA9IChlKSA9PiAvKiBAX19QVVJFX18gKi8gYyhVMiwgeyBjaGlsZHJlbjogLyogQF9fUFVSRV9fICovIGMoQkssIHsgLi4uZSB9KSB9KSwgU0sgPSAkLmRpdihcbiAgKHsgdGhlbWU6IHsgY29sb3JzOiBlLCBjdWJpY0JlemllcjogdCwgdHJhbnNpdGlvbnM6IG8gfSwgJGlzQ29sbGFwc2VkOiBuIH0pID0+IG8xYFxuICAgIG1heC13aWR0aDogJHtuID8gXCIxNTJweFwiIDogXCIyNHB4XCJ9O1xuICAgIG1pbi13aWR0aDogJHtuID8gXCIxNTJweFwiIDogXCIyNHB4XCJ9O1xuXG4gICAgYmFja2dyb3VuZDogJHtlLmJhY2tncm91bmRzLmJnUHJpbWFyeX07XG4gICAgdHJhbnNpdGlvbjogbWF4LXdpZHRoIDAuM3MgJHt0LmJhc2V9O1xuICAgIHRyYW5zaXRpb246IG1pbi13aWR0aCAwLjNzICR7dC5iYXNlfTtcbiAgICB0cmFuc2l0aW9uOiAke28uYmFzZX07XG4gICAgb3ZlcmZsb3c6IGhpZGRlbjtcbiAgICBib3JkZXItcmlnaHQ6IDFweCBzb2xpZCAke2UuYm9yZGVyLmJvcmRlclRlcnRpYXJ5fTtcbiAgICBib3gtc2l6aW5nOiBib3JkZXItYm94O1xuICAgICR7IW4gJiYgbzFgXG4gICAgICB0cmFuc2l0aW9uOiAke28uYmFzZX07XG4gICAgICBwYWRkaW5nOiAwO1xuICAgICAgJjpob3ZlciB7XG4gICAgICAgIGJhY2tncm91bmQ6ICR7ZS5iYWNrZ3JvdW5kcy5iZ0hvdmVyUHJpbWFyeX07XG4gICAgICAgIHRyYW5zaXRpb246ICR7by5iYXNlfTtcbiAgICAgIH1cbiAgICBgfSAgXG4gIGBcbiksIEVLID0gJC5oMShcbiAgKHtcbiAgICB0aGVtZTogeyBjb2xvcnM6IGUsIGN1YmljQmV6aWVyOiB0LCB0eXBvZ3JhcGh5OiBvLCBmb250V2VpZ2h0OiBuIH0sXG4gICAgJGlzQ29sbGFwc2VkOiByXG4gIH0pID0+IG8xYFxuICAgIGRpc3BsYXk6ICR7ciA/IFwibm9uZVwiIDogXCJibG9ja1wifTtcbiAgICB3aGl0ZS1zcGFjZTogbm93cmFwO1xuICAgIHRyYW5zZm9ybTogcm90YXRlKDkwZGVnKTtcbiAgICBjdXJzb3I6IHBvaW50ZXI7XG4gICAgbWFyZ2luLXRvcDogMjBweDtcbiAgICB0cmFuc2l0aW9uOiB0cmFuc2Zvcm0gMC4zcyAke3QuYmFzZX07XG4gICAgZm9udC1zaXplOiAke28udDEyfTtcbiAgICBmb250LXdlaWdodDogJHtuLnJlZ3VsYXJ9O1xuICAgIGNvbG9yOiAke2UudGV4dEljb24udGV4dFByaW1hcnl9O1xuICBgXG4pLCBrSyA9ICQuaDEoXG4gICh7XG4gICAgdGhlbWU6IHsgY29sb3JzOiBlLCBjdWJpY0JlemllcjogdCwgdHlwb2dyYXBoeTogbywgZm9udFdlaWdodDogbiB9LFxuICAgICRpc0NvbGxhcHNlZDogclxuICB9KSA9PiBvMWBcbiAgICBkaXNwbGF5OiAke3IgPyBcImJsb2NrXCIgOiBcIm5vbmVcIn07XG4gICAgdHJhbnNpdGlvbjogdHJhbnNmb3JtIDAuM3MgJHt0LmJhc2V9O1xuICAgIGZvbnQtc2l6ZTogJHtvLnQxMn07XG4gICAgZm9udC13ZWlnaHQ6ICR7bi5yZWd1bGFyfTtcbiAgICBjb2xvcjogJHtlLnRleHRJY29uLnRleHRQcmltYXJ5fTtcbiAgICB3aGl0ZS1zcGFjZTogbm93cmFwO1xuICAgIG1hcmdpbjogMDtcbiAgYFxuKSwgTksgPSAkLmRpdihcbiAgKHsgdGhlbWU6IHsgY3ViaWNCZXppZXI6IGUgfSwgJGlzQ29sbGFwc2VkOiB0IH0pID0+IG8xYFxuICAgIHBhZGRpbmc6IDE1cHggMDtcbiAgICBkaXNwbGF5OiBmbGV4O1xuICAgIGp1c3RpZnktY29udGVudDogY2VudGVyO1xuICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gICAgdHJhbnNpdGlvbjogdHJhbnNmb3JtIDAuM3MgJHtlLmJhc2V9O1xuICAgIGJveC1zaXppbmc6IGJvcmRlci1ib3g7XG4gICAgJHt0ICYmIG8xYFxuICAgICAgcGFkZGluZzogMTFweCA4cHg7XG4gICAgICBqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWJldHdlZW47XG4gICAgICB0cmFuc2l0aW9uOiB0cmFuc2Zvcm0gMC4zcyAke2UuYmFzZX07XG4gICAgYH1cbiAgYFxuKSwgVEsgPSAkLmRpdihcbiAgKHsgdGhlbWU6IHsgY29sb3JzOiBlLCBjdWJpY0JlemllcjogdCB9LCAkaXNDb2xsYXBzZWQ6IG8gfSkgPT4gbzFgXG4gICAgdHJhbnNmb3JtLW9yaWdpbjogY2VudGVyO1xuICAgIHRyYW5zZm9ybTogcm90YXRlKCR7byA/IFwiMTgwZGVnXCIgOiBcIjBcIn0pO1xuICAgIHRyYW5zaXRpb246IHRyYW5zZm9ybSAwLjNzICR7dC5iYXNlfTtcbiAgICBjdXJzb3I6IHBvaW50ZXI7XG4gICAgbWF4LXdpZHRoOiAxOHB4O1xuICAgIG1heC1oZWlnaHQ6IDE4cHg7XG4gICAgbWluLXdpZHRoOiAxOHB4O1xuICAgIG1pbi1oZWlnaHQ6IDE4cHg7XG4gICAgZGlzcGxheTogZmxleDtcbiAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcbiAgICBhbGlnbi1pdGVtczogY2VudGVyO1xuICAgIGJvcmRlci1yYWRpdXM6IDUwJTtcbiAgICBib3gtc2l6aW5nOiBib3JkZXItYm94O1xuICAgIGJvcmRlcjpub25lO1xuICAgIGNvbG9yOiAke2UudGV4dEljb24udGV4dFByaW1hcnl9O1xuICAgICR7byAmJiBvMWBcbiAgICAgIGJvcmRlcjogMXB4IHNvbGlkICR7ZS5ib3JkZXIuYm9yZGVyVGVydGlhcnl9O1xuICAgICAgYm9yZGVyLXJhZGl1czogNTAlO1xuICAgICAgYmFja2dyb3VuZDogJHtlLmJhY2tncm91bmRzLmJnUHJpbWFyeX07XG4gICAgYH1cbiAgYFxuKSwgSUsgPSAkLmRpdmBcbiAgbWFyZ2luOiAwIC0xMHB4O1xuYCwgREsgPSAkLmRpdihcbiAgKHsgJGlzQ29sbGFwc2VkOiBlIH0pID0+IG8xYFxuICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgIGhlaWdodDogMTAwJTtcbiAgICAkeyFlICYmIG8xYFxuICAgICAgZGlzcGxheTogbm9uZTtcbiAgICBgfVxuICBgXG4pO1xuJC5kaXZgXG4gIHdpZHRoOiAxMDAlO1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAkeyh7IHRoZW1lOiB7IGNvbG9yczogZSB9IH0pID0+IGUud2hpdGV9O1xuYDtcbiQuZGl2KFxuICAoeyB0aGVtZTogeyBjb2xvcnM6IGUgfSwgJGlzVGVtcGxhdGU6IHQgfSkgPT4gbzFgXG4gICAgYmFja2dyb3VuZC1jb2xvcjogJHtlLndoaXRlfTtcbiAgICBtaW4td2lkdGg6ICR7dCA/IFwiOTd2d1wiIDogXCIxMDAlXCJ9O1xuICBgXG4pO1xuJC5kaXYoXG4gICh7IHRoZW1lOiB7IGNvbG9yczogZSB9LCBpc0V4YW1wbGU6IHQgfSkgPT4gbzFgXG4gICAgZGlzcGxheTogZmxleDtcbiAgICBqdXN0aWZ5LWNvbnRlbnQ6IGZsZXgtc3RhcnQ7XG4gICAgYm9yZGVyOiAxcHggc29saWQgJHtlLmJvcmRlci5ib3JkZXJQcmltYXJ5fTtcbiAgICBiYWNrZ3JvdW5kOiAke2UuYmFja2dyb3VuZHMuYmdTZWNvbmRhcnl9O1xuICAgIGhlaWdodDogJHt0ID8gXCJhdXRvXCIgOiBcIjkzdmhcIn07XG4gICAgbWF4LXdpZHRoOiA5N3Z3O1xuICAgIC5hY3Rpb24tYmFyLWNvbnRhaW5lciB7XG4gICAgICBwYWRkaW5nOiAwIDhweDtcbiAgICB9XG4gIGBcbik7XG4kLmRpdmBcbiAgZmxleC1ncm93OiAxO1xuICBoZWlnaHQ6IDEwMCU7XG4gIG92ZXJmbG93OiBoaWRkZW47XG5gO1xuJC5kaXZgXG4gIG92ZXJmbG93OiBoaWRkZW47XG5gO1xuJC5kaXYoXG4gICh7IHRoZW1lOiB7IGNvbG9yczogZSB9IH0pID0+IG8xYFxuICBwYWRkaW5nOiAwIDEwcHg7XG4gIGNvbG9yOiR7ZS50ZXh0SWNvbi50ZXh0UHJpbWFyeX07XG4gIGBcbik7XG5jb25zdCBhJCA9ICh7IHRpdGxlOiBlLCBjaGlsZHJlbjogdCB9KSA9PiB7XG4gIGNvbnN0IFtvLCBuXSA9IFQxKCExKSwgciA9ICgpID0+IHtcbiAgICBuKCFvKTtcbiAgfTtcbiAgcmV0dXJuIC8qIEBfX1BVUkVfXyAqLyBlMShTSywgeyAkaXNDb2xsYXBzZWQ6IG8sIGNoaWxkcmVuOiBbXG4gICAgLyogQF9fUFVSRV9fICovIGUxKE5LLCB7ICRpc0NvbGxhcHNlZDogbywgY2hpbGRyZW46IFtcbiAgICAgIC8qIEBfX1BVUkVfXyAqLyBjKGtLLCB7ICRpc0NvbGxhcHNlZDogbywgY2hpbGRyZW46IGUgfSksXG4gICAgICAvKiBAX19QVVJFX18gKi8gYyhUSywgeyAkaXNDb2xsYXBzZWQ6IG8sIG9uQ2xpY2s6IHIsIGNoaWxkcmVuOiAvKiBAX19QVVJFX18gKi8gYyhaMSwgeyBuYW1lOiBcIkNoZXZyb25SaWdodFRoaWNrXCIsIHNpemU6IFwieHh4eHNcIiB9KSB9KVxuICAgIF0gfSksXG4gICAgLyogQF9fUFVSRV9fICovIGMoSUssIHsgY2hpbGRyZW46IC8qIEBfX1BVUkVfXyAqLyBjKFAyLCB7ICRkZWZhdWx0OiAhMCB9KSB9KSxcbiAgICAvKiBAX19QVVJFX18gKi8gYyhFSywgeyAkaXNDb2xsYXBzZWQ6IG8sIG9uQ2xpY2s6IHIsIGNoaWxkcmVuOiBlIH0pLFxuICAgIC8qIEBfX1BVUkVfXyAqLyBjKERLLCB7ICRpc0NvbGxhcHNlZDogbywgY2hpbGRyZW46IHQgfSlcbiAgXSB9KTtcbn0sIEhLID0gKCkgPT4gLyogQF9fUFVSRV9fICovIGUxKFxuICBcInN2Z1wiLFxuICB7XG4gICAgd2lkdGg6IFwiMjYwXCIsXG4gICAgaGVpZ2h0OiBcIjI2MFwiLFxuICAgIHZpZXdCb3g6IFwiMCAwIDI2MCAyNjBcIixcbiAgICBmaWxsOiBcIm5vbmVcIixcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIGNoaWxkcmVuOiBbXG4gICAgICAvKiBAX19QVVJFX18gKi8gYyhcbiAgICAgICAgXCJwYXRoXCIsXG4gICAgICAgIHtcbiAgICAgICAgICBzdHlsZTogeyBtaXhCbGVuZE1vZGU6IFwibXVsdGlwbHlcIiB9LFxuICAgICAgICAgIGQ6IFwiTTEzLjg3MzkgMTc3LjMxNUMxNi4wMjcxIDE3OS43NjUgMTguNTI3MSAxODEuNzk0IDIxLjA4ODIgMTgzLjgxNEM0Ni42MzUxIDIwMy44NDIgODkuMzYzMSAyMDkuMjUyIDExNi45NDEgMjA0LjI4M0MxMzAuNzk1IDIwMS43ODYgMTM5Ljc5NyAxOTEuMDY0IDEzNy4zNDEgMTc0LjczMkMxMzYuMDM3IDE2Ni4wNzUgMTI2Ljk0NyAxNjEuNTc3IDExOC43NSAxNjEuNjkxQzk5LjExMzUgMTYxLjk2OCA3Ni4yNzE5IDE2MC4xMTUgNTQuODcwNSAxNTUuNDg3QzM5LjI0MDQgMTUyLjEwNyAyMS4yOTYzIDE0Mi43MjMgMTUuMDAzMiAxMzUuMDUxQzE0LjE1MTQgMTMzLjk4OCA4LjA0Njk2IDEyNy43MzEgMjAuODY5IDEyMy4xODNDMjAuODY5IDEyMy4xODMgMTEuMzA3MyAxMjUuOTE0IDguNDk5MjQgMTMyLjM0QzcuMTQ1MTggMTM1LjQzNCA2LjIzNTA3IDEzOS44MzIgNi4xNjg0NyAxNDMuMjQyQzYuMDgyNDYgMTQ3LjY4MSA2LjIxMjg3IDE1Mi4xNDkgNi41NjUyNiAxNTYuNTg1QzYuOTg5NzkgMTYxLjk3MSA3Ljc4MDU5IDE2Ny40NjUgMTAuMzM4OSAxNzIuMjE4QzExLjMyNTggMTc0LjA0MiAxMi41MTEzIDE3NS43NTIgMTMuODczOSAxNzcuMzE1WlwiLFxuICAgICAgICAgIGZpbGw6IFwidXJsKCNwYWludDBfbGluZWFyKVwiXG4gICAgICAgIH1cbiAgICAgICksXG4gICAgICAvKiBAX19QVVJFX18gKi8gYyhcbiAgICAgICAgXCJwYXRoXCIsXG4gICAgICAgIHtcbiAgICAgICAgICBzdHlsZTogeyBtaXhCbGVuZE1vZGU6IFwibXVsdGlwbHlcIiB9LFxuICAgICAgICAgIGQ6IFwiTTAuMDMzNTc0MSAxMzMuMzg2TDAuMDAwMjc3NDI0IDEzMy4yOEMtMC4wMDU0NjY5MiAxMzMuMDMgMC4wNzgxNTY2IDEzMi43ODYgMC4yMzYxMjkgMTMyLjU5MkMwLjE3NTA4NSAxMzIuODYxIDAuMTA1NzE3IDEzMy4xMjIgMC4wMzM1NzQxIDEzMy4zODZaXCIsXG4gICAgICAgICAgZmlsbDogXCJ1cmwoI3BhaW50MV9saW5lYXIpXCJcbiAgICAgICAgfVxuICAgICAgKSxcbiAgICAgIC8qIEBfX1BVUkVfXyAqLyBjKFxuICAgICAgICBcInBhdGhcIixcbiAgICAgICAge1xuICAgICAgICAgIHN0eWxlOiB7IG1peEJsZW5kTW9kZTogXCJtdWx0aXBseVwiIH0sXG4gICAgICAgICAgZDogXCJNMjM0LjcyMyAyMTkuNTc0QzIxMS44NyAyMDUuNTEyIDE5My4yODIgMjAwLjczNCAxNTQuMDQ1IDE5MS41MjJDMTE1LjQ4NCAxODIuNDYzIDQuMzI4ODMgMTU5LjA4NSAxMy44NDg5IDE3Ny4xODVDMTQuMjA5NiAxNzcuODcgMTEuMzEgMTc0LjAwOCAxMC4zMzg5IDE3Mi4yMDdDNy43Njk0OSAxNjcuNDU0IDYuOTg5NzkgMTYxLjk2IDYuNTY1MjYgMTU2LjU4OEM2LjIxMjg3IDE1Mi4xNDkgNi4wODI0NiAxNDcuNjk1IDYuMTY4NDcgMTQzLjI0NUM2LjIzNTA3IDEzOS44NDMgNy4xNDUxOCAxMzUuNDM2IDguNDk5MjQgMTMyLjM0M0MxMS4xNjU4IDEyNi4yMzggMTkuOTE3MiAxMjMuNDgzIDIwLjc5NDEgMTIzLjIxOUMzNS44MzMxIDEyMC4wMTIgNjAuMzYxNyAxMTguOTkxIDk4LjUwODYgMTI2LjM4MkMxNTMuOTc1IDEzNy4xMTggMjI1LjM3MiAxNTguODA4IDI0Ni45OTggMTc0Ljk1MUMyNzEuMDkxIDE5Mi45MzcgMjU4LjYwNSAyMzQuMjU2IDIzNC43MjMgMjE5LjU3NFpcIixcbiAgICAgICAgICBmaWxsOiBcInVybCgjcGFpbnQyX2xpbmVhcilcIlxuICAgICAgICB9XG4gICAgICApLFxuICAgICAgLyogQF9fUFVSRV9fICovIGMoXG4gICAgICAgIFwicGF0aFwiLFxuICAgICAgICB7XG4gICAgICAgICAgc3R5bGU6IHsgbWl4QmxlbmRNb2RlOiBcIm11bHRpcGx5XCIgfSxcbiAgICAgICAgICBkOiBcIk0yMTcuODg5IDE0OC42NzJDMjE3LjIwOSAxMzEuNDEgMTk5Ljg1MyAxMjAuMjY3IDE4Ni42NTMgMTEyLjI2N0MxNDguNTA5IDg5LjE0MDEgMTAyLjMxOCA3NS4wNTg0IDU3LjQ1OTQgNzguNTQzNEM0Ni43MzUxIDc5LjM3NTggMzYuMjYzMiA4MS42NTk0IDI2LjAzODQgODQuOTU4NkMtMy4wNzEyOSA5NC4zNTEgLTkuNTk0NjcgNjAuMzY2MiAxNi4zMjQxIDQ3Ljc1NTFDMTkuNzE0OCA0Ni4xMDY5IDI4LjExOTQgNDMuMDk5MSAzMy4wOTczIDQxLjkyODFDNzkuNDc2OCAzMC45NzYzIDEyMy43OTIgMzkuODIyMSAxNjguMjU0IDUzLjM2ODNDMTc4LjI5MyA1Ni40MjA1IDE5NC40NTkgNjMuMDIxNiAyMDMuMzg4IDY4LjY3OTNDMjA0LjM4MiA2OS4yNjkxIDIwNS4zMTIgNjkuOTYxIDIwNi4xNjMgNzAuNzQzN0MyMDguMDMgNzIuNTQ0NSAyMzUuNDExIDEzNi4yNzIgMjE3Ljg4OSAxNDguNjcyWlwiLFxuICAgICAgICAgIGZpbGw6IFwidXJsKCNwYWludDNfbGluZWFyKVwiXG4gICAgICAgIH1cbiAgICAgICksXG4gICAgICAvKiBAX19QVVJFX18gKi8gYyhcbiAgICAgICAgXCJwYXRoXCIsXG4gICAgICAgIHtcbiAgICAgICAgICBzdHlsZTogeyBtaXhCbGVuZE1vZGU6IFwibXVsdGlwbHlcIiB9LFxuICAgICAgICAgIGQ6IFwiTTIwNi4yNjIgNzAuODQ5MUMyMDguNzk2IDc0LjMyNTkgMjM1LjE2NCAxMzYuNDQxIDIxNy44ODkgMTQ4LjY2NEMyMTcuODg5IDE0OC42OCAyMTcuODg5IDE0OC43IDIxNy44ODkgMTQ4LjcxNkMyMTcuNzM4IDE0OC44NjcgMjE3LjU3IDE0OC45OTkgMjE3LjM4OSAxNDkuMTFDMjA1LjU4IDE1Ni4xNzIgMTY2LjMzNCAxNTYuNjMzIDEyNC43NjkgMTQ3LjA3MUM4Ni4zNzc1IDEzOC4yNTYgNzAuNzAwMyAxMjcuOTkyIDcyLjUyODkgMTEwLjI1Qzc0LjI5MDggOTUuMTExMyA5My44MTY2IDg5LjE2MjMgMTI1Ljk4MSA4OC42NzRDMTU2LjMzNyA4OC4yMDUgMjA4LjEwNSA5MS42OTAxIDIwNi4yNjIgNzAuODQ5MVpcIixcbiAgICAgICAgICBmaWxsOiBcInVybCgjcGFpbnQ0X2xpbmVhcilcIlxuICAgICAgICB9XG4gICAgICApLFxuICAgICAgLyogQF9fUFVSRV9fICovIGUxKFwiZGVmc1wiLCB7IGNoaWxkcmVuOiBbXG4gICAgICAgIC8qIEBfX1BVUkVfXyAqLyBlMShcbiAgICAgICAgICBcImxpbmVhckdyYWRpZW50XCIsXG4gICAgICAgICAge1xuICAgICAgICAgICAgaWQ6IFwicGFpbnQwX2xpbmVhclwiLFxuICAgICAgICAgICAgeDE6IFwiMi41OTA5MVwiLFxuICAgICAgICAgICAgeTE6IFwiMTUzLjQ5M1wiLFxuICAgICAgICAgICAgeDI6IFwiMTM2Ljc5NFwiLFxuICAgICAgICAgICAgeTI6IFwiMTg3LjIyN1wiLFxuICAgICAgICAgICAgZ3JhZGllbnRVbml0czogXCJ1c2VyU3BhY2VPblVzZVwiLFxuICAgICAgICAgICAgY2hpbGRyZW46IFtcbiAgICAgICAgICAgICAgLyogQF9fUFVSRV9fICovIGMoXCJzdG9wXCIsIHsgc3RvcENvbG9yOiBcIiMwMDU2QTRcIiB9KSxcbiAgICAgICAgICAgICAgLyogQF9fUFVSRV9fICovIGMoXCJzdG9wXCIsIHsgb2Zmc2V0OiBcIjFcIiwgc3RvcENvbG9yOiBcIiMwMDdFQjlcIiB9KVxuICAgICAgICAgICAgXVxuICAgICAgICAgIH1cbiAgICAgICAgKSxcbiAgICAgICAgLyogQF9fUFVSRV9fICovIGUxKFxuICAgICAgICAgIFwibGluZWFyR3JhZGllbnRcIixcbiAgICAgICAgICB7XG4gICAgICAgICAgICBpZDogXCJwYWludDFfbGluZWFyXCIsXG4gICAgICAgICAgICB4MTogXCItMC44NTkyMjJcIixcbiAgICAgICAgICAgIHkxOiBcIjEzMi42MzVcIixcbiAgICAgICAgICAgIHgyOiBcIi0wLjcyOTAzMlwiLFxuICAgICAgICAgICAgeTI6IFwiMTMyLjY5MVwiLFxuICAgICAgICAgICAgZ3JhZGllbnRVbml0czogXCJ1c2VyU3BhY2VPblVzZVwiLFxuICAgICAgICAgICAgY2hpbGRyZW46IFtcbiAgICAgICAgICAgICAgLyogQF9fUFVSRV9fICovIGMoXCJzdG9wXCIsIHsgc3RvcENvbG9yOiBcIiNGRkQ4MDBcIiB9KSxcbiAgICAgICAgICAgICAgLyogQF9fUFVSRV9fICovIGMoXCJzdG9wXCIsIHsgb2Zmc2V0OiBcIjAuNTFcIiwgc3RvcENvbG9yOiBcIiNGNDk2MDBcIiB9KSxcbiAgICAgICAgICAgICAgLyogQF9fUFVSRV9fICovIGMoXCJzdG9wXCIsIHsgb2Zmc2V0OiBcIjAuNjJcIiwgc3RvcENvbG9yOiBcIiNGMzhGMDFcIiB9KSxcbiAgICAgICAgICAgICAgLyogQF9fUFVSRV9fICovIGMoXCJzdG9wXCIsIHsgb2Zmc2V0OiBcIjAuNzhcIiwgc3RvcENvbG9yOiBcIiNFRjdCMDZcIiB9KSxcbiAgICAgICAgICAgICAgLyogQF9fUFVSRV9fICovIGMoXCJzdG9wXCIsIHsgb2Zmc2V0OiBcIjAuOTZcIiwgc3RvcENvbG9yOiBcIiNFQTVCMENcIiB9KVxuICAgICAgICAgICAgXVxuICAgICAgICAgIH1cbiAgICAgICAgKSxcbiAgICAgICAgLyogQF9fUFVSRV9fICovIGUxKFxuICAgICAgICAgIFwibGluZWFyR3JhZGllbnRcIixcbiAgICAgICAgICB7XG4gICAgICAgICAgICBpZDogXCJwYWludDJfbGluZWFyXCIsXG4gICAgICAgICAgICB4MTogXCIxMC43MTFcIixcbiAgICAgICAgICAgIHkxOiBcIjEyNC42MzZcIixcbiAgICAgICAgICAgIHgyOiBcIjI1MC43MjhcIixcbiAgICAgICAgICAgIHkyOiBcIjIyNi4zODJcIixcbiAgICAgICAgICAgIGdyYWRpZW50VW5pdHM6IFwidXNlclNwYWNlT25Vc2VcIixcbiAgICAgICAgICAgIGNoaWxkcmVuOiBbXG4gICAgICAgICAgICAgIC8qIEBfX1BVUkVfXyAqLyBjKFwic3RvcFwiLCB7IHN0b3BDb2xvcjogXCIjMDA2OUI0XCIgfSksXG4gICAgICAgICAgICAgIC8qIEBfX1BVUkVfXyAqLyBjKFwic3RvcFwiLCB7IG9mZnNldDogXCIwLjg0XCIsIHN0b3BDb2xvcjogXCIjMDA5QkRCXCIgfSlcbiAgICAgICAgICAgIF1cbiAgICAgICAgICB9XG4gICAgICAgICksXG4gICAgICAgIC8qIEBfX1BVUkVfXyAqLyBlMShcbiAgICAgICAgICBcImxpbmVhckdyYWRpZW50XCIsXG4gICAgICAgICAge1xuICAgICAgICAgICAgaWQ6IFwicGFpbnQzX2xpbmVhclwiLFxuICAgICAgICAgICAgeDE6IFwiMi42MTMzMlwiLFxuICAgICAgICAgICAgeTE6IFwiNDcuNDExM1wiLFxuICAgICAgICAgICAgeDI6IFwiMjMzLjIxOFwiLFxuICAgICAgICAgICAgeTI6IFwiMTEyLjI2OVwiLFxuICAgICAgICAgICAgZ3JhZGllbnRVbml0czogXCJ1c2VyU3BhY2VPblVzZVwiLFxuICAgICAgICAgICAgY2hpbGRyZW46IFtcbiAgICAgICAgICAgICAgLyogQF9fUFVSRV9fICovIGMoXCJzdG9wXCIsIHsgb2Zmc2V0OiBcIjAuMDVcIiwgc3RvcENvbG9yOiBcIiMwQkJCRUZcIiB9KSxcbiAgICAgICAgICAgICAgLyogQF9fUFVSRV9fICovIGMoXCJzdG9wXCIsIHsgb2Zmc2V0OiBcIjAuMzhcIiwgc3RvcENvbG9yOiBcIiMwODlCRDhcIiB9KSxcbiAgICAgICAgICAgICAgLyogQF9fUFVSRV9fICovIGMoXCJzdG9wXCIsIHsgb2Zmc2V0OiBcIjFcIiwgc3RvcENvbG9yOiBcIiMwMDU2QTRcIiB9KVxuICAgICAgICAgICAgXVxuICAgICAgICAgIH1cbiAgICAgICAgKSxcbiAgICAgICAgLyogQF9fUFVSRV9fICovIGUxKFxuICAgICAgICAgIFwibGluZWFyR3JhZGllbnRcIixcbiAgICAgICAgICB7XG4gICAgICAgICAgICBpZDogXCJwYWludDRfbGluZWFyXCIsXG4gICAgICAgICAgICB4MTogXCI3OS4xNjM4XCIsXG4gICAgICAgICAgICB5MTogXCI4NC44NTQxXCIsXG4gICAgICAgICAgICB4MjogXCIyMjYuMTg5XCIsXG4gICAgICAgICAgICB5MjogXCIxMjYuMjA1XCIsXG4gICAgICAgICAgICBncmFkaWVudFVuaXRzOiBcInVzZXJTcGFjZU9uVXNlXCIsXG4gICAgICAgICAgICBjaGlsZHJlbjogW1xuICAgICAgICAgICAgICAvKiBAX19QVVJFX18gKi8gYyhcInN0b3BcIiwgeyBzdG9wQ29sb3I6IFwiIzAwODBDOVwiIH0pLFxuICAgICAgICAgICAgICAvKiBAX19QVVJFX18gKi8gYyhcInN0b3BcIiwgeyBvZmZzZXQ6IFwiMVwiLCBzdG9wQ29sb3I6IFwiIzFEM0Q5MVwiIH0pXG4gICAgICAgICAgICBdXG4gICAgICAgICAgfVxuICAgICAgICApXG4gICAgICBdIH0pXG4gICAgXVxuICB9XG4pLCBWSyA9ICgpID0+IC8qIEBfX1BVUkVfXyAqLyBlMShcbiAgXCJzdmdcIixcbiAge1xuICAgIHdpZHRoOiBcIjI2MFwiLFxuICAgIGhlaWdodDogXCIyNjBcIixcbiAgICB2aWV3Qm94OiBcIjAgMCAyNjAgMjYwXCIsXG4gICAgZmlsbDogXCJub25lXCIsXG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICBjaGlsZHJlbjogW1xuICAgICAgLyogQF9fUFVSRV9fICovIGMoXG4gICAgICAgIFwicGF0aFwiLFxuICAgICAgICB7XG4gICAgICAgICAgc3R5bGU6IHsgbWl4QmxlbmRNb2RlOiBcIm11bHRpcGx5XCIgfSxcbiAgICAgICAgICBkOiBcIk04Ny41MTc2IDQ0LjgwOUMxMzQuNjI0IDQ3LjU3MDcgMTU5LjU2NiA1OS40MDkyIDE1OS4yMDggNzguNjY2OUMxNTguNjg0IDk1LjEwNSAxMzcuODM5IDEwNS45NzUgMTAzLjI5OSAxMDkuMzk5QzYzLjAxNjYgMTEzLjM3NSA2Ljk5MTI2IDExMy41MjMgMjAuMzU1NSAxNDAuNTM0QzcuMDEyNjMgMTE5LjA4IC0wLjAzOTk3OTEgOTQuMzExIDAuMDAwMTcwNDczIDY5LjA0NjFDMC4wMDAxNzA0NzMgNjcuMTE0OSAwLjA2MTMyNjUgNjUuMjA5NCAwLjE0MTc5NSA2My4zMTAzQzAuNDI1MDQ0IDU2LjUxMjQgOC41ODc3NSA0MC4xOTY2IDg3LjUxNzYgNDQuODA5WlwiLFxuICAgICAgICAgIGZpbGw6IFwidXJsKCNwYWludDBfbGluZWFyKVwiXG4gICAgICAgIH1cbiAgICAgICksXG4gICAgICAvKiBAX19QVVJFX18gKi8gYyhcbiAgICAgICAgXCJwYXRoXCIsXG4gICAgICAgIHtcbiAgICAgICAgICBzdHlsZTogeyBtaXhCbGVuZE1vZGU6IFwibXVsdGlwbHlcIiB9LFxuICAgICAgICAgIGQ6IFwiTTI2MCAxMzQuMTg0QzI1OC44MzUgMTI2LjM0IDI0OS45MDkgMTIyLjE5NCAyNDMuMzUgMTE5LjU4N0MyMzMuNjA5IDExNS42ODEgMjIzLjQ2IDExMi44ODYgMjEzLjA5MyAxMTEuMjUzQzIwNS43OTYgMTEwLjExNyAxOTguNDA2IDEwOS42ODYgMTkxLjAyNiAxMDkuOTY2QzE3Ny4zOTEgMTEwLjUxMyAxNTYuNjQ2IDExMi45OTIgMTU0LjUwNiAxMzAuMDY0QzE1Mi4yNzkgMTQ3LjgyMSAxODAuNDEgMTYwLjg1NCAxOTEuOTg1IDE2Ni45NzNDMTk5Ljk1MSAxNzEuMTgzIDIxNC43ODMgMTc3Ljk0MiAyMjMuNTAzIDE4Mi42NjdDMjM5LjE0MyAxNjkuNDQgMjUxLjYxNSAxNTIuODcyIDI2MCAxMzQuMTg0WlwiLFxuICAgICAgICAgIGZpbGw6IFwidXJsKCNwYWludDFfbGluZWFyKVwiXG4gICAgICAgIH1cbiAgICAgICksXG4gICAgICAvKiBAX19QVVJFX18gKi8gYyhcbiAgICAgICAgXCJwYXRoXCIsXG4gICAgICAgIHtcbiAgICAgICAgICBzdHlsZTogeyBtaXhCbGVuZE1vZGU6IFwibXVsdGlwbHlcIiB9LFxuICAgICAgICAgIGQ6IFwiTTU3LjkxODIgMTg4LjA0NkM1OS4yODYxIDE4OS4wNiA2MC45MzQxIDE5MC4yNTcgNjIuNTc4OSAxOTEuNDI5QzgwLjU0OTkgMjAzLjgwNCAxMDEuMjgxIDIxMS41ODQgMTIyLjk1NiAyMTQuMDg5QzEyMi45NTYgMjE0LjA4OSAxNDAuNTAxIDIxMC4xMzMgMTM3LjkwNyAyMDEuODI5QzEzNS40MzIgMTkzLjkxNCAxMjEuMzUgMTg5LjEzMSA5Ny44MDQ3IDE4Ni4yOTJDNTguMTU2NCAxODEuNDk5IDU2LjYxMTQgMTg2LjkyNiA1Ny45MTgyIDE4OC4wNDZaXCIsXG4gICAgICAgICAgZmlsbDogXCJ1cmwoI3BhaW50Ml9saW5lYXIpXCJcbiAgICAgICAgfVxuICAgICAgKSxcbiAgICAgIC8qIEBfX1BVUkVfXyAqLyBjKFxuICAgICAgICBcInBhdGhcIixcbiAgICAgICAge1xuICAgICAgICAgIHN0eWxlOiB7IG1peEJsZW5kTW9kZTogXCJtdWx0aXBseVwiIH0sXG4gICAgICAgICAgZDogXCJNMjU4LjY3MSAxMzcuMDU4QzI0Mi43MjggMTY0Ljk4NyAxOTEuMDEzIDE1NS42MDggMTU1LjQyNyAxNTAuNTIyQzMzLjQzNjQgMTMzLjA5NiAzLjg4ODQzIDEwMS40MTQgMy44ODg0MyAxMDEuNDE0QzcuMjc3NzUgMTE1LjI0MSAxMi44MzU2IDEyOC40NDUgMjAuMzU1NSAxNDAuNTM0QzMwLjEyNDMgMTU1LjE3NiA4NS42NjM2IDE3Ny44NzIgMTY4LjU2MiAxODQuNzk1QzE5Ni40ODUgMTg3LjEzMiAyMTEuMDA4IDE4Ny4xOCAyMTguNTA3IDE4Ni42OTdDMjM1LjYxOCAxNzMuNTQ1IDI0OS4zNzkgMTU2LjUzNyAyNTguNjcxIDEzNy4wNThaXCIsXG4gICAgICAgICAgZmlsbDogXCJ1cmwoI3BhaW50M19saW5lYXIpXCJcbiAgICAgICAgfVxuICAgICAgKSxcbiAgICAgIC8qIEBfX1BVUkVfXyAqLyBjKFxuICAgICAgICBcInBhdGhcIixcbiAgICAgICAge1xuICAgICAgICAgIHN0eWxlOiB7IG1peEJsZW5kTW9kZTogXCJtdWx0aXBseVwiIH0sXG4gICAgICAgICAgZDogXCJNMjE4LjU3NSAxODYuNjJDMjE4LjU3NSAxODYuNTY5IDIxOC41NTkgMTg2LjU2MiAyMTguNTQ2IDE4Ni42MkMyMTguNTQ2IDE4Ni42MiAyMTguNTQ2IDE4Ni41OTggMjE4LjU0NiAxODYuNjAxQzIxMC40NzMgMTkxLjIxNiAxOTMuMzExIDE5Ni4xNzMgMTc3LjM5NCAxOTkuNDc2QzEyOC41NSAyMDkuNjQ0IDcwLjI3OCAxOTMuOTM5IDU3LjkxMTYgMTg4LjA0M0M1OS4yNzk2IDE4OS4wNTcgNjAuOTI3NiAxOTAuMjU0IDYyLjU3MjMgMTkxLjQyNkM4NC45MjM2IDIwNi44MDcgMTExLjQyOCAyMTUuMDIxIDEzOC41NiAyMTQuOTc0QzE2OC41MiAyMTQuOTc0IDE5Ni4yMDggMjAzLjIyOSAyMTguNTUyIDE4Ni42NDlMMjE4LjU3NSAxODYuNjJaXCIsXG4gICAgICAgICAgZmlsbDogXCJ1cmwoI3BhaW50NF9saW5lYXIpXCJcbiAgICAgICAgfVxuICAgICAgKSxcbiAgICAgIC8qIEBfX1BVUkVfXyAqLyBlMShcImRlZnNcIiwgeyBjaGlsZHJlbjogW1xuICAgICAgICAvKiBAX19QVVJFX18gKi8gZTEoXG4gICAgICAgICAgXCJsaW5lYXJHcmFkaWVudFwiLFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGlkOiBcInBhaW50MF9saW5lYXJcIixcbiAgICAgICAgICAgIHgxOiBcIjE1OS42NDlcIixcbiAgICAgICAgICAgIHkxOiBcIjkyLjI2NjFcIixcbiAgICAgICAgICAgIHgyOiBcIi00LjM0NTEyXCIsXG4gICAgICAgICAgICB5MjogXCI5Mi4yNjYxXCIsXG4gICAgICAgICAgICBncmFkaWVudFVuaXRzOiBcInVzZXJTcGFjZU9uVXNlXCIsXG4gICAgICAgICAgICBjaGlsZHJlbjogW1xuICAgICAgICAgICAgICAvKiBAX19QVVJFX18gKi8gYyhcInN0b3BcIiwgeyBzdG9wQ29sb3I6IFwiIzAwOUZFM1wiIH0pLFxuICAgICAgICAgICAgICAvKiBAX19QVVJFX18gKi8gYyhcInN0b3BcIiwgeyBvZmZzZXQ6IFwiMVwiLCBzdG9wQ29sb3I6IFwiIzFEM0Q5MVwiIH0pXG4gICAgICAgICAgICBdXG4gICAgICAgICAgfVxuICAgICAgICApLFxuICAgICAgICAvKiBAX19QVVJFX18gKi8gZTEoXG4gICAgICAgICAgXCJsaW5lYXJHcmFkaWVudFwiLFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGlkOiBcInBhaW50MV9saW5lYXJcIixcbiAgICAgICAgICAgIHgxOiBcIjE1OS43MjdcIixcbiAgICAgICAgICAgIHkxOiBcIjE1Ni41NlwiLFxuICAgICAgICAgICAgeDI6IFwiMjY1LjQ0OVwiLFxuICAgICAgICAgICAgeTI6IFwiMTMxLjY0MVwiLFxuICAgICAgICAgICAgZ3JhZGllbnRVbml0czogXCJ1c2VyU3BhY2VPblVzZVwiLFxuICAgICAgICAgICAgY2hpbGRyZW46IFtcbiAgICAgICAgICAgICAgLyogQF9fUFVSRV9fICovIGMoXCJzdG9wXCIsIHsgc3RvcENvbG9yOiBcIiMwMDQ4OTlcIiB9KSxcbiAgICAgICAgICAgICAgLyogQF9fUFVSRV9fICovIGMoXCJzdG9wXCIsIHsgb2Zmc2V0OiBcIjFcIiwgc3RvcENvbG9yOiBcIiMwMDlGRTNcIiB9KVxuICAgICAgICAgICAgXVxuICAgICAgICAgIH1cbiAgICAgICAgKSxcbiAgICAgICAgLyogQF9fUFVSRV9fICovIGUxKFxuICAgICAgICAgIFwibGluZWFyR3JhZGllbnRcIixcbiAgICAgICAgICB7XG4gICAgICAgICAgICBpZDogXCJwYWludDJfbGluZWFyXCIsXG4gICAgICAgICAgICB4MTogXCI1Ni45OTEyXCIsXG4gICAgICAgICAgICB5MTogXCIxOTkuMjIxXCIsXG4gICAgICAgICAgICB4MjogXCIxMzguMTU4XCIsXG4gICAgICAgICAgICB5MjogXCIxOTkuMjIxXCIsXG4gICAgICAgICAgICBncmFkaWVudFVuaXRzOiBcInVzZXJTcGFjZU9uVXNlXCIsXG4gICAgICAgICAgICBjaGlsZHJlbjogW1xuICAgICAgICAgICAgICAvKiBAX19QVVJFX18gKi8gYyhcInN0b3BcIiwgeyBzdG9wQ29sb3I6IFwiIzAwOERDMVwiIH0pLFxuICAgICAgICAgICAgICAvKiBAX19QVVJFX18gKi8gYyhcInN0b3BcIiwgeyBvZmZzZXQ6IFwiMC42M1wiLCBzdG9wQ29sb3I6IFwiIzAwNkVBM1wiIH0pLFxuICAgICAgICAgICAgICAvKiBAX19QVVJFX18gKi8gYyhcInN0b3BcIiwgeyBvZmZzZXQ6IFwiMVwiLCBzdG9wQ29sb3I6IFwiIzAwNTk5MFwiIH0pXG4gICAgICAgICAgICBdXG4gICAgICAgICAgfVxuICAgICAgICApLFxuICAgICAgICAvKiBAX19QVVJFX18gKi8gZTEoXG4gICAgICAgICAgXCJsaW5lYXJHcmFkaWVudFwiLFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGlkOiBcInBhaW50M19saW5lYXJcIixcbiAgICAgICAgICAgIHgxOiBcIjM3OTcuNlwiLFxuICAgICAgICAgICAgeTE6IFwiMjY0NDguMVwiLFxuICAgICAgICAgICAgeDI6IFwiMjExNTM3XCIsXG4gICAgICAgICAgICB5MjogXCIyNjQ0OC4xXCIsXG4gICAgICAgICAgICBncmFkaWVudFVuaXRzOiBcInVzZXJTcGFjZU9uVXNlXCIsXG4gICAgICAgICAgICBjaGlsZHJlbjogW1xuICAgICAgICAgICAgICAvKiBAX19QVVJFX18gKi8gYyhcInN0b3BcIiwgeyBzdG9wQ29sb3I6IFwiIzAwOUZFM1wiIH0pLFxuICAgICAgICAgICAgICAvKiBAX19QVVJFX18gKi8gYyhcInN0b3BcIiwgeyBvZmZzZXQ6IFwiMVwiLCBzdG9wQ29sb3I6IFwiIzFEM0Q5MVwiIH0pXG4gICAgICAgICAgICBdXG4gICAgICAgICAgfVxuICAgICAgICApLFxuICAgICAgICAvKiBAX19QVVJFX18gKi8gZTEoXG4gICAgICAgICAgXCJsaW5lYXJHcmFkaWVudFwiLFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGlkOiBcInBhaW50NF9saW5lYXJcIixcbiAgICAgICAgICAgIHgxOiBcIjU1LjM2MjRcIixcbiAgICAgICAgICAgIHkxOiBcIjIwMC43ODJcIixcbiAgICAgICAgICAgIHgyOiBcIjIxNy43NlwiLFxuICAgICAgICAgICAgeTI6IFwiMjAwLjc4MlwiLFxuICAgICAgICAgICAgZ3JhZGllbnRVbml0czogXCJ1c2VyU3BhY2VPblVzZVwiLFxuICAgICAgICAgICAgY2hpbGRyZW46IFtcbiAgICAgICAgICAgICAgLyogQF9fUFVSRV9fICovIGMoXCJzdG9wXCIsIHsgb2Zmc2V0OiBcIjAuMDlcIiwgc3RvcENvbG9yOiBcIiMwMDlFRTNcIiB9KSxcbiAgICAgICAgICAgICAgLyogQF9fUFVSRV9fICovIGMoXCJzdG9wXCIsIHsgb2Zmc2V0OiBcIjFcIiwgc3RvcENvbG9yOiBcIiMwMDVBQTdcIiB9KVxuICAgICAgICAgICAgXVxuICAgICAgICAgIH1cbiAgICAgICAgKVxuICAgICAgXSB9KVxuICAgIF1cbiAgfVxuKSwgUEsgPSAoKSA9PiAvKiBAX19QVVJFX18gKi8gZTEoXG4gIFwic3ZnXCIsXG4gIHtcbiAgICB3aWR0aDogXCIyNjBcIixcbiAgICBoZWlnaHQ6IFwiMjYwXCIsXG4gICAgdmlld0JveDogXCIwIDAgMjYwIDI2MFwiLFxuICAgIGZpbGw6IFwibm9uZVwiLFxuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgY2hpbGRyZW46IFtcbiAgICAgIC8qIEBfX1BVUkVfXyAqLyBjKFxuICAgICAgICBcInBhdGhcIixcbiAgICAgICAge1xuICAgICAgICAgIHN0eWxlOiB7IG1peEJsZW5kTW9kZTogXCJtdWx0aXBseVwiIH0sXG4gICAgICAgICAgZDogXCJNMjAxLjg5MiAxNjguNDgyQzIxOC4zMzIgMTQ0LjQ1NCAwIDEwOS4xMzIgMCAxMDkuMTMyQzAuOTYwMTExIDEyOS44MDMgMTUuNjAxOCAxNTkuNjExIDE1LjYwMTggMTU5LjQ4OUMyNS4xODA1IDE2OC43OTkgMTM4LjI1NiAxNjUuOTk5IDE3NS43OTYgMTk3LjUzOUMxODkuMTcxIDE4Ni4xMjMgMjAxLjg5MiAxNjguNDgyIDIwMS44OTIgMTY4LjQ4MlpcIixcbiAgICAgICAgICBmaWxsOiBcInVybCgjcGFpbnQwX2xpbmVhcilcIlxuICAgICAgICB9XG4gICAgICApLFxuICAgICAgLyogQF9fUFVSRV9fICovIGMoXG4gICAgICAgIFwicGF0aFwiLFxuICAgICAgICB7XG4gICAgICAgICAgc3R5bGU6IHsgbWl4QmxlbmRNb2RlOiBcIm11bHRpcGx5XCIgfSxcbiAgICAgICAgICBkOiBcIk0yMDEuNDAyIDE2OS4xNTFDMTg1LjgyNiAxODkuMzc0IDExMS4zMTggMTkwLjI3NCA2NS4yNjE5IDE5MC4wMTRDNTMuMTQ1MyAxODkuOTQ0IDQ2LjQwNTMgMTk0Ljc2NyA0Ny41OTkxIDIwMy43NDRDNDguNzkyOCAyMTIuNzIxIDU5LjU4NDUgMjE5LjU4OSA3Ny43NjkgMjIyLjk0NkMxMTIuMjk4IDIyOS4zMTIgMTQ1LjAyOCAyMjAuNzI1IDE3MS45ODUgMjAwLjU4NUMxODUuMTA2IDE5MC43ODMgMTk4LjY4OSAxNzIuODI1IDIwMS40MDIgMTY5LjE1OFYxNjkuMTUxWlwiLFxuICAgICAgICAgIGZpbGw6IFwidXJsKCNwYWludDFfbGluZWFyKVwiXG4gICAgICAgIH1cbiAgICAgICksXG4gICAgICAvKiBAX19QVVJFX18gKi8gYyhcbiAgICAgICAgXCJwYXRoXCIsXG4gICAgICAgIHtcbiAgICAgICAgICBzdHlsZTogeyBtaXhCbGVuZE1vZGU6IFwibXVsdGlwbHlcIiB9LFxuICAgICAgICAgIGQ6IFwiTTI1Ny4zNTQgNTguNDY5N0MyNDAuNTAxIDExMC41MTcgMTEuNTUzMyA2OS43MzgyIDAuMDE1OTMwMiAxMDguNzkyQzAuMDE1OTMwMiAxMDkuMDEgMC4wMTU5MzAyIDEwOS4xMzIgMC4wMTU5MzAyIDEwOS4xMzJDMC45NDA4MzcgMTI4Ljk3NCAxNC40Njg4IDE1Ny4yMzYgMTUuNTUwNSAxNTkuMzc3QzE1LjU4NjIgMTU5LjM0NCAxNS42MTk0IDE1OS4zMDcgMTUuNjQ5NyAxNTkuMjY5QzQwLjExOTggMTE5LjQ1IDIwMi4zOTEgMTQzLjU3NCAyMjQuMzQ2IDEzMS43NDVDMjI2LjY4NSAxMzAuNDkxIDI3MS4xMzggNzUuNDc2NSAyNTcuMzU0IDU4LjQ2OTdaXCIsXG4gICAgICAgICAgZmlsbDogXCJ1cmwoI3BhaW50Ml9saW5lYXIpXCJcbiAgICAgICAgfVxuICAgICAgKSxcbiAgICAgIC8qIEBfX1BVUkVfXyAqLyBjKFxuICAgICAgICBcInBhdGhcIixcbiAgICAgICAge1xuICAgICAgICAgIHN0eWxlOiB7IG1peEJsZW5kTW9kZTogXCJtdWx0aXBseVwiIH0sXG4gICAgICAgICAgZDogXCJNMjI0LjQ4NCAxMzEuNjU5QzIyNy45MyAxMjguOTQ1IDI3MC45NDMgNzUuMjM2NSAyNTcuMzU1IDU4LjQ2OTdDMjU3LjM1MyA1OC40NTM4IDI1Ny4zNTMgNTguNDM3NyAyNTcuMzU1IDU4LjQyMTdDMjU3LjI0OSA1OC4yMzE1IDI1Ny4xMiA1OC4wNTUyIDI1Ni45NyA1Ny44OTY5QzI0Ny4zMjggNDcuNzAwNSAyMDguOTMzIDM2LjQyODggMTY1LjQ4MiAzNC4zNTE3QzEyNS4zNzQgMzIuNDMxNSAxMDcuMTUyIDM4LjE5MjIgMTA0LjAzNCA1Ni4xMTQzQzEwMS41ODkgNzEuNDc2IDExOS4xMTggODIuNjkzMyAxNTAuNTYxIDkyLjAzNTJDMTgwLjI1MSAxMDAuODYyIDIzMi4wMjcgMTExLjcxNyAyMjQuNDg0IDEzMS42NTlaXCIsXG4gICAgICAgICAgZmlsbDogXCJ1cmwoI3BhaW50M19saW5lYXIpXCJcbiAgICAgICAgfVxuICAgICAgKSxcbiAgICAgIC8qIEBfX1BVUkVfXyAqLyBlMShcImRlZnNcIiwgeyBjaGlsZHJlbjogW1xuICAgICAgICAvKiBAX19QVVJFX18gKi8gZTEoXG4gICAgICAgICAgXCJsaW5lYXJHcmFkaWVudFwiLFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGlkOiBcInBhaW50MF9saW5lYXJcIixcbiAgICAgICAgICAgIHgxOiBcIjIyNS42NThcIixcbiAgICAgICAgICAgIHkxOiBcIjE1My4zMjVcIixcbiAgICAgICAgICAgIHgyOiBcIjg3LjM2NjlcIixcbiAgICAgICAgICAgIHkyOiBcIjE1My4zMjVcIixcbiAgICAgICAgICAgIGdyYWRpZW50VW5pdHM6IFwidXNlclNwYWNlT25Vc2VcIixcbiAgICAgICAgICAgIGNoaWxkcmVuOiBbXG4gICAgICAgICAgICAgIC8qIEBfX1BVUkVfXyAqLyBjKFwic3RvcFwiLCB7IHN0b3BDb2xvcjogXCIjMzEyNzgzXCIgfSksXG4gICAgICAgICAgICAgIC8qIEBfX1BVUkVfXyAqLyBjKFwic3RvcFwiLCB7IG9mZnNldDogXCIxXCIsIHN0b3BDb2xvcjogXCIjMDA4QkQyXCIgfSlcbiAgICAgICAgICAgIF1cbiAgICAgICAgICB9XG4gICAgICAgICksXG4gICAgICAgIC8qIEBfX1BVUkVfXyAqLyBlMShcbiAgICAgICAgICBcImxpbmVhckdyYWRpZW50XCIsXG4gICAgICAgICAge1xuICAgICAgICAgICAgaWQ6IFwicGFpbnQxX2xpbmVhclwiLFxuICAgICAgICAgICAgeDE6IFwiMjAxLjQwMlwiLFxuICAgICAgICAgICAgeTE6IFwiMTk3LjA3OFwiLFxuICAgICAgICAgICAgeDI6IFwiNDcuNDY0N1wiLFxuICAgICAgICAgICAgeTI6IFwiMTk3LjA3OFwiLFxuICAgICAgICAgICAgZ3JhZGllbnRVbml0czogXCJ1c2VyU3BhY2VPblVzZVwiLFxuICAgICAgICAgICAgY2hpbGRyZW46IFtcbiAgICAgICAgICAgICAgLyogQF9fUFVSRV9fICovIGMoXCJzdG9wXCIsIHsgc3RvcENvbG9yOiBcIiMwMDUyQTFcIiB9KSxcbiAgICAgICAgICAgICAgLyogQF9fUFVSRV9fICovIGMoXCJzdG9wXCIsIHsgb2Zmc2V0OiBcIjAuMlwiLCBzdG9wQ29sb3I6IFwiIzAwNkJCNVwiIH0pLFxuICAgICAgICAgICAgICAvKiBAX19QVVJFX18gKi8gYyhcInN0b3BcIiwgeyBvZmZzZXQ6IFwiMC41NVwiLCBzdG9wQ29sb3I6IFwiIzAwOTJEM1wiIH0pLFxuICAgICAgICAgICAgICAvKiBAX19QVVJFX18gKi8gYyhcInN0b3BcIiwgeyBvZmZzZXQ6IFwiMC44M1wiLCBzdG9wQ29sb3I6IFwiIzAwQUFFNVwiIH0pLFxuICAgICAgICAgICAgICAvKiBAX19QVVJFX18gKi8gYyhcInN0b3BcIiwgeyBvZmZzZXQ6IFwiMVwiLCBzdG9wQ29sb3I6IFwiIzAwQjNFQ1wiIH0pXG4gICAgICAgICAgICBdXG4gICAgICAgICAgfVxuICAgICAgICApLFxuICAgICAgICAvKiBAX19QVVJFX18gKi8gZTEoXG4gICAgICAgICAgXCJsaW5lYXJHcmFkaWVudFwiLFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGlkOiBcInBhaW50Ml9saW5lYXJcIixcbiAgICAgICAgICAgIHgxOiBcIi0zLjQwODQ2XCIsXG4gICAgICAgICAgICB5MTogXCIxMDguOTE3XCIsXG4gICAgICAgICAgICB4MjogXCIyNjMuMzMzXCIsXG4gICAgICAgICAgICB5MjogXCIxMDguOTE3XCIsXG4gICAgICAgICAgICBncmFkaWVudFVuaXRzOiBcInVzZXJTcGFjZU9uVXNlXCIsXG4gICAgICAgICAgICBjaGlsZHJlbjogW1xuICAgICAgICAgICAgICAvKiBAX19QVVJFX18gKi8gYyhcInN0b3BcIiwgeyBzdG9wQ29sb3I6IFwiIzAwNzE5RFwiIH0pLFxuICAgICAgICAgICAgICAvKiBAX19QVVJFX18gKi8gYyhcInN0b3BcIiwgeyBvZmZzZXQ6IFwiMC44OFwiLCBzdG9wQ29sb3I6IFwiIzAwOUZFM1wiIH0pXG4gICAgICAgICAgICBdXG4gICAgICAgICAgfVxuICAgICAgICApLFxuICAgICAgICAvKiBAX19QVVJFX18gKi8gZTEoXG4gICAgICAgICAgXCJsaW5lYXJHcmFkaWVudFwiLFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGlkOiBcInBhaW50M19saW5lYXJcIixcbiAgICAgICAgICAgIHgxOiBcIjEwMy44MjZcIixcbiAgICAgICAgICAgIHkxOiBcIjgyLjgyNzdcIixcbiAgICAgICAgICAgIHgyOiBcIjI2MC4wMDFcIixcbiAgICAgICAgICAgIHkyOiBcIjgyLjgyNzdcIixcbiAgICAgICAgICAgIGdyYWRpZW50VW5pdHM6IFwidXNlclNwYWNlT25Vc2VcIixcbiAgICAgICAgICAgIGNoaWxkcmVuOiBbXG4gICAgICAgICAgICAgIC8qIEBfX1BVUkVfXyAqLyBjKFwic3RvcFwiLCB7IHN0b3BDb2xvcjogXCIjMDA5M0Q5XCIgfSksXG4gICAgICAgICAgICAgIC8qIEBfX1BVUkVfXyAqLyBjKFwic3RvcFwiLCB7IG9mZnNldDogXCIwLjY0XCIsIHN0b3BDb2xvcjogXCIjMzEyNzgzXCIgfSlcbiAgICAgICAgICAgIF1cbiAgICAgICAgICB9XG4gICAgICAgIClcbiAgICAgIF0gfSlcbiAgICBdXG4gIH1cbiksIEZLID0gKCkgPT4gLyogQF9fUFVSRV9fICovIGUxKFxuICBcInN2Z1wiLFxuICB7XG4gICAgd2lkdGg6IFwiMjYwXCIsXG4gICAgaGVpZ2h0OiBcIjI2MFwiLFxuICAgIHZpZXdCb3g6IFwiMCAwIDI2MCAyNjBcIixcbiAgICBmaWxsOiBcIm5vbmVcIixcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIGNoaWxkcmVuOiBbXG4gICAgICAvKiBAX19QVVJFX18gKi8gYyhcbiAgICAgICAgXCJwYXRoXCIsXG4gICAgICAgIHtcbiAgICAgICAgICBzdHlsZTogeyBtaXhCbGVuZE1vZGU6IFwibXVsdGlwbHlcIiB9LFxuICAgICAgICAgIGQ6IFwiTTIyMy41MDMgMTUwLjgyOEMyMTQuODYzIDE2MS42OCAyMDQuODk3IDE3MS40MDcgMTkzLjgzNiAxNzkuNzc5QzE4NC41MjcgMTcyLjcwOCAxNzIuOTMxIDE2OC41MDggMTYxLjk0MyAxNjQuODA3QzE0Ni4zODQgMTU5LjU1NiAxMzAuMzg1IDE1NS42MDYgMTE0LjMzNyAxNTIuMTM1Qzk2LjQ2MzMgMTQ4LjI3IDc4LjQzODYgMTQ1LjA4OCA2MC4zNTI0IDE0Mi4zODlDNDIuODkwMyAxMzkuNzgyIDEyLjc0OTcgMTM2LjY3NyA5LjU2MTYxIDEzNC4wMjFDNC44MTc5NCAxMzAuMDY3IC0xLjM1ODM3IDc0Ljc5NDEgMC4yNjQ4NzQgNzYuMzgwNEMxMi4yMTc4IDg4LjA2NTkgMjM3Ljc0MSAxMzQuNTUzIDIyMy41MDMgMTUwLjgyOFpcIixcbiAgICAgICAgICBmaWxsOiBcInVybCgjcGFpbnQwX2xpbmVhcilcIlxuICAgICAgICB9XG4gICAgICApLFxuICAgICAgLyogQF9fUFVSRV9fICovIGMoXG4gICAgICAgIFwicGF0aFwiLFxuICAgICAgICB7XG4gICAgICAgICAgc3R5bGU6IHsgbWl4QmxlbmRNb2RlOiBcIm11bHRpcGx5XCIgfSxcbiAgICAgICAgICBkOiBcIk0xNDIuMDM0IDIwNi4xNTRDMTc0LjE4MyAxOTYuNDE2IDIwMi42MDIgMTc3LjExMyAyMjMuNTAzIDE1MC44MTZDMjAyLjg3OCAxNzIuMjIyIDEyMS4wOTIgMTcyLjUxNCA5OC4wMTg5IDE3Mi4yNzFDNzAuNzg5NyAxNzIuMDA3IDUxLjY0OSAxNjkuMTMzIDQ5LjY0NDYgMTgyLjk2N0M0Ni45NDUzIDIwMS42NTMgMTE0LjY3MyAyMTIuNjggMTQyLjAzNCAyMDYuMTU0WlwiLFxuICAgICAgICAgIGZpbGw6IFwidXJsKCNwYWludDFfbGluZWFyKVwiXG4gICAgICAgIH1cbiAgICAgICksXG4gICAgICAvKiBAX19QVVJFX18gKi8gYyhcbiAgICAgICAgXCJwYXRoXCIsXG4gICAgICAgIHtcbiAgICAgICAgICBzdHlsZTogeyBtaXhCbGVuZE1vZGU6IFwibXVsdGlwbHlcIiB9LFxuICAgICAgICAgIGQ6IFwiTTI1OS45OTYgNzYuMjMyOUMyNTkuNzUgNjEuNDM5MyAyNDYuOTMgNTIuMDcxOCAyMjMuMjQ4IDUyLjAwMTFDMTc0LjE4MiA1MS44NTk3IDE3LjEzMDYgNjUuMDM5MyAwLjIzMTA1MyA3Ni40MTEyQzAuMjA2NDU5IDc2LjQyOTcgMC4xNzI2NDEgNzYuNDExMiAwLjEzMjY3NSA3Ni40MTEyQy0wLjkyMTgxNiA3OC4yNjgxIDQuNTkwNDQgMTI2Ljg2MSA5LjEwOTY4IDEzMy40OTVMOS41NjE2MSAxMzMuODQ2QzYuMzczNTQgMTI4LjcwOCAxNDQuMjY5IDExOS40NjQgMjIxLjE0NSAxMDYuMDY2QzI1MC44NjUgMTAwLjg4MyAyNjAuMjM1IDkwLjUyODUgMjU5Ljk5NiA3Ni4yMzI5WlwiLFxuICAgICAgICAgIGZpbGw6IFwidXJsKCNwYWludDJfbGluZWFyKVwiXG4gICAgICAgIH1cbiAgICAgICksXG4gICAgICAvKiBAX19QVVJFX18gKi8gZTEoXCJkZWZzXCIsIHsgY2hpbGRyZW46IFtcbiAgICAgICAgLyogQF9fUFVSRV9fICovIGUxKFxuICAgICAgICAgIFwibGluZWFyR3JhZGllbnRcIixcbiAgICAgICAgICB7XG4gICAgICAgICAgICBpZDogXCJwYWludDBfbGluZWFyXCIsXG4gICAgICAgICAgICB4MTogXCIwLjAwMDQ4MjUxNlwiLFxuICAgICAgICAgICAgeTE6IFwiMTI4LjA2M1wiLFxuICAgICAgICAgICAgeDI6IFwiMjI0LjE1NVwiLFxuICAgICAgICAgICAgeTI6IFwiMTI4LjA2M1wiLFxuICAgICAgICAgICAgZ3JhZGllbnRVbml0czogXCJ1c2VyU3BhY2VPblVzZVwiLFxuICAgICAgICAgICAgY2hpbGRyZW46IFtcbiAgICAgICAgICAgICAgLyogQF9fUFVSRV9fICovIGMoXCJzdG9wXCIsIHsgb2Zmc2V0OiBcIjAuNFwiLCBzdG9wQ29sb3I6IFwiIzA5NDk4NVwiIH0pLFxuICAgICAgICAgICAgICAvKiBAX19QVVJFX18gKi8gYyhcInN0b3BcIiwgeyBvZmZzZXQ6IFwiMC45XCIsIHN0b3BDb2xvcjogXCIjMDA5RURGXCIgfSlcbiAgICAgICAgICAgIF1cbiAgICAgICAgICB9XG4gICAgICAgICksXG4gICAgICAgIC8qIEBfX1BVUkVfXyAqLyBlMShcbiAgICAgICAgICBcImxpbmVhckdyYWRpZW50XCIsXG4gICAgICAgICAge1xuICAgICAgICAgICAgaWQ6IFwicGFpbnQxX2xpbmVhclwiLFxuICAgICAgICAgICAgeDE6IFwiNDkuNTY3N1wiLFxuICAgICAgICAgICAgeTE6IFwiMTc5LjQzNVwiLFxuICAgICAgICAgICAgeDI6IFwiMjIzLjUxXCIsXG4gICAgICAgICAgICB5MjogXCIxNzkuNDM1XCIsXG4gICAgICAgICAgICBncmFkaWVudFVuaXRzOiBcInVzZXJTcGFjZU9uVXNlXCIsXG4gICAgICAgICAgICBjaGlsZHJlbjogW1xuICAgICAgICAgICAgICAvKiBAX19QVVJFX18gKi8gYyhcInN0b3BcIiwgeyBzdG9wQ29sb3I6IFwiIzMyQkVGMFwiIH0pLFxuICAgICAgICAgICAgICAvKiBAX19QVVJFX18gKi8gYyhcInN0b3BcIiwgeyBvZmZzZXQ6IFwiMVwiLCBzdG9wQ29sb3I6IFwiIzAwNEY5RlwiIH0pXG4gICAgICAgICAgICBdXG4gICAgICAgICAgfVxuICAgICAgICApLFxuICAgICAgICAvKiBAX19QVVJFX18gKi8gZTEoXG4gICAgICAgICAgXCJsaW5lYXJHcmFkaWVudFwiLFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGlkOiBcInBhaW50Ml9saW5lYXJcIixcbiAgICAgICAgICAgIHgxOiBcIjc1LjAwNDZcIixcbiAgICAgICAgICAgIHkxOiBcIjkzLjM3NTNcIixcbiAgICAgICAgICAgIHgyOiBcIjE5NC4yNzlcIixcbiAgICAgICAgICAgIHkyOiBcIjkyLjAyODdcIixcbiAgICAgICAgICAgIGdyYWRpZW50VW5pdHM6IFwidXNlclNwYWNlT25Vc2VcIixcbiAgICAgICAgICAgIGNoaWxkcmVuOiBbXG4gICAgICAgICAgICAgIC8qIEBfX1BVUkVfXyAqLyBjKFwic3RvcFwiLCB7IHN0b3BDb2xvcjogXCIjMzEyNzgzXCIgfSksXG4gICAgICAgICAgICAgIC8qIEBfX1BVUkVfXyAqLyBjKFwic3RvcFwiLCB7IG9mZnNldDogXCIwLjM1XCIsIHN0b3BDb2xvcjogXCIjMjE0NzlDXCIgfSksXG4gICAgICAgICAgICAgIC8qIEBfX1BVUkVfXyAqLyBjKFwic3RvcFwiLCB7IG9mZnNldDogXCIxXCIsIHN0b3BDb2xvcjogXCIjMDA4QUQxXCIgfSlcbiAgICAgICAgICAgIF1cbiAgICAgICAgICB9XG4gICAgICAgIClcbiAgICAgIF0gfSlcbiAgICBdXG4gIH1cbiksIFhLID0gKCkgPT4gLyogQF9fUFVSRV9fICovIGUxKFxuICBcInN2Z1wiLFxuICB7XG4gICAgd2lkdGg6IFwiMjYwXCIsXG4gICAgaGVpZ2h0OiBcIjI2MFwiLFxuICAgIHZpZXdCb3g6IFwiMCAwIDI2MCAyNjBcIixcbiAgICBmaWxsOiBcIm5vbmVcIixcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIGNoaWxkcmVuOiBbXG4gICAgICAvKiBAX19QVVJFX18gKi8gYyhcbiAgICAgICAgXCJwYXRoXCIsXG4gICAgICAgIHtcbiAgICAgICAgICBzdHlsZTogeyBtaXhCbGVuZE1vZGU6IFwibXVsdGlwbHlcIiB9LFxuICAgICAgICAgIGQ6IFwiTTIyMy41MjggMjI4LjQ2NEMyMDEuMDY4IDIyNC40NzggMTY1LjQxNyAyMTYuNTA5IDE2OC44OTYgMTkxLjA3QzE3MS41NzQgMTcxLjQ4NSAyMDMuOTc5IDE2NS43NzUgMjE3LjUyIDE2Mi42MThDMjI4LjI3MSAxNjAuMTE4IDI1Ni45NDQgMTU2LjY2MyAyNTkuODU5IDE1Mi4wOTdDMjU5Ljg1OSAxNTIuMDk3IDI1OS44NTkgMTUyLjA5NyAyNTkuODU5IDE1Mi4xMjFDMjU5LjkwOCAxNTMuMjQ2IDI1OS45NDQgMTU0LjM3NiAyNTkuOTY4IDE1NS41MTJWMTU1LjcxM0MyNTkuOTkyIDE1Ni43OCAyNjAgMTU3Ljg1MSAyNjAgMTU4LjkzNEMyNjAgMTgzLjQxNSAyNTQuNDk2IDIwNi4zMzggMjQ0LjkwMSAyMjYuMDA4QzI0NC43NzYgMjI2LjI1MyAyNDQuNjUxIDIyNi41MDMgMjQ0LjUyMiAyMjYuNzQ5QzI0My4zNjMgMjI4Ljk4NyAyMzUuNTk1IDIzMC42MDYgMjIzLjUyOCAyMjguNDY0WlwiLFxuICAgICAgICAgIGZpbGw6IFwidXJsKCNwYWludDBfbGluZWFyKVwiXG4gICAgICAgIH1cbiAgICAgICksXG4gICAgICAvKiBAX19QVVJFX18gKi8gYyhcbiAgICAgICAgXCJwYXRoXCIsXG4gICAgICAgIHtcbiAgICAgICAgICBzdHlsZTogeyBtaXhCbGVuZE1vZGU6IFwibXVsdGlwbHlcIiB9LFxuICAgICAgICAgIGQ6IFwiTTI1OS45NjggMTU1LjcxM1YxNTUuNTEyQzI1OS45NjggMTU0LjczNCAyNTkuOTI3IDE1My45NTcgMjU5Ljg5OSAxNTMuMTg0QzI1OS45MyAxNTIuODM5IDI1OS45MTggMTUyLjQ5MiAyNTkuODYzIDE1Mi4xNDlDMjU1LjUzOSAxMzguMTczIDE5MC4zNDEgMTIxLjU0OCAxNDYuNTQ1IDExMy4yNjVDOTEuMTcyMyAxMDIuODEzIDcuNzM4ODUgOTEuOCAxMS42NzY4IDcwLjI2MjJDOC41ODg0NCA3NS4yMTQ4IDQuMzgwNzMgODQuNzU3NyAzLjMwOTY4IDkwLjU1OTlDLTIuNTY5MDMgMTIyLjUzIDMuMzU4IDEzMC41MzkgNy44MjM0IDEzNC4xNTVMOC4wNjA5NyAxMzQuMzQ4QzU2LjI2MjQgMTU2LjYzNSAyNzMuNDA4IDE2MS43MjkgMjQ0LjMyMSAyMjYuOTU4TDI0NC4yOTcgMjI3LjAxNEMyNDQuMzgxIDIyNi45MjUgMjQ0LjQ1NiAyMjYuODI3IDI0NC41MTggMjI2LjcyTDI0NC44OTcgMjI1Ljk4QzI1NC40OTIgMjA2LjMxIDI1OS45OTYgMTgzLjM4NyAyNTkuOTk2IDE1OC45MDZDMjYwIDE1Ny44MzUgMjU5Ljk5MiAxNTYuNzggMjU5Ljk2OCAxNTUuNzEzWlwiLFxuICAgICAgICAgIGZpbGw6IFwidXJsKCNwYWludDFfbGluZWFyKVwiXG4gICAgICAgIH1cbiAgICAgICksXG4gICAgICAvKiBAX19QVVJFX18gKi8gYyhcbiAgICAgICAgXCJwYXRoXCIsXG4gICAgICAgIHtcbiAgICAgICAgICBzdHlsZTogeyBtaXhCbGVuZE1vZGU6IFwibXVsdGlwbHlcIiB9LFxuICAgICAgICAgIGQ6IFwiTTI1Ni4yNTEgNjQuMjU4N0MyNTIuMTMyIDQ0Ljc3NDQgMjIyLjA0NiAzNi45NzkgMTg2Ljg5NSAzMy40NjM5Qzg3LjY4MTMgMjMuNTQyNSAzNC4wMzYgNDUuMjY1NiAxMi43NjQgNjguNjAzM0M5LjEwMzg2IDczLjk3MDYgNS4wNjEyNCA4My41ODU5IDMuMzEzNzMgOTAuNTU5OUMtNC4zOTcwNSAxMjEuMzYzIDMuMTg4OTEgMTI5Ljk2NyA3LjUxNzQxIDEzMy44ODlDNS40NzU5NyAxMzEuMTgzIDUuMTc4MDEgMTI4Ljk2MSA0Ljk0MDQ0IDEyNi40MzJDMi4yNzA4NiA5OC40MzU3IDEwNC42MDUgODEuOTk1NSAyMTMuMTQzIDEwMi45NTdDMjUyLjk2MiAxMTAuNjUyIDI2MC4zNzQgODMuNzQ3IDI1Ni4yNTEgNjQuMjU4N1pcIixcbiAgICAgICAgICBmaWxsOiBcInVybCgjcGFpbnQyX2xpbmVhcilcIlxuICAgICAgICB9XG4gICAgICApLFxuICAgICAgLyogQF9fUFVSRV9fICovIGUxKFwiZGVmc1wiLCB7IGNoaWxkcmVuOiBbXG4gICAgICAgIC8qIEBfX1BVUkVfXyAqLyBlMShcbiAgICAgICAgICBcImxpbmVhckdyYWRpZW50XCIsXG4gICAgICAgICAge1xuICAgICAgICAgICAgaWQ6IFwicGFpbnQwX2xpbmVhclwiLFxuICAgICAgICAgICAgeDE6IFwiMTY4LjY1OVwiLFxuICAgICAgICAgICAgeTE6IFwiMTkwLjc4XCIsXG4gICAgICAgICAgICB4MjogXCIyNjUuMTk4XCIsXG4gICAgICAgICAgICB5MjogXCIxOTAuNzhcIixcbiAgICAgICAgICAgIGdyYWRpZW50VW5pdHM6IFwidXNlclNwYWNlT25Vc2VcIixcbiAgICAgICAgICAgIGNoaWxkcmVuOiBbXG4gICAgICAgICAgICAgIC8qIEBfX1BVUkVfXyAqLyBjKFwic3RvcFwiLCB7IHN0b3BDb2xvcjogXCIjMDA4NUNDXCIgfSksXG4gICAgICAgICAgICAgIC8qIEBfX1BVUkVfXyAqLyBjKFwic3RvcFwiLCB7IG9mZnNldDogXCIxXCIsIHN0b3BDb2xvcjogXCIjMzEyNzgzXCIgfSlcbiAgICAgICAgICAgIF1cbiAgICAgICAgICB9XG4gICAgICAgICksXG4gICAgICAgIC8qIEBfX1BVUkVfXyAqLyBlMShcbiAgICAgICAgICBcImxpbmVhckdyYWRpZW50XCIsXG4gICAgICAgICAge1xuICAgICAgICAgICAgaWQ6IFwicGFpbnQxX2xpbmVhclwiLFxuICAgICAgICAgICAgeDE6IFwiMjAuODE3XCIsXG4gICAgICAgICAgICB5MTogXCIxNDguNjQ2XCIsXG4gICAgICAgICAgICB4MjogXCIyMTcuNDY0XCIsXG4gICAgICAgICAgICB5MjogXCIxNDguNjQ2XCIsXG4gICAgICAgICAgICBncmFkaWVudFVuaXRzOiBcInVzZXJTcGFjZU9uVXNlXCIsXG4gICAgICAgICAgICBjaGlsZHJlbjogW1xuICAgICAgICAgICAgICAvKiBAX19QVVJFX18gKi8gYyhcInN0b3BcIiwgeyBzdG9wQ29sb3I6IFwiIzAwOUZFM1wiIH0pLFxuICAgICAgICAgICAgICAvKiBAX19QVVJFX18gKi8gYyhcInN0b3BcIiwgeyBvZmZzZXQ6IFwiMC4xOVwiLCBzdG9wQ29sb3I6IFwiIzAwOEVENVwiIH0pLFxuICAgICAgICAgICAgICAvKiBAX19QVVJFX18gKi8gYyhcInN0b3BcIiwgeyBvZmZzZXQ6IFwiMC43M1wiLCBzdG9wQ29sb3I6IFwiIzAwNjFBRlwiIH0pLFxuICAgICAgICAgICAgICAvKiBAX19QVVJFX18gKi8gYyhcInN0b3BcIiwgeyBvZmZzZXQ6IFwiMVwiLCBzdG9wQ29sb3I6IFwiIzAwNTBBMFwiIH0pXG4gICAgICAgICAgICBdXG4gICAgICAgICAgfVxuICAgICAgICApLFxuICAgICAgICAvKiBAX19QVVJFX18gKi8gZTEoXG4gICAgICAgICAgXCJsaW5lYXJHcmFkaWVudFwiLFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGlkOiBcInBhaW50Ml9saW5lYXJcIixcbiAgICAgICAgICAgIHgxOiBcIjguMTY1NjhcIixcbiAgICAgICAgICAgIHkxOiBcIjgyLjQ0MjRcIixcbiAgICAgICAgICAgIHgyOiBcIjI2NC40NDFcIixcbiAgICAgICAgICAgIHkyOiBcIjgyLjQ0MjRcIixcbiAgICAgICAgICAgIGdyYWRpZW50VW5pdHM6IFwidXNlclNwYWNlT25Vc2VcIixcbiAgICAgICAgICAgIGNoaWxkcmVuOiBbXG4gICAgICAgICAgICAgIC8qIEBfX1BVUkVfXyAqLyBjKFwic3RvcFwiLCB7IG9mZnNldDogXCIwLjA2XCIsIHN0b3BDb2xvcjogXCIjMDA1MDhDXCIgfSksXG4gICAgICAgICAgICAgIC8qIEBfX1BVUkVfXyAqLyBjKFwic3RvcFwiLCB7IG9mZnNldDogXCIwLjM0XCIsIHN0b3BDb2xvcjogXCIjMDA3NkI1XCIgfSksXG4gICAgICAgICAgICAgIC8qIEBfX1BVUkVfXyAqLyBjKFwic3RvcFwiLCB7IG9mZnNldDogXCIwLjZcIiwgc3RvcENvbG9yOiBcIiMwMDk0RDZcIiB9KSxcbiAgICAgICAgICAgICAgLyogQF9fUFVSRV9fICovIGMoXCJzdG9wXCIsIHsgb2Zmc2V0OiBcIjAuNzRcIiwgc3RvcENvbG9yOiBcIiMwMDlGRTNcIiB9KVxuICAgICAgICAgICAgXVxuICAgICAgICAgIH1cbiAgICAgICAgKVxuICAgICAgXSB9KVxuICAgIF1cbiAgfVxuKSwgVUsgPSAoKSA9PiAvKiBAX19QVVJFX18gKi8gZTEoXG4gIFwic3ZnXCIsXG4gIHtcbiAgICB3aWR0aDogXCIyNjBcIixcbiAgICBoZWlnaHQ6IFwiMjYwXCIsXG4gICAgdmlld0JveDogXCIwIDAgMjYwIDI2MFwiLFxuICAgIGZpbGw6IFwibm9uZVwiLFxuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgY2hpbGRyZW46IFtcbiAgICAgIC8qIEBfX1BVUkVfXyAqLyBjKFxuICAgICAgICBcInBhdGhcIixcbiAgICAgICAge1xuICAgICAgICAgIHN0eWxlOiB7IG1peEJsZW5kTW9kZTogXCJtdWx0aXBseVwiIH0sXG4gICAgICAgICAgZDogXCJNOTcuNjY2OSA4MC45OTM5QzEwMi43MDggOTcuMDM0MiAxMjQuMTIxIDk1LjI2NjIgMTQ3LjAyIDkzLjM4OTdDMTc1LjAyMiA5MS4wODk0IDIzOC45OTYgOTEuMDA3MiAyNTguNTk5IDExNC40MjJMMjU3LjgyIDExMy4zNDRDMjM5LjkyNCA4OC44NDc5IDIxNi4wMTUgNjkuMzggMTg4LjQwMSA1Ni44MjAyQzE2Ny40NDggNDguMzk3NSAxNDQuOTUzIDUwLjQ2NDUgMTMwLjAzMyA1NC41OTU0QzExNS4xMTQgNTguNzI2MiA5Mi42MTYgNjQuOTI0MSA5Ny42NjY5IDgwLjk5MzlaXCIsXG4gICAgICAgICAgZmlsbDogXCJ1cmwoI3BhaW50MF9saW5lYXIpXCJcbiAgICAgICAgfVxuICAgICAgKSxcbiAgICAgIC8qIEBfX1BVUkVfXyAqLyBjKFxuICAgICAgICBcInBhdGhcIixcbiAgICAgICAge1xuICAgICAgICAgIHN0eWxlOiB7IG1peEJsZW5kTW9kZTogXCJtdWx0aXBseVwiIH0sXG4gICAgICAgICAgZDogXCJNMTEuODI5OCAxMzAuNjE3QzcuNjQzMDYgMTMxLjQ0NSAtMi44MDcyNyAxNzMuOTA3IDAuNzEyMzE5IDE3OC4xMjZDMC43MTIzMTkgMTc4LjEyNiAxOC4yMjE1IDE4MC4wMTkgNTEuOTc4MSAxNzcuMjU1QzE2My43MjggMTY4LjEwMyAyNzMuNjY2IDE0MC4xMjEgMjU4LjYxMiAxMTQuNDI4QzI1OC4zNTYgMTE0LjA3NCAyNTguMDk5IDExMy43MTUgMjU3LjgzNiAxMTMuMzU3QzI1MC4xODIgMTAyLjg4NSAyNDEuMzk5IDkzLjI4NzQgMjMxLjY0NSA4NC43MzcxQzIxMS4zMDYgMTMzLjM0NCAxNi44MTE3IDEzMC42MTcgMTEuODI5OCAxMzAuNjE3WlwiLFxuICAgICAgICAgIGZpbGw6IFwidXJsKCNwYWludDFfbGluZWFyKVwiXG4gICAgICAgIH1cbiAgICAgICksXG4gICAgICAvKiBAX19QVVJFX18gKi8gYyhcbiAgICAgICAgXCJwYXRoXCIsXG4gICAgICAgIHtcbiAgICAgICAgICBzdHlsZTogeyBtaXhCbGVuZE1vZGU6IFwibXVsdGlwbHlcIiB9LFxuICAgICAgICAgIGQ6IFwiTTIwNy44MzYgMTcxLjMxN0MyMDUuMTM4IDE0OC4xNTkgMTcyLjQ5MiAxNTEuMDAxIDEyNy4yNDcgMTQ2LjYxMUMxMDIuMjcxIDE0NC4xODYgMzQuMTI3MSAxMzguNzcgMTEuNjI2IDEzMC42ODlDNy40NzU0OCAxMzIuNzEzIC0xLjk5ODgzIDE3MC45MSAwLjM3NzE0IDE3Ny40OTlMMC42NzYxOTEgMTc4LjA3N0wwLjcxMjM0IDE3OC4xMjZWMTc4LjE0NkwwLjc0ODQ4OCAxNzguMjE4QzEzLjY1MzcgMjAyLjgyNiAxMjQuNjY3IDIxNC42MyAxNjUuNjQzIDIwNi44ODRDMTk0LjA0MyAyMDEuNTExIDIwOS41NDggMTg2LjAyNiAyMDcuODM2IDE3MS4zMTdaXCIsXG4gICAgICAgICAgZmlsbDogXCJ1cmwoI3BhaW50Ml9saW5lYXIpXCJcbiAgICAgICAgfVxuICAgICAgKSxcbiAgICAgIC8qIEBfX1BVUkVfXyAqLyBlMShcImRlZnNcIiwgeyBjaGlsZHJlbjogW1xuICAgICAgICAvKiBAX19QVVJFX18gKi8gZTEoXG4gICAgICAgICAgXCJsaW5lYXJHcmFkaWVudFwiLFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGlkOiBcInBhaW50MF9saW5lYXJcIixcbiAgICAgICAgICAgIHgxOiBcIjk2Ljk0MDdcIixcbiAgICAgICAgICAgIHkxOiBcIjgyLjcxMjdcIixcbiAgICAgICAgICAgIHgyOiBcIjI1OC41OTlcIixcbiAgICAgICAgICAgIHkyOiBcIjgyLjcxMjdcIixcbiAgICAgICAgICAgIGdyYWRpZW50VW5pdHM6IFwidXNlclNwYWNlT25Vc2VcIixcbiAgICAgICAgICAgIGNoaWxkcmVuOiBbXG4gICAgICAgICAgICAgIC8qIEBfX1BVUkVfXyAqLyBjKFwic3RvcFwiLCB7IG9mZnNldDogXCIwLjA2XCIsIHN0b3BDb2xvcjogXCIjMDA1MDhDXCIgfSksXG4gICAgICAgICAgICAgIC8qIEBfX1BVUkVfXyAqLyBjKFwic3RvcFwiLCB7IG9mZnNldDogXCIwLjM0XCIsIHN0b3BDb2xvcjogXCIjMDA3NkI1XCIgfSksXG4gICAgICAgICAgICAgIC8qIEBfX1BVUkVfXyAqLyBjKFwic3RvcFwiLCB7IG9mZnNldDogXCIwLjZcIiwgc3RvcENvbG9yOiBcIiMwMDk0RDZcIiB9KSxcbiAgICAgICAgICAgICAgLyogQF9fUFVSRV9fICovIGMoXCJzdG9wXCIsIHsgb2Zmc2V0OiBcIjAuNzRcIiwgc3RvcENvbG9yOiBcIiMwMDlGRTNcIiB9KVxuICAgICAgICAgICAgXVxuICAgICAgICAgIH1cbiAgICAgICAgKSxcbiAgICAgICAgLyogQF9fUFVSRV9fICovIGUxKFxuICAgICAgICAgIFwibGluZWFyR3JhZGllbnRcIixcbiAgICAgICAgICB7XG4gICAgICAgICAgICBpZDogXCJwYWludDFfbGluZWFyXCIsXG4gICAgICAgICAgICB4MTogXCItMC4wMDA4MDA0MDNcIixcbiAgICAgICAgICAgIHkxOiBcIjEzMS43NDdcIixcbiAgICAgICAgICAgIHgyOiBcIjI1OS45ODlcIixcbiAgICAgICAgICAgIHkyOiBcIjEzMS43NDdcIixcbiAgICAgICAgICAgIGdyYWRpZW50VW5pdHM6IFwidXNlclNwYWNlT25Vc2VcIixcbiAgICAgICAgICAgIGNoaWxkcmVuOiBbXG4gICAgICAgICAgICAgIC8qIEBfX1BVUkVfXyAqLyBjKFwic3RvcFwiLCB7IHN0b3BDb2xvcjogXCIjMDA4N0NFXCIgfSksXG4gICAgICAgICAgICAgIC8qIEBfX1BVUkVfXyAqLyBjKFwic3RvcFwiLCB7IG9mZnNldDogXCIwLjUzXCIsIHN0b3BDb2xvcjogXCIjMDA4Q0QzXCIgfSksXG4gICAgICAgICAgICAgIC8qIEBfX1BVUkVfXyAqLyBjKFwic3RvcFwiLCB7IG9mZnNldDogXCIwLjY1XCIsIHN0b3BDb2xvcjogXCIjMDk3NkI5XCIgfSksXG4gICAgICAgICAgICAgIC8qIEBfX1BVUkVfXyAqLyBjKFwic3RvcFwiLCB7IG9mZnNldDogXCIwLjg4XCIsIHN0b3BDb2xvcjogXCIjMTc1MThDXCIgfSksXG4gICAgICAgICAgICAgIC8qIEBfX1BVUkVfXyAqLyBjKFwic3RvcFwiLCB7IG9mZnNldDogXCIxXCIsIHN0b3BDb2xvcjogXCIjMUQ0MjdCXCIgfSlcbiAgICAgICAgICAgIF1cbiAgICAgICAgICB9XG4gICAgICAgICksXG4gICAgICAgIC8qIEBfX1BVUkVfXyAqLyBlMShcbiAgICAgICAgICBcImxpbmVhckdyYWRpZW50XCIsXG4gICAgICAgICAge1xuICAgICAgICAgICAgaWQ6IFwicGFpbnQyX2xpbmVhclwiLFxuICAgICAgICAgICAgeDE6IFwiMTcuMDQxOFwiLFxuICAgICAgICAgICAgeTE6IFwiMjA4Ljk0NVwiLFxuICAgICAgICAgICAgeDI6IFwiMTgyLjc5OFwiLFxuICAgICAgICAgICAgeTI6IFwiMTIxLjA0XCIsXG4gICAgICAgICAgICBncmFkaWVudFVuaXRzOiBcInVzZXJTcGFjZU9uVXNlXCIsXG4gICAgICAgICAgICBjaGlsZHJlbjogW1xuICAgICAgICAgICAgICAvKiBAX19QVVJFX18gKi8gYyhcInN0b3BcIiwgeyBvZmZzZXQ6IFwiMC42MVwiLCBzdG9wQ29sb3I6IFwiIzMxMjc4M1wiIH0pLFxuICAgICAgICAgICAgICAvKiBAX19QVVJFX18gKi8gYyhcInN0b3BcIiwgeyBvZmZzZXQ6IFwiMVwiLCBzdG9wQ29sb3I6IFwiIzAwOUZFM1wiIH0pXG4gICAgICAgICAgICBdXG4gICAgICAgICAgfVxuICAgICAgICApXG4gICAgICBdIH0pXG4gICAgXVxuICB9XG4pLCBZSyA9ICgpID0+IC8qIEBfX1BVUkVfXyAqLyBlMShcbiAgXCJzdmdcIixcbiAge1xuICAgIHdpZHRoOiBcIjI2MFwiLFxuICAgIGhlaWdodDogXCIyNjBcIixcbiAgICB2aWV3Qm94OiBcIjAgMCAyNjAgMjYwXCIsXG4gICAgZmlsbDogXCJub25lXCIsXG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICBjaGlsZHJlbjogW1xuICAgICAgLyogQF9fUFVSRV9fICovIGMoXG4gICAgICAgIFwicGF0aFwiLFxuICAgICAgICB7XG4gICAgICAgICAgc3R5bGU6IHsgbWl4QmxlbmRNb2RlOiBcIm11bHRpcGx5XCIgfSxcbiAgICAgICAgICBkOiBcIk0yNTkuMyAxMjYuOTgxQzI1NC4yNzYgMTM4LjA2MSAyNDcuODgzIDE0OC40NjggMjQwLjI3MiAxNTcuOTZDMTk3Ljc1NCAxMzkuODExIDM0LjEwMTMgMTc4LjQwNyAyNi43MjcgMTczLjE4QzI0LjM5NzcgMTcwLjYxNSAyMS4yNTQzIDE2Ny4yNTYgMTkuMDUxNiAxNjQuNTkyQzExLjQzMSAxNTQuMzMxIDExLjI4NzMgMTU0LjEyOSA4LjAxMDU2IDE0OC4yMjJDMi4yOTE2NiAxMzYuNzA1IDIuMTc4NzkgMTM2LjQ4NiAwIDEzMC4wMzVDMCAxMzAuMDM1IDMzLjk2NDUgMTIxLjM1NSA2NC4wNjA2IDExNi4yNzVDMTk2LjY0NSA5My44OTU2IDI2Ny45MTYgMTEwLjA5MSAyNTkuMyAxMjYuOTgxWlwiLFxuICAgICAgICAgIGZpbGw6IFwidXJsKCNwYWludDBfbGluZWFyKVwiXG4gICAgICAgIH1cbiAgICAgICksXG4gICAgICAvKiBAX19QVVJFX18gKi8gYyhcbiAgICAgICAgXCJwYXRoXCIsXG4gICAgICAgIHtcbiAgICAgICAgICBzdHlsZTogeyBtaXhCbGVuZE1vZGU6IFwibXVsdGlwbHlcIiB9LFxuICAgICAgICAgIGQ6IFwiTTIwMS44NTUgMTkxLjQ5QzIyNy4xMiAxNzYuMzI3IDI0Ny4xNjQgMTUzLjgyNCAyNTkuMzE3IDEyNi45ODFDMjQ2LjM1NCAxNDkuNTk3IDE3Ni44NTUgMTY3LjM0MiAxNTcuMTgxIDE3Mi4xMDNDMTMzLjk3IDE3Ny43MTIgMTE3LjA3IDE3OS4zNTggMTE4LjMzNSAxOTEuNTcyQzEyMC4wMjIgMjA4LjAzNCAxNzkuOTk1IDIwMi45IDIwMS44NTUgMTkxLjQ5WlwiLFxuICAgICAgICAgIGZpbGw6IFwidXJsKCNwYWludDFfbGluZWFyKVwiXG4gICAgICAgIH1cbiAgICAgICksXG4gICAgICAvKiBAX19QVVJFX18gKi8gYyhcbiAgICAgICAgXCJwYXRoXCIsXG4gICAgICAgIHtcbiAgICAgICAgICBzdHlsZTogeyBtaXhCbGVuZE1vZGU6IFwibXVsdGlwbHlcIiB9LFxuICAgICAgICAgIGQ6IFwiTTIzNy42OCA5MC4xMzMyQzIyOS43MzEgOTYuNTEyMyAyMTYuODYgOTcuMzcwOCAyMDcuMTE1IDk5LjUxMTlDMTc0LjIyNSAxMDYuNzI5IDE0MS40NDQgMTEzLjIzMSAxMDkuMTE3IDEyMi44NjZDNDQuMjgzOCAxNDIuMTk4IDIzLjI1ODcgMTY1LjI5IDI2LjcyNyAxNzMuMThDMjQuMzk3NyAxNzAuNjE1IDIxLjI1NDMgMTY3LjI1NiAxOS4wNTE2IDE2NC41OTJDMTEuNDMxIDE1NC4zMzEgMTEuMjg3MyAxNTQuMTI5IDguMDEwNTYgMTQ4LjIyMkMyLjI5MTY2IDEzNi43MDUgMi4xNzg3OSAxMzYuNDg2IDAgMTMwLjAzNkMwIDEzMC4wMzYgMTIuMjYyMSAxMTMuMDg0IDUyLjcyODggOTIuMzYzM0M5OC45MTQ0IDY4LjcxNDcgMTUwLjc5OCA1OC42ODI3IDIwMi40MTYgNTkuMDA3NkMyMTEuNDA0IDU5LjA2NTggMjIxLjM2MSA1OS40MjE1IDIyOS43NDEgNjIuOTgyMUMyNDAuMzU1IDY3LjQ5MzYgMjQ4Ljc4NiA4MS4yMTI4IDIzNy42OCA5MC4xMzMyWlwiLFxuICAgICAgICAgIGZpbGw6IFwidXJsKCNwYWludDJfbGluZWFyKVwiXG4gICAgICAgIH1cbiAgICAgICksXG4gICAgICAvKiBAX19QVVJFX18gKi8gZTEoXCJkZWZzXCIsIHsgY2hpbGRyZW46IFtcbiAgICAgICAgLyogQF9fUFVSRV9fICovIGUxKFxuICAgICAgICAgIFwibGluZWFyR3JhZGllbnRcIixcbiAgICAgICAgICB7XG4gICAgICAgICAgICBpZDogXCJwYWludDBfbGluZWFyXCIsXG4gICAgICAgICAgICB4MTogXCIxMC40Nzk5XCIsXG4gICAgICAgICAgICB5MTogXCIxNzEuNjIxXCIsXG4gICAgICAgICAgICB4MjogXCIyNTYuNDkxXCIsXG4gICAgICAgICAgICB5MjogXCIxMDkuNjQ1XCIsXG4gICAgICAgICAgICBncmFkaWVudFVuaXRzOiBcInVzZXJTcGFjZU9uVXNlXCIsXG4gICAgICAgICAgICBjaGlsZHJlbjogW1xuICAgICAgICAgICAgICAvKiBAX19QVVJFX18gKi8gYyhcInN0b3BcIiwgeyBzdG9wQ29sb3I6IFwiIzMxMjc4M1wiIH0pLFxuICAgICAgICAgICAgICAvKiBAX19QVVJFX18gKi8gYyhcInN0b3BcIiwgeyBvZmZzZXQ6IFwiMVwiLCBzdG9wQ29sb3I6IFwiIzAwOERENFwiIH0pXG4gICAgICAgICAgICBdXG4gICAgICAgICAgfVxuICAgICAgICApLFxuICAgICAgICAvKiBAX19QVVJFX18gKi8gZTEoXG4gICAgICAgICAgXCJsaW5lYXJHcmFkaWVudFwiLFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGlkOiBcInBhaW50MV9saW5lYXJcIixcbiAgICAgICAgICAgIHgxOiBcIjExNy40OTdcIixcbiAgICAgICAgICAgIHkxOiBcIjE4OC41NzZcIixcbiAgICAgICAgICAgIHgyOiBcIjI2NS40MzFcIixcbiAgICAgICAgICAgIHkyOiBcIjE1MS4zMDdcIixcbiAgICAgICAgICAgIGdyYWRpZW50VW5pdHM6IFwidXNlclNwYWNlT25Vc2VcIixcbiAgICAgICAgICAgIGNoaWxkcmVuOiBbXG4gICAgICAgICAgICAgIC8qIEBfX1BVUkVfXyAqLyBjKFwic3RvcFwiLCB7IHN0b3BDb2xvcjogXCIjMDBCOEVFXCIgfSksXG4gICAgICAgICAgICAgIC8qIEBfX1BVUkVfXyAqLyBjKFwic3RvcFwiLCB7IG9mZnNldDogXCIxXCIsIHN0b3BDb2xvcjogXCIjMTk0MDkzXCIgfSlcbiAgICAgICAgICAgIF1cbiAgICAgICAgICB9XG4gICAgICAgICksXG4gICAgICAgIC8qIEBfX1BVUkVfXyAqLyBlMShcbiAgICAgICAgICBcImxpbmVhckdyYWRpZW50XCIsXG4gICAgICAgICAge1xuICAgICAgICAgICAgaWQ6IFwicGFpbnQyX2xpbmVhclwiLFxuICAgICAgICAgICAgeDE6IFwiMi4xMzA4MlwiLFxuICAgICAgICAgICAgeTE6IFwiMTM4LjQ4XCIsXG4gICAgICAgICAgICB4MjogXCIyNDIuNzUyXCIsXG4gICAgICAgICAgICB5MjogXCI3Ny44NjE5XCIsXG4gICAgICAgICAgICBncmFkaWVudFVuaXRzOiBcInVzZXJTcGFjZU9uVXNlXCIsXG4gICAgICAgICAgICBjaGlsZHJlbjogW1xuICAgICAgICAgICAgICAvKiBAX19QVVJFX18gKi8gYyhcInN0b3BcIiwgeyBvZmZzZXQ6IFwiMC4wNlwiLCBzdG9wQ29sb3I6IFwiIzAwNUE5RVwiIH0pLFxuICAgICAgICAgICAgICAvKiBAX19QVVJFX18gKi8gYyhcInN0b3BcIiwgeyBvZmZzZXQ6IFwiMC4xN1wiLCBzdG9wQ29sb3I6IFwiIzAwNjVBQVwiIH0pLFxuICAgICAgICAgICAgICAvKiBAX19QVVJFX18gKi8gYyhcInN0b3BcIiwgeyBvZmZzZXQ6IFwiMC41NFwiLCBzdG9wQ29sb3I6IFwiIzAwODRDQlwiIH0pLFxuICAgICAgICAgICAgICAvKiBAX19QVVJFX18gKi8gYyhcInN0b3BcIiwgeyBvZmZzZXQ6IFwiMC43NFwiLCBzdG9wQ29sb3I6IFwiIzAwOTBEN1wiIH0pXG4gICAgICAgICAgICBdXG4gICAgICAgICAgfVxuICAgICAgICApXG4gICAgICBdIH0pXG4gICAgXVxuICB9XG4pLCBHSyA9ICgpID0+IC8qIEBfX1BVUkVfXyAqLyBlMShcbiAgXCJzdmdcIixcbiAge1xuICAgIHdpZHRoOiBcIjI2MFwiLFxuICAgIGhlaWdodDogXCIyNjBcIixcbiAgICB2aWV3Qm94OiBcIjAgMCAyNjAgMjYwXCIsXG4gICAgZmlsbDogXCJub25lXCIsXG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICBjaGlsZHJlbjogW1xuICAgICAgLyogQF9fUFVSRV9fICovIGMoXG4gICAgICAgIFwicGF0aFwiLFxuICAgICAgICB7XG4gICAgICAgICAgc3R5bGU6IHsgbWl4QmxlbmRNb2RlOiBcIm11bHRpcGx5XCIgfSxcbiAgICAgICAgICBkOiBcIk0xMy44NzM5IDE3Ni4zMTVDMTYuMDI3MSAxNzguNzY1IDE4LjUyNzEgMTgwLjc5NCAyMS4wODgyIDE4Mi44MTRDNDYuNjM1MSAyMDIuODQyIDg5LjM2MzEgMjA4LjI1MiAxMTYuOTQxIDIwMy4yODNDMTMwLjc5NSAyMDAuNzg2IDEzOS43OTcgMTkwLjA2NCAxMzcuMzQxIDE3My43MzJDMTM2LjAzNyAxNjUuMDc1IDEyNi45NDcgMTYwLjU3NyAxMTguNzUgMTYwLjY5MUM5OS4xMTM1IDE2MC45NjggNzYuMjcxOSAxNTkuMTE1IDU0Ljg3MDUgMTU0LjQ4NkMzOS4yNDA0IDE1MS4xMDcgMjEuMjk2MyAxNDEuNzIzIDE1LjAwMzIgMTM0LjA1MUMxNC4xNTE0IDEzMi45ODggOC4wNDY5NiAxMjYuNzMxIDIwLjg2OSAxMjIuMTgzQzIwLjg2OSAxMjIuMTgzIDExLjMwNzMgMTI0LjkxMyA4LjQ5OTI0IDEzMS4zNEM3LjE0NTE4IDEzNC40MzQgNi4yMzUwNyAxMzguODMxIDYuMTY4NDcgMTQyLjI0MkM2LjA4MjQ2IDE0Ni42ODEgNi4yMTI4NyAxNTEuMTQ4IDYuNTY1MjYgMTU1LjU4NUM2Ljk4OTc5IDE2MC45NzEgNy43ODA1OSAxNjYuNDY1IDEwLjMzODkgMTcxLjIxOEMxMS4zMjU4IDE3My4wNDIgMTIuNTExMyAxNzQuNzUyIDEzLjg3MzkgMTc2LjMxNVpcIixcbiAgICAgICAgICBmaWxsOiBcInVybCgjcGFpbnQwX2xpbmVhcilcIlxuICAgICAgICB9XG4gICAgICApLFxuICAgICAgLyogQF9fUFVSRV9fICovIGMoXG4gICAgICAgIFwicGF0aFwiLFxuICAgICAgICB7XG4gICAgICAgICAgc3R5bGU6IHsgbWl4QmxlbmRNb2RlOiBcIm11bHRpcGx5XCIgfSxcbiAgICAgICAgICBkOiBcIk0wLjAzMzU3NDEgMTMyLjM4NkwwLjAwMDI3NzQyNCAxMzIuMjhDLTAuMDA1NDY2OTIgMTMyLjAzIDAuMDc4MTU2NiAxMzEuNzg2IDAuMjM2MTI5IDEzMS41OTJDMC4xNzUwODUgMTMxLjg2MSAwLjEwNTcxNyAxMzIuMTIyIDAuMDMzNTc0MSAxMzIuMzg2WlwiLFxuICAgICAgICAgIGZpbGw6IFwidXJsKCNwYWludDFfbGluZWFyKVwiXG4gICAgICAgIH1cbiAgICAgICksXG4gICAgICAvKiBAX19QVVJFX18gKi8gYyhcbiAgICAgICAgXCJwYXRoXCIsXG4gICAgICAgIHtcbiAgICAgICAgICBzdHlsZTogeyBtaXhCbGVuZE1vZGU6IFwibXVsdGlwbHlcIiB9LFxuICAgICAgICAgIGQ6IFwiTTIzNC43MjMgMjE4LjU3NEMyMTEuODcgMjA0LjUxMiAxOTMuMjgyIDE5OS43MzQgMTU0LjA0NSAxOTAuNTIyQzExNS40ODQgMTgxLjQ2MyA0LjMyODgzIDE1OC4wODUgMTMuODQ4OSAxNzYuMTg1QzE0LjIwOTYgMTc2Ljg3IDExLjMxIDE3My4wMDggMTAuMzM4OSAxNzEuMjA3QzcuNzY5NDkgMTY2LjQ1NCA2Ljk4OTc5IDE2MC45NiA2LjU2NTI2IDE1NS41ODhDNi4yMTI4NyAxNTEuMTQ5IDYuMDgyNDYgMTQ2LjY5NSA2LjE2ODQ3IDE0Mi4yNDVDNi4yMzUwNyAxMzguODQzIDcuMTQ1MTggMTM0LjQzNiA4LjQ5OTI0IDEzMS4zNDNDMTEuMTY1OCAxMjUuMjM4IDE5LjkxNzIgMTIyLjQ4MyAyMC43OTQxIDEyMi4yMTlDMzUuODMzMSAxMTkuMDEyIDYwLjM2MTcgMTE3Ljk5MSA5OC41MDg2IDEyNS4zODJDMTUzLjk3NSAxMzYuMTE4IDIyNS4zNzIgMTU3LjgwOCAyNDYuOTk4IDE3My45NTFDMjcxLjA5MSAxOTEuOTM3IDI1OC42MDUgMjMzLjI1NiAyMzQuNzIzIDIxOC41NzRaXCIsXG4gICAgICAgICAgZmlsbDogXCJ1cmwoI3BhaW50Ml9saW5lYXIpXCJcbiAgICAgICAgfVxuICAgICAgKSxcbiAgICAgIC8qIEBfX1BVUkVfXyAqLyBjKFxuICAgICAgICBcInBhdGhcIixcbiAgICAgICAge1xuICAgICAgICAgIHN0eWxlOiB7IG1peEJsZW5kTW9kZTogXCJtdWx0aXBseVwiIH0sXG4gICAgICAgICAgZDogXCJNMjE3Ljg4OSAxNDcuNjcyQzIxNy4yMDkgMTMwLjQxIDE5OS44NTMgMTE5LjI2NyAxODYuNjUzIDExMS4yNjdDMTQ4LjUwOSA4OC4xNDAxIDEwMi4zMTggNzQuMDU4NCA1Ny40NTk0IDc3LjU0MzRDNDYuNzM1MSA3OC4zNzU4IDM2LjI2MzIgODAuNjU5NCAyNi4wMzg0IDgzLjk1ODZDLTMuMDcxMjkgOTMuMzUxIC05LjU5NDY3IDU5LjM2NjIgMTYuMzI0MSA0Ni43NTUxQzE5LjcxNDggNDUuMTA2OSAyOC4xMTk0IDQyLjA5OTEgMzMuMDk3MyA0MC45MjgxQzc5LjQ3NjggMjkuOTc2MyAxMjMuNzkyIDM4LjgyMjEgMTY4LjI1NCA1Mi4zNjgzQzE3OC4yOTMgNTUuNDIwNSAxOTQuNDU5IDYyLjAyMTYgMjAzLjM4OCA2Ny42NzkzQzIwNC4zODIgNjguMjY5MSAyMDUuMzEyIDY4Ljk2MSAyMDYuMTYzIDY5Ljc0MzdDMjA4LjAzIDcxLjU0NDUgMjM1LjQxMSAxMzUuMjcyIDIxNy44ODkgMTQ3LjY3MlpcIixcbiAgICAgICAgICBmaWxsOiBcInVybCgjcGFpbnQzX2xpbmVhcilcIlxuICAgICAgICB9XG4gICAgICApLFxuICAgICAgLyogQF9fUFVSRV9fICovIGMoXG4gICAgICAgIFwicGF0aFwiLFxuICAgICAgICB7XG4gICAgICAgICAgc3R5bGU6IHsgbWl4QmxlbmRNb2RlOiBcIm11bHRpcGx5XCIgfSxcbiAgICAgICAgICBkOiBcIk0yMDYuMjYyIDY5Ljg0OTFDMjA4Ljc5NiA3My4zMjU5IDIzNS4xNjQgMTM1LjQ0MSAyMTcuODg5IDE0Ny42NjRDMjE3Ljg4OSAxNDcuNjggMjE3Ljg4OSAxNDcuNyAyMTcuODg5IDE0Ny43MTZDMjE3LjczOCAxNDcuODY3IDIxNy41NyAxNDcuOTk5IDIxNy4zODkgMTQ4LjExQzIwNS41OCAxNTUuMTcyIDE2Ni4zMzQgMTU1LjYzMyAxMjQuNzY5IDE0Ni4wNzFDODYuMzc3NSAxMzcuMjU2IDcwLjcwMDMgMTI2Ljk5MiA3Mi41Mjg5IDEwOS4yNUM3NC4yOTA4IDk0LjExMTMgOTMuODE2NiA4OC4xNjIzIDEyNS45ODEgODcuNjc0QzE1Ni4zMzcgODcuMjA1IDIwOC4xMDUgOTAuNjkwMSAyMDYuMjYyIDY5Ljg0OTFaXCIsXG4gICAgICAgICAgZmlsbDogXCJ1cmwoI3BhaW50NF9saW5lYXIpXCJcbiAgICAgICAgfVxuICAgICAgKSxcbiAgICAgIC8qIEBfX1BVUkVfXyAqLyBlMShcImRlZnNcIiwgeyBjaGlsZHJlbjogW1xuICAgICAgICAvKiBAX19QVVJFX18gKi8gZTEoXG4gICAgICAgICAgXCJsaW5lYXJHcmFkaWVudFwiLFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGlkOiBcInBhaW50MF9saW5lYXJcIixcbiAgICAgICAgICAgIHgxOiBcIjIuOTc0MzJcIixcbiAgICAgICAgICAgIHkxOiBcIjE1My42MjhcIixcbiAgICAgICAgICAgIHgyOiBcIjEzNy4xNzRcIixcbiAgICAgICAgICAgIHkyOiBcIjE4Ny4zNjFcIixcbiAgICAgICAgICAgIGdyYWRpZW50VW5pdHM6IFwidXNlclNwYWNlT25Vc2VcIixcbiAgICAgICAgICAgIGNoaWxkcmVuOiBbXG4gICAgICAgICAgICAgIC8qIEBfX1BVUkVfXyAqLyBjKFwic3RvcFwiLCB7IG9mZnNldDogXCIwLjMxXCIsIHN0b3BDb2xvcjogXCIjMzEyQTcwXCIgfSksXG4gICAgICAgICAgICAgIC8qIEBfX1BVUkVfXyAqLyBjKFwic3RvcFwiLCB7IG9mZnNldDogXCIxXCIsIHN0b3BDb2xvcjogXCIjMDA5RkUzXCIsIHN0b3BPcGFjaXR5OiBcIjAuOVwiIH0pXG4gICAgICAgICAgICBdXG4gICAgICAgICAgfVxuICAgICAgICApLFxuICAgICAgICAvKiBAX19QVVJFX18gKi8gZTEoXG4gICAgICAgICAgXCJsaW5lYXJHcmFkaWVudFwiLFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGlkOiBcInBhaW50MV9saW5lYXJcIixcbiAgICAgICAgICAgIHgxOiBcIi01LjQ2MjQxXCIsXG4gICAgICAgICAgICB5MTogXCIxMjkuNTk4XCIsXG4gICAgICAgICAgICB4MjogXCItNS4zMzIyMlwiLFxuICAgICAgICAgICAgeTI6IFwiMTI5LjY1M1wiLFxuICAgICAgICAgICAgZ3JhZGllbnRVbml0czogXCJ1c2VyU3BhY2VPblVzZVwiLFxuICAgICAgICAgICAgY2hpbGRyZW46IFtcbiAgICAgICAgICAgICAgLyogQF9fUFVSRV9fICovIGMoXCJzdG9wXCIsIHsgc3RvcENvbG9yOiBcIiNGRkQ4MDBcIiB9KSxcbiAgICAgICAgICAgICAgLyogQF9fUFVSRV9fICovIGMoXCJzdG9wXCIsIHsgb2Zmc2V0OiBcIjAuNTFcIiwgc3RvcENvbG9yOiBcIiNGNDk2MDBcIiB9KSxcbiAgICAgICAgICAgICAgLyogQF9fUFVSRV9fICovIGMoXCJzdG9wXCIsIHsgb2Zmc2V0OiBcIjAuNjJcIiwgc3RvcENvbG9yOiBcIiNGMzhGMDFcIiB9KSxcbiAgICAgICAgICAgICAgLyogQF9fUFVSRV9fICovIGMoXCJzdG9wXCIsIHsgb2Zmc2V0OiBcIjAuNzhcIiwgc3RvcENvbG9yOiBcIiNFRjdCMDZcIiB9KSxcbiAgICAgICAgICAgICAgLyogQF9fUFVSRV9fICovIGMoXCJzdG9wXCIsIHsgb2Zmc2V0OiBcIjAuOTZcIiwgc3RvcENvbG9yOiBcIiNFQTVCMENcIiB9KVxuICAgICAgICAgICAgXVxuICAgICAgICAgIH1cbiAgICAgICAgKSxcbiAgICAgICAgLyogQF9fUFVSRV9fICovIGUxKFxuICAgICAgICAgIFwibGluZWFyR3JhZGllbnRcIixcbiAgICAgICAgICB7XG4gICAgICAgICAgICBpZDogXCJwYWludDJfbGluZWFyXCIsXG4gICAgICAgICAgICB4MTogXCI2LjE0MzVcIixcbiAgICAgICAgICAgIHkxOiBcIjE3MC43MTlcIixcbiAgICAgICAgICAgIHgyOiBcIjI1OS45OTVcIixcbiAgICAgICAgICAgIHkyOiBcIjE3MC43MTlcIixcbiAgICAgICAgICAgIGdyYWRpZW50VW5pdHM6IFwidXNlclNwYWNlT25Vc2VcIixcbiAgICAgICAgICAgIGNoaWxkcmVuOiBbXG4gICAgICAgICAgICAgIC8qIEBfX1BVUkVfXyAqLyBjKFwic3RvcFwiLCB7IHN0b3BDb2xvcjogXCIjMDA5MkQ4XCIgfSksXG4gICAgICAgICAgICAgIC8qIEBfX1BVUkVfXyAqLyBjKFwic3RvcFwiLCB7IG9mZnNldDogXCIxXCIsIHN0b3BDb2xvcjogXCIjNzk2NUFBXCIgfSlcbiAgICAgICAgICAgIF1cbiAgICAgICAgICB9XG4gICAgICAgICksXG4gICAgICAgIC8qIEBfX1BVUkVfXyAqLyBlMShcbiAgICAgICAgICBcImxpbmVhckdyYWRpZW50XCIsXG4gICAgICAgICAge1xuICAgICAgICAgICAgaWQ6IFwicGFpbnQzX2xpbmVhclwiLFxuICAgICAgICAgICAgeDE6IFwiMi42NzM5XCIsXG4gICAgICAgICAgICB5MTogXCI0Mi4zNzU1XCIsXG4gICAgICAgICAgICB4MjogXCIyMzMuMjc5XCIsXG4gICAgICAgICAgICB5MjogXCIxMDcuMjMzXCIsXG4gICAgICAgICAgICBncmFkaWVudFVuaXRzOiBcInVzZXJTcGFjZU9uVXNlXCIsXG4gICAgICAgICAgICBjaGlsZHJlbjogW1xuICAgICAgICAgICAgICAvKiBAX19QVVJFX18gKi8gYyhcInN0b3BcIiwgeyBzdG9wQ29sb3I6IFwiIzk3MUI4MVwiIH0pLFxuICAgICAgICAgICAgICAvKiBAX19QVVJFX18gKi8gYyhcInN0b3BcIiwgeyBvZmZzZXQ6IFwiMVwiLCBzdG9wQ29sb3I6IFwiI0YxOTVCRlwiIH0pXG4gICAgICAgICAgICBdXG4gICAgICAgICAgfVxuICAgICAgICApLFxuICAgICAgICAvKiBAX19QVVJFX18gKi8gZTEoXG4gICAgICAgICAgXCJsaW5lYXJHcmFkaWVudFwiLFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGlkOiBcInBhaW50NF9saW5lYXJcIixcbiAgICAgICAgICAgIHgxOiBcIjc5LjIyMTdcIixcbiAgICAgICAgICAgIHkxOiBcIjc5LjgxNzVcIixcbiAgICAgICAgICAgIHgyOiBcIjIyNi4yNDlcIixcbiAgICAgICAgICAgIHkyOiBcIjEyMS4xNjlcIixcbiAgICAgICAgICAgIGdyYWRpZW50VW5pdHM6IFwidXNlclNwYWNlT25Vc2VcIixcbiAgICAgICAgICAgIGNoaWxkcmVuOiBbXG4gICAgICAgICAgICAgIC8qIEBfX1BVUkVfXyAqLyBjKFwic3RvcFwiLCB7IHN0b3BDb2xvcjogXCIjRjQ5NjAwXCIgfSksXG4gICAgICAgICAgICAgIC8qIEBfX1BVUkVfXyAqLyBjKFwic3RvcFwiLCB7IG9mZnNldDogXCIxXCIsIHN0b3BDb2xvcjogXCIjRTMwNjEzXCIgfSlcbiAgICAgICAgICAgIF1cbiAgICAgICAgICB9XG4gICAgICAgIClcbiAgICAgIF0gfSlcbiAgICBdXG4gIH1cbiksIFFLID0gKCkgPT4gLyogQF9fUFVSRV9fICovIGUxKFxuICBcInN2Z1wiLFxuICB7XG4gICAgd2lkdGg6IFwiMjYwXCIsXG4gICAgaGVpZ2h0OiBcIjI2MFwiLFxuICAgIHZpZXdCb3g6IFwiMCAwIDI2MCAyNjBcIixcbiAgICBmaWxsOiBcIm5vbmVcIixcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIGNoaWxkcmVuOiBbXG4gICAgICAvKiBAX19QVVJFX18gKi8gYyhcbiAgICAgICAgXCJwYXRoXCIsXG4gICAgICAgIHtcbiAgICAgICAgICBzdHlsZTogeyBtaXhCbGVuZE1vZGU6IFwibXVsdGlwbHlcIiB9LFxuICAgICAgICAgIGQ6IFwiTTg3LjUxNzYgNDQuODExN0MxMzQuNjI0IDQ3LjU3MzQgMTU5LjU2NiA1OS40MTE5IDE1OS4yMDkgNzguNjY5NkMxNTguNjg3IDk1LjEwNzcgMTM3LjgzOSAxMDUuOTc3IDEwMy4yOTkgMTA5LjM5MkM2My4wMTY2IDExMy4zNzcgNi45OTEyNyAxMTMuNTI1IDIwLjM1NTUgMTQwLjUzN0M3LjAxMjE1IDExOS4wODMgLTAuMDQwNDkyNyA5NC4zMTM4IDAuMDAwMTc0ODg2IDY5LjA0ODhDMC4wMDAxNzQ4ODYgNjcuMTE3NiAwLjA2MTMzMDkgNjUuMjEyMSAwLjE0MTc5OSA2My4zMTNDMC40MjUwNDggNTYuNTE1MSA4LjU4Nzc2IDQwLjE4OTYgODcuNTE3NiA0NC44MTE3WlwiLFxuICAgICAgICAgIGZpbGw6IFwidXJsKCNwYWludDBfbGluZWFyKVwiXG4gICAgICAgIH1cbiAgICAgICksXG4gICAgICAvKiBAX19QVVJFX18gKi8gYyhcbiAgICAgICAgXCJwYXRoXCIsXG4gICAgICAgIHtcbiAgICAgICAgICBzdHlsZTogeyBtaXhCbGVuZE1vZGU6IFwibXVsdGlwbHlcIiB9LFxuICAgICAgICAgIGQ6IFwiTTI2MCAxMzQuMTg2QzI1OC44MzUgMTI2LjM0MiAyNDkuOTA5IDEyMi4xOTcgMjQzLjM1IDExOS41ODlDMjMzLjYwOSAxMTUuNjg0IDIyMy40NiAxMTIuODg5IDIxMy4wOTMgMTExLjI1NkMyMDUuNzk2IDExMC4xMjIgMTk4LjQwNiAxMDkuNjkgMTkxLjAyNiAxMDkuOTY5QzE3Ny4zOTEgMTEwLjUxNiAxNTYuNjQ2IDExMi45OTQgMTU0LjUwNiAxMzAuMDY2QzE1Mi4yODggMTQ3LjgxNCAxODAuNDIgMTYwLjg0MSAxOTEuOTk1IDE2Ni45NTZDMTk5Ljk2MSAxNzEuMTY2IDIxNC43OTMgMTc3LjkyNiAyMjMuNTEyIDE4Mi42NTFDMjM5LjE0NyAxNjkuNDI5IDI1MS42MTYgMTUyLjg2NyAyNjAgMTM0LjE4NlpcIixcbiAgICAgICAgICBmaWxsOiBcInVybCgjcGFpbnQxX2xpbmVhcilcIlxuICAgICAgICB9XG4gICAgICApLFxuICAgICAgLyogQF9fUFVSRV9fICovIGMoXG4gICAgICAgIFwicGF0aFwiLFxuICAgICAgICB7XG4gICAgICAgICAgc3R5bGU6IHsgbWl4QmxlbmRNb2RlOiBcIm11bHRpcGx5XCIgfSxcbiAgICAgICAgICBkOiBcIk01Ny45MTgyIDE4OC4wNDlDNTkuMjg2MSAxODkuMDY2IDYwLjkzNDEgMTkwLjI2IDYyLjU3ODkgMTkxLjQzMkM4MC41NDk5IDIwMy44MDYgMTAxLjI4MSAyMTEuNTg3IDEyMi45NTYgMjE0LjA5MUMxMjIuOTU2IDIxNC4wOTEgMTQwLjUwMSAyMTAuMTM5IDEzNy45MDcgMjAxLjgzNUMxMzUuNDMyIDE5My45MiAxMjEuMzUgMTg5LjEzMyA5Ny44MDQ3IDE4Ni4yOTRDNTguMTU2NCAxODEuNTE1IDU2LjYxMTQgMTg2LjkzMiA1Ny45MTgyIDE4OC4wNDlaXCIsXG4gICAgICAgICAgZmlsbDogXCJ1cmwoI3BhaW50Ml9saW5lYXIpXCJcbiAgICAgICAgfVxuICAgICAgKSxcbiAgICAgIC8qIEBfX1BVUkVfXyAqLyBjKFxuICAgICAgICBcInBhdGhcIixcbiAgICAgICAge1xuICAgICAgICAgIHN0eWxlOiB7IG1peEJsZW5kTW9kZTogXCJtdWx0aXBseVwiIH0sXG4gICAgICAgICAgZDogXCJNMjU4LjY3MSAxMzcuMDYxQzI0Mi43MjggMTY0Ljk5IDE5MS4wMTMgMTU1LjYxIDE1NS40MjcgMTUwLjUyNUMzMy40MzY0IDEzMy4wOTkgMy44ODg0MyAxMDEuNDE3IDMuODg4NDMgMTAxLjQxN0M3LjI3Nzc1IDExNS4yNDQgMTIuODM1NiAxMjguNDQ4IDIwLjM1NTUgMTQwLjUzN0MzMC4xMjQzIDE1NS4xODIgODUuNjYzNiAxNzcuODc0IDE2OC41NjIgMTg0Ljc5OEMxOTYuNDg1IDE4Ny4xMzUgMjExLjAwOCAxODcuMTgzIDIxOC41MDcgMTg2LjdDMjM1LjYxOCAxNzMuNTQ4IDI0OS4zOCAxNTYuNTQgMjU4LjY3MSAxMzcuMDYxWlwiLFxuICAgICAgICAgIGZpbGw6IFwidXJsKCNwYWludDNfbGluZWFyKVwiXG4gICAgICAgIH1cbiAgICAgICksXG4gICAgICAvKiBAX19QVVJFX18gKi8gYyhcbiAgICAgICAgXCJwYXRoXCIsXG4gICAgICAgIHtcbiAgICAgICAgICBzdHlsZTogeyBtaXhCbGVuZE1vZGU6IFwibXVsdGlwbHlcIiB9LFxuICAgICAgICAgIGQ6IFwiTTIxOC41NzUgMTg2LjYyM0MyMTguNTc1IDE4Ni41NzUgMjE4LjU1OSAxODYuNTY4IDIxOC41NDYgMTg2LjYyM0MyMTguNTQ2IDE4Ni42MjMgMjE4LjU0NiAxODYuNiAyMTguNTQ2IDE4Ni42MDRDMjEwLjQ3MyAxOTEuMjE5IDE5My4zMTEgMTk2LjE3NiAxNzcuMzk0IDE5OS40NzlDMTI4LjU1IDIwOS42NDcgNzAuMjc4IDE5My45NDIgNTcuOTExNiAxODguMDQ2QzU5LjI3OTYgMTg5LjA2MyA2MC45Mjc2IDE5MC4yNTcgNjIuNTcyMyAxOTEuNDI4Qzg0LjkxOTcgMjA2LjgxNSAxMTEuNDIyIDIxNS4wMzMgMTM4LjU1NCAyMTQuOTlDMTY4LjUxNCAyMTQuOTkgMTk2LjIwMSAyMDMuMjI4IDIxOC41MzYgMTg2LjYzOUwyMTguNTc1IDE4Ni42MjNaXCIsXG4gICAgICAgICAgZmlsbDogXCJ1cmwoI3BhaW50NF9saW5lYXIpXCJcbiAgICAgICAgfVxuICAgICAgKSxcbiAgICAgIC8qIEBfX1BVUkVfXyAqLyBlMShcImRlZnNcIiwgeyBjaGlsZHJlbjogW1xuICAgICAgICAvKiBAX19QVVJFX18gKi8gZTEoXG4gICAgICAgICAgXCJsaW5lYXJHcmFkaWVudFwiLFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGlkOiBcInBhaW50MF9saW5lYXJcIixcbiAgICAgICAgICAgIHgxOiBcIjE1OS42NDlcIixcbiAgICAgICAgICAgIHkxOiBcIjkyLjI2ODhcIixcbiAgICAgICAgICAgIHgyOiBcIi00LjM0NTEyXCIsXG4gICAgICAgICAgICB5MjogXCI5Mi4yNjg4XCIsXG4gICAgICAgICAgICBncmFkaWVudFVuaXRzOiBcInVzZXJTcGFjZU9uVXNlXCIsXG4gICAgICAgICAgICBjaGlsZHJlbjogW1xuICAgICAgICAgICAgICAvKiBAX19QVVJFX18gKi8gYyhcInN0b3BcIiwgeyBzdG9wQ29sb3I6IFwiI0VENkVBN1wiIH0pLFxuICAgICAgICAgICAgICAvKiBAX19QVVJFX18gKi8gYyhcInN0b3BcIiwgeyBvZmZzZXQ6IFwiMVwiLCBzdG9wQ29sb3I6IFwiIzgzMUY4MlwiIH0pXG4gICAgICAgICAgICBdXG4gICAgICAgICAgfVxuICAgICAgICApLFxuICAgICAgICAvKiBAX19QVVJFX18gKi8gZTEoXG4gICAgICAgICAgXCJsaW5lYXJHcmFkaWVudFwiLFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGlkOiBcInBhaW50MV9saW5lYXJcIixcbiAgICAgICAgICAgIHgxOiBcIjE1OS43MjdcIixcbiAgICAgICAgICAgIHkxOiBcIjE1Ni41NjNcIixcbiAgICAgICAgICAgIHgyOiBcIjI2NS40NTNcIixcbiAgICAgICAgICAgIHkyOiBcIjEzMS42NDRcIixcbiAgICAgICAgICAgIGdyYWRpZW50VW5pdHM6IFwidXNlclNwYWNlT25Vc2VcIixcbiAgICAgICAgICAgIGNoaWxkcmVuOiBbXG4gICAgICAgICAgICAgIC8qIEBfX1BVUkVfXyAqLyBjKFwic3RvcFwiLCB7IHN0b3BDb2xvcjogXCIjMDA0ODk5XCIgfSksXG4gICAgICAgICAgICAgIC8qIEBfX1BVUkVfXyAqLyBjKFwic3RvcFwiLCB7IG9mZnNldDogXCIxXCIsIHN0b3BDb2xvcjogXCIjMDA4MEM5XCIsIHN0b3BPcGFjaXR5OiBcIjAuOVwiIH0pXG4gICAgICAgICAgICBdXG4gICAgICAgICAgfVxuICAgICAgICApLFxuICAgICAgICAvKiBAX19QVVJFX18gKi8gZTEoXG4gICAgICAgICAgXCJsaW5lYXJHcmFkaWVudFwiLFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGlkOiBcInBhaW50Ml9saW5lYXJcIixcbiAgICAgICAgICAgIHgxOiBcIjU2Ljk5MTJcIixcbiAgICAgICAgICAgIHkxOiBcIjE5OS4yMjRcIixcbiAgICAgICAgICAgIHgyOiBcIjEzOC4xNThcIixcbiAgICAgICAgICAgIHkyOiBcIjE5OS4yMjRcIixcbiAgICAgICAgICAgIGdyYWRpZW50VW5pdHM6IFwidXNlclNwYWNlT25Vc2VcIixcbiAgICAgICAgICAgIGNoaWxkcmVuOiBbXG4gICAgICAgICAgICAgIC8qIEBfX1BVUkVfXyAqLyBjKFwic3RvcFwiLCB7IHN0b3BDb2xvcjogXCIjOEZCRjIxXCIgfSksXG4gICAgICAgICAgICAgIC8qIEBfX1BVUkVfXyAqLyBjKFwic3RvcFwiLCB7IG9mZnNldDogXCIwLjI1XCIsIHN0b3BDb2xvcjogXCIjNkZCMjI3XCIgfSksXG4gICAgICAgICAgICAgIC8qIEBfX1BVUkVfXyAqLyBjKFwic3RvcFwiLCB7IG9mZnNldDogXCIwLjhcIiwgc3RvcENvbG9yOiBcIiMyMDkzMzhcIiB9KSxcbiAgICAgICAgICAgICAgLyogQF9fUFVSRV9fICovIGMoXCJzdG9wXCIsIHsgb2Zmc2V0OiBcIjFcIiwgc3RvcENvbG9yOiBcIiMwMDg2M0VcIiB9KVxuICAgICAgICAgICAgXVxuICAgICAgICAgIH1cbiAgICAgICAgKSxcbiAgICAgICAgLyogQF9fUFVSRV9fICovIGUxKFxuICAgICAgICAgIFwibGluZWFyR3JhZGllbnRcIixcbiAgICAgICAgICB7XG4gICAgICAgICAgICBpZDogXCJwYWludDNfbGluZWFyXCIsXG4gICAgICAgICAgICB4MTogXCIzLjE4MzUyXCIsXG4gICAgICAgICAgICB5MTogXCIxNDQuMTgxXCIsXG4gICAgICAgICAgICB4MjogXCIyNjUuNjI2XCIsXG4gICAgICAgICAgICB5MjogXCIxNDQuMTgxXCIsXG4gICAgICAgICAgICBncmFkaWVudFVuaXRzOiBcInVzZXJTcGFjZU9uVXNlXCIsXG4gICAgICAgICAgICBjaGlsZHJlbjogW1xuICAgICAgICAgICAgICAvKiBAX19QVVJFX18gKi8gYyhcInN0b3BcIiwgeyBzdG9wQ29sb3I6IFwiIzc5NDg5N1wiIH0pLFxuICAgICAgICAgICAgICAvKiBAX19QVVJFX18gKi8gYyhcInN0b3BcIiwgeyBvZmZzZXQ6IFwiMVwiLCBzdG9wQ29sb3I6IFwiIzAwOUZFM1wiIH0pXG4gICAgICAgICAgICBdXG4gICAgICAgICAgfVxuICAgICAgICApLFxuICAgICAgICAvKiBAX19QVVJFX18gKi8gZTEoXG4gICAgICAgICAgXCJsaW5lYXJHcmFkaWVudFwiLFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGlkOiBcInBhaW50NF9saW5lYXJcIixcbiAgICAgICAgICAgIHgxOiBcIjU1LjM2MjRcIixcbiAgICAgICAgICAgIHkxOiBcIjIwMC43ODVcIixcbiAgICAgICAgICAgIHgyOiBcIjIxNy43NlwiLFxuICAgICAgICAgICAgeTI6IFwiMjAwLjc4NVwiLFxuICAgICAgICAgICAgZ3JhZGllbnRVbml0czogXCJ1c2VyU3BhY2VPblVzZVwiLFxuICAgICAgICAgICAgY2hpbGRyZW46IFtcbiAgICAgICAgICAgICAgLyogQF9fUFVSRV9fICovIGMoXCJzdG9wXCIsIHsgb2Zmc2V0OiBcIjAuMzVcIiwgc3RvcENvbG9yOiBcIiMwMEI5RUVcIiB9KSxcbiAgICAgICAgICAgICAgLyogQF9fUFVSRV9fICovIGMoXCJzdG9wXCIsIHsgb2Zmc2V0OiBcIjAuMzdcIiwgc3RvcENvbG9yOiBcIiMwMEI1RThcIiB9KSxcbiAgICAgICAgICAgICAgLyogQF9fUFVSRV9fICovIGMoXCJzdG9wXCIsIHsgb2Zmc2V0OiBcIjAuNzFcIiwgc3RvcENvbG9yOiBcIiMwMDg5QTFcIiB9KSxcbiAgICAgICAgICAgICAgLyogQF9fUFVSRV9fICovIGMoXCJzdG9wXCIsIHsgb2Zmc2V0OiBcIjAuODZcIiwgc3RvcENvbG9yOiBcIiMwMDc3ODVcIiB9KVxuICAgICAgICAgICAgXVxuICAgICAgICAgIH1cbiAgICAgICAgKVxuICAgICAgXSB9KVxuICAgIF1cbiAgfVxuKSwgWksgPSAoKSA9PiAvKiBAX19QVVJFX18gKi8gZTEoXG4gIFwic3ZnXCIsXG4gIHtcbiAgICB3aWR0aDogXCIyNjBcIixcbiAgICBoZWlnaHQ6IFwiMjYwXCIsXG4gICAgdmlld0JveDogXCIwIDAgMjYwIDI2MFwiLFxuICAgIGZpbGw6IFwibm9uZVwiLFxuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgY2hpbGRyZW46IFtcbiAgICAgIC8qIEBfX1BVUkVfXyAqLyBjKFxuICAgICAgICBcInBhdGhcIixcbiAgICAgICAge1xuICAgICAgICAgIHN0eWxlOiB7IG1peEJsZW5kTW9kZTogXCJtdWx0aXBseVwiIH0sXG4gICAgICAgICAgZDogXCJNMjAxLjg5MiAxNjguNDgyQzIxOC4zMzIgMTQ0LjQ1NCAwIDEwOS4xMzIgMCAxMDkuMTMyQzAuOTYwMTExIDEyOS44MDMgMTUuNjAxOCAxNTkuNjExIDE1LjYwMTggMTU5LjQ4OUMyNS4xODA1IDE2OC43OTkgMTM4LjI1NiAxNjUuOTk5IDE3NS43OTYgMTk3LjUzOUMxODkuMTcxIDE4Ni4xMjMgMjAxLjg5MiAxNjguNDgyIDIwMS44OTIgMTY4LjQ4MlpcIixcbiAgICAgICAgICBmaWxsOiBcInVybCgjcGFpbnQwX2xpbmVhcilcIlxuICAgICAgICB9XG4gICAgICApLFxuICAgICAgLyogQF9fUFVSRV9fICovIGMoXG4gICAgICAgIFwicGF0aFwiLFxuICAgICAgICB7XG4gICAgICAgICAgc3R5bGU6IHsgbWl4QmxlbmRNb2RlOiBcIm11bHRpcGx5XCIgfSxcbiAgICAgICAgICBkOiBcIk0yMDEuNDAyIDE2OS4xNTFDMTg1LjgyNiAxODkuMzc0IDExMS4zMTggMTkwLjI3NCA2NS4yNjE5IDE5MC4wMTRDNTMuMTQ1MyAxODkuOTQ0IDQ2LjQwNTMgMTk0Ljc2NyA0Ny41OTkxIDIwMy43NDRDNDguNzkyOCAyMTIuNzIxIDU5LjU4NDUgMjE5LjU4OSA3Ny43NjkgMjIyLjk0NkMxMTIuMjk4IDIyOS4zMTIgMTQ1LjAyOCAyMjAuNzI1IDE3MS45ODUgMjAwLjU4NUMxODUuMTA2IDE5MC43ODIgMTk4LjY4OSAxNzIuODI1IDIwMS40MDIgMTY5LjE1OFYxNjkuMTUxWlwiLFxuICAgICAgICAgIGZpbGw6IFwidXJsKCNwYWludDFfbGluZWFyKVwiXG4gICAgICAgIH1cbiAgICAgICksXG4gICAgICAvKiBAX19QVVJFX18gKi8gYyhcbiAgICAgICAgXCJwYXRoXCIsXG4gICAgICAgIHtcbiAgICAgICAgICBzdHlsZTogeyBtaXhCbGVuZE1vZGU6IFwibXVsdGlwbHlcIiB9LFxuICAgICAgICAgIGQ6IFwiTTI1Ny4zNTQgNTguNDY5N0MyNDAuNTAxIDExMC41MTcgMTEuNTUzMyA2OS43MzgyIDAuMDE1OTMwMiAxMDguNzkyQzAuMDE1OTMwMiAxMDkuMDEgMC4wMTU5MzAyIDEwOS4xMzIgMC4wMTU5MzAyIDEwOS4xMzJDMC45NDA4MzcgMTI4Ljk3NCAxNC40Njg4IDE1Ny4yMzYgMTUuNTUwNSAxNTkuMzc3QzE1LjU4NjIgMTU5LjM0NCAxNS42MTk0IDE1OS4zMDcgMTUuNjQ5NyAxNTkuMjY5QzQwLjExOTggMTE5LjQ1IDIwMi4zOTEgMTQzLjU3NCAyMjQuMzQ2IDEzMS43NDVDMjI2LjY4NSAxMzAuNDkxIDI3MS4xMzggNzUuNDc2NSAyNTcuMzU0IDU4LjQ2OTdaXCIsXG4gICAgICAgICAgZmlsbDogXCJ1cmwoI3BhaW50Ml9saW5lYXIpXCJcbiAgICAgICAgfVxuICAgICAgKSxcbiAgICAgIC8qIEBfX1BVUkVfXyAqLyBjKFxuICAgICAgICBcInBhdGhcIixcbiAgICAgICAge1xuICAgICAgICAgIHN0eWxlOiB7IG1peEJsZW5kTW9kZTogXCJtdWx0aXBseVwiIH0sXG4gICAgICAgICAgZDogXCJNMjI0LjQ4NCAxMzEuNjU5QzIyNy45MyAxMjguOTQ1IDI3MC45NDMgNzUuMjM2NSAyNTcuMzU1IDU4LjQ2OTdDMjU3LjM1MyA1OC40NTM4IDI1Ny4zNTMgNTguNDM3NyAyNTcuMzU1IDU4LjQyMTdDMjU3LjI0OSA1OC4yMzE1IDI1Ny4xMiA1OC4wNTUyIDI1Ni45NyA1Ny44OTY5QzI0Ny4zMjggNDcuNzAwNSAyMDguOTMzIDM2LjQyODggMTY1LjQ4MiAzNC4zNTE3QzEyNS4zNzQgMzIuNDMxNSAxMDcuMTUyIDM4LjE5MjIgMTA0LjAzNCA1Ni4xMTQzQzEwMS41ODkgNzEuNDc2IDExOS4xMTggODIuNjkzMyAxNTAuNTYxIDkyLjAzNTJDMTgwLjI1MSAxMDAuODYyIDIzMi4wMjcgMTExLjcxNyAyMjQuNDg0IDEzMS42NTlaXCIsXG4gICAgICAgICAgZmlsbDogXCJ1cmwoI3BhaW50M19saW5lYXIpXCJcbiAgICAgICAgfVxuICAgICAgKSxcbiAgICAgIC8qIEBfX1BVUkVfXyAqLyBlMShcImRlZnNcIiwgeyBjaGlsZHJlbjogW1xuICAgICAgICAvKiBAX19QVVJFX18gKi8gZTEoXG4gICAgICAgICAgXCJsaW5lYXJHcmFkaWVudFwiLFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGlkOiBcInBhaW50MF9saW5lYXJcIixcbiAgICAgICAgICAgIHgxOiBcIjIyNS42NThcIixcbiAgICAgICAgICAgIHkxOiBcIjE1My4zMjVcIixcbiAgICAgICAgICAgIHgyOiBcIjg3LjM2NjlcIixcbiAgICAgICAgICAgIHkyOiBcIjE1My4zMjVcIixcbiAgICAgICAgICAgIGdyYWRpZW50VW5pdHM6IFwidXNlclNwYWNlT25Vc2VcIixcbiAgICAgICAgICAgIGNoaWxkcmVuOiBbXG4gICAgICAgICAgICAgIC8qIEBfX1BVUkVfXyAqLyBjKFwic3RvcFwiLCB7IG9mZnNldDogXCIwLjFcIiwgc3RvcENvbG9yOiBcIiM0Q0MyRjFcIiB9KSxcbiAgICAgICAgICAgICAgLyogQF9fUFVSRV9fICovIGMoXCJzdG9wXCIsIHsgb2Zmc2V0OiBcIjAuOTRcIiwgc3RvcENvbG9yOiBcIiMwMDU5QTZcIiB9KVxuICAgICAgICAgICAgXVxuICAgICAgICAgIH1cbiAgICAgICAgKSxcbiAgICAgICAgLyogQF9fUFVSRV9fICovIGUxKFxuICAgICAgICAgIFwibGluZWFyR3JhZGllbnRcIixcbiAgICAgICAgICB7XG4gICAgICAgICAgICBpZDogXCJwYWludDFfbGluZWFyXCIsXG4gICAgICAgICAgICB4MTogXCIyMDEuNDAyXCIsXG4gICAgICAgICAgICB5MTogXCIxOTcuMDc4XCIsXG4gICAgICAgICAgICB4MjogXCI0Ny40NjQ3XCIsXG4gICAgICAgICAgICB5MjogXCIxOTcuMDc4XCIsXG4gICAgICAgICAgICBncmFkaWVudFVuaXRzOiBcInVzZXJTcGFjZU9uVXNlXCIsXG4gICAgICAgICAgICBjaGlsZHJlbjogW1xuICAgICAgICAgICAgICAvKiBAX19QVVJFX18gKi8gYyhcInN0b3BcIiwgeyBvZmZzZXQ6IFwiMC4xOVwiLCBzdG9wQ29sb3I6IFwiIzAwNkI3RlwiIH0pLFxuICAgICAgICAgICAgICAvKiBAX19QVVJFX18gKi8gYyhcInN0b3BcIiwgeyBvZmZzZXQ6IFwiMC43M1wiLCBzdG9wQ29sb3I6IFwiIzcyQjUyQlwiIH0pXG4gICAgICAgICAgICBdXG4gICAgICAgICAgfVxuICAgICAgICApLFxuICAgICAgICAvKiBAX19QVVJFX18gKi8gZTEoXG4gICAgICAgICAgXCJsaW5lYXJHcmFkaWVudFwiLFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGlkOiBcInBhaW50Ml9saW5lYXJcIixcbiAgICAgICAgICAgIHgxOiBcIi0zLjQwODQ2XCIsXG4gICAgICAgICAgICB5MTogXCIxMDguOTE3XCIsXG4gICAgICAgICAgICB4MjogXCIyNjMuMzMzXCIsXG4gICAgICAgICAgICB5MjogXCIxMDguOTE3XCIsXG4gICAgICAgICAgICBncmFkaWVudFVuaXRzOiBcInVzZXJTcGFjZU9uVXNlXCIsXG4gICAgICAgICAgICBjaGlsZHJlbjogW1xuICAgICAgICAgICAgICAvKiBAX19QVVJFX18gKi8gYyhcInN0b3BcIiwgeyBvZmZzZXQ6IFwiMC4zM1wiLCBzdG9wQ29sb3I6IFwiIzkyMUM4MVwiIH0pLFxuICAgICAgICAgICAgICAvKiBAX19QVVJFX18gKi8gYyhcInN0b3BcIiwgeyBvZmZzZXQ6IFwiMVwiLCBzdG9wQ29sb3I6IFwiI0Y1QjNEMVwiIH0pXG4gICAgICAgICAgICBdXG4gICAgICAgICAgfVxuICAgICAgICApLFxuICAgICAgICAvKiBAX19QVVJFX18gKi8gZTEoXG4gICAgICAgICAgXCJsaW5lYXJHcmFkaWVudFwiLFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGlkOiBcInBhaW50M19saW5lYXJcIixcbiAgICAgICAgICAgIHgxOiBcIjEwMy44MjZcIixcbiAgICAgICAgICAgIHkxOiBcIjgyLjgyNzdcIixcbiAgICAgICAgICAgIHgyOiBcIjI2MC4wMDFcIixcbiAgICAgICAgICAgIHkyOiBcIjgyLjgyNzdcIixcbiAgICAgICAgICAgIGdyYWRpZW50VW5pdHM6IFwidXNlclNwYWNlT25Vc2VcIixcbiAgICAgICAgICAgIGNoaWxkcmVuOiBbXG4gICAgICAgICAgICAgIC8qIEBfX1BVUkVfXyAqLyBjKFwic3RvcFwiLCB7IHN0b3BDb2xvcjogXCIjRjU5QzAwXCIgfSksXG4gICAgICAgICAgICAgIC8qIEBfX1BVUkVfXyAqLyBjKFwic3RvcFwiLCB7IG9mZnNldDogXCIwLjU1XCIsIHN0b3BDb2xvcjogXCIjREMwRDE1XCIgfSlcbiAgICAgICAgICAgIF1cbiAgICAgICAgICB9XG4gICAgICAgIClcbiAgICAgIF0gfSlcbiAgICBdXG4gIH1cbiksIGpLID0gKCkgPT4gLyogQF9fUFVSRV9fICovIGUxKFxuICBcInN2Z1wiLFxuICB7XG4gICAgd2lkdGg6IFwiMjYwXCIsXG4gICAgaGVpZ2h0OiBcIjI2MFwiLFxuICAgIHZpZXdCb3g6IFwiMCAwIDI2MCAyNjBcIixcbiAgICBmaWxsOiBcIm5vbmVcIixcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIGNoaWxkcmVuOiBbXG4gICAgICAvKiBAX19QVVJFX18gKi8gYyhcbiAgICAgICAgXCJwYXRoXCIsXG4gICAgICAgIHtcbiAgICAgICAgICBzdHlsZTogeyBtaXhCbGVuZE1vZGU6IFwibXVsdGlwbHlcIiB9LFxuICAgICAgICAgIGQ6IFwiTTIyMy41MDMgMTQ5LjgyOEMyMTQuODYzIDE2MC42OCAyMDQuODk3IDE3MC40MDcgMTkzLjgzNiAxNzguNzc5QzE4NC41MjcgMTcxLjcwOCAxNzIuOTMxIDE2Ny41MDggMTYxLjk0MyAxNjMuODA3QzE0Ni4zODQgMTU4LjU1NiAxMzAuMzg1IDE1NC42MDYgMTE0LjMzNyAxNTEuMTM1Qzk2LjQ2MzMgMTQ3LjI3IDc4LjQzODYgMTQ0LjA4OCA2MC4zNTI0IDE0MS4zODlDNDIuODkwMyAxMzguNzgyIDEyLjc0OTcgMTM1LjY3NyA5LjU2MTYxIDEzMy4wMjFDNC44MTc5NCAxMjkuMDY3IC0xLjM1ODM3IDczLjc5NDEgMC4yNjQ4NzQgNzUuMzgwNEMxMi4yMTc4IDg3LjA2NTkgMjM3Ljc0MSAxMzMuNTUzIDIyMy41MDMgMTQ5LjgyOFpcIixcbiAgICAgICAgICBmaWxsOiBcInVybCgjcGFpbnQwX2xpbmVhcilcIlxuICAgICAgICB9XG4gICAgICApLFxuICAgICAgLyogQF9fUFVSRV9fICovIGMoXG4gICAgICAgIFwicGF0aFwiLFxuICAgICAgICB7XG4gICAgICAgICAgc3R5bGU6IHsgbWl4QmxlbmRNb2RlOiBcIm11bHRpcGx5XCIgfSxcbiAgICAgICAgICBkOiBcIk0xNDIuMDM0IDIwNS4xNTRDMTc0LjE4MyAxOTUuNDE2IDIwMi42MDIgMTc2LjExMyAyMjMuNTAzIDE0OS44MTZDMjAyLjg3OCAxNzEuMjIyIDEyMS4wOTIgMTcxLjUxNCA5OC4wMTg5IDE3MS4yNzJDNzAuNzg5NyAxNzEuMDA3IDUxLjY0OSAxNjguMTMzIDQ5LjY0NDYgMTgxLjk2N0M0Ni45NDUzIDIwMC42NTMgMTE0LjY3MyAyMTEuNjggMTQyLjAzNCAyMDUuMTU0WlwiLFxuICAgICAgICAgIGZpbGw6IFwidXJsKCNwYWludDFfbGluZWFyKVwiXG4gICAgICAgIH1cbiAgICAgICksXG4gICAgICAvKiBAX19QVVJFX18gKi8gYyhcbiAgICAgICAgXCJwYXRoXCIsXG4gICAgICAgIHtcbiAgICAgICAgICBzdHlsZTogeyBtaXhCbGVuZE1vZGU6IFwibXVsdGlwbHlcIiB9LFxuICAgICAgICAgIGQ6IFwiTTI1OS45OTYgNzUuMjMyOUMyNTkuNzUgNjAuNDM5MyAyNDYuOTMgNTEuMDcxOCAyMjMuMjQ4IDUxLjAwMTFDMTc0LjE4MiA1MC44NTk3IDE3LjEzMDYgNjQuMDM5MyAwLjIzMTA1MyA3NS40MTEyQzAuMjA2NDU5IDc1LjQyOTcgMC4xNzI2NDEgNzUuNDExMiAwLjEzMjY3NSA3NS40MTEyQy0wLjkyMTgxNiA3Ny4yNjgxIDQuNTkwNDQgMTI1Ljg2MSA5LjEwOTY4IDEzMi40OTVMOS41NjE2MSAxMzIuODQ2QzYuMzczNTQgMTI3LjcwOCAxNDQuMjY5IDExOC40NjQgMjIxLjE0NSAxMDUuMDY2QzI1MC44NjUgOTkuODgyOCAyNjAuMjM1IDg5LjUyODUgMjU5Ljk5NiA3NS4yMzI5WlwiLFxuICAgICAgICAgIGZpbGw6IFwidXJsKCNwYWludDJfbGluZWFyKVwiXG4gICAgICAgIH1cbiAgICAgICksXG4gICAgICAvKiBAX19QVVJFX18gKi8gZTEoXCJkZWZzXCIsIHsgY2hpbGRyZW46IFtcbiAgICAgICAgLyogQF9fUFVSRV9fICovIGUxKFxuICAgICAgICAgIFwibGluZWFyR3JhZGllbnRcIixcbiAgICAgICAgICB7XG4gICAgICAgICAgICBpZDogXCJwYWludDBfbGluZWFyXCIsXG4gICAgICAgICAgICB4MTogXCIwLjAwMDQ4MjUxNlwiLFxuICAgICAgICAgICAgeTE6IFwiMTI3LjA2M1wiLFxuICAgICAgICAgICAgeDI6IFwiMjI0LjE1NVwiLFxuICAgICAgICAgICAgeTI6IFwiMTI3LjA2M1wiLFxuICAgICAgICAgICAgZ3JhZGllbnRVbml0czogXCJ1c2VyU3BhY2VPblVzZVwiLFxuICAgICAgICAgICAgY2hpbGRyZW46IFtcbiAgICAgICAgICAgICAgLyogQF9fUFVSRV9fICovIGMoXCJzdG9wXCIsIHsgb2Zmc2V0OiBcIjAuMTlcIiwgc3RvcENvbG9yOiBcIiM4MzFGODJcIiB9KSxcbiAgICAgICAgICAgICAgLyogQF9fUFVSRV9fICovIGMoXCJzdG9wXCIsIHsgb2Zmc2V0OiBcIjAuMzJcIiwgc3RvcENvbG9yOiBcIiM4QTI0ODRcIiB9KSxcbiAgICAgICAgICAgICAgLyogQF9fUFVSRV9fICovIGMoXCJzdG9wXCIsIHsgb2Zmc2V0OiBcIjAuNTFcIiwgc3RvcENvbG9yOiBcIiM5RTMzOEJcIiB9KSxcbiAgICAgICAgICAgICAgLyogQF9fUFVSRV9fICovIGMoXCJzdG9wXCIsIHsgb2Zmc2V0OiBcIjAuNzNcIiwgc3RvcENvbG9yOiBcIiNCRTRCOTZcIiB9KSxcbiAgICAgICAgICAgICAgLyogQF9fUFVSRV9fICovIGMoXCJzdG9wXCIsIHsgb2Zmc2V0OiBcIjAuOThcIiwgc3RvcENvbG9yOiBcIiNFQTZCQTZcIiB9KSxcbiAgICAgICAgICAgICAgLyogQF9fUFVSRV9fICovIGMoXCJzdG9wXCIsIHsgb2Zmc2V0OiBcIjFcIiwgc3RvcENvbG9yOiBcIiNFRDZFQTdcIiB9KVxuICAgICAgICAgICAgXVxuICAgICAgICAgIH1cbiAgICAgICAgKSxcbiAgICAgICAgLyogQF9fUFVSRV9fICovIGUxKFxuICAgICAgICAgIFwibGluZWFyR3JhZGllbnRcIixcbiAgICAgICAgICB7XG4gICAgICAgICAgICBpZDogXCJwYWludDFfbGluZWFyXCIsXG4gICAgICAgICAgICB4MTogXCI0OS41Njc3XCIsXG4gICAgICAgICAgICB5MTogXCIxNzguNDM1XCIsXG4gICAgICAgICAgICB4MjogXCIyMjMuNTFcIixcbiAgICAgICAgICAgIHkyOiBcIjE3OC40MzVcIixcbiAgICAgICAgICAgIGdyYWRpZW50VW5pdHM6IFwidXNlclNwYWNlT25Vc2VcIixcbiAgICAgICAgICAgIGNoaWxkcmVuOiBbXG4gICAgICAgICAgICAgIC8qIEBfX1BVUkVfXyAqLyBjKFwic3RvcFwiLCB7IHN0b3BDb2xvcjogXCIjMDA5RkUzXCIsIHN0b3BPcGFjaXR5OiBcIjAuOVwiIH0pLFxuICAgICAgICAgICAgICAvKiBAX19QVVJFX18gKi8gYyhcInN0b3BcIiwgeyBvZmZzZXQ6IFwiMVwiLCBzdG9wQ29sb3I6IFwiIzAwNEE5QlwiIH0pXG4gICAgICAgICAgICBdXG4gICAgICAgICAgfVxuICAgICAgICApLFxuICAgICAgICAvKiBAX19QVVJFX18gKi8gZTEoXG4gICAgICAgICAgXCJsaW5lYXJHcmFkaWVudFwiLFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGlkOiBcInBhaW50Ml9saW5lYXJcIixcbiAgICAgICAgICAgIHgxOiBcIjc1LjAwNDZcIixcbiAgICAgICAgICAgIHkxOiBcIjkyLjM3NTNcIixcbiAgICAgICAgICAgIHgyOiBcIjE5NC4yNzlcIixcbiAgICAgICAgICAgIHkyOiBcIjkxLjAyODdcIixcbiAgICAgICAgICAgIGdyYWRpZW50VW5pdHM6IFwidXNlclNwYWNlT25Vc2VcIixcbiAgICAgICAgICAgIGNoaWxkcmVuOiBbXG4gICAgICAgICAgICAgIC8qIEBfX1BVUkVfXyAqLyBjKFwic3RvcFwiLCB7IHN0b3BDb2xvcjogXCIjRTc0MDExXCIgfSksXG4gICAgICAgICAgICAgIC8qIEBfX1BVUkVfXyAqLyBjKFwic3RvcFwiLCB7IG9mZnNldDogXCIxXCIsIHN0b3BDb2xvcjogXCIjRjlCMDAwXCIgfSlcbiAgICAgICAgICAgIF1cbiAgICAgICAgICB9XG4gICAgICAgIClcbiAgICAgIF0gfSlcbiAgICBdXG4gIH1cbiksIEtLID0gKCkgPT4gLyogQF9fUFVSRV9fICovIGUxKFxuICBcInN2Z1wiLFxuICB7XG4gICAgd2lkdGg6IFwiMjYwXCIsXG4gICAgaGVpZ2h0OiBcIjI2MFwiLFxuICAgIHZpZXdCb3g6IFwiMCAwIDI2MCAyNjBcIixcbiAgICBmaWxsOiBcIm5vbmVcIixcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIGNoaWxkcmVuOiBbXG4gICAgICAvKiBAX19QVVJFX18gKi8gYyhcbiAgICAgICAgXCJwYXRoXCIsXG4gICAgICAgIHtcbiAgICAgICAgICBzdHlsZTogeyBtaXhCbGVuZE1vZGU6IFwibXVsdGlwbHlcIiB9LFxuICAgICAgICAgIGQ6IFwiTTIyMy41MjggMjI4LjQ2NEMyMDEuMDY4IDIyNC40NzggMTY1LjQxNyAyMTYuNTA5IDE2OC44OTYgMTkxLjA3QzE3MS41NzQgMTcxLjQ4NSAyMDMuOTc5IDE2NS43NzUgMjE3LjUyIDE2Mi42MThDMjI4LjI3MSAxNjAuMTE4IDI1Ni45NDQgMTU2LjY2MyAyNTkuODU5IDE1Mi4wOTdDMjU5Ljg1OSAxNTIuMDk3IDI1OS44NTkgMTUyLjA5NyAyNTkuODU5IDE1Mi4xMjFDMjU5LjkwOCAxNTMuMjQ2IDI1OS45NDQgMTU0LjM3NiAyNTkuOTY4IDE1NS41MTJWMTU1LjcxM0MyNTkuOTkyIDE1Ni43OCAyNjAgMTU3Ljg1MSAyNjAgMTU4LjkzNEMyNjAgMTgzLjQxNSAyNTQuNDk2IDIwNi4zMzggMjQ0LjkwMSAyMjYuMDA4QzI0NC43NzYgMjI2LjI1MyAyNDQuNjUxIDIyNi41MDMgMjQ0LjUyMiAyMjYuNzQ5QzI0My4zNjMgMjI4Ljk4NyAyMzUuNTk1IDIzMC42MDYgMjIzLjUyOCAyMjguNDY0WlwiLFxuICAgICAgICAgIGZpbGw6IFwidXJsKCNwYWludDBfbGluZWFyKVwiXG4gICAgICAgIH1cbiAgICAgICksXG4gICAgICAvKiBAX19QVVJFX18gKi8gYyhcbiAgICAgICAgXCJwYXRoXCIsXG4gICAgICAgIHtcbiAgICAgICAgICBzdHlsZTogeyBtaXhCbGVuZE1vZGU6IFwibXVsdGlwbHlcIiB9LFxuICAgICAgICAgIGQ6IFwiTTI1OS45NjggMTU1LjcxM1YxNTUuNTEyQzI1OS45NjggMTU0LjczNCAyNTkuOTI3IDE1My45NTcgMjU5Ljg5OSAxNTMuMTg0QzI1OS45MyAxNTIuODM5IDI1OS45MTggMTUyLjQ5MiAyNTkuODYzIDE1Mi4xNDlDMjU1LjUzOSAxMzguMTczIDE5MC4zNDEgMTIxLjU0OCAxNDYuNTQ1IDExMy4yNjVDOTEuMTcyMyAxMDIuODEzIDcuNzM4ODUgOTEuOCAxMS42NzY4IDcwLjI2MjJDOC41ODg0NCA3NS4yMTQ4IDQuMzgwNzMgODQuNzU3NyAzLjMwOTY4IDkwLjU1OTlDLTIuNTY5MDMgMTIyLjUzIDMuMzU4IDEzMC41MzkgNy44MjM0IDEzNC4xNTVMOC4wNjA5NyAxMzQuMzQ4QzU2LjI2MjQgMTU2LjYzNSAyNzMuNDA4IDE2MS43MjkgMjQ0LjMyMSAyMjYuOTU4TDI0NC4yOTcgMjI3LjAxNEMyNDQuMzgxIDIyNi45MjUgMjQ0LjQ1NiAyMjYuODI3IDI0NC41MTggMjI2LjcyTDI0NC44OTcgMjI1Ljk4QzI1NC40OTIgMjA2LjMxIDI1OS45OTYgMTgzLjM4NyAyNTkuOTk2IDE1OC45MDZDMjYwIDE1Ny44MzUgMjU5Ljk5MiAxNTYuNzggMjU5Ljk2OCAxNTUuNzEzWlwiLFxuICAgICAgICAgIGZpbGw6IFwidXJsKCNwYWludDFfbGluZWFyKVwiXG4gICAgICAgIH1cbiAgICAgICksXG4gICAgICAvKiBAX19QVVJFX18gKi8gYyhcbiAgICAgICAgXCJwYXRoXCIsXG4gICAgICAgIHtcbiAgICAgICAgICBzdHlsZTogeyBtaXhCbGVuZE1vZGU6IFwibXVsdGlwbHlcIiB9LFxuICAgICAgICAgIGQ6IFwiTTI1Ni4yNTEgNjQuMjU4N0MyNTIuMTMyIDQ0Ljc3NDQgMjIyLjA0NiAzNi45NzkgMTg2Ljg5NSAzMy40NjM5Qzg3LjY4MTMgMjMuNTQyNSAzNC4wMzYgNDUuMjY1NiAxMi43NjQgNjguNjAzM0M5LjEwMzg2IDczLjk3MDYgNS4wNjEyNCA4My41ODU5IDMuMzEzNzMgOTAuNTU5OUMtNC4zOTcwNSAxMjEuMzYzIDMuMTg4OTEgMTI5Ljk2NyA3LjUxNzQxIDEzMy44ODlDNS40NzU5NyAxMzEuMTgzIDUuMTc4MDEgMTI4Ljk2MSA0Ljk0MDQ0IDEyNi40MzJDMi4yNzA4NiA5OC40MzU3IDEwNC42MDUgODEuOTk1NSAyMTMuMTQzIDEwMi45NTdDMjUyLjk2MiAxMTAuNjUyIDI2MC4zNzQgODMuNzQ3IDI1Ni4yNTEgNjQuMjU4N1pcIixcbiAgICAgICAgICBmaWxsOiBcInVybCgjcGFpbnQyX2xpbmVhcilcIlxuICAgICAgICB9XG4gICAgICApLFxuICAgICAgLyogQF9fUFVSRV9fICovIGUxKFwiZGVmc1wiLCB7IGNoaWxkcmVuOiBbXG4gICAgICAgIC8qIEBfX1BVUkVfXyAqLyBlMShcbiAgICAgICAgICBcImxpbmVhckdyYWRpZW50XCIsXG4gICAgICAgICAge1xuICAgICAgICAgICAgaWQ6IFwicGFpbnQwX2xpbmVhclwiLFxuICAgICAgICAgICAgeDE6IFwiMTY4LjY1OVwiLFxuICAgICAgICAgICAgeTE6IFwiMTkwLjc4XCIsXG4gICAgICAgICAgICB4MjogXCIyNjUuMTk4XCIsXG4gICAgICAgICAgICB5MjogXCIxOTAuNzhcIixcbiAgICAgICAgICAgIGdyYWRpZW50VW5pdHM6IFwidXNlclNwYWNlT25Vc2VcIixcbiAgICAgICAgICAgIGNoaWxkcmVuOiBbXG4gICAgICAgICAgICAgIC8qIEBfX1BVUkVfXyAqLyBjKFwic3RvcFwiLCB7IHN0b3BDb2xvcjogXCIjQkNDRjAwXCIsIHN0b3BPcGFjaXR5OiBcIjAuOVwiIH0pLFxuICAgICAgICAgICAgICAvKiBAX19QVVJFX18gKi8gYyhcInN0b3BcIiwgeyBvZmZzZXQ6IFwiMVwiLCBzdG9wQ29sb3I6IFwiIzAwNzYzOFwiIH0pXG4gICAgICAgICAgICBdXG4gICAgICAgICAgfVxuICAgICAgICApLFxuICAgICAgICAvKiBAX19QVVJFX18gKi8gZTEoXG4gICAgICAgICAgXCJsaW5lYXJHcmFkaWVudFwiLFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGlkOiBcInBhaW50MV9saW5lYXJcIixcbiAgICAgICAgICAgIHgxOiBcIjIwLjgxN1wiLFxuICAgICAgICAgICAgeTE6IFwiMTQ4LjY0NlwiLFxuICAgICAgICAgICAgeDI6IFwiMjE3LjQ2NFwiLFxuICAgICAgICAgICAgeTI6IFwiMTQ4LjY0NlwiLFxuICAgICAgICAgICAgZ3JhZGllbnRVbml0czogXCJ1c2VyU3BhY2VPblVzZVwiLFxuICAgICAgICAgICAgY2hpbGRyZW46IFtcbiAgICAgICAgICAgICAgLyogQF9fUFVSRV9fICovIGMoXCJzdG9wXCIsIHsgc3RvcENvbG9yOiBcIiM4MTIxODJcIiB9KSxcbiAgICAgICAgICAgICAgLyogQF9fUFVSRV9fICovIGMoXCJzdG9wXCIsIHsgb2Zmc2V0OiBcIjAuNTlcIiwgc3RvcENvbG9yOiBcIiNFNDMyOEFcIiB9KVxuICAgICAgICAgICAgXVxuICAgICAgICAgIH1cbiAgICAgICAgKSxcbiAgICAgICAgLyogQF9fUFVSRV9fICovIGUxKFxuICAgICAgICAgIFwibGluZWFyR3JhZGllbnRcIixcbiAgICAgICAgICB7XG4gICAgICAgICAgICBpZDogXCJwYWludDJfbGluZWFyXCIsXG4gICAgICAgICAgICB4MTogXCI4LjE2NTY4XCIsXG4gICAgICAgICAgICB5MTogXCI4Mi40NDI0XCIsXG4gICAgICAgICAgICB4MjogXCIyNjQuNDQxXCIsXG4gICAgICAgICAgICB5MjogXCI4Mi40NDI0XCIsXG4gICAgICAgICAgICBncmFkaWVudFVuaXRzOiBcInVzZXJTcGFjZU9uVXNlXCIsXG4gICAgICAgICAgICBjaGlsZHJlbjogW1xuICAgICAgICAgICAgICAvKiBAX19QVVJFX18gKi8gYyhcInN0b3BcIiwgeyBzdG9wQ29sb3I6IFwiIzMxMjc4M1wiIH0pLFxuICAgICAgICAgICAgICAvKiBAX19QVVJFX18gKi8gYyhcInN0b3BcIiwgeyBvZmZzZXQ6IFwiMC4xNVwiLCBzdG9wQ29sb3I6IFwiIzJFMkU4OVwiIH0pLFxuICAgICAgICAgICAgICAvKiBAX19QVVJFX18gKi8gYyhcInN0b3BcIiwgeyBvZmZzZXQ6IFwiMC4zNlwiLCBzdG9wQ29sb3I6IFwiIzI2NDI5OFwiIH0pLFxuICAgICAgICAgICAgICAvKiBAX19QVVJFX18gKi8gYyhcInN0b3BcIiwgeyBvZmZzZXQ6IFwiMC42MlwiLCBzdG9wQ29sb3I6IFwiIzE5NjJCMlwiIH0pLFxuICAgICAgICAgICAgICAvKiBAX19QVVJFX18gKi8gYyhcInN0b3BcIiwgeyBvZmZzZXQ6IFwiMC45XCIsIHN0b3BDb2xvcjogXCIjMDc4RUQ1XCIgfSksXG4gICAgICAgICAgICAgIC8qIEBfX1BVUkVfXyAqLyBjKFwic3RvcFwiLCB7IG9mZnNldDogXCIxXCIsIHN0b3BDb2xvcjogXCIjMDA5RkUzXCIgfSlcbiAgICAgICAgICAgIF1cbiAgICAgICAgICB9XG4gICAgICAgIClcbiAgICAgIF0gfSlcbiAgICBdXG4gIH1cbiksIEpLID0gKCkgPT4gLyogQF9fUFVSRV9fICovIGUxKFxuICBcInN2Z1wiLFxuICB7XG4gICAgd2lkdGg6IFwiMjYwXCIsXG4gICAgaGVpZ2h0OiBcIjI2MFwiLFxuICAgIHZpZXdCb3g6IFwiMCAwIDI2MCAyNjBcIixcbiAgICBmaWxsOiBcIm5vbmVcIixcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIGNoaWxkcmVuOiBbXG4gICAgICAvKiBAX19QVVJFX18gKi8gYyhcbiAgICAgICAgXCJwYXRoXCIsXG4gICAgICAgIHtcbiAgICAgICAgICBzdHlsZTogeyBtaXhCbGVuZE1vZGU6IFwibXVsdGlwbHlcIiB9LFxuICAgICAgICAgIGQ6IFwiTTk3LjY2NjkgODAuOTkzOUMxMDIuNzA4IDk3LjAzNDIgMTI0LjEyMSA5NS4yNjYyIDE0Ny4wMiA5My4zODk3QzE3NS4wMjIgOTEuMDg5NCAyMzguOTk2IDkxLjAwNzIgMjU4LjU5OSAxMTQuNDIyTDI1Ny44MiAxMTMuMzQ0QzIzOS45MjQgODguODQ3OSAyMTYuMDE1IDY5LjM4IDE4OC40MDEgNTYuODIwMkMxNjcuNDQ4IDQ4LjM5NzUgMTQ0Ljk1MyA1MC40NjQ1IDEzMC4wMzMgNTQuNTk1NEMxMTUuMTE0IDU4LjcyNjIgOTIuNjE2IDY0LjkyNDEgOTcuNjY2OSA4MC45OTM5WlwiLFxuICAgICAgICAgIGZpbGw6IFwidXJsKCNwYWludDBfbGluZWFyKVwiXG4gICAgICAgIH1cbiAgICAgICksXG4gICAgICAvKiBAX19QVVJFX18gKi8gYyhcbiAgICAgICAgXCJwYXRoXCIsXG4gICAgICAgIHtcbiAgICAgICAgICBzdHlsZTogeyBtaXhCbGVuZE1vZGU6IFwibXVsdGlwbHlcIiB9LFxuICAgICAgICAgIGQ6IFwiTTExLjgyOTggMTMwLjYxN0M3LjY0MzA2IDEzMS40NDUgLTIuODA3MjcgMTczLjkwNyAwLjcxMjMxOSAxNzguMTI2QzAuNzEyMzE5IDE3OC4xMjYgMTguMjIxNSAxODAuMDE5IDUxLjk3ODEgMTc3LjI1NkMxNjMuNzI4IDE2OC4xMDMgMjczLjY2NiAxNDAuMTIxIDI1OC42MTIgMTE0LjQyOUMyNTguMzU2IDExNC4wNzQgMjU4LjA5OSAxMTMuNzE2IDI1Ny44MzYgMTEzLjM1N0MyNTAuMTgyIDEwMi44ODUgMjQxLjM5OSA5My4yODc3IDIzMS42NDUgODQuNzM3M0MyMTEuMzA2IDEzMy4zNDQgMTYuODExNyAxMzAuNjE3IDExLjgyOTggMTMwLjYxN1pcIixcbiAgICAgICAgICBmaWxsOiBcInVybCgjcGFpbnQxX2xpbmVhcilcIlxuICAgICAgICB9XG4gICAgICApLFxuICAgICAgLyogQF9fUFVSRV9fICovIGMoXG4gICAgICAgIFwicGF0aFwiLFxuICAgICAgICB7XG4gICAgICAgICAgc3R5bGU6IHsgbWl4QmxlbmRNb2RlOiBcIm11bHRpcGx5XCIgfSxcbiAgICAgICAgICBkOiBcIk0yMDcuODM2IDE3MS4zMTdDMjA1LjEzOCAxNDguMTU5IDE3Mi40OTIgMTUxLjAwMSAxMjcuMjQ3IDE0Ni42MTFDMTAyLjI3MSAxNDQuMTg2IDM0LjEyNzEgMTM4Ljc3IDExLjYyNiAxMzAuNjg5QzcuNDc1NDggMTMyLjcxMyAtMS45OTg4MyAxNzAuOTEgMC4zNzcxNCAxNzcuNDk5TDAuNjc2MTkxIDE3OC4wNzdMMC43MTIzNCAxNzguMTI2VjE3OC4xNDZMMC43NDg0ODggMTc4LjIxOEMxMy42NTM3IDIwMi44MjYgMTI0LjY2NyAyMTQuNjMgMTY1LjY0MyAyMDYuODg0QzE5NC4wNDMgMjAxLjUxMSAyMDkuNTQ4IDE4Ni4wMjYgMjA3LjgzNiAxNzEuMzE3WlwiLFxuICAgICAgICAgIGZpbGw6IFwidXJsKCNwYWludDJfbGluZWFyKVwiXG4gICAgICAgIH1cbiAgICAgICksXG4gICAgICAvKiBAX19QVVJFX18gKi8gZTEoXCJkZWZzXCIsIHsgY2hpbGRyZW46IFtcbiAgICAgICAgLyogQF9fUFVSRV9fICovIGUxKFxuICAgICAgICAgIFwibGluZWFyR3JhZGllbnRcIixcbiAgICAgICAgICB7XG4gICAgICAgICAgICBpZDogXCJwYWludDBfbGluZWFyXCIsXG4gICAgICAgICAgICB4MTogXCI5Ni45NDA3XCIsXG4gICAgICAgICAgICB5MTogXCI4Mi43MTI3XCIsXG4gICAgICAgICAgICB4MjogXCIyNTguNTk5XCIsXG4gICAgICAgICAgICB5MjogXCI4Mi43MTI3XCIsXG4gICAgICAgICAgICBncmFkaWVudFVuaXRzOiBcInVzZXJTcGFjZU9uVXNlXCIsXG4gICAgICAgICAgICBjaGlsZHJlbjogW1xuICAgICAgICAgICAgICAvKiBAX19QVVJFX18gKi8gYyhcInN0b3BcIiwgeyBzdG9wQ29sb3I6IFwiI0YzQTNDN1wiIH0pLFxuICAgICAgICAgICAgICAvKiBAX19QVVJFX18gKi8gYyhcInN0b3BcIiwgeyBvZmZzZXQ6IFwiMVwiLCBzdG9wQ29sb3I6IFwiIzg3MUY4MlwiIH0pXG4gICAgICAgICAgICBdXG4gICAgICAgICAgfVxuICAgICAgICApLFxuICAgICAgICAvKiBAX19QVVJFX18gKi8gZTEoXG4gICAgICAgICAgXCJsaW5lYXJHcmFkaWVudFwiLFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGlkOiBcInBhaW50MV9saW5lYXJcIixcbiAgICAgICAgICAgIHgxOiBcIi0wLjAwMDgwMDQwM1wiLFxuICAgICAgICAgICAgeTE6IFwiMTMxLjc0N1wiLFxuICAgICAgICAgICAgeDI6IFwiMjU5Ljk4OVwiLFxuICAgICAgICAgICAgeTI6IFwiMTMxLjc0N1wiLFxuICAgICAgICAgICAgZ3JhZGllbnRVbml0czogXCJ1c2VyU3BhY2VPblVzZVwiLFxuICAgICAgICAgICAgY2hpbGRyZW46IFtcbiAgICAgICAgICAgICAgLyogQF9fUFVSRV9fICovIGMoXCJzdG9wXCIsIHsgb2Zmc2V0OiBcIjAuMjdcIiwgc3RvcENvbG9yOiBcIiMxQzQxODBcIiB9KSxcbiAgICAgICAgICAgICAgLyogQF9fUFVSRV9fICovIGMoXCJzdG9wXCIsIHsgb2Zmc2V0OiBcIjFcIiwgc3RvcENvbG9yOiBcIiMwMEE3RTdcIiB9KVxuICAgICAgICAgICAgXVxuICAgICAgICAgIH1cbiAgICAgICAgKSxcbiAgICAgICAgLyogQF9fUFVSRV9fICovIGUxKFxuICAgICAgICAgIFwibGluZWFyR3JhZGllbnRcIixcbiAgICAgICAgICB7XG4gICAgICAgICAgICBpZDogXCJwYWludDJfbGluZWFyXCIsXG4gICAgICAgICAgICB4MTogXCIxNy4wNDE4XCIsXG4gICAgICAgICAgICB5MTogXCIyMDguOTQ1XCIsXG4gICAgICAgICAgICB4MjogXCIxODIuNzk4XCIsXG4gICAgICAgICAgICB5MjogXCIxMjEuMDRcIixcbiAgICAgICAgICAgIGdyYWRpZW50VW5pdHM6IFwidXNlclNwYWNlT25Vc2VcIixcbiAgICAgICAgICAgIGNoaWxkcmVuOiBbXG4gICAgICAgICAgICAgIC8qIEBfX1BVUkVfXyAqLyBjKFwic3RvcFwiLCB7IG9mZnNldDogXCIwLjRcIiwgc3RvcENvbG9yOiBcIiMwMDY5M0FcIiB9KSxcbiAgICAgICAgICAgICAgLyogQF9fUFVSRV9fICovIGMoXCJzdG9wXCIsIHsgb2Zmc2V0OiBcIjAuNTJcIiwgc3RvcENvbG9yOiBcIiMxRjdDMzRcIiB9KSxcbiAgICAgICAgICAgICAgLyogQF9fUFVSRV9fICovIGMoXCJzdG9wXCIsIHsgb2Zmc2V0OiBcIjAuODVcIiwgc3RvcENvbG9yOiBcIiM3NEFEMjVcIiB9KSxcbiAgICAgICAgICAgICAgLyogQF9fUFVSRV9fICovIGMoXCJzdG9wXCIsIHsgb2Zmc2V0OiBcIjFcIiwgc3RvcENvbG9yOiBcIiM5NUMxMUZcIiB9KVxuICAgICAgICAgICAgXVxuICAgICAgICAgIH1cbiAgICAgICAgKVxuICAgICAgXSB9KVxuICAgIF1cbiAgfVxuKSwgX0sgPSAoKSA9PiAvKiBAX19QVVJFX18gKi8gZTEoXG4gIFwic3ZnXCIsXG4gIHtcbiAgICB3aWR0aDogXCIyNjBcIixcbiAgICBoZWlnaHQ6IFwiMjYwXCIsXG4gICAgdmlld0JveDogXCIwIDAgMjYwIDI2MFwiLFxuICAgIGZpbGw6IFwibm9uZVwiLFxuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgY2hpbGRyZW46IFtcbiAgICAgIC8qIEBfX1BVUkVfXyAqLyBjKFxuICAgICAgICBcInBhdGhcIixcbiAgICAgICAge1xuICAgICAgICAgIHN0eWxlOiB7IG1peEJsZW5kTW9kZTogXCJtdWx0aXBseVwiIH0sXG4gICAgICAgICAgZDogXCJNMjU5LjMgMTI2Ljk4MUMyNTQuMjc2IDEzOC4wNjEgMjQ3Ljg4MyAxNDguNDY4IDI0MC4yNzIgMTU3Ljk2QzE5Ny43NTQgMTM5LjgxMSAzNC4xMDEzIDE3OC40MDcgMjYuNzI3IDE3My4xODFDMjQuMzk3NyAxNzAuNjE1IDIxLjI1NDMgMTY3LjI1NiAxOS4wNTE2IDE2NC41OTJDMTEuNDMxIDE1NC4zMzEgMTEuMjg3MyAxNTQuMTI5IDguMDEwNTYgMTQ4LjIyMkMyLjI5MTY2IDEzNi43MDYgMi4xNzg3OSAxMzYuNDg3IDAgMTMwLjAzNkMwIDEzMC4wMzYgMzMuOTY0NSAxMjEuMzU1IDY0LjA2MDYgMTE2LjI3NUMxOTYuNjQ1IDkzLjg5NTggMjY3LjkxNiAxMTAuMDkxIDI1OS4zIDEyNi45ODFaXCIsXG4gICAgICAgICAgZmlsbDogXCJ1cmwoI3BhaW50MF9saW5lYXIpXCJcbiAgICAgICAgfVxuICAgICAgKSxcbiAgICAgIC8qIEBfX1BVUkVfXyAqLyBjKFxuICAgICAgICBcInBhdGhcIixcbiAgICAgICAge1xuICAgICAgICAgIHN0eWxlOiB7IG1peEJsZW5kTW9kZTogXCJtdWx0aXBseVwiIH0sXG4gICAgICAgICAgZDogXCJNMjAxLjg1NSAxOTEuNDlDMjI3LjEyIDE3Ni4zMjYgMjQ3LjE2NCAxNTMuODI0IDI1OS4zMTcgMTI2Ljk4MUMyNDYuMzU0IDE0OS41OTcgMTc2Ljg1NSAxNjcuMzQyIDE1Ny4xODEgMTcyLjEwM0MxMzMuOTcgMTc3LjcxMiAxMTcuMDcgMTc5LjM1NyAxMTguMzM1IDE5MS41NzJDMTIwLjAyMiAyMDguMDM0IDE3OS45OTUgMjAyLjkgMjAxLjg1NSAxOTEuNDlaXCIsXG4gICAgICAgICAgZmlsbDogXCJ1cmwoI3BhaW50MV9saW5lYXIpXCJcbiAgICAgICAgfVxuICAgICAgKSxcbiAgICAgIC8qIEBfX1BVUkVfXyAqLyBjKFxuICAgICAgICBcInBhdGhcIixcbiAgICAgICAge1xuICAgICAgICAgIHN0eWxlOiB7IG1peEJsZW5kTW9kZTogXCJtdWx0aXBseVwiIH0sXG4gICAgICAgICAgZDogXCJNMjM3LjY4IDkwLjEzMzJDMjI5LjczMSA5Ni41MTIzIDIxNi44NiA5Ny4zNzA4IDIwNy4xMTUgOTkuNTExOUMxNzQuMjI1IDEwNi43MjkgMTQxLjQ0NCAxMTMuMjMxIDEwOS4xMTcgMTIyLjg2NkM0NC4yODM4IDE0Mi4xOTggMjMuMjU4NyAxNjUuMjkgMjYuNzI3IDE3My4xOEMyNC4zOTc3IDE3MC42MTUgMjEuMjU0MyAxNjcuMjU2IDE5LjA1MTYgMTY0LjU5MkMxMS40MzEgMTU0LjMzMSAxMS4yODczIDE1NC4xMjkgOC4wMTA1NiAxNDguMjIyQzIuMjkxNjYgMTM2LjcwNSAyLjE3ODc5IDEzNi40ODYgMCAxMzAuMDM2QzAgMTMwLjAzNiAxMi4yNjIxIDExMy4wODQgNTIuNzI4OCA5Mi4zNjMzQzk4LjkxNDQgNjguNzE0NyAxNTAuNzk4IDU4LjY4MjcgMjAyLjQxNiA1OS4wMDc2QzIxMS40MDQgNTkuMDY1OCAyMjEuMzYxIDU5LjQyMTUgMjI5Ljc0MSA2Mi45ODIxQzI0MC4zNTUgNjcuNDkzNiAyNDguNzg2IDgxLjIxMjggMjM3LjY4IDkwLjEzMzJaXCIsXG4gICAgICAgICAgZmlsbDogXCJ1cmwoI3BhaW50Ml9saW5lYXIpXCJcbiAgICAgICAgfVxuICAgICAgKSxcbiAgICAgIC8qIEBfX1BVUkVfXyAqLyBlMShcImRlZnNcIiwgeyBjaGlsZHJlbjogW1xuICAgICAgICAvKiBAX19QVVJFX18gKi8gZTEoXG4gICAgICAgICAgXCJsaW5lYXJHcmFkaWVudFwiLFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGlkOiBcInBhaW50MF9saW5lYXJcIixcbiAgICAgICAgICAgIHgxOiBcIjEwLjQ4MDFcIixcbiAgICAgICAgICAgIHkxOiBcIjE3MS42MjNcIixcbiAgICAgICAgICAgIHgyOiBcIjI1Ni40OTRcIixcbiAgICAgICAgICAgIHkyOiBcIjEwOS42NDZcIixcbiAgICAgICAgICAgIGdyYWRpZW50VW5pdHM6IFwidXNlclNwYWNlT25Vc2VcIixcbiAgICAgICAgICAgIGNoaWxkcmVuOiBbXG4gICAgICAgICAgICAgIC8qIEBfX1BVUkVfXyAqLyBjKFwic3RvcFwiLCB7IHN0b3BDb2xvcjogXCIjNzZCODJBXCIgfSksXG4gICAgICAgICAgICAgIC8qIEBfX1BVUkVfXyAqLyBjKFwic3RvcFwiLCB7IG9mZnNldDogXCIwLjIxXCIsIHN0b3BDb2xvcjogXCIjOUJDNDEzXCIgfSksXG4gICAgICAgICAgICAgIC8qIEBfX1BVUkVfXyAqLyBjKFwic3RvcFwiLCB7IG9mZnNldDogXCIwLjM4XCIsIHN0b3BDb2xvcjogXCIjQjZDRDAzXCIgfSksXG4gICAgICAgICAgICAgIC8qIEBfX1BVUkVfXyAqLyBjKFwic3RvcFwiLCB7IG9mZnNldDogXCIwLjQ4XCIsIHN0b3BDb2xvcjogXCIjOUZDNTEzXCIgfSksXG4gICAgICAgICAgICAgIC8qIEBfX1BVUkVfXyAqLyBjKFwic3RvcFwiLCB7IG9mZnNldDogXCIwLjZcIiwgc3RvcENvbG9yOiBcIiM4M0JCMjZcIiB9KSxcbiAgICAgICAgICAgICAgLyogQF9fUFVSRV9fICovIGMoXCJzdG9wXCIsIHsgb2Zmc2V0OiBcIjAuNzNcIiwgc3RvcENvbG9yOiBcIiM0RkFDMzBcIiB9KSxcbiAgICAgICAgICAgICAgLyogQF9fUFVSRV9fICovIGMoXCJzdG9wXCIsIHsgb2Zmc2V0OiBcIjAuODVcIiwgc3RvcENvbG9yOiBcIiMyNEEwMzlcIiB9KSxcbiAgICAgICAgICAgICAgLyogQF9fUFVSRV9fICovIGMoXCJzdG9wXCIsIHsgb2Zmc2V0OiBcIjAuOTRcIiwgc3RvcENvbG9yOiBcIiMwQTk5M0VcIiB9KSxcbiAgICAgICAgICAgICAgLyogQF9fUFVSRV9fICovIGMoXCJzdG9wXCIsIHsgb2Zmc2V0OiBcIjFcIiwgc3RvcENvbG9yOiBcIiMwMDk2NDBcIiB9KVxuICAgICAgICAgICAgXVxuICAgICAgICAgIH1cbiAgICAgICAgKSxcbiAgICAgICAgLyogQF9fUFVSRV9fICovIGUxKFxuICAgICAgICAgIFwibGluZWFyR3JhZGllbnRcIixcbiAgICAgICAgICB7XG4gICAgICAgICAgICBpZDogXCJwYWludDFfbGluZWFyXCIsXG4gICAgICAgICAgICB4MTogXCIxMTcuNDk3XCIsXG4gICAgICAgICAgICB5MTogXCIxODguNTc3XCIsXG4gICAgICAgICAgICB4MjogXCIyNjUuNDMxXCIsXG4gICAgICAgICAgICB5MjogXCIxNTEuMzA5XCIsXG4gICAgICAgICAgICBncmFkaWVudFVuaXRzOiBcInVzZXJTcGFjZU9uVXNlXCIsXG4gICAgICAgICAgICBjaGlsZHJlbjogW1xuICAgICAgICAgICAgICAvKiBAX19QVVJFX18gKi8gYyhcInN0b3BcIiwgeyBzdG9wQ29sb3I6IFwiI0ZGQ0EwMFwiIH0pLFxuICAgICAgICAgICAgICAvKiBAX19QVVJFX18gKi8gYyhcInN0b3BcIiwgeyBvZmZzZXQ6IFwiMVwiLCBzdG9wQ29sb3I6IFwiI0YxODUwMFwiIH0pXG4gICAgICAgICAgICBdXG4gICAgICAgICAgfVxuICAgICAgICApLFxuICAgICAgICAvKiBAX19QVVJFX18gKi8gZTEoXG4gICAgICAgICAgXCJsaW5lYXJHcmFkaWVudFwiLFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGlkOiBcInBhaW50Ml9saW5lYXJcIixcbiAgICAgICAgICAgIHgxOiBcIjIuMTMxXCIsXG4gICAgICAgICAgICB5MTogXCIxMzguNDgyXCIsXG4gICAgICAgICAgICB4MjogXCIyNDIuNzUyXCIsXG4gICAgICAgICAgICB5MjogXCI3Ny44NjMzXCIsXG4gICAgICAgICAgICBncmFkaWVudFVuaXRzOiBcInVzZXJTcGFjZU9uVXNlXCIsXG4gICAgICAgICAgICBjaGlsZHJlbjogW1xuICAgICAgICAgICAgICAvKiBAX19QVVJFX18gKi8gYyhcInN0b3BcIiwgeyBzdG9wQ29sb3I6IFwiIzAwOENDRVwiLCBzdG9wT3BhY2l0eTogXCIwLjlcIiB9KSxcbiAgICAgICAgICAgICAgLyogQF9fUFVSRV9fICovIGMoXCJzdG9wXCIsIHsgb2Zmc2V0OiBcIjFcIiwgc3RvcENvbG9yOiBcIiMwMDRBOUJcIiB9KVxuICAgICAgICAgICAgXVxuICAgICAgICAgIH1cbiAgICAgICAgKVxuICAgICAgXSB9KVxuICAgIF1cbiAgfVxuKSwgJEsgPSAoKSA9PiAvKiBAX19QVVJFX18gKi8gZTEoXG4gIFwic3ZnXCIsXG4gIHtcbiAgICB3aWR0aDogXCIyNjBcIixcbiAgICBoZWlnaHQ6IFwiMjYwXCIsXG4gICAgdmlld0JveDogXCIwIDAgMjYwIDI2MFwiLFxuICAgIGZpbGw6IFwibm9uZVwiLFxuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgY2hpbGRyZW46IFtcbiAgICAgIC8qIEBfX1BVUkVfXyAqLyBjKFxuICAgICAgICBcInBhdGhcIixcbiAgICAgICAge1xuICAgICAgICAgIHN0eWxlOiB7IG1peEJsZW5kTW9kZTogXCJtdWx0aXBseVwiIH0sXG4gICAgICAgICAgZDogXCJNMjU5LjI3OCAzMC43MTc0QzIzNi4xOTkgMjIuOTY4NSAyMTIuODMyIDQwLjI1MjYgMTk1LjY4NiA1My42MzY3QzE0Ni4xMTkgOTIuMjgzIDEwNC40MzggMTQ2LjA2MyA4Ni41NjEgMjA2Ljg5OEM4Mi4yOTAxIDIyMS40NSA4MC42MTY2IDIzNi40MTYgNzkuMjg1MSAyNTEuNDkyQzc4Ljc4MyAyNTcuMTQ5IDI2LjE0MTQgMjUzLjA5NiAyNS40NDI5IDI0NS42NzFDMjQuOTI5OSAyNDAuMzgyIDI1LjIxMzcgMjI3LjgwMiAyNi4xNzA1IDIyMC42NkMzNC45MjM1IDE1NC4wNjcgNjguNzg1OSAxMDAuMTM3IDEwOC44NzYgNDguMzU0M0MxMTcuOTMxIDM2LjY2MTkgMTM0LjczMiAxOC42NzkzIDE0Ni42NSA5Ljc2OTg4QzE0Ny45MjYgOC43NDk2OCAxNDkuMzA1IDcuODY0NTYgMTUwLjc2NCA3LjEyODdDMTU0LjA3MSA1LjU3NTI4IDI1MS43MjIgMS40Mjc5OCAyNTkuMjc4IDMwLjcxNzRaXCIsXG4gICAgICAgICAgZmlsbDogXCJ1cmwoI3BhaW50MF9saW5lYXIpXCJcbiAgICAgICAgfVxuICAgICAgKSxcbiAgICAgIC8qIEBfX1BVUkVfXyAqLyBjKFxuICAgICAgICBcInBhdGhcIixcbiAgICAgICAge1xuICAgICAgICAgIHN0eWxlOiB7IG1peEJsZW5kTW9kZTogXCJtdWx0aXBseVwiIH0sXG4gICAgICAgICAgZDogXCJNMTUwLjk3NSA3LjA1OTYyQzE1Ni43OTYgNS40NjI1NCAyNTEuODI3IDEuODQyNzUgMjU5LjI3OCAzMC43MTc0TDI1OS4zNDMgMzAuNzQ2NVYzMC43Njg0QzI1OS40NjcgMzEuMDQxNCAyNTkuNTU4IDMxLjMyODUgMjU5LjYxMyAzMS42MjMzQzI2MyA1MC43MTE4IDI0My45NjkgMTAyLjYyMiAyMTAuNTQgMTUyLjU5QzE3OS42OTMgMTk4LjcxNiAxNTguMzI0IDIxNC4yMjUgMTM1Ljg1MiAyMDIuOTIxQzExNi43NzggMTkzLjAxOSAxMTguNzMyIDE2NC4zMTkgMTM0LjIwNCAxMjEuNzE0QzE0OC43OTIgODEuNTAzNyAxNzkuMzI2IDE1LjA2MzIgMTUwLjk3NSA3LjA1OTYyWlwiLFxuICAgICAgICAgIGZpbGw6IFwidXJsKCNwYWludDFfbGluZWFyKVwiXG4gICAgICAgIH1cbiAgICAgICksXG4gICAgICAvKiBAX19QVVJFX18gKi8gYyhcbiAgICAgICAgXCJwYXRoXCIsXG4gICAgICAgIHtcbiAgICAgICAgICBzdHlsZTogeyBtaXhCbGVuZE1vZGU6IFwibXVsdGlwbHlcIiB9LFxuICAgICAgICAgIGQ6IFwiTTExMS40MjMgNTcuMjIzN0MxMjAuMjE2IDY0Ljk5OCA2NS40NDYzIDE0Ny43MTkgNzQuMjQyOSAyMjguMzYyQzc2LjM5MjkgMjQ4LjA2NSA3OS4xMTA1IDI0OS4xNDIgNzkuMjc0MiAyNTEuNDkyQzc4Ljc3MjIgMjU3LjE0OSAyNi40MzYxIDI1My4wNiAyNS40MzIxIDI0NS42NzFDMTguNzU2NCAxOTcuMzQ0IDI1LjQzMjEgOTAuNzU4NiA2MC4xNzg0IDQ3Ljg5NTlDNjIuOTM2IDQ0LjQ0MzQgMTA4LjQ5OCA1NC42NDA3IDExMS40MjMgNTcuMjIzN1pcIixcbiAgICAgICAgICBmaWxsOiBcInVybCgjcGFpbnQyX2xpbmVhcilcIlxuICAgICAgICB9XG4gICAgICApLFxuICAgICAgLyogQF9fUFVSRV9fICovIGMoXG4gICAgICAgIFwicGF0aFwiLFxuICAgICAgICB7XG4gICAgICAgICAgc3R5bGU6IHsgbWl4QmxlbmRNb2RlOiBcIm11bHRpcGx5XCIgfSxcbiAgICAgICAgICBkOiBcIk0xMTEuNDIzIDU3LjIyMzhDODguNTAzNyA1My42MjU4IDQ3LjI5OTkgMTY0LjQwMiA0MS45MDQ4IDE3Ni43NjRDMzUuNTk2NSAxOTEuMzE2IC0yLjIzODU1IDE4NS40NjYgMC4xMDQzMTMgMTY5Ljg1MkMxMC40ODcxIDEwMC42MjUgMjkuMDY5OSA3MC45NzUzIDYwLjE2MDIgNDcuODgxNEM2MC40MjYxIDQ3LjY2NDMgNjAuNzM0NyA0Ny41MDU3IDYxLjA2NiA0Ny40MTU4QzY3LjYxNDQgNDUuNzM1IDEwMy4wMyA1My41MzEyIDExMC4yNzMgNTYuNjA1M0MxMTAuODM0IDU2Ljg0MTggMTExLjY4NSA1Ny4yNjM4IDExMS40MjMgNTcuMjIzOFpcIixcbiAgICAgICAgICBmaWxsOiBcInVybCgjcGFpbnQzX2xpbmVhcilcIlxuICAgICAgICB9XG4gICAgICApLFxuICAgICAgLyogQF9fUFVSRV9fICovIGUxKFwiZGVmc1wiLCB7IGNoaWxkcmVuOiBbXG4gICAgICAgIC8qIEBfX1BVUkVfXyAqLyBlMShcbiAgICAgICAgICBcImxpbmVhckdyYWRpZW50XCIsXG4gICAgICAgICAge1xuICAgICAgICAgICAgaWQ6IFwicGFpbnQwX2xpbmVhclwiLFxuICAgICAgICAgICAgeDE6IFwiMjMuNjc1N1wiLFxuICAgICAgICAgICAgeTE6IFwiMjI4LjYxNVwiLFxuICAgICAgICAgICAgeDI6IFwiMjE1LjExNlwiLFxuICAgICAgICAgICAgeTI6IFwiLTMwLjk2NVwiLFxuICAgICAgICAgICAgZ3JhZGllbnRVbml0czogXCJ1c2VyU3BhY2VPblVzZVwiLFxuICAgICAgICAgICAgY2hpbGRyZW46IFtcbiAgICAgICAgICAgICAgLyogQF9fUFVSRV9fICovIGMoXCJzdG9wXCIsIHsgc3RvcENvbG9yOiBcIiNGM0E2QzlcIiB9KSxcbiAgICAgICAgICAgICAgLyogQF9fUFVSRV9fICovIGMoXCJzdG9wXCIsIHsgb2Zmc2V0OiBcIjFcIiwgc3RvcENvbG9yOiBcIiM5OTFBODFcIiB9KVxuICAgICAgICAgICAgXVxuICAgICAgICAgIH1cbiAgICAgICAgKSxcbiAgICAgICAgLyogQF9fUFVSRV9fICovIGUxKFxuICAgICAgICAgIFwibGluZWFyR3JhZGllbnRcIixcbiAgICAgICAgICB7XG4gICAgICAgICAgICBpZDogXCJwYWludDFfbGluZWFyXCIsXG4gICAgICAgICAgICB4MTogXCIxMDIuNzE1XCIsXG4gICAgICAgICAgICB5MTogXCIxNTcuNjk1XCIsXG4gICAgICAgICAgICB4MjogXCIyMzAuMDQyXCIsXG4gICAgICAgICAgICB5MjogXCItMTQuOTUxNlwiLFxuICAgICAgICAgICAgZ3JhZGllbnRVbml0czogXCJ1c2VyU3BhY2VPblVzZVwiLFxuICAgICAgICAgICAgY2hpbGRyZW46IFtcbiAgICAgICAgICAgICAgLyogQF9fUFVSRV9fICovIGMoXCJzdG9wXCIsIHsgc3RvcENvbG9yOiBcIiNGRkNBMDBcIiB9KSxcbiAgICAgICAgICAgICAgLyogQF9fUFVSRV9fICovIGMoXCJzdG9wXCIsIHsgb2Zmc2V0OiBcIjFcIiwgc3RvcENvbG9yOiBcIiNGMTg1MDBcIiB9KVxuICAgICAgICAgICAgXVxuICAgICAgICAgIH1cbiAgICAgICAgKSxcbiAgICAgICAgLyogQF9fUFVSRV9fICovIGUxKFxuICAgICAgICAgIFwibGluZWFyR3JhZGllbnRcIixcbiAgICAgICAgICB7XG4gICAgICAgICAgICBpZDogXCJwYWludDJfbGluZWFyXCIsXG4gICAgICAgICAgICB4MTogXCIzLjU4MTc4XCIsXG4gICAgICAgICAgICB5MTogXCIyMTEuOTA5XCIsXG4gICAgICAgICAgICB4MjogXCIxMjYuNjQ0XCIsXG4gICAgICAgICAgICB5MjogXCI0NS4wNDQ2XCIsXG4gICAgICAgICAgICBncmFkaWVudFVuaXRzOiBcInVzZXJTcGFjZU9uVXNlXCIsXG4gICAgICAgICAgICBjaGlsZHJlbjogW1xuICAgICAgICAgICAgICAvKiBAX19QVVJFX18gKi8gYyhcInN0b3BcIiwgeyBzdG9wQ29sb3I6IFwiIzAwNDg5OVwiIH0pLFxuICAgICAgICAgICAgICAvKiBAX19QVVJFX18gKi8gYyhcInN0b3BcIiwgeyBvZmZzZXQ6IFwiMC4wMlwiLCBzdG9wQ29sb3I6IFwiIzAwNEI5Q1wiIH0pLFxuICAgICAgICAgICAgICAvKiBAX19QVVJFX18gKi8gYyhcInN0b3BcIiwgeyBvZmZzZXQ6IFwiMVwiLCBzdG9wQ29sb3I6IFwiIzAwQjNFQ1wiIH0pXG4gICAgICAgICAgICBdXG4gICAgICAgICAgfVxuICAgICAgICApLFxuICAgICAgICAvKiBAX19QVVJFX18gKi8gZTEoXG4gICAgICAgICAgXCJsaW5lYXJHcmFkaWVudFwiLFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGlkOiBcInBhaW50M19saW5lYXJcIixcbiAgICAgICAgICAgIHgxOiBcIi01OTM5NzNcIixcbiAgICAgICAgICAgIHkxOiBcIi0xLjIyODc4ZSswNlwiLFxuICAgICAgICAgICAgeDI6IFwiLTU0MzA5OFwiLFxuICAgICAgICAgICAgeTI6IFwiLTEuMjI4NzhlKzA2XCIsXG4gICAgICAgICAgICBncmFkaWVudFVuaXRzOiBcInVzZXJTcGFjZU9uVXNlXCIsXG4gICAgICAgICAgICBjaGlsZHJlbjogW1xuICAgICAgICAgICAgICAvKiBAX19QVVJFX18gKi8gYyhcInN0b3BcIiwgeyBzdG9wQ29sb3I6IFwiIzAwNDg5OVwiIH0pLFxuICAgICAgICAgICAgICAvKiBAX19QVVJFX18gKi8gYyhcInN0b3BcIiwgeyBvZmZzZXQ6IFwiMC4wMlwiLCBzdG9wQ29sb3I6IFwiIzAwNEI5Q1wiIH0pLFxuICAgICAgICAgICAgICAvKiBAX19QVVJFX18gKi8gYyhcInN0b3BcIiwgeyBvZmZzZXQ6IFwiMVwiLCBzdG9wQ29sb3I6IFwiIzAwQjNFQ1wiIH0pXG4gICAgICAgICAgICBdXG4gICAgICAgICAgfVxuICAgICAgICApXG4gICAgICBdIH0pXG4gICAgXVxuICB9XG4pLCBlSiA9ICgpID0+IC8qIEBfX1BVUkVfXyAqLyBlMShcbiAgXCJzdmdcIixcbiAge1xuICAgIHdpZHRoOiBcIjI2MFwiLFxuICAgIGhlaWdodDogXCIyNjBcIixcbiAgICB2aWV3Qm94OiBcIjAgMCAyNjAgMjYwXCIsXG4gICAgZmlsbDogXCJub25lXCIsXG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICBjaGlsZHJlbjogW1xuICAgICAgLyogQF9fUFVSRV9fICovIGMoXG4gICAgICAgIFwicGF0aFwiLFxuICAgICAgICB7XG4gICAgICAgICAgc3R5bGU6IHsgbWl4QmxlbmRNb2RlOiBcIm11bHRpcGx5XCIgfSxcbiAgICAgICAgICBkOiBcIk0xMy44NzM5IDE3Ny4zMTVDMTYuMDI3MSAxNzkuNzY1IDE4LjUyNzEgMTgxLjc5NCAyMS4wODgyIDE4My44MTRDNDYuNjM1MSAyMDMuODQyIDg5LjM2MzEgMjA5LjI1MiAxMTYuOTQxIDIwNC4yODNDMTMwLjc5NSAyMDEuNzg2IDEzOS43OTcgMTkxLjA2NCAxMzcuMzQxIDE3NC43MzJDMTM2LjAzNyAxNjYuMDc1IDEyNi45NDcgMTYxLjU3NyAxMTguNzUgMTYxLjY5MUM5OS4xMTM1IDE2MS45NjggNzYuMjcxOSAxNjAuMTE1IDU0Ljg3MDUgMTU1LjQ4NkMzOS4yNDA0IDE1Mi4xMDcgMjEuMjk2MyAxNDIuNzIzIDE1LjAwMzIgMTM1LjA1MUMxNC4xNTE0IDEzMy45ODggOC4wNDY5NiAxMjcuNzMxIDIwLjg2OSAxMjMuMTgzQzIwLjg2OSAxMjMuMTgzIDExLjMwNzMgMTI1LjkxMyA4LjQ5OTI0IDEzMi4zNEM3LjE0NTE4IDEzNS40MzQgNi4yMzUwNyAxMzkuODMxIDYuMTY4NDcgMTQzLjI0MkM2LjA4MjQ2IDE0Ny42ODEgNi4yMTI4NyAxNTIuMTQ4IDYuNTY1MjYgMTU2LjU4NUM2Ljk4OTc5IDE2MS45NzEgNy43ODA1OSAxNjcuNDY1IDEwLjMzODkgMTcyLjIxOEMxMS4zMjU4IDE3NC4wNDIgMTIuNTExMyAxNzUuNzUyIDEzLjg3MzkgMTc3LjMxNVpcIixcbiAgICAgICAgICBmaWxsOiBcInVybCgjcGFpbnQwX2xpbmVhcilcIlxuICAgICAgICB9XG4gICAgICApLFxuICAgICAgLyogQF9fUFVSRV9fICovIGMoXG4gICAgICAgIFwicGF0aFwiLFxuICAgICAgICB7XG4gICAgICAgICAgc3R5bGU6IHsgbWl4QmxlbmRNb2RlOiBcIm11bHRpcGx5XCIgfSxcbiAgICAgICAgICBkOiBcIk0wLjAzMzU3NDEgMTMzLjM4NkwwLjAwMDI3NzQyNCAxMzMuMjhDLTAuMDA1NDY2OTIgMTMzLjAzIDAuMDc4MTU2NiAxMzIuNzg2IDAuMjM2MTI5IDEzMi41OTJDMC4xNzUwODUgMTMyLjg2MSAwLjEwNTcxNyAxMzMuMTIyIDAuMDMzNTc0MSAxMzMuMzg2WlwiLFxuICAgICAgICAgIGZpbGw6IFwidXJsKCNwYWludDFfbGluZWFyKVwiXG4gICAgICAgIH1cbiAgICAgICksXG4gICAgICAvKiBAX19QVVJFX18gKi8gYyhcbiAgICAgICAgXCJwYXRoXCIsXG4gICAgICAgIHtcbiAgICAgICAgICBzdHlsZTogeyBtaXhCbGVuZE1vZGU6IFwibXVsdGlwbHlcIiB9LFxuICAgICAgICAgIGQ6IFwiTTIzNC43MjMgMjE5LjU3NEMyMTEuODcgMjA1LjUxMiAxOTMuMjgyIDIwMC43MzQgMTU0LjA0NSAxOTEuNTIyQzExNS40ODQgMTgyLjQ2MyA0LjMyODgzIDE1OS4wODUgMTMuODQ4OSAxNzcuMTg1QzE0LjIwOTYgMTc3Ljg3IDExLjMxIDE3NC4wMDggMTAuMzM4OSAxNzIuMjA3QzcuNzY5NDkgMTY3LjQ1NCA2Ljk4OTc5IDE2MS45NiA2LjU2NTI2IDE1Ni41ODhDNi4yMTI4NyAxNTIuMTQ5IDYuMDgyNDYgMTQ3LjY5NSA2LjE2ODQ3IDE0My4yNDVDNi4yMzUwNyAxMzkuODQzIDcuMTQ1MTggMTM1LjQzNiA4LjQ5OTI0IDEzMi4zNDNDMTEuMTY1OCAxMjYuMjM4IDE5LjkxNzIgMTIzLjQ4MyAyMC43OTQxIDEyMy4yMTlDMzUuODMzMSAxMjAuMDEyIDYwLjM2MTcgMTE4Ljk5MSA5OC41MDg2IDEyNi4zODJDMTUzLjk3NSAxMzcuMTE4IDIyNS4zNzIgMTU4LjgwOCAyNDYuOTk4IDE3NC45NTFDMjcxLjA5MSAxOTIuOTM3IDI1OC42MDUgMjM0LjI1NiAyMzQuNzIzIDIxOS41NzRaXCIsXG4gICAgICAgICAgZmlsbDogXCJ1cmwoI3BhaW50Ml9saW5lYXIpXCJcbiAgICAgICAgfVxuICAgICAgKSxcbiAgICAgIC8qIEBfX1BVUkVfXyAqLyBjKFxuICAgICAgICBcInBhdGhcIixcbiAgICAgICAge1xuICAgICAgICAgIHN0eWxlOiB7IG1peEJsZW5kTW9kZTogXCJtdWx0aXBseVwiIH0sXG4gICAgICAgICAgZDogXCJNMjE3Ljg4OCAxNDguNjcyQzIxNy4yMDkgMTMxLjQxIDE5OS44NTMgMTIwLjI2NyAxODYuNjUzIDExMi4yNjdDMTQ4LjUwOSA4OS4xNDAxIDEwMi4zMTggNzUuMDU4NCA1Ny40NTkzIDc4LjU0MzRDNDYuNzM1IDc5LjM3NTggMzYuMjYzMiA4MS42NTk0IDI2LjAzODMgODQuOTU4NkMtMy4wNzEzNiA5NC4zNTEgLTkuNTk0NzQgNjAuMzY2MiAxNi4zMjQgNDcuNzU1MUMxOS43MTQ3IDQ2LjEwNjkgMjguMTE5NCA0My4wOTkxIDMzLjA5NzIgNDEuOTI4MUM3OS40NzY4IDMwLjk3NjMgMTIzLjc5MiAzOS44MjIxIDE2OC4yNTQgNTMuMzY4M0MxNzguMjkzIDU2LjQyMDUgMTk0LjQ1OSA2My4wMjE2IDIwMy4zODggNjguNjc5M0MyMDQuMzgyIDY5LjI2OTEgMjA1LjMxMiA2OS45NjEgMjA2LjE2MiA3MC43NDM3QzIwOC4wMyA3Mi41NDQ1IDIzNS40MTEgMTM2LjI3MiAyMTcuODg4IDE0OC42NzJaXCIsXG4gICAgICAgICAgZmlsbDogXCJ1cmwoI3BhaW50M19saW5lYXIpXCJcbiAgICAgICAgfVxuICAgICAgKSxcbiAgICAgIC8qIEBfX1BVUkVfXyAqLyBjKFxuICAgICAgICBcInBhdGhcIixcbiAgICAgICAge1xuICAgICAgICAgIHN0eWxlOiB7IG1peEJsZW5kTW9kZTogXCJtdWx0aXBseVwiIH0sXG4gICAgICAgICAgZDogXCJNMjA2LjI2MiA3MC44NDkxQzIwOC43OTYgNzQuMzI1OSAyMzUuMTY0IDEzNi40NDEgMjE3Ljg4OSAxNDguNjY0QzIxNy44ODkgMTQ4LjY4IDIxNy44ODkgMTQ4LjcgMjE3Ljg4OSAxNDguNzE2QzIxNy43MzggMTQ4Ljg2NyAyMTcuNTcgMTQ4Ljk5OSAyMTcuMzg5IDE0OS4xMUMyMDUuNTggMTU2LjE3MiAxNjYuMzM0IDE1Ni42MzMgMTI0Ljc2OSAxNDcuMDcxQzg2LjM3NzUgMTM4LjI1NiA3MC43MDAzIDEyNy45OTIgNzIuNTI4OSAxMTAuMjVDNzQuMjkwOCA5NS4xMTEzIDkzLjgxNjYgODkuMTYyMyAxMjUuOTgxIDg4LjY3NEMxNTYuMzM3IDg4LjIwNSAyMDguMTA1IDkxLjY5MDEgMjA2LjI2MiA3MC44NDkxWlwiLFxuICAgICAgICAgIGZpbGw6IFwidXJsKCNwYWludDRfbGluZWFyKVwiXG4gICAgICAgIH1cbiAgICAgICksXG4gICAgICAvKiBAX19QVVJFX18gKi8gZTEoXCJkZWZzXCIsIHsgY2hpbGRyZW46IFtcbiAgICAgICAgLyogQF9fUFVSRV9fICovIGUxKFxuICAgICAgICAgIFwibGluZWFyR3JhZGllbnRcIixcbiAgICAgICAgICB7XG4gICAgICAgICAgICBpZDogXCJwYWludDBfbGluZWFyXCIsXG4gICAgICAgICAgICB4MTogXCIyLjg0NDI0XCIsXG4gICAgICAgICAgICB5MTogXCIxNTQuMjVcIixcbiAgICAgICAgICAgIHgyOiBcIjEzNy4wNDRcIixcbiAgICAgICAgICAgIHkyOiBcIjE4Ny45ODNcIixcbiAgICAgICAgICAgIGdyYWRpZW50VW5pdHM6IFwidXNlclNwYWNlT25Vc2VcIixcbiAgICAgICAgICAgIGNoaWxkcmVuOiBbXG4gICAgICAgICAgICAgIC8qIEBfX1BVUkVfXyAqLyBjKFwic3RvcFwiLCB7IG9mZnNldDogXCIwLjM5XCIsIHN0b3BDb2xvcjogXCIjMDA3MzcyXCIgfSksXG4gICAgICAgICAgICAgIC8qIEBfX1BVUkVfXyAqLyBjKFwic3RvcFwiLCB7IG9mZnNldDogXCIwLjY4XCIsIHN0b3BDb2xvcjogXCIjMDA4RTk4XCIgfSksXG4gICAgICAgICAgICAgIC8qIEBfX1BVUkVfXyAqLyBjKFwic3RvcFwiLCB7IG9mZnNldDogXCIxXCIsIHN0b3BDb2xvcjogXCIjMDBBQUJFXCIgfSlcbiAgICAgICAgICAgIF1cbiAgICAgICAgICB9XG4gICAgICAgICksXG4gICAgICAgIC8qIEBfX1BVUkVfXyAqLyBlMShcbiAgICAgICAgICBcImxpbmVhckdyYWRpZW50XCIsXG4gICAgICAgICAge1xuICAgICAgICAgICAgaWQ6IFwicGFpbnQxX2xpbmVhclwiLFxuICAgICAgICAgICAgeDE6IFwiLTMuOTI4MDFcIixcbiAgICAgICAgICAgIHkxOiBcIjEzMS4yNzdcIixcbiAgICAgICAgICAgIHgyOiBcIi0zLjc5NzgyXCIsXG4gICAgICAgICAgICB5MjogXCIxMzEuMzMyXCIsXG4gICAgICAgICAgICBncmFkaWVudFVuaXRzOiBcInVzZXJTcGFjZU9uVXNlXCIsXG4gICAgICAgICAgICBjaGlsZHJlbjogW1xuICAgICAgICAgICAgICAvKiBAX19QVVJFX18gKi8gYyhcInN0b3BcIiwgeyBzdG9wQ29sb3I6IFwiI0ZGRDgwMFwiIH0pLFxuICAgICAgICAgICAgICAvKiBAX19QVVJFX18gKi8gYyhcInN0b3BcIiwgeyBvZmZzZXQ6IFwiMC41MVwiLCBzdG9wQ29sb3I6IFwiI0Y0OTYwMFwiIH0pLFxuICAgICAgICAgICAgICAvKiBAX19QVVJFX18gKi8gYyhcInN0b3BcIiwgeyBvZmZzZXQ6IFwiMC42MlwiLCBzdG9wQ29sb3I6IFwiI0YzOEYwMVwiIH0pLFxuICAgICAgICAgICAgICAvKiBAX19QVVJFX18gKi8gYyhcInN0b3BcIiwgeyBvZmZzZXQ6IFwiMC43OFwiLCBzdG9wQ29sb3I6IFwiI0VGN0IwNlwiIH0pLFxuICAgICAgICAgICAgICAvKiBAX19QVVJFX18gKi8gYyhcInN0b3BcIiwgeyBvZmZzZXQ6IFwiMC45NlwiLCBzdG9wQ29sb3I6IFwiI0VBNUIwQ1wiIH0pXG4gICAgICAgICAgICBdXG4gICAgICAgICAgfVxuICAgICAgICApLFxuICAgICAgICAvKiBAX19QVVJFX18gKi8gZTEoXG4gICAgICAgICAgXCJsaW5lYXJHcmFkaWVudFwiLFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGlkOiBcInBhaW50Ml9saW5lYXJcIixcbiAgICAgICAgICAgIHgxOiBcIjcuNjQyMjJcIixcbiAgICAgICAgICAgIHkxOiBcIjEyMy4yNzhcIixcbiAgICAgICAgICAgIHgyOiBcIjI0Ny42NTlcIixcbiAgICAgICAgICAgIHkyOiBcIjIyNS4wMjRcIixcbiAgICAgICAgICAgIGdyYWRpZW50VW5pdHM6IFwidXNlclNwYWNlT25Vc2VcIixcbiAgICAgICAgICAgIGNoaWxkcmVuOiBbXG4gICAgICAgICAgICAgIC8qIEBfX1BVUkVfXyAqLyBjKFwic3RvcFwiLCB7IG9mZnNldDogXCIwLjIyXCIsIHN0b3BDb2xvcjogXCIjNThCQkFGXCIgfSksXG4gICAgICAgICAgICAgIC8qIEBfX1BVUkVfXyAqLyBjKFwic3RvcFwiLCB7IG9mZnNldDogXCIxXCIsIHN0b3BDb2xvcjogXCIjMDA4NjNFXCIgfSlcbiAgICAgICAgICAgIF1cbiAgICAgICAgICB9XG4gICAgICAgICksXG4gICAgICAgIC8qIEBfX1BVUkVfXyAqLyBlMShcbiAgICAgICAgICBcImxpbmVhckdyYWRpZW50XCIsXG4gICAgICAgICAge1xuICAgICAgICAgICAgaWQ6IFwicGFpbnQzX2xpbmVhclwiLFxuICAgICAgICAgICAgeDE6IFwiMi42NTE4M1wiLFxuICAgICAgICAgICAgeTE6IFwiNDQuNzIwNVwiLFxuICAgICAgICAgICAgeDI6IFwiMjMzLjI1N1wiLFxuICAgICAgICAgICAgeTI6IFwiMTA5LjU3OFwiLFxuICAgICAgICAgICAgZ3JhZGllbnRVbml0czogXCJ1c2VyU3BhY2VPblVzZVwiLFxuICAgICAgICAgICAgY2hpbGRyZW46IFtcbiAgICAgICAgICAgICAgLyogQF9fUFVSRV9fICovIGMoXCJzdG9wXCIsIHsgc3RvcENvbG9yOiBcIiNFMEREMDBcIiB9KSxcbiAgICAgICAgICAgICAgLyogQF9fUFVSRV9fICovIGMoXCJzdG9wXCIsIHsgb2Zmc2V0OiBcIjFcIiwgc3RvcENvbG9yOiBcIiMwMDgwM0RcIiB9KVxuICAgICAgICAgICAgXVxuICAgICAgICAgIH1cbiAgICAgICAgKSxcbiAgICAgICAgLyogQF9fUFVSRV9fICovIGUxKFxuICAgICAgICAgIFwibGluZWFyR3JhZGllbnRcIixcbiAgICAgICAgICB7XG4gICAgICAgICAgICBpZDogXCJwYWludDRfbGluZWFyXCIsXG4gICAgICAgICAgICB4MTogXCI3OS4yMDI0XCIsXG4gICAgICAgICAgICB5MTogXCI4Mi4xNjMzXCIsXG4gICAgICAgICAgICB4MjogXCIyMjYuMjI3XCIsXG4gICAgICAgICAgICB5MjogXCIxMjMuNTE0XCIsXG4gICAgICAgICAgICBncmFkaWVudFVuaXRzOiBcInVzZXJTcGFjZU9uVXNlXCIsXG4gICAgICAgICAgICBjaGlsZHJlbjogW1xuICAgICAgICAgICAgICAvKiBAX19QVVJFX18gKi8gYyhcInN0b3BcIiwgeyBzdG9wQ29sb3I6IFwiIzk1QzExRlwiIH0pLFxuICAgICAgICAgICAgICAvKiBAX19QVVJFX18gKi8gYyhcInN0b3BcIiwgeyBvZmZzZXQ6IFwiMVwiLCBzdG9wQ29sb3I6IFwiIzAwODAzRFwiIH0pXG4gICAgICAgICAgICBdXG4gICAgICAgICAgfVxuICAgICAgICApXG4gICAgICBdIH0pXG4gICAgXVxuICB9XG4pLCB0SiA9ICgpID0+IC8qIEBfX1BVUkVfXyAqLyBlMShcbiAgXCJzdmdcIixcbiAge1xuICAgIHdpZHRoOiBcIjI2MFwiLFxuICAgIGhlaWdodDogXCIyNjBcIixcbiAgICB2aWV3Qm94OiBcIjAgMCAyNjAgMjYwXCIsXG4gICAgZmlsbDogXCJub25lXCIsXG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICBjaGlsZHJlbjogW1xuICAgICAgLyogQF9fUFVSRV9fICovIGMoXG4gICAgICAgIFwicGF0aFwiLFxuICAgICAgICB7XG4gICAgICAgICAgc3R5bGU6IHsgbWl4QmxlbmRNb2RlOiBcIm11bHRpcGx5XCIgfSxcbiAgICAgICAgICBkOiBcIk04Ny41MTc2IDQ0LjgwOUMxMzQuNjI0IDQ3LjU3MDcgMTU5LjU2NiA1OS40MDkyIDE1OS4yMDggNzguNjY2OUMxNTguNjg0IDk1LjEwNSAxMzcuODM5IDEwNS45NzUgMTAzLjI5OSAxMDkuMzk5QzYzLjAxNjYgMTEzLjM3NSA2Ljk5MTI2IDExMy41MjMgMjAuMzU1NSAxNDAuNTM0QzcuMDEyNjMgMTE5LjA4IC0wLjAzOTk3OTEgOTQuMzExIDAuMDAwMTcwNDczIDY5LjA0NjFDMC4wMDAxNzA0NzMgNjcuMTE0OSAwLjA2MTMyNjUgNjUuMjA5NCAwLjE0MTc5NSA2My4zMTAzQzAuNDI1MDQ0IDU2LjUxMjQgOC41ODc3NSA0MC4xOTY2IDg3LjUxNzYgNDQuODA5WlwiLFxuICAgICAgICAgIGZpbGw6IFwidXJsKCNwYWludDBfbGluZWFyKVwiXG4gICAgICAgIH1cbiAgICAgICksXG4gICAgICAvKiBAX19QVVJFX18gKi8gYyhcbiAgICAgICAgXCJwYXRoXCIsXG4gICAgICAgIHtcbiAgICAgICAgICBzdHlsZTogeyBtaXhCbGVuZE1vZGU6IFwibXVsdGlwbHlcIiB9LFxuICAgICAgICAgIGQ6IFwiTTI2MCAxMzQuMTg0QzI1OC44MzUgMTI2LjM0IDI0OS45MDkgMTIyLjE5NCAyNDMuMzUgMTE5LjU4N0MyMzMuNjA5IDExNS42ODEgMjIzLjQ2IDExMi44ODYgMjEzLjA5MyAxMTEuMjUzQzIwNS43OTYgMTEwLjExNyAxOTguNDA2IDEwOS42ODYgMTkxLjAyNiAxMDkuOTY2QzE3Ny4zOTEgMTEwLjUxMyAxNTYuNjQ2IDExMi45OTIgMTU0LjUwNiAxMzAuMDY0QzE1Mi4yNzkgMTQ3LjgyMSAxODAuNDEgMTYwLjg1NCAxOTEuOTg1IDE2Ni45NzNDMTk5Ljk1MSAxNzEuMTgzIDIxNC43ODMgMTc3Ljk0MiAyMjMuNTAzIDE4Mi42NjdDMjM5LjE0MyAxNjkuNDQgMjUxLjYxNSAxNTIuODcyIDI2MCAxMzQuMTg0WlwiLFxuICAgICAgICAgIGZpbGw6IFwidXJsKCNwYWludDFfbGluZWFyKVwiXG4gICAgICAgIH1cbiAgICAgICksXG4gICAgICAvKiBAX19QVVJFX18gKi8gYyhcbiAgICAgICAgXCJwYXRoXCIsXG4gICAgICAgIHtcbiAgICAgICAgICBzdHlsZTogeyBtaXhCbGVuZE1vZGU6IFwibXVsdGlwbHlcIiB9LFxuICAgICAgICAgIGQ6IFwiTTU3LjkxODIgMTg4LjA0NkM1OS4yODYxIDE4OS4wNiA2MC45MzQxIDE5MC4yNTcgNjIuNTc4OSAxOTEuNDI5QzgwLjU0OTkgMjAzLjgwNCAxMDEuMjgxIDIxMS41ODQgMTIyLjk1NiAyMTQuMDg5QzEyMi45NTYgMjE0LjA4OSAxNDAuNTAxIDIxMC4xMzMgMTM3LjkwNyAyMDEuODI5QzEzNS40MzIgMTkzLjkxNCAxMjEuMzUgMTg5LjEzMSA5Ny44MDQ3IDE4Ni4yOTJDNTguMTU2NCAxODEuNDk5IDU2LjYxMTQgMTg2LjkyNiA1Ny45MTgyIDE4OC4wNDZaXCIsXG4gICAgICAgICAgZmlsbDogXCJ1cmwoI3BhaW50Ml9saW5lYXIpXCJcbiAgICAgICAgfVxuICAgICAgKSxcbiAgICAgIC8qIEBfX1BVUkVfXyAqLyBjKFxuICAgICAgICBcInBhdGhcIixcbiAgICAgICAge1xuICAgICAgICAgIHN0eWxlOiB7IG1peEJsZW5kTW9kZTogXCJtdWx0aXBseVwiIH0sXG4gICAgICAgICAgZDogXCJNMjU4LjY3MSAxMzcuMDU4QzI0Mi43MjggMTY0Ljk4NyAxOTEuMDEzIDE1NS42MDggMTU1LjQyNyAxNTAuNTIyQzMzLjQzNjQgMTMzLjA5NiAzLjg4ODQzIDEwMS40MTQgMy44ODg0MyAxMDEuNDE0QzcuMjc3NzUgMTE1LjI0MiAxMi44MzU2IDEyOC40NDUgMjAuMzU1NSAxNDAuNTM0QzMwLjEyNDMgMTU1LjE3NiA4NS42NjM2IDE3Ny44NzIgMTY4LjU2MiAxODQuNzk1QzE5Ni40ODUgMTg3LjEzMiAyMTEuMDA4IDE4Ny4xOCAyMTguNTA3IDE4Ni42OTdDMjM1LjYxOCAxNzMuNTQ1IDI0OS4zNzkgMTU2LjUzNyAyNTguNjcxIDEzNy4wNThaXCIsXG4gICAgICAgICAgZmlsbDogXCJ1cmwoI3BhaW50M19saW5lYXIpXCJcbiAgICAgICAgfVxuICAgICAgKSxcbiAgICAgIC8qIEBfX1BVUkVfXyAqLyBjKFxuICAgICAgICBcInBhdGhcIixcbiAgICAgICAge1xuICAgICAgICAgIHN0eWxlOiB7IG1peEJsZW5kTW9kZTogXCJtdWx0aXBseVwiIH0sXG4gICAgICAgICAgZDogXCJNMjE4LjU3NSAxODYuNjJDMjE4LjU3NSAxODYuNTY5IDIxOC41NTkgMTg2LjU2MiAyMTguNTQ2IDE4Ni42MkMyMTguNTQ2IDE4Ni42MiAyMTguNTQ2IDE4Ni41OTggMjE4LjU0NiAxODYuNjAxQzIxMC40NzMgMTkxLjIxNyAxOTMuMzExIDE5Ni4xNzMgMTc3LjM5NCAxOTkuNDc2QzEyOC41NSAyMDkuNjQ0IDcwLjI3OCAxOTMuOTQgNTcuOTExNiAxODguMDQzQzU5LjI3OTYgMTg5LjA1NyA2MC45Mjc2IDE5MC4yNTQgNjIuNTcyMyAxOTEuNDI2Qzg0LjkyMzYgMjA2LjgwOCAxMTEuNDI4IDIxNS4wMjEgMTM4LjU2IDIxNC45NzRDMTY4LjUyIDIxNC45NzQgMTk2LjIwOCAyMDMuMjI5IDIxOC41NTIgMTg2LjY0OUwyMTguNTc1IDE4Ni42MlpcIixcbiAgICAgICAgICBmaWxsOiBcInVybCgjcGFpbnQ0X2xpbmVhcilcIlxuICAgICAgICB9XG4gICAgICApLFxuICAgICAgLyogQF9fUFVSRV9fICovIGUxKFwiZGVmc1wiLCB7IGNoaWxkcmVuOiBbXG4gICAgICAgIC8qIEBfX1BVUkVfXyAqLyBlMShcbiAgICAgICAgICBcImxpbmVhckdyYWRpZW50XCIsXG4gICAgICAgICAge1xuICAgICAgICAgICAgaWQ6IFwicGFpbnQwX2xpbmVhclwiLFxuICAgICAgICAgICAgeDE6IFwiMTU5LjY0OVwiLFxuICAgICAgICAgICAgeTE6IFwiOTIuMjY2MVwiLFxuICAgICAgICAgICAgeDI6IFwiLTQuMzQ1MTJcIixcbiAgICAgICAgICAgIHkyOiBcIjkyLjI2NjFcIixcbiAgICAgICAgICAgIGdyYWRpZW50VW5pdHM6IFwidXNlclNwYWNlT25Vc2VcIixcbiAgICAgICAgICAgIGNoaWxkcmVuOiBbXG4gICAgICAgICAgICAgIC8qIEBfX1BVUkVfXyAqLyBjKFwic3RvcFwiLCB7IHN0b3BDb2xvcjogXCIjQzVEMzAwXCIgfSksXG4gICAgICAgICAgICAgIC8qIEBfX1BVUkVfXyAqLyBjKFwic3RvcFwiLCB7IG9mZnNldDogXCIwLjgzXCIsIHN0b3BDb2xvcjogXCIjMDA5MTQwXCIgfSlcbiAgICAgICAgICAgIF1cbiAgICAgICAgICB9XG4gICAgICAgICksXG4gICAgICAgIC8qIEBfX1BVUkVfXyAqLyBlMShcbiAgICAgICAgICBcImxpbmVhckdyYWRpZW50XCIsXG4gICAgICAgICAge1xuICAgICAgICAgICAgaWQ6IFwicGFpbnQxX2xpbmVhclwiLFxuICAgICAgICAgICAgeDE6IFwiMTU5LjcyN1wiLFxuICAgICAgICAgICAgeTE6IFwiMTU2LjU2XCIsXG4gICAgICAgICAgICB4MjogXCIyNjUuNDUzXCIsXG4gICAgICAgICAgICB5MjogXCIxMzEuNjQxXCIsXG4gICAgICAgICAgICBncmFkaWVudFVuaXRzOiBcInVzZXJTcGFjZU9uVXNlXCIsXG4gICAgICAgICAgICBjaGlsZHJlbjogW1xuICAgICAgICAgICAgICAvKiBAX19QVVJFX18gKi8gYyhcInN0b3BcIiwgeyBzdG9wQ29sb3I6IFwiIzAwN0IzRFwiIH0pLFxuICAgICAgICAgICAgICAvKiBAX19QVVJFX18gKi8gYyhcInN0b3BcIiwgeyBvZmZzZXQ6IFwiMVwiLCBzdG9wQ29sb3I6IFwiI0MzRDIwMFwiIH0pXG4gICAgICAgICAgICBdXG4gICAgICAgICAgfVxuICAgICAgICApLFxuICAgICAgICAvKiBAX19QVVJFX18gKi8gZTEoXG4gICAgICAgICAgXCJsaW5lYXJHcmFkaWVudFwiLFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGlkOiBcInBhaW50Ml9saW5lYXJcIixcbiAgICAgICAgICAgIHgxOiBcIjU3LjYyODVcIixcbiAgICAgICAgICAgIHkxOiBcIjE5OS4yMjFcIixcbiAgICAgICAgICAgIHgyOiBcIjEzOC4xNThcIixcbiAgICAgICAgICAgIHkyOiBcIjE5OS4yMjFcIixcbiAgICAgICAgICAgIGdyYWRpZW50VW5pdHM6IFwidXNlclNwYWNlT25Vc2VcIixcbiAgICAgICAgICAgIGNoaWxkcmVuOiBbXG4gICAgICAgICAgICAgIC8qIEBfX1BVUkVfXyAqLyBjKFwic3RvcFwiLCB7IHN0b3BDb2xvcjogXCIjOTVDMTFGXCIgfSksXG4gICAgICAgICAgICAgIC8qIEBfX1BVUkVfXyAqLyBjKFwic3RvcFwiLCB7IG9mZnNldDogXCIwLjA0XCIsIHN0b3BDb2xvcjogXCIjOERCRTI1XCIgfSksXG4gICAgICAgICAgICAgIC8qIEBfX1BVUkVfXyAqLyBjKFwic3RvcFwiLCB7IG9mZnNldDogXCIwLjMxXCIsIHN0b3BDb2xvcjogXCIjNjhBRjJDXCIgfSksXG4gICAgICAgICAgICAgIC8qIEBfX1BVUkVfXyAqLyBjKFwic3RvcFwiLCB7IG9mZnNldDogXCIwLjkzXCIsIHN0b3BDb2xvcjogXCIjMEI4QTNDXCIgfSksXG4gICAgICAgICAgICAgIC8qIEBfX1BVUkVfXyAqLyBjKFwic3RvcFwiLCB7IG9mZnNldDogXCIxXCIsIHN0b3BDb2xvcjogXCIjMDA4NjNFXCIgfSlcbiAgICAgICAgICAgIF1cbiAgICAgICAgICB9XG4gICAgICAgICksXG4gICAgICAgIC8qIEBfX1BVUkVfXyAqLyBlMShcbiAgICAgICAgICBcImxpbmVhckdyYWRpZW50XCIsXG4gICAgICAgICAge1xuICAgICAgICAgICAgaWQ6IFwicGFpbnQzX2xpbmVhclwiLFxuICAgICAgICAgICAgeDE6IFwiMy4xODM1MlwiLFxuICAgICAgICAgICAgeTE6IFwiMTQ0LjE3OFwiLFxuICAgICAgICAgICAgeDI6IFwiMjY1LjYyNlwiLFxuICAgICAgICAgICAgeTI6IFwiMTQ0LjE3OFwiLFxuICAgICAgICAgICAgZ3JhZGllbnRVbml0czogXCJ1c2VyU3BhY2VPblVzZVwiLFxuICAgICAgICAgICAgY2hpbGRyZW46IFtcbiAgICAgICAgICAgICAgLyogQF9fUFVSRV9fICovIGMoXCJzdG9wXCIsIHsgc3RvcENvbG9yOiBcIiMwMDg0NjBcIiB9KSxcbiAgICAgICAgICAgICAgLyogQF9fUFVSRV9fICovIGMoXCJzdG9wXCIsIHsgb2Zmc2V0OiBcIjAuNjhcIiwgc3RvcENvbG9yOiBcIiMyMUEwQjFcIiB9KSxcbiAgICAgICAgICAgICAgLyogQF9fUFVSRV9fICovIGMoXCJzdG9wXCIsIHsgb2Zmc2V0OiBcIjFcIiwgc3RvcENvbG9yOiBcIiMyNkExQjRcIiB9KVxuICAgICAgICAgICAgXVxuICAgICAgICAgIH1cbiAgICAgICAgKSxcbiAgICAgICAgLyogQF9fUFVSRV9fICovIGUxKFxuICAgICAgICAgIFwibGluZWFyR3JhZGllbnRcIixcbiAgICAgICAgICB7XG4gICAgICAgICAgICBpZDogXCJwYWludDRfbGluZWFyXCIsXG4gICAgICAgICAgICB4MTogXCI1NS4zNjI0XCIsXG4gICAgICAgICAgICB5MTogXCIyMDAuNzgzXCIsXG4gICAgICAgICAgICB4MjogXCIyMTcuNzZcIixcbiAgICAgICAgICAgIHkyOiBcIjIwMC43ODNcIixcbiAgICAgICAgICAgIGdyYWRpZW50VW5pdHM6IFwidXNlclNwYWNlT25Vc2VcIixcbiAgICAgICAgICAgIGNoaWxkcmVuOiBbXG4gICAgICAgICAgICAgIC8qIEBfX1BVUkVfXyAqLyBjKFwic3RvcFwiLCB7IHN0b3BDb2xvcjogXCIjRkZFRDAwXCIgfSksXG4gICAgICAgICAgICAgIC8qIEBfX1BVUkVfXyAqLyBjKFwic3RvcFwiLCB7IG9mZnNldDogXCIwLjYzXCIsIHN0b3BDb2xvcjogXCIjNUJBQjI4XCIgfSksXG4gICAgICAgICAgICAgIC8qIEBfX1BVUkVfXyAqLyBjKFwic3RvcFwiLCB7IG9mZnNldDogXCIxXCIsIHN0b3BDb2xvcjogXCIjMDA4NjNFXCIgfSlcbiAgICAgICAgICAgIF1cbiAgICAgICAgICB9XG4gICAgICAgIClcbiAgICAgIF0gfSlcbiAgICBdXG4gIH1cbiksIG9KID0gKCkgPT4gLyogQF9fUFVSRV9fICovIGUxKFxuICBcInN2Z1wiLFxuICB7XG4gICAgd2lkdGg6IFwiMjYwXCIsXG4gICAgaGVpZ2h0OiBcIjI2MFwiLFxuICAgIHZpZXdCb3g6IFwiMCAwIDI2MCAyNjBcIixcbiAgICBmaWxsOiBcIm5vbmVcIixcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIGNoaWxkcmVuOiBbXG4gICAgICAvKiBAX19QVVJFX18gKi8gYyhcbiAgICAgICAgXCJwYXRoXCIsXG4gICAgICAgIHtcbiAgICAgICAgICBzdHlsZTogeyBtaXhCbGVuZE1vZGU6IFwibXVsdGlwbHlcIiB9LFxuICAgICAgICAgIGQ6IFwiTTIwMS44OTIgMTY4LjQ4MkMyMTguMzMyIDE0NC40NTQgMCAxMDkuMTMyIDAgMTA5LjEzMkMwLjk2MDExMSAxMjkuODAzIDE1LjYwMTggMTU5LjYxMSAxNS42MDE4IDE1OS40ODlDMjUuMTgwNSAxNjguNzk5IDEzOC4yNTYgMTY1Ljk5OSAxNzUuNzk2IDE5Ny41MzlDMTg5LjE3MSAxODYuMTIzIDIwMS44OTIgMTY4LjQ4MiAyMDEuODkyIDE2OC40ODJaXCIsXG4gICAgICAgICAgZmlsbDogXCJ1cmwoI3BhaW50MF9saW5lYXIpXCJcbiAgICAgICAgfVxuICAgICAgKSxcbiAgICAgIC8qIEBfX1BVUkVfXyAqLyBjKFxuICAgICAgICBcInBhdGhcIixcbiAgICAgICAge1xuICAgICAgICAgIHN0eWxlOiB7IG1peEJsZW5kTW9kZTogXCJtdWx0aXBseVwiIH0sXG4gICAgICAgICAgZDogXCJNMjAxLjQwMiAxNjkuMTUxQzE4NS44MjYgMTg5LjM3NSAxMTEuMzE4IDE5MC4yNzQgNjUuMjYxOSAxOTAuMDE1QzUzLjE0NTMgMTg5Ljk0NCA0Ni40MDUzIDE5NC43NjcgNDcuNTk5MSAyMDMuNzQ0QzQ4Ljc5MjggMjEyLjcyMSA1OS41ODQ1IDIxOS41ODkgNzcuNzY5IDIyMi45NDZDMTEyLjI5OCAyMjkuMzEyIDE0NS4wMjggMjIwLjcyNSAxNzEuOTg1IDIwMC41ODVDMTg1LjEwNiAxOTAuNzgzIDE5OC42ODkgMTcyLjgyNSAyMDEuNDAyIDE2OS4xNThWMTY5LjE1MVpcIixcbiAgICAgICAgICBmaWxsOiBcInVybCgjcGFpbnQxX2xpbmVhcilcIlxuICAgICAgICB9XG4gICAgICApLFxuICAgICAgLyogQF9fUFVSRV9fICovIGMoXG4gICAgICAgIFwicGF0aFwiLFxuICAgICAgICB7XG4gICAgICAgICAgc3R5bGU6IHsgbWl4QmxlbmRNb2RlOiBcIm11bHRpcGx5XCIgfSxcbiAgICAgICAgICBkOiBcIk0yNTcuMzU0IDU4LjQ2OTdDMjQwLjUwMSAxMTAuNTE3IDExLjU1MzMgNjkuNzM4MiAwLjAxNTkzMDIgMTA4Ljc5MkMwLjAxNTkzMDIgMTA5LjAxIDAuMDE1OTMwMiAxMDkuMTMyIDAuMDE1OTMwMiAxMDkuMTMyQzAuOTQwODM3IDEyOC45NzQgMTQuNDY4OCAxNTcuMjM2IDE1LjU1MDUgMTU5LjM3N0MxNS41ODYyIDE1OS4zNDQgMTUuNjE5NCAxNTkuMzA3IDE1LjY0OTcgMTU5LjI2OUM0MC4xMTk4IDExOS40NSAyMDIuMzkxIDE0My41NzQgMjI0LjM0NiAxMzEuNzQ1QzIyNi42ODUgMTMwLjQ5MSAyNzEuMTM4IDc1LjQ3NjUgMjU3LjM1NCA1OC40Njk3WlwiLFxuICAgICAgICAgIGZpbGw6IFwidXJsKCNwYWludDJfbGluZWFyKVwiXG4gICAgICAgIH1cbiAgICAgICksXG4gICAgICAvKiBAX19QVVJFX18gKi8gYyhcbiAgICAgICAgXCJwYXRoXCIsXG4gICAgICAgIHtcbiAgICAgICAgICBzdHlsZTogeyBtaXhCbGVuZE1vZGU6IFwibXVsdGlwbHlcIiB9LFxuICAgICAgICAgIGQ6IFwiTTIyNC40ODQgMTMxLjY1OUMyMjcuOTMgMTI4Ljk0NSAyNzAuOTQzIDc1LjIzNjUgMjU3LjM1NSA1OC40Njk3QzI1Ny4zNTMgNTguNDUzOCAyNTcuMzUzIDU4LjQzNzcgMjU3LjM1NSA1OC40MjE3QzI1Ny4yNDkgNTguMjMxNSAyNTcuMTIgNTguMDU1MiAyNTYuOTcgNTcuODk2OUMyNDcuMzI4IDQ3LjcwMDUgMjA4LjkzMyAzNi40Mjg4IDE2NS40ODIgMzQuMzUxN0MxMjUuMzc0IDMyLjQzMTUgMTA3LjE1MiAzOC4xOTIyIDEwNC4wMzQgNTYuMTE0M0MxMDEuNTg5IDcxLjQ3NiAxMTkuMTE4IDgyLjY5MzMgMTUwLjU2MSA5Mi4wMzUyQzE4MC4yNTEgMTAwLjg2MiAyMzIuMDI3IDExMS43MTcgMjI0LjQ4NCAxMzEuNjU5WlwiLFxuICAgICAgICAgIGZpbGw6IFwidXJsKCNwYWludDNfbGluZWFyKVwiXG4gICAgICAgIH1cbiAgICAgICksXG4gICAgICAvKiBAX19QVVJFX18gKi8gZTEoXCJkZWZzXCIsIHsgY2hpbGRyZW46IFtcbiAgICAgICAgLyogQF9fUFVSRV9fICovIGUxKFxuICAgICAgICAgIFwibGluZWFyR3JhZGllbnRcIixcbiAgICAgICAgICB7XG4gICAgICAgICAgICBpZDogXCJwYWludDBfbGluZWFyXCIsXG4gICAgICAgICAgICB4MTogXCIyMjUuNjU4XCIsXG4gICAgICAgICAgICB5MTogXCIxNTMuMzI1XCIsXG4gICAgICAgICAgICB4MjogXCI4Ny4zNjY5XCIsXG4gICAgICAgICAgICB5MjogXCIxNTMuMzI1XCIsXG4gICAgICAgICAgICBncmFkaWVudFVuaXRzOiBcInVzZXJTcGFjZU9uVXNlXCIsXG4gICAgICAgICAgICBjaGlsZHJlbjogW1xuICAgICAgICAgICAgICAvKiBAX19QVVJFX18gKi8gYyhcInN0b3BcIiwgeyBvZmZzZXQ6IFwiMC4wNlwiLCBzdG9wQ29sb3I6IFwiIzAwODM1NVwiIH0pLFxuICAgICAgICAgICAgICAvKiBAX19QVVJFX18gKi8gYyhcInN0b3BcIiwgeyBvZmZzZXQ6IFwiMC42OFwiLCBzdG9wQ29sb3I6IFwiIzFGQTRBM1wiIH0pXG4gICAgICAgICAgICBdXG4gICAgICAgICAgfVxuICAgICAgICApLFxuICAgICAgICAvKiBAX19QVVJFX18gKi8gZTEoXG4gICAgICAgICAgXCJsaW5lYXJHcmFkaWVudFwiLFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGlkOiBcInBhaW50MV9saW5lYXJcIixcbiAgICAgICAgICAgIHgxOiBcIjIwMS40MDJcIixcbiAgICAgICAgICAgIHkxOiBcIjE5Ny4wNzhcIixcbiAgICAgICAgICAgIHgyOiBcIjQ3LjQ2NDdcIixcbiAgICAgICAgICAgIHkyOiBcIjE5Ny4wNzhcIixcbiAgICAgICAgICAgIGdyYWRpZW50VW5pdHM6IFwidXNlclNwYWNlT25Vc2VcIixcbiAgICAgICAgICAgIGNoaWxkcmVuOiBbXG4gICAgICAgICAgICAgIC8qIEBfX1BVUkVfXyAqLyBjKFwic3RvcFwiLCB7IHN0b3BDb2xvcjogXCIjMDA5NjQwXCIgfSksXG4gICAgICAgICAgICAgIC8qIEBfX1BVUkVfXyAqLyBjKFwic3RvcFwiLCB7IG9mZnNldDogXCIxXCIsIHN0b3BDb2xvcjogXCIjRDhEQTAwXCIgfSlcbiAgICAgICAgICAgIF1cbiAgICAgICAgICB9XG4gICAgICAgICksXG4gICAgICAgIC8qIEBfX1BVUkVfXyAqLyBlMShcbiAgICAgICAgICBcImxpbmVhckdyYWRpZW50XCIsXG4gICAgICAgICAge1xuICAgICAgICAgICAgaWQ6IFwicGFpbnQyX2xpbmVhclwiLFxuICAgICAgICAgICAgeDE6IFwiLTMuNDA4NDZcIixcbiAgICAgICAgICAgIHkxOiBcIjEwOC45MTdcIixcbiAgICAgICAgICAgIHgyOiBcIjI2My4zMzNcIixcbiAgICAgICAgICAgIHkyOiBcIjEwOC45MTdcIixcbiAgICAgICAgICAgIGdyYWRpZW50VW5pdHM6IFwidXNlclNwYWNlT25Vc2VcIixcbiAgICAgICAgICAgIGNoaWxkcmVuOiBbXG4gICAgICAgICAgICAgIC8qIEBfX1BVUkVfXyAqLyBjKFwic3RvcFwiLCB7IHN0b3BDb2xvcjogXCIjMDA4NzVDXCIgfSksXG4gICAgICAgICAgICAgIC8qIEBfX1BVUkVfXyAqLyBjKFwic3RvcFwiLCB7IG9mZnNldDogXCIwLjgzXCIsIHN0b3BDb2xvcjogXCIjODZCQzI1XCIgfSlcbiAgICAgICAgICAgIF1cbiAgICAgICAgICB9XG4gICAgICAgICksXG4gICAgICAgIC8qIEBfX1BVUkVfXyAqLyBlMShcbiAgICAgICAgICBcImxpbmVhckdyYWRpZW50XCIsXG4gICAgICAgICAge1xuICAgICAgICAgICAgaWQ6IFwicGFpbnQzX2xpbmVhclwiLFxuICAgICAgICAgICAgeDE6IFwiMTAzLjgyNlwiLFxuICAgICAgICAgICAgeTE6IFwiODIuODI3N1wiLFxuICAgICAgICAgICAgeDI6IFwiMjYwLjAwMVwiLFxuICAgICAgICAgICAgeTI6IFwiODIuODI3N1wiLFxuICAgICAgICAgICAgZ3JhZGllbnRVbml0czogXCJ1c2VyU3BhY2VPblVzZVwiLFxuICAgICAgICAgICAgY2hpbGRyZW46IFtcbiAgICAgICAgICAgICAgLyogQF9fUFVSRV9fICovIGMoXCJzdG9wXCIsIHsgc3RvcENvbG9yOiBcIiNCOUNFMDBcIiB9KSxcbiAgICAgICAgICAgICAgLyogQF9fUFVSRV9fICovIGMoXCJzdG9wXCIsIHsgb2Zmc2V0OiBcIjAuNzFcIiwgc3RvcENvbG9yOiBcIiMwMDdCM0RcIiB9KVxuICAgICAgICAgICAgXVxuICAgICAgICAgIH1cbiAgICAgICAgKVxuICAgICAgXSB9KVxuICAgIF1cbiAgfVxuKSwgckogPSAoKSA9PiAvKiBAX19QVVJFX18gKi8gZTEoXG4gIFwic3ZnXCIsXG4gIHtcbiAgICB3aWR0aDogXCIyNjBcIixcbiAgICBoZWlnaHQ6IFwiMjYwXCIsXG4gICAgdmlld0JveDogXCIwIDAgMjYwIDI2MFwiLFxuICAgIGZpbGw6IFwibm9uZVwiLFxuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgY2hpbGRyZW46IFtcbiAgICAgIC8qIEBfX1BVUkVfXyAqLyBjKFxuICAgICAgICBcInBhdGhcIixcbiAgICAgICAge1xuICAgICAgICAgIHN0eWxlOiB7IG1peEJsZW5kTW9kZTogXCJtdWx0aXBseVwiIH0sXG4gICAgICAgICAgZDogXCJNMjIzLjUwMyAxNTAuODI4QzIxNC44NjMgMTYxLjY4IDIwNC44OTcgMTcxLjQwNyAxOTMuODM2IDE3OS43NzlDMTg0LjUyNyAxNzIuNzA4IDE3Mi45MzEgMTY4LjUwOCAxNjEuOTQzIDE2NC44MDdDMTQ2LjM4NCAxNTkuNTU2IDEzMC4zODUgMTU1LjYwNiAxMTQuMzM3IDE1Mi4xMzVDOTYuNDYzMyAxNDguMjcgNzguNDM4NiAxNDUuMDg4IDYwLjM1MjQgMTQyLjM4OUM0Mi44OTAzIDEzOS43ODIgMTIuNzQ5NyAxMzYuNjc3IDkuNTYxNjEgMTM0LjAyMUM0LjgxNzk0IDEzMC4wNjcgLTEuMzU4MzcgNzQuNzk0MSAwLjI2NDg3NCA3Ni4zODA0QzEyLjIxNzggODguMDY1OSAyMzcuNzQxIDEzNC41NTMgMjIzLjUwMyAxNTAuODI4WlwiLFxuICAgICAgICAgIGZpbGw6IFwidXJsKCNwYWludDBfbGluZWFyKVwiXG4gICAgICAgIH1cbiAgICAgICksXG4gICAgICAvKiBAX19QVVJFX18gKi8gYyhcbiAgICAgICAgXCJwYXRoXCIsXG4gICAgICAgIHtcbiAgICAgICAgICBzdHlsZTogeyBtaXhCbGVuZE1vZGU6IFwibXVsdGlwbHlcIiB9LFxuICAgICAgICAgIGQ6IFwiTTE0Mi4wMzQgMjA2LjE1NEMxNzQuMTgzIDE5Ni40MTYgMjAyLjYwMiAxNzcuMTEzIDIyMy41MDMgMTUwLjgxNkMyMDIuODc4IDE3Mi4yMjIgMTIxLjA5MiAxNzIuNTE0IDk4LjAxODkgMTcyLjI3MkM3MC43ODk3IDE3Mi4wMDcgNTEuNjQ5IDE2OS4xMzMgNDkuNjQ0NiAxODIuOTY3QzQ2Ljk0NTMgMjAxLjY1MyAxMTQuNjczIDIxMi42OCAxNDIuMDM0IDIwNi4xNTRaXCIsXG4gICAgICAgICAgZmlsbDogXCJ1cmwoI3BhaW50MV9saW5lYXIpXCJcbiAgICAgICAgfVxuICAgICAgKSxcbiAgICAgIC8qIEBfX1BVUkVfXyAqLyBjKFxuICAgICAgICBcInBhdGhcIixcbiAgICAgICAge1xuICAgICAgICAgIHN0eWxlOiB7IG1peEJsZW5kTW9kZTogXCJtdWx0aXBseVwiIH0sXG4gICAgICAgICAgZDogXCJNMjU5Ljk5NiA3Ni4yMzI5QzI1OS43NSA2MS40MzkzIDI0Ni45MyA1Mi4wNzE4IDIyMy4yNDggNTIuMDAxMUMxNzQuMTgyIDUxLjg1OTcgMTcuMTMwNiA2NS4wMzkzIDAuMjMxMDUzIDc2LjQxMTJDMC4yMDY0NTkgNzYuNDI5NyAwLjE3MjY0MSA3Ni40MTEyIDAuMTMyNjc1IDc2LjQxMTJDLTAuOTIxODE2IDc4LjI2ODEgNC41OTA0NCAxMjYuODYxIDkuMTA5NjggMTMzLjQ5NUw5LjU2MTYxIDEzMy44NDZDNi4zNzM1NCAxMjguNzA4IDE0NC4yNjkgMTE5LjQ2NCAyMjEuMTQ1IDEwNi4wNjZDMjUwLjg2NSAxMDAuODgzIDI2MC4yMzUgOTAuNTI4NSAyNTkuOTk2IDc2LjIzMjlaXCIsXG4gICAgICAgICAgZmlsbDogXCJ1cmwoI3BhaW50Ml9saW5lYXIpXCJcbiAgICAgICAgfVxuICAgICAgKSxcbiAgICAgIC8qIEBfX1BVUkVfXyAqLyBlMShcImRlZnNcIiwgeyBjaGlsZHJlbjogW1xuICAgICAgICAvKiBAX19QVVJFX18gKi8gZTEoXG4gICAgICAgICAgXCJsaW5lYXJHcmFkaWVudFwiLFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGlkOiBcInBhaW50MF9saW5lYXJcIixcbiAgICAgICAgICAgIHgxOiBcIjAuMDAwNDgyNTE2XCIsXG4gICAgICAgICAgICB5MTogXCIxMjguMDYzXCIsXG4gICAgICAgICAgICB4MjogXCIyMjQuMTU1XCIsXG4gICAgICAgICAgICB5MjogXCIxMjguMDYzXCIsXG4gICAgICAgICAgICBncmFkaWVudFVuaXRzOiBcInVzZXJTcGFjZU9uVXNlXCIsXG4gICAgICAgICAgICBjaGlsZHJlbjogW1xuICAgICAgICAgICAgICAvKiBAX19QVVJFX18gKi8gYyhcInN0b3BcIiwgeyBvZmZzZXQ6IFwiMC4xOFwiLCBzdG9wQ29sb3I6IFwiIzAwNzE2NFwiIH0pLFxuICAgICAgICAgICAgICAvKiBAX19QVVJFX18gKi8gYyhcInN0b3BcIiwgeyBvZmZzZXQ6IFwiMVwiLCBzdG9wQ29sb3I6IFwiIzAwQUNBMVwiIH0pXG4gICAgICAgICAgICBdXG4gICAgICAgICAgfVxuICAgICAgICApLFxuICAgICAgICAvKiBAX19QVVJFX18gKi8gZTEoXG4gICAgICAgICAgXCJsaW5lYXJHcmFkaWVudFwiLFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGlkOiBcInBhaW50MV9saW5lYXJcIixcbiAgICAgICAgICAgIHgxOiBcIjQ5LjU2NzdcIixcbiAgICAgICAgICAgIHkxOiBcIjE3OS40MzVcIixcbiAgICAgICAgICAgIHgyOiBcIjIyMy41MVwiLFxuICAgICAgICAgICAgeTI6IFwiMTc5LjQzNVwiLFxuICAgICAgICAgICAgZ3JhZGllbnRVbml0czogXCJ1c2VyU3BhY2VPblVzZVwiLFxuICAgICAgICAgICAgY2hpbGRyZW46IFtcbiAgICAgICAgICAgICAgLyogQF9fUFVSRV9fICovIGMoXCJzdG9wXCIsIHsgc3RvcENvbG9yOiBcIiNDRkQ2MDBcIiB9KSxcbiAgICAgICAgICAgICAgLyogQF9fUFVSRV9fICovIGMoXCJzdG9wXCIsIHsgb2Zmc2V0OiBcIjFcIiwgc3RvcENvbG9yOiBcIiMwMDk2NDBcIiB9KVxuICAgICAgICAgICAgXVxuICAgICAgICAgIH1cbiAgICAgICAgKSxcbiAgICAgICAgLyogQF9fUFVSRV9fICovIGUxKFxuICAgICAgICAgIFwibGluZWFyR3JhZGllbnRcIixcbiAgICAgICAgICB7XG4gICAgICAgICAgICBpZDogXCJwYWludDJfbGluZWFyXCIsXG4gICAgICAgICAgICB4MTogXCI3NS4wMDQ2XCIsXG4gICAgICAgICAgICB5MTogXCI5My4zNzUzXCIsXG4gICAgICAgICAgICB4MjogXCIxOTQuMjc5XCIsXG4gICAgICAgICAgICB5MjogXCI5Mi4wMjg3XCIsXG4gICAgICAgICAgICBncmFkaWVudFVuaXRzOiBcInVzZXJTcGFjZU9uVXNlXCIsXG4gICAgICAgICAgICBjaGlsZHJlbjogW1xuICAgICAgICAgICAgICAvKiBAX19QVVJFX18gKi8gYyhcInN0b3BcIiwgeyBzdG9wQ29sb3I6IFwiIzAwODMzRVwiIH0pLFxuICAgICAgICAgICAgICAvKiBAX19QVVJFX18gKi8gYyhcInN0b3BcIiwgeyBvZmZzZXQ6IFwiMC4yNVwiLCBzdG9wQ29sb3I6IFwiIzIwOTAzOFwiIH0pLFxuICAgICAgICAgICAgICAvKiBAX19QVVJFX18gKi8gYyhcInN0b3BcIiwgeyBvZmZzZXQ6IFwiMC43OFwiLCBzdG9wQ29sb3I6IFwiIzcxQjIyOFwiIH0pLFxuICAgICAgICAgICAgICAvKiBAX19QVVJFX18gKi8gYyhcInN0b3BcIiwgeyBvZmZzZXQ6IFwiMC45N1wiLCBzdG9wQ29sb3I6IFwiIzhFQkUyMlwiIH0pLFxuICAgICAgICAgICAgICAvKiBAX19QVVJFX18gKi8gYyhcInN0b3BcIiwgeyBvZmZzZXQ6IFwiMVwiLCBzdG9wQ29sb3I6IFwiIzkyQzAyMFwiIH0pXG4gICAgICAgICAgICBdXG4gICAgICAgICAgfVxuICAgICAgICApXG4gICAgICBdIH0pXG4gICAgXVxuICB9XG4pLCBuSiA9ICgpID0+IC8qIEBfX1BVUkVfXyAqLyBlMShcbiAgXCJzdmdcIixcbiAge1xuICAgIHdpZHRoOiBcIjI2MFwiLFxuICAgIGhlaWdodDogXCIyNjBcIixcbiAgICB2aWV3Qm94OiBcIjAgMCAyNjAgMjYwXCIsXG4gICAgZmlsbDogXCJub25lXCIsXG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICBjaGlsZHJlbjogW1xuICAgICAgLyogQF9fUFVSRV9fICovIGMoXG4gICAgICAgIFwicGF0aFwiLFxuICAgICAgICB7XG4gICAgICAgICAgc3R5bGU6IHsgbWl4QmxlbmRNb2RlOiBcIm11bHRpcGx5XCIgfSxcbiAgICAgICAgICBkOiBcIk0yMjMuNTI4IDIyNy40NjRDMjAxLjA2OCAyMjMuNDc4IDE2NS40MTcgMjE1LjUwOSAxNjguODk2IDE5MC4wN0MxNzEuNTc0IDE3MC40ODUgMjAzLjk3OSAxNjQuNzc1IDIxNy41MiAxNjEuNjE4QzIyOC4yNzEgMTU5LjExOCAyNTYuOTQ0IDE1NS42NjMgMjU5Ljg1OSAxNTEuMDk3QzI1OS44NTkgMTUxLjA5NyAyNTkuODU5IDE1MS4wOTcgMjU5Ljg1OSAxNTEuMTIxQzI1OS45MDggMTUyLjI0NiAyNTkuOTQ0IDE1My4zNzYgMjU5Ljk2OCAxNTQuNTEyVjE1NC43MTNDMjU5Ljk5MiAxNTUuNzggMjYwIDE1Ni44NTEgMjYwIDE1Ny45MzRDMjYwIDE4Mi40MTUgMjU0LjQ5NiAyMDUuMzM4IDI0NC45MDEgMjI1LjAwOEMyNDQuNzc2IDIyNS4yNTMgMjQ0LjY1MSAyMjUuNTAzIDI0NC41MjIgMjI1Ljc0OUMyNDMuMzYzIDIyNy45ODcgMjM1LjU5NSAyMjkuNjA2IDIyMy41MjggMjI3LjQ2NFpcIixcbiAgICAgICAgICBmaWxsOiBcInVybCgjcGFpbnQwX2xpbmVhcilcIlxuICAgICAgICB9XG4gICAgICApLFxuICAgICAgLyogQF9fUFVSRV9fICovIGMoXG4gICAgICAgIFwicGF0aFwiLFxuICAgICAgICB7XG4gICAgICAgICAgc3R5bGU6IHsgbWl4QmxlbmRNb2RlOiBcIm11bHRpcGx5XCIgfSxcbiAgICAgICAgICBkOiBcIk0yNTkuOTY4IDE1NC43MTNWMTU0LjUxMkMyNTkuOTY4IDE1My43MzQgMjU5LjkyNyAxNTIuOTU3IDI1OS44OTkgMTUyLjE4NEMyNTkuOTMgMTUxLjgzOSAyNTkuOTE4IDE1MS40OTIgMjU5Ljg2MyAxNTEuMTQ5QzI1NS41MzkgMTM3LjE3MyAxOTAuMzQxIDEyMC41NDggMTQ2LjU0NSAxMTIuMjY1QzkxLjE3MjMgMTAxLjgxMyA3LjczODg1IDkwLjggMTEuNjc2OCA2OS4yNjIyQzguNTg4NDQgNzQuMjE0OCA0LjM4MDczIDgzLjc1NzcgMy4zMDk2OCA4OS41NTk5Qy0yLjU2OTAzIDEyMS41MyAzLjM1OCAxMjkuNTM5IDcuODIzNCAxMzMuMTU1TDguMDYwOTcgMTMzLjM0OEM1Ni4yNjI0IDE1NS42MzUgMjczLjQwOCAxNjAuNzI5IDI0NC4zMjEgMjI1Ljk1OEwyNDQuMjk3IDIyNi4wMTRDMjQ0LjM4MSAyMjUuOTI1IDI0NC40NTYgMjI1LjgyNyAyNDQuNTE4IDIyNS43MkwyNDQuODk3IDIyNC45OEMyNTQuNDkyIDIwNS4zMSAyNTkuOTk2IDE4Mi4zODcgMjU5Ljk5NiAxNTcuOTA2QzI2MCAxNTYuODM1IDI1OS45OTIgMTU1Ljc4IDI1OS45NjggMTU0LjcxM1pcIixcbiAgICAgICAgICBmaWxsOiBcInVybCgjcGFpbnQxX2xpbmVhcilcIlxuICAgICAgICB9XG4gICAgICApLFxuICAgICAgLyogQF9fUFVSRV9fICovIGMoXG4gICAgICAgIFwicGF0aFwiLFxuICAgICAgICB7XG4gICAgICAgICAgc3R5bGU6IHsgbWl4QmxlbmRNb2RlOiBcIm11bHRpcGx5XCIgfSxcbiAgICAgICAgICBkOiBcIk0yNTYuMjUxIDYzLjI1ODdDMjUyLjEzMiA0My43NzQ0IDIyMi4wNDYgMzUuOTc5IDE4Ni44OTUgMzIuNDYzOUM4Ny42ODEzIDIyLjU0MjUgMzQuMDM2IDQ0LjI2NTYgMTIuNzY0IDY3LjYwMzNDOS4xMDM4NiA3Mi45NzA2IDUuMDYxMjQgODIuNTg1OSAzLjMxMzczIDg5LjU1OTlDLTQuMzk3MDUgMTIwLjM2MyAzLjE4ODkxIDEyOC45NjcgNy41MTc0MSAxMzIuODg5QzUuNDc1OTcgMTMwLjE4MyA1LjE3ODAxIDEyNy45NjEgNC45NDA0NCAxMjUuNDMyQzIuMjcwODYgOTcuNDM1NyAxMDQuNjA1IDgwLjk5NTUgMjEzLjE0MyAxMDEuOTU3QzI1Mi45NjIgMTA5LjY1MiAyNjAuMzc0IDgyLjc0NyAyNTYuMjUxIDYzLjI1ODdaXCIsXG4gICAgICAgICAgZmlsbDogXCJ1cmwoI3BhaW50Ml9saW5lYXIpXCJcbiAgICAgICAgfVxuICAgICAgKSxcbiAgICAgIC8qIEBfX1BVUkVfXyAqLyBlMShcImRlZnNcIiwgeyBjaGlsZHJlbjogW1xuICAgICAgICAvKiBAX19QVVJFX18gKi8gZTEoXG4gICAgICAgICAgXCJsaW5lYXJHcmFkaWVudFwiLFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGlkOiBcInBhaW50MF9saW5lYXJcIixcbiAgICAgICAgICAgIHgxOiBcIjE2OC42NTlcIixcbiAgICAgICAgICAgIHkxOiBcIjE4OS43ODRcIixcbiAgICAgICAgICAgIHgyOiBcIjI2NS4xOThcIixcbiAgICAgICAgICAgIHkyOiBcIjE4OS43ODRcIixcbiAgICAgICAgICAgIGdyYWRpZW50VW5pdHM6IFwidXNlclNwYWNlT25Vc2VcIixcbiAgICAgICAgICAgIGNoaWxkcmVuOiBbXG4gICAgICAgICAgICAgIC8qIEBfX1BVUkVfXyAqLyBjKFwic3RvcFwiLCB7IHN0b3BDb2xvcjogXCIjMDA5NjQwXCIgfSksXG4gICAgICAgICAgICAgIC8qIEBfX1BVUkVfXyAqLyBjKFwic3RvcFwiLCB7IG9mZnNldDogXCIwLjc2XCIsIHN0b3BDb2xvcjogXCIjMDA3MDNCXCIgfSlcbiAgICAgICAgICAgIF1cbiAgICAgICAgICB9XG4gICAgICAgICksXG4gICAgICAgIC8qIEBfX1BVUkVfXyAqLyBlMShcbiAgICAgICAgICBcImxpbmVhckdyYWRpZW50XCIsXG4gICAgICAgICAge1xuICAgICAgICAgICAgaWQ6IFwicGFpbnQxX2xpbmVhclwiLFxuICAgICAgICAgICAgeDE6IFwiMjAuODE3XCIsXG4gICAgICAgICAgICB5MTogXCIxNDcuNjQ2XCIsXG4gICAgICAgICAgICB4MjogXCIyMTcuNDY0XCIsXG4gICAgICAgICAgICB5MjogXCIxNDcuNjQ2XCIsXG4gICAgICAgICAgICBncmFkaWVudFVuaXRzOiBcInVzZXJTcGFjZU9uVXNlXCIsXG4gICAgICAgICAgICBjaGlsZHJlbjogW1xuICAgICAgICAgICAgICAvKiBAX19QVVJFX18gKi8gYyhcInN0b3BcIiwgeyBzdG9wQ29sb3I6IFwiI0NGRDYwMFwiIH0pLFxuICAgICAgICAgICAgICAvKiBAX19QVVJFX18gKi8gYyhcInN0b3BcIiwgeyBvZmZzZXQ6IFwiMVwiLCBzdG9wQ29sb3I6IFwiIzAwODMzRVwiIH0pXG4gICAgICAgICAgICBdXG4gICAgICAgICAgfVxuICAgICAgICApLFxuICAgICAgICAvKiBAX19QVVJFX18gKi8gZTEoXG4gICAgICAgICAgXCJsaW5lYXJHcmFkaWVudFwiLFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGlkOiBcInBhaW50Ml9saW5lYXJcIixcbiAgICAgICAgICAgIHgxOiBcIjguMTY1NjhcIixcbiAgICAgICAgICAgIHkxOiBcIjgxLjQ0MjRcIixcbiAgICAgICAgICAgIHgyOiBcIjI2NC40NDFcIixcbiAgICAgICAgICAgIHkyOiBcIjgxLjQ0MjRcIixcbiAgICAgICAgICAgIGdyYWRpZW50VW5pdHM6IFwidXNlclNwYWNlT25Vc2VcIixcbiAgICAgICAgICAgIGNoaWxkcmVuOiBbXG4gICAgICAgICAgICAgIC8qIEBfX1BVUkVfXyAqLyBjKFwic3RvcFwiLCB7IHN0b3BDb2xvcjogXCIjMDA4MzNFXCIgfSksXG4gICAgICAgICAgICAgIC8qIEBfX1BVUkVfXyAqLyBjKFwic3RvcFwiLCB7IG9mZnNldDogXCIwLjIxXCIsIHN0b3BDb2xvcjogXCIjMjA5MDM4XCIgfSksXG4gICAgICAgICAgICAgIC8qIEBfX1BVUkVfXyAqLyBjKFwic3RvcFwiLCB7IG9mZnNldDogXCIwLjY4XCIsIHN0b3BDb2xvcjogXCIjNzFCMjI4XCIgfSksXG4gICAgICAgICAgICAgIC8qIEBfX1BVUkVfXyAqLyBjKFwic3RvcFwiLCB7IG9mZnNldDogXCIwLjg0XCIsIHN0b3BDb2xvcjogXCIjOEVCRTIyXCIgfSlcbiAgICAgICAgICAgIF1cbiAgICAgICAgICB9XG4gICAgICAgIClcbiAgICAgIF0gfSlcbiAgICBdXG4gIH1cbiksIGlKID0gKCkgPT4gLyogQF9fUFVSRV9fICovIGUxKFxuICBcInN2Z1wiLFxuICB7XG4gICAgd2lkdGg6IFwiMjYwXCIsXG4gICAgaGVpZ2h0OiBcIjI2MFwiLFxuICAgIHZpZXdCb3g6IFwiMCAwIDI2MCAyNjBcIixcbiAgICBmaWxsOiBcIm5vbmVcIixcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIGNoaWxkcmVuOiBbXG4gICAgICAvKiBAX19QVVJFX18gKi8gYyhcbiAgICAgICAgXCJwYXRoXCIsXG4gICAgICAgIHtcbiAgICAgICAgICBkOiBcIk05Ny42NjY5IDc5Ljk5MzlDMTAyLjcwOCA5Ni4wMzQyIDEyNC4xMjEgOTQuMjY2MiAxNDcuMDIgOTIuMzg5N0MxNzUuMDIyIDkwLjA4OTQgMjM4Ljk5NiA5MC4wMDcyIDI1OC41OTkgMTEzLjQyMkwyNTcuODIgMTEyLjM0NEMyMzkuOTI0IDg3Ljg0NzkgMjE2LjAxNSA2OC4zOCAxODguNDAxIDU1LjgyMDJDMTY3LjQ0OCA0Ny4zOTc1IDE0NC45NTMgNDkuNDY0NSAxMzAuMDMzIDUzLjU5NTRDMTE1LjExNCA1Ny43MjYyIDkyLjYxNiA2My45MjQxIDk3LjY2NjkgNzkuOTkzOVpcIixcbiAgICAgICAgICBmaWxsOiBcInVybCgjcGFpbnQwX2xpbmVhcilcIlxuICAgICAgICB9XG4gICAgICApLFxuICAgICAgLyogQF9fUFVSRV9fICovIGMoXG4gICAgICAgIFwicGF0aFwiLFxuICAgICAgICB7XG4gICAgICAgICAgc3R5bGU6IHsgbWl4QmxlbmRNb2RlOiBcIm11bHRpcGx5XCIgfSxcbiAgICAgICAgICBkOiBcIk0xMS44Mjk4IDEyOS42MTdDNy42NDMwNiAxMzAuNDQ1IC0yLjgwNzI3IDE3Mi45MDcgMC43MTIzMTkgMTc3LjEyNkMwLjcxMjMxOSAxNzcuMTI2IDE4LjIyMTUgMTc5LjAxOSA1MS45NzgxIDE3Ni4yNTVDMTYzLjcyOCAxNjcuMTAzIDI3My42NjYgMTM5LjEyMSAyNTguNjEyIDExMy40MjhDMjU4LjM1NiAxMTMuMDc0IDI1OC4wOTkgMTEyLjcxNSAyNTcuODM2IDExMi4zNTdDMjUwLjE4MiAxMDEuODg1IDI0MS4zOTkgOTIuMjg3NCAyMzEuNjQ1IDgzLjczNzFDMjExLjMwNiAxMzIuMzQ0IDE2LjgxMTcgMTI5LjYxNyAxMS44Mjk4IDEyOS42MTdaXCIsXG4gICAgICAgICAgZmlsbDogXCJ1cmwoI3BhaW50MV9saW5lYXIpXCJcbiAgICAgICAgfVxuICAgICAgKSxcbiAgICAgIC8qIEBfX1BVUkVfXyAqLyBjKFxuICAgICAgICBcInBhdGhcIixcbiAgICAgICAge1xuICAgICAgICAgIHN0eWxlOiB7IG1peEJsZW5kTW9kZTogXCJtdWx0aXBseVwiIH0sXG4gICAgICAgICAgZDogXCJNMjA3LjgzNiAxNzAuMzE3QzIwNS4xMzggMTQ3LjE1OSAxNzIuNDkyIDE1MC4wMDEgMTI3LjI0NyAxNDUuNjExQzEwMi4yNzEgMTQzLjE4NiAzNC4xMjcxIDEzNy43NyAxMS42MjYgMTI5LjY4OUM3LjQ3NTQ4IDEzMS43MTMgLTEuOTk4ODMgMTY5LjkxIDAuMzc3MTQgMTc2LjQ5OUwwLjY3NjE5MSAxNzcuMDc3TDAuNzEyMzQgMTc3LjEyNlYxNzcuMTQ2TDAuNzQ4NDg4IDE3Ny4yMThDMTMuNjUzNyAyMDEuODI2IDEyNC42NjcgMjEzLjYzIDE2NS42NDMgMjA1Ljg4NEMxOTQuMDQzIDIwMC41MTEgMjA5LjU0OCAxODUuMDI2IDIwNy44MzYgMTcwLjMxN1pcIixcbiAgICAgICAgICBmaWxsOiBcInVybCgjcGFpbnQyX2xpbmVhcilcIlxuICAgICAgICB9XG4gICAgICApLFxuICAgICAgLyogQF9fUFVSRV9fICovIGUxKFwiZGVmc1wiLCB7IGNoaWxkcmVuOiBbXG4gICAgICAgIC8qIEBfX1BVUkVfXyAqLyBlMShcbiAgICAgICAgICBcImxpbmVhckdyYWRpZW50XCIsXG4gICAgICAgICAge1xuICAgICAgICAgICAgaWQ6IFwicGFpbnQwX2xpbmVhclwiLFxuICAgICAgICAgICAgeDE6IFwiOTYuOTQwN1wiLFxuICAgICAgICAgICAgeTE6IFwiODEuNzEyN1wiLFxuICAgICAgICAgICAgeDI6IFwiMjU4LjU5OVwiLFxuICAgICAgICAgICAgeTI6IFwiODEuNzEyN1wiLFxuICAgICAgICAgICAgZ3JhZGllbnRVbml0czogXCJ1c2VyU3BhY2VPblVzZVwiLFxuICAgICAgICAgICAgY2hpbGRyZW46IFtcbiAgICAgICAgICAgICAgLyogQF9fUFVSRV9fICovIGMoXCJzdG9wXCIsIHsgc3RvcENvbG9yOiBcIiMxM0E1MzhcIiB9KSxcbiAgICAgICAgICAgICAgLyogQF9fUFVSRV9fICovIGMoXCJzdG9wXCIsIHsgb2Zmc2V0OiBcIjFcIiwgc3RvcENvbG9yOiBcIiNBREM5MEVcIiB9KVxuICAgICAgICAgICAgXVxuICAgICAgICAgIH1cbiAgICAgICAgKSxcbiAgICAgICAgLyogQF9fUFVSRV9fICovIGUxKFxuICAgICAgICAgIFwibGluZWFyR3JhZGllbnRcIixcbiAgICAgICAgICB7XG4gICAgICAgICAgICBpZDogXCJwYWludDFfbGluZWFyXCIsXG4gICAgICAgICAgICB4MTogXCItMC4wMDA4MDA0MDNcIixcbiAgICAgICAgICAgIHkxOiBcIjEzMC43NDdcIixcbiAgICAgICAgICAgIHgyOiBcIjI1OS45ODlcIixcbiAgICAgICAgICAgIHkyOiBcIjEzMC43NDdcIixcbiAgICAgICAgICAgIGdyYWRpZW50VW5pdHM6IFwidXNlclNwYWNlT25Vc2VcIixcbiAgICAgICAgICAgIGNoaWxkcmVuOiBbXG4gICAgICAgICAgICAgIC8qIEBfX1BVUkVfXyAqLyBjKFwic3RvcFwiLCB7IG9mZnNldDogXCIwLjI1XCIsIHN0b3BDb2xvcjogXCIjMDA5QkFDXCIgfSksXG4gICAgICAgICAgICAgIC8qIEBfX1BVUkVfXyAqLyBjKFwic3RvcFwiLCB7IG9mZnNldDogXCIwLjYzXCIsIHN0b3BDb2xvcjogXCIjMDA5OTk2XCIgfSksXG4gICAgICAgICAgICAgIC8qIEBfX1BVUkVfXyAqLyBjKFwic3RvcFwiLCB7IG9mZnNldDogXCIxXCIsIHN0b3BDb2xvcjogXCIjMDA3RjU5XCIgfSlcbiAgICAgICAgICAgIF1cbiAgICAgICAgICB9XG4gICAgICAgICksXG4gICAgICAgIC8qIEBfX1BVUkVfXyAqLyBlMShcbiAgICAgICAgICBcImxpbmVhckdyYWRpZW50XCIsXG4gICAgICAgICAge1xuICAgICAgICAgICAgaWQ6IFwicGFpbnQyX2xpbmVhclwiLFxuICAgICAgICAgICAgeDE6IFwiMTcuMDQxOFwiLFxuICAgICAgICAgICAgeTE6IFwiMjA3Ljk0NVwiLFxuICAgICAgICAgICAgeDI6IFwiMTgyLjc5OFwiLFxuICAgICAgICAgICAgeTI6IFwiMTIwLjA0XCIsXG4gICAgICAgICAgICBncmFkaWVudFVuaXRzOiBcInVzZXJTcGFjZU9uVXNlXCIsXG4gICAgICAgICAgICBjaGlsZHJlbjogW1xuICAgICAgICAgICAgICAvKiBAX19QVVJFX18gKi8gYyhcInN0b3BcIiwgeyBvZmZzZXQ6IFwiMC41OFwiLCBzdG9wQ29sb3I6IFwiIzAwNzQzMVwiIH0pLFxuICAgICAgICAgICAgICAvKiBAX19QVVJFX18gKi8gYyhcInN0b3BcIiwgeyBvZmZzZXQ6IFwiMVwiLCBzdG9wQ29sb3I6IFwiI0E1QzcxNVwiIH0pXG4gICAgICAgICAgICBdXG4gICAgICAgICAgfVxuICAgICAgICApXG4gICAgICBdIH0pXG4gICAgXVxuICB9XG4pLCBhSiA9ICgpID0+IC8qIEBfX1BVUkVfXyAqLyBlMShcbiAgXCJzdmdcIixcbiAge1xuICAgIHdpZHRoOiBcIjI2MFwiLFxuICAgIGhlaWdodDogXCIyNjBcIixcbiAgICB2aWV3Qm94OiBcIjAgMCAyNjAgMjYwXCIsXG4gICAgZmlsbDogXCJub25lXCIsXG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICBjaGlsZHJlbjogW1xuICAgICAgLyogQF9fUFVSRV9fICovIGMoXG4gICAgICAgIFwicGF0aFwiLFxuICAgICAgICB7XG4gICAgICAgICAgc3R5bGU6IHsgbWl4QmxlbmRNb2RlOiBcIm11bHRpcGx5XCIgfSxcbiAgICAgICAgICBkOiBcIk0yNTkuMyAxMjUuOTgxQzI1NC4yNzYgMTM3LjA2MSAyNDcuODgzIDE0Ny40NjggMjQwLjI3MiAxNTYuOTZDMTk3Ljc1NCAxMzguODExIDM0LjEwMTMgMTc3LjQwNyAyNi43MjcgMTcyLjE4QzI0LjM5NzcgMTY5LjYxNSAyMS4yNTQzIDE2Ni4yNTYgMTkuMDUxNiAxNjMuNTkyQzExLjQzMSAxNTMuMzMxIDExLjI4NzMgMTUzLjEyOSA4LjAxMDU2IDE0Ny4yMjJDMi4yOTE2NiAxMzUuNzA1IDIuMTc4NzkgMTM1LjQ4NiAwIDEyOS4wMzVDMCAxMjkuMDM1IDMzLjk2NDUgMTIwLjM1NSA2NC4wNjA2IDExNS4yNzVDMTk2LjY0NSA5Mi44OTU2IDI2Ny45MTYgMTA5LjA5MSAyNTkuMyAxMjUuOTgxWlwiLFxuICAgICAgICAgIGZpbGw6IFwidXJsKCNwYWludDBfbGluZWFyKVwiXG4gICAgICAgIH1cbiAgICAgICksXG4gICAgICAvKiBAX19QVVJFX18gKi8gYyhcbiAgICAgICAgXCJwYXRoXCIsXG4gICAgICAgIHtcbiAgICAgICAgICBzdHlsZTogeyBtaXhCbGVuZE1vZGU6IFwibXVsdGlwbHlcIiB9LFxuICAgICAgICAgIGQ6IFwiTTIwMS44NTUgMTkwLjQ5QzIyNy4xMiAxNzUuMzI3IDI0Ny4xNjQgMTUyLjgyNCAyNTkuMzE3IDEyNS45ODFDMjQ2LjM1NCAxNDguNTk3IDE3Ni44NTUgMTY2LjM0MiAxNTcuMTgxIDE3MS4xMDNDMTMzLjk3IDE3Ni43MTIgMTE3LjA3IDE3OC4zNTggMTE4LjMzNSAxOTAuNTcyQzEyMC4wMjIgMjA3LjAzNCAxNzkuOTk1IDIwMS45IDIwMS44NTUgMTkwLjQ5WlwiLFxuICAgICAgICAgIGZpbGw6IFwidXJsKCNwYWludDFfbGluZWFyKVwiXG4gICAgICAgIH1cbiAgICAgICksXG4gICAgICAvKiBAX19QVVJFX18gKi8gYyhcbiAgICAgICAgXCJwYXRoXCIsXG4gICAgICAgIHtcbiAgICAgICAgICBzdHlsZTogeyBtaXhCbGVuZE1vZGU6IFwibXVsdGlwbHlcIiB9LFxuICAgICAgICAgIGQ6IFwiTTIzNy42OCA4OS4xMzMyQzIyOS43MzEgOTUuNTEyMyAyMTYuODYgOTYuMzcwOCAyMDcuMTE1IDk4LjUxMTlDMTc0LjIyNSAxMDUuNzI5IDE0MS40NDQgMTEyLjIzMSAxMDkuMTE3IDEyMS44NjZDNDQuMjgzOCAxNDEuMTk4IDIzLjI1ODcgMTY0LjI5IDI2LjcyNyAxNzIuMThDMjQuMzk3NyAxNjkuNjE1IDIxLjI1NDMgMTY2LjI1NiAxOS4wNTE2IDE2My41OTJDMTEuNDMxIDE1My4zMzEgMTEuMjg3MyAxNTMuMTI5IDguMDEwNTYgMTQ3LjIyMkMyLjI5MTY2IDEzNS43MDUgMi4xNzg3OSAxMzUuNDg2IDAgMTI5LjAzNkMwIDEyOS4wMzYgMTIuMjYyMSAxMTIuMDg0IDUyLjcyODggOTEuMzYzM0M5OC45MTQ0IDY3LjcxNDcgMTUwLjc5OCA1Ny42ODI3IDIwMi40MTYgNTguMDA3NkMyMTEuNDA0IDU4LjA2NTggMjIxLjM2MSA1OC40MjE1IDIyOS43NDEgNjEuOTgyMUMyNDAuMzU1IDY2LjQ5MzYgMjQ4Ljc4NiA4MC4yMTI4IDIzNy42OCA4OS4xMzMyWlwiLFxuICAgICAgICAgIGZpbGw6IFwidXJsKCNwYWludDJfbGluZWFyKVwiXG4gICAgICAgIH1cbiAgICAgICksXG4gICAgICAvKiBAX19QVVJFX18gKi8gZTEoXCJkZWZzXCIsIHsgY2hpbGRyZW46IFtcbiAgICAgICAgLyogQF9fUFVSRV9fICovIGUxKFxuICAgICAgICAgIFwibGluZWFyR3JhZGllbnRcIixcbiAgICAgICAgICB7XG4gICAgICAgICAgICBpZDogXCJwYWludDBfbGluZWFyXCIsXG4gICAgICAgICAgICB4MTogXCIxMC40Nzk4XCIsXG4gICAgICAgICAgICB5MTogXCIxNzAuNjI0XCIsXG4gICAgICAgICAgICB4MjogXCIyNTYuNDk0XCIsXG4gICAgICAgICAgICB5MjogXCIxMDguNjQ3XCIsXG4gICAgICAgICAgICBncmFkaWVudFVuaXRzOiBcInVzZXJTcGFjZU9uVXNlXCIsXG4gICAgICAgICAgICBjaGlsZHJlbjogW1xuICAgICAgICAgICAgICAvKiBAX19QVVJFX18gKi8gYyhcInN0b3BcIiwgeyBzdG9wQ29sb3I6IFwiIzAwNzgzRFwiIH0pLFxuICAgICAgICAgICAgICAvKiBAX19QVVJFX18gKi8gYyhcInN0b3BcIiwgeyBvZmZzZXQ6IFwiMC4xMlwiLCBzdG9wQ29sb3I6IFwiIzA3N0IzQ1wiIH0pLFxuICAgICAgICAgICAgICAvKiBAX19QVVJFX18gKi8gYyhcInN0b3BcIiwgeyBvZmZzZXQ6IFwiMC4zXCIsIHN0b3BDb2xvcjogXCIjMUE4NTM3XCIgfSksXG4gICAgICAgICAgICAgIC8qIEBfX1BVUkVfXyAqLyBjKFwic3RvcFwiLCB7IG9mZnNldDogXCIwLjUxXCIsIHN0b3BDb2xvcjogXCIjMzk5NDMxXCIgfSksXG4gICAgICAgICAgICAgIC8qIEBfX1BVUkVfXyAqLyBjKFwic3RvcFwiLCB7IG9mZnNldDogXCIwLjc1XCIsIHN0b3BDb2xvcjogXCIjNjRBOTI4XCIgfSksXG4gICAgICAgICAgICAgIC8qIEBfX1BVUkVfXyAqLyBjKFwic3RvcFwiLCB7IG9mZnNldDogXCIxXCIsIHN0b3BDb2xvcjogXCIjOUFDMzFDXCIgfSlcbiAgICAgICAgICAgIF1cbiAgICAgICAgICB9XG4gICAgICAgICksXG4gICAgICAgIC8qIEBfX1BVUkVfXyAqLyBlMShcbiAgICAgICAgICBcImxpbmVhckdyYWRpZW50XCIsXG4gICAgICAgICAge1xuICAgICAgICAgICAgaWQ6IFwicGFpbnQxX2xpbmVhclwiLFxuICAgICAgICAgICAgeDE6IFwiMTE3LjVcIixcbiAgICAgICAgICAgIHkxOiBcIjE4Ny41NzdcIixcbiAgICAgICAgICAgIHgyOiBcIjI2NS40MzRcIixcbiAgICAgICAgICAgIHkyOiBcIjE1MC4zMDlcIixcbiAgICAgICAgICAgIGdyYWRpZW50VW5pdHM6IFwidXNlclNwYWNlT25Vc2VcIixcbiAgICAgICAgICAgIGNoaWxkcmVuOiBbXG4gICAgICAgICAgICAgIC8qIEBfX1BVUkVfXyAqLyBjKFwic3RvcFwiLCB7IHN0b3BDb2xvcjogXCIjMDA4NTNFXCIgfSksXG4gICAgICAgICAgICAgIC8qIEBfX1BVUkVfXyAqLyBjKFwic3RvcFwiLCB7IG9mZnNldDogXCIxXCIsIHN0b3BDb2xvcjogXCIjRDFENzAwXCIgfSlcbiAgICAgICAgICAgIF1cbiAgICAgICAgICB9XG4gICAgICAgICksXG4gICAgICAgIC8qIEBfX1BVUkVfXyAqLyBlMShcbiAgICAgICAgICBcImxpbmVhckdyYWRpZW50XCIsXG4gICAgICAgICAge1xuICAgICAgICAgICAgaWQ6IFwicGFpbnQyX2xpbmVhclwiLFxuICAgICAgICAgICAgeDE6IFwiMi4xMzA3XCIsXG4gICAgICAgICAgICB5MTogXCIxMzcuNDgzXCIsXG4gICAgICAgICAgICB4MjogXCIyNDIuNzUyXCIsXG4gICAgICAgICAgICB5MjogXCI3Ni44NjQzXCIsXG4gICAgICAgICAgICBncmFkaWVudFVuaXRzOiBcInVzZXJTcGFjZU9uVXNlXCIsXG4gICAgICAgICAgICBjaGlsZHJlbjogW1xuICAgICAgICAgICAgICAvKiBAX19QVVJFX18gKi8gYyhcInN0b3BcIiwgeyBzdG9wQ29sb3I6IFwiIzMxODQzOVwiIH0pLFxuICAgICAgICAgICAgICAvKiBAX19QVVJFX18gKi8gYyhcInN0b3BcIiwgeyBvZmZzZXQ6IFwiMC40XCIsIHN0b3BDb2xvcjogXCIjMkM5ODY3XCIgfSksXG4gICAgICAgICAgICAgIC8qIEBfX1BVUkVfXyAqLyBjKFwic3RvcFwiLCB7IG9mZnNldDogXCIxXCIsIHN0b3BDb2xvcjogXCIjMjVCM0E3XCIgfSlcbiAgICAgICAgICAgIF1cbiAgICAgICAgICB9XG4gICAgICAgIClcbiAgICAgIF0gfSlcbiAgICBdXG4gIH1cbiksIHNKID0gKCkgPT4gLyogQF9fUFVSRV9fICovIGUxKFxuICBcInN2Z1wiLFxuICB7XG4gICAgd2lkdGg6IFwiMjYwXCIsXG4gICAgaGVpZ2h0OiBcIjI2MFwiLFxuICAgIHZpZXdCb3g6IFwiMCAwIDI2MCAyNjBcIixcbiAgICBmaWxsOiBcIm5vbmVcIixcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIGNoaWxkcmVuOiBbXG4gICAgICAvKiBAX19QVVJFX18gKi8gYyhcbiAgICAgICAgXCJwYXRoXCIsXG4gICAgICAgIHtcbiAgICAgICAgICBzdHlsZTogeyBtaXhCbGVuZE1vZGU6IFwibXVsdGlwbHlcIiB9LFxuICAgICAgICAgIGQ6IFwiTTI1OS4yNzggMzAuNzE3NEMyMzYuMTk5IDIyLjk2ODUgMjEyLjgzMiA0MC4yNTI2IDE5NS42ODYgNTMuNjM2N0MxNDYuMTE5IDkyLjI4MyAxMDQuNDM4IDE0Ni4wNjMgODYuNTYxIDIwNi44OThDODIuMjkwMSAyMjEuNDUgODAuNjE2NiAyMzYuNDE2IDc5LjI4NTEgMjUxLjQ5MkM3OC43ODMgMjU3LjE0OSAyNi4xNDE0IDI1My4wOTYgMjUuNDQyOSAyNDUuNjcxQzI0LjkyOTkgMjQwLjM4MiAyNS4yMTM3IDIyNy44MDIgMjYuMTcwNSAyMjAuNjZDMzQuOTIzNSAxNTQuMDY3IDY4Ljc4NTkgMTAwLjEzNyAxMDguODc2IDQ4LjM1NDNDMTE3LjkzMSAzNi42NjE5IDEzNC43MzIgMTguNjc5MyAxNDYuNjUgOS43Njk4OEMxNDcuOTI2IDguNzQ5NjggMTQ5LjMwNSA3Ljg2NDU2IDE1MC43NjQgNy4xMjg3QzE1NC4wNzEgNS41NzUyOCAyNTEuNzIyIDEuNDI3OTggMjU5LjI3OCAzMC43MTc0WlwiLFxuICAgICAgICAgIGZpbGw6IFwidXJsKCNwYWludDBfbGluZWFyKVwiXG4gICAgICAgIH1cbiAgICAgICksXG4gICAgICAvKiBAX19QVVJFX18gKi8gYyhcbiAgICAgICAgXCJwYXRoXCIsXG4gICAgICAgIHtcbiAgICAgICAgICBzdHlsZTogeyBtaXhCbGVuZE1vZGU6IFwibXVsdGlwbHlcIiB9LFxuICAgICAgICAgIGQ6IFwiTTE1MC45NzUgNy4wNTk2MkMxNTYuNzk2IDUuNDYyNTQgMjUxLjgyNyAxLjg0Mjc1IDI1OS4yNzggMzAuNzE3NEwyNTkuMzQzIDMwLjc0NjVWMzAuNzY4NEMyNTkuNDY3IDMxLjA0MTQgMjU5LjU1OCAzMS4zMjg1IDI1OS42MTMgMzEuNjIzM0MyNjMgNTAuNzExOCAyNDMuOTY5IDEwMi42MjIgMjEwLjU0IDE1Mi41OUMxNzkuNjkzIDE5OC43MTYgMTU4LjMyNCAyMTQuMjI1IDEzNS44NTIgMjAyLjkyMUMxMTYuNzc4IDE5My4wMTkgMTE4LjczMiAxNjQuMzE5IDEzNC4yMDQgMTIxLjcxNEMxNDguNzkyIDgxLjUwMzcgMTc5LjMyNiAxNS4wNjMyIDE1MC45NzUgNy4wNTk2MlpcIixcbiAgICAgICAgICBmaWxsOiBcInVybCgjcGFpbnQxX2xpbmVhcilcIlxuICAgICAgICB9XG4gICAgICApLFxuICAgICAgLyogQF9fUFVSRV9fICovIGMoXG4gICAgICAgIFwicGF0aFwiLFxuICAgICAgICB7XG4gICAgICAgICAgc3R5bGU6IHsgbWl4QmxlbmRNb2RlOiBcIm11bHRpcGx5XCIgfSxcbiAgICAgICAgICBkOiBcIk0xMTEuNDIzIDU3LjIyMzdDMTIwLjIxNiA2NC45OTggNjUuNDQ2MyAxNDcuNzE5IDc0LjI0MjkgMjI4LjM2MkM3Ni4zOTI5IDI0OC4wNjUgNzkuMTEwNSAyNDkuMTQyIDc5LjI3NDIgMjUxLjQ5MkM3OC43NzIyIDI1Ny4xNDkgMjYuNDM2MSAyNTMuMDYgMjUuNDMyMSAyNDUuNjcxQzE4Ljc1NjQgMTk3LjM0NCAyNS40MzIxIDkwLjc1ODYgNjAuMTc4NCA0Ny44OTU5QzYyLjkzNiA0NC40NDM0IDEwOC40OTggNTQuNjQwNyAxMTEuNDIzIDU3LjIyMzdaXCIsXG4gICAgICAgICAgZmlsbDogXCJ1cmwoI3BhaW50Ml9saW5lYXIpXCJcbiAgICAgICAgfVxuICAgICAgKSxcbiAgICAgIC8qIEBfX1BVUkVfXyAqLyBjKFxuICAgICAgICBcInBhdGhcIixcbiAgICAgICAge1xuICAgICAgICAgIHN0eWxlOiB7IG1peEJsZW5kTW9kZTogXCJtdWx0aXBseVwiIH0sXG4gICAgICAgICAgZDogXCJNMTExLjQyMyA1Ny4yMjM4Qzg4LjUwMzcgNTMuNjI1OCA0Ny4yOTk5IDE2NC40MDIgNDEuOTA0OCAxNzYuNzY0QzM1LjU5NjUgMTkxLjMxNiAtMi4yMzg1NSAxODUuNDY2IDAuMTA0MzEzIDE2OS44NTJDMTAuNDg3MSAxMDAuNjI1IDI5LjA2OTkgNzAuOTc1MyA2MC4xNjAyIDQ3Ljg4MTRDNjAuNDI2MSA0Ny42NjQzIDYwLjczNDcgNDcuNTA1NyA2MS4wNjYgNDcuNDE1OEM2Ny42MTQ0IDQ1LjczNSAxMDMuMDMgNTMuNTMxMiAxMTAuMjczIDU2LjYwNTNDMTEwLjgzNCA1Ni44NDE4IDExMS42ODUgNTcuMjYzOCAxMTEuNDIzIDU3LjIyMzhaXCIsXG4gICAgICAgICAgZmlsbDogXCJ1cmwoI3BhaW50M19saW5lYXIpXCJcbiAgICAgICAgfVxuICAgICAgKSxcbiAgICAgIC8qIEBfX1BVUkVfXyAqLyBlMShcImRlZnNcIiwgeyBjaGlsZHJlbjogW1xuICAgICAgICAvKiBAX19QVVJFX18gKi8gZTEoXG4gICAgICAgICAgXCJsaW5lYXJHcmFkaWVudFwiLFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGlkOiBcInBhaW50MF9saW5lYXJcIixcbiAgICAgICAgICAgIHgxOiBcIjI0LjMzNTZcIixcbiAgICAgICAgICAgIHkxOiBcIjIzMi4xMTRcIixcbiAgICAgICAgICAgIHgyOiBcIjIxNS43NzZcIixcbiAgICAgICAgICAgIHkyOiBcIi0yNy40NjY0XCIsXG4gICAgICAgICAgICBncmFkaWVudFVuaXRzOiBcInVzZXJTcGFjZU9uVXNlXCIsXG4gICAgICAgICAgICBjaGlsZHJlbjogW1xuICAgICAgICAgICAgICAvKiBAX19QVVJFX18gKi8gYyhcInN0b3BcIiwgeyBzdG9wQ29sb3I6IFwiIzAwODUzRVwiIH0pLFxuICAgICAgICAgICAgICAvKiBAX19QVVJFX18gKi8gYyhcInN0b3BcIiwgeyBvZmZzZXQ6IFwiMVwiLCBzdG9wQ29sb3I6IFwiI0M4RDQwMFwiIH0pXG4gICAgICAgICAgICBdXG4gICAgICAgICAgfVxuICAgICAgICApLFxuICAgICAgICAvKiBAX19QVVJFX18gKi8gZTEoXG4gICAgICAgICAgXCJsaW5lYXJHcmFkaWVudFwiLFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGlkOiBcInBhaW50MV9saW5lYXJcIixcbiAgICAgICAgICAgIHgxOiBcIjEwMy4zNzJcIixcbiAgICAgICAgICAgIHkxOiBcIjE2MS4xOTdcIixcbiAgICAgICAgICAgIHgyOiBcIjIzMC43XCIsXG4gICAgICAgICAgICB5MjogXCItMTEuNDUwMVwiLFxuICAgICAgICAgICAgZ3JhZGllbnRVbml0czogXCJ1c2VyU3BhY2VPblVzZVwiLFxuICAgICAgICAgICAgY2hpbGRyZW46IFtcbiAgICAgICAgICAgICAgLyogQF9fUFVSRV9fICovIGMoXCJzdG9wXCIsIHsgc3RvcENvbG9yOiBcIiMwMDdENzFcIiB9KSxcbiAgICAgICAgICAgICAgLyogQF9fUFVSRV9fICovIGMoXCJzdG9wXCIsIHsgb2Zmc2V0OiBcIjAuMTZcIiwgc3RvcENvbG9yOiBcIiMwRjg3N0FcIiB9KSxcbiAgICAgICAgICAgICAgLyogQF9fUFVSRV9fICovIGMoXCJzdG9wXCIsIHsgb2Zmc2V0OiBcIjFcIiwgc3RvcENvbG9yOiBcIiM1OUJBQUJcIiB9KVxuICAgICAgICAgICAgXVxuICAgICAgICAgIH1cbiAgICAgICAgKSxcbiAgICAgICAgLyogQF9fUFVSRV9fICovIGUxKFxuICAgICAgICAgIFwibGluZWFyR3JhZGllbnRcIixcbiAgICAgICAgICB7XG4gICAgICAgICAgICBpZDogXCJwYWludDJfbGluZWFyXCIsXG4gICAgICAgICAgICB4MTogXCItNDIyNjMzXCIsXG4gICAgICAgICAgICB5MTogXCItMS41NzUzMmUrMDZcIixcbiAgICAgICAgICAgIHgyOiBcIi0zNzE0NTZcIixcbiAgICAgICAgICAgIHkyOiBcIi0xLjU3NTMyZSswNlwiLFxuICAgICAgICAgICAgZ3JhZGllbnRVbml0czogXCJ1c2VyU3BhY2VPblVzZVwiLFxuICAgICAgICAgICAgY2hpbGRyZW46IFtcbiAgICAgICAgICAgICAgLyogQF9fUFVSRV9fICovIGMoXCJzdG9wXCIsIHsgc3RvcENvbG9yOiBcIiMwMDg1M0VcIiB9KSxcbiAgICAgICAgICAgICAgLyogQF9fUFVSRV9fICovIGMoXCJzdG9wXCIsIHsgb2Zmc2V0OiBcIjFcIiwgc3RvcENvbG9yOiBcIiNDOEQ0MDBcIiB9KVxuICAgICAgICAgICAgXVxuICAgICAgICAgIH1cbiAgICAgICAgKSxcbiAgICAgICAgLyogQF9fUFVSRV9fICovIGUxKFxuICAgICAgICAgIFwibGluZWFyR3JhZGllbnRcIixcbiAgICAgICAgICB7XG4gICAgICAgICAgICBpZDogXCJwYWludDNfbGluZWFyXCIsXG4gICAgICAgICAgICB4MTogXCItMy4wNjkyNVwiLFxuICAgICAgICAgICAgeTE6IFwiMTU4LjA4MVwiLFxuICAgICAgICAgICAgeDI6IFwiOTQuODkzXCIsXG4gICAgICAgICAgICB5MjogXCIyNS4yNTEzXCIsXG4gICAgICAgICAgICBncmFkaWVudFVuaXRzOiBcInVzZXJTcGFjZU9uVXNlXCIsXG4gICAgICAgICAgICBjaGlsZHJlbjogW1xuICAgICAgICAgICAgICAvKiBAX19QVVJFX18gKi8gYyhcInN0b3BcIiwgeyBvZmZzZXQ6IFwiMC4yNlwiLCBzdG9wQ29sb3I6IFwiIzAwNzgzRFwiIH0pLFxuICAgICAgICAgICAgICAvKiBAX19QVVJFX18gKi8gYyhcInN0b3BcIiwgeyBvZmZzZXQ6IFwiMC4zN1wiLCBzdG9wQ29sb3I6IFwiIzA3N0MzQ1wiIH0pLFxuICAgICAgICAgICAgICAvKiBAX19QVVJFX18gKi8gYyhcInN0b3BcIiwgeyBvZmZzZXQ6IFwiMC41MlwiLCBzdG9wQ29sb3I6IFwiIzFBODUzOVwiIH0pLFxuICAgICAgICAgICAgICAvKiBAX19QVVJFX18gKi8gYyhcInN0b3BcIiwgeyBvZmZzZXQ6IFwiMC43XCIsIHN0b3BDb2xvcjogXCIjMzk5NjMzXCIgfSksXG4gICAgICAgICAgICAgIC8qIEBfX1BVUkVfXyAqLyBjKFwic3RvcFwiLCB7IG9mZnNldDogXCIwLjlcIiwgc3RvcENvbG9yOiBcIiM2NEFDMkNcIiB9KSxcbiAgICAgICAgICAgICAgLyogQF9fUFVSRV9fICovIGMoXCJzdG9wXCIsIHsgb2Zmc2V0OiBcIjFcIiwgc3RvcENvbG9yOiBcIiM3REI5MjhcIiB9KVxuICAgICAgICAgICAgXVxuICAgICAgICAgIH1cbiAgICAgICAgKVxuICAgICAgXSB9KVxuICAgIF1cbiAgfVxuKSwgY0ogPSAoKSA9PiAvKiBAX19QVVJFX18gKi8gZTEoXG4gIFwic3ZnXCIsXG4gIHtcbiAgICB3aWR0aDogXCIyNjBcIixcbiAgICBoZWlnaHQ6IFwiMjYwXCIsXG4gICAgdmlld0JveDogXCIwIDAgMjYwIDI2MFwiLFxuICAgIGZpbGw6IFwibm9uZVwiLFxuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgY2hpbGRyZW46IFtcbiAgICAgIC8qIEBfX1BVUkVfXyAqLyBjKFxuICAgICAgICBcInBhdGhcIixcbiAgICAgICAge1xuICAgICAgICAgIHN0eWxlOiB7IG1peEJsZW5kTW9kZTogXCJtdWx0aXBseVwiIH0sXG4gICAgICAgICAgZDogXCJNMTMuODczOSAxNzYuMzE1QzE2LjAyNzEgMTc4Ljc2NSAxOC41MjcxIDE4MC43OTQgMjEuMDg4MiAxODIuODE0QzQ2LjYzNTEgMjAyLjg0MiA4OS4zNjMxIDIwOC4yNTIgMTE2Ljk0MSAyMDMuMjgzQzEzMC43OTUgMjAwLjc4NiAxMzkuNzk3IDE5MC4wNjQgMTM3LjM0MSAxNzMuNzMyQzEzNi4wMzcgMTY1LjA3NSAxMjYuOTQ3IDE2MC41NzcgMTE4Ljc1IDE2MC42OTFDOTkuMTEzNSAxNjAuOTY4IDc2LjI3MTkgMTU5LjExNSA1NC44NzA1IDE1NC40ODZDMzkuMjQwNCAxNTEuMTA3IDIxLjI5NjMgMTQxLjcyMyAxNS4wMDMyIDEzNC4wNTFDMTQuMTUxNCAxMzIuOTg4IDguMDQ2OTYgMTI2LjczMSAyMC44NjkgMTIyLjE4M0MyMC44NjkgMTIyLjE4MyAxMS4zMDczIDEyNC45MTMgOC40OTkyNCAxMzEuMzRDNy4xNDUxOCAxMzQuNDM0IDYuMjM1MDcgMTM4LjgzMSA2LjE2ODQ3IDE0Mi4yNDJDNi4wODI0NiAxNDYuNjgxIDYuMjEyODcgMTUxLjE0OCA2LjU2NTI2IDE1NS41ODVDNi45ODk3OSAxNjAuOTcxIDcuNzgwNTkgMTY2LjQ2NSAxMC4zMzg5IDE3MS4yMThDMTEuMzI1OCAxNzMuMDQyIDEyLjUxMTMgMTc0Ljc1MiAxMy44NzM5IDE3Ni4zMTVaXCIsXG4gICAgICAgICAgZmlsbDogXCJ1cmwoI3BhaW50MF9saW5lYXIpXCJcbiAgICAgICAgfVxuICAgICAgKSxcbiAgICAgIC8qIEBfX1BVUkVfXyAqLyBjKFxuICAgICAgICBcInBhdGhcIixcbiAgICAgICAge1xuICAgICAgICAgIHN0eWxlOiB7IG1peEJsZW5kTW9kZTogXCJtdWx0aXBseVwiIH0sXG4gICAgICAgICAgZDogXCJNMC4wMzM1NzQxIDEzMi4zODZMMC4wMDAyNzc0MjQgMTMyLjI4Qy0wLjAwNTQ2NjkyIDEzMi4wMyAwLjA3ODE1NjYgMTMxLjc4NiAwLjIzNjEyOSAxMzEuNTkyQzAuMTc1MDg1IDEzMS44NjEgMC4xMDU3MTcgMTMyLjEyMiAwLjAzMzU3NDEgMTMyLjM4NlpcIixcbiAgICAgICAgICBmaWxsOiBcInVybCgjcGFpbnQxX2xpbmVhcilcIlxuICAgICAgICB9XG4gICAgICApLFxuICAgICAgLyogQF9fUFVSRV9fICovIGMoXG4gICAgICAgIFwicGF0aFwiLFxuICAgICAgICB7XG4gICAgICAgICAgc3R5bGU6IHsgbWl4QmxlbmRNb2RlOiBcIm11bHRpcGx5XCIgfSxcbiAgICAgICAgICBkOiBcIk0yMzQuNzIzIDIxOC41NzRDMjExLjg3IDIwNC41MTIgMTkzLjI4MiAxOTkuNzM0IDE1NC4wNDUgMTkwLjUyMkMxMTUuNDg0IDE4MS40NjMgNC4zMjg4MyAxNTguMDg1IDEzLjg0ODkgMTc2LjE4NUMxNC4yMDk2IDE3Ni44NyAxMS4zMSAxNzMuMDA4IDEwLjMzODkgMTcxLjIwN0M3Ljc2OTQ5IDE2Ni40NTQgNi45ODk3OSAxNjAuOTYgNi41NjUyNiAxNTUuNTg4QzYuMjEyODcgMTUxLjE0OSA2LjA4MjQ2IDE0Ni42OTUgNi4xNjg0NyAxNDIuMjQ1QzYuMjM1MDcgMTM4Ljg0MyA3LjE0NTE4IDEzNC40MzYgOC40OTkyNCAxMzEuMzQzQzExLjE2NTggMTI1LjIzOCAxOS45MTcyIDEyMi40ODMgMjAuNzk0MSAxMjIuMjE5QzM1LjgzMzEgMTE5LjAxMiA2MC4zNjE3IDExNy45OTEgOTguNTA4NiAxMjUuMzgyQzE1My45NzUgMTM2LjExOCAyMjUuMzcyIDE1Ny44MDggMjQ2Ljk5OCAxNzMuOTUxQzI3MS4wOTEgMTkxLjkzNyAyNTguNjA1IDIzMy4yNTYgMjM0LjcyMyAyMTguNTc0WlwiLFxuICAgICAgICAgIGZpbGw6IFwidXJsKCNwYWludDJfbGluZWFyKVwiXG4gICAgICAgIH1cbiAgICAgICksXG4gICAgICAvKiBAX19QVVJFX18gKi8gYyhcbiAgICAgICAgXCJwYXRoXCIsXG4gICAgICAgIHtcbiAgICAgICAgICBzdHlsZTogeyBtaXhCbGVuZE1vZGU6IFwibXVsdGlwbHlcIiB9LFxuICAgICAgICAgIGQ6IFwiTTIxNy44ODggMTQ3LjY3MkMyMTcuMjA5IDEzMC40MSAxOTkuODUzIDExOS4yNjcgMTg2LjY1MyAxMTEuMjY3QzE0OC41MDkgODguMTQwMSAxMDIuMzE4IDc0LjA1ODQgNTcuNDU5MyA3Ny41NDM0QzQ2LjczNSA3OC4zNzU4IDM2LjI2MzIgODAuNjU5NCAyNi4wMzgzIDgzLjk1ODZDLTMuMDcxMzYgOTMuMzUxIC05LjU5NDc0IDU5LjM2NjIgMTYuMzI0IDQ2Ljc1NTFDMTkuNzE0NyA0NS4xMDY5IDI4LjExOTQgNDIuMDk5MSAzMy4wOTcyIDQwLjkyODFDNzkuNDc2OCAyOS45NzYzIDEyMy43OTIgMzguODIyMSAxNjguMjU0IDUyLjM2ODNDMTc4LjI5MyA1NS40MjA1IDE5NC40NTkgNjIuMDIxNiAyMDMuMzg4IDY3LjY3OTNDMjA0LjM4MiA2OC4yNjkxIDIwNS4zMTIgNjguOTYxIDIwNi4xNjIgNjkuNzQzN0MyMDguMDMgNzEuNTQ0NSAyMzUuNDExIDEzNS4yNzIgMjE3Ljg4OCAxNDcuNjcyWlwiLFxuICAgICAgICAgIGZpbGw6IFwidXJsKCNwYWludDNfbGluZWFyKVwiXG4gICAgICAgIH1cbiAgICAgICksXG4gICAgICAvKiBAX19QVVJFX18gKi8gYyhcbiAgICAgICAgXCJwYXRoXCIsXG4gICAgICAgIHtcbiAgICAgICAgICBzdHlsZTogeyBtaXhCbGVuZE1vZGU6IFwibXVsdGlwbHlcIiB9LFxuICAgICAgICAgIGQ6IFwiTTIwNi4yNjIgNjkuODQ5MUMyMDguNzk2IDczLjMyNTkgMjM1LjE2NCAxMzUuNDQxIDIxNy44ODkgMTQ3LjY2NEMyMTcuODg5IDE0Ny42OCAyMTcuODg5IDE0Ny43IDIxNy44ODkgMTQ3LjcxNkMyMTcuNzM4IDE0Ny44NjcgMjE3LjU3IDE0Ny45OTkgMjE3LjM4OSAxNDguMTFDMjA1LjU4IDE1NS4xNzIgMTY2LjMzNCAxNTUuNjMzIDEyNC43NjkgMTQ2LjA3MUM4Ni4zNzc1IDEzNy4yNTYgNzAuNzAwMyAxMjYuOTkyIDcyLjUyODkgMTA5LjI1Qzc0LjI5MDggOTQuMTExMyA5My44MTY2IDg4LjE2MjMgMTI1Ljk4MSA4Ny42NzRDMTU2LjMzNyA4Ny4yMDUgMjA4LjEwNSA5MC42OTAxIDIwNi4yNjIgNjkuODQ5MVpcIixcbiAgICAgICAgICBmaWxsOiBcInVybCgjcGFpbnQ0X2xpbmVhcilcIlxuICAgICAgICB9XG4gICAgICApLFxuICAgICAgLyogQF9fUFVSRV9fICovIGUxKFwiZGVmc1wiLCB7IGNoaWxkcmVuOiBbXG4gICAgICAgIC8qIEBfX1BVUkVfXyAqLyBlMShcbiAgICAgICAgICBcImxpbmVhckdyYWRpZW50XCIsXG4gICAgICAgICAge1xuICAgICAgICAgICAgaWQ6IFwicGFpbnQwX2xpbmVhclwiLFxuICAgICAgICAgICAgeDE6IFwiMi43MTgyMVwiLFxuICAgICAgICAgICAgeTE6IFwiMTUyLjg3MlwiLFxuICAgICAgICAgICAgeDI6IFwiMTM2LjkyMVwiLFxuICAgICAgICAgICAgeTI6IFwiMTg2LjYwNlwiLFxuICAgICAgICAgICAgZ3JhZGllbnRVbml0czogXCJ1c2VyU3BhY2VPblVzZVwiLFxuICAgICAgICAgICAgY2hpbGRyZW46IFtcbiAgICAgICAgICAgICAgLyogQF9fUFVSRV9fICovIGMoXCJzdG9wXCIsIHsgc3RvcENvbG9yOiBcIiM1ODI1ODJcIiB9KSxcbiAgICAgICAgICAgICAgLyogQF9fUFVSRV9fICovIGMoXCJzdG9wXCIsIHsgb2Zmc2V0OiBcIjAuMDFcIiwgc3RvcENvbG9yOiBcIiM1RDI1ODJcIiB9KSxcbiAgICAgICAgICAgICAgLyogQF9fUFVSRV9fICovIGMoXCJzdG9wXCIsIHsgb2Zmc2V0OiBcIjAuMDNcIiwgc3RvcENvbG9yOiBcIiM2RTIzODFcIiB9KSxcbiAgICAgICAgICAgICAgLyogQF9fUFVSRV9fICovIGMoXCJzdG9wXCIsIHsgb2Zmc2V0OiBcIjAuMTlcIiwgc3RvcENvbG9yOiBcIiM3NDI2ODJcIiB9KSxcbiAgICAgICAgICAgICAgLyogQF9fUFVSRV9fICovIGMoXCJzdG9wXCIsIHsgb2Zmc2V0OiBcIjAuNFwiLCBzdG9wQ29sb3I6IFwiIzg0MkQ4NlwiIH0pLFxuICAgICAgICAgICAgICAvKiBAX19QVVJFX18gKi8gYyhcInN0b3BcIiwgeyBvZmZzZXQ6IFwiMC42NFwiLCBzdG9wQ29sb3I6IFwiI0EwMzk4Q1wiIH0pLFxuICAgICAgICAgICAgICAvKiBAX19QVVJFX18gKi8gYyhcInN0b3BcIiwgeyBvZmZzZXQ6IFwiMC45XCIsIHN0b3BDb2xvcjogXCIjQzY0QTk0XCIgfSksXG4gICAgICAgICAgICAgIC8qIEBfX1BVUkVfXyAqLyBjKFwic3RvcFwiLCB7IG9mZnNldDogXCIxXCIsIHN0b3BDb2xvcjogXCIjRDY1MTk4XCIgfSlcbiAgICAgICAgICAgIF1cbiAgICAgICAgICB9XG4gICAgICAgICksXG4gICAgICAgIC8qIEBfX1BVUkVfXyAqLyBlMShcbiAgICAgICAgICBcImxpbmVhckdyYWRpZW50XCIsXG4gICAgICAgICAge1xuICAgICAgICAgICAgaWQ6IFwicGFpbnQxX2xpbmVhclwiLFxuICAgICAgICAgICAgeDE6IFwiLTIuMzkzNjJcIixcbiAgICAgICAgICAgIHkxOiBcIjEzMC45NTZcIixcbiAgICAgICAgICAgIHgyOiBcIi0yLjI2MzQzXCIsXG4gICAgICAgICAgICB5MjogXCIxMzEuMDExXCIsXG4gICAgICAgICAgICBncmFkaWVudFVuaXRzOiBcInVzZXJTcGFjZU9uVXNlXCIsXG4gICAgICAgICAgICBjaGlsZHJlbjogW1xuICAgICAgICAgICAgICAvKiBAX19QVVJFX18gKi8gYyhcInN0b3BcIiwgeyBzdG9wQ29sb3I6IFwiI0ZGRDgwMFwiIH0pLFxuICAgICAgICAgICAgICAvKiBAX19QVVJFX18gKi8gYyhcInN0b3BcIiwgeyBvZmZzZXQ6IFwiMC41MVwiLCBzdG9wQ29sb3I6IFwiI0Y0OTYwMFwiIH0pLFxuICAgICAgICAgICAgICAvKiBAX19QVVJFX18gKi8gYyhcInN0b3BcIiwgeyBvZmZzZXQ6IFwiMC42MlwiLCBzdG9wQ29sb3I6IFwiI0YzOEYwMVwiIH0pLFxuICAgICAgICAgICAgICAvKiBAX19QVVJFX18gKi8gYyhcInN0b3BcIiwgeyBvZmZzZXQ6IFwiMC43OFwiLCBzdG9wQ29sb3I6IFwiI0VGN0IwNlwiIH0pLFxuICAgICAgICAgICAgICAvKiBAX19QVVJFX18gKi8gYyhcInN0b3BcIiwgeyBvZmZzZXQ6IFwiMC45NlwiLCBzdG9wQ29sb3I6IFwiI0VBNUIwQ1wiIH0pXG4gICAgICAgICAgICBdXG4gICAgICAgICAgfVxuICAgICAgICApLFxuICAgICAgICAvKiBAX19QVVJFX18gKi8gZTEoXG4gICAgICAgICAgXCJsaW5lYXJHcmFkaWVudFwiLFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGlkOiBcInBhaW50Ml9saW5lYXJcIixcbiAgICAgICAgICAgIHgxOiBcIjkuMTc2NjFcIixcbiAgICAgICAgICAgIHkxOiBcIjEyMi45NTdcIixcbiAgICAgICAgICAgIHgyOiBcIjI0OS4xOTRcIixcbiAgICAgICAgICAgIHkyOiBcIjIyNC43MDNcIixcbiAgICAgICAgICAgIGdyYWRpZW50VW5pdHM6IFwidXNlclNwYWNlT25Vc2VcIixcbiAgICAgICAgICAgIGNoaWxkcmVuOiBbXG4gICAgICAgICAgICAgIC8qIEBfX1BVUkVfXyAqLyBjKFwic3RvcFwiLCB7IHN0b3BDb2xvcjogXCIjQ0M4QUJCXCIgfSksXG4gICAgICAgICAgICAgIC8qIEBfX1BVUkVfXyAqLyBjKFwic3RvcFwiLCB7IG9mZnNldDogXCIxXCIsIHN0b3BDb2xvcjogXCIjN0U1NTlFXCIgfSlcbiAgICAgICAgICAgIF1cbiAgICAgICAgICB9XG4gICAgICAgICksXG4gICAgICAgIC8qIEBfX1BVUkVfXyAqLyBlMShcbiAgICAgICAgICBcImxpbmVhckdyYWRpZW50XCIsXG4gICAgICAgICAge1xuICAgICAgICAgICAgaWQ6IFwicGFpbnQzX2xpbmVhclwiLFxuICAgICAgICAgICAgeDE6IFwiMi42MzUyNlwiLFxuICAgICAgICAgICAgeTE6IFwiNDUuMDY2M1wiLFxuICAgICAgICAgICAgeDI6IFwiMjMzLjI0XCIsXG4gICAgICAgICAgICB5MjogXCIxMDkuOTI0XCIsXG4gICAgICAgICAgICBncmFkaWVudFVuaXRzOiBcInVzZXJTcGFjZU9uVXNlXCIsXG4gICAgICAgICAgICBjaGlsZHJlbjogW1xuICAgICAgICAgICAgICAvKiBAX19QVVJFX18gKi8gYyhcInN0b3BcIiwgeyBvZmZzZXQ6IFwiMC4xNVwiLCBzdG9wQ29sb3I6IFwiI0VFN0JBRVwiIH0pLFxuICAgICAgICAgICAgICAvKiBAX19QVVJFX18gKi8gYyhcInN0b3BcIiwgeyBvZmZzZXQ6IFwiMVwiLCBzdG9wQ29sb3I6IFwiIzk0MUM4MVwiIH0pXG4gICAgICAgICAgICBdXG4gICAgICAgICAgfVxuICAgICAgICApLFxuICAgICAgICAvKiBAX19QVVJFX18gKi8gZTEoXG4gICAgICAgICAgXCJsaW5lYXJHcmFkaWVudFwiLFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGlkOiBcInBhaW50NF9saW5lYXJcIixcbiAgICAgICAgICAgIHgxOiBcIjc5LjE4MzFcIixcbiAgICAgICAgICAgIHkxOiBcIjgyLjUwODNcIixcbiAgICAgICAgICAgIHgyOiBcIjIyNi4yMTFcIixcbiAgICAgICAgICAgIHkyOiBcIjEyMy44NlwiLFxuICAgICAgICAgICAgZ3JhZGllbnRVbml0czogXCJ1c2VyU3BhY2VPblVzZVwiLFxuICAgICAgICAgICAgY2hpbGRyZW46IFtcbiAgICAgICAgICAgICAgLyogQF9fUFVSRV9fICovIGMoXCJzdG9wXCIsIHsgc3RvcENvbG9yOiBcIiNFQzYxOUZcIiB9KSxcbiAgICAgICAgICAgICAgLyogQF9fUFVSRV9fICovIGMoXCJzdG9wXCIsIHsgb2Zmc2V0OiBcIjFcIiwgc3RvcENvbG9yOiBcIiM3QTIxODJcIiB9KVxuICAgICAgICAgICAgXVxuICAgICAgICAgIH1cbiAgICAgICAgKVxuICAgICAgXSB9KVxuICAgIF1cbiAgfVxuKSwgbEogPSAoKSA9PiAvKiBAX19QVVJFX18gKi8gZTEoXG4gIFwic3ZnXCIsXG4gIHtcbiAgICB3aWR0aDogXCIyNjBcIixcbiAgICBoZWlnaHQ6IFwiMjYwXCIsXG4gICAgdmlld0JveDogXCIwIDAgMjYwIDI2MFwiLFxuICAgIGZpbGw6IFwibm9uZVwiLFxuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgY2hpbGRyZW46IFtcbiAgICAgIC8qIEBfX1BVUkVfXyAqLyBjKFxuICAgICAgICBcInBhdGhcIixcbiAgICAgICAge1xuICAgICAgICAgIHN0eWxlOiB7IG1peEJsZW5kTW9kZTogXCJtdWx0aXBseVwiIH0sXG4gICAgICAgICAgZDogXCJNODcuNTE3NiA0NC44MTE3QzEzNC42MjQgNDcuNTczNCAxNTkuNTY2IDU5LjQxMTkgMTU5LjIwOSA3OC42Njk2QzE1OC42ODcgOTUuMTA3NyAxMzcuODM5IDEwNS45NzcgMTAzLjI5OSAxMDkuMzkyQzYzLjAxNjYgMTEzLjM3NyA2Ljk5MTI3IDExMy41MjUgMjAuMzU1NSAxNDAuNTM3QzcuMDEyMTUgMTE5LjA4MyAtMC4wNDA0OTI3IDk0LjMxMzggMC4wMDAxNzQ4ODYgNjkuMDQ4OEMwLjAwMDE3NDg4NiA2Ny4xMTc2IDAuMDYxMzMwOSA2NS4yMTIxIDAuMTQxNzk5IDYzLjMxM0MwLjQyNTA0OCA1Ni41MTUxIDguNTg3NzYgNDAuMTg5NiA4Ny41MTc2IDQ0LjgxMTdaXCIsXG4gICAgICAgICAgZmlsbDogXCJ1cmwoI3BhaW50MF9saW5lYXIpXCJcbiAgICAgICAgfVxuICAgICAgKSxcbiAgICAgIC8qIEBfX1BVUkVfXyAqLyBjKFxuICAgICAgICBcInBhdGhcIixcbiAgICAgICAge1xuICAgICAgICAgIHN0eWxlOiB7IG1peEJsZW5kTW9kZTogXCJtdWx0aXBseVwiIH0sXG4gICAgICAgICAgZDogXCJNMjYwIDEzNC4xODZDMjU4LjgzNSAxMjYuMzQyIDI0OS45MDkgMTIyLjE5NyAyNDMuMzUgMTE5LjU4OUMyMzMuNjA5IDExNS42ODQgMjIzLjQ2IDExMi44ODkgMjEzLjA5MyAxMTEuMjU2QzIwNS43OTYgMTEwLjEyMiAxOTguNDA2IDEwOS42OSAxOTEuMDI2IDEwOS45NjlDMTc3LjM5MSAxMTAuNTE2IDE1Ni42NDYgMTEyLjk5NCAxNTQuNTA2IDEzMC4wNjZDMTUyLjI4OCAxNDcuODE0IDE4MC40MiAxNjAuODQxIDE5MS45OTUgMTY2Ljk1NkMxOTkuOTYxIDE3MS4xNjYgMjE0Ljc5MyAxNzcuOTI2IDIyMy41MTIgMTgyLjY1MUMyMzkuMTQ3IDE2OS40MjkgMjUxLjYxNiAxNTIuODY3IDI2MCAxMzQuMTg2WlwiLFxuICAgICAgICAgIGZpbGw6IFwidXJsKCNwYWludDFfbGluZWFyKVwiXG4gICAgICAgIH1cbiAgICAgICksXG4gICAgICAvKiBAX19QVVJFX18gKi8gYyhcbiAgICAgICAgXCJwYXRoXCIsXG4gICAgICAgIHtcbiAgICAgICAgICBzdHlsZTogeyBtaXhCbGVuZE1vZGU6IFwibXVsdGlwbHlcIiB9LFxuICAgICAgICAgIGQ6IFwiTTU3LjkxODIgMTg4LjA0OUM1OS4yODYxIDE4OS4wNjYgNjAuOTM0MSAxOTAuMjYgNjIuNTc4OSAxOTEuNDMyQzgwLjU0OTkgMjAzLjgwNiAxMDEuMjgxIDIxMS41ODcgMTIyLjk1NiAyMTQuMDkxQzEyMi45NTYgMjE0LjA5MSAxNDAuNTAxIDIxMC4xMzkgMTM3LjkwNyAyMDEuODM1QzEzNS40MzIgMTkzLjkyIDEyMS4zNSAxODkuMTMzIDk3LjgwNDcgMTg2LjI5NEM1OC4xNTY0IDE4MS41MTUgNTYuNjExNCAxODYuOTMyIDU3LjkxODIgMTg4LjA0OVpcIixcbiAgICAgICAgICBmaWxsOiBcInVybCgjcGFpbnQyX2xpbmVhcilcIlxuICAgICAgICB9XG4gICAgICApLFxuICAgICAgLyogQF9fUFVSRV9fICovIGMoXG4gICAgICAgIFwicGF0aFwiLFxuICAgICAgICB7XG4gICAgICAgICAgc3R5bGU6IHsgbWl4QmxlbmRNb2RlOiBcIm11bHRpcGx5XCIgfSxcbiAgICAgICAgICBkOiBcIk0yNTguNjcxIDEzNy4wNjFDMjQyLjcyOCAxNjQuOTkgMTkxLjAxMyAxNTUuNjEgMTU1LjQyNyAxNTAuNTI1QzMzLjQzNjQgMTMzLjA5OSAzLjg4ODQzIDEwMS40MTcgMy44ODg0MyAxMDEuNDE3QzcuMjc3NzUgMTE1LjI0NCAxMi44MzU2IDEyOC40NDggMjAuMzU1NSAxNDAuNTM3QzMwLjEyNDMgMTU1LjE4MiA4NS42NjM2IDE3Ny44NzQgMTY4LjU2MiAxODQuNzk4QzE5Ni40ODUgMTg3LjEzNSAyMTEuMDA4IDE4Ny4xODMgMjE4LjUwNyAxODYuN0MyMzUuNjE4IDE3My41NDggMjQ5LjM4IDE1Ni41NCAyNTguNjcxIDEzNy4wNjFaXCIsXG4gICAgICAgICAgZmlsbDogXCJ1cmwoI3BhaW50M19saW5lYXIpXCJcbiAgICAgICAgfVxuICAgICAgKSxcbiAgICAgIC8qIEBfX1BVUkVfXyAqLyBjKFxuICAgICAgICBcInBhdGhcIixcbiAgICAgICAge1xuICAgICAgICAgIHN0eWxlOiB7IG1peEJsZW5kTW9kZTogXCJtdWx0aXBseVwiIH0sXG4gICAgICAgICAgZDogXCJNMjE4LjU3NSAxODYuNjIzQzIxOC41NzUgMTg2LjU3NSAyMTguNTU5IDE4Ni41NjggMjE4LjU0NiAxODYuNjIzQzIxOC41NDYgMTg2LjYyMyAyMTguNTQ2IDE4Ni42IDIxOC41NDYgMTg2LjYwNEMyMTAuNDczIDE5MS4yMTkgMTkzLjMxMSAxOTYuMTc2IDE3Ny4zOTQgMTk5LjQ3OUMxMjguNTUgMjA5LjY0NyA3MC4yNzggMTkzLjk0MiA1Ny45MTE2IDE4OC4wNDZDNTkuMjc5NiAxODkuMDYzIDYwLjkyNzYgMTkwLjI1NyA2Mi41NzIzIDE5MS40MjhDODQuOTE5NyAyMDYuODE1IDExMS40MjIgMjE1LjAzMyAxMzguNTU0IDIxNC45OUMxNjguNTE0IDIxNC45OSAxOTYuMjAxIDIwMy4yMjggMjE4LjUzNiAxODYuNjM5TDIxOC41NzUgMTg2LjYyM1pcIixcbiAgICAgICAgICBmaWxsOiBcInVybCgjcGFpbnQ0X2xpbmVhcilcIlxuICAgICAgICB9XG4gICAgICApLFxuICAgICAgLyogQF9fUFVSRV9fICovIGUxKFwiZGVmc1wiLCB7IGNoaWxkcmVuOiBbXG4gICAgICAgIC8qIEBfX1BVUkVfXyAqLyBlMShcbiAgICAgICAgICBcImxpbmVhckdyYWRpZW50XCIsXG4gICAgICAgICAge1xuICAgICAgICAgICAgaWQ6IFwicGFpbnQwX2xpbmVhclwiLFxuICAgICAgICAgICAgeDE6IFwiMTU5LjY0OVwiLFxuICAgICAgICAgICAgeTE6IFwiOTIuMjY4OFwiLFxuICAgICAgICAgICAgeDI6IFwiLTQuMzQ1MTJcIixcbiAgICAgICAgICAgIHkyOiBcIjkyLjI2ODhcIixcbiAgICAgICAgICAgIGdyYWRpZW50VW5pdHM6IFwidXNlclNwYWNlT25Vc2VcIixcbiAgICAgICAgICAgIGNoaWxkcmVuOiBbXG4gICAgICAgICAgICAgIC8qIEBfX1BVUkVfXyAqLyBjKFwic3RvcFwiLCB7IHN0b3BDb2xvcjogXCIjRUM2MTlGXCIgfSksXG4gICAgICAgICAgICAgIC8qIEBfX1BVUkVfXyAqLyBjKFwic3RvcFwiLCB7IG9mZnNldDogXCIxXCIsIHN0b3BDb2xvcjogXCIjOTcxQjgxXCIgfSlcbiAgICAgICAgICAgIF1cbiAgICAgICAgICB9XG4gICAgICAgICksXG4gICAgICAgIC8qIEBfX1BVUkVfXyAqLyBlMShcbiAgICAgICAgICBcImxpbmVhckdyYWRpZW50XCIsXG4gICAgICAgICAge1xuICAgICAgICAgICAgaWQ6IFwicGFpbnQxX2xpbmVhclwiLFxuICAgICAgICAgICAgeDE6IFwiMTU5LjcyN1wiLFxuICAgICAgICAgICAgeTE6IFwiMTU2LjU2M1wiLFxuICAgICAgICAgICAgeDI6IFwiMjY1LjQ1M1wiLFxuICAgICAgICAgICAgeTI6IFwiMTMxLjY0NFwiLFxuICAgICAgICAgICAgZ3JhZGllbnRVbml0czogXCJ1c2VyU3BhY2VPblVzZVwiLFxuICAgICAgICAgICAgY2hpbGRyZW46IFtcbiAgICAgICAgICAgICAgLyogQF9fUFVSRV9fICovIGMoXCJzdG9wXCIsIHsgc3RvcENvbG9yOiBcIiM2QzIzODNcIiB9KSxcbiAgICAgICAgICAgICAgLyogQF9fUFVSRV9fICovIGMoXCJzdG9wXCIsIHsgb2Zmc2V0OiBcIjFcIiwgc3RvcENvbG9yOiBcIiNFQzYxOUZcIiB9KVxuICAgICAgICAgICAgXVxuICAgICAgICAgIH1cbiAgICAgICAgKSxcbiAgICAgICAgLyogQF9fUFVSRV9fICovIGUxKFxuICAgICAgICAgIFwibGluZWFyR3JhZGllbnRcIixcbiAgICAgICAgICB7XG4gICAgICAgICAgICBpZDogXCJwYWludDJfbGluZWFyXCIsXG4gICAgICAgICAgICB4MTogXCI1Ny42Mjg1XCIsXG4gICAgICAgICAgICB5MTogXCIxOTkuMjI0XCIsXG4gICAgICAgICAgICB4MjogXCIxMzguMTU4XCIsXG4gICAgICAgICAgICB5MjogXCIxOTkuMjI0XCIsXG4gICAgICAgICAgICBncmFkaWVudFVuaXRzOiBcInVzZXJTcGFjZU9uVXNlXCIsXG4gICAgICAgICAgICBjaGlsZHJlbjogW1xuICAgICAgICAgICAgICAvKiBAX19QVVJFX18gKi8gYyhcInN0b3BcIiwgeyBzdG9wQ29sb3I6IFwiI0YwODhCNlwiIH0pLFxuICAgICAgICAgICAgICAvKiBAX19QVVJFX18gKi8gYyhcInN0b3BcIiwgeyBvZmZzZXQ6IFwiMC44N1wiLCBzdG9wQ29sb3I6IFwiIzg3MUY4MlwiIH0pXG4gICAgICAgICAgICBdXG4gICAgICAgICAgfVxuICAgICAgICApLFxuICAgICAgICAvKiBAX19QVVJFX18gKi8gZTEoXG4gICAgICAgICAgXCJsaW5lYXJHcmFkaWVudFwiLFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGlkOiBcInBhaW50M19saW5lYXJcIixcbiAgICAgICAgICAgIHgxOiBcIjMuMTgzNTJcIixcbiAgICAgICAgICAgIHkxOiBcIjE0NC4xODFcIixcbiAgICAgICAgICAgIHgyOiBcIjI2NS42MjZcIixcbiAgICAgICAgICAgIHkyOiBcIjE0NC4xODFcIixcbiAgICAgICAgICAgIGdyYWRpZW50VW5pdHM6IFwidXNlclNwYWNlT25Vc2VcIixcbiAgICAgICAgICAgIGNoaWxkcmVuOiBbXG4gICAgICAgICAgICAgIC8qIEBfX1BVUkVfXyAqLyBjKFwic3RvcFwiLCB7IG9mZnNldDogXCIwLjJcIiwgc3RvcENvbG9yOiBcIiM5OTU2OUVcIiB9KSxcbiAgICAgICAgICAgICAgLyogQF9fUFVSRV9fICovIGMoXCJzdG9wXCIsIHsgb2Zmc2V0OiBcIjAuODJcIiwgc3RvcENvbG9yOiBcIiNEQzcwQTlcIiB9KVxuICAgICAgICAgICAgXVxuICAgICAgICAgIH1cbiAgICAgICAgKSxcbiAgICAgICAgLyogQF9fUFVSRV9fICovIGUxKFxuICAgICAgICAgIFwibGluZWFyR3JhZGllbnRcIixcbiAgICAgICAgICB7XG4gICAgICAgICAgICBpZDogXCJwYWludDRfbGluZWFyXCIsXG4gICAgICAgICAgICB4MTogXCI1NS4zNjI0XCIsXG4gICAgICAgICAgICB5MTogXCIyMDAuNzg1XCIsXG4gICAgICAgICAgICB4MjogXCIyMTcuNzZcIixcbiAgICAgICAgICAgIHkyOiBcIjIwMC43ODVcIixcbiAgICAgICAgICAgIGdyYWRpZW50VW5pdHM6IFwidXNlclNwYWNlT25Vc2VcIixcbiAgICAgICAgICAgIGNoaWxkcmVuOiBbXG4gICAgICAgICAgICAgIC8qIEBfX1BVUkVfXyAqLyBjKFwic3RvcFwiLCB7IHN0b3BDb2xvcjogXCIjRTYwMDdFXCIgfSksXG4gICAgICAgICAgICAgIC8qIEBfX1BVUkVfXyAqLyBjKFwic3RvcFwiLCB7IG9mZnNldDogXCIwLjEzXCIsIHN0b3BDb2xvcjogXCIjRTYwNTgwXCIgfSksXG4gICAgICAgICAgICAgIC8qIEBfX1BVUkVfXyAqLyBjKFwic3RvcFwiLCB7IG9mZnNldDogXCIwLjNcIiwgc3RvcENvbG9yOiBcIiNFODE1ODdcIiB9KSxcbiAgICAgICAgICAgICAgLyogQF9fUFVSRV9fICovIGMoXCJzdG9wXCIsIHsgb2Zmc2V0OiBcIjAuNDlcIiwgc3RvcENvbG9yOiBcIiNFQTJGOTNcIiB9KSxcbiAgICAgICAgICAgICAgLyogQF9fUFVSRV9fICovIGMoXCJzdG9wXCIsIHsgb2Zmc2V0OiBcIjAuNjlcIiwgc3RvcENvbG9yOiBcIiNFQzUzQTNcIiB9KSxcbiAgICAgICAgICAgICAgLyogQF9fUFVSRV9fICovIGMoXCJzdG9wXCIsIHsgb2Zmc2V0OiBcIjAuOVwiLCBzdG9wQ29sb3I6IFwiI0YwODFCN1wiIH0pLFxuICAgICAgICAgICAgICAvKiBAX19QVVJFX18gKi8gYyhcInN0b3BcIiwgeyBvZmZzZXQ6IFwiMVwiLCBzdG9wQ29sb3I6IFwiI0YyOUFDMlwiIH0pXG4gICAgICAgICAgICBdXG4gICAgICAgICAgfVxuICAgICAgICApXG4gICAgICBdIH0pXG4gICAgXVxuICB9XG4pLCBwSiA9ICgpID0+IC8qIEBfX1BVUkVfXyAqLyBlMShcbiAgXCJzdmdcIixcbiAge1xuICAgIHdpZHRoOiBcIjI2MFwiLFxuICAgIGhlaWdodDogXCIyNjBcIixcbiAgICB2aWV3Qm94OiBcIjAgMCAyNjAgMjYwXCIsXG4gICAgZmlsbDogXCJub25lXCIsXG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICBjaGlsZHJlbjogW1xuICAgICAgLyogQF9fUFVSRV9fICovIGMoXG4gICAgICAgIFwicGF0aFwiLFxuICAgICAgICB7XG4gICAgICAgICAgc3R5bGU6IHsgbWl4QmxlbmRNb2RlOiBcIm11bHRpcGx5XCIgfSxcbiAgICAgICAgICBkOiBcIk0yMDEuODkyIDE2OC40ODJDMjE4LjMzMiAxNDQuNDU0IDAgMTA5LjEzMiAwIDEwOS4xMzJDMC45NjAxMTEgMTI5LjgwMyAxNS42MDE4IDE1OS42MTEgMTUuNjAxOCAxNTkuNDg5QzI1LjE4MDUgMTY4Ljc5OSAxMzguMjU2IDE2NS45OTkgMTc1Ljc5NiAxOTcuNTM5QzE4OS4xNzEgMTg2LjEyMyAyMDEuODkyIDE2OC40ODIgMjAxLjg5MiAxNjguNDgyWlwiLFxuICAgICAgICAgIGZpbGw6IFwidXJsKCNwYWludDBfbGluZWFyKVwiXG4gICAgICAgIH1cbiAgICAgICksXG4gICAgICAvKiBAX19QVVJFX18gKi8gYyhcbiAgICAgICAgXCJwYXRoXCIsXG4gICAgICAgIHtcbiAgICAgICAgICBzdHlsZTogeyBtaXhCbGVuZE1vZGU6IFwibXVsdGlwbHlcIiB9LFxuICAgICAgICAgIGQ6IFwiTTIwMS40MDIgMTY5LjE1MUMxODUuODI2IDE4OS4zNzUgMTExLjMxOCAxOTAuMjc0IDY1LjI2MTkgMTkwLjAxNUM1My4xNDUzIDE4OS45NDQgNDYuNDA1MyAxOTQuNzY3IDQ3LjU5OTEgMjAzLjc0NEM0OC43OTI4IDIxMi43MjEgNTkuNTg0NSAyMTkuNTg5IDc3Ljc2OSAyMjIuOTQ2QzExMi4yOTggMjI5LjMxMiAxNDUuMDI4IDIyMC43MjUgMTcxLjk4NSAyMDAuNTg1QzE4NS4xMDYgMTkwLjc4MyAxOTguNjg5IDE3Mi44MjUgMjAxLjQwMiAxNjkuMTU4VjE2OS4xNTFaXCIsXG4gICAgICAgICAgZmlsbDogXCJ1cmwoI3BhaW50MV9saW5lYXIpXCJcbiAgICAgICAgfVxuICAgICAgKSxcbiAgICAgIC8qIEBfX1BVUkVfXyAqLyBjKFxuICAgICAgICBcInBhdGhcIixcbiAgICAgICAge1xuICAgICAgICAgIHN0eWxlOiB7IG1peEJsZW5kTW9kZTogXCJtdWx0aXBseVwiIH0sXG4gICAgICAgICAgZDogXCJNMjU3LjM1NCA1OC40Njk3QzI0MC41MDEgMTEwLjUxNyAxMS41NTMzIDY5LjczODIgMC4wMTU5MzAyIDEwOC43OTJDMC4wMTU5MzAyIDEwOS4wMSAwLjAxNTkzMDIgMTA5LjEzMiAwLjAxNTkzMDIgMTA5LjEzMkMwLjk0MDgzNyAxMjguOTc0IDE0LjQ2ODggMTU3LjIzNiAxNS41NTA1IDE1OS4zNzdDMTUuNTg2MiAxNTkuMzQ0IDE1LjYxOTQgMTU5LjMwNyAxNS42NDk3IDE1OS4yNjlDNDAuMTE5OCAxMTkuNDUgMjAyLjM5MSAxNDMuNTc0IDIyNC4zNDYgMTMxLjc0NUMyMjYuNjg1IDEzMC40OTEgMjcxLjEzOCA3NS40NzY1IDI1Ny4zNTQgNTguNDY5N1pcIixcbiAgICAgICAgICBmaWxsOiBcInVybCgjcGFpbnQyX2xpbmVhcilcIlxuICAgICAgICB9XG4gICAgICApLFxuICAgICAgLyogQF9fUFVSRV9fICovIGMoXG4gICAgICAgIFwicGF0aFwiLFxuICAgICAgICB7XG4gICAgICAgICAgc3R5bGU6IHsgbWl4QmxlbmRNb2RlOiBcIm11bHRpcGx5XCIgfSxcbiAgICAgICAgICBkOiBcIk0yMjQuNDg0IDEzMS42NTlDMjI3LjkzIDEyOC45NDUgMjcwLjk0MyA3NS4yMzY1IDI1Ny4zNTUgNTguNDY5N0MyNTcuMzUzIDU4LjQ1MzggMjU3LjM1MyA1OC40Mzc3IDI1Ny4zNTUgNTguNDIxN0MyNTcuMjQ5IDU4LjIzMTUgMjU3LjEyIDU4LjA1NTIgMjU2Ljk3IDU3Ljg5NjlDMjQ3LjMyOCA0Ny43MDA1IDIwOC45MzMgMzYuNDI4OCAxNjUuNDgyIDM0LjM1MTdDMTI1LjM3NCAzMi40MzE1IDEwNy4xNTIgMzguMTkyMiAxMDQuMDM0IDU2LjExNDNDMTAxLjU4OSA3MS40NzYgMTE5LjExOCA4Mi42OTMzIDE1MC41NjEgOTIuMDM1MkMxODAuMjUxIDEwMC44NjIgMjMyLjAyNyAxMTEuNzE3IDIyNC40ODQgMTMxLjY1OVpcIixcbiAgICAgICAgICBmaWxsOiBcInVybCgjcGFpbnQzX2xpbmVhcilcIlxuICAgICAgICB9XG4gICAgICApLFxuICAgICAgLyogQF9fUFVSRV9fICovIGUxKFwiZGVmc1wiLCB7IGNoaWxkcmVuOiBbXG4gICAgICAgIC8qIEBfX1BVUkVfXyAqLyBlMShcbiAgICAgICAgICBcImxpbmVhckdyYWRpZW50XCIsXG4gICAgICAgICAge1xuICAgICAgICAgICAgaWQ6IFwicGFpbnQwX2xpbmVhclwiLFxuICAgICAgICAgICAgeDE6IFwiMjI1LjY1OFwiLFxuICAgICAgICAgICAgeTE6IFwiMTUzLjMyNVwiLFxuICAgICAgICAgICAgeDI6IFwiODcuMzY2OVwiLFxuICAgICAgICAgICAgeTI6IFwiMTUzLjMyNVwiLFxuICAgICAgICAgICAgZ3JhZGllbnRVbml0czogXCJ1c2VyU3BhY2VPblVzZVwiLFxuICAgICAgICAgICAgY2hpbGRyZW46IFtcbiAgICAgICAgICAgICAgLyogQF9fUFVSRV9fICovIGMoXCJzdG9wXCIsIHsgc3RvcENvbG9yOiBcIiM5MjIyNjlcIiB9KSxcbiAgICAgICAgICAgICAgLyogQF9fUFVSRV9fICovIGMoXCJzdG9wXCIsIHsgb2Zmc2V0OiBcIjAuMTdcIiwgc3RvcENvbG9yOiBcIiNCOTBEODBcIiB9KSxcbiAgICAgICAgICAgICAgLyogQF9fUFVSRV9fICovIGMoXCJzdG9wXCIsIHsgb2Zmc2V0OiBcIjAuNzFcIiwgc3RvcENvbG9yOiBcIiNFOTNFOEZcIiB9KVxuICAgICAgICAgICAgXVxuICAgICAgICAgIH1cbiAgICAgICAgKSxcbiAgICAgICAgLyogQF9fUFVSRV9fICovIGUxKFxuICAgICAgICAgIFwibGluZWFyR3JhZGllbnRcIixcbiAgICAgICAgICB7XG4gICAgICAgICAgICBpZDogXCJwYWludDFfbGluZWFyXCIsXG4gICAgICAgICAgICB4MTogXCIyMDEuNDAyXCIsXG4gICAgICAgICAgICB5MTogXCIxOTcuMDc4XCIsXG4gICAgICAgICAgICB4MjogXCI0Ny40NjQ3XCIsXG4gICAgICAgICAgICB5MjogXCIxOTcuMDc4XCIsXG4gICAgICAgICAgICBncmFkaWVudFVuaXRzOiBcInVzZXJTcGFjZU9uVXNlXCIsXG4gICAgICAgICAgICBjaGlsZHJlbjogW1xuICAgICAgICAgICAgICAvKiBAX19QVVJFX18gKi8gYyhcInN0b3BcIiwgeyBvZmZzZXQ6IFwiMC4xOVwiLCBzdG9wQ29sb3I6IFwiIzk1MUI4MVwiIH0pLFxuICAgICAgICAgICAgICAvKiBAX19QVVJFX18gKi8gYyhcInN0b3BcIiwgeyBvZmZzZXQ6IFwiMC4yMVwiLCBzdG9wQ29sb3I6IFwiIzk5MUU4MlwiIH0pLFxuICAgICAgICAgICAgICAvKiBAX19QVVJFX18gKi8gYyhcInN0b3BcIiwgeyBvZmZzZXQ6IFwiMC40NFwiLCBzdG9wQ29sb3I6IFwiI0JEM0M5MFwiIH0pLFxuICAgICAgICAgICAgICAvKiBAX19QVVJFX18gKi8gYyhcInN0b3BcIiwgeyBvZmZzZXQ6IFwiMC42NlwiLCBzdG9wQ29sb3I6IFwiI0Q3NTI5OVwiIH0pLFxuICAgICAgICAgICAgICAvKiBAX19QVVJFX18gKi8gYyhcInN0b3BcIiwgeyBvZmZzZXQ6IFwiMC44NVwiLCBzdG9wQ29sb3I6IFwiI0U2NUY5RlwiIH0pLFxuICAgICAgICAgICAgICAvKiBAX19QVVJFX18gKi8gYyhcInN0b3BcIiwgeyBvZmZzZXQ6IFwiMVwiLCBzdG9wQ29sb3I6IFwiI0VDNjRBMVwiIH0pXG4gICAgICAgICAgICBdXG4gICAgICAgICAgfVxuICAgICAgICApLFxuICAgICAgICAvKiBAX19QVVJFX18gKi8gZTEoXG4gICAgICAgICAgXCJsaW5lYXJHcmFkaWVudFwiLFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGlkOiBcInBhaW50Ml9saW5lYXJcIixcbiAgICAgICAgICAgIHgxOiBcIi0zLjQwODQ2XCIsXG4gICAgICAgICAgICB5MTogXCIxMDguOTE3XCIsXG4gICAgICAgICAgICB4MjogXCIyNjMuMzMzXCIsXG4gICAgICAgICAgICB5MjogXCIxMDguOTE3XCIsXG4gICAgICAgICAgICBncmFkaWVudFVuaXRzOiBcInVzZXJTcGFjZU9uVXNlXCIsXG4gICAgICAgICAgICBjaGlsZHJlbjogW1xuICAgICAgICAgICAgICAvKiBAX19QVVJFX18gKi8gYyhcInN0b3BcIiwgeyBvZmZzZXQ6IFwiMC4yNVwiLCBzdG9wQ29sb3I6IFwiI0I4NEU5N1wiIH0pLFxuICAgICAgICAgICAgICAvKiBAX19QVVJFX18gKi8gYyhcInN0b3BcIiwgeyBvZmZzZXQ6IFwiMC40XCIsIHN0b3BDb2xvcjogXCIjQkM1MzlBXCIgfSksXG4gICAgICAgICAgICAgIC8qIEBfX1BVUkVfXyAqLyBjKFwic3RvcFwiLCB7IG9mZnNldDogXCIwLjZcIiwgc3RvcENvbG9yOiBcIiNDODYzQTNcIiB9KSxcbiAgICAgICAgICAgICAgLyogQF9fUFVSRV9fICovIGMoXCJzdG9wXCIsIHsgb2Zmc2V0OiBcIjAuODFcIiwgc3RvcENvbG9yOiBcIiNEQzdEQjFcIiB9KSxcbiAgICAgICAgICAgICAgLyogQF9fUFVSRV9fICovIGMoXCJzdG9wXCIsIHsgb2Zmc2V0OiBcIjFcIiwgc3RvcENvbG9yOiBcIiNGMjlBQzJcIiB9KVxuICAgICAgICAgICAgXVxuICAgICAgICAgIH1cbiAgICAgICAgKSxcbiAgICAgICAgLyogQF9fUFVSRV9fICovIGUxKFxuICAgICAgICAgIFwibGluZWFyR3JhZGllbnRcIixcbiAgICAgICAgICB7XG4gICAgICAgICAgICBpZDogXCJwYWludDNfbGluZWFyXCIsXG4gICAgICAgICAgICB4MTogXCIxMDMuODI2XCIsXG4gICAgICAgICAgICB5MTogXCI4Mi44Mjc3XCIsXG4gICAgICAgICAgICB4MjogXCIyNjAuMDAxXCIsXG4gICAgICAgICAgICB5MjogXCI4Mi44Mjc3XCIsXG4gICAgICAgICAgICBncmFkaWVudFVuaXRzOiBcInVzZXJTcGFjZU9uVXNlXCIsXG4gICAgICAgICAgICBjaGlsZHJlbjogW1xuICAgICAgICAgICAgICAvKiBAX19QVVJFX18gKi8gYyhcInN0b3BcIiwgeyBzdG9wQ29sb3I6IFwiI0YwOENCOVwiIH0pLFxuICAgICAgICAgICAgICAvKiBAX19QVVJFX18gKi8gYyhcInN0b3BcIiwgeyBvZmZzZXQ6IFwiMC41OFwiLCBzdG9wQ29sb3I6IFwiIzgzMUY4MlwiIH0pXG4gICAgICAgICAgICBdXG4gICAgICAgICAgfVxuICAgICAgICApXG4gICAgICBdIH0pXG4gICAgXVxuICB9XG4pLCBkSiA9ICgpID0+IC8qIEBfX1BVUkVfXyAqLyBlMShcbiAgXCJzdmdcIixcbiAge1xuICAgIHdpZHRoOiBcIjI2MFwiLFxuICAgIGhlaWdodDogXCIyNjBcIixcbiAgICB2aWV3Qm94OiBcIjAgMCAyNjAgMjYwXCIsXG4gICAgZmlsbDogXCJub25lXCIsXG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICBjaGlsZHJlbjogW1xuICAgICAgLyogQF9fUFVSRV9fICovIGMoXG4gICAgICAgIFwicGF0aFwiLFxuICAgICAgICB7XG4gICAgICAgICAgc3R5bGU6IHsgbWl4QmxlbmRNb2RlOiBcIm11bHRpcGx5XCIgfSxcbiAgICAgICAgICBkOiBcIk0yMjMuNTAzIDE0OS44MjhDMjE0Ljg2NCAxNjAuNjgxIDIwNC44OTcgMTcwLjQwNyAxOTMuODM2IDE3OC43NzlDMTg0LjUyNyAxNzEuNzA4IDE3Mi45MzEgMTY3LjUwOCAxNjEuOTQzIDE2My44MDdDMTQ2LjM4NCAxNTguNTU2IDEzMC4zODUgMTU0LjYwNiAxMTQuMzM3IDE1MS4xMzVDOTYuNDYzMyAxNDcuMjcgNzguNDM4NiAxNDQuMDg4IDYwLjM1MjQgMTQxLjM4OUM0Mi44OTAzIDEzOC43ODIgMTIuNzQ5NyAxMzUuNjc3IDkuNTYxNjEgMTMzLjAyMUM0LjgxNzk0IDEyOS4wNjcgLTEuMzU4MzcgNzMuNzk0MSAwLjI2NDg3NCA3NS4zODA0QzEyLjIxNzggODcuMDY1OSAyMzcuNzQxIDEzMy41NTMgMjIzLjUwMyAxNDkuODI4WlwiLFxuICAgICAgICAgIGZpbGw6IFwidXJsKCNwYWludDBfbGluZWFyKVwiXG4gICAgICAgIH1cbiAgICAgICksXG4gICAgICAvKiBAX19QVVJFX18gKi8gYyhcbiAgICAgICAgXCJwYXRoXCIsXG4gICAgICAgIHtcbiAgICAgICAgICBzdHlsZTogeyBtaXhCbGVuZE1vZGU6IFwibXVsdGlwbHlcIiB9LFxuICAgICAgICAgIGQ6IFwiTTE0Mi4wMzQgMjA1LjE1NEMxNzQuMTgzIDE5NS40MTYgMjAyLjYwMiAxNzYuMTEzIDIyMy41MDMgMTQ5LjgxNkMyMDIuODcyIDE3MS4yMTMgMTIxLjA4NiAxNzEuNDg3IDk4LjAxMjggMTcxLjI1OUM3MC43ODk3IDE3MS4wMDcgNTEuNjQ5IDE2OC4xMzMgNDkuNjQ0NiAxODEuOTY3QzQ2Ljk0NTMgMjAwLjY1MyAxMTQuNjczIDIxMS42OCAxNDIuMDM0IDIwNS4xNTRaXCIsXG4gICAgICAgICAgZmlsbDogXCJ1cmwoI3BhaW50MV9saW5lYXIpXCJcbiAgICAgICAgfVxuICAgICAgKSxcbiAgICAgIC8qIEBfX1BVUkVfXyAqLyBjKFxuICAgICAgICBcInBhdGhcIixcbiAgICAgICAge1xuICAgICAgICAgIHN0eWxlOiB7IG1peEJsZW5kTW9kZTogXCJtdWx0aXBseVwiIH0sXG4gICAgICAgICAgZDogXCJNMjU5Ljk5NiA3NS4yMzI5QzI1OS43NSA2MC40MzkzIDI0Ni45MyA1MS4wNzE4IDIyMy4yNDggNTEuMDAxMUMxNzQuMTgyIDUwLjg1OTcgMTcuMTMwNiA2NC4wMzkzIDAuMjMxMDUzIDc1LjQxMTJDMC4yMDY0NTkgNzUuNDI5NyAwLjE3MjY0MSA3NS40MTEyIDAuMTMyNjc1IDc1LjQxMTJDLTAuOTIxODE2IDc3LjI2ODEgNC41OTA0NCAxMjUuODYxIDkuMTA5NjggMTMyLjQ5NUw5LjU2MTYxIDEzMi44NDZDNi4zNzM1NCAxMjcuNzA4IDE0NC4yNjkgMTE4LjQ2NCAyMjEuMTQ1IDEwNS4wNjZDMjUwLjg2NSA5OS44ODI4IDI2MC4yMzUgODkuNTI4NSAyNTkuOTk2IDc1LjIzMjlaXCIsXG4gICAgICAgICAgZmlsbDogXCJ1cmwoI3BhaW50Ml9saW5lYXIpXCJcbiAgICAgICAgfVxuICAgICAgKSxcbiAgICAgIC8qIEBfX1BVUkVfXyAqLyBlMShcImRlZnNcIiwgeyBjaGlsZHJlbjogW1xuICAgICAgICAvKiBAX19QVVJFX18gKi8gZTEoXG4gICAgICAgICAgXCJsaW5lYXJHcmFkaWVudFwiLFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGlkOiBcInBhaW50MF9saW5lYXJcIixcbiAgICAgICAgICAgIHgxOiBcIjAuMDAwNDgyNTE2XCIsXG4gICAgICAgICAgICB5MTogXCIxMjcuMDYzXCIsXG4gICAgICAgICAgICB4MjogXCIyMjQuMTU1XCIsXG4gICAgICAgICAgICB5MjogXCIxMjcuMDYzXCIsXG4gICAgICAgICAgICBncmFkaWVudFVuaXRzOiBcInVzZXJTcGFjZU9uVXNlXCIsXG4gICAgICAgICAgICBjaGlsZHJlbjogW1xuICAgICAgICAgICAgICAvKiBAX19QVVJFX18gKi8gYyhcInN0b3BcIiwgeyBvZmZzZXQ6IFwiMC4xOFwiLCBzdG9wQ29sb3I6IFwiIzAwNDg5OVwiIH0pLFxuICAgICAgICAgICAgICAvKiBAX19QVVJFX18gKi8gYyhcInN0b3BcIiwgeyBvZmZzZXQ6IFwiMVwiLCBzdG9wQ29sb3I6IFwiI0RDNjRBMlwiIH0pXG4gICAgICAgICAgICBdXG4gICAgICAgICAgfVxuICAgICAgICApLFxuICAgICAgICAvKiBAX19QVVJFX18gKi8gZTEoXG4gICAgICAgICAgXCJsaW5lYXJHcmFkaWVudFwiLFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGlkOiBcInBhaW50MV9saW5lYXJcIixcbiAgICAgICAgICAgIHgxOiBcIjQ5LjU2NzdcIixcbiAgICAgICAgICAgIHkxOiBcIjE3OC40MzVcIixcbiAgICAgICAgICAgIHgyOiBcIjIyMy41MVwiLFxuICAgICAgICAgICAgeTI6IFwiMTc4LjQzNVwiLFxuICAgICAgICAgICAgZ3JhZGllbnRVbml0czogXCJ1c2VyU3BhY2VPblVzZVwiLFxuICAgICAgICAgICAgY2hpbGRyZW46IFtcbiAgICAgICAgICAgICAgLyogQF9fUFVSRV9fICovIGMoXCJzdG9wXCIsIHsgc3RvcENvbG9yOiBcIiNGMDhDQjlcIiB9KSxcbiAgICAgICAgICAgICAgLyogQF9fUFVSRV9fICovIGMoXCJzdG9wXCIsIHsgb2Zmc2V0OiBcIjFcIiwgc3RvcENvbG9yOiBcIiM4NTFGODJcIiB9KVxuICAgICAgICAgICAgXVxuICAgICAgICAgIH1cbiAgICAgICAgKSxcbiAgICAgICAgLyogQF9fUFVSRV9fICovIGUxKFxuICAgICAgICAgIFwibGluZWFyR3JhZGllbnRcIixcbiAgICAgICAgICB7XG4gICAgICAgICAgICBpZDogXCJwYWludDJfbGluZWFyXCIsXG4gICAgICAgICAgICB4MTogXCI3NS4wMDQ2XCIsXG4gICAgICAgICAgICB5MTogXCI5Mi4zNzUzXCIsXG4gICAgICAgICAgICB4MjogXCIxOTQuMjc5XCIsXG4gICAgICAgICAgICB5MjogXCI5MS4wMjg3XCIsXG4gICAgICAgICAgICBncmFkaWVudFVuaXRzOiBcInVzZXJTcGFjZU9uVXNlXCIsXG4gICAgICAgICAgICBjaGlsZHJlbjogW1xuICAgICAgICAgICAgICAvKiBAX19QVVJFX18gKi8gYyhcInN0b3BcIiwgeyBvZmZzZXQ6IFwiMC4xMlwiLCBzdG9wQ29sb3I6IFwiIzdGMjA4MlwiIH0pLFxuICAgICAgICAgICAgICAvKiBAX19QVVJFX18gKi8gYyhcInN0b3BcIiwgeyBvZmZzZXQ6IFwiMC40MVwiLCBzdG9wQ29sb3I6IFwiIzlGMjU4NFwiIH0pLFxuICAgICAgICAgICAgICAvKiBAX19QVVJFX18gKi8gYyhcInN0b3BcIiwgeyBvZmZzZXQ6IFwiMVwiLCBzdG9wQ29sb3I6IFwiI0U4MzA4QVwiIH0pXG4gICAgICAgICAgICBdXG4gICAgICAgICAgfVxuICAgICAgICApXG4gICAgICBdIH0pXG4gICAgXVxuICB9XG4pLCBiSiA9ICgpID0+IC8qIEBfX1BVUkVfXyAqLyBlMShcbiAgXCJzdmdcIixcbiAge1xuICAgIHdpZHRoOiBcIjI2MFwiLFxuICAgIGhlaWdodDogXCIyNjBcIixcbiAgICB2aWV3Qm94OiBcIjAgMCAyNjAgMjYwXCIsXG4gICAgZmlsbDogXCJub25lXCIsXG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICBjaGlsZHJlbjogW1xuICAgICAgLyogQF9fUFVSRV9fICovIGMoXG4gICAgICAgIFwicGF0aFwiLFxuICAgICAgICB7XG4gICAgICAgICAgc3R5bGU6IHsgbWl4QmxlbmRNb2RlOiBcIm11bHRpcGx5XCIgfSxcbiAgICAgICAgICBkOiBcIk0yMjMuNTI4IDIyOC40NjRDMjAxLjA2OCAyMjQuNDc4IDE2NS40MTcgMjE2LjUwOSAxNjguODk2IDE5MS4wN0MxNzEuNTc0IDE3MS40ODUgMjAzLjk3OSAxNjUuNzc1IDIxNy41MiAxNjIuNjE4QzIyOC4yNzEgMTYwLjExOCAyNTYuOTQ0IDE1Ni42NjMgMjU5Ljg1OSAxNTIuMDk3QzI1OS44NTkgMTUyLjA5NyAyNTkuODU5IDE1Mi4wOTcgMjU5Ljg1OSAxNTIuMTIxQzI1OS45MDggMTUzLjI0NiAyNTkuOTQ0IDE1NC4zNzYgMjU5Ljk2OCAxNTUuNTEyVjE1NS43MTNDMjU5Ljk5MiAxNTYuNzggMjYwIDE1Ny44NTEgMjYwIDE1OC45MzRDMjYwIDE4My40MTUgMjU0LjQ5NiAyMDYuMzM4IDI0NC45MDEgMjI2LjAwOEMyNDQuNzc2IDIyNi4yNTMgMjQ0LjY1MSAyMjYuNTAzIDI0NC41MjIgMjI2Ljc0OUMyNDMuMzYzIDIyOC45ODcgMjM1LjU5NSAyMzAuNjA2IDIyMy41MjggMjI4LjQ2NFpcIixcbiAgICAgICAgICBmaWxsOiBcInVybCgjcGFpbnQwX2xpbmVhcilcIlxuICAgICAgICB9XG4gICAgICApLFxuICAgICAgLyogQF9fUFVSRV9fICovIGMoXG4gICAgICAgIFwicGF0aFwiLFxuICAgICAgICB7XG4gICAgICAgICAgc3R5bGU6IHsgbWl4QmxlbmRNb2RlOiBcIm11bHRpcGx5XCIgfSxcbiAgICAgICAgICBkOiBcIk0yNTkuOTY4IDE1NS43MTNWMTU1LjUxMkMyNTkuOTY4IDE1NC43MzQgMjU5LjkyNyAxNTMuOTU3IDI1OS44OTkgMTUzLjE4NEMyNTkuOTMgMTUyLjgzOSAyNTkuOTE4IDE1Mi40OTIgMjU5Ljg2MyAxNTIuMTQ5QzI1NS41MzkgMTM4LjE3MyAxOTAuMzQxIDEyMS41NDggMTQ2LjU0NSAxMTMuMjY1QzkxLjE3MjMgMTAyLjgxMyA3LjczODg1IDkxLjggMTEuNjc2OCA3MC4yNjIyQzguNTg4NDQgNzUuMjE0OCA0LjM4MDczIDg0Ljc1NzcgMy4zMDk2OCA5MC41NTk5Qy0yLjU2OTAzIDEyMi41MyAzLjM1OCAxMzAuNTM5IDcuODIzNCAxMzQuMTU1TDguMDYwOTcgMTM0LjM0OEM1Ni4yNjI0IDE1Ni42MzUgMjczLjQwOCAxNjEuNzI5IDI0NC4zMjEgMjI2Ljk1OEwyNDQuMjk3IDIyNy4wMTRDMjQ0LjM4MSAyMjYuOTI1IDI0NC40NTYgMjI2LjgyNyAyNDQuNTE4IDIyNi43MkwyNDQuODk3IDIyNS45OEMyNTQuNDkyIDIwNi4zMSAyNTkuOTk2IDE4My4zODcgMjU5Ljk5NiAxNTguOTA2QzI2MCAxNTcuODM1IDI1OS45OTIgMTU2Ljc4IDI1OS45NjggMTU1LjcxM1pcIixcbiAgICAgICAgICBmaWxsOiBcInVybCgjcGFpbnQxX2xpbmVhcilcIlxuICAgICAgICB9XG4gICAgICApLFxuICAgICAgLyogQF9fUFVSRV9fICovIGMoXG4gICAgICAgIFwicGF0aFwiLFxuICAgICAgICB7XG4gICAgICAgICAgc3R5bGU6IHsgbWl4QmxlbmRNb2RlOiBcIm11bHRpcGx5XCIgfSxcbiAgICAgICAgICBkOiBcIk0yNTYuMjUxIDY0LjI1ODdDMjUyLjEzMiA0NC43NzQ0IDIyMi4wNDYgMzYuOTc5IDE4Ni44OTUgMzMuNDYzOUM4Ny42ODEzIDIzLjU0MjUgMzQuMDM2IDQ1LjI2NTYgMTIuNzY0IDY4LjYwMzNDOS4xMDM4NiA3My45NzA2IDUuMDYxMjQgODMuNTg1OSAzLjMxMzczIDkwLjU1OTlDLTQuMzk3MDUgMTIxLjM2MyAzLjE4ODkxIDEyOS45NjcgNy41MTc0MSAxMzMuODg5QzUuNDc1OTcgMTMxLjE4MyA1LjE3ODAxIDEyOC45NjEgNC45NDA0NCAxMjYuNDMyQzIuMjcwODYgOTguNDM1NyAxMDQuNjA1IDgxLjk5NTUgMjEzLjE0MyAxMDIuOTU3QzI1Mi45NjIgMTEwLjY1MiAyNjAuMzc0IDgzLjc0NyAyNTYuMjUxIDY0LjI1ODdaXCIsXG4gICAgICAgICAgZmlsbDogXCJ1cmwoI3BhaW50Ml9saW5lYXIpXCJcbiAgICAgICAgfVxuICAgICAgKSxcbiAgICAgIC8qIEBfX1BVUkVfXyAqLyBlMShcImRlZnNcIiwgeyBjaGlsZHJlbjogW1xuICAgICAgICAvKiBAX19QVVJFX18gKi8gZTEoXG4gICAgICAgICAgXCJsaW5lYXJHcmFkaWVudFwiLFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGlkOiBcInBhaW50MF9saW5lYXJcIixcbiAgICAgICAgICAgIHgxOiBcIjE2OC42NTlcIixcbiAgICAgICAgICAgIHkxOiBcIjE5MC43ODRcIixcbiAgICAgICAgICAgIHgyOiBcIjI2NS4xOThcIixcbiAgICAgICAgICAgIHkyOiBcIjE5MC43ODRcIixcbiAgICAgICAgICAgIGdyYWRpZW50VW5pdHM6IFwidXNlclNwYWNlT25Vc2VcIixcbiAgICAgICAgICAgIGNoaWxkcmVuOiBbXG4gICAgICAgICAgICAgIC8qIEBfX1BVUkVfXyAqLyBjKFwic3RvcFwiLCB7IHN0b3BDb2xvcjogXCIjQ0JBRkQ0XCIgfSksXG4gICAgICAgICAgICAgIC8qIEBfX1BVUkVfXyAqLyBjKFwic3RvcFwiLCB7IG9mZnNldDogXCIwLjY2XCIsIHN0b3BDb2xvcjogXCIjOTM1QUEwXCIgfSlcbiAgICAgICAgICAgIF1cbiAgICAgICAgICB9XG4gICAgICAgICksXG4gICAgICAgIC8qIEBfX1BVUkVfXyAqLyBlMShcbiAgICAgICAgICBcImxpbmVhckdyYWRpZW50XCIsXG4gICAgICAgICAge1xuICAgICAgICAgICAgaWQ6IFwicGFpbnQxX2xpbmVhclwiLFxuICAgICAgICAgICAgeDE6IFwiMjAuODE3XCIsXG4gICAgICAgICAgICB5MTogXCIxNDguNjQ2XCIsXG4gICAgICAgICAgICB4MjogXCIyMTcuNDY0XCIsXG4gICAgICAgICAgICB5MjogXCIxNDguNjQ2XCIsXG4gICAgICAgICAgICBncmFkaWVudFVuaXRzOiBcInVzZXJTcGFjZU9uVXNlXCIsXG4gICAgICAgICAgICBjaGlsZHJlbjogW1xuICAgICAgICAgICAgICAvKiBAX19QVVJFX18gKi8gYyhcInN0b3BcIiwgeyBzdG9wQ29sb3I6IFwiI0YyOUFDMlwiIH0pLFxuICAgICAgICAgICAgICAvKiBAX19QVVJFX18gKi8gYyhcInN0b3BcIiwgeyBvZmZzZXQ6IFwiMVwiLCBzdG9wQ29sb3I6IFwiI0I4NEU5N1wiIH0pXG4gICAgICAgICAgICBdXG4gICAgICAgICAgfVxuICAgICAgICApLFxuICAgICAgICAvKiBAX19QVVJFX18gKi8gZTEoXG4gICAgICAgICAgXCJsaW5lYXJHcmFkaWVudFwiLFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGlkOiBcInBhaW50Ml9saW5lYXJcIixcbiAgICAgICAgICAgIHgxOiBcIjguMTY1NjhcIixcbiAgICAgICAgICAgIHkxOiBcIjgyLjQ0MjRcIixcbiAgICAgICAgICAgIHgyOiBcIjI2NC40NDFcIixcbiAgICAgICAgICAgIHkyOiBcIjgyLjQ0MjRcIixcbiAgICAgICAgICAgIGdyYWRpZW50VW5pdHM6IFwidXNlclNwYWNlT25Vc2VcIixcbiAgICAgICAgICAgIGNoaWxkcmVuOiBbXG4gICAgICAgICAgICAgIC8qIEBfX1BVUkVfXyAqLyBjKFwic3RvcFwiLCB7IG9mZnNldDogXCIwLjA2XCIsIHN0b3BDb2xvcjogXCIjODMxRjgyXCIgfSksXG4gICAgICAgICAgICAgIC8qIEBfX1BVUkVfXyAqLyBjKFwic3RvcFwiLCB7IG9mZnNldDogXCIwLjIxXCIsIHN0b3BDb2xvcjogXCIjODgyNDg1XCIgfSksXG4gICAgICAgICAgICAgIC8qIEBfX1BVUkVfXyAqLyBjKFwic3RvcFwiLCB7IG9mZnNldDogXCIwLjQxXCIsIHN0b3BDb2xvcjogXCIjOTgzNDhEXCIgfSksXG4gICAgICAgICAgICAgIC8qIEBfX1BVUkVfXyAqLyBjKFwic3RvcFwiLCB7IG9mZnNldDogXCIwLjYyXCIsIHN0b3BDb2xvcjogXCIjQjI0RTlBXCIgfSksXG4gICAgICAgICAgICAgIC8qIEBfX1BVUkVfXyAqLyBjKFwic3RvcFwiLCB7IG9mZnNldDogXCIwLjg1XCIsIHN0b3BDb2xvcjogXCIjRDY3MkFDXCIgfSksXG4gICAgICAgICAgICAgIC8qIEBfX1BVUkVfXyAqLyBjKFwic3RvcFwiLCB7IG9mZnNldDogXCIxXCIsIHN0b3BDb2xvcjogXCIjRjA4Q0I5XCIgfSlcbiAgICAgICAgICAgIF1cbiAgICAgICAgICB9XG4gICAgICAgIClcbiAgICAgIF0gfSlcbiAgICBdXG4gIH1cbiksIE1KID0gKCkgPT4gLyogQF9fUFVSRV9fICovIGUxKFxuICBcInN2Z1wiLFxuICB7XG4gICAgd2lkdGg6IFwiMjYwXCIsXG4gICAgaGVpZ2h0OiBcIjI2MFwiLFxuICAgIHZpZXdCb3g6IFwiMCAwIDI2MCAyNjBcIixcbiAgICBmaWxsOiBcIm5vbmVcIixcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIGNoaWxkcmVuOiBbXG4gICAgICAvKiBAX19QVVJFX18gKi8gYyhcbiAgICAgICAgXCJwYXRoXCIsXG4gICAgICAgIHtcbiAgICAgICAgICBzdHlsZTogeyBtaXhCbGVuZE1vZGU6IFwibXVsdGlwbHlcIiB9LFxuICAgICAgICAgIGQ6IFwiTTk3LjY2NjkgODAuOTkzOUMxMDIuNzA4IDk3LjAzNDIgMTI0LjEyMSA5NS4yNjYyIDE0Ny4wMiA5My4zODk3QzE3NS4wMjIgOTEuMDg5NCAyMzguOTk2IDkxLjAwNzIgMjU4LjU5OSAxMTQuNDIyTDI1Ny44MiAxMTMuMzQ0QzIzOS45MjQgODguODQ3OSAyMTYuMDE1IDY5LjM4IDE4OC40MDEgNTYuODIwMkMxNjcuNDQ4IDQ4LjM5NzUgMTQ0Ljk1MyA1MC40NjQ1IDEzMC4wMzMgNTQuNTk1NEMxMTUuMTE0IDU4LjcyNjIgOTIuNjE2IDY0LjkyNDEgOTcuNjY2OSA4MC45OTM5WlwiLFxuICAgICAgICAgIGZpbGw6IFwidXJsKCNwYWludDBfbGluZWFyKVwiXG4gICAgICAgIH1cbiAgICAgICksXG4gICAgICAvKiBAX19QVVJFX18gKi8gYyhcbiAgICAgICAgXCJwYXRoXCIsXG4gICAgICAgIHtcbiAgICAgICAgICBzdHlsZTogeyBtaXhCbGVuZE1vZGU6IFwibXVsdGlwbHlcIiB9LFxuICAgICAgICAgIGQ6IFwiTTExLjgyOTggMTMwLjYxN0M3LjY0MzA2IDEzMS40NDUgLTIuODA3MjcgMTczLjkwNyAwLjcxMjMxOSAxNzguMTI2QzAuNzEyMzE5IDE3OC4xMjYgMTguMjIxNSAxODAuMDE5IDUxLjk3ODEgMTc3LjI1NUMxNjMuNzI4IDE2OC4xMDMgMjczLjY2NiAxNDAuMTIxIDI1OC42MTIgMTE0LjQyOEMyNTguMzU2IDExNC4wNzQgMjU4LjA5OSAxMTMuNzE1IDI1Ny44MzYgMTEzLjM1N0MyNTAuMTgyIDEwMi44ODUgMjQxLjM5OSA5My4yODc0IDIzMS42NDUgODQuNzM3MUMyMTEuMzA2IDEzMy4zNDQgMTYuODExNyAxMzAuNjE3IDExLjgyOTggMTMwLjYxN1pcIixcbiAgICAgICAgICBmaWxsOiBcInVybCgjcGFpbnQxX2xpbmVhcilcIlxuICAgICAgICB9XG4gICAgICApLFxuICAgICAgLyogQF9fUFVSRV9fICovIGMoXG4gICAgICAgIFwicGF0aFwiLFxuICAgICAgICB7XG4gICAgICAgICAgc3R5bGU6IHsgbWl4QmxlbmRNb2RlOiBcIm11bHRpcGx5XCIgfSxcbiAgICAgICAgICBkOiBcIk0yMDcuODM2IDE3MS4zMTdDMjA1LjEzOCAxNDguMTU5IDE3Mi40OTIgMTUxLjAwMSAxMjcuMjQ3IDE0Ni42MTFDMTAyLjI3MSAxNDQuMTg2IDM0LjEyNzEgMTM4Ljc3IDExLjYyNiAxMzAuNjg5QzcuNDc1NDggMTMyLjcxMyAtMS45OTg4MyAxNzAuOTEgMC4zNzcxNCAxNzcuNDk5TDAuNjc2MTkxIDE3OC4wNzdMMC43MTIzNCAxNzguMTI2VjE3OC4xNDZMMC43NDg0ODggMTc4LjIxOEMxMy42NTM3IDIwMi44MjYgMTI0LjY2NyAyMTQuNjMgMTY1LjY0MyAyMDYuODg0QzE5NC4wNDMgMjAxLjUxMSAyMDkuNTQ4IDE4Ni4wMjYgMjA3LjgzNiAxNzEuMzE3WlwiLFxuICAgICAgICAgIGZpbGw6IFwidXJsKCNwYWludDJfbGluZWFyKVwiXG4gICAgICAgIH1cbiAgICAgICksXG4gICAgICAvKiBAX19QVVJFX18gKi8gZTEoXCJkZWZzXCIsIHsgY2hpbGRyZW46IFtcbiAgICAgICAgLyogQF9fUFVSRV9fICovIGUxKFxuICAgICAgICAgIFwibGluZWFyR3JhZGllbnRcIixcbiAgICAgICAgICB7XG4gICAgICAgICAgICBpZDogXCJwYWludDBfbGluZWFyXCIsXG4gICAgICAgICAgICB4MTogXCI5Ni45NDA3XCIsXG4gICAgICAgICAgICB5MTogXCI4Mi43MTI3XCIsXG4gICAgICAgICAgICB4MjogXCIyNTguNTk5XCIsXG4gICAgICAgICAgICB5MjogXCI4Mi43MTI3XCIsXG4gICAgICAgICAgICBncmFkaWVudFVuaXRzOiBcInVzZXJTcGFjZU9uVXNlXCIsXG4gICAgICAgICAgICBjaGlsZHJlbjogW1xuICAgICAgICAgICAgICAvKiBAX19QVVJFX18gKi8gYyhcInN0b3BcIiwgeyBvZmZzZXQ6IFwiMC4xMlwiLCBzdG9wQ29sb3I6IFwiI0YwOENCOVwiIH0pLFxuICAgICAgICAgICAgICAvKiBAX19QVVJFX18gKi8gYyhcInN0b3BcIiwgeyBvZmZzZXQ6IFwiMVwiLCBzdG9wQ29sb3I6IFwiIzg1MUY4MlwiIH0pXG4gICAgICAgICAgICBdXG4gICAgICAgICAgfVxuICAgICAgICApLFxuICAgICAgICAvKiBAX19QVVJFX18gKi8gZTEoXG4gICAgICAgICAgXCJsaW5lYXJHcmFkaWVudFwiLFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGlkOiBcInBhaW50MV9saW5lYXJcIixcbiAgICAgICAgICAgIHgxOiBcIi0wLjAwMDgwMDQwM1wiLFxuICAgICAgICAgICAgeTE6IFwiMTMxLjc0N1wiLFxuICAgICAgICAgICAgeDI6IFwiMjU5Ljk4OVwiLFxuICAgICAgICAgICAgeTI6IFwiMTMxLjc0N1wiLFxuICAgICAgICAgICAgZ3JhZGllbnRVbml0czogXCJ1c2VyU3BhY2VPblVzZVwiLFxuICAgICAgICAgICAgY2hpbGRyZW46IFtcbiAgICAgICAgICAgICAgLyogQF9fUFVSRV9fICovIGMoXCJzdG9wXCIsIHsgb2Zmc2V0OiBcIjAuMThcIiwgc3RvcENvbG9yOiBcIiM4NjMyOEFcIiB9KSxcbiAgICAgICAgICAgICAgLyogQF9fUFVSRV9fICovIGMoXCJzdG9wXCIsIHsgb2Zmc2V0OiBcIjFcIiwgc3RvcENvbG9yOiBcIiNDRTgyQjZcIiB9KVxuICAgICAgICAgICAgXVxuICAgICAgICAgIH1cbiAgICAgICAgKSxcbiAgICAgICAgLyogQF9fUFVSRV9fICovIGUxKFxuICAgICAgICAgIFwibGluZWFyR3JhZGllbnRcIixcbiAgICAgICAgICB7XG4gICAgICAgICAgICBpZDogXCJwYWludDJfbGluZWFyXCIsXG4gICAgICAgICAgICB4MTogXCIxNy4wNDE4XCIsXG4gICAgICAgICAgICB5MTogXCIyMDguOTQ1XCIsXG4gICAgICAgICAgICB4MjogXCIxODIuNzk4XCIsXG4gICAgICAgICAgICB5MjogXCIxMjEuMDRcIixcbiAgICAgICAgICAgIGdyYWRpZW50VW5pdHM6IFwidXNlclNwYWNlT25Vc2VcIixcbiAgICAgICAgICAgIGNoaWxkcmVuOiBbXG4gICAgICAgICAgICAgIC8qIEBfX1BVUkVfXyAqLyBjKFwic3RvcFwiLCB7IG9mZnNldDogXCIwLjI4XCIsIHN0b3BDb2xvcjogXCIjN0YyMDgyXCIgfSksXG4gICAgICAgICAgICAgIC8qIEBfX1BVUkVfXyAqLyBjKFwic3RvcFwiLCB7IG9mZnNldDogXCIwLjUyXCIsIHN0b3BDb2xvcjogXCIjOUYyNTg0XCIgfSksXG4gICAgICAgICAgICAgIC8qIEBfX1BVUkVfXyAqLyBjKFwic3RvcFwiLCB7IG9mZnNldDogXCIxXCIsIHN0b3BDb2xvcjogXCIjRTgzMDhBXCIgfSlcbiAgICAgICAgICAgIF1cbiAgICAgICAgICB9XG4gICAgICAgIClcbiAgICAgIF0gfSlcbiAgICBdXG4gIH1cbiksIEFKID0gKCkgPT4gLyogQF9fUFVSRV9fICovIGUxKFxuICBcInN2Z1wiLFxuICB7XG4gICAgd2lkdGg6IFwiMjYwXCIsXG4gICAgaGVpZ2h0OiBcIjI2MFwiLFxuICAgIHZpZXdCb3g6IFwiMCAwIDI2MCAyNjBcIixcbiAgICBmaWxsOiBcIm5vbmVcIixcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIGNoaWxkcmVuOiBbXG4gICAgICAvKiBAX19QVVJFX18gKi8gYyhcbiAgICAgICAgXCJwYXRoXCIsXG4gICAgICAgIHtcbiAgICAgICAgICBzdHlsZTogeyBtaXhCbGVuZE1vZGU6IFwibXVsdGlwbHlcIiB9LFxuICAgICAgICAgIGQ6IFwiTTI1OS4zIDEyNi45ODFDMjU0LjI3NiAxMzguMDYxIDI0Ny44ODMgMTQ4LjQ2OCAyNDAuMjcyIDE1Ny45NkMxOTcuNzU0IDEzOS44MTEgMzQuMTAxMyAxNzguNDA3IDI2LjcyNyAxNzMuMThDMjQuMzk3NyAxNzAuNjE1IDIxLjI1NDMgMTY3LjI1NiAxOS4wNTE2IDE2NC41OTJDMTEuNDMxIDE1NC4zMzEgMTEuMjg3MyAxNTQuMTI5IDguMDEwNTYgMTQ4LjIyMkMyLjI5MTY2IDEzNi43MDUgMi4xNzg3OSAxMzYuNDg2IDAgMTMwLjAzNUMwIDEzMC4wMzUgMzMuOTY0NSAxMjEuMzU1IDY0LjA2MDYgMTE2LjI3NUMxOTYuNjQ1IDkzLjg5NTYgMjY3LjkxNiAxMTAuMDkxIDI1OS4zIDEyNi45ODFaXCIsXG4gICAgICAgICAgZmlsbDogXCJ1cmwoI3BhaW50MF9saW5lYXIpXCJcbiAgICAgICAgfVxuICAgICAgKSxcbiAgICAgIC8qIEBfX1BVUkVfXyAqLyBjKFxuICAgICAgICBcInBhdGhcIixcbiAgICAgICAge1xuICAgICAgICAgIHN0eWxlOiB7IG1peEJsZW5kTW9kZTogXCJtdWx0aXBseVwiIH0sXG4gICAgICAgICAgZDogXCJNMjAxLjg1NSAxOTEuNDlDMjI3LjEyIDE3Ni4zMjcgMjQ3LjE2NCAxNTMuODI0IDI1OS4zMTcgMTI2Ljk4MUMyNDYuMzU0IDE0OS41OTcgMTc2Ljg1NSAxNjcuMzQyIDE1Ny4xODEgMTcyLjEwM0MxMzMuOTcgMTc3LjcxMiAxMTcuMDcgMTc5LjM1OCAxMTguMzM1IDE5MS41NzJDMTIwLjAyMiAyMDguMDM0IDE3OS45OTUgMjAyLjkgMjAxLjg1NSAxOTEuNDlaXCIsXG4gICAgICAgICAgZmlsbDogXCJ1cmwoI3BhaW50MV9saW5lYXIpXCJcbiAgICAgICAgfVxuICAgICAgKSxcbiAgICAgIC8qIEBfX1BVUkVfXyAqLyBjKFxuICAgICAgICBcInBhdGhcIixcbiAgICAgICAge1xuICAgICAgICAgIHN0eWxlOiB7IG1peEJsZW5kTW9kZTogXCJtdWx0aXBseVwiIH0sXG4gICAgICAgICAgZDogXCJNMjM3LjY4IDkwLjEzMzJDMjI5LjczMSA5Ni41MTIzIDIxNi44NiA5Ny4zNzA4IDIwNy4xMTUgOTkuNTExOUMxNzQuMjI1IDEwNi43MjkgMTQxLjQ0NCAxMTMuMjMxIDEwOS4xMTcgMTIyLjg2NkM0NC4yODM4IDE0Mi4xOTggMjMuMjU4NyAxNjUuMjkgMjYuNzI3IDE3My4xOEMyNC4zOTc3IDE3MC42MTUgMjEuMjU0MyAxNjcuMjU2IDE5LjA1MTYgMTY0LjU5MkMxMS40MzEgMTU0LjMzMSAxMS4yODczIDE1NC4xMjkgOC4wMTA1NiAxNDguMjIyQzIuMjkxNjYgMTM2LjcwNSAyLjE3ODc5IDEzNi40ODYgMCAxMzAuMDM2QzAgMTMwLjAzNiAxMi4yNjIxIDExMy4wODQgNTIuNzI4OCA5Mi4zNjMzQzk4LjkxNDQgNjguNzE0NyAxNTAuNzk4IDU4LjY4MjcgMjAyLjQxNiA1OS4wMDc2QzIxMS40MDQgNTkuMDY1OCAyMjEuMzYxIDU5LjQyMTUgMjI5Ljc0MSA2Mi45ODIxQzI0MC4zNTUgNjcuNDkzNiAyNDguNzg2IDgxLjIxMjggMjM3LjY4IDkwLjEzMzJaXCIsXG4gICAgICAgICAgZmlsbDogXCJ1cmwoI3BhaW50Ml9saW5lYXIpXCJcbiAgICAgICAgfVxuICAgICAgKSxcbiAgICAgIC8qIEBfX1BVUkVfXyAqLyBlMShcImRlZnNcIiwgeyBjaGlsZHJlbjogW1xuICAgICAgICAvKiBAX19QVVJFX18gKi8gZTEoXG4gICAgICAgICAgXCJsaW5lYXJHcmFkaWVudFwiLFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGlkOiBcInBhaW50MF9saW5lYXJcIixcbiAgICAgICAgICAgIHgxOiBcIjEwLjQ3OTVcIixcbiAgICAgICAgICAgIHkxOiBcIjE3MS42MjFcIixcbiAgICAgICAgICAgIHgyOiBcIjI1Ni40OTRcIixcbiAgICAgICAgICAgIHkyOiBcIjEwOS42NDRcIixcbiAgICAgICAgICAgIGdyYWRpZW50VW5pdHM6IFwidXNlclNwYWNlT25Vc2VcIixcbiAgICAgICAgICAgIGNoaWxkcmVuOiBbXG4gICAgICAgICAgICAgIC8qIEBfX1BVUkVfXyAqLyBjKFwic3RvcFwiLCB7IG9mZnNldDogXCIwLjI4XCIsIHN0b3BDb2xvcjogXCIjN0YyMDgyXCIgfSksXG4gICAgICAgICAgICAgIC8qIEBfX1BVUkVfXyAqLyBjKFwic3RvcFwiLCB7IG9mZnNldDogXCIwLjUyXCIsIHN0b3BDb2xvcjogXCIjOUYyNTg0XCIgfSksXG4gICAgICAgICAgICAgIC8qIEBfX1BVUkVfXyAqLyBjKFwic3RvcFwiLCB7IG9mZnNldDogXCIxXCIsIHN0b3BDb2xvcjogXCIjRTgzMDhBXCIgfSlcbiAgICAgICAgICAgIF1cbiAgICAgICAgICB9XG4gICAgICAgICksXG4gICAgICAgIC8qIEBfX1BVUkVfXyAqLyBlMShcbiAgICAgICAgICBcImxpbmVhckdyYWRpZW50XCIsXG4gICAgICAgICAge1xuICAgICAgICAgICAgaWQ6IFwicGFpbnQxX2xpbmVhclwiLFxuICAgICAgICAgICAgeDE6IFwiMTE3LjVcIixcbiAgICAgICAgICAgIHkxOiBcIjE4OC41NzVcIixcbiAgICAgICAgICAgIHgyOiBcIjI2NS40MzRcIixcbiAgICAgICAgICAgIHkyOiBcIjE1MS4zMDdcIixcbiAgICAgICAgICAgIGdyYWRpZW50VW5pdHM6IFwidXNlclNwYWNlT25Vc2VcIixcbiAgICAgICAgICAgIGNoaWxkcmVuOiBbXG4gICAgICAgICAgICAgIC8qIEBfX1BVUkVfXyAqLyBjKFwic3RvcFwiLCB7IG9mZnNldDogXCIwLjEyXCIsIHN0b3BDb2xvcjogXCIjRjA4Q0I5XCIgfSksXG4gICAgICAgICAgICAgIC8qIEBfX1BVUkVfXyAqLyBjKFwic3RvcFwiLCB7IG9mZnNldDogXCIxXCIsIHN0b3BDb2xvcjogXCIjODUxRjgyXCIgfSlcbiAgICAgICAgICAgIF1cbiAgICAgICAgICB9XG4gICAgICAgICksXG4gICAgICAgIC8qIEBfX1BVUkVfXyAqLyBlMShcbiAgICAgICAgICBcImxpbmVhckdyYWRpZW50XCIsXG4gICAgICAgICAge1xuICAgICAgICAgICAgaWQ6IFwicGFpbnQyX2xpbmVhclwiLFxuICAgICAgICAgICAgeDE6IFwiMi4xMzAzOVwiLFxuICAgICAgICAgICAgeTE6IFwiMTM4LjQ4XCIsXG4gICAgICAgICAgICB4MjogXCIyNDIuNzUyXCIsXG4gICAgICAgICAgICB5MjogXCI3Ny44NjE4XCIsXG4gICAgICAgICAgICBncmFkaWVudFVuaXRzOiBcInVzZXJTcGFjZU9uVXNlXCIsXG4gICAgICAgICAgICBjaGlsZHJlbjogW1xuICAgICAgICAgICAgICAvKiBAX19QVVJFX18gKi8gYyhcInN0b3BcIiwgeyBvZmZzZXQ6IFwiMC4xOFwiLCBzdG9wQ29sb3I6IFwiIzg2MzI4QVwiIH0pLFxuICAgICAgICAgICAgICAvKiBAX19QVVJFX18gKi8gYyhcInN0b3BcIiwgeyBvZmZzZXQ6IFwiMVwiLCBzdG9wQ29sb3I6IFwiI0NFODJCNlwiIH0pXG4gICAgICAgICAgICBdXG4gICAgICAgICAgfVxuICAgICAgICApXG4gICAgICBdIH0pXG4gICAgXVxuICB9XG4pLCB1SiA9ICgpID0+IC8qIEBfX1BVUkVfXyAqLyBlMShcbiAgXCJzdmdcIixcbiAge1xuICAgIHdpZHRoOiBcIjI2MFwiLFxuICAgIGhlaWdodDogXCIyNjBcIixcbiAgICB2aWV3Qm94OiBcIjAgMCAyNjAgMjYwXCIsXG4gICAgZmlsbDogXCJub25lXCIsXG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICBjaGlsZHJlbjogW1xuICAgICAgLyogQF9fUFVSRV9fICovIGMoXG4gICAgICAgIFwicGF0aFwiLFxuICAgICAgICB7XG4gICAgICAgICAgc3R5bGU6IHsgbWl4QmxlbmRNb2RlOiBcIm11bHRpcGx5XCIgfSxcbiAgICAgICAgICBkOiBcIk0yNTkuMjc4IDMwLjcxNzRDMjM2LjE5OSAyMi45Njg1IDIxMi44MzIgNDAuMjUyNiAxOTUuNjg2IDUzLjYzNjdDMTQ2LjExOSA5Mi4yODMgMTA0LjQzOCAxNDYuMDYzIDg2LjU2MSAyMDYuODk4QzgyLjI5MDEgMjIxLjQ1IDgwLjYxNjYgMjM2LjQxNiA3OS4yODUxIDI1MS40OTJDNzguNzgzIDI1Ny4xNDkgMjYuMTQxNCAyNTMuMDk2IDI1LjQ0MjkgMjQ1LjY3MUMyNC45Mjk5IDI0MC4zODIgMjUuMjEzNyAyMjcuODAyIDI2LjE3MDUgMjIwLjY2QzM0LjkyMzUgMTU0LjA2NyA2OC43ODU5IDEwMC4xMzcgMTA4Ljg3NiA0OC4zNTQzQzExNy45MzEgMzYuNjYxOSAxMzQuNzMyIDE4LjY3OTMgMTQ2LjY1IDkuNzY5ODhDMTQ3LjkyNiA4Ljc0OTY4IDE0OS4zMDUgNy44NjQ1NiAxNTAuNzY0IDcuMTI4N0MxNTQuMDcxIDUuNTc1MjggMjUxLjcyMiAxLjQyNzk4IDI1OS4yNzggMzAuNzE3NFpcIixcbiAgICAgICAgICBmaWxsOiBcInVybCgjcGFpbnQwX2xpbmVhcilcIlxuICAgICAgICB9XG4gICAgICApLFxuICAgICAgLyogQF9fUFVSRV9fICovIGMoXG4gICAgICAgIFwicGF0aFwiLFxuICAgICAgICB7XG4gICAgICAgICAgc3R5bGU6IHsgbWl4QmxlbmRNb2RlOiBcIm11bHRpcGx5XCIgfSxcbiAgICAgICAgICBkOiBcIk0xNTAuOTc1IDcuMDU5NjJDMTU2Ljc5NiA1LjQ2MjU0IDI1MS44MjcgMS44NDI3NSAyNTkuMjc4IDMwLjcxNzRMMjU5LjM0MyAzMC43NDY1VjMwLjc2ODRDMjU5LjQ2NyAzMS4wNDE0IDI1OS41NTggMzEuMzI4NSAyNTkuNjEzIDMxLjYyMzNDMjYzIDUwLjcxMTggMjQzLjk2OSAxMDIuNjIyIDIxMC41NCAxNTIuNTlDMTc5LjY5MyAxOTguNzE2IDE1OC4zMjQgMjE0LjIyNSAxMzUuODUyIDIwMi45MjFDMTE2Ljc3OCAxOTMuMDE5IDExOC43MzIgMTY0LjMxOSAxMzQuMjA0IDEyMS43MTRDMTQ4Ljc5MiA4MS41MDM3IDE3OS4zMjYgMTUuMDYzMiAxNTAuOTc1IDcuMDU5NjJaXCIsXG4gICAgICAgICAgZmlsbDogXCJ1cmwoI3BhaW50MV9saW5lYXIpXCJcbiAgICAgICAgfVxuICAgICAgKSxcbiAgICAgIC8qIEBfX1BVUkVfXyAqLyBjKFxuICAgICAgICBcInBhdGhcIixcbiAgICAgICAge1xuICAgICAgICAgIHN0eWxlOiB7IG1peEJsZW5kTW9kZTogXCJtdWx0aXBseVwiIH0sXG4gICAgICAgICAgZDogXCJNMTExLjQyMyA1Ny4yMjM5QzEyMC4yMTYgNjQuOTk4MyA2NS40NDYzIDE0Ny43MTkgNzQuMjQyOSAyMjguMzYyQzc2LjM5MjkgMjQ4LjA2NSA3OS4xMTA1IDI0OS4xNDIgNzkuMjc0MiAyNTEuNDkyQzc4Ljc3MjIgMjU3LjE0OSAyNi40MzYxIDI1My4wNiAyNS40MzIxIDI0NS42NzJDMTguNzU2NCAxOTcuMzQ1IDI1LjQzMjEgOTAuNzU4OSA2MC4xNzg0IDQ3Ljg5NjFDNjIuOTM2IDQ0LjQ0MzcgMTA4LjQ5OCA1NC42NDA5IDExMS40MjMgNTcuMjIzOVpcIixcbiAgICAgICAgICBmaWxsOiBcInVybCgjcGFpbnQyX2xpbmVhcilcIlxuICAgICAgICB9XG4gICAgICApLFxuICAgICAgLyogQF9fUFVSRV9fICovIGMoXG4gICAgICAgIFwicGF0aFwiLFxuICAgICAgICB7XG4gICAgICAgICAgc3R5bGU6IHsgbWl4QmxlbmRNb2RlOiBcIm11bHRpcGx5XCIgfSxcbiAgICAgICAgICBkOiBcIk0xMTEuNDIzIDU3LjIyMzhDODguNTAzNyA1My42MjU4IDQ3LjI5OTkgMTY0LjQwMiA0MS45MDQ4IDE3Ni43NjRDMzUuNTk2NSAxOTEuMzE2IC0yLjIzODU1IDE4NS40NjYgMC4xMDQzMTMgMTY5Ljg1MkMxMC40ODcxIDEwMC42MjUgMjkuMDY5OSA3MC45NzUzIDYwLjE2MDIgNDcuODgxNEM2MC40MjYxIDQ3LjY2NDMgNjAuNzM0NyA0Ny41MDU3IDYxLjA2NiA0Ny40MTU4QzY3LjYxNDQgNDUuNzM1IDEwMy4wMyA1My41MzEyIDExMC4yNzMgNTYuNjA1M0MxMTAuODM0IDU2Ljg0MTggMTExLjY4NSA1Ny4yNjM4IDExMS40MjMgNTcuMjIzOFpcIixcbiAgICAgICAgICBmaWxsOiBcInVybCgjcGFpbnQzX2xpbmVhcilcIlxuICAgICAgICB9XG4gICAgICApLFxuICAgICAgLyogQF9fUFVSRV9fICovIGUxKFwiZGVmc1wiLCB7IGNoaWxkcmVuOiBbXG4gICAgICAgIC8qIEBfX1BVUkVfXyAqLyBlMShcbiAgICAgICAgICBcImxpbmVhckdyYWRpZW50XCIsXG4gICAgICAgICAge1xuICAgICAgICAgICAgaWQ6IFwicGFpbnQwX2xpbmVhclwiLFxuICAgICAgICAgICAgeDE6IFwiMjQuOTk1NVwiLFxuICAgICAgICAgICAgeTE6IFwiMjM1LjYxNlwiLFxuICAgICAgICAgICAgeDI6IFwiMjE2LjQzNFwiLFxuICAgICAgICAgICAgeTI6IFwiLTIzLjk2MTJcIixcbiAgICAgICAgICAgIGdyYWRpZW50VW5pdHM6IFwidXNlclNwYWNlT25Vc2VcIixcbiAgICAgICAgICAgIGNoaWxkcmVuOiBbXG4gICAgICAgICAgICAgIC8qIEBfX1BVUkVfXyAqLyBjKFwic3RvcFwiLCB7IG9mZnNldDogXCIwLjI4XCIsIHN0b3BDb2xvcjogXCIjN0YyMDgyXCIgfSksXG4gICAgICAgICAgICAgIC8qIEBfX1BVUkVfXyAqLyBjKFwic3RvcFwiLCB7IG9mZnNldDogXCIwLjUyXCIsIHN0b3BDb2xvcjogXCIjOUYyNTg0XCIgfSksXG4gICAgICAgICAgICAgIC8qIEBfX1BVUkVfXyAqLyBjKFwic3RvcFwiLCB7IG9mZnNldDogXCIxXCIsIHN0b3BDb2xvcjogXCIjRTgzMDhBXCIgfSlcbiAgICAgICAgICAgIF1cbiAgICAgICAgICB9XG4gICAgICAgICksXG4gICAgICAgIC8qIEBfX1BVUkVfXyAqLyBlMShcbiAgICAgICAgICBcImxpbmVhckdyYWRpZW50XCIsXG4gICAgICAgICAge1xuICAgICAgICAgICAgaWQ6IFwicGFpbnQxX2xpbmVhclwiLFxuICAgICAgICAgICAgeDE6IFwiMTA0LjAzMlwiLFxuICAgICAgICAgICAgeTE6IFwiMTY0LjY5OVwiLFxuICAgICAgICAgICAgeDI6IFwiMjMxLjM2XCIsXG4gICAgICAgICAgICB5MjogXCItNy45NDc4N1wiLFxuICAgICAgICAgICAgZ3JhZGllbnRVbml0czogXCJ1c2VyU3BhY2VPblVzZVwiLFxuICAgICAgICAgICAgY2hpbGRyZW46IFtcbiAgICAgICAgICAgICAgLyogQF9fUFVSRV9fICovIGMoXCJzdG9wXCIsIHsgb2Zmc2V0OiBcIjAuMTJcIiwgc3RvcENvbG9yOiBcIiNGMDhDQjlcIiB9KSxcbiAgICAgICAgICAgICAgLyogQF9fUFVSRV9fICovIGMoXCJzdG9wXCIsIHsgb2Zmc2V0OiBcIjFcIiwgc3RvcENvbG9yOiBcIiM4NTFGODJcIiB9KVxuICAgICAgICAgICAgXVxuICAgICAgICAgIH1cbiAgICAgICAgKSxcbiAgICAgICAgLyogQF9fUFVSRV9fICovIGUxKFxuICAgICAgICAgIFwibGluZWFyR3JhZGllbnRcIixcbiAgICAgICAgICB7XG4gICAgICAgICAgICBpZDogXCJwYWludDJfbGluZWFyXCIsXG4gICAgICAgICAgICB4MTogXCItMzU5MzQ3XCIsXG4gICAgICAgICAgICB5MTogXCItMS4yODQxNmUrMDZcIixcbiAgICAgICAgICAgIHgyOiBcIi0zMDgxNzBcIixcbiAgICAgICAgICAgIHkyOiBcIi0xLjI4NDE2ZSswNlwiLFxuICAgICAgICAgICAgZ3JhZGllbnRVbml0czogXCJ1c2VyU3BhY2VPblVzZVwiLFxuICAgICAgICAgICAgY2hpbGRyZW46IFtcbiAgICAgICAgICAgICAgLyogQF9fUFVSRV9fICovIGMoXCJzdG9wXCIsIHsgb2Zmc2V0OiBcIjAuMjhcIiwgc3RvcENvbG9yOiBcIiM3RjIwODJcIiB9KSxcbiAgICAgICAgICAgICAgLyogQF9fUFVSRV9fICovIGMoXCJzdG9wXCIsIHsgb2Zmc2V0OiBcIjAuNTJcIiwgc3RvcENvbG9yOiBcIiM5RjI1ODRcIiB9KSxcbiAgICAgICAgICAgICAgLyogQF9fUFVSRV9fICovIGMoXCJzdG9wXCIsIHsgb2Zmc2V0OiBcIjFcIiwgc3RvcENvbG9yOiBcIiNFODMwOEFcIiB9KVxuICAgICAgICAgICAgXVxuICAgICAgICAgIH1cbiAgICAgICAgKSxcbiAgICAgICAgLyogQF9fUFVSRV9fICovIGUxKFxuICAgICAgICAgIFwibGluZWFyR3JhZGllbnRcIixcbiAgICAgICAgICB7XG4gICAgICAgICAgICBpZDogXCJwYWludDNfbGluZWFyXCIsXG4gICAgICAgICAgICB4MTogXCItMi40MDkzNVwiLFxuICAgICAgICAgICAgeTE6IFwiMTYxLjU4NFwiLFxuICAgICAgICAgICAgeDI6IFwiOTUuNTUwN1wiLFxuICAgICAgICAgICAgeTI6IFwiMjguNzU2NVwiLFxuICAgICAgICAgICAgZ3JhZGllbnRVbml0czogXCJ1c2VyU3BhY2VPblVzZVwiLFxuICAgICAgICAgICAgY2hpbGRyZW46IFtcbiAgICAgICAgICAgICAgLyogQF9fUFVSRV9fICovIGMoXCJzdG9wXCIsIHsgb2Zmc2V0OiBcIjAuMThcIiwgc3RvcENvbG9yOiBcIiM4NjMyOEFcIiB9KSxcbiAgICAgICAgICAgICAgLyogQF9fUFVSRV9fICovIGMoXCJzdG9wXCIsIHsgb2Zmc2V0OiBcIjFcIiwgc3RvcENvbG9yOiBcIiNDRTgyQjZcIiB9KVxuICAgICAgICAgICAgXVxuICAgICAgICAgIH1cbiAgICAgICAgKVxuICAgICAgXSB9KVxuICAgIF1cbiAgfVxuKSwgekogPSAoKSA9PiAvKiBAX19QVVJFX18gKi8gZTEoXG4gIFwic3ZnXCIsXG4gIHtcbiAgICB3aWR0aDogXCIyNjBcIixcbiAgICBoZWlnaHQ6IFwiMjYwXCIsXG4gICAgdmlld0JveDogXCIwIDAgMjYwIDI2MFwiLFxuICAgIGZpbGw6IFwibm9uZVwiLFxuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgY2hpbGRyZW46IFtcbiAgICAgIC8qIEBfX1BVUkVfXyAqLyBjKFxuICAgICAgICBcInBhdGhcIixcbiAgICAgICAge1xuICAgICAgICAgIHN0eWxlOiB7IG1peEJsZW5kTW9kZTogXCJtdWx0aXBseVwiIH0sXG4gICAgICAgICAgZDogXCJNMTMuODczOSAxNzcuMzE1QzE2LjAyNzEgMTc5Ljc2OCAxOC41MjcxIDE4MS43OTQgMjEuMDg4MiAxODMuODE0QzQ2LjYzNTEgMjAzLjg0MiA4OS4zNjMxIDIwOS4yNTIgMTE2Ljk0MSAyMDQuMjgzQzEzMC43OTUgMjAxLjc4NiAxMzkuNzk3IDE5MS4wNjQgMTM3LjM0MSAxNzQuNzMyQzEzNi4wMzcgMTY2LjA3NSAxMjYuOTQ3IDE2MS41NzcgMTE4Ljc1IDE2MS42OTFDOTkuMTEzNSAxNjEuOTY4IDc2LjI3MiAxNjAuMTE1IDU0Ljg3MDUgMTU1LjQ4N0MzOS4yNDA0IDE1Mi4xMDcgMjEuMjk2MyAxNDIuNzIzIDE1LjAwMzIgMTM1LjA1NEMxNC4xNTE0IDEzMy45ODggOC4wNDY5NyAxMjcuNzMxIDIwLjg2OSAxMjMuMTgzQzIwLjg2OSAxMjMuMTgzIDExLjMwNzMgMTI1LjkxNCA4LjQ5OTI1IDEzMi4zNEM3LjE0NTE4IDEzNS40MzQgNi4yMzUwNyAxMzkuODMyIDYuMTY4NDggMTQzLjI0MkM2LjA4MjQ2IDE0Ny42ODEgNi4yMTI4OCAxNTIuMTQ5IDYuNTY1MjcgMTU2LjU4NUM2Ljk4OTggMTYxLjk3MSA3Ljc4MDYgMTY3LjQ2NSAxMC4zMzg5IDE3Mi4yMThDMTEuMzI1OCAxNzQuMDQyIDEyLjUxMTQgMTc1Ljc1MiAxMy44NzM5IDE3Ny4zMTVaXCIsXG4gICAgICAgICAgZmlsbDogXCJ1cmwoI3BhaW50MF9saW5lYXIpXCJcbiAgICAgICAgfVxuICAgICAgKSxcbiAgICAgIC8qIEBfX1BVUkVfXyAqLyBjKFxuICAgICAgICBcInBhdGhcIixcbiAgICAgICAge1xuICAgICAgICAgIHN0eWxlOiB7IG1peEJsZW5kTW9kZTogXCJtdWx0aXBseVwiIH0sXG4gICAgICAgICAgZDogXCJNMC4wMzM1NzQxIDEzMy4zODZMMC4wMDAyNzc0MjQgMTMzLjI4Qy0wLjAwNTQ2NjkyIDEzMy4wMyAwLjA3ODE1NjYgMTMyLjc4NiAwLjIzNjEyOSAxMzIuNTkyQzAuMTc1MDg1IDEzMi44NjEgMC4xMDU3MTcgMTMzLjEyMiAwLjAzMzU3NDEgMTMzLjM4NlpcIixcbiAgICAgICAgICBmaWxsOiBcInVybCgjcGFpbnQxX2xpbmVhcilcIlxuICAgICAgICB9XG4gICAgICApLFxuICAgICAgLyogQF9fUFVSRV9fICovIGMoXG4gICAgICAgIFwicGF0aFwiLFxuICAgICAgICB7XG4gICAgICAgICAgc3R5bGU6IHsgbWl4QmxlbmRNb2RlOiBcIm11bHRpcGx5XCIgfSxcbiAgICAgICAgICBkOiBcIk0yMzQuNzIzIDIxOS41NzRDMjExLjg3IDIwNS41MTIgMTkzLjI4MiAyMDAuNzM0IDE1NC4wNDUgMTkxLjUyMkMxMTUuNDg0IDE4Mi40NjIgNC4zMjg4NCAxNTkuMDg1IDEzLjg0ODkgMTc3LjE4NUMxNC4yMDk2IDE3Ny44NyAxMS4zMSAxNzQuMDA4IDEwLjMzODkgMTcyLjIwN0M3Ljc2OTUgMTY3LjQ1NCA2Ljk4OTggMTYxLjk2IDYuNTY1MjcgMTU2LjU4OEM2LjIxMjg4IDE1Mi4xNDkgNi4wODI0NiAxNDcuNjk1IDYuMTY4NDggMTQzLjI0NEM2LjIzNTA3IDEzOS44NDMgNy4xNDUxOCAxMzUuNDM2IDguNDk5MjUgMTMyLjM0M0MxMS4xNjU4IDEyNi4yMzggMTkuOTE3MyAxMjMuNDgzIDIwLjc5NDEgMTIzLjIxOUMzNS44MzMxIDEyMC4wMTIgNjAuMzYxNyAxMTguOTkxIDk4LjUwODYgMTI2LjM4MkMxNTMuOTc1IDEzNy4xMTggMjI1LjM3MiAxNTguODA4IDI0Ni45OTggMTc0Ljk1MUMyNzEuMDkxIDE5Mi45MzcgMjU4LjYwNSAyMzQuMjU2IDIzNC43MjMgMjE5LjU3NFpcIixcbiAgICAgICAgICBmaWxsOiBcInVybCgjcGFpbnQyX2xpbmVhcilcIlxuICAgICAgICB9XG4gICAgICApLFxuICAgICAgLyogQF9fUFVSRV9fICovIGMoXG4gICAgICAgIFwicGF0aFwiLFxuICAgICAgICB7XG4gICAgICAgICAgc3R5bGU6IHsgbWl4QmxlbmRNb2RlOiBcIm11bHRpcGx5XCIgfSxcbiAgICAgICAgICBkOiBcIk0yMTcuODg5IDE0OC42NzJDMjE3LjIwOSAxMzEuNDEgMTk5Ljg1MyAxMjAuMjcgMTg2LjY1MyAxMTIuMjY3QzE0OC41MDkgODkuMTQwMSAxMDIuMzE4IDc1LjA1ODQgNTcuNDU5NCA3OC41NDM0QzQ2LjczNSA3OS4zNzU4IDM2LjI2MzIgODEuNjU5NCAyNi4wMzg0IDg0Ljk1ODZDLTMuMDcxMzEgOTQuMzUxIC05LjU5NDY5IDYwLjM2NjIgMTYuMzI0IDQ3Ljc1NTFDMTkuNzE0OCA0Ni4xMDY5IDI4LjExOTQgNDMuMDk5MSAzMy4wOTczIDQxLjkyODFDNzkuNDc2OCAzMC45NzYzIDEyMy43OTIgMzkuODIyMSAxNjguMjU0IDUzLjM2ODNDMTc4LjI5MyA1Ni40MjA1IDE5NC40NTkgNjMuMDIxNiAyMDMuMzg4IDY4LjY3OTNDMjA0LjM4MiA2OS4yNjkxIDIwNS4zMTIgNjkuOTYxIDIwNi4xNjMgNzAuNzQzN0MyMDguMDMgNzIuNTQ0NSAyMzUuNDExIDEzNi4yNzIgMjE3Ljg4OSAxNDguNjcyWlwiLFxuICAgICAgICAgIGZpbGw6IFwidXJsKCNwYWludDNfbGluZWFyKVwiXG4gICAgICAgIH1cbiAgICAgICksXG4gICAgICAvKiBAX19QVVJFX18gKi8gYyhcbiAgICAgICAgXCJwYXRoXCIsXG4gICAgICAgIHtcbiAgICAgICAgICBzdHlsZTogeyBtaXhCbGVuZE1vZGU6IFwibXVsdGlwbHlcIiB9LFxuICAgICAgICAgIGQ6IFwiTTIwNi4yNiA3MC44NDkxQzIwOC43OTYgNzQuMzI1OSAyMzUuMTY0IDEzNi40NDEgMjE3Ljg4OSAxNDguNjY0QzIxNy44ODkgMTQ4LjY4IDIxNy44ODkgMTQ4LjcgMjE3Ljg4OSAxNDguNzE2QzIxNy43MzggMTQ4Ljg2NyAyMTcuNTcgMTQ4Ljk5OSAyMTcuMzg5IDE0OS4xMUMyMDUuNTggMTU2LjE3MiAxNjYuMzM0IDE1Ni42MzMgMTI0Ljc2OSAxNDcuMDcxQzg2LjM3NzYgMTM4LjI1NiA3MC43MDA0IDEyNy45OTIgNzIuNTI4OSAxMTAuMjVDNzQuMjkwOSA5NS4xMTEzIDkzLjgxOTQgODkuMTYyMyAxMjUuOTgxIDg4LjY3NEMxNTYuMzM3IDg4LjIwNSAyMDguMTA1IDkxLjY5MDEgMjA2LjI2IDcwLjg0OTFaXCIsXG4gICAgICAgICAgZmlsbDogXCJ1cmwoI3BhaW50NF9saW5lYXIpXCJcbiAgICAgICAgfVxuICAgICAgKSxcbiAgICAgIC8qIEBfX1BVUkVfXyAqLyBlMShcImRlZnNcIiwgeyBjaGlsZHJlbjogW1xuICAgICAgICAvKiBAX19QVVJFX18gKi8gZTEoXG4gICAgICAgICAgXCJsaW5lYXJHcmFkaWVudFwiLFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGlkOiBcInBhaW50MF9saW5lYXJcIixcbiAgICAgICAgICAgIHgxOiBcIjIuNDY0NThcIixcbiAgICAgICAgICAgIHkxOiBcIjE1My4xMTZcIixcbiAgICAgICAgICAgIHgyOiBcIjEzNi42NjVcIixcbiAgICAgICAgICAgIHkyOiBcIjE4Ni44NDlcIixcbiAgICAgICAgICAgIGdyYWRpZW50VW5pdHM6IFwidXNlclNwYWNlT25Vc2VcIixcbiAgICAgICAgICAgIGNoaWxkcmVuOiBbXG4gICAgICAgICAgICAgIC8qIEBfX1BVUkVfXyAqLyBjKFwic3RvcFwiLCB7IG9mZnNldDogXCIwLjM2XCIsIHN0b3BDb2xvcjogXCIjQ0UxRTEzXCIgfSksXG4gICAgICAgICAgICAgIC8qIEBfX1BVUkVfXyAqLyBjKFwic3RvcFwiLCB7IG9mZnNldDogXCIxXCIsIHN0b3BDb2xvcjogXCIjRkNCRjAwXCIgfSlcbiAgICAgICAgICAgIF1cbiAgICAgICAgICB9XG4gICAgICAgICksXG4gICAgICAgIC8qIEBfX1BVUkVfXyAqLyBlMShcbiAgICAgICAgICBcImxpbmVhckdyYWRpZW50XCIsXG4gICAgICAgICAge1xuICAgICAgICAgICAgaWQ6IFwicGFpbnQxX2xpbmVhclwiLFxuICAgICAgICAgICAgeDE6IFwiMC42NzUxNzRcIixcbiAgICAgICAgICAgIHkxOiBcIjEzMy4zMTVcIixcbiAgICAgICAgICAgIHgyOiBcIjAuODA1MzY1XCIsXG4gICAgICAgICAgICB5MjogXCIxMzMuMzdcIixcbiAgICAgICAgICAgIGdyYWRpZW50VW5pdHM6IFwidXNlclNwYWNlT25Vc2VcIixcbiAgICAgICAgICAgIGNoaWxkcmVuOiBbXG4gICAgICAgICAgICAgIC8qIEBfX1BVUkVfXyAqLyBjKFwic3RvcFwiLCB7IHN0b3BDb2xvcjogXCIjRkZEODAwXCIgfSksXG4gICAgICAgICAgICAgIC8qIEBfX1BVUkVfXyAqLyBjKFwic3RvcFwiLCB7IG9mZnNldDogXCIwLjUxXCIsIHN0b3BDb2xvcjogXCIjRjQ5NjAwXCIgfSksXG4gICAgICAgICAgICAgIC8qIEBfX1BVUkVfXyAqLyBjKFwic3RvcFwiLCB7IG9mZnNldDogXCIwLjYyXCIsIHN0b3BDb2xvcjogXCIjRjM4RjAxXCIgfSksXG4gICAgICAgICAgICAgIC8qIEBfX1BVUkVfXyAqLyBjKFwic3RvcFwiLCB7IG9mZnNldDogXCIwLjc4XCIsIHN0b3BDb2xvcjogXCIjRUY3QjA2XCIgfSksXG4gICAgICAgICAgICAgIC8qIEBfX1BVUkVfXyAqLyBjKFwic3RvcFwiLCB7IG9mZnNldDogXCIwLjk2XCIsIHN0b3BDb2xvcjogXCIjRUE1QjBDXCIgfSlcbiAgICAgICAgICAgIF1cbiAgICAgICAgICB9XG4gICAgICAgICksXG4gICAgICAgIC8qIEBfX1BVUkVfXyAqLyBlMShcbiAgICAgICAgICBcImxpbmVhckdyYWRpZW50XCIsXG4gICAgICAgICAge1xuICAgICAgICAgICAgaWQ6IFwicGFpbnQyX2xpbmVhclwiLFxuICAgICAgICAgICAgeDE6IFwiLTEwOTA3LjJcIixcbiAgICAgICAgICAgIHkxOiBcIjc4OTQwLjhcIixcbiAgICAgICAgICAgIHgyOiBcIjIyNzc3N1wiLFxuICAgICAgICAgICAgeTI6IFwiNzg5NDAuOFwiLFxuICAgICAgICAgICAgZ3JhZGllbnRVbml0czogXCJ1c2VyU3BhY2VPblVzZVwiLFxuICAgICAgICAgICAgY2hpbGRyZW46IFtcbiAgICAgICAgICAgICAgLyogQF9fUFVSRV9fICovIGMoXCJzdG9wXCIsIHsgc3RvcENvbG9yOiBcIiNGRkQ4MDBcIiB9KSxcbiAgICAgICAgICAgICAgLyogQF9fUFVSRV9fICovIGMoXCJzdG9wXCIsIHsgb2Zmc2V0OiBcIjAuNTFcIiwgc3RvcENvbG9yOiBcIiNGNDk2MDBcIiB9KSxcbiAgICAgICAgICAgICAgLyogQF9fUFVSRV9fICovIGMoXCJzdG9wXCIsIHsgb2Zmc2V0OiBcIjAuNjJcIiwgc3RvcENvbG9yOiBcIiNGMzhGMDFcIiB9KSxcbiAgICAgICAgICAgICAgLyogQF9fUFVSRV9fICovIGMoXCJzdG9wXCIsIHsgb2Zmc2V0OiBcIjAuNzhcIiwgc3RvcENvbG9yOiBcIiNFRjdCMDZcIiB9KSxcbiAgICAgICAgICAgICAgLyogQF9fUFVSRV9fICovIGMoXCJzdG9wXCIsIHsgb2Zmc2V0OiBcIjAuOTZcIiwgc3RvcENvbG9yOiBcIiNFQTVCMENcIiB9KVxuICAgICAgICAgICAgXVxuICAgICAgICAgIH1cbiAgICAgICAgKSxcbiAgICAgICAgLyogQF9fUFVSRV9fICovIGUxKFxuICAgICAgICAgIFwibGluZWFyR3JhZGllbnRcIixcbiAgICAgICAgICB7XG4gICAgICAgICAgICBpZDogXCJwYWludDNfbGluZWFyXCIsXG4gICAgICAgICAgICB4MTogXCIyLjU5NDgyXCIsXG4gICAgICAgICAgICB5MTogXCI0OC43NTY0XCIsXG4gICAgICAgICAgICB4MjogXCIyMzMuMjAzXCIsXG4gICAgICAgICAgICB5MjogXCIxMTMuNjE1XCIsXG4gICAgICAgICAgICBncmFkaWVudFVuaXRzOiBcInVzZXJTcGFjZU9uVXNlXCIsXG4gICAgICAgICAgICBjaGlsZHJlbjogW1xuICAgICAgICAgICAgICAvKiBAX19QVVJFX18gKi8gYyhcInN0b3BcIiwgeyBzdG9wQ29sb3I6IFwiI0ZEQzUwMFwiIH0pLFxuICAgICAgICAgICAgICAvKiBAX19QVVJFX18gKi8gYyhcInN0b3BcIiwgeyBvZmZzZXQ6IFwiMC4xMlwiLCBzdG9wQ29sb3I6IFwiI0ZDQzEwMFwiIH0pLFxuICAgICAgICAgICAgICAvKiBAX19QVVJFX18gKi8gYyhcInN0b3BcIiwgeyBvZmZzZXQ6IFwiMC4yNVwiLCBzdG9wQ29sb3I6IFwiI0ZBQjQwMFwiIH0pLFxuICAgICAgICAgICAgICAvKiBAX19QVVJFX18gKi8gYyhcInN0b3BcIiwgeyBvZmZzZXQ6IFwiMC4zM1wiLCBzdG9wQ29sb3I6IFwiI0Y4QTgwMFwiIH0pLFxuICAgICAgICAgICAgICAvKiBAX19QVVJFX18gKi8gYyhcInN0b3BcIiwgeyBvZmZzZXQ6IFwiMC40M1wiLCBzdG9wQ29sb3I6IFwiI0Y1OUIwMVwiIH0pLFxuICAgICAgICAgICAgICAvKiBAX19QVVJFX18gKi8gYyhcInN0b3BcIiwgeyBvZmZzZXQ6IFwiMC42XCIsIHN0b3BDb2xvcjogXCIjRUY3ODA1XCIgfSksXG4gICAgICAgICAgICAgIC8qIEBfX1BVUkVfXyAqLyBjKFwic3RvcFwiLCB7IG9mZnNldDogXCIwLjY3XCIsIHN0b3BDb2xvcjogXCIjRUM2OTA3XCIgfSlcbiAgICAgICAgICAgIF1cbiAgICAgICAgICB9XG4gICAgICAgICksXG4gICAgICAgIC8qIEBfX1BVUkVfXyAqLyBlMShcbiAgICAgICAgICBcImxpbmVhckdyYWRpZW50XCIsXG4gICAgICAgICAge1xuICAgICAgICAgICAgaWQ6IFwicGFpbnQ0X2xpbmVhclwiLFxuICAgICAgICAgICAgeDE6IFwiNzkuMTQ0NlwiLFxuICAgICAgICAgICAgeTE6IFwiODYuMjAxOVwiLFxuICAgICAgICAgICAgeDI6IFwiMjI2LjE3MlwiLFxuICAgICAgICAgICAgeTI6IFwiMTI3LjU1M1wiLFxuICAgICAgICAgICAgZ3JhZGllbnRVbml0czogXCJ1c2VyU3BhY2VPblVzZVwiLFxuICAgICAgICAgICAgY2hpbGRyZW46IFtcbiAgICAgICAgICAgICAgLyogQF9fUFVSRV9fICovIGMoXCJzdG9wXCIsIHsgc3RvcENvbG9yOiBcIiNGMzkyMDBcIiB9KSxcbiAgICAgICAgICAgICAgLyogQF9fUFVSRV9fICovIGMoXCJzdG9wXCIsIHsgb2Zmc2V0OiBcIjAuOTdcIiwgc3RvcENvbG9yOiBcIiNDRDEwMTRcIiB9KVxuICAgICAgICAgICAgXVxuICAgICAgICAgIH1cbiAgICAgICAgKVxuICAgICAgXSB9KVxuICAgIF1cbiAgfVxuKSwgaEogPSAoKSA9PiAvKiBAX19QVVJFX18gKi8gZTEoXG4gIFwic3ZnXCIsXG4gIHtcbiAgICB3aWR0aDogXCIyNjBcIixcbiAgICBoZWlnaHQ6IFwiMjYwXCIsXG4gICAgdmlld0JveDogXCIwIDAgMjYwIDI2MFwiLFxuICAgIGZpbGw6IFwibm9uZVwiLFxuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgY2hpbGRyZW46IFtcbiAgICAgIC8qIEBfX1BVUkVfXyAqLyBjKFxuICAgICAgICBcInBhdGhcIixcbiAgICAgICAge1xuICAgICAgICAgIHN0eWxlOiB7IG1peEJsZW5kTW9kZTogXCJtdWx0aXBseVwiIH0sXG4gICAgICAgICAgZDogXCJNODcuNTE3NiA0NC44MTE3QzEzNC42MjQgNDcuNTczNCAxNTkuNTY2IDU5LjQxMTkgMTU5LjIwOSA3OC42Njk2QzE1OC42ODcgOTUuMTA3NyAxMzcuODM5IDEwNS45NzcgMTAzLjI5OSAxMDkuMzkyQzYzLjAxNjYgMTEzLjM3NyA2Ljk5MTI3IDExMy41MjUgMjAuMzU1NSAxNDAuNTM3QzcuMDEyMTYgMTE5LjA4MyAtMC4wNDA0OTI3IDk0LjMxMzggMC4wMDAxNzQ4ODYgNjkuMDQ4OEMwLjAwMDE3NDg4NiA2Ny4xMTExIDAuMDYxMzMwOSA2NS4yMTIxIDAuMTQxNzk5IDYzLjMxM0MwLjQyNTA0OCA1Ni41MTUxIDguNTg3NzYgNDAuMTg5NiA4Ny41MTc2IDQ0LjgxMTdaXCIsXG4gICAgICAgICAgZmlsbDogXCJ1cmwoI3BhaW50MF9saW5lYXIpXCJcbiAgICAgICAgfVxuICAgICAgKSxcbiAgICAgIC8qIEBfX1BVUkVfXyAqLyBjKFxuICAgICAgICBcInBhdGhcIixcbiAgICAgICAge1xuICAgICAgICAgIHN0eWxlOiB7IG1peEJsZW5kTW9kZTogXCJtdWx0aXBseVwiIH0sXG4gICAgICAgICAgZDogXCJNMjYwIDEzNC4xODZDMjU4LjgzNSAxMjYuMzQyIDI0OS45MDkgMTIyLjE5NyAyNDMuMzQ5IDExOS41ODlDMjMzLjYwOSAxMTUuNjg0IDIyMy40NiAxMTIuODg5IDIxMy4wOTMgMTExLjI1NkMyMDUuNzk2IDExMC4xMjIgMTk4LjQwNiAxMDkuNjkgMTkxLjAyNiAxMDkuOTY5QzE3Ny4zOTEgMTEwLjUxNiAxNTYuNjQ2IDExMi45OTQgMTU0LjUwNiAxMzAuMDY2QzE1Mi4yODggMTQ3LjgxNCAxODAuNDIgMTYwLjg0MSAxOTEuOTk1IDE2Ni45NTZDMTk5Ljk2MSAxNzEuMTY2IDIxNC43OTMgMTc3LjkyNiAyMjMuNTEyIDE4Mi42NTFDMjM5LjE0NyAxNjkuNDI5IDI1MS42MTYgMTUyLjg2NyAyNjAgMTM0LjE4NlpcIixcbiAgICAgICAgICBmaWxsOiBcInVybCgjcGFpbnQxX2xpbmVhcilcIlxuICAgICAgICB9XG4gICAgICApLFxuICAgICAgLyogQF9fUFVSRV9fICovIGMoXG4gICAgICAgIFwicGF0aFwiLFxuICAgICAgICB7XG4gICAgICAgICAgc3R5bGU6IHsgbWl4QmxlbmRNb2RlOiBcIm11bHRpcGx5XCIgfSxcbiAgICAgICAgICBkOiBcIk01Ny45MTgxIDE4OC4wNDlDNTkuMjg2IDE4OS4wNjYgNjAuOTM0IDE5MC4yNiA2Mi41Nzg4IDE5MS40MzJDODAuNTQ5OCAyMDMuODA2IDEwMS4yODEgMjExLjU4NyAxMjIuOTU2IDIxNC4wOTFDMTIyLjk1NiAyMTQuMDkxIDE0MC41MDEgMjEwLjEzOSAxMzcuOTA3IDIwMS44MzVDMTM1LjQzMiAxOTMuOTIgMTIxLjM1IDE4OS4xMzMgOTcuODA0NyAxODYuMjk0QzU4LjE1NjMgMTgxLjUxNSA1Ni42MTEzIDE4Ni45MzIgNTcuOTE4MSAxODguMDQ5WlwiLFxuICAgICAgICAgIGZpbGw6IFwidXJsKCNwYWludDJfbGluZWFyKVwiXG4gICAgICAgIH1cbiAgICAgICksXG4gICAgICAvKiBAX19QVVJFX18gKi8gYyhcbiAgICAgICAgXCJwYXRoXCIsXG4gICAgICAgIHtcbiAgICAgICAgICBzdHlsZTogeyBtaXhCbGVuZE1vZGU6IFwibXVsdGlwbHlcIiB9LFxuICAgICAgICAgIGQ6IFwiTTI1OC42NzEgMTM3LjA2MUMyNDIuNzI4IDE2NC45OSAxOTEuMDEzIDE1NS42MSAxNTUuNDI3IDE1MC41MjVDMzMuNDM2NCAxMzMuMDk4IDMuODg4NDMgMTAxLjQxNiAzLjg4ODQzIDEwMS40MTZDNy4yNzc3NSAxMTUuMjQ0IDEyLjgzNTYgMTI4LjQ0OCAyMC4zNTU1IDE0MC41MzdDMzAuMTI0MyAxNTUuMTgyIDg1LjY2MzYgMTc3Ljg3NCAxNjguNTYyIDE4NC43OThDMTk2LjQ4NSAxODcuMTM1IDIxMS4wMDggMTg3LjE4MyAyMTguNTA3IDE4Ni43QzIzNS42MTggMTczLjU0OCAyNDkuMzggMTU2LjU0IDI1OC42NzEgMTM3LjA2MVpcIixcbiAgICAgICAgICBmaWxsOiBcInVybCgjcGFpbnQzX2xpbmVhcilcIlxuICAgICAgICB9XG4gICAgICApLFxuICAgICAgLyogQF9fUFVSRV9fICovIGMoXG4gICAgICAgIFwicGF0aFwiLFxuICAgICAgICB7XG4gICAgICAgICAgc3R5bGU6IHsgbWl4QmxlbmRNb2RlOiBcIm11bHRpcGx5XCIgfSxcbiAgICAgICAgICBkOiBcIk0yMTguNTc1IDE4Ni42MjNDMjE4LjU3NSAxODYuNTc0IDIxOC41NTkgMTg2LjU2OCAyMTguNTQ2IDE4Ni42MjNDMjE4LjU0NiAxODYuNjIzIDIxOC41NDYgMTg2LjYgMjE4LjU0NiAxODYuNjAzQzIxMC40NzMgMTkxLjIxOSAxOTMuMzExIDE5Ni4xNzYgMTc3LjM5NCAxOTkuNDc4QzEyOC41NSAyMDkuNjQ2IDcwLjI3OCAxOTMuOTQyIDU3LjkxMTcgMTg4LjA0NUM1OS4yNzk2IDE4OS4wNjMgNjAuOTI3NiAxOTAuMjU3IDYyLjU3MjQgMTkxLjQyOEM4NC45MTk3IDIwNi44MTUgMTExLjQyMiAyMTUuMDMzIDEzOC41NTQgMjE0Ljk4OUMxNjguNTE0IDIxNC45ODkgMTk2LjIwMSAyMDMuMjI4IDIxOC41MzYgMTg2LjYzOUwyMTguNTc1IDE4Ni42MjNaXCIsXG4gICAgICAgICAgZmlsbDogXCJ1cmwoI3BhaW50NF9saW5lYXIpXCJcbiAgICAgICAgfVxuICAgICAgKSxcbiAgICAgIC8qIEBfX1BVUkVfXyAqLyBjKFwiZ1wiLCB7IHN0eWxlOiB7IG1peEJsZW5kTW9kZTogXCJtdWx0aXBseVwiIH0sIGNoaWxkcmVuOiAvKiBAX19QVVJFX18gKi8gYyhcbiAgICAgICAgXCJwYXRoXCIsXG4gICAgICAgIHtcbiAgICAgICAgICBkOiBcIk0zMi42NzA0IDExOC44NzhDMTEuMzc4NCAxMDkuMjIyIDQuMTM5NDkgMTAxLjY4IDMuODk0ODcgMTAxLjQyNkwzLjk5MTQzIDEwMS44MTVDNC4xMjAxOCAxMDIuMzQgNC4yNTUzNyAxMDIuODU4IDQuMzkwNTUgMTAzLjM4QzQuNDY3OCAxMDMuNjgyIDQuNTQ1MDUgMTAzLjk4NSA0LjYyODc0IDEwNC4yODdDNC43ODY0NiAxMDQuODgzIDQuOTUwNjEgMTA1LjQ3NSA1LjEyMTIxIDEwNi4wNjRDNS4xODIzNiAxMDYuMjg2IDUuMjQzNTIgMTA2LjUxMiA1LjMwNzg5IDEwNi43MzRDNS41Mzk2NCAxMDcuNTQ1IDUuNzgxMDUgMTA4LjM0MyA2LjAzMjExIDEwOS4xNTRDNi4wODM2MSAxMDkuMzIyIDYuMTM4MzMgMTA5LjQ3NiA2LjE4OTgzIDEwOS42NTZDNi4zODkzOSAxMTAuMyA2LjU5MzI0IDExMC45MzUgNi44MDEzOCAxMTEuNTYyQzYuODk0NzMgMTExLjg0NSA2Ljk5MTI5IDExMi4xMjUgNy4wODc4NSAxMTIuNDA4QzcuMjYxNjYgMTEyLjkyMyA3LjQzNTQ4IDExMy40MzggNy42MTU3MyAxMTMuOTUzTDcuOTM3NiAxMTQuODg0QzguMTExNDEgMTE1LjM2OSA4LjI4ODQ0IDExNS44NTIgOC40Njg2OSAxMTYuMzM1QzguNTg0NTYgMTE2LjY1MSA4LjcwMzY2IDExNi45NjYgOC44MjU5NyAxMTcuMjgyQzkuMDA2MjIgMTE3Ljc2MSA5LjE5MjkxIDExOC4yNDcgOS4zODI4MSAxMTguNzE3QzkuNTAxOSAxMTkuMDM5IDkuNjIxIDExOS4zMjkgOS43NDMzMSAxMTkuNjM0QzkuOTQ2MDkgMTIwLjEzNyAxMC4xNTUzIDEyMC42MzkgMTAuMzYxMyAxMjEuMTM4QzEwLjQ3NzIgMTIxLjQwOCAxMC41ODY2IDEyMS42ODIgMTAuNzAyNSAxMjEuOTUyQzEwLjk2NjQgMTIyLjU3NCAxMS4yMzQ3IDEyMy4xOTIgMTEuNTA3MiAxMjMuODA2TDExLjY5NzEgMTI0LjI0N0MxMi4wMzgzIDEyNS4wMDYgMTIuMzgyNyAxMjUuNzYzIDEyLjczNjcgMTI2LjUxNkMxMi44MzY1IDEyNi43MjkgMTIuOTM5NSAxMjYuOTM4IDEzLjAzOTMgMTI3LjE2QzEzLjI5NjggMTI3LjcwMSAxMy41NTQzIDEyOC4yMzggMTMuODE4MiAxMjguNzY5QzEzLjk1MzQgMTI5LjA0OSAxNC4wOTUgMTI5LjMyNiAxNC4yMzM0IDEyOS42MDNDMTQuNDY1MiAxMzAuMDcgMTQuNzAzNCAxMzAuNTM5IDE0Ljk0MTYgMTMxLjAwM0MxNS4wOTI4IDEzMS4yOTYgMTUuMjQ0MSAxMzEuNTg5IDE1LjM5ODYgMTMxLjg4MkMxNS42MzQ3IDEzMi4zMzIgMTUuODcxOCAxMzIuNzggMTYuMTEgMTMzLjIyNEwxNi41ODYzIDEzNC4xMDNDMTYuODMzMSAxMzQuNTUzIDE3LjA4MzEgMTM1LjAwMiAxNy4zMzYzIDEzNS40NDhDMTcuNDk0IDEzNS43MjggMTcuNjU4MiAxMzYuMDA1IDE3LjgwNjIgMTM2LjI3OEMxOC4wODMxIDEzNi43NjUgMTguMzY2MyAxMzcuMjQ0IDE4LjY0OTYgMTM3LjczQzE4Ljc4NDcgMTM3Ljk2MiAxOC45MTk5IDEzOC4xOTQgMTkuMDU4MyAxMzguNDI1QzE5LjQ4NzUgMTM5LjEzOCAxOS45MTY3IDEzOS44NDQgMjAuMzQ1OCAxNDAuNTQzQzE0LjkzMTkgMTI5LjU4IDIwLjkyMiAxMjMuMDQzIDMyLjY3MDQgMTE4Ljg3OFpcIixcbiAgICAgICAgICBmaWxsOiBcIiNCOTBFMENcIlxuICAgICAgICB9XG4gICAgICApIH0pLFxuICAgICAgLyogQF9fUFVSRV9fICovIGUxKFwiZGVmc1wiLCB7IGNoaWxkcmVuOiBbXG4gICAgICAgIC8qIEBfX1BVUkVfXyAqLyBlMShcbiAgICAgICAgICBcImxpbmVhckdyYWRpZW50XCIsXG4gICAgICAgICAge1xuICAgICAgICAgICAgaWQ6IFwicGFpbnQwX2xpbmVhclwiLFxuICAgICAgICAgICAgeDE6IFwiMTU5LjY0OVwiLFxuICAgICAgICAgICAgeTE6IFwiOTIuMjY4OFwiLFxuICAgICAgICAgICAgeDI6IFwiLTQuMzQ1MTJcIixcbiAgICAgICAgICAgIHkyOiBcIjkyLjI2ODhcIixcbiAgICAgICAgICAgIGdyYWRpZW50VW5pdHM6IFwidXNlclNwYWNlT25Vc2VcIixcbiAgICAgICAgICAgIGNoaWxkcmVuOiBbXG4gICAgICAgICAgICAgIC8qIEBfX1BVUkVfXyAqLyBjKFwic3RvcFwiLCB7IHN0b3BDb2xvcjogXCIjRkNCQzAwXCIgfSksXG4gICAgICAgICAgICAgIC8qIEBfX1BVUkVfXyAqLyBjKFwic3RvcFwiLCB7IG9mZnNldDogXCIwLjI4XCIsIHN0b3BDb2xvcjogXCIjRjc5RjAzXCIgfSksXG4gICAgICAgICAgICAgIC8qIEBfX1BVUkVfXyAqLyBjKFwic3RvcFwiLCB7IG9mZnNldDogXCIwLjhcIiwgc3RvcENvbG9yOiBcIiNFQjYwMEFcIiB9KVxuICAgICAgICAgICAgXVxuICAgICAgICAgIH1cbiAgICAgICAgKSxcbiAgICAgICAgLyogQF9fUFVSRV9fICovIGUxKFxuICAgICAgICAgIFwibGluZWFyR3JhZGllbnRcIixcbiAgICAgICAgICB7XG4gICAgICAgICAgICBpZDogXCJwYWludDFfbGluZWFyXCIsXG4gICAgICAgICAgICB4MTogXCIxNTkuNzI3XCIsXG4gICAgICAgICAgICB5MTogXCIxNTYuNTYzXCIsXG4gICAgICAgICAgICB4MjogXCIyNjUuNDQ5XCIsXG4gICAgICAgICAgICB5MjogXCIxMzEuNjQ0XCIsXG4gICAgICAgICAgICBncmFkaWVudFVuaXRzOiBcInVzZXJTcGFjZU9uVXNlXCIsXG4gICAgICAgICAgICBjaGlsZHJlbjogW1xuICAgICAgICAgICAgICAvKiBAX19QVVJFX18gKi8gYyhcInN0b3BcIiwgeyBzdG9wQ29sb3I6IFwiI0NFMkUxNFwiIH0pLFxuICAgICAgICAgICAgICAvKiBAX19QVVJFX18gKi8gYyhcInN0b3BcIiwgeyBvZmZzZXQ6IFwiMC42XCIsIHN0b3BDb2xvcjogXCIjRkVDODAwXCIgfSlcbiAgICAgICAgICAgIF1cbiAgICAgICAgICB9XG4gICAgICAgICksXG4gICAgICAgIC8qIEBfX1BVUkVfXyAqLyBlMShcbiAgICAgICAgICBcImxpbmVhckdyYWRpZW50XCIsXG4gICAgICAgICAge1xuICAgICAgICAgICAgaWQ6IFwicGFpbnQyX2xpbmVhclwiLFxuICAgICAgICAgICAgeDE6IFwiNTYuOTkxMVwiLFxuICAgICAgICAgICAgeTE6IFwiMTk5LjIyNFwiLFxuICAgICAgICAgICAgeDI6IFwiMTM4LjE1OFwiLFxuICAgICAgICAgICAgeTI6IFwiMTk5LjIyNFwiLFxuICAgICAgICAgICAgZ3JhZGllbnRVbml0czogXCJ1c2VyU3BhY2VPblVzZVwiLFxuICAgICAgICAgICAgY2hpbGRyZW46IFtcbiAgICAgICAgICAgICAgLyogQF9fUFVSRV9fICovIGMoXCJzdG9wXCIsIHsgc3RvcENvbG9yOiBcIiNGOUIwMDBcIiB9KSxcbiAgICAgICAgICAgICAgLyogQF9fUFVSRV9fICovIGMoXCJzdG9wXCIsIHsgb2Zmc2V0OiBcIjFcIiwgc3RvcENvbG9yOiBcIiNFNzQwMTFcIiB9KVxuICAgICAgICAgICAgXVxuICAgICAgICAgIH1cbiAgICAgICAgKSxcbiAgICAgICAgLyogQF9fUFVSRV9fICovIGUxKFxuICAgICAgICAgIFwibGluZWFyR3JhZGllbnRcIixcbiAgICAgICAgICB7XG4gICAgICAgICAgICBpZDogXCJwYWludDNfbGluZWFyXCIsXG4gICAgICAgICAgICB4MTogXCIzLjE4MzUyXCIsXG4gICAgICAgICAgICB5MTogXCIxNDQuMTgxXCIsXG4gICAgICAgICAgICB4MjogXCIyNjUuNjI2XCIsXG4gICAgICAgICAgICB5MjogXCIxNDQuMTgxXCIsXG4gICAgICAgICAgICBncmFkaWVudFVuaXRzOiBcInVzZXJTcGFjZU9uVXNlXCIsXG4gICAgICAgICAgICBjaGlsZHJlbjogW1xuICAgICAgICAgICAgICAvKiBAX19QVVJFX18gKi8gYyhcInN0b3BcIiwgeyBvZmZzZXQ6IFwiMC4wOFwiLCBzdG9wQ29sb3I6IFwiI0UzMDYxM1wiIH0pLFxuICAgICAgICAgICAgICAvKiBAX19QVVJFX18gKi8gYyhcInN0b3BcIiwgeyBvZmZzZXQ6IFwiMC4xMVwiLCBzdG9wQ29sb3I6IFwiI0UzMDYxM1wiIH0pLFxuICAgICAgICAgICAgICAvKiBAX19QVVJFX18gKi8gYyhcInN0b3BcIiwgeyBvZmZzZXQ6IFwiMC43MlwiLCBzdG9wQ29sb3I6IFwiI0ZFQzcwMFwiIH0pXG4gICAgICAgICAgICBdXG4gICAgICAgICAgfVxuICAgICAgICApLFxuICAgICAgICAvKiBAX19QVVJFX18gKi8gZTEoXG4gICAgICAgICAgXCJsaW5lYXJHcmFkaWVudFwiLFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGlkOiBcInBhaW50NF9saW5lYXJcIixcbiAgICAgICAgICAgIHgxOiBcIjU1LjM2MjRcIixcbiAgICAgICAgICAgIHkxOiBcIjIwMC43ODVcIixcbiAgICAgICAgICAgIHgyOiBcIjIxNy43NjFcIixcbiAgICAgICAgICAgIHkyOiBcIjIwMC43ODVcIixcbiAgICAgICAgICAgIGdyYWRpZW50VW5pdHM6IFwidXNlclNwYWNlT25Vc2VcIixcbiAgICAgICAgICAgIGNoaWxkcmVuOiBbXG4gICAgICAgICAgICAgIC8qIEBfX1BVUkVfXyAqLyBjKFwic3RvcFwiLCB7IHN0b3BDb2xvcjogXCIjRkZGNTk2XCIsIHN0b3BPcGFjaXR5OiBcIjAuM1wiIH0pLFxuICAgICAgICAgICAgICAvKiBAX19QVVJFX18gKi8gYyhcInN0b3BcIiwgeyBvZmZzZXQ6IFwiMC4zNVwiLCBzdG9wQ29sb3I6IFwiI0Y2QzcwMFwiIH0pLFxuICAgICAgICAgICAgICAvKiBAX19QVVJFX18gKi8gYyhcInN0b3BcIiwgeyBvZmZzZXQ6IFwiMC42NVwiLCBzdG9wQ29sb3I6IFwiI0ZEQzMwMFwiIH0pLFxuICAgICAgICAgICAgICAvKiBAX19QVVJFX18gKi8gYyhcInN0b3BcIiwgeyBvZmZzZXQ6IFwiMC45NVwiLCBzdG9wQ29sb3I6IFwiI0Y1OUEwMFwiIH0pLFxuICAgICAgICAgICAgICAvKiBAX19QVVJFX18gKi8gYyhcInN0b3BcIiwgeyBvZmZzZXQ6IFwiMVwiLCBzdG9wQ29sb3I6IFwiI0YxODUwMFwiIH0pXG4gICAgICAgICAgICBdXG4gICAgICAgICAgfVxuICAgICAgICApXG4gICAgICBdIH0pXG4gICAgXVxuICB9XG4pLCBPSiA9ICgpID0+IC8qIEBfX1BVUkVfXyAqLyBlMShcbiAgXCJzdmdcIixcbiAge1xuICAgIHdpZHRoOiBcIjI2MFwiLFxuICAgIGhlaWdodDogXCIyNjBcIixcbiAgICB2aWV3Qm94OiBcIjAgMCAyNjAgMjYwXCIsXG4gICAgZmlsbDogXCJub25lXCIsXG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICBjaGlsZHJlbjogW1xuICAgICAgLyogQF9fUFVSRV9fICovIGMoXG4gICAgICAgIFwicGF0aFwiLFxuICAgICAgICB7XG4gICAgICAgICAgc3R5bGU6IHsgbWl4QmxlbmRNb2RlOiBcIm11bHRpcGx5XCIgfSxcbiAgICAgICAgICBkOiBcIk0yMDEuODkyIDE2OC40ODJDMjE4LjMzMiAxNDQuNDU0IDAgMTA5LjEzMiAwIDEwOS4xMzJDMC45NjAxMTEgMTI5LjgwMyAxNS42MDE4IDE1OS42MTEgMTUuNjAxOCAxNTkuNDg5QzI1LjE4MDUgMTY4Ljc5OSAxMzguMjU2IDE2NS45OTkgMTc1Ljc5NiAxOTcuNTM5QzE4OS4xNzEgMTg2LjEyMyAyMDEuODkyIDE2OC40ODIgMjAxLjg5MiAxNjguNDgyWlwiLFxuICAgICAgICAgIGZpbGw6IFwidXJsKCNwYWludDBfbGluZWFyKVwiXG4gICAgICAgIH1cbiAgICAgICksXG4gICAgICAvKiBAX19QVVJFX18gKi8gYyhcbiAgICAgICAgXCJwYXRoXCIsXG4gICAgICAgIHtcbiAgICAgICAgICBzdHlsZTogeyBtaXhCbGVuZE1vZGU6IFwibXVsdGlwbHlcIiB9LFxuICAgICAgICAgIGQ6IFwiTTIwMS40MDIgMTY5LjE1MUMxODUuODI2IDE4OS4zNzQgMTExLjMxOCAxOTAuMjc0IDY1LjI2MTkgMTkwLjAxNEM1My4xNDUzIDE4OS45NDQgNDYuNDA1MyAxOTQuNzY3IDQ3LjU5OTEgMjAzLjc0NEM0OC43OTI4IDIxMi43MjEgNTkuNTg0NSAyMTkuNTg5IDc3Ljc2OSAyMjIuOTQ2QzExMi4yOTggMjI5LjMxMiAxNDUuMDI4IDIyMC43MjUgMTcxLjk4NSAyMDAuNTg1QzE4NS4xMDYgMTkwLjc4MyAxOTguNjg5IDE3Mi44MjUgMjAxLjQwMiAxNjkuMTU4VjE2OS4xNTFaXCIsXG4gICAgICAgICAgZmlsbDogXCJ1cmwoI3BhaW50MV9saW5lYXIpXCJcbiAgICAgICAgfVxuICAgICAgKSxcbiAgICAgIC8qIEBfX1BVUkVfXyAqLyBjKFxuICAgICAgICBcInBhdGhcIixcbiAgICAgICAge1xuICAgICAgICAgIHN0eWxlOiB7IG1peEJsZW5kTW9kZTogXCJtdWx0aXBseVwiIH0sXG4gICAgICAgICAgZDogXCJNMjU3LjM1NSA1OC40Njk3QzI0MC41MDEgMTEwLjUxNyAxMS41NTMzIDY5LjczODIgMC4wMTU5OTEyIDEwOC43OTJDMC4wMTU5OTEyIDEwOS4wMSAwLjAxNTk5MTIgMTA5LjEzMiAwLjAxNTk5MTIgMTA5LjEzMkMwLjk0MDg5OCAxMjguOTc0IDE0LjQ2ODkgMTU3LjIzNiAxNS41NTA2IDE1OS4zNzdDMTUuNTg2MyAxNTkuMzQ0IDE1LjYxOTUgMTU5LjMwNyAxNS42NDk4IDE1OS4yNjlDNDAuMTE5OCAxMTkuNDUgMjAyLjM5MSAxNDMuNTc0IDIyNC4zNDYgMTMxLjc0NUMyMjYuNjg1IDEzMC40OTEgMjcxLjEzOCA3NS40NzY1IDI1Ny4zNTUgNTguNDY5N1pcIixcbiAgICAgICAgICBmaWxsOiBcInVybCgjcGFpbnQyX2xpbmVhcilcIlxuICAgICAgICB9XG4gICAgICApLFxuICAgICAgLyogQF9fUFVSRV9fICovIGMoXG4gICAgICAgIFwicGF0aFwiLFxuICAgICAgICB7XG4gICAgICAgICAgc3R5bGU6IHsgbWl4QmxlbmRNb2RlOiBcIm11bHRpcGx5XCIgfSxcbiAgICAgICAgICBkOiBcIk0yMjQuNDg0IDEzMS42NTlDMjI3LjkzIDEyOC45NDUgMjcwLjk0MyA3NS4yMzY1IDI1Ny4zNTUgNTguNDY5N0MyNTcuMzUzIDU4LjQ1MzggMjU3LjM1MyA1OC40Mzc3IDI1Ny4zNTUgNTguNDIxN0MyNTcuMjQ5IDU4LjIzMTUgMjU3LjEyIDU4LjA1NTIgMjU2Ljk3IDU3Ljg5NjlDMjQ3LjMyOCA0Ny43MDA1IDIwOC45MzMgMzYuNDI4OCAxNjUuNDgyIDM0LjM1MTdDMTI1LjM3NCAzMi40MzE1IDEwNy4xNTIgMzguMTkyMiAxMDQuMDM0IDU2LjExNDNDMTAxLjU4OSA3MS40NzYgMTE5LjExOCA4Mi42OTMzIDE1MC41NjEgOTIuMDM1MkMxODAuMjUxIDEwMC44NjIgMjMyLjAyNyAxMTEuNzE3IDIyNC40ODQgMTMxLjY1OVpcIixcbiAgICAgICAgICBmaWxsOiBcInVybCgjcGFpbnQzX2xpbmVhcilcIlxuICAgICAgICB9XG4gICAgICApLFxuICAgICAgLyogQF9fUFVSRV9fICovIGUxKFwiZGVmc1wiLCB7IGNoaWxkcmVuOiBbXG4gICAgICAgIC8qIEBfX1BVUkVfXyAqLyBlMShcbiAgICAgICAgICBcImxpbmVhckdyYWRpZW50XCIsXG4gICAgICAgICAge1xuICAgICAgICAgICAgaWQ6IFwicGFpbnQwX2xpbmVhclwiLFxuICAgICAgICAgICAgeDE6IFwiMjI1LjY1OFwiLFxuICAgICAgICAgICAgeTE6IFwiMTUzLjMyNVwiLFxuICAgICAgICAgICAgeDI6IFwiODcuMzY2OVwiLFxuICAgICAgICAgICAgeTI6IFwiMTUzLjMyNVwiLFxuICAgICAgICAgICAgZ3JhZGllbnRVbml0czogXCJ1c2VyU3BhY2VPblVzZVwiLFxuICAgICAgICAgICAgY2hpbGRyZW46IFtcbiAgICAgICAgICAgICAgLyogQF9fUFVSRV9fICovIGMoXCJzdG9wXCIsIHsgb2Zmc2V0OiBcIjAuMTdcIiwgc3RvcENvbG9yOiBcIiNFOTUwMEVcIiB9KSxcbiAgICAgICAgICAgICAgLyogQF9fUFVSRV9fICovIGMoXCJzdG9wXCIsIHsgb2Zmc2V0OiBcIjFcIiwgc3RvcENvbG9yOiBcIiNGREM1MDBcIiB9KVxuICAgICAgICAgICAgXVxuICAgICAgICAgIH1cbiAgICAgICAgKSxcbiAgICAgICAgLyogQF9fUFVSRV9fICovIGUxKFxuICAgICAgICAgIFwibGluZWFyR3JhZGllbnRcIixcbiAgICAgICAgICB7XG4gICAgICAgICAgICBpZDogXCJwYWludDFfbGluZWFyXCIsXG4gICAgICAgICAgICB4MTogXCIyMDEuNDAyXCIsXG4gICAgICAgICAgICB5MTogXCIxOTcuMDc4XCIsXG4gICAgICAgICAgICB4MjogXCI0Ny40NjQ3XCIsXG4gICAgICAgICAgICB5MjogXCIxOTcuMDc4XCIsXG4gICAgICAgICAgICBncmFkaWVudFVuaXRzOiBcInVzZXJTcGFjZU9uVXNlXCIsXG4gICAgICAgICAgICBjaGlsZHJlbjogW1xuICAgICAgICAgICAgICAvKiBAX19QVVJFX18gKi8gYyhcInN0b3BcIiwgeyBvZmZzZXQ6IFwiMC4wMVwiLCBzdG9wQ29sb3I6IFwiI0Q4NTQwRlwiIH0pLFxuICAgICAgICAgICAgICAvKiBAX19QVVJFX18gKi8gYyhcInN0b3BcIiwgeyBvZmZzZXQ6IFwiMVwiLCBzdG9wQ29sb3I6IFwiI0ZGRDYwMFwiIH0pXG4gICAgICAgICAgICBdXG4gICAgICAgICAgfVxuICAgICAgICApLFxuICAgICAgICAvKiBAX19QVVJFX18gKi8gZTEoXG4gICAgICAgICAgXCJsaW5lYXJHcmFkaWVudFwiLFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGlkOiBcInBhaW50Ml9saW5lYXJcIixcbiAgICAgICAgICAgIHgxOiBcIi0zLjQwODRcIixcbiAgICAgICAgICAgIHkxOiBcIjEwOC45MTdcIixcbiAgICAgICAgICAgIHgyOiBcIjI2My4zMzNcIixcbiAgICAgICAgICAgIHkyOiBcIjEwOC45MTdcIixcbiAgICAgICAgICAgIGdyYWRpZW50VW5pdHM6IFwidXNlclNwYWNlT25Vc2VcIixcbiAgICAgICAgICAgIGNoaWxkcmVuOiBbXG4gICAgICAgICAgICAgIC8qIEBfX1BVUkVfXyAqLyBjKFwic3RvcFwiLCB7IG9mZnNldDogXCIwLjA4XCIsIHN0b3BDb2xvcjogXCIjRTMwNjEzXCIgfSksXG4gICAgICAgICAgICAgIC8qIEBfX1BVUkVfXyAqLyBjKFwic3RvcFwiLCB7IG9mZnNldDogXCIwLjcyXCIsIHN0b3BDb2xvcjogXCIjRkNCRTAwXCIgfSlcbiAgICAgICAgICAgIF1cbiAgICAgICAgICB9XG4gICAgICAgICksXG4gICAgICAgIC8qIEBfX1BVUkVfXyAqLyBlMShcbiAgICAgICAgICBcImxpbmVhckdyYWRpZW50XCIsXG4gICAgICAgICAge1xuICAgICAgICAgICAgaWQ6IFwicGFpbnQzX2xpbmVhclwiLFxuICAgICAgICAgICAgeDE6IFwiMTAzLjgyNlwiLFxuICAgICAgICAgICAgeTE6IFwiODIuODMwOVwiLFxuICAgICAgICAgICAgeDI6IFwiMjYwLjAwMVwiLFxuICAgICAgICAgICAgeTI6IFwiODIuODMwOVwiLFxuICAgICAgICAgICAgZ3JhZGllbnRVbml0czogXCJ1c2VyU3BhY2VPblVzZVwiLFxuICAgICAgICAgICAgY2hpbGRyZW46IFtcbiAgICAgICAgICAgICAgLyogQF9fUFVSRV9fICovIGMoXCJzdG9wXCIsIHsgc3RvcENvbG9yOiBcIiNGQkI4MDBcIiB9KSxcbiAgICAgICAgICAgICAgLyogQF9fUFVSRV9fICovIGMoXCJzdG9wXCIsIHsgb2Zmc2V0OiBcIjAuNDdcIiwgc3RvcENvbG9yOiBcIiNFQTVCMENcIiB9KSxcbiAgICAgICAgICAgICAgLyogQF9fUFVSRV9fICovIGMoXCJzdG9wXCIsIHsgb2Zmc2V0OiBcIjAuNTFcIiwgc3RvcENvbG9yOiBcIiNFQTVCMENcIiB9KVxuICAgICAgICAgICAgXVxuICAgICAgICAgIH1cbiAgICAgICAgKVxuICAgICAgXSB9KVxuICAgIF1cbiAgfVxuKSwgZkogPSAoKSA9PiAvKiBAX19QVVJFX18gKi8gZTEoXG4gIFwic3ZnXCIsXG4gIHtcbiAgICB3aWR0aDogXCIyNjBcIixcbiAgICBoZWlnaHQ6IFwiMjYwXCIsXG4gICAgdmlld0JveDogXCIwIDAgMjYwIDI2MFwiLFxuICAgIGZpbGw6IFwibm9uZVwiLFxuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgY2hpbGRyZW46IFtcbiAgICAgIC8qIEBfX1BVUkVfXyAqLyBjKFxuICAgICAgICBcInBhdGhcIixcbiAgICAgICAge1xuICAgICAgICAgIHN0eWxlOiB7IG1peEJsZW5kTW9kZTogXCJtdWx0aXBseVwiIH0sXG4gICAgICAgICAgZDogXCJNMjIzLjUwMyAxNDkuODI4QzIxNC44NjQgMTYwLjY4MSAyMDQuODk3IDE3MC40MDcgMTkzLjgzNiAxNzguNzc5QzE4NC41MjcgMTcxLjcwOCAxNzIuOTMxIDE2Ny41MDggMTYxLjk0MyAxNjMuODA3QzE0Ni4zODQgMTU4LjU1NiAxMzAuMzg1IDE1NC42MDYgMTE0LjMzNyAxNTEuMTM1Qzk2LjQ2MzMgMTQ3LjI3IDc4LjQzODYgMTQ0LjA4OCA2MC4zNTI0IDE0MS4zODlDNDIuODkwMyAxMzguNzgyIDEyLjc0OTcgMTM1LjY3NyA5LjU2MTYxIDEzMy4wMjFDNC44MTc5NCAxMjkuMDY3IC0xLjM1ODM3IDczLjc5NDEgMC4yNjQ4NzQgNzUuMzgwNEMxMi4yMTc4IDg3LjA2NTkgMjM3Ljc0MSAxMzMuNTUzIDIyMy41MDMgMTQ5LjgyOFpcIixcbiAgICAgICAgICBmaWxsOiBcInVybCgjcGFpbnQwX2xpbmVhcilcIlxuICAgICAgICB9XG4gICAgICApLFxuICAgICAgLyogQF9fUFVSRV9fICovIGMoXG4gICAgICAgIFwicGF0aFwiLFxuICAgICAgICB7XG4gICAgICAgICAgc3R5bGU6IHsgbWl4QmxlbmRNb2RlOiBcIm11bHRpcGx5XCIgfSxcbiAgICAgICAgICBkOiBcIk0xNDIuMDM0IDIwNS4xNTRDMTc0LjE4MyAxOTUuNDE2IDIwMi42MDIgMTc2LjExMyAyMjMuNTAzIDE0OS44MTZDMjAyLjg3MiAxNzEuMjEzIDEyMS4wODYgMTcxLjQ4NyA5OC4wMTI4IDE3MS4yNTlDNzAuNzg5NyAxNzEuMDA3IDUxLjY0OSAxNjguMTMzIDQ5LjY0NDYgMTgxLjk2N0M0Ni45NDUzIDIwMC42NTMgMTE0LjY3MyAyMTEuNjggMTQyLjAzNCAyMDUuMTU0WlwiLFxuICAgICAgICAgIGZpbGw6IFwidXJsKCNwYWludDFfbGluZWFyKVwiXG4gICAgICAgIH1cbiAgICAgICksXG4gICAgICAvKiBAX19QVVJFX18gKi8gYyhcbiAgICAgICAgXCJwYXRoXCIsXG4gICAgICAgIHtcbiAgICAgICAgICBzdHlsZTogeyBtaXhCbGVuZE1vZGU6IFwibXVsdGlwbHlcIiB9LFxuICAgICAgICAgIGQ6IFwiTTI1OS45OTYgNzUuMjMyOUMyNTkuNzUgNjAuNDM5MyAyNDYuOTMgNTEuMDcxOCAyMjMuMjQ4IDUxLjAwMTFDMTc0LjE4MiA1MC44NTk3IDE3LjEzMDYgNjQuMDM5MyAwLjIzMTA1MyA3NS40MTEyQzAuMjA2NDU5IDc1LjQyOTcgMC4xNzI2NDEgNzUuNDExMiAwLjEzMjY3NSA3NS40MTEyQy0wLjkyMTgxNiA3Ny4yNjgxIDQuNTkwNDQgMTI1Ljg2MSA5LjEwOTY4IDEzMi40OTVMOS41NjE2MSAxMzIuODQ2QzYuMzczNTQgMTI3LjcwOCAxNDQuMjY5IDExOC40NjQgMjIxLjE0NSAxMDUuMDY2QzI1MC44NjUgOTkuODgyOCAyNjAuMjM1IDg5LjUyODUgMjU5Ljk5NiA3NS4yMzI5WlwiLFxuICAgICAgICAgIGZpbGw6IFwidXJsKCNwYWludDJfbGluZWFyKVwiXG4gICAgICAgIH1cbiAgICAgICksXG4gICAgICAvKiBAX19QVVJFX18gKi8gZTEoXCJkZWZzXCIsIHsgY2hpbGRyZW46IFtcbiAgICAgICAgLyogQF9fUFVSRV9fICovIGUxKFxuICAgICAgICAgIFwibGluZWFyR3JhZGllbnRcIixcbiAgICAgICAgICB7XG4gICAgICAgICAgICBpZDogXCJwYWludDBfbGluZWFyXCIsXG4gICAgICAgICAgICB4MTogXCIwLjAwMDQ4MjUxNlwiLFxuICAgICAgICAgICAgeTE6IFwiMTI3LjA2M1wiLFxuICAgICAgICAgICAgeDI6IFwiMjI0LjE1NVwiLFxuICAgICAgICAgICAgeTI6IFwiMTI3LjA2M1wiLFxuICAgICAgICAgICAgZ3JhZGllbnRVbml0czogXCJ1c2VyU3BhY2VPblVzZVwiLFxuICAgICAgICAgICAgY2hpbGRyZW46IFtcbiAgICAgICAgICAgICAgLyogQF9fUFVSRV9fICovIGMoXCJzdG9wXCIsIHsgb2Zmc2V0OiBcIjAuMThcIiwgc3RvcENvbG9yOiBcIiNEMTE0MkZcIiB9KSxcbiAgICAgICAgICAgICAgLyogQF9fUFVSRV9fICovIGMoXCJzdG9wXCIsIHsgb2Zmc2V0OiBcIjFcIiwgc3RvcENvbG9yOiBcIiNGQ0JFMDBcIiB9KVxuICAgICAgICAgICAgXVxuICAgICAgICAgIH1cbiAgICAgICAgKSxcbiAgICAgICAgLyogQF9fUFVSRV9fICovIGUxKFxuICAgICAgICAgIFwibGluZWFyR3JhZGllbnRcIixcbiAgICAgICAgICB7XG4gICAgICAgICAgICBpZDogXCJwYWludDFfbGluZWFyXCIsXG4gICAgICAgICAgICB4MTogXCI0OS41Njc3XCIsXG4gICAgICAgICAgICB5MTogXCIxNzguNDM1XCIsXG4gICAgICAgICAgICB4MjogXCIyMjMuNTFcIixcbiAgICAgICAgICAgIHkyOiBcIjE3OC40MzVcIixcbiAgICAgICAgICAgIGdyYWRpZW50VW5pdHM6IFwidXNlclNwYWNlT25Vc2VcIixcbiAgICAgICAgICAgIGNoaWxkcmVuOiBbXG4gICAgICAgICAgICAgIC8qIEBfX1BVUkVfXyAqLyBjKFwic3RvcFwiLCB7IHN0b3BDb2xvcjogXCIjRkZEMzAwXCIgfSksXG4gICAgICAgICAgICAgIC8qIEBfX1BVUkVfXyAqLyBjKFwic3RvcFwiLCB7IG9mZnNldDogXCIxXCIsIHN0b3BDb2xvcjogXCIjRUE1NjBEXCIgfSlcbiAgICAgICAgICAgIF1cbiAgICAgICAgICB9XG4gICAgICAgICksXG4gICAgICAgIC8qIEBfX1BVUkVfXyAqLyBlMShcbiAgICAgICAgICBcImxpbmVhckdyYWRpZW50XCIsXG4gICAgICAgICAge1xuICAgICAgICAgICAgaWQ6IFwicGFpbnQyX2xpbmVhclwiLFxuICAgICAgICAgICAgeDE6IFwiNzUuMDA0NlwiLFxuICAgICAgICAgICAgeTE6IFwiOTIuMzc1M1wiLFxuICAgICAgICAgICAgeDI6IFwiMTk0LjI3OVwiLFxuICAgICAgICAgICAgeTI6IFwiOTEuMDI4N1wiLFxuICAgICAgICAgICAgZ3JhZGllbnRVbml0czogXCJ1c2VyU3BhY2VPblVzZVwiLFxuICAgICAgICAgICAgY2hpbGRyZW46IFtcbiAgICAgICAgICAgICAgLyogQF9fUFVSRV9fICovIGMoXCJzdG9wXCIsIHsgc3RvcENvbG9yOiBcIiNEMzBBMTFcIiB9KSxcbiAgICAgICAgICAgICAgLyogQF9fUFVSRV9fICovIGMoXCJzdG9wXCIsIHsgb2Zmc2V0OiBcIjAuMjhcIiwgc3RvcENvbG9yOiBcIiNEQjJBMERcIiB9KSxcbiAgICAgICAgICAgICAgLyogQF9fUFVSRV9fICovIGMoXCJzdG9wXCIsIHsgb2Zmc2V0OiBcIjAuODhcIiwgc3RvcENvbG9yOiBcIiNFRTdCMDJcIiB9KSxcbiAgICAgICAgICAgICAgLyogQF9fUFVSRV9fICovIGMoXCJzdG9wXCIsIHsgb2Zmc2V0OiBcIjFcIiwgc3RvcENvbG9yOiBcIiNGMjhDMDBcIiB9KVxuICAgICAgICAgICAgXVxuICAgICAgICAgIH1cbiAgICAgICAgKVxuICAgICAgXSB9KVxuICAgIF1cbiAgfVxuKSwgZ0ogPSAoKSA9PiAvKiBAX19QVVJFX18gKi8gZTEoXG4gIFwic3ZnXCIsXG4gIHtcbiAgICB3aWR0aDogXCIyNjBcIixcbiAgICBoZWlnaHQ6IFwiMjYwXCIsXG4gICAgdmlld0JveDogXCIwIDAgMjYwIDI2MFwiLFxuICAgIGZpbGw6IFwibm9uZVwiLFxuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgY2hpbGRyZW46IFtcbiAgICAgIC8qIEBfX1BVUkVfXyAqLyBjKFxuICAgICAgICBcInBhdGhcIixcbiAgICAgICAge1xuICAgICAgICAgIHN0eWxlOiB7IG1peEJsZW5kTW9kZTogXCJtdWx0aXBseVwiIH0sXG4gICAgICAgICAgZDogXCJNMjIzLjUyOCAyMjguNDY0QzIwMS4wNjggMjI0LjQ3OCAxNjUuNDE3IDIxNi41MDkgMTY4Ljg5NiAxOTEuMDdDMTcxLjU3NCAxNzEuNDg1IDIwMy45NzkgMTY1Ljc3NSAyMTcuNTIgMTYyLjYxOEMyMjguMjcxIDE2MC4xMTggMjU2Ljk0NCAxNTYuNjYzIDI1OS44NTkgMTUyLjA5N0MyNTkuODU5IDE1Mi4wOTcgMjU5Ljg1OSAxNTIuMDk3IDI1OS44NTkgMTUyLjEyMUMyNTkuOTA3IDE1My4yNDYgMjU5Ljk0NCAxNTQuMzc2IDI1OS45NjggMTU1LjUxMlYxNTUuNzEzQzI1OS45OTIgMTU2Ljc4IDI2MCAxNTcuODUxIDI2MCAxNTguOTM0QzI2MCAxODMuNDE1IDI1NC40OTYgMjA2LjMzOCAyNDQuOTAxIDIyNi4wMDhDMjQ0Ljc3NiAyMjYuMjUzIDI0NC42NTEgMjI2LjUwMyAyNDQuNTIyIDIyNi43NDlDMjQzLjM2MiAyMjguOTg3IDIzNS41OTUgMjMwLjYwNiAyMjMuNTI4IDIyOC40NjRaXCIsXG4gICAgICAgICAgZmlsbDogXCJ1cmwoI3BhaW50MF9saW5lYXIpXCJcbiAgICAgICAgfVxuICAgICAgKSxcbiAgICAgIC8qIEBfX1BVUkVfXyAqLyBjKFxuICAgICAgICBcInBhdGhcIixcbiAgICAgICAge1xuICAgICAgICAgIHN0eWxlOiB7IG1peEJsZW5kTW9kZTogXCJtdWx0aXBseVwiIH0sXG4gICAgICAgICAgZDogXCJNMjU5Ljk2OCAxNTUuNzEzVjE1NS41MTJDMjU5Ljk2OCAxNTQuNzM0IDI1OS45MjcgMTUzLjk1NyAyNTkuODk5IDE1My4xODRDMjU5LjkzIDE1Mi44MzkgMjU5LjkxOCAxNTIuNDkyIDI1OS44NjMgMTUyLjE0OUMyNTUuNTM5IDEzOC4xNzMgMTkwLjM0MSAxMjEuNTQ4IDE0Ni41NDUgMTEzLjI2NUM5MS4xNzIzIDEwMi44MTMgNy43Mzg4NSA5MS44IDExLjY3NjggNzAuMjYyMkM4LjU4ODQ0IDc1LjIxNDggNC4zODA3MyA4NC43NTc3IDMuMzA5NjggOTAuNTU5OUMtMi41NjkwMyAxMjIuNTMgMy4zNTggMTMwLjUzOSA3LjgyMzQgMTM0LjE1NUw4LjA2MDk3IDEzNC4zNDhDNTYuMjYyNCAxNTYuNjM1IDI3My40MDggMTYxLjcyOSAyNDQuMzIxIDIyNi45NThMMjQ0LjI5NyAyMjcuMDE0QzI0NC4zODEgMjI2LjkyNSAyNDQuNDU2IDIyNi44MjcgMjQ0LjUxOCAyMjYuNzJMMjQ0Ljg5NyAyMjUuOThDMjU0LjQ5MiAyMDYuMzEgMjU5Ljk5NiAxODMuMzg3IDI1OS45OTYgMTU4LjkwNkMyNjAgMTU3LjgzNSAyNTkuOTkyIDE1Ni43OCAyNTkuOTY4IDE1NS43MTNaXCIsXG4gICAgICAgICAgZmlsbDogXCJ1cmwoI3BhaW50MV9saW5lYXIpXCJcbiAgICAgICAgfVxuICAgICAgKSxcbiAgICAgIC8qIEBfX1BVUkVfXyAqLyBjKFxuICAgICAgICBcInBhdGhcIixcbiAgICAgICAge1xuICAgICAgICAgIHN0eWxlOiB7IG1peEJsZW5kTW9kZTogXCJtdWx0aXBseVwiIH0sXG4gICAgICAgICAgZDogXCJNMjU2LjI1MSA2NC4yNTg3QzI1Mi4xMzIgNDQuNzc0NCAyMjIuMDQ2IDM2Ljk3OSAxODYuODk1IDMzLjQ2MzlDODcuNjgxMyAyMy41NDI1IDM0LjAzNiA0NS4yNjU2IDEyLjc2NCA2OC42MDMzQzkuMTAzODYgNzMuOTcwNiA1LjA2MTI0IDgzLjU4NTkgMy4zMTM3MyA5MC41NTk5Qy00LjM5NzA1IDEyMS4zNjMgMy4xODg5MSAxMjkuOTY3IDcuNTE3NDEgMTMzLjg4OUM1LjQ3NTk3IDEzMS4xODMgNS4xNzgwMSAxMjguOTYxIDQuOTQwNDQgMTI2LjQzMkMyLjI3MDg2IDk4LjQzNTcgMTA0LjYwNSA4MS45OTU1IDIxMy4xNDMgMTAyLjk1N0MyNTIuOTYyIDExMC42NTIgMjYwLjM3NCA4My43NDcgMjU2LjI1MSA2NC4yNTg3WlwiLFxuICAgICAgICAgIGZpbGw6IFwidXJsKCNwYWludDJfbGluZWFyKVwiXG4gICAgICAgIH1cbiAgICAgICksXG4gICAgICAvKiBAX19QVVJFX18gKi8gZTEoXCJkZWZzXCIsIHsgY2hpbGRyZW46IFtcbiAgICAgICAgLyogQF9fUFVSRV9fICovIGUxKFxuICAgICAgICAgIFwibGluZWFyR3JhZGllbnRcIixcbiAgICAgICAgICB7XG4gICAgICAgICAgICBpZDogXCJwYWludDBfbGluZWFyXCIsXG4gICAgICAgICAgICB4MTogXCIxNjguNjU4XCIsXG4gICAgICAgICAgICB5MTogXCIxOTAuNzg0XCIsXG4gICAgICAgICAgICB4MjogXCIyNjUuMTk4XCIsXG4gICAgICAgICAgICB5MjogXCIxOTAuNzg0XCIsXG4gICAgICAgICAgICBncmFkaWVudFVuaXRzOiBcInVzZXJTcGFjZU9uVXNlXCIsXG4gICAgICAgICAgICBjaGlsZHJlbjogW1xuICAgICAgICAgICAgICAvKiBAX19QVVJFX18gKi8gYyhcInN0b3BcIiwgeyBvZmZzZXQ6IFwiMC4xMVwiLCBzdG9wQ29sb3I6IFwiI0Y4QTgwMFwiIH0pLFxuICAgICAgICAgICAgICAvKiBAX19QVVJFX18gKi8gYyhcInN0b3BcIiwgeyBvZmZzZXQ6IFwiMVwiLCBzdG9wQ29sb3I6IFwiI0Q0MTQxMVwiIH0pXG4gICAgICAgICAgICBdXG4gICAgICAgICAgfVxuICAgICAgICApLFxuICAgICAgICAvKiBAX19QVVJFX18gKi8gZTEoXG4gICAgICAgICAgXCJsaW5lYXJHcmFkaWVudFwiLFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGlkOiBcInBhaW50MV9saW5lYXJcIixcbiAgICAgICAgICAgIHgxOiBcIjIwLjgxN1wiLFxuICAgICAgICAgICAgeTE6IFwiMTQ4LjY0NlwiLFxuICAgICAgICAgICAgeDI6IFwiMjE3LjQ2NFwiLFxuICAgICAgICAgICAgeTI6IFwiMTQ4LjY0NlwiLFxuICAgICAgICAgICAgZ3JhZGllbnRVbml0czogXCJ1c2VyU3BhY2VPblVzZVwiLFxuICAgICAgICAgICAgY2hpbGRyZW46IFtcbiAgICAgICAgICAgICAgLyogQF9fUFVSRV9fICovIGMoXCJzdG9wXCIsIHsgc3RvcENvbG9yOiBcIiNGQ0JFMDBcIiB9KSxcbiAgICAgICAgICAgICAgLyogQF9fUFVSRV9fICovIGMoXCJzdG9wXCIsIHsgb2Zmc2V0OiBcIjFcIiwgc3RvcENvbG9yOiBcIiNFQTU2MERcIiB9KVxuICAgICAgICAgICAgXVxuICAgICAgICAgIH1cbiAgICAgICAgKSxcbiAgICAgICAgLyogQF9fUFVSRV9fICovIGUxKFxuICAgICAgICAgIFwibGluZWFyR3JhZGllbnRcIixcbiAgICAgICAgICB7XG4gICAgICAgICAgICBpZDogXCJwYWludDJfbGluZWFyXCIsXG4gICAgICAgICAgICB4MTogXCI4LjE2NTY4XCIsXG4gICAgICAgICAgICB5MTogXCI4Mi40NDI0XCIsXG4gICAgICAgICAgICB4MjogXCIyNjQuNDQxXCIsXG4gICAgICAgICAgICB5MjogXCI4Mi40NDI0XCIsXG4gICAgICAgICAgICBncmFkaWVudFVuaXRzOiBcInVzZXJTcGFjZU9uVXNlXCIsXG4gICAgICAgICAgICBjaGlsZHJlbjogW1xuICAgICAgICAgICAgICAvKiBAX19QVVJFX18gKi8gYyhcInN0b3BcIiwgeyBzdG9wQ29sb3I6IFwiI0QzMEExMVwiIH0pLFxuICAgICAgICAgICAgICAvKiBAX19QVVJFX18gKi8gYyhcInN0b3BcIiwgeyBvZmZzZXQ6IFwiMC4yXCIsIHN0b3BDb2xvcjogXCIjREEyQTBFXCIgfSksXG4gICAgICAgICAgICAgIC8qIEBfX1BVUkVfXyAqLyBjKFwic3RvcFwiLCB7IG9mZnNldDogXCIwLjYzXCIsIHN0b3BDb2xvcjogXCIjRUQ3QjA3XCIgfSksXG4gICAgICAgICAgICAgIC8qIEBfX1BVUkVfXyAqLyBjKFwic3RvcFwiLCB7IG9mZnNldDogXCIxXCIsIHN0b3BDb2xvcjogXCIjRkRDMzAwXCIgfSlcbiAgICAgICAgICAgIF1cbiAgICAgICAgICB9XG4gICAgICAgIClcbiAgICAgIF0gfSlcbiAgICBdXG4gIH1cbiksIENKID0gKCkgPT4gLyogQF9fUFVSRV9fICovIGUxKFxuICBcInN2Z1wiLFxuICB7XG4gICAgd2lkdGg6IFwiMjYwXCIsXG4gICAgaGVpZ2h0OiBcIjI2MFwiLFxuICAgIHZpZXdCb3g6IFwiMCAwIDI2MCAyNjBcIixcbiAgICBmaWxsOiBcIm5vbmVcIixcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIGNoaWxkcmVuOiBbXG4gICAgICAvKiBAX19QVVJFX18gKi8gYyhcbiAgICAgICAgXCJwYXRoXCIsXG4gICAgICAgIHtcbiAgICAgICAgICBzdHlsZTogeyBtaXhCbGVuZE1vZGU6IFwibXVsdGlwbHlcIiB9LFxuICAgICAgICAgIGQ6IFwiTTk3LjY2NzEgODAuOTkzOUMxMDIuNzA4IDk3LjAzNDIgMTI0LjEyMiA5NS4yNjYyIDE0Ny4wMiA5My4zODk3QzE3NS4wMjIgOTEuMDg5NCAyMzguOTk2IDkxLjAwNzIgMjU4LjU5OSAxMTQuNDIyTDI1Ny44MiAxMTMuMzQ0QzIzOS45MjUgODguODQ3OSAyMTYuMDE1IDY5LjM4IDE4OC40MDEgNTYuODIwMkMxNjcuNDQ4IDQ4LjM5NzUgMTQ0Ljk1MyA1MC40NjQ1IDEzMC4wMzQgNTQuNTk1NEMxMTUuMTE0IDU4LjcyNjIgOTIuNjE2MSA2NC45MjQxIDk3LjY2NzEgODAuOTkzOVpcIixcbiAgICAgICAgICBmaWxsOiBcInVybCgjcGFpbnQwX2xpbmVhcilcIlxuICAgICAgICB9XG4gICAgICApLFxuICAgICAgLyogQF9fUFVSRV9fICovIGMoXG4gICAgICAgIFwicGF0aFwiLFxuICAgICAgICB7XG4gICAgICAgICAgc3R5bGU6IHsgbWl4QmxlbmRNb2RlOiBcIm11bHRpcGx5XCIgfSxcbiAgICAgICAgICBkOiBcIk0xMS44Mjk4IDEzMC42MTdDNy42NDMwNiAxMzEuNDQ1IC0yLjgwNzI3IDE3My45MDcgMC43MTIzMTkgMTc4LjEyNkMwLjcxMjMxOSAxNzguMTI2IDE4LjIyMTUgMTgwLjAxOSA1MS45NzgxIDE3Ny4yNTVDMTYzLjcyOCAxNjguMTAzIDI3My42NjYgMTQwLjEyMSAyNTguNjEyIDExNC40MjhDMjU4LjM1NiAxMTQuMDc0IDI1OC4wOTkgMTEzLjcxNSAyNTcuODM2IDExMy4zNTdDMjUwLjE4MiAxMDIuODg1IDI0MS4zOTkgOTMuMjg3NCAyMzEuNjQ1IDg0LjczNzFDMjExLjMwNiAxMzMuMzQ0IDE2LjgxMTcgMTMwLjYxNyAxMS44Mjk4IDEzMC42MTdaXCIsXG4gICAgICAgICAgZmlsbDogXCJ1cmwoI3BhaW50MV9saW5lYXIpXCJcbiAgICAgICAgfVxuICAgICAgKSxcbiAgICAgIC8qIEBfX1BVUkVfXyAqLyBjKFxuICAgICAgICBcInBhdGhcIixcbiAgICAgICAge1xuICAgICAgICAgIHN0eWxlOiB7IG1peEJsZW5kTW9kZTogXCJtdWx0aXBseVwiIH0sXG4gICAgICAgICAgZDogXCJNMjA3LjgzNiAxNzEuMzE3QzIwNS4xMzggMTQ4LjE1OSAxNzIuNDkyIDE1MS4wMDEgMTI3LjI0NyAxNDYuNjExQzEwMi4yNzEgMTQ0LjE4NiAzNC4xMjcxIDEzOC43NyAxMS42MjYgMTMwLjY4OUM3LjQ3NTQ4IDEzMi43MTMgLTEuOTk4ODMgMTcwLjkwOSAwLjM3NzE0IDE3Ny40OThMMC42NzYxOTEgMTc4LjA3N0wwLjcxMjM0IDE3OC4xMjZWMTc4LjE0NkwwLjc0ODQ4OCAxNzguMjE4QzEzLjY1MzcgMjAyLjgyNiAxMjQuNjY3IDIxNC42MyAxNjUuNjQzIDIwNi44ODRDMTk0LjA0MyAyMDEuNTExIDIwOS41NDggMTg2LjAyNiAyMDcuODM2IDE3MS4zMTdaXCIsXG4gICAgICAgICAgZmlsbDogXCJ1cmwoI3BhaW50Ml9saW5lYXIpXCJcbiAgICAgICAgfVxuICAgICAgKSxcbiAgICAgIC8qIEBfX1BVUkVfXyAqLyBlMShcImRlZnNcIiwgeyBjaGlsZHJlbjogW1xuICAgICAgICAvKiBAX19QVVJFX18gKi8gZTEoXG4gICAgICAgICAgXCJsaW5lYXJHcmFkaWVudFwiLFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGlkOiBcInBhaW50MF9saW5lYXJcIixcbiAgICAgICAgICAgIHgxOiBcIjk2Ljk0MDhcIixcbiAgICAgICAgICAgIHkxOiBcIjgyLjcxMjdcIixcbiAgICAgICAgICAgIHgyOiBcIjI1OC41OTlcIixcbiAgICAgICAgICAgIHkyOiBcIjgyLjcxMjdcIixcbiAgICAgICAgICAgIGdyYWRpZW50VW5pdHM6IFwidXNlclNwYWNlT25Vc2VcIixcbiAgICAgICAgICAgIGNoaWxkcmVuOiBbXG4gICAgICAgICAgICAgIC8qIEBfX1BVUkVfXyAqLyBjKFwic3RvcFwiLCB7IHN0b3BDb2xvcjogXCIjRkZEMzAwXCIgfSksXG4gICAgICAgICAgICAgIC8qIEBfX1BVUkVfXyAqLyBjKFwic3RvcFwiLCB7IG9mZnNldDogXCIxXCIsIHN0b3BDb2xvcjogXCIjRUE1NjBEXCIgfSlcbiAgICAgICAgICAgIF1cbiAgICAgICAgICB9XG4gICAgICAgICksXG4gICAgICAgIC8qIEBfX1BVUkVfXyAqLyBlMShcbiAgICAgICAgICBcImxpbmVhckdyYWRpZW50XCIsXG4gICAgICAgICAge1xuICAgICAgICAgICAgaWQ6IFwicGFpbnQxX2xpbmVhclwiLFxuICAgICAgICAgICAgeDE6IFwiLTAuMDAwODAwNDAzXCIsXG4gICAgICAgICAgICB5MTogXCIxMzEuNzQ3XCIsXG4gICAgICAgICAgICB4MjogXCIyNTkuOTg5XCIsXG4gICAgICAgICAgICB5MjogXCIxMzEuNzQ3XCIsXG4gICAgICAgICAgICBncmFkaWVudFVuaXRzOiBcInVzZXJTcGFjZU9uVXNlXCIsXG4gICAgICAgICAgICBjaGlsZHJlbjogW1xuICAgICAgICAgICAgICAvKiBAX19QVVJFX18gKi8gYyhcInN0b3BcIiwgeyBzdG9wQ29sb3I6IFwiI0ZFQzcwMFwiIH0pLFxuICAgICAgICAgICAgICAvKiBAX19QVVJFX18gKi8gYyhcInN0b3BcIiwgeyBvZmZzZXQ6IFwiMVwiLCBzdG9wQ29sb3I6IFwiI0Q1NTIxN1wiIH0pXG4gICAgICAgICAgICBdXG4gICAgICAgICAgfVxuICAgICAgICApLFxuICAgICAgICAvKiBAX19QVVJFX18gKi8gZTEoXG4gICAgICAgICAgXCJsaW5lYXJHcmFkaWVudFwiLFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGlkOiBcInBhaW50Ml9saW5lYXJcIixcbiAgICAgICAgICAgIHgxOiBcIjE3LjA0MThcIixcbiAgICAgICAgICAgIHkxOiBcIjIwOC45NDVcIixcbiAgICAgICAgICAgIHgyOiBcIjE4Mi43OThcIixcbiAgICAgICAgICAgIHkyOiBcIjEyMS4wNFwiLFxuICAgICAgICAgICAgZ3JhZGllbnRVbml0czogXCJ1c2VyU3BhY2VPblVzZVwiLFxuICAgICAgICAgICAgY2hpbGRyZW46IFtcbiAgICAgICAgICAgICAgLyogQF9fUFVSRV9fICovIGMoXCJzdG9wXCIsIHsgb2Zmc2V0OiBcIjAuMzNcIiwgc3RvcENvbG9yOiBcIiNEMzBBMTFcIiB9KSxcbiAgICAgICAgICAgICAgLyogQF9fUFVSRV9fICovIGMoXCJzdG9wXCIsIHsgb2Zmc2V0OiBcIjAuNVwiLCBzdG9wQ29sb3I6IFwiI0RBMkEwRFwiIH0pLFxuICAgICAgICAgICAgICAvKiBAX19QVVJFX18gKi8gYyhcInN0b3BcIiwgeyBvZmZzZXQ6IFwiMC44OVwiLCBzdG9wQ29sb3I6IFwiI0VEN0IwM1wiIH0pLFxuICAgICAgICAgICAgICAvKiBAX19QVVJFX18gKi8gYyhcInN0b3BcIiwgeyBvZmZzZXQ6IFwiMVwiLCBzdG9wQ29sb3I6IFwiI0YzOTQwMFwiIH0pXG4gICAgICAgICAgICBdXG4gICAgICAgICAgfVxuICAgICAgICApXG4gICAgICBdIH0pXG4gICAgXVxuICB9XG4pLCBtSiA9ICgpID0+IC8qIEBfX1BVUkVfXyAqLyBlMShcbiAgXCJzdmdcIixcbiAge1xuICAgIHdpZHRoOiBcIjI2MFwiLFxuICAgIGhlaWdodDogXCIyNjBcIixcbiAgICB2aWV3Qm94OiBcIjAgMCAyNjAgMjYwXCIsXG4gICAgZmlsbDogXCJub25lXCIsXG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICBjaGlsZHJlbjogW1xuICAgICAgLyogQF9fUFVSRV9fICovIGMoXG4gICAgICAgIFwicGF0aFwiLFxuICAgICAgICB7XG4gICAgICAgICAgc3R5bGU6IHsgbWl4QmxlbmRNb2RlOiBcIm11bHRpcGx5XCIgfSxcbiAgICAgICAgICBkOiBcIk0yNTkuMyAxMjYuOTgxQzI1NC4yNzYgMTM4LjA2MSAyNDcuODgzIDE0OC40NjggMjQwLjI3MiAxNTcuOTZDMTk3Ljc1NCAxMzkuODExIDM0LjEwMTMgMTc4LjQwNyAyNi43MjcgMTczLjE4QzI0LjM5NzcgMTcwLjYxNSAyMS4yNTQzIDE2Ny4yNTYgMTkuMDUxNiAxNjQuNTkyQzExLjQzMSAxNTQuMzMxIDExLjI4NzMgMTU0LjEyOSA4LjAxMDU2IDE0OC4yMjJDMi4yOTE2NiAxMzYuNzA1IDIuMTc4NzkgMTM2LjQ4NiAwIDEzMC4wMzVDMCAxMzAuMDM1IDMzLjk2NDUgMTIxLjM1NSA2NC4wNjA2IDExNi4yNzVDMTk2LjY0NSA5My44OTU2IDI2Ny45MTYgMTEwLjA5MSAyNTkuMyAxMjYuOTgxWlwiLFxuICAgICAgICAgIGZpbGw6IFwidXJsKCNwYWludDBfbGluZWFyKVwiXG4gICAgICAgIH1cbiAgICAgICksXG4gICAgICAvKiBAX19QVVJFX18gKi8gYyhcbiAgICAgICAgXCJwYXRoXCIsXG4gICAgICAgIHtcbiAgICAgICAgICBzdHlsZTogeyBtaXhCbGVuZE1vZGU6IFwibXVsdGlwbHlcIiB9LFxuICAgICAgICAgIGQ6IFwiTTIwMS44NTUgMTkxLjQ5QzIyNy4xMiAxNzYuMzI3IDI0Ny4xNjQgMTUzLjgyNCAyNTkuMzE3IDEyNi45ODFDMjQ2LjM1NCAxNDkuNTk3IDE3Ni44NTUgMTY3LjM0MiAxNTcuMTgxIDE3Mi4xMDNDMTMzLjk3IDE3Ny43MTIgMTE3LjA3IDE3OS4zNTggMTE4LjMzNSAxOTEuNTcyQzEyMC4wMjIgMjA4LjAzNCAxNzkuOTk1IDIwMi45IDIwMS44NTUgMTkxLjQ5WlwiLFxuICAgICAgICAgIGZpbGw6IFwidXJsKCNwYWludDFfbGluZWFyKVwiXG4gICAgICAgIH1cbiAgICAgICksXG4gICAgICAvKiBAX19QVVJFX18gKi8gYyhcbiAgICAgICAgXCJwYXRoXCIsXG4gICAgICAgIHtcbiAgICAgICAgICBzdHlsZTogeyBtaXhCbGVuZE1vZGU6IFwibXVsdGlwbHlcIiB9LFxuICAgICAgICAgIGQ6IFwiTTIzNy42OCA5MC4xMzMyQzIyOS43MzEgOTYuNTEyMyAyMTYuODYgOTcuMzcwOCAyMDcuMTE1IDk5LjUxMTlDMTc0LjIyNSAxMDYuNzI5IDE0MS40NDQgMTEzLjIzMSAxMDkuMTE3IDEyMi44NjZDNDQuMjgzOCAxNDIuMTk4IDIzLjI1ODcgMTY1LjI5IDI2LjcyNyAxNzMuMThDMjQuMzk3NyAxNzAuNjE1IDIxLjI1NDMgMTY3LjI1NiAxOS4wNTE2IDE2NC41OTJDMTEuNDMxIDE1NC4zMzEgMTEuMjg3MyAxNTQuMTI5IDguMDEwNTYgMTQ4LjIyMkMyLjI5MTY2IDEzNi43MDUgMi4xNzg3OSAxMzYuNDg2IDAgMTMwLjAzNkMwIDEzMC4wMzYgMTIuMjYyMSAxMTMuMDg0IDUyLjcyODggOTIuMzYzM0M5OC45MTQ0IDY4LjcxNDcgMTUwLjc5OCA1OC42ODI3IDIwMi40MTYgNTkuMDA3NkMyMTEuNDA0IDU5LjA2NTggMjIxLjM2MSA1OS40MjE1IDIyOS43NDEgNjIuOTgyMUMyNDAuMzU1IDY3LjQ5MzYgMjQ4Ljc4NiA4MS4yMTI4IDIzNy42OCA5MC4xMzMyWlwiLFxuICAgICAgICAgIGZpbGw6IFwidXJsKCNwYWludDJfbGluZWFyKVwiXG4gICAgICAgIH1cbiAgICAgICksXG4gICAgICAvKiBAX19QVVJFX18gKi8gZTEoXCJkZWZzXCIsIHsgY2hpbGRyZW46IFtcbiAgICAgICAgLyogQF9fUFVSRV9fICovIGUxKFxuICAgICAgICAgIFwibGluZWFyR3JhZGllbnRcIixcbiAgICAgICAgICB7XG4gICAgICAgICAgICBpZDogXCJwYWludDBfbGluZWFyXCIsXG4gICAgICAgICAgICB4MTogXCIxMC40Nzk2XCIsXG4gICAgICAgICAgICB5MTogXCIxNzEuNjE5XCIsXG4gICAgICAgICAgICB4MjogXCIyNTYuNDk0XCIsXG4gICAgICAgICAgICB5MjogXCIxMDkuNjQyXCIsXG4gICAgICAgICAgICBncmFkaWVudFVuaXRzOiBcInVzZXJTcGFjZU9uVXNlXCIsXG4gICAgICAgICAgICBjaGlsZHJlbjogW1xuICAgICAgICAgICAgICAvKiBAX19QVVJFX18gKi8gYyhcInN0b3BcIiwgeyBvZmZzZXQ6IFwiMC4zM1wiLCBzdG9wQ29sb3I6IFwiI0QzMEExMVwiIH0pLFxuICAgICAgICAgICAgICAvKiBAX19QVVJFX18gKi8gYyhcInN0b3BcIiwgeyBvZmZzZXQ6IFwiMC41XCIsIHN0b3BDb2xvcjogXCIjREEyQTBEXCIgfSksXG4gICAgICAgICAgICAgIC8qIEBfX1BVUkVfXyAqLyBjKFwic3RvcFwiLCB7IG9mZnNldDogXCIwLjg5XCIsIHN0b3BDb2xvcjogXCIjRUQ3QjAzXCIgfSksXG4gICAgICAgICAgICAgIC8qIEBfX1BVUkVfXyAqLyBjKFwic3RvcFwiLCB7IG9mZnNldDogXCIxXCIsIHN0b3BDb2xvcjogXCIjRjM5NDAwXCIgfSlcbiAgICAgICAgICAgIF1cbiAgICAgICAgICB9XG4gICAgICAgICksXG4gICAgICAgIC8qIEBfX1BVUkVfXyAqLyBlMShcbiAgICAgICAgICBcImxpbmVhckdyYWRpZW50XCIsXG4gICAgICAgICAge1xuICAgICAgICAgICAgaWQ6IFwicGFpbnQxX2xpbmVhclwiLFxuICAgICAgICAgICAgeDE6IFwiMTE3LjQ5N1wiLFxuICAgICAgICAgICAgeTE6IFwiMTg4LjU3M1wiLFxuICAgICAgICAgICAgeDI6IFwiMjY1LjQzMVwiLFxuICAgICAgICAgICAgeTI6IFwiMTUxLjMwNVwiLFxuICAgICAgICAgICAgZ3JhZGllbnRVbml0czogXCJ1c2VyU3BhY2VPblVzZVwiLFxuICAgICAgICAgICAgY2hpbGRyZW46IFtcbiAgICAgICAgICAgICAgLyogQF9fUFVSRV9fICovIGMoXCJzdG9wXCIsIHsgc3RvcENvbG9yOiBcIiNGRkQzMDBcIiB9KSxcbiAgICAgICAgICAgICAgLyogQF9fUFVSRV9fICovIGMoXCJzdG9wXCIsIHsgb2Zmc2V0OiBcIjFcIiwgc3RvcENvbG9yOiBcIiNFQTU2MERcIiB9KVxuICAgICAgICAgICAgXVxuICAgICAgICAgIH1cbiAgICAgICAgKSxcbiAgICAgICAgLyogQF9fUFVSRV9fICovIGUxKFxuICAgICAgICAgIFwibGluZWFyR3JhZGllbnRcIixcbiAgICAgICAgICB7XG4gICAgICAgICAgICBpZDogXCJwYWludDJfbGluZWFyXCIsXG4gICAgICAgICAgICB4MTogXCIyLjEzMDUyXCIsXG4gICAgICAgICAgICB5MTogXCIxMzguNDc4XCIsXG4gICAgICAgICAgICB4MjogXCIyNDIuNzUyXCIsXG4gICAgICAgICAgICB5MjogXCI3Ny44NTk0XCIsXG4gICAgICAgICAgICBncmFkaWVudFVuaXRzOiBcInVzZXJTcGFjZU9uVXNlXCIsXG4gICAgICAgICAgICBjaGlsZHJlbjogW1xuICAgICAgICAgICAgICAvKiBAX19QVVJFX18gKi8gYyhcInN0b3BcIiwgeyBzdG9wQ29sb3I6IFwiI0ZFQzcwMFwiIH0pLFxuICAgICAgICAgICAgICAvKiBAX19QVVJFX18gKi8gYyhcInN0b3BcIiwgeyBvZmZzZXQ6IFwiMVwiLCBzdG9wQ29sb3I6IFwiI0Q1NTIxN1wiIH0pXG4gICAgICAgICAgICBdXG4gICAgICAgICAgfVxuICAgICAgICApXG4gICAgICBdIH0pXG4gICAgXVxuICB9XG4pLCBMSiA9ICgpID0+IC8qIEBfX1BVUkVfXyAqLyBlMShcbiAgXCJzdmdcIixcbiAge1xuICAgIHdpZHRoOiBcIjI2MFwiLFxuICAgIGhlaWdodDogXCIyNjBcIixcbiAgICB2aWV3Qm94OiBcIjAgMCAyNjAgMjYwXCIsXG4gICAgZmlsbDogXCJub25lXCIsXG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICBjaGlsZHJlbjogW1xuICAgICAgLyogQF9fUFVSRV9fICovIGMoXG4gICAgICAgIFwicGF0aFwiLFxuICAgICAgICB7XG4gICAgICAgICAgc3R5bGU6IHsgbWl4QmxlbmRNb2RlOiBcIm11bHRpcGx5XCIgfSxcbiAgICAgICAgICBkOiBcIk0yNTkuMjc4IDMwLjcxNzRDMjM2LjE5OSAyMi45Njg1IDIxMi44MzIgNDAuMjUyNiAxOTUuNjg2IDUzLjYzNjdDMTQ2LjExOSA5Mi4yODMgMTA0LjQzOCAxNDYuMDYzIDg2LjU2MSAyMDYuODk4QzgyLjI5MDEgMjIxLjQ1IDgwLjYxNjYgMjM2LjQxNiA3OS4yODUxIDI1MS40OTJDNzguNzgzIDI1Ny4xNDkgMjYuMTQxNCAyNTMuMDk2IDI1LjQ0MjkgMjQ1LjY3MUMyNC45Mjk5IDI0MC4zODIgMjUuMjEzNyAyMjcuODAyIDI2LjE3MDUgMjIwLjY2QzM0LjkyMzUgMTU0LjA2NyA2OC43ODU5IDEwMC4xMzcgMTA4Ljg3NiA0OC4zNTQzQzExNy45MzEgMzYuNjYxOSAxMzQuNzMyIDE4LjY3OTMgMTQ2LjY1IDkuNzY5ODhDMTQ3LjkyNiA4Ljc0OTY4IDE0OS4zMDUgNy44NjQ1NiAxNTAuNzY0IDcuMTI4N0MxNTQuMDcxIDUuNTc1MjggMjUxLjcyMiAxLjQyNzk4IDI1OS4yNzggMzAuNzE3NFpcIixcbiAgICAgICAgICBmaWxsOiBcInVybCgjcGFpbnQwX2xpbmVhcilcIlxuICAgICAgICB9XG4gICAgICApLFxuICAgICAgLyogQF9fUFVSRV9fICovIGMoXG4gICAgICAgIFwicGF0aFwiLFxuICAgICAgICB7XG4gICAgICAgICAgc3R5bGU6IHsgbWl4QmxlbmRNb2RlOiBcIm11bHRpcGx5XCIgfSxcbiAgICAgICAgICBkOiBcIk0xNTAuOTc1IDcuMDU5NjJDMTU2Ljc5NiA1LjQ2MjU0IDI1MS44MjcgMS44NDI3NSAyNTkuMjc4IDMwLjcxNzRMMjU5LjM0MyAzMC43NDY1VjMwLjc2ODRDMjU5LjQ2NyAzMS4wNDE0IDI1OS41NTggMzEuMzI4NSAyNTkuNjEzIDMxLjYyMzNDMjYzIDUwLjcxMTggMjQzLjk2OSAxMDIuNjIyIDIxMC41NCAxNTIuNTlDMTc5LjY5MyAxOTguNzE2IDE1OC4zMjQgMjE0LjIyNSAxMzUuODUyIDIwMi45MjFDMTE2Ljc3OCAxOTMuMDE5IDExOC43MzIgMTY0LjMxOSAxMzQuMjA0IDEyMS43MTRDMTQ4Ljc5MiA4MS41MDM3IDE3OS4zMjYgMTUuMDYzMiAxNTAuOTc1IDcuMDU5NjJaXCIsXG4gICAgICAgICAgZmlsbDogXCJ1cmwoI3BhaW50MV9saW5lYXIpXCJcbiAgICAgICAgfVxuICAgICAgKSxcbiAgICAgIC8qIEBfX1BVUkVfXyAqLyBjKFxuICAgICAgICBcInBhdGhcIixcbiAgICAgICAge1xuICAgICAgICAgIHN0eWxlOiB7IG1peEJsZW5kTW9kZTogXCJtdWx0aXBseVwiIH0sXG4gICAgICAgICAgZDogXCJNMTExLjQyMyA1Ny4yMjM4QzEyMC4yMTYgNjQuOTk4MiA2NS40NDYzIDE0Ny43MTkgNzQuMjQyOSAyMjguMzYyQzc2LjM5MjkgMjQ4LjA2NSA3OS4xMTA1IDI0OS4xNDIgNzkuMjc0MiAyNTEuNDkyQzc4Ljc3MjIgMjU3LjE0OSAyNi40MzYxIDI1My4wNiAyNS40MzIxIDI0NS42NzFDMTguNzU2NCAxOTcuMzQ0IDI1LjQzMjEgOTAuNzU4NyA2MC4xNzg0IDQ3Ljg5NkM2Mi45MzYgNDQuNDQzNSAxMDguNDk4IDU0LjY0MDggMTExLjQyMyA1Ny4yMjM4WlwiLFxuICAgICAgICAgIGZpbGw6IFwidXJsKCNwYWludDJfbGluZWFyKVwiXG4gICAgICAgIH1cbiAgICAgICksXG4gICAgICAvKiBAX19QVVJFX18gKi8gYyhcbiAgICAgICAgXCJwYXRoXCIsXG4gICAgICAgIHtcbiAgICAgICAgICBzdHlsZTogeyBtaXhCbGVuZE1vZGU6IFwibXVsdGlwbHlcIiB9LFxuICAgICAgICAgIGQ6IFwiTTExMS40MjMgNTcuMjIzOEM4OC41MDM3IDUzLjYyNTggNDcuMjk5OSAxNjQuNDAyIDQxLjkwNDggMTc2Ljc2NEMzNS41OTY1IDE5MS4zMTYgLTIuMjM4NTUgMTg1LjQ2NiAwLjEwNDMxMyAxNjkuODUyQzEwLjQ4NzEgMTAwLjYyNSAyOS4wNjk5IDcwLjk3NTMgNjAuMTYwMiA0Ny44ODE0QzYwLjQyNjEgNDcuNjY0MyA2MC43MzQ3IDQ3LjUwNTcgNjEuMDY2IDQ3LjQxNThDNjcuNjE0NCA0NS43MzUgMTAzLjAzIDUzLjUzMTIgMTEwLjI3MyA1Ni42MDUzQzExMC44MzQgNTYuODQxOCAxMTEuNjg1IDU3LjI2MzggMTExLjQyMyA1Ny4yMjM4WlwiLFxuICAgICAgICAgIGZpbGw6IFwidXJsKCNwYWludDNfbGluZWFyKVwiXG4gICAgICAgIH1cbiAgICAgICksXG4gICAgICAvKiBAX19QVVJFX18gKi8gZTEoXCJkZWZzXCIsIHsgY2hpbGRyZW46IFtcbiAgICAgICAgLyogQF9fUFVSRV9fICovIGUxKFxuICAgICAgICAgIFwibGluZWFyR3JhZGllbnRcIixcbiAgICAgICAgICB7XG4gICAgICAgICAgICBpZDogXCJwYWludDBfbGluZWFyXCIsXG4gICAgICAgICAgICB4MTogXCIyNi4zMDk1XCIsXG4gICAgICAgICAgICB5MTogXCIyNDIuNjE2XCIsXG4gICAgICAgICAgICB4MjogXCIyMTcuNzVcIixcbiAgICAgICAgICAgIHkyOiBcIi0xNi45NjRcIixcbiAgICAgICAgICAgIGdyYWRpZW50VW5pdHM6IFwidXNlclNwYWNlT25Vc2VcIixcbiAgICAgICAgICAgIGNoaWxkcmVuOiBbXG4gICAgICAgICAgICAgIC8qIEBfX1BVUkVfXyAqLyBjKFwic3RvcFwiLCB7IHN0b3BDb2xvcjogXCIjRkZEMzAwXCIgfSksXG4gICAgICAgICAgICAgIC8qIEBfX1BVUkVfXyAqLyBjKFwic3RvcFwiLCB7IG9mZnNldDogXCIxXCIsIHN0b3BDb2xvcjogXCIjRUE1NjBEXCIgfSlcbiAgICAgICAgICAgIF1cbiAgICAgICAgICB9XG4gICAgICAgICksXG4gICAgICAgIC8qIEBfX1BVUkVfXyAqLyBlMShcbiAgICAgICAgICBcImxpbmVhckdyYWRpZW50XCIsXG4gICAgICAgICAge1xuICAgICAgICAgICAgaWQ6IFwicGFpbnQxX2xpbmVhclwiLFxuICAgICAgICAgICAgeDE6IFwiLTMyMDUxM1wiLFxuICAgICAgICAgICAgeTE6IFwiLTcwNjI2NFwiLFxuICAgICAgICAgICAgeDI6IFwiLTIzODY5M1wiLFxuICAgICAgICAgICAgeTI6IFwiLTcwNjI2NFwiLFxuICAgICAgICAgICAgZ3JhZGllbnRVbml0czogXCJ1c2VyU3BhY2VPblVzZVwiLFxuICAgICAgICAgICAgY2hpbGRyZW46IFtcbiAgICAgICAgICAgICAgLyogQF9fUFVSRV9fICovIGMoXCJzdG9wXCIsIHsgc3RvcENvbG9yOiBcIiNGRkQzMDBcIiB9KSxcbiAgICAgICAgICAgICAgLyogQF9fUFVSRV9fICovIGMoXCJzdG9wXCIsIHsgb2Zmc2V0OiBcIjFcIiwgc3RvcENvbG9yOiBcIiNFQTU2MERcIiB9KVxuICAgICAgICAgICAgXVxuICAgICAgICAgIH1cbiAgICAgICAgKSxcbiAgICAgICAgLyogQF9fUFVSRV9fICovIGUxKFxuICAgICAgICAgIFwibGluZWFyR3JhZGllbnRcIixcbiAgICAgICAgICB7XG4gICAgICAgICAgICBpZDogXCJwYWludDJfbGluZWFyXCIsXG4gICAgICAgICAgICB4MTogXCI2LjIxMDUyXCIsXG4gICAgICAgICAgICB5MTogXCIyMjUuOTExXCIsXG4gICAgICAgICAgICB4MjogXCIxMjkuMjczXCIsXG4gICAgICAgICAgICB5MjogXCI1OS4wNDY1XCIsXG4gICAgICAgICAgICBncmFkaWVudFVuaXRzOiBcInVzZXJTcGFjZU9uVXNlXCIsXG4gICAgICAgICAgICBjaGlsZHJlbjogW1xuICAgICAgICAgICAgICAvKiBAX19QVVJFX18gKi8gYyhcInN0b3BcIiwgeyBzdG9wQ29sb3I6IFwiI0ZFQzcwMFwiIH0pLFxuICAgICAgICAgICAgICAvKiBAX19QVVJFX18gKi8gYyhcInN0b3BcIiwgeyBvZmZzZXQ6IFwiMVwiLCBzdG9wQ29sb3I6IFwiI0Q1NTIxN1wiIH0pXG4gICAgICAgICAgICBdXG4gICAgICAgICAgfVxuICAgICAgICApLFxuICAgICAgICAvKiBAX19QVVJFX18gKi8gZTEoXG4gICAgICAgICAgXCJsaW5lYXJHcmFkaWVudFwiLFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGlkOiBcInBhaW50M19saW5lYXJcIixcbiAgICAgICAgICAgIHgxOiBcIi0xLjA5ODI2XCIsXG4gICAgICAgICAgICB5MTogXCIxNjguNTgyXCIsXG4gICAgICAgICAgICB4MjogXCI5Ni44NjM5XCIsXG4gICAgICAgICAgICB5MjogXCIzNS43NTE2XCIsXG4gICAgICAgICAgICBncmFkaWVudFVuaXRzOiBcInVzZXJTcGFjZU9uVXNlXCIsXG4gICAgICAgICAgICBjaGlsZHJlbjogW1xuICAgICAgICAgICAgICAvKiBAX19QVVJFX18gKi8gYyhcInN0b3BcIiwgeyBvZmZzZXQ6IFwiMC4zM1wiLCBzdG9wQ29sb3I6IFwiI0QzMEExMVwiIH0pLFxuICAgICAgICAgICAgICAvKiBAX19QVVJFX18gKi8gYyhcInN0b3BcIiwgeyBvZmZzZXQ6IFwiMC41XCIsIHN0b3BDb2xvcjogXCIjREEyQTBEXCIgfSksXG4gICAgICAgICAgICAgIC8qIEBfX1BVUkVfXyAqLyBjKFwic3RvcFwiLCB7IG9mZnNldDogXCIwLjg5XCIsIHN0b3BDb2xvcjogXCIjRUQ3QjAzXCIgfSksXG4gICAgICAgICAgICAgIC8qIEBfX1BVUkVfXyAqLyBjKFwic3RvcFwiLCB7IG9mZnNldDogXCIxXCIsIHN0b3BDb2xvcjogXCIjRjM5NDAwXCIgfSlcbiAgICAgICAgICAgIF1cbiAgICAgICAgICB9XG4gICAgICAgIClcbiAgICAgIF0gfSlcbiAgICBdXG4gIH1cbiksIHZKID0gLyogQF9fUFVSRV9fICovIE9iamVjdC5mcmVlemUoLyogQF9fUFVSRV9fICovIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh7XG4gIF9fcHJvdG9fXzogbnVsbCxcbiAgUmliYm9uQmx1ZTE6IEhLLFxuICBSaWJib25CbHVlMjogVkssXG4gIFJpYmJvbkJsdWUzOiBQSyxcbiAgUmliYm9uQmx1ZTQ6IEZLLFxuICBSaWJib25CbHVlNTogWEssXG4gIFJpYmJvbkJsdWU2OiBVSyxcbiAgUmliYm9uQmx1ZTc6IFlLLFxuICBSaWJib25CcmFuZDE6IEdLLFxuICBSaWJib25CcmFuZDI6IFFLLFxuICBSaWJib25CcmFuZDM6IFpLLFxuICBSaWJib25CcmFuZDQ6IGpLLFxuICBSaWJib25CcmFuZDU6IEtLLFxuICBSaWJib25CcmFuZDY6IEpLLFxuICBSaWJib25CcmFuZDc6IF9LLFxuICBSaWJib25CcmFuZDg6ICRLLFxuICBSaWJib25HcmVlbjE6IGVKLFxuICBSaWJib25HcmVlbjI6IHRKLFxuICBSaWJib25HcmVlbjM6IG9KLFxuICBSaWJib25HcmVlbjQ6IHJKLFxuICBSaWJib25HcmVlbjU6IG5KLFxuICBSaWJib25HcmVlbjY6IGlKLFxuICBSaWJib25HcmVlbjc6IGFKLFxuICBSaWJib25HcmVlbjg6IHNKLFxuICBSaWJib25NYWdlbnRhMTogY0osXG4gIFJpYmJvbk1hZ2VudGEyOiBsSixcbiAgUmliYm9uTWFnZW50YTM6IHBKLFxuICBSaWJib25NYWdlbnRhNDogZEosXG4gIFJpYmJvbk1hZ2VudGE1OiBiSixcbiAgUmliYm9uTWFnZW50YTY6IE1KLFxuICBSaWJib25NYWdlbnRhNzogQUosXG4gIFJpYmJvbk1hZ2VudGE4OiB1SixcbiAgUmliYm9uT3JhbmdlMTogekosXG4gIFJpYmJvbk9yYW5nZTI6IGhKLFxuICBSaWJib25PcmFuZ2UzOiBPSixcbiAgUmliYm9uT3JhbmdlNDogZkosXG4gIFJpYmJvbk9yYW5nZTU6IGdKLFxuICBSaWJib25PcmFuZ2U2OiBDSixcbiAgUmliYm9uT3JhbmdlNzogbUosXG4gIFJpYmJvbk9yYW5nZTg6IExKXG59LCBTeW1ib2wudG9TdHJpbmdUYWcsIHsgdmFsdWU6IFwiTW9kdWxlXCIgfSkpO1xuZnVuY3Rpb24gcUooZSkge1xuICByZXR1cm4gLyogQF9fUFVSRV9fICovIGMoQ2wsIHsgY2xhc3NOYW1lOiBcInJpYmJvbi1zdmdcIiwgLi4uZSB9KTtcbn1cbmNvbnN0IHMkID0gU3IodkopKHFKKSwgeUogPSAkLmRpdihcbiAgKHsgdGhlbWU6IHsgY29sb3JzOiBlLCB0eXBvZ3JhcGh5OiB0LCBsaW5lSGVpZ2h0OiBvIH0gfSkgPT4gbzFgXG4gICAgZGlzcGxheTogZmxleDtcbiAgICBjb2xvcjogJHtlLnRleHRJY29uLnRleHRQcmltYXJ5fTtcbiAgICBqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWJldHdlZW47XG4gICAgZm9udC1zaXplOiAke3QudDEyfTtcbiAgICBsaW5lLWhlaWdodDogJHtvLmxoMjR9O1xuICAgIHBhZGRpbmc6IDAgOHB4O1xuXG4gICAgbGFiZWwge1xuICAgICAgd2lkdGg6IGF1dG87XG4gICAgfVxuICAgICY6aG92ZXIge1xuICAgICAgYmFja2dyb3VuZC1jb2xvcjogJHtlLmJhY2tncm91bmRzLmJnSG92ZXJQcmltYXJ5fTtcbiAgICAgIGN1cnNvcjogcG9pbnRlcjtcbiAgICB9XG4gICAgJjphY3RpdmUge1xuICAgICAgYmFja2dyb3VuZC1jb2xvcjogJHtlLmJhY2tncm91bmRzLmJnU2VsZWN0ZWR9O1xuICAgICAgY3Vyc29yOiBwb2ludGVyO1xuICAgIH1cbiAgYFxuKSwgd0ogPSAkLmRpdmBcbiAgZGlzcGxheTogZmxleDtcbiAgYWxpZ24taXRlbXM6IGJhc2VsaW5lO1xuYCwgeEogPSAkLmRpdihcbiAgKHsgdGhlbWU6IHsgbWl4aW5zOiBlIH0sIGlzTXVsdGk6IHQgfSkgPT4gbzFgXG4gICAgJHtlLmVsbGlwc2lzfTtcblxuICAgICR7dCAmJiBvMWBcbiAgICAgIHBhZGRpbmctbGVmdDogOHB4O1xuICAgIGB9XG4gICAgJjpub3QoOmxhc3QtY2hpbGQpIHtcbiAgICAgIG1heC13aWR0aDogNzAlO1xuICAgIH1cbiAgYFxuKSwgV0ogPSAkLnNwYW4oXG4gICh7IHRoZW1lOiB7IGNvbG9yczogZSwgc3BhY2luZ3M6IHQgfSB9KSA9PiBvMWBcbiAgICBjb2xvcjogJHtlLnRleHRJY29uLnRleHRMb3dlbXBoYXNpc307XG4gICAgdGV4dC1hbGlnbjogcmlnaHQ7XG4gICAgcGFkZGluZy1sZWZ0OiAke3Quc3A4fTtcbiAgYFxuKSwgUkogPSAkLmRpdmBcbiAgZGlzcGxheTogZmxleDtcbiAganVzdGlmeS1jb250ZW50OiBzcGFjZS1iZXR3ZWVuO1xuYCwgQkogPSAoe1xuICBpdGVtOiBlLFxuICBoaWdobGlnaHRUZXh0OiB0LFxuICBvbkl0ZW1DbGljazogbyxcbiAgaXNGb2N1c2VkOiBuLFxuICBpbmRleDogcixcbiAgaXNNdWx0aTogaSxcbiAgc2V0Rm9jdXM6IGEsXG4gIG9uT3B0aW9uQ2xpY2s6IHMsXG4gIHNlbGVjdGVkT3B0aW9uczogbFxufSkgPT4ge1xuICBjb25zdCBwID0gbjAobnVsbCk7XG4gIFAxKCgpID0+IHtcbiAgICBuICYmIHAuY3VycmVudCAmJiBwLmN1cnJlbnQuZm9jdXMoKTtcbiAgfSwgW25dKTtcbiAgY29uc3QgZCA9IF8xKFxuICAgIChNKSA9PiB7XG4gICAgICBpID8gbyhNLCBsKSA6IG8oTSwgZSksIGEocik7XG4gICAgfSxcbiAgICBbZSwgciwgYSwgbywgbCwgc11cbiAgKSwgYiA9IGUudGV4dDtcbiAgcmV0dXJuIC8qIEBfX1BVUkVfXyAqLyBjKFwibGFiZWxcIiwgeyBodG1sRm9yOiBcImNoZWNrYm94XCIsIG9uQ2xpY2s6IGkgPyBzKGUpIDogbnVsbCwgY2hpbGRyZW46IC8qIEBfX1BVUkVfXyAqLyBlMShcbiAgICB5SixcbiAgICB7XG4gICAgICB0YWJJbmRleDogbiA/IDEgOiAtMSxcbiAgICAgIHJlZjogcCxcbiAgICAgIG9uQ2xpY2s6IGQsXG4gICAgICBvbktleVByZXNzOiBkLFxuICAgICAgY2hpbGRyZW46IFtcbiAgICAgICAgLyogQF9fUFVSRV9fICovIGUxKHdKLCB7IGNoaWxkcmVuOiBbXG4gICAgICAgICAgaSAmJiAvKiBAX19QVVJFX18gKi8gYyhcbiAgICAgICAgICAgIHl0LFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICBjaGVja2VkOiBsLmhhcyhlKSxcbiAgICAgICAgICAgICAgb25DaGFuZ2U6IHMoZSksXG4gICAgICAgICAgICAgIGlzUmVxdWlyZWQ6ICEwLFxuICAgICAgICAgICAgICBpc1J0bDogITAsXG4gICAgICAgICAgICAgIGlkOiBcImNoZWNrYm94XCJcbiAgICAgICAgICAgIH1cbiAgICAgICAgICApLFxuICAgICAgICAgIC8qIEBfX1BVUkVfXyAqLyBjKHhKLCB7IGlzTXVsdGk6IGksIGNoaWxkcmVuOiBiIH0pXG4gICAgICAgIF0gfSksXG4gICAgICAgIC8qIEBfX1BVUkVfXyAqLyBjKFJKLCB7IGNoaWxkcmVuOiAvKiBAX19QVVJFX18gKi8gYyhXSiwgeyBjaGlsZHJlbjogZSA9PSBudWxsID8gdm9pZCAwIDogZS5jYXRlZ29yeSB9KSB9KVxuICAgICAgXVxuICAgIH1cbiAgKSB9KTtcbn0sIFNKID0gJC51bChcbiAgKHsgdGhlbWU6IGUgfSkgPT4gbzFgXG4gICAgJHtlLm1peGlucy5saXN0UmVzZXR9XG4gICAgLnNjcm9sbGJhci1jb250YWluZXIge1xuICAgICAgbGFiZWwge1xuICAgICAgICAmOmZpcnN0LWNoaWxkIHtcbiAgICAgICAgICBwYWRkaW5nLWJvdHRvbTogMHB4O1xuICAgICAgICB9XG4gICAgICAgICY6bGFzdC1jaGlsZCB7XG4gICAgICAgICAgcGFkZGluZy1ib3R0b206IDBweDtcbiAgICAgICAgfVxuICAgICAgICBwYWRkaW5nLWJvdHRvbTogNHB4O1xuICAgICAgfVxuICAgIH1cbiAgYFxuKSwgUWMgPSAoe1xuICBsaXN0RGF0YTogZSxcbiAgaXNNdWx0aTogdCxcbiAgLi4ub1xufSkgPT4ge1xuICBjb25zdCBbbiwgcl0gPSBhdihlLmxlbmd0aCArIDEpLCBbaSwgYV0gPSBUMShcbiAgICBuZXcgU2V0KFwiXCIpXG4gICksIHMgPSBfMShcbiAgICAobCkgPT4gKCkgPT4ge1xuICAgICAgaS5oYXMobCkgPyBpLmRlbGV0ZShsKSA6IGkuYWRkKGwpO1xuICAgICAgY29uc3QgcCA9IG5ldyBTZXQoaSk7XG4gICAgICBhKHApO1xuICAgIH0sXG4gICAgW2ldXG4gICk7XG4gIHJldHVybiAvKiBAX19QVVJFX18gKi8gYyhTSiwgeyBjaGlsZHJlbjogLyogQF9fUFVSRV9fICovIGMoajQsIHsgY2hpbGRyZW46IGUubWFwKChsLCBwKSA9PiAvKiBAX19QVVJFX18gKi8gYyhcbiAgICBCSixcbiAgICB7XG4gICAgICBzZXRGb2N1czogcixcbiAgICAgIGluZGV4OiBwLFxuICAgICAgaXNGb2N1c2VkOiBuID09PSBwICsgMSxcbiAgICAgIGl0ZW06IGwsXG4gICAgICAuLi5vLFxuICAgICAgaXNNdWx0aTogdCxcbiAgICAgIG9uT3B0aW9uQ2xpY2s6IHMsXG4gICAgICBzZWxlY3RlZE9wdGlvbnM6IGlcbiAgICB9LFxuICAgIGAke2wudGV4dH0tJHtwfWBcbiAgKSkgfSkgfSk7XG59O1xuZnVuY3Rpb24gRUooe1xuICBhdXRvY29tcGxldGVMaXN0RGF0YTogZSxcbiAgcmVjZW50bHlMaXN0RGF0YTogdCxcbiAgaXNMb2FkaW5nOiBvLFxuICBpc0Rpc2FibGVkOiBuLFxuICBnZXRWYWx1ZTogcixcbiAgb25TZWFyY2hSZXN1bHRSb3dDbGljazogaSxcbiAgaXNNdWx0aTogYSxcbiAgY2hhckNvdW50OiBzLFxuICBpc0JvZHlHZW5lcmF0ZWQ6IGwsXG4gIGRyb3Bkb3duQm9keVdpZHRoOiBwLFxuICAuLi5kXG59LCBiKSB7XG4gIGNvbnN0IFtNLCB1XSA9IFQxKFwiXCIpLCBbQSwgel0gPSBUMSghMSksIFtmLCBPXSA9IFQxKG51bGwpLCBbaCwgZ10gPSBUMShbXSksIFt2LCBMXSA9IFQxKCksIHkgPSAoKSA9PiB7XG4gICAgIU0gJiYgIW4gJiYgKEYoKSwgeighMCkpO1xuICB9LCBCID0gXzEoXG4gICAgKG0sIGspID0+IHtcbiAgICAgIGEgJiYgKGcoWy4uLmtdKSwgaSAmJiBpKG0sIGspLCB6KCEwKSksIGkgPyAoaShtLCBrKSwgYSAmJiB6KCEwKSkgOiAodShrKSwgeighMSkpO1xuICAgIH0sXG4gICAgW2ldXG4gICksIFggPSBfMSgoKSA9PiB7XG4gICAgaWYgKG8pXG4gICAgICByZXR1cm4gTyhcbiAgICAgICAgLyogQF9fUFVSRV9fICovIGUxKGk1LCB7IGNoaWxkcmVuOiBbXG4gICAgICAgICAgLyogQF9fUFVSRV9fICovIGMoVHAsIHsgdHlwZTogXCJjaXJjbGVcIiwgcHJvZ3Jlc3M6IDUwIH0pLFxuICAgICAgICAgIFwiIExvYWRpbmdcIlxuICAgICAgICBdIH0pXG4gICAgICApLCBudWxsO1xuICAgIGxldCBtID0gW107XG4gICAgaWYgKChlICYmIGggfHwgTSkgJiYgKG0gPSBlLmZpbHRlcihcbiAgICAgIChrKSA9PiB7XG4gICAgICAgIHZhciB4O1xuICAgICAgICByZXR1cm4gYSAmJiAhQXJyYXkuaXNBcnJheShoKSA/IGsudGV4dC50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKGggPT0gbnVsbCA/IHZvaWQgMCA6IGgudG9Mb3dlckNhc2UoKSkgOiBhID8gKHggPSBBcnJheS5mcm9tKE0pKSA9PSBudWxsID8gdm9pZCAwIDogeC5tYXAoKE4pID0+IHtcbiAgICAgICAgICB2YXIgVjtcbiAgICAgICAgICBOLnRvTG93ZXJDYXNlKCkuaW5jbHVkZXMoKFYgPSBrLnRleHQpID09IG51bGwgPyB2b2lkIDAgOiBWLnRvTG93ZXJDYXNlKCkpO1xuICAgICAgICB9KSA6IE0gPyBrLnRleHQudG9Mb3dlckNhc2UoKS5pbmNsdWRlcyhNID09IG51bGwgPyB2b2lkIDAgOiBNLnRvTG93ZXJDYXNlKCkpICYmIGsgOiBrLnRleHQudG9Mb3dlckNhc2UoKS5pbmNsdWRlcyhoID09IG51bGwgPyB2b2lkIDAgOiBoLnRvTG93ZXJDYXNlKCkpO1xuICAgICAgfVxuICAgICkpLCBMKGUubGVuZ3RoKSwgbS5sZW5ndGggPT09IDApXG4gICAgICByZXR1cm4gTyhcbiAgICAgICAgLyogQF9fUFVSRV9fICovIGUxKGk1LCB7IGNoaWxkcmVuOiBbXG4gICAgICAgICAgLyogQF9fUFVSRV9fICovIGMoWjEsIHsgbmFtZTogXCJEaXNhYmxlZFwiLCBzaXplOiBcInhzXCIgfSksXG4gICAgICAgICAgXCIgTm8gcmVzdWx0cyBmb3VuZFwiXG4gICAgICAgIF0gfSlcbiAgICAgICksIG51bGw7XG4gICAgTyhcbiAgICAgIC8qIEBfX1BVUkVfXyAqLyBjKFxuICAgICAgICBRYyxcbiAgICAgICAge1xuICAgICAgICAgIGxpc3REYXRhOiBtLFxuICAgICAgICAgIG9uSXRlbUNsaWNrOiBCLFxuICAgICAgICAgIGhpZ2hsaWdodFRleHQ6IGEgPyBoIDogTSxcbiAgICAgICAgICBpc011bHRpOiBhXG4gICAgICAgIH1cbiAgICAgIClcbiAgICApO1xuICB9LCBbXG4gICAgZSxcbiAgICBvLFxuICAgIE0sXG4gICAgaCxcbiAgICBCLFxuICAgIGFcbiAgXSksIEYgPSBfMSgoKSA9PiB7XG4gICAgdCAhPSBudWxsICYmIHQubGVuZ3RoICYmICFuICYmIE8oXG4gICAgICAvKiBAX19QVVJFX18gKi8gZTEoczAsIHsgY2hpbGRyZW46IFtcbiAgICAgICAgLyogQF9fUFVSRV9fICovIGMoWkIsIHsgY2hpbGRyZW46IFwiUmVjZW50bHkgc2VhcmNoZWRcIiB9KSxcbiAgICAgICAgLyogQF9fUFVSRV9fICovIGMoXG4gICAgICAgICAgUWMsXG4gICAgICAgICAge1xuICAgICAgICAgICAgbGlzdERhdGE6IHQsXG4gICAgICAgICAgICBvbkl0ZW1DbGljazogQixcbiAgICAgICAgICAgIGlzTXVsdGk6IGFcbiAgICAgICAgICB9XG4gICAgICAgIClcbiAgICAgIF0gfSlcbiAgICApO1xuICB9LCBbbiwgdCwgQl0pO1xuICBQMSgoKSA9PiB7XG4gICAgIW4gJiYgTSAhPT0gdm9pZCAwICYmICgoYSA/IGggIT09IG51bGwgJiYgdHlwZW9mIGggPT0gXCJzdHJpbmdcIiAmJiBzICYmIGgubGVuZ3RoID49IHMgOiBzICYmIE0ubGVuZ3RoID49IHMgfHwgbykgPyBYKCkgOiBNLmxlbmd0aCA9PT0gMCAmJiBGKCkpO1xuICB9LCBbXG4gICAgbyxcbiAgICBNLFxuICAgIFgsXG4gICAgRixcbiAgICBuLFxuICAgIEEsXG4gICAgaCxcbiAgICB2XG4gIF0pO1xuICBjb25zdCBUID0gKG0pID0+IHoobSksIHcgPSBfMShcbiAgICAobSkgPT4ge1xuICAgICAgY29uc3QgeyB2YWx1ZTogayB9ID0gbS5jdXJyZW50VGFyZ2V0O1xuICAgICAgYSA/IGcoayB8fCBcIlwiKSA6IHUoayB8fCBcIlwiKTtcbiAgICAgIGxldCB4ID0gcyB8fCAzO1xuICAgICAgKGsgPT0gbnVsbCA/IHZvaWQgMCA6IGsubGVuZ3RoKSA+PSB4IHx8IChrID09IG51bGwgPyB2b2lkIDAgOiBrLmxlbmd0aCkgPT09IDAgPyAhQSAmJiB6KCEwKSA6IEEgJiYgeighMSk7XG4gICAgfSxcbiAgICBbQSwgdl1cbiAgKTtcbiAgUDEoKCkgPT4ge1xuICAgIHIgJiYgYSAmJiBoLmxlbmd0aCA+IDAgJiYgcihoKTtcbiAgfSwgW2gudG9TdHJpbmcoKV0pLCBQMSgoKSA9PiB7XG4gICAgciAmJiAhYSAmJiBNICYmIHIoTSk7XG4gIH0sIFtNXSksIEJyKGIsICgpID0+ICh7XG4gICAgaGFuZGxlRHJvcGRvd25TdGF0ZShtKSB7XG4gICAgICBUKG0pO1xuICAgIH0sXG4gICAgc2V0SW5wdXRWYWx1ZShtKSB7XG4gICAgICB1KG0pO1xuICAgIH0sXG4gICAgc2V0U2VsZWN0ZWRWYWx1ZShtKSB7XG4gICAgICBnKG0pO1xuICAgIH1cbiAgfSkpO1xuICBjb25zdCBIID0gKCkgPT4ge1xuICAgIGxldCBtID0gW107XG4gICAgaWYgKEFycmF5LmlzQXJyYXkoaCkpXG4gICAgICByZXR1cm4gaCA9PSBudWxsIHx8IGgubWFwKChrKSA9PiB7XG4gICAgICAgIG0ucHVzaChrLnRleHQpO1xuICAgICAgfSksIG0gPT0gbnVsbCA/IHZvaWQgMCA6IG0udG9TdHJpbmcoKS5yZXBsYWNlKC8sL2csIFwiLCBcIik7XG4gIH0sIEMgPSAoKSA9PiB7XG4gICAgbGV0IG0gPSBNO1xuICAgIGlmIChtICE9IG51bGwpXG4gICAgICByZXR1cm4gbSA9PSBudWxsID8gdm9pZCAwIDogbS50ZXh0O1xuICB9LCBxID0gKG0pID0+IHtcbiAgICByICYmIGEgJiYgbSA9PSBcIlwiICYmIChnKFtdKSwgcihbXSkpLCByICYmICFhICYmIG0gPT0gXCJcIiAmJiAodShtKSwgcihtKSk7XG4gIH07XG4gIHJldHVybiAvKiBAX19QVVJFX18gKi8gYyhRQiwgeyBvbkNsaWNrOiB5LCBjaGlsZHJlbjogLyogQF9fUFVSRV9fICovIGMoXG4gICAgaXQsXG4gICAge1xuICAgICAgYm9keTogZixcbiAgICAgIG9uQ2hhbmdlOiBULFxuICAgICAgaXNTaG93ZWQ6IEEsXG4gICAgICBpc0Rpc2FibGVkOiBuLFxuICAgICAgaXNCb2R5R2VuZXJhdGVkOiBsLFxuICAgICAgZHJvcGRvd25Cb2R5V2lkdGg6IHAgfHwgXCIxMDAlXCIsXG4gICAgICBjaGlsZHJlbjogLyogQF9fUFVSRV9fICovIGMoXG4gICAgICAgIEc0LFxuICAgICAgICB7XG4gICAgICAgICAgb25DaGFuZ2U6IHcsXG4gICAgICAgICAgdmFsdWU6IGEgPyBIIDogQygpLFxuICAgICAgICAgIGdldFZhbHVlOiBxLFxuICAgICAgICAgIGlzRGlzYWJsZWQ6IG4sXG4gICAgICAgICAgLi4uZFxuICAgICAgICB9XG4gICAgICApXG4gICAgfVxuICApIH0pO1xufVxuY29uc3QgYyQgPSBCMChFSiksIGtKID0gXCJkYXRhOmltYWdlL2dpZjtiYXNlNjQsUjBsR09EbGg4QUNDQVBmL0FMN3I2YmJwNWhLM3J4eTZzbzdjMk9uNDk3ZnA1bWJReTN6WDBoNjZzaEMycmxyTngwakh3Zkg2K3RqeThTbSt0c3J2N1RMQXVTMi91RGJDdTZ6bTQ0YmExdS82K1pyZzNNVHQ2a3JJd2VMMjlhRGkzOFBzNmpyRHZMRG41RlRMeGU3NStXRE95ZXY0K0lqYjF1RDE5TXp2N1lEWTFFekl3bDdPeUJlNHNFN0p3d0t5cWMvdzd1cjQ5elRCdXVYMjl0bno4b3pjMkNPOHRBaTBxNmJrNGNEczZUREF1VDNFdlhQVXo0VGExVmZNeGdPeXFwTGUycnJxNS9iOC9DdSt0NURkMmRyejh0THg3L1g4K3lhOXRYYlYwQlM0cjZUajRHelN6VWJId0gvWTB3NjJyV1RReXBiZjIydlN6TExuNVZIS3hLbmw0c2Z1N0ZQS3hIalcwYXJsNGhxNXNadmczZFB4OEVMRnY5NzE5SFRWMElyYjE4YnQ2MERGdnRUeDhEbkN2TjcwODdUbzVTaSt0bkRUenFqazRhN201TnIwOGxiTHhhN200MXpOeUduUnpCKzdzK2ozOTgzdjdtUFB5bnJXMHZENithSGkzMC9KdzBQR3Y4YnU2ei9FdnF6bDR4bTVzUUd5cWViMzl2cjkvVFBCdXYzKy91MzUrQVd6cXZQNyttN1R6ZzIxcmZ6Ky9ncTByUGI4K3d1MXJQNysvZysycmhXNHNFWEd3TmJ5OFFhenE3enE2UGo4L1B2OS9kZnk4Zm45L096NStNbnU3UFQ3KzkzMDg5WHk4UEw3K2d5MXJaN2gzb1BaMVNXOHRhUGo0UFg3K3dtMHJJTFoxRy9UenBuZzNNanU3QWUwcTdYbzVqakN1eHU2c25IVXp3YXpxcC9pM3RIeDc0VFoxU1c5dFYzT3lHTFB5ZER3N3lpOXRnZXpxeWU5dFFTenFnNjFyZjcvLzJqUnl5Uzh0Uy9BdU9mMzlnU3lxdm45L1pUZTJ2ZjgvUHorL2Z2Ky9iM3I2TnowODVqZjNDRzd0TkR3N2hPM3I1WGYyOVR5OEJpNXNmdisvdlQ3K2d5MXJMdnE1L3I5L05ieThJdmMxNXpoM1Q3RXZlMzUrYzd2N21yUnpGdk54L1A3KzlIdzc0WGExZXo0K1BMNitndTByQmk1c0NTOHRFVEd2OEhzNlpYZTIvajkvT2Y0OTVmZjI1SGQyV1RQeXRUeThiUG81Umk0c056MDh2bjgvSlRlMitUMjlmMy8vcm5xNTliejhkWHk4ZDMxODR2YzJKTGQydWYzOTcvcjZiM3E2T0gyOWJucDU0emMxenpEdmVMMTlkZno4WG5XMFFDeXFkUFQweUgvQzA1RlZGTkRRVkJGTWk0d0F3RUFBQUFoL3d0WVRWQWdSR0YwWVZoTlVEdy9lSEJoWTJ0bGRDQmlaV2RwYmowaTc3dS9JaUJwWkQwaVZ6Vk5NRTF3UTJWb2FVaDZjbVZUZWs1VVkzcHJZemxrSWo4K0lEeDRPbmh0Y0cxbGRHRWdlRzFzYm5NNmVEMGlZV1J2WW1VNmJuTTZiV1YwWVM4aUlIZzZlRzF3ZEdzOUlrRmtiMkpsSUZoTlVDQkRiM0psSURVdU5pMWpNVFF3SURjNUxqRTJNRFExTVN3Z01qQXhOeTh3TlM4d05pMHdNVG93T0RveU1TQWdJQ0FnSUNBZ0lqNGdQSEprWmpwU1JFWWdlRzFzYm5NNmNtUm1QU0pvZEhSd09pOHZkM2QzTG5jekxtOXlaeTh4T1RrNUx6QXlMekl5TFhKa1ppMXplVzUwWVhndGJuTWpJajRnUEhKa1pqcEVaWE5qY21sd2RHbHZiaUJ5WkdZNllXSnZkWFE5SWlJZ2VHMXNibk02ZUcxd1BTSm9kSFJ3T2k4dmJuTXVZV1J2WW1VdVkyOXRMM2hoY0M4eExqQXZJaUI0Yld4dWN6cDRiWEJOVFQwaWFIUjBjRG92TDI1ekxtRmtiMkpsTG1OdmJTOTRZWEF2TVM0d0wyMXRMeUlnZUcxc2JuTTZjM1JTWldZOUltaDBkSEE2THk5dWN5NWhaRzlpWlM1amIyMHZlR0Z3THpFdU1DOXpWSGx3WlM5U1pYTnZkWEpqWlZKbFppTWlJSGh0Y0RwRGNtVmhkRzl5Vkc5dmJEMGlRV1J2WW1VZ1VHaHZkRzl6YUc5d0lFTkRJQ2hOWVdOcGJuUnZjMmdwSWlCNGJYQk5UVHBKYm5OMFlXNWpaVWxFUFNKNGJYQXVhV2xrT2tZeFJEaERSalJEUTBOQ1JERXhSVGc0UXpjM1JEWTFOMFk1UWpVd01FVXhJaUI0YlhCTlRUcEViMk4xYldWdWRFbEVQU0o0YlhBdVpHbGtPa1l4UkRoRFJqUkVRME5DUkRFeFJUZzRRemMzUkRZMU4wWTVRalV3TUVVeElqNGdQSGh0Y0UxTk9rUmxjbWwyWldSR2NtOXRJSE4wVW1WbU9tbHVjM1JoYm1ObFNVUTlJbmh0Y0M1cGFXUTZSakZFT0VOR05FRkRRMEpFTVRGRk9EaEROemRFTmpVM1JqbENOVEF3UlRFaUlITjBVbVZtT21SdlkzVnRaVzUwU1VROUluaHRjQzVrYVdRNlJqRkVPRU5HTkVKRFEwSkVNVEZGT0RoRE56ZEVOalUzUmpsQ05UQXdSVEVpTHo0Z1BDOXlaR1k2UkdWelkzSnBjSFJwYjI0K0lEd3ZjbVJtT2xKRVJqNGdQQzk0T25odGNHMWxkR0UrSUR3L2VIQmhZMnRsZENCbGJtUTlJbklpUHo0Qi8vNzkvUHY2K2ZqMzl2WDA4L0x4OE8vdTdlenI2dW5vNStibDVPUGk0ZURmM3QzYzI5cloyTmZXMWRUVDB0SFF6ODdOek12S3ljakh4c1hFdzhMQndMKyt2Ynk3dXJtNHQ3YTF0TE95c2JDdnJxMnNxNnFwcUtlbXBhU2pvcUdnbjU2ZG5KdWFtWmlYbHBXVWs1S1JrSStPall5TGlvbUloNGFGaElPQ2dZQi9mbjE4ZTNwNWVIZDJkWFJ6Y25Gd2IyNXRiR3RxYVdoblptVmtZMkpoWUY5ZVhWeGJXbGxZVjFaVlZGTlNVVkJQVGsxTVMwcEpTRWRHUlVSRFFrRkFQejQ5UERzNk9UZzNOalUwTXpJeE1DOHVMU3dyS2lrb0p5WWxKQ01pSVNBZkhoMGNHeG9aR0JjV0ZSUVRFaEVRRHc0TkRBc0tDUWdIQmdVRUF3SUJBQUFoK1FRSkJBRC9BQ3dBQUFBQThBQ0NBQUFJL3dEL0NSeElzS0RCZ3dnVEtseklzS0hEaHhBalNweElzYUxGaXhnemF0eklzYVBIanlCRGloeEpzcVRKa3loVHFsekpzcVhMbHpCanlweEpzNmJObXpoejZ0ekpzNmZQbjBDRENoMUt0S2pSbzBpVEtsM0t0S25UcDFDalNwMUt0YXJWcTFpemF0M0t0YXZYcjJERGloMUx0cXpaczJqVHFsM0x0cTNidDNEanlwMUx0NjdkdTNqejZ0M0x0Ni9mdjRBREN4NU11TERodzRnVEsxN011TEhqeDVBalM1NU11YkxseTVnemE5N011YlBuejZCRGl4NU51clRwMDZoVHExN051clhyMTdCank1NU51N2J0MjdoejY5N051N2Z2MzhDREN4OU92TGp4NDhpVEsxL092TG56NTlDalM1OU92YnIxNjlpemE5L092YnYzNytERGl4MGZUNzY4K2ZQbzA2dGZ6NzY5Ky9mdzQ4dWZUNysrL2Z2NDh5OE5DQUFoK1FRSkJBRC9BQ3dBQUFBQThBQ0NBQUFJL3dEL0NSeElzS0RCZ3dnVEtseklzS0hEaHhBalNweElzYUxGaXhnemF0eklzYVBIanlCRGloeEpzcVRKa3loVHFsekpzcVhMbHpCanlweEpzNmJObXpoejZ0ekpzNmZQbjBDRENoMUt0S2pSbzBpVEtsM0t0S25UcDFDalNwMUt0YXJWcTFpemFvVjZCOXpXcnpmUitWc0Z0bXpNVmY3UzRqRExsdVdQdEdrVnRaMXI4ZzVjdUhMcDZnV3A2QzdldllBM09zampGKzdhd0lnclRpbDhsMnppeHcremJXUGNHTExsaFdncHc4MWo3N0puZzJJMXcwMlE3Yk5wY0tMOWdqSDkrVzNxdTE1WlEzYncydThkMlpiNzF2YjNBL2RsM2Fuek9QQjlHY3pyY3NRdlowc2dlbHZwNUpZZFRLYnNHTHBsdTR3VFdQOWNqdkh0N1o1ZHc2aGREZDZ6dmVuK2hKZm5EaGY1K3M5aTBUMS9mM2xWbnVyMDgrdmZ6NysvLy84QUJpamdnQVFXYU9DQkNDYW80SUlNTnVqZ2d4QkdLT0dFRkZabzRZVVlacWpoaGh4MjZPR0hJSVlvNG9na2xtamlpU2ltcU9LS0xMYm80b3N3eGlqampEVFdhT09OT09hbzQ0NDg5dWpqajBBR0tlU1FSQlpwNUpGSUpxbmtra3cyNmVTVFVFWXA1WlJVVm1ubGxWaG1xZVdXWEhicDVaZGdoaW5tbUdTV2FlYVphS2JaWkVBQUlma0VDUVFBL3dBc0FBQUFBUEFBZ2dBQUNQOEEvd2tjU0xDZ3dZTUlFeXBjeUxDaHc0Y1FJMHFjU0xHaXhZc1lNMnJjeUxHang0OGdRNG9jU2JLa3laTW9VNnBjeWRLanZaWXdZOHFjT2RDZXZ6dzRjNklyZDhjQnpaOUFnMXE4NDYrbzBhTTNmMHpoS2JTcDA2Zi9IQ0NkZWpUUE5qQ3JvR3JkeWpJUDFhOUY4eVJZbFkycjJiTWd2WUpkbTBmUkhiUnc0MVpVdTdZdU9oeHk4K3BWU0xldVhYQjdBd2YrNGJkdzBSOHZCU3RHUzlpdzRYSmxGMHVHMnRoeFlYU0pKMnNHV3RseTRYS2JRODlVNU5ueUQ1K2lVNnNzVjlyeXRzeXFZNC9FMGRwelZ0bTRROTdadlh0Vmd0cHJwK1FlVHRMQktrWG9nRTlWUkx6NVNIdXJraXN2eXR5NWRaQjN3UFJ0WGYyNmQ0NE9jRWovcjQzM3UvbU41YllCdjMyK3ZVVUhZTmE3bjE4Um5QclNlV0RUMzk4d1cvelNDVVRHMzRBTTRiQmRZV0FRcU9CQzl0eG5HV0FMUm1oUU5yOVo5cGFFR0E1RW9XTS9aT2loUUJ2NmxRZHFIMllZNGxxZ2xmaWhBdzVTdFkyQUttYllJRmpzeGVnaE9GOGxZR09NckUxMTRZNGxWbWhVZ2tDcWFBOWRJeGJKbzFFcEtxbGljdWpBNktTSHErUlI0NVJZWnFubGxseDI2ZVdYWUlZcDVwaGtsbW5tbVdpbXFlYWFiTGJwNXB0d3hpbm5uSFRXYWVlZGVPYXA1NTU4OXVubm40QUdLdWlnaEJacTZLR0lKcXJvb293MjZ1aWprRVlxNmFTVVZtcnBwWmhtcXVtbW5IYnE2YWVnaGlycXFLU1dhdXFwcUthcTZxcXN0dXJxcTdER0l5cnJyTFRXYXV1dHVPYXE2NjY4OXVycnI4QUdLK3l3eEJacjdMSElKcXVzcHdFQkFDSDVCQWtFQVA4QUxBQUFBQUR3QUlJQUFBai9BUDhKSEVpd29NR0RDQk1xWE1pd29jT0hFQ05LbkVpeG9zV0xHRE5xM01peG84ZVBJRU9LSEVteXBNbVRLRk9xWE1teXBjdVhNR05pekhZSGg2SWZPQlBrMmNteko3cHlkeHpJSEVxMDZFRUg0TXFCUVpmSG45T25VS05LemZOakNsQ2pXTE9pdERlRnFkU3ZZTVBtMlFabWxkYXphRE02d0lFdXJOdTNYL01rV0pVdHJkMjdDKzhvZ3N1M0w5UThpdTdnSFl3WDNBKy9pQk9qdzBHNE1kWTdoeE5MUm93T25PUExMeDJBbWN3NThROTdtRU9qTExldHMybkU1ZXFLWHYzUlh1VFRzUG1pQTgyNmRrWWNwV1ByNWx2T3R1K0oyVGJ2SGc3M2g5RGZ5QmZhUzBDOCtkdHR0Sk5MSndndXQvUHJZTTFPbjQ1ak56b3c1WURlL3hsUG5uejRjbE9ZRTUreVBYbjMwM0tCSG9mb1lKV2l0cm9WdGZkZDduUloxUmpac3dwK3ArbTMzMnFyZEpiSEZORjFkQWNZVFpsbTRJR1hKVGpaZ2dDR3RCYUJrekZHWVdQZ2NLWkloaVdSMXBsMkg5NWxqM1YrL1NEWVNwcWRtS0pkSzBybW9VdlZYZGpnakZoeEtOdUxNQVUzV1FJazhraFVqbjM5VU9STE9FU0lHQmhHYXVXQWVtK05pRldOaVZrV0pWYlo3T1VXaWx4UzJSZVFXeHExaXBOUWJRTm1WdG1JK2RZUFpaNWxqNC9RM2RVbVgzbk1GeWVYd2psRlpscDN2dFhibm1pOXQ2WmREckFvMVRaTEVsclVIWWVxcUNoVWtUcHFhVVloZnBYQXBaeDYxSjlVZjNZcXFrVnVRam5xcVJmWjQyU2VxTFphMGFmK0RLanE2cXdSdFlWT283VG1ldENabGVycTY2L0FCaXZzc01RV2EreXh5Q2FyN0xMTU51dnNzOUJHSysyMDFGWnI3YlhZWnF2dHR0eDI2KzIzNElZcjdyamtsbXZ1dWVpbXErNjY3TGJyN3J2d3hpdnZ2UFRXYSsrOStPYXI3Nzc4OXV2dnZ3QUhMUERBQkJkczhNRUlKNnp3d2d3MzdQRERFRWNzOGNRVVYyenh4UmhuclBIR0hIZnM4Y2NnaHl6eXlDU1hiUExKS0tlczhzb3N0K3p5eXpESExQUE1OTmRNY1VBQUlma0VDUVFBL3dBc0FBQUFBUEFBZ2dBQUNQOEEvd2tjU0xDZ3dZTUlFeXBjeUxDaHc0Y1FJMHFjU0xHaXhZc1lNMnJjeUxHang0OGdRNG9jU2JLa3laTW9VNnBjeWJLbHk1Y3dZMkxNZGdlSG9oODRFK1RaeWJNbnVuSjNITWdjU3JUb1FRZmd5b0ZCbDhlZjA2ZFFvMHJOODJNS1VLTllzNkswTjRXcDFLOWd3K2JaQm1hVjFyTm9NenJBZ1M2czI3ZGY4eVJZbFMydDNic0w3eWlDeTdjdjFEeUs3dUFkakJmY0Q3K0lFNlBEUWJneDFqdUhFMHRHakE2YzQ4c3ZIWUNaekRueEQzdVlRNk1zdDYyemFjVGw2b3BlL2RGZTVOT3crYUlEemJwMlJoeWxZK3ZtVzg2Mjc0blpOdThlRHZlSDBOL0lGOXBMUUx6NTIyMjBrMHNuQ0M2MzgrdGd6VTZmam1NM09qRGxnTjcvR1UrZWZQaHlVNWdUbjdJOWVmZlRjb0VlaCtoZ2xhSzJ1aFcxOTEzdWRGblZHTm16Q242bjZiZmZhcXQwbHNjVTBYVjBCeGhObVdiZ2daY2xPTm1DQUlhMEZvR1RNVVpoWXhaS3BraUdKWkhXbVhZZjNtV1BkWDc5SU5oS21wMllvbDNac05pWGh5NVZkMkdETTJLbG5sL292QWhUY0pNbFFHS1BRMDNoMlpFdjRSQWhZbUFnYVJRNGlZSEJKRXdyU21hWmxESTVZT05idldtVnpZOTlDY25sUzYveGhhS1laTDcxdzVreGhham1YV1B5bGNkOGNMTGtwVjlycGxVbm1IbSt0RmRmZmRxMVoxamJYQmxvU1hmNHhaNWpXV2EzYUV0cHV2VW1abFIrbGNDa0xEVXFtNkozOVNlVm1aeWVWR2xZcEY3V1pwU2xwdVFwWEdHdS8yYlBrM2UybXBKd2I2SEQzMU94MmxxU0EzMXRhVnRiNklEcWEwZEtGb2ZjS25rVWVteElIS0w2N0xSNThYVXB0ZGdhTk9oYnFXYUw3WmRTNmVydHVQL1l3eGVPNUdJcjZsdDRwanZ0cVZKdDZtNjI1ODZMcmJsdzhXaXZyWEtDSmU2K3oyNGJGcXNBSHd0dlZMMFczQ3E0VVRtcjhLSjhkZnR3bnErNlplekVTRllNVmg0WXQ1cXBwUjJYdW01WUU0WWM2TWhnSld6eW1TaC9KZXpLY0daejNzdzBYd3p6elRqbnJQUE9QUGZzODg5QUJ5MzAwRVFYYmZUUlNDZXQ5TkpNTiszMDAxQkhMZlhVVkZkdDlkVllaNjMxMWx4MzdmWFhZSWN0OXRoa2wyMzIyV2lucmZiYWJMZnQ5dHR3eHkzMzNIVFhiZmZkZU9ldDk5NTg5eHZ0OTkrQUJ5NzQ0SVFYYnZqaGlDZXUrT0tNTis3NDQ1QkRIaEFBSWZrRUNRUUEvd0FzQUFBQUFQQUFnZ0FBQ1A4QS93a2NTTENnd1lNSUV5cGN5TENodzRjUUkwcWNTTEdpeFlzWU0ycmN5TEdqeDQ4Z1E0b2NTYktreVpNb1U2cGN5YktseTVjd1kyTE1kZ2VIb2g4NEUrVFp5Yk1udW5KM0hNZ2NTclRvUVFmZ3lvRkJsOGVmMDZkUW8wck44Mk1LVUtOWXM2SzBONFdwMUs5Z3crYlpCbWFWMXJOb016ckFnUzZzMjdkZjh5UllsUzJ0M2JzTDd5aUN5N2N2MUR5Szd1QWRqQmZjRDcrSUU2UERRYmd4MWp1SEUwdEdqQTZjNDhzdkhZQ1p6RG54RDN1WVE2TXN0NjJ6YWNUbDZvcGUvZEZlNU5PdythSUR6YnAyUmh5bFkrdm1XODYyNzRuWk51OGVEdmVIME4vSUY5cExRTHo1MjIyMGswc25DQzYzOCt0Z3pVNmZqbU0zT2pEbGdONy9HVStlZlBoeVU1Z1RuN0k5ZWZmVGNvRWVoK2hnbGFLMnVoVzE5MTN1ZEZuVkdObXpDbjZuNmJmZmFxdDBsc2NVMFhWMEJ4aE5tV2JnZ1pjbE9ObUNBSWEwRm9HVE1VWmhZK0J3cGtpR0paSFdtWFlmM21XUGRYNzlJTmhLbXAyWW9sME9jTmlYaHk1VmQyR0RNMktsbmwvb3ZBaFRjSk1sUUdLUFEwM2gyWkV2NFJBaFltQWdhVlNJVURJSjA0cVNXU2FsVEE2d0NGZHZXbVh6WTE5Q2J2blNhM3loR09hWWIvMWdaa3dXOXFYbVdXTHlsY2Q4YjdLVWpaZHV6WWxXblcrQm1XZExTc3JaV0pkdWJXUGxvQ1U1NEJkN2ptR1pIYU10Q1ZkY2FGUktsUUNsTE4zUkZ6cUwzdFdmVkdWeWVoS2FicFY2R1p0Um1wcVNvN3pWLzJiUGszZTZtdEplY0tIRDMxT0MybHJTbm54cGFWdGJvUHA2MG50dElyZEtIbjRhR3hLYllLbnE3TFFGMmNPWG05Um1leEN5cVdyckxVSFFTcVhydDkvQytoYU81R1licDF0NHBqdXRwV0Z0NnE2Mk5uNkY3cnpHbXVzV2ovamFtbWxZNC9icjdLaHV0U3F3c2ZDQzFldkJyb1libGJBTXU4cFhxQkZ2bVExYzIxUnNxNmZKYW13cXgyNU42REdqM0NvOE1xY0VoM1h2eVdhbUhDM0xqTHI4bGJRdzl5Z3pxVFhuZVhOVU5PZjg0YzVROWV6emdVQS9KZlRRN1pVOE05SlNncXd5MDBnNmJUTFVNMXI3bHNoVVUzaHAxaW55R1ZVZVhLZUk2bGY4aGkwZHJuMmFmYURTVW1HdGRuSlNmeFh3MjlQeFZUYmR0amtNRmFSNEo4cFhxRnR6OSsxYjNGOUJMTGh0ZkxsOStHb0p4OVh1NHFLdEd4YmZrSzhHN0hPUFYzNFoyaUZyemhyaFUyWHVPV0gxZm9YdDZKaEpIcGJocUErV1RlbFNiU042NjJrVkRaWEJ0THZ1dGIyNU44WTJXSGYzcmhYc3NWTXNQRkdnZjJYazhYYzFIaGJ1ekd1RktKblJwL1c3VkN0WGo5WFlVVzF6dFBZeVhhNzg3T0FYQmZxSTVlTWxjL2JwbjRXMjkrMFRWbWNDNU1lZlZUWTRHRy8vL3Z6MzcvLy9BQXlnQUFkSXdBSWE4SUFJVEtBQ0Y4akFCanJ3Z1JDTW9BUW5TTUVLV3ZDQ0dNemdQd0lDQUNINUJBa0VBUDhBTEFBQUFBRHdBSUlBQUFqL0FQOEpIRWl3b01HRENCTXFYTWl3b2NPSEVDTktuRWl4b3NXTEdETnEzTWl4bzhlUElFT0tIRW15cE1tVEtGT3FYTW15cGN1WE1HTml6SFlIaDZJZk9CUGsyY216SjdweWR4eklIRXEwNkVFSDRNcUJRWmZIbjlPblVLTkt6Zk5qQ2xDaldMT2l0RGVGcWRTdllNUG0yUVptbGRhemFETTZ3SUV1ck51M1gvTWtXSlV0cmQyN0MrOG9nc3UzTDlROGl1N2dIWXdYM0ErL2lCT2p3MEc0TWRZN2h4TkxSb3dPbk9QTEx4MkFtY3c1OFE5N21FT2pMTGV0czJuRTVlcUtYdjNSWHVUVHNQbWlBODI2ZGtZY3BXUHI1bHZPdHUrSjJUYnZIZzczaDlEZnlCZmFTMEM4K2R0dHRKTkxKd2d1dC9QcllNMU9uNDVqTnpvdzVZRGUveGxQbm56NGNsT1lFNSt5UFhuMzAzS0JIb2ZvWUpXaXRyb1Z0ZmRkN25SWjFSalpzd3ArcCttMzMycXJkSmJIRk5GMWRBY1lUWmxtNElHWEpUalpnZ0NHdEJhQmt6RkdZV1BnY0taSWhpV1IxcGwySDk1bGozVisvU0RZU3BxZG1LSmREbkRZbDRjdVZYZGhnek5pcFo1ZjZMd0lVM0NUSlVCaWowTk40ZG1STCtFUUlXSmdJR2xVaUZBeUNkT0trbGttcFV3T3NBaFhiMXBsODJOZlFtNzUwbXQ4b1JqbW1HLzlZR1pNRnZhbDVsbGk4cFhIZkcreWxJMlhiczJKVnAxdmdabG5TMHJLMlZpWGJtMWo1YUFsT2VBWGU0NWhtUjJqTFFsWFhHaFVTcFVBcFN6ZDBSYzZpOTdWbjFSbGNub1NtbTZWZWhtYlVacWFrcU84MWY5bXo1TjN1cHJTWG5DaHc5OVRndHBhMHA1OGFXbGJXNkQ2ZXRKN2JTSzNTaDUrR2hzU20yQ3A2dXkwQmRuRGw1dlVabnNRc3FscTZ5MUIwRXFsNjdmZnd2b1dqdVJtRzZkYmVLWTdyYVZoYmVxdXRqWitoZTY4eHByckZvLzQycHBwV09QMjYreW9iclVxc0xId2d0WHJ3YTZHRzVXd0RMdktWNmdSYjVrTlhOdFViS3VueVdwc0tzZHVUZWd4bzl3cVBES25CSWQxNzhsbXBod3R5NHk2L0pXME1QY29NNmsxNTNselZEVG4vT0hPVVBYczg0RkFQeVgwME8yVlBEUFNVb0tzTXROSU9tMHkxRFBxQzViSVZGTjRhZFlwOGhsVkhseW5pT3BYL0lZdFhhRjltbjJnMGxKaHJYWnlVbjhWOE52VDhWVTIzYmFOTFJXa2VDZi9WN1JUYy9mdFc5eGZRU3k0YlY1SDVmYmhxK0hxVnEyTTIvWnZXSHhIdmhxd3o3VnJPV2FPaDd3NWE0UlBwZm5ualRrY0ZiYWtZN1p1MnFsalZ1OVgyNHpldWwxL1A0WDY3SU5sODdxOXVEZTJlbGpiSE4yN1VhWkhWZXp3ZDRYK2xaSEkzNVZ3d1JRM0h4T2lmUmtzdlZhVHZ3Vkc5TmU3OUx4YlAzRGYvVXE2STViQTNlTy9KR2xmd2FkdjFPOWZ1bDlVNTMwbElMejhwMDQySXY1REZnOThhdnh6U1RiMEpoc0FCcEI4QkxSVFlBNm9Fa0IxWmh0VHVCOEROVUlrMkd6akIrS1IzUVExUXIvWVhCQW5JTVFKVTNZU3VBMCtwSGJOQVpzSko2SWo3RXhsaFJSeGdQK0dvMElZVGdTRnNhbWhEU1ZpajkzUmNJY1d3WTBMVTNVSVJJbGtBNGNYS3VKRkhOREJIQ29SSTB4TUhHZUkrRVNLWkdNVkNVd01GYXRZa2JYTThDMWI1S0pGNm5PZkpJcnhJOWxJQ2hoK3NJMG5BZXlNSnJGSGVlWTRIdkhCOFk1NHpLTWU5OGhIaEFRRUFDSDVCQWtFQVA4QUxBQUFBQUR3QUlJQUFBai9BUDhKSEVpd29NR0RDQk1xWE1pd29jT0hFQ05LbkVpeG9zV0xHRE5xM01peG84ZVBJRU9LSEVteXBNbVRLRk9xWE1teXBjdVhNR05pekhZSGg2SWZPQlBrMmNteko3cHlkeHpJSEVxMDZFRUg0TXFCUVpmSG45T25VS05LemZOakNsQ2pXTE9pdERlRnFkU3ZZTVBtMlFabWxkYXphRE02d0lFdXJOdTNYL01rV0pVdHJkMjdDKzhvZ3N1M0w5UThpdTdnSFl3WDNBKy9pQk9qdzBHNE1kWTdoeE5MUm93T25PUExMeDJBbWN3NThROTdtRU9qTExldHMybkU1ZXFLWHYzUlh1VFRzUG1pQTgyNmRrWWNwV1ByNWx2T3R1K0oyVGJ2SGc3M2g5RGZ5QmZhUzBDOCtkdHR0Sk5MSndndXQvUHJZTTFPbjQ1ak56b3c1WURlL3hsUG5uejRjbE9ZRTUreVBYbjMwM0tCSG9mb1lKV2l0cm9WdGZkZDduUloxUmpac3dwK3ArbTMzMnFyZEpiSEZORjFkQWNZVFpsbTRJR1hKVGpaZ2dDR3RCYUJrekZHWVdQZ2NLWkloaVdSMXBsMkg5NWxqM1YrL1NEWVNwcWRtS0pkRG5EWWw0Y3VWWGRoZ3pOaXBaNWY2THdJVTNDVEpVQmlqME5ONGRtUkwrRVFJV0pnSUdsVWlGQXlDZE9La2xrbXBVd09zQWhYYjFwbDgyTmZRbTc1MG10OG9Sam1tRy85WUdaTUZ2YWw1bGxpOHBYSGZHK3lsSTJYYnMySlZwMXZnWmxuUzBySzJWaVhibTFqNWFBbE9lQVhlNDVobVIyakxRbFhYR2hVU3BVQXBTemQwUmM2aTk3Vm4xUmxjbm9TbW02VmVobWJVWnFha3FPODFmOW16NU4zdXByU1huQ2h3OTlUZ3RwYTBwNThhV2xiVzZENmV0SjdiU0szU2g1K0doc1NtMkNwNnV5MEJkbkRsNXZVWm5zUXNxbHE2eTFCMEVxbDY3ZmZ3dm9XanVSbUc2ZGJlS1k3cmFWaGJlcXV0aloraGU2OHhwcnJGby80MnBwcFdPUDI2K3lvYnJVcXNMSHdndFhyd2E2R0c1V3dETHZLVjZnUmI1a05YTnRVYkt1bnlXcHNLc2R1VGVneG85d3FQREtuQklkMTc4bG1waHd0eTR5Ni9KVzBNUGNvTTZrMTUzbHpWRFRuL09IT1VQWHM4NEZBUHlYMDBPMlZQRFBTVW9Lc010TklPbTB5MURQcUM1YklWRk40YWRZcDhobFZIbHluaU9wWC9JWXRYYUY5bW4yZzBsSmhyWFp5VW44VjhOdlQ4VlUyM2JhTkxSV2tlQ2YvVjdSVGMvZnRXOXhmUVN5NGJWNUg1ZmJocStIcVZxMk0yL1p2V0h4SHZocXd6N1ZyT1dhT2g3dzVhNFJQcGZubmpUa2NGYmFrWTdadTJxbGpWdTlYMjR6ZTJDcGd5QjcyMzAraGp0bXMva0FuZURhdjJ4c2FvUDR3Sy9qcVlXMXo5RmtKKzFQNTI2WkhWV3hqYlBzREJzVkloLzZWa1lSWkc2L3RVRGNmMXZWNFNacjgzVkFqMnBmQmFKbi9lTE5VVC80VytXZmRrVGhZejNNdGZsZy9ZTi9TS3ZjREMrVE1CanpFSkFCOUxzSGRWL0xITmZkaGJIa295WWJlNE1LK3R5SHZTekxSa1dTNEo3ak85U1VCRUF5SkJEa1R1OGhOOEMwaldvbUpKdU83eUJFUE1kdElqVW15d1piT2JNTndoeHZoWkg3aXY0cGtZNFV5SXAwT3p5OFVHSStBdzRPY2dSL2pYc2pDS1lRd0lkbWdYUUFSczdMUEVRazIyL2lCZU1BM0VIc2s1UWRQaW8wU1A0ZEVMT0xrakdqY3hrNnVnOFBXQ1VTQjJORk5DOTE0RUEzR0VUdkdvYU5DSEJDOU81cG1DajEwSXh6OTJKZHRqRkdQMVFvZUlSSFRQMFJHQkRlTDNHRWJIY21RSDBiU0x6R2twRVVjVU1aTFBpV0dnZFJrUWpnNXhUanlVSlFiaWVJSnJ3T0dTYUlTSTJ2cEkyd1NnSU5RdnBJaTlibVBkOHJDeFZ0K0pCdEpBY01QMUdpblBIeW5IT0RvcFMrM1VwNW1qa2VaeTR5bU5LZEp6V3BhczNVQkFRQWgrUVFKQkFEL0FDd0FBQUFBOEFDQ0FBQUkvd0QvQ1J4SXNLREJnd2dUS2x6SXNLSERoeEFqU3B4SXNhTEZpeGd6YXR6SXNhUEhqeUJEaWh4SnNxVEpreWhUcWx6SnNxWExsekJqWXN4MkI0ZWlIemdUNU5uSnN5ZTZjbmNjeUJ4S3RPaEJCK0RLZ1VHWHg1L1RwMUNqU3Mzell3cFFvMWl6b3JRM2hhblVyMkRENXRrR1pwWFdzMmd6T3NDQkxxemJ0MS96SkZpVkxhM2R1d3Z2S0lMTHR5L1VQSXJ1NEIyTUY5d1B2NGdUbzhOQnVESFdPNGNUUzBhTURwemp5eThkZ0puTU9mRVBlNWhEb3l5M3JiTnB4T1hxaWw3OTBWN2swN0Q1b2dQTnVuWkdIS1ZqNitaYnpyYnZpZGsyN3g0Tzk0ZlEzOGdYMmt0QXZQbmJiYlNUU3ljSUxyZno2MkROVHArT1l6YzZNT1dBM3Y4WlQ1NTgrSEpUbUJPZnNqMTU5OU55Z1I2SDZHQ1ZvcmE2RmJYM1hlNTBXZFVZMmJNS2ZxZnB0OTlxcTNTV3h4VFJkWFFIR0UyWlp1Q0JseVU0MllJQWhyUVdnWk14Um1GajRIQ21TSVlsa2RhWmRoL2VaWTkxZnYwZzJFcWFuWmlpWFE1dzJKZUhMbFYzWVlNellxV2VYK2k4Q0ZOd2t5VkFZbzlEVGVIWmtTL2hFQ0ZpWUNCcFZJaFFNZ25UaXBKWkpxVk1EckFJVjI5YVpmTmpYMEp1K2RKcmZLRVk1cGh2L1dCbVRCYjJwZVpaWXZLVngzeHZzcFNObDI3TmlWYWRiNEdaWjB0S3l0bFlsMjV0WStXZ0pUbmdGM3VPWVprZG95MEpWMXhvVkVxVkFLVXMzZEVYT292ZTFaOVVaWEo2RXBwdWxYb1ptMUdhbXBLanZOWC9acytUZDdxYTBsNXdvY1BmVTRMYVd0S2VmR2xwVzF1ZytuclNlMjBpdDBvZWZob2JFcHRncWVyc3RBWFp3NWViMUdaN0VMS3BhdXN0UWRCS3BldTMzOEw2Rm83a1podW5XM2ltTzYybFlXM3FyclkyZm9YdXZNYWE2eGFQK05xYWFWamo5dXZzcUc2MUtyQ3g4SUxWNjhHdWhodVZzQXk3eWxlb0VXK1pEVnpiVkd5cnA4bHlxcFMwN25MczFvU0RPaENoSXUyNnk2M0NuTUtMWWI4RWgzV3ZtU0pEdFUxcTg4WWNMYVVPKzROT3M5VHEvQlhJUGE0TFZwRGtDazNxb05uVUM1YkIyU29kRmRFcFN2MFZ0dHBhL1JUVkZBSnJKNzhEdzhYMWdianlSWEsyS3cvOVpzM1BVZXdxMi9hKzJiTlVNMU1MdDFRTHoyaTBXL0tTLzZzdldHZW42RFZmWS90NnFaUmFSd1UxdVh4R2xZZVVKdmUxVGNyZW92b1YyUHRaSGxiZTN4YmFaOUZBQ3B5MlZJRzNON2pZQXQ4ZFZjQVVKZzRWMXYzeWhYbHlkeno1VnEwSGF4NFZwQWZPSFJYbjdyck8rbmFqSCsyMnRxby92Ti9wYndFOWIrTlJsZjZiN2xkci9FL1pZbEZ1Vy9GeHpUN3Z2Mkh4amh5aWZZa2ZNZk5mVFM1ZHdva2VueTcyWVVrdjJ0NmZXeTlROG45cGp4bjVmUFZ0L3orK2N3cnNXRU05dGYxUElQVDdpdk1hdzcydnlLOWlUcE9LK2xhRFB3bTZEMlo5R2FCam1vYWFBeGFFZzN5cDIyRFk1NWJoZWZBZkNaUmc0YkxpdXFtZDBDQUJkRXF4R3BOQ3dMM1FJQldFaXBFSUk2bFBYYkJpSkh6YUQvOWYwa015M2ZBbzBQdks0clJTUkxNZEVTSGdld3NZaHFpU095UVJMRHQ4NGtHQ0NKWWZVUEVrcTdoaStyeDNSQkQySlFGa1pFa0xwYkpBTFRieE9TczBTVFlLR0Q0dE1xU0dMSXVKamlTelJEc2VCSDc5aStOSDVzaVpHZnB4SVhRRTNCY3hZcUxKUU9lUURRRlVZbTYyU0lsa2d5MmQyUWJFSUtrUVFrN21KNVdNWkNObHhFbUhlUEpDZ2ZFSU9BQTVtVGFXOG9NeFROUVVCSG1RYkt3Q0RHTDBpd2hmbVJBaXdXWWJQeENQL2doaWo2VDh3SGF3Y1NVdi85Z2NZT0xrbWMvY3hrNnVzOGxsUG1TTjJJbk5JNjFKa1QxbUV6dkc0YVpGSEJETGIwcG1DcUVVcDBDd2FVNitiRU9aNm15SVBTTFlUc1I0TVo0Y3dVMDlQMWxpVFh6T2hKMzF2SmsvTmNUS2Zkb01ad01WaVFNVWtVdnNnREtoY2x4Rklva0RobjVDbENScktTZG5Fb0NEZEY0VUkvVzVqM2ZLTXN5UHJpUWJTUUhERDZScHB6eDhweHpnS0tsSmlXS1A4dGgwUERLZHFVNTN5dE9lK3ZTblFNVk1RQUFBSWZrRUNRUUEvd0FzQUFBQUFQQUFnZ0FBQ1A4QS93a2NTTENnd1lNSUV5cGN5TENodzRjUUkwcWNTTEdpeFlzWU0ycmN5TEdqeDQ4Z1E0b2NTYktreVpNb1U2cGN5YktseTVjd1kyTE1kZ2VIb2g4NEUrVFp5Yk1udW5KM0hNZ2NTclRvUVFmZ3lvRkJsOGVmMDZkUW8wck44Mk1LVUtOWXM2SzBONFdwMUs5Z3crYlpCbWFWMXJOb016ckFnUzZzMjdkZjh5UllsUzJ0M2JzTDd5aUN5N2N2MUR5Szd1QWRqQmZjRDcrSUU2UERRYmd4MWp1SEUwdEdqQTZjNDhzdkhZQ1p6RG54RDN1WVE2TXN0NjJ6YWNUbDZvcGUvZEZlNU5PdythSUR6YnAyUmh5bFkrdm1XODYyNzRuWk51OGVEdmVIME4vSUY5cExRTHo1MjIyMGswc25DQzYzOCt0Z3phNTBvSHE2U0J5NzBZSC9LUWYwanZuejU4bVhtOEtjK0JTVnEvS0E4ZjRkdGx5Z3h5RTZXS1dvclc1Rm96M0ZHSDBlbFhOYVdkMWRaTThxL3AwR1lFa0dQZ1VkZ1J5dDBsa2VVMFRYMFIxZ05HWGFneUxGRjFVQ0ZHcGs0V1FZSmdqU1dnMU9OaUJJOW5nWTFYc2xXZ1FPWjRxb1NCSnBuV25uVVRiV1NTVllqUlBaRTJSZlB3eXBrbVk5ZnZUYVYram9TT1JDRHJUWTE0c3RWWWVpaGhudDlkWjhVejdVbmwvb0tQbFNjSk1sSUNWRlUvVGxZNWdLdFluWUQydTJoSU9NZm9HSjBZMTliWk1mbkFmeG1XZWRMaGtwbVdVS0h2a1dpWUFlcGFoYnZXbVZ6Wmg5bVVrUnBYemw4V2VqQWowSjE1dFpUZXJYRHhoRjZOYzJpSEk2MElsdTNpVXFYSnBlLzNRSG5uQk5xT3BBUVBvRktscXZRb29ScHM5eHFhcWNmTzJhbGdPUFNraG9RNnoybGVxdC96amdGNDJOR1pyZFJibnFDaTFCd2hVWG1xQWpZdVJsWDlSdWUwZGZVWXBtS2xTV1NwUU5yVzZwdWUxQW5vYlZybU9ZNmxsUnZXN2R5Nm0wdk5VVzQxT3hXblN1WDVITys4KzRicUhqbTZrSjcwdm1zbUZtKzlhenJMV1Zya1hOZnFxd1FPQjUrMXQ4eGtaa3BWdWtmdndQc0YvNWUrdTZ6MjBLclQxOHBheXl4WEJGUEcvSWI3bXNLc3p4cWl3UXkxRTVMTFFEOE5wN05GOVlLc3p3bDBMLzB6RllNcytjOUZkK1J0MXRXSXlxekM5WVRTdDhzbFJoUTN1d2JGRkh5NWV3MEJMOUZjWUtnd3VXMFI5UEhaYk5RZ010bGI3Ylp2OHpkbHhzejdzMVdEcERxemRZSUVidDlsTndxNHF6VzFtbi9ROWZGRTlKYk02Uy81Tk5yUjhqM1dmbG5KNTk5OGRQKzVxNTZJZ3JqSHJEbVlPTStieGZmMVh5eDRkRFZUYWdxM1BkdWtDMVArWHpsSC9MdnZzL3ZUdjFlNDEyZzRWMzVzWDdjenlGai9jN1BQRndQVTlnODA4dHozejF0MFlQVnNIRE4yKzlkNldIVmU3dVBDc2QrcW1nejV0N1ZMZlh1SGhVczZmOVBsU0ZFNW44VjlydkRyQmJpWnVTOThBeXZvK0pERTdZYzBvQXAvZVBaQkVNVUo3anl6YmE1elc0Qkk0K3NTTWJBdzF5dVd0TmFYOVNvZHNHQjVLKzFCRnBnQzBiWVVIdTl4UVJVaWlCL3VDYkNpZG53UnJOcWkvZ20yR240SEkrNzh3UGZ6b3NTUFAvWERpZEVqYU1ncEpqSWVNSWhFS3BORTZIRG56S0FwR1R3YWowTDRqbGkwb09rV05Fc1Z4d2huSURTdzl0ZzZ4cEJSRWhUWFJLNUpBek9NZ2hjWGhaak1vVVZ3TkNxZFF2aUVwMHloWlhVOGErZE8yTUNQbWhQNjZJbVNwR3BZQWpyT05UN2ppWUxvWmxqb0FrU1BDZ3NzYlE1SkdTYnh4aEFnbUpGNytoSnBJTThTVFRSTk5HMW9HU0lZcFVJeUtKQWtQam5iSWhndlRIeGdpVFNxaEE4cFVFdWFSVDVEVVlhNkVyazJjc0pWakFBTXlWK0xKU3VIUklIL2tpdzZ3Y2t5KzNUR1pCd3VnV1lxTGxEbEg4Q2krbDJSQmhLcStZSkZsRk5xVmlLMjQyUkpSKy9HSkxXcmxJYzBMa21jOVpwVWl5WWNpdmpOR2RDcWtsRUdPaS95WEpOQk9mQzRrajErUzVFWHB5WnBZQWZVZzlwWktqbGZCb011Vk02RU42aFpodHBNWWsyV0JMWjFBbFVlQXNOSVFYRFVrMkh0cWtqbnIwUW9IeENEZ0VxaTJUVW9TaUVKMENRWEcxQ2pDTTgwb3V0UWlhWUxPTkg1U25hZ2F4UjFKK2NEWE9NREtuREdFcFJISEMxS1p1WXlmWGVTSlNJOEpPN0pnbW9sTzEwVTJ0YWhyalpIVWpEb2dsVnlVekJYQis5U0JWSFN2a2pucFdpZGhqa21wRmtsbmJxaERjeEhVeWxhSHJTRVo2MTFQbFQ2OGZjWUJTNDJyUnVRSldQNHJZcW5OK1l0akR1bXNWSDlVTkdLVHEySk9zUmF5Y1NRQU9HbHRaamV5blArRXBDMUE3SzVOc0pBVU1QM2hxcHZJZ25uS0FZN1NrUllzOTBFTmI4eERBTnJhNHphMXVkOHZiM3ZwMmVnRUJBQ0g1QkFrRUFQOEFMQUFBQUFEd0FJSUFBQWovQVA4SkhFaXdvTUdEQ0JNcVhNaXdvY09IRUNOS25FaXhvc1dMR0ROcTNNaXhvOGVQSUVPS0hFbXlwTW1US0ZPcVhNbXlwY3VYTUdOaXpIWUhoNklmT0JQazJjbXpKN3B5ZHh6SWpIbG4xUlNjUDNvcTVWa082SjFzUTFFNkFGY09ETG84L3JKcTNjcTFhNTRmVTRCR0xXa1BoMVdzWGRPbTNmbHoxVmlROXFaY1ZVdTNydFk4MjhDNGZic3gyeW93Mit3S1Z2dDFsVkMrRmgzZ1FEZTRjZDA4Q1ZaQlJVd1JuS0xBampOei9ZcGpNbVdIZHhScEhrMVkwWjNQRHVNeUpzMzZyaUo3cUJXQys5RzZObGQwT0dJam5JM1dkdTA4WUdEckhuaUh0dS9qV2RHQkd5NFFYQUxreUlGNy91d0FEUFRyL240SXAyNGMrL0c5bjh0aC8vWU92ZHowcU5uSzlTWmZlOXY1c2ZhNnM0ZU9idnRRZTgvbit3YlBGOGQ0L2RlVkV4VU9BUHFXQUdYWldGY2dlVDhjNWxLQ0M5cDJHbC80UmNqZU52YXA1RUIrRnBLbUNHTGcvTmNoZHZ5aFpJK0lJemJtWG4vMGdkSFVIVERHS0dOVDVVekJJWFJUcUhRaWRwRDk0R0k1cThnNFl6bUtyR1pYYm04UmFCdGtRRG40a0FPckZBbmRoeWZkZ1NKcjJ5Z1NwRVFPM0ZHT1Rtb2QrRlk1dHVuMUhrWDJyR0prYlZTU1pLVnZ3SlZZa1Y4S2JqVmhWS3UwbHNjVUdXNTBCeGpyZVVqU2pyWGg1dVJHY2FFRnhsdDVrcmJubVIwcHR1Wm9TTUoxcFdNL0xEZFNOamlVY3loTTRMQ21DS1FoaWRlYW5CcGxjNmxnZVpqRzNFZUVadi8ydzUwcFZYZnFSL0psQnNhbnIyYmt3S1NEVmRwU2lJNzJlWkZvbzZGRGE2OGMzVGlZc2pKQk9Gb0NwRW8wQldsZ1ZNdHNSZGZLcXExS09BUTYyS0laaGFwWkhxaHVpNUc1am1WTDRhcDBhV3BSckNvYXErNUZEc0RibFlBSU9pdllzaFA1YTFkOTkzcVVxMTNwb2lld1dqOWdSR1ptMUJiY1VhT05KVHhXTmd0dnhpdEVkNGhiRnpyZlNneVJxbzVaL0JiR2d2RnJVY1pwWVNneVI5ME9aakpmK2RhMW9rVVVOMmJ2eXhNNTRGaU8yOUxMMWN3TGtWd3l6eHZWYVZmRDk3TExsWmdXSWR0WW0waGZkRWRqSUV2OE1GY0FSNVNOeDJHR1hEVkRCNnZWTmJQT2ttdFIyWVR0UFBhVGpha3NzVDI5NWJIeFExYzdKdmZiRkVuLy9YSFZXKzg5RWR0cG9jUDNSVWJiSlMvUGpHV05jMlpFSDU2UWtrdS92UXE2R0FGTEY5T1NVOFN5Vm1kMzd0RFdnbTF6dCtnSzJUTVk1Nmg3cmU5V2dyZk9FT1YxaFM1N1FxVGJCZlh0RG4zdWorRzhQd2wyV3JZSFQ1RFBnZ2xydkVKKzI2WDI4Z3JsVE5mcDBQOUR0NHJVVjY5MG1OVXZSSGhYeW5kdmtPWmNoUysrUUhrL2UzNUN5TnZsZHZXK2E3WDQrZ1E1clJidzlBOGtmVjJzNXo5UTdtbDVIdjJ5UVQ2dnZFOTgyMHRMN01RSFFMcFF6WDhEOGQzOHpwYzR1NWdPZ2dZWmpOaHVGN09VWWJBZzJTZ2RCQjB3UEs3YzdJUG9FMHovenRlOHVpelFmK2x6SUF3ZGd6OFVDb1IyYW5uaDhyNDNOQnNTcElIbHkxOE0vM1hud3gvK0szOEY3RXJremdkRU85RnZmNXNyb2hIdFVqelpWWkNLVXZ6ZkVabUlxU3hxRVl2aXV5SmQ3T1pGZ1RRUmRDejhXUmx2dU1YcURkRm1HNlRmRzhFbnZ2aGxaWWxDOUdEMW9NaXdOUTZrZlRLRW5oanBVa1VVcXJCNlorVEtBOWVvcnp4QWo0UXFpaU1FZWVpUEEvS05rbG94WHhrN3FCWTg4b3lQaGZPalFYQ1lsa1dLYnBCbUUyVkI1bmliNENWeUt3SlU1VDhHWTBtZWRhd3haSlFsUVNnSnROYlowUjg2WE9NcmE5ZzVVdExGY2Jva3ptQW0rRFpVcG9XWnVueWRLY2VHeWF5c01Kbi9hS0ZYc2xjd1k3WU5td2F4bjFwNitiYWFOWWFjNEJTSU03VnlRYjRsa0M0blRPZEF0Tm1WYVVvTWxHbnhaQmxacWYreHNabHpNTHVUSjBIaWQ4MkNWVE1yaGRRbFByZWlUOHA0VXkzMkZHZ1MyY25OMlBDelpaSlU1U3V0S1RJQ1ppYVk4dlJvc0NUMnptTUtsQ0VMWldkQytiSlJKNTUwSVhaRTVxdFNxc2lYTXVTaVQ4dm9TNFEyTUoxaXM2UUI5T2xLZUFwR215N2tuNEtKSldLSVdwZUlHclYrdWhLcVNkNEVNYW1DRTZocCtZRlZSYktLMTVtd2xrLzloMGdia3dDd29xU2xQUXpyUTVpcWxtMnN0Q1RaT09oVzBLbFdsSTRHcENZaDFtaVVXdGVGMExNdUNYaXJSK0xLR3BuMjFTRnkxY3FvVm1JcTByanNzRjc3NVZhMllSNlRjR3FpTm9NbVpJdVdXSzM4WktzS1NZOVg2OUxRellxMXM2NFJiRU1zOHgzVHprbXlMWnVDYWtINGw5RzFKcysxRnBHV2JiYnhBNmR3MHg1VVNjcDFTb3RiZ3Z5MU5ieEZpbkovc0kyZHNFZXp4WVVJV2xQa21NZEdkMTIycGU3U0tucmRobXhJdTdhWkFtaTdPMFh3YW1ZYnhDVnY2akJyWHExb1ZiMGg4VTk3UHdaZCtHWWtQZlB0Q21YdGF4SUhITGREbEIwdmZ4M2kzK3hpNTdNRFhvbGZVRnNiTU5RM3dTVlJER3luMVJrSVJ3VktVa0lPT3ZUQ1hRc3JtQ3BnWUc0Sjc1S0hEWmNESEIzMmNGVHNJYVFXcDFqRk1JNnhqR2RNNHhyYkdJVUJBUUFoK1FRSkJBRC9BQ3dBQUFBQThBQ0NBQUFJL3dEL0NSeElzS0RCZ3dnVEtseklzS0hEaHhBalNweElzYUxGaXhnemF0eklzYVBIanlCRGloeEpzcVRKa3loVHFsekpzcVhMbHpCallzeDJCNGVpSHpnVDVObkpzeWU2Y25jY3lJeDVaOVVVbkQ5Nkt1VlpEdWlkYkVOUk9nQlhEZ3k2UFA2eWF0M0t0V3VlSDFPQVJpMXBENGRWckYzVHB0MzVjOVZZa1BhbVhGVkx0NjdXUE52QXVIMjdNZHNxTU52c0NsYWJSeTlVdmhZZDRFQTN1SEhkUEFsV0hVWThFWnlpd0k0emM4MmpDQnpsaUhjVWFSNU5XTkdkenc3ak1pYk5XaXM2SEpOUkh3VDNvN1Z0cnE5bEk2U045cmJ0YlZOaTY3NVQyN2Z4ck9nODZ4WUlMc0h4NDl2S0NVZnNBTXp6Ni81KzJKUHRvRGgyNDl2MlV2OHVoL243YyttSXM1WHJiZDY0ZHI3MnZMZC9qbTc3V0h2TzUxK1BQaFpIZWYzWGxSTVZEZ0NhOTROUU1HVmpYWUVHSXVpU2dneWF0NDF5TGVFWFlYdmIyTWVTQS9sZCtKMkFMSUh6bjRmWWlaZVNQU09TK0J3WTA1RkU0SEhvZ05IVUhUVFdhR05UNVV6UjRYTlRxSVFpZHBEOUlHTTVxOWg0WXptS3JHWmNBZzZXOUtKdGtBSFZwRU1PckpMa2M0cWdkRWVLckcyalNKRVNPWEJIT1RyNXhxUko1ZHhtbUViMnJLS2tiVm1XdEtWdmhabG9rVjhMdHJaTml4MnQwbG9lVTJqWTBSMWdzRWRhbkNMOWFOdHJVN0k1aGFHWkpjQ25SbjZTQnVpa0d5bjI1bWc0Sk1xbFl6OVFHRkkyajdJbUtVamdzS1lJcGgrUjE1cWRmWDMvS2hobnA1MUVLcVNESmZDUm9wbjlVS3RLMWIzNmtYeVpnZEdvU1E2SU5ocWlHam13NldDZHZpU2lwWUptcEt4bTZQemEwcHlhZ2FqUmpvTmxLeE9FbzUycTBSU2tzU2hUZDZPSmFoRzZ2YktxRWc2NDJnV0dScWxxbGdlc01NSHIyRGJIUnBTdlkrcSt4YXRqN2s1MDhHQVpJcFptcEJjNUlHdGEzdktWRGJpQ2FVc1J4bmJWOTltMGp2VllFYkYyOFR2V3hhQmk5TEJqNW42MnNGMGFQMVJwWXlhL2hmS3NBVDkwUjcxcW9TT3ZUQy9UMWZKRDJVek1WYzBXYzh4VnhSdG4xdkJ5L3dTdEZ0TU4rU3NZMHRSTnZPZEZNemRXclc1U2R3VXdSQTZFREhWQllXUE5VTkdacVkzWXdJSXh5MUNlZHYxd3RrRndiNlhyUmRjTy95YjMzU3NMOWpWQ2R6VG04OTBHQmE1VnpCRmx3M05YUXlQK0Q5MTEyZDBReVdveGpqaTQ5MTZFT1dHRDM4MzJZSm9UVlBaZ1ZFc2VkVzk1NU94UTRZNmxMam5zY1RQVU4xM29xSTdReXJKRDlIbGF1ZXR1ME8xMHVUNjZYUWtML3c5amgxdlU5ZFhLRitRNDZnbzlXWG4wQnEyeUwwYlAwbVU1OWdNcHJ0WTJDaW5OVmVuZ1Z5UStYV09uTDlEeGRTVWY5V0RmdTU4Ui9IYjFydno2WFhWdWtQVjBRWi85SXNLL3RPeHRnUC9BWDFySWR4RHp1UWFCR1hIQTQ4NEhRWUVRTHkwSk81MWRvbFhCaWx4UUxmNkRvRDM4bHIzQnVLNkRDN0hIQkxYU3ZnNTJEemNHb1p3QlVUZ3l4M0N3ZzFhalM3VmV1SlViMGxCbmpna2VEZjlIQ0wyQmFMQXVvZnRoK1JDbXhIOFl6Ui9NeWh2d21naVI1MTJ2aVIvVUcwRUtxSlVRVWxFaDJlRGhacEtJUUFDcWhTQXk3SXIrdmhnK3gvd05oYlJENGtBY21CWDVzWEVnQ2h6ZkNRYzRQZVFOWkRBL28ySU82N0pHQ05MUkh5REtobUFZZUVlRVNMQXhXMk5qRnJVaXNqaXFwWDZOTE1na2w5WklMbWJGY3BaTXl4c3pHVXJja1ZJd2xqT2pHak41a045MXhXMFFMQ1ZYR09oSmYvaVFsYktjSVNzbm1BZUIxRktBVkJUajBWajVEMTc2TW1QRUhJZ1Z2WmRNWS83amw4bE00Qk1YMTh5bEtNVnkwRXhtTGJXQ3lXZ3FKSnVzek9OYTl1ak5ZOElzbVp2Y2lzakt5UkJWVWhDWC93cGtPWE9wbFZ0KzhaQmFnU1U3NlpuL2xVSjJjSm1YWk9kRGpxaVdVZjVRbkdrQnBrRC9XTGRNYmpNckJsMm9RWXpXeXpzK2ttSHlYS2dyczBMR0NtNjBoeEo5eUNCZnlVYUFUakdrRG5IblZpS0tRSVIyUmFFby9RYy8vU0ZFSlQ3VUgxNk1xVUlHMDFIMzdhd3hyZE9wUXo2NlRocmlzNTlDZFVndGE5cEJsWGFsZVVsZHlFejlZY2YwdVpRclZZMHFRWjdJVXV4OWxKdGFkVWc2ZzFwQnA0NHhyQTJSWWxxS2FqK0ptUTJ0YTN0aUMrMlh4dkZsVkt2cGhDSUNUWm9XZmFKMXFtUk5uMXNiYzBDNE5nU2YzVlRlVjZscFdJZndkU3QrUlkxWnVkTFZ4aEpFbUZtWnErNm15c0s3R3ZhaGlSVWRacmZpVDh2aWNiUzJWRjVkZTJiYWlEeVdoVERseTAyekV0dlcvd3JrcUZBOTIyc3BhMXZRc015ekx3a2I4SURiMnRYMmo3Z3JFVzVDZXh1bWFXWWxwNGhSYmxjcXkxeThGUXU1SnVIV2I2czdFZU4yNVFmWUhja3FuTXZDbm5MM0lHR01sSGxWTXR0OG5wY2kwdDNLTm1wTGttd3NsaXRzZlc4VlIxTmFrb0JNTTlEVjcwUHl5cFVFMExjajltVk5iZ1Vza2Z1dU5Md1VjUlZwbnNaZ2l0eE1NOUdCc0VPeXNSZzlaYlhDYTNQd1ZuNmk0WVNvaDd4cWlTeUkwU3ZpcmRES0k1WXhqb3BYak42anNtOEtCNWJlWDFCY0YzdlNlQ0xrdXMwMmZ1QVVjdHFES2ttNXpveC9uQkFDT3cwcFVNYkpObmJTbmc4em1ZQXErZzZGcjd5Ui8yYjVOZ2ZpOGtjNDlPWGJCRWZNSVdsdm1UTzdaRFEveEdjZXFGMXpka3JzNW9YNFI4NTFTVTZkYmFYbUF2Rm56eWxKRnA0eml4NUFyeVJaUEw0T2lRMzlFciswV0UxV1p2UkpGR05qVThGRzB0U3hVcHdGRTZOVmtCUFRNY2tHVmNEd2d5a1BoaTB5QXNlblFlMHlJN2w2MWF5T3RheG5UZXRhMi9yV1lnNElBQ0g1QkFrRUFQOEFMQUFBQUFEd0FJSUFBQWovQVA4SkhFaXdvTUdEQ0JNcVhNaXdvY09IRUNOS25FaXhvc1dMR0ROcTNNaXhvOGVQSUVPS0hFbXlwTW1US0ZPcVhNbXlwY3VYTUdOaXpIWUhoNklmT0JQazJjbXpKN3B5ZHh6SWpIbG4xUlNjUDNvcTVWa082SjFzUTFFNkFGY09ETG84L3JKcTNjcTFhNTRmVTRCR0xXa1BoMVdzWGRPbTNmbHoxVmlROXFaY1ZVdTNydFk4MjhDNGZic3gyeW93Mit3S1ZwdEhMMVMrRmgzZ1FEZTRjZDA4Q1ZZZFJqd1JuS0xBampOenphTUlIT1dJZHhScEhrMVkwWjNQRHVNeUpzMWFLem9jazFFZkJQZWp0VzJ1cjJVanBJMzJ0dTF0VTJMcnZsUGJ0L0dzNkR6ckZnZ3V3ZkhqMjhvSlIrd0F6UFByL243WWsrMmdPSGJqMi9aUy95NkgrZnR6NllpemxldHQzcmgydnZhOHQzK09idnRZZTg3blg0OCtGa2Q1L2RlVkV4VU9BSnIzZzFBd1pXTmRnUVlpNkpLQ0RKcTNqWEl0NFJkaGU5dll4NUlEK1YzNG5ZQXNnZk9maDlpSmw1STlJNUw0SEJqVGtVVGdjZWlBMGRRZE5OWm9ZMVBsVE5IaGMxT29oQ0oya1AwZ1l6bXIySGhqT1lxc1psd0NEcGIwb20yUUFkV2tRdzZza3VSemlxQjBSNHFzYmFOSWtSSTVjRWM1T3ZuR3BFbmwzR2FZUnZhc29xUnRXWmEwcFcrRm1XaVJYd3UydGsyTEhhM1NXaDVUYU5qUkhXQ3dSMXFjSXYxbzIydFRzam1Gb1prbHdLZEdmcElHNktRYktmYm1hRGdreXFWalAxQVlVamFQc2lZcFNPQ3dwZ2ltSDVIWG1wMTlmZjhxR0dlbm5VUXFwSU1sOEpHaW1mMVFxMHJWdmZxUmZKbUIwYWhKRG9nMkdxSWFPYkRwWUoyK0pLS2xnbWFrckdiby9OclNuSnFCcU5HT2cyVXJFNFNqbmFyUkZLU3hLRk4zbzRscUVicTlzcW9TRHJqYUJZWkdxV3FXQjZ3d3dldllOc2RHbEs5ajZyN0ZxMlB1VG5Ud1lCa2lsbWFrRnprZ2ExcmU4cFVOdUlKcFN4SEdkdFgzMmJTTzlWZ1JzWGJ4TzliRm9HTDBzR1BtZnJhd1hSby9WR2xqSnIrRjhxd0JQM1JIdldxaEk2OU1MOVBWOGtQWlRNeFZ6Ulp6ekZYRkcyZlc4SEwvQkswVzB3MzVLeGpTMUUyODUwVXpOMWF0YmxKM0JUQkVEb1FNZFVGaFk4MVEwWm1wamRqQWdqSExVSjUyL1hDMlFYQnZwZXRGMXc3L0p2ZmRLd3YyTlVKM05PYnozUVlGcmxYTUVXWERjMWRESS80UDNYWFozUkRKYWpHT09MajNYb1E1WVlQZnpmWmdtaE5VOW1CVVN4NTFiM25rN0ZEaGpxVXVPZXh4TTlRM1hlaW9qdERLc2tQMGVWcTU2MjdRN1hTNVBycGRDUXYvRDJPSFc5VDExY29YNURqcUNqMVplZlFHcmJJdlJzL1NaVG4yQXltdTFqWUtLYzFWNmVCWEpENWRZNmN2MFBGMUpSLzFZTis3bnhIOGR2V3UvUHBkZFc2UTlYUkJuLzBpd3IrMDdHMkEvOEJmV3NoM0VQTzVCb0VaY2NEanpnZEJnUkF2TFFrN25WMmlWY0dLWEZBdC9vT2dQZnlXdmNHNHJvTUxzY2NFdGRLK0RuWVBOd2FobkFGUk9ETEhjTENEVnFOTHRWNjRsUnZTVUdlT0NSNE4vMGNJdllGb3NDNmgrMkg1RUtiRWZ4ak5IOHpLRy9DYUNKSG5YYStKSDlRYlFRcW9sUkJTVVNIWjRPRm1rb2hBQUtxRklETHNpdjYrR0Q3SC9BMkZ0RVBpUUJ5WUZmbXhjU0FLSE44SkI1aU53VkJvTUQrallnN3Jza1lJMHRFZklPcWpYUmg0UjRSSXNERmJZMk1hdVNLeU9LcWxmbzBzU0JiVjJFZ3Vac1Z5bGt6TEd6TVpTdHhsMG9wZHNad1pPWmxKZy95dUsyNkRZQ201d2tCUCtzT0hyWnpsREROSnhNY0l4SllDcEtJWWo5YktmMHd3RDcvTVdERUhnc3BMTHZPWXlZVFpNaFA0eE1VOTB5N0kvQWN3cDJsTHJXQ3lrZERVcGpLTG1jZTE3UEdINGR4bU1UZEp5V2thRTVzQ1dTVUZjL212UUtKd2VuVmhvQzYxZ3YvTEx4NVNLN0drNFQ0L0taQ0JJcktWelV6TE4wa3BHTXNkVVMyai9HRTUweExNSnRvU1VRM05aRGV6RXRFN0RwS1ZUb1RuSFIvSk1Idis4SlZaNFNCSy9VSEdDcTZVbis0Y3lBcC85VkZpZmpHaFhSR2lPdzNxajhuSWN5c2RSZUJFdTFKUkt0cVNrZjh3cUU1L3VGRi9lSEdhSzhYa1lGcnF2cDAxcG5VeEZRaEpDVm1RbFlyc2gvL01TaUhaK05PdGFNeVdTNjFnV1hGalVpWCsweUE4dFdQNmhzb1Z1VFp5cTk0N3lCT0RpcjJYRWpTckZvVFdRZGpwRDZ5cTFURjVvQ29iOFdtWFkwa3hMVjhkb01UTUJsaHhDdWFBMG50aUMrMDN5UVcyVmFMVjdCMWhvWWhBbk1LeXNwWVZUTTU0YXRqMFRiWXhtSTNwYSt1MmtILy9MbFI0ZnMxS1ViL1kyYm91eExRQVRkOWF1Y0xYT3o1Mmlnd1pabFkycXp1ZXN2Q3pOS1JyY0JteTBkdWVMWXlaR2Fza0lma3o3QXBXZUwzTktXcUhDMU9IQUhlNXUzMUxVM1ZiMmJEQkVDSmhiZDdkemd2VXluclhqNkJoR1hSZDR0NmM3cmVEdWJXdVFzSzdsWUtCclpwbXJXeE4xYUpZZzh4V01FOUZUSCs3VXR3dnJsZTdzeW5XZjAzQ0xmMENscjVaaWExRUNMeVZIMng0Skt0QU1Bc2JURVVWcy9RaTk4MFZpMUd5M3VrQ2RzSXB6UWlPV1poZWttUWp0MXVKTEdCdlZwY0tOd1RFV3NId1NFQ21tUWhubGNnR1BMRW15OVhqanZ5WU5mSkY3ZnVVOWpTT0FGa3JxMXFKcTBqVFpTMFQ1SUpWYmdpVS80V2VrbVJqNmpGNnNtdGxieGRRaVZ5Wk5EK1JNaGpITEN3eko4UmZkWjdJblMxbEdvOVl4amlCenFxZkVpM29zTEp2Q21rbUNKNWNYSmQrK3ZsQkpCYk1ObjdnbEhQYWd5cEp1UTZqTDAyUzBXcG0wMGhKOVErMnNaUDJ5Sm5VTEtteGloZzJZMWluaE1tenZzMkJiUDBaRHVYNk5zSGh0V3hrL1d0L2hFZll5N0dIY292dFRUMGoreVQrWVhaZGt2TnN4S2xIMm1KVGNyWEhraXhzRzd2TjI5WmRzaWg5blR5SEczeCsrYkp2d1BEcWN5Tk9NWTQyRld6Y2pjSXFYUWxHZWprbnZkMlhEYXFBWWRVckxHd2VZbFFPY09oNzN6KzBoNUVXZm5DRU8vemhFSSs0eENkTzhZcGJQSk1CQVFBaCtRUUpCQUQvQUN3QUFBQUE4QUNDQUFBSS93RC9DUnhJc0tEQmd3Z1RLbHpJc0tIRGh4QWpTcHhJc2FMRml4Z3phdHpJc2FQSGp5QkRpaHhKc3FUSmt5aFRxbHpKc3FYTGx6QmpZc3gyQjRlaUh6Z1Q1Tm5Kc3llNmNuY2N5SXg1WjlVVW5EOTZLdVZaRHVpZGJFTlJPZ0JYRGd5NlBQNnlhdDNLdFd1ZUgxT0FSaTFwRDRkVnJGM1RwdDM1YzlWWWtQYW1YRlZMdDY3V1BOdkF1SDI3TWRzcU1OdnNDbGFiUnk5VXZoWWQ0RUEzdUhIZFBBbFdIVVk4RVp5aXdJNHpjODJqQ0J6bGlIY1VhUjVOV05HZHp3N2pNaWJOV2lzNkhKTlJId1QzbzdWdHJxOWxJNlNOOXJidGJWTmk2NzVUMjdmeHJPZzg2eFlJTHNIeDQ5dktDVWZzQU16ejYvNSsySlB0b0RoMjQ5djJVdjh1aC9uN2MrbUlzNVhyYmQ2NGRyNzJ2TGQvam03N1dIdk81MStQUGhaSGVmM1hsUk1WRGdDYTk0TlFNR1ZqWFlFR0l1aVNnZ3lhdDQxeUxlRVhZWHZiMk1lU0EvbGQrSjJBTElIem40ZllpWmVTUFNPUytCd1kwNUZFNEhIb2dOSFVIVFRXYUdOVDVVelI0WE5UcUlRaWRwRDlJR001cTloNFl6bUtyR1pjQWc2VzlLSnRrQUhWcEVNT3JKTGtjNHFnZEVlS3JHMmpTSkVTT1hCSE9UcjV4cVJKNWR4bW1FYjJyS0trYlZtV3RLVnZoWmxva1Y4THRyWk5peDJ0MGxvZVUyalkwUjFnc0VkYW5DTDlhTnRyVTdJNWhhR1pKY0NuUm42U0J1aWtHeW4yNW1nNEpNcWxZejlRR0ZJMmo3SW1LVWpnc0tZSXBoK1IxNXFkZlgzL0toaG5wNTFFS3FTREpmQ1JvcG45VUt0SzFiMzZrWHlaZ2RHb1NRNklOaHFpR2ptdzZXQ2R2aVNpcFlKbXBLeG02UHphMHB5YWdhalJqb05sS3hPRW81MnEwUlNrc1NoVGQ2T0phaEc2dmJLcUVnNjQyZ1dHUnFscWxnZXNNTUhyMkRiSFJwU3ZZK3EreGF0ajdrNTA4R0FaSXBabXBCYzVJR3RhM3ZLVkRiaUNhVXNSeG5iVjk5bTBqdlZZRWJGMjhUdld4YUJpOUxCajVuNjJzRjBhUDFScFl5YS9oZktzQVQ5MFI3MXFvU092VEMvVDFmSkQyVXpNVmMwV2M4eFZ4UnRuMXZCeS93U3RGdE1OK1NzWTB0Uk52T2RGTXpkV3JXNVNkd1V3UkE2RURIVkJZV1BOVU5HWnFZM1l3SUl4eTFDZWR2MXd0a0Z3YjZYclJkY08veWIzM1NzTDlqVkNkelRtODkwR0JhNVZ6QkZsdzNOWFF5UCtEOTExMmQwUXlXb3hqamk0OTE2RU9XR0QzODMyWUpvVFZQWmdWRXNlZFc5NTVPeFE0WTZsTGpuc2NUUFVOMTNvcUk3UXlySkQ5SGxhdWV0dTBPMTB1VDY2WFFrTC93OWpoMXZVOWRYS0YrUTQ2Z285V1huMEJxMnlMMGJQMG1VNTlnTXBydFkyQ2luTlZlbmdWeVErWFdPbkw5RHhkU1VmOVdEZnU1OFIvSGIxcnZ6NlhYVnVrUFYwUVovOUlzSy90T3h0Z1AvQVgxcklkeER6dVFhQkdYSEE0ODRIUVlFUUx5MEpPNTFkb2xYQmlseFFMZjZEb0QzOGxyM0J1SzZEQzdISEJMWFN2ZzUyRHpjR29ad0JVVGd5eDNDd2cxYWpTN1ZldUpVYjBsQm5qZ2tlRGY5SENMMkJhTEF1b2Z0aCtSQ214SDhZelIvTXlodndtZ2lSNTEydmlSL1VHMEVLcUpVUVVsRWgyZURoWnBLSVFBQ3FoU0F5N0lyK3ZoZyt4L3dOaGJSRDRrQWNtQlg1c1hFZ0NoemZDUWVZamNGUWFEQS9vMklPNjdKR0NOTFJIeURxbzEwWWVFZUVTTEF4VzJOakdya2lzamlxcFg2TkxFZ1cxZGhJTG1iRmNwWk15eHN6R1VyY1pkS0tYYkdjR1RtWlNZUDhyaXR1ZzJBcHVjSkFUL3JEaDYyYzVRd3pTY1RIQ01TV0FxU2lHSS9XeW45TU1BKy96Rmd4QjRMS1N5N3ptTW1FMlRJVCtNVEZQZE11eVB3SE1LZHBTNjFnc3BIUTFLWXlpNW5IdGV6eGgrSGNaakUzU2NscEdoT2JBbGtsQlhQNXIwQ2ljSHAxWWFBdXRZTC95eThlVWl1eHBPRStQeW1RZ1NLeWxjMU15emRKS1JqTEhWRXRvL3hoT2RNU3pDYmFFbEVOeldRM3N4TFJPdzZTbFU2RTV4MGZ5VEI3L3ZDVldlRWdTdjFCeGdxdWxKL3VITWdLZi9WUlluNHhvVjBSb2pzTjZvL0p5SE1ySFVYZ1JMdFNVU3Jha3BIL01LaE9mN2hSZjNoeG1pdkY1R0JhNnI2ZE5hWjFNUlVJU1FsWmtKV0s3SWYvekVvaDJmalRyV2pNbGt1dFlGbHhZMUlsL3RNZ1BMVmorb2JLRmJrMmNxdmVPOGdUZzRxOWx4STBxeGFFMWtIWTZRK3NxdFV4ZWFBcUcvRnBsMk5KTVMxZkhhREV6QVpZY1FybWdOSjdZZ3Z0TjhrRnRsV2kxZXdkWWFHSVFKekNzcktXRlV6T2VHclk5RTIyTVppTjZXdnJ0cEIvL3k1VWVIN05TbEcvMk5tNkxzUzBBRTNmV3JuQzF6cytkb29NR1daV05xczduckx3c3pTa2EzQVpzdEhibmkyTW1Sa3JHLzBheVlWZ1Y3REM2MjFPVVR0Y21Eb0V1TXZkN1Z1YXF0dktoZzJHRUFscjgrNkdYcUJXOXJ0K0JBM0xvT3VTOSthVXZ4M01yWFVWSXQ2dEZBeHMxVFJyWlVlckZjVWFaTGFDZVNwaS9OdVY0bjZSd1dLdHlIRkJDR0NUY0d1L2dNV3dQMklya1FKdjVRY2RIc2txRXN4Q0IyTlJNeTVHQ0g1ekZlT1RzSGU2N3N4R2JsT2FFUXB2WlJ2cUpZbU9TUlBaWmRwRHVjVGRTSDIzb2wyU2dFd3pFczZrZnpRVE9iNlZLOGdkR1RKcDVsdE1lNWlZbGpXKzNLRlNUQkZYa2VacDVMeXhOVDF5TTgxRWgvL01Ec25HWXZSa1Z5WE9tVFFCbFlpV1IvTVRPQ2RFUFN4V1M1NkZlbWZTMVBraWV4NE5yVHhpR2VNTTJuNzJVTVFLNDFlU05uZHBDbGlXM2w4Q1haZCsvdkFPY3ZITm95dENydHRzNHdkT09hYzlxSktVNjR4NktGVUJoMkxGTktZZmNEcUFLaEV4SkpIQ2E1eHNZeWZ0T2ZSbnZNT1RYdk1heVc0T3MwYlVyQ0xCb0ZsM2syNVBBcFM5a1NjMyt6WUh3bDYwdnpQZ2szRG8ycmNKRHZZVXFTSlBzNFRaNEE1UCtweDduV2tiRE5uZy9xU2ZaY0x1NHhTNVA3ZStVSElHV043alpCczE2b24zK0pvTU9BWWxJTk10U1piQVdZZ2VDS0k3aUsrR1NiTHlEYU9HdTNRK2tZbWVYM1pzSERBSU8zb2NENWNpcUUwWnhZUzFOUWxNZ0EwVlQrN3N6cUN3U2xlQ2tWN09PY0J0ZTA4c1g4d0dWY0JnNjBtelJVYmdvSGtGanpLWHdRUnBDamdndVFpTnhIU2gzNUVtVERmU3ZGRkw5YXBiL2VwWXo3cld0ODcxcnBza0lBQWgrUVFKQkFEL0FDd0FBQUFBOEFDQ0FBQUkvd0QvQ1J4SXNLREJnd2dUS2x6SXNLSERoeEFqU3B4SXNhTEZpeGd6YXR6SXNhUEhqeUJEaWh4SnNxVEpreWhUcWx6SnNxWExsekJqWXN4MkI0ZWlIemdUNU5uSnN5ZTZjbmNjeUl4NVo5VVVuRDk2S3VWWkR1aWRiRU5ST2dCWERneTZQUDZ5YXQzS3RXdWVIMU9BUmkxcEQ0ZFZyRjNUcHQzNWM5VllrUGFtWEZWTHQ2N1dQTnZBdUgyN01kc3FNTnZzQ2xhYlJ5OVV2aFlkNEVBM3VISGRQQWxXSFVZOEVaeWl3STR6YzgyakNCemxpSGNVYVI1TldOR2R6dzdqTWliTldpczZISk5SSHdUM283VnRycTlsSTZTTjlyYnRiVk5pNjc1VDI3ZnhyT2c4NnhZSUxzSHg0OXZLQ1Vmc0FNeno2LzUrMkpQdG9EaDI0OXYyVXY4dWgvbjdjK21JczVYcmJkNjRkcjcydkxkL2ptNzdXSHZPNTErUFBoWkhlZjNYbFJNVkRnQ2E5NE5RTUdWalhZRUdJdWlTZ2d5YXQ0MXlMZUVYWVh2YjJNZVNBL2xkK0oyQUxJSHpuNGZZaVplU1BTT1MrQndZMDVGRTRISG9nTkhVSFRUV2FHTlQ1VXpSNFhOVHFJUWlkcEQ5SUdNNXE5aDRZem1LckdaY0FnNlc5S0p0a0FIVnBFTU9ySkxrYzRxZ2RFZUtyRzJqU0pFU09YQkhPVHI1eHFSSjVkeG1tRWIycktLa2JWbVd0S1Z2aFpsb2tWOEx0clpOaXgydDBsb2VVMmpZMFIxZ3NFZGFuQ0w5YU50clU3STVoYUdaSmNDblJuNlNCdWlrR3luMjVtZzRKTXFsWXo5UUdGSTJqN0ltS1VqZ3NLWUlwaCtSMTVxZGZYMy9LaGhucDUxRUtxU0RKZkNSb3BuOVVLdEsxYjM2a1h5WmdkR29TUTZJTmhxaUdqbXc2V0NkdmlTaXBZSm1wS3htNlB6YTBweWFnYWpSam9ObEt4T0VvNTJxMFJTa3NTaFRkNk9KYWhHNnZiS3FFZzY0MmdXR1JxbHFsZ2VzTU1IcjJEYkhScFN2WStxK3hhdGo3azUwOEdBWklwWm1wQmM1SUd0YTN2S1ZEYmlDYVVzUnhuYlY5OW0wanZWWUViRjI4VHZXeGFCaTlMQmo1bjYyc0YwYVAxUnBZeWEvaGZLc0FUOTBSNzFxb1NPdlRDL1QxZkpEMlV6TVZjMFdjOHhWeFJ0bjF2Qnkvd1N0RnRNTitTc1kwdFJOdk9kRk16ZFdyVzVTZHdVd1JBNkVESFZCWVdQTlVOR1pxWTNZd0lJeHkxQ2VkdjF3dGtGd2I2WHJSZGNPL3liMzNTc0w5alZDZHpUbTg5MEdCYTVWekJGbHczTlhReVArRDkxMTJkMFF5V294amppNDkxNkVPV0dEMzgzMllKb1RWUFpnVkVzZWRXOTU1T3hRNFk2bExqbnNjVFBVTjEzb3FJN1F5ckpEOUhsYXVldHUwTzEwdVQ2NlhRa0wvdzlqaDF2VTlkWEtGK1E0NmdvOVdYbjBCcTJ5TDBiUDBtVTU5Z01wcnRZMkNpbk5WZW5nVnlRK1hXT25MOUR4ZFNVZjlXRGZ1NThSL0hiMXJ2ejZYWFZ1a1BWMFFaLzlJc0svdE94dGdQL0FYMXJJZHhEenVRYUJHWEhBNDg0SFFZRVFMeTBKTzUxZG9sWEJpbHhRTGY2RG9EMzhscjNCdUs2REM3SEhCTFhTdmc1MkR6Y0dvWndCVVRneXgzQ3dnMWFqUzdWZXVKVWIwbEJuamdrZURmOUhDTDJCYUxBdW9mdGgrUkNteEg4WXpSL015aHZ3bWdpUjUxMnZpUi9VRzBFS3FKVVFVbEVoMmVEaFpwS0lRQUNxaFNBeTdJcit2aGcreC93TmhiUkQ0a0FjbUJYNXNYRWdDaHpmQ1FlWWpjRlFhREEvbzJJTzY3SkdDTkxSSHlEcW8xMFllRWVFU0xBeFcyTmpHcmtpc2ppcXBYNk5MRWdXMWRoSUxtYkZjcFpNeXhzekdVcmNaZEtLWGJHY0dUbVpTWVA4cml0dWcyQXB1Y0pBVC9yRGg2MmM1UXd6U2NUSENNU1dBcVNpR0kvV3luOU1NQSsvekZneEI0TEtTeTd6bU1tRTJUSVQrTVRGUGRNdXlQd0hNS2RwUzYxZ3NwSFExS1l5aTVuSHRlenhoK0hjWmpFM1NjbHBHaE9iQWxrbEJYUDVyMENpY0hwMVlhQXV0WUwveXk4ZVVpdXhwT0UrUHltUWdTS3lsYzFNeXpkSktSakxIVkV0by94aE9kTVN6Q2JhRWxFTnpXUTNzeExST3c2U2xVNkU1eDBmeVRCNy92Q1ZXZUVnU3YxQnhncXVsSi91SE1nS2YvVlJZbjR4b1YwUm9qc042by9KeUhNckhVWGdSTHRTVVNyYWtwSC9NS2hPZjdoUmYzaHhtaXZGNUdCYTZyNmROYVoxTVJVSVNRbFprSldLN0lmL3pFb2gyZmpUcldqTWxrdXRZRmx4WTFJbC90TWdQTFZqK29iS0ZiazJjcXZlTzhnVGc0cTlseEkwcXhhRTFrSFk2UStzcXRVeGVhQXFHL0ZwbDJOSk1TMWZIYURFekFaWWNRcm1nTko3WWd2dE44a0Z0bFdpMWV3ZFlhR0lRSnpDc3JLV0ZVek9lR3JZOUUyMk1aaU42V3ZydHBCLy95NVVlSDdOU2xHLzJObTZMc1MwQUUzZldybkMxenMrZG9vTUdXWldOcXM3bnJMd3N6U2thM0Fac3RIYm5pMk1tUmtyRy8wYXlZVmdWN0RDNjIxT1VUdGNtRG9FdU12ZDdWdWFxdHRkRlF4eFlZTWhSTUxhdkx1aEY2aTdDc3hUZGZOZFA0S0daZEIxU1h4ekdtQ0Y4Q3F5eThtdGRSVWkzcTI4VnpZREpxcEhGbGJjb1l4V0s0bzF5R3dGczEvNFZCTy9IUWthZ2lselliRlc1TGdnTExCSnVBWGdFTXRLdXk0cHNUOWlLNUVHYitVSEtoN0pLajdNd2d3L1pNQVZab21NV1hxUi91Ykt4eWhoNzNRM0V1SHM1UGdqMmNodFNqUFNaQmFxbHlSUkpzMklMMUpsZjNoc0tQWlFMbkUzY3QrdHdIZ2tJTk5NaHl2U1pmUEN4UDgvbW9rYzM4cDE1WTVrbVRUMXBaU3B6aGtTZTlpWWxraDJpSlMxc3FxVnVJbzBUK3ZJa00zOFpJbW9oelYxYnNqTk5CT2RSa3Q2TVhxeWEwWEloV2pZbkFUVHBBbW9vd2Z0R3ZTTTZ0RENHbFZZeHpjRlBsTWtHNkFtamFhTFRPcTdtTVlqbGpHT3FGOHRabnZOT2lMMlVNUUs0MWVTU1hkcENwRW1DSjU0dkVHVEdGbFBhN0xJSGVUaW0xM2Y2YytML0lGVHpta1BxaVRsT3RhKzA2cG5wVzF3S0ZaTVkvb0JzK3VTYklzc1dqRGJRSXE4Y2JLTm5iVG4xeHk1TTVCMk1tOTU5OXBwZ2Q2SWtsWEVzSUJ2NU4wRXIwc0NETDZSTkNmY05nZDZTWGtmbmxHWWNJamlyUWtPVWY2TmNhNzBzeVVEcDNoNG9zS3Vqck9NNFltdDR2akRjY3lYSFp0Y01Gc2VDcHhmbmxOOHI0VFROTCt4cTF2eTZKejdnei9EcVRXQUV0RHVsU1RyNVpXKzJ4M0dyUjkwaERzbXlWcjNkWDVpNlpXc2d1bllpVXowL0NMMDFvREI1aTY3aklmUW9RaVVVd2NIV0krenB3ZjRsMkhycVRNb3JOS1ZZS1NYbmF1T0pqcHlPLzNFOHNWc1VBVU02aDQyVzJRRURydlB0U1kzc2ZkZ2dqUUZISmdkZ2ZZd2t1UU5UMFdhU041SVZVZXQ1amZQK2M1Ny92T2dENzNvUjIrU2dBQUFJZmtFQ1FRQS93QXNBQUFBQVBBQWdnQUFDUDhBL3drY1NMQ2d3WU1JRXlwY3lMQ2h3NGNRSTBxY1NMR2l4WXNZTTJyY3lMR2p4NDhnUTRvY1NiS2t5Wk1vVTZwY3liS2x5NWN3WTJMTWRnZUhvaDg0RStUWnliTW51bkozSE1pTWVXZlZGSncvZWlybFdRN29uV3hEVVRvQVZ3NE11anorc21yZHlyVnJuaDlUZ0VZdGFRK0hWYXhkMDZiZCtYUFZXSkQycGx4VlM3ZXUxanpid0xoOXV6SGJLakRiN0FwV20wY3ZWTDRXSGVCQU43aHgzVHdKVmgxR1BCR2Nvc0NPTTNQTm93Z2M1WWgzRkdrZVRWalJuYzhPNHpJbXpWb3JPaHlUVVI4RTk2TzFiYTZ2WlNPa2pmYTI3VzFUWXV1K1U5dTM4YXpvUE9zV0NDN0I4ZVBieWdsSDdBRE04K3YrZnRpVDdhQTRkdVBiOWxML0xvZjUrM1BwaUxPVjYyM2V1SGErOXJ5M2Y0NXUrMWg3enVkZmp6NFdSM245MTVVVEZRNEFtdmVEVURCbFkxMkJCaUxva29JTW1yZU5jaTNoRjJGNzI5akhrZ1A1WGZpZGdDeUI4NStIMkltWGtqMGprdmdjR05PUlJPQng2SURSMUIwMDFtaGpVK1ZNMGVGelU2aUVJbmFRL1NCak9hdlllR001aXF4bVhBSU9sdlNpYlpBQjFhUkREcXlTNUhPS29IUkhpcXh0bzBpUkVqbHdSems2K2Nha1NlWGNacGhHOXF5aXBHMVpsclNsYjRXWmFKRmZDN2EyVFlzZHJkSmFIbE5vMk5FZFlMQkhXcHdpL1dqYmExT3lPWVdobVNYQXAwWitrZ2JvcEJzcDl1Wm9PQ1RLcFdNL1VCaFNObyt5SmlsSTRMQ21DS1lma2RlYW5YMTkveW9ZWjZlZFJDcWtneVh3a2FLWi9WQ3JTdFc5K3BGOG1ZSFJxRWtPaURZYW9obzVzT2xnbmI0a29xV0NacVNzWnVqODJ0S2Ntb0dvMFk2RFpTc1RoS09kcXRFVXBMRW9VM2VqaVdvUnVyMnlxaElPdU5vRmhrYXBhcFlIckREQjY5ZzJ4MGFVcjJQcXZzV3JZKzVPZFBCZ0dTS1dacVFYT1NCcld0N3lsUTI0Z21sTEVjWjIxZmZadEk3MVdCR3hkdkU3MXNXZ1l2U3dZK1ordHJCZEdqOVVhV01tdjRYeXJBRS9kRWU5YXFFanIwd3YwOVh5UTlsTXpGWE5GblBNVmNVYlo5YndjdjhFclJiVERma3JHTkxVVGJ6blJUTTNWcTF1VW5jRk1FUU9oQXgxUVdGanpWRFJtYW1OMk1DQ01jdFFubmI5Y0xaQmNHK2w2MFhYRHY4bTk5MHJDL1kxUW5jMDV2UGRCZ1d1VmN3UlpjTnpWME1qL2cvZGRkbmRFTWxxTVk0NHVQZGVoRGxoZzkvTjltQ2FFMVQyWUZSTEhuVnZlZVRzVU9HT3BTNDU3SEV6MURkZDZLaU8wTXF5US9SNVdybnJidER0ZExrK3VsMEpDLzhQWTRkYjFQWFZ5aGZrT09vS1BWbDU5QWF0c2k5R3o5SmxPZllES2E3V05nb3B6VlhwNEZja1BsMWpweS9ROFhVbEgvVmczN3VmRWZ4MjlhNzgrbDExYnBEMWRFR2YvU0xDdjdUc2JZRC93RjlheUhjUTg3a0dnUmx4d09QT0IwR0JFQzh0Q1R1ZFhhSlZ3WXBjVUMzK2c2QTkvSmE5d2JpdWd3dXh4d1MxMHI0T2RnODNCcUdjQVZFNE1zZHdzSU5XbzB1MVhyaVZHOUpRWjQ0SkhnMy9Sd2k5Z1dpd0xxSDdZZmtRcHNSL0dNMGZ6TW9iOEpvSWtlZGRyNGtmMUJ0QkNxaVZFRkpSSWRuZzRXYVNpRUFBcW9VZ011eUsvcjRZUHNmOERZVzBRK0pBSEpnVitiRnhJQW9jM3drSG1JM0JVR2d3UDZOaUR1dXlSZ2pTMFI4ZzZxTmRHSGhIaEVpd01WdGpZeHE1SXJJNHFxVitqU3hJRnRYWVNDNW14WEtXVE1zYk14bEszR1hTaWwyeG5CazVtVW1EL0s0cmJvTmdLYm5DUUUvNnc0ZXRuT1VNTTBuRXh3akVsZ0trb2hpUDFzcC9UREFQdjh4WU1RZUN5a3N1ODVqSmhOa3lFL2pFeFQzVExzajhCekNuYVV1dFlMS1IwTlNtTW91Wng3WHM4WWZoM0dZeE4wbkphUm9UbXdKWkpRVnorYTlBb25CNmRXR2dMcldDLzhzdkhsSXJzYVRoUGo4cGtJRWlzcFhOVE1zM1NTa1l5eDFSTGFQOFlUblRFc3dtMmhKUkRjMWtON01TMFRzT2twVk9oT2NkSDhrd2UvN3dsVm5oSUVyOVFjWUtycFNmN2h6SUNuLzFVV0orTWFGZEVhSTdEZXFQeWNoekt4MUY0RVM3VWxFcTJwS1IvekNvVG4rNFVYOTRjWm9yeGVSZ1d1cStuVFdtZFRFVkNFa0pXWkNWaXV5SC84eEtJZG40MDYxb3pKWkxyV0JaY1dOU0pmN1RJRHkxWS9xR3loVzVObktyM2p2SUU0T0t2WmNTTktzV2hOWkIyT2tQcktyVk1YbWdLaHZ4YVpkalNURXRYeDJneE13R1dIRUs1b0RTZTJJTDdUZkpCYmFWSU5sUUxPTG9LdGFFRUJhS0NNUXBMQzJpaUR3VTlXd2J6UmxQRFp1K3lmODJCck1TVWFFL2NCczkyOVp0SWY5Y3FQRDhtcFhYSHNRNy9kUmRaK3U2RU5VQ05IMXI1UXBmRlJMSHhJTHZzVk5reURDenNsbmQ4WlNGbnlYSXBuZ3JPZEpteFcwYkZlN1p3cGlac1Naa2xaRlZuVjhqdVJEMkNsWjR5ODNwblQ1bDNMZEVGNllPY1M1Myt4dVZwaGIzWGV3N0ozeXE2WSswQXRkdzRZV0pnSUdhbU1kRlRqZjI5U05vV0JiaENqRVlPUjMreDBxbk94YmlxbGNoK2QxS3djRDI0UU5YNUxza2xzbHB0U0xhZ3ZoV01FOUZUTmdnZXBHdytpTytsSmx4YVNtQ1hSQ0dXRTR0M20ySUo2d1Y5N3BFeUx1OVNJcTM4b01qaTJRVlNYNWFSYVlzM2M5QW1hVVh5WEN1YW93U0F6ODNZa25PanBVOWtnM2lwalQvSXpzV0c0RkYwbWJTQUpraXVzVVdtVWxpaisxMm1WS2pjZkpJUUthWkhGZUV5VnhKN3J5U2ZHSFdsbXZPZlhIelZwcTNrWnBlVnNGdzRmSld0THdSU1hOMHpSSnhGV2s0dlpFdmJ3VTlLVkVQYXlCZFh4OXZHdFVreWNaaTlHVFhpcEJyMUxBNXlheEpFMUNKMUprMFB3RTFRdFNUWnB1QzVHWmRtZ0ttSnlKclA2dWwxbUgyOUYxTTR4SExHS2ZYRkJFemE4QUE3WWpZbzdXMjZYYVlYYjNBS2JENmZYOHBkbG9VM1JGdGQybE5Gcm1EWEh5RDdUdHBPcDgvY01vNTdVR1ZwRnluM25jaTkyUHlEUTdGaW1sTVAxQTNVVlZpYXNGc0F5a1F4OGsyZHRJZWNVZmFQRHlKT01TZDdiUTliOFRNS21LWXgwc2RjdXdrWU9RYnpDRjB5VzF6b0pmOGQrVVpoUW1IWU42YTRCQ0Y0elJQZElGejdqU0FoNFJkUEw4dHloT0Y4NVZYbVM5WURycGQ3andVL3lnOXB4Wlh5YTJmN3MxbHMwVFZWT2ZQY0tRTm9BU2NHMWdObHhDc2wzTUhnYmNISFQ2WCtXVldIbXpkcmNMc3o0bE05UHpDOWRad0czemZWaml3RlRGMDZ1QUE3aXpMOVFEL3NzTGZkQWFGVmJvU2pQUmk5ZkxLdTB6SHlmZlh5MHNWTUNTODhHeVJFVGdhRHo2YTJDUXBoUzlzQXNDQ2c3NGowQjVHU2ozbm0waVQxQnRKMkpXTnZleG5UL3ZhMi83MnVNKzk3bU1TRUFBaCtRUUpCQUQvQUN3QUFBQUE4QUNDQUFBSS93RC9DUnhJc0tEQmd3Z1RLbHpJc0tIRGh4QWpTcHhJc2FMRml4Z3phdHpJc2FQSGp5QkRpaHhKc3FUSmt5aFRxbHpKc3FYTGx6QmpZc3gyQjRlaUh6Z1Q1Tm5Kc3llNmNuY2N5SXg1WjlVVW5EOTZLdVZaRHVpZGJFTlJPZ0JYRGd5NlBQNnlhdDNLdFd1ZUgxT0FSaTFwRDRkVnJGM1RwdDM1YzlWWWtQYW1YRlZMdDY3V1BOdkF1SDI3TWRzcU1OdnNDbGFiUnk5VXZoWWQ0RUEzdUhIZFBBbFdIVVk4RVp5aXdJNHpjODJqQ0J6bGlIY1VhUjVOV05HZHp3N2pNaWJOV2lzNkhKTlJId1QzbzdWdHJ1Z2t5NTZkOUxidmJWTmk3NzVUMjdmeHJMbDNEd1NYNFBqeGJlV0VJM1lBeHJsMWZ3bE9vM1pRL0xyeGJYc3BsLy9EN04wNUdPa3lzNVZEVy83NEQzdDg3WFZ2NzN5YjlxajJtdE8zRG4wc0R2TDdXUmZjVURnRVdONFBRc0dVVFhVR2xwY0FmQzh0MkdCNTIzam1VbjRUdHJkTmdpdzVvRitHM3BYVEVqZ0FnbWdkRGkzWlU2S0o1cUUzVW9ISG9RTkdVM2ZVYU9PTlRaVXp4WWUvdVVpU2l0ZEI5c09NNWF4eUk0N2xLTEthY1Fsd1dCS010a0VHbEpNT09iQ0trcmVKdU5JZEs3SzJqU0pHU3VUQUhlWG81RnVUSnBWem0yRWEyYlBLa3BsdDQ2TklYUHBXV0hnWCtjVmdhM0tTdEVwcmVVd0JvVWQzZ01IZVlGcW1CS1J0cjFIWjVoU0hhcGJBbkJqOVNWcWdsR2FrR0p4MDlhbG9sNDc5WUtGSTJVREsycVFnZ2NPYUlwbDJOSjVkVTZqL2xBMm9nbkYyWDBtbFJ0cFlBaDh0bXRrUHQwcTFwMWVPa2pSZlptQVVXNUlEb28ybVNFY09jRG9ZaWkrUm1OYXpLVFdyR1RyQmJra3JYWWxteE9OZzNNcEUzV2JLaGpRRmFlZVplK3hnbzE2MDdxK3RvbVJwVnRpZXBLcG1lZUFwMDd5T2JZalJ2bzYxKzFhZGVhVGI2N2RwYlRQb1dHcG14bXRpREhNVjdsdlpKSkN2U2VNS2hzN0RiMW5yV0t3VnZWdVh2OHFORkxGanFLTG02MkRkT25UdllDaW5ITklkdXRhRlRyMHd2V3hYeXhETjZsak5Ob1BVY1YwTzIreHpYUmMzQkxCZ1JCZnQwY3lEZ2J6YjBtb0ovSkFESTB1TmE4VmJSWTBhd1lKdHpOQ3dkZjNnZFVuYURtWjIwU3NMWmpWQ2R6UzI4OW9qWlpPeldrQ3YvNDAyWFdvM1pISmFNZVBOMGVCcnpWMjAwREF6eERXaWh0T1pXZE5yMSswMlEyM1RoVTdrSWlIZTFlYWNENVE1WFFvemJsZThvVzlFdFYxaVM2MDM1QWxCbVhicUgwa0xPTzBEeGQycFFrZDNWVGp1Rk9tT3RNSnJtMTRYNmdQWk0xamd3R2RrdkYyVWh5NThXbUFnSkR0ZHZ6Y2YwZlI4YXkvUTh3MGoxUHRXb0h1ZjJONkVtLy9QNkdraC83aGQxS3BQRWZ0cVZhKys4bVVidEhwYXhNdWZrRDNvNDRyVzFHYzczQmprYjEyWm1QOGs0am11eEU5OVQ2TUx5QXE0bFFjdTBDR1dJOWNGOGNjNmdyeXZMb3E3WUVMRzF4WGttYTlpR3lPYldzb253b2JzVHkzTVd5RDl0cUxBZjNCdksvWnJJVU95UWNITmhGQjcxMU1MUWY4UWFERWROdVNHWFhtYi9ESUl3b0dRTUNzbU5DSkJ3SmUxL2dFdkcvQWF5R0I0ZHNFSU1rMktUL1NIbHJCb2wyMUlVU0VPQ09CV1BLVkRJbTZGWkV5RTRSa1RNc091Uk05L1NNeEs0T0o0clRrZWhJK2FtK01MdHhLNElOclJqd1pwWU5qbUNFZ0JDaVNQL3JDZ0h4dVpsaG9ha1lOMHljTWpCWk05SGZhUUs2M3pueG8xYVVOT0luSWdnK3hLRE04NHlrM2FwWk1YcEtKYVlDbEt1NUFTa3JURVk2aE8rWTlXbHZLVnA1UWxzWGpwUzF5ZXNvNWNJZGtwZldsSXJ1VFNmSlRzQ2h2OStEcWtDU1NhV1pHa0RzT29sVkJlRUp2KzJLTmc3cmpBVkhKbGxaTVVUT0ErcUJZbHhoSnNXWG1tTHUyU0wzWE9FWkphY2VjWnZYai9TSUV3akpSR1RHTmpwbmxLUmNaUGtUODBueUsxb2swL3F0RWY5K0VuS0kxb1R2THhraURnOU1ka21ya1ZmWHBQbUw2N2FPNEVZOGFCZ0pPRkM4Um5WbklvVWtXdXNtb2l4RmxqRWlaU2dRZ1VlZ1ZScERMOXg4MnNrUE9NSE4xS3NDQ0pVdk1GRlRkY3ZDQTNEWkxSS09JT3BGeHg2aHh2T2p1RG9OQi9DOVZqVFVVM3JZTWcweDgwTmFwajhwQlFLVmJUTHNWU29WcDJDandId05NZmJMMG9QaTA1RUtqNlk0REFjNk0wa3pyRnNuck5ybUtrNCtXYVY5RkZWa1FSZVpDbmNsU2Fyb3lHbFhadVpabEZBSWlkdG9JTm5RWGhKbVlObDlWNFdxUTdEZlZiWTZUNmo4TDZ3NXZLT1NwWFBNb1FKcEkxZFdwZFlVTSttUlc4LytJdG8xb2hhRVE0UmRlL3d0T2JLdDJzelhnNE9Zc1lNcTVTeTZwdUQwTGNyaHBPcjUremlDd1Y2eC9IaEZaL0E2WHVVRlNxRmUwT1JLSjN0V0o4NEZuVWhmVDBibEl6YlQ3UFY1ZStLYWU1V1lRSWJySEQxNWRnVFhQMUhZZ2lXY3VYemdwWElkREZZWDVYY2wvc1dRUzMvSTNLVjdmaVY0TkV0akVzL1V5QjIzbVJuc0pWT1F2V3lrOFZFbHU2R0l3eWRaTFlnRXVybVEzREpNTlo2UzFFQWt6SUVZOWtGVyt0YllNVHd1TFZmZ2JGV1preFF1QTdtQWZ4aGJ1R3BkaG9mdURpajJTanM5bk15SVNsNlYyUUhKazB5SjBJWmJlbDR4L1Ixc1lhVWErR1pTSXl6VVQ0SWxxdW9FeitJNmtpRXdUSEtXNnk4NUJNUGpNVEJQKzhQeE12WEdxOHhpb0xqalNzV3NtclNKTTBqNkI1SzlHUkZaQ0ZhbVFMcnpIUXVGb01uMGhiRVFsNUNUWW5VVFJwVUR1Uko1UG1KMjdlOFo1YlErbEtHMXFhVTVCenBTVk5Ha2JuaWMxYnNaVkhMR09jVGxPRXg2d0JnNmtqWWcvRTJtYldlZm8wcU5YOER6M0Z1QzdYNVFpc3ZjU21BOHZGTjY2V0xwMlI5Z09uV05FZVZPbU5jNUl0WFYxbnN0bmc4T3VZeVBTRFh4czRXOTdaQmxMR2paTnQ3S1E5dU80THFnZkRFM0tQKzhxYTZiTktCczJpd2NoYkpYK3U5OC9zekpFdTY5czJDSHFKYXYrOXZKaDRpT0N0R1JCTTdnQnZoSGNsMkNtaE44SEJFeFh1T0Z4aS9CNkpQUnBPY0NMekJjWVhGMHlVeCt6dERLRWozYktYV2phTEFvNGE5WVQ4ME1vaHpzdTFraDJiTVN2azBNbTBTZTVnN2ZJa3gydk1Lbm1NRU8yMVZmVDhPSkhobkYvV2JSdFpwNjdXUW1jTk9oU1JjY29vNXVpN2dqUmhEYldmTDZGY2FsYkNVb3owSXVyaTNXRkhEdzJWV0hTWURhcUFvZHRwWjh1TXdGRjIydEhFSmtsSk8xZ1RBQlljVk4xNzlqaVM0T3ZlUXBvSS9rZzYzNnJpRjgvNHhqdis4WkNQdk9Rbmo1cUFBQUFoK1FRSkJBRC9BQ3dBQUFBQThBQ0NBQUFJL3dEL0NSeElzS0RCZ3dnVEtseklzS0hEaHhBalNweElzYUxGaXhnemF0eklzYVBIanlCRGloeEpzcVRKa3loVHFsekpzcVhMbHpCallzeDJCNGVpSHpqUjVkbVp4NTdNbndmdnJKcUM4d2ZQbzBqTGxidHpKeHZRa3c3QWxRT2owNS9WcTFqOTNYa3EweDRPcW5teWloMTdkU2U2Y3F1NGZyUTNwU3Jac1duVnJzeTJDc3kydDNqeitzc0RacFZUdVJVZDRFQ25sMnc1d0NqQkticGJ1UEhiUElyQUlZWjRSNUZqdzVOSHNpVjh1Zk5iZERqK1pqNEk3b2Zuc1lkSGV5d2Q5clRyc2R1bWlGWjl4L1RycktsVmF3U1g0TFp2Mk9WbUEzWUE1bmZXSDdvek9yQnR2UG5WYlhFQmwyUHMzQi95NUJXemxXdGR2ZnNQbjF6dE1mLzNqcDJpdmQ3ZDAxdmRsbHNtRHVycHI1ZUhpRU85L2FzL0hNVE1WdnkrUDNUelBjU2ZmLzV0STVsTDV4RzRWNEFOT1lDZWd2ZTFseEk0OE5tWHh6WU1MbVJQaFJDcUI0WndKZFhYSERwZ0tNWFVpVTFscUNHSHZ1V1J3QThsb29VaWlrb3B3cGx4Q2VoM2tvaTN1YmlVamlwR2RBZUxwMjJqeUNwYlJlVEFIZVVrd04xck9acFVqbTk5Z1Jqa1EwUCt4bGQwRjlIVjMydmJXTm5SS3EvbE1RVjRWNXBIcEdPZ0Fja1JXMDkybG9DWUdwRjVtcGwwcHRuUWhyZjljS0JJMlV3UnAyTnpnZ1NPYTRya3FTZEQyYXlaRjJSSm1oVG9vSVVsc0phalpQMFE2YUlValhjWkdHNmk1SUJsbmluU2tRTTNPb1lEcHhlUjJoazZtN0wvbEdWbkVsNzBZR093c21yUkZLZDlLTk55bnYxNUVhK1gvYUNvcmdvZDJsa2VYTXBFckdQYmhEcVJzbzc1aXV4RWZGNjJEWnBQVFhtWnBSWTVnQ2x1MTFaMGEySG9jTXNWaFpkTllaR25lVFZiN2tQZUVub3NUTmsyRnV0RGRqWW03N3dOM1VIcFovZkdsSzllaFViVXFHUC9Bc3pRdVhsdG05ekJlZFhLMExONk5leXdRdjAycHU1b0ZMOFZMVVFPT09idXhoQXR6SENBMU9wbDZrTmY1aVVmeWc2NVd0akxBZGFyMThjSTNZRnJ3VFQvazgzQVl5WE1ZTXg0emF3UXZHVHRHM1JDVEpQVlU1QXE2K1YwUVNVWFp2SFRRVjIyZFhrKzM4eVF6Wjl4N1ZEVVl3R29KOWx2U1V0UTFYZ0phelpDSFdlODZOQmFLOFJqMG5Nei81U3F6S3pxTExKQ0VJOTFkZDhDQ1k3WHlKekMvWmJjQTlsVG1OS0l2ejN1VlYrcnFQaFlZQ0MwOTF1SEk3NDVXZURxNmpoc0NCV2VsZHFWRytRQTBXS0ZIaVRiWTBHZWRWNnJ0bTRRN1dSMVhxN2tMaHRVTjFsdVYyNFA3Rmd4WHU3ZmFSdUVkTkc2RzRTMldMblBpL0ZiNmpKUGZmUUVoWTN1eHNESFM5RHRlUEZjdWVxMW96d3V6diswVEJicjNBLy9GdVhsOG81VjZmK01qcFh2M0dlai9WaFRROW5ueUVLUTU0a2xjMmJUbjFqWTV6RHZsVzhnNkxzSzVCQjNPcklvYjJQWktNeWZDZ08walYwUEx3aEVWZ1N0a3BvTVJveDcvM2hkWThMRU5RTm01V1FPekJRSzdYZkFCT3JsT2pFY0N3TVJsOE95bVUxK3h4SElBUDlyR0wzcFpVVmpBT3RoVmpDVVA3MVVyM0pLaE43Y3d2ZVl4Rmt0ZXYrREMrS1Fsd2NyNWtWMktBUGlXT2dYTkM1NkVTOWdkRmdGbTFZNU16YnhpNjFUWUJEYitLZ3pncTV5YXhSTEhvcFh4anErRVkyVm8rRUxkZWZHSVdZbGplV0tvbGhZaUVma01WR1JWbmtpMTBhSUZTVFNESkxXRVFnbVExZ3VNWXFGakZ6RDVIWElSNVlkb2l5UHNZdWVIUDJCc3h2T2JaVlhNZVhjUGtqRWYyQ3FpMXhUWVdFWXFUc2orcU42dmpUZnZIeDVGVW5TRVk0Q29lVVJuK2JKMWFFUWsvNFFqU0d4SXN0cm9mS1FLRndsRXpXcEYvZzVESlpXNFY4UlhVbVF3Z2lUVlFKcnpCNVJxRXNRRnNTWEozTVlKVEdId245TUV5dXhXcVUzcjNYL3o5VjFjR1B6TkFnMEo5aTR5MW1Gb0gxcjUvd09zajZBRWRNcW9PeWJJQ041a0ltdWs1K09DV0Qva0djVnQ3bVBMUEZrbGJoTVZzOC80Z1YvbHRQTEJSZmxRdGo4ODIzblpOQTFTWmlRaWJKU1Y4MWNaa1VVa1FkRUpnZWNmSVRtUmZVMDBzYWdOQ0xIODhkUlZWUlV3QkZ1Y3B4NnFGVjhlaERtR0RORExjMEtRZ1dTVTZ0WU1qbjl6RW8xQTRZVmphcm9vKzlyU0JhVHg4ZmtRUE01THlYSTM1WmFucGw2dFNIZ2pLaHEvT2MxaXd3eHBBRjZLQzhWd3RmQ1hEVTVXUlhMUGxOR0pLcHlKYXpGNU5jS0hRc1VjRjZGc2dSUnBqOVdxcHVRcFJVaTgveFBYR0hTVldxR0MzWkcwMDFoTlNna2UySEhzd1I3Vi9Dd0kxVzkveUlrc2ZzYjdVcGdlOGVLdkhXc1hMSHBWV0tLa0ticVJaeUk0VzBwYlVYUzBRaVhwaFJCNjF1c0JaaFp1YllpcGFYblpKNnIxSXZnRml2R0Fzd3FEUG9jNGk3a3UySkZESGY5WVY3Q3JsVXNDV2h2U2l4YlNZd1l0ekhoZlVvMnBFcFJqQ2gza1pnTnlYNVBBOWlLSlBWVjhpMkpQZDY3d0kxa1Y3c3dZWmRua0h1UkIyUGxzQ3A1ajV4MFcxSFBKQ0RBR2hud2FkREI0WU5vTmk5UmFvazkwSnU4QkovdE5JbGF5WFJjSXpHUHJCY3J3VkdKZGx3RFlzS0dkb2s1TGtrMkJnT21yVnBrUURRT3pZNFlUSmF2Wm9lL1dEbExpUmVpSGZJMkdWQS9oczBVMmpvVElydkd5RE9CY2xrVjBXT0VLTVk0VHU0U2svTUNCakJMeFA4ZVBMMk5tMmVTWlMyWDJVdFd4Z3VHTzdMYTIyeWpTaGU1UTF0K2srYU1JTmszMi9qQlV1N0FaWUhZUXlwR3FVNmhEVjFudk9SQjBlQXc3NUtZOUlNODl4WWxOMVpwVVVhTmsyM3N4RDV6NW9pSXU4TVRVbzk2emRweThVYm8yeUhQMUhnbG9hNjFVV1hORVFucjJqbjVlUWxrZjEyc21EaUkyTWFSVFV6dUFHdGt2MlhQS3FHMXM1OHphWklBYTlvZTVyVm1tajN0L0Q1bHZOaHVybHcwSE83UHBIb3VMRVoyc0NlejQzSURtVFppVnRDSGt6TXFkMjgyeUxxNVE2WHRnNDVxLzJSVW5uYU9sQm0waW4wN0p3SCs1Z3BkNG4yYk5xY0p6Z0YvRFRvVW9lM2g0TURnaEZJeXErckNVVDlIWmw0T1dJV05CTjZYUmxOTjBFNC9BdlpTbnBZTnFZQ2gweDAzUzRuQVlYTFQxZVFtcHk2TWkzNHdCUnhVSEZuMm1KSFFhMjQybWdoOVJsTXVxZEtYenZTbU8vM3BVSSs2MUtlZWtvQUFBQ0g1QkFrRUFQOEFMQUFBQUFEd0FJSUFBQWovQVA4SkhFaXdvTUdEQ0JNcVhNaXdvY09IRUNOS25FaXhvc1dMR0ROcTNNaXhvOGVQSUVPS0hFbXlwTW1US0ZPcVhNbXlwY3VYTUdQS25Nbnl6cW9wUDNMbTJjbXo1ODV5NWU3Y3lVYXpxTkdpOW5DQVFaZkhuOU9uVUtOSzNZbXUzS3FqV0xPV3pMWUt6RGFwWU1PSzlaY0h6Q3FpV3RPcXJRaE8wZGV4Y09NK3phTUkzTnE3ZUJIYW00Sk9ydCsvL3REaFFKdTNzRlp3UDVvQ1hpeDMyeFRDaGlQSEJKZUFzZVcvMjhwQmxzd1pwWU1mbDBOanZ0cTVOTWxzNVJTTFhoMzNoejNUc0QzYXE4eTZkdHpNc1hOanhHRzd0OXdmRG5RTGg1Z05qTy9qY0xmWkhjNDhvUVBheUtPSExkZThPa0Y3YjZWcmx3cG1zL1hjMkkvbi8wbndBd3pRVlVMVHB3ZXFxSy90Qk1HLzY3NlRmZlUyUmVnbE9yaFRMb0hxMFBESkZ4dDlySlZGR2taY0dTZmFOdDRKV0ZoNG9na1dYMGQ3L2JkWUFnMDZ1QmFFbC8yd25FalpUR0hoWHhocVdGZzI5UUZHMXgwb2hUaWlYQW1ZbUJkb2xvRXhZVW9PS0dLWklqS3VwU05qNkxENEVvR0xVZGRqVmxQVW1LRktuekgyNFVWVEtMTGtrUkdCdzFnZUI4NlVKR0RiM0VnUmIvNG9SK1ZGSFBxMXpXdEhsWE1obWY5MU55WkYwUG1GRHBwWWdaTWlYRk5ZRktkVFlyNEprWnFBbFpoV21YRUpLUkdnWUxucEowTjN2Q2dXT2xQU1JPaFlna0prajZOOFBybm9RWHNtUitlR2Q0cGxKRVEwd3FYb3BnV3RzdGluZDAwYVZwY1FXZjhwRjVhb0ZvUWlZRm5tSmF0Y1BEN2tYbHd4MWtyUWozNzFLaG1pY2JHYWtLcU5lWWxxTnBoS1ZhbGtDcmJtMEs5d2FWcHJxWEhsb2F4aHQ4cGw2TExGQ2t2UUhZQ05XaHE2dkRMRXJWZ01tanZRdTJPaG94dXhjRGw3cmwrNTFzb3N2N3BCSzVlNkJ1SDdxTHdEWVF2WEQ4TWhDMjlDNFdhTDhEOE9qd1dyY0JHUHBhMUEvMUk2Y2Nad0VaeGJ4WWtpVk8xWS9hSktjbGpCTWdjeVdOc2dGQzJmRXpzd00xVGpEbWR3V05ydU9sYWVDTzhzRmhqZjJkTnVRVnZtaS9DbFp1b3JuTUpnMlZ0UXAxSkpMUys5WXVFZ1lOSmpmU3B3eUFpeks1ZlZSY3VWcGRoZEkwdzF6eHFHR3BXeEZOK0djTWNMbXloMFZDMy9jM0pZUkp2L213M1VZWGxySXBod0VZUjFWQ0l2dWpKWWNBdUl0bGgwM3J6eG15Ky82blIxMmNpMTNOZGpSZG9qMTJEM3VEWlVSajRPczdrMm0razVjM3VEQmJUcFVqRXM3TjFnSlM3ZzRrL0o3bk5ZamZzSmUxaGt5MGczV0xMajdwVHRWQjRPVnNvTy9nNVZ6SEhEcFRXcXprdjdwdEZ3NVNHUThmN2svQ2JnWVRHdjRjemFSeitXOTFRT0w1YnNiNUsvZmFHYlZoNFcraks2Yjc1WTlNdklmZTZiMnM5OS9ocVMzMVF1WnlML3djOVB0Sk1LMEJabFA4TGh6M2VZV1oxOE9QY3FnVlRQS2RNYjAraWtJajRaWGRBZnN2c2c4Z1NrdnJDd2IxRWZsSjBENHRLN0FMb05MQURVSHdzSFlpMHE3YzhwTFJ3VDZHbzNrQmM2cFh3OVNsMWoveVRvSU9VOUpZTkdkTXEzNUpORXFHUVFWVGN6MUE0NTJLTVNSczFjSC9RSFlSeklPeGtKVUNveDdCSDNvR2ZCdUFSUFBqZjBSOStFMWNRVC9rTXVTMlJPby95U0J3SWVTWWhqSVZnVEZ5aWZEU0pPWGx5Y1gwRzRkOGJtQlBKUlJOU1FINTFpa0N4T0xtQStqTW9qeDRUSDlSMGtrdjdJb1c2YXlEOTVKZkNJQi9ra1dleFlta01HTG81am9xQlk5TFc3c1BCUk9BN0E1Rk5lcVRJWUllU0xmQ0lsdFNKWWtXeWdrak80UEY1Q1JKbEo1bGh4ZVJaUlJCN0NhSmdiWGk2TGRZU2xMSjJTTjRrd3JacW1pZVZ2RnJKSUVBcUhrMDloWmtKSzlVVFR0STV0Q2prbVZEcFlHRk4yc1NKb0V4eHNXZ204aG9BdktoZGJGNWNTYWY4UWhXRXpNc0YwQ2p2ZnQ4M1MvQzFkRmpra0xRMER6bmd4NUtCeUthZGh6bm13WHJwTm5GaHhwMVFrU3E3R1lOUW9hWFRLUncweXhWeEt4bFZYaEVnM0E4TlBtYWhUS3Bwc1NDV2wxVktZUUZSekVja2lOV3ZxRXBRQ2o2Y0NhV0pNc1FKT2IwcUVvb2tDcWtwOEtraDRsZ3N2eEh6S0x4R2lUYitzY1ZEVGZNcFFHYkpTZnl6MEtGRVZKa1hvT1RTbGxvUklKRkxxUy8rWWxyRDY0NThRUVNyeHpDcVNWV1NWVDFOZGlGemZpUlczK2lPdkNya3BqQUNia3BBK1phQU1xU3BnZmtCWGoyU2pxQmpNQ0ZPbHNvMlJqdVN4bHZtcU5XOVdOY0tXeEI3MzVDdEcxc3BXbU5pcFJod2g3VVpsZ29PN3ZyV3hBL0hyV3kzTEVjei9XZ1pTSFNrcHNIUVpFbnZzRldhZWRRaGt0UXJiaUpURHRVODUwMGRrK3hUTnFBUTFsNkh0UTd2NlBPZHVCUWVoVGM0a0xWS2MwR3hqTUNmQjdtVVFTeEhiQXNtNklFRU5jcU5DM3ZKU2w3SlQ0RzE1eFh1WjdTSm91RkJaa1VmYVVwdjI5aks3Y2dHRGZhMnBUTkVNR0VIdmhhOTBCNUtnOVlLRm94OFJySGZOWXRZNzhJVTEvcjFJZDFtempSOEU1UTY2dEFjNHlwRVkzMlJZd3drV1N4NDhESTY4N29jL1AzQXdHRlhDM09UazVNWTQzc1pPcEhQZzJ1SjNWanZCc1pBQnpCamxyc1N3Mi9GdWNEbFM0eVJmYU1rY09hMlRwUU9jbDJoMHlxdHhJMHVlZytYalBDWW1keUJ5bC84Q1laWWdlY3lVUGJGSW1vUm0wU1FBdk1vakFXMmJMY1BZbzloMXpvelJiRXhhaStleDlYZ2xHKzd6d3VUYkV1Z0tHbVlqcE1rZGZwemtCQ3g0SlRrNmRITFJlNWM3cERnNjZGQnpUSElrWTlaVXBiZ3FXY1dsMzZOcG1uQ0YwYUVSY0d6czRaWXhvME1SY002S0EzQXdhcjhrQUx6RDZRcG52VnVYN3poZ0ZlM3BEVHJNUW1qSlpNUEMvdW1OaHg5dDdCR0RJY2FjcFlwNXdGSHMzQndiQjRwSXpLN0g4NE1wNENEV3piR0hlc1l0bEdxYjZOamtIamVvSjhidWRydjczZkNPdDd6blRlOTZheVFnQUNINUJBa0VBUDhBTEFBQUFBRHdBSUlBQUFqL0FQOEpIRWl3b01HRENCTXFYTWl3b2NPSEVDTktuRWl4b3NXTEdETnEzTWl4bzhlUElFT0tIRW15cE1tVEtGT3FYTW15cGN1WE1HUEtuTW55enFvcFAzTG0yY216NTg1eTVlN2N5VWF6cU5HaTluQ0FRWmZIbjlPblVLTkszWW11M0txaldMT1d6TFlLekRhcFlNT0s5WmNIekNxaVd0T3FyUWhPMGRleGNPTSt6YU1JM05xN2VCSGFtNEpPcnQrLy90RGhRSnUzc0Zad1A1b0NYaXgzMnhUQ2hpUEhCSmVBc2VXLzI4cEJsc3dacFlNZmwwTmp2dHE1Tk1sczVSU0xYaDMzaHozVHNEM2FxOHk2ZHR6TXNYTmp4R0c3dDl3ZkRuUUxoNWdOak8vamNMZlpIYzQ4b1FQYXlLT0hMZGU4T2tGN2I2VnJsd3Btcy9YYzJJL24vMG53QXd6UVZVTFRwd2VxcUsvdEJNRy82NzZUZmZVMlJlZ2xPcmhUTG9IcTBQREpGeHQ5ckpWRkdrWmNHU2ZhTnQ0SldGaDRvZ2tXWDBkNy9iZFlBZzA2dUJhRWwvMnduRWpaVEdIaFh4aHFXRmcyOVFGRzF4MG9oVGlpWEFtWW1CZG9sb0V4WVVvT0tHS1pJakt1cFNOajZMRDRFb0dMVWRkalZsUFVtS0ZLbnpIMjRaRTBnY05ZSGdmT2xDUmcyOXdJSlV3YytyWE5hMGVWYytHV00wSG5GenBnWWdWT2luQk5RU1pNWWdKV1lscGR4aVhrbXl2ZDhhSlk2Q3lKRkp0aXpZbG5TbWJlbHVhR2dFNDNhRXFyTEhib1hYV0tsZVdpSnFFSVdKVjVTZWtYajVTUzlPT21uY1VwMTZPZGRwVE5ubUFKS3BtQ3JaVWFFbzF5NWY5QnFtR1d5blducXh2ZEFaaVJwdWtxRjZlNGJnUnJYT2pvOWlsY1dnWmJVYU4vWVZyYXFYTHhxcXhGN3YwMm5LaGpiVFB0UmRnbWw2eHB0Y0wxNUxiRUpRcVd0THAxR3hZWTVFNmticURWaFN0cHV4RTVnS3BVdHc1M3JGamowcXZRdm1PeGE1MDl2L3Jia0QzM1FqWHBkOVh5YVRCRHc4S0ZnNEJYd2pYcnd3TDVLbGV4QWhJY2w3TVlDMVRvV1AxV1orNVR3SVk4RUxQV2FnaXdWREdxUEZBMkRZOGxxNG04eFNYelFPK0dsYktBR285MU1iM3ladnV0ZGRuSVZiSy9GY2VGcm9NalMvVzB2L1o2NldkMXJJcmxwc292SzNwa3oxRDlvSExRY0hGOEpNdGlpUjF5eEdPQjdDRFpZR21MTWR6d2J1bXh6UUxaQTlUZWZBUC9OVEdsTmJmOVpzSjVDQVQyVS9sdWlUWmNhcE5KdU9GMkRscjBXSW4zK1BnL2h6dFZlWStaaHozbzVaMXZidUxrWWVWeHRJeWdSLzVtMTJCdGplZmxPVlArSnQxaE1TaDV3bkxURHBYYkdrWWRGdTh5NnY2VTJzSTdOYldHaTQvVk9KN0YrNk8yQTNHNTNpUHBZWW5PZVZ6QXRncGw1eWgzMnJUWC81enNqOXc5VnQzWTFUS3lMZFhmLzZnZjFlbld1UThXKzRzbTdNK2QzNE1GZkhQSk85eHA4LzRnVE96RThqUDVVQThzMXZ2YWJRalNQTE01aUh0T0VWaW41RGU4Z294S1EzcnlpK2xLWmI2eG9JdUNUcEhlZDN4M0xsY05VQ3o1NnB3RHJYUENzZlRKVlNTRWlrRUFtRURZSEZBcVN5TlRCOU4yRVBINW80RERBYUhuLzF6Rk9xalFieUJGZE1vR3E5TkNzZHlzVk5DS3k3YzBCUmNneHNZQlBueUtDQmZGdlpnWjVJWk9zUjF6c3BZYzlDVWtHMFByREJpTmw1QWtzbkU0L1JQTC9oYWlpRHpVMERBUVBCMEFsNWdiTEpMSUlnanpoeGV2bU1YbEhTU0dGZFNORUtGeXg0VEE2b2lsSVNPL0ZoSkhxY3dSTDAwa29FV0M5a1RUVUxGc0RRbGMzT0NIRndBK1JZd1VxZGtnT2JOR3Axd1Nnb2FNRE0xMlpaRW1idEV3aXh5ZkdXY3BGMGdXUnBJdXRBajFHb21WVE03dklaV015amFJYVJRSUlzNGkrVHNsS2JNU3FiQ3NrQ0dJZk1vTERaTk1zRmpSSVR1RW1SbUx3a3VsUmNTVWdoem5US3JKSjNVZVJJamZ6RW91blRjUllLN0xuUzloSndvM0NmOHF2TGdSS21sMFRoWWpDS21CZHM4aTJkVGlYZjc1bE9NMTVKTng2VTVhaUVRaWZCYWttMUpUQzBPZHNrcUoyRE1zUDdEb1NWWmgwREFHbENFZjFXUldOdXFVa3k2a25EQnlxVXFjdVR1TStIRXhJVFZLTnVicEZGOUtSSjl4WStacGVLclFqQVJ5TVdpaWlUMUVPWlo0UmdTakdaMU1TWjhpd1l4QTlaZ3h3Y0ZVVllVUmxuSlVxS1lpcWpaRnFwQm93bWlhSXJGSFNtc25VNGlJOVlkazVkWlVUOWxXaUhnVktwcFJDV291QTlhR1pDT2hVc2xNWENPU0RSd3d0VEU1dkVoeFFyT053WnpFc0plNUpFVjJlcG1xREpZaHFKbHJWQ1E3V2NEV2JncG9yVWhoRHh1WHhHYUVzcGRaa1VmYVVodk9pcGEwZmdHRGFTZGlqenIvaW1hMnAvWHNaL3RLa0FScEZxdW5nYTJYekhMWk8vQ0ZOYTVWN0ZxOTlJT2czQUd0OWdCSE9STGptK1FxVnJkd3lVTnp3ZUhTL2ZEbkI3L0ZsMHJ1ZXB1Y21QZTgyOWlKZEhBYjF1anc1THp3RlM1anZzUVNtbTVuUVhYdENIbnZ5NWdFNUxjamErS3Zkb0R6RW1NS21EV3hYTWx6RG55Y3g4VGtEdkpsOEY5OFdsOEpzMlliMWhWSmt5d3NHdjhhWmFrY3RreE9qVUxTRURQbWxqUFJxb2szeGw2V0xIYkZyUW10Uy9ZSzQ3ZzV0Q2gzZU90OUU4QmJsdVNveHFmTWExN3VnRjN0b0NQRE1jbFJlRmxqV2M2c29zaStTUUNTYWNJVkhZZEd0ckdwN1pLQnBJai9wc1VCT0lDeW5Cd0xSekRZYjBGMStZNERWdEdlM3FERFJpd3lacVZ4L2RPYjV2YVlsZElGQTNqUFRCWHpnQ1BPdXNuR0hYQ2dpTVNjbVN6a21RSU92RHd3OVRoYUtJQ1drYUFmN2VqTDd1elNtTTYwcGpmTjZVNTcrdE1GQ1FnQUlma0VDUVFBL3dBc0FBQUFBUEFBZ2dBQUNQOEEvd2tjU0xDZ3dZTUlFeXBjeUxDaHc0Y1FJMHFjU0xHaXhZc1lNMnJjeUxHang0OGdRNG9jU2JLa3laTW9VNnBjeWJLbHk1Y3dZOHFjeWZMT3Fpay9jdWJaeWJQbnpuTGw3dHpKUnJPbzBhTDJjSUJCbDhlZjA2ZFFvMHJkaWE3Y3FxTllzNWJNdGdyTU5xbGd3NHIxbHdmTUtxSmEwNnF0Q0U3UjE3Rnc0ejdOb3dqYzJydDRFZHFiZ2s2dTM3LyswT0ZBbTdld1ZuQS9tZ0plTEhmYkZNS0dJOGNFbDRDeDViL2J5a0dXekJtbGd4K1hRMk8rMnJrMHlXemxGSXRlSGZlSFBkT3dQZHFyekxwMjNNeXhjMlBFWWJ1MzNCOE9kQXVIbUEyTTcrTnd0OWtkemp5aEE5cklvNGN0MTd3NlFYdHZwV3VYQ21hejlkellqK2YvU2ZBREROQlZRdE9uQjZxb3IrMEV3Yi9ydnBOOTlUWkY2Q1U2dUZNdWdlclE4TWtYRzMyc2xVVWFSbHdaSjlvMjNnbFlXSGlpQ1JaZlIzdjl0MWdDRFRxNEZvU1gvYkNjU05sTVllRmZHR3BZV0RiMUFVYlhIU2lGT0tKY0NaaVlGMmlXZ1RGaFNnNG9ZcGtpTXE2bEkyUG9zUGdTZ1l0UjEyTldVOVNZb1VxZk1mYmhrVFNCdzFnZUI4NlVKR0RiM0FnbFRCejZ0YzFyUjVWejRaWXpRZWNYT21CaUJVNktjRTFCSmt4aUFsWmlXbDNHSmVTYks5M3hvbGpvTElrVW0yTE5pV2RLWnQ2VzVvYUFUamRvU3Fzc2R1aGRkWXFWNWFJbW9RaFlsWGxKNlJlUGxKTDA0NmFkeFNuWG81MTJsTTJlWUFrcW1ZS3RsUm9TalhMbC8wR3FZWmJLZGFlckc5MEJtSkdtNlNvWHA3aHVCR3RjNk9qMktWeGFCbHRSbzM5aFd0cXBjdkdxckVYdS9UYWNxR050TSsxRjJDYVhyR20xd3ZYa3RzUWxDcGEwdW5VYkZoamtUcVJ1b05XRksybTdFVG1BcWxTM0RuZXNXT1BTcTlDK1k3RnJuVDIvK3R1UVBmZENOZWwzMWZKcE1FUER3b1dEZ0ZmQ05ldkRBdmtxVjdFQ0VoeVhzeGdMVk9oWS9WWm43bFBBaGp3UXM5WnFDTEJVTWFvOFVEWU5qeVdyaWJ6RkpmTkE3NGFWc29BYWozVXh2ZkptKzYxMTJjaFZzcjhWeDRXdWd5Tkw5YlMvOW5ycFozV3NpdVdteWk4cmVtVFBVUDJnY3RCd2NYd2t5MktKSFhMRVk0SHNJTmxnYVlzeDNQQnU2YkhOSWRmYzlwc0o1LytCTWRwd3FVMW0zdzhYUFZhK1J4SnVNTmhTQ1Q0NFhINzdhM2hZZVJ3dG8rTDBkZzNXMW5oaVRpN2RZVEU0S0xUWitodDFXRzczQ0hyWTlBSStsdU52cnY0VTdNRk9IaGJpV3pMdTFNL0I2ZzRWNzJRMjdmVzBWVGQydFl4c1N6WHh0c21IdFR5bENmdURlNmV1Tzl5cDdFOGRUNmJ0WUUyZisyM2IrdjZVd0owMno3cXlldnBWZWFuRmp6VTFwYWVmNjJyT2NIbVBKLzNFYWk5ai9GQXB5NzFVU3lOVCs5S21MUE0xRGxlYWc4cnpTb1UveUExdFM2UkRGcTRjY0xLb2NLNVQ0b3VacTdLV0hQMGRKQnNQNU16L252SytOMVZQTEtscmlDTHlZRC9KaU04Zmx0c1NCVWxrRVlUNVE0T3htV0dyWEdWQWZGa0VWZ3MwRFFmLytUVS93QUR2SVVHN0dXdzBSU3hYWVM4cW9xdEl6WEFvd2dvK0pZVkhvdG11TE5KQXAxeFFNajE4U2hRcE5jU3htRzBpdG10aFdyb29saURpNllWUFVhTkNoS2V3R0dvbFVtRTU0NkJPS0pZak9tU0FNUFBnVExUb2x3QWVDWTk4RXFSQnd1akhySVJ4ZHAxQ3BGamttSkFuN2k0dkNaUktDRE5peDVsSTBtY1g0WjhGNzVMSnFKUndJOWo1Z1NKVlFpUVNyWklnZkJ4ZVZrb0pGU3ArQkVLcXpNb3FyQWpGVFM2a2pIQnBKRXhvQ1JWZjFyQSthQXFUWmJEWUVCMENKcGRGeWNZakZUaVNTRzJEbVMyYTVpZ3pZc1BGSk5PVGVndm1TTGluaUZkNlpFMDE0a2dzeCtKR2x1Q0FsN1UwcDBPeUljb2d1VVNhbCtsVFIram8vNWNBdGNRZXdNeVdNU2xDVDcvWWFDWGxnS2RVdnZRUllwNUxuaFZCeldVb1NWQlJRbEV6bGNKQk9MMWtTSXNVSnpUYkdNeEpOSG9aYkViVW9qN3JwRWNUdWhxVFZuUkJVMUJwUkVsNm1ZNWk1RG1pcWNzNUhicTNjVzRVTUdDd3FVVHNzVUxSQ0JVanMxa05PcVpBVVlRa1NLRVNxOVJQc1dRV2lQN2pEbnhoalV0dml0SzQ1T0VIUWJtRFN1MEJqbklreGpkYlJWQlhZd1ZXY1BoeVAvejVBVlFQbDVLUEhtY2JPY21yWHJleEUra2NsU1A0UkE1UDlFcllxVjZHb1N2aDUzYWlnOWlWOEhTeEFCcm9SOVlKMmRVQTV5VnNyS3h0YUxlU3BHcldONCtKeVIwTSs5bkZ0TE1sankxdDNOSTZraWFwVmpRSmtLeEpSdnRheTdGQXN5aTdyQzFqdmxnVWx1cVdXSDlkaVYxL0d6aVozbE94eE1YTld1Nmd6Yzhtb0trd3lSRnhGWWJSdk54aHJZdEZCMnRsNG9BcHpOVTNWYkdxUzFhQlhlUWtZTHZSUkl4cWd4b2JvbjQzUW9xUXJWb2NnSVBtV2lZQkloMU9WNkszSUowaXJTM2xOYU5aakN0Q3JQcW5OMkNGTG15eXdSOHd5SlcvVkRFUE9BaXNHd2JqUUJHSjRTOVp5RE1GSE1qM08vWlFqNGlGUW1FWk1YakVJaGJ2emxiTTRoYTcrTVV3anJHTVoweVFnQUFBSWZrRUNRUUEvd0FzQUFBQUFQQUFnZ0FBQ1A4QS93a2NTTENnd1lNSUV5cGN5TENodzRjUUkwcWNTTEdpeFlzWU0ycmN5TEdqeDQ4Z1E0b2NTYktreVpNb1U2cGN5YktseTVjd1k4cWN5ZkxPcWlrL2N1Ylp5YlBuem5MbDd0ekpSck9vMGFMMmNJQkJsOGVmMDZkUW8wcmRpYTdjcXFOWXM1Yk10Z3JNTnFsZ3c0cjFsd2ZNS3FKYTA2cXRDRTdSMTdGdzR6N05vd2pjMnJ0NEVkcWJnazZ1MzcvKzBPRkFtN2V3Vm5BL21nSmVMSGZiRk1LR0k4Y0VsNEN4NWIvYnlrR1d6Qm1sZ3grWFEyTysycmsweVd6bEZJdGVIZmVIUGRPd1BkcXJ6THAyM015eGMyUEVZYnUzM0I4T2RBdUhtQTJNNytOd3Q5a2R6anloQTlySW80Y3QxN3c2UVh0dnBXdVhDbWF6OWR6WWorZi9TZkFERE5CVlF0T25CNnFvciswRXdiL3J2cE45OVRaRjZDVTZ1Rk11Z2VyUThNa1hHMzJzbFVVYVJsd1pKOW8yM2dsWVdIaWlDUlpmUjN2OXQxZ0NEVHE0Rm9TWC9iQ2NTTmxNWWVGZkdHcFlXRGIxQVViWEhTaUZPS0pjQ1ppWUYyaVdnVEZoU2c0b1lwa2lNcTZsSTJQb3NQZ1NnWXRSMTJOV1U5U1lvVXFmTWZiaGtUU0J3MWdlQjg2VUpHRGIzQWdsVEJ6NnRjMXJSNVZ6NFpZelFlY1hPbUJpQlU2S2NFMUJKa3hpQWxaaVdsM0dKZVNiSzkzeG9sam9MSWtVbTJMTmlXZEtadDZXNW9hQVRqZG9TcXNzZHVoZGRZcVY1YUltb1FoWWxYbEo2UmVQbEpMMDQ2YWR4U25YbzUxMmxNMmVZQWtxbVlLdGxSb1NqWExsLzBHcVlaYktkYWVyRzkwQm1KR202U29YcDdodUJHdGM2T2oyS1Z4YUJsdFJvMzloV3RxcGN2R3FyRVh1L1RhY3FHTnRNKzFGMkNhWHJHbTF3dlhrdHNRbENwYTB1blViRmhqa1RxUnVvTldGSzJtN0VUbUFxbFMzRG5lc1dPUFNxOUMrWTdGcm5UMi8rdHVRUGZkQ05lbDMxZkpwTUVQRHdvV0RnRmZDTmV2REF2a3FWN0VDRWh5WHN4Z0xWT2hZL1ZabjdsUEFoandRczlacUNMQlVNYW84VURZTmp5V3JpYnpGSmZOQTc0YVZzb0FhajNVeHZmSm0rNjExMmNoVnNyOFZ4NFd1Z3lOTDliUy85bnJwWjNXc2l1V215aThyZW1UUFVQMmdjdEJ3Y1h3a3kyS0pIWExFWTRIc0lObGdhWXN4M1BCdTZiSE5JZGZjOXBzSjUvK0JNZHB3cVUxbTN3OFhQVmErUnhKdU1OaFNDVDQ0WEg3N2EzaFllUnd0bytMMGRnM1cxbmhpVGk3ZFlURTRLTFRaK2h0MVdHNzNDSHJZOUFJK2x1TnZydjRVN01GT0hoYmlXekx1MU0vQjZnNFY3MlEyN2ZXMFZUZDJ0WXhzU3pYeHRzbUh0VHlsQ2Z1RGU2ZXVPOXlwN0U4ZFQ2YnRZRTJmKzIzYit2NlV3SjAyejdxeWV2cFZlYW5GanpVMXBhZWY2MnJPY0htUEovM0VhaTlqL0ZBcHk3MVVTeU5UKzlLbUxQTTFEbGVhZzhyelNvVS95QTF0UzZSREZxNGNjTEtvY0s1VDRvdVpxN0tXSFAwZEpCc1A1TXovbnZLK04xVlBMS2xyaUNMeVlEL0ppTThmbHRzU0JVbGtFWVQ1UTRPeG1XR3JYR1ZBZkZrRVZnczBEUWYvK1RVL3dBRHZJVUc3R1d3MFJTeFhZUzhxb3F0SXpYQW93Z28rSllWSG90bXVMTkpBcDF4UU1qMThTaFFwTmNTeG1HMGl0bXRoV3Jvb2xpRGk2WVZQVWFOQ2hLZXdHR29sVW1FNTQ2Qk9LSllqT21TQU1QUGdUTFRvbHdBZUNZOThFcVJCd3VqSHJJUnhkcDFDcEZqa21KQW43aTR2Q1pSS0NFMGtTWjlkaEg4V3ZFc21vMUpDMVZreEtxcVNDQitIbDVWUlFvV0taRnJGS1JXMnlZV1VFUzZOaElrcm9WSkxBY0VSS2xoc2lBNEI4d05GYnVXUkNod2RNa09aRVJzdUJrMDBzWWZlY0Rtb05kV0lJNnNjaXh0WmdvTlpQaVdWUGNyR01xUFNwNDdRMFM4QmFvazlicG10WGxhbkhONkVvanNoc3N0ekdSTkJ2NFFLSlptVC93MGNUTk5MaHJSSWNVS3pqY0djeEorWENXWnpVQk5Qc0NpMEl0a0FaWEttWU1lTDlQT2ZTanRTVzJyelVJRmk5QzlnQ09oRTdMRkMwWWhVTndscWFCc3I5VkhNbU9XZUJMa0RYMWpUVVJIZUFSemxTSXh2YW9vZ2lmNGxEejhvQnpocXVSLysvRUNsdHhOUVMwTnpVbE9OODZjN3lZbFVwN3BVeG56SlFkR3o2anc3VXMvdHJDWUJXKzFNVm9sWjBaR3cwYXUrb2QxM3h1cVh4OFRrRGxWRksyTzJ1VmJiYklPbkkybVNYTjhUVnRpdzlYVXdIWWtzOTdxYUw1cm9yMkJCUjFOWk1sRENNZ1k0ajdzTWJ0WnloNmZLTlFIN3JBNWluWktad05iRXAzSkZCMTZiZzlpcWVQWWxxd0N0ZEJJd1dzMkNkTEYwY290ajBhR0l2a3pXRlM0Sk1PaHd1ckpaTE5WRldYdENoMW5LK2l5WitxYzNRYzBzbEpoQ0ZmT0FnN2pEeWNZZGNLQ0l4SXgxUEQrWUFnNXN1ek9rcWVlNzZUbHRkOGRMM3ZLYTk3em9UYTk2elJzUUFDSDVCQWtFQVA4QUxBQUFBQUR3QUlJQUFBai9BUDhKSEVpd29NR0RDQk1xWE1pd29jT0hFQ05LbkVpeG9zV0xHRE5xM01peG84ZVBJRU9LSEVteXBNbVRLRk9xWE1teXBjdVhNR1BLbk1ueXpxb3BQM0xtMmNtejU4NXk1ZTdjeVVhenFOR2k5bkNBUVpmSG45T25VS05LM1ltdTNLcWpXTE9XekxZS3pEYXBZTU9LOVpjSHpDcWlXdE9xclFoTzBkZXhjT00remFNSTNOcTdlQkhhbTRKT3J0Ky8vdERoUUp1M3NGWndQNW9DWGl4MzJ4VENoaVBIQkplQXNlVy8yOHBCbHN3WnBZTWZsME5qdnRxNU5NbHM1UlNMWGgzM2h6M1RzRDNhcTh5NmR0ek1zWE5qeEdHN3Q5d2ZEblFMaDVnTmpPL2pjTGZaSGM0OG9RUGF5S09ITGRlOE9rRjdiNlZybHdwbXMvWGMySS9uLzBud0F3elFWVUxUcHdlcXFLL3RCTUcvNjc2VGZmVTJSZWdsT3JoVExvSHEwUERKRnh0OXJKVkZHa1pjR1NmYU50NEpXRmg0b2drV1gwZDcvYmRZQWcwNnVCYUVsLzJ3bkVqWlRHSGhYeGhxV0ZnMjlRRkcxeDBvaFRpaVhBbVltQmRvbG9FeFlVb09LR0taSWpLdXBTTmo2TEQ0RW9HTFVkZGpWbFBVbUtGS256SDI0WkUwZ2NOWUhnZk9sQ1JnMjl3SUpVd2MrclhOYTBlVmMrR1dNMEhuRnpwZ1lnVk9pbkJOUVNaTVlnSldZbHBkeGlYa215dmQ4YUpZNkN5SkZKdGl6WWxuU21iZWx1YUdnRTQzYUVxckxIYm9YWFdLbGVXaUpxRUlXSlY1U2VrWGo1U1M5T09tbmNVcDE2T2RkcFRObm1BSktwbUNyWlVhRW8xeTVmOUJxbUdXeW5XbnF4dmRBWmlScHVrcUY2ZTRiZ1JyWE9qbzlpbGNXZ1piVWFOL1lWcmFxWEx4cXF4Rjd2MDJuS2hqYlRQdFJkZ21sNnhwdGNMMTVMYkVKUXFXdExwMUd4WVk1RTZrYnFEVmhTdHB1eEU1Z0twVXR3NTNyRmpqMHF2UXZtT3hhNTA5di9yYmtEMzNRalhwZDlYeWFUQkR3OEtGZzRCWHdqWHJ3d0w1S2xleEFoSWNsN01ZQzFUb1dQMVdaKzVUd0lZOEVMUFdhZ2l3VkRHcVBGQTJEWThscTRtOHhTWHpRTytHbGJLQUdvOTFNYjN5WnZ1dGRkbklWYksvRmNlRnJvTWpTL1cwdi9aNjZXZDFySXJscHNvdkszcGt6MUQ5b0hMUWNIRjhKTXRpaVIxeXhHT0I3Q0RaWUdtTE1kendidW14elNIWDNQYWJDZWYvZ1RIYWNLbE5adDhQRnoxV3ZrY1NiakRZVWdrK09GeCsrMnQ0V0hrY0xhUGk5SFlOMXRaNFlrNHUzV0V4T0NpMDJmckx0bGh1OXdoNjJQUUNQcGJqYjY3K0ZPekIwdndYNGxzeTd0VFB3VFlORis5aytuNHV1UWhiM2VucFVVMjhMZkpnS1U5cHd2N2czcW5yRG5jcSsxTlh2emw1V05MbmZ0dTJ3b3NsOFBHdEtsdDhySlpEV1RWY1UxTWF0ZGVkNWd4WDkzanFEbFdmcnI0ZmxiSU9uQnpWMG1SYTMrdVV4YnpHNFVwelVIRmVxZVFYbDV1VmluVEl3bFgvL3NLNVR0blBIekZ6VlFHaklqcUtaR05vbmRsZVZOcjNKZ1orekNLS3lBUDlKSE5CZjZSUGZmNkRTZ1luVXJ3WndtYUM1U3VWL3NDeXdvWEFTb0dteVJySi8xd1ZQckVBN3lGQmM2QnBORVVzWE9sTlV0bFRTTTFzS0JrUlJpVjFaSnFOWDBqWUVCTTZwWUtTMmVCVE91aXFiT3pRS1dhYnlQWjZxQlV2aWdXSXJrSmc5Q3hTUkg4c3pEQ1JDa3NhbFFVMkxqSkVnS21LWWxGczV4Y0FsbW9WSThKZlJjUjRSSzJJY1hZR3F4TWJFM0k5bE9WRmpsRUJJYTYwK01XTG5CRXFZTXdLSnFIaXg5cFZSbFVTb2Q1WVNnbVRVVDZGaWdiRGdTWVpJc1NDaWRKUk84c0lEZ0h6QTBHMjZKRUp6S1ZHemdjWU5OSEVIazhjU3lPRm1jckx3SkVsT0loaFZGREpURHBlSmtBdHNVY3REVlZOanJqeVhMN2NDR291TThsdU9xUTRvZG5HWUU2Q2cyU2UwSndjTWVPQ3B2RENpMlNqbmFFeEpEdzk2TlhPdjRCQm56Uk1vV2dBdWs4MTloTXpaZ25uUWU3QUY5WmdzYUFXa2FkdDh2Q0Rjb0JqbHYvWUQzOStJRTFiUVRRazJRRG1ZbmlTazVLYTlLQ1crZEpIUi9MTjdhd21BUmhkNlVYYzZGTGYwRTZtSUxrRFNtdHFtV2ZpRkNSTjR1bDdZdnJUamF5aW8wTFZXbEZYZ3M2a01nWTRTMjNKSFVTYTFBU1VNNm9odWNNbmhZcU9oMklWSmF2WXFuWVM0Tld2cXNRZWJuRXFPaFJCVkxPdXBDdlFXMUJkM0hxWGJERFVQNzJwNkZYcFNoTzc0a0FSaVlrcldjZ3pCVm55ZFRoMlZZOWloYUxRd3pyMnNaQ05yR1FuUzltOEJBUUFJZmtFQ1FRQS93QXNBQUFBQVBBQWdnQUFDUDhBL3drY1NMQ2d3WU1JRXlwY3lMQ2h3NGNRSTBxY1NMR2l4WXNZTTJyY3lMR2p4NDhnUTRvY1NiS2t5Wk1vVTZwY3liS2x5NWN3WThxY3lmTE9xaWsvY3ViWnliUG56bkxsN3R6SlJyT28wYUwyY0lCQmw4ZWYwNmRRbzByZGlhN2NxcU5ZczViTXRnck1OcWxndzRyMWx3Zk1LcUphMDZxdENFN1IxN0Z3NHo3Tm93amMycnQ0RWRxYmdrNnUzNy8rME9GQW03ZXdWbkEvbWdKZUxIZmJGTUtHSThjRWw0Q3g1Yi9ieWtHV3pCbWxneCtYUTJPKzJyazB5V3psRkl0ZUhmZUhQZE93UGRxcnpMcDIzTXl4YzJQRVlidTMzQjhPZEF1SG1BMk03K053dDlrZHpqeWhBOXJJbzRjdDE3dzZRWHR2cFd1WENtYXo5ZHpZaitmL1NmQURETkJWUXRPbkI2cW9yKzBFd2IvcnZwTjk5VFpGNkNVNnVGTXVnZXJROE1rWEczMnNsVVVhUmx3Wko5bzIzZ2xZV0hpaUNSWmZSM3Y5dDFnQ0RUcTRGb1NYL2JDY1NObE1ZZUZmR0dwWVdEYjFBVWJYSFNpRk9LSmNDWmlZRjJpV2dURmhTZzRvWXBraU1xNmxJMlBvc1BnU2dZdFIxMk5XVTlTWW9VcWZNZmJoa1RTQncxZ2VCODZVSkdEYjNBZ2xUQno2dGMxclI1Vno0Wll6UWVjWE9tQmlCVTZLY0UxQkpreGlBbFppV2wzR0plU2JLOTN4b2xqb0xJa1VtMkxOaVdkS1p0Nlc1b2FBVGpkb1Nxc3NkdWhkZFlxVjVhSW1vUWhZbFhsSjZSZVBsSkwwNDZhZHhTblhvNTEybE0yZVlBa3FtWUt0bFJvU2pYTGwvMEdxWVpiS2RhZXJHOTBCbUpHbTZTb1hwN2h1Qkd0YzZPajJLVnhhQmx0Um8zOWhXdHFwY3ZHcXJFWHUvVGFjcUdOdE0rMUYyQ2FYckdtMXd2WGt0c1FsQ3BhMHVuVWJGaGprVHFSdW9OV0ZLMm03RVRtQXFsUzNEbmVzV09QU3E5QytZN0ZyblQyLyt0dVFQZmRDTmVsMzFmSnBNRVBEd29XRGdGZkNOZXZEQXZrcVY3RUNFaHlYc3hnTDFMQzRHcHI3RkxBaEQ4U3N0Um9DTEZXTUtRK1V6Y2hpeVdvaWIzSEZQTkM3WWFFc29NWmpYVXl2dk5sK2ExMDJjdlZyc011Szlsam91VEhiNjZXZjFiRXFscHNwTXczMWtUeEQ5VVBNZDlBTUZzZEhyaXpXMXpxdklqWlVJRHNJZEZqYTZpeVEybUhCREtYSFkrVWhOMEU0c1AvWnRvWUo2NzIzek9Wa2h6YVpnUTllRUdyYjJQeG00b292YnJTTWtFZnVhdVdXZDRwNTVvTkNteTNubmI0TjF1R2c0eW02VktTWFRtYlhKNnMrYU1WaW9ldjZrUkdETmZIc2lOdUorNWFuUzBYMTd0V3g3bFRjd1BkWU8rckY5eWcxWExJbi94M09jT1hyL0hkUGd6Vzloc3VQbGZyMTFXa04xZTNjSDUyd1U1T0hINXZ3VHRuTmZUWkNkMFowMCtFcmtvZjBwcUZQdnZrSSs2TStiQTZZL05UMnpvTVYrR0JqdGJFb3JYaEFjNXhwTkVVczgvMWpaUHVUelB2QzhyZmRRUThxV092TThjRENvUEJOMEIvMHc4c0ZKV1krMkVWbFlZYUpWRmpJZHIzc3BlcDNScG5aWHc0SXZBMUN4V2Ryc1NIeXd0YzdxZUJRSzk2VFN2di9jRmU5c0dRd0xVR01Tdk9LWjdab3FTV0pVSW1nOHdwWXNLeEFFU3BEeEYzL0dQTURHS1lrR3pxMG5RTUZrci9Gb0lrbTlsaWJXSDdJdlNiK1pZQXU2ZHVGdkFnOEU1S29mQ1N4QnhVTk5VYURYUEZjZE53SWFpNFRRZ2NXSnpUYkdNeEpjS0JHdUZUUWtFWDAwaFR3ZUpGc01ESTBOT3pqUDJTNEdqQmtraUwya0o5b1BxbEpUdHJITElFOHlCMzR3cHBIYWxJZzJZamtsSDVRRG5CazhSLzc0YzhQL1BlWFFyNXljV0c4REU5eVFzeGlOdkl5WC9vbFJQNjRuZFVrNEpiSzVGc3ptd25BYURJa2JOT01EaHl0K1pBbVpmTTkwT1FtUWxiQnkyKzJTWndJMnFNNVcwTkpkRHJrRHNGY1ovcDg2YzZKM0VHVzYwU0hLK3RKVEpGVjRMT1pDZGduUHkwU3luTDJCaDJLQ09kQU1kS1Y4UzJvTGd0ZFNUWlc2Wi9lMEpLZUVhM1VIWENnaU1RNGxDemttUUlPRkpwUmlhcm5wT2xKWlVsWHl0S1d1dlNsTUsxT1FBQUFJZmtFQ1FRQS93QXNBQUFBQVBBQWdnQUFDUDhBL3drY1NMQ2d3WU1JRXlwY3lMQ2h3NGNRSTBxY1NMR2l4WXNZTTJyY3lMR2p4NDhnUTRvY1NiS2t5Wk1vVTZwY3liS2x5NWN3WThxY3lmTE9xaWsvY3ViWnliUG56bkxsN3R6SlJyT28wYUwyY0lCQmw4ZWYwNmRRbzByZGlhN2NxcU5ZczViTXRnck1OcWxndzRyMWx3Zk1LcUphMDZxdENFN1IxN0Z3NHo3Tm93amMycnQ0RWRxYmdrNnUzNy8rME9GQW03ZXdWbkEvQUN2K3UyMEtZY09RWTk1SnNMZ3k0M0tQSTJ0RzZTQ3g1YzkrdDEzZFRMcGt1YmVnVThmOVlhKzBhNC8yS0t1ZUhYZGJ1ZGU0TVlLanpWdnVEd2U1ZzBkVTFMczQzRzEyaFN0UG1FMjI4ZWRoYnkrZlBqQmJYK2pZd1lMSlREMzNxdUo1RXZ6L0FBTjBsZER6NTRFcXVqNDdBZkR1eXNHbzNxYkl2RVFIZDhvbGFKcmFQWHpoMWxsVzFtZ1ljU1VmYU50dzl4OXA5dkQzbDJEdmRiU1hnNHNsb09DQ211SHcxdy9KaVpUTkZCUUNaaUdHdUIwb0ZsMTNvUFJoaUg0bFFPSnJBWWFsU0lRcE9VRGNZb3E4NkZxRFVxR1Q0a3Qzb1BhWGREcHVwaUZVUk1MVTJXSWRGaG5aZ2NnWk5ZVmkyOURvWkdIVytYZFVPWXE1ZU9XWElvRWpaRnhUZ0dubVIvYU1DZGVQWjdhWlVacC9qZWptbkJiQjZWZVNkT1lKa1oyMVdhbm5ud3Z0NWxlT2dCYktFSmQrdFdib29naVpDTmNQakVaYVVEWnFoc1dtcEpIZU1TaW1uTjRZbDUrY0Fwb05pMkRoR1dxaGlCNTNhcVNVeXRYa3FvQ20vem9XR0xBdTJxcXF0UnJxNlZpdjVrcW5QWElSNnV1ZjdJbUZ6ckNBVGhtWG9zaitLaGVCemM1WmFWVENSdXZtcm1GNWFhMmJSOEsxN1p5YUx2dHRtOW00T202YnpvbGw2cmxGT2hwV21leUNLV3RZa01iNzVYZVAydnRsdUdOdG8rK1Z3TUtWeDc5WGtnclZ3QVFYYWZCY0NTc3NjTU02THV3VXdoQmpLREZaRlpONE1jVVpkemNxcmgxM3g2OVk5WVpNM2NqMG10emR2R0JWcTdKd3lvNjE3c3V2ZVRZV0RqUXZkN0UvbCtiOEdzcGhYZWl6Wml4TDVlL1F1ZGxNTXRLNE9iRHp6RXdiMXUxWVBVY2RXYnBpV1YyYTA2dHBUUnEyWWVIc2RXUWZmenAyWkVWTHBXM0cyVENiMjYxd1FmMnZJbmxVWFZyYVVvRktNSTlydS8vbXdMUlJsWnl4eldLLzVxNVl2U1k4Y2g1dWJ5Wm9YTWVHWEt3L2ZaTU5lRlRRUWp6MVUvQnVwblMvUXRzTGQxUjI0N1g1elNISGJMVGVhdkVKVitRWmN5MlduSG5GYUc3SG43ZHNXTzVMZHd5MGpIbUJQVmJqRFdNOVZ1ZHBDYTl1eVBnT3FaYnkyWnA4ZUZ3dUZ3VjlXTVEzL1BkaVA0VE9VamE4bzY0eWo0cWhrMzFMOWt4T2ZjN05LMWI0U3poY0RoYnRMNnN1SXVzbDJUUDljZWVIZkgzYzN2dElOdkMySnFabFkzOXkyY1pnVG9JRDlma2xjejVyRG9LbWdMOENOZkF6aVl1Z0F4VURoZ3pXaVc2ZzhhQUdaN01Oc3dSd0lYZmdpMm9nYURVSjBpWVBQeWdIT1BwSEVQems1d2Z5KzB2cFdoaSsxUEFrSjBBTTRnYVpFVVJEcmYwdk83eEpRQkc5ZGpva0ZrZHdaMFBJSFlib1JOQzhMNG9KV1ZJVmFhTkVMRDVrRlRuY0lseVE1OFdHSEZDTWxmbE5HU2R5aHg2aU1Tb0oyT0VhR3pLWk54cUxoWE9VeUNxTWg4WUU0REdQRkxHSFc5Q0lEa1VzRVpBVTZjck9FRlFYUkpJa0d5bmNEMjlpS0VkSGdnU1NPRkRFRDNiaWwvRDhZQW80T0tRbFR3Sko5SmhTS0NjY3BTcFh5Y3BXdXZLVkpBa0lBQ0g1QkFrRUFQOEFMQUFBQUFEd0FJSUFBQWovQVA4SkhFaXdvTUdEQ0JNcVhNaXdvY09IRUNOS25FaXhvc1dMR0ROcTNNaXhvOGVQSUVPS0hFbXlwTW1US0ZPcVhNbXlwY3VYTUdQS25FbXpwczJiT0hQcTNNbXpwOCtmUUlNS0hVcTBxTkdqU0pNcVhjcTBxZE9ERHV3OW5lbzBHN284aXJKUjNZcDBpcit2MjhCeEhTdjB6dGV6L3NCb0pjdFdwMVcwWjlGSmJVdTNwbGU0WjdldHFzc1hwbG04Y0JYMUhhenlMV0M0YWdrckpubjNNTndFYXhkTDV2alhNVjUwa1NkcnJtallNbDdJbTBOUFhPWFpNV2pScUJ0bUs3ZXROT0FFcVdNemRQREROVjdCc25NakJOZmE5dGx5dW9NWGRKREE5MW14d3BQL1UyVGMzellIeXBPWGF3NDd1bkRleHFkWUYyNnZ0KzA3MjROMy8vZDlPcnpzOGJhQm04K052dlR6OWJuQitjWU5QL1owMjNQcnB3WmorNGYrMk5sNDV4bDQvNkZXbVdmMEZSZ2FjNjVCcDJCbzJlVGhtbm9QYm5hZlo5dFVDS0dBamlHbjRXUVhXZ2JHaDVvRjZCNkptakhvbVljb0VtYVBhd20yT0JnNnBhRWo0MktOV1piZmpYeTlXTnBlUEE3R0lXQXhCdG1XaXFZWjJSY09yaW5KMTRHTzdlamtXTm00eHVLVVl4WG5HWVZZanNXZlo5cDFTVmFJaC9rbjVsaWtlV2JtbVZ0QkNWaUdiRzdsbzJWNXhNbVZoSFRhdVJXZWp0V3A1MVI4SHVibm4wNEZDdGlnaERKbEtGNklKcXJVb25BMTZ1aFJFV0k0NlZKdTRyWG1wVWRsQ3RlbW5CWkZKcEdoZGxVYWw2VU9WWnRuT0tScUZLUndFZi9vYWxtdVpUYnJUNlBpQmVldFFhMXFHYWk4OHVRQXJHaWhHdXhPVEpZbTY3RThhZWtac3o0Tld4cXcwTjZFcEdPdFZ1c1dzV2c1cUMxT3VYN0daalpTS21YaXFXd3Frc2V5U29XTGw3ZFkyaU5oZFVzNU1DUmcxQ3JwYTdaS2ZWbmFsVTRlbUVlNVJNbm5tbzFuMG9nV3ZVYWQrK09aeWNJVnBsRytZbWlya2c3SGFsVEVwZkdMWlk1d3ZUZFVlNTRoM0tXMHBsM01VMmYvbmxueFlVWHk5UEt2WjNwNkcxRFhla2F3a2M2V052Rk9PVnRtckpKcCtqWjBUVUVuZWFhLzgrbVVkSlJzMnR1Y1B6K28vRkkyTTdOcXA3eFR5MFdUUFFvM3JXZlJ6WG5zRWc3M1dsYWVuU0NUQjY5SzlqQnQyelk3bi9uMHFWYUx0TnJVWDdIL3EyYzJjaHUzRFE1NWU0UkQyTTBCT1drMlBVKzl6UlJ2ZDVUTjRYeC9CWENpTEZjT3h1VVgyYU51NVphN21ubmwyNEN4U3VFTjNURUY0cFVybmlyam9EUDZRem5nMUUyUUEzZmNVYzRQYVUvdGQ2bFl4OTVuSG5uOFlQenh4N011UEZpMmgzcjM4dEM3bGtEenBYSWMvZld1NVJ2c0hjcGo3ejFhWm10TDIvZmtuelg5dHdldDBudjVsZitNZmtHQXN3LzlENUcvWDlBZFdjc3YvZS8ySDNSSDQvcXpERHBjMTcrR3JBS0FBVndZQVF2NEVNK3Q3M3ZvVUFUMUdNaVFWWUNCVzh2YmhpSTRSMEdLWkVOMUNjQ2djV2JIdnc1cTVJTTRVTVFQaUdlYlBDVGdCMVBBd1FSTitKRVA1dTZHT013ZDZtakl3eDc2OElkQXJGWkFBUUFBSWZrRUNRUUEvd0FzQUFBQUFQQUFnZ0FBQ1A4QS93a2NTTENnd1lNSUV5cGN5TENodzRjUUkwcWNTTEdpeFlzWU0ycmN5TEdqeDQ4Z1E0b2NTYktreVpNb1U2cGN5YktseTVjd1k4cWNTYk9telpzNGMrcmN5Yk9uejU5QWd3b2RTclNvMGFOSWt5cGR5clNwMDZkUW8wcWRTcldxMWF0WXMycmR5cldyMTY5Z3c0b2RTN2FzMmJObzA2cGR5N2F0MjdkdzQ4cWRTN2V1M2J0NDgrcmR5N2V2MzcrQUF3c2VUTGl3NGNPSUV5dGV6TGl4NDhlUUkwdWVUTG15NWN1WU0ydmV6TG16NTgrZ1E0c2VUYnEwNmRPb1U2dGV6YnExNjd3LzhzaWVUVHZQajljMDgvamJ6YnUzdnp5NForcjI3UnQ0OEpqRGlmTTJmdnhsY3VXL204TjhycHk1OUpYMm9QZStmWjNsSGUyOHVYZi9WNGtEL0c0dzQxZE9NZSt2WEhxVlA5amplSitTdXZJNzlFOW1aNTh0djhueTVtM2puMGxnc0NmZWdDRmxZeDl4N2lFbzBpcnMrWU9mZ3lFbEVHRi9GSDdrUUlRSlpBaVNJaEUyNkNGSDJXd1RvVDBqZGxST2hPZzhsZzJLVHBVWTRtT0s1REVoVSt0RjZJQmo5dWpXSVZNT0xFamNnWXZGdDl0OFN4VVk0U3FPZmJjY2pFaUJFNkUvTFRxR2ptOC9IaVhqakkwQjZOc1VTQm5Kbm9DTmJVbmNqVU41eVo2SWkrV28zRFk3RG1XUGlSRnVnK0ZpUVlLWHdKMC9aWFBsbEV3MkpxWjJpZ2cxcUhsWkx1WWtlNFgrQk9LVS9rQzVtSVZUZ3RuVG8xT3lxUmlFa0xiSEU2WWM4cW1Za3AwMmloT29KejdtQUoyZC9pQnFUTmtjLzdwbVpEMTJ1aHM2a3NKa3o1K1FFdWtZcDdiNmd5Uk1PTEE2NVo2VXVXbHJBbkd5WkErcGtHNlRhMlNvZGxyT3F5UmxzMkt3RWw2V0RiUzJib01EdGlEaHdLdXRnWHBMS2JmK2JETkZzeDlsWXk2Ny9vQ3ptWi8wOGdhR3ZSM1pVMk8rL041N0xyM2JnTEVLdVEvZE1jWEEzS2JMV1RicjVydWJiZVdBTSsxQkR0eHhSemsvR0pzdm1wM0ZLakYwcy8xZzhza25Nenl5dEtSVk8vTEx5MTc4bVpvdzF4eWhyNlBkb2JMTlBQTTJMR29PeU5xenpRbkliTm9xSGcvOXNxV3ZmYXMwekQvQWk5c2RRajk5TE1qTjNSR3gxZXloNDNCNnEyek5OWEVKZkoyZnYwbGJqWTRpUnZ1M0NoaEN3cnlOSWdHbk9GQTJDaWNRZDdBL2xDaUR0ZDBHNFkyRElySHQzVnNlQ2Z3d0JRNXRBODRRM2hwSExybkdDRHR1K2VXWVo2NzVTQUVCQUNINUJBa0VBUDhBTEFBQUFBRHdBSUlBQUFqL0FQOEpIRWl3b01HRENCTXFYTWl3b2NPSEVDTktuRWl4b3NXTEdETnEzTWl4bzhlUElFT0tIRW15cE1tVEtGT3FYTW15cGN1WE1HUEtuRW16cHMyYk9IUHEzTW16cDgrZlFJTUtIVXEwcU5HalNKTXFYY3EwcWRPblVLTktuVXExcXRXcldMTnEzY3ExcTlldllNT0tIVXUyck5temFOT3FYY3UycmR1M2NPUEtuVXUzcnQyN2VQUHEzY3UzcjkrL2dBTUxIa3k0c09IRGlCTXJYc3k0c2VQSGtDTkxua3k1c3VYTG1ETnIzc3k1cytmUG9FT0xIazI2dE9uVHFGT3JYczI2dGV2WHNHUExuazI3dHUzYnVIUHIzczI3dCsvZndJTUxIMDY4dVBIanlKTXJKNW5OM3ZLUml2TGNlUTdTWGg1L0NhaC8vT0d2T3c3dEhPOTAvKytleHpuNGpPakdkODkrL2lJTzllT250SytZYlJ2ODhkUG5TNXh5Zi93MkIvcEI1TUIxL2EyWFRZQU9jVmZnZUlvZ3lKQjRDNnJYb0lNSkpSQWhmUEpSYU5BcUY5NVhqb1lGZ2RIaGZST0MrSThEOW8ybzNnOEgxcFJOQXR1WTk1bDFLcXFIam93eDJaTmlBaTEreG1HTjZuMEhVemJsRU5qZEQ2THhCK1I0Q1FEWWtqMFdraWlhSWt1cVYwNlBKemxBNVlLcmhKYU5pRlYydHcwT1dJcEVaSW9SZ3VObGxHSDZzODBVVG9Ma3dCUm9YaGlqbCttMU9SNFlhbmEweXBaQW9sTW1aOW5rcWFlWVlLd3lhRVIzS0ZMbmt1eUI5dUtoOE9YeFF6bmc0SmlRQTNmY1VjNFBSaDc2b1pjS1VucGZIcWorb09xcXF4cHFLcE54aG9vRzZLdTBWZ25Hb3ArOVYrdXVLaXFDSzJoM3VNcnJzUDUxcVpvRHBSSTdiSk91cmZLb3NxYU8rdHFYMEw3Nmc2YXYzWkZzdFVBbTBLZHRkN0RKYllmb0dLdmJLdUtPZTk4UCtmbG1qNlBxK3FjSXRyK3RBa2FvdzI3RHAzTFozREZGQXZqcW1VY0M1YlNyWGI4NEtBSnF3QVVPL0lNaU9CaXNZYitkVm14eHA3K2FxUEhHSEhjTVdVQUFJZmtFQ1FRQS93QXNBQUFBQVBBQWdnQUFDUDhBL3drY1NMQ2d3WU1JRXlwY3lMQ2h3NGNRSTBxY1NMR2l4WXNZTTJyY3lMR2p4NDhnUTRvY1NiS2t5Wk1vVTZwY3liS2x5NWN3WThxY1NiT216WnM0YytyY3liT256NTlBZ3dvZFNyU28wYU5Ja3lwZHlyU3AwNmRRbzBxZFNyV3ExYXRZczJyZHlyV3IxNjlndzRvZFM3YXMyYk5vMDZwZHk3YXQyN2R3NDhxZFM3ZXUzYnQ0OCtyZHk3ZXYzNytBQXdzZVRMaXc0Y09JRXl0ZXpMaXg0OGVRSTB1ZVRMbXk1Y3VZTTJ2ZXpMbXo1OCtnUTRzZVRicTA2ZE9vVTZ0ZXpicTE2OWV3WTh1ZVRidTI3ZHU0Yyt2ZXpidTM3OS9BZ3dzZlRyeTQ4ZVBJa3lzbm1jM2U4cEdLOHR4NUR0SmVIbjhKcUgvODRhODdEdTBjNzNULzc1N0hPZmlNNk1aM3ozNytJZzcxNDZlMHI1aHRHL3p4MCtkTG5ISi8vRFlIK2tIa3dIWDlyWmROZ0E1eFYrQjRpaURJa0hnTHFpZWZnd2tsRUNGOEUxSlkwQ29YM3RlZ2hnU0IwYUdISUE3a2dIMGpxZ2ZHZ1NWYWw2SjZDWmdISW9jditsZE9pZi93VitONENRQUlvb2c3amxjT2l4UXFHS1EvZVF4SllUWVdIa21lSWo0R3lLU1Q2djJ3Q3BIdFpaTWVsU3F1SWlONFUzSUozMzlaTmlrbWZ2TmxvOGlaNUNINDNwbDVPSGdIaWxSdXM2U1JSLzR3STUwNzZnbWlta2RtQ09JZGVJNTRJNDRDcmJLbG9ZZ1N0RXFoQmViWDZFQjNLTUxuZlpKTzZpZ1lCTUwzcGFZRmdUT0ZtWEdDdWxBMmQ1VHpuYW1zdHVycXE3QkNBaFlRQUNINUJBa0VBUDhBTEFBQUFBRHdBSUlBQUFqL0FQOEpIRWl3b01HRENCTXFYTWl3b2NPSEVDTktuRWl4b3NXTEdETnEzTWl4bzhlUElFT0tIRW15cE1tVEtGT3FYTW15cGN1WE1HUEtuRW16cHMyYk9IUHEzTW16cDgrZlFJTUtIVXEwcU5HalNKTXFYY3EwcWRPblVLTktuVXExcXRXcldMTnEzY3ExcTlldllNT0tIVXUyck5temFOT3FYY3UycmR1M2NPUEtuVXUzcnQyN2VQUHEzY3UzcjkrL2dBTUxIa3k0c09IRGlCTXJYc3k0c2VQSGtDTkxua3k1c3VYTG1ETnIzc3k1cytmUG9FT0xIazI2dE9uVHFGT3JYczI2dGV2WHNHUExuazI3dHUzYnVIUHIzczI3dCsvZndJTUxIMDY4dVBIanlKTXJKNW5OM3ZLUml2STRmLzdSWGg1L1A2aC8vT0d2ZXpudEhPOTBpTytleHdGNGplakdkODkrL2lJTzllTy90NmVZYlJ2ODhYZm1UNXh5Zi95MmJQcEI1TUIxL2ZtVFFJQVFjVmRnQWdBaTJKQjRCZjdRb0lNTUpWQ2dJaFE2dE1xRkdUb0VSbjhZZHRpUUEvYXBGNktJRFlHakhnNG9RclNoUDZ1MEdCRTQ0TWhvNDQwNDVxampqanoyNk9PUFFBWXA1SkJFRm1ua2tVZ21xZVNTVERicDVKTVpCUVFBT3c9PVwiLCBaYyA9IFwiZGF0YTppbWFnZS9naWY7YmFzZTY0LFIwbEdPRGxob0FCV0FQZi9BTDdyNmJicDVoSzNyeHk2c283YzJPbjQ5N2ZwNW1iUXkzelgwaDY2c2hDMnJsck54MGpId2ZINit0ank4U20rdHNydjdUTEF1UzIvdURiQ3U2em00NGJhMXUvNitacmczTVR0NmtySXdlTDI5YURpMzhQczZqckR2TERuNUZUTHhlNzUrV0RPeWV2NCtJamIxdUQxOU16djdZRFkxRXpJd2w3T3lCZTRzRTdKd3dLeXFjL3c3dXI0OXpUQnV1WDI5dG56OG96YzJDTzh0QWkwcTZiazRjRHM2VERBdVQzRXZYUFV6NFRhMVZmTXhnT3lxcExlMnJycTUvYjgvQ3UrdDVEZDJkcno4dEx4Ny9YOCt5YTl0WGJWMEJTNHI2VGo0R3pTelViSHdIL1kwdzYycldUUXlwYmYyMnZTekxMbjVWSEt4S25sNHNmdTdGUEt4SGpXMGFybDRocTVzWnZnM2RQeDhFTEZ2OTcxOUhUVjBJcmIxOGJ0NjBERnZ0VHg4RG5Ddk43MDg3VG81U2krdG5EVHpxams0YTdtNU5yMDhsYkx4YTdtNDF6TnlHblJ6Qis3cytqMzk4M3Y3bVBQeW5yVzB2RDYrYUhpMzAvSncwUEd2OGJ1NnovRXZxemw0eG01c1FHeXFlYjM5dnI5L1RQQnV2MysvdTM1K0FXenF2UDcrbTdUemcyMXJmeisvZ3EwclBiOCt3dTFyUDcrL2crMnJoVzRzRVhHd05ieThRYXpxN3pxNlBqOC9QdjkvZGZ5OGZuOS9PejUrTW51N1BUNys5MzA4OVh5OFBMNytneTFyWjdoM29QWjFTVzh0YVBqNFBYNyt3bTBySUxaMUcvVHpwbmczTWp1N0FlMHE3WG81ampDdXh1NnNuSFV6d2F6cXAvaTN0SHg3NFRaMVNXOXRWM095R0xQeWREdzd5aTl0Z2V6cXllOXRRU3pxZzYxcmY3Ly8yalJ5eVM4dFMvQXVPZjM5Z1N5cXZuOS9aVGUydmY4L1B6Ky9mdisvYjNyNk56MDg1amYzQ0c3dE5EdzdoTzNyNVhmMjlUeThCaTVzZnYrL3ZUNytneTFyTHZxNS9yOS9OYnk4SXZjMTV6aDNUN0V2ZTM1K2M3djdtclJ6RnZOeC9QNys5SHc3NFhhMWV6NCtQTDYrZ3UwckJpNXNDUzh0RVRHdjhIczZaWGUyL2o5L09mNDk1ZmYyNUhkMldUUHl0VHk4YlBvNVJpNHNOejA4dm44L0pUZTIrVDI5ZjMvL3JucTU5Yno4ZFh5OGQzMTg0dmMySkxkMnVmMzk3L3I2YjNxNk9IMjlibnA1NHpjMXp6RHZlTDE5ZGZ6OFhuVzBRQ3lxZFBUMHlIL0MwNUZWRk5EUVZCRk1pNHdBd0VBQUFBaC93dFlUVkFnUkdGMFlWaE5VRHcvZUhCaFkydGxkQ0JpWldkcGJqMGk3N3UvSWlCcFpEMGlWelZOTUUxd1EyVm9hVWg2Y21WVGVrNVVZM3ByWXpsa0lqOCtJRHg0T25odGNHMWxkR0VnZUcxc2JuTTZlRDBpWVdSdlltVTZibk02YldWMFlTOGlJSGc2ZUcxd2RHczlJa0ZrYjJKbElGaE5VQ0JEYjNKbElEVXVOaTFqTVRRd0lEYzVMakUyTURRMU1Td2dNakF4Tnk4d05TOHdOaTB3TVRvd09Eb3lNU0FnSUNBZ0lDQWdJajRnUEhKa1pqcFNSRVlnZUcxc2JuTTZjbVJtUFNKb2RIUndPaTh2ZDNkM0xuY3pMbTl5Wnk4eE9UazVMekF5THpJeUxYSmtaaTF6ZVc1MFlYZ3Ribk1qSWo0Z1BISmtaanBFWlhOamNtbHdkR2x2YmlCeVpHWTZZV0p2ZFhROUlpSWdlRzFzYm5NNmVHMXdQU0pvZEhSd09pOHZibk11WVdSdlltVXVZMjl0TDNoaGNDOHhMakF2SWlCNGJXeHVjenA0YlhCTlRUMGlhSFIwY0RvdkwyNXpMbUZrYjJKbExtTnZiUzk0WVhBdk1TNHdMMjF0THlJZ2VHMXNibk02YzNSU1pXWTlJbWgwZEhBNkx5OXVjeTVoWkc5aVpTNWpiMjB2ZUdGd0x6RXVNQzl6Vkhsd1pTOVNaWE52ZFhKalpWSmxaaU1pSUhodGNEcERjbVZoZEc5eVZHOXZiRDBpUVdSdlltVWdVR2h2ZEc5emFHOXdJRU5ESUNoTllXTnBiblJ2YzJncElpQjRiWEJOVFRwSmJuTjBZVzVqWlVsRVBTSjRiWEF1YVdsa09rWXhSRGhEUmpRNFEwTkNSREV4UlRnNFF6YzNSRFkxTjBZNVFqVXdNRVV4SWlCNGJYQk5UVHBFYjJOMWJXVnVkRWxFUFNKNGJYQXVaR2xrT2tZeFJEaERSalE1UTBOQ1JERXhSVGc0UXpjM1JEWTFOMFk1UWpVd01FVXhJajRnUEhodGNFMU5Pa1JsY21sMlpXUkdjbTl0SUhOMFVtVm1PbWx1YzNSaGJtTmxTVVE5SW5odGNDNXBhV1E2UmpGRU9FTkdORFpEUTBKRU1URkZPRGhETnpkRU5qVTNSamxDTlRBd1JURWlJSE4wVW1WbU9tUnZZM1Z0Wlc1MFNVUTlJbmh0Y0M1a2FXUTZSakZFT0VOR05EZERRMEpFTVRGRk9EaEROemRFTmpVM1JqbENOVEF3UlRFaUx6NGdQQzl5WkdZNlJHVnpZM0pwY0hScGIyNCtJRHd2Y21SbU9sSkVSajRnUEM5NE9uaHRjRzFsZEdFK0lEdy9lSEJoWTJ0bGRDQmxibVE5SW5JaVB6NEIvLzc5L1B2NitmajM5dlgwOC9MeDhPL3U3ZXpyNnVubzUrYmw1T1BpNGVEZjN0M2MyOXJaMk5mVzFkVFQwdEhRejg3TnpNdkt5Y2pIeHNYRXc4TEJ3TCsrdmJ5N3VybTR0N2ExdExPeXNiQ3ZycTJzcTZxcHFLZW1wYVNqb3FHZ241NmRuSnVhbVppWGxwV1VrNUtSa0krT2pZeUxpb21JaDRhRmhJT0NnWUIvZm4xOGUzcDVlSGQyZFhSemNuRndiMjV0Ykd0cWFXaG5abVZrWTJKaFlGOWVYVnhiV2xsWVYxWlZWRk5TVVZCUFRrMU1TMHBKU0VkR1JVUkRRa0ZBUHo0OVBEczZPVGczTmpVME16SXhNQzh1TFN3cktpa29KeVlsSkNNaUlTQWZIaDBjR3hvWkdCY1dGUlFURWhFUUR3NE5EQXNLQ1FnSEJnVUVBd0lCQUFBaCtRUUpCQUQvQUN3QUFBQUFvQUJXQUFBSXZRRC9DUnhJc0tEQmd3Z1RLbHpJc0tIRGh4QWpTcHhJc2FMRml4Z3phdHpJc2FQSGp5QkRpaHhKc3FUSmt5aFRxbHpKc3FYTGx6Qmp5cHhKczZiTm16aHo2dHpKczZmUG4wQ0RDaDFLdEtqUm8waVRLbDNLdEtuVHAxQ2pTcDFLdGFyVnExaXphdDNLdGF2WHIyRERpaDFMdHF6WnMyalRxbDNMdHEzYnQzRGp5cDFMdDY3ZHUzano2dDNMdDYvZnY0QURDeDVNdUxEaHc0Z1RLMTdNdUxIang1QWpTNTVNdWJMbHk1Z3phOTdNdWJQbno2QkRpeDVOdW5UUWdBQWgrUVFKQkFEL0FDd0FBQUFBb0FCV0FBQUkvd0QvQ1J4SXNLREJnd2dUS2x6SXNLSERoeEFqU3B4SXNhTEZpeGd6YXR6SXNhUEhqeUJEaWh4SnNxVEpreWhUcWx6SnNxWExsekJqeXB4SnM2Yk5temh6NnR4Wms4QXFua0JKRXNqUzdXZlFveDRKeFBLSGpoclNweHJKK0p0S3l5blVxeFBMb0pzNnRaaFJyR0Faemx2Rmxlc21BbUhUSmhRV29TelhCSGZVeWgxSUFFNGV0MXluQ0pzckZ4d1l2R1d0OGcxYmhoWmdyb0lIWXlXQTVyQy9CSHNWcHkxM0dCeGF5V0h2VU1Pckx5N210R1hhY3RWMStYUGFWVXVuVGlsdE91eXFGZjYyeVdrdGw4QW1mMTlwcDhVUm9ReHIzY0NEQ3g5T3ZMang0OGlUSzEvT3ZMbno1OUNqUzU5T3ZicjE2OWl6YTkvT3ZidjM3K0REaXpBZlQ3NjgrZlBvMDZ0Zno3NjkrL2Z3NDh1ZlQ3KysvZnY0OCt2Zno3Ky8vLzhBQmlqZ2dBUVdhT0NCQ0NiNFhrQUFJZmtFQ1FRQS93QXNBQUFBQUtBQVZnQUFDUDhBL3drY1NMQ2d3WU1JRXlwY3lMQ2h3NGNRSTBxY1NMR2l4WXNZTTJwRVdBWU9tWTlrVmwzWlNMS2t5Wk1INVlDSndQSkhPWHh3VmhGQVNiT216WWZnL09uVWlVb0JxazBoMElTOFNiU29UWERGZGlyZGlTNkJ5SmxHbzBxMXVHcmIwcXYrYUtGRFUyU3ExNjhOeVZqRmlsV0JJakpRd2FwVkMyY1QyYmZiMEFoTHU3YXUwYlp2ODBZb1E5ZXVYNXA0ODhKVkJPNnZZWlNyd0FnV1BDZlQ0Y2NiQ1ZCakdhSGJZcXcvNEVEZWZKRkFwaXNkeTVXamhlcnl6bUxVT0t2dVRBRE92Qk9XVGROS3ZibzJWVEluVEJkYlpidjNSQUlFME5pNXZLbXY3K01NaFoxQXR6akJIZVRRR3hJb016YnZGR0hSc3l0Y0ZXSXhiZTNnQzNhbEZQdzl2UGwvZCtDOFRZRDl2UHM3NWNpQ00rNWVleGswVi9VOXIxOC9Vd1NsdXRESEgzaXI2TExURkFJT3FOMHFLL2l6alJ3S0RraUFXN3hGT0NBT2V5Vm80WVljZHVqaGh5Q0dLT0tJSkpabzRva29wcWppaWl5MjZPS0xNTVlvNDR3MDFtampqVGptcU9PT1BQYm80NDlBQmlua2tFUVdhZVNSU0NhcDVKSk1OdW5razFCR0tlV1VWRlpwNVpWWVpxbmxsbHgyNmVXWFlJWXA1cGhrbG1tbWp3RUJBQ0g1QkFrRUFQOEFMQUFBQUFDZ0FGWUFBQWovQVA4SkhFaXdvTUdEQ0JNcVhNaXdvY09IRUNOS25FaXhvc1dMR0ROcTNNaXhvOGVQRFFuTWc0UGpEcG9JS05HcFhJbnVSQmxxT0FnUUFFbXpwazJCQk9CUWd4T0Jsb0JZdW9MNkcwclVIeW9GcURhRlFFTm0xYzJuVUNtS0pBTnJVOUdyV0xPaVM3RHF5c3lvWU1NYVhJVUdIYTJzYU5NT3BZVU9UUkd4Y0tIbUxLdTJibDBGaXNoOGpjdVg0NnBWWiswS1Zyc05qYkM5ZlJOUEZJbHVzT082RWNvZ1ZreVpvYkFUQ1I1clRydE5FYmpLb0JXV1FiTzVkTm81bVVLckprZ2dnbVpkQ1g2Z25CMGhRWUxHbTMvQVdhMGFUbWJCbzNSRldJVUR4enc1VjVKbnV2S1hXcmx5dEZBOUxrYU5kK1ZWdU90dSs3R0t3S3A1REdYQy81bDNvcHRqV3RXdDl5WHdXNjB1TlBNbVExeEY1c1RnWWs3Vnd5MWpWVzBzV0NKaEpCTWFkZ2kyaVh6NjJYUkZLWFdoUTAxK0cxMldYVm9KM0pGZ1ZEL1VCUVo0SHhGUXhqWjJUU0hNaFUrQlUwNWFKM0JnMHlvaDJKVWVpVGJkQVljdVdFMkJvRWRsd0ZIWGl6Q3U2TnBRc1hRWGxZd1VqdGpqVS9qWTU0K1FZTjF4WWxiZzNIaWtSNnM4SjJWTm8yR2xqNFZUeW5XbFRabjhPSlF1WDNacFprS3IwRGlValdlMkdkRXFLL2l6alJ4dTF1a1FBVlpCYU9lZUNlRVFXWmw4Qmlyb29JUVdhdWloaUNhcTZLS01OdXJvbzVCR0t1bWtsRlpxNmFXWVpxcnBwcHgyNnVtbm9JWXE2cWlrbG1ycXFhaW1xdXFxckxicTZxdXd4aWtxNjZ5MDFtcnJyYmptcXV1dXZQYnE2Ni9BQml2c3NNUVdhK3l4eUNhcjdMTE1OdXZzczYwR0JBQWgrUVFKQkFEL0FDd0FBQUFBb0FCV0FBQUkvd0QvQ1J4SXNLREJnd2dUS2x6SXNLSERoeEFqU3B4SXNhTEZpeGd6YXR6SXNhUEhqdzBKeklPRDR3NmFDQ2pScVZ5SjdrUVphamdJRUFCSnM2Wk5nUVRnVUlNVGdaYUFXTHFDK2h0SzFCOHFCYWcyaFVCRFp0WE5wMUFwaWlRRGExUFJxMWl6b2t1dzZzck1xR0RER2x5RkJoMnRyR2pURHFXRkRrMFJzWENoNWl5cnRtNWRCWXJJZkkzTGwrT3FWV2Z0Q2xhN0RZMnd2WDBUVHhTSmJyRGp1aEhLSUZaTW1hR3dFd2tlYTA2N1RSRzR5cUFWbGtHenVYVGFPWmxDcXlaSUlJSm1YUWwrb0p3ZElVR0N4cHQvd0ZtdEdrNW13YU4wUlZpRkE4YzhPVmVTWjdyeWwxcTVjclJRUFM1R2pYZGxBcmpyYnZ1eGlzQ3FlUXhsd3YrWmQ2S2JZMXJWcmZkZFpiNnVMalR6SmtOY1JlYkU0R0pPMWNNdGt4MXRMRmdpWVNRVEduWUl0b2w4K3RsMGh6NTFvVU5OZmh0ZDFoOWFDZHlSWUZRRnFnVUdlQjhSVU1ZMmRrMGh6SVUyNVZSWEZoell0RW9JZHFWSElraVpGS09XSFFoNlZBWWNkYm40WWtmZ1dKVldVMUhkZ1NPRkkrN29FUUZwelZKT2pUVGRVUTVhNERCcEpFWHpCSmJWQ1ZMU05CcFcrbGc0NVVZRVBJbFdCRm5XbElsclJPbFM1cGNRVllrV092WWt0b291UkUyeEpwc09VWk1XRHBTdHNvSS8yOGlCcDBiOG9hWFBkVlpCT09oRmVtWVZpMHlWRlFHR1pJdGVORThXYU5sWjZhWUZyU0lqVnJwd3lDbW4zbzE1NTZnWHJxSUlXdkdoU3VxRWE1Mmc2cXA2d3R6aHlaV3B6YnJvS3RURWd0VUthT2hhS1E3NjdJQlZMT1VJdXl1bVdHMGpxckpmQ3JNcVZrdWtDQzJicTZCNVZRS3lYZ3RhT2UxZE5aeTNYMDRCcXorYWttdmtqVk9nNGE2N1U5elJyYnIwMW12dnZmam1xKysrL1Bicjc3OEFCeXp3d0FRWGJQREJDQ2VzOE1JTU4rend3eEJITFBIRUZGZHM4Y1VZWjZ6eHhoeDM3UEhISUljczhzZ2tsMnp5eVNpbnJQTEtMTGZzTXNzQkFRQWgrUVFKQkFEL0FDd0FBQUFBb0FCV0FBQUkvd0QvQ1J4SXNLREJnd2dUS2x6SXNLSERoeEFqU3B4SXNhTEZpeGd6YXR6SXNhUEhqdzBKeklPRDR3NmFDQ2pScVZ5SjdrUVphamdJRUFCSnM2Wk5nUVRnVUlNVGdaYUFXTHFDK2h0SzFCOHFCYWcyaFVCRFp0WE5wMUFwaWlRRGExUFJxMWl6b2t1dzZzck1xR0RER2x5RkJoMnRyR2pURHFXRkRrMFJzWENoNWl5cnRtNWRCWXJJZkkzTGwrT3FWV2Z0Q2xhN0RZMnd2WDBUVHhTSmJyRGp1aEhLSUZaTW1hR3dFd2tlYTA2N1RSRzR5cUFWbGtHenVYVGFPWmxDcXlaSUlJSm1YUWwrb0p3ZElVR0N4cHQvd0ZtdEdrNW13YU4wUlZpRkE4YzhPVmVTWjdyeWwxcTVjclJRUFM1R2pYZmxWYmpyYnZ1eGlzQ3FlUXhsd3YrWmQ2S2JZMXJWcmZjbDhGdXRMalR6SmtOY1JlYkU0R0pPMWNNdFkxNXRMRmdpWVNRVEduWUl0b2w4K3RsMGh6NTFvVU5OZmh0ZGxsMWFDZHlSWUZRTXFnVUdlQjhSVU1ZMmRrMGh6SVUyNVZSWEZoell0RW9JZHFWSElraVpGS09XSFFoNlZBWWNkYm40WWtkWHRKZFZVMUhkZ1NOYUNZeTRvMGZDcERWTE9UWFNkRWM1YUlIVDVKRVVsVEhoVlNkTVNkTm9XT2xqSVpVYkVVQk5XaEZvV1ZNbXJoR2xpNWxnUWlSTUxHaWhZMDlpcStoQzFCUnN0dW5RS21uaFFOa3FLL2l6alJ4NmF2U0VqMFhwVXhrQlZrRlk2RVZ3QklwVkxESlZWZ1FZa2oxNkVUajJaWVducHFBV3hGNVd1bkFZYXFnaW9WWG1xYWNTUUZwVzhiSC9paXFpYStVcHEzN0M0Qk1ZbHFuZCttaE9jRjYxQWhxK2FsckVDWFplRlVzNXhUNjZ5aFI1WUdYSW5NM3FpYzhVV3BsYUxaVUVnSkhWRDl2cVNRMHNXV1ZoYTdpZ29VR3JQMHlpUzZXNldjRnhycnVLd1l0VkVmUFMyNWU5VitHcjc0dmw5TmR2dnYvQ3RVcWFWNkZCY01GaFpaSkZWdm80eWpCdnEzUjYxU1lUSndpSFBwSVdSY3NWR2F0SFZySkZFU0p4eUtETk00OG5XQTJMTW04eTdWcVVJaUMvdkpwVldHMXpzczJKRVZBRVdtVHczQnZKUlcxQ3FOQ0xrcHRWcFVncmxnbVVXUm5kTkdYZ2RIelZ6bE9IUmNBUGFHM3pXZFo4RVpBa1dsTjhEVFpjZCtEODQ5bHh4UmR0VnJSOHliYldTbWNGUzRwemh5VU0wVmRGVFdCMjNrK0JBM1ZXeFdnTCtFM3pYRG1VUGdzZlh0RVR3UkpWanR5T1IxVk9Ick1JS21MbFloR0FMVHBHY2k2V1BTV0pidnJwcUtldSt1cXN0Kzc2NjdESEx2dnN0TmR1KysyNDh4d1FBQ0g1QkFrRUFQOEFMQUFBQUFDZ0FGWUFBQWovQVA4SkhFaXdvTUdEQ0JNcVhNaXdvY09IRUNOS25FaXhvc1dMR0ROcTNNaXhvOGVQRFFuTWc0UGpEcG9JS05HcFhJbnVSQmxxT0FnUUFFbXpwazJCQk9CUWd4T0Jsb0JZdW9MNkcwclVIeW9GcURhRlFFTm0xYzJuVUNtS0pBTnJVOUdyV0xPaVM3RHF5c3lvWU1NYVhJVUdIYTJzYU5NT3BZVU9UUkd4Y0tIbUxLdTJibDBGaXNoOGpjdVg0NnBWWiswS1Zyc05qYkM5ZlJOUEZJbHVzT082RWNvZ1ZreVpvYkFUQ1I1clRydE5FYmpLb0JXV1FiTzVkTm81bVVLckprZ2dnbVpkQ1g2Z25CMGhRWUxHbTMvQVdhMGFUbWJCbzNSRldJVUR4enc1VjVKbnV2S1hXcmx5dEZBOUxrYU5kK1ZWdU90dSs3R0t3S3A1REdYQy81bDNvcHRqV3RXdDl5WHdXNjB1TlBNbVExeEY1c1RnWWs3Vnd5MWpYbTBzV0NKaEpCTWFkZ2kyaVh6NjJYU0hQbldoUTAxK0cxMldYVm9KM0pGZ1ZBeXFCUVo0SHhGUXhqWjJUU0hNaFRibFZGY1dITmkwU2doMnBVY2lTSmtVbzVZZENIcFVCaHgxdWZoaVIxZTBsMVZUVWQyQkkxb0pqTGlqUjhLa05VczVOZEowUnpsb2dkUGtrUlNWTWVGVkoweEowMmhZNldNaGxSc1JRRTFhRVdoWlV5YXVFYVdMbVdCQ0pFd3NhS0ZqVDJLcjZFTFVGR3kyNmRBcWFlRkEyU29yK0xPTkhIcHE5SVNQUmVsVEdRRldRVmpvUlhBRWlsVXNNbFZXQkJpU1BYb1JPUFpsaGFlbW9CYkVYbGE2Y0JocXFDS2hWZWFwcHhKQVdsYnhzZitLS3FKcjVTbXJmc0xnRXhpV3FkMzZhRTV3WHJVQ0dyNXFXc1FKZGw0VlN6bkZQcnJLRkhsZ1pjaWN6ZXFKenhSYW1Wb3RsUVNBa2RVUDIrcEpEU3haWldGcnVLQ2hRYXMvVEtKTHBicFp3WEd1dTRyQmkxVVI4OUxibDcxWDRhdnZpK1gwMTIrKy84SzFTcHBYb1VGd3dXR1ZvVWhXK2pqS01HOEVkSHJWSmhNbkNJYytraFpGeXhVWnE3ZEtPZEpkUllqRUlZTTJ6end6WURWc3loUVRzR3RSaW9BTTgyby9aTFVOeWpjblp1S1BQZmVXN01XRUJsM1pQQWhmVmFuUmltVUNaVmFiRk0xMFl1QU1mUlhQVTRmVkxWcmJhSnMxWEdTa05jVm5YOGVGZEZvNmxnM1d5dEZtUlVzWmFzUFZXbG8vcEJoM1dPQjBqSlVkVDl6SkRSWTRZNmFGRHR4K1F6WFB1a1NkUUczaE45a0RJcG1FTTY2aTFWZ2xVQTdXa20rVW9WcjZ4SnI1UitCZ1cxY0NPRWo1ZVVjRTJDUDY2SHBoZnZwRXFnK1d3Q2JGZGVmMTZ4TGhZN0ZkUUNuRkJSclBQZWNjR21pa2pYdENhRkErR0MyMGJMTU5MY0ZpZkh4NEJBaHNHbEVSVEwvbkpxTmNqNzMyZTVLaHZHYlpnNzhuRG8rWFZyNzVJUkdRaFl5YnJjOStTQ09obzhCajhzOGZVbmRnMkhFbFd1RFNuMFFJa0FtWThBUWR6Mk9lQXBsWENnRldSQ1Frb1laTUpqakJ5RG53Z2hnRVRVQUFBQ0g1QkFrRUFQOEFMQUFBQUFDZ0FGWUFBQWovQVA4SkhFaXdvTUdEQ0JNcVhNaXdvY09IRUNOS25FaXhvc1dMR0ROcTNNaXhvOGVQRFFtQVc0WGpEcG9JS05HcFhJbnV4QjFxcXdnUUFFbXpwazJCQk9CUUt4S2gySkpZdW5TdDhFZTBxRDlVaUxadFFvTUd4NnFiVUtOV25FY21RZ0tqV0xOcUxiWUp6aFdwWU1NZUpMQUtEYnBaV3RPcUpmb0hYZE9uWXVOQ2hUTUYzZHE3ZDJsbHdTRzM3OGRWcTdiaEhYeFhGNW9yOC93cXRraGdYb0k4aENPdi9TRm41dUxMRGh1ZnNDdTVjMXE5OHl4akhuMndEQnJQcU5XZXlFUzZOVUVDRVRwdlMvQURwVzJyQ2RBTjdmd0RqdXZXY0xwRjFoVmhGUms0OCtSY1daN3BDbUFjMU5EUXlnT1pNRHBxdnpHdjRweTN1TXpRQzJVaS85KzhHeTh0TXRrVkV4Q09kd3I0aVdUSlpLbCt0eGpjOUdMTFhGMDc0MGRqakRLaG9jOWdDWWlHWDFSMzJISFhkZmRsSk5JSkN1QzF5UjBIU3FYSVhSR0FBeElCWlhDbkZocGxWSGdUSEhkbDBZVk5jSVNBRnpVR2l0aFJKaDVpOVVjV010MVVSaEYzVVpPWWl4NkJzMTlhTEVwMUI0NXBiZklWangySnRGYVFZTDJVbG9aSWR0U2hhaTBpZUJwV2RsQVlKVWRrcUFWR2xWSmRFVnRSdW9DNVpVWGcwUEtaUFlvRlZoUWFacDRwRVZscThhWGVLa1RSRXFLY0dkM3hJMVkwWGtZQUxQNnNzaU9mRjYyaWkxYXh4Q2tXRGduc2lhaEY4MXlvMVJTT1Rub21BWDhXRmN1aG1vYjZ6enhwNlpPcHFEd1NvS0pXNzZFNkthZGEwZjl5cXFzVkNtT1BtbGt4Y0NTdGZPWTB3Nlc4VGxyRUNZUmt0VTA1d1NLNnloUmFMY0Ztc25MaXcyeFc2SUFLTFpJRWdLSFZEdzFleXlNMWhHWVZxTGRSb3RFcFVlWE1TaTVwNW1vRmg3cnJZdFp1VmtYQUcrOWk4MkpWNzcwdWxzT2V2dmJ5MjljcVkySUZwOEFWbG1FcFZ2cDBpN0JyQkp5Z1ZRSU9QMHdhRG1Ec2tKVWd1MXJzMmlybG9KSVZMUlY3Zk5rODh3aVdGUm9tWjBlQXlvQjIzTEoyQlJ1MVRja3o5NVZUV21RRW5ET0thY0VpNmMrTHpWTktXajRURFJJNDVSUTV0Tko5Z2JPb1ZqRkJyVjRXYVcxanJkVmlkWm5XRk1Jb05rOEkvODBNVHMxWVlkZlhQRmNRWlFMTy9CS2dscDVyNDZyTGwwbTdTc0NBYWYzL3dFRmNtZnpBOExNbVM2MVdGdmlFSmNlMFdQMGdNOExnZUYza0ZYbExKTXlxVzlucE1UaUNxNlVJNFRYQnNYQmFrYmFNVHl5VFBaMGtBYml1ZGNMV0NPTzUxaWJwVm82UVRPWEVxQlVhck9XczRGMWdvTXpSS2hMakJjWVRSRjl4NVZyb2tBRk9qVk1KbzgvVWQyMmllc3YyTU00OGkzQW5GSk1hNWQzVmplM1FaazlZQXJEZ2dNTjNZRFpHVmhsZ2ROTTZYdWlRZiswZG85K1ZoeTYwYzRFR05lVUlZQURSTUFVeWJNWWY5QmtNTE94SExqVEFMRElyb0FVdHRyR05DVkxQTTZWNEhOZGtjcTdVb0NZRXlPUGFXRmF4Q1E5NkVCMGhlSjRJdlVlTkM1b1FMMHFoM0FvWlloelV2ZkF1c0NoSDkyWTRFSmxrSVVJM3hNb0tXN2pWT3g0K3BERkZTTUFvd29lYUZXd2pDMlNEblJIRDg0K1kyQUVNOHlQTUNoSUFoaWxrZ29GR1hJVWN5SUFET0VRQUhkc1FoQVRYU0FzRlRCQWRkZ0NaVjhBNHhSNkNBdzQ2a1lrZVpTSUhQRHJGT1hVTXBDQnpGaEFBSWZrRUNRUUEvd0FzQUFBQUFLQUFWZ0FBQ1A4QS93a2NTTENnd1lNSUV5cGN5TENodzRjUUkwcWNTTEdpeFlzWU0ycmN5TEdqeDQ4TkNjeURnK01PbWdnbzBhbGNpZTVFR1dvNENCQUFTYk9tVFlFRTRGQ0RFNEdXZ0ZpNmd2b2JTdFFmS2dXb05vVkFRMmJWemFkUUtZb2tBMnRUMGF0WXM2SkxzT3JLektoZ3d4cGNoUVlkcmF4bzB3NmxoUTVORWJGd29lWXNxN1p1WFFXS3lIeU55NWZqcWxWbjdRcFd1dzJOc0wxOUUwOFVpVzZ3NDdvUnlpQldUSm1oc0JNSkhtdE91MDBSdU1xZ0ZaWkJzN2wwMmptWlFxc21TQ0NDWmwwSmZxQ2NIU0ZCZ3NhYmY4QlpyUnBPWnNHamRFVlloUVBIUERsWGttZTY4cGRhdVhLMFVEMHVSbzEzNVZXNDYyNzdzWXJBcW5rTVpjTC9tWGVpbTJOYTFhMzNKZkJiclM0MDh5WkRYRVhteE9CaVR0WERMV05lYlN4WUltRWtFeHAyQ0xhSmZQclpkSWMrZGFGRFRYNGJYWlpkV2duY2tXQlVES29GQm5nZkVWREdOblpOSWN5Rk51VlVWeFljMkxSS0NIWlJneUNKR21WU2pGcDJ2TmhSR1hEVTVTS01IMTNSWGxaTlJYVkhqbWdsTUNLUEhnbVQxaXpsMkFqU0hlV2dCWTZUU0U1VXhvUlhuVUFsU0tOaHBZK0ZWVzVFQURWcFJiQWxUWm00UnBRdVo0YjVrREN4b0lXT1BZbXRvZ3RSVTdUcFprT3JwSVVEWmF1czRNODJjdXlwMFJNL0ZxVlBaUVJZQmFHaEY4RWhLRmF4eUZSWkVXQklCdWxGNE5pWFZaNmJobG9RZTFucHdxR29vb3FFbHBtb29rb0FhVm5GLzlkcXFvbXVwZWVzNmdtRFQyQlpwb1lycERuRmVkVUthUHk2YVJFbjNIbFZMT1VZQytrcVUrU0JsU0YwT3JzblBsTm9kU3FQM2xsTEFCaFovUkRtUE9YQUVwT3gxTUNTVlJhM1VnYW5QN3JBc3NxUnJhSlJxejlOVmdsdVVTZnNWdSs5Y0xTNzNqelNEb3VHdjZIYW0xVVJBdk4xaDVwYW9hb3dWZ3p6T0k5YTZZVmFUbjlYVlV6aVBGZ1dCVXNacUs0Q2NWRm9OQXhYdG1qbEVhQ29aU2lTbFQ2UHFvZVBzbGxGTUNzQm5sNjFDWWxYOUV3cHZhTENvYytrUmRGeXhZVjlwbFhPWjYydVVvNTBWeEZTczJvZThvb1ZMU3FyTjg4OE0yQkZySDRtcG5WMXFESnBUWlFpUzF0SEFJaG9sVUwwckQ5a3RjM1psTTJqTGxxNmtQOXNiTmxZa1dHZE1BVi82cXV4Y09CYzFDYUZZcTM0VmJScysrczhKeGRsS1dpZHFtV0M1TGhtRW1WV2pJZEc1S3BQV0RzUU9JOFRoZmQrOTZwdStrRGZvclVONTNDMXBwWWlYVmRKUmxwVFFNMFhPSEFVamhVNllMNHVFT1ZwWlJ6WHUybUZrSHVWWHd1ZnROOXdBYVpXQXMrSGFUdGFQNlFvVmlZRnBwV0g3OFlUQkE3U1dObFJPbGhsc096MDRlV2ZUbVphNkZCL2t6QXNYdDk0L0FYTjAvcFFKNmlXVGVEQUFPM2NnWGI4c3dmY1ZtVS9qOGdrWkZoUkh2L0drcnFpSktBY3E3TUlBY3J4UDZLY1lJSUx5WkJhOUNHcmpVQkxNT29Eb1VMQTRUNEs0V0JLRjVtSE1MSlFRYXhzb29FcUhKVTlXa2dodldRd0lkMHBSdzNUc1lLOUhESmtoNE5Kd0NhSzB4MEUvc003cTVBREdCSWdMTUVVMFlnTXdZZlE2Z0lVcFhBQkRjOEpZem5RTUlYNkZPTVBRd1JkOW95SGhqU21oUmEwMk1ZMjR1aEdHclVOaXc2UkNjZE13MGQ4clErUDg5bkVLUHBZbWdTZzRZNkFuQThaNmtoSW9teGpFMTVKWkVXSXM4QkdyZ3FEa3J5SVRMSXdJMHRlcFJTcmdGOG1OVGdTZENpZ2tTdWd4UW5nTThxT2VPZGJkb0NnWFJLZ2p5bGtZbzJ0UkFnQk1nRVRucUJqam5BTUpoemxpQTQ3Y0tFY09KaGJMbWtpRXBLNFNDYlEzQ1VjeUlDRGVTM3ptdGpNWmtRQ0FnQWgrUVFKQkFEL0FDd0FBQUFBb0FCV0FBQUkvd0QvQ1J4SXNLREJnd2dUS2x6SXNLSERoeEFqU3B4SXNhTEZpeGd6YXR6SXNhUEhqdzBKZ0Z1RjR3NmFDQ2pScVZ5SjdzUWRhcXNJRUFCSnM2Wk5nUVRnVUNzU29kaVNXTHAwcmZCSHRLZy9WSWkyYlVLREJzZXFtMUNqVnB4SEprSUNvMWl6YWkyMkNjNFZxV0RESGlTd0NnMjZXVnJUcWlYNkIxM1RwMkxqUW9VekJkM2F1M2RwWmNFaHQrL0hWYXUyNFIxOFZ4ZWFLL1A4S3JaSVlGNkNQSVFqci8waForYml5dzRibjdBcnVYTmF2Zk1zWXg1OXNBd2F6NmpWbnNqVVVTWnBqUVFpZE42VzRBZksyMVlUb0J2YStRY2NqZ1NlaUg1TkVVNjN5TG9pckNJRFo1NmNLOUF6WFFHTWd4b2FXbmtnRTBaSFRTT2NxM0NKVC85Y3hUbXZjcG1oRjhwc3ZwazNYbHBrTUs2aVJSUk1ZdkVSQ1J6SE95WDlSTEprWktIZFhjV0VOMUVaK3hGMUFuNFFsWEhWV2pQODBCaEdNcUdoejJBSkRBZlJGU2RndFFKckRESjBoeDEzY1djZ2hlQ2NvQUJlbTl3eEVSaGFKU0JNaUFzcGNsY0U0SUJFUUJubHFZVkdHUkZSbzlwWE5CNEV4MTFaZEdFVEhDSGdSWTJHQ2dtankxcHd6RmdrUVpuMGlOVWZXYmhtVXhsRjNQVmtabHBtTllVY1Z3NEV6b05walJuVkhXR210UW1SRE0wenhWMVRXSm1tU0d1NUtkVkxhZVhvMENwM25VQm5tanlxQmlWVUptVmxoNHNONFNPYldyQUltcVpBWktnRnhxSlJYVEVwVWJwd2VoQ2hhcUZ6MzZYL2dFT2ZWclRZbzFoZ1JhSC9JV3BCVjdDcDFUeW43a21xVm53cFJoWlJ0QUFaVWpsclRXSHBwWGZZYWxTWGx4RUFpeityNUtyUWZHcnA4Z1NxQTYweVpWYXh6Qm9XRGdrSTJ4Q0phbldIN1QvejJLalZGTjR5ZU1kYUVZaUxLZ0hLRWhXTHRKZHlxRllzSjE0NlQxcjZ0SXZmdno0S1RCd0JUZDVxOEd2Qy9LQld1T2ZpVks4L3RDejgycTVheFJleE1QYXNpaFVEaC9vN01WR2JXRXhhVGpPc0d6RTRKcWlWUjcrWEZuRUNJVmx0VTA3RWQzaWNsU0xIWXJ2S25Wa3Q0U3EyVkxtTVpzUUM0UU0wVnFhZVcwWXNQc3A3TGdFd1p2VUR6Q0VTc0xSV0poTkh6Yk5aTVl2cVBOdHFKU3ZTQTZFeGNUbGQrMFZBRm1yUmdqV3FhbXNGUjl0OUVaeld6V2luL3oxeEVYakhkWWZEYVRYZHQwQjFad1g0bm5yYkhUaHA1U1JvMU9KWHJxbldEMUtqdmNxblJwMTk1V2xxNFl0MkdlcGlwYy9jcEQzaFh0aVB2MFpBaDFrbGdEcG13bXlOMVRaNkhpNFFEbURza0pVZ0lZdTN5dXBZRmRIejRhdVVnMHBXY3ROWWhtQ0Z0MDRjcnRCamhVYldSNm8xTzlJRVZMOXM4S04xcnluNHVtK3UxVGJieXpVUDRWcXRrTG51T0dXZkZSblNlMFNBTUd1RlFENzg4bU1GeS91K0tsdFdEQWUvZzh5akZHbXBIMGV1WUR1c3BLOXY0Q0NXVmpZQlFMbjBMeXNSd0VjQkZRSU9BUm9sSnBoQjBGb2VlTGkzcFdVYm9oTUwxZGFpaUJSdWNDQ1pTa3VlRkRPUEN6SU5VaTlNQ0RnNGh4Vno5VVVZT3N0S0NQOXl5QkFDeEsyQ045SFdXakpFUlBWY0tDMC80RUJjNUVBdXRSeXZpUWJwb0ZxeW9FR3d5S0dCV0NrSGlMQ293eGpLNlFvS1pJZ3dFdmF3TVpKUmgrelRpaUtHdHFUU25SQ0hiMVFJUHFCMk9TUlNpQUJCMUlvUDg3Z1FqRTJRYlduRUNRSEtVU1l6RWZJaFZkUVVyaml5Q3RnaHFZdVBaTWdWUUxjV2RKQUJIRjZpeUR5RW9ROFB5c21QbVNTSVBjQTR3Q2VSa0NBeFVRUHgxTktOUkc1d2xZUkpBQ3h3Z0FQMExLb3haQ2tER0xvUnlGTFo4b1Yzc09OZDhxQ0xUWlNEQzJpZ1JqbW1PVTAwVElFTW0vSEhnQVlEaTJNU0VRM2VJOHdLYUVHTGJXeWpuS2FNVENuMmw4cVEwQ3MxOERSS0NLN1ZUc2FzWWhQeFRBMDZRZ0I5eW5yS2h4cnB6T2NKNStUTlRDNkhqd0tsVkRsZTZjL012RzFGQ1RYS0NxN214b2EyWmg1RlNNQW9adG1aRld3akN5R1lrRVZwTXBPWTJBRU14YnpMQ2hJQWhpbGtvcUFqUmNncTVFQUdITUFoQXVqWWhpREl5Vk5hS0tDYzZMQkQ4cndDMDVpcUJ4eHcwSWxNbGlvVE9TVFZLZE14cWxTblNsVzVCQVFBSWZrRUNRUUEvd0FzQUFBQUFLQUFWZ0FBQ1A4QS93a2NTTENnd1lNSUV5cGN5TENodzRjUUkwcWNTTEdpeFlzWU0ycmN5TEdqeDQ4TkNjeURnK01PbWdnbzBhbGNpZTVFR1dvNENCQUF1WEhlS2pKazRJQUJzOGtLUzVWMnlKUXhzV29WellzRTRGQ0RFNEdXZ0ZpNm92cWJTdFVmS2dXb05vVkFROGJvMFluekNKUWpBNGFXcDIxUlYxU2xxbXViZ20yS3BwUzdNdk9yUTVGa1lHMWF5N2R2VlhRSlZ0RzF5NURBS2h4eklxajF5NWpxTm4xMjVzMGpySEFWR25TMEdtdGVTd3NkbWlLVUVhNHFseUR6NXRQK2l1bWo1algwdjZTWFVjdW1xa0FSbWJxVUNaQ1prbUMyYjFodzVJUXVhdHEzNzIxb2hPR21TZUJLdVczR2pmOVl6bndldXVqWS9VVW9RNzBqZ1RJL3NzLy96clBxamwxaEozcUxqdzRYSEVqMDBOZWpUdERkWXhrMDhzWFB5ZVRSWkg3VUswejJGUUVSK0taTEFqK2dwR0FFQ1NSd25YUndjSFFIR094dEE5aUNFZnlRUUN5TWhTRE1WM0NvdDlrb3VrUndHQTd6eUhIRmlwbGNVUlExNVpSREN5cXpGVU9OUmxjVUtCc3F0R3lGUmpsd3JDSk1pMWZJTVU4UlFVYWd5eWhWNlNJZ1RhczhxTmsyUDZ4aTJKTUp5UVRIUENkMEl4c3ROMTVVaG82bmRRTUdrREl4WkpOaFA4UVhKbk1pTXFZTEdtRlZkTk1KcUJYVG1rUUUzRUdtWnB1Y3NBcVdFSWxVemdrZjBsU0dsNDNGQW90SUdNbUVoaDJuYlZKZlErQXdjQm9zWFYxYWFKb2czYUdQWnVpdzFoRjZVaktXZ0hrU1VhaFpBbE40LytxYVE2TTJCZ2FoRzMwWFgyTlRKUG9RTllzeFJndDNzMWFVbEdaWmNQRFZLaUZzUm8yc0JRbkRZV1BsN0Ztc1JKa1UwNWdkMEdwVUJoeWFQWHRYY1g2VlU4YTFGVjBSSjE5ZGhYWUh1SDRsNE90Q1hHb0d4N25vVWlRTVk3T1UwMjFIZDVUakZ6ai8vck9LWmlld21xOUVaYVM2MWdrRmQzUWZYL29vdk5BVDRURVd3UlVMVDBRQU5ScEg3RkVtZitwU3NFMk4wZUpleHhKSjZ4YzY5blM4aWk1VXhlclFGZHI2dGNJVnVMTE0wTUYrNGVEekttcHRJNXhEelRLbVNNOCtLL1RFdWxUcDB6UUJlMWxiMmE1OHhXSjEwd3ZCRVd4VnNZREtjaEZnRU51UXEzNkp5N1ZENE9EWmw4MXJQL1RFMTJ2QmdtL2NoVUh0ajVONDMvK3NpSnhiOTEyUVNINUZJUExhOC9CNitOVDQ5VlduNEFxQjgrZGE2TndOT1VJRTZFM0w0azBEbmZibENnbUREN2xVbmNBZjZBY1I0SEJWbHFLT09SelRWclVDR3E0YkJBNjhmZ1h1ZWhFbjBMeFdMT1hVWHRBVFdLK2x6OHJDRTdUS0ZIbndaVWpNeWI4R3NzNldSLzhQUGxQMGhRN1RsOHZoZTE5b2NHejlRQVNnWGRVUDFoUGd0bCtjcjAwTkxIMWwwWDYrODlCZDFSVGpGNFNHM3Y1R2IvNWEyNWdmMS9iWEZ6Z0ljRllpYVY2NUR1Z3pBdktsQ0F4MFY4YjZRZ3Z1SmMrQmE0R2c4QkxIR0JQa3p5RGxZRlFHSTBnWTZ6REdiaDhzeUNvbU54VTBrTkF1MmZOTEhpU1RRb0tVNFc4VTA5M2E4UEU5dm9DaGhvTmJIK3YvWEhjRklRSndYa0NFZ3o3c1J3dnhYYzV6ZmNFQjhvQm9zSExRYUMyRTBDSEx2a082cW15T2lnU1J6QXo0TXJ2TEhZc3hXaHlmVExyb0QwVTRFVzhFS0Y1VndJQkVNUDVqZ2xYWlJoclJOUS80K1VVWDFiUGpHZGtsT0dFb3NDOGhPSjBkQ1FLSEhsSmxFMGRiR3dFYzZjVXBMbElnODJEaFZNVG1zN1kxeGdRdjdGc21CTllYU0s0TmQzMkp3Qk11ZVJCd1VISXFlNlJNR2ZSR2xWaldzSHgrMllZRlEwT2d4aWdpbEpjakEyT21ZTWxpM2U2UWZFR0h4Vmhaa0V3eTVrM29jbG1IZ0hrNXlTRFRpNEVjRGh1cFFoOW1LcVNYZnZtQnNvcVZDVW94SmcvRjlHWkJ3R0UvcXRoaGxhNHBRd3daVXc1RnFyT1YwM3RaTnQrVC96UlZSZktlQ0prSExhZHlBdWlCU0ZPTjJjWWRkZ2xRZThpeEt0czVpa3hXeHhkb0FyUXlyK1JtdFQ0aWxvR1c3cUlQcVZWajlQRTRqU3p2Tk84RUtkdm1xU29wSG5BZXdzaENSdGV5aVgycTFDQUVzQWRMVlhVYld5cFBMRE5kU3pkditoQ2R6bWNUT01DQmxiaG5tRlhJQVF3YmtzMVFpZm9RZkJpeFViclFDaGQrRktPdW9tRUtaRGhCTWY0UVZMNjBqcW9TUVVOWi9VSUxXbXhqRzI1ZEsyUHM4RWEwUGtRbUl2elBiTW9CVDd0T1pCV2JZSkplVDVPQThQblZJamVSYTM2MnNZbkJIUFlpaDNub1lDT3cwY2RtUkNaWnlObGcvVkdLVmRqVHNwY2RDVG9VSUo4VjBPSUVkQUl0U0F4VFBqdFFkRE1KME1jVU1rRk4xVEhpTkJNd1lRbzY0TnJXM3JiMXJlaXdBeGZLZ1lNNjJuWkFJOEhCczJUQ1hBSmtBZzVrVUtweGowdmQ2bHJYSWdFQkFDSDVCQWtFQVA4QUxBQUFBQUNnQUZZQUFBai9BUDhKSEVpd29NR0RDQk1xWE1pd29jT0hFQ05LbkVpeG9zV0xHRE5xM01peG84ZVBEUW5NZzRQakRwb0lLTkdwWEludVJCbHFPQWdRQUxseDNpb3laT0NBQWJQSkNrdVZkc2lVTWJGcUZjMkxCT0JRZ3hPQmxvQll1cUw2bTByVkh5b0ZxRGFGUUVQRzZOR0o4d2lVSXdPR2xxZHRVVmRVcGFwcm00SnRpcWFVeXpUenEwT1JaR0J0V3N1M2IxVjBDVlpkcVd0WElZRlZPT1pFVU91M01kVnRkcWlSSVZ6NDRDbzA2R2c1M3J5V0ZqbzBSU29qWEZVdWdXYk9xUDF0bTdKcW51aUJTVEdubmsxVmdhTEpyd21RbVpLQXRtOTl3bHhYTG5yYXQrOXRhSVJSQmtuZ1NybHR4bzNIQWlQenEwaDAwYlA3aTFCbWVVY0NaWDVvLzQrK0NZMzNqY0pPOUI0ZkhTNDRrT21oczQ4K0pkUEhNbWptajU5anY2TkovZHB0UXMxNUZSRVFnVys2SlBBRFNneEdrRUFDMkJuM0F4d2MzUUZHZTlzQTFtQUVQeVFRaTI4cnpIT0ZSbkNzeDlrb3VrU0FHQTd6eUhIRmk1bGNVUlExNVpSREN5cTBGVU9OUmxjY09Cc3F0R3lGUmpsd3JDSk1qRmZJTVU4UlJVYWd5eWl6d2RHZlJhdEV1TmsyUDZ4eW1IQ0dKVFhQQ2QzTVJzdU9GNVhoSTJyZGdFRmtkUXZaZE5nUDhuSFduRVVFbU5pWUxtaUVWZEZOSjZSV2pGY1RFWERIbVp0dGNrSnJGSW1FaGk2b0VmRGVSR1dFNlZnc3NJaUVrVXhvMklIYUpnUXlCQTREcU1IU1ZhY1BoUVZHbkkyUkdkRWQrbXlHRGpXQWF2K1VucFdOSlhESFJCZHVsc0FVcEFhNmluaU82VUpoUkswNkJnYVgzNVdCcWw5VENCTVJOWXcxUmt0M0lKVlJiSzIzM2dYSFpsbHc4TlVxSVhBMjRFUENmT2hZT2JGK3RNb1VtK25UNjBDWkZPT1lIZTltVk1hMmpvMGJVbkYrbFZOR1lVbEZ5MWNlNVRSMGhaMThkU1hhSGZqMmxZQ3pEWDI1R1J6L1Z1YW93R3R0WXc5RHdqUTJTem4xVmxpT1grQ0V2TXBtSjJRcldsZ1lWNVhGbEFlVlFldGFKNFRjRVg1ODZhUHlRazhBNjFjRUk3NG0wR0dPSVZzUUFkUTBGb0hOSG1WQ3FDNGgyK1FZTFk4S1BYU3VmZjFRZFVIbCtvWE94bFlUdEFxalUvSHEwQlh5K3JYQ0ZVWUxEUTZoYTZVNzBNbCs0UkMyUWF1b3RZMGNENFgvMjVnaWJRdmRYTXRUQVczUUV3aFRwYy9kQmhHd2w5d0pyYkpzVmJGQUhqWVpmdVhoSFJ5RXg4SW00d01WQVFhMURXSGRsNzZnLzBQQUUveFdWVE5CNFBUWmw5bXBVL1FFNFZQQlVuSHQveXpwVjJBRTFkbVhMb0h6enRBVml0eHBPZU9zMTEyWFNEOHpiYnhBOHpoRysvUkkrM1VDYlBuMXBlZjBENzNkR0RxN1k1OTNYK2hVSnp4ZnRFZy9QZDErcVFwKzczQlBOY01WNEFpRFQrdFRuUUR6L0lhWldWVTRCY0NoVFNFUGZOSEZGT0NRRkhOVlpRVm9LS0NuR3RhWDVmR3VIQTZrU2g0T1ZZUVRrSTF5QlpPZ1FwNHdPY1Z0RFlCeW1FRmZHQ0NIZFNGd0xZWUFtd2dQa2oyMWxhK0FkeENnUDJCQkRYeXdpeS9vS040TS8rWHdRYjZnSVdnenJKOC9Xa0lBMDFIbEJ6TkVDQUZrNXhmM1dZMEFmdXRNQktnQmk3NWt3WXFnbXdmdS9ER0ZLQTZOQU1NclQrTDhBVEl6RnNTSlZka0dHSzJHdWI1WUFRMXJaS0FiaHphUEYvYWxqVzdzM2xwMFFRczg5cVVJYzdUYUhYekdQaUVDRUFlS2lLUWtGWEdDY2hpU0w0amNZKzhjWXdKTkxxUWNrbHBMSnQwNER4M203b2FlTE1ncWxHaWVQZjZ3TDNtWWh5TTlXWWJrNWN5QzA4TkhFZGNDaGxRdVpJcDkyWVFicjBCRnZtd0RZcjVFQ0J6MDBUSmFJRkdFOE9zTERrNllUTEdWQTBkcklRUXVVd2NlL2xHbGZkVk1pQ3hWdUJZSXpqQXBqdG1tTDJYaVRVVThjMzRFS09GVXdJRE1jQ0tFa1k5Ulo5am0wZjlGditnQ2xmWU1IZ1dyUWdZSkNzT1BmQW5CL3dKYUVEanNjaXFiNEJzOEgvcE5haktVSVBOUW9qOCt4N3ZZY1RLUlpzekV5SUlwVWVNTmRDMFJlTUpGRndJT2l2cERuNFVwd3hxcEFsTjdOdEV2MjVpbHhUUTZGVVdBVkpOMW5KMUZYd01PT0NCMExlalkyVXJGeVZQNWhhMXJqUW5CVHpVcHk2TitFNkREOFNaVkVqQlZUeHFvTVQvd2x0VXlvYW5HNUdHb1MwVUlPTVpvQjVXK3BneXY3TmRDMDVvUWNDUnRmRmo5aURDeStMdVMwalZpTSsyZkRJOENCMUE1Wmh0MzBPbGZDV0lQZVJZdXJ4bVJpU21yNHRURk5tUnNqa2tBdWo0aWxzQlNaWHVXbGNpMUdxT1A3MmxrWGFocGEyZ2xBbzY0L202YUlKMkhNTExnMHJYZmJBS3lxNVdpUFZ6N3U4blVkRzVpcWUxYXVKcGJpdXcyTlFuWUJBNXdvQ1VoSG1ZVmNnQ0RoMlpEM09KU0JCL0YzQXhVdE1LRklkWG91MmlZQWhsT1VJdy9DSmN2QkxTdVJSWVZIVnJRWWh2YmVPOTU1L1ZPOVVwRUpxRUVFRzNLNFZiN1htUVZtNENTZmxHVGdDUDY5N1JrbUMrQXRyR0p3UnlZSTRoeExJQWlzTmtIZjRjQVdVamJnUDFSaWxYTTFjSWFFUWtjMEtHQStheUFGaWZJRTRqdGNwZ20ybUd5bWRWSGZicTY0cnRrQWlaTVFVZDgzY3RqOThJWEhYYmdRamx3VU04YUMyNGtPQmlRVEpaTWdFekFnUXpNTGJLUnAwemxLcjhtSUFBaCtRUUpCQUQvQUN3QUFBQUFvQUJXQUFBSS93RC9DUnhJc0tEQmd3Z1RLbHpJc0tIRGh4QWpTcHhJc2FMRml4Z3phdHpJc2FQSGp3MEp6SU9ENHc2YUNDalJxVnlKN2tRWmFqZ0lFQUM1Y2Q0cU1tVGdnQUd6eVFwTGxYYklsREd4YWhYTml3VGdVSU1UZ1phQVdMcWkrcHRLMVI4cUJhZzJoVUJEeHVqUmlmTUlsQ01EaHBhbmJWRlhWS1dxYTV1Q2JZcW1sTXMwODZ0RGtXUmdiVnJMdDI5VmRBbFdYYWxyVnlHQlZUam1SRkRydHpIVmJYYW9rU0ZjK09BcU5PaG9PZDY4bGhZNk5FVXFJMXhWTG9GbXpxajliWnV5YXA3b2dVa3hwNTVOVllHaXlhOEprSm1TZ0xadmZjSmNWeTU2MnJmdmJXaUVVUVpKNEVxNWJjYU54d0lqODZ0SWROR3orNHRRWm5sSEFtVithUCtQdmdtTjk0M0NUdlFlSHgwdU9KRHBvYk9QUGlYVHh6Sm81bytmWTcralNmM2FiVUxOZVJVUkVJRnZ1aVR3QTBvTVJwQkFBdGdaOXdNY0hOMEJSbnZiQU5aZ0JEOGtFSXR2Szh4emhVWndyTWZaS0xwRWdCZ084OGh4eFl1WlhGRVVOZVdVUXdzcXRCVkRqVVpYSERnYktyUnNoVVk1Y0t3aVRJeFh5REZQRVVWR29Nc29zOEhSbjBXclJMalpOaitzY3Bod2hpVTF6d25kekViTGpoZVY0U05xM1lCQlpIVUwyWFRZRC9KeDFweEZCSmpZbUM1b2hGWFJUU2VrVm94WEV4Rnd4NW1iYlhKQ2F4U0poSVl1cUJIdzNrUmxoT2xZTExDSWhKRk1hTmlCMmlZRU1nUU9BNmpCMGxXbkQ0VUZScHlOa1JuUkhmcHNoZzQxZ0dyL2xKNlZqU1Z3eDBRWGJwYkFGS1FHdW9wNGp1bENZVVN0T2dZR2w5K1ZnYXBmVXdnVEVUV01OVVpMZHlDVlVXeXR0OTRGeDJaWmNQRFZLaUZ3TnVCRHduem9XRG14ZnJUS0ZKdnAwK3RBbVJUam1CM3ZabFRHdG82TkcxSnhmcFZUUm1GSlJjdFhIdVUwZElXZGZIVWwyaDM0OXBXQXN3MTl1UmtjLzFibXFNQnJiV01QUThJME5rczU5VlpZamwvZ2hMektaaWRrSzFwWUdGZVZ4WlFIbFVIcldpZUUzQkYrZk9tajhrSlBBT3RYQkNPK0p0QmhqaUZiRUFIVU5CYUJ6UjVsUXFndUlkdmtHQzJQQ2oxMHJuMzlVSFZCNWZxRnpzWldFN1FLbzFQeDZ0QVY4dnExd2hWR0N3ME9vV3VsTzlESmZ1RVF0a0dycUxXTkhBK0YvOXVZSW0wTDNWekxVd0Z0MEJNSVU2WFAzUVlSc0pmY0NhMnliRld4UUI0MkdYN2w0UjBjaE1mQ0p1TURGUUVHdFExaDNaZStvUDlEd0JQOFZsVXpRZUQwMlpmWnFWUDBCT0ZUd1ZKeDdmOHM2VmRnQk5YWmx5NkI4ODdRRllyY2FUbmpyTmRkbDBnL00yMjhRUE00UnZ2MFNQdDFBbXo1OWFYbjlBKzkzUmc2dTJPZmQxL29WQ2M4WDdSSVB6M2RmcWtLZnU5d1R6WERGZUFJZzAvclU1MEE4L3lHbVZsVk9BWEFvVTBoRDN6UnhSVGdrQlJ6VldVRmFDaWdweHJXbCtYeHJod09wRW9lRGxXRUU1Q05jZ1dUb0VLZU1EbkZiUTJBY3BoQlh4Z2doM1VoY0MyR0FKc0lENUk5dFpXdmdIY1FvRDlnUVExOHNJc3Y2Q2plRFAvbDhFRytvQ0ZvTTZ5ZlAxcENBTk5SNVFjelJBZ0JaT2NYOTFtTkFEL3NUQVNvQVl1K1pNR0tvSnNIN3Z3eGhTZ09yUWpESzAvaS9BRXlNeGJFaVZYWkJoZ0ZSd0N2b1dHTkRIVGowT2J4d3I2MDBZMllROThkKzFLRU9WcnREajVqbnhBQjJEMGdEcEl2aGRSajd4eGpBa24rSTVCQUxJZWsxaEpKTjg1RGg3bTc0UXdKa0ltK3JDQXdTalNQSHJNNHNIa3NjbjVFNDhzMnVKTzhuRmx3ZXZnbzRsckFZRW5WK2EwejdxTGlBTjE0QldGbURHS1NYQVVjL1pFQU5NQkJIeTJqQlJKRkNMKys0T0NFWmlTQURpTlFCTkxnYUMyRXVHWHF3TU0vcXJTdmwvOFFoaUg2Z2daN3VGS0ZhNEhnS0NuSUYzRVdFRm9EWTQxTXlxbi9pR25Dc29SVEFRTXlKVmtHVmxJbEZ1Z1NTQ0lmWTgrd3phT0xmdEdGS04xSWdCSnVBeHl1U1lwZnlDQkJZZlNSTHlING54N3I2RENDd0VHWFU5a0UzMkNKVW5OaTA0MWwyRXRmY0VNOUpmcmpjN3lMSFNVTmVUY0NkTXlVbjh2RXlQcWlVdkRSY3kwUmVBSTYveEVldjJpdElPQm9xVDhhV3BneXJKRXFWSVZscW96V1JMOXM0NVVXcytsVUZNSFR1d2tEb0o0N0NDYjVNb1dYdmdZY2NQam9XdEN4TTBrS1F3Mk5tUU5DNWlGVytZV3RhNDBKUVZrdjE1Z1ZQT0U4cnBTck9TYzZuSEpTSlFHREZkd2RIT3NQT3hoR3JEL3dsdFV5b2FuRzVNR3RVUVJIS1JxVFZvV0FZNHgyVU9wckNycVp1YUJ6RldMMVIyZ1dBbzZrLzQyUHNSOFJ4aTkvdDFKTEVxQ1I2QU5yNzY3YVB4a2VCUTZnY3N3MjdpRGMrYTFWa1EreEIwQUxoOXVNeUFTVVZmR3JKSDNYTDZhTnpURUpTS2hIeEVKY3FteHZxUUo1RVVxYkpaRnJOVVlmMzlQSXVsQ1RXdlRDaXd4Ri9FRmRIUUlPZ3pyc21qeWRoekN5SU5XMWJLSzZsaXhIaEJJQTJvVVF3QjcrZGRoa3NqbzNzUlI0TFpDMXIxb2ZSR0dEUURnMUNkZ0VEbkNnSlNFZVpoVnlBSU9IWnBOaERSOEVEc082Q0Q2TU9TbGRhSVVMUTZxUmp0RXdCVEtjb0JoL3VEQmZDT2hpdXl3cU9yU2d4VGEyb1dRaHo4dWZSV1lPQVRZSklOcVVRN1ZSTHN3cU5nR2xLcU9tbVZETzhsRnU0bVFBYldNVGd4R3oxUkF6WFFCRlFGeThhcjRpQWJLUU5pLzdveFNyRUdtY0JUY1NkQ2hnUGl1Z3hRbnl0R2ZqSGFhSmRzQXVlUFZSbjhnV21pT2toQWxUME1Ia0pGczZ5VXRHaHgyNFVBNGNEUFRSQlJRSlNRWWtrMUtURWc1a0lQR25RYzNxVnJ2NjFRc0pDQUFoK1FRSkJBRC9BQ3dBQUFBQW9BQldBQUFJL3dEL0NSeElzS0RCZ3dnVEtseklzS0hEaHhBalNweElzYUxGaXhnemF0eklzYVBIancwSnpJT0Q0dzZhQ0NqUnFWeUo3a1FaYWpnSUVBQzVjZDRxTW1UZ2dBR3p5UXBMbFhiSWxER3hhaFhOaXdUZ1VJTVRnWmFBV0xxaStwdEsxUjhxQmFnMmhVQkR4dWpSaWZNSWxDTURocGFuYlZGWFZLV3FhNXVDYllxbWxNczA4NnREa1dSZ2JWckx0MjlWZEFsV1hhbHJWeUdCVlRqbVJGRHJ0ekhWYlhhb2tTRmMrT0FxTk9ob09kNjhsaFk2TkVVcUkxeFZMb0ZtenFqOWJadXlhcDdvZ1VreHA1NU5WWUdpeWE4SmtKbVNnTFp2ZmNKY1Z5NTYycmZ2YldpRVVRWko0RXE1YmNhTnh3SWo4NnRJZE5Heis0dFFabmxIQW1WK2FQK1B2Z21OOTQzQ1R2UWVIeDB1T0pEcG9iT1BQaVhUeHpKbzVvK2ZZNytqU2YzYWJVTE5lUlVSRUlGdnVpVHdBMG9NUnBCQUF0Z1o5d01jSE4wQlJudmJBTlpnQkQ4a0VJdHZLOHh6aFVad3JNZlpLTHBFZ0JnTzg4aHh4WXVaWEZFVU5lV1VRd3NxdEJWRGpVWlhIRGdiS3JSc2hVWTVjS3dpVEl4WHlERlBFVVZHb01zb3M4SFJuMFdyUkxqWk5qK3NjcGh3aGlVMXp3bmR6RWJMamhlVjRTTnEzWUJCWkhVTDJYVFlEL0p4MXB4RkJKalltQzVvaEZYUlRTZWtWb3hYRXhGd3g1bWJiWEpDYXhTSmhJWXVxQkh3M2tSbGhPbFlMTENJaEpGTWFOaUIyaVlFTWdRT0E2akIwbFduRDRVRlJweU5rUm5SSGZwc2hnNDFnR3IvbEo2VmpTVnd4MFFYYnBiQUZLUUd1b3A0anVsQ1lVU3RPZ1lHbDkrVmdhcGZVd2dURVRXTU5VWkxkeUNWVVd5dHQ5NEZ4MlpaY1BEVktpRndOdUJEd256b1dEbXhmclRLRkp2cDArdEFtUlRqbUIzdlpsVEd0bzZORzFKeGZwVlRSbUZKUmN0WEh1VTBkSVdkZkhVbDJoMzQ5cFdBc3cxOXVSa2MvMWJtcU1CcmJXTVBROEkwTmtzNTlWWllqbC9naEx6S1ppZGtLMXBZR0ZlVnhaUUhsVUhyV2llRTNCRitmT21qOGtKUEFPdFhCQ08rSnRCaGppRmJFQUhVTkJhQnpSNWxRcWd1SWR2a0dDMlBDajEwcm4zOVVIVkI1ZnFGenNaV0U3UUtvMVB4NnRBVjh2cTF3aFZHQ3cwT29XdWxPOURKZnVFUXRrR3JxTFdOSEErRi85dVlJbTBMM1Z6TFV3RnQwQk1JVTZYUDNRWVJzSmZjQ2EyeWJGV3hRQjQyR1g3bDRSMGNoTWZDSnVNREZRRUd0UTFoM1plK29QOUR3QlA4VmxVelFlRDAyWmZacVZQMEJPRlR3Vkp4N2Y4czZWZGdCTlhabHk2Qjg4N1FGWXJjYVRuanJOZGRsMGcvTTIyOFFQTTRSdnYwU1B0MUFtejU5YVhuOUErOTNSZzZ1Mk9mZDEvb1ZDYzhYN1JJUHozZGZxa0tmdTl3VHpYREZlQUlnMC9yVTUwQTgveUdtVmxWT0FYQW9VMGhEM3pSeFJUZ2tCUnpWV1VGYUNpZ3B4cldsK1h4cmh3T3BFb2VEbFdFRTVDTmNnV1RvRUtlTURuRmJRMkFjcGhCWHhnZ2gzVWhjQzJHQUpzSUQ1STl0Wld2Z0hjUW9EOWdRUTE4c0lzdjZDamVEUC9sOEVHK29DRm9NNnlmUDFwQ0FOTlI1UWN6UkFnQlpPY1g5MW1OQUQvc1RBU29BWXUrWk1HS29Kc0g3dnd4aFNnT3JRakRLMC9pL0FFeU14YkVpVlhaQmhnRlJ3Q3ZvV0dOREhUajBPYnh3cjYwMFkyWVE5OGQrMUtFT1ZydERqNWpueEFCMkQwZ0RwSXZoZFJqN3h4akFrbitJNUJBTEllazFoSkpOODVEaDdtNzRRd0prSW0rckNBd1NqU1BIck00c0hrc2NuNUU0OHMydUpPOG5GbHdldmdvNGxyQVlFblYrYTB6N3FMaUFOMTRCV0ZtREdLU1hBVWMvWkVBTk1CQkh5MmpCUkpGQ0wrKzRPQ0VaaVNBRGlOUUJOTGdhQzJFdUdYcXdNTS9xclN2bC84UWhpSDZnZ1o3dUZLRmE0SGdLQ25JRjNFV0VGb0RZNDFNeXFuL2lHbkNzb1JUQVFNeUpWa0dWbElsRnVnU1NDSWZZOCt3emFPTGZ0R0ZLTjFJZ0JKdUF4eXVTWXBmeUNCQllmU1JMeUg0bng3cjZEQ0N3RUdYVTlrRTMyQ0pVbk5pMDQxbDJFdGZjRU05SmZyamM3eUxIU1VOZVRjQ2RNeVVuOHZFeVBxaVV2RFJjeTBSZUFJNi94RWV2Mml0SU9Cb3FUOGFXcGd5ckpFcVZJVmxxb3pXUkw5czQ1VVdzK2xVRk1IVHV3a0RvSjQ3Q0NiNU1vV1h2Z1ljY1Bqb1d0Q3hNMGtLbzVGOG1RTkM1aUZXK1lXdGE0MEpRVmt2MTVnVlBPRThycFNyT1NjNm5ISlNKUUdERmR3ZEhPc1BPeGhHckQvd2x0VXlvYW5HNU1HdFVaeEhLUnFUVm9XQVk0eDJVT3ByQ3JxWnVhRHpWNDRKelVMQWtiVHgvekgySThMNDVlOVdhc2xWWk1FeFFZellWZnNudzZQQUFWU08yY1lkd0FwTGlQcUZGc3dWaUQwQVdyamJaa1Ftb0t5S1g5MzRoTitlaTJsamMwd0NFdW9Sc1F5WEt0dXpKTkprMnBobVNlUmFqZEhIOXpTeUx0U2tWcEtrbk1JWXAvS0R1am9FSEFaMTJEVjVPZzloWkVHcWE5bUVkY0Uza25Ld3QxYWdYUWdCN0JGZ2gwMG1xM01UQzRMWEFsazN0b1lNNTZWS3BTNUM0ZFFrWUJNNHdJR1doSGlZVmNnQkRCNmFUWWZ2VmhRaGhnVXhSZWhRYWpZUjNZWGd3NWlUMG9WV3VEQ2tHaGtaRFZNZ3d3bUs4WWNOODRXQWpFT0RQbll6SkJvWnVSeGNDTUVtZEpIQnpVUWd3aEpaVkhSb1FZdHRiS1BNVHA2WFA2Mkd0UldjMmRqTVpNNU9GdnlMRkFKc0VrQzBLWWRxR1FjT3ZNNEhGU29DeVNvMkFTVThvNmFaYXo2a2QvVURaWnJjSk0wQTJzWW1Cc003dnVxSEZnc2NEZzZvQzZBSWtKZDNxN2h6ZEZCaEJ5M2xoZ0JaU0p1aC9WR0tWWWcwZFhESUxtZGlzWWsvWG5FazZGREFmRlpBaXhQazZaNmNmbTRzbkluaGp4eW1pWGFRZGEzMFVaL0lmbVNvcVpubEQ2alJTZXhsQWlaTVFjZVp5Y3h0TXBzWkhYYmdRamx3TUZBSmt1RUh0RENFQXJwTlpnVVlvaGcvTVBKOEpTZ1NrZ3hJSnZnbUpSeklvT0p5ejdNcjNjazNlRzdDUUdjdjllQUlUN2p4QWdJQUlma0VDUVFBL3dBc0FBQUFBS0FBVmdBQUNQOEEvd2tjU0xDZ3dZTUlFeXBjeUxDaHc0Y1FJMHFjU0xHaXhZc1lNMnJjeUxHang0OE5DY3lEZytNT21nZ28wYWxjaWU1RUdXbzRDQkFBdVhIZUtqSms0SUFCczhrS1M1VjJ5SlF4c1dvVnpZc0U0RkNERTRHV2dGaTZvdnFiU3RVZktnV29Ob1ZBUThibzBZbnpDSlFqQTRhV3AyMVJWMVNscW11YmdtMktwcFRMTlBPclE1RmtZRzFheTdkdlZYUUpWbDJwYTFjaGdWVTQ1a1JRNjdjeDFXMTJxSkVoWFBqZ0tqVG9hRG5ldkpZV09qUkZLaU5jVlM2QlpzNm8vVzJic21xZTZJRkpNYWVlVFZXQm9zbXZDWkNaa29DMmIzM0NYRmN1ZXRxMzcyMW9oRkVHU2VCS3VXM0dqY2NDSS9PclNIVFJzL3VMVUdaNVJ3SmxmbWovajc0SmpmZU53azcwSGg4ZExqaVE2YUd6ano0bDA4Y3lhT2FQbjJPL28wbjkybTFDelhrVkVSQ0JiN29rOEFOS0RFYVFRQUxZR2ZjREhCemRBVVo3MndEV1lBUS9KQkNMYnl2TWM0VkdjS3pIMlNpNlJJQVlEdlBJY2NXTG1WeFJGRFhsbEVNTEtyUVZRNDFHVnh3NEd5cTBiSVZHT1hDc0lreU1WOGd4VHhGRlJxRExLTFBCMFo5RnEwUzQyVFkvckhLWWNJWWxOYzhKM2N4R3k0NFhsZUVqYXQyQVFXUjFDOWwwMkEveWNkYWNSUVNZMkpndWFJUlYwVTBucEZhTVZ4TVJjTWVabTIxeVFtc1VpWVNHTHFnUjhONUVaWVRwV0N5d2lJU1JUR2pZZ2RvbUJESUVEZ09vd2RKVnB3K0ZCVWFjalpFWjBSMzZiSVlPTllCcS81U2VsWTBsY01kRUYyNld3QlNrQnJxS2VJN3BRbUZFclRvR0JwZmZsWUdxWDFNSUV4RTFqRFZHUzNjZ2xWRnNyYmZlQmNkbVdYRHcxU29oY0RiZ1E4Sjg2Rmc1c1g2MHloU2I2ZFByUUprVTQ1Z2Q3MlpVeHJhT2pSdFNjWDZWVTBaaFNVWExWeDdsTkhTRm5YeDFKZG9kK1BhVmdMTU5mYmtaSFA5VzVxakFhMjFqRDBQQ05EWkxPZlZXV0k1ZjRJUzh5bVluWkN0YVdCaFhsY1dVQjVWQjYxb25oTndSZm56cG8vSkNUd0RyVndRanZpYlFZWTRoV3hBQjFEUVdnYzBlWlVLb0xpSGI1Qmd0andvOWRLNTkvVkIxUWVYNmhjN0dWaE8wQ3FOVDhlclFGZkw2dGNJVlJnc05EcUZycFR2UXlYN2hFTFpCcTZpMWpSd1BoZi9ibUNKdEM5MWN5MU1CYmRBVENGT2x6OTBHRWJDWDNBbXRzbXhWc1VBZU5obCs1ZUVkSElUSHdpYmpBeFVCQnJVTllkMlh2cUQvUThBVC9GWlZNMEhnOU5tWDJhbFQ5QVRoVThGU2NlMy9MT2xYWUFUVjJaY3VnZlBPMEJXSzNHazU0NnpYWFpkSVB6TnR2RUR6T0ViNzlFajdkUUpzK2ZXbDUvUVB2ZDBZT3J0am4zZGY2RlFuUEYrMFNEODkzWDZwQ243dmNFODF3eFhnQ0lOUDYxT2RBUFA4aHBsWlZUZ0Z3S0ZOSVE5ODBjVVU0SkFVYzFWbEJXZ29vS2NhMXBmbDhhNGNEcVJLSGc1VmhCT1FqWElGazZCQ25qQTV4VzBOZ0hLWVFWOFlJSWQxSVhBdGhnQ2JDQStTUGJXVnI0QjNFS0EvWUVFTmZMQ0xMK2dvM2d6LzVmQkJ2cUFoYURPc256OWFRZ0RUVWVVSE0wUUlBV1RuRi9kWmpRQS83RXdFcUFHTHZtVEJpcUNiQis3OE1ZVW9EcTBJd3l0UDR2d0JNak1XeElsVjJRWVlCVWNBcjZGaGpReDA0OURtOGNLK3ROR05tRVBmSGZ0U2hEbGE3UTQrWTU4UUFkZzlJQTZTTDRYVVkrOGNZd0pKL2lPUVFDeUhwTllTU1RmT1E0ZTV1K0VNQ1pDSnZxd2dNRW8wang2ek9MQjVMSEorUk9QTE5yaVR2SnhaY0hyNEtPSmF3R0JKMWZtdE0rNmk0Z0RkZUFWaFpneGlrbHdGSFAyUkFEVEFRUjh0b3dVU1JRaS92dURnaEdZa2dBNGpVQVRTNEdndGhMaGw2c0REUDZxMHI1Zi9FSVloK29JR2U3aFNoV3VCNENncHlCZHhGaEJhQTJPTlRNcXAvNGhwd3JLRVV3RURNaVZaQmxaU0pSYm9Fa2dpSDJQUHNNMmppMzdSaFNqZFNJQVNiZ01jcmttS1g4Z2dRV0gwa1M4aCtKOGU2K2d3Z3NCQmwxUFpCTjlnaVZKell0T05aZGhMWDNCRFBTWDY0M084aXgwbERYazNBblRNbEovTHhNajZvbEx3MFhNdEVYZ0NPdjhSSHI5b3JTRGdhS2svR2xxWU1xeVJLbFNGWmFxTTFrUy9iT09WRnJQcFZCVEIwN3NKQTZDZU93Z20rVEtGbDc0R0hIRDQ2RnJRc1ROSkNxT1JmSmtEUXVZaFZ2bUZyV3VOQ1VGWkw5ZVlGVHpoUEs2VXF6a25PcHh5VWlVQlZweEhUSHA2QjhmNnd3NkdFZXNQdkdXMVRHaXFNWGx3NjBKa29ndDBERXRvOHloRlk5S3FFSENNMFE1S2ZVMUJOek1YaWYrRTVZV21GZHF2SEJPYWhZQWphZU5qN0VlRThjdmZyUlFpSWhIWWhFU3ppaXc0Sm9nUnUyci9aSGdVT0lES01kdTRBMWlQeGtlK0pLQ1RSeUVBUlAxQ2krMEt4QjRBTFp4d015SVRVRmJGcnlFUjQrL3VNTmlFUE1HNTUyTGEyQnlUZ0lSNlJDelNwY3IySWdLOVlCM3FJMGlUYVdPYUpaRnJOVVlmMzlQSXVsQURXNGtRQUsrTnNRTTRSR3ZoVEV4aGpGUDVRVjBkQWc2RE91eWFQSjJITUxJZzFiVnNZcjBLRWNaUXIzUUNqRjVrSk9WUWNLMDRiQmg3bU5oaGs4bnEzTVRTNHJWQXRrRDJNT2FkMEZDVWliU0dEQUdtU3FVdTR1UFVKR0FUT01DQmxvUjRtRlhJQVF3ZW1zMlJxVnhMMU1RaUFXQm9vWllTRWhiRUZLSC9RNm5aaEhrWGdnOGxyMVlYV3VIQ2tHckVaelJNZ1F3bktNWWZpc3dYQW1iRUhoamVqQzcrVUl3VDdHWklOT0p6T2JnUWdrM29Jb09iaVFDUEk3S282TkNDRnR2WUJxZ0pQUzkvWGtRWVlDQzEya1FkNms5bkp3c2pSZ29CTmdrZzJwUWp0aHdoQUE0c1cydS9vRUpGSUZuRkpxRFVhODQwMDlRYktjTjRpKzBZUTlQa0pxcld6elkyTVpodlVZUFh2YWJGQW9lRGcvUUNLQUwrdFl0TkZPSHQrYURDRG1zV2pVeXlrTFppbDJJVklyV0xiamJ4elY3SFloTi92T0pJMEtHQStheUFGaWZJRStoV0FZZEZSWHRxc1hDbWtCR3NKVERZd2IzODFVZDk2bnNwTWxCREVRdE56U3gvUUEzd0dvK1VNR0VLT2tUOTZaSi9PdFRvUkxBREY4cUJnNEdDcnd5cm9FYnNOckVOUXlqQTVKOVdnQ0dLOFFNK1IxaUNJaUhKZ0dSQ2RGTENnUXhhZHJrSVpYVDBWWFNuNk9DNUNRTXB2dFNxVy8zcXhnc0lBQ0g1QkFrRUFQOEFMQUFBQUFDZ0FGWUFBQWovQVA4SkhFaXdvTUdEQ0JNcVhNaXdvY09IRUNOS25FaXhvc1dMR0ROcTNNaXhvOGVQRFFuTWc0UGpEcG9JS05HcFhJbnVSQmxxT0FnUUFMbHgzaW95Wk9DQUFiUEpDa3VWZHNpVU1iRnFGYzJMQk9CUWd4T0Jsb0JZdXFMNm0wclZIeW9GcURhRlFFUEc2TkdKOHdpVUl3T0dscWR0VVZkVXBhcHJtNEp0aXFhVXl6VHpxME9SWkdCdFdzdTNiMVYwQ1ZaZHFXdFhJWUZWT09aRVVPdTNNZFZ0ZHFpUklWejQ0Q28wNkdnNTNyeVdGam8wUlNvalhGVXVnV2JPcVAxdG03SnFudWlCU1RHbm5rMVZnYUxKcndtUW1aS0F0bTk5d2x4WExucmF0Kzl0YUlSUkJrbmdTcmx0eG8zSEFpUHpxMGgwMGJQN2kxQm1lVWNDWlg1by80KytDWTMzamNKTzlCNGZIUzQ0a09taHM0OCtKZFBITW1qbWo1OWp2Nk5KL2RwdFFzMTVGUkVRZ1crNkpQQURTZ3hHa0VBQzJCbjNBeHdjM1FGR2U5c0ExbUFFUHlRUWkyOHJ6SE9GUm5Dc3g5a291a1NBR0E3enlISEZpNWxjVVJRMTVaUkRDeXEwRlVPTlJsY2NPQnNxdEd5RlJqbHdyQ0pNakZmSU1VOFJSVWFneXlpendkR2ZSYXRFdU5rMlA2eHltSENHSlRYUENkM01Sc3VPRjVYaEkycmRnRUZrZFF2WmROZ1A4bkhXbkVVRW1OaVlMbWlFVmRGTko2UldqRmNURVhESG1adHRja0pyRkltRWhpNm9FZkRlUkdXRTZWZ3NzSWlFa1V4bzJJSGFKZ1F5QkE0RHFNSFNWYWNQaFFWR25JMlJHZEVkK215R0RqV0FhditVbnBXTkpYREhSQmR1bHNBVXBBYTZpbmlPNlVKaFJLMDZCZ2FYMzVXQnFsOVRDQk1STll3MVJrdDNJSlZSYksyMzNnWEhabGx3OE5VcUlYQTI0RVBDZk9oWU9iRit0TW9VbStuVDYwQ1pGT09ZSGU5bVZNYTJqbzBiVW5GK2xWTkdZVWxGeTFjZTVUUjBoWjE4ZFNYYUhmajJsWUN6RFgyNUdSei9WdWFvd0d0dFl3OUR3alEyU3puMVZsaU9YK0NFdk1wbUoyUXJXbGdZVjVYRmxBZVZRZXRhSjRUY0VYNTg2YVB5UWs4QTYxY0VJNzRtMEdHT0lWc1FBZFEwRm9ITkhtVkNxQzRoMitRWUxZOEtQWFN1ZmYxUWRVSGwrb1hPeGxZVHRBcWpVL0hxMEJYeStyWENGVVlMRFE2aGE2VTcwTWwrNFJDMlFhdW90WTBjRDRYLzI1Z2liUXZkWE10VEFXM1FFd2hUcGMvZEJoR3dsOXdKcmJKc1ZiRkFIallaZnVYaEhSeUV4OEltNHdNVkFRYTFEV0hkbDc2Zy8wUEFFL3hXVlROQjRQVFpsOW1wVS9RRTRWUEJVbkh0L3l6cFYyQUUxZG1YTG9Ienp0QVZpdHhwT2VPczExMlhTRDh6YmJ4QTh6aEcrL1JJKzNVQ2JQbjFwZWYwRDczZEdEcTdZNTkzWCtoVUp6eGZ0RWcvUGQxK3FRcCs3M0JQTmNNVjRBaURUK3RUblFEei9JYVpXVlU0QmNDaFRTRVBmTkhGRk9DUUZITlZaUVZvS0tDbkd0YVg1Zkd1SEE2a1NoNE9WWVFUa0kxeUJaT2dRcDR3T2NWdERZQnltRUZmR0NDSGRTRndMWVlBbXdnUGtqMjFsYStBZHhDZ1AyQkJEWHl3aXkvb0tONE0vK1h3UWI2Z0lXZ3pySjgvV2tJQTAxSGxCek5FQ0FGazV4ZjNXWTBBUCt4TUJLZ0JpNzVrd1lxZ213ZnUvREdGS0E2dENNTXJUK0w4QVRJekZzU0pWZGtHR0FWSEFLK2hZWTBNZE9QUTV2SEN2clRSalpoRDN4MzdVb1E1V3UwT1BtT2ZFQUhZUFNBT2tpK0YxR1B2SEdNQ1NmNGprRUFzaDZUV0VrazN6a09IdWJ2aERBbVFpYjZzSURCS05JOGVzeml3ZVN4eWZrVGp5emE0azd5Y1dYQjYrQ2ppV3NCZ1NkWDVyVFB1b3VJQTNYZ0ZZV1lNWXBKY0JSejlrUUEwd0VFZkxhTUZFa1VJdjc3ZzRJUm1KSUFPSTFBRTB1Qm9MWVM0WmVyQXd6K3F0SytYL3hDR0lmcUNCbnU0VW9WcmdlQW9LY2dYY1JZUVdnTmpqVXpLcWYrSWFjS3loRk1CQXpJbFdRWldVaVVXNkJKSUloOWp6N0RObzR0KzBZVW8zVWlBRW00REhLNUppbC9JSUVGaDlKRXZJZmlmSHV2b01JTEFRWmRUMlFUZllJbFNjMkxUaldYWVMxOXdRejBsK3VOenZJc2RKZDgxajVjeWpnQWRNK1huTWpHeXZxZ1VmUFJjU3dTZTBKQk13T0dWcndtUFg3UldFSEMwMUI4TkxVd1oxa2lWaHVLQWpOaExsZEdhNkpkdFFCVmdOcDJLSXVvRkR1em93cDkzRXdaQVBYY1FUUEpsQ2o0VkRUamc4Tkcxb0dObkNxRmlBZ3laRVdFMGtpOXpRTWc4MGlxL3NIV3RNU0dvMSsycU1vV3owc1N1OFh6Q2VWelpWM05PZERqbHBNcGdHNUtlZUFvanIwY1JWR2o5WVFmRHBQVUgzckphSmpUVm1Eei9vSllnMVdNZlhBc3pqMUkwaHE0S0FjY1k3Y0RVcUJxVUwzT0oyRUlmWTdmWC9Nb3hvVmtJT0pJMnZzOStSQmkvL04xS0Y2SWJ4MHhJTkt2SWdtT0NHREd1OWsrR1I0RURxQnl6alR1Y2RSVnBuVW9DT3BsYWlQcUZGcGI5aHowQVdqanJaa1Ftb0t4S1l3MmpMRjNkZ2JBOEUrKzVtRFkyeHlRZ29SNFJpM21wc3IySW5DOVloL29JMG1UYW1HWko1RnFOMGNmM05MSXUxQkIzSXNiMGl4M0FjVnVJa0hJS1k1ektEd0RyRUhBY2x5OEp1Q1poNXlHTUxGeDFMWnZ3cjBLRVVkUXJuUUNqRnhsSk9UaGNxeFpMMFI0M3h2RmtzaW8yc2Z4NExhTk5sRDFTSEZFMEZHVWlyU0hEaEtsU3FZdEFPVFVKMkFRT2NLQWxJUjVtL3hWeUFJT0hacE5saTlpamxxaUpSUUxBMEVJdEpTUXNpQ2xDaDFLemlmd3FCQjljOWd0VXRNS0ZJZFhvMFdpWUFobE9VSXcvWEprdkJNeUlQUTdMR1YzOG9SZ24yTTJRYVBUb2NuQWhCSnZRUlFZM0V3RW5QMlJSMGFFRkxiYXhqVmxmZWw2N3JZZ3d3SEJydGRXYTFyTE9UaFpvakJRQ2JCSkF0Q2xIY1RsQ0FCeXNGdGwrUVlXS1FMS0tUVUFKMnB4cFpxN3RaVjlzT3liVE5MbEpyL1d6alUwTTVsdlVlRGEwYWJIQTRlQ0F2d0NLQUlUdFloTkZ3SHMrcUxDRG4wVWpreXlrRGR1bFdJVkk3YUtiVFh3VDJySFl4Qit2T0JKMEtHQStLNkRGQ2ZJRXVsWEFZVkhqbmxvc25FbGw1bWdKREhZSXNJUDFVUjhFYTBRMzFGMVF4SEpSTThzZlVJTyt4aU1sVEppQ2psckwrdWF5cGpVNjdNQ0ZjdUJnb09Bcnd5cW9FYnROYk1NUUNzQzVyQlZnaUdMODRORWpscUJJU0RJZ21WaWRsSEFnQTV1QkxrSVpaWDBWM2JrNmVHN0NRSk9qOCt4b1Q3c0VBd0lBSWZrRUNRUUEvd0FzQUFBQUFLQUFWZ0FBQ1A4QS93a2NTTENnd1lNSUV5cGN5TENodzRjUUkwcWNTTEdpeFlzWU0ycmN5TEdqeDQ4TkNjeURnK01PbWdnbzBhbGNpZTVFR1dvNENCQUF1WEhlS2pKazRJQUJzOGtLUzVWMnlKUXhzV29WellzRTRGQ0RFNEdXZ0ZpNm92cWJTdFVmS2dXb05vVkFROGJvMFluekNKUWpBNGFXcDIxUlYxU2xxbXViZ20yS3BwVExOUE9yUTVGa1lHMWF5N2R2VlhRSlZsMnBhMWNoZ1ZVNDVrUlE2N2N4MVcxMnFKRWhYUGpnS2pUb2FEbmV2SllXT3E1bEtsc3VsMEF6NTlQK3RrMVpOVS8wd0tTWVVjdW1TbXNzWmJzRXlFeEpNTHUzUG1HdEt4YzEzYnUzcmhOaGNWOHB0NjE0OFZoZ1pINFZpYzY1ZFgrd1Z0M3VTS0RNait2T042SC8yYjVSMkFuZTRLMlhld0xTZlBQMHpxZGsrbGdHRFh6d0VVSjNOSG4vK2lacTVGVkVRQVRHSmZBRFNnaEdrRUFDMVJVWFlFVjNnT0hjTnRzQWxtQUVQeVFRUzI4cnpIT0ZSbkNneDlrb3VrU0FHQTd6eUhIRmlwbGNVUlExNVpSREN5cW81Y2ZSRlFUS2hnb3RXNkZSRGh5ckNOUGlGWExNVXdTUUVlZ3lpbXh3ekhmUktnMXV0czBQMnJIR2tFeHd6SE5DTjV3NXFWRVpPWjdXRFJnL1NyZVFUWWY5OEI1bkJId29vSWlONllKR2NoVGRkRUpqTm1aRXdCMWhicmJKQ1ZaT0pCSWF1cHhHQURnVWxjR2xZN0hBSWhKR01xRmhSMTkwWWdRT0E2ZkIwdFdERDRVRnhwcU5VVFBSSGZwc2hnNDFYcFYzUXBUWWVZbVJoSnNsL3pBRnA0S3U4cDFqdXNBaFVhbU9nUkdjUjIwU1J5dEUxRERXR0MxbERKc29yNDBsY01kRFNXMldCUWRmWFpiSEQ2NWFKTXlHanBXVEtraXJUTEdaUHNyK2swa3hqdGxSN2tWbGhEQ1puc1Q1Vlk1KzA4RmhMRjk1bE5QUUZYRHkxWlZyR21tNUdSejA0Z2JPdld0dFl3OUR3alEyU3puckFyelFLcHVkOEt4cllTRmNWUmJaRmxRR3EydWRFTEhFQ1QxeHExOFJ1QW53WVk3OWFoQUIxT0E1TXNrSDJlUVlMWWpTVEFDc2ZmMlFzMEhiK29YT3dqUmZkQVc2ZnExd2hjc1NnOVBuV3Q4U1JMRmZPQlNOVVFpT0tjSzB4RzFxUEZYS0JqM1JMMVg2V1Awa3FHdkZFblhSWlBpVngzYjI5aFdMbVdaUHhITmZBTmI5RHdGUHhQOWJsY2dFZ1hOblg3UHFQZEVUWGs4RlM4Rm1HK2xYWUFRUk1MWS91bXh0T0VOWEtCTG4ybWIzVFhWZElxRThzK0h6T0ZiNDVYdkgzTmNKcjlsSDZlaDFPOTBZT296cmZaalg2RWduZVYrMHdGNzMxSDZKaXZwQTh6dzkxUXhYZ0NNTVBuNVBkVUxId3lORUFNaFZiZUw3ZEZQa3daY3VVOENSRkxkVnJZQkc5QTJCQTRkam5GOWVEdmhVNVFGb0VTY1VtcmErNUMvMEJOcFY2Zk16K1hMTTBCY0RjZ2lYOXRaaUNLTFZUM3FxNjhzS2FqZThPMUFQTzlUQWg3ajRnZzdMSFZBZ2NwQmZYOUNnc2dNYXp4OHQyVm5QTGlpOXdmbmxlcFVod0FRN0V3RnF3S0l2V1VDaHhPYVJPSDlNZ1lRQ0lVQVIrcUlMOFV3T1lqZ3N5TjMvRWliRHdzaEVhR2lZblBlQ21NTjVETEF2UUF4aTIvcnltY2tWb1lpVnVjUEorRUlMQzVMUGRSUk1ZbCt1eU1SL2xLNHhKaWpqUDZaSXdYSXNhaTFrRE9JOEhxZzRCdGFQQUpsUVlHQStPQjRtcmhCZjgvQmk5RmpHbDIza1IzTjgwVWY2aG9jUERmSUZER3JjRzlhNFNDNFRWaStJVjdCa3dvUVJ5VlVNY1NvSlFBTWM5S0V4V25Td2ZzRHJDdzcyRjhUcDlTVUNSVmhGT1dpMEZrSXMwblpsYUI1dHNPZ2FZUmhpZy9ZSXBQL1dJcjRMUnFzeHR6eGdzZkMxR3Bub1VoR25SQjBCOEVjVk1IQXlrbVg0STFWaTRTMkJiUEV4eVN6YVBGN29GMTNZa1lUVDdNczJ3TkdhWS9xcmZzSjRJbDlDQUQwY0V1QnhCSUdESTZteS93azVESEtmVmNGWkpBVlNocjMwNVYwQ0tkNEplWmtSd1RuR0JNT2FCeXZOUm9DR0taQnVtU2lIWC9xSnV2UGhpVDBNeVVTV0x1Y2R2L2lzSU9BQTZGVENLWm95VEk0cUxQMEhEbXg0dVhzR2oya2lWS2NnUlRPZ3JDa0xITlhSUlRSSkpneHErbU51QjJFalg2WXdVWUNaVDU1clFjZkZHR0xDQkRCMElzSUFJMS9tZ0JDRkJzOXNRV3RNQ0pTRnVLcE1ZYWRmVVNveG4wQ2VRRUtWTnVlMHl5cDBTUldyTnNROHhCUkdVM0Z6QjdyNnd3NkcrZUJVZmtBdGlXVmlVbzNKdzE0TmNzYk9ETlV1OHloRlk1Q3FrSU0xeGc0Z2JhazIrVEtYaHN6am00K3BtbXRzNVpnaU1BUWNDYVJpWERzaWpFazJ5NTlYVXV0YWZxQXI0Zjlrd1RFVjlPeExuV2ZBbzhBQlU0N1p4aDNRK285VkNMYXVjVHdLQWNqcGx5NCt4QjVHL2RwcWtlTEt6UWd2SkdXSUxpanZjTldDUE9HMjNZcllLbFJhMTI0Q2l6U2NZVjFFVmxIRHFSd25waEdCbVVFYk00VnJRb1JaamRGSHBUSVNydE5nZGlLYTlJc2R3TEZZaWVCeEN1MzF4dyttQ2hGd2JKWXZDVmdsQ3VjaGpDeVFkeTJibUM1Q2hLRlJ6bXpqQk95OHlFaktNZDltRmRndzluZ3doQ2NEWDZtSjVjSnJzU3RGQ0dDUEFKY1REVVdaQ0d2SXNOdXFPT29pS1VaTkFqYUJBeHhveDR1SFdZVWN3S0FoMmNqWUl2WkE1R2xpa1FBd0JGQTdDUWtMWW9xUUlkUnNncmdNd1llTi9RSVZyWERCUnpGS014cW1RSVlURk9QL0R6RG1pL1UwWWcrdGNrWVhmeWpHQ1hUakl4aWx1UnhjQ01FbWRNRyt6VVRneEJFaGxITm9RUXNLTlRyTzZYb3NSWVFCQmtnbmJSdU54clJmcGNWZ1BSSGdqZjJaelhxQWhZTk5oN292cURBUnVEYXhwRk56SnBTU3hrZ1ptT3RxeDh6NUtEZXg5SDIyc1luQlZJc2FwZzQxTGJvbkhCeG85ejRSTUM5a1Y2R0lZNmNIRlhiQU1rOEprQVdrdWJvVXE2aW5jc213Q1ZxZU9oYWJpQ0xYUm9JT0JjQm5CYlE0d1p5c3RnbzRFRXJYTjR1RktGc01rc1BzekE1MGpKVSs1TlBkR1pPQkdvb0E3V2tNK1FOcUpOZHdlSVFKVTlDaGFVWTdQTlBvc0FNWHlvRUQrdzZ2REt1Z2h1QTJzUTFES09EaGpGYUFJWXJ4Z3pUdmwzd2lJeUVKZ0dUQ2NqekNnUXhHdHZnRlhmVHlWU1NyNWQyNWlmZjZQZENlKy96bmhnc0lBQ0g1QkFrRUFQOEFMQUFBQUFDZ0FGWUFBQWovQVA4SkhFaXdvTUdEQ0JNcVhNaXdvY09IRUNOS25FaXhvc1dMR0ROcTNNaXhvOGVQRFFuTWc0UGpEcG9JRVg2Z1EzY2lFOGlYQStldElrTUdEaGd3bTZ5czNJbk9EcGt5SmxhdGdtbVJBQnhxY0NMUUVoQkxsNjRWL3Z5VnVrTFU0endDNWNpQW9lVnBtMU9vVWNQNjA3Vk53VFpGVThwbElsRFZvVWd5c0RhSm5SdDEwOUMyR0Ftc3dqRW5BbGk2Z09sdXMwT05ERnU4Q0ZlaFFVY3I4TndFZHhGVFhGVXVRV1BIbUFGdm03SnFubVNCUmhkbmZoejVzMXN5VXhLTVhoMVluekRQZUlWZVpoMlZGalhUYnErVTIwYTc5OXhZWUFnY2Zpa1NuZSt3dG5FekpGRG14L0huWVRlaEdlNVIyQW5WMExmZFZwN1FPbS9vNFAxTi8zSHBzUXlhOEZIUmNFZG9FajM2VGRTbzU0M2dXMWVDSHlnamdQbXhmVDNCTzJBOHQ4MDI2Q1NRSDBvL0pCQ0xieXZNUTFWR2NHQTMyaWk2UkxBWER2UEljVVVtWmZobjBCWDAwWVlLTFNHZ2dVWTVjS3dpVENaWFhDSEhQRVdrR0lFdW85QUdCM2tXcldMY2FOdjhzSXBlc0htWVVCa2hydFlOR0NnS3g1Qk1ldjN3M1dnRVBFZ1JBUkk2cGdzYVZ3bTUzQjFGWnJiSkNaMU5PUThhdXF4R0FEZ1VsZEZOWnJIQUlwS1dEWUhEd0dxd2tQRWpSbGVCOGFSai9VRjBoejZab1VOTmFYQXFGR0JtQ1V3aFgxNnJPSWVaTG5CSUJDaG1ZQVJaNkVMVS9CVVlMV1VzcWxFWmt6cVd3QjBQR1pWWkZoeGMycEF3QzJKV0RxRWVyZjh5UldiNmVIcFFKc1ZnWm9ldHFoSkV3R3lCbGROaFZVWnBPbGNlNVRSMFJaVjAyZG5yUXZPY2tCa2N3N1oxcHJGaWJXTVBROEk0TmtzNXZENHIwQ3FablVDcVpGZGhHMVlXT0I1VXhvNkFuUkN1dUU4NEdsZ0VVa3FtRjJhV0ZrUUFOWTVGTU8rek1tRkdDNXJLRVhBb1lEOGdiQkNyZ2FHenJiZ0tYWkZyWUN0YzBlOW40SFE1RjZ6ak9vWUR4UXVGZ0praUczOFdwYnIrNEd2UUU4eUdwUS9KQ3EyeTUyOGc0MFpHWUhrc0NvZTZzU2hKODBFTEF4YWZrQVE4QWF4WThoSUVqclNBS1RyMFFVK3c3QThzMVhvSVkyQ1ErUnJ6V0NrUGZZVWlWdWJNbmRLQjRYQ1lTUGNPVERCbVVoZjZiMkFuREVUQWVZQmxPYlhUSG92L2hVN1dXdXFsTGpwS1Vna1lMVzczU2k2ZkJQZnR6d3hYZ0NNTVBrdEgxZExldnNKTDF5YUptMGJBRkhuUXBjc1VjQmpWcWxncnFJZTVRT0RBZ1puWlFwWnplbGg1Z0ZuRUNXWCtsdXpxL3p4eHMxajZPTnlySERNQXhvQWNzb1krbHlFVFl6NDN4b0NyZW9mbVljRkNEVDZ6MG9WTzJCVExrVHRnYU9UN3JPTXNLY3d3N3dSQUhWam4zSDErZUFUVXdBSllGdXdMT1kvVlV3eE5RQkdBNlNMZDErQmFYZEhtc28zNkpZd0FFVVBEMTBxM041RW9EekFCSE5yT0FJTU9CUUttQ0Fia3poM3NSUmRhY0U5VmVOT2VCZW1Dd2IzTkF6TW13TndFdFZlT05aRXdnN2laQi9YRWdyVUdaZ0l3SzRDTTQ2WXp0ZXdCSmcveitPQ2wvL1lsbUFpVWdXeDAwUWZzNElTUDc5RUZES3NqZ01rNldDdjFpV1VUWXJNaUFZV3h1bFVNTUNvSlFBTWM5SUV0V29oUGNaakJnZkQwTjhPV0ZZRXlxS0FMSVpib0grWlVEamt3WEk4d0RBRStld1N4ZUhOSkhjVk01Umc2OWlwVGRNa0RaNFJ6UjBXY0VVNEUrRjFZd01ERjFaWEJoMktKeGFzRXdzR3diTU9RTVpSZllIUVJQZjFKY2h2ZzhBd2htL1VzWVR5UUxpRm9Wd081UmhBNE9ERTZjbEFWQVc0cGxvUHg3aDlsa0F0Z0RCTVR4L2xEYUZwNkdnb0hObzgxMXJGYk9FUm1Kc29SbUUza0VrNnVDOWdUR3BJSk9BaFJNczBKVE1NS0FnNWVSZ1dVYlNuRDE4SUNTaHlJQjVKODZwZjVOUE5OYXhrektvcHdHemlNby8rTFI1cEdHSkwwUjlBT3NrSzZUTUdaSElQREsrZUNqbk14UkgwSnlLTkdoQkZDdXN3QklmTzRaNTl3QXpISGhNQnRWUlBMRk9yNWtvSUc4Z21lQ3VKQ2tWUEsyTnd4TEJGZGxSWlhJQXlFRXVzT0wvV0hIUlJDZ0h2K0lGV215WVFkTUpNSG14cmtoQjMwSjFIbVVRckhERlFoNExDYUhiWUpUa3hDVUpZWTdhUW5SeWFaUm1HbUNBd0JCOEFjOHpmRUNHT0tvcnJtUWdoZzBybjhJRkt4eVFKbXR0ZVFlYXpUY3MyRENSem1oSmx0M0tHZXE3Z25HRXRJRkFLSWNsTWsvWWM5QWhvVkk4SkVPRzJjeTBaNVdnYkdndkVPRW1YSUUrVHFLdmF0d3B3dzNhUkhzSExYc05RdElxdXdXbFIwQWFhUC9FdVlqcGxDSlNFU0tzZi82RU52R3BIVmFxWTZFUzBHeGc3Z01LcEVDSkNKS2FqV0h6OXdLRVRBWVZYQUpFQ05tWjJITUxJQTJybHNvcVhjb2lhUFRwREtpNHlrSExBVmxYQjVhby9tT3RjdzZDVElqOHBSM2Nma2tRRDI4TzBvMFNDVWlYU0dES1d0WG1iTHk1b0ViQUlIT1BnUjkvU3lDam1BUVVHMGllbEY3SUhFMWNRaUFXQkEzcDB3cWhjY0ZDRkJyTmxFWWhXQ0Qva0dwaW1iQ0FFWFRsU09FcGNZRFZNZ3d3bUs4WWYyYmk2ekE3RkhSVWVqaXo4VTR3U29PUkUxVEZ4aUxvUmdFN3FZWFdZaU1ONklrT2s1dEtERmdKVHNZbDBwZFNMQ0FFT1RNYllOSlZjNXA2ZFNia2FFNDBMM1BLY2NWT1VJQVhDQVpTODdCaFVXQXNrcU5sRWpNL2MzeW53dktjTmgzVHdhemhGbEpsUDI4alkyY1FVWUwyUVYxQ2l6bTJsQnV0amd3TEplam9Cb3F5SVRSU0FhUGFpd3c0VHhJcHdzWEl6T1Vsa0ZWb2xGaGszRUVkT3gyRVFFUFRjU2RDakFQU3VneFFtd3RKNVZ3SUZNZVRaWUxNU1lYcERvUldGMmlDeWk5REVlUDIrWkROUlFoRlpYczQyVVVJT3drTXdFTlhDUUZIUmNPY25RdG5KUHVGQU9ITXoyVW1VQTlOTTJzUTFES0NEYVNWYUFJWXJ4QXhQajlsa2lJVWw4aE1OdTRzS0JEQUcrTnNXdTRHbzdkYXJkekpsSjZYejl5Mzc3Kzk5d0NnZ0FJZmtFQ1FRQS93QXNBQUFBQUtBQVZnQUFDUDhBL3drY1NMQ2d3WU1JRXlwY3lMQ2h3NGNRSTBxY1NMR2l4WXNZTTJyY3lMR2p4NDhnUTNhY3Q0b01HVGhnd0d5eWdxNmxTenRreXBoWXRVcWt6WnNmNXhFb1J3WU1MVS9iZE9sYTRhK29VWCs2dGluWXBtaEt1VXdFY0VxZENwSEFLaHh6SWhBOXlyVXIxMjEycUpHSlNyV3MyWUdyeWlXZzViV3RXNlBicHF5YWQ3YXVUUUprcGlSNHk3ZXZQbUYwN1FyV1NPQkt1VzE5RS9PTkJZWUEyY0dRSlJJbzgwT3haYjZiMER5T3pIbWhzQk9JTDR0Mk95VlQ1OU1JNzZBWnpkcnRKbXFiVVhlK0E0YjF0bTNvRWtUWXZmdEhnbGlpVjh5N0l2djBsUWlYVWRFS2dRWk5PVGlyaEdXNmNrWE92Q0xRSStnYVpSbU82ZUtReXlEL1Y5d056SFBIREVsYS9SRzZiMkh3ZGduY0dkOTMwNG01RkFuTVE2TXJNUUZ3OEowRkRnT0p3VUxHS3JGTnBCTVk3YmxGVFlCbTFjWlhBbE1rZU5GNmZPa0NoMFQ0UVNnUk5WdTVSVXNaRm1aVWhqNFQzdkVRQWRRa2dFTk5IajRrREhCdmxRTmpTS3RNd1pjK0pSbzBEMXYrZ0ZGR2pBMFJBS1JiNVF4NUV3RndoTmhWSHVVME5BODZSMjJUSkpFSnpYTUNYM0FvaWROL1RuNWxEME5GZUpVRkhNSmdhZEFxZkoyZ0lsVTZoWGxVRnQ4aFJBQ05YY1dTcHBvRFBWR1pXeEVRWjVaVmJ3VjJFQUU2dHJWSmp3R1M5Qll0QU5aRmdJUmUvUkRwbWcwZXBjdWJmUDV6UlRGdXJYQ0ZvUUxTMTlXTkJTWHFWUkdkRGhUQ1c0cVEvM3BXWVhJV0ZhaEI0QnpKbFQ2YzhybEtwa2ZGZ3FwZ1pMU1ZSMnp6d05HV0xzT3FTYWxYc0VWR3dCTzZIblhDWnBrOGU1UWlqQWI0UksxRndlSWxaTmUxbFFDcWNBRHJ6d3JORW5tRkltNHhpeHExYmVGQUZsNktkZ3ZmUEc5VmlCcUxiWjFBRUlwZW9kY3BPS1p5aGM2NG5GbFZLenFPZ1hNSGxWM1JvaTk0YkRvSTNqd0pGelhERmVDQWM4VU1YakVnS0o4RVVPelZvdUFobWtkWHVrd0JCeHhUb05MVkNsTzBDbzZ5YnJYYldUbDRHcFhIZlRuS0dVdVVuVDZoYmxINlhGcWNIQ1IzeFlBY3FubGx5SmdvVXhNcXc3Sk43QlVzMUlCRHNNS3l4aWhIZjIyaGNUSjhIZnVEem4xdC85QXBBVnU2ZGZGZ2lIcEZTd1RsYlA5aTV0MmR6UU91UHpsN1NFQ1pNR2UyVjFmbEFNNlp0bFU2SGg4QmJhR0R4dUpjd1NHNVlQcTkzRmJqUkJicmxlV1lIMVhFNW5iZDhhZmVaY08zMnVpWHI0cDZYZnk2WllLYW9uZUZUam5keUU3a2xHNkppeVVCbVhpMXdybHRhMGFrcWsvTzAzckxHWDhWUVJud2RxV1B6NmpoZzdaWFlLRDhhc1U4MXMzVkpqRmVJWDVYMit5SjVTcVErNU1BR25Eb0l5Y3RhMlA4Rmc1T3g1aXlWeEVVa1piTlhDRUU5cVJWaG1vZHhXS2RFb1lodklJR2V6Z3Zha2RaQVJvQ3hLUzNEQkErSUhxU1hCeGpRSDhvb242bkljRFNncVErTEpXQmVVWTVHb3hXVjZVTDJtVWVzSWdYMS9TbnJtMkFneTRWOUFvWndDTU16M2tsQkhWU0UrWC92SklBZ3NCaGUwZlpoQnhrUXdBa2NnVlNyU3FEMzNUNEdJNjF4V0NjQWNmNXVtSUNmYzBqZjNnVFJsdFdnTVZNbEVOUlMrd016OW9TZ1NjMEpCTndlTjVaS05NV1N4VUVIRTQwaWd1blVvYlNuY29oT0NCY1o0WUlMVmxOcWkzYmtDTlZDTkEybzNDckllQ2draTVBZUJaaExDMFdGc3BkVjZZQXhyTHN6SWU2NjVWQ3hKZUEyVzFFR0svenlod1FZc1cyUEVnd00zcExDQzcycmFOTVFaRTMwU1JYVnZBRUN6a1BsQWVjb1ZSVzBVR2psTElobjltbE1EcTVwRHNVMHg5MlVBZ2ozZklERHB3bEUzWjRTeDZZNlNPOVVmSW04eWlGV3pDNUVIQU16ZzV1cE1vSitmSVVLYkd3U2pnb3l5cmV5UlZXbFZOcmJsbllWSVR4L3oyM0pDQ05DOEVYTlRjMHpDeThCUjI0Rk1nOC9NaVZFMkROSm5BZzBGdTJjWWVFL21NVmpUVG02WllVUXhGWlZDRDJHS0UvcGljU3g2aE1ZdzZaakVqZGR3ZFROdVFKQnEyUjQxYVJ4Nk1rd0VZZjJRbER1eUt3aUt4aWNFWFJ4WDF5U28wcGtxYUVEaG1iVy9TaEU0N2tLREhvbk1nVzIyS0hrRzJFZUZNQXFqOStJRXFIZ0FPRlJNU2ZTLzh4RDJGa29hWmQyWVF3R1NLTU0vWmxHeWU0NFVXUzFiZStKSUNiQWJVSFdJazRsajJ1YVNkbzdjb3g4Mk9QcVM0TERUU1p5RnpJc05PdXdHS3NlbFZNQWphQmd4ZnBKeUZXV1lVY3dQQWJ5d3pXSXZhb1htSmlrUUF3eUlFbVBkTEpWWXJnRzhWczRxTUx3WWRoMnhJTFhmOXNJZ1JjY0U0NWRydGJORXlCRENjb3hoOEN1N0t4RHNRZXFVeU1MdjVRakJQa3hUblU0TzF1dVJDQ1RlZ2lhSHlKQUY0bHdoL1cwSUlXdHdFdmNmbGloMjlTUkJoZ0dHK290Z0ZlOWo2VEwxbm82b1VJMEx2VzJOY281VWduUndpQWcvZmV0eStvaUlCZk9iUUo3dnhYTk84ekwwYkswTkVEWDRabElpbUplaDNzajIxczRnckdYY2dxcU9GZkN2dURGakliSmc1V2VtQytEWGl1cTFBRWllK0xDanNnYUpFRXlBS29QR3lVVXF3aWlGTEJ5eVlBU09OWWJBSjBzMG9XT2hSdzRCWFE0Z1JvZ08xSFZnRUgva3lZTDdTSUJmeE9EQktyVE1vT0ovV3NQa3FUNFl6Z2hScUtvR2RpdGhHQkgxQmpveUhNQkRWd0FJY0lvTU5KdmQrTmMzdlJZUWN1bEFNSFNPMU1HVGFzeFUxc3d4QUtrUE4zRldDSVl2eUF0MDJsWUxKd0FCdkhPSnA0Y0NERGkvSU1uaXN3K1VBa2V2UmtTcUs1THJmcTA2QU9kV2NDQWdBaCtRUUpCQUQvQUN3QUFBQUFvQUJXQUFBSS93RC9DUnhJc0tEQmd3Z1RLbHpJc0tIRGh4QWpTcHhJc2FMRml4Z3phdHpJc2FQSGp5QkRkcHkzaWd3Wk9HREFiTEtDcnFWTE8yVEttRmkxU3FUTm14L25FU2hIQmd3dFQ5dDA2VnJocjZoUmY3cTJLZGltYUVxNVRBUndTcDBLa2NBcUhITWlFRDNLdFN2WGJYYW9rWWxLdGF6WmdhdktKYURsdGExYm85dW1ySnAzdHE1TkFtU21KSGpMdDY4K1lYVHRDdFpJNEVxNWJYMFQ4NDBGaGdEWndaQWxFaWp6UTdGbHZwdlFQSTdNZWFHd0U0Z3ZpM1k3SlZQbjB3anZvQm5OMnUwbWFwdFJkNzREaHZXMmJlZ1NSTmk5KzBlQ1dLSlh6THNpKy9TVkNKZFIwUXFCQmswNU9LdUVaYnB5UmM2OEl0QWo2QnBsR1k3cDRwRExJUDlYM0EzTWM4Y01TVnI5RWJwdllmQjJDZHdaMzNmVGlia1VDY3hEb3lzeEFYRHduUVVPQTRuQlFzWXFzVTJrRXhqdHVVVk5nR2JWeGxjQ1V5UjQwWHA4NlFJSGhGTlJzNVZidEpSaFlVWmw2RFBoSFJ6ZUpBeHdiNVZUazBpclRNR1hQaU9tbUJFQmJMVllCazRFd1BGaFYzbVVZMk5PSi9BRng0NVMvZmZqVi9ZTTJkRXFmSjJBSWxVNkxYbFVGdDg1aWRFVGxia1ZBWEZtV2ZWV1lGcGFSTkpidEFCWUZ3RVNldldEbW1WU2RFVXhicTF3QlprQzB0ZlZpM0ZPRk1KYml1QjVWbUZXRnZWbG54S3QwaUJYc2ZBNUdCbHQ1VkVqb2dpMTZSVnNrUkh3Ukk1ZG5UQXBwUVE5VVdoUnNDQVoyWFZ0SmVBb3FBaGRvWWhidXF6L0N0bW1iZUh3S2FqenZGVWhhZ1JRMDlZSnJDb0VqcDVjb1dOcVoxWVZpZzU2d1JvRXBZUGd6VU5zVVROY0FXZXpBaEdBam11M3JqbEZIbDNwTXNXRzJBb0VEaHh2eVhwYU9Td2VsY2Q5NVFyMHhLSkg2WE90YkhMTTRCVURjc1RiYTUzSEZuZkh0bDNCOG1DNWN2VFhGaHBnQmppdFArZ0FpeTBCUmJyVjdXQUV5TmdWTFJHVU84K28va3lSSWdGRmVLWExKc0tVQk1mS2NCUlJ4TVduV2ZvVnpJSTUxaFk2NVVSQVN6RTg4MHdMSERSalBBKzRiWlVUdEYyUWVvWE9GQVJ6TmRhUWQzVHBGUzJDQnJpYTBtanMxZFhMUSticWxnbE9KdDBWenQxNEJiU044elJkY01BQkVwQ0pWeXVvK3JEUk5tcnNWUjd6VkEyZm1GMXQveE5CR2E5MlpZZTZzdUdqc0ZkZ2FFbkFueHZUV0RGWHNLUjR4ZU45QzZQbEtqSVhsUUFhY09oanBRSnN5L1pzcmZkeXFLMVhFUlNSRmlwZGVVSTRaNU54dXZIUmtBbGppRmRvMkpPM3ZseXRnRWJiNkxyMWVvQWVBaW1YWTdJYnBVakRzaEZBcjFGZ1dLNWxHWFlmRll1TEFrbDkxRGJEQ3pZUExMQ0didnJ6MjRCRFY0OXRrU3ViTUVSN0ZVS1dUaEtRS2tGd0hIN1VKdjN5YWo5WGFjWlp4aVp0ZVpwQXBOVVdabkVHSEpUcmlnbHVOWS9TMVV3WWJWbUJBVE5SanJiOFFIeDFDVjViSXZDRWhtUUNEbnFyQzJVc2VDOXc3TThvM2FOS0diVFdsaFFLQkFjaFE1YURCTVdtdHVnaWhHVWh3TU9VMXkxd2JFc1h6TE9MTVArZTU0OVlXRWhzWFptQ0E2bHlydmFOYlVvTWVWd0NhTWNSWVZ6TkszTkFDQUhiY2pBaHRzdDkzUkxWVWFhQVE1d2dzWGRQc0ZEZW5IaVVFTmxsRmNuanloUWI4cG5lQ1dPSmQ3bERISTFpQjRYbzBDMC80TUJaTW1HSHQrUUJqd1h4R3YrQ0tKVjVsTUl0Umx3SU9FQm1odzZxc0hwZWVVcEQ1cUc5N2VHZ0xLdm9KRmVLd0JCdytNb3R4cHFLTUJqbmxnVGtieUY0ZWNzUDFIZVRWV1RoTGVnbzQwRG13VUt2bktCSk40RURnZDZ5alR2b1VpQ3IyS0ZSRXNDMXU0QVBSTWNjaUQySWFDZ00zdWgwZk9raVF5WkRUYzNkZ1lvT2VjSXRXMFN6Vlp6d0tBbkFua2QyMHN0ZkpRcGtSZEVGdk5aSkRRRHFTbm9RTWRHTWRNTC9rUmdscHBJVFNXQmI3QUFPUkViRWJWT0FwejkrQUVXSWdBT1RYa2tBRHNBQnpnRUtJd3ZuN01vbXJLa1FZVlN3TDlzNGdma3VNZzg0bE1PZWIwbUFRUk5DQUh0QU5LSmpjYUd6ZHBMUnJzd3hQL1lRcUEzUlFKT0p6SVVNN1d3TExDcjZENWNxSmdHYndBRU9FSVJEcTZ4Q0RtRDRqV1Z1YWhGN0JDNHhzVWdBR09SQWt4cnA1Q3BGOEkxaU5oRk5odUJEcDIySnhjbEN3QVhubE9PdGIwWERGTWh3Z21MOG9hWmUyUVJScFhuRnhPamlEOFU0UVY2Y1F3MjR2cFVMSWRpRUxyN0lsd2lzRkNMOFlRMHRhSEVieXVLVkwzWmdwRVdFQVliTDFta2JsQVh0SGhPVGhZWmVzMnl0U2ExUnltRkpqaEFBQjZOVnJXSlFFUUdaMnlacUU5eVJyV2cycDFtTmxPR1p1cjJNWG0xU0VzOEcxeC9iMk1RVjlycVFWVkFqdHNjMUNpM0dKWldyZERPNEVWRG5UVWlpaU92S0ZoV0RZKzVESEpNRk9rWFhLS1ZZQmZ5U1JJWk5zTzY4UmR3RTNRWlZVblFvUUxjcm9NVUowRkJXa0t3Q0R2d3hMbDlvRVF2TzJUWWtWbUdUSGRRMlZYMlVScndZd1FzMUZDSEt4UGp0QjlSb0pySXlRUTBjd0NFQzZCRHRaRWNjV25UWWdRdmx3QUUrVVZNRzV5SndFOXN3aEFKSVBGa0ZHS0lZUDRBclA5dFdVaHpBeGpGQWRoc2N5TERVRlFmb0N2ODlrSWlDUEJtVkdUQmVVSTZ5bEVVU0VBQWgrUVFKQkFEL0FDd0FBQUFBb0FCV0FBQUkvd0QvQ1J4SXNLREJnd2dUS2x6SXNLSERoeEFqU3B4SXNhTEZpeGd6YXR6SXNhUEhqeUJEZHB5M2lnd1pPR0RBYkxLQ3JxVkxPMlRLbUZpMVNxVE5teC9uRVNoSEJnd3RUOXQwNlZyaHI2aFJmN3EyS2RpbWFFcTVUQVJ3U3AwS2tjQXFISE1pRUQzS3RTdlhiWGFva1lsS3RhelpnYXZLSmFEbHRhMWJvOXVtckpwM3RxNU5BbVNtSkhqTHQ2OCtZWFR0Q3RaSTRFcTViWDBUODQwRmhnRFp3WkFsRWlqelE3Rmx2cHZRUEk3TWVhR3dFNGd2aTNZN0pWUG4wd2p2b0JuTjJ1MG1hcHRSZDc0RGh2VzJiZWdTUk5pOSswZUNXS0pYekxzaSsvU1ZDSmRSMFFxQkJrMDVPS3VFWmJweVJjNjhJdEFqNkJwbEdZN3A0cERMSVA5WDNBM01jOGNNU1ZyOUVicHZZZkIyQ2R3WjMzZlRpYmtVQ2N4RG95c3hBWER3blFVT0E0bkJRc1lxc1Uya0V4anR1VVZOZ0diVnhsY0NVeVI0MFhwODZRSUhoRk5SczVWYnRKUmhZVVpsNkRQaEhSemVKQXh3YjVWVGswaXJUTUdYUGlPbW1CRUJiTFZZQms0RXdQRmhWM21VWTJOT0ovQUZ4NDVTL2ZmalYvWU0yZEVxZkoyQUlsVTZMWGxVRnQ4NWlkRVRsYmtWQVhGbVdmVldZRnBhUk5KYnRBQllGd0VTZXZXRG1tVlNkRVV4YnExd0Jaa0MwdGZWaTNGT0ZNSmJpdUI1Vm1GV0Z2VmxueEt0MGlCWHNmQTVHQmx0NVZFam9naTE2UlZza1JId1JJNWRuVEFwcFFROVVXaFJzQ0FaMlhWdEplQW9xQWhkb1loYnVxei9DdG1tYmVId0thanp2RlVoYWdSUTA5WUpyQ29FanA1Y29XTnFaMVlWaWc1NndSb0VwWVBnelVOc1VUTmNBV2V6QWhHQWptdTNyamxGSGwzcE1zV0cyQW9FRGh4dnlYcGFPU3dlbGNkOTVRcjB4S0pINlhPdGJITE00QlVEY3NUYmE1M0hGbmZIdGwzQjhtQzVjdlRYRmhwZ0JqaXRQK2dBaXkwQlJiclY3V0FFeU5nVkxSR1VPOCtvL2t5UklnRkZlS1hMSnVWYSt0WEZHQlBRRmpyTjZnZHVXK1d3L09qTHpkN1JwVmUwQ0JyZ2FsN0JIR3l1YnBuZ0pLUkJEMDJ3VjZVT1NVQW1YcTJRUUxBYWU1WEhQRDdESjJaWDIzUU1LajRLZXdXR2xnVDh1YkUrb0Y1UnNWZmJDS1BsS2lvWGxRQWFvRDViNjcwY2F1dFZCRVVnL3pvWnB4dmJ6Smt3aG5pRlJwTjk5cGh1bkI0Q0taZmY5Qm9GaHR0YWxsSDFVYkc0Mk9jOHNNQWFzSTBFUkw0Tk9GbW5LTXpNWG9XUXBaTXVlelYxNG1GdmpIZUtaV3pTMWxoeGdyTzJWeWJjT3MvczhRblQxZ3JNYW9tdWwwODBsQWtjcFo5RldWdHZ4bG5HWG02cGV4QU9JU1ByWVBOYVAyeVVJdDJDczYwdURRc21UT1QreENKNFpPZWkzaFU2VXpLMGRnTHJkeVFNMEY3TkVlZUtiNFhRcmFoSG1RTDNib0swcUQyaGZvSlpCZUM2UXIrR2ZJWXJLeEFHOE81eWh3VWV4UTVseW9RZDNwS0hDUmFFYUZ5aFJmbW1NbzlTdUVWOUZ5cUw1Zmp5bEliTVkyZGZ3VUZaVmdIRHJ2VE5JbVVJQWVWd0lneXp1U1VCL1dJSVh2L2U4Z055NFdRVldYZ0xPZ2E0a0V6STZBU0lzd2tjQ1BTV2JkeUJpZjlZaGZlTWtvQWlJTEFxblFNUkZoTlNCdnhGd0hxRTBSdGZEdGFReWFDUGkzZjRZa09la01RV2ZmRU9QaXhLckhiSWtaMVE3eTBTZzhncVFLWkhlSG1rVjdiVEZSOGpVb2JqZGFVeGNuVFc1ZHhpaCtSSlpIZVVCSWNISS9LMEtSRFNIeitJbjBUdWdEMjNvS01JT3JuSVBJU1JoZGk1NW5NT0VVWTVFck9ORTVCT2xYQW9SeUxma29CTkxrUU9pYUZGemRDb0VBU1Z3NVUvL0NJQjdJRkpXS0dCSmhPWkN4bisrQlpZUkxKRWlrRUhMSXB3SVAwa3hDcXJrQU1ZZm1PWkJsN0VIcTlTVEN3U0FBWTUwS1JHT3JsS0VYeWptRTJNY1NGM1VJTmxZaUgvdFJCd3dUbmxDR2hBMFRBRk1weWdHSDlBNWxzMkVjbUIyQU4vaWRIRkg0cHhncnc0aHhvQ0RTZ1hRckFKWGJTckx4SHc1VU5ZcWRDKzBJSVd0MEZwU1JOamh4RmVSQmhnV0NsZlZyQU5sTmJVZ29ySmdpaHZCSWRodE9hblJ5bUhKZnVJQTV3QzFUS29PQ05JVm9FTzdoeFZOSE56NlViS0VNYW5Yb2FoTmxrRk5XUnFWYmhzNGdvTlhZaFdqZHJWbzlCaVhGSXB5UnU3R2dITjRZUWtpbGpyVTFGaEJ3UlJ4U3BaV0ZwWi9WR0tWYXd1U1dUWUJDcjJXcFJZYktKbWF3SUhVK2wwMUJYUTRnUm91T2RIVmdFSC9uQTFtTEZBQTNRZ1l4VUNaRUVSZWkyblBrb1QxaHVSZ1JxS3FLRml1dllEYW5pUlYyV2dSbmJRY2RPVFNOcldwdWl3QXhmS2dZTkZkcVlNV3RYZEpyWmhDQVhjOXFRS01FUXhmaURRVkFib1AzREFBV3djUTkybndZRU1PSWlPamE1QTJRT0pxTHFUS1FrY2loZXY4cHIzdkNJSkNBQWgrUVFKQkFEL0FDd0FBQUFBb0FCV0FBQUkvd0QvQ1J4SXNLREJnd2dUS2x6SXNLSERoeEFqU3B4SXNhTEZpeGd6YXR6SXNhUEhqeUJEZHB5M2lnd1pPR0RBYkxLQ3JxVkxPMlRLbUZpMVNxVE5teC9uRVNoSEJnd3RUOXQwNlZyaHI2aFJmN3EyS2RpbWFFcTVUQVJ3U3AwS2tjQXFISE1pRUQzS3RTdlhiWGFva1lsS3RhelpnYXZLSmFEbHRhMWJvOXVtckpwM3RxNU5BbVNtSkhqTHQ2OCtZWFR0Q3RaSTRFcTViWDBUODQwRmhnRFp3WkFsRWlqelE3Rmx2cHZRUEk3TWVhR3dFNGd2aTNZN0pWUG4wd2p2b0JuTjJ1MG1hcHRSZDc0RGh2VzJiZWdTUk5pOSswZUNXS0pYekxzaSsvU1ZDSmRSMFFxQkJrMDVPS3VFWmJweVJjNjhJdEFqNkJwbEdZN3A0cERMSVA5WDNBM01jOGNNU1ZyOUVicHZZZkIyQ2R3WjMzZlRpYmtVQ2N4RG95c3hBWER3blFVT0E0bkJRc1lxc1Uya0V4anR1VVZOZ0diVnhsY0NVeVI0MFhwODZRSUhoRk5SczVWYnRKUmhZVVpsNkRQaEhSemVKQXh3YjVWVGswaXJUTUdYUGlPbW1CRUJiTFZZQms0RXdQRmhWM21VWTJOT0ovQUZ4NDVTL2ZmalYvWU0yZEVxZkoyQUlsVTZMWGxVRnQ4NWlkRVRsYmtWQVhGbVdmVldZRnBhUk5KYnRBQllGd0VTZXZXRG1tVlNkRVV4YnExd0Jaa0MwdGZWaTNGT0ZNSmJpdUI1Vm1GV0Z2VmxueEt0MGlCWHNmQTVHQmx0NVZFam9naTE2UlZza1JId1JJNWRuVEFwcFFROVVXaFJzQ0FaMlhWdEplQW9xQWhkb1loYnVxei9DdG1tYmVId0thanp2RlVoYWdSUTA5WUpyQ29FanA1Y29XTnFaMVlWaWc1NndSb0VwWVBnelVOc1VUTmNBV2V6QWhHQWptdTNyamxGSGwzcE1zV0cyQW9FRGh4dnlYcGFPU3dlbGNkOTVRcjB4S0pINlhPdGJITE00QlVEY3NUYmE1M0hGbmZIdGwzQjhtQzVjdlRYRmhwZ0JqaXRQK2dBaXkwQlJiclY3V0FFeU5nVkxSR1VPOCtvL2t5UklnRkZlS1hMSnVWYSt0WEZHQlBRRmpyTjZnZHVXK1d3L09qTHpkN1JwVmUwQ0JyZ2FsN0JIR3l1YnBuZ0pLUkJEMDJ3VjZVT1NVQW1YcTJRUUxBYWU1WEhQRDdESjJaWDIzUU1LajRLZXdXR2xnVDh1YkUrb0Y1UnNWZmJDS1BsS2lvWGxRQWFvRDViNjcwY2F1dFZCRVVnL3pvWnB4dmJ6Smt3aG5pRlJwTjk5cGh1bkI0Q0taZmY5Qm9GaHR0YWxsSDFVYkc0Mk9jOHNNQWFzSTBFUkw0Tk9GbW5LTXpNWG9XUXBaTXVlelYxNG1GdmpIZUtaV3pTMWxoeGdyTzJWeWJjT3MvczhRblQxZ3JNYW9tdWwwODBsQWtjcFo5RldWdHZ4bG5HWG02cGV4QU9JU1ByWVBOYVAyeVVJdDJDczYwdURRc21UT1QreENKNFpPZWkzaFU2VXpLMGRnTHJkeVFNMEY3TkVlZUtiNFhRcmFoSG1RTDNib0swcUQyaGZvSlpCZUM2UXIrR2ZJWXJLeEFHOE81eWh3VWV4UTVseW9RZDNwS0hDUmFFYUZ5aFJmbW1NbzlTdUVWOWxidWNWNTdTa0huczdDczRLTXNxWHRpVnZqbEpHR1p6U3dMNnhSQzh2T1VINU1MSkt2K3k4QlowREJBMWNDRFFXN1p4aHlQK1l4WGVNMG9DaW9EQXFuUU9SRTdrakdPV0JpMkhUQVo5VXJ4REZSdnlCQ0syYUl4VTJRbjEzaUl4aUt3Q1pFWFJCYnc4MGl2YjZZcHlISXBSWXV5UVBJbnN6aTEyQUljSEkvSzBLY0RSSHorSUgzem1JWXdzeE00MW4zT0lNTXFSbUcyY2dIUVhtUWNjeW1ISHR5UmdrSkJCVURrZXFjTXFFc0FlZjRRVkdtZ3lrYm1RWVkxdmdRVWFjMEtTVmNnQkRMK3hUQU12WW85WEtTWVdDUUNESEdoU0k1MWNwUWkrVWN3bXNsaVdlWkRoQk1YNEF5bmZzb2xaQ3NRZStFdU1MdjVRakJQa3hUblVLSWM0eGNtRkVHeENGKzNxU3dSQVdSY0xLc1lPSTd5SU1NQXd6Y1NzWUJ1MHVBMHQzSm5ObUN3b0VqVmN0RXc1K3NnUkF1Q0FuNjFKVGdTc3g1bUE5bVZ1OGR4SUdhNllVTlpVazBNT2RjczJObkVGYXlwa0ZkUkFhRVY1TnE0VVpYUnZtc01KU1JRQnhwRVdCUlYyUUpDTlRucVVVcXhpZFVraXd5WlE0ZEt1eEdJVE5YUFNTVmRBaXhPZ2daa2ZXUVVjK0ZQUHk5QWlGbWlBVHBrY21nQjlsTWFqR01FTE5SUkJROFYwN1FmVW9HS2ZZSEViZE5pQkMrWEFBUjVSVXdhUTZtNFQyekNFQXZaSlYxb293QkRGK01FNGRRS3FJcGdFQjlHeDBSV1VlaUFST2Vhd2JUMUo4ZUxGMk1ZNlZpUUJBUUFoK1FRSkJBRC9BQ3dBQUFBQW9BQldBQUFJL3dEL0NSeElzS0RCZ3dnVEtseklzS0hEaHhBalNweElzYUxGaXhnemF0eklzYVBIanlCRGNpUXdieFVjTW5EQVJOaUVycVZMZEhiSTNGbEZVNlRObXgvbkVTaEhCZ3d0UTl0MDZWcmhyNmhSZjdxMkxkbG01d1FaT1FSd1NwMEtrY0FxSEZOKzZEckt0V3ZYYldDb2tma1hsYXJacy85b2xrc1FLNC9YdDNDUjZqcXhTaWZhdXpaeG5FQVh0Mi9mRldDdXpNTkxlT084SytXMitsMGNGeFVZQW1VTFM1WklvRXdFeHBqN2RrTVRlYkpuaFNSUDBNcE1HbTZlRTVrK3EwWjRCMDNwMTNCL1VGdE5XK0NkeTZWajBVS1hJSUp2M3o4U2JDTzlZcDZjMnArdjRNWk1DdzJhY3VYZ3JCS1c2Y29WT2ZQZ1NJK2dtREdjSzhnbGwvLzVnZGtLbU9pUUY1S0V2Q3JDNk1VRWpvZS9lNXR4TjBXcndGRWtPWVV4QVdIem5YWEZDWXR0UXMwcUdla0V4bkJ4NlRKYmdGU0I0UmM2VTZTM2tWWGQ5S1VMSEJCS1JjMkVaWFRHa1dWOUpYQkhoellKMDkxYklTQW8waW9FeHFXSWlDaGV5RmRjSWNobkV3RndvQkpYT1RWNk5FOS9jY0Z4b2xRRWdPUFdXOXZZRXlSSHEvUjF3cEZUelRQUGtsNmg5bVJHK0N6blZRVGduV1ZWWElOdGVWR1VjTkdpMzEwRTZCTWJnR1pTZEVVQ2NRbEdtSEp3Y1JnblplWEVkVUtaZDhJRkJweDdQclRLZTE3UjRtSmg4K0RBSkkyRkttUkhYR041ZHNlTlhTa1NxVU4zeEJWQkdaOWw5MVkzaTI2SzBJQnd4VkxxWlBZZ3loVU9waXIvTkU5Y25LMDJEeGx2VlJqclFjS1E5MVlDb05LR1psZm9RQnJyc0Y1VlNoczRwWGkxelJWcjdpclFQSFMrdFlteGt4SEpWU3hUNkNrdE9DYVl0dXBxNWNTUzViaWIzdUVxVjRwRVc1c2N5M2lsU0xDNzNtcWFqc2hkNmhVc0QrNWFocmx2b1VFdmN1MTVoYzRKMGhLZ3JWZllmcVp3b2hGSU84K0tYTlVhSUFGRmVLWExKcnNTa0VXYTZOWkd3RnZvMVB0ampYMGFIT3NkdmhvTUtJU3VxYndwU1VVMlRDN0pwb0pUclZjL0RBemhGVjZ0a0lDcElaQVo1SmhmUlJ6cEV4UWZsWVhOcXhGUWRGZTA2Qk9wTURFNlN5aUtxMGpZVlFKb1JMb0tsbDBWNFc2SHEyQjZWQVRlbWxrR2d3WkRUWnN3Q25nMWhaTnhpZ3BYeUFIaS8ybzMzeERPQTdCWGdXMlpTZFpIYlZNTzRQTVJzQWxjSy9pTUlnSHJGclVOT0hMVEJobU9ZUjQ5c2xjSk1CNGVBWU1UKzNLTmQ4RHlWaEdacjNiRndsMkpUcFl3cmVNa0RGeTFxK1lvWEJIZzAxQVpjSnhPV0gxZm50M2hQR1hzN0pYc0JEZ2FnbWRJSjJzbU5WNW1LdnhCT3Z1elF1ZUVDVk41VWJIazdwayszeGVGRHBVTHhlelBEK0ozbE1uVVhsbjhaQm1ybEg3VTh3M2RRWlJSVTF3L2xkOXZRZC9SNWtHTnlsMnJJY0pRbjFHRTRiK2I2T3N0Q0l0VUVWcW1QZTRwQkJ6N093bzZMQ2dWWVhqTldlMWIxcVJtNFk5eXBJWWg4NkRnVVhSUkJMT3NRb1ZjWWQzSytnTXNod0J3WDIyenlTb21CUmQwTkhCTGtBR0Q3LzhhNHJFUzVmQWprSWtBMmJpaWdCL0d5VUlOa1FQYzNxS0FKNFRRSWZodzA4bWtSUkZrdlNVV2RMa2lRaUJERFJoV1RISmNmQWppZUFjT0oxWkZEaWRvR2xjaUlNQTBRaVFUS2VzTExVN1FSb3V3SndTcUs1SHg3QWdSZTZ3UmNsT29pVVRxUWcyMXhVYU1oUHlIUFJUQm5HR0FnWDdyT2NoNkNFQUdIRVJBZVhGSmdCc2p5UkI3d0s0dmJqa1lHYWJ3SE9oQWh4cUxLOGNtZERHTEpjS2xGSU1rWlVSSXNpRFk1R0VidE5pR01Ha2hSMVRTVVpjYWFkNFVZUU1iV2p3R21SZEtIak9aV1N4SVF0TWdxNkRHTXFlcHh4TWM4Wm9KNmxvR3VmbVdQSUJoRmRZRVowSTR1WWx0a25NYm15aEhPdFc1a0ZVVVlRcEJJU2NqdGpGTWhTTElqcDRaaVFvT3FLRUlXQlF6THR2d0RUVmFPRStBUHFReTJRVEhDZHE1QkFYUTRxSVlWWUFoMFBHRGNvU0FHaVZ4YUdFSWtBbVRTQ2RFa0VscEdVeWdIU2lLOUtVdzNWTkFBQUFoK1FRSkJBRC9BQ3dBQUFBQW9BQldBQUFJL3dEL0NSeElzS0RCZ3dnVEtseklzS0hEaHhBalNweElzYUxGaXhnemF0eklzYVBIanlCRGRweTNpZ3daT0dEQWJMS0NycVZMTzJUS21GaTFTcVRObXgvbkVTaEhCZ3d0VDl0MDZWcmhyNmhSZjdxMktkaW1hRXE1VEFSd1NwMEtrY0FxSEhNaUVEM0t0U3ZYYlhhb2tZbEt0YXpaZ2F2S0phRGx0YTFibzl1bXJKcDN0cTVOQW1TbUpIakx0NjgrWVhUdEN0Wkk0RXE1YlgwVDg0MEZoZ0Rad1pBbEVpanpRN0ZsdnB2UVBJN01lYUd3RTRndmkzWTdKVlBuMHdqdm9Cbk4ydTBtYXB0UmQ3NERodlcyYmVnU1JOaTkrMGVDV0tKWHpMc2krL1NWQ0pkUjBRcUJCazA1T0t1RVpicHlSYzY4SXRBajZCcGxHWTdwNHBETElQOVgzQTNNYzhjTVNWcjlFYnB2WWZCMkNkd1ozM2ZUaWJrVUNjeERveXN4QVhEd25RVU9BNG5CUXNZcXNVMmtFeGp0dVVWTmdHYlZ4bGNDVXlSNDBYcDg2UUlIaEZOUnM1VmJ0SlJoWVVabDZEUGhIUnplSkF4d2I1VlRrMGlyVE1HWFBpT21tQkVCYkxWWUJrNEV3UEZoVjNtVVkyTk9KL0FGeDQ1Uy9mZmpWL1lNMmRFcWZKMkFJbFU2TFhsVUZ0ODVpZEVUbGJrVkFYRm1XZlZXWUZwYVJOSmJ0QUJZRndFU2V2V0RtbVZTZEVVeGJxMXdCWmtDMHRmVmkzRk9GTUpiaXVCNVZtRldGdlZsbnhLdDBpQlhzZkE1R0JsdDVWRWpvZ2kxNlJWc2tSSHdSSTVkblRBcHBRUTlVV2hSc0NBWjJYVnRKZUFvcUFoZG9ZaGJ1cXovQ3RtbWJlSHdLYWp6dkZVaGFnUlEwOVlKckNvRWpwNWNvV05xWjFZVmlnNTZ3Um9FcFlQZ3pVTnNVVE5jQVdlekF1SG8ycTFyVHBGSFY3cE1zU0cyQW9FRHgxdXlubFlPaTBmbGNSKzUvMmk2NkZINlhDdWJIRE40eFlBYzhBcFRUcDNIRm5jSE9sN0I4aUM1cTR6cUR4cGdCaml0UCtnQVMrNjZibkU3R0FFeWRrVkxCUERpZFFLblJrMlJJZ0ZGZUtYTEp2QU9SRTBFN0c2VHJteU90WVZPeW1pVkFVWi81VmdNR2FSZXpVenpRT0JjMVRDSHEvWDhjMEZacHNoelZ6NGZYU1lCbVhpMVFnSk94eWxtVjl0d1hMV1dCUHlwc1Q1YmE3bUtwVVlsZ0ViWVRoSkFjRmNSRklIMmtNSVk0aFVhVGI2ZG9vZEF5bVUzaDJWay84eW9pM3REU01DOC9td0RqcUNCODVwcTRnR1dzVWxiWXpIK3p6ejJYaXhNV3lzd20zZ21jQ0J1RjJWdHZTbjVQemo0SXpKbkJEam9PZHJnRUt6TDBIWUpRN2cvc2VoTWM1RkZKV0Q3UjhJVTdkVWNvNHQ2MUJTclM3VjBWeXM4c1R1Mm4zRzFnakNWODNnSHlGelpNWHF1R3NNdTFUeWx1Rlc3NVBOMGlUVU9aYTBpdmxkdU00N1hXeitNaTlNcVdieUZUdkZici9Md1VRa1VzYnhrc0tCSi85YVRtVjNaN3JDL2h6d2hmaTBxSU1JVVZoUmR2TXNqdlhxY3JvUXhPb0xnamk5MkFFZjA4cE9KS1REUUh6K1lVZ1VGNHEvRWJPTUVoN3ZJUE9CUURnbStKUUViVko4OUxwZ2hOTkJrSW5NaHcxNzZBZ3NGT3MwZXIxSk1MTTBTQUFZNTBLUkdPcmxLRVh5am1FMzhiM1QyOEYxaWRQR0hZcHdnTDg2aFJqbTJ1RVV1aEdBVHVtQlhYeUlRd3hHUzhHYXRXY0UyYUhFYldsRFBNbGtRb1JrVFFnQWN2TEUxbzBGRkJGNDJSNE9Vb1g5NGJNMG1mQ2k1VlZEampvRUVrYmo2S0JHU0tFS0FpU3dLS3V5QUlFYm1od3liUUVVa3V4S0xUZVRNa2hkWkJSejQwNTlFMGlJV2FJQU9LQWxEQm1vbzRueVd5ZG9QcUtHL1ZYcWtESVlFeHdrMnNRMURLTUNOd0tTRkFneFJqQjl3VVNlMnRNa1ZSSGtnRVRubW1iZzhpZWFTU2MxcWVpUWdBQ0g1QkFrRUFQOEFMQUFBQUFDZ0FGWUFBQWovQVA4SkhFaXdvTUdEQ0JNcVhNaXdvY09IRUNOS25FaXhvc1dMR0ROcTNNaXhvOGVQSUVOMm5MZUtEQms0WU1Cc3NvS3VwVXM3Wk1xWVdMVktwTTJiSCtjUktFY0dEQzFQMjNUcFd1R3ZxRkYvdXJZcDJLWm9TcmxNQkhCS25RcVJ3Q29jY3lJUVBjcTFLOWR0ZHFpUmlVcTFyTm1CcThvbG9PVzFyVnVqMjZhc21uZTJyazBDUmFZa2VNdTNyejVoZE8wSzNyZ0t6cmEraVBuR0FrT0E3T0RIRWduTVk1dTQ4dHROYUJ4RDNzeFFyZVhQYjZkazRrejZJSUU3ZGtDcmRydUptdWJTbk10TVViMXRHN29FRVhMbi9wRWcxdWNWODY3QUxrMUFYMlZVdEVLZ1FWTU96aXBobWE1Y2tUT3ZpUE1JdWtaVmhqTjZPT2NuUC9wMi93UFR2REZEa2xaL0hFWk1RTGozemNLMmV0MTBZaTVGeVdoMHNRZjNmak0xcjdDUXNjcHJFK2tFeG5wdlVkTWZaR1dFY0JRNmFBUzJVWHA4NlFMSGdvK0JRMWtFUlJDb1VSbkd2WlhBSFJnT0pzdzI1VWdJMGlxenZhV1BoeVZLTlE4Y01IWkVBQnp5ZFpWSE9USDJhQkVCNE9UNGxUMCtGaW1SVGtJZWxVVjNSamJKa0ZWdnFlamtsS2FCNGRZUC9GR3BwVUhnUk9CV1RWdUdLVkI3U1JZVmdYdGloa2xHVzNuVW1LYVBCRHhCV1ZjbnVQbG1qTlcxbFFDWWQxSXBaMXM0Mk5ubmdnVDg1OVVKZzFKcFZabm9tSmRvay9ONDJkVU1WMlQ1YUpFRVRKRkhWN3BNY2VHbFJwYmpHMWQ1MUFlcWtYTE00QlVEY3B4YTVCM29BUCtvb0tzK1Nzb1ZPb2pTR21PbVh0RVNnYTY3RnVHVkxwc0FXMkpqYmFGamJJbHJlcVhzc2d1aWtTeTBDemJiMWJQVURrZEFKbDZ0a0VDMjNrSFoxVGEvZ2dzYkFRNTJSWXMrNXNLMmlwVmRKWUJHdThURjJoV0g5SkltakNGZW9VRmt2djRsbVlkY0FEUFlJbGV4bE1ObndYWVJnT0JSMjRBakpjTm1FYUFueFlPVnNVbGJZMlU3ajZXUUVTQk1XeXM0Q20wbWNFeHNWeG5oZVlVbHVEajRNd1ZuRnJkRmpjcTBnaE9yTG1nS2RtSmJzUWg2NlFsR0pTQzBTTUpJMjlZYzRENlI0eFE0UzJWdFZ5czhjWFNmd2hCOTFBckNnRHpWYVhOMlpRZTQ4L1RhODFUemxPSlcwQjYzUEM0T1phM2l0bGRGZ0R0MVZ6OThpdE1xV2J6L2hVN1VydHFxWjRjM0VRRExXN1FBN21vWkQzczE0dFVUUGRIM1crVkFudWdxWlI2bGk2a2VGYnB4YU1Ma3F6VmZkb0RqOVkrWlRKRzVVVCtRbUs4dzVTQzJ6UWtTWHpSak9aK0xlRHE0Qk5nemVvVm8wRFRSWEdUczFSY3NsdE5xanlLVnhaSUFHSExRVktOT1Z4WEJXMktiS0E2dVBVb25wc3NmeFp4QXhoVE1VVlBPK2VkekVjSW11b3lLV0FTN0Z5d01HUHFwdHNJMnROUkdTOWlXWmVFNnhnUWhBQTc0dHhyVm9DSUNDd01nUWNwd3VBS3VaaFBKbzljcXFFRkFCeUxPVXdvOHp5b1UwVGdMZGdVVmRoaFFCaDFDQURKc0FoVWU3RW9zTmxHNUVVYWtNUG1wbndOcEVRczBPTWVGOXlFRE5SUXh0OHFRNndmVUlCd09NUzlTaGdtQzR3U2IySVloRkxDL0p0SkNBWVlveGcvUXA1TWhkdVFLaFJGUUdSckRSUUlVOFNRbXM2SVl4OGlRZ0FBQUlma0VDUVFBL3dBc0FBQUFBS0FBVmdBQUNQOEEvd2tjU0xDZ3dZTUlFeXBjeUxDaHc0Y1FJMHFjU0xHaXhZc1lNMnJjeUxHang0OGdRNG9jU2JLa3laTW9VNnBjeWJLbHk1Y3dZOHFjU1JPbFBXb0VDTlRjQ1hOZUNIOC9jT2prU1RRbEFXSCtrdWFaZ3ErbzA1SnlFaVNkQ21iVjA2c2Y1ZnljT25VYnRYbFl3MmFjeDdXc0xnSlh4S3FkZUlkVzJiZno1S3lkMjVBQWpyZDRqOUxkaTVDQUhEQ3g4SExWUlkydllZTjJwUXBPcWd2TzRjY0Q1VVJZbkRUQkhjaVFWNTFZUVZuUlVNeUdWOEZCUmJrYzZNY0V3T1Zadk0zZTZjUHo1cTBXZkNMVGE4TUVWbEVHZTVzdkFYMkxmd2pyemZmS1pNR09pZSs5c2hqTWNPVno1OTNGdSswemRMVjMwQWxXZEQwNkhNSGRySGIvVjJ2UExWNGM0OVhPSXlONGl2WDBUM1hqUmZjZWZsRndwYWhmQVdjZjZ4UzhzVXlSWEg5T2xSUFlXeWVJUjJCUmNpeURseUpsTE9oVWRuakJVcGlFUksxeVhGbm9uSUFoVVFUODl4WXRFWHpJRXdGRjRLWExKaWFlS0JnNkxlNVV6b3N4MW9RR2pUWE9OT044T2M3RTNGc3JKTkJqVExsUlYrS1FMeEd3VlZtMDZJUGtTNnVBZ1ZjQ2FEenAwaXJhdlJYQmdGYXFKSXdDZUUzaFdwY3JzUmVtZ21TZWxNa0oxSldEWnBvbEVXQmVXZHVBVXgrY0llVWtXQUp2NGluU0hiQUlWc1NkNlIxRktFdElDWGJvZUdYQXdWdE1kMnhZVmdUOFNXaVhQeUhJVktSZ1pId0lqbFFycEFXVE1IT1dGY3VpM2QyWTFBK29rcFRKa20raC85R3FjbmR3TnRVVWo1WkoyV1VTQ3FNcVY4TGtpaEtGdEhscUsxZm9pSnFTTUZJS1ZoMkc4L3dnbUM1RnBMU0t0SXNOaXFHWmdzSEM1VWlyMkVFWk9zTDJsd1ZsL2lUdzdVYzVSVEFiWGdxVTI1OGMyNkNyd0JPelZvUVBjS1hGS0I5bHNTU1k3ME01VVlQdFltaEVHQ09iNlBwRHFid1UrWFdDTHVoR3dHdU1tZXlJTGkwbmdBT3hRem10RWtLZzZDWlFhWTcyTU56d0NsT3MwbWREcTh4RFRaYm9zdnFrUFlvMFBCVXR3NEJSeGlvRXpITm4wRG1SZ1VNRWlqV2N3TWN0MmlPaXp2NnMxaUVaVTZCUnp0VlhVK05tT1p2b01zdTc2Slp5OHBOQmcxRXYxR1hsc1EwdDI3Uk5DOFZvSzJVeG5uYWRIZmZkaTlFQ3hzQXRFbjlRUnRKNEI1NFVmWHpYdUFvMWRndU9Oc2ZyK3ZuUFBGRWVxemhsZVZSVk9ObGtiSkw0NUZ4dHMwazVsNU81U2hGVGJBUDM1SXhzTTBVUkx6dWVrRTQ0VUtNSUxLZWp2VTBFRVZCVGJlaXUrMzA0T0Nkb3ZvUUN0QlJ2dkFLR29QTkRPU0Y4MWJyckVoR1FpV2h3ckZKR1R0ajdiUUljY09RRS9mZmdKeFFRQUNINUJBa0VBUDhBTEFBQUFBQ2dBRllBQUFqL0FQOEpIRWl3b01HRENCTXFYTWl3b2NPSEVDTktuRWl4b3NXTEdETnEzTWl4bzhlUElFT0tIRW15cE1tVEtGT3FYTW15cGN1WE1HUEtuRW16cHMyYk9IUHEzTW16cDgrZlFJTUtIVXEwcU5HalNKTXFYY3EwcWRPblVLTktuVXExcXRXcldMTnEzY3ExcTlldllNT0tIVXUyck5temFOT3FYY3UycmR1M2NPUEtuVXVYS3BsdTZQTHE3V2FuYmtnMC9nSUxEa3pMTDhnUWd3ZWpNL3dSUjJMQml4bHpKQUR1c2I5dEVTUlBMbWVaRmhqTkcxZUJzWnhnQ21pTkJOQlpqbERrZE1ZeW1DeWpzZWNhWTVFVmovTk1XVlhiWWhuQWoyT1Y0OTJiNGp4YWxtZll1MUtjSWdITC9oS0FJOUJjNHAxTjBNdDVuUWVPSmdGaDBGZXMvNkxPTlJPY2VUUEx3SUwrbzN0WHg2Wmxyb0x1anhwNnJ1QlU2MklPVTlnMjZOc1F4OVVKZ2lWQVhrdkNBR2RaWDEwOWdadGdVOXpIRWhuMDZkSWFWOElRT05nS3dyaVhFZ0YzSUFmZEZKbDBOVTluL0tVMFR5bjArU09oVnZQOEFDQU9LYTBpSTMzYWRVVWhmVC9BY2RJcVdiUzRTUmxlUmRCaWRFVWNHQklCNjlFWFN4a3ZhbFhHZnkwbWNJZVNIajBSWkl2eGZiWEtneFdlSU9CazFHRFg0aHpDaUtYaGtYYUE0eUZHQkdReUJaanMzVEdXTUp3ZGVka0o0RVFwMFR4d2xHTm1sVytDUllBOWF4NnBDeHFyalBuUUt2T1FrWUNlL3NDQ3BWajJLRUpwWUxFa0FJWWNqVjQ2MER3RXJJSkRFVDlNU3VrbWZvNWxqNEtVNnJMeVJ6RW5rREVGR3VWUVU4NnV1M0lSd2lhNnhMS3BQeEVVYXBZd1lPZ3liR0lyYkVQTE5zNkt1R3hnV2RqSkZnRTRTRHZ0dG8raEVvR2phNm5IN2JpQ2JTSXFXNnRRb3kyNWxOSXloWTkwemJPS0lsU3kyeUlxZG96SEdBRmtiSUtLdlpiRnNrazU1OUsxQ2h4bzZLS3N2YlRFZ2dZYzRHckdMeldLM0RndFpqOVFrMlIxQTVXUkxqZ25iTEtOSVFyUVl2TEpDaGhTekErOGtzb3hRbGNjVE1ZcVpSQmc4ODBla3dHSHpTLzNiRlZBQUNINUJBa0VBUDhBTEFBQUFBQ2dBRllBQUFqL0FQOEpIRWl3b01HRENCTXFYTWl3b2NPSEVDTktuRWl4b3NXTEdETnEzTWl4bzhlUElFT0tIRW15cE1tVEtGT3FYTW15cGN1WE1HUEtuRW16cHMyYk9IUHEzTW16cDgrZlFJTUtIVXEwcU5HalNKTXFYY3EwcWRPblVLTktuVXExcXRXcldMTnEzY3ExcTlldllNT0tIVXUyck5temFOT3FYY3UycmR1M2NPUEtuVXUzcnQyN2VQUHEzY3UzcjkrL2dBTUxIa3k0c09HRFY4ck1PMnd4RTV6RmpDbmk4RGNsOGtSdzZQenB1bUk1NGdsL29CTVE2T3p3eVFyUW9LZEFKcDFRMkdmVS9sWUlBOGM2NFR6WXFHbHhybTF3M2cvY3FMZmg0RjJRREhEWVArQVFIeGpoT093RVJVYVBYTFZxYlpsdHpsRW51Q01kcEp3SXRPeXQvMTExT3J2bUU5VTlaaUtBM1YrRTdtaGZtL2RuQnh4dGpRVG1LY0tkQmI1WlllWE1COW8ySjRDekdrVUVnSU5EWnJqcFFvWi9aQkZnajN6ejZZSUdkUk5SVnc2RHg2MGd4NEZtMmJPZmdLREZrZ0FZY2xBSDRVRHpFTEFLR1dRa3dHRjIyNlNYbGoxb2tJaWFMbjhVY3dJWlU2QlJEalhsRkZra0Z5RWtzQUlxSk03aWp5SnNDUU9HTGpvQ3Q4STJ0R3lESlMxVjRoYUNlR3dSZ0FPWFhaWnBub1ZndWxVR0xHYTJpZHNtSUxxMUNqVmt1dG5sTmxNb1I5YzhxeWpTbnAzenhhSVBIQ3ZHUlFBWm16QUo2SEhiL0ZDT2pYbXRBZ2NhdWxDNUtDMFdZdmpYb2RRbzhwdVoyMFFBQ3pVNEZOcFhHWE9DYzhJbTJ4aWlBQzJ3eGlDcWdDSG93QkpDQ09XMDJOa1ZrcEt4U2hrRUJDc3NxbVFRYXVweXlNNFVFQUFoK1FRSkJBRC9BQ3dBQUFBQW9BQldBQUFJL3dEL0NSeElzS0RCZ3dnVEtseklzS0hEaHhBalNweElzYUxGaXhnemF0eklzYVBIanlCRGloeEpzcVRKa3loVHFsekpzcVhMbHpCanlweEpzNmJObXpoejZ0ekpzNmZQbjBDRENoMUt0S2pSbzBpVEtsM0t0S25UcDFDalNwMUt0YXJWcTFpemF0M0t0YXZYcjJERGloMUx0cXpaczJqVHFsM0x0cTNidDNEanlwMUx0NjdkdTNqejZ0M0x0Ni9mdjRBREN4NU11TERoZzFmS3pEdHNNUk9jeFl3cDR2QTNKZkpFY09qODZicGlPZUlKZjZBVEVPanM4TWtLMEtDblFDYWRVTmhuMVA1V0NBUEhPdUU4MktpM1phcDljTjRQM0tqUjRlQmRrQXh3Mkp1S0VCOFk0VGhzZEhCR0V5K3p6VG5xQkUrazgxNmx5enBvWFNkV0xZVi83ZDJmUG5DMGVlc3JENXFXSWdMYU96OGhYMTdYbEhKWDRqTzJwNGc5YkRCWkVCQ2RaZmJRNTE4c3haVFJtVDFvK0FmYkRPSjFSa0E1MVRtNERSeTFsZkdiZjhKdFJ3MHQ3RVdBSVcvenJLSUlLdDdaRVNGeEUyNVNJWEJvNkxjZEhGUG84aUpvY0FpelhFRUU0RkFPTE0yQnRzcHFPeEpFd0NyVXpCTmVrVXcyS1ZWQUFDSDVCQWtFQVA4QUxBQUFBQUNnQUZZQUFBai9BUDhKSEVpd29NR0RDQk1xWE1pd29jT0hFQ05LbkVpeG9zV0xHRE5xM01peG84ZVBJRU9LSEVteXBNbVRLRk9xWE1teXBjdVhNR1BLbkVtenBzMmJPSFBxM01tenA4K2ZRSU1LSFVxMHFOR2pTSk1xWGNxMHFkT25VS05LblVxMXF0V3JXTE5xM2NxMXE5ZXZZTU9LSFV1MnJObXphTk9xWGN1MnJkdTNjT1BLblV1M3J0MjdlUFBxM2N1M3I5Ky9nQU1MSGt5NHNPR0RWOHJNTzJ3eEV4eGhqQ3ZpOERjbDhrUnc2UHl0S0dNNTRnbC9vR0VSNk96d3lRclFvS2VBSTcxUTJHZlVvT1d3VmpnUE5taGFuR2NmblBmRDlpWjdpM1ViSkdNYkZoemhDQ1BBanJBS09jSk11a0NEYWU0Y1lSRUZVNmhYUDBnQXp1anQ0TU9MRVI5UHZyejU4K2pUcTEvUHZyMzd6Z0VCQURzPVwiLCBOSiA9IFwiZGF0YTppbWFnZS9naWY7YmFzZTY0LFIwbEdPRGxobEFKbUFjUVJBQVNnbUVGQ1FpTlBUQUd5cVRRL1BoRjFjQnBmV3l0RVF3bVFpVGcrUGowL1B3MkNmREJCUUI1V1ZDZElSeFpwWlFDeXFVVkZSUUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFDSC9DMDVGVkZORFFWQkZNaTR3QXdFQUFBQWgrUVFKQkFBUkFDd0FBQUFBbEFKbUFRQUYvMkFram1ScG5taXFybXpydm5Bc3ozUnQzM2l1NzN6di84Q2djRWdzR28vSXBITEpiRHFmMEtoMFNxMWFyOWlzZHN2dGVyL2dzSGhNTHB2UDZMUjZ6VzY3My9DNGZFNnYyKy80dkg3UDcvdi9nSUdDZzRTRmhvZUlpWXFMakkyT2o1Q1JrcE9VbFphWG1KbWFtNXlkbnArZ29hS2pwS1dtcDZpcHFxdXNyYTZ2c0xHeXM3UzF0cmU0dWJxN3ZMMit2OERCd3NQRXhjYkh5TW5LeTh6TnpzL1EwZExUMU5YVzE5aloydHZjM2Q3ZjRPSGk0K1RsNXVmbzZlcnI3TzN1Ny9EeDh2UDA5ZmIzK1BuNisvejkvdjhBQXdvY1NMQ2d3WU1JRXlwY3lMQ2h3NGNRSTBxY1NMR2l4WXNZTTJyY3lMR2p4NDhnUTRvY1NiS2t5Wk1vVS8rcVhNbXlwY3VYTUdQS25FbXpwczJiT0hQcTNNbXpwOCtmUUlNS0hVcTBxTkdqU0pNcVhjcTBxZE9uVUtOS25VcTFxdFdyV0xOcTNjcTFxOWV2WU1PS0hVdTJyTm16YU5PcVhjdTJyZHUzY09QS25VdTNydDI3ZVBQcTNjdTNyOSsvZ0FNTEhreTRzT0hEaUJNclhzeTRzZVBIa0NOTG5reTVzdVhMbUROcjNzeTVzK2ZQb0VPTEhrMjZ0T25UcUZPclhzMjZ0ZXZYc0dQTG5rMjd0dTNidUhQcjNzMjd0Ky9md0lNTEgwNjh1UEhqeUpNclg4Njh1ZlBuMEtOTG4wNjl1dlhyMkxOcjM4Njl1L2Z2NE1PTEgwKyt2UG56Nk5Pclg4Kyt2ZnYzOE9QTG4wKy92djM3K1BQcjM4Ky92Ly8vQUFZbzRJQUVGbWpnZ1FnbXFPRDRnZ3cyNk9DREVFWW80WVFVVm1qaGhSaG1xT0dHSEhibzRZY2doaWppaUNTV2FPS0pLS2FvNG9vc3R1amlpekRHS09PTU5OWm80NDA0NXFqampqejI2T09QUUFZcDVKQkVGbW5ra1VnbXFlU1NURGJwNUpOUVJpbmxsRlJXYWVXVldHYXA1WlpjZHVubGwyQ0dLZWFZWkpacDVwbG9wcW5tbW15MjZlYWJjTVlwNTV4MDFtbm5uWGptcWVlZWZQYnA1NStBQmlyb29JUVdhdWloaUNhcTZLS01OdXJvbzVCR0t1bWtsRlpxNmFXWVpxcnBwcHgyNnVtbm9JWXE2cWlrbG1ycXFhaW1xdXFxckxicTZxdXd4aXJyckxUV2F1dXR1T2FxNjY2ODl1cnJyOEFHSyt5d3hCWnI3TEhJSnF2c3NzdzI2K3luSVFBQUlma0VDUVFBRVFBc0FBQUFBSlFDWmdFQUJmOWdKSTVrYVo1b3FxNXM2NzV3TE05MGJkOTRydTk4Ny8vQW9IQklMQnFQeUtSeXlXdzZuOUNvZEVxdFdxL1lySGJMN1hxLzRMQjRUQzZieitpMGVzMXV1OS93dUh4T3I5dnYrTHgreisvNy80Q0Jnb09FaFlhSGlJbUtpNHlOam8rUWtaS1RsSldXbDVpWm1wdWNuWjZmb0tHaW82U2xwcWVvcWFxcnJLMnVyN0N4c3JPMHRiYTN1TG02dTd5OXZyL0F3Y0xEeE1YR3g4akp5c3ZNemM3UDBOSFMwOVRWMXRmWTJkcmIzTjNlMytEaDR1UGs1ZWJuNk9ucTYrenQ3dS93OGZMejlQWDI5L2o1K3Z2OC9mNy9BQU1LSEVpd29NR0RDQk1xWE1pd29jT0hFQ05LbkVpeG9zV0xHRE5xM01neGpBSUZIVVBlS2dBZ2djaVRzUWovUUZoNUFLVkxWZzlXc254SjA1U0NBVEpuMXR3SnlrQk9tUTE0Q3QwVUFNQlBtUWFHS3JVazRHak9wRXVqUWpMcVZPYUNBRkt6S2pwUTllZFZyV0FMSWVqcUZXdllzMzVVa3YySndDVGF0M2tLckQxYUVxNWRPZ25tT3ExN3Q2OGJuM3JwdXZWTCtNek53SHNIRjE0Y3Bpbml4SXdqZXluNnVDcGZ5Wml2T0tqYzlXdm16MVBHY3E3cUdiUnBKbHhIZHpaN3V2V1JCYXJKUW5WTlc0amEyRjFuMTk3Tkl5WnVzZzU0Qzg5eCtEZFpBc09UMHdCc3ZDc0FrTXFqdHdpQXN6blpCZEt6cTNCc25hd0E3ZUJMVU8xK1BIejQxT1RKUGpldlhYUjZzZy9ZUzJmd1htOXcrY25sMWw4N1FERisybm50TjFjQi8vSEduSUJkdFZRZy8yM0ZJVWphZ3JWdDVtQlh5RUZJMjRFVHlrU2doYlZoT09FQTBIRjRZWVpBaVdnZ2lRQ3dadUtJRTk2MzRtNGVwb2ZBaThQcHR4OEROQW9YQUd6MWJaZ2piNVNsMTkrUHd5VXdublc2RWJuYmJjMmxxR1J5RWpiMzNaUEp4Y2daQWlwU3VkdU94aW1vNVhBS0hNbVpqMThPeHlSbkZaYVpISGVWSmFtbWNEdyt0dDZieW9WWjJaUjBLb2VlWGs3bUdaMXZlbm5wWjNJQnVIZmRvTm5STjFlYWlDcG5wVXp4TlNwZG9WMkJLR21pWFFWMWFYYUE1dFRucHRIWitaT0xvRWJISmdRemxwb2RwVEl4cXFweWlrSkE1cXZSeVRVa3JkbmQ1Q2F1dlBicTY2L0FCaXZzc01RV2EreXh5Q2FyN0xMTU51dnNzOUJHSysyMDFGWnI3ZisxMkdhcjdiYmNkdXZ0dCtDR0srNjQ1SlpyN3Jub3BxdnV1dXkyNis2NzhNWXI3N3owMW12dnZmam1xKysrL1Bicjc3OEFCeXp3d0FRWGJQREJDQ2VzOE1JTU4rend3eEJITFBIRUZGZHM4Y1VZWjZ6eHhoeDM3UEhISUljczhzZ2tsMnp5eVNpbnJQTEtMTGZzOHNzd3h5enp6RFRYYlBQTk9PZXM4ODQ4OSt6enowQUhMZlRRUkJkdDlORklKNjMwMGt3MzdmVFRVRWN0OWRSVVYyMzExVmhucmZYV1hIZnQ5ZGRnaHkzMjJHU1hiZmJaYUtldDl0cHN0KzMyMjNESExmZmNkTmR0OTkxNDU2MzMzbnozN2ZmZmdBY3UrT0NFRjI3NDRZZ25ydmppakRmdStPT1FSeTc1NUpSWGJ2bmxtR2V1K2VhY2QrNzU1NkNITHZwbzZLU1hidnJwcUtldSt1cXN0Kzc2NjdESEx2dnN0TmR1KysyNDU2Nzc3cnozN3Z2dndBY3YvUERFRjIvODhjZ25yL3p5ekRmdi9QUFFSeS85OU5SWGIvMzEyR2V2L2ZiY2QrLzk5K0NITC83NDVKZHYvdm5vcDYvKyt1eTM3Lzc3OE1jdi8venVoZ0FBSWZrRUNRUUFFUUFzQUFBQUFKUUNaZ0VBQmY5Z0pJNWthWjVvcXE1czY3NXdMTTkwYmQ5NHJ1OTg3Ly9Bb0hCSUxCcVB5S1J5eVd3Nm45Q29kRXF0V3EvWXJIYkw3WHEvNExCNFRDNmJ6K2kwZXMxdXU5L3d1SHhPcjl2ditMeCt6Ky83LzRDQmdvT0VoWWFIaUltS2k0eU5qbytRa1pLVGxKV1dsNWlabXB1Y25aNmZvS0dpbzZTbHBxZW9lUWNGQlFLdXI2OE1CTE9wdGJhM2VnVVF1N3k5dmdQQUFLMEV1TVhHeDJPNnZzdk12QU1JclFmRXlOVFYxa3dHemRyYkVNL1IwOWZoNHVNMUF0em4zTThQQXVEazd1L3Y1dWp6NlFzQ0NmRDUrc2p5OVA3YkNBd3cyRWV3WUtsKy94STJBL0NnbmNHSEVDczVVRWh4R3dBSEFTSnEzTmlJUU1XUHpRWVljTWl4cE1rK0hrSC9xbHlHQU9QSmx6RHRwRnhKMDluSW1EaHpycGxac3llRWxobDFDaDNxSllIUG83dEVraVRLdE9tVEFVaWpBblZLdFdvU3FGR2pEbWlnd0tyWHJ6NndaczFxb0N2WXMyaGxpQjJydFd6YXQzQlJyR1ViRlVDRG9ISHpwbFZHbHkwQUFYajFDcTdLdHk5YkJBY0dLM1phMkREYkF2Z1dTODdaMkRIYnU1TXpuNnhzZVN5Q2dacERSMnpRdWZNRHM2SlQ2ME5ZdXU5RjFiRGp0UzVkSUhEczIveG10M2FBdS9jeDFyb05GMER0dS9ncEJzRmJBd0J0dlBrb25za3RDM0JPSFJUMDZJNFhFSy9PM2RKMTdJYVhkeDlmNlR0NHc5UEpxMytrNEx6dTJ1dmpMNXJyM2pHQzdmTHpCNkpmUHp4ei9RRDYwUUFyQkFJRFRIOTBKUmJnLzRLRnpNS0FBS3dzZ0tCUEJqQm80U0VCRU9DQUFRandOK0UvRDloMjRZaUNFQ0RBQWg1K2VNNENJcExvNGg4Qk1OQUFpaXI2bzkyTE9CSVNZd0VwMXRnTEFKSGxLR1FnQnhoQW80OExCVG5ra240RTRFQ0hTQzREd0ZKTVZvbUhBZzMwT09HVVZuYkpod0lDYUltZ2tsNldXVWNBQWlBUTVTNUFtdW5tSFF4d3RpV1piOWI1QmdGeTl0ZW1uWHpDZ1NlU2UvWXBLQnQvMWhqb29JaWlRWUNFS3JLWTZLTm9IS0RtaDQ1Q2F1a1lhQUpBYVl1WGRxcUZBbmxHVjZHbnBIckJnS1lJamxycXFsa0U4TUNFdkxFcTZ4V25Ja2psckxneTRhcWUrT1hxNnhLMXVyZkFyOFE2RVVDb3JhVlg3TEpKQUpmY3JjeEc2d01CcUdJSFFQK3YwbWJMUXdDTVl2ZUF0dUFHa1ExNHNZWnI3ZzRUWVRjQW5lZTJPME93eVJYZzdydzJKRkN0YmdyU3EyOE1DblRiMnJEN0Jnd0R0N3BCSy9EQkpCQk1HOElNczdDclpRTmcyL0RFSW94cldBTVVaNHlDeFg1eHFqSEYvbVpWN3Nja1I2QndWZ2lVckxJSUp5UDEzOG9mQjNCdlQvTEN2TEs5UjYxck04em1mYVRxemlvZjBCTUFIZ05OTVdrMEtXdjB5aHhYaEVEUlMwL2NNa1g1UnIyeUFqUC9VN1BWTnZlTWpzRmNVK3dzT2orSERYUEk2RnhyTnRCWS82UDAyakFMVFEvUmNCdmQ5RFpWMXcxekFKTnlBN0RlUUJ0MUR0aUFaNHkwTnQ4V2JyVE0ya1NzK05MSU5ZUHg0MHUvS2lYVWxHdk11QzhqWjc0emF5bDd2alQvMzcwUUxuckdrVU93OWVsRzY2SXo2MHNySUJMc3ROZHUrKzI0NTY3NzdyejM3dnZ2d0Fjdi9QREVGMi84OGNnbnIvenl6RGZ2L1BQUVJ5Lzk5TlJYYi8zMTJHZXYvZmJjZCsvOTkrQ0hMLzc0NUpkdi92bm9wNi8rK3V5MzcvNzc4TWN2Ly96MDEyLy8vZmpuci8vKy9QZnYvLzhBREtBQUIwakFBaHJ3Z0FoTW9BSVh5TUFHT3ZDQkVJeWdCQ2RJd1FwYThJSVl6S0FHTjhqQkRucndneUFNb1FoSFNNSVNtdkNFS0V5aENsZkl3aGE2OElVd2pLRU1aMGpER3Ryd2hqak1vUTUzeU1NZSt2Q0hRQXlpRUlkSXhDSWE4WWhJVEtJU2w4akVKanJ4aVZDTW9oU25TTVVxV3ZHS1dNeWlGcmZJeFM1NjhZdGdES01ZeDBqR3hUS2E4WXhvVEtNYTE4akdOcnJ4alhDTW94em5TTWM2MnZHT2VNeWpIdmZJeHo3NjhZK0FES1FnQjBuSVFocnlrSWhNcENJWHljaEdPdktSa0l5a0pDZEp5VXBhOHBLWXpLUW1OOG5KVG5yeWs2QU1wU2hIU2NwU212S1VxRXlsS2xmSnlsYTY4cFd3aktVc1owbkxXdHJ5bHJqTXBTNTN5Y3RlK3ZLWHdBeW1NSWRKekdJYTg1aklUS1l5bDhuTVpqcnptZENNcGpTblNjMXFXdk9hMk15bU5yZkp6VzU2ODV2Z0RLYzR4MG5PY3Byem5PaE1wenJYeWM1MnV2T2Q4SXduamtJQUFDSDVCQWtFQUJFQUxBQUFBQUNVQW1ZQkFBWC9ZQ1NPWkdtZWFLcXViT3UrY0N6UGRHM2ZlSzd2Zk8vL3dLQndTQ3dhajhpa2NzbHNPcC9RcUhSS3JWcXYyS3gyeSsxNnYrQ3dlRXd1bTgvb3RIck5icnZmOExoOFRxL2I3L2k4ZnMvdisvK0FnWUtEaElXR2g0aUppb3VNalk2UGtKR1NrNVNWbHBlWW1acWJuSjJlbjZDaG9xT2twYWFucUdzS0JLd0VEZ0t3c2JLenN3eXRxYmk1dW1Pc0J3VUZBOEVERU1URnhzZkl5Y1RDQUFVQ0JMdlIwdE5GQ1FjQ0JzRER5dHpkM3NrRENNNEgwTlRtNStncHJnM0EzKzd2OE1maDQrWHA5dmVsQ2d3R0M5dngvd0QvaFh2d0RKL0JnNVlVc1BNWHNLSERlQU1XQ0VpQXNLTEZRZ0VZTkVEQThLSEhqKzRRR0dCd3NhUkpPd0VjL3p3QUFMS2xTM2dBSHRRN1NiTW1tUUMrT3I3Y3lUTVpBQWNCYkFvZG11V0FnWjVJazNJYllHQW0wYWRRanhCb3dGS3AxYXZHRUFDTnlyVXJENXdJc0lvZEM0R3BVNjlvMDZwUVdKV3NXNnhhZzZxZFM1ZEJnYmQ0eVpxbHk1ZnJnYkI1QTVPTjI3Y3dUUUdBQlNzZU82Q0JBc09RRHlKZVRQbXRnY2VSTTFOemtMaXlaN0ZNTVdzZWplcEEyOCtveFFKb0lKZTBhMUFFRnFTZTdSYUFnTmF2YzE5S2NKZTI3OEVIZEF1ZmxQTDA3K05YQzFBY3pud1JnYzdJbzE5bDNidzZvUUFQcEdzZmk0Q2s5ZTk5SEJqZlRqN3BBOUhnMDg5UklMdTgrNnMvMWN1SDQrQzlmYXdGY00vZlQ0YjkvZjlYT2NEZmdHS1lCdUNCU2hXQUh2K0JERnFCSFlJUUpnV0FkdzFXS0VVQzBFV29vVXNDV09paEV3S010K0dJSHkydzRJY29CaEZBYnlTMjZOS0VLY1lJUkFJaXVtaWpReDNLcUdNT0ROUjQ0NDhBNWJmamtETTBBT1NSSUNGd0lwRk1tckFpa2xCNkJHT1RWSmJnMzQzek9FUExsclA4b28xT05nWlhaWlUwYWhqTUFnWUk0QUFyK3VIQUNnTUNQTkNlaXdhTTJXU1BDSXEwNWhJQnVHSUFSeVErMEthZEh4NEE0QUFFRWJCa0V3UUkwSStHQ3d4S2FJTUMyRGRBQVh0dWtWRURqeDVvNHFRZkdsa2VBZzBRSUttbWRvRkpIZ0RMZ2NyZ1VkcEY1RUNyYUJqVnFYdXN1a3BnZHRMOXRHZ2FLUUZhSGdCbjZmb2RyOGNCTU5JZENxbjZHN0hHcWdmcmJ3c0l1SWYvQWdJNDZ4dXQwVEkzN1d4Ny9SSEFaTnJsMnEyM3ZqVjJLaDkybGN2dHVhUjkrNW02aVJEQVlyTHZ3aHVadkpVeHRlNGc5a1pucnI2WmlZcWFncEVFakMvQmtSbUsyZ0lVU2hMYmNaRXlYSmpEbnRtV3lWL1UvbXN4VVFRYy9Lc2s0L3E0V01VZm8xVm1aUWlJMllrQzk2SldaOHBkS1dDeVc5U0ZndWRzTTlQOFZBQnpLamJsS0EvT1pxM1BRd1V0R01LbjdJeGFzVWhmeEM5ZUF4eU5TdEdmQVRCeTFQalVkM0srVGQvODFnSmNtOFFBWllKTzgrUm5PWlpkRVFIYXdtZjFOSlYrQnJYYjZhejhGclRwRUNEMldGcmpYZEhhWktGc0Q5Q2VQU0M0UlhXTFpZREgwa3lkMTl5TDMrTzBVbTBqNVBWaUE0QmQrVGxYSXNYMy8wV1hCMWJBNXdnRklQbEhBNWVrZDJBdW8yN1FBWEVEWlBoSm9lTkZ0dXdWWWVqUzQwTWhudGZkdktPRDlVTTlCNiswV0tjWGYxSGpEU1ZQMVBGWURiQzE4K2o0SFQxYXEvZlVBUFltNWY2TzlGeDEveElBa0lPUGpzSHVrTi9WOGoxUnJuNUZCbjdqZmxmQ0o0WEEvRFVsQUw4eDkvTksvbm9TTWY2VmhIckdVSnhoQXZDM2dEVFBnRFhabkRGdTE1Zlh0YVJ6RUJTSzlvcEJ3Y0tFYkNjQnpLQkYxdGE2aHAwdmZTSTBTQU13NkJyMmVTUnpLWXhoSGN6M0RnU2dVSVk0Tk1NQUd4SzdIUHJ3RFRaN3lBTi9TRVEzZkxBaHhDdWlFc2tBdlhpRWNJbFFGTVAvdWhHNEtGcnhERUdNQnd5dnlNVXdZTXdkNk91aUdNZEF3LzlpOUhDTWFOUlVocEt4dXpTNmtRc0pjRWNTMzBoSEtMZ1FHUXFzb3g0ZDVDUHI3ZkdQVlRpYk1yNEh5RUpLQVZuR0NLTWhGK2tFQmlKRGZveU1wQkdhdUQ5SldqSUpBZWpNSEMvSnlSMElFZ0pEN0tRb2czQVhGbzd5bEQ5UUFGTlF5Y3BXdXZLVnNJeWxMR2RKeTFyYThwYTR6S1V1ZDhuTFh2cnlsOEFNcGpDSFNjeGlHdk9ZeUV5bU1wZkp6R1k2ODVuUWpLWTBwMG5OYWxyem10ak1wamEzeWMxdWV2T2I0QXluT01kSnpuS2E4NXpvVEtjNjE4bk9kcnJ6bmZDTXB6em5TYzk2MnZPZStNeW5QdmZKejM3Njg1OEFEYWhBQjByUWdocjBvQWhOcUVJWHl0Q0dPdlNoRUkyb1JDZEswWXBhOUtJWXphaEdOOHJSam5yLzlLTWdEYWxJUjByU2twcjBwQ2hOcVVwWHl0S1d1dlNsTUkycFRHZEswNXJhOUtZNHphbE9kOHJUbnZyMHAwQU5xbENIU3RTaUd2V29TRTJxVXBmSzFLWTY5YWxRamFwVXAwclZxbHIxcWxqTnFsYTN5dFd1ZXZXcllBMnJXTWRLMXJLYTlheG9UYXRhMThyV3RycjFyWENOcTF6blN0ZTYydld1ZU0yclh2ZksxNzc2OWErQURheGdCMHZZd2hyMnNJaE5yR0lYeTlqR092YXhrSTJzWkNkTDJjcGE5cktZemF4bU44dlp6bnIyczZBTnJXaEhTOXJTbXZhMHFFMnRhbGZMMnRhNjlyV3dqYTFzWjB2YjJ0cjJ0cmpOclc1M3k5dmUrdmEzd0EydWNJZEwzT0lhOTdqSVRhNXlsOHZjNWpyM3VkQ05yblNuUzkzcVd2ZTZMTmpOcm5hM3k5M3VldmU3NEEydmVNZEwzdkthOTd6b1RhOTYxOHZlOXJyM3ZmQ05yM3puUzkvNnBqWUVBQ0g1QkFrRUFCRUFMQUFBQUFDVUFtWUJBQVgvWUNTT1pHbWVhS3F1Yk91K2NDelBkRzNmZUs3dmZPLy93S0J3U0N3YWo4aWtjc2xzT3AvUXFIUktyVnF2Mkt4MnkrMTZ2K0N3ZUV3dW04L290SHJOYnJ2ZjhMaDhUcS9iNy9pOGZzL3YrLytBZ1lLRGhJV0doNGlKaW91TWpZNlBrSkdTazVTVmxwZVltWnFibkoyZW42Q2hvcU9rcGFhbnFHc0tCS3dFRGdLd3NiS3pzd3l0cWJpNXVtT3NCd1VGQThFREVNVEZ4c2ZJeWNUQ0FBVUNCTHZSMHRORkNRY0NCc0REeXR6ZDNza0RDTTRIME5UbTUrZ3ByZzNBMys3djhNZmg0K1hwOXZlbENnd0dDOXZ4L3dEL2hYdndESi9CZzVZVXNQTVhzS0hEZUFNV0NFaUFzS0xGUWdFWU5FREE4S0hIais0UUdHQndzYVJKT3dFYy96d0FBTEtsUzNnQUh0UTdTYk1tbVFDK09yN2N5VE1aQUFjQmJBb2RtdVdBZ1o1SWszSWJZR0FtMGFkUWp4Qm93RktwMWF2R0VBQ055clVyRDV3SXNJb2RDNEdwVTY5bzA2cFFXSldzVzZ4YWc2cWRTNWRCZ2JkNHlacWx5NWZyZ2JCNUE1T04yN2N3VFFHQUJTc2VPNkNCQXNPUUR5SmVUUG10Z2NlUk0xTnprTGl5WjdGTU1Xc2VqZXBBMjgrb3hRSm9JSmUwYTFBRUZxU2U3UmFBZ05hdmMxOUtjSmUyNzhFSGRBdWZsUEwwNytOWEMxQWN6bndSZ2M3SW8xOWwzYnc2b1FBUHBHc2ZpNENrOWU5OUhCamZUajdwQTlIZzA4OVJJTHU4KzZzLzFjdUg0K0M5ZmF3RmNNL2ZUNGI5L2Y5WE9jRGZnR0tZQnVDQlNoV0FIditCREZxQkhZSVFKZ1dBZHcxV0tFVUMwRVdvb1VzQ1dPaWhFd0tNdCtHSUh5Mnc0SWNvQmhGQWJ5UzI2TktFS2NZSVJBSWl1bWlqUXgzS3FHTU9ETlI0NDQ4QTViZmprRE0wQU9TUklDRndJcEZNbXJBaWtsQjZCR09UVkpiZzM0M3pPRVBMbHJQOG9vMU9OZ1pYWlpVMGFoak1BZ1lJNEFBcit1SEFDZ01DUE5DZWl3YU0yV1NQQ0lxMDVoSUJ1R0lBUnlRKzBLYWRIeDRBNEFBRUViQmtFd1FJMEkrR0N3eEthSU1DMkRkQUFYdHVrVkVEang1bzRxUWZHbGtlQWcwUUlLbW1kb0ZKSGdETGdjcmdVZHBGNUVDcmFCalZxWHVzdWtwZ2R0TDl0R2dhS1FGYUhnQm42Zm9kcjhjQk1OSWRDcW42RzdIR3FnZnJid3NJdUlmL0FnSTQ2eHV0MFRJMzdXeDcvUkhBWk5ybDJxMjN2alYyS2g5MmxjdnR1YVI5KzVtNmlSREFZckx2d2h1WnZKVXh0ZTRnOWtabnJyNlppWXFhZ3BFRWpDL0JrZFdIMmdJVVNoTGJjWkV5WEppaG45bVd5Vi9VL21zeFVRUWMvS3NrNC9xNFdNVWZvMVZtWlFpSTJZa0M5NkpXWjhwZEtXQ3lXOVNGZ3Vkc005UDhWQUJ6S2pibEtBL09acTNQUThVY0dNS243SXhhc1VoZlpMQmdBeHlOU3RFWmp4dzFQaGdydGtDK1RkLzgxZ0pibXhUeVlvSk84K1JuT1phTlVBQmlXeFhmT1pWK0JyWGI1eWhkMjkyN0VCQzNhbHJqdlF1L2JxRnNEOUNlUFNDNFBWM25aWURIMGhDZWw5V0xTMk96WUpRYjVQQmlBNEJkZVNwQjErYXkvMFZPQzFiQTU5Sk03UllDbmh1MHNtQ2pvNTdLMlhnWmZ0S1ZlWkV0ZXk0QlpDaFd6ellobmhmZnU0ZUNyRnZBQ3lXOFc2Y1hud29Eam5PRk5XaUJPODhKM0hobC9wVGtTRFZnUFNySGp4VTdWOXp2QkFEazMyY0MvVnR0cHhVNlV0cW43d24yYm8zdjFmSklJU0IvS2FwajFmNWMrT05KeFBiM2lRUllCakwwNDBuekNCaUs5MWtsZVgxNW5VczZ4OEJRYkU0c3Vzc003VndDd1FwcUlvRllzVjFrR3ZlUjgzbndFLzFUaWdsZGs4S0cvTytFbVRBZ1kxcG5tUExCQXdIb2crRWp3bWNWKzJrbWdBSHhvUTRwc2NIcE1PZHlEbG5nRURQaFFLUW9VVGhGL0FmeGx2aUlLRW9vaDVDcEcwQTZTTVZKK0E0cE5IUk5FN3NCZ1AvcWRYRVJKRlNLOThDRFJIaTg4SXlTK0NKUE1naWVOSklSaTNBMGhCMTdNZ0F6dnNhR3hoQmlIaHNoeDUzRXJ6cTljd2NkQjVrd3NUeFJQVEwweGhRWmlRaTk4YVNNQkdwaE1SUkhTWW1KNVkzcUFhRTgvTmpKUVFBeVNSVmFYekxXV01wSEtFQXNBeHdRRHlHd3dsWTZRb3NKOHBBb0lYQklXeDdpYncvcDQ0ZHdDUUg5K2RJUmU5d0pLQWVVeUdKTThwaUJtS1g1OFBnZFZUNFNtb2Q0NVZVRVNhQzdVQkNiaTlDa1M0d1pJd1V3Qlp5TUtHUkx1SW5PZHQ1QWxVa2hwenZueVlOVGVvU2Q5TXpuQzREWkVIbnE4NTh6U0taTGVnblFncVpBbWk4eXFFSmZFSUNyTEhPaEVCV0JRRnRDeW9qcTA1NE80YUpGSThyUGdEei9jNlA2aEdkUEZnbFNpNG9USlBnc3FUN1Y2WkVCVUZPbDRJd2tVamdKVTR0ZXNDY3ByYWs3RVFvU0FPaDBveDM5aDBaL21rK1o5aVNXUlAzblRjMlhWSWp5OUNORGJhbzdneHFQbkVyVmwwYmRpVXV2V3RDSmV1U2FYSFVuUmdQeTBMQmljNHdnQ2FOWmZhbkN0ZW96cXkraHFWdmQ2ZFdIRUhTdXJUeXBSOVNLVjBwYUVpUUQ2T3M4cWZvT3NBcTJsUTFOU2xrUHkwZ3J1c1NxaktWaVhSMVMwY2dPa1pndjhhbGxvZm5YanhoMnM0UHNyRWNXQzlvdWFzc2pTQzN0SUpWU1dkVXkwTEdBZFcwcllldFoyWlp5cVJ5MGJTY3h5eUhkVXBLM0xVbXRiNGNvMm9kOGRMajdLNjVEWG9wYzV5azNJSUZ0TGh4UDZ4Q1NTbGVILzlSdHlHZXZ5OERzQmtTdTNOV2hZc083Uk5xT2xyeEROTzlEU0l2ZTRxblhJY2R0NytmZTI1RDR5cmR5citDU0FMekVYLzRLNDcvLzVldDlCMHpnQWh2NHdBaE9zSUlYek9BR08vakJFSTZ3aENkTTRRcGIrTUlZenJDR044emhEbnY0d3lBT3NZaEhUT0lTbS9qRUtFNnhpbGZNNGhhNytNVXdqckdNWjB6akd0djR4ampPc1k1M3pPTWUrL2pIUUE2eWtJZE01Q0liK2NoSVRyS1NsOHprSmp2NXlWQ09zcFNuVE9VcVcvbktXTTZ5bHJmTTVTNTcrY3RnRHJPWXgwem1NcHY1ekdoT3M1clh6T1kydS9uTmNJNnpuT2RNNXpyYitjNTR6ck9lOTh6blB2djV6NEFPdEtBSFRlaENHL3JRaUU2MG9oZk42RVk3K3RHUWpwcTBwQ2RONlVwYit0S1l6clNtTjgzcFRudjYwNkFPdGFoSFRlcFNtL3JVcUU2MXFsZk42bGE3K3RXd2pyV3NaMDNyV3R2NjFyak90YTUzemV0ZSsvclh3QTYyc0lkTjdHSWIrOWpJVHJheWw4M3NaanY3MmRDT3RyU25UZTFxVy92YTJNNjJ0cmZON1c1Nys5dmdEcmU0eDAzdWNwdjczT2hPdDdyWHplNTJ1L3ZkOEk2M3ZPZE43M3JiKzk3NHpyZSs5ODN2ZnZ0YnZpRUFBQ0g1QkFrRUFCRUFMQUFBQUFDVUFtWUJBQVgvWUNTT1pHbWVhS3F1Yk91K2NDelBkRzNmZUs3dmZPLy93S0J3U0N3YWo4aWtjc2xzT3AvUXFIUktyVnF2Mkt4MnkrMTZ2K0N3ZUV3dW04L290SHJOYnJ2ZjhMaDhUcS9iNy9pOGZzL3YrLytBZ1lLRGhJV0doNGlKaW91TWpZNlBrSkdTazVTVmxwZVltWnFibkoyZW42Q2hvcU9rcGFhbnFHc0tCS3dFRGdLd3NiS3pzd3l0cWJpNXVtT3NCd1VGQThFREVNVEZ4c2ZJeWNUQ0FBVUNCTHZSMHRORkNRY0NCc0REeXR6ZDNza0RDTTRIME5UbTUrZ3ByZzNBMys3djhNZmg0K1hwOXZlbENnd0dDOXZ4L3dEL2hYdndESi9CZzVZVXNQTVhzS0hEZUFNV0NFaUFzS0xGUWdFWU5FREE4S0hIais0UUdHQndzYVJKT3dFYy96d0FBTEtsUzNnQUh0UTdTYk1tbVFDK09yN2N5VE1aQUFjQmJBb2RtdVdBZ1o1SWszSWJZR0FtMGFkUWp4Qm93RktwMWF2R0VBQ055clVyRDV3SXNJb2RDNEdwVTY5bzA2cFFXSldzVzZ4YWc2cWRTNWRCZ2JkNHlacWx5NWZyZ2JCNUE1T04yN2N3VFFHQUJTc2VPNkNCQXNPUUR5SmVUUG10Z2NlUk0xTnprTGl5WjdGTU1Xc2VqZXBBMjgrb3hRSm9JSmUwYTFBRUZxU2U3UmFBZ05hdmMxOUtjSmUyNzhFSGRBdWZsUEwwNytOWEMxQWN6bndSZ2M3SW8xOWwzYnc2b1FBUHBHc2ZpNENrOWU5OUhCamZUajdwQTlIZzA4OVJJTHU4KzZzLzFjdUg0K0M5ZmF3RmNNL2ZUNGI5L2Y5WE9jRGZnR0tZQnVDQlNoV0FIditCREZxQkhZSVFKZ1dBZHcxV0tFVUMwRVdvb1VzQ1dPaWhFd0tNdCtHSUh5Mnc0SWNvQmhGQWJ5UzI2TktFS2NZSVJBSWl1bWlqUXgzS3FHTU9ETlI0NDQ4QTViZmprRE0wQU9TUklDRndJcEZNbXJBaWtsQjZCR09UVkpiZzM0M3pPRVBMbHJQOG9vMU9OZ1pYWlpVMGFoak1BZ1lJNEFBcit1SEFDZ01DUE5DZWl3YU0yV1NQQ0lxMDVoSUJ1R0lBUnlRKzBLYWRIeDRBNEFBRUViQmtFd1FJMEkrR0N3eEthSU1DMkRkQUFYdHVrVkVEang1bzRxUWZHbGtlQWcwUUlLbW1kb0ZKSGdETGdjcmdVZHBGNUVDcmFCalZxWHVzdWtwZ2R0TDl0R2dhS1FGYUhnQm42Zm9kcjhjQk1OSWRDcW42RzdIR3FnZnJid3NJdUlmL0FnSTQ2eHV0MFRJMzdXeDcvUkhBWk5ybDJxMjN2alYyS2g5MmxjdnR1YVI5KzVtNmlSREFZckx2d2h1WnZKVXh0ZTRnOWtabnJyNlo4VXVaZ3BFRWpDL0JrVldLMmdJVVNoTGJjWkV5WEppaG45bVd5Vi9VL21zeFVSaDdockFtNC9xNFdNVWZvMFdBeVc0aElHWW5DdHlMV3AwcGQxVm1aZFNGZ3Vkc05OZjhWQUJ6S2pibEtBL09acTNQUXdVdDJNaW03SXhhc1VoZlpQQmJBeHlOU3RFWi94cTFRUTRydGtDK3B6aGQyUUpibTBRQVpZSk84K1JuT1phTmtBSXN3MmYxTkYxWEJyWGI1Z0F0OU4yN3JPd1pBRnJqSGMzVVk2RnNqOTZWUFNDNFBTSG5aWURIMGhEKzF0eUxSM056WHBUalV4OWxBNEJkZVNwS2t3WEEvOHNXaVIxWUFaOUxJeXBlQ0hodTBPV0JrWjU2S2d3RVp2aEpWK1pGOXV5NXdPMDRVWWpqeFRmdm9jZzhWczlEQlU4VzZzU24wamhaeUFPUExHaUJOOTlKQUhIM2xEbFJrdlBVZ1BXb1REK1c3RngxL3lMazRHZFMrMXR0cHhXNjl1bVhndjFiNUh1bGZFOEl4RitLK1R5MVA5ZjlPNG1ZL2o1eE5yZEVqeTd6NnduekJoaUs5eW5sZ0h5QlhVczZ4OEJRYks1d295bmdTeUJZd1V3a1VDeTNpOHp6cElTK0RrWmlkVmdCUUFuVGdrS1ArTStFbVZDQVhseG5HUDU5QXdFcmhHRWpqS2VVK21rR2dBRHhvUTRwb1VHc2ZHODR2blBJQW9lWUNSNGlaWW5DS1NKQWhzZkVSMGhSS1NxMFR0M2l3Y0VxU3NLQlBhR2hhOERJRGYvQWVSRVRWMHpLRWIrVFJIaTg4SXlTeUJCU2RwZWVFWFlqaTNDc1JCcDdNb0RxNmNhR0VCQmlIbmNvbHUxVkp3QnlSQVlkQnlreHNVQlJQUWx3QnhVWmlRZ243c1NNQTJvaE1oUkhTVWxFRWl0dlZNOEhrZEhIVGtvQ2tBL0pYNFBXbDR3MW10SVJvMHlLQUFja1BtTGc4WldPdUdDQ1BCUkxDQmdTbDRkSTVFdEs2YUV0cWhLWWpkampUa0k1SUVRYVk1TElEQVFxRzNKTEQ3SHlrZEU4UkFDd0lrZ0MzWVdDMlZ5RUxwRnl6QlFwZ0NuaFpJUXdYZExOZExyekJwOVVTam5mU2M4ZGFKSW43YXluUGwrd3ppVHQ4NTgzWUdWU2ZnblFncWJnbmk4QmdFRVhDb1BzUFlTWkRJMm9DSlRwRWo5S3RLQUlkVWtYTHhyUmZuNy9CSm9jM1djODV4alNrb3BnaS9nMGFVbkorSkVCNUZDbDRkeW1VamdKVTRrS3RDZjVyT2s3cC9rUGhlcFVvaDU5eUVaL1NrOFpLbVdXUk4ybkhWK1VWSVptRkNSRGJXbzZXZXFSbkVvVm1ESkZpa3V2Q2xDS2ZnU2JYSFVuU2w4QzBiQkcwNUlnRWFOWmNlblFnUGgwcmZUTWFrOW9DbGQzZXRVakJLMnJLY2ZxRXJYcWxaRThoY2NBL3ZwT3FpcVJzTzVVU2xrUk8waWpJc1dxakszaVhSOWkwY2hXa2E4Z2VhdGxjZmxVajRCMXM0TkVxd3RCQzB6RE5nU3BwTTJqVXZ5YVdoUEtkU2VEYlcwbko5dVF6OHFXaWJRTkNGMXZDOGR4a3BXM2pNVHNSeUFMM1BnSjF5TWdMVzc4UlB1UWx5cTNlY3h0U0d5ZjY4WG9CbVNSLzlRZG9yWWVZdHZzRG5DN0R0bXRkMDBJM29Zc2RyemdTOHA1MFV1ODEvNld2U2JNN1JUaEc5K2tKSmUraTVQdlArNkxYN3pwTng3ODdXL1ovZ3VQQUFzNGFnUitCMnNQN0xZRWYyTzZEQWFmZzcwQjRRZzNiOExkcUxDRmVZZmhwV3hZd2xyOXNQVTZ6STBGaXpobEpGYUdnVStzcnhRblk4VXNQcGVMa1FIakdFZHJ4c2Vvc1kxMTVWaWVvSGJIVVZNdmtDc241Q0VMcnJ3QmNhV1J0NGJrSUMwWmI5WjE4cFBMRnVXZVRwbktJYjV5MURyN0VCTnJlVkxIZllpT3Ywd2szM0tJekRYRHNUR1VqT1lXSjZXN2JkWlZValFjNTNNcHBiSjFybEtWLy9IalBJTnF6L0ZZcjUrcEZPYkREdnBjUzgzc29XVzgya1ZIeTcwdnlmK3JvNW5VVm9CRWRkSkVBalJNTUswckxuZVowNkJLTkVna0Rlb1lqWlFuY0M2MWpKU3lWVldQU2RQdzZMT3JZK1JwaDF4NjF0YkVJcTZwMU9PZXlIclhIZ3FxcllITnBGb21sTmhFRWpWSWlJdHMrZlNhSitKdDlvZUVMVjA4UzF0YVZoSDB0ZFZ6VTU3TWM5c1ZnblFBd1kwaTA0YVgzQjh5OHpDdGpXN21uTG9udDI2M2RhaE5UZWZLT3plMWZ1aTlHZlJ1bmxSejMvT2h0M2tCbmtuNDJKdmdtZWwzL3hDK0gzTTc1TjhNdDQ2Nmx4bHhVYWJ3NEJYdlMyQXRuWEh3cUJrYzdPNTRZUVRla0dpTFBEZktkc21ZVDg2Vlh2WUV1eXpQemNZQm91MlkwK1haU0lHNHpVZGo3TG51WERjZlY4YXZmODRYV0FNRWgwUjNUZEQva3hIdnBLT0Y1QTVadWROUGtuS1hoSERxaFhHNFI5aU1kYjUwV3lsUzc3cEZ0SjVLakl2ZGJHUXgrZG5SWXZTQWtIcnRRMUY0emtNT2Q1UE0vTHAxdjdrQjh6NlhRa2VhNzJseEpsbThEUGlLZkYyZVppKzhQZHArM2NRci9oeHRGRXZUSDQ4UXY3K1g4azhoKzNBeC81U2xkeVBzbk05RnZsOUU5OUJUUS9EY0tiM3BwK0Y1WkFocDlVSVovVU80RHZ1VGFENGVvNnY5VXlUNGt0YnBIaW9UOTBqYWZnOFZ4aWVqNXNRL0NPby9NclRrUTBYdS8vaWE4NzFpZVc0TWYvcGR1VHZ5c1c4UklINERXdHhQQysrOThhbndxK1h3eW5pYytlbFNkVit1WCtQZUFQLzdFUWpHOHMrZkw4c3Z4dVR2SC9mVERJRFovTmQvdGtSNGtnRTRGTFZ6ZFFYWUZ3U1lnQXpZZ0E3NGdCQVlnUkk0Z1JSWWdSWjRnUmlZZ1JxNGdSellnUjc0Z1NBWWdpSTRnaVJZZ2laNGdpaVlnaXE0Z2l6WWdpNzRnakFZZ3pJNGd6Ullnelo0Z3ppWWd6cTRnenpZZ3o3NGcwQVloRUk0aEVSWWhFWjRoRWlZaEVxNGhFelloRTc0aEZBWWhWSTRoVlJZaFZaNGhWaVloVnE0aFZ6WWhWNzRoV0FZaG1MSUNDRUFBQ0g1QkFrRUFCRUFMQUFBQUFDVUFtWUJBQVgvWUNTT1pHbWVhS3F1Yk91K2NDelBkRzNmZUs3dmZPLy93S0J3U0N3YWo4aWtjc2xzT3AvUXFIUktyVnF2Mkt4MnkrMTZ2K0N3ZUV3dW04L290SHJOYnJ2ZjhMaDhUcS9iNy9pOGZzL3YrLytBZ1lLRGhJV0doNGlKaW91TWpZNlBrSkdTazVTVmxwZVltWnFibkoyZW42Q2hvcU9rcGFhbnFHc0tCS3dFRGdLd3NiS3pzd3l0cWJpNXVtT3NCd1VGQThFREVNVEZ4c2ZJeWNUQ0FBVUNCTHZSMHRORkNRY0NCc0REeXR6ZDNza0RDTTRIME5UbTUrZ3ByZzNBMys3djhNZmg0K1hwOXZlbENnd0dDOXZ4L3dEL2hYdndESi9CZzVZVXNQTVhzS0hEZUFNV0NFaUFzS0xGUWdFWU5FREE4S0hIais0UUdHQndzYVJKT3dFYy96d0FBTEtsUzNnQUh0UTdTYk1tbVFDK09yN2N5VE1aQUFjQmJBb2RtdVdBZ1o1SWszSWJZR0FtMGFkUWp4Qm93RktwMWF2R0VBQ055clVyRDV3SXNJb2RDNEdwVTY5bzA2cFFXSldzVzZ4YWc2cWRTNWRCZ2JkNHlacWx5NWZyZ2JCNUE1T04yN2N3VFFHQUJTc2VPNkNCQXNPUUR5SmVUUG10Z2NlUk0xTnprTGl5WjdGTU1Xc2VqZXBBMjgrb3hRSm9JSmUwYTFBRUZxU2U3UmFBZ05hdmMxOUtjSmUyNzhFSGRBdWZsUEwwNytOWEMxQWN6bndSZ2M3SW8xOWwzYnc2b1FBUHBHc2ZpNENrOWU5OUhCamZUajdwQTlIZzA4OVJJTHU4KzZzLzFjdUg0K0M5ZmF3RmNNL2ZUNGI5L2Y5WE9jRGZnR0tZQnVDQlNoV0FIditCREZxQkhZSVFKZ1dBZHcxV0tFVUMwRVdvb1VzQ1dPaWhFd0tNdCtHSUh5Mnc0SWNvQmhGQWJ5UzI2TktFS2NZSVJBSWl1bWlqUXgzS3FHTU9ETlI0NDQ4QTViZmprRE0wQU9TUklDRndJcEZNbXJBaWtsQjZCR09UVkpiZzM0M3pPRVBMbHJQOG9vMU9OZ1pYWlpVMGFoak1BZ1lJNEFBcit1SEFDZ01DUE5DZWl3YU0yV1NQQ0lxMDVoSUJ1R0lBUnlRKzBLYWRIeDRBNEFBRUViQmtFd1FJMEkrR0N3eEthSU1DMkRkQUFYdHVrVkVEang1bzRxUWZHbGtlQWcwUUlLbW1kb0ZKSGdETGdjcmdVZHBGNUVDcmFCalZxWHVzdWtwZ2R0TDl0R2dhS1FGYUhnQm42Zm9kcjhjQk1OSWRDcW42RzdIR3FnZnJid3NJdUlmL0FnSTQ2eHV0MFRJMzdXeDcvUkhBWk5ybDJxMjN2alYyS2g5MmxjdnR1YVI5KzVtNmlSREFZckx2d2h1WnZKVXh0ZTRnOWtabnJyNlo4VXVaZ3BFRWpDL0JrVldLMmdJVVNoTGJjWkV5WEppaG45bVd5Vi9VL21zeFVSaDdockFtNC9xNFdNVWZvMFdBeVc0aElHWW5DdHlMV3AwcGQxVm1aZFNGZ3Vkc05OZjhWQUJ6S2pibEtBL09acTNQUXdVdDJNaW03SXhhc1VoZlpQQmJBeHlOU3RFWi94cTFRUTRydGtDK3B6aGQyUUpibTBRQVpZSk84K1JuT1phTmtBSXN3MmYxTkYxWEJyWGI1Z0F0OU4yN3JPd1pBRnJqSGMzVVk2RnNqOTZWUFNDNFBTSG5aWURIMGhEKzF0eUxSM056WHBUalV4OWxBNEJkZVNwS2t3WEEvOHNXaVIxWUFaOUxJeXBlQ0hodTBPV0JrWjU2S2d3RVp2aEpWK1pGOXV5NXdPMDRVWWpqeFRmdm9jZzhWczlEQlU4VzZzU24wamhaeUFPUExHaUJOOTlKQUhIM2xEbFJrdlBVZ1BXb1REK1c3RngxL3lMazRHZFMrMXR0cHhXNjl1bVhndjFiNUh1bGZFOEl4RitLK1R5MVA5ZjlPNG1ZL2o1eE5yZEVqeTd6NnduekJoaUs5eW5sZ0h5QlhVczZ4OEJRYks1d295bmdTeUJZd1V3a1VDeTNpOHp6cElTK0RrWmlkVmdCUUFuVGdrS1ArTStFbVZDQVhseG5HUDU5QXdFcmhHRWpqS2VVK21rR2dBRHhvUTRwb1VHc2ZHODR2blBJQW9lWUNSNGlaWW5DS1NKQWhzZkVSMGhSS1NxMFR0M2l3Y0VxU3NLQlBhR2hhOERJRGYvQWVSRVRWMHpLRWIrVFJIaTg4SXlTeUJCU2RwZWVFWFlqaTNDc1JCcDdNb0RxNmNhR0VCQmlIbmNvbHUxVkp3QnlSQVlkQnlreHNVQlJQUWx3QnhVWmlRZ243c1NNQTJvaE1oUkhTVWxFRWl0dlZNOEhrZEhIVGtvQ2tBL0pYNFBXbDR3MW10SVJvMHlLQUFja1BtTGc4WldPdUdDQ1BCUkxDQmdTbDRkSTVFdEs2YUV0cWhLWWpkampUa0k1SUVRYVk1TElEQVFxRzNKTEQ3SHlrZEU4UkFDd0lrZ0MzWVdDMlZ5RUxwRnl6QlFwZ0NuaFpJUXdYZExOZExyekJwOVVTam5mU2M4ZGFKSW43YXluUGwrd3ppVHQ4NTgzWUdWU2ZnblFncWJnbmk4QmdFRVhDb1BzUFlTWkRJMm9DSlRwRWo5S3RLQUlkVWtYTHhyUmZuNy9CSm9jM1djODV4alNrb3BnaS9nMGFVbkorSkVCNUZDbDRkeW1VamdKVTRrS3RDZjVyT2s3cC9rUGhlcFVvaDU5eUVaL1NrOFpLbVdXUk4ybkhWK1VWSVptRkNSRGJXbzZXZXFSbkVvVm1ESkZpa3V2Q2xDS2ZnU2JYSFVuU2w4QzBiQkcwNUlnRWFOWmNlblFnUGgwcmZUTWFrOW9DbGQzZXRVakJLMnJLY2ZxRXJYcWxaRThoY2NBL3ZwT3FpcVJzTzVVU2xrUk8waWpJc1dxakszaVhSOWkwY2hXa2E4Z2VhdGxjZmxVajRCMXM0TkVxd3RCQzB6RE5nU3BwTTJqVXZ5YVdoUEtkU2VEYlcwbko5dVF6OHFXaWJRTkNGMXZDOGR4a3BXM2pNVHNSeUFMM1BnSjF5TWdMVzc4UlB1UWx5cTNlY3h0U0d5ZjY4WG9CbVNSLzlRZG9yWWVZdHZzRG5DN0R0bXRkMDBJM29Zc2RyemdTOHA1MFV1ODEvNld2U2JNN1JUaEc5K2tKSmUraTVQdlArNkxYN3pwTng3ODdXL1ovZ3VQQUFzNGFnUitCMnNQN0xZRWYyTzZEQWFmZzcwQjRRZzNiOExkcUxDRmVZZmhwV3hZd2xyOXNQVTZ6STBGaXpobEpGYUdnVStzcnhRblk4VXNQcGVMa1FIakdFZHJ4c2Vvc1kxMTVWaWVvSGJIVVN0dlFOWUxaSVlKR1NCRUxySytqdndQVnlwNWEweU9SM2VmekREckJvbktick55VDdGY05pMURoTXRiNit4RFRBem1TUjMzSVRvdU01Rjh5eUUxMXd6SHhuQ3ltMXVjbENuUDJWVlJGdXlkUDVabmVGUjJ6MVV5YlVCK0RHaFFlVGtlU1M0MGs4NThXRVdmaTgwdDBmK3NvM1VGWjJPUWVkSXhDa0NmMzVGWFRET3ByUUNKcXFlSmRHaVlqRnBYWWg3enFVRzExSlowZXRVeHFuUXg3QXpyR0czYUhWdXQ5WmdFUFdoZGp5blZEaEcxcnozVTZzd09tMG85N2dtaGovMGhVSWVhMlV5cVpVS2h2V2FyRUpmYThobnBYTEc5STJjTDVNL2NWbyswM3h0dUZCWGJuK1ZHMFRtdHN1eDB6NGZYdW5YM2h4ajlFR0xLdTBIYTdvbXc3MjJkb0Q2a212em1UMkQva2VpQTYwYld4Z0M0d2VYamJTUXZQSlB3Y2U3RE5ZTndZeFI4NHFQeDk3OGxqbkhJMEh1MEhVL1B1cTJpOEpBenA5VFBOdmwzYnFwVmNLdmNNQnAvaUhoZnJwdVBJNWZtelJtNVZiQ0w4OXdNM09FOWo2SnFPQjcwcnFBY0lETXZlbWIvV0o2VWF5dmRLekhmK05OZGMrNlhKSDNxaFluNlE5cU45YlJVL1h4ZDE0eld3eHYyekh6ZEpWd3ZPMWZHVGsyWHE5MG1aMjhKcmQvK0ZMYWJsKzU5cVhneTBvNTNvUnpkclpmdSswV1NmWlVRQ3I1OGJybjY0WlBYOEllOGV2RW1nWFFQSWUrVnZ3T2U4bHpKTjN3Q2ozbDcyTHdsaHU4OFRaenBsdENMM214NE1mM3BMd0xzblNoKzlRZ2h2UUZoYnhPOWMrUDF0TWRINjNleTc5em56ZTRlVWIzdjdTSEJ3aEY5K0tpUWZPRTVqL3p3QldaZ3pjZEhMOGN5dXVnZlJQTmtlYnoxY2FGOHJQUisrODRYektmQWp3NGdpaTdONU45RUd3TWo1L1QzalRKZmN6ODE0cTZVQVZ4Yy9wMzQrVTdpai85ZGpKdHE5OWQvbUdCKy82bkhmQUpJQ2RPWEYvUnlnS2V3Zm92UkhReDRDc1duR0V3VGdhTEFkSXZoR0JZNEN2VEhHRG16Z1ovUWdkUW5BRzRIZ293Z2dveHhHeWJZQ1NoSWZaZXhncHZRZ21UeEFFNEhnNFlnZzRPaGdqWllDVGpvRmdYQWR6dFlDRDFZRzZVU2hKRXdoRyt4R3VobmhIUmdPcjFpQURYSWhIY3dnZEp4S2JNaWhZZEFoZHR4S1FKZ0N5V0loVzJRTzNtU0tOVmdLbUJZQld1ekljRWdEb25DQ2liV0NxOVFBUDBRRE1RUWdHY1lCUHJuSHNLd2gzekloOTlnaDNjSUJOMFhKWWdXaUZaZ0lJUUljb1pJQlJpU2lBKzFpQTd5ZjQ3b0RZQUlpWUk0aVVCbmlWWGdONWo0RHBXb2lUK1FocDNZRFo4SWlqOFFJcU5JaXFhSUJRa0FiLzlRVW9xcjZBUGprb3JKQUl1eDZBUFBRWXNXZDR0YXNIdEFZb3U4NkFPTlNJdkFHSXcrZ0lxaldJekcyQU1La0ljSW9vekwyQU1NNElvYUFvM1IyQVBpNFlqZmQ0MU1VREtFT0hmYytBUUtFU1hnR0k1UEVBQUcwSGp1VVk3bUtJNithQi9zMkk3bnVCRTJFby95ZUk0SFFJM1NZWS8zQ0FVTUlJbncySTlsa0FEcEdDSDhLSkJTY0FBQXFSMEhpWkJTb0FEWmVCOE42WkJUa0FEMHVJNFV5UWI3b0k1NU1aRVphUVVXQ1h6TDg1RndnQk1GNlJzZVNaSmFBSkVGd0pGUHBKSjJZQTBYdVJncENaTmYwQ2R4MGc1NFVaTTJPUVlKMENnUFVBRENZaFU4MlpObzBDZHdpQTIvMElkTTJZZk40Q1VFTVJGR09aVlVXWlZXZVpVYVdKbVZXcm1WWE5tVlh2bVZZQm1XWWptV1pGbVdabm1OSVFBQUlma0VDUVFBRVFBc0FBQUFBSlFDWmdFQUJmOWdKSTVrYVo1b3FxNXM2NzV3TE05MGJkOTRydTk4Ny8vQW9IQklMQnFQeUtSeXlXdzZuOUNvZEVxdFdxL1lySGJMN1hxLzRMQjRUQzZieitpMGVzMXV1OS93dUh4T3I5dnYrTHgreisvNy80Q0Jnb09FaFlhSGlJbUtpNHlOam8rUWtaS1RsSldXbDVpWm1wdWNuWjZmb0tHaW82U2xwcWVvYXdvRXJBUU9BckN4c3JPekRLMnB1TG02WTZ3SEJRVUR3UU1ReE1YR3g4akp4TUlBQlFJRXU5SFMwMFVKQndJR3dNUEszTjNleVFNSXpnZlExT2JuNkNtdURjRGY3dS93eCtIajVlbjI5NlVLREFZTDIvSC9BUCtGZS9BTW44R0RsaFN3OHhld29jTjRBeFlJU0lDd29zVkNBUmcwUU1Ed29jZVA3aEFZWUhDeHBFazdBUnovUEFBQXNxVkxlQUFlMUR0SnN5YVpBTDQ2dnR6Sk14a0FCd0ZzQ2gyYTVZQ0Jua2lUY2h0Z1lDYlJwMUNQRUdqQVVxblZxOFlRQUkzS3RTc1BuQWl3aWgwTGdhbFRyMmpUcWxCWWxheGJyRnFEcXAxTGwwR0J0M2pKbXFYTGwrdUJzSGtEazQzYnR6Qk5BWUFGS3g0N29JRUN3NUFQSWw1TSthMkJ4NUV6VTNPUXVMSm5zVXd4YXg2TjZrRGJ6NmpGQW1nZ2w3UnJVQVFXcEo3dEZvQ0ExcTl6WDBwd2w3YnZ3UWQwQzUrVTh2VHY0MWNMVUJ6T2ZCR0J6c2lqWDJYZHZEcWhBQStrYXgrTGdLVDE3MzBjR045T1B1a0QwZURUejFFZ3U3ejdxei9WeTRmajRMMTlyQVZ3ejk5UGh2MzkvMWM1d04rQVlwZ0c0SUZLRllBZS80RU1Xb0VkZ2hBbUJZQjNEVllvUlFMUVJhaWhTd0pZNktFVEFveTM0WWdmTGJEZ2h5Z0dFVUJ2SkxibzBvUXB4Z2hFQWlLNmFLTkRIY3FvWXc0TTFIampqd0RsdCtPUU16UUE1SkVnSVhBaWtVeWFzQ0tTVUhvRVk1TlVsdURmamZNNFE4dVdzL3lpalU0MkJsZGxsVFJxR013Q0JnamdBQ3Y2NGNBS0F3STgwSjZMQm96WlpJOElpclRtRWdHNFlnQkhKRDdRcHAwZkhnRGdBQVFSc0dRVEJBalFqNFlMREVwb2d3TFlOMEFCZTI2UlVRT1BIbWppcEI4YVdSNENEUkFncWFaMmdVa2VBTXVCeXVCUjJrWGtRS3RvR05XcGU2eTZTbUIyMHYyMGFCb3BBVm9lQUdmcCtoMnZ4d0V3MGgwS3Fmb2JzY2FxQit0dkN3aTRoLzhDQWpqckc2M1JNamZ0Ykh2OUVjQmsydVhhcmJlK05YWXFIM2FWeSsyNXBIMzdtYnFKRU1CaXN1L0NHNW04bFRHMTdpRDJSbWV1dnBueFM1bUNrUVNNTDhHUlZZcmFBaFJLRXR0eGtUSmNtS0dmMlpiSlg5VCthekZSR0h1R3NDYmorcmhZeFIralJZREpiaUVnWmljSzNJdGFuU2wzVldabDFJV0M1MncwMS94VUFITXFOdVVvRDg1bXJjOURCUzNZeUtic2pGcXhTRjlrOEZzREhJMUswUm4vR3JWQkRpdTJRTDZuT0YzWkFsdWJSQUJsZ2s3ejVHYzVsbzJRQWl6RFovVTBYVmNHdGR2bUFDMzAzYnVzN0JrQVd1TWR6ZFJqb1d5UDNwVTlJTGc5SWVkbGdNZlNFUDdXM0l0SGMzTmVsT05USDJVRGdGMTVLa3FUQmNEL3l4YUpIVmdCbjBzaktsNEllRzdRNVlHUm5ub3FEQVJtK0VsWDVrWDI3TG5BN1RoUmlPUEZOKytoeUR4V3owTUZUeGJxeEtmU09GbklBNDhzYUlFMzMwa0FjZmVVT1ZHUzg5U0E5YWhNUDVic1hIWC9JdVRnWjFMN1cyMm5GYnIyNlplQy9WdmtlNlY4VHdqRVg0cjVQTFUvMS8wN2laaitQbkUydDBTUEx2UHJDZk1HR0lyM0tlV0FmSUZkU3pySHdGQnNybkNqS2VCTElGakJUQ1JRTExlTHpQT2toTDRPUm1KMVdBRkFDZE9DUW8vNHo0U1pVSUJlWEdjWS9uMERBU3VFWVNPTXA1VDZhUWFBQVBHaERpbWhRYXg4YnppK2M4Z0NoNWdKSGlKbGljSXBJa0NHeDhSSFNGRXBLclJPM2VMQndTcEt3b0U5b2FGcndNZ04vOEI1RVJOWFRNb1J2NU5FZUx6d2pKTElFRkoybDU0UmRpT0xjS3hFR25zeWdPcnB4b1lRRUdJZWR5aVc3VlVuQUhKRUJoMEhLVEd4UUZFOUNYQUhGUm1KQ0NmdXhJd0RhaUV5RkVkSlNVUVNLMjlVendlUjBjZE9TZ0tRRDhsZmc5YVhqRFdhMGhHalRJb0FCeVErWXVEeGxZNjRZSUk4RkVzSUdCS1hoMGprUzBycG9TMnFFcGlOMk9OT1Fqa2dSQnBqa3NnTUJDb2Jja3NQc2ZLUjBUeEVBTEFpU0FMZGhZTFpYSVF1a1hMTUZDbUFLZUZraERCZDBzMTB1dk1HbjFSS09kOUp6eDFva2lmdHJLYytYN0RPSk8zem56ZGdaVkorQ2RDQ3B1Q2VMd0dBUVJjS2crdzloSmtNamFnSWxPa1NQMHEwb0FoMVNSY3ZHdEYrZnY4RW1oemRaenpuR05LU2ltQ0wrRFJwU2NuNGtRSGtVS1hoM0taU09BbFRpUXEwSi9tczZUdW4rUStGNmxTaUhuM0lSbjlLVHhrcVpaWkUzYWNkWDVSVWhtWVVKRU50YWpwWjZwR2NTaFdZTWtXS1M2OEtVSXArQkp0Y2RTZEtYd0xSc0ViVGtpQVJvMWx4NmRDQStIU3Q5TXhxVDJnS1YzZDYxU01FcmFzcHgrb1N0ZXFWa1R5Rnh3RCsrazZxS3BHdzdsUktXUkU3U0tNaXhhcU1yZUpkSDJMUnlGYVJyeUI1cTJWeCtWU1BnSFd6ZzBTckMwRUxUTU0yQktta3phTlMvSnBhRThwMUo0TnRiU2NuMjVEUHlwYUp0QTBJWFc4THgzR1NsYmVNeE94SElBdmMrQW5YSXlBdGJ2eEUrNUNYS3JkNXpHMUliSi9yeGVnR1pKSC8xQjJpdGg1aTIrd09jTHNPMmExM1RRamVoaXgydk9CTHlublJTN3pYL3BhOUpzenRGT0ViMzZRa2w3NkxrKzgvN290ZnZPazNIdnp0YjluK0M0OEFDemhxQkg0SGF3L3N0Z1IvWTdvTUJwK0R2UUhoQ0Rkdnd0Mm9zSVY1aCtHbGJGakNXdjJ3OVRyTWpRV0xPR1VrVm9hQlQ2eXZGQ2RqeFN3K2w0dVJBZU1ZUjJ2R3g2aXhqWFhsV0o2Z2RzZFJLMjlBMWd0a2hna1pJRVF1c3I2Ty9BOVhLbmxyVEk1SGQ1L01NT3NHaWNwdXMzSlBzVncyTFVPRXkxdnI3RU5NRE9aSkhmY2hPaTR6a1h6TElUWFhETWZHY0xLYlc1eVVLYy9aVlZFVzdKMC9sbWQ0VkhiUFZUSnRRSDRNYUZCNU9SNUpMalNUem54WVJaK0x6UzNSLzZ5amRRVm5ZNUI1MGpFS1FKL2ZrVmRNTTZtdEFJbXFwNGwwYUppTVdsZGlIdk9wUWJYVWxuUjYxVEdxZERIc0RPc1liZG9kVzYzMW1BUTlhRjJQS2RVT0ViV3ZQZFRxekE2YlNqM3VDYUdQL1NGUWg1clpUS3BsUXFHOVpxc1FsOXJ5R2VsY3NiMGpad3Zrejl4V2o3VGZHMjRVRmR1ZjVVYlJPYTJ5N0hUUGg5ZTZkZmVIR1AwUVlzcTdRZHJ1aWJEdmJaMmdQcVNhL09aUFlQK1I2SURyUnRiR0FMakI1ZU50SkM4OGsvQng3c00xZzNCakZIemlvL0gzdnlXT2NjalFlN1FkVDgrNnJhTHdrRE9uMU04MitYZHVxbFZ3cTl3d0duK0llRit1bTQ4amwrYk5HYmxWc0l2ejNBemM0VDJQb21vNEh2U3VvQndnTXk5Nlp2OVlucFJySzkwck1kLzQwMTF6N3Bjay9UdHBWblRVSDlKdTRSamdVa1IzZE5YUEo1K1FmVTNlV3c4dkpCa0NyWFNQM1NWZEg0MHprZUYwVEtlZG1pNHZ6TGdoc085VHY3MGx0TjZYTjRRVTdydWJ0emxqUHp1M0s1Nk11UGRGZ21YTXVwcVA3dFpMZTBVQlVhODdvSk45bFJCbUJvamY2UHVrZjk2UXErdGRpV0ZYY3krdDhtcTBrQjRDbjRJMnBIdW9tYi9mMGZKM3BuemxJOE4wNldyZXpmbUdEKzVQQW5tUHlMbldObStKNTlGUy9JK2tiZGh6Sjh2eXVZTDVwTVRlMTR4WHh2Ui9CbStBREV6WHdONko2WVVDZXRqK25zdlJoNTc5dXYrUTQ0ODYrOG9ZdjBuS2I1N1VQem44T3hFOVBuTG5sdXV2T3YzU1ozKzd3SC8vYi9GOXA5WjhuU2VBdUlDQWpPRjRjelo3blRkOHV1QTNsT0YrbUxaM3dtY1N0cmR6ME5kd2tYWitwNEIvSkNlQlhCWjhaTkY2dWhBQXJ6ZE1KQWhtRUlnVituY0tCS2dZRndkb0dJZ1YvbWNPRzNnVjhuZHE5SmRDa29jSkt2Z3dDbGhtYlJRWUZvZ0tFNU0xNlFaLzM2QjR1cEI4WWhHRWM3YURmRlNEdThGK1Z3R0NqcmFDeXRlQ2o1QXRQR053TjhnWVdBZ0pTNWdhZ1hkc1B5aDlZS2hOWGpoSFJlaG9xNWNYOU5JSkllSWJTb0p4UjdnWTNiRUpIT01iQnJod0RJZ1hURU1KREdCNG9QR0dzTlo3aXVFWWs2QXd4OEdGdzJhRlYzR0hqWkFBWlZnWmxIaHNsZ2dmQXBCM2VDQ0p5SEdHNGZhSmwzZ2JoOEFBV3BnWC8wa1ljcWdJSDVjaENHQkJIcTlvY3JHSUZRL1FpYnhnQUI0b0dERzRjTGtJRjZxSUI3N3dIc0g0Y01Qb1NBNUlCZ25naS9hUmpCTzNqS3BSS201QUFOQjRIN2RZZE5RNEZxdEJoVXV3RDRyb0dhYlljYWJUS3diQWkwV2dBQWZ3QUxlV0d1VVljb1g0RzVjeUsxcWdFZU00RytvNGNmT0lISmNpQUxZZ2lqdWdENXp5am9MWWpGTTNnLytCQUlsQ0JLc1FKNzlna01neGlGUFhBbXV6SWNFZ0RvbkNDZ3ZXSjYyQURiL3dpKzhCaFJVcEEzRVlLOEtRa2lvcERGR2lESVJYa2pUd2dpMDVrOG5RZ3pDNUFnWkNrenJaRGZGNGt4aXlrMENaY0FoNWt5bUFOVUZKa3psSWxEZ2drMGZaSXRLb2xPb2drazNwSHZzSWxTSndrZjlUNlNKSmFaVThrSWRaU1NJNXc1VkJrQUN0K0pXMDhZZGlTUVRqWXBZSThwSnBTUVRQd1piMk1UUnZlUVFpS0pkb000ZDE2UUkvaVpmSWdaWjd5UVJlNlplekVaYUJ5UVFLY0pLRUNYZ0NlWmc5d0lxTDZZZFY2WmcySUI2UmlSY2FRNWtPTXBpWE9SMk5xWmxEb0JDZGFSV2hDSnBjb0lKU09acklBSW1tNlFXaXFacFM4aml0S1FZQnNCR3c2WDJzT1p0amdCTmw2WmNJVUpxNmlRWU1zSW1kU1JqQnVRYlBtSnBBK1FCRGVaeGUwSTZ3cVJXZjZaeGRvQUNXU1poTTBaelVXUVlKWUp0ZmlTZ01vSmZiK1FYN29Kd0FFaE1ISUo3ak9RYmRtWS91SVJMYXVaNXpnQlBaMkNLeXdvanlLUWZXV1FEbVdSa0ZZSTM1U1FsbDF1Q2RxNElwNEJpZ2Z0QW5FQ21SZk1TUXo2Q2VDRm9JQ2RBb0QxQUF3c0lZelpBbXRoQ2gxT0NSclBBSzJmQWxLem1pS2JrQVhsSUFhUUtRck1DaExOcWlMdnFpTUJxak1qcWpORnFqTm5xak9KcWpPcnFqUE5xalB2cWpRQnFrUXFvWklRQUFJZmtFQ1FRQUVRQXNBQUFBQUpRQ1pnRUFCZjlnSkk1a2FaNW9xcTVzNjc1d0xNOTBiZDk0cnU5ODcvL0FvSEJJTEJxUHlLUnl5V3c2bjlDb2RFcXRXcS9ZckhiTDdYcS80TEI0VEM2YnoraTBlczF1dTkvd3VIeE9yOXZ2K0x4K3orLzcvNENCZ29PRWhZYUhpSW1LaTR5TmpvK1FrWktUbEpXV2w1aVptcHVjblo2Zm9LR2lvNlNscHFlb2F3b0VyQVFPQXJDeHNyT3pESzJwdUxtNlk2d0hCUVVEd1FNUXhNWEd4OGpKeE1JQUJRSUV1OUhTMDBVSkJ3SUd3TVBLM04zZXlRTUl6Z2ZRMU9ibjZDbXVEY0RmN3Uvd3grSGo1ZW4yOTZVS0RBWUwyL0gvQVArRmUvQU1uOEdEbGhTdzh4ZXdvY040QXhZSVNJQ3dvc1ZDQVJnMFFNRHdvY2VQN2hBWVlIQ3hwRWs3QVJ6L1BBQUFzcVZMZUFBZTFEdEpzeWFaQUw0NnZ0ekpNeGtBQndGc0NoMmE1WUNCbmtpVGNodGdZQ2JScDFDUEVHakFVcW5WcThZUUFJM0t0U3NQbkFpd2loMExnYWxUcjJqVHFsQllsYXhickZxRHFwMUxsMEdCdDNqSm1xWExsK3VCc0hrRGs0M2J0ekJOQVlBRkt4NDdvSUVDdzVBUElsNU0rYTJCeDVFelUzT1F1TEpuc1V3eGF4Nk42a0RiejZqRkFtZ2dsN1JyVUFRV3BKN3RGb0NBMXE5elgwcHdsN2J2d1FkMEM1K1U4dlR2NDFjTFVCek9mQkdCenNpalgyWGR2RHFoQUEra2F4K0xnS1QxNzMwY0dOOU9QdWtEMGVEVHoxRWd1N3o3cXovVnk0Zmo0TDE5ckFWd3o5OVBodjM5LzFjNXdOK0FZcGdHNElGS0ZZQWUvNEVNV29FZGdoQW1CWUIzRFZZb1JRTFFSYWloU3dKWTZLRVRBb3kzNFlnZkxiRGdoeWdHRVVCdkpMYm8wb1FweGdoRUFpSzZhS05ESGNxb1l3NE0xSGpqandEbHQrT1FNelFBNUpFZ0lYQWlrVXlhc0NLU1VIb0VZNU5VbHVEZmpmTTRROHVXcy95aWpVNDJCbGRsbFRScUdNd0NCZ2pnQUN2NjRjQUtBd0k4MEo2TEJvelpaSThJaXJUbUVnRzRZZ0JISkQ3UXBwMGZIZ0RnQUFRUnNHUVRCQWpRajRZTERFcG9nd0xZTjBBQmUyNlJVUU9QSG1qaXBCOGFXUjRDRFJBZ3FhWjJnVWtlQU11Qnl1QlIya1hrUUt0b0dOV3BlNnk2U21CMjB2MjBhQm9wQVZvZUFHZnAraDJ2eHdFdzBoMEtxZm9ic2NhcUIrdHZDd2k0aC84Q0FqanJHNjNSTWpmdGJIdjlFY0JrMnVYYXJiZStOWFlxSDNhVnkrMjVwSDM3bWJxSkVNQmlzdS9DRzVtOGxURzE3aUQyUm1ldXZwbnhTNW1Da1FTTUw4R1JWWXJhQWhSS0V0dHhrVEpjbUtHZjJaYkpYOVQrYXpGUkdIdUdzQ2JqK3JoWXhSK2pSWURKYmlFZ1ppY0szSXRhblNsM1ZXWmwxSVdDNTJ3MDEveFVBSE1xTnVVb0Q4NW1yYzlEQlMzWXlLYnNqRnF4U0Y5azhGc0RISTFLMFJuL0dyVkJEaXUyUUw2bk9GM1pBbHViUkFCbGdrN3o1R2M1bG8yUUFpekRaL1UwWFZjR3Rkdm1BQzMwM2J1czdCa0FXdU1kemRSam9XeVAzcFU5SUxnOUllZGxnTWZTRVA3VzNJdEhjM05lbE9OVEgyVURnRjE1S2txVEJjRC95eGFKSFZnQm4wc2pLbDRJZUc3UTVZR1Jubm9xREFSbStFbFg1a1gyN0xuQTdUaFJpT1BGTisraHlEeFd6ME1GVHhicXhLZlNPRm5JQTQ4c2FJRTMzMGtBY2ZlVU9WR1M4OVNBOWFoTVA1YnNYSFgvSXVUZ1oxTDdXMjJuRmJyMjZaZUMvVnZrZTZWOFR3akVYNHI1UExVLzEvMDdpWmorUG5FMnQwU1BMdlByQ2ZNR0dJcjNLZVdBZklGZFN6ckh3RkJzcm5DaktlQkxJRmpCVENSUUxMZUx6UE9raEw0T1JtSjFXQUZBQ2RPQ1FvLzR6NFNaVUlCZVhHY1kvbjBEQVN1RVlTT01wNVQ2YVFhQUFQR2hEaW1oUWF4OGJ6aStjOGdDaDVnSkhpSmxpY0lwSWtDR3g4UkhTRkVwS3JSTzNlTEJ3U3BLd29FOW9hRnJ3TWdOLzhCNUVSTlhUTW9SdjVORWVMendqSkxJRUZKMmw1NFJkaU9MY0t4RUduc3lnT3JweG9ZUUVHSWVkeWlXN1ZVbkFISkVCaDBIS1RHeFFGRTlDWEFIRlJtSkNDZnV4SXdEYWlFeUZFZEpTVVFTSzI5VXp3ZVIwY2RPU2dLUUQ4bGZnOWFYakRXYTBoR2pUSW9BQnlRK1l1RHhsWTY0WUlJOEZFc0lHQktYaDBqa1MwcnBvUzJxRXBpTjJPTk9RamtnUkJwamtzZ01CQ29iY2tzUHNmS1IwVHhFQUxBaVNBTGRoWUxaWElRdWtYTE1GQ21BS2VGa2hEQmQwczEwdXZNR24xUktPZDlKengxb2tpZnRyS2MrWDdET0pPM3puemRnWlZKK0NkQ0NwdUNlTHdHQVFSY0tnK3c5aEprTWphZ0lsT2tTUDBxMG9BaDFTUmN2R3RGK2Z2OEVtaHpkWnp6bkdOS1NpbUNMK0RScFNjbjRrUUhrVUtYaDNLWlNPQWxUaVFxMEovbXM2VHVuK1ErRjZsU2lIbjNJUm45S1R4a3FaWlpFM2FjZFg1UlVobVlVSkVOdGFqcFo2cEdjU2hXWU1rV0tTNjhLVUlwK0JKdGNkU2RLWHdMUnNFYlRraUFSbzFseDZkQ0ErSFN0OU14cVQyZ0tWM2Q2MVNNRXJhc3B4K29TdGVxVmtUeUZ4d0QrK2s2cUtwR3c3bFJLV1JFN1NLTWl4YXFNcmVKZEgyTFJ5RmFScnlCNXEyVngrVlNQZ0hXemcwU3JDMEVMVE1NMkJLbWt6YU5TL0pwYUU4cDFKNE50YlNjbjI1RFB5cGFKdEEwSVhXOEx4M0dTbGJlTXhPeEhJSnMrQWx3S3BHc1Zya2VRbXo0V0ZZQzVWeFh0UTE3YXZKdENnR24va1pWdVEySjdSam1HeHJMYURjZ2ltU2pjN3lKV1d3K3hMUU43U2NyTEVCYTlEdG10RGp0ckRQUENGYjROV1d6OHppa1E5NjQxS2ZwTlh5M2ZNWURiaFBXMXY4V3RsQXdzMWR4T3NZcW05WVp0cU52VnBFQTNkVXVsSm9OMTZ1Qi9YTGh5enJ6a2hsWGE0WGg4ZUhIS2ZVaDhZRnBpZUp3WWIyMGtKM0hwMmVKM3NIWjJnUTJJeTBwYTQyOXd0NE1Kd0s5TGNNalJIbnZqeHhVTTcvbUtyRlVZR3JraGVkWG5rNWNDdzZDK1pMd1JuYkl5a0t3LzMxN2x4Y2pVc2pKdUxEajJ6dFNrWWs0R21IMlc0a3RXdHA1cFJzYWFhMlpsRHBIWXdnejBzanhaakdmOW1iblBKblVzVDFETHV4ekhWNmRDQmtpQThSWmt2Yno1bjRuKy84ZWkzYWJrbGt3YW9KR09oeXVibDJGeVVyaWVtWWFIZXN2YzFwWVFtcU9WanNlbzhVYmZuYXc2b3FtR0NmZ2F6WmhIRnpUV0JBWWZyaCt5NlpxMnVpRmtUbG1uZTFKTm5iYTVJWE9PVm9qSEoxVTlnK1RTSHp1MlMxNTkwVGdmbzllQ296Vm9ncjFRYXh1RDJpbmJ0VU93L2ROUTV6cDExclZLc1pOcTduZllHbDUvUmtxVVRScGhnSnphWjc5MkNaYWJLdTV2UVB0YzJoWkxzdjhwN1NCVnJ0NVFoYXV6UDZMWnNnMmJKK3R1OEdyeEZtLzR3VFVBN1hiSHZPRmw2SWJNMDZ5bC9rZFU5V1ZjdHd6Y29QMldzTnZxM0JMNW1qWGZBZUgycEFxZTJYZWI5T0VQMmJpdStFdVdmOTg1S2VCMlZjb0I4dkc2WnR6SG42WlN1dit0Y3ZLSUl2d2Y5elpXeFhrU2RLTENIQ0FqZDFYSEEwSk14dUxjSVEwbk9mczJLK2llUkgxU1FKUm4wbXNhY3BGYmpPWWdPYnRaQjh4VWdnVWNQNmxkT0VobVRLU2hDMFRtU1IzcFhQVUY5NCtRbTdGdGg0ak5ZeFRqRks2ZHFIUzNjN2Y4L2crK2MvWHJEaWs2b2ZTdVFON3lYSmJHYXZ4VndIbmJwLy9ENVdPS2ZGS3lUdGpDSzk1VlM4Zmk0NlVxK0o2d1BrVlQ1NG5PQ2N0eXQ4NStQNm9uS1hCSHNIVjMrSnhCc1ZkSzA1UHFiV1JFZkVlaXY4cnRJNXQ0U1krSjh2RjQvbTJ2N25zcWNiNG54LzlyODVFUmZ2VkUzeXFhSDM3dnUwOGswMzkwK0Nod3ZmV0hKUCtIb0I3K241ZlE3NGRUK3hRdVBydFlNWDN5NFg3L293Vi9LWkI4THRGMUtGSi9tV2VBSzdCK3VoVWo0L2NOY2dkY0RPaGlLTEpzeStPQUs1Qi9TYkZ2QkZKOFhQZC9wQ1dDeG1kTmVWRitwRFdCeDZCOTVsZDlIa0ZrSE1nQzJPY045NmNlQkZoVk05Z0NDUGdTbHVjYUYxaGJPK2dDRU1oKys4R0MzVUI2UTZnQ21QY1JOOWdjdWRjVGg3ZUVKVkNFQVZHQnIxR0QyYmQvcmRXRUpDUWZRZGdRUCtpQVZnZ1FUNWdiU05nTlZUZUVYdWdSV0JnWkNsQ0d5MFdGTVNDSDJVZUNhcUdGWEVTSE1kQ0c2V1VkM0xka2ZBZ0RkaGdQS3RnVmZ1Z1N1emVJYVhnTWJ6Z1hFclNCZ3lnRGVuaEhnTWNWYVljVlNqaUpMbEIyVnhGQ21oRjhWbkdJUzJpQzhIQ0dkQkdJUThhRk14aUYvNHBJR29ub0VzczNnOSszRTJOb0UvMUhGcWpJaVNwUWlaWUloekNZV2F5NGhMbUlSWmRvRWhpaUdMZklpeEVRaHZFQWltZ1JpVzZ4aHN4WUFob0lRc09JRG5Fb05ObEloNDJvU04yb05qbllFc3RZalNLZ2loNnhpeWVSaVdPaGp1YTRBdGNvRmdLSUVPeW9Hbmo0amhPVkYrNUlqK05vYXZob1Q3L3pGTGtqR1BQNGp5Z1FqOWc0RkFNWkdESm9rRGtnalZnQmpSWUJrVzZ4aVE1NUE3WFlFMTlERTM1REdhUjRrU01naWhKeWpNNGpNaURaQTY0SWNlVllDdWpJRXcxNWtqcFFqSVZFajZZSUVyTjRraG1KRkFXWkQvMzRFb3NJa3k0Z2trcnhLZWtRaTBpeGowRDVBdlVJSHpkSkhEVUpFaEtabERod2ZtUXhoYWN3TWY4WlE1SlNxUTZVc1pHNzRJd3Y4WWhiQ1FOR21ZQWZDUWtKMEpPNk41WkQ4SlFPNFpXbWtDMDh3NVpFSUpTamQ1YjFvcFpVRjQ1MEtRSkxXVGhhaVFnQjRKYjZ4cGQ5NlpmQkNGczV3d2toNGh0S2NwaEZRSldzSTVhSXdERytNVENRT1FRVW1SZllOUWtNVUloS1laR1pHUVE5aUJlT01Ra0tjeHdyT1pvdVVKWmF0WmlNa0FCMnFZeXNtUVN1aVJTMmNZOXlrSnJJZ1plMTJRSzNxVlVqTmdnTW9KZEc5SnRMRUp5NDZWK0FBQmJrWVpYSUdRVEthUjZyeVFzR2tKaDRzWlBSaVFQVG1SUUlNSngwNEF2dm9aM2J5WjNhVVFDVUNRWUpjSjMyUVo3bGFaN2xVaXB1UUFEc2VSL1ErWjVFMEowcEpKOW5zQStncVJpK2laLy9NMkE2dldJQTFSbVpCL0FBUjRjYUFTcWdNN0NaeDNFcHM2SUZHdkdmbm5HZ0Rtb0RFQm9kbHlJQXRxQ2JOYUFQbkxLZ3RERTBHUm9GQ3drZ0NKQW9STEFLY2ZJTEpMb3dKMG9GYTdNaHdTQU9pY0lLTjlZbnJZQU52NENkNUFHWE0wb0ZoUGtid25Da1NIcWtVYUlNUWpLa1Y1Q1RTeHFseElDVVRvb0VCaUtsV05vTkRWcWxPNUNNV2ZxbHhXQ2lYSW9GV0FPbVVrcVVZOG9GVUdxbUVlS2VhWW9FSGNtbVI0S2hiem9FTlNxbkxvS21kUW9HalltbkpBS2JlNnFleHVtbmxORWRnV29HNDBLb0NOS2toMm9HejZHbzlpR21qV29HTFFtcCttaVlrNW9FWG1xcHgyR29tZW9HZmNxcHN3R29uNm9LUlNxcVNnU2lwWW9GLzhXSnFvdXhZNnRhQitMaHFuaWhNYkY2QnlWRHEyTnhtcmVhQndxaHE2T29xcjBhQm9NSnBNQnFETHc2ckg3d3E4Y3FKWStqcklNUUFCdlJyQUN4R3NJS3JjQnlBSU1xcDk5NXJkaktCZ3d3bTZoS0dOOGFtL1ZKclZPYW51WGFCd25hckZyaHJldHFCd293cTZMS0ZPb2FyNFNRQU5QcXA0akNBSmlLcjNxd0Q4YjZIekZ4QVA4S3NINmdyeGFxSFNKeHJ3Z3JDVGh4cmlRaUs0SDVzSlV3cndVd3NBZkRueGFMRHRhd3I2dUNLVTNac1p6UUp5OGFvend4RU05d3NDUUxDZ25RS0E5UUFNTENHTTJRSnJiUXNnalVDcTdnbzErU3BENTdwQXZnSlFXUUpoN0tDamg3dEVpYnRFcTd0RXpidEU3N3RGQWJ0Vkk3dFZSYnRSSldlN1ZZbTdWYXU3VmMyN1ZlKzdWYkVBSUFJZmtFQ1FRQUVRQXNBQUFBQUpRQ1pnRUFCZjlnSkk1a2FaNW9xcTVzNjc1d0xNOTBiZDk0cnU5ODcvL0FvSEJJTEJxUHlLUnl5V3c2bjlDb2RFcXRXcS9ZckhiTDdYcS80TEI0VEM2YnoraTBlczF1dTkvd3VIeE9yOXZ2K0x4K3orLzcvNENCZ29PRWhZYUhpSW1LaTR5TmpvK1FrWktUbEpXV2w1aVptcHVjblo2Zm9LR2lvNlNscHFlb2F3b0VyQVFPQXJDeHNyT3pESzJwdUxtNlk2d0hCUVVEd1FNUXhNWEd4OGpKeE1JQUJRSUV1OUhTMDBVSkJ3SUd3TVBLM04zZXlRTUl6Z2ZRMU9ibjZDbXVEY0RmN3Uvd3grSGo1ZW4yOTZVS0RBWUwyL0gvQVArRmUvQU1uOEdEbGhTdzh4ZXdvY040QXhZSVNJQ3dvc1ZDQVJnMFFNRHdvY2VQN2hBWVlIQ3hwRWs3QVJ6L1BBQUFzcVZMZUFBZTFEdEpzeWFaQUw0NnZ0ekpNeGtBQndGc0NoMmE1WUNCbmtpVGNodGdZQ2JScDFDUEVHakFVcW5WcThZUUFJM0t0U3NQbkFpd2loMExnYWxUcjJqVHFsQllsYXhickZxRHFwMUxsMEdCdDNqSm1xWExsK3VCc0hrRGs0M2J0ekJOQVlBRkt4NDdvSUVDdzVBUElsNU0rYTJCeDVFelUzT1F1TEpuc1V3eGF4Nk42a0RiejZqRkFtZ2dsN1JyVUFRV3BKN3RGb0NBMXE5elgwcHdsN2J2d1FkMEM1K1U4dlR2NDFjTFVCek9mQkdCenNpalgyWGR2RHFoQUEra2F4K0xnS1QxNzMwY0dOOU9QdWtEMGVEVHoxRWd1N3o3cXovVnk0Zmo0TDE5ckFWd3o5OVBodjM5LzFjNXdOK0FZcGdHNElGS0ZZQWUvNEVNV29FZGdoQW1CWUIzRFZZb1JRTFFSYWloU3dKWTZLRVRBb3kzNFlnZkxiRGdoeWdHRVVCdkpMYm8wb1FweGdoRUFpSzZhS05ESGNxb1l3NE0xSGpqandEbHQrT1FNelFBNUpFZ0lYQWlrVXlhc0NLU1VIb0VZNU5VbHVEZmpmTTRROHVXcy95aWpVNDJCbGRsbFRScUdNd0NCZ2pnQUN2NjRjQUtBd0k4MEo2TEJtaUNIWVZqQXRJamdpS3R1VVFBcmhqQUVZa1B0QmxKQUxJQnNHU2VlUndBNEFBRUViQW9Fd1FJMEkrR0N4anFDS0xGRk1Db0h3TFlOMEFCZm02UlVRT1hIbWdpY1hNU2srT25lUmhaSGdJTkVLQ3BxWGFCU1I0QXl6M0NxVHk5d2xySFVkcEY1RUN3WnhpVnFudTgrdHBxVnJjS3kwWjIwdjAwS2Y4YUtRMWFIZ0JuSGZLck1uVktLd2UxeHdFdzBoMEs2Zm9idDR0OHl3MmU0ckpCN0c4TENMaUhBZ0tvNnh1eTF6MnJqS0x4dGpIdmJIdjlFY0JrMmpWcmlMdmVlQnF3R2dPajFsaTBlOWlWTUw4Rysrdk5xdytYRWJGbkV5ZENBSXZsWXN3SHcrNE1ZSExIWFh4TUdWTVVDekp5ZEFwbjNCQUNNYk5zaGN1TEtSakp6Q1hiN0ZDNE9uc1JLbW9Md0F0SmJNZGw2Z2ZQOFNoZDlCV09mbVpiSm4vUm0vTWJVTWNEd05aVE0xRzFaejdiR2FKdlR1ZlI5VDhPaDIwRkFUNitoWUNZblNoQU1tcEUyekYyUy9hNlBVV1psVkVYeXA2ejVUM0gzaTJwN0xjVUtPYzE1U2dQenRhM0hBUWdsZmJpVG1pTVY5bW1FSTVhdDJ3b0VMZi9SdzFnN3NUYW9FMStTdVJXWDN0RzR5OUpiVG9SUnl1MndNcWxlRjdaQW5HUUt5SFlzK2RRK1dLRlR2UGtaeHl2VVI5K3dSc2h1bUx4blZON1phQ1hrWUMrTzZuZXZBK3dqOFZ1T25CN0JyQWFBV1NvbE9MYkE0RzZWWmVuMC8xYkQ2emh1MWp0cDY4RDRwWUJuOHY2WW1rL0J2NWlLWjM5ZGdDNHZQanZIc3RiRFBySzhMeTh5RzZBTXRBY1ZnQkFONHZvTGpCdEk4UGRhcU0vQ0pwQVZuaEJBTzd3VWNEQVZGQU1DY1NnQjJ2QWdNRFVyeVJYeWd2dkdEZzZyQmh1aFM1b29HV0k4ajZyVks4TEVoeEw4bkRvZ2cySzVZWTE2U0ZTTWlpRzZlWGxoRVJzQVFCdHlCWFdnY1oxV3JpZVlxQVl4UlVFb0lZOU9lQlErTmNTL3dHU1lYNXY0V0lYVllCR3JLanhLV1NVVWdlbjBFTEJ2SEdOSjZpalc0YllsU0M2Ukl4YytLSmd6SWhIRmdqU0xYZUVpaEk5Z2dBemdCQXZTQ3drQ3VMWUVqNmlaWkVPZVNBWGhwZVhTRXJTQkp3Y2l5Y3ZDY2FBTURFTWZsVEtERC9KZ2xUdVpKUnBLV0hpUnFpRkZMcmxoYXcwZ1MydnNzckloTElsc05UQ0lkL3l0Vng2c1pRdHdXVmhwdGlRWXA0eE1MVE01U1BoTTBldVRQTWhsdXpDTDhtU1NHTXFRQy9SNUFzbGxZR3pNcml5SjRRMEpncU1tSlJ1RmdhVDNYQW5GcGhwbFZPcXN3VGJWRW82WDZORFU1WmhtSU9wWmhmWjJSTjd2aWFmOFBqaEZwdzRsbkN5RXFFOWNXWnpHUHFPWUdZQm9FSzg1d3JPQ1JLSFp2K0dvOFVZM3hqYW1CeU5xZ0NpUE5rbmMvcnBqbXh1RWk4U05ha0p6TmVUWG42SG5zaUlhUmhJYWhWTmFoU2xMeGtBRm5WRFJubGVBYWhJc2FnNkNacTkvWlRQSFRZTkEwMlZVazZabmdDcExUSG9keExnRG9YV0VpOWV2U2RUWHpSVTVsenpHUEc3Q1RKZG9sUmpjaFVyTHYwT1JvMGgxREpRMUNwVnRhb0p4aG1RUmpaSWo4aFFxUmNVZ0wyZStGU2pjeldzaGRxb1V6RHcxU050TmVZdUMrcWh1UUp5QzFqZGlVajFXb0twdXFTdUhuS2lYelg0bHJpYU5MTWVNYTE4bmxxTXNHSUJzUFRqN0NTcG1TSTlhclVMbmtXS2E5VVpBRGZLNkM0TExOQmJCTXZaeWU1a3RDa2liR1Nya0ZpcUNyU1F1UVdKVWExNlY2VWMxcVQvYjZXcWJGbkEwcEp1OTROWG1hNU1IK3NRMEg2WEJORmw1SGxUb0VXeXFOYWtzQTNqZXRmcGxyek85Nnd2QWNCOHIvcVczV3AwclFGNXIxN1QrNUswN2pjQ3FIVklXYTJLVTU0MDlyejRaZXVCU2REY3BBallwQVIyaUg5TldsMmsySGUrMmJYY2hFZlFYUitPT0FJZGx1NkpJMERlaGhoNHdpQUZ5QUNlKzhuMnFtYkJKdTJ0VWw1ODRMSHk1TUx3dFlwNDc1bmdKTkg0a3kzK2huNVBuT0dXREZtalRRYkljdS9aNEozYzlydmZ0TzZJV1R1V0RadTB5ZzVaOG9SVHpKTXBtelRDSURGekxpc2MwU096TXNiL2VISXVrd3dRSU10VXgwaVo4WVFKRzlBVmk2REliQnV4ajNjaVo0MlNHWnNUQnJSSHJyemVRVHZFbytxRS83Tkh2R3hWQUh0dHdtQ1dzSjlGZ09lZThQaTdYSjRnamptcmFIaGNWcWFIZm9tZDlacnFoa0NhbFd4MnNKdU5TZWVsSExqVzhUajFmQ1g5RGtacmxNL2MyWFFKbExKcVNUcmFKZGRkYjVhUlV1ZzFsdG9odnA3dnM5MHg2ay95V3NQQ0prR3JBU0xtNzJZYW1Oa21BWm9YdmQ1UVg4Vzg0VDUybmRlNzdUU0htd1RYL2theVlXM3Boeng0MDBwNU5SN0gvZU4zajZEVE94bkFlWUd0bWxuL05DblJaaVZQa2FMclJKdm51OVB1cTc5SllGeVFGRHVLNmxieHhFWFE3bmcwZTRYZkJrbFUzOTN4aEc0M3loK1o5NFF6SGcrRGI2L2tEMG00b1BNczIxanpoTkx6WmZrN1JuNVBmcjl5NHlVb2JFTmsza1dDWXdYZFFCZDZRUDgrZmMrRjkwVE4rMVg2dXEwYWNSbTdYSzhXMXF2T0gwTGNkd05jMVF6bUlORHhtUlNjUXhEbHFSMDcyWFdMYXJHcmZRUlY1NGJaMDJmenByNGQ3bVhuY0czdVRvSzRLMlB1elRNNlZocWViYjhuUTkvMnd6VThrTXQzdzh2ajRJamtlOTlwTGxhM0VGM1lqcWZyUGVON0ZjQTd2Q2NDVnlmYUh3TDFGV2UrR0tIUFpjV1JjdSszbjc0WWlKOWQzVjlDZUgrL25oaWU5eHZNSGNKNHlmODU3NndjUGJaOXYvYWU1RDVzcS9jMDhVRUovRUxPdmlXYlhYNEVsczBUbFRkUDhlKzRlTGlsL2cvdHU4M0djSkgrQ2JnZkQrK0hiZXVaRkw4SnlBK1ByZzh3NUIrNWZOS1hpTWZuZ3dUcDZvOEEraHUyN3ozbTN3VDcxdzNkaGtQLzRFZGIvMGNDQVdockF4VjVCeWh1U1JGN09nTi81TmFBMnRaOEhtUnVWaEZjRkpoOGlJWkR1OWNRcFFkMHR3Y0I3bWM2QldnVnJaZC9JeWgvT3BPQS8xQjd4TWQrNzVCNkE4UjVxa1NCS0NDRDcxQnRIV04vSUhGOEd4ZHYzbUI5TE9Oekx4R0NiK2VDeW1CK3NIS0NTaEY5T0RnQ0g4aC85aU9FVXhlRnVpUWg5aU9CRDlGN1dQaDdEN2c5UHZnUlFEaDJBYUNEN2dDRDhZSjk3c0NDMGxkdkZkVThCSUNHQVlGL1h6Z0NTdWdUelNOOERjR0VrbWVFcmpZN1V3Z1FIM2FISk1DRjc2Q0dueUo0NFdXSTZwQWdwcE9IdmVhSUtrQ0gzcUJuZm1PRFNhR0JsQWh2V3VZMlkwZzZuWmdDZ0JnUVNEZ2tiS2hrVnlkNWlPZ08vd1BJTWlQSURSK1hmOVNuV0VVRFQ4azBpaXNBaDNGWU5JTUlFR1VvZlU0bkpVWGpoRXB4aXYvSGdSNHhpeWtpaWE2NGlzc1hZc3JYTWIvWWZicllBcnlZTWp3b0l5V21YZGZJQXNPWWRnSGpqRjMxalN6UWlpRVJNTXE0RTB4bmpsWmlpZkltTHQyNGlkdm9pRmJvRGUxWUplRzRFMzRZaGRXNEZQVllJWnFZRklYb2ppY2dqVThISzZIb0VVUjRqWHo0akoreWp5L2hocU9ZaXNqUWorb3hrSGtHZ1owWWk4U1FnakV5ajBsUmdnWlpBdG1ZZldOQ2pxcFlrakJRaXMwRWpjT3hqb1RHa2pEZ2thN1NKQ0pKZnpRSkF3OEprVVJ5ajhDNGt6RHdqOTJBa2NOQmxQQ0FqTHJJaUxLMkl3ZzVRVEJwaUNxSkRFb3BIRUQ1Z3Y5Q0tRTWFtVGdCT1ZFaGxKVXowSlB1a0k4RVlwTi9CNVl5Z0pSeWh5SVlpQlZraVpZb3dKUTh3WE1EWXBGSzFwVTdhWmNYNlNGYmlSUkc2WTVtQ1FFZ0NSNDU2V0ZSZVkxVGlReHZDUjVYK1E4TkNaY2kwSmRPeGlCcU9ZbVFXUU5pNlpQN0VaaklZSWVYNlFMb0dBK0xPUndMK1JGL3VaT1o2UTZQbVJtSjZRMkQrWmtxRUpvd2NaaFFVWm52d0l5WG1acmZNSnF1d1puSVFKR3dLUUt5Q1ErcnlSY0tvSnNRd1pIQkdRSElLWUI0bVJhdDZRMVZlWm5EYVpuTjRaTDVSWnRDMlp4RjJSelZHUkNLdUp6OFJSYkYyUld5UkJiQUtaNElTQlkxNHhxNEdIREtxWjRpVUl1OHBKMElJWkU5Y1pyQnFaZkt3SnRxZ1owdlVaRC84a2tEcGRrUTRma1UzeGtRd1NpZk11a1N1R2tTVDBrVy9qbWdMeENkT1JXZk1IU1Nja1NoUFJDaFQ0aWhGWUVoVzhTaFBtQ2IzYUJNNXFtaEUwaWlYOEdkM29DaVVIR2MwR09mNHVtYnhRQ2pRL0dlUGZHZ0xGb0NBUG9SRTFvU09zb1RRZHFqTDlDV1Z6R2R4dE9ZemZTY1JqcWU4Rk5GVE5vUTVmbWtLdkNqSDZHa3VSQkRncUdsVnNwcEx2b05PSW9RWEJvWUF2cWxPWENlOUVPam5xQ21iOEdKYU1vRERib1R0ME1UNFVNWitobW5JNENmbWdXaXBaQ2dNYWVuUTFDZ1VzS2pvb0NsUEhHbWdxb0RIdG8vQ0JFQS9CbVVpem9FYzFwbUJsR21pbkdna3dvRGZEcVhUc29KZ09vUlJicXBNekNrK2JXZ2xRQ3BTTU9tLzVOYW1OTkJEVXhqTlg1S3FpdGdvOHBRcDd0Z29nOVJwYlFLQTZFcVkzbXFDQWt3cFNDaHFiMDZBNUVLRDdocUN2bFNPTWVxQkoyYVo4RTZDTEdhR2tMeXJFaGdxalUxcTllUnJBNHhwdGpLUFNxYU9JTERDV2RERzBvU3JrdmdxdHpCcTRLUU5iN1JudXFLQkc2S1FaL0tCd3dRcHJNMHIwMGdtVzdoR0pNQU5NZGhxUHdhQTcvcUVTSGpDQWtRclhoQnNBVnJzTFJoRy9mNkJnS0xITlA2c0ZMa0d3TndHNGZBQU1RNmtoZ2JCUWNMRXVZeXNmOEVyOXBCa2lGYkJDUGJFZy9nc0Y5QUFBWXdybVRocFNzN0F5M2JFZ2pBc1hqZ0MrOWhzemVMczlwUkFPNmFSVE5ySDBBYnRFS2JNTFhpQmpKTHMzbWhza3FMQkRucllQOU5ld2I3b0s4Wk5iVldjRUhWWWdBd0d3UUtjQUFQQUkrZWNiRmNTd1AxaWh5amNpeGFvQkZhMjdCcG13VnJLeDJqSWdDMllMSXhvQStvWXJhcDhUaHpld1dZK2g4SUVDbEVzQXB4OGd0K0c2L2NHcmc5Y0R3YkVnemlFQ21zNEZHQTBnclk4QXRRR3gzTDZyaGE0SzJmSVF5aU83cWlHeVhLY0syZXl3V1ZhcnFzTzZxcDJ3UUd3cnF5K3cxbys3bzhJS0t6bTd2SEFMaTI2d1ZXcEx1eXV5cTlPd2FyQzd3UWtyVERPd1IzYXJ4SUVyYkphd1NReTd3MklyelBld2JuS3Iwa1VxN1Zld2JEaXIwYjBoM2J5d1lINDcwUWdycmh1d2JQUWI3M3didm55d2FJcXI2QlVUenRHd2U0QzcvSUFiN3pTd2ZYYTcrem9iMzVLd2YvQ2dDNi9Cc1BuUE8vZHVDeEEwd1pjMlBBZkNBZUNldzR0Y3ZBV0hBd20vdkEzZ0N3RXZ3SENtSEJWeUVBZXB2Qk4zRzBITHdUR0F6Q2hMREJJL3dSNXNLcUpod0dBYkFSS1J3UXEvSEJMU3krQi9DeHdMdXpORnpEYjhBQURBdS9oTUhEa3BBQUloekR4ZkFBUlN2RWZVQzJNYXdWTzZ6RWVhQUFEanpBVEpIRVVFd0lDUUREM2dzcERNRENWMXd4UlR5N01YRUFYdnpGZjVERmNUc2JJbUhGWml3Sk9CSEdJMklzamR2R0NlRUFCVkRCZ2xFQVYwdkhCMkVOV3J3cnBJS3FmRXdLZ0pLNGl4dFVoZnNNWlR6SW9aQUFsZklBQmFBdGpORU1hV0lMakJ3Wmw4c0tyNUFOWDBLNm5peTZDK0FsQlpBbWVNc0tsM3pLcUp6S0pLcTh5cXpjeXE3OHlyQWN5N0k4eTdSY3k3Wjh5N2ljeTdxOHk3emN5Nzc4eXlnU0FnQWgrUVFKQkFBUkFDd0FBQUFBbEFKbUFRQUYvMkFram1ScG5taXFybXpydm5Bc3ozUnQzM2l1NzN6di84Q2djRWdzR28vSXBITEpiRHFmMEtoMFNxMWFyOWlzZHN2dGVyL2dzSGhNTHB2UDZMUjZ6VzY3My9DNGZFNnYyKy80dkg3UDcvdi9nSUdDZzRTRmhvZUlpWXFMakkyT2o1Q1JrcE9VbFphWG1KbWFtNXlkbnArZ29hS2pwS1dtcDZockNnU3NCQTRDc0xHeXM3TU1yYW00T0FtdHRMMit0cXdKdWNNdHJBY0ZCUVBLQXhETnpzL1EwZExOeXdBRkFnVEUyaUlKeHdqTDArSGl6c3NEQ0FVR3JBcmJwTjBDQnNuTTQvUDA0ZWJYQjluc29Ba01BZzhMNU5VYlNIREFnZ2NDSE9qYlY4bFZnMlFFSTBxY2RrOUFQb2FUK3YwTE9MRmpSNE1HRkdKY3BJQ0JBWTRlVS8rcUpJY0E0Y0tSaFFnMFFMbXk1a1J6RHhpc2d3bEl3VU9CTm9PcU5DaEFHTTgrQ2c0OEFDQzBxVWVRTDQvU0NjQ2d3VGVuV0dzaU1NQkFxcDJxQ0xLSzlRamdnWU1BWHQ4RWNMQjByTnVWWmFPbVRhUDByZDJQQzRyT1BSUGdHTkM3Z0NVQ09MdlhqRW1tZ1JOSFJLQzM4SmNEQmhSTC9wak84WmNFVmlkckpwaDNwMlVyTWhGdkhqMFFBZUhQVmhRNENFdTY5YndCT2RHaWZ0S1h0ZXZicnl2UHB1MFh0Mjl4QTNUdlJ1SlQ5Ty9qMDB6TEhuNkV3WU8veUtNN1c5Q1YrUkFHQmFScnB5amMrby9pMjhORFUrNjl4d0hiNHRNM0kxOWVCNEhuNnVOREdDREFjM3NhQXRETFZ6K2dnZjM3TVdDMzM0Q3cvUWNnQy9rTnFHRC9Nd1lZZUdBS0JDeXdvSUxCT2ZnZ0NhdE5PR0dGRjBLWW5ZWUxjdGdoQ1FjWUI2S0NBRFN3M0lnSmZIamlodldOR09HTEx3SWd3SW9BS2hBWmpTY0NnR041TGZMSUl3SUhIQmlBQUVMVytDTnphNW1ZSklnRkdPVWRBL285cWFBQUFCSlFwWlVucXNpY0FoSnlxU0VDOXdYd2dKaFdJbEFkYWcyZ0NhSmN1em5ncEpzMFBtRGhVUVRNU2FkNkJaUUg1cDVpRHJaWEFHMENTdUdkampsZ3FKc0ZMTWtRQTNvdUdsNEQxdjBwcVpzTzhFVG9wUVA2eUZ5Sm5OSlpBS0twSkJCbXFQRVZ1WnVacU80SndKcmFLTnBxZkFzTWw4Q1dzMXFKSlRFQnVKaXJlSER1SlVDa3Z5YTVBS21nNUZsc2VnL00xdXV5aHI2YWlxelFiZ2NBLzdJd0pVQnN0VS91U2dxcjNHN25yV09RaHJ0b282TllhbTUwQ0RncVZhSHJHb29BdHBSb0c2OTBxaGIyN0wyTFN1dkpBZnhHMTZkajZuSjV6elcrSkN3QU12RkFKMmErbXNBTHFESUxvS053THcvRjQxcXdQTmxMSThVR0pNU0t1elN3NGc5QWFCcXd5WmxvRG9CTUEvbElpY01xL3Z3RGdNTmpxVnhZdVNCdUpaSVNBYmhpd0ZWSlBrQnlJd0djbXFRNUJzaHNSRWtMditYcFhnQnY2Qks5UmhBZ0FFMG5MbkMwSWtrTENkTFBVQkFBMmJZZWplc1ZrZ1FXUUhZV1ZNMkVzM3pIWm9UcmZpMjlmVVZTRDl3dEVabDdTWndlQWcwUThQVVZWRUUwSVFCT00rTHhnZ0FZY0FEV1ZDVGdnTklkd1NyVmp1SVo1RURqWlVER2RmOThqRC95T041Y3FWR1NBV2hMTTNCYUxJYzNHT1ZockVVMDZSd1RjcnA2TnRMK1JWKyt2dVo3S3JGTEY3bm1jdmcwZDNRQTVCN0k3cktuWG9kcW1FOURhVnFjUjdkQXBuc29JTUR5eUlFdUNQVGFFY2tIQWF5SE0vWG0wZ1huZkIxSCt2MWI2WWFRanh4czc5T2gycGJjczMrL2w0UVFrSGpvTndqN3pTOUdoRGlBMG1ybGxlemhwaitITzEvd21DZStQUmdRTnphSzRCNjAxSXo4RGNPQnJnbU9CdjFBZ0FrZWg0QitDSnQyTXRpSUEvU1BKeUJzemFnaVVVSnJWZEFPS21UZWpVYVVCN2JoaGpvTnFaNXZ2T2FIR042R1BpUGtJVjE4WTZOTW5FYzZSTnlERVYzVElDWG1vV3EzbWFFbWp0UzZ5VVFSRDFNa1RRRThhTVgvTlNqTE5lYnpoQUpNU01VcklrZFFaY1REQlJNRFFGRHc3RGM2cXdNV2ZXTzBPT0loaDZQeDF5akE5WnNYeG9FQUowU2VIK2NnUk1sbzBSUjN4QTBaeWFDQUxnYW1qNHU4UXhnQk13QkRtb0tRdDdsV0hBRFpHa0Ztc2c0KzNNd0Nia2lLU0xhR2dXOG9YbXN3ZWNvNklKSTB0T1FWR3pXak5qVlFxNVFRcStVY0tobElUMm9qbGEyWlpCY1NBTDdBckZLWU9Hd2tZSnJIa3pPV2NuaFlDSUQ4QW1PQUpFS3pESnQ4eXhkaFFzck5ORXNOc3R5TU1iLzVoajFLcHB0ekNTZGcxaGtHZDJyR2xPeU13eHpkUWsrWS9ISXpBMkFsRjRoSkdnUUlOSjlwa0tiVWdqa1hWMDdtZFdUWXBUTzlpVkF4Q0M0d0JwM05QdC9DVUREOC8zTXl1YXpvR3hpZ21YRitwbUNLZ2VVWUNMcVpQSW9VRGl4TmpFdFhwVkMzS0xNS05iWExURi9xQm9ubXJEM2x0QXRFeFlETWQvSlVEdmE4eTA2WmxFNjNEQUNiVVdEbWFEcDZWRFVFd0pKQzZlZHc1Qm1VNjVHaHFZR2hhbFhUQUZhM2lOVTdYSVVMUmFWQTBzMmNkYXlHa1V3dkQ1VFRtbWhWQzFmZGpGZmh5b2E4SnVhdDVRbXFVQUJIaG90eWs2OXZTR3RRNW5vaHdkcEVrVjY0NVdTV2l0Z3pTQll3bE8yUVg1MHkxRERVTlN2bnJDd2JQaHVVekxJSXEvVUlhQmsrQ2hpVGl2WU1yQjJMU2hkNVdadVlkZ3ViVFV5N1hydUczSXB6cmVWSktsbUFDNFd5dWdXRnZEMkRZY1d5UG1FdWR5S003VUp0QTNQVDVHSkJBZitCVVcwK0ZSdU8zWktCdEUyNXEzVzk0Tk9tQURhT2poM0llYkVnM0xmY2RyeVJEY3hlOHhsVGlYVDJkNmkxaVd2aEs0YnlCdVcrN0p3dVFhb3JoYUxhUlpUOE5ZT0FzOUpja1JxWUh1K0ZXMzVyQXRrRWZ3RzhLam1vTURFTUFRU1B3YmhpbWErRnc3QmdySWo0cGZXZFIzUzVVR0xaanRnTTI5UnZaZHNyalFhREFjUlkwZTZMeGRCaW9UeFZ0R2xkN3hWNm5KVVY3MWdML3JYcmE3VkpqOW1HSWNaTmNmS1JwWHNYQUk4MUFmUWdjQlJpT3hZZFQva0xTVmFKaDEvNzNHYUVWZ3krdGN1SnY2d0ZMTnZGeUZWTk16bWdDb1VIajhXN2JQWUNkenRDV091MlZScHI3b0lDbXVrVUxlY1phQk9XU0lVcjIxUWJmMkhQSzRuLzhLR2x3R1doV0ZtMGFSWXZGb2pzRkVkUCtncFFUc21QTFl6TVB2ZFhNWEQrZEJRNHZaSlVJNWJKempEMEUvN2NXbFYzQWRJUjhiU2ZuWEZwTG9RNktMSzJOUkVDWUJjaFZ6WTdYcTZuWWdJdGJFcS94ZFFqSHJTa0VaZG9qK0M1MmFEbUtMYTlZR2V4TEhyYlRuRHpuY0U5MEdwM3BOZmtaa0taYldMc2RDc0IxMCtoczd0LzhPdUpRSHZlVXBCcVlGeU43eUxRT2l1YTdqY1N3bXlUYXd1OENldUd5OEdwd0dxaEJIdmhPREEzUGZnTjhTSFVleVZucnJnU0d1NFJlV3NjQnpUR2lxNC9Qb1NFcTJUYUpQZUJuTWRDOFpUdjRPSVJlYmpMWmRCdHJCaDg1a01RZDFha2pITWhwTmltUFQ5Q3pWZlM3cURiQU40ZHlialIvNFBBNFlJUWQra3UwUGRkeGd6MUh4QjdMRXF2ZWc4SVhwT1dhejFBWnYwNkVEaXVsYWVMUFFWSW53Y0F6azd2djdLOTdXSkIrZHRaRUhMT3pyMEgyQjNMdCsvdUFsZ0RSdVo4ajBEZFU3TDJ3TjlnNkUyUnUrRlRZSEtQS0g3eEkxZzVnODBPK2FhckYvSTBTTHRFdkk3NUVsdzlLd09nL053SGpWSFJHNTdzRVVGMzUwM0FkYUt2M2dhSVQ5dnJYNEI2bGFoKzlpaG9QVUUwUEh2TGV3VHdpNWU0T0FxUCt4VU1YaWlQTC83bnNaTDE0cFBBN3dmMmVPZHJQNUNBcno3MmkzWCtETEEvRWQ1M1h2SWlOejNrTlc4UDdhTTlNZFkzdndoOFA0L2JyNTcwZ0xtMytsZkE4dm1YUVBjcDJidjlSNUQzckJUOTlJbmhmdnRIZmYvMUlIMW54MzRUQVh5WXgzMjV0bjhpY0h5bDVZQXYwSGdUSVlDTEIzMXZNV29TeUFMNE4zRU95SUNSdG9FdWdJRGlvSCtZQjM2ZEpuNnJOeGJlWjNnVWFCT2NOMy9MMXhRRHNIL3dOM1VxT0gxaVlZR0JoMlBoSllJdVFJRHowSHl6SjRUMkJvUXVVR2txRVlOdjE0RWQ4WC83QjRLWHAzNFFLR05JMkFKU1dBOEtHSFF3bDM5WDJBSk9PQTQ1aUhOWjZCRTh1SUZoV0g3bWg0S0Y5b1ZndUhQcTk0STFrWHdTU0dnVmFINDNhQmNhNklZcVlJY1NRWVNZNTRQSXg0Y3Q0SWNSd1lSYVo0UVNFWHFFeUFKaWdZaFZsNFlSd1d5TkdBRXpLQlNRdUhSVldCTWpWNG1LR0E1Ym1ISmRLSHVWcUFLZk9BMmgrSEZsMkJHZDZJbi9ZcEdLRmNlR1AxaUtwdmlLdUxlS0UwRjh0SWdDcHlnTnNMaHdlV2dYNmVlR3ZSZ05MYWgxNUVjUThyZUxJMUNNejFDRHIrZU05QUNGVnlpTjFEQjdra2dRWjBpTW9QZDYvMllYditoODFqZ2ZyemVLSFVHSFh6aU8wSWg1U3BpQ3pNZ0M0d2dCeHhoMHNwaFY3d2lQdGdoNXVQZzM5NGlQV1JHTzdtYU9DZGlQS3hDUEFFbHU3ZGdVZ0VpUUVXQ1FGeWg4QkVGMURGa0MvZWNVSnJoMHlUZ1FtY2lIaGtnUUd3bHhVbWNYeXppUkk5Q1JHbWw0MlRnUUY5bVBKbGtQbEFoMW03Z1MyN2lMTFVrUE02bHg5V2dUZTBpU3VaY1ZOMWx4Y3RocVBNbUJESFozSVNrMVk0aUVLUWtONjhoMlN6bU5ROGtDUVRrUTgxaHhNV2w3LzFHSklQa29kaGpvVkZWNWp3blpFUi9wYnZzWUVlajRqdkg0a2k1M2xNZVZsT200ZzJmM2xQTXdqQ1JaazY4aGR0L29GanlYbFNkZ2wvTmdnTnVXa3paeGtFaElndUd3a2dzM2xTbHhsZ1FwbDg0d2xzM0dsbU1oa1h5WkFtVTVEVDlKYm9icGtaWDVBbUdaaXpDcFc1MUpleXhvZElKWkU0VDVoUUhnbCtOQWwrbVdrZldRbVNRSmtkUEFtTUpHQUt3WkVUczVtaXZnbU0yZ2l5NG5rSnZIbXpDZ21QWHdsYzEybWFYaGxydDRsZFUzYzhHb2JjUkptbkRwY3I0WkRySVpsYmxwRDh5WllIblpaY2habVpzNURZalpiS2U1RW1vNW5TVmduQkJHY3JCSkQ2Mm9uaVhnblBVQW5BY1hqK0ZBamJ4WmtWaFJucCtXWGxpeGwvL3lxUUswV1pzVnA1d0RrWnJNS0lpc0NKTGJTUkMyT1pxZitZUUxkNTNURUo4RGFnSTZ4M3dIaDZEMUFKbWRXYURTc0p2ZzluUGpscUUwd0tCaTJXOFdpb29vU2dQMFdROGphV3NUYWhNTCthSXBFSjFONFo4dlpxSmlRYUk0MmdMak9RMDNlbWdxQ29OQmloOU9CWml2OVoxMzFwMVp1YUZZRWFGTEpxTDF3S05KR2dIQ09RNFl1bU5IV2hQWmlhTHZLUTBnQ2xkTytxUGhHYVQ0K1p0UVNsOVdTZy9wbWFVcDhLYlJVS1pIMWFJMTFxYWR5WjcxcWFmQ1ZLUHNKcWMzc0tiTllLY1Y1YVBWS2FnMnNLVmM2cWVaTktRSnFxaUg5MmFINXFIMVFLVlpxcU5OMGFXdkphVUg1cWk4aWFjUWdLa0lCYW4xNEpxU1dnSm5HaFQvUUFwZmxrb1BNNXFxTDhDbzQxQ2tva1dvTGlxck9QQ3F2dmhpWFdrWHRxcXJLNkNwVWZaaVl3cWZUSnFxeDBxbUZyYXFqeWlzN29HRC9JV29ZbkZ6MEVvRG9nb0J3Y3BUcG5xbDE2b0R6aG9VK2lsTXZOcCszL3B5MHNwYnVEcWl5UXF0TVJvUjI4cE81NG1rNTRxdWQ0R2xtWlN0MGNDcDlXcDgwd1NxczFHdTh6Q3UvVm9DdERxRWlMV3VybE93UFBDdUVZR3ZTcVFBQjFzUWFjcXdKREN4dzlldTdhR3YwVUNxRE91dzJsaFZmRXA0QUN1cEdDc09oam9jSU9zUnFHcXhFSklZRUFzZ0crV1RMdnNESEl0Y3dnU2c0Rm16UHNDZnY1VlBYNHFKUFBzRHl4b084Zm9nSTVzUzFqcTBOekN2S2RHeTFyR3l2OGUwUHdDby82NTNTcDU2U1ZRTEJCemJZUlZyR2RUYWxsdjdBMWs3bVYrN0Y3Y3lWV01MQkFJN0RmdjFJRE9icUd2YkE3K3FseVY3Q2hJYlNIZGJzQXI3REc4YldOMGFFUVE3dHlxUXRIK29XWUZMRUVkTHVEQlF0Mjdoc2R1Z3MxS2pzWXpiakNBRklKTDdGakZidVN0Z3VCSUJ1YmlBVXBQRnVVUGd1SFpiS1ltcmpIdkx0SEViWmF0ckNhMkxwcVJiQkZhclgyZDdDdFkwR2lrN3V5VVF0RGFCczJraHRUTEp1MGJndEp3NHVLWGd1U3V4dE1UckEyVjdGMUQ3TFVVN2tNMXJCTFViZ1ZJaHV1cFV2VWpndTBGUk56QWh2RFd4dU54YkE1bkxYQXE2Q0FFd3ZSUHh0K1g3SFhRNmlmc3dJeGgwdSs5YkRLOWt2NUhRdHBsenYwb2d2djhmc2J1SllDckhFYjMrT3dQc094RFBkQXJmY3h5Z2U4QXM0TDAwS01DQ1FMKy9nUzRRRERTcEd4RUwvQW5ycXoydjY3L0c2eFFRNUFuRHdpNlVtOEV1RUxZWXRibUM4RVFVcE1KUEVMdHY4VWlVUUNYYWtXd3l2QVRodW13cExBYzF0QjNJdThNM0FNQTFVY0tPa0FBU0hGWkVMQVZHeklrSWxBaEJIQjRVM01RdjhNUkh2RU9Hd0FBYjNCUnhhc1ZGZ01XY1dFV0JVQnZ4OGNWZ0hNYmI4UUJEUEFib0U3OC9sY1pWSU1aQndSZ2huQVRITUNBUExNYzJRTWVXNXNKdGxqNTZ6TWZzeFR1RjR3WnZQQ0ZvVE1oSTRNZWRkc2huWUJJbmkycU1yQVVPRlQxdFhBUjg4NkN0VWNXVmJBTTBmRVJ1bzc4OEFCWkNrc21mVExiL2NNeEoxMkFMUDl3Q0pTRTNTWUpQcVh4ZFhheGJMa0VFcS9BUHlNREpiMFRLdFd4MVhjdEo5K0FTd2RDNHJhQTE4RkFBcTN3Y0hSek10MllvNVRETjFPekxDNExCMFB3RjF4c3dDa0srMmZ3RW9NTE5idUxKMyt5OGt5ek9ya0hMNWZ3N1M0ek95QUcrNjd4YTdrd2pleHpQUjVDNzh6d2dxR3pQVExBditVdzNyOHpQU1hEQy81d2VkU1RRYWtEQUJWMCtnSXpRVkhBa0N5MHdkK3pRWTNmT0VaMkxEVTNSV0tDOEYrMFJJYVhSY0pDMkhTMFphZ0xTZUVEUUkzMFhCMjNTMDVQQUtXM0RMSTBIWEp6U1daRkdNZDBIY2tMVFFkRkVOdzBJWEtUVEt1RWZQVDBJUGdIVTBCWFFRNDFtZ216VTR5RFVTWTBJUmMzVU5RWlB6RSt0dnBraDFSM20xRldOTkFwazFJeUIxRnZ0QnM2UjB1d1Ixdld5MVBtY0UyYTlDWFdCenFZQjFtdU5CNnJSekNjU0hCa2QxL1Z6MWNzQ0d3d3cwWGhkQjRjeEsyVnhBSDc5MTNtQUdSYk5MdEpqMk96UUYyaTlOTnNEekl5TkNhckJ6RFJTQUpBODJZWFJEWHJOTzI2VHZwcmRDVUhEeTlhc2t5MkJEWVVkMnB1d0M3eDhPM2N4QU5ZUU1yYWcyam1ieksrd3pOV2MyOU5jTVF3VE1nSUFETFFkM01JOTNNUmQzTVo5M01pZDNNcTkzTXpkM003OTNOQWQzZEk5M2RSZDNkWjkzZGlkM1lRWUFnQWgrUVFKQkFBUkFDd0FBQUFBbEFKbUFRQUYvMkFram1ScG5taXFybXpydm5Bc3ozUnQzM2l1NzN6di84Q2djRWdzR28vSXBITEpiRHFmMEtoMFNxMWFyOWlzZHN2dGVyL2dzSGhNTHB2UDZMUjZ6VzY3My9DNGZFNnYyKy80dkg3UDcvdi9nSUdDZzRTRmhvZUlpWXFMakkyT2o1Q1JrcE9VbFphWG1KbWFtNXlkbnArZ29hS2pwS1dtcDZockNnU3NCQTRDc0xHeXM3TU1yYW00T0FtdHRMMit0cXdKdWNNdHJBY0ZCUVBLQXhETnpzL1EwZExOeXdBRkFnVEUyaUlKeHdqTDArSGl6c3NEQ0FVR3JBcmJwTjBDQnNuTTQvUDA0ZWJYQjluc29Ba01BZzhMNU5VYlNIREFnZ2NDSE9qYlY4bFZnMlFFSTBxY2RrOUFQb2FUK3YwTE9MRmpSNE1HRkdKY3BJQ0JBWTRlVS8rcUpJY0E0Y0tSaFFnMFFMbXk1a1J6RHhpc2d3bEl3VU9CTm9PcU5DaEFHTTgrQ2c0OEFDQzBxVWVRTDQvU0NjQ2d3VGVuV0dzaU1NQkFxcDJxQ0xLSzlRakF3SUdkWHRzRWNMQjByTnVWQUI1RVRadEc2ZHU3SDYraHBVc213REdnZUFOTEJPQWdBRjh6SnBrS1hod1JnWU85aDdrY01NQzQ4c2Qwa2I4a3NHcTVNOEVDaFROamthbllzK21CamcyTHRxTEFRZGpUc09tWlhSM0Y3K3ZZdU9jTndFejdpVitJdVlPSEF5QUFjdThpUGtzTFh6NHQ5ZkVrREI0QVprN2RHZS9uUWhnVXFNNmQ0blhzUDVKM0h3OE53UUhWNEhjY3VFMitmVFBuNlhVUWtPNitQZ1RpNk9QVEVNRGV2dnNCRFJpbjN3dmErV2RnV2ZrTjJBTC9md1kyMkl3QkFpcUlBZ0VMT05nZ2doS3U0SnFGRnU0V1lZWVJFTEFkaHc0QzBFQ0NJQjZnSElrWG5nZ2lDUW1NeUNLSEFxQ29INFV6em9nZmlBcFFsaU9MamtrWTQ0OC9tcWRnQUFJUVdXUlg2YTIxb3BJa0ZtQVVlQXowQnlXSkFXSkhnSlZYc3VqaWNRcFUyQ1dSaFBVV3dBTmpYb2tBazZzMWtPYVZDOHlWbGdOUHZwbmpBeC95UkVDZGRzNzRaVnBoOWpsbW1YUUY0S2FnWFFJZ0owWU9JUHBtQVRZeXhBQ2ZqdVpvUUtUYUJGcnBtdzd3Wk9pbWJ5bzZrb3FnMmxsQW5xa2tJR2FwYWRiSXpwbXM5Z2tBbTlvMEdxdWRDMHlaU3dKYzNucWxBTm9FSUtPdmFRSnd3REFDVUVxc2tndWdDc3FleXdvS0tTckNSb3ZvLzZ5cDJHcXRySXQ2a29DeTIwSUpiQ213aG92b3NhTk1hcTZqMDRxaTZicUNOaURLb2ZBaWlvQ3psWHhicjZNTFlGcEp0ZnM2aXEwbkJ3UmNLUUM2WXZKdWwvZGM0OHZEQWlBVHozUmpvcnNKdllJcXN3QTZFUGZ5VUR5aFdueUp2amxxYkVCQ3JQZzdBeXYrQUpTbUFadWdtZVlBeURTUVQ4STJyT0xQUHdCUVRDTW02cEs0bFVoS0JPQ0tBVmNwK1lES2pBU3dxcExtR0lBekVTVkZiS2tsQlhmb0VyNUhFQ0FBVFN6MisrL1RMSUpFTkJRRVRBWXVlZTFHa3FTQk5KK2RCVlV6K1d4ZnN4bjE2bDlMY2wrUjFBTjZqNGMzSkJpM2gwQURCREI5QlZYQWxUaTFJaVNYYUJiWFZTVGdBTm50NWZxSWorUVo1TURqWTB3R2R2OTlDRDhTK2Q1Y3FWR1NBV3NIVnpvak1vOUhHT1ZpckpVMDZkMFNjcnA3eE5FT3htKzhneTVJN05XVlJlc2NQdGxObmFpUXQrNTY2blcwaGpsenpCL0NPWFVMZExxSEFnSW96NXp3Zit6ZW5aRjdFTUI2ZDY4WGNyMXd1K1Z1QjVLQkM1ZSs3czdETm9CY1BXMVlQUGg2cko4YmdJckRRNEhJTTc5QWlJOTZ4U25FQWFhSG13TDZ3WCt4QVdBaVJFUkEvdDNoZ1BKekZTSzJ0RHdMMGdHQ3A5bE5BUDlBUWZSNWNBNU9RNThHRjFFbDZwMFFEaUEwemFraVVjTDkvU0dGeFZ1aEkvUVhuSHYxNFcyNVdjRHhJSUdqNm9pdER6RzBudzRoZ2FUNkJlYUllY2hhQThkMWlmVVljWVJ0U09KcElLUXc0c1VHaW5hUVlteG1xSW4vSm1JUGkyclFvbWNLNEw1SUJBMDNDOEFEdEdKRHZrNG9ZRmpCZ1JrZXhKZ2JRblhDVU41YmpCN3BnTUhLL09rVGI4empIZmlJbTZXSlFsVzVrUmNLR2NpWWdZMmlYTUxSM2h3SXNCeExqa0tOZ2hIWkd5aTVHREthSXBHNGFlTVpGT0JFdkRqeUZLanNqQVBYQU1xM0RFQ1QxUElpYkFEZ3U5K1JzaktlUEFVbVRjUExOd0RSTTVvalJpeE5FMGM0Nk5JMHJ4d0duV0RUVERadzhqVFJKQWJBY0VORk5taHJsNkljQmdlM3lBWldFaE9YN0RnbWJGUUpoZ1FFOG9rdkhNVWRZWVBPTXVCUWx1eEV4UngzMmN1NXhVOHdsK0pKTGQwU1R5d01OQ3RnSE1rOXNibUdaMXFtbmhoaEpHTVFnRVlyU0JTZ0ZVM0ZRZDBDVVRGYy83U1NRNFRKUGkxVEFETVU4aTRkNWNrM1BUT0FnbGJCbktkQmdFdHhzYkRLZERNTXZ4eUxzVVN6VE1hVTFBeDR0RXhDMDdKTnkrU1RDb1VUakV4cGMxSzhoQk1NSzdWTU5pT1RWS1ZtMUFrTTZNeFFJMVBUeFZSekRERDF6Q0JwODlHN2pKVUxZUlVrZUJhNm1LTmFJYWR2T1N0VFd5bVVrR0locUhpUnE1bmc2cFNma2tHZGxkSHJYQzBEZ0tzbW9heGpFYXlaSENxV0FmUlRDdTQwelZPUDAxU3hQSUFMQWFCclRWTDZuSTJxUkpKa1lLeFRKZFJWdk5oMUNxSVZ5MlRUNDltT0ZMWU1XZlhNYXJHVFdXQWFsZ2l4WGN4TkpjUlhsWEIyQzdYdERHZ3p4S3ZLWEhaeG1sWEpiT1BEVnFjZ3dBeFZEWXhpOVJPQWYyTEZyZjlHYUsxS2RndWk1dGExRE5lMHpIUUhWRm1uZkZVSzRaWHVpMDRRM0w2YW9iZE9PZTU2WVpUY2xIRFhDZkN0eVhpSlcxOTd6RFFLVVgzaWJabGF5Y2YrSU1Cak9lOThTWkJlbSt4M2J2MU5DVVVYZkFMRVlrVyt2b2x3UkxaSzRRaFltQ0N2RFMxaC93c2VCSThGdXorSWJsWkMzT0VUcUZnaTkrMUNnd1dENGdGcDF5TUtWb0lDQk5QU0Zxdmd4cytZTUJueUc1VGZkaGl2WTFrdUVaQ2NGU1YzMkxzUmNUSVdQb3lWQjFPNHZYZDViaE5tUEpiaCtoZ0ZhWldJWDJ1bjRZbHcrTXZjS1BOQVlyemt3SXdaelJOS1NZMmpBTmk3RkJQT0tUQXhWbGlNQkM2dmVNQWdxck5zN0tubWlKd1d6eUlBTW95WFFHU1BrSGkrUkw3Lzh4aFNteFV2STlvRTFRME1uNHZnWjZ4WSt0SW1DUE04Mkx5RlRpY1kxQ3VJTEY1STdRUHIxaVRIcUM0QmxadXhhVEJRMmlrOWpuVUtCTDFuUUwvQTFFSnhySzVYTUZBcFh3SFlXV0Yxckpuc0ZHWHJnTmxDTWJLdU16MFBXSHZCMVVLeDlyRFRqQmNBR0FIWk5ubnp0aytRQUhyTUdRcDZ6a3F1eDQwQ1hqdkYyRGFBdGswa3pXNFV2QmdDR0E0RGx2SHk2WHFQb05FVDBiSVF5bjBYWjI5NzM4OFE5bDhuNm1zZmc5c204SjZCb3VzaGNIK25JTGZSNkhjWEZQRE9wcHdiMFJPdmg3aDVnSENzSE5yaUluaG1yYjhROG9oWW1kMml6b3FCV1pEdWNLT2NCUWlYOW1ncTJYQTR1MXNvTDVjQnRwOHk4MWlycytKaWtIZXovMi9PZ3FHVHBlY01MampUY2M2ZWoyT1ZNZHFlZW9oRzY0T1dpMlBsV2lkQmJrZitCYWZYeE9yTHpySVBBbkNYaUtOOE8rdjJLR00wSG5ZUjdQZ3VhQ2RCelZlQzlMcWZnT05CcjBMSnh5Smt2NlBBNitJSWZOUGY0bmJEZytIbkpuZDhDamorRnJEUGdPQ0VsendjWWo0V3NtcytBb2dQUitQdHpmalB1eUgwdWlsNnZTbnZsbnpid095Tk1YMGJWQjBZZy9zZDlkTHdOY2F6b25QWmUwSHBRaW04NzBsd2Q3ZU12Z1QzaHN2dzFmQndvZVRkMzdpSFJ0WmRVT2hwMkg3NVdZQjlTbHlQL2EyL3Blak45NGpxdSsrRVdjOGI2djRHT0VGNlQvckVrcC9RdW4yL0NjemZFYys3UVBzRGViNzhrUUQ1cGdoLy94R0Fmd05oV1ArWWgxQUFHQWFjSnhiNmQzUDlwMXcxMElBZWNYd0h1QVRSRnc3Y3QzL0ZKeGFLOTI5ak1RRG9ONEZCUUh0Mk5uNTFkMnNwNFcwendIWmpjWUVnYUFYQUZ4VFg1M3YwTnhFb3RudnYxb0pjRUg1YThZRk1OM2d3S0hFNmhZTmNJSUFUSVlHZlY0SE5NSDBuUUlUanNJRkNlQVF6cUJMMmQ0QTI2QlJvbElHUjk0U0x3NFFSc1lCK1YzM1NjSEx6RjRSYWVBVVE2R0JsU0FMSjkxa3hzSVllNFlScEdBUSsyR3R4S0FKVm1HMHhvSDcwWUlSMXlBTklLQTB4K0g1Z0dBMHdvSUxxeG9OOUtBT3NoeGYvbDRZbTZCSDVwSU1STVlXSmFBUXZDSEdWNkdGdVlYQm51R2ladUdXbDlJbUdtQlVzYUFLWEtCR1A5b2syb0ljMHFJci9yRGdPS05nQ2crZ01zYWlLaDZWV3F0aUpFb0V2b3hoZnRsZzBYRGdROUZhSmttaG94VEFXN1BlTE9hQ0wyNldNSGRjUnlzYU1BNUdLeXZnQ2MrZ1VsbGVIcHhnUnBUZ0NGVGdBMVhnRWZ4Z055WWlEMGtoeExmQ0s0VUNKNFpnRGk2aDIxVmlNQk5FQ1l4R0k3UmdEMjZnU1loaUh2ZWdVN29PRlRjR0g5NmdDOHVnUjdGaUh3VGdOeTFXUTlFQ0NBM2tDNmtnUVh0aDlTRWhxNXpnUHRmaVFQQkNGS1FHSE9MaDNIdEdOYmpnUkI2bVJoWmlROUtCdzdjaVE4ekNGK1ZnUDltaVN1NGFMQS9tTUVnR09LaENSWVNpVE8zQ05UWkdOcmpnV0t6QVcxTWlURVRDU05oR1RXdmlJcllnQy9SZ1VPR21VTi9DT2xZZUk3M2VSLy9QUUxTd3BEaVVwbFNuQWxKc2xrMXNwRGpFMmx0UFFqVjY1QW1hSkdqeFpnRXVIQWlBNUVVcnBsUzhaZ1VacGs5dzRrMDJXbGpUQWtUZ21sVG9aRFo2SGxlSXdrZTJJa3ZTd2o3OVlseTJaQW93NURsYXBqSVE1aVY2SmxCRVJsYWFvYm53cEF6N3BjVjQ1bVJUaG1BYTRtVEJnbVN2aGtYMjRsdEtRQW5nNUVGMjVtVlRwRmlwcGxLb1pEWS9UbXZXQWxxUTVBbUI1bW56NWxFR3hLTGhKRDNOcGtyV3BHNUVKZ3NOcGJpZ2dGc1dwa1k4cEVYU25rY3VabGV6bG5MdkpBbjdwV3NrSmd0RVpEaUYxbk01Z21MYUltS08ybTk5cGZTY2duczFBbnA4SW1zTFluZDZKblNiQW5oRGducFhZbWRHV25SWElYZmFKbjRrSW4vLzFrSkY4S2FEUTRKOEttSjFnVnAwVFVZN2hhS0RQZ0tCWlVaVFZPSTdsb2FBZVZnNGF1cUVjMnFITDhGVHNpWmtZS2dMMktYb2ptZ1FoZXFJa2tKNnVxYUo5cHBrdWVvY241cUpkQTZNcWFwNU5TS00xaWhVaXFxQnhlWDQ2K20xaVFhR2lPSXZpNEtCQnVqSUpPcUlRT2c1OWw2UkE4SjhuaXFPRkNhV2N0cVErdWhpNmFhVTRJS1VLcXAvejVwQmNPbmxpb1pnYWFhRVJPcVpGd0tEaDhKeVpLSUp2OGFScTZnTnNxcDdaeWFMMVlLWnpXZ04xS2czVGFaTGJTWko3U2dSOUtwaTdDYVkxTVp1RCtnTjQrZ3l2V1kybTJZeUxLZ1NOU291a0NhZHVBWlNUZWdPVlNnMmsyYW5pSUpDYm1nS1JXZzlFcW9XQkttYWpLZ1QvVGRxZWFVbHRlQkYzcTlvRFB4b1JibHFHclJvT3FEbXJCQ2tXZjFxTm1LcFQ4am1wOXZtb21RaXE0WUNrdk9vQ2hRb05QZnFRTWpxYXl3b0V6UW9OWWdxQ2lIcDIweG9FZ1FrTmVscUpwZnFHMnhvRXlIcXJJQmlzWWpHTTQ3b0R1V3FzY2RpdDU3bXVCNWF1Z0xvWWNpcXZYVXFVRDVtdEt3R2cweG9BMWZvTXlpcUVhT29NN29xdnNxaUJBMGtBQVNzT2lvcXdPNENzQlBxTFZOcW1FQXNFNFVvUHA5cDl1ZG9jdzdxdHFYcWs0UmlieG5leFVkcDU0WWlzMDNDd0pzc0NEVXNOSDF0MzBjcWpHOXV5SWdDdnovQ3QyR3FrNGZDck5qc0RHVHNQdTBwK0JVdHJNYnV1SVRzY3RsaWlDdm16UUFDUVRhR3ord2RsWXFHRS8wNUxBendMQVVNN2ZCMDdEZjVxc3IwSlltLzZzcnA2dFVGUXF4SWhxcWFuc3RLZ3FXWkxBMjdwaTMzWXRZRDR0a0dRdFE4cmhBbVlGZmRxdHpnUXRnUmhyb2JIdHRMd3RUK2J0T0hRdHdlSXRpdXhwWDQ3QXlUN1hWcTR0eng2clk5TEFqajdESTZMZllCclg1Y2JCRjJidHdBNHMxalJpSityQTNIckZGdXJkZnk2RWxKN3V2ZVhxVWQ3YVoxcmtMQWJCT01vdUJaSHVyaFdzN2ZyZmNJNmdaVHJhYjk3dDIraHUreEd1TkhndHNVTHRGVUpnSXk3RW1yYnZDWEF0TTJBdkxvMnZPNUZ2VUJRc2JRNHV4Mld1ZU5ndUtkTHR4Q0F2YUJtdnRHd3V0d2JhbVQ3dmQyWHVzL2J2a0Nndk93YmErSXJzdlFMQkx5N0VxTHJlUC9xZTZIN0d3VGU2d3liaTNMVzY3VURETHA0UWI3ZFZjQm51Y0JCRUxsTlliVW9WN1MwYUxrUzdJMnI5bm45KzVZYi9BTUpmQi9nbXg3YTYxd2xYTHpLaTIrU2w3L2k4TG9oN0FJZkxMMkdGOERRd0xJeDNBSVFiTFIxTjhMUjhMODVuQU9JT3c4SGZHbXRXeFBvRzhRaXNNUE5BTU5mdHNMTG04THRPOFN3S01XSFljUFFNTDFLakFKTXpNSUkzQms0dk1VdFFNWGo0TVR6cFFCZDdLeStLOFlrME1YcXFtdFF2TDVzVEFSa3pKWDFGclFuYU1VTG5NWkpURmFlTWJCei9HdUxZY2JrbGJYakVNYUI3QUp4UEV0b1JyVzJ0TWFKVEh4ZXBjZmJVTHNyMGNlUnpNR0NVY1FLZ3NjU1Jza2hmTVFlQWNqUFVjY1NtY2xIRUwzL0thSEZoeUcvZ2NISnFGd0RjWHdma013VEoveG5zWHdFcnB5dXRZd1J4U1ZidWN4L1dBZktqMlRJalJuTVJ3Q3JBbmJHYWR5MnhDekdQdndNWjdaV0xyeUh5S3dFbml3UnNGd28xVXpFMXd5TWdTVWhqdHh0R3Z6TmFpbFZBekxPcG1YT1M1RE5FbkcvdzFCYWpBSFA3TndDeWl3WTA4d1g4bXl2ejR6SzVZVVYrZXdWL3l5YnZWelBlYVpWQmQwSkkrVVptR3pRS21ESko1alFtbURLZ3VyUVRTREtjTUhLb09ET2ZOZlAxN3pMS0ZVb0dEeStGbzF1cGtIUG1yRFBsVUhLSlowREVLMFNnek1xd2JITkxVMXkzZngxRHF3SUFURFM0eERRTlkwY3hqd1BQanNLUmRSQUV2M1Q1M3dheVlRc3kwSElTSzBlU3JRck54MFIveXo5MUR2QTA5S3cxS1hRUGN1QjBsWmRBeStkcUEwTkNFVWRIRzN6MWJVeDFkVjIxSG13MDJlRTFvSVgxUFVnUVoyUUxOVGhRM0Q5VW5KTmNVNHRDRmJVUVhsOUJRT05GNlpFQ1MxVUhiSWEyRk13dzRHUkpaSlFROVdoMFlxdEF4U2RFblRkQ0FrUTFxVTMyVmxRMlNlWVFJb0EyZHd4MXB4ZEE1NXQyVXNrQ0F5ZzFpc3gxS1hkQktkOWdsd1VDTFpSSDY3OTJyRGRIUThnMlY1Z1Buc2RGRjZOMnowUTIzeVgybk53REFZUzNNSTkzTzFSQUgydEJRbHdQc205M0dCQTNQT0dPRzdnMnhaeTI5UU5CZFlkRkNhUzB6NWdFczJjYk4wdEJqM0ZIV1hCMjArckZPOGJmK2N0Qm9NZEhISEQxakVBRmtUQzN2RTljTCt0YnYvWFlBdmwvQUlsVVRkS0VrejdEUVlxdlRjdVFUVmU4d0RJOE42bndjZ0g3Z1ZGVlRMMzRCTEJVSWl0NERYd1VBRDlyZFQyUGVGZGh5Z2V5cUcrY3RZaVhnYXFiREFOUXRNcFhnV2t3dUp2UXRvdlhnUy9MT05RWXVBMWZnYkRoT016RXRNNzdrMCtmalZCRGdjTFBlVCtvZDlGN2h1empPUkJBZVJMRGdkMjdlVHRjVWhSSGdlUVJPWGNzU1pYZmdkSW91WFVnZUpkVGdmakJPYXhvZU5qWGdjY2JlWWg2ZEZwcnN2bHplYnY4ZHh2WGdaVEx1Zjg1dVoxcm1OWWplU0Z2ZWVBc05wNHpyZEtEdWhqTUUyRFBtODBidWo2ZHVlSjNoR096ZWlKNEJPUExwY0JMdWxxSWQyVlBnNlJqdW1PUU9tYjNyWUI1ZW1UWUNoeExqREFuVTdxcGI1QWxZNEFvSzNxbVJBZGVBNGZzTTRKMGYzaFJKSVR0VDRLZG9IampuSHB1MDRJcllIcjlyRWJkQjdzcHNNWjFuSS9ES0RueUg0SGlYRXJjWEVleno0U20zSHFwckVWeDE3dGY2UTJZK0k1SWM3dGxkQWFIcDRqQllEZDRvNGQzYURzcEFNYTRwM3VsOVRnamZNL0xZRU56Zzd2M2lMdnR4T3IxbkF5dG9EdkI3ZmhyOURoSlY3aUd5TXhKeU1Bd0FEd0ROL3dEdi93RUIveEVqL3hGRi94Rm4veEdKL3hHci94SE4veEh2L3hJQi95SWoveUpGL3lXUkFDQUNINUJBa0VBQkVBTEFBQUFBQ1VBbVlCQUFYL1lDU09aR21lYUtxdWJPdStjQ3pQZEczZmVLN3ZmTy8vd0tCd1NDd2FqOGlrY3Nsc09wL1FxSFJLclZxdjJLeDJ5KzE2ditDd2VFd3VtOC9vdEhyTmJydmY4TGg4VHEvYjcvaThmcy92Ky8rQWdZS0RoSVdHaDRpSmlvdU1qWTZQa0pHU2s1U1ZscGVZbVpxYm5KMmVuNkNob3FPa3BhYW5xR3NLQkt3RURnS3dzYkt6c3d5dHFiZzRDYTIwdmI2MnJBbTV3eTJzQndVRkE4b0RFTTNPejlEUjBzM0xBQVVDQk1UYUlnbkhDTXZUNGVMT3l3TUlCUWFzQ3R1azNRSUd5Y3pqOC9UaDV0Y0gyZXlnQ1F3Q0R3dmsxUnRJY01DQ0J3SWM2TnRYeVZXRFpBUWpTcHgyVDBBK2hwUDYvUXM0c1dOSGd3WVVZbHlrZ0lFQmpoNVQvNm9raHdEaHdwR0ZDRFJBdWJMbVJITVBHS3lEQ1VqQlE0RTJnNm8wS0VBWXp6NEtEandBSUxTcFI1QXZqOUlKd0tEQk42ZFlheUl3d0VDcW5hb0lzb3IxQ01EQWdaMWUyd1J3c0hTczI1VUFIa1JObTBicDI3c2ZyNkdsU3liQU1hQjRBMHNFNENBQVh6TW1tUXBlSEJHQmc3Mkh1Und3d0xqeXgzU1J2eVN3YXJrendRS0ZNMk9ScWRpejZZR09EWXUyb3NCQjJOT3c2WmxkSGNYdjY5aTQ1dzNBVFB1Slg0aTVnNGNESUFCeTd5SStTd3RmUGkzMThTUU1IZ0JtVHQwWjcrZENHQlNvenAzaWRldy9rbmNmRHczQkFkWGdkeHk0VGI1OU0rZnBkUkNRN3I0K0JPTG80OU1Rd042Kyt3RU5HS2ZmQzlyNVoyQlorUTNZQXY5L0JqYllqQUVDS29nQ0FRczQyQ0NDRXE3Z21vVVc3aFpoaGhFUXNCMkhEZ0xRUUlJZ0hxQWNpUmVlQ0NJSkNZeklJb2NDb0tnZmhUUE9pQitJQ2xDV0k0dU9TUmpqanorYXAyQUFBaEJaWkZmcHJiV2lraVFXWUJSNERQUUhKWWtCWWtlQWxWZXk2T0p4Q2xUWUpaR0U5UmJBQTJOZWlRQ1RxeldRNXBVTHpKV1dBMCsrbWVNREgvSkVRSjEyenZobFdtSDJPV2FaZEFYZ3BxQmRBaUFuUmc0ZyttWUJOakxFQUorTzVtaEFwTm9FV3VtYkR2Qms2S1p2S2pxU2lxRGFXVUNlcVNRZ1pxbHAxc2pPbWF6MkNRQ2IyalFhcTUwTFRKbExBbHplZXFVQTJnUWdvNjlwQW5EQU1BSlFTcXlTQzZBS3lwN0xDZ29wS3NKR2krai9yS25ZYXEyc2kzcVNnTExiUWdsc0tiQ0dpK2l4bzB4cXJxUFRpcUxwdW9JMklNcWg4Q0tLZ0xPVmZGdXZvd3RnV2ttMSt6cUtyU2NIQkZ3cEFMcGk4bTZYOTF6ank4TUNJQlBQZEdPaXV3bTlnaXF6QURvUTkvSlFQS0ZhZkltK09XcHNRRUtzK0RzREsvNEFsS1lCbTZDWjVnRElOSkJQd2phczRzOC9BRkJNSXlicWtyaVZTRW9FNElvQlZ5bjVnTXFNQkxDcWt1WVlnRE1SSlVWc3FTVUZkK2dTdmtjUUlBQk5MUGI3NzlNc2drUTBGQVJNQmk1NTdVYVNwSUUwbjUwRlZUUDViRit6R2ZYcVgwdHlYNUhVQTNxUGh6Y2tHTGVIUUFNRU1IMEZWY0NWT0xVaUpKZG9GdGRWSk9BQTJlM2wrb2lQNUJua3dPTmpUQVoyLzMwSVB4TDUzbHlwVVpJQmF3ZFhPaU15ajBjWTVXS3NsVFRwM1JKeXVudkUwUTdHYjd5RExranMxWlZGNnh3KzJVMmRxSkMzN25ycWRiU0dPWFBNSDhJNWRRdDB1b2NDQWlqUG5QQi83TjZka1hzUXdIcDNyeGR5dlhDNzVXNEhrb0VMbDc3dXpzTTJnRnc5YlZnOCtIcXNueHVBaXNORGdjZ3p2MENJajNyRktjUUJwb2ViQXZyQmY3RUJZQ0pFUkVEKzNlR0E4bk1WSXJhMFBBdlNBWUtuMlUwQS8wQkI5SGx3RGs1RG53WVhVU1hxblJBT0lEVE5xU0pSd3YzOUlZWEZXNkVqOUJlY2UvWGhiYmxad1BFZ2dhUHFpSzBQTWJTZkRpR0JwUG9GNW9oNXlGb0R4M1dKOVJoeGhHMUk0bWtncEREaXhRYUtkcEJpYkdhb2lmOG1ZZytMYXRDaVp3cmd2a2dFRFRjTHdBTzBZa08rVGloZ1dNR0JHUjdFbUJ0Q2RjSlEzbHVNSHVtQXdjcjg2Uk52ek9NZCtJaWJwWWxDVmJtUkZ3b1p5SmlCamFKY3d0SGVIQWl3SEV1T1FvMkNFZGtiS0xrWU1wb2lrYmhwNHhrVTRFUzhPUElVcU95TUE5Y0F5cmNNUUpQVThpSnNBT0M3MzVHeU1wNDhCU1pOdzhzM0FORXptaU5HTEUwVFJ6am8walN2SEFhZFlOTk1ObkR5Tk5Fa0JzQndRMFUyYUd1WG9od0dCN2ZJQmxZU0U1ZnNPQ1pzVkFtR0JBVHlpUzhjeFIxaGc4NHk0RkNXN0VURkhIZlp5N25GVHpDWDRra3QzUkpQTEF3MEsyQWN5VDJ4dVlabldxYWVHR0VrWXhDQVJpdElGS0FWVGNWQjNRSlJNVnovdEpKRGhNaytMVk1BTXhUeUxoM2x5VGM5TTRDQ1ZzR2NwMEdBUzNHeHNNcDBNd3kvSEl1eFJMTk14cFRVREhpMFRFTFRzazNMNUpNS2hST01UR2x6VXJ5RUV3d3J0VXcySTVOVXBXYlVDUXpvekZBalU5UEZWSE1NTVBYTUlHbnowYnVNbFF0aEZTUjRGcnFZbzFvaHAyODVLMU5iS1pTUVlpR29lSkdybWVEcWxKK1NRWjJWMGV0Y0xRT0FxeWFockdNUnJKa2NLcFlCOUZNSzdqVE5VNC9UVkxFOGdBc0JvR3ROVXZxY2phcEVrbVJnckZNbDFGVzgySFVLb2hYTFpOUGoyWTRVdGd4WjljeHFzWk5aWUJxV0NMRmR6RTBseEZlVmNIWUx0ZTBNYURQRXE4cGNkbkdhVmNsczQ4TldweURBREZVTmpHTDFFNEIvWXNXdC8wWm9yVXAyQzZMbTFyVU0xN1RNZEFkVVdhZDhWUXJobGU2TFRoRGN2cHFodDA0NTducGhsTnlVY05jSjhLM0plSWxiWDN2TU5BcFJmZUp0bVZySngvNGd3R001NzN4SmtGNmI3SGR1L1UwSlJSZDhBc1JpUmI2K2lYQkV0a3JoQ0ZpWUlLOE5MV0gvQ3g0RWp3VzdQNGh1VmtMYzRST29XQ0wzN1VLREJZUGlBV25YSXdwV2dnSUUwOUlXcStER3o1Z3dHZklibE45MkdLOWpXUzRSa0p3VkpYZll1eEZ4TWhZK2pKVUhVN2k5ZDNsdUUyWThsdUg2R0FWcGxZaGZhNmZoaVhENHk5d284MEJpdk9UQWpCbk5FMHBKamFNQTJMc1VFODRwTURGV1dJd0VMcTk0d0NDcXMyenNxZWFJbkJiUElnQXlqSmRBWkkrUWVMNUV2di96R0ZLYkZTOGoyZ1RWRFF5ZmkrQm5yRmo2MGlZSTh6ell2SVZPSnhqVUs0Z3NYa2p0QSt2V0pNZW9MZ0dWbTdGcE1GRGFLVDJPZFFvRXZXZEF2OERVUW5Hc3JsY3dVQ2xmQWRoWllYV3NtZXdVWmV1QTJVSXhzcTR6UFE5WWU4SFZRckgyc05PTUZ3QVlBZGsyZWZPMlQ1QUFlc3daQ25yT1NxN0hqUUplTzhYWU5vQzJUU1ROYmhTOEdBSVlEZ09XOGZMcGVvK2cwUlBSc2hES2ZSZG5iM3ZmenhEMlh5ZnFheCtEMnlid25vR2k2eUZ3ZjZjZ3Q5SG9keGNVOE02bW5CdlJFNitIdUhtQWNLd2MydUlpZUdhdHZ4RHlpRmlaM2FMT2lvRlprTzV3bzV3RkNKZjJhQ3JaY0RpN1d5Z3Zsd0cybnpMeldLdXo0bUtRZDdQL2I4NkNvWk9sNXd3dU9OTnh6cDZQWTVVeDJwNTZpRWJyZzVhTFkrVmFKMEZ1Ui80RnA5ZkU2c3ZPc2c4Q2NKZUlvM3c3Ni9Zb1l6UWVkaEhzK0M1b0owSE5WNEwwdXArQTQwR3ZRc25ISW1TL284RHI0Z2g4MDkvaWRzT0Q0ZWNtZDN3S09QNFdzTStBNElTWFBCeGlQaGF5YXo0Q2lBOUg0KzNOK00rN0lmUzZLWHE5S2UrV2ZOdkE3STB4ZlJ0VUhSaUQreDMxMHZBMXhyT2ljOWw3UWVsQ0tienZTWEIzdDR5K0JQZUd5L0RWOEhDaDVOM2Z1SWRHMWwxUTZHbllmdmxaZ0gxS1hJLzlyYitsNk0zM2lPcTc3NFJaenh2cS9nWTRRWHBQK3NTU245QzZmYjhKek44Uno3dEErd041dnZ5UkFQbW1DSC8vRVlCL0EyRlkvNWlIVUFBWUJwd25GdnAzYy8yblhEWFFnQjV4ZkFlNEJORVhEdHkzZjhVbkZvcjNiMk14QU9nM2dVRkFlM1kyZm5WM2F5bmhiVFBBZG1OeGdTQm9CY0FYRk5mbmUvUTNFU2kyZSsvV2dsd1FmbHJ4Z1V3M2VEQW9jVHFGZzF3Z2dCTWhnWjlYZ2Mwd2ZTZEFoT093Z1VKNEJET29FdlozZ0Rib0ZHaVVnWkgzaEl2RGhCR3hnSDVYZmRKd2N2TVhoRnA0QlJEb1lHVklBc24zV1RHd2hoN2hoR2tZQkQ3WWEzRW9BbFdZYlRHZ2Z2UmdoSFhJQTBnb0RUSDRmbUFZRFRDZ2d1ckdnMzBvQTZ5SEYvK1hoaWJvRWZta2d4RXhoWWxvQkM4SWNaWG9ZVzVoY0dlNGFKbTRaYVgwaVlhWUZTeG9BcGNvRVkvMmlUYWdoelNvaXYrc09BNG8yQUtENkF5eHFJcUhwVmFxMklrU2dTK2pHRisyV0RSY09CRDBWb21TYUdqRk1CYnM5NHM1b0l2YnBZd2QxeEhLeG93RGtZcksrQUp6NkJTV1Y0ZW5HQkdsT0FJVk9BRFZlQVIvR0EzSmlJUFNTSEV0OElyaFFJbmhtQU9McUhiVldJd0UwUUpqRVlqdEdBUGJxQkppR0llOTZCVHVnNFZOd1lmM3FBTHk2QkhzV0lmQk9BM0xWWkQwUUlJRGVRTHFTQkJlMkgxSVNHcm5PQSsxK0pBOEVJVXBBWWM0dUhjZTBZMXVPQkVIcVpHRm1KRDBvSER0eUpEek1JWDVXQS8yYUpLN2hvc0QrWXdTQVk0cUVKRmhLSk03Y0kxTmtZMnVPQllyTUJiVXlKTVJNSkkyRVpOYStJaXRpQUw5R0JRNGFaUTM4STZWaDRqdmQ1SC84OUF0TENrT0pTbVZLY0NVbXlXVGQ1aVVLYkNWRnVpVk5tQ1dCTkYzOTFpQVM0Y0NJRGtSU3VtVkx4bUJSbW1UM0RpVFRZYVdOTUNST0NhVktBa05ub2VWNGpDUjdSaVk4N0NQdjFpWExaa0NqRGtPVnFtTWhEbUpYdm1OanFsdWZDa0RQdWx4WGptWkZIR1pXS0dFbWFtR05HbVVma2tQS1lDWEE5R1ZtVW1WYnFHU1JxbVcwL0E0cWxrUDNUaWFKQUNXSytHUmlTaWIwckFvdFVrUGMybVN2cG1Ta1RtQlR4a1VpeUlXdzZtUmp5a1JkS2VSd1dsdTdNV2N1TWtDcHprUlFQbVEwNW1ZSjFDY3oyQ1l0b2lZNDlDY2lUaUx6Y0JkNE9rTTR2bUpuaW1NeDltQ3p4a082cW1BMTVrQ214bHQxem1mMXZlZDlubWZKL0NlLy9XUWtYekpuNERvbjFuUm5vbm9taHgxbndZYURmV1pGVVZaamVOWUhnRDZvTkFRb2JnR29DYXdudU1na0orSW9jK2dvVTBSbFJ3cUFpSTZEcXc1a0NtYW5naTZvU2RxaDR5aG9GcllvaEJBb3NFV295SkFub2wzb2phS28xQ3BvM0Y1Zmo1cW5SMHFGaE1xaXVnWkR1WDRrRC82b3Y1NG9nSktEMnlKbTA5NnBBbDZvandhRGpTYWhsZGFBaDRLQVYwcWhFTmFFN2VKbGx2NlZHRTZwaTJZbi9QbWtML1luZU1nSndBWkZJcXBrUlU2b2pvcUFuSmFtQ2pRcC8xNW5TTDRGbFY2bjRBNkRjQ1piQTY2R0hjcWxXRXFwbjlhYWRlWm5XSzJweUx3cUpGeXFOR3dvc3JvcGpVQm16RktxZllBbXU0MW1raFpFK2JaamxPYWNQK2srcE9qT2FodXNaMm1LaGFGMnFJbVNwZUxBYUwzYUtPZWQ2b0VrYVJhS0txZllha2tzS1dEK1o5U1NXMTRFWGVXcXFrWmwyZEdLcFdyMm9URU9nSnUyUlF4RnFiUkdZNndxbFB4bVlsaldST3JGYWFjV29rMk9nMU4ycGtucGdMT3lxcEdHYTZoV2Ewa2NLNTUwcTdQQUtjZzZLbG5KNjhqc0tXM2FnSTZHUTJOV29tK3FoSzh5Wk1CWUsvT1VLZ29HcTBQMmExaU1ZekUrcWhUT0szTlVLNXBHTERDeWE4allMSE5FSjFsQ21JbUtheW93YkVqb0p2cnR3S1BDcXp5cDY4cndhYWZ1S1NRcWdJSkt4YnArb1I1Nmd3WWk1YlgyaFJNczZRSE80RUVvTEQyZ0s4UFNiTFNRS0FuWUtOS081N3haN0tKMW5rdFVMRFRxS3IvaTlHSThpcXoyNnFKTmh1T0RKcGtVTXNOeG5lTVlyR3pCM2l1MG1DMmFCbXlFZUZCUkFzQkhxaU04SXByTEt1Ukdnc04vNW9DZC9zTUE1dXZNaXNOV3h1ak5WdTJMMEMxOVJDMEZMa1lzaHFxbS9nQ1NCc05UUnVIajZxUVlYdXlibkduZGZwZG1RaGxZaUdhT3ZxM1dDU3ppT3Q3SHN1bGxTc0NqeHNObnB0eVpKaUlFS3VCcDh1NlhSWURiRXNRdXZwNWFBdTUzMXFOZ3lzV0E5dXpRbkdtQjFpNmdYcTZxUnNORlNXem9QcUVDWmdWREN1dmUvc01xMnU1OWFpTk14cTdFZkMxUVJHNHN1WVd6d3VBdGJ0OTJIdVViNEZpMm1zVGZldDd6WXNWeXd1MWZ4dTVMQkM5emlDODNZZXl6WWk5eHdzTmNFaTg3UXVBYyt0Yy83c2JqdkxyRE1jSHZFQW5oQzY3RXVrTG9KUGJETGUxcGJRV3dLaG12eW1odHFNNWp2UjdlRytScWpmM3Z5VmF0eko1dnBpWWxsVTVnZXZyYWVNTGVuY0JhSDk3b3hPWXU3bzd2aUpzcGpsZ3VQQUp2cFZ4dTVYWmRqblF3QzRzZnlkY3F0aWJ3Qkd4dUlzWHF4THNZd05zdXVOTHZBK3lBMDc4dzkwWHhkRXd1bWhKeE1hb0F6TU1GMG04WUFic3JTbGNvZCtMajJiVmZVdU1yaW04eFN2QndSSGd3VU5odEloR3hSYWF3aFFjRVI4SXdmTTdmRDc4bXltOHh4bjhBbFFNczkyRng5UHd4em9Ld3hDd3dDdWd4aW94dmZXV3M4OGdzV0didjlFd3hqU1FwMno4Wlc2TXJTbU14UkdSeVNPd3gwWThia0VNd0Nsc3czWXNCUCtJYk1pNmRzYlRvTWozK2JwTlljVW5zTWtPNkhkeUxKZ3BIQUd1M0F4d1hBS0VITUYxdDhmUjBMOG1LOGNXakoyQndjcDQ1c24ybGNadkd3MWpHc3pOQU1zK2hzZ3hQTDY5REFISjNBS1VuTTBvbDh2UW9NTlNHYjVOYVFUVWpHODNSOHlibXNMbFpYTkk4TTBDYTNFS2tNNTRDOEl5aWMweml3VHBMTWxwSjE0cG5NdmREQVB5ck12c2hzb24yTVcyK01YWHhRVDJETXJQVWREaWNMUFhxYXgzTWRBeHdNNkpQR3p2akJVWUxaWDZEQUg0M0FMNlBFdG94cm0yTk5JUGFjNFRRY3VLNkZVS1BSSjF2TWJqeTlEWStNc3dBTW5xZkdrSUxXRXh2Ymt0bktHMUVkVFBRTkhZSWRGK2lyM2JMTXdBeGhqa3pCYzIzWHJqcTlQL0VQRFVOUkRTSnYwaXBmeG4yTXZTSkZrNWxhVFNHRkZjc29XL2xTSFdNaURPRUhCbTVFWFU2NGk5VWYyV2dtZlBTZmpUcFZEUHhHVFhmYmpWUVlHMVVhRFJkZjBpS00xMWxldk1IU0hJYldoYzNiWFVoUnk3ZzUwVkx0MERGcTFlUjhMWVNZdlQ5L2pZZEZocVVqVWdtdjBXMW56RmxsM05YdERUTFIwZnBjVVlrZjJRbisyTFhqRFpBb1lkcVgyMWVwMkdyZjJUdFEwREhkMFViSjBXdTkxWWFQMkx0OTBVd2MwRFhvMWp4YjBKSStVWkVEMlFmQzBVelQwRU0zMkN5WTBKU0UwUEh5MlR2LzFxOEVkWVZ1MEpwcjJENHp2Y0t1SFBYaERYWFV0VVZKM1U0NzNOb1kxdXBySGFtVERibFdIVUFFcmVFOEc5V3pEZGpZelovNVJ3M2JhNXl5UXdUUEdxQnZndEZOWHpLdXN0RHIxOXVoWG8xMlR3M0NqTURrWFVRTlV0azlGMzRVUUEyTktRVE1peUhPOXRxZUZOd0hBQTRQWVEzWWtBU1prazRDdUF0UG90Qmd1dXVocitROUg4aGl5dXpEV1IzVlhBMzUrSzRvSlE0Y0hSTmplZUFwVGE0R2h3NEtFNTQzVVFBREZlYmJuTms5dE5pMHFlQklZTmxZZWtDY2xDSFQ0MDVDNFE1U0tOQnhKT2VDRWVDRmJVUVZ5dTIzUTE1cHJoMWlMbjMzVFFRdFhCckdmT0FpcGVEOSs5QmJiTWIyNytCalZVSFhkdXNwL3Q0MXBnNHZVZ1FZNlFBRHhlZW5PZWdqa2wzMTlBNkFPYVFJclE1OXdoNkZCYlZGVXNDSkJlNkVza0NBd3cyaDd4NG90K0FpRGs2SEszUFA5Y0ZBaTJVUitpUHVxa251a0sxQjBQOE9lbGRqNzFZZW9DZmoxR3JnZWIzaGlkUGdmSFlDQzR6dUsyc3V0NzBPdGlwdVpZa0FDMjdoL0RmdU5LOGVSWmdPeURnVGh1WUQ1c1B1R3VQZ3pVcnAzV2ZnWW1RZGVLdXUzYTBGUGNVUmEwM2dOL1UrT0NZZW5rM2p3TkVqZFR6Z0pnUVNUcC91Nk00T1gvY3cyMnNPY3FVQkoxb3lUQmhPL0VRTjk3NHhKVTR6VVBnQXpzVGt6elR2Q0VnT2t6b2d6bjRCTEJVSWl0NERYd1VBRFpmaG9lRHZFTTBlU1ZVUTRrWC9JTlB4NUNEdklNY2R3R1V4L01yUEtrUUNvdC95YnVEdk9TUU5ZekR5VURiL01LbGVnNUgwVCt6dk9Xd1BJL0h4dlBMdlNZc054Rjd4LzNqdlNaSVBGTFR4Ny9nK1AwbVpIbFVkOGVWMDcxaDFIblY2L2x5cTcxd3FUV1hiK2EwZzcya3pCT1l4OGJPMi8ydERIaWFSK1NaYy8ybG9EemIzKzFYeS8zMjJEMWRjOXZjWS8zOHkzeU9XOUtmcDhobjc3M3p0djBnMDhNMDJUNDgxYnppUjhzZXMvNEhaRWxqKzlqUGlINWNobjBsYTlRelk3NTRrRDVtNDlvbCsvNVNSdFFvUjlyaGlMdUJ3UDZwejl0QzRUNUNDRHByVjl2MGJIMzhESDdLTWZzSFU4a09ZSDdmbWNYT2U4WW11LzdBOUlhdTI4ZnUzSDN4STltbTZINjNYRS9ETkQzeTQ4ZGlYRXJjWEVlMHcrQXpWOHBXNkg4MmU5dmZ0SDVVSk05RC8vOWw5WWFISjhqQmZEdDV2K0ozY0FaOW1FTmZkUCtuYXJ3amZNL0xZRU4way8vdjFvSEFna2hQQVV5UUttNnNxMzdzZ05RR0FKRFJMbSs4NzMvQTRQQ0liRm9QQ0tUeWlXejZYeENvOUlwdFdxOVlyUElBS0ZMY0FnTWhjS2diRDZqMFl2eHVHYnJhdVB5T2IxdXYrUHorajIvNy84REJnb09FaFlhSGlJbUtpNHlOam8rUWtaS1RsSldXbDVpWm1wdWNuWjZmb0tHaW82U2xwcWVvcWFxcnJLMnVyN0N4c3JPMHRiYTN1TG02dTd5OXZyK0FnY0xEeE1YR3g4akp5c3ZNemM3UDBOSFMwOVRWMXRmWTJkcmIzTjNlMytEaDR1UGs1ZWJuNk9uNDRVQUFDSDVCQWtFQUJFQUxBQUFBQUNVQW1ZQkFBWC9ZQ1NPWkdtZWFLcXViT3UrY0N6UGRHM2ZlSzd2Zk8vL3dLQndTQ3dhajhpa2NzbHNPcC9RcUhSS3JWcXYyS3gyeSsxNnYrQ3dlRXd1bTgvb3RIck5icnZmOExoOFRxL2I3L2k4ZnMvdisvK0FnWUtEaElXR2g0aUppb3VNalk2UGtKR1NrNVNWbHBlWW1acWJuSjJlbjZDaG9xT2twYWFucUdzS0JLd0VEZ0t3c2JLenN3eXRxYmc0Q2EyMHZiNjJyQW01d3kyc0J3VUZBOG9ERU0zT3o5RFIwczNMQUFVQ0JNVGFJZ25IQ012VDRlTE95d01JQlFhc0N0dWszUUlHeWN6ajgvVGg1dGNIMmV5Z0NRd0NEd3ZrMVJ0SWNNQ0NCd0ljNk50WHlWV0RaQVFqU3B4MlQwQStocFA2L1FzNHNXTkhnd1lVWWx5a2dJRUJqaDVULzZva2h3RGh3cEdGQ0RSQXViTG1SSE1QR0t5RENVakJRNEUyZzZvMEtFQVl6ejRLRGp3QUlMU3BSNUF2ajlJSndLREJONmRZYXlJd3dFQ3FuYW9Jc29yMUNNREFnWjFlMndSd3NIU3MyNVVBSGtSTm0wYnAyN3NmcjZHbFN5YkFNYUI0QTBzRTRDQUFYek1tbVFwZUhCR0JnNzJIdVJ3d3dManl4M1NSdnlTd2Fya3p3UUtGTTJPUnFkaXo2WUdPRFl1Mm9zQkIyTk93NlpsZEhjWHY2OWk0NXczQVRQdUpYNGk1ZzRjRElBQnk3eUkrU3d0ZlBpMzE4U1FNSGdCbVR0MFo3K2RDR0JTb3pwM2lkZXcva25jZkR3M0JBZFhnZHh5NFRiNTlNK2ZwZFJDUTdyNCtCT0xvNDlNUXdONisrd0VOR0tmZkM5cjVaMkJaK1EzWUF2OS9CamJZakFFQ0tvZ0NBUXM0MkNDQ0VxN2dtb1VXN2haaGhoRVFzQjJIRGdMUVFJSWdIcUFjaVJlZUNDSUpDWXpJSW9jQ29LZ2ZoVFBPaUIrSUNsQ1dJNHVPU1Jqamp6K2FwMkFBQWhCWlpGZnByYldpa2lRV1lCUjREUFFISllrQllrZUFsVmV5Nk9KeENsVFlKWkdFOVJiQUEyTmVpUUNUcXpXUTVwVUx6SldXQTArK21lTURIL0pFUUoxMnp2aGxXbUgyT1dhWmRBWGdwcUJkQWlBblJnNGcrbVlCTmpMRUFKK081bWhBcE5vRVd1bWJEdkJrNktadktqcVNpcURhV1VDZXFTUWdacWxwMXNqT21hejJDUUNiMmpRYXE1MExUSmxMQWx6ZWVxVUEyZ1FnbzY5cEFuREFNQUpRU3F5U0M2QUt5cDdMQ2dvcEtzSkdpK2ovcktuWWFxMnNpM3FTZ0xMYlFnbHNLYkNHaStpeG8weHFycVBUaXFMcHVvSTJJTXFoOENLS2dMT1ZmRnV2b3d0Z1drbTErenFLclNjSEJGd3BBTHBpOG02WDkxemp5OE1DSUJQUGRHT2l1d205Z2lxekFEb1E5L0pRUEtGYWZJbStPV3BzUUVLcytEc0RLLzRBbEtZQm02Q1o1Z0RJTkpCUHdqYXM0czgvQUZCTUl5YnFrcmlWU0VvRTRJb0JWeW41Z01xTUJMQ3FrdVlZZ0RNUkpVVnNxU1VGZCtnU3ZrY1FJQUJOTFBiNzc5TXNna1EwRkFSTUJpNTU3VWFTcElFMG41MEZWVFA1YkYrekdmWHFYMHR5WDVIVUEzcVBoemNrR0xlSFFBTUVNSDBGVmNDVk9MVWlKSmRvRnRkVkpPQUEyZTNsK29pUDVCbmt3T05qVEFaMi8zMElQeEw1M2x5cFVaSUJhd2RYT2lNeWowY1k1V0tzbFRUcDNSSnl1bnZFMFE3R2I3eURMa2pzMVpWRjZ4dysyVTJkcUpDMzducnFkYlNHT1hQTUg4STVkUXQwdW9jQ0FpalBuUEIvN042ZGtYc1F3SHAzcnhkeXZYQzc1VzRIa29FTGw3N3V6c00yZ0Z3OWJWZzgrSHFzbnh1QWlzTkRnY2d6djBDSWozckZLY1FCcG9lYkF2ckJmN0VCWUNKRVJFRCszZUdBOG5NVklyYTBQQXZTQVlLbjJVMEEvMEJCOUhsd0RrNURud1lYVVNYcW5SQU9JRFROcVNKUnd2MzlJWVhGVzZFajlCZWNlL1hoYmJsWndQRWdnYVBxaUswUE1iU2ZEaUdCcFBvRjVvaDV5Rm9EeDNXSjlSaHhoRzFJNG1rZ3BERGl4UWFLZHBCaWJHYW9pZjhtWWcrTGF0Q2lad3JndmtnRURUY0x3QU8wWWtPK1RpaGdXTUdCR1I3RW1CdENkY0pRM2x1TUh1bUF3Y3I4NlJOdnpPTWQrSWlicFlsQ1ZibVJGd29aeUppQmphSmN3dEhlSEFpd0hFdU9RbzJDRWRrYktMa1lNcG9pa2JocDR4a1U0RVM4T1BJVXFPeU1BOWNBeXJjTVFKUFU4aUpzQU9DNzM1R3lNcDQ4QlNaTnc4czNBTkV6bWlOR0xFMFRSempvMGpTdkhBYWRZTk5NTm5EeU5ORWtCc0J3UTBVMmFHdVhvaHdHQjdmSUJsWVNFNWZzT0Nac1ZBbUdCQVR5aVM4Y3hSMWhnODR5NEZDVzdFVEZISGZaeTduRlR6Q1g0a2t0M1JKUExBdzBLMkFjeVQyeHVZWm5XcWFlR0dFa1l4Q0FSaXRJRktBVlRjVkIzUUpSTVZ6L3RKSkRoTWsrTFZNQU14VHlMaDNseVRjOU00Q0NWc0djcDBHQVMzR3hzTXAwTXd5L0hJdXhSTE5NeHBUVURIaTBURUxUc2szTDVKTUtoUk9NVEdselVyeUVFd3dydFV3Mkk1TlVwV2JVQ1F6b3pGQWpVOVBGVkhNTU1QWE1JR256MGJ1TWxRdGhGU1I0RnJxWW8xb2hwMjg1SzFOYktaU1FZaUdvZUpHcm1lRHFsSitTUVoyVjBldGNMUU9BcXlhaHJHTVJySmtjS3BZQjlGTUs3alROVTQvVFZMRThnQXNCb0d0TlV2cWNqYXBFa21SZ3JGTWwxRlc4MkhVS29oWExaTlBqMlk0VXRneFo5Y3hxc1pOWllCcVdDTEZkekUwbHhGZVZjSFlMdGUwTWFEUEVxOHBjZG5HYVZjbHM0OE5XcHlEQURGVU5qR0wxRTRCL1lzV3QvMFpvclVwMkM2TG0xclVNMTdUTWRBZFVXYWQ4VlFyaGxlNkxUaERjdnBxaHQwNDU3bnBobE55VWNOY0o4SzNKZUlsYlgzdk1OQXBSZmVKdG1Wckp4LzRnd0dNNTczeEprRjZiN0hkdS9VMEpSUmQ4QXNSaVJiNitpWEJFdGtyaENGaVlJSzhOTFdIL0N4NEVqd1c3UDRodVZrTGM0Uk9vV0NMMzdVS0RCWVBpQVduWEl3cFdnZ0lFMDlJV3ErREd6NWd3R2ZJYmxOOTJHSzlqV1M0UmtKd1ZKWGZZdXhGeE1oWStqSlVIVTdpOWQzbHVFMlk4bHVINkdBVnBsWWhmYTZmaGlYRDR5OXdvODBCaXZPVEFqQm5ORTBwSmphTUEyTHNVRTg0cE1ERldXSXdFTHE5NHdDQ3FzMnpzcWVhSW5CYlBJZ0F5akpkQVpJK1FlTDVFdnYvekdGS2JGUzhqMmdUVkRReWZpK0JuckZqNjBpWUk4enpZdklWT0p4alVLNGdzWGtqdEErdldKTWVvTGdHVm03RnBNRkRhS1QyT2RRb0V2V2RBdjhEVVFuR3NybGN3VUNsZkFkaFpZWFdzbWV3VVpldUEyVUl4c3E0elBROVllOEhWUXJIMnNOT01Gd0FZQWRrMmVmTzJUNUFBZXN3WkNuck9TcTdIalFKZU84WFlOb0MyVFNUTmJoUzhHQUlZRGdPVzhmTHBlbytnMFJQUnNoREtmUmRuYjN2Znp4RDJYeWZxYXgrRDJ5Yndub0dpNnlGd2Y2Y2d0OUhvZHhjVThNNm1uQnZSRTYrSHVIbUFjS3djMnVJaWVHYXR2eER5aUZpWjNhTE9pb0Zaa081d281d0ZDSmYyYUNyWmNEaTdXeWd2bHdHMm56THpXS3V6NG1LUWQ3UC9iODZDb1pPbDV3d3VPTk54enA2UFk1VXgycDU2aUVicmc1YUxZK1ZhSjBGdVIvNEZwOWZFNnN2T3NnOENjSmVJbzN3NzYvWW9ZelFlZGhIcytDNW9KMEhOVjRMMHVwK0E0MEd2UXNuSEltUy9vOERyNGdoODA5L2lkc09ENGVjbWQzd0tPUDRXc00rQTRJU1hQQnhpUGhheWF6NENpQTlINCszTitNKzdJZlM2S1hxOUtlK1dmTnZBN0kweGZSdFVIUmlEK3gzMTB2QTF4ck9pYzlsN1FlbENLYnp2U1hCM3Q0eStCUGVHeS9EVjhIQ2g1TjNmdUlkRzFsMVE2R25ZZnZsWmdIMUtYSS85cmIrbDZNMzNpT3E3NzRSWnp4dnEvZ1k0UVhwUCtzU1NuOUM2ZmI4SnpOOFJ6N3RBK3dONXZ2eVJBUG1tQ0gvL0VZQi9BMkZZLzVpSFVBQVlCcHduRnZwM2MvMm5YRFhRZ0I1eGZBZTRCTkVYRHR5M2Y4VW5Gb3IzYjJNeEFPZzNnVUZBZTNZMmZuVjNheW5oYlRQQWRtTnhnU0JvQmNBWEZOZm5lL1EzRVNpMmUrL1dnbHdRZmxyeGdVdzNlREFvY1RxRmcxd2dnQk1oZ1o5WGdjMHdmU2RBaE9Pd2dVSjRCRE9vRXZaM2dEYm9GR2lVZ1pIM2hJdkRoQkd4Z0g1WGZkSndjdk1YaEZwNEJSRG9ZR1ZJQXNuM1dUR3doaDdoaEdrWUJEN1lhM0VvQWxXWWJUR2dmdlJnaEhYSUEwZ29EVEg0Zm1BWURUQ2dndXJHZzMwb0E2eUhGLytYaGlib0VmbWtneEV4aFlsb0JDOEljWlhvWVc1aGNHZTRhSm00WmFYMGlZYVlGU3hvQXBjb0VZLzJpVGFnaHpTb2l2K3NPQTRvMkFLRDZBeXhxSXFIcFZhcTJJa1NnUytqR0YrMldEUmNPQkQwVm9tU2FHakZNQmJzOTRzNW9JdmJwWXdkMXhIS3hvd0RrWXJLK0FKejZCU1dWNGVuR0JHbE9BSVZPQURWZUFSL0dBM0ppSVBTU0hFdDhJcmhRSW5obUFPTHFIYlZXSXdFMFFKakVZanRHQVBicUJKaUdJZTk2QlR1ZzRWTndZZjNxQUx5NkJIc1dJZkJPQTNMVlpEMFFJSURlUUxxU0JCZTJIMUlTR3JuT0ErMStKQThFSVVwQVljNHVIY2UwWTF1T0JFSHFaR0ZtSkQwb0hEdHlKRHpNSVg1V0EvMmFKSzdob3NEK1l3U0FZNHFFSkZoS0pNN2NJMU5rWTJ1T0JZck1CYlV5Sk1STUpJMkVaTmErSWl0aUFMOUdCUTRhWlEzOEk2Vmg0anZkNUgvODlBdExDa09KU21WS2NDVW15V1RkNWlVS2JDVkZ1aVZObUNXQk5GMzkxaUFTNGNDSURrUlN1bVZMeG1CUm1tVDNEaVRUWWFXTk1DUk9DYVZLQWtObm9lVjRqQ1I3UmlZODdDUHYxaVhMWmtDakRrT1ZxbU1oRG1KWHZtTmpxbHVmQ2tEUHVseFhqbVpGSEdaV0tHRW1hbUdOR21VZmtrUEtZQ1hBOUdWbVVtVmJxR1NScW1XMC9BNHFsa1AzVGlhSkFDV0srR1JpU2liMHJBb3RVa1BjMm1TdnBtU2tUbUJUeGtVaXlJV3c2bVJqeWtSZEtlUndXbHU3TVdjdU1rQ3B6a1JRUG1RMDVtWUoxQ2N6MkNZdG9pWTQ5Q2NpVGlMemNCZDRPa000dm1KbmltTXg5bUN6eGtPNnFtQTE1a0NteGx0MXptZjF2ZWQ5bm1mSi9DZS8vV1FrWHpKbjREb24xblJub25vbWh4MW53WWFEZldaRlVWWmplTllIZ0Q2b05BUW9iZ0dvQ2F3bnVNZ2tKK0lvYytnb1UwUmxSd3FBaUk2RHF3NWtDbWFuZ2k2b1NkcWg0eWhvRnJZb2hCQW9zRVdveUpBbm9sM29qYUtvMUNwbzNGNWZqNXFuUjBxRmhNcWl1Z1pEdVg0a0QvNm92NTRvZ0pLRDJ5Sm0wOTZwQWw2b2p3YURqU2FobGRhQWg0S0FWMHFoRU5hRTdlSmxsdjZWR0U2cGkyWW4vUG1rTC9ZbmVNZ0p3QVpGSXFwa1JVNm9qb3FBbkphbUNqUXAvMTVuU0w0RmxWNm40QTZEY0NaYkE2NkdIY3FsV0VxcG45YWFkZVpuV0sycHlMd3FKRnlxTkd3b3Nyb3BqVUJtekZLcWZZQW11NDFta2haRStiWmpsT2FjUCtrK3BPak9haHVzWjJtS2hhRjJxSW1TcGVMQWFMM2FLT2VkNm9Fa2FSYUtLcWZZYWtrc0tXRCtaOVNTVzE0RVhlV3Fxa1psMmRHS3BXcjJvVEVPZ0p1MlJReEZxYlJHWTZ3cWxQeG1ZbGpXUk9yRmFhY1dvazJPZzFOMnBrbnBnTE95cXBHR2E2aFdhMGtjSzU1MHE3UEFLY2c2S2xuSjY4anNLVzNhZ0k2R1EyTldvbStxaEs4eVpNQllLL09VS2dvR3EwUDJhMWlNWXpFK3FoVE9LM05VSzVwR0xEQ3lhOGpZTEhORUoxbENtSW1LYXlvd2JFam9KdnJ0d0tQQ3F6eXA2OHJ3YWFmdUtTUXFnSUpLeGJwK29SNTZnd1lpNWJYMmhSTXM2UUhPNEVFb0xEMmdLOFBTYkxTUUtBbllLTktPNTd4WjdLSjFua3RVTERUcUtyL2k5R0k4aXF6MjZxSk5odU9ESnBrVU1zTnhuZU1Zckd6QjNpdTBtQzJhQm15RWVGQlJBc0JIcWlNOElwckxLdVJHZ3NOLzVvQ2Qvc01BNXV2TWlzTld4dWpOVnUyTDBDMTlSQzBGTGtZc2hxcW0vZ0NTQnNOVFJ1SGo2cVFZWHV5Ym5HbmRmcGRtUWhsWWlHYU92cTNXQ1N6aU90N0hzdWxsU3NDanhzTm5wdHlaSmlJRUt1QnA4dTZYUllEYkVzUXV2cDVhQXU1MzFxTmd5c1dBOXV6UW5HbUIxaTZnWHE2cVJzTkZTV3pvUHFFQ1pnVkRDdXZlL3NNcTJ1NTlhaU5NeHE3RWZDMVFSRzRzdVlXend1QXRidDkySHVVYjRGaTJtc1RmZXQ3ellzVnl3dTFmeHU1TEJDOXppQzgzWWV5ellpOXh3c05jRWk4N1F1QWMrdGMvN3NianZMckRNY0h2RUFuaEM2N0V1a0xvSlBiRExlMXBiUVd3S2htdnltaHRxTTVqdlI3ZUcrUnFqZjN2eVZhdHpKNXZwaVlsbFU1Z2V2cmFlTUxlbmNCYUg5N294T1l1N283dmlKc3BqbGd1UEFKdnBWeHU1WFpkam5Rd0M0c2Z5ZGNxdGlid0JHeHVJc1hxeExzWXdOc3V1Tkx2QSt5QTA3OHc5MFh4ZEV3dW1oSnhNYW9Bek1NRjBtOFlBYnNyU2xjb2QrTGoyYlZmVXVNcmltOHhTdkJ3Ukhnd1VOaHRJaEd4UmFhd2hRY0VSOEl3Zk03ZkQ3OG15bTh4eG44QWxRTXM5MkZ4OVB3eHpvS3d4Q3d3Q3VneGlveHZmV1dzODhnc1dHYnY5RXd4alNRcDJ6OFpXNk1yU21NeFJHUnlTT3d4MFk4YmtFTXdDbHN3M1lzQlArSWJNaTZkc2JUb01qMyticE5ZY1Vuc01rTzZIZHlMSmdwSElDQkFjY2xRTWdSWEhkN0hBMzlhN0p5Yk1IWUdSaXNqR2VlYkY4cExNdWNXUVRBM0F5dzdHT0lITVBqNjhvWEM0V2Exc1dya2N2UW9NUFNTbU5JTU0zNGRuUER2S25QL0xicWpBU1V2SlArcGdEbWpMY2diSktjZTExS1lNNlNuSGJpZGNxQ2djd3g4TTd0UEc2b2ZJTGVySXJwUExQNUxCaWcvQndDUFE0M2U1M05USmxNa05EVlRGNHR2STRwck0zT1VNOHRjTTMzNGRHUmNjK3ZLZElEQ2NrUVFNdUs2RlVIalJGMXZNYmpHNzZ1NWNzd2dOTExyQjhGTFdFdFhZbGZyS2hRTU5FUkVkSFk4ZEJ6T3NRWkhjazdyWGVNSWM1ODBkTnZjZE80U2RKWXdkVC9OUURTSWYxbHBmeG4ySXZTRUFEUU91RFUyR2pTREZGY3NyWFZsU0hXTVFET0VIQm1HQzFEMkt2V1Vrd0Z5aXBnOHlYUHhKVFVkVWpVbFl6WGNZWjFmUDBKVWwxNnhtdFVXcERURWdIVlhoSFlyUmU3ZWwzRndEWFAxaUVoaXExVE5IMlB0aHdVbzF6UlVqVWdrejBXRisyVmpTMndYbURZRXFIU3VWQmFqR0hhUjlzWmlJMEVjeTBZYk0wWHFIMjFmLzJFb1EwTm1mMEU1UldhdFIwSnUxM1NsUXZYSFMwR010M0lhTTBKSStVWkRYMlBYSzJua3laTHg1MEp0ODJWWVR0TVdBZC9oRVhWbmtEYWZOZmIrY3JSU1Z2WlJBRFd5RmdvemMzRUhFdlduZkhaVDFEY3Ura1ZzMTBaUW0yYTdFd1AzTHNGTDcwU2d6TXF3ZEhhL3p4NTN0SzdCcDI5WjRLc0NBRUE0Tk1RMndBYTM0em8zVk41MU9KdzM2RlFSQTBVM1gzWVU0dGg0WnhHVFJwT0NNSTlEdXc5a05iZEdkcjlCTk10RFFPdzNKQUQzZ014M3hxSjRZc2g0V0dBNE5MYjRUOVUzeDJoMnJZNDRwM2gxVmlRM3phUjRxVkE0Y0hSTm5zSzR5dzlGU3d1RHNrRTJEVE81QTdlZlR3TzNlOEQ0YnB4U0pxUUxOVGhRNVk2VGJsaDQweVExVmtXNG9CZ1JSMWtxVU1TSEdUdUJiK05GNlpFQ1MxVUhjd0tvSUFrSENXdUJaZDlGMWtpQ1RWVUhYZGVoMTRlSENvdUdjc2hRWTZRQUVET3d6RWE2SXIwQnlkT0Q3MnpDSDNPSFlPZWhtYStIRG9lQm8rZWtrc2tDQXl3NUNraDR3TkpLdFNSNlhLM1BQOWNGQWkyVVIraUhvNjJ3eDJtSGpyZDhRQi9yZ1htWStWb2VKMmswUjJ4VGdhYnZwYWRQZ2ZIWUNDOURvTERQaDdGN3V2dFVRQnJmZ1VKY0Q3RVBwbzlndXNkeVFpL1BoaUk0d2EzYmlHdG5vbXRBZG52M1FqWHJwM1pmZ1ltQWU1WVVlbEFmRG4rb2U1cmdPVFVNeHRnOERjNFhudEd1Um1nUHNLUTBPYkJFVGRnM2dKZ1FTUzFQbngrZ1RRV012QnV3TytGZmcyMklONHNVQkoxb3lUQkZHdExjUTBGYmdLN01Cbm9qbzBYcndyNVRxc3VRVFZlOHdESVVPK2VNVXVvOWpRTll6TTBDdkdOd3lJb3owUldIUmpLY0E0dUVReUYyQXBlQXc4RlFPM005TzllNFQwR2dRd1cwUXJ4MUFvSDhERTlBeWNPZndkUHZoamxFUFgvVW0veTNXSGs0emFkVTUvMXlvQW9WbzhKN20wdzl1SGZMMExlWUE4QjNiNElwRjcyWStMdXg1SFFiNEx3ZTZEZWFrOG16UzRoYnA4b1FGOEhVejczRHJMZktQZmhSTkwxb2ZEMWZCOGJ5UTRlZ0o4amJEOEl5VjM0OWdIMzRQSDBGbEk5cVZCVWpwODVUVDhnTS84amdvOEtXbjc1NUlIbFU3ZjVNTC80S3c3NjNMRW1rdWZ6Sk5Mays0QWtxTThjblQ5MVZLLzRVUTRJNHhUN3UxVDNMWmFjNjRJQUhmOEkzSzM3SFRGVmhuZjNEaUw2UnlIM3hCOFlxaTk3eUw4M2VlODJyQS82eXU5NDR5NDdwcjhKUGRMOGIvSG1zcGY0eUo3NW9mRHAzbzhWZGJSODRtOUV2SjhMakg3K0o3ajlSeFl1ZnNUWm53Ly9IYkhuNzBmNi96a0VBa0Uwa3FWNW9xbTZzcTM3d3JFOG4wb0Q0Ym0rODczL0E0UENJYkZvREFvVXRDV3o2WHhDbzFMYTRtaTlZck84aG5McS9ZTEQzNEFCb0QyajAyb3RWK3grdytOeTJHQnR2eE1CQnRHODcvODMyZUFORWhZSzZmRUJLaTR5TnBMVUdVYXV0VGxXV3ZvRk5DQkljblpxQVZCZWlvNlMwaVI0b2hxQkpwYTJ1allGSEZTbDB0YmlJQ1M5NnU2MkV0ais2aUE0c1BJV0c2Y3dQQUF2RXdvVEgwTkh2L2t5MHk0d1NHZG5KNVJWZTJjOVlHdVBrMHNKZkhQcUpaU3pHeDhvbzhmL0NIZTEyOSs3bk1zUExqamcvNzlTNE1ETXZuZ0RESWdEcUhCaEJBTUYxNEJheDNDaXFBU2FIZ0liRU80WnhZN2pDbUQ4aE5BanlVc011ditGVFBmZ0FNZVNMbytCVEtscVpjdVhOdnRZM0NUekRvS1JOMzlHSTdnVGlKNkVRSThxaW9WeXFKVUIvU1FpamJvTEV0TWRLK3RKelFwSVlBR2hWWDBVYUVCQUsxbFhBYjdpS0NBQWF0bTJnQkljdVBnVlFBRUhZOTNpRlVWTnBoNjdlZjh5Q2tCQXdJTUNWTkVOUVBCQUFJR2FnQi8zQ1ZENHNEZW5haGxnaGF4WlVZTEJoUkZRbGpTQXJnRUJETzV1VGwxSkFRRUhBZ29zQ0cxb2RJSExxRlhqdGlTWUFHL1hCbW9QQ0M1OE9ISGlDMnJYTG0yYWQrN21yam9MRU5BQU9mRGkxb3NqS0xDWU1XOENtWjJERHk5K1BQbnk1cytqVDY5K1BmdjI3dC9Eank5L1B2MzY5dS9qejY5L1AvLysvdjhER0tDQUF4SllvSUVISXBncG9JSUxNdGlnZ3c5Q0dLR0VFMUpZb1lVWFlwaWhoaHR5MktHSEg0SVlvb2dqa2xpaWlTYzJGd0lBSWZrRUNRUUFFUUFzQUFBQUFKUUNaZ0VBQmY5Z0pJNWthWjVvcXE1czY3NXdMTTkwYmQ5NHJ1OTg3Ly9Bb0hCSUxCcVB5S1J5eVd3Nm45Q29kRXF0V3EvWXJIYkw3WHEvNExCNFRDNmJ6K2kwZXMxdXU5L3d1SHhPcjl2ditMeCt6Ky83LzRDQmdvT0VoWWFIaUltS2k0eU5qbytRa1pLVGxKV1dsNWlabXB1Y25aNmZvS0dpbzZTbHBxZW9hd29FckFRT0FyQ3hzck96REsycHVEZ0pyYlM5dnJhc0NibkRMYXdIQlFVRHlnTVF6YzdQME5IU3pjc0FCUUlFeE5vaUNjY0l5OVBoNHM3TEF3Z0ZCcXdLMjZUZEFnYkp6T1B6OU9IbTF3Zlo3S0FKREFJUEMrVFZHMGh3d0lJSEFoem8yMWZKVllOa0JDTktuSFpQUUQ2R2svcjlDeml4WTBlREJoUmlYS1NBZ1FHT0hsUC9xaVNIQU9IQ2tZVUlORUM1c3VaRWN3OFlySU1KU01GRGdUYURxalFvUUJqUFBnb09QQUFndEtsSGtDK1AwZ25Bb01FM3AxaHJJakRBUUtxZHFnaXlpdlVJd01DQm5WN2JCSEN3ZEt6YmxRQWVSRTJiUnVuYnV4K3ZvYVZMSnNBeG9IZ0RTd1RnSUFCZk15YVpDbDRjRVlHRHZZZTVIRERBdVBMSGRKRy9KTEJxdVRQQkFvVXpZNUdwMkxQcGdZNE5pN2Fpd0VIWTA3RHBtVjBkeGUvcjJMam5EY0JNKzRsZmlMbURod01nQUhMdklqNUxDMTgrTGZYeEpBd2VBR1pPM1JudjUwSVlGS2pPbmVKMTdEK1NkeDhQRGNFQjFlQjNITGhOdm4wejUrbDFFSkR1dmo0RTR1amoweERBM3I3N0FRMFlwOThMMnZsbllGbjVEZGdDLzM4R050aU1BUUlxaUFJQkN6allJSUlTcnVDYWhSYnVGbUdHRVJDd0hZY09BdEJBZ2lBZW9CeUpGNTRJSWdrSmpNZ2lod0tncUIrRk04NklINGdLVUpZamk0NUpHT09QUDVxbllBQUNFRmxrVittdHRhS1NKQlpnRkhnTTlBY2xpUUZpUjRDVlY3TG80bkVLVk5nbGtZVDFGc0FEWTE2SkFKT3JOWkRtbFF2TWxaWURUNzZaNHdNZjhrUkFuWGJPK0dWYVlmWTVacGwwQmVDbW9GMENJQ2RHRGlENlpnRTJNc1FBbjQ3bWFFQ2syZ1JhNlpzTzhHVG9wbThxT3BLS29OcFpRSjZwSkNCbXFXbld5TTZaclBZSkFKdmFOQnFyblF0TW1Vc0NYTjU2cFFEYUJDQ2pyMmtDY01Bd0FsQktySklMb0FyS25zc0tDaWtxd2thTDZQK3NxZGhxcmF5TGVwS0FzdHRDQ1d3cHNJYUw2TEdqVEdxdW85T0tvdW02Z2pZZ3lxSHdJb3FBczVWOFc2K2pDMkJhU2JYN09vcXRKd2NFWENrQXVtTHlicGYzWE9QTHd3SWdFODkwWTZLN0NiMkNLck1BT2hEMzhsQThvVnA4aWI0NWFteEFRcXo0T3dNci9nQ1VwZ0dib0pubUFNZzBrRS9DTnF6aXp6OEFVRXdqSnVxU3VKVklTZ1RnaWdGWEtmbUF5b3dFc0txUzVoaUFNeEVsUld5cEpRVjM2QksrUnhBZ0FFMHM5dnZ2MHl5Q1JEUVVCRXdHTG5udFJwS2tnVFNmblFWVk0vbHNYN01aOWVwZlMzSmZrZFFEZW8rSE55UVl0NGRBQXdRd2ZRVlZ3SlU0dFNJa2wyZ1cxMVVrNEFEWjdlWDZpSS9rR2VUQTQyTk1CbmIvZlFnL0V2bmVYS2xSa2dGckIxYzZJektQUnhqbFlxeVZOT25kRW5LNmU4VFJEc1p2dklNdVNPelZsVVhySEQ3WlRaMm9rTGZ1ZXVwMXRJWTVjOHdmd2psMUMzUzZod0lDS00rYzhIL3MzcDJSZXhEQWVuZXZGM0s5Y0x2bGJnZVNnUXVYdnU3T3d6YUFYRDF0V0R6NGVxeWZHNENLdzBPQnlETy9RSWlQZXNVcHhBR21oNXNDK3NGL3NRRmdJa1JFUVA3ZDRZRHljeFVpdHJROEM5SUJncWZaVFFEL1FFSDBlWEFPVGtPZkJoZFJKZXFkRUE0Z05NMnBJbEhDL2YwaGhjVmJvU1AwRjV4NzllRnR1Vm5BOFNDQm8rcUlyUTh4dEo4T0lZR2srZ1htaUhuSVdnUEhkWW4xR0hHRWJVamlhU0NrTU9MRkJvcDJrR0pzWnFpSi95WmlENHRxMEtKbkN1QytTQVFOTnd2QUE3UmlRNzVPS0dCWXdZRVpIc1NZRzBKMXdsRGVXNHdlNllEQnl2enBFMi9NNHgzNGlKdWxpVUpWdVpFWENobkltSUdOb2x6QzBkNGNDTEFjUzQ1Q2pZSVIyUnNvdVJneW1pS1J1R25qR1JUZ1JMdzQ4aFNvN0l3RDF3REt0d3hBazlUeUltd0E0THZma2JJeW5qd0ZKazNEeXpjQTBUT2FJMFlzVFJOSE9PalNOSzhjQnAxZzAwdzJjUEkwMFNRR3dIQkRSVFpvYTVlaUhBWUh0OGdHVmhJVGwrdzRKbXhVQ1lZRUJQS0pMeHpGSFdHRHpqTGdVSmJzUk1VY2Q5bkx1Y1ZQTUpmaVNTM2RFazhzRERRcllCekpQYkc1aG1kYXBwNFlZU1JqRUlCR0swZ1VvQlZOeFVIZEFsRXhYUCswa2tPRXlUNHRVd0F6RlBJdUhlWEpOejB6Z0lKV3daeW5RWUJMY2JHd3luUXpETDhjaTdGRXMwekdsTlFNZUxSTVF0T3lUY3Zra3dxRkU0eE1hWE5TdklRVERDdTFURFlqazFTbFp0UUpET2pNVUNOVDA4VlVjd3d3OWN3Z2FmUFJ1NHlWQzJFVkpIZ1d1cGlqV2lHbmJ6a3JVMXNwbEpCaUlhaDRrYXVaNE9xVW41SkJuWlhSNjF3dEE0Q3JKcUdzWXhHc21Sd3FsZ0gwVXdydU5NMVRqOU5Vc1R5QUN3R2dhMDFTK3B5TnFrU1NaR0NzVXlYVVZiellkUXFpRmN0azArUFpqaFMyREZuMXpHcXhrMWxnR3BZSXNWM01UU1hFVjVWd2RndTE3UXhvTThTcnlseDJjWnBWeVd6ancxYW5JTUFNVlEyTVl2VVRnSDlpeGEzL1JtaXRTbllMb3ViV3RRelh0TXgwQjFSWnAzeFZDdUdWN290T0VOeSttcUczVGpudWVtR1UzSlJ3MXdud3JjbDRpVnRmZTh3MENsRjk0bTJaV3NuSC9pREFZem52ZkVtUVhwdnNkMjc5VFFsRkYzd0N4R0pGdnI2SmNFUzJTdUVJV0pnZ3J3MHRZZjhMSGdTUEJicy9pRzVXUXR6aEU2aFlJdmZ0UW9NRmcrSUJhZGNqQ2xhQ0FnVFQwaGFyNE1iUG1EQVo4aHVVMzNZWXIyTlpMaEdRbkJVbGQ5aTdFWEV5Rmo2TWxRZFR1TDEzZVc0VFpqeVc0Zm9ZQldtVmlGOXJwK0dKY1BqTDNDanpRR0s4NU1DTUdjMFRTa21Ob3dEWXV4UVR6aWt3TVZaWWpBUXVyM2pBSUtxemJPeXA1b2ljRnM4aUFES01sMEJrajVCNHZrUysvL01ZVXBzVkx5UGFCTlVOREorTDRHZXNXUHJTSmdqelBOaThoVTRuR05RcmlDeGVTTzBENjlZa3g2Z3VBWldic1drd1VOb3BQWTUxQ2dTOVowQy93TlJDY2F5dVZ6QlFLVjhCMkZsaGRheVo3QlJsNjREWlFqR3lyak05RDFoN3dkVkNzZmF3MDR3WEFCZ0IyVFo1ODdaUGtBQjZ6QmtLZXM1S3JzZU5BbDQ3eGRnMmdMWk5KTTF1Rkx3WUFoZ09BNWJ4OHVsNmo2RFJFOUd5RU1wOUYyZHZlOS9QRVBaZkorcHJINFBiSnZDZWdhTHJJWEIvcHlDMzBlaDNGeFR3enFhY0c5RVRyNGU0ZVlCd3JCemE0aUo0WnEyL0VQS0lXSm5kb3M2S2dWbVE3bkNqbkFVSWwvWm9LdGx3T0x0YktDK1hBYmFmTXZOWXE3UGlZcEIzcy85dnpvS2hrNlhuREM0NDAzSE9ubzlqbFRIYW5ucUlSdXVEbG90ajVWb25RVzVIL2dXbjE4VHF5ODZ5RHdKd2w0aWpmRHZyOWloak5CNTJFZXo0TG1nblFjMVhndlM2bjREalFhOUN5Y2NpWkwrandPdmlDSHpUMytKMnc0UGg1eVozZkFvNC9oYXd6NERnaEpjOEhHSStGckpyUGdLSUQwZmo3YzM0ejdzaDlMb3BlcjBwNzVaODI4RHNqVEY5RzFRZEdJUDdIZlhTOERYR3M2SnoyWHRCNlVJcHZPOUpjSGUzakw0RTk0Ykw4Tlh3Y0tIazNkKzRoMGJXWFZEb2FkaCsrVm1BZlVwY2ovMnR2NlhvemZlSTZydnZoRm5QRytyK0JqaEJlay82eEpLZjBMcDl2d25NM3hIUHUwRDdBM20rL0pFQSthWUlmLzhSZ0g4RFlWai9tSWRRQUJnR25DY1crbmR6L2FkY05kQ0FIbkY4QjdnRTBSY08zTGQveFNjV2l2ZHZZekVBNkRlQlFVQjdkalorZFhkcktlRnRNOEIyWTNHQklHZ0Z3QmNVMStkNzlEY1JLTFo3NzlhQ1hCQitXdkdCVERkNE1DaHhPb1dEWENDQUV5R0JuMWVCelRCOUowQ0U0N0NCUW5nRU02Z1M5bmVBTnVnVWFKU0JrZmVFaThPRUViR0FmbGQ5MG5CeTh4ZUVXbmdGRU9oZ1pVZ0N5ZmRaTWJDR0h1R0VhUmdFUHRocmNTZ0NWWmh0TWFCKzlHQ0VkY2dEU0NnTk1maCtZQmdOTUtDQzZzYURmU2dEckljWC81ZUdKdWdSK2FTREVUR0ZpV2dFTHdoeGxlaGhibUZ3Wjdob21iaGxwZlNKaHBnVkxHZ0NseWdSai9hSk5xQ0hOS2lLLzZ3NERpallBb1BvRExHb2lvZWxWcXJZaVJLQkw2TVlYN1pZTkZ3NEVQUldpWkpvYU1Vd0Z1ejNpem1naTl1bGpCM1hFY3JHakFPUmlzcjRBblBvRkpaWGg2Y1lFYVU0QWhVNEFOVjRCSDhZRGNtSWc5SkljUzN3aXVGQWllR1lBNHVvZHRWWWpBVFJBbU1SaU8wWUE5dW9FbUlZaDczb0ZPNkRoVTNCaC9lb0F2TG9FZXhZaDhFNERjdFZrUFJBZ2dONUF1cElFRjdZZlVoSWF1YzREN1g0a0R3UWhTa0Joemk0ZHg3UmpXNDRFUWVwa1lXWWtQU2djTzNJa1BNd2hmbFlEL1pva3J1R2l3UDVqQklCamlvUWtXRW9renR3alUyUmphNDRGaXN3RnRUSWt4RXdrallSazFyNGlLMklBdjBZRkRocGxEZndqcFdIaU85M2tmL3owQzBzS1E0bEtaVXB3SlNiSlpOM21KUXBzSlVXNkpVMllKWUUwWGYzV0lCTGh3SWdPUkZLNlpVdkdZRkdhWlBjT0pOTmhwWTB3SkU0SnBVb0NRMmVoNVhpTUpIdEdKanpzSSsvV0pjdG1RS01PUTVXcVl5RU9ZbGUrWTJPcVc1OEtRTSs2WEZlT1prVWNabFlvWVNacVlZMGFaUitTUThwZ0pjRDBaV1pTWlZ1b1pKR3FaYlQ4RGlxV1EvZE9Kb2tBSllyNFpHSktKdlNzQ2kxU1E5emFaSyttWktST1lGUEdSU0xJaGJEcVpHUEtSRjBwNUhCYVc3c3haeTR5UUtuT1JGQStaRFRtWmduVUp6UFlKaTJpSmpqMEp5Sk9Jdk53RjNnNlF6aStZbWVLWXpIMllMUEdRN3FxWURYbVFLYkdXM1hPWi9XOTUzMmVaOG44SjcvOVpDUmZNbWZnT2lmV2RHZWllaWFISFdmQmhvTjlaa1ZSVm1ONDFnZUFQcWcwQkNodUFhZ0pyQ2U0eUNRbjRpaHo2Q2hUUkdWSENvQ0lqb09yRG1RS1pxZUNMcWhKMnFIaktHZ1d0aWlFRUNpd1JhaklrQ2VpWGVpTm9xalVLbWpjWGwrUG1xZEhTb1dFeXFLNkJrTzVmaVFQL3FpL25paUFrb1BiSW1iVDNxa0NYcWlQQm9PTkpxR1Yxb0NIZ29CWFNxRVExb1R0NG1XVy9wVVlUcW1MWmlmOCthUXY5aWQ0eUFuQUJrVWlxbVJGVHFpT2lvQ2NscVlLTkNuL1htZEl2Z1dWWHFmZ0RvTndKbHNEcm9ZZHlxVllTcW1mMXBwMTVtZFlyYW5JdkNva1hLbzBiQ2l5dWltTlFHYk1VcXA5Z0NhN2pXYVNGa1Q1dG1PVTVwdy82VDZrNk01cUc2eG5hWXFGb1hhb2laS2w0c0JvdmRvbzU1M3FnU1JwRm9vcXA5aHFTU3dwWVA1bjFKSmJYZ1JkNWFxcVJtWFowWXFsYXZhaE1RNkFtN1pGREVXcHRFWmpyQ3FVL0daaVdOWkU2c1ZwcHhhaVRZNkRVM2FtU2VtQXM3S3FrWVpycUZaclNSd3JublNyczhBcHlEb3FXY25yeU93cGJkcUFqb1pEWTFhaWI2cUVyekprd0Zncjg1UXFDZ2FyUS9acldJeGpNVDZxRk00cmMxUXJta1lzTUxKcnlOZ3NjMFFuV1VLWWlZcHJLakJzU09nbSt1M0FvOEtyUEtucnl2QnBwKzRwSkNxQWdrckZ1bjZoSG5xREJpTGx0ZmFGRXl6cEFjN2dRU2dzUGFBcnc5SnN0SkFvQ2RnbzBvN252Rm5zb25XZVMxUXNOT29xditMMFlqeUtyUGJxb2syRzQ0TW1tUlF5dzNHZDR4aXNiTUhlSzdTWUxab0diSVI0VUZFQ3dFZXFJendpbXNzcTVFYUN3My9tZ0ozK3d3RG02OHlLdzFiRzZNMVc3WXZRTFgxRUxRVXVSaXlHcXFiK0FKSUd3MU5HNGVQcXBCaGU3SnVjYWQxK2wyWkNHVmlJWm82K3JkWUpMT0k2M3NleTZXVkt3S1BHdzJlbTNKa21JZ1FxNEdueTdwZEZnTnNTeEM2K25sb0M3bmZXbzJES3hZRDI3TkNjYVlIV0xxQmVycXBHdzBWSmJPZytvUUptQlVNSzY5Nyt3eXJhN24xcUkwekdyc1I4TFZCRWJpeTVoYlBDNEMxdTMzWWU1UnZnV0xhYXhOOTYzdk5peFhMQzdWL0c3a3NFTDNPSUx6ZGg3TE5pTDNIQ3cxd1NMenRDNEJ6NjF6L3V4dU84dXNNeHdlOFFDZUVMcnNTNlF1Z2s5c010N1dsdEJiQXFHYS9LYUcyb3ptTzlIdDRiNUdxTi9lL0pWcTNNbm0rbUppV1ZUbUI2K3RwNHd0NmR3Rm9mM3VqRTVpN3VqdStJbXltT1dDNDhBbStsWEc3bGRsMk9kREFMaXgvSjF5cTJKdkFFYkc0aXhlckV1eGpBMnk2NDB1OEQ3SURUdnpEM1JmRjBUQzZhRW5FeHFnRE13d1hTYnhnQnV5dEtWeWgzNHVQWnRWOVM0eXVLYnpGSzhIQkVlREJRMkcwaUViRkZwckNGQndSSHdqQjh6dDhQdnliS2J6SEdmd0NWQXl6M1lYSDAvREhPZ3JERUxEQUs2REdLakc5OVphenp5Q3hZWnUvMFRER05KQ25iUHhsYm95dEtZekZFWkhKSTdESFJqeHVRUXpBS1d6RGRpd0UvNGhzeUxwMnh0T2d5UGY1dWsxaHhTZXd5UTdvZDNJc21Da2NnSUVCeHlWQXlCRmNkM3NjRGYxcnNuSnN3ZGdaR0t5TVo1NXNYeWtzeTV4WkJNRGNETERzWTRnY3crUHJ5aGNMaFpyV3hhdVJ5OUNndzlKS1kwZ3d6ZmgyYzhPOHFjLzh0dXFNQkpTOGsvNm1BT2FNdHlCc2tweDdYVXBnenBLY2R1SjF5b0tCekRId3p1MDhicWg4Z3Q2c2l1azhzL2tzR0tEOEhBSTlEamQ3bmMxTW1VeVEwTlZNWGkyOGppbXN6YzVRenkxd3pmZmgwWkZ4ejY4cDBvdXpBQTI5R3BBTUFiU3NpRjUxMEJoUngydXNCemdreUNxbHVMNE1BeXU5elBwUjBCSUcwMHh3VC92Y1lWK3NxRkF3MFJFUjBkangwSE9hQjJ6bHlOU1YwWkVNMVA5Nnh4aml6QmRGL1JZODNSZlQwOUo4UWRKWWNkVTFBTkloL1dXbC9HZDR3TGxLVFJzckRRRUFyUU5aalkwbXpSREZKVnQ0VUZyUHdMMnNWUmx6SFFQZ0RBRm5odEV5aEFmbDVkVTg4ZGRTVEFYS0ttRHpKYy9FUk5WSVVGNHVPbDlNWGNtUUhXZFlkOW1mQU5hbFp3ZVNUY0RyVmRuUllOTXc0Tk1Tc2RWZXdkbXRkMEdhSmRiYklOcjZDMXp6YkIwU290bzZsZE9WVTErdVBReTJIQlNqWE5GU05TQzJQUllYN1FXZlRibjZBZHZRVU54RllOb1NZZGlwZ05lbEtRZkhMWHJ4b2R6UGdOcElzTmlDRWRoOElkMVdWUWZWTFE1ci9kcXlwTmt1TU40MjRkMWVvZDUwSzk1Z3FOY3dnZGdkTFFiaHV4TEpKQm9qNVJrcFRRWC83azJ0Yk0zZklqWmlvb0hkR2sxSVM4cmVHREZNV0FkL2hMWGJuT0RjZklmZUlmaTNQdlRWSEoyMHVFMEVjWTJNaGRMV2Zqb0hQZldUZlowdnN5MndhSERmK3VVVjRNMFk1YjBGc0QwQUVJNDE3RXdQOHAwRk1vM2ZHejRKQmk0TzJpMFpsZEUyR0FIaTByY0d3NzFucEkwSUFVRGs0YURnWnREakVMQlVETkhpV1ViaE9IRFdZbkhqbjFCRURWVGlUQURsMU5EZmp6RGlndUhsMzBaTlpsNEk5RDBPekowRllQNE1RcDRLRE40Wk0vN2xTclFyR1Q0UUwrN21mVlRuaGtEbWdxSGxMUGRGYWU0SDNiTWMwQzBGdllzYmNTNEtjOTRaYjQwRk9XNFRBeURtZ3NEbHdkSG9idkRtMCtCSG9nRG8zVzNsUDNEa0NWYm83OFBrLzlVbTZrQ0E2dUlnNVpzOTZiNXQ2a1VqMVNsNVNKcVFMTlJ4NFhaQTFnTWhRcDR3VGJraDYwdUE1WVRhNW9CZ1JSM2sxSGtPWWt1VUw3enVuWG53MzFsaFNwVFFRdFhCckhiZzJNdlQ3RXpVQURWZWhIelEyM2VSSlpKUVE5WGg1MWNnN1ZtMjUza0E3TUZoNlZyQTZkSWdRWTZRQUxEZTJYMEF6YkFSSkkvZzdvcjBCL0tldEFta0NPYk9IZkRPQlF6dzdWb1JHb3FBN0lndUNBRS83OXdPQ0F5dzdDa2g2RzhROFJqSjhBcEU2eE9SNkhLM1BGd1VDTFpSSHhnUEJ4cXZHK1FPQ0xiREhTQWZPdDN4QU9oK2JPZFRIeTgvQmlyT0dBWnhIbjFBR3QxeDh6QS9QaE1mQjhkZ0lFQ1A4M3V6OG1IMDdCL2Y4TzFSQU1hT0JmOEpVUFArY2ZSa2tQSzl2Z0E4THdjOTR2RUd5d2hZLzNXSTR3Ym00L1ZPY2ZLTDVDQTdyK281dzBQa1lmVlBiaDhta3VROFlCSW5qaFVIWHhjY0VqYzdQZ1RTNHg5NW53YWcza216QVFaL28vQ3JGZ2xoM3hHSFEvYzBzQmtXUDhLUW9PNHNCUnJDemdKZ1FTUXp2d1lKWHpJUDhCaHpNeGwzTHhTYnZ3YVVIMExYWUF0OXJ3SWxVVGRLRWt5VGIvWjI5dm1PencxcGd6UWtVajJUUU9YMTBSTFlRRFZlOHdESWdQaXlkUGxvY1ByVTBUQTJRNk90M3pnc01rdVJVRlFsY3c4dUVReUYyQXBlQXc4RklQdklaUHhwUU9wcXZ6SDQwQXJ4MUFvSDhERTlBeWVyWHdlc3J2UGw4UDd3N3l1YVRnbExmaXZ3Zi8vbGdDanpYd24vT1E4Q2tEaVNwWG1pcWJxeXJmdkNzV3cra1gzanViN3p2ZjhEZzhMaHpqQTdJcFBLSmJPSmJCQ2owaW0xR2owQW5Ob3R0K3RGQ3F6aU1ibmNjM3pUNmpWN2VUREQ0M0ppQXRHKzQvTnNBR1B1L3dOR0VHVHBGUm9lSGdFa0JESTJqZ1U4SUVwT1VvNHNLRGhtYWhJcEZGUitndUlWQkd5V21wNkZwcXB1R1p5NnZ0bzByTTdTSG9YQjRwWU8xdkwyb3J6bEJtZGkrUmI3QWhBSUt6Y0dlQm8vcTE0dVR3TXFMRUJqZzQ1U2Mvc0pFR2FIRnphUWRwdWJCY2lLcitNQjNKN0RreVZjczlkL0lmVEY2NHN4Mk5uL2IxbXdhQjlCS2dFRUFFeTRaRnZCaGxFZ0tZeG9xNXpEaWtJSStKT29VUVVmaXg2Rk1BQzNjV1FKQk1rKy82TDhvWTRreXdjVVU4TE1FY0FJUzVia1l1TFVVYWVtUm53NWYrTG94MU1pZ29GQWozNGJDdkRtMGFQcGxQNXoxM1JxQkFVMG9ZWXJnSWxxMDA1WXhSbll5clVwQTNwZml5RUFObmJxZ1l4bmV5M0l0NWFxQTVGdlZVbWRPemJwM1ZrQUhPaGRlOUJ1WDBvTnhBYW1xbUJsNFVydVhpWld6TGp4SVFHSUkzTlZnSkN5cE1PWUE4OGt6SG1ONTgrQkY0L09BOEFBWk5OclVhZFdzN3ExYThFR1JNZldVcnAyNUhSdWN6TUJzSnQzNU1XNGdTZGlTdnh6Z0FObWtSOUJZSGw1YmMyL29jZEE0SUEyOWNnTUltR0hvWjE3OThnT3JvZFhFYmQ4OXdTMzA2dDRJSmY5Y2dMZzRaOVliWlIrOXdQMzhXdDNHWC9MS2VEQWMvQXRBUC9ZZ0FNV2VCeG5BeGd3MzRMME1kREFBT0VKdDkrRUF5YlFBSHA5RFNBZmVSdDJGd0FEQmx5WTJtb1NrcmpoaVE3eUJNQURCNHpZSW4zTlBRQmpUVExTYUtPUE9IVDQ0VWdJUlBpamtVRjVpTldLUnpKNVEzUHZiVFJBZ2hvMmVXUUNEaFNRNGtZekNsaGxrd1VXb0tNeEJUUndrcGRuQXRsQW1BQVZJQUNWYU1LWndBRkpRZ05BQVE2WUNhZWVPUkRnd0FOQzBySWFubnNTeWtNQUJBandRSmFxRElEQUF3SVFVR09oZXg0cWdBRUxhQW1LbEcweTBPV2tuK2FRQUtLS0lwQXBHd1BZYVlBQURPUUpxcXMrRU1DQUFHcVdtZ2VxQlhEYTZxdTdBbkVvQWI4NllDbXVBeEJickxISEhyc0FycmlxdXVxdnZFSkxoYWlJenJwbDdMRElZb3NzQWdVOEN1bXZCSGdhcmJqamtsdXV1ZWVpbTY2NjY3TGJycnZ2d2h1dnZQUFNXNis5OStLYnI3Nzc4dHV2di84Q0hMREFBeE5jc01FSEk1eXd3Z3N6M0xEREQwTWNzY1FUVTF5eHhSZGpuTEhHRzNQY3NjY2ZneHl5eUNQL0VRSUFJZmtFQ1FRQUVRQXNBQUFBQUpRQ1pnRUFCZjlnSkk1a2FaNW9xcTVzNjc1d0xNOTBiZDk0cnU5ODcvL0FvSEJJTEJxUHlLUnl5V3c2bjlDb2RFcXRXcS9ZckhiTDdYcS80TEI0VEM2YnoraTBlczF1dTkvd3VIeE9yOXZ2K0x4K3orLzcvNENCZ29PRWhZYUhpSW1LaTR5TmpvK1FrWktUbEpXV2w1aVptcHVjblo2Zm9LR2lvNlNscHFlb3FhcXJySzFCQ2dJQ0JnVzB0QUFRdUxtNnU3eTZDTFVGRFFJRXJzVWlzQUxBQzczTXpiakF0TEVIeHFnQkJMRUZ5ODdiM000QXdRZkUxS01KRE1rSTNlbnF1TDhHQWd3SzQ1b0pCdzBGNk92NStyb0xEOFB4OGlwWmN6QnJuOEY4M3d3NEVCZXdFUUdDQnlOS2hQQ3R3WUVFRFJVcE1IZHZva2Q5QllZRnlFam9Xb0dQS0NmLyttTklzazg1QS9oU3lzeUg0TjNJbG5rQ01HaHdhNmJQZ3dBTUhMaUpzMDZDQmpGL0tsMG5GR0JST0xCT0xwMTY4SUVEcDAvWndFcEt0V3UzQlExWVpqVkRBS2JYcy9zQVBHQXdGazJBQTFMUnl1Mm1sZ0hSdGw0SThKekxsNmFEdTNpN01IalF0M0E2b1lHMUtFQnF1TEc2dFltMUpERFEwN0ZsWmtIRlJtN3lOdTdsejgwUU5NQzYyY2xpcnFCVDUwSnd0ZlNTeWFwak8xc3cxTFVTQlE2MHlkNnRxd0JiMjBRWTZPWk5YSmNCemNCN3ZDVmN2RGs3QWNsOXZFWHR2SGhOMHRGdndLcGMzVGtBQWRpenh3amdnSHYzOHc4d2lxOVI5cno3WEtQWGoyL3d2bjZ1QXNqbHB5RGcyZjc1QXVIcFJ3SXMvaFVJQVg0Q3FzQ2YvNEgrcFpkZ0NRSHN4V0NCRGo0NEFnSERUVmlmQWVvSlNKNTVHdHBuUUlEUkpkQmZpUGJGSng4RDFLRm9ud0NBSmFjQWN5NHlDTUJmMlFWQVk0MFRBakJOZEJHQ3lLTi9DM1RvbWdCRDFsaUFrWnNkSUdTU0ZNYllGZ0V0UW1rZ2pKc3BjS0tWTmpxUVdBQUdjRGtrQXZuaGhLU1lQQmJabHBOb0p2bUFsQmxSMldhU0RUd1Z3Slp6aGdqQWJ5MUZtQ2VVQ0RBcEQ1dC9RdmttU1JnV2FtV2RBWUdwS0pkN05rcmZvMVl1UUdJcUJEeEpxWXNHd0psS0FobHVPcVNYeFp3cEtwZVdGblBBcVdnZXVzcU1yS0xwSXl0K3hpb21Bbnlld29DbXR0YjRnQ3FnOXRvbW82Wk1LaXlhcVpxUzZiRnRMdURwSm80eTIyYWtwQmdycmYrWWFvWVM3TFZ6a2dxS2p0ek9PZXNudTRhYjU2K2ZLQkNxdVl0NnNpcVAzd1FqUURobEtrakFOZGhrZytxemt5UlFwWXZ5TGtUQXBTaFlnKzhzNjJyb2FpWmg5aGpTT3dUdlFJKytQQWE2U2JsamlsUkVBZzdJa25COXlWb0Nyb0VoUlV6RVFCM3BXZThqNzZLSXdFb21DOEhmdjlVQklDZ2tkOXEzZ0VJM1M2SEFBV1pOK0dNbHBocW9sc1pXNkpTTWY5UktvcTU3THg4UTh4US83MmlmdDVJMFhPQUNyWDFoVFFNZkV6ZjBJLzUyQjFiUFlPajBBSy9GRVF1SjF2VmRkd1p1QmJDdEduUmsyMzBaMTFON2ZRM051eGtRQ2R6bmlZWjJHUXhRVnAzZ0R1bmRtR2g5bDZHWDQ2QXgzb2pWemhsT1IyN09XWjdJc3J4QnBvZi9BSUNuVmdBajBkWnNRSzUxTEVaNVllZ2lrc0RyY3pYQTcrWmhxeFk3SXBqenR2b2ZCK1R1bU9lRXpDNGJiYmZmQVZ2bmlmUWVHd0pTRDVLQTg1Y1JINGp4cXJHR3lIYk5XUjhJNGJKQkx6djRuM252RXUxZDNaZzg4S1UzWm40ZjVLYzJJaU1FVU8rK0lOaC85dDM2Z3JCSTNQdDZjQUJ4bGdTSkJha0dnSGJJWC9VaU40Z0R0Szh2YnVzREEzeTNza1FJNTRCK1VBRDZsb0tnU3doZ2cxNFoyeDRVQ0JvQ1hxSThxUkhoSFFMd1FLcG9UeE9wVXczcjhLREI1ODFRSVBFcmpBcnBFQURobmNWMm50aFdhbXkyaHg3R0JtK2RFS0psYmlnSFBNMkZUS0pBNFJBWmlBWWZ5c1dFb0NoYVk0aG9oeHpLQllpajBKSnFuSVVIL3kveTVVYWxVS0poTEVZSExmWUZpcWNRb09udVlDM0xaTXNVYnV3TEdlWFFNc04wQ2xoVy9HRWQrbWdaSktLaWJJNDVYUndTNEppbXJhS09qdGtoR3hqNUdUYXVvbGFOaWVBYUFnQkNsQURJR0tDekRCZmZ3TW55OFM4VVVqU01KTTFnUk1Ob3NoVTUyMXNjN0llV2NWRkRqWE1CUUFYRFlNYXBPSEljZVlUZ0c0STVsenVPWTJTRkFjQXB0eUJIUFI3T0ZhRnN6Q3JKUUlEcUxUT09qVkVrR2lqWmw0V1I1R21OdkdZV1dHZ1pySkVFWTMweEpCbEsyUmR6OXFtWFhkRW1HbWlaUGlZMkJKZG9zYWNYbk9qTGFXWUVrbnhSSnhtYW1jeG5OaXFRTXdFQUZhVkFURjhhTkNPRTdNdENxZGJKajRTc0xURzhJaG00S1JkakJ2OG1tbk9SSnhrUTZwTTlScWFoVXhFb0Y4Z1pVbkhLZzRSb2VhZ1dVRW9Wa3phcE1ES2RBanhuZ3NDMndMUXJQZDBDUi9ueVIrQkUxQ3MyM2NJRTV4SlVuNUowSXNvOHcxTlQwdFN4b0JNdHI3d0NPOUZTVll4TzlTQXFCUU5ObDlMVnNmeVVLcnVFQWoxbkVsYmd0TktGWnhpcVhNcnEwNG9hQkFFdVBjSlMwZUpQMjdCMEt2cnN3bGM5c2p2NW5IVXBXWlhDVmtOb29RZ2M5aU1pRlFOQk81cFhzOXAxSDJsZHdscXAybGdSUEhZaU9iMUNEZm1TVkFGOWRpWUx3RUkxdWRyWkVaeldJSFN0d21aUlc5bkFYTFVyN294Q0N5Y1NXOXZzTlNVS0pVdGZndHRhRWF6MkxGR2x3bGhSMGx1anN2VU11LzNJS0lzYmdhTXVwYkQvVDFBQVdsSkwzUklBOUNCNE5jTnlaeExZQjQzM0k1a2x3bXloV2x2ZzdMUWJmVlhNWmZlUlcrcXVkeUxjaGNKeHFUTGQ3bzdnclJHSkxDK0o2bDhUQUpncThTWENZUFZSM3RZdTFpRHB0Y0orejVMZkFwUGd3VXRKYmhPczY1TUV0L2ExeldpdUZCWnNFT0phdUFRZzlraGJpL0RYcVdEM3hDUGdNRGRNUEliSmVpWENqYld4VWpTc2hQTkdwTFF3SHNGN2Q3SGlsYzQzSDBXMjhKQWxrdGdoWVBnbm9lM3VVOE5iQmg5N1JNQkJIa0YwRHpKUkcxalpJQjR1OEdqVkVXWXJhRmN1Tk00eWlvL01EUkhUNE1remViR2FTZkJiYm1ENUMvejhTWU5ock9PZmRIa0dYOVlIbGVlY2d0bmltQW9UN29xY0NTMkMreDdFemVOaC83TXo5cHpsRm9mNERJNldDSThaRFNGSk8rUFBNQWgwUHByTTZRZ2ttaGRwRHNPcEFWdnFGTlJaS2FUZUFaeFRNdWhXbjhDTVNkNUNudU5zNjBLbnI3MHRFUFU2RGgza1dXODZEREwyeWJGN0xZSlpweVRYT1BCMEx4Yk43QWk4T2hkbHRzS1dJMUxmYXZkWkpnQWdRckkvQXVvVDk2N0NZeEQyUHU1YzdRaHNPeC9aanNHdUp3SnRXMk9ZMklxVjlqYWl6T2hWeTRUZE9KRHJUR3JkN2hNUWt0cGQrSzVTSUIza1RPdUQzeTlZOGo0b3plemhsTHNKWjBidXhVODg1b1VEd2RsWExuZ0xqbHR2TERqOElOMFd1UWpVVFJkZ20rRGJLTUYzcWVtejdDLzQreWNBVnpuSVBaTHlHcnc3SFRsWGVRUTRHVzhxekJzbC9SVzZDZjlZemcwRStFRGdNdG40bkdVZWhXc3ZwZVFGLzNrNklLNENpZWNENFVwWGc5YnpnZTZ3RzV3cURDZUJ2blVoZGJOYkFlWStvYnF0eDc2TmNPL0E2cDUwZXh4MnpsbTlxd0R1SHFINENydytiTDhQRXkwRU4veUYxNTZMdFBQOUlFRlhQQmd5emxqSm80RHAzZ0QydUNVaWVNdHJnZkFHaWJ6ZUgzK1FvcGNBOU4xd3V1ZlRjSE9mdEwzVnFPOEcyRnVRMHRXbjRlZ2Z3YnJib1o2UzJ1TDlJeTYzZlJOK1AvRGdWeHYzQnVuODZja3FmT2lpUmU0cUp6NXZiOEI0Q0hDOStWRUFmRXBFYjNtNk44UHVOT0M5UjhxT2ZTK1EzaU92cnpibW0zSDk5ZmVpNStYSGd2dTVvWHZGaTk4anNVNEJpYmVSL3ZnTGdmSXVaSHdxdDMvL3MvRm1TMEYrL3ZkNStaU0FLS0I5RVNGTzBoY1Jwc2VBU2RCNi8wYUJKeEFBVXhGdkN1Y1JBb2lCUDRCOEU5Ri9JbmR5M1JCYjNqZHRJTGdGRnRoM0swZ0Ntd2RlTXFDQlNnRi9MOWdFS1Roakg2aDBOS2dVa1JPQlhIYURWeENESHpHQm5tZUMzRkJtSFNnUkNDaUVUbkIrRXFGNlRqZ0NEbWdRK1VjQ0lyZ085VGVGUVRCLzJ3QjlrZ2VBTXRHRUtMQVUxOGVGUGRCeFU4RjlDVWlBelFBRDl4Y1I0SWVHVHhCNytVQ0NacmVFRXBGWlJLZ1BzMGVIUXhDSEtYR0ZHQWlFQmxGdmVvaHlnUGdFV1FnVU8yaDQxL1VDamJoMWk5Z0VMWWdTTnZpQ2s1aDZMN0JqbFlpRFp5R0ZuK2lGdXVBQ2dtZ1FmL2lKUGRDSEU2Rjgvd3g0aVJEV0FvYW9EMXVvaWpVQWhRRm1peU93RkRaSWlyZ0Focm9ZYk04WGpCR3dpZHlRZjBqb0RNUllCR3JJZk1TWWlLSFhBc2JvREtLNGpFQmdoK3VBaDVMSGl1c3doeW5nY2RZWUJLZVllOVlvaGluQkFqMDRFNWtZampNd2pkMzRpTGJIZUNzRGkvb0FqT3hJQXZRNEVldkloZTdZRElFMWkvbHdqeitRZzl1UWVMcm9peEJRWkw1SWhnSTVBOXdvZ2ZjSWtPdEFhdERvaHcwcGF3UkpqUUk1amlDeEF2M1lDN1Y0a1NXQWtMMWdqd3lvRkF6NWtieGdrdXlJaTVCM2tXN1lDeXVnRkdjb2tpS0FqZXBRa3plWWpHK29Ba3BoazlxQkZxbFlpUWhaSnVsSWEwQnBBeXJaRGRxSWZRK1pEbVdTaityQWhrbDVJYXdsa3Y5U3FRNzJsSlhkUUloVlNRSXgyUTN3NkgvbVNJNG93SlgwOTVVeDhKU0htSlJLMFZhKzZJbzJhV2taTnBZSm1KRzRBSmMvd1pMRVNKSzhFSkowdUpTOWtRSytxSlAzNkpKM1paY0pLSmozUVpnL29aWVJoeGI3cUlzVm1ROTNocE84QUprdFVKWS9VWTAyNll0M3hwaTRvSmtzSUpyTllJU0E2SXVlT1FLaVNaVTJpWmI3c0pvaVdZWDZrQUt0U1pvcUVKWkpDSm13dVEyMjZST3VlWkZzdVc2YTJadktpQUszaVpzbmdKZW5XWncvaVp6QXFaeExoeGJCcVl2RzJaTW5JSnBES1pLSUdZdk8rWmpRK1Z6U09RS1ZPUkhWYVozUG1aMCtBWmpMeUpsK2hwdlh5UXkvS1o3anlaUHE0SlhzR0o4eUdaNHl3WjdCcUo4dHA1ei9BTG9MODltZjQxbU1mQ1dkQTFxSy9Ka1MyM21QdzltUkNwcWVKcENjeXNtY3pNQ1hkTGlndVZDZzJ5ZWRFWm9QYVdlTEhEcWFEWnAzdUVtWE82YVlUaGlpek5DRUZxcVpmcmtMazltUW9Ka0M1WmtPREhtUjdvbGFCN3B5T09lWVBvR2I5Z21WUHhvQk4zcDU0TW1iUW5ta0NCcWRTdW9UTEVxQnB0a0xxYWFjcHRsV0xscVNrTG1sNmVDZjFzaWNiVldpR3JxQzNTbG9UaW9DYjdrZlAxR2p0cGlqRVNHWEFubVVLV0ZQSEttRlgxbWl6SENlQXFtbjlmSVRENnFLVmRvTFRRbUlYcnFTUGdtbFFDbVJFUUdtNFlpUUs4Q2NTWG1tQ0RHbGRGaWttYWtDcG1tcHdnZW5wWmVtSTZDYnE3RUNtS29MWlVxVzFBbXF1eGlrL3lyZ2k0NjZnb1BLQzRaNWozcUtRTFRKRkNKNXFNZW9xaUtncTdwUVpDVzZvNnFvb2o5UmN3ZnFxZDBRV0QwYUVSZUpyUFRGcXlKUXBSV2tGS2NxZkhyYUM4S3FuRXZSQXFLS0MyN3FoTEc2QzlWcWkzZmFqZElJcUJCNmxkQjZxK3NRZEw3b2pjRklxZDFZcUtwWXFycVFmNzZhQzdQcWY1alpEYThxa0l4bmcrV3FEdDhLZ3RmS0M3THBwQU9yRG1tbEZJRzZnaGpLcGREYXE5dnFBcVlKcjZPWXFoUGJhQ2dabVZBV2pNc2FkUnNyQW95WGl1eDZuOEVZcnI4NnNxYkdpeStncDluNmd2a2FHcHo2aWM3S0RlbTFGUFFxZFBLNkRuTDZsUkVyYnpXb2l2MXFaeXpyV0FjWUF6ZGJnSlhJcUJHeHJ5SzV0TTZBbjA2YkR2ODcyMjdFK2hQNGVhRkxJWGgwbWhJRjI2bTFWTE9mdUxEcWNFM2R5ZzZBYUxaZ2RyUVJJTFhORUxNa0FMZk1BTFY2RjdHOElMZmpHYkZiYTIySWhZWXpLcTV1ZTdDdW1HRmN5TGI3TUtKQVdiUzg0RktEaXBwK2w3YVlRYmFmMkxQTlVKMG5xdzU2dTNxQnU3SnVtN2tFV3dPSXl3MTJLM0tqU3hOdUt3SjRlNFlScTdnREtCZmphbzFWbXc0SjZ3SjB5d3lVQzJPZG13c1BTNlJUMGJmNFdIc1llTHAzbUxvaHU0ZlJacmdZS0xuTThLODJ5Ymk3Z0xFeUFMMjZBTGtGZDd1cGw3dVYrTFV5d1hDenk0a0plTEM5OExPUU9hUGtTN0liNkg5Wnk2cHVhN25mdHdQWWk3RCtGNy9jY0xYQk9LUEFld0xFNnd6VzIycmZ1dy8vK1V1YTdzdCtQTUM4RUZDN2ZqZkFBVHA1elRlam03c0NvS3NPenF0bTlycWJhWE9sQ1Z4OTNxb2NHbXlzYnZlL0Vnb0c5TUducFRhakhrd0QxT3U1bHFmQTNSQzdQSkJ4NXp0bnh5c1JydXRaL0tXOThtSEF2VkRENnBVTEo2eHlLV3lxUUtERHZjdHBFVnhpT0R3REU4YkQvclcvR2drRU15dTRocGRpbUNnR29STERNS2F5L1d0Z0dnd0JEOHhvNjl1WlluQlVCcWx5VWF3TFAreGx1T1YzUWR3TUxpeHJUOExFblJYR0h4SEFMY0M5NEpiRXBRSENGaGtHRGZYRzY5RzVUZG5HejJCMnpjaGY5b3NEaCt6RGVwd1k0b3NMY2p3Z1hvSEZ4YVhESUNrR3ZWVEVGb2EzdWVEQ2hFd1JqZHdXOU50MFluQ0psTnhZblV2Qy95L2d4TTZneWRURnh3d21Ca2VId2FYR3lzNEF5QlVzc2RXMnlHczR4dTFhY0FlbUZLb01Bek9zYWFHTUU1Wk1xR0t3V3hPOEhxT3N5MGVReTd6Z3loYnl5WmZzeDVqRmJJK01DMThjbEpYWGFtZWNlV0hna21WY2FWM2N5VXhnelVtblpsU2NFbHRzQktCSHpmb2h6Ynd3ekRQQXl6SlJ6aFpHeCt6N0JZamJ6SzV4eFBsUXVqRHd6THdReVpHaHNzeVF5RGpnanFkc0c3YnNEUGI4WnVlTUMrL3NHdFo4eldBQXdyVGNYU3o4YVZBZzBPcXd6djRWems4Y0J0NEhaQjZkekxoZ3h6dkEwdnJjV1NBMWpHRWcwbzJYWlJrTnlsS3d6ZHg4ekttQXoxT0IwRCtnd0M0ZDBISVJ0ajZRMDBKTkVzR01YRDV0dXgxbVlUek56ZjlWOE5ITmdOU2J3ZEs5Y05GRVVNejVBTWkzVk5Ib1hBVzdhOUhkbGRQVFBBWlZTdEttSmRhUWpBV2NMTVdkaGRiUnk5QTNjTEJzdlI1TlhaZXFoV1lFM1JBbXZRMWNyV0ExOWRTZm9OVWJuQVVHYmFXR3pRbUIzY3BqOE5ncW5SMTBQZEZEamRnZUpSNndqTVJpWU5XOVVBQ056VEM1OU5jOEVORjFGOXFXTU5YTU1OaERVTllISWlCMERRRlliUVN1N2NXb1BRbWJqWXBqNE5VV0pSK3hiZGxEZ05oZVROcXBRQ2lGRWROWUVOc0hjdHR2YzBaMkhYN09uUnpHWFJoZ3JRT3F2UXVnblJ6S1BkdEpVTnNIVE55azhOamJBTkJEb05CeHk5eUtFRXR6SWM5S0lOd1VBZDZvWkVkVjVoZ1hoUmQ3ZmNQcjVOWSsvTkNrb056L2RXMEc5SndPZVUwUytIUmp3dFVYck8wSjl3MjdaK0RaNjVEZ1NhVGZLbHdHaXoyMVk3SGdXTVY2bHdIaG1qRGRIYVVHN3QzVFJkSE93cndHTmoxOVJlSGZGUEhjSEZ3WW1RMU0rb1BlTUdEZTIvRGl4b0JNZlZIZE1pTk5EYUhlbGdIZlNjRFA2Y1Boa1lCSWhVSGVUQ0RlekZCVXhtRGtsa0hrdHlIaHpWRFVtbkRpandZSEtqN2N4dURkenJEVVRIRGRzd0hrNlIzZ1h5SGpNNERoWFlIa2ltQWljeVFIWEk0WmFtNUJVaDY5WXM0RVFuNkFkVDRJSDVRYXlJMEdXVjdQZVI0SU9HNFlnZjRhYzQ3RzNOMEliRDVGZGhEaTN4Zm5naUFuVDI0SHVRMTVoWjRUYis0TmwyN25qaDYzT280SEdlVktlS0RrNHgwS0Z4UWIvMUErQlNUZUZXRGtDYmZsUjNwUTRlcndRcHN3UGJ1UjZHQmcybENGNjRFZ1JwL1J6V2Z3NTcyeDZXMmdBTUxlREpCK0JXQk91Nmt1QjBFQ0dwTk5CMlErYWl3K043SWVFVjZlQmFST0UveDlCNm0wTjlYK0JHaGVPMlkrQlFHdzU2RVRDRllPbko5T0ZuR05FTVJ1N3AyT0dhMnVFWm11dVlOdzdUL1c3VzdnUDZveDRDczA3M0FlN3VPa09NVVI3WHB3N0RYTzcya0FGN0lCOEtBdThDRVc3MWRnNjg2QjhIdWc4QVdaN09ibkFPK2VGaFN2VlJKL3VReHZmc0ZqTnVXZUJCcGZkeHdDQ0s3REd4QmZSQ01mR2wyVEJ5K1A4b3F3OHR5d0FDV2ZCWWxUSERIUEIrUHVHS0xEUXc3dkhoZ1BDRG8vWXcwUThrYVFBS1RUSFA5QjN3ZEQzMGhoQVFkdnNmUTZtdkpPb1BWTkp3Qk9QOVFPUU9OUkdQWXJOZk4wY2ZWcHNCSFRmb0JjWDRmK1VSUHRyaHhqWHpnRTd6VnREMXkvczlzQ2tQY2M5UFpRNFBXemJoRmtnQnRvcjdtQUgvajJFUkptbndKWmYvalludmdoN1RCZ3YxSkE4L0V6a2QyVWNPOVF0UkxIYkEwQ0FQa29YZ25yM2toQzBmZy9BellHa3UxeFVQcHJwQkJ2YkREWFlBQ2kveEc4emdldmJpTWhRUzkxcmpSMUV5SlVEZ2k1VHpJRjRBNExrUVAzY2czMmNPaHowZXh6c09ydjBRL3pjaStndGhHeDhBQXA0eUxPLy95MXIyelE4UDNnVHltNmxFVGQzeFcvQVA3b1R3dlQwdmhxQUU3c2dpMTMzd2FEL3Y1Sll1T2lUZitHSXZrSmgvLy9VQUlDUmhDUnBYbWlxYnF5cmZ2Q2NYc0FrSDNqdWI3enZmOERnOEloc1dnODRnU3lKYlBwZkVKcHlDbTFhcjFpc3pvSHRPdjlnbUdFbXJac1BxUFRPd0FqN0g3RG53bUV1bTYvNDMvc09ML3ZSd1VVNUEwU0ZtWVZKUHdwTHI0RkdqNUNSdjRzS0RCYVhrSTFTRzV5R2paZ2dvYkdPSFNXbXFwOWlxcXVvc3lkdnNKTzdiSFNzaElzeE9icUFpRWsxdjZLQmp6c0VoZERGSXdBSzJNR0dCZy94ejRrTDFNek1wQkJaMGNDY0ZWN0wwcHBpeHNDSEh5Zi96bU9yOThob3IvenFiUFBveFZVd3VPL2hkUHpXd0VvNVFzWVpsKy9na2ZLQ1V6NHBabkJoa1RzS1l3SVJZRXpoeFovaUpDbzBRa0RYQmMvM2tDNGNlU1NheUJQL3k1b1EzSWxqQUFDVGw3TXlISm1DNWN3TFFxWVJuTm5DZ1hEYnZKengzTm9pZ1NDZ05KN2NJOG9VeE8za0k1RFFLQXBWYWQwb0dwYk1MVXExd2dFc2VyNjEzV3NBR3hndzVvYlM5YnNXVk1JY3FwVksrQnEyMU5pNDZvTjRJQnRYVWdJdXVHTjY0QnUzMjBPZEFidXFwZHZZVHpjRUNkV1BMZ3h1Y09SSTArbWZLY2M1TXRqQTN6VmpPYXZaOCtnUFlvMlE3cDA2UU9vVTJ0WmNLQXphN3dNZnNLMjhrQmxiZFlFY09lbXNyczM4UVFHR0FmWDA4QVg4ZDRLNWlZdkFzQUE4K2E5VDBjSElwdTJkZE1Nam1idklYdHBkK3ZHa1FjSHNMdzhleElKeW9iSE1iMTYrL0lIZ0FjZlhuOS9oUFBaSDZURjMzN1lwV1lBQTl3SjJQOGRBNXFrdGwyQ0QwYWd3SDE5VFRjYmhCZEd3SUFCaElIMWdBUGtZWmdnYUEyOGRsSUJEV3dWb29vSk9GQUFlZzBoMElDRkt0SVlvUVBIV1hRaWJ6WHkyRjhETGpvMG5RUDA5VmdqaXc5d21BMEFCUWh3WUpGUG5zQ0FBRWl5czZRREtVS1paUVFqZ3JmTGlRZGdxYVdZN2trSkpERmZnamltbWdrUU1HV1hrQ3hwd0pWcHFsbW5DUUVRY01DUFNScXlBSk1NRUdtbm9DYXdlWUFBUHhhUTZJdEkrTm1BQUFJUUVPaWdrNjZnQUFFT1BKcm9HWWttYW9BQVY0WkpxYWd3V05ybW82ZWltbXFxREJDQTRLaXZOa0dBcWFyU21pcVlrc0thcTY2Nzh0cXJyNzhDRzZ5d3d4SmJyTEhISXB1c3Nzc3kyNnl6ejBJYnJiVFRVbHN2cmJYWFlwdXR0dHR5MjYyMzM0SWJycmpqa2x1dXVlZWltNjY2NjdMYnJydnZ3aHV2dlBQU1c2Kzk5K0k3YmdnQUlma0VDUVFBRVFBc0FBQUFBSlFDWmdFQUJmOWdKSTVrYVo1b3FxNXM2NzV3TE05MGJkOTRydTk4Ny8vQW9IQklMQnFQeUtSeXlXdzZuOUNvZEVxdFdxL1lySGJMN1hxLzRMQjRUQzZieitpMGVzMXV1OS93dUh4T3I5dnYrTHgreisvNy80Q0Jnb09FaFlhSGlJbUtpNHlOam8rUWtaS1RsSldXbDVpWm1wdWNuWjZmb0tHaW82U2xwcWVvYXdvRXJBUU9BckN4c3JPekRLMnB1RGdKcmJTOXZyYXNDYm5ETGF3SEJRVUR5Z01RemM3UDBOSFN6Y3NBQlFJRXhOb2lDY2NJeTlQaDRzN0xBd2dGQnF3SzI2VGRBZ2JKek9QejlPSG0xd2ZaN0tBSkRBSVBDK1RWRzBod3dJSUhBaHpvMjFmSlZZTmtCQ05LbkhaUFFENkdrL3I5Q3ppeFkwZURCaFJpWEtTQWdRR09IbFAvcWlTSEFPSENrWVVJTkVDNXN1WkVjdzhZcklNSlNNRkRnVGFEcWpRb1FCalBQZ29PUEFBZ3RLbEhrQytQMGduQW9NRTNwMWhySWpEQVFLcWRxZ2l5aXZVSXdNQ0JuVjdiQkhDd2RLemJsUUFlUkUyYlJ1bmJ1eCt2b2FWTEpzQXhvSGdEU3dUZ0lBQmZNeWFaQ2w0Y0VZR0R2WWU1SEREQXVQTEhkSkcvSkxCcXVUUEJBb1V6WTVHcDJMUHBnWTROaTdhaXdFSFkwN0RwbVYwZHhlL3IyTGpuRGNCTSs0bGZpTG1EaHdNZ0FITHZJajVMQzE4K0xmWHhKQXdlQUdaTzNSbnY1MElZRktqT25lSjE3RCtTZHg4UERjRUIxZUIzSExoTnZuMHp4OGJUMXlBZzNiMTlDTVRSeTZjaGdQMTk5N3ZGdDU4TDJ2MW5ZRm42RGRoQy8zOEdOZ2pCQUhJcCtBSUJDempZSUlJU3J1Q2FoUnhHbUNFS0JHekhvWU1BTkpEZ2h3Y29ONktEQmN3bFlRSWlyc2loQUNmdVI2R01PQm9nSUhnS1VJYmppbzY5R09PUEt3NWc0b0FCQ0VEa2p3aDBsZDVhS2k0NUluSHlNZUNmbENNMnNPTmhCRnlKNVlvTHVCaVpBaFYrU1NSaHZRWHdnSmxmR2xBalhRMndpV1dZb2prUXBadzRBbkJBWmdUY2lhZU1SOUpGNXA5c0ZyRGxQZ0hFU2VpWEFJakprQU9MeWpuQW5sSXg0R2VrT2I2cHphQ1l5bWtvVElsMkttZWpJNlVvS3A0QU9MbFBBbVdleWlhTjdLanBLcUZ1c2dQcHJIZ3VZTlF3Q1hpSjY1eTc0aExBa0wrYXFlY3dBbHhhN0pJRE9KQkxuOHNTV29DbW53d2JiZitrZ1pweTY3Vi9rbHBLQXNweUs2V3VwY2dxN3FLVWltTHB1WkVDRU93bm5MSkxhQU9pS0Nydm9nK0lBdTY5a1M1QUxTWFc4b3R1S0FjSWpLbTduTVQ3NVQzWCtPS3dBTWpFTTkyU0NJUmlMNkhLTElET3c3MDhGTStvNlY2eUw0NFpHNUFRSy8vS3dJby9BQzBaTWlkcnNqa0FNZzNrODY0TnEvanpEd0FUejRqSnVpTnVKWklTQWJoaXdGVWNWdXhKQUsweXU5WE5SSlFFY1k2V0ZHd2hoTmdjbWdRQkF0QjBud0JMTjEza0FpRTV1dlZrNFpJMzdTUktHamp6MEZwUU5WUFB6QUdRY2lTOXl0Z1MzRmdrOVlDdjVDMmdkU0VYdDRkQUF3VGNiUVZWd0hFSE5pY2prMmpXNEZZazRJRFk3WkhyaUkva0dlUUExR1JNNW5YL2JuWkRubloxVzZsNlJra0duRTQ2NklYRVBCNWhsSSt4RnRLNDBidEo1UFlSVjNzWXY3bUhzQ0t5VjFlVzZuUDRSUGRpQS95K0NPL2tIVzlIYTVqWGJmWWZuRk8zZ0xON0tDREE4bmdac0x2cnVKbkhCd0d0ZHpkOElka0x0OXYxZFNRSitGdk5hd0o5ZFJEQ1QwZHI4OE8ydmlEdHk0MlJGSGVIQWpGR2ZKbTRYOTJLVTRnRFZBODMvOE1lY3dhWWlCQXRSbitNVUtCdzhsUEIvbmttZ253SUlHeDJRMEEvV1BBdUJjZ0UwOVFISzBaWXFXNndzNE1JVC9NcFNKeHdMQmhVeEFxTjE4SkhiRWc0Q0hBZUc5cVdtd1VnejRZUHJFa0tNVEhEMkF5Z2g1RklFdmtDNDY4OVdBMkNqN3ZFZXJEeXNrazBFVFk2d29RQ2loZWIveXJpNFlxeHFhRUt2eWNVcFZuaWk2WnBFU2VBaHBzRjRBRmFzVEdmSnhSQXJKUjBNUkpvSkIzM09wRW84QzBHZ1hUUVlHV3k5UWxUcWNTTmxBZ2tiaDVRUWttd0tqZTZrOE1PVDVPcWNzRnhIb09jQkFHVzA4bFNmRkl3ZjJSREVoZWp4bExnY1RDVkpJUUNwb2dYU3FLQ2pxWUI0UnBPU2I5UW5zSmNFY21pSkRZWm0xS21BcGk1RkdJWGlPZ1p6UTNEa2ZVb0hTWEllQnBiRXNOT3NMRmpHMFpaelZndWpacmh5S1FrdHVXL1ZLYWlTMkJrd3l4ejZjdHRrTk1leWd4RUFneEp4UmltZ28rd2FXZGZWbmtYYjQwRWw5SkFaQlE5R0poYXdZU1hickduRnhDYUZUUHlKR0RTcU44a3dHa1pmVEpFa294QmdEZXBnRkhCR1AvVUs4eDhoa0FoMFZIR0dGTXFyN1RNRXNtZ3lMdFlsQ2ZRZElaQ0Q3SE8weUJncHV4UVdHV0VHUVoranVWWW1ibWtNMVlhaVQ1V3hxRjhnYWhsY2tpRndnbm1wclNKRjFNSDhVN0xXRk0wVG4zcVJwdkFnTTRnZFRXVUllb2phdXFaa1lxbXBIY3hxeGJJZXNqMGZHNFNQbjJMV2tYVFVyY2NNUXRHVGV1SEhCSFN5c3gxTlhVVml6UzNnTmF4L0hXdmhKaW5hY3hKbThCbUpWOWJDQUF0YmZKU3hCS0Nvb0ZoYkc5MEdwaTdVZ0d6WTlHc1pRUFJWYytJTmsyVHJjbGdyVkRheGZCMHRJYVFyR2ZFK1NLQ09nV3lpMHV0U2s0TFd6OWt0YUNqRFlCdG16SlZJekRVSnEvdExTRzRhWm5ERHNpeFRkRW1GWmdMWE9VbUlxNy9qN1V1ZElXU1hDZGdOeWpPdGE0ZnFrckZyZlltQVNhTjV3L0lPeGJwaXJjUXNxMk1SdDhiZ2NKaUJiZSswVzFIdmtyZlFJRDJwempORUh0eEdJWGZabVcxL1EwRWRTK1lZQkVjZHlYdVpZSUNCRE9BQURlNER0OXRTbVdWbTFleDhEWUlIZWJpaFFkaDM2eUV0N2Z4eFFza2xiQmd0OUIyeEgxSXNXRDRtK0R0MXFTN1JRaHhVOFFLNHo3MHRaL3EvZENBc1lKZ0k3UllzT2J0c1JwazNGa2xrK0RCS2NHeEVES3NFZ3M3K1EzL3pjcUxleXpjd0JSNUNFZlc4cFZOZU5ReGswQ3hlSkh5RDRhcmtnaWJHUTlaZGtxRjN6eUNIeDg0eVRBSXM1eURUR2N5Nkhrc2F1Nnhqcmw3aEVGVHRzOTZZTE5OM1B4bUc2Y0VBRWJHL3d1UEVUMkhJV2RsenBRV2daMUZUQVJEdzRYUG1mNENrKyt5NVQ1VDJTTXIvZ0Y2N3hMb1VLdGgwMktacjZzajhPZW1mSmdHVUpaSXFtZnRCZ1hRazdpOGRyQ2toVEJxckhnMjJHcklkVXBPYkdhMmpnWFVLYkMwVFNhTmJEWFVtc2g0VGpDc2hjTHNHU2o2SnRDdTloVThUV2h4UitEYkUva3lEcTU5WTNPN29iVlVkRGV0OFhMckZ5aDdJT3FXTnhuUXJaTGltcG5jS2RuMURRSndsM3JyV3dzbGJrcXBnejNodS9oYkJkSmVpY0FQTG9aaWowWFcrcjczUUxydEFuNFR4T0FVdjhLMmpSMXlYNzhsM3pKWTljVkRqZ1pudjRYYTV0WjRQVUNPQWdNSGhlWXNuNExNSXlMUmt2ODZKZmk5Z2Nmck1mR2Nkd0hOZ1drMXN2OTNQbzlzd3pzckd6YTZGZ0N1bFd3M3UrQTVzTGxxcGU1bnhqdzgxRXdYQjZObG9OOTZLSjNyVlJqNlJJS2VjM2F2aE05dVQwbTQwWDZFaEFjRjVRYy90VVNpdmdLdHI0VGpkSWVDeGNWeWRuUGIzU013NzdoYnZoNTRKWXk4S1JpbnU5cnBzVldWTjdUeFhuRDU0akVmZ2NmdnRnYWU5d2pPT1grRXNOZUQ3V2h2dUdGcm9QZUJETURxcEFjQzBvRWMremcvbWdZRUh3dnFZejhGcXErazhBYy9mRWY4L1hTbmpKNzNRb2k3VFNLUCtjRWpkd2Ftandha2tYK0Z5VWZrK09LT2ZqVEd2Z0xyaHdQdzFDK0M4RmVTZUxvWDN5bVZWSDFXamgzK0pYUlpNSXlYZDlucHdmNFRqSjhnMDIrL0ZFSnZFL0N6M084cXNYQTF0M3IvK2xjYjh4Y1JlQmQ0NXljVTNJY0NyVGR6QlJnRjJqY093Q2QxQnpnT01KQjdsd1o3RVVnREpoY1l6RWQ5dHVjUk9hUjhFbEYrSGRocGk0Rjl3ZWNXWjhkL0VsR0JLYmdESmtoK0thaUIyZVVDdmtjUVZqYURPL0NBd3plRFFEZ1ArY2NDRnpnTlJlaURkZGRXTXdpREVqRTRPSGhiU3BnRTc0Y1hBREIzQjFlREVWRi9JcUNGQThGM1U3Z0RUcWdTTWhoNFB6Y1JyVGFHQTlHRFlZaDdSeGhOSEVoeE96Z1F1MWNDRTBnTmJXaGNpd0dHdktlR1JOY0NReWdPS0ppSE9QQ0JLdGFHWGpnUUxRQm9oRGdFYytnUlhCaCtVZWdVMTZOK3h0ZUlRWkNJSFRHSTdlZDkwNkJabWpnUFdJaUpKQkNJRVJGL2dYZUh6YUJtZmtpRS82VDRBL2UzYkkwWWNSNVJoeUlBZ0p2NGlqMVFoWGZSYzRnNEZ1WDNpUE5RaHJxSUFxMDRFZjZIZkdmSWN5dGdpdE1RaWNYWUFzN25GQW5ZZ2M0NERTc3dGbXdZalNhQWkwRkJqTHczZ2hQaEtKTVlGQVBBallXNGpDcFJqUjE0ak9QZ0tLRW9pT2g0QStKWUUzd1lnUXY0ZkNBaUZyWTRqeXNRajQxUmpKYm5GRGhHaTJqb2p6UWdqQlBCZ3JHbmpuU1lBdTRZRGd6NWlySG9FUTNZaHA0WURUQVhrZE9BaXNXWWtmVEhqUW9wanlnd2t1RVFoNFRJa1FQQmlVcW9pdWRZa3BlR2tERXdqWlNJamlvWkRTOTVBaVlwRFJjcGt5WGdqZjAzanhWSkR5bmdrUFRBa2pKcGlMMDRpcVFIa09FQU9rWTVELzNva3lOUWozL25qLzlPMlpFb0VKVVVTSlVza0pYMThIcitXSTVCSVNhRTU1VXJzSk1ESVlDa3lKWHZlQUprMlc1b2lRSkRtVzRveVh0dUtRNTNCWmJRNEpHTkNKTEQ2Sk52R0EzSnhaZlA0SmQ1ZUpQMHdJNkVxSmFFZVFLRzZReUlHWVkwcVdGVTZaalFVSmhpTVpsVHFKaXVlSmxuYVFLUjJReWM2WU5LNlZKZWlablBvSmxac1kya3FJck5nWmFxNlF5c0tXZHpXUUtqS1E0VEdZR3p1WXFRR1pPM09RSzlHUTVJaVluRFdadE5rWk8zbVkrYk9aZkgrWnRZb1p4ekNaamprSXg1K0p5aUNaeTNhWkEyd1ppdmlKMjRLUmF1MllhVktSVDMrSjJoR1o1WlVab0Y2Sm5qVUhUK0NKNGtrSnZzcVgvVUtRNzFXWUR5T1FMME9aZmNXUk5UT1kvLzl3a0JmOVNmWGxtZTNjbVVLWmlYNGVBaWxpZ1UwUGlhcmhXY0k4Q2dXbmtDRnZxWVZEbDdid0dmTXBtaDBTQW1JTHFhcWJrWUVjcU51UWtCSWlwbVBsbVhKMGloL0RrV2J6S2lRK1dUQ0ZvVHZoaWNMbW9QS2RDYnhSbUdRQ21YTU5wNVlpR2RKTkNiU2NpTkhPb1czb21PUVVvUUU5ZWJSaHFOdy9tSlF5cWNZZ0Z6VDdxRy9yaWpuM0dsSXpDZ0c5bWM2TWlMOURPZXVraWp6ckJ3LzBrUTRLaC83aWtPMWltUWpMaVBMQnFOUy9wVGR6bUZ6TGtTNXBTYlA5cUJWU29ONSttUGNVcWFLcUNtRDhLTmZlb1VQU21iejVhb1lxR2dhSGVqTlpHZlV6aWdVMXFLWW5HaUViaWxzZ2ltSXhBQWlnb0I4TG1maEppbmdrV3AvMkdZb3VWM3FJRWFmdGRvZHFKS0FvY0tBV3pacHZoR2tZdmhvYmRwbFFTeFlTbUtwczAzbVBTQXFXRm9ySDI1QXFRcUZvV0tmTEFwRGJIcWp3T0pma1lvRm5PS2VRUlFxaEhGcW0zb3BVallBc09acEVvNG9OUHdwdWdJbTRNSXF2VkFyR2gzcTlJUWdxS3FyTS9BbGlJQXJvVGFocWY1RnJ2NWl0VnFhOFVBakcwNHFCcFpxeWFncXp6b0FxVXFsa3JZcU1ucHJ0dzRxemo1QWhJTERaN2FlSmE2RXZaS29jMmFwUy9BcnJMUmtvdlJwRjZKcjlKd2RpWUxEZVRhZmlscXBRWmJBc0JLRUJINm9FMXhzVnhIVEhmeHFEQktyODlRUWp6YkROa2FjdkFxRGNpYWh5a0xEVHBibFQvVmdhcUtyUzlyQWpHN2xqR0FzQVBSci8vVlJyQXF1NmVZMkxHZEdnUC9LaFFCU25kRHE2RlBPd0pIQ3cyeDlMTVA0cTJVcG5rclY3YWMybDR6RUxXMEduNVl1Nnh3S3dMN3FuQXpjTGJPNEt0U1I3VzFtTGNqQUxMMTRHOTdDNkhJNTdaRnlyYU5xTGI0d1hwdUViWXNSN2NkZ2E0STZiZldBWHB1a2FNS21GRmFTNG9WR3cwNDk3WGNSbm9adXhJMmk1WXQyd3ptWmE3NEVicFhacmtUTWExZUdhMFFRTGtvZ0x1WW0ya08rN0NFcTdmYzJnekgxN29reTNDUUt3MGJlNlc0Q3dGNGxyeTkyMmQzK3d6SGk1YUpDN1paZDNLeWUyR0NLM3JCSzJ6OG1nT3RDd0hSTzJhTTY3SGZtN29JYUhXd0c3dFNON3J6VUxTTk9MWkJXMmVzWm5Sakd3MzFld1JKc3IzaXBiNy9XN2dEMTN0My9xdGRsVkc5VFBBOSs2dGt6UXU0TDRDMUM5eGo4RHNPejlvRU5TVy92VFhBMzlnRHZ6c1VqcXRjK1ZzZVljQTVTVXRwdEZzUEtObSt1WnVGU3dVR0MxYStDVGErSyt3RCtZdkJpR1dtdFJRR3hLSkx2SGEzcTdzQ0dyeG84dGE4MHZmQjZzR1Q3cWE1eitEQU1rREVNQ3hlSGR3VVQweHN2bExCTUFiQXdaU0pWbGpBRW5LK3NjYkZPYkJwVjFodGhrc1FvWHUzdXV0a0V6d09QK3greW1LN05UYThtNXNkbVJWc0lRd05jS3dFbnpURmxxWEN6ZUM0Zm96QTlDWERPR25FT3RDMHpzRERieGJDZWR3Q1N2d01hZHhnV0J4bE9sd1BqZHhiaUF4c1JlREhFTkRHMWpXOVdRc0dVY3pIRXJMR2VMeUVXMHhwLzNjTURWWTdCSXBtdzhkeHg3RE15WkVzWG9SY3NHRGdoUEtxWkprc0ZKZjhBby84REo2TVdBckF5ZENBYVY2UXVyV01ZcWFNdDBqQXlXUDhiNTBSd1VXZ2JLMmNIbVg4cFVvUXpEVTZadG5jRVlLc0JMMDhIQkE3SUxlc29reGd6S1RjRzl3OERWYk1CQXBKWXdrMnlSSHh5eXBqb3J5Y3ZNUVpCbEg4ZldxOEdPVThBNkNzeU5hRnN4UVcwSnRzRTljTVZreG93WXNoejlaMXdoNnh6ajl3a3doTkc5MDdHSWFjQWtUc0RNdThIOS9jRWJ1TUJmUk12V0FNRTZhYm5rNVEwc0dhWU8xOG9WK2dmUkJ0V1N5TmJ5Y2RiWXl4MEY2UjBuZngwVXd3emhKQnpZZGgwT0hiZXlONzBXbmh4VXg2MHplQXFxUFYwZDA4QlR4TlpQOUlmUlI1WTFyODdHTFdCZFV5WlFXckRBRXp2UitPNWhUMmJBVHRLOVJIOGRYa2V3VTQvQlpoelNQR0xBM2hyQVFaWGJlSTlkSi95OVFCeXhodmZSeEV2WUxBbzgvRWU5Y3RuQVVoVFJBKzdSVi9MUmlKdlFTSFRRODZUUXg0UGNkWjBOWnlKU0dMN1dVYm5RTkJmSWtLMHM4RXpBWG43TkZJMHN3aFdjbVZFZG1vTU5uT01NeEc4TmdiSngrYzVWZGlNTnJQb05xbHdOck4wTmo4RzlmTzBOZGVNZHVnS3dhK0RRM3Z2QSs2N2I2YUlkamJwOWVZTU5iUldkVkNrTnoxK2h4cTNkVmhVTmY3SmQyaGtGS2VRZEd5SjhjaFN4dGNuWmxrSU5IcHh0MmVRTjJuSERwbDVOekRoTjRUVWNKVlVOT0RnZHVaQU51b0J0ODRJTi8vQWJmWkFHUGF3d0hnUEREVmJuSGNwQkFBNVkyZloyRFpKcVhlejEzY3dvd0cydTBSYUswSndsMVJhUURkMFluZmszQUE0aTBPeThzRi9pMFJnZ05Ud2NIYlVsRGhTc1RmaDdEZ1NMc0dtZDFQc0x3SUNoNGN3TDFRdVFGVkRKSGhJT2ppUEtEVWJ6SGlvbkFqcjZNV29Ld2I0TjBJQUdVWkVNNWkyZlRraVhEZGJQd0dEcTVTUU00SHlJVFZiOERlMUxEa2hpQlV3WUhnV1FEVVh1YmhoTkRrbGtIa1lnRGoyeWZsZ3NCR3duSGhVK0RsMHBybDhWUGlpRWNIZW40VFlQNEhSaTRjYXpNSFZDNE9hRUlLYW00Wk9WNEdNejVqY0s0SE44NGNpMjRHYnY2ZWo1NEhXNTVMbDk0RTlqMFVqS1FKeVVJZFFZUUhTZTU2SDdVSi85aVVHNXZ1QkVJT2dxNHRDRnRFSFFSdDVRS2VibEJrQ1RBaUhLOE9CaHllcFFUT0JpK0VQNnNPQmNYTVEzaHVPdzBRNGgvSEI2Qk5hcjkrQmpkVUhXaGVCYjJ1WW1TK0I2a2VISDkrQlhhT2s1K3VDQW5RNTU3ZEIyYmVHVUhpUTh3ZEVYVCtCZDB1ZlF5a0NOSHVPS1NsN0FFWEdvb1E2OHV4N21EUTdqaDU2NExBQUxWZUUyd3VCL3crRG9SeDdIV2U3a0ZOQ0FXdnNtRVVDTFpoSHdNL0J3MHZEa2J5N1BYOVE5U2g3Mk5ROGREd0FOTmVCZWlqOERYQjhXUEE0cjI0QU9mUkI2VFJIU2JmOGVPQkFQNU84YVVlbElpQThpcW1KWGx3RE9UeDh1NnROcnRlNXVsaklENy84L2RoRUNzdkJ6MUM4aGJPQ0I2UGhJampCdjhqYnlFVHJ3ZFBUdzlJai9DRnFQRTk3d2hYRC9VMS9nTW1JZUZTL0FoZmovV2dnZkdjZlRuL3NlMW9rT2pjVVJZaGZ3TitRKzh1Q0VoNkUvVzhQaE1OTXZkblVPMm04VGJEVGlDYzhTTitmd1lNWVBlZCt3Q1BVZG1UUWZZS1RRbUFQMExYWUF0cVh4SnpzeVFuaFRkTWYzS01IL1ltc0F1UFB5V2dyd29CZnhjdGdRMVJ3elVQZ0F5S2Y5UWkwL2w0d1RBMVU3U1kzemdyTXV1Tm9GUWtjdzh1RVF3WjJBcGNBdzhGSVB1S1B2aHMwT2drb3pINDBBcFcxZ29INERFOE15ZHF6d2FWWGhubGtQM2EvL3JMTWVncWRQMU90UDNpei8yZDRmMmFnUE1HMHgwcXpqN3B2eWhWNy9URzMvNUpGd3JvTC8vQ2NmaDFjTlgyZnliL1FROENrVGlTcFhtaXFicXlMVXNBa0R6VHRYM2p1Yjd6dmY4RGc4SmhEWkJ3SVpQS0piUFpDanlJMGltMWFyMWlhd3VGcyt2OWdwZUtRclpzUHFQVHVrSWc3SDdEd1E0MXZXNi83d3p4UGIrL2F1QUZDZzZXQ2ZnZEl2YkJFREkyT3VvY0pFcE9naDNFUEdKbURnSVFVSHArS2dXUWFaS1dubTJCcHFxbUtDeVl2c0pTc2EzUzFvb0lYTWJxN3VZMHROa0Nnd1lBOGhZYlF3QVlCaTkvSnJnZVE1c2lNREJYVXpJZ1JHdHJMaHhaZnlNR0NHeVRNODZDby9kQmxiTUhDdnlteDhjUlpMZmJud0ZReSsvRE1lVGVBN1NDb0JPL2dtNklCVXhJNUFFOGd3NmRCRENnY0tJUVh3OHZka2xRanlKSEhOTXdnbXlDclNOSkd3aTgvNFZNbVFSWHlaSVdWY0o4Z3JBbHhXUXhiN1pRSUpHbXdnSmNjQUpsTllwblFBTS9neUkxd2VBWlVYWUlJaVdOV3VMQXhxYmtGdWlUcWxXRWczOVdqZG5jS2pZQ3k2L1FBRGdZTzFhY1Y3T3dHaHhWcTFYQlRMZXdraldVTzdldVhVMEM0dXJkcW1CY1gxTndBK3VOMkxid29NT0k5ZEpsL0FpQWdieVB4MGFXTElpeTVjdHJEU3pXck1heFo4VERxb3JHUjdvMFlycWhVMThCOEpMMTVRQUhtTUsrZ3VBdmJkYURVZWVtZ3NCQjU5NklHVVFKUG1WNGNlT0lIUUJYRGdTcjgrb0pRRXNIOGlCcmRlTUVrbWZ2UVJsbDkrb0h3SWMzNlFCd2VlTUtIT0JPVDJOQjJ2YjJJN3gvRFh1QUFlNzN5elBRd0FEeUlkTUFlZi9abC85QUE5RkpOc0IyelNIb1hBQU1HREJnY0pUNUZ5R0NGT3JYRkFBUEhBQ2hodVhaOWtDSFJIMFk0b2dya3FBZ2d5MGgwQitMTTVJUTRJc2xZVWlqamlQWWhsMUpBOUIzNEk0MEp1QkFBUmFXQkNKN1ErNzRYZ0VuUmxOQUF3UXhXV1dMRFR6Wmt3QkNXdGxsQWdjc1NBNEFCVGhBWlpkbmxrQ0FBdy9jcUF0bFphSVpKd29CRUNEQUEwZkNNZ0FDRHdoQWdJaHlva21uQUFZc2dHUXBRQllnQUFOTEF0cG9DUW5VZVNjQ2h0b3h3SmdHS0dxbW81dXFRQUFEQW1BNXFTQ1dGcEFvQTVweW1pb0xkQkxRcWdPRGxqcUFyTFBTV211dEM1UmFLcWFab3FxcXJ5NUFXaWVvdWNacXE3RzJJbEFBbjMyMlNnQ2p2MElicmJUVFVsdFByYlhYWXB1dHR0dHkyNjIzMzRJYnJyamprbHV1dWVlaW02NjY2N0xicnJ2dndodXZ2UFBTVzYrOTkrS2JyNzc3OHR1dnYvOENITERBQXhOY3NNRUhJNXl3d2dzejNMREREME1jY1I4aEFBQWgrUVFKQkFBUkFDd0FBQUFBbEFKbUFRQUYvMkFram1ScG5taXFybXpydm5Bc3ozUnQzM2l1NzN6di84Q2djRWdzR28vSXBITEpiRHFmMEtoMFNxMWFyOWlzZHN2dGVyL2dzSGhNTHB2UDZMUjZ6VzY3My9DNGZFNnYyKy80dkg3UDcvdi9nSUdDZzRTRmhvZUlpWXFMakkyT2o1Q1JrcE9VbFphWG1KbWFtNXlkbnArZ29hS2pwS1dtcDZockNRU3NEQUt2c0xFQ0NhbTFSYXVzc3JxN3NBeXNCTFMyd2l5c0J3VUxBOGtERU16TnpzOFFBc1BUTmduR0NNclEydHZjeWdNSUJRYXNDdFNrMWdJR0JjbmM3TkRTNWZBcENhNFB5TzMzK08wREN3OENEZ1R4TEJGdzBFQmR2b1BOQ2dTTU4wOUF2V1VJSTByVXRzL0F2NFdLRkRBd1lHOWlSSVVZYlJGbzBOR2p5WlBQdnY4OVlFQXU1QjhGQlNHaVJBalNKU2tGQng0QW1NbXpaN09LQUczYUNjQ2dBVGFmSDRXR0tvb0FxVk9uQUF3Y2FLbVVUUUFIT3A5S0hGQ1ZVMDZ0WUo4T0tDQ0FhdGN4QVl6SkRIdVE2MWxMRzNleW5lc1VnUU96YjdjY01FQjNvdHU4a0JJWTdVdjRhUUVIQVFCZkdTbTNNTUsvaWpNNmFPcTRzbE9wa2FHa3BXdzVZdERNaGRJYTdFemFKNEN5b0pQQWJGejY0T2ZVZ0JnOFdOdTY5a3h4c0ljd0tHQmI0dXZjZWxiM0h1NFR3WUhFd0hjYzRFdzgzKy9rZFFqTWJrNmQ1Mm5rMEdrSVlGNzkzcnZzZEhaM0h6OHpLbmJ3TGJhVFAvZ2QvUnNDQzliTFAybmV2WXJKOC9PMXQ2K0dBTy84QUU0RVFBUG44WGNBYXdGeXN4Ly9mMllrOEYrQ0VFWWtRSUhad1JmaFBUVXhXSVlDZkYzbzRVRjJvZWZnaCsxa3FHRVlBUWhBNG9yNUlNQkFjbGNoeUtJekpwN29CUVBjemFnak5BM2dwUmdCT2U3SVRJMDJhcUZBZkVJbXFRMEFEbVFXd0FOS1VsU2tGdzFFYVNVMEN6eW5sQU15V2duWmxJdDFlYVdWQkhaMTVKalFmQW5tRkFGVWllYWJ6UUNnWlVBT3dKblNtbFl3SUthZFZocEFZVGxuOHVuTW5IZ3EwYWFnaU1xNTBJR0lEbG9vRkFrZzJhaWdFNWJ6NUtTT1B0cEVuWmcydWtBd3dpUVFKS0tFYWlwRUFBOTJtdWdCd2dpd0o2V21Ka0hBcTZxK1djQ2ZvYUJhcXpNTHhob0VwN3QycW1ncENkQ0thSysrOW5CcHNMdXlPb3FlekRhRGJMSTZCQnB0LzYwTmlPTG10UkFRU1cwT3hYSWI3QUs0V3FLcnVOMSs2OE1CNkRJTEFLaVpXRHZtTndXUXhjc3VMNnE3dzdhQ0pyTkFPUGZ5VXBBNnRGa0pnTE9ZaEN1a3Z3YjR3MHE1K2hvQjVadGpGZERBQWNEc29BQUJyamdFUU1FelR2c0l0RE1pWUZHcEVTOFJnS1JSZm1NQXZFWm9KRUNxTEJwZ0Nic3JEdEFQQVQ2bXJCbkxPbFowVVJRRTdHVnNmcmRPb3FLSFl3M3Q4eFdpN29qQUEwNWpnZE1Eb3dLNFFNK0s4QnNnQWcwUUFQSFRrQjR0WDFSVGpaR0FBMEFIK09rakhRSzRqd013a3cyMTJlT1puQzhhR2htQTkzRHZOakp4Zmt4eWJYY1ZDa2Q0bXVGbmlKWmc0SW9Ndmw1VWV4KytSZUlCVW02SEFtd0RPT3doY1pPM1FQK1RsbnVCZVg3RzhVR0EzL05CWGtqbzFRMkFXK21tLzEyYnppalh3WG5XZ05mOUIrek5EVkFtN2JWN2pob2hCN1Rkbk91QUFEK2M4R01UVDhYcDQxMlhDSkRrTWQrSDg3YkpIcjMwYkNwUG5mV000Rmk5NzNod1gxc0JqSU5meGNwblZ3b0pmdFVoMEw0Y1N6ZTNRT1h1YzZGK2J3T1FueVJTWkx1K2tHc1BPQ1BPYWZvSGh2L1p4Z0QzWTRRQ0pEZWNBK0loZ2NOaEh3Ty80TURXRkNCM2tDQVpjUmFBaDFrUkozVWI5QUlHbDBlNlRyUUpaS1d4V1Iyb1Y1cmhwWkFMS3lUT0E3NVhpVWcxSjF0emdGOXZBTUMvRzJhQkFOMGhvaWs2NkJpRXdVRjhsdEdnRWJtZ2dBTFNaWWVvRUdGdHRNY0dKdEpsQUMyY29oYUVxTUQvSXBaaVdiWUJRQVRGa0wvV3ZFMk1YS0NnYmJBNERDNzFob1J0UU9JY2VRaEhKd0JyaUU0Y0J2WWV5SVlxYmpHTWZjUkNBbURZbVRmQ1F3RTBJdzBpeTBCRzBud3VrVmdJQU84cTQ2ZVFlSEV1NkF2REo4RmlRVXhtUVk2bG1XUkFjbWdaQlBBUkM2eDBUQ2RObVlWWVdrYUpTakdoQnh0a1JaK29rcFpUTUtSdEVCREtoY2lyTXlMYkFoVHBjakJnYWlHU2pYd2xOYzVWR2hCYXdXdU9JYVl6cy9ESDB0QVJNTmpNcGpTaHdJRFNsSEtiVlJCbWEyU1lHVnYyaFoxZFVDY24wWm1GWlJJR25wbWhJV0hNaUFWb3ZwT2VXR2dqYWZBSkduMHljNXhMY0NkYkNBclFLQ3l5Tm9HRWpVSG44Z0F1QktDWEtQbGxRNStBeWlhaS8rZVloZUhuRkRvNmw0aHVsSndRdGM5Rk93TUFoQnFobkpaSjVra05oVkdlQU5FK1ViTk1SYSt3MHNxWWRLWk9DR2RoR0FvZVRYYkdta2tZWlU5a0NsUWs2SEdnUlpvb0thM3cxS0UybFFyMlpNdE9vMXBUanpBVkNWbTl6RlduMEUzSG5OTkdDYmpsR290UTFybmdjYXlhNmFwSlhGa29oV3BscTAvb0tXSE9DbGNta0hRdVhKeFNXK2VDVkNFSUZTd3Q3U3NVcWxxWndycEhxVE41YXhNVTRKZ0JGRk94UmdpclZqUUtKbitHNWFkSDhLeFdRSXRaSTlnVkxFVEZrMTc3Z2dBbk1IWXVOeTJ0eXVRNkViNXFTcXBPK2VvUFJPc1ViOG5XQ0FJbGpCcjFOVmpFdXZRR3J3MUxZbjg3Mjg2STFGU1FQWWx1ZWFCWm5seVd1ZjlCK0d0WVlxc3Vvd3IzdURSSUxsaTRpMTBqaU5ldFpIc29ZYWFiZzAzNlJMTGxQWUoydFdKWnV3Vlh1ZUNOd1htZE1vQzF4bGNIK3cwTGV4L0ZXNlFNdUFZRjdnbG4vL3NEOXo0RnZrL0RiVThBWUY3QytKYkJQeWh1V09wYnV2dUNoYlE3U0hCNS9JdGhHNnlXTU9TMVczVlIwdG9ocExVdkJ5N3hERHpNRnJvU0w4QklBVEVPb2l1UkZzdDRDQXBnWkZnY1N5MGVTK1RDT0RneFdKNzdZeDBZMlNTcHRaczgyVUppR0dqWUowaHVNZzV3L0pUbHVvL0dZZ1dDZzFIU1h5MExRY1FHVHVHWVVlSmxIbkI1SmpFMmN3dGdhdFlidm5rbU9wN0JrL1BSWmpuellNMCtJWExLMEh3U0grOGdBSDNKczU5bGNGcW5wTmg5bE8zL2k2RHZReGRETDFvSFNwNkxqWTI0NTN4RWVRYUE5b2lpTC8wQ01DOFpqa0UrNkE1ZVhHTlM4MkRLZE1reStEcU5qMUd6NExBK3NiV3JWMERyeDFUNWNLbW02QTVDM2VOZDYwQzloWW16M1hyZGp2eUtnTTVoV2JDeFhVQm9ubXk2ajVFdWFRNXdiWjFwYjlreWt5NGRzN2tCNFJuUWxoM0s5bllFaUkwU3ZHTHl6aWY1TlFuZzdSRjVxenNDalRhTnN3KzNZbzlJZXdYY3ZzMjlhWkJwdHFTN2RQazJpYXhWd0c2RWhGdmRwbjdLdFlIWmNJUWNsOVZUSGJnTVlFMVlnRVljenpYNCtFbDByZkVJakJzZjduWm10c1B5YVJYME95SUQyTGVya2QyWDRUWjB2bXdtdUxCTERvTnF3L21rQ2ZlSW9LRTlXcDYvZ040em1UZzYvd3Z1a3dPZi9Ca1VOcm9MS2k1cW9ENzlHZVZtQWRYdjBYS3A0N3N5QzhjazBiVWl6WlZyaGNsZTkyNWhIbjdEYzNNRDdTVUlla1NpN25VVmlOd25YUWRtd0ZIeTZCVHNIY3AxVndIVHRkTG5rNDdkS1ZsUHdjc1JRdko3WHgzZGZYWDdObUNBNkEzTGZOSEJKb3pTWjRyemt5QVY2VFFKZkFwOGpwTEdZMUx1RWlxMXdVVi9BdENmSk96YnJIeFlVajU2dGx6WDZJdjNmR2x6eitjWFNCN3FyRGNCNmsrU2Q0L1BKWUt5djJ2d1NhRDJtdHZibEs0L0NOeWpqNDkvbC96dVMyV3VrSC9PQXV4TDVQWWFIM3lYTHc5SDBoK0U5aVo0UEFUVUpIcjFiOFA2Si9WK1JDeU5BdDVqYVBraXlEeHJ5MHQ5ZkxSZzlmaG5maVlCZC85QWxYeGFnVEptNXhTbTUycjlkMlQvdFhYdEFHSU55QTdQZDJuMk54RnN0MDN1bDB6eWR4QjB4M3JEQjNqL2RXWHRCbkJoQVh2VDFueGZWSUhvTklIY2dHUUM2QjNMMTRIRVYyTGJkeExzUndJWHlBNEU2RzNpQnhYa0Iwdzd5QTRyWUh2QjkzZE5KMk9kSjNRcFlJQklrWU04cDMrcVZtSTA2QndwNElMYWdJSzd0b1FLOW1PSGw0UW9nSVhRZ0g0bEo0YjRRSC8vaFhGUE1TMGthQklIcDJVeE9CRUwyRlEzYUJKa1dJWDNNSWRtRm9JZWtYanhCWUV2bUFKNDJBNFoyR1NBaUJBOVdGcHh5QTYrdFlqY0VJVC9OWWdPYUdicUI0V09LQ1YxOTROT1VZZ3pKWW5kVUh0YTRZZnFob1E5VVh5L3hZZjNrQUoxT0JGYTZHZi9VamdYWlNablp2Z002TE9LRWtHRzZzYUZQR0dLdnpXTG1XSUN0cGg2VXVlTDdCQnppK2FFU0RFbkF1WjFsM2dRZlNkandlZ1pKNENNMldkMHFDZ1JoYWRsMFlpSXJUZGtVbmVJN09GcXY4Y3IzUWdXbkJoZm5vZ1EyUWlIeTJnQ3hBZ0I1NGhkbW9nVThQZGZ6ZWdPNVhpQVBKZU9IbWhzOS9nTXZmS084ZmhicnpnWDlXaVA3VmdDN3doK2N1Wisyb0NHZnZhUDVPaU9ZQUdGREdnWmVpaGJFaWt0K2NoZkpiZVJqT2h0SUJrTkhmbUVHdmVGYkRHUWNEV1NBVm1SR2dlT25xWnVMRm1TUG1HUmk5YUdTTEdPaXphVEZBa1dEQ2xqOCtoTDk4YVRDdW1OM3NhUExUSndSRGx2UmpsdE1Ja1BLcWxZU3prQ0F1bHRPT2tULzdoNGFVL3BEQ1pWbGNZV2xOYkJndVcxamE1eEFnbm9FNG5JWUE2Smp4cEhsbFo0QW00cGc3dEdjNVhHYzNGNUQzTnlsNUMzYXlPNURXblpaTzhJanlpZ2w5endqRDkyalVsUmhteUJLNFM1RGEzNFcyQTVFN0dvY1lpNURaWUlGbzhwVzZUSUUyOFlpUnNHaWwxR2FuUUpXSkQ0VzV1SkVCQVpBU0Jwa3hqV2w5cVFrYTE1Z240WEZqOTVpbURuZFZ1WkVJTFlsRnFtZ3JCWW0zN1dtTnZRZDFjcEVaM1ppZk1rZFdxWVcxZTRYWEkybW15aGs5NkdrandCV3UrWW1XUGxtdEJ3a0l1R2xOQlFLc0taSm1aR25hRVllSDNKT09FSkRXTFpVSkU1RTFGWlhybkpERFk1aEg3WlpLZUpFcng0YVFHUW5zK1FtaUl3bFduSW4vL3RZSE5lRjVoSTVwMDA4bVAwR1k2Qmg2RE9ZSmpGT1hjeVZwa2d3bnE2R0JFTEZwakFPVlB0aVJMdkdWL2orSXNvc0ovUmhtRnIrUXpZK1p4ekVUMGh5Z3o1ZVZJRUlLREZ1SjZIR1owdE1KSWZpRjN4cVNEQjUzNnlkcDhIc2FIR0owN0IxNkxNWUpnaVFLSGF3SjBBVlpCc0FadGF0cHdLMkFJR1dsN2FpYUxMRjZIZjV3SXlLcCtsZVVQa0tSWkNTbW9MaW9rdFVLYlE4SmV4WjZURHVYd2tLcHN1QUtReEtWc242Z3pTV1hKS3FnMjZsYWZBVjFxQnVRMVFhbVlYR2hFOWVKWklvYWFtVkVrR2hIOFJ3S1lROEVwcytxS201S0NFaUg5OGluVXhNS2o5MkZmUXVWQ01xcW5PR0FOYUdoR0J1a0ZYYXFkZmltRnZHaGIvYVNtbFNKR1Y2RVNwZTdsOGwvb000OFNta3psVEhOZHFqSXFtV0RJRG9Lb2ZWM1dxSXNwNlR1b1RTSG9DdGRvTS91bE1vMXFDakNxblpibHhYZG9NaUpwQ3U3cGhOQ3BuanBxak1PQ3J6d0NybUJTc1hzV29YemNYa2hvQnNpcWYyMm81WVNweHFWcGk0UG9NQytpcVNKR3U3dE9oS0hHdHUvYW56QUJlTzhvTWR3cEg1TXFLNW1weVYzUURhM21jZHZPdS9EV211M2FzdVlaY1V3aE0yZXFjNW5xaXp1YW9KT2xNeEJvbjhZcGhFdHNUNG5wckZZdEp6MXA2QjN1aXNPbXZIWXRKRjR1WkI2dXY2aWh6QVN1d0lhc3A4MXFwNXJxdXpZQ3ZKZUN6ek1DdzN5SzAyZ0MwU1pBaU9ic21OTXVOMVZLdElOdEg5aHFkUzdzRC93SWdPMzEwb3MwcUExZUt0UHF5cyt6QXBKTWxGeCtLSnlOYmpUdmdzR1RXcnFaaXROQ3d0VlVRTjZKSVBBV2JENUI0czh4UXNvZmpzdHBRdGo3QVdFVDdLSHlydHpEZ3RuNXJJNzdaRjRRYkJUUVRXTkp6cXZ5YUFtZkxFM043T0hVS2RXd3JCS3hVdVdTenJQMFpCSFVhdUdDaXRzejVCWWtMQVdLYkxFMkxFS0lyQW53N3NENFRzMkN4ZVZsQVl3UXFQZElhRWZGNnFvdjdMV0RMZzJBd2VDbjZLSjM2RkY2ckFxU3JzdExqdHRBd3ZFa2xsOFNEdDgyUXVTVWd2UkFBdTkvQ3QybEN2VUJRdkhFQ3NYakN2TTdMQXA0YnJyU3p1bTRZQmlJMnZtZ0Z0Yzl3dUNKZ3ZSQVF1VlB5c2FnS0JxVGJ1dWp4dXdscVdvV0J2Zjl0V3hxbFdnU2hCcit3d2J5Q2VRVHkyN3Ryb3IzTkd3YnlSN3ZVNHIyOWxRVGwrd3oweXg4S0lMOHBBYjVKYTBVTVhDU0sybkZKSUwrM3F5NzI2d3pIZXdSR05zRFFrYnVKYWNHT3diN1pBY01tQWNBT0ZaZU9heW9Pbk1CS3dNSDYyMDZ0a2JwTUVJZTJwU25vRzNwTTBNTVpuQndTSnJQNHU0dnF3ciswNkFRZnU4TmdNc0tGd1dGZmNJZ3VuQm1YNjZKUFlLaGhjY1JnVXJmcEN3Wkk2Y0c1a2JJZWNjSkxFTVlRRU1JdjNCb1N6Rk9TaDhNaUVsTlJrTVFJUWNTd2NjRTh5MEVQVnJVWTRjY2VhTWdyNE1aVmh5ZFRxN2hoUU1FZXNjSjVvY1hhTmdYMmk4WHVJYnRVcTc0Sk9TVnluQzdUYzB0c2ZCWTVKY0Joa0x6L0VwR3MwQkhLRUZES1BJREF6R0RHMmZIRWNBb0dlRXZKUWlITFE4dFRIRHpMaWx3TEc3eEZ3WXdEak15Z0RDTEliMXZNTHRERHdNd2ZsdXhSd2N1eHpmREY4YURNMzZrRk5ueUxLa1hGN1VESFRiRE5CMkhOMUlETno2RExQbkM2NklvZTBmeS8zQXNFa3p1bDRLSEtFOGJNK2tVYTRIekkzdHdPVFl3RUtjd001RndMNW96QlZBSlZ3QUZTbllIT1JPRE1YSmtjQSswTStZd0U2dXhXOXF3SkNOMUtGVjBEdjd5ZHVmSFFVZnNGdG94NEdXMEpJYjFoc0h3RUhzMGpxY0hMem5EU1JuRE1KdUZJZWFGTHRoSEVRU0RKL3hRWnJzeVJZNERHQXVMU281RFNXVmdHUW8xMUl3MEphTlJJbEVUTjI5Qk1aeUhPU1hmVU51RFQveXoyenB2UXpzeGsxUzVXRzRCTUNnR3cwOXRnd0VFdzBZNmh5ZVZ3eXFUUno1dFNHd3B0MGZ0Y2ZXbFEwaHNXMEpkd0FPNTdENndjUjdXeE5TRlIxTm9RMFdUVkhFbURFV0RkREp6YkJWak5UR0xOQ0Y5TkhiUXNCb1g5dGtCZENSZE5wR3ZBeWJBRkR4YXlQSlB0Qk5RRVFEYnRDRnBVR3AzdFduZFUybzNBMHZlZzFteXkwU1VpMVh5UTFLMUIxMDNnMS9JWjJvZmdROVhSMVZtQTAyVk4yNGN3MmpVa0I1RnQyS2h0Q0ZmYkhXMDlCYmFkaGJCZEI3SzlTM05BMVRpSTI0Q3cyZFV4MlBpVFJMeGRQa3lORDQrZEJvbGRHREx0UXNWTmJzODlCT2Y5a01mdEI5SGRHbWF0Qm9nc21UYTBDYTVDSHZhREIvK01EOTdqQ2Y5MjFCenRUUVdZclhtczdRZkxNVGtCVGdYamJVa0NkQWtqUWgwRnpnVnlQUmRTVkFubXN4NWNqQWZEbkQwTlBrQU5jTmNTQWR4WFFNOTAwU09UNEIvNUllSjNJeDhoTWduL1RSM1dEVXZkQVQyUGtBRFUvVmwvNE50MjNOMTI4T0xVc2R4ZjBOeExjanpYczk4VEVlTmF3QUFnbm5TSXNRZ0hQaDVBRGdaQ1RoRWRMZ2dNOE5ZemtkZDBNT1gzd0NUcHpkemZQUkZSSGdaY0RnMVJvZFZlc0JrUW91VjFVT2I2WU9LQmNCV3VqUkJqTGdadVBvWXF2aGlzQXlGMUxnWXdYVmtMY0J4OXdCanowZWQyampwVlBnZkc0Q0dHN3VjWEFqWm9UZ1dMbmgrTmZ1Z0FVZ0FSampoN2ZpR1ZidWtSc2crQ0xnY2NFdWI0eVFoM3pnMy9BN0xZNXJYcEhzTG1mSERxK1FEcVg0NER1OFBuamdEcnFCNDJhTEFSYzE2NmpZRHJzWDRZa1I0RW5JUGxhTnNJd2swNG1BRUdWN1BrTUJZSndJNmF1ZzRHZ21Ic0V4c0pFLzQ4aDVIZ05NQVVTcExuYTZEa0MwTTF3eTREYVdFQXZkNFQ0SzRLcEU1ZlpPRUw1VzZXUlZFU1FvSkxrNUR0WjBNMXFuNENxN0FYNlc0YSsxNUkxbDVqTzBNRUcrTVE5ZUxzbHNUdGNJRHYrVUV2Rm9NeEJsOFVvN0VqOGIwSW43MHc5TEl6clBDVEFmQUxCSUFPOWRMdWU4M3djYkRnUWZNdlpJRXhIYTlmeFRBd0gzTWxmSzBKNjczRjNuRHpPTThzMm8wSmpiMHJPUC96M29Bb081OEpmOTR1S3dMWWhsRHpSai9jbjhBb1N6OHBTSjRILzBYLzlCQ3k3bmlBMWxTUEp2WU9DalNkOVZwdjhudnczbDR2SkRNL0NwQTA5bU15OUtJdzlXaFBISjMrQjFEZDlzTVI5WUhROVhKUElsWVBDRTUvOXlSeVNhaVE4WHlmSUdVdnpBTWYrRE9oOXFsdzM0WWZJUFZ0QzRleStNYkRFSVVQK1MyUzZaTnc0WlEvSHVVOVRhcWQrYTk5eURmdStYQTI2M1gvNzZJdnNKYVBDY2wrK3BXQkFBRVBDWEhQK2dqeFRUYlI4N0p2R1kxdkUxaC8reldXK3AyQStieXZhV0IvQ1lvZi9PTkYrb3J3K01aUGVIUnYwVXFmOVJVZUdXZS8vUGNhNzU1dzVkU2ZkSG5mQ1UrZS9USHQrNmpnNDk3UFo4MHZDc1UvL256RzR3RkJRT2lQRDNEK1ViRVArZVJqSHpEUi9ncGkvYW1nQUowdkx2L3ZEd0tST0pLbGVhS3B1ckt0KzhLeGZBWUdBT0c1dnZPOS93T0R3aUd4YU9RMUZMTWxzK2w4UXFNalJlTm92V0t6MmkwT1lBaEl3K0l4dVl5aWN0UHFOZHZuQlp2ajhqbDlWYnUxOC9wOU1Wbi9Bd2FTQlRRZzhCMGk2Z0g0Q1RZNlBzSlE0U1ZTVm1JdHdrRnFibkpHQkJ3c1dJcU8vaUFJS0hXbXFnWXFDQmlTd3NJaU9HU3UydDZhTVR6RThpYk8xdUlHQzBNNXZQWWU1eTB3RERNM095WFlJRXR2UFN3N1gyTy9FT3hPZDF0NUpXU0xqNnNjY0h1ais4eWlrcmU3S3ppRXBzL3ZMRGk0NCtmRFQ5SlBEeGhZeXllUUhJTUdBL3A1V3hSdUlFTnlDUW9oNURXZ0dyQ0dGcHNGWUdEZ1lFUllYZ0plRElsTkk3K09mQUQvUERoUVVTUkxZWjhlbERTcEtPWEtsamFEUFRRbVV3MENnRGQvam9TNGM4MUhvRWF2ZllvMjFNb0Fld3VQUW1XV3dFRUJqa3VQcEdRWGRlc3dlQVZpWHRWUm9BRUJybWFkUGZ3YTlrY0JBVS9Qd2gyVzRJRFFwUUFLT0NnYmQyOHpBZzRlNk56cEpTL2Z3czRDRUJEd29PcThBUWdlQ0NCUTB6QmxXNGdGR0ZoZzFWdlR0Z3kwVmc0dE5mRmlCSnNwRGJoclFBQUR2YUpmWXlQQVFFQ0RBcVpIcFM3ZzJUWHMzdUlRRXdqdUFMUHVBY2FQSTArZWZJRnUzYXRaQi9jdFBWK0M0QUpvTnkrdWZMdHlCQVVnUnc1T0FQVDA4dWJQbzArdmZqMzc5dTdmdzQ4dmZ6NzkrdmJ2NDgrdmZ6Ly8vdjcvQXhpZ2dBTVNXS0NCQnlLWU02Q0NDekxZb0lNUFFoaWhoQk5TV0tHRkYyS1lvWVliY3RpaGh4K0NHS0tJSTVKWW9va25vcGlpaWl1eTJLS0xMeTRZQWdBaCtRUUpCQUFSQUN3QUFBQUFsQUptQVFBRi8yQWtqbVJwbm1pcXJtenJ2bkFzejNSdDMzaXU3M3p2LzhDZ2NFZ3NHby9JcEhMSmJEcWYwS2gwU3ExYXI5aXNkc3Z0ZXIvZ3NIaE1McHZQNkxSNnpXNjczL0M0ZkU2djIrLzR2SDdQNy92L2dJR0NnNFNGaG9lSWlZcUxqSTJPajVDUmtwT1VsWmFYbUptYW01eWRucCtnb2FLanBLV21wNmlwcXFFSkJLNENzTEd5czdRTXJnUUpxN3E3dkYwSkJ3VUlBOE1ReGNiSHlNbkt4Y1BEQ0FVR3JncTkxTlhXUFFrTUFnOExBOHZmNE9IZkF3c1BBZzRFMStycjdCSFoyOTNpOHZQMHlPUUc2TzM2KzZJRURmSDFBZ29VT0FEQkF3YlQrQ2xjK0VqQmdRY0FCa3FjU0hCQk5JWVlNd1ppMEFBQnhZOGdBd0l3Y0NDaHhwTW8zLzg4RE1teUpiMEJCUVNZVEVtejVoY0dCaUs2M01rekhBSUhNMjBLSGZva1FjZWVTSk4rSytBZ0FOR25VSWtvY09CUnFkV3J5RWhHM2NyVlJnQmczckNLSFF0QVp0ZXphRkV3ZUJCMnJGdTNGOVBLM2FxZ2djNjNlTjhpT09CMHJsK2FCTmptSFp5M2JOKy9pQlV5S0VDNDhlQ1JoeE5MdGtaZ2dlUExqdzFFbnN3NUZRSEdtRU1YYnJDNXMybFFDVUNMWHAxWFFPblRzQzhwTU1DNjl1Q2ZzWE5iQ2lEQXR1L2JESFFMZjhTZzZ1L2pieHNFSGM1Y2tBTEx5S08vQmVDZ3VmVkFEYVJyeDdzZzNmWHZlQWpjM1U1ZUxHbnc2T01FeUY2K1BWbnY2ZU9uWVREZXZYMnJtdVhySDdQK3ZuK3hBTUMzMzRCYUpBRGRmd2hhNVJyL2dReGE0VUNDRUY2MVFDNE5WdWhFQUtwRnFHRlBBQnhnNFlkSmlMZmhpRWtWOEJxSUtPN3dJSWtzY2loZ2lqRGVFTUFETGRiWWs0Y3g1a2pEY3piMnVGTURPZ2I1UWdMMStXZ2tSUXVjS09TU0J4enBKRXNBVUxqa2xDS3c5K1F3QzBCRHk1YXlORkJBQWNUMDJDR1ZVOUxZSTB3Rk5IQUFManNvUUlBMjJ3RFFsb1lDa0tsakFBZVNXSkFCVWg2aGdEWVpJbWlBblREaU9lSTkrVVJCd0FFNUpXZ2lvUjhtWUJ5Q0JpV2FoVU1QVE5yZUFzdEJLaCtSQ0k1VTBoZ0pPSkFuZVJONk9pQ285eUZnUUhCcC9Oa29lVkdxK21tUjJwWFZhUnBmQllwY3JiYUN4eXF0cjlveDFhbS9CUmpzZGNOcXR4Y2ZCTXg2SExETEN0Y3MvM0lEUFBEaUhsTnBXaHUxMWNKMmJiSm1FWElBc3F1Qkd5NW40OXBtV0NJRWVDdWF1dXNpWnVpdkN6SlNuRy8wMWl2WHZlUXFpUWhWdGlHd3E3OWQwZmJiQVBsS3dodXVqaVdKOEZ3SysyYkF3UTJadVpyRUU1OVZjVzBGYkdzSmZhd3QwSEZYVGJwYm5TZnJ6WG5ab0NkRGxYSnREd2lNaVlHckFSbnpVQVM0Q3lzcEgxK0c0ODQwS1FCeFl6V2pRakptL1JLOUVNQ2hBZkF6S2pOR2piSFQ3V2djV3RLN09IQzBXeVpqamRHS1VRL05TN3lZd1N3MlB3bTQzRmlxMWlqZ2ExNHJveEZBbjJ2ekt1OWcrYTBUOUdCNGt3RW0xM21qb2JWamRiTXpNMkVJMk15Rmxjb1dic2JpalVtdGtJaU5GV0JHejhpY0o3a1lSbU9HUVAvZzdmRFlXSjM4NFFyMzUxL016WjNqMTJEb21NaGN1QTRCdzZ4N1FUYlNzSzlqWlY2Tmg5RmJPQVZjbmZzVG9UdW1Oa3FVdjdVOEZ3cTRyY3lZeDErQnJ2TkN0U3ZXMUZ0Y3Z3emgxVWN4ZkdQUDA2VDlWUUQwL3NUNDlFUWVmbEhTdTJWMjlsOHI5UUFYYlV2aytmdE1ISTdYL0VNeEhWNjRad1h2eVdOMS9FTUNBeHdEUUtJRW9INUlTVjhXMkNjUjNDWHdDQTlzak02NklxbTgzTzhLeVFOSjhTNVloTi9ocFh4YkNjRGVyRUs3SjlodUlOUWpJUkE0eHplL25DOHBZYU5DODBJQ1BobnV3SUJXK2FBTkljZ1QxRWtoZ3k3eUlROTI5eGFPL1NVQmVBR0E4WTVBUVo3c1Q0azFRQ0plZ2llWkhRWlJDdEdURU9tdytBTC8vd0ZvakhOaElsWmFpQVF6OXNTQ1pJd0JEZkhDUm9vMUVRcHp2TW9BcGhoSEVnQXhLWW5yekF0djlJUVY5c1NJZld5QkY2K0N3c2xvRVNzSWNNSWlleUxFUkxMZ2tXTnhvcmlJMkJKRUpzR1FPK0dpSlZsUVJheEljVGhxVklvRWxUREpuUXdBamFNa0FTYTMxNXkvS2NXVFJnQ2xTd0laU3hTNDBTb2JISTRLeWFJK0hiVFNKWlhzSlFyeUtKWWNOaWQvWXNIbEVIVEpFbEVxMDVkNGVTVjRTaG5CWXQ3Z21DMnBvektaaVJWcE1tZVFMakhuRDZnWmttQmU4d1RzZElrenYzTkRsd0RBQ09BTWlUWGZXWUpVV2tXYjhlRW1JWW53UjVhSXM1ZXp2SW83MFZOUWZSS0JuRDFaS0Q5SElOQ2s3Qk05RUIxb0VOQVprbFZPLzdRRVlYekxRWmxqeTU1b0xnaFF4QW92UHhxQmtpcWxrZWdKb1ZYNE9BT1h1dVNrTENWQlJwUGkwUUZWMUNVd2xSRW5Qd0xMZDNKMEorcU1UendwMGxNVllTV283MXpnSFMyMFU1YzBFQWNOWlNwTlI3bFVnNExvcUIrSlpBK3F5cEtrdmpPZkxwRW9nUlFnbHBHK3dLWlE4bVlmRTZxVWl6WUlyaXlCYWd6b21zNmNsdUNuUFNGZ2hVS3FTcm1tQUswVGFTcExaWW9WbktZSXJ5RzU2Z3grMlVtL2tnQ3lMdGxqamdpYmxHUm1NWDR0VWV4SG9Ua1dzOTRWSzRZMWdULzdhbGtSZ0xXYXFZMHBWaVFMQThwMk5MWktKQ3RQM0VvZ3pDSUpCd0VBYlY1Yks0S3Vnc1N6TWRJdFNMWjZBc1JLaExsOWRDNUlSQnVqckU1a3BmKzEvV0pyK1lvVTA0Skl1Z0p4N0F5RUcxbmlBamFVdU5XUGNRVVNXNmxhbExpTXZRcHZMWFRlajlCMkJiNlZpSGRqbVY4ZVFvcXQrS25CZWw4Q1hUS1MxcFFGcnBCdHAwdURsSmFJdUs4TnlYNWhCTjZBekZjRXEyWEpmWHVwM0piWWRVcmNsZkJrbFRJQTRnNTRJaHNPVW44Rk1rOFhrUGNqZW8xbGhTY2lYa2k1TnluZTdMQkVCUHZPWWJybHdqQWE2bzVqa09IcHB2ZUM5VzFKakpka1FpdkdJTUlCUVc2UGhXemtjTjI0SnkxZUFaVURrbUpMcnZnakUxN1NsZ01DQXdlLzhjajg0K3hWUHV5cEJYL0VyVE9XUjQzNUNXWDcraXZPOHBqd2wra1JaakxxT0NSekRsWUF0TnNDNndxa3FLTTBORWlBTENSRjErT2VMdWIvcVYveExKQWxFeXJKejIzQm42T2NVeDhES01GQzJuUkFlRndDU29NRHU3M0V0SWhQOW1LS2VMZkpMbUgwQlVPOEUrcUdxODcwa0hJSmNDMFBTSDkwejlmZG1hb0RJbFl0UC9pamFyWktzVThtNm5wY3N0WDZaU212aDd5elFTdWxqczJlUjVleG1HMkpCQnBoSjViSGZVMzlEVkR6ejlFVWtiV2RnSjNuRlF5N2ZSOGxOejBzdmF3aWYwVFhJbkN6dHlmcWFheG9GbXZkRnNlM1hadVVQcFB3M1JTaGQ3V2dQWkFTcTJETTh5RDFYQ0V1RVZ0M0ROM3pXQUhERDgxUFdOK3ljUHFXU0F2TjdFcCtKcnV3aFVQNFBGb1ljSEFNUEk0aFp3bXFZM1pscEI2MnMrOXNPYkUvUjNLYm8wRGw0akE0LzZZOWtHMGpiT09jL25sUy80eWVRSG5QSTh0aUN6ZnhVaEJ6QzE5VDZnS1JPTkdJN3ZJVWNQMGJhRTc1VzE1T05IYUh3K0VuK0xveTBENUtXdTlFM2RVQyt0bFRnUEZ3UUoyTUhrK0t3aWZtOUdTa0FPbjBJRHNKVDU2VWYrZE81OThZSStEbmdXOGZWaDBrZTU4WTRwZEJ1OFczZTVTVG44Y0F3aTdvYTZQQThrR1BwZHJwb1ZiSmdWNGNJdXQ1WlMzWmQzRllQRytuRDRkZ000OE11T2NONndFUitza29Ibm9UMFA0WXRoZWIzQVh5K3J5TlBoblMvTDB4Z3U4MHQrL3lnc2RIUnZLVHdueWlEVjhrSkl6K01hYVBsT3JIalBDQXpIN0JUNkQ4WWlBNmZHWVh5TEtIUG43Zkk0WHR1ZjJmRExWdkRPN3pCUDQrcEgvWDU5LytFcFFmL3lSVWMvS1ZmLy85cDFQdkYwZTRWdytSaHpYNkJ3SDJWM0pZWkcrMXhua0kwNEFQdUJQbjl6bk8xeEl6VnowV1NIN1VwMFRYVncvckozN2RCWUxkcDBRSlNBL2VOekVmNkg0cEtFTVNpRXdJdUhRbzJCTXRHQzRiMkZIbWhqV3hCdzRpQTJDQkpVUHBsM3Q5OUlQZlVIa25lRUVIdG1hSmhJU1U5M2xMbUVBTnVBeGE5ejdsVnd4S0dGRVgxSHBUMTBkWkNBRW5Bb1hKSUhoaXM0TWdZWGhrNUlYTTRIVklZWVpZazNkVEdFY2p1SFp1eUNIODA0UldVWHo4STRkaGRZZjN4Mzd5TTBvTitHMStTQkVadUROc3VCU3h0SUpsbUFKMW1BdzVTQ2o5cGtlSitENWttQXlsTjRNRG9YdjFFb255c0lDc28zcXJkNE5PbGp0NmlIS2pKSUF0SVZuL1dRaUhIVk9GeXRDQk1nU0t0YWNDbVhnTUFDZzJySWhEeWxTRkdKT0x4OUNEcW9LR2k2Wk1qbWdQSzFCM3N2YzVoN2dUb3BnN3dmVmVLdkNDZVpPS1BFV01raE9HTDJlTHhnQ0w2OEtNQXVHSngrT054bEI2R0NacGViT0l5MUNDbHZSNDlkQ0JZWGlKeTJLTWIvWk92SWQ2S3pDTlNFR0w5VktFOVFDT0NVU0tMZUU0K1FnTzBXZ25CQ0NNNEtDR01xWktMZENBdmtZMHlkaDcxd1NReXlCNHp6Z1I5T2dwNXZnTmJOWkhCd2tPNkRnQzdPaVB3UUorU01GMFRHZ1ZLY2FOV3pkMkU4V0pFcEdCRE1rTUZKZ2l2ZmgrSFhsQjR0aVFML0NUMzNDRnhUaVM5VkNTY2NTUGIvZ0NHeWtSQ2FrakdEa1BmSWhGN09pQUw4Q08veE5aTDJHNERDeEpRdkJZRDBRcEFrS0lGR0ZKSmxDREZYYzNTa1lKZGpDd2xzcndsQ255a1VrWWIxYVJsaWZ3bFZMcEw5aW9keXlGbC9PQWxQM2trdlVpaThrd2xWaWtsR1FaQXdUSkVvMUhKbks1RE9USVAxVXBoakxnbHNuZ2tKNFNYOHFXVTBMNURYYUpUUiszTElRcGlZdDFrK2M0QTFYcGpuWkNrNHlaVTAwNUVVQ21raUZSbGpDaW1TU21qZUZqbVlWWkE1MzVQYmJpbDlIR1VwTXBpbytKbVZPeWswZ1Jrb2wyRlYwcEFvczVYSlNvbStKQW05eUdXalpRa2NoZ21COENuQU1oa0VvVWxiNXBBK0NwREpFcEg4ajVSajBwUTdKWlhqYXdsUkNnblF4aW0wb0JtSWswbnNwd1pOSXBmVlF5bXRtWms2eXpuc2VWQS8rdldYSCtLUnlzcVdGK1paL0owSnorVjA1Q0lwL0h4bEwyS0JKaGg1MzlHU1M5eVlKKzlaakZBSmNpd0tGV21TTWdtZ3dlYWdTOFVhQ21NYUdqMWlhbWFRendpUjdQMlUxZ0lBQURVS0s1b2FESW9KbzFNSm8yR2hzWk9nOG9DVVk2TVltY0FhQWdVWjRsY0o0aFlad01NcUk1R2dZVjg1bnl3WjN6NEo4V2lneU5HUi91R1lWZmtFZElDaHRiQ2dGWktnTWpTcVQyY3FYZ01LWlRFQ2hOb3gvOFNaMHVZS1FmSWFYZ2dhUGdjRXBmc0VOMGVoMlRXUXc2aWdOMnVuMFZvcVNIQkFhVmFBeEJ5aHdxYW9RekJDQW9LaGNRYWxHUCtnTUNoYWNETXFBVU1hbjhxYWJEOGFNUlo2aGY0NTNpMHFMSDBLTW1RS2pzcVI5T2lnei9vdG9FZVBXbGlJR215SUNiS2lDckxqcXBXeEdtbDBtclJiQ1hMcHFlbk9Ha3JRb0RmVm9NbkhvYWkrcHFZWEJVdzVvWXZ2cDJ1VFFXY01vWi9GbVl1Tm9EcUJxaUREVVd6VXFzeElRZXE0b01ETW9FWFdXbVQ3R3E1bW9DdG1vTXh5b1p1dnFJTTZwKzExb1R6M3BUU1ZDc3hUQ3RmcUVBNjdwMndMb0U5dGl1ZjNHV0xLUUUvZnFldkFvVjFVcWlVSXBpMW9HcEZOR3RxT2tXRXJzVkVCdFhZRkN2MzlDbW5mR3VFSkN1S1hDdzJwb2IrRHFMeXpxbjg0b1J5Um9RRlRzREhxdXZYRkZQU3RHeVJwQ3QzMkNxTmVHcDRQQ3ZPTEN3SER1d09pc1BBUFVGQ1RpdVVCR29ET3NFWTRtV0tic1BWRG9Sc0dvRWtjaXpRM0dnL3g5aHFhNzZGZ0lMRlJjTFc2QnFUMDNMRGpGYVJGR3dzZ0dScUZGUnNzb0FzajB3bnBwa0wvbTVzV0dyQWxaclo1SXh0dllUQmhwYmFZNFV0TjlndEQyd3NPOUp0Um9ScVhzNHR6MWJnSDZCdFBBNkJYaHJUNFRMRUIzVUdJQ2JCRFlyRVBSSkZJeWJESkhMQStFS0FXL0xRWEU3RHpRYnJRRTJGNTg3c2xOd3FCS0N1S2pBcjQ3eG9rOVF0K01vRjJycnA2NnJhWGtSdWs5QnNQTDN0V0pSdWZwd3UxcW9CVjFMRVZ1ckVMNnJ0V0p3dkVXSE1qV2tCYXpMU0Nua3QxS1pzRkpCcXNvZ3ZOZHd1Umk3QlI3THJsQ3h2RzhCczAwZ3VNYkF2ZFJBdlBucUJjNDdFVGlyQ2dKRVBtSVF2c2VndnJ2QXZtTDZCZFBidWpZeHYvK01rN3ZYaVRoQ29iK3kyd1F5aXhTOEs3bWoreEtkZXdUNmV3eVp5dzZwYXd3UGJBUzBDeElJaEJHWWN4bFJld1I3ZTdvbnNibVFTUVpQQzBNWFBBb1J6S3Bsc01MR3NNRHRVRFdFc2FkV1lMWVZoNytoOEw0ZUpzQTVjTUpoaGIyZlFMNElaZ2FQMjQvS1M4THl3TFpDMEwvVGtjS2RNTG1FWWI1U2tNRWhFYitaQU1BRWpBWUo3Rzg0dkFrSG9MM2hNTUZhNE1NRHdTbUt3eHJKNnlDcjhTaCtjeGswdkFWQ2JFcEszQWdCZ01RSHhNTStZTWMrNGNTVWdNVmJoTWM5WUxnS1ZRMlZ3Um8vS3dheUl4cHd4QXRMNHhoODdBVDJtd3dibkFvVjNJeHV3TVI1d2NhcklNTkNBd2N1ZkRzZjdBZzRVeHRvbTdGZy9HaGRyQy8vRFV4NmNxREh5ekRKb2tDanRtSEZVdkRKWlFqSWQ4REpsMUc2VjBER0U3SElvVkRJdHFISmNWREpkMXJLazlESWJvekxReERIWVBQSWdGREh2d0hEYmVESzhqQTZvYURMbDNISWFtRERTM3BGbWlBQXF6d1JCb01INkt0NWZjTUpYc01hMEd3Rmdqd1dDQ0RGNWlLeXhOZk9OV3k5VE5Vd2w1QWF0U0hQWXJERjNBckVlTEF2eHpHMGVBQzdBYk1iRFhESzlaREtYT0M5Q2lYUWMvQVowdUhRK0RQT0ZJRWJrN0RPdFJIS1lHREw5Z0RPaXBBQXZyeVNmeERDaklQTWZjRFJ0VUhMWGdEUzJWa3U4SExPd2ZrSERNRFFHZDBVaTNBQTlLeUFnZ0RUOXFEUGc4QUErSnhXZ3dEVXg4ek1WWEFBR08yVTVqSXRGeU1JWDlIVC94OGh4blNBMUEycEhGSk5NTWZoMG1PQTFWaHEwVndRTFUydFpJZEF4ZG0wQUh6UkIvNVExazU5Q0dDZG8wSjkxVFFOZVltQTFzQ2oxWGdBRE5yaDFaT3pIUVhnejF1UUFOTFNIbjc5MSs1QkRtc3RCN1BoMWduSENIRTlQUTB3eDBkQTF2OWgxWHNRMmVLZzJFcXRBOTFTSG9lTkJwb3QyWlFOQkRoQjFXVHJDS085MlV3aDBVWndMTzdoMFhHZ3pOc2hLbUdBS1RpdElKR3cydk9BQUpPdHQvOXdIMkw5QmdCZEd6RGhBUFpzQXh5QjJrb3gzRzl3MHhxU0xVQ1JCVjloQU15Tm9KTlEzTDRCRXdKZ0M2N2RBbi95RDdrTklJSzlCOXFkS3c5Z0tRaThLTmFkSU80ekNYN3NId1loQUNEckp0dndKZVBkeFB2czJHNVJFUDlmb2liMXpSRmdzaUhjdkFpSmZDaitiUTYzY0lrQmNBc0VJQUFHOENYOC9UYkpUUWZPSE4xWkVoTnI0Z3IwZUFzSDRDVUZJQ2N0WXNhYVlNMkUwUXdvbnVJby9pUkwwZGxuSU0wc2Zwa3FQdVBOOENURW5BbDRIZU0ra3NhSllPSTZUaDZZM1FoTS9lTkVIZzZ5SFFnNVh1UWo0dHg5QU1WS3J1U1cwdzhUL3VUZlV1RitvTTFVenVJa1BncHlrK1ZFZnVPaWtPUmVUaDZoTFFnNlBPYmxjZVR3TXVWby9oWk1YZ2hEM3VZMjh0NVVVOWR5TGlIZnJRanhmZWNJQXVhVXpPWjhia1V1cmdmOUVlZ1FVaGJXTU1xRzNpcmxqUWtFdmVqMkFjdTd3QnVRN2g1K3pndFlYdW5STWRlRWZOMmEzajZOM2dtMC9la0ZVOXFTY09iL3BFNUpnMTRJTUo3cXRTSFM3ZURrcnU0WThad1JqejdydEc3bDRRem9zdzdyL0ZEb3VQNFlhaTRLc3hIc2VERkNSV1BucVI3Vk5rSFV4ZzVKYnk0S1BQM3NFaExxdk1EUzFHNVB3NjRLNHB6dFBFRWRYUEV3M3M0U2VrMFhxSjd0NzNJV2RUSHVycGJudmFBQXhqem01WjRXZGN6clJEN3ZrSHJ1cEE0WmtySHU3QjRPL081SWhmM3Z5b0R2aWJFZW5tNGtBR0R3L1c0WEJKK2R2aTRaWDFIVU9vNEFNaDBiOEo3d0xmSVRxOTRMYXpIdUhIOGRYSjN0QzJEdFcwSFk5djRmQjZHbEpmMGtJNkhyUTdFU3BQNFQ3aDRWc0UzcUM2RFN1VEVWS1k4dHhXSWhISkhmN2JId01JOFdScUh4eG4wUUhaOFNBWUFUUXY4clA2OGo3VGpSODVYekFJc2RKRjhCRVU4T0FGYS85RkZ4OURIdUtpWVBIc3NkNHlNeDl1bFIzVlQvUmpsZjlNeFJLZ051STFaZjgvRXhGU0d1SVdsaTZ2RmhGSGNmSVRIaDl2dnhDMGN4OUV5aDl3MUNBQTZRS2U0eEV1b3RPUTErMzAvZmtQTk5BRjRmSDQ5dkFBREJHdVFRRXdpaFJLMXczOEx3RmdNQUFGcGlDNWIwSmdMZ0phSGYzNlRQK1lhdmd3N3VBQkNPM3pSZSsxanlKVjlpQUxCZ0M2L2ZNYTN3NEttUCs3UnYrelQrRE9aQTM3ZEE5OFMxL016Zi9NNy8vTkFmL2RJLy9kUmYvZFovL2RpZi9kcS8vZHpmL2Q3Ly9lQWYvdUkvL3VSZi91Wi8vdWlmL3VxLy91emYvcElUQWdBaCtRUUpCQUFSQUN3QUFBQUFsQUptQVFBRi8yQWtqbVJwbm1pcXJtenJ2bkFzejNSdDMzaXU3M3p2LzhDZ2NFZ3NHby9JcEhMSmJEcWYwS2gwU3ExYXI5aXNkc3Z0ZXIvZ3NIaE1McHZQNkxSNnpXNjczL0M0ZkU2djIrLzR2SDdQNy92L2dJR0NnNFNGaG9lSWlZcUxqSTJPajVDUmtwT1VsWmFYbUptYW01eWRucCtnb2FLanBLV21wNmlwcXFFSkJLNENzTEd5czdRTXJnUUpxN3E3dkYwSkJ3VUlBOE1ReGNiSHlNbkt4Y1BEQ0FVR3JncTkxTlhXUFFrTUFnOExBOHZmNE9IZkF3c1BBZzRFMStycjdCSFoyOTNpOHZQMHlPUUc2TzM2KzZJRURmSDFBZ29VT0FEQkF3YlQrQ2xjK0VqQmdRY0FCa3FjU0hCQk5JWVlNd1ppMEFBQnhZOGdBd0l3Y0NDaHhwTW8zLzg4RE1teUpiMEJCUVNZVEVtejVoY0dCaUs2M01rekhBSUhNMjBLSGZva1FjZWVTSk4rSytBZ0FOR25VSWtvY09CUnFkV3J5RWhHM2NyVlJnQmczckNLSFF0QVp0ZXphRkV3ZUJCMnJGdTNGOVBLM2FxZ2djNjNlTjhpT09CMHJsK2FCTmptSFp5M2JOKy9pQlV5S0VDNDhlQ1JoeE5MdGtaZ2dlUExqdzFFbnN3NUZRSEdtRU1YYnJDNXMybFFDVUNMWHAxWFFPblRzQzhwTU1DNjl1Q2ZzWE5iQ2lEQXR1L2JESFFMZjhTZzZ1L2pieHNFSGM1Y2tBTEx5S08vQmVDZ3VmVkFEYVJyeDdzZzNmWHZlQWpjM1U1ZUxHbnc2T01FeUY2K1BWbnY2ZU9uWVREZXZYMnJtdVhySDdQK3ZuK3hBTUMzMzRCYUpBRGRmd2hhNVJyL2dReGE0VUNDRUY2MVFDNE5WdWhFQUtwRnFHRlBBQnhnNFlkSmlMZmhpRWtWOEJxSUtPN3dJSWtzY2loZ2lqRGVFTUFETGRiWWs0Y3g1a2pEY3piMnVGTURPZ2I1UWdMMStXZ2tSUXVjS09TU0J4enBKRXNBVUxqa2xDS3c5K1F3QzBCRHk1YXlORkJBQWNUMDJDR1ZVOUxZSTB3Rk5IQUFManNvUUlBMjJ3RFFsb1lDa0tsakFBZVNXSkFCVWg2aGdEWVpJbWlBblREaU9lSTkrVVJCd0FFNUpXZ2lvUjhtWUJ5Q0JpV2FoVU1QVE5yZUFzdEJLaCtSQ0k1VTBoZ0pPSkFuZVJONk9pQ285eUZnUUhCcC9Oa29lVkdxK21tUjJwWFZhUnBmQllwY3JiYUN4eXF0cjlveDFhbS9CUmpzZGNOcXR4Y2ZCTXg2SExETEN0Y3MvM0lEUFBEaUhsTnBXaHUxMWNKMmJiSm1FWElBc3F1Qkd5NW40OXBtV0NJRWVDdWF1dXNpWnVpdkN6SlNuRy8wMWl2WHZlUXFpUWhWdGlHd3E3OWQwZmJiQVBsS3dodXVqaVdKOEZ3SysyYkF3UTJadVpyRUU1OVZjVzBGYkdzSmZhd3QwSEZYVGJwYm5TZnJ6WG5ab0NkRGxYSnREd2lNaVlHckFSbnpVQVM0Q3lzcEgxK0c0ODQwS1FCeFl6V2pRakptL1JLOUVNQ2hBZkF6S2pOR2piSFQ3V2djV3RLN09IQzBXeVpqamRHS1VRL05TN3lZd1N3MlB3bTQzRmlxMWlqZ2ExNHJyOTFPQVBJT2x0ODZRUS9XcDkzWGFPMVkzZXpNVEJnQ05nT2VpdUdOU2EyUWlJMFZvSGpjWDQrRndOLzY4TmhZblpQM01qZDNpVitEb2Y5akluZHVDdGxJaDc2T2xYa2hicm9xUnI5Y0UrTnZxZjI2S2VqV0xsUzdZazE5dXlpOU9XWjdUYnhmQllEcXYxZlN0bU5tNzE1NVVnOGtMNHJnZURVL2xPWjQrUzY5Smd3dzMxVUF6M09JL1BhTmdOK1l6bDFKbWxmMDVHdkNPbDdEYzRWM1hxVzNEMG5QaE1XZmZ2ZzdoVzEvSmJuREN2djhVcnlrY081L2trRGRXemoybHdUZ0JRQlhRNkFoek5lNjhUMkZkbGNab0FRYlFUMEFZZTR2Q3NSSy9UWklDUHpSN3pSOXM0ci9TSmlJQUZxRmNKMzVYRktzeDhKQllCQXIrcHNNQmNXQ2dCb2VZb2Rnc3lCYUNzaVRBL3BRRU1HYlRnUVRFMEtsSE8rSWdnRGlXTFFYbXhRYUVJcUI2T0JWMERlYytRRklpRmhrZ3duQjlwMy81WW5GaUdITWd4YVZNb0FQQ2llSnhnTmpHczh3eHJHZzBUb3lMT0ljODVBM3BheXdqUHdEQ1FEMmVJY21XcVdOOG9HalZXaEl5RFpJRVN0Y1RJOExYZExEUnNwQmtWaHhuWDdxcUJSR1doSU5DbkRiVlVaNEhTdnlSSEtmZElNcGs1SkQ5TVFPSzB0TTVSYzRHY2NHWVJJcHJaU2xHUEtJbER2dXA0OHVlYUl1ejlDOUJYNklsamNhNWhtQWlSUlN4b2VYTEtta01zZHdRNlZFc2tFS0VJc3pwMm1GUjFwRmt5QmFaVXR5eWMwcjNOSXFWTVNtS0hjaXpISnk0WlZqUVNXTXhNa1NUN3FUQ3ZUY3lRQmlxWjlRWnZDZVd6Q2pIWU9VVDVESUVhQkZnT1pPd0JtamJGN0ZuZ2h0QWpLVnNzMEdGUlJKRWJVQ00zbWlRUjFOLzlRbC9Nd29FYXFKbEhZS2FaSWhnYUZJbWVCTnBmZ3lSeVJsaVR4WDJvUnpKb1doUzlxb1FXbmFCSGhxazFBMmJRbEVlUnFFaTdLa28xTnlxRkxJU2RRZkNCUXJFUFRVR3FIVTFDUW8xQ1V2WmRJb3EycUVqL1lFcDJScWFVdXl5bFVlNk5RbFF5V29Dc3M2aEppZWNsbkZWTXBCMmJvQ0w0Nmxva0VLcEVUU1NkY2JCTFVuVEozUyszaHl6YjdLU0srQ25DdUk0b3FVUHhyMkJrWU5DVmtKaFZpQlBGWUgvclNjWWxFMDFaRGc5YklwdUtwUS9lWFdqMHdXdEN2dzZsdjlGUUNySUJXMUwwRHBUajVMSmRsT1pKQ3dsVUZwWFJKWVNQMFZKQ0hOclYyaEdsd3FxZllqZk0zdENYNjdrOVBhYXAwc2NhNXlJeUJXOGNWTXRQOERlZTEwVFJCWmtLalVYOHlkaURTM2k0TE04cEJveDZVSWVWV0EzWkFrTjF5dHBlaDZUNURlbHN3MFptZVZTRnBoYTl1VzBGWlYzYTJIZEVHNzIzR0t6WkJIblM4SmhudVZmWXF0dmdPNTczckRhK0MxUVJja0ExQ3dDS3JMRTVNNnJiOEQwWEFFQnFzZ3dIWDJJLy9scW5taHVsbWd5bmUrSjk3SmQ0bkdXRDJ1RjhJaEdlL2FISGpGOWJZWEpQdWQySVUvb2wwQ0c3TnorUldJaEdHYlpQZWE3c2YwV0RKb0tTelQxd1Y0SGhtZUxvZDVrdUo2VVRrZ1dWWXVpWmQ2dXdLSFdMa3JibkJ4RVliamdMaXhyekhtN2UvYVhJOHVSNVRPRkJsQWk1Y1YzMmJtRnNvVUtlemtoa3dST3dQVXpDSHhzT2tJUFpIM1ZyWEpJQm4vc05NcVN3OWZ0cTBabUc3R2x6Yk42Uzl4Q1JZei90K1hFN3M5UU12RGwzaVdoNkhYdG1VWms4L1U0a0IxVWxZdHRsRi9CTGVsN25FSlVpME9XanN0elZjSmRlZGdIUTVaSTZXR1Z4YXYvWWdORG1QekpNd1M1TFYrbDYxckVraDdIQ3hrZGtDa2ZEdHRMOFBaK2lSaGpVWDRQMjhyQTl3dWdmYi9JUDJSM2lyTzNNbEFkMHZVM1Q0RWwzVFBFNE0zTXVUTkVucHZyOVV1RVhhM3F6MkNhMy9qemJlek5VVjAzRDU5SDRQZkxQRjF4OWhkNkEwNjNCZ1E5K3ovN04yVElrdVA0dktnb2NHWElYSFdVdnEyYTdZYm95VWlNcVZ5Mlg3SmxvaWtPN2Z5Z1pTdTVnRVJ1T0tlZWhXRy93L25BYmw1THh2K0ZrZlArY1VtQUhxbC84bUhhSkJ3bTN3alg4YUpsRDRQandNTzRQMU9PZUNhL3BMUUl1WHBnQnN6d1NXb2NIbjRXd1FYaDREUEo4ZHpxeWdhZ1dJSHlkb2prUGF6di9zdFFmNWQyaUhBN2JqbldldjE0anBGd040K2tJdUQyMlh2OWUwWWZFaUUyNC9xOHhCMEJEaE9FWjBUTGZFRGNYZnllRHgwRkVROTNxOXJ1eFB4amJWeG96VUZuMGNHNFhlMjkyVllubnlZRDhjSUlTK091VHZOOUg0TVkrc3hSdnR3NkhseVdJOTRHQTN2K3hXQU9PaVQ4enRQTkMrOUFQVGVKeXZZKyt2OUpmcWtSQldMcVZmOUNtTC9EZWFINi9pUlRpUDN2eUY1RVZCZTJYWVRQUHJER0dlSkNEejd4bkN3MklLdjhUU2VmQjZrZEg1U2pMNnVtRWQ0anB5SEZJbHpmLy9pVUg3K1FnRFBCMmFBOXpycUp3KzR4bDVKNFZnblEzd0NNWFBrNDMvaHNIcktOeEh5dHpQalJ3OWdkVVFFV0lBdDBJRGlrSGVlQW15THRFY0JtRXdzQUgvR1lIWFYwbnJLc0hvU2RINFU0WGdqa0lEWUZqTzRseFNJdEVmZ1Z3OTJad0pEU0EvOEJ5bjBCeElHU0VMNlZ5SXZzSUVUNFgxVWdvRWlRWHFLWTRLeDlnSmFDQTRQV0M4d0NBNG9hRC90dDFjdjRISTlrWVJVQWpWWUlZRllOSUxpTUQ1d0NBNVVHQ1FmU0E4bDF6bGRDQTV1bUFKbEtCQnZweXJWeDBxVzlJY0MwWVFsZ0lNVE1ZWTZRb1BKRUloSDlJVDdGd010dUZyVmNvZnpZSUgyczRmZ0lFUnpPQTRMYUNFK2xVbWZkSVQwMEljcVlJZ0JnWWhDNG9qL3laQ0huYU9DTHNHS0pjQ0p5L0NGa0tLSUxTR0ROU1NGRlNjRHNqaGFxaktLYXZaSm4vZ051QmhiVm1HRE1hS0twdlZKdHJnTWRSZ0JtSmdNSFdnblAzaFRXTmc1cGtnUGpDZ0NsYmg4U25pTVNQaEpZWGdNYzBXQnZyZU4xK0dNZzVkS1ZoZ092S2dDOFFnT3RHZ2gyWWdVUWRoSXdTaU1OWENPeFFDSktVS01Xd1NQV0xGWjVQaHRWT0tLeUNDUVI5U1BDWVlEdm5oYjdLZ2J1dWlQalZTUFlwZ0RBRmtNbWhnZkJMbU1xYlNFZ0xobjZoZ09EdGtnM1RnUnNHZzYxYWdNMDJnQ0x3bDZPVEtUNFJDVFNzQWJGZGtaSkNrUWFyZ0NFSmxvTzhrdWhUR1VQaUFBQTRDVHpLR1IzMkI3TStDS1Nqa2NLK2wrWVBCS0xka1ovMEVwV1QyUWoxbVhJallKRGs1cEJSV0RpdnZoamdHeGpTY3BqeWpTa1NRSEJuWDBrY1BCbGhBd2p6SHdsY2Z3azgzQmVBSVVCb0hTTlByQmtIalpBbGtwZHgvQ2xQTndmVjZBUVdTSkh0SFlsRVYxUmhYQ2xaM25CWG9KQWRQSEhEMVpnVUVnbDRpNUh5SDVUVWJaQXpiVm1mb3hrUjh4bEF4SmwxSTVHSUhaQk5YRmpOYkNnL0lRbFNvZ21mVTBJSGE1RkdGQVQzRFpHV2twRHFISUFyL3BoYUVKRlhKcGpjRjVCSU5vREg3WkhMbHBETEJaQTQzNURhcDVHcG41akdCd1ZkRnBHc3M1VzBZd25PRFFtcExCa0k5WW5EdGdteDRaSDFNWlpVY3duYmRvbmpYeG5NdndqVTNRWkZjWkZmSlpEUGVKQXVCSm5lQnhuTW13bmY5UE1Hb2hxQnZkNlJJQ2FnUHV1UXppS1JjSzBKOW1wNE5VUUpMVmFTL3JpWWRLQUtIS1FKcTZRWjdKUUp0SGtHejBtUmFtK1JFSmVnTUxXb1BOVWFJdGtaSlVjS0RJS0tHSkFhQVFzSjhyb0tIbk5od3BLZzZYR1FYRXhrQ3hjWjFLSmxGRlo2QUpXUThueWdUb1NZZkNjYUgwSUtOQTRLSE4rUmRzNkJiNzZBVW5PYUpRWVpnMytRUm9LQ0h3cVE5bUdYNWdjSWRRZWhZWEtVakphUU5jQ2c0VkdoVXMyaElGaWdWQzJwQmh1ZzdoV0dKUVVLYzUxeGs3cW5oZ1lKaEFhaTlIaXBKM21nSnBDbVNUa2FkajhhWk9BS01DQWFJWlVhVVBSUVVlQ2dGVFNoZUZTZzh1YXFsakp4ZHRDZzVKNmxRUGRLWTJvVDZOb2FWS3NLVC9BM0dQUWhHcTRHQ3FSWkNmeGpDbysrTVlvN29FT0ZvTWtyb1B0SXB4VjFDWmZuU29xUENnanRHcFU1Q29BOUdiRFBHbnlqQ25UMENqeFdDclQwR3BlQmNHZkRvUHFyb1B6cW9NTmlxUjYvTTlUam9SanVvRWNicUlLS00zV3lDc1pCWVYxdW9XSExvRmczbDZVY0dxTFVxc01TQ3R4VkN1N1BDdWJ0R2dUSENweHJDdDF0Q3R5Z0N3UjNDdTdVWVUyTk1ZdlZvRStqcXdSR0d3eWNDdlNjQ3V3Mm9URFhzNCtHb0R1OHFqUWtHeGRnb0dSQlNCSFhzSkpZc1ZWNXFZbU9HcTZ2Q3J5Q0NyVUtDc0lRRTNHZ0U1bDhHc1RBQ3ArSkVTc0xxRll6Q21GSkdwNmlDeW9sb0dScnNNMUtvUFZVTVlpNWtGMlRvUVk4SVFDcnRRL3llTEEwSWJUV3NxQ3Y1cVBGdXJCSXdxRmoycUNnSHdzOGhuQmhoTEZqS0xDcWhLR0FnN3M4S3pEeHM3T0dtUXNpcExzSjl3QUxJNUVTNkxCVm1MSkYrYkNVbnJwbXRBc3ozeEtIeHpHVTlMbWVNcXRkOEtDV1ZiTWxmYkEyWmJENWR6RFhPTEY5QXFCcDg1Rm4zckNaWEJHa1FMQnFNakdneFREVXZqR0d1ckJSR0xERGE3Q2pBckQyL2JUUis3YlpQYkIwMHJOSEF3dVBhZ3M1T0FNN1V4dGwvQXN3Q0N0NUNRdW83eHVWNVF1Zkx3dXFTQWxMYnhzRlhBdTZKNnUzYVF1NWVScTF6d3R4am11NHdRdXJhQnVKZWtNcVdBdkJGanZVTFF0V0N6dW93UXViNnh0S3JrRzVjTEN0aDdHYU9MQmxHTFllZlJDUUt3cVRrV3VQOWFJTEJZdGplYzREV3N3YjZjNjc4RGdRQ3pHd2dIVUx1M2hjQmlvTDZFOFM2WmtCcTEwY0REcThBUkJzQjRzQy9Ic2JMR0FzRVNZY0dVMERLMVlieGdZSytRNU1GejhCblNvY0lreThGeUo3eUJZTUMxNGIxa1FMM2pzTCtOa0FEY3U0SitRTHkzWWNOOGdNTzFJYjFod01QSVdDN3dJc0F5dHhGN3F4US9nYjVZOE1DL29jUml3TVRqMERDRXdBQ05heFhLNndaY2ZKaE5jUWdIUU1NVW9jWFVOQzBYRTBWWVRCNWpyQkxrTVFES0VVVUVjeHhzdk1QUjhRQXk3SmJTc2gxN1RBYUdteGZrd0JkOTRBOXF2TEJvTEIwSTRNVjFBQXoyTWNobFVNaTNjY2Q0SU1uU1FjbEl1eDBGb01GWWtBQ0JYQjZjM01udWNjaFcvQVAvczdISUlWSEtwcHdyRGZDNFNoQXRySXdVYzJ3SFpTd1JxTndHM1VMS2pwRExuQnJMYUlBVEpPeFNqd0RNdXN3VUxtd0V4K0llT2x3SDVwc3JXbEdWRHpIRmp2SE1rUndoQ0NETUpQc1A5L0hIYzJDM3RnRVREaURCUXNBUnhTd1c0RHdIREdETmpwRXRRQUcxakpMT1BMSE80VnpMK2hnVHRyRE1nc2tSQUxFaGprTUo0a3dyRDJBcFRkQUs4NXdneWxJSm1lc2ZCaUVBaitzbTIvQWw3aXk2NWp6RStQd1dCZkVsYWhMUkhBRW1BSDNSZmxDNmg3TFI1bkFMWnhvQXQwQUFBbUFBWDVMUkVTUFNJeDNHSVp3bE1iRW1ybUNxdDNBQVhsSUFjdElpbkxJSnpHdTZtVmJVbVBZa1M1SEthRHZVSVd6VVRsM1J4eUcrbW1ESi8waDlKQmFMQ0V4ZDFmNXh5NGlReGxyOTFhY1dDbFFOMWl4aXo0RFF0bVNkMXBnS3lvYUFzMnBOMXZkYkNmWDcxa2dkMUtRZ04zUU4xbEk5Q21PZDE3Nk1DbFhyMTg2c0NtNHQyRFZpMWwwTjA0WTlIYkw4UTFDODJHM0l6NHJRMEpDTklIdXRDdjFiMlJyaXc3clFINW9OSVdWaERjRDcyYTNDMXBVQXdxUnRIODdiQzd5UjJ1NXgyYXdkeEs1OVJrb2RDR2d6MjlFUjBPMFF6YmhkR3dqUTJKVVEyTDBOUGJWTkNPNDczTFhCMmZ1QTFzanRHQXljRWFqZDNNNHQwNldRMmRKTkdNcjlOTUo5M1NXTXphY3dHOXo5RmdVZzJhR0ExK0U5Rm05c0UyQjgzdCtFMktVUXgremRXS2F0QzBnYzMxRGkzYjFnM2ZZTkpVYThELzhQczk5TVNONndzOTN4YmNKY1VSY0FMbk1DdmdzS0VMdUxqY24vTXNvSlRuNExUZzBJUHVIaUFCbVNjZUVZL29nRW5CaGxxOWhnRGVFNmRCUWRqcWtremhsMUllSk9BZ0RaelJsZlFkTnYvY2dWcmhBTlRzOUhVc1hOc1JiMnJlUFdrY2ZzdlFEekRSV2l6T0lRY2hEeEVSamNQUkxVTFJjcjBkcy9VZVBYWXlyRHZRRDlEUnRUWWVUYWtaUkQvaGNjQWRVQTNRQk4zaGxHZ2VQUmtTME1VTndwRVFBNEFlYitNUkpkZmhvNG9lVk00OGRxUGhSZkFSRnFEUUIyYmlkbFh0V3VFdWM3YnVKUEF1ZDh4aWgwemtaV1B1YjdVU29nYlNOK0xPWGZNUlUrclNGcEF0eU43aVdKTGxNQ3dPZ3c4Z3VFVGl0TWdlbkg1QUNaNGg2TkkySFFpcVBTRSszbUhQalFCSERuOGNIcUJ2RFBxMEVPK2l6cFU5SUtFeTBNR2cwQVdtSUxQdlFtQXVBbHZtNmx3SzdQcE01YUsrMEFMVTNSVHgzdE52MGxCZ0FMdHJEc085TUtMRjNzblJidDBmNE01Z0RSdDZEcklsYnU1bjd1Nko3dTZyN3U3Tjd1N3Y3dThCN3Y4ajd2OUY3djluN3YrSjd2K3I3di9ON3Yvdjd2QUIvd0FqL3dJaFlDQUNINUJBa0VBQkVBTEFBQUFBQ1VBbVlCQUFYL1lDU09aR21lYUtxdWJPdStjQ3pQZEczZmVLN3ZmTy8vd0tCd1NDd2FqOGlrY3Nsc09wL1FxSFJLclZxdjJLeDJ5KzE2ditDd2VFd3VtOC9vdEhyTmJydmY4TGg4VHEvYjcvaThmcy92Ky8rQWdZS0RoSVdHaDRpSmlvdU1qWTZQa0pHU2s1U1ZscGVZbVpxYm5KMmVuNkNob3FPa3BhYW5xS21xb1FrRXJnS3dzYkt6dEF5dUJBbXJ1cnU4WFFrSEJRZ0R3eERGeHNmSXljckZ3OE1JQlFhdUNyM1UxZFk5Q1F3Q0R3c0R5OS9nNGQ4REN3OENEZ1RYNnV2c0VkbmIzZUx5OC9USTVBYm83ZnI3b2dRTjhmVUNDaFE0QU1FREJ0UDRLVno0U01HQkJ3QUdTcHhJY0VFMGhoZ3pCbUxRQUFIRmp5QURBakJ3SUtIR2t5amYvendNeWJJbHZRRUZCSmhNU2JQbUZ3WUdJcnJjeVRNY0FnY3piUW9kK2lSQng1NUlrMzRyNENBQTBhZFFpU2h3NEZHcDFhdklTRWJkeXRWR0FHRGVzSW9kQzBCbTE3Tm9VVEI0RUhhc1c3Y1gwOHJkcXFDQnpyZDQzeUk0NEhTdVg1b0UyT1lkbkxkczM3K0lGVElvUUxqeDRKR0hFMHUyUm1DQjQ4dVBEVVNlekRrVkFjYVlReGR1c0xtemFWQUpRSXRlblZkQTZkT3dMeWt3d0xyMjRKK3hjMXNLSU1DMjc5c01kQXQveEtEcTcrTnZHd1Fkemx5UUFzdklvNzhGNEtDNTlVQU5wR3ZIdXlEZDllOTRDTnpkVGw0c2FmRG80d1RJWHI0OVdlL3A0NmRoTU42OWZhdWE1ZXNmcy82K2Y3RUF3TGZmZ0Zva0FOMS9DRnJsR3YrQkRGcmhRSUlRWHJWQUxnMVc2RVFBcWtXb1lVOEFIR0RoaDBtSXQrR0lTUlh3R29nbzd2QWdpU3h5S0dDS01ONFF3QU10MXRpVGh6SG1TTU56TnZhNFV3TTZCdmxDQXZYNWFDUkZDNXdvNUpJSEhPa2tTd0JRdU9TVUlyRDM1REFMUUVQTGxySTBVRUFCeFBUWUlaVlQwdGdqVEFVMGNBQXVPeWhBZ0RiYkFOQ1doZ0tRcVdNQUI1SllrQUZTSHFHQU5oa2lhSUNkTU9JNTRqMzVSRUhBQVRrbGFDS2hIeVpnSElJR0pacUZRdzlNMnQ0Q3kwRXFINUVJamxUU0dBazRrQ2Q1RTNvNklLajNJV0JBY0duODJTaDVVYXI2YVpIYWxkVnBHbDhGaWx5dHRvTEhLcTJ2MmpIVnFiOEZHT3gxdzJxM0Z4OEV6SG9jc01zSzF5ei9jZ004OE9JZVUybGFHN1hWd25adHNtWVJjZ0N5cTRFYkxtZmoybVpZSWdSNEs1cTY2eUptNks4TE1sS2NiL1RXSzllOTVDcUpDRlcySWJDcnYxM1I5dHNBK1VyQ0c2Nk9KWW53WEFyN1pzREJEWm01bXNRVG4xVnhiUVZzYXdsOXJDM1FjVmROdWx1ZEordk5lZG1nSjBPVmNtMFBDSXlKZ2FzQkdmTlFCTGdMS3lrZlg0Ymp6alFwQUhGak5hTkNNbWI5RXIwUXdLRUI4RE1xTTBhTnNkUHRhQnhhMHJzNGNMUmJKbU9OMFlwUkQ4MUx2SmpCTERZL0NiamNXS3JXS09CclhpdXYzVTRBOGc2VzN6cEJEOWFuM2RkbzdWamQ3TXhNR0FJMkE1Nks0WTFKclpDSWpSV2dlTnhmajRYQTMvcncyRmlkay9jeU4zZUpYNE9oLzJNaWQyNEsyVWlIdm82VmVTRnV1aXBHdjF3VDQyK3AvYm9wNk5ZdVZMdGlUWDI3S0wwNVpudE52RjhGZ09xL1Y5SzJZMmJ2WG5sU0R5UXZpdUI0TlQrVTVuajVMcjBtREREZlZRRFBjNGo4OW8yQTM1ak9YVW1hVi9Ua2E4STZYc056aFhkZXBiY1BTYytFeFo5KytEdUZiWDhsdWNNSysveFN2S1J3N24rU1FOMWJPUGFYQk9BRkFGZERvQ0hNMTdyeFBZVjJWeG1nQkJ0QlBRQmg3aThLeEVyOU5rZ0kvTkh2Tkgyeml2OUltSWdBV29Wd25mbGNVcXpId2tGZ0VDdjZtd3dGeFlLQUdoNWloMkN6SUZvS3lKTUQrbEFRd1p0T0JCTVRRcVVjNzRpQ0FPSll0QmViRkJvUWlvSG80RlhRTjV6NUFVaUlXR1NEQ2NIMm5mL2xpY1dJWWN5REZwVXlnQThLSjRuR0EyTWF6ekRHc2FEUk9qSXM0aHp6a0RlbHJMQ00vQU1KQVBaNGh5WmFwWTN5Z2FOVmFFaklOa2dSSzF4TWp3dGQwc05HeWtHUldIR2RmdXFvRkVaYUVnMEtjTnRWUm5nZEsvSkVjcDkwZ3ltVGtrUDB4QTRyUzB6bEZ6Z1p4d1poRWltdGxLVVk4b2lVTys2bmp5NTVvaTdQMEwwRmZvaVdOeHJtR1lDSkZGTEdoNWNzcWFReXgzQkRwVVN5UVFvUWl6T25hWVZIV2tXVElGcGxTM0xKelN2YzBpcFV4S1lvZHlMTWNuTGhsV05CSll6RXlSSlB1cE1LOU56SkFHS3BuMUJtOEo1Yk1LTWRnNVJQa01nUm9FV0E1azdBR2FOc1hzV2VDRzBDTXBXeXpRWVZGRWtSdFFJemVhSkJIVTMvMUNYOHpDZ1Jxb21VZGdwcGtpR0JvVWlaNEUybCtESkhKR1dKUEZmYWhITW1oYUZMMnFoQmFkb0VlR3FUVURadENVUjVHb1NMc3FTalUzS29Vc2hKMUI4SUZDc1E5TlFhb2RUVUpDalVKUzlsMGlpcmFvU1A5Z1NuWkdwcFM3TEtWUjdvMUNWREphZ0t5enFFbUo1eVdjVlV5a0hadWdJdmpxV2lRUXFrUk5KSjF4c0V0U2RNbmRMN2VITE52c3BJcjRLY0s0amlpcFEvR3ZZR1JnMEpXUW1GV0lFOFZnZit0SnhpVVRUVmtPRDFzaW00cWxEOTVkYVBUQmEwSy9EcVcvMFZBS3NnRmJVdlFPbE9Qa3NsMlU1a2tMQ1ZRV2xkRWxoSS9SVWtJYzJ0WGFFYVhDcXA5aU44emUwSmZydVQwOXBxblN4eHJuSWpJRmJ4eFV5MC93TjU3WFJORUZtUXFOUmZ6SjJJTkxlTGdzenlrR2pIcFFoNVZZRGRrQ1EzWEsybDZIcFBrTjZXekRSbVo1VklXbUZyMjViUVZsWGRyWWQwUWJ2YmNZck5rRWVkTHdtR2U1VjlpcTIrQTdudmVzTnI0TFZCRnlRRFVMQUlxc3NUa3pxdHZ3UFJjQVFHcXlEQWRmWWovK1dxZWFHNldhREtkNzRuM3NsM2ljWllQYTRYd2lFWjc5b2NlTVgxdGhjays1M1loVCtpWFFJYnMzUDVGWWlFWVp0azk1cnV4L1JZTW1ncExOUFhCWGdlR1o0dWgzbVM0bnBST1NCWlZpNkpsM3E3QW9kWXVTdHVjSEVSaHVPQXVMR3ZNZWJ0NzlwY2p5NUhsTTRVR1VDTGx4WGZadVlXeWhRcDdPU0dUQkU3QTlUTUlmR3c2UWc5a2ZkV3Rja2dHZit3MHlwTEQwbUw5TXVKM1I2ZzVXSHBpRzVaeHVUYnREZzZqVkJNZndTM211NnhZZE44bFJrL1dkVjl2Yko0N1NmcWNKRGFuWGltU0pEWFZtdHczTHFjdlE2SWxHOFg3R1g4ZXBvMUZ1SC9pcTJNWXlzVDBoL3ByZUtZblF4bjZ4TEJKZDN6eEtpTkRHdW44dE11Y2ZYdnVIME1iMy9TMUJUUmNmdkliUXh6V3hMYWhkNGd1NHZoYmtKaXV5ZEZsaDY4NWJGcmJvSWJTbXUyRzZNbFl1aFV5bG9pOVQ3WndBZFNjRXMrOVNycS90L0NCZEx3UnM3N0c0NmU4NHVKaW1pUURKdDh1WmFIdHNQNDc1QTRtSVVkZjBsVnh3enJEYUpiSG1HbTZjT3RvbWdFc2h3a0VZL294WmZSNzlkZC9PUHVURGxGZ042K2ZZdUQ2Tk5rOENILzN5enhwQWo2bmkrWGlMU1R4K05leW56aW1UNWlzdEZLMDUwclE5ei9pN280S2c3RnJmc3hqRHNQK0J4TDd0a3dHajBjTVVmb3pRRkxjcXpYSStmY25Ma1QxVzY2a0I5ZHBDQ1diQnJGSG82bksxUG9zMDVqbkNVQ2RsbXlIU1JrVnh5bDZSRjVFaDQ4d25Pc09sSkdMa0VDMkQzUGZIOGQ0dVdCNm51K1hTQUp0OXZsdzRGMFN4SStJR0E5NHVUbllmaFVzbnFSZTlSOE11L3A5V1MwSG9IM0JnblRQMm4ycENCeWo0RUg4ejBmLzVIYWt6QUFuNC95UFZjdkVzNERidlNjeG5YMUdybjR2WllUYWxoeGJCaG5Qdy9yYisvMUFhbjg1TEF2RHZHblV1OWs1cjVWbkwvSDNpT2o1bENFUGpxNWlYNEJXNUw5NG1CK3YrTlQvNW4wU2NrWEVPNW5TZmFIRE9vM09iZm5FdlFYUnNISFVaODBkMjAzVEFTb1pwOUVmcVEzVGQwWFhaOEVnT0V3ZFQ1VWZEY2xnSUJ6Z0FIUmM4L0hnUU9SY1N6a2QrVTNUQjhZRXI5bmVmK2tTeWFJRk1mWFNBL0lkYktVZ1Z0a2NGaUJncE96Z01lQWYxajBneTJSYnhLWUZ5ejRQOVFuRGxINFAwSm9GVGU0UWN4WGZiS2tnaWlXU3YwSERpVG9jbmt4aGhmU01DaXloUUVCZ3l5a2UxOEVCZ0l3QUdiNEhWUG9FMTFJTjJEd1NnM1lHVXc0Vm1EWU9tRlFNUWs0SURVb0VVYTROakpJY0dCUVI2azNHWWtvRDA3b1Ewb25RR0VRS0Uyakh3dkloaHRVaC9VUVZWK0FRWU9ZSGlJb0RuaFhkb1BSaUVFd2lSRFFlTmVoaHY4QmdZcDJjNFhmZElnOVlGT2VPQ0FXMkJLMCtHR0RvWWxRVUYxWm1Cdnd4eE56U0Q1aFdBL0IrQVQwQkl0bmNYcjBFSG9hbHhjbjV3WERhQXlYMkJ6SENBN0pTRDZ1U0JITStBTlh0WTJUVVkyelpYR1BzWXM3c0lQZEZoOWVxR1NObEkzMFVJVk0wR1I3R0JYdytBMzErR0NFSVk1TWdHbXhweHZrNkJMOE9JRE9PQkE5MkFYTUY0bWRBWDVXa1k5WWc0VEpVSXhNSUd2eWlCYTVhRitFZEpIVzlRVUIrUTNYeUJtUFNIbDdOSW9Ed1lwVVVHc01GQnZkS0d5NTU0SVRNWkJLb0k3eUlKRmIwWTRETVh3U3hKQmpjWkJkVUpBVitSU2NPSk43VkloK0NJY3VnWk55TVlIQkJJMmRvNUZmaFk0NnNKSkpDSlhzNElaWDhZMy9NVU9TREJlSVBKR1M5dUtTblVpVjlXS1ZicUdRVk5DUkFrR1RLYUdUdUJkR3NzaGlsZGh5RklNWE1EazU2dE1ZUDVrRU1obG9pQkdVODRDVTdVTkVWMUdYU1ZDUVl1Z1g5MmhyYm1tWUVxR0VXS0NVa1NZWFdqa1AvNWlUTmhrU2VZa0VVamtQbWRrT2t6a1BEdGt4YkZtV1l1Q1VtSWt5ZW9ORm8wa1dUSWtFZmJoN1VMR1hIU2FXWC9BVlVMR2FVN1JMZzlHWjFQQ1o4K0NMZDJBb1dGa0syTk1ZYXFrRUlUa1F2TGtMdmdtSmlBQXdFYmdQeFhrNHRJa0RqRm1TUXRHYzR1Q1lmUUIreDZrTGdva1ZQTmtGMmtrUDBja09pU2tQZ0prSE9zazFHZ0U1bHpHY1BvQ1crSkVTZnVsL0V4UkFYcWtRNVltTVpkQ2Y4N0NmLy90UU5ZUVJpbjB3U1FhREVhYXBGSlhaQlVUSkV3bjZOSmRKRWJkSUNQbWtMUHdRQVBjNUVhRkpCS3I0UU9zSm50Y3BFTUJaQjBabGtxc3duWU9UQnVFcG5zdkpDUWNRZlMxeG5uZlFYZTU1RFFCYUQyYlpCWkNKRlkvQ041ZGhvSHR3WlhCVERScGFNdFZaVkt0eE9kZWdvbmpSb0h4d2NOUlJEWlhCR2g4cEJxTWpHZ3hURFV2akdDRnFCOVMzTjdxUW5vMzJCaDg2R0QrNkNnUXFOSVpRaHdqUW9ZZUFNN1dCb21KQW53RHlvbzNRcFk1Qm95WktXRW5LQjNGb0c5K1pCVGtxYkgrcUIydDZHWVRKQmh2YUhhVlFwYmFScG5GQXBvMUpwNVdncHhGenFGZXdvY1lncGl6RHFTQWhvRzhBcXVuMnBaQ1FxSmR4cFhsQXF2L0Y0RGllSUFCZytWV3Q2UVVRV1E5eXFLbHY0RFdzWWFwenNLQkR4NnVJY0FBakdrekFXZ2E0MlRob2FBbXBVUnNsS2dlRmVnd1hjd243Y2h6aldRY0tNS3d0OFM2VjBESzFnYWRtOEt6M2w2eU84Qm5TNGEyK0VLdElnUnVUb0t1MUlaK2ZtS3J1eXFJUCtoYm1TbzB5YWptVytnZnNXaHVEcWdiZ0NnNTdnYXRiUUs3YUVhOVp3QUQzaXE4Q3F3WEMraHY5bWdiL3VwM2l1aEVUT2haOEdnY1JXNmtMV3dVSGdLN0VXQWdaT3cvbEFnaGZnYTFPQjdMa01RREtFVVVFY3h3UG13YStXanR3bWdYUjRyRTRkQWc5aWhua3dCZDk0QTgyKzdHSEVMTjYwUlI1QUF6MjhiSnJrTE9oZ1FBcml3ZEdLeDFJdXdaQyt4WnkyS3ovWUpBQTB0SWVVYnNHSWZzUk83dXhRREFiUDR0TGpFQ3BsTlFBeFVxeldlc2VGNnNIWFl0aEM4Q3piTkF0NWJHMWJmQzJBOEcwVmpzRk9HR3libUd3MzRvZ01BRVVaM0FzN2dHNGdlc2VJN0czUzRBcENic2FpSnU0Q2NLME03c0RSbEd4VUNnSnNta2JNQ0VBYVVzRUhPRzN1emtKQ0tzaDJVSzRXUEFWQmlDNkQwVUo4SGtmbldzTHM3b2pIQUVRRytLcWs5Q2k1UUVBRDJBcFRkQUtqTUs2VUZXNWIzQ1hFV0lRQXRDaGJySU5YL0s0di9LNWdLQzc3bEVRWDZJbXlzc1JZSEs3MEV1eW1Nc2F6bEFBNW5BTElSb0F0MEFBQW1BQVh6SzJ2MUdrdTlHOTBVRU9YeUlBYStJS1gzb0xCK0FsQlNBbkxjSXBtb0NxWjlJTS93QWN3TTN3SkVzQnRtZHdwQVNjREFLOHdBRDhKSkthQ1ZPYndFNnlvNURBcWhLY0lHM0xDSGg3d2NjUnVYV2d0Qng4SlBVYXZjSWJ3dHVCdTZEd3VpWWN3cXA2Q2NlNndqM0N2NlFnTnpBY3dnOHNDaEZjdy9kaHQwR3J3d25zd1gyQXFUNWNJeU1jck9vN3hPbEN2SVNRcFVqTUlqS2NvdTdieEt0eHc2bGd0bEtjSEFhTXFEbDh4ZWtDeElSZ3ZGemNLb3pMQ2RNYXh2ZkJ2dFRBRzJac0gxVE1DLzY3eHRJeHNkU0FObkFzSFNpOERrSmN4d1dqeEpHZ3hucjhHemQ2TnhiOHh4SnhIZ3V4cklRc0dnZ3d4cWRReG9sOEdVeXFFZnY2eUlOaHlCblJINVJNR0dWUk5JT2N5Y2RRQUxPYkNqVHN5WEFSeXFxQXlLVE1vUDlGWEFvTm04cCt4TWpXME1xdUhFeGUvS3BIbk1sVHloV1RQTXVCWnNyVlVCZThuR2h5VEJRUEU4d0k1OHZxb0FCV2JNWk4reThDVU1KTjNNeHpBY3pHUEErUU1SbU9YTTMzNTZuMnNyYmFmQXpTak0xUmpNUUFFTTZUVVJlM0RNUGxuTVc2c0JiYWpBQWpHeHZLRE0wRS9CUHMzQXZvUE12MmZCMHQ2OG9MQU10bzhSWGovQ1FIRVIrQjRja2pzYjJJd1JHRS9CUElqQmFHKzhjTGtLL0NJZEJtWExVZndoSE9LeVpvbXlKME84VFp3Z0QzdkpZNHNkRzNXeXhCRXRFcy9BQnlHeVJmQVJFcnpMc3RQU1V2bmM2MTRTb0FMUitobThDTFd5MDRNZEJhT3RFS1hTR2xrcjAyd3RJUFRTQXZUYytEMlFCOEhCOUdrYjhhRWhPa1F5MGtmeUlBUU8xRVRQSFVEVUlBRHBBcGlvc1BYQTBpaStJbEp1MFNCUkcrSXkwZjVIdSt0cnNhOENzQUNJRkFiZTBsd2tDMUFLQWx0dUJEYnlJQWRuM1dNSmZYTWJIWGExZStEbkMremN2QWlvMGxYL0lsQmdBTHRqRFdIZE1LNXV2WGpaM1lpODNBejJBT3lYc0xTUzFpb0IzYW9qM2FwRjNhcG4zYXFKM2FxcjNhck4zYXJ2M2FzQjNic2ozYnRGM2J0bjNidUozYnVyM2J2TjNidnAzYUlRQUFJZmtFQ1FRQUVRQXNBQUFBQUpRQ1pnRUFCZjlnSkk1a2FaNW9xcTVzNjc1d0xNOTBiZDk0cnU5ODcvL0FvSEJJTEJxUHlLUnl5V3c2bjlDb2RFcXRXcS9ZckhiTDdYcS80TEI0VEM2YnoraTBlczF1dTkvd3VIeE9yOXZ2K0x4K3orLzcvNENCZ29PRWhZYUhpSW1LaTR5TmpvK1FrWktUbEpXV2w1aVptcHVjblo2Zm9LR2lvNlNscHFlb3FhcWhDUVN1QXJDeHNyTzBESzRFQ2F1NnU3eGRDUWNGQ0FQREVNWEd4OGpKeXNYRHd3Z0ZCcTRLdmRUVjFqMEpEQUlQQ3dQTDMrRGgzd01MRHdJT0JOZnE2K3dSMmR2ZDR2THo5TWprQnVqdCt2dWlCQTN4OVFJS0ZEZ0F3UU1HMC9ncFhQaEl3WUVIQUFaS25FaHdRVFNHR0RNR1l0QUFBY1dQSUFNQ01IQWdvY2FUS04vL1BBekpzaVc5QVFVRW1FeEpzK1lYQmdZaXV0ekpNeHdDQnpOdENoMzZKRUhIbmtpVGZpdmdJQURScDFDSktIRGdVYW5WcThoSVJ0M0sxVVlBWU42d2loMExRR2JYczJoUk1IZ1FkcXhidHhmVHl0MnFvSUhPdDNqZklqamdkSzVmbWdUWTVoMmN0MnpmdjRnVk1paEF1UEhna1ljVFM3WkdZSUhqeTQ4TlJKN01PUlVCeHBoREYyNnd1Yk5wVUFsQWkxNmRWMERwMDdBdktUREF1dmJnbjdGeld3b2d3TGJ2Mnd4MEMzL0VvT3J2NDI4YkJCM09YSkFDeThpanZ3WGdvTG4xUUEya2E4ZTdJTjMxNzNnSTNOMU9YaXhwOE9qakJNaGV2ajFaNytuanAyRXczcjE5cTVybDZ4K3ovcjUvc1FEQXQ5K0FXaVFBM1g4SVd1VWEvNEVNV3VGQWdoQmV0VUF1RFZib1JBQ3FSYWhoVHdBY1lPR0hTWWkzNFloSkZmQWFpQ2p1OENDSkxISW9ZSW93M2hEQUF5M1cySk9ITWVaSXczTTI5cmhUQXpvRytVSUM5ZmxvSkVVTG5DamtrZ2NjNlNSTEFGQzQ1SlFpc1Bma01BdEFROHVXc2pSUVFBSEU5TmdobFZQUzJDTk1CVFJ3QUM0N0tFQ0FOdHNBMEphR0FwQ3BZd0FIa2xpUUFWSWVvWUEyR1NKb2dKMHc0am5pUGZsRVFjQUJPU1ZvSXFFZkptQWNnZ1lsbW9WREQwemEzZ0xMUVNvZmtRaU9WTklZQ1RpUUoza1Rlam9ncVBjaFlFQndhZnpaS0hsUnF2cHBrZHFWMVdrYVh3V0tYSzIyZ3NjcXJhL2FNZFdwdndVWTdIWERhcmNYSHdUTWVoeXd5d3JYTFA5eUF6enc0aDVUYVZvYnRkWENkbTJ5WmhGeUFMS3JnUnN1WitQYVpsZ2lCSGdybXJyckltYm9yd3N5VXB4djlOWXIxNzNrS29rSVZiWWhzS3UvWGRIMjJ3RDVTc0licm80bGlmQmNDdnRtd01FTm1ibWF4Qk9mVlhGdEJXeHJDWDJzTGRCeFYwMjZXNTBuNjgxNTJhQW5RNVZ5YlE4SWpJbUJxd0VaODFBRXVBc3JLUjlmaHVQT05Da0FjV00xbzBJeVp2MFN2UkRBb1FId015b3pSbzJ4MCsxb0hGclN1emh3dEZzbVk0M1JpbEVQelV1OG1NRXNOajhKdU54WXF0WW80R3RlSzYvZFRnRHlEcGJmT2tFUDFxZmQxMmp0V04zc3pFd1lBallEbm9yaGpVbXRrSWlORmFCNDNGK1BoY0RmK3ZEWVdKMlQ5ekkzZDRsZmc2SC9ZeUozYmdyWlNJZStqcFY1SVc2NktrYS9YQlBqYjZuOXVpbm8xaTVVdTJKTmZic292VGxtZTAyOFh3V0E2cjlYMHJaalp1OWVlVklQSkMrSzRIZzFQNVRtZVBrdXZTWU1NTjlWQU05emlQejJqWURmbU01ZFNacFg5T1Jyd2pwZXczT0ZkMTZsdHc5Sno0VEZuMzc0TzRWdGZ5VzV3d3I3L0ZLOHBIRHVmNUpBM1ZzNDlwY0U0QVVBVjBPZ0ljelh1dkU5aFhaWEdhQUVHMEU5QUdIdUx3ckVTdjAyU0FqODBlODBmYk9LLzBpWWlBQmFoWENkK1Z4U3JNZkNRV0FRSy9xYkRBWEZnb0FhSG1LSFlMTWdXZ3JJa3dQNlVCREJtMDRFRXhOQ3BSenZpSUlBNGxpMEY1c1VHaENLZ2VqZ1ZkQTNuUGtCU0loWVpJTUp3ZmFkLytXSnhZaGh6SU1XbFRLQUR3b25pY1lEWXhyUE1NYXhvTkU2TWl6aUhQT1FONldzc0l6OEF3a0E5bmlISmxxbGpmS0JvMVZvU01nMlNCRXJYRXlQQzEzU3cwYktRWkZZY1oxKzZxZ1VSbG9TRFFwdzIxVkdlQjByOGtSeW4zU0RLWk9TUS9URURpdExUT1VYT0JuSEJtRVNLYTJVcFJqeWlKUTc3cWVQTG5taUxzL1F2UVYraUpZM0d1WVpnSWtVVXNhSGx5eXBwRExIY0VPbFJMSkJDaENMTTZkcGhVZGFSWk1nV21WTGNzbk5LOXpTS2xURXBpaDNJc3h5Y3VHVlkwRWxqTVRKRWsrNmt3cjAzTWtBWXFtZlVHYndubHN3b3gyRGxFK1F5QkdnUllEbVRzQVpvMnhleFo0SWJRSXlsYkxOQmhVVVNSRzFBak41b2tFZFRmL1VKZnpNS0JHcWlaUjJDbW1TSVlHaFNKbmdUYVg0TWtja1pZazhWOXFFY3lhRm9VdmFxRUZwMmdSNGFwTlFObTBKUkhrYWhJdXlwS05UY3FoU3lFblVId2dVS3hEMDFCcWgxTlFrS05RbEwyWFNLS3RxaEkvMkJLZGthbWxMc3NwVkh1alVKVU1scUFyTE9vU1lubkpaeFZUS1FkbTZBaStPcGFKQkNxUkUwa25YR3dTMUoweWQwdnQ0Y3MyK3lraXZncHdyaU9LS2xEOGE5Z1pHRFFsWkNZVllnVHhXQi82MG5HSlJOTldRNFBXeUtiaXFVUDNsMW85TUZyUXI4T3BiL1JVQXF5QVZ0UzlBNlU0K1N5WFpUbVNRc0pWQmFWMFNXRWo5RlNRaHphMWRvUnBjS3FuMkkzek43UWwrdTVQVDJtcWRMSEd1Y2lNZ1Z2SEZUTFQvQTNudGRFMFFXWkNvMUYvTW5ZZzB0NHVDelBLUWFNZWxDSGxWZ04yUUpEZGNyYVhvZWsrUTNwYk1OR1pubFVoYVlXdmJsdEJXVmQydGgzUkJ1OXR4aXMyUVI1MHZDWVo3bFgyS3JiNER1ZTk2dzJ2Z3RVRVhKQU5Rc0FpcXl4T1RPcTIvQTlGd0JBYXJJTUIxOWlQLzVhcDVvYnBab01wM3ZpZmV5WGVKeGxnOXJoZkNJUm52Mmh4NHhmVzJGeVQ3bmRpRlA2SmRBaHV6Yy9rVmlJUmhtMlQzbXU3SDlGZ3lhQ2tzMDljRmVCNFpuaTZIZVpMaWVsRTVJRmxXTG9tWGVyc0NoMWk1SzI1d2NSR0c0NEM0c2E4eDV1M3YybHlQTGtlVXpoUVpRSXVYRmQ5bTVoYktGQ25zNUlaTUVUc0QxTXdoOGJEcENEMlI5MWExeVNBWi83RFRLa3NQU1l2MHk0bmRIcURsWWVtSWJsbkc1TnUwT0RxTlVFeC9CTGVhN3JGaDAzeVZHVDlaMVgyOXNuanRKK3B3a05xZGVLWklrTmRXYTNEY3VweTlEb2lVYnhmc1pmeDZtalVXNGYrS3JZeGpLeFBTSCttdDRwaWRER2ZyRXNFbDNmUEVxSTBNYTZmeTB5NXg5ZSs0ZlF4dmY5TFVGTkZ4KzhodERITmJFdHFGM2lDN2krRnVRbUs3SjBXV0hyemxzV3R1Z2h0S2E3WWJveVZpNkZUS1dpTDFQdG5BQjFKd1N6NzFLdXIrMzhJRjB2Qkd6dnNianA3emk0bUthSkFNbTN5NWxvZTJ3L2p2a0RpWWhSMS9TVlhIRE9zTm9sc2VZYWJwdzYyaWFBU3lIQ1FSaitqRmw5SHYxMTM4NCs1TU9VV0EzcjU5aTRQbzAyVHdJZi9mTFBHa0NQcWVMNWVJdEpQSDQxN0tmT0taUG1LeTBVclRuU3REM1ArTHVqZ3FEc1d0K3pHTU93LzRIRXZ1MlRBYVBSd3hSK2pOQVV0eXJOY2o1OXljdVJQVmJycVFIMTJrSUpac0dzVWVqcWNyVStpelRtT2NKUUoyV2JJZEpHUlhIS1hwRVhrU0hqekNjNnc2VWtZdVFRTFlQYzk4ZngzaTVZSHFlNzVkSUFtMzIrWERnWFJMRWo0Z1lEM2k1T2RoK0ZTeWVwRjcxSHd5NytuMVpMUWVnZmNHQ2RNL2FmYWtJSEtQZ1FmelBSLy9rZHFUTUFDZmovSTlWeThTemdOdTlKekdkZlVhdWZpOWxoTnFXSEZzR0djL0QrdHY3L1VCcWZ6a3NDOE84YWRTNzJUbXZsV2N2OGZlSTZQbVVJUStPcm1KZmdGYmt2M2lZSDYvNDFQL21mUkp5UmNRN21kSjlvY002amM1dCtjUzlCZEd3Y2RSbnpSM2JUZE1CS2htbjBSK3BEZE4zUmRkbndTQTRUQjFQbFI4TnlXQWdIT0FBZEZ6ejhlQkE1RnhMT1IzNVRkTUh4Z1N2MmQ1LzZSTEpvZ1V4OWRJRDhoMXNwU0JXMlJ3V0lHQ2s3T0F4NEIvV1BTRExaRnZFcGdYTFBnLzFDY09VZmcvUW1nVk43aEJ6RmQ5c3FTQ0tKWksvUWNPSk9oeWVUR0dGOUl3S0xLRkFRR0RMS1I3WHdRR0FqQUFadmdkVStnVFhVZzNZUEJLRGRnWlREaFdZTmc2WVZBeENUZ2dOU2dSUnJnMk1raHdZRkJIcVRjWmlTZ1BUdWhEU2lkQVlSQW9UYU1mQzhpR0cxU0g5UkJWWDRCQmc1Z2VJaWdPZUZkMmc5R0lRVENKRU5CNDE2R0cvd0dCaW5aemhkOTBpRDFnVTU0NElCYllFclQ0WVlPaGlWQlFYVm1ZRy9ESEUzTklQbUZZRDhINEJQUUVpMmR4ZXZRUWVocVhGeWZuQmNOb0RKZllITWNJRHNsSVBxNUlFY3o0QTFlMWpaTlJqYk5sY1kreGl6dXdnOTBXSDE2b1pJMlVqZlJRaFV6UVpIc1lGZkQ0RGZYNFlJUWhqa3lBYWJHbkcrVG9Fdnc0Z000NEVEM1lCY3dYaVowQmZsYVJqMWlEaE1sUWpFd2dhL0tJRnJsb1g0UjBrZGIxQlFINURkZklHWTlJZVhzMGlnUEJpbFJRYXd3VUc5MG9iTG5uZ2hNeGtFcWdqdklna1Z2UmpnTXhmQkxFa0dOeGtGMVFrQlg1Rkp3NGszdFVpSDRJaHk2QmszSXhnY0VFaloyamtWK0ZqanF3a2trSWxlemdobGZ4amY4eFE1SU1GNGc4a1pMMjRwS2RTSlgxWXBWdW9aQlUwSkVDUVpNcG9aTzRGMGF5eUdLVjJISVVneGN3T1RucTB4Zy9tUVF5R1dpSUVaVHpnSlR0UTBSWFVaZEpVSkJpNkJmM2FHdHVhWmdTb1lSWW9KU1JKaGRhT1EvL21KTTJHUko1aVFSU09RK1oyUTZUT1E4TzJURnNXWlppNEpTWWlUSjZnMFdqU1JaTWlRUjl1SHRRc1pjZEpwWjhkcGxPRnBkUUtET0U0WXUzZ3oyTm9aWktFSklEMFptODhKbnpZSmJTNDV1SFE1czR3SmdsS1JUR1NYck1xU3FDaVJVODJRWFJXUThSMkE2SktRK0FtVHlRY3hsWTZWVFJ0eFBBcVFwKzZYOCtsSjBzU1Fic1NROWV5UTlWUXhpaFNENm1xUlNWMlFWRXlSTUd3eENyYVR5dFNUVC9BWkNlRXhHYVJLQ0tEL1NkdW5DWHUxbER5ams0YVZDZDFrbWNuWEFBNWNrUzJ5bDZySUdjWEFDWldQRW9mSE1aOWZrN0Exb3kwd2tFQkNvUmwzTU5ENG9YK1FtZXRobE1Db3FRRUNrT0RGTU5TK01ZTTZvNDNkbG9iNENnZ3dHaXF6Q2ZRck5CT0ZNYkpra3FGOG9oRk9vSU9lb1lHY3FqUzRwTGMvQ2VFWGFpZWtDa2wwR1lIVk1admlHa2NkQ2pqWm1rSXdPV0lSR2Z5Vk9pdm9HbWI1Q2lIN0dpb0tDbGwvR1JuU01BWnNxZkFkb0ZOZm9TZThNSlhzTWFPK28wQitDYzdCU29adkNmallPR2xwQWF0Y0diTkVhbyttU29aNkFBa05vUzcxSUpMVk1iVFJvc255RWRtMHFOZC9wVlpFb0lmMW9iNDBrbENiQ2ZiL0dwL3h3NXBSQTNxbjlRcXJWeG50WFNxZHB4cWx2QUFLNzZxbGlLblpVYUVyUWFMQXdRbytaaFE5dEJIYjJLQlFjUXF1WjVPMS94cTBnUnBYUmdwUzB4QU1vUlJRUnpITUVLS2RIQ3JGZXhyV3Jnb1poQkRuelJCLzdncmMzYU9jQmdIK0M2QnVJYUdnaHdyWGl3cnRMUnJrdVNBTkxTSHZhNkJ0VEtFK1NhckVNd0craEtkM2JUcmY4aHJYdlFyejN4cjIzUUxlV3hyekNDRTlBNlVJNmdzRHpJRkhtNkJNZmlIcmhLSUppeXE1alJzV2xnc2ZqWkFBYUtEZjl3SDZ4cUlSd3hzYmtwQ2JxcUlka0NGRm53RlFiZ3NtM3BMMy95RHlDYkxvNHFDQkphSGdEd0FKYlNCSzNBS0RoclBDY0xIb3ZpSlQzckxwSUt0QU03cnMrUUp2OXJJaFVjQVNZYlFxZGs4clMvQVRlWGdLZ3lteVV4c1NhdU1LTzNjQUJlVWdCeTBpS2M0aTllYXh0Z0dyWnV1aDNOY0xkNGk3ZFBNcmZWRXJjYitnbDEreVFiZ3JCTDRyZWlJYko0OEs2Q3U3Z3J5eUNHTzZjLyt3amh1YmlVNjVGUkt5U1ArellaaXdoeVU3bWU2M3NBMnh5Wm01cW9jSitmT3lLSXF4K2p1MzJxc0t5bnU3aks0alNyT3hadnF3c3Qrcm90d3JjS0Z5SG53UXY5Z2JzMlVoWUNseUFJRUxtZXNDL0FTeUpnS3phenF4UzY2N3VxbXJ5Mm9haFkwN3djWXJ5ajhLVFNheDhJc0xRd1lyMDd3VFg3b0tiYjZ4NjlPMmp1VWJ3Wmdiemw2eXlYMjdmdGNiNFk4YnZ0T3kycCs3M2tVUUNiZXdxZFc3KzJjVEgvMGdPKzR0VzRwakNvL2lzYUM0QzlDQ1BBQWlHODlqaTFCeXdPMUdFL0RLeWQrMHNOZFJIQkQwUzl5VlBCbkhiQkxDcW1HbHdNOHRwMHRWSENjNUhCSTh3aGZZcEFIcXdNa01FWkF3ckI1WXZDRXZUQ1NXakRrMUVYTlB5NkFDQy9KSVRERUlBQTVaSWJDaUFBU2J1NFB4RzZYZHNZUzN3ZDJickM3YWZBblZQQkJ4RWZnU0hGeXpBUzcvczY0UHNUSUh3V0c2dkZFTEFBc0dyQ0RWWXNMTnNBUWl3ZFA5ekZBWHhJQjhIRVF4RUFPTkhHMzZMR3V1UzNRMXV1UXZJVkVPSEREK0RIeXZTMHJrTEYrOUd5c0t2SDVlU3E1T0FBY0Z3aHBhSzFOakxJWWR3K0Y1b20zcnNmUnNHMkdoSVRrUXhGV0FjQVRMSEp4K1FBbWVJZWhDTlJ0RHcxWkFWaERnUkF4d3dTQUFRZ0FBWUFFS3hCRGpHQkVIMDFKd05BeWdZZ0FMYmdRMjhpQUY0aURHL3h5MThpektZTVJiQmdDODI4TTYxUXk4YjhKZGFjdDlpTXpjOWdEZ0p3Q3dSd3lTSVd6dUk4enVSY3p1Wjh6dWljenVxOHp1emN6dTc4enZBY3ovSTh6L1Jjei9aOHovaWN6L3E4ei96Y3ovNzh6K2tjQWdBaCtRUUpCQUFSQUN3QUFBQUFsQUptQVFBRi8yQWtqbVJwbm1pcXJtenJ2bkFzejNSdDMzaXU3M3p2LzhDZ2NFZ3NHby9JcEhMSmJEcWYwS2gwU3ExYXI5aXNkc3Z0ZXIvZ3NIaE1McHZQNkxSNnpXNjczL0M0ZkU2djIrLzR2SDdQNy92L2dJR0NnNFNGaG9lSWlZcUxqSTJPajVDUmtwT1VsWmFYbUptYW01eWRucCtnb2FLanBLV21wNmlwcXFFSkJLNENzTEd5czdRTXJnUUpxN3E3dkYwSkJ3VUlBOE1ReGNiSHlNbkt4Y1BEQ0FVR3JncTkxTlhXUFFrTUFnOExBOHZmNE9IZkF3c1BBZzRFMStycjdCSFoyOTNpOHZQMHlPUUc2TzM2KzZJRURmSDFBZ29VT0FEQkF3YlQrQ2xjK0VqQmdRY0FCa3FjU0hCQk5JWVlNd1ppMEFBQnhZOGdBd0l3Y0NDaHhwTW8zLzg4RE1teUpiMEJCUVNZVEVtejVoY0dCaUs2M01rekhBSUhNMjBLSGZva1FjZWVTSk4rSytBZ0FOR25VSWtvY09CUnFkV3J5RWhHM2NyVlJnQmczckNLSFF0QVp0ZXphRkV3ZUJCMnJGdTNGOVBLM2FxZ2djNjNlTjhpT09CMHJsK2FCTmptSFp5M2JOKy9pQlV5S0VDNDhlQ1JoeE5MdGtaZ2dlUExqdzFFbnN3NUZRSEdtRU1YYnJDNXMybFFDVUNMWHAxWFFPblRzQzhwTU1DNjl1Q2ZzWE5iQ2lEQXR1L2JESFFMZjhTZzZ1L2pieHNFSGM1Y2tBTEx5S08vQmVDZ3VmVkFEYVJyeDdzZzNmWHZlQWpjM1U1ZUxHbnc2T01FeUY2K1BWbnY2ZU9uWVREZXZYMnJtdVhySDdQK3ZuK3hBTUMzMzRCYUpBRGRmd2hhNVJyL2dReGE0VUNDRUY2MVFDNE5WdWhFQUtwRnFHRlBBQnhnNFlkSmlMZmhpRWtWOEJxSUtPN3dJSWtzY2loZ2lqRGVFTUFETGRiWWs0Y3g1a2pEY3piMnVGTURPZ2I1UWdMMStXZ2tSUXVjS09TU0J4enBKRXNBVUxqa2xDS3c5K1F3QzBCRHk1YXlORkJBQWNUMDJDR1ZVOUxZSTB3Rk5IQUFManNvUUlBMjJ3RFFsb1lDa0tsakFBZVNXSkFCVWg2aGdEWVpJbWlBblREaU9lSTkrVVJCd0FFNUpXZ2lvUjhtWUJ5Q0JpV2FoVU1QVE5yZUFzdEJLaCtSQ0k1VTBoZ0pPSkFuZVJONk9pQ285eUZnUUhCcC9Oa29lVkdxK21tUjJwWFZhUnBmQllwY3JiYUN4eXF0cjlveDFhbS9CUmpzZGNOcXR4Y2ZCTXg2SExETEN0Y3MvM0lEUFBEaUhsTnBXaHUxMWNKMmJiSm1FWElBc3F1Qkd5NW40OXBtV0NJRWVDdWF1dXNpWnVpdkN6SlNuRy8wMWl2WHZlUXFpUWhWdGlHd3E3OWQwZmJiQVBsS3dodXVqaVdKOEZ3SysyYkF3UTJadVpyRUU1OVZjVzBGYkdzSmZhd3QwSEZYVGJwYm5TZnJ6WG5ab0NkRGxYSnREd2lNaVlHckFSbnpVQVM0Q3lzcEgxK0c0ODQwS1FCeFl6V2pRakptL1JLOUVNQ2hBZkF6S2pOR2piSFQ3V2djV3RLN09IQzBXeVpqamRHS1VRL05TN3lZd1N3MlB3bTQzRmlxMWlqZ2ExNHJyOTFPQVBJT2x0ODZRUS9XcDkzWGFPMVkzZXpNVEJnQ05nT2VpdUdOU2EyUWlJMFZvSGpjWDQrRndOLzY4TmhZblpQM01qZDNpVitEb2Y5akluZHVDdGxJaDc2T2xYa2hicm9xUnI5Y0UrTnZxZjI2S2VqV0xsUzdZazE5dXlpOU9XWjdUYnhmQllEcXYxZlN0bU5tNzE1NVVnOGtMNHJnZURVL2xPWjQrUzY5Smd3dzMxVUF6M09JL1BhTmdOK1l6bDFKbWxmMDVHdkNPbDdEYzRWM1hxVzNEMG5QaE1XZmZ2ZzdoVzEvSmJuREN2djhVcnlrY081L2trRGRXemoybHdUZ0JRQlhRNkFoek5lNjhUMkZkbGNab0FRYlFUMEFZZTR2Q3NSSy9UWklDUHpSN3pSOXM0ci9TSmlJQUZxRmNKMzVYRktzeDhKQllCQXIrcHNNQmNXQ2dCb2VZb2Rnc3lCYUNzaVRBL3BRRU1HYlRnUVRFMEtsSE8rSWdnRGlXTFFYbXhRYUVJcUI2T0JWMERlYytRRklpRmhrZ3duQjlwMy81WW5GaUdITWd4YVZNb0FQQ2llSnhnTmpHczh3eHJHZzBUb3lMT0ljODVBM3BheXdqUHdEQ1FEMmVJY21XcVdOOG9HalZXaEl5RFpJRVN0Y1RJOExYZExEUnNwQmtWaHhuWDdxcUJSR1doSU5DbkRiVlVaNEhTdnlSSEtmZElNcGs1SkQ5TVFPSzB0TTVSYzRHY2NHWVJJcHJaU2xHUEtJbER2dXA0OHVlYUl1ejlDOUJYNklsamNhNWhtQWlSUlN4b2VYTEtta01zZHdRNlZFc2tFS0VJc3pwMm1GUjFwRmt5QmFaVXR5eWMwcjNOSXFWTVNtS0hjaXpISnk0WlZqUVNXTXhNa1NUN3FUQ3ZUY3lRQmlxWjlRWnZDZVd6Q2pIWU9VVDVESUVhQkZnT1pPd0JtamJGN0ZuZ2h0QWpLVnNzMEdGUlJKRWJVQ00zbWlRUjFOLzlRbC9Nd29FYXFKbEhZS2FaSWhnYUZJbWVCTnBmZ3lSeVJsaVR4WDJvUnpKb1doUzlxb1FXbmFCSGhxazFBMmJRbEVlUnFFaTdLa28xTnlxRkxJU2RRZkNCUXJFUFRVR3FIVTFDUW8xQ1V2WmRJb3EycUVqL1lFcDJScWFVdXl5bFVlNk5RbFF5V29Dc3M2aEppZWNsbkZWTXBCMmJvQ0w0Nmxva0VLcEVUU1NkY2JCTFVuVEozUyszaHl6YjdLU0srQ25DdUk0b3FVUHhyMkJrWU5DVmtKaFZpQlBGWUgvclNjWWxFMDFaRGc5YklwdUtwUS9lWFdqMHdXdEN2dzZsdjlGUUNySUJXMUwwRHBUajVMSmRsT1pKQ3dsVUZwWFJKWVNQMFZKQ0hOclYyaEdsd3FxZllqZk0zdENYNjdrOVBhYXAwc2NhNXlJeUJXOGNWTXRQOERlZTEwVFJCWmtLalVYOHlkaURTM2k0TE04cEJveDZVSWVWV0EzWkFrTjF5dHBlaDZUNURlbHN3MFptZVZTRnBoYTl1VzBGWlYzYTJIZEVHNzIzR0t6WkJIblM4SmhudVZmWXF0dmdPNTczckRhK0MxUVJja0ExQ3dDS3JMRTVNNnJiOEQwWEFFQnFzZ3dIWDJJLy9scW5taHVsbWd5bmUrSjk3SmQ0bkdXRDJ1RjhJaEdlL2FISGpGOWJZWEpQdWQySVUvb2wwQ0c3TnorUldJaEdHYlpQZWE3c2YwV0RKb0tTelQxd1Y0SGhtZUxvZDVrdUo2VVRrZ1dWWXVpWmQ2dXdLSFdMa3JibkJ4RVliamdMaXhyekhtN2UvYVhJOHVSNVRPRkJsQWk1Y1YzMmJtRnNvVUtlemtoa3dST3dQVXpDSHhzT2tJUFpIM1ZyWEpJQm4vc05NcVN3OUppL1RMaWQwZW9PVmg2WWh1V2NiazI3UTRPbzFRVEg4RXQ1cnVzV0hUZkpVWlAxblZmYjJ5ZU8wbjZuQ1EycDE0cGtpUTExWnJjTnk2bkwwT2lKUnZGK3hsL0hxYU5SYmgvNHF0akdNckU5SWY2YTNpbUowTVorc1N3U1hkODhTb2pReHJwL0xUTG5IMTc3aDlERzkvMHRRVTBYSDd5RzBNYzFzUzJvWGVJTHVMNFc1Q29uc2lSWllldk9XeGEyNkNHMHBydGh1akpXTG9WSTRaMWdnYytFQUtic21uWGtYZC8xTzRRQmplU0JBN21ZUzVsZ2ZGOTRob2tBeWJmQmtYaDdiRHlPQkRCaHh3SFg5SlZRL2VTeC9lV3h4aHBpbXJuVGp5bmJIOEl4Q1BhSnhINjhONVErRGo3a3kyVllEZXZuMkxnK2pjTkRwQi85NGM4YVFJK3A0dkg0aTBrOGZqbHE5MDVrbFI5QWFGem5PUitud1o0djVmMU1PeDhTT0dYQ0NPWmVIWFR6NUhwVTg4akc0ZngwckhIcENwU3k4QUVnOUl6cm1KOVpLeXZYTm5Cd2ZTWmZuMVpxZVI3dDk0dWpLNWZ0TTU3bndnWVpkbHlhMVNkc0JSbWg2VjN5RGlvenpIcWlPbDVnaDB1TW5ubUhKNm9QcWVoYS8ySG1VdGo4RTNzdlRpQmYzYUxqOFB4WCtiOXZyZG8rZVRlVS9XUjVpUTJBNEowejhaK0hvZ2NvOFdCL005SjI5TlF1SmRLYTZmNCtibm9mVWp3bjRlOWJhZlQ3SFNiL3M5ZmlDT0ptVHFrWkYyTE9KZUhyS1hYdkI3a25uRlhWOGU1Zi9rdjFsaTkvOTlYeUMySitUOVQ1Myt0VDFmS2VHWFJveUhjUDlwOUg3b04wM00xM2lXbEh3QkVYK05kSFBzWjBsOXh4TDVsMGJGVncvNWRrUVFDQkx0OXpzSmlCUU9aa25uSnc2bkowdlRoMzJmWklEaVVIOHNkSUgwQUZacHhJQUIwWDBzRkhjQkVZQVloeFg5MXprYnVCUFJ0MEcrSnc4WkdFYWlkMGpENTBNVFdFL0RKSU9CbGtwQmVJQW0rRUE3dURaSkdCSkRDRVV1U0E4MCtEOVBLQTViaUVBMldBOC9LRUh6SnhIVmwwWTlPRnVwZElMTHdJSUlsSVh6NElZczFUQW9Vb1o3OVcxaGFIcFQyQU1DTUFCeWFCMWQ2Qk95RklqMUVIbFU4RW9keUJsVktGbXBOSUFLK0FVVjQ0RDdzWDhEc1lkWVk0ZWVCUVoxbEgyY0FZZkxjSVUxTkg3SkFJcFRFQ2hOb3graWlJTWJ0SDRjOG5mL1NZQkJrb2dlS2lnUGV3ZEZSWGdWbkNnRXpHZUkxb0dKQTVHTGlzT0U2V2FKTzJCVFVVVWdhYmhUalVTSTlhQ0tVRkJkWXhnYnQ4Z1RmeWc5amxnaVlVQlB3SWdXZVJnT3JuZzcyeWNXSWVnRjAyZ01wOWdjYkxnVWxqU0xBckdOUUhCVjBjZ3VlUmR2bHBTTzRYQ0dWM0NONVJZZndpaHNzblFBODZocllkQmtpUWdWOXJnTUJUazVSR1JmWVlCcE1LZ2I1ZWlEeW9RelJnZ0dtRWlLa2dFMVc2Vk1vME5tWUNCclg1Z1d5ZWh4N3NTTXg0Q1BWaENSNEhDT25mZ1dDWms4ckFoNVlWQnJEQlFidmlnUjhZaEZCekNDeUpDVFRLQ1BLeWdjL1NnUVI1aEtDL2tTUlVrRk5oaVNVR0dTNFZDTldJUTlIMUdCVkRCOVNZa1cvekhaRXNlWVVWWHpFYkZZQlRlcERDaVpGcnVIRmU0SWhDaVdqVHhSay9iQ2svVXdsdVVFZTFRNUJTb3BkVG8wbEFMQmxKYTBOUFh3a0ZuZ2MyZkpEazRaRGo0cFMrcFRaMkVBbEJNeGwwTXhtT0Z3bGN2WFh4Z3BCZDJvREZESkVBZnBhNFlWQVBtMGxWNlFsYVlsRit6WWw4UUlSUkRvak0vb2x2eUdGcU9KbUViMkRaTVpCU01KWkNpak43a0ZPY2dBbDRjWWtCK2hsK3VnbU94VW1wMkhMS2dKQmFLWURMNXBEYTNaak5zRk5aY1pJbzJSbkwyd25QUVFtMVdsTUg2WkJaVVpFTHk0RDlSSmZjSjViZ1B3a2ovd25RSEJtT3VRbWVJQW1TSkdCWFY1RmMrWkNvN0phZTFaQnViWmdPRzVHNVRJRWw5Wm4xbXdud3YxamYra29KRks1SjlsOElGdXdaTFVjSmlFVVp3R1NwZXErUkVESUoyZUFKQ09nWjRQNmlDcjhTaDhjeG45bWFGYU1KOENjVG5YSUpXM2taOGcyZ01kR1JvTVV3MTgyUmpzbWFKWGdLQjR3YUdyMEpWQ0k2TnA4SjVrUWFIRUVhRk5xS05wY0o4VFlhTURDcUFTS2FScW9KNW0ySjBqQTZSSWdxSktDZ1FpS2w0eCtnZzR5alJYT3FWLzZSdCtLS1Z5NERXc3NhVmNpZ1VFT2k5MGFBbXBVUnNPV3FhWHNwMWFtYWFSMERLMTRhTnVHZ1ZIMlJpNE1RbGlXaHVCZWFkTHdLT0g0NlNBMEtlMUVaK0FXZ1VNd0p0NjBSU0xjQUJ3R2hLSW1xaFZRS1RCNUtpR3NKUEhNYW1VV3Fua01RREtFVVVFczZtZE9nZWdpUm5rd0JkOTRBLy9VRXFOcFVvSHB4b2FDQkNxZUFBTTJzR3ByM29GbGdxQ0M2Q3FjakFicllwTHVXb0h1NW9VcVFxbVFOQXQ1WUdydzRvRnhjcEdUQ0dnUFdVcTd2R256VG9Gei9wd0RVQ2UyUEFQOTJHbjE3b0ZpNm9oMlFJVVdmQVZCaENwWWdHdTRScFF3ZW9ZQVBBQWx0SUVyY0FvNnZvZTdib0hlV29mQmZFbGFrS2VmK0lsak1vdlpKcXZaM0NtTFVJT1h5SUFhK0lLN0hrTEIrQWxCU0FuTGNJcEJ0c0huUGtreTlBTUhOdXhIZnNrUm5xeGUxQ2xHaHNoR0NxeWJ4Q3JKYXV4N0lxeVlvQ2JLeHV6WWxtd0x0c0djaU96T0hzTUlWdXpnRENiT2JzaDFzcXpZYUNwUC9za3lpSzBoMkNpUlZzak80dTBnOUFmUzFzalplRzArbkt2LzFFN0dIQkR0WXVRcFZlTElIS3F0WW53b2wzckhnakFyV0RMQmhrN3R1NXhIbWNyQ2Z1aXRzNUNzMjNyQjFBTHQrUXl0NWh3czNaN3FOS0t0MzhBcVhzYkdndlFwbjZMQ0FMd3JvRkxnb1JhdUk1UUY0azdIVi9MdUpxZ0FFejZ1QkJBcTVJckNvNXJ1UjIyTjVsYkNweUp1R3FMdVo5N0NuVWh1a1VMQUd4YnVxdEF1Vllic3orQnJLdzdDS1BLdWVFd3VMTzdEb0ZodTJMSko3bWJPZFRLdXd1d3VMKzdDaHd4c0VlaXVuSmJ2RlNERThqTElpTkJ1TXpiQzE4QkVUOGJyNzQ2dlVQQkVhLzdMY1dpdmVuakFHRFNJdzh3S3VCTFFGNkN1bTRSRTh0N3ZvRGhBSm5pSGlNeHIrNXJrd1FnQUFZQUVLeWhzQUtBRVBVYkgxRnZJZ0JlSWd4dk1RQUFzTEMyOEw4bzBncjNLOEJmOHNBZUc4RVIvQXptSUFDM1FBQjlxOEFhdk1FYzNNRWUvTUVnSE1JaVBNSWtYTUltZk1Jb25NSXF2TUlzM01JdS9NSXdITU15UE1QY0ZBSUFJZmtFQ1FRQUVRQXNBQUFBQUpRQ1pnRUFCZjlnSkk1a2FaNW9xcTVzNjc1d0xNOTBiZDk0cnU5ODcvL0FvSEJJTEJxUHlLUnl5V3c2bjlDb2RFcXRXcS9ZckhiTDdYcS80TEI0VEM2YnoraTBlczF1dTkvd3VIeE9yOXZ2K0x4K3orLzcvNENCZ29PRWhZYUhpSW1LaTR5TmpvK1FrWktUbEpXV2w1aVptcHVjblo2Zm9LR2lvNlNscHFlb3FhcWhDUVN1QXJDeHNyTzBESzRFQ2F1NnU3eGRDUWNGQ0FQREVNWEd4OGpKeXNYRHd3Z0ZCcTRLdmRUVjFqMEpEQUlQQ3dQTDMrRGgzd01MRHdJT0JOZnE2K3dSMmR2ZDR2THo5TWprQnVqdCt2dWlCQTN4OVFJS0ZEZ0F3UU1HMC9ncFhQaEl3WUVIQUFaS25FaHdRVFNHR0RNR1l0QUFBY1dQSUFNQ01IQWdvY2FUS04vL1BBekpzaVc5QVFVRW1FeEpzK1lYQmdZaXV0ekpNeHdDQnpOdENoMzZKRUhIbmtpVGZpdmdJQURScDFDSktIRGdVYW5WcThoSVJ0M0sxVVlBWU42d2loMExRR2JYczJoUk1IZ1FkcXhidHhmVHl0MnFvSUhPdDNqZklqamdkSzVmbWdUWTVoMmN0MnpmdjRnVk1paEF1UEhna1ljVFM3WkdZSUhqeTQ4TlJKN01PUlVCeHBoREYyNnd1Yk5wVUFsQWkxNmRWMERwMDdBdktUREF1dmJnbjdGeld3b2d3TGJ2Mnd4MEMzL0VvT3J2NDI4YkJCM09YSkFDeThpanZ3WGdvTG4xUUEya2E4ZTdJTjMxNzNnSTNOMU9YaXhwOE9qakJNaGV2ajFaNytuanAyRXczcjE5cTVybDZ4K3ovcjUvc1FEQXQ5K0FXaVFBM1g4SVd1VWEvNEVNV3VGQWdoQmV0VUF1RFZib1JBQ3FSYWhoVHdBY1lPR0hTWWkzNFloSkZmQWFpQ2p1OENDSkxISW9ZSW93M2hEQUF5M1cySk9ITWVaSXczTTI5cmhUQXpvRytVSUM5ZmxvSkVVTG5DamtrZ2NjNlNSTEFGQzQ1SlFpc1Bma01BdEFROHVXc2pSUVFBSEU5TmdobFZQUzJDTk1CVFJ3QUM0N0tFQ0FOdHNBMEphR0FwQ3BZd0FIa2xpUUFWSWVvWUEyR1NKb2dKMHc0am5pUGZsRVFjQUJPU1ZvSXFFZkptQWNnZ1lsbW9WREQwemEzZ0xMUVNvZmtRaU9WTklZQ1RpUUoza1Rlam9ncVBjaFlFQndhZnpaS0hsUnF2cHBrZHFWMVdrYVh3V0tYSzIyZ3NjcXJhL2FNZFdwdndVWTdIWERhcmNYSHdUTWVoeXd5d3JYTFA5eUF6enc0aDVUYVZvYnRkWENkbTJ5WmhGeUFMS3JnUnN1WitQYVpsZ2lCSGdybXJyckltYm9yd3N5VXB4djlOWXIxNzNrS29rSVZiWWhzS3UvWGRIMjJ3RDVTc0licm80bGlmQmNDdnRtd01FTm1ibWF4Qk9mVlhGdEJXeHJDWDJzTGRCeFYwMjZXNTBuNjgxNTJhQW5RNVZ5YlE4SWpJbUJxd0VaODFBRXVBc3JLUjlmaHVQT05Da0FjV00xbzBJeVp2MFN2UkRBb1FId015b3pSbzJ4MCsxb0hGclN1emh3dEZzbVk0M1JpbEVQelV1OG1NRXNOajhKdU54WXF0WW80R3RlSzYvZFRnRHlEcGJmT2tFUDFxZmQxMmp0V04zc3pFd1lBallEbm9yaGpVbXRrSWlORmFCNDNGK1BoY0RmK3ZEWVdKMlQ5ekkzZDRsZmc2SC9ZeUozYmdyWlNJZStqcFY1SVc2NktrYS9YQlBqYjZuOXVpbm8xaTVVdTJKTmZic292VGxtZTAyOFh3V0E2cjlYMHJaalp1OWVlVklQSkMrSzRIZzFQNVRtZVBrdXZTWU1NTjlWQU05emlQejJqWURmbU01ZFNacFg5T1Jyd2pwZXczT0ZkMTZsdHc5Sno0VEZuMzc0TzRWdGZ5VzV3d3I3L0ZLOHBIRHVmNUpBM1ZzNDlwY0U0QVVBVjBPZ0ljelh1dkU5aFhaWEdhQUVHMEU5QUdIdUx3ckVTdjAyU0FqODBlODBmYk9LLzBpWWlBQmFoWENkK1Z4U3JNZkNRV0FRSy9xYkRBWEZnb0FhSG1LSFlMTWdXZ3JJa3dQNlVCREJtMDRFRXhOQ3BSenZpSUlBNGxpMEY1c1VHaENLZ2VqZ1ZkQTNuUGtCU0loWVpJTUp3ZmFkLytXSnhZaGh6SU1XbFRLQUR3b25pY1lEWXhyUE1NYXhvTkU2TWl6aUhQT1FONldzc0l6OEF3a0E5bmlISmxxbGpmS0JvMVZvU01nMlNCRXJYRXlQQzEzU3cwYktRWkZZY1oxKzZxZ1VSbG9TRGJGN3l3aXZZMFdlU082VGJpaGxVbktJbmxCZVpZbW8vSUlaeVNMSDJHQVNLYXlNcFJqeWlKUTc3cWVQTG5taUx1bkluUTl4RWltZUhLWVhKdG1UVWNhSGx5eXBwRExIY0VPbFJMSkJDaENMTTZkcEJTOWFycGJNVVdWTGNzbk5LOXpTS2xURXB0dDRJc3h5Y3VHUlZqa2xqTVRKa21TNmN3cjAzTWtBWUtrZkJheHpKeHE4NXhYOCtSWmZnaWlmSUFHblFJZXdScVJvTWtmWnZJbzlGOHFFWTFwbG13MUNLSklvYWdWb0F2OTBTaGJkQ1Q4NVNvUnFJcVdkUW1JbVNHQkkwaVlBc3ljR2paRkpXU0xQbGpiQmtFbDU2SlJlR2hLRjJ0UXJnV1FKUmtGMFRwZE05S2RBS0NwU0FqcWxpQ3FGbkVqOUFVSEpNbElRTlRRa2c0d3FFalRLa3BnS2FhWWhHYXBXYnhCU2gvcDBRUEIwaVZmSHVnT1BHalZZWEIzSUg5bnFnN0wycEthZTZwNVZ6a3BYRlBCMEoyTE5VVkFIa3M2KzNnQ3NPNEhxbE43SGsyc2FWa2FEL1FoS2JhWFhwTXoxc1RaUUtrenJGZG1BWUZZSHJzd2tYeTEwVlpBRTlyTW5pQ3RJamtvbXhGSmtyYWhkd1ZURmd0ZHFCY0FxVEkzdEM5emFrdE11U2FVVHlhcHVZMkJYbmlnV1Vwb0ZTVldIQzF3b0xSZWs2Qnd1REZ6YkV0amE2cC8vWFpYdUMvN2Frc242aTdjRHlhMTJUWkRjbmJEVVgrV2RpRFRIaTRLME9wUm94ZjBJZTFYQTJPanU3TFpLOGExaFo0dVYybmFNdXhKaGJXeExDMWlzcWJZZTFvMXRmRjF5M0dyaE5DVGlIUzk0UWJKUHNTMVlJdjRkYjJYRjB1QndZWmZDOHkwQmdMRTYyaWsxZHlBaEhzR0ROMnMzQWs5RXYxRjFyL2dBbDE2SndCaXBOV2JKZVltMllUM09ON1JYV2UvYUhIakYrUjZZSWdKRzJJYy9FdUhQOGxkQ3BodHhRREljV3dNczJTV0ZkZHFFNjBIbDJNN215aURwc3RPT0xJOEJwRmdFWDg3djYzSWNFRE9mR2MxVzdrbUhPMFpkRkw5NUJHbHVTWVZmZCtHQnVESEVlUWJKbkR2V1o0SGMrTEdCbHNnQVNxd3EvQ0xsMEpoTi8zUkFIRHM1TU52NHppcVF0RHk4MnpsTEV4YlRzbzB6UFJLTXRjN09nOVJ2MXJReU9OMjVMWThhMUM1UTlURjIzT29pdzdvRnNoYXU5Rng5Nmx2RFFOTzByblV2ZlIyRFFBczVlYnlXQjZxSkRXZHZVUHAxeVJiSHNwbU41bktSTDlyaG1EYTFKWWh0Y0doNzIvL3I5amUrRGU3MmlYc1o1QzczOXM2dGpIU3JHOW0yZm5jYTJaME1kOHY3ZFZLdVI1THZUVDVQRzVyZmFmUjNRQ0FOY01VSnZCNEVML2phQ2oxd2hSK1I0ZlZndE1OalZ1YzJUOXlIYks2SG15OU93dnBHaytNc3BEY3l4QXp5MytXYkhpUXYrZXNPVG85bnEveDJSQjcyeSszWDQ1M3NlK1pZeXpqQ2NXNXVwVHlYNXpFNytUdzJEdlRmQllEbDh6aDIwZjg3QjNHVUx6MTVPbS81MDMvbllva0VlK3FsVmpQV094ZHpwRWg4NjFTcXVFakEzamt5eXlQbFpKK1lxZWZoOHJSM3JPczNjcnZkVmd5U1A4dDlZaWNteU4zRmRuU2xvSDN2eXhKN1FPd04rQ1ZWWFNKWkxueTQxajZQcnl2K1E0S3Z4MlVmdjY3REQ2VHRsRzgwMHVtUitNeDdLdklSOXp6QzhpNlF5WXRlVlU5dTdPbnI1WEdYSkh6MUZXTDhwbUVmTHREVFk5QzBoeEhwQlhMejNLT282UUZ4dk8vQlkvWjVOSG40UVVvOVQzcVAvQW9Wdi9ITko1VHlQeHA5T3oxZkhzeXYvbjVrRENYaGExODNVUThJN2luUEcrL3JVUGJ6NkR6dEJUQ0E4Wk15azkvSHMwNWVENXZwNzRUd2Q2K1k2UWRrK1ltWXYraDFoSCtuQVh6L0FYRjh1UmNvVGFNZkl2Y042cmQ2R0xSLzZXRjc5YUIweU9kTnlIQjEzOEY5MVJWL0VWQlVFTVFncmNjVC84ZHpNdlozMXJKNTRzZUI5Q1NBZnlGMEEvRnpoVGRMMzVDQXpSRitBbUdDbnVkV09HZ2FNbmhSOFZkejNoWWZ1NGRoSENobDlOY1ZOdmh2MzVkeE9zVWNQZWgzOGFlQnltQ0FuUUUxVjNHRVcwZG0yWmNXSVdoSzhmZUU5RUNEbkVHQUE0R0ZXSWR0REJRYlV0Z1NPL2g0UUNnUTdzY1ZRemdSZGtkN0xvZ01Xd2dWMTFjUGNiaDNTWWdNZFRnWGRMY1RINmg5YXpnUHJFWkFlTUdDWUxlSHg1Q0c5b0orSWpHQ013ZUdncVpEY3pnUmVYaDNDMmdNakxnUWp1aDAzL2VHTFlGNWVwZ1hnYmg2ZHpnUGZZZ1IvMzg0RUorSWRZTVlFckdvRGhJb0VVMVlnWkk0RDV1NEQ3ZDRhZC9YaGN1SE1ub1RmL1kzUTF0QmlsYVJpQWM0R0wxb0RiK0llUEZIaGgveGpMMFFqZUZWaElNakZOZ29FTXhJZTkwNEVhYW9ENjlJaHh4b2licURFcUVvRUxXNGRlRTRFWkRJRDFWREdCQ0lmUDNuVURCSU5aa29TUGxJZnF2WVhhbklDK3JUR0EwNGZFUTBGZ05nalo1d0FDZ1lFdVBZZkxOSVc1UUlDZXNvVnh5b0FoVkpFWmR6RGRoek9CTUpkcU1qR2d4VERVdmpHQUg1ZlJhSUdZK2lDL01vTkJmWkF1ajRHQXBKSExzSUVnOTVrZThZRWl0WkNpMTVHVzBZZitWSWlCaVlDU1Y1R2ZINGtpdVFrU0d4a2FEUWs1Y2hoa2g1QXAwWUV1MzNrWGJnTmYrc2NaSlJPUUpXbUM0TmN3bXBVUnNGdVpVa29BRC82RVJmNlRBTjBKQnhSNVl6Y0pDT2dSdVRnSlcxMFk3UkY1T2hJWmVPUUplMTBZcGt5UUJzbVVsTnNRZ0hjSmE0NUpZNWtKTW5OWmlHY0FBMUtXZUlxUU9LaVJRRG9CeFJSRERINFplUktRSVJHUnJrd0JkOTRBK1BlWmlicVNMdWdRQ1dpUWZBb0IyYVdab2pNSm1IdEFDZ0tRZXpNWnBQNVpvK0FKdFg4WmxXS1JXWXVSMnRpWnNrb0p0WUFSTkFjUWJINGg1MjZackVhVGtOWUlaQ1lCVDcyQmd6S1p3bEFKZ2FraTNIaVFWZllRQ0dTUmpWYVowbEFKZnRBUUFQWUNsTjBBcU04cDJOQTUzaVNRTGthUjhGOFNWcTRwNTR4aEZnc2lGUStaNDUwSlUxUWc1ZklnRC9hK0lLV2hrQnQzQUFYbElBY3RJaW5NS2ZSaEFBU2xrZXpUQ2hGRXFoVDdLVERsb0VFZm9rSkhLVEdhb0RuY21oSWxvTTRmbWhMQUE1STVxaXk3Q2ZKaXBWVTZtaTdvR2hMYW9Fd2dpalBiS2NNOW9Dam1taklxb3NPUW9GSGNtalBTS2pQOW9FL1NHa05sSVdSVm9GKzRLa0pBSTNTMG9GVHVta0NKS1dVVG9GUlVtbDlvRUE5bm1sT0FDaFdub2Y1K0dsVzlDa1llb3NCVXFtUmxxalorb1lTcXFtWUNBM2JXb3gvUWluVEZDWWN5b2FDekNXZG1vRkFtQ2JlVm9QMU5Hbm9NU21nUnBNVmtxb1pLQUFRWG1vNFpDYWlyb0dkZUdvSjdVM2tlb0dFQXFvZVFxcGx3b0hkYUdwVkFvQVk5cXBkTUNvN0VtbFA5R2JwQW9Gdzc5SnFlR3dwNnZxQjRIaHFpdktKN0VhQ01sSnF4Q3dBRU41cTNuQUVZRXBKZzJRcHI1NkJ3R0FFOEdxbjhWU3JPWHpFS0JLS3c4d204d2FDUnh4cXJteXJOTUtsZzZRbnpZU3JYV2FyWWRnRkFxcUlURkJyT0E2Q1FUZ0FKbmlIaU9CbnVlYUNnRkFBQUpnQUFEQkdnQXFBQWp4cnV6d0pnTGdKY0x3RmdNQUFBRnFDL3FLRXEwZ3IvMzZKUXBib1F6THNNOWdEZ0p3Q3dUd3JRVmJzUlo3c1JpYnNScTdzUnpic1I3N3NTQWJzaUk3c2lSYnNpWjdzaWlic2lxN3N1c1NBZ0FoK1FRSkJBQVJBQ3dBQUFBQWxBSm1BUUFGLzJBa2ptUnBubWlxcm16cnZuQXN6M1J0MzNpdTczenYvOENnY0Vnc0dvL0lwSExKYkRxZjBLaDBTcTFhcjlpc2RzdnRlci9nc0hoTUxwdlA2TFI2elc2NzMvQzRmRTZ2MisvNHZIN1A3L3YvZ0lHQ2c0U0Zob2VJaVlxTGpJMk9qNUNSa3BPVWxaYVhtSm1hbTV5ZG5wK2dvYUtqcEtXbXA2aXBxcUVKQks0Q3NMR3lzN1FNcmdRSnE3cTd2RjBKQndVSUE4TVF4Y2JIeU1uS3hjUERDQVVHcmdxOTFOWFdQUWtNQWc4TEE4dmY0T0hmQXdzUEFnNEUxK3JyN0JIWjI5M2k4dlAweU9RRzZPMzYrNklFRGZIMUFnb1VPQURCQXdiVCtDbGMrRWpCZ1FjQUJrcWNTSEJCTklZWU13WmkwQUFCeFk4Z0F3SXdjQ0NoeHBNbzMvODhETW15SmIwQkJRU1lURW16NWhjR0JpSzYzTWt6SEFJSE0yMEtIZm9rUWNlZVNKTitLK0FnQU5HblVJa29jT0JScWRXcnlFaEczY3JWUmdCZzNyQ0tIUXRBWnRlemFGRXdlQkIyckZ1M0Y5UEszWm9nNTl1N2VCRWNjRHEzTDAwR0JmQUtGbHlXcjkvRENnOVVIY3o0N2tqRGlDTmJvOXE0TW1FRGtDVnJUa1hac21lOEFCcGsza3dhbE9MUHFBY0xHRjI2OVNVR2kxUExmdnZUdFcxTENRTFAzcDJYd2UzZmpnSVlhTXU3dU5zR1FZRXJGK1JBcC9IbmJnRTRXRTRkVUlJRjBMUGZYWkN1dXZjN0FSb1ExMDRlcStqdjZPTVFpRjIrL1ZVQTNkUExUL1BBdlgyNHJPZnI1N0wrdm4reDhPMG5ZQmNDL0dlZ1dLc05xR0QvRmRjZDZPQlZDK1N5NElST0hPRGNneGoyQk1BQkZIYVlSQU1aaHFoVUFmbDVhR0lPQVdBbjRvb2F4bmZpaXpnUWNDR0xOTGJFSVl3NDBtQmhqVHp1MUVDT1FMNWdRSTlFdXJSQWlVRUNHWUJ1UlRZSkVnQVNKaWxsQkFHd1IrUXdDMEJEeTVheU5GQkFBY1R3dU9HVVVoN1FJMHdGTkhBQUxqc29RSUEyMndBd25vTUNrQmxraWlzV1pFQ1VSeWlnRFpNSEdtQW5rQW5NZU44OStVUkJ3QUYyR1VqaW9EaWFlWjlCaVdiaDBBTldrcmRBY3BCU09DUjVJNVUwUmdJT3FOaGVoSjJlaU9kekNCamdXeHArTnFvZGxLbWFXQ2h2WlhHYXhsZUFQa2RyclIxS2l0cElyOUl4bGFuR0JRaXNwNS9weFFjQnN1TEs1N0lDcmpyWS93QVB1TWpIVkprT095MjErdDBLbWxtRUhJQ3NiTCtDSzZDd1pDV0lTSCs3cGF1dWZwOWlWVmdqc01YNzdiemZXWnZVdlpCMGxob0N1dkpMbmJnOURlQ3VKQUVJWUdobFJ4bzhIN3N1R1ZCd1EvV2xGckhFNmRYTEVuZWNNUEF3WXd0d25KNi9GQUZRTENmaHpjbVlvQ1ovaDdCRUE1ekh5cm1OL1JpemR4UUhoSUMyb1hoYzJZMDdVeWYwUEFOTWg0ckluc2xiOUc4b2k0T3FLZ0ZrWEJrQUZ6KzkyY3poMU1sTGM1YVZyTFZ5UFN2emN6WHdOZ2J6Mkw4ZGpjd0RTS2FpUUsrQ0tjMjJiVkViUTdRNmJ0KzE3OTJhY1EyQnN1MlVUVnZjZ1B0RjhhUDh5TmhZQVluYlZxL09DeW1BODF0ZVIwNGFubll6dEdSalFHdU9tUDhDZnlzRTRtQUlJQzc2Nm5NWUx0YmFyTWVlaCtCanJTejc3WFRRYnEvcXVQZCtodTVYUGVENzhIRllMcGp0eENlUFJnQWpXd1VBNzhwSHYwVUMzVm9sdlBUWWwxRWxYcUZuNy8zMHpTY2w5dmZrK3hJK1VwbVhyejRXQ1RpVzlmcndNK0Y2VXRmSGI3OFVEdHpWL2YzOEk5RzMrUDBMWUJQb1pwVzlDZkNBUkdDZVd4Q0F3QVlXQVhnOVNaOERKOWlEL0pFRmVoVE1vQXYrRjBFTmVoQkYxZVBKOHo1SXdob2t3R1hvSzZFS1pWQWdBR0Z3aFNva1lBcGhTTU1WUU5BbEFLaWhEbFBRUXF3WWNJZEF2RnhQR0FqRUlvcUFBR1A1b1JGcHlFR1hRRzZKUUZUQStWcnlQaWhxc0lkV2daMFZhUmpDbG94d2l6VkVvZy9CcUVQL0dlNkVpR1NFb1FMRXNyODBackNKTE5HaUd6K29BQlRpOElWejVCOGNRNkxFUEZLd2pzSHpvd3IzQ0JJOENoSithN3hLSHcvWlFFSlNaSHlNektBWXJWTEZTTjVQaUM3cG5DVWRPRCtXUEhHVEZPeGlTQXdKU3U5aEVTbUxMT1g5RXFrVU9hb3lnRlpEU2c1ZjJjQk9ocVNOdEZ5ZkFwVWl3VnpxMFNxUTlDWC9HSEFWVWdxVGVGUDhDUEtPQ2IvVEpZVnl6TFFmTVpVU3pHakNMNWtVc1NiL1l0a1RYR3BUZXJiOFNDKy8rYjBBV0krYzhjTmtTR2FKVHZXZGtpZVZiR2Z2Sm9tVVpjcFRlbllNeVRqdkdUMHpocVIrL016ZU8xMkN4b0JpajU0OU1hajN6S2tVYnlwVWRxS2tTQ29mZWp0SERtU2ZGTVdkQlpFQzBJd08vdytoTy9ta1I0bVh6NDhNWUtUS1V5ZElVSm84YnU3RW9Td0YzRUJiQXRPWXNtMmFNN1RwN2RxWEZJenFOSElscFVoSGY3cTZpRXBFcEVSZG5UOC9ndFNrYXM2aUFUbXBVMWszMDVCSWRhcWlDK2RFc0xvNmtMcWtkRnd0bWxkcEd0YklNUlFwTlMwcnY0STZrYlNxVlYxc2xZZzkzeG96YkY2VXJuZGJLa1Y4aWxlRDZYVWlmTzNydlA0cWtjQUtGbHlFdmV0aGk1WllnUmgyc2NCcWJFQWVDOWxVU2JZZWxLMHNwQzVMajh4cTFrNmNuWWRuUHp1bDBNcGp0S1JOa21uRmdkclVBbW0xWFhNdHYyQUxqdGJLRmtaR0hjaEViMHVtdUE3RXJiekZrVzhGQXR6Z3ZtaTRBU211Y1QwMFZwWW9kN2tVYXU0b29ac3FyUTdrcXYvVUhWUlZRWUxkN0pMSm1Ud3BxSGRMbTVTbWpqZEl1UldJZWMrYkkrVFdBNXJzSlJRdjR5c2xuUFprdC9TZDBIWkI4dHo4b29lMjRJaW5mL2VUM3FnT09FY0JjQzg5eEh0ZzVvNm93VERhNzBmZ0MyRUt1VFNURlQ2UlhYK2JZUS94TkNuRzdQQnRyRHNRZG9wNFFWQU55SHBQUEo4TkM0VENMSjdQaDFFWll3VnRGQ2xnclhGMVZHcFNIVmRMd2ZSWXNZK3BRMkxGRGxrK0YzYkpYSStzSEJjTEpNUk1WaHd3bzV5ZUpMY0V4bFNHR3BEcHNlUXN0NmJJQTRHeWw5SEM0NDlVYzh5MkFhUlNzSXptMG9BWHJXMXVzdlBpREJ3d0M4U1ZkTjVNbVQrQzN6elBSYm90RWJPZmg1SmlnUXgxMEpGUnMxTDZqT2l6RlBySmpkNy9qS0xwRituTlBEb2dqSzQwVkhhcGxDOXErakFTRGdtZWpkc3dRVVBOeVFQcDhtMEZNSUJSSytqUzlXQXdkS1ZZalA0Q1o5STlaVys5enF3Z0srL0UxR3BGcUcxL0EraVdISHE1dlhMYWdBQXNEMVc3dG15OG5waFlaRTNxYm1sU1A1eTJ5ckQ3V2xXc0tlak5TZ0YyV0xPZERDRlg1NFN2T3k4Y3R5MlpBbE5Fd0pWRmR6aVU3WjFRZS9LOGhEWDNiK1NORlZ2VDFiNnNsYytlUTZKdjF4YlkzM0t4dDNQSHEzQmpwTTQ3L0w1S3dVbEw3bmtjMnpWNVN3ckMxWHJwVEI4RzNBLzJic1JGa21QSkZQdWw0NFh0eHZDRzZvbE0vTE1BbDRpckl6TndscFE4dGU1ZWhzY2QvWmFadTdiaDRyaDVXbTVzTDNndnR1SXBFL2RKLzJhTW9QSENlaGtyUnd6U082MzBxWTQ4anBMSitLSlRubXZFUEgwZ0w5ZHN6SDEwbUs4UFJPaWZ6WGxBZkU0VW9MT0UzVzhsZXRmUlltZVFQRHk3VTc4djNRV3o4YktDZk90Y3FUdEkyRTVhWEk4eEttUGZIZGZ4c3ZOOUNCNGt6aWJ0eVpQU2VIWTgvaU1YNTYzYVczTHRrMXcrNmVQOWZFall2QkMzZi9XOFY4Y0w0ZGRoZHNER1YvUWhpYnBDcWtheS9QcDZnVVpmaGRhTG50L3RXWWJlNnFCZVl5SWYzQnVPWlFDVkw4VUJ0c3dTMG50WDdveGhITjhnVnVIV3N3UUJhQ2VGOFJwejl3Wi83ak1LcXdiVEtwTjk2dnIrTTlLbjJ1MlRlT0xVTTJaTXFoaC9aWnp2WDlpSHRPcUpvTDFud2g1ZjA3K244NTRnZnhDRGYvK3VaWDFuVkg2UW9IOU5nNEQweFd3ODBXb0U2QWRnZ3hvTVNGKzcxeGdBZ3dtNUlSdkVCMkVLc0huMnNqQ1QwREt5a1h6K1pYemNCNENNTUlHcEFYZjA1WDZvVVJ1UHdJS3BzWG9zeGdETU54WS9FWUZxY0JxN1lZTXhabi8veDRObHNDTzhBWVExSm9SWFVUTzU5d1lCSURBLzJHalFWeHprc0JkOTRBOHRCeGVWTm9YR2dRRElrUWZBa0IxSXlHUktlSHdMWUlWeW9BRFJZaHhqR0dWbDZCWlZTSVJLd0MzbDBZWlU5b1p2QVJOQWNRYkg0aDR1T0dSNG1CY04wSGRHWUJRMWx4b202R1U0aUNIWXNvZFk4QlVHQUlLV2tZaGpob0x0QVFBUFVDbE4wQXFNSW9sTlE0aFVab24yVVJCZm9pYWdlQUorNGlVNWlDNFZPR2ovRjVnaDVQQWxBckFtcmxCK3QzQUFYbElBY3NJaW0vSnBNQ0FjVHJJTXpUQ014RWlNVHBKK3ZyaEJ3YmlNRWtGL3lZZ0NYTWlNMG9nTWxQaHBqak9OMklnTXdQZU1MekEzMmZpTnlNaU5OUEIzMzBna2Z5aU9SbGlPUlVJNDRxZ0QyNmVPUEJLTzdZZ0Q0UUdQTkZJVzh4Z0UrV0tQR1RJMStRZ0VDc2lQQmlLQy93Z0VBaWlRN1hFMkJWa0V3SWlRN1dFekMya0UrK2lRck5LS0VWa0Q5VWlSdUhLT0Z4a0QzcWlSTmRpRUhia0RQZ2lTamJFQUhUaVNRdUF3SmtrWUtxaVNTNkFBNU5pU0drS1FNQmtGQ3VCL05QbGVJbm1UVWpHVE95a1JqK0dUWENBY1dSaVV4L0NGUk9rRk1ubVVOQmthY3JpVVBwQ1RudWlRT3lpVndtWUFoVWlwRENpSmxXcEFBT3NIa2lOaGtWNTVCWDJJbEF2d2ttV0pCaHl4aWowU0dtUzVsbDRRQURqaGxpRkNMSEtwQjE4QkVkK0lpV2lZbDMzQUVWVjVpYTRDbUlWQUttRENJdzhnS29hcENFYWhpeGdTRTNIWm1IcEFBQTZBS2U0eEVwcEltWlVRQUFRZ0FBWUFFS2tSaXdLQUVKelpEOXJnSmNLUWh3QWdpN1p3bXJ6UUNwOHBBTG40SldCU2pMaFpqTTlnRGdKd0N3VFFrN0Fabk1JNW5NUlpuTVo1bk1pWm5NcTVuTXpabk03NW5OQVpuZEk1bmRSWm5kWVpPU0VBQUNINUJBa0VBQkVBTEFBQUFBQ1VBbVlCQUFYL1lDU09aR21lYUtxdWJPdStjQ3pQZEczZmVLN3ZmTy8vd0tCd1NDd2FqOGlrY3Nsc09wL1FxSFJLclZxdjJLeDJ5KzE2ditDd2VFd3VtOC9vdEhyTmJydmY4TGg4VHEvYjcvaThmcy92Ky8rQWdZS0RoSVdHaDRpSmlvdU1qWTZQa0pHU2s1U1ZscGVZbVpxYm5KMmVuNkNob3FPa3BhYW5xS21xcTZ5dHJxK3dzYkt6dExXMnQ3aTV1cnU4dmI2L3dNSEN3OFRGeHNmSXljckx6TTNPejlEUjB0UFUxZGJYMk5uYTI5emQzdC9nNGVMajVPWG01K2pwNnV2czdlN3Y4UEh5OC9UMTl2ZjQrVFVQRFFyNi8vOEVRSUFBd0FIQWcvVVNEQmc0Y0VFQ2hCRGZMV0JJVVVDQWlCalJDYVJJY1FHQmpDREZLVmpJa2FQRmtDaTUveFVveWRKaHlwZldITENjQ1VBQXpKdlFGQUNZeWJQQVJaeEFrNjNreVJQQXg2QkloOGtreXJUQno2UlFkK2xrU3RWbDFLdTNobEpsYWhTclYxbEx0MjQxK0xYc3FxbGl4VDU0YXJidHFBZHA0MXAxUzljVGc3aDRBVHlzeXpkVGdKMTQ4UjdvUzdnUzNNQ0JHeFJlL09ndVlzUUdHRXRPOVBmeDR3VnNKMnYrYzlneVlzeWJRL2R4N1BreEFIK2lVOXVwWE5xeVh0V3c1UmhvWGJwcjdOdHJDTkJ1L1JxMzd6SUJFT3ptdmZlMzhTOE5odFB1ZmJ4NUZ0M0tseGQzVG4ySzhPalNxMnVQNGdBdzl0SUlVRzhmdnlSQUE1TGZMWU1teno2SkFxM3BQMmR1VDE4SUErL3g4UzZvejUrSStmeVE5U2RnRUFSY0IyQmFpZzJvSVA4UC94MlkxbUFMUnBnREFmZzVXTlIwRW1Zb1F3Q2RXVmlVZUJxR0NJTUE2SG5Za29nb3dwQkFoU1pTRkZtS01LNFFBSHd0VWtSV2pEaWVrRnlOSldHWTQ0OEg4TWdSQXZQOWlDT0ZRakpVZ0pGTWlxREFSRWxDWUZPVFJzNFlKUVJIVWZuamprSVNxYVdSUVNiNTRwYzVycGdrQTJUK2FDYVBBQlNaWm9ocjF2akFtemsrS1NTYWRNYklXb3R0NWhsakFnYWFPS2VmTUFiSFk1YUVpaGluaC9zbG11S2lGazdwcUtJMW5qWXBpbUVLZWltS1lYbUk2S1lTem1aaW82QnFTT09CRUpZcTRaNE9JcUNxaHBBQ0tPbXJDM1o2WUorMFJpaHFwTGxHYUtpRnVQWTZvRUllemlwc2Z4czVHT3l4L1owYW43SE0waGRyZWdCRU8yRC9zcWhhS3lDVUI3cXFMWC9RT1pqcXQrM3RDdUNTNU5LSDFvRWdwanNldHZtTjZTNTVnY2EzN0x6YWhRdmd1UGhxNXl4MjN2YTduUUlXZmlxd2MrYkdKKy9Cem8xMHE1c00rNVp3ZXZ4R2JKekRBQTVxTWNJT1Fyd3hiQVJuKzNGekUyTkg2c2kvNlJ0ZnV5amZ4bTE4TjdhTVc2YnhvU3V6Yi9WKzUvSE5tc0g3WGNVOGl4Wnl2RUhqMXVGMzFSWWRHODNwR2F5MFpxeCtCKzNUbXBXczNNbFViMFphZkR0bjNSZUwwZUhwOVdaY3BwZmcySnB0L1IzV2FETUd0bkp0YjNZMGRrN0h6UmZUMkUxdGQxMEJaTHkzWkM5amwvVGZoZmtjSGN1RXU2VXlkbUluemxlSmVUdE8yTCs3YVN3NVhZWVBGL0RsaWdQSU9kOEExdjM1LzFVNUt3ZjA2RmRadlp2ZXFFTmxhM1NXdDQ3VjRzclpMTHRYa0NzM3dPMWxCUjRkNzEvTnJaem93TitVK1c3RUYvK1MydEd4cnZ4TENlVG4vUE1wNVQ1YzdOVGpWUHB1dG1lUEUrV3RkZTg5VEtxM3R2djRRQjF2UHZwQTRRMDMremZSUHB5UDhHY2tQL0wxdjlSM2ZNbm5ENUQxK1BNZlNnQkltOFlKRUNOdm84MzBEcGdQOEpWbWdReThod005QThFSTFtT0NscW1nQmVlQndjZG9jSVB4NkNCaVBnakNkNGd3TUNRc1lUdE9pSmNVcW5BZExJeUxDMStZamhpbVpZWTBQSWNOeFlMREhKWmpoMXZwb1EvSEFVU3FDSEdJNFNnaVU0Nkl4RzlzanphbmE2STdDTmlhL2treEhWUXNqUld2ZUk0c2VtYUxYQ1RIL1dnRHh2OHdpbU9NcmVtYUdjbmh2dDJjYjQzdVVGOXAzZ2hIZHBRdE9wdXJvenFVU0JUeDZmRWNUd3pmSDluaFJjdWNiWkRuaU42ekVKa081cG1Pa1JySlR4a2hlUTArRWdWeGxIUmlmT2lZeVhBRW9KQ1B5V01udjRIRzB2aHhsTnlRWTJrT2lVcHZDRzg0TVd0bE54SklSbGwrUTVGY3M2VTMycmlid2VseUcrVVQ1Qys1UWN2V3NIS1kxc0FseFpDcGpkZEZoMzdNbElidmRCZE5iSHd5UDZlczVqTjR1VHB0V3VPVnd6R2dONkZSekRTT2N4cmNwQTNienRrTWNPN21tT3hjeGpYekk4NTRLaU9kdEZHalBZVXh6YXZ0MHhrWWl3ODgvMm1NTzM1bmtnVGRSVGxyazlCbDRMTTFDMnRvTWZyNVNJa2VvNVQ1dE9neGdra2I3R24vRkJnQmpVOFVQOG9Mam1hVXBNSUlhWG84aXRLU2lxdWx3WWdhMHZRSlUxbW9rallSWlY4QVR2SVBtWDZubnVnalVVN3JZZExXaUpKOWFFRW9PbFNhSGlaS2JsZnJuSWM3bFVOVDNxbk1xZDdBYUVjUFNDUG0wTU9TV3dHcTk5d1hWWGM4bERaSEhkK3ZTaExMZC9oVWFnSThucVhrWWRCYzV1K3RBOGxtT29qbG9LRjZqNk5ZdFVZZ0QrYy92aExGcSt1NEtmY0UyRUc5a3NPd0IxTHE2QnpKazhCR2c2TFljZXp6QmxzU3lWNURzUUdzSDJnWjRpVjBRUFpjL3NNclVWZ0tqZ0JnbG03K0t5cExSdHFOdXRhc3NLQmtDV0xCb2RYaGVKWnpTbHlQSnhjNkhNMFdqN0o0OGFzMlhvc2RhR2FQczJLaHJUVmt1eHZsUG0rMC8xUnhia3o0aEVucXFUWXc5OEtHTW5tVlArcUtSYmpXSk81d3d1dTkwMVpYRzY2dGtYU0xCMWFXV05hbExUSXU4SkQ3em11WWR6ZmEzZXlCcktzTTdIWXpmODZFcXpUT2lzZXF0dTY3RmQybWtINTdPZHVLVk1JOEluRHhtQ3F5WmZBM1ArejFYbjBGNDlBeithKzNQMHNHZzdIRDJ1ZGVxYTNCV0hGMFFwdzlHWnV0R0FaV1RvQ2Y1OTRNRCtPL3lybnYzMnljSHZUdWdrTlJLaXY3cHVxaDhQUWl2a21hS3dQWGVxWGQxZ0pRVnhKci9hYkZvd0hNbHhVSHlPMk5TNWhnSWZuRUZrQ09qcElGbU9iMElHREhwN0RUbFVxclFpdGRpU0lERUxJazduTm5DTUE1dGRBMTBabFpnZVErZjFtQVBZNFNBQTdOQ1Q3M2VhQXFKUC95Z1FaZGlrTDNXYjhXelBHdFlHd1g5UjdJeUVoc000RGVIQXBMOTluS1NCeXg3Z3pnNEVaMHA4OFUrWE9kbVJ0bG5tSWlBYW91b0I0VkVHZ2gxYVRWaERDUG1DM0VhQnB5R2RZUVFBQ25HZkZxWkRORXovQkx0TE9WRFlsbU8zc2dHcjRpQTRiZEpRY0FHdzhINkhXTnNzMUZTYlBKMjRjNGdLZkhqVXB6ZDdrZmdnaUFBOFR0NDFhVytkb01HY0FDRHZEdE5CQ2dBZXV1dHl6dmpXL1N3aHZjdVU0UHVmL283aWpwbTk5elVJQUJBaTRtWmpiOFNnL3ZOeFlVTU8rQ0UyWGhqTHo0blFkUUFBZDAxd3NjcHpXK29UMUVrY01hQVEyZ3NCSVMwQUNWRjd6WW1keTJ4eDh6Z0FlWVBBc0JPSUFCNkkxdm5IZnkyRHZmQ2dEL2ZDNXpIQ1NBQUVJbmVzRnRFMCtrSjEwc0EwQkFBUXJRZ0FNMGZRVUtZRUFEQ3NEdHE2UGFtMUMrK25EMHZYVUJlSjBBQkpDMUNPQU85YkVYQUFCbFYzdERUbzUyVWVzZDZ3TUl2T0FIVC9pOC81MGxsRzZvM3cvUGVHUkQrcDhFYjd6a2QyNTBiU0pwOHBnM3U5emorWjdNZXg3ZmlhK3BoVDlQK21MVjlBVHFMcjNxVFVUMTA1ZEF6cXVQZlhwQzczb1NORWoydUY4T3k3M0pBS25uL3ZjUW1FdnRaY1JrNEJ0L0lMWWVmZ3NjZmZ6bVV3UUJYMGRwQUJidi9MODdSZmsxNkgzMWdVOXE3TnZnOXR0WGZVMjhyNFBPaDUvMEJ1QTcrV01RN3ZOamZnRmFYbjhOQkVCeDkvdDYyZkxIZ1FKR2IvOVRKei8vUDZBQW10Wi8vd0J5Y0FCSUJQdEhnS2ZHYWdlWUJOTlhmd3BvVE9yWGdFQ3dmeEFZZ1hseGZSVG9CQUxvZXhpNEZjcW1jUnZZQXgzM2djTUJmeU40QlFSUWZDWllGQWF3ZVNub0hnNWdjeTBZZlBnWGcxVWdkb1lYZmdEUUFEQ0lnMUFRQUF4Z0FEc0lmQUJnQVBFSGhGd1FkQTl3Z2F1M2RCQ25oR3NnZGg3b2VVZVloRkpvQmduZ0FHVFhmQTl3QUJPWWhXdEFjM2NYZXdVZ0FEOG9obXhBQUE3d0FGVVlaUWJnQU5Hbmhtc1FBQVFnQUFhd0FFV1lIbXduQUF3UWhuUVlDQVRBQUFJd2RnaXdoM2d4QUFEUWRnd3doNEg0QjA5M2g0VzRkWlJZZUpab2lWcjNBQUlnQUhSSEFJRDRpS0FZaXFJNGlxUllpcVo0aXFpWWlxcTRpcXpZaWc2dStJcXdHSXV5T0l1MDZDNGhBQUFoK1FRSkJBQVJBQ3dBQUFBQWxBSm1BUUFGLzJBa2ptUnBubWlxcm16cnZuQXN6M1J0MzNpdTczenYvOENnY0Vnc0dvL0lwSExKYkRxZjBLaDBTcTFhcjlpc2RzdnRlci9nc0hoTUxwdlA2TFI2elc2NzMvQzRmRTZ2MisvNHZIN1A3L3YvZ0lHQ2c0U0Zob2VJaVlxTGpJMk9qNUNSa3BPVWxaYVhtSm1hbTV5ZG5wK2dvYUtqcEtXbXA2aXBxcXVzcmE2dnNMR3lzN1MxdHJlNHVicTd2TDIrdjhEQndzUEV4Y2JIeU1uS3k4ek56cy9RMGRMVDFOWFcxOWpaMnR2YzNkN2Y0T0hpNCtUbDV1Zm82ZXJyN08zdTcvRHg4dlAwOWZiMytQbjYrL3o5L3Y4QUF3b2NTTENnd1lNSUV5cGN5TENodzRjUUkwcWNTTEdpeFlzWU0ycmN5TEdqeDQ4Z1E0b2NTYktreVpNb1UvK3FYTW15cGN1WE1HUEtuRW16cHMyYk9IUHEzTW16cDgrZlFJTUtIVXEwcU5HalNKTXFYY3EwcWRPblVLTktuVXExcXRXcldMTnEzY3ExcTlldllNT0tIVXUyck5temFOT3FYY3UycmR1M2NPUEtuVXUzcnQyN2VQUHEzY3UzcjkrL2dBTUxIa3k0c09IRGlCTXJYc3k0c2VQSGtDTkxua3k1c3VYTG1ETnIzc3k1cytmUG9FT0xIazI2dE9uVHFGT3JYczI2dGV2WHNHUExuazI3dHUzYnVIUHIzczI3dCsvZndJTUxIMDY4dVBIanlKTXJYODY4dWZQbjBLTkxuMDY5dXZYcjJMTnIzODY5dS9mdjRNT0xIMCsrdlBuejZOT3JYOCsrdmZ2MzhPUExuMCsvdnYzNytQUHIzOCsvdi8vL0FBYVlEZ01ERkdqZ2dRZ21xQ0QvZ2d3SStJb0FFRVFvNFlRVVZtZ2hoUUk0NkFxRUYzYm9JWVlhdHNMaGh5UmVtR0dJcTR4WTRvb1Nub2hpS2lxeXVLS0xMNTRTbzR3azBsaGpLVGZpNktHT080N1NvNDhtQm1ramtTczJhR1FwQmlCWklnRkxsbEtBa3lSQ0dlVW9VMUxwb1pWWGhwS2xsaGR5MmVVbkE0RFo0WmlpbEdtbWhXaUNvc0NhRmc3UTVpY0V3RmtoQW5ONndvQ2RGQmFRWnlkRG11bm5uNXMweWFlRURSQzZ5WmVIQXFrb0pRQWNLdUVCajJJU2dKcVNpbG5wSkhWS0dxRUNtMXJpZ0tjUmhtcUpvWkxpYVNvbEM1QTY2S3FTWUhwb29yQkcwcW1uanRhcVNLQm1hcXJySW93ZUN1cXZqa1JLS3JHT0pFQXFCSzhpcThpb3BOTHFyQ0xCOHVuQS83U0tYTHFzcjlnT3N1ZXkzU2FDcXFRTGhJdUlzWjVLYTY2M3kwS2c1THFEakN2cHNQQUtnbTZxOWJLN3JBSDVDaUx2b1pUMiswY0E5ODRyOEI4SHRLdnF3WDFVeXllL0RQUHhacnZ2UnB4SEErMUNFSURGZXhSOGFMTWMyNUZ3dTllR2pFZXI3ZEpyTWgyM2tscnV5blk4a0hHdU1MY3hjYnNKMUV6SHY0ZStySE1jQ3NpSzY4OXk4Q3dzMFhBRW5USElTSzloTko4QnJ4YUFBQnZ2bzNUR1ZhOG13QUFRNi9PMG5WMnJwb0N4M002VGdOQ2VsbDBhcWo3ZjQzRFByYlVNQWMzdnlFMXF5YXNGQzBETzlpQ1FjWVJacHpZeWhXM0xNM2k3WWFNV2dOOFc0aDBQd1g5RG9QWm9nUUtnOGpzWS8xMzRhWkIzeURRN1owY2VkZjlxWDBkSTl6bU1aN3h3YXFGL3VQYzd2UEo1ZW1odlYvajVPYTFuREVEZ3AzMDdZenNvL3owN2FLbXZPSGs0c2R1NXU5WStJc0E3T2JsbnJDN25IcGY0QURvQkJLLzc1YWFWN3VIbzQyUWUrZkNlUlkvajYrVFl2ZXp5cXRXKzRnTFBkOVA1K0t2NVRtWGkzbWl2ZS95a0ZVOGwrTnp3SHRTWUJ5ZStkUU5ha1lQQTZxaW5QUDVWUTFrSmpGREZUaU5BSE1GdkcvT0wzTzFHWTc0MTRZOGEyWXRnaEF5SUd2ZHBpWHpMcUtDZHBtY2ErMG1LaGRGUUlaellseHIvU2VxRHpraWVwQ1pvR2dTMkM0WEVPRndDTnlpYURMWUxnTXNRWXVRc3R4cnhpZTRaU295YzQwNXp0UWdpMFJndVRPRG1UR05DVWwxeEdGR01IQWxQbzc3L0JINFJHR0VVSG10c0tNSXBDaU9OR2R0aWFlQ1lRQmo2UW9lZVl1SnFPaWpDQ09Gd0Z6SThGQTlSUTBjdE90QVdBWkJaSHlWMHZkY29jcEVVUWdEM2JoRkNTQ3J3a0taWm5DVXBoTDVjSklDTkNlemtheEpRdlVVTzRJeXZPQURhMmtnYkgyNHlRZ1hBNUNvQ0thbEcwb2FXeTBMQUdGMmhBUDB0OG9LMUNVQVhJemdBSUlhQ0FhV01vQ2hwbzhsWDlrbVdvVWlrTXlPRXlsR3VjcE1BcU9ZbmtEbk51Zkdta0l1TTVTbWsyYzAvMWdhUElnU0FHN2VaekQ0Q3N6ZTQvSnN1by9uSWFVb3lPTU0wcFFHZ0dRa0h0TE9QeSt4TkpidkpTYXBwSWdINWpPRHhjcU1BVUhZVEFBYXRSQUFhY00xTmFqTTNwQ1RvaFJDd3prYjQvMU9qTFVJT0gwSEtVVWg4RktRUnNxTndDSVJTQzNHVW4zMDRnRU9kYVU3aGdQT2hEb0FwSGc3d3oxZldkRGczN2VZQUdqREpQUVRBQVRPZDVrK0o0OHFXVW1nQUN6aUFUdHRBZ0FiMGxLYlNhYXBUSTBuVVBCd2dvVDZsVGxCQkNsV3B6a0VCQnJocU9hMHpWcFNXZGFwY1VBQlN0M3FocFM2bnJTMGRRQUVjVU5RdnlOV1hkQTFwZHZDNlZRUTBZS0ZWU0VBREFCdllTWEdIcFkxbDBRQWV3TmNzQk9BQUJraHFZeThLbll4RzlueVVSZXdRRWtBQXpHbzJzZ0FRclhROCsxa2ZEUUFCQlNoQUF3NmcyaG9vZ0FFTktFQkZXOHZKWFhKbm9MeDFFbFJqS3dEYUVvQUF2bFhCY1V1YjJ3SUFZTGZCcmRBQytycWRBTVF6dXY4ZldwQjJzVXNsY1pybnV0d043eUpWR2g2dGl2ZThCT1ZzZHdpZ1Z2UzZWM2ZKTlk4Q3dQcmUrdHJKdSs5eG9uMzN1eXhqam9lbi9BM3dvVkpybjE0SytNQmd3bTk5Sm9yZ0JwL1B2K3Bod0drZGpPQUZ4SGZCOWFTd2hrMEgxL2R3YzhNVVJrQnQ2V05kRURlNEFSMm1qNFJOek45NTdvakJMSFl2Uks4MDN4aUwxd0RVZlpGTWJSemNCUXp5U2dKb0w0OHRxYzVIS1VDL1F5WW9SRlA4SWdXZ004bC82eXFzamd4bGJPNFRXZFlWY3BYTkpPVnBIVm5MVy9ZUkFGQU1MeWRQT013eWV1bkI1b3BtTVBrNFpBVEljSnRYQkFBRFhGaGdmNTF6aVJiUTBaWGhGcnBiSHZPZFlSWUFCaGdBMERHdTg0K2JOb0xMUGdETUFRYUx3QVBNeXVnWDRQYk05bFYwcFcyUUFBZm8xc0dUenZHbVk2Qlk1OXEzQUFJWTlLaHZRQUFIUEFEVFNqYUFBMGE4Nmh3RWdBQUNNTUFDRU4zSDRRcUFBYUt1OVJFSXdBQUI1QllCdkliVEFBQkFYQWJRV3RoTklDMnVqUjNiYW12MzJxOHR3QU1FSUlEbEVpRFkwQTYzdU1kTjduS2IrOXpvVHJlNjE4M3VkcnY3M2ZDT3Q3em5IWXdRQUFBaCtRUUpCQUFSQUN3QUFBQUFsQUptQVFBRi8yQWtqbVJwbm1pcXJtenJ2bkFzejNSdDMzaXU3M3p2LzhDZ2NFZ3NHby9JcEhMSmJEcWYwS2gwU3ExYXI5aXNkc3Z0ZXIvZ3NIaE1McHZQNkxSNnpXNjczL0M0ZkU2djIrLzR2SDdQNy92L2dJR0NnNFNGaG9lSWlZcUxqSTJPajVDUmtwT1VsWmFYbUptYW01eWRucCtnb2FLanBLV21wNmlwcXF1c3JhNnZzTEd5czdTMXRyZTR1YnE3dkwyK3Y4REJ3c1BFeGNiSHlNbkt5OHpOenMvUTBkTFQxTlhXMTlqWjJ0dmMzZDdmNE9IaTQrVGw1dWZvNmVycjdPM3U3L0R4OHZQMDlmYjMrUG42Ky96OS92OEFBd29jU0xDZ3dZTUlFeXBjeUxDaHc0Y1FJMHFjU0xHaXhZc1lNMnJjeUxHang0OGdRNG9jU2JLa3laTW9VLytxWE1teXBjdVhNR1BLbkVtenBzMmJPSFBxM01tenA4K2ZRSU1LSFVxMHFOR2pTSk1xWGNxMHFkT25VS05LblVxMXF0V3JXTE5xM2NxMXE5ZXZZTU9LSFV1MnJObXphTk9xWGN1MnJkdTNjT1BLblV1M3J0MjdlUFBxM2N1M3I5Ky9nQU1MSGt5NHNPSERpQk1yWHN5NHNlUEhrQ05Mbmt5NXN1WExtRE5yM3N5NXMrZlBvRU9MSGsyNnRPblRxRk9yWHMyNnRldlhzR1BMbmsyN3R1M2J1SFByM3MyN3QrL2Z3SU1MSDA2OHVQSGp5Sk1yWDg2OHVmUG4wS05MbjA2OXV2WHIyTE5yMzg2OXUvZnY0TU9MSDArK3ZQbno2Tk9yWDgrK3ZmdjM4T1BMbjArL3Z2MzcrUFByMzgrL3YvLy9BQVlvNElBRUZtamdnUWdtcU9EL2dndzI2T0NERUVZbzRZUVVWbWpoaFJobXFPR0dISGJvNFljZ2hpamlpQ1NXYU9LSktLYW80b29zdHVqaWl6REdLT09NTk5abzQ0MDQ1cWpqamp6MjZPT1BRQVlwNUpCRUZtbmtrVWdtcWVTU1REYnA1RFVCQ0JEQWs0SUlNSUFCVkFLaUFBQVFRRUJBbG40WTBDVUVDNERKQndGamRpbUFtWG9Va0NZRUFDVEE1aDBIdk5sbG1YUFNFUUFDZG5icFFKNXpDTkJubHdBb0FDZ2NBWEE1S0FRRkhQcUdtSXVxNlNnYkNRd1FLYUZ5VHBxR201ZDIyYWltWnpEUWFacHJnbG9HbjZPTythV3BZZ2lhNnBnSVRNbnFGNG0rbXVZRHMzNEJxYTFqSHBBckY1WHltbWFjdjJyQnFiQmpMaUJyc1ZXSWl1eWJXREpiQmFyUHB1bXIvN1JTdUZydG01bGk2MFN0Mjc0SndMTGVMckZydUdrcVcrNFN3YUpyWjdUckluR3N1MitXR204Unp0TGJad1AzRmtHdHZ1LzJLNFFEQUVkcXI4QThnRnZ3b05jaXZFTURDMS9hc01NM0tHQnB4SkZPVERFTjgyTE04TVkxb09seHB4cUQ3TUsvSXkvNnA4a3YxSm55cVB5eTNFSzdMMThLcjh3cXVGenpwZXJpck1JRE8zZUtnS0c4QlBCQXpOM3RHZlNseE9xaXdBSitmcGVBb2tzUE9rREpzekJBTlFSWVkwZHcxWkVXUUs0c0Rtd05aN2ZjblF1Mm5RaWcvVW9BYW85WnFIY0JkTHgybWdNYzNFb0NLTC9aTTNkSzN6Mm8ySzZVM2VtbjNkRXN1TGhkajJMMHF6ZHZwL1BpZGhKK3lnRm1kN3B5ZDlwU0x1N21vc0Q5YlAvajFzWHRlWmR0aTJMNHMwMTNaL2ZwRUZ3NWRpWUt2TTdyM0VsRERidWRBRWlwU1FBTlhJenUzOXNwMFBmdWNQcHVpUUNaaDRzNGQxTWozeWNDb0VOQ2dPM29ScTZkNHRMRFd2MGkxNmY4ZlhZTUNOOTltdFRQWGtqNE5aTmUzZVRuRCt1QStvQ3d2M1ByM01FZi81Z0RORUIwSUFmQTNzaHcxNTJ2N2M5T0ExakFBZWhYQndVMG9IbEJJOTUyREhoQXR2a3ZEd1F3M2RxZWw3OEtMaXFCQzV5REE0KzNPTzFwUjM4ZXhKc0NHVWdHQlFSd2YrUExEZ3BUaUxjQ09PQi9MVHdBMER6b3Z2ZlJjRlFJYU1DcXZwQUFBZWlPaHZqalR2bCtPS29CUE9DR1dWQUFBd3hBUWc4U01IRVFaR0tmQVBERUlUWWhBUVE0Z0FHT3FFWC92NFVuZW1WODFRQVFVSUFDTk9BQVhnU0NGQnRRQVBPbGtYY01FRThBeUhoSFd5V3dqUUtBSXdFSTREWVdEREtNZEN3QUFPell4K2tWa200YWJDU3lCa0RKU2xyeWtwU1VwTEFXZ01QeFJGS1RvS1RjQTFqNEhRcUc4cFNMMDl0NUNKQkZWTHB5Wkhsc1QrMWVTY3VYTGVDUjZvRllMWGRac0ZIT0IzTzhET2EyQUJCRDl6eE5tTWkwRlFMaU9CL2dKZk9aa1RJQUtlSERnQ3BDazVjQWlDVi9IbmZOWi9vU1FGcnJaakNKU1NEUmlaT1dCZWlrZ0twNXpsTWlvSWYrY1dZN0pkbUFhUVpvbHZNc1l3RndtYUFEV0RPZnlNdG1oWmdIMFAzMURrTU9MS2owQUZEUERTbWdjd29WbkFIVW1hR0VSblJ0RXgwUjNGcDVVWUJseXRSRUR1Um9SN2ZWVUJVOTlKOGp0ZFVLWWVRQWxLWTBVZy9RcG93SXNNT1hwcXAzOW1TUkFoekFSNXUrNlFFaDdCRURndWRUdVNrdlNBR1lJaU1MQ2dBRDhCTklBZENoU0pIWjFLY2FhYWd1ZmVVQ0JHRFZKU1hBQVhVY3B3R0NxcWtFMEhHcVNEUUFWN0ZGQUFjOElLdlNXOEJZdS9xckFCQkFBR05jcXVjU3FGWUM1RFJlQkdDQUFPaUlBTDE2YkFBQUtNQURBa2xYbjBVQWpIY2RiQnNuaThuS1ZwYU5peFhBSVFsQVVjZDY5ck9nRGExb1IwdmEwcHIydEtoTnJXcFh5OXJXdXRZNElRQUFJZmtFQ1FRQUVRQXNBQUFBQUpRQ1pnRUFCZjlnSkk1a2FaNW9xcTVzNjc1d0xNOTBiZDk0cnU5ODcvL0FvSEJJTEJxUHlLUnl5V3c2bjlDb2RFcXRXcS9ZckhiTDdYcS80TEI0VEM2YnoraTBlczF1dTkvd3VIeE9yOXZ2K0x4K3orLzcvNENCZ29PRWhZYUhpSW1LaTR5TmpvK1FrWktUbEpXV2w1aVptcHVjblo2Zm9LR2lvNlNscHFlb3FhcXJySzJ1cjdDeHNyTzB0YmEzdUxtNnU3eTl2ci9Bd2NMRHhNWEd4OGpKeXN2TXpjN1AwTkhTMDlUVjF0ZlkyZHJiM04zZTMrRGg0dVBrNWVibjZPbnE2K3p0N3UvdzhmTHo5UFgyOS9qNSt2djgvZjcvQUFNS0hFaXdvTUdEQ0JNcVhNaXdvY09IRUNOS25FaXhvc1dMR0ROcTNNaXhvOGVQSUVPS0hFbXlwTW1US0ZQL3FsekpzcVhMbHpCanlweEpzNmJObXpoejZ0ekpzNmZQbjBDRENoMUt0S2pSbzBpVEtsM0t0S25UcDFDalNwMUt0YXJWcTFpemF0M0t0YXZYcjJERGloMUx0cXpaczJqVHFsM0x0cTNidDNEanlwMUx0NjdkdTNqejZ0M0x0Ni9mdjRBREN4NU11TERodzRnVEsxN011TEhqeDVBalM1NU11YkxseTVnemE5N011YlBuejZCRGl4NU51clRwMDZoVHExN051clhyMTdCank1NU51N2J0MjdoejY5N051N2Z2MzhDREN4OU92TGp4NDhpVEsxL092TG56NTlDalM1OU92YnIxNjlpemE5L092YnYzNytERGl4OVB2cno1OCtqVHExL1B2cjM3OS9Eank1OVB2Nzc5Ky9qejY5L1B2Ny8vL3dBR0tPQ0FCQlpvNElFSUpxamcvNElNTnVqZ2d4QkdLT0dFRkZabzRZVVlacWpoaGh4MjZPR0hJSVlvNG9na2xtamlpU2ltcU9LS0xMYm80b3N3eGlqampEVFdhT09OT09hbzQ0NDg5dWpqajBBR0tlU1FSQlpwNUpGSUpxbmtra3cyNmVRMUFRZ1F3Sk9DQ0RDQUFWUUNvZ0FBRUVCQVFKWitHTkFsQkF1QXlRY0JZM1lwZ0psNkZKQW1CQUFrd09ZZEI3elpaWmx6MGhFQUFuWjI2VUNlY3dqUVo1Y0FLQUFvSEFGd09TZ0VCUno2aHBpTHF1a29Hd2tNRUNtaGNrNmFocHVYZHRtb3BtY3cwR21hYTRKYUJwK2pqdm1scVdJSW11cVlDRXpKNmhlSnZwcm1BN04rQWFtdFl4NlFLeGVWOHBwbW5MOXF3YW13WXk0Z2E3RlZpSXJzbTFneVd3V3F6NmJwcS8rMFVyaGE3WnVaWXV0RXJkdStDY0N5M2k2eGE3aHBLbHZ1RXNHaWEyZTA2eUp4ckx0dmxocHZFYzdTMjJjRDl4WkJyYjd2OWl1RUF3QkhlcTNBUFlCYjhLQUhJNnhEQXd0ZjJyREROaWhnYWNRR1U0ekR2Qmd6ckhFTmFIYmM2Y1FmdS9DdnlJditXZklMZGFJOHFzb3JzOUN1eTVmQ0c3TUtMZE44cWJvM3EvQ0F6cDN5M1BNSmV3SjlLYkZEbjVDQW9rWVBDb0M5U1pOQWNOT1JQa0J1MUJHY1M3V2RDM1NMZFFBY2IvMG16RitmTEhhYUJSaUtkUVF6bnkwdUEydEhrTFBiZHFhOXRyWjB2emtBMlVOcm5YZXlYdmNjOXQ4UURQQ0EyajBIc0FEaGZRN1F3TlVsSzh4NG1naEF2ZkxTay9lSkFOOGZ0NTA1ckNSVFBQZi81K2tlQURuQ281TU9xd09uOTV1NjZvUWEwSHE4VThOdTU1V3JPbHk3N1hadUhuaThlUFBPdGVrQzd5Nzg3UVVRVC92eGx3NlFQT0xZdnM0ODF3M2t6cXowMDkvK2dBTy9tMHJBeGRtUDJqMm9tSWZmNmZqa0wyNytvZ040cS9qNmc3WmZydC93NDFtdThmQi91aTREVE9mZnJ3THFnNS9seWhVQStqRnZnT3ZDSC9OQ3Q2NEVCSEI2MWhOWUFjTVhRWVR4YjNxenU1Y0NCdmM1K2NYc0FQMGpIUUNHdGtIYjZhOW5GeVRkQ1JOblFMclpMR2tFNE9EWkVEZzBCanlRYmpSTW1nUE10clVLcmkxS2VmTmgzQ1o0TnZURlRRRXRGSmtINDVZQ0pEWnRpVXhzWWdOQzJESDdSWEVGQ25BQUZSZTJ3aXV1NEFBM0xGZ1h2YmlDZVFRMEFId0F5eUVaVXhBQUI0UXhYR3Bjb3dvVTBBQWVJb3VCY25SQkFneXdSVnNKTVk4d1lFQWRuL1ZIUU1ZZ0FRSjRZNlF5YUVnWkJPQUFmT3dVRkJ1NUF3VkFzbzhqcEtRUUZFQUFBUlFBZkdQVUpCQVN3QUFCd0UyVXFFeWxLbGZKeWxhNjhwV3dqS1VzWjBuTFd0cnlscmpNcFM2dEVRSUFJZmtFQ1FRQUVRQXNBQUFBQUpRQ1pnRUFCZjlnSkk1a2FaNW9xcTVzNjc1d0xNOTBiZDk0cnU5ODcvL0FvSEJJTEJxUHlLUnl5V3c2bjlDb2RFcXRXcS9ZckhiTDdYcS80TEI0VEM2YnoraTBlczF1dTkvd3VIeE9yOXZ2K0x4K3orLzcvNENCZ29PRWhZYUhpSW1LaTR5TmpvK1FrWktUbEpXV2w1aVptcHVjblo2Zm9LR2lvNlNscHFlb3FhcXJySzJ1cjdDeHNyTzB0YmEzdUxtNnU3eTl2ci9Bd2NMRHhNWEd4OGpKeXN2TXpjN1AwTkhTMDlUVjF0ZlkyZHJiM04zZTMrRGg0dVBrNWVibjZPbnE2K3p0N3UvdzhmTHo5UFgyOS9qNSt2djgvZjcvQUFNS0hFaXdvTUdEQ0JNcVhNaXdvY09IRUNOS25FaXhvc1dMR0ROcTNNaXhvOGVQSUVPS0hFbXlwTW1US0ZQL3FsekpzcVhMbHpCanlweEpzNmJObXpoejZ0ekpzNmZQbjBDRENoMUt0S2pSbzBpVEtsM0t0S25UcDFDalNwMUt0YXJWcTFpemF0M0t0YXZYcjJERGloMUx0cXpaczJqVHFsM0x0cTNidDNEanlwMUx0NjdkdTNqejZ0M0x0Ni9mdjRBREN4NU11TERodzRnVEsxN011TEhqeDVBalM1NU11YkxseTVnemE5N011YlBuejZCRGl4NU51clRwMDZoVHExN051clhyMTdCank1NU51N2J0MjdoejY5N051N2Z2MzhDREN4OU92TGp4NDhpVEsxL092TG56NTlDalM1OU92YnIxNjlpemE5L092YnYzNytERGl4OVB2cno1OCtqVHExL1B2cjM3OS9Eank1OVB2Nzc5Ky9qejY5L1B2Ny8vL3dBR0tPQ0FCQlpvNElFSUpxamcvNElNTnVqZ2d4QkdLT0dFRkZabzRZVVlacWpoaGh4MjZPR0hJSVlvNG9na2xtamlpU2ltcU9LS0xMYm80b3N3eGlqampEVFdhT09OT09hbzQ0NDg5dWpqajBBR0tlU1FSQlpwNUpGSUpxbmtra3cyNmVRMUFRZ1F3Sk9DQ0RCQUExUUNvZ0FBRUVCQVFKWitHTkFsQkF1QXlRY0JZM1lwZ0psNkZKQW1CQUFrd09ZZEI3elpaUUZ6MWhFQUFuYXFtZWNjQXZUWkpRQUsvQWxIQUZ3S1NxYWhiNGlwcUorTXJwSEFBSTkyT1VDaGthYmhacVZkbHBucEdReHdtaWFXbjViQnA2aGpmbG1xR0lHaU9pWUFVNjc2QmFLdXB2bUFyRjg0V3V1WUR1REt4YVM3cGptQW5MNW1zV213cjhaYWJCV2hJdnNtbnN0V2NhcXpvMFk3UmYrcjFLYnBxYlZQMEpydG1Bc295MjBUdW40YjdyaFBBUHN0QkFXSWkrNFN4Mlpyd0x0UE5QdnR2UFE2TVMyMStPYkxoQVByOXV1dkV0N3lPM0FURGR4N01CTUtVRXB0cnd2RG0rMEJFUytCSnJVVVY2ekV2cnRtckRFU2RUcnI4Y2RIcU5zeHlVdUU3Q29BSTZPTXhBTXJFK3N5d1J3TEd1Zk1UU1NRcUtJMzQ5eUV5bjMyN0RQQ05zczhkQk1MMkNuMDBVMXNxUzJtVEtmcjhMbFJSd0V3MVZWSFFZQzdXWGZ0OWRkZ2h5MzIyR1NYYmZiWmFLZXQ5dHBzdCszMjIzREhMZmZjZE5kdDk5MTQ1NjMzM256MzdmZmZnQWN1K09DRUYyNzQ0WWducnZqaWpEZnUrT09RUnk3NTVKUlhidm5sbUdldStlYWNkKzc1NTZDSEx2b0k2S1NYYmpvd0lRQUFPdz09XCIsIGwkID0gKHsgc2l6ZTogZSB9KSA9PiB7XG4gIGNvbnN0IHQgPSAoKSA9PiB7XG4gICAgc3dpdGNoIChlKSB7XG4gICAgICBjYXNlIFwic21cIjpcbiAgICAgICAgcmV0dXJuIFpjO1xuICAgICAgY2FzZSBcImxnXCI6XG4gICAgICAgIHJldHVybiBrSjtcbiAgICAgIGNhc2UgXCJ4bFwiOlxuICAgICAgICByZXR1cm4gTko7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm4gWmM7XG4gICAgfVxuICB9O1xuICByZXR1cm4gLyogQF9fUFVSRV9fICovIGMoXCJkaXZcIiwgeyBjbGFzc05hbWU6IGBzcGlubmVyIHNwaW5uZXItJHtlfWAsIGNoaWxkcmVuOiAvKiBAX19QVVJFX18gKi8gYyhcImltZ1wiLCB7IHNyYzogdCgpLCBhbHQ6IGAke2V9IHNwaW5uZXJgIH0pIH0pO1xufSwgazUgPSAkLmRpdihcbiAgKHsgdGhlbWU6IGUsIGlzRG9uZTogdCwgaXNBY3RpdmU6IG8sIGlzRXJyb3I6IG4sIGlzV2FybmluZzogciB9KSA9PiB7XG4gICAgY29uc3Qge1xuICAgICAgY29sb3JzOiBpLFxuICAgICAgYm9yZGVyUmFkaXVzOiBhLFxuICAgICAgdHlwb2dyYXBoeTogcyxcbiAgICAgIGxpbmVIZWlnaHQ6IGwsXG4gICAgICB0cmFuc2l0aW9uczogcCxcbiAgICAgIGl0ZW1TaXplOiBkXG4gICAgfSA9IGU7XG4gICAgcmV0dXJuIG8xYFxuICAgICAgZGlzcGxheTogZmxleDtcbiAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcbiAgICAgIG1pbi13aWR0aDogJHtkLnNtfTtcbiAgICAgIHdpZHRoOiAke2Quc219O1xuICAgICAgaGVpZ2h0OiAke2Quc219O1xuICAgICAgYm9yZGVyLXJhZGl1czogJHthLmNpcmNsZX07XG4gICAgICBiYWNrZ3JvdW5kOiAke2kuYmFja2dyb3VuZHMuYmdQcmltYXJ5fTtcbiAgICAgIGJvcmRlcjogMXB4IHNvbGlkICR7aS5ib3JkZXIuYm9yZGVyUHJpbWFyeX07XG4gICAgICBmb250LXNpemU6ICR7cy50MTR9O1xuICAgICAgbGluZS1oZWlnaHQ6ICR7bC5saDI0fTtcbiAgICAgIGNvbG9yOiAke2kudGV4dEljb24udGV4dFByaW1hcnl9O1xuICAgICAgdGV4dC1hbGlnbjogbGVmdDtcbiAgICAgIG92ZXJmbG93OiBoaWRkZW47XG5cbiAgICAgICR7dCAmJiBvMWBcbiAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogJHtpLmJhY2tncm91bmRzLmJnU3VjY2Vzc1ByaW1hcnl9O1xuICAgICAgICBib3JkZXI6IDFweCBzb2xpZCB0cmFuc3BhcmVudDtcbiAgICAgICAgdHJhbnNpdGlvbjogJHtwLmJhc2V9O1xuICAgICAgICBjb2xvcjogJHtpLnRleHRJY29uLnRleHRUZXJ0aWFyeX07XG4gICAgICBgfTtcblxuICAgICAgJHtvICYmIG8xYFxuICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAke2kuYmFja2dyb3VuZHMuYmdUZXJ0aWFyeX07XG4gICAgICAgIGJvcmRlcjogMXB4IHNvbGlkIHRyYW5zcGFyZW50O1xuICAgICAgICB0cmFuc2l0aW9uOiAke3AuYmFzZX07XG4gICAgICAgIGNvbG9yOiAke2kudGV4dEljb24udGV4dFRlcnRpYXJ5fTtcbiAgICAgIGB9O1xuICAgICAgJHtuICYmIG8xYFxuICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAke2kuYmFja2dyb3VuZHMuYmdFcnJvclByaW1hcnl9O1xuICAgICAgICBib3JkZXI6IDFweCBzb2xpZCB0cmFuc3BhcmVudDtcbiAgICAgICAgdHJhbnNpdGlvbjogJHtwLmJhc2V9O1xuICAgICAgICBjb2xvcjogJHtpLnRleHRJY29uLnRleHRUZXJ0aWFyeX07XG4gICAgICBgfTtcbiAgICAgICR7ciAmJiBvMWBcbiAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogJHtpLmJhY2tncm91bmRzLmJnV2FybmluZ1ByaW1hcnl9O1xuICAgICAgICBib3JkZXI6IDFweCBzb2xpZCB0cmFuc3BhcmVudDtcbiAgICAgICAgdHJhbnNpdGlvbjogJHtwLmJhc2V9O1xuICAgICAgICBjb2xvcjogJHtpLnRleHRJY29uLnRleHRUZXJ0aWFyeX07XG4gICAgICBgfTtcbiAgICBgO1xuICB9XG4pLCBtcyA9ICQoZDYpKFxuICAoe1xuICAgIHRoZW1lOiB7IGNvbG9yczogZSwgdHJhbnNpdGlvbnM6IHQgfSxcbiAgICBpc0FjdGl2ZTogbyxcbiAgICBpc0RvbmU6IG4sXG4gICAgaXNDbGlja2FibGU6IHIsXG4gICAgb3JpZW50YXRpb246IGksXG4gICAgaXNFcnJvcjogYVxuICB9KSA9PiB7XG4gICAgY29uc3QgcyA9IG8xYFxuICAgICAgJHtrNX0ge1xuICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAke2UuYmFja2dyb3VuZHMuYmdUZXJ0aWFyeX07XG4gICAgICAgIHRyYW5zaXRpb246ICR7dC5iYXNlfTtcbiAgICAgICAgY29sb3I6ICR7ZS50ZXh0SWNvbi50ZXh0VGVydGlhcnl9O1xuICAgICAgfVxuICAgIGA7XG4gICAgcmV0dXJuIG8xYFxuICAgICAgZGlzcGxheTogZmxleDtcbiAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gICAgICBqdXN0aWZ5LWNvbnRlbnQ6ICR7KCgpID0+IChpID09PSBIMi5WRVJUSUNBTCwgXCJzcGFjZS1iZXR3ZWVuXCIpKSgpfTtcbiAgICAgIHdpZHRoOiAxMDAlO1xuICAgICAgbWluLXdpZHRoOiBhdXRvO1xuICAgICAgZ2FwOiA4cHg7XG5cbiAgICAgICR7RDR9IHtcbiAgICAgICAgZmxleC1ncm93OiAxO1xuICAgICAgICAke28gJiYgbzFgXG4gICAgICAgICAgY29sb3I6ICR7ZS50ZXh0SWNvbi50ZXh0U2Vjb25kYXJ5fTtcbiAgICAgICAgYH1cbiAgICAgIH1cblxuICAgICAgLyogJHtWMn0ge1xuICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAke2UuYmx1ZX07XG4gICAgICB9ICovXG5cbiAgICAgICR7IXIgJiYgbzFgXG4gICAgICAgIGN1cnNvcjogZGVmYXVsdDtcbiAgICAgIGB9XG5cbiAgICAgICY6YWN0aXZlIHtcbiAgICAgICAgJHtzfTtcbiAgICAgIH1cbiAgICAgICR7byAmJiBzfVxuXG4gICAgICAmOmRpc2FibGVkIHtcbiAgICAgICAgJHtrNX0ge1xuICAgICAgICAgIGJhY2tncm91bmQtY29sb3I6ICR7ZS5iYWNrZ3JvdW5kcy5iZ0Rpc2FibGVkUHJpbWFyeX07XG4gICAgICAgICAgYm9yZGVyOiAxcHggc29saWQgJHtlLmJhY2tncm91bmRzLmJnRGlzYWJsZWRQcmltYXJ5fTtcbiAgICAgICAgICBjb2xvcjogJHtlLnRleHRJY29uLnRleHRUZXJ0aWFyeX07XG4gICAgICAgIH1cbiAgICAgICAgJHtENH0ge1xuICAgICAgICAgIGNvbG9yOiAke2UudGV4dEljb24udGV4dERpc2FibGVkTm9iZ307XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgJHshbyAmJiAhbiAmJiBvMWBcbiAgICAgICAgJjpub3QoOmRpc2FibGVkKSB7XG4gICAgICAgICAgJjpob3ZlciB7XG4gICAgICAgICAgICBiYWNrZ3JvdW5kOiAke2UuYmFja2dyb3VuZHMuYmdIb3ZlclByaW1hcnl9ICFpbXBvcnRhbnQ7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICBgfVxuICAgICAgJHthICYmIG8xYFxuICAgICAgICBjb2xvcjogJHtlLnRleHRJY29uLnRleHRFcnJvcn07XG4gICAgICBgfTtcblxuICAgICAgJHtuICYmICFyICYmIG8xYFxuICAgICAgICBwb2ludGVyLWV2ZW50czogbm9uZTtcbiAgICAgICAgY29sb3I6ICR7ZS50ZXh0SWNvbi50ZXh0UHJpbWFyeX07XG4gICAgICBgfVxuXG4gICAgICAmOmFmdGVyIHtcbiAgICAgICAgZGlzcGxheTogbm9uZSAhaW1wb3J0YW50O1xuICAgICAgfVxuXG4gICAgICAke28gJiYgbzFgXG4gICAgICAgICY6OmFmdGVyIHtcbiAgICAgICAgICBkaXNwbGF5OiBub25lO1xuICAgICAgICB9XG4gICAgICBgfVxuICAgIGA7XG4gIH1cbiksIEQ0ID0gJC5zcGFuKFxuICAoeyB0aGVtZTogeyBjb2xvcnM6IGUgfSwgaXNEb25lOiB0LCBpc0FjdGl2ZTogbywgaXNFcnJvcjogbiwgaXNXYXJuaW5nOiByIH0pID0+IG8xYFxuICAgICAgJHt0ICYmIG8xYFxuICAgICAgICBjb2xvcjogJHtlLnRleHRJY29uLnRleHRQcmltYXJ5fTtcbiAgICAgIGB9O1xuICAgICAgJHtvICYmIG8xYFxuICAgICAgICBjb2xvcjogJHtlLmJhY2tncm91bmRzLmJnVGVydGlhcnl9O1xuICAgICAgYH07XG4gICAgICAke24gJiYgbzFgXG4gICAgICAgIGNvbG9yOiAke2UuYmFja2dyb3VuZHMuYmdFcnJvclByaW1hcnl9O1xuICAgICAgYH07XG4gICAgICAke3IgJiYgbzFgXG4gICAgICAgIGNvbG9yOiAke2UuYmFja2dyb3VuZHMuYmdXYXJuaW5nUHJpbWFyeX07XG4gICAgICBgfTtcbiAgICBgXG4pLCBMcyA9ICQuZGl2YFxuICAkeyhlKSA9PiBlLm9yaWVudGF0aW9uID09PSBcImhvcml6b250YWxcIiAmJiBvMWBcbiAgICAgIGhlaWdodDogMXB4O1xuICAgICAgd2lkdGg6IDEwMCU7XG4gICAgICBiYWNrZ3JvdW5kOiAjZTllOWVhO1xuICAgIGB9XG4gICR7KGUpID0+IGUub3JpZW50YXRpb24gPT09IFwidmVydGljYWxcIiAmJiBvMWBcbiAgICAgIHdpZHRoOiAxcHg7XG4gICAgICBoZWlnaHQ6IDEycHg7XG4gICAgICBiYWNrZ3JvdW5kOiAjZTllOWVhO1xuICAgICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgICAgbWFyZ2luLXRvcDogLTE4cHg7XG4gICAgICBtYXJnaW4tbGVmdDogMjRweDtcbiAgICBgfVxuYDtcbmZ1bmN0aW9uIFRKKGUsIHQpIHtcbiAgY29uc3Qge1xuICAgIGlzRGlzYWJsZWQ6IG8sXG4gICAgaXNEb25lOiBuLFxuICAgIHRpdGxlOiByLFxuICAgIG51bWJlcjogaSxcbiAgICBvbkNsaWNrOiBhLFxuICAgIGJhZGdlQ291bnQ6IHMsXG4gICAgaXNBY3RpdmU6IGwsXG4gICAgaXNFcnJvcjogcCxcbiAgICBpc1dhcm5pbmc6IGQsXG4gICAgLi4uYlxuICB9ID0gZTtcbiAgcmV0dXJuIC8qIEBfX1BVUkVfXyAqLyBlMShzMCwgeyBjaGlsZHJlbjogW1xuICAgIC8qIEBfX1BVUkVfXyAqLyBlMShcbiAgICAgIG1zLFxuICAgICAge1xuICAgICAgICBpc0RvbmU6IG4sXG4gICAgICAgIGRpc2FibGVkOiBvLFxuICAgICAgICBpc0NsaWNrYWJsZTogISFhLFxuICAgICAgICBvbkNsaWNrOiBhLFxuICAgICAgICByZWY6IHQsXG4gICAgICAgIGlzQWN0aXZlOiBsLFxuICAgICAgICBpc0Vycm9yOiBwLFxuICAgICAgICAuLi5iLFxuICAgICAgICBjaGlsZHJlbjogW1xuICAgICAgICAgIC8qIEBfX1BVUkVfXyAqLyBjKFxuICAgICAgICAgICAgazUsXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIGlzRG9uZTogbixcbiAgICAgICAgICAgICAgaXNBY3RpdmU6IGwsXG4gICAgICAgICAgICAgIGlzRXJyb3I6IHAsXG4gICAgICAgICAgICAgIGlzV2FybmluZzogZCxcbiAgICAgICAgICAgICAgY2hpbGRyZW46IG4gPyAvKiBAX19QVVJFX18gKi8gYyhaMSwgeyBuYW1lOiBcIkNoZWNrTWFya1wiLCBzaXplOiBcInh4eHhzXCIgfSkgOiBpXG4gICAgICAgICAgICB9XG4gICAgICAgICAgKSxcbiAgICAgICAgICAvKiBAX19QVVJFX18gKi8gYyhcbiAgICAgICAgICAgIEQ0LFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICBpc0RvbmU6IG4sXG4gICAgICAgICAgICAgIGlzQWN0aXZlOiBsLFxuICAgICAgICAgICAgICBpc0Vycm9yOiBwLFxuICAgICAgICAgICAgICBpc1dhcm5pbmc6IGQsXG4gICAgICAgICAgICAgIGNoaWxkcmVuOiByXG4gICAgICAgICAgICB9XG4gICAgICAgICAgKSxcbiAgICAgICAgICBzICYmIC8qIEBfX1BVUkVfXyAqLyBjKEFlLCB7IGNvdW50OiBzIH0pXG4gICAgICAgIF1cbiAgICAgIH1cbiAgICApLFxuICAgIC8qIEBfX1BVUkVfXyAqLyBjKExzLCB7IG9yaWVudGF0aW9uOiBlLm9yaWVudGF0aW9uIH0pXG4gIF0gfSk7XG59XG5jb25zdCBJSiA9IEIwKFRKKSwgSDQgPSB7XG4gIE9SREVSRUQ6IFwib3JkZXJlZFwiLFxuICBVTk9SREVSRUQ6IFwidW5vcmRlcmVkXCJcbn07XG5mdW5jdGlvbiBKTShlKSB7XG4gIGNvbnN0IHtcbiAgICBzdGVwczogdCxcbiAgICBjdXJyZW50U3RlcDogbyA9IDAsXG4gICAgb3JpZW50YXRpb246IG4sXG4gICAgdHlwZTogciA9IEg0Lk9SREVSRUQsXG4gICAgY29tcGxldGVkU3RlcHM6IGkgPSBbXVxuICB9ID0gZSwgW2EsIHNdID0gVDEobyk7XG4gIHJldHVybiAvKiBAX19QVVJFX18gKi8gYyhzMCwgeyBjaGlsZHJlbjogKCgpID0+IHQubWFwKChwLCBkKSA9PiB7XG4gICAgY29uc3QgeyB0aXRsZTogYiwgaXNEaXNhYmxlZDogTSwgYmFkZ2VDb3VudDogdSwgaXNXYXJuaW5nOiBBLCBpc0Vycm9yOiB6IH0gPSBwLCBmID0ge1xuICAgICAgaXNEaXNhYmxlZDogTSxcbiAgICAgIGlzQWN0aXZlOiBhID09PSBkLFxuICAgICAgaXNEb25lOiBpLmluY2x1ZGVzKGQpLFxuICAgICAgaXNXYXJuaW5nOiBBLFxuICAgICAgaXNFcnJvcjogeixcbiAgICAgIHRpdGxlOiBiLFxuICAgICAgbnVtYmVyOiBkICsgMSxcbiAgICAgIG9yaWVudGF0aW9uOiBuLFxuICAgICAgYmFkZ2VDb3VudDogdVxuICAgIH07XG4gICAgaWYgKHIgPT09IEg0Lk9SREVSRUQpIHtcbiAgICAgIGNvbnN0IE8gPSBvID09PSBkLCBoID0gbyA+IGQ7XG4gICAgICBmLmlzRG9uZSA9IGgsIGYuaXNBY3RpdmUgPSBPLCBmLmlzRGlzYWJsZWQgPSAhTyAmJiAhaDtcbiAgICB9IGVsc2VcbiAgICAgIGYub25DbGljayA9ICgpID0+IHMoZCk7XG4gICAgcmV0dXJuIC8qIEBfX1BVUkVfXyAqLyBjZShJSiwgeyAuLi5mLCBrZXk6IGIsIGJhZGdlQ291bnQ6IHUgfSk7XG4gIH0pKSgpIH0pO1xufVxuY29uc3QgREogPSAkLmRpdihcbiAgKHsgdGhlbWU6IHsgY29sb3JzOiBlLCBib3JkZXJSYWRpdXM6IHQsIHNwYWNpbmdzOiBvLCBtaXhpbnM6IG4gfSB9KSA9PiBvMWBcbiAgICAgIHdpZHRoOiAyOTRweDtcbiAgICAgIG1heC13aWR0aDogMTAwJTtcbiAgICAgIHBhZGRpbmc6IDAgJHtvLnNwNH0gMCAke28uc3A0fTtcbiAgICAgIGJvcmRlcjogJHtvLnNwMjR9IHNvbGlkICR7ZS5iYWNrZ3JvdW5kcy5iZ1ByaW1hcnl9O1xuICAgICAgYm9yZGVyLXdpZHRoOiAke28uc3AyNH0gMDtcbiAgICAgIGJhY2tncm91bmQtY29sb3I6ICR7ZS5iYWNrZ3JvdW5kcy5iZ1ByaW1hcnl9O1xuICAgICAgYm9yZGVyLXJhZGl1czogJHt0LmJhc2V9O1xuICAgICAgcG9zaXRpb246IHJlbGF0aXZlO1xuICAgICAgJHttc30ge1xuICAgICAgICBtYXJnaW4tYm90dG9tOiAyMnB4O1xuXG4gICAgICAgICY6bGFzdC1jaGlsZCB7XG4gICAgICAgICAgbWFyZ2luLWJvdHRvbTogMDtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICAke0Q0fSB7XG4gICAgICAgICR7bi5lbGxpcHNpc31cbiAgICAgICAgdGV4dC1hbGlnbjogbGVmdDtcbiAgICAgIH1cbiAgICAgICR7THN9IHtcbiAgICAgICAgJjpsYXN0LWNoaWxkIHtcbiAgICAgICAgICBkaXNwbGF5OiBub25lO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgYFxuKTtcbmZ1bmN0aW9uIEhKKGUsIHQpIHtcbiAgY29uc3Qge1xuICAgIHR5cGU6IG8gPSBINC5PUkRFUkVELFxuICAgIG9yaWVudGF0aW9uOiBuID0gSDIuVkVSVElDQUwsXG4gICAgLi4uclxuICB9ID0gZTtcbiAgcmV0dXJuIC8qIEBfX1BVUkVfXyAqLyBjKERKLCB7IHJlZjogdCwgLi4uciwgY2hpbGRyZW46IC8qIEBfX1BVUkVfXyAqLyBjKEpNLCB7IHR5cGU6IG8sIG9yaWVudGF0aW9uOiBuLCAuLi5yIH0pIH0pO1xufVxuY29uc3QgVkogPSBCMChISik7XG4kLmRpdmBcbiAgd2lkdGg6IDEwMCU7XG4gIGhlaWdodDogMTAwJTtcbmA7XG5jb25zdCBQSiA9ICQuZGl2KFxuICAoeyB0aGVtZTogeyBjb2xvcnM6IGUsIGJvcmRlclJhZGl1czogdCwgc3BhY2luZ3M6IG8gfSB9KSA9PiBvMWBcbiAgICBwYWRkaW5nOiAke28uc3AxNn07XG4gICAgYmFja2dyb3VuZC1jb2xvcjogJHtlLmJhY2tncm91bmRzLmJnUHJpbWFyeX07XG4gICAgYm9yZGVyLXJhZGl1czogJHt0LmJhc2V9O1xuICAgIHdpZHRoOiAxMDAlO1xuXG4gICAgLnNjcm9sbGJhci1jb250YWluZXIge1xuICAgICAgbWFyZ2luLWJvdHRvbTogLSR7by5zcDE2fTtcbiAgICAgIHBhZGRpbmctYm90dG9tOiAke28uc3AxNn07XG4gICAgfVxuICBgXG4pLCBGSiA9ICQuZGl2YFxuICBkaXNwbGF5OiBmbGV4O1xuICBqdXN0aWZ5LWNvbnRlbnQ6IGZsZXgtc3RhcnQ7XG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gIHdpZHRoOiAxMDAlO1xuXG4gICR7bXN9IHtcbiAgICAmOmxhc3QtY2hpbGQge1xuICAgICAgbWFyZ2luLXJpZ2h0OiAwO1xuICAgIH1cbiAgfVxuICAke0xzfSB7XG4gICAgJjpsYXN0LWNoaWxkIHtcbiAgICAgIGRpc3BsYXk6IG5vbmU7XG4gICAgfVxuICB9XG5gO1xuZnVuY3Rpb24gWEooZSwgdCkge1xuICBjb25zdCB7XG4gICAgb3JpZW50YXRpb246IG8gPSBIMi5IT1JJWk9OVEFMLFxuICAgIHR5cGU6IG4gPSBINC5PUkRFUkVELFxuICAgIC4uLnJcbiAgfSA9IGU7XG4gIHJldHVybiAvKiBAX19QVVJFX18gKi8gYyhQSiwgeyBjaGlsZHJlbjogLyogQF9fUFVSRV9fICovIGMoRkosIHsgcmVmOiB0LCAuLi5yLCBjaGlsZHJlbjogLyogQF9fUFVSRV9fICovIGMoSk0sIHsgdHlwZTogbiwgb3JpZW50YXRpb246IG8sIC4uLnIgfSkgfSkgfSk7XG59XG5jb25zdCBVSiA9IEIwKFhKKTtcbmZ1bmN0aW9uIFlKKGUsIHQpIHtcbiAgY29uc3QgeyBvcmllbnRhdGlvbjogbyA9IEgyLkhPUklaT05UQUwsIC4uLm4gfSA9IGU7XG4gIHJldHVybiBvID09PSBIMi5WRVJUSUNBTCA/IC8qIEBfX1BVUkVfXyAqLyBjKFZKLCB7IHJlZjogdCwgLi4ubiB9KSA6IC8qIEBfX1BVUkVfXyAqLyBjKFVKLCB7IHJlZjogdCwgLi4ubiB9KTtcbn1cbmNvbnN0IHAkID0gQjAoWUopLCBHSiA9IChlKSA9PiB7XG4gIGNvbnN0IHsgb3JpZW50YXRpb246IHQgPSBIMi5IT1JJWk9OVEFMIH0gPSBlO1xuICByZXR1cm4gdCA9PT0gSDIuVkVSVElDQUwgPyAvKiBAX19QVVJFX18gKi8gYyhVcCwgeyAuLi5lIH0pIDogLyogQF9fUFVSRV9fICovIGMoWE0sIHsgLi4uZSB9KTtcbn0sIE41ID0gJC5kaXYoXG4gICh7XG4gICAgdGhlbWU6IHsgY29sb3JzOiBlLCB0cmFuc2l0aW9uczogdCwgc2hhZG93czogbywgc3BhY2luZ3M6IG4gfSxcbiAgICBpc0FjdGl2ZTogcixcbiAgICBpc0Rpc2FibGVkOiBpXG4gIH0pID0+IHtcbiAgICBjb25zdCBhID0gZS53aGl0ZTtcbiAgICByZXR1cm4gbzFgXG4gICAgICBwb3NpdGlvbjogcmVsYXRpdmU7XG5cbiAgICAgICR7VDN9IHtcbiAgICAgICAgcGFkZGluZy1yaWdodDogJHtuLnNwOH07XG4gICAgICAgIGJvcmRlci1ib3R0b20tbGVmdC1yYWRpdXM6IDA7XG4gICAgICAgIGJhY2tncm91bmQ6ICR7ciA/IGEgOiBlLndoaXNwZXJ9O1xuICAgICAgICBib3gtc2hhZG93OiAke28ubWR9O1xuICAgICAgICB6LWluZGV4OiAxO1xuXG4gICAgICAgICY6YWZ0ZXIge1xuICAgICAgICAgIGRpc3BsYXk6IG5vbmU7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgJHtZb30ge1xuICAgICAgICB0cmFuc2l0aW9uOiAke3QuYmFzZX07XG4gICAgICAgIGZpbGw6ICR7ciA/IGEgOiBlLndoaXNwZXJ9O1xuICAgICAgfVxuXG4gICAgICAmOmhvdmVyIHtcbiAgICAgICAgJHtUM30ge1xuICAgICAgICAgIGJhY2tncm91bmQ6ICR7ciA/IGEgOiBlLmJhY2tncm91bmRzLmdob3N0V2hpdGV9O1xuICAgICAgICB9XG5cbiAgICAgICAgJHtZb30ge1xuICAgICAgICAgIGZpbGw6ICR7ciA/IGEgOiBlLmJhY2tncm91bmRzLmdob3N0V2hpdGV9O1xuICAgICAgICAgIHRyYW5zaXRpb246ICR7dC5iYXNlfTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICAmOmFjdGl2ZSB7XG4gICAgICAgICR7VDN9IHtcbiAgICAgICAgICBiYWNrZ3JvdW5kOiAke2F9O1xuICAgICAgICB9XG5cbiAgICAgICAgJHtZb30ge1xuICAgICAgICAgIGZpbGw6ICR7YX07XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgJHtpICYmIG8xYFxuICAgICAgICAmLFxuICAgICAgICAmOmhvdmVyIHtcbiAgICAgICAgICAke1QzfSB7XG4gICAgICAgICAgICBiYWNrZ3JvdW5kOiAke2Uud2hpc3Blcn07XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgJHtZb30ge1xuICAgICAgICAgICAgZmlsbDogJHtlLndoaXNwZXJ9O1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgYH1cblxuICAgICAgJHtyICYmIG8xYFxuICAgICAgICAmIHtcbiAgICAgICAgICB6LWluZGV4OiA5OTkgIWltcG9ydGFudDtcbiAgICAgICAgfVxuICAgICAgYH1cbiAgICBgO1xuICB9XG4pLCBRSiA9ICQuc3ZnYFxuICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gIHRvcDogMDtcbiAgd2lkdGg6IDI0cHg7XG4gIGhlaWdodDogJHsoeyB0aGVtZTogZSB9KSA9PiBlLkdMT0JBTF9JVEVNX0hFSUdIVF9DT05ERU5TRUR9O1xuICByaWdodDogLTIwcHg7XG4gIHotaW5kZXg6IDI7XG4gIHBvaW50ZXItZXZlbnRzOiBub25lO1xuYCwgWW8gPSAkLnBhdGhgXG4gIGZpbGw6IHRyYW5zcGFyZW50O1xuYCwgWkogPSAoZSkgPT4ge1xuICBjb25zdCB7IGlzRGlzYWJsZWQ6IHQsIGlzQWN0aXZlOiBvLCBzdHlsZTogbiwgLi4uciB9ID0gZTtcbiAgcmV0dXJuIC8qIEBfX1BVUkVfXyAqLyBlMShONSwgeyBpc0Rpc2FibGVkOiB0LCBpc0FjdGl2ZTogbywgc3R5bGU6IG4sIGNoaWxkcmVuOiBbXG4gICAgLyogQF9fUFVSRV9fICovIGMoTTYsIHsgaXNEaXNhYmxlZDogdCwgaXNBY3RpdmU6IG8sIC4uLnIgfSksXG4gICAgLyogQF9fUFVSRV9fICovIGMoUUosIHsgY2hpbGRyZW46IC8qIEBfX1BVUkVfXyAqLyBjKFlvLCB7IGQ6IFwiTTAgNDBIMjRDMjQgNDAgMTYuNjc2NSAzOS43NDI2IDEyIDMwQzYuMDk1NjUgMTcuNjk5MyA0LjU0ODk3IDkuMDI5MjggNC4xNDM4MSAzLjk5MTQ5QzMuOTY2NzEgMS43ODk0NyAyLjIwOTEzIDEuMzI3MjNlLTA1IDAgMFY0MFpcIiB9KSB9KVxuICBdIH0pO1xufSwgakogPSAkLmRpdmBcbiAgcGFkZGluZzogMCAycmVtIDAgMDtcblxuICAke041fSB7XG4gICAgJiArICR7TjV9IHtcbiAgICAgIG1hcmdpbi1sZWZ0OiAwLjEyNXJlbTtcbiAgICB9XG4gIH1cbmAsIGQkID0gKGUpID0+IC8qIEBfX1BVUkVfXyAqLyBjKGpKLCB7IGNoaWxkcmVuOiAvKiBAX19QVVJFX18gKi8gYyhcbiAgR0osXG4gIHtcbiAgICAuLi5lLFxuICAgIG9yaWVudGF0aW9uOiBcImhvcml6b250YWxcIixcbiAgICBpc1pJbmRleFJldmVyc2U6ICEwLFxuICAgIGlzVGFibGVUYWI6ICEwLFxuICAgIGN1c3RvbVRhYjogKHQpID0+IC8qIEBfX1BVUkVfXyAqLyBjKFpKLCB7IC4uLnQgfSlcbiAgfVxuKSB9KTtcbnZhciBJZSA9IC8qIEBfX1BVUkVfXyAqLyAoKGUpID0+IChlLklORk8gPSBcImluZm9cIiwgZS5TVUNDRVNTID0gXCJzdWNjZXNzXCIsIGUuRVJST1IgPSBcImVycm9yXCIsIGUuV0FSTklORyA9IFwid2FybmluZ1wiLCBlKSkoSWUgfHwge30pLCB0NCA9IC8qIEBfX1BVUkVfXyAqLyAoKGUpID0+IChlLkNST1NTID0gXCJjcm9zc1wiLCBlLkFSUk9XID0gXCJhcnJvd1wiLCBlLlRFWFQgPSBcInRleHRcIiwgZSkpKHQ0IHx8IHt9KTtcbmNvbnN0IEtKID0gJC5kaXYoXG4gICh7XG4gICAgdGhlbWU6IHsgY29sb3JzOiBlLCB0eXBvZ3JhcGh5OiB0LCBsaW5lSGVpZ2h0OiBvLCBib3JkZXJSYWRpdXM6IG4sIG1peGluczogciwgc3BhY2luZ3M6IGkgfSxcbiAgICB0eXBlOiBhXG4gIH0pID0+IHtcbiAgICBsZXQgcywgbCwgcDtcbiAgICBzd2l0Y2ggKGEpIHtcbiAgICAgIGNhc2UgSWUuU1VDQ0VTUzpcbiAgICAgICAgcyA9IGUudGV4dEljb24udGV4dFRlcnRpYXJ5LCBsID0gZS5iYWNrZ3JvdW5kcy5iZ1N1Y2Nlc3NQcmltYXJ5LCBwID0gZS50ZXh0SWNvbi50ZXh0VGVydGlhcnk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBJZS5XQVJOSU5HOlxuICAgICAgICBzID0gZS50ZXh0SWNvbi50ZXh0QWxlcnRUZXJ0aWFyeSwgbCA9IGUuYmFja2dyb3VuZHMuYmdXYXJuaW5nUHJpbWFyeSwgcCA9IGUudGV4dEljb24udGV4dEFsZXJ0VGVydGlhcnk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBJZS5FUlJPUjpcbiAgICAgICAgcyA9IGUudGV4dEljb24udGV4dFRlcnRpYXJ5LCBsID0gZS5iYWNrZ3JvdW5kcy5iZ0Vycm9yUHJpbWFyeSwgcCA9IGUudGV4dEljb24udGV4dFRlcnRpYXJ5O1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgSWUuSU5GTzpcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHMgPSBlLnRleHRJY29uLnRleHRUZXJ0aWFyeSwgbCA9IGUuYmFja2dyb3VuZHMuYmdJbmZvcm1hdGlvbmFsUHJpbWFyeSwgcCA9IGUudGV4dEljb24udGV4dFRlcnRpYXJ5O1xuICAgIH1cbiAgICByZXR1cm4gbzFgXG4gICAgICBkaXNwbGF5OiBmbGV4O1xuICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgICAgIGp1c3RpZnktY29udGVudDogc3BhY2UtYmV0d2VlbjtcbiAgICAgIHdpZHRoOiA1MzZweDtcbiAgICAgIG1heC13aWR0aDogMTAwJTtcbiAgICAgIHBhZGRpbmc6ICR7aS5zcDR9ICR7aS5zcDh9O1xuICAgICAgbWFyZ2luLWJvdHRvbTogJHtpLnNwMTZ9O1xuICAgICAgYmFja2dyb3VuZC1jb2xvcjogJHtsfTtcbiAgICAgIGJvcmRlci1yYWRpdXM6ICR7bi5iYXNlfTtcbiAgICAgIGNvbG9yOiAke3N9O1xuICAgICAgZm9udC1zaXplOiAke3QudDEyfTtcbiAgICAgIGxpbmUtaGVpZ2h0OiAke28ubGgyMn07XG5cbiAgICAgIGJ1dHRvbiB7XG4gICAgICAgIG1heC13aWR0aDogMTByZW07XG4gICAgICAgIGZvbnQtc2l6ZTogJHt0LnQxMn07XG4gICAgICAgIGNvbG9yOiAke3B9O1xuICAgICAgICAke3IuZWxsaXBzaXN9XG4gICAgICAgICY6bm90KDpkaXNhYmxlZCkge1xuICAgICAgICAgIGJhY2tncm91bmQtY29sb3I6IHRyYW5zcGFyZW50O1xuICAgICAgICAgIGJveC1zaGFkb3c6IG5vbmU7XG4gICAgICAgICAgJjpob3ZlcixcbiAgICAgICAgICAmOmFjdGl2ZSxcbiAgICAgICAgICAmOmZvY3VzIHtcbiAgICAgICAgICAgIGJhY2tncm91bmQtY29sb3I6ICR7ZS5hY3Rpb25CdXR0b24uYWN0aW9uQnV0dG9uQmdIb3ZlckJ1dHRvbn07XG4gICAgICAgICAgICBjb2xvcjogJHtlLnRleHRJY29uLnRleHRQcmltYXJ5fTtcbiAgICAgICAgICAgIGJveC1zaGFkb3c6IG5vbmU7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgYDtcbiAgfVxuKSwgSkogPSAkLmRpdihcbiAgKHsgdGhlbWU6IHsgc3BhY2luZ3M6IGUgfSB9KSA9PiBvMWBcbiAgICBkaXNwbGF5OiBmbGV4O1xuICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gICAgZmxleDogMTtcbiAgICBwYWRkaW5nLXJpZ2h0OiAke2Uuc3A0fTtcblxuICAgICR7bm99IHtcbiAgICAgIG1hcmdpbi1yaWdodDogJHtlLnNwOH07XG4gICAgfVxuICBgXG4pO1xuZnVuY3Rpb24gYiQoZSkge1xuICBjb25zdCB7XG4gICAgdHlwZTogdCA9IEllLklORk8sXG4gICAgdGV4dDogbyxcbiAgICBidXR0b25UeXBlOiBuLFxuICAgIGJ1dHRvblRleHQ6IHIsXG4gICAgb25CdXR0b25DbGljazogaVxuICB9ID0gZSwgYSA9ICgpID0+IHtcbiAgICBzd2l0Y2ggKG4pIHtcbiAgICAgIGNhc2UgdDQuQVJST1c6XG4gICAgICAgIHJldHVybiAvKiBAX19QVVJFX18gKi8gYyhHMiwgeyBuYW1lOiBcIkFycm93UmlnaHRcIiwgb25DbGljazogaSwgc2l6ZTogXCJzbVwiIH0pO1xuICAgICAgY2FzZSB0NC5URVhUOlxuICAgICAgICByZXR1cm4gLyogQF9fUFVSRV9fICovIGMoQjIsIHsgb25DbGljazogaSwgc2l6ZTogXCJzbVwiLCBjaGlsZHJlbjogciB9KTtcbiAgICAgIGNhc2UgdDQuQ1JPU1M6XG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm4gLyogQF9fUFVSRV9fICovIGMoRzIsIHsgbmFtZTogXCJDcm9zc1wiLCBvbkNsaWNrOiBpLCBzaXplOiBcInNtXCIgfSk7XG4gICAgfVxuICB9O1xuICByZXR1cm4gLyogQF9fUFVSRV9fICovIGUxKEtKLCB7IHR5cGU6IHQsIGNoaWxkcmVuOiBbXG4gICAgLyogQF9fUFVSRV9fICovIGUxKEpKLCB7IGNoaWxkcmVuOiBbXG4gICAgICAvKiBAX19QVVJFX18gKi8gYyhaMSwgeyBuYW1lOiAoKCkgPT4ge1xuICAgICAgICBzd2l0Y2ggKHQpIHtcbiAgICAgICAgICBjYXNlIEllLlNVQ0NFU1M6XG4gICAgICAgICAgICByZXR1cm4gXCJTdWNjZXNzXCI7XG4gICAgICAgICAgY2FzZSBJZS5FUlJPUjpcbiAgICAgICAgICAgIHJldHVybiBcIkVycm9yXCI7XG4gICAgICAgICAgY2FzZSBJZS5XQVJOSU5HOlxuICAgICAgICAgICAgcmV0dXJuIFwiQWxlcnRcIjtcbiAgICAgICAgICBjYXNlIEllLklORk86XG4gICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgIHJldHVybiBcIkluZm9cIjtcbiAgICAgICAgfVxuICAgICAgfSkoKSwgc2l6ZTogXCJ4c1wiIH0pLFxuICAgICAgb1xuICAgIF0gfSksXG4gICAgYSgpXG4gIF0gfSk7XG59XG5jb25zdCBfSiA9ICQubGlgYCwgJEogPSAkKGZzKS5hdHRycyh7XG4gIGFzOiBcImRpdlwiXG59KShcbiAgKHsgdGhlbWU6IGUgfSkgPT4gbzFgXG4gICAgcGFkZGluZy1sZWZ0OiAke2Uuc3BhY2luZ3Muc3A4fTtcbiAgICBjdXJzb3I6IHBvaW50ZXI7XG5cbiAgICAmID4gYSB7XG4gICAgICBwYWRkaW5nLWxlZnQ6ICR7ZS5zcGFjaW5ncy5zcDh9O1xuICAgICAgbWFyZ2luLWxlZnQ6IC0ke2Uuc3BhY2luZ3Muc3A4fTtcbiAgICB9XG4gIGBcbiksIGVfID0gJC5kaXYoXG4gICh7IHRoZW1lOiBlLCBoZWlnaHQ6IHQgfSkgPT4gbzFgXG4gICAgaGVpZ2h0OiAke3R9cHg7XG4gICAgdHJhbnNpdGlvbjogJHtlLnRyYW5zaXRpb25zLmJhc2V9O1xuICAgIG92ZXJmbG93OiBoaWRkZW47XG4gIGBcbik7XG5mdW5jdGlvbiB0Xyh7XG4gIGljb25MZWZ0OiBlLFxuICBiYWRnZTogdCxcbiAgaXNPcGVuOiBvID0gITEsXG4gIGlzRGlzYWJsZWQ6IG4gPSAhMSxcbiAgdGl0bGU6IHIsXG4gIGNoaWxkcmVuOiBpLFxuICBvbkNsaWNrOiBhLFxuICAuLi5zXG59KSB7XG4gIGNvbnN0IFtsLCBwXSA9IFQxKDApLCBbZCwgYl0gPSBUMShvKSwgTSA9IG4wKG51bGwpLCB1ID0gXzEoXG4gICAgKGYpID0+IHtcbiAgICAgIGNvbnN0IE8gPSBmICYmIGYub2Zmc2V0SGVpZ2h0O1xuICAgICAgcChkID8gTyA6IDApO1xuICAgIH0sXG4gICAgW3AsIGRdXG4gICksIEEgPSAoKSA9PiB7XG4gICAgYSA/IGEoKSA6IChiKChmKSA9PiAhZiksIE0gIT0gbnVsbCAmJiBNLmN1cnJlbnQgJiYgdShNLmN1cnJlbnQpKTtcbiAgfTtcbiAgcmV0dXJuIFAxKCgpID0+IHtcbiAgICBNICE9IG51bGwgJiYgTS5jdXJyZW50ICYmIHUoTS5jdXJyZW50KTtcbiAgfSwgW00sIHVdKSwgLyogQF9fUFVSRV9fICovIGUxKF9KLCB7IGNoaWxkcmVuOiBbXG4gICAgLyogQF9fUFVSRV9fICovIGMoXG4gICAgICAkSixcbiAgICAgIHtcbiAgICAgICAgb25DbGljazogQSxcbiAgICAgICAgJGlzQWN0aXZlOiBkLFxuICAgICAgICAuLi5zLFxuICAgICAgICBjaGlsZHJlbjogLyogQF9fUFVSRV9fICovIGUxKE9zLCB7IGNoaWxkcmVuOiBbXG4gICAgICAgICAgZSAmJiAvKiBAX19QVVJFX18gKi8gYyhcbiAgICAgICAgICAgIFM1LFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICBuYW1lOiBlLFxuICAgICAgICAgICAgICBiYWRnZTogdCxcbiAgICAgICAgICAgICAgaXNEaXNhYmxlZDogbixcbiAgICAgICAgICAgICAgc2l6ZTogXCJ4eHNcIlxuICAgICAgICAgICAgfVxuICAgICAgICAgICksXG4gICAgICAgICAgciAmJiAvKiBAX19QVVJFX18gKi8gYyh1aSwgeyBjaGlsZHJlbjogciB9KSxcbiAgICAgICAgICAvKiBAX19QVVJFX18gKi8gYyhaMSwgeyBuYW1lOiBkID8gXCJDaGV2cm9uRG93blwiIDogXCJDaGV2cm9uUmlnaHRcIiwgc2l6ZTogXCJ4eHNcIiB9KVxuICAgICAgICBdIH0pXG4gICAgICB9XG4gICAgKSxcbiAgICAvKiBAX19QVVJFX18gKi8gYyhlXywgeyBoZWlnaHQ6IGwsIGNoaWxkcmVuOiAvKiBAX19QVVJFX18gKi8gYyhrTSwgeyByZWY6IE0sIGNoaWxkcmVuOiBpIH0pIH0pXG4gIF0gfSk7XG59XG4kLmRpdmBcbiAgd2lkdGg6IDQwMHB4O1xuYDtcbmNvbnN0IG9fID0gJChmcykoXG4gICh7IHRoZW1lOiB7IHNwYWNpbmdzOiBlIH0gfSkgPT4gbzFgXG4gICAgcGFkZGluZzogMCAke2Uuc3AxNn0gMCA3MnB4O1xuXG4gICAgJHt1aX0ge1xuICAgICAgcGFkZGluZzogJHtlLnNwNH0gMDtcbiAgICB9XG5cbiAgICA+IHNwYW4gKyBkaXYge1xuICAgICAgbWFyZ2luLWxlZnQ6ICR7ZS5zcDE2fTtcbiAgICB9XG4gIGBcbik7XG5mdW5jdGlvbiByXyhlKSB7XG4gIGNvbnN0IHsgY2hpbGRyZW46IHQsIG9uQ2xpY2s6IG8sIGlzRGlzYWJsZWQ6IG4sIGJhZGdlOiByLCBjdXN0b21JdGVtOiBpIH0gPSBlLCBhID0gXzEoKCkgPT4ge1xuICAgICFuICYmIG8gJiYgbygpO1xuICB9LCBbbiwgb10pO1xuICByZXR1cm4gLyogQF9fUFVSRV9fICovIGMob18sIHsgLi4uZSwgb25DbGljazogYSwgY2hpbGRyZW46IC8qIEBfX1BVUkVfXyAqLyBlMShPcywgeyBjdXN0b21JdGVtOiBpLCBjaGlsZHJlbjogW1xuICAgIC8qIEBfX1BVUkVfXyAqLyBjKHVpLCB7IGNoaWxkcmVuOiB0IH0pLFxuICAgICEhciAmJiAhbiAmJiAvKiBAX19QVVJFX18gKi8gYyhBZSwgeyBjb3VudDogciB9KVxuICBdIH0pIH0pO1xufVxuY29uc3Qgbl8gPSAoZSwgdCkgPT4gZS5sZW5ndGggPD0gdCA/IGUgOiBlLnNsaWNlKDAsIHQpICsgXCIuLi5cIiwgTSQgPSAoe1xuICBzaWRlTWVudTogZSxcbiAgbmF2TWVudTogdCxcbiAgb25OYXZNZW51Q2xpY2s6IG8sXG4gIG9uU2lkZU1lbnVDbGljazogbixcbiAgbm90aWZpY2F0aW9uQmVsbENvdW50OiByLFxuICBwcm9tb0dyaWRDb3VudDogaSxcbiAgaGFuZGxlR3JpZENsaWNrOiBhLFxuICBoYW5kbGVOb3RpZmljYXRpb25DbGljazogcyxcbiAgcHJvZmlsZVNlY3Rpb25PcHRpb25zOiBsLFxuICBoZWFkZXJUaXRsZTogcCxcbiAgYXZhdGFySW1nUGF0aDogZCxcbiAgaXNDbGllbnRQaWNrZXJBdmFpbGFibGU6IGIsXG4gIGNsaWVudFNlbGVjdE9wdGlvbnM6IE0sXG4gIHJpZ2h0U2lkZUljb25zQ29udGFpbmVyOiB1LFxuICBlbnRpdHlTZWxlY3RPcHRpb25zOiBBLFxuICBpc0VudGl0eUF2YWlsYWJsZTogeixcbiAgYXZhdGFyTmFtZTogZixcbiAgaXNOb3RpZmljYXRpb25FbmFibGVkOiBPID0gITAsXG4gIGlzUHJvbW9BY3Rpb25idG5FbmFibGVkOiBoID0gITAsXG4gIGNsaWVudFBpY2tlckxhYmVsTGVuZ3RoOiBnLFxuICBjc2NMb2dvOiB2LFxuICB0aGVtZUhhbmRsZXI6IEwsXG4gIHRoZW1lTW9kZTogeSxcbiAgZW5hYmxlVGhlbWVUb2dnbGU6IEIsXG4gIGNsaWVudE5hbWU6IFgsXG4gIGN1c3RvbUxvZ286IEZcbn0pID0+IHtcbiAgdmFyIEosIFMsIFc7XG4gIGNvbnN0IFQgPSBybCgpLCBbdywgSF0gPSBUMSghMSksIFtDLCBxXSA9IFQxKCExKSwgW20sIGtdID0gVDEoITEpLCB7IHRoZW1lVmFsdWU6IHgsIHNldFRoZW1lVmFsdWU6IE4gfSA9IEF0KGo2KSwgW1YsIFJdID0gVDEoITEpLCBbSSwgal0gPSBUMShbXSksIFUgPSBuMChudWxsKTtcbiAgUDEoKCkgPT4ge1xuICAgIHkgJiYgTih5KTtcbiAgfSwgW3ldKTtcbiAgY29uc3QgXyA9ICgpID0+IHtcbiAgICBIKCF3KTtcbiAgfSwgcjEgPSAoKSA9PiB7XG4gICAgSCgoUCkgPT4gIVApO1xuICB9LCBLID0gKCkgPT4ge1xuICAgIHEoKFApID0+ICFQKTtcbiAgfSwgUSA9ICgpID0+IHtcbiAgICBrKChQKSA9PiAhUCk7XG4gIH0sIEUgPSAoUCkgPT4ge1xuICAgIGIgJiYgKE0gIT0gbnVsbCAmJiBNLm9uU3VibWl0KSAmJiAoTSA9PSBudWxsIHx8IE0ub25TdWJtaXQoUCksIEsoKSk7XG4gIH0sIEQgPSAoUCkgPT4ge1xuICAgIGwgIT0gbnVsbCAmJiBsLnNlbGVjdGVkT3B0aW9ucyAmJiAobCA9PSBudWxsIHx8IGwuc2VsZWN0ZWRPcHRpb25zKFApLCBqKFApKTtcbiAgfSwgRyA9IChQKSA9PiB7XG4gICAgYiAmJiAoQSAhPSBudWxsICYmIEEub25TZWxlY3RDbGljaykgJiYgKEEgPT0gbnVsbCB8fCBBLm9uU2VsZWN0Q2xpY2soUCksIFEoKSk7XG4gIH07XG4gIHJldHVybiAvKiBAX19QVVJFX18gKi8gZTEoQ1osIHsgcmVmOiBVLCBjc2NMb2dvOiB2LCBjaGlsZHJlbjogW1xuICAgIC8qIEBfX1BVUkVfXyAqLyBlMShcbiAgICAgIG1aLFxuICAgICAge1xuICAgICAgICAkbW9kZTogeCA9PSBcImNzY0JsdWVMaWdodFwiID8gXCJibHVlTGlnaHRcIiA6IFwiYmx1ZURhcmtcIixcbiAgICAgICAgY2hpbGRyZW46IFtcbiAgICAgICAgICAvKiBAX19QVVJFX18gKi8gYyhcbiAgICAgICAgICAgIGl0LFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICBpc0JvZHlHZW5lcmF0ZWQ6ICEwLFxuICAgICAgICAgICAgICBkcm9wZG93bkJvZHlXaWR0aDogXCIxNjBweFwiLFxuICAgICAgICAgICAgICBpc1Nob3dlZDogdyxcbiAgICAgICAgICAgICAgb25DaGFuZ2U6IHIxLFxuICAgICAgICAgICAgICBib2R5UGFkZGluZzogXCI4cHhcIixcbiAgICAgICAgICAgICAgYm9keTogLyogQF9fUFVSRV9fICovIGMoa00sIHsgY2hpbGRyZW46IGUubWFwKChQLCBZKSA9PiAvKiBAX19QVVJFX18gKi8gYyhtMS5GcmFnbWVudCwgeyBjaGlsZHJlbjogUC5jaGlsZHJlbiA/IC8qIEBfX1BVUkVfXyAqLyBjKFxuICAgICAgICAgICAgICAgIHRfLFxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgIGljb25MZWZ0OiBQLmljb25MZWZ0LFxuICAgICAgICAgICAgICAgICAgdGl0bGU6IFAudGl0bGUsXG4gICAgICAgICAgICAgICAgICBiYWRnZTogUC5iYWRnZSxcbiAgICAgICAgICAgICAgICAgICRpc0FjdGl2ZTogUC5pc0FjdGl2ZSxcbiAgICAgICAgICAgICAgICAgIGlzRGlzYWJsZWQ6IFAuaXNEaXNhYmxlZCxcbiAgICAgICAgICAgICAgICAgIGNoaWxkcmVuOiBQLmNoaWxkcmVuLm1hcCgoWiwgdDEpID0+IC8qIEBfX1BVUkVfXyAqLyBjKHJfLCB7IGNoaWxkcmVuOiBaIH0sIHQxKSlcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICkgOiAvKiBAX19QVVJFX18gKi8gYyhcbiAgICAgICAgICAgICAgICBUWixcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICBpY29uTGVmdDogUC5pY29uTGVmdCxcbiAgICAgICAgICAgICAgICAgIGJhZGdlOiBQLmJhZGdlLFxuICAgICAgICAgICAgICAgICAgJGlzQWN0aXZlOiBQLmlzQWN0aXZlLFxuICAgICAgICAgICAgICAgICAgaXNEaXNhYmxlZDogUC5pc0Rpc2FibGVkLFxuICAgICAgICAgICAgICAgICAgb25DbGljazogKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBuICYmIFAubGluayAmJiBuKFAubGluayk7XG4gICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgY2hpbGRyZW46IFAudGl0bGVcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICkgfSwgWSkpIH0pLFxuICAgICAgICAgICAgICBjaGlsZHJlbjogLyogQF9fUFVSRV9fICovIGUxKFxuICAgICAgICAgICAgICAgIHZaLFxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgIG9uQ2xpY2s6IF8sXG4gICAgICAgICAgICAgICAgICAkYWN0aXZlOiB3LFxuICAgICAgICAgICAgICAgICAgJGRpc2FibGVkOiBlLmxlbmd0aCA8PSAwLFxuICAgICAgICAgICAgICAgICAgJG1vZGU6IHggPT0gXCJjc2NCbHVlTGlnaHRcIiA/IFwiYmx1ZUxpZ2h0XCIgOiBcImJsdWVEYXJrXCIsXG4gICAgICAgICAgICAgICAgICBjaGlsZHJlbjogW1xuICAgICAgICAgICAgICAgICAgICB2ID8gLyogQF9fUFVSRV9fICovIGMoV1osIHsgY2hpbGRyZW46IC8qIEBfX1BVUkVfXyAqLyBjKHVyLCB7IG5hbWU6IFwiQ1NDSG9yaXpvbnRhV2hpdGVcIiB9KSB9KSA6IEYgPyAvKiBAX19QVVJFX18gKi8gYyhSWiwgeyBzcmM6IEYsIGFsdDogRiB9KSA6IC8qIEBfX1BVUkVfXyAqLyBjKHVyLCB7IG5hbWU6IFwiRmlsbGVkV2hpdGVcIiwgc2l6ZTogXCIyMHB4XCIgfSksXG4gICAgICAgICAgICAgICAgICAgIGUubGVuZ3RoID4gMCAmJiAvKiBAX19QVVJFX18gKi8gYyhcbiAgICAgICAgICAgICAgICAgICAgICBaMSxcbiAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIkNoZXZyb25Eb3duRHJvcGRvd25cIixcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbG9yOiBULmNvbG9ycy53aGl0ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHNpemU6IFwieHh4eHNcIlxuICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgXVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgfVxuICAgICAgICAgICksXG4gICAgICAgICAgLyogQF9fUFVSRV9fICovIGMoTFosIHsgY2hpbGRyZW46IHAgfSlcbiAgICAgICAgXVxuICAgICAgfSxcbiAgICAgIFwibG9nby1jb250YWluZXJcIlxuICAgICksXG4gICAgLyogQF9fUFVSRV9fICovIGMocVosIHsgY2hpbGRyZW46IC8qIEBfX1BVUkVfXyAqLyBjKFxuICAgICAgTWosXG4gICAgICB7XG4gICAgICAgICRtb2RlOiB4ID09IFwiY3NjQmx1ZUxpZ2h0XCIgPyBcImJsdWVMaWdodFwiIDogXCJibHVlRGFya1wiLFxuICAgICAgICBtZW51czogdCxcbiAgICAgICAgb25OYXZNZW51Q2xpY2s6IG9cbiAgICAgIH1cbiAgICApIH0pLFxuICAgIC8qIEBfX1BVUkVfXyAqLyBlMSh5WiwgeyBjaGlsZHJlbjogW1xuICAgICAgLyogQF9fUFVSRV9fICovIGMoXCJkaXZcIiwgeyBpZDogXCJ0b3BiYXItcmlnaHQtc2lkZS1jb250YWluZXJcIiB9KSxcbiAgICAgIC8qIEBfX1BVUkVfXyAqLyBjKHMwLCB7IGNoaWxkcmVuOiBYID09PSB2b2lkIDAgPyAvKiBAX19QVVJFX18gKi8gYyhzMCwgeyBjaGlsZHJlbjogYiAmJiBNICYmIC8qIEBfX1BVUkVfXyAqLyBjKG0xLkZyYWdtZW50LCB7IGNoaWxkcmVuOiAvKiBAX19QVVJFX18gKi8gYyhcbiAgICAgICAgaXQsXG4gICAgICAgIHtcbiAgICAgICAgICBpc0JvZHlHZW5lcmF0ZWQ6ICEwLFxuICAgICAgICAgIGRyb3Bkb3duQm9keVdpZHRoOiBcIjM0MHB4XCIsXG4gICAgICAgICAgaXNTaG93ZWQ6IEMsXG4gICAgICAgICAgcG9zaXRpb246IFwicmlnaHRcIixcbiAgICAgICAgICBvbkNoYW5nZTogSyxcbiAgICAgICAgICBib2R5OiAvKiBAX19QVVJFX18gKi8gYyhcbiAgICAgICAgICAgIGRiLFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAuLi5NLFxuICAgICAgICAgICAgICBvblN1Ym1pdDogRSxcbiAgICAgICAgICAgICAgb25Sb3dDbGljazogKFApID0+IHtcbiAgICAgICAgICAgICAgICBLKCksIE0gIT0gbnVsbCAmJiBNLm9uUm93Q2xpY2sgJiYgKE0gPT0gbnVsbCB8fCBNLm9uUm93Q2xpY2soUCkpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgKSxcbiAgICAgICAgICBjaGlsZHJlbjogLyogQF9fUFVSRV9fICovIGUxKFxuICAgICAgICAgICAgV3IsXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIFwiYXJpYS1oYXNwb3B1cFwiOiBcIm1lbnVcIixcbiAgICAgICAgICAgICAgXCJhcmlhLWV4cGFuZGVkXCI6IEMgfHwgKEogPSBNID09IG51bGwgPyB2b2lkIDAgOiBNLnNlbGVjdGVkQ2xpZW50KSAhPSBudWxsICYmIEouY2xpZW50TmFtZSA/IFwidHJ1ZVwiIDogXCJmYWxzZVwiLFxuICAgICAgICAgICAgICBvbkNsaWNrOiBLLFxuICAgICAgICAgICAgICBjaGlsZHJlbjogW1xuICAgICAgICAgICAgICAgIC8qIEBfX1BVUkVfXyAqLyBjKEk0LCB7IGNoaWxkcmVuOiAoUyA9IE0gPT0gbnVsbCA/IHZvaWQgMCA6IE0uc2VsZWN0ZWRDbGllbnQpICE9IG51bGwgJiYgUy5jbGllbnROYW1lID8gbl8oXG4gICAgICAgICAgICAgICAgICAoVyA9IE0gPT0gbnVsbCA/IHZvaWQgMCA6IE0uc2VsZWN0ZWRDbGllbnQpID09IG51bGwgPyB2b2lkIDAgOiBXLmNsaWVudE5hbWUsXG4gICAgICAgICAgICAgICAgICBnIHx8IDI4XG4gICAgICAgICAgICAgICAgKSA6IFwiQ2xpZW50XCIgfSksXG4gICAgICAgICAgICAgICAgLyogQF9fUFVSRV9fICovIGMoXG4gICAgICAgICAgICAgICAgICBaMSxcbiAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJDaGV2cm9uRG93bkRyb3Bkb3duXCIsXG4gICAgICAgICAgICAgICAgICAgIGNvbG9yOiBcIiNmZmZcIixcbiAgICAgICAgICAgICAgICAgICAgc2l6ZTogXCJ4eHh4c1wiXG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICBdXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgXCJpc0NsaWVudFBpY2tlckF2YWlsYWJsZVwiXG4gICAgICAgICAgKVxuICAgICAgICB9XG4gICAgICApIH0sIFwiaXNDbGllbnRQaWNrZXJBdmFpbGFibGVcIikgfSkgOiAvKiBAX19QVVJFX18gKi8gYyhJNCwgeyBjaGlsZHJlbjogWCB9KSB9KSxcbiAgICAgIEEgJiYgeiAmJiAvKiBAX19QVVJFX18gKi8gZTEoczAsIHsgY2hpbGRyZW46IFtcbiAgICAgICAgLyogQF9fUFVSRV9fICovIGMobTEuRnJhZ21lbnQsIHsgY2hpbGRyZW46IC8qIEBfX1BVUkVfXyAqLyBjKFxuICAgICAgICAgIGl0LFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGlzQm9keUdlbmVyYXRlZDogITAsXG4gICAgICAgICAgICBkcm9wZG93bkJvZHlXaWR0aDogXCIzNDBweFwiLFxuICAgICAgICAgICAgaXNTaG93ZWQ6IG0sXG4gICAgICAgICAgICBwb3NpdGlvbjogXCJyaWdodFwiLFxuICAgICAgICAgICAgb25DaGFuZ2U6IFEsXG4gICAgICAgICAgICBib2R5OiAvKiBAX19QVVJFX18gKi8gYyhcbiAgICAgICAgICAgICAgZ1osXG4gICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAuLi5BLFxuICAgICAgICAgICAgICAgIG9uU2VsZWN0Q2xpY2s6IEdcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgKSxcbiAgICAgICAgICAgIGNoaWxkcmVuOiAvKiBAX19QVVJFX18gKi8gYyhFYywgeyBjaGlsZHJlbjogLyogQF9fUFVSRV9fICovIGMoXG4gICAgICAgICAgICAgIFZvLFxuICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgb25DbGljazogUSxcbiAgICAgICAgICAgICAgICBpY29uTmFtZTogXCJTZWFyY2hcIixcbiAgICAgICAgICAgICAgICAkaXNPcGVuZWQ6IG0sXG4gICAgICAgICAgICAgICAgJG1vZGU6IHggPT0gXCJjc2NCbHVlTGlnaHRcIiA/IFwiYmx1ZUxpZ2h0XCIgOiBcImJsdWVEYXJrXCJcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgXCJlbnRpdHlTZWxlY3RPcHRpb25zXCJcbiAgICAgICAgICAgICkgfSlcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwiZW50aXR5U2VsZWN0T3B0aW9uc1wiXG4gICAgICAgICkgfSwgXCJlbnRpdHlTZWxlY3RPcHRpb25zXCIpLFxuICAgICAgICAvKiBAX19QVVJFX18gKi8gYyh3Wiwge30pXG4gICAgICBdIH0pLFxuICAgICAgdSAmJiB1LFxuICAgICAgQiAmJiAvKiBAX19QVVJFX18gKi8gYyhcbiAgICAgICAgVm8sXG4gICAgICAgIHtcbiAgICAgICAgICBvbkNsaWNrOiAoKSA9PiBMICYmIEwoeCksXG4gICAgICAgICAgaWNvbk5hbWU6IHggIT0gXCJjc2NCbHVlTGlnaHRcIiA/IFwiTGlnaHRNb2RlU3dpdGNoZXJGaWxsZWRcIiA6IFwiRGFya01vZGVTd2l0Y2hlckZpbGxlZFwiLFxuICAgICAgICAgICRtb2RlOiB4ID09IFwiY3NjQmx1ZUxpZ2h0XCIgPyBcImJsdWVMaWdodFwiIDogXCJibHVlRGFya1wiXG4gICAgICAgIH1cbiAgICAgICksXG4gICAgICBoICYmIC8qIEBfX1BVUkVfXyAqLyBjKFxuICAgICAgICBWbyxcbiAgICAgICAge1xuICAgICAgICAgIG9uQ2xpY2s6IGEsXG4gICAgICAgICAgaWNvbk5hbWU6IFwiTGlzdEZpbGxlZFwiLFxuICAgICAgICAgIGNvdW50OiBpLFxuICAgICAgICAgICRtb2RlOiB4ID09IFwiY3NjQmx1ZUxpZ2h0XCIgPyBcImJsdWVMaWdodFwiIDogXCJibHVlRGFya1wiXG4gICAgICAgIH1cbiAgICAgICksXG4gICAgICBPICYmIC8qIEBfX1BVUkVfXyAqLyBjKFxuICAgICAgICBWbyxcbiAgICAgICAge1xuICAgICAgICAgIG9uQ2xpY2s6IHMsXG4gICAgICAgICAgaWNvbk5hbWU6IFwiQmVsbEZpbGxlZFwiLFxuICAgICAgICAgIGNvdW50OiByLFxuICAgICAgICAgICRtb2RlOiB4ID09IFwiY3NjQmx1ZUxpZ2h0XCIgPyBcImJsdWVMaWdodFwiIDogXCJibHVlRGFya1wiXG4gICAgICAgIH1cbiAgICAgICksXG4gICAgICBsICYmIC8qIEBfX1BVUkVfXyAqLyBjKFxuICAgICAgICBpdCxcbiAgICAgICAge1xuICAgICAgICAgIGlzQm9keUdlbmVyYXRlZDogITAsXG4gICAgICAgICAgb25DaGFuZ2U6ICgpID0+IHtcbiAgICAgICAgICAgIFIoIVYpO1xuICAgICAgICAgIH0sXG4gICAgICAgICAgZHJvcGRvd25Cb2R5V2lkdGg6IFwiMjI0cHhcIixcbiAgICAgICAgICBwb3NpdGlvbjogXCJyaWdodFwiLFxuICAgICAgICAgIGJvZHk6IC8qIEBfX1BVUkVfXyAqLyBjKFxuICAgICAgICAgICAgZHQsXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIC4uLmwsXG4gICAgICAgICAgICAgIGdyb3VwQnlEaXZpZGVyOiAhMCxcbiAgICAgICAgICAgICAgc2VsZWN0ZWRPcHRpb25zOiBELFxuICAgICAgICAgICAgICBkZWZhdWx0VmFsdWVzOiBsICE9IG51bGwgJiYgbC5kZWZhdWx0VmFsdWVzID8gbCA9PSBudWxsID8gdm9pZCAwIDogbC5kZWZhdWx0VmFsdWVzIDogSVxuICAgICAgICAgICAgfVxuICAgICAgICAgICksXG4gICAgICAgICAgYm9keVBhZGRpbmc6IFwiOHB4XCIsXG4gICAgICAgICAgY2hpbGRyZW46IC8qIEBfX1BVUkVfXyAqLyBjKFxuICAgICAgICAgICAgRWMsXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICRpc0FjdGl2ZTogViAhPSBudWxsICYmIFYsXG4gICAgICAgICAgICAgIGNoaWxkcmVuOiAvKiBAX19QVVJFX18gKi8gYyhcbiAgICAgICAgICAgICAgICBWbyxcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAkbW9kZTogeCA9PSBcImNzY0JsdWVMaWdodFwiID8gXCJibHVlTGlnaHRcIiA6IFwiYmx1ZURhcmtcIixcbiAgICAgICAgICAgICAgICAgICRhdmF0YXI6ICEwLFxuICAgICAgICAgICAgICAgICAgYXZhdGFyTmFtZTogZixcbiAgICAgICAgICAgICAgICAgIHVybDogZFxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgfVxuICAgICAgICAgIClcbiAgICAgICAgfVxuICAgICAgKVxuICAgIF0gfSlcbiAgXSB9KTtcbn0sIGlfID0gJC51bChcbiAgKHsgdGhlbWU6IHsgbWl4aW5zOiBlLCBjb2xvcnM6IHQgfSB9KSA9PiBvMWBcbiAgICAke2UubGlzdFJlc2V0fVxuICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbiAgICBiYWNrZ3JvdW5kOiAke3QuYmFja2dyb3VuZHMuYmdQcmltYXJ5fTtcbiAgYFxuKSwgYV8gPSAkLmEoXG4gICh7IHRoZW1lOiB7IGNvbG9yczogZSB9LCAkaXNUZXh0TGluazogdCB9KSA9PiBvMWBcbiAgICAgICR7dCAmJiBvMWBcbiAgICAgICAgJHtVNn0ge1xuICAgICAgICAgIGNvbG9yOiAke2UudGV4dEljb24udGV4dFNlY29uZGFyeX0gIWltcG9ydGFudDtcbiAgICAgICAgICBjdXJzb3I6IHBvaW50ZXI7XG4gICAgICAgIH1cbiAgICAgIGB9XG4gICAgYFxuKSwgc18gPSAkLmRpdihcbiAgKHsgdGhlbWU6IHsgY29sb3JzOiBlLCB0eXBvZ3JhcGh5OiB0LCBsaW5lSGVpZ2h0OiBvLCBmb250V2VpZ2h0OiBuIH0gfSkgPT4gbzFgXG4gICAgZm9udC1zaXplOiAke3QudDE4fTtcbiAgICBmb250LXdlaWdodDogJHtuLm1lZGl1bX07XG4gICAgbGluZS1oZWlnaHQ6ICR7by5saDI2fTtcbiAgICBjb2xvcjogJHtlLnRleHRJY29uLnRleHRQcmltYXJ5fTtcbiAgYFxuKSwgY18gPSAkLmRpdihcbiAgKHsgdGhlbWU6IHt9IH0pID0+IG8xYFxuICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgYFxuKSwgamMgPSAkLmRpdihcbiAgKHsgdGhlbWU6IHsgY29sb3JzOiBlIH0gfSkgPT4gbzFgXG4gICAgaGVpZ2h0OiAxM3B4O1xuICAgIHdpZHRoOiAxcHg7XG4gICAgbWFyZ2luOiAwIDZweDtcbiAgICBib3JkZXItcmlnaHQ6IDEuNXB4IHNvbGlkICR7ZS5ib3JkZXIuYm9yZGVyVGVydGlhcnl9O1xuICBgXG4pLCBsXyA9ICQuZGl2KFxuICAoeyB0aGVtZTogeyBtaXhpbnM6IGUsIGNvbG9yczogdCwgdHlwb2dyYXBoeTogbywgbGluZUhlaWdodDogbiwgZm9udFdlaWdodDogciB9IH0pID0+IG8xYFxuICAgICR7ZS5saXN0UmVzZXR9XG4gICAgJHtVNn0ge1xuICAgICAgZm9udC1zaXplOiAke28udDE0fTtcbiAgICAgIGZvbnQtd2VpZ2h0OiAke3IubGlnaHR9O1xuICAgICAgbGluZS1oZWlnaHQ6ICR7bi5saDIyfTtcbiAgICAgIGNvbG9yOiAke3QudGV4dEljb24udGV4dFByaW1hcnl9O1xuICAgIH1cbiAgYFxuKSwgcF8gPSAkLmRpdihcbiAgKHsgdGhlbWU6IHsgY29sb3JzOiBlIH0sICRzdGF0dXM6IHQgfSkgPT4gbzFgXG4gICAgJHt0ICYmIG8xYFxuICAgICAgJHtFcH0ge1xuICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAke2UuYm9yZGVyLmJvcmRlclByaW1hcnl9O1xuICAgICAgfVxuICAgIGB9XG4gIGBcbiksIGRfID0gJC51bChcbiAgKHsgdGhlbWU6IHsgbWl4aW5zOiBlLCBjb2xvcnM6IHQsIHR5cG9ncmFwaHk6IG8sIGxpbmVIZWlnaHQ6IG4sIGZvbnRXZWlnaHQ6IHIgfSB9KSA9PiBvMWBcbiAgICAke2UubGlzdFJlc2V0fVxuICAgIGZvbnQtc2l6ZTogJHtvLnQxMn07XG4gICAgZm9udC13ZWlnaHQ6ICR7ci5saWdodH07XG4gICAgbGluZS1oZWlnaHQ6ICR7bi5saDIwfTtcbiAgICBjb2xvcjogJHt0LnRleHRJY29uLnRleHRMb3dlbXBoYXNpc307XG4gICAgZGlzcGxheTogZmxleDtcbiAgICBhbGlnbi1pdGVtczogY2VudGVyO1xuICAgIGZsZXgtd3JhcDogd3JhcDtcbiAgYFxuKSwgYl8gPSAkLmxpKCh7IHRoZW1lOiB7IGNvbG9yczogZSwgc3BhY2luZ3M6IHQgfSB9KSA9PiBvMWBcbiAgICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gICAgZGlzcGxheTogZmxleDtcbiAgICBnYXA6IDhweDtcbiAgICBhbGlnbi1pdGVtczogZmxleC1zdGFydDtcbiAgICBwYWRkaW5nOiA0cHggNHB4IDAgNHB4O1xuICAgICR7UTR9IHtcbiAgICAgIHdpZHRoOiAke3Quc3A4fTtcbiAgICAgIGhlaWdodDogJHt0LnNwOH07XG4gICAgICBtYXJnaW4tdG9wOiAke3Quc3A2fTtcbiAgICB9XG4gICAgLmNvbGxhcHNlLXdyYXBwZXIge1xuICAgICAgbWFyZ2luOiAwO1xuICAgIH1cbiAgICAmOmxhc3QtY2hpbGQge1xuICAgICAgcGFkZGluZy1ib3R0b206IDA7XG4gICAgfVxuICAgICY6bm90KDpsYXN0LWNoaWxkLCA6b25seS1jaGlsZCkge1xuICAgICAgJjphZnRlciB7XG4gICAgICAgIGNvbnRlbnQ6ICcnO1xuICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgICAgIHRvcDogJHswLjUgKiA0NH1weDtcbiAgICAgICAgYm90dG9tOiAtMHJlbTtcbiAgICAgICAgbGVmdDogJHswLjUgKiAxNX1weDtcbiAgICAgICAgd2lkdGg6IDFweDtcbiAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogJHtlLmJvcmRlci5ib3JkZXJQcmltYXJ5fTtcbiAgICAgIH1cbiAgICB9XG4gIGApO1xuJC5kaXZgXG4gIHdpZHRoOiAzMDBweDtcbiAgcGFkZGluZzogJHsoeyB0aGVtZTogeyBzcGFjaW5nczogZSB9IH0pID0+IGUuc3AxNn07XG4gIGJhY2tncm91bmQtY29sb3I6ICR7KHsgdGhlbWU6IHsgY29sb3JzOiBlIH0gfSkgPT4gZS53aGl0ZX07XG5cbiAgJHtiYn0ge1xuICAgIHBhZGRpbmc6IDA7XG4gIH1cbmA7XG4kLnVsKFxuICAoeyB0aGVtZTogeyB0eXBvZ3JhcGh5OiBlLCBmb250V2VpZ2h0OiB0LCBtaXhpbnM6IG8gfSB9KSA9PiBvMWBcbiAgICAke28ubGlzdFJlc2V0fVxuICAgIG1hcmdpbjogMXJlbSAwIDA7XG4gICAgZm9udC1zaXplOiAke2UudDE0fTtcbiAgICBmb250LXdlaWdodDogJHt0LmxpZ2h0fTtcbiAgYFxuKTtcbiQubGkoXG4gICh7IHRoZW1lOiB7IHNwYWNpbmdzOiBlIH0gfSkgPT4gbzFgXG4gICAgZGlzcGxheTogZmxleDtcbiAgICBhbGlnbi1pdGVtczogY2VudGVyO1xuICAgIGp1c3RpZnktY29udGVudDogc3BhY2UtYmV0d2VlbjtcbiAgICBwYWRkaW5nLWJvdHRvbTogJHtlLnNwMjR9O1xuXG4gICAgJjpsYXN0LWNoaWxkIHtcbiAgICAgIHBhZGRpbmctYm90dG9tOiAwO1xuICAgIH1cbiAgYFxuKTtcbiQubGkoXG4gICh7IHRoZW1lOiB7IHNwYWNpbmdzOiBlIH0gfSkgPT4gbzFgXG4gICAgZGlzcGxheTogZmxleDtcbiAgICBhbGlnbi1pdGVtczogY2VudGVyO1xuICAgIGp1c3RpZnktY29udGVudDogc3BhY2UtYmV0d2VlbjtcbiAgICBwYWRkaW5nLWJvdHRvbTogJHtlLnNwOH07XG5cbiAgICAmOmxhc3QtY2hpbGQge1xuICAgICAgcGFkZGluZy1ib3R0b206IDA7XG4gICAgfVxuICBgXG4pO1xuZnVuY3Rpb24gQSQoZSkge1xuICBjb25zdCB7IHRpdGxlOiB0LCBkYXRhOiBvLCBvbkNsaWNrOiBuIH0gPSBlLCByID0gKGEsIHMpID0+IGkoYSwgcyksIGkgPSAoYSwgcykgPT4ge1xuICAgIHZhciBsLCBwLCBkLCBiLCBNLCB1O1xuICAgIHJldHVybiAvKiBAX19QVVJFX18gKi8gZTEobF8sIHsgaWQ6IHMsIGNoaWxkcmVuOiBbXG4gICAgICAoKGwgPSBhID09IG51bGwgPyB2b2lkIDAgOiBhLnN0YXR1cykgPT0gbnVsbCA/IHZvaWQgMCA6IGwudG9Mb3dlckNhc2UoKSkgPT0gXCJwZW5kaW5nXCIgJiYgKGEgPT0gbnVsbCA/IHZvaWQgMCA6IGEuZG9uZURhdGUpID09IG51bGwgPyAvKiBAX19QVVJFX18gKi8gYyhcbiAgICAgICAgYV8sXG4gICAgICAgIHtcbiAgICAgICAgICAkaXNUZXh0TGluazogKChwID0gYSA9PSBudWxsID8gdm9pZCAwIDogYS5zdGF0dXMpID09IG51bGwgPyB2b2lkIDAgOiBwLnRvTG93ZXJDYXNlKCkpID09IFwicGVuZGluZ1wiLFxuICAgICAgICAgIG9uQ2xpY2s6ICgpID0+IG4gJiYgbihhKSxcbiAgICAgICAgICBpZDogcyxcbiAgICAgICAgICBjaGlsZHJlbjogLyogQF9fUFVSRV9fICovIGMoXG4gICAgICAgICAgICBoNSxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgdGl0bGU6IGEgPT0gbnVsbCA/IHZvaWQgMCA6IGEuZGVzaWduYXRpb24sXG4gICAgICAgICAgICAgIGV4cGFuZFdpdGhUaXRsZTogITAsXG4gICAgICAgICAgICAgIGlzRXhwYW5kRW5hYmxlOiAhIShhICE9IG51bGwgJiYgYS5zdWJEYXRhKSxcbiAgICAgICAgICAgICAgY2hpbGRyZW46IGEgIT0gbnVsbCAmJiBhLnN1YkRhdGEgPyAoZCA9IGEgPT0gbnVsbCA/IHZvaWQgMCA6IGEuc3ViRGF0YSkgPT0gbnVsbCA/IHZvaWQgMCA6IGQubWFwKFxuICAgICAgICAgICAgICAgIChBLCB6KSA9PiByKEEsIHopXG4gICAgICAgICAgICAgICkgOiBcIlwiXG4gICAgICAgICAgICB9XG4gICAgICAgICAgKVxuICAgICAgICB9XG4gICAgICApIDogLyogQF9fUFVSRV9fICovIGMoXG4gICAgICAgIGg1LFxuICAgICAgICB7XG4gICAgICAgICAgdGl0bGU6IGEgPT0gbnVsbCA/IHZvaWQgMCA6IGEuZGVzaWduYXRpb24sXG4gICAgICAgICAgZXhwYW5kV2l0aFRpdGxlOiAhMCxcbiAgICAgICAgICBpc0V4cGFuZEVuYWJsZTogISEoYSAhPSBudWxsICYmIGEuc3ViRGF0YSksXG4gICAgICAgICAgY2hpbGRyZW46IGEgIT0gbnVsbCAmJiBhLnN1YkRhdGEgPyAoYiA9IGEgPT0gbnVsbCA/IHZvaWQgMCA6IGEuc3ViRGF0YSkgPT0gbnVsbCA/IHZvaWQgMCA6IGIubWFwKFxuICAgICAgICAgICAgKEEsIHopID0+IHIoQSwgeilcbiAgICAgICAgICApIDogXCJcIlxuICAgICAgICB9XG4gICAgICApLFxuICAgICAgLyogQF9fUFVSRV9fICovIGUxKGRfLCB7IGNoaWxkcmVuOiBbXG4gICAgICAgIChhID09IG51bGwgPyB2b2lkIDAgOiBhLm5hbWUpICYmIChhID09IG51bGwgPyB2b2lkIDAgOiBhLnN0YXR1cykgPT0gbnVsbCAmJiAoYSA9PSBudWxsID8gdm9pZCAwIDogYS5uYW1lKSxcbiAgICAgICAgLyogQF9fUFVSRV9fICovIGUxKGNfLCB7IGNoaWxkcmVuOiBbXG4gICAgICAgICAgYSAhPSBudWxsICYmIGEuYWN0aW9uVHlwZSB8fCBhICE9IG51bGwgJiYgYS5kb25lRGF0ZSA/IGEubmFtZSAmJiAvKiBAX19QVVJFX18gKi8gYyhqYywge30pIDogbnVsbCxcbiAgICAgICAgICBhICE9IG51bGwgJiYgYS5hY3Rpb25UeXBlID8gYSA9PSBudWxsID8gdm9pZCAwIDogYS5hY3Rpb25UeXBlIDogbnVsbCxcbiAgICAgICAgICBhICE9IG51bGwgJiYgYS5kb25lRGF0ZSB8fCAoKE0gPSBhID09IG51bGwgPyB2b2lkIDAgOiBhLnN0YXR1cykgPT0gbnVsbCA/IHZvaWQgMCA6IE0udG9Mb3dlckNhc2UoKSkgPT0gXCJwZW5kaW5nXCIgPyAvKiBAX19QVVJFX18gKi8gYyhqYywge30pIDogbnVsbCxcbiAgICAgICAgICBhICE9IG51bGwgJiYgYS5kb25lRGF0ZSAmJiAoYSA9PSBudWxsID8gdm9pZCAwIDogYS5zdGF0dXMpID09IG51bGwgPyBhID09IG51bGwgPyB2b2lkIDAgOiBhLmRvbmVEYXRlIDogKCh1ID0gYSA9PSBudWxsID8gdm9pZCAwIDogYS5zdGF0dXMpID09IG51bGwgPyB2b2lkIDAgOiB1LnRvTG93ZXJDYXNlKCkpID09IFwicGVuZGluZ1wiICYmIChhID09IG51bGwgPyB2b2lkIDAgOiBhLmRvbmVEYXRlKSA9PSBudWxsID8gYSA9PSBudWxsID8gdm9pZCAwIDogYS5zdGF0dXMgOiBudWxsXG4gICAgICAgIF0gfSlcbiAgICAgIF0gfSlcbiAgICBdIH0pO1xuICB9O1xuICByZXR1cm4gLyogQF9fUFVSRV9fICovIGUxKGlfLCB7IGNoaWxkcmVuOiBbXG4gICAgLyogQF9fUFVSRV9fICovIGMoc18sIHsgY2hpbGRyZW46IHQgfSksXG4gICAgbyA9PSBudWxsID8gdm9pZCAwIDogby5tYXAoKGEsIHMpID0+IHtcbiAgICAgIHZhciBsLCBwLCBkLCBiLCBNLCB1O1xuICAgICAgcmV0dXJuIC8qIEBfX1BVUkVfXyAqLyBlMShiXywgeyBpZDogcywgY2hpbGRyZW46IFtcbiAgICAgICAgLyogQF9fUFVSRV9fICovIGMoXG4gICAgICAgICAgcF8sXG4gICAgICAgICAge1xuICAgICAgICAgICAgJHN0YXR1czogYS5uYW1lID09IG51bGwsXG4gICAgICAgICAgICBjaGlsZHJlbjogLyogQF9fUFVSRV9fICovIGMoXG4gICAgICAgICAgICAgIG00LFxuICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgdHlwZTogKGEgPT0gbnVsbCA/IHZvaWQgMCA6IGEuZG9uZURhdGUpICE9IG51bGwgJiYgKCgobCA9IGEgPT0gbnVsbCA/IHZvaWQgMCA6IGEuYWN0aW9uVHlwZSkgPT0gbnVsbCA/IHZvaWQgMCA6IGwudG9Mb3dlckNhc2UoKSkgPT0gXCJtYWtlclwiIHx8ICgocCA9IGEgPT0gbnVsbCA/IHZvaWQgMCA6IGEuYWN0aW9uVHlwZSkgPT0gbnVsbCA/IHZvaWQgMCA6IHAudG9Mb3dlckNhc2UoKSkgPT0gXCJhcHByb3ZlclwiKSAmJiAoYSA9PSBudWxsID8gdm9pZCAwIDogYS5hY3Rpb25UYWtlbikgPT0gbnVsbCB8fCAoKGQgPSBhID09IG51bGwgPyB2b2lkIDAgOiBhLmFjdGlvblRha2VuKSA9PSBudWxsID8gdm9pZCAwIDogZC50b0xvd2VyQ2FzZSgpKSA9PSBcImRvbmVcIiA/IFwiYWN0aXZlXCIgOiAoKGIgPSBhID09IG51bGwgPyB2b2lkIDAgOiBhLnN0YXR1cykgPT0gbnVsbCA/IHZvaWQgMCA6IGIudG9Mb3dlckNhc2UoKSkgPT0gXCJwZW5kaW5nXCIgPyBcInBlbmRpbmdcIiA6ICgoKE0gPSBhID09IG51bGwgPyB2b2lkIDAgOiBhLmFjdGlvblRha2VuKSA9PSBudWxsID8gdm9pZCAwIDogTS50b0xvd2VyQ2FzZSgpKSA9PSBcInJldHVybmVkXCIgfHwgKCh1ID0gYSA9PSBudWxsID8gdm9pZCAwIDogYS5hY3Rpb25UYWtlbikgPT0gbnVsbCA/IHZvaWQgMCA6IHUudG9Mb3dlckNhc2UoKSkgPT0gXCJyZWplY3RlZFwiLCBcIkluYWN0aXZlXCIpLFxuICAgICAgICAgICAgICAgIGhhc0xhYmVsOiAhMVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICApXG4gICAgICAgICAgfVxuICAgICAgICApLFxuICAgICAgICBpKGEsIHMpXG4gICAgICBdIH0pO1xuICAgIH0pXG4gIF0gfSk7XG59XG4kLmRpdmBcbiAgcGFkZGluZzogMzJweDtcbmA7XG5jb25zdCBNXyA9ICQuZGl2YFxuICBwYWRkaW5nOiAxNnB4IDEycHg7XG4gIGJvcmRlcjogMXB4IHNvbGlkICNkMmQyZDU7XG4gIGJvcmRlci10b3A6ICR7KGUpID0+IGUuY2FyZFR5cGUgPT09IFwiUGVuZGluZ1Byb2ZpbGVcIiA/IFwiNHB4IHNvbGlkICNGMkE5MDBcIiA6IFwiNHB4IHNvbGlkICM1MDlFMkZcIn07XG4gIGJvcmRlci1yYWRpdXM6IDhweDtcbiAgYmFja2dyb3VuZC1jb2xvcjogI2ZmZjtcbiAgd2lkdGg6IDM4MHB4O1xuICBtYXgtaGVpZ2h0OiAkeyhlKSA9PiBlLmlzRXhwYW5kZWQgPyBcImF1dG9cIiA6IFwiODVweFwifTtcbiAgdHJhbnNpdGlvbjogbWF4LWhlaWdodCAwLjNzIGVhc2UtaW4tb3V0O1xuICBib3gtc2l6aW5nOiBib3JkZXItYm94O1xuYCwgQV8gPSAkLmRpdmBcbiAgZGlzcGxheTogZmxleDtcbiAganVzdGlmeS1jb250ZW50OiBmbGV4LXN0YXJ0O1xuICBhbGlnbi1pdGVtczogZmxleC1zdGFydDtcbiAgZ2FwOiA4cHg7XG5gLCB1XyA9ICQuZGl2YFxuICBmbGV4LWdyb3c6IDE7XG5gLCB6XyA9ICQuaDFgXG4gIGZvbnQtc2l6ZTogMTZweDtcbiAgZm9udC13ZWlnaHQ6IDUwMDtcbiAgbGluZS1oZWlnaHQ6IDE2cHg7XG4gIGNvbG9yOiAjMjAyMDJjO1xuICBtYXJnaW46IDAgMCAxMHB4IDA7XG5gLCBoXyA9ICQucGBcbiAgZm9udC1zaXplOiAxMnB4O1xuICBmb250LXdlaWdodDogNDAwO1xuICBsaW5lLWhlaWdodDogMTRweDtcbiAgY29sb3I6ICM2MzYzNmI7XG4gIG1hcmdpbjogMDtcbmAsIE9fID0gJC5kaXZgXG4gIGRpc3BsYXk6IGZsZXg7XG4gIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG4gIGdhcDogOHB4O1xuYCwgZl8gPSAkLmRpdmBcbiAgcGFkZGluZy1sZWZ0OiA2cHg7XG4gIGJvcmRlci1sZWZ0OiAxcHggc29saWQgI2QyZDJkNTtcbiAgZGlzcGxheTogZmxleDtcbiAganVzdGlmeS1jb250ZW50OiBmbGV4LXN0YXJ0O1xuICBhbGlnbi1pdGVtczogY2VudGVyO1xuICBnYXA6IDhweDtcbmAsIGdfID0gJC5kaXZgXG4gIHRyYW5zaXRpb246IHRyYW5zZm9ybSAwLjFzIGVhc2UtaW4tb3V0O1xuICB0cmFuc2Zvcm06IHJvdGF0ZSgkeyhlKSA9PiBlLmlzRXhwYW5kZWQgPyBcIjE4MGRlZ1wiIDogXCIwZGVnXCJ9KTtcbiAgY3Vyc29yOiBwb2ludGVyO1xuYCwgQ18gPSAkLmRpdmBcbiAgcGFkZGluZzogOHB4IDAgMCAwO1xuICBtYXJnaW4tdG9wOiAxNnB4O1xuICBib3JkZXItdG9wOiAxcHggc29saWQgI2U5ZTllYTtcbmAsIG1fID0gJC5kaXZgXG4gIG9wYWNpdHk6ICR7KGUpID0+IGUuaXNFeHBhbmRlZCA/IFwiMVwiIDogXCIwXCJ9O1xuICB0cmFuc2l0aW9uOiAwLjNzIGFsbCBlYXNlLWluLW91dDtcbmAsIExfID0gJC5kaXZgYCwgdl8gPSAkLmRpdmBcbiAgZGlzcGxheTogZmxleDtcbiAganVzdGlmeS1jb250ZW50OiBzcGFjZS1iZXR3ZWVuO1xuICBhbGlnbi1pdGVtczogY2VudGVyO1xuICBtYXJnaW4tYm90dG9tOiAxMHB4O1xuYCwgcV8gPSAkLmgyYFxuICBtYXJnaW46IDA7XG4gIGZvbnQtc2l6ZTogMTJweDtcbiAgZm9udC13ZWlnaHQ6IDQwMDtcbiAgbGluZS1oZWlnaHQ6IDIwcHg7XG4gIGNvbG9yOiAjMzEyNzgzO1xuICAmOjphZnRlciB7XG4gICAgY29udGVudDogJyc7XG4gICAgaGVpZ2h0OiAxcHg7XG4gICAgd2lkdGg6IDEwMCU7XG4gICAgYmFja2dyb3VuZC1jb2xvcjogIzMxMjc4MztcbiAgICBkaXNwbGF5OiBibG9jaztcbiAgfVxuYCwgS2MgPSAkLnBgXG4gIG1hcmdpbjogMDtcbiAgZm9udC1zaXplOiAxMnB4O1xuICBmb250LXdlaWdodDogMzAwO1xuICBsaW5lLWhlaWdodDogMThweDtcbiAgY29sb3I6ICMyYjJiMzc7XG5gO1xuJC5kaXZgXG4gIGRpc3BsYXk6IGZsZXg7XG4gIGp1c3RpZnktY29udGVudDogZmxleC1zdGFydDtcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgZ2FwOiA0cHg7XG5gO1xuY29uc3QgeV8gPSAkLmRpdmBcbiAgbWFyZ2luLWJvdHRvbTogMDtcbmA7XG4kLmRpdmBgO1xuJC5oMmBcbiAgbWFyZ2luOiAwO1xuICBmb250LXNpemU6IDEwcHg7XG4gIGZvbnQtd2VpZ2h0OiA0MDA7XG4gIGxpbmUtaGVpZ2h0OiAxOHB4O1xuICBjb2xvcjogIzIwMjAyYztcbmA7XG4kLnVsYFxuICBsaXN0LXN0eWxlOiBub25lO1xuICBwYWRkaW5nLWxlZnQ6IDA7XG4gIG1hcmdpbi10b3A6IDVweDtcbmA7XG4kLmxpYFxuICBkaXNwbGF5OiBmbGV4O1xuICBqdXN0aWZ5LWNvbnRlbnQ6IGZsZXgtc3RhcnQ7XG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gIGdhcDogOHB4O1xuYDtcbiQuaDRgXG4gIG1hcmdpbjogMDtcbiAgZm9udC1zaXplOiAxMHB4O1xuICBmb250LXdlaWdodDogMzAwO1xuICBsaW5lLWhlaWdodDogMThweDtcbiAgY29sb3I6ICMyMDIwMmM7XG4gIGZsZXgtZ3JvdzogMTtcbiAgdGV4dC1vdmVyZmxvdzogZWxsaXBzaXM7XG4gIHdoaXRlLXNwYWNlOiBub3dyYXA7XG4gIHdpZHRoOiAxNTBweDtcbiAgb3ZlcmZsb3c6IGhpZGRlbjtcbmA7XG4kLmRpdmBcbiAgcGFkZGluZzogNXB4O1xuICBjdXJzb3I6IHBvaW50ZXI7XG5gO1xuY29uc3Qgd18gPSAkLmRpdmBcbiAgd2lkdGg6IDUxcHg7XG4gID4gZGl2IHtcbiAgICBqdXN0aWZ5LWNvbnRlbnQ6IGZsZXgtc3RhcnQ7XG4gIH1cbmA7XG4kLmRpdmBcbiAgd2lkdGg6IDYwcHg7XG4gID4gZGl2IHtcbiAgICBqdXN0aWZ5LWNvbnRlbnQ6IGZsZXgtc3RhcnQ7XG4gIH1cbmA7XG5jb25zdCBKYyA9ICQuZGl2YFxuICBkaXNwbGF5OiBmbGV4O1xuICBqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWJldHdlZW47XG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gIG1hcmdpbi1ib3R0b206IDhweDtcbiAgJjpsYXN0LWNoaWxkIHtcbiAgICBtYXJnaW4tYm90dG9tOiAwO1xuICB9XG5gLCBfYyA9ICQuaDRgXG4gIG1hcmdpbjogMDtcbiAgZm9udC1zaXplOiAxMnB4O1xuICBmb250LXdlaWdodDogNDAwO1xuICBsaW5lLWhlaWdodDogMThweDtcbiAgY29sb3I6ICMyMDIwMmM7XG5gO1xuJC5kaXZgXG4gIC5pbnB1dC13cmFwcGVyIHtcbiAgICAuZGF0ZXBpY2tlci1pbnB1dCB7XG4gICAgICBiYWNrZ3JvdW5kLWNvbG9yOiB0cmFuc3BhcmVudDtcbiAgICAgIHdpZHRoOiA2NnB4O1xuICAgICAgaGVpZ2h0OiBhdXRvO1xuICAgICAgcGFkZGluZzogMnB4IDAgMnB4IDJweCAhaW1wb3J0YW50O1xuICAgICAgdGV4dC1kZWNvcmF0aW9uOiB1bmRlcmxpbmU7XG4gICAgICBjb2xvcjogIzMxMjc4MztcbiAgICAgIGZvbnQtd2VpZ2h0OiA0MDA7XG4gICAgICAmOjpwbGFjZWhvbGRlciB7XG4gICAgICAgIGNvbG9yOiAjMzEyNzgzICFpbXBvcnRhbnQ7XG4gICAgICB9XG4gICAgICAmOmhvdmVyIHtcbiAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogdHJhbnNwYXJlbnQ7XG4gICAgICB9XG4gICAgfVxuICAgIC5pY29uLXN5c3RlbSB7XG4gICAgICBkaXNwbGF5OiBub25lO1xuICAgIH1cbiAgfVxuYDtcbmNvbnN0IGZpID0gJC5kaXYoXG4gICgpID0+IG8xYFxuICAgIGRpc3BsYXk6IGlubGluZS1mbGV4O1xuICAgIGp1c3RpZnktY29udGVudDogY2VudGVyO1xuICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gICAgcGFkZGluZzogNHB4IDZweDtcbiAgICBib3JkZXItcmFkaXVzOiA1NnB4O1xuICAgIGZvbnQtc2l6ZTogMTBweDtcbiAgICBmb250LXdlaWdodDogNTAwO1xuICAgIGhlaWdodDogMTZweDtcbiAgICBib3gtc2l6aW5nOiBib3JkZXItYm94O1xuICAgIGJvcmRlcjogMXB4IHNvbGlkIHRyYW5zcGFyZW50O1xuICBgXG4pLCB4XyA9ICQoZmkpKFxuICAoKSA9PiBvMWBcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjNTA5ZTJmO1xuICAgIGJvcmRlci1jb2xvcjogIzUwOWUyZjtcbiAgICBjb2xvcjogI2ZmZmZmZjtcbiAgYFxuKSwgV18gPSAkKGZpKShcbiAgKCkgPT4gbzFgXG4gICAgYmFja2dyb3VuZC1jb2xvcjogI2YyYTkwMDtcbiAgICBib3JkZXItY29sb3I6ICNmMmE5MDA7XG4gICAgY29sb3I6ICNmZmZmZmY7XG4gIGBcbiksIFJfID0gJChmaSkoXG4gICgpID0+IG8xYFxuICAgIGJhY2tncm91bmQtY29sb3I6ICNkMTM0NGY7XG4gICAgYm9yZGVyLWNvbG9yOiAjZDEzNDRmO1xuICAgIGNvbG9yOiAjZmZmZmZmO1xuICBgXG4pLCBCXyA9ICQoZmkpKFxuICAoKSA9PiBvMWBcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmZmMmYyO1xuICAgIGJvcmRlci1jb2xvcjogI2QxMzQ0ZjtcbiAgICBjb2xvcjogI2QxMzQ0ZjtcbiAgYFxuKSwgV2EgPSB7XG4gIExPVzogXCJsb3dcIixcbiAgTUVESVVNOiBcIm1lZGl1bVwiLFxuICBISUdIOiBcImhpZ2hcIixcbiAgTk9fR086IFwibm9fZ29cIlxufSwgJGMgPSAoe1xuICB0eXBlOiBlLFxuICBjaGlsZHJlbjogdCxcbiAgLi4ub1xufSkgPT4ge1xuICBzd2l0Y2ggKGUpIHtcbiAgICBjYXNlIFdhLkxPVzpcbiAgICAgIHJldHVybiAvKiBAX19QVVJFX18gKi8gYyh4XywgeyAuLi5vLCBjaGlsZHJlbjogdCB8fCBcIkxvd1wiIH0pO1xuICAgIGNhc2UgV2EuTUVESVVNOlxuICAgICAgcmV0dXJuIC8qIEBfX1BVUkVfXyAqLyBjKFdfLCB7IC4uLm8sIGNoaWxkcmVuOiB0IHx8IFwiTWVkaXVtXCIgfSk7XG4gICAgY2FzZSBXYS5ISUdIOlxuICAgICAgcmV0dXJuIC8qIEBfX1BVUkVfXyAqLyBjKFJfLCB7IC4uLm8sIGNoaWxkcmVuOiB0IHx8IFwiSGlnaFwiIH0pO1xuICAgIGRlZmF1bHQ6XG4gICAgICByZXR1cm4gLyogQF9fUFVSRV9fICovIGMoQl8sIHsgLi4ubywgY2hpbGRyZW46IHQgfHwgXCJObyBHb1wiIH0pO1xuICB9XG59LCB2cyA9ICQuZGl2KFxuICAoKSA9PiBvMWBcbiAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG4gICAgd2lkdGg6IDZweDtcbiAgICBoZWlnaHQ6IDZweDtcbiAgICBib3JkZXItcmFkaXVzOiA1MCU7XG4gIGBcbiksIFNfID0gJCh2cykoXG4gICgpID0+IG8xYFxuICAgIGJhY2tncm91bmQtY29sb3I6ICMxMjgwNWM7XG4gIGBcbiksIEVfID0gJCh2cykoXG4gICgpID0+IG8xYFxuICAgIGJhY2tncm91bmQtY29sb3I6ICNiODVjMDA7XG4gIGBcbiksIGtfID0gJCh2cykoXG4gICgpID0+IG8xYFxuICAgIGJhY2tncm91bmQtY29sb3I6ICNkNzM3M2Y7XG4gIGBcbiksIFUzID0ge1xuICBBQ1RJVkU6IFwiYWN0aXZlXCIsXG4gIFBFTkRJTkc6IFwicGVuZGluZ1wiLFxuICBJTkFDVElWRTogXCJpbmFjdGl2ZVwiXG59LCBlbCA9ICh7XG4gIHR5cGU6IGUsXG4gIC4uLnRcbn0pID0+IHtcbiAgc3dpdGNoIChlKSB7XG4gICAgY2FzZSBVMy5BQ1RJVkU6XG4gICAgICByZXR1cm4gLyogQF9fUFVSRV9fICovIGMoU18sIHsgLi4udCB9KTtcbiAgICBjYXNlIFUzLlBFTkRJTkc6XG4gICAgICByZXR1cm4gLyogQF9fUFVSRV9fICovIGMoRV8sIHsgLi4udCB9KTtcbiAgICBjYXNlIFUzLklOQUNUSVZFOlxuICAgIGRlZmF1bHQ6XG4gICAgICByZXR1cm4gLyogQF9fUFVSRV9fICovIGMoa18sIHsgLi4udCB9KTtcbiAgfVxufSwgTl8gPSAkLmRpdihcbiAgKCkgPT4gbzFgXG4gICAgZGlzcGxheTogZmxleDtcbiAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcbiAgICBhbGlnbi1pdGVtczogY2VudGVyO1xuICAgIGZvbnQtc2l6ZTogMTBweDtcbiAgICBsaW5lLWhlaWdodDogMjBweDtcbiAgICBjb2xvcjogIzAwMDAwMDtcbiAgICBmb250LXdlaWdodDogMzAwO1xuXG4gICAgJiA+IGRpdjpmaXJzdC1jaGlsZCB7XG4gICAgICBtYXJnaW4tcmlnaHQ6IDhweDtcbiAgICB9XG4gIGBcbiksIHRsID0gKHtcbiAgdHlwZTogZSxcbiAgaGFzTGFiZWw6IHQgPSAhMCxcbiAgY2hpbGRyZW46IG8sXG4gIGljb25TdHlsZTogbixcbiAgLi4uclxufSkgPT4ge1xuICBpZiAoIXQpXG4gICAgcmV0dXJuIC8qIEBfX1BVUkVfXyAqLyBjKGVsLCB7IHR5cGU6IGUgfSk7XG4gIGxldCBpO1xuICBzd2l0Y2ggKGUpIHtcbiAgICBjYXNlIFUzLkFDVElWRTpcbiAgICAgIGkgPSBcIkFjdGl2ZVwiO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSBVMy5QRU5ESU5HOlxuICAgICAgaSA9IFwiUGVuZGluZ1wiO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSBVMy5JTkFDVElWRTpcbiAgICBkZWZhdWx0OlxuICAgICAgaSA9IFwiSW5hY3RpdmVcIjtcbiAgfVxuICByZXR1cm4gLyogQF9fUFVSRV9fICovIGUxKE5fLCB7IC4uLnIsIGNoaWxkcmVuOiBbXG4gICAgLyogQF9fUFVSRV9fICovIGMoZWwsIHsgdHlwZTogZSwgc3R5bGU6IG4gfSksXG4gICAgbyB8fCBpXG4gIF0gfSk7XG59O1xuJC5kaXZgXG4gIHdpZHRoOiAxMDAlO1xuICBtaW4td2lkdGg6IDEwMHZ3O1xuYDtcbmNvbnN0IFRfID0gJC5kaXYoXG4gICh7IGNvbG9yOiBlID0gXCJpbmhlcml0XCIgfSkgPT4gbzFgXG4gICAgbGluZS1oZWlnaHQ6IDA7XG4gICAgY29sb3I6ICR7ZX07XG5cbiAgICA+IHN2ZyB7XG4gICAgICBwYXRoOiB7XG4gICAgICAgIGZpbGw6IGN1cnJlbnRDb2xvcjtcbiAgICAgIH1cbiAgICB9XG4gIGBcbiksIF9NID0gJChcbiAgVF9cbikoKHsgc2l6ZTogZSB9KSA9PiB7XG4gIGxldCB0O1xuICBzd2l0Y2ggKGUpIHtcbiAgICBjYXNlIFwieHh4eHNcIjpcbiAgICAgIHQgPSBcIjhweFwiO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSBcInh4eHNcIjpcbiAgICAgIHQgPSBcIjEycHhcIjtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgXCJ4eHNcIjpcbiAgICAgIHQgPSBcIjE0cHhcIjtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgXCJ4c1wiOlxuICAgICAgdCA9IFwiMTZweFwiO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSBcInNtXCI6XG4gICAgICB0ID0gXCIyNHB4XCI7XG4gICAgICBicmVhaztcbiAgICBjYXNlIFwibGdcIjpcbiAgICAgIHQgPSBcIjQwcHhcIjtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgXCJ4bFwiOlxuICAgICAgdCA9IFwiNDhweFwiO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSBcIm1kXCI6XG4gICAgZGVmYXVsdDpcbiAgICAgIHQgPSBcIjMycHhcIjtcbiAgfVxuICByZXR1cm4gbzFgXG4gICAgd2lkdGg6ICR7dH07XG5cbiAgICA+IHN2ZyB7XG4gICAgICB3aWR0aDogJHt0fTtcbiAgICB9XG4gIGA7XG59KTtcbiQoX00pYGA7XG4kLmRpdmBcbiAgZGlzcGxheTogaW5saW5lLWZsZXg7XG4gIGhlaWdodDogMTAwdmg7XG4gIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG4gIGZsZXgtd3JhcDogd3JhcDtcbmA7XG4kLmRpdmBcbiAgbWluLXdpZHRoOiAyNTBweDtcbiAgZGlzcGxheTogZmxleDtcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgbWFyZ2luLWJvdHRvbTogMTBweDtcbiAgLmljb24tc3lzdGVtIHtcbiAgICBtYXJnaW4tcmlnaHQ6IDhweDtcbiAgfVxuYDtcbiQuc3BhbmBcbiAgZm9udC1zaXplOiAxNHB4O1xuYDtcbmZ1bmN0aW9uIElfKGUpIHtcbiAgdmFyIHQsIG8sIG4sIHIsIGksIGE7XG4gIHJldHVybiAvKiBAX19QVVJFX18gKi8gYyhcbiAgICBfTSxcbiAgICB7XG4gICAgICByb2xlOiBcImltZ1wiLFxuICAgICAgXCJhcmlhLWxhYmVsXCI6IChuID0gKG8gPSAodCA9IGUgPT0gbnVsbCA/IHZvaWQgMCA6IGUuY2hpbGRyZW4pID09IG51bGwgPyB2b2lkIDAgOiB0Ll9vd25lcikgPT0gbnVsbCA/IHZvaWQgMCA6IG8ubWVtb2l6ZWRQcm9wcykgIT0gbnVsbCAmJiBuLm5hbWUgPyAoYSA9IChpID0gKHIgPSBlID09IG51bGwgPyB2b2lkIDAgOiBlLmNoaWxkcmVuKSA9PSBudWxsID8gdm9pZCAwIDogci5fb3duZXIpID09IG51bGwgPyB2b2lkIDAgOiBpLm1lbW9pemVkUHJvcHMpID09IG51bGwgPyB2b2lkIDAgOiBhLm5hbWUgOiBcIlwiLFxuICAgICAgY2xhc3NOYW1lOiBcImljb24tc3lzdGVtXCIsXG4gICAgICAuLi5lXG4gICAgfVxuICApO1xufVxuY29uc3QgRF8gPSBTcihobCkoSV8pLCB1JCA9ICh7XG4gIG5vZGVIZWFkZXJEYXRhOiBlLFxuICBub2RlQ29udGVudERhdGE6IHRcbn0pID0+IHtcbiAgY29uc3QgW28sIG5dID0gVDEoITEpLCByID0gZS5zdGF0dXMgPT09IFwiUGVuZGluZyBQcm9maWxlXCIgPyBcIlBlbmRpbmdQcm9maWxlXCIgOiBcIkNoZWNrZXJEb25lXCIsIGkgPSAoKSA9PiB7XG4gICAgbighbyk7XG4gIH0sIGEgPSAocywgbCkgPT4ge1xuICAgIGNvbnN0IHAgPSBsLmZpbmQoKGQpID0+IGQudGl0bGUgPT09IHMpO1xuICAgIGlmIChwICYmIHAuc3ViSXRlbXMpIHtcbiAgICAgIGNvbnN0IHsgc3ViSXRlbXM6IGQgfSA9IHA7XG4gICAgICBzd2l0Y2ggKHMpIHtcbiAgICAgICAgY2FzZSBcIkZpbGUgcmV2aWV3XCI6XG4gICAgICAgICAgcmV0dXJuIC8qIEBfX1BVUkVfXyAqLyBlMShcImRpdlwiLCB7IGNoaWxkcmVuOiBbXG4gICAgICAgICAgICAvKiBAX19QVVJFX18gKi8gZTEoSmMsIHsgY2hpbGRyZW46IFtcbiAgICAgICAgICAgICAgLyogQF9fUFVSRV9fICovIGMoS2MsIHsgY2hpbGRyZW46IFwiTGFzdCByZXZpZXcgZGF0ZSBcIiB9KSxcbiAgICAgICAgICAgICAgLyogQF9fUFVSRV9fICovIGMoX2MsIHsgY2hpbGRyZW46IGQubGFzdFJldmlld0RhdGUgfSlcbiAgICAgICAgICAgIF0gfSksXG4gICAgICAgICAgICAvKiBAX19QVVJFX18gKi8gZTEoSmMsIHsgY2hpbGRyZW46IFtcbiAgICAgICAgICAgICAgLyogQF9fUFVSRV9fICovIGMoS2MsIHsgY2hpbGRyZW46IFwiTmV4dCByZXZpZXcgZGF0ZSBcIiB9KSxcbiAgICAgICAgICAgICAgLyogQF9fUFVSRV9fICovIGMoX2MsIHsgY2hpbGRyZW46IGQubmV4dFJldmlld0RhdGUgfSlcbiAgICAgICAgICAgIF0gfSlcbiAgICAgICAgICBdIH0pO1xuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIHJldHVybiAvKiBAX19QVVJFX18gKi8gYyhzMCwge30pO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gLyogQF9fUFVSRV9fICovIGMoczAsIHt9KTtcbiAgfTtcbiAgcmV0dXJuIC8qIEBfX1BVUkVfXyAqLyBlMShNXywgeyBjYXJkVHlwZTogciwgaXNFeHBhbmRlZDogbywgY2hpbGRyZW46IFtcbiAgICAvKiBAX19QVVJFX18gKi8gZTEoQV8sIHsgY2hpbGRyZW46IFtcbiAgICAgIC8qIEBfX1BVUkVfXyAqLyBlMSh1XywgeyBjaGlsZHJlbjogW1xuICAgICAgICAvKiBAX19QVVJFX18gKi8gYyh6XywgeyBjaGlsZHJlbjogXCJGaWxlIHJldmlldyBzdGF0dXNcIiB9KSxcbiAgICAgICAgLyogQF9fUFVSRV9fICovIGUxKGhfLCB7IGNoaWxkcmVuOiBbXG4gICAgICAgICAgXCJQZW5kaW5nIHByb2ZpbGVzXCIsXG4gICAgICAgICAgXCIgXCIsXG4gICAgICAgICAgLyogQF9fUFVSRV9fICovIGMoXG4gICAgICAgICAgICAkYyxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgdHlwZTogZS5wZW5kaW5nUHJvZmlsZUNvdW50IDwgMSA/IFwibG93XCIgOiBcIm1lZGl1bVwiLFxuICAgICAgICAgICAgICBjaGlsZHJlbjogZS5wZW5kaW5nUHJvZmlsZUNvdW50LnRvU3RyaW5nKClcbiAgICAgICAgICAgIH1cbiAgICAgICAgICApXG4gICAgICAgIF0gfSlcbiAgICAgIF0gfSksXG4gICAgICAvKiBAX19QVVJFX18gKi8gZTEoT18sIHsgY2hpbGRyZW46IFtcbiAgICAgICAgLyogQF9fUFVSRV9fICovIGMoXG4gICAgICAgICAgJGMsXG4gICAgICAgICAge1xuICAgICAgICAgICAgdHlwZTogZS5zdGF0dXMgPT09IFwiQ2hlY2tlciBEb25lXCIgPyBcImxvd1wiIDogXCJtZWRpdW1cIixcbiAgICAgICAgICAgIGNoaWxkcmVuOiBlLnN0YXR1c1xuICAgICAgICAgIH1cbiAgICAgICAgKSxcbiAgICAgICAgLyogQF9fUFVSRV9fICovIGMoXG4gICAgICAgICAgdGwsXG4gICAgICAgICAge1xuICAgICAgICAgICAgdHlwZTogZS5wcm9ncmVzcy50b0xvd2VyQ2FzZSgpLFxuICAgICAgICAgICAgY2hpbGRyZW46IGUucHJvZ3Jlc3NcbiAgICAgICAgICB9XG4gICAgICAgIClcbiAgICAgIF0gfSksXG4gICAgICAvKiBAX19QVVJFX18gKi8gYyhmXywgeyBjaGlsZHJlbjogLyogQF9fUFVSRV9fICovIGMoZ18sIHsgb25DbGljazogaSwgaXNFeHBhbmRlZDogbywgY2hpbGRyZW46IC8qIEBfX1BVUkVfXyAqLyBjKERfLCB7IG5hbWU6IFwiQ2hldnJvbkRvd25cIiwgc2l6ZTogXCJ4c1wiIH0pIH0pIH0pXG4gICAgXSB9KSxcbiAgICAvKiBAX19QVVJFX18gKi8gYyhtXywgeyBpc0V4cGFuZGVkOiBvLCBjaGlsZHJlbjogbyAmJiAvKiBAX19QVVJFX18gKi8gYyhDXywgeyBjaGlsZHJlbjogLyogQF9fUFVSRV9fICovIGMoczAsIHsgY2hpbGRyZW46IHQubWFwKChzLCBsKSA9PiAvKiBAX19QVVJFX18gKi8gYyhcImRpdlwiLCB7IGNoaWxkcmVuOiAvKiBAX19QVVJFX18gKi8gZTEoTF8sIHsgY2hpbGRyZW46IFtcbiAgICAgIC8qIEBfX1BVUkVfXyAqLyBlMSh2XywgeyBjaGlsZHJlbjogW1xuICAgICAgICAvKiBAX19QVVJFX18gKi8gYyhxXywgeyBjaGlsZHJlbjogcy50aXRsZSB9KSxcbiAgICAgICAgLyogQF9fUFVSRV9fICovIGMod18sIHsgY2hpbGRyZW46IC8qIEBfX1BVUkVfXyAqLyBjKFxuICAgICAgICAgIHRsLFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIHR5cGU6IHMuc3RhdHVzID09PSBcIkR1ZVwiID8gXCJwZW5kaW5nXCIgOiBcImFjdGl2ZVwiLFxuICAgICAgICAgICAgY2hpbGRyZW46IHMuc3RhdHVzXG4gICAgICAgICAgfVxuICAgICAgICApIH0pXG4gICAgICBdIH0pLFxuICAgICAgT2JqZWN0LmtleXMocy5zdWJJdGVtcykubGVuZ3RoICE9PSAwICYmIC8qIEBfX1BVUkVfXyAqLyBjKHlfLCB7IGNoaWxkcmVuOiBhKHMudGl0bGUsIHQpIH0pXG4gICAgXSB9KSB9LCBsKSkgfSkgfSkgfSlcbiAgXSB9KTtcbn0sIEhfID0gJC5hKFxuICAoeyB0aGVtZTogZSwgJGlzRGlzYWJsZWQ6IHQgfSkgPT4ge1xuICAgIGNvbnN0IHsgY29sb3JzOiBvLCBmb250V2VpZ2h0OiBuLCB0eXBvZ3JhcGh5OiByLCBsaW5lSGVpZ2h0OiBpIH0gPSBlO1xuICAgIHJldHVybiBvMWBcbiAgICAgIGZvbnQtc2l6ZTogJHtyLnQxMn07XG4gICAgICBmb250LXdlaWdodDogJHtuLnJlZ3VsYXJ9O1xuICAgICAgbGluZS1oZWlnaHQ6ICR7aS5saDI0fTtcbiAgICAgIGNvbG9yOiAke28udGV4dEljb24udGV4dEh5cGVybGlua307XG4gICAgICBwYWRkaW5nOiAwIDAuNzVyZW07XG4gICAgICB0ZXh0LWRlY29yYXRpb246IG5vbmU7XG5cbiAgICAgICY6YWN0aXZlIHtcbiAgICAgICAgY29sb3I6ICR7by5idXR0b25UZXh0LmJ1dHRvblRleHRsaW5rUHJlc3NlZH0gIWltcG9ydGFudDtcbiAgICAgIH1cbiAgICAgICY6aG92ZXIge1xuICAgICAgICBjb2xvcjogJHtvLnRleHRJY29uLnRleHRIb3Zlcn07XG4gICAgICB9XG4gICAgICAmOmZvY3VzLXZpc2libGUge1xuICAgICAgICBjb2xvcjogJHtvLnRleHRJY29uLnRleHRIb3Zlcn07XG4gICAgICAgIG91dGxpbmU6IG5vbmU7XG4gICAgICB9XG4gICAgICAke3QgJiYgbzFgXG4gICAgICAgIHBvaW50ZXItZXZlbnRzOiBub25lO1xuICAgICAgICBjb2xvcjogJHtvLnRleHRJY29uLnRleHREaXNhYmxlZE5vYmd9O1xuICAgICAgYH1cbiAgICBgO1xuICB9XG4pO1xuJC5kaXZgXG4gIHBhZGRpbmc6IDMycHg7XG5gO1xuY29uc3QgeiQgPSAoe1xuICB0ZXh0OiBlLFxuICBpc0Rpc2FibGVkOiB0LFxuICAuLi5vXG59KSA9PiAvKiBAX19QVVJFX18gKi8gYyhIXywgeyAkaXNEaXNhYmxlZDogdCwgLi4ubywgY2hpbGRyZW46IGUgfSksIFZfID0gJC5kaXYoXG4gICh7IHRoZW1lOiB7fSwgbW9kZTogZSB9KSA9PiBvMWBcbiAgICAke2UgPT0gXCJjc2NCbHVlRGFya1wiICYmIG8xYFxuICAgICAgYmFja2dyb3VuZDogJHtJYi5iYWNrZ3JvdW5kcy5iZ1ByaW1hcnl9O1xuICAgIGB9XG4gIGBcbiksIGgkID0gKHtcbiAgY2hpbGRyZW46IGUsXG4gIGluaXRpYWw6IHQgPSBcImNzY0JsdWVMaWdodFwiLFxuICBnZW5lcmljVGhlbWVDYWxsYmFjazogb1xufSkgPT4ge1xuICBjb25zdCBbbiwgcl0gPSBUMSh0KTtcbiAgUDEoKCkgPT4ge1xuICAgIGxldCBhID0gbG9jYWxTdG9yYWdlLmdldEl0ZW0oXCJVSUtpdDpUaGVtZVZhbHVlXCIpO1xuICAgIGEgJiYgcihhKTtcbiAgfSwgW10pO1xuICBjb25zdCBpID0gXzEoKCkgPT4ge1xuICAgIGxldCBhID0ge1xuICAgICAgY29sb3JzOiB7XG4gICAgICAgIC4uLnYyLFxuICAgICAgICAuLi5ycixcbiAgICAgICAgYmFja2dyb3VuZHM6IHtcbiAgICAgICAgICAuLi52Mi5iYWNrZ3JvdW5kcyxcbiAgICAgICAgICAuLi5yci5iYWNrZ3JvdW5kc1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSwgcyA9IHtcbiAgICAgIGNvbG9yczoge1xuICAgICAgICAuLi52MixcbiAgICAgICAgLi4ubzQsXG4gICAgICAgIGJhY2tncm91bmRzOiB7XG4gICAgICAgICAgLi4udjIuYmFja2dyb3VuZHMsXG4gICAgICAgICAgLi4ubzQuYmFja2dyb3VuZHNcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0sIGwgPSBhO1xuICAgIG4gPT0gXCJjc2NCbHVlTGlnaHRcIiA/IGwgPSBhIDogbiA9PSBcImNzY0JsdWVEYXJrXCIgJiYgKGwgPSBzKTtcbiAgICBsZXQgcCA9IHtcbiAgICAgIC4uLlRuLFxuICAgICAgLi4ubFxuICAgIH07XG4gICAgcmV0dXJuIHAgJiYgbyA/IG8ocCkgOiBwO1xuICB9LCBbbl0pO1xuICByZXR1cm4gLyogQF9fUFVSRV9fICovIGMoajYuUHJvdmlkZXIsIHsgdmFsdWU6IHsgdGhlbWVWYWx1ZTogbiwgc2V0VGhlbWVWYWx1ZTogciB9LCBjaGlsZHJlbjogLyogQF9fUFVSRV9fICovIGMoVl8sIHsgbW9kZTogbiwgY2hpbGRyZW46IC8qIEBfX1BVUkVfXyAqLyBjKG5BLCB7IHRoZW1lOiBpKCksIGNoaWxkcmVuOiBlIH0pIH0pIH0pO1xufTtcbmV4cG9ydCB7XG4gIFVfIGFzIEFjY29yZGlvbixcbiAgSkQgYXMgQWN0aW9uQmFyLFxuICBZXyBhcyBBY3Rpb25CdXR0b24sXG4gIEdfIGFzIEFsZXJ0LFxuICB6ciBhcyBBdmF0YXIsXG4gIEFlIGFzIEJhZGdlLFxuICBhSCBhcyBCcmVhZGNydW1icyxcbiAgQjIgYXMgQnV0dG9uLFxuICBYNiBhcyBCdXR0b25JY29uLFxuICBRXyBhcyBCdXR0b25Qcm9jZXNzLFxuICBmNCBhcyBDZWxsLFxuICB5dCBhcyBDaGVja2JveCxcbiAgZGIgYXMgQ2xpZW50UGlja2VyLFxuICBoNSBhcyBDb2xsYXBzZSxcbiAgWl8gYXMgQ29tbWVudHMsXG4gIGpfIGFzIENvbnRleHRNZW51LFxuICBLXyBhcyBEYXRhVGFibGUsXG4gIEpfIGFzIERhdGVQaWNrZXIsXG4gIFAyIGFzIERpdmlkZXIsXG4gIF9fIGFzIERyYWdBbmREcm9wLFxuICBpdCBhcyBEcm9wZG93bixcbiAgdHQgYXMgRHJvcGRvd25TZWxlY3QsXG4gIGdaIGFzIEVudGl0eVBpY2tlcixcbiAgdSQgYXMgRmlsZVN0YXR1c05vZGUsXG4gIFhsIGFzIEZpbHRlckFtb3VudCxcbiAgWXEgYXMgRmlsdGVyQm94QW1vdW50LFxuICBfQiBhcyBGaWx0ZXJCb3hEYXRlUmFuZ2UsXG4gIEdpIGFzIEZpbHRlckJveFNlbGVjdCxcbiAgaDggYXMgRmlsdGVyQm94VGV4dElucHV0LFxuICBEcCBhcyBGaWx0ZXJEYXRlUmFuZ2UsXG4gIEduIGFzIEZpbHRlclNlbGVjdCxcbiAgSWEgYXMgRmlsdGVyVGV4dElucHV0LFxuICBzbyBhcyBHcmlkLFxuICBWbyBhcyBIZWFkZXJJY29uLFxuICB6JCBhcyBIeXBlckxpbmssXG4gIFoxIGFzIEljb24sXG4gIEcyIGFzIEljb25CdXR0b24sXG4gIFRiIGFzIEljb25EZXRhaWxlZCxcbiAgWTIgYXMgSW5wdXQsXG4gIFJMIGFzIElucHV0SWNvbixcbiAgVkwgYXMgSW5wdXRMaW1pdCxcbiAgJF8gYXMgSW5wdXRVcGxvYWRlcixcbiAgaCQgYXMgSW50ZXJ0cnVzdFRoZW1lUHJvdmlkZXIsXG4gIGR0IGFzIExpc3QsXG4gIFRwIGFzIExvYWRlcixcbiAgdXIgYXMgTG9nbyxcbiAga00gYXMgTWVudSxcbiAgVFogYXMgTWVudUl0ZW0sXG4gIGUkIGFzIE1ldGFiYXIsXG4gIHQkIGFzIE1ldHJpYyxcbiAgQ1MgYXMgTW9kYWwsXG4gIE1qIGFzIE5hdmJhcixcbiAgTVMgYXMgT3ZlcmxheSxcbiAgbyQgYXMgT3ZlcmxheVBhbmVsLFxuICByJCBhcyBQYWdlSGVhZGVyLFxuICBuJCBhcyBQYWdlTG9hZGVyLFxuICBpJCBhcyBQaG9uZUlucHV0LFxuICBMbCBhcyBQb3J0YWwsXG4gIEM0IGFzIFByb2dyZXNzQmFyLFxuICBhJCBhcyBQdXNoUGFuZWwsXG4gIEFuIGFzIFJhZGlvLFxuICBzJCBhcyBSaWJib25JbWFnZSxcbiAgbzUgYXMgUmlza0luZGljYXRvcixcbiAgYjMgYXMgUm91bmRlZEJ1dHRvbixcbiAgajQgYXMgU2Nyb2xsQmFyLFxuICBHNCBhcyBTZWFyY2gsXG4gIGMkIGFzIFNlYXJjaEF1dG9jb21wbGV0ZSxcbiAgaWUgYXMgU2tlbGV0b24sXG4gIFZxIGFzIFNsaWRlcixcbiAgbCQgYXMgU3Bpbm5lcixcbiAgbTQgYXMgU3RhdHVzSW5kaWNhdG9yLFxuICBJSiBhcyBTdGVwQmFzZSxcbiAgcCQgYXMgU3RlcHBlcixcbiAgTVUgYXMgU3dpdGNoLFxuICBuVSBhcyBUYWJsZSxcbiAgeFAgYXMgVGFibGVQYWdpbmF0aW9uLFxuICBkJCBhcyBUYWJsZVRhYnMsXG4gIEdKIGFzIFRhYnMsXG4gIEJqIGFzIFRhYnNDb250cm9sbGVyLFxuICBYTSBhcyBUYWJzSG9yaXpvbnRhbCxcbiAgVXAgYXMgVGFic1ZlcnRpY2FsLFxuICBBJCBhcyBUaW1lbGluZSxcbiAgYiQgYXMgVG9hc3QsXG4gIGNVIGFzIFRvZ2dsZSxcbiAgQTMgYXMgVG9vbHRpcCxcbiAgTSQgYXMgVG9wYmFyLFxuICBuciBhcyBUeXBvZ3JhcGh5LFxuICBSUCBhcyBhbW91bnRSYW5nZUZpbHRlcixcbiAgV1AgYXMgZGF0ZVJhbmdlRmlsdGVyLFxuICBTUCBhcyBnZXRNYXhBbmRNaW5Gcm9tQXJyYXksXG4gIEJQIGFzIHJlb3JkZXJPYmplY3RBcnJheSxcbiAgcm8gYXMgdGhlbWUsXG4gIGZhIGFzIHRyYW5zZm9ybVRvRHJvcGRvd25EYXRhLFxuICBVNSBhcyB1c2VPdXRzaWRlQ2xpY2ssXG4gIGlvIGFzIHVzZVRvZ2dsZVxufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///71793\n')},72264:function(__unused_webpack_module,__unused_webpack_exports,__webpack_require__){eval("//! moment.js locale configuration\n//! locale : Burmese [my]\n//! author : Squar team, mysquar.com\n//! author : David Rossellat : https://github.com/gholadr\n//! author : Tin Aung Lin : https://github.com/thanyawzinmin\n\n;(function (global, factory) {\n true ? factory(__webpack_require__(95093)) :\n 0\n}(this, (function (moment) { 'use strict';\n\n //! moment.js locale configuration\n\n var symbolMap = {\n 1: '၁',\n 2: '၂',\n 3: '၃',\n 4: '၄',\n 5: '၅',\n 6: '၆',\n 7: '၇',\n 8: '၈',\n 9: '၉',\n 0: '၀',\n },\n numberMap = {\n '၁': '1',\n '၂': '2',\n '၃': '3',\n '၄': '4',\n '၅': '5',\n '၆': '6',\n '၇': '7',\n '၈': '8',\n '၉': '9',\n '၀': '0',\n };\n\n var my = moment.defineLocale('my', {\n months: 'ဇန်နဝါရီ_ဖေဖော်ဝါရီ_မတ်_ဧပြီ_မေ_ဇွန်_ဇူလိုင်_သြဂုတ်_စက်တင်ဘာ_အောက်တိုဘာ_နိုဝင်ဘာ_ဒီဇင်ဘာ'.split(\n '_'\n ),\n monthsShort: 'ဇန်_ဖေ_မတ်_ပြီ_မေ_ဇွန်_လိုင်_သြ_စက်_အောက်_နို_ဒီ'.split('_'),\n weekdays: 'တနင်္ဂနွေ_တနင်္လာ_အင်္ဂါ_ဗုဒ္ဓဟူး_ကြာသပတေး_သောကြာ_စနေ'.split(\n '_'\n ),\n weekdaysShort: 'နွေ_လာ_ဂါ_ဟူး_ကြာ_သော_နေ'.split('_'),\n weekdaysMin: 'နွေ_လာ_ဂါ_ဟူး_ကြာ_သော_နေ'.split('_'),\n\n longDateFormat: {\n LT: 'HH:mm',\n LTS: 'HH:mm:ss',\n L: 'DD/MM/YYYY',\n LL: 'D MMMM YYYY',\n LLL: 'D MMMM YYYY HH:mm',\n LLLL: 'dddd D MMMM YYYY HH:mm',\n },\n calendar: {\n sameDay: '[ယနေ.] LT [မှာ]',\n nextDay: '[မနက်ဖြန်] LT [မှာ]',\n nextWeek: 'dddd LT [မှာ]',\n lastDay: '[မနေ.က] LT [မှာ]',\n lastWeek: '[ပြီးခဲ့သော] dddd LT [မှာ]',\n sameElse: 'L',\n },\n relativeTime: {\n future: 'လာမည့် %s မှာ',\n past: 'လွန်ခဲ့သော %s က',\n s: 'စက္ကန်.အနည်းငယ်',\n ss: '%d စက္ကန့်',\n m: 'တစ်မိနစ်',\n mm: '%d မိနစ်',\n h: 'တစ်နာရီ',\n hh: '%d နာရီ',\n d: 'တစ်ရက်',\n dd: '%d ရက်',\n M: 'တစ်လ',\n MM: '%d လ',\n y: 'တစ်နှစ်',\n yy: '%d နှစ်',\n },\n preparse: function (string) {\n return string.replace(/[၁၂၃၄၅၆၇၈၉၀]/g, function (match) {\n return numberMap[match];\n });\n },\n postformat: function (string) {\n return string.replace(/\\d/g, function (match) {\n return symbolMap[match];\n });\n },\n week: {\n dow: 1, // Monday is the first day of the week.\n doy: 4, // The week that contains Jan 4th is the first week of the year.\n },\n });\n\n return my;\n\n})));\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNzIyNjQuanMiLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9pdGctbmV4dGdlbi1mcm9udGVuZC8uL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL215LmpzPzg2ODkiXSwic291cmNlc0NvbnRlbnQiOlsiLy8hIG1vbWVudC5qcyBsb2NhbGUgY29uZmlndXJhdGlvblxuLy8hIGxvY2FsZSA6IEJ1cm1lc2UgW215XVxuLy8hIGF1dGhvciA6IFNxdWFyIHRlYW0sIG15c3F1YXIuY29tXG4vLyEgYXV0aG9yIDogRGF2aWQgUm9zc2VsbGF0IDogaHR0cHM6Ly9naXRodWIuY29tL2dob2xhZHJcbi8vISBhdXRob3IgOiBUaW4gQXVuZyBMaW4gOiBodHRwczovL2dpdGh1Yi5jb20vdGhhbnlhd3ppbm1pblxuXG47KGZ1bmN0aW9uIChnbG9iYWwsIGZhY3RvcnkpIHtcbiAgIHR5cGVvZiBleHBvcnRzID09PSAnb2JqZWN0JyAmJiB0eXBlb2YgbW9kdWxlICE9PSAndW5kZWZpbmVkJ1xuICAgICAgICYmIHR5cGVvZiByZXF1aXJlID09PSAnZnVuY3Rpb24nID8gZmFjdG9yeShyZXF1aXJlKCcuLi9tb21lbnQnKSkgOlxuICAgdHlwZW9mIGRlZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiBkZWZpbmUuYW1kID8gZGVmaW5lKFsnLi4vbW9tZW50J10sIGZhY3RvcnkpIDpcbiAgIGZhY3RvcnkoZ2xvYmFsLm1vbWVudClcbn0odGhpcywgKGZ1bmN0aW9uIChtb21lbnQpIHsgJ3VzZSBzdHJpY3QnO1xuXG4gICAgLy8hIG1vbWVudC5qcyBsb2NhbGUgY29uZmlndXJhdGlvblxuXG4gICAgdmFyIHN5bWJvbE1hcCA9IHtcbiAgICAgICAgICAgIDE6ICfhgYEnLFxuICAgICAgICAgICAgMjogJ+GBgicsXG4gICAgICAgICAgICAzOiAn4YGDJyxcbiAgICAgICAgICAgIDQ6ICfhgYQnLFxuICAgICAgICAgICAgNTogJ+GBhScsXG4gICAgICAgICAgICA2OiAn4YGGJyxcbiAgICAgICAgICAgIDc6ICfhgYcnLFxuICAgICAgICAgICAgODogJ+GBiCcsXG4gICAgICAgICAgICA5OiAn4YGJJyxcbiAgICAgICAgICAgIDA6ICfhgYAnLFxuICAgICAgICB9LFxuICAgICAgICBudW1iZXJNYXAgPSB7XG4gICAgICAgICAgICAn4YGBJzogJzEnLFxuICAgICAgICAgICAgJ+GBgic6ICcyJyxcbiAgICAgICAgICAgICfhgYMnOiAnMycsXG4gICAgICAgICAgICAn4YGEJzogJzQnLFxuICAgICAgICAgICAgJ+GBhSc6ICc1JyxcbiAgICAgICAgICAgICfhgYYnOiAnNicsXG4gICAgICAgICAgICAn4YGHJzogJzcnLFxuICAgICAgICAgICAgJ+GBiCc6ICc4JyxcbiAgICAgICAgICAgICfhgYknOiAnOScsXG4gICAgICAgICAgICAn4YGAJzogJzAnLFxuICAgICAgICB9O1xuXG4gICAgdmFyIG15ID0gbW9tZW50LmRlZmluZUxvY2FsZSgnbXknLCB7XG4gICAgICAgIG1vbnRoczogJ+GAh+GAlOGAuuGAlOGAneGAq+GAm+GArl/hgJbhgLHhgJbhgLHhgKzhgLrhgJ3hgKvhgJvhgK5f4YCZ4YCQ4YC6X+GAp+GAleGAvOGArl/hgJnhgLFf4YCH4YC94YCU4YC6X+GAh+GAsOGAnOGAreGAr+GAhOGAul/hgJ7hgLzhgILhgK/hgJDhgLpf4YCF4YCA4YC64YCQ4YCE4YC64YCY4YCsX+GAoeGAseGArOGAgOGAuuGAkOGAreGAr+GAmOGArF/hgJThgK3hgK/hgJ3hgIThgLrhgJjhgKxf4YCS4YCu4YCH4YCE4YC64YCY4YCsJy5zcGxpdChcbiAgICAgICAgICAgICdfJ1xuICAgICAgICApLFxuICAgICAgICBtb250aHNTaG9ydDogJ+GAh+GAlOGAul/hgJbhgLFf4YCZ4YCQ4YC6X+GAleGAvOGArl/hgJnhgLFf4YCH4YC94YCU4YC6X+GAnOGAreGAr+GAhOGAul/hgJ7hgLxf4YCF4YCA4YC6X+GAoeGAseGArOGAgOGAul/hgJThgK3hgK9f4YCS4YCuJy5zcGxpdCgnXycpLFxuICAgICAgICB3ZWVrZGF5czogJ+GAkOGAlOGAhOGAuuGAueGAguGAlOGAveGAsV/hgJDhgJThgIThgLrhgLnhgJzhgKxf4YCh4YCE4YC64YC54YCC4YCrX+GAl+GAr+GAkuGAueGAk+GAn+GAsOGAuF/hgIDhgLzhgKzhgJ7hgJXhgJDhgLHhgLhf4YCe4YCx4YCs4YCA4YC84YCsX+GAheGAlOGAsScuc3BsaXQoXG4gICAgICAgICAgICAnXydcbiAgICAgICAgKSxcbiAgICAgICAgd2Vla2RheXNTaG9ydDogJ+GAlOGAveGAsV/hgJzhgKxf4YCC4YCrX+GAn+GAsOGAuF/hgIDhgLzhgKxf4YCe4YCx4YCsX+GAlOGAsScuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXNNaW46ICfhgJThgL3hgLFf4YCc4YCsX+GAguGAq1/hgJ/hgLDhgLhf4YCA4YC84YCsX+GAnuGAseGArF/hgJThgLEnLnNwbGl0KCdfJyksXG5cbiAgICAgICAgbG9uZ0RhdGVGb3JtYXQ6IHtcbiAgICAgICAgICAgIExUOiAnSEg6bW0nLFxuICAgICAgICAgICAgTFRTOiAnSEg6bW06c3MnLFxuICAgICAgICAgICAgTDogJ0REL01NL1lZWVknLFxuICAgICAgICAgICAgTEw6ICdEIE1NTU0gWVlZWScsXG4gICAgICAgICAgICBMTEw6ICdEIE1NTU0gWVlZWSBISDptbScsXG4gICAgICAgICAgICBMTExMOiAnZGRkZCBEIE1NTU0gWVlZWSBISDptbScsXG4gICAgICAgIH0sXG4gICAgICAgIGNhbGVuZGFyOiB7XG4gICAgICAgICAgICBzYW1lRGF5OiAnW+GAmuGAlOGAsS5dIExUIFvhgJnhgL7hgKxdJyxcbiAgICAgICAgICAgIG5leHREYXk6ICdb4YCZ4YCU4YCA4YC64YCW4YC84YCU4YC6XSBMVCBb4YCZ4YC+4YCsXScsXG4gICAgICAgICAgICBuZXh0V2VlazogJ2RkZGQgTFQgW+GAmeGAvuGArF0nLFxuICAgICAgICAgICAgbGFzdERheTogJ1vhgJnhgJThgLEu4YCAXSBMVCBb4YCZ4YC+4YCsXScsXG4gICAgICAgICAgICBsYXN0V2VlazogJ1vhgJXhgLzhgK7hgLjhgIHhgLLhgLfhgJ7hgLHhgKxdIGRkZGQgTFQgW+GAmeGAvuGArF0nLFxuICAgICAgICAgICAgc2FtZUVsc2U6ICdMJyxcbiAgICAgICAgfSxcbiAgICAgICAgcmVsYXRpdmVUaW1lOiB7XG4gICAgICAgICAgICBmdXR1cmU6ICfhgJzhgKzhgJnhgIrhgLrhgLcgJXMg4YCZ4YC+4YCsJyxcbiAgICAgICAgICAgIHBhc3Q6ICfhgJzhgL3hgJThgLrhgIHhgLLhgLfhgJ7hgLHhgKwgJXMg4YCAJyxcbiAgICAgICAgICAgIHM6ICfhgIXhgIDhgLnhgIDhgJThgLou4YCh4YCU4YCK4YC64YC44YCE4YCa4YC6JyxcbiAgICAgICAgICAgIHNzOiAnJWQg4YCF4YCA4YC54YCA4YCU4YC34YC6JyxcbiAgICAgICAgICAgIG06ICfhgJDhgIXhgLrhgJnhgK3hgJThgIXhgLonLFxuICAgICAgICAgICAgbW06ICclZCDhgJnhgK3hgJThgIXhgLonLFxuICAgICAgICAgICAgaDogJ+GAkOGAheGAuuGAlOGArOGAm+GAricsXG4gICAgICAgICAgICBoaDogJyVkIOGAlOGArOGAm+GAricsXG4gICAgICAgICAgICBkOiAn4YCQ4YCF4YC64YCb4YCA4YC6JyxcbiAgICAgICAgICAgIGRkOiAnJWQg4YCb4YCA4YC6JyxcbiAgICAgICAgICAgIE06ICfhgJDhgIXhgLrhgJwnLFxuICAgICAgICAgICAgTU06ICclZCDhgJwnLFxuICAgICAgICAgICAgeTogJ+GAkOGAheGAuuGAlOGAvuGAheGAuicsXG4gICAgICAgICAgICB5eTogJyVkIOGAlOGAvuGAheGAuicsXG4gICAgICAgIH0sXG4gICAgICAgIHByZXBhcnNlOiBmdW5jdGlvbiAoc3RyaW5nKSB7XG4gICAgICAgICAgICByZXR1cm4gc3RyaW5nLnJlcGxhY2UoL1vhgYHhgYLhgYPhgYThgYXhgYbhgYfhgYjhgYnhgYBdL2csIGZ1bmN0aW9uIChtYXRjaCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBudW1iZXJNYXBbbWF0Y2hdO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0sXG4gICAgICAgIHBvc3Rmb3JtYXQ6IGZ1bmN0aW9uIChzdHJpbmcpIHtcbiAgICAgICAgICAgIHJldHVybiBzdHJpbmcucmVwbGFjZSgvXFxkL2csIGZ1bmN0aW9uIChtYXRjaCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBzeW1ib2xNYXBbbWF0Y2hdO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0sXG4gICAgICAgIHdlZWs6IHtcbiAgICAgICAgICAgIGRvdzogMSwgLy8gTW9uZGF5IGlzIHRoZSBmaXJzdCBkYXkgb2YgdGhlIHdlZWsuXG4gICAgICAgICAgICBkb3k6IDQsIC8vIFRoZSB3ZWVrIHRoYXQgY29udGFpbnMgSmFuIDR0aCBpcyB0aGUgZmlyc3Qgd2VlayBvZiB0aGUgeWVhci5cbiAgICAgICAgfSxcbiAgICB9KTtcblxuICAgIHJldHVybiBteTtcblxufSkpKTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///72264\n")},72475:function(__unused_webpack_module,__unused_webpack_exports,__webpack_require__){eval("//! moment.js locale configuration\n//! locale : Uzbek Latin [uz-latn]\n//! author : Rasulbek Mirzayev : github.com/Rasulbeeek\n\n;(function (global, factory) {\n true ? factory(__webpack_require__(95093)) :\n 0\n}(this, (function (moment) { 'use strict';\n\n //! moment.js locale configuration\n\n var uzLatn = moment.defineLocale('uz-latn', {\n months: 'Yanvar_Fevral_Mart_Aprel_May_Iyun_Iyul_Avgust_Sentabr_Oktabr_Noyabr_Dekabr'.split(\n '_'\n ),\n monthsShort: 'Yan_Fev_Mar_Apr_May_Iyun_Iyul_Avg_Sen_Okt_Noy_Dek'.split('_'),\n weekdays:\n 'Yakshanba_Dushanba_Seshanba_Chorshanba_Payshanba_Juma_Shanba'.split(\n '_'\n ),\n weekdaysShort: 'Yak_Dush_Sesh_Chor_Pay_Jum_Shan'.split('_'),\n weekdaysMin: 'Ya_Du_Se_Cho_Pa_Ju_Sha'.split('_'),\n longDateFormat: {\n LT: 'HH:mm',\n LTS: 'HH:mm:ss',\n L: 'DD/MM/YYYY',\n LL: 'D MMMM YYYY',\n LLL: 'D MMMM YYYY HH:mm',\n LLLL: 'D MMMM YYYY, dddd HH:mm',\n },\n calendar: {\n sameDay: '[Bugun soat] LT [da]',\n nextDay: '[Ertaga] LT [da]',\n nextWeek: 'dddd [kuni soat] LT [da]',\n lastDay: '[Kecha soat] LT [da]',\n lastWeek: \"[O'tgan] dddd [kuni soat] LT [da]\",\n sameElse: 'L',\n },\n relativeTime: {\n future: 'Yaqin %s ichida',\n past: 'Bir necha %s oldin',\n s: 'soniya',\n ss: '%d soniya',\n m: 'bir daqiqa',\n mm: '%d daqiqa',\n h: 'bir soat',\n hh: '%d soat',\n d: 'bir kun',\n dd: '%d kun',\n M: 'bir oy',\n MM: '%d oy',\n y: 'bir yil',\n yy: '%d yil',\n },\n week: {\n dow: 1, // Monday is the first day of the week.\n doy: 7, // The week that contains Jan 7th is the first week of the year.\n },\n });\n\n return uzLatn;\n\n})));\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNzI0NzUuanMiLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vaXRnLW5leHRnZW4tZnJvbnRlbmQvLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS91ei1sYXRuLmpzPzAxMGUiXSwic291cmNlc0NvbnRlbnQiOlsiLy8hIG1vbWVudC5qcyBsb2NhbGUgY29uZmlndXJhdGlvblxuLy8hIGxvY2FsZSA6IFV6YmVrIExhdGluIFt1ei1sYXRuXVxuLy8hIGF1dGhvciA6IFJhc3VsYmVrIE1pcnpheWV2IDogZ2l0aHViLmNvbS9SYXN1bGJlZWVrXG5cbjsoZnVuY3Rpb24gKGdsb2JhbCwgZmFjdG9yeSkge1xuICAgdHlwZW9mIGV4cG9ydHMgPT09ICdvYmplY3QnICYmIHR5cGVvZiBtb2R1bGUgIT09ICd1bmRlZmluZWQnXG4gICAgICAgJiYgdHlwZW9mIHJlcXVpcmUgPT09ICdmdW5jdGlvbicgPyBmYWN0b3J5KHJlcXVpcmUoJy4uL21vbWVudCcpKSA6XG4gICB0eXBlb2YgZGVmaW5lID09PSAnZnVuY3Rpb24nICYmIGRlZmluZS5hbWQgPyBkZWZpbmUoWycuLi9tb21lbnQnXSwgZmFjdG9yeSkgOlxuICAgZmFjdG9yeShnbG9iYWwubW9tZW50KVxufSh0aGlzLCAoZnVuY3Rpb24gKG1vbWVudCkgeyAndXNlIHN0cmljdCc7XG5cbiAgICAvLyEgbW9tZW50LmpzIGxvY2FsZSBjb25maWd1cmF0aW9uXG5cbiAgICB2YXIgdXpMYXRuID0gbW9tZW50LmRlZmluZUxvY2FsZSgndXotbGF0bicsIHtcbiAgICAgICAgbW9udGhzOiAnWWFudmFyX0ZldnJhbF9NYXJ0X0FwcmVsX01heV9JeXVuX0l5dWxfQXZndXN0X1NlbnRhYnJfT2t0YWJyX05veWFicl9EZWthYnInLnNwbGl0KFxuICAgICAgICAgICAgJ18nXG4gICAgICAgICksXG4gICAgICAgIG1vbnRoc1Nob3J0OiAnWWFuX0Zldl9NYXJfQXByX01heV9JeXVuX0l5dWxfQXZnX1Nlbl9Pa3RfTm95X0Rlaycuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXM6XG4gICAgICAgICAgICAnWWFrc2hhbmJhX0R1c2hhbmJhX1Nlc2hhbmJhX0Nob3JzaGFuYmFfUGF5c2hhbmJhX0p1bWFfU2hhbmJhJy5zcGxpdChcbiAgICAgICAgICAgICAgICAnXydcbiAgICAgICAgICAgICksXG4gICAgICAgIHdlZWtkYXlzU2hvcnQ6ICdZYWtfRHVzaF9TZXNoX0Nob3JfUGF5X0p1bV9TaGFuJy5zcGxpdCgnXycpLFxuICAgICAgICB3ZWVrZGF5c01pbjogJ1lhX0R1X1NlX0Nob19QYV9KdV9TaGEnLnNwbGl0KCdfJyksXG4gICAgICAgIGxvbmdEYXRlRm9ybWF0OiB7XG4gICAgICAgICAgICBMVDogJ0hIOm1tJyxcbiAgICAgICAgICAgIExUUzogJ0hIOm1tOnNzJyxcbiAgICAgICAgICAgIEw6ICdERC9NTS9ZWVlZJyxcbiAgICAgICAgICAgIExMOiAnRCBNTU1NIFlZWVknLFxuICAgICAgICAgICAgTExMOiAnRCBNTU1NIFlZWVkgSEg6bW0nLFxuICAgICAgICAgICAgTExMTDogJ0QgTU1NTSBZWVlZLCBkZGRkIEhIOm1tJyxcbiAgICAgICAgfSxcbiAgICAgICAgY2FsZW5kYXI6IHtcbiAgICAgICAgICAgIHNhbWVEYXk6ICdbQnVndW4gc29hdF0gTFQgW2RhXScsXG4gICAgICAgICAgICBuZXh0RGF5OiAnW0VydGFnYV0gTFQgW2RhXScsXG4gICAgICAgICAgICBuZXh0V2VlazogJ2RkZGQgW2t1bmkgc29hdF0gTFQgW2RhXScsXG4gICAgICAgICAgICBsYXN0RGF5OiAnW0tlY2hhIHNvYXRdIExUIFtkYV0nLFxuICAgICAgICAgICAgbGFzdFdlZWs6IFwiW08ndGdhbl0gZGRkZCBba3VuaSBzb2F0XSBMVCBbZGFdXCIsXG4gICAgICAgICAgICBzYW1lRWxzZTogJ0wnLFxuICAgICAgICB9LFxuICAgICAgICByZWxhdGl2ZVRpbWU6IHtcbiAgICAgICAgICAgIGZ1dHVyZTogJ1lhcWluICVzIGljaGlkYScsXG4gICAgICAgICAgICBwYXN0OiAnQmlyIG5lY2hhICVzIG9sZGluJyxcbiAgICAgICAgICAgIHM6ICdzb25peWEnLFxuICAgICAgICAgICAgc3M6ICclZCBzb25peWEnLFxuICAgICAgICAgICAgbTogJ2JpciBkYXFpcWEnLFxuICAgICAgICAgICAgbW06ICclZCBkYXFpcWEnLFxuICAgICAgICAgICAgaDogJ2JpciBzb2F0JyxcbiAgICAgICAgICAgIGhoOiAnJWQgc29hdCcsXG4gICAgICAgICAgICBkOiAnYmlyIGt1bicsXG4gICAgICAgICAgICBkZDogJyVkIGt1bicsXG4gICAgICAgICAgICBNOiAnYmlyIG95JyxcbiAgICAgICAgICAgIE1NOiAnJWQgb3knLFxuICAgICAgICAgICAgeTogJ2JpciB5aWwnLFxuICAgICAgICAgICAgeXk6ICclZCB5aWwnLFxuICAgICAgICB9LFxuICAgICAgICB3ZWVrOiB7XG4gICAgICAgICAgICBkb3c6IDEsIC8vIE1vbmRheSBpcyB0aGUgZmlyc3QgZGF5IG9mIHRoZSB3ZWVrLlxuICAgICAgICAgICAgZG95OiA3LCAvLyBUaGUgd2VlayB0aGF0IGNvbnRhaW5zIEphbiA3dGggaXMgdGhlIGZpcnN0IHdlZWsgb2YgdGhlIHllYXIuXG4gICAgICAgIH0sXG4gICAgfSk7XG5cbiAgICByZXR1cm4gdXpMYXRuO1xuXG59KSkpO1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///72475\n")},72505:(module,__unused_webpack_exports,__webpack_require__)=>{eval("module.exports = __webpack_require__(18015);//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNzI1MDUuanMiLCJtYXBwaW5ncyI6IkFBQUEiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9pdGctbmV4dGdlbi1mcm9udGVuZC8uL25vZGVfbW9kdWxlcy9heGlvcy9pbmRleC5qcz9iYzNhIl0sInNvdXJjZXNDb250ZW50IjpbIm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi9saWIvYXhpb3MnKTsiXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///72505\n")},73386:function(__unused_webpack_module,__unused_webpack_exports,__webpack_require__){eval("//! moment.js locale configuration\n//! locale : Malay [ms]\n//! author : Weldan Jamili : https://github.com/weldan\n\n;(function (global, factory) {\n true ? factory(__webpack_require__(95093)) :\n 0\n}(this, (function (moment) { 'use strict';\n\n //! moment.js locale configuration\n\n var ms = moment.defineLocale('ms', {\n months: 'Januari_Februari_Mac_April_Mei_Jun_Julai_Ogos_September_Oktober_November_Disember'.split(\n '_'\n ),\n monthsShort: 'Jan_Feb_Mac_Apr_Mei_Jun_Jul_Ogs_Sep_Okt_Nov_Dis'.split('_'),\n weekdays: 'Ahad_Isnin_Selasa_Rabu_Khamis_Jumaat_Sabtu'.split('_'),\n weekdaysShort: 'Ahd_Isn_Sel_Rab_Kha_Jum_Sab'.split('_'),\n weekdaysMin: 'Ah_Is_Sl_Rb_Km_Jm_Sb'.split('_'),\n longDateFormat: {\n LT: 'HH.mm',\n LTS: 'HH.mm.ss',\n L: 'DD/MM/YYYY',\n LL: 'D MMMM YYYY',\n LLL: 'D MMMM YYYY [pukul] HH.mm',\n LLLL: 'dddd, D MMMM YYYY [pukul] HH.mm',\n },\n meridiemParse: /pagi|tengahari|petang|malam/,\n meridiemHour: function (hour, meridiem) {\n if (hour === 12) {\n hour = 0;\n }\n if (meridiem === 'pagi') {\n return hour;\n } else if (meridiem === 'tengahari') {\n return hour >= 11 ? hour : hour + 12;\n } else if (meridiem === 'petang' || meridiem === 'malam') {\n return hour + 12;\n }\n },\n meridiem: function (hours, minutes, isLower) {\n if (hours < 11) {\n return 'pagi';\n } else if (hours < 15) {\n return 'tengahari';\n } else if (hours < 19) {\n return 'petang';\n } else {\n return 'malam';\n }\n },\n calendar: {\n sameDay: '[Hari ini pukul] LT',\n nextDay: '[Esok pukul] LT',\n nextWeek: 'dddd [pukul] LT',\n lastDay: '[Kelmarin pukul] LT',\n lastWeek: 'dddd [lepas pukul] LT',\n sameElse: 'L',\n },\n relativeTime: {\n future: 'dalam %s',\n past: '%s yang lepas',\n s: 'beberapa saat',\n ss: '%d saat',\n m: 'seminit',\n mm: '%d minit',\n h: 'sejam',\n hh: '%d jam',\n d: 'sehari',\n dd: '%d hari',\n M: 'sebulan',\n MM: '%d bulan',\n y: 'setahun',\n yy: '%d tahun',\n },\n week: {\n dow: 1, // Monday is the first day of the week.\n doy: 7, // The week that contains Jan 7th is the first week of the year.\n },\n });\n\n return ms;\n\n})));\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNzMzODYuanMiLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vaXRnLW5leHRnZW4tZnJvbnRlbmQvLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9tcy5qcz9lYmU0Il0sInNvdXJjZXNDb250ZW50IjpbIi8vISBtb21lbnQuanMgbG9jYWxlIGNvbmZpZ3VyYXRpb25cbi8vISBsb2NhbGUgOiBNYWxheSBbbXNdXG4vLyEgYXV0aG9yIDogV2VsZGFuIEphbWlsaSA6IGh0dHBzOi8vZ2l0aHViLmNvbS93ZWxkYW5cblxuOyhmdW5jdGlvbiAoZ2xvYmFsLCBmYWN0b3J5KSB7XG4gICB0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcgJiYgdHlwZW9mIG1vZHVsZSAhPT0gJ3VuZGVmaW5lZCdcbiAgICAgICAmJiB0eXBlb2YgcmVxdWlyZSA9PT0gJ2Z1bmN0aW9uJyA/IGZhY3RvcnkocmVxdWlyZSgnLi4vbW9tZW50JykpIDpcbiAgIHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgZGVmaW5lLmFtZCA/IGRlZmluZShbJy4uL21vbWVudCddLCBmYWN0b3J5KSA6XG4gICBmYWN0b3J5KGdsb2JhbC5tb21lbnQpXG59KHRoaXMsIChmdW5jdGlvbiAobW9tZW50KSB7ICd1c2Ugc3RyaWN0JztcblxuICAgIC8vISBtb21lbnQuanMgbG9jYWxlIGNvbmZpZ3VyYXRpb25cblxuICAgIHZhciBtcyA9IG1vbWVudC5kZWZpbmVMb2NhbGUoJ21zJywge1xuICAgICAgICBtb250aHM6ICdKYW51YXJpX0ZlYnJ1YXJpX01hY19BcHJpbF9NZWlfSnVuX0p1bGFpX09nb3NfU2VwdGVtYmVyX09rdG9iZXJfTm92ZW1iZXJfRGlzZW1iZXInLnNwbGl0KFxuICAgICAgICAgICAgJ18nXG4gICAgICAgICksXG4gICAgICAgIG1vbnRoc1Nob3J0OiAnSmFuX0ZlYl9NYWNfQXByX01laV9KdW5fSnVsX09nc19TZXBfT2t0X05vdl9EaXMnLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzOiAnQWhhZF9Jc25pbl9TZWxhc2FfUmFidV9LaGFtaXNfSnVtYWF0X1NhYnR1Jy5zcGxpdCgnXycpLFxuICAgICAgICB3ZWVrZGF5c1Nob3J0OiAnQWhkX0lzbl9TZWxfUmFiX0toYV9KdW1fU2FiJy5zcGxpdCgnXycpLFxuICAgICAgICB3ZWVrZGF5c01pbjogJ0FoX0lzX1NsX1JiX0ttX0ptX1NiJy5zcGxpdCgnXycpLFxuICAgICAgICBsb25nRGF0ZUZvcm1hdDoge1xuICAgICAgICAgICAgTFQ6ICdISC5tbScsXG4gICAgICAgICAgICBMVFM6ICdISC5tbS5zcycsXG4gICAgICAgICAgICBMOiAnREQvTU0vWVlZWScsXG4gICAgICAgICAgICBMTDogJ0QgTU1NTSBZWVlZJyxcbiAgICAgICAgICAgIExMTDogJ0QgTU1NTSBZWVlZIFtwdWt1bF0gSEgubW0nLFxuICAgICAgICAgICAgTExMTDogJ2RkZGQsIEQgTU1NTSBZWVlZIFtwdWt1bF0gSEgubW0nLFxuICAgICAgICB9LFxuICAgICAgICBtZXJpZGllbVBhcnNlOiAvcGFnaXx0ZW5nYWhhcml8cGV0YW5nfG1hbGFtLyxcbiAgICAgICAgbWVyaWRpZW1Ib3VyOiBmdW5jdGlvbiAoaG91ciwgbWVyaWRpZW0pIHtcbiAgICAgICAgICAgIGlmIChob3VyID09PSAxMikge1xuICAgICAgICAgICAgICAgIGhvdXIgPSAwO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKG1lcmlkaWVtID09PSAncGFnaScpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gaG91cjtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAobWVyaWRpZW0gPT09ICd0ZW5nYWhhcmknKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGhvdXIgPj0gMTEgPyBob3VyIDogaG91ciArIDEyO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChtZXJpZGllbSA9PT0gJ3BldGFuZycgfHwgbWVyaWRpZW0gPT09ICdtYWxhbScpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gaG91ciArIDEyO1xuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBtZXJpZGllbTogZnVuY3Rpb24gKGhvdXJzLCBtaW51dGVzLCBpc0xvd2VyKSB7XG4gICAgICAgICAgICBpZiAoaG91cnMgPCAxMSkge1xuICAgICAgICAgICAgICAgIHJldHVybiAncGFnaSc7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGhvdXJzIDwgMTUpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gJ3RlbmdhaGFyaSc7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGhvdXJzIDwgMTkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gJ3BldGFuZyc7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHJldHVybiAnbWFsYW0nO1xuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBjYWxlbmRhcjoge1xuICAgICAgICAgICAgc2FtZURheTogJ1tIYXJpIGluaSBwdWt1bF0gTFQnLFxuICAgICAgICAgICAgbmV4dERheTogJ1tFc29rIHB1a3VsXSBMVCcsXG4gICAgICAgICAgICBuZXh0V2VlazogJ2RkZGQgW3B1a3VsXSBMVCcsXG4gICAgICAgICAgICBsYXN0RGF5OiAnW0tlbG1hcmluIHB1a3VsXSBMVCcsXG4gICAgICAgICAgICBsYXN0V2VlazogJ2RkZGQgW2xlcGFzIHB1a3VsXSBMVCcsXG4gICAgICAgICAgICBzYW1lRWxzZTogJ0wnLFxuICAgICAgICB9LFxuICAgICAgICByZWxhdGl2ZVRpbWU6IHtcbiAgICAgICAgICAgIGZ1dHVyZTogJ2RhbGFtICVzJyxcbiAgICAgICAgICAgIHBhc3Q6ICclcyB5YW5nIGxlcGFzJyxcbiAgICAgICAgICAgIHM6ICdiZWJlcmFwYSBzYWF0JyxcbiAgICAgICAgICAgIHNzOiAnJWQgc2FhdCcsXG4gICAgICAgICAgICBtOiAnc2VtaW5pdCcsXG4gICAgICAgICAgICBtbTogJyVkIG1pbml0JyxcbiAgICAgICAgICAgIGg6ICdzZWphbScsXG4gICAgICAgICAgICBoaDogJyVkIGphbScsXG4gICAgICAgICAgICBkOiAnc2VoYXJpJyxcbiAgICAgICAgICAgIGRkOiAnJWQgaGFyaScsXG4gICAgICAgICAgICBNOiAnc2VidWxhbicsXG4gICAgICAgICAgICBNTTogJyVkIGJ1bGFuJyxcbiAgICAgICAgICAgIHk6ICdzZXRhaHVuJyxcbiAgICAgICAgICAgIHl5OiAnJWQgdGFodW4nLFxuICAgICAgICB9LFxuICAgICAgICB3ZWVrOiB7XG4gICAgICAgICAgICBkb3c6IDEsIC8vIE1vbmRheSBpcyB0aGUgZmlyc3QgZGF5IG9mIHRoZSB3ZWVrLlxuICAgICAgICAgICAgZG95OiA3LCAvLyBUaGUgd2VlayB0aGF0IGNvbnRhaW5zIEphbiA3dGggaXMgdGhlIGZpcnN0IHdlZWsgb2YgdGhlIHllYXIuXG4gICAgICAgIH0sXG4gICAgfSk7XG5cbiAgICByZXR1cm4gbXM7XG5cbn0pKSk7XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///73386\n")},73404:(module,__unused_webpack_exports,__webpack_require__)=>{"use strict";eval("\n\nif (true) {\n module.exports = __webpack_require__(3072);\n} else {}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNzM0MDQuanMiLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL2l0Zy1uZXh0Z2VuLWZyb250ZW5kLy4vbm9kZV9tb2R1bGVzL2hvaXN0LW5vbi1yZWFjdC1zdGF0aWNzL25vZGVfbW9kdWxlcy9yZWFjdC1pcy9pbmRleC5qcz9hZjdlIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxuaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WID09PSAncHJvZHVjdGlvbicpIHtcbiAgbW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuL2Nqcy9yZWFjdC1pcy5wcm9kdWN0aW9uLm1pbi5qcycpO1xufSBlbHNlIHtcbiAgbW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuL2Nqcy9yZWFjdC1pcy5kZXZlbG9wbWVudC5qcycpO1xufVxuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///73404\n")},73635:function(__unused_webpack_module,__unused_webpack_exports,__webpack_require__){eval("//! moment.js locale configuration\n//! locale : Chuvash [cv]\n//! author : Anatoly Mironov : https://github.com/mirontoli\n\n;(function (global, factory) {\n true ? factory(__webpack_require__(95093)) :\n 0\n}(this, (function (moment) { 'use strict';\n\n //! moment.js locale configuration\n\n var cv = moment.defineLocale('cv', {\n months: 'кӑрлач_нарӑс_пуш_ака_май_ҫӗртме_утӑ_ҫурла_авӑн_юпа_чӳк_раштав'.split(\n '_'\n ),\n monthsShort: 'кӑр_нар_пуш_ака_май_ҫӗр_утӑ_ҫур_авн_юпа_чӳк_раш'.split('_'),\n weekdays:\n 'вырсарникун_тунтикун_ытларикун_юнкун_кӗҫнерникун_эрнекун_шӑматкун'.split(\n '_'\n ),\n weekdaysShort: 'выр_тун_ытл_юн_кӗҫ_эрн_шӑм'.split('_'),\n weekdaysMin: 'вр_тн_ыт_юн_кҫ_эр_шм'.split('_'),\n longDateFormat: {\n LT: 'HH:mm',\n LTS: 'HH:mm:ss',\n L: 'DD-MM-YYYY',\n LL: 'YYYY [ҫулхи] MMMM [уйӑхӗн] D[-мӗшӗ]',\n LLL: 'YYYY [ҫулхи] MMMM [уйӑхӗн] D[-мӗшӗ], HH:mm',\n LLLL: 'dddd, YYYY [ҫулхи] MMMM [уйӑхӗн] D[-мӗшӗ], HH:mm',\n },\n calendar: {\n sameDay: '[Паян] LT [сехетре]',\n nextDay: '[Ыран] LT [сехетре]',\n lastDay: '[Ӗнер] LT [сехетре]',\n nextWeek: '[Ҫитес] dddd LT [сехетре]',\n lastWeek: '[Иртнӗ] dddd LT [сехетре]',\n sameElse: 'L',\n },\n relativeTime: {\n future: function (output) {\n var affix = /сехет$/i.exec(output)\n ? 'рен'\n : /ҫул$/i.exec(output)\n ? 'тан'\n : 'ран';\n return output + affix;\n },\n past: '%s каялла',\n s: 'пӗр-ик ҫеккунт',\n ss: '%d ҫеккунт',\n m: 'пӗр минут',\n mm: '%d минут',\n h: 'пӗр сехет',\n hh: '%d сехет',\n d: 'пӗр кун',\n dd: '%d кун',\n M: 'пӗр уйӑх',\n MM: '%d уйӑх',\n y: 'пӗр ҫул',\n yy: '%d ҫул',\n },\n dayOfMonthOrdinalParse: /\\d{1,2}-мӗш/,\n ordinal: '%d-мӗш',\n week: {\n dow: 1, // Monday is the first day of the week.\n doy: 7, // The week that contains Jan 7th is the first week of the year.\n },\n });\n\n return cv;\n\n})));\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNzM2MzUuanMiLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vaXRnLW5leHRnZW4tZnJvbnRlbmQvLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9jdi5qcz8wM2VjIl0sInNvdXJjZXNDb250ZW50IjpbIi8vISBtb21lbnQuanMgbG9jYWxlIGNvbmZpZ3VyYXRpb25cbi8vISBsb2NhbGUgOiBDaHV2YXNoIFtjdl1cbi8vISBhdXRob3IgOiBBbmF0b2x5IE1pcm9ub3YgOiBodHRwczovL2dpdGh1Yi5jb20vbWlyb250b2xpXG5cbjsoZnVuY3Rpb24gKGdsb2JhbCwgZmFjdG9yeSkge1xuICAgdHlwZW9mIGV4cG9ydHMgPT09ICdvYmplY3QnICYmIHR5cGVvZiBtb2R1bGUgIT09ICd1bmRlZmluZWQnXG4gICAgICAgJiYgdHlwZW9mIHJlcXVpcmUgPT09ICdmdW5jdGlvbicgPyBmYWN0b3J5KHJlcXVpcmUoJy4uL21vbWVudCcpKSA6XG4gICB0eXBlb2YgZGVmaW5lID09PSAnZnVuY3Rpb24nICYmIGRlZmluZS5hbWQgPyBkZWZpbmUoWycuLi9tb21lbnQnXSwgZmFjdG9yeSkgOlxuICAgZmFjdG9yeShnbG9iYWwubW9tZW50KVxufSh0aGlzLCAoZnVuY3Rpb24gKG1vbWVudCkgeyAndXNlIHN0cmljdCc7XG5cbiAgICAvLyEgbW9tZW50LmpzIGxvY2FsZSBjb25maWd1cmF0aW9uXG5cbiAgICB2YXIgY3YgPSBtb21lbnQuZGVmaW5lTG9jYWxlKCdjdicsIHtcbiAgICAgICAgbW9udGhzOiAn0LrTkdGA0LvQsNGHX9C90LDRgNOR0YFf0L/Rg9GIX9Cw0LrQsF/QvNCw0Llf0qvTl9GA0YLQvNC1X9GD0YLTkV/Sq9GD0YDQu9CwX9Cw0LLTkdC9X9GO0L/QsF/Rh9Oz0Lpf0YDQsNGI0YLQsNCyJy5zcGxpdChcbiAgICAgICAgICAgICdfJ1xuICAgICAgICApLFxuICAgICAgICBtb250aHNTaG9ydDogJ9C605HRgF/QvdCw0YBf0L/Rg9GIX9Cw0LrQsF/QvNCw0Llf0qvTl9GAX9GD0YLTkV/Sq9GD0YBf0LDQstC9X9GO0L/QsF/Rh9Oz0Lpf0YDQsNGIJy5zcGxpdCgnXycpLFxuICAgICAgICB3ZWVrZGF5czpcbiAgICAgICAgICAgICfQstGL0YDRgdCw0YDQvdC40LrRg9C9X9GC0YPQvdGC0LjQutGD0L1f0YvRgtC70LDRgNC40LrRg9C9X9GO0L3QutGD0L1f0LrTl9Kr0L3QtdGA0L3QuNC60YPQvV/RjdGA0L3QtdC60YPQvV/RiNOR0LzQsNGC0LrRg9C9Jy5zcGxpdChcbiAgICAgICAgICAgICAgICAnXydcbiAgICAgICAgICAgICksXG4gICAgICAgIHdlZWtkYXlzU2hvcnQ6ICfQstGL0YBf0YLRg9C9X9GL0YLQu1/RjtC9X9C605fSq1/RjdGA0L1f0YjTkdC8Jy5zcGxpdCgnXycpLFxuICAgICAgICB3ZWVrZGF5c01pbjogJ9Cy0YBf0YLQvV/Ri9GCX9GO0L1f0LrSq1/RjdGAX9GI0LwnLnNwbGl0KCdfJyksXG4gICAgICAgIGxvbmdEYXRlRm9ybWF0OiB7XG4gICAgICAgICAgICBMVDogJ0hIOm1tJyxcbiAgICAgICAgICAgIExUUzogJ0hIOm1tOnNzJyxcbiAgICAgICAgICAgIEw6ICdERC1NTS1ZWVlZJyxcbiAgICAgICAgICAgIExMOiAnWVlZWSBb0qvRg9C70YXQuF0gTU1NTSBb0YPQudOR0YXTl9C9XSBEWy3QvNOX0YjTl10nLFxuICAgICAgICAgICAgTExMOiAnWVlZWSBb0qvRg9C70YXQuF0gTU1NTSBb0YPQudOR0YXTl9C9XSBEWy3QvNOX0YjTl10sIEhIOm1tJyxcbiAgICAgICAgICAgIExMTEw6ICdkZGRkLCBZWVlZIFvSq9GD0LvRhdC4XSBNTU1NIFvRg9C505HRhdOX0L1dIERbLdC805fRiNOXXSwgSEg6bW0nLFxuICAgICAgICB9LFxuICAgICAgICBjYWxlbmRhcjoge1xuICAgICAgICAgICAgc2FtZURheTogJ1vQn9Cw0Y/QvV0gTFQgW9GB0LXRhdC10YLRgNC1XScsXG4gICAgICAgICAgICBuZXh0RGF5OiAnW9Cr0YDQsNC9XSBMVCBb0YHQtdGF0LXRgtGA0LVdJyxcbiAgICAgICAgICAgIGxhc3REYXk6ICdb05bQvdC10YBdIExUIFvRgdC10YXQtdGC0YDQtV0nLFxuICAgICAgICAgICAgbmV4dFdlZWs6ICdb0qrQuNGC0LXRgV0gZGRkZCBMVCBb0YHQtdGF0LXRgtGA0LVdJyxcbiAgICAgICAgICAgIGxhc3RXZWVrOiAnW9CY0YDRgtC905ddIGRkZGQgTFQgW9GB0LXRhdC10YLRgNC1XScsXG4gICAgICAgICAgICBzYW1lRWxzZTogJ0wnLFxuICAgICAgICB9LFxuICAgICAgICByZWxhdGl2ZVRpbWU6IHtcbiAgICAgICAgICAgIGZ1dHVyZTogZnVuY3Rpb24gKG91dHB1dCkge1xuICAgICAgICAgICAgICAgIHZhciBhZmZpeCA9IC/RgdC10YXQtdGCJC9pLmV4ZWMob3V0cHV0KVxuICAgICAgICAgICAgICAgICAgICA/ICfRgNC10L0nXG4gICAgICAgICAgICAgICAgICAgIDogL9Kr0YPQuyQvaS5leGVjKG91dHB1dClcbiAgICAgICAgICAgICAgICAgICAgICA/ICfRgtCw0L0nXG4gICAgICAgICAgICAgICAgICAgICAgOiAn0YDQsNC9JztcbiAgICAgICAgICAgICAgICByZXR1cm4gb3V0cHV0ICsgYWZmaXg7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgcGFzdDogJyVzINC60LDRj9C70LvQsCcsXG4gICAgICAgICAgICBzOiAn0L/Tl9GALdC40Log0qvQtdC60LrRg9C90YInLFxuICAgICAgICAgICAgc3M6ICclZCDSq9C10LrQutGD0L3RgicsXG4gICAgICAgICAgICBtOiAn0L/Tl9GAINC80LjQvdGD0YInLFxuICAgICAgICAgICAgbW06ICclZCDQvNC40L3Rg9GCJyxcbiAgICAgICAgICAgIGg6ICfQv9OX0YAg0YHQtdGF0LXRgicsXG4gICAgICAgICAgICBoaDogJyVkINGB0LXRhdC10YInLFxuICAgICAgICAgICAgZDogJ9C/05fRgCDQutGD0L0nLFxuICAgICAgICAgICAgZGQ6ICclZCDQutGD0L0nLFxuICAgICAgICAgICAgTTogJ9C/05fRgCDRg9C505HRhScsXG4gICAgICAgICAgICBNTTogJyVkINGD0LnTkdGFJyxcbiAgICAgICAgICAgIHk6ICfQv9OX0YAg0qvRg9C7JyxcbiAgICAgICAgICAgIHl5OiAnJWQg0qvRg9C7JyxcbiAgICAgICAgfSxcbiAgICAgICAgZGF5T2ZNb250aE9yZGluYWxQYXJzZTogL1xcZHsxLDJ9LdC805fRiC8sXG4gICAgICAgIG9yZGluYWw6ICclZC3QvNOX0YgnLFxuICAgICAgICB3ZWVrOiB7XG4gICAgICAgICAgICBkb3c6IDEsIC8vIE1vbmRheSBpcyB0aGUgZmlyc3QgZGF5IG9mIHRoZSB3ZWVrLlxuICAgICAgICAgICAgZG95OiA3LCAvLyBUaGUgd2VlayB0aGF0IGNvbnRhaW5zIEphbiA3dGggaXMgdGhlIGZpcnN0IHdlZWsgb2YgdGhlIHllYXIuXG4gICAgICAgIH0sXG4gICAgfSk7XG5cbiAgICByZXR1cm4gY3Y7XG5cbn0pKSk7XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///73635\n")},73739:function(__unused_webpack_module,__unused_webpack_exports,__webpack_require__){eval("//! moment.js locale configuration\n//! locale : Malayalam [ml]\n//! author : Floyd Pink : https://github.com/floydpink\n\n;(function (global, factory) {\n true ? factory(__webpack_require__(95093)) :\n 0\n}(this, (function (moment) { 'use strict';\n\n //! moment.js locale configuration\n\n var ml = moment.defineLocale('ml', {\n months: 'ജനുവരി_ഫെബ്രുവരി_മാർച്ച്_ഏപ്രിൽ_മേയ്_ജൂൺ_ജൂലൈ_ഓഗസ്റ്റ്_സെപ്റ്റംബർ_ഒക്ടോബർ_നവംബർ_ഡിസംബർ'.split(\n '_'\n ),\n monthsShort:\n 'ജനു._ഫെബ്രു._മാർ._ഏപ്രി._മേയ്_ജൂൺ_ജൂലൈ._ഓഗ._സെപ്റ്റ._ഒക്ടോ._നവം._ഡിസം.'.split(\n '_'\n ),\n monthsParseExact: true,\n weekdays:\n 'ഞായറാഴ്ച_തിങ്കളാഴ്ച_ചൊവ്വാഴ്ച_ബുധനാഴ്ച_വ്യാഴാഴ്ച_വെള്ളിയാഴ്ച_ശനിയാഴ്ച'.split(\n '_'\n ),\n weekdaysShort: 'ഞായർ_തിങ്കൾ_ചൊവ്വ_ബുധൻ_വ്യാഴം_വെള്ളി_ശനി'.split('_'),\n weekdaysMin: 'ഞാ_തി_ചൊ_ബു_വ്യാ_വെ_ശ'.split('_'),\n longDateFormat: {\n LT: 'A h:mm -നു',\n LTS: 'A h:mm:ss -നു',\n L: 'DD/MM/YYYY',\n LL: 'D MMMM YYYY',\n LLL: 'D MMMM YYYY, A h:mm -നു',\n LLLL: 'dddd, D MMMM YYYY, A h:mm -നു',\n },\n calendar: {\n sameDay: '[ഇന്ന്] LT',\n nextDay: '[നാളെ] LT',\n nextWeek: 'dddd, LT',\n lastDay: '[ഇന്നലെ] LT',\n lastWeek: '[കഴിഞ്ഞ] dddd, LT',\n sameElse: 'L',\n },\n relativeTime: {\n future: '%s കഴിഞ്ഞ്',\n past: '%s മുൻപ്',\n s: 'അൽപ നിമിഷങ്ങൾ',\n ss: '%d സെക്കൻഡ്',\n m: 'ഒരു മിനിറ്റ്',\n mm: '%d മിനിറ്റ്',\n h: 'ഒരു മണിക്കൂർ',\n hh: '%d മണിക്കൂർ',\n d: 'ഒരു ദിവസം',\n dd: '%d ദിവസം',\n M: 'ഒരു മാസം',\n MM: '%d മാസം',\n y: 'ഒരു വർഷം',\n yy: '%d വർഷം',\n },\n meridiemParse: /രാത്രി|രാവിലെ|ഉച്ച കഴിഞ്ഞ്|വൈകുന്നേരം|രാത്രി/i,\n meridiemHour: function (hour, meridiem) {\n if (hour === 12) {\n hour = 0;\n }\n if (\n (meridiem === 'രാത്രി' && hour >= 4) ||\n meridiem === 'ഉച്ച കഴിഞ്ഞ്' ||\n meridiem === 'വൈകുന്നേരം'\n ) {\n return hour + 12;\n } else {\n return hour;\n }\n },\n meridiem: function (hour, minute, isLower) {\n if (hour < 4) {\n return 'രാത്രി';\n } else if (hour < 12) {\n return 'രാവിലെ';\n } else if (hour < 17) {\n return 'ഉച്ച കഴിഞ്ഞ്';\n } else if (hour < 20) {\n return 'വൈകുന്നേരം';\n } else {\n return 'രാത്രി';\n }\n },\n });\n\n return ml;\n\n})));\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNzM3MzkuanMiLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9pdGctbmV4dGdlbi1mcm9udGVuZC8uL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL21sLmpzPzAyZmIiXSwic291cmNlc0NvbnRlbnQiOlsiLy8hIG1vbWVudC5qcyBsb2NhbGUgY29uZmlndXJhdGlvblxuLy8hIGxvY2FsZSA6IE1hbGF5YWxhbSBbbWxdXG4vLyEgYXV0aG9yIDogRmxveWQgUGluayA6IGh0dHBzOi8vZ2l0aHViLmNvbS9mbG95ZHBpbmtcblxuOyhmdW5jdGlvbiAoZ2xvYmFsLCBmYWN0b3J5KSB7XG4gICB0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcgJiYgdHlwZW9mIG1vZHVsZSAhPT0gJ3VuZGVmaW5lZCdcbiAgICAgICAmJiB0eXBlb2YgcmVxdWlyZSA9PT0gJ2Z1bmN0aW9uJyA/IGZhY3RvcnkocmVxdWlyZSgnLi4vbW9tZW50JykpIDpcbiAgIHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgZGVmaW5lLmFtZCA/IGRlZmluZShbJy4uL21vbWVudCddLCBmYWN0b3J5KSA6XG4gICBmYWN0b3J5KGdsb2JhbC5tb21lbnQpXG59KHRoaXMsIChmdW5jdGlvbiAobW9tZW50KSB7ICd1c2Ugc3RyaWN0JztcblxuICAgIC8vISBtb21lbnQuanMgbG9jYWxlIGNvbmZpZ3VyYXRpb25cblxuICAgIHZhciBtbCA9IG1vbWVudC5kZWZpbmVMb2NhbGUoJ21sJywge1xuICAgICAgICBtb250aHM6ICfgtJzgtKjgtYHgtLXgtLDgtL9f4LSr4LWG4LSs4LWN4LSw4LWB4LS14LSw4LS/X+C0ruC0vuC1vOC0muC1jeC0muC1jV/gtI/gtKrgtY3gtLDgtL/gtb1f4LSu4LWH4LSv4LWNX+C0nOC1guC1ul/gtJzgtYLgtLLgtYhf4LST4LSX4LS44LWN4LSx4LWN4LSx4LWNX+C0uOC1huC0quC1jeC0seC1jeC0seC0guC0rOC1vF/gtJLgtJXgtY3gtJ/gtYvgtKzgtbxf4LSo4LS14LSC4LSs4LW8X+C0oeC0v+C0uOC0guC0rOC1vCcuc3BsaXQoXG4gICAgICAgICAgICAnXydcbiAgICAgICAgKSxcbiAgICAgICAgbW9udGhzU2hvcnQ6XG4gICAgICAgICAgICAn4LSc4LSo4LWBLl/gtKvgtYbgtKzgtY3gtLDgtYEuX+C0ruC0vuC1vC5f4LSP4LSq4LWN4LSw4LS/Ll/gtK7gtYfgtK/gtY1f4LSc4LWC4LW6X+C0nOC1guC0suC1iC5f4LST4LSXLl/gtLjgtYbgtKrgtY3gtLHgtY3gtLEuX+C0kuC0leC1jeC0n+C1iy5f4LSo4LS14LSCLl/gtKHgtL/gtLjgtIIuJy5zcGxpdChcbiAgICAgICAgICAgICAgICAnXydcbiAgICAgICAgICAgICksXG4gICAgICAgIG1vbnRoc1BhcnNlRXhhY3Q6IHRydWUsXG4gICAgICAgIHdlZWtkYXlzOlxuICAgICAgICAgICAgJ+C0nuC0vuC0r+C0seC0vuC0tOC1jeC0ml/gtKTgtL/gtJngtY3gtJXgtLPgtL7gtLTgtY3gtJpf4LSa4LWK4LS14LWN4LS14LS+4LS04LWN4LSaX+C0rOC1geC0p+C0qOC0vuC0tOC1jeC0ml/gtLXgtY3gtK/gtL7gtLTgtL7gtLTgtY3gtJpf4LS14LWG4LSz4LWN4LSz4LS/4LSv4LS+4LS04LWN4LSaX+C0tuC0qOC0v+C0r+C0vuC0tOC1jeC0micuc3BsaXQoXG4gICAgICAgICAgICAgICAgJ18nXG4gICAgICAgICAgICApLFxuICAgICAgICB3ZWVrZGF5c1Nob3J0OiAn4LSe4LS+4LSv4LW8X+C0pOC0v+C0meC1jeC0leC1vl/gtJrgtYrgtLXgtY3gtLVf4LSs4LWB4LSn4LW7X+C0teC1jeC0r+C0vuC0tOC0gl/gtLXgtYbgtLPgtY3gtLPgtL9f4LS24LSo4LS/Jy5zcGxpdCgnXycpLFxuICAgICAgICB3ZWVrZGF5c01pbjogJ+C0nuC0vl/gtKTgtL9f4LSa4LWKX+C0rOC1gV/gtLXgtY3gtK/gtL5f4LS14LWGX+C0ticuc3BsaXQoJ18nKSxcbiAgICAgICAgbG9uZ0RhdGVGb3JtYXQ6IHtcbiAgICAgICAgICAgIExUOiAnQSBoOm1tIC3gtKjgtYEnLFxuICAgICAgICAgICAgTFRTOiAnQSBoOm1tOnNzIC3gtKjgtYEnLFxuICAgICAgICAgICAgTDogJ0REL01NL1lZWVknLFxuICAgICAgICAgICAgTEw6ICdEIE1NTU0gWVlZWScsXG4gICAgICAgICAgICBMTEw6ICdEIE1NTU0gWVlZWSwgQSBoOm1tIC3gtKjgtYEnLFxuICAgICAgICAgICAgTExMTDogJ2RkZGQsIEQgTU1NTSBZWVlZLCBBIGg6bW0gLeC0qOC1gScsXG4gICAgICAgIH0sXG4gICAgICAgIGNhbGVuZGFyOiB7XG4gICAgICAgICAgICBzYW1lRGF5OiAnW+C0h+C0qOC1jeC0qOC1jV0gTFQnLFxuICAgICAgICAgICAgbmV4dERheTogJ1vgtKjgtL7gtLPgtYZdIExUJyxcbiAgICAgICAgICAgIG5leHRXZWVrOiAnZGRkZCwgTFQnLFxuICAgICAgICAgICAgbGFzdERheTogJ1vgtIfgtKjgtY3gtKjgtLLgtYZdIExUJyxcbiAgICAgICAgICAgIGxhc3RXZWVrOiAnW+C0leC0tOC0v+C0nuC1jeC0nl0gZGRkZCwgTFQnLFxuICAgICAgICAgICAgc2FtZUVsc2U6ICdMJyxcbiAgICAgICAgfSxcbiAgICAgICAgcmVsYXRpdmVUaW1lOiB7XG4gICAgICAgICAgICBmdXR1cmU6ICclcyDgtJXgtLTgtL/gtJ7gtY3gtJ7gtY0nLFxuICAgICAgICAgICAgcGFzdDogJyVzIOC0ruC1geC1u+C0quC1jScsXG4gICAgICAgICAgICBzOiAn4LSF4LW94LSqIOC0qOC0v+C0ruC0v+C0t+C0meC1jeC0meC1vicsXG4gICAgICAgICAgICBzczogJyVkIOC0uOC1huC0leC1jeC0leC1u+C0oeC1jScsXG4gICAgICAgICAgICBtOiAn4LSS4LSw4LWBIOC0ruC0v+C0qOC0v+C0seC1jeC0seC1jScsXG4gICAgICAgICAgICBtbTogJyVkIOC0ruC0v+C0qOC0v+C0seC1jeC0seC1jScsXG4gICAgICAgICAgICBoOiAn4LSS4LSw4LWBIOC0ruC0o+C0v+C0leC1jeC0leC1guC1vCcsXG4gICAgICAgICAgICBoaDogJyVkIOC0ruC0o+C0v+C0leC1jeC0leC1guC1vCcsXG4gICAgICAgICAgICBkOiAn4LSS4LSw4LWBIOC0puC0v+C0teC0uOC0gicsXG4gICAgICAgICAgICBkZDogJyVkIOC0puC0v+C0teC0uOC0gicsXG4gICAgICAgICAgICBNOiAn4LSS4LSw4LWBIOC0ruC0vuC0uOC0gicsXG4gICAgICAgICAgICBNTTogJyVkIOC0ruC0vuC0uOC0gicsXG4gICAgICAgICAgICB5OiAn4LSS4LSw4LWBIOC0teC1vOC0t+C0gicsXG4gICAgICAgICAgICB5eTogJyVkIOC0teC1vOC0t+C0gicsXG4gICAgICAgIH0sXG4gICAgICAgIG1lcmlkaWVtUGFyc2U6IC/gtLDgtL7gtKTgtY3gtLDgtL984LSw4LS+4LS14LS/4LSy4LWGfOC0ieC0muC1jeC0miDgtJXgtLTgtL/gtJ7gtY3gtJ7gtY184LS14LWI4LSV4LWB4LSo4LWN4LSo4LWH4LSw4LSCfOC0sOC0vuC0pOC1jeC0sOC0vy9pLFxuICAgICAgICBtZXJpZGllbUhvdXI6IGZ1bmN0aW9uIChob3VyLCBtZXJpZGllbSkge1xuICAgICAgICAgICAgaWYgKGhvdXIgPT09IDEyKSB7XG4gICAgICAgICAgICAgICAgaG91ciA9IDA7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgKG1lcmlkaWVtID09PSAn4LSw4LS+4LSk4LWN4LSw4LS/JyAmJiBob3VyID49IDQpIHx8XG4gICAgICAgICAgICAgICAgbWVyaWRpZW0gPT09ICfgtIngtJrgtY3gtJog4LSV4LS04LS/4LSe4LWN4LSe4LWNJyB8fFxuICAgICAgICAgICAgICAgIG1lcmlkaWVtID09PSAn4LS14LWI4LSV4LWB4LSo4LWN4LSo4LWH4LSw4LSCJ1xuICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGhvdXIgKyAxMjtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGhvdXI7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIG1lcmlkaWVtOiBmdW5jdGlvbiAoaG91ciwgbWludXRlLCBpc0xvd2VyKSB7XG4gICAgICAgICAgICBpZiAoaG91ciA8IDQpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gJ+C0sOC0vuC0pOC1jeC0sOC0vyc7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGhvdXIgPCAxMikge1xuICAgICAgICAgICAgICAgIHJldHVybiAn4LSw4LS+4LS14LS/4LSy4LWGJztcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoaG91ciA8IDE3KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuICfgtIngtJrgtY3gtJog4LSV4LS04LS/4LSe4LWN4LSe4LWNJztcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoaG91ciA8IDIwKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuICfgtLXgtYjgtJXgtYHgtKjgtY3gtKjgtYfgtLDgtIInO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gJ+C0sOC0vuC0pOC1jeC0sOC0vyc7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgfSk7XG5cbiAgICByZXR1cm4gbWw7XG5cbn0pKSk7XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///73739\n")},73797:function(module,exports,__webpack_require__){eval(";(function (root, factory, undef) {\n\tif (true) {\n\t\t// CommonJS\n\t\tmodule.exports = exports = factory(__webpack_require__(19021), __webpack_require__(57165));\n\t}\n\telse {}\n}(this, function (CryptoJS) {\n\n\t/**\n\t * Output Feedback block mode.\n\t */\n\tCryptoJS.mode.OFB = (function () {\n\t var OFB = CryptoJS.lib.BlockCipherMode.extend();\n\n\t var Encryptor = OFB.Encryptor = OFB.extend({\n\t processBlock: function (words, offset) {\n\t // Shortcuts\n\t var cipher = this._cipher\n\t var blockSize = cipher.blockSize;\n\t var iv = this._iv;\n\t var keystream = this._keystream;\n\n\t // Generate keystream\n\t if (iv) {\n\t keystream = this._keystream = iv.slice(0);\n\n\t // Remove IV for subsequent blocks\n\t this._iv = undefined;\n\t }\n\t cipher.encryptBlock(keystream, 0);\n\n\t // Encrypt\n\t for (var i = 0; i < blockSize; i++) {\n\t words[offset + i] ^= keystream[i];\n\t }\n\t }\n\t });\n\n\t OFB.Decryptor = Encryptor;\n\n\t return OFB;\n\t}());\n\n\n\treturn CryptoJS.mode.OFB;\n\n}));//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNzM3OTcuanMiLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBUUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL2l0Zy1uZXh0Z2VuLWZyb250ZW5kLy4vbm9kZV9tb2R1bGVzL2NyeXB0by1qcy9tb2RlLW9mYi5qcz80YmE5Il0sInNvdXJjZXNDb250ZW50IjpbIjsoZnVuY3Rpb24gKHJvb3QsIGZhY3RvcnksIHVuZGVmKSB7XG5cdGlmICh0eXBlb2YgZXhwb3J0cyA9PT0gXCJvYmplY3RcIikge1xuXHRcdC8vIENvbW1vbkpTXG5cdFx0bW9kdWxlLmV4cG9ydHMgPSBleHBvcnRzID0gZmFjdG9yeShyZXF1aXJlKFwiLi9jb3JlXCIpLCByZXF1aXJlKFwiLi9jaXBoZXItY29yZVwiKSk7XG5cdH1cblx0ZWxzZSBpZiAodHlwZW9mIGRlZmluZSA9PT0gXCJmdW5jdGlvblwiICYmIGRlZmluZS5hbWQpIHtcblx0XHQvLyBBTURcblx0XHRkZWZpbmUoW1wiLi9jb3JlXCIsIFwiLi9jaXBoZXItY29yZVwiXSwgZmFjdG9yeSk7XG5cdH1cblx0ZWxzZSB7XG5cdFx0Ly8gR2xvYmFsIChicm93c2VyKVxuXHRcdGZhY3Rvcnkocm9vdC5DcnlwdG9KUyk7XG5cdH1cbn0odGhpcywgZnVuY3Rpb24gKENyeXB0b0pTKSB7XG5cblx0LyoqXG5cdCAqIE91dHB1dCBGZWVkYmFjayBibG9jayBtb2RlLlxuXHQgKi9cblx0Q3J5cHRvSlMubW9kZS5PRkIgPSAoZnVuY3Rpb24gKCkge1xuXHQgICAgdmFyIE9GQiA9IENyeXB0b0pTLmxpYi5CbG9ja0NpcGhlck1vZGUuZXh0ZW5kKCk7XG5cblx0ICAgIHZhciBFbmNyeXB0b3IgPSBPRkIuRW5jcnlwdG9yID0gT0ZCLmV4dGVuZCh7XG5cdCAgICAgICAgcHJvY2Vzc0Jsb2NrOiBmdW5jdGlvbiAod29yZHMsIG9mZnNldCkge1xuXHQgICAgICAgICAgICAvLyBTaG9ydGN1dHNcblx0ICAgICAgICAgICAgdmFyIGNpcGhlciA9IHRoaXMuX2NpcGhlclxuXHQgICAgICAgICAgICB2YXIgYmxvY2tTaXplID0gY2lwaGVyLmJsb2NrU2l6ZTtcblx0ICAgICAgICAgICAgdmFyIGl2ID0gdGhpcy5faXY7XG5cdCAgICAgICAgICAgIHZhciBrZXlzdHJlYW0gPSB0aGlzLl9rZXlzdHJlYW07XG5cblx0ICAgICAgICAgICAgLy8gR2VuZXJhdGUga2V5c3RyZWFtXG5cdCAgICAgICAgICAgIGlmIChpdikge1xuXHQgICAgICAgICAgICAgICAga2V5c3RyZWFtID0gdGhpcy5fa2V5c3RyZWFtID0gaXYuc2xpY2UoMCk7XG5cblx0ICAgICAgICAgICAgICAgIC8vIFJlbW92ZSBJViBmb3Igc3Vic2VxdWVudCBibG9ja3Ncblx0ICAgICAgICAgICAgICAgIHRoaXMuX2l2ID0gdW5kZWZpbmVkO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgIGNpcGhlci5lbmNyeXB0QmxvY2soa2V5c3RyZWFtLCAwKTtcblxuXHQgICAgICAgICAgICAvLyBFbmNyeXB0XG5cdCAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYmxvY2tTaXplOyBpKyspIHtcblx0ICAgICAgICAgICAgICAgIHdvcmRzW29mZnNldCArIGldIF49IGtleXN0cmVhbVtpXTtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXG5cdCAgICBPRkIuRGVjcnlwdG9yID0gRW5jcnlwdG9yO1xuXG5cdCAgICByZXR1cm4gT0ZCO1xuXHR9KCkpO1xuXG5cblx0cmV0dXJuIENyeXB0b0pTLm1vZGUuT0ZCO1xuXG59KSk7Il0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///73797\n")},73908:(I,g,t)=>{"use strict";I.exports=t.p+"06606643ce1ef1744949.png"},74063:function(__unused_webpack_module,__unused_webpack_exports,__webpack_require__){eval("//! moment.js locale configuration\n//! locale : Indonesian [id]\n//! author : Mohammad Satrio Utomo : https://github.com/tyok\n//! reference: http://id.wikisource.org/wiki/Pedoman_Umum_Ejaan_Bahasa_Indonesia_yang_Disempurnakan\n\n;(function (global, factory) {\n true ? factory(__webpack_require__(95093)) :\n 0\n}(this, (function (moment) { 'use strict';\n\n //! moment.js locale configuration\n\n var id = moment.defineLocale('id', {\n months: 'Januari_Februari_Maret_April_Mei_Juni_Juli_Agustus_September_Oktober_November_Desember'.split(\n '_'\n ),\n monthsShort: 'Jan_Feb_Mar_Apr_Mei_Jun_Jul_Agt_Sep_Okt_Nov_Des'.split('_'),\n weekdays: 'Minggu_Senin_Selasa_Rabu_Kamis_Jumat_Sabtu'.split('_'),\n weekdaysShort: 'Min_Sen_Sel_Rab_Kam_Jum_Sab'.split('_'),\n weekdaysMin: 'Mg_Sn_Sl_Rb_Km_Jm_Sb'.split('_'),\n longDateFormat: {\n LT: 'HH.mm',\n LTS: 'HH.mm.ss',\n L: 'DD/MM/YYYY',\n LL: 'D MMMM YYYY',\n LLL: 'D MMMM YYYY [pukul] HH.mm',\n LLLL: 'dddd, D MMMM YYYY [pukul] HH.mm',\n },\n meridiemParse: /pagi|siang|sore|malam/,\n meridiemHour: function (hour, meridiem) {\n if (hour === 12) {\n hour = 0;\n }\n if (meridiem === 'pagi') {\n return hour;\n } else if (meridiem === 'siang') {\n return hour >= 11 ? hour : hour + 12;\n } else if (meridiem === 'sore' || meridiem === 'malam') {\n return hour + 12;\n }\n },\n meridiem: function (hours, minutes, isLower) {\n if (hours < 11) {\n return 'pagi';\n } else if (hours < 15) {\n return 'siang';\n } else if (hours < 19) {\n return 'sore';\n } else {\n return 'malam';\n }\n },\n calendar: {\n sameDay: '[Hari ini pukul] LT',\n nextDay: '[Besok pukul] LT',\n nextWeek: 'dddd [pukul] LT',\n lastDay: '[Kemarin pukul] LT',\n lastWeek: 'dddd [lalu pukul] LT',\n sameElse: 'L',\n },\n relativeTime: {\n future: 'dalam %s',\n past: '%s yang lalu',\n s: 'beberapa detik',\n ss: '%d detik',\n m: 'semenit',\n mm: '%d menit',\n h: 'sejam',\n hh: '%d jam',\n d: 'sehari',\n dd: '%d hari',\n M: 'sebulan',\n MM: '%d bulan',\n y: 'setahun',\n yy: '%d tahun',\n },\n week: {\n dow: 0, // Sunday is the first day of the week.\n doy: 6, // The week that contains Jan 6th is the first week of the year.\n },\n });\n\n return id;\n\n})));\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNzQwNjMuanMiLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9pdGctbmV4dGdlbi1mcm9udGVuZC8uL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL2lkLmpzPzUwMzgiXSwic291cmNlc0NvbnRlbnQiOlsiLy8hIG1vbWVudC5qcyBsb2NhbGUgY29uZmlndXJhdGlvblxuLy8hIGxvY2FsZSA6IEluZG9uZXNpYW4gW2lkXVxuLy8hIGF1dGhvciA6IE1vaGFtbWFkIFNhdHJpbyBVdG9tbyA6IGh0dHBzOi8vZ2l0aHViLmNvbS90eW9rXG4vLyEgcmVmZXJlbmNlOiBodHRwOi8vaWQud2lraXNvdXJjZS5vcmcvd2lraS9QZWRvbWFuX1VtdW1fRWphYW5fQmFoYXNhX0luZG9uZXNpYV95YW5nX0Rpc2VtcHVybmFrYW5cblxuOyhmdW5jdGlvbiAoZ2xvYmFsLCBmYWN0b3J5KSB7XG4gICB0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcgJiYgdHlwZW9mIG1vZHVsZSAhPT0gJ3VuZGVmaW5lZCdcbiAgICAgICAmJiB0eXBlb2YgcmVxdWlyZSA9PT0gJ2Z1bmN0aW9uJyA/IGZhY3RvcnkocmVxdWlyZSgnLi4vbW9tZW50JykpIDpcbiAgIHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgZGVmaW5lLmFtZCA/IGRlZmluZShbJy4uL21vbWVudCddLCBmYWN0b3J5KSA6XG4gICBmYWN0b3J5KGdsb2JhbC5tb21lbnQpXG59KHRoaXMsIChmdW5jdGlvbiAobW9tZW50KSB7ICd1c2Ugc3RyaWN0JztcblxuICAgIC8vISBtb21lbnQuanMgbG9jYWxlIGNvbmZpZ3VyYXRpb25cblxuICAgIHZhciBpZCA9IG1vbWVudC5kZWZpbmVMb2NhbGUoJ2lkJywge1xuICAgICAgICBtb250aHM6ICdKYW51YXJpX0ZlYnJ1YXJpX01hcmV0X0FwcmlsX01laV9KdW5pX0p1bGlfQWd1c3R1c19TZXB0ZW1iZXJfT2t0b2Jlcl9Ob3ZlbWJlcl9EZXNlbWJlcicuc3BsaXQoXG4gICAgICAgICAgICAnXydcbiAgICAgICAgKSxcbiAgICAgICAgbW9udGhzU2hvcnQ6ICdKYW5fRmViX01hcl9BcHJfTWVpX0p1bl9KdWxfQWd0X1NlcF9Pa3RfTm92X0Rlcycuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXM6ICdNaW5nZ3VfU2VuaW5fU2VsYXNhX1JhYnVfS2FtaXNfSnVtYXRfU2FidHUnLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzU2hvcnQ6ICdNaW5fU2VuX1NlbF9SYWJfS2FtX0p1bV9TYWInLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzTWluOiAnTWdfU25fU2xfUmJfS21fSm1fU2InLnNwbGl0KCdfJyksXG4gICAgICAgIGxvbmdEYXRlRm9ybWF0OiB7XG4gICAgICAgICAgICBMVDogJ0hILm1tJyxcbiAgICAgICAgICAgIExUUzogJ0hILm1tLnNzJyxcbiAgICAgICAgICAgIEw6ICdERC9NTS9ZWVlZJyxcbiAgICAgICAgICAgIExMOiAnRCBNTU1NIFlZWVknLFxuICAgICAgICAgICAgTExMOiAnRCBNTU1NIFlZWVkgW3B1a3VsXSBISC5tbScsXG4gICAgICAgICAgICBMTExMOiAnZGRkZCwgRCBNTU1NIFlZWVkgW3B1a3VsXSBISC5tbScsXG4gICAgICAgIH0sXG4gICAgICAgIG1lcmlkaWVtUGFyc2U6IC9wYWdpfHNpYW5nfHNvcmV8bWFsYW0vLFxuICAgICAgICBtZXJpZGllbUhvdXI6IGZ1bmN0aW9uIChob3VyLCBtZXJpZGllbSkge1xuICAgICAgICAgICAgaWYgKGhvdXIgPT09IDEyKSB7XG4gICAgICAgICAgICAgICAgaG91ciA9IDA7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAobWVyaWRpZW0gPT09ICdwYWdpJykge1xuICAgICAgICAgICAgICAgIHJldHVybiBob3VyO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChtZXJpZGllbSA9PT0gJ3NpYW5nJykge1xuICAgICAgICAgICAgICAgIHJldHVybiBob3VyID49IDExID8gaG91ciA6IGhvdXIgKyAxMjtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAobWVyaWRpZW0gPT09ICdzb3JlJyB8fCBtZXJpZGllbSA9PT0gJ21hbGFtJykge1xuICAgICAgICAgICAgICAgIHJldHVybiBob3VyICsgMTI7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIG1lcmlkaWVtOiBmdW5jdGlvbiAoaG91cnMsIG1pbnV0ZXMsIGlzTG93ZXIpIHtcbiAgICAgICAgICAgIGlmIChob3VycyA8IDExKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuICdwYWdpJztcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoaG91cnMgPCAxNSkge1xuICAgICAgICAgICAgICAgIHJldHVybiAnc2lhbmcnO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChob3VycyA8IDE5KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuICdzb3JlJztcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuICdtYWxhbSc7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIGNhbGVuZGFyOiB7XG4gICAgICAgICAgICBzYW1lRGF5OiAnW0hhcmkgaW5pIHB1a3VsXSBMVCcsXG4gICAgICAgICAgICBuZXh0RGF5OiAnW0Jlc29rIHB1a3VsXSBMVCcsXG4gICAgICAgICAgICBuZXh0V2VlazogJ2RkZGQgW3B1a3VsXSBMVCcsXG4gICAgICAgICAgICBsYXN0RGF5OiAnW0tlbWFyaW4gcHVrdWxdIExUJyxcbiAgICAgICAgICAgIGxhc3RXZWVrOiAnZGRkZCBbbGFsdSBwdWt1bF0gTFQnLFxuICAgICAgICAgICAgc2FtZUVsc2U6ICdMJyxcbiAgICAgICAgfSxcbiAgICAgICAgcmVsYXRpdmVUaW1lOiB7XG4gICAgICAgICAgICBmdXR1cmU6ICdkYWxhbSAlcycsXG4gICAgICAgICAgICBwYXN0OiAnJXMgeWFuZyBsYWx1JyxcbiAgICAgICAgICAgIHM6ICdiZWJlcmFwYSBkZXRpaycsXG4gICAgICAgICAgICBzczogJyVkIGRldGlrJyxcbiAgICAgICAgICAgIG06ICdzZW1lbml0JyxcbiAgICAgICAgICAgIG1tOiAnJWQgbWVuaXQnLFxuICAgICAgICAgICAgaDogJ3NlamFtJyxcbiAgICAgICAgICAgIGhoOiAnJWQgamFtJyxcbiAgICAgICAgICAgIGQ6ICdzZWhhcmknLFxuICAgICAgICAgICAgZGQ6ICclZCBoYXJpJyxcbiAgICAgICAgICAgIE06ICdzZWJ1bGFuJyxcbiAgICAgICAgICAgIE1NOiAnJWQgYnVsYW4nLFxuICAgICAgICAgICAgeTogJ3NldGFodW4nLFxuICAgICAgICAgICAgeXk6ICclZCB0YWh1bicsXG4gICAgICAgIH0sXG4gICAgICAgIHdlZWs6IHtcbiAgICAgICAgICAgIGRvdzogMCwgLy8gU3VuZGF5IGlzIHRoZSBmaXJzdCBkYXkgb2YgdGhlIHdlZWsuXG4gICAgICAgICAgICBkb3k6IDYsIC8vIFRoZSB3ZWVrIHRoYXQgY29udGFpbnMgSmFuIDZ0aCBpcyB0aGUgZmlyc3Qgd2VlayBvZiB0aGUgeWVhci5cbiAgICAgICAgfSxcbiAgICB9KTtcblxuICAgIHJldHVybiBpZDtcblxufSkpKTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///74063\n")},74429:(I,g,t)=>{"use strict";I.exports=t.p+"90324c77d506b5d3c9e8.png"},74610:(module,__unused_webpack_exports,__webpack_require__)=>{"use strict";eval("// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n// a transform stream is a readable/writable stream where you do\n// something with the data. Sometimes it's called a \"filter\",\n// but that's not a great name for it, since that implies a thing where\n// some bits pass through, and others are simply ignored. (That would\n// be a valid example of a transform, of course.)\n//\n// While the output is causally related to the input, it's not a\n// necessarily symmetric or synchronous transformation. For example,\n// a zlib stream might take multiple plain-text writes(), and then\n// emit a single compressed chunk some time in the future.\n//\n// Here's how this works:\n//\n// The Transform stream has all the aspects of the readable and writable\n// stream classes. When you write(chunk), that calls _write(chunk,cb)\n// internally, and returns false if there's a lot of pending writes\n// buffered up. When you call read(), that calls _read(n) until\n// there's enough pending readable data buffered up.\n//\n// In a transform stream, the written data is placed in a buffer. When\n// _read(n) is called, it transforms the queued up data, calling the\n// buffered _write cb's as it consumes chunks. If consuming a single\n// written chunk would result in multiple output chunks, then the first\n// outputted bit calls the readcb, and subsequent chunks just go into\n// the read buffer, and will cause it to emit 'readable' if necessary.\n//\n// This way, back-pressure is actually determined by the reading side,\n// since _read has to be called to start processing a new chunk. However,\n// a pathological inflate type of transform can cause excessive buffering\n// here. For example, imagine a stream where every byte of input is\n// interpreted as an integer from 0-255, and then results in that many\n// bytes of output. Writing the 4 bytes {ff,ff,ff,ff} would result in\n// 1kb of data being output. In this case, you could write a very small\n// amount of input, and end up with a very large amount of output. In\n// such a pathological inflating mechanism, there'd be no way to tell\n// the system to stop doing the transform. A single 4MB write could\n// cause the system to run out of memory.\n//\n// However, even in such a pathological case, only a single written chunk\n// would be consumed, and then the rest would wait (un-transformed) until\n// the results of the previous transformed chunk were consumed.\n\n\n\nmodule.exports = Transform;\nvar _require$codes = (__webpack_require__(86048)/* .codes */ .F),\n ERR_METHOD_NOT_IMPLEMENTED = _require$codes.ERR_METHOD_NOT_IMPLEMENTED,\n ERR_MULTIPLE_CALLBACK = _require$codes.ERR_MULTIPLE_CALLBACK,\n ERR_TRANSFORM_ALREADY_TRANSFORMING = _require$codes.ERR_TRANSFORM_ALREADY_TRANSFORMING,\n ERR_TRANSFORM_WITH_LENGTH_0 = _require$codes.ERR_TRANSFORM_WITH_LENGTH_0;\nvar Duplex = __webpack_require__(25382);\n__webpack_require__(56698)(Transform, Duplex);\nfunction afterTransform(er, data) {\n var ts = this._transformState;\n ts.transforming = false;\n var cb = ts.writecb;\n if (cb === null) {\n return this.emit('error', new ERR_MULTIPLE_CALLBACK());\n }\n ts.writechunk = null;\n ts.writecb = null;\n if (data != null)\n // single equals check for both `null` and `undefined`\n this.push(data);\n cb(er);\n var rs = this._readableState;\n rs.reading = false;\n if (rs.needReadable || rs.length < rs.highWaterMark) {\n this._read(rs.highWaterMark);\n }\n}\nfunction Transform(options) {\n if (!(this instanceof Transform)) return new Transform(options);\n Duplex.call(this, options);\n this._transformState = {\n afterTransform: afterTransform.bind(this),\n needTransform: false,\n transforming: false,\n writecb: null,\n writechunk: null,\n writeencoding: null\n };\n\n // start out asking for a readable event once data is transformed.\n this._readableState.needReadable = true;\n\n // we have implemented the _read method, and done the other things\n // that Readable wants before the first _read call, so unset the\n // sync guard flag.\n this._readableState.sync = false;\n if (options) {\n if (typeof options.transform === 'function') this._transform = options.transform;\n if (typeof options.flush === 'function') this._flush = options.flush;\n }\n\n // When the writable side finishes, then flush out anything remaining.\n this.on('prefinish', prefinish);\n}\nfunction prefinish() {\n var _this = this;\n if (typeof this._flush === 'function' && !this._readableState.destroyed) {\n this._flush(function (er, data) {\n done(_this, er, data);\n });\n } else {\n done(this, null, null);\n }\n}\nTransform.prototype.push = function (chunk, encoding) {\n this._transformState.needTransform = false;\n return Duplex.prototype.push.call(this, chunk, encoding);\n};\n\n// This is the part where you do stuff!\n// override this function in implementation classes.\n// 'chunk' is an input chunk.\n//\n// Call `push(newChunk)` to pass along transformed output\n// to the readable side. You may call 'push' zero or more times.\n//\n// Call `cb(err)` when you are done with this chunk. If you pass\n// an error, then that'll put the hurt on the whole operation. If you\n// never call cb(), then you'll never get another chunk.\nTransform.prototype._transform = function (chunk, encoding, cb) {\n cb(new ERR_METHOD_NOT_IMPLEMENTED('_transform()'));\n};\nTransform.prototype._write = function (chunk, encoding, cb) {\n var ts = this._transformState;\n ts.writecb = cb;\n ts.writechunk = chunk;\n ts.writeencoding = encoding;\n if (!ts.transforming) {\n var rs = this._readableState;\n if (ts.needTransform || rs.needReadable || rs.length < rs.highWaterMark) this._read(rs.highWaterMark);\n }\n};\n\n// Doesn't matter what the args are here.\n// _transform does all the work.\n// That we got here means that the readable side wants more data.\nTransform.prototype._read = function (n) {\n var ts = this._transformState;\n if (ts.writechunk !== null && !ts.transforming) {\n ts.transforming = true;\n this._transform(ts.writechunk, ts.writeencoding, ts.afterTransform);\n } else {\n // mark that we need a transform, so that any data that comes in\n // will get processed, now that we've asked for it.\n ts.needTransform = true;\n }\n};\nTransform.prototype._destroy = function (err, cb) {\n Duplex.prototype._destroy.call(this, err, function (err2) {\n cb(err2);\n });\n};\nfunction done(stream, er, data) {\n if (er) return stream.emit('error', er);\n if (data != null)\n // single equals check for both `null` and `undefined`\n stream.push(data);\n\n // TODO(BridgeAR): Write a test for these two error cases\n // if there's nothing in the write buffer, then that means\n // that nothing more will ever be provided\n if (stream._writableState.length) throw new ERR_TRANSFORM_WITH_LENGTH_0();\n if (stream._transformState.transforming) throw new ERR_TRANSFORM_ALREADY_TRANSFORMING();\n return stream.push(null);\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNzQ2MTAuanMiLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9pdGctbmV4dGdlbi1mcm9udGVuZC8uL25vZGVfbW9kdWxlcy9yZWFkYWJsZS1zdHJlYW0vbGliL19zdHJlYW1fdHJhbnNmb3JtLmpzPzI3YmYiXSwic291cmNlc0NvbnRlbnQiOlsiLy8gQ29weXJpZ2h0IEpveWVudCwgSW5jLiBhbmQgb3RoZXIgTm9kZSBjb250cmlidXRvcnMuXG4vL1xuLy8gUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGFcbi8vIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGVcbi8vIFwiU29mdHdhcmVcIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZ1xuLy8gd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLFxuLy8gZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdFxuLy8gcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlXG4vLyBmb2xsb3dpbmcgY29uZGl0aW9uczpcbi8vXG4vLyBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZFxuLy8gaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuXG4vL1xuLy8gVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFwiQVMgSVNcIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTU1xuLy8gT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRlxuLy8gTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTlxuLy8gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sXG4vLyBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1Jcbi8vIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEVcbi8vIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuXG5cbi8vIGEgdHJhbnNmb3JtIHN0cmVhbSBpcyBhIHJlYWRhYmxlL3dyaXRhYmxlIHN0cmVhbSB3aGVyZSB5b3UgZG9cbi8vIHNvbWV0aGluZyB3aXRoIHRoZSBkYXRhLiAgU29tZXRpbWVzIGl0J3MgY2FsbGVkIGEgXCJmaWx0ZXJcIixcbi8vIGJ1dCB0aGF0J3Mgbm90IGEgZ3JlYXQgbmFtZSBmb3IgaXQsIHNpbmNlIHRoYXQgaW1wbGllcyBhIHRoaW5nIHdoZXJlXG4vLyBzb21lIGJpdHMgcGFzcyB0aHJvdWdoLCBhbmQgb3RoZXJzIGFyZSBzaW1wbHkgaWdub3JlZC4gIChUaGF0IHdvdWxkXG4vLyBiZSBhIHZhbGlkIGV4YW1wbGUgb2YgYSB0cmFuc2Zvcm0sIG9mIGNvdXJzZS4pXG4vL1xuLy8gV2hpbGUgdGhlIG91dHB1dCBpcyBjYXVzYWxseSByZWxhdGVkIHRvIHRoZSBpbnB1dCwgaXQncyBub3QgYVxuLy8gbmVjZXNzYXJpbHkgc3ltbWV0cmljIG9yIHN5bmNocm9ub3VzIHRyYW5zZm9ybWF0aW9uLiAgRm9yIGV4YW1wbGUsXG4vLyBhIHpsaWIgc3RyZWFtIG1pZ2h0IHRha2UgbXVsdGlwbGUgcGxhaW4tdGV4dCB3cml0ZXMoKSwgYW5kIHRoZW5cbi8vIGVtaXQgYSBzaW5nbGUgY29tcHJlc3NlZCBjaHVuayBzb21lIHRpbWUgaW4gdGhlIGZ1dHVyZS5cbi8vXG4vLyBIZXJlJ3MgaG93IHRoaXMgd29ya3M6XG4vL1xuLy8gVGhlIFRyYW5zZm9ybSBzdHJlYW0gaGFzIGFsbCB0aGUgYXNwZWN0cyBvZiB0aGUgcmVhZGFibGUgYW5kIHdyaXRhYmxlXG4vLyBzdHJlYW0gY2xhc3Nlcy4gIFdoZW4geW91IHdyaXRlKGNodW5rKSwgdGhhdCBjYWxscyBfd3JpdGUoY2h1bmssY2IpXG4vLyBpbnRlcm5hbGx5LCBhbmQgcmV0dXJucyBmYWxzZSBpZiB0aGVyZSdzIGEgbG90IG9mIHBlbmRpbmcgd3JpdGVzXG4vLyBidWZmZXJlZCB1cC4gIFdoZW4geW91IGNhbGwgcmVhZCgpLCB0aGF0IGNhbGxzIF9yZWFkKG4pIHVudGlsXG4vLyB0aGVyZSdzIGVub3VnaCBwZW5kaW5nIHJlYWRhYmxlIGRhdGEgYnVmZmVyZWQgdXAuXG4vL1xuLy8gSW4gYSB0cmFuc2Zvcm0gc3RyZWFtLCB0aGUgd3JpdHRlbiBkYXRhIGlzIHBsYWNlZCBpbiBhIGJ1ZmZlci4gIFdoZW5cbi8vIF9yZWFkKG4pIGlzIGNhbGxlZCwgaXQgdHJhbnNmb3JtcyB0aGUgcXVldWVkIHVwIGRhdGEsIGNhbGxpbmcgdGhlXG4vLyBidWZmZXJlZCBfd3JpdGUgY2IncyBhcyBpdCBjb25zdW1lcyBjaHVua3MuICBJZiBjb25zdW1pbmcgYSBzaW5nbGVcbi8vIHdyaXR0ZW4gY2h1bmsgd291bGQgcmVzdWx0IGluIG11bHRpcGxlIG91dHB1dCBjaHVua3MsIHRoZW4gdGhlIGZpcnN0XG4vLyBvdXRwdXR0ZWQgYml0IGNhbGxzIHRoZSByZWFkY2IsIGFuZCBzdWJzZXF1ZW50IGNodW5rcyBqdXN0IGdvIGludG9cbi8vIHRoZSByZWFkIGJ1ZmZlciwgYW5kIHdpbGwgY2F1c2UgaXQgdG8gZW1pdCAncmVhZGFibGUnIGlmIG5lY2Vzc2FyeS5cbi8vXG4vLyBUaGlzIHdheSwgYmFjay1wcmVzc3VyZSBpcyBhY3R1YWxseSBkZXRlcm1pbmVkIGJ5IHRoZSByZWFkaW5nIHNpZGUsXG4vLyBzaW5jZSBfcmVhZCBoYXMgdG8gYmUgY2FsbGVkIHRvIHN0YXJ0IHByb2Nlc3NpbmcgYSBuZXcgY2h1bmsuICBIb3dldmVyLFxuLy8gYSBwYXRob2xvZ2ljYWwgaW5mbGF0ZSB0eXBlIG9mIHRyYW5zZm9ybSBjYW4gY2F1c2UgZXhjZXNzaXZlIGJ1ZmZlcmluZ1xuLy8gaGVyZS4gIEZvciBleGFtcGxlLCBpbWFnaW5lIGEgc3RyZWFtIHdoZXJlIGV2ZXJ5IGJ5dGUgb2YgaW5wdXQgaXNcbi8vIGludGVycHJldGVkIGFzIGFuIGludGVnZXIgZnJvbSAwLTI1NSwgYW5kIHRoZW4gcmVzdWx0cyBpbiB0aGF0IG1hbnlcbi8vIGJ5dGVzIG9mIG91dHB1dC4gIFdyaXRpbmcgdGhlIDQgYnl0ZXMge2ZmLGZmLGZmLGZmfSB3b3VsZCByZXN1bHQgaW5cbi8vIDFrYiBvZiBkYXRhIGJlaW5nIG91dHB1dC4gIEluIHRoaXMgY2FzZSwgeW91IGNvdWxkIHdyaXRlIGEgdmVyeSBzbWFsbFxuLy8gYW1vdW50IG9mIGlucHV0LCBhbmQgZW5kIHVwIHdpdGggYSB2ZXJ5IGxhcmdlIGFtb3VudCBvZiBvdXRwdXQuICBJblxuLy8gc3VjaCBhIHBhdGhvbG9naWNhbCBpbmZsYXRpbmcgbWVjaGFuaXNtLCB0aGVyZSdkIGJlIG5vIHdheSB0byB0ZWxsXG4vLyB0aGUgc3lzdGVtIHRvIHN0b3AgZG9pbmcgdGhlIHRyYW5zZm9ybS4gIEEgc2luZ2xlIDRNQiB3cml0ZSBjb3VsZFxuLy8gY2F1c2UgdGhlIHN5c3RlbSB0byBydW4gb3V0IG9mIG1lbW9yeS5cbi8vXG4vLyBIb3dldmVyLCBldmVuIGluIHN1Y2ggYSBwYXRob2xvZ2ljYWwgY2FzZSwgb25seSBhIHNpbmdsZSB3cml0dGVuIGNodW5rXG4vLyB3b3VsZCBiZSBjb25zdW1lZCwgYW5kIHRoZW4gdGhlIHJlc3Qgd291bGQgd2FpdCAodW4tdHJhbnNmb3JtZWQpIHVudGlsXG4vLyB0aGUgcmVzdWx0cyBvZiB0aGUgcHJldmlvdXMgdHJhbnNmb3JtZWQgY2h1bmsgd2VyZSBjb25zdW1lZC5cblxuJ3VzZSBzdHJpY3QnO1xuXG5tb2R1bGUuZXhwb3J0cyA9IFRyYW5zZm9ybTtcbnZhciBfcmVxdWlyZSRjb2RlcyA9IHJlcXVpcmUoJy4uL2Vycm9ycycpLmNvZGVzLFxuICBFUlJfTUVUSE9EX05PVF9JTVBMRU1FTlRFRCA9IF9yZXF1aXJlJGNvZGVzLkVSUl9NRVRIT0RfTk9UX0lNUExFTUVOVEVELFxuICBFUlJfTVVMVElQTEVfQ0FMTEJBQ0sgPSBfcmVxdWlyZSRjb2Rlcy5FUlJfTVVMVElQTEVfQ0FMTEJBQ0ssXG4gIEVSUl9UUkFOU0ZPUk1fQUxSRUFEWV9UUkFOU0ZPUk1JTkcgPSBfcmVxdWlyZSRjb2Rlcy5FUlJfVFJBTlNGT1JNX0FMUkVBRFlfVFJBTlNGT1JNSU5HLFxuICBFUlJfVFJBTlNGT1JNX1dJVEhfTEVOR1RIXzAgPSBfcmVxdWlyZSRjb2Rlcy5FUlJfVFJBTlNGT1JNX1dJVEhfTEVOR1RIXzA7XG52YXIgRHVwbGV4ID0gcmVxdWlyZSgnLi9fc3RyZWFtX2R1cGxleCcpO1xucmVxdWlyZSgnaW5oZXJpdHMnKShUcmFuc2Zvcm0sIER1cGxleCk7XG5mdW5jdGlvbiBhZnRlclRyYW5zZm9ybShlciwgZGF0YSkge1xuICB2YXIgdHMgPSB0aGlzLl90cmFuc2Zvcm1TdGF0ZTtcbiAgdHMudHJhbnNmb3JtaW5nID0gZmFsc2U7XG4gIHZhciBjYiA9IHRzLndyaXRlY2I7XG4gIGlmIChjYiA9PT0gbnVsbCkge1xuICAgIHJldHVybiB0aGlzLmVtaXQoJ2Vycm9yJywgbmV3IEVSUl9NVUxUSVBMRV9DQUxMQkFDSygpKTtcbiAgfVxuICB0cy53cml0ZWNodW5rID0gbnVsbDtcbiAgdHMud3JpdGVjYiA9IG51bGw7XG4gIGlmIChkYXRhICE9IG51bGwpXG4gICAgLy8gc2luZ2xlIGVxdWFscyBjaGVjayBmb3IgYm90aCBgbnVsbGAgYW5kIGB1bmRlZmluZWRgXG4gICAgdGhpcy5wdXNoKGRhdGEpO1xuICBjYihlcik7XG4gIHZhciBycyA9IHRoaXMuX3JlYWRhYmxlU3RhdGU7XG4gIHJzLnJlYWRpbmcgPSBmYWxzZTtcbiAgaWYgKHJzLm5lZWRSZWFkYWJsZSB8fCBycy5sZW5ndGggPCBycy5oaWdoV2F0ZXJNYXJrKSB7XG4gICAgdGhpcy5fcmVhZChycy5oaWdoV2F0ZXJNYXJrKTtcbiAgfVxufVxuZnVuY3Rpb24gVHJhbnNmb3JtKG9wdGlvbnMpIHtcbiAgaWYgKCEodGhpcyBpbnN0YW5jZW9mIFRyYW5zZm9ybSkpIHJldHVybiBuZXcgVHJhbnNmb3JtKG9wdGlvbnMpO1xuICBEdXBsZXguY2FsbCh0aGlzLCBvcHRpb25zKTtcbiAgdGhpcy5fdHJhbnNmb3JtU3RhdGUgPSB7XG4gICAgYWZ0ZXJUcmFuc2Zvcm06IGFmdGVyVHJhbnNmb3JtLmJpbmQodGhpcyksXG4gICAgbmVlZFRyYW5zZm9ybTogZmFsc2UsXG4gICAgdHJhbnNmb3JtaW5nOiBmYWxzZSxcbiAgICB3cml0ZWNiOiBudWxsLFxuICAgIHdyaXRlY2h1bms6IG51bGwsXG4gICAgd3JpdGVlbmNvZGluZzogbnVsbFxuICB9O1xuXG4gIC8vIHN0YXJ0IG91dCBhc2tpbmcgZm9yIGEgcmVhZGFibGUgZXZlbnQgb25jZSBkYXRhIGlzIHRyYW5zZm9ybWVkLlxuICB0aGlzLl9yZWFkYWJsZVN0YXRlLm5lZWRSZWFkYWJsZSA9IHRydWU7XG5cbiAgLy8gd2UgaGF2ZSBpbXBsZW1lbnRlZCB0aGUgX3JlYWQgbWV0aG9kLCBhbmQgZG9uZSB0aGUgb3RoZXIgdGhpbmdzXG4gIC8vIHRoYXQgUmVhZGFibGUgd2FudHMgYmVmb3JlIHRoZSBmaXJzdCBfcmVhZCBjYWxsLCBzbyB1bnNldCB0aGVcbiAgLy8gc3luYyBndWFyZCBmbGFnLlxuICB0aGlzLl9yZWFkYWJsZVN0YXRlLnN5bmMgPSBmYWxzZTtcbiAgaWYgKG9wdGlvbnMpIHtcbiAgICBpZiAodHlwZW9mIG9wdGlvbnMudHJhbnNmb3JtID09PSAnZnVuY3Rpb24nKSB0aGlzLl90cmFuc2Zvcm0gPSBvcHRpb25zLnRyYW5zZm9ybTtcbiAgICBpZiAodHlwZW9mIG9wdGlvbnMuZmx1c2ggPT09ICdmdW5jdGlvbicpIHRoaXMuX2ZsdXNoID0gb3B0aW9ucy5mbHVzaDtcbiAgfVxuXG4gIC8vIFdoZW4gdGhlIHdyaXRhYmxlIHNpZGUgZmluaXNoZXMsIHRoZW4gZmx1c2ggb3V0IGFueXRoaW5nIHJlbWFpbmluZy5cbiAgdGhpcy5vbigncHJlZmluaXNoJywgcHJlZmluaXNoKTtcbn1cbmZ1bmN0aW9uIHByZWZpbmlzaCgpIHtcbiAgdmFyIF90aGlzID0gdGhpcztcbiAgaWYgKHR5cGVvZiB0aGlzLl9mbHVzaCA9PT0gJ2Z1bmN0aW9uJyAmJiAhdGhpcy5fcmVhZGFibGVTdGF0ZS5kZXN0cm95ZWQpIHtcbiAgICB0aGlzLl9mbHVzaChmdW5jdGlvbiAoZXIsIGRhdGEpIHtcbiAgICAgIGRvbmUoX3RoaXMsIGVyLCBkYXRhKTtcbiAgICB9KTtcbiAgfSBlbHNlIHtcbiAgICBkb25lKHRoaXMsIG51bGwsIG51bGwpO1xuICB9XG59XG5UcmFuc2Zvcm0ucHJvdG90eXBlLnB1c2ggPSBmdW5jdGlvbiAoY2h1bmssIGVuY29kaW5nKSB7XG4gIHRoaXMuX3RyYW5zZm9ybVN0YXRlLm5lZWRUcmFuc2Zvcm0gPSBmYWxzZTtcbiAgcmV0dXJuIER1cGxleC5wcm90b3R5cGUucHVzaC5jYWxsKHRoaXMsIGNodW5rLCBlbmNvZGluZyk7XG59O1xuXG4vLyBUaGlzIGlzIHRoZSBwYXJ0IHdoZXJlIHlvdSBkbyBzdHVmZiFcbi8vIG92ZXJyaWRlIHRoaXMgZnVuY3Rpb24gaW4gaW1wbGVtZW50YXRpb24gY2xhc3Nlcy5cbi8vICdjaHVuaycgaXMgYW4gaW5wdXQgY2h1bmsuXG4vL1xuLy8gQ2FsbCBgcHVzaChuZXdDaHVuaylgIHRvIHBhc3MgYWxvbmcgdHJhbnNmb3JtZWQgb3V0cHV0XG4vLyB0byB0aGUgcmVhZGFibGUgc2lkZS4gIFlvdSBtYXkgY2FsbCAncHVzaCcgemVybyBvciBtb3JlIHRpbWVzLlxuLy9cbi8vIENhbGwgYGNiKGVycilgIHdoZW4geW91IGFyZSBkb25lIHdpdGggdGhpcyBjaHVuay4gIElmIHlvdSBwYXNzXG4vLyBhbiBlcnJvciwgdGhlbiB0aGF0J2xsIHB1dCB0aGUgaHVydCBvbiB0aGUgd2hvbGUgb3BlcmF0aW9uLiAgSWYgeW91XG4vLyBuZXZlciBjYWxsIGNiKCksIHRoZW4geW91J2xsIG5ldmVyIGdldCBhbm90aGVyIGNodW5rLlxuVHJhbnNmb3JtLnByb3RvdHlwZS5fdHJhbnNmb3JtID0gZnVuY3Rpb24gKGNodW5rLCBlbmNvZGluZywgY2IpIHtcbiAgY2IobmV3IEVSUl9NRVRIT0RfTk9UX0lNUExFTUVOVEVEKCdfdHJhbnNmb3JtKCknKSk7XG59O1xuVHJhbnNmb3JtLnByb3RvdHlwZS5fd3JpdGUgPSBmdW5jdGlvbiAoY2h1bmssIGVuY29kaW5nLCBjYikge1xuICB2YXIgdHMgPSB0aGlzLl90cmFuc2Zvcm1TdGF0ZTtcbiAgdHMud3JpdGVjYiA9IGNiO1xuICB0cy53cml0ZWNodW5rID0gY2h1bms7XG4gIHRzLndyaXRlZW5jb2RpbmcgPSBlbmNvZGluZztcbiAgaWYgKCF0cy50cmFuc2Zvcm1pbmcpIHtcbiAgICB2YXIgcnMgPSB0aGlzLl9yZWFkYWJsZVN0YXRlO1xuICAgIGlmICh0cy5uZWVkVHJhbnNmb3JtIHx8IHJzLm5lZWRSZWFkYWJsZSB8fCBycy5sZW5ndGggPCBycy5oaWdoV2F0ZXJNYXJrKSB0aGlzLl9yZWFkKHJzLmhpZ2hXYXRlck1hcmspO1xuICB9XG59O1xuXG4vLyBEb2Vzbid0IG1hdHRlciB3aGF0IHRoZSBhcmdzIGFyZSBoZXJlLlxuLy8gX3RyYW5zZm9ybSBkb2VzIGFsbCB0aGUgd29yay5cbi8vIFRoYXQgd2UgZ290IGhlcmUgbWVhbnMgdGhhdCB0aGUgcmVhZGFibGUgc2lkZSB3YW50cyBtb3JlIGRhdGEuXG5UcmFuc2Zvcm0ucHJvdG90eXBlLl9yZWFkID0gZnVuY3Rpb24gKG4pIHtcbiAgdmFyIHRzID0gdGhpcy5fdHJhbnNmb3JtU3RhdGU7XG4gIGlmICh0cy53cml0ZWNodW5rICE9PSBudWxsICYmICF0cy50cmFuc2Zvcm1pbmcpIHtcbiAgICB0cy50cmFuc2Zvcm1pbmcgPSB0cnVlO1xuICAgIHRoaXMuX3RyYW5zZm9ybSh0cy53cml0ZWNodW5rLCB0cy53cml0ZWVuY29kaW5nLCB0cy5hZnRlclRyYW5zZm9ybSk7XG4gIH0gZWxzZSB7XG4gICAgLy8gbWFyayB0aGF0IHdlIG5lZWQgYSB0cmFuc2Zvcm0sIHNvIHRoYXQgYW55IGRhdGEgdGhhdCBjb21lcyBpblxuICAgIC8vIHdpbGwgZ2V0IHByb2Nlc3NlZCwgbm93IHRoYXQgd2UndmUgYXNrZWQgZm9yIGl0LlxuICAgIHRzLm5lZWRUcmFuc2Zvcm0gPSB0cnVlO1xuICB9XG59O1xuVHJhbnNmb3JtLnByb3RvdHlwZS5fZGVzdHJveSA9IGZ1bmN0aW9uIChlcnIsIGNiKSB7XG4gIER1cGxleC5wcm90b3R5cGUuX2Rlc3Ryb3kuY2FsbCh0aGlzLCBlcnIsIGZ1bmN0aW9uIChlcnIyKSB7XG4gICAgY2IoZXJyMik7XG4gIH0pO1xufTtcbmZ1bmN0aW9uIGRvbmUoc3RyZWFtLCBlciwgZGF0YSkge1xuICBpZiAoZXIpIHJldHVybiBzdHJlYW0uZW1pdCgnZXJyb3InLCBlcik7XG4gIGlmIChkYXRhICE9IG51bGwpXG4gICAgLy8gc2luZ2xlIGVxdWFscyBjaGVjayBmb3IgYm90aCBgbnVsbGAgYW5kIGB1bmRlZmluZWRgXG4gICAgc3RyZWFtLnB1c2goZGF0YSk7XG5cbiAgLy8gVE9ETyhCcmlkZ2VBUik6IFdyaXRlIGEgdGVzdCBmb3IgdGhlc2UgdHdvIGVycm9yIGNhc2VzXG4gIC8vIGlmIHRoZXJlJ3Mgbm90aGluZyBpbiB0aGUgd3JpdGUgYnVmZmVyLCB0aGVuIHRoYXQgbWVhbnNcbiAgLy8gdGhhdCBub3RoaW5nIG1vcmUgd2lsbCBldmVyIGJlIHByb3ZpZGVkXG4gIGlmIChzdHJlYW0uX3dyaXRhYmxlU3RhdGUubGVuZ3RoKSB0aHJvdyBuZXcgRVJSX1RSQU5TRk9STV9XSVRIX0xFTkdUSF8wKCk7XG4gIGlmIChzdHJlYW0uX3RyYW5zZm9ybVN0YXRlLnRyYW5zZm9ybWluZykgdGhyb3cgbmV3IEVSUl9UUkFOU0ZPUk1fQUxSRUFEWV9UUkFOU0ZPUk1JTkcoKTtcbiAgcmV0dXJuIHN0cmVhbS5wdXNoKG51bGwpO1xufSJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///74610\n")},74692:function(module,exports){eval('var __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;/*!\n * jQuery JavaScript Library v3.7.1\n * https://jquery.com/\n *\n * Copyright OpenJS Foundation and other contributors\n * Released under the MIT license\n * https://jquery.org/license\n *\n * Date: 2023-08-28T13:37Z\n */\n( function( global, factory ) {\n\n\t"use strict";\n\n\tif ( true && typeof module.exports === "object" ) {\n\n\t\t// For CommonJS and CommonJS-like environments where a proper `window`\n\t\t// is present, execute the factory and get jQuery.\n\t\t// For environments that do not have a `window` with a `document`\n\t\t// (such as Node.js), expose a factory as module.exports.\n\t\t// This accentuates the need for the creation of a real `window`.\n\t\t// e.g. var jQuery = require("jquery")(window);\n\t\t// See ticket trac-14549 for more info.\n\t\tmodule.exports = global.document ?\n\t\t\tfactory( global, true ) :\n\t\t\tfunction( w ) {\n\t\t\t\tif ( !w.document ) {\n\t\t\t\t\tthrow new Error( "jQuery requires a window with a document" );\n\t\t\t\t}\n\t\t\t\treturn factory( w );\n\t\t\t};\n\t} else {\n\t\tfactory( global );\n\t}\n\n// Pass this if window is not defined yet\n} )( typeof window !== "undefined" ? window : this, function( window, noGlobal ) {\n\n// Edge <= 12 - 13+, Firefox <=18 - 45+, IE 10 - 11, Safari 5.1 - 9+, iOS 6 - 9.1\n// throw exceptions when non-strict code (e.g., ASP.NET 4.5) accesses strict mode\n// arguments.callee.caller (trac-13335). But as of jQuery 3.0 (2016), strict mode should be common\n// enough that all such attempts are guarded in a try block.\n"use strict";\n\nvar arr = [];\n\nvar getProto = Object.getPrototypeOf;\n\nvar slice = arr.slice;\n\nvar flat = arr.flat ? function( array ) {\n\treturn arr.flat.call( array );\n} : function( array ) {\n\treturn arr.concat.apply( [], array );\n};\n\n\nvar push = arr.push;\n\nvar indexOf = arr.indexOf;\n\nvar class2type = {};\n\nvar toString = class2type.toString;\n\nvar hasOwn = class2type.hasOwnProperty;\n\nvar fnToString = hasOwn.toString;\n\nvar ObjectFunctionString = fnToString.call( Object );\n\nvar support = {};\n\nvar isFunction = function isFunction( obj ) {\n\n\t\t// Support: Chrome <=57, Firefox <=52\n\t\t// In some browsers, typeof returns "function" for HTML elements\n\t\t// (i.e., `typeof document.createElement( "object" ) === "function"`).\n\t\t// We don\'t want to classify *any* DOM node as a function.\n\t\t// Support: QtWeb <=3.8.5, WebKit <=534.34, wkhtmltopdf tool <=0.12.5\n\t\t// Plus for old WebKit, typeof returns "function" for HTML collections\n\t\t// (e.g., `typeof document.getElementsByTagName("div") === "function"`). (gh-4756)\n\t\treturn typeof obj === "function" && typeof obj.nodeType !== "number" &&\n\t\t\ttypeof obj.item !== "function";\n\t};\n\n\nvar isWindow = function isWindow( obj ) {\n\t\treturn obj != null && obj === obj.window;\n\t};\n\n\nvar document = window.document;\n\n\n\n\tvar preservedScriptAttributes = {\n\t\ttype: true,\n\t\tsrc: true,\n\t\tnonce: true,\n\t\tnoModule: true\n\t};\n\n\tfunction DOMEval( code, node, doc ) {\n\t\tdoc = doc || document;\n\n\t\tvar i, val,\n\t\t\tscript = doc.createElement( "script" );\n\n\t\tscript.text = code;\n\t\tif ( node ) {\n\t\t\tfor ( i in preservedScriptAttributes ) {\n\n\t\t\t\t// Support: Firefox 64+, Edge 18+\n\t\t\t\t// Some browsers don\'t support the "nonce" property on scripts.\n\t\t\t\t// On the other hand, just using `getAttribute` is not enough as\n\t\t\t\t// the `nonce` attribute is reset to an empty string whenever it\n\t\t\t\t// becomes browsing-context connected.\n\t\t\t\t// See https://github.com/whatwg/html/issues/2369\n\t\t\t\t// See https://html.spec.whatwg.org/#nonce-attributes\n\t\t\t\t// The `node.getAttribute` check was added for the sake of\n\t\t\t\t// `jQuery.globalEval` so that it can fake a nonce-containing node\n\t\t\t\t// via an object.\n\t\t\t\tval = node[ i ] || node.getAttribute && node.getAttribute( i );\n\t\t\t\tif ( val ) {\n\t\t\t\t\tscript.setAttribute( i, val );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tdoc.head.appendChild( script ).parentNode.removeChild( script );\n\t}\n\n\nfunction toType( obj ) {\n\tif ( obj == null ) {\n\t\treturn obj + "";\n\t}\n\n\t// Support: Android <=2.3 only (functionish RegExp)\n\treturn typeof obj === "object" || typeof obj === "function" ?\n\t\tclass2type[ toString.call( obj ) ] || "object" :\n\t\ttypeof obj;\n}\n/* global Symbol */\n// Defining this global in .eslintrc.json would create a danger of using the global\n// unguarded in another place, it seems safer to define global only for this module\n\n\n\nvar version = "3.7.1",\n\n\trhtmlSuffix = /HTML$/i,\n\n\t// Define a local copy of jQuery\n\tjQuery = function( selector, context ) {\n\n\t\t// The jQuery object is actually just the init constructor \'enhanced\'\n\t\t// Need init if jQuery is called (just allow error to be thrown if not included)\n\t\treturn new jQuery.fn.init( selector, context );\n\t};\n\njQuery.fn = jQuery.prototype = {\n\n\t// The current version of jQuery being used\n\tjquery: version,\n\n\tconstructor: jQuery,\n\n\t// The default length of a jQuery object is 0\n\tlength: 0,\n\n\ttoArray: function() {\n\t\treturn slice.call( this );\n\t},\n\n\t// Get the Nth element in the matched element set OR\n\t// Get the whole matched element set as a clean array\n\tget: function( num ) {\n\n\t\t// Return all the elements in a clean array\n\t\tif ( num == null ) {\n\t\t\treturn slice.call( this );\n\t\t}\n\n\t\t// Return just the one element from the set\n\t\treturn num < 0 ? this[ num + this.length ] : this[ num ];\n\t},\n\n\t// Take an array of elements and push it onto the stack\n\t// (returning the new matched element set)\n\tpushStack: function( elems ) {\n\n\t\t// Build a new jQuery matched element set\n\t\tvar ret = jQuery.merge( this.constructor(), elems );\n\n\t\t// Add the old object onto the stack (as a reference)\n\t\tret.prevObject = this;\n\n\t\t// Return the newly-formed element set\n\t\treturn ret;\n\t},\n\n\t// Execute a callback for every element in the matched set.\n\teach: function( callback ) {\n\t\treturn jQuery.each( this, callback );\n\t},\n\n\tmap: function( callback ) {\n\t\treturn this.pushStack( jQuery.map( this, function( elem, i ) {\n\t\t\treturn callback.call( elem, i, elem );\n\t\t} ) );\n\t},\n\n\tslice: function() {\n\t\treturn this.pushStack( slice.apply( this, arguments ) );\n\t},\n\n\tfirst: function() {\n\t\treturn this.eq( 0 );\n\t},\n\n\tlast: function() {\n\t\treturn this.eq( -1 );\n\t},\n\n\teven: function() {\n\t\treturn this.pushStack( jQuery.grep( this, function( _elem, i ) {\n\t\t\treturn ( i + 1 ) % 2;\n\t\t} ) );\n\t},\n\n\todd: function() {\n\t\treturn this.pushStack( jQuery.grep( this, function( _elem, i ) {\n\t\t\treturn i % 2;\n\t\t} ) );\n\t},\n\n\teq: function( i ) {\n\t\tvar len = this.length,\n\t\t\tj = +i + ( i < 0 ? len : 0 );\n\t\treturn this.pushStack( j >= 0 && j < len ? [ this[ j ] ] : [] );\n\t},\n\n\tend: function() {\n\t\treturn this.prevObject || this.constructor();\n\t},\n\n\t// For internal use only.\n\t// Behaves like an Array\'s method, not like a jQuery method.\n\tpush: push,\n\tsort: arr.sort,\n\tsplice: arr.splice\n};\n\njQuery.extend = jQuery.fn.extend = function() {\n\tvar options, name, src, copy, copyIsArray, clone,\n\t\ttarget = arguments[ 0 ] || {},\n\t\ti = 1,\n\t\tlength = arguments.length,\n\t\tdeep = false;\n\n\t// Handle a deep copy situation\n\tif ( typeof target === "boolean" ) {\n\t\tdeep = target;\n\n\t\t// Skip the boolean and the target\n\t\ttarget = arguments[ i ] || {};\n\t\ti++;\n\t}\n\n\t// Handle case when target is a string or something (possible in deep copy)\n\tif ( typeof target !== "object" && !isFunction( target ) ) {\n\t\ttarget = {};\n\t}\n\n\t// Extend jQuery itself if only one argument is passed\n\tif ( i === length ) {\n\t\ttarget = this;\n\t\ti--;\n\t}\n\n\tfor ( ; i < length; i++ ) {\n\n\t\t// Only deal with non-null/undefined values\n\t\tif ( ( options = arguments[ i ] ) != null ) {\n\n\t\t\t// Extend the base object\n\t\t\tfor ( name in options ) {\n\t\t\t\tcopy = options[ name ];\n\n\t\t\t\t// Prevent Object.prototype pollution\n\t\t\t\t// Prevent never-ending loop\n\t\t\t\tif ( name === "__proto__" || target === copy ) {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\t// Recurse if we\'re merging plain objects or arrays\n\t\t\t\tif ( deep && copy && ( jQuery.isPlainObject( copy ) ||\n\t\t\t\t\t( copyIsArray = Array.isArray( copy ) ) ) ) {\n\t\t\t\t\tsrc = target[ name ];\n\n\t\t\t\t\t// Ensure proper type for the source value\n\t\t\t\t\tif ( copyIsArray && !Array.isArray( src ) ) {\n\t\t\t\t\t\tclone = [];\n\t\t\t\t\t} else if ( !copyIsArray && !jQuery.isPlainObject( src ) ) {\n\t\t\t\t\t\tclone = {};\n\t\t\t\t\t} else {\n\t\t\t\t\t\tclone = src;\n\t\t\t\t\t}\n\t\t\t\t\tcopyIsArray = false;\n\n\t\t\t\t\t// Never move original objects, clone them\n\t\t\t\t\ttarget[ name ] = jQuery.extend( deep, clone, copy );\n\n\t\t\t\t// Don\'t bring in undefined values\n\t\t\t\t} else if ( copy !== undefined ) {\n\t\t\t\t\ttarget[ name ] = copy;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t// Return the modified object\n\treturn target;\n};\n\njQuery.extend( {\n\n\t// Unique for each copy of jQuery on the page\n\texpando: "jQuery" + ( version + Math.random() ).replace( /\\D/g, "" ),\n\n\t// Assume jQuery is ready without the ready module\n\tisReady: true,\n\n\terror: function( msg ) {\n\t\tthrow new Error( msg );\n\t},\n\n\tnoop: function() {},\n\n\tisPlainObject: function( obj ) {\n\t\tvar proto, Ctor;\n\n\t\t// Detect obvious negatives\n\t\t// Use toString instead of jQuery.type to catch host objects\n\t\tif ( !obj || toString.call( obj ) !== "[object Object]" ) {\n\t\t\treturn false;\n\t\t}\n\n\t\tproto = getProto( obj );\n\n\t\t// Objects with no prototype (e.g., `Object.create( null )`) are plain\n\t\tif ( !proto ) {\n\t\t\treturn true;\n\t\t}\n\n\t\t// Objects with prototype are plain iff they were constructed by a global Object function\n\t\tCtor = hasOwn.call( proto, "constructor" ) && proto.constructor;\n\t\treturn typeof Ctor === "function" && fnToString.call( Ctor ) === ObjectFunctionString;\n\t},\n\n\tisEmptyObject: function( obj ) {\n\t\tvar name;\n\n\t\tfor ( name in obj ) {\n\t\t\treturn false;\n\t\t}\n\t\treturn true;\n\t},\n\n\t// Evaluates a script in a provided context; falls back to the global one\n\t// if not specified.\n\tglobalEval: function( code, options, doc ) {\n\t\tDOMEval( code, { nonce: options && options.nonce }, doc );\n\t},\n\n\teach: function( obj, callback ) {\n\t\tvar length, i = 0;\n\n\t\tif ( isArrayLike( obj ) ) {\n\t\t\tlength = obj.length;\n\t\t\tfor ( ; i < length; i++ ) {\n\t\t\t\tif ( callback.call( obj[ i ], i, obj[ i ] ) === false ) {\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t} else {\n\t\t\tfor ( i in obj ) {\n\t\t\t\tif ( callback.call( obj[ i ], i, obj[ i ] ) === false ) {\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn obj;\n\t},\n\n\n\t// Retrieve the text value of an array of DOM nodes\n\ttext: function( elem ) {\n\t\tvar node,\n\t\t\tret = "",\n\t\t\ti = 0,\n\t\t\tnodeType = elem.nodeType;\n\n\t\tif ( !nodeType ) {\n\n\t\t\t// If no nodeType, this is expected to be an array\n\t\t\twhile ( ( node = elem[ i++ ] ) ) {\n\n\t\t\t\t// Do not traverse comment nodes\n\t\t\t\tret += jQuery.text( node );\n\t\t\t}\n\t\t}\n\t\tif ( nodeType === 1 || nodeType === 11 ) {\n\t\t\treturn elem.textContent;\n\t\t}\n\t\tif ( nodeType === 9 ) {\n\t\t\treturn elem.documentElement.textContent;\n\t\t}\n\t\tif ( nodeType === 3 || nodeType === 4 ) {\n\t\t\treturn elem.nodeValue;\n\t\t}\n\n\t\t// Do not include comment or processing instruction nodes\n\n\t\treturn ret;\n\t},\n\n\t// results is for internal usage only\n\tmakeArray: function( arr, results ) {\n\t\tvar ret = results || [];\n\n\t\tif ( arr != null ) {\n\t\t\tif ( isArrayLike( Object( arr ) ) ) {\n\t\t\t\tjQuery.merge( ret,\n\t\t\t\t\ttypeof arr === "string" ?\n\t\t\t\t\t\t[ arr ] : arr\n\t\t\t\t);\n\t\t\t} else {\n\t\t\t\tpush.call( ret, arr );\n\t\t\t}\n\t\t}\n\n\t\treturn ret;\n\t},\n\n\tinArray: function( elem, arr, i ) {\n\t\treturn arr == null ? -1 : indexOf.call( arr, elem, i );\n\t},\n\n\tisXMLDoc: function( elem ) {\n\t\tvar namespace = elem && elem.namespaceURI,\n\t\t\tdocElem = elem && ( elem.ownerDocument || elem ).documentElement;\n\n\t\t// Assume HTML when documentElement doesn\'t yet exist, such as inside\n\t\t// document fragments.\n\t\treturn !rhtmlSuffix.test( namespace || docElem && docElem.nodeName || "HTML" );\n\t},\n\n\t// Support: Android <=4.0 only, PhantomJS 1 only\n\t// push.apply(_, arraylike) throws on ancient WebKit\n\tmerge: function( first, second ) {\n\t\tvar len = +second.length,\n\t\t\tj = 0,\n\t\t\ti = first.length;\n\n\t\tfor ( ; j < len; j++ ) {\n\t\t\tfirst[ i++ ] = second[ j ];\n\t\t}\n\n\t\tfirst.length = i;\n\n\t\treturn first;\n\t},\n\n\tgrep: function( elems, callback, invert ) {\n\t\tvar callbackInverse,\n\t\t\tmatches = [],\n\t\t\ti = 0,\n\t\t\tlength = elems.length,\n\t\t\tcallbackExpect = !invert;\n\n\t\t// Go through the array, only saving the items\n\t\t// that pass the validator function\n\t\tfor ( ; i < length; i++ ) {\n\t\t\tcallbackInverse = !callback( elems[ i ], i );\n\t\t\tif ( callbackInverse !== callbackExpect ) {\n\t\t\t\tmatches.push( elems[ i ] );\n\t\t\t}\n\t\t}\n\n\t\treturn matches;\n\t},\n\n\t// arg is for internal usage only\n\tmap: function( elems, callback, arg ) {\n\t\tvar length, value,\n\t\t\ti = 0,\n\t\t\tret = [];\n\n\t\t// Go through the array, translating each of the items to their new values\n\t\tif ( isArrayLike( elems ) ) {\n\t\t\tlength = elems.length;\n\t\t\tfor ( ; i < length; i++ ) {\n\t\t\t\tvalue = callback( elems[ i ], i, arg );\n\n\t\t\t\tif ( value != null ) {\n\t\t\t\t\tret.push( value );\n\t\t\t\t}\n\t\t\t}\n\n\t\t// Go through every key on the object,\n\t\t} else {\n\t\t\tfor ( i in elems ) {\n\t\t\t\tvalue = callback( elems[ i ], i, arg );\n\n\t\t\t\tif ( value != null ) {\n\t\t\t\t\tret.push( value );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Flatten any nested arrays\n\t\treturn flat( ret );\n\t},\n\n\t// A global GUID counter for objects\n\tguid: 1,\n\n\t// jQuery.support is not used in Core but other projects attach their\n\t// properties to it so it needs to exist.\n\tsupport: support\n} );\n\nif ( typeof Symbol === "function" ) {\n\tjQuery.fn[ Symbol.iterator ] = arr[ Symbol.iterator ];\n}\n\n// Populate the class2type map\njQuery.each( "Boolean Number String Function Array Date RegExp Object Error Symbol".split( " " ),\n\tfunction( _i, name ) {\n\t\tclass2type[ "[object " + name + "]" ] = name.toLowerCase();\n\t} );\n\nfunction isArrayLike( obj ) {\n\n\t// Support: real iOS 8.2 only (not reproducible in simulator)\n\t// `in` check used to prevent JIT error (gh-2145)\n\t// hasOwn isn\'t used here due to false negatives\n\t// regarding Nodelist length in IE\n\tvar length = !!obj && "length" in obj && obj.length,\n\t\ttype = toType( obj );\n\n\tif ( isFunction( obj ) || isWindow( obj ) ) {\n\t\treturn false;\n\t}\n\n\treturn type === "array" || length === 0 ||\n\t\ttypeof length === "number" && length > 0 && ( length - 1 ) in obj;\n}\n\n\nfunction nodeName( elem, name ) {\n\n\treturn elem.nodeName && elem.nodeName.toLowerCase() === name.toLowerCase();\n\n}\nvar pop = arr.pop;\n\n\nvar sort = arr.sort;\n\n\nvar splice = arr.splice;\n\n\nvar whitespace = "[\\\\x20\\\\t\\\\r\\\\n\\\\f]";\n\n\nvar rtrimCSS = new RegExp(\n\t"^" + whitespace + "+|((?:^|[^\\\\\\\\])(?:\\\\\\\\.)*)" + whitespace + "+$",\n\t"g"\n);\n\n\n\n\n// Note: an element does not contain itself\njQuery.contains = function( a, b ) {\n\tvar bup = b && b.parentNode;\n\n\treturn a === bup || !!( bup && bup.nodeType === 1 && (\n\n\t\t// Support: IE 9 - 11+\n\t\t// IE doesn\'t have `contains` on SVG.\n\t\ta.contains ?\n\t\t\ta.contains( bup ) :\n\t\t\ta.compareDocumentPosition && a.compareDocumentPosition( bup ) & 16\n\t) );\n};\n\n\n\n\n// CSS string/identifier serialization\n// https://drafts.csswg.org/cssom/#common-serializing-idioms\nvar rcssescape = /([\\0-\\x1f\\x7f]|^-?\\d)|^-$|[^\\x80-\\uFFFF\\w-]/g;\n\nfunction fcssescape( ch, asCodePoint ) {\n\tif ( asCodePoint ) {\n\n\t\t// U+0000 NULL becomes U+FFFD REPLACEMENT CHARACTER\n\t\tif ( ch === "\\0" ) {\n\t\t\treturn "\\uFFFD";\n\t\t}\n\n\t\t// Control characters and (dependent upon position) numbers get escaped as code points\n\t\treturn ch.slice( 0, -1 ) + "\\\\" + ch.charCodeAt( ch.length - 1 ).toString( 16 ) + " ";\n\t}\n\n\t// Other potentially-special ASCII characters get backslash-escaped\n\treturn "\\\\" + ch;\n}\n\njQuery.escapeSelector = function( sel ) {\n\treturn ( sel + "" ).replace( rcssescape, fcssescape );\n};\n\n\n\n\nvar preferredDoc = document,\n\tpushNative = push;\n\n( function() {\n\nvar i,\n\tExpr,\n\toutermostContext,\n\tsortInput,\n\thasDuplicate,\n\tpush = pushNative,\n\n\t// Local document vars\n\tdocument,\n\tdocumentElement,\n\tdocumentIsHTML,\n\trbuggyQSA,\n\tmatches,\n\n\t// Instance-specific data\n\texpando = jQuery.expando,\n\tdirruns = 0,\n\tdone = 0,\n\tclassCache = createCache(),\n\ttokenCache = createCache(),\n\tcompilerCache = createCache(),\n\tnonnativeSelectorCache = createCache(),\n\tsortOrder = function( a, b ) {\n\t\tif ( a === b ) {\n\t\t\thasDuplicate = true;\n\t\t}\n\t\treturn 0;\n\t},\n\n\tbooleans = "checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|" +\n\t\t"loop|multiple|open|readonly|required|scoped",\n\n\t// Regular expressions\n\n\t// https://www.w3.org/TR/css-syntax-3/#ident-token-diagram\n\tidentifier = "(?:\\\\\\\\[\\\\da-fA-F]{1,6}" + whitespace +\n\t\t"?|\\\\\\\\[^\\\\r\\\\n\\\\f]|[\\\\w-]|[^\\0-\\\\x7f])+",\n\n\t// Attribute selectors: https://www.w3.org/TR/selectors/#attribute-selectors\n\tattributes = "\\\\[" + whitespace + "*(" + identifier + ")(?:" + whitespace +\n\n\t\t// Operator (capture 2)\n\t\t"*([*^$|!~]?=)" + whitespace +\n\n\t\t// "Attribute values must be CSS identifiers [capture 5] or strings [capture 3 or capture 4]"\n\t\t"*(?:\'((?:\\\\\\\\.|[^\\\\\\\\\'])*)\'|\\"((?:\\\\\\\\.|[^\\\\\\\\\\"])*)\\"|(" + identifier + "))|)" +\n\t\twhitespace + "*\\\\]",\n\n\tpseudos = ":(" + identifier + ")(?:\\\\((" +\n\n\t\t// To reduce the number of selectors needing tokenize in the preFilter, prefer arguments:\n\t\t// 1. quoted (capture 3; capture 4 or capture 5)\n\t\t"(\'((?:\\\\\\\\.|[^\\\\\\\\\'])*)\'|\\"((?:\\\\\\\\.|[^\\\\\\\\\\"])*)\\")|" +\n\n\t\t// 2. simple (capture 6)\n\t\t"((?:\\\\\\\\.|[^\\\\\\\\()[\\\\]]|" + attributes + ")*)|" +\n\n\t\t// 3. anything else (capture 2)\n\t\t".*" +\n\t\t")\\\\)|)",\n\n\t// Leading and non-escaped trailing whitespace, capturing some non-whitespace characters preceding the latter\n\trwhitespace = new RegExp( whitespace + "+", "g" ),\n\n\trcomma = new RegExp( "^" + whitespace + "*," + whitespace + "*" ),\n\trleadingCombinator = new RegExp( "^" + whitespace + "*([>+~]|" + whitespace + ")" +\n\t\twhitespace + "*" ),\n\trdescend = new RegExp( whitespace + "|>" ),\n\n\trpseudo = new RegExp( pseudos ),\n\tridentifier = new RegExp( "^" + identifier + "$" ),\n\n\tmatchExpr = {\n\t\tID: new RegExp( "^#(" + identifier + ")" ),\n\t\tCLASS: new RegExp( "^\\\\.(" + identifier + ")" ),\n\t\tTAG: new RegExp( "^(" + identifier + "|[*])" ),\n\t\tATTR: new RegExp( "^" + attributes ),\n\t\tPSEUDO: new RegExp( "^" + pseudos ),\n\t\tCHILD: new RegExp(\n\t\t\t"^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\\\(" +\n\t\t\t\twhitespace + "*(even|odd|(([+-]|)(\\\\d*)n|)" + whitespace + "*(?:([+-]|)" +\n\t\t\t\twhitespace + "*(\\\\d+)|))" + whitespace + "*\\\\)|)", "i" ),\n\t\tbool: new RegExp( "^(?:" + booleans + ")$", "i" ),\n\n\t\t// For use in libraries implementing .is()\n\t\t// We use this for POS matching in `select`\n\t\tneedsContext: new RegExp( "^" + whitespace +\n\t\t\t"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\\\(" + whitespace +\n\t\t\t"*((?:-\\\\d)?\\\\d*)" + whitespace + "*\\\\)|)(?=[^-]|$)", "i" )\n\t},\n\n\trinputs = /^(?:input|select|textarea|button)$/i,\n\trheader = /^h\\d$/i,\n\n\t// Easily-parseable/retrievable ID or TAG or CLASS selectors\n\trquickExpr = /^(?:#([\\w-]+)|(\\w+)|\\.([\\w-]+))$/,\n\n\trsibling = /[+~]/,\n\n\t// CSS escapes\n\t// https://www.w3.org/TR/CSS21/syndata.html#escaped-characters\n\trunescape = new RegExp( "\\\\\\\\[\\\\da-fA-F]{1,6}" + whitespace +\n\t\t"?|\\\\\\\\([^\\\\r\\\\n\\\\f])", "g" ),\n\tfunescape = function( escape, nonHex ) {\n\t\tvar high = "0x" + escape.slice( 1 ) - 0x10000;\n\n\t\tif ( nonHex ) {\n\n\t\t\t// Strip the backslash prefix from a non-hex escape sequence\n\t\t\treturn nonHex;\n\t\t}\n\n\t\t// Replace a hexadecimal escape sequence with the encoded Unicode code point\n\t\t// Support: IE <=11+\n\t\t// For values outside the Basic Multilingual Plane (BMP), manually construct a\n\t\t// surrogate pair\n\t\treturn high < 0 ?\n\t\t\tString.fromCharCode( high + 0x10000 ) :\n\t\t\tString.fromCharCode( high >> 10 | 0xD800, high & 0x3FF | 0xDC00 );\n\t},\n\n\t// Used for iframes; see `setDocument`.\n\t// Support: IE 9 - 11+, Edge 12 - 18+\n\t// Removing the function wrapper causes a "Permission Denied"\n\t// error in IE/Edge.\n\tunloadHandler = function() {\n\t\tsetDocument();\n\t},\n\n\tinDisabledFieldset = addCombinator(\n\t\tfunction( elem ) {\n\t\t\treturn elem.disabled === true && nodeName( elem, "fieldset" );\n\t\t},\n\t\t{ dir: "parentNode", next: "legend" }\n\t);\n\n// Support: IE <=9 only\n// Accessing document.activeElement can throw unexpectedly\n// https://bugs.jquery.com/ticket/13393\nfunction safeActiveElement() {\n\ttry {\n\t\treturn document.activeElement;\n\t} catch ( err ) { }\n}\n\n// Optimize for push.apply( _, NodeList )\ntry {\n\tpush.apply(\n\t\t( arr = slice.call( preferredDoc.childNodes ) ),\n\t\tpreferredDoc.childNodes\n\t);\n\n\t// Support: Android <=4.0\n\t// Detect silently failing push.apply\n\t// eslint-disable-next-line no-unused-expressions\n\tarr[ preferredDoc.childNodes.length ].nodeType;\n} catch ( e ) {\n\tpush = {\n\t\tapply: function( target, els ) {\n\t\t\tpushNative.apply( target, slice.call( els ) );\n\t\t},\n\t\tcall: function( target ) {\n\t\t\tpushNative.apply( target, slice.call( arguments, 1 ) );\n\t\t}\n\t};\n}\n\nfunction find( selector, context, results, seed ) {\n\tvar m, i, elem, nid, match, groups, newSelector,\n\t\tnewContext = context && context.ownerDocument,\n\n\t\t// nodeType defaults to 9, since context defaults to document\n\t\tnodeType = context ? context.nodeType : 9;\n\n\tresults = results || [];\n\n\t// Return early from calls with invalid selector or context\n\tif ( typeof selector !== "string" || !selector ||\n\t\tnodeType !== 1 && nodeType !== 9 && nodeType !== 11 ) {\n\n\t\treturn results;\n\t}\n\n\t// Try to shortcut find operations (as opposed to filters) in HTML documents\n\tif ( !seed ) {\n\t\tsetDocument( context );\n\t\tcontext = context || document;\n\n\t\tif ( documentIsHTML ) {\n\n\t\t\t// If the selector is sufficiently simple, try using a "get*By*" DOM method\n\t\t\t// (excepting DocumentFragment context, where the methods don\'t exist)\n\t\t\tif ( nodeType !== 11 && ( match = rquickExpr.exec( selector ) ) ) {\n\n\t\t\t\t// ID selector\n\t\t\t\tif ( ( m = match[ 1 ] ) ) {\n\n\t\t\t\t\t// Document context\n\t\t\t\t\tif ( nodeType === 9 ) {\n\t\t\t\t\t\tif ( ( elem = context.getElementById( m ) ) ) {\n\n\t\t\t\t\t\t\t// Support: IE 9 only\n\t\t\t\t\t\t\t// getElementById can match elements by name instead of ID\n\t\t\t\t\t\t\tif ( elem.id === m ) {\n\t\t\t\t\t\t\t\tpush.call( results, elem );\n\t\t\t\t\t\t\t\treturn results;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\treturn results;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t// Element context\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\t// Support: IE 9 only\n\t\t\t\t\t\t// getElementById can match elements by name instead of ID\n\t\t\t\t\t\tif ( newContext && ( elem = newContext.getElementById( m ) ) &&\n\t\t\t\t\t\t\tfind.contains( context, elem ) &&\n\t\t\t\t\t\t\telem.id === m ) {\n\n\t\t\t\t\t\t\tpush.call( results, elem );\n\t\t\t\t\t\t\treturn results;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t// Type selector\n\t\t\t\t} else if ( match[ 2 ] ) {\n\t\t\t\t\tpush.apply( results, context.getElementsByTagName( selector ) );\n\t\t\t\t\treturn results;\n\n\t\t\t\t// Class selector\n\t\t\t\t} else if ( ( m = match[ 3 ] ) && context.getElementsByClassName ) {\n\t\t\t\t\tpush.apply( results, context.getElementsByClassName( m ) );\n\t\t\t\t\treturn results;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Take advantage of querySelectorAll\n\t\t\tif ( !nonnativeSelectorCache[ selector + " " ] &&\n\t\t\t\t( !rbuggyQSA || !rbuggyQSA.test( selector ) ) ) {\n\n\t\t\t\tnewSelector = selector;\n\t\t\t\tnewContext = context;\n\n\t\t\t\t// qSA considers elements outside a scoping root when evaluating child or\n\t\t\t\t// descendant combinators, which is not what we want.\n\t\t\t\t// In such cases, we work around the behavior by prefixing every selector in the\n\t\t\t\t// list with an ID selector referencing the scope context.\n\t\t\t\t// The technique has to be used as well when a leading combinator is used\n\t\t\t\t// as such selectors are not recognized by querySelectorAll.\n\t\t\t\t// Thanks to Andrew Dupont for this technique.\n\t\t\t\tif ( nodeType === 1 &&\n\t\t\t\t\t( rdescend.test( selector ) || rleadingCombinator.test( selector ) ) ) {\n\n\t\t\t\t\t// Expand context for sibling selectors\n\t\t\t\t\tnewContext = rsibling.test( selector ) && testContext( context.parentNode ) ||\n\t\t\t\t\t\tcontext;\n\n\t\t\t\t\t// We can use :scope instead of the ID hack if the browser\n\t\t\t\t\t// supports it & if we\'re not changing the context.\n\t\t\t\t\t// Support: IE 11+, Edge 17 - 18+\n\t\t\t\t\t// IE/Edge sometimes throw a "Permission denied" error when\n\t\t\t\t\t// strict-comparing two documents; shallow comparisons work.\n\t\t\t\t\t// eslint-disable-next-line eqeqeq\n\t\t\t\t\tif ( newContext != context || !support.scope ) {\n\n\t\t\t\t\t\t// Capture the context ID, setting it first if necessary\n\t\t\t\t\t\tif ( ( nid = context.getAttribute( "id" ) ) ) {\n\t\t\t\t\t\t\tnid = jQuery.escapeSelector( nid );\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tcontext.setAttribute( "id", ( nid = expando ) );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// Prefix every selector in the list\n\t\t\t\t\tgroups = tokenize( selector );\n\t\t\t\t\ti = groups.length;\n\t\t\t\t\twhile ( i-- ) {\n\t\t\t\t\t\tgroups[ i ] = ( nid ? "#" + nid : ":scope" ) + " " +\n\t\t\t\t\t\t\ttoSelector( groups[ i ] );\n\t\t\t\t\t}\n\t\t\t\t\tnewSelector = groups.join( "," );\n\t\t\t\t}\n\n\t\t\t\ttry {\n\t\t\t\t\tpush.apply( results,\n\t\t\t\t\t\tnewContext.querySelectorAll( newSelector )\n\t\t\t\t\t);\n\t\t\t\t\treturn results;\n\t\t\t\t} catch ( qsaError ) {\n\t\t\t\t\tnonnativeSelectorCache( selector, true );\n\t\t\t\t} finally {\n\t\t\t\t\tif ( nid === expando ) {\n\t\t\t\t\t\tcontext.removeAttribute( "id" );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t// All others\n\treturn select( selector.replace( rtrimCSS, "$1" ), context, results, seed );\n}\n\n/**\n * Create key-value caches of limited size\n * @returns {function(string, object)} Returns the Object data after storing it on itself with\n *\tproperty name the (space-suffixed) string and (if the cache is larger than Expr.cacheLength)\n *\tdeleting the oldest entry\n */\nfunction createCache() {\n\tvar keys = [];\n\n\tfunction cache( key, value ) {\n\n\t\t// Use (key + " ") to avoid collision with native prototype properties\n\t\t// (see https://github.com/jquery/sizzle/issues/157)\n\t\tif ( keys.push( key + " " ) > Expr.cacheLength ) {\n\n\t\t\t// Only keep the most recent entries\n\t\t\tdelete cache[ keys.shift() ];\n\t\t}\n\t\treturn ( cache[ key + " " ] = value );\n\t}\n\treturn cache;\n}\n\n/**\n * Mark a function for special use by jQuery selector module\n * @param {Function} fn The function to mark\n */\nfunction markFunction( fn ) {\n\tfn[ expando ] = true;\n\treturn fn;\n}\n\n/**\n * Support testing using an element\n * @param {Function} fn Passed the created element and returns a boolean result\n */\nfunction assert( fn ) {\n\tvar el = document.createElement( "fieldset" );\n\n\ttry {\n\t\treturn !!fn( el );\n\t} catch ( e ) {\n\t\treturn false;\n\t} finally {\n\n\t\t// Remove from its parent by default\n\t\tif ( el.parentNode ) {\n\t\t\tel.parentNode.removeChild( el );\n\t\t}\n\n\t\t// release memory in IE\n\t\tel = null;\n\t}\n}\n\n/**\n * Returns a function to use in pseudos for input types\n * @param {String} type\n */\nfunction createInputPseudo( type ) {\n\treturn function( elem ) {\n\t\treturn nodeName( elem, "input" ) && elem.type === type;\n\t};\n}\n\n/**\n * Returns a function to use in pseudos for buttons\n * @param {String} type\n */\nfunction createButtonPseudo( type ) {\n\treturn function( elem ) {\n\t\treturn ( nodeName( elem, "input" ) || nodeName( elem, "button" ) ) &&\n\t\t\telem.type === type;\n\t};\n}\n\n/**\n * Returns a function to use in pseudos for :enabled/:disabled\n * @param {Boolean} disabled true for :disabled; false for :enabled\n */\nfunction createDisabledPseudo( disabled ) {\n\n\t// Known :disabled false positives: fieldset[disabled] > legend:nth-of-type(n+2) :can-disable\n\treturn function( elem ) {\n\n\t\t// Only certain elements can match :enabled or :disabled\n\t\t// https://html.spec.whatwg.org/multipage/scripting.html#selector-enabled\n\t\t// https://html.spec.whatwg.org/multipage/scripting.html#selector-disabled\n\t\tif ( "form" in elem ) {\n\n\t\t\t// Check for inherited disabledness on relevant non-disabled elements:\n\t\t\t// * listed form-associated elements in a disabled fieldset\n\t\t\t// https://html.spec.whatwg.org/multipage/forms.html#category-listed\n\t\t\t// https://html.spec.whatwg.org/multipage/forms.html#concept-fe-disabled\n\t\t\t// * option elements in a disabled optgroup\n\t\t\t// https://html.spec.whatwg.org/multipage/forms.html#concept-option-disabled\n\t\t\t// All such elements have a "form" property.\n\t\t\tif ( elem.parentNode && elem.disabled === false ) {\n\n\t\t\t\t// Option elements defer to a parent optgroup if present\n\t\t\t\tif ( "label" in elem ) {\n\t\t\t\t\tif ( "label" in elem.parentNode ) {\n\t\t\t\t\t\treturn elem.parentNode.disabled === disabled;\n\t\t\t\t\t} else {\n\t\t\t\t\t\treturn elem.disabled === disabled;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Support: IE 6 - 11+\n\t\t\t\t// Use the isDisabled shortcut property to check for disabled fieldset ancestors\n\t\t\t\treturn elem.isDisabled === disabled ||\n\n\t\t\t\t\t// Where there is no isDisabled, check manually\n\t\t\t\t\telem.isDisabled !== !disabled &&\n\t\t\t\t\t\tinDisabledFieldset( elem ) === disabled;\n\t\t\t}\n\n\t\t\treturn elem.disabled === disabled;\n\n\t\t// Try to winnow out elements that can\'t be disabled before trusting the disabled property.\n\t\t// Some victims get caught in our net (label, legend, menu, track), but it shouldn\'t\n\t\t// even exist on them, let alone have a boolean value.\n\t\t} else if ( "label" in elem ) {\n\t\t\treturn elem.disabled === disabled;\n\t\t}\n\n\t\t// Remaining elements are neither :enabled nor :disabled\n\t\treturn false;\n\t};\n}\n\n/**\n * Returns a function to use in pseudos for positionals\n * @param {Function} fn\n */\nfunction createPositionalPseudo( fn ) {\n\treturn markFunction( function( argument ) {\n\t\targument = +argument;\n\t\treturn markFunction( function( seed, matches ) {\n\t\t\tvar j,\n\t\t\t\tmatchIndexes = fn( [], seed.length, argument ),\n\t\t\t\ti = matchIndexes.length;\n\n\t\t\t// Match elements found at the specified indexes\n\t\t\twhile ( i-- ) {\n\t\t\t\tif ( seed[ ( j = matchIndexes[ i ] ) ] ) {\n\t\t\t\t\tseed[ j ] = !( matches[ j ] = seed[ j ] );\n\t\t\t\t}\n\t\t\t}\n\t\t} );\n\t} );\n}\n\n/**\n * Checks a node for validity as a jQuery selector context\n * @param {Element|Object=} context\n * @returns {Element|Object|Boolean} The input node if acceptable, otherwise a falsy value\n */\nfunction testContext( context ) {\n\treturn context && typeof context.getElementsByTagName !== "undefined" && context;\n}\n\n/**\n * Sets document-related variables once based on the current document\n * @param {Element|Object} [node] An element or document object to use to set the document\n * @returns {Object} Returns the current document\n */\nfunction setDocument( node ) {\n\tvar subWindow,\n\t\tdoc = node ? node.ownerDocument || node : preferredDoc;\n\n\t// Return early if doc is invalid or already selected\n\t// Support: IE 11+, Edge 17 - 18+\n\t// IE/Edge sometimes throw a "Permission denied" error when strict-comparing\n\t// two documents; shallow comparisons work.\n\t// eslint-disable-next-line eqeqeq\n\tif ( doc == document || doc.nodeType !== 9 || !doc.documentElement ) {\n\t\treturn document;\n\t}\n\n\t// Update global variables\n\tdocument = doc;\n\tdocumentElement = document.documentElement;\n\tdocumentIsHTML = !jQuery.isXMLDoc( document );\n\n\t// Support: iOS 7 only, IE 9 - 11+\n\t// Older browsers didn\'t support unprefixed `matches`.\n\tmatches = documentElement.matches ||\n\t\tdocumentElement.webkitMatchesSelector ||\n\t\tdocumentElement.msMatchesSelector;\n\n\t// Support: IE 9 - 11+, Edge 12 - 18+\n\t// Accessing iframe documents after unload throws "permission denied" errors\n\t// (see trac-13936).\n\t// Limit the fix to IE & Edge Legacy; despite Edge 15+ implementing `matches`,\n\t// all IE 9+ and Edge Legacy versions implement `msMatchesSelector` as well.\n\tif ( documentElement.msMatchesSelector &&\n\n\t\t// Support: IE 11+, Edge 17 - 18+\n\t\t// IE/Edge sometimes throw a "Permission denied" error when strict-comparing\n\t\t// two documents; shallow comparisons work.\n\t\t// eslint-disable-next-line eqeqeq\n\t\tpreferredDoc != document &&\n\t\t( subWindow = document.defaultView ) && subWindow.top !== subWindow ) {\n\n\t\t// Support: IE 9 - 11+, Edge 12 - 18+\n\t\tsubWindow.addEventListener( "unload", unloadHandler );\n\t}\n\n\t// Support: IE <10\n\t// Check if getElementById returns elements by name\n\t// The broken getElementById methods don\'t pick up programmatically-set names,\n\t// so use a roundabout getElementsByName test\n\tsupport.getById = assert( function( el ) {\n\t\tdocumentElement.appendChild( el ).id = jQuery.expando;\n\t\treturn !document.getElementsByName ||\n\t\t\t!document.getElementsByName( jQuery.expando ).length;\n\t} );\n\n\t// Support: IE 9 only\n\t// Check to see if it\'s possible to do matchesSelector\n\t// on a disconnected node.\n\tsupport.disconnectedMatch = assert( function( el ) {\n\t\treturn matches.call( el, "*" );\n\t} );\n\n\t// Support: IE 9 - 11+, Edge 12 - 18+\n\t// IE/Edge don\'t support the :scope pseudo-class.\n\tsupport.scope = assert( function() {\n\t\treturn document.querySelectorAll( ":scope" );\n\t} );\n\n\t// Support: Chrome 105 - 111 only, Safari 15.4 - 16.3 only\n\t// Make sure the `:has()` argument is parsed unforgivingly.\n\t// We include `*` in the test to detect buggy implementations that are\n\t// _selectively_ forgiving (specifically when the list includes at least\n\t// one valid selector).\n\t// Note that we treat complete lack of support for `:has()` as if it were\n\t// spec-compliant support, which is fine because use of `:has()` in such\n\t// environments will fail in the qSA path and fall back to jQuery traversal\n\t// anyway.\n\tsupport.cssHas = assert( function() {\n\t\ttry {\n\t\t\tdocument.querySelector( ":has(*,:jqfake)" );\n\t\t\treturn false;\n\t\t} catch ( e ) {\n\t\t\treturn true;\n\t\t}\n\t} );\n\n\t// ID filter and find\n\tif ( support.getById ) {\n\t\tExpr.filter.ID = function( id ) {\n\t\t\tvar attrId = id.replace( runescape, funescape );\n\t\t\treturn function( elem ) {\n\t\t\t\treturn elem.getAttribute( "id" ) === attrId;\n\t\t\t};\n\t\t};\n\t\tExpr.find.ID = function( id, context ) {\n\t\t\tif ( typeof context.getElementById !== "undefined" && documentIsHTML ) {\n\t\t\t\tvar elem = context.getElementById( id );\n\t\t\t\treturn elem ? [ elem ] : [];\n\t\t\t}\n\t\t};\n\t} else {\n\t\tExpr.filter.ID = function( id ) {\n\t\t\tvar attrId = id.replace( runescape, funescape );\n\t\t\treturn function( elem ) {\n\t\t\t\tvar node = typeof elem.getAttributeNode !== "undefined" &&\n\t\t\t\t\telem.getAttributeNode( "id" );\n\t\t\t\treturn node && node.value === attrId;\n\t\t\t};\n\t\t};\n\n\t\t// Support: IE 6 - 7 only\n\t\t// getElementById is not reliable as a find shortcut\n\t\tExpr.find.ID = function( id, context ) {\n\t\t\tif ( typeof context.getElementById !== "undefined" && documentIsHTML ) {\n\t\t\t\tvar node, i, elems,\n\t\t\t\t\telem = context.getElementById( id );\n\n\t\t\t\tif ( elem ) {\n\n\t\t\t\t\t// Verify the id attribute\n\t\t\t\t\tnode = elem.getAttributeNode( "id" );\n\t\t\t\t\tif ( node && node.value === id ) {\n\t\t\t\t\t\treturn [ elem ];\n\t\t\t\t\t}\n\n\t\t\t\t\t// Fall back on getElementsByName\n\t\t\t\t\telems = context.getElementsByName( id );\n\t\t\t\t\ti = 0;\n\t\t\t\t\twhile ( ( elem = elems[ i++ ] ) ) {\n\t\t\t\t\t\tnode = elem.getAttributeNode( "id" );\n\t\t\t\t\t\tif ( node && node.value === id ) {\n\t\t\t\t\t\t\treturn [ elem ];\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\treturn [];\n\t\t\t}\n\t\t};\n\t}\n\n\t// Tag\n\tExpr.find.TAG = function( tag, context ) {\n\t\tif ( typeof context.getElementsByTagName !== "undefined" ) {\n\t\t\treturn context.getElementsByTagName( tag );\n\n\t\t// DocumentFragment nodes don\'t have gEBTN\n\t\t} else {\n\t\t\treturn context.querySelectorAll( tag );\n\t\t}\n\t};\n\n\t// Class\n\tExpr.find.CLASS = function( className, context ) {\n\t\tif ( typeof context.getElementsByClassName !== "undefined" && documentIsHTML ) {\n\t\t\treturn context.getElementsByClassName( className );\n\t\t}\n\t};\n\n\t/* QSA/matchesSelector\n\t---------------------------------------------------------------------- */\n\n\t// QSA and matchesSelector support\n\n\trbuggyQSA = [];\n\n\t// Build QSA regex\n\t// Regex strategy adopted from Diego Perini\n\tassert( function( el ) {\n\n\t\tvar input;\n\n\t\tdocumentElement.appendChild( el ).innerHTML =\n\t\t\t"" +\n\t\t\t"";\n\n\t\t// Support: iOS <=7 - 8 only\n\t\t// Boolean attributes and "value" are not treated correctly in some XML documents\n\t\tif ( !el.querySelectorAll( "[selected]" ).length ) {\n\t\t\trbuggyQSA.push( "\\\\[" + whitespace + "*(?:value|" + booleans + ")" );\n\t\t}\n\n\t\t// Support: iOS <=7 - 8 only\n\t\tif ( !el.querySelectorAll( "[id~=" + expando + "-]" ).length ) {\n\t\t\trbuggyQSA.push( "~=" );\n\t\t}\n\n\t\t// Support: iOS 8 only\n\t\t// https://bugs.webkit.org/show_bug.cgi?id=136851\n\t\t// In-page `selector#id sibling-combinator selector` fails\n\t\tif ( !el.querySelectorAll( "a#" + expando + "+*" ).length ) {\n\t\t\trbuggyQSA.push( ".#.+[+~]" );\n\t\t}\n\n\t\t// Support: Chrome <=105+, Firefox <=104+, Safari <=15.4+\n\t\t// In some of the document kinds, these selectors wouldn\'t work natively.\n\t\t// This is probably OK but for backwards compatibility we want to maintain\n\t\t// handling them through jQuery traversal in jQuery 3.x.\n\t\tif ( !el.querySelectorAll( ":checked" ).length ) {\n\t\t\trbuggyQSA.push( ":checked" );\n\t\t}\n\n\t\t// Support: Windows 8 Native Apps\n\t\t// The type and name attributes are restricted during .innerHTML assignment\n\t\tinput = document.createElement( "input" );\n\t\tinput.setAttribute( "type", "hidden" );\n\t\tel.appendChild( input ).setAttribute( "name", "D" );\n\n\t\t// Support: IE 9 - 11+\n\t\t// IE\'s :disabled selector does not pick up the children of disabled fieldsets\n\t\t// Support: Chrome <=105+, Firefox <=104+, Safari <=15.4+\n\t\t// In some of the document kinds, these selectors wouldn\'t work natively.\n\t\t// This is probably OK but for backwards compatibility we want to maintain\n\t\t// handling them through jQuery traversal in jQuery 3.x.\n\t\tdocumentElement.appendChild( el ).disabled = true;\n\t\tif ( el.querySelectorAll( ":disabled" ).length !== 2 ) {\n\t\t\trbuggyQSA.push( ":enabled", ":disabled" );\n\t\t}\n\n\t\t// Support: IE 11+, Edge 15 - 18+\n\t\t// IE 11/Edge don\'t find elements on a `[name=\'\']` query in some cases.\n\t\t// Adding a temporary attribute to the document before the selection works\n\t\t// around the issue.\n\t\t// Interestingly, IE 10 & older don\'t seem to have the issue.\n\t\tinput = document.createElement( "input" );\n\t\tinput.setAttribute( "name", "" );\n\t\tel.appendChild( input );\n\t\tif ( !el.querySelectorAll( "[name=\'\']" ).length ) {\n\t\t\trbuggyQSA.push( "\\\\[" + whitespace + "*name" + whitespace + "*=" +\n\t\t\t\twhitespace + "*(?:\'\'|\\"\\")" );\n\t\t}\n\t} );\n\n\tif ( !support.cssHas ) {\n\n\t\t// Support: Chrome 105 - 110+, Safari 15.4 - 16.3+\n\t\t// Our regular `try-catch` mechanism fails to detect natively-unsupported\n\t\t// pseudo-classes inside `:has()` (such as `:has(:contains("Foo"))`)\n\t\t// in browsers that parse the `:has()` argument as a forgiving selector list.\n\t\t// https://drafts.csswg.org/selectors/#relational now requires the argument\n\t\t// to be parsed unforgivingly, but browsers have not yet fully adjusted.\n\t\trbuggyQSA.push( ":has" );\n\t}\n\n\trbuggyQSA = rbuggyQSA.length && new RegExp( rbuggyQSA.join( "|" ) );\n\n\t/* Sorting\n\t---------------------------------------------------------------------- */\n\n\t// Document order sorting\n\tsortOrder = function( a, b ) {\n\n\t\t// Flag for duplicate removal\n\t\tif ( a === b ) {\n\t\t\thasDuplicate = true;\n\t\t\treturn 0;\n\t\t}\n\n\t\t// Sort on method existence if only one input has compareDocumentPosition\n\t\tvar compare = !a.compareDocumentPosition - !b.compareDocumentPosition;\n\t\tif ( compare ) {\n\t\t\treturn compare;\n\t\t}\n\n\t\t// Calculate position if both inputs belong to the same document\n\t\t// Support: IE 11+, Edge 17 - 18+\n\t\t// IE/Edge sometimes throw a "Permission denied" error when strict-comparing\n\t\t// two documents; shallow comparisons work.\n\t\t// eslint-disable-next-line eqeqeq\n\t\tcompare = ( a.ownerDocument || a ) == ( b.ownerDocument || b ) ?\n\t\t\ta.compareDocumentPosition( b ) :\n\n\t\t\t// Otherwise we know they are disconnected\n\t\t\t1;\n\n\t\t// Disconnected nodes\n\t\tif ( compare & 1 ||\n\t\t\t( !support.sortDetached && b.compareDocumentPosition( a ) === compare ) ) {\n\n\t\t\t// Choose the first element that is related to our preferred document\n\t\t\t// Support: IE 11+, Edge 17 - 18+\n\t\t\t// IE/Edge sometimes throw a "Permission denied" error when strict-comparing\n\t\t\t// two documents; shallow comparisons work.\n\t\t\t// eslint-disable-next-line eqeqeq\n\t\t\tif ( a === document || a.ownerDocument == preferredDoc &&\n\t\t\t\tfind.contains( preferredDoc, a ) ) {\n\t\t\t\treturn -1;\n\t\t\t}\n\n\t\t\t// Support: IE 11+, Edge 17 - 18+\n\t\t\t// IE/Edge sometimes throw a "Permission denied" error when strict-comparing\n\t\t\t// two documents; shallow comparisons work.\n\t\t\t// eslint-disable-next-line eqeqeq\n\t\t\tif ( b === document || b.ownerDocument == preferredDoc &&\n\t\t\t\tfind.contains( preferredDoc, b ) ) {\n\t\t\t\treturn 1;\n\t\t\t}\n\n\t\t\t// Maintain original order\n\t\t\treturn sortInput ?\n\t\t\t\t( indexOf.call( sortInput, a ) - indexOf.call( sortInput, b ) ) :\n\t\t\t\t0;\n\t\t}\n\n\t\treturn compare & 4 ? -1 : 1;\n\t};\n\n\treturn document;\n}\n\nfind.matches = function( expr, elements ) {\n\treturn find( expr, null, null, elements );\n};\n\nfind.matchesSelector = function( elem, expr ) {\n\tsetDocument( elem );\n\n\tif ( documentIsHTML &&\n\t\t!nonnativeSelectorCache[ expr + " " ] &&\n\t\t( !rbuggyQSA || !rbuggyQSA.test( expr ) ) ) {\n\n\t\ttry {\n\t\t\tvar ret = matches.call( elem, expr );\n\n\t\t\t// IE 9\'s matchesSelector returns false on disconnected nodes\n\t\t\tif ( ret || support.disconnectedMatch ||\n\n\t\t\t\t\t// As well, disconnected nodes are said to be in a document\n\t\t\t\t\t// fragment in IE 9\n\t\t\t\t\telem.document && elem.document.nodeType !== 11 ) {\n\t\t\t\treturn ret;\n\t\t\t}\n\t\t} catch ( e ) {\n\t\t\tnonnativeSelectorCache( expr, true );\n\t\t}\n\t}\n\n\treturn find( expr, document, null, [ elem ] ).length > 0;\n};\n\nfind.contains = function( context, elem ) {\n\n\t// Set document vars if needed\n\t// Support: IE 11+, Edge 17 - 18+\n\t// IE/Edge sometimes throw a "Permission denied" error when strict-comparing\n\t// two documents; shallow comparisons work.\n\t// eslint-disable-next-line eqeqeq\n\tif ( ( context.ownerDocument || context ) != document ) {\n\t\tsetDocument( context );\n\t}\n\treturn jQuery.contains( context, elem );\n};\n\n\nfind.attr = function( elem, name ) {\n\n\t// Set document vars if needed\n\t// Support: IE 11+, Edge 17 - 18+\n\t// IE/Edge sometimes throw a "Permission denied" error when strict-comparing\n\t// two documents; shallow comparisons work.\n\t// eslint-disable-next-line eqeqeq\n\tif ( ( elem.ownerDocument || elem ) != document ) {\n\t\tsetDocument( elem );\n\t}\n\n\tvar fn = Expr.attrHandle[ name.toLowerCase() ],\n\n\t\t// Don\'t get fooled by Object.prototype properties (see trac-13807)\n\t\tval = fn && hasOwn.call( Expr.attrHandle, name.toLowerCase() ) ?\n\t\t\tfn( elem, name, !documentIsHTML ) :\n\t\t\tundefined;\n\n\tif ( val !== undefined ) {\n\t\treturn val;\n\t}\n\n\treturn elem.getAttribute( name );\n};\n\nfind.error = function( msg ) {\n\tthrow new Error( "Syntax error, unrecognized expression: " + msg );\n};\n\n/**\n * Document sorting and removing duplicates\n * @param {ArrayLike} results\n */\njQuery.uniqueSort = function( results ) {\n\tvar elem,\n\t\tduplicates = [],\n\t\tj = 0,\n\t\ti = 0;\n\n\t// Unless we *know* we can detect duplicates, assume their presence\n\t//\n\t// Support: Android <=4.0+\n\t// Testing for detecting duplicates is unpredictable so instead assume we can\'t\n\t// depend on duplicate detection in all browsers without a stable sort.\n\thasDuplicate = !support.sortStable;\n\tsortInput = !support.sortStable && slice.call( results, 0 );\n\tsort.call( results, sortOrder );\n\n\tif ( hasDuplicate ) {\n\t\twhile ( ( elem = results[ i++ ] ) ) {\n\t\t\tif ( elem === results[ i ] ) {\n\t\t\t\tj = duplicates.push( i );\n\t\t\t}\n\t\t}\n\t\twhile ( j-- ) {\n\t\t\tsplice.call( results, duplicates[ j ], 1 );\n\t\t}\n\t}\n\n\t// Clear input after sorting to release objects\n\t// See https://github.com/jquery/sizzle/pull/225\n\tsortInput = null;\n\n\treturn results;\n};\n\njQuery.fn.uniqueSort = function() {\n\treturn this.pushStack( jQuery.uniqueSort( slice.apply( this ) ) );\n};\n\nExpr = jQuery.expr = {\n\n\t// Can be adjusted by the user\n\tcacheLength: 50,\n\n\tcreatePseudo: markFunction,\n\n\tmatch: matchExpr,\n\n\tattrHandle: {},\n\n\tfind: {},\n\n\trelative: {\n\t\t">": { dir: "parentNode", first: true },\n\t\t" ": { dir: "parentNode" },\n\t\t"+": { dir: "previousSibling", first: true },\n\t\t"~": { dir: "previousSibling" }\n\t},\n\n\tpreFilter: {\n\t\tATTR: function( match ) {\n\t\t\tmatch[ 1 ] = match[ 1 ].replace( runescape, funescape );\n\n\t\t\t// Move the given value to match[3] whether quoted or unquoted\n\t\t\tmatch[ 3 ] = ( match[ 3 ] || match[ 4 ] || match[ 5 ] || "" )\n\t\t\t\t.replace( runescape, funescape );\n\n\t\t\tif ( match[ 2 ] === "~=" ) {\n\t\t\t\tmatch[ 3 ] = " " + match[ 3 ] + " ";\n\t\t\t}\n\n\t\t\treturn match.slice( 0, 4 );\n\t\t},\n\n\t\tCHILD: function( match ) {\n\n\t\t\t/* matches from matchExpr["CHILD"]\n\t\t\t\t1 type (only|nth|...)\n\t\t\t\t2 what (child|of-type)\n\t\t\t\t3 argument (even|odd|\\d*|\\d*n([+-]\\d+)?|...)\n\t\t\t\t4 xn-component of xn+y argument ([+-]?\\d*n|)\n\t\t\t\t5 sign of xn-component\n\t\t\t\t6 x of xn-component\n\t\t\t\t7 sign of y-component\n\t\t\t\t8 y of y-component\n\t\t\t*/\n\t\t\tmatch[ 1 ] = match[ 1 ].toLowerCase();\n\n\t\t\tif ( match[ 1 ].slice( 0, 3 ) === "nth" ) {\n\n\t\t\t\t// nth-* requires argument\n\t\t\t\tif ( !match[ 3 ] ) {\n\t\t\t\t\tfind.error( match[ 0 ] );\n\t\t\t\t}\n\n\t\t\t\t// numeric x and y parameters for Expr.filter.CHILD\n\t\t\t\t// remember that false/true cast respectively to 0/1\n\t\t\t\tmatch[ 4 ] = +( match[ 4 ] ?\n\t\t\t\t\tmatch[ 5 ] + ( match[ 6 ] || 1 ) :\n\t\t\t\t\t2 * ( match[ 3 ] === "even" || match[ 3 ] === "odd" )\n\t\t\t\t);\n\t\t\t\tmatch[ 5 ] = +( ( match[ 7 ] + match[ 8 ] ) || match[ 3 ] === "odd" );\n\n\t\t\t// other types prohibit arguments\n\t\t\t} else if ( match[ 3 ] ) {\n\t\t\t\tfind.error( match[ 0 ] );\n\t\t\t}\n\n\t\t\treturn match;\n\t\t},\n\n\t\tPSEUDO: function( match ) {\n\t\t\tvar excess,\n\t\t\t\tunquoted = !match[ 6 ] && match[ 2 ];\n\n\t\t\tif ( matchExpr.CHILD.test( match[ 0 ] ) ) {\n\t\t\t\treturn null;\n\t\t\t}\n\n\t\t\t// Accept quoted arguments as-is\n\t\t\tif ( match[ 3 ] ) {\n\t\t\t\tmatch[ 2 ] = match[ 4 ] || match[ 5 ] || "";\n\n\t\t\t// Strip excess characters from unquoted arguments\n\t\t\t} else if ( unquoted && rpseudo.test( unquoted ) &&\n\n\t\t\t\t// Get excess from tokenize (recursively)\n\t\t\t\t( excess = tokenize( unquoted, true ) ) &&\n\n\t\t\t\t// advance to the next closing parenthesis\n\t\t\t\t( excess = unquoted.indexOf( ")", unquoted.length - excess ) - unquoted.length ) ) {\n\n\t\t\t\t// excess is a negative index\n\t\t\t\tmatch[ 0 ] = match[ 0 ].slice( 0, excess );\n\t\t\t\tmatch[ 2 ] = unquoted.slice( 0, excess );\n\t\t\t}\n\n\t\t\t// Return only captures needed by the pseudo filter method (type and argument)\n\t\t\treturn match.slice( 0, 3 );\n\t\t}\n\t},\n\n\tfilter: {\n\n\t\tTAG: function( nodeNameSelector ) {\n\t\t\tvar expectedNodeName = nodeNameSelector.replace( runescape, funescape ).toLowerCase();\n\t\t\treturn nodeNameSelector === "*" ?\n\t\t\t\tfunction() {\n\t\t\t\t\treturn true;\n\t\t\t\t} :\n\t\t\t\tfunction( elem ) {\n\t\t\t\t\treturn nodeName( elem, expectedNodeName );\n\t\t\t\t};\n\t\t},\n\n\t\tCLASS: function( className ) {\n\t\t\tvar pattern = classCache[ className + " " ];\n\n\t\t\treturn pattern ||\n\t\t\t\t( pattern = new RegExp( "(^|" + whitespace + ")" + className +\n\t\t\t\t\t"(" + whitespace + "|$)" ) ) &&\n\t\t\t\tclassCache( className, function( elem ) {\n\t\t\t\t\treturn pattern.test(\n\t\t\t\t\t\ttypeof elem.className === "string" && elem.className ||\n\t\t\t\t\t\t\ttypeof elem.getAttribute !== "undefined" &&\n\t\t\t\t\t\t\t\telem.getAttribute( "class" ) ||\n\t\t\t\t\t\t\t""\n\t\t\t\t\t);\n\t\t\t\t} );\n\t\t},\n\n\t\tATTR: function( name, operator, check ) {\n\t\t\treturn function( elem ) {\n\t\t\t\tvar result = find.attr( elem, name );\n\n\t\t\t\tif ( result == null ) {\n\t\t\t\t\treturn operator === "!=";\n\t\t\t\t}\n\t\t\t\tif ( !operator ) {\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\n\t\t\t\tresult += "";\n\n\t\t\t\tif ( operator === "=" ) {\n\t\t\t\t\treturn result === check;\n\t\t\t\t}\n\t\t\t\tif ( operator === "!=" ) {\n\t\t\t\t\treturn result !== check;\n\t\t\t\t}\n\t\t\t\tif ( operator === "^=" ) {\n\t\t\t\t\treturn check && result.indexOf( check ) === 0;\n\t\t\t\t}\n\t\t\t\tif ( operator === "*=" ) {\n\t\t\t\t\treturn check && result.indexOf( check ) > -1;\n\t\t\t\t}\n\t\t\t\tif ( operator === "$=" ) {\n\t\t\t\t\treturn check && result.slice( -check.length ) === check;\n\t\t\t\t}\n\t\t\t\tif ( operator === "~=" ) {\n\t\t\t\t\treturn ( " " + result.replace( rwhitespace, " " ) + " " )\n\t\t\t\t\t\t.indexOf( check ) > -1;\n\t\t\t\t}\n\t\t\t\tif ( operator === "|=" ) {\n\t\t\t\t\treturn result === check || result.slice( 0, check.length + 1 ) === check + "-";\n\t\t\t\t}\n\n\t\t\t\treturn false;\n\t\t\t};\n\t\t},\n\n\t\tCHILD: function( type, what, _argument, first, last ) {\n\t\t\tvar simple = type.slice( 0, 3 ) !== "nth",\n\t\t\t\tforward = type.slice( -4 ) !== "last",\n\t\t\t\tofType = what === "of-type";\n\n\t\t\treturn first === 1 && last === 0 ?\n\n\t\t\t\t// Shortcut for :nth-*(n)\n\t\t\t\tfunction( elem ) {\n\t\t\t\t\treturn !!elem.parentNode;\n\t\t\t\t} :\n\n\t\t\t\tfunction( elem, _context, xml ) {\n\t\t\t\t\tvar cache, outerCache, node, nodeIndex, start,\n\t\t\t\t\t\tdir = simple !== forward ? "nextSibling" : "previousSibling",\n\t\t\t\t\t\tparent = elem.parentNode,\n\t\t\t\t\t\tname = ofType && elem.nodeName.toLowerCase(),\n\t\t\t\t\t\tuseCache = !xml && !ofType,\n\t\t\t\t\t\tdiff = false;\n\n\t\t\t\t\tif ( parent ) {\n\n\t\t\t\t\t\t// :(first|last|only)-(child|of-type)\n\t\t\t\t\t\tif ( simple ) {\n\t\t\t\t\t\t\twhile ( dir ) {\n\t\t\t\t\t\t\t\tnode = elem;\n\t\t\t\t\t\t\t\twhile ( ( node = node[ dir ] ) ) {\n\t\t\t\t\t\t\t\t\tif ( ofType ?\n\t\t\t\t\t\t\t\t\t\tnodeName( node, name ) :\n\t\t\t\t\t\t\t\t\t\tnode.nodeType === 1 ) {\n\n\t\t\t\t\t\t\t\t\t\treturn false;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t// Reverse direction for :only-* (if we haven\'t yet done so)\n\t\t\t\t\t\t\t\tstart = dir = type === "only" && !start && "nextSibling";\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\treturn true;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tstart = [ forward ? parent.firstChild : parent.lastChild ];\n\n\t\t\t\t\t\t// non-xml :nth-child(...) stores cache data on `parent`\n\t\t\t\t\t\tif ( forward && useCache ) {\n\n\t\t\t\t\t\t\t// Seek `elem` from a previously-cached index\n\t\t\t\t\t\t\touterCache = parent[ expando ] || ( parent[ expando ] = {} );\n\t\t\t\t\t\t\tcache = outerCache[ type ] || [];\n\t\t\t\t\t\t\tnodeIndex = cache[ 0 ] === dirruns && cache[ 1 ];\n\t\t\t\t\t\t\tdiff = nodeIndex && cache[ 2 ];\n\t\t\t\t\t\t\tnode = nodeIndex && parent.childNodes[ nodeIndex ];\n\n\t\t\t\t\t\t\twhile ( ( node = ++nodeIndex && node && node[ dir ] ||\n\n\t\t\t\t\t\t\t\t// Fallback to seeking `elem` from the start\n\t\t\t\t\t\t\t\t( diff = nodeIndex = 0 ) || start.pop() ) ) {\n\n\t\t\t\t\t\t\t\t// When found, cache indexes on `parent` and break\n\t\t\t\t\t\t\t\tif ( node.nodeType === 1 && ++diff && node === elem ) {\n\t\t\t\t\t\t\t\t\touterCache[ type ] = [ dirruns, nodeIndex, diff ];\n\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t// Use previously-cached element index if available\n\t\t\t\t\t\t\tif ( useCache ) {\n\t\t\t\t\t\t\t\touterCache = elem[ expando ] || ( elem[ expando ] = {} );\n\t\t\t\t\t\t\t\tcache = outerCache[ type ] || [];\n\t\t\t\t\t\t\t\tnodeIndex = cache[ 0 ] === dirruns && cache[ 1 ];\n\t\t\t\t\t\t\t\tdiff = nodeIndex;\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t// xml :nth-child(...)\n\t\t\t\t\t\t\t// or :nth-last-child(...) or :nth(-last)?-of-type(...)\n\t\t\t\t\t\t\tif ( diff === false ) {\n\n\t\t\t\t\t\t\t\t// Use the same loop as above to seek `elem` from the start\n\t\t\t\t\t\t\t\twhile ( ( node = ++nodeIndex && node && node[ dir ] ||\n\t\t\t\t\t\t\t\t\t( diff = nodeIndex = 0 ) || start.pop() ) ) {\n\n\t\t\t\t\t\t\t\t\tif ( ( ofType ?\n\t\t\t\t\t\t\t\t\t\tnodeName( node, name ) :\n\t\t\t\t\t\t\t\t\t\tnode.nodeType === 1 ) &&\n\t\t\t\t\t\t\t\t\t\t++diff ) {\n\n\t\t\t\t\t\t\t\t\t\t// Cache the index of each encountered element\n\t\t\t\t\t\t\t\t\t\tif ( useCache ) {\n\t\t\t\t\t\t\t\t\t\t\touterCache = node[ expando ] ||\n\t\t\t\t\t\t\t\t\t\t\t\t( node[ expando ] = {} );\n\t\t\t\t\t\t\t\t\t\t\touterCache[ type ] = [ dirruns, diff ];\n\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\tif ( node === elem ) {\n\t\t\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Incorporate the offset, then check against cycle size\n\t\t\t\t\t\tdiff -= last;\n\t\t\t\t\t\treturn diff === first || ( diff % first === 0 && diff / first >= 0 );\n\t\t\t\t\t}\n\t\t\t\t};\n\t\t},\n\n\t\tPSEUDO: function( pseudo, argument ) {\n\n\t\t\t// pseudo-class names are case-insensitive\n\t\t\t// https://www.w3.org/TR/selectors/#pseudo-classes\n\t\t\t// Prioritize by case sensitivity in case custom pseudos are added with uppercase letters\n\t\t\t// Remember that setFilters inherits from pseudos\n\t\t\tvar args,\n\t\t\t\tfn = Expr.pseudos[ pseudo ] || Expr.setFilters[ pseudo.toLowerCase() ] ||\n\t\t\t\t\tfind.error( "unsupported pseudo: " + pseudo );\n\n\t\t\t// The user may use createPseudo to indicate that\n\t\t\t// arguments are needed to create the filter function\n\t\t\t// just as jQuery does\n\t\t\tif ( fn[ expando ] ) {\n\t\t\t\treturn fn( argument );\n\t\t\t}\n\n\t\t\t// But maintain support for old signatures\n\t\t\tif ( fn.length > 1 ) {\n\t\t\t\targs = [ pseudo, pseudo, "", argument ];\n\t\t\t\treturn Expr.setFilters.hasOwnProperty( pseudo.toLowerCase() ) ?\n\t\t\t\t\tmarkFunction( function( seed, matches ) {\n\t\t\t\t\t\tvar idx,\n\t\t\t\t\t\t\tmatched = fn( seed, argument ),\n\t\t\t\t\t\t\ti = matched.length;\n\t\t\t\t\t\twhile ( i-- ) {\n\t\t\t\t\t\t\tidx = indexOf.call( seed, matched[ i ] );\n\t\t\t\t\t\t\tseed[ idx ] = !( matches[ idx ] = matched[ i ] );\n\t\t\t\t\t\t}\n\t\t\t\t\t} ) :\n\t\t\t\t\tfunction( elem ) {\n\t\t\t\t\t\treturn fn( elem, 0, args );\n\t\t\t\t\t};\n\t\t\t}\n\n\t\t\treturn fn;\n\t\t}\n\t},\n\n\tpseudos: {\n\n\t\t// Potentially complex pseudos\n\t\tnot: markFunction( function( selector ) {\n\n\t\t\t// Trim the selector passed to compile\n\t\t\t// to avoid treating leading and trailing\n\t\t\t// spaces as combinators\n\t\t\tvar input = [],\n\t\t\t\tresults = [],\n\t\t\t\tmatcher = compile( selector.replace( rtrimCSS, "$1" ) );\n\n\t\t\treturn matcher[ expando ] ?\n\t\t\t\tmarkFunction( function( seed, matches, _context, xml ) {\n\t\t\t\t\tvar elem,\n\t\t\t\t\t\tunmatched = matcher( seed, null, xml, [] ),\n\t\t\t\t\t\ti = seed.length;\n\n\t\t\t\t\t// Match elements unmatched by `matcher`\n\t\t\t\t\twhile ( i-- ) {\n\t\t\t\t\t\tif ( ( elem = unmatched[ i ] ) ) {\n\t\t\t\t\t\t\tseed[ i ] = !( matches[ i ] = elem );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t} ) :\n\t\t\t\tfunction( elem, _context, xml ) {\n\t\t\t\t\tinput[ 0 ] = elem;\n\t\t\t\t\tmatcher( input, null, xml, results );\n\n\t\t\t\t\t// Don\'t keep the element\n\t\t\t\t\t// (see https://github.com/jquery/sizzle/issues/299)\n\t\t\t\t\tinput[ 0 ] = null;\n\t\t\t\t\treturn !results.pop();\n\t\t\t\t};\n\t\t} ),\n\n\t\thas: markFunction( function( selector ) {\n\t\t\treturn function( elem ) {\n\t\t\t\treturn find( selector, elem ).length > 0;\n\t\t\t};\n\t\t} ),\n\n\t\tcontains: markFunction( function( text ) {\n\t\t\ttext = text.replace( runescape, funescape );\n\t\t\treturn function( elem ) {\n\t\t\t\treturn ( elem.textContent || jQuery.text( elem ) ).indexOf( text ) > -1;\n\t\t\t};\n\t\t} ),\n\n\t\t// "Whether an element is represented by a :lang() selector\n\t\t// is based solely on the element\'s language value\n\t\t// being equal to the identifier C,\n\t\t// or beginning with the identifier C immediately followed by "-".\n\t\t// The matching of C against the element\'s language value is performed case-insensitively.\n\t\t// The identifier C does not have to be a valid language name."\n\t\t// https://www.w3.org/TR/selectors/#lang-pseudo\n\t\tlang: markFunction( function( lang ) {\n\n\t\t\t// lang value must be a valid identifier\n\t\t\tif ( !ridentifier.test( lang || "" ) ) {\n\t\t\t\tfind.error( "unsupported lang: " + lang );\n\t\t\t}\n\t\t\tlang = lang.replace( runescape, funescape ).toLowerCase();\n\t\t\treturn function( elem ) {\n\t\t\t\tvar elemLang;\n\t\t\t\tdo {\n\t\t\t\t\tif ( ( elemLang = documentIsHTML ?\n\t\t\t\t\t\telem.lang :\n\t\t\t\t\t\telem.getAttribute( "xml:lang" ) || elem.getAttribute( "lang" ) ) ) {\n\n\t\t\t\t\t\telemLang = elemLang.toLowerCase();\n\t\t\t\t\t\treturn elemLang === lang || elemLang.indexOf( lang + "-" ) === 0;\n\t\t\t\t\t}\n\t\t\t\t} while ( ( elem = elem.parentNode ) && elem.nodeType === 1 );\n\t\t\t\treturn false;\n\t\t\t};\n\t\t} ),\n\n\t\t// Miscellaneous\n\t\ttarget: function( elem ) {\n\t\t\tvar hash = window.location && window.location.hash;\n\t\t\treturn hash && hash.slice( 1 ) === elem.id;\n\t\t},\n\n\t\troot: function( elem ) {\n\t\t\treturn elem === documentElement;\n\t\t},\n\n\t\tfocus: function( elem ) {\n\t\t\treturn elem === safeActiveElement() &&\n\t\t\t\tdocument.hasFocus() &&\n\t\t\t\t!!( elem.type || elem.href || ~elem.tabIndex );\n\t\t},\n\n\t\t// Boolean properties\n\t\tenabled: createDisabledPseudo( false ),\n\t\tdisabled: createDisabledPseudo( true ),\n\n\t\tchecked: function( elem ) {\n\n\t\t\t// In CSS3, :checked should return both checked and selected elements\n\t\t\t// https://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked\n\t\t\treturn ( nodeName( elem, "input" ) && !!elem.checked ) ||\n\t\t\t\t( nodeName( elem, "option" ) && !!elem.selected );\n\t\t},\n\n\t\tselected: function( elem ) {\n\n\t\t\t// Support: IE <=11+\n\t\t\t// Accessing the selectedIndex property\n\t\t\t// forces the browser to treat the default option as\n\t\t\t// selected when in an optgroup.\n\t\t\tif ( elem.parentNode ) {\n\t\t\t\t// eslint-disable-next-line no-unused-expressions\n\t\t\t\telem.parentNode.selectedIndex;\n\t\t\t}\n\n\t\t\treturn elem.selected === true;\n\t\t},\n\n\t\t// Contents\n\t\tempty: function( elem ) {\n\n\t\t\t// https://www.w3.org/TR/selectors/#empty-pseudo\n\t\t\t// :empty is negated by element (1) or content nodes (text: 3; cdata: 4; entity ref: 5),\n\t\t\t// but not by others (comment: 8; processing instruction: 7; etc.)\n\t\t\t// nodeType < 6 works because attributes (2) do not appear as children\n\t\t\tfor ( elem = elem.firstChild; elem; elem = elem.nextSibling ) {\n\t\t\t\tif ( elem.nodeType < 6 ) {\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn true;\n\t\t},\n\n\t\tparent: function( elem ) {\n\t\t\treturn !Expr.pseudos.empty( elem );\n\t\t},\n\n\t\t// Element/input types\n\t\theader: function( elem ) {\n\t\t\treturn rheader.test( elem.nodeName );\n\t\t},\n\n\t\tinput: function( elem ) {\n\t\t\treturn rinputs.test( elem.nodeName );\n\t\t},\n\n\t\tbutton: function( elem ) {\n\t\t\treturn nodeName( elem, "input" ) && elem.type === "button" ||\n\t\t\t\tnodeName( elem, "button" );\n\t\t},\n\n\t\ttext: function( elem ) {\n\t\t\tvar attr;\n\t\t\treturn nodeName( elem, "input" ) && elem.type === "text" &&\n\n\t\t\t\t// Support: IE <10 only\n\t\t\t\t// New HTML5 attribute values (e.g., "search") appear\n\t\t\t\t// with elem.type === "text"\n\t\t\t\t( ( attr = elem.getAttribute( "type" ) ) == null ||\n\t\t\t\t\tattr.toLowerCase() === "text" );\n\t\t},\n\n\t\t// Position-in-collection\n\t\tfirst: createPositionalPseudo( function() {\n\t\t\treturn [ 0 ];\n\t\t} ),\n\n\t\tlast: createPositionalPseudo( function( _matchIndexes, length ) {\n\t\t\treturn [ length - 1 ];\n\t\t} ),\n\n\t\teq: createPositionalPseudo( function( _matchIndexes, length, argument ) {\n\t\t\treturn [ argument < 0 ? argument + length : argument ];\n\t\t} ),\n\n\t\teven: createPositionalPseudo( function( matchIndexes, length ) {\n\t\t\tvar i = 0;\n\t\t\tfor ( ; i < length; i += 2 ) {\n\t\t\t\tmatchIndexes.push( i );\n\t\t\t}\n\t\t\treturn matchIndexes;\n\t\t} ),\n\n\t\todd: createPositionalPseudo( function( matchIndexes, length ) {\n\t\t\tvar i = 1;\n\t\t\tfor ( ; i < length; i += 2 ) {\n\t\t\t\tmatchIndexes.push( i );\n\t\t\t}\n\t\t\treturn matchIndexes;\n\t\t} ),\n\n\t\tlt: createPositionalPseudo( function( matchIndexes, length, argument ) {\n\t\t\tvar i;\n\n\t\t\tif ( argument < 0 ) {\n\t\t\t\ti = argument + length;\n\t\t\t} else if ( argument > length ) {\n\t\t\t\ti = length;\n\t\t\t} else {\n\t\t\t\ti = argument;\n\t\t\t}\n\n\t\t\tfor ( ; --i >= 0; ) {\n\t\t\t\tmatchIndexes.push( i );\n\t\t\t}\n\t\t\treturn matchIndexes;\n\t\t} ),\n\n\t\tgt: createPositionalPseudo( function( matchIndexes, length, argument ) {\n\t\t\tvar i = argument < 0 ? argument + length : argument;\n\t\t\tfor ( ; ++i < length; ) {\n\t\t\t\tmatchIndexes.push( i );\n\t\t\t}\n\t\t\treturn matchIndexes;\n\t\t} )\n\t}\n};\n\nExpr.pseudos.nth = Expr.pseudos.eq;\n\n// Add button/input type pseudos\nfor ( i in { radio: true, checkbox: true, file: true, password: true, image: true } ) {\n\tExpr.pseudos[ i ] = createInputPseudo( i );\n}\nfor ( i in { submit: true, reset: true } ) {\n\tExpr.pseudos[ i ] = createButtonPseudo( i );\n}\n\n// Easy API for creating new setFilters\nfunction setFilters() {}\nsetFilters.prototype = Expr.filters = Expr.pseudos;\nExpr.setFilters = new setFilters();\n\nfunction tokenize( selector, parseOnly ) {\n\tvar matched, match, tokens, type,\n\t\tsoFar, groups, preFilters,\n\t\tcached = tokenCache[ selector + " " ];\n\n\tif ( cached ) {\n\t\treturn parseOnly ? 0 : cached.slice( 0 );\n\t}\n\n\tsoFar = selector;\n\tgroups = [];\n\tpreFilters = Expr.preFilter;\n\n\twhile ( soFar ) {\n\n\t\t// Comma and first run\n\t\tif ( !matched || ( match = rcomma.exec( soFar ) ) ) {\n\t\t\tif ( match ) {\n\n\t\t\t\t// Don\'t consume trailing commas as valid\n\t\t\t\tsoFar = soFar.slice( match[ 0 ].length ) || soFar;\n\t\t\t}\n\t\t\tgroups.push( ( tokens = [] ) );\n\t\t}\n\n\t\tmatched = false;\n\n\t\t// Combinators\n\t\tif ( ( match = rleadingCombinator.exec( soFar ) ) ) {\n\t\t\tmatched = match.shift();\n\t\t\ttokens.push( {\n\t\t\t\tvalue: matched,\n\n\t\t\t\t// Cast descendant combinators to space\n\t\t\t\ttype: match[ 0 ].replace( rtrimCSS, " " )\n\t\t\t} );\n\t\t\tsoFar = soFar.slice( matched.length );\n\t\t}\n\n\t\t// Filters\n\t\tfor ( type in Expr.filter ) {\n\t\t\tif ( ( match = matchExpr[ type ].exec( soFar ) ) && ( !preFilters[ type ] ||\n\t\t\t\t( match = preFilters[ type ]( match ) ) ) ) {\n\t\t\t\tmatched = match.shift();\n\t\t\t\ttokens.push( {\n\t\t\t\t\tvalue: matched,\n\t\t\t\t\ttype: type,\n\t\t\t\t\tmatches: match\n\t\t\t\t} );\n\t\t\t\tsoFar = soFar.slice( matched.length );\n\t\t\t}\n\t\t}\n\n\t\tif ( !matched ) {\n\t\t\tbreak;\n\t\t}\n\t}\n\n\t// Return the length of the invalid excess\n\t// if we\'re just parsing\n\t// Otherwise, throw an error or return tokens\n\tif ( parseOnly ) {\n\t\treturn soFar.length;\n\t}\n\n\treturn soFar ?\n\t\tfind.error( selector ) :\n\n\t\t// Cache the tokens\n\t\ttokenCache( selector, groups ).slice( 0 );\n}\n\nfunction toSelector( tokens ) {\n\tvar i = 0,\n\t\tlen = tokens.length,\n\t\tselector = "";\n\tfor ( ; i < len; i++ ) {\n\t\tselector += tokens[ i ].value;\n\t}\n\treturn selector;\n}\n\nfunction addCombinator( matcher, combinator, base ) {\n\tvar dir = combinator.dir,\n\t\tskip = combinator.next,\n\t\tkey = skip || dir,\n\t\tcheckNonElements = base && key === "parentNode",\n\t\tdoneName = done++;\n\n\treturn combinator.first ?\n\n\t\t// Check against closest ancestor/preceding element\n\t\tfunction( elem, context, xml ) {\n\t\t\twhile ( ( elem = elem[ dir ] ) ) {\n\t\t\t\tif ( elem.nodeType === 1 || checkNonElements ) {\n\t\t\t\t\treturn matcher( elem, context, xml );\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn false;\n\t\t} :\n\n\t\t// Check against all ancestor/preceding elements\n\t\tfunction( elem, context, xml ) {\n\t\t\tvar oldCache, outerCache,\n\t\t\t\tnewCache = [ dirruns, doneName ];\n\n\t\t\t// We can\'t set arbitrary data on XML nodes, so they don\'t benefit from combinator caching\n\t\t\tif ( xml ) {\n\t\t\t\twhile ( ( elem = elem[ dir ] ) ) {\n\t\t\t\t\tif ( elem.nodeType === 1 || checkNonElements ) {\n\t\t\t\t\t\tif ( matcher( elem, context, xml ) ) {\n\t\t\t\t\t\t\treturn true;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\twhile ( ( elem = elem[ dir ] ) ) {\n\t\t\t\t\tif ( elem.nodeType === 1 || checkNonElements ) {\n\t\t\t\t\t\touterCache = elem[ expando ] || ( elem[ expando ] = {} );\n\n\t\t\t\t\t\tif ( skip && nodeName( elem, skip ) ) {\n\t\t\t\t\t\t\telem = elem[ dir ] || elem;\n\t\t\t\t\t\t} else if ( ( oldCache = outerCache[ key ] ) &&\n\t\t\t\t\t\t\toldCache[ 0 ] === dirruns && oldCache[ 1 ] === doneName ) {\n\n\t\t\t\t\t\t\t// Assign to newCache so results back-propagate to previous elements\n\t\t\t\t\t\t\treturn ( newCache[ 2 ] = oldCache[ 2 ] );\n\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t// Reuse newcache so results back-propagate to previous elements\n\t\t\t\t\t\t\touterCache[ key ] = newCache;\n\n\t\t\t\t\t\t\t// A match means we\'re done; a fail means we have to keep checking\n\t\t\t\t\t\t\tif ( ( newCache[ 2 ] = matcher( elem, context, xml ) ) ) {\n\t\t\t\t\t\t\t\treturn true;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn false;\n\t\t};\n}\n\nfunction elementMatcher( matchers ) {\n\treturn matchers.length > 1 ?\n\t\tfunction( elem, context, xml ) {\n\t\t\tvar i = matchers.length;\n\t\t\twhile ( i-- ) {\n\t\t\t\tif ( !matchers[ i ]( elem, context, xml ) ) {\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn true;\n\t\t} :\n\t\tmatchers[ 0 ];\n}\n\nfunction multipleContexts( selector, contexts, results ) {\n\tvar i = 0,\n\t\tlen = contexts.length;\n\tfor ( ; i < len; i++ ) {\n\t\tfind( selector, contexts[ i ], results );\n\t}\n\treturn results;\n}\n\nfunction condense( unmatched, map, filter, context, xml ) {\n\tvar elem,\n\t\tnewUnmatched = [],\n\t\ti = 0,\n\t\tlen = unmatched.length,\n\t\tmapped = map != null;\n\n\tfor ( ; i < len; i++ ) {\n\t\tif ( ( elem = unmatched[ i ] ) ) {\n\t\t\tif ( !filter || filter( elem, context, xml ) ) {\n\t\t\t\tnewUnmatched.push( elem );\n\t\t\t\tif ( mapped ) {\n\t\t\t\t\tmap.push( i );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\treturn newUnmatched;\n}\n\nfunction setMatcher( preFilter, selector, matcher, postFilter, postFinder, postSelector ) {\n\tif ( postFilter && !postFilter[ expando ] ) {\n\t\tpostFilter = setMatcher( postFilter );\n\t}\n\tif ( postFinder && !postFinder[ expando ] ) {\n\t\tpostFinder = setMatcher( postFinder, postSelector );\n\t}\n\treturn markFunction( function( seed, results, context, xml ) {\n\t\tvar temp, i, elem, matcherOut,\n\t\t\tpreMap = [],\n\t\t\tpostMap = [],\n\t\t\tpreexisting = results.length,\n\n\t\t\t// Get initial elements from seed or context\n\t\t\telems = seed ||\n\t\t\t\tmultipleContexts( selector || "*",\n\t\t\t\t\tcontext.nodeType ? [ context ] : context, [] ),\n\n\t\t\t// Prefilter to get matcher input, preserving a map for seed-results synchronization\n\t\t\tmatcherIn = preFilter && ( seed || !selector ) ?\n\t\t\t\tcondense( elems, preMap, preFilter, context, xml ) :\n\t\t\t\telems;\n\n\t\tif ( matcher ) {\n\n\t\t\t// If we have a postFinder, or filtered seed, or non-seed postFilter\n\t\t\t// or preexisting results,\n\t\t\tmatcherOut = postFinder || ( seed ? preFilter : preexisting || postFilter ) ?\n\n\t\t\t\t// ...intermediate processing is necessary\n\t\t\t\t[] :\n\n\t\t\t\t// ...otherwise use results directly\n\t\t\t\tresults;\n\n\t\t\t// Find primary matches\n\t\t\tmatcher( matcherIn, matcherOut, context, xml );\n\t\t} else {\n\t\t\tmatcherOut = matcherIn;\n\t\t}\n\n\t\t// Apply postFilter\n\t\tif ( postFilter ) {\n\t\t\ttemp = condense( matcherOut, postMap );\n\t\t\tpostFilter( temp, [], context, xml );\n\n\t\t\t// Un-match failing elements by moving them back to matcherIn\n\t\t\ti = temp.length;\n\t\t\twhile ( i-- ) {\n\t\t\t\tif ( ( elem = temp[ i ] ) ) {\n\t\t\t\t\tmatcherOut[ postMap[ i ] ] = !( matcherIn[ postMap[ i ] ] = elem );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tif ( seed ) {\n\t\t\tif ( postFinder || preFilter ) {\n\t\t\t\tif ( postFinder ) {\n\n\t\t\t\t\t// Get the final matcherOut by condensing this intermediate into postFinder contexts\n\t\t\t\t\ttemp = [];\n\t\t\t\t\ti = matcherOut.length;\n\t\t\t\t\twhile ( i-- ) {\n\t\t\t\t\t\tif ( ( elem = matcherOut[ i ] ) ) {\n\n\t\t\t\t\t\t\t// Restore matcherIn since elem is not yet a final match\n\t\t\t\t\t\t\ttemp.push( ( matcherIn[ i ] = elem ) );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tpostFinder( null, ( matcherOut = [] ), temp, xml );\n\t\t\t\t}\n\n\t\t\t\t// Move matched elements from seed to results to keep them synchronized\n\t\t\t\ti = matcherOut.length;\n\t\t\t\twhile ( i-- ) {\n\t\t\t\t\tif ( ( elem = matcherOut[ i ] ) &&\n\t\t\t\t\t\t( temp = postFinder ? indexOf.call( seed, elem ) : preMap[ i ] ) > -1 ) {\n\n\t\t\t\t\t\tseed[ temp ] = !( results[ temp ] = elem );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t// Add elements to results, through postFinder if defined\n\t\t} else {\n\t\t\tmatcherOut = condense(\n\t\t\t\tmatcherOut === results ?\n\t\t\t\t\tmatcherOut.splice( preexisting, matcherOut.length ) :\n\t\t\t\t\tmatcherOut\n\t\t\t);\n\t\t\tif ( postFinder ) {\n\t\t\t\tpostFinder( null, results, matcherOut, xml );\n\t\t\t} else {\n\t\t\t\tpush.apply( results, matcherOut );\n\t\t\t}\n\t\t}\n\t} );\n}\n\nfunction matcherFromTokens( tokens ) {\n\tvar checkContext, matcher, j,\n\t\tlen = tokens.length,\n\t\tleadingRelative = Expr.relative[ tokens[ 0 ].type ],\n\t\timplicitRelative = leadingRelative || Expr.relative[ " " ],\n\t\ti = leadingRelative ? 1 : 0,\n\n\t\t// The foundational matcher ensures that elements are reachable from top-level context(s)\n\t\tmatchContext = addCombinator( function( elem ) {\n\t\t\treturn elem === checkContext;\n\t\t}, implicitRelative, true ),\n\t\tmatchAnyContext = addCombinator( function( elem ) {\n\t\t\treturn indexOf.call( checkContext, elem ) > -1;\n\t\t}, implicitRelative, true ),\n\t\tmatchers = [ function( elem, context, xml ) {\n\n\t\t\t// Support: IE 11+, Edge 17 - 18+\n\t\t\t// IE/Edge sometimes throw a "Permission denied" error when strict-comparing\n\t\t\t// two documents; shallow comparisons work.\n\t\t\t// eslint-disable-next-line eqeqeq\n\t\t\tvar ret = ( !leadingRelative && ( xml || context != outermostContext ) ) || (\n\t\t\t\t( checkContext = context ).nodeType ?\n\t\t\t\t\tmatchContext( elem, context, xml ) :\n\t\t\t\t\tmatchAnyContext( elem, context, xml ) );\n\n\t\t\t// Avoid hanging onto element\n\t\t\t// (see https://github.com/jquery/sizzle/issues/299)\n\t\t\tcheckContext = null;\n\t\t\treturn ret;\n\t\t} ];\n\n\tfor ( ; i < len; i++ ) {\n\t\tif ( ( matcher = Expr.relative[ tokens[ i ].type ] ) ) {\n\t\t\tmatchers = [ addCombinator( elementMatcher( matchers ), matcher ) ];\n\t\t} else {\n\t\t\tmatcher = Expr.filter[ tokens[ i ].type ].apply( null, tokens[ i ].matches );\n\n\t\t\t// Return special upon seeing a positional matcher\n\t\t\tif ( matcher[ expando ] ) {\n\n\t\t\t\t// Find the next relative operator (if any) for proper handling\n\t\t\t\tj = ++i;\n\t\t\t\tfor ( ; j < len; j++ ) {\n\t\t\t\t\tif ( Expr.relative[ tokens[ j ].type ] ) {\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn setMatcher(\n\t\t\t\t\ti > 1 && elementMatcher( matchers ),\n\t\t\t\t\ti > 1 && toSelector(\n\n\t\t\t\t\t\t// If the preceding token was a descendant combinator, insert an implicit any-element `*`\n\t\t\t\t\t\ttokens.slice( 0, i - 1 )\n\t\t\t\t\t\t\t.concat( { value: tokens[ i - 2 ].type === " " ? "*" : "" } )\n\t\t\t\t\t).replace( rtrimCSS, "$1" ),\n\t\t\t\t\tmatcher,\n\t\t\t\t\ti < j && matcherFromTokens( tokens.slice( i, j ) ),\n\t\t\t\t\tj < len && matcherFromTokens( ( tokens = tokens.slice( j ) ) ),\n\t\t\t\t\tj < len && toSelector( tokens )\n\t\t\t\t);\n\t\t\t}\n\t\t\tmatchers.push( matcher );\n\t\t}\n\t}\n\n\treturn elementMatcher( matchers );\n}\n\nfunction matcherFromGroupMatchers( elementMatchers, setMatchers ) {\n\tvar bySet = setMatchers.length > 0,\n\t\tbyElement = elementMatchers.length > 0,\n\t\tsuperMatcher = function( seed, context, xml, results, outermost ) {\n\t\t\tvar elem, j, matcher,\n\t\t\t\tmatchedCount = 0,\n\t\t\t\ti = "0",\n\t\t\t\tunmatched = seed && [],\n\t\t\t\tsetMatched = [],\n\t\t\t\tcontextBackup = outermostContext,\n\n\t\t\t\t// We must always have either seed elements or outermost context\n\t\t\t\telems = seed || byElement && Expr.find.TAG( "*", outermost ),\n\n\t\t\t\t// Use integer dirruns iff this is the outermost matcher\n\t\t\t\tdirrunsUnique = ( dirruns += contextBackup == null ? 1 : Math.random() || 0.1 ),\n\t\t\t\tlen = elems.length;\n\n\t\t\tif ( outermost ) {\n\n\t\t\t\t// Support: IE 11+, Edge 17 - 18+\n\t\t\t\t// IE/Edge sometimes throw a "Permission denied" error when strict-comparing\n\t\t\t\t// two documents; shallow comparisons work.\n\t\t\t\t// eslint-disable-next-line eqeqeq\n\t\t\t\toutermostContext = context == document || context || outermost;\n\t\t\t}\n\n\t\t\t// Add elements passing elementMatchers directly to results\n\t\t\t// Support: iOS <=7 - 9 only\n\t\t\t// Tolerate NodeList properties (IE: "length"; Safari: ) matching\n\t\t\t// elements by id. (see trac-14142)\n\t\t\tfor ( ; i !== len && ( elem = elems[ i ] ) != null; i++ ) {\n\t\t\t\tif ( byElement && elem ) {\n\t\t\t\t\tj = 0;\n\n\t\t\t\t\t// Support: IE 11+, Edge 17 - 18+\n\t\t\t\t\t// IE/Edge sometimes throw a "Permission denied" error when strict-comparing\n\t\t\t\t\t// two documents; shallow comparisons work.\n\t\t\t\t\t// eslint-disable-next-line eqeqeq\n\t\t\t\t\tif ( !context && elem.ownerDocument != document ) {\n\t\t\t\t\t\tsetDocument( elem );\n\t\t\t\t\t\txml = !documentIsHTML;\n\t\t\t\t\t}\n\t\t\t\t\twhile ( ( matcher = elementMatchers[ j++ ] ) ) {\n\t\t\t\t\t\tif ( matcher( elem, context || document, xml ) ) {\n\t\t\t\t\t\t\tpush.call( results, elem );\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tif ( outermost ) {\n\t\t\t\t\t\tdirruns = dirrunsUnique;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Track unmatched elements for set filters\n\t\t\t\tif ( bySet ) {\n\n\t\t\t\t\t// They will have gone through all possible matchers\n\t\t\t\t\tif ( ( elem = !matcher && elem ) ) {\n\t\t\t\t\t\tmatchedCount--;\n\t\t\t\t\t}\n\n\t\t\t\t\t// Lengthen the array for every element, matched or not\n\t\t\t\t\tif ( seed ) {\n\t\t\t\t\t\tunmatched.push( elem );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// `i` is now the count of elements visited above, and adding it to `matchedCount`\n\t\t\t// makes the latter nonnegative.\n\t\t\tmatchedCount += i;\n\n\t\t\t// Apply set filters to unmatched elements\n\t\t\t// NOTE: This can be skipped if there are no unmatched elements (i.e., `matchedCount`\n\t\t\t// equals `i`), unless we didn\'t visit _any_ elements in the above loop because we have\n\t\t\t// no element matchers and no seed.\n\t\t\t// Incrementing an initially-string "0" `i` allows `i` to remain a string only in that\n\t\t\t// case, which will result in a "00" `matchedCount` that differs from `i` but is also\n\t\t\t// numerically zero.\n\t\t\tif ( bySet && i !== matchedCount ) {\n\t\t\t\tj = 0;\n\t\t\t\twhile ( ( matcher = setMatchers[ j++ ] ) ) {\n\t\t\t\t\tmatcher( unmatched, setMatched, context, xml );\n\t\t\t\t}\n\n\t\t\t\tif ( seed ) {\n\n\t\t\t\t\t// Reintegrate element matches to eliminate the need for sorting\n\t\t\t\t\tif ( matchedCount > 0 ) {\n\t\t\t\t\t\twhile ( i-- ) {\n\t\t\t\t\t\t\tif ( !( unmatched[ i ] || setMatched[ i ] ) ) {\n\t\t\t\t\t\t\t\tsetMatched[ i ] = pop.call( results );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// Discard index placeholder values to get only actual matches\n\t\t\t\t\tsetMatched = condense( setMatched );\n\t\t\t\t}\n\n\t\t\t\t// Add matches to results\n\t\t\t\tpush.apply( results, setMatched );\n\n\t\t\t\t// Seedless set matches succeeding multiple successful matchers stipulate sorting\n\t\t\t\tif ( outermost && !seed && setMatched.length > 0 &&\n\t\t\t\t\t( matchedCount + setMatchers.length ) > 1 ) {\n\n\t\t\t\t\tjQuery.uniqueSort( results );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Override manipulation of globals by nested matchers\n\t\t\tif ( outermost ) {\n\t\t\t\tdirruns = dirrunsUnique;\n\t\t\t\toutermostContext = contextBackup;\n\t\t\t}\n\n\t\t\treturn unmatched;\n\t\t};\n\n\treturn bySet ?\n\t\tmarkFunction( superMatcher ) :\n\t\tsuperMatcher;\n}\n\nfunction compile( selector, match /* Internal Use Only */ ) {\n\tvar i,\n\t\tsetMatchers = [],\n\t\telementMatchers = [],\n\t\tcached = compilerCache[ selector + " " ];\n\n\tif ( !cached ) {\n\n\t\t// Generate a function of recursive functions that can be used to check each element\n\t\tif ( !match ) {\n\t\t\tmatch = tokenize( selector );\n\t\t}\n\t\ti = match.length;\n\t\twhile ( i-- ) {\n\t\t\tcached = matcherFromTokens( match[ i ] );\n\t\t\tif ( cached[ expando ] ) {\n\t\t\t\tsetMatchers.push( cached );\n\t\t\t} else {\n\t\t\t\telementMatchers.push( cached );\n\t\t\t}\n\t\t}\n\n\t\t// Cache the compiled function\n\t\tcached = compilerCache( selector,\n\t\t\tmatcherFromGroupMatchers( elementMatchers, setMatchers ) );\n\n\t\t// Save selector and tokenization\n\t\tcached.selector = selector;\n\t}\n\treturn cached;\n}\n\n/**\n * A low-level selection function that works with jQuery\'s compiled\n * selector functions\n * @param {String|Function} selector A selector or a pre-compiled\n * selector function built with jQuery selector compile\n * @param {Element} context\n * @param {Array} [results]\n * @param {Array} [seed] A set of elements to match against\n */\nfunction select( selector, context, results, seed ) {\n\tvar i, tokens, token, type, find,\n\t\tcompiled = typeof selector === "function" && selector,\n\t\tmatch = !seed && tokenize( ( selector = compiled.selector || selector ) );\n\n\tresults = results || [];\n\n\t// Try to minimize operations if there is only one selector in the list and no seed\n\t// (the latter of which guarantees us context)\n\tif ( match.length === 1 ) {\n\n\t\t// Reduce context if the leading compound selector is an ID\n\t\ttokens = match[ 0 ] = match[ 0 ].slice( 0 );\n\t\tif ( tokens.length > 2 && ( token = tokens[ 0 ] ).type === "ID" &&\n\t\t\t\tcontext.nodeType === 9 && documentIsHTML && Expr.relative[ tokens[ 1 ].type ] ) {\n\n\t\t\tcontext = ( Expr.find.ID(\n\t\t\t\ttoken.matches[ 0 ].replace( runescape, funescape ),\n\t\t\t\tcontext\n\t\t\t) || [] )[ 0 ];\n\t\t\tif ( !context ) {\n\t\t\t\treturn results;\n\n\t\t\t// Precompiled matchers will still verify ancestry, so step up a level\n\t\t\t} else if ( compiled ) {\n\t\t\t\tcontext = context.parentNode;\n\t\t\t}\n\n\t\t\tselector = selector.slice( tokens.shift().value.length );\n\t\t}\n\n\t\t// Fetch a seed set for right-to-left matching\n\t\ti = matchExpr.needsContext.test( selector ) ? 0 : tokens.length;\n\t\twhile ( i-- ) {\n\t\t\ttoken = tokens[ i ];\n\n\t\t\t// Abort if we hit a combinator\n\t\t\tif ( Expr.relative[ ( type = token.type ) ] ) {\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tif ( ( find = Expr.find[ type ] ) ) {\n\n\t\t\t\t// Search, expanding context for leading sibling combinators\n\t\t\t\tif ( ( seed = find(\n\t\t\t\t\ttoken.matches[ 0 ].replace( runescape, funescape ),\n\t\t\t\t\trsibling.test( tokens[ 0 ].type ) &&\n\t\t\t\t\t\ttestContext( context.parentNode ) || context\n\t\t\t\t) ) ) {\n\n\t\t\t\t\t// If seed is empty or no tokens remain, we can return early\n\t\t\t\t\ttokens.splice( i, 1 );\n\t\t\t\t\tselector = seed.length && toSelector( tokens );\n\t\t\t\t\tif ( !selector ) {\n\t\t\t\t\t\tpush.apply( results, seed );\n\t\t\t\t\t\treturn results;\n\t\t\t\t\t}\n\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t// Compile and execute a filtering function if one is not provided\n\t// Provide `match` to avoid retokenization if we modified the selector above\n\t( compiled || compile( selector, match ) )(\n\t\tseed,\n\t\tcontext,\n\t\t!documentIsHTML,\n\t\tresults,\n\t\t!context || rsibling.test( selector ) && testContext( context.parentNode ) || context\n\t);\n\treturn results;\n}\n\n// One-time assignments\n\n// Support: Android <=4.0 - 4.1+\n// Sort stability\nsupport.sortStable = expando.split( "" ).sort( sortOrder ).join( "" ) === expando;\n\n// Initialize against the default document\nsetDocument();\n\n// Support: Android <=4.0 - 4.1+\n// Detached nodes confoundingly follow *each other*\nsupport.sortDetached = assert( function( el ) {\n\n\t// Should return 1, but returns 4 (following)\n\treturn el.compareDocumentPosition( document.createElement( "fieldset" ) ) & 1;\n} );\n\njQuery.find = find;\n\n// Deprecated\njQuery.expr[ ":" ] = jQuery.expr.pseudos;\njQuery.unique = jQuery.uniqueSort;\n\n// These have always been private, but they used to be documented as part of\n// Sizzle so let\'s maintain them for now for backwards compatibility purposes.\nfind.compile = compile;\nfind.select = select;\nfind.setDocument = setDocument;\nfind.tokenize = tokenize;\n\nfind.escape = jQuery.escapeSelector;\nfind.getText = jQuery.text;\nfind.isXML = jQuery.isXMLDoc;\nfind.selectors = jQuery.expr;\nfind.support = jQuery.support;\nfind.uniqueSort = jQuery.uniqueSort;\n\n\t/* eslint-enable */\n\n} )();\n\n\nvar dir = function( elem, dir, until ) {\n\tvar matched = [],\n\t\ttruncate = until !== undefined;\n\n\twhile ( ( elem = elem[ dir ] ) && elem.nodeType !== 9 ) {\n\t\tif ( elem.nodeType === 1 ) {\n\t\t\tif ( truncate && jQuery( elem ).is( until ) ) {\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tmatched.push( elem );\n\t\t}\n\t}\n\treturn matched;\n};\n\n\nvar siblings = function( n, elem ) {\n\tvar matched = [];\n\n\tfor ( ; n; n = n.nextSibling ) {\n\t\tif ( n.nodeType === 1 && n !== elem ) {\n\t\t\tmatched.push( n );\n\t\t}\n\t}\n\n\treturn matched;\n};\n\n\nvar rneedsContext = jQuery.expr.match.needsContext;\n\nvar rsingleTag = ( /^<([a-z][^\\/\\0>:\\x20\\t\\r\\n\\f]*)[\\x20\\t\\r\\n\\f]*\\/?>(?:<\\/\\1>|)$/i );\n\n\n\n// Implement the identical functionality for filter and not\nfunction winnow( elements, qualifier, not ) {\n\tif ( isFunction( qualifier ) ) {\n\t\treturn jQuery.grep( elements, function( elem, i ) {\n\t\t\treturn !!qualifier.call( elem, i, elem ) !== not;\n\t\t} );\n\t}\n\n\t// Single element\n\tif ( qualifier.nodeType ) {\n\t\treturn jQuery.grep( elements, function( elem ) {\n\t\t\treturn ( elem === qualifier ) !== not;\n\t\t} );\n\t}\n\n\t// Arraylike of elements (jQuery, arguments, Array)\n\tif ( typeof qualifier !== "string" ) {\n\t\treturn jQuery.grep( elements, function( elem ) {\n\t\t\treturn ( indexOf.call( qualifier, elem ) > -1 ) !== not;\n\t\t} );\n\t}\n\n\t// Filtered directly for both simple and complex selectors\n\treturn jQuery.filter( qualifier, elements, not );\n}\n\njQuery.filter = function( expr, elems, not ) {\n\tvar elem = elems[ 0 ];\n\n\tif ( not ) {\n\t\texpr = ":not(" + expr + ")";\n\t}\n\n\tif ( elems.length === 1 && elem.nodeType === 1 ) {\n\t\treturn jQuery.find.matchesSelector( elem, expr ) ? [ elem ] : [];\n\t}\n\n\treturn jQuery.find.matches( expr, jQuery.grep( elems, function( elem ) {\n\t\treturn elem.nodeType === 1;\n\t} ) );\n};\n\njQuery.fn.extend( {\n\tfind: function( selector ) {\n\t\tvar i, ret,\n\t\t\tlen = this.length,\n\t\t\tself = this;\n\n\t\tif ( typeof selector !== "string" ) {\n\t\t\treturn this.pushStack( jQuery( selector ).filter( function() {\n\t\t\t\tfor ( i = 0; i < len; i++ ) {\n\t\t\t\t\tif ( jQuery.contains( self[ i ], this ) ) {\n\t\t\t\t\t\treturn true;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} ) );\n\t\t}\n\n\t\tret = this.pushStack( [] );\n\n\t\tfor ( i = 0; i < len; i++ ) {\n\t\t\tjQuery.find( selector, self[ i ], ret );\n\t\t}\n\n\t\treturn len > 1 ? jQuery.uniqueSort( ret ) : ret;\n\t},\n\tfilter: function( selector ) {\n\t\treturn this.pushStack( winnow( this, selector || [], false ) );\n\t},\n\tnot: function( selector ) {\n\t\treturn this.pushStack( winnow( this, selector || [], true ) );\n\t},\n\tis: function( selector ) {\n\t\treturn !!winnow(\n\t\t\tthis,\n\n\t\t\t// If this is a positional/relative selector, check membership in the returned set\n\t\t\t// so $("p:first").is("p:last") won\'t return true for a doc with two "p".\n\t\t\ttypeof selector === "string" && rneedsContext.test( selector ) ?\n\t\t\t\tjQuery( selector ) :\n\t\t\t\tselector || [],\n\t\t\tfalse\n\t\t).length;\n\t}\n} );\n\n\n// Initialize a jQuery object\n\n\n// A central reference to the root jQuery(document)\nvar rootjQuery,\n\n\t// A simple way to check for HTML strings\n\t// Prioritize #id over to avoid XSS via location.hash (trac-9521)\n\t// Strict HTML recognition (trac-11290: must start with <)\n\t// Shortcut simple #id case for speed\n\trquickExpr = /^(?:\\s*(<[\\w\\W]+>)[^>]*|#([\\w-]+))$/,\n\n\tinit = jQuery.fn.init = function( selector, context, root ) {\n\t\tvar match, elem;\n\n\t\t// HANDLE: $(""), $(null), $(undefined), $(false)\n\t\tif ( !selector ) {\n\t\t\treturn this;\n\t\t}\n\n\t\t// Method init() accepts an alternate rootjQuery\n\t\t// so migrate can support jQuery.sub (gh-2101)\n\t\troot = root || rootjQuery;\n\n\t\t// Handle HTML strings\n\t\tif ( typeof selector === "string" ) {\n\t\t\tif ( selector[ 0 ] === "<" &&\n\t\t\t\tselector[ selector.length - 1 ] === ">" &&\n\t\t\t\tselector.length >= 3 ) {\n\n\t\t\t\t// Assume that strings that start and end with <> are HTML and skip the regex check\n\t\t\t\tmatch = [ null, selector, null ];\n\n\t\t\t} else {\n\t\t\t\tmatch = rquickExpr.exec( selector );\n\t\t\t}\n\n\t\t\t// Match html or make sure no context is specified for #id\n\t\t\tif ( match && ( match[ 1 ] || !context ) ) {\n\n\t\t\t\t// HANDLE: $(html) -> $(array)\n\t\t\t\tif ( match[ 1 ] ) {\n\t\t\t\t\tcontext = context instanceof jQuery ? context[ 0 ] : context;\n\n\t\t\t\t\t// Option to run scripts is true for back-compat\n\t\t\t\t\t// Intentionally let the error be thrown if parseHTML is not present\n\t\t\t\t\tjQuery.merge( this, jQuery.parseHTML(\n\t\t\t\t\t\tmatch[ 1 ],\n\t\t\t\t\t\tcontext && context.nodeType ? context.ownerDocument || context : document,\n\t\t\t\t\t\ttrue\n\t\t\t\t\t) );\n\n\t\t\t\t\t// HANDLE: $(html, props)\n\t\t\t\t\tif ( rsingleTag.test( match[ 1 ] ) && jQuery.isPlainObject( context ) ) {\n\t\t\t\t\t\tfor ( match in context ) {\n\n\t\t\t\t\t\t\t// Properties of context are called as methods if possible\n\t\t\t\t\t\t\tif ( isFunction( this[ match ] ) ) {\n\t\t\t\t\t\t\t\tthis[ match ]( context[ match ] );\n\n\t\t\t\t\t\t\t// ...and otherwise set as attributes\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tthis.attr( match, context[ match ] );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\treturn this;\n\n\t\t\t\t// HANDLE: $(#id)\n\t\t\t\t} else {\n\t\t\t\t\telem = document.getElementById( match[ 2 ] );\n\n\t\t\t\t\tif ( elem ) {\n\n\t\t\t\t\t\t// Inject the element directly into the jQuery object\n\t\t\t\t\t\tthis[ 0 ] = elem;\n\t\t\t\t\t\tthis.length = 1;\n\t\t\t\t\t}\n\t\t\t\t\treturn this;\n\t\t\t\t}\n\n\t\t\t// HANDLE: $(expr, $(...))\n\t\t\t} else if ( !context || context.jquery ) {\n\t\t\t\treturn ( context || root ).find( selector );\n\n\t\t\t// HANDLE: $(expr, context)\n\t\t\t// (which is just equivalent to: $(context).find(expr)\n\t\t\t} else {\n\t\t\t\treturn this.constructor( context ).find( selector );\n\t\t\t}\n\n\t\t// HANDLE: $(DOMElement)\n\t\t} else if ( selector.nodeType ) {\n\t\t\tthis[ 0 ] = selector;\n\t\t\tthis.length = 1;\n\t\t\treturn this;\n\n\t\t// HANDLE: $(function)\n\t\t// Shortcut for document ready\n\t\t} else if ( isFunction( selector ) ) {\n\t\t\treturn root.ready !== undefined ?\n\t\t\t\troot.ready( selector ) :\n\n\t\t\t\t// Execute immediately if ready is not present\n\t\t\t\tselector( jQuery );\n\t\t}\n\n\t\treturn jQuery.makeArray( selector, this );\n\t};\n\n// Give the init function the jQuery prototype for later instantiation\ninit.prototype = jQuery.fn;\n\n// Initialize central reference\nrootjQuery = jQuery( document );\n\n\nvar rparentsprev = /^(?:parents|prev(?:Until|All))/,\n\n\t// Methods guaranteed to produce a unique set when starting from a unique set\n\tguaranteedUnique = {\n\t\tchildren: true,\n\t\tcontents: true,\n\t\tnext: true,\n\t\tprev: true\n\t};\n\njQuery.fn.extend( {\n\thas: function( target ) {\n\t\tvar targets = jQuery( target, this ),\n\t\t\tl = targets.length;\n\n\t\treturn this.filter( function() {\n\t\t\tvar i = 0;\n\t\t\tfor ( ; i < l; i++ ) {\n\t\t\t\tif ( jQuery.contains( this, targets[ i ] ) ) {\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t}\n\t\t} );\n\t},\n\n\tclosest: function( selectors, context ) {\n\t\tvar cur,\n\t\t\ti = 0,\n\t\t\tl = this.length,\n\t\t\tmatched = [],\n\t\t\ttargets = typeof selectors !== "string" && jQuery( selectors );\n\n\t\t// Positional selectors never match, since there\'s no _selection_ context\n\t\tif ( !rneedsContext.test( selectors ) ) {\n\t\t\tfor ( ; i < l; i++ ) {\n\t\t\t\tfor ( cur = this[ i ]; cur && cur !== context; cur = cur.parentNode ) {\n\n\t\t\t\t\t// Always skip document fragments\n\t\t\t\t\tif ( cur.nodeType < 11 && ( targets ?\n\t\t\t\t\t\ttargets.index( cur ) > -1 :\n\n\t\t\t\t\t\t// Don\'t pass non-elements to jQuery#find\n\t\t\t\t\t\tcur.nodeType === 1 &&\n\t\t\t\t\t\t\tjQuery.find.matchesSelector( cur, selectors ) ) ) {\n\n\t\t\t\t\t\tmatched.push( cur );\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn this.pushStack( matched.length > 1 ? jQuery.uniqueSort( matched ) : matched );\n\t},\n\n\t// Determine the position of an element within the set\n\tindex: function( elem ) {\n\n\t\t// No argument, return index in parent\n\t\tif ( !elem ) {\n\t\t\treturn ( this[ 0 ] && this[ 0 ].parentNode ) ? this.first().prevAll().length : -1;\n\t\t}\n\n\t\t// Index in selector\n\t\tif ( typeof elem === "string" ) {\n\t\t\treturn indexOf.call( jQuery( elem ), this[ 0 ] );\n\t\t}\n\n\t\t// Locate the position of the desired element\n\t\treturn indexOf.call( this,\n\n\t\t\t// If it receives a jQuery object, the first element is used\n\t\t\telem.jquery ? elem[ 0 ] : elem\n\t\t);\n\t},\n\n\tadd: function( selector, context ) {\n\t\treturn this.pushStack(\n\t\t\tjQuery.uniqueSort(\n\t\t\t\tjQuery.merge( this.get(), jQuery( selector, context ) )\n\t\t\t)\n\t\t);\n\t},\n\n\taddBack: function( selector ) {\n\t\treturn this.add( selector == null ?\n\t\t\tthis.prevObject : this.prevObject.filter( selector )\n\t\t);\n\t}\n} );\n\nfunction sibling( cur, dir ) {\n\twhile ( ( cur = cur[ dir ] ) && cur.nodeType !== 1 ) {}\n\treturn cur;\n}\n\njQuery.each( {\n\tparent: function( elem ) {\n\t\tvar parent = elem.parentNode;\n\t\treturn parent && parent.nodeType !== 11 ? parent : null;\n\t},\n\tparents: function( elem ) {\n\t\treturn dir( elem, "parentNode" );\n\t},\n\tparentsUntil: function( elem, _i, until ) {\n\t\treturn dir( elem, "parentNode", until );\n\t},\n\tnext: function( elem ) {\n\t\treturn sibling( elem, "nextSibling" );\n\t},\n\tprev: function( elem ) {\n\t\treturn sibling( elem, "previousSibling" );\n\t},\n\tnextAll: function( elem ) {\n\t\treturn dir( elem, "nextSibling" );\n\t},\n\tprevAll: function( elem ) {\n\t\treturn dir( elem, "previousSibling" );\n\t},\n\tnextUntil: function( elem, _i, until ) {\n\t\treturn dir( elem, "nextSibling", until );\n\t},\n\tprevUntil: function( elem, _i, until ) {\n\t\treturn dir( elem, "previousSibling", until );\n\t},\n\tsiblings: function( elem ) {\n\t\treturn siblings( ( elem.parentNode || {} ).firstChild, elem );\n\t},\n\tchildren: function( elem ) {\n\t\treturn siblings( elem.firstChild );\n\t},\n\tcontents: function( elem ) {\n\t\tif ( elem.contentDocument != null &&\n\n\t\t\t// Support: IE 11+\n\t\t\t// elements with no `data` attribute has an object\n\t\t\t// `contentDocument` with a `null` prototype.\n\t\t\tgetProto( elem.contentDocument ) ) {\n\n\t\t\treturn elem.contentDocument;\n\t\t}\n\n\t\t// Support: IE 9 - 11 only, iOS 7 only, Android Browser <=4.3 only\n\t\t// Treat the template element as a regular one in browsers that\n\t\t// don\'t support it.\n\t\tif ( nodeName( elem, "template" ) ) {\n\t\t\telem = elem.content || elem;\n\t\t}\n\n\t\treturn jQuery.merge( [], elem.childNodes );\n\t}\n}, function( name, fn ) {\n\tjQuery.fn[ name ] = function( until, selector ) {\n\t\tvar matched = jQuery.map( this, fn, until );\n\n\t\tif ( name.slice( -5 ) !== "Until" ) {\n\t\t\tselector = until;\n\t\t}\n\n\t\tif ( selector && typeof selector === "string" ) {\n\t\t\tmatched = jQuery.filter( selector, matched );\n\t\t}\n\n\t\tif ( this.length > 1 ) {\n\n\t\t\t// Remove duplicates\n\t\t\tif ( !guaranteedUnique[ name ] ) {\n\t\t\t\tjQuery.uniqueSort( matched );\n\t\t\t}\n\n\t\t\t// Reverse order for parents* and prev-derivatives\n\t\t\tif ( rparentsprev.test( name ) ) {\n\t\t\t\tmatched.reverse();\n\t\t\t}\n\t\t}\n\n\t\treturn this.pushStack( matched );\n\t};\n} );\nvar rnothtmlwhite = ( /[^\\x20\\t\\r\\n\\f]+/g );\n\n\n\n// Convert String-formatted options into Object-formatted ones\nfunction createOptions( options ) {\n\tvar object = {};\n\tjQuery.each( options.match( rnothtmlwhite ) || [], function( _, flag ) {\n\t\tobject[ flag ] = true;\n\t} );\n\treturn object;\n}\n\n/*\n * Create a callback list using the following parameters:\n *\n *\toptions: an optional list of space-separated options that will change how\n *\t\t\tthe callback list behaves or a more traditional option object\n *\n * By default a callback list will act like an event callback list and can be\n * "fired" multiple times.\n *\n * Possible options:\n *\n *\tonce:\t\t\twill ensure the callback list can only be fired once (like a Deferred)\n *\n *\tmemory:\t\t\twill keep track of previous values and will call any callback added\n *\t\t\t\t\tafter the list has been fired right away with the latest "memorized"\n *\t\t\t\t\tvalues (like a Deferred)\n *\n *\tunique:\t\t\twill ensure a callback can only be added once (no duplicate in the list)\n *\n *\tstopOnFalse:\tinterrupt callings when a callback returns false\n *\n */\njQuery.Callbacks = function( options ) {\n\n\t// Convert options from String-formatted to Object-formatted if needed\n\t// (we check in cache first)\n\toptions = typeof options === "string" ?\n\t\tcreateOptions( options ) :\n\t\tjQuery.extend( {}, options );\n\n\tvar // Flag to know if list is currently firing\n\t\tfiring,\n\n\t\t// Last fire value for non-forgettable lists\n\t\tmemory,\n\n\t\t// Flag to know if list was already fired\n\t\tfired,\n\n\t\t// Flag to prevent firing\n\t\tlocked,\n\n\t\t// Actual callback list\n\t\tlist = [],\n\n\t\t// Queue of execution data for repeatable lists\n\t\tqueue = [],\n\n\t\t// Index of currently firing callback (modified by add/remove as needed)\n\t\tfiringIndex = -1,\n\n\t\t// Fire callbacks\n\t\tfire = function() {\n\n\t\t\t// Enforce single-firing\n\t\t\tlocked = locked || options.once;\n\n\t\t\t// Execute callbacks for all pending executions,\n\t\t\t// respecting firingIndex overrides and runtime changes\n\t\t\tfired = firing = true;\n\t\t\tfor ( ; queue.length; firingIndex = -1 ) {\n\t\t\t\tmemory = queue.shift();\n\t\t\t\twhile ( ++firingIndex < list.length ) {\n\n\t\t\t\t\t// Run callback and check for early termination\n\t\t\t\t\tif ( list[ firingIndex ].apply( memory[ 0 ], memory[ 1 ] ) === false &&\n\t\t\t\t\t\toptions.stopOnFalse ) {\n\n\t\t\t\t\t\t// Jump to end and forget the data so .add doesn\'t re-fire\n\t\t\t\t\t\tfiringIndex = list.length;\n\t\t\t\t\t\tmemory = false;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Forget the data if we\'re done with it\n\t\t\tif ( !options.memory ) {\n\t\t\t\tmemory = false;\n\t\t\t}\n\n\t\t\tfiring = false;\n\n\t\t\t// Clean up if we\'re done firing for good\n\t\t\tif ( locked ) {\n\n\t\t\t\t// Keep an empty list if we have data for future add calls\n\t\t\t\tif ( memory ) {\n\t\t\t\t\tlist = [];\n\n\t\t\t\t// Otherwise, this object is spent\n\t\t\t\t} else {\n\t\t\t\t\tlist = "";\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\n\t\t// Actual Callbacks object\n\t\tself = {\n\n\t\t\t// Add a callback or a collection of callbacks to the list\n\t\t\tadd: function() {\n\t\t\t\tif ( list ) {\n\n\t\t\t\t\t// If we have memory from a past run, we should fire after adding\n\t\t\t\t\tif ( memory && !firing ) {\n\t\t\t\t\t\tfiringIndex = list.length - 1;\n\t\t\t\t\t\tqueue.push( memory );\n\t\t\t\t\t}\n\n\t\t\t\t\t( function add( args ) {\n\t\t\t\t\t\tjQuery.each( args, function( _, arg ) {\n\t\t\t\t\t\t\tif ( isFunction( arg ) ) {\n\t\t\t\t\t\t\t\tif ( !options.unique || !self.has( arg ) ) {\n\t\t\t\t\t\t\t\t\tlist.push( arg );\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t} else if ( arg && arg.length && toType( arg ) !== "string" ) {\n\n\t\t\t\t\t\t\t\t// Inspect recursively\n\t\t\t\t\t\t\t\tadd( arg );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} );\n\t\t\t\t\t} )( arguments );\n\n\t\t\t\t\tif ( memory && !firing ) {\n\t\t\t\t\t\tfire();\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn this;\n\t\t\t},\n\n\t\t\t// Remove a callback from the list\n\t\t\tremove: function() {\n\t\t\t\tjQuery.each( arguments, function( _, arg ) {\n\t\t\t\t\tvar index;\n\t\t\t\t\twhile ( ( index = jQuery.inArray( arg, list, index ) ) > -1 ) {\n\t\t\t\t\t\tlist.splice( index, 1 );\n\n\t\t\t\t\t\t// Handle firing indexes\n\t\t\t\t\t\tif ( index <= firingIndex ) {\n\t\t\t\t\t\t\tfiringIndex--;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t} );\n\t\t\t\treturn this;\n\t\t\t},\n\n\t\t\t// Check if a given callback is in the list.\n\t\t\t// If no argument is given, return whether or not list has callbacks attached.\n\t\t\thas: function( fn ) {\n\t\t\t\treturn fn ?\n\t\t\t\t\tjQuery.inArray( fn, list ) > -1 :\n\t\t\t\t\tlist.length > 0;\n\t\t\t},\n\n\t\t\t// Remove all callbacks from the list\n\t\t\tempty: function() {\n\t\t\t\tif ( list ) {\n\t\t\t\t\tlist = [];\n\t\t\t\t}\n\t\t\t\treturn this;\n\t\t\t},\n\n\t\t\t// Disable .fire and .add\n\t\t\t// Abort any current/pending executions\n\t\t\t// Clear all callbacks and values\n\t\t\tdisable: function() {\n\t\t\t\tlocked = queue = [];\n\t\t\t\tlist = memory = "";\n\t\t\t\treturn this;\n\t\t\t},\n\t\t\tdisabled: function() {\n\t\t\t\treturn !list;\n\t\t\t},\n\n\t\t\t// Disable .fire\n\t\t\t// Also disable .add unless we have memory (since it would have no effect)\n\t\t\t// Abort any pending executions\n\t\t\tlock: function() {\n\t\t\t\tlocked = queue = [];\n\t\t\t\tif ( !memory && !firing ) {\n\t\t\t\t\tlist = memory = "";\n\t\t\t\t}\n\t\t\t\treturn this;\n\t\t\t},\n\t\t\tlocked: function() {\n\t\t\t\treturn !!locked;\n\t\t\t},\n\n\t\t\t// Call all callbacks with the given context and arguments\n\t\t\tfireWith: function( context, args ) {\n\t\t\t\tif ( !locked ) {\n\t\t\t\t\targs = args || [];\n\t\t\t\t\targs = [ context, args.slice ? args.slice() : args ];\n\t\t\t\t\tqueue.push( args );\n\t\t\t\t\tif ( !firing ) {\n\t\t\t\t\t\tfire();\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn this;\n\t\t\t},\n\n\t\t\t// Call all the callbacks with the given arguments\n\t\t\tfire: function() {\n\t\t\t\tself.fireWith( this, arguments );\n\t\t\t\treturn this;\n\t\t\t},\n\n\t\t\t// To know if the callbacks have already been called at least once\n\t\t\tfired: function() {\n\t\t\t\treturn !!fired;\n\t\t\t}\n\t\t};\n\n\treturn self;\n};\n\n\nfunction Identity( v ) {\n\treturn v;\n}\nfunction Thrower( ex ) {\n\tthrow ex;\n}\n\nfunction adoptValue( value, resolve, reject, noValue ) {\n\tvar method;\n\n\ttry {\n\n\t\t// Check for promise aspect first to privilege synchronous behavior\n\t\tif ( value && isFunction( ( method = value.promise ) ) ) {\n\t\t\tmethod.call( value ).done( resolve ).fail( reject );\n\n\t\t// Other thenables\n\t\t} else if ( value && isFunction( ( method = value.then ) ) ) {\n\t\t\tmethod.call( value, resolve, reject );\n\n\t\t// Other non-thenables\n\t\t} else {\n\n\t\t\t// Control `resolve` arguments by letting Array#slice cast boolean `noValue` to integer:\n\t\t\t// * false: [ value ].slice( 0 ) => resolve( value )\n\t\t\t// * true: [ value ].slice( 1 ) => resolve()\n\t\t\tresolve.apply( undefined, [ value ].slice( noValue ) );\n\t\t}\n\n\t// For Promises/A+, convert exceptions into rejections\n\t// Since jQuery.when doesn\'t unwrap thenables, we can skip the extra checks appearing in\n\t// Deferred#then to conditionally suppress rejection.\n\t} catch ( value ) {\n\n\t\t// Support: Android 4.0 only\n\t\t// Strict mode functions invoked without .call/.apply get global-object context\n\t\treject.apply( undefined, [ value ] );\n\t}\n}\n\njQuery.extend( {\n\n\tDeferred: function( func ) {\n\t\tvar tuples = [\n\n\t\t\t\t// action, add listener, callbacks,\n\t\t\t\t// ... .then handlers, argument index, [final state]\n\t\t\t\t[ "notify", "progress", jQuery.Callbacks( "memory" ),\n\t\t\t\t\tjQuery.Callbacks( "memory" ), 2 ],\n\t\t\t\t[ "resolve", "done", jQuery.Callbacks( "once memory" ),\n\t\t\t\t\tjQuery.Callbacks( "once memory" ), 0, "resolved" ],\n\t\t\t\t[ "reject", "fail", jQuery.Callbacks( "once memory" ),\n\t\t\t\t\tjQuery.Callbacks( "once memory" ), 1, "rejected" ]\n\t\t\t],\n\t\t\tstate = "pending",\n\t\t\tpromise = {\n\t\t\t\tstate: function() {\n\t\t\t\t\treturn state;\n\t\t\t\t},\n\t\t\t\talways: function() {\n\t\t\t\t\tdeferred.done( arguments ).fail( arguments );\n\t\t\t\t\treturn this;\n\t\t\t\t},\n\t\t\t\t"catch": function( fn ) {\n\t\t\t\t\treturn promise.then( null, fn );\n\t\t\t\t},\n\n\t\t\t\t// Keep pipe for back-compat\n\t\t\t\tpipe: function( /* fnDone, fnFail, fnProgress */ ) {\n\t\t\t\t\tvar fns = arguments;\n\n\t\t\t\t\treturn jQuery.Deferred( function( newDefer ) {\n\t\t\t\t\t\tjQuery.each( tuples, function( _i, tuple ) {\n\n\t\t\t\t\t\t\t// Map tuples (progress, done, fail) to arguments (done, fail, progress)\n\t\t\t\t\t\t\tvar fn = isFunction( fns[ tuple[ 4 ] ] ) && fns[ tuple[ 4 ] ];\n\n\t\t\t\t\t\t\t// deferred.progress(function() { bind to newDefer or newDefer.notify })\n\t\t\t\t\t\t\t// deferred.done(function() { bind to newDefer or newDefer.resolve })\n\t\t\t\t\t\t\t// deferred.fail(function() { bind to newDefer or newDefer.reject })\n\t\t\t\t\t\t\tdeferred[ tuple[ 1 ] ]( function() {\n\t\t\t\t\t\t\t\tvar returned = fn && fn.apply( this, arguments );\n\t\t\t\t\t\t\t\tif ( returned && isFunction( returned.promise ) ) {\n\t\t\t\t\t\t\t\t\treturned.promise()\n\t\t\t\t\t\t\t\t\t\t.progress( newDefer.notify )\n\t\t\t\t\t\t\t\t\t\t.done( newDefer.resolve )\n\t\t\t\t\t\t\t\t\t\t.fail( newDefer.reject );\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tnewDefer[ tuple[ 0 ] + "With" ](\n\t\t\t\t\t\t\t\t\t\tthis,\n\t\t\t\t\t\t\t\t\t\tfn ? [ returned ] : arguments\n\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t} );\n\t\t\t\t\t\t} );\n\t\t\t\t\t\tfns = null;\n\t\t\t\t\t} ).promise();\n\t\t\t\t},\n\t\t\t\tthen: function( onFulfilled, onRejected, onProgress ) {\n\t\t\t\t\tvar maxDepth = 0;\n\t\t\t\t\tfunction resolve( depth, deferred, handler, special ) {\n\t\t\t\t\t\treturn function() {\n\t\t\t\t\t\t\tvar that = this,\n\t\t\t\t\t\t\t\targs = arguments,\n\t\t\t\t\t\t\t\tmightThrow = function() {\n\t\t\t\t\t\t\t\t\tvar returned, then;\n\n\t\t\t\t\t\t\t\t\t// Support: Promises/A+ section 2.3.3.3.3\n\t\t\t\t\t\t\t\t\t// https://promisesaplus.com/#point-59\n\t\t\t\t\t\t\t\t\t// Ignore double-resolution attempts\n\t\t\t\t\t\t\t\t\tif ( depth < maxDepth ) {\n\t\t\t\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\treturned = handler.apply( that, args );\n\n\t\t\t\t\t\t\t\t\t// Support: Promises/A+ section 2.3.1\n\t\t\t\t\t\t\t\t\t// https://promisesaplus.com/#point-48\n\t\t\t\t\t\t\t\t\tif ( returned === deferred.promise() ) {\n\t\t\t\t\t\t\t\t\t\tthrow new TypeError( "Thenable self-resolution" );\n\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t// Support: Promises/A+ sections 2.3.3.1, 3.5\n\t\t\t\t\t\t\t\t\t// https://promisesaplus.com/#point-54\n\t\t\t\t\t\t\t\t\t// https://promisesaplus.com/#point-75\n\t\t\t\t\t\t\t\t\t// Retrieve `then` only once\n\t\t\t\t\t\t\t\t\tthen = returned &&\n\n\t\t\t\t\t\t\t\t\t\t// Support: Promises/A+ section 2.3.4\n\t\t\t\t\t\t\t\t\t\t// https://promisesaplus.com/#point-64\n\t\t\t\t\t\t\t\t\t\t// Only check objects and functions for thenability\n\t\t\t\t\t\t\t\t\t\t( typeof returned === "object" ||\n\t\t\t\t\t\t\t\t\t\t\ttypeof returned === "function" ) &&\n\t\t\t\t\t\t\t\t\t\treturned.then;\n\n\t\t\t\t\t\t\t\t\t// Handle a returned thenable\n\t\t\t\t\t\t\t\t\tif ( isFunction( then ) ) {\n\n\t\t\t\t\t\t\t\t\t\t// Special processors (notify) just wait for resolution\n\t\t\t\t\t\t\t\t\t\tif ( special ) {\n\t\t\t\t\t\t\t\t\t\t\tthen.call(\n\t\t\t\t\t\t\t\t\t\t\t\treturned,\n\t\t\t\t\t\t\t\t\t\t\t\tresolve( maxDepth, deferred, Identity, special ),\n\t\t\t\t\t\t\t\t\t\t\t\tresolve( maxDepth, deferred, Thrower, special )\n\t\t\t\t\t\t\t\t\t\t\t);\n\n\t\t\t\t\t\t\t\t\t\t// Normal processors (resolve) also hook into progress\n\t\t\t\t\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t\t\t\t\t// ...and disregard older resolution values\n\t\t\t\t\t\t\t\t\t\t\tmaxDepth++;\n\n\t\t\t\t\t\t\t\t\t\t\tthen.call(\n\t\t\t\t\t\t\t\t\t\t\t\treturned,\n\t\t\t\t\t\t\t\t\t\t\t\tresolve( maxDepth, deferred, Identity, special ),\n\t\t\t\t\t\t\t\t\t\t\t\tresolve( maxDepth, deferred, Thrower, special ),\n\t\t\t\t\t\t\t\t\t\t\t\tresolve( maxDepth, deferred, Identity,\n\t\t\t\t\t\t\t\t\t\t\t\t\tdeferred.notifyWith )\n\t\t\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t// Handle all other returned values\n\t\t\t\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t\t\t\t// Only substitute handlers pass on context\n\t\t\t\t\t\t\t\t\t\t// and multiple values (non-spec behavior)\n\t\t\t\t\t\t\t\t\t\tif ( handler !== Identity ) {\n\t\t\t\t\t\t\t\t\t\t\tthat = undefined;\n\t\t\t\t\t\t\t\t\t\t\targs = [ returned ];\n\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\t// Process the value(s)\n\t\t\t\t\t\t\t\t\t\t// Default process is resolve\n\t\t\t\t\t\t\t\t\t\t( special || deferred.resolveWith )( that, args );\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t},\n\n\t\t\t\t\t\t\t\t// Only normal processors (resolve) catch and reject exceptions\n\t\t\t\t\t\t\t\tprocess = special ?\n\t\t\t\t\t\t\t\t\tmightThrow :\n\t\t\t\t\t\t\t\t\tfunction() {\n\t\t\t\t\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\t\t\t\t\tmightThrow();\n\t\t\t\t\t\t\t\t\t\t} catch ( e ) {\n\n\t\t\t\t\t\t\t\t\t\t\tif ( jQuery.Deferred.exceptionHook ) {\n\t\t\t\t\t\t\t\t\t\t\t\tjQuery.Deferred.exceptionHook( e,\n\t\t\t\t\t\t\t\t\t\t\t\t\tprocess.error );\n\t\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\t\t// Support: Promises/A+ section 2.3.3.3.4.1\n\t\t\t\t\t\t\t\t\t\t\t// https://promisesaplus.com/#point-61\n\t\t\t\t\t\t\t\t\t\t\t// Ignore post-resolution exceptions\n\t\t\t\t\t\t\t\t\t\t\tif ( depth + 1 >= maxDepth ) {\n\n\t\t\t\t\t\t\t\t\t\t\t\t// Only substitute handlers pass on context\n\t\t\t\t\t\t\t\t\t\t\t\t// and multiple values (non-spec behavior)\n\t\t\t\t\t\t\t\t\t\t\t\tif ( handler !== Thrower ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\tthat = undefined;\n\t\t\t\t\t\t\t\t\t\t\t\t\targs = [ e ];\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\t\t\tdeferred.rejectWith( that, args );\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t};\n\n\t\t\t\t\t\t\t// Support: Promises/A+ section 2.3.3.3.1\n\t\t\t\t\t\t\t// https://promisesaplus.com/#point-57\n\t\t\t\t\t\t\t// Re-resolve promises immediately to dodge false rejection from\n\t\t\t\t\t\t\t// subsequent errors\n\t\t\t\t\t\t\tif ( depth ) {\n\t\t\t\t\t\t\t\tprocess();\n\t\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t\t// Call an optional hook to record the error, in case of exception\n\t\t\t\t\t\t\t\t// since it\'s otherwise lost when execution goes async\n\t\t\t\t\t\t\t\tif ( jQuery.Deferred.getErrorHook ) {\n\t\t\t\t\t\t\t\t\tprocess.error = jQuery.Deferred.getErrorHook();\n\n\t\t\t\t\t\t\t\t// The deprecated alias of the above. While the name suggests\n\t\t\t\t\t\t\t\t// returning the stack, not an error instance, jQuery just passes\n\t\t\t\t\t\t\t\t// it directly to `console.warn` so both will work; an instance\n\t\t\t\t\t\t\t\t// just better cooperates with source maps.\n\t\t\t\t\t\t\t\t} else if ( jQuery.Deferred.getStackHook ) {\n\t\t\t\t\t\t\t\t\tprocess.error = jQuery.Deferred.getStackHook();\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\twindow.setTimeout( process );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t};\n\t\t\t\t\t}\n\n\t\t\t\t\treturn jQuery.Deferred( function( newDefer ) {\n\n\t\t\t\t\t\t// progress_handlers.add( ... )\n\t\t\t\t\t\ttuples[ 0 ][ 3 ].add(\n\t\t\t\t\t\t\tresolve(\n\t\t\t\t\t\t\t\t0,\n\t\t\t\t\t\t\t\tnewDefer,\n\t\t\t\t\t\t\t\tisFunction( onProgress ) ?\n\t\t\t\t\t\t\t\t\tonProgress :\n\t\t\t\t\t\t\t\t\tIdentity,\n\t\t\t\t\t\t\t\tnewDefer.notifyWith\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t);\n\n\t\t\t\t\t\t// fulfilled_handlers.add( ... )\n\t\t\t\t\t\ttuples[ 1 ][ 3 ].add(\n\t\t\t\t\t\t\tresolve(\n\t\t\t\t\t\t\t\t0,\n\t\t\t\t\t\t\t\tnewDefer,\n\t\t\t\t\t\t\t\tisFunction( onFulfilled ) ?\n\t\t\t\t\t\t\t\t\tonFulfilled :\n\t\t\t\t\t\t\t\t\tIdentity\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t);\n\n\t\t\t\t\t\t// rejected_handlers.add( ... )\n\t\t\t\t\t\ttuples[ 2 ][ 3 ].add(\n\t\t\t\t\t\t\tresolve(\n\t\t\t\t\t\t\t\t0,\n\t\t\t\t\t\t\t\tnewDefer,\n\t\t\t\t\t\t\t\tisFunction( onRejected ) ?\n\t\t\t\t\t\t\t\t\tonRejected :\n\t\t\t\t\t\t\t\t\tThrower\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t);\n\t\t\t\t\t} ).promise();\n\t\t\t\t},\n\n\t\t\t\t// Get a promise for this deferred\n\t\t\t\t// If obj is provided, the promise aspect is added to the object\n\t\t\t\tpromise: function( obj ) {\n\t\t\t\t\treturn obj != null ? jQuery.extend( obj, promise ) : promise;\n\t\t\t\t}\n\t\t\t},\n\t\t\tdeferred = {};\n\n\t\t// Add list-specific methods\n\t\tjQuery.each( tuples, function( i, tuple ) {\n\t\t\tvar list = tuple[ 2 ],\n\t\t\t\tstateString = tuple[ 5 ];\n\n\t\t\t// promise.progress = list.add\n\t\t\t// promise.done = list.add\n\t\t\t// promise.fail = list.add\n\t\t\tpromise[ tuple[ 1 ] ] = list.add;\n\n\t\t\t// Handle state\n\t\t\tif ( stateString ) {\n\t\t\t\tlist.add(\n\t\t\t\t\tfunction() {\n\n\t\t\t\t\t\t// state = "resolved" (i.e., fulfilled)\n\t\t\t\t\t\t// state = "rejected"\n\t\t\t\t\t\tstate = stateString;\n\t\t\t\t\t},\n\n\t\t\t\t\t// rejected_callbacks.disable\n\t\t\t\t\t// fulfilled_callbacks.disable\n\t\t\t\t\ttuples[ 3 - i ][ 2 ].disable,\n\n\t\t\t\t\t// rejected_handlers.disable\n\t\t\t\t\t// fulfilled_handlers.disable\n\t\t\t\t\ttuples[ 3 - i ][ 3 ].disable,\n\n\t\t\t\t\t// progress_callbacks.lock\n\t\t\t\t\ttuples[ 0 ][ 2 ].lock,\n\n\t\t\t\t\t// progress_handlers.lock\n\t\t\t\t\ttuples[ 0 ][ 3 ].lock\n\t\t\t\t);\n\t\t\t}\n\n\t\t\t// progress_handlers.fire\n\t\t\t// fulfilled_handlers.fire\n\t\t\t// rejected_handlers.fire\n\t\t\tlist.add( tuple[ 3 ].fire );\n\n\t\t\t// deferred.notify = function() { deferred.notifyWith(...) }\n\t\t\t// deferred.resolve = function() { deferred.resolveWith(...) }\n\t\t\t// deferred.reject = function() { deferred.rejectWith(...) }\n\t\t\tdeferred[ tuple[ 0 ] ] = function() {\n\t\t\t\tdeferred[ tuple[ 0 ] + "With" ]( this === deferred ? undefined : this, arguments );\n\t\t\t\treturn this;\n\t\t\t};\n\n\t\t\t// deferred.notifyWith = list.fireWith\n\t\t\t// deferred.resolveWith = list.fireWith\n\t\t\t// deferred.rejectWith = list.fireWith\n\t\t\tdeferred[ tuple[ 0 ] + "With" ] = list.fireWith;\n\t\t} );\n\n\t\t// Make the deferred a promise\n\t\tpromise.promise( deferred );\n\n\t\t// Call given func if any\n\t\tif ( func ) {\n\t\t\tfunc.call( deferred, deferred );\n\t\t}\n\n\t\t// All done!\n\t\treturn deferred;\n\t},\n\n\t// Deferred helper\n\twhen: function( singleValue ) {\n\t\tvar\n\n\t\t\t// count of uncompleted subordinates\n\t\t\tremaining = arguments.length,\n\n\t\t\t// count of unprocessed arguments\n\t\t\ti = remaining,\n\n\t\t\t// subordinate fulfillment data\n\t\t\tresolveContexts = Array( i ),\n\t\t\tresolveValues = slice.call( arguments ),\n\n\t\t\t// the primary Deferred\n\t\t\tprimary = jQuery.Deferred(),\n\n\t\t\t// subordinate callback factory\n\t\t\tupdateFunc = function( i ) {\n\t\t\t\treturn function( value ) {\n\t\t\t\t\tresolveContexts[ i ] = this;\n\t\t\t\t\tresolveValues[ i ] = arguments.length > 1 ? slice.call( arguments ) : value;\n\t\t\t\t\tif ( !( --remaining ) ) {\n\t\t\t\t\t\tprimary.resolveWith( resolveContexts, resolveValues );\n\t\t\t\t\t}\n\t\t\t\t};\n\t\t\t};\n\n\t\t// Single- and empty arguments are adopted like Promise.resolve\n\t\tif ( remaining <= 1 ) {\n\t\t\tadoptValue( singleValue, primary.done( updateFunc( i ) ).resolve, primary.reject,\n\t\t\t\t!remaining );\n\n\t\t\t// Use .then() to unwrap secondary thenables (cf. gh-3000)\n\t\t\tif ( primary.state() === "pending" ||\n\t\t\t\tisFunction( resolveValues[ i ] && resolveValues[ i ].then ) ) {\n\n\t\t\t\treturn primary.then();\n\t\t\t}\n\t\t}\n\n\t\t// Multiple arguments are aggregated like Promise.all array elements\n\t\twhile ( i-- ) {\n\t\t\tadoptValue( resolveValues[ i ], updateFunc( i ), primary.reject );\n\t\t}\n\n\t\treturn primary.promise();\n\t}\n} );\n\n\n// These usually indicate a programmer mistake during development,\n// warn about them ASAP rather than swallowing them by default.\nvar rerrorNames = /^(Eval|Internal|Range|Reference|Syntax|Type|URI)Error$/;\n\n// If `jQuery.Deferred.getErrorHook` is defined, `asyncError` is an error\n// captured before the async barrier to get the original error cause\n// which may otherwise be hidden.\njQuery.Deferred.exceptionHook = function( error, asyncError ) {\n\n\t// Support: IE 8 - 9 only\n\t// Console exists when dev tools are open, which can happen at any time\n\tif ( window.console && window.console.warn && error && rerrorNames.test( error.name ) ) {\n\t\twindow.console.warn( "jQuery.Deferred exception: " + error.message,\n\t\t\terror.stack, asyncError );\n\t}\n};\n\n\n\n\njQuery.readyException = function( error ) {\n\twindow.setTimeout( function() {\n\t\tthrow error;\n\t} );\n};\n\n\n\n\n// The deferred used on DOM ready\nvar readyList = jQuery.Deferred();\n\njQuery.fn.ready = function( fn ) {\n\n\treadyList\n\t\t.then( fn )\n\n\t\t// Wrap jQuery.readyException in a function so that the lookup\n\t\t// happens at the time of error handling instead of callback\n\t\t// registration.\n\t\t.catch( function( error ) {\n\t\t\tjQuery.readyException( error );\n\t\t} );\n\n\treturn this;\n};\n\njQuery.extend( {\n\n\t// Is the DOM ready to be used? Set to true once it occurs.\n\tisReady: false,\n\n\t// A counter to track how many items to wait for before\n\t// the ready event fires. See trac-6781\n\treadyWait: 1,\n\n\t// Handle when the DOM is ready\n\tready: function( wait ) {\n\n\t\t// Abort if there are pending holds or we\'re already ready\n\t\tif ( wait === true ? --jQuery.readyWait : jQuery.isReady ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Remember that the DOM is ready\n\t\tjQuery.isReady = true;\n\n\t\t// If a normal DOM Ready event fired, decrement, and wait if need be\n\t\tif ( wait !== true && --jQuery.readyWait > 0 ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// If there are functions bound, to execute\n\t\treadyList.resolveWith( document, [ jQuery ] );\n\t}\n} );\n\njQuery.ready.then = readyList.then;\n\n// The ready event handler and self cleanup method\nfunction completed() {\n\tdocument.removeEventListener( "DOMContentLoaded", completed );\n\twindow.removeEventListener( "load", completed );\n\tjQuery.ready();\n}\n\n// Catch cases where $(document).ready() is called\n// after the browser event has already occurred.\n// Support: IE <=9 - 10 only\n// Older IE sometimes signals "interactive" too soon\nif ( document.readyState === "complete" ||\n\t( document.readyState !== "loading" && !document.documentElement.doScroll ) ) {\n\n\t// Handle it asynchronously to allow scripts the opportunity to delay ready\n\twindow.setTimeout( jQuery.ready );\n\n} else {\n\n\t// Use the handy event callback\n\tdocument.addEventListener( "DOMContentLoaded", completed );\n\n\t// A fallback to window.onload, that will always work\n\twindow.addEventListener( "load", completed );\n}\n\n\n\n\n// Multifunctional method to get and set values of a collection\n// The value/s can optionally be executed if it\'s a function\nvar access = function( elems, fn, key, value, chainable, emptyGet, raw ) {\n\tvar i = 0,\n\t\tlen = elems.length,\n\t\tbulk = key == null;\n\n\t// Sets many values\n\tif ( toType( key ) === "object" ) {\n\t\tchainable = true;\n\t\tfor ( i in key ) {\n\t\t\taccess( elems, fn, i, key[ i ], true, emptyGet, raw );\n\t\t}\n\n\t// Sets one value\n\t} else if ( value !== undefined ) {\n\t\tchainable = true;\n\n\t\tif ( !isFunction( value ) ) {\n\t\t\traw = true;\n\t\t}\n\n\t\tif ( bulk ) {\n\n\t\t\t// Bulk operations run against the entire set\n\t\t\tif ( raw ) {\n\t\t\t\tfn.call( elems, value );\n\t\t\t\tfn = null;\n\n\t\t\t// ...except when executing function values\n\t\t\t} else {\n\t\t\t\tbulk = fn;\n\t\t\t\tfn = function( elem, _key, value ) {\n\t\t\t\t\treturn bulk.call( jQuery( elem ), value );\n\t\t\t\t};\n\t\t\t}\n\t\t}\n\n\t\tif ( fn ) {\n\t\t\tfor ( ; i < len; i++ ) {\n\t\t\t\tfn(\n\t\t\t\t\telems[ i ], key, raw ?\n\t\t\t\t\t\tvalue :\n\t\t\t\t\t\tvalue.call( elems[ i ], i, fn( elems[ i ], key ) )\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\t}\n\n\tif ( chainable ) {\n\t\treturn elems;\n\t}\n\n\t// Gets\n\tif ( bulk ) {\n\t\treturn fn.call( elems );\n\t}\n\n\treturn len ? fn( elems[ 0 ], key ) : emptyGet;\n};\n\n\n// Matches dashed string for camelizing\nvar rmsPrefix = /^-ms-/,\n\trdashAlpha = /-([a-z])/g;\n\n// Used by camelCase as callback to replace()\nfunction fcamelCase( _all, letter ) {\n\treturn letter.toUpperCase();\n}\n\n// Convert dashed to camelCase; used by the css and data modules\n// Support: IE <=9 - 11, Edge 12 - 15\n// Microsoft forgot to hump their vendor prefix (trac-9572)\nfunction camelCase( string ) {\n\treturn string.replace( rmsPrefix, "ms-" ).replace( rdashAlpha, fcamelCase );\n}\nvar acceptData = function( owner ) {\n\n\t// Accepts only:\n\t// - Node\n\t// - Node.ELEMENT_NODE\n\t// - Node.DOCUMENT_NODE\n\t// - Object\n\t// - Any\n\treturn owner.nodeType === 1 || owner.nodeType === 9 || !( +owner.nodeType );\n};\n\n\n\n\nfunction Data() {\n\tthis.expando = jQuery.expando + Data.uid++;\n}\n\nData.uid = 1;\n\nData.prototype = {\n\n\tcache: function( owner ) {\n\n\t\t// Check if the owner object already has a cache\n\t\tvar value = owner[ this.expando ];\n\n\t\t// If not, create one\n\t\tif ( !value ) {\n\t\t\tvalue = {};\n\n\t\t\t// We can accept data for non-element nodes in modern browsers,\n\t\t\t// but we should not, see trac-8335.\n\t\t\t// Always return an empty object.\n\t\t\tif ( acceptData( owner ) ) {\n\n\t\t\t\t// If it is a node unlikely to be stringify-ed or looped over\n\t\t\t\t// use plain assignment\n\t\t\t\tif ( owner.nodeType ) {\n\t\t\t\t\towner[ this.expando ] = value;\n\n\t\t\t\t// Otherwise secure it in a non-enumerable property\n\t\t\t\t// configurable must be true to allow the property to be\n\t\t\t\t// deleted when data is removed\n\t\t\t\t} else {\n\t\t\t\t\tObject.defineProperty( owner, this.expando, {\n\t\t\t\t\t\tvalue: value,\n\t\t\t\t\t\tconfigurable: true\n\t\t\t\t\t} );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn value;\n\t},\n\tset: function( owner, data, value ) {\n\t\tvar prop,\n\t\t\tcache = this.cache( owner );\n\n\t\t// Handle: [ owner, key, value ] args\n\t\t// Always use camelCase key (gh-2257)\n\t\tif ( typeof data === "string" ) {\n\t\t\tcache[ camelCase( data ) ] = value;\n\n\t\t// Handle: [ owner, { properties } ] args\n\t\t} else {\n\n\t\t\t// Copy the properties one-by-one to the cache object\n\t\t\tfor ( prop in data ) {\n\t\t\t\tcache[ camelCase( prop ) ] = data[ prop ];\n\t\t\t}\n\t\t}\n\t\treturn cache;\n\t},\n\tget: function( owner, key ) {\n\t\treturn key === undefined ?\n\t\t\tthis.cache( owner ) :\n\n\t\t\t// Always use camelCase key (gh-2257)\n\t\t\towner[ this.expando ] && owner[ this.expando ][ camelCase( key ) ];\n\t},\n\taccess: function( owner, key, value ) {\n\n\t\t// In cases where either:\n\t\t//\n\t\t// 1. No key was specified\n\t\t// 2. A string key was specified, but no value provided\n\t\t//\n\t\t// Take the "read" path and allow the get method to determine\n\t\t// which value to return, respectively either:\n\t\t//\n\t\t// 1. The entire cache object\n\t\t// 2. The data stored at the key\n\t\t//\n\t\tif ( key === undefined ||\n\t\t\t\t( ( key && typeof key === "string" ) && value === undefined ) ) {\n\n\t\t\treturn this.get( owner, key );\n\t\t}\n\n\t\t// When the key is not a string, or both a key and value\n\t\t// are specified, set or extend (existing objects) with either:\n\t\t//\n\t\t// 1. An object of properties\n\t\t// 2. A key and value\n\t\t//\n\t\tthis.set( owner, key, value );\n\n\t\t// Since the "set" path can have two possible entry points\n\t\t// return the expected data based on which path was taken[*]\n\t\treturn value !== undefined ? value : key;\n\t},\n\tremove: function( owner, key ) {\n\t\tvar i,\n\t\t\tcache = owner[ this.expando ];\n\n\t\tif ( cache === undefined ) {\n\t\t\treturn;\n\t\t}\n\n\t\tif ( key !== undefined ) {\n\n\t\t\t// Support array or space separated string of keys\n\t\t\tif ( Array.isArray( key ) ) {\n\n\t\t\t\t// If key is an array of keys...\n\t\t\t\t// We always set camelCase keys, so remove that.\n\t\t\t\tkey = key.map( camelCase );\n\t\t\t} else {\n\t\t\t\tkey = camelCase( key );\n\n\t\t\t\t// If a key with the spaces exists, use it.\n\t\t\t\t// Otherwise, create an array by matching non-whitespace\n\t\t\t\tkey = key in cache ?\n\t\t\t\t\t[ key ] :\n\t\t\t\t\t( key.match( rnothtmlwhite ) || [] );\n\t\t\t}\n\n\t\t\ti = key.length;\n\n\t\t\twhile ( i-- ) {\n\t\t\t\tdelete cache[ key[ i ] ];\n\t\t\t}\n\t\t}\n\n\t\t// Remove the expando if there\'s no more data\n\t\tif ( key === undefined || jQuery.isEmptyObject( cache ) ) {\n\n\t\t\t// Support: Chrome <=35 - 45\n\t\t\t// Webkit & Blink performance suffers when deleting properties\n\t\t\t// from DOM nodes, so set to undefined instead\n\t\t\t// https://bugs.chromium.org/p/chromium/issues/detail?id=378607 (bug restricted)\n\t\t\tif ( owner.nodeType ) {\n\t\t\t\towner[ this.expando ] = undefined;\n\t\t\t} else {\n\t\t\t\tdelete owner[ this.expando ];\n\t\t\t}\n\t\t}\n\t},\n\thasData: function( owner ) {\n\t\tvar cache = owner[ this.expando ];\n\t\treturn cache !== undefined && !jQuery.isEmptyObject( cache );\n\t}\n};\nvar dataPriv = new Data();\n\nvar dataUser = new Data();\n\n\n\n//\tImplementation Summary\n//\n//\t1. Enforce API surface and semantic compatibility with 1.9.x branch\n//\t2. Improve the module\'s maintainability by reducing the storage\n//\t\tpaths to a single mechanism.\n//\t3. Use the same single mechanism to support "private" and "user" data.\n//\t4. _Never_ expose "private" data to user code (TODO: Drop _data, _removeData)\n//\t5. Avoid exposing implementation details on user objects (eg. expando properties)\n//\t6. Provide a clear path for implementation upgrade to WeakMap in 2014\n\nvar rbrace = /^(?:\\{[\\w\\W]*\\}|\\[[\\w\\W]*\\])$/,\n\trmultiDash = /[A-Z]/g;\n\nfunction getData( data ) {\n\tif ( data === "true" ) {\n\t\treturn true;\n\t}\n\n\tif ( data === "false" ) {\n\t\treturn false;\n\t}\n\n\tif ( data === "null" ) {\n\t\treturn null;\n\t}\n\n\t// Only convert to a number if it doesn\'t change the string\n\tif ( data === +data + "" ) {\n\t\treturn +data;\n\t}\n\n\tif ( rbrace.test( data ) ) {\n\t\treturn JSON.parse( data );\n\t}\n\n\treturn data;\n}\n\nfunction dataAttr( elem, key, data ) {\n\tvar name;\n\n\t// If nothing was found internally, try to fetch any\n\t// data from the HTML5 data-* attribute\n\tif ( data === undefined && elem.nodeType === 1 ) {\n\t\tname = "data-" + key.replace( rmultiDash, "-$&" ).toLowerCase();\n\t\tdata = elem.getAttribute( name );\n\n\t\tif ( typeof data === "string" ) {\n\t\t\ttry {\n\t\t\t\tdata = getData( data );\n\t\t\t} catch ( e ) {}\n\n\t\t\t// Make sure we set the data so it isn\'t changed later\n\t\t\tdataUser.set( elem, key, data );\n\t\t} else {\n\t\t\tdata = undefined;\n\t\t}\n\t}\n\treturn data;\n}\n\njQuery.extend( {\n\thasData: function( elem ) {\n\t\treturn dataUser.hasData( elem ) || dataPriv.hasData( elem );\n\t},\n\n\tdata: function( elem, name, data ) {\n\t\treturn dataUser.access( elem, name, data );\n\t},\n\n\tremoveData: function( elem, name ) {\n\t\tdataUser.remove( elem, name );\n\t},\n\n\t// TODO: Now that all calls to _data and _removeData have been replaced\n\t// with direct calls to dataPriv methods, these can be deprecated.\n\t_data: function( elem, name, data ) {\n\t\treturn dataPriv.access( elem, name, data );\n\t},\n\n\t_removeData: function( elem, name ) {\n\t\tdataPriv.remove( elem, name );\n\t}\n} );\n\njQuery.fn.extend( {\n\tdata: function( key, value ) {\n\t\tvar i, name, data,\n\t\t\telem = this[ 0 ],\n\t\t\tattrs = elem && elem.attributes;\n\n\t\t// Gets all values\n\t\tif ( key === undefined ) {\n\t\t\tif ( this.length ) {\n\t\t\t\tdata = dataUser.get( elem );\n\n\t\t\t\tif ( elem.nodeType === 1 && !dataPriv.get( elem, "hasDataAttrs" ) ) {\n\t\t\t\t\ti = attrs.length;\n\t\t\t\t\twhile ( i-- ) {\n\n\t\t\t\t\t\t// Support: IE 11 only\n\t\t\t\t\t\t// The attrs elements can be null (trac-14894)\n\t\t\t\t\t\tif ( attrs[ i ] ) {\n\t\t\t\t\t\t\tname = attrs[ i ].name;\n\t\t\t\t\t\t\tif ( name.indexOf( "data-" ) === 0 ) {\n\t\t\t\t\t\t\t\tname = camelCase( name.slice( 5 ) );\n\t\t\t\t\t\t\t\tdataAttr( elem, name, data[ name ] );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tdataPriv.set( elem, "hasDataAttrs", true );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn data;\n\t\t}\n\n\t\t// Sets multiple values\n\t\tif ( typeof key === "object" ) {\n\t\t\treturn this.each( function() {\n\t\t\t\tdataUser.set( this, key );\n\t\t\t} );\n\t\t}\n\n\t\treturn access( this, function( value ) {\n\t\t\tvar data;\n\n\t\t\t// The calling jQuery object (element matches) is not empty\n\t\t\t// (and therefore has an element appears at this[ 0 ]) and the\n\t\t\t// `value` parameter was not undefined. An empty jQuery object\n\t\t\t// will result in `undefined` for elem = this[ 0 ] which will\n\t\t\t// throw an exception if an attempt to read a data cache is made.\n\t\t\tif ( elem && value === undefined ) {\n\n\t\t\t\t// Attempt to get data from the cache\n\t\t\t\t// The key will always be camelCased in Data\n\t\t\t\tdata = dataUser.get( elem, key );\n\t\t\t\tif ( data !== undefined ) {\n\t\t\t\t\treturn data;\n\t\t\t\t}\n\n\t\t\t\t// Attempt to "discover" the data in\n\t\t\t\t// HTML5 custom data-* attrs\n\t\t\t\tdata = dataAttr( elem, key );\n\t\t\t\tif ( data !== undefined ) {\n\t\t\t\t\treturn data;\n\t\t\t\t}\n\n\t\t\t\t// We tried really hard, but the data doesn\'t exist.\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// Set the data...\n\t\t\tthis.each( function() {\n\n\t\t\t\t// We always store the camelCased key\n\t\t\t\tdataUser.set( this, key, value );\n\t\t\t} );\n\t\t}, null, value, arguments.length > 1, null, true );\n\t},\n\n\tremoveData: function( key ) {\n\t\treturn this.each( function() {\n\t\t\tdataUser.remove( this, key );\n\t\t} );\n\t}\n} );\n\n\njQuery.extend( {\n\tqueue: function( elem, type, data ) {\n\t\tvar queue;\n\n\t\tif ( elem ) {\n\t\t\ttype = ( type || "fx" ) + "queue";\n\t\t\tqueue = dataPriv.get( elem, type );\n\n\t\t\t// Speed up dequeue by getting out quickly if this is just a lookup\n\t\t\tif ( data ) {\n\t\t\t\tif ( !queue || Array.isArray( data ) ) {\n\t\t\t\t\tqueue = dataPriv.access( elem, type, jQuery.makeArray( data ) );\n\t\t\t\t} else {\n\t\t\t\t\tqueue.push( data );\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn queue || [];\n\t\t}\n\t},\n\n\tdequeue: function( elem, type ) {\n\t\ttype = type || "fx";\n\n\t\tvar queue = jQuery.queue( elem, type ),\n\t\t\tstartLength = queue.length,\n\t\t\tfn = queue.shift(),\n\t\t\thooks = jQuery._queueHooks( elem, type ),\n\t\t\tnext = function() {\n\t\t\t\tjQuery.dequeue( elem, type );\n\t\t\t};\n\n\t\t// If the fx queue is dequeued, always remove the progress sentinel\n\t\tif ( fn === "inprogress" ) {\n\t\t\tfn = queue.shift();\n\t\t\tstartLength--;\n\t\t}\n\n\t\tif ( fn ) {\n\n\t\t\t// Add a progress sentinel to prevent the fx queue from being\n\t\t\t// automatically dequeued\n\t\t\tif ( type === "fx" ) {\n\t\t\t\tqueue.unshift( "inprogress" );\n\t\t\t}\n\n\t\t\t// Clear up the last queue stop function\n\t\t\tdelete hooks.stop;\n\t\t\tfn.call( elem, next, hooks );\n\t\t}\n\n\t\tif ( !startLength && hooks ) {\n\t\t\thooks.empty.fire();\n\t\t}\n\t},\n\n\t// Not public - generate a queueHooks object, or return the current one\n\t_queueHooks: function( elem, type ) {\n\t\tvar key = type + "queueHooks";\n\t\treturn dataPriv.get( elem, key ) || dataPriv.access( elem, key, {\n\t\t\tempty: jQuery.Callbacks( "once memory" ).add( function() {\n\t\t\t\tdataPriv.remove( elem, [ type + "queue", key ] );\n\t\t\t} )\n\t\t} );\n\t}\n} );\n\njQuery.fn.extend( {\n\tqueue: function( type, data ) {\n\t\tvar setter = 2;\n\n\t\tif ( typeof type !== "string" ) {\n\t\t\tdata = type;\n\t\t\ttype = "fx";\n\t\t\tsetter--;\n\t\t}\n\n\t\tif ( arguments.length < setter ) {\n\t\t\treturn jQuery.queue( this[ 0 ], type );\n\t\t}\n\n\t\treturn data === undefined ?\n\t\t\tthis :\n\t\t\tthis.each( function() {\n\t\t\t\tvar queue = jQuery.queue( this, type, data );\n\n\t\t\t\t// Ensure a hooks for this queue\n\t\t\t\tjQuery._queueHooks( this, type );\n\n\t\t\t\tif ( type === "fx" && queue[ 0 ] !== "inprogress" ) {\n\t\t\t\t\tjQuery.dequeue( this, type );\n\t\t\t\t}\n\t\t\t} );\n\t},\n\tdequeue: function( type ) {\n\t\treturn this.each( function() {\n\t\t\tjQuery.dequeue( this, type );\n\t\t} );\n\t},\n\tclearQueue: function( type ) {\n\t\treturn this.queue( type || "fx", [] );\n\t},\n\n\t// Get a promise resolved when queues of a certain type\n\t// are emptied (fx is the type by default)\n\tpromise: function( type, obj ) {\n\t\tvar tmp,\n\t\t\tcount = 1,\n\t\t\tdefer = jQuery.Deferred(),\n\t\t\telements = this,\n\t\t\ti = this.length,\n\t\t\tresolve = function() {\n\t\t\t\tif ( !( --count ) ) {\n\t\t\t\t\tdefer.resolveWith( elements, [ elements ] );\n\t\t\t\t}\n\t\t\t};\n\n\t\tif ( typeof type !== "string" ) {\n\t\t\tobj = type;\n\t\t\ttype = undefined;\n\t\t}\n\t\ttype = type || "fx";\n\n\t\twhile ( i-- ) {\n\t\t\ttmp = dataPriv.get( elements[ i ], type + "queueHooks" );\n\t\t\tif ( tmp && tmp.empty ) {\n\t\t\t\tcount++;\n\t\t\t\ttmp.empty.add( resolve );\n\t\t\t}\n\t\t}\n\t\tresolve();\n\t\treturn defer.promise( obj );\n\t}\n} );\nvar pnum = ( /[+-]?(?:\\d*\\.|)\\d+(?:[eE][+-]?\\d+|)/ ).source;\n\nvar rcssNum = new RegExp( "^(?:([+-])=|)(" + pnum + ")([a-z%]*)$", "i" );\n\n\nvar cssExpand = [ "Top", "Right", "Bottom", "Left" ];\n\nvar documentElement = document.documentElement;\n\n\n\n\tvar isAttached = function( elem ) {\n\t\t\treturn jQuery.contains( elem.ownerDocument, elem );\n\t\t},\n\t\tcomposed = { composed: true };\n\n\t// Support: IE 9 - 11+, Edge 12 - 18+, iOS 10.0 - 10.2 only\n\t// Check attachment across shadow DOM boundaries when possible (gh-3504)\n\t// Support: iOS 10.0-10.2 only\n\t// Early iOS 10 versions support `attachShadow` but not `getRootNode`,\n\t// leading to errors. We need to check for `getRootNode`.\n\tif ( documentElement.getRootNode ) {\n\t\tisAttached = function( elem ) {\n\t\t\treturn jQuery.contains( elem.ownerDocument, elem ) ||\n\t\t\t\telem.getRootNode( composed ) === elem.ownerDocument;\n\t\t};\n\t}\nvar isHiddenWithinTree = function( elem, el ) {\n\n\t\t// isHiddenWithinTree might be called from jQuery#filter function;\n\t\t// in that case, element will be second argument\n\t\telem = el || elem;\n\n\t\t// Inline style trumps all\n\t\treturn elem.style.display === "none" ||\n\t\t\telem.style.display === "" &&\n\n\t\t\t// Otherwise, check computed style\n\t\t\t// Support: Firefox <=43 - 45\n\t\t\t// Disconnected elements can have computed display: none, so first confirm that elem is\n\t\t\t// in the document.\n\t\t\tisAttached( elem ) &&\n\n\t\t\tjQuery.css( elem, "display" ) === "none";\n\t};\n\n\n\nfunction adjustCSS( elem, prop, valueParts, tween ) {\n\tvar adjusted, scale,\n\t\tmaxIterations = 20,\n\t\tcurrentValue = tween ?\n\t\t\tfunction() {\n\t\t\t\treturn tween.cur();\n\t\t\t} :\n\t\t\tfunction() {\n\t\t\t\treturn jQuery.css( elem, prop, "" );\n\t\t\t},\n\t\tinitial = currentValue(),\n\t\tunit = valueParts && valueParts[ 3 ] || ( jQuery.cssNumber[ prop ] ? "" : "px" ),\n\n\t\t// Starting value computation is required for potential unit mismatches\n\t\tinitialInUnit = elem.nodeType &&\n\t\t\t( jQuery.cssNumber[ prop ] || unit !== "px" && +initial ) &&\n\t\t\trcssNum.exec( jQuery.css( elem, prop ) );\n\n\tif ( initialInUnit && initialInUnit[ 3 ] !== unit ) {\n\n\t\t// Support: Firefox <=54\n\t\t// Halve the iteration target value to prevent interference from CSS upper bounds (gh-2144)\n\t\tinitial = initial / 2;\n\n\t\t// Trust units reported by jQuery.css\n\t\tunit = unit || initialInUnit[ 3 ];\n\n\t\t// Iteratively approximate from a nonzero starting point\n\t\tinitialInUnit = +initial || 1;\n\n\t\twhile ( maxIterations-- ) {\n\n\t\t\t// Evaluate and update our best guess (doubling guesses that zero out).\n\t\t\t// Finish if the scale equals or crosses 1 (making the old*new product non-positive).\n\t\t\tjQuery.style( elem, prop, initialInUnit + unit );\n\t\t\tif ( ( 1 - scale ) * ( 1 - ( scale = currentValue() / initial || 0.5 ) ) <= 0 ) {\n\t\t\t\tmaxIterations = 0;\n\t\t\t}\n\t\t\tinitialInUnit = initialInUnit / scale;\n\n\t\t}\n\n\t\tinitialInUnit = initialInUnit * 2;\n\t\tjQuery.style( elem, prop, initialInUnit + unit );\n\n\t\t// Make sure we update the tween properties later on\n\t\tvalueParts = valueParts || [];\n\t}\n\n\tif ( valueParts ) {\n\t\tinitialInUnit = +initialInUnit || +initial || 0;\n\n\t\t// Apply relative offset (+=/-=) if specified\n\t\tadjusted = valueParts[ 1 ] ?\n\t\t\tinitialInUnit + ( valueParts[ 1 ] + 1 ) * valueParts[ 2 ] :\n\t\t\t+valueParts[ 2 ];\n\t\tif ( tween ) {\n\t\t\ttween.unit = unit;\n\t\t\ttween.start = initialInUnit;\n\t\t\ttween.end = adjusted;\n\t\t}\n\t}\n\treturn adjusted;\n}\n\n\nvar defaultDisplayMap = {};\n\nfunction getDefaultDisplay( elem ) {\n\tvar temp,\n\t\tdoc = elem.ownerDocument,\n\t\tnodeName = elem.nodeName,\n\t\tdisplay = defaultDisplayMap[ nodeName ];\n\n\tif ( display ) {\n\t\treturn display;\n\t}\n\n\ttemp = doc.body.appendChild( doc.createElement( nodeName ) );\n\tdisplay = jQuery.css( temp, "display" );\n\n\ttemp.parentNode.removeChild( temp );\n\n\tif ( display === "none" ) {\n\t\tdisplay = "block";\n\t}\n\tdefaultDisplayMap[ nodeName ] = display;\n\n\treturn display;\n}\n\nfunction showHide( elements, show ) {\n\tvar display, elem,\n\t\tvalues = [],\n\t\tindex = 0,\n\t\tlength = elements.length;\n\n\t// Determine new display value for elements that need to change\n\tfor ( ; index < length; index++ ) {\n\t\telem = elements[ index ];\n\t\tif ( !elem.style ) {\n\t\t\tcontinue;\n\t\t}\n\n\t\tdisplay = elem.style.display;\n\t\tif ( show ) {\n\n\t\t\t// Since we force visibility upon cascade-hidden elements, an immediate (and slow)\n\t\t\t// check is required in this first loop unless we have a nonempty display value (either\n\t\t\t// inline or about-to-be-restored)\n\t\t\tif ( display === "none" ) {\n\t\t\t\tvalues[ index ] = dataPriv.get( elem, "display" ) || null;\n\t\t\t\tif ( !values[ index ] ) {\n\t\t\t\t\telem.style.display = "";\n\t\t\t\t}\n\t\t\t}\n\t\t\tif ( elem.style.display === "" && isHiddenWithinTree( elem ) ) {\n\t\t\t\tvalues[ index ] = getDefaultDisplay( elem );\n\t\t\t}\n\t\t} else {\n\t\t\tif ( display !== "none" ) {\n\t\t\t\tvalues[ index ] = "none";\n\n\t\t\t\t// Remember what we\'re overwriting\n\t\t\t\tdataPriv.set( elem, "display", display );\n\t\t\t}\n\t\t}\n\t}\n\n\t// Set the display of the elements in a second loop to avoid constant reflow\n\tfor ( index = 0; index < length; index++ ) {\n\t\tif ( values[ index ] != null ) {\n\t\t\telements[ index ].style.display = values[ index ];\n\t\t}\n\t}\n\n\treturn elements;\n}\n\njQuery.fn.extend( {\n\tshow: function() {\n\t\treturn showHide( this, true );\n\t},\n\thide: function() {\n\t\treturn showHide( this );\n\t},\n\ttoggle: function( state ) {\n\t\tif ( typeof state === "boolean" ) {\n\t\t\treturn state ? this.show() : this.hide();\n\t\t}\n\n\t\treturn this.each( function() {\n\t\t\tif ( isHiddenWithinTree( this ) ) {\n\t\t\t\tjQuery( this ).show();\n\t\t\t} else {\n\t\t\t\tjQuery( this ).hide();\n\t\t\t}\n\t\t} );\n\t}\n} );\nvar rcheckableType = ( /^(?:checkbox|radio)$/i );\n\nvar rtagName = ( /<([a-z][^\\/\\0>\\x20\\t\\r\\n\\f]*)/i );\n\nvar rscriptType = ( /^$|^module$|\\/(?:java|ecma)script/i );\n\n\n\n( function() {\n\tvar fragment = document.createDocumentFragment(),\n\t\tdiv = fragment.appendChild( document.createElement( "div" ) ),\n\t\tinput = document.createElement( "input" );\n\n\t// Support: Android 4.0 - 4.3 only\n\t// Check state lost if the name is set (trac-11217)\n\t// Support: Windows Web Apps (WWA)\n\t// `name` and `type` must use .setAttribute for WWA (trac-14901)\n\tinput.setAttribute( "type", "radio" );\n\tinput.setAttribute( "checked", "checked" );\n\tinput.setAttribute( "name", "t" );\n\n\tdiv.appendChild( input );\n\n\t// Support: Android <=4.1 only\n\t// Older WebKit doesn\'t clone checked state correctly in fragments\n\tsupport.checkClone = div.cloneNode( true ).cloneNode( true ).lastChild.checked;\n\n\t// Support: IE <=11 only\n\t// Make sure textarea (and checkbox) defaultValue is properly cloned\n\tdiv.innerHTML = "";\n\tsupport.noCloneChecked = !!div.cloneNode( true ).lastChild.defaultValue;\n\n\t// Support: IE <=9 only\n\t// IE <=9 replaces ";\n\tsupport.option = !!div.lastChild;\n} )();\n\n\n// We have to close these tags to support XHTML (trac-13200)\nvar wrapMap = {\n\n\t// XHTML parsers do not magically insert elements in the\n\t// same way that tag soup parsers do. So we cannot shorten\n\t// this by omitting or other required elements.\n\tthead: [ 1, "
", "
" ],\n\tcol: [ 2, "", "
" ],\n\ttr: [ 2, "", "
" ],\n\ttd: [ 3, "", "
" ],\n\n\t_default: [ 0, "", "" ]\n};\n\nwrapMap.tbody = wrapMap.tfoot = wrapMap.colgroup = wrapMap.caption = wrapMap.thead;\nwrapMap.th = wrapMap.td;\n\n// Support: IE <=9 only\nif ( !support.option ) {\n\twrapMap.optgroup = wrapMap.option = [ 1, "" ];\n}\n\n\nfunction getAll( context, tag ) {\n\n\t// Support: IE <=9 - 11 only\n\t// Use typeof to avoid zero-argument method invocation on host objects (trac-15151)\n\tvar ret;\n\n\tif ( typeof context.getElementsByTagName !== "undefined" ) {\n\t\tret = context.getElementsByTagName( tag || "*" );\n\n\t} else if ( typeof context.querySelectorAll !== "undefined" ) {\n\t\tret = context.querySelectorAll( tag || "*" );\n\n\t} else {\n\t\tret = [];\n\t}\n\n\tif ( tag === undefined || tag && nodeName( context, tag ) ) {\n\t\treturn jQuery.merge( [ context ], ret );\n\t}\n\n\treturn ret;\n}\n\n\n// Mark scripts as having already been evaluated\nfunction setGlobalEval( elems, refElements ) {\n\tvar i = 0,\n\t\tl = elems.length;\n\n\tfor ( ; i < l; i++ ) {\n\t\tdataPriv.set(\n\t\t\telems[ i ],\n\t\t\t"globalEval",\n\t\t\t!refElements || dataPriv.get( refElements[ i ], "globalEval" )\n\t\t);\n\t}\n}\n\n\nvar rhtml = /<|&#?\\w+;/;\n\nfunction buildFragment( elems, context, scripts, selection, ignored ) {\n\tvar elem, tmp, tag, wrap, attached, j,\n\t\tfragment = context.createDocumentFragment(),\n\t\tnodes = [],\n\t\ti = 0,\n\t\tl = elems.length;\n\n\tfor ( ; i < l; i++ ) {\n\t\telem = elems[ i ];\n\n\t\tif ( elem || elem === 0 ) {\n\n\t\t\t// Add nodes directly\n\t\t\tif ( toType( elem ) === "object" ) {\n\n\t\t\t\t// Support: Android <=4.0 only, PhantomJS 1 only\n\t\t\t\t// push.apply(_, arraylike) throws on ancient WebKit\n\t\t\t\tjQuery.merge( nodes, elem.nodeType ? [ elem ] : elem );\n\n\t\t\t// Convert non-html into a text node\n\t\t\t} else if ( !rhtml.test( elem ) ) {\n\t\t\t\tnodes.push( context.createTextNode( elem ) );\n\n\t\t\t// Convert html into DOM nodes\n\t\t\t} else {\n\t\t\t\ttmp = tmp || fragment.appendChild( context.createElement( "div" ) );\n\n\t\t\t\t// Deserialize a standard representation\n\t\t\t\ttag = ( rtagName.exec( elem ) || [ "", "" ] )[ 1 ].toLowerCase();\n\t\t\t\twrap = wrapMap[ tag ] || wrapMap._default;\n\t\t\t\ttmp.innerHTML = wrap[ 1 ] + jQuery.htmlPrefilter( elem ) + wrap[ 2 ];\n\n\t\t\t\t// Descend through wrappers to the right content\n\t\t\t\tj = wrap[ 0 ];\n\t\t\t\twhile ( j-- ) {\n\t\t\t\t\ttmp = tmp.lastChild;\n\t\t\t\t}\n\n\t\t\t\t// Support: Android <=4.0 only, PhantomJS 1 only\n\t\t\t\t// push.apply(_, arraylike) throws on ancient WebKit\n\t\t\t\tjQuery.merge( nodes, tmp.childNodes );\n\n\t\t\t\t// Remember the top-level container\n\t\t\t\ttmp = fragment.firstChild;\n\n\t\t\t\t// Ensure the created nodes are orphaned (trac-12392)\n\t\t\t\ttmp.textContent = "";\n\t\t\t}\n\t\t}\n\t}\n\n\t// Remove wrapper from fragment\n\tfragment.textContent = "";\n\n\ti = 0;\n\twhile ( ( elem = nodes[ i++ ] ) ) {\n\n\t\t// Skip elements already in the context collection (trac-4087)\n\t\tif ( selection && jQuery.inArray( elem, selection ) > -1 ) {\n\t\t\tif ( ignored ) {\n\t\t\t\tignored.push( elem );\n\t\t\t}\n\t\t\tcontinue;\n\t\t}\n\n\t\tattached = isAttached( elem );\n\n\t\t// Append to fragment\n\t\ttmp = getAll( fragment.appendChild( elem ), "script" );\n\n\t\t// Preserve script evaluation history\n\t\tif ( attached ) {\n\t\t\tsetGlobalEval( tmp );\n\t\t}\n\n\t\t// Capture executables\n\t\tif ( scripts ) {\n\t\t\tj = 0;\n\t\t\twhile ( ( elem = tmp[ j++ ] ) ) {\n\t\t\t\tif ( rscriptType.test( elem.type || "" ) ) {\n\t\t\t\t\tscripts.push( elem );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\treturn fragment;\n}\n\n\nvar rtypenamespace = /^([^.]*)(?:\\.(.+)|)/;\n\nfunction returnTrue() {\n\treturn true;\n}\n\nfunction returnFalse() {\n\treturn false;\n}\n\nfunction on( elem, types, selector, data, fn, one ) {\n\tvar origFn, type;\n\n\t// Types can be a map of types/handlers\n\tif ( typeof types === "object" ) {\n\n\t\t// ( types-Object, selector, data )\n\t\tif ( typeof selector !== "string" ) {\n\n\t\t\t// ( types-Object, data )\n\t\t\tdata = data || selector;\n\t\t\tselector = undefined;\n\t\t}\n\t\tfor ( type in types ) {\n\t\t\ton( elem, type, selector, data, types[ type ], one );\n\t\t}\n\t\treturn elem;\n\t}\n\n\tif ( data == null && fn == null ) {\n\n\t\t// ( types, fn )\n\t\tfn = selector;\n\t\tdata = selector = undefined;\n\t} else if ( fn == null ) {\n\t\tif ( typeof selector === "string" ) {\n\n\t\t\t// ( types, selector, fn )\n\t\t\tfn = data;\n\t\t\tdata = undefined;\n\t\t} else {\n\n\t\t\t// ( types, data, fn )\n\t\t\tfn = data;\n\t\t\tdata = selector;\n\t\t\tselector = undefined;\n\t\t}\n\t}\n\tif ( fn === false ) {\n\t\tfn = returnFalse;\n\t} else if ( !fn ) {\n\t\treturn elem;\n\t}\n\n\tif ( one === 1 ) {\n\t\torigFn = fn;\n\t\tfn = function( event ) {\n\n\t\t\t// Can use an empty set, since event contains the info\n\t\t\tjQuery().off( event );\n\t\t\treturn origFn.apply( this, arguments );\n\t\t};\n\n\t\t// Use same guid so caller can remove using origFn\n\t\tfn.guid = origFn.guid || ( origFn.guid = jQuery.guid++ );\n\t}\n\treturn elem.each( function() {\n\t\tjQuery.event.add( this, types, fn, data, selector );\n\t} );\n}\n\n/*\n * Helper functions for managing events -- not part of the public interface.\n * Props to Dean Edwards\' addEvent library for many of the ideas.\n */\njQuery.event = {\n\n\tglobal: {},\n\n\tadd: function( elem, types, handler, data, selector ) {\n\n\t\tvar handleObjIn, eventHandle, tmp,\n\t\t\tevents, t, handleObj,\n\t\t\tspecial, handlers, type, namespaces, origType,\n\t\t\telemData = dataPriv.get( elem );\n\n\t\t// Only attach events to objects that accept data\n\t\tif ( !acceptData( elem ) ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Caller can pass in an object of custom data in lieu of the handler\n\t\tif ( handler.handler ) {\n\t\t\thandleObjIn = handler;\n\t\t\thandler = handleObjIn.handler;\n\t\t\tselector = handleObjIn.selector;\n\t\t}\n\n\t\t// Ensure that invalid selectors throw exceptions at attach time\n\t\t// Evaluate against documentElement in case elem is a non-element node (e.g., document)\n\t\tif ( selector ) {\n\t\t\tjQuery.find.matchesSelector( documentElement, selector );\n\t\t}\n\n\t\t// Make sure that the handler has a unique ID, used to find/remove it later\n\t\tif ( !handler.guid ) {\n\t\t\thandler.guid = jQuery.guid++;\n\t\t}\n\n\t\t// Init the element\'s event structure and main handler, if this is the first\n\t\tif ( !( events = elemData.events ) ) {\n\t\t\tevents = elemData.events = Object.create( null );\n\t\t}\n\t\tif ( !( eventHandle = elemData.handle ) ) {\n\t\t\teventHandle = elemData.handle = function( e ) {\n\n\t\t\t\t// Discard the second event of a jQuery.event.trigger() and\n\t\t\t\t// when an event is called after a page has unloaded\n\t\t\t\treturn typeof jQuery !== "undefined" && jQuery.event.triggered !== e.type ?\n\t\t\t\t\tjQuery.event.dispatch.apply( elem, arguments ) : undefined;\n\t\t\t};\n\t\t}\n\n\t\t// Handle multiple events separated by a space\n\t\ttypes = ( types || "" ).match( rnothtmlwhite ) || [ "" ];\n\t\tt = types.length;\n\t\twhile ( t-- ) {\n\t\t\ttmp = rtypenamespace.exec( types[ t ] ) || [];\n\t\t\ttype = origType = tmp[ 1 ];\n\t\t\tnamespaces = ( tmp[ 2 ] || "" ).split( "." ).sort();\n\n\t\t\t// There *must* be a type, no attaching namespace-only handlers\n\t\t\tif ( !type ) {\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\t// If event changes its type, use the special event handlers for the changed type\n\t\t\tspecial = jQuery.event.special[ type ] || {};\n\n\t\t\t// If selector defined, determine special event api type, otherwise given type\n\t\t\ttype = ( selector ? special.delegateType : special.bindType ) || type;\n\n\t\t\t// Update special based on newly reset type\n\t\t\tspecial = jQuery.event.special[ type ] || {};\n\n\t\t\t// handleObj is passed to all event handlers\n\t\t\thandleObj = jQuery.extend( {\n\t\t\t\ttype: type,\n\t\t\t\torigType: origType,\n\t\t\t\tdata: data,\n\t\t\t\thandler: handler,\n\t\t\t\tguid: handler.guid,\n\t\t\t\tselector: selector,\n\t\t\t\tneedsContext: selector && jQuery.expr.match.needsContext.test( selector ),\n\t\t\t\tnamespace: namespaces.join( "." )\n\t\t\t}, handleObjIn );\n\n\t\t\t// Init the event handler queue if we\'re the first\n\t\t\tif ( !( handlers = events[ type ] ) ) {\n\t\t\t\thandlers = events[ type ] = [];\n\t\t\t\thandlers.delegateCount = 0;\n\n\t\t\t\t// Only use addEventListener if the special events handler returns false\n\t\t\t\tif ( !special.setup ||\n\t\t\t\t\tspecial.setup.call( elem, data, namespaces, eventHandle ) === false ) {\n\n\t\t\t\t\tif ( elem.addEventListener ) {\n\t\t\t\t\t\telem.addEventListener( type, eventHandle );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif ( special.add ) {\n\t\t\t\tspecial.add.call( elem, handleObj );\n\n\t\t\t\tif ( !handleObj.handler.guid ) {\n\t\t\t\t\thandleObj.handler.guid = handler.guid;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Add to the element\'s handler list, delegates in front\n\t\t\tif ( selector ) {\n\t\t\t\thandlers.splice( handlers.delegateCount++, 0, handleObj );\n\t\t\t} else {\n\t\t\t\thandlers.push( handleObj );\n\t\t\t}\n\n\t\t\t// Keep track of which events have ever been used, for event optimization\n\t\t\tjQuery.event.global[ type ] = true;\n\t\t}\n\n\t},\n\n\t// Detach an event or set of events from an element\n\tremove: function( elem, types, handler, selector, mappedTypes ) {\n\n\t\tvar j, origCount, tmp,\n\t\t\tevents, t, handleObj,\n\t\t\tspecial, handlers, type, namespaces, origType,\n\t\t\telemData = dataPriv.hasData( elem ) && dataPriv.get( elem );\n\n\t\tif ( !elemData || !( events = elemData.events ) ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Once for each type.namespace in types; type may be omitted\n\t\ttypes = ( types || "" ).match( rnothtmlwhite ) || [ "" ];\n\t\tt = types.length;\n\t\twhile ( t-- ) {\n\t\t\ttmp = rtypenamespace.exec( types[ t ] ) || [];\n\t\t\ttype = origType = tmp[ 1 ];\n\t\t\tnamespaces = ( tmp[ 2 ] || "" ).split( "." ).sort();\n\n\t\t\t// Unbind all events (on this namespace, if provided) for the element\n\t\t\tif ( !type ) {\n\t\t\t\tfor ( type in events ) {\n\t\t\t\t\tjQuery.event.remove( elem, type + types[ t ], handler, selector, true );\n\t\t\t\t}\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tspecial = jQuery.event.special[ type ] || {};\n\t\t\ttype = ( selector ? special.delegateType : special.bindType ) || type;\n\t\t\thandlers = events[ type ] || [];\n\t\t\ttmp = tmp[ 2 ] &&\n\t\t\t\tnew RegExp( "(^|\\\\.)" + namespaces.join( "\\\\.(?:.*\\\\.|)" ) + "(\\\\.|$)" );\n\n\t\t\t// Remove matching events\n\t\t\torigCount = j = handlers.length;\n\t\t\twhile ( j-- ) {\n\t\t\t\thandleObj = handlers[ j ];\n\n\t\t\t\tif ( ( mappedTypes || origType === handleObj.origType ) &&\n\t\t\t\t\t( !handler || handler.guid === handleObj.guid ) &&\n\t\t\t\t\t( !tmp || tmp.test( handleObj.namespace ) ) &&\n\t\t\t\t\t( !selector || selector === handleObj.selector ||\n\t\t\t\t\t\tselector === "**" && handleObj.selector ) ) {\n\t\t\t\t\thandlers.splice( j, 1 );\n\n\t\t\t\t\tif ( handleObj.selector ) {\n\t\t\t\t\t\thandlers.delegateCount--;\n\t\t\t\t\t}\n\t\t\t\t\tif ( special.remove ) {\n\t\t\t\t\t\tspecial.remove.call( elem, handleObj );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Remove generic event handler if we removed something and no more handlers exist\n\t\t\t// (avoids potential for endless recursion during removal of special event handlers)\n\t\t\tif ( origCount && !handlers.length ) {\n\t\t\t\tif ( !special.teardown ||\n\t\t\t\t\tspecial.teardown.call( elem, namespaces, elemData.handle ) === false ) {\n\n\t\t\t\t\tjQuery.removeEvent( elem, type, elemData.handle );\n\t\t\t\t}\n\n\t\t\t\tdelete events[ type ];\n\t\t\t}\n\t\t}\n\n\t\t// Remove data and the expando if it\'s no longer used\n\t\tif ( jQuery.isEmptyObject( events ) ) {\n\t\t\tdataPriv.remove( elem, "handle events" );\n\t\t}\n\t},\n\n\tdispatch: function( nativeEvent ) {\n\n\t\tvar i, j, ret, matched, handleObj, handlerQueue,\n\t\t\targs = new Array( arguments.length ),\n\n\t\t\t// Make a writable jQuery.Event from the native event object\n\t\t\tevent = jQuery.event.fix( nativeEvent ),\n\n\t\t\thandlers = (\n\t\t\t\tdataPriv.get( this, "events" ) || Object.create( null )\n\t\t\t)[ event.type ] || [],\n\t\t\tspecial = jQuery.event.special[ event.type ] || {};\n\n\t\t// Use the fix-ed jQuery.Event rather than the (read-only) native event\n\t\targs[ 0 ] = event;\n\n\t\tfor ( i = 1; i < arguments.length; i++ ) {\n\t\t\targs[ i ] = arguments[ i ];\n\t\t}\n\n\t\tevent.delegateTarget = this;\n\n\t\t// Call the preDispatch hook for the mapped type, and let it bail if desired\n\t\tif ( special.preDispatch && special.preDispatch.call( this, event ) === false ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Determine handlers\n\t\thandlerQueue = jQuery.event.handlers.call( this, event, handlers );\n\n\t\t// Run delegates first; they may want to stop propagation beneath us\n\t\ti = 0;\n\t\twhile ( ( matched = handlerQueue[ i++ ] ) && !event.isPropagationStopped() ) {\n\t\t\tevent.currentTarget = matched.elem;\n\n\t\t\tj = 0;\n\t\t\twhile ( ( handleObj = matched.handlers[ j++ ] ) &&\n\t\t\t\t!event.isImmediatePropagationStopped() ) {\n\n\t\t\t\t// If the event is namespaced, then each handler is only invoked if it is\n\t\t\t\t// specially universal or its namespaces are a superset of the event\'s.\n\t\t\t\tif ( !event.rnamespace || handleObj.namespace === false ||\n\t\t\t\t\tevent.rnamespace.test( handleObj.namespace ) ) {\n\n\t\t\t\t\tevent.handleObj = handleObj;\n\t\t\t\t\tevent.data = handleObj.data;\n\n\t\t\t\t\tret = ( ( jQuery.event.special[ handleObj.origType ] || {} ).handle ||\n\t\t\t\t\t\thandleObj.handler ).apply( matched.elem, args );\n\n\t\t\t\t\tif ( ret !== undefined ) {\n\t\t\t\t\t\tif ( ( event.result = ret ) === false ) {\n\t\t\t\t\t\t\tevent.preventDefault();\n\t\t\t\t\t\t\tevent.stopPropagation();\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Call the postDispatch hook for the mapped type\n\t\tif ( special.postDispatch ) {\n\t\t\tspecial.postDispatch.call( this, event );\n\t\t}\n\n\t\treturn event.result;\n\t},\n\n\thandlers: function( event, handlers ) {\n\t\tvar i, handleObj, sel, matchedHandlers, matchedSelectors,\n\t\t\thandlerQueue = [],\n\t\t\tdelegateCount = handlers.delegateCount,\n\t\t\tcur = event.target;\n\n\t\t// Find delegate handlers\n\t\tif ( delegateCount &&\n\n\t\t\t// Support: IE <=9\n\t\t\t// Black-hole SVG instance trees (trac-13180)\n\t\t\tcur.nodeType &&\n\n\t\t\t// Support: Firefox <=42\n\t\t\t// Suppress spec-violating clicks indicating a non-primary pointer button (trac-3861)\n\t\t\t// https://www.w3.org/TR/DOM-Level-3-Events/#event-type-click\n\t\t\t// Support: IE 11 only\n\t\t\t// ...but not arrow key "clicks" of radio inputs, which can have `button` -1 (gh-2343)\n\t\t\t!( event.type === "click" && event.button >= 1 ) ) {\n\n\t\t\tfor ( ; cur !== this; cur = cur.parentNode || this ) {\n\n\t\t\t\t// Don\'t check non-elements (trac-13208)\n\t\t\t\t// Don\'t process clicks on disabled elements (trac-6911, trac-8165, trac-11382, trac-11764)\n\t\t\t\tif ( cur.nodeType === 1 && !( event.type === "click" && cur.disabled === true ) ) {\n\t\t\t\t\tmatchedHandlers = [];\n\t\t\t\t\tmatchedSelectors = {};\n\t\t\t\t\tfor ( i = 0; i < delegateCount; i++ ) {\n\t\t\t\t\t\thandleObj = handlers[ i ];\n\n\t\t\t\t\t\t// Don\'t conflict with Object.prototype properties (trac-13203)\n\t\t\t\t\t\tsel = handleObj.selector + " ";\n\n\t\t\t\t\t\tif ( matchedSelectors[ sel ] === undefined ) {\n\t\t\t\t\t\t\tmatchedSelectors[ sel ] = handleObj.needsContext ?\n\t\t\t\t\t\t\t\tjQuery( sel, this ).index( cur ) > -1 :\n\t\t\t\t\t\t\t\tjQuery.find( sel, this, null, [ cur ] ).length;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif ( matchedSelectors[ sel ] ) {\n\t\t\t\t\t\t\tmatchedHandlers.push( handleObj );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tif ( matchedHandlers.length ) {\n\t\t\t\t\t\thandlerQueue.push( { elem: cur, handlers: matchedHandlers } );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Add the remaining (directly-bound) handlers\n\t\tcur = this;\n\t\tif ( delegateCount < handlers.length ) {\n\t\t\thandlerQueue.push( { elem: cur, handlers: handlers.slice( delegateCount ) } );\n\t\t}\n\n\t\treturn handlerQueue;\n\t},\n\n\taddProp: function( name, hook ) {\n\t\tObject.defineProperty( jQuery.Event.prototype, name, {\n\t\t\tenumerable: true,\n\t\t\tconfigurable: true,\n\n\t\t\tget: isFunction( hook ) ?\n\t\t\t\tfunction() {\n\t\t\t\t\tif ( this.originalEvent ) {\n\t\t\t\t\t\treturn hook( this.originalEvent );\n\t\t\t\t\t}\n\t\t\t\t} :\n\t\t\t\tfunction() {\n\t\t\t\t\tif ( this.originalEvent ) {\n\t\t\t\t\t\treturn this.originalEvent[ name ];\n\t\t\t\t\t}\n\t\t\t\t},\n\n\t\t\tset: function( value ) {\n\t\t\t\tObject.defineProperty( this, name, {\n\t\t\t\t\tenumerable: true,\n\t\t\t\t\tconfigurable: true,\n\t\t\t\t\twritable: true,\n\t\t\t\t\tvalue: value\n\t\t\t\t} );\n\t\t\t}\n\t\t} );\n\t},\n\n\tfix: function( originalEvent ) {\n\t\treturn originalEvent[ jQuery.expando ] ?\n\t\t\toriginalEvent :\n\t\t\tnew jQuery.Event( originalEvent );\n\t},\n\n\tspecial: {\n\t\tload: {\n\n\t\t\t// Prevent triggered image.load events from bubbling to window.load\n\t\t\tnoBubble: true\n\t\t},\n\t\tclick: {\n\n\t\t\t// Utilize native event to ensure correct state for checkable inputs\n\t\t\tsetup: function( data ) {\n\n\t\t\t\t// For mutual compressibility with _default, replace `this` access with a local var.\n\t\t\t\t// `|| data` is dead code meant only to preserve the variable through minification.\n\t\t\t\tvar el = this || data;\n\n\t\t\t\t// Claim the first handler\n\t\t\t\tif ( rcheckableType.test( el.type ) &&\n\t\t\t\t\tel.click && nodeName( el, "input" ) ) {\n\n\t\t\t\t\t// dataPriv.set( el, "click", ... )\n\t\t\t\t\tleverageNative( el, "click", true );\n\t\t\t\t}\n\n\t\t\t\t// Return false to allow normal processing in the caller\n\t\t\t\treturn false;\n\t\t\t},\n\t\t\ttrigger: function( data ) {\n\n\t\t\t\t// For mutual compressibility with _default, replace `this` access with a local var.\n\t\t\t\t// `|| data` is dead code meant only to preserve the variable through minification.\n\t\t\t\tvar el = this || data;\n\n\t\t\t\t// Force setup before triggering a click\n\t\t\t\tif ( rcheckableType.test( el.type ) &&\n\t\t\t\t\tel.click && nodeName( el, "input" ) ) {\n\n\t\t\t\t\tleverageNative( el, "click" );\n\t\t\t\t}\n\n\t\t\t\t// Return non-false to allow normal event-path propagation\n\t\t\t\treturn true;\n\t\t\t},\n\n\t\t\t// For cross-browser consistency, suppress native .click() on links\n\t\t\t// Also prevent it if we\'re currently inside a leveraged native-event stack\n\t\t\t_default: function( event ) {\n\t\t\t\tvar target = event.target;\n\t\t\t\treturn rcheckableType.test( target.type ) &&\n\t\t\t\t\ttarget.click && nodeName( target, "input" ) &&\n\t\t\t\t\tdataPriv.get( target, "click" ) ||\n\t\t\t\t\tnodeName( target, "a" );\n\t\t\t}\n\t\t},\n\n\t\tbeforeunload: {\n\t\t\tpostDispatch: function( event ) {\n\n\t\t\t\t// Support: Firefox 20+\n\t\t\t\t// Firefox doesn\'t alert if the returnValue field is not set.\n\t\t\t\tif ( event.result !== undefined && event.originalEvent ) {\n\t\t\t\t\tevent.originalEvent.returnValue = event.result;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n};\n\n// Ensure the presence of an event listener that handles manually-triggered\n// synthetic events by interrupting progress until reinvoked in response to\n// *native* events that it fires directly, ensuring that state changes have\n// already occurred before other listeners are invoked.\nfunction leverageNative( el, type, isSetup ) {\n\n\t// Missing `isSetup` indicates a trigger call, which must force setup through jQuery.event.add\n\tif ( !isSetup ) {\n\t\tif ( dataPriv.get( el, type ) === undefined ) {\n\t\t\tjQuery.event.add( el, type, returnTrue );\n\t\t}\n\t\treturn;\n\t}\n\n\t// Register the controller as a special universal handler for all event namespaces\n\tdataPriv.set( el, type, false );\n\tjQuery.event.add( el, type, {\n\t\tnamespace: false,\n\t\thandler: function( event ) {\n\t\t\tvar result,\n\t\t\t\tsaved = dataPriv.get( this, type );\n\n\t\t\tif ( ( event.isTrigger & 1 ) && this[ type ] ) {\n\n\t\t\t\t// Interrupt processing of the outer synthetic .trigger()ed event\n\t\t\t\tif ( !saved ) {\n\n\t\t\t\t\t// Store arguments for use when handling the inner native event\n\t\t\t\t\t// There will always be at least one argument (an event object), so this array\n\t\t\t\t\t// will not be confused with a leftover capture object.\n\t\t\t\t\tsaved = slice.call( arguments );\n\t\t\t\t\tdataPriv.set( this, type, saved );\n\n\t\t\t\t\t// Trigger the native event and capture its result\n\t\t\t\t\tthis[ type ]();\n\t\t\t\t\tresult = dataPriv.get( this, type );\n\t\t\t\t\tdataPriv.set( this, type, false );\n\n\t\t\t\t\tif ( saved !== result ) {\n\n\t\t\t\t\t\t// Cancel the outer synthetic event\n\t\t\t\t\t\tevent.stopImmediatePropagation();\n\t\t\t\t\t\tevent.preventDefault();\n\n\t\t\t\t\t\treturn result;\n\t\t\t\t\t}\n\n\t\t\t\t// If this is an inner synthetic event for an event with a bubbling surrogate\n\t\t\t\t// (focus or blur), assume that the surrogate already propagated from triggering\n\t\t\t\t// the native event and prevent that from happening again here.\n\t\t\t\t// This technically gets the ordering wrong w.r.t. to `.trigger()` (in which the\n\t\t\t\t// bubbling surrogate propagates *after* the non-bubbling base), but that seems\n\t\t\t\t// less bad than duplication.\n\t\t\t\t} else if ( ( jQuery.event.special[ type ] || {} ).delegateType ) {\n\t\t\t\t\tevent.stopPropagation();\n\t\t\t\t}\n\n\t\t\t// If this is a native event triggered above, everything is now in order\n\t\t\t// Fire an inner synthetic event with the original arguments\n\t\t\t} else if ( saved ) {\n\n\t\t\t\t// ...and capture the result\n\t\t\t\tdataPriv.set( this, type, jQuery.event.trigger(\n\t\t\t\t\tsaved[ 0 ],\n\t\t\t\t\tsaved.slice( 1 ),\n\t\t\t\t\tthis\n\t\t\t\t) );\n\n\t\t\t\t// Abort handling of the native event by all jQuery handlers while allowing\n\t\t\t\t// native handlers on the same element to run. On target, this is achieved\n\t\t\t\t// by stopping immediate propagation just on the jQuery event. However,\n\t\t\t\t// the native event is re-wrapped by a jQuery one on each level of the\n\t\t\t\t// propagation so the only way to stop it for jQuery is to stop it for\n\t\t\t\t// everyone via native `stopPropagation()`. This is not a problem for\n\t\t\t\t// focus/blur which don\'t bubble, but it does also stop click on checkboxes\n\t\t\t\t// and radios. We accept this limitation.\n\t\t\t\tevent.stopPropagation();\n\t\t\t\tevent.isImmediatePropagationStopped = returnTrue;\n\t\t\t}\n\t\t}\n\t} );\n}\n\njQuery.removeEvent = function( elem, type, handle ) {\n\n\t// This "if" is needed for plain objects\n\tif ( elem.removeEventListener ) {\n\t\telem.removeEventListener( type, handle );\n\t}\n};\n\njQuery.Event = function( src, props ) {\n\n\t// Allow instantiation without the \'new\' keyword\n\tif ( !( this instanceof jQuery.Event ) ) {\n\t\treturn new jQuery.Event( src, props );\n\t}\n\n\t// Event object\n\tif ( src && src.type ) {\n\t\tthis.originalEvent = src;\n\t\tthis.type = src.type;\n\n\t\t// Events bubbling up the document may have been marked as prevented\n\t\t// by a handler lower down the tree; reflect the correct value.\n\t\tthis.isDefaultPrevented = src.defaultPrevented ||\n\t\t\t\tsrc.defaultPrevented === undefined &&\n\n\t\t\t\t// Support: Android <=2.3 only\n\t\t\t\tsrc.returnValue === false ?\n\t\t\treturnTrue :\n\t\t\treturnFalse;\n\n\t\t// Create target properties\n\t\t// Support: Safari <=6 - 7 only\n\t\t// Target should not be a text node (trac-504, trac-13143)\n\t\tthis.target = ( src.target && src.target.nodeType === 3 ) ?\n\t\t\tsrc.target.parentNode :\n\t\t\tsrc.target;\n\n\t\tthis.currentTarget = src.currentTarget;\n\t\tthis.relatedTarget = src.relatedTarget;\n\n\t// Event type\n\t} else {\n\t\tthis.type = src;\n\t}\n\n\t// Put explicitly provided properties onto the event object\n\tif ( props ) {\n\t\tjQuery.extend( this, props );\n\t}\n\n\t// Create a timestamp if incoming event doesn\'t have one\n\tthis.timeStamp = src && src.timeStamp || Date.now();\n\n\t// Mark it as fixed\n\tthis[ jQuery.expando ] = true;\n};\n\n// jQuery.Event is based on DOM3 Events as specified by the ECMAScript Language Binding\n// https://www.w3.org/TR/2003/WD-DOM-Level-3-Events-20030331/ecma-script-binding.html\njQuery.Event.prototype = {\n\tconstructor: jQuery.Event,\n\tisDefaultPrevented: returnFalse,\n\tisPropagationStopped: returnFalse,\n\tisImmediatePropagationStopped: returnFalse,\n\tisSimulated: false,\n\n\tpreventDefault: function() {\n\t\tvar e = this.originalEvent;\n\n\t\tthis.isDefaultPrevented = returnTrue;\n\n\t\tif ( e && !this.isSimulated ) {\n\t\t\te.preventDefault();\n\t\t}\n\t},\n\tstopPropagation: function() {\n\t\tvar e = this.originalEvent;\n\n\t\tthis.isPropagationStopped = returnTrue;\n\n\t\tif ( e && !this.isSimulated ) {\n\t\t\te.stopPropagation();\n\t\t}\n\t},\n\tstopImmediatePropagation: function() {\n\t\tvar e = this.originalEvent;\n\n\t\tthis.isImmediatePropagationStopped = returnTrue;\n\n\t\tif ( e && !this.isSimulated ) {\n\t\t\te.stopImmediatePropagation();\n\t\t}\n\n\t\tthis.stopPropagation();\n\t}\n};\n\n// Includes all common event props including KeyEvent and MouseEvent specific props\njQuery.each( {\n\taltKey: true,\n\tbubbles: true,\n\tcancelable: true,\n\tchangedTouches: true,\n\tctrlKey: true,\n\tdetail: true,\n\teventPhase: true,\n\tmetaKey: true,\n\tpageX: true,\n\tpageY: true,\n\tshiftKey: true,\n\tview: true,\n\t"char": true,\n\tcode: true,\n\tcharCode: true,\n\tkey: true,\n\tkeyCode: true,\n\tbutton: true,\n\tbuttons: true,\n\tclientX: true,\n\tclientY: true,\n\toffsetX: true,\n\toffsetY: true,\n\tpointerId: true,\n\tpointerType: true,\n\tscreenX: true,\n\tscreenY: true,\n\ttargetTouches: true,\n\ttoElement: true,\n\ttouches: true,\n\twhich: true\n}, jQuery.event.addProp );\n\njQuery.each( { focus: "focusin", blur: "focusout" }, function( type, delegateType ) {\n\n\tfunction focusMappedHandler( nativeEvent ) {\n\t\tif ( document.documentMode ) {\n\n\t\t\t// Support: IE 11+\n\t\t\t// Attach a single focusin/focusout handler on the document while someone wants\n\t\t\t// focus/blur. This is because the former are synchronous in IE while the latter\n\t\t\t// are async. In other browsers, all those handlers are invoked synchronously.\n\n\t\t\t// `handle` from private data would already wrap the event, but we need\n\t\t\t// to change the `type` here.\n\t\t\tvar handle = dataPriv.get( this, "handle" ),\n\t\t\t\tevent = jQuery.event.fix( nativeEvent );\n\t\t\tevent.type = nativeEvent.type === "focusin" ? "focus" : "blur";\n\t\t\tevent.isSimulated = true;\n\n\t\t\t// First, handle focusin/focusout\n\t\t\thandle( nativeEvent );\n\n\t\t\t// ...then, handle focus/blur\n\t\t\t//\n\t\t\t// focus/blur don\'t bubble while focusin/focusout do; simulate the former by only\n\t\t\t// invoking the handler at the lower level.\n\t\t\tif ( event.target === event.currentTarget ) {\n\n\t\t\t\t// The setup part calls `leverageNative`, which, in turn, calls\n\t\t\t\t// `jQuery.event.add`, so event handle will already have been set\n\t\t\t\t// by this point.\n\t\t\t\thandle( event );\n\t\t\t}\n\t\t} else {\n\n\t\t\t// For non-IE browsers, attach a single capturing handler on the document\n\t\t\t// while someone wants focusin/focusout.\n\t\t\tjQuery.event.simulate( delegateType, nativeEvent.target,\n\t\t\t\tjQuery.event.fix( nativeEvent ) );\n\t\t}\n\t}\n\n\tjQuery.event.special[ type ] = {\n\n\t\t// Utilize native event if possible so blur/focus sequence is correct\n\t\tsetup: function() {\n\n\t\t\tvar attaches;\n\n\t\t\t// Claim the first handler\n\t\t\t// dataPriv.set( this, "focus", ... )\n\t\t\t// dataPriv.set( this, "blur", ... )\n\t\t\tleverageNative( this, type, true );\n\n\t\t\tif ( document.documentMode ) {\n\n\t\t\t\t// Support: IE 9 - 11+\n\t\t\t\t// We use the same native handler for focusin & focus (and focusout & blur)\n\t\t\t\t// so we need to coordinate setup & teardown parts between those events.\n\t\t\t\t// Use `delegateType` as the key as `type` is already used by `leverageNative`.\n\t\t\t\tattaches = dataPriv.get( this, delegateType );\n\t\t\t\tif ( !attaches ) {\n\t\t\t\t\tthis.addEventListener( delegateType, focusMappedHandler );\n\t\t\t\t}\n\t\t\t\tdataPriv.set( this, delegateType, ( attaches || 0 ) + 1 );\n\t\t\t} else {\n\n\t\t\t\t// Return false to allow normal processing in the caller\n\t\t\t\treturn false;\n\t\t\t}\n\t\t},\n\t\ttrigger: function() {\n\n\t\t\t// Force setup before trigger\n\t\t\tleverageNative( this, type );\n\n\t\t\t// Return non-false to allow normal event-path propagation\n\t\t\treturn true;\n\t\t},\n\n\t\tteardown: function() {\n\t\t\tvar attaches;\n\n\t\t\tif ( document.documentMode ) {\n\t\t\t\tattaches = dataPriv.get( this, delegateType ) - 1;\n\t\t\t\tif ( !attaches ) {\n\t\t\t\t\tthis.removeEventListener( delegateType, focusMappedHandler );\n\t\t\t\t\tdataPriv.remove( this, delegateType );\n\t\t\t\t} else {\n\t\t\t\t\tdataPriv.set( this, delegateType, attaches );\n\t\t\t\t}\n\t\t\t} else {\n\n\t\t\t\t// Return false to indicate standard teardown should be applied\n\t\t\t\treturn false;\n\t\t\t}\n\t\t},\n\n\t\t// Suppress native focus or blur if we\'re currently inside\n\t\t// a leveraged native-event stack\n\t\t_default: function( event ) {\n\t\t\treturn dataPriv.get( event.target, type );\n\t\t},\n\n\t\tdelegateType: delegateType\n\t};\n\n\t// Support: Firefox <=44\n\t// Firefox doesn\'t have focus(in | out) events\n\t// Related ticket - https://bugzilla.mozilla.org/show_bug.cgi?id=687787\n\t//\n\t// Support: Chrome <=48 - 49, Safari <=9.0 - 9.1\n\t// focus(in | out) events fire after focus & blur events,\n\t// which is spec violation - http://www.w3.org/TR/DOM-Level-3-Events/#events-focusevent-event-order\n\t// Related ticket - https://bugs.chromium.org/p/chromium/issues/detail?id=449857\n\t//\n\t// Support: IE 9 - 11+\n\t// To preserve relative focusin/focus & focusout/blur event order guaranteed on the 3.x branch,\n\t// attach a single handler for both events in IE.\n\tjQuery.event.special[ delegateType ] = {\n\t\tsetup: function() {\n\n\t\t\t// Handle: regular nodes (via `this.ownerDocument`), window\n\t\t\t// (via `this.document`) & document (via `this`).\n\t\t\tvar doc = this.ownerDocument || this.document || this,\n\t\t\t\tdataHolder = document.documentMode ? this : doc,\n\t\t\t\tattaches = dataPriv.get( dataHolder, delegateType );\n\n\t\t\t// Support: IE 9 - 11+\n\t\t\t// We use the same native handler for focusin & focus (and focusout & blur)\n\t\t\t// so we need to coordinate setup & teardown parts between those events.\n\t\t\t// Use `delegateType` as the key as `type` is already used by `leverageNative`.\n\t\t\tif ( !attaches ) {\n\t\t\t\tif ( document.documentMode ) {\n\t\t\t\t\tthis.addEventListener( delegateType, focusMappedHandler );\n\t\t\t\t} else {\n\t\t\t\t\tdoc.addEventListener( type, focusMappedHandler, true );\n\t\t\t\t}\n\t\t\t}\n\t\t\tdataPriv.set( dataHolder, delegateType, ( attaches || 0 ) + 1 );\n\t\t},\n\t\tteardown: function() {\n\t\t\tvar doc = this.ownerDocument || this.document || this,\n\t\t\t\tdataHolder = document.documentMode ? this : doc,\n\t\t\t\tattaches = dataPriv.get( dataHolder, delegateType ) - 1;\n\n\t\t\tif ( !attaches ) {\n\t\t\t\tif ( document.documentMode ) {\n\t\t\t\t\tthis.removeEventListener( delegateType, focusMappedHandler );\n\t\t\t\t} else {\n\t\t\t\t\tdoc.removeEventListener( type, focusMappedHandler, true );\n\t\t\t\t}\n\t\t\t\tdataPriv.remove( dataHolder, delegateType );\n\t\t\t} else {\n\t\t\t\tdataPriv.set( dataHolder, delegateType, attaches );\n\t\t\t}\n\t\t}\n\t};\n} );\n\n// Create mouseenter/leave events using mouseover/out and event-time checks\n// so that event delegation works in jQuery.\n// Do the same for pointerenter/pointerleave and pointerover/pointerout\n//\n// Support: Safari 7 only\n// Safari sends mouseenter too often; see:\n// https://bugs.chromium.org/p/chromium/issues/detail?id=470258\n// for the description of the bug (it existed in older Chrome versions as well).\njQuery.each( {\n\tmouseenter: "mouseover",\n\tmouseleave: "mouseout",\n\tpointerenter: "pointerover",\n\tpointerleave: "pointerout"\n}, function( orig, fix ) {\n\tjQuery.event.special[ orig ] = {\n\t\tdelegateType: fix,\n\t\tbindType: fix,\n\n\t\thandle: function( event ) {\n\t\t\tvar ret,\n\t\t\t\ttarget = this,\n\t\t\t\trelated = event.relatedTarget,\n\t\t\t\thandleObj = event.handleObj;\n\n\t\t\t// For mouseenter/leave call the handler if related is outside the target.\n\t\t\t// NB: No relatedTarget if the mouse left/entered the browser window\n\t\t\tif ( !related || ( related !== target && !jQuery.contains( target, related ) ) ) {\n\t\t\t\tevent.type = handleObj.origType;\n\t\t\t\tret = handleObj.handler.apply( this, arguments );\n\t\t\t\tevent.type = fix;\n\t\t\t}\n\t\t\treturn ret;\n\t\t}\n\t};\n} );\n\njQuery.fn.extend( {\n\n\ton: function( types, selector, data, fn ) {\n\t\treturn on( this, types, selector, data, fn );\n\t},\n\tone: function( types, selector, data, fn ) {\n\t\treturn on( this, types, selector, data, fn, 1 );\n\t},\n\toff: function( types, selector, fn ) {\n\t\tvar handleObj, type;\n\t\tif ( types && types.preventDefault && types.handleObj ) {\n\n\t\t\t// ( event ) dispatched jQuery.Event\n\t\t\thandleObj = types.handleObj;\n\t\t\tjQuery( types.delegateTarget ).off(\n\t\t\t\thandleObj.namespace ?\n\t\t\t\t\thandleObj.origType + "." + handleObj.namespace :\n\t\t\t\t\thandleObj.origType,\n\t\t\t\thandleObj.selector,\n\t\t\t\thandleObj.handler\n\t\t\t);\n\t\t\treturn this;\n\t\t}\n\t\tif ( typeof types === "object" ) {\n\n\t\t\t// ( types-object [, selector] )\n\t\t\tfor ( type in types ) {\n\t\t\t\tthis.off( type, selector, types[ type ] );\n\t\t\t}\n\t\t\treturn this;\n\t\t}\n\t\tif ( selector === false || typeof selector === "function" ) {\n\n\t\t\t// ( types [, fn] )\n\t\t\tfn = selector;\n\t\t\tselector = undefined;\n\t\t}\n\t\tif ( fn === false ) {\n\t\t\tfn = returnFalse;\n\t\t}\n\t\treturn this.each( function() {\n\t\t\tjQuery.event.remove( this, types, fn, selector );\n\t\t} );\n\t}\n} );\n\n\nvar\n\n\t// Support: IE <=10 - 11, Edge 12 - 13 only\n\t// In IE/Edge using regex groups here causes severe slowdowns.\n\t// See https://connect.microsoft.com/IE/feedback/details/1736512/\n\trnoInnerhtml = /\\s*$/g;\n\n// Prefer a tbody over its parent table for containing new rows\nfunction manipulationTarget( elem, content ) {\n\tif ( nodeName( elem, "table" ) &&\n\t\tnodeName( content.nodeType !== 11 ? content : content.firstChild, "tr" ) ) {\n\n\t\treturn jQuery( elem ).children( "tbody" )[ 0 ] || elem;\n\t}\n\n\treturn elem;\n}\n\n// Replace/restore the type attribute of script elements for safe DOM manipulation\nfunction disableScript( elem ) {\n\telem.type = ( elem.getAttribute( "type" ) !== null ) + "/" + elem.type;\n\treturn elem;\n}\nfunction restoreScript( elem ) {\n\tif ( ( elem.type || "" ).slice( 0, 5 ) === "true/" ) {\n\t\telem.type = elem.type.slice( 5 );\n\t} else {\n\t\telem.removeAttribute( "type" );\n\t}\n\n\treturn elem;\n}\n\nfunction cloneCopyEvent( src, dest ) {\n\tvar i, l, type, pdataOld, udataOld, udataCur, events;\n\n\tif ( dest.nodeType !== 1 ) {\n\t\treturn;\n\t}\n\n\t// 1. Copy private data: events, handlers, etc.\n\tif ( dataPriv.hasData( src ) ) {\n\t\tpdataOld = dataPriv.get( src );\n\t\tevents = pdataOld.events;\n\n\t\tif ( events ) {\n\t\t\tdataPriv.remove( dest, "handle events" );\n\n\t\t\tfor ( type in events ) {\n\t\t\t\tfor ( i = 0, l = events[ type ].length; i < l; i++ ) {\n\t\t\t\t\tjQuery.event.add( dest, type, events[ type ][ i ] );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t// 2. Copy user data\n\tif ( dataUser.hasData( src ) ) {\n\t\tudataOld = dataUser.access( src );\n\t\tudataCur = jQuery.extend( {}, udataOld );\n\n\t\tdataUser.set( dest, udataCur );\n\t}\n}\n\n// Fix IE bugs, see support tests\nfunction fixInput( src, dest ) {\n\tvar nodeName = dest.nodeName.toLowerCase();\n\n\t// Fails to persist the checked state of a cloned checkbox or radio button.\n\tif ( nodeName === "input" && rcheckableType.test( src.type ) ) {\n\t\tdest.checked = src.checked;\n\n\t// Fails to return the selected option to the default selected state when cloning options\n\t} else if ( nodeName === "input" || nodeName === "textarea" ) {\n\t\tdest.defaultValue = src.defaultValue;\n\t}\n}\n\nfunction domManip( collection, args, callback, ignored ) {\n\n\t// Flatten any nested arrays\n\targs = flat( args );\n\n\tvar fragment, first, scripts, hasScripts, node, doc,\n\t\ti = 0,\n\t\tl = collection.length,\n\t\tiNoClone = l - 1,\n\t\tvalue = args[ 0 ],\n\t\tvalueIsFunction = isFunction( value );\n\n\t// We can\'t cloneNode fragments that contain checked, in WebKit\n\tif ( valueIsFunction ||\n\t\t\t( l > 1 && typeof value === "string" &&\n\t\t\t\t!support.checkClone && rchecked.test( value ) ) ) {\n\t\treturn collection.each( function( index ) {\n\t\t\tvar self = collection.eq( index );\n\t\t\tif ( valueIsFunction ) {\n\t\t\t\targs[ 0 ] = value.call( this, index, self.html() );\n\t\t\t}\n\t\t\tdomManip( self, args, callback, ignored );\n\t\t} );\n\t}\n\n\tif ( l ) {\n\t\tfragment = buildFragment( args, collection[ 0 ].ownerDocument, false, collection, ignored );\n\t\tfirst = fragment.firstChild;\n\n\t\tif ( fragment.childNodes.length === 1 ) {\n\t\t\tfragment = first;\n\t\t}\n\n\t\t// Require either new content or an interest in ignored elements to invoke the callback\n\t\tif ( first || ignored ) {\n\t\t\tscripts = jQuery.map( getAll( fragment, "script" ), disableScript );\n\t\t\thasScripts = scripts.length;\n\n\t\t\t// Use the original fragment for the last item\n\t\t\t// instead of the first because it can end up\n\t\t\t// being emptied incorrectly in certain situations (trac-8070).\n\t\t\tfor ( ; i < l; i++ ) {\n\t\t\t\tnode = fragment;\n\n\t\t\t\tif ( i !== iNoClone ) {\n\t\t\t\t\tnode = jQuery.clone( node, true, true );\n\n\t\t\t\t\t// Keep references to cloned scripts for later restoration\n\t\t\t\t\tif ( hasScripts ) {\n\n\t\t\t\t\t\t// Support: Android <=4.0 only, PhantomJS 1 only\n\t\t\t\t\t\t// push.apply(_, arraylike) throws on ancient WebKit\n\t\t\t\t\t\tjQuery.merge( scripts, getAll( node, "script" ) );\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tcallback.call( collection[ i ], node, i );\n\t\t\t}\n\n\t\t\tif ( hasScripts ) {\n\t\t\t\tdoc = scripts[ scripts.length - 1 ].ownerDocument;\n\n\t\t\t\t// Re-enable scripts\n\t\t\t\tjQuery.map( scripts, restoreScript );\n\n\t\t\t\t// Evaluate executable scripts on first document insertion\n\t\t\t\tfor ( i = 0; i < hasScripts; i++ ) {\n\t\t\t\t\tnode = scripts[ i ];\n\t\t\t\t\tif ( rscriptType.test( node.type || "" ) &&\n\t\t\t\t\t\t!dataPriv.access( node, "globalEval" ) &&\n\t\t\t\t\t\tjQuery.contains( doc, node ) ) {\n\n\t\t\t\t\t\tif ( node.src && ( node.type || "" ).toLowerCase() !== "module" ) {\n\n\t\t\t\t\t\t\t// Optional AJAX dependency, but won\'t run scripts if not present\n\t\t\t\t\t\t\tif ( jQuery._evalUrl && !node.noModule ) {\n\t\t\t\t\t\t\t\tjQuery._evalUrl( node.src, {\n\t\t\t\t\t\t\t\t\tnonce: node.nonce || node.getAttribute( "nonce" )\n\t\t\t\t\t\t\t\t}, doc );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t// Unwrap a CDATA section containing script contents. This shouldn\'t be\n\t\t\t\t\t\t\t// needed as in XML documents they\'re already not visible when\n\t\t\t\t\t\t\t// inspecting element contents and in HTML documents they have no\n\t\t\t\t\t\t\t// meaning but we\'re preserving that logic for backwards compatibility.\n\t\t\t\t\t\t\t// This will be removed completely in 4.0. See gh-4904.\n\t\t\t\t\t\t\tDOMEval( node.textContent.replace( rcleanScript, "" ), node, doc );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\treturn collection;\n}\n\nfunction remove( elem, selector, keepData ) {\n\tvar node,\n\t\tnodes = selector ? jQuery.filter( selector, elem ) : elem,\n\t\ti = 0;\n\n\tfor ( ; ( node = nodes[ i ] ) != null; i++ ) {\n\t\tif ( !keepData && node.nodeType === 1 ) {\n\t\t\tjQuery.cleanData( getAll( node ) );\n\t\t}\n\n\t\tif ( node.parentNode ) {\n\t\t\tif ( keepData && isAttached( node ) ) {\n\t\t\t\tsetGlobalEval( getAll( node, "script" ) );\n\t\t\t}\n\t\t\tnode.parentNode.removeChild( node );\n\t\t}\n\t}\n\n\treturn elem;\n}\n\njQuery.extend( {\n\thtmlPrefilter: function( html ) {\n\t\treturn html;\n\t},\n\n\tclone: function( elem, dataAndEvents, deepDataAndEvents ) {\n\t\tvar i, l, srcElements, destElements,\n\t\t\tclone = elem.cloneNode( true ),\n\t\t\tinPage = isAttached( elem );\n\n\t\t// Fix IE cloning issues\n\t\tif ( !support.noCloneChecked && ( elem.nodeType === 1 || elem.nodeType === 11 ) &&\n\t\t\t\t!jQuery.isXMLDoc( elem ) ) {\n\n\t\t\t// We eschew jQuery#find here for performance reasons:\n\t\t\t// https://jsperf.com/getall-vs-sizzle/2\n\t\t\tdestElements = getAll( clone );\n\t\t\tsrcElements = getAll( elem );\n\n\t\t\tfor ( i = 0, l = srcElements.length; i < l; i++ ) {\n\t\t\t\tfixInput( srcElements[ i ], destElements[ i ] );\n\t\t\t}\n\t\t}\n\n\t\t// Copy the events from the original to the clone\n\t\tif ( dataAndEvents ) {\n\t\t\tif ( deepDataAndEvents ) {\n\t\t\t\tsrcElements = srcElements || getAll( elem );\n\t\t\t\tdestElements = destElements || getAll( clone );\n\n\t\t\t\tfor ( i = 0, l = srcElements.length; i < l; i++ ) {\n\t\t\t\t\tcloneCopyEvent( srcElements[ i ], destElements[ i ] );\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tcloneCopyEvent( elem, clone );\n\t\t\t}\n\t\t}\n\n\t\t// Preserve script evaluation history\n\t\tdestElements = getAll( clone, "script" );\n\t\tif ( destElements.length > 0 ) {\n\t\t\tsetGlobalEval( destElements, !inPage && getAll( elem, "script" ) );\n\t\t}\n\n\t\t// Return the cloned set\n\t\treturn clone;\n\t},\n\n\tcleanData: function( elems ) {\n\t\tvar data, elem, type,\n\t\t\tspecial = jQuery.event.special,\n\t\t\ti = 0;\n\n\t\tfor ( ; ( elem = elems[ i ] ) !== undefined; i++ ) {\n\t\t\tif ( acceptData( elem ) ) {\n\t\t\t\tif ( ( data = elem[ dataPriv.expando ] ) ) {\n\t\t\t\t\tif ( data.events ) {\n\t\t\t\t\t\tfor ( type in data.events ) {\n\t\t\t\t\t\t\tif ( special[ type ] ) {\n\t\t\t\t\t\t\t\tjQuery.event.remove( elem, type );\n\n\t\t\t\t\t\t\t// This is a shortcut to avoid jQuery.event.remove\'s overhead\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tjQuery.removeEvent( elem, type, data.handle );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// Support: Chrome <=35 - 45+\n\t\t\t\t\t// Assign undefined instead of using delete, see Data#remove\n\t\t\t\t\telem[ dataPriv.expando ] = undefined;\n\t\t\t\t}\n\t\t\t\tif ( elem[ dataUser.expando ] ) {\n\n\t\t\t\t\t// Support: Chrome <=35 - 45+\n\t\t\t\t\t// Assign undefined instead of using delete, see Data#remove\n\t\t\t\t\telem[ dataUser.expando ] = undefined;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n} );\n\njQuery.fn.extend( {\n\tdetach: function( selector ) {\n\t\treturn remove( this, selector, true );\n\t},\n\n\tremove: function( selector ) {\n\t\treturn remove( this, selector );\n\t},\n\n\ttext: function( value ) {\n\t\treturn access( this, function( value ) {\n\t\t\treturn value === undefined ?\n\t\t\t\tjQuery.text( this ) :\n\t\t\t\tthis.empty().each( function() {\n\t\t\t\t\tif ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) {\n\t\t\t\t\t\tthis.textContent = value;\n\t\t\t\t\t}\n\t\t\t\t} );\n\t\t}, null, value, arguments.length );\n\t},\n\n\tappend: function() {\n\t\treturn domManip( this, arguments, function( elem ) {\n\t\t\tif ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) {\n\t\t\t\tvar target = manipulationTarget( this, elem );\n\t\t\t\ttarget.appendChild( elem );\n\t\t\t}\n\t\t} );\n\t},\n\n\tprepend: function() {\n\t\treturn domManip( this, arguments, function( elem ) {\n\t\t\tif ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) {\n\t\t\t\tvar target = manipulationTarget( this, elem );\n\t\t\t\ttarget.insertBefore( elem, target.firstChild );\n\t\t\t}\n\t\t} );\n\t},\n\n\tbefore: function() {\n\t\treturn domManip( this, arguments, function( elem ) {\n\t\t\tif ( this.parentNode ) {\n\t\t\t\tthis.parentNode.insertBefore( elem, this );\n\t\t\t}\n\t\t} );\n\t},\n\n\tafter: function() {\n\t\treturn domManip( this, arguments, function( elem ) {\n\t\t\tif ( this.parentNode ) {\n\t\t\t\tthis.parentNode.insertBefore( elem, this.nextSibling );\n\t\t\t}\n\t\t} );\n\t},\n\n\tempty: function() {\n\t\tvar elem,\n\t\t\ti = 0;\n\n\t\tfor ( ; ( elem = this[ i ] ) != null; i++ ) {\n\t\t\tif ( elem.nodeType === 1 ) {\n\n\t\t\t\t// Prevent memory leaks\n\t\t\t\tjQuery.cleanData( getAll( elem, false ) );\n\n\t\t\t\t// Remove any remaining nodes\n\t\t\t\telem.textContent = "";\n\t\t\t}\n\t\t}\n\n\t\treturn this;\n\t},\n\n\tclone: function( dataAndEvents, deepDataAndEvents ) {\n\t\tdataAndEvents = dataAndEvents == null ? false : dataAndEvents;\n\t\tdeepDataAndEvents = deepDataAndEvents == null ? dataAndEvents : deepDataAndEvents;\n\n\t\treturn this.map( function() {\n\t\t\treturn jQuery.clone( this, dataAndEvents, deepDataAndEvents );\n\t\t} );\n\t},\n\n\thtml: function( value ) {\n\t\treturn access( this, function( value ) {\n\t\t\tvar elem = this[ 0 ] || {},\n\t\t\t\ti = 0,\n\t\t\t\tl = this.length;\n\n\t\t\tif ( value === undefined && elem.nodeType === 1 ) {\n\t\t\t\treturn elem.innerHTML;\n\t\t\t}\n\n\t\t\t// See if we can take a shortcut and just use innerHTML\n\t\t\tif ( typeof value === "string" && !rnoInnerhtml.test( value ) &&\n\t\t\t\t!wrapMap[ ( rtagName.exec( value ) || [ "", "" ] )[ 1 ].toLowerCase() ] ) {\n\n\t\t\t\tvalue = jQuery.htmlPrefilter( value );\n\n\t\t\t\ttry {\n\t\t\t\t\tfor ( ; i < l; i++ ) {\n\t\t\t\t\t\telem = this[ i ] || {};\n\n\t\t\t\t\t\t// Remove element nodes and prevent memory leaks\n\t\t\t\t\t\tif ( elem.nodeType === 1 ) {\n\t\t\t\t\t\t\tjQuery.cleanData( getAll( elem, false ) );\n\t\t\t\t\t\t\telem.innerHTML = value;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\telem = 0;\n\n\t\t\t\t// If using innerHTML throws an exception, use the fallback method\n\t\t\t\t} catch ( e ) {}\n\t\t\t}\n\n\t\t\tif ( elem ) {\n\t\t\t\tthis.empty().append( value );\n\t\t\t}\n\t\t}, null, value, arguments.length );\n\t},\n\n\treplaceWith: function() {\n\t\tvar ignored = [];\n\n\t\t// Make the changes, replacing each non-ignored context element with the new content\n\t\treturn domManip( this, arguments, function( elem ) {\n\t\t\tvar parent = this.parentNode;\n\n\t\t\tif ( jQuery.inArray( this, ignored ) < 0 ) {\n\t\t\t\tjQuery.cleanData( getAll( this ) );\n\t\t\t\tif ( parent ) {\n\t\t\t\t\tparent.replaceChild( elem, this );\n\t\t\t\t}\n\t\t\t}\n\n\t\t// Force callback invocation\n\t\t}, ignored );\n\t}\n} );\n\njQuery.each( {\n\tappendTo: "append",\n\tprependTo: "prepend",\n\tinsertBefore: "before",\n\tinsertAfter: "after",\n\treplaceAll: "replaceWith"\n}, function( name, original ) {\n\tjQuery.fn[ name ] = function( selector ) {\n\t\tvar elems,\n\t\t\tret = [],\n\t\t\tinsert = jQuery( selector ),\n\t\t\tlast = insert.length - 1,\n\t\t\ti = 0;\n\n\t\tfor ( ; i <= last; i++ ) {\n\t\t\telems = i === last ? this : this.clone( true );\n\t\t\tjQuery( insert[ i ] )[ original ]( elems );\n\n\t\t\t// Support: Android <=4.0 only, PhantomJS 1 only\n\t\t\t// .get() because push.apply(_, arraylike) throws on ancient WebKit\n\t\t\tpush.apply( ret, elems.get() );\n\t\t}\n\n\t\treturn this.pushStack( ret );\n\t};\n} );\nvar rnumnonpx = new RegExp( "^(" + pnum + ")(?!px)[a-z%]+$", "i" );\n\nvar rcustomProp = /^--/;\n\n\nvar getStyles = function( elem ) {\n\n\t\t// Support: IE <=11 only, Firefox <=30 (trac-15098, trac-14150)\n\t\t// IE throws on elements created in popups\n\t\t// FF meanwhile throws on frame elements through "defaultView.getComputedStyle"\n\t\tvar view = elem.ownerDocument.defaultView;\n\n\t\tif ( !view || !view.opener ) {\n\t\t\tview = window;\n\t\t}\n\n\t\treturn view.getComputedStyle( elem );\n\t};\n\nvar swap = function( elem, options, callback ) {\n\tvar ret, name,\n\t\told = {};\n\n\t// Remember the old values, and insert the new ones\n\tfor ( name in options ) {\n\t\told[ name ] = elem.style[ name ];\n\t\telem.style[ name ] = options[ name ];\n\t}\n\n\tret = callback.call( elem );\n\n\t// Revert the old values\n\tfor ( name in options ) {\n\t\telem.style[ name ] = old[ name ];\n\t}\n\n\treturn ret;\n};\n\n\nvar rboxStyle = new RegExp( cssExpand.join( "|" ), "i" );\n\n\n\n( function() {\n\n\t// Executing both pixelPosition & boxSizingReliable tests require only one layout\n\t// so they\'re executed at the same time to save the second computation.\n\tfunction computeStyleTests() {\n\n\t\t// This is a singleton, we need to execute it only once\n\t\tif ( !div ) {\n\t\t\treturn;\n\t\t}\n\n\t\tcontainer.style.cssText = "position:absolute;left:-11111px;width:60px;" +\n\t\t\t"margin-top:1px;padding:0;border:0";\n\t\tdiv.style.cssText =\n\t\t\t"position:relative;display:block;box-sizing:border-box;overflow:scroll;" +\n\t\t\t"margin:auto;border:1px;padding:1px;" +\n\t\t\t"width:60%;top:1%";\n\t\tdocumentElement.appendChild( container ).appendChild( div );\n\n\t\tvar divStyle = window.getComputedStyle( div );\n\t\tpixelPositionVal = divStyle.top !== "1%";\n\n\t\t// Support: Android 4.0 - 4.3 only, Firefox <=3 - 44\n\t\treliableMarginLeftVal = roundPixelMeasures( divStyle.marginLeft ) === 12;\n\n\t\t// Support: Android 4.0 - 4.3 only, Safari <=9.1 - 10.1, iOS <=7.0 - 9.3\n\t\t// Some styles come back with percentage values, even though they shouldn\'t\n\t\tdiv.style.right = "60%";\n\t\tpixelBoxStylesVal = roundPixelMeasures( divStyle.right ) === 36;\n\n\t\t// Support: IE 9 - 11 only\n\t\t// Detect misreporting of content dimensions for box-sizing:border-box elements\n\t\tboxSizingReliableVal = roundPixelMeasures( divStyle.width ) === 36;\n\n\t\t// Support: IE 9 only\n\t\t// Detect overflow:scroll screwiness (gh-3699)\n\t\t// Support: Chrome <=64\n\t\t// Don\'t get tricked when zoom affects offsetWidth (gh-4029)\n\t\tdiv.style.position = "absolute";\n\t\tscrollboxSizeVal = roundPixelMeasures( div.offsetWidth / 3 ) === 12;\n\n\t\tdocumentElement.removeChild( container );\n\n\t\t// Nullify the div so it wouldn\'t be stored in the memory and\n\t\t// it will also be a sign that checks already performed\n\t\tdiv = null;\n\t}\n\n\tfunction roundPixelMeasures( measure ) {\n\t\treturn Math.round( parseFloat( measure ) );\n\t}\n\n\tvar pixelPositionVal, boxSizingReliableVal, scrollboxSizeVal, pixelBoxStylesVal,\n\t\treliableTrDimensionsVal, reliableMarginLeftVal,\n\t\tcontainer = document.createElement( "div" ),\n\t\tdiv = document.createElement( "div" );\n\n\t// Finish early in limited (non-browser) environments\n\tif ( !div.style ) {\n\t\treturn;\n\t}\n\n\t// Support: IE <=9 - 11 only\n\t// Style of cloned element affects source element cloned (trac-8908)\n\tdiv.style.backgroundClip = "content-box";\n\tdiv.cloneNode( true ).style.backgroundClip = "";\n\tsupport.clearCloneStyle = div.style.backgroundClip === "content-box";\n\n\tjQuery.extend( support, {\n\t\tboxSizingReliable: function() {\n\t\t\tcomputeStyleTests();\n\t\t\treturn boxSizingReliableVal;\n\t\t},\n\t\tpixelBoxStyles: function() {\n\t\t\tcomputeStyleTests();\n\t\t\treturn pixelBoxStylesVal;\n\t\t},\n\t\tpixelPosition: function() {\n\t\t\tcomputeStyleTests();\n\t\t\treturn pixelPositionVal;\n\t\t},\n\t\treliableMarginLeft: function() {\n\t\t\tcomputeStyleTests();\n\t\t\treturn reliableMarginLeftVal;\n\t\t},\n\t\tscrollboxSize: function() {\n\t\t\tcomputeStyleTests();\n\t\t\treturn scrollboxSizeVal;\n\t\t},\n\n\t\t// Support: IE 9 - 11+, Edge 15 - 18+\n\t\t// IE/Edge misreport `getComputedStyle` of table rows with width/height\n\t\t// set in CSS while `offset*` properties report correct values.\n\t\t// Behavior in IE 9 is more subtle than in newer versions & it passes\n\t\t// some versions of this test; make sure not to make it pass there!\n\t\t//\n\t\t// Support: Firefox 70+\n\t\t// Only Firefox includes border widths\n\t\t// in computed dimensions. (gh-4529)\n\t\treliableTrDimensions: function() {\n\t\t\tvar table, tr, trChild, trStyle;\n\t\t\tif ( reliableTrDimensionsVal == null ) {\n\t\t\t\ttable = document.createElement( "table" );\n\t\t\t\ttr = document.createElement( "tr" );\n\t\t\t\ttrChild = document.createElement( "div" );\n\n\t\t\t\ttable.style.cssText = "position:absolute;left:-11111px;border-collapse:separate";\n\t\t\t\ttr.style.cssText = "box-sizing:content-box;border:1px solid";\n\n\t\t\t\t// Support: Chrome 86+\n\t\t\t\t// Height set through cssText does not get applied.\n\t\t\t\t// Computed height then comes back as 0.\n\t\t\t\ttr.style.height = "1px";\n\t\t\t\ttrChild.style.height = "9px";\n\n\t\t\t\t// Support: Android 8 Chrome 86+\n\t\t\t\t// In our bodyBackground.html iframe,\n\t\t\t\t// display for all div elements is set to "inline",\n\t\t\t\t// which causes a problem only in Android 8 Chrome 86.\n\t\t\t\t// Ensuring the div is `display: block`\n\t\t\t\t// gets around this issue.\n\t\t\t\ttrChild.style.display = "block";\n\n\t\t\t\tdocumentElement\n\t\t\t\t\t.appendChild( table )\n\t\t\t\t\t.appendChild( tr )\n\t\t\t\t\t.appendChild( trChild );\n\n\t\t\t\ttrStyle = window.getComputedStyle( tr );\n\t\t\t\treliableTrDimensionsVal = ( parseInt( trStyle.height, 10 ) +\n\t\t\t\t\tparseInt( trStyle.borderTopWidth, 10 ) +\n\t\t\t\t\tparseInt( trStyle.borderBottomWidth, 10 ) ) === tr.offsetHeight;\n\n\t\t\t\tdocumentElement.removeChild( table );\n\t\t\t}\n\t\t\treturn reliableTrDimensionsVal;\n\t\t}\n\t} );\n} )();\n\n\nfunction curCSS( elem, name, computed ) {\n\tvar width, minWidth, maxWidth, ret,\n\t\tisCustomProp = rcustomProp.test( name ),\n\n\t\t// Support: Firefox 51+\n\t\t// Retrieving style before computed somehow\n\t\t// fixes an issue with getting wrong values\n\t\t// on detached elements\n\t\tstyle = elem.style;\n\n\tcomputed = computed || getStyles( elem );\n\n\t// getPropertyValue is needed for:\n\t// .css(\'filter\') (IE 9 only, trac-12537)\n\t// .css(\'--customProperty) (gh-3144)\n\tif ( computed ) {\n\n\t\t// Support: IE <=9 - 11+\n\t\t// IE only supports `"float"` in `getPropertyValue`; in computed styles\n\t\t// it\'s only available as `"cssFloat"`. We no longer modify properties\n\t\t// sent to `.css()` apart from camelCasing, so we need to check both.\n\t\t// Normally, this would create difference in behavior: if\n\t\t// `getPropertyValue` returns an empty string, the value returned\n\t\t// by `.css()` would be `undefined`. This is usually the case for\n\t\t// disconnected elements. However, in IE even disconnected elements\n\t\t// with no styles return `"none"` for `getPropertyValue( "float" )`\n\t\tret = computed.getPropertyValue( name ) || computed[ name ];\n\n\t\tif ( isCustomProp && ret ) {\n\n\t\t\t// Support: Firefox 105+, Chrome <=105+\n\t\t\t// Spec requires trimming whitespace for custom properties (gh-4926).\n\t\t\t// Firefox only trims leading whitespace. Chrome just collapses\n\t\t\t// both leading & trailing whitespace to a single space.\n\t\t\t//\n\t\t\t// Fall back to `undefined` if empty string returned.\n\t\t\t// This collapses a missing definition with property defined\n\t\t\t// and set to an empty string but there\'s no standard API\n\t\t\t// allowing us to differentiate them without a performance penalty\n\t\t\t// and returning `undefined` aligns with older jQuery.\n\t\t\t//\n\t\t\t// rtrimCSS treats U+000D CARRIAGE RETURN and U+000C FORM FEED\n\t\t\t// as whitespace while CSS does not, but this is not a problem\n\t\t\t// because CSS preprocessing replaces them with U+000A LINE FEED\n\t\t\t// (which *is* CSS whitespace)\n\t\t\t// https://www.w3.org/TR/css-syntax-3/#input-preprocessing\n\t\t\tret = ret.replace( rtrimCSS, "$1" ) || undefined;\n\t\t}\n\n\t\tif ( ret === "" && !isAttached( elem ) ) {\n\t\t\tret = jQuery.style( elem, name );\n\t\t}\n\n\t\t// A tribute to the "awesome hack by Dean Edwards"\n\t\t// Android Browser returns percentage for some values,\n\t\t// but width seems to be reliably pixels.\n\t\t// This is against the CSSOM draft spec:\n\t\t// https://drafts.csswg.org/cssom/#resolved-values\n\t\tif ( !support.pixelBoxStyles() && rnumnonpx.test( ret ) && rboxStyle.test( name ) ) {\n\n\t\t\t// Remember the original values\n\t\t\twidth = style.width;\n\t\t\tminWidth = style.minWidth;\n\t\t\tmaxWidth = style.maxWidth;\n\n\t\t\t// Put in the new values to get a computed value out\n\t\t\tstyle.minWidth = style.maxWidth = style.width = ret;\n\t\t\tret = computed.width;\n\n\t\t\t// Revert the changed values\n\t\t\tstyle.width = width;\n\t\t\tstyle.minWidth = minWidth;\n\t\t\tstyle.maxWidth = maxWidth;\n\t\t}\n\t}\n\n\treturn ret !== undefined ?\n\n\t\t// Support: IE <=9 - 11 only\n\t\t// IE returns zIndex value as an integer.\n\t\tret + "" :\n\t\tret;\n}\n\n\nfunction addGetHookIf( conditionFn, hookFn ) {\n\n\t// Define the hook, we\'ll check on the first run if it\'s really needed.\n\treturn {\n\t\tget: function() {\n\t\t\tif ( conditionFn() ) {\n\n\t\t\t\t// Hook not needed (or it\'s not possible to use it due\n\t\t\t\t// to missing dependency), remove it.\n\t\t\t\tdelete this.get;\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// Hook needed; redefine it so that the support test is not executed again.\n\t\t\treturn ( this.get = hookFn ).apply( this, arguments );\n\t\t}\n\t};\n}\n\n\nvar cssPrefixes = [ "Webkit", "Moz", "ms" ],\n\temptyStyle = document.createElement( "div" ).style,\n\tvendorProps = {};\n\n// Return a vendor-prefixed property or undefined\nfunction vendorPropName( name ) {\n\n\t// Check for vendor prefixed names\n\tvar capName = name[ 0 ].toUpperCase() + name.slice( 1 ),\n\t\ti = cssPrefixes.length;\n\n\twhile ( i-- ) {\n\t\tname = cssPrefixes[ i ] + capName;\n\t\tif ( name in emptyStyle ) {\n\t\t\treturn name;\n\t\t}\n\t}\n}\n\n// Return a potentially-mapped jQuery.cssProps or vendor prefixed property\nfunction finalPropName( name ) {\n\tvar final = jQuery.cssProps[ name ] || vendorProps[ name ];\n\n\tif ( final ) {\n\t\treturn final;\n\t}\n\tif ( name in emptyStyle ) {\n\t\treturn name;\n\t}\n\treturn vendorProps[ name ] = vendorPropName( name ) || name;\n}\n\n\nvar\n\n\t// Swappable if display is none or starts with table\n\t// except "table", "table-cell", or "table-caption"\n\t// See here for display values: https://developer.mozilla.org/en-US/docs/CSS/display\n\trdisplayswap = /^(none|table(?!-c[ea]).+)/,\n\tcssShow = { position: "absolute", visibility: "hidden", display: "block" },\n\tcssNormalTransform = {\n\t\tletterSpacing: "0",\n\t\tfontWeight: "400"\n\t};\n\nfunction setPositiveNumber( _elem, value, subtract ) {\n\n\t// Any relative (+/-) values have already been\n\t// normalized at this point\n\tvar matches = rcssNum.exec( value );\n\treturn matches ?\n\n\t\t// Guard against undefined "subtract", e.g., when used as in cssHooks\n\t\tMath.max( 0, matches[ 2 ] - ( subtract || 0 ) ) + ( matches[ 3 ] || "px" ) :\n\t\tvalue;\n}\n\nfunction boxModelAdjustment( elem, dimension, box, isBorderBox, styles, computedVal ) {\n\tvar i = dimension === "width" ? 1 : 0,\n\t\textra = 0,\n\t\tdelta = 0,\n\t\tmarginDelta = 0;\n\n\t// Adjustment may not be necessary\n\tif ( box === ( isBorderBox ? "border" : "content" ) ) {\n\t\treturn 0;\n\t}\n\n\tfor ( ; i < 4; i += 2 ) {\n\n\t\t// Both box models exclude margin\n\t\t// Count margin delta separately to only add it after scroll gutter adjustment.\n\t\t// This is needed to make negative margins work with `outerHeight( true )` (gh-3982).\n\t\tif ( box === "margin" ) {\n\t\t\tmarginDelta += jQuery.css( elem, box + cssExpand[ i ], true, styles );\n\t\t}\n\n\t\t// If we get here with a content-box, we\'re seeking "padding" or "border" or "margin"\n\t\tif ( !isBorderBox ) {\n\n\t\t\t// Add padding\n\t\t\tdelta += jQuery.css( elem, "padding" + cssExpand[ i ], true, styles );\n\n\t\t\t// For "border" or "margin", add border\n\t\t\tif ( box !== "padding" ) {\n\t\t\t\tdelta += jQuery.css( elem, "border" + cssExpand[ i ] + "Width", true, styles );\n\n\t\t\t// But still keep track of it otherwise\n\t\t\t} else {\n\t\t\t\textra += jQuery.css( elem, "border" + cssExpand[ i ] + "Width", true, styles );\n\t\t\t}\n\n\t\t// If we get here with a border-box (content + padding + border), we\'re seeking "content" or\n\t\t// "padding" or "margin"\n\t\t} else {\n\n\t\t\t// For "content", subtract padding\n\t\t\tif ( box === "content" ) {\n\t\t\t\tdelta -= jQuery.css( elem, "padding" + cssExpand[ i ], true, styles );\n\t\t\t}\n\n\t\t\t// For "content" or "padding", subtract border\n\t\t\tif ( box !== "margin" ) {\n\t\t\t\tdelta -= jQuery.css( elem, "border" + cssExpand[ i ] + "Width", true, styles );\n\t\t\t}\n\t\t}\n\t}\n\n\t// Account for positive content-box scroll gutter when requested by providing computedVal\n\tif ( !isBorderBox && computedVal >= 0 ) {\n\n\t\t// offsetWidth/offsetHeight is a rounded sum of content, padding, scroll gutter, and border\n\t\t// Assuming integer scroll gutter, subtract the rest and round down\n\t\tdelta += Math.max( 0, Math.ceil(\n\t\t\telem[ "offset" + dimension[ 0 ].toUpperCase() + dimension.slice( 1 ) ] -\n\t\t\tcomputedVal -\n\t\t\tdelta -\n\t\t\textra -\n\t\t\t0.5\n\n\t\t// If offsetWidth/offsetHeight is unknown, then we can\'t determine content-box scroll gutter\n\t\t// Use an explicit zero to avoid NaN (gh-3964)\n\t\t) ) || 0;\n\t}\n\n\treturn delta + marginDelta;\n}\n\nfunction getWidthOrHeight( elem, dimension, extra ) {\n\n\t// Start with computed style\n\tvar styles = getStyles( elem ),\n\n\t\t// To avoid forcing a reflow, only fetch boxSizing if we need it (gh-4322).\n\t\t// Fake content-box until we know it\'s needed to know the true value.\n\t\tboxSizingNeeded = !support.boxSizingReliable() || extra,\n\t\tisBorderBox = boxSizingNeeded &&\n\t\t\tjQuery.css( elem, "boxSizing", false, styles ) === "border-box",\n\t\tvalueIsBorderBox = isBorderBox,\n\n\t\tval = curCSS( elem, dimension, styles ),\n\t\toffsetProp = "offset" + dimension[ 0 ].toUpperCase() + dimension.slice( 1 );\n\n\t// Support: Firefox <=54\n\t// Return a confounding non-pixel value or feign ignorance, as appropriate.\n\tif ( rnumnonpx.test( val ) ) {\n\t\tif ( !extra ) {\n\t\t\treturn val;\n\t\t}\n\t\tval = "auto";\n\t}\n\n\n\t// Support: IE 9 - 11 only\n\t// Use offsetWidth/offsetHeight for when box sizing is unreliable.\n\t// In those cases, the computed value can be trusted to be border-box.\n\tif ( ( !support.boxSizingReliable() && isBorderBox ||\n\n\t\t// Support: IE 10 - 11+, Edge 15 - 18+\n\t\t// IE/Edge misreport `getComputedStyle` of table rows with width/height\n\t\t// set in CSS while `offset*` properties report correct values.\n\t\t// Interestingly, in some cases IE 9 doesn\'t suffer from this issue.\n\t\t!support.reliableTrDimensions() && nodeName( elem, "tr" ) ||\n\n\t\t// Fall back to offsetWidth/offsetHeight when value is "auto"\n\t\t// This happens for inline elements with no explicit setting (gh-3571)\n\t\tval === "auto" ||\n\n\t\t// Support: Android <=4.1 - 4.3 only\n\t\t// Also use offsetWidth/offsetHeight for misreported inline dimensions (gh-3602)\n\t\t!parseFloat( val ) && jQuery.css( elem, "display", false, styles ) === "inline" ) &&\n\n\t\t// Make sure the element is visible & connected\n\t\telem.getClientRects().length ) {\n\n\t\tisBorderBox = jQuery.css( elem, "boxSizing", false, styles ) === "border-box";\n\n\t\t// Where available, offsetWidth/offsetHeight approximate border box dimensions.\n\t\t// Where not available (e.g., SVG), assume unreliable box-sizing and interpret the\n\t\t// retrieved value as a content box dimension.\n\t\tvalueIsBorderBox = offsetProp in elem;\n\t\tif ( valueIsBorderBox ) {\n\t\t\tval = elem[ offsetProp ];\n\t\t}\n\t}\n\n\t// Normalize "" and auto\n\tval = parseFloat( val ) || 0;\n\n\t// Adjust for the element\'s box model\n\treturn ( val +\n\t\tboxModelAdjustment(\n\t\t\telem,\n\t\t\tdimension,\n\t\t\textra || ( isBorderBox ? "border" : "content" ),\n\t\t\tvalueIsBorderBox,\n\t\t\tstyles,\n\n\t\t\t// Provide the current computed size to request scroll gutter calculation (gh-3589)\n\t\t\tval\n\t\t)\n\t) + "px";\n}\n\njQuery.extend( {\n\n\t// Add in style property hooks for overriding the default\n\t// behavior of getting and setting a style property\n\tcssHooks: {\n\t\topacity: {\n\t\t\tget: function( elem, computed ) {\n\t\t\t\tif ( computed ) {\n\n\t\t\t\t\t// We should always get a number back from opacity\n\t\t\t\t\tvar ret = curCSS( elem, "opacity" );\n\t\t\t\t\treturn ret === "" ? "1" : ret;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t},\n\n\t// Don\'t automatically add "px" to these possibly-unitless properties\n\tcssNumber: {\n\t\tanimationIterationCount: true,\n\t\taspectRatio: true,\n\t\tborderImageSlice: true,\n\t\tcolumnCount: true,\n\t\tflexGrow: true,\n\t\tflexShrink: true,\n\t\tfontWeight: true,\n\t\tgridArea: true,\n\t\tgridColumn: true,\n\t\tgridColumnEnd: true,\n\t\tgridColumnStart: true,\n\t\tgridRow: true,\n\t\tgridRowEnd: true,\n\t\tgridRowStart: true,\n\t\tlineHeight: true,\n\t\topacity: true,\n\t\torder: true,\n\t\torphans: true,\n\t\tscale: true,\n\t\twidows: true,\n\t\tzIndex: true,\n\t\tzoom: true,\n\n\t\t// SVG-related\n\t\tfillOpacity: true,\n\t\tfloodOpacity: true,\n\t\tstopOpacity: true,\n\t\tstrokeMiterlimit: true,\n\t\tstrokeOpacity: true\n\t},\n\n\t// Add in properties whose names you wish to fix before\n\t// setting or getting the value\n\tcssProps: {},\n\n\t// Get and set the style property on a DOM Node\n\tstyle: function( elem, name, value, extra ) {\n\n\t\t// Don\'t set styles on text and comment nodes\n\t\tif ( !elem || elem.nodeType === 3 || elem.nodeType === 8 || !elem.style ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Make sure that we\'re working with the right name\n\t\tvar ret, type, hooks,\n\t\t\torigName = camelCase( name ),\n\t\t\tisCustomProp = rcustomProp.test( name ),\n\t\t\tstyle = elem.style;\n\n\t\t// Make sure that we\'re working with the right name. We don\'t\n\t\t// want to query the value if it is a CSS custom property\n\t\t// since they are user-defined.\n\t\tif ( !isCustomProp ) {\n\t\t\tname = finalPropName( origName );\n\t\t}\n\n\t\t// Gets hook for the prefixed version, then unprefixed version\n\t\thooks = jQuery.cssHooks[ name ] || jQuery.cssHooks[ origName ];\n\n\t\t// Check if we\'re setting a value\n\t\tif ( value !== undefined ) {\n\t\t\ttype = typeof value;\n\n\t\t\t// Convert "+=" or "-=" to relative numbers (trac-7345)\n\t\t\tif ( type === "string" && ( ret = rcssNum.exec( value ) ) && ret[ 1 ] ) {\n\t\t\t\tvalue = adjustCSS( elem, name, ret );\n\n\t\t\t\t// Fixes bug trac-9237\n\t\t\t\ttype = "number";\n\t\t\t}\n\n\t\t\t// Make sure that null and NaN values aren\'t set (trac-7116)\n\t\t\tif ( value == null || value !== value ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// If a number was passed in, add the unit (except for certain CSS properties)\n\t\t\t// The isCustomProp check can be removed in jQuery 4.0 when we only auto-append\n\t\t\t// "px" to a few hardcoded values.\n\t\t\tif ( type === "number" && !isCustomProp ) {\n\t\t\t\tvalue += ret && ret[ 3 ] || ( jQuery.cssNumber[ origName ] ? "" : "px" );\n\t\t\t}\n\n\t\t\t// background-* props affect original clone\'s values\n\t\t\tif ( !support.clearCloneStyle && value === "" && name.indexOf( "background" ) === 0 ) {\n\t\t\t\tstyle[ name ] = "inherit";\n\t\t\t}\n\n\t\t\t// If a hook was provided, use that value, otherwise just set the specified value\n\t\t\tif ( !hooks || !( "set" in hooks ) ||\n\t\t\t\t( value = hooks.set( elem, value, extra ) ) !== undefined ) {\n\n\t\t\t\tif ( isCustomProp ) {\n\t\t\t\t\tstyle.setProperty( name, value );\n\t\t\t\t} else {\n\t\t\t\t\tstyle[ name ] = value;\n\t\t\t\t}\n\t\t\t}\n\n\t\t} else {\n\n\t\t\t// If a hook was provided get the non-computed value from there\n\t\t\tif ( hooks && "get" in hooks &&\n\t\t\t\t( ret = hooks.get( elem, false, extra ) ) !== undefined ) {\n\n\t\t\t\treturn ret;\n\t\t\t}\n\n\t\t\t// Otherwise just get the value from the style object\n\t\t\treturn style[ name ];\n\t\t}\n\t},\n\n\tcss: function( elem, name, extra, styles ) {\n\t\tvar val, num, hooks,\n\t\t\torigName = camelCase( name ),\n\t\t\tisCustomProp = rcustomProp.test( name );\n\n\t\t// Make sure that we\'re working with the right name. We don\'t\n\t\t// want to modify the value if it is a CSS custom property\n\t\t// since they are user-defined.\n\t\tif ( !isCustomProp ) {\n\t\t\tname = finalPropName( origName );\n\t\t}\n\n\t\t// Try prefixed name followed by the unprefixed name\n\t\thooks = jQuery.cssHooks[ name ] || jQuery.cssHooks[ origName ];\n\n\t\t// If a hook was provided get the computed value from there\n\t\tif ( hooks && "get" in hooks ) {\n\t\t\tval = hooks.get( elem, true, extra );\n\t\t}\n\n\t\t// Otherwise, if a way to get the computed value exists, use that\n\t\tif ( val === undefined ) {\n\t\t\tval = curCSS( elem, name, styles );\n\t\t}\n\n\t\t// Convert "normal" to computed value\n\t\tif ( val === "normal" && name in cssNormalTransform ) {\n\t\t\tval = cssNormalTransform[ name ];\n\t\t}\n\n\t\t// Make numeric if forced or a qualifier was provided and val looks numeric\n\t\tif ( extra === "" || extra ) {\n\t\t\tnum = parseFloat( val );\n\t\t\treturn extra === true || isFinite( num ) ? num || 0 : val;\n\t\t}\n\n\t\treturn val;\n\t}\n} );\n\njQuery.each( [ "height", "width" ], function( _i, dimension ) {\n\tjQuery.cssHooks[ dimension ] = {\n\t\tget: function( elem, computed, extra ) {\n\t\t\tif ( computed ) {\n\n\t\t\t\t// Certain elements can have dimension info if we invisibly show them\n\t\t\t\t// but it must have a current display style that would benefit\n\t\t\t\treturn rdisplayswap.test( jQuery.css( elem, "display" ) ) &&\n\n\t\t\t\t\t// Support: Safari 8+\n\t\t\t\t\t// Table columns in Safari have non-zero offsetWidth & zero\n\t\t\t\t\t// getBoundingClientRect().width unless display is changed.\n\t\t\t\t\t// Support: IE <=11 only\n\t\t\t\t\t// Running getBoundingClientRect on a disconnected node\n\t\t\t\t\t// in IE throws an error.\n\t\t\t\t\t( !elem.getClientRects().length || !elem.getBoundingClientRect().width ) ?\n\t\t\t\t\tswap( elem, cssShow, function() {\n\t\t\t\t\t\treturn getWidthOrHeight( elem, dimension, extra );\n\t\t\t\t\t} ) :\n\t\t\t\t\tgetWidthOrHeight( elem, dimension, extra );\n\t\t\t}\n\t\t},\n\n\t\tset: function( elem, value, extra ) {\n\t\t\tvar matches,\n\t\t\t\tstyles = getStyles( elem ),\n\n\t\t\t\t// Only read styles.position if the test has a chance to fail\n\t\t\t\t// to avoid forcing a reflow.\n\t\t\t\tscrollboxSizeBuggy = !support.scrollboxSize() &&\n\t\t\t\t\tstyles.position === "absolute",\n\n\t\t\t\t// To avoid forcing a reflow, only fetch boxSizing if we need it (gh-3991)\n\t\t\t\tboxSizingNeeded = scrollboxSizeBuggy || extra,\n\t\t\t\tisBorderBox = boxSizingNeeded &&\n\t\t\t\t\tjQuery.css( elem, "boxSizing", false, styles ) === "border-box",\n\t\t\t\tsubtract = extra ?\n\t\t\t\t\tboxModelAdjustment(\n\t\t\t\t\t\telem,\n\t\t\t\t\t\tdimension,\n\t\t\t\t\t\textra,\n\t\t\t\t\t\tisBorderBox,\n\t\t\t\t\t\tstyles\n\t\t\t\t\t) :\n\t\t\t\t\t0;\n\n\t\t\t// Account for unreliable border-box dimensions by comparing offset* to computed and\n\t\t\t// faking a content-box to get border and padding (gh-3699)\n\t\t\tif ( isBorderBox && scrollboxSizeBuggy ) {\n\t\t\t\tsubtract -= Math.ceil(\n\t\t\t\t\telem[ "offset" + dimension[ 0 ].toUpperCase() + dimension.slice( 1 ) ] -\n\t\t\t\t\tparseFloat( styles[ dimension ] ) -\n\t\t\t\t\tboxModelAdjustment( elem, dimension, "border", false, styles ) -\n\t\t\t\t\t0.5\n\t\t\t\t);\n\t\t\t}\n\n\t\t\t// Convert to pixels if value adjustment is needed\n\t\t\tif ( subtract && ( matches = rcssNum.exec( value ) ) &&\n\t\t\t\t( matches[ 3 ] || "px" ) !== "px" ) {\n\n\t\t\t\telem.style[ dimension ] = value;\n\t\t\t\tvalue = jQuery.css( elem, dimension );\n\t\t\t}\n\n\t\t\treturn setPositiveNumber( elem, value, subtract );\n\t\t}\n\t};\n} );\n\njQuery.cssHooks.marginLeft = addGetHookIf( support.reliableMarginLeft,\n\tfunction( elem, computed ) {\n\t\tif ( computed ) {\n\t\t\treturn ( parseFloat( curCSS( elem, "marginLeft" ) ) ||\n\t\t\t\telem.getBoundingClientRect().left -\n\t\t\t\t\tswap( elem, { marginLeft: 0 }, function() {\n\t\t\t\t\t\treturn elem.getBoundingClientRect().left;\n\t\t\t\t\t} )\n\t\t\t) + "px";\n\t\t}\n\t}\n);\n\n// These hooks are used by animate to expand properties\njQuery.each( {\n\tmargin: "",\n\tpadding: "",\n\tborder: "Width"\n}, function( prefix, suffix ) {\n\tjQuery.cssHooks[ prefix + suffix ] = {\n\t\texpand: function( value ) {\n\t\t\tvar i = 0,\n\t\t\t\texpanded = {},\n\n\t\t\t\t// Assumes a single number if not a string\n\t\t\t\tparts = typeof value === "string" ? value.split( " " ) : [ value ];\n\n\t\t\tfor ( ; i < 4; i++ ) {\n\t\t\t\texpanded[ prefix + cssExpand[ i ] + suffix ] =\n\t\t\t\t\tparts[ i ] || parts[ i - 2 ] || parts[ 0 ];\n\t\t\t}\n\n\t\t\treturn expanded;\n\t\t}\n\t};\n\n\tif ( prefix !== "margin" ) {\n\t\tjQuery.cssHooks[ prefix + suffix ].set = setPositiveNumber;\n\t}\n} );\n\njQuery.fn.extend( {\n\tcss: function( name, value ) {\n\t\treturn access( this, function( elem, name, value ) {\n\t\t\tvar styles, len,\n\t\t\t\tmap = {},\n\t\t\t\ti = 0;\n\n\t\t\tif ( Array.isArray( name ) ) {\n\t\t\t\tstyles = getStyles( elem );\n\t\t\t\tlen = name.length;\n\n\t\t\t\tfor ( ; i < len; i++ ) {\n\t\t\t\t\tmap[ name[ i ] ] = jQuery.css( elem, name[ i ], false, styles );\n\t\t\t\t}\n\n\t\t\t\treturn map;\n\t\t\t}\n\n\t\t\treturn value !== undefined ?\n\t\t\t\tjQuery.style( elem, name, value ) :\n\t\t\t\tjQuery.css( elem, name );\n\t\t}, name, value, arguments.length > 1 );\n\t}\n} );\n\n\nfunction Tween( elem, options, prop, end, easing ) {\n\treturn new Tween.prototype.init( elem, options, prop, end, easing );\n}\njQuery.Tween = Tween;\n\nTween.prototype = {\n\tconstructor: Tween,\n\tinit: function( elem, options, prop, end, easing, unit ) {\n\t\tthis.elem = elem;\n\t\tthis.prop = prop;\n\t\tthis.easing = easing || jQuery.easing._default;\n\t\tthis.options = options;\n\t\tthis.start = this.now = this.cur();\n\t\tthis.end = end;\n\t\tthis.unit = unit || ( jQuery.cssNumber[ prop ] ? "" : "px" );\n\t},\n\tcur: function() {\n\t\tvar hooks = Tween.propHooks[ this.prop ];\n\n\t\treturn hooks && hooks.get ?\n\t\t\thooks.get( this ) :\n\t\t\tTween.propHooks._default.get( this );\n\t},\n\trun: function( percent ) {\n\t\tvar eased,\n\t\t\thooks = Tween.propHooks[ this.prop ];\n\n\t\tif ( this.options.duration ) {\n\t\t\tthis.pos = eased = jQuery.easing[ this.easing ](\n\t\t\t\tpercent, this.options.duration * percent, 0, 1, this.options.duration\n\t\t\t);\n\t\t} else {\n\t\t\tthis.pos = eased = percent;\n\t\t}\n\t\tthis.now = ( this.end - this.start ) * eased + this.start;\n\n\t\tif ( this.options.step ) {\n\t\t\tthis.options.step.call( this.elem, this.now, this );\n\t\t}\n\n\t\tif ( hooks && hooks.set ) {\n\t\t\thooks.set( this );\n\t\t} else {\n\t\t\tTween.propHooks._default.set( this );\n\t\t}\n\t\treturn this;\n\t}\n};\n\nTween.prototype.init.prototype = Tween.prototype;\n\nTween.propHooks = {\n\t_default: {\n\t\tget: function( tween ) {\n\t\t\tvar result;\n\n\t\t\t// Use a property on the element directly when it is not a DOM element,\n\t\t\t// or when there is no matching style property that exists.\n\t\t\tif ( tween.elem.nodeType !== 1 ||\n\t\t\t\ttween.elem[ tween.prop ] != null && tween.elem.style[ tween.prop ] == null ) {\n\t\t\t\treturn tween.elem[ tween.prop ];\n\t\t\t}\n\n\t\t\t// Passing an empty string as a 3rd parameter to .css will automatically\n\t\t\t// attempt a parseFloat and fallback to a string if the parse fails.\n\t\t\t// Simple values such as "10px" are parsed to Float;\n\t\t\t// complex values such as "rotate(1rad)" are returned as-is.\n\t\t\tresult = jQuery.css( tween.elem, tween.prop, "" );\n\n\t\t\t// Empty strings, null, undefined and "auto" are converted to 0.\n\t\t\treturn !result || result === "auto" ? 0 : result;\n\t\t},\n\t\tset: function( tween ) {\n\n\t\t\t// Use step hook for back compat.\n\t\t\t// Use cssHook if its there.\n\t\t\t// Use .style if available and use plain properties where available.\n\t\t\tif ( jQuery.fx.step[ tween.prop ] ) {\n\t\t\t\tjQuery.fx.step[ tween.prop ]( tween );\n\t\t\t} else if ( tween.elem.nodeType === 1 && (\n\t\t\t\tjQuery.cssHooks[ tween.prop ] ||\n\t\t\t\t\ttween.elem.style[ finalPropName( tween.prop ) ] != null ) ) {\n\t\t\t\tjQuery.style( tween.elem, tween.prop, tween.now + tween.unit );\n\t\t\t} else {\n\t\t\t\ttween.elem[ tween.prop ] = tween.now;\n\t\t\t}\n\t\t}\n\t}\n};\n\n// Support: IE <=9 only\n// Panic based approach to setting things on disconnected nodes\nTween.propHooks.scrollTop = Tween.propHooks.scrollLeft = {\n\tset: function( tween ) {\n\t\tif ( tween.elem.nodeType && tween.elem.parentNode ) {\n\t\t\ttween.elem[ tween.prop ] = tween.now;\n\t\t}\n\t}\n};\n\njQuery.easing = {\n\tlinear: function( p ) {\n\t\treturn p;\n\t},\n\tswing: function( p ) {\n\t\treturn 0.5 - Math.cos( p * Math.PI ) / 2;\n\t},\n\t_default: "swing"\n};\n\njQuery.fx = Tween.prototype.init;\n\n// Back compat <1.8 extension point\njQuery.fx.step = {};\n\n\n\n\nvar\n\tfxNow, inProgress,\n\trfxtypes = /^(?:toggle|show|hide)$/,\n\trrun = /queueHooks$/;\n\nfunction schedule() {\n\tif ( inProgress ) {\n\t\tif ( document.hidden === false && window.requestAnimationFrame ) {\n\t\t\twindow.requestAnimationFrame( schedule );\n\t\t} else {\n\t\t\twindow.setTimeout( schedule, jQuery.fx.interval );\n\t\t}\n\n\t\tjQuery.fx.tick();\n\t}\n}\n\n// Animations created synchronously will run synchronously\nfunction createFxNow() {\n\twindow.setTimeout( function() {\n\t\tfxNow = undefined;\n\t} );\n\treturn ( fxNow = Date.now() );\n}\n\n// Generate parameters to create a standard animation\nfunction genFx( type, includeWidth ) {\n\tvar which,\n\t\ti = 0,\n\t\tattrs = { height: type };\n\n\t// If we include width, step value is 1 to do all cssExpand values,\n\t// otherwise step value is 2 to skip over Left and Right\n\tincludeWidth = includeWidth ? 1 : 0;\n\tfor ( ; i < 4; i += 2 - includeWidth ) {\n\t\twhich = cssExpand[ i ];\n\t\tattrs[ "margin" + which ] = attrs[ "padding" + which ] = type;\n\t}\n\n\tif ( includeWidth ) {\n\t\tattrs.opacity = attrs.width = type;\n\t}\n\n\treturn attrs;\n}\n\nfunction createTween( value, prop, animation ) {\n\tvar tween,\n\t\tcollection = ( Animation.tweeners[ prop ] || [] ).concat( Animation.tweeners[ "*" ] ),\n\t\tindex = 0,\n\t\tlength = collection.length;\n\tfor ( ; index < length; index++ ) {\n\t\tif ( ( tween = collection[ index ].call( animation, prop, value ) ) ) {\n\n\t\t\t// We\'re done with this property\n\t\t\treturn tween;\n\t\t}\n\t}\n}\n\nfunction defaultPrefilter( elem, props, opts ) {\n\tvar prop, value, toggle, hooks, oldfire, propTween, restoreDisplay, display,\n\t\tisBox = "width" in props || "height" in props,\n\t\tanim = this,\n\t\torig = {},\n\t\tstyle = elem.style,\n\t\thidden = elem.nodeType && isHiddenWithinTree( elem ),\n\t\tdataShow = dataPriv.get( elem, "fxshow" );\n\n\t// Queue-skipping animations hijack the fx hooks\n\tif ( !opts.queue ) {\n\t\thooks = jQuery._queueHooks( elem, "fx" );\n\t\tif ( hooks.unqueued == null ) {\n\t\t\thooks.unqueued = 0;\n\t\t\toldfire = hooks.empty.fire;\n\t\t\thooks.empty.fire = function() {\n\t\t\t\tif ( !hooks.unqueued ) {\n\t\t\t\t\toldfire();\n\t\t\t\t}\n\t\t\t};\n\t\t}\n\t\thooks.unqueued++;\n\n\t\tanim.always( function() {\n\n\t\t\t// Ensure the complete handler is called before this completes\n\t\t\tanim.always( function() {\n\t\t\t\thooks.unqueued--;\n\t\t\t\tif ( !jQuery.queue( elem, "fx" ).length ) {\n\t\t\t\t\thooks.empty.fire();\n\t\t\t\t}\n\t\t\t} );\n\t\t} );\n\t}\n\n\t// Detect show/hide animations\n\tfor ( prop in props ) {\n\t\tvalue = props[ prop ];\n\t\tif ( rfxtypes.test( value ) ) {\n\t\t\tdelete props[ prop ];\n\t\t\ttoggle = toggle || value === "toggle";\n\t\t\tif ( value === ( hidden ? "hide" : "show" ) ) {\n\n\t\t\t\t// Pretend to be hidden if this is a "show" and\n\t\t\t\t// there is still data from a stopped show/hide\n\t\t\t\tif ( value === "show" && dataShow && dataShow[ prop ] !== undefined ) {\n\t\t\t\t\thidden = true;\n\n\t\t\t\t// Ignore all other no-op show/hide data\n\t\t\t\t} else {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t}\n\t\t\torig[ prop ] = dataShow && dataShow[ prop ] || jQuery.style( elem, prop );\n\t\t}\n\t}\n\n\t// Bail out if this is a no-op like .hide().hide()\n\tpropTween = !jQuery.isEmptyObject( props );\n\tif ( !propTween && jQuery.isEmptyObject( orig ) ) {\n\t\treturn;\n\t}\n\n\t// Restrict "overflow" and "display" styles during box animations\n\tif ( isBox && elem.nodeType === 1 ) {\n\n\t\t// Support: IE <=9 - 11, Edge 12 - 15\n\t\t// Record all 3 overflow attributes because IE does not infer the shorthand\n\t\t// from identically-valued overflowX and overflowY and Edge just mirrors\n\t\t// the overflowX value there.\n\t\topts.overflow = [ style.overflow, style.overflowX, style.overflowY ];\n\n\t\t// Identify a display type, preferring old show/hide data over the CSS cascade\n\t\trestoreDisplay = dataShow && dataShow.display;\n\t\tif ( restoreDisplay == null ) {\n\t\t\trestoreDisplay = dataPriv.get( elem, "display" );\n\t\t}\n\t\tdisplay = jQuery.css( elem, "display" );\n\t\tif ( display === "none" ) {\n\t\t\tif ( restoreDisplay ) {\n\t\t\t\tdisplay = restoreDisplay;\n\t\t\t} else {\n\n\t\t\t\t// Get nonempty value(s) by temporarily forcing visibility\n\t\t\t\tshowHide( [ elem ], true );\n\t\t\t\trestoreDisplay = elem.style.display || restoreDisplay;\n\t\t\t\tdisplay = jQuery.css( elem, "display" );\n\t\t\t\tshowHide( [ elem ] );\n\t\t\t}\n\t\t}\n\n\t\t// Animate inline elements as inline-block\n\t\tif ( display === "inline" || display === "inline-block" && restoreDisplay != null ) {\n\t\t\tif ( jQuery.css( elem, "float" ) === "none" ) {\n\n\t\t\t\t// Restore the original display value at the end of pure show/hide animations\n\t\t\t\tif ( !propTween ) {\n\t\t\t\t\tanim.done( function() {\n\t\t\t\t\t\tstyle.display = restoreDisplay;\n\t\t\t\t\t} );\n\t\t\t\t\tif ( restoreDisplay == null ) {\n\t\t\t\t\t\tdisplay = style.display;\n\t\t\t\t\t\trestoreDisplay = display === "none" ? "" : display;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tstyle.display = "inline-block";\n\t\t\t}\n\t\t}\n\t}\n\n\tif ( opts.overflow ) {\n\t\tstyle.overflow = "hidden";\n\t\tanim.always( function() {\n\t\t\tstyle.overflow = opts.overflow[ 0 ];\n\t\t\tstyle.overflowX = opts.overflow[ 1 ];\n\t\t\tstyle.overflowY = opts.overflow[ 2 ];\n\t\t} );\n\t}\n\n\t// Implement show/hide animations\n\tpropTween = false;\n\tfor ( prop in orig ) {\n\n\t\t// General show/hide setup for this element animation\n\t\tif ( !propTween ) {\n\t\t\tif ( dataShow ) {\n\t\t\t\tif ( "hidden" in dataShow ) {\n\t\t\t\t\thidden = dataShow.hidden;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tdataShow = dataPriv.access( elem, "fxshow", { display: restoreDisplay } );\n\t\t\t}\n\n\t\t\t// Store hidden/visible for toggle so `.stop().toggle()` "reverses"\n\t\t\tif ( toggle ) {\n\t\t\t\tdataShow.hidden = !hidden;\n\t\t\t}\n\n\t\t\t// Show elements before animating them\n\t\t\tif ( hidden ) {\n\t\t\t\tshowHide( [ elem ], true );\n\t\t\t}\n\n\t\t\t/* eslint-disable no-loop-func */\n\n\t\t\tanim.done( function() {\n\n\t\t\t\t/* eslint-enable no-loop-func */\n\n\t\t\t\t// The final step of a "hide" animation is actually hiding the element\n\t\t\t\tif ( !hidden ) {\n\t\t\t\t\tshowHide( [ elem ] );\n\t\t\t\t}\n\t\t\t\tdataPriv.remove( elem, "fxshow" );\n\t\t\t\tfor ( prop in orig ) {\n\t\t\t\t\tjQuery.style( elem, prop, orig[ prop ] );\n\t\t\t\t}\n\t\t\t} );\n\t\t}\n\n\t\t// Per-property setup\n\t\tpropTween = createTween( hidden ? dataShow[ prop ] : 0, prop, anim );\n\t\tif ( !( prop in dataShow ) ) {\n\t\t\tdataShow[ prop ] = propTween.start;\n\t\t\tif ( hidden ) {\n\t\t\t\tpropTween.end = propTween.start;\n\t\t\t\tpropTween.start = 0;\n\t\t\t}\n\t\t}\n\t}\n}\n\nfunction propFilter( props, specialEasing ) {\n\tvar index, name, easing, value, hooks;\n\n\t// camelCase, specialEasing and expand cssHook pass\n\tfor ( index in props ) {\n\t\tname = camelCase( index );\n\t\teasing = specialEasing[ name ];\n\t\tvalue = props[ index ];\n\t\tif ( Array.isArray( value ) ) {\n\t\t\teasing = value[ 1 ];\n\t\t\tvalue = props[ index ] = value[ 0 ];\n\t\t}\n\n\t\tif ( index !== name ) {\n\t\t\tprops[ name ] = value;\n\t\t\tdelete props[ index ];\n\t\t}\n\n\t\thooks = jQuery.cssHooks[ name ];\n\t\tif ( hooks && "expand" in hooks ) {\n\t\t\tvalue = hooks.expand( value );\n\t\t\tdelete props[ name ];\n\n\t\t\t// Not quite $.extend, this won\'t overwrite existing keys.\n\t\t\t// Reusing \'index\' because we have the correct "name"\n\t\t\tfor ( index in value ) {\n\t\t\t\tif ( !( index in props ) ) {\n\t\t\t\t\tprops[ index ] = value[ index ];\n\t\t\t\t\tspecialEasing[ index ] = easing;\n\t\t\t\t}\n\t\t\t}\n\t\t} else {\n\t\t\tspecialEasing[ name ] = easing;\n\t\t}\n\t}\n}\n\nfunction Animation( elem, properties, options ) {\n\tvar result,\n\t\tstopped,\n\t\tindex = 0,\n\t\tlength = Animation.prefilters.length,\n\t\tdeferred = jQuery.Deferred().always( function() {\n\n\t\t\t// Don\'t match elem in the :animated selector\n\t\t\tdelete tick.elem;\n\t\t} ),\n\t\ttick = function() {\n\t\t\tif ( stopped ) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\tvar currentTime = fxNow || createFxNow(),\n\t\t\t\tremaining = Math.max( 0, animation.startTime + animation.duration - currentTime ),\n\n\t\t\t\t// Support: Android 2.3 only\n\t\t\t\t// Archaic crash bug won\'t allow us to use `1 - ( 0.5 || 0 )` (trac-12497)\n\t\t\t\ttemp = remaining / animation.duration || 0,\n\t\t\t\tpercent = 1 - temp,\n\t\t\t\tindex = 0,\n\t\t\t\tlength = animation.tweens.length;\n\n\t\t\tfor ( ; index < length; index++ ) {\n\t\t\t\tanimation.tweens[ index ].run( percent );\n\t\t\t}\n\n\t\t\tdeferred.notifyWith( elem, [ animation, percent, remaining ] );\n\n\t\t\t// If there\'s more to do, yield\n\t\t\tif ( percent < 1 && length ) {\n\t\t\t\treturn remaining;\n\t\t\t}\n\n\t\t\t// If this was an empty animation, synthesize a final progress notification\n\t\t\tif ( !length ) {\n\t\t\t\tdeferred.notifyWith( elem, [ animation, 1, 0 ] );\n\t\t\t}\n\n\t\t\t// Resolve the animation and report its conclusion\n\t\t\tdeferred.resolveWith( elem, [ animation ] );\n\t\t\treturn false;\n\t\t},\n\t\tanimation = deferred.promise( {\n\t\t\telem: elem,\n\t\t\tprops: jQuery.extend( {}, properties ),\n\t\t\topts: jQuery.extend( true, {\n\t\t\t\tspecialEasing: {},\n\t\t\t\teasing: jQuery.easing._default\n\t\t\t}, options ),\n\t\t\toriginalProperties: properties,\n\t\t\toriginalOptions: options,\n\t\t\tstartTime: fxNow || createFxNow(),\n\t\t\tduration: options.duration,\n\t\t\ttweens: [],\n\t\t\tcreateTween: function( prop, end ) {\n\t\t\t\tvar tween = jQuery.Tween( elem, animation.opts, prop, end,\n\t\t\t\t\tanimation.opts.specialEasing[ prop ] || animation.opts.easing );\n\t\t\t\tanimation.tweens.push( tween );\n\t\t\t\treturn tween;\n\t\t\t},\n\t\t\tstop: function( gotoEnd ) {\n\t\t\t\tvar index = 0,\n\n\t\t\t\t\t// If we are going to the end, we want to run all the tweens\n\t\t\t\t\t// otherwise we skip this part\n\t\t\t\t\tlength = gotoEnd ? animation.tweens.length : 0;\n\t\t\t\tif ( stopped ) {\n\t\t\t\t\treturn this;\n\t\t\t\t}\n\t\t\t\tstopped = true;\n\t\t\t\tfor ( ; index < length; index++ ) {\n\t\t\t\t\tanimation.tweens[ index ].run( 1 );\n\t\t\t\t}\n\n\t\t\t\t// Resolve when we played the last frame; otherwise, reject\n\t\t\t\tif ( gotoEnd ) {\n\t\t\t\t\tdeferred.notifyWith( elem, [ animation, 1, 0 ] );\n\t\t\t\t\tdeferred.resolveWith( elem, [ animation, gotoEnd ] );\n\t\t\t\t} else {\n\t\t\t\t\tdeferred.rejectWith( elem, [ animation, gotoEnd ] );\n\t\t\t\t}\n\t\t\t\treturn this;\n\t\t\t}\n\t\t} ),\n\t\tprops = animation.props;\n\n\tpropFilter( props, animation.opts.specialEasing );\n\n\tfor ( ; index < length; index++ ) {\n\t\tresult = Animation.prefilters[ index ].call( animation, elem, props, animation.opts );\n\t\tif ( result ) {\n\t\t\tif ( isFunction( result.stop ) ) {\n\t\t\t\tjQuery._queueHooks( animation.elem, animation.opts.queue ).stop =\n\t\t\t\t\tresult.stop.bind( result );\n\t\t\t}\n\t\t\treturn result;\n\t\t}\n\t}\n\n\tjQuery.map( props, createTween, animation );\n\n\tif ( isFunction( animation.opts.start ) ) {\n\t\tanimation.opts.start.call( elem, animation );\n\t}\n\n\t// Attach callbacks from options\n\tanimation\n\t\t.progress( animation.opts.progress )\n\t\t.done( animation.opts.done, animation.opts.complete )\n\t\t.fail( animation.opts.fail )\n\t\t.always( animation.opts.always );\n\n\tjQuery.fx.timer(\n\t\tjQuery.extend( tick, {\n\t\t\telem: elem,\n\t\t\tanim: animation,\n\t\t\tqueue: animation.opts.queue\n\t\t} )\n\t);\n\n\treturn animation;\n}\n\njQuery.Animation = jQuery.extend( Animation, {\n\n\ttweeners: {\n\t\t"*": [ function( prop, value ) {\n\t\t\tvar tween = this.createTween( prop, value );\n\t\t\tadjustCSS( tween.elem, prop, rcssNum.exec( value ), tween );\n\t\t\treturn tween;\n\t\t} ]\n\t},\n\n\ttweener: function( props, callback ) {\n\t\tif ( isFunction( props ) ) {\n\t\t\tcallback = props;\n\t\t\tprops = [ "*" ];\n\t\t} else {\n\t\t\tprops = props.match( rnothtmlwhite );\n\t\t}\n\n\t\tvar prop,\n\t\t\tindex = 0,\n\t\t\tlength = props.length;\n\n\t\tfor ( ; index < length; index++ ) {\n\t\t\tprop = props[ index ];\n\t\t\tAnimation.tweeners[ prop ] = Animation.tweeners[ prop ] || [];\n\t\t\tAnimation.tweeners[ prop ].unshift( callback );\n\t\t}\n\t},\n\n\tprefilters: [ defaultPrefilter ],\n\n\tprefilter: function( callback, prepend ) {\n\t\tif ( prepend ) {\n\t\t\tAnimation.prefilters.unshift( callback );\n\t\t} else {\n\t\t\tAnimation.prefilters.push( callback );\n\t\t}\n\t}\n} );\n\njQuery.speed = function( speed, easing, fn ) {\n\tvar opt = speed && typeof speed === "object" ? jQuery.extend( {}, speed ) : {\n\t\tcomplete: fn || !fn && easing ||\n\t\t\tisFunction( speed ) && speed,\n\t\tduration: speed,\n\t\teasing: fn && easing || easing && !isFunction( easing ) && easing\n\t};\n\n\t// Go to the end state if fx are off\n\tif ( jQuery.fx.off ) {\n\t\topt.duration = 0;\n\n\t} else {\n\t\tif ( typeof opt.duration !== "number" ) {\n\t\t\tif ( opt.duration in jQuery.fx.speeds ) {\n\t\t\t\topt.duration = jQuery.fx.speeds[ opt.duration ];\n\n\t\t\t} else {\n\t\t\t\topt.duration = jQuery.fx.speeds._default;\n\t\t\t}\n\t\t}\n\t}\n\n\t// Normalize opt.queue - true/undefined/null -> "fx"\n\tif ( opt.queue == null || opt.queue === true ) {\n\t\topt.queue = "fx";\n\t}\n\n\t// Queueing\n\topt.old = opt.complete;\n\n\topt.complete = function() {\n\t\tif ( isFunction( opt.old ) ) {\n\t\t\topt.old.call( this );\n\t\t}\n\n\t\tif ( opt.queue ) {\n\t\t\tjQuery.dequeue( this, opt.queue );\n\t\t}\n\t};\n\n\treturn opt;\n};\n\njQuery.fn.extend( {\n\tfadeTo: function( speed, to, easing, callback ) {\n\n\t\t// Show any hidden elements after setting opacity to 0\n\t\treturn this.filter( isHiddenWithinTree ).css( "opacity", 0 ).show()\n\n\t\t\t// Animate to the value specified\n\t\t\t.end().animate( { opacity: to }, speed, easing, callback );\n\t},\n\tanimate: function( prop, speed, easing, callback ) {\n\t\tvar empty = jQuery.isEmptyObject( prop ),\n\t\t\toptall = jQuery.speed( speed, easing, callback ),\n\t\t\tdoAnimation = function() {\n\n\t\t\t\t// Operate on a copy of prop so per-property easing won\'t be lost\n\t\t\t\tvar anim = Animation( this, jQuery.extend( {}, prop ), optall );\n\n\t\t\t\t// Empty animations, or finishing resolves immediately\n\t\t\t\tif ( empty || dataPriv.get( this, "finish" ) ) {\n\t\t\t\t\tanim.stop( true );\n\t\t\t\t}\n\t\t\t};\n\n\t\tdoAnimation.finish = doAnimation;\n\n\t\treturn empty || optall.queue === false ?\n\t\t\tthis.each( doAnimation ) :\n\t\t\tthis.queue( optall.queue, doAnimation );\n\t},\n\tstop: function( type, clearQueue, gotoEnd ) {\n\t\tvar stopQueue = function( hooks ) {\n\t\t\tvar stop = hooks.stop;\n\t\t\tdelete hooks.stop;\n\t\t\tstop( gotoEnd );\n\t\t};\n\n\t\tif ( typeof type !== "string" ) {\n\t\t\tgotoEnd = clearQueue;\n\t\t\tclearQueue = type;\n\t\t\ttype = undefined;\n\t\t}\n\t\tif ( clearQueue ) {\n\t\t\tthis.queue( type || "fx", [] );\n\t\t}\n\n\t\treturn this.each( function() {\n\t\t\tvar dequeue = true,\n\t\t\t\tindex = type != null && type + "queueHooks",\n\t\t\t\ttimers = jQuery.timers,\n\t\t\t\tdata = dataPriv.get( this );\n\n\t\t\tif ( index ) {\n\t\t\t\tif ( data[ index ] && data[ index ].stop ) {\n\t\t\t\t\tstopQueue( data[ index ] );\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tfor ( index in data ) {\n\t\t\t\t\tif ( data[ index ] && data[ index ].stop && rrun.test( index ) ) {\n\t\t\t\t\t\tstopQueue( data[ index ] );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tfor ( index = timers.length; index--; ) {\n\t\t\t\tif ( timers[ index ].elem === this &&\n\t\t\t\t\t( type == null || timers[ index ].queue === type ) ) {\n\n\t\t\t\t\ttimers[ index ].anim.stop( gotoEnd );\n\t\t\t\t\tdequeue = false;\n\t\t\t\t\ttimers.splice( index, 1 );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Start the next in the queue if the last step wasn\'t forced.\n\t\t\t// Timers currently will call their complete callbacks, which\n\t\t\t// will dequeue but only if they were gotoEnd.\n\t\t\tif ( dequeue || !gotoEnd ) {\n\t\t\t\tjQuery.dequeue( this, type );\n\t\t\t}\n\t\t} );\n\t},\n\tfinish: function( type ) {\n\t\tif ( type !== false ) {\n\t\t\ttype = type || "fx";\n\t\t}\n\t\treturn this.each( function() {\n\t\t\tvar index,\n\t\t\t\tdata = dataPriv.get( this ),\n\t\t\t\tqueue = data[ type + "queue" ],\n\t\t\t\thooks = data[ type + "queueHooks" ],\n\t\t\t\ttimers = jQuery.timers,\n\t\t\t\tlength = queue ? queue.length : 0;\n\n\t\t\t// Enable finishing flag on private data\n\t\t\tdata.finish = true;\n\n\t\t\t// Empty the queue first\n\t\t\tjQuery.queue( this, type, [] );\n\n\t\t\tif ( hooks && hooks.stop ) {\n\t\t\t\thooks.stop.call( this, true );\n\t\t\t}\n\n\t\t\t// Look for any active animations, and finish them\n\t\t\tfor ( index = timers.length; index--; ) {\n\t\t\t\tif ( timers[ index ].elem === this && timers[ index ].queue === type ) {\n\t\t\t\t\ttimers[ index ].anim.stop( true );\n\t\t\t\t\ttimers.splice( index, 1 );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Look for any animations in the old queue and finish them\n\t\t\tfor ( index = 0; index < length; index++ ) {\n\t\t\t\tif ( queue[ index ] && queue[ index ].finish ) {\n\t\t\t\t\tqueue[ index ].finish.call( this );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Turn off finishing flag\n\t\t\tdelete data.finish;\n\t\t} );\n\t}\n} );\n\njQuery.each( [ "toggle", "show", "hide" ], function( _i, name ) {\n\tvar cssFn = jQuery.fn[ name ];\n\tjQuery.fn[ name ] = function( speed, easing, callback ) {\n\t\treturn speed == null || typeof speed === "boolean" ?\n\t\t\tcssFn.apply( this, arguments ) :\n\t\t\tthis.animate( genFx( name, true ), speed, easing, callback );\n\t};\n} );\n\n// Generate shortcuts for custom animations\njQuery.each( {\n\tslideDown: genFx( "show" ),\n\tslideUp: genFx( "hide" ),\n\tslideToggle: genFx( "toggle" ),\n\tfadeIn: { opacity: "show" },\n\tfadeOut: { opacity: "hide" },\n\tfadeToggle: { opacity: "toggle" }\n}, function( name, props ) {\n\tjQuery.fn[ name ] = function( speed, easing, callback ) {\n\t\treturn this.animate( props, speed, easing, callback );\n\t};\n} );\n\njQuery.timers = [];\njQuery.fx.tick = function() {\n\tvar timer,\n\t\ti = 0,\n\t\ttimers = jQuery.timers;\n\n\tfxNow = Date.now();\n\n\tfor ( ; i < timers.length; i++ ) {\n\t\ttimer = timers[ i ];\n\n\t\t// Run the timer and safely remove it when done (allowing for external removal)\n\t\tif ( !timer() && timers[ i ] === timer ) {\n\t\t\ttimers.splice( i--, 1 );\n\t\t}\n\t}\n\n\tif ( !timers.length ) {\n\t\tjQuery.fx.stop();\n\t}\n\tfxNow = undefined;\n};\n\njQuery.fx.timer = function( timer ) {\n\tjQuery.timers.push( timer );\n\tjQuery.fx.start();\n};\n\njQuery.fx.interval = 13;\njQuery.fx.start = function() {\n\tif ( inProgress ) {\n\t\treturn;\n\t}\n\n\tinProgress = true;\n\tschedule();\n};\n\njQuery.fx.stop = function() {\n\tinProgress = null;\n};\n\njQuery.fx.speeds = {\n\tslow: 600,\n\tfast: 200,\n\n\t// Default speed\n\t_default: 400\n};\n\n\n// Based off of the plugin by Clint Helfers, with permission.\njQuery.fn.delay = function( time, type ) {\n\ttime = jQuery.fx ? jQuery.fx.speeds[ time ] || time : time;\n\ttype = type || "fx";\n\n\treturn this.queue( type, function( next, hooks ) {\n\t\tvar timeout = window.setTimeout( next, time );\n\t\thooks.stop = function() {\n\t\t\twindow.clearTimeout( timeout );\n\t\t};\n\t} );\n};\n\n\n( function() {\n\tvar input = document.createElement( "input" ),\n\t\tselect = document.createElement( "select" ),\n\t\topt = select.appendChild( document.createElement( "option" ) );\n\n\tinput.type = "checkbox";\n\n\t// Support: Android <=4.3 only\n\t// Default value for a checkbox should be "on"\n\tsupport.checkOn = input.value !== "";\n\n\t// Support: IE <=11 only\n\t// Must access selectedIndex to make default options select\n\tsupport.optSelected = opt.selected;\n\n\t// Support: IE <=11 only\n\t// An input loses its value after becoming a radio\n\tinput = document.createElement( "input" );\n\tinput.value = "t";\n\tinput.type = "radio";\n\tsupport.radioValue = input.value === "t";\n} )();\n\n\nvar boolHook,\n\tattrHandle = jQuery.expr.attrHandle;\n\njQuery.fn.extend( {\n\tattr: function( name, value ) {\n\t\treturn access( this, jQuery.attr, name, value, arguments.length > 1 );\n\t},\n\n\tremoveAttr: function( name ) {\n\t\treturn this.each( function() {\n\t\t\tjQuery.removeAttr( this, name );\n\t\t} );\n\t}\n} );\n\njQuery.extend( {\n\tattr: function( elem, name, value ) {\n\t\tvar ret, hooks,\n\t\t\tnType = elem.nodeType;\n\n\t\t// Don\'t get/set attributes on text, comment and attribute nodes\n\t\tif ( nType === 3 || nType === 8 || nType === 2 ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Fallback to prop when attributes are not supported\n\t\tif ( typeof elem.getAttribute === "undefined" ) {\n\t\t\treturn jQuery.prop( elem, name, value );\n\t\t}\n\n\t\t// Attribute hooks are determined by the lowercase version\n\t\t// Grab necessary hook if one is defined\n\t\tif ( nType !== 1 || !jQuery.isXMLDoc( elem ) ) {\n\t\t\thooks = jQuery.attrHooks[ name.toLowerCase() ] ||\n\t\t\t\t( jQuery.expr.match.bool.test( name ) ? boolHook : undefined );\n\t\t}\n\n\t\tif ( value !== undefined ) {\n\t\t\tif ( value === null ) {\n\t\t\t\tjQuery.removeAttr( elem, name );\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif ( hooks && "set" in hooks &&\n\t\t\t\t( ret = hooks.set( elem, value, name ) ) !== undefined ) {\n\t\t\t\treturn ret;\n\t\t\t}\n\n\t\t\telem.setAttribute( name, value + "" );\n\t\t\treturn value;\n\t\t}\n\n\t\tif ( hooks && "get" in hooks && ( ret = hooks.get( elem, name ) ) !== null ) {\n\t\t\treturn ret;\n\t\t}\n\n\t\tret = jQuery.find.attr( elem, name );\n\n\t\t// Non-existent attributes return null, we normalize to undefined\n\t\treturn ret == null ? undefined : ret;\n\t},\n\n\tattrHooks: {\n\t\ttype: {\n\t\t\tset: function( elem, value ) {\n\t\t\t\tif ( !support.radioValue && value === "radio" &&\n\t\t\t\t\tnodeName( elem, "input" ) ) {\n\t\t\t\t\tvar val = elem.value;\n\t\t\t\t\telem.setAttribute( "type", value );\n\t\t\t\t\tif ( val ) {\n\t\t\t\t\t\telem.value = val;\n\t\t\t\t\t}\n\t\t\t\t\treturn value;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t},\n\n\tremoveAttr: function( elem, value ) {\n\t\tvar name,\n\t\t\ti = 0,\n\n\t\t\t// Attribute names can contain non-HTML whitespace characters\n\t\t\t// https://html.spec.whatwg.org/multipage/syntax.html#attributes-2\n\t\t\tattrNames = value && value.match( rnothtmlwhite );\n\n\t\tif ( attrNames && elem.nodeType === 1 ) {\n\t\t\twhile ( ( name = attrNames[ i++ ] ) ) {\n\t\t\t\telem.removeAttribute( name );\n\t\t\t}\n\t\t}\n\t}\n} );\n\n// Hooks for boolean attributes\nboolHook = {\n\tset: function( elem, value, name ) {\n\t\tif ( value === false ) {\n\n\t\t\t// Remove boolean attributes when set to false\n\t\t\tjQuery.removeAttr( elem, name );\n\t\t} else {\n\t\t\telem.setAttribute( name, name );\n\t\t}\n\t\treturn name;\n\t}\n};\n\njQuery.each( jQuery.expr.match.bool.source.match( /\\w+/g ), function( _i, name ) {\n\tvar getter = attrHandle[ name ] || jQuery.find.attr;\n\n\tattrHandle[ name ] = function( elem, name, isXML ) {\n\t\tvar ret, handle,\n\t\t\tlowercaseName = name.toLowerCase();\n\n\t\tif ( !isXML ) {\n\n\t\t\t// Avoid an infinite loop by temporarily removing this function from the getter\n\t\t\thandle = attrHandle[ lowercaseName ];\n\t\t\tattrHandle[ lowercaseName ] = ret;\n\t\t\tret = getter( elem, name, isXML ) != null ?\n\t\t\t\tlowercaseName :\n\t\t\t\tnull;\n\t\t\tattrHandle[ lowercaseName ] = handle;\n\t\t}\n\t\treturn ret;\n\t};\n} );\n\n\n\n\nvar rfocusable = /^(?:input|select|textarea|button)$/i,\n\trclickable = /^(?:a|area)$/i;\n\njQuery.fn.extend( {\n\tprop: function( name, value ) {\n\t\treturn access( this, jQuery.prop, name, value, arguments.length > 1 );\n\t},\n\n\tremoveProp: function( name ) {\n\t\treturn this.each( function() {\n\t\t\tdelete this[ jQuery.propFix[ name ] || name ];\n\t\t} );\n\t}\n} );\n\njQuery.extend( {\n\tprop: function( elem, name, value ) {\n\t\tvar ret, hooks,\n\t\t\tnType = elem.nodeType;\n\n\t\t// Don\'t get/set properties on text, comment and attribute nodes\n\t\tif ( nType === 3 || nType === 8 || nType === 2 ) {\n\t\t\treturn;\n\t\t}\n\n\t\tif ( nType !== 1 || !jQuery.isXMLDoc( elem ) ) {\n\n\t\t\t// Fix name and attach hooks\n\t\t\tname = jQuery.propFix[ name ] || name;\n\t\t\thooks = jQuery.propHooks[ name ];\n\t\t}\n\n\t\tif ( value !== undefined ) {\n\t\t\tif ( hooks && "set" in hooks &&\n\t\t\t\t( ret = hooks.set( elem, value, name ) ) !== undefined ) {\n\t\t\t\treturn ret;\n\t\t\t}\n\n\t\t\treturn ( elem[ name ] = value );\n\t\t}\n\n\t\tif ( hooks && "get" in hooks && ( ret = hooks.get( elem, name ) ) !== null ) {\n\t\t\treturn ret;\n\t\t}\n\n\t\treturn elem[ name ];\n\t},\n\n\tpropHooks: {\n\t\ttabIndex: {\n\t\t\tget: function( elem ) {\n\n\t\t\t\t// Support: IE <=9 - 11 only\n\t\t\t\t// elem.tabIndex doesn\'t always return the\n\t\t\t\t// correct value when it hasn\'t been explicitly set\n\t\t\t\t// Use proper attribute retrieval (trac-12072)\n\t\t\t\tvar tabindex = jQuery.find.attr( elem, "tabindex" );\n\n\t\t\t\tif ( tabindex ) {\n\t\t\t\t\treturn parseInt( tabindex, 10 );\n\t\t\t\t}\n\n\t\t\t\tif (\n\t\t\t\t\trfocusable.test( elem.nodeName ) ||\n\t\t\t\t\trclickable.test( elem.nodeName ) &&\n\t\t\t\t\telem.href\n\t\t\t\t) {\n\t\t\t\t\treturn 0;\n\t\t\t\t}\n\n\t\t\t\treturn -1;\n\t\t\t}\n\t\t}\n\t},\n\n\tpropFix: {\n\t\t"for": "htmlFor",\n\t\t"class": "className"\n\t}\n} );\n\n// Support: IE <=11 only\n// Accessing the selectedIndex property\n// forces the browser to respect setting selected\n// on the option\n// The getter ensures a default option is selected\n// when in an optgroup\n// eslint rule "no-unused-expressions" is disabled for this code\n// since it considers such accessions noop\nif ( !support.optSelected ) {\n\tjQuery.propHooks.selected = {\n\t\tget: function( elem ) {\n\n\t\t\t/* eslint no-unused-expressions: "off" */\n\n\t\t\tvar parent = elem.parentNode;\n\t\t\tif ( parent && parent.parentNode ) {\n\t\t\t\tparent.parentNode.selectedIndex;\n\t\t\t}\n\t\t\treturn null;\n\t\t},\n\t\tset: function( elem ) {\n\n\t\t\t/* eslint no-unused-expressions: "off" */\n\n\t\t\tvar parent = elem.parentNode;\n\t\t\tif ( parent ) {\n\t\t\t\tparent.selectedIndex;\n\n\t\t\t\tif ( parent.parentNode ) {\n\t\t\t\t\tparent.parentNode.selectedIndex;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t};\n}\n\njQuery.each( [\n\t"tabIndex",\n\t"readOnly",\n\t"maxLength",\n\t"cellSpacing",\n\t"cellPadding",\n\t"rowSpan",\n\t"colSpan",\n\t"useMap",\n\t"frameBorder",\n\t"contentEditable"\n], function() {\n\tjQuery.propFix[ this.toLowerCase() ] = this;\n} );\n\n\n\n\n\t// Strip and collapse whitespace according to HTML spec\n\t// https://infra.spec.whatwg.org/#strip-and-collapse-ascii-whitespace\n\tfunction stripAndCollapse( value ) {\n\t\tvar tokens = value.match( rnothtmlwhite ) || [];\n\t\treturn tokens.join( " " );\n\t}\n\n\nfunction getClass( elem ) {\n\treturn elem.getAttribute && elem.getAttribute( "class" ) || "";\n}\n\nfunction classesToArray( value ) {\n\tif ( Array.isArray( value ) ) {\n\t\treturn value;\n\t}\n\tif ( typeof value === "string" ) {\n\t\treturn value.match( rnothtmlwhite ) || [];\n\t}\n\treturn [];\n}\n\njQuery.fn.extend( {\n\taddClass: function( value ) {\n\t\tvar classNames, cur, curValue, className, i, finalValue;\n\n\t\tif ( isFunction( value ) ) {\n\t\t\treturn this.each( function( j ) {\n\t\t\t\tjQuery( this ).addClass( value.call( this, j, getClass( this ) ) );\n\t\t\t} );\n\t\t}\n\n\t\tclassNames = classesToArray( value );\n\n\t\tif ( classNames.length ) {\n\t\t\treturn this.each( function() {\n\t\t\t\tcurValue = getClass( this );\n\t\t\t\tcur = this.nodeType === 1 && ( " " + stripAndCollapse( curValue ) + " " );\n\n\t\t\t\tif ( cur ) {\n\t\t\t\t\tfor ( i = 0; i < classNames.length; i++ ) {\n\t\t\t\t\t\tclassName = classNames[ i ];\n\t\t\t\t\t\tif ( cur.indexOf( " " + className + " " ) < 0 ) {\n\t\t\t\t\t\t\tcur += className + " ";\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// Only assign if different to avoid unneeded rendering.\n\t\t\t\t\tfinalValue = stripAndCollapse( cur );\n\t\t\t\t\tif ( curValue !== finalValue ) {\n\t\t\t\t\t\tthis.setAttribute( "class", finalValue );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} );\n\t\t}\n\n\t\treturn this;\n\t},\n\n\tremoveClass: function( value ) {\n\t\tvar classNames, cur, curValue, className, i, finalValue;\n\n\t\tif ( isFunction( value ) ) {\n\t\t\treturn this.each( function( j ) {\n\t\t\t\tjQuery( this ).removeClass( value.call( this, j, getClass( this ) ) );\n\t\t\t} );\n\t\t}\n\n\t\tif ( !arguments.length ) {\n\t\t\treturn this.attr( "class", "" );\n\t\t}\n\n\t\tclassNames = classesToArray( value );\n\n\t\tif ( classNames.length ) {\n\t\t\treturn this.each( function() {\n\t\t\t\tcurValue = getClass( this );\n\n\t\t\t\t// This expression is here for better compressibility (see addClass)\n\t\t\t\tcur = this.nodeType === 1 && ( " " + stripAndCollapse( curValue ) + " " );\n\n\t\t\t\tif ( cur ) {\n\t\t\t\t\tfor ( i = 0; i < classNames.length; i++ ) {\n\t\t\t\t\t\tclassName = classNames[ i ];\n\n\t\t\t\t\t\t// Remove *all* instances\n\t\t\t\t\t\twhile ( cur.indexOf( " " + className + " " ) > -1 ) {\n\t\t\t\t\t\t\tcur = cur.replace( " " + className + " ", " " );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// Only assign if different to avoid unneeded rendering.\n\t\t\t\t\tfinalValue = stripAndCollapse( cur );\n\t\t\t\t\tif ( curValue !== finalValue ) {\n\t\t\t\t\t\tthis.setAttribute( "class", finalValue );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} );\n\t\t}\n\n\t\treturn this;\n\t},\n\n\ttoggleClass: function( value, stateVal ) {\n\t\tvar classNames, className, i, self,\n\t\t\ttype = typeof value,\n\t\t\tisValidValue = type === "string" || Array.isArray( value );\n\n\t\tif ( isFunction( value ) ) {\n\t\t\treturn this.each( function( i ) {\n\t\t\t\tjQuery( this ).toggleClass(\n\t\t\t\t\tvalue.call( this, i, getClass( this ), stateVal ),\n\t\t\t\t\tstateVal\n\t\t\t\t);\n\t\t\t} );\n\t\t}\n\n\t\tif ( typeof stateVal === "boolean" && isValidValue ) {\n\t\t\treturn stateVal ? this.addClass( value ) : this.removeClass( value );\n\t\t}\n\n\t\tclassNames = classesToArray( value );\n\n\t\treturn this.each( function() {\n\t\t\tif ( isValidValue ) {\n\n\t\t\t\t// Toggle individual class names\n\t\t\t\tself = jQuery( this );\n\n\t\t\t\tfor ( i = 0; i < classNames.length; i++ ) {\n\t\t\t\t\tclassName = classNames[ i ];\n\n\t\t\t\t\t// Check each className given, space separated list\n\t\t\t\t\tif ( self.hasClass( className ) ) {\n\t\t\t\t\t\tself.removeClass( className );\n\t\t\t\t\t} else {\n\t\t\t\t\t\tself.addClass( className );\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t// Toggle whole class name\n\t\t\t} else if ( value === undefined || type === "boolean" ) {\n\t\t\t\tclassName = getClass( this );\n\t\t\t\tif ( className ) {\n\n\t\t\t\t\t// Store className if set\n\t\t\t\t\tdataPriv.set( this, "__className__", className );\n\t\t\t\t}\n\n\t\t\t\t// If the element has a class name or if we\'re passed `false`,\n\t\t\t\t// then remove the whole classname (if there was one, the above saved it).\n\t\t\t\t// Otherwise bring back whatever was previously saved (if anything),\n\t\t\t\t// falling back to the empty string if nothing was stored.\n\t\t\t\tif ( this.setAttribute ) {\n\t\t\t\t\tthis.setAttribute( "class",\n\t\t\t\t\t\tclassName || value === false ?\n\t\t\t\t\t\t\t"" :\n\t\t\t\t\t\t\tdataPriv.get( this, "__className__" ) || ""\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t}\n\t\t} );\n\t},\n\n\thasClass: function( selector ) {\n\t\tvar className, elem,\n\t\t\ti = 0;\n\n\t\tclassName = " " + selector + " ";\n\t\twhile ( ( elem = this[ i++ ] ) ) {\n\t\t\tif ( elem.nodeType === 1 &&\n\t\t\t\t( " " + stripAndCollapse( getClass( elem ) ) + " " ).indexOf( className ) > -1 ) {\n\t\t\t\treturn true;\n\t\t\t}\n\t\t}\n\n\t\treturn false;\n\t}\n} );\n\n\n\n\nvar rreturn = /\\r/g;\n\njQuery.fn.extend( {\n\tval: function( value ) {\n\t\tvar hooks, ret, valueIsFunction,\n\t\t\telem = this[ 0 ];\n\n\t\tif ( !arguments.length ) {\n\t\t\tif ( elem ) {\n\t\t\t\thooks = jQuery.valHooks[ elem.type ] ||\n\t\t\t\t\tjQuery.valHooks[ elem.nodeName.toLowerCase() ];\n\n\t\t\t\tif ( hooks &&\n\t\t\t\t\t"get" in hooks &&\n\t\t\t\t\t( ret = hooks.get( elem, "value" ) ) !== undefined\n\t\t\t\t) {\n\t\t\t\t\treturn ret;\n\t\t\t\t}\n\n\t\t\t\tret = elem.value;\n\n\t\t\t\t// Handle most common string cases\n\t\t\t\tif ( typeof ret === "string" ) {\n\t\t\t\t\treturn ret.replace( rreturn, "" );\n\t\t\t\t}\n\n\t\t\t\t// Handle cases where value is null/undef or number\n\t\t\t\treturn ret == null ? "" : ret;\n\t\t\t}\n\n\t\t\treturn;\n\t\t}\n\n\t\tvalueIsFunction = isFunction( value );\n\n\t\treturn this.each( function( i ) {\n\t\t\tvar val;\n\n\t\t\tif ( this.nodeType !== 1 ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif ( valueIsFunction ) {\n\t\t\t\tval = value.call( this, i, jQuery( this ).val() );\n\t\t\t} else {\n\t\t\t\tval = value;\n\t\t\t}\n\n\t\t\t// Treat null/undefined as ""; convert numbers to string\n\t\t\tif ( val == null ) {\n\t\t\t\tval = "";\n\n\t\t\t} else if ( typeof val === "number" ) {\n\t\t\t\tval += "";\n\n\t\t\t} else if ( Array.isArray( val ) ) {\n\t\t\t\tval = jQuery.map( val, function( value ) {\n\t\t\t\t\treturn value == null ? "" : value + "";\n\t\t\t\t} );\n\t\t\t}\n\n\t\t\thooks = jQuery.valHooks[ this.type ] || jQuery.valHooks[ this.nodeName.toLowerCase() ];\n\n\t\t\t// If set returns undefined, fall back to normal setting\n\t\t\tif ( !hooks || !( "set" in hooks ) || hooks.set( this, val, "value" ) === undefined ) {\n\t\t\t\tthis.value = val;\n\t\t\t}\n\t\t} );\n\t}\n} );\n\njQuery.extend( {\n\tvalHooks: {\n\t\toption: {\n\t\t\tget: function( elem ) {\n\n\t\t\t\tvar val = jQuery.find.attr( elem, "value" );\n\t\t\t\treturn val != null ?\n\t\t\t\t\tval :\n\n\t\t\t\t\t// Support: IE <=10 - 11 only\n\t\t\t\t\t// option.text throws exceptions (trac-14686, trac-14858)\n\t\t\t\t\t// Strip and collapse whitespace\n\t\t\t\t\t// https://html.spec.whatwg.org/#strip-and-collapse-whitespace\n\t\t\t\t\tstripAndCollapse( jQuery.text( elem ) );\n\t\t\t}\n\t\t},\n\t\tselect: {\n\t\t\tget: function( elem ) {\n\t\t\t\tvar value, option, i,\n\t\t\t\t\toptions = elem.options,\n\t\t\t\t\tindex = elem.selectedIndex,\n\t\t\t\t\tone = elem.type === "select-one",\n\t\t\t\t\tvalues = one ? null : [],\n\t\t\t\t\tmax = one ? index + 1 : options.length;\n\n\t\t\t\tif ( index < 0 ) {\n\t\t\t\t\ti = max;\n\n\t\t\t\t} else {\n\t\t\t\t\ti = one ? index : 0;\n\t\t\t\t}\n\n\t\t\t\t// Loop through all the selected options\n\t\t\t\tfor ( ; i < max; i++ ) {\n\t\t\t\t\toption = options[ i ];\n\n\t\t\t\t\t// Support: IE <=9 only\n\t\t\t\t\t// IE8-9 doesn\'t update selected after form reset (trac-2551)\n\t\t\t\t\tif ( ( option.selected || i === index ) &&\n\n\t\t\t\t\t\t\t// Don\'t return options that are disabled or in a disabled optgroup\n\t\t\t\t\t\t\t!option.disabled &&\n\t\t\t\t\t\t\t( !option.parentNode.disabled ||\n\t\t\t\t\t\t\t\t!nodeName( option.parentNode, "optgroup" ) ) ) {\n\n\t\t\t\t\t\t// Get the specific value for the option\n\t\t\t\t\t\tvalue = jQuery( option ).val();\n\n\t\t\t\t\t\t// We don\'t need an array for one selects\n\t\t\t\t\t\tif ( one ) {\n\t\t\t\t\t\t\treturn value;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Multi-Selects return an array\n\t\t\t\t\t\tvalues.push( value );\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\treturn values;\n\t\t\t},\n\n\t\t\tset: function( elem, value ) {\n\t\t\t\tvar optionSet, option,\n\t\t\t\t\toptions = elem.options,\n\t\t\t\t\tvalues = jQuery.makeArray( value ),\n\t\t\t\t\ti = options.length;\n\n\t\t\t\twhile ( i-- ) {\n\t\t\t\t\toption = options[ i ];\n\n\t\t\t\t\t/* eslint-disable no-cond-assign */\n\n\t\t\t\t\tif ( option.selected =\n\t\t\t\t\t\tjQuery.inArray( jQuery.valHooks.option.get( option ), values ) > -1\n\t\t\t\t\t) {\n\t\t\t\t\t\toptionSet = true;\n\t\t\t\t\t}\n\n\t\t\t\t\t/* eslint-enable no-cond-assign */\n\t\t\t\t}\n\n\t\t\t\t// Force browsers to behave consistently when non-matching value is set\n\t\t\t\tif ( !optionSet ) {\n\t\t\t\t\telem.selectedIndex = -1;\n\t\t\t\t}\n\t\t\t\treturn values;\n\t\t\t}\n\t\t}\n\t}\n} );\n\n// Radios and checkboxes getter/setter\njQuery.each( [ "radio", "checkbox" ], function() {\n\tjQuery.valHooks[ this ] = {\n\t\tset: function( elem, value ) {\n\t\t\tif ( Array.isArray( value ) ) {\n\t\t\t\treturn ( elem.checked = jQuery.inArray( jQuery( elem ).val(), value ) > -1 );\n\t\t\t}\n\t\t}\n\t};\n\tif ( !support.checkOn ) {\n\t\tjQuery.valHooks[ this ].get = function( elem ) {\n\t\t\treturn elem.getAttribute( "value" ) === null ? "on" : elem.value;\n\t\t};\n\t}\n} );\n\n\n\n\n// Return jQuery for attributes-only inclusion\nvar location = window.location;\n\nvar nonce = { guid: Date.now() };\n\nvar rquery = ( /\\?/ );\n\n\n\n// Cross-browser xml parsing\njQuery.parseXML = function( data ) {\n\tvar xml, parserErrorElem;\n\tif ( !data || typeof data !== "string" ) {\n\t\treturn null;\n\t}\n\n\t// Support: IE 9 - 11 only\n\t// IE throws on parseFromString with invalid input.\n\ttry {\n\t\txml = ( new window.DOMParser() ).parseFromString( data, "text/xml" );\n\t} catch ( e ) {}\n\n\tparserErrorElem = xml && xml.getElementsByTagName( "parsererror" )[ 0 ];\n\tif ( !xml || parserErrorElem ) {\n\t\tjQuery.error( "Invalid XML: " + (\n\t\t\tparserErrorElem ?\n\t\t\t\tjQuery.map( parserErrorElem.childNodes, function( el ) {\n\t\t\t\t\treturn el.textContent;\n\t\t\t\t} ).join( "\\n" ) :\n\t\t\t\tdata\n\t\t) );\n\t}\n\treturn xml;\n};\n\n\nvar rfocusMorph = /^(?:focusinfocus|focusoutblur)$/,\n\tstopPropagationCallback = function( e ) {\n\t\te.stopPropagation();\n\t};\n\njQuery.extend( jQuery.event, {\n\n\ttrigger: function( event, data, elem, onlyHandlers ) {\n\n\t\tvar i, cur, tmp, bubbleType, ontype, handle, special, lastElement,\n\t\t\teventPath = [ elem || document ],\n\t\t\ttype = hasOwn.call( event, "type" ) ? event.type : event,\n\t\t\tnamespaces = hasOwn.call( event, "namespace" ) ? event.namespace.split( "." ) : [];\n\n\t\tcur = lastElement = tmp = elem = elem || document;\n\n\t\t// Don\'t do events on text and comment nodes\n\t\tif ( elem.nodeType === 3 || elem.nodeType === 8 ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// focus/blur morphs to focusin/out; ensure we\'re not firing them right now\n\t\tif ( rfocusMorph.test( type + jQuery.event.triggered ) ) {\n\t\t\treturn;\n\t\t}\n\n\t\tif ( type.indexOf( "." ) > -1 ) {\n\n\t\t\t// Namespaced trigger; create a regexp to match event type in handle()\n\t\t\tnamespaces = type.split( "." );\n\t\t\ttype = namespaces.shift();\n\t\t\tnamespaces.sort();\n\t\t}\n\t\tontype = type.indexOf( ":" ) < 0 && "on" + type;\n\n\t\t// Caller can pass in a jQuery.Event object, Object, or just an event type string\n\t\tevent = event[ jQuery.expando ] ?\n\t\t\tevent :\n\t\t\tnew jQuery.Event( type, typeof event === "object" && event );\n\n\t\t// Trigger bitmask: & 1 for native handlers; & 2 for jQuery (always true)\n\t\tevent.isTrigger = onlyHandlers ? 2 : 3;\n\t\tevent.namespace = namespaces.join( "." );\n\t\tevent.rnamespace = event.namespace ?\n\t\t\tnew RegExp( "(^|\\\\.)" + namespaces.join( "\\\\.(?:.*\\\\.|)" ) + "(\\\\.|$)" ) :\n\t\t\tnull;\n\n\t\t// Clean up the event in case it is being reused\n\t\tevent.result = undefined;\n\t\tif ( !event.target ) {\n\t\t\tevent.target = elem;\n\t\t}\n\n\t\t// Clone any incoming data and prepend the event, creating the handler arg list\n\t\tdata = data == null ?\n\t\t\t[ event ] :\n\t\t\tjQuery.makeArray( data, [ event ] );\n\n\t\t// Allow special events to draw outside the lines\n\t\tspecial = jQuery.event.special[ type ] || {};\n\t\tif ( !onlyHandlers && special.trigger && special.trigger.apply( elem, data ) === false ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Determine event propagation path in advance, per W3C events spec (trac-9951)\n\t\t// Bubble up to document, then to window; watch for a global ownerDocument var (trac-9724)\n\t\tif ( !onlyHandlers && !special.noBubble && !isWindow( elem ) ) {\n\n\t\t\tbubbleType = special.delegateType || type;\n\t\t\tif ( !rfocusMorph.test( bubbleType + type ) ) {\n\t\t\t\tcur = cur.parentNode;\n\t\t\t}\n\t\t\tfor ( ; cur; cur = cur.parentNode ) {\n\t\t\t\teventPath.push( cur );\n\t\t\t\ttmp = cur;\n\t\t\t}\n\n\t\t\t// Only add window if we got to document (e.g., not plain obj or detached DOM)\n\t\t\tif ( tmp === ( elem.ownerDocument || document ) ) {\n\t\t\t\teventPath.push( tmp.defaultView || tmp.parentWindow || window );\n\t\t\t}\n\t\t}\n\n\t\t// Fire handlers on the event path\n\t\ti = 0;\n\t\twhile ( ( cur = eventPath[ i++ ] ) && !event.isPropagationStopped() ) {\n\t\t\tlastElement = cur;\n\t\t\tevent.type = i > 1 ?\n\t\t\t\tbubbleType :\n\t\t\t\tspecial.bindType || type;\n\n\t\t\t// jQuery handler\n\t\t\thandle = ( dataPriv.get( cur, "events" ) || Object.create( null ) )[ event.type ] &&\n\t\t\t\tdataPriv.get( cur, "handle" );\n\t\t\tif ( handle ) {\n\t\t\t\thandle.apply( cur, data );\n\t\t\t}\n\n\t\t\t// Native handler\n\t\t\thandle = ontype && cur[ ontype ];\n\t\t\tif ( handle && handle.apply && acceptData( cur ) ) {\n\t\t\t\tevent.result = handle.apply( cur, data );\n\t\t\t\tif ( event.result === false ) {\n\t\t\t\t\tevent.preventDefault();\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tevent.type = type;\n\n\t\t// If nobody prevented the default action, do it now\n\t\tif ( !onlyHandlers && !event.isDefaultPrevented() ) {\n\n\t\t\tif ( ( !special._default ||\n\t\t\t\tspecial._default.apply( eventPath.pop(), data ) === false ) &&\n\t\t\t\tacceptData( elem ) ) {\n\n\t\t\t\t// Call a native DOM method on the target with the same name as the event.\n\t\t\t\t// Don\'t do default actions on window, that\'s where global variables be (trac-6170)\n\t\t\t\tif ( ontype && isFunction( elem[ type ] ) && !isWindow( elem ) ) {\n\n\t\t\t\t\t// Don\'t re-trigger an onFOO event when we call its FOO() method\n\t\t\t\t\ttmp = elem[ ontype ];\n\n\t\t\t\t\tif ( tmp ) {\n\t\t\t\t\t\telem[ ontype ] = null;\n\t\t\t\t\t}\n\n\t\t\t\t\t// Prevent re-triggering of the same event, since we already bubbled it above\n\t\t\t\t\tjQuery.event.triggered = type;\n\n\t\t\t\t\tif ( event.isPropagationStopped() ) {\n\t\t\t\t\t\tlastElement.addEventListener( type, stopPropagationCallback );\n\t\t\t\t\t}\n\n\t\t\t\t\telem[ type ]();\n\n\t\t\t\t\tif ( event.isPropagationStopped() ) {\n\t\t\t\t\t\tlastElement.removeEventListener( type, stopPropagationCallback );\n\t\t\t\t\t}\n\n\t\t\t\t\tjQuery.event.triggered = undefined;\n\n\t\t\t\t\tif ( tmp ) {\n\t\t\t\t\t\telem[ ontype ] = tmp;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn event.result;\n\t},\n\n\t// Piggyback on a donor event to simulate a different one\n\t// Used only for `focus(in | out)` events\n\tsimulate: function( type, elem, event ) {\n\t\tvar e = jQuery.extend(\n\t\t\tnew jQuery.Event(),\n\t\t\tevent,\n\t\t\t{\n\t\t\t\ttype: type,\n\t\t\t\tisSimulated: true\n\t\t\t}\n\t\t);\n\n\t\tjQuery.event.trigger( e, null, elem );\n\t}\n\n} );\n\njQuery.fn.extend( {\n\n\ttrigger: function( type, data ) {\n\t\treturn this.each( function() {\n\t\t\tjQuery.event.trigger( type, data, this );\n\t\t} );\n\t},\n\ttriggerHandler: function( type, data ) {\n\t\tvar elem = this[ 0 ];\n\t\tif ( elem ) {\n\t\t\treturn jQuery.event.trigger( type, data, elem, true );\n\t\t}\n\t}\n} );\n\n\nvar\n\trbracket = /\\[\\]$/,\n\trCRLF = /\\r?\\n/g,\n\trsubmitterTypes = /^(?:submit|button|image|reset|file)$/i,\n\trsubmittable = /^(?:input|select|textarea|keygen)/i;\n\nfunction buildParams( prefix, obj, traditional, add ) {\n\tvar name;\n\n\tif ( Array.isArray( obj ) ) {\n\n\t\t// Serialize array item.\n\t\tjQuery.each( obj, function( i, v ) {\n\t\t\tif ( traditional || rbracket.test( prefix ) ) {\n\n\t\t\t\t// Treat each array item as a scalar.\n\t\t\t\tadd( prefix, v );\n\n\t\t\t} else {\n\n\t\t\t\t// Item is non-scalar (array or object), encode its numeric index.\n\t\t\t\tbuildParams(\n\t\t\t\t\tprefix + "[" + ( typeof v === "object" && v != null ? i : "" ) + "]",\n\t\t\t\t\tv,\n\t\t\t\t\ttraditional,\n\t\t\t\t\tadd\n\t\t\t\t);\n\t\t\t}\n\t\t} );\n\n\t} else if ( !traditional && toType( obj ) === "object" ) {\n\n\t\t// Serialize object item.\n\t\tfor ( name in obj ) {\n\t\t\tbuildParams( prefix + "[" + name + "]", obj[ name ], traditional, add );\n\t\t}\n\n\t} else {\n\n\t\t// Serialize scalar item.\n\t\tadd( prefix, obj );\n\t}\n}\n\n// Serialize an array of form elements or a set of\n// key/values into a query string\njQuery.param = function( a, traditional ) {\n\tvar prefix,\n\t\ts = [],\n\t\tadd = function( key, valueOrFunction ) {\n\n\t\t\t// If value is a function, invoke it and use its return value\n\t\t\tvar value = isFunction( valueOrFunction ) ?\n\t\t\t\tvalueOrFunction() :\n\t\t\t\tvalueOrFunction;\n\n\t\t\ts[ s.length ] = encodeURIComponent( key ) + "=" +\n\t\t\t\tencodeURIComponent( value == null ? "" : value );\n\t\t};\n\n\tif ( a == null ) {\n\t\treturn "";\n\t}\n\n\t// If an array was passed in, assume that it is an array of form elements.\n\tif ( Array.isArray( a ) || ( a.jquery && !jQuery.isPlainObject( a ) ) ) {\n\n\t\t// Serialize the form elements\n\t\tjQuery.each( a, function() {\n\t\t\tadd( this.name, this.value );\n\t\t} );\n\n\t} else {\n\n\t\t// If traditional, encode the "old" way (the way 1.3.2 or older\n\t\t// did it), otherwise encode params recursively.\n\t\tfor ( prefix in a ) {\n\t\t\tbuildParams( prefix, a[ prefix ], traditional, add );\n\t\t}\n\t}\n\n\t// Return the resulting serialization\n\treturn s.join( "&" );\n};\n\njQuery.fn.extend( {\n\tserialize: function() {\n\t\treturn jQuery.param( this.serializeArray() );\n\t},\n\tserializeArray: function() {\n\t\treturn this.map( function() {\n\n\t\t\t// Can add propHook for "elements" to filter or add form elements\n\t\t\tvar elements = jQuery.prop( this, "elements" );\n\t\t\treturn elements ? jQuery.makeArray( elements ) : this;\n\t\t} ).filter( function() {\n\t\t\tvar type = this.type;\n\n\t\t\t// Use .is( ":disabled" ) so that fieldset[disabled] works\n\t\t\treturn this.name && !jQuery( this ).is( ":disabled" ) &&\n\t\t\t\trsubmittable.test( this.nodeName ) && !rsubmitterTypes.test( type ) &&\n\t\t\t\t( this.checked || !rcheckableType.test( type ) );\n\t\t} ).map( function( _i, elem ) {\n\t\t\tvar val = jQuery( this ).val();\n\n\t\t\tif ( val == null ) {\n\t\t\t\treturn null;\n\t\t\t}\n\n\t\t\tif ( Array.isArray( val ) ) {\n\t\t\t\treturn jQuery.map( val, function( val ) {\n\t\t\t\t\treturn { name: elem.name, value: val.replace( rCRLF, "\\r\\n" ) };\n\t\t\t\t} );\n\t\t\t}\n\n\t\t\treturn { name: elem.name, value: val.replace( rCRLF, "\\r\\n" ) };\n\t\t} ).get();\n\t}\n} );\n\n\nvar\n\tr20 = /%20/g,\n\trhash = /#.*$/,\n\trantiCache = /([?&])_=[^&]*/,\n\trheaders = /^(.*?):[ \\t]*([^\\r\\n]*)$/mg,\n\n\t// trac-7653, trac-8125, trac-8152: local protocol detection\n\trlocalProtocol = /^(?:about|app|app-storage|.+-extension|file|res|widget):$/,\n\trnoContent = /^(?:GET|HEAD)$/,\n\trprotocol = /^\\/\\//,\n\n\t/* Prefilters\n\t * 1) They are useful to introduce custom dataTypes (see ajax/jsonp.js for an example)\n\t * 2) These are called:\n\t * - BEFORE asking for a transport\n\t * - AFTER param serialization (s.data is a string if s.processData is true)\n\t * 3) key is the dataType\n\t * 4) the catchall symbol "*" can be used\n\t * 5) execution will start with transport dataType and THEN continue down to "*" if needed\n\t */\n\tprefilters = {},\n\n\t/* Transports bindings\n\t * 1) key is the dataType\n\t * 2) the catchall symbol "*" can be used\n\t * 3) selection will start with transport dataType and THEN go to "*" if needed\n\t */\n\ttransports = {},\n\n\t// Avoid comment-prolog char sequence (trac-10098); must appease lint and evade compression\n\tallTypes = "*/".concat( "*" ),\n\n\t// Anchor tag for parsing the document origin\n\toriginAnchor = document.createElement( "a" );\n\noriginAnchor.href = location.href;\n\n// Base "constructor" for jQuery.ajaxPrefilter and jQuery.ajaxTransport\nfunction addToPrefiltersOrTransports( structure ) {\n\n\t// dataTypeExpression is optional and defaults to "*"\n\treturn function( dataTypeExpression, func ) {\n\n\t\tif ( typeof dataTypeExpression !== "string" ) {\n\t\t\tfunc = dataTypeExpression;\n\t\t\tdataTypeExpression = "*";\n\t\t}\n\n\t\tvar dataType,\n\t\t\ti = 0,\n\t\t\tdataTypes = dataTypeExpression.toLowerCase().match( rnothtmlwhite ) || [];\n\n\t\tif ( isFunction( func ) ) {\n\n\t\t\t// For each dataType in the dataTypeExpression\n\t\t\twhile ( ( dataType = dataTypes[ i++ ] ) ) {\n\n\t\t\t\t// Prepend if requested\n\t\t\t\tif ( dataType[ 0 ] === "+" ) {\n\t\t\t\t\tdataType = dataType.slice( 1 ) || "*";\n\t\t\t\t\t( structure[ dataType ] = structure[ dataType ] || [] ).unshift( func );\n\n\t\t\t\t// Otherwise append\n\t\t\t\t} else {\n\t\t\t\t\t( structure[ dataType ] = structure[ dataType ] || [] ).push( func );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t};\n}\n\n// Base inspection function for prefilters and transports\nfunction inspectPrefiltersOrTransports( structure, options, originalOptions, jqXHR ) {\n\n\tvar inspected = {},\n\t\tseekingTransport = ( structure === transports );\n\n\tfunction inspect( dataType ) {\n\t\tvar selected;\n\t\tinspected[ dataType ] = true;\n\t\tjQuery.each( structure[ dataType ] || [], function( _, prefilterOrFactory ) {\n\t\t\tvar dataTypeOrTransport = prefilterOrFactory( options, originalOptions, jqXHR );\n\t\t\tif ( typeof dataTypeOrTransport === "string" &&\n\t\t\t\t!seekingTransport && !inspected[ dataTypeOrTransport ] ) {\n\n\t\t\t\toptions.dataTypes.unshift( dataTypeOrTransport );\n\t\t\t\tinspect( dataTypeOrTransport );\n\t\t\t\treturn false;\n\t\t\t} else if ( seekingTransport ) {\n\t\t\t\treturn !( selected = dataTypeOrTransport );\n\t\t\t}\n\t\t} );\n\t\treturn selected;\n\t}\n\n\treturn inspect( options.dataTypes[ 0 ] ) || !inspected[ "*" ] && inspect( "*" );\n}\n\n// A special extend for ajax options\n// that takes "flat" options (not to be deep extended)\n// Fixes trac-9887\nfunction ajaxExtend( target, src ) {\n\tvar key, deep,\n\t\tflatOptions = jQuery.ajaxSettings.flatOptions || {};\n\n\tfor ( key in src ) {\n\t\tif ( src[ key ] !== undefined ) {\n\t\t\t( flatOptions[ key ] ? target : ( deep || ( deep = {} ) ) )[ key ] = src[ key ];\n\t\t}\n\t}\n\tif ( deep ) {\n\t\tjQuery.extend( true, target, deep );\n\t}\n\n\treturn target;\n}\n\n/* Handles responses to an ajax request:\n * - finds the right dataType (mediates between content-type and expected dataType)\n * - returns the corresponding response\n */\nfunction ajaxHandleResponses( s, jqXHR, responses ) {\n\n\tvar ct, type, finalDataType, firstDataType,\n\t\tcontents = s.contents,\n\t\tdataTypes = s.dataTypes;\n\n\t// Remove auto dataType and get content-type in the process\n\twhile ( dataTypes[ 0 ] === "*" ) {\n\t\tdataTypes.shift();\n\t\tif ( ct === undefined ) {\n\t\t\tct = s.mimeType || jqXHR.getResponseHeader( "Content-Type" );\n\t\t}\n\t}\n\n\t// Check if we\'re dealing with a known content-type\n\tif ( ct ) {\n\t\tfor ( type in contents ) {\n\t\t\tif ( contents[ type ] && contents[ type ].test( ct ) ) {\n\t\t\t\tdataTypes.unshift( type );\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t}\n\n\t// Check to see if we have a response for the expected dataType\n\tif ( dataTypes[ 0 ] in responses ) {\n\t\tfinalDataType = dataTypes[ 0 ];\n\t} else {\n\n\t\t// Try convertible dataTypes\n\t\tfor ( type in responses ) {\n\t\t\tif ( !dataTypes[ 0 ] || s.converters[ type + " " + dataTypes[ 0 ] ] ) {\n\t\t\t\tfinalDataType = type;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tif ( !firstDataType ) {\n\t\t\t\tfirstDataType = type;\n\t\t\t}\n\t\t}\n\n\t\t// Or just use first one\n\t\tfinalDataType = finalDataType || firstDataType;\n\t}\n\n\t// If we found a dataType\n\t// We add the dataType to the list if needed\n\t// and return the corresponding response\n\tif ( finalDataType ) {\n\t\tif ( finalDataType !== dataTypes[ 0 ] ) {\n\t\t\tdataTypes.unshift( finalDataType );\n\t\t}\n\t\treturn responses[ finalDataType ];\n\t}\n}\n\n/* Chain conversions given the request and the original response\n * Also sets the responseXXX fields on the jqXHR instance\n */\nfunction ajaxConvert( s, response, jqXHR, isSuccess ) {\n\tvar conv2, current, conv, tmp, prev,\n\t\tconverters = {},\n\n\t\t// Work with a copy of dataTypes in case we need to modify it for conversion\n\t\tdataTypes = s.dataTypes.slice();\n\n\t// Create converters map with lowercased keys\n\tif ( dataTypes[ 1 ] ) {\n\t\tfor ( conv in s.converters ) {\n\t\t\tconverters[ conv.toLowerCase() ] = s.converters[ conv ];\n\t\t}\n\t}\n\n\tcurrent = dataTypes.shift();\n\n\t// Convert to each sequential dataType\n\twhile ( current ) {\n\n\t\tif ( s.responseFields[ current ] ) {\n\t\t\tjqXHR[ s.responseFields[ current ] ] = response;\n\t\t}\n\n\t\t// Apply the dataFilter if provided\n\t\tif ( !prev && isSuccess && s.dataFilter ) {\n\t\t\tresponse = s.dataFilter( response, s.dataType );\n\t\t}\n\n\t\tprev = current;\n\t\tcurrent = dataTypes.shift();\n\n\t\tif ( current ) {\n\n\t\t\t// There\'s only work to do if current dataType is non-auto\n\t\t\tif ( current === "*" ) {\n\n\t\t\t\tcurrent = prev;\n\n\t\t\t// Convert response if prev dataType is non-auto and differs from current\n\t\t\t} else if ( prev !== "*" && prev !== current ) {\n\n\t\t\t\t// Seek a direct converter\n\t\t\t\tconv = converters[ prev + " " + current ] || converters[ "* " + current ];\n\n\t\t\t\t// If none found, seek a pair\n\t\t\t\tif ( !conv ) {\n\t\t\t\t\tfor ( conv2 in converters ) {\n\n\t\t\t\t\t\t// If conv2 outputs current\n\t\t\t\t\t\ttmp = conv2.split( " " );\n\t\t\t\t\t\tif ( tmp[ 1 ] === current ) {\n\n\t\t\t\t\t\t\t// If prev can be converted to accepted input\n\t\t\t\t\t\t\tconv = converters[ prev + " " + tmp[ 0 ] ] ||\n\t\t\t\t\t\t\t\tconverters[ "* " + tmp[ 0 ] ];\n\t\t\t\t\t\t\tif ( conv ) {\n\n\t\t\t\t\t\t\t\t// Condense equivalence converters\n\t\t\t\t\t\t\t\tif ( conv === true ) {\n\t\t\t\t\t\t\t\t\tconv = converters[ conv2 ];\n\n\t\t\t\t\t\t\t\t// Otherwise, insert the intermediate dataType\n\t\t\t\t\t\t\t\t} else if ( converters[ conv2 ] !== true ) {\n\t\t\t\t\t\t\t\t\tcurrent = tmp[ 0 ];\n\t\t\t\t\t\t\t\t\tdataTypes.unshift( tmp[ 1 ] );\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Apply converter (if not an equivalence)\n\t\t\t\tif ( conv !== true ) {\n\n\t\t\t\t\t// Unless errors are allowed to bubble, catch and return them\n\t\t\t\t\tif ( conv && s.throws ) {\n\t\t\t\t\t\tresponse = conv( response );\n\t\t\t\t\t} else {\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\tresponse = conv( response );\n\t\t\t\t\t\t} catch ( e ) {\n\t\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\t\tstate: "parsererror",\n\t\t\t\t\t\t\t\terror: conv ? e : "No conversion from " + prev + " to " + current\n\t\t\t\t\t\t\t};\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\treturn { state: "success", data: response };\n}\n\njQuery.extend( {\n\n\t// Counter for holding the number of active queries\n\tactive: 0,\n\n\t// Last-Modified header cache for next request\n\tlastModified: {},\n\tetag: {},\n\n\tajaxSettings: {\n\t\turl: location.href,\n\t\ttype: "GET",\n\t\tisLocal: rlocalProtocol.test( location.protocol ),\n\t\tglobal: true,\n\t\tprocessData: true,\n\t\tasync: true,\n\t\tcontentType: "application/x-www-form-urlencoded; charset=UTF-8",\n\n\t\t/*\n\t\ttimeout: 0,\n\t\tdata: null,\n\t\tdataType: null,\n\t\tusername: null,\n\t\tpassword: null,\n\t\tcache: null,\n\t\tthrows: false,\n\t\ttraditional: false,\n\t\theaders: {},\n\t\t*/\n\n\t\taccepts: {\n\t\t\t"*": allTypes,\n\t\t\ttext: "text/plain",\n\t\t\thtml: "text/html",\n\t\t\txml: "application/xml, text/xml",\n\t\t\tjson: "application/json, text/javascript"\n\t\t},\n\n\t\tcontents: {\n\t\t\txml: /\\bxml\\b/,\n\t\t\thtml: /\\bhtml/,\n\t\t\tjson: /\\bjson\\b/\n\t\t},\n\n\t\tresponseFields: {\n\t\t\txml: "responseXML",\n\t\t\ttext: "responseText",\n\t\t\tjson: "responseJSON"\n\t\t},\n\n\t\t// Data converters\n\t\t// Keys separate source (or catchall "*") and destination types with a single space\n\t\tconverters: {\n\n\t\t\t// Convert anything to text\n\t\t\t"* text": String,\n\n\t\t\t// Text to html (true = no transformation)\n\t\t\t"text html": true,\n\n\t\t\t// Evaluate text as a json expression\n\t\t\t"text json": JSON.parse,\n\n\t\t\t// Parse text as xml\n\t\t\t"text xml": jQuery.parseXML\n\t\t},\n\n\t\t// For options that shouldn\'t be deep extended:\n\t\t// you can add your own custom options here if\n\t\t// and when you create one that shouldn\'t be\n\t\t// deep extended (see ajaxExtend)\n\t\tflatOptions: {\n\t\t\turl: true,\n\t\t\tcontext: true\n\t\t}\n\t},\n\n\t// Creates a full fledged settings object into target\n\t// with both ajaxSettings and settings fields.\n\t// If target is omitted, writes into ajaxSettings.\n\tajaxSetup: function( target, settings ) {\n\t\treturn settings ?\n\n\t\t\t// Building a settings object\n\t\t\tajaxExtend( ajaxExtend( target, jQuery.ajaxSettings ), settings ) :\n\n\t\t\t// Extending ajaxSettings\n\t\t\tajaxExtend( jQuery.ajaxSettings, target );\n\t},\n\n\tajaxPrefilter: addToPrefiltersOrTransports( prefilters ),\n\tajaxTransport: addToPrefiltersOrTransports( transports ),\n\n\t// Main method\n\tajax: function( url, options ) {\n\n\t\t// If url is an object, simulate pre-1.5 signature\n\t\tif ( typeof url === "object" ) {\n\t\t\toptions = url;\n\t\t\turl = undefined;\n\t\t}\n\n\t\t// Force options to be an object\n\t\toptions = options || {};\n\n\t\tvar transport,\n\n\t\t\t// URL without anti-cache param\n\t\t\tcacheURL,\n\n\t\t\t// Response headers\n\t\t\tresponseHeadersString,\n\t\t\tresponseHeaders,\n\n\t\t\t// timeout handle\n\t\t\ttimeoutTimer,\n\n\t\t\t// Url cleanup var\n\t\t\turlAnchor,\n\n\t\t\t// Request state (becomes false upon send and true upon completion)\n\t\t\tcompleted,\n\n\t\t\t// To know if global events are to be dispatched\n\t\t\tfireGlobals,\n\n\t\t\t// Loop variable\n\t\t\ti,\n\n\t\t\t// uncached part of the url\n\t\t\tuncached,\n\n\t\t\t// Create the final options object\n\t\t\ts = jQuery.ajaxSetup( {}, options ),\n\n\t\t\t// Callbacks context\n\t\t\tcallbackContext = s.context || s,\n\n\t\t\t// Context for global events is callbackContext if it is a DOM node or jQuery collection\n\t\t\tglobalEventContext = s.context &&\n\t\t\t\t( callbackContext.nodeType || callbackContext.jquery ) ?\n\t\t\t\tjQuery( callbackContext ) :\n\t\t\t\tjQuery.event,\n\n\t\t\t// Deferreds\n\t\t\tdeferred = jQuery.Deferred(),\n\t\t\tcompleteDeferred = jQuery.Callbacks( "once memory" ),\n\n\t\t\t// Status-dependent callbacks\n\t\t\tstatusCode = s.statusCode || {},\n\n\t\t\t// Headers (they are sent all at once)\n\t\t\trequestHeaders = {},\n\t\t\trequestHeadersNames = {},\n\n\t\t\t// Default abort message\n\t\t\tstrAbort = "canceled",\n\n\t\t\t// Fake xhr\n\t\t\tjqXHR = {\n\t\t\t\treadyState: 0,\n\n\t\t\t\t// Builds headers hashtable if needed\n\t\t\t\tgetResponseHeader: function( key ) {\n\t\t\t\t\tvar match;\n\t\t\t\t\tif ( completed ) {\n\t\t\t\t\t\tif ( !responseHeaders ) {\n\t\t\t\t\t\t\tresponseHeaders = {};\n\t\t\t\t\t\t\twhile ( ( match = rheaders.exec( responseHeadersString ) ) ) {\n\t\t\t\t\t\t\t\tresponseHeaders[ match[ 1 ].toLowerCase() + " " ] =\n\t\t\t\t\t\t\t\t\t( responseHeaders[ match[ 1 ].toLowerCase() + " " ] || [] )\n\t\t\t\t\t\t\t\t\t\t.concat( match[ 2 ] );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\tmatch = responseHeaders[ key.toLowerCase() + " " ];\n\t\t\t\t\t}\n\t\t\t\t\treturn match == null ? null : match.join( ", " );\n\t\t\t\t},\n\n\t\t\t\t// Raw string\n\t\t\t\tgetAllResponseHeaders: function() {\n\t\t\t\t\treturn completed ? responseHeadersString : null;\n\t\t\t\t},\n\n\t\t\t\t// Caches the header\n\t\t\t\tsetRequestHeader: function( name, value ) {\n\t\t\t\t\tif ( completed == null ) {\n\t\t\t\t\t\tname = requestHeadersNames[ name.toLowerCase() ] =\n\t\t\t\t\t\t\trequestHeadersNames[ name.toLowerCase() ] || name;\n\t\t\t\t\t\trequestHeaders[ name ] = value;\n\t\t\t\t\t}\n\t\t\t\t\treturn this;\n\t\t\t\t},\n\n\t\t\t\t// Overrides response content-type header\n\t\t\t\toverrideMimeType: function( type ) {\n\t\t\t\t\tif ( completed == null ) {\n\t\t\t\t\t\ts.mimeType = type;\n\t\t\t\t\t}\n\t\t\t\t\treturn this;\n\t\t\t\t},\n\n\t\t\t\t// Status-dependent callbacks\n\t\t\t\tstatusCode: function( map ) {\n\t\t\t\t\tvar code;\n\t\t\t\t\tif ( map ) {\n\t\t\t\t\t\tif ( completed ) {\n\n\t\t\t\t\t\t\t// Execute the appropriate callbacks\n\t\t\t\t\t\t\tjqXHR.always( map[ jqXHR.status ] );\n\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t// Lazy-add the new callbacks in a way that preserves old ones\n\t\t\t\t\t\t\tfor ( code in map ) {\n\t\t\t\t\t\t\t\tstatusCode[ code ] = [ statusCode[ code ], map[ code ] ];\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\treturn this;\n\t\t\t\t},\n\n\t\t\t\t// Cancel the request\n\t\t\t\tabort: function( statusText ) {\n\t\t\t\t\tvar finalText = statusText || strAbort;\n\t\t\t\t\tif ( transport ) {\n\t\t\t\t\t\ttransport.abort( finalText );\n\t\t\t\t\t}\n\t\t\t\t\tdone( 0, finalText );\n\t\t\t\t\treturn this;\n\t\t\t\t}\n\t\t\t};\n\n\t\t// Attach deferreds\n\t\tdeferred.promise( jqXHR );\n\n\t\t// Add protocol if not provided (prefilters might expect it)\n\t\t// Handle falsy url in the settings object (trac-10093: consistency with old signature)\n\t\t// We also use the url parameter if available\n\t\ts.url = ( ( url || s.url || location.href ) + "" )\n\t\t\t.replace( rprotocol, location.protocol + "//" );\n\n\t\t// Alias method option to type as per ticket trac-12004\n\t\ts.type = options.method || options.type || s.method || s.type;\n\n\t\t// Extract dataTypes list\n\t\ts.dataTypes = ( s.dataType || "*" ).toLowerCase().match( rnothtmlwhite ) || [ "" ];\n\n\t\t// A cross-domain request is in order when the origin doesn\'t match the current origin.\n\t\tif ( s.crossDomain == null ) {\n\t\t\turlAnchor = document.createElement( "a" );\n\n\t\t\t// Support: IE <=8 - 11, Edge 12 - 15\n\t\t\t// IE throws exception on accessing the href property if url is malformed,\n\t\t\t// e.g. http://example.com:80x/\n\t\t\ttry {\n\t\t\t\turlAnchor.href = s.url;\n\n\t\t\t\t// Support: IE <=8 - 11 only\n\t\t\t\t// Anchor\'s host property isn\'t correctly set when s.url is relative\n\t\t\t\turlAnchor.href = urlAnchor.href;\n\t\t\t\ts.crossDomain = originAnchor.protocol + "//" + originAnchor.host !==\n\t\t\t\t\turlAnchor.protocol + "//" + urlAnchor.host;\n\t\t\t} catch ( e ) {\n\n\t\t\t\t// If there is an error parsing the URL, assume it is crossDomain,\n\t\t\t\t// it can be rejected by the transport if it is invalid\n\t\t\t\ts.crossDomain = true;\n\t\t\t}\n\t\t}\n\n\t\t// Convert data if not already a string\n\t\tif ( s.data && s.processData && typeof s.data !== "string" ) {\n\t\t\ts.data = jQuery.param( s.data, s.traditional );\n\t\t}\n\n\t\t// Apply prefilters\n\t\tinspectPrefiltersOrTransports( prefilters, s, options, jqXHR );\n\n\t\t// If request was aborted inside a prefilter, stop there\n\t\tif ( completed ) {\n\t\t\treturn jqXHR;\n\t\t}\n\n\t\t// We can fire global events as of now if asked to\n\t\t// Don\'t fire events if jQuery.event is undefined in an AMD-usage scenario (trac-15118)\n\t\tfireGlobals = jQuery.event && s.global;\n\n\t\t// Watch for a new set of requests\n\t\tif ( fireGlobals && jQuery.active++ === 0 ) {\n\t\t\tjQuery.event.trigger( "ajaxStart" );\n\t\t}\n\n\t\t// Uppercase the type\n\t\ts.type = s.type.toUpperCase();\n\n\t\t// Determine if request has content\n\t\ts.hasContent = !rnoContent.test( s.type );\n\n\t\t// Save the URL in case we\'re toying with the If-Modified-Since\n\t\t// and/or If-None-Match header later on\n\t\t// Remove hash to simplify url manipulation\n\t\tcacheURL = s.url.replace( rhash, "" );\n\n\t\t// More options handling for requests with no content\n\t\tif ( !s.hasContent ) {\n\n\t\t\t// Remember the hash so we can put it back\n\t\t\tuncached = s.url.slice( cacheURL.length );\n\n\t\t\t// If data is available and should be processed, append data to url\n\t\t\tif ( s.data && ( s.processData || typeof s.data === "string" ) ) {\n\t\t\t\tcacheURL += ( rquery.test( cacheURL ) ? "&" : "?" ) + s.data;\n\n\t\t\t\t// trac-9682: remove data so that it\'s not used in an eventual retry\n\t\t\t\tdelete s.data;\n\t\t\t}\n\n\t\t\t// Add or update anti-cache param if needed\n\t\t\tif ( s.cache === false ) {\n\t\t\t\tcacheURL = cacheURL.replace( rantiCache, "$1" );\n\t\t\t\tuncached = ( rquery.test( cacheURL ) ? "&" : "?" ) + "_=" + ( nonce.guid++ ) +\n\t\t\t\t\tuncached;\n\t\t\t}\n\n\t\t\t// Put hash and anti-cache on the URL that will be requested (gh-1732)\n\t\t\ts.url = cacheURL + uncached;\n\n\t\t// Change \'%20\' to \'+\' if this is encoded form body content (gh-2658)\n\t\t} else if ( s.data && s.processData &&\n\t\t\t( s.contentType || "" ).indexOf( "application/x-www-form-urlencoded" ) === 0 ) {\n\t\t\ts.data = s.data.replace( r20, "+" );\n\t\t}\n\n\t\t// Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode.\n\t\tif ( s.ifModified ) {\n\t\t\tif ( jQuery.lastModified[ cacheURL ] ) {\n\t\t\t\tjqXHR.setRequestHeader( "If-Modified-Since", jQuery.lastModified[ cacheURL ] );\n\t\t\t}\n\t\t\tif ( jQuery.etag[ cacheURL ] ) {\n\t\t\t\tjqXHR.setRequestHeader( "If-None-Match", jQuery.etag[ cacheURL ] );\n\t\t\t}\n\t\t}\n\n\t\t// Set the correct header, if data is being sent\n\t\tif ( s.data && s.hasContent && s.contentType !== false || options.contentType ) {\n\t\t\tjqXHR.setRequestHeader( "Content-Type", s.contentType );\n\t\t}\n\n\t\t// Set the Accepts header for the server, depending on the dataType\n\t\tjqXHR.setRequestHeader(\n\t\t\t"Accept",\n\t\t\ts.dataTypes[ 0 ] && s.accepts[ s.dataTypes[ 0 ] ] ?\n\t\t\t\ts.accepts[ s.dataTypes[ 0 ] ] +\n\t\t\t\t\t( s.dataTypes[ 0 ] !== "*" ? ", " + allTypes + "; q=0.01" : "" ) :\n\t\t\t\ts.accepts[ "*" ]\n\t\t);\n\n\t\t// Check for headers option\n\t\tfor ( i in s.headers ) {\n\t\t\tjqXHR.setRequestHeader( i, s.headers[ i ] );\n\t\t}\n\n\t\t// Allow custom headers/mimetypes and early abort\n\t\tif ( s.beforeSend &&\n\t\t\t( s.beforeSend.call( callbackContext, jqXHR, s ) === false || completed ) ) {\n\n\t\t\t// Abort if not done already and return\n\t\t\treturn jqXHR.abort();\n\t\t}\n\n\t\t// Aborting is no longer a cancellation\n\t\tstrAbort = "abort";\n\n\t\t// Install callbacks on deferreds\n\t\tcompleteDeferred.add( s.complete );\n\t\tjqXHR.done( s.success );\n\t\tjqXHR.fail( s.error );\n\n\t\t// Get transport\n\t\ttransport = inspectPrefiltersOrTransports( transports, s, options, jqXHR );\n\n\t\t// If no transport, we auto-abort\n\t\tif ( !transport ) {\n\t\t\tdone( -1, "No Transport" );\n\t\t} else {\n\t\t\tjqXHR.readyState = 1;\n\n\t\t\t// Send global event\n\t\t\tif ( fireGlobals ) {\n\t\t\t\tglobalEventContext.trigger( "ajaxSend", [ jqXHR, s ] );\n\t\t\t}\n\n\t\t\t// If request was aborted inside ajaxSend, stop there\n\t\t\tif ( completed ) {\n\t\t\t\treturn jqXHR;\n\t\t\t}\n\n\t\t\t// Timeout\n\t\t\tif ( s.async && s.timeout > 0 ) {\n\t\t\t\ttimeoutTimer = window.setTimeout( function() {\n\t\t\t\t\tjqXHR.abort( "timeout" );\n\t\t\t\t}, s.timeout );\n\t\t\t}\n\n\t\t\ttry {\n\t\t\t\tcompleted = false;\n\t\t\t\ttransport.send( requestHeaders, done );\n\t\t\t} catch ( e ) {\n\n\t\t\t\t// Rethrow post-completion exceptions\n\t\t\t\tif ( completed ) {\n\t\t\t\t\tthrow e;\n\t\t\t\t}\n\n\t\t\t\t// Propagate others as results\n\t\t\t\tdone( -1, e );\n\t\t\t}\n\t\t}\n\n\t\t// Callback for when everything is done\n\t\tfunction done( status, nativeStatusText, responses, headers ) {\n\t\t\tvar isSuccess, success, error, response, modified,\n\t\t\t\tstatusText = nativeStatusText;\n\n\t\t\t// Ignore repeat invocations\n\t\t\tif ( completed ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tcompleted = true;\n\n\t\t\t// Clear timeout if it exists\n\t\t\tif ( timeoutTimer ) {\n\t\t\t\twindow.clearTimeout( timeoutTimer );\n\t\t\t}\n\n\t\t\t// Dereference transport for early garbage collection\n\t\t\t// (no matter how long the jqXHR object will be used)\n\t\t\ttransport = undefined;\n\n\t\t\t// Cache response headers\n\t\t\tresponseHeadersString = headers || "";\n\n\t\t\t// Set readyState\n\t\t\tjqXHR.readyState = status > 0 ? 4 : 0;\n\n\t\t\t// Determine if successful\n\t\t\tisSuccess = status >= 200 && status < 300 || status === 304;\n\n\t\t\t// Get response data\n\t\t\tif ( responses ) {\n\t\t\t\tresponse = ajaxHandleResponses( s, jqXHR, responses );\n\t\t\t}\n\n\t\t\t// Use a noop converter for missing script but not if jsonp\n\t\t\tif ( !isSuccess &&\n\t\t\t\tjQuery.inArray( "script", s.dataTypes ) > -1 &&\n\t\t\t\tjQuery.inArray( "json", s.dataTypes ) < 0 ) {\n\t\t\t\ts.converters[ "text script" ] = function() {};\n\t\t\t}\n\n\t\t\t// Convert no matter what (that way responseXXX fields are always set)\n\t\t\tresponse = ajaxConvert( s, response, jqXHR, isSuccess );\n\n\t\t\t// If successful, handle type chaining\n\t\t\tif ( isSuccess ) {\n\n\t\t\t\t// Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode.\n\t\t\t\tif ( s.ifModified ) {\n\t\t\t\t\tmodified = jqXHR.getResponseHeader( "Last-Modified" );\n\t\t\t\t\tif ( modified ) {\n\t\t\t\t\t\tjQuery.lastModified[ cacheURL ] = modified;\n\t\t\t\t\t}\n\t\t\t\t\tmodified = jqXHR.getResponseHeader( "etag" );\n\t\t\t\t\tif ( modified ) {\n\t\t\t\t\t\tjQuery.etag[ cacheURL ] = modified;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// if no content\n\t\t\t\tif ( status === 204 || s.type === "HEAD" ) {\n\t\t\t\t\tstatusText = "nocontent";\n\n\t\t\t\t// if not modified\n\t\t\t\t} else if ( status === 304 ) {\n\t\t\t\t\tstatusText = "notmodified";\n\n\t\t\t\t// If we have data, let\'s convert it\n\t\t\t\t} else {\n\t\t\t\t\tstatusText = response.state;\n\t\t\t\t\tsuccess = response.data;\n\t\t\t\t\terror = response.error;\n\t\t\t\t\tisSuccess = !error;\n\t\t\t\t}\n\t\t\t} else {\n\n\t\t\t\t// Extract error from statusText and normalize for non-aborts\n\t\t\t\terror = statusText;\n\t\t\t\tif ( status || !statusText ) {\n\t\t\t\t\tstatusText = "error";\n\t\t\t\t\tif ( status < 0 ) {\n\t\t\t\t\t\tstatus = 0;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Set data for the fake xhr object\n\t\t\tjqXHR.status = status;\n\t\t\tjqXHR.statusText = ( nativeStatusText || statusText ) + "";\n\n\t\t\t// Success/Error\n\t\t\tif ( isSuccess ) {\n\t\t\t\tdeferred.resolveWith( callbackContext, [ success, statusText, jqXHR ] );\n\t\t\t} else {\n\t\t\t\tdeferred.rejectWith( callbackContext, [ jqXHR, statusText, error ] );\n\t\t\t}\n\n\t\t\t// Status-dependent callbacks\n\t\t\tjqXHR.statusCode( statusCode );\n\t\t\tstatusCode = undefined;\n\n\t\t\tif ( fireGlobals ) {\n\t\t\t\tglobalEventContext.trigger( isSuccess ? "ajaxSuccess" : "ajaxError",\n\t\t\t\t\t[ jqXHR, s, isSuccess ? success : error ] );\n\t\t\t}\n\n\t\t\t// Complete\n\t\t\tcompleteDeferred.fireWith( callbackContext, [ jqXHR, statusText ] );\n\n\t\t\tif ( fireGlobals ) {\n\t\t\t\tglobalEventContext.trigger( "ajaxComplete", [ jqXHR, s ] );\n\n\t\t\t\t// Handle the global AJAX counter\n\t\t\t\tif ( !( --jQuery.active ) ) {\n\t\t\t\t\tjQuery.event.trigger( "ajaxStop" );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn jqXHR;\n\t},\n\n\tgetJSON: function( url, data, callback ) {\n\t\treturn jQuery.get( url, data, callback, "json" );\n\t},\n\n\tgetScript: function( url, callback ) {\n\t\treturn jQuery.get( url, undefined, callback, "script" );\n\t}\n} );\n\njQuery.each( [ "get", "post" ], function( _i, method ) {\n\tjQuery[ method ] = function( url, data, callback, type ) {\n\n\t\t// Shift arguments if data argument was omitted\n\t\tif ( isFunction( data ) ) {\n\t\t\ttype = type || callback;\n\t\t\tcallback = data;\n\t\t\tdata = undefined;\n\t\t}\n\n\t\t// The url can be an options object (which then must have .url)\n\t\treturn jQuery.ajax( jQuery.extend( {\n\t\t\turl: url,\n\t\t\ttype: method,\n\t\t\tdataType: type,\n\t\t\tdata: data,\n\t\t\tsuccess: callback\n\t\t}, jQuery.isPlainObject( url ) && url ) );\n\t};\n} );\n\njQuery.ajaxPrefilter( function( s ) {\n\tvar i;\n\tfor ( i in s.headers ) {\n\t\tif ( i.toLowerCase() === "content-type" ) {\n\t\t\ts.contentType = s.headers[ i ] || "";\n\t\t}\n\t}\n} );\n\n\njQuery._evalUrl = function( url, options, doc ) {\n\treturn jQuery.ajax( {\n\t\turl: url,\n\n\t\t// Make this explicit, since user can override this through ajaxSetup (trac-11264)\n\t\ttype: "GET",\n\t\tdataType: "script",\n\t\tcache: true,\n\t\tasync: false,\n\t\tglobal: false,\n\n\t\t// Only evaluate the response if it is successful (gh-4126)\n\t\t// dataFilter is not invoked for failure responses, so using it instead\n\t\t// of the default converter is kludgy but it works.\n\t\tconverters: {\n\t\t\t"text script": function() {}\n\t\t},\n\t\tdataFilter: function( response ) {\n\t\t\tjQuery.globalEval( response, options, doc );\n\t\t}\n\t} );\n};\n\n\njQuery.fn.extend( {\n\twrapAll: function( html ) {\n\t\tvar wrap;\n\n\t\tif ( this[ 0 ] ) {\n\t\t\tif ( isFunction( html ) ) {\n\t\t\t\thtml = html.call( this[ 0 ] );\n\t\t\t}\n\n\t\t\t// The elements to wrap the target around\n\t\t\twrap = jQuery( html, this[ 0 ].ownerDocument ).eq( 0 ).clone( true );\n\n\t\t\tif ( this[ 0 ].parentNode ) {\n\t\t\t\twrap.insertBefore( this[ 0 ] );\n\t\t\t}\n\n\t\t\twrap.map( function() {\n\t\t\t\tvar elem = this;\n\n\t\t\t\twhile ( elem.firstElementChild ) {\n\t\t\t\t\telem = elem.firstElementChild;\n\t\t\t\t}\n\n\t\t\t\treturn elem;\n\t\t\t} ).append( this );\n\t\t}\n\n\t\treturn this;\n\t},\n\n\twrapInner: function( html ) {\n\t\tif ( isFunction( html ) ) {\n\t\t\treturn this.each( function( i ) {\n\t\t\t\tjQuery( this ).wrapInner( html.call( this, i ) );\n\t\t\t} );\n\t\t}\n\n\t\treturn this.each( function() {\n\t\t\tvar self = jQuery( this ),\n\t\t\t\tcontents = self.contents();\n\n\t\t\tif ( contents.length ) {\n\t\t\t\tcontents.wrapAll( html );\n\n\t\t\t} else {\n\t\t\t\tself.append( html );\n\t\t\t}\n\t\t} );\n\t},\n\n\twrap: function( html ) {\n\t\tvar htmlIsFunction = isFunction( html );\n\n\t\treturn this.each( function( i ) {\n\t\t\tjQuery( this ).wrapAll( htmlIsFunction ? html.call( this, i ) : html );\n\t\t} );\n\t},\n\n\tunwrap: function( selector ) {\n\t\tthis.parent( selector ).not( "body" ).each( function() {\n\t\t\tjQuery( this ).replaceWith( this.childNodes );\n\t\t} );\n\t\treturn this;\n\t}\n} );\n\n\njQuery.expr.pseudos.hidden = function( elem ) {\n\treturn !jQuery.expr.pseudos.visible( elem );\n};\njQuery.expr.pseudos.visible = function( elem ) {\n\treturn !!( elem.offsetWidth || elem.offsetHeight || elem.getClientRects().length );\n};\n\n\n\n\njQuery.ajaxSettings.xhr = function() {\n\ttry {\n\t\treturn new window.XMLHttpRequest();\n\t} catch ( e ) {}\n};\n\nvar xhrSuccessStatus = {\n\n\t\t// File protocol always yields status code 0, assume 200\n\t\t0: 200,\n\n\t\t// Support: IE <=9 only\n\t\t// trac-1450: sometimes IE returns 1223 when it should be 204\n\t\t1223: 204\n\t},\n\txhrSupported = jQuery.ajaxSettings.xhr();\n\nsupport.cors = !!xhrSupported && ( "withCredentials" in xhrSupported );\nsupport.ajax = xhrSupported = !!xhrSupported;\n\njQuery.ajaxTransport( function( options ) {\n\tvar callback, errorCallback;\n\n\t// Cross domain only allowed if supported through XMLHttpRequest\n\tif ( support.cors || xhrSupported && !options.crossDomain ) {\n\t\treturn {\n\t\t\tsend: function( headers, complete ) {\n\t\t\t\tvar i,\n\t\t\t\t\txhr = options.xhr();\n\n\t\t\t\txhr.open(\n\t\t\t\t\toptions.type,\n\t\t\t\t\toptions.url,\n\t\t\t\t\toptions.async,\n\t\t\t\t\toptions.username,\n\t\t\t\t\toptions.password\n\t\t\t\t);\n\n\t\t\t\t// Apply custom fields if provided\n\t\t\t\tif ( options.xhrFields ) {\n\t\t\t\t\tfor ( i in options.xhrFields ) {\n\t\t\t\t\t\txhr[ i ] = options.xhrFields[ i ];\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Override mime type if needed\n\t\t\t\tif ( options.mimeType && xhr.overrideMimeType ) {\n\t\t\t\t\txhr.overrideMimeType( options.mimeType );\n\t\t\t\t}\n\n\t\t\t\t// X-Requested-With header\n\t\t\t\t// For cross-domain requests, seeing as conditions for a preflight are\n\t\t\t\t// akin to a jigsaw puzzle, we simply never set it to be sure.\n\t\t\t\t// (it can always be set on a per-request basis or even using ajaxSetup)\n\t\t\t\t// For same-domain requests, won\'t change header if already provided.\n\t\t\t\tif ( !options.crossDomain && !headers[ "X-Requested-With" ] ) {\n\t\t\t\t\theaders[ "X-Requested-With" ] = "XMLHttpRequest";\n\t\t\t\t}\n\n\t\t\t\t// Set headers\n\t\t\t\tfor ( i in headers ) {\n\t\t\t\t\txhr.setRequestHeader( i, headers[ i ] );\n\t\t\t\t}\n\n\t\t\t\t// Callback\n\t\t\t\tcallback = function( type ) {\n\t\t\t\t\treturn function() {\n\t\t\t\t\t\tif ( callback ) {\n\t\t\t\t\t\t\tcallback = errorCallback = xhr.onload =\n\t\t\t\t\t\t\t\txhr.onerror = xhr.onabort = xhr.ontimeout =\n\t\t\t\t\t\t\t\t\txhr.onreadystatechange = null;\n\n\t\t\t\t\t\t\tif ( type === "abort" ) {\n\t\t\t\t\t\t\t\txhr.abort();\n\t\t\t\t\t\t\t} else if ( type === "error" ) {\n\n\t\t\t\t\t\t\t\t// Support: IE <=9 only\n\t\t\t\t\t\t\t\t// On a manual native abort, IE9 throws\n\t\t\t\t\t\t\t\t// errors on any property access that is not readyState\n\t\t\t\t\t\t\t\tif ( typeof xhr.status !== "number" ) {\n\t\t\t\t\t\t\t\t\tcomplete( 0, "error" );\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tcomplete(\n\n\t\t\t\t\t\t\t\t\t\t// File: protocol always yields status 0; see trac-8605, trac-14207\n\t\t\t\t\t\t\t\t\t\txhr.status,\n\t\t\t\t\t\t\t\t\t\txhr.statusText\n\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tcomplete(\n\t\t\t\t\t\t\t\t\txhrSuccessStatus[ xhr.status ] || xhr.status,\n\t\t\t\t\t\t\t\t\txhr.statusText,\n\n\t\t\t\t\t\t\t\t\t// Support: IE <=9 only\n\t\t\t\t\t\t\t\t\t// IE9 has no XHR2 but throws on binary (trac-11426)\n\t\t\t\t\t\t\t\t\t// For XHR2 non-text, let the caller handle it (gh-2498)\n\t\t\t\t\t\t\t\t\t( xhr.responseType || "text" ) !== "text" ||\n\t\t\t\t\t\t\t\t\ttypeof xhr.responseText !== "string" ?\n\t\t\t\t\t\t\t\t\t\t{ binary: xhr.response } :\n\t\t\t\t\t\t\t\t\t\t{ text: xhr.responseText },\n\t\t\t\t\t\t\t\t\txhr.getAllResponseHeaders()\n\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t};\n\t\t\t\t};\n\n\t\t\t\t// Listen to events\n\t\t\t\txhr.onload = callback();\n\t\t\t\terrorCallback = xhr.onerror = xhr.ontimeout = callback( "error" );\n\n\t\t\t\t// Support: IE 9 only\n\t\t\t\t// Use onreadystatechange to replace onabort\n\t\t\t\t// to handle uncaught aborts\n\t\t\t\tif ( xhr.onabort !== undefined ) {\n\t\t\t\t\txhr.onabort = errorCallback;\n\t\t\t\t} else {\n\t\t\t\t\txhr.onreadystatechange = function() {\n\n\t\t\t\t\t\t// Check readyState before timeout as it changes\n\t\t\t\t\t\tif ( xhr.readyState === 4 ) {\n\n\t\t\t\t\t\t\t// Allow onerror to be called first,\n\t\t\t\t\t\t\t// but that will not handle a native abort\n\t\t\t\t\t\t\t// Also, save errorCallback to a variable\n\t\t\t\t\t\t\t// as xhr.onerror cannot be accessed\n\t\t\t\t\t\t\twindow.setTimeout( function() {\n\t\t\t\t\t\t\t\tif ( callback ) {\n\t\t\t\t\t\t\t\t\terrorCallback();\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t} );\n\t\t\t\t\t\t}\n\t\t\t\t\t};\n\t\t\t\t}\n\n\t\t\t\t// Create the abort callback\n\t\t\t\tcallback = callback( "abort" );\n\n\t\t\t\ttry {\n\n\t\t\t\t\t// Do send the request (this may raise an exception)\n\t\t\t\t\txhr.send( options.hasContent && options.data || null );\n\t\t\t\t} catch ( e ) {\n\n\t\t\t\t\t// trac-14683: Only rethrow if this hasn\'t been notified as an error yet\n\t\t\t\t\tif ( callback ) {\n\t\t\t\t\t\tthrow e;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t},\n\n\t\t\tabort: function() {\n\t\t\t\tif ( callback ) {\n\t\t\t\t\tcallback();\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\t}\n} );\n\n\n\n\n// Prevent auto-execution of scripts when no explicit dataType was provided (See gh-2432)\njQuery.ajaxPrefilter( function( s ) {\n\tif ( s.crossDomain ) {\n\t\ts.contents.script = false;\n\t}\n} );\n\n// Install script dataType\njQuery.ajaxSetup( {\n\taccepts: {\n\t\tscript: "text/javascript, application/javascript, " +\n\t\t\t"application/ecmascript, application/x-ecmascript"\n\t},\n\tcontents: {\n\t\tscript: /\\b(?:java|ecma)script\\b/\n\t},\n\tconverters: {\n\t\t"text script": function( text ) {\n\t\t\tjQuery.globalEval( text );\n\t\t\treturn text;\n\t\t}\n\t}\n} );\n\n// Handle cache\'s special case and crossDomain\njQuery.ajaxPrefilter( "script", function( s ) {\n\tif ( s.cache === undefined ) {\n\t\ts.cache = false;\n\t}\n\tif ( s.crossDomain ) {\n\t\ts.type = "GET";\n\t}\n} );\n\n// Bind script tag hack transport\njQuery.ajaxTransport( "script", function( s ) {\n\n\t// This transport only deals with cross domain or forced-by-attrs requests\n\tif ( s.crossDomain || s.scriptAttrs ) {\n\t\tvar script, callback;\n\t\treturn {\n\t\t\tsend: function( _, complete ) {\n\t\t\t\tscript = jQuery( "